ZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy9qYXZhLXRlc3RzLmltbCBiL2phdmEvamF2YS10ZXN0cy9qYXZhLXRlc3RzLmltbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNzRkY2VhCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL2phdmEtdGVzdHMuaW1sCkBAIC0wLDAgKzEsMzUgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8bW9kdWxlIHJlbGF0aXZlUGF0aHM9InRydWUiIHR5cGU9IkpBVkFfTU9EVUxFIiB2ZXJzaW9uPSI0Ij4KKyAgPGNvbXBvbmVudCBuYW1lPSJOZXdNb2R1bGVSb290TWFuYWdlciIgaW5oZXJpdC1jb21waWxlci1vdXRwdXQ9InRydWUiPgorICAgIDxleGNsdWRlLW91dHB1dCAvPgorICAgIDxjb250ZW50IHVybD0iZmlsZTovLyRNT0RVTEVfRElSJCI+CisgICAgICA8c291cmNlRm9sZGVyIHVybD0iZmlsZTovLyRNT0RVTEVfRElSJC90ZXN0U3JjIiBpc1Rlc3RTb3VyY2U9InRydWUiIC8+CisgICAgPC9jb250ZW50PgorICAgIDxvcmRlckVudHJ5IHR5cGU9ImluaGVyaXRlZEpkayIgLz4KKyAgICA8b3JkZXJFbnRyeSB0eXBlPSJzb3VyY2VGb2xkZXIiIGZvclRlc3RzPSJmYWxzZSIgLz4KKyAgICA8b3JkZXJFbnRyeSB0eXBlPSJtb2R1bGUiIG1vZHVsZS1uYW1lPSJ0ZXN0RnJhbWV3b3JrLWphdmEiIC8+CisgICAgPG9yZGVyRW50cnkgdHlwZT0ibW9kdWxlIiBtb2R1bGUtbmFtZT0iamF2YS1pbXBsIiAvPgorICAgIDxvcmRlckVudHJ5IHR5cGU9Im1vZHVsZSIgbW9kdWxlLW5hbWU9ImlkZWEtdWkiIC8+CisgICAgPG9yZGVyRW50cnkgdHlwZT0ibW9kdWxlIiBtb2R1bGUtbmFtZT0iY29tbXVuaXR5LXJlc291cmNlcyIgc2NvcGU9IlJVTlRJTUUiIC8+CisgICAgPG9yZGVyRW50cnkgdHlwZT0ibW9kdWxlIiBtb2R1bGUtbmFtZT0iZXhlY3V0aW9uLWltcGwiIHNjb3BlPSJSVU5USU1FIiAvPgorICAgIDxvcmRlckVudHJ5IHR5cGU9Im1vZHVsZSIgbW9kdWxlLW5hbWU9InBsYXRmb3JtLWFwaSIgLz4KKyAgICA8b3JkZXJFbnRyeSB0eXBlPSJsaWJyYXJ5IiBuYW1lPSJWZWxvY2l0eSIgbGV2ZWw9InByb2plY3QiIC8+CisgICAgPG9yZGVyRW50cnkgdHlwZT0ibW9kdWxlIiBtb2R1bGUtbmFtZT0iamF2YS1pMThuIiAvPgorICAgIDxvcmRlckVudHJ5IHR5cGU9Im1vZHVsZSIgbW9kdWxlLW5hbWU9ImNvbXBpbGVyLWltcGwiIC8+CisgICAgPG9yZGVyRW50cnkgdHlwZT0ibGlicmFyeSIgbmFtZT0iYXNtNCIgbGV2ZWw9InByb2plY3QiIC8+CisgICAgPG9yZGVyRW50cnkgdHlwZT0ibW9kdWxlIiBtb2R1bGUtbmFtZT0iaW5zdHJ1bWVudGF0aW9uLXV0aWwiIC8+CisgICAgPG9yZGVyRW50cnkgdHlwZT0ibGlicmFyeSIgbmFtZT0iR3Jvb3Z5IiBsZXZlbD0icHJvamVjdCIgLz4KKyAgICA8b3JkZXJFbnRyeSB0eXBlPSJtb2R1bGUiIG1vZHVsZS1uYW1lPSJJbnRlbGxpTGFuZy1qYXZhIiBzY29wZT0iUlVOVElNRSIgLz4KKyAgICA8b3JkZXJFbnRyeSB0eXBlPSJtb2R1bGUiIG1vZHVsZS1uYW1lPSJJbnRlbGxpTGFuZy14bWwiIHNjb3BlPSJSVU5USU1FIiAvPgorICAgIDxvcmRlckVudHJ5IHR5cGU9Im1vZHVsZSIgbW9kdWxlLW5hbWU9Imp1bml0IiBzY29wZT0iVEVTVCIgLz4KKyAgICA8b3JkZXJFbnRyeSB0eXBlPSJtb2R1bGUiIG1vZHVsZS1uYW1lPSJ0ZXN0bmciIHNjb3BlPSJURVNUIiAvPgorICAgIDxvcmRlckVudHJ5IHR5cGU9Im1vZHVsZSIgbW9kdWxlLW5hbWU9InVpLWRlc2lnbmVyIiBzY29wZT0iVEVTVCIgLz4KKyAgICA8b3JkZXJFbnRyeSB0eXBlPSJtb2R1bGUiIG1vZHVsZS1uYW1lPSJlY2xpcHNlIiBzY29wZT0iVEVTVCIgLz4KKyAgICA8b3JkZXJFbnRyeSB0eXBlPSJtb2R1bGUiIG1vZHVsZS1uYW1lPSJleGVjdXRpb24tb3BlbmFwaSIgLz4KKyAgICA8b3JkZXJFbnRyeSB0eXBlPSJtb2R1bGUiIG1vZHVsZS1uYW1lPSJwbGF0Zm9ybS10ZXN0cyIgc2NvcGU9IlRFU1QiIC8+CisgICAgPG9yZGVyRW50cnkgdHlwZT0ibW9kdWxlIiBtb2R1bGUtbmFtZT0iSW50ZW50aW9uUG93ZXJQYWNrUGx1Z2luIiBzY29wZT0iVEVTVCIgLz4KKyAgICA8b3JkZXJFbnRyeSB0eXBlPSJtb2R1bGUiIG1vZHVsZS1uYW1lPSJJbnNwZWN0aW9uR2FkZ2V0c1BsdWdpbiIgc2NvcGU9IlRFU1QiIC8+CisgICAgPG9yZGVyRW50cnkgdHlwZT0ibW9kdWxlIiBtb2R1bGUtbmFtZT0iamF2YS1pbmRleGluZy1hcGkiIHNjb3BlPSJURVNUIiAvPgorICA8L2NvbXBvbmVudD4KKzwvbW9kdWxlPgorCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvYW5vbnltb3VzL0Fub255bW91c1BhcmFtZXRlckluQW5vbnltb3VzQ29uc3RydWN0b3IuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9hbm9ueW1vdXMvQW5vbnltb3VzUGFyYW1ldGVySW5Bbm9ueW1vdXNDb25zdHJ1Y3Rvci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYyYTI3MjkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvYW5vbnltb3VzL0Fub255bW91c1BhcmFtZXRlckluQW5vbnltb3VzQ29uc3RydWN0b3IuamF2YQpAQCAtMCwwICsxLDI3IEBACisvKgorICogQ29weXJpZ2h0IDIwMDAtMjAxMiBKZXRCcmFpbnMgcy5yLm8uCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworY2xhc3MgQW5vbnltb3VzUGFyYW1ldGVySW5Bbm9ueW1vdXNDb25zdHJ1Y3RvciB7CisgIEFub255bW91c1BhcmFtZXRlckluQW5vbnltb3VzQ29uc3RydWN0b3IoKSB7CisgICAgbmV3IEJhc2UobmV3IDxjYXJldD5JbnRlcigpIHtwdWJsaWMgdm9pZCBtKCkge319KXt9OworICB9OworfQorCitjbGFzcyBCYXNlIHsKKyAgQmFzZShJbnRlciBpbnRlcikge30KK30KK2ludGVyZmFjZSBJbnRlciB7CisgIHZvaWQgbSgpOworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9hbm9ueW1vdXMvQW5vbnltb3VzUGFyYW1ldGVySW5Bbm9ueW1vdXNDb25zdHJ1Y3RvcjIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9hbm9ueW1vdXMvQW5vbnltb3VzUGFyYW1ldGVySW5Bbm9ueW1vdXNDb25zdHJ1Y3RvcjIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ODgyNDliCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2Fub255bW91cy9Bbm9ueW1vdXNQYXJhbWV0ZXJJbkFub255bW91c0NvbnN0cnVjdG9yMi5qYXZhCkBAIC0wLDAgKzEsMjcgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwMC0yMDEyIEpldEJyYWlucyBzLnIuby4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCitjbGFzcyBBbm9ueW1vdXNQYXJhbWV0ZXJJbkFub255bW91c0NvbnN0cnVjdG9yMiB7CisgIEFub255bW91c1BhcmFtZXRlckluQW5vbnltb3VzQ29uc3RydWN0b3IyKCkgeworICAgIG5ldyA8Y2FyZXQ+QmFzZShuZXcgSW50ZXIoKSB7cHVibGljIHZvaWQgbSgpIHt9fSl7fTsKKyAgfTsKK30KKworY2xhc3MgQmFzZSB7CisgIEJhc2UoSW50ZXIgaW50ZXIpIHt9Cit9CitpbnRlcmZhY2UgSW50ZXIgeworICB2b2lkIG0oKTsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvYW5vbnltb3VzL0luc2lkZUFub255bW91c01ldGhvZC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2Fub255bW91cy9JbnNpZGVBbm9ueW1vdXNNZXRob2QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZWJlOWZmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2Fub255bW91cy9JbnNpZGVBbm9ueW1vdXNNZXRob2QuamF2YQpAQCAtMCwwICsxLDI5IEBACisvKgorICogQ29weXJpZ2h0IDIwMDAtMjAxMiBKZXRCcmFpbnMgcy5yLm8uCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworY2xhc3MgSW5zaWRlQW5vbnltb3VzTWV0aG9kIHsKKyAgSW5zaWRlQW5vbnltb3VzTWV0aG9kKCkgeworICAgIG5ldyBPYmplY3QoKXsKKyAgICAgIHZvaWQgbXkoKSB7CisgICAgICBCYXNlIGIgPSBuZXcgPGNhcmV0PkJhc2UoKXt9OworICAgICAgfQorICAgIH07CisgIH0KK30KKworY2xhc3MgQmFzZSB7fQoraW50ZXJmYWNlIEludGVyIHsKKyAgdm9pZCBtKCk7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2Fub255bW91cy9TaW1wbGUuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9hbm9ueW1vdXMvU2ltcGxlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2JiZjg3ZgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9hbm9ueW1vdXMvU2ltcGxlLmphdmEKQEAgLTAsMCArMSwzMSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDAwLTIwMTIgSmV0QnJhaW5zIHMuci5vLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KK2ltcG9ydCBqYXZhLmxhbmcuT2JqZWN0OworCitjbGFzcyBTaW1wbGUgeworICBPYmplY3QgbzEgPSBuZXcgT2JqZWN0KCl7fTsKKyAgT2JqZWN0IG8yID0gbmV3IE9iamVjdCgpe3tuZXcgT2JqZWN0KCl7fTt9fTsKKworICBTaW1wbGUoKSB7CisgICAgbmV3IE9iamVjdCgpe307CisgICAgbmV3IE9iamVjdCgpe307CisgICAgbmV3IE9iamVjdCgpe307CisgICAgbmV3IE9iamVjdCgpe3tuZXcgT2JqZWN0KCl7fTt9fTsKKyAgICBuZXcgPGNhcmV0Pk9iamVjdCgpe307CisgICAgbmV3IE9iamVjdCgpe307CisgICAgbmV3IE9iamVjdCgpe307CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvYW5vbnltb3VzL1NpbXBsZUluQ29uc3RydWN0b3IuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9hbm9ueW1vdXMvU2ltcGxlSW5Db25zdHJ1Y3Rvci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNkOTQ5MGEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvYW5vbnltb3VzL1NpbXBsZUluQ29uc3RydWN0b3IuamF2YQpAQCAtMCwwICsxLDI2IEBACisvKgorICogQ29weXJpZ2h0IDIwMDAtMjAxMiBKZXRCcmFpbnMgcy5yLm8uCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworY2xhc3MgU2ltcGxlSW5Db25zdHJ1Y3RvciB7CisgIFNpbXBsZUluQ29uc3RydWN0b3IoKSB7CisgICAgbmV3IE9iamVjdCgpe307CisgICAgbmV3IDxjYXJldD5CYXNlKCl7fTsKKyAgfQorfQorCitjbGFzcyBCYXNlIHt9CitpbnRlcmZhY2UgSW50ZXIgeworICB2b2lkIG0oKTsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUVkaXRvci9zbWFydFBzaUVsZW1lbnRQb2ludGVycy9BQ2xhc3MuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlRWRpdG9yL3NtYXJ0UHNpRWxlbWVudFBvaW50ZXJzL0FDbGFzcy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc3Nzk5MWQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUVkaXRvci9zbWFydFBzaUVsZW1lbnRQb2ludGVycy9BQ2xhc3MuamF2YQpAQCAtMCwwICsxLDIgQEAKK2NsYXNzIEFDbGFzc3sKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlRWRpdG9yL3NtYXJ0UHNpRWxlbWVudFBvaW50ZXJzL1Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlRWRpdG9yL3NtYXJ0UHNpRWxlbWVudFBvaW50ZXJzL1Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNjQ1YjM5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVFZGl0b3Ivc21hcnRQc2lFbGVtZW50UG9pbnRlcnMvVGVzdC5qYXZhCkBAIC0wLDAgKzEsMyBAQAorY2xhc3MgVGVzdCB7CisgIEFDbGFzcyBmaWVsZDsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGVTdGF0ZW1lbnQvQWRkTWlzc2luZ1BhcmVuLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGVTdGF0ZW1lbnQvQWRkTWlzc2luZ1BhcmVuLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGFhZjFiMgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0ZVN0YXRlbWVudC9BZGRNaXNzaW5nUGFyZW4uamF2YQpAQCAtMCwwICsxLDcgQEAKKworY2xhc3MgRm9vIHsKKyAgICBhYnN0cmFjdCB2b2lkIGEoKTsKKyAgICB7CisgICAgICAgIGE8Y2FyZXQ+KDsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRlU3RhdGVtZW50L0FkZE1pc3NpbmdQYXJlbl9hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRlU3RhdGVtZW50L0FkZE1pc3NpbmdQYXJlbl9hZnRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNjZjhlYjQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGVTdGF0ZW1lbnQvQWRkTWlzc2luZ1BhcmVuX2FmdGVyLmphdmEKQEAgLTAsMCArMSw4IEBACisKK2NsYXNzIEZvbyB7CisgICAgYWJzdHJhY3Qgdm9pZCBhKCk7CisgICAgCisgICAgeworICAgICAgICBhKCk7PGNhcmV0PgorICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGVTdGF0ZW1lbnQvQWRkTWlzc2luZ1NlbWljb2xvbi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRlU3RhdGVtZW50L0FkZE1pc3NpbmdTZW1pY29sb24uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NjUzMzU4Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRlU3RhdGVtZW50L0FkZE1pc3NpbmdTZW1pY29sb24uamF2YQpAQCAtMCwwICsxLDcgQEAKKworY2xhc3MgRm9vIHsKKyAgICBhYnN0cmFjdCB2b2lkIGEoKTsKKyAgICB7CisgICAgICAgIGEoPGNhcmV0PikKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRlU3RhdGVtZW50L0FkZE1pc3NpbmdTZW1pY29sb25fYWZ0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0ZVN0YXRlbWVudC9BZGRNaXNzaW5nU2VtaWNvbG9uX2FmdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2NmOGViNAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0ZVN0YXRlbWVudC9BZGRNaXNzaW5nU2VtaWNvbG9uX2FmdGVyLmphdmEKQEAgLTAsMCArMSw4IEBACisKK2NsYXNzIEZvbyB7CisgICAgYWJzdHJhY3Qgdm9pZCBhKCk7CisgICAgCisgICAgeworICAgICAgICBhKCk7PGNhcmV0PgorICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGVTdGF0ZW1lbnQvQWZ0ZXJGb3IuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0ZVN0YXRlbWVudC9BZnRlckZvci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVkZDNhOTQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGVTdGF0ZW1lbnQvQWZ0ZXJGb3IuamF2YQpAQCAtMCwwICsxLDYgQEAKK3B1YmxpYyBjbGFzcyBGb28geworICAgIHsKKyAgICAgICAgZm9yKGludCBpID0gMDsgaSA8IDEwMDsgaSsrKSB7CisgICAgICAgIH08Y2FyZXQ+CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0ZVN0YXRlbWVudC9BZnRlckZvcl9hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRlU3RhdGVtZW50L0FmdGVyRm9yX2FmdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWQxNTM5MgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0ZVN0YXRlbWVudC9BZnRlckZvcl9hZnRlci5qYXZhCkBAIC0wLDAgKzEsNyBAQAorcHVibGljIGNsYXNzIEZvbyB7CisgICAgeworICAgICAgICBmb3IoaW50IGkgPSAwOyBpIDwgMTAwOyBpKyspIHsKKyAgICAgICAgfQorICAgICAgICA8Y2FyZXQ+CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0ZVN0YXRlbWVudC9BdEJsb2NrRW5kLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGVTdGF0ZW1lbnQvQXRCbG9ja0VuZC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYxNjM1OTQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGVTdGF0ZW1lbnQvQXRCbG9ja0VuZC5qYXZhCkBAIC0wLDAgKzEsNyBAQAorcHVibGljIGNsYXNzIEZvbyB7CisgICAgeworICAgICAgICBmb3IoaW50IGkgPSAwOyBpIDwgMTAwOyBpKyspIHsKKyAgICAgICAgICAgIHggPSAzOworICAgPGNhcmV0PiAgICAgfQorICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGVTdGF0ZW1lbnQvQXRCbG9ja0VuZF9hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRlU3RhdGVtZW50L0F0QmxvY2tFbmRfYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kN2ZmNGQwCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRlU3RhdGVtZW50L0F0QmxvY2tFbmRfYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDggQEAKK3B1YmxpYyBjbGFzcyBGb28geworICAgIHsKKyAgICAgICAgZm9yKGludCBpID0gMDsgaSA8IDEwMDsgaSsrKSB7CisgICAgICAgICAgICB4ID0gMzsKKyAgICAgICAgfQorICAgICAgICA8Y2FyZXQ+CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0ZVN0YXRlbWVudC9CZWZvcmVGb3IuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0ZVN0YXRlbWVudC9CZWZvcmVGb3IuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYjYxY2Y1Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRlU3RhdGVtZW50L0JlZm9yZUZvci5qYXZhCkBAIC0wLDAgKzEsNiBAQAorcHVibGljIGNsYXNzIEZvbyB7CisgICAgeworICAgICAgICA8Y2FyZXQ+Zm9yIChpbnQgaSA9IDA7IGkgPCAxMDA7IGkrKykgeworICAgICAgICB9CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0ZVN0YXRlbWVudC9CZWZvcmVGb3JfYWZ0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0ZVN0YXRlbWVudC9CZWZvcmVGb3JfYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMWFjY2Q3Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRlU3RhdGVtZW50L0JlZm9yZUZvcl9hZnRlci5qYXZhCkBAIC0wLDAgKzEsNyBAQAorcHVibGljIGNsYXNzIEZvbyB7CisgICAgeworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDEwMDsgaSsrKSB7CisgICAgICAgICAgICA8Y2FyZXQ+CisgICAgICAgIH0KKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRlU3RhdGVtZW50L0JlZm9yZUlmUkJyYWNlLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGVTdGF0ZW1lbnQvQmVmb3JlSWZSQnJhY2UuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNTM5ZTY5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRlU3RhdGVtZW50L0JlZm9yZUlmUkJyYWNlLmphdmEKQEAgLTAsMCArMSw1IEBACitjbGFzcyBUZXN0IHsKKyAgICBUZXN0KGJvb2xlYW4gY29uZGl0aW9uKSB7CisgICAgICAgIGlmIChjb25kaXRpb248Y2FyZXQ+KQorICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGVTdGF0ZW1lbnQvQmVmb3JlSWZSQnJhY2VfYWZ0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0ZVN0YXRlbWVudC9CZWZvcmVJZlJCcmFjZV9hZnRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFlMzMyOTYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGVTdGF0ZW1lbnQvQmVmb3JlSWZSQnJhY2VfYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDcgQEAKK2NsYXNzIFRlc3QgeworICAgIFRlc3QoYm9vbGVhbiBjb25kaXRpb24pIHsKKyAgICAgICAgaWYgKGNvbmRpdGlvbikgeworICAgICAgICAgICAgPGNhcmV0PgorICAgICAgICB9CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0ZVN0YXRlbWVudC9CZWZvcmVTdGF0ZW1lbnQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0ZVN0YXRlbWVudC9CZWZvcmVTdGF0ZW1lbnQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNDc1ZjhiCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRlU3RhdGVtZW50L0JlZm9yZVN0YXRlbWVudC5qYXZhCkBAIC0wLDAgKzEsNSBAQAorcHVibGljIGNsYXNzIEZvbyB7CisgICAgeworPGNhcmV0PiAgICAgICAgeCA9IDM7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0ZVN0YXRlbWVudC9CZWZvcmVTdGF0ZW1lbnRfYWZ0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0ZVN0YXRlbWVudC9CZWZvcmVTdGF0ZW1lbnRfYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NmM4MjViCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRlU3RhdGVtZW50L0JlZm9yZVN0YXRlbWVudF9hZnRlci5qYXZhCkBAIC0wLDAgKzEsNiBAQAorcHVibGljIGNsYXNzIEZvbyB7CisgICAgeworICAgICAgICB4ID0gMzsKKyAgICAgICAgPGNhcmV0PgorICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGVTdGF0ZW1lbnQvQmxvY2suamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0ZVN0YXRlbWVudC9CbG9jay5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRiYzIwYWYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGVTdGF0ZW1lbnQvQmxvY2suamF2YQpAQCAtMCwwICsxLDYgQEAKKworY2xhc3MgRm9vIHsKKyAgICB7CisgICAgICAgIGlmICh4KSB7PGNhcmV0PgorICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGVTdGF0ZW1lbnQvQmxvY2sxLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGVTdGF0ZW1lbnQvQmxvY2sxLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTdiOTQ0MwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0ZVN0YXRlbWVudC9CbG9jazEuamF2YQpAQCAtMCwwICsxLDYgQEAKK3B1YmxpYyBjbGFzcyBGb28geworICAgIHsKKyAgICAgICAgezxjYXJldD4KKyAgICAgICAgfQorICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGVTdGF0ZW1lbnQvQmxvY2sxX2FmdGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGVTdGF0ZW1lbnQvQmxvY2sxX2FmdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGM4YmQyZQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0ZVN0YXRlbWVudC9CbG9jazFfYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDcgQEAKK3B1YmxpYyBjbGFzcyBGb28geworICAgIHsKKyAgICAgICAgeworICAgICAgICAgICAgPGNhcmV0PgorICAgICAgICB9CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0ZVN0YXRlbWVudC9CbG9ja19hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRlU3RhdGVtZW50L0Jsb2NrX2FmdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmZhZjM4MwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0ZVN0YXRlbWVudC9CbG9ja19hZnRlci5qYXZhCkBAIC0wLDAgKzEsOCBAQAorCitjbGFzcyBGb28geworICAgIHsKKyAgICAgICAgaWYgKHgpIHsKKyAgICAgICAgICAgIDxjYXJldD4KKyAgICAgICAgfQorICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGVTdGF0ZW1lbnQvQnJhY2VGaXhlTmV3TGluZS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRlU3RhdGVtZW50L0JyYWNlRml4ZU5ld0xpbmUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZmM3OWY0Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRlU3RhdGVtZW50L0JyYWNlRml4ZU5ld0xpbmUuamF2YQpAQCAtMCwwICsxLDkgQEAKK3B1YmxpYyBjbGFzcyB0ZXN0IHsKKyAgICB2b2lkIGYoKSB7CisgICAgICAgIGludCBrMSA9IDE7CisgICAgICAgIGludCBrMiA9IDI7CisgICAgICAgIGludFtdIGFycmF5ID0gbmV3IGludFtde2sxLCBrMjxjYXJldD4KKworICAgICAgICBTeXN0ZW0ub3V0LnByaW50KGsxKTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRlU3RhdGVtZW50L0JyYWNlRml4ZU5ld0xpbmVfYWZ0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0ZVN0YXRlbWVudC9CcmFjZUZpeGVOZXdMaW5lX2FmdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2ExMjlhOQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0ZVN0YXRlbWVudC9CcmFjZUZpeGVOZXdMaW5lX2FmdGVyLmphdmEKQEAgLTAsMCArMSw5IEBACitwdWJsaWMgY2xhc3MgdGVzdCB7CisgICAgdm9pZCBmKCkgeworICAgICAgICBpbnQgazEgPSAxOworICAgICAgICBpbnQgazIgPSAyOworICAgICAgICBpbnRbXSBhcnJheSA9IG5ldyBpbnRbXXtrMSwgazJ9OworCisgICAgICAgIFN5c3RlbS5vdXQucHJpbnQoazEpOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGVTdGF0ZW1lbnQvQ2RyRW5kbGVzc0xvb3AuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0ZVN0YXRlbWVudC9DZHJFbmRsZXNzTG9vcC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUyMjE2MjIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGVTdGF0ZW1lbnQvQ2RyRW5kbGVzc0xvb3AuamF2YQpAQCAtMCwwICsxLDUgQEAKK3B1YmxpYyBjbGFzcyBUZXN0IHsKKyAgICBwdWJsaWMgaW50IGZvbyhpbnQgaSkgeworICAgICAgICBpbnQgaWkgPSBmb28oMDxjYXJldD4KKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRlU3RhdGVtZW50L0NkckVuZGxlc3NMb29wX2FmdGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGVTdGF0ZW1lbnQvQ2RyRW5kbGVzc0xvb3BfYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNjkwYTQ2OQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0ZVN0YXRlbWVudC9DZHJFbmRsZXNzTG9vcF9hZnRlci5qYXZhCkBAIC0wLDAgKzEsNSBAQAorcHVibGljIGNsYXNzIFRlc3QgeworICAgIHB1YmxpYyBpbnQgZm9vKGludCBpKSB7CisgICAgICAgIGludCBpaSA9IGZvbygwKTs8Y2FyZXQ+CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0ZVN0YXRlbWVudC9Db21wbGV0ZUJyZWFrLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGVTdGF0ZW1lbnQvQ29tcGxldGVCcmVhay5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVkOTViMTEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGVTdGF0ZW1lbnQvQ29tcGxldGVCcmVhay5qYXZhCkBAIC0wLDAgKzEsOCBAQAorCitjbGFzcyBGb28geworICAgIHsKKyAgICAgICAgaWYgKHgpIHsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs8Y2FyZXQ+CisgICAgICAgIH0KKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRlU3RhdGVtZW50L0NvbXBsZXRlQnJlYWtfYWZ0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0ZVN0YXRlbWVudC9Db21wbGV0ZUJyZWFrX2FmdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzhlZTQ1ZAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0ZVN0YXRlbWVudC9Db21wbGV0ZUJyZWFrX2FmdGVyLmphdmEKQEAgLTAsMCArMSw4IEBACisKK2NsYXNzIEZvbyB7CisgICAgeworICAgICAgICBpZiAoeCkgeworICAgICAgICAgICAgYnJlYWs7PGNhcmV0PiAgICAgICAgICAgIAorICAgICAgICB9CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0ZVN0YXRlbWVudC9Db21wbGV0ZUNhbGwuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0ZVN0YXRlbWVudC9Db21wbGV0ZUNhbGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMTNlY2ExCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRlU3RhdGVtZW50L0NvbXBsZXRlQ2FsbC5qYXZhCkBAIC0wLDAgKzEsNiBAQAorCitwdWJsaWMgY2xhc3MgRm9vIHsKKyAgICB7CisgICAgICAgIGZvbzxjYXJldD4oeCk7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0ZVN0YXRlbWVudC9Db21wbGV0ZUNhbGxfYWZ0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0ZVN0YXRlbWVudC9Db21wbGV0ZUNhbGxfYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYzcxNGMyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRlU3RhdGVtZW50L0NvbXBsZXRlQ2FsbF9hZnRlci5qYXZhCkBAIC0wLDAgKzEsNyBAQAorCitwdWJsaWMgY2xhc3MgRm9vIHsKKyAgICB7CisgICAgICAgIGZvbyh4KTsKKyAgICAgICAgPGNhcmV0PgorICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGVTdGF0ZW1lbnQvQ29tcGxldGVDYXRjaC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRlU3RhdGVtZW50L0NvbXBsZXRlQ2F0Y2guamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42Y2Q5Mjc5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRlU3RhdGVtZW50L0NvbXBsZXRlQ2F0Y2guamF2YQpAQCAtMCwwICsxLDggQEAKKworY2xhc3MgRm9vIHsKKyAgICB7CisgICAgICAgIHRyeSB7CisKKyAgICAgICAgfSBjYXRjaDxjYXJldD4KKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRlU3RhdGVtZW50L0NvbXBsZXRlQ2F0Y2hCb2R5LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGVTdGF0ZW1lbnQvQ29tcGxldGVDYXRjaEJvZHkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZGY0MjNmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRlU3RhdGVtZW50L0NvbXBsZXRlQ2F0Y2hCb2R5LmphdmEKQEAgLTAsMCArMSw4IEBACisKK2NsYXNzIEZvbyB7CisgICAgeworICAgICAgICB0cnkgeworCisgICAgICAgIH0gY2F0Y2ggKGE8Y2FyZXQ+IGIpCisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0ZVN0YXRlbWVudC9Db21wbGV0ZUNhdGNoQm9keV9hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRlU3RhdGVtZW50L0NvbXBsZXRlQ2F0Y2hCb2R5X2FmdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTViMzM0NAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0ZVN0YXRlbWVudC9Db21wbGV0ZUNhdGNoQm9keV9hZnRlci5qYXZhCkBAIC0wLDAgKzEsMTAgQEAKKworY2xhc3MgRm9vIHsKKyAgICB7CisgICAgICAgIHRyeSB7CisKKyAgICAgICAgfSBjYXRjaCAoYSBiKSB7CisgICAgICAgICAgICA8Y2FyZXQ+CisgICAgICAgIH0KKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRlU3RhdGVtZW50L0NvbXBsZXRlQ2F0Y2hMUGFyZW4uamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0ZVN0YXRlbWVudC9Db21wbGV0ZUNhdGNoTFBhcmVuLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDAxYmUwNQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0ZVN0YXRlbWVudC9Db21wbGV0ZUNhdGNoTFBhcmVuLmphdmEKQEAgLTAsMCArMSw4IEBACisKK2NsYXNzIEZvbyB7CisgICAgeworICAgICAgICB0cnkgeworCisgICAgICAgIH0gY2F0Y2ggKDxjYXJldD4KKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRlU3RhdGVtZW50L0NvbXBsZXRlQ2F0Y2hMUGFyZW5fYWZ0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0ZVN0YXRlbWVudC9Db21wbGV0ZUNhdGNoTFBhcmVuX2FmdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2M0ZDA5MwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0ZVN0YXRlbWVudC9Db21wbGV0ZUNhdGNoTFBhcmVuX2FmdGVyLmphdmEKQEAgLTAsMCArMSw5IEBACisKK2NsYXNzIEZvbyB7CisgICAgeworICAgICAgICB0cnkgeworCisgICAgICAgIH0gY2F0Y2ggKDxjYXJldD4pIHsKKyAgICAgICAgfQorICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGVTdGF0ZW1lbnQvQ29tcGxldGVDYXRjaFdpdGhFeHByZXNzaW9uLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGVTdGF0ZW1lbnQvQ29tcGxldGVDYXRjaFdpdGhFeHByZXNzaW9uLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmZkNGYzYwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0ZVN0YXRlbWVudC9Db21wbGV0ZUNhdGNoV2l0aEV4cHJlc3Npb24uamF2YQpAQCAtMCwwICsxLDggQEAKKworY2xhc3MgRm9vIHsKKyAgICB7CisgICAgICAgIHRyeSB7CisKKyAgICAgICAgfSBjYXRjaCAoYTxjYXJldD4KKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRlU3RhdGVtZW50L0NvbXBsZXRlQ2F0Y2hXaXRoRXhwcmVzc2lvbl9hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRlU3RhdGVtZW50L0NvbXBsZXRlQ2F0Y2hXaXRoRXhwcmVzc2lvbl9hZnRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBiNDNhNGUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGVTdGF0ZW1lbnQvQ29tcGxldGVDYXRjaFdpdGhFeHByZXNzaW9uX2FmdGVyLmphdmEKQEAgLTAsMCArMSw5IEBACisKK2NsYXNzIEZvbyB7CisgICAgeworICAgICAgICB0cnkgeworCisgICAgICAgIH0gY2F0Y2ggKDxjYXJldD5hKSB7CisgICAgICAgIH0KKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRlU3RhdGVtZW50L0NvbXBsZXRlQ2F0Y2hfYWZ0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0ZVN0YXRlbWVudC9Db21wbGV0ZUNhdGNoX2FmdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2M0ZDA5MwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0ZVN0YXRlbWVudC9Db21wbGV0ZUNhdGNoX2FmdGVyLmphdmEKQEAgLTAsMCArMSw5IEBACisKK2NsYXNzIEZvbyB7CisgICAgeworICAgICAgICB0cnkgeworCisgICAgICAgIH0gY2F0Y2ggKDxjYXJldD4pIHsKKyAgICAgICAgfQorICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGVTdGF0ZW1lbnQvQ29tcGxldGVFbHNlSWYuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0ZVN0YXRlbWVudC9Db21wbGV0ZUVsc2VJZi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE3ZTJlMTEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGVTdGF0ZW1lbnQvQ29tcGxldGVFbHNlSWYuamF2YQpAQCAtMCwwICsxLDkgQEAKK3B1YmxpYyBjbGFzcyBUZXN0IHsKKyAgICBwdWJsaWMgdm9pZCBmb28oaW50IHgpIHsKKyAgICAgICAgaWYgKHggPiAwKSB7CisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oInRydWUiKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigidHJ1ZSIpOworICAgICAgICB9PGNhcmV0PgorICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGVTdGF0ZW1lbnQvQ29tcGxldGVFbHNlSWZfYWZ0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0ZVN0YXRlbWVudC9Db21wbGV0ZUVsc2VJZl9hZnRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNhNGVjNTEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGVTdGF0ZW1lbnQvQ29tcGxldGVFbHNlSWZfYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDEwIEBACitwdWJsaWMgY2xhc3MgVGVzdCB7CisgICAgcHVibGljIHZvaWQgZm9vKGludCB4KSB7CisgICAgICAgIGlmICh4ID4gMCkgeworICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJ0cnVlIik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oInRydWUiKTsKKyAgICAgICAgfQorICAgICAgICA8Y2FyZXQ+CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0ZVN0YXRlbWVudC9Db21wbGV0ZUlmLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGVTdGF0ZW1lbnQvQ29tcGxldGVJZi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFlNDRjZGMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGVTdGF0ZW1lbnQvQ29tcGxldGVJZi5qYXZhCkBAIC0wLDAgKzEsNiBAQAorCitjbGFzcyBGb28geworICAgIHsKKyAgICAgICAgaWYgKGE8Y2FyZXQ+CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0ZVN0YXRlbWVudC9Db21wbGV0ZUlmS2V5d29yZC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRlU3RhdGVtZW50L0NvbXBsZXRlSWZLZXl3b3JkLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzIyNTc5OAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0ZVN0YXRlbWVudC9Db21wbGV0ZUlmS2V5d29yZC5qYXZhCkBAIC0wLDAgKzEsNiBAQAorCitjbGFzcyBmb28geworICAgIHsKKyAgICAgIGlmPGNhcmV0PgorICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGVTdGF0ZW1lbnQvQ29tcGxldGVJZktleXdvcmRTdGF0ZW1lbnRHb2VzVG9UaGVuLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGVTdGF0ZW1lbnQvQ29tcGxldGVJZktleXdvcmRTdGF0ZW1lbnRHb2VzVG9UaGVuLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMThhMTExMAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0ZVN0YXRlbWVudC9Db21wbGV0ZUlmS2V5d29yZFN0YXRlbWVudEdvZXNUb1RoZW4uamF2YQpAQCAtMCwwICsxLDggQEAKKworY2xhc3MgZm9vIHsKKyAgICB7CisgICAgICAgIGlmIDxjYXJldD5mb28oKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBmb28oKSB7fQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0ZVN0YXRlbWVudC9Db21wbGV0ZUlmS2V5d29yZFN0YXRlbWVudEdvZXNUb1RoZW5fYWZ0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0ZVN0YXRlbWVudC9Db21wbGV0ZUlmS2V5d29yZFN0YXRlbWVudEdvZXNUb1RoZW5fYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YTU1NGQwCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRlU3RhdGVtZW50L0NvbXBsZXRlSWZLZXl3b3JkU3RhdGVtZW50R29lc1RvVGhlbl9hZnRlci5qYXZhCkBAIC0wLDAgKzEsMTAgQEAKKworY2xhc3MgZm9vIHsKKyAgICB7CisgICAgICAgIGlmICg8Y2FyZXQ+KSB7CisgICAgICAgICAgICBmb28oKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICB2b2lkIGZvbygpIHt9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRlU3RhdGVtZW50L0NvbXBsZXRlSWZLZXl3b3JkX2FmdGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGVTdGF0ZW1lbnQvQ29tcGxldGVJZktleXdvcmRfYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYjY0NWQyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRlU3RhdGVtZW50L0NvbXBsZXRlSWZLZXl3b3JkX2FmdGVyLmphdmEKQEAgLTAsMCArMSw3IEBACisKK2NsYXNzIGZvbyB7CisgICAgeworICAgICAgICBpZiAoPGNhcmV0PikgeworICAgICAgICB9CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0ZVN0YXRlbWVudC9Db21wbGV0ZUlmTmV4dExpbmVCcmFjZVN0eWxlLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGVTdGF0ZW1lbnQvQ29tcGxldGVJZk5leHRMaW5lQnJhY2VTdHlsZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE0ZjhjYTcKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGVTdGF0ZW1lbnQvQ29tcGxldGVJZk5leHRMaW5lQnJhY2VTdHlsZS5qYXZhCkBAIC0wLDAgKzEsNyBAQAorCitjbGFzcyBGb28KK3sKKyAgICB7CisgICAgICAgIGlmIChhPGNhcmV0PgorICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGVTdGF0ZW1lbnQvQ29tcGxldGVJZk5leHRMaW5lQnJhY2VTdHlsZTIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0ZVN0YXRlbWVudC9Db21wbGV0ZUlmTmV4dExpbmVCcmFjZVN0eWxlMi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA0OGJiMTIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGVTdGF0ZW1lbnQvQ29tcGxldGVJZk5leHRMaW5lQnJhY2VTdHlsZTIuamF2YQpAQCAtMCwwICsxLDkgQEAKKworY2xhc3MgRm9vCit7CisgICAgeworICAgICAgICBpZiAoYTxjYXJldD4pCisgICAgICAgIHsKKyAgICAgICAgfQorICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGVTdGF0ZW1lbnQvQ29tcGxldGVJZk5leHRMaW5lQnJhY2VTdHlsZTJfYWZ0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0ZVN0YXRlbWVudC9Db21wbGV0ZUlmTmV4dExpbmVCcmFjZVN0eWxlMl9hZnRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUzZTM3YmQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGVTdGF0ZW1lbnQvQ29tcGxldGVJZk5leHRMaW5lQnJhY2VTdHlsZTJfYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDEwIEBACisKK2NsYXNzIEZvbworeworICAgIHsKKyAgICAgICAgaWYgKGEpCisgICAgICAgIHsKKyAgICAgICAgICAgIDxjYXJldD4KKyAgICAgICAgfQorICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGVTdGF0ZW1lbnQvQ29tcGxldGVJZk5leHRMaW5lQnJhY2VTdHlsZV9hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRlU3RhdGVtZW50L0NvbXBsZXRlSWZOZXh0TGluZUJyYWNlU3R5bGVfYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41M2UzN2JkCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRlU3RhdGVtZW50L0NvbXBsZXRlSWZOZXh0TGluZUJyYWNlU3R5bGVfYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDEwIEBACisKK2NsYXNzIEZvbworeworICAgIHsKKyAgICAgICAgaWYgKGEpCisgICAgICAgIHsKKyAgICAgICAgICAgIDxjYXJldD4KKyAgICAgICAgfQorICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGVTdGF0ZW1lbnQvQ29tcGxldGVJZlN0YXRlbWVudEdvZXNUb1RoZW4uamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0ZVN0YXRlbWVudC9Db21wbGV0ZUlmU3RhdGVtZW50R29lc1RvVGhlbi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRlZjRmNTIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGVTdGF0ZW1lbnQvQ29tcGxldGVJZlN0YXRlbWVudEdvZXNUb1RoZW4uamF2YQpAQCAtMCwwICsxLDggQEAKKworY2xhc3MgZm9vIHsKKyAgICB7CisgICAgICAgIGlmICg8Y2FyZXQ+Zm9vKCk7CisgICAgfQorICAgIAorICAgIHZvaWQgZm9vKCkge30KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGVTdGF0ZW1lbnQvQ29tcGxldGVJZlN0YXRlbWVudEdvZXNUb1RoZW5fYWZ0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0ZVN0YXRlbWVudC9Db21wbGV0ZUlmU3RhdGVtZW50R29lc1RvVGhlbl9hZnRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhhNTU0ZDAKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGVTdGF0ZW1lbnQvQ29tcGxldGVJZlN0YXRlbWVudEdvZXNUb1RoZW5fYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDEwIEBACisKK2NsYXNzIGZvbyB7CisgICAgeworICAgICAgICBpZiAoPGNhcmV0PikgeworICAgICAgICAgICAgZm9vKCk7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgdm9pZCBmb28oKSB7fQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0ZVN0YXRlbWVudC9Db21wbGV0ZUlmX2FmdGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGVTdGF0ZW1lbnQvQ29tcGxldGVJZl9hZnRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRlYTM0ZjgKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGVTdGF0ZW1lbnQvQ29tcGxldGVJZl9hZnRlci5qYXZhCkBAIC0wLDAgKzEsOCBAQAorCitjbGFzcyBGb28geworICAgIHsKKyAgICAgICAgaWYgKGEpIHsKKyAgICAgICAgICAgIDxjYXJldD4KKyAgICAgICAgfQorICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGVTdGF0ZW1lbnQvQ29tcGxldGVNZXRob2RDYWxsQXRSZXR1cm4uamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0ZVN0YXRlbWVudC9Db21wbGV0ZU1ldGhvZENhbGxBdFJldHVybi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYyMjkwMTIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGVTdGF0ZW1lbnQvQ29tcGxldGVNZXRob2RDYWxsQXRSZXR1cm4uamF2YQpAQCAtMCwwICsxLDcgQEAKK3B1YmxpYyBjbGFzcyBGb28geworICAgIHB1YmxpYyBTdHJpbmcgZm9vKCkgeworICAgICAgICByZXR1cm4gU3RyaW5nLnZhbHVlT2YoCisgICAgICAgICAgICAgICAgMTxjYXJldD4KKyAgICAgICAgKQorICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGVTdGF0ZW1lbnQvQ29tcGxldGVNZXRob2RDYWxsQXRSZXR1cm5fYWZ0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0ZVN0YXRlbWVudC9Db21wbGV0ZU1ldGhvZENhbGxBdFJldHVybl9hZnRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRhMWRiM2EKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGVTdGF0ZW1lbnQvQ29tcGxldGVNZXRob2RDYWxsQXRSZXR1cm5fYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDcgQEAKK3B1YmxpYyBjbGFzcyBGb28geworICAgIHB1YmxpYyBTdHJpbmcgZm9vKCkgeworICAgICAgICByZXR1cm4gU3RyaW5nLnZhbHVlT2YoCisgICAgICAgICAgICAgICAgMQorICAgICAgICApOzxjYXJldD4KKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRlU3RhdGVtZW50L0NvbXBsZXRlU3RyaW5nTGl0ZXJhbC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRlU3RhdGVtZW50L0NvbXBsZXRlU3RyaW5nTGl0ZXJhbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgwZTg3ZDgKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGVTdGF0ZW1lbnQvQ29tcGxldGVTdHJpbmdMaXRlcmFsLmphdmEKQEAgLTAsMCArMSw1IEBACitwdWJsaWMgY2xhc3MgRm9vIHsKKyAgICBwdWJsaWMgdm9pZCBmb28oKSB7CisgICAgICAgIFN0cmluZyBzID0gImFiYzxjYXJldD5kZWYiOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGVTdGF0ZW1lbnQvQ29tcGxldGVTdHJpbmdMaXRlcmFsX2FmdGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGVTdGF0ZW1lbnQvQ29tcGxldGVTdHJpbmdMaXRlcmFsX2FmdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzEwOTM0MQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0ZVN0YXRlbWVudC9Db21wbGV0ZVN0cmluZ0xpdGVyYWxfYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDYgQEAKK3B1YmxpYyBjbGFzcyBGb28geworICAgIHB1YmxpYyB2b2lkIGZvbygpIHsKKyAgICAgICAgU3RyaW5nIHMgPSAiYWJjZGVmIjsKKyAgICAgICAgPGNhcmV0PgorICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGVTdGF0ZW1lbnQvRWxzZUlmLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGVTdGF0ZW1lbnQvRWxzZUlmLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDU5NmY3NgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0ZVN0YXRlbWVudC9FbHNlSWYuamF2YQpAQCAtMCwwICsxLDcgQEAKK2NsYXNzIFRlc3QgeworICAgIHsKKyAgICAgICAgaWYoeCkgeworICAgICAgICAgIHgoKTsKKyAgICAgICAgfSBlbHNlIGlmKDxjYXJldD4pCisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0ZVN0YXRlbWVudC9FbHNlSWZfYWZ0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0ZVN0YXRlbWVudC9FbHNlSWZfYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YjkyZWMwCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRlU3RhdGVtZW50L0Vsc2VJZl9hZnRlci5qYXZhCkBAIC0wLDAgKzEsOCBAQAorY2xhc3MgVGVzdCB7CisgICAgeworICAgICAgICBpZih4KSB7CisgICAgICAgICAgeCgpOworICAgICAgICB9IGVsc2UgaWYgKDxjYXJldD4pIHsKKyAgICAgICAgfQorICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGVTdGF0ZW1lbnQvRW1wdHlCZWZvcmVSZXR1cm4uamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0ZVN0YXRlbWVudC9FbXB0eUJlZm9yZVJldHVybi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU3ZjRjYjUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGVTdGF0ZW1lbnQvRW1wdHlCZWZvcmVSZXR1cm4uamF2YQpAQCAtMCwwICsxLDcgQEAKKworY2xhc3MgRm9vIHsKKyAgICBwdWJsaWMgdm9pZCBmb28oKSB7CisgICAgICAgIDxjYXJldD4KKyAgICAgICAgcmV0dXJuOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGVTdGF0ZW1lbnQvRW1wdHlCZWZvcmVSZXR1cm5fYWZ0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0ZVN0YXRlbWVudC9FbXB0eUJlZm9yZVJldHVybl9hZnRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM2M2IzODQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGVTdGF0ZW1lbnQvRW1wdHlCZWZvcmVSZXR1cm5fYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDggQEAKKworY2xhc3MgRm9vIHsKKyAgICBwdWJsaWMgdm9pZCBmb28oKSB7CisgICAgICAgIAorICAgICAgICA8Y2FyZXQ+CisgICAgICAgIHJldHVybjsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRlU3RhdGVtZW50L0VtcHR5TGluZS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRlU3RhdGVtZW50L0VtcHR5TGluZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNiZmFiYjYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGVTdGF0ZW1lbnQvRW1wdHlMaW5lLmphdmEKQEAgLTAsMCArMSw2IEBACisKK3B1YmxpYyBjbGFzcyBGb28geworICAgIHsKKyAgICAgICAgPGNhcmV0PgorICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGVTdGF0ZW1lbnQvRW1wdHlMaW5lX2FmdGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGVTdGF0ZW1lbnQvRW1wdHlMaW5lX2FmdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODU5ZjcyOAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0ZVN0YXRlbWVudC9FbXB0eUxpbmVfYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDcgQEAKKworcHVibGljIGNsYXNzIEZvbyB7CisgICAgeworICAgICAgICAKKyAgICAgICAgPGNhcmV0PgorICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGVTdGF0ZW1lbnQvRXJyb3JOYXZpZ2F0aW9uLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGVTdGF0ZW1lbnQvRXJyb3JOYXZpZ2F0aW9uLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjJkNmY0MAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0ZVN0YXRlbWVudC9FcnJvck5hdmlnYXRpb24uamF2YQpAQCAtMCwwICsxLDggQEAKKworY2xhc3MgZm9vIHsKKyAgICB7CisgICAgICAgIGlmIChhKSB7CisgICAgICAgICAgICBkbzxjYXJldD4KKyAgICAgICAgfQorICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGVTdGF0ZW1lbnQvRXJyb3JOYXZpZ2F0aW9uX2FmdGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGVTdGF0ZW1lbnQvRXJyb3JOYXZpZ2F0aW9uX2FmdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjI3NTQzNAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0ZVN0YXRlbWVudC9FcnJvck5hdmlnYXRpb25fYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDkgQEAKKworY2xhc3MgZm9vIHsKKyAgICB7CisgICAgICAgIGlmIChhKSB7CisgICAgICAgICAgICBkbyB7CisgICAgICAgICAgICB9IHdoaWxlICg8Y2FyZXQ+KTsKKyAgICAgICAgfQorICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGVTdGF0ZW1lbnQvRmllbGQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0ZVN0YXRlbWVudC9GaWVsZC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdlNjM5MGMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGVTdGF0ZW1lbnQvRmllbGQuamF2YQpAQCAtMCwwICsxLDMgQEAKK3B1YmxpYyBjbGFzcyBUZXN0IHsKKyAgICBTdHJpbmcgczxjYXJldD4KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGVTdGF0ZW1lbnQvRmllbGRXaXRoSW5pdGlhbGl6ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0ZVN0YXRlbWVudC9GaWVsZFdpdGhJbml0aWFsaXplci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEyZDI4MTkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGVTdGF0ZW1lbnQvRmllbGRXaXRoSW5pdGlhbGl6ZXIuamF2YQpAQCAtMCwwICsxLDMgQEAKK3B1YmxpYyBjbGFzcyBUZXN0IHsKKyAgICBTdHJpbmcgcyA9PGNhcmV0PgorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0ZVN0YXRlbWVudC9GaWVsZFdpdGhJbml0aWFsaXplcl9hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRlU3RhdGVtZW50L0ZpZWxkV2l0aEluaXRpYWxpemVyX2FmdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWIwNjJiNQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0ZVN0YXRlbWVudC9GaWVsZFdpdGhJbml0aWFsaXplcl9hZnRlci5qYXZhCkBAIC0wLDAgKzEsMyBAQAorcHVibGljIGNsYXNzIFRlc3QgeworICAgIFN0cmluZyBzID0gPGNhcmV0PjsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGVTdGF0ZW1lbnQvRmllbGRfYWZ0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0ZVN0YXRlbWVudC9GaWVsZF9hZnRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlkMTE1NzQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGVTdGF0ZW1lbnQvRmllbGRfYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDMgQEAKK3B1YmxpYyBjbGFzcyBUZXN0IHsKKyAgICBTdHJpbmcgczs8Y2FyZXQ+Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRlU3RhdGVtZW50L0ZvbGxvd2VkQnlDb21tZW50LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGVTdGF0ZW1lbnQvRm9sbG93ZWRCeUNvbW1lbnQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YTdkZTIwCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRlU3RhdGVtZW50L0ZvbGxvd2VkQnlDb21tZW50LmphdmEKQEAgLTAsMCArMSw2IEBACitwdWJsaWMgY2xhc3MgRm9vIHsKKyAgIHB1YmxpYyB2b2lkIGZvbygpIHsKKyAgICAgICBmb28oPGNhcmV0PgorICAgICAgIC8vIHNvbWUgbGluZSBjb21tZW50CisgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRlU3RhdGVtZW50L0ZvbGxvd2VkQnlDb21tZW50X2FmdGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGVTdGF0ZW1lbnQvRm9sbG93ZWRCeUNvbW1lbnRfYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMDk4OThmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRlU3RhdGVtZW50L0ZvbGxvd2VkQnlDb21tZW50X2FmdGVyLmphdmEKQEAgLTAsMCArMSw2IEBACitwdWJsaWMgY2xhc3MgRm9vIHsKKyAgIHB1YmxpYyB2b2lkIGZvbygpIHsKKyAgICAgICBmb28oKTs8Y2FyZXQ+CisgICAgICAgLy8gc29tZSBsaW5lIGNvbW1lbnQKKyAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGVTdGF0ZW1lbnQvRm9yLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGVTdGF0ZW1lbnQvRm9yLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjZkNmIyZAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0ZVN0YXRlbWVudC9Gb3IuamF2YQpAQCAtMCwwICsxLDcgQEAKKworY2xhc3MgRm9vIHsKKyAgICB7CisgICAgICAgIGZvciAoaW50PGNhcmV0PiBpID0gMDsgaSA8IDEwMDsgaSsrKSB7CisgICAgICAgIH0KKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRlU3RhdGVtZW50L0ZvckJsb2NrLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGVTdGF0ZW1lbnQvRm9yQmxvY2suamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NjQ0YTc1Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRlU3RhdGVtZW50L0ZvckJsb2NrLmphdmEKQEAgLTAsMCArMSw2IEBACisKK2NsYXNzIEZvbyB7CisgICAgeworICAgICAgICBmb3IgKGludDxjYXJldD4gaSA9IDA7IGkgPCAxMDA7IGkrKykKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRlU3RhdGVtZW50L0ZvckJsb2NrX2FmdGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGVTdGF0ZW1lbnQvRm9yQmxvY2tfYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNzYxZmEyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRlU3RhdGVtZW50L0ZvckJsb2NrX2FmdGVyLmphdmEKQEAgLTAsMCArMSw4IEBACisKK2NsYXNzIEZvbyB7CisgICAgeworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDEwMDsgaSsrKSB7CisgICAgICAgICAgICA8Y2FyZXQ+CisgICAgICAgIH0KKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRlU3RhdGVtZW50L0ZvckVhY2guamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0ZVN0YXRlbWVudC9Gb3JFYWNoLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmQ2NzQ1YQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0ZVN0YXRlbWVudC9Gb3JFYWNoLmphdmEKQEAgLTAsMCArMSw2IEBACitjbGFzcyBGb28geworICAgIHsKKyAgICAgICAgTGlzdCBsaXN0OworICAgICAgICBmb3IgKFN0cmluZyBzOmxpc3Q8Y2FyZXQ+KQorICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGVTdGF0ZW1lbnQvRm9yRWFjaF9hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRlU3RhdGVtZW50L0ZvckVhY2hfYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YzlhN2U3Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRlU3RhdGVtZW50L0ZvckVhY2hfYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDggQEAKK2NsYXNzIEZvbyB7CisgICAgeworICAgICAgICBMaXN0IGxpc3Q7CisgICAgICAgIGZvciAoU3RyaW5nIHMgOiBsaXN0KSB7CisgICAgICAgICAgICA8Y2FyZXQ+CisgICAgICAgIH0KKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRlU3RhdGVtZW50L0ZvckluY3JlbWVudEV4cHJlc3Npb25BbmRCb2R5LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGVTdGF0ZW1lbnQvRm9ySW5jcmVtZW50RXhwcmVzc2lvbkFuZEJvZHkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMmE4MWM3Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRlU3RhdGVtZW50L0ZvckluY3JlbWVudEV4cHJlc3Npb25BbmRCb2R5LmphdmEKQEAgLTAsMCArMSw2IEBACisKK2NsYXNzIGZvbyB7CisgICAgeworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDU7IHMudG9TdHJpbmcoPGNhcmV0PgorICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGVTdGF0ZW1lbnQvRm9ySW5jcmVtZW50RXhwcmVzc2lvbkFuZEJvZHlfYWZ0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0ZVN0YXRlbWVudC9Gb3JJbmNyZW1lbnRFeHByZXNzaW9uQW5kQm9keV9hZnRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdjNGQ3NzQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGVTdGF0ZW1lbnQvRm9ySW5jcmVtZW50RXhwcmVzc2lvbkFuZEJvZHlfYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDggQEAKKworY2xhc3MgZm9vIHsKKyAgICB7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgNTsgcy50b1N0cmluZygpKSB7CisgICAgICAgICAgICA8Y2FyZXQ+CisgICAgICAgIH0KKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRlU3RhdGVtZW50L0ZvclN0YXRlbWVudEdlbmVyYXRpb24uamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0ZVN0YXRlbWVudC9Gb3JTdGF0ZW1lbnRHZW5lcmF0aW9uLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDhkNGIyMgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0ZVN0YXRlbWVudC9Gb3JTdGF0ZW1lbnRHZW5lcmF0aW9uLmphdmEKQEAgLTAsMCArMSw1IEBACitwdWJsaWMgY2xhc3MgRm9vIHsKKyAgICB2b2lkIHRlc3QoaW50IGkpIHsKKyAgICAgICAgZm9yPGNhcmV0PgorICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGVTdGF0ZW1lbnQvRm9yU3RhdGVtZW50R2VuZXJhdGlvbl9hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRlU3RhdGVtZW50L0ZvclN0YXRlbWVudEdlbmVyYXRpb25fYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lY2VmYTY5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRlU3RhdGVtZW50L0ZvclN0YXRlbWVudEdlbmVyYXRpb25fYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDYgQEAKK3B1YmxpYyBjbGFzcyBGb28geworICAgIHZvaWQgdGVzdChpbnQgaSkgeworICAgICAgICBmb3IgKDxjYXJldD4pIHsKKyAgICAgICAgfQorICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGVTdGF0ZW1lbnQvRm9yVXBkYXRlR2VuZXJhdGlvbi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRlU3RhdGVtZW50L0ZvclVwZGF0ZUdlbmVyYXRpb24uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NzNiYjZmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRlU3RhdGVtZW50L0ZvclVwZGF0ZUdlbmVyYXRpb24uamF2YQpAQCAtMCwwICsxLDYgQEAKK3B1YmxpYyBjbGFzcyBGb28geworICAgIHZvaWQgdGVzdChpbnQgaSkgeworICAgICAgICBmb3IgKGludCBqID0gMTsgaiA8IDEwPGNhcmV0PikgeworICAgICAgICB9CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0ZVN0YXRlbWVudC9Gb3JVcGRhdGVHZW5lcmF0aW9uX2FmdGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGVTdGF0ZW1lbnQvRm9yVXBkYXRlR2VuZXJhdGlvbl9hZnRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFhMzJjYWEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGVTdGF0ZW1lbnQvRm9yVXBkYXRlR2VuZXJhdGlvbl9hZnRlci5qYXZhCkBAIC0wLDAgKzEsNiBAQAorcHVibGljIGNsYXNzIEZvbyB7CisgICAgdm9pZCB0ZXN0KGludCBpKSB7CisgICAgICAgIGZvciAoaW50IGogPSAxOyBqIDwgMTA7IDxjYXJldD4pIHsKKyAgICAgICAgfQorICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGVTdGF0ZW1lbnQvRm9yX2FmdGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGVTdGF0ZW1lbnQvRm9yX2FmdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzc2MWZhMgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0ZVN0YXRlbWVudC9Gb3JfYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDggQEAKKworY2xhc3MgRm9vIHsKKyAgICB7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMTAwOyBpKyspIHsKKyAgICAgICAgICAgIDxjYXJldD4KKyAgICAgICAgfQorICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGVTdGF0ZW1lbnQvRm9yY2VCbG9jay5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRlU3RhdGVtZW50L0ZvcmNlQmxvY2suamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40Mzg3MzM1Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRlU3RhdGVtZW50L0ZvcmNlQmxvY2suamF2YQpAQCAtMCwwICsxLDkgQEAKKworcHVibGljIGNsYXNzIEZvbyB7CisgICAgeworICAgICAgICBpbnQgYTsKKyAgICAgICAgYSA9IDE7CisgICAgICAgIGlmIChhID09IDE8Y2FyZXQ+KQorICAgICAgICBhID0gMjsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRlU3RhdGVtZW50L0ZvcmNlQmxvY2tfYWZ0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0ZVN0YXRlbWVudC9Gb3JjZUJsb2NrX2FmdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjk0MDNkMwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0ZVN0YXRlbWVudC9Gb3JjZUJsb2NrX2FmdGVyLmphdmEKQEAgLTAsMCArMSwxMSBAQAorCitwdWJsaWMgY2xhc3MgRm9vIHsKKyAgICB7CisgICAgICAgIGludCBhOworICAgICAgICBhID0gMTsKKyAgICAgICAgaWYgKGEgPT0gMSkgeworICAgICAgICAgICAgPGNhcmV0PgorICAgICAgICB9CisgICAgICAgIGEgPSAyOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGVTdGF0ZW1lbnQvRnJvbUphdmFkb2NQYXJhbWV0ZXJEZXNjcmlwdGlvbkVuZFRvTmV4dFBhcmFtZXRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRlU3RhdGVtZW50L0Zyb21KYXZhZG9jUGFyYW1ldGVyRGVzY3JpcHRpb25FbmRUb05leHRQYXJhbWV0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMGQyOTlhCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRlU3RhdGVtZW50L0Zyb21KYXZhZG9jUGFyYW1ldGVyRGVzY3JpcHRpb25FbmRUb05leHRQYXJhbWV0ZXIuamF2YQpAQCAtMCwwICsxLDkgQEAKK2NsYXNzIEZvbyB7CisKKyAgIC8qKgorICAgICogQHBhcmFtIGFyZ3VtZW50ICBmaXJzdCBhcmcgZGVzY3JpcHRpb248Y2FyZXQ+CisgICAgKiBAcGFyYW0gaQorICAgICovCisgICAgdm9pZCBmb28oaW50IGFyZ3VtZW50LCBpbnQgaSkgeworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGVTdGF0ZW1lbnQvRnJvbUphdmFkb2NQYXJhbWV0ZXJEZXNjcmlwdGlvbkVuZFRvTmV4dFBhcmFtZXRlcl9hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRlU3RhdGVtZW50L0Zyb21KYXZhZG9jUGFyYW1ldGVyRGVzY3JpcHRpb25FbmRUb05leHRQYXJhbWV0ZXJfYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iY2ExZTZlCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRlU3RhdGVtZW50L0Zyb21KYXZhZG9jUGFyYW1ldGVyRGVzY3JpcHRpb25FbmRUb05leHRQYXJhbWV0ZXJfYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDkgQEAKK2NsYXNzIEZvbyB7CisKKyAgIC8qKgorICAgICogQHBhcmFtIGFyZ3VtZW50ICBmaXJzdCBhcmcgZGVzY3JpcHRpb24KKyAgICAqIEBwYXJhbSBpICAgICAgICAgPGNhcmV0PgorICAgICovCisgICAgdm9pZCBmb28oaW50IGFyZ3VtZW50LCBpbnQgaSkgeworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGVTdGF0ZW1lbnQvRnJvbUphdmFkb2NQYXJhbWV0ZXJEZXNjcmlwdGlvbk1pZGRsZVRvTmV4dFBhcmFtZXRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRlU3RhdGVtZW50L0Zyb21KYXZhZG9jUGFyYW1ldGVyRGVzY3JpcHRpb25NaWRkbGVUb05leHRQYXJhbWV0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NzhmMTdiCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRlU3RhdGVtZW50L0Zyb21KYXZhZG9jUGFyYW1ldGVyRGVzY3JpcHRpb25NaWRkbGVUb05leHRQYXJhbWV0ZXIuamF2YQpAQCAtMCwwICsxLDkgQEAKK2NsYXNzIEZvbyB7CisKKyAgIC8qKgorICAgICogQHBhcmFtIGFyZ3VtZW50ICBmaXJzdCBhcmcgPGNhcmV0PmRlc2NyaXB0aW9uCisgICAgKiBAcGFyYW0gaQorICAgICovCisgICAgdm9pZCBmb28oaW50IGFyZ3VtZW50LCBpbnQgaSkgeworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGVTdGF0ZW1lbnQvRnJvbUphdmFkb2NQYXJhbWV0ZXJEZXNjcmlwdGlvbk1pZGRsZVRvTmV4dFBhcmFtZXRlcl9hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRlU3RhdGVtZW50L0Zyb21KYXZhZG9jUGFyYW1ldGVyRGVzY3JpcHRpb25NaWRkbGVUb05leHRQYXJhbWV0ZXJfYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iY2ExZTZlCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRlU3RhdGVtZW50L0Zyb21KYXZhZG9jUGFyYW1ldGVyRGVzY3JpcHRpb25NaWRkbGVUb05leHRQYXJhbWV0ZXJfYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDkgQEAKK2NsYXNzIEZvbyB7CisKKyAgIC8qKgorICAgICogQHBhcmFtIGFyZ3VtZW50ICBmaXJzdCBhcmcgZGVzY3JpcHRpb24KKyAgICAqIEBwYXJhbSBpICAgICAgICAgPGNhcmV0PgorICAgICovCisgICAgdm9pZCBmb28oaW50IGFyZ3VtZW50LCBpbnQgaSkgeworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGVTdGF0ZW1lbnQvSURFQTIyMTI1LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGVTdGF0ZW1lbnQvSURFQTIyMTI1LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDdjZmQzOAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0ZVN0YXRlbWVudC9JREVBMjIxMjUuamF2YQpAQCAtMCwwICsxLDYgQEAKKworcHVibGljIGNsYXNzIEp1bmsgeworICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKyAgICAgICAgaW50IGkgPGNhcmV0Pj0gMSAvLyBjb21tZW50CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRlU3RhdGVtZW50L0lERUEyMjEyNV9hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRlU3RhdGVtZW50L0lERUEyMjEyNV9hZnRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYxZmNhMjQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGVTdGF0ZW1lbnQvSURFQTIyMTI1X2FmdGVyLmphdmEKQEAgLTAsMCArMSw2IEBACisKK3B1YmxpYyBjbGFzcyBKdW5rIHsKKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisgICAgICAgIGludCBpID0gMTsgLy8gY29tbWVudDxjYXJldD4KKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGVTdGF0ZW1lbnQvSURFQTIyMzg1LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGVTdGF0ZW1lbnQvSURFQTIyMzg1LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTkwNTEyMgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0ZVN0YXRlbWVudC9JREVBMjIzODUuamF2YQpAQCAtMCwwICsxLDYgQEAKK2ltcG9ydCBzdGF0aWMgamF2YS51dDxjYXJldD5pbC4qCisKK3B1YmxpYyBjbGFzcyBKdW5rIHsKKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRlU3RhdGVtZW50L0lERUEyMjM4NV9hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRlU3RhdGVtZW50L0lERUEyMjM4NV9hZnRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQwZDQ0NmIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGVTdGF0ZW1lbnQvSURFQTIyMzg1X2FmdGVyLmphdmEKQEAgLTAsMCArMSw2IEBACitpbXBvcnQgc3RhdGljIGphdmEudXRpbC4qOzxjYXJldD4KKworcHVibGljIGNsYXNzIEp1bmsgeworICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGVTdGF0ZW1lbnQvSURFQTI1MTM5LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGVTdGF0ZW1lbnQvSURFQTI1MTM5LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2YxMTk3YgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0ZVN0YXRlbWVudC9JREVBMjUxMzkuamF2YQpAQCAtMCwwICsxLDUgQEAKKworY2xhc3MgRm9vIHsKKyAgICBAVGVzdAorICAgICAgcHVibGljIHZvaWQgdGVzdFZhbHVlT2YoPGNhcmV0PikKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0ZVN0YXRlbWVudC9JREVBMjUxMzlfYWZ0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0ZVN0YXRlbWVudC9JREVBMjUxMzlfYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NGFlZGI4Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRlU3RhdGVtZW50L0lERUEyNTEzOV9hZnRlci5qYXZhCkBAIC0wLDAgKzEsOCBAQAorCitjbGFzcyBGb28geworICAgIEBUZXN0CisgICAgcHVibGljIHZvaWQgdGVzdFZhbHVlT2YoKQorICAgIHsKKyAgICAgICAgPGNhcmV0PgorICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0ZVN0YXRlbWVudC9JREVBREVWMTA5My5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRlU3RhdGVtZW50L0lERUFERVYxMDkzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGY3ZWY4OAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0ZVN0YXRlbWVudC9JREVBREVWMTA5My5qYXZhCkBAIC0wLDAgKzEsNiBAQAorY2xhc3MgRm9vIHsKKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgZm9vKGludCB4PGNhcmV0PikgeworICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBiYXIoaW50IHgsIGludCB5KSB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigpOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGVTdGF0ZW1lbnQvSURFQURFVjEwOTNfYWZ0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0ZVN0YXRlbWVudC9JREVBREVWMTA5M19hZnRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY0ZGFlNTAKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGVTdGF0ZW1lbnQvSURFQURFVjEwOTNfYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDggQEAKK2NsYXNzIEZvbyB7CisgICAgcHVibGljIHN0YXRpYyB2b2lkIGZvbyhpbnQgeCkgeworICAgICAgICA8Y2FyZXQ+CisgICAgfQorICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBiYXIoaW50IHgsIGludCB5KSB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigpOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGVTdGF0ZW1lbnQvSURFQURFVjEzMDE5LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGVTdGF0ZW1lbnQvSURFQURFVjEzMDE5LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjU2ZTYxMwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0ZVN0YXRlbWVudC9JREVBREVWMTMwMTkuamF2YQpAQCAtMCwwICsxLDUgQEAKKworY2xhc3MgVAoreworICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpPGNhcmV0PgorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0ZVN0YXRlbWVudC9JREVBREVWMTMwMTlfYWZ0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0ZVN0YXRlbWVudC9JREVBREVWMTMwMTlfYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZDhkOTA5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRlU3RhdGVtZW50L0lERUFERVYxMzAxOV9hZnRlci5qYXZhCkBAIC0wLDAgKzEsOCBAQAorCitjbGFzcyBUCit7CisgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykKKyAgICB7CisgICAgICAgIDxjYXJldD4KKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRlU3RhdGVtZW50L0lERUFERVYxNzEwLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGVTdGF0ZW1lbnQvSURFQURFVjE3MTAuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zY2E2ZjE2Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRlU3RhdGVtZW50L0lERUFERVYxNzEwLmphdmEKQEAgLTAsMCArMSwzIEBACitwdWJsaWMgY2xhc3MgRm9vIHsKKyAgICBwdWJsaWMgdm9pZCBmb28oKSB0aHJvd3MgRXhjZXB0aW9uIDxjYXJldD4KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0ZVN0YXRlbWVudC9JREVBREVWMTcxMF9hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRlU3RhdGVtZW50L0lERUFERVYxNzEwX2FmdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmNiZWE5YQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0ZVN0YXRlbWVudC9JREVBREVWMTcxMF9hZnRlci5qYXZhCkBAIC0wLDAgKzEsNSBAQAorcHVibGljIGNsYXNzIEZvbyB7CisgICAgcHVibGljIHZvaWQgZm9vKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIDxjYXJldD4KKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGVTdGF0ZW1lbnQvSURFQURFVjIwNzEzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGVTdGF0ZW1lbnQvSURFQURFVjIwNzEzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGUzOGE2NAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0ZVN0YXRlbWVudC9JREVBREVWMjA3MTMuamF2YQpAQCAtMCwwICsxLDggQEAKKworY2xhc3MgVCB7CisgICAgdm9pZCB0ZXN0KE9iamVjdCBhKSB7CisgICAgICAgIGlmICh0cnVlKSA8Y2FyZXQ+CisgICAgICAgIGlmIChhICE9IG51bGwpCisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImEgPSAiICsgYS50b1N0cmluZygpKTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRlU3RhdGVtZW50L0lERUFERVYyMDcxM19hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRlU3RhdGVtZW50L0lERUFERVYyMDcxM19hZnRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIzNjk5ZGQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGVTdGF0ZW1lbnQvSURFQURFVjIwNzEzX2FmdGVyLmphdmEKQEAgLTAsMCArMSwxMCBAQAorCitjbGFzcyBUIHsKKyAgICB2b2lkIHRlc3QoT2JqZWN0IGEpIHsKKyAgICAgICAgaWYgKHRydWUpIHsKKyAgICAgICAgICAgIDxjYXJldD4KKyAgICAgICAgfQorICAgICAgICBpZiAoYSAhPSBudWxsKQorICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJhID0gIiArIGEudG9TdHJpbmcoKSk7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0ZVN0YXRlbWVudC9JREVBREVWNDA0NzkuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0ZVN0YXRlbWVudC9JREVBREVWNDA0NzkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZGEyNGNkCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRlU3RhdGVtZW50L0lERUFERVY0MDQ3OS5qYXZhCkBAIC0wLDAgKzEsNiBAQAorCitwdWJsaWMgY2xhc3MgSnVuayB7CisgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworICAgICAgICBpbnRbXSBhcnIgPSBuZXcgaW50W117MSwyLDN9PGNhcmV0PgorICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0ZVN0YXRlbWVudC9JREVBREVWNDA0NzlfYWZ0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0ZVN0YXRlbWVudC9JREVBREVWNDA0NzlfYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNjFjNGNhCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRlU3RhdGVtZW50L0lERUFERVY0MDQ3OV9hZnRlci5qYXZhCkBAIC0wLDAgKzEsNiBAQAorCitwdWJsaWMgY2xhc3MgSnVuayB7CisgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworICAgICAgICBpbnRbXSBhcnIgPSBuZXcgaW50W117MSwgMiwgM307PGNhcmV0PgorICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0ZVN0YXRlbWVudC9JREVBREVWNDM0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGVTdGF0ZW1lbnQvSURFQURFVjQzNC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk3NmIwYWUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGVTdGF0ZW1lbnQvSURFQURFVjQzNC5qYXZhCkBAIC0wLDAgKzEsNiBAQAorY2xhc3MgRm9vIHsKKyAgICB7CisgICAgICAgIGlmICh0cnVlKSA8Y2FyZXQ+CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigpOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGVTdGF0ZW1lbnQvSURFQURFVjQzNF9hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRlU3RhdGVtZW50L0lERUFERVY0MzRfYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MTlkMmRmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRlU3RhdGVtZW50L0lERUFERVY0MzRfYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDggQEAKK2NsYXNzIEZvbyB7CisgICAgeworICAgICAgICBpZiAodHJ1ZSkgeworICAgICAgICAgICAgPGNhcmV0PgorICAgICAgICB9CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigpOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGVTdGF0ZW1lbnQvSWYuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0ZVN0YXRlbWVudC9JZi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjViMjcyZTEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGVTdGF0ZW1lbnQvSWYuamF2YQpAQCAtMCwwICsxLDcgQEAKK3B1YmxpYyBjbGFzcyBGb28geworICAgIHsKKyAgICAgICAgaWY8Y2FyZXQ+ICh4KQorICAgICAgICB7CisgICAgICAgIH0KKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRlU3RhdGVtZW50L0lmX2FmdGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGVTdGF0ZW1lbnQvSWZfYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNjAxZTI2Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRlU3RhdGVtZW50L0lmX2FmdGVyLmphdmEKQEAgLTAsMCArMSw3IEBACitwdWJsaWMgY2xhc3MgRm9vIHsKKyAgICB7CisgICAgICAgIGlmICh4KSB7CisgICAgICAgICAgICA8Y2FyZXQ+CisgICAgICAgIH0KKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRlU3RhdGVtZW50L0luQ29tbWVudC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRlU3RhdGVtZW50L0luQ29tbWVudC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYxYTU3NmYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGVTdGF0ZW1lbnQvSW5Db21tZW50LmphdmEKQEAgLTAsMCArMSw2IEBACisKK3B1YmxpYyBjbGFzcyBUZXN0IHsKKyAgICAvKio8Y2FyZXQ+CisgICAgcHVibGljIHZvaWQgZm9vKCkgeworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGVTdGF0ZW1lbnQvSW5Db21tZW50Mi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRlU3RhdGVtZW50L0luQ29tbWVudDIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ODI0NmQzCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRlU3RhdGVtZW50L0luQ29tbWVudDIuamF2YQpAQCAtMCwwICsxLDggQEAKKworcHVibGljIGNsYXNzIFRlc3QgeworICAgIC8qKgorICAgICAqIGFiY2Q8Y2FyZXQ+ZWZnaAorICAgICAqLworICAgIHB1YmxpYyB2b2lkIGZvbygpIHsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRlU3RhdGVtZW50L0luQ29tbWVudDJfYWZ0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0ZVN0YXRlbWVudC9JbkNvbW1lbnQyX2FmdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTA0YWVhZQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0ZVN0YXRlbWVudC9JbkNvbW1lbnQyX2FmdGVyLmphdmEKQEAgLTAsMCArMSw5IEBACisKK3B1YmxpYyBjbGFzcyBUZXN0IHsKKyAgICAvKioKKyAgICAgKiBhYmNkZWZnaAorICAgICAqIDxjYXJldD4KKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBmb28oKSB7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0ZVN0YXRlbWVudC9JbkNvbW1lbnQzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGVTdGF0ZW1lbnQvSW5Db21tZW50My5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU5MDJlMjgKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGVTdGF0ZW1lbnQvSW5Db21tZW50My5qYXZhCkBAIC0wLDAgKzEsNiBAQAorCitwdWJsaWMgY2xhc3MgVGVzdCB7CisgICAgcHVibGljIHZvaWQgZm9vKCkgeworICAgICAgICAvLyBTb21lIDxjYXJldD4gY29tbWVudAorICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGVTdGF0ZW1lbnQvSW5Db21tZW50M19hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRlU3RhdGVtZW50L0luQ29tbWVudDNfYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YjY2MmUxCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRlU3RhdGVtZW50L0luQ29tbWVudDNfYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDcgQEAKKworcHVibGljIGNsYXNzIFRlc3QgeworICAgIHB1YmxpYyB2b2lkIGZvbygpIHsKKyAgICAgICAgLy8gU29tZSAgY29tbWVudAorICAgICAgICAvLyA8Y2FyZXQ+CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0ZVN0YXRlbWVudC9JbkNvbW1lbnQ0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGVTdGF0ZW1lbnQvSW5Db21tZW50NC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA3ZjhiYmUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGVTdGF0ZW1lbnQvSW5Db21tZW50NC5qYXZhCkBAIC0wLDAgKzEsNyBAQAorCitwdWJsaWMgY2xhc3MgVGVzdCB7CisgICAgcHVibGljIHZvaWQgZm9vKCkgeworICAgICAgICAvKjxjYXJldD4KKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJmb28iKTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRlU3RhdGVtZW50L0luQ29tbWVudDRfYWZ0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0ZVN0YXRlbWVudC9JbkNvbW1lbnQ0X2FmdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTlmNTI0NwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0ZVN0YXRlbWVudC9JbkNvbW1lbnQ0X2FmdGVyLmphdmEKQEAgLTAsMCArMSw5IEBACisKK3B1YmxpYyBjbGFzcyBUZXN0IHsKKyAgICBwdWJsaWMgdm9pZCBmb28oKSB7CisgICAgICAgIC8qCisgICAgICAgIDxjYXJldD4KKyAgICAgICAgICovCisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiZm9vIik7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0ZVN0YXRlbWVudC9JbkNvbW1lbnRfYWZ0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0ZVN0YXRlbWVudC9JbkNvbW1lbnRfYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMDdkMjA2Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRlU3RhdGVtZW50L0luQ29tbWVudF9hZnRlci5qYXZhCkBAIC0wLDAgKzEsOCBAQAorCitwdWJsaWMgY2xhc3MgVGVzdCB7CisgICAgLyoqCisgICAgICogPGNhcmV0PgorICAgICAqLworICAgIHB1YmxpYyB2b2lkIGZvbygpIHsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRlU3RhdGVtZW50L0luUHJlY2VlZGluZ0JsYW5rcy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRlU3RhdGVtZW50L0luUHJlY2VlZGluZ0JsYW5rcy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM3MmM1YzkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGVTdGF0ZW1lbnQvSW5QcmVjZWVkaW5nQmxhbmtzLmphdmEKQEAgLTAsMCArMSw2IEBACitwdWJsaWMgY2xhc3MgVGVzdCB7CisgICAgeworICAgICAgICB4ID0gMjsKKyAgICA8Y2FyZXQ+ICAgIGZvbygpOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGVTdGF0ZW1lbnQvSW5QcmVjZWVkaW5nQmxhbmtzX2FmdGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGVTdGF0ZW1lbnQvSW5QcmVjZWVkaW5nQmxhbmtzX2FmdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2U0YzU1MwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0ZVN0YXRlbWVudC9JblByZWNlZWRpbmdCbGFua3NfYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDcgQEAKK3B1YmxpYyBjbGFzcyBUZXN0IHsKKyAgICB7CisgICAgICAgIHggPSAyOworICAgICAgICBmb28oKTsKKyAgICAgICAgPGNhcmV0PgorICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGVTdGF0ZW1lbnQvSW5jb21wbGV0ZUNhbGwuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0ZVN0YXRlbWVudC9JbmNvbXBsZXRlQ2FsbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU3YjAzYWMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGVTdGF0ZW1lbnQvSW5jb21wbGV0ZUNhbGwuamF2YQpAQCAtMCwwICsxLDcgQEAKKworcHVibGljIGNsYXNzIEZvbyB7CisgICAgeworICAgICAgICBmb288Y2FyZXQ+KAorICAgICAgICBmb28oKTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRlU3RhdGVtZW50L0luY29tcGxldGVDYWxsX2FmdGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGVTdGF0ZW1lbnQvSW5jb21wbGV0ZUNhbGxfYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MDhkZTFlCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRlU3RhdGVtZW50L0luY29tcGxldGVDYWxsX2FmdGVyLmphdmEKQEAgLTAsMCArMSw3IEBACisKK3B1YmxpYyBjbGFzcyBGb28geworICAgIHsKKyAgICAgICAgZm9vKCk7PGNhcmV0PgorICAgICAgICBmb28oKTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRlU3RhdGVtZW50L0luY29tcGxldGVFbHNlSWYuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0ZVN0YXRlbWVudC9JbmNvbXBsZXRlRWxzZUlmLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTI3ZDNlZAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0ZVN0YXRlbWVudC9JbmNvbXBsZXRlRWxzZUlmLmphdmEKQEAgLTAsMCArMSw4IEBACitjbGFzcyBGb28geworICAgIGJvb2xlYW4gYTsKKyAgICB7CisgICAgICAgIGlmIChhKSB7CisgICAgICAgIH0gZWw8Y2FyZXQ+c2UKKyAgICAgICAgYSA9IDI7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0ZVN0YXRlbWVudC9JbmNvbXBsZXRlRWxzZUlmX2FmdGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGVTdGF0ZW1lbnQvSW5jb21wbGV0ZUVsc2VJZl9hZnRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmViNjQ3ODUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGVTdGF0ZW1lbnQvSW5jb21wbGV0ZUVsc2VJZl9hZnRlci5qYXZhCkBAIC0wLDAgKzEsMTEgQEAKK2NsYXNzIEZvbyB7CisgICAgYm9vbGVhbiBhOworCisgICAgeworICAgICAgICBpZiAoYSkgeworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgPGNhcmV0PgorICAgICAgICB9CisgICAgICAgIGEgPSAyOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGVTdGF0ZW1lbnQvSW5kZW50YXRpb24uamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0ZVN0YXRlbWVudC9JbmRlbnRhdGlvbi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRlNTZlZDUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGVTdGF0ZW1lbnQvSW5kZW50YXRpb24uamF2YQpAQCAtMCwwICsxLDggQEAKKworY2xhc3MgZm9vIHsKKyAgICB7CisgICAgICAgIGlmIChhKSB7CisgICAgICAgICAgICBpZihhPGNhcmV0PgorICAgICAgICB9CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0ZVN0YXRlbWVudC9JbmRlbnRhdGlvbl9hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRlU3RhdGVtZW50L0luZGVudGF0aW9uX2FmdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTExZWQzZAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0ZVN0YXRlbWVudC9JbmRlbnRhdGlvbl9hZnRlci5qYXZhCkBAIC0wLDAgKzEsMTAgQEAKKworY2xhc3MgZm9vIHsKKyAgICB7CisgICAgICAgIGlmIChhKSB7CisgICAgICAgICAgICBpZiAoYSkgeworICAgICAgICAgICAgICAgIDxjYXJldD4KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGVTdGF0ZW1lbnQvSW50ZXJmYWNlTWV0aG9kU2VtaWNvbG9uLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGVTdGF0ZW1lbnQvSW50ZXJmYWNlTWV0aG9kU2VtaWNvbG9uLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTg3ZWM5NQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0ZVN0YXRlbWVudC9JbnRlcmZhY2VNZXRob2RTZW1pY29sb24uamF2YQpAQCAtMCwwICsxLDQgQEAKK2ludGVyZmFjZSBJbnRlcmZhY2VNZXRob2RTZW1pY29sb24geworICAgIHZvaWQgZm9vKFN0cmluZyBzKTxjYXJldD4KKyAgICBPYmplY3QgYmFyKCk7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRlU3RhdGVtZW50L0ludGVyZmFjZU1ldGhvZFNlbWljb2xvbl9hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRlU3RhdGVtZW50L0ludGVyZmFjZU1ldGhvZFNlbWljb2xvbl9hZnRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVkNjdiOGQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGVTdGF0ZW1lbnQvSW50ZXJmYWNlTWV0aG9kU2VtaWNvbG9uX2FmdGVyLmphdmEKQEAgLTAsMCArMSw0IEBACitpbnRlcmZhY2UgSW50ZXJmYWNlTWV0aG9kU2VtaWNvbG9uIHsKKyAgICB2b2lkIGZvbyhTdHJpbmcgcyk7PGNhcmV0PgorICAgIE9iamVjdCBiYXIoKTsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGVTdGF0ZW1lbnQvTGFzdEphdmFkb2NQYXJhbWV0ZXJEZXNjcmlwdGlvbi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRlU3RhdGVtZW50L0xhc3RKYXZhZG9jUGFyYW1ldGVyRGVzY3JpcHRpb24uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNjFmOGJhCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRlU3RhdGVtZW50L0xhc3RKYXZhZG9jUGFyYW1ldGVyRGVzY3JpcHRpb24uamF2YQpAQCAtMCwwICsxLDEwIEBACitjbGFzcyBGb28geworCisgICAgLyoqCisgICAgICogCisgICAgICogQHBhcmFtIGkgIGRlc2MKKyAgICAgKiBAcGFyYW0gaiAgZGVzYzxjYXJldD4KKyAgICAgKi8KKyAgICB2b2lkIHRlc3QoaW50IGksIGludCBqKSB7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0ZVN0YXRlbWVudC9MYXN0SmF2YWRvY1BhcmFtZXRlckRlc2NyaXB0aW9uVG9SZXR1cm4uamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0ZVN0YXRlbWVudC9MYXN0SmF2YWRvY1BhcmFtZXRlckRlc2NyaXB0aW9uVG9SZXR1cm4uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44Yjg2YjJhCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRlU3RhdGVtZW50L0xhc3RKYXZhZG9jUGFyYW1ldGVyRGVzY3JpcHRpb25Ub1JldHVybi5qYXZhCkBAIC0wLDAgKzEsMTEgQEAKK2NsYXNzIEZvbyB7CisKKyAgICAvKioKKyAgICAgKiAKKyAgICAgKiBAcGFyYW0gaSAgZGVzYworICAgICAqIEBwYXJhbSBqICBkZXNjPGNhcmV0PgorICAgICAqIEByZXR1cm4KKyAgICAgKi8KKyAgICBpbnQgdGVzdChpbnQgaSwgaW50IGopIHsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRlU3RhdGVtZW50L0xhc3RKYXZhZG9jUGFyYW1ldGVyRGVzY3JpcHRpb25Ub1JldHVybl9hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRlU3RhdGVtZW50L0xhc3RKYXZhZG9jUGFyYW1ldGVyRGVzY3JpcHRpb25Ub1JldHVybl9hZnRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE2NjljOTkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGVTdGF0ZW1lbnQvTGFzdEphdmFkb2NQYXJhbWV0ZXJEZXNjcmlwdGlvblRvUmV0dXJuX2FmdGVyLmphdmEKQEAgLTAsMCArMSwxMSBAQAorY2xhc3MgRm9vIHsKKworICAgIC8qKgorICAgICAqIAorICAgICAqIEBwYXJhbSBpICBkZXNjCisgICAgICogQHBhcmFtIGogIGRlc2MKKyAgICAgKiBAcmV0dXJuPGNhcmV0PgorICAgICAqLworICAgIGludCB0ZXN0KGludCBpLCBpbnQgaikgeworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGVTdGF0ZW1lbnQvTGFzdEphdmFkb2NQYXJhbWV0ZXJEZXNjcmlwdGlvbl9hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRlU3RhdGVtZW50L0xhc3RKYXZhZG9jUGFyYW1ldGVyRGVzY3JpcHRpb25fYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYWU4MjVkCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRlU3RhdGVtZW50L0xhc3RKYXZhZG9jUGFyYW1ldGVyRGVzY3JpcHRpb25fYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDExIEBACitjbGFzcyBGb28geworCisgICAgLyoqCisgICAgICogCisgICAgICogQHBhcmFtIGkgIGRlc2MKKyAgICAgKiBAcGFyYW0gaiAgZGVzYworICAgICAqIDxjYXJldD4KKyAgICAgKi8KKyAgICB2b2lkIHRlc3QoaW50IGksIGludCBqKSB7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0ZVN0YXRlbWVudC9NZXRob2QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0ZVN0YXRlbWVudC9NZXRob2QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOGVhZGFiCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRlU3RhdGVtZW50L01ldGhvZC5qYXZhCkBAIC0wLDAgKzEsMyBAQAorcHVibGljIGNsYXNzIFRlc3QgeworICAgdm9pZCBmb28oPGNhcmV0PgorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0ZVN0YXRlbWVudC9NZXRob2RfYWZ0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0ZVN0YXRlbWVudC9NZXRob2RfYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMWNlMzk0Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRlU3RhdGVtZW50L01ldGhvZF9hZnRlci5qYXZhCkBAIC0wLDAgKzEsNSBAQAorcHVibGljIGNsYXNzIFRlc3QgeworICAgIHZvaWQgZm9vKCkgeworICAgICAgICA8Y2FyZXQ+CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0ZVN0YXRlbWVudC9NdWx0aWxpbmVSZXR1cm4uamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0ZVN0YXRlbWVudC9NdWx0aWxpbmVSZXR1cm4uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOWZiOTU4Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRlU3RhdGVtZW50L011bHRpbGluZVJldHVybi5qYXZhCkBAIC0wLDAgKzEsNiBAQAorY2xhc3MgVGVzdCB7CisgIE9iamVjdCBtZXRob2QoKSB7CisgICAgcmV0dXJuCisgICAgICBudWxsPGNhcmV0PgorICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRlU3RhdGVtZW50L011bHRpbGluZVJldHVybl9hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRlU3RhdGVtZW50L011bHRpbGluZVJldHVybl9hZnRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdkY2JlMjcKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGVTdGF0ZW1lbnQvTXVsdGlsaW5lUmV0dXJuX2FmdGVyLmphdmEKQEAgLTAsMCArMSw2IEBACitjbGFzcyBUZXN0IHsKKyAgT2JqZWN0IG1ldGhvZCgpIHsKKyAgICAgIHJldHVybgorICAgICAgICAgICAgICBudWxsOzxjYXJldD4KKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0ZVN0YXRlbWVudC9OZXdJblBhcmVudGhlc2VzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGVTdGF0ZW1lbnQvTmV3SW5QYXJlbnRoZXNlcy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc0ODNlZDYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGVTdGF0ZW1lbnQvTmV3SW5QYXJlbnRoZXNlcy5qYXZhCkBAIC0wLDAgKzEsNiBAQAorCitjbGFzcyBmb28geworICAgIHsKKyAgICAgICAgT2JqZWN0IGQgPSAoICggU3RyaW5nICkgbmV3IFN0cmluZygpPGNhcmV0PgorICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGVTdGF0ZW1lbnQvTmV3SW5QYXJlbnRoZXNlc19hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRlU3RhdGVtZW50L05ld0luUGFyZW50aGVzZXNfYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYmRkOWMwCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRlU3RhdGVtZW50L05ld0luUGFyZW50aGVzZXNfYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDYgQEAKKworY2xhc3MgZm9vIHsKKyAgICB7CisgICAgICAgIE9iamVjdCBkID0gKChTdHJpbmcpIG5ldyBTdHJpbmcoKSk7PGNhcmV0PgorICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGVTdGF0ZW1lbnQvTm9CbG9ja1JldHVybi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRlU3RhdGVtZW50L05vQmxvY2tSZXR1cm4uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZWNjN2E3Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRlU3RhdGVtZW50L05vQmxvY2tSZXR1cm4uamF2YQpAQCAtMCwwICsxLDUgQEAKK3B1YmxpYyBjbGFzcyBUZXN0IHsKKyAgICBwdWJsaWMgdm9pZCBmb28oKSB7CisgICAgICAgIGlmIChpKSByZXR1cm48Y2FyZXQ+OworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGVTdGF0ZW1lbnQvTm9CbG9ja1JldHVybl9hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRlU3RhdGVtZW50L05vQmxvY2tSZXR1cm5fYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNWUwYzM0Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRlU3RhdGVtZW50L05vQmxvY2tSZXR1cm5fYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDYgQEAKK3B1YmxpYyBjbGFzcyBUZXN0IHsKKyAgICBwdWJsaWMgdm9pZCBmb28oKSB7CisgICAgICAgIGlmIChpKSByZXR1cm47CisgICAgICAgIDxjYXJldD4KKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRlU3RhdGVtZW50L05vRXJyb3JzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGVTdGF0ZW1lbnQvTm9FcnJvcnMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MTMxODlhCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRlU3RhdGVtZW50L05vRXJyb3JzLmphdmEKQEAgLTAsMCArMSw2IEBACisKK3B1YmxpYyBjbGFzcyBUZXN0IHsKKyAgICBwdWJsaWMgdm9pZCBmb28oKSB7CisgICAgICAgIGludCB4IDxjYXJldD49IDI7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0ZVN0YXRlbWVudC9Ob0Vycm9yc19hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRlU3RhdGVtZW50L05vRXJyb3JzX2FmdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDNkYzMwOQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0ZVN0YXRlbWVudC9Ob0Vycm9yc19hZnRlci5qYXZhCkBAIC0wLDAgKzEsNyBAQAorCitwdWJsaWMgY2xhc3MgVGVzdCB7CisgICAgcHVibGljIHZvaWQgZm9vKCkgeworICAgICAgICBpbnQgeCA9IDI7CisgICAgICAgIDxjYXJldD4KKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRlU3RhdGVtZW50L05vU3BhY2VBZnRlclNlbWljb2xvbi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRlU3RhdGVtZW50L05vU3BhY2VBZnRlclNlbWljb2xvbi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhhMGIzZTAKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGVTdGF0ZW1lbnQvTm9TcGFjZUFmdGVyU2VtaWNvbG9uLmphdmEKQEAgLTAsMCArMSw2IEBACitwdWJsaWMgY2xhc3MgRm9vIHsKKyAgICB2b2lkIHRlc3QoaW50IGkpIHsKKyAgICAgICAgZm9yIChpbnQgaiA9IDE8Y2FyZXQ+KSB7CisgICAgICAgIH0KKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRlU3RhdGVtZW50L05vU3BhY2VBZnRlclNlbWljb2xvbl9hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRlU3RhdGVtZW50L05vU3BhY2VBZnRlclNlbWljb2xvbl9hZnRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY0OWQ2MTIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGVTdGF0ZW1lbnQvTm9TcGFjZUFmdGVyU2VtaWNvbG9uX2FmdGVyLmphdmEKQEAgLTAsMCArMSw2IEBACitwdWJsaWMgY2xhc3MgRm9vIHsKKyAgICB2b2lkIHRlc3QoaW50IGkpIHsKKyAgICAgICAgZm9yIChpbnQgaiA9IDE7PGNhcmV0PikgeworICAgICAgICB9CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0ZVN0YXRlbWVudC9Ob1VubmVjZXNzYXJ5RW1wdHlMaW5lQXRDb2RlQmxvY2suamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0ZVN0YXRlbWVudC9Ob1VubmVjZXNzYXJ5RW1wdHlMaW5lQXRDb2RlQmxvY2suamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MTJiMWUxCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRlU3RhdGVtZW50L05vVW5uZWNlc3NhcnlFbXB0eUxpbmVBdENvZGVCbG9jay5qYXZhCkBAIC0wLDAgKzEsNyBAQAorcHVibGljIGNsYXNzIEZvbyB7CisgICAgdm9pZCB0ZXN0KGludCBpKSB7CisgICAgICAgIGlmIChpID4gMDxjYXJldD4pIHsKKworICAgICAgICB9CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0ZVN0YXRlbWVudC9Ob1VubmVjZXNzYXJ5RW1wdHlMaW5lQXRDb2RlQmxvY2tfYWZ0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0ZVN0YXRlbWVudC9Ob1VubmVjZXNzYXJ5RW1wdHlMaW5lQXRDb2RlQmxvY2tfYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOTY2OTVlCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRlU3RhdGVtZW50L05vVW5uZWNlc3NhcnlFbXB0eUxpbmVBdENvZGVCbG9ja19hZnRlci5qYXZhCkBAIC0wLDAgKzEsNyBAQAorcHVibGljIGNsYXNzIEZvbyB7CisgICAgdm9pZCB0ZXN0KGludCBpKSB7CisgICAgICAgIGlmIChpID4gMCkgeworICAgICAgICAgICAgPGNhcmV0PgorICAgICAgICB9CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0ZVN0YXRlbWVudC9Ob25BYnN0cmFjdE1ldGhvZFdpdGhTZW1pY29sb24uamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0ZVN0YXRlbWVudC9Ob25BYnN0cmFjdE1ldGhvZFdpdGhTZW1pY29sb24uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZDBlOTM4Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRlU3RhdGVtZW50L05vbkFic3RyYWN0TWV0aG9kV2l0aFNlbWljb2xvbi5qYXZhCkBAIC0wLDAgKzEsNCBAQAorCitwdWJsaWMgY2xhc3MgRm9vIHsKKyAgIHZvaWQgPGNhcmV0PmZvbygpOworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0ZVN0YXRlbWVudC9Ob25BYnN0cmFjdE1ldGhvZFdpdGhTZW1pY29sb25fYWZ0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0ZVN0YXRlbWVudC9Ob25BYnN0cmFjdE1ldGhvZFdpdGhTZW1pY29sb25fYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOTg0NWNkCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRlU3RhdGVtZW50L05vbkFic3RyYWN0TWV0aG9kV2l0aFNlbWljb2xvbl9hZnRlci5qYXZhCkBAIC0wLDAgKzEsNiBAQAorCitwdWJsaWMgY2xhc3MgRm9vIHsKKyAgICB2b2lkIGZvbygpIHsKKyAgICAgICAgPGNhcmV0PgorICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGVTdGF0ZW1lbnQvUGFyZW50aGVzaXplZC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRlU3RhdGVtZW50L1BhcmVudGhlc2l6ZWQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OGMzYzc3Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRlU3RhdGVtZW50L1BhcmVudGhlc2l6ZWQuamF2YQpAQCAtMCwwICsxLDYgQEAKKworY2xhc3MgRm9vIHsKKyAgICB7CisgICAgICAgIHR4MiA9IChsb25nKSAodmN4ICsgdnc8Y2FyZXQ+CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0ZVN0YXRlbWVudC9QYXJlbnRoZXNpemVkX2FmdGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGVTdGF0ZW1lbnQvUGFyZW50aGVzaXplZF9hZnRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNlY2MwOTBhCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRlU3RhdGVtZW50L1BhcmVudGhlc2l6ZWRfYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDYgQEAKKworY2xhc3MgRm9vIHsKKyAgICB7CisgICAgICAgIHR4MiA9IChsb25nKSAodmN4ICsgdncpOzxjYXJldD4KKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRlU3RhdGVtZW50L1JldHVybi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRlU3RhdGVtZW50L1JldHVybi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg5ZDFiNTIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGVTdGF0ZW1lbnQvUmV0dXJuLmphdmEKQEAgLTAsMCArMSw3IEBACitwdWJsaWMgY2xhc3MgVGVzdCB7CisgICAgcHVibGljIHZvaWQgZm9vKCkgeworICAgICAgICBpZih4KSB7CisgICAgICAgICAgICByZXR1cm47PGNhcmV0PgorICAgICAgICB9CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0ZVN0YXRlbWVudC9SZXR1cm5Gcm9tTm9uVm9pZC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRlU3RhdGVtZW50L1JldHVybkZyb21Ob25Wb2lkLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDdlMjU2NwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0ZVN0YXRlbWVudC9SZXR1cm5Gcm9tTm9uVm9pZC5qYXZhCkBAIC0wLDAgKzEsNiBAQAorCitwdWJsaWMgY2xhc3MgRm9vIHsKKyAgICBwdWJsaWMgaW50IGZvbygpIHsKKyAgICAgIHJldHVybjxjYXJldD4KKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRlU3RhdGVtZW50L1JldHVybkZyb21Ob25Wb2lkX2FmdGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGVTdGF0ZW1lbnQvUmV0dXJuRnJvbU5vblZvaWRfYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYmRiOWI4Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRlU3RhdGVtZW50L1JldHVybkZyb21Ob25Wb2lkX2FmdGVyLmphdmEKQEAgLTAsMCArMSw2IEBACisKK3B1YmxpYyBjbGFzcyBGb28geworICAgIHB1YmxpYyBpbnQgZm9vKCkgeworICAgICAgICByZXR1cm48Y2FyZXQ+OworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGVTdGF0ZW1lbnQvUmV0dXJuRnJvbVZvaWQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0ZVN0YXRlbWVudC9SZXR1cm5Gcm9tVm9pZC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk3YTFkZmIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGVTdGF0ZW1lbnQvUmV0dXJuRnJvbVZvaWQuamF2YQpAQCAtMCwwICsxLDcgQEAKKworY2xhc3MgVGVzdCB7CisgICAgdm9pZCB0ZXN0KE9iamVjdCBvKSB7CisgICAgICAgIGlmIChvID09IG51bGwpIHJldHVybjxjYXJldD4KKyAgICAgICAgU3RyaW5nIGZvbyA9ICJmb28iOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGVTdGF0ZW1lbnQvUmV0dXJuRnJvbVZvaWRfYWZ0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0ZVN0YXRlbWVudC9SZXR1cm5Gcm9tVm9pZF9hZnRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI1NzYwNTkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGVTdGF0ZW1lbnQvUmV0dXJuRnJvbVZvaWRfYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDcgQEAKKworY2xhc3MgVGVzdCB7CisgICAgdm9pZCB0ZXN0KE9iamVjdCBvKSB7CisgICAgICAgIGlmIChvID09IG51bGwpIHJldHVybjs8Y2FyZXQ+CisgICAgICAgIFN0cmluZyBmb28gPSAiZm9vIjsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRlU3RhdGVtZW50L1JldHVybl9hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRlU3RhdGVtZW50L1JldHVybl9hZnRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjljMDdlYjkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGVTdGF0ZW1lbnQvUmV0dXJuX2FmdGVyLmphdmEKQEAgLTAsMCArMSw4IEBACitwdWJsaWMgY2xhc3MgVGVzdCB7CisgICAgcHVibGljIHZvaWQgZm9vKCkgeworICAgICAgICBpZih4KSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgPGNhcmV0PgorICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGVTdGF0ZW1lbnQvU0NSMTExNDcuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0ZVN0YXRlbWVudC9TQ1IxMTE0Ny5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc1MDIwZmMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGVTdGF0ZW1lbnQvU0NSMTExNDcuamF2YQpAQCAtMCwwICsxLDkgQEAKKworcHVibGljIGNsYXNzIEZvbyB7CisgICAgeworICAgICAgICBpbnQgeCA9IDA7CisgICAgICAgIGlmICh4ID09IDApIHsKKyAgICAgICAgICAgIDxjYXJldD4KKyAgICAgICAgfQorICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGVTdGF0ZW1lbnQvU0NSMTExNDdfYWZ0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0ZVN0YXRlbWVudC9TQ1IxMTE0N19hZnRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVjNDI2OTgKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGVTdGF0ZW1lbnQvU0NSMTExNDdfYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDEwIEBACisKK3B1YmxpYyBjbGFzcyBGb28geworICAgIHsKKyAgICAgICAgaW50IHggPSAwOworICAgICAgICBpZiAoeCA9PSAwKSB7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIDxjYXJldD4KKyAgICAgICAgfQorICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGVTdGF0ZW1lbnQvU0NSMjI5MDQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0ZVN0YXRlbWVudC9TQ1IyMjkwNC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhjNGM0N2YKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGVTdGF0ZW1lbnQvU0NSMjI5MDQuamF2YQpAQCAtMCwwICsxLDQgQEAKK2ludGVyZmFjZSBUZXN0IHsKKyAgICB2b2lkIGZvbyhTdHJpbmcgcyk8Y2FyZXQ+CisgICAgT2JqZWN0IGJhcigpOworfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRlU3RhdGVtZW50L1NDUjIyOTA0X2FmdGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGVTdGF0ZW1lbnQvU0NSMjI5MDRfYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMTA2OTVjCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRlU3RhdGVtZW50L1NDUjIyOTA0X2FmdGVyLmphdmEKQEAgLTAsMCArMSw0IEBACitpbnRlcmZhY2UgVGVzdCB7CisgICAgdm9pZCBmb28oU3RyaW5nIHMpOzxjYXJldD4KKyAgICBPYmplY3QgYmFyKCk7Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGVTdGF0ZW1lbnQvU0NSMzAyMjcuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0ZVN0YXRlbWVudC9TQ1IzMDIyNy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU4NDkwNTQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGVTdGF0ZW1lbnQvU0NSMzAyMjcuamF2YQpAQCAtMCwwICsxLDE2IEBACitwdWJsaWMgYWJzdHJhY3QgY2xhc3MgQSB7CisgICAgYWJzdHJhY3Qgdm9pZCBmKGJvb2xlYW4gYik7CisKKyAgICBBIElNUEwgPSBuZXcgQSgpIHsKKyAgICAgIHZvaWQgZihib29sZWFuIGIpIHsKKyAgICAgICAgaWYgKGIpCisgICAgICAgICAgZih0cnVlKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgZihmYWxzZSk7CisgICAgICAgICAgZihmYWxzZSk7CisgICAgICAgIH0gICAgICAgIAorICAgICAgICBmb3IoaW50IGkgPSAwOyBpIDwgNTsgaSsrKQorICAgICAgICAgIGYodHJ1ZSk7CisgICAgICB9CisgICAgfTsgPGNhcmV0PgorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRlU3RhdGVtZW50L1NDUjMwMjI3X2FmdGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGVTdGF0ZW1lbnQvU0NSMzAyMjdfYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZjlmOWJiCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRlU3RhdGVtZW50L1NDUjMwMjI3X2FmdGVyLmphdmEKQEAgLTAsMCArMSwxNiBAQAorcHVibGljIGFic3RyYWN0IGNsYXNzIEEgeworICAgIGFic3RyYWN0IHZvaWQgZihib29sZWFuIGIpOworCisgICAgQSBJTVBMID0gbmV3IEEoKSB7CisgICAgICAgIHZvaWQgZihib29sZWFuIGIpIHsKKyAgICAgICAgICAgIGlmIChiKQorICAgICAgICAgICAgICAgIGYodHJ1ZSk7CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBmKGZhbHNlKTsKKyAgICAgICAgICAgICAgICBmKGZhbHNlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgNTsgaSsrKQorICAgICAgICAgICAgICAgIGYodHJ1ZSk7CisgICAgICAgIH0KKyAgICB9OzxjYXJldD4KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0ZVN0YXRlbWVudC9TQ1IzNjExMC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRlU3RhdGVtZW50L1NDUjM2MTEwLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjcwYTdlZAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0ZVN0YXRlbWVudC9TQ1IzNjExMC5qYXZhCkBAIC0wLDAgKzEsOCBAQAorcHVibGljIGVudW0gVHJhbnNhY3Rpb25BdHRyaWJ1dGVUeXBlIHsKK01BTkRBVE9SWSwKK1JFUVVJUkVELAorUkVRVUlSRVNORVcsCitTVVBQT1JUUywKK05PVFNVUFBPUlRFRCwKK05FVkU8Y2FyZXQ+UgorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRlU3RhdGVtZW50L1NDUjM2MTEwX2FmdGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGVTdGF0ZW1lbnQvU0NSMzYxMTBfYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYWRiMjkxCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRlU3RhdGVtZW50L1NDUjM2MTEwX2FmdGVyLmphdmEKQEAgLTAsMCArMSw4IEBACitwdWJsaWMgZW51bSBUcmFuc2FjdGlvbkF0dHJpYnV0ZVR5cGUgeworTUFOREFUT1JZLAorUkVRVUlSRUQsCitSRVFVSVJFU05FVywKK1NVUFBPUlRTLAorTk9UU1VQUE9SVEVELAorICAgIE5FVkVSLDxjYXJldD4KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0ZVN0YXRlbWVudC9TQ1IzNzMzMS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRlU3RhdGVtZW50L1NDUjM3MzMxLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjFmYWQyMQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0ZVN0YXRlbWVudC9TQ1IzNzMzMS5qYXZhCkBAIC0wLDAgKzEsNiBAQAorCitwdWJsaWMgY2xhc3MgSnVuayB7CisgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworICAgICAgICBTdHJpbmcgcyA9ICg8Y2FyZXQ+CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0ZVN0YXRlbWVudC9TQ1IzNzMzMV9hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRlU3RhdGVtZW50L1NDUjM3MzMxX2FmdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjM4MWFkYgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0ZVN0YXRlbWVudC9TQ1IzNzMzMV9hZnRlci5qYXZhCkBAIC0wLDAgKzEsNiBAQAorCitwdWJsaWMgY2xhc3MgSnVuayB7CisgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworICAgICAgICBTdHJpbmcgcyA9ICg8Y2FyZXQ+KTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRlU3RhdGVtZW50L1NwYWNlQWZ0ZXJTZW1pY29sb24uamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0ZVN0YXRlbWVudC9TcGFjZUFmdGVyU2VtaWNvbG9uLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGEwYjNlMAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0ZVN0YXRlbWVudC9TcGFjZUFmdGVyU2VtaWNvbG9uLmphdmEKQEAgLTAsMCArMSw2IEBACitwdWJsaWMgY2xhc3MgRm9vIHsKKyAgICB2b2lkIHRlc3QoaW50IGkpIHsKKyAgICAgICAgZm9yIChpbnQgaiA9IDE8Y2FyZXQ+KSB7CisgICAgICAgIH0KKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRlU3RhdGVtZW50L1NwYWNlQWZ0ZXJTZW1pY29sb25fYWZ0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0ZVN0YXRlbWVudC9TcGFjZUFmdGVyU2VtaWNvbG9uX2FmdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzYzYzI1MgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0ZVN0YXRlbWVudC9TcGFjZUFmdGVyU2VtaWNvbG9uX2FmdGVyLmphdmEKQEAgLTAsMCArMSw2IEBACitwdWJsaWMgY2xhc3MgRm9vIHsKKyAgICB2b2lkIHRlc3QoaW50IGkpIHsKKyAgICAgICAgZm9yIChpbnQgaiA9IDE7IDxjYXJldD4pIHsKKyAgICAgICAgfQorICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGVTdGF0ZW1lbnQvU3RhcnROZXdCbG9jay5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRlU3RhdGVtZW50L1N0YXJ0TmV3QmxvY2suamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NzQ2OWZiCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRlU3RhdGVtZW50L1N0YXJ0TmV3QmxvY2suamF2YQpAQCAtMCwwICsxLDYgQEAKKworcHVibGljIGNsYXNzIEZvbyB7CisgICAgeworICAgICAgICBpZiAoeCkgezxjYXJldD5mb28oKTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGVTdGF0ZW1lbnQvU3RhcnROZXdCbG9ja19hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRlU3RhdGVtZW50L1N0YXJ0TmV3QmxvY2tfYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMDMzMzE3Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRlU3RhdGVtZW50L1N0YXJ0TmV3QmxvY2tfYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDggQEAKKworcHVibGljIGNsYXNzIEZvbyB7CisgICAgeworICAgICAgICBpZiAoeCkgeworICAgICAgICAgICAgPGNhcmV0PmZvbygpOworICAgICAgICB9CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRlU3RhdGVtZW50L1N0cmluZ0xpdGVyYWwuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0ZVN0YXRlbWVudC9TdHJpbmdMaXRlcmFsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTg0OGQzZQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0ZVN0YXRlbWVudC9TdHJpbmdMaXRlcmFsLmphdmEKQEAgLTAsMCArMSw2IEBACisKK2NsYXNzIGZvbyB7CisgICAgeworICAgICAgICBTdHJpbmcgcyA9ICJhPGNhcmV0PgorICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGVTdGF0ZW1lbnQvU3RyaW5nTGl0ZXJhbF9hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRlU3RhdGVtZW50L1N0cmluZ0xpdGVyYWxfYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNzZiYWY1Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRlU3RhdGVtZW50L1N0cmluZ0xpdGVyYWxfYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDYgQEAKKworY2xhc3MgZm9vIHsKKyAgICB7CisgICAgICAgIFN0cmluZyBzID0gImEiOzxjYXJldD4KKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRlU3RhdGVtZW50L1N3aXRjaEtleXdvcmQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0ZVN0YXRlbWVudC9Td2l0Y2hLZXl3b3JkLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGJmYmVmMwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0ZVN0YXRlbWVudC9Td2l0Y2hLZXl3b3JkLmphdmEKQEAgLTAsMCArMSw2IEBACisKK2NsYXNzIGZvbyB7CisgICAgeworICAgICAgICBzd2l0Y2g8Y2FyZXQ+CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0ZVN0YXRlbWVudC9Td2l0Y2hLZXl3b3JkV2l0aENvbmRpdGlvbi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRlU3RhdGVtZW50L1N3aXRjaEtleXdvcmRXaXRoQ29uZGl0aW9uLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzc4NzM2MAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0ZVN0YXRlbWVudC9Td2l0Y2hLZXl3b3JkV2l0aENvbmRpdGlvbi5qYXZhCkBAIC0wLDAgKzEsNiBAQAorCitjbGFzcyBmb28geworICAgIHsKKyAgICAgICAgc3dpdGNoIChpPGNhcmV0PgorICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGVTdGF0ZW1lbnQvU3dpdGNoS2V5d29yZFdpdGhDb25kaXRpb25fYWZ0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0ZVN0YXRlbWVudC9Td2l0Y2hLZXl3b3JkV2l0aENvbmRpdGlvbl9hZnRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkwOGFiOWYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGVTdGF0ZW1lbnQvU3dpdGNoS2V5d29yZFdpdGhDb25kaXRpb25fYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDggQEAKKworY2xhc3MgZm9vIHsKKyAgICB7CisgICAgICAgIHN3aXRjaCAoaSkgeworICAgICAgICAgICAgPGNhcmV0PgorICAgICAgICB9CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0ZVN0YXRlbWVudC9Td2l0Y2hLZXl3b3JkX2FmdGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGVTdGF0ZW1lbnQvU3dpdGNoS2V5d29yZF9hZnRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAxZDFjZDIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGVTdGF0ZW1lbnQvU3dpdGNoS2V5d29yZF9hZnRlci5qYXZhCkBAIC0wLDAgKzEsNyBAQAorCitjbGFzcyBmb28geworICAgIHsKKyAgICAgICAgc3dpdGNoICg8Y2FyZXQ+KSB7CisgICAgICAgIH0KKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRlU3RhdGVtZW50L1N5bmNocm9uaXplZC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRlU3RhdGVtZW50L1N5bmNocm9uaXplZC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQzZmQyZWYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGVTdGF0ZW1lbnQvU3luY2hyb25pemVkLmphdmEKQEAgLTAsMCArMSw1IEBACitwdWJsaWMgY2xhc3MgVGVzdCB7CisgICAgcHVibGljIHZvaWQgZm9vKCkgeworICAgICAgIHN5bmNocm9uaXplZCh0aGlzPGNhcmV0PikKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRlU3RhdGVtZW50L1N5bmNocm9uaXplZF9hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRlU3RhdGVtZW50L1N5bmNocm9uaXplZF9hZnRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJjYWQ5ZmYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGVTdGF0ZW1lbnQvU3luY2hyb25pemVkX2FmdGVyLmphdmEKQEAgLTAsMCArMSw3IEBACitwdWJsaWMgY2xhc3MgVGVzdCB7CisgICAgcHVibGljIHZvaWQgZm9vKCkgeworICAgICAgICBzeW5jaHJvbml6ZWQgKHRoaXMpIHsKKyAgICAgICAgICAgIDxjYXJldD4KKyAgICAgICAgfQorICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGVTdGF0ZW1lbnQvVGhyb3cuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0ZVN0YXRlbWVudC9UaHJvdy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFjMGFkY2YKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGVTdGF0ZW1lbnQvVGhyb3cuamF2YQpAQCAtMCwwICsxLDcgQEAKK3B1YmxpYyBjbGFzcyBUZXN0IHsKKyAgICB7CisgICAgICAgIGlmKHgpIHsKKyAgICAgICAgICAgIHRocm93IDxjYXJldD5uZXcgRXhjZXB0aW9uKCk7CisgICAgICAgIH0KKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRlU3RhdGVtZW50L1Rocm93X2FmdGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGVTdGF0ZW1lbnQvVGhyb3dfYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NzJmYzc4Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRlU3RhdGVtZW50L1Rocm93X2FmdGVyLmphdmEKQEAgLTAsMCArMSw4IEBACitwdWJsaWMgY2xhc3MgVGVzdCB7CisgICAgeworICAgICAgICBpZih4KSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCk7CisgICAgICAgIH0KKyAgICAgICAgPGNhcmV0PgorICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGVTdGF0ZW1lbnQvVHJ5MS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRlU3RhdGVtZW50L1RyeTEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOTg3Y2Y0Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRlU3RhdGVtZW50L1RyeTEuamF2YQpAQCAtMCwwICsxLDggQEAKK3B1YmxpYyBjbGFzcyBGb28geworICAgIHsKKyAgICAgICAgdHJ5IHs8Y2FyZXQ+CisgICAgICAgIH0KKyAgICAgICAgY2F0Y2goRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgfQorICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGVTdGF0ZW1lbnQvVHJ5MV9hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRlU3RhdGVtZW50L1RyeTFfYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMzg0NDUyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRlU3RhdGVtZW50L1RyeTFfYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDkgQEAKK3B1YmxpYyBjbGFzcyBGb28geworICAgIHsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIDxjYXJldD4KKyAgICAgICAgfQorICAgICAgICBjYXRjaChFeGNlcHRpb24gZSkgeworICAgICAgICB9CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0ZVN0YXRlbWVudC9Ud29TdGF0ZW1lbnRzSW5MaW5lLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGVTdGF0ZW1lbnQvVHdvU3RhdGVtZW50c0luTGluZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA3NDhiYTIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGVTdGF0ZW1lbnQvVHdvU3RhdGVtZW50c0luTGluZS5qYXZhCkBAIC0wLDAgKzEsNyBAQAorCitjbGFzcyBGb28geworICAgIHsKKyAgICAgICAgeCA9IDM7CisgICAgICAgIHggPGNhcmV0Pj0gMiB5ID0gNDsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRlU3RhdGVtZW50L1R3b1N0YXRlbWVudHNJbkxpbmVfYWZ0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0ZVN0YXRlbWVudC9Ud29TdGF0ZW1lbnRzSW5MaW5lX2FmdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjY5NTZmMQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0ZVN0YXRlbWVudC9Ud29TdGF0ZW1lbnRzSW5MaW5lX2FmdGVyLmphdmEKQEAgLTAsMCArMSw3IEBACisKK2NsYXNzIEZvbyB7CisgICAgeworICAgICAgICB4ID0gMzsKKyAgICAgICAgeCA9IDI7PGNhcmV0PiB5ID0gNDsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRlU3RhdGVtZW50L1ZhbGlkQ29kZUJsb2NrLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGVTdGF0ZW1lbnQvVmFsaWRDb2RlQmxvY2suamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZDE0N2VmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRlU3RhdGVtZW50L1ZhbGlkQ29kZUJsb2NrLmphdmEKQEAgLTAsMCArMSwyMiBAQAorLyoKKyAqIENvcHlyaWdodCAyMDAwLTIwMTEgSmV0QnJhaW5zIHMuci5vLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KK3B1YmxpYyBjbGFzcyBGb28geworICAgIHZvaWQgdGVzdChpbnQgaSkgeworICAgICAgICBpZiAoaSA+IDEpIHsKKyAgICAgICAgICAgIGkgPGNhcmV0Pj0gMTsKKyAgICAgICAgfQorICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGVTdGF0ZW1lbnQvVmFsaWRDb2RlQmxvY2tXaXRoRW1wdHlMaW5lQWZ0ZXJJdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRlU3RhdGVtZW50L1ZhbGlkQ29kZUJsb2NrV2l0aEVtcHR5TGluZUFmdGVySXQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNjk3NjgwCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRlU3RhdGVtZW50L1ZhbGlkQ29kZUJsb2NrV2l0aEVtcHR5TGluZUFmdGVySXQuamF2YQpAQCAtMCwwICsxLDIzIEBACisvKgorICogQ29weXJpZ2h0IDIwMDAtMjAxMSBKZXRCcmFpbnMgcy5yLm8uCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworcHVibGljIGNsYXNzIEZvbyB7CisgICAgdm9pZCB0ZXN0KGludCBpKSB7CisgICAgICAgIHdoaWxlIChpLS0gPiAxKSB7CisgICAgICAgICAgICBpIDxjYXJldD49IDE7CisKKyAgICAgICAgfQorICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGVTdGF0ZW1lbnQvVmFsaWRDb2RlQmxvY2tXaXRoRW1wdHlMaW5lQWZ0ZXJJdF9hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRlU3RhdGVtZW50L1ZhbGlkQ29kZUJsb2NrV2l0aEVtcHR5TGluZUFmdGVySXRfYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZGQwYjk4Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRlU3RhdGVtZW50L1ZhbGlkQ29kZUJsb2NrV2l0aEVtcHR5TGluZUFmdGVySXRfYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDIzIEBACisvKgorICogQ29weXJpZ2h0IDIwMDAtMjAxMSBKZXRCcmFpbnMgcy5yLm8uCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworcHVibGljIGNsYXNzIEZvbyB7CisgICAgdm9pZCB0ZXN0KGludCBpKSB7CisgICAgICAgIHdoaWxlIChpLS0gPiAxKSB7CisgICAgICAgICAgICBpID0gMTsKKyAgICAgICAgICAgIDxjYXJldD4KKyAgICAgICAgfQorICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGVTdGF0ZW1lbnQvVmFsaWRDb2RlQmxvY2tfYWZ0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0ZVN0YXRlbWVudC9WYWxpZENvZGVCbG9ja19hZnRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkxYjM1YjU5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRlU3RhdGVtZW50L1ZhbGlkQ29kZUJsb2NrX2FmdGVyLmphdmEKQEAgLTAsMCArMSwyMyBAQAorLyoKKyAqIENvcHlyaWdodCAyMDAwLTIwMTEgSmV0QnJhaW5zIHMuci5vLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KK3B1YmxpYyBjbGFzcyBGb28geworICAgIHZvaWQgdGVzdChpbnQgaSkgeworICAgICAgICBpZiAoaSA+IDEpIHsKKyAgICAgICAgICAgIGkgPSAxOworICAgICAgICAgICAgPGNhcmV0PgorICAgICAgICB9CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL2NsYXNzTmFtZS9JblBsYWluVGV4dEZpbGUudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vY2xhc3NOYW1lL0luUGxhaW5UZXh0RmlsZS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDY0ZTAxNQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL2NsYXNzTmFtZS9JblBsYWluVGV4dEZpbGUudHh0CkBAIC0wLDAgKzEgQEAKK2FiYyA9IFN0cmluQnVpPGNhcmV0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL2NsYXNzTmFtZS9JblBsYWluVGV4dEZpbGVfYWZ0ZXIudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vY2xhc3NOYW1lL0luUGxhaW5UZXh0RmlsZV9hZnRlci50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWEyZjY4MQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL2NsYXNzTmFtZS9JblBsYWluVGV4dEZpbGVfYWZ0ZXIudHh0CkBAIC0wLDAgKzEgQEAKK2FiYyA9IGphdmEubGFuZy5TdHJpbmdCdWlsZGVyPGNhcmV0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL2NsYXNzTmFtZS9hZnRlck5ld1Rocm93YWJsZS9hZnRlcjEuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL2NsYXNzTmFtZS9hZnRlck5ld1Rocm93YWJsZS9hZnRlcjEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYmRlY2UxCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vY2xhc3NOYW1lL2FmdGVyTmV3VGhyb3dhYmxlL2FmdGVyMS5qYXZhCkBAIC0wLDAgKzEsNSBAQAorY2xhc3MgQXsKKyB2b2lkIGZvbygpIHsKKyAgdGhyb3cgbmV3IE91ckV4Y2VwdGlvbigpPGNhcmV0PgorIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9jbGFzc05hbWUvYWZ0ZXJOZXdUaHJvd2FibGUvYWZ0ZXIyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9jbGFzc05hbWUvYWZ0ZXJOZXdUaHJvd2FibGUvYWZ0ZXIyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDI2ODVhOQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL2NsYXNzTmFtZS9hZnRlck5ld1Rocm93YWJsZS9hZnRlcjIuamF2YQpAQCAtMCwwICsxLDUgQEAKK2NsYXNzIEF7Cisgdm9pZCBmb28oKSB7CisgIHRocm93IG5ldyBPdXJOb3RFeGNlcHRpb24uSW5uZXJFeGNlcHRpb24oKTxjYXJldD4KKyB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vY2xhc3NOYW1lL2FmdGVyTmV3VGhyb3dhYmxlL2JlZm9yZTEuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL2NsYXNzTmFtZS9hZnRlck5ld1Rocm93YWJsZS9iZWZvcmUxLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTFhNTg3OQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL2NsYXNzTmFtZS9hZnRlck5ld1Rocm93YWJsZS9iZWZvcmUxLmphdmEKQEAgLTAsMCArMSw1IEBACitjbGFzcyBBeworIHZvaWQgZm9vKCkgeworICB0aHJvdyBuZXcgT3VyPGNhcmV0PgorIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9jbGFzc05hbWUvYWZ0ZXJOZXdUaHJvd2FibGUvYmVmb3JlMi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vY2xhc3NOYW1lL2FmdGVyTmV3VGhyb3dhYmxlL2JlZm9yZTIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMmQzNjJiCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vY2xhc3NOYW1lL2FmdGVyTmV3VGhyb3dhYmxlL2JlZm9yZTIuamF2YQpAQCAtMCwwICsxLDUgQEAKK2NsYXNzIEF7Cisgdm9pZCBmb28oKSB7CisgIHRocm93IG5ldyBJbm5lcjxjYXJldD4KKyB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vY2xhc3NOYW1lL2ltcG9ydEFmdGVyTmV3L2FmdGVyMS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vY2xhc3NOYW1lL2ltcG9ydEFmdGVyTmV3L2FmdGVyMS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgyOTc4MjUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9jbGFzc05hbWUvaW1wb3J0QWZ0ZXJOZXcvYWZ0ZXIxLmphdmEKQEAgLTAsMCArMSw3IEBACitpbXBvcnQgcGFjay5BQUNsYXNzOworCitwdWJsaWMgY2xhc3MgVGVzdDEgeworICAgIHB1YmxpYyB2b2lkIGZvbygpIHsKKyAgICAgICAgbmV3IEFBQ2xhc3MoKTxjYXJldD4KKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vY2xhc3NOYW1lL2ltcG9ydEFmdGVyTmV3L2FmdGVyMi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vY2xhc3NOYW1lL2ltcG9ydEFmdGVyTmV3L2FmdGVyMi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFjN2NiNmYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9jbGFzc05hbWUvaW1wb3J0QWZ0ZXJOZXcvYWZ0ZXIyLmphdmEKQEAgLTAsMCArMSw3IEBACitpbXBvcnQgcGFjay5XaXRoSW5uZXJBQ2xhc3M7CisKK3B1YmxpYyBjbGFzcyBUZXN0MSB7CisgICAgcHVibGljIHZvaWQgZm9vKCkgeworICAgICAgICBuZXcgV2l0aElubmVyQUNsYXNzKCk8Y2FyZXQ+CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL2NsYXNzTmFtZS9pbXBvcnRBZnRlck5ldy9iZWZvcmUxLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9jbGFzc05hbWUvaW1wb3J0QWZ0ZXJOZXcvYmVmb3JlMS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE2NDMyNjkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9jbGFzc05hbWUvaW1wb3J0QWZ0ZXJOZXcvYmVmb3JlMS5qYXZhCkBAIC0wLDAgKzEsNSBAQAorcHVibGljIGNsYXNzIFRlc3QxIHsKKyAgICBwdWJsaWMgdm9pZCBmb28oKSB7CisgICAgICAgIG5ldyBBQUNsPGNhcmV0PgorICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9jbGFzc05hbWUvaW1wb3J0QWZ0ZXJOZXcvYmVmb3JlMi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vY2xhc3NOYW1lL2ltcG9ydEFmdGVyTmV3L2JlZm9yZTIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYmI5NGZiCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vY2xhc3NOYW1lL2ltcG9ydEFmdGVyTmV3L2JlZm9yZTIuamF2YQpAQCAtMCwwICsxLDUgQEAKK3B1YmxpYyBjbGFzcyBUZXN0MSB7CisgICAgcHVibGljIHZvaWQgZm9vKCkgeworICAgICAgICBuZXcgV2l0aElubmVyQUNsPGNhcmV0PgorICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9jbGFzc05hbWUvamF2YS9CcmFjZXNBZnRlck5ldy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vY2xhc3NOYW1lL2phdmEvQnJhY2VzQWZ0ZXJOZXcuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NGNkZDVhCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vY2xhc3NOYW1lL2phdmEvQnJhY2VzQWZ0ZXJOZXcuamF2YQpAQCAtMCwwICsxLDUgQEAKK2NsYXNzIEZvb0Zvb0Zvb0Zvb0ZvbyB7CisgIHsKKyAgICBPYmplY3RbXSBhID0gbmV3IEZGRkZGPGNhcmV0PltdOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vY2xhc3NOYW1lL2phdmEvQnJhY2VzQWZ0ZXJOZXdfYWZ0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL2NsYXNzTmFtZS9qYXZhL0JyYWNlc0FmdGVyTmV3X2FmdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzkxZjJiYQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL2NsYXNzTmFtZS9qYXZhL0JyYWNlc0FmdGVyTmV3X2FmdGVyLmphdmEKQEAgLTAsMCArMSw1IEBACitjbGFzcyBGb29Gb29Gb29Gb29Gb28geworICB7CisgICAgT2JqZWN0W10gYSA9IG5ldyBGb29Gb29Gb29Gb29Gb288Y2FyZXQ+W107CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9jbGFzc05hbWUvamF2YS9DYW1lbEh1bXBQcmVmaXguamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL2NsYXNzTmFtZS9qYXZhL0NhbWVsSHVtcFByZWZpeC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc3ZGQ0Y2IKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9jbGFzc05hbWUvamF2YS9DYW1lbEh1bXBQcmVmaXguamF2YQpAQCAtMCwwICsxLDggQEAKK2NsYXNzIExpZmVVbml2ZXJzZUV2ZXJ5dGhpbmdFbnRpdHkge30KK2NsYXNzIExpZmVVbml2ZXJzZUV2ZXJ5dGhpbmdNYW5hZ2VyIHt9CisKK2NsYXNzIEZvb0Zvb0Zvb0Zvb0ZvbyB7CisgIHsKKyAgICBMVUV2PGNhcmV0PgorICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vY2xhc3NOYW1lL2phdmEvRG91YmxlU3RyaW5nQnVmZmVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9jbGFzc05hbWUvamF2YS9Eb3VibGVTdHJpbmdCdWZmZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMjUyZmY0MgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL2NsYXNzTmFtZS9qYXZhL0RvdWJsZVN0cmluZ0J1ZmZlci5qYXZhCkBAIC0wLDAgKzEsNSBAQAorY2xhc3MgRm9vRm9vRm9vRm9vRm9vIHsKKyAgeworICAgIFN0cmluZ0J1ZjxjYXJldD4KKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL2NsYXNzTmFtZS9qYXZhL0RvdWJsZVN0cmluZ0J1ZmZlcl9hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vY2xhc3NOYW1lL2phdmEvRG91YmxlU3RyaW5nQnVmZmVyX2FmdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzAxNzQwYgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL2NsYXNzTmFtZS9qYXZhL0RvdWJsZVN0cmluZ0J1ZmZlcl9hZnRlci5qYXZhCkBAIC0wLDAgKzEsNSBAQAorY2xhc3MgRm9vRm9vRm9vRm9vRm9vIHsKKyAgeworICAgIFN0cmluZ0J1ZmZlcjxjYXJldD4KKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL2NsYXNzTmFtZS9qYXZhL0V4Y2Vzc1BhcmVuc0FmdGVyTmV3LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9jbGFzc05hbWUvamF2YS9FeGNlc3NQYXJlbnNBZnRlck5ldy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE3NWYwMzMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9jbGFzc05hbWUvamF2YS9FeGNlc3NQYXJlbnNBZnRlck5ldy5qYXZhCkBAIC0wLDAgKzEsNSBAQAorY2xhc3MgRm9vRm9vRm9vRm9vRm9vIHsKKyAgeworICAgIG5ldyBGRkZGRjxjYXJldD4oKTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL2NsYXNzTmFtZS9qYXZhL0V4Y2Vzc1BhcmVuc0FmdGVyTmV3X2FmdGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9jbGFzc05hbWUvamF2YS9FeGNlc3NQYXJlbnNBZnRlck5ld19hZnRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc5NWYxNjEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9jbGFzc05hbWUvamF2YS9FeGNlc3NQYXJlbnNBZnRlck5ld19hZnRlci5qYXZhCkBAIC0wLDAgKzEsNSBAQAorY2xhc3MgRm9vRm9vRm9vRm9vRm9vIHsKKyAgeworICAgIG5ldyBGb29Gb29Gb29Gb29Gb28oKTxjYXJldD47CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9jbGFzc05hbWUvamF2YS9SZXBsYWNlUmVmZXJlbmNlRXhwcmVzc2lvbldpdGhUeXBlRWxlbWVudC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vY2xhc3NOYW1lL2phdmEvUmVwbGFjZVJlZmVyZW5jZUV4cHJlc3Npb25XaXRoVHlwZUVsZW1lbnQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZmMxMmMyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vY2xhc3NOYW1lL2phdmEvUmVwbGFjZVJlZmVyZW5jZUV4cHJlc3Npb25XaXRoVHlwZUVsZW1lbnQuamF2YQpAQCAtMCwwICsxLDcgQEAKK2NsYXNzIEZvb0Zvb0Zvb0Zvb0ZvbyB7CisgICAgeworICAgICAgICBpbnQgYSA9IDA7CisgICAgICAgIEFCQ0Q8Y2FyZXQ+CisgICAgICAgIGZvbyhuZXcgU3RyaW5nW117ImEifSwgMSk7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL2NsYXNzTmFtZS9qYXZhL1JlcGxhY2VSZWZlcmVuY2VFeHByZXNzaW9uV2l0aFR5cGVFbGVtZW50X2FmdGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9jbGFzc05hbWUvamF2YS9SZXBsYWNlUmVmZXJlbmNlRXhwcmVzc2lvbldpdGhUeXBlRWxlbWVudF9hZnRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQyYjMyMjQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9jbGFzc05hbWUvamF2YS9SZXBsYWNlUmVmZXJlbmNlRXhwcmVzc2lvbldpdGhUeXBlRWxlbWVudF9hZnRlci5qYXZhCkBAIC0wLDAgKzEsOSBAQAoraW1wb3J0IGZvby5iYXIuQUJDREVGOworCitjbGFzcyBGb29Gb29Gb29Gb29Gb28geworICAgIHsKKyAgICAgICAgaW50IGEgPSAwOworICAgICAgICBBQkNERUY8Y2FyZXQ+CisgICAgICAgIGZvbyhuZXcgU3RyaW5nW117ImEifSwgMSk7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL2NsYXNzTmFtZS9qYXZhL1JldXNlUGFyZW5zQWZ0ZXJOZXcuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL2NsYXNzTmFtZS9qYXZhL1JldXNlUGFyZW5zQWZ0ZXJOZXcuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NTE4ODYzCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vY2xhc3NOYW1lL2phdmEvUmV1c2VQYXJlbnNBZnRlck5ldy5qYXZhCkBAIC0wLDAgKzEsNyBAQAorY2xhc3MgRm9vRm9vRm9vRm9vRm9vIHsKKyAgeworICAgIG5ldyBGRkZGRjxjYXJldD4oeCk7CisgIH0KKworICBGb29Gb29Gb29Gb29Gb28oaW50IHgpIHt9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vY2xhc3NOYW1lL2phdmEvUmV1c2VQYXJlbnNBZnRlck5ld19hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vY2xhc3NOYW1lL2phdmEvUmV1c2VQYXJlbnNBZnRlck5ld19hZnRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFlMDljMGEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9jbGFzc05hbWUvamF2YS9SZXVzZVBhcmVuc0FmdGVyTmV3X2FmdGVyLmphdmEKQEAgLTAsMCArMSw3IEBACitjbGFzcyBGb29Gb29Gb29Gb29Gb28geworICB7CisgICAgbmV3IEZvb0Zvb0Zvb0Zvb0Zvbyg8Y2FyZXQ+eCk7CisgIH0KKworICBGb29Gb29Gb29Gb29Gb28oaW50IHgpIHt9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vY2xhc3NOYW1lL25hbWVDb21wbGV0aW9uL2phdmEvQW5ub3RhdGlvbi1yZXN1bHQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL2NsYXNzTmFtZS9uYW1lQ29tcGxldGlvbi9qYXZhL0Fubm90YXRpb24tcmVzdWx0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGVkNTg0ZQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL2NsYXNzTmFtZS9uYW1lQ29tcGxldGlvbi9qYXZhL0Fubm90YXRpb24tcmVzdWx0LmphdmEKQEAgLTAsMCArMSw4IEBACitAaW50ZXJmYWNlIENvbHVtbiB7CisgIFN0cmluZyBuYW1lKCk7Cit9CisKK0BDb2x1bW4oPGNhcmV0PikKK0BpbnRlcmZhY2UgQW5ub3RhdGlvbiB7CisKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9jbGFzc05hbWUvbmFtZUNvbXBsZXRpb24vamF2YS9Bbm5vdGF0aW9uLXNvdXJjZS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vY2xhc3NOYW1lL25hbWVDb21wbGV0aW9uL2phdmEvQW5ub3RhdGlvbi1zb3VyY2UuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OTMxNjQ5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vY2xhc3NOYW1lL25hbWVDb21wbGV0aW9uL2phdmEvQW5ub3RhdGlvbi1zb3VyY2UuamF2YQpAQCAtMCwwICsxLDggQEAKK0BpbnRlcmZhY2UgQ29sdW1uIHsKKyAgU3RyaW5nIG5hbWUoKTsKK30KKworQENvbHU8Y2FyZXQ+CitAaW50ZXJmYWNlIEFubm90YXRpb24geworCit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vY2xhc3NOYW1lL25hbWVDb21wbGV0aW9uL2phdmEvRXh0cmFTcGFjZS1yZXN1bHQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL2NsYXNzTmFtZS9uYW1lQ29tcGxldGlvbi9qYXZhL0V4dHJhU3BhY2UtcmVzdWx0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWY4NTMzYQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL2NsYXNzTmFtZS9uYW1lQ29tcGxldGlvbi9qYXZhL0V4dHJhU3BhY2UtcmVzdWx0LmphdmEKQEAgLTAsMCArMSw4IEBACitpbXBvcnQgamF2YS5pby5GaWxlSW5wdXRTdHJlYW07CisKK2NsYXNzIE1haW4geworCisgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworICAgICAgICBlcXVhbHMoRmlsZUlucHV0U3RyZWFtPGNhcmV0PmFhYSk7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vY2xhc3NOYW1lL25hbWVDb21wbGV0aW9uL2phdmEvRXh0cmFTcGFjZS1zb3VyY2UuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL2NsYXNzTmFtZS9uYW1lQ29tcGxldGlvbi9qYXZhL0V4dHJhU3BhY2Utc291cmNlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDYwYjMxOAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL2NsYXNzTmFtZS9uYW1lQ29tcGxldGlvbi9qYXZhL0V4dHJhU3BhY2Utc291cmNlLmphdmEKQEAgLTAsMCArMSw2IEBACitjbGFzcyBNYWluIHsKKworICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKyAgICAgICAgZXF1YWxzKEZpbGVJbnB1dFN0cmVhPGNhcmV0PmFhYSk7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vY2xhc3NOYW1lL25hbWVDb21wbGV0aW9uL2phdmEvSW5Db21tZW50V2l0aFBhY2thZ2VQcmVmaXgtcmVzdWx0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9jbGFzc05hbWUvbmFtZUNvbXBsZXRpb24vamF2YS9JbkNvbW1lbnRXaXRoUGFja2FnZVByZWZpeC1yZXN1bHQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNjM4MjQ0Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vY2xhc3NOYW1lL25hbWVDb21wbGV0aW9uL2phdmEvSW5Db21tZW50V2l0aFBhY2thZ2VQcmVmaXgtcmVzdWx0LmphdmEKQEAgLTAsMCArMSw2IEBACitjbGFzcyBNYWluIHsKKworICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKyAgICAgICAgLy8gamF2YS5pby5GaWxlSW5wdXRTdHJlYW08Y2FyZXQ+CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vY2xhc3NOYW1lL25hbWVDb21wbGV0aW9uL2phdmEvSW5Db21tZW50V2l0aFBhY2thZ2VQcmVmaXgtc291cmNlLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9jbGFzc05hbWUvbmFtZUNvbXBsZXRpb24vamF2YS9JbkNvbW1lbnRXaXRoUGFja2FnZVByZWZpeC1zb3VyY2UuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZWM5ZjY0Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vY2xhc3NOYW1lL25hbWVDb21wbGV0aW9uL2phdmEvSW5Db21tZW50V2l0aFBhY2thZ2VQcmVmaXgtc291cmNlLmphdmEKQEAgLTAsMCArMSw2IEBACitjbGFzcyBNYWluIHsKKworICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKyAgICAgICAgLy8gamF2YS5GaWxlSW5wdXRTdHJlYTxjYXJldD4KKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9jbGFzc05hbWUvbmFtZUNvbXBsZXRpb24vamF2YS9JblN0YXRpY0ltcG9ydC1yZXN1bHQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL2NsYXNzTmFtZS9uYW1lQ29tcGxldGlvbi9qYXZhL0luU3RhdGljSW1wb3J0LXJlc3VsdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdmMzQ2YzkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9jbGFzc05hbWUvbmFtZUNvbXBsZXRpb24vamF2YS9JblN0YXRpY0ltcG9ydC1yZXN1bHQuamF2YQpAQCAtMCwwICsxLDggQEAKK2ltcG9ydCBzdGF0aWMgamF2YS5pby5GaWxlSW5wdXRTdHJlYW08Y2FyZXQ+CisKK2NsYXNzIE1haW4geworCisgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworICAgICAgICBlcXVhbHMoRmlsZUlucHV0U3RyZWE8Y2FyZXQ+YWFhKTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9jbGFzc05hbWUvbmFtZUNvbXBsZXRpb24vamF2YS9JblN0YXRpY0ltcG9ydC1zb3VyY2UuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL2NsYXNzTmFtZS9uYW1lQ29tcGxldGlvbi9qYXZhL0luU3RhdGljSW1wb3J0LXNvdXJjZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ5NTM1NGEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9jbGFzc05hbWUvbmFtZUNvbXBsZXRpb24vamF2YS9JblN0YXRpY0ltcG9ydC1zb3VyY2UuamF2YQpAQCAtMCwwICsxLDggQEAKK2ltcG9ydCBzdGF0aWMgRmlsZUlucFN0cmU8Y2FyZXQ+CisKK2NsYXNzIE1haW4geworCisgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworICAgICAgICBlcXVhbHMoRmlsZUlucHV0U3RyZWE8Y2FyZXQ+YWFhKTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9jbGFzc05hbWUvbmFtZUNvbXBsZXRpb24vamF2YS9pbXBsZW1lbnRzMi1yZXN1bHQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL2NsYXNzTmFtZS9uYW1lQ29tcGxldGlvbi9qYXZhL2ltcGxlbWVudHMyLXJlc3VsdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFhNjI4ZTQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9jbGFzc05hbWUvbmFtZUNvbXBsZXRpb24vamF2YS9pbXBsZW1lbnRzMi1yZXN1bHQuamF2YQpAQCAtMCwwICsxLDMgQEAKK2NsYXNzIFpaWlpaWnt9CisKK2NsYXNzIEEgaW1wbGVtZW50cyBGb28sIFpaWlpaWjxjYXJldD57fQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL2NsYXNzTmFtZS9uYW1lQ29tcGxldGlvbi9qYXZhL2ltcGxlbWVudHMyLXNvdXJjZS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vY2xhc3NOYW1lL25hbWVDb21wbGV0aW9uL2phdmEvaW1wbGVtZW50czItc291cmNlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2UyNmRhMwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL2NsYXNzTmFtZS9uYW1lQ29tcGxldGlvbi9qYXZhL2ltcGxlbWVudHMyLXNvdXJjZS5qYXZhCkBAIC0wLDAgKzEsMyBAQAorY2xhc3MgWlpaWlpae30KKworY2xhc3MgQSBpbXBsZW1lbnRzIEZvbywgWlpaPGNhcmV0Pnt9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vY2xhc3NOYW1lL25hbWVDb21wbGV0aW9uL2phdmEvaW1wbGVtZW50czMtcmVzdWx0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9jbGFzc05hbWUvbmFtZUNvbXBsZXRpb24vamF2YS9pbXBsZW1lbnRzMy1yZXN1bHQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMTQyYWVhCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vY2xhc3NOYW1lL25hbWVDb21wbGV0aW9uL2phdmEvaW1wbGVtZW50czMtcmVzdWx0LmphdmEKQEAgLTAsMCArMSwzIEBACitjbGFzcyBaWlpaWlp7fQorCitjbGFzcyBBIGltcGxlbWVudHMgRm9vPFpaWlpaWjxjYXJldD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9jbGFzc05hbWUvbmFtZUNvbXBsZXRpb24vamF2YS9pbXBsZW1lbnRzMy1zb3VyY2UuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL2NsYXNzTmFtZS9uYW1lQ29tcGxldGlvbi9qYXZhL2ltcGxlbWVudHMzLXNvdXJjZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVhYmJmMjAKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9jbGFzc05hbWUvbmFtZUNvbXBsZXRpb24vamF2YS9pbXBsZW1lbnRzMy1zb3VyY2UuamF2YQpAQCAtMCwwICsxLDMgQEAKK2NsYXNzIFpaWlpaWnt9CisKK2NsYXNzIEEgaW1wbGVtZW50cyBGb288WlpaPGNhcmV0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL2NsYXNzTmFtZS9uYW1lQ29tcGxldGlvbi9qYXZhL21ldGhvZENhbGwtcmVzdWx0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9jbGFzc05hbWUvbmFtZUNvbXBsZXRpb24vamF2YS9tZXRob2RDYWxsLXJlc3VsdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI4YmMyOTgKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9jbGFzc05hbWUvbmFtZUNvbXBsZXRpb24vamF2YS9tZXRob2RDYWxsLXJlc3VsdC5qYXZhCkBAIC0wLDAgKzEsNSBAQAorY2xhc3MgTXlDbGFzczEgeworICB7CisgICAgTXlDbGFzczE8Y2FyZXQ+Zm9vKCkKKyAgfSAgCit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vY2xhc3NOYW1lL25hbWVDb21wbGV0aW9uL2phdmEvbWV0aG9kQ2FsbC1zb3VyY2UuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL2NsYXNzTmFtZS9uYW1lQ29tcGxldGlvbi9qYXZhL21ldGhvZENhbGwtc291cmNlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmJhZmVmODcKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9jbGFzc05hbWUvbmFtZUNvbXBsZXRpb24vamF2YS9tZXRob2RDYWxsLXNvdXJjZS5qYXZhCkBAIC0wLDAgKzEsNSBAQAorY2xhc3MgTXlDbGFzczEgeworICB7CisgICAgTUNsYTxjYXJldD5mb28oKQorICB9ICAKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9jbGFzc05hbWUvbmFtZUNvbXBsZXRpb24vamF2YS9tZXRob2RDYWxsMS1yZXN1bHQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL2NsYXNzTmFtZS9uYW1lQ29tcGxldGlvbi9qYXZhL21ldGhvZENhbGwxLXJlc3VsdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZjMTdkMzQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9jbGFzc05hbWUvbmFtZUNvbXBsZXRpb24vamF2YS9tZXRob2RDYWxsMS1yZXN1bHQuamF2YQpAQCAtMCwwICsxLDUgQEAKK2NsYXNzIE15Q2xhc3MxIHsKKyAgeworICAgIE15Q2xhc3MxPGNhcmV0PmYub28oKQorICB9ICAKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9jbGFzc05hbWUvbmFtZUNvbXBsZXRpb24vamF2YS9tZXRob2RDYWxsMS1zb3VyY2UuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL2NsYXNzTmFtZS9uYW1lQ29tcGxldGlvbi9qYXZhL21ldGhvZENhbGwxLXNvdXJjZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRlMTJjZTIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9jbGFzc05hbWUvbmFtZUNvbXBsZXRpb24vamF2YS9tZXRob2RDYWxsMS1zb3VyY2UuamF2YQpAQCAtMCwwICsxLDUgQEAKK2NsYXNzIE15Q2xhc3MxIHsKKyAgeworICAgIE1DbGE8Y2FyZXQ+Zi5vbygpCisgIH0gIAorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL2NsYXNzTmFtZS9uYW1lQ29tcGxldGlvbi9qYXZhL3Rlc3QxLXJlc3VsdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vY2xhc3NOYW1lL25hbWVDb21wbGV0aW9uL2phdmEvdGVzdDEtcmVzdWx0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzkwMDc0NgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL2NsYXNzTmFtZS9uYW1lQ29tcGxldGlvbi9qYXZhL3Rlc3QxLXJlc3VsdC5qYXZhCkBAIC0wLDAgKzEsMyBAQAorY2xhc3MgTXlDbGFzczEgeworICAgIE15Q2xhc3MxPGNhcmV0PgorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL2NsYXNzTmFtZS9uYW1lQ29tcGxldGlvbi9qYXZhL3Rlc3QxLXNvdXJjZS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vY2xhc3NOYW1lL25hbWVDb21wbGV0aW9uL2phdmEvdGVzdDEtc291cmNlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmU3NTkzYgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL2NsYXNzTmFtZS9uYW1lQ29tcGxldGlvbi9qYXZhL3Rlc3QxLXNvdXJjZS5qYXZhCkBAIC0wLDAgKzEsMyBAQAorY2xhc3MgTXlDbGFzczEgeworICAgIE15Q2xhPGNhcmV0PgorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL2NsYXNzTmFtZS9uYW1lQ29tcGxldGlvbi9qYXZhL3Rlc3QxMC1yZXN1bHQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL2NsYXNzTmFtZS9uYW1lQ29tcGxldGlvbi9qYXZhL3Rlc3QxMC1yZXN1bHQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZTU1MWVmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vY2xhc3NOYW1lL25hbWVDb21wbGV0aW9uL2phdmEvdGVzdDEwLXJlc3VsdC5qYXZhCkBAIC0wLDAgKzEsNSBAQAorcGFja2FnZSBhYWE7CitAaW50ZXJmYWNlIE15T2JqZWN0VHlwZSB7fQorY2xhc3MgQSB7CisgIGFhYS5NeU9iamVjdFR5cGU8Y2FyZXQ+Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vY2xhc3NOYW1lL25hbWVDb21wbGV0aW9uL2phdmEvdGVzdDEwLXNvdXJjZS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vY2xhc3NOYW1lL25hbWVDb21wbGV0aW9uL2phdmEvdGVzdDEwLXNvdXJjZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc5ZWQ2MDIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9jbGFzc05hbWUvbmFtZUNvbXBsZXRpb24vamF2YS90ZXN0MTAtc291cmNlLmphdmEKQEAgLTAsMCArMSw1IEBACitwYWNrYWdlIGFhYTsKK0BpbnRlcmZhY2UgTXlPYmplY3RUeXBlIHt9CitjbGFzcyBBIHsKKyAgYWFhLk15T2JqPGNhcmV0PgorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL2NsYXNzTmFtZS9uYW1lQ29tcGxldGlvbi9qYXZhL3Rlc3QxMS1yZXN1bHQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL2NsYXNzTmFtZS9uYW1lQ29tcGxldGlvbi9qYXZhL3Rlc3QxMS1yZXN1bHQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OTExYWUzCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vY2xhc3NOYW1lL25hbWVDb21wbGV0aW9uL2phdmEvdGVzdDExLXJlc3VsdC5qYXZhCkBAIC0wLDAgKzEsNSBAQAorcGFja2FnZSBhYWE7CitAaW50ZXJmYWNlIE15T2JqZWN0VHlwZSB7fQorY2xhc3MgQSB7CisgIE15T2JqZWN0VHlwZTxjYXJldD4KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9jbGFzc05hbWUvbmFtZUNvbXBsZXRpb24vamF2YS90ZXN0MTEtc291cmNlLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9jbGFzc05hbWUvbmFtZUNvbXBsZXRpb24vamF2YS90ZXN0MTEtc291cmNlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDU3ZTA2MwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL2NsYXNzTmFtZS9uYW1lQ29tcGxldGlvbi9qYXZhL3Rlc3QxMS1zb3VyY2UuamF2YQpAQCAtMCwwICsxLDUgQEAKK3BhY2thZ2UgYWFhOworQGludGVyZmFjZSBNeU9iamVjdFR5cGUge30KK2NsYXNzIEEgeworICBNeU9iajxjYXJldD4KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9jbGFzc05hbWUvbmFtZUNvbXBsZXRpb24vamF2YS90ZXN0MTItcmVzdWx0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9jbGFzc05hbWUvbmFtZUNvbXBsZXRpb24vamF2YS90ZXN0MTItcmVzdWx0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzk5ZDhlMgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL2NsYXNzTmFtZS9uYW1lQ29tcGxldGlvbi9qYXZhL3Rlc3QxMi1yZXN1bHQuamF2YQpAQCAtMCwwICsxLDcgQEAKK3BhY2thZ2UgYWFhOworQGludGVyZmFjZSBNeU9iamVjdFR5cGUge30KK2NsYXNzIEEgeworICB2b2lkIGFhYSgpIHsKKyAgICBnZXRDbGFzcygpLmdldEFubm90YXRpb25zKE15T2JqZWN0VHlwZTxjYXJldD4pCisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9jbGFzc05hbWUvbmFtZUNvbXBsZXRpb24vamF2YS90ZXN0MTItc291cmNlLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9jbGFzc05hbWUvbmFtZUNvbXBsZXRpb24vamF2YS90ZXN0MTItc291cmNlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDRjOTBmOAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL2NsYXNzTmFtZS9uYW1lQ29tcGxldGlvbi9qYXZhL3Rlc3QxMi1zb3VyY2UuamF2YQpAQCAtMCwwICsxLDcgQEAKK3BhY2thZ2UgYWFhOworQGludGVyZmFjZSBNeU9iamVjdFR5cGUge30KK2NsYXNzIEEgeworICB2b2lkIGFhYSgpIHsKKyAgICBnZXRDbGFzcygpLmdldEFubm90YXRpb25zKE15T2JqZWN0PGNhcmV0PikKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL2NsYXNzTmFtZS9uYW1lQ29tcGxldGlvbi9qYXZhL3Rlc3QxMy1yZXN1bHQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL2NsYXNzTmFtZS9uYW1lQ29tcGxldGlvbi9qYXZhL3Rlc3QxMy1yZXN1bHQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MTJjZTI0Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vY2xhc3NOYW1lL25hbWVDb21wbGV0aW9uL2phdmEvdGVzdDEzLXJlc3VsdC5qYXZhCkBAIC0wLDAgKzEsOSBAQAorcGFja2FnZSBhYWE7CitpbXBvcnQgamF2YS5sYW5nLmFubm90YXRpb24uKjsKKworQFJldGVudGlvbihSZXRlbnRpb25Qb2xpY3kuUlVOVElNRSkKK0BpbnRlcmZhY2UgTXlPYmplY3RUeXBlIHt9CisKK2NsYXNzIEEgeworICBNeU9iamVjdFR5cGU8Y2FyZXQ+Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vY2xhc3NOYW1lL25hbWVDb21wbGV0aW9uL2phdmEvdGVzdDEzLXNvdXJjZS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vY2xhc3NOYW1lL25hbWVDb21wbGV0aW9uL2phdmEvdGVzdDEzLXNvdXJjZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE2YWMyMDIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9jbGFzc05hbWUvbmFtZUNvbXBsZXRpb24vamF2YS90ZXN0MTMtc291cmNlLmphdmEKQEAgLTAsMCArMSw5IEBACitwYWNrYWdlIGFhYTsKK2ltcG9ydCBqYXZhLmxhbmcuYW5ub3RhdGlvbi4qOworCitAUmV0ZW50aW9uKFJldGVudGlvblBvbGljeS5SVU5USU1FKQorQGludGVyZmFjZSBNeU9iamVjdFR5cGUge30KKworY2xhc3MgQSB7CisgIE15PGNhcmV0PgorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL2NsYXNzTmFtZS9uYW1lQ29tcGxldGlvbi9qYXZhL3Rlc3QyLXJlc3VsdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vY2xhc3NOYW1lL25hbWVDb21wbGV0aW9uL2phdmEvdGVzdDItcmVzdWx0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTkxN2ZlYgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL2NsYXNzTmFtZS9uYW1lQ29tcGxldGlvbi9qYXZhL3Rlc3QyLXJlc3VsdC5qYXZhCkBAIC0wLDAgKzEsNSBAQAorY2xhc3MgVGVzdDEgeworICAgIHB1YmxpYyB2b2lkIGZvbygpeworICAgICAgICBUZXN0MTxjYXJldD4KKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vY2xhc3NOYW1lL25hbWVDb21wbGV0aW9uL2phdmEvdGVzdDItc291cmNlLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9jbGFzc05hbWUvbmFtZUNvbXBsZXRpb24vamF2YS90ZXN0Mi1zb3VyY2UuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZjQ5YmUwCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vY2xhc3NOYW1lL25hbWVDb21wbGV0aW9uL2phdmEvdGVzdDItc291cmNlLmphdmEKQEAgLTAsMCArMSw1IEBACitjbGFzcyBUZXN0MSB7CisgICAgcHVibGljIHZvaWQgZm9vKCl7CisgICAgICAgIFRlczxjYXJldD4KKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vY2xhc3NOYW1lL25hbWVDb21wbGV0aW9uL2phdmEvdGVzdDMtcmVzdWx0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9jbGFzc05hbWUvbmFtZUNvbXBsZXRpb24vamF2YS90ZXN0My1yZXN1bHQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40M2E2ZTUyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vY2xhc3NOYW1lL25hbWVDb21wbGV0aW9uL2phdmEvdGVzdDMtcmVzdWx0LmphdmEKQEAgLTAsMCArMSwzIEBACitjbGFzcyBaWlpaWlp7fQorCitjbGFzcyBBIGltcGxlbWVudHMgWlpaWlpaPGNhcmV0Pnt9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vY2xhc3NOYW1lL25hbWVDb21wbGV0aW9uL2phdmEvdGVzdDMtc291cmNlLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9jbGFzc05hbWUvbmFtZUNvbXBsZXRpb24vamF2YS90ZXN0My1zb3VyY2UuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ODZkMmI0Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vY2xhc3NOYW1lL25hbWVDb21wbGV0aW9uL2phdmEvdGVzdDMtc291cmNlLmphdmEKQEAgLTAsMCArMSwzIEBACitjbGFzcyBaWlpaWlp7fQorCitjbGFzcyBBIGltcGxlbWVudHMgWlpaPGNhcmV0Pnt9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vY2xhc3NOYW1lL25hbWVDb21wbGV0aW9uL2phdmEvdGVzdDQtcmVzdWx0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9jbGFzc05hbWUvbmFtZUNvbXBsZXRpb24vamF2YS90ZXN0NC1yZXN1bHQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMzM0OWFjCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vY2xhc3NOYW1lL25hbWVDb21wbGV0aW9uL2phdmEvdGVzdDQtcmVzdWx0LmphdmEKQEAgLTAsMCArMSwzIEBACitpbnRlcmZhY2UgWlpaWlpae30KKworY2xhc3MgQSBpbXBsZW1lbnRzIFpaWlpaWjxjYXJldD57fQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL2NsYXNzTmFtZS9uYW1lQ29tcGxldGlvbi9qYXZhL3Rlc3Q0LXNvdXJjZS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vY2xhc3NOYW1lL25hbWVDb21wbGV0aW9uL2phdmEvdGVzdDQtc291cmNlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjBmOWQ2OQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL2NsYXNzTmFtZS9uYW1lQ29tcGxldGlvbi9qYXZhL3Rlc3Q0LXNvdXJjZS5qYXZhCkBAIC0wLDAgKzEsMyBAQAoraW50ZXJmYWNlIFpaWlpaWnt9CisKK2NsYXNzIEEgaW1wbGVtZW50cyBaWlo8Y2FyZXQ+e30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9jbGFzc05hbWUvbmFtZUNvbXBsZXRpb24vamF2YS90ZXN0Ny1yZXN1bHQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL2NsYXNzTmFtZS9uYW1lQ29tcGxldGlvbi9qYXZhL3Rlc3Q3LXJlc3VsdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMzMjdjYjYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9jbGFzc05hbWUvbmFtZUNvbXBsZXRpb24vamF2YS90ZXN0Ny1yZXN1bHQuamF2YQpAQCAtMCwwICsxLDUgQEAKK2NsYXNzIE15T2JqZWN0IHt9CitAaW50ZXJmYWNlIE15T2JqZWN0VHlwZSB7fQorCitATXlPYmplY3RUeXBlPGNhcmV0PgorY2xhc3MgQSB7fQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL2NsYXNzTmFtZS9uYW1lQ29tcGxldGlvbi9qYXZhL3Rlc3Q3LXNvdXJjZS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vY2xhc3NOYW1lL25hbWVDb21wbGV0aW9uL2phdmEvdGVzdDctc291cmNlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGRhMjhiOAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL2NsYXNzTmFtZS9uYW1lQ29tcGxldGlvbi9qYXZhL3Rlc3Q3LXNvdXJjZS5qYXZhCkBAIC0wLDAgKzEsNSBAQAorY2xhc3MgTXlPYmplY3Qge30KK0BpbnRlcmZhY2UgTXlPYmplY3RUeXBlIHt9CisKK0BNeU9iajxjYXJldD4KK2NsYXNzIEEge30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9jbGFzc05hbWUvbmFtZUNvbXBsZXRpb24vamF2YS90ZXN0OC1yZXN1bHQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL2NsYXNzTmFtZS9uYW1lQ29tcGxldGlvbi9qYXZhL3Rlc3Q4LXJlc3VsdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMyYjFiYWIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9jbGFzc05hbWUvbmFtZUNvbXBsZXRpb24vamF2YS90ZXN0OC1yZXN1bHQuamF2YQpAQCAtMCwwICsxLDUgQEAKK0BpbnRlcmZhY2UgTXlPYmplY3RUeXBlIHt9CisKK2NsYXNzIEEgeworICB2b2lkIGFhYShATXlPYmplY3RUeXBlPGNhcmV0Pik7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vY2xhc3NOYW1lL25hbWVDb21wbGV0aW9uL2phdmEvdGVzdDgtc291cmNlLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9jbGFzc05hbWUvbmFtZUNvbXBsZXRpb24vamF2YS90ZXN0OC1zb3VyY2UuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MjgwMGFmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vY2xhc3NOYW1lL25hbWVDb21wbGV0aW9uL2phdmEvdGVzdDgtc291cmNlLmphdmEKQEAgLTAsMCArMSw1IEBACitAaW50ZXJmYWNlIE15T2JqZWN0VHlwZSB7fQorCitjbGFzcyBBIHsKKyAgdm9pZCBhYWEoQE15T2JqPGNhcmV0Pik7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vY2xhc3NOYW1lL25hbWVDb21wbGV0aW9uL2phdmEvdGVzdDktcmVzdWx0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9jbGFzc05hbWUvbmFtZUNvbXBsZXRpb24vamF2YS90ZXN0OS1yZXN1bHQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNDQ2NmQxCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vY2xhc3NOYW1lL25hbWVDb21wbGV0aW9uL2phdmEvdGVzdDktcmVzdWx0LmphdmEKQEAgLTAsMCArMSwzIEBACitpbXBvcnQgTXlPYmplY3RUeXBlPGNhcmV0PgorQGludGVyZmFjZSBNeU9iamVjdFR5cGUge30KK2NsYXNzIEEge30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9jbGFzc05hbWUvbmFtZUNvbXBsZXRpb24vamF2YS90ZXN0OS1zb3VyY2UuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL2NsYXNzTmFtZS9uYW1lQ29tcGxldGlvbi9qYXZhL3Rlc3Q5LXNvdXJjZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjllMjZkNTJjCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vY2xhc3NOYW1lL25hbWVDb21wbGV0aW9uL2phdmEvdGVzdDktc291cmNlLmphdmEKQEAgLTAsMCArMSwzIEBACitpbXBvcnQgTXlPYmo8Y2FyZXQ+CitAaW50ZXJmYWNlIE15T2JqZWN0VHlwZSB7fQorY2xhc3MgQSB7fQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL2NsYXNzTmFtZS9uYW1lQ29tcGxldGlvbi9qYXZhL3Rlc3Q5XzItcmVzdWx0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9jbGFzc05hbWUvbmFtZUNvbXBsZXRpb24vamF2YS90ZXN0OV8yLXJlc3VsdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc0MjBkY2IKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9jbGFzc05hbWUvbmFtZUNvbXBsZXRpb24vamF2YS90ZXN0OV8yLXJlc3VsdC5qYXZhCkBAIC0wLDAgKzEsNSBAQAoraW1wb3J0IE15T2JqZWN0VHlwZTxjYXJldD4KK0BpbnRlcmZhY2UgTXlPYmplY3RUeXBlIHsKKyAgaW50IHBhcmFtKCk7Cit9CitjbGFzcyBBIHt9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vY2xhc3NOYW1lL25hbWVDb21wbGV0aW9uL2phdmEvdGVzdDlfMi1zb3VyY2UuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL2NsYXNzTmFtZS9uYW1lQ29tcGxldGlvbi9qYXZhL3Rlc3Q5XzItc291cmNlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjM5OWU4YgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL2NsYXNzTmFtZS9uYW1lQ29tcGxldGlvbi9qYXZhL3Rlc3Q5XzItc291cmNlLmphdmEKQEAgLTAsMCArMSw1IEBACitpbXBvcnQgTXlPYmo8Y2FyZXQ+CitAaW50ZXJmYWNlIE15T2JqZWN0VHlwZSB7CisgIGludCBwYXJhbSgpOworfQorY2xhc3MgQSB7fQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL2NsYXNzTmFtZS9uYW1lQ29tcGxldGlvbi9qYXZhL3Rlc3Q5XzMtcmVzdWx0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9jbGFzc05hbWUvbmFtZUNvbXBsZXRpb24vamF2YS90ZXN0OV8zLXJlc3VsdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYyODQyYjcKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9jbGFzc05hbWUvbmFtZUNvbXBsZXRpb24vamF2YS90ZXN0OV8zLXJlc3VsdC5qYXZhCkBAIC0wLDAgKzEsOCBAQAorQGludGVyZmFjZSBNeU9iamVjdFR5cGUgeworICBpbnQgcGFyYW0oKTsKK30KK2NsYXNzIEEgeworICB2b2lkIGZvbygpIHsKKyAgICBNeU9iamVjdFR5cGU8Y2FyZXQ+CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9jbGFzc05hbWUvbmFtZUNvbXBsZXRpb24vamF2YS90ZXN0OV8zLXNvdXJjZS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vY2xhc3NOYW1lL25hbWVDb21wbGV0aW9uL2phdmEvdGVzdDlfMy1zb3VyY2UuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OWQ5NWIzCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vY2xhc3NOYW1lL25hbWVDb21wbGV0aW9uL2phdmEvdGVzdDlfMy1zb3VyY2UuamF2YQpAQCAtMCwwICsxLDggQEAKK0BpbnRlcmZhY2UgTXlPYmplY3RUeXBlIHsKKyAgaW50IHBhcmFtKCk7Cit9CitjbGFzcyBBIHsKKyAgdm9pZCBmb28oKSB7CisgICAgTXlPYjxjYXJldD4KKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL2NsYXNzTmFtZS9uYW1lQ29tcGxldGlvbi9qYXZhL3ZhclR5cGUtcmVzdWx0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9jbGFzc05hbWUvbmFtZUNvbXBsZXRpb24vamF2YS92YXJUeXBlLXJlc3VsdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZjMTdkMzQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9jbGFzc05hbWUvbmFtZUNvbXBsZXRpb24vamF2YS92YXJUeXBlLXJlc3VsdC5qYXZhCkBAIC0wLDAgKzEsNSBAQAorY2xhc3MgTXlDbGFzczEgeworICB7CisgICAgTXlDbGFzczE8Y2FyZXQ+Zi5vbygpCisgIH0gIAorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL2NsYXNzTmFtZS9uYW1lQ29tcGxldGlvbi9qYXZhL3ZhclR5cGUtc291cmNlLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9jbGFzc05hbWUvbmFtZUNvbXBsZXRpb24vamF2YS92YXJUeXBlLXNvdXJjZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRlMTJjZTIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9jbGFzc05hbWUvbmFtZUNvbXBsZXRpb24vamF2YS92YXJUeXBlLXNvdXJjZS5qYXZhCkBAIC0wLDAgKzEsNSBAQAorY2xhc3MgTXlDbGFzczEgeworICB7CisgICAgTUNsYTxjYXJldD5mLm9vKCkKKyAgfSAgCit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vY3VzdG9tRmlsZVR5cGUvMS5jcyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL2N1c3RvbUZpbGVUeXBlLzEuY3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGI0ODIzZAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL2N1c3RvbUZpbGVUeXBlLzEuY3MKQEAgLTAsMCArMSBAQAorY29udDxjYXJldD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9jdXN0b21GaWxlVHlwZS8xX2FmdGVyLmNzIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vY3VzdG9tRmlsZVR5cGUvMV9hZnRlci5jcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOTRjNzhkCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vY3VzdG9tRmlsZVR5cGUvMV9hZnRlci5jcwpAQCAtMCwwICsxIEBACitjb250aW51ZTxjYXJldD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9jdXN0b21GaWxlVHlwZS8yLmNzIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vY3VzdG9tRmlsZVR5cGUvMi5jcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MGFiYTc0Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vY3VzdG9tRmlsZVR5cGUvMi5jcwpAQCAtMCwwICsxLDMgQEAKK2lmICh0cnVlKSB7CisgIHdoaTxjYXJldD4KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9jdXN0b21GaWxlVHlwZS8yX2FmdGVyLmNzIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vY3VzdG9tRmlsZVR5cGUvMl9hZnRlci5jcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NDE2MjMwCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vY3VzdG9tRmlsZVR5cGUvMl9hZnRlci5jcwpAQCAtMCwwICsxLDMgQEAKK2lmICh0cnVlKSB7CisgIHdoaWxlPGNhcmV0PgorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL2N1c3RvbUZpbGVUeXBlL0VybGFuZy5lcmwgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9jdXN0b21GaWxlVHlwZS9FcmxhbmcuZXJsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQyN2NlMTc0Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vY3VzdG9tRmlsZVR5cGUvRXJsYW5nLmVybApAQCAtMCwwICsxIEBACitjYTxjYXJldD4KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL2N1c3RvbUZpbGVUeXBlL1dvcmRDb21wbGV0aW9uLmNzIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vY3VzdG9tRmlsZVR5cGUvV29yZENvbXBsZXRpb24uY3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzYwZGYxN2YKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9jdXN0b21GaWxlVHlwZS9Xb3JkQ29tcGxldGlvbi5jcwpAQCAtMCwwICsxLDIgQEAKK3doaXdoaXdoaQorICB3aGk8Y2FyZXQ+CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9kb3QvRG90MS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vZG90L0RvdDEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZWVmYjY4Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vZG90L0RvdDEuamF2YQpAQCAtMCwwICsxLDExIEBACitjbGFzcyBEb3QxeworICBjbGFzcyBBeworICAgIGludCBhID0gMDsKKyAgICBpbnQgZm9vKCl7CisgIH0KKyAgfQorICBzdGF0aWMgeworCQorICAgIGludCBhID0gbmV3IEEoKS48Y2FyZXQ+CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL2RvdC9Eb3QxMC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vZG90L0RvdDEwLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDA5NTc0MQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL2RvdC9Eb3QxMC5qYXZhCkBAIC0wLDAgKzEsMTggQEAKKy8qKgorICogQ3JlYXRlZCBieSBJbnRlbGxpSiBJREVBLgorICogVXNlcjogaWsKKyAqIERhdGU6IDIzLjAxLjIwMDMKKyAqIFRpbWU6IDE3OjA2OjU3CisgKiBUbyBjaGFuZ2UgdGhpcyB0ZW1wbGF0ZSB1c2UgT3B0aW9ucyB8IEZpbGUgVGVtcGxhdGVzLgorICovCitwdWJsaWMgY2xhc3MgRG90OSB7CisgICAgcHVibGljIHN0YXRpYyBjbGFzcyBBeworICAgICAgICBwdWJsaWMgQSgpe30KKyAgICAgICAgcHVibGljIHZvaWQgZm9vKCl7fQorICAgIH0KKworICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKyAgICAgICAgbG9uZ1tdIGFyciA9IG5ldyBsb25nWzBdOworICAgICAgICBhcnIuPGNhcmV0PgorICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL2RvdC9Eb3QxMS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vZG90L0RvdDExLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODcyMjU5MgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL2RvdC9Eb3QxMS5qYXZhCkBAIC0wLDAgKzEsMTggQEAKKy8qKgorICogQ3JlYXRlZCBieSBJbnRlbGxpSiBJREVBLgorICogVXNlcjogaWsKKyAqIERhdGU6IDI3LjAxLjIwMDMKKyAqIFRpbWU6IDE5OjM1OjM3CisgKiBUbyBjaGFuZ2UgdGhpcyB0ZW1wbGF0ZSB1c2UgT3B0aW9ucyB8IEZpbGUgVGVtcGxhdGVzLgorICovCitwdWJsaWMgY2xhc3MgRG90MTEgZXh0ZW5kcyBBIHsKKyAgICB2b2lkIGZvbzEoKXt9CisKKyAgICB7CisgICAgICAgIHRoaXMuPGNhcmV0PgorICAgIH0KK30KKworY2xhc3MgQXsKKyAgICB2b2lkIGZvbygpe30KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9kb3QvRG90MTIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL2RvdC9Eb3QxMi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE4MzRhMzMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9kb3QvRG90MTIuamF2YQpAQCAtMCwwICsxLDIwIEBACisvKioKKyAqIENyZWF0ZWQgYnkgSW50ZWxsaUogSURFQS4KKyAqIFVzZXI6IGlrCisgKiBEYXRlOiAyNy4wMS4yMDAzCisgKiBUaW1lOiAxOTozNzoxMgorICogVG8gY2hhbmdlIHRoaXMgdGVtcGxhdGUgdXNlIE9wdGlvbnMgfCBGaWxlIFRlbXBsYXRlcy4KKyAqLworCitwdWJsaWMgY2xhc3MgRG90MTIgZXh0ZW5kcyBBIHsKKyAgICB2b2lkIGZvbzEoKXt9CisKKyAgICB7CisKKyAgICAgICAgc3VwZXIuPGNhcmV0PgorICAgIH0KK30KKworY2xhc3MgQXsKKyAgICB2b2lkIGZvbygpe30KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9kb3QvRG90Mi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vZG90L0RvdDIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MmVhMzllCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vZG90L0RvdDIuamF2YQpAQCAtMCwwICsxLDExIEBACitjbGFzcyBEb3QyeworICBjbGFzcyBBeworICAgIHN0YXRpYyBpbnQgYSA9IDA7CisgICAgc3RhdGljIGludCBmb28oKXsKKyAgfQorICB9CisgIHN0YXRpYyB7CisJCisgICAgaW50IGEgPSBBLjxjYXJldD4KKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vZG90L0RvdDMuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL2RvdC9Eb3QzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDhiNjdiNgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL2RvdC9Eb3QzLmphdmEKQEAgLTAsMCArMSwxNSBAQAorY2xhc3MgRG90M3sKKyAgY2xhc3MgQXsKKyAgICBpbnQgYSA9IDA7CisgICAgaW50IGZvbygpeworICB9CisgIH0KKyAgc3RhdGljIHsKKyAgICAKKyAgICBPYmplY3QgYSA9IG5ldyBBKCl7CisgICAgICBzdGF0aWMgaW50IGZvbygpeworICAgICAgICBpbnQgYyA9IHN1cGVyLjxjYXJldD4KKyAgICAgIH0KKyAgICB9OworICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9kb3QvRG90NC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vZG90L0RvdDQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NjBhYjFiCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vZG90L0RvdDQuamF2YQpAQCAtMCwwICsxLDEwIEBACitjbGFzcyBEb3Q0eworICBjbGFzcyBBeworICAgIHN0YXRpYyBpbnQgYSA9IDA7CisgICAgaW50IGZvbygpeworICAgIH0KKyAgfQorICBzdGF0aWMgeworICAgIGludCBhID0gbmV3IEEoKS48Y2FyZXQ+CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL2RvdC9Eb3Q1LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9kb3QvRG90NS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgwMGI1NWMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9kb3QvRG90NS5qYXZhCkBAIC0wLDAgKzEsMTIgQEAKK2ltcG9ydCBqYXZhLjxjYXJldD4KKworY2xhc3MgRG90NXsKKyAgY2xhc3MgQXsKKyAgICBzdGF0aWMgaW50IGEgPSAwOworICAgIGludCBmb28oKXsKKyAgICB9CisgIH0KKyAgc3RhdGljIHsKKyAgICBpbnQgYSA9IG5ldyBBKCkuCisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL2RvdC9Eb3Q2LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9kb3QvRG90Ni5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhkZTE0MzAKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9kb3QvRG90Ni5qYXZhCkBAIC0wLDAgKzEsNSBAQAorY2xhc3MgRG90NnsKKyAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncyl7CisgICAgaW50IGEgPSBhcmdzWzBdLjxjYXJldD4KKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vZG90L0RvdDcuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL2RvdC9Eb3Q3LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODE5ZjQyNAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL2RvdC9Eb3Q3LmphdmEKQEAgLTAsMCArMSw1IEBACitjbGFzcyBEb3Q3eworICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKXsKKyAgICBpbnQgYSA9IGFyZ3MuPGNhcmV0PgorICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9kb3QvRG90OC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vZG90L0RvdDguamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NWVmMmVlCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vZG90L0RvdDguamF2YQpAQCAtMCwwICsxLDE5IEBACisvKioKKyAqIENyZWF0ZWQgYnkgSW50ZWxsaUogSURFQS4KKyAqIFVzZXI6IGlrCisgKiBEYXRlOiAyMy4wMS4yMDAzCisgKiBUaW1lOiAxNTowNDo0NQorICogVG8gY2hhbmdlIHRoaXMgdGVtcGxhdGUgdXNlIE9wdGlvbnMgfCBGaWxlIFRlbXBsYXRlcy4KKyAqLworcHVibGljIGNsYXNzIERvdDggeworCisgICAgeworICAgICAgICBuZXcgQSgpLjxjYXJldD4KKyAgICB9Cit9CitjbGFzcyBBeworICAgIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKXsKKworICAgICAgICByZXR1cm4gIiIuOworICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL2RvdC9Eb3Q5LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9kb3QvRG90OS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFjZGYxMWQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9kb3QvRG90OS5qYXZhCkBAIC0wLDAgKzEsMTcgQEAKKy8qKgorICogQ3JlYXRlZCBieSBJbnRlbGxpSiBJREVBLgorICogVXNlcjogaWsKKyAqIERhdGU6IDIzLjAxLjIwMDMKKyAqIFRpbWU6IDE3OjA2OjU3CisgKiBUbyBjaGFuZ2UgdGhpcyB0ZW1wbGF0ZSB1c2UgT3B0aW9ucyB8IEZpbGUgVGVtcGxhdGVzLgorICovCitwdWJsaWMgY2xhc3MgRG90OSB7CisgICAgcHVibGljIHN0YXRpYyBjbGFzcyBBeworICAgICAgICBwdWJsaWMgQSgpe30KKyAgICAgICAgcHVibGljIHZvaWQgZm9vKCl7fQorICAgIH0KKworICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKyAgICAgICAgbmV3IEEoKS48Y2FyZXQ+CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vZG90L011bHRpQ2F0Y2guamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL2RvdC9NdWx0aUNhdGNoLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWI2OTgzYTMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9kb3QvTXVsdGlDYXRjaC5qYXZhCkBAIC0wLDAgKzEsMzMgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwMC0yMDExIEpldEJyYWlucyBzLnIuby4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCitjbGFzcyBDIHsKKyAgc3RhdGljIGNsYXNzIEUgZXh0ZW5kcyBFeGNlcHRpb24geyB9CisgIGludGVyZmFjZSBJIHsgdm9pZCBpKCk7IH0KKyAgc3RhdGljIGNsYXNzIEUxIGV4dGVuZHMgRSBpbXBsZW1lbnRzIEkgeyBwdWJsaWMgdm9pZCBpKCkgeyB9IH0KKyAgc3RhdGljIGNsYXNzIEUyIGV4dGVuZHMgRSBpbXBsZW1lbnRzIEkgeyBwdWJsaWMgdm9pZCBpKCkgeyB9IH0KKworICB2b2lkIG0oYm9vbGVhbiBmKSB7CisgICAgdHJ5IHsKKyAgICAgIGlmIChmKQorICAgICAgICB0aHJvdyBuZXcgRTEoKTsKKyAgICAgIGVsc2UKKyAgICAgICAgdGhyb3cgbmV3IEUyKCk7CisgICAgfQorICAgIGNhdGNoIChFMSB8IEUyIGUpIHsKKyAgICAgIGUuPGNhcmV0PgorICAgIH0KKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL2phdmFkb2MvQ2xhc3NUYWdOYW1lLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9qYXZhZG9jL0NsYXNzVGFnTmFtZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFiYzJlN2QKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9qYXZhZG9jL0NsYXNzVGFnTmFtZS5qYXZhCkBAIC0wLDAgKzEsNSBAQAorLyoqCisgKiBAPGNhcmV0PgorICovCisgCitjbGFzcyBDe30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9qYXZhZG9jL0V4Y2VwdGlvbjAuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL2phdmFkb2MvRXhjZXB0aW9uMC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJhYzQ2YmQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9qYXZhZG9jL0V4Y2VwdGlvbjAuamF2YQpAQCAtMCwwICsxLDYgQEAKK2NsYXNzIFRlc3QgeworICAgIC8qKgorICAgICAqICBAPGNhcmV0PgorICAgICAqLworICAgICBwdWJsaWMgdm9pZCBmb28oKSB0aHJvd3MgRXhjZXB0aW9uIHt9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vamF2YWRvYy9FeGNlcHRpb24xLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9qYXZhZG9jL0V4Y2VwdGlvbjEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ODhjZGZiCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vamF2YWRvYy9FeGNlcHRpb24xLmphdmEKQEAgLTAsMCArMSw2IEBACitjbGFzcyBUZXN0IHsKKyAgICAvKioKKyAgICAgKiAgQGV4Y2VwdGlvbiA8Y2FyZXQ+CisgICAgICovCisgICAgIHB1YmxpYyB2b2lkIGZvbygpIHRocm93cyBFeGNlcHRpb24ge30KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9qYXZhZG9jL0V4Y2VwdGlvbjIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL2phdmFkb2MvRXhjZXB0aW9uMi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZlOTk3MWIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9qYXZhZG9jL0V4Y2VwdGlvbjIuamF2YQpAQCAtMCwwICsxLDYgQEAKK2NsYXNzIFRlc3QgeworICAgIC8qKgorICAgICAqICBAZXhjZXB0aW9uIDxjYXJldD4KKyAgICAgKi8KKyAgICAgcHVibGljIHZvaWQgZm9vKCkgdGhyb3dzIGphdmEuaW8uSU9FeGNlcHRpb24sIElsbGVnYWxTdGF0ZUV4Y2VwdGlvbiB7fQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL2phdmFkb2MvRmllbGRSZWZlcmVuY2VJbklubmVyQ2xhc3NKYXZhZG9jLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9qYXZhZG9jL0ZpZWxkUmVmZXJlbmNlSW5Jbm5lckNsYXNzSmF2YWRvYy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA3ZTQ4Y2UKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9qYXZhZG9jL0ZpZWxkUmVmZXJlbmNlSW5Jbm5lckNsYXNzSmF2YWRvYy5qYXZhCkBAIC0wLDAgKzEsMTAgQEAKK3B1YmxpYyBjbGFzcyBUZXN0Q2xhc3MgeworCisgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE1ZX0NPTlNUQU5UID0gMDsKKworICAvKioKKyAgICoge0BsaW5rICNNWTxjYXJldD4KKyAgICovCisgIHB1YmxpYyBjbGFzcyBJbm5lciB7fQorCit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vamF2YWRvYy9GaWVsZFJlZmVyZW5jZUluSW5uZXJDbGFzc0phdmFkb2NfYWZ0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL2phdmFkb2MvRmllbGRSZWZlcmVuY2VJbklubmVyQ2xhc3NKYXZhZG9jX2FmdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTUzZGMwZQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL2phdmFkb2MvRmllbGRSZWZlcmVuY2VJbklubmVyQ2xhc3NKYXZhZG9jX2FmdGVyLmphdmEKQEAgLTAsMCArMSwxMCBAQAorcHVibGljIGNsYXNzIFRlc3RDbGFzcyB7CisKKyAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTVlfQ09OU1RBTlQgPSAwOworCisgIC8qKgorICAgKiB7QGxpbmsgI01ZX0NPTlNUQU5UPGNhcmV0PgorICAgKi8KKyAgcHVibGljIGNsYXNzIElubmVyIHt9CisKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9qYXZhZG9jL0ZpZWxkVGFnTmFtZS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vamF2YWRvYy9GaWVsZFRhZ05hbWUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYjc2NzVhCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vamF2YWRvYy9GaWVsZFRhZ05hbWUuamF2YQpAQCAtMCwwICsxLDcgQEAKK2NsYXNzIEN7CisgICAgCisgICAgLyoqCisgICAgICogQDxjYXJldD4KKyAgICAgKi8KKyAgICBwcml2YXRlIGludCBteUZpZWxkOworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL2phdmFkb2MvRmluaXNoV2l0aFNoYXJwLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9qYXZhZG9jL0ZpbmlzaFdpdGhTaGFycC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZkM2EwMDkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9qYXZhZG9jL0ZpbmlzaFdpdGhTaGFycC5qYXZhCkBAIC0wLDAgKzEsMTMgQEAKKy8qKgorICogU29tZSB0ZXh0IHtAbGluayBGdWI8Y2FyZXQ+CisgKi8KKyAKK2NsYXNzIEN7fQorCisKK2NsYXNzIEZ1YmFyIHsKKyAgdm9pZCBmb28oKTsKKyAgdm9pZCBiYXIoKTsKK30KKworY2xhc3MgRnViYXIyIHt9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vamF2YWRvYy9GaW5pc2hXaXRoU2hhcnBfYWZ0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL2phdmFkb2MvRmluaXNoV2l0aFNoYXJwX2FmdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGZkZjQzZQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL2phdmFkb2MvRmluaXNoV2l0aFNoYXJwX2FmdGVyLmphdmEKQEAgLTAsMCArMSwxMyBAQAorLyoqCisgKiBTb21lIHRleHQge0BsaW5rIEZ1YmFyIzxjYXJldD4KKyAqLworIAorY2xhc3MgQ3t9CisKKworY2xhc3MgRnViYXIgeworICB2b2lkIGZvbygpOworICB2b2lkIGJhcigpOworfQorCitjbGFzcyBGdWJhcjIge30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9qYXZhZG9jL0lERUFERVYxMDYyMC1hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vamF2YWRvYy9JREVBREVWMTA2MjAtYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NzAwZWY2Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vamF2YWRvYy9JREVBREVWMTA2MjAtYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDcgQEAKKy8qKgorICogQHNlZSAjZm9vKE9iamVjdCkgPGNhcmV0PgorICovCitjbGFzcyBUZXN0MTxUPiB7CisgICAgcHVibGljIHZvaWQgZm9vKFQgYmFyKSB7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL2phdmFkb2MvSURFQURFVjEwNjIwLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9qYXZhZG9jL0lERUFERVYxMDYyMC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI4NWZlZTgKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9qYXZhZG9jL0lERUFERVYxMDYyMC5qYXZhCkBAIC0wLDAgKzEsNyBAQAorLyoqCisgKiBAc2VlICNmbzxjYXJldD4KKyAqLworY2xhc3MgVGVzdDE8VD4geworICAgIHB1YmxpYyB2b2lkIGZvbyhUIGJhcikgeworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9qYXZhZG9jL0lubGluZVJlZmVyZW5jZS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vamF2YWRvYy9JbmxpbmVSZWZlcmVuY2UuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MDVkMDY4Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vamF2YWRvYy9JbmxpbmVSZWZlcmVuY2UuamF2YQpAQCAtMCwwICsxLDQgQEAKKy8qKgorICoge0BsaW5rIGphdmEuPGNhcmV0Pn0KKyAqLworY2xhc3MgQXt9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9qYXZhZG9jL0lubGluZVRhZ05hbWUuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL2phdmFkb2MvSW5saW5lVGFnTmFtZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFhNWQ3MzcKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9qYXZhZG9jL0lubGluZVRhZ05hbWUuamF2YQpAQCAtMCwwICsxLDUgQEAKKy8qKgorICogU29tZSB0ZXh0IHtAPGNhcmV0PgorICovCisgCitjbGFzcyBDe30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9qYXZhZG9jL01ldGhvZEJlZm9yZVNoYXJwLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9qYXZhZG9jL01ldGhvZEJlZm9yZVNoYXJwLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjBjMTI1OQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL2phdmFkb2MvTWV0aG9kQmVmb3JlU2hhcnAuamF2YQpAQCAtMCwwICsxLDcgQEAKKy8qKgorICogU29tZSB0ZXh0IHtAbGluayBGdWJhciNmbzxjYXJldD4jCisgKi8KKyAKK2NsYXNzIEZ1YmFyIHsKKyAgdm9pZCBmb28oKTsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9qYXZhZG9jL01ldGhvZEJlZm9yZVNoYXJwX2FmdGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9qYXZhZG9jL01ldGhvZEJlZm9yZVNoYXJwX2FmdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTE1MTNhMQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL2phdmFkb2MvTWV0aG9kQmVmb3JlU2hhcnBfYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDcgQEAKKy8qKgorICogU29tZSB0ZXh0IHtAbGluayBGdWJhciNmb28oKX0gPGNhcmV0PiMKKyAqLworIAorY2xhc3MgRnViYXIgeworICB2b2lkIGZvbygpOworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL2phdmFkb2MvTWV0aG9kVGFnTmFtZTAuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL2phdmFkb2MvTWV0aG9kVGFnTmFtZTAuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYmE4YTc5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vamF2YWRvYy9NZXRob2RUYWdOYW1lMC5qYXZhCkBAIC0wLDAgKzEsNyBAQAorY2xhc3MgQ3sKKyAgICAKKyAgICAvKioKKyAgICAgKiBAPGNhcmV0PgorICAgICAqLworICAgIHByaXZhdGUgaW50IGZvbygpIHt9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vamF2YWRvYy9NZXRob2RUYWdOYW1lMS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vamF2YWRvYy9NZXRob2RUYWdOYW1lMS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZiMWNlZjIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9qYXZhZG9jL01ldGhvZFRhZ05hbWUxLmphdmEKQEAgLTAsMCArMSw3IEBACitjbGFzcyBDeworICAgIAorICAgIC8qKgorICAgICAqIEBzPGNhcmV0PgorICAgICAqLworICAgIHByaXZhdGUgaW50IGZvbygpIHt9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vamF2YWRvYy9QYXJhbVZhbHVlMC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vamF2YWRvYy9QYXJhbVZhbHVlMC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRiNTZmNTkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9qYXZhZG9jL1BhcmFtVmFsdWUwLmphdmEKQEAgLTAsMCArMSw3IEBACitjbGFzcyBDeworICAgIAorICAgIC8qKgorICAgICAqIEBwYXJhbSA8Y2FyZXQ+CisgICAgICovCisgICAgcHJpdmF0ZSBpbnQgZm9vKGludCBhLCBjaGFyIGIsIFN0cmluZyBjKSB7fQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL2phdmFkb2MvUGFyYW1WYWx1ZTEuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL2phdmFkb2MvUGFyYW1WYWx1ZTEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZDBmMDU4Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vamF2YWRvYy9QYXJhbVZhbHVlMS5qYXZhCkBAIC0wLDAgKzEsNyBAQAorY2xhc3MgQ3sKKyAgICAKKyAgICAvKioKKyAgICAgKiBAcGFyYW0gYTxjYXJldD4KKyAgICAgKi8KKyAgICBwcml2YXRlIGludCBmb28oaW50IGExLCBjaGFyIGEyLCBTdHJpbmcgYTMpIHt9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vamF2YWRvYy9QYXJhbVZhbHVlMi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vamF2YWRvYy9QYXJhbVZhbHVlMi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZiMzJjNTcKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9qYXZhZG9jL1BhcmFtVmFsdWUyLmphdmEKQEAgLTAsMCArMSw5IEBACitjbGFzcyBDeworICAgIAorICAgIC8qKgorICAgICAqIEBwYXJhbSBhMQorICAgICAqIEBwYXJhbSBhPGNhcmV0PgorICAgICAqIEBwYXJhbSBhNAorICAgICAqLworICAgIHByaXZhdGUgaW50IGZvbyhpbnQgYTEsIGNoYXIgYTIsIFN0cmluZyBhMywgYm9vbGVhbiBhNCkge30KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9qYXZhZG9jL1F1YWxpZmllZENsYXNzUmVmZXJlbmNlLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9qYXZhZG9jL1F1YWxpZmllZENsYXNzUmVmZXJlbmNlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWU4OTY2NQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL2phdmFkb2MvUXVhbGlmaWVkQ2xhc3NSZWZlcmVuY2UuamF2YQpAQCAtMCwwICsxLDcgQEAKKy8qKgorICoge0BsaW5rIEZpbGVJbnB1dFN0cjxjYXJldD59CisgKi8KKworY2xhc3MgRm9vIHsKKworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL2phdmFkb2MvUXVhbGlmaWVkQ2xhc3NSZWZlcmVuY2VfYWZ0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL2phdmFkb2MvUXVhbGlmaWVkQ2xhc3NSZWZlcmVuY2VfYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNjE3ZTFkCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vamF2YWRvYy9RdWFsaWZpZWRDbGFzc1JlZmVyZW5jZV9hZnRlci5qYXZhCkBAIC0wLDAgKzEsNyBAQAorLyoqCisgKiB7QGxpbmsgamF2YS5pby5GaWxlSW5wdXRTdHJlYW08Y2FyZXQ+fQorICovCisKK2NsYXNzIEZvbyB7CisKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9qYXZhZG9jL1JlZmVyZW5jZVByb3ZpZGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9qYXZhZG9jL1JlZmVyZW5jZVByb3ZpZGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGIyYWJmNQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL2phdmFkb2MvUmVmZXJlbmNlUHJvdmlkZXIuamF2YQpAQCAtMCwwICsxLDQgQEAKKy8qKgorICogQGN1c3RvbSA8Y2FyZXQ+CisgKi8KK2NsYXNzIEF7fQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vamF2YWRvYy9TZWUwLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9qYXZhZG9jL1NlZTAuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NjIwYmZjCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vamF2YWRvYy9TZWUwLmphdmEKQEAgLTAsMCArMSw3IEBACitjbGFzcyBDeworICAgIAorICAgIC8qKgorICAgICAqIEBzZWUgIzxjYXJldD4KKyAgICAgKi8KKyAgICBwcml2YXRlIGludCBmb28oaW50IGEsIGNoYXIgYiwgU3RyaW5nIGMpIHt9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vamF2YWRvYy9TZWUxLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9qYXZhZG9jL1NlZTEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNmZkMWE2Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vamF2YWRvYy9TZWUxLmphdmEKQEAgLTAsMCArMSw3IEBACitjbGFzcyBDeworICAgIAorICAgIC8qKgorICAgICAqIEBzZWUgI25vdDxjYXJldD4KKyAgICAgKi8KKyAgICBwcml2YXRlIGludCBmb28oaW50IGEsIGNoYXIgYiwgU3RyaW5nIGMpIHt9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vamF2YWRvYy9TZWUyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9qYXZhZG9jL1NlZTIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41M2Y0MjFhCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vamF2YWRvYy9TZWUyLmphdmEKQEAgLTAsMCArMSw5IEBACitjbGFzcyBDeworICAgIAorICAgIC8qKgorICAgICAqIEBzZWUgI25vdDxjYXJldD4KKyAgICAgKgorICAgICAqIEBzaW5jZQorICAgICAqLworICAgIHByaXZhdGUgaW50IGZvbyhpbnQgYSwgY2hhciBiLCBTdHJpbmcgYykge30KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9qYXZhZG9jL1NlZTMuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL2phdmFkb2MvU2VlMy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQwZjA1NDIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9qYXZhZG9jL1NlZTMuamF2YQpAQCAtMCwwICsxLDEwIEBACitjbGFzcyBDeworICAgIHByaXZhdGUgaW50IG15RmllbGQ7CisgICAgCisgICAgLyoqCisgICAgICogQHNlZSAjPGNhcmV0PgorICAgICAqCisgICAgICogQHNpbmNlCisgICAgICovCisgICAgcHJpdmF0ZSBpbnQgZm9vKGludCBhLCBjaGFyIGIsIFN0cmluZyBjKSB7fQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL2phdmFkb2MvU2VlNC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vamF2YWRvYy9TZWU0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzZhZTI4NgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL2phdmFkb2MvU2VlNC5qYXZhCkBAIC0wLDAgKzEsMTMgQEAKK2NsYXNzIEN7CisgICAgcHJpdmF0ZSBpbnQgbXlGaWVsZDsKKyAgICAKKyAgICAvKioKKyAgICAgKiBAc2VlIDxjYXJldD4KKyAgICAgKgorICAgICAqIEBzaW5jZQorICAgICAqLworICAgIHByaXZhdGUgaW50IGZvbyhpbnQgYSwgY2hhciBiLCBTdHJpbmcgYykge30KKyAgICAKKyAgICBjbGFzcyBBe30KKyAgICBjbGFzcyBCe30KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9qYXZhZG9jL1NlZTUuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL2phdmFkb2MvU2VlNS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxMWIzNjYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9qYXZhZG9jL1NlZTUuamF2YQpAQCAtMCwwICsxLDkgQEAKK2NsYXNzIEN7CisgICAgLyoqCisgICAgICogQHNlZSBBIzxjYXJldD4KKyAgICAgKi8KKyAgICBwcml2YXRlIGludCBteUZpZWxkOworICAgIAorICAgIGNsYXNzIEF7ICBwcml2YXRlIFN0cmluZyBteU5hbWU7ICBwcml2YXRlIGludCBmb28oaW50IGEsIGNoYXIgYiwgU3RyaW5nIGMpIHt9IH0KKyAgICBjbGFzcyBCe30KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9qYXZhZG9jL1NlZTYuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL2phdmFkb2MvU2VlNi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMzYjAxMmIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9qYXZhZG9jL1NlZTYuamF2YQpAQCAtMCwwICsxLDExIEBACitjbGFzcyBDeworICAgIC8qKgorICAgICAqIEBzZWUgI3BlcmZvcm0oPGNhcmV0PgorICAgICAqLworICAgIHByaXZhdGUgaW50IG15RmllbGQ7CisKKyAgICBwdWJsaWMgdm9pZCBwZXJmb3JtKCkge30KKyAgICBwdWJsaWMgdm9pZCBwZXJmb3JtKGludCBhKSB7fQorICAgIHB1YmxpYyB2b2lkIHBlcmZvcm0oaW50IGEsIFN0cmluZyBiKSB7fQorICAgIHB1YmxpYyB2b2lkIHBlcmZvcm0oU3RyaW5nIGIpIHt9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9qYXZhZG9jL1NlZTZBZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vamF2YWRvYy9TZWU2QWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZTlhMjZlMwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL2phdmFkb2MvU2VlNkFmdGVyLmphdmEKQEAgLTAsMCArMSwxMSBAQAorY2xhc3MgQ3sKKyAgICAvKioKKyAgICAgKiBAc2VlICNwZXJmb3JtKGludCwgU3RyaW5nKSA8Y2FyZXQ+CisgICAgICovCisgICAgcHJpdmF0ZSBpbnQgbXlGaWVsZDsKKworICAgIHB1YmxpYyB2b2lkIHBlcmZvcm0oKSB7fQorICAgIHB1YmxpYyB2b2lkIHBlcmZvcm0oaW50IGEpIHt9CisgICAgcHVibGljIHZvaWQgcGVyZm9ybShpbnQgYSwgU3RyaW5nIGIpIHt9CisgICAgcHVibGljIHZvaWQgcGVyZm9ybShTdHJpbmcgYikge30KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL2phdmFkb2MvU2hvcnRlbkNsYXNzTmFtZS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vamF2YWRvYy9TaG9ydGVuQ2xhc3NOYW1lLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzg4M2VjNAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL2phdmFkb2MvU2hvcnRlbkNsYXNzTmFtZS5qYXZhCkBAIC0wLDAgKzEsNyBAQAorcGFja2FnZSBmb287CisKKy8qKgorICogU29tZSB0ZXh0IHtAbGluayBGdWI8Y2FyZXQ+CisgKi8KK2NsYXNzIEZ1YmFyIHsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9qYXZhZG9jL1Nob3J0ZW5DbGFzc05hbWVfYWZ0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL2phdmFkb2MvU2hvcnRlbkNsYXNzTmFtZV9hZnRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYzNjRjNjIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9qYXZhZG9jL1Nob3J0ZW5DbGFzc05hbWVfYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDcgQEAKK3BhY2thZ2UgZm9vOworCisvKioKKyAqIFNvbWUgdGV4dCB7QGxpbmsgRnViYXI8Y2FyZXQ+CisgKi8KK2NsYXNzIEZ1YmFyIHsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9qYXZhZG9jL1Nob3J0ZW5DbGFzc1JlZmVyZW5jZS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vamF2YWRvYy9TaG9ydGVuQ2xhc3NSZWZlcmVuY2UuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOTliOGJlCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vamF2YWRvYy9TaG9ydGVuQ2xhc3NSZWZlcmVuY2UuamF2YQpAQCAtMCwwICsxLDkgQEAKK2ltcG9ydCBqYXZhLmlvLio7CisKKy8qKgorICoge0BsaW5rIEZpbGVJbnB1dFN0cjxjYXJldD59CisgKi8KKworY2xhc3MgRm9vIHsKKworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL2phdmFkb2MvU2hvcnRlbkNsYXNzUmVmZXJlbmNlX2FmdGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9qYXZhZG9jL1Nob3J0ZW5DbGFzc1JlZmVyZW5jZV9hZnRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMxYjE1Y2YKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9qYXZhZG9jL1Nob3J0ZW5DbGFzc1JlZmVyZW5jZV9hZnRlci5qYXZhCkBAIC0wLDAgKzEsOSBAQAoraW1wb3J0IGphdmEuaW8uKjsKKworLyoqCisgKiB7QGxpbmsgRmlsZUlucHV0U3RyZWFtPGNhcmV0Pn0KKyAqLworCitjbGFzcyBGb28geworCit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vamF2YWRvYy9UaHJvd3NOb25JbXBvcnRlZC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vamF2YWRvYy9UaHJvd3NOb25JbXBvcnRlZC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkyMWUzODQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9qYXZhZG9jL1Rocm93c05vbkltcG9ydGVkLmphdmEKQEAgLTAsMCArMSw3IEBACisvKioKKyAqIEB0aHJvd3MgTm9TRWxlRXg8Y2FyZXQ+CisgKi8KKworY2xhc3MgRm9vIHsKKworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL2phdmFkb2MvVGhyb3dzTm9uSW1wb3J0ZWRfYWZ0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL2phdmFkb2MvVGhyb3dzTm9uSW1wb3J0ZWRfYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZjFhMGMyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vamF2YWRvYy9UaHJvd3NOb25JbXBvcnRlZF9hZnRlci5qYXZhCkBAIC0wLDAgKzEsNyBAQAorLyoqCisgKiBAdGhyb3dzIGphdmEudXRpbC5Ob1N1Y2hFbGVtZW50RXhjZXB0aW9uPGNhcmV0PgorICovCisKK2NsYXNzIEZvbyB7CisKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9rZXl3b3Jkcy9hYnN0cmFjdEluSW50ZXJmYWNlLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9rZXl3b3Jkcy9hYnN0cmFjdEluSW50ZXJmYWNlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzAxZmE4YwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL2tleXdvcmRzL2Fic3RyYWN0SW5JbnRlcmZhY2UuamF2YQpAQCAtMCwwICsxLDMgQEAKK2ludGVyZmFjZSBJIHsKKyAgPGNhcmV0PgorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL2tleXdvcmRzL2FmdGVyQW5ub3RhdGlvbnMuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL2tleXdvcmRzL2FmdGVyQW5ub3RhdGlvbnMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZTdjNDc3MQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL2tleXdvcmRzL2FmdGVyQW5ub3RhdGlvbnMuamF2YQpAQCAtMCwwICsxLDIgQEAKK0BEZXByZWNhdGVkCis8Y2FyZXQ+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24va2V5d29yZHMvY2F0Y2hGaW5hbGx5LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9rZXl3b3Jkcy9jYXRjaEZpbmFsbHkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNzI0ZDkzCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24va2V5d29yZHMvY2F0Y2hGaW5hbGx5LmphdmEKQEAgLTAsMCArMSwyMyBAQAorLyoKKyAqIENvcHlyaWdodCAyMDAwLTIwMTIgSmV0QnJhaW5zIHMuci5vLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KK3B1YmxpYyBjbGFzcyBBeworIHB1YmxpYyB2b2lkIG1ldGhvZCgpeworICB0cnl7CisgICBTdHJpbmcgc3RyID0gIiI7CisgIH0KKyAgPGNhcmV0PgorIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL2tleXdvcmRzL2NoYXJJbkFubm90YXRlZFBhcmFtZXRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24va2V5d29yZHMvY2hhckluQW5ub3RhdGVkUGFyYW1ldGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjYyNDg0ZgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL2tleXdvcmRzL2NoYXJJbkFubm90YXRlZFBhcmFtZXRlci5qYXZhCkBAIC0wLDAgKzEsNyBAQAorcHVibGljIGNsYXNzIFV0aWwgeworCisgIHZvaWQgZm9vKEBOb3ROdWxsIDxjYXJldD4gYSkgeworICB9CisKKworfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24va2V5d29yZHMvY2xhc3NJbk1ldGhvZC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24va2V5d29yZHMvY2xhc3NJbk1ldGhvZC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM5Zjk2M2MKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9rZXl3b3Jkcy9jbGFzc0luTWV0aG9kLmphdmEKQEAgLTAsMCArMSw1IEBACitwdWJsaWMgY2xhc3MgVXRpbCB7CisgIHZvaWQgZm9vKCkgeworICAgIGM8Y2FyZXQ+CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL2tleXdvcmRzL2NsYXNzU2NvcGUxLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9rZXl3b3Jkcy9jbGFzc1Njb3BlMS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVkNTcxN2MKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9rZXl3b3Jkcy9jbGFzc1Njb3BlMS5qYXZhCkBAIC0wLDAgKzEgQEAKK3B1YmxpYyA8Y2FyZXQ+CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9rZXl3b3Jkcy9jbGFzc1Njb3BlMi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24va2V5d29yZHMvY2xhc3NTY29wZTIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NDA2MGUzCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24va2V5d29yZHMvY2xhc3NTY29wZTIuamF2YQpAQCAtMCwwICsxIEBACithYnN0cmFjdCA8Y2FyZXQ+CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9rZXl3b3Jkcy9jbGFzc1Njb3BlMy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24va2V5d29yZHMvY2xhc3NTY29wZTMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOWVhZDQ0Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24va2V5d29yZHMvY2xhc3NTY29wZTMuamF2YQpAQCAtMCwwICsxIEBACitjbGFzcyA8Y2FyZXQ+CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9rZXl3b3Jkcy9jbGFzc1Njb3BlNC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24va2V5d29yZHMvY2xhc3NTY29wZTQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNGU3YmZiCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24va2V5d29yZHMvY2xhc3NTY29wZTQuamF2YQpAQCAtMCwwICsxLDE4IEBACisvKgorICogQ29weXJpZ2h0IDIwMDAtMjAxMiBKZXRCcmFpbnMgcy5yLm8uCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworY2xhc3MgQXsKKzxjYXJldD4KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL2tleXdvcmRzL2NvbnRpbnVlLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9rZXl3b3Jkcy9jb250aW51ZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlkMzNmNTMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9rZXl3b3Jkcy9jb250aW51ZS5qYXZhCkBAIC0wLDAgKzEsNiBAQAorCitwdWJsaWMgY2xhc3MgRm9vIHsKKyAgICB7CisgICAgICAgIGZvcihpbnQgaTs7KSB7IGNvbnQ8Y2FyZXQ+IH0KKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24va2V5d29yZHMvY29udGludWVfYWZ0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL2tleXdvcmRzL2NvbnRpbnVlX2FmdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2YyYjEwYQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL2tleXdvcmRzL2NvbnRpbnVlX2FmdGVyLmphdmEKQEAgLTAsMCArMSw2IEBACisKK3B1YmxpYyBjbGFzcyBGb28geworICAgIHsKKyAgICAgICAgZm9yKGludCBpOzspIHsgY29udGludWU7IH0KKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24va2V5d29yZHMvZGVmYXVsdEluQW5uby5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24va2V5d29yZHMvZGVmYXVsdEluQW5uby5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMwN2JlNjQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9rZXl3b3Jkcy9kZWZhdWx0SW5Bbm5vLmphdmEKQEAgLTAsMCArMSwzIEBACitAaW50ZXJmYWNlIEZvbyB7CisgIFN0cmluZyBmb28oKSBkZWY8Y2FyZXQ+Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24va2V5d29yZHMvZGVmYXVsdEluQW5ub19hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24va2V5d29yZHMvZGVmYXVsdEluQW5ub19hZnRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYxNWViYWUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9rZXl3b3Jkcy9kZWZhdWx0SW5Bbm5vX2FmdGVyLmphdmEKQEAgLTAsMCArMSwzIEBACitAaW50ZXJmYWNlIEZvbyB7CisgIFN0cmluZyBmb28oKSBkZWZhdWx0IDxjYXJldD4KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9rZXl3b3Jkcy9leHRlbmRzMS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24va2V5d29yZHMvZXh0ZW5kczEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mM2E1Yjg0Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24va2V5d29yZHMvZXh0ZW5kczEuamF2YQpAQCAtMCwwICsxLDE2IEBACisvKgorICogQ29weXJpZ2h0IDIwMDAtMjAxMiBKZXRCcmFpbnMgcy5yLm8uCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworY2xhc3MgeDMgPGNhcmV0PgpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24va2V5d29yZHMvZXh0ZW5kczEwLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9rZXl3b3Jkcy9leHRlbmRzMTAuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZTMyNjEyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24va2V5d29yZHMvZXh0ZW5kczEwLmphdmEKQEAgLTAsMCArMSwxOCBAQAorLyoKKyAqIENvcHlyaWdodCAyMDAwLTIwMTIgSmV0QnJhaW5zIHMuci5vLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KK2NsYXNzIEF7Cisgdm9pZCA8VCBlPGNhcmV0Pj5mb28oKXt9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24va2V5d29yZHMvZXh0ZW5kczEwX2FmdGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9rZXl3b3Jkcy9leHRlbmRzMTBfYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZDYzYzNiCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24va2V5d29yZHMvZXh0ZW5kczEwX2FmdGVyLmphdmEKQEAgLTAsMCArMSwxOCBAQAorLyoKKyAqIENvcHlyaWdodCAyMDAwLTIwMTIgSmV0QnJhaW5zIHMuci5vLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KK2NsYXNzIEF7Cisgdm9pZCA8VCBleHRlbmRzIDxjYXJldD4+Zm9vKCl7fQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL2tleXdvcmRzL2V4dGVuZHMxMS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24va2V5d29yZHMvZXh0ZW5kczExLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTdjZDVkNjQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9rZXl3b3Jkcy9leHRlbmRzMTEuamF2YQpAQCAtMCwwICsxLDE4IEBACisvKgorICogQ29weXJpZ2h0IDIwMDAtMjAxMiBKZXRCcmFpbnMgcy5yLm8uCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworY2xhc3MgQXsKKyB2b2lkIDxUIGV4dGVuZHMgU3RyaW5nLCBWIGU8Y2FyZXQ+PmZvbygpe30KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9rZXl3b3Jkcy9leHRlbmRzMTFfYWZ0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL2tleXdvcmRzL2V4dGVuZHMxMV9hZnRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIwMWFhNWYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9rZXl3b3Jkcy9leHRlbmRzMTFfYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDE4IEBACisvKgorICogQ29weXJpZ2h0IDIwMDAtMjAxMiBKZXRCcmFpbnMgcy5yLm8uCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworY2xhc3MgQXsKKyB2b2lkIDxUIGV4dGVuZHMgU3RyaW5nLCBWIGV4dGVuZHMgPGNhcmV0Pj5mb28oKXt9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24va2V5d29yZHMvZXh0ZW5kczEyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9rZXl3b3Jkcy9leHRlbmRzMTIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ODBiMGViCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24va2V5d29yZHMvZXh0ZW5kczEyLmphdmEKQEAgLTAsMCArMSwyMCBAQAorLyoKKyAqIENvcHlyaWdodCAyMDAwLTIwMTIgSmV0QnJhaW5zIHMuci5vLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KK2NsYXNzIEF7CisgeworICAgQ29sbGVjdGlvbjw/IGV4PGNhcmV0Pj4KKyB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24va2V5d29yZHMvZXh0ZW5kczEyX2FmdGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9rZXl3b3Jkcy9leHRlbmRzMTJfYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43Y2Y0YmFlCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24va2V5d29yZHMvZXh0ZW5kczEyX2FmdGVyLmphdmEKQEAgLTAsMCArMSwyMCBAQAorLyoKKyAqIENvcHlyaWdodCAyMDAwLTIwMTIgSmV0QnJhaW5zIHMuci5vLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KK2NsYXNzIEF7CisgeworICAgQ29sbGVjdGlvbjw/IGV4dGVuZHMgPGNhcmV0Pj4KKyB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24va2V5d29yZHMvZXh0ZW5kczIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL2tleXdvcmRzL2V4dGVuZHMyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTAwYWM0YwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL2tleXdvcmRzL2V4dGVuZHMyLmphdmEKQEAgLTAsMCArMSwxOCBAQAorLyoKKyAqIENvcHlyaWdodCAyMDAwLTIwMTIgSmV0QnJhaW5zIHMuci5vLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KK2NsYXNzIEFBQXt9CisKK2NsYXNzIEJCQiBleHRlbmRzIDxjYXJldD4KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL2tleXdvcmRzL2V4dGVuZHMzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9rZXl3b3Jkcy9leHRlbmRzMy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAwZTAxMmIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9rZXl3b3Jkcy9leHRlbmRzMy5qYXZhCkBAIC0wLDAgKzEsMjAgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwMC0yMDEyIEpldEJyYWlucyBzLnIuby4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCitjbGFzcyBBQUF7fQorCitpbnRlcmZhY2UgQ0NDe30KKworY2xhc3MgQkJCIGV4dGVuZHMgPGNhcmV0PgpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24va2V5d29yZHMvZXh0ZW5kczQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL2tleXdvcmRzL2V4dGVuZHM0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGU3Njk3YgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL2tleXdvcmRzL2V4dGVuZHM0LmphdmEKQEAgLTAsMCArMSwyMCBAQAorLyoKKyAqIENvcHlyaWdodCAyMDAwLTIwMTIgSmV0QnJhaW5zIHMuci5vLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KK2NsYXNzIEFBQXt9CisKK2ludGVyZmFjZSBDQ0N7fQorCitjbGFzcyBCQkIgaW1wbGVtZW50cyA8Y2FyZXQ+CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9rZXl3b3Jkcy9leHRlbmRzNS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24va2V5d29yZHMvZXh0ZW5kczUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZmVjOWQ3Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24va2V5d29yZHMvZXh0ZW5kczUuamF2YQpAQCAtMCwwICsxLDE4IEBACisvKgorICogQ29weXJpZ2h0IDIwMDAtMjAxMiBKZXRCcmFpbnMgcy5yLm8uCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworY2xhc3MgQUFBe30KKworaW50ZXJmYWNlIEJCQiBleHRlbmRzIDxjYXJldD4KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL2tleXdvcmRzL2V4dGVuZHM2LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9rZXl3b3Jkcy9leHRlbmRzNi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNmZmZkYjEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9rZXl3b3Jkcy9leHRlbmRzNi5qYXZhCkBAIC0wLDAgKzEsMTggQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwMC0yMDEyIEpldEJyYWlucyBzLnIuby4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCitpbnRlcmZhY2UgQUFBe30KKworaW50ZXJmYWNlIEJCQiBleHRlbmRzIFJ1bm5hYmxlLCA8Y2FyZXQ+CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9rZXl3b3Jkcy9leHRlbmRzNy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24va2V5d29yZHMvZXh0ZW5kczcuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZmI2OTZjCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24va2V5d29yZHMvZXh0ZW5kczcuamF2YQpAQCAtMCwwICsxLDE4IEBACisvKgorICogQ29weXJpZ2h0IDIwMDAtMjAxMiBKZXRCcmFpbnMgcy5yLm8uCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworY2xhc3MgQUFBe30KKworY2xhc3MgQkJCIGV4dGVuZHMgQUFBIGk8Y2FyZXQ+CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9rZXl3b3Jkcy9leHRlbmRzN19hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24va2V5d29yZHMvZXh0ZW5kczdfYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNzg4NjQ4Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24va2V5d29yZHMvZXh0ZW5kczdfYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDE4IEBACisvKgorICogQ29weXJpZ2h0IDIwMDAtMjAxMiBKZXRCcmFpbnMgcy5yLm8uCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworY2xhc3MgQUFBe30KKworY2xhc3MgQkJCIGV4dGVuZHMgQUFBIGltcGxlbWVudHMgPGNhcmV0PgpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24va2V5d29yZHMvZXh0ZW5kczguamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL2tleXdvcmRzL2V4dGVuZHM4LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODY3ZmVmOAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL2tleXdvcmRzL2V4dGVuZHM4LmphdmEKQEAgLTAsMCArMSwxOSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDAwLTIwMTIgSmV0QnJhaW5zIHMuci5vLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KK2NsYXNzIEFBQXt9CisKK2NsYXNzIEJCQiBleHRlbmRzIEFBQSBpPGNhcmV0PiB7Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9rZXl3b3Jkcy9leHRlbmRzOF9hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24va2V5d29yZHMvZXh0ZW5kczhfYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYTdhOTRlCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24va2V5d29yZHMvZXh0ZW5kczhfYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDE5IEBACisvKgorICogQ29weXJpZ2h0IDIwMDAtMjAxMiBKZXRCcmFpbnMgcy5yLm8uCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworY2xhc3MgQUFBe30KKworY2xhc3MgQkJCIGV4dGVuZHMgQUFBIGltcGxlbWVudHMgPGNhcmV0PiB7Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9rZXl3b3Jkcy9leHRlbmRzOS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24va2V5d29yZHMvZXh0ZW5kczkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zN2NmMWYyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24va2V5d29yZHMvZXh0ZW5kczkuamF2YQpAQCAtMCwwICsxLDE2IEBACisvKgorICogQ29weXJpZ2h0IDIwMDAtMjAxMiBKZXRCcmFpbnMgcy5yLm8uCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworaW50ZXJmYWNlIEFBQUEgZTxjYXJldD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9rZXl3b3Jkcy9leHRlbmRzOV9hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24va2V5d29yZHMvZXh0ZW5kczlfYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MWYxNzc3Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24va2V5d29yZHMvZXh0ZW5kczlfYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDE2IEBACisvKgorICogQ29weXJpZ2h0IDIwMDAtMjAxMiBKZXRCcmFpbnMgcy5yLm8uCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworaW50ZXJmYWNlIEFBQUEgZXh0ZW5kcyA8Y2FyZXQ+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24va2V5d29yZHMvZXh0ZW5kc0luQ2FzdFR5cGVQYXJhbWV0ZXJzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9rZXl3b3Jkcy9leHRlbmRzSW5DYXN0VHlwZVBhcmFtZXRlcnMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NGE1NzU4Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24va2V5d29yZHMvZXh0ZW5kc0luQ2FzdFR5cGVQYXJhbWV0ZXJzLmphdmEKQEAgLTAsMCArMSw2IEBACitwdWJsaWMgY2xhc3MgTWFpbiB7CisKKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbigpIHsKKyAgICAgICAgeCA9IChQcm9jZWVkaW5nSm9pblBvaW50PD8gZXh0PGNhcmV0Pj4KKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9rZXl3b3Jkcy9leHRlbmRzSW5DYXN0VHlwZVBhcmFtZXRlcnMyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9rZXl3b3Jkcy9leHRlbmRzSW5DYXN0VHlwZVBhcmFtZXRlcnMyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWNmNzUxNQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL2tleXdvcmRzL2V4dGVuZHNJbkNhc3RUeXBlUGFyYW1ldGVyczIuamF2YQpAQCAtMCwwICsxLDkgQEAKK3B1YmxpYyBjbGFzcyBNYWluIHsKKworICBwdWJsaWMgaW50IGNvbXBhcmUoT2JqZWN0IHZhbHVlMSwgT2JqZWN0IHZhbHVlMikgeworICAgIGlmICh2YWx1ZTEgaW5zdGFuY2VvZiBDb21wYXJhYmxlICYmIHZhbHVlMiBpbnN0YW5jZW9mIENvbXBhcmFibGUpIHsKKyAgICAgIHJldHVybiAoKENvbXBhcmFibGU8PyA8Y2FyZXQ+PikgdmFsdWUxKS5jb21wYXJlVG8odmFsdWUyKTsKKyAgICB9CisgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigpOworICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9rZXl3b3Jkcy9leHRlbmRzSW5DYXN0VHlwZVBhcmFtZXRlcnNfYWZ0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL2tleXdvcmRzL2V4dGVuZHNJbkNhc3RUeXBlUGFyYW1ldGVyc19hZnRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdiNjY2NzAKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9rZXl3b3Jkcy9leHRlbmRzSW5DYXN0VHlwZVBhcmFtZXRlcnNfYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDYgQEAKK3B1YmxpYyBjbGFzcyBNYWluIHsKKworICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKCkgeworICAgICAgICB4ID0gKFByb2NlZWRpbmdKb2luUG9pbnQ8PyBleHRlbmRzIDxjYXJldD4+CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24va2V5d29yZHMvZXh0ZW5kc0luTWV0aG9kUGFyYW1ldGVycy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24va2V5d29yZHMvZXh0ZW5kc0luTWV0aG9kUGFyYW1ldGVycy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZjNDY3ZTMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9rZXl3b3Jkcy9leHRlbmRzSW5NZXRob2RQYXJhbWV0ZXJzLmphdmEKQEAgLTAsMCArMSwyMCBAQAorLyoKKyAqIENvcHlyaWdodCAyMDAwLTIwMTIgSmV0QnJhaW5zIHMuci5vLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KK3B1YmxpYyBjbGFzcyBYeHggeworCisgICAgPFQgZXh0PGNhcmV0PgorCit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24va2V5d29yZHMvZXh0ZW5kc0luTWV0aG9kUGFyYW1ldGVyc19hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24va2V5d29yZHMvZXh0ZW5kc0luTWV0aG9kUGFyYW1ldGVyc19hZnRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY5NGRiYTcKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9rZXl3b3Jkcy9leHRlbmRzSW5NZXRob2RQYXJhbWV0ZXJzX2FmdGVyLmphdmEKQEAgLTAsMCArMSwyMCBAQAorLyoKKyAqIENvcHlyaWdodCAyMDAwLTIwMTIgSmV0QnJhaW5zIHMuci5vLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KK3B1YmxpYyBjbGFzcyBYeHggeworCisgICAgPFQgZXh0ZW5kcyA8Y2FyZXQ+CisKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9rZXl3b3Jkcy9leHRlbmRzV2l0aFJpZ2h0Q29udGV4dEluQ2xhc3NUeXBlUGFyYW1ldGVycy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24va2V5d29yZHMvZXh0ZW5kc1dpdGhSaWdodENvbnRleHRJbkNsYXNzVHlwZVBhcmFtZXRlcnMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMDkyMmI3Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24va2V5d29yZHMvZXh0ZW5kc1dpdGhSaWdodENvbnRleHRJbkNsYXNzVHlwZVBhcmFtZXRlcnMuamF2YQpAQCAtMCwwICsxLDE4IEBACisvKgorICogQ29weXJpZ2h0IDIwMDAtMjAxMiBKZXRCcmFpbnMgcy5yLm8uCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworY2xhc3MgRm9vPFQgZXh0PGNhcmV0PiBBPiB7CisKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL2tleXdvcmRzL2V4dGVuZHNXaXRoUmlnaHRDb250ZXh0SW5DbGFzc1R5cGVQYXJhbWV0ZXJzX2FmdGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9rZXl3b3Jkcy9leHRlbmRzV2l0aFJpZ2h0Q29udGV4dEluQ2xhc3NUeXBlUGFyYW1ldGVyc19hZnRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVmMDMyMTkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9rZXl3b3Jkcy9leHRlbmRzV2l0aFJpZ2h0Q29udGV4dEluQ2xhc3NUeXBlUGFyYW1ldGVyc19hZnRlci5qYXZhCkBAIC0wLDAgKzEsMTggQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwMC0yMDEyIEpldEJyYWlucyBzLnIuby4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCitjbGFzcyBGb288VCBleHRlbmRzPGNhcmV0PiBBPiB7CisKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL2tleXdvcmRzL2V4dHJhQnJhY2tldEFmdGVyRmluYWxseTEuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL2tleXdvcmRzL2V4dHJhQnJhY2tldEFmdGVyRmluYWxseTEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YTlmNzUwCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24va2V5d29yZHMvZXh0cmFCcmFja2V0QWZ0ZXJGaW5hbGx5MS5qYXZhCkBAIC0wLDAgKzEsMjcgQEAKKworLyoKKyAqIENvcHlyaWdodCAyMDAwLTIwMTIgSmV0QnJhaW5zIHMuci5vLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KK3B1YmxpYyBjbGFzcyBNYWluIHsKKworICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKCkgeworICAgICAgICB0cnkgeworICAgICAgICAgICAgCisgICAgICAgIH0gZmluYWw8Y2FyZXQ+IHsKKworICAgICAgICB9CisKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9rZXl3b3Jkcy9leHRyYUJyYWNrZXRBZnRlckZpbmFsbHkxX2FmdGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9rZXl3b3Jkcy9leHRyYUJyYWNrZXRBZnRlckZpbmFsbHkxX2FmdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDM1MTJkZAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL2tleXdvcmRzL2V4dHJhQnJhY2tldEFmdGVyRmluYWxseTFfYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDI3IEBACisKKy8qCisgKiBDb3B5cmlnaHQgMjAwMC0yMDEyIEpldEJyYWlucyBzLnIuby4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCitwdWJsaWMgY2xhc3MgTWFpbiB7CisKKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbigpIHsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIAorICAgICAgICB9IGZpbmFsbHkgezxjYXJldD4KKworICAgICAgICB9CisKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9rZXl3b3Jkcy9leHRyYUJyYWNrZXRBZnRlckZpbmFsbHkyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9rZXl3b3Jkcy9leHRyYUJyYWNrZXRBZnRlckZpbmFsbHkyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjFlNDI4OQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL2tleXdvcmRzL2V4dHJhQnJhY2tldEFmdGVyRmluYWxseTIuamF2YQpAQCAtMCwwICsxLDI1IEBACisKKy8qCisgKiBDb3B5cmlnaHQgMjAwMC0yMDEyIEpldEJyYWlucyBzLnIuby4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCitwdWJsaWMgY2xhc3MgTWFpbiB7CisKKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbigpIHsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIAorICAgICAgICB9IGZpbmFsPGNhcmV0PgorCisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24va2V5d29yZHMvZXh0cmFCcmFja2V0QWZ0ZXJGaW5hbGx5Ml9hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24va2V5d29yZHMvZXh0cmFCcmFja2V0QWZ0ZXJGaW5hbGx5Ml9hZnRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI5OWRmM2MKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9rZXl3b3Jkcy9leHRyYUJyYWNrZXRBZnRlckZpbmFsbHkyX2FmdGVyLmphdmEKQEAgLTAsMCArMSwyNyBAQAorCisvKgorICogQ29weXJpZ2h0IDIwMDAtMjAxMiBKZXRCcmFpbnMgcy5yLm8uCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworcHVibGljIGNsYXNzIE1haW4geworCisgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oKSB7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICAKKyAgICAgICAgfSBmaW5hbGx5IHsKKyAgICAgICAgICAgIDxjYXJldD4KKyAgICAgICAgfQorCisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24va2V5d29yZHMvZmlsZVNjb3BlMS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24va2V5d29yZHMvZmlsZVNjb3BlMS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjExM2ZkY2YKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9rZXl3b3Jkcy9maWxlU2NvcGUxLmphdmEKQEAgLTAsMCArMSBAQAorPGNhcmV0PgpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24va2V5d29yZHMvZmlsZVNjb3BlMi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24va2V5d29yZHMvZmlsZVNjb3BlMi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU3MGMzNWMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9rZXl3b3Jkcy9maWxlU2NvcGUyLmphdmEKQEAgLTAsMCArMSwxOCBAQAorLyoKKyAqIENvcHlyaWdodCAyMDAwLTIwMTIgSmV0QnJhaW5zIHMuci5vLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KK3BhY2thZ2UgbXlQYWNrYWdlOworCis8Y2FyZXQ+CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9rZXl3b3Jkcy9maW5hbEFmdGVyUGFyYW1ldGVyQW5uby5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24va2V5d29yZHMvZmluYWxBZnRlclBhcmFtZXRlckFubm8uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYjUzOWI4Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24va2V5d29yZHMvZmluYWxBZnRlclBhcmFtZXRlckFubm8uamF2YQpAQCAtMCwwICsxLDIgQEAKK3B1YmxpYyBjbGFzcyBVdGlsIHsKKyAgdm9pZCBmb28oQEZvbyA8Y2FyZXQ+IFN0cmluZ1tdIGFyZ3MpIHsgfX0KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL2tleXdvcmRzL2ZpbmFsQWZ0ZXJQYXJhbWV0ZXJBbm5vMi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24va2V5d29yZHMvZmluYWxBZnRlclBhcmFtZXRlckFubm8yLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjc2YmZiMwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL2tleXdvcmRzL2ZpbmFsQWZ0ZXJQYXJhbWV0ZXJBbm5vMi5qYXZhCkBAIC0wLDAgKzEsMyBAQAorcHVibGljIGNsYXNzIFV0aWwgeworICB2b2lkIGZvbyhARm9vIDxjYXJldD4gaW50IGFyZ3MpIHsgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24va2V5d29yZHMvZmluYWxJblRyeVdpdGhSZXNvdXJjZXMuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL2tleXdvcmRzL2ZpbmFsSW5UcnlXaXRoUmVzb3VyY2VzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjA4NzEzMAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL2tleXdvcmRzL2ZpbmFsSW5UcnlXaXRoUmVzb3VyY2VzLmphdmEKQEAgLTAsMCArMSw1IEBACitwdWJsaWMgY2xhc3MgVXRpbCB7CisgIHZvaWQgZm9vKCkgeworICAgIHRyeSAoPGNhcmV0PikKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24va2V5d29yZHMvaW5zdGFuY2VPZjEuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL2tleXdvcmRzL2luc3RhbmNlT2YxLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjNlOTg5MAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL2tleXdvcmRzL2luc3RhbmNlT2YxLmphdmEKQEAgLTAsMCArMSw1IEBACitwdWJsaWMgY2xhc3MgQXsKKyBwdWJsaWMgdm9pZCBtZXRob2QoKXsKKyAgYm9vbGVhbiB4ID0gdGhpcyBpbnM8Y2FyZXQ+CisgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24va2V5d29yZHMvaW5zdGFuY2VPZjFfYWZ0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL2tleXdvcmRzL2luc3RhbmNlT2YxX2FmdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjg2OTM2ODgKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9rZXl3b3Jkcy9pbnN0YW5jZU9mMV9hZnRlci5qYXZhCkBAIC0wLDAgKzEsNSBAQAorcHVibGljIGNsYXNzIEF7CisgcHVibGljIHZvaWQgbWV0aG9kKCl7CisgIGJvb2xlYW4geCA9IHRoaXMgaW5zdGFuY2VvZiA8Y2FyZXQ+CisgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24va2V5d29yZHMvaW5zdGFuY2VPZjIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL2tleXdvcmRzL2luc3RhbmNlT2YyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTYwYzcwYQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL2tleXdvcmRzL2luc3RhbmNlT2YyLmphdmEKQEAgLTAsMCArMSwyMCBAQAorLyoKKyAqIENvcHlyaWdodCAyMDAwLTIwMTIgSmV0QnJhaW5zIHMuci5vLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KK3B1YmxpYyBjbGFzcyBBeworIHB1YmxpYyB2b2lkIG1ldGhvZCgpeworICBib29sZWFuIHggPSBzdXBlciA8Y2FyZXQ+CisgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24va2V5d29yZHMvaW5zdGFuY2VPZjJfYWZ0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL2tleXdvcmRzL2luc3RhbmNlT2YyX2FmdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTYwYzcwYQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL2tleXdvcmRzL2luc3RhbmNlT2YyX2FmdGVyLmphdmEKQEAgLTAsMCArMSwyMCBAQAorLyoKKyAqIENvcHlyaWdodCAyMDAwLTIwMTIgSmV0QnJhaW5zIHMuci5vLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KK3B1YmxpYyBjbGFzcyBBeworIHB1YmxpYyB2b2lkIG1ldGhvZCgpeworICBib29sZWFuIHggPSBzdXBlciA8Y2FyZXQ+CisgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24va2V5d29yZHMvaW5zdGFuY2VPZjMuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL2tleXdvcmRzL2luc3RhbmNlT2YzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjBlOTNlZQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL2tleXdvcmRzL2luc3RhbmNlT2YzLmphdmEKQEAgLTAsMCArMSw2IEBACitwdWJsaWMgY2xhc3MgQXsKKyBwdWJsaWMgdm9pZCBtZXRob2QoKXsKKyAgU3RyaW5nIHN0ciA9ICIiOworICBib29sZWFuIHggPSBzdHIgaW5zPGNhcmV0PgorIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL2tleXdvcmRzL2luc3RhbmNlT2YzX2FmdGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9rZXl3b3Jkcy9pbnN0YW5jZU9mM19hZnRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjliYzdlMWMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9rZXl3b3Jkcy9pbnN0YW5jZU9mM19hZnRlci5qYXZhCkBAIC0wLDAgKzEsNiBAQAorcHVibGljIGNsYXNzIEF7CisgcHVibGljIHZvaWQgbWV0aG9kKCl7CisgIFN0cmluZyBzdHIgPSAiIjsKKyAgYm9vbGVhbiB4ID0gc3RyIGluc3RhbmNlb2YgPGNhcmV0PgorIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL2tleXdvcmRzL2ludEluQ2xhc3NBcnJheS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24va2V5d29yZHMvaW50SW5DbGFzc0FycmF5LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGRkMWI3OAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL2tleXdvcmRzL2ludEluQ2xhc3NBcnJheS5qYXZhCkBAIC0wLDAgKzEsNSBAQAorcHVibGljIGNsYXNzIFV0aWwgeworICBpbnQgZ29vKCkgeworICAgIENsYXNzW10gYyA9IHtBYnN0cmFjdE1ldGhvZEVycm9yLmNsYXNzLCA8Y2FyZXQ+fQorICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9rZXl3b3Jkcy9pbnRJbkNsYXNzQXJyYXkyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9rZXl3b3Jkcy9pbnRJbkNsYXNzQXJyYXkyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWI0ZWI4ZAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL2tleXdvcmRzL2ludEluQ2xhc3NBcnJheTIuamF2YQpAQCAtMCwwICsxLDUgQEAKK3B1YmxpYyBjbGFzcyBVdGlsIHsKKyAgaW50IGdvbygpIHsKKyAgICBuZXcgQ2xhc3NbXXtBYnN0cmFjdE1ldGhvZEVycm9yLmNsYXNzLCA8Y2FyZXQ+LmNsYXNzfQorICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9rZXl3b3Jkcy9pbnRJbkNsYXNzQXJyYXkzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9rZXl3b3Jkcy9pbnRJbkNsYXNzQXJyYXkzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTA3M2E1NAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL2tleXdvcmRzL2ludEluQ2xhc3NBcnJheTMuamF2YQpAQCAtMCwwICsxLDUgQEAKK3B1YmxpYyBjbGFzcyBVdGlsIHsKKyAgaW50IGdvbygpIHsKKyAgICBuZXcgQ2xhc3NbXXs8Y2FyZXQ+fQorICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9rZXl3b3Jkcy9pbnRJbkdlbmVyaWNzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9rZXl3b3Jkcy9pbnRJbkdlbmVyaWNzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTgyMTg5MwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL2tleXdvcmRzL2ludEluR2VuZXJpY3MuamF2YQpAQCAtMCwwICsxLDcgQEAKK2ltcG9ydCBqYXZhLmxhbmcuT2JqZWN0OworCitwdWJsaWMgY2xhc3MgVXRpbCB7CisgIGludCBnb28oKSB7CisgICAgUGFpcjxPYmplY3QsIDxjYXJldD4+CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL2tleXdvcmRzL2ludEluR2VuZXJpY3MyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9rZXl3b3Jkcy9pbnRJbkdlbmVyaWNzMi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI5ZWYzMjYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9rZXl3b3Jkcy9pbnRJbkdlbmVyaWNzMi5qYXZhCkBAIC0wLDAgKzEsNyBAQAoraW1wb3J0IGphdmEubGFuZy5PYmplY3Q7CisKK3B1YmxpYyBjbGFzcyBVdGlsIHsKKyAgaW50IGdvbygpIHsKKyAgICBQYWlyPE9iamVjdCwgPGNhcmV0PgorICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9rZXl3b3Jkcy9pbnRlcmZhY2VTY29wZS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24va2V5d29yZHMvaW50ZXJmYWNlU2NvcGUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MDFmYThjCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24va2V5d29yZHMvaW50ZXJmYWNlU2NvcGUuamF2YQpAQCAtMCwwICsxLDMgQEAKK2ludGVyZmFjZSBJIHsKKyAgPGNhcmV0PgorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL2tleXdvcmRzL21ldGhvZFNjb3BlMS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24va2V5d29yZHMvbWV0aG9kU2NvcGUxLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWFmYzMyMAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL2tleXdvcmRzL21ldGhvZFNjb3BlMS5qYXZhCkBAIC0wLDAgKzEsMTggQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwMC0yMDEyIEpldEJyYWlucyBzLnIuby4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCitwdWJsaWMgY2xhc3MgQXsKKyBwdWJsaWMgdm9pZCBtZXRob2QoKSA8Y2FyZXQ+IHt9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9rZXl3b3Jkcy9tZXRob2RTY29wZTIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL2tleXdvcmRzL21ldGhvZFNjb3BlMi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2NDkyYWQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9rZXl3b3Jkcy9tZXRob2RTY29wZTIuamF2YQpAQCAtMCwwICsxLDE5IEBACisvKgorICogQ29weXJpZ2h0IDIwMDAtMjAxMiBKZXRCcmFpbnMgcy5yLm8uCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworcHVibGljIGNsYXNzIEF7CisgcHVibGljIHZvaWQgbWV0aG9kKDxjYXJldD4peworIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL2tleXdvcmRzL21ldGhvZFNjb3BlMy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24va2V5d29yZHMvbWV0aG9kU2NvcGUzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjdkYzQ2NAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL2tleXdvcmRzL21ldGhvZFNjb3BlMy5qYXZhCkBAIC0wLDAgKzEsMjAgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwMC0yMDEyIEpldEJyYWlucyBzLnIuby4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCitwdWJsaWMgY2xhc3MgQXsKKyBwdWJsaWMgdm9pZCBtZXRob2QoKXsKKyAgPGNhcmV0PgorIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL2tleXdvcmRzL21ldGhvZFNjb3BlNC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24va2V5d29yZHMvbWV0aG9kU2NvcGU0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjdkYzQ2NAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL2tleXdvcmRzL21ldGhvZFNjb3BlNC5qYXZhCkBAIC0wLDAgKzEsMjAgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwMC0yMDEyIEpldEJyYWlucyBzLnIuby4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCitwdWJsaWMgY2xhc3MgQXsKKyBwdWJsaWMgdm9pZCBtZXRob2QoKXsKKyAgPGNhcmV0PgorIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL2tleXdvcmRzL21ldGhvZFNjb3BlNS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24va2V5d29yZHMvbWV0aG9kU2NvcGU1LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjg1YzlmNAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL2tleXdvcmRzL21ldGhvZFNjb3BlNS5qYXZhCkBAIC0wLDAgKzEsMjAgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwMC0yMDEyIEpldEJyYWlucyBzLnIuby4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCitwdWJsaWMgY2xhc3MgQXsKKyBwdWJsaWMgdm9pZCBtZXRob2QoZmk8Y2FyZXQ+IFN0cmluZyl7CisgIAorIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL2tleXdvcmRzL21ldGhvZFNjb3BlNV9hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24va2V5d29yZHMvbWV0aG9kU2NvcGU1X2FmdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTI3MGM3NQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL2tleXdvcmRzL21ldGhvZFNjb3BlNV9hZnRlci5qYXZhCkBAIC0wLDAgKzEsMjAgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwMC0yMDEyIEpldEJyYWlucyBzLnIuby4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCitwdWJsaWMgY2xhc3MgQXsKKyBwdWJsaWMgdm9pZCBtZXRob2QoZmluYWw8Y2FyZXQ+IFN0cmluZyl7CisgIAorIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL2tleXdvcmRzL25ld0luTWV0aG9kUmVmcy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24va2V5d29yZHMvbmV3SW5NZXRob2RSZWZzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWY0MmQ4MQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL2tleXdvcmRzL25ld0luTWV0aG9kUmVmcy5qYXZhCkBAIC0wLDAgKzEsMjMgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwMC0yMDEyIEpldEJyYWlucyBzLnIuby4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKK2NsYXNzIEZvbyB7CisgIGludGVyZmFjZSBJIHsgT2JqZWN0IG0oKTsgfQorCisgIHZvaWQgdGVzdCgpIHsKKyAgICBJIGkgPSBGb286Om48Y2FyZXQ+CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL2tleXdvcmRzL25ld0luTWV0aG9kUmVmc19hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24va2V5d29yZHMvbmV3SW5NZXRob2RSZWZzX2FmdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGZjNzQwYQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL2tleXdvcmRzL25ld0luTWV0aG9kUmVmc19hZnRlci5qYXZhCkBAIC0wLDAgKzEsMjMgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwMC0yMDEyIEpldEJyYWlucyBzLnIuby4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKK2NsYXNzIEZvbyB7CisgIGludGVyZmFjZSBJIHsgT2JqZWN0IG0oKTsgfQorCisgIHZvaWQgdGVzdCgpIHsKKyAgICBJIGkgPSBGb286Om5ldzs8Y2FyZXQ+CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL2tleXdvcmRzL251bGxJbklmLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9rZXl3b3Jkcy9udWxsSW5JZi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkyYTBkZmUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9rZXl3b3Jkcy9udWxsSW5JZi5qYXZhCkBAIC0wLDAgKzEsMjMgQEAKKworLyoKKyAqIENvcHlyaWdodCAyMDAwLTIwMTIgSmV0QnJhaW5zIHMuci5vLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KK3B1YmxpYyBjbGFzcyBNYWluIHsKKworICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKCkgeworICAgICAgICBpZiAobnU8Y2FyZXQ+KQorCisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24va2V5d29yZHMvbnVsbEluSWZfYWZ0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL2tleXdvcmRzL251bGxJbklmX2FmdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjUzODc1NQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL2tleXdvcmRzL251bGxJbklmX2FmdGVyLmphdmEKQEAgLTAsMCArMSwyMyBAQAorCisvKgorICogQ29weXJpZ2h0IDIwMDAtMjAxMiBKZXRCcmFpbnMgcy5yLm8uCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworcHVibGljIGNsYXNzIE1haW4geworCisgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oKSB7CisgICAgICAgIGlmIChudWxsPGNhcmV0PikKKworICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL2tleXdvcmRzL251bGxJbk1ldGhvZENhbGwuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL2tleXdvcmRzL251bGxJbk1ldGhvZENhbGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NjVmNThmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24va2V5d29yZHMvbnVsbEluTWV0aG9kQ2FsbC5qYXZhCkBAIC0wLDAgKzEsMjIgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwMC0yMDEyIEpldEJyYWlucyBzLnIuby4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCitjbGFzcyBOdWxsIHsKKyAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJndikgeworICAgIFN0cmluZ0J1ZmZlciBidWYgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CisgICAgCisgICAgYnVmLmFwcGVuZChudTxjYXJldD4pOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24va2V5d29yZHMvbnVsbEluTWV0aG9kQ2FsbDIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL2tleXdvcmRzL251bGxJbk1ldGhvZENhbGwyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmQxZTQwZAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL2tleXdvcmRzL251bGxJbk1ldGhvZENhbGwyLmphdmEKQEAgLTAsMCArMSwyMiBAQAorLyoKKyAqIENvcHlyaWdodCAyMDAwLTIwMTIgSmV0QnJhaW5zIHMuci5vLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KK2NsYXNzIE51bGwgeworICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmd2KSB7CisgICAgU3RyaW5nQnVmZmVyIGJ1ZiA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKKyAgICAKKyAgICBidWYuYXBwZW5kKE51bGwubnU8Y2FyZXQ+KTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL2tleXdvcmRzL251bGxJbk1ldGhvZENhbGwyX2FmdGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9rZXl3b3Jkcy9udWxsSW5NZXRob2RDYWxsMl9hZnRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJkMWU0MGQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9rZXl3b3Jkcy9udWxsSW5NZXRob2RDYWxsMl9hZnRlci5qYXZhCkBAIC0wLDAgKzEsMjIgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwMC0yMDEyIEpldEJyYWlucyBzLnIuby4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCitjbGFzcyBOdWxsIHsKKyAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJndikgeworICAgIFN0cmluZ0J1ZmZlciBidWYgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CisgICAgCisgICAgYnVmLmFwcGVuZChOdWxsLm51PGNhcmV0Pik7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9rZXl3b3Jkcy9udWxsSW5NZXRob2RDYWxsX2FmdGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9rZXl3b3Jkcy9udWxsSW5NZXRob2RDYWxsX2FmdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTMxMjk5OAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL2tleXdvcmRzL251bGxJbk1ldGhvZENhbGxfYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDIyIEBACisvKgorICogQ29weXJpZ2h0IDIwMDAtMjAxMiBKZXRCcmFpbnMgcy5yLm8uCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworY2xhc3MgTnVsbCB7CisgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3YpIHsKKyAgICBTdHJpbmdCdWZmZXIgYnVmID0gbmV3IFN0cmluZ0J1ZmZlcigpOworICAgIAorICAgIGJ1Zi5hcHBlbmQobnVsbCk7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9rZXl3b3Jkcy9udWxsSW5SZXR1cm4uamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL2tleXdvcmRzL251bGxJblJldHVybi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc5ZmRlYTgKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9rZXl3b3Jkcy9udWxsSW5SZXR1cm4uamF2YQpAQCAtMCwwICsxLDIzIEBACisKKy8qCisgKiBDb3B5cmlnaHQgMjAwMC0yMDEyIEpldEJyYWlucyBzLnIuby4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCitwdWJsaWMgY2xhc3MgTWFpbiB7CisKKyAgICBwdWJsaWMgc3RhdGljIE9iamVjdCBtYWluKCkgeworICAgICAgICByZXR1cm4gbnU8Y2FyZXQ+CisKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9rZXl3b3Jkcy9udWxsSW5SZXR1cm5fYWZ0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL2tleXdvcmRzL251bGxJblJldHVybl9hZnRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ2NWI1ZTcKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9rZXl3b3Jkcy9udWxsSW5SZXR1cm5fYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDIzIEBACisKKy8qCisgKiBDb3B5cmlnaHQgMjAwMC0yMDEyIEpldEJyYWlucyBzLnIuby4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCitwdWJsaWMgY2xhc3MgTWFpbiB7CisKKyAgICBwdWJsaWMgc3RhdGljIE9iamVjdCBtYWluKCkgeworICAgICAgICByZXR1cm4gbnVsbDxjYXJldD4KKworICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL2tleXdvcmRzL3JldHVybkluVGVybmFyeS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24va2V5d29yZHMvcmV0dXJuSW5UZXJuYXJ5LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWQ5NTdhNAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL2tleXdvcmRzL3JldHVybkluVGVybmFyeS5qYXZhCkBAIC0wLDAgKzEsNSBAQAorcHVibGljIGNsYXNzIFV0aWwgeworICBpbnQgZ29vKCkgeworICAgIHJldDxjYXJldD5jb25kID8gMTogMDsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24va2V5d29yZHMvc3BhY2VBZnRlckluc3RhbmNlb2YuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL2tleXdvcmRzL3NwYWNlQWZ0ZXJJbnN0YW5jZW9mLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTM5MDRiNgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL2tleXdvcmRzL3NwYWNlQWZ0ZXJJbnN0YW5jZW9mLmphdmEKQEAgLTAsMCArMSw3IEBACitjbGFzcyBGb28geworICB2b2lkIHRlc3QoT2JqZWN0IG8pIHsKKyAgICBpZiAobyBpbnN0PGNhcmV0PiBGb28pIHsKKworICAgIH0KKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24va2V5d29yZHMvc3BhY2VBZnRlckluc3RhbmNlb2ZfYWZ0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL2tleXdvcmRzL3NwYWNlQWZ0ZXJJbnN0YW5jZW9mX2FmdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTg0MDA3ZAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL2tleXdvcmRzL3NwYWNlQWZ0ZXJJbnN0YW5jZW9mX2FmdGVyLmphdmEKQEAgLTAsMCArMSw3IEBACitjbGFzcyBGb28geworICB2b2lkIHRlc3QoT2JqZWN0IG8pIHsKKyAgICBpZiAobyBpbnN0YW5jZW9mPGNhcmV0PiBGb28pIHsKKworICAgIH0KKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24va2V5d29yZHMvc3VwZXIxLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9rZXl3b3Jkcy9zdXBlcjEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40M2M0ODhjCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24va2V5d29yZHMvc3VwZXIxLmphdmEKQEAgLTAsMCArMSwyMiBAQAorLyoKKyAqIENvcHlyaWdodCAyMDAwLTIwMTIgSmV0QnJhaW5zIHMuci5vLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KK2NsYXNzIEJ7CisgY2xhc3MgQXsKKyAgeworICAgQi48Y2FyZXQ+CisgIH0KKyB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24va2V5d29yZHMvc3VwZXIyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9rZXl3b3Jkcy9zdXBlcjIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNzgwZWNiCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24va2V5d29yZHMvc3VwZXIyLmphdmEKQEAgLTAsMCArMSwyMCBAQAorLyoKKyAqIENvcHlyaWdodCAyMDAwLTIwMTIgSmV0QnJhaW5zIHMuci5vLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KK2NsYXNzIEF7CisgeworIFN0cmluZy48Y2FyZXQ+CisgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL2tleXdvcmRzL3N5bmNocm9uaXplZDEuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL2tleXdvcmRzL3N5bmNocm9uaXplZDEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMDAwNjRjCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24va2V5d29yZHMvc3luY2hyb25pemVkMS5qYXZhCkBAIC0wLDAgKzEsMjIgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwMC0yMDEyIEpldEJyYWlucyBzLnIuby4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCitjbGFzcyBBIHsKKyAgdm9pZCBmb28gKCkgeworICAgIG5ldyBSdW5uYWJsZSAoKSB7CisgICAgICBwdWJsaWMgc3luY2g8Y2FyZXQ+CisgICAgfTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL2tleXdvcmRzL3N5bmNocm9uaXplZDFfYWZ0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL2tleXdvcmRzL3N5bmNocm9uaXplZDFfYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MTlhNTJjCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24va2V5d29yZHMvc3luY2hyb25pemVkMV9hZnRlci5qYXZhCkBAIC0wLDAgKzEsMjIgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwMC0yMDEyIEpldEJyYWlucyBzLnIuby4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCitjbGFzcyBBIHsKKyAgdm9pZCBmb28gKCkgeworICAgIG5ldyBSdW5uYWJsZSAoKSB7CisgICAgICBwdWJsaWMgc3luY2hyb25pemVkIDxjYXJldD4KKyAgICB9OworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24va2V5d29yZHMvc3luY2hyb25pemVkMi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24va2V5d29yZHMvc3luY2hyb25pemVkMi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQzYWU2ZTEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9rZXl3b3Jkcy9zeW5jaHJvbml6ZWQyLmphdmEKQEAgLTAsMCArMSwyMSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDAwLTIwMTIgSmV0QnJhaW5zIHMuci5vLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KK2NsYXNzIFRlc3QgeworICAgIHZvaWQgZm9vKCkgeworICAgICAgICBpZiAodHJ1ZSkgeworICAgICAgICB9IGVsc2Ugc3luPGNhcmV0PgorICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL2tleXdvcmRzL3N5bmNocm9uaXplZDJfYWZ0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL2tleXdvcmRzL3N5bmNocm9uaXplZDJfYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZjkxM2RiCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24va2V5d29yZHMvc3luY2hyb25pemVkMl9hZnRlci5qYXZhCkBAIC0wLDAgKzEsMjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwMC0yMDEyIEpldEJyYWlucyBzLnIuby4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCitjbGFzcyBUZXN0IHsKKyAgICB2b2lkIGZvbygpIHsKKyAgICAgICAgaWYgKHRydWUpIHsKKyAgICAgICAgfSBlbHNlIHN5bmNocm9uaXplZCg8Y2FyZXQ+KQorICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL2tleXdvcmRzL3Rocm93c09uU2VwYXJhdGVMaW5lLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9rZXl3b3Jkcy90aHJvd3NPblNlcGFyYXRlTGluZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNiZmY2MTMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9rZXl3b3Jkcy90aHJvd3NPblNlcGFyYXRlTGluZS5qYXZhCkBAIC0wLDAgKzEsNSBAQAorCitwdWJsaWMgY2xhc3MgRm9vIHsKKyAgdm9pZCBmb28oKQorICB0aDxjYXJldD4KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9rZXl3b3Jkcy90aHJvd3NPblNlcGFyYXRlTGluZV9hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24va2V5d29yZHMvdGhyb3dzT25TZXBhcmF0ZUxpbmVfYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMGFkZWRhCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24va2V5d29yZHMvdGhyb3dzT25TZXBhcmF0ZUxpbmVfYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDUgQEAKKworcHVibGljIGNsYXNzIEZvbyB7CisgIHZvaWQgZm9vKCkKKyAgdGhyb3dzIDxjYXJldD4KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9rZXl3b3Jkcy90cnVlSW5WYXJpYWJsZURlY2xhcmF0aW9uLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9rZXl3b3Jkcy90cnVlSW5WYXJpYWJsZURlY2xhcmF0aW9uLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmE2NGVjZgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL2tleXdvcmRzL3RydWVJblZhcmlhYmxlRGVjbGFyYXRpb24uamF2YQpAQCAtMCwwICsxLDIzIEBACisKKy8qCisgKiBDb3B5cmlnaHQgMjAwMC0yMDEyIEpldEJyYWlucyBzLnIuby4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCitwdWJsaWMgY2xhc3MgTWFpbiB7CisKKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbigpIHsKKyAgICAgICAgYm9vbGVhbiBiID0gdHI8Y2FyZXQ+CisKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9rZXl3b3Jkcy90cnVlSW5WYXJpYWJsZURlY2xhcmF0aW9uX2FmdGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9rZXl3b3Jkcy90cnVlSW5WYXJpYWJsZURlY2xhcmF0aW9uX2FmdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjIwMjQ3NAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL2tleXdvcmRzL3RydWVJblZhcmlhYmxlRGVjbGFyYXRpb25fYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDIzIEBACisKKy8qCisgKiBDb3B5cmlnaHQgMjAwMC0yMDEyIEpldEJyYWlucyBzLnIuby4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCitwdWJsaWMgY2xhc3MgTWFpbiB7CisKKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbigpIHsKKyAgICAgICAgYm9vbGVhbiBiID0gdHJ1ZTxjYXJldD4KKworICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL2tleXdvcmRzL3RyeUluRXhwcmVzc2lvbi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24va2V5d29yZHMvdHJ5SW5FeHByZXNzaW9uLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGUwNzUzYQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL2tleXdvcmRzL3RyeUluRXhwcmVzc2lvbi5qYXZhCkBAIC0wLDAgKzEsNSBAQAorcHVibGljIGNsYXNzIE1lc3NhZ2VCZWFuIHsKKyB7CisgICAgU3RyaW5nIGNvbnRhaW5pbmdDbGFzcyA9ICgoU3RyaW5nKSB0PGNhcmV0PiAgICAKKyB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvQWNjZXNzSW5zdGFuY2VGcm9tU3RhdGljU2Vjb25kLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvQWNjZXNzSW5zdGFuY2VGcm9tU3RhdGljU2Vjb25kLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTZmZDYxNAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9BY2Nlc3NJbnN0YW5jZUZyb21TdGF0aWNTZWNvbmQuamF2YQpAQCAtMCwwICsxLDExIEBACitwdWJsaWMgY2xhc3MgSW5zcGVjdGlvbiB7CisKKyAgcHVibGljIGJvb2xlYW4gaWdub3JlRW51bXMgPSBmYWxzZTsKKworICBwcml2YXRlIHN0YXRpYyBjbGFzcyBWaXNpdG9yIHsKKyAgICBwdWJsaWMgdm9pZCB2aXNpdENsYXNzKCkgeworICAgICAgaWYgKGlnbm9lbjxjYXJldD4pIHsKKyAgICAgIH0KKyAgICB9CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvQWNjZXNzSW5zdGFuY2VGcm9tU3RhdGljU2Vjb25kX2FmdGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvQWNjZXNzSW5zdGFuY2VGcm9tU3RhdGljU2Vjb25kX2FmdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWU0NjMzZgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9BY2Nlc3NJbnN0YW5jZUZyb21TdGF0aWNTZWNvbmRfYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDExIEBACitwdWJsaWMgY2xhc3MgSW5zcGVjdGlvbiB7CisKKyAgcHVibGljIGJvb2xlYW4gaWdub3JlRW51bXMgPSBmYWxzZTsKKworICBwcml2YXRlIHN0YXRpYyBjbGFzcyBWaXNpdG9yIHsKKyAgICBwdWJsaWMgdm9pZCB2aXNpdENsYXNzKCkgeworICAgICAgaWYgKGlnbm9yZUVudW1zPGNhcmV0PikgeworICAgICAgfQorICAgIH0KKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9BY2Nlc3NTdGF0aWNWaWFJbnN0YW5jZS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL0FjY2Vzc1N0YXRpY1ZpYUluc3RhbmNlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzM1YWZiNQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9BY2Nlc3NTdGF0aWNWaWFJbnN0YW5jZS5qYXZhCkBAIC0wLDAgKzEsMTAgQEAKK0BTdXBwcmVzc1dhcm5pbmdzKCJBY2Nlc3NTdGF0aWNWaWFJbnN0YW5jZSIpCitwdWJsaWMgY2xhc3MgS2V5Vk8geworICB7CisgICAgbmV3IENsaSgpLmZvPGNhcmV0PgorICB9Cit9CisKK2NsYXNzIENsaSB7CisgIHN0YXRpYyB2b2lkIGZvbygpIHt9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvQWNjZXNzU3RhdGljVmlhSW5zdGFuY2VTZWNvbmQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9BY2Nlc3NTdGF0aWNWaWFJbnN0YW5jZVNlY29uZC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhhOWE5MTUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvQWNjZXNzU3RhdGljVmlhSW5zdGFuY2VTZWNvbmQuamF2YQpAQCAtMCwwICsxLDYgQEAKK3B1YmxpYyBjbGFzcyBLZXlWTyB7CisgIHsKKyAgICB0aGlzLmZvPGNhcmV0PgorICB9CisgIHN0YXRpYyB2b2lkIGZvbygpIHt9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL0FjY2Vzc1N0YXRpY1ZpYUluc3RhbmNlU2Vjb25kX2FmdGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvQWNjZXNzU3RhdGljVmlhSW5zdGFuY2VTZWNvbmRfYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYzQxMTk1Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL0FjY2Vzc1N0YXRpY1ZpYUluc3RhbmNlU2Vjb25kX2FmdGVyLmphdmEKQEAgLTAsMCArMSw2IEBACitwdWJsaWMgY2xhc3MgS2V5Vk8geworICB7CisgICAgdGhpcy5mb28oKTs8Y2FyZXQ+CisgIH0KKyAgc3RhdGljIHZvaWQgZm9vKCkge30KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvQWNjZXNzU3RhdGljVmlhSW5zdGFuY2VfYWZ0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9BY2Nlc3NTdGF0aWNWaWFJbnN0YW5jZV9hZnRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcxZTcyZTgKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvQWNjZXNzU3RhdGljVmlhSW5zdGFuY2VfYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDEwIEBACitAU3VwcHJlc3NXYXJuaW5ncygiQWNjZXNzU3RhdGljVmlhSW5zdGFuY2UiKQorcHVibGljIGNsYXNzIEtleVZPIHsKKyAgeworICAgIG5ldyBDbGkoKS5mb28oKTs8Y2FyZXQ+CisgIH0KK30KKworY2xhc3MgQ2xpIHsKKyAgc3RhdGljIHZvaWQgZm9vKCkge30KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9BZnRlckNhc3QxLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvQWZ0ZXJDYXN0MS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjljNWJhMzAKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvQWZ0ZXJDYXN0MS5qYXZhCkBAIC0wLDAgKzEsNyBAQAorY2xhc3MgQXsKKyB7CisgICBYIGFhYSwgYWFiOworCisgICAoQSlhYTxjYXJldD4KKyB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL0FmdGVyQ2FzdDItcmVzdWx0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvQWZ0ZXJDYXN0Mi1yZXN1bHQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NjI4MDE3Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL0FmdGVyQ2FzdDItcmVzdWx0LmphdmEKQEAgLTAsMCArMSw2IEBACitjbGFzcyBBeworICBwcml2YXRlIEEgbXlDbGFzc0NvbWJvOworICBwcm90ZWN0ZWQgdm9pZCBjcmVhdGVOb3J0aFBhbmVsKCkgeworICAgICgoQSlteUNsYXNzQ29tYm88Y2FyZXQ+KQorICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvQWZ0ZXJDYXN0Mi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL0FmdGVyQ2FzdDIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNDUzNmI5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL0FmdGVyQ2FzdDIuamF2YQpAQCAtMCwwICsxLDYgQEAKK2NsYXNzIEF7CisgIHByaXZhdGUgQSBteUNsYXNzQ29tYm87CisgIHByb3RlY3RlZCB2b2lkIGNyZWF0ZU5vcnRoUGFuZWwoKSB7CisgICAgKChBKW15PGNhcmV0PikKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL0FmdGVyQ29tbW9uUHJlZml4LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvQWZ0ZXJDb21tb25QcmVmaXguamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZmQ4MWRkCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL0FmdGVyQ29tbW9uUHJlZml4LmphdmEKQEAgLTAsMCArMSw1IEBACitwdWJsaWMgY2xhc3MgU29tZUNsYXNzIHsKKyAgdm9pZCBmb28oU3RyaW5nIHBhcmFtKSB7CisgICAgaWYgKHBhcmFtLjxjYXJldD4pCisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9BZnRlckNvbW1vblByZWZpeF9hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL0FmdGVyQ29tbW9uUHJlZml4X2FmdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDY3NDVjMwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9BZnRlckNvbW1vblByZWZpeF9hZnRlci5qYXZhCkBAIC0wLDAgKzEsNSBAQAorcHVibGljIGNsYXNzIFNvbWVDbGFzcyB7CisgIHZvaWQgZm9vKFN0cmluZyBwYXJhbSkgeworICAgIGlmIChwYXJhbS5lcXVhbHMoPGNhcmV0PikpCisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9BZnRlckluc3RhbmNlb2YuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9BZnRlckluc3RhbmNlb2YuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMzM0YzYxCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL0FmdGVySW5zdGFuY2VvZi5qYXZhCkBAIC0wLDAgKzEsNSBAQAorY2xhc3MgQXsKKyB7CisgIGJvb2xlYW4geHh4ID0geHh4IGluc3RhbmNlb2YgPGNhcmV0PgorIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvQWxsQXNzZXJ0Q2xhc3Nlc01ldGhvZHMuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9BbGxBc3NlcnRDbGFzc2VzTWV0aG9kcy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI5YjQyOWIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvQWxsQXNzZXJ0Q2xhc3Nlc01ldGhvZHMuamF2YQpAQCAtMCwwICsxLDUgQEAKK2NsYXNzIEZvbyB7CisgIHsKKyAgICBpZiAoQXNzZXJ0LjxjYXJldD4pCisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvQWxsQXNzZXJ0Q2xhc3Nlc01ldGhvZHNfYWZ0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9BbGxBc3NlcnRDbGFzc2VzTWV0aG9kc19hZnRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU2NTcxZjIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvQWxsQXNzZXJ0Q2xhc3Nlc01ldGhvZHNfYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDcgQEAKK2ltcG9ydCBiYXIuQXNzZXJ0OworCitjbGFzcyBGb28geworICB7CisgICAgaWYgKEFzc2VydC5iYXIoKTxjYXJldD4pCisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvQWxsQ2xhc3Nlc09uU2Vjb25kQmFzaWNDb21wbGV0aW9uLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvQWxsQ2xhc3Nlc09uU2Vjb25kQmFzaWNDb21wbGV0aW9uLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzg4MDJlNgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9BbGxDbGFzc2VzT25TZWNvbmRCYXNpY0NvbXBsZXRpb24uamF2YQpAQCAtMCwwICsxLDkgQEAKK2NsYXNzIEF5QnlDeUR5RXkge30KKworcHVibGljIGNsYXNzIEZvbyB7CisKKyAgICB7CisgICAgICAgIEFCQ0RFPGNhcmV0PgorICAgIH0KKworfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL0FsbENsYXNzZXNXaGVuTm90aGluZ0lzRm91bmQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9BbGxDbGFzc2VzV2hlbk5vdGhpbmdJc0ZvdW5kLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWNhYWYxNAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9BbGxDbGFzc2VzV2hlbk5vdGhpbmdJc0ZvdW5kLmphdmEKQEAgLTAsMCArMSw3IEBACitwdWJsaWMgY2xhc3MgRm9vIHsKKworICAgIHsKKyAgICAgICAgQUJDREU8Y2FyZXQ+CisgICAgfQorCit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvQWxsQ2xhc3Nlc1doZW5Ob3RoaW5nSXNGb3VuZF9hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL0FsbENsYXNzZXNXaGVuTm90aGluZ0lzRm91bmRfYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42Yjc3YTVjCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL0FsbENsYXNzZXNXaGVuTm90aGluZ0lzRm91bmRfYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDkgQEAKK2ltcG9ydCBmb28uYmFyLkF4QnhDeER4RXg7CisKK3B1YmxpYyBjbGFzcyBGb28geworCisgICAgeworICAgICAgICBBeEJ4Q3hEeEV4PGNhcmV0PgorICAgIH0KKworfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL0Fubm9QYXJhbWV0ZXJWYWx1ZS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL0Fubm9QYXJhbWV0ZXJWYWx1ZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY1NmU2YjgKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvQW5ub1BhcmFtZXRlclZhbHVlLmphdmEKQEAgLTAsMCArMSwzIEBACitwdWJsaWMgY2xhc3MgVXRpbCB7CisgIEBGb28odmFsPTxjYXJldD4pIHZvaWQgZm9vKFN0cmluZ1tdIGFyZ3MpIHsgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL0Fubm90YXRpb24uamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9Bbm5vdGF0aW9uLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGFjZWNmMgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9Bbm5vdGF0aW9uLmphdmEKQEAgLTAsMCArMSw3IEBACitAaW50ZXJmYWNlIE15QW5ub3RhdGlvbiB7CisgIE9iamVjdCB2YWx1ZSgpOworICBTdHJpbmcgbmFtZSgpOworfQorCitATXlBbm5vdGF0aW9uKHY8Y2FyZXQ+KSAKK2NsYXNzIE15Q2xhc3Mge30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvQW5ub3RhdGlvbjIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9Bbm5vdGF0aW9uMi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc3ODRhMmIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvQW5ub3RhdGlvbjIuamF2YQpAQCAtMCwwICsxLDcgQEAKK0BpbnRlcmZhY2UgTXlBbm5vdGF0aW9uIHsKKyAgT2JqZWN0IHZhbHVlKCk7CisgIFN0cmluZyBuYW1lKCk7Cit9CisKK0BNeUFubm90YXRpb24odmFsdWUgPSBudWxsLCBuPGNhcmV0PikgCitjbGFzcyBNeUNsYXNzIHt9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL0Fubm90YXRpb24yX2FmdGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvQW5ub3RhdGlvbjJfYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOTk2NGFkCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL0Fubm90YXRpb24yX2FmdGVyLmphdmEKQEAgLTAsMCArMSw3IEBACitAaW50ZXJmYWNlIE15QW5ub3RhdGlvbiB7CisgIE9iamVjdCB2YWx1ZSgpOworICBTdHJpbmcgbmFtZSgpOworfQorCitATXlBbm5vdGF0aW9uKHZhbHVlID0gbnVsbCwgbmFtZSA9IDxjYXJldD4pIAorY2xhc3MgTXlDbGFzcyB7fQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9Bbm5vdGF0aW9uMy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL0Fubm90YXRpb24zLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTE0YjgxMQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9Bbm5vdGF0aW9uMy5qYXZhCkBAIC0wLDAgKzEsNiBAQAorQGludGVyZmFjZSBNeUFubm90YXRpb24geworICBPYmplY3QgdmFsdWUoKTsKK30KKworQE15PGNhcmV0PiAKK2NsYXNzIE15Q2xhc3Mge30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvQW5ub3RhdGlvbjNfYWZ0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9Bbm5vdGF0aW9uM19hZnRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE0NWE1YTYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvQW5ub3RhdGlvbjNfYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDYgQEAKK0BpbnRlcmZhY2UgTXlBbm5vdGF0aW9uIHsKKyAgT2JqZWN0IHZhbHVlKCk7Cit9CisKK0BNeUFubm90YXRpb24oPGNhcmV0PikgCitjbGFzcyBNeUNsYXNzIHt9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL0Fubm90YXRpb240LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvQW5ub3RhdGlvbjQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZjllOGNkCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL0Fubm90YXRpb240LmphdmEKQEAgLTAsMCArMSwxNiBAQAorZW51bSBTZXR1cCB7CisgIE5PTkUsCisgIENPTk5FQ1RJT04KK30KKworQFRhcmdldCh2YWx1ZSA9IEVsZW1lbnRUeXBlLk1FVEhPRCkKK0BSZXRlbnRpb24oUmV0ZW50aW9uUG9saWN5LlJVTlRJTUUpCitwdWJsaWMgQGludGVyZmFjZSBUZXN0IHsKKyAgU2V0dXAgc2V0dXAoKTsKK30KKworcHVibGljIGNsYXNzIENsaWVudCB7CisgIEBUZXN0KHNldHVwID0gU2V0dXAuQ088Y2FyZXQ+KQorICBwdWJsaWMgdm9pZCBydW4oKSB7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvQW5ub3RhdGlvbjRfYWZ0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9Bbm5vdGF0aW9uNF9hZnRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEwNThjYTQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvQW5ub3RhdGlvbjRfYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDE2IEBACitlbnVtIFNldHVwIHsKKyAgTk9ORSwKKyAgQ09OTkVDVElPTgorfQorCitAVGFyZ2V0KHZhbHVlID0gRWxlbWVudFR5cGUuTUVUSE9EKQorQFJldGVudGlvbihSZXRlbnRpb25Qb2xpY3kuUlVOVElNRSkKK3B1YmxpYyBAaW50ZXJmYWNlIFRlc3QgeworICBTZXR1cCBzZXR1cCgpOworfQorCitwdWJsaWMgY2xhc3MgQ2xpZW50IHsKKyAgQFRlc3Qoc2V0dXAgPSBTZXR1cC5DT05ORUNUSU9OPGNhcmV0PikKKyAgcHVibGljIHZvaWQgcnVuKCkgeworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL0Fubm90YXRpb241LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvQW5ub3RhdGlvbjUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MmViZjU3Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL0Fubm90YXRpb241LmphdmEKQEAgLTAsMCArMSw2IEBACitAaW50ZXJmYWNlIE15QW5ub3RhdGlvbiB7CisgIFN0cmluZyBkb2N1bWVudGF0aW9uKCkgZGVmYXVsdCAiIjsKK30KKworQE15PGNhcmV0PgorY2xhc3MgTXlDbGFzcyB7fQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9Bbm5vdGF0aW9uNV9hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL0Fubm90YXRpb241X2FmdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDYzYmNlMwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9Bbm5vdGF0aW9uNV9hZnRlci5qYXZhCkBAIC0wLDAgKzEsNiBAQAorQGludGVyZmFjZSBNeUFubm90YXRpb24geworICBTdHJpbmcgZG9jdW1lbnRhdGlvbigpIGRlZmF1bHQgIiI7Cit9CisKK0BNeUFubm90YXRpb248Y2FyZXQ+CitjbGFzcyBNeUNsYXNzIHt9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL0Fubm90YXRpb242LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvQW5ub3RhdGlvbjYuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMGFkZWUyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL0Fubm90YXRpb242LmphdmEKQEAgLTAsMCArMSw3IEBACitAaW50ZXJmYWNlIE15QW5ub3RhdGlvbiB7CisgIGludCB2YWx1ZSgpOworICBTdHJpbmcgbmFtZSgpOworfQorCitATXlBbm5vdGF0aW9uKHZhbHVlID0gMCwgbjxjYXJldD4pCitjbGFzcyBNeUNsYXNzIHt9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL0Fubm90YXRpb242X2FmdGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvQW5ub3RhdGlvbjZfYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YjA0NGEyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL0Fubm90YXRpb242X2FmdGVyLmphdmEKQEAgLTAsMCArMSw3IEBACitAaW50ZXJmYWNlIE15QW5ub3RhdGlvbiB7CisgIGludCB2YWx1ZSgpOworICBTdHJpbmcgbmFtZSgpOworfQorCitATXlBbm5vdGF0aW9uKHZhbHVlID0gMCwgbmFtZSA9IDxjYXJldD4pCitjbGFzcyBNeUNsYXNzIHt9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL0Fubm90YXRpb243LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvQW5ub3RhdGlvbjcuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YTZjMzMyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL0Fubm90YXRpb243LmphdmEKQEAgLTAsMCArMSw2IEBACitAaW50ZXJmYWNlIE15QW5ub3RhdGlvbiB7CisgIENsYXNzIHZhbHVlKCk7Cit9CisKK0BNeUFubm90YXRpb24oPGNhcmV0PkEuY2xhc3MpCitjbGFzcyBNeUNsYXNzIHt9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL0Fubm90YXRpb243X2FmdGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvQW5ub3RhdGlvbjdfYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZGFiMGVkCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL0Fubm90YXRpb243X2FmdGVyLmphdmEKQEAgLTAsMCArMSw2IEBACitAaW50ZXJmYWNlIE15QW5ub3RhdGlvbiB7CisgIENsYXNzIHZhbHVlKCk7Cit9CisKK0BNeUFubm90YXRpb24odmFsdWUgPSA8Y2FyZXQ+QS5jbGFzcykKK2NsYXNzIE15Q2xhc3Mge30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvQW5ub3RhdGlvbkFzVXN1YWxPYmplY3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9Bbm5vdGF0aW9uQXNVc3VhbE9iamVjdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU3MTBkYzQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvQW5ub3RhdGlvbkFzVXN1YWxPYmplY3QuamF2YQpAQCAtMCwwICsxLDEyIEBACitAaW50ZXJmYWNlIE15QW5ubyB7CisgIFN0cmluZyB4eHgoKTsKKyAgU3RyaW5nIHl5eSgpOworfQorCitwdWJsaWMgY2xhc3MgTXlGaXJzdFRlc3RDbGFzc0ZvbyB7CisKKyAgICB7CisgICAgICAgTXlBbjxjYXJldD4KKyAgICB9CisKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvQW5ub3RhdGlvbkFzVXN1YWxPYmplY3RGcm9tSmF2YWRvYy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL0Fubm90YXRpb25Bc1VzdWFsT2JqZWN0RnJvbUphdmFkb2MuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYWM5MWU3Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL0Fubm90YXRpb25Bc1VzdWFsT2JqZWN0RnJvbUphdmFkb2MuamF2YQpAQCAtMCwwICsxLDEwIEBACitAaW50ZXJmYWNlIE15QW5ubyB7CisgIFN0cmluZyB4eHgoKTsKKyAgU3RyaW5nIHl5eSgpOworfQorCisvKioKKyogQHNlZSBNeUFuPGNhcmV0PgorKi8KK3B1YmxpYyBjbGFzcyBNeUZpcnN0VGVzdENsYXNzRm9vIHsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvQW5ub3RhdGlvbkFzVXN1YWxPYmplY3RGcm9tSmF2YWRvY19hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL0Fubm90YXRpb25Bc1VzdWFsT2JqZWN0RnJvbUphdmFkb2NfYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MGYxOTc5ZQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9Bbm5vdGF0aW9uQXNVc3VhbE9iamVjdEZyb21KYXZhZG9jX2FmdGVyLmphdmEKQEAgLTAsMCArMSwxMCBAQAorQGludGVyZmFjZSBNeUFubm8geworICBTdHJpbmcgeHh4KCk7CisgIFN0cmluZyB5eXkoKTsKK30KKworLyoqCisqIEBzZWUgTXlBbm5vPGNhcmV0PgorKi8KK3B1YmxpYyBjbGFzcyBNeUZpcnN0VGVzdENsYXNzRm9vIHsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvQW5ub3RhdGlvbkFzVXN1YWxPYmplY3RJbnNpZGVDbGFzcy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL0Fubm90YXRpb25Bc1VzdWFsT2JqZWN0SW5zaWRlQ2xhc3MuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOWQ5NDE1Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL0Fubm90YXRpb25Bc1VzdWFsT2JqZWN0SW5zaWRlQ2xhc3MuamF2YQpAQCAtMCwwICsxLDEwIEBACitAaW50ZXJmYWNlIE15QW5ubyB7CisgIFN0cmluZyB4eHgoKTsKKyAgU3RyaW5nIHl5eSgpOworfQorCitwdWJsaWMgY2xhc3MgTXlGaXJzdFRlc3RDbGFzc0ZvbyB7CisKKyAgICAgTXlBbjxjYXJldD4KKworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9Bbm5vdGF0aW9uQXNVc3VhbE9iamVjdEluc2lkZUNsYXNzX2FmdGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvQW5ub3RhdGlvbkFzVXN1YWxPYmplY3RJbnNpZGVDbGFzc19hZnRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhiNjU0NzIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvQW5ub3RhdGlvbkFzVXN1YWxPYmplY3RJbnNpZGVDbGFzc19hZnRlci5qYXZhCkBAIC0wLDAgKzEsMTAgQEAKK0BpbnRlcmZhY2UgTXlBbm5vIHsKKyAgU3RyaW5nIHh4eCgpOworICBTdHJpbmcgeXl5KCk7Cit9CisKK3B1YmxpYyBjbGFzcyBNeUZpcnN0VGVzdENsYXNzRm9vIHsKKworICAgICBNeUFubm88Y2FyZXQ+CisKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvQW5ub3RhdGlvbkFzVXN1YWxPYmplY3RfYWZ0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9Bbm5vdGF0aW9uQXNVc3VhbE9iamVjdF9hZnRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZiMDVhM2MKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvQW5ub3RhdGlvbkFzVXN1YWxPYmplY3RfYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDEyIEBACitAaW50ZXJmYWNlIE15QW5ubyB7CisgIFN0cmluZyB4eHgoKTsKKyAgU3RyaW5nIHl5eSgpOworfQorCitwdWJsaWMgY2xhc3MgTXlGaXJzdFRlc3RDbGFzc0ZvbyB7CisKKyAgICB7CisgICAgICAgTXlBbm5vPGNhcmV0PgorICAgIH0KKworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9Bbm5vdGF0aW9uQ2xhc3NGcm9tV2l0aGluQW5ub3RhdGlvbi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL0Fubm90YXRpb25DbGFzc0Zyb21XaXRoaW5Bbm5vdGF0aW9uLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWE1NWNmOAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9Bbm5vdGF0aW9uQ2xhc3NGcm9tV2l0aGluQW5ub3RhdGlvbi5qYXZhCkBAIC0wLDAgKzEsOCBAQAorcHVibGljIEBpbnRlcmZhY2UgRXhhbXBsZSB7CisKKyAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRk9PID0gImZvbyIsIEJBUiA9ICJiYXIiOworCisgIFN0cmluZyB2YWx1ZSgpOworfQorCitARXhhbXBsZShFeGFtPGNhcmV0PikKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvQW5ub3RhdGlvbkNsYXNzRnJvbVdpdGhpbkFubm90YXRpb25fYWZ0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9Bbm5vdGF0aW9uQ2xhc3NGcm9tV2l0aGluQW5ub3RhdGlvbl9hZnRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlhNTUyMzcKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvQW5ub3RhdGlvbkNsYXNzRnJvbVdpdGhpbkFubm90YXRpb25fYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDggQEAKK3B1YmxpYyBAaW50ZXJmYWNlIEV4YW1wbGUgeworCisgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEZPTyA9ICJmb28iLCBCQVIgPSAiYmFyIjsKKworICBTdHJpbmcgdmFsdWUoKTsKK30KKworQEV4YW1wbGUoRXhhbXBsZTxjYXJldD4pClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL0Fubm90YXRpb25Pbk5vdGhpbmdQYXJlbnMuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9Bbm5vdGF0aW9uT25Ob3RoaW5nUGFyZW5zLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDY3YjIxZQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9Bbm5vdGF0aW9uT25Ob3RoaW5nUGFyZW5zLmphdmEKQEAgLTAsMCArMSwxMCBAQAorQGludGVyZmFjZSBNeUFubm8geworICBTdHJpbmcgeHh4KCk7CisgIFN0cmluZyB5eXkoKTsKK30KKworcHVibGljIGNsYXNzIE15Rmlyc3RUZXN0Q2xhc3NGb28geworCisgICAgQE15QW48Y2FyZXQ+CisKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvQW5ub3RhdGlvbk9uTm90aGluZ1BhcmVuc19hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL0Fubm90YXRpb25Pbk5vdGhpbmdQYXJlbnNfYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYzk2NjVlCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL0Fubm90YXRpb25Pbk5vdGhpbmdQYXJlbnNfYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDEwIEBACitAaW50ZXJmYWNlIE15QW5ubyB7CisgIFN0cmluZyB4eHgoKTsKKyAgU3RyaW5nIHl5eSgpOworfQorCitwdWJsaWMgY2xhc3MgTXlGaXJzdFRlc3RDbGFzc0ZvbyB7CisKKyAgICBATXlBbm5vKDxjYXJldD4pCisKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvQW5ub3RhdGlvblF1YWxpZmllZE5hbWUuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9Bbm5vdGF0aW9uUXVhbGlmaWVkTmFtZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRhMDY4MzMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvQW5ub3RhdGlvblF1YWxpZmllZE5hbWUuamF2YQpAQCAtMCwwICsxLDMgQEAKK0BqYXZhLmxhPGNhcmV0PgorY2xhc3MgRm9vIHsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvQW5ub3RhdGlvblF1YWxpZmllZE5hbWVfYWZ0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9Bbm5vdGF0aW9uUXVhbGlmaWVkTmFtZV9hZnRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE4YjMzZWIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvQW5ub3RhdGlvblF1YWxpZmllZE5hbWVfYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDMgQEAKK0BqYXZhLmxhbmcuPGNhcmV0PgorY2xhc3MgRm9vIHsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvQW5ub3RhdGlvbldpdGhvdXRWYWx1ZU1ldGhvZC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL0Fubm90YXRpb25XaXRob3V0VmFsdWVNZXRob2QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43Y2Q3ZDRjCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL0Fubm90YXRpb25XaXRob3V0VmFsdWVNZXRob2QuamF2YQpAQCAtMCwwICsxLDcgQEAKK0BpbnRlcmZhY2UgQW5ubyB7CisgIFN0cmluZyBmb28oKTsKKyAgU3RyaW5nIGJhcigpOworfQorCitAQW5ubyg8Y2FyZXQ+KQorY2xhc3MgRm9vIHt9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL0Fubm90YXRpb25fYWZ0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9Bbm5vdGF0aW9uX2FmdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDU2MmFkMwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9Bbm5vdGF0aW9uX2FmdGVyLmphdmEKQEAgLTAsMCArMSw3IEBACitAaW50ZXJmYWNlIE15QW5ub3RhdGlvbiB7CisgIE9iamVjdCB2YWx1ZSgpOworICBTdHJpbmcgbmFtZSgpOworfQorCitATXlBbm5vdGF0aW9uKHZhbHVlID0gPGNhcmV0PikgCitjbGFzcyBNeUNsYXNzIHt9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL0Fub255bW91c1Byb2Nlc3MuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9Bbm9ueW1vdXNQcm9jZXNzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWI1YWE2YwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9Bbm9ueW1vdXNQcm9jZXNzLmphdmEKQEAgLTAsMCArMSw4IEBACitpbXBvcnQgamF2YS51dGlsLio7CisKK3B1YmxpYyBjbGFzcyBSdW5uZXIgeworICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisgICAgTGlzdDxQcm9jZXNzPiBzcmM7CisgICAgTGlzdDxQcm9jZXNzPiBkZXN0ID0gTGlzdFV0aWxzLmZpbHRlcihzcmMsIG5ldyA8Y2FyZXQ+KTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9Bbm9ueW1vdXNQcm9jZXNzX2FmdGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvQW5vbnltb3VzUHJvY2Vzc19hZnRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI1MzJiYzEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvQW5vbnltb3VzUHJvY2Vzc19hZnRlci5qYXZhCkBAIC0wLDAgKzEsMTMgQEAKK2ltcG9ydCBqYXZhLnV0aWwuKjsKKworcHVibGljIGNsYXNzIFJ1bm5lciB7CisgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKyAgICBMaXN0PFByb2Nlc3M+IHNyYzsKKyAgICBMaXN0PFByb2Nlc3M+IGRlc3QgPSBMaXN0VXRpbHMuZmlsdGVyKHNyYywgbmV3IFByZWQ8UHJvY2Vzcz4oKSB7CisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgYm9vbGVhbiBwcmVkaWNhdGUoUHJvY2VzcyBlbGVtKSB7CisgICAgICAgICAgICA8c2VsZWN0aW9uPjxjYXJldD5yZXR1cm4gZmFsc2U7ICAvL1RvIGNoYW5nZSBib2R5IG9mIGltcGxlbWVudGVkIG1ldGhvZHMgdXNlIEZpbGUgfCBTZXR0aW5ncyB8IEZpbGUgVGVtcGxhdGVzLjwvc2VsZWN0aW9uPgorICAgICAgICB9CisgICAgfSk7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvQW5vbnltb3VzVHlwZVBhcmFtZXRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL0Fub255bW91c1R5cGVQYXJhbWV0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZjNkZjQ1Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL0Fub255bW91c1R5cGVQYXJhbWV0ZXIuamF2YQpAQCAtMCwwICsxLDEzIEBACitwdWJsaWMgY2xhc3MgVXRpbCB7CisKKyAgcHVibGljIHN0YXRpYyA8VCxWPiBMaXN0PFY+IG1hcChATm90TnVsbCBGdW5jdGlvbjxULCBWPiBtYXBwaW5nKSB7IH0KKworICBwdWJsaWMgT2JqZWN0W10gZ2V0VmFyaWFudHMoKSB7CisgICAgcmV0dXJuIG1hcChuZXcgRnVuY3Rpb248T2JqZWN0LCBBSU9PPGNhcmV0Pj4oKSB7IH0KKyAgfQorCisKK30KK2ludGVyZmFjZSBGdW5jdGlvbjxQYXJhbSwgUmVzdWx0PiB7CisgIFJlc3VsdCBmdW4oUGFyYW0gcGFyYW0pOworfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL0Fub255bW91c1R5cGVQYXJhbWV0ZXJfYWZ0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9Bbm9ueW1vdXNUeXBlUGFyYW1ldGVyX2FmdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTFmMDAyYgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9Bbm9ueW1vdXNUeXBlUGFyYW1ldGVyX2FmdGVyLmphdmEKQEAgLTAsMCArMSwxMyBAQAorcHVibGljIGNsYXNzIFV0aWwgeworCisgIHB1YmxpYyBzdGF0aWMgPFQsVj4gTGlzdDxWPiBtYXAoQE5vdE51bGwgRnVuY3Rpb248VCwgVj4gbWFwcGluZykgeyB9CisKKyAgcHVibGljIE9iamVjdFtdIGdldFZhcmlhbnRzKCkgeworICAgIHJldHVybiBtYXAobmV3IEZ1bmN0aW9uPE9iamVjdCwgQXJyYXlJbmRleE91dE9mQm91bmRzRXhjZXB0aW9uPGNhcmV0Pj4oKSB7IH0KKyAgfQorCisKK30KK2ludGVyZmFjZSBGdW5jdGlvbjxQYXJhbSwgUmVzdWx0PiB7CisgIFJlc3VsdCBmdW4oUGFyYW0gcGFyYW0pOworfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL0Fzc2lnbmluZ0ZpZWxkRm9yVGhlRmlyc3RUaW1lLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvQXNzaWduaW5nRmllbGRGb3JUaGVGaXJzdFRpbWUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iODUzMDY0Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL0Fzc2lnbmluZ0ZpZWxkRm9yVGhlRmlyc3RUaW1lLmphdmEKQEAgLTAsMCArMSw2IEBACitjbGFzcyBBIHsKKyAgZmluYWwgYm9vbGVhbiBhYm9vOworICBBKCkgeworICAgIGFibzxjYXJldD4KKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9Bc3NpZ25pbmdGaWVsZEZvclRoZUZpcnN0VGltZV9hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL0Fzc2lnbmluZ0ZpZWxkRm9yVGhlRmlyc3RUaW1lX2FmdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjM1NWU3MAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9Bc3NpZ25pbmdGaWVsZEZvclRoZUZpcnN0VGltZV9hZnRlci5qYXZhCkBAIC0wLDAgKzEsNiBAQAorY2xhc3MgQSB7CisgIGZpbmFsIGJvb2xlYW4gYWJvbzsKKyAgQSgpIHsKKyAgICBhYm9vPGNhcmV0PgorICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL0F0VW5kZXJDbGFzcy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL0F0VW5kZXJDbGFzcy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmExMTA5YzMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvQXRVbmRlckNsYXNzLmphdmEKQEAgLTAsMCArMSwzIEBACitwdWJsaWMgY2xhc3MgTWFpbiB7CitAaW48Y2FyZXQ+Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL0F0VW5kZXJDbGFzc05vTW9kaWZpZXJzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvQXRVbmRlckNsYXNzTm9Nb2RpZmllcnMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYjk3NjZjCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL0F0VW5kZXJDbGFzc05vTW9kaWZpZXJzLmphdmEKQEAgLTAsMCArMSwzIEBACitwdWJsaWMgY2xhc3MgTWFpbiB7CitAYWI8Y2FyZXQ+Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL0F0VW5kZXJDbGFzc05vTW9kaWZpZXJzX2FmdGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvQXRVbmRlckNsYXNzTm9Nb2RpZmllcnNfYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYjk3NjZjCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL0F0VW5kZXJDbGFzc05vTW9kaWZpZXJzX2FmdGVyLmphdmEKQEAgLTAsMCArMSwzIEBACitwdWJsaWMgY2xhc3MgTWFpbiB7CitAYWI8Y2FyZXQ+Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL0F0VW5kZXJDbGFzc19hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL0F0VW5kZXJDbGFzc19hZnRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYyYzRjODkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvQXRVbmRlckNsYXNzX2FmdGVyLmphdmEKQEAgLTAsMCArMSwzIEBACitwdWJsaWMgY2xhc3MgTWFpbiB7CitAaW50ZXJmYWNlIDxjYXJldD4KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvQmVmb3JlSW5pdGlhbGl6YXRpb24uamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9CZWZvcmVJbml0aWFsaXphdGlvbi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE3N2M3NmIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvQmVmb3JlSW5pdGlhbGl6YXRpb24uamF2YQpAQCAtMCwwICsxLDcgQEAKK2NsYXNzIEF7Cit7CitJbnRlZ2VyIGk7CitpLjxjYXJldD4KK2k7Cit9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL0Jvb2xlYW5MaXRlcmFscy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL0Jvb2xlYW5MaXRlcmFscy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNjYzllYmIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvQm9vbGVhbkxpdGVyYWxzLmphdmEKQEAgLTAsMCArMSw2IEBACitwdWJsaWMgY2xhc3MgTWFpbiB7CisKKyAgeworICAgIGVxdWFscyh0cjxjYXJldD4pCisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvQm9vbGVhbkxpdGVyYWxzX2FmdGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvQm9vbGVhbkxpdGVyYWxzX2FmdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTU0ZTUxMQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9Cb29sZWFuTGl0ZXJhbHNfYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDYgQEAKK3B1YmxpYyBjbGFzcyBNYWluIHsKKworICB7CisgICAgZXF1YWxzKHRydWU8Y2FyZXQ+KQorICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL0JyZWFrSW5JZkNvbmRpdGlvbi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL0JyZWFrSW5JZkNvbmRpdGlvbi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIxY2RmNTAKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvQnJlYWtJbklmQ29uZGl0aW9uLmphdmEKQEAgLTAsMCArMSw2IEBACitwdWJsaWMgY2xhc3MgTWFpbiB7CisgIHsKKyAgICB3aGlsZSh0cnVlKQorICAgICAgaWYgKGNvbmQpIGJyPGNhcmV0PgorICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL0JyZWFrSW5JZkNvbmRpdGlvbl9hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL0JyZWFrSW5JZkNvbmRpdGlvbl9hZnRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE4ZGEwYzMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvQnJlYWtJbklmQ29uZGl0aW9uX2FmdGVyLmphdmEKQEAgLTAsMCArMSw2IEBACitwdWJsaWMgY2xhc3MgTWFpbiB7CisgIHsKKyAgICB3aGlsZSh0cnVlKQorICAgICAgaWYgKGNvbmQpIGJyZWFrOzxjYXJldD4KKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9CcmVha0luU3dpdGNoLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvQnJlYWtJblN3aXRjaC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNkMmQ3YmIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvQnJlYWtJblN3aXRjaC5qYXZhCkBAIC0wLDAgKzEsOSBAQAorcHVibGljIGNsYXNzIENvbnN0Q29uZmlnIHsKKyAgICB7CisgICAgICBzd2l0Y2ggKHgpIHsKKyAgICAgICAgY2FzZSAxOgorICAgICAgICAgIHByaW50bG4oMSk7CisgICAgICAgICAgYnJlYTxjYXJldD4KKyAgICAgIH0KKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL0JyZWFrSW5Td2l0Y2hfYWZ0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9CcmVha0luU3dpdGNoX2FmdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjEzMjkzZQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9CcmVha0luU3dpdGNoX2FmdGVyLmphdmEKQEAgLTAsMCArMSw5IEBACitwdWJsaWMgY2xhc3MgQ29uc3RDb25maWcgeworICAgIHsKKyAgICAgIHN3aXRjaCAoeCkgeworICAgICAgICBjYXNlIDE6CisgICAgICAgICAgcHJpbnRsbigxKTsKKyAgICAgICAgICBicmVhazs8Y2FyZXQ+CisgICAgICB9CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9DYXNlVGFpbFR5cGUuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9DYXNlVGFpbFR5cGUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZTRjOGU5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL0Nhc2VUYWlsVHlwZS5qYXZhCkBAIC0wLDAgKzEsMTMgQEAKK3B1YmxpYyBjbGFzcyBGb29vbyB7CisKKyAgICB7CisgICAgICAgIFh4eCBhOworICAgICAgICBzd2l0Y2ggKGEpIHsKKyAgICAgICAgICAgIGNhc2UgRjxjYXJldD4KKyAgICAgICAgfQorICAgIH0KKworICAgIGVudW0gWHh4IHsKKyAgICAgICAgRk9PLCBCQVIKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvQ2FzZVRhaWxUeXBlX2FmdGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvQ2FzZVRhaWxUeXBlX2FmdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDAxOGVlYQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9DYXNlVGFpbFR5cGVfYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDEzIEBACitwdWJsaWMgY2xhc3MgRm9vb28geworCisgICAgeworICAgICAgICBYeHggYTsKKyAgICAgICAgc3dpdGNoIChhKSB7CisgICAgICAgICAgICBjYXNlIEZPTzo8Y2FyZXQ+CisgICAgICAgIH0KKyAgICB9CisKKyAgICBlbnVtIFh4eCB7CisgICAgICAgIEZPTywgQkFSCisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL0Nhc3RDb21wbGV4SW5zdGFuY2VvZmVkUXVhbGlmaWVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvQ2FzdENvbXBsZXhJbnN0YW5jZW9mZWRRdWFsaWZpZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMTk0NmUzCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL0Nhc3RDb21wbGV4SW5zdGFuY2VvZmVkUXVhbGlmaWVyLmphdmEKQEAgLTAsMCArMSwxMSBAQAorcHVibGljIGNsYXNzIEFhYWFhYWEgeworCisgICAgT2JqZWN0IGZvbygpIHt9CisKKyAgICB2b2lkIGJhcigpIHsKKyAgICAgICAgaWYgKGZvbygpIGluc3RhbmNlb2YgU3RyaW5nKSB7CisgICAgICAgICAgICBmb28oKS5zdWJzdHI8Y2FyZXQ+CisgICAgICAgIH0KKyAgICB9CisKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9DYXN0Q29tcGxleEluc3RhbmNlb2ZlZFF1YWxpZmllcl9hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL0Nhc3RDb21wbGV4SW5zdGFuY2VvZmVkUXVhbGlmaWVyX2FmdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWJjYmNhNQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9DYXN0Q29tcGxleEluc3RhbmNlb2ZlZFF1YWxpZmllcl9hZnRlci5qYXZhCkBAIC0wLDAgKzEsMTEgQEAKK3B1YmxpYyBjbGFzcyBBYWFhYWFhIHsKKworICAgIE9iamVjdCBmb28oKSB7fQorCisgICAgdm9pZCBiYXIoKSB7CisgICAgICAgIGlmIChmb28oKSBpbnN0YW5jZW9mIFN0cmluZykgeworICAgICAgICAgICAgKChTdHJpbmcpIGZvbygpKS5zdWJzdHJpbmcoPGNhcmV0PikKKyAgICAgICAgfQorICAgIH0KKworfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL0Nhc3RJbnN0YW5jZW9mZWRRdWFsaWZpZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9DYXN0SW5zdGFuY2VvZmVkUXVhbGlmaWVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmE1YWY2YgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9DYXN0SW5zdGFuY2VvZmVkUXVhbGlmaWVyLmphdmEKQEAgLTAsMCArMSwxMCBAQAorcHVibGljIGFic3RyYWN0IGNsYXNzIFp6emEgeworCisgICAgdm9pZCBmb28oT2JqZWN0IG8pIHsKKyAgICAgIGlmIChvIGluc3RhbmNlb2YgU3RyaW5nKSB7CisgICAgICAgIG8uc3Vic3RyPGNhcmV0PgorICAgICAgfQorICAgIH0KKworCit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL0Nhc3RJbnN0YW5jZW9mZWRRdWFsaWZpZXJJbkZvcmVhY2guamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9DYXN0SW5zdGFuY2VvZmVkUXVhbGlmaWVySW5Gb3JlYWNoLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWFjZjZhMAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9DYXN0SW5zdGFuY2VvZmVkUXVhbGlmaWVySW5Gb3JlYWNoLmphdmEKQEAgLTAsMCArMSwxMiBAQAorcHVibGljIGFic3RyYWN0IGNsYXNzIFp6emEgeworCisgICAgdm9pZCBmb28oT2JqZWN0IG8pIHsKKyAgICAgIGlmIChvIGluc3RhbmNlb2YgU3RyaW5nKSB7CisgICAgICAgIGZvciAoamF2YS5sYW5nLk9iamVjdCAgOiBvLnN1YnN0cjxjYXJldD4pIHsKKworICAgICAgICB9CisgICAgICB9CisgICAgfQorCisKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvQ2FzdEluc3RhbmNlb2ZlZFF1YWxpZmllckluRm9yZWFjaF9hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL0Nhc3RJbnN0YW5jZW9mZWRRdWFsaWZpZXJJbkZvcmVhY2hfYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZjM3NTVhCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL0Nhc3RJbnN0YW5jZW9mZWRRdWFsaWZpZXJJbkZvcmVhY2hfYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDEyIEBACitwdWJsaWMgYWJzdHJhY3QgY2xhc3MgWnp6YSB7CisKKyAgICB2b2lkIGZvbyhPYmplY3QgbykgeworICAgICAgaWYgKG8gaW5zdGFuY2VvZiBTdHJpbmcpIHsKKyAgICAgICAgZm9yIChqYXZhLmxhbmcuT2JqZWN0ICA6ICgoU3RyaW5nKSBvKS5zdWJzdHJpbmcoPGNhcmV0PikpIHsKKworICAgICAgICB9CisgICAgICB9CisgICAgfQorCisKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvQ2FzdEluc3RhbmNlb2ZlZFF1YWxpZmllcl9hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL0Nhc3RJbnN0YW5jZW9mZWRRdWFsaWZpZXJfYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNjRmYTc5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL0Nhc3RJbnN0YW5jZW9mZWRRdWFsaWZpZXJfYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDEwIEBACitwdWJsaWMgYWJzdHJhY3QgY2xhc3MgWnp6YSB7CisKKyAgICB2b2lkIGZvbyhPYmplY3QgbykgeworICAgICAgaWYgKG8gaW5zdGFuY2VvZiBTdHJpbmcpIHsKKyAgICAgICAgKChTdHJpbmcpIG8pLnN1YnN0cmluZyg8Y2FyZXQ+KQorICAgICAgfQorICAgIH0KKworCit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL0Nhc3RUb1ByaW1pdGl2ZTEuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9DYXN0VG9QcmltaXRpdmUxLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWE2YzYwNwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9DYXN0VG9QcmltaXRpdmUxLmphdmEKQEAgLTAsMCArMSw2IEBACitjbGFzcyBBeworICB7CisgICAgbG9uZyB6enogPSAwOworICAgIGludCBhc2QgPSAoPGNhcmV0Pil6enoKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9DYXN0VG9QcmltaXRpdmUyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvQ2FzdFRvUHJpbWl0aXZlMi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM0NzZiMDkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvQ2FzdFRvUHJpbWl0aXZlMi5qYXZhCkBAIC0wLDAgKzEsNiBAQAorY2xhc3MgQXsKKyAgeworICAgIGxvbmcgenp6ID0gMDsKKyAgICBpbnQgYXNkID0gKDxjYXJldD4pCisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvQ2FzdFRvUHJpbWl0aXZlMy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL0Nhc3RUb1ByaW1pdGl2ZTMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNDg2N2FiCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL0Nhc3RUb1ByaW1pdGl2ZTMuamF2YQpAQCAtMCwwICsxLDYgQEAKK2NsYXNzIEF7CisgIHsKKyAgICBsb25nIHp6eiA9IDA7CisgICAgaW50IGFzZCA9ICg8Y2FyZXQ+CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvQ2FzdFRvb0NvbXBsZXhJbnN0YW5jZW9mZWRRdWFsaWZpZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9DYXN0VG9vQ29tcGxleEluc3RhbmNlb2ZlZFF1YWxpZmllci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU3ZTM4YjEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvQ2FzdFRvb0NvbXBsZXhJbnN0YW5jZW9mZWRRdWFsaWZpZXIuamF2YQpAQCAtMCwwICsxLDczIEBACitwdWJsaWMgY2xhc3MgQWFhYWFhYSB7CisKKyAgICBPYmplY3QgZm9vKCkgeworICAgICAgICByZXR1cm4gbnVsbDsKKyAgICB9CisKKyAgICBPYmplY3QgZm9vYmFyKCkgeworICAgICAgICByZXR1cm4gbnVsbDsKKyAgICB9CisKKyAgICB2b2lkIGJhcigpIHsKKyAgICAgICAgdHJ5IHsKKworICAgICAgICAgICAgaWYgKGZvbygpIGluc3RhbmNlb2YgU3RyaW5nKSB7CisgICAgICAgICAgICAgICAgLy9mb28oKS5zCisgICAgICAgICAgICB9CisgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmb29iYXIoKSBpbnN0YW5jZW9mIFN0cmluZykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgZm9vYmFyKCkuc3Vic3RyPGNhcmV0PgorICAgICAgICAgICAgICAgICAgICAgICAgfSBmaW5hbGx5IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIiIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9IGZpbmFsbHkgeworICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZm9vKCkgaW5zdGFuY2VvZiBTdHJpbmcpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGZpbmFsbHkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0gZmluYWxseSB7CisgICAgICAgICAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIiIpOworICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIiKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZmluYWxseSB7CisgICAgICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIiKTsKKyAgICAgICAgICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIiIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICB9IGZpbmFsbHkgeworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIiIpOworICAgICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIiIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvQ2FzdFZpc3VhbGx5LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvQ2FzdFZpc3VhbGx5LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTdkMzBhNwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9DYXN0VmlzdWFsbHkuamF2YQpAQCAtMCwwICsxLDE0IEBACitpbXBvcnQgamF2YS5sYW5nLk9iamVjdDsKKworY2xhc3MgSUZvbyB7CisgIE9iamVjdCBnZXRWYWx1ZSgpIHt9Cit9CisKK2NsYXNzIEZvbyBleHRlbmRzIElGb28geworICBGb28gZ2V0VmFsdWUoKSB7fQorICB2b2lkIGZvbyhJRm9vIG8pIHsKKyAgICBpZiAobyBpbnN0YW5jZW9mIEZvbykgeworICAgICAgby5nZXR2PGNhcmV0PngKKyAgICB9CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvQ2hhaW5lZENhbGxPbk5leHRMaW5lLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvQ2hhaW5lZENhbGxPbk5leHRMaW5lLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2NlOWQyNwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9DaGFpbmVkQ2FsbE9uTmV4dExpbmUuamF2YQpAQCAtMCwwICsxLDUgQEAKK2NsYXNzIEZvbyB7CisgICAgaW50IGEgPSBuZXcgRm9vKCkuCisgICAgdDxjYXJldD5hKCkubGVuZ3RoKCkuIC4uIAorCit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvQ2hhaW5lZENhbGxPbk5leHRMaW5lX2FmdGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvQ2hhaW5lZENhbGxPbk5leHRMaW5lX2FmdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDkwMTMzMQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9DaGFpbmVkQ2FsbE9uTmV4dExpbmVfYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDUgQEAKK2NsYXNzIEZvbyB7CisgICAgaW50IGEgPSBuZXcgRm9vKCkuCisgICAgdG9TdHJpbmcoKTxjYXJldD5hKCkubGVuZ3RoKCkuIC4uIAorCit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvQ2xhc3NBbmdsZUJyYWNrZXQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9DbGFzc0FuZ2xlQnJhY2tldC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg5ZmZmM2EKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvQ2xhc3NBbmdsZUJyYWNrZXQuamF2YQpAQCAtMCwwICsxLDYgQEAKK2NsYXNzIEFiY2RDbGFzcyB7fQorY2xhc3MgQWJjZGVDbGFzcyB7fQorCitjbGFzcyBGb28geworICBBYmNkPGNhcmV0PgorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9DbGFzc0FuZ2xlQnJhY2tldF9hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL0NsYXNzQW5nbGVCcmFja2V0X2FmdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWIzZGM4NAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9DbGFzc0FuZ2xlQnJhY2tldF9hZnRlci5qYXZhCkBAIC0wLDAgKzEsNiBAQAorY2xhc3MgQWJjZENsYXNzIHt9CitjbGFzcyBBYmNkZUNsYXNzIHt9CisKK2NsYXNzIEZvbyB7CisgIEFiY2RDbGFzczw8Y2FyZXQ+PgorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9DbGFzc0JlZm9yZUNhc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9DbGFzc0JlZm9yZUNhc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNGM5MzY5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL0NsYXNzQmVmb3JlQ2FzdC5qYXZhCkBAIC0wLDAgKzEsNiBAQAorcHVibGljIGNsYXNzIEZvbyB7CisgICAgcHVibGljIHN0YXRpYyB2b2lkIGZwcChPYmplY3QgbykgeworICAgICAgICBGaWxlSW5wU3Q8Y2FyZXQ+CisgICAgICAgICgoT2JqZWN0KSBvKS5ub3RpZnkoKTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvQ2xhc3NCZWZvcmVDYXN0X2FmdGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvQ2xhc3NCZWZvcmVDYXN0X2FmdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWJlNDRkOAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9DbGFzc0JlZm9yZUNhc3RfYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDggQEAKK2ltcG9ydCBqYXZhLmlvLkZpbGVJbnB1dFN0cmVhbTsKKworcHVibGljIGNsYXNzIEZvbyB7CisgICAgcHVibGljIHN0YXRpYyB2b2lkIGZwcChPYmplY3QgbykgeworICAgICAgICBGaWxlSW5wdXRTdHJlYW08Y2FyZXQ+CisgICAgICAgICgoT2JqZWN0KSBvKS5ub3RpZnkoKTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvQ2xhc3NMaXRlcmFsSW5Bbm5vUGFyYW0uamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9DbGFzc0xpdGVyYWxJbkFubm9QYXJhbS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ1MGFkYTUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvQ2xhc3NMaXRlcmFsSW5Bbm5vUGFyYW0uamF2YQpAQCAtMCwwICsxLDcgQEAKK0BBbm5vKFN0cmluZy5jbGE8Y2FyZXQ+KQorcHVibGljIGNsYXNzIE1haW4geworfQorCitAaW50ZXJmYWNlIEFubm8geworICBDbGFzcyB2YWx1ZSgpOworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9DbGFzc0xpdGVyYWxJbkFubm9QYXJhbV9hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL0NsYXNzTGl0ZXJhbEluQW5ub1BhcmFtX2FmdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzZkNmI1MgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9DbGFzc0xpdGVyYWxJbkFubm9QYXJhbV9hZnRlci5qYXZhCkBAIC0wLDAgKzEsNyBAQAorQEFubm8oU3RyaW5nLmNsYXNzPGNhcmV0PikKK3B1YmxpYyBjbGFzcyBNYWluIHsKK30KKworQGludGVyZmFjZSBBbm5vIHsKKyAgQ2xhc3MgdmFsdWUoKTsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvQ2xhc3NMaXRlcmFsSW5BcnJheUFubm9Jbml0aWFsaXplci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL0NsYXNzTGl0ZXJhbEluQXJyYXlBbm5vSW5pdGlhbGl6ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNTI0NzZkCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL0NsYXNzTGl0ZXJhbEluQXJyYXlBbm5vSW5pdGlhbGl6ZXIuamF2YQpAQCAtMCwwICsxLDEwIEBACitAaW50ZXJmYWNlIFRlc3RGb3IgeworICBDbGFzc1tdIHRlc3RGb3JDbGFzcygpOworfQorCitjbGFzcyBGb28geworICBAVGVzdEZvcih0ZXN0Rm9yQ2xhc3MgPSB7IEFhYWFhYTxjYXJldD4gfSApCisgIHB1YmxpYyB2b2lkIGZvbzIyKCkge30KK30KKworY2xhc3MgQWFhYWFhYWFhYWFhYWFhYWFhYWFhIHt9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL0NsYXNzTGl0ZXJhbEluQXJyYXlBbm5vSW5pdGlhbGl6ZXIyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvQ2xhc3NMaXRlcmFsSW5BcnJheUFubm9Jbml0aWFsaXplcjIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZTU3MWU0Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL0NsYXNzTGl0ZXJhbEluQXJyYXlBbm5vSW5pdGlhbGl6ZXIyLmphdmEKQEAgLTAsMCArMSwxMCBAQAorQGludGVyZmFjZSBUZXN0Rm9yIHsKKyAgQ2xhc3NbXSB0ZXN0Rm9yQ2xhc3MoKTsKK30KKworY2xhc3MgRm9vIHsKKyAgQFRlc3RGb3IodGVzdEZvckNsYXNzID0geyBPYmplY3QuY2xhc3MsIEFhYWFhYTxjYXJldD4gfSApCisgIHB1YmxpYyB2b2lkIGZvbzIyKCkge30KK30KKworY2xhc3MgQWFhYWFhYWFhYWFhYWFhYWFhYWFhIHt9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL0NsYXNzTGl0ZXJhbEluQXJyYXlBbm5vSW5pdGlhbGl6ZXIyX2FmdGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvQ2xhc3NMaXRlcmFsSW5BcnJheUFubm9Jbml0aWFsaXplcjJfYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOTU3MTU3Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL0NsYXNzTGl0ZXJhbEluQXJyYXlBbm5vSW5pdGlhbGl6ZXIyX2FmdGVyLmphdmEKQEAgLTAsMCArMSwxMCBAQAorQGludGVyZmFjZSBUZXN0Rm9yIHsKKyAgQ2xhc3NbXSB0ZXN0Rm9yQ2xhc3MoKTsKK30KKworY2xhc3MgRm9vIHsKKyAgQFRlc3RGb3IodGVzdEZvckNsYXNzID0geyBPYmplY3QuY2xhc3MsIEFhYWFhYWFhYWFhYWFhYWFhYWFhYTxjYXJldD4gfSApCisgIHB1YmxpYyB2b2lkIGZvbzIyKCkge30KK30KKworY2xhc3MgQWFhYWFhYWFhYWFhYWFhYWFhYWFhIHt9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL0NsYXNzTGl0ZXJhbEluQXJyYXlBbm5vSW5pdGlhbGl6ZXJfYWZ0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9DbGFzc0xpdGVyYWxJbkFycmF5QW5ub0luaXRpYWxpemVyX2FmdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmFiMjhkNQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9DbGFzc0xpdGVyYWxJbkFycmF5QW5ub0luaXRpYWxpemVyX2FmdGVyLmphdmEKQEAgLTAsMCArMSwxMCBAQAorQGludGVyZmFjZSBUZXN0Rm9yIHsKKyAgQ2xhc3NbXSB0ZXN0Rm9yQ2xhc3MoKTsKK30KKworY2xhc3MgRm9vIHsKKyAgQFRlc3RGb3IodGVzdEZvckNsYXNzID0geyBBYWFhYWFhYWFhYWFhYWFhYWFhYWE8Y2FyZXQ+IH0gKQorICBwdWJsaWMgdm9pZCBmb28yMigpIHt9Cit9CisKK2NsYXNzIEFhYWFhYWFhYWFhYWFhYWFhYWFhYSB7fQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9DbGFzc05hbWVBbm9ueW1vdXMuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9DbGFzc05hbWVBbm9ueW1vdXMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NDk2MDA3Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL0NsYXNzTmFtZUFub255bW91cy5qYXZhCkBAIC0wLDAgKzEsOSBAQAorY2xhc3MgRm9vIHsKKyAgeworICAgIFp6b28gbCA9IG5ldyBaejxjYXJldD4KKyAgfQorfQorCitpbnRlcmZhY2UgWnpvbyB7CisgIHZvaWQgcnVuKCk7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL0NsYXNzTmFtZUFub255bW91c19hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL0NsYXNzTmFtZUFub255bW91c19hZnRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ3MTE0MzQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvQ2xhc3NOYW1lQW5vbnltb3VzX2FmdGVyLmphdmEKQEAgLTAsMCArMSwxNCBAQAorY2xhc3MgRm9vIHsKKyAgeworICAgIFp6b28gbCA9IG5ldyBaem9vKCkgeworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIHZvaWQgcnVuKCkgeworICAgICAgICAgICAgPHNlbGVjdGlvbj4vL1RvIGNoYW5nZSBib2R5IG9mIGltcGxlbWVudGVkIG1ldGhvZHMgdXNlIEZpbGUgfCBTZXR0aW5ncyB8IEZpbGUgVGVtcGxhdGVzLjwvc2VsZWN0aW9uPgorICAgICAgICB9CisgICAgfQorICB9Cit9CisKK2ludGVyZmFjZSBaem9vIHsKKyAgdm9pZCBydW4oKTsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvQ2xhc3NOYW1lRG90LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvQ2xhc3NOYW1lRG90LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTY0NjQ3NAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9DbGFzc05hbWVEb3QuamF2YQpAQCAtMCwwICsxLDUgQEAKK2NsYXNzIEZvbyB7CisgIHsKKyAgICBGSVN0cjxjYXJldD4KKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9DbGFzc05hbWVEb3RCZWZvcmVDYWxsLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvQ2xhc3NOYW1lRG90QmVmb3JlQ2FsbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhmMDEwZTQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvQ2xhc3NOYW1lRG90QmVmb3JlQ2FsbC5qYXZhCkBAIC0wLDAgKzEsNyBAQAorcHVibGljIGNsYXNzIEZvbyB7CisgIHsKKyAgICAgIHZlcmlmeShydW5QNFdpdGhDbGllbnQoImludGVnIiwgIm1haW4vLi4uIiwgInJlbC8uLi4iKSk7CisgICAgICBGaWxlSW5wdXRTdHJlYW0uPGNhcmV0PgorICAgICAgdmVyaWZ5KHJ1blA0V2l0aENsaWVudCgicmVzb2x2ZSIsICItYXQiKSk7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvQ2xhc3NOYW1lRG90QmVmb3JlQ2FsbF9hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL0NsYXNzTmFtZURvdEJlZm9yZUNhbGxfYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YzUyNThiCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL0NsYXNzTmFtZURvdEJlZm9yZUNhbGxfYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDkgQEAKK2ltcG9ydCBqYXZhLmlvLkZpbGVJbnB1dFN0cmVhbTsKKworcHVibGljIGNsYXNzIEZvbyB7CisgIHsKKyAgICAgIHZlcmlmeShydW5QNFdpdGhDbGllbnQoImludGVnIiwgIm1haW4vLi4uIiwgInJlbC8uLi4iKSk7CisgICAgICBGaWxlSW5wdXRTdHJlYW0uPGNhcmV0PgorICAgICAgdmVyaWZ5KHJ1blA0V2l0aENsaWVudCgicmVzb2x2ZSIsICItYXQiKSk7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvQ2xhc3NOYW1lRG90X2FmdGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvQ2xhc3NOYW1lRG90X2FmdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzNkYzU3NwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9DbGFzc05hbWVEb3RfYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDcgQEAKK2ltcG9ydCBqYXZhLmlvLkZpbGVJbnB1dFN0cmVhbTsKKworY2xhc3MgRm9vIHsKKyAgeworICAgICAgRmlsZUlucHV0U3RyZWFtLjxjYXJldD4KKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9DbGFzc05hbWVHZW5lcmljcy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL0NsYXNzTmFtZUdlbmVyaWNzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmNkOGMyOAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9DbGFzc05hbWVHZW5lcmljcy5qYXZhCkBAIC0wLDAgKzEsNyBAQAoraW1wb3J0IGphdmEudXRpbC5MaXN0OworCitjbGFzcyBGb28geworICB7CisgICAgTGlzdDxTdHJpbmc+IGwgPSBuZXcgQXJyYUxpPGNhcmV0PgorICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL0NsYXNzTmFtZUdlbmVyaWNzX2FmdGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvQ2xhc3NOYW1lR2VuZXJpY3NfYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NzA3N2Y2Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL0NsYXNzTmFtZUdlbmVyaWNzX2FmdGVyLmphdmEKQEAgLTAsMCArMSw4IEBACitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworY2xhc3MgRm9vIHsKKyAgeworICAgIExpc3Q8U3RyaW5nPiBsID0gbmV3IEFycmF5TGlzdDxTdHJpbmc+KDxjYXJldD4pCisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvQ2xhc3NOYW1lSW5JZkJlZm9yZUlkZW50aWZpZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9DbGFzc05hbWVJbklmQmVmb3JlSWRlbnRpZmllci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMxYTQzNmEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvQ2xhc3NOYW1lSW5JZkJlZm9yZUlkZW50aWZpZXIuamF2YQpAQCAtMCwwICsxLDcgQEAKK2NsYXNzIFh4eCB7CisgIHsKKyAgICBpZiAoQUJDREVGPGNhcmV0PmFhYS5iYmIoKSkgeworCisgICAgfQorICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL0NsYXNzTmFtZUluSWZCZWZvcmVJZGVudGlmaWVyX2FmdGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvQ2xhc3NOYW1lSW5JZkJlZm9yZUlkZW50aWZpZXJfYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZGVmN2Y4Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL0NsYXNzTmFtZUluSWZCZWZvcmVJZGVudGlmaWVyX2FmdGVyLmphdmEKQEAgLTAsMCArMSw3IEBACitjbGFzcyBYeHggeworICB7CisgICAgaWYgKEFCQ0RFRkZGRkY8Y2FyZXQ+YWFhLmJiYigpKSB7CisKKyAgICB9CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvQ2xhc3NOYW1lSW5zaWRlSWRlbnRpZmllckluSWYuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9DbGFzc05hbWVJbnNpZGVJZGVudGlmaWVySW5JZi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI2MzdmODkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvQ2xhc3NOYW1lSW5zaWRlSWRlbnRpZmllckluSWYuamF2YQpAQCAtMCwwICsxLDYgQEAKK3B1YmxpYyBjbGFzcyBCYXIgeworICAgIHsKKyAgICAgICAgaWYgKDIgIT0gSW5wU3RyUmVhPGNhcmV0PkFhYSkgeworICAgICAgICB9CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9DbGFzc05hbWVJbnNpZGVJZGVudGlmaWVySW5JZl9hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL0NsYXNzTmFtZUluc2lkZUlkZW50aWZpZXJJbklmX2FmdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmEwYjFiMQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9DbGFzc05hbWVJbnNpZGVJZGVudGlmaWVySW5JZl9hZnRlci5qYXZhCkBAIC0wLDAgKzEsOCBAQAoraW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW1SZWFkZXI7CisKK3B1YmxpYyBjbGFzcyBCYXIgeworICAgIHsKKyAgICAgICAgaWYgKDIgIT0gSW5wdXRTdHJlYW1SZWFkZXI8Y2FyZXQ+QWFhKSB7CisgICAgICAgIH0KKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL0NsYXNzTmFtZVdpdGhFeGlzdGluZ1BhcmVuc0FzUXVhbGlmaWVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvQ2xhc3NOYW1lV2l0aEV4aXN0aW5nUGFyZW5zQXNRdWFsaWZpZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lN2NjYjBjCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL0NsYXNzTmFtZVdpdGhFeGlzdGluZ1BhcmVuc0FzUXVhbGlmaWVyLmphdmEKQEAgLTAsMCArMSw1IEBACitwdWJsaWMgY2xhc3MgRm9vQmFyIHsKKyAgeworICAgIG5ldyBGb29CPGNhcmV0PigpLgorICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL0NsYXNzTmFtZVdpdGhFeGlzdGluZ1BhcmVuc0FzUXVhbGlmaWVyX2FmdGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvQ2xhc3NOYW1lV2l0aEV4aXN0aW5nUGFyZW5zQXNRdWFsaWZpZXJfYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOTVhNTMwCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL0NsYXNzTmFtZVdpdGhFeGlzdGluZ1BhcmVuc0FzUXVhbGlmaWVyX2FmdGVyLmphdmEKQEAgLTAsMCArMSw1IEBACitwdWJsaWMgY2xhc3MgRm9vQmFyIHsKKyAgeworICAgIG5ldyBGb29CYXIoKTxjYXJldD4uCisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvQ2xhc3NOYW1lV2l0aEdlbmVyaWNzVGFiLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvQ2xhc3NOYW1lV2l0aEdlbmVyaWNzVGFiLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGY2OWE3ZQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9DbGFzc05hbWVXaXRoR2VuZXJpY3NUYWIuamF2YQpAQCAtMCwwICsxLDkgQEAKK3B1YmxpYyBjbGFzcyBUZXN0Q2xhc3MgeworCisgICAgcHVibGljIFRlc3RDbGFzcyBjcmVhdGUoKSB7CisgICAgICAgIGZpbmFsIGludCB2YWx1ZSA9IDE7CisgICAgICAgIHJldHVybiBuZXcgWHg8Y2FyZXQ+VGV4Q29tcFh4eDxTdHJpbmc+KHZhbHVlKTsKKyAgICB9Cit9CisKK2NsYXNzIFh4eCB7IH0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvQ2xhc3NOYW1lV2l0aEdlbmVyaWNzVGFiMi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL0NsYXNzTmFtZVdpdGhHZW5lcmljc1RhYjIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMGIyZjY2Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL0NsYXNzTmFtZVdpdGhHZW5lcmljc1RhYjIuamF2YQpAQCAtMCwwICsxLDggQEAKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitwdWJsaWMgY2xhc3MgRm9vIHsKKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisgICAgICAgIExpc3Q8SW50ZWdlcj4gc2V0ID0gbmV3IEFycmF5TGlzPGNhcmV0PnQ8SW50ZWdlcj4oKTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvQ2xhc3NOYW1lV2l0aEdlbmVyaWNzVGFiMl9hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL0NsYXNzTmFtZVdpdGhHZW5lcmljc1RhYjJfYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZmM3OWYyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL0NsYXNzTmFtZVdpdGhHZW5lcmljc1RhYjJfYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDggQEAKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitwdWJsaWMgY2xhc3MgRm9vIHsKKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisgICAgICAgIExpc3Q8SW50ZWdlcj4gc2V0ID0gbmV3IEFycmF5TGlzdDxJbnRlZ2VyPig8Y2FyZXQ+KTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvQ2xhc3NOYW1lV2l0aEdlbmVyaWNzVGFiX2FmdGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvQ2xhc3NOYW1lV2l0aEdlbmVyaWNzVGFiX2FmdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWIzZGU5MgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9DbGFzc05hbWVXaXRoR2VuZXJpY3NUYWJfYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDkgQEAKK3B1YmxpYyBjbGFzcyBUZXN0Q2xhc3MgeworCisgICAgcHVibGljIFRlc3RDbGFzcyBjcmVhdGUoKSB7CisgICAgICAgIGZpbmFsIGludCB2YWx1ZSA9IDE7CisgICAgICAgIHJldHVybiBuZXcgWHh4PGNhcmV0PjxTdHJpbmc+KHZhbHVlKTsKKyAgICB9Cit9CisKK2NsYXNzIFh4eCB7IH0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvQ2xhc3NOYW1lV2l0aElubmVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvQ2xhc3NOYW1lV2l0aElubmVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTg5MTNlZQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9DbGFzc05hbWVXaXRoSW5uZXIuamF2YQpAQCAtMCwwICsxLDExIEBACitjbGFzcyBGb28geworICB7CisgICAgWnpvbyBsID0gbmV3IFp6PGNhcmV0PgorICB9Cit9CisKK2ludGVyZmFjZSBaem9vIHsKKyAgdm9pZCBydW4oKTsKKworICBjbGFzcyBJbXBsIGltcGxlbWVudHMgWnpvbyB7fQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9DbGFzc05hbWVXaXRoSW5uZXIyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvQ2xhc3NOYW1lV2l0aElubmVyMi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMxNGMwMDkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvQ2xhc3NOYW1lV2l0aElubmVyMi5qYXZhCkBAIC0wLDAgKzEsMTEgQEAKK2NsYXNzIEZvbyB7CisgIHsKKyAgICBaem9vLkltcGwgbCA9IG5ldyBaejxjYXJldD4KKyAgfQorfQorCitpbnRlcmZhY2UgWnpvbyB7CisgIHZvaWQgcnVuKCk7CisKKyAgY2xhc3MgSW1wbCBpbXBsZW1lbnRzIFp6b28ge30KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvQ2xhc3NOYW1lV2l0aElubmVyMl9hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL0NsYXNzTmFtZVdpdGhJbm5lcjJfYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YjU5MmVkCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL0NsYXNzTmFtZVdpdGhJbm5lcjJfYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDExIEBACitjbGFzcyBGb28geworICB7CisgICAgWnpvby5JbXBsIGwgPSBuZXcgWnpvby5JbXBsKCk8Y2FyZXQ+CisgIH0KK30KKworaW50ZXJmYWNlIFp6b28geworICB2b2lkIHJ1bigpOworCisgIGNsYXNzIEltcGwgaW1wbGVtZW50cyBaem9vIHt9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL0NsYXNzTmFtZVdpdGhJbm5lcl9hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL0NsYXNzTmFtZVdpdGhJbm5lcl9hZnRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjExNzA4MTIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvQ2xhc3NOYW1lV2l0aElubmVyX2FmdGVyLmphdmEKQEAgLTAsMCArMSwxNiBAQAorY2xhc3MgRm9vIHsKKyAgeworICAgIFp6b28gbCA9IG5ldyBaem9vKCkgeworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIHZvaWQgcnVuKCkgeworICAgICAgICAgICAgPHNlbGVjdGlvbj4vL1RvIGNoYW5nZSBib2R5IG9mIGltcGxlbWVudGVkIG1ldGhvZHMgdXNlIEZpbGUgfCBTZXR0aW5ncyB8IEZpbGUgVGVtcGxhdGVzLjwvc2VsZWN0aW9uPgorICAgICAgICB9CisgICAgfQorICB9Cit9CisKK2ludGVyZmFjZSBaem9vIHsKKyAgdm9pZCBydW4oKTsKKworICBjbGFzcyBJbXBsIGltcGxlbWVudHMgWnpvbyB7fQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9DbGFzc05hbWVXaXRoSW5uZXJzVGFiLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvQ2xhc3NOYW1lV2l0aElubmVyc1RhYi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjMWNhZGEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvQ2xhc3NOYW1lV2l0aElubmVyc1RhYi5qYXZhCkBAIC0wLDAgKzEsMTYgQEAKK3B1YmxpYyBjbGFzcyBUZXN0Q2xhc3MgeworCisgICAgcHVibGljIFRlc3RDbGFzcyBjcmVhdGUoKSB7CisgICAgICAgIGZpbmFsIGludCB2YWx1ZSA9IDE7CisgICAgICAgIHJldHVybiBuZXcgWHg8Y2FyZXQ+VGV4Q29tcFh4eCh2YWx1ZSk7CisgICAgfQorfQorCitjbGFzcyBYeHggeworICAgIHByaXZhdGUgWHh4KFN0cmluZyB4KSB7CisgICAgfQorCisgICAgc3RhdGljIGNsYXNzIFl5eSB7CisKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL0NsYXNzTmFtZVdpdGhJbm5lcnNUYWJfYWZ0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9DbGFzc05hbWVXaXRoSW5uZXJzVGFiX2FmdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODY4MTQyYwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9DbGFzc05hbWVXaXRoSW5uZXJzVGFiX2FmdGVyLmphdmEKQEAgLTAsMCArMSwxNiBAQAorcHVibGljIGNsYXNzIFRlc3RDbGFzcyB7CisKKyAgICBwdWJsaWMgVGVzdENsYXNzIGNyZWF0ZSgpIHsKKyAgICAgICAgZmluYWwgaW50IHZhbHVlID0gMTsKKyAgICAgICAgcmV0dXJuIG5ldyBYeHgoPGNhcmV0PnZhbHVlKTsKKyAgICB9Cit9CisKK2NsYXNzIFh4eCB7CisgICAgcHJpdmF0ZSBYeHgoU3RyaW5nIHgpIHsKKyAgICB9CisKKyAgICBzdGF0aWMgY2xhc3MgWXl5IHsKKworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvQ2xhc3NOYW1lV2l0aEluc3RhbmNlSW5uZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9DbGFzc05hbWVXaXRoSW5zdGFuY2VJbm5lci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJhOGU2ZDEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvQ2xhc3NOYW1lV2l0aEluc3RhbmNlSW5uZXIuamF2YQpAQCAtMCwwICsxLDExIEBACitjbGFzcyBGb28geworICB7CisgICAgWnpvbyBsID0gbmV3IFp6PGNhcmV0PgorICB9Cit9CisKK2NsYXNzIFp6b28geworICB2b2lkIHJ1bigpOworCisgIGNsYXNzIEltcGwgaW1wbGVtZW50cyBaem9vIHt9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL0NsYXNzTmFtZVdpdGhJbnN0YW5jZUlubmVyX2FmdGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvQ2xhc3NOYW1lV2l0aEluc3RhbmNlSW5uZXJfYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZWU5MGRmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL0NsYXNzTmFtZVdpdGhJbnN0YW5jZUlubmVyX2FmdGVyLmphdmEKQEAgLTAsMCArMSwxMSBAQAorY2xhc3MgRm9vIHsKKyAgeworICAgIFp6b28gbCA9IG5ldyBaem9vKCk8Y2FyZXQ+CisgIH0KK30KKworY2xhc3MgWnpvbyB7CisgIHZvaWQgcnVuKCk7CisKKyAgY2xhc3MgSW1wbCBpbXBsZW1lbnRzIFp6b28ge30KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvQ2xhc3NSZWZlcmVuY2VJbkZvci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL0NsYXNzUmVmZXJlbmNlSW5Gb3IuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOTE2ZTIzCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL0NsYXNzUmVmZXJlbmNlSW5Gb3IuamF2YQpAQCAtMCwwICsxLDYgQEAKK3B1YmxpYyBjbGFzcyBab28yIHsKKyAgICB7CisgICAgICAgIGZvciAoU3RyaTxjYXJldD5jaGlsZCA6IGRpci5nZXRDaGlsZHJlbigpKQorICAgIH0KK30KKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL0NsYXNzUmVmZXJlbmNlSW5Gb3IyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvQ2xhc3NSZWZlcmVuY2VJbkZvcjIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZjg3MDAwCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL0NsYXNzUmVmZXJlbmNlSW5Gb3IyLmphdmEKQEAgLTAsMCArMSw2IEBACitwdWJsaWMgY2xhc3MgWm9vMiB7CisgICAgeworICAgICAgICBmb3IgKFN0cmk8Y2FyZXQ+IDogZGlyLmdldENoaWxkcmVuKCkpCisgICAgfQorfQorCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvQ2xhc3NSZWZlcmVuY2VJbkZvcjJfYWZ0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9DbGFzc1JlZmVyZW5jZUluRm9yMl9hZnRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY0MDM2MzMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvQ2xhc3NSZWZlcmVuY2VJbkZvcjJfYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDYgQEAKK3B1YmxpYyBjbGFzcyBab28yIHsKKyAgICB7CisgICAgICAgIGZvciAoU3RyaW5nIDxjYXJldD4gOiBkaXIuZ2V0Q2hpbGRyZW4oKSkKKyAgICB9Cit9CisKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9DbGFzc1JlZmVyZW5jZUluRm9yMy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL0NsYXNzUmVmZXJlbmNlSW5Gb3IzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWMzMzYxNwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9DbGFzc1JlZmVyZW5jZUluRm9yMy5qYXZhCkBAIC0wLDAgKzEsNiBAQAorcHVibGljIGNsYXNzIFpvbzIgeworICAgIHsKKyAgICAgICAgU3RyaW5nIHN0cmluZzsKKyAgICAgICAgZm9yIChTdHJpPGNhcmV0PikKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL0NsYXNzUmVmZXJlbmNlSW5Gb3IzX2FmdGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvQ2xhc3NSZWZlcmVuY2VJbkZvcjNfYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MWE5OTQzCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL0NsYXNzUmVmZXJlbmNlSW5Gb3IzX2FmdGVyLmphdmEKQEAgLTAsMCArMSw2IEBACitwdWJsaWMgY2xhc3MgWm9vMiB7CisgICAgeworICAgICAgICBTdHJpbmcgc3RyaW5nOworICAgICAgICBmb3IgKFN0cmluZyA8Y2FyZXQ+KQorICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvQ2xhc3NSZWZlcmVuY2VJbkZvcl9hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL0NsYXNzUmVmZXJlbmNlSW5Gb3JfYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMjI4ZTgwCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL0NsYXNzUmVmZXJlbmNlSW5Gb3JfYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDYgQEAKK3B1YmxpYyBjbGFzcyBab28yIHsKKyAgICB7CisgICAgICAgIGZvciAoU3RyaW5nIDxjYXJldD5jaGlsZCA6IGRpci5nZXRDaGlsZHJlbigpKQorICAgIH0KK30KKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL0NsYXNzU3F1YXJlQnJhY2tldC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL0NsYXNzU3F1YXJlQnJhY2tldC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg5ZmZmM2EKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvQ2xhc3NTcXVhcmVCcmFja2V0LmphdmEKQEAgLTAsMCArMSw2IEBACitjbGFzcyBBYmNkQ2xhc3Mge30KK2NsYXNzIEFiY2RlQ2xhc3Mge30KKworY2xhc3MgRm9vIHsKKyAgQWJjZDxjYXJldD4KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvQ2xhc3NTcXVhcmVCcmFja2V0X2FmdGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvQ2xhc3NTcXVhcmVCcmFja2V0X2FmdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDM5NDRhYQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9DbGFzc1NxdWFyZUJyYWNrZXRfYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDYgQEAKK2NsYXNzIEFiY2RDbGFzcyB7fQorY2xhc3MgQWJjZGVDbGFzcyB7fQorCitjbGFzcyBGb28geworICBBYmNkQ2xhc3NbPGNhcmV0Pl0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvQ2xhc3NUeXBlUGFyYW1ldGVycy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL0NsYXNzVHlwZVBhcmFtZXRlcnMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NjU5MjExCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL0NsYXNzVHlwZVBhcmFtZXRlcnMuamF2YQpAQCAtMCwwICsxLDMgQEAKK2NsYXNzIEtvbyB7fQorcHVibGljIGNsYXNzIEZvb01hcDxLLFY+IGltcGxlbWVudHMgWW91ck1hcEludGVyZmFjZTxLPGNhcmV0PiwgVj4geworfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL0NsYXNzVHlwZVBhcmFtZXRlcnNHZW5lcmljQm91bmRzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvQ2xhc3NUeXBlUGFyYW1ldGVyc0dlbmVyaWNCb3VuZHMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZTU4ZjVkCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL0NsYXNzVHlwZVBhcmFtZXRlcnNHZW5lcmljQm91bmRzLmphdmEKQEAgLTAsMCArMSwzIEBACitjbGFzcyBLb297fQorcHVibGljIGNsYXNzIEZvb01hcDxLLFYgZXh0ZW5kcyBLPGNhcmV0Pj4geworfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL0NvbW1hQWZ0ZXJWYXJpYWJsZS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL0NvbW1hQWZ0ZXJWYXJpYWJsZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ5YjQ4Y2UKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvQ29tbWFBZnRlclZhcmlhYmxlLmphdmEKQEAgLTAsMCArMSwxMCBAQAorY2xhc3MgQWJjZENsYXNzIHt9CitjbGFzcyBBYmNkRXhjZXB0aW9uIGV4dGVuZHMgVGhyb3dhYmxlIHt9CisKK2NsYXNzIEZvbyB7CisgIHsKKyAgICBpbnQgYWFhOworICAgIGludCBhYWI7CisgICAgZXF1YWxzKGFhPGNhcmV0PikKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9Db21tYUFmdGVyVmFyaWFibGVfYWZ0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9Db21tYUFmdGVyVmFyaWFibGVfYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOGQzYjI4Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL0NvbW1hQWZ0ZXJWYXJpYWJsZV9hZnRlci5qYXZhCkBAIC0wLDAgKzEsMTAgQEAKK2NsYXNzIEFiY2RDbGFzcyB7fQorY2xhc3MgQWJjZEV4Y2VwdGlvbiBleHRlbmRzIFRocm93YWJsZSB7fQorCitjbGFzcyBGb28geworICB7CisgICAgaW50IGFhYTsKKyAgICBpbnQgYWFiOworICAgIGVxdWFscyhhYWEsIDxjYXJldD4pCisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvQ29tcGF0aWJsZUludGVyZmFjZXNDYXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvQ29tcGF0aWJsZUludGVyZmFjZXNDYXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjhjODliMgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9Db21wYXRpYmxlSW50ZXJmYWNlc0Nhc3QuamF2YQpAQCAtMCwwICsxLDEwIEBACitpbnRlcmZhY2UgRm9vIHsgdm9pZCBmb28oKTsgfQoraW50ZXJmYWNlIEJhciB7IHZvaWQgYmFyKCk7IH0KKworcHVibGljIGNsYXNzIEEgeworICB2b2lkIGZvbyhGb28gbCkgeworICAgIGlmIChsIGluc3RhbmNlb2YgQmFyKSB7CisgICAgICBsLjxjYXJldD4KKyAgICB9CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9Db21wbGV0aW9uSW5zaWRlQ2xhc3NMaXRlcmFsLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvQ29tcGxldGlvbkluc2lkZUNsYXNzTGl0ZXJhbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNmMDQ5ZGIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvQ29tcGxldGlvbkluc2lkZUNsYXNzTGl0ZXJhbC5qYXZhCkBAIC0wLDAgKzEsNyBAQAorcHVibGljIGNsYXNzIFh4eCB7CisKKyAgICB7CisgICAgICAgIHRoaXMuZTxjYXJldD5YeHguY2xhc3M7CisgICAgfQorCit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvQ29tcGxldGlvbkluc2lkZUNsYXNzTGl0ZXJhbF9hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL0NvbXBsZXRpb25JbnNpZGVDbGFzc0xpdGVyYWxfYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZjhkMzliCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL0NvbXBsZXRpb25JbnNpZGVDbGFzc0xpdGVyYWxfYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDcgQEAKK3B1YmxpYyBjbGFzcyBYeHggeworCisgICAgeworICAgICAgICB0aGlzLmVxdWFscyg8Y2FyZXQ+KVh4eC5jbGFzczsKKyAgICB9CisKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9Db25zdGFudEluQW5uby5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL0NvbnN0YW50SW5Bbm5vLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmY2NzU5ZgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9Db25zdGFudEluQW5uby5qYXZhCkBAIC0wLDAgKzEsOCBAQAorcHVibGljIGZpbmFsIGNsYXNzIEZpbGVBdHRyaWJ1dGVzIHsKKyAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgU1lNX0xJTksgPSAweDAxOworICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBCUk9LRU5fU1lNX0xJTksgPSAweDAyOworICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBISURERU4gPSAweDIwOworCisgIEBNYWdpY0NvbnN0YW50KGZsYWdzID0ge1NZTV9MSU5LLCBCUk9LPGNhcmV0PiwgSElEREVOfSkKKyAgcHVibGljIEBpbnRlcmZhY2UgRmxhZ3MgeyB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL0NvbnN0YW50SW5Bbm5vX2FmdGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvQ29uc3RhbnRJbkFubm9fYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mODg5YjhkCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL0NvbnN0YW50SW5Bbm5vX2FmdGVyLmphdmEKQEAgLTAsMCArMSw4IEBACitwdWJsaWMgZmluYWwgY2xhc3MgRmlsZUF0dHJpYnV0ZXMgeworICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBTWU1fTElOSyA9IDB4MDE7CisgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEJST0tFTl9TWU1fTElOSyA9IDB4MDI7CisgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEhJRERFTiA9IDB4MjA7CisKKyAgQE1hZ2ljQ29uc3RhbnQoZmxhZ3MgPSB7U1lNX0xJTkssIEJST0tFTl9TWU1fTElOSzxjYXJldD4sIEhJRERFTn0pCisgIHB1YmxpYyBAaW50ZXJmYWNlIEZsYWdzIHsgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9Db25zdHJ1Y3Rvck5hbWUxLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvQ29uc3RydWN0b3JOYW1lMS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBjNWU3ODMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvQ29uc3RydWN0b3JOYW1lMS5qYXZhCkBAIC0wLDAgKzEsMyBAQAorY2xhc3MgQUJDREV7CisgIHB1YmxpYyBBQjxjYXJldD4KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvQ29uc3RydWN0b3JOYW1lMi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL0NvbnN0cnVjdG9yTmFtZTIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZjYzYjRjCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL0NvbnN0cnVjdG9yTmFtZTIuamF2YQpAQCAtMCwwICsxLDMgQEAKK2NsYXNzIEFCQ0RFeworICBwdWJsaWMgQUI8Y2FyZXQ+KCl7fQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9Db250aW51ZUxhYmVsLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvQ29udGludWVMYWJlbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI3MzQxYmEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvQ29udGludWVMYWJlbC5qYXZhCkBAIC0wLDAgKzEsNyBAQAorcHVibGljIGNsYXNzIFV0aWwgeworICB2b2lkIGZvbyhpbnQgYSwgaW50IGIpIHsKKyAgICBPdXRlcjogZm9yIChpbnQgaSA9IDA7IGkgPCAyMzk7IGkrKykgeworICAgICAgY29udGk8Y2FyZXQ+CisgICAgfQorICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL0NvbnRpbnVlTGFiZWxfYWZ0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9Db250aW51ZUxhYmVsX2FmdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzFiOWE2NgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9Db250aW51ZUxhYmVsX2FmdGVyLmphdmEKQEAgLTAsMCArMSw3IEBACitwdWJsaWMgY2xhc3MgVXRpbCB7CisgIHZvaWQgZm9vKGludCBhLCBpbnQgYikgeworICAgIE91dGVyOiBmb3IgKGludCBpID0gMDsgaSA8IDIzOTsgaSsrKSB7CisgICAgICBjb250aW51ZSA8Y2FyZXQ+CisgICAgfQorICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL0RlZmF1bHRBbm5vUGFyYW0uamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9EZWZhdWx0QW5ub1BhcmFtLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODgwN2E5NQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9EZWZhdWx0QW5ub1BhcmFtLmphdmEKQEAgLTAsMCArMSwxNCBAQAorQGludGVyZmFjZSBBbm5vIHsKKyAgU3RyaW5nIHZhbHVlKCk7Cit9CisKK3B1YmxpYyBjbGFzcyBGb29CYXIgeworICAgIEBBbm5vKEZvQjxjYXJldD4pCisgICAgdm9pZCBtKCkge30KKworICAgIFN0cmluZyBGb29CYXJycnJycigpIHt9CisKKyAgICBwdWJsaWMgc3RhdGljIFN0cmluZyBGb29CYXJycnIoKSB7fQorCisKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9EZWZhdWx0QW5ub1BhcmFtX2FmdGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvRGVmYXVsdEFubm9QYXJhbV9hZnRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA5YWRjNDMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvRGVmYXVsdEFubm9QYXJhbV9hZnRlci5qYXZhCkBAIC0wLDAgKzEsMTQgQEAKK0BpbnRlcmZhY2UgQW5ubyB7CisgIFN0cmluZyB2YWx1ZSgpOworfQorCitwdWJsaWMgY2xhc3MgRm9vQmFyIHsKKyAgICBAQW5ubyhGb29CYXI8Y2FyZXQ+KQorICAgIHZvaWQgbSgpIHt9CisKKyAgICBTdHJpbmcgRm9vQmFycnJycnIoKSB7fQorCisgICAgcHVibGljIHN0YXRpYyBTdHJpbmcgRm9vQmFycnJyKCkge30KKworCit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvRGVmYXVsdEluU3dpdGNoLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvRGVmYXVsdEluU3dpdGNoLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGJmYjM4ZQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9EZWZhdWx0SW5Td2l0Y2guamF2YQpAQCAtMCwwICsxLDkgQEAKK3B1YmxpYyBjbGFzcyBDb25zdENvbmZpZyB7CisgICAgeworICAgICAgICBzd2l0Y2ggKGEpIHsKKyAgICAgICAgICAgIGNhc2UgRm9vb286IHt9CisgICAgICAgICAgICBkZWY8Y2FyZXQ+CisKKyAgICAgICAgfQorICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvRGVmYXVsdEluU3dpdGNoX2FmdGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvRGVmYXVsdEluU3dpdGNoX2FmdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmJkMDMzMAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9EZWZhdWx0SW5Td2l0Y2hfYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDkgQEAKK3B1YmxpYyBjbGFzcyBDb25zdENvbmZpZyB7CisgICAgeworICAgICAgICBzd2l0Y2ggKGEpIHsKKyAgICAgICAgICAgIGNhc2UgRm9vb286IHt9CisgICAgICAgICAgICBkZWZhdWx0OjxjYXJldD4KKworICAgICAgICB9CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9Eb1doaWxlTWV0aG9kQ2FsbC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL0RvV2hpbGVNZXRob2RDYWxsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzg1Y2QxYQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9Eb1doaWxlTWV0aG9kQ2FsbC5qYXZhCkBAIC0wLDAgKzEsOSBAQAorcHVibGljIGNsYXNzIEZvbyB7CisKKyAgICB7CisgICAgICAgIGRvIHsKKworICAgICAgICB9IHdoaWxlICh0b1N0PGNhcmV0Pik7CisgICAgfQorCit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvRG9XaGlsZU1ldGhvZENhbGxfYWZ0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9Eb1doaWxlTWV0aG9kQ2FsbF9hZnRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNjMTU5ZjcKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvRG9XaGlsZU1ldGhvZENhbGxfYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDkgQEAKK3B1YmxpYyBjbGFzcyBGb28geworCisgICAgeworICAgICAgICBkbyB7CisKKyAgICAgICAgfSB3aGlsZSAodG9TdHJpbmcoKTxjYXJldD4pOworICAgIH0KKworfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL0RvbnRBdXRvSW5zZXJ0TWlkZGxlTWF0Y2guamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9Eb250QXV0b0luc2VydE1pZGRsZU1hdGNoLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWU0YWMyZQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9Eb250QXV0b0luc2VydE1pZGRsZU1hdGNoLmphdmEKQEAgLTAsMCArMSw1IEBACitwdWJsaWMgY2xhc3MgQSB7CisgIHZvaWQgZm9vKEZvbyBteVh4eHh4eHh4eCkgeworICAgIFh4eHh4PGNhcmV0PgorICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvRG9udEF1dG9JbnNlcnRNaWRkbGVNYXRjaF9hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL0RvbnRBdXRvSW5zZXJ0TWlkZGxlTWF0Y2hfYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZTRhYzJlCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL0RvbnRBdXRvSW5zZXJ0TWlkZGxlTWF0Y2hfYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDUgQEAKK3B1YmxpYyBjbGFzcyBBIHsKKyAgdm9pZCBmb28oRm9vIG15WHh4eHh4eHh4KSB7CisgICAgWHh4eHg8Y2FyZXQ+CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9Eb250Q2FzdEluc3RhbmNlb2ZlZFF1YWxpZmllci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL0RvbnRDYXN0SW5zdGFuY2VvZmVkUXVhbGlmaWVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjdmZjA0ZQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9Eb250Q2FzdEluc3RhbmNlb2ZlZFF1YWxpZmllci5qYXZhCkBAIC0wLDAgKzEsMTAgQEAKK3B1YmxpYyBhYnN0cmFjdCBjbGFzcyBaenphIHsKKworICAgIHZvaWQgZm9vKE9iamVjdCBvKSB7CisgICAgICBpZiAobyBpbnN0YW5jZW9mIFN0cmluZykgeworICAgICAgICBvLnRvU3RyPGNhcmV0PgorICAgICAgfQorICAgIH0KKworCit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL0RvbnRDYXN0SW5zdGFuY2VvZmVkUXVhbGlmaWVyX2FmdGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvRG9udENhc3RJbnN0YW5jZW9mZWRRdWFsaWZpZXJfYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNTQ0ODk4Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL0RvbnRDYXN0SW5zdGFuY2VvZmVkUXVhbGlmaWVyX2FmdGVyLmphdmEKQEAgLTAsMCArMSwxMCBAQAorcHVibGljIGFic3RyYWN0IGNsYXNzIFp6emEgeworCisgICAgdm9pZCBmb28oT2JqZWN0IG8pIHsKKyAgICAgIGlmIChvIGluc3RhbmNlb2YgU3RyaW5nKSB7CisgICAgICAgIG8udG9TdHJpbmcoKTxjYXJldD4KKyAgICAgIH0KKyAgICB9CisKKworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9Eb3VibGVCb29sZWFuSW5QYXJhbWV0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9Eb3VibGVCb29sZWFuSW5QYXJhbWV0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYTRhNTlhCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL0RvdWJsZUJvb2xlYW5JblBhcmFtZXRlci5qYXZhCkBAIC0wLDAgKzEsNCBAQAoraW50ZXJmYWNlIEZvbyB7CisgIHZvaWQgZ2V0R29vQmFyRG9vKCk7CisgICAgdm9pZCBiYXIoZmluYWwgYjxjYXJldD4pOworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9Eb3VibGVDb25zdGFudC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL0RvdWJsZUNvbnN0YW50LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDYzYzc3MwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9Eb3VibGVDb25zdGFudC5qYXZhCkBAIC0wLDAgKzEsOCBAQAoraW50ZXJmYWNlIEludGYgeyBJbnRmIFhGT08gPSBudWxsOyB9CitpbnRlcmZhY2UgSW50ZjIgZXh0ZW5kcyBJbnRmIHsgSW50ZjIgWEZPTyA9IG51bGw7IH0KKworcHVibGljIGNsYXNzIEJhciBpbXBsZW1lbnRzIEludGYyIHsKKyAgcHVibGljIHN0YXRpYyB2b2lkIGZwcCgpIHsKKyAgICBYRjxjYXJldD54CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9Eb3VibGVFeHBlY3RlZFR5cGVGYWN0b3J5TWV0aG9kLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvRG91YmxlRXhwZWN0ZWRUeXBlRmFjdG9yeU1ldGhvZC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZiMmY3ZGQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvRG91YmxlRXhwZWN0ZWRUeXBlRmFjdG9yeU1ldGhvZC5qYXZhCkBAIC0wLDAgKzEsMTEgQEAKK2NsYXNzIFpvbzIgeworICAgIHsKKyAgICAgICAgZm9vKEtleTxjYXJldD4sIHRydWUpOworICAgIH0KKworICAgIDxUPiB2b2lkIGZvbyhLZXk8VD4gZiwgVCBiKSB7IH0KK30KKworY2xhc3MgS2V5PFQ+IHsKKyAgICBzdGF0aWMgPFQ+IEtleTxUPiBjcmVhdGUoKSB7fSAKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvRG91YmxlRmFsc2UuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9Eb3VibGVGYWxzZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVlYWUyNzEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvRG91YmxlRmFsc2UuamF2YQpAQCAtMCwwICsxLDEzIEBACitwdWJsaWMgY2xhc3MgRm9vIHsKKworICAgIHZvaWQgYmFyKCkgeworICAgICAgICBlcXVhbHMobmV3IE9iamVjdCgpIHsKKyAgICAgICAgICAgIGJvb2xlYW4gYmFyKCkgeworICAgICAgICAgICAgICAgIHJldHVybiBmPGNhcmV0PgorICAgICAgICAgICAgfQorICAgICAgICB9KTsKKyAgICB9CisKKyAgYm9vbGVhbiBmZWZlZmVmKCkge30KKworfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL0R1cGxpY2F0ZUV4cGVjdGVkVHlwZUluVHlwZUFyZ3VtZW50TGlzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL0R1cGxpY2F0ZUV4cGVjdGVkVHlwZUluVHlwZUFyZ3VtZW50TGlzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRjZjJmNGMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvRHVwbGljYXRlRXhwZWN0ZWRUeXBlSW5UeXBlQXJndW1lbnRMaXN0LmphdmEKQEAgLTAsMCArMSw4IEBACitpbXBvcnQgamF2YS51dGlsLio7CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK2NsYXNzIFpvbyB7CisgIHsKKyAgICBMaXN0PFN0cmluZz4gbCA9IG5ldyBBcnJheUxpc3Q8U3RyaTxjYXJldD4+CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9FbmNsb3NpbmdUaGlzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvRW5jbG9zaW5nVGhpcy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVjZjgxMzZkCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL0VuY2xvc2luZ1RoaXMuamF2YQpAQCAtMCwwICsxLDcgQEAKK3B1YmxpYyBjbGFzcyBBIHsKKyAgcHVibGljIGNsYXNzIEIgeworICAgIHZvaWQgbSgpIHsKKyAgICAgIEEudGhpPGNhcmV0PgorICAgIH0KKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL0VuY2xvc2luZ1RoaXNfYWZ0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9FbmNsb3NpbmdUaGlzX2FmdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTZhZTM3NgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9FbmNsb3NpbmdUaGlzX2FmdGVyLmphdmEKQEAgLTAsMCArMSw3IEBACitwdWJsaWMgY2xhc3MgQSB7CisgIHB1YmxpYyBjbGFzcyBCIHsKKyAgICB2b2lkIG0oKSB7CisgICAgICBBLnRoaXM8Y2FyZXQ+CisgICAgfQorICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvRW51bUNvbnN0YW50RnJvbUVudW1NZW1iZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9FbnVtQ29uc3RhbnRGcm9tRW51bU1lbWJlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMzNTAzZjAKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvRW51bUNvbnN0YW50RnJvbUVudW1NZW1iZXIuamF2YQpAQCAtMCwwICsxLDYgQEAKK3B1YmxpYyBlbnVtIEJ1dHRvbktleSB7CisgIENBTkNFTF9BTEwsCisgIENBTkNFTF9TRUxMOworCisgIHB1YmxpYyBzdGF0aWMgZmluYWwgQnV0dG9uS2V5W10gQVJSID0ge0NBTkNFTF9BTEwsIENBTkNFTF9TPGNhcmV0Pn07Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL0VudW1Db25zdGFudEZyb21FbnVtTWVtYmVyX2FmdGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvRW51bUNvbnN0YW50RnJvbUVudW1NZW1iZXJfYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYzBlMDU1Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL0VudW1Db25zdGFudEZyb21FbnVtTWVtYmVyX2FmdGVyLmphdmEKQEAgLTAsMCArMSw2IEBACitwdWJsaWMgZW51bSBCdXR0b25LZXkgeworICBDQU5DRUxfQUxMLAorICBDQU5DRUxfU0VMTDsKKworICBwdWJsaWMgc3RhdGljIGZpbmFsIEJ1dHRvbktleVtdIEFSUiA9IHtDQU5DRUxfQUxMLCBDQU5DRUxfU0VMTDxjYXJldD59OworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9FbnVtUHJpdmF0ZUZpbmFsLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvRW51bVByaXZhdGVGaW5hbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVhYzY3YjkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvRW51bVByaXZhdGVGaW5hbC5qYXZhCkBAIC0wLDAgKzEsNSBAQAorZW51bSBHb28geworICAgIGEsYjsKKworICAgIHByaXZhdGUgZmluPGNhcmV0PgorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9FbnVtUHJpdmF0ZUZpbmFsX2FmdGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvRW51bVByaXZhdGVGaW5hbF9hZnRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMwYjRhZDAKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvRW51bVByaXZhdGVGaW5hbF9hZnRlci5qYXZhCkBAIC0wLDAgKzEsNSBAQAorZW51bSBHb28geworICAgIGEsYjsKKworICAgIHByaXZhdGUgZmluYWwgPGNhcmV0PgorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9FbnVtV2l0aG91dENvbnN0YW50cy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL0VudW1XaXRob3V0Q29uc3RhbnRzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWExMDY2ZQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9FbnVtV2l0aG91dENvbnN0YW50cy5qYXZhCkBAIC0wLDAgKzEgQEAKK3B1YmxpYyBlbnVtIEZvb29vb28geyBwcml2YXRlIEZvb288Y2FyZXQ+IH0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvRW51bVdpdGhvdXRDb25zdGFudHNfYWZ0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9FbnVtV2l0aG91dENvbnN0YW50c19hZnRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBhZWY2OWEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvRW51bVdpdGhvdXRDb25zdGFudHNfYWZ0ZXIuamF2YQpAQCAtMCwwICsxIEBACitwdWJsaWMgZW51bSBGb29vb29vIHsgcHJpdmF0ZSBGb29vb29vPGNhcmV0PiB9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL0V4Y2Vzc1NwYWNlSW5UeXBlQ2FzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL0V4Y2Vzc1NwYWNlSW5UeXBlQ2FzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY3MTYxZjIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvRXhjZXNzU3BhY2VJblR5cGVDYXN0LmphdmEKQEAgLTAsMCArMSwxMSBAQAorcHVibGljIGNsYXNzIE1haW4geworICAgIGludGVyZmFjZSBBY2NvdW50IHt9CisKKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisgICAgICAgIGphdmEudXRpbC5MaXN0IGxpc3Q7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGlzdC5zaXplKCk7IGkrKykgeworICAgICAgICAgIE9iamVjdCBvID0gKEFjY288Y2FyZXQ+bGlzdC5nZXQoaSk7CisgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKG8pOworICAgICAgICB9CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9FeGNlc3NTcGFjZUluVHlwZUNhc3RfYWZ0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9FeGNlc3NTcGFjZUluVHlwZUNhc3RfYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYjk1YmM3Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL0V4Y2Vzc1NwYWNlSW5UeXBlQ2FzdF9hZnRlci5qYXZhCkBAIC0wLDAgKzEsMTEgQEAKK3B1YmxpYyBjbGFzcyBNYWluIHsKKyAgICBpbnRlcmZhY2UgQWNjb3VudCB7fQorCisgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworICAgICAgICBqYXZhLnV0aWwuTGlzdCBsaXN0OworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGxpc3Quc2l6ZSgpOyBpKyspIHsKKyAgICAgICAgICBPYmplY3QgbyA9IChBY2NvdW50PGNhcmV0Pmxpc3QuZ2V0KGkpOworICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihvKTsKKyAgICAgICAgfQorICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvRXhjbHVkZUluc3RhbmNlSW5uZXJDbGFzc2VzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvRXhjbHVkZUluc3RhbmNlSW5uZXJDbGFzc2VzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzYxOGNlNgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9FeGNsdWRlSW5zdGFuY2VJbm5lckNsYXNzZXMuamF2YQpAQCAtMCwwICsxLDMgQEAKK3B1YmxpYyBjbGFzcyBNYWluIHsKKyAgSW5uZXI8Y2FyZXQ+Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL0V4Y2x1ZGVTdHJpbmdCdWZmZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9FeGNsdWRlU3RyaW5nQnVmZmVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTNjOWJjMwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9FeGNsdWRlU3RyaW5nQnVmZmVyLmphdmEKQEAgLTAsMCArMSwzIEBACitwdWJsaWMgY2xhc3MgTWFpbiB7CisgIFN0cmluZ0J1ZjxjYXJldD4KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvRXhjbHVkZWRJbnN0YW5jZUlubmVyQ2xhc3NDcmVhdGlvbi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL0V4Y2x1ZGVkSW5zdGFuY2VJbm5lckNsYXNzQ3JlYXRpb24uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMTRiMWY4Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL0V4Y2x1ZGVkSW5zdGFuY2VJbm5lckNsYXNzQ3JlYXRpb24uamF2YQpAQCAtMCwwICsxLDYgQEAKK3B1YmxpYyBjbGFzcyBNYWluIHsKKyAgdm9pZCBmKGZvby5PdXRlciBvdXRlcikgeworICAgIG91dGVyLm5ldyBJbjxjYXJldD54CisgIH0KKyAgCit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL0V4Y2x1ZGVkSW5zdGFuY2VJbm5lckNsYXNzUXVhbGlmaWVkUmVmZXJlbmNlLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvRXhjbHVkZWRJbnN0YW5jZUlubmVyQ2xhc3NRdWFsaWZpZWRSZWZlcmVuY2UuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44M2Y2NDU2Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL0V4Y2x1ZGVkSW5zdGFuY2VJbm5lckNsYXNzUXVhbGlmaWVkUmVmZXJlbmNlLmphdmEKQEAgLTAsMCArMSw1IEBACitwdWJsaWMgY2xhc3MgTWFpbiB7CisgIHZvaWQgZihmb28uT3V0ZXIuSW48Y2FyZXQ+eCBvdXRlcikgeworICB9CisgIAorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9FeHBlY3RlZFR5cGVNZW1iZXJzVmVyc3VzU3RhdGljSW1wb3J0cy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL0V4cGVjdGVkVHlwZU1lbWJlcnNWZXJzdXNTdGF0aWNJbXBvcnRzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWM0MTQ2OQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9FeHBlY3RlZFR5cGVNZW1iZXJzVmVyc3VzU3RhdGljSW1wb3J0cy5qYXZhCkBAIC0wLDAgKzEsMTIgQEAKK2ltcG9ydCBzdGF0aWMgU3VwZXIuWEZPTzsKKworY2xhc3MgU3VwZXIgeworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3VwZXIgWEZPTyA9IG51bGw7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdXBlciBYRk9YID0gdHJ1ZTsKK30KKworY2xhc3MgSW50ZXJtZWRpYXRlIHsKKyAgICBTdXBlciBzID0gWEZPPGNhcmV0PgorfQorCisKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9FeHBlY3RlZFR5cGVzRG90U2VsZWN0c0l0ZW0uamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9FeHBlY3RlZFR5cGVzRG90U2VsZWN0c0l0ZW0uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNTRkNGExCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL0V4cGVjdGVkVHlwZXNEb3RTZWxlY3RzSXRlbS5qYXZhCkBAIC0wLDAgKzEsMTQgQEAKK2NsYXNzIFN1cGVyIHsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN1cGVyIEZPTyA9IG51bGw7Cit9CitjbGFzcyBTdXBlcjIgeworfQorCitjbGFzcyBJbnRlcm1lZGlhdGUgeworICAgIHZvaWQgZm9vKFN1cGVyIHMsIGludCBhKSB7fQorICB2b2lkIGJhcigpIHsKKyAgICBmb28oU3U8Y2FyZXQ+KQorICB9Cit9CisKKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL0V4cGVjdGVkVHlwZXNEb3RTZWxlY3RzSXRlbV9hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL0V4cGVjdGVkVHlwZXNEb3RTZWxlY3RzSXRlbV9hZnRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIyODRiNjkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvRXhwZWN0ZWRUeXBlc0RvdFNlbGVjdHNJdGVtX2FmdGVyLmphdmEKQEAgLTAsMCArMSwxNCBAQAorY2xhc3MgU3VwZXIgeworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3VwZXIgRk9PID0gbnVsbDsKK30KK2NsYXNzIFN1cGVyMiB7Cit9CisKK2NsYXNzIEludGVybWVkaWF0ZSB7CisgICAgdm9pZCBmb28oU3VwZXIgcywgaW50IGEpIHt9CisgIHZvaWQgYmFyKCkgeworICAgIGZvbyhTdXBlci48Y2FyZXQ+KQorICB9Cit9CisKKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL0V4dGVuZHNJblR5cGVQYXJhbXMuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9FeHRlbmRzSW5UeXBlUGFyYW1zLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDc4OTgxMDMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvRXh0ZW5kc0luVHlwZVBhcmFtcy5qYXZhCkBAIC0wLDAgKzEsOCBAQAorY2xhc3MgTGlzdDxUPiB7fQorCitjbGFzcyBGb28geworCisgIExpc3Q8PyBlPGNhcmV0Pj4KKyAgCisKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvRXh0ZW5kc0luVHlwZVBhcmFtc19hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL0V4dGVuZHNJblR5cGVQYXJhbXNfYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OGRjMzkzCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL0V4dGVuZHNJblR5cGVQYXJhbXNfYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDggQEAKK2NsYXNzIExpc3Q8VD4ge30KKworY2xhc3MgRm9vIHsKKworICBMaXN0PD8gZXh0ZW5kcyA8Y2FyZXQ+PgorICAKKworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9GaWVsZEl0ZW1QcmVzZW50YXRpb25HZW5lcmljcy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL0ZpZWxkSXRlbVByZXNlbnRhdGlvbkdlbmVyaWNzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGNlNmM4OAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9GaWVsZEl0ZW1QcmVzZW50YXRpb25HZW5lcmljcy5qYXZhCkBAIC0wLDAgKzEsMTAgQEAKK2NsYXNzIFJlZjxUPiB7CisgIFQgdGFyZ2V0OworfQorCitjbGFzcyBUZXN0UG9pbnQyRCB7CisgICAgdm9pZCAoUmVmPFN0cmluZz4gcikgeworICAgICAgICByLjxjYXJldD4KKworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvRmllbGROZWdhdGlvbi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL0ZpZWxkTmVnYXRpb24uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43Mzc5ZjAxCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL0ZpZWxkTmVnYXRpb24uamF2YQpAQCAtMCwwICsxLDcgQEAKK3B1YmxpYyBjbGFzcyBDb25zdENvbmZpZyB7CisgIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiB0ZXN0TW9kZSA9IGZhbHNlOworICAgIAorICAgIHsKKyAgICAgICAgaWYgKHRlc3Q8Y2FyZXQ+eCkKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL0ZpZWxkTmVnYXRpb25fYWZ0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9GaWVsZE5lZ2F0aW9uX2FmdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzllNGFmMAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9GaWVsZE5lZ2F0aW9uX2FmdGVyLmphdmEKQEAgLTAsMCArMSw3IEBACitwdWJsaWMgY2xhc3MgQ29uc3RDb25maWcgeworICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gdGVzdE1vZGUgPSBmYWxzZTsKKyAgICAKKyAgICB7CisgICAgICAgIGlmICghdGVzdE1vZGU8Y2FyZXQ+eCkKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL0ZpZWxkVHlwZS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL0ZpZWxkVHlwZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEyYWJjMzQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvRmllbGRUeXBlLmphdmEKQEAgLTAsMCArMSw0IEBACitjbGFzcyBBIHsKKyAgICBwcml2YXRlIGxvPGNhcmV0PiBsb2NhbGl6ZWRTdHJpbmdNYW5hZ2VyOworCit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvRmllbGRUeXBlX2FmdGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvRmllbGRUeXBlX2FmdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTcyZTlkYgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9GaWVsZFR5cGVfYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDQgQEAKK2NsYXNzIEEgeworICAgIHByaXZhdGUgbG9uZzxjYXJldD4gbG9jYWxpemVkU3RyaW5nTWFuYWdlcjsKKworfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL0ZpZWxkV2l0aENhc3RpbmdDYXJldC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL0ZpZWxkV2l0aENhc3RpbmdDYXJldC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFmYzRkZmIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvRmllbGRXaXRoQ2FzdGluZ0NhcmV0LmphdmEKQEAgLTAsMCArMSw5IEBACitwdWJsaWMgY2xhc3MgVGVzdENsYXNzIHsKKyAgICBpbnQgYWJjOworCisgICAgcHVibGljIFRlc3RDbGFzcyBjcmVhdGUoT2JqZWN0IG8pIHsKKyAgICAgICAgaWYgKG8gaW5zdGFuY2VvZiBUZXN0Q2xhc3MpIHsKKyAgICAgICAgICAgIG8uYWI8Y2FyZXQ+CisgICAgICAgIH0KKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvRmllbGRXaXRoQ2FzdGluZ0NhcmV0X2FmdGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvRmllbGRXaXRoQ2FzdGluZ0NhcmV0X2FmdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTE5YTEyYQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9GaWVsZFdpdGhDYXN0aW5nQ2FyZXRfYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDkgQEAKK3B1YmxpYyBjbGFzcyBUZXN0Q2xhc3MgeworICAgIGludCBhYmM7CisKKyAgICBwdWJsaWMgVGVzdENsYXNzIGNyZWF0ZShPYmplY3QgbykgeworICAgICAgICBpZiAobyBpbnN0YW5jZW9mIFRlc3RDbGFzcykgeworICAgICAgICAgICAgKChUZXN0Q2xhc3MpIG8pLmFiYzxjYXJldD4KKyAgICAgICAgfQorICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9GaW5hbEJlZm9yZU1ldGhvZENhbGwuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9GaW5hbEJlZm9yZU1ldGhvZENhbGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMjhjM2IyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL0ZpbmFsQmVmb3JlTWV0aG9kQ2FsbC5qYXZhCkBAIC0wLDAgKzEsNSBAQAorY2xhc3MgQSB7CisgICAgQSgpIHsKKyAgICAgICAgZmluPGNhcmV0PnRoaXMudG9TdHJpbmcoKTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL0ZpbmFsSW5Gb3JMb29wLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvRmluYWxJbkZvckxvb3AuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNDcwNWE5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL0ZpbmFsSW5Gb3JMb29wLmphdmEKQEAgLTAsMCArMSw3IEBACitwdWJsaWMgY2xhc3MgRm9vb28geworCisgICAgeworICAgICAgICBmb3IgKGZpbjxjYXJldD54KQorICAgIH0KKworfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL0ZpbmFsSW5Gb3JMb29wMi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL0ZpbmFsSW5Gb3JMb29wMi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQxYWVmZDEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvRmluYWxJbkZvckxvb3AyLmphdmEKQEAgLTAsMCArMSw5IEBACitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKKworcHVibGljIGNsYXNzIEZvb29vIHsKKworICAgIHsKKyAgICAgICAgZm9yIChmaW48Y2FyZXQ+IE9iamVjdCBvIDogbmV3IEFycmF5TGlzdCgpKQorICAgIH0KKworfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL0ZpbmlzaENsYXNzTmFtZVdpdGhEb3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9GaW5pc2hDbGFzc05hbWVXaXRoRG90LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjlkMmUzNAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9GaW5pc2hDbGFzc05hbWVXaXRoRG90LmphdmEKQEAgLTAsMCArMSw3IEBACitwdWJsaWMgY2xhc3MgTXlGaXJzdFRlc3RDbGFzc0ZvbyB7CisKKyAgICB7CisgICAgICAgIE1GVDxjYXJldD54CisgICAgfQorCit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL0ZpbmlzaENsYXNzTmFtZVdpdGhEb3RfYWZ0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9GaW5pc2hDbGFzc05hbWVXaXRoRG90X2FmdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmFmYWY3NQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9GaW5pc2hDbGFzc05hbWVXaXRoRG90X2FmdGVyLmphdmEKQEAgLTAsMCArMSw3IEBACitwdWJsaWMgY2xhc3MgTXlGaXJzdFRlc3RDbGFzc0ZvbyB7CisKKyAgICB7CisgICAgICAgIE15Rmlyc3RUZXN0Q2xhc3NGb28uPGNhcmV0PngKKyAgICB9CisKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvRmluaXNoQ2xhc3NOYW1lV2l0aExQYXJlbi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL0ZpbmlzaENsYXNzTmFtZVdpdGhMUGFyZW4uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNjdmNzgyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL0ZpbmlzaENsYXNzTmFtZVdpdGhMUGFyZW4uamF2YQpAQCAtMCwwICsxLDMgQEAKK3B1YmxpYyBjbGFzcyBGb28geworICBTdHJpbmcgcyA9IG5ldyBTdHJpbjxjYXJldD4KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvRmluaXNoQ2xhc3NOYW1lV2l0aExQYXJlbl9hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL0ZpbmlzaENsYXNzTmFtZVdpdGhMUGFyZW5fYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MTU5OTYwCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL0ZpbmlzaENsYXNzTmFtZVdpdGhMUGFyZW5fYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDMgQEAKK3B1YmxpYyBjbGFzcyBGb28geworICBTdHJpbmcgcyA9IG5ldyBTdHJpbmcoPGNhcmV0PikKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvRmluaXNoV2l0aERvdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL0ZpbmlzaFdpdGhEb3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jODE2OWMyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL0ZpbmlzaFdpdGhEb3QuamF2YQpAQCAtMCwwICsxLDcgQEAKK2NsYXNzIEZvbyB7CisgICAgaW50IGZvbygpOworCisgICAgeworICAgICAgZm88Y2FyZXQ+CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL0ZpbmlzaFdpdGhEb3RfYWZ0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9GaW5pc2hXaXRoRG90X2FmdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTgwMmRjZAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9GaW5pc2hXaXRoRG90X2FmdGVyLmphdmEKQEAgLTAsMCArMSw3IEBACitjbGFzcyBGb28geworICAgIGludCBmb28oKTsKKworICAgIHsKKyAgICAgIGZvbygpLjxjYXJldD4KKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvR2V0dGVyV2l0aEV4aXN0aW5nTm9uRW1wdHlQYXJhbWV0ZXJMaXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvR2V0dGVyV2l0aEV4aXN0aW5nTm9uRW1wdHlQYXJhbWV0ZXJMaXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjY1ZTFjMwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9HZXR0ZXJXaXRoRXhpc3RpbmdOb25FbXB0eVBhcmFtZXRlckxpc3QuamF2YQpAQCAtMCwwICsxLDcgQEAKK3B1YmxpYyBjbGFzcyBNeUZpcnN0VGVzdENsYXNzRm9vIHsKKworICAgIHsKKyAgICAgICAgZ2V0Q2w8Y2FyZXQ+KGFiYykKKyAgICB9CisKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvR2V0dGVyV2l0aEV4aXN0aW5nTm9uRW1wdHlQYXJhbWV0ZXJMaXN0X2FmdGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvR2V0dGVyV2l0aEV4aXN0aW5nTm9uRW1wdHlQYXJhbWV0ZXJMaXN0X2FmdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmE2N2IwYgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9HZXR0ZXJXaXRoRXhpc3RpbmdOb25FbXB0eVBhcmFtZXRlckxpc3RfYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDcgQEAKK3B1YmxpYyBjbGFzcyBNeUZpcnN0VGVzdENsYXNzRm9vIHsKKworICAgIHsKKyAgICAgICAgZ2V0Q2xhc3M8Y2FyZXQ+KGFiYykKKyAgICB9CisKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvSG9ub3JVbmRlcnNjb3JlSW5QcmVmaXguamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9Ib25vclVuZGVyc2NvcmVJblByZWZpeC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdlNzNmMjEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvSG9ub3JVbmRlcnNjb3JlSW5QcmVmaXguamF2YQpAQCAtMCwwICsxLDEwIEBACitwdWJsaWMgY2xhc3MgUXVldHphbGNvYXRsIHsKKyAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRk9PX0JBUjsKKyAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRk9PX0NIQVI7Cit9CisKK3B1YmxpYyBjbGFzcyBCZWRhIHsKKyAgICB7CisgICAgICBRdWV0emFsY29hdGwuRl9CPGNhcmV0PgorICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9Ib25vclVuZGVyc2NvcmVJblByZWZpeF9hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL0hvbm9yVW5kZXJzY29yZUluUHJlZml4X2FmdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODdiNjlmMQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9Ib25vclVuZGVyc2NvcmVJblByZWZpeF9hZnRlci5qYXZhCkBAIC0wLDAgKzEsMTAgQEAKK3B1YmxpYyBjbGFzcyBRdWV0emFsY29hdGwgeworICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBGT09fQkFSOworICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBGT09fQ0hBUjsKK30KKworcHVibGljIGNsYXNzIEJlZGEgeworICAgIHsKKyAgICAgIFF1ZXR6YWxjb2F0bC5GT09fQkFSPGNhcmV0PgorICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9JREVBREVWNjQwOC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL0lERUFERVY2NDA4LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGNiMDU3ZQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9JREVBREVWNjQwOC5qYXZhCkBAIC0wLDAgKzEsOCBAQAorY2xhc3MgRG91YmxlVHlwZUNvbXBsZXRpb24geworCisgICAgcHJpdmF0ZSBmaW5hbCBiPGNhcmV0PgorCisgICAgRG91YmxlVHlwZUNvbXBsZXRpb24oYm9vbGVhbiByZXN1bHQpIHsKKworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvSW1wb3J0SW5HZW5lcmljVHlwZS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL0ltcG9ydEluR2VuZXJpY1R5cGUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wN2MyYTRiCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL0ltcG9ydEluR2VuZXJpY1R5cGUuamF2YQpAQCAtMCwwICsxLDUgQEAKK3B1YmxpYyBjbGFzcyBGb28geworICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKyAgICAgICAgU2V0PGNhcmV0PjxJbnRlZ2VyPgorICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9JbXBvcnRJbkdlbmVyaWNUeXBlX2FmdGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvSW1wb3J0SW5HZW5lcmljVHlwZV9hZnRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMzMDNhNjcKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvSW1wb3J0SW5HZW5lcmljVHlwZV9hZnRlci5qYXZhCkBAIC0wLDAgKzEsNyBAQAoraW1wb3J0IGphdmEudXRpbC5TZXQ7CisKK3B1YmxpYyBjbGFzcyBGb28geworICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKyAgICAgICAgU2V0PGNhcmV0PjxJbnRlZ2VyPgorICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9JbXBvcnRTdHJpbmdWYWx1ZS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL0ltcG9ydFN0cmluZ1ZhbHVlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWMzMjc5OAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9JbXBvcnRTdHJpbmdWYWx1ZS5qYXZhCkBAIC0wLDAgKzEsNSBAQAorcHVibGljIGNsYXNzIEJhciB7CisgICAgeworICAgICAgICBTdHJpbmdWYWx1PGNhcmV0PgorICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvSW1wb3J0U3RyaW5nVmFsdWVfYWZ0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9JbXBvcnRTdHJpbmdWYWx1ZV9hZnRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZmODIwNzIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvSW1wb3J0U3RyaW5nVmFsdWVfYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDcgQEAKK2ltcG9ydCBmb28uKjsKKworcHVibGljIGNsYXNzIEJhciB7CisgICAgeworICAgICAgICBTdHJpbmdWYWx1ZSA8Y2FyZXQ+CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9JblRocm93c0NvbXBsZXRpb24uamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9JblRocm93c0NvbXBsZXRpb24uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MWFjMjA3Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL0luVGhyb3dzQ29tcGxldGlvbi5qYXZhCkBAIC0wLDAgKzEsNSBAQAorY2xhc3MgQXsKKyBwdWJsaWMgY2xhc3MgQnt9CisgcHVibGljIGNsYXNzIEMgZXh0ZW5kcyBFeGNlcHRpb257fQorIHB1YmxpYyBpbnQgbWV0aG9kKCkgdGhyb3dzIDxjYXJldD4KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9JbmNOdWxsLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvSW5jTnVsbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJjNWQwYzIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvSW5jTnVsbC5qYXZhCkBAIC0wLDAgKzEsNSBAQAorY2xhc3MgRm9vIHsKKyAgICB7CisgICAgICAgICsrbnVsPGNhcmV0PgorICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvSW5uZXJDaGFpbmVkUmV0dXJuVHlwZS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL0lubmVyQ2hhaW5lZFJldHVyblR5cGUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYzA5YWNjCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL0lubmVyQ2hhaW5lZFJldHVyblR5cGUuamF2YQpAQCAtMCwwICsxLDkgQEAKK3B1YmxpYyBjbGFzcyBCYXIzIHsKKworICBwcm90ZWN0ZWQgYWJzdHJhY3QgUmVzcG9uc2UuU3RhdDxjYXJldD4KK30KK2NsYXNzIEdvbyB7CisgIHB1YmxpYyBzdGF0aWMgY2xhc3MgUmVzcG9uc2UgeworICAgIHB1YmxpYyBlbnVtIFN0YXR1cyB7fQorICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvSW5uZXJDaGFpbmVkUmV0dXJuVHlwZUluQW5vbnltb3VzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvSW5uZXJDaGFpbmVkUmV0dXJuVHlwZUluQW5vbnltb3VzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTJjYmEwZgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9Jbm5lckNoYWluZWRSZXR1cm5UeXBlSW5Bbm9ueW1vdXMuamF2YQpAQCAtMCwwICsxLDEyIEBACitwdWJsaWMgY2xhc3MgQmFyMyB7CisgIHsKKyAgICBuZXcgUnVubmFibGUoKSB7CisgICAgICBwcm90ZWN0ZWQgYWJzdHJhY3QgUmVzcG9uc2UuU3RhdHU8Y2FyZXQ+CisgICAgfQorICB9Cit9CitjbGFzcyBHb28geworICBwdWJsaWMgc3RhdGljIGNsYXNzIFJlc3BvbnNlIHsKKyAgICBwdWJsaWMgZW51bSBTdGF0dXMge30KKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL0lubmVyQ2hhaW5lZFJldHVyblR5cGVJbkFub255bW91c19hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL0lubmVyQ2hhaW5lZFJldHVyblR5cGVJbkFub255bW91c19hZnRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAzYzI1MDNmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL0lubmVyQ2hhaW5lZFJldHVyblR5cGVJbkFub255bW91c19hZnRlci5qYXZhCkBAIC0wLDAgKzEsMTIgQEAKK3B1YmxpYyBjbGFzcyBCYXIzIHsKKyAgeworICAgIG5ldyBSdW5uYWJsZSgpIHsKKyAgICAgIHByb3RlY3RlZCBhYnN0cmFjdCBHb28uUmVzcG9uc2UuU3RhdHVzPGNhcmV0PgorICAgIH0KKyAgfQorfQorY2xhc3MgR29vIHsKKyAgcHVibGljIHN0YXRpYyBjbGFzcyBSZXNwb25zZSB7CisgICAgcHVibGljIGVudW0gU3RhdHVzIHt9CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9Jbm5lckNoYWluZWRSZXR1cm5UeXBlX2FmdGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvSW5uZXJDaGFpbmVkUmV0dXJuVHlwZV9hZnRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjliMzM5MDgKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvSW5uZXJDaGFpbmVkUmV0dXJuVHlwZV9hZnRlci5qYXZhCkBAIC0wLDAgKzEsOSBAQAorcHVibGljIGNsYXNzIEJhcjMgeworCisgIHByb3RlY3RlZCBhYnN0cmFjdCBHb28uUmVzcG9uc2UuU3RhdHVzPGNhcmV0PgorfQorY2xhc3MgR29vIHsKKyAgcHVibGljIHN0YXRpYyBjbGFzcyBSZXNwb25zZSB7CisgICAgcHVibGljIGVudW0gU3RhdHVzIHt9CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9Jbm5lckVudW1Db25zdGFudC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL0lubmVyRW51bUNvbnN0YW50LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGI1NTdjMgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9Jbm5lckVudW1Db25zdGFudC5qYXZhCkBAIC0wLDAgKzEsOSBAQAorY2xhc3MgRm9vIHsKKyAgICB7CisgICAgICAgIEJhciBiID0gRk9PT088Y2FyZXQ+CisgICAgfQorCisgICAgZW51bSBCYXIgeworICAgICAgICBGT09PT09PTworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvSW5uZXJFbnVtQ29uc3RhbnRfYWZ0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9Jbm5lckVudW1Db25zdGFudF9hZnRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk0YjU3OGYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvSW5uZXJFbnVtQ29uc3RhbnRfYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDkgQEAKK2NsYXNzIEZvbyB7CisgICAgeworICAgICAgICBCYXIgYiA9IEJhci5GT09PT09PTzxjYXJldD4KKyAgICB9CisKKyAgICBlbnVtIEJhciB7CisgICAgICAgIEZPT09PT09PCisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9JbnN0YW5jZU1hZ2ljTWV0aG9kLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvSW5zdGFuY2VNYWdpY01ldGhvZC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBmMjg4MGMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvSW5zdGFuY2VNYWdpY01ldGhvZC5qYXZhCkBAIC0wLDAgKzEsNyBAQAorcHVibGljIGNsYXNzIEphdmFDbGFzcyB7CisgIDxUPiBUIG1hZ2ljKCkge30KKworICB2b2lkIGZvbygpIHsKKyAgICBtYWc8Y2FyZXQ+CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9JbnN0YW5jZU1hZ2ljTWV0aG9kX2FmdGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvSW5zdGFuY2VNYWdpY01ldGhvZF9hZnRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRlYmM1OWEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvSW5zdGFuY2VNYWdpY01ldGhvZF9hZnRlci5qYXZhCkBAIC0wLDAgKzEsNyBAQAorcHVibGljIGNsYXNzIEphdmFDbGFzcyB7CisgIDxUPiBUIG1hZ2ljKCkge30KKworICB2b2lkIGZvbygpIHsKKyAgICBtYWdpYygpPGNhcmV0PgorICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvSW50ZXJmYWNlSW1wbGVtZW50YXRpb25Ob0Nhc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9JbnRlcmZhY2VJbXBsZW1lbnRhdGlvbk5vQ2FzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVmMzQyNjkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvSW50ZXJmYWNlSW1wbGVtZW50YXRpb25Ob0Nhc3QuamF2YQpAQCAtMCwwICsxLDE4IEBACitwdWJsaWMgY2xhc3MgVXRpbDIgeworICB2b2lkIGZvbyhYbWxBdHRyaWJ1dGUgbyApIHsKKyAgICBpZiAobyBpbnN0YW5jZW9mIFhtbEF0dHJpYnV0ZUltcGwpIHsKKyAgICAgIG8uZ2V0cGFyPGNhcmV0PgorICAgIH0KKyAgfQorfQorCitpbnRlcmZhY2UgUHNpRWxlbWVudCB7CisgIFBzaUVsZW1lbnQgZ2V0UGFyZW50KCk7Cit9CitpbnRlcmZhY2UgWG1sQXR0cmlidXRlIGV4dGVuZHMgUHNpRWxlbWVudCB7fQorY2xhc3MgWG1sQXR0cmlidXRlSW1wbCBpbXBsZW1lbnRzIFhtbEF0dHJpYnV0ZSB7CisgIEBPdmVycmlkZQorICBwdWJsaWMgUHNpRWxlbWVudCBnZXRQYXJlbnQoKSB7CisgICAgcmV0dXJuIG51bGw7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvSW50ZXJmYWNlSW1wbGVtZW50YXRpb25Ob0Nhc3RfYWZ0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9JbnRlcmZhY2VJbXBsZW1lbnRhdGlvbk5vQ2FzdF9hZnRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk0NzE4ZWUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvSW50ZXJmYWNlSW1wbGVtZW50YXRpb25Ob0Nhc3RfYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDE4IEBACitwdWJsaWMgY2xhc3MgVXRpbDIgeworICB2b2lkIGZvbyhYbWxBdHRyaWJ1dGUgbyApIHsKKyAgICBpZiAobyBpbnN0YW5jZW9mIFhtbEF0dHJpYnV0ZUltcGwpIHsKKyAgICAgIG8uZ2V0UGFyZW50KCk8Y2FyZXQ+CisgICAgfQorICB9Cit9CisKK2ludGVyZmFjZSBQc2lFbGVtZW50IHsKKyAgUHNpRWxlbWVudCBnZXRQYXJlbnQoKTsKK30KK2ludGVyZmFjZSBYbWxBdHRyaWJ1dGUgZXh0ZW5kcyBQc2lFbGVtZW50IHt9CitjbGFzcyBYbWxBdHRyaWJ1dGVJbXBsIGltcGxlbWVudHMgWG1sQXR0cmlidXRlIHsKKyAgQE92ZXJyaWRlCisgIHB1YmxpYyBQc2lFbGVtZW50IGdldFBhcmVudCgpIHsKKyAgICByZXR1cm4gbnVsbDsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9JbnRlcnNlY3Rpb25UeXBlTWVtYmVycy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL0ludGVyc2VjdGlvblR5cGVNZW1iZXJzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2E3N2MyZAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9JbnRlcnNlY3Rpb25UeXBlTWVtYmVycy5qYXZhCkBAIC0wLDAgKzEsMTggQEAKK2ludGVyZmFjZSBJQXsKKyAgICB2b2lkIGZvb2EoKTsKK30KKworaW50ZXJmYWNlIElCeworICAgIHZvaWQgZm9vYigpOworfQorCitpbnRlcmZhY2UgSUM8VCBleHRlbmRzIElBPnsKKyAgICBUIGMoKTsKK30KKworY2xhc3MgSyB7CisgICAgdm9pZCBmb28oSUM8PyBleHRlbmRzIElCPiB4KXsKKyAgICAgICAgeC5jKCkuZm88Y2FyZXQ+CisKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL0tleXdvcmRTbWFydEVudGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvS2V5d29yZFNtYXJ0RW50ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MmQwZWIyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL0tleXdvcmRTbWFydEVudGVyLmphdmEKQEAgLTAsMCArMSw2IEBACitwdWJsaWMgY2xhc3MgQmFyIHsKKyAgICB7CisgICAgICAgIFN0cmluZyBudWxsaXR5ID0gIiI7CisgICAgICAgIGlmICh0aGlzICE9IG51bDxjYXJldD4pCisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9LZXl3b3JkU21hcnRFbnRlcl9hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL0tleXdvcmRTbWFydEVudGVyX2FmdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzAxMzM1YwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9LZXl3b3JkU21hcnRFbnRlcl9hZnRlci5qYXZhCkBAIC0wLDAgKzEsOCBAQAorcHVibGljIGNsYXNzIEJhciB7CisgICAgeworICAgICAgICBTdHJpbmcgbnVsbGl0eSA9ICIiOworICAgICAgICBpZiAodGhpcyAhPSBudWxsKSB7CisgICAgICAgICAgICA8Y2FyZXQ+CisgICAgICAgIH0KKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL0tleXdvcmRzSW5OYW1lLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvS2V5d29yZHNJbk5hbWUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wODQxODU0OAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9LZXl3b3Jkc0luTmFtZS5qYXZhCkBAIC0wLDAgKzEsNCBAQAorY2xhc3MgQXsKKyAgICBBIG51bGxBID0gbmV3IEEoKTsKKyAgICBBIHggPSBudWxsPGNhcmV0PgorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9LZXl3b3Jkc0luTmFtZV9hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL0tleXdvcmRzSW5OYW1lX2FmdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWZkNjMwYwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9LZXl3b3Jkc0luTmFtZV9hZnRlci5qYXZhCkBAIC0wLDAgKzEsNCBAQAorY2xhc3MgQXsKKyAgICBBIG51bGxBID0gbmV3IEEoKTsKKyAgICBBIHggPSBudWxsQTxjYXJldD4KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvTGFzdEV4cHJlc3Npb25JbkZvci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL0xhc3RFeHByZXNzaW9uSW5Gb3IuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NDk1YWM2MgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9MYXN0RXhwcmVzc2lvbkluRm9yLmphdmEKQEAgLTAsMCArMSw4IEBACitwdWJsaWMgY2xhc3MgTWFpbiB7CisgIE1haW4gZ2V0UGFyZW50KCkge30KKworICB7CisgICAgTWFpbiB2OworICAgIGZvciAoOzt2LmdldFBhPGNhcmV0PikKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9MYXN0RXhwcmVzc2lvbkluRm9yX2FmdGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvTGFzdEV4cHJlc3Npb25JbkZvcl9hZnRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEyZmJmODAKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvTGFzdEV4cHJlc3Npb25JbkZvcl9hZnRlci5qYXZhCkBAIC0wLDAgKzEsOCBAQAorcHVibGljIGNsYXNzIE1haW4geworICBNYWluIGdldFBhcmVudCgpIHt9CisKKyAgeworICAgIE1haW4gdjsKKyAgICBmb3IgKDs7di5nZXRQYXJlbnQoKTxjYXJldD4pCisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvTGlzdEFycmF5TGlzdENhc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9MaXN0QXJyYXlMaXN0Q2FzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ1NTljZjAKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvTGlzdEFycmF5TGlzdENhc3QuamF2YQpAQCAtMCwwICsxLDEwIEBACitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKKworcHVibGljIGNsYXNzIEEgeworICB2b2lkIGZvbyhMaXN0PFN0cmluZz4gbCkgeworICAgIGlmIChsIGluc3RhbmNlb2YgQXJyYXlMaXN0KSB7CisgICAgICBsLmdlPGNhcmV0PgorICAgIH0KKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL0xpc3RBcnJheUxpc3RDYXN0X2FmdGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvTGlzdEFycmF5TGlzdENhc3RfYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YzRkNWE3Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL0xpc3RBcnJheUxpc3RDYXN0X2FmdGVyLmphdmEKQEAgLTAsMCArMSwxMCBAQAoraW1wb3J0IGphdmEudXRpbC5MaXN0OworaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CisKK3B1YmxpYyBjbGFzcyBBIHsKKyAgdm9pZCBmb28oTGlzdDxTdHJpbmc+IGwpIHsKKyAgICBpZiAobCBpbnN0YW5jZW9mIEFycmF5TGlzdCkgeworICAgICAgbC5nZXQoPGNhcmV0PikKKyAgICB9CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9MaXZlVGVtcGxhdGVQcmVmaXhUYWIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9MaXZlVGVtcGxhdGVQcmVmaXhUYWIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZTc4OGU3Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL0xpdmVUZW1wbGF0ZVByZWZpeFRhYi5qYXZhCkBAIC0wLDAgKzEsNyBAQAorY2xhc3MgWHh4IHsKKyAgeworICAgIGludCBpdGVyYWFhOworICAgIGludCBpdGVyYmJiOworICAgIGl0ZXI8Y2FyZXQ+CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvTGl2ZVRlbXBsYXRlUHJlZml4VGFiX2FmdGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvTGl2ZVRlbXBsYXRlUHJlZml4VGFiX2FmdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmUxZDcwNAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9MaXZlVGVtcGxhdGVQcmVmaXhUYWJfYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDcgQEAKK2NsYXNzIFh4eCB7CisgIHsKKyAgICBpbnQgaXRlcmFhYTsKKyAgICBpbnQgaXRlcmJiYjsKKyAgICBpdGVyYWFhPGNhcmV0PgorICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL0xvY2FsQ2xhc3NOYW1lLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvTG9jYWxDbGFzc05hbWUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMmEzODg2Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL0xvY2FsQ2xhc3NOYW1lLmphdmEKQEAgLTAsMCArMSw2IEBACitwdWJsaWMgY2xhc3MgRm9vTWFwPEssViBleHRlbmRzIEs+IGltcGxlbWVudHMgWW91ck1hcEludGVyZmFjZTxLLCBWPiB7CisgIHZvaWQgZm9vKCkgeworICAgIGNsYXNzIFpvb29vb29vbyB7fQorICAgIFpvbzxjYXJldD4KKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9Mb2NhbENsYXNzTmFtZV9hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL0xvY2FsQ2xhc3NOYW1lX2FmdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODJiMmQyZQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9Mb2NhbENsYXNzTmFtZV9hZnRlci5qYXZhCkBAIC0wLDAgKzEsNiBAQAorcHVibGljIGNsYXNzIEZvb01hcDxLLFYgZXh0ZW5kcyBLPiBpbXBsZW1lbnRzIFlvdXJNYXBJbnRlcmZhY2U8SywgVj4geworICB2b2lkIGZvbygpIHsKKyAgICBjbGFzcyBab29vb29vb28ge30KKyAgICBab29vb29vb288Y2FyZXQ+CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvTG9jYWxDbGFzc1R3aWNlLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvTG9jYWxDbGFzc1R3aWNlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzM5NmMyOAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9Mb2NhbENsYXNzVHdpY2UuamF2YQpAQCAtMCwwICsxLDcgQEAKK2NsYXNzIFpvb29vbyB7fQorcHVibGljIGNsYXNzIEZvb01hcDxLLFYgZXh0ZW5kcyBLPiBpbXBsZW1lbnRzIFlvdXJNYXBJbnRlcmZhY2U8SywgVj4geworICB2b2lkIGZvbygpIHsKKyAgICBjbGFzcyBab29veiBpbXBsZW1lbnRzIFJ1bm5hYmxlIHt9CisgICAgUnVubmFibGUgciA9IG5ldyBabzxjYXJldD4KKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9Mb2NhbFRvcExldmVsQ29uZmxpY3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9Mb2NhbFRvcExldmVsQ29uZmxpY3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYWE0N2MxCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL0xvY2FsVG9wTGV2ZWxDb25mbGljdC5qYXZhCkBAIC0wLDAgKzEsOCBAQAorY2xhc3MgWm9vb3oge30KK2NsYXNzIFpvb29vbyB7fQorcHVibGljIGNsYXNzIEZvb01hcDxLLFYgZXh0ZW5kcyBLPiBpbXBsZW1lbnRzIFlvdXJNYXBJbnRlcmZhY2U8SywgVj4geworICB2b2lkIGZvbygpIHsKKyAgICBjbGFzcyBab29veiBpbXBsZW1lbnRzIFJ1bm5hYmxlIHt9CisgICAgUnVubmFibGUgciA9IG5ldyBabzxjYXJldD4KKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9NYXBzSW52YWxpZGF0aW9uLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvTWFwc0ludmFsaWRhdGlvbi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI5NzgxNzEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvTWFwc0ludmFsaWRhdGlvbi5qYXZhCkBAIC0wLDAgKzEsMTIgQEAKK2NsYXNzIEZvbyBleHRlbmRzIFN1cGVyIHsKKyAgaW50IGFhYTsKKyAgaW50IGJiYjsKKworICAgIHB1YmxpYyBpbnQgZzxjYXJldD5vbygpIHsKKyAgICB9Cit9CisKK2NsYXNzIFN1cGVyIHsKKyAgICBwdWJsaWMgaW50IGdvbygpIHsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL01lbWJlcnNJblN0YXRpY0ltcG9ydHMuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9NZW1iZXJzSW5TdGF0aWNJbXBvcnRzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjZlYTQ5NwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9NZW1iZXJzSW5TdGF0aWNJbXBvcnRzLmphdmEKQEAgLTAsMCArMSwyIEBACitpbXBvcnQgc3RhdGljIGphdmEudXRpbC5Db2xsZWN0aW9ucy5lbXB0eVNlPGNhcmV0PgorY2xhc3MgQSB7fQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9NZW1iZXJzSW5TdGF0aWNJbXBvcnRzX2FmdGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvTWVtYmVyc0luU3RhdGljSW1wb3J0c19hZnRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY1ZmNiZWEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvTWVtYmVyc0luU3RhdGljSW1wb3J0c19hZnRlci5qYXZhCkBAIC0wLDAgKzEsMiBAQAoraW1wb3J0IHN0YXRpYyBqYXZhLnV0aWwuQ29sbGVjdGlvbnMuZW1wdHlTZXQ8Y2FyZXQ+CitjbGFzcyBBIHt9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL01ldGhvZENvbG9uLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvTWV0aG9kQ29sb24uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44Nzk5MDc0Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL01ldGhvZENvbG9uLmphdmEKQEAgLTAsMCArMSw4IEBACitjbGFzcyBCYXIgeworICBpbnQgem9vb2EoKSB7fQorICBpbnQgem9vb2IoKSB7fQorCisgIGludCBmb28oKSB7CisgICAgcmV0dXJuIHRydWUgPyB6b288Y2FyZXQ+CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9NZXRob2RDb2xvbl9hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL01ldGhvZENvbG9uX2FmdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTVjMTMzNAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9NZXRob2RDb2xvbl9hZnRlci5qYXZhCkBAIC0wLDAgKzEsOCBAQAorY2xhc3MgQmFyIHsKKyAgaW50IHpvb29hKCkge30KKyAgaW50IHpvb29iKCkge30KKworICBpbnQgZm9vKCkgeworICAgIHJldHVybiB0cnVlID8gem9vb2EoKSA6IDxjYXJldD4KKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL01ldGhvZEl0ZW1QcmVzZW50YXRpb24uamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9NZXRob2RJdGVtUHJlc2VudGF0aW9uLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTE4YThmYQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9NZXRob2RJdGVtUHJlc2VudGF0aW9uLmphdmEKQEAgLTAsMCArMSw1IEBACitjbGFzcyBGb28geworICB7CisgICAgIiIuZXF1YWxzPGNhcmV0PgorICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvTWV0aG9kSXRlbVByZXNlbnRhdGlvbkdlbmVyaWNzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvTWV0aG9kSXRlbVByZXNlbnRhdGlvbkdlbmVyaWNzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDEyNDJhNQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9NZXRob2RJdGVtUHJlc2VudGF0aW9uR2VuZXJpY3MuamF2YQpAQCAtMCwwICsxLDggQEAKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworCitjbGFzcyBUZXN0UG9pbnQyRCB7CisgICAgeworICAgICAgICBuZXcgQXJyYXlMaXN0PFN0cmluZz4oKS5hZDxjYXJldD4KKworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvTWV0aG9kTG9va3VwLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvTWV0aG9kTG9va3VwLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2M5NmNhYgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9NZXRob2RMb29rdXAuamF2YQpAQCAtMCwwICsxLDE3IEBACitjbGFzcyBCIHsKKyAgICB2b2lkIHNldEEoaW50IGkpIHt9CisgICAgdm9pZCBzZXRCKGludCBpKSB7fQorICB9CisKKyAgY2xhc3MgQyB7CisgICAgQiBiOworICB9CisKKyAgY2xhc3MgQSB7CisKKyAgQyBjOworCisgIEEoKSB7CisgICAgYy5iLnNldDxjYXJldD5BKCk7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvTWV0aG9kTG9va3VwMi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL01ldGhvZExvb2t1cDIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYjBiZjIzCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL01ldGhvZExvb2t1cDIuamF2YQpAQCAtMCwwICsxLDcgQEAKK2NsYXNzIEEgeworICBpbnQgZ2V0QUFBKGludCBwYXJhbSkgeyByZXR1cm4gMDsgfQorICBwdWJsaWMgdm9pZCBhY3Rpb25QZXJmb3JtZWQoQSBhKSB7CisgICAgYS5nZXRBQTxjYXJldD4KKyAgICAoKEEpYSkuYWN0aW9uUGVyZm9ybWVkKHRoaXMpOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL01ldGhvZExvb2t1cDJfQWZ0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9NZXRob2RMb29rdXAyX0FmdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODFjMjZhNwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9NZXRob2RMb29rdXAyX0FmdGVyLmphdmEKQEAgLTAsMCArMSw3IEBACitjbGFzcyBBIHsKKyAgaW50IGdldEFBQShpbnQgcGFyYW0pIHsgcmV0dXJuIDA7IH0KKyAgcHVibGljIHZvaWQgYWN0aW9uUGVyZm9ybWVkKEEgYSkgeworICAgIGEuZ2V0QUFBKDxjYXJldD4pCisgICAgKChBKWEpLmFjdGlvblBlcmZvcm1lZCh0aGlzKTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9NZXRob2RMb29rdXAyX0FmdGVyMi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL01ldGhvZExvb2t1cDJfQWZ0ZXIyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDEyMzM5OQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9NZXRob2RMb29rdXAyX0FmdGVyMi5qYXZhCkBAIC0wLDAgKzEsNyBAQAorY2xhc3MgQSB7CisgIGludCBnZXRBQUEoaW50IHBhcmFtKSB7IHJldHVybiAwOyB9CisgIHB1YmxpYyB2b2lkIGFjdGlvblBlcmZvcm1lZChBIGEpIHsKKyAgICBhLmdldEFBQQorICAgICg8Y2FyZXQ+KEEpYSkuYWN0aW9uUGVyZm9ybWVkKHRoaXMpOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL01ldGhvZExvb2t1cDMuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9NZXRob2RMb29rdXAzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGVlODI3OAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9NZXRob2RMb29rdXAzLmphdmEKQEAgLTAsMCArMSw2IEBACitjbGFzcyBBIHsKKyAgdm9pZCBnZXRBQUEoaW50IHBhcmFtKSB7IHJldHVybiAwOyB9CisgIHB1YmxpYyB2b2lkIGFjdGlvblBlcmZvcm1lZChBIGEpIHsKKyAgICBhLmdldEFBPGNhcmV0Pnp6eigyMzkpOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL01ldGhvZExvb2t1cDNfQWZ0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9NZXRob2RMb29rdXAzX0FmdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTFkNzZiNQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9NZXRob2RMb29rdXAzX0FmdGVyLmphdmEKQEAgLTAsMCArMSw2IEBACitjbGFzcyBBIHsKKyAgdm9pZCBnZXRBQUEoaW50IHBhcmFtKSB7IHJldHVybiAwOyB9CisgIHB1YmxpYyB2b2lkIGFjdGlvblBlcmZvcm1lZChBIGEpIHsKKyAgICBhLmdldEFBQSg8Y2FyZXQ+MjM5KTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9NZXRob2ROb1BhaXJCcmFjZS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL01ldGhvZE5vUGFpckJyYWNlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDQwM2JmMgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9NZXRob2ROb1BhaXJCcmFjZS5qYXZhCkBAIC0wLDAgKzEsOCBAQAorY2xhc3MgTXlDbGFzcyB7CisKK3ZvaWQgZm9vKCkge30KKworeworICBmbzxjYXJldD4KK30KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvTWV0aG9kTm9QYWlyQnJhY2VfYWZ0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9NZXRob2ROb1BhaXJCcmFjZV9hZnRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM5NzZkOTIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvTWV0aG9kTm9QYWlyQnJhY2VfYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDggQEAKK2NsYXNzIE15Q2xhc3MgeworCit2b2lkIGZvbygpIHt9CisKK3sKKyAgZm9vKDxjYXJldD4KK30KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvTWV0aG9kUGFyYW1ldGVyQW5ub3RhdGlvbkNsYXNzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvTWV0aG9kUGFyYW1ldGVyQW5ub3RhdGlvbkNsYXNzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjE4MGM2MgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9NZXRob2RQYXJhbWV0ZXJBbm5vdGF0aW9uQ2xhc3MuamF2YQpAQCAtMCwwICsxLDMgQEAKK3B1YmxpYyBjbGFzcyBGb28geworICBPYmplY3QgZm9vKEBEZXByZWNhdGVkKEZvby5jPGNhcmV0PikpeyB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvTWV0aG9kUGFyYW1ldGVyQW5ub3RhdGlvbkNsYXNzX2FmdGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvTWV0aG9kUGFyYW1ldGVyQW5ub3RhdGlvbkNsYXNzX2FmdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjI1NGEwOAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9NZXRob2RQYXJhbWV0ZXJBbm5vdGF0aW9uQ2xhc3NfYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDMgQEAKK3B1YmxpYyBjbGFzcyBGb28geworICBPYmplY3QgZm9vKEBEZXByZWNhdGVkKEZvby5jbGFzczxjYXJldD4pKXsgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL01ldGhvZFBhcmFtZXRlclR5cGVEb3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9NZXRob2RQYXJhbWV0ZXJUeXBlRG90LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2FlNzkxYwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9NZXRob2RQYXJhbWV0ZXJUeXBlRG90LmphdmEKQEAgLTAsMCArMSw0IEBACitwdWJsaWMgY2xhc3MgRHJpdmVyIHsKKworICAgIHZvaWQgbWFpbihTdHJpbmcuPGNhcmV0PiBhcmdzKSB7IH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9NZXRob2RQYXJlbnRoZXNlc1NwYWNlcy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL01ldGhvZFBhcmVudGhlc2VzU3BhY2VzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWQzMDk1MAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9NZXRob2RQYXJlbnRoZXNlc1NwYWNlcy5qYXZhCkBAIC0wLDAgKzEsOCBAQAorcHVibGljIGNsYXNzIEJhciB7CisgICAgeworICAgICAgICBmb28gKCBiYTxjYXJldD4gKQorICAgIH0KKworICAgIHZvaWQgZm9vKGludCB4KSB7fQorICAgIGludCBiYXIoKSB7fQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL01ldGhvZFBhcmVudGhlc2VzU3BhY2VzQXJncy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL01ldGhvZFBhcmVudGhlc2VzU3BhY2VzQXJncy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgyNTZkNTEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvTWV0aG9kUGFyZW50aGVzZXNTcGFjZXNBcmdzLmphdmEKQEAgLTAsMCArMSw4IEBACitwdWJsaWMgY2xhc3MgQmFyIHsKKyAgICB7CisgICAgICAgIGZvbyAoIGJhPGNhcmV0PiApCisgICAgfQorCisgICAgdm9pZCBmb28oaW50IHgpIHt9CisgICAgaW50IGJhcihpbnQgeCkge30KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9NZXRob2RQYXJlbnRoZXNlc1NwYWNlc0FyZ3NfYWZ0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9NZXRob2RQYXJlbnRoZXNlc1NwYWNlc0FyZ3NfYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNzI2YmY0Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL01ldGhvZFBhcmVudGhlc2VzU3BhY2VzQXJnc19hZnRlci5qYXZhCkBAIC0wLDAgKzEsOCBAQAorcHVibGljIGNsYXNzIEJhciB7CisgICAgeworICAgICAgICBmb28gKCBiYXIgKCA8Y2FyZXQ+ICkgKQorICAgIH0KKworICAgIHZvaWQgZm9vKGludCB4KSB7fQorICAgIGludCBiYXIoaW50IHgpIHt9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvTWV0aG9kUGFyZW50aGVzZXNTcGFjZXNfYWZ0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9NZXRob2RQYXJlbnRoZXNlc1NwYWNlc19hZnRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQyMjZmYjQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvTWV0aG9kUGFyZW50aGVzZXNTcGFjZXNfYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDggQEAKK3B1YmxpYyBjbGFzcyBCYXIgeworICAgIHsKKyAgICAgICAgZm9vICggYmFyICgpPGNhcmV0PiApCisgICAgfQorCisgICAgdm9pZCBmb28oaW50IHgpIHt9CisgICAgaW50IGJhcigpIHt9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvTWV0aG9kUmVmZXJlbmNlQ2FsbENvbnRleHQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9NZXRob2RSZWZlcmVuY2VDYWxsQ29udGV4dC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEyYzdjZjQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvTWV0aG9kUmVmZXJlbmNlQ2FsbENvbnRleHQuamF2YQpAQCAtMCwwICsxLDkgQEAKK2ltcG9ydCBqYXZhLnV0aWwuKjsKKworY2xhc3MgVGVzdCB7CisgICAgdm9pZCBhYWEoVGVzdCBwKSB7IHJldHVybiAxOyB9CisgICAgdm9pZCB0ZXN0KCkgeworICAgICAgICBjKFRlc3Q6OjxjYXJldD4pOworICAgIH0KKyAgICB2b2lkIGMoQ29tcGFyYXRvcjxUZXN0PiBjKXt9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvTWV0aG9kUmVmZXJlbmNlQ2FsbENvbnRleHRfYWZ0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9NZXRob2RSZWZlcmVuY2VDYWxsQ29udGV4dF9hZnRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJkMmZmOGEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvTWV0aG9kUmVmZXJlbmNlQ2FsbENvbnRleHRfYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDkgQEAKK2ltcG9ydCBqYXZhLnV0aWwuKjsKKworY2xhc3MgVGVzdCB7CisgICAgdm9pZCBhYWEoVGVzdCBwKSB7IHJldHVybiAxOyB9CisgICAgdm9pZCB0ZXN0KCkgeworICAgICAgICBjKFRlc3Q6OmMpOworICAgIH0KKyAgICB2b2lkIGMoQ29tcGFyYXRvcjxUZXN0PiBjKXt9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvTWV0aG9kUmVmZXJlbmNlTm9TdGF0aWMuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9NZXRob2RSZWZlcmVuY2VOb1N0YXRpYy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU3OWY3OWMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvTWV0aG9kUmVmZXJlbmNlTm9TdGF0aWMuamF2YQpAQCAtMCwwICsxLDggQEAKK2ltcG9ydCBqYXZhLnV0aWwuKjsKKworY2xhc3MgVGVzdCB7CisgICAgdm9pZCBhYWEoVGVzdCBwKSB7IHJldHVybiAxOyB9CisgICAgdm9pZCB0ZXN0KCkgeworICAgICAgICBDb21wYXJhdG9yPFRlc3Q+IHIyID0gVGVzdDo6PGNhcmV0PgorICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9NZXRob2RSZWZlcmVuY2VOb1N0YXRpY19hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL01ldGhvZFJlZmVyZW5jZU5vU3RhdGljX2FmdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjY4MGZhOQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9NZXRob2RSZWZlcmVuY2VOb1N0YXRpY19hZnRlci5qYXZhCkBAIC0wLDAgKzEsOCBAQAoraW1wb3J0IGphdmEudXRpbC4qOworCitjbGFzcyBUZXN0IHsKKyAgICB2b2lkIGFhYShUZXN0IHApIHsgcmV0dXJuIDE7IH0KKyAgICB2b2lkIHRlc3QoKSB7CisgICAgICAgIENvbXBhcmF0b3I8VGVzdD4gcjIgPSBUZXN0Ojp0ZXN0OworICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9NZXRob2RSZXR1cm5UeXBlLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvTWV0aG9kUmV0dXJuVHlwZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFjYjM0ZTMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvTWV0aG9kUmV0dXJuVHlwZS5qYXZhCkBAIC0wLDAgKzEsNiBAQAorcHVibGljIGNsYXNzIEZvb0JhciB7CisKKyAgICBTdHJpbmdCdWY8Y2FyZXQ+IGZvbygpIHsKKyAgICB9CisKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvTWV0aG9kUmV0dXJuVHlwZU5vU3BhY2UuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9NZXRob2RSZXR1cm5UeXBlTm9TcGFjZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJhZTBkOGUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvTWV0aG9kUmV0dXJuVHlwZU5vU3BhY2UuamF2YQpAQCAtMCwwICsxLDYgQEAKK3B1YmxpYyBjbGFzcyBGb29CYXIgeworCisgICAgU3RyaW5nQnVmPGNhcmV0PmJvbygpIHsKKyAgICB9CisKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvTWV0aG9kUmV0dXJuVHlwZU5vU3BhY2VfYWZ0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9NZXRob2RSZXR1cm5UeXBlTm9TcGFjZV9hZnRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNjODk0M2IKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvTWV0aG9kUmV0dXJuVHlwZU5vU3BhY2VfYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDYgQEAKK3B1YmxpYyBjbGFzcyBGb29CYXIgeworCisgICAgU3RyaW5nQnVmZmVyPGNhcmV0PmJvbygpIHsKKyAgICB9CisKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvTWV0aG9kUmV0dXJuVHlwZV9hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL01ldGhvZFJldHVyblR5cGVfYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xN2MyNWU0Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL01ldGhvZFJldHVyblR5cGVfYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDYgQEAKK3B1YmxpYyBjbGFzcyBGb29CYXIgeworCisgICAgU3RyaW5nQnVmZmVyPGNhcmV0PiBmb28oKSB7CisgICAgfQorCit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL01ldGhvZFNxdWFyZUJyYWNrZXQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9NZXRob2RTcXVhcmVCcmFja2V0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODEwMzM3MAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9NZXRob2RTcXVhcmVCcmFja2V0LmphdmEKQEAgLTAsMCArMSw5IEBACitjbGFzcyBGb28geworICBpbnRbXSBhYWFhKGludCB4KXt9CisgIGludFtdIGFhYWIoKXt9CisKKworICB7CisgICAgYWFhPGNhcmV0PgorICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL01ldGhvZFNxdWFyZUJyYWNrZXRfYWZ0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9NZXRob2RTcXVhcmVCcmFja2V0X2FmdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTU2MzI2MgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9NZXRob2RTcXVhcmVCcmFja2V0X2FmdGVyLmphdmEKQEAgLTAsMCArMSw5IEBACitjbGFzcyBGb28geworICBpbnRbXSBhYWFhKGludCB4KXt9CisgIGludFtdIGFhYWIoKXt9CisKKworICB7CisgICAgYWFhYSgpWzxjYXJldD5dCisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvTWV0aG9kV2l0aExlZnRQYXJUYWlsVHlwZS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL01ldGhvZFdpdGhMZWZ0UGFyVGFpbFR5cGUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNDAzYmYyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL01ldGhvZFdpdGhMZWZ0UGFyVGFpbFR5cGUuamF2YQpAQCAtMCwwICsxLDggQEAKK2NsYXNzIE15Q2xhc3MgeworCit2b2lkIGZvbygpIHt9CisKK3sKKyAgZm88Y2FyZXQ+Cit9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL01ldGhvZFdpdGhMZWZ0UGFyVGFpbFR5cGUyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvTWV0aG9kV2l0aExlZnRQYXJUYWlsVHlwZTIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMzhhMWZhCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL01ldGhvZFdpdGhMZWZ0UGFyVGFpbFR5cGUyLmphdmEKQEAgLTAsMCArMSw4IEBACitjbGFzcyBNeUNsYXNzIHsKKwordm9pZCBmb28oaW50IGEpIHt9CisKK3sKKyAgZm88Y2FyZXQ+Cit9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL01ldGhvZFdpdGhMZWZ0UGFyVGFpbFR5cGUyX2FmdGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvTWV0aG9kV2l0aExlZnRQYXJUYWlsVHlwZTJfYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNGI1YzE2Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL01ldGhvZFdpdGhMZWZ0UGFyVGFpbFR5cGUyX2FmdGVyLmphdmEKQEAgLTAsMCArMSw4IEBACitjbGFzcyBNeUNsYXNzIHsKKwordm9pZCBmb28oaW50IGEpIHt9CisKK3sKKyAgZm9vKDxjYXJldD4pOworfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9NZXRob2RXaXRoTGVmdFBhclRhaWxUeXBlTm9QYWlyQnJhY2UuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9NZXRob2RXaXRoTGVmdFBhclRhaWxUeXBlTm9QYWlyQnJhY2UuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNDAzYmYyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL01ldGhvZFdpdGhMZWZ0UGFyVGFpbFR5cGVOb1BhaXJCcmFjZS5qYXZhCkBAIC0wLDAgKzEsOCBAQAorY2xhc3MgTXlDbGFzcyB7CisKK3ZvaWQgZm9vKCkge30KKworeworICBmbzxjYXJldD4KK30KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvTWV0aG9kV2l0aExlZnRQYXJUYWlsVHlwZU5vUGFpckJyYWNlX2FmdGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvTWV0aG9kV2l0aExlZnRQYXJUYWlsVHlwZU5vUGFpckJyYWNlX2FmdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzk3NmQ5MgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9NZXRob2RXaXRoTGVmdFBhclRhaWxUeXBlTm9QYWlyQnJhY2VfYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDggQEAKK2NsYXNzIE15Q2xhc3MgeworCit2b2lkIGZvbygpIHt9CisKK3sKKyAgZm9vKDxjYXJldD4KK30KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvTWV0aG9kV2l0aExlZnRQYXJUYWlsVHlwZU5vUGFpckJyYWNlX2FmdGVyMi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL01ldGhvZFdpdGhMZWZ0UGFyVGFpbFR5cGVOb1BhaXJCcmFjZV9hZnRlcjIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOTc2ZDkyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL01ldGhvZFdpdGhMZWZ0UGFyVGFpbFR5cGVOb1BhaXJCcmFjZV9hZnRlcjIuamF2YQpAQCAtMCwwICsxLDggQEAKK2NsYXNzIE15Q2xhc3MgeworCit2b2lkIGZvbygpIHt9CisKK3sKKyAgZm9vKDxjYXJldD4KK30KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvTWV0aG9kV2l0aExlZnRQYXJUYWlsVHlwZV9hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL01ldGhvZFdpdGhMZWZ0UGFyVGFpbFR5cGVfYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NjgwODEyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL01ldGhvZFdpdGhMZWZ0UGFyVGFpbFR5cGVfYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDggQEAKK2NsYXNzIE15Q2xhc3MgeworCit2b2lkIGZvbygpIHt9CisKK3sKKyAgZm9vKDxjYXJldD4pOworfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9NdWx0aVJlc29sdmVRdWFsaWZpZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9NdWx0aVJlc29sdmVRdWFsaWZpZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYTliNjkyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL011bHRpUmVzb2x2ZVF1YWxpZmllci5qYXZhCkBAIC0wLDAgKzEsMTQgQEAKK2NsYXNzIEZvbyB7CisgIFN0cmluZyB4eHgoKTsKK30KKworcHVibGljIGNsYXNzIE15Rmlyc3RUZXN0Q2xhc3NGb28geworCisgICAgeworICAgICAgIGZvbygpLnh4PGNhcmV0PgorICAgIH0KKworICAgIEZvbyBmb28oaW50IGEpIHt9CisgICAgRm9vIGZvbyhTdHJpbmcgYSkge30KKworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9NdWx0aVJlc29sdmVRdWFsaWZpZXJfYWZ0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9NdWx0aVJlc29sdmVRdWFsaWZpZXJfYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMzE2YTE1Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL011bHRpUmVzb2x2ZVF1YWxpZmllcl9hZnRlci5qYXZhCkBAIC0wLDAgKzEsMTQgQEAKK2NsYXNzIEZvbyB7CisgIFN0cmluZyB4eHgoKTsKK30KKworcHVibGljIGNsYXNzIE15Rmlyc3RUZXN0Q2xhc3NGb28geworCisgICAgeworICAgICAgIGZvbygpLnh4eCgpPGNhcmV0PgorICAgIH0KKworICAgIEZvbyBmb28oaW50IGEpIHt9CisgICAgRm9vIGZvbyhTdHJpbmcgYSkge30KKworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9OZXdDbGFzc0FuZ2xlQnJhY2tldC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL05ld0NsYXNzQW5nbGVCcmFja2V0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTJjNjBkYQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9OZXdDbGFzc0FuZ2xlQnJhY2tldC5qYXZhCkBAIC0wLDAgKzEsOSBAQAorY2xhc3MgWm9vb29vb288VD4geyB9CitjbGFzcyBab29vb29vejxUPiB7IH0KKworCitjbGFzcyBCYXIgeworICB7CisgICAgbmV3IFpvb29vPGNhcmV0PgorICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvTmV3Q2xhc3NBbmdsZUJyYWNrZXRFeHBlY3RlZC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL05ld0NsYXNzQW5nbGVCcmFja2V0RXhwZWN0ZWQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZGIwMDhhCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL05ld0NsYXNzQW5nbGVCcmFja2V0RXhwZWN0ZWQuamF2YQpAQCAtMCwwICsxLDcgQEAKK2NsYXNzIFpvb29vb29vPFQ+IHsgfQorCitjbGFzcyBCYXIgeworICB7CisgICAgWm9vb29vb288U3RyaW5nPiB6ID0gbmV3IFpvb29vPGNhcmV0PgorICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvTmV3Q2xhc3NBbmdsZUJyYWNrZXRFeHBlY3RlZF9hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL05ld0NsYXNzQW5nbGVCcmFja2V0RXhwZWN0ZWRfYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNzE0NmQ4Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL05ld0NsYXNzQW5nbGVCcmFja2V0RXhwZWN0ZWRfYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDcgQEAKK2NsYXNzIFpvb29vb29vPFQ+IHsgfQorCitjbGFzcyBCYXIgeworICB7CisgICAgWm9vb29vb288U3RyaW5nPiB6ID0gbmV3IFpvb29vb29vPDxjYXJldD4+KCkKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL05ld0NsYXNzQW5nbGVCcmFja2V0X2FmdGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvTmV3Q2xhc3NBbmdsZUJyYWNrZXRfYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMTNkYzM5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL05ld0NsYXNzQW5nbGVCcmFja2V0X2FmdGVyLmphdmEKQEAgLTAsMCArMSw5IEBACitjbGFzcyBab29vb29vbzxUPiB7IH0KK2NsYXNzIFpvb29vb296PFQ+IHsgfQorCisKK2NsYXNzIEJhciB7CisgIHsKKyAgICBuZXcgWm9vb29vb288PGNhcmV0Pj4oKQorICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvTmV3Q2xhc3NTcXVhcmVCcmFja2V0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvTmV3Q2xhc3NTcXVhcmVCcmFja2V0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTJjNjBkYQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9OZXdDbGFzc1NxdWFyZUJyYWNrZXQuamF2YQpAQCAtMCwwICsxLDkgQEAKK2NsYXNzIFpvb29vb29vPFQ+IHsgfQorY2xhc3MgWm9vb29vb3o8VD4geyB9CisKKworY2xhc3MgQmFyIHsKKyAgeworICAgIG5ldyBab29vbzxjYXJldD4KKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL05ld0NsYXNzU3F1YXJlQnJhY2tldF9hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL05ld0NsYXNzU3F1YXJlQnJhY2tldF9hZnRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZiNjJjZDAKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvTmV3Q2xhc3NTcXVhcmVCcmFja2V0X2FmdGVyLmphdmEKQEAgLTAsMCArMSw5IEBACitjbGFzcyBab29vb29vbzxUPiB7IH0KK2NsYXNzIFpvb29vb296PFQ+IHsgfQorCisKK2NsYXNzIEJhciB7CisgIHsKKyAgICBuZXcgWm9vb29vb29bPGNhcmV0Pl0KKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL05ld0V4cGVjdGVkQ2xhc3NQYXJlbnMuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9OZXdFeHBlY3RlZENsYXNzUGFyZW5zLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2YwNTBlMwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9OZXdFeHBlY3RlZENsYXNzUGFyZW5zLmphdmEKQEAgLTAsMCArMSw5IEBACitjbGFzcyBGb29vbyB7CisgIGludGVyZmFjZSBCYXIge30KK30KKworY2xhc3MgQmFyIHsKKyAgICB7CisgICAgICAgIEZvb29vIGMgPSBuZXcgRm9vbzxjYXJldD4KKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvTmV3RXhwZWN0ZWRDbGFzc1BhcmVuc19hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL05ld0V4cGVjdGVkQ2xhc3NQYXJlbnNfYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZDY2ZTRlCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL05ld0V4cGVjdGVkQ2xhc3NQYXJlbnNfYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDkgQEAKK2NsYXNzIEZvb29vIHsKKyAgaW50ZXJmYWNlIEJhciB7fQorfQorCitjbGFzcyBCYXIgeworICAgIHsKKyAgICAgICAgRm9vb28gYyA9IG5ldyBGb29vbygpPGNhcmV0PgorICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9OZXdHZW5lcmljQ2xhc3MuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9OZXdHZW5lcmljQ2xhc3MuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOTI2MWUwCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL05ld0dlbmVyaWNDbGFzcy5qYXZhCkBAIC0wLDAgKzEsNSBAQAorcHVibGljIGNsYXNzIERyaXZlciB7CisgIHsKKyAgICBuZXcgQXJyYXlMaTxjYXJldD4KKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL05ld0dlbmVyaWNDbGFzc19hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL05ld0dlbmVyaWNDbGFzc19hZnRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUwODNiYWMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvTmV3R2VuZXJpY0NsYXNzX2FmdGVyLmphdmEKQEAgLTAsMCArMSw3IEBACitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKKworcHVibGljIGNsYXNzIERyaXZlciB7CisgIHsKKyAgICBuZXcgQXJyYXlMaXN0PDxjYXJldD4+KCkKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL05ld0dlbmVyaWNJbnRlcmZhY2UuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9OZXdHZW5lcmljSW50ZXJmYWNlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjYyMTYwNAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9OZXdHZW5lcmljSW50ZXJmYWNlLmphdmEKQEAgLTAsMCArMSw5IEBACitwdWJsaWMgY2xhc3MgRHJpdmVyIHsKKyAgeworICAgIG5ldyBGb29vPGNhcmV0PgorICB9Cit9CisKK2ludGVyZmFjZSBGb29vbzxUPiB7CisgIHZvaWQgYmFyKCk7Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvTmV3R2VuZXJpY0ludGVyZmFjZV9hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL05ld0dlbmVyaWNJbnRlcmZhY2VfYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iODUzNGUyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL05ld0dlbmVyaWNJbnRlcmZhY2VfYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDkgQEAKK3B1YmxpYyBjbGFzcyBEcml2ZXIgeworICB7CisgICAgbmV3IEZvb29vPDxjYXJldD4+KCkKKyAgfQorfQorCitpbnRlcmZhY2UgRm9vb288VD4geworICB2b2lkIGJhcigpOworfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL05vQWxsQ2xhc3Nlc09uUXVhbGlmaWVkUmVmZXJlbmNlLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvTm9BbGxDbGFzc2VzT25RdWFsaWZpZWRSZWZlcmVuY2UuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kODQ2ZTZmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL05vQWxsQ2xhc3Nlc09uUXVhbGlmaWVkUmVmZXJlbmNlLmphdmEKQEAgLTAsMCArMSwxMCBAQAoraW50ZXJmYWNlIEEgeworfQoraW50ZXJmYWNlIEF4QnhDeCBleHRlbmRzIEF7Cit9CisKK2NsYXNzIEZvbyB7CisgICAgeworICAgICAgICBBLkFCQzxjYXJldD4KKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvTm9BcmdzTWV0aG9kU3BhY2UuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9Ob0FyZ3NNZXRob2RTcGFjZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJlOTU1NzcxCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL05vQXJnc01ldGhvZFNwYWNlLmphdmEKQEAgLTAsMCArMSw4IEBACitjbGFzcyBGb28geworICBpbnQgZm9vMSgpIHt9CisgIGludCBmb28yKCkge30KKworICB7CisgICAgZm9vPGNhcmV0PgorICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL05vQXJnc01ldGhvZFNwYWNlX2FmdGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvTm9BcmdzTWV0aG9kU3BhY2VfYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZjEzODUyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL05vQXJnc01ldGhvZFNwYWNlX2FmdGVyLmphdmEKQEAgLTAsMCArMSw4IEBACitjbGFzcyBGb28geworICBpbnQgZm9vMSgpIHt9CisgIGludCBmb28yKCkge30KKworICB7CisgICAgZm9vMSgpIDxjYXJldD4KKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9Ob0Nsb3NpbmdXaGVuQ2hvb3NpbmdXaXRoUGFyZW5CZWZvcmVJZGVudGlmaWVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvTm9DbG9zaW5nV2hlbkNob29zaW5nV2l0aFBhcmVuQmVmb3JlSWRlbnRpZmllci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU5NjgyYTgKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvTm9DbG9zaW5nV2hlbkNob29zaW5nV2l0aFBhcmVuQmVmb3JlSWRlbnRpZmllci5qYXZhCkBAIC0wLDAgKzEsNSBAQAorY2xhc3MgRm9vIHsKKyAgeworICAgIHRvUzxjYXJldD54eHgKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9Ob0Nsb3NpbmdXaGVuQ2hvb3NpbmdXaXRoUGFyZW5CZWZvcmVJZGVudGlmaWVyX2FmdGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvTm9DbG9zaW5nV2hlbkNob29zaW5nV2l0aFBhcmVuQmVmb3JlSWRlbnRpZmllcl9hZnRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ4OWQxMjEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvTm9DbG9zaW5nV2hlbkNob29zaW5nV2l0aFBhcmVuQmVmb3JlSWRlbnRpZmllcl9hZnRlci5qYXZhCkBAIC0wLDAgKzEsNSBAQAorY2xhc3MgRm9vIHsKKyAgeworICAgIHRvU3RyaW5nKDxjYXJldD54eHgKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9Ob0NvbW1vblByZWZpeEluc2lkZUlkZW50aWZpZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9Ob0NvbW1vblByZWZpeEluc2lkZUlkZW50aWZpZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMjM4MDljCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL05vQ29tbW9uUHJlZml4SW5zaWRlSWRlbnRpZmllci5qYXZhCkBAIC0wLDAgKzEsOCBAQAorcHVibGljIGNsYXNzIFRlc3RDYXNlIHsKKwl7CisgICAgICAgIGludCBmYWkxOworICAgICAgICBpbnQgZmFpMjsKKyAgICAgICAgZmE8Y2FyZXQ+YWFhYWEKKworCX0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvTm9Eb3RPdmVyd3JpdGUuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9Ob0RvdE92ZXJ3cml0ZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc3YTA0YzMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvTm9Eb3RPdmVyd3JpdGUuamF2YQpAQCAtMCwwICsxLDggQEAKK3B1YmxpYyBjbGFzcyBKYXZhQ2xhc3MgeworICBPYmplY3QgbWFnaWMoKSB7fQorICBPYmplY3QgbWFnaWMyKCkge30KKworICB2b2lkIGZvbygpIHsKKyAgICBtYWc8Y2FyZXQ+LmFhYQorICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvTm9Eb3RPdmVyd3JpdGVfYWZ0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9Ob0RvdE92ZXJ3cml0ZV9hZnRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ1MDQ5NTUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvTm9Eb3RPdmVyd3JpdGVfYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDggQEAKK3B1YmxpYyBjbGFzcyBKYXZhQ2xhc3MgeworICBPYmplY3QgbWFnaWMoKSB7fQorICBPYmplY3QgbWFnaWMyKCkge30KKworICB2b2lkIGZvbygpIHsKKyAgICBtYWdpYygpLjxjYXJldD4uYWFhCisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9Ob0ZvcmNlQnJhY2VzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvTm9Gb3JjZUJyYWNlcy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc5YTdkNTQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvTm9Gb3JjZUJyYWNlcy5qYXZhCkBAIC0wLDAgKzEsOCBAQAoraW1wb3J0IGphdmEuaW8uRmlsZTsKKworcHVibGljIGNsYXNzIEZvbyB7CisgIHZvaWQgZm9vKGJvb2xlYW4gZmxhZykgeworICAgICAgaWYgKCdcXCcgPT0gRmlsZS5zZXBhcmFDaDxjYXJldD4pCisgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oKTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL05vRm9yY2VCcmFjZXNfYWZ0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9Ob0ZvcmNlQnJhY2VzX2FmdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjdiZmMzMQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9Ob0ZvcmNlQnJhY2VzX2FmdGVyLmphdmEKQEAgLTAsMCArMSw4IEBACitpbXBvcnQgamF2YS5pby5GaWxlOworCitwdWJsaWMgY2xhc3MgRm9vIHsKKyAgdm9pZCBmb28oYm9vbGVhbiBmbGFnKSB7CisgICAgICBpZiAoJ1xcJyA9PSBGaWxlLnNlcGFyYXRvckNoYXI8Y2FyZXQ+KQorICAgICAgU3lzdGVtLm91dC5wcmludGxuKCk7CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9Ob0dlbmVyaWNzV2hlbkNob29zaW5nV2l0aFBhcmVuLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvTm9HZW5lcmljc1doZW5DaG9vc2luZ1dpdGhQYXJlbi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIyMWQ0MjgKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvTm9HZW5lcmljc1doZW5DaG9vc2luZ1dpdGhQYXJlbi5qYXZhCkBAIC0wLDAgKzEsNSBAQAorY2xhc3MgRm9vIHsKKyAgeworICAgIG5ldyBIYXNoPGNhcmV0PgorICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL05vR2VuZXJpY3NXaGVuQ2hvb3NpbmdXaXRoUGFyZW5fYWZ0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9Ob0dlbmVyaWNzV2hlbkNob29zaW5nV2l0aFBhcmVuX2FmdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGJiNTFiMQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9Ob0dlbmVyaWNzV2hlbkNob29zaW5nV2l0aFBhcmVuX2FmdGVyLmphdmEKQEAgLTAsMCArMSw3IEBACitpbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7CisKK2NsYXNzIEZvbyB7CisgIHsKKyAgICBuZXcgSGFzaE1hcCg8Y2FyZXQ+KQorICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL05vTWV0aG9kc0luTm9uU3RhdGljSW1wb3J0cy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL05vTWV0aG9kc0luTm9uU3RhdGljSW1wb3J0cy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk0MzlhZTYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvTm9NZXRob2RzSW5Ob25TdGF0aWNJbXBvcnRzLmphdmEKQEAgLTAsMCArMSwyIEBACitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb25zLjxjYXJldD4KK2NsYXNzIEEge30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvTm9NZXRob2RzSW5QYXJhbWV0ZXJUeXBlLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvTm9NZXRob2RzSW5QYXJhbWV0ZXJUeXBlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjJhNmZhZQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9Ob01ldGhvZHNJblBhcmFtZXRlclR5cGUuamF2YQpAQCAtMCwwICsxLDMgQEAKK2NsYXNzIEZvbyB7CisgIHN0YXRpYyB2b2lkIGZvbyhmPGNhcmV0PmludCBhKSB7fQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9Ob1BhcmVudGhlc2VzQXJvdW5kQ2FsbFF1YWxpZmllci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL05vUGFyZW50aGVzZXNBcm91bmRDYWxsUXVhbGlmaWVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTZmZTY4ZgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9Ob1BhcmVudGhlc2VzQXJvdW5kQ2FsbFF1YWxpZmllci5qYXZhCkBAIC0wLDAgKzEsNiBAQAorcHVibGljIGNsYXNzIEZvbyB7CisgIFN0cmluZyBnZXRTdHJpbmcoKSB7fQorICB7CisgICAgICBnZXRTLnN1YnNlPGNhcmV0PgorICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvTm9QYXJlbnRoZXNlc0Fyb3VuZENhbGxRdWFsaWZpZXJfYWZ0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9Ob1BhcmVudGhlc2VzQXJvdW5kQ2FsbFF1YWxpZmllcl9hZnRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMzMmFmNDYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvTm9QYXJlbnRoZXNlc0Fyb3VuZENhbGxRdWFsaWZpZXJfYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDYgQEAKK3B1YmxpYyBjbGFzcyBGb28geworICBTdHJpbmcgZ2V0U3RyaW5nKCkge30KKyAgeworICAgICAgZ2V0U3RyaW5nKCkuc3ViU2VxdWVuY2UoPGNhcmV0PikKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL05vUmV0dXJuQWZ0ZXJEb3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9Ob1JldHVybkFmdGVyRG90LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTZlNzgyNAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9Ob1JldHVybkFmdGVyRG90LmphdmEKQEAgLTAsMCArMSw2IEBACitwdWJsaWMgY2xhc3MgWm9vIHsKKyAgeworICAgIGlmICh0cnVlKSB0b1N0cmluZygpLjxjYXJldD4KKyAgfQorCit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvTm9SZXR1cm5JblRlcm5hcnkuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9Ob1JldHVybkluVGVybmFyeS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI5NDcxMDMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvTm9SZXR1cm5JblRlcm5hcnkuamF2YQpAQCAtMCwwICsxLDEwIEBACitpbXBvcnQgamF2YXguc3dpbmcuKjsKK2ltcG9ydCBqYXZhLmF3dC4qOworCitwdWJsaWMgY2xhc3MgQmFyIHsKKyAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworICAgIGJvb2xlYW4gcmV0cmVyZSA9IGZhbHNlOworICAgIGZvbyhhcmdzID09IG51bGwgPyB0cnVlIDogcmV0PGNhcmV0PikKKyAgfQorfQorCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvTm9SZXR1cm5JblRlcm5hcnlfYWZ0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9Ob1JldHVybkluVGVybmFyeV9hZnRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU4OTEwYjIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvTm9SZXR1cm5JblRlcm5hcnlfYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDEwIEBACitpbXBvcnQgamF2YXguc3dpbmcuKjsKK2ltcG9ydCBqYXZhLmF3dC4qOworCitwdWJsaWMgY2xhc3MgQmFyIHsKKyAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworICAgIGJvb2xlYW4gcmV0cmVyZSA9IGZhbHNlOworICAgIGZvbyhhcmdzID09IG51bGwgPyB0cnVlIDogcmV0cmVyZTxjYXJldD4pCisgIH0KK30KKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL05vU2VtaWNvbG9uQWZ0ZXJFeGlzdGluZ1BhcmVudGhlc2VzRXNwZWNpYWxseUlmSXRzQUNhc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9Ob1NlbWljb2xvbkFmdGVyRXhpc3RpbmdQYXJlbnRoZXNlc0VzcGVjaWFsbHlJZkl0c0FDYXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGY3YjM1ZQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9Ob1NlbWljb2xvbkFmdGVyRXhpc3RpbmdQYXJlbnRoZXNlc0VzcGVjaWFsbHlJZkl0c0FDYXN0LmphdmEKQEAgLTAsMCArMSw1IEBACitwdWJsaWMgY2xhc3MgQmVkYSB7CisgICAgeworICAgICAgU3lzdGVtLm91dC5wcmludGw8Y2FyZXQ+ICAoKFN0cmluZykiYSIpLnN1YlNlcXVlbmNlKCk7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL05vU2VtaWNvbG9uQWZ0ZXJFeGlzdGluZ1BhcmVudGhlc2VzRXNwZWNpYWxseUlmSXRzQUNhc3RfYWZ0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9Ob1NlbWljb2xvbkFmdGVyRXhpc3RpbmdQYXJlbnRoZXNlc0VzcGVjaWFsbHlJZkl0c0FDYXN0X2FmdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjU4MDJkYwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9Ob1NlbWljb2xvbkFmdGVyRXhpc3RpbmdQYXJlbnRoZXNlc0VzcGVjaWFsbHlJZkl0c0FDYXN0X2FmdGVyLmphdmEKQEAgLTAsMCArMSw1IEBACitwdWJsaWMgY2xhc3MgQmVkYSB7CisgICAgeworICAgICAgU3lzdGVtLm91dC5wcmludGxuICAoPGNhcmV0PihTdHJpbmcpImEiKS5zdWJTZXF1ZW5jZSgpOworICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9Ob1NwYWNlSW5QYXJlbnNXaXRob3V0UGFyYW1zLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvTm9TcGFjZUluUGFyZW5zV2l0aG91dFBhcmFtcy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNjMzJhOTM3Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL05vU3BhY2VJblBhcmVuc1dpdGhvdXRQYXJhbXMuamF2YQpAQCAtMCwwICsxLDYgQEAKK3B1YmxpYyBjbGFzcyBNYWluIHsKKyAgeworICAgIE1haW4gdjsKKyAgICB2Lmhhc2g8Y2FyZXQ+CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvTm9TcGFjZUluUGFyZW5zV2l0aG91dFBhcmFtc19hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL05vU3BhY2VJblBhcmVuc1dpdGhvdXRQYXJhbXNfYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MWEwOWYxCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL05vU3BhY2VJblBhcmVuc1dpdGhvdXRQYXJhbXNfYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDYgQEAKK3B1YmxpYyBjbGFzcyBNYWluIHsKKyAgeworICAgIE1haW4gdjsKKyAgICB2Lmhhc2hDb2RlKCk8Y2FyZXQ+CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvTm9UaGlzSW5Db21tZW50LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvTm9UaGlzSW5Db21tZW50LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDNmNDMzZgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9Ob1RoaXNJbkNvbW1lbnQuamF2YQpAQCAtMCwwICsxLDYgQEAKK2NsYXNzIEZvbyB7CisgICAgeworICAgICAgICBpbnRbXSB4ID0gbmV3IGludFtdeyAvLyB0aDxjYXJldD4KKyAgICAgICAgfQorICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvTm90T25seUtleXdvcmRzSW5zaWRlU3dpdGNoLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvTm90T25seUtleXdvcmRzSW5zaWRlU3dpdGNoLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzhjYTZkMwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9Ob3RPbmx5S2V5d29yZHNJbnNpZGVTd2l0Y2guamF2YQpAQCAtMCwwICsxLDkgQEAKK3B1YmxpYyBjbGFzcyBNYWluIHsKKyAgaW50IF9hYWE7CisKKyAgeworICAgIHN3aXRjaCAoYSkgeworICAgICAgY2FzZSAxOiBfPGNhcmV0PgorICAgIH0KKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9Ob3RPbmx5S2V5d29yZHNJbnNpZGVTd2l0Y2hfYWZ0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9Ob3RPbmx5S2V5d29yZHNJbnNpZGVTd2l0Y2hfYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZmE2NjdjCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL05vdE9ubHlLZXl3b3Jkc0luc2lkZVN3aXRjaF9hZnRlci5qYXZhCkBAIC0wLDAgKzEsOSBAQAorcHVibGljIGNsYXNzIE1haW4geworICBpbnQgX2FhYTsKKworICB7CisgICAgc3dpdGNoIChhKSB7CisgICAgICBjYXNlIDE6IF9hYWE8Y2FyZXQ+CisgICAgfQorICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL05vdGhpbmdBZnRlck51bWVyaWNMaXRlcmFsLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvTm90aGluZ0FmdGVyTnVtZXJpY0xpdGVyYWwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNmIwMWU4Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL05vdGhpbmdBZnRlck51bWVyaWNMaXRlcmFsLmphdmEKQEAgLTAsMCArMSw3IEBACitwdWJsaWMgY2xhc3MgTXlGaXJzdFRlc3RDbGFzc0ZvbyB7CisKKyAgICB7CisgICAgICBtYXAucHV0KCJrZXkiLCBuZXcgZG91YmxlW117MS4xZDxjYXJldD4KKyAgICB9CisKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvT25seUFubm90YXRpb25zQWZ0ZXJBdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL09ubHlBbm5vdGF0aW9uc0FmdGVyQXQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYmRlNzM5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL09ubHlBbm5vdGF0aW9uc0FmdGVyQXQuamF2YQpAQCAtMCwwICsxLDUgQEAKK2NsYXNzIEFiY2RDbGFzcyB7fQorQGludGVyZmFjZSBBYmNkQW5ubyB7fQorCitAQWJjZDxjYXJldD4KK2NsYXNzIEZvbyB7fQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9Pbmx5QW5ub3RhdGlvbnNBZnRlckF0Mi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL09ubHlBbm5vdGF0aW9uc0FmdGVyQXQyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2ViNDRiYQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9Pbmx5QW5ub3RhdGlvbnNBZnRlckF0Mi5qYXZhCkBAIC0wLDAgKzEsMTIgQEAKK2ltcG9ydCBzdGF0aWMgQmVhblV0aWwuQS5OT1RfTlVMTDsKK2NsYXNzIEJlYW5VdGlsIHsKKyAgcHVibGljIHN0YXRpYyBjbGFzcyBBIHsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIE9iamVjdCBOT1RfTlVMTCA9IG51bGw7CisgIH0KKyAgQE5OPGNhcmV0PgorICBTdHJpbmcgZm9vKCkgeworICAgIHJldHVybiBudWxsOworICB9Cit9CisKK0BpbnRlcmZhY2UgTm90TnVsbCB7fQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL09ubHlBbm5vdGF0aW9uc0FmdGVyQXQyX2FmdGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvT25seUFubm90YXRpb25zQWZ0ZXJBdDJfYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YTg5N2U3Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL09ubHlBbm5vdGF0aW9uc0FmdGVyQXQyX2FmdGVyLmphdmEKQEAgLTAsMCArMSwxMiBAQAoraW1wb3J0IHN0YXRpYyBCZWFuVXRpbC5BLk5PVF9OVUxMOworY2xhc3MgQmVhblV0aWwgeworICBwdWJsaWMgc3RhdGljIGNsYXNzIEEgeworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgT2JqZWN0IE5PVF9OVUxMID0gbnVsbDsKKyAgfQorICBATm90TnVsbDxjYXJldD4KKyAgU3RyaW5nIGZvbygpIHsKKyAgICByZXR1cm4gbnVsbDsKKyAgfQorfQorCitAaW50ZXJmYWNlIE5vdE51bGwge30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9Pbmx5QW5ub3RhdGlvbnNBZnRlckF0X2FmdGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvT25seUFubm90YXRpb25zQWZ0ZXJBdF9hZnRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE3YWM5YjIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvT25seUFubm90YXRpb25zQWZ0ZXJBdF9hZnRlci5qYXZhCkBAIC0wLDAgKzEsNSBAQAorY2xhc3MgQWJjZENsYXNzIHt9CitAaW50ZXJmYWNlIEFiY2RBbm5vIHt9CisKK0BBYmNkQW5ubworY2xhc3MgRm9vIHt9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL09ubHlDbGFzc2VzSW5FeHRlbmRzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvT25seUNsYXNzZXNJbkV4dGVuZHMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMjhmZmJjCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL09ubHlDbGFzc2VzSW5FeHRlbmRzLmphdmEKQEAgLTAsMCArMSw1IEBACitjbGFzcyBCYXIgeworICBzdGF0aWMgY2xhc3MgSW5uZXIge30KK30KKworcHVibGljIGNsYXNzIEZvb29vIGV4dGVuZHMgQmFyLjxjYXJldD4KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9Pbmx5RXhjZXB0aW9uc0luQ2F0Y2gxLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvT25seUV4Y2VwdGlvbnNJbkNhdGNoMS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjljOTg5N2UKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvT25seUV4Y2VwdGlvbnNJbkNhdGNoMS5qYXZhCkBAIC0wLDAgKzEsMTAgQEAKK2NsYXNzIEFiY2RDbGFzcyB7fQorY2xhc3MgQWJjZEV4Y2VwdGlvbiBleHRlbmRzIFRocm93YWJsZSB7fQorCitjbGFzcyBGb28geworICB7CisgICAgdHJ5IHsKKworICAgIH0gY2F0Y2ggKEFiY2Q8Y2FyZXQ+KQorICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL09ubHlFeGNlcHRpb25zSW5DYXRjaDFfYWZ0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9Pbmx5RXhjZXB0aW9uc0luQ2F0Y2gxX2FmdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzI2ZWQ4NgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9Pbmx5RXhjZXB0aW9uc0luQ2F0Y2gxX2FmdGVyLmphdmEKQEAgLTAsMCArMSwxMCBAQAorY2xhc3MgQWJjZENsYXNzIHt9CitjbGFzcyBBYmNkRXhjZXB0aW9uIGV4dGVuZHMgVGhyb3dhYmxlIHt9CisKK2NsYXNzIEZvbyB7CisgIHsKKyAgICB0cnkgeworCisgICAgfSBjYXRjaCAoQWJjZEV4Y2VwdGlvbjxjYXJldD4pCisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvT25seUV4Y2VwdGlvbnNJbkNhdGNoMi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL09ubHlFeGNlcHRpb25zSW5DYXRjaDIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZmQ3ZjNhCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL09ubHlFeGNlcHRpb25zSW5DYXRjaDIuamF2YQpAQCAtMCwwICsxLDggQEAKK2NsYXNzIEFiY2RDbGFzcyB7fQorY2xhc3MgQWJjZEV4Y2VwdGlvbiBleHRlbmRzIFRocm93YWJsZSB7fQorCitjbGFzcyBGb28geworICB7CisgICAgdHJ5IHsgfSBjYXRjaCAoQWJjZDxjYXJldD4gZSkKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9Pbmx5RXhjZXB0aW9uc0luQ2F0Y2gyX2FmdGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvT25seUV4Y2VwdGlvbnNJbkNhdGNoMl9hZnRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI2OTcxZDEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvT25seUV4Y2VwdGlvbnNJbkNhdGNoMl9hZnRlci5qYXZhCkBAIC0wLDAgKzEsOCBAQAorY2xhc3MgQWJjZENsYXNzIHt9CitjbGFzcyBBYmNkRXhjZXB0aW9uIGV4dGVuZHMgVGhyb3dhYmxlIHt9CisKK2NsYXNzIEZvbyB7CisgIHsKKyAgICB0cnkgeyB9IGNhdGNoIChBYmNkRXhjZXB0aW9uPGNhcmV0PiBlKQorICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL09ubHlFeGNlcHRpb25zSW5DYXRjaDMuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9Pbmx5RXhjZXB0aW9uc0luQ2F0Y2gzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDYwNGNhMgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9Pbmx5RXhjZXB0aW9uc0luQ2F0Y2gzLmphdmEKQEAgLTAsMCArMSw4IEBACitjbGFzcyBBYmNkQ2xhc3Mge30KK2NsYXNzIEFiY2RFeGNlcHRpb24gZXh0ZW5kcyBUaHJvd2FibGUge30KKworY2xhc3MgRm9vIHsKKyAgeworICAgIHRyeSB7IH0gY2F0Y2ggKGZpbmFsIEFiY2Q8Y2FyZXQ+KQorICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL09ubHlFeGNlcHRpb25zSW5DYXRjaDNfYWZ0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9Pbmx5RXhjZXB0aW9uc0luQ2F0Y2gzX2FmdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDA5MjJjOAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9Pbmx5RXhjZXB0aW9uc0luQ2F0Y2gzX2FmdGVyLmphdmEKQEAgLTAsMCArMSw4IEBACitjbGFzcyBBYmNkQ2xhc3Mge30KK2NsYXNzIEFiY2RFeGNlcHRpb24gZXh0ZW5kcyBUaHJvd2FibGUge30KKworY2xhc3MgRm9vIHsKKyAgeworICAgIHRyeSB7IH0gY2F0Y2ggKGZpbmFsIEFiY2RFeGNlcHRpb248Y2FyZXQ+KQorICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL09ubHlFeGNlcHRpb25zSW5DYXRjaDQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9Pbmx5RXhjZXB0aW9uc0luQ2F0Y2g0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzNiNzAzYwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9Pbmx5RXhjZXB0aW9uc0luQ2F0Y2g0LmphdmEKQEAgLTAsMCArMSw4IEBACitjbGFzcyBBYmNkQ2xhc3Mge30KK2NsYXNzIEFiY2RFeGNlcHRpb24gZXh0ZW5kcyBUaHJvd2FibGUge30KKworY2xhc3MgRm9vIHsKKyAgeworICAgIHRyeSB7IH0gY2F0Y2ggKGZpbmFsIEFiY2Q8Y2FyZXQ+IGUpCisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvT25seUV4Y2VwdGlvbnNJbkNhdGNoNF9hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL09ubHlFeGNlcHRpb25zSW5DYXRjaDRfYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZmY4NTAzCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL09ubHlFeGNlcHRpb25zSW5DYXRjaDRfYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDggQEAKK2NsYXNzIEFiY2RDbGFzcyB7fQorY2xhc3MgQWJjZEV4Y2VwdGlvbiBleHRlbmRzIFRocm93YWJsZSB7fQorCitjbGFzcyBGb28geworICB7CisgICAgdHJ5IHsgfSBjYXRjaCAoZmluYWwgQWJjZEV4Y2VwdGlvbjxjYXJldD4gZSkKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9Pbmx5RXhjZXB0aW9uc0luTXVsdGlDYXRjaDEuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9Pbmx5RXhjZXB0aW9uc0luTXVsdGlDYXRjaDEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kODU5NGEyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL09ubHlFeGNlcHRpb25zSW5NdWx0aUNhdGNoMS5qYXZhCkBAIC0wLDAgKzEsNyBAQAorY2xhc3MgTXlDbGFzcyB7CisgIHN0YXRpYyBjbGFzcyBNeUV4Y2VwdGlvbiBleHRlbmRzIEV4Y2VwdGlvbiB7IH0KKworICB2b2lkIG0oKSB7CisgICAgdHJ5IHsgfSBjYXRjaCAoUnVudGltZUV4Y2VwdGlvbiB8IE15PGNhcmV0PikgeyB9CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvT25seUV4Y2VwdGlvbnNJbk11bHRpQ2F0Y2gxX2FmdGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvT25seUV4Y2VwdGlvbnNJbk11bHRpQ2F0Y2gxX2FmdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDM0ZmYzNwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9Pbmx5RXhjZXB0aW9uc0luTXVsdGlDYXRjaDFfYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDcgQEAKK2NsYXNzIE15Q2xhc3MgeworICBzdGF0aWMgY2xhc3MgTXlFeGNlcHRpb24gZXh0ZW5kcyBFeGNlcHRpb24geyB9CisKKyAgdm9pZCBtKCkgeworICAgIHRyeSB7IH0gY2F0Y2ggKFJ1bnRpbWVFeGNlcHRpb24gfCBNeUV4Y2VwdGlvbjxjYXJldD4pIHsgfQorICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL09ubHlFeGNlcHRpb25zSW5NdWx0aUNhdGNoMi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL09ubHlFeGNlcHRpb25zSW5NdWx0aUNhdGNoMi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVjNTAwMmUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvT25seUV4Y2VwdGlvbnNJbk11bHRpQ2F0Y2gyLmphdmEKQEAgLTAsMCArMSw3IEBACitjbGFzcyBNeUNsYXNzIHsKKyAgc3RhdGljIGNsYXNzIE15RXhjZXB0aW9uIGV4dGVuZHMgRXhjZXB0aW9uIHsgfQorCisgIHZvaWQgbSgpIHsKKyAgICB0cnkgeyB9IGNhdGNoIChSdW50aW1lRXhjZXB0aW9uIHwgTXk8Y2FyZXQ+IGUpIHsgfQorICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL09ubHlFeGNlcHRpb25zSW5NdWx0aUNhdGNoMl9hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL09ubHlFeGNlcHRpb25zSW5NdWx0aUNhdGNoMl9hZnRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFlYjg4NDEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvT25seUV4Y2VwdGlvbnNJbk11bHRpQ2F0Y2gyX2FmdGVyLmphdmEKQEAgLTAsMCArMSw3IEBACitjbGFzcyBNeUNsYXNzIHsKKyAgc3RhdGljIGNsYXNzIE15RXhjZXB0aW9uIGV4dGVuZHMgRXhjZXB0aW9uIHsgfQorCisgIHZvaWQgbSgpIHsKKyAgICB0cnkgeyB9IGNhdGNoIChSdW50aW1lRXhjZXB0aW9uIHwgTXlFeGNlcHRpb248Y2FyZXQ+IGUpIHsgfQorICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL09ubHlLZXl3b3Jkc0luc2lkZVN3aXRjaC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL09ubHlLZXl3b3Jkc0luc2lkZVN3aXRjaC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJiNjJjYjQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvT25seUtleXdvcmRzSW5zaWRlU3dpdGNoLmphdmEKQEAgLTAsMCArMSw4IEBACitwdWJsaWMgY2xhc3MgTWFpbiB7CisKKyAgeworICAgIHN3aXRjaCAoYSkgeworICAgICAgPGNhcmV0PgorICAgIH0KKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9Pbmx5UmVzb3VyY2VzSW5SZXNvdXJjZUxpc3QxLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvT25seVJlc291cmNlc0luUmVzb3VyY2VMaXN0MS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk1ZTg0MTMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvT25seVJlc291cmNlc0luUmVzb3VyY2VMaXN0MS5qYXZhCkBAIC0wLDAgKzEsNiBAQAorY2xhc3MgTXlDbGFzcyB7CisgIHZvaWQgZigpIHsKKyAgICB0cnkgKEE8Y2FyZXQ+KSB7CisgICAgfQorICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL09ubHlSZXNvdXJjZXNJblJlc291cmNlTGlzdDFfYWZ0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9Pbmx5UmVzb3VyY2VzSW5SZXNvdXJjZUxpc3QxX2FmdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmY2ZjFlYgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9Pbmx5UmVzb3VyY2VzSW5SZXNvdXJjZUxpc3QxX2FmdGVyLmphdmEKQEAgLTAsMCArMSw2IEBACitjbGFzcyBNeUNsYXNzIHsKKyAgdm9pZCBmKCkgeworICAgIHRyeSAoQXV0b0Nsb3NlYWJsZTxjYXJldD4pIHsKKyAgICB9CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvT25seVJlc291cmNlc0luUmVzb3VyY2VMaXN0Mi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL09ubHlSZXNvdXJjZXNJblJlc291cmNlTGlzdDIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NzAyZmUwCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL09ubHlSZXNvdXJjZXNJblJlc291cmNlTGlzdDIuamF2YQpAQCAtMCwwICsxLDggQEAKK2NsYXNzIE15Q2xhc3MgeworICBzdGF0aWMgY2xhc3MgTXlSZXNvdXJjZSBpbXBsZW1lbnRzIEF1dG9DbG9zZWFibGUgeyB9CisKKyAgdm9pZCBmKCkgeworICAgIHRyeSAoZmluYWwgTXk8Y2FyZXQ+KSB7CisgICAgfQorICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL09ubHlSZXNvdXJjZXNJblJlc291cmNlTGlzdDJfYWZ0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9Pbmx5UmVzb3VyY2VzSW5SZXNvdXJjZUxpc3QyX2FmdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTcyZDQ4YgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9Pbmx5UmVzb3VyY2VzSW5SZXNvdXJjZUxpc3QyX2FmdGVyLmphdmEKQEAgLTAsMCArMSw4IEBACitjbGFzcyBNeUNsYXNzIHsKKyAgc3RhdGljIGNsYXNzIE15UmVzb3VyY2UgaW1wbGVtZW50cyBBdXRvQ2xvc2VhYmxlIHsgfQorCisgIHZvaWQgZigpIHsKKyAgICB0cnkgKGZpbmFsIE15UmVzb3VyY2U8Y2FyZXQ+KSB7CisgICAgfQorICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL09ubHlSZXNvdXJjZXNJblJlc291cmNlTGlzdDMuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9Pbmx5UmVzb3VyY2VzSW5SZXNvdXJjZUxpc3QzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDVmMTM5NWIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvT25seVJlc291cmNlc0luUmVzb3VyY2VMaXN0My5qYXZhCkBAIC0wLDAgKzEsOCBAQAorY2xhc3MgTXlDbGFzcyB7CisgIHN0YXRpYyBjbGFzcyBNeVJlc291cmNlIGltcGxlbWVudHMgQXV0b0Nsb3NlYWJsZSB7IH0KKworICB2b2lkIGYoKSB7CisgICAgdHJ5IChNeTxjYXJldD4gcikgeworICAgIH0KKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9Pbmx5UmVzb3VyY2VzSW5SZXNvdXJjZUxpc3QzX2FmdGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvT25seVJlc291cmNlc0luUmVzb3VyY2VMaXN0M19hZnRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgwOTkxNjcKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvT25seVJlc291cmNlc0luUmVzb3VyY2VMaXN0M19hZnRlci5qYXZhCkBAIC0wLDAgKzEsOCBAQAorY2xhc3MgTXlDbGFzcyB7CisgIHN0YXRpYyBjbGFzcyBNeVJlc291cmNlIGltcGxlbWVudHMgQXV0b0Nsb3NlYWJsZSB7IH0KKworICB2b2lkIGYoKSB7CisgICAgdHJ5IChNeVJlc291cmNlPGNhcmV0PiByKSB7CisgICAgfQorICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL09ubHlSZXNvdXJjZXNJblJlc291cmNlTGlzdDQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9Pbmx5UmVzb3VyY2VzSW5SZXNvdXJjZUxpc3Q0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzc3MTYzYgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9Pbmx5UmVzb3VyY2VzSW5SZXNvdXJjZUxpc3Q0LmphdmEKQEAgLTAsMCArMSw4IEBACitjbGFzcyBNeUNsYXNzIHsKKyAgc3RhdGljIGNsYXNzIE15UmVzb3VyY2UgaW1wbGVtZW50cyBBdXRvQ2xvc2VhYmxlIHsgfQorCisgIHZvaWQgZigpIHsKKyAgICB0cnkgKE15UmVzb3VyY2UgcjEgPSBudWxsOyBNeTxjYXJldD4pIHsKKyAgICB9CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvT25seVJlc291cmNlc0luUmVzb3VyY2VMaXN0NF9hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL09ubHlSZXNvdXJjZXNJblJlc291cmNlTGlzdDRfYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MTc5MDRlCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL09ubHlSZXNvdXJjZXNJblJlc291cmNlTGlzdDRfYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDggQEAKK2NsYXNzIE15Q2xhc3MgeworICBzdGF0aWMgY2xhc3MgTXlSZXNvdXJjZSBpbXBsZW1lbnRzIEF1dG9DbG9zZWFibGUgeyB9CisKKyAgdm9pZCBmKCkgeworICAgIHRyeSAoTXlSZXNvdXJjZSByMSA9IG51bGw7IE15UmVzb3VyY2U8Y2FyZXQ+KSB7CisgICAgfQorICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL09yQXNzaWdubWVudERmYS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL09yQXNzaWdubWVudERmYS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ4ZmFiOTcKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvT3JBc3NpZ25tZW50RGZhLmphdmEKQEAgLTAsMCArMSwxNyBAQAorY2xhc3MgRm9vIHsKKworICAgIGJvb2xlYW4gZm9vKE9iamVjdCBvLCBmaW5hbCBQYWlyRnVuY3Rpb248U3RyaW5nLCBFbGVtZW50VHlwZSwgQm9vbGVhbj4gZnVuKXsKKyAgICAgICAgYm9vbGVhbiByZXN1bHQgPSB0cnVlOworICAgICAgICByZXN1bHQgfD0gZnVuLmZ1bihwYXRoKTsKKyAgICAgICAgaWYgKG8gaW5zdGFuY2VvZiBTdHJpbmcpIHsKKyAgICAgICAgICAgIG8uc3Vic3Q8Y2FyZXQ+CisgICAgICAgIH0KKyAgICB9CisKKyAgICB2b2lkIGZvbyhTdHJpbmcgcykge30KK30KKworaW50ZXJmYWNlIFBhaXJGdW5jdGlvbjxULCBWLCBVPiB7CisgIFUgZnVuKFQgdCwgViB2KTsKKworfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL09yQXNzaWdubWVudERmYV9hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL09yQXNzaWdubWVudERmYV9hZnRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNlY2MzNjcKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvT3JBc3NpZ25tZW50RGZhX2FmdGVyLmphdmEKQEAgLTAsMCArMSwxNyBAQAorY2xhc3MgRm9vIHsKKworICAgIGJvb2xlYW4gZm9vKE9iamVjdCBvLCBmaW5hbCBQYWlyRnVuY3Rpb248U3RyaW5nLCBFbGVtZW50VHlwZSwgQm9vbGVhbj4gZnVuKXsKKyAgICAgICAgYm9vbGVhbiByZXN1bHQgPSB0cnVlOworICAgICAgICByZXN1bHQgfD0gZnVuLmZ1bihwYXRoKTsKKyAgICAgICAgaWYgKG8gaW5zdGFuY2VvZiBTdHJpbmcpIHsKKyAgICAgICAgICAgICgoU3RyaW5nKSBvKS5zdWJzdHJpbmcoPGNhcmV0PikKKyAgICAgICAgfQorICAgIH0KKworICAgIHZvaWQgZm9vKFN0cmluZyBzKSB7fQorfQorCitpbnRlcmZhY2UgUGFpckZ1bmN0aW9uPFQsIFYsIFU+IHsKKyAgVSBmdW4oVCB0LCBWIHYpOworCit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvT3ZlcndyaXRlR2VuZXJpY3NBZnRlck5ldy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL092ZXJ3cml0ZUdlbmVyaWNzQWZ0ZXJOZXcuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMzc5NTdhCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL092ZXJ3cml0ZUdlbmVyaWNzQWZ0ZXJOZXcuamF2YQpAQCAtMCwwICsxLDYgQEAKK2NsYXNzIEJhciB7CisgIHsKKyAgICBLb288U3RyaW5nPiBocyA9IG5ldyBLbzxjYXJldD48U3RyaW5nWD4oKTsKKyAgfQorfQorY2xhc3MgS29vPFg+IHt9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvT3ZlcndyaXRlR2VuZXJpY3NBZnRlck5ld19hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL092ZXJ3cml0ZUdlbmVyaWNzQWZ0ZXJOZXdfYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45Y2Q5YzFiCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL092ZXJ3cml0ZUdlbmVyaWNzQWZ0ZXJOZXdfYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDYgQEAKK2NsYXNzIEJhciB7CisgIHsKKyAgICBLb288U3RyaW5nPiBocyA9IG5ldyBLb288U3RyaW5nPigpPGNhcmV0PjsKKyAgfQorfQorY2xhc3MgS29vPFg+IHt9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvUGFja2FnZUluQW5ub1BhcmFtLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvUGFja2FnZUluQW5ub1BhcmFtLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2Y3YWQ5OQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9QYWNrYWdlSW5Bbm5vUGFyYW0uamF2YQpAQCAtMCwwICsxLDcgQEAKK0BBbm5vKGphdmEubGE8Y2FyZXQ+KQorcHVibGljIGNsYXNzIE1haW4geworfQorCitAaW50ZXJmYWNlIEFubm8geworICBDbGFzcyB2YWx1ZSgpOworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9QYWNrYWdlSW5Bbm5vUGFyYW1fYWZ0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9QYWNrYWdlSW5Bbm5vUGFyYW1fYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NWM1NWJjCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL1BhY2thZ2VJbkFubm9QYXJhbV9hZnRlci5qYXZhCkBAIC0wLDAgKzEsNyBAQAorQEFubm8oamF2YS5sYW5nLjxjYXJldD4pCitwdWJsaWMgY2xhc3MgTWFpbiB7Cit9CisKK0BpbnRlcmZhY2UgQW5ubyB7CisgIENsYXNzIHZhbHVlKCk7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL1BhY2thZ2VJbk1lbWJlclR5cGUuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9QYWNrYWdlSW5NZW1iZXJUeXBlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTA2NTM0NmUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvUGFja2FnZUluTWVtYmVyVHlwZS5qYXZhCkBAIC0wLDAgKzEsMyBAQAorY2xhc3MgRm9vIHsKKyAgamF2YS5sYTxjYXJldD4KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvUGFja2FnZUluTWVtYmVyVHlwZV9hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL1BhY2thZ2VJbk1lbWJlclR5cGVfYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZGIzOGJiCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL1BhY2thZ2VJbk1lbWJlclR5cGVfYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDMgQEAKK2NsYXNzIEZvbyB7CisgIGphdmEubGFuZy48Y2FyZXQ+Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL1BhY2thZ2VOYW1lZFZhcmlhYmxlQmVmb3JlQXNzaWdubWVudC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL1BhY2thZ2VOYW1lZFZhcmlhYmxlQmVmb3JlQXNzaWdubWVudC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYzNDU1MjAKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvUGFja2FnZU5hbWVkVmFyaWFibGVCZWZvcmVBc3NpZ25tZW50LmphdmEKQEAgLTAsMCArMSwxMCBAQAorcHVibGljIGNsYXNzIEJhciB7CisKKyAgICB7CisgICAgICAgIGludCBhID0gMTsKKyAgICAgICAgT2JqZWN0IGphdmE7CisgICAgICAgIGphdmEuZXE8Y2FyZXQ+CisgICAgICAgIGEgPSAyOworICAgIH0KKworfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL1BhY2thZ2VOYW1lZFZhcmlhYmxlQmVmb3JlQXNzaWdubWVudF9hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL1BhY2thZ2VOYW1lZFZhcmlhYmxlQmVmb3JlQXNzaWdubWVudF9hZnRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjczMzc0YjkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvUGFja2FnZU5hbWVkVmFyaWFibGVCZWZvcmVBc3NpZ25tZW50X2FmdGVyLmphdmEKQEAgLTAsMCArMSwxMCBAQAorcHVibGljIGNsYXNzIEJhciB7CisKKyAgICB7CisgICAgICAgIGludCBhID0gMTsKKyAgICAgICAgT2JqZWN0IGphdmE7CisgICAgICAgIGphdmEuZXF1YWxzKDxjYXJldD4pCisgICAgICAgIGEgPSAyOworICAgIH0KKworfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL1BhY2thZ2VQcmVmaXguamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9QYWNrYWdlUHJlZml4LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWMxZDM2YwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9QYWNrYWdlUHJlZml4LmphdmEKQEAgLTAsMCArMSw3IEBACitwYWNrYWdlIGZvby5iYXIuZ29vOworCitwdWJsaWMgY2xhc3MgQmFyIHsKKyAgICB7CisgICAgICAgIGZvby5iPGNhcmV0PgorICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9QYWNrYWdlUHJlZml4X2FmdGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvUGFja2FnZVByZWZpeF9hZnRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhkZDg1ZGYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvUGFja2FnZVByZWZpeF9hZnRlci5qYXZhCkBAIC0wLDAgKzEsNyBAQAorcGFja2FnZSBmb28uYmFyLmdvbzsKKworcHVibGljIGNsYXNzIEJhciB7CisgICAgeworICAgICAgICBmb28uYmFyLjxjYXJldD4KKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvUHJlZmVyTG9uZ2VyTmFtZXNPcHRpb24uamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9QcmVmZXJMb25nZXJOYW1lc09wdGlvbi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlhZDBmODNmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL1ByZWZlckxvbmdlck5hbWVzT3B0aW9uLmphdmEKQEAgLTAsMCArMSw2IEBACitjbGFzcyBGb28geworICB7CisgICAgQWJjZEVmZ2hJamsgPGNhcmV0PgorICB9CisgIGNsYXNzIEFiY2RFZmdoSWpre30KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9QcmVmZXJUZXN0Q2FzZXMuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9QcmVmZXJUZXN0Q2FzZXMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZjlkZWQ2Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL1ByZWZlclRlc3RDYXNlcy5qYXZhCkBAIC0wLDAgKzEgQEAKK2NsYXNzIEZvbyBleHRlbmRzIFNvbWU8Y2FyZXQ+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL1ByZXNlbGVjdEVkaXRvclNlbGVjdGlvbi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL1ByZXNlbGVjdEVkaXRvclNlbGVjdGlvbi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU0NGFjMWEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvUHJlc2VsZWN0RWRpdG9yU2VsZWN0aW9uLmphdmEKQEAgLTAsMCArMSw3IEBACitwdWJsaWMgY2xhc3MgRm9vQmFyIHsKKworICAgIGludCBhKCkgeworICAgICAgICA8Y2FyZXQ+PHNlbGVjdGlvbj5maW5hbGl6ZTwvc2VsZWN0aW9uPgorICAgIH0KKworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9QcmltaXRpdmVBcnJheUNsYXNzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvUHJpbWl0aXZlQXJyYXlDbGFzcy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJmNzE1NDgKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvUHJpbWl0aXZlQXJyYXlDbGFzcy5qYXZhCkBAIC0wLDAgKzEsNSBAQAorcHJpdmF0ZSBjbGFzcyBab29vb29vbyB7CisgIHsKKyAgICBDbGFzczw/PiBjbHMgPSBieXRlW10uY2xhPGNhcmV0PgorICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvUHJpbWl0aXZlQXJyYXlDbGFzc19hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL1ByaW1pdGl2ZUFycmF5Q2xhc3NfYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZDM4Y2Q2Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL1ByaW1pdGl2ZUFycmF5Q2xhc3NfYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDUgQEAKK3ByaXZhdGUgY2xhc3MgWm9vb29vb28geworICB7CisgICAgQ2xhc3M8Pz4gY2xzID0gYnl0ZVtdLmNsYXNzPGNhcmV0PgorICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvUHJpbWl0aXZlQXJyYXlJbkFubm8uamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9QcmltaXRpdmVBcnJheUluQW5uby5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNmNDQxNzAKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvUHJpbWl0aXZlQXJyYXlJbkFubm8uamF2YQpAQCAtMCwwICsxLDkgQEAKK3ByaXZhdGUgY2xhc3MgWm9vb29vb28geworICBAaW50ZXJmYWNlIEIgeworICAgICAgQ2xhc3M8Pz4gdmFsdWUoKTsKKyAgfQorCisgIEBCKGJ5dGVbXS5jPGNhcmV0PikKKyAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvUHJpbWl0aXZlQXJyYXlJbkFubm9fYWZ0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9QcmltaXRpdmVBcnJheUluQW5ub19hZnRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU5MDU5ZjEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvUHJpbWl0aXZlQXJyYXlJbkFubm9fYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDkgQEAKK3ByaXZhdGUgY2xhc3MgWm9vb29vb28geworICBAaW50ZXJmYWNlIEIgeworICAgICAgQ2xhc3M8Pz4gdmFsdWUoKTsKKyAgfQorCisgIEBCKGJ5dGVbXS5jbGFzczxjYXJldD4pCisgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL1ByaW1pdGl2ZUFycmF5T25seUNsYXNzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvUHJpbWl0aXZlQXJyYXlPbmx5Q2xhc3MuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zY2Y1MGI5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL1ByaW1pdGl2ZUFycmF5T25seUNsYXNzLmphdmEKQEAgLTAsMCArMSw1IEBACitwcml2YXRlIGNsYXNzIFpvb29vb29vIHsKKyAgeworICAgIENsYXNzPD8+IGNscyA9IGJ5dGVbXS5DbGE8Y2FyZXQ+CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9QcmltaXRpdmVBcnJheVdpdGhSQnJhY2UuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9QcmltaXRpdmVBcnJheVdpdGhSQnJhY2UuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZTllMzNlCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL1ByaW1pdGl2ZUFycmF5V2l0aFJCcmFjZS5qYXZhCkBAIC0wLDAgKzEsNSBAQAorcHVibGljIGNsYXNzIEJhciB7CisgICAgeworICAgICAgICBpbnRbXSBhID0gbmV3IGluPGNhcmV0PgorICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvUHJpbWl0aXZlQXJyYXlXaXRoUkJyYWNlX2FmdGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvUHJpbWl0aXZlQXJyYXlXaXRoUkJyYWNlX2FmdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODBmNDM5MgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9QcmltaXRpdmVBcnJheVdpdGhSQnJhY2VfYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDUgQEAKK3B1YmxpYyBjbGFzcyBCYXIgeworICAgIHsKKyAgICAgICAgaW50W10gYSA9IG5ldyBpbnRbPGNhcmV0Pl0KKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL1ByaW1pdGl2ZUNhc3RPdmVyd3JpdGUuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9QcmltaXRpdmVDYXN0T3ZlcndyaXRlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWYxZWZkYgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9QcmltaXRpdmVDYXN0T3ZlcndyaXRlLmphdmEKQEAgLTAsMCArMSw2IEBACitwdWJsaWMgY2xhc3MgWm9vMiB7CisgICAgeworICAgICAgICBieXRlIHYxID0gKGJ5PGNhcmV0PnRlKSAwOworICAgIH0KK30KKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL1ByaW1pdGl2ZUNhc3RPdmVyd3JpdGVfYWZ0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9QcmltaXRpdmVDYXN0T3ZlcndyaXRlX2FmdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTgzOGQwOAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9QcmltaXRpdmVDYXN0T3ZlcndyaXRlX2FmdGVyLmphdmEKQEAgLTAsMCArMSw2IEBACitwdWJsaWMgY2xhc3MgWm9vMiB7CisgICAgeworICAgICAgICBieXRlIHYxID0gKGJ5dGU8Y2FyZXQ+KSAwOworICAgIH0KK30KKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL1ByaW1pdGl2ZUNsYXNzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvUHJpbWl0aXZlQ2xhc3MuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYjY4MmVmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL1ByaW1pdGl2ZUNsYXNzLmphdmEKQEAgLTAsMCArMSw1IEBACitwcml2YXRlIGNsYXNzIFpvb29vb29vIHsKKyAgeworICAgIENsYXNzPD8+IGNscyA9IGJ5dGUuY2xhPGNhcmV0PgorICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvUHJpbWl0aXZlQ2xhc3NfYWZ0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9QcmltaXRpdmVDbGFzc19hZnRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI2OWNkMWUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvUHJpbWl0aXZlQ2xhc3NfYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDUgQEAKK3ByaXZhdGUgY2xhc3MgWm9vb29vb28geworICB7CisgICAgQ2xhc3M8Pz4gY2xzID0gYnl0ZS5jbGFzczxjYXJldD4KKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL1ByaW1pdGl2ZU1ldGhvZFBhcmFtZXRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL1ByaW1pdGl2ZU1ldGhvZFBhcmFtZXRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVlYTNiNzcKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvUHJpbWl0aXZlTWV0aG9kUGFyYW1ldGVyLmphdmEKQEAgLTAsMCArMSwzIEBACitwdWJsaWMgY2xhc3MgRm9vIHsKKyAgT2JqZWN0IGZvbyhibzxjYXJldD4peyB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvUHJpbWl0aXZlTWV0aG9kUGFyYW1ldGVyX2FmdGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvUHJpbWl0aXZlTWV0aG9kUGFyYW1ldGVyX2FmdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDY0OWIyZAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9QcmltaXRpdmVNZXRob2RQYXJhbWV0ZXJfYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDMgQEAKK3B1YmxpYyBjbGFzcyBGb28geworICBPYmplY3QgZm9vKGJvb2xlYW48Y2FyZXQ+KXsgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL1ByaW1pdGl2ZVNxdWFyZUJyYWNrZXQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9QcmltaXRpdmVTcXVhcmVCcmFja2V0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzE1MTNjMQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9QcmltaXRpdmVTcXVhcmVCcmFja2V0LmphdmEKQEAgLTAsMCArMSw1IEBACitjbGFzcyBGb28geworICBkPGNhcmV0PgorCisgIGNsYXNzIGRveiB7fQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9QcmltaXRpdmVTcXVhcmVCcmFja2V0X2FmdGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvUHJpbWl0aXZlU3F1YXJlQnJhY2tldF9hZnRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBiZTYyZmUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvUHJpbWl0aXZlU3F1YXJlQnJhY2tldF9hZnRlci5qYXZhCkBAIC0wLDAgKzEsNSBAQAorY2xhc3MgRm9vIHsKKyAgZG91YmxlWzxjYXJldD5dCisKKyAgY2xhc3MgZG96IHt9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL1ByaW1pdGl2ZVR5cGVzSW5Gb3JMb29wLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvUHJpbWl0aXZlVHlwZXNJbkZvckxvb3AuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNWNlMTM3Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL1ByaW1pdGl2ZVR5cGVzSW5Gb3JMb29wLmphdmEKQEAgLTAsMCArMSw3IEBACitwdWJsaWMgY2xhc3MgRm9vb28geworCisgICAgeworICAgICAgICBmb3IgKGJvbzxjYXJldD54KQorICAgIH0KKworfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL1ByaW1pdGl2ZVR5cGVzSW5Gb3JMb29wMi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL1ByaW1pdGl2ZVR5cGVzSW5Gb3JMb29wMi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFlYjkyZTM4Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL1ByaW1pdGl2ZVR5cGVzSW5Gb3JMb29wMi5qYXZhCkBAIC0wLDAgKzEsNyBAQAorcHVibGljIGNsYXNzIEZvb29vIHsKKworICAgIHsKKyAgICAgICAgZm9yIChib288Y2FyZXQ+eAorICAgIH0KKworfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL1ByaW1pdGl2ZVR5cGVzSW5Gb3JMb29wMy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL1ByaW1pdGl2ZVR5cGVzSW5Gb3JMb29wMy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFkMzhkZWEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvUHJpbWl0aXZlVHlwZXNJbkZvckxvb3AzLmphdmEKQEAgLTAsMCArMSw3IEBACitwdWJsaWMgY2xhc3MgRm9vb28geworCisgICAgeworICAgICAgICBmb3IgKGZpbmFsIGJvbzxjYXJldD54CisgICAgfQorCit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvUHJpbWl0aXZlVHlwZXNJbkZvckxvb3A0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvUHJpbWl0aXZlVHlwZXNJbkZvckxvb3A0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWI3NzdmZQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9QcmltaXRpdmVUeXBlc0luRm9yTG9vcDQuamF2YQpAQCAtMCwwICsxLDcgQEAKK3B1YmxpYyBjbGFzcyBGb29vbyB7CisKKyAgICB7CisgICAgICAgIGZvciAoZmluYWwgYm9vPGNhcmV0PnggeQorICAgIH0KKworfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL1ByaW1pdGl2ZVR5cGVzSW5Gb3JMb29wNS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL1ByaW1pdGl2ZVR5cGVzSW5Gb3JMb29wNS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYyYTE1NjEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvUHJpbWl0aXZlVHlwZXNJbkZvckxvb3A1LmphdmEKQEAgLTAsMCArMSw3IEBACitwdWJsaWMgY2xhc3MgRm9vb28geworCisgICAgeworICAgICAgICBmb3IgKGZpbmFsIGJvbzxjYXJldD54IHkgOiB6KQorICAgIH0KKworfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL1ByaW1pdGl2ZVR5cGVzSW5Gb3JMb29wNi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL1ByaW1pdGl2ZVR5cGVzSW5Gb3JMb29wNi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI2ZmE1NjQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvUHJpbWl0aXZlVHlwZXNJbkZvckxvb3A2LmphdmEKQEAgLTAsMCArMSw3IEBACitwdWJsaWMgY2xhc3MgRm9vb28geworCisgICAgeworICAgICAgICBmb3IgKGZpbmFsIGJvbzxjYXJldD54IHkgPSAwOzspCisgICAgfQorCit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvUHJpbWl0aXZlVHlwZXNJbkZvckxvb3BTcGFjZS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL1ByaW1pdGl2ZVR5cGVzSW5Gb3JMb29wU3BhY2UuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYzY2ZDY3Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL1ByaW1pdGl2ZVR5cGVzSW5Gb3JMb29wU3BhY2UuamF2YQpAQCAtMCwwICsxLDggQEAKK3B1YmxpYyBjbGFzcyBGb29vbyB7CisKKyAgICB7CisgICAgICAgIGludCBpbnRhYWFhOworICAgICAgICBmb3IgKGludDxjYXJldD4pCisgICAgfQorCit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvUHJpbWl0aXZlVHlwZXNJbkZvckxvb3BTcGFjZV9hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL1ByaW1pdGl2ZVR5cGVzSW5Gb3JMb29wU3BhY2VfYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNWIwNGI3Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL1ByaW1pdGl2ZVR5cGVzSW5Gb3JMb29wU3BhY2VfYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDggQEAKK3B1YmxpYyBjbGFzcyBGb29vbyB7CisKKyAgICB7CisgICAgICAgIGludCBpbnRhYWFhOworICAgICAgICBmb3IgKGludCA8Y2FyZXQ+KQorICAgIH0KKworfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL1ByaXZhdGVJbkFub255bW91cy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL1ByaXZhdGVJbkFub255bW91cy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhiNWYyMDAKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvUHJpdmF0ZUluQW5vbnltb3VzLmphdmEKQEAgLTAsMCArMSwxMCBAQAorY2xhc3MgQSB7CisgICAgQSgpIHsKKyAgICAgIG5ldyBSdW5uYWJsZSgpIHsKKyAgICAgICAgICBwcmk8Y2FyZXQ+CisgICAgICB9OworICAgICAgICAKKyAgICB9CisgIAorICBwdWJsaWMgdm9pZCBwcmVwYXJlSW1hZ2UoKSB7fQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL1ByaXZhdGVJbkFub255bW91c19hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL1ByaXZhdGVJbkFub255bW91c19hZnRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI5Yzc3Y2MKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvUHJpdmF0ZUluQW5vbnltb3VzX2FmdGVyLmphdmEKQEAgLTAsMCArMSwxMCBAQAorY2xhc3MgQSB7CisgICAgQSgpIHsKKyAgICAgIG5ldyBSdW5uYWJsZSgpIHsKKyAgICAgICAgICBwcml2YXRlIDxjYXJldD4KKyAgICAgIH07CisgICAgICAgIAorICAgIH0KKyAgCisgIHB1YmxpYyB2b2lkIHByZXBhcmVJbWFnZSgpIHt9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvUHJvcGVydHlSZWZlcmVuY2VQcmVmaXguamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9Qcm9wZXJ0eVJlZmVyZW5jZVByZWZpeC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg1NTRmN2IKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvUHJvcGVydHlSZWZlcmVuY2VQcmVmaXguamF2YQpAQCAtMCwwICsxLDUgQEAKK3B1YmxpYyBjbGFzcyBCZWRhIGV4dGVuZHMgUXVldHphbGNvYXRsIHsKKyAgICB7CisgICAgICAiL2ZvPGNhcmV0PiIKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvUHJvdGVjdGVkRnJvbVN1cGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvUHJvdGVjdGVkRnJvbVN1cGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzBiNTQwOQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9Qcm90ZWN0ZWRGcm9tU3VwZXIuamF2YQpAQCAtMCwwICsxLDExIEBACitjbGFzcyBBeworIGNsYXNzIEJ7CisgIHByb3RlY3RlZCB2b2lkIHh4eCgpe30KKyB9CisKKyBjbGFzcyBDIGV4dGVuZHMgQnsKKyAgeworICAgc3VwZXIuPGNhcmV0PgorICB9CisgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9Qcm90ZWN0ZWRGcm9tU3VwZXIyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvUHJvdGVjdGVkRnJvbVN1cGVyMi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkxOGI1NzEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvUHJvdGVjdGVkRnJvbVN1cGVyMi5qYXZhCkBAIC0wLDAgKzEsMTEgQEAKK2NsYXNzIEF7CisgY2xhc3MgQnsKKyAgcHJvdGVjdGVkIHZvaWQgeHh4KCl7fQorIH0KKworIGNsYXNzIEMgZXh0ZW5kcyBCeworICB7CisgICBCLnN1cGVyLjxjYXJldD4KKyAgfQorIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvUHJvdGVjdGVkSW5hY2Nlc3NpYmxlT25TZWNvbmRJbnZvY2F0aW9uLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvUHJvdGVjdGVkSW5hY2Nlc3NpYmxlT25TZWNvbmRJbnZvY2F0aW9uLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzg1MjNlOAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9Qcm90ZWN0ZWRJbmFjY2Vzc2libGVPblNlY29uZEludm9jYXRpb24uamF2YQpAQCAtMCwwICsxLDkgQEAKK3B1YmxpYyBjbGFzcyBRdWV0emFsY29hdGwgeworICBwcml2YXRlIGludCBfZm9vOworfQorCitwdWJsaWMgY2xhc3MgQmVkYSBleHRlbmRzIFF1ZXR6YWxjb2F0bCB7CisgICAgeworICAgICAgXzxjYXJldD4KKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvUHJvdGVjdGVkSW5hY2Nlc3NpYmxlT25TZWNvbmRJbnZvY2F0aW9uX2FmdGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvUHJvdGVjdGVkSW5hY2Nlc3NpYmxlT25TZWNvbmRJbnZvY2F0aW9uX2FmdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzM2NzI2MgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9Qcm90ZWN0ZWRJbmFjY2Vzc2libGVPblNlY29uZEludm9jYXRpb25fYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDkgQEAKK3B1YmxpYyBjbGFzcyBRdWV0emFsY29hdGwgeworICBwcml2YXRlIGludCBfZm9vOworfQorCitwdWJsaWMgY2xhc3MgQmVkYSBleHRlbmRzIFF1ZXR6YWxjb2F0bCB7CisgICAgeworICAgICAgX2ZvbzxjYXJldD4KKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvUXVhbGlmaWVkTmV3MS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL1F1YWxpZmllZE5ldzEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMDYyNmY3Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL1F1YWxpZmllZE5ldzEuamF2YQpAQCAtMCwwICsxLDExIEBACitjbGFzcyBGb28geworICB7CisgICAgT3V0ZXIgb3V0ZXI7CisgICAgb3V0ZXIubmV3IEk8Y2FyZXQ+CisgIH0KK30KKworY2xhc3MgT3V0ZXJ7CisgIGNsYXNzIElubmVye30KKyAgY2xhc3MgSUlubmVye30KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9RdWFsaWZpZWROZXcyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvUXVhbGlmaWVkTmV3Mi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjljNGY3MTkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvUXVhbGlmaWVkTmV3Mi5qYXZhCkBAIC0wLDAgKzEsMTEgQEAKK2NsYXNzIEZvbyB7CisgIHsKKyAgICBPdXRlciBvdXRlcjsKKyAgICBvdXRlci5uZXcgPGNhcmV0PgorICB9Cit9CisKK2NsYXNzIE91dGVyeworICBjbGFzcyBJbm5lcnt9CisgIGNsYXNzIEFuSW5uZXJ7fQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL1F1YWxpZmllckFzUGFja2FnZS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL1F1YWxpZmllckFzUGFja2FnZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFmMDc0ODUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvUXVhbGlmaWVyQXNQYWNrYWdlLmphdmEKQEAgLTAsMCArMSwxMCBAQAoraW1wb3J0IGphdmEudXRpbC5MaXN0OworCitwdWJsaWMgY2xhc3MgRm9vQmFyIHsKKworICAgIHsKKyAgICAgICAgTGlzdDxTdHJpbmc+IGphdmE7CisgICAgICAgIGphdmEuYWRkQWw8Y2FyZXQ+bGxsKCk7CisgICAgfQorCit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL1F1YWxpZmllckFzUGFja2FnZTIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9RdWFsaWZpZXJBc1BhY2thZ2UyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2M3ZDFmOQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9RdWFsaWZpZXJBc1BhY2thZ2UyLmphdmEKQEAgLTAsMCArMSwxMCBAQAoraW1wb3J0IGphdmEudXRpbC5MaXN0OworCitwdWJsaWMgY2xhc3MgRm9vQmFyIHsKKworICAgIHsKKyAgICAgICAgTGlzdDxTdHJpbmc+IGphdmE7CisgICAgICAgIGphdmEuYWRkQWw8Y2FyZXQ+IGxsbCgpOworICAgIH0KKworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9RdWFsaWZpZXJBc1BhY2thZ2UyX2FmdGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvUXVhbGlmaWVyQXNQYWNrYWdlMl9hZnRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJiYWMxOGQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvUXVhbGlmaWVyQXNQYWNrYWdlMl9hZnRlci5qYXZhCkBAIC0wLDAgKzEsMTAgQEAKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworcHVibGljIGNsYXNzIEZvb0JhciB7CisKKyAgICB7CisgICAgICAgIExpc3Q8U3RyaW5nPiBqYXZhOworICAgICAgICBqYXZhLmFkZEFsbCg8Y2FyZXQ+KSBsbGwoKTsKKyAgICB9CisKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvUXVhbGlmaWVyQXNQYWNrYWdlMy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL1F1YWxpZmllckFzUGFja2FnZTMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNGU5Y2JiCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL1F1YWxpZmllckFzUGFja2FnZTMuamF2YQpAQCAtMCwwICsxLDEwIEBACitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK3B1YmxpYyBjbGFzcyBGb29CYXIgeworCisgICAgaW50IGEoKSB7CisgICAgICAgIExpc3Q8U3RyaW5nPiBqYXZhOworICAgICAgICBqYXZhLmFkZEFsPGNhcmV0PiBsbGwoKTsKKyAgICB9CisKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvUXVhbGlmaWVyQXNQYWNrYWdlM19hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL1F1YWxpZmllckFzUGFja2FnZTNfYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYjRjZTY2Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL1F1YWxpZmllckFzUGFja2FnZTNfYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDEwIEBACitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK3B1YmxpYyBjbGFzcyBGb29CYXIgeworCisgICAgaW50IGEoKSB7CisgICAgICAgIExpc3Q8U3RyaW5nPiBqYXZhOworICAgICAgICBqYXZhLmFkZEFsbCg8Y2FyZXQ+KSBsbGwoKTsKKyAgICB9CisKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvUXVhbGlmaWVyQXNQYWNrYWdlX2FmdGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvUXVhbGlmaWVyQXNQYWNrYWdlX2FmdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDAzMWFlOGUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvUXVhbGlmaWVyQXNQYWNrYWdlX2FmdGVyLmphdmEKQEAgLTAsMCArMSwxMCBAQAoraW1wb3J0IGphdmEudXRpbC5MaXN0OworCitwdWJsaWMgY2xhc3MgRm9vQmFyIHsKKworICAgIHsKKyAgICAgICAgTGlzdDxTdHJpbmc+IGphdmE7CisgICAgICAgIGphdmEuYWRkQWxsKDxjYXJldD4pbGxsKCk7CisgICAgfQorCit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL1F1YWxpZmllckNhc3RpbmdCZWZvcmVMdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL1F1YWxpZmllckNhc3RpbmdCZWZvcmVMdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ3ODRiMzQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvUXVhbGlmaWVyQ2FzdGluZ0JlZm9yZUx0LmphdmEKQEAgLTAsMCArMSwzNyBAQAorLyoKKyAqIENvcHlyaWdodCAyMDAwLTIwMTEgSmV0QnJhaW5zIHMuci5vLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KK2ltcG9ydCBqYXZheC5zd2luZy4qOworaW1wb3J0IGphdmEuYXd0Lio7CisKK3B1YmxpYyBjbGFzcyBCYXIgeworCisgICAgc3RhdGljIGNsYXNzIENlbGxXcmFwcGVyIHsKKyAgICAgICAgcHVibGljIGJvb2xlYW4gaXNTZXBhcmF0b3IoKSB7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHN0YXRpYyBjbGFzcyBNeVJlbmRlcmVyIGV4dGVuZHMgRGVmYXVsdExpc3RDZWxsUmVuZGVyZXIgeworICAgICAgICBwdWJsaWMgQ29tcG9uZW50IGdldExpc3RDZWxsUmVuZGVyZXJDb21wb25lbnQoSkxpc3QgbGlzdCwgT2JqZWN0IHZhbHVlLCBpbnQgaW5kZXgsIGJvb2xlYW4gcywgYm9vbGVhbiBmb2N1cykgeworICAgICAgICAgICAgYXNzZXJ0IHZhbHVlIGluc3RhbmNlb2YgQ2VsbFdyYXBwZXI7CisKKyAgICAgICAgICAgIHZhbHVlLmlzPGNhcmV0PjxjYXI+CisKKyAgICAgICAgfQorICAgIH0KKworfQorCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvUXVhbGlmaWVyQ2FzdGluZ0JlZm9yZUx0X2FmdGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvUXVhbGlmaWVyQ2FzdGluZ0JlZm9yZUx0X2FmdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTA5NWMyYgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9RdWFsaWZpZXJDYXN0aW5nQmVmb3JlTHRfYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDM3IEBACisvKgorICogQ29weXJpZ2h0IDIwMDAtMjAxMSBKZXRCcmFpbnMgcy5yLm8uCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworaW1wb3J0IGphdmF4LnN3aW5nLio7CitpbXBvcnQgamF2YS5hd3QuKjsKKworcHVibGljIGNsYXNzIEJhciB7CisKKyAgICBzdGF0aWMgY2xhc3MgQ2VsbFdyYXBwZXIgeworICAgICAgICBwdWJsaWMgYm9vbGVhbiBpc1NlcGFyYXRvcigpIHsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgfQorCisgICAgc3RhdGljIGNsYXNzIE15UmVuZGVyZXIgZXh0ZW5kcyBEZWZhdWx0TGlzdENlbGxSZW5kZXJlciB7CisgICAgICAgIHB1YmxpYyBDb21wb25lbnQgZ2V0TGlzdENlbGxSZW5kZXJlckNvbXBvbmVudChKTGlzdCBsaXN0LCBPYmplY3QgdmFsdWUsIGludCBpbmRleCwgYm9vbGVhbiBzLCBib29sZWFuIGZvY3VzKSB7CisgICAgICAgICAgICBhc3NlcnQgdmFsdWUgaW5zdGFuY2VvZiBDZWxsV3JhcHBlcjsKKworICAgICAgICAgICAgKChDZWxsV3JhcHBlcikgdmFsdWUpLmlzU2VwYXJhdG9yKCk8Y2FyZXQ+PGNhcj4KKworICAgICAgICB9CisgICAgfQorCit9CisKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9RdWFsaWZpZXJDYXN0aW5nV2l0aFVua25vd25Bc3NpZ25tZW50cy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL1F1YWxpZmllckNhc3RpbmdXaXRoVW5rbm93bkFzc2lnbm1lbnRzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTlkNDQ5OAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9RdWFsaWZpZXJDYXN0aW5nV2l0aFVua25vd25Bc3NpZ25tZW50cy5qYXZhCkBAIC0wLDAgKzEsMjQgQEAKK2ltcG9ydCBqYXZheC5zd2luZy4qOworaW1wb3J0IGphdmEuYXd0Lio7CisKK3B1YmxpYyBjbGFzcyBCYXIgeworCisgICAgc3RhdGljIGNsYXNzIENlbGxXcmFwcGVyIHsKKyAgICAgICAgcHVibGljIGJvb2xlYW4gaXNTZXBhcmF0b3IoKSB7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHN0YXRpYyBjbGFzcyBNeVJlbmRlcmVyIGV4dGVuZHMgRGVmYXVsdExpc3RDZWxsUmVuZGVyZXIgeworICAgICAgICBwdWJsaWMgQ29tcG9uZW50IGdldExpc3RDZWxsUmVuZGVyZXJDb21wb25lbnQoSkxpc3QgbGlzdCwgT2JqZWN0IHZhbHVlLCBpbnQgaW5kZXgsIGJvb2xlYW4gcywgYm9vbGVhbiBmb2N1cykgeworICAgICAgICAgICAgYXNzZXJ0IHZhbHVlIGluc3RhbmNlb2YgQ2VsbFdyYXBwZXI7CisKKyAgICAgICAgICAgIHZhbHVlLmlzPGNhcmV0PgorCisgICAgICAgICAgICBteVNlbGVjdGVkID0gaXNTZWxlY3RlZDsKKworICAgICAgICB9CisgICAgfQorCit9CisKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9RdWFsaWZpZXJDYXN0aW5nV2l0aFVua25vd25Bc3NpZ25tZW50c19hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL1F1YWxpZmllckNhc3RpbmdXaXRoVW5rbm93bkFzc2lnbm1lbnRzX2FmdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzA1NWZkYgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9RdWFsaWZpZXJDYXN0aW5nV2l0aFVua25vd25Bc3NpZ25tZW50c19hZnRlci5qYXZhCkBAIC0wLDAgKzEsMjQgQEAKK2ltcG9ydCBqYXZheC5zd2luZy4qOworaW1wb3J0IGphdmEuYXd0Lio7CisKK3B1YmxpYyBjbGFzcyBCYXIgeworCisgICAgc3RhdGljIGNsYXNzIENlbGxXcmFwcGVyIHsKKyAgICAgICAgcHVibGljIGJvb2xlYW4gaXNTZXBhcmF0b3IoKSB7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHN0YXRpYyBjbGFzcyBNeVJlbmRlcmVyIGV4dGVuZHMgRGVmYXVsdExpc3RDZWxsUmVuZGVyZXIgeworICAgICAgICBwdWJsaWMgQ29tcG9uZW50IGdldExpc3RDZWxsUmVuZGVyZXJDb21wb25lbnQoSkxpc3QgbGlzdCwgT2JqZWN0IHZhbHVlLCBpbnQgaW5kZXgsIGJvb2xlYW4gcywgYm9vbGVhbiBmb2N1cykgeworICAgICAgICAgICAgYXNzZXJ0IHZhbHVlIGluc3RhbmNlb2YgQ2VsbFdyYXBwZXI7CisKKyAgICAgICAgICAgICgoQ2VsbFdyYXBwZXIpIHZhbHVlKS5pc1NlcGFyYXRvcigpPGNhcmV0PgorCisgICAgICAgICAgICBteVNlbGVjdGVkID0gaXNTZWxlY3RlZDsKKworICAgICAgICB9CisgICAgfQorCit9CisKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9RdWFsaWZ5SW5uZXJNZW1iZXJzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvUXVhbGlmeUlubmVyTWVtYmVycy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI0ZTkwZjUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvUXVhbGlmeUlubmVyTWVtYmVycy5qYXZhCkBAIC0wLDAgKzEsMTEgQEAKK2NsYXNzIEMxIHsKKyBzdGF0aWMgZW51bSBFIHsKKyAgIEZPTywgQkFBQUFBQUFBQVI7CisgfQorfQorCitjbGFzcyBDMiB7CisgIHZvaWQgZigpIHsKKyAgICAgIEMxLkUgZSA9IEJBQUFBPGNhcmV0PjsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL1F1YWxpZnlJbm5lck1lbWJlcnNfYWZ0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9RdWFsaWZ5SW5uZXJNZW1iZXJzX2FmdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODJkMGM1NwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9RdWFsaWZ5SW5uZXJNZW1iZXJzX2FmdGVyLmphdmEKQEAgLTAsMCArMSwxMSBAQAorY2xhc3MgQzEgeworIHN0YXRpYyBlbnVtIEUgeworICAgRk9PLCBCQUFBQUFBQUFBUjsKKyB9Cit9CisKK2NsYXNzIEMyIHsKKyAgdm9pZCBmKCkgeworICAgICAgQzEuRSBlID0gQzEuRS5CQUFBQUFBQUFBUjxjYXJldD47CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9SZWZlcmVuY2VQYXJhbWV0ZXJzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvUmVmZXJlbmNlUGFyYW1ldGVycy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdlY2E5MjYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvUmVmZXJlbmNlUGFyYW1ldGVycy5qYXZhCkBAIC0wLDAgKzEsNyBAQAorY2xhc3MgQUFBQnt9CitjbGFzcyBBQUFBeworIHsKKyBpbnQgQUFBQUFBQUFBID0gMDsKKyBMaXN0PEFBPGNhcmV0Pj4KKyB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL1JlcGxhY2VUaGlzV2l0aFN1cGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvUmVwbGFjZVRoaXNXaXRoU3VwZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NTNhNGNlCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL1JlcGxhY2VUaGlzV2l0aFN1cGVyLmphdmEKQEAgLTAsMCArMSwxMCBAQAorcHVibGljIGNsYXNzIFV0aWwgeworICBwdWJsaWMgVXRpbChTdHJpbmcgYSkgeworICAgIHRoaXMuYSA9IGE7CisgIH0KKworICBwdWJsaWMgVXRpbCgpIHsKKyAgICBzdTxjYXJldD50aGlzKCIyIik7CisgIH0KKworfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL1JlcGxhY2VUaGlzV2l0aFN1cGVyX0FmdGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvUmVwbGFjZVRoaXNXaXRoU3VwZXJfQWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYWU5MWQ4Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL1JlcGxhY2VUaGlzV2l0aFN1cGVyX0FmdGVyLmphdmEKQEAgLTAsMCArMSwxMCBAQAorcHVibGljIGNsYXNzIFV0aWwgeworICBwdWJsaWMgVXRpbChTdHJpbmcgYSkgeworICAgIHRoaXMuYSA9IGE7CisgIH0KKworICBwdWJsaWMgVXRpbCgpIHsKKyAgICBzdXBlcig8Y2FyZXQ+IjIiKTsKKyAgfQorCit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvUmVzb3VyY2VQYXJlbnRJblJlc291cmNlTGlzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL1Jlc291cmNlUGFyZW50SW5SZXNvdXJjZUxpc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMzFlYWEyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL1Jlc291cmNlUGFyZW50SW5SZXNvdXJjZUxpc3QuamF2YQpAQCAtMCwwICsxLDEwIEBACitjbGFzcyBNeUNsYXNzIHsKKyAgc3RhdGljIGNsYXNzIElubmVyUmVzb3VyY2UgaW1wbGVtZW50cyBBdXRvQ2xvc2VhYmxlIHsgfQorfQorY2xhc3MgTXlPdXRlclJlc291cmNlIGltcGxlbWVudHMgQXV0b0Nsb3NlYWJsZSB7IH0KK2NsYXNzIE1haW4geworICB2b2lkIGYoKSB7CisgICAgdHJ5IChNeTxjYXJldD4gcikgeworICAgIH0KKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9SZXNvdXJjZVBhcmVudEluUmVzb3VyY2VMaXN0X2FmdGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvUmVzb3VyY2VQYXJlbnRJblJlc291cmNlTGlzdF9hZnRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNlNDhmMGEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvUmVzb3VyY2VQYXJlbnRJblJlc291cmNlTGlzdF9hZnRlci5qYXZhCkBAIC0wLDAgKzEsMTAgQEAKK2NsYXNzIE15Q2xhc3MgeworICBzdGF0aWMgY2xhc3MgSW5uZXJSZXNvdXJjZSBpbXBsZW1lbnRzIEF1dG9DbG9zZWFibGUgeyB9Cit9CitjbGFzcyBNeU91dGVyUmVzb3VyY2UgaW1wbGVtZW50cyBBdXRvQ2xvc2VhYmxlIHsgfQorY2xhc3MgTWFpbiB7CisgIHZvaWQgZigpIHsKKyAgICB0cnkgKE15Q2xhc3M8Y2FyZXQ+IHIpIHsKKyAgICB9CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvUmV0dXJuSW5DYXNlLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvUmV0dXJuSW5DYXNlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmZmY2RiMAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9SZXR1cm5JbkNhc2UuamF2YQpAQCAtMCwwICsxLDcgQEAKK3B1YmxpYyBjbGFzcyBEZW1vIHsKKyAgICB7CisgICAgICAgIHN3aXRjaCh4KSB7CisgICAgICAgICAgICBjYXNlIHk6IHJldDxjYXJldD4KKyAgICAgICAgfQorICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9SZXR1cm5JbkNhc2VfYWZ0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9SZXR1cm5JbkNhc2VfYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YTE3ZjI1Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL1JldHVybkluQ2FzZV9hZnRlci5qYXZhCkBAIC0wLDAgKzEsNyBAQAorcHVibGljIGNsYXNzIERlbW8geworICAgIHsKKyAgICAgICAgc3dpdGNoKHgpIHsKKyAgICAgICAgICAgIGNhc2UgeTogcmV0dXJuPGNhcmV0PgorICAgICAgICB9CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL1JldHVybmluZ1R5cGVWYXJpYWJsZS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL1JldHVybmluZ1R5cGVWYXJpYWJsZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ5ZWUxODkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvUmV0dXJuaW5nVHlwZVZhcmlhYmxlLmphdmEKQEAgLTAsMCArMSwzIEBACitwdWJsaWMgY2xhc3MgQmVkYSB7CisgICAgcHVibGljIDxUb29vbz4gVG9vbzxjYXJldD4KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9SZXR1cm5pbmdUeXBlVmFyaWFibGUyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvUmV0dXJuaW5nVHlwZVZhcmlhYmxlMi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlkZDcwNTkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvUmV0dXJuaW5nVHlwZVZhcmlhYmxlMi5qYXZhCkBAIC0wLDAgKzEsMyBAQAorcHVibGljIGNsYXNzIEJlZGEgeworICAgIHB1YmxpYyA8VG9vb28+IFRvb288Y2FyZXQ+IHgKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9SZXR1cm5pbmdUeXBlVmFyaWFibGUyX2FmdGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvUmV0dXJuaW5nVHlwZVZhcmlhYmxlMl9hZnRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRmODQ2ZWEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvUmV0dXJuaW5nVHlwZVZhcmlhYmxlMl9hZnRlci5qYXZhCkBAIC0wLDAgKzEsMyBAQAorcHVibGljIGNsYXNzIEJlZGEgeworICAgIHB1YmxpYyA8VG9vb28+IFRvb29vPGNhcmV0PiB4Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvUmV0dXJuaW5nVHlwZVZhcmlhYmxlMy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL1JldHVybmluZ1R5cGVWYXJpYWJsZTMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NzVjZTIwCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL1JldHVybmluZ1R5cGVWYXJpYWJsZTMuamF2YQpAQCAtMCwwICsxLDMgQEAKK3B1YmxpYyBjbGFzcyBCZWRhIHsKKyAgICBwdWJsaWMgPFRvb29vPiBUb29vPGNhcmV0PiBhKCkKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9SZXR1cm5pbmdUeXBlVmFyaWFibGUzX2FmdGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvUmV0dXJuaW5nVHlwZVZhcmlhYmxlM19hZnRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMzODJhNTdjCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL1JldHVybmluZ1R5cGVWYXJpYWJsZTNfYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDMgQEAKK3B1YmxpYyBjbGFzcyBCZWRhIHsKKyAgICBwdWJsaWMgPFRvb29vPiBUb29vbzxjYXJldD4gYSgpCit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvUmV0dXJuaW5nVHlwZVZhcmlhYmxlX2FmdGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvUmV0dXJuaW5nVHlwZVZhcmlhYmxlX2FmdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTkwNDRiNmIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvUmV0dXJuaW5nVHlwZVZhcmlhYmxlX2FmdGVyLmphdmEKQEAgLTAsMCArMSwzIEBACitwdWJsaWMgY2xhc3MgQmVkYSB7CisgICAgcHVibGljIDxUb29vbz4gVG9vb288Y2FyZXQ+Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvUmlnaHRTaGlmdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL1JpZ2h0U2hpZnQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MGQwM2YyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL1JpZ2h0U2hpZnQuamF2YQpAQCAtMCwwICsxLDggQEAKK3B1YmxpYyBjbGFzcyBTb21lQ2xhc3MgeworICBPYmplY3QgbXlGaWVsZDE7CisgIE9iamVjdCBteUZpZWxkMjsKKworICB2b2lkIGZvbyhpbnQgcGFyYW0pIHsKKyAgICBpbnQgYSA9IHBhcmFtID4+IG15PGNhcmV0PgorICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvU0NSNzIwOC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL1NDUjcyMDguamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZDUzOTBlCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL1NDUjcyMDguamF2YQpAQCAtMCwwICsxLDkgQEAKK2NsYXNzIEF7CisgIHsKKyAgICB0cnl7ICAgICAgCisgICAgfQorICAgIGNhdGNoKEV4Y2VwdGlvbil7CisgICAgICBhPGNhcmV0PgorICAgIH0KKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9TYW1lTmFtZWRWYXJpYWJsZUluTmVzdGVkQ2xhc3Nlcy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL1NhbWVOYW1lZFZhcmlhYmxlSW5OZXN0ZWRDbGFzc2VzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGI4YzJiYwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9TYW1lTmFtZWRWYXJpYWJsZUluTmVzdGVkQ2xhc3Nlcy5qYXZhCkBAIC0wLDAgKzEsMTEgQEAKK3B1YmxpYyBjbGFzcyBCZWRhIHsKKyAgICBwcml2YXRlIGludCBmZmlkOworCisgICAgY2xhc3MgQWJjIHsKKyAgICAgICAgaW50IGZmaWQ7CisKKyAgICAgICAgeworICAgICAgICAgICAgZmY8Y2FyZXQ+CisgICAgICAgIH0KKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvU2FtZU5hbWVkVmFyaWFibGVJbk5lc3RlZENsYXNzZXNfYWZ0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9TYW1lTmFtZWRWYXJpYWJsZUluTmVzdGVkQ2xhc3Nlc19hZnRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJlZTM1ZWEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvU2FtZU5hbWVkVmFyaWFibGVJbk5lc3RlZENsYXNzZXNfYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDExIEBACitwdWJsaWMgY2xhc3MgQmVkYSB7CisgICAgcHJpdmF0ZSBpbnQgZmZpZDsKKworICAgIGNsYXNzIEFiYyB7CisgICAgICAgIGludCBmZmlkOworCisgICAgICAgIHsKKyAgICAgICAgICAgIGZmaWQ8Y2FyZXQ+CisgICAgICAgIH0KKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvU2FtZVNpZ25hdHVyZS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL1NhbWVTaWduYXR1cmUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YTdmODZkCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL1NhbWVTaWduYXR1cmUuamF2YQpAQCAtMCwwICsxLDExIEBACitpbXBvcnQgamF2YS5pby5GaWxlOworCitjbGFzcyBab28geworICBwcml2YXRlIFpvbyBkZWxlZ2F0ZTsKKworICBwdWJsaWMgdm9pZCBmb28oU3RyaW5nIHMsIEZpbGUgZmlsZSkgeworICB9CisgIHB1YmxpYyB2b2lkIGZvbyhTdHJpbmcgcywgRmlsZSBmaWxlLCBpbnQgYSkgeworICAgIGRlbGVnYXRlLmZvbyhzPGNhcmV0Pik7CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9TYW1lU2lnbmF0dXJlX2FmdGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvU2FtZVNpZ25hdHVyZV9hZnRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI4N2M5ZmUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvU2FtZVNpZ25hdHVyZV9hZnRlci5qYXZhCkBAIC0wLDAgKzEsMTEgQEAKK2ltcG9ydCBqYXZhLmlvLkZpbGU7CisKK2NsYXNzIFpvbyB7CisgIHByaXZhdGUgWm9vIGRlbGVnYXRlOworCisgIHB1YmxpYyB2b2lkIGZvbyhTdHJpbmcgcywgRmlsZSBmaWxlKSB7CisgIH0KKyAgcHVibGljIHZvaWQgZm9vKFN0cmluZyBzLCBGaWxlIGZpbGUsIGludCBhKSB7CisgICAgZGVsZWdhdGUuZm9vKHMsIGZpbGUsIGEpOzxjYXJldD4KKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL1NlYW1sZXNzQ29uc3RhbnQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9TZWFtbGVzc0NvbnN0YW50LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjcwNGZjMQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9TZWFtbGVzc0NvbnN0YW50LmphdmEKQEAgLTAsMCArMSw5IEBACitpbnRlcmZhY2UgQmFyIHsKKyAgYm9vbGVhbiBBQkMgPSAyOworfQorCitjbGFzcyBCYXJJbXBsIGltcGxlbWVudHMgQmFyIHsKKyAgeworICAgIGJvb2xlYW4gYSA9IEE8Y2FyZXQ+enp6OworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL1NlYW1sZXNzQ29uc3RhbnRfYWZ0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9TZWFtbGVzc0NvbnN0YW50X2FmdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWIwOTJkOAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9TZWFtbGVzc0NvbnN0YW50X2FmdGVyLmphdmEKQEAgLTAsMCArMSw5IEBACitpbnRlcmZhY2UgQmFyIHsKKyAgYm9vbGVhbiBBQkMgPSAyOworfQorCitjbGFzcyBCYXJJbXBsIGltcGxlbWVudHMgQmFyIHsKKyAgeworICAgIGJvb2xlYW4gYSA9IEFCQzxjYXJldD56eno7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvU2Vjb25kQW5vbnltb3VzQ2xhc3NQYXJhbWV0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9TZWNvbmRBbm9ueW1vdXNDbGFzc1BhcmFtZXRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJiMTk3MjkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvU2Vjb25kQW5vbnltb3VzQ2xhc3NQYXJhbWV0ZXIuamF2YQpAQCAtMCwwICsxLDEwIEBACitwdWJsaWMgYWJzdHJhY3QgY2xhc3MgWnp6YSB7CisKKyAgICB7CisgICAgICAgIG5ldyBSdW5uYWJsZShoYXNoQ29kZSgpLCBoYTxjYXJldD4pIHsKKworICAgICAgICB9CisgICAgfQorCisKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvU2Vjb25kQW5vbnltb3VzQ2xhc3NQYXJhbWV0ZXJfYWZ0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9TZWNvbmRBbm9ueW1vdXNDbGFzc1BhcmFtZXRlcl9hZnRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQxNjU1ZTkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvU2Vjb25kQW5vbnltb3VzQ2xhc3NQYXJhbWV0ZXJfYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDEwIEBACitwdWJsaWMgYWJzdHJhY3QgY2xhc3MgWnp6YSB7CisKKyAgICB7CisgICAgICAgIG5ldyBSdW5uYWJsZShoYXNoQ29kZSgpLCBoYXNoQ29kZSgpPGNhcmV0PikgeworCisgICAgICAgIH0KKyAgICB9CisKKworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9TZWNvbmRNZXRob2RQYXJhbWV0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9TZWNvbmRNZXRob2RQYXJhbWV0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYmM4ZmUzCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL1NlY29uZE1ldGhvZFBhcmFtZXRlci5qYXZhCkBAIC0wLDAgKzEsMTMgQEAKK3B1YmxpYyBjbGFzcyBBYWEgeworICAgIFN0cmluZyBnZ2V0QWFhKCkgeworCisgICAgfQorCisgICAgdm9pZCBmb28oaW50IGEsIE9iamVjdCBiKSB7CisKKyAgICB9CisKKyAgICB2b2lkIHNhdmUoKSB7CisgICAgICAgIGZvbygyMzksIGdnPGNhcmV0Pik7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9TZWNvbmRNZXRob2RQYXJhbWV0ZXJOYW1lLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvU2Vjb25kTWV0aG9kUGFyYW1ldGVyTmFtZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFlNWFjMzYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvU2Vjb25kTWV0aG9kUGFyYW1ldGVyTmFtZS5qYXZhCkBAIC0wLDAgKzEsNiBAQAorcHVibGljIGNsYXNzIE15Rmlyc3RUZXN0Q2xhc3NGb28geworCisgICAgdm9pZCBmb28oaW50IGEsIEVlZSBlPGNhcmV0Pil7CisgICAgfQorCit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL1NlY29uZE1ldGhvZFBhcmFtZXRlck5hbWVfYWZ0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9TZWNvbmRNZXRob2RQYXJhbWV0ZXJOYW1lX2FmdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjA5NDI5MjEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvU2Vjb25kTWV0aG9kUGFyYW1ldGVyTmFtZV9hZnRlci5qYXZhCkBAIC0wLDAgKzEsNiBAQAorcHVibGljIGNsYXNzIE15Rmlyc3RUZXN0Q2xhc3NGb28geworCisgICAgdm9pZCBmb28oaW50IGEsIEVlZSBlZWU8Y2FyZXQ+KXsKKyAgICB9CisKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvU2Vjb25kTWV0aG9kUGFyYW1ldGVyX2FmdGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvU2Vjb25kTWV0aG9kUGFyYW1ldGVyX2FmdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGY5ZjhhNgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9TZWNvbmRNZXRob2RQYXJhbWV0ZXJfYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDEzIEBACitwdWJsaWMgY2xhc3MgQWFhIHsKKyAgICBTdHJpbmcgZ2dldEFhYSgpIHsKKworICAgIH0KKworICAgIHZvaWQgZm9vKGludCBhLCBPYmplY3QgYikgeworCisgICAgfQorCisgICAgdm9pZCBzYXZlKCkgeworICAgICAgICBmb28oMjM5LCBnZ2V0QWFhKCk8Y2FyZXQ+KTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL1NlY29uZFR5cGVQYXJhbWV0ZXJFeHRlbmRzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvU2Vjb25kVHlwZVBhcmFtZXRlckV4dGVuZHMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZDVhM2MyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL1NlY29uZFR5cGVQYXJhbWV0ZXJFeHRlbmRzLmphdmEKQEAgLTAsMCArMSw2IEBACitpbnRlcmZhY2UgRm9vPFQsVj4ge30KKworICBjbGFzcyBCYXI8VCxWPiB7CisgICAgQmFyKEZvbzw/IGV4dGVuZHMgVCwgPyBleHQ8Y2FyZXQ+PiBmb28pIHt9CisgIH0KKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL1NlY29uZFR5cGVQYXJhbWV0ZXJFeHRlbmRzX2FmdGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvU2Vjb25kVHlwZVBhcmFtZXRlckV4dGVuZHNfYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43Y2Y0Yzg1Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL1NlY29uZFR5cGVQYXJhbWV0ZXJFeHRlbmRzX2FmdGVyLmphdmEKQEAgLTAsMCArMSw2IEBACitpbnRlcmZhY2UgRm9vPFQsVj4ge30KKworICBjbGFzcyBCYXI8VCxWPiB7CisgICAgQmFyKEZvbzw/IGV4dGVuZHMgVCwgPyBleHRlbmRzIDxjYXJldD4+IGZvbykge30KKyAgfQorCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvU2VsZWN0Tm9QYXJhbWV0ZXJTaWduYXR1cmUuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9TZWxlY3ROb1BhcmFtZXRlclNpZ25hdHVyZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUzNmU5OGMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvU2VsZWN0Tm9QYXJhbWV0ZXJTaWduYXR1cmUuamF2YQpAQCAtMCwwICsxLDExIEBACitwdWJsaWMgY2xhc3MgTXlGaXJzdFRlc3RDbGFzc0ZvbyB7CisKKyAgIHZvaWQgZm9vKCkge30KKyAgIHZvaWQgZm9vKGludCBhKSB7fQorICAgdm9pZCBmb3goaW50IGEpIHt9CisKKyAgICB7CisgICAgICAgIG5ldyBNeUZpcnN0VGVzdENsYXNzRm9vKCkuZm88Y2FyZXQ+CisgICAgfQorCit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL1NlbGVjdE5vUGFyYW1ldGVyU2lnbmF0dXJlX2FmdGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvU2VsZWN0Tm9QYXJhbWV0ZXJTaWduYXR1cmVfYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMTEzY2M3Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL1NlbGVjdE5vUGFyYW1ldGVyU2lnbmF0dXJlX2FmdGVyLmphdmEKQEAgLTAsMCArMSwxMSBAQAorcHVibGljIGNsYXNzIE15Rmlyc3RUZXN0Q2xhc3NGb28geworCisgICB2b2lkIGZvbygpIHt9CisgICB2b2lkIGZvbyhpbnQgYSkge30KKyAgIHZvaWQgZm94KGludCBhKSB7fQorCisgICAgeworICAgICAgICBuZXcgTXlGaXJzdFRlc3RDbGFzc0ZvbygpLmZvbygpOzxjYXJldD4KKyAgICB9CisKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvU2ltcGxlLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvU2ltcGxlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGU0MGM4ZAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9TaW1wbGUuamF2YQpAQCAtMCwwICsxLDIwIEBACitjbGFzcyBBIGV4dGVuZHMgQmFzZXsKKyAgaW50IF9maWVsZDsKKyAgdm9pZCBfbWV0aG9kKCl7fQorCisgIHZvaWQgZm9vKCl7CisgICAgaW50IF9sb2NhbDE7CisgICAgaW50IF9sb2NhbDI7CisgICAgXzxjYXJldD4KKyAgICBpbnQgX2xvY2FsMzsKKyAgfQorfQorCitjbGFzcyBCYXNleworICB2b2lkIF9iYXNlTWV0aG9kKCl7fQorICBpbnQgX2Jhc2VGaWVsZDsKKworICBwcml2YXRlIHZvaWQgcHJpdmF0ZU1ldGhvZCgpe30KKyAgcHJpdmF0ZSBpbnQgcHJpdmF0ZUZpZWxkOworfQorCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvU2ltcGxlVmFyaWFibGUuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9TaW1wbGVWYXJpYWJsZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgxMTRmOGMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvU2ltcGxlVmFyaWFibGUuamF2YQpAQCAtMCwwICsxLDQgQEAKK2NsYXNzIEF7CisgICAgQSBhQSA9IG5ldyBBKCk7CisgICAgQSB4ID0gYTxjYXJldD4KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvU2ltcGxlVmFyaWFibGVfYWZ0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9TaW1wbGVWYXJpYWJsZV9hZnRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUyM2U0NjMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvU2ltcGxlVmFyaWFibGVfYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDQgQEAKK2NsYXNzIEF7CisgICAgQSBhQSA9IG5ldyBBKCk7CisgICAgQSB4ID0gYUE8Y2FyZXQ+Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL1NtYXJ0RW50ZXJXcmFwc0NvbnN0cnVjdG9yQ2FsbC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL1NtYXJ0RW50ZXJXcmFwc0NvbnN0cnVjdG9yQ2FsbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlmYjhhYmQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvU21hcnRFbnRlcldyYXBzQ29uc3RydWN0b3JDYWxsLmphdmEKQEAgLTAsMCArMSwxMyBAQAorY2xhc3MgRW50aXR5IHt9CitjbGFzcyBFbnRpdHlCdWlsZGVyIHt9CisKK2NsYXNzIFRlc3RlciB7CisgIHByaXZhdGUgRW50aXR5IGVudGl0eTsKKworICBwcml2YXRlIHZvaWQgYnVpbGQoRW50aXR5QnVpbGRlciBidWlsZGVyKSB7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0MSgpIHsKKyAgICAgIGJ1aTxjYXJldD5uZXcgRW50aXR5QnVpbGRlcigpOworICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvU21hcnRFbnRlcldyYXBzQ29uc3RydWN0b3JDYWxsX2FmdGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvU21hcnRFbnRlcldyYXBzQ29uc3RydWN0b3JDYWxsX2FmdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDNlOTE2OAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9TbWFydEVudGVyV3JhcHNDb25zdHJ1Y3RvckNhbGxfYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDEzIEBACitjbGFzcyBFbnRpdHkge30KK2NsYXNzIEVudGl0eUJ1aWxkZXIge30KKworY2xhc3MgVGVzdGVyIHsKKyAgcHJpdmF0ZSBFbnRpdHkgZW50aXR5OworCisgIHByaXZhdGUgdm9pZCBidWlsZChFbnRpdHlCdWlsZGVyIGJ1aWxkZXIpIHsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3QxKCkgeworICAgICAgYnVpbGQobmV3IEVudGl0eUJ1aWxkZXIoKSk7PGNhcmV0PgorICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvU3BhY2VBZnRlckxvb2t1cFN0cmluZy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL1NwYWNlQWZ0ZXJMb29rdXBTdHJpbmcuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZTY4MDVmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL1NwYWNlQWZ0ZXJMb29rdXBTdHJpbmcuamF2YQpAQCAtMCwwICsxLDkgQEAKK2NsYXNzIEZvbyB7CisKKyAgICB7CisgICAgICAgIFN0cmluZyBhYmM7CisgICAgICAgIFN0cmluZyBhYmNkZWY7CisgICAgICAgIGFiPGNhcmV0PiBkCisgICAgfQorCit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL1NwYWNlQWZ0ZXJMb29rdXBTdHJpbmdfYWZ0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9TcGFjZUFmdGVyTG9va3VwU3RyaW5nX2FmdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTNkNGM3YQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9TcGFjZUFmdGVyTG9va3VwU3RyaW5nX2FmdGVyLmphdmEKQEAgLTAsMCArMSw5IEBACitjbGFzcyBGb28geworCisgICAgeworICAgICAgICBTdHJpbmcgYWJjOworICAgICAgICBTdHJpbmcgYWJjZGVmOworICAgICAgICBhYmMgPGNhcmV0PiBkCisgICAgfQorCit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL1NwYWNlQWZ0ZXJSZXR1cm4uamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9TcGFjZUFmdGVyUmV0dXJuLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGU5NDc3YwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9TcGFjZUFmdGVyUmV0dXJuLmphdmEKQEAgLTAsMCArMSw4IEBACitwdWJsaWMgYWJzdHJhY3QgY2xhc3MgWnp6YSB7CisKKyAgICBpbnQgZm9vKCkgeworICAgICAgICByZXQ8Y2FyZXQ+eAorICAgIH0KKworCit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL1NwYWNlQWZ0ZXJSZXR1cm5fYWZ0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9TcGFjZUFmdGVyUmV0dXJuX2FmdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2IxMmZkNAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9TcGFjZUFmdGVyUmV0dXJuX2FmdGVyLmphdmEKQEAgLTAsMCArMSw4IEBACitwdWJsaWMgYWJzdHJhY3QgY2xhc3MgWnp6YSB7CisKKyAgICBpbnQgZm9vKCkgeworICAgICAgICByZXR1cm4gPGNhcmV0PngKKyAgICB9CisKKworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9TcGFjZXNBcm91bmRFcS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL1NwYWNlc0Fyb3VuZEVxLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjQzMzA4YwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9TcGFjZXNBcm91bmRFcS5qYXZhCkBAIC0wLDAgKzEsNyBAQAorY2xhc3MgQiB7CisgIHZvaWQgbSgpIHsKKyAgICBpbnQgeHh4ID0gMDsKKyAgICBpbnQgeHh5ID0gMDsKKyAgICB4eDxjYXJldD4KKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9TcGFjZXNBcm91bmRFcV9hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL1NwYWNlc0Fyb3VuZEVxX2FmdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjVhN2ZiNgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9TcGFjZXNBcm91bmRFcV9hZnRlci5qYXZhCkBAIC0wLDAgKzEsNyBAQAorY2xhc3MgQiB7CisgIHZvaWQgbSgpIHsKKyAgICBpbnQgeHh4ID0gMDsKKyAgICBpbnQgeHh5ID0gMDsKKyAgICB4eHggPSA8Y2FyZXQ+CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvU3RhdGljSW5uZXJFeHRlbmRpbmdPdXRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL1N0YXRpY0lubmVyRXh0ZW5kaW5nT3V0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MGE3YTA5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL1N0YXRpY0lubmVyRXh0ZW5kaW5nT3V0ZXIuamF2YQpAQCAtMCwwICsxLDcgQEAKK2NsYXNzIEJhciB7CisgICAgcHJpdmF0ZSBzdGF0aWMgY2xhc3MgWm9vb29vb28gZXh0ZW5kcyBCYXIgeworICAgICAgICB7CisgICAgICAgICAgICBab29vbzxjYXJldD4KKyAgICAgICAgfQorICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9TdGF0aWNJbm5lckV4dGVuZGluZ091dGVyX2FmdGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvU3RhdGljSW5uZXJFeHRlbmRpbmdPdXRlcl9hZnRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYwNTcyNDcKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvU3RhdGljSW5uZXJFeHRlbmRpbmdPdXRlcl9hZnRlci5qYXZhCkBAIC0wLDAgKzEsNyBAQAorY2xhc3MgQmFyIHsKKyAgICBwcml2YXRlIHN0YXRpYyBjbGFzcyBab29vb29vbyBleHRlbmRzIEJhciB7CisgICAgICAgIHsKKyAgICAgICAgICAgIFpvb29vb29vPGNhcmV0PgorICAgICAgICB9CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL1N0YXRpY2FsbHlJbXBvcnRlZElubmVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvU3RhdGljYWxseUltcG9ydGVkSW5uZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MjY5MTVjCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL1N0YXRpY2FsbHlJbXBvcnRlZElubmVyLmphdmEKQEAgLTAsMCArMSw5IEBACitpbXBvcnQgc3RhdGljIFV0aWwyLkFJT0lubmVyOworCitwdWJsaWMgY2xhc3MgVXRpbDIgeworICBwdWJsaWMgc3RhdGljIGNsYXNzIEFJT0lubmVyIHt9Cit9CisKK2NsYXNzIFRlc3QgeworICBBSU88Y2FyZXQ+Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL1N0YXRpY2FsbHlJbXBvcnRlZE1ldGhvZHNCZWZvcmVFeHByZXNzaW9uLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvU3RhdGljYWxseUltcG9ydGVkTWV0aG9kc0JlZm9yZUV4cHJlc3Npb24uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMjdjZDk2Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL1N0YXRpY2FsbHlJbXBvcnRlZE1ldGhvZHNCZWZvcmVFeHByZXNzaW9uLmphdmEKQEAgLTAsMCArMSwxMSBAQAoraW1wb3J0IHN0YXRpYyBGb28uYXNzZXJ0Tm90TnVsbDsKKworY2xhc3MgRm9vIHsKKyAgc3RhdGljIHZvaWQgYXNzZXJ0Tm90TnVsbCgpIHt9Cit9CisKK2NsYXNzIEJhciB7CisgIHsKKyAgICBhc25uPGNhcmV0PiBsaXN0cy5nZXQoMCkuc2l6ZSgpID4gMCk7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvU3RhdGljYWxseUltcG9ydGVkTWV0aG9kc0JlZm9yZUV4cHJlc3Npb25fYWZ0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9TdGF0aWNhbGx5SW1wb3J0ZWRNZXRob2RzQmVmb3JlRXhwcmVzc2lvbl9hZnRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJjYzFkNTUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvU3RhdGljYWxseUltcG9ydGVkTWV0aG9kc0JlZm9yZUV4cHJlc3Npb25fYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDExIEBACitpbXBvcnQgc3RhdGljIEZvby5hc3NlcnROb3ROdWxsOworCitjbGFzcyBGb28geworICBzdGF0aWMgdm9pZCBhc3NlcnROb3ROdWxsKCkge30KK30KKworY2xhc3MgQmFyIHsKKyAgeworICAgIGFzc2VydE5vdE51bGwoKTs8Y2FyZXQ+IGxpc3RzLmdldCgwKS5zaXplKCkgPiAwKTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9TdWdnZXN0QWxsVHlwZUFyZ3VtZW50cy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL1N1Z2dlc3RBbGxUeXBlQXJndW1lbnRzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODUzYjhjMAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9TdWdnZXN0QWxsVHlwZUFyZ3VtZW50cy5qYXZhCkBAIC0wLDAgKzEsNSBAQAoraW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOworCitwdWJsaWMgY2xhc3MgQSB7CisgIHByaXZhdGUgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4gbSA9IG5ldyBIYXNoTWFwPFN0PGNhcmV0Pj4oKQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL1N1Z2dlc3RBbGxUeXBlQXJndW1lbnRzX2FmdGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvU3VnZ2VzdEFsbFR5cGVBcmd1bWVudHNfYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMTM1MDg5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL1N1Z2dlc3RBbGxUeXBlQXJndW1lbnRzX2FmdGVyLmphdmEKQEAgLTAsMCArMSw1IEBACitpbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7CisKK3B1YmxpYyBjbGFzcyBBIHsKKyAgcHJpdmF0ZSBIYXNoTWFwPFN0cmluZywgU3RyaW5nPiBtID0gbmV3IEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+KDxjYXJldD4pCit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvU3VnZ2VzdEVtcHR5U2V0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvU3VnZ2VzdEVtcHR5U2V0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzBiODgyMwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9TdWdnZXN0RW1wdHlTZXQuamF2YQpAQCAtMCwwICsxLDcgQEAKK2ltcG9ydCBqYXZhLnV0aWwuU2V0OworCitjbGFzcyBGb28geworICB7CisgICAgU2V0PFN0cmluZz4gcyA9IGVtcHQ8Y2FyZXQ+CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvU3VnZ2VzdEVtcHR5U2V0X2FmdGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvU3VnZ2VzdEVtcHR5U2V0X2FmdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTlmOWNhOQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9TdWdnZXN0RW1wdHlTZXRfYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDggQEAKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbnM7CitpbXBvcnQgamF2YS51dGlsLlNldDsKKworY2xhc3MgRm9vIHsKKyAgeworICAgIFNldDxTdHJpbmc+IHMgPSBDb2xsZWN0aW9ucy5lbXB0eVNldCgpPGNhcmV0PgorICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL1N1Z2dlc3RFeHBlY3RlZFR5cGVNZW1iZXJzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvU3VnZ2VzdEV4cGVjdGVkVHlwZU1lbWJlcnMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMDNhNGYyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL1N1Z2dlc3RFeHBlY3RlZFR5cGVNZW1iZXJzLmphdmEKQEAgLTAsMCArMSwxMCBAQAorY2xhc3MgU3VwZXIgeworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3VwZXIgRk9PID0gbnVsbDsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGJvb2xlYW4gRk9YID0gdHJ1ZTsKK30KKworY2xhc3MgSW50ZXJtZWRpYXRlIHsKKyAgICBTdXBlciBzID0gRk88Y2FyZXQ+Cit9CisKKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL1N1Z2dlc3RFeHBlY3RlZFR5cGVNZW1iZXJzSW5Bbm5vLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvU3VnZ2VzdEV4cGVjdGVkVHlwZU1lbWJlcnNJbkFubm8uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZWVlOWNmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL1N1Z2dlc3RFeHBlY3RlZFR5cGVNZW1iZXJzSW5Bbm5vLmphdmEKQEAgLTAsMCArMSw0IEBACitlbnVtIFRlc3RFbnVtIHsgVEVYVDEsIFRFWFQyIH0KK3B1YmxpYyBAaW50ZXJmYWNlIFRlc3RBbm5vdGF0aW9uIHsgVGVzdEVudW0gdmFsdWUoKTsgfQorCitAVGVzdEFubm90YXRpb24oVGV4PGNhcmV0PikKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvU3VnZ2VzdEV4cGVjdGVkVHlwZU1lbWJlcnNJbkFubm9fYWZ0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9TdWdnZXN0RXhwZWN0ZWRUeXBlTWVtYmVyc0luQW5ub19hZnRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRjMGY0NzgKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvU3VnZ2VzdEV4cGVjdGVkVHlwZU1lbWJlcnNJbkFubm9fYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDQgQEAKK2VudW0gVGVzdEVudW0geyBURVhUMSwgVEVYVDIgfQorcHVibGljIEBpbnRlcmZhY2UgVGVzdEFubm90YXRpb24geyBUZXN0RW51bSB2YWx1ZSgpOyB9CisKK0BUZXN0QW5ub3RhdGlvbihUZXN0RW51bS5URVhUMTxjYXJldD4pClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL1N1Z2dlc3RFeHBlY3RlZFR5cGVNZW1iZXJzSW5DYWxsLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvU3VnZ2VzdEV4cGVjdGVkVHlwZU1lbWJlcnNJbkNhbGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MzRiMWM3Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL1N1Z2dlc3RFeHBlY3RlZFR5cGVNZW1iZXJzSW5DYWxsLmphdmEKQEAgLTAsMCArMSwxMiBAQAorY2xhc3MgU3VwZXIgeworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3VwZXIgRk9PID0gbnVsbDsKK30KKworY2xhc3MgSW50ZXJtZWRpYXRlIHsKKyAgICB2b2lkIGZvbyhTdXBlciBzLCBpbnQgYSkge30KKyAgdm9pZCBiYXIoKSB7CisgICAgZm9vKEZPPGNhcmV0PikKKyAgfQorfQorCisKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9TdWdnZXN0RXhwZWN0ZWRUeXBlTWVtYmVyc0luQ2FsbF9hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL1N1Z2dlc3RFeHBlY3RlZFR5cGVNZW1iZXJzSW5DYWxsX2FmdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmFiNTJlNwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9TdWdnZXN0RXhwZWN0ZWRUeXBlTWVtYmVyc0luQ2FsbF9hZnRlci5qYXZhCkBAIC0wLDAgKzEsMTIgQEAKK2NsYXNzIFN1cGVyIHsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN1cGVyIEZPTyA9IG51bGw7Cit9CisKK2NsYXNzIEludGVybWVkaWF0ZSB7CisgICAgdm9pZCBmb28oU3VwZXIgcywgaW50IGEpIHt9CisgIHZvaWQgYmFyKCkgeworICAgIGZvbyhTdXBlci5GT088Y2FyZXQ+KQorICB9Cit9CisKKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL1N1Z2dlc3RFeHBlY3RlZFR5cGVNZW1iZXJzTm9uSW1wb3J0ZWQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9TdWdnZXN0RXhwZWN0ZWRUeXBlTWVtYmVyc05vbkltcG9ydGVkLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzI5NjgyYwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9TdWdnZXN0RXhwZWN0ZWRUeXBlTWVtYmVyc05vbkltcG9ydGVkLmphdmEKQEAgLTAsMCArMSw3IEBACitjbGFzcyBJbnRlcm1lZGlhdGUgeworICB7CisgICAgZm9vLlVzYWdlLmZvbyhGTzxjYXJldD4pCisgIH0KK30KKworCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvU3VnZ2VzdEV4cGVjdGVkVHlwZU1lbWJlcnNOb25JbXBvcnRlZF9hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL1N1Z2dlc3RFeHBlY3RlZFR5cGVNZW1iZXJzTm9uSW1wb3J0ZWRfYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZjk3NjM2Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL1N1Z2dlc3RFeHBlY3RlZFR5cGVNZW1iZXJzTm9uSW1wb3J0ZWRfYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDkgQEAKK2ltcG9ydCBmb28uU3VwZXI7CisKK2NsYXNzIEludGVybWVkaWF0ZSB7CisgIHsKKyAgICBmb28uVXNhZ2UuZm9vKFN1cGVyLkZPTzxjYXJldD4pCisgIH0KK30KKworCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvU3VnZ2VzdEV4cGVjdGVkVHlwZU1lbWJlcnNfYWZ0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9TdWdnZXN0RXhwZWN0ZWRUeXBlTWVtYmVyc19hZnRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg2ZTg0OGUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvU3VnZ2VzdEV4cGVjdGVkVHlwZU1lbWJlcnNfYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDEwIEBACitjbGFzcyBTdXBlciB7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdXBlciBGT08gPSBudWxsOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgYm9vbGVhbiBGT1ggPSB0cnVlOworfQorCitjbGFzcyBJbnRlcm1lZGlhdGUgeworICAgIFN1cGVyIHMgPSBTdXBlci5GT088Y2FyZXQ+Cit9CisKKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL1N1Z2dlc3RJbmFjY2Vzc2libGVPblNlY29uZEludm9jYXRpb24uamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9TdWdnZXN0SW5hY2Nlc3NpYmxlT25TZWNvbmRJbnZvY2F0aW9uLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTI3YzJkYmMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvU3VnZ2VzdEluYWNjZXNzaWJsZU9uU2Vjb25kSW52b2NhdGlvbi5qYXZhCkBAIC0wLDAgKzEsMTEgQEAKK3B1YmxpYyBjbGFzcyBRdWV0emFsY29hdGwgeworICBwcml2YXRlIHN0YXRpYyBpbnQgX2ZvbzsKKyAgcHVibGljIHN0YXRpYyBpbnQgX2JhcjsKKyAgcHVibGljIHN0YXRpYyBpbnQgX2dvbzsKK30KKworcHVibGljIGNsYXNzIEJlZGEgeworICAgIHsKKyAgICAgIFF1ZXR6YWxjb2F0bC5fPGNhcmV0PgorICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9TdWdnZXN0SW5hY2Nlc3NpYmxlT25TZWNvbmRJbnZvY2F0aW9uX2FmdGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvU3VnZ2VzdEluYWNjZXNzaWJsZU9uU2Vjb25kSW52b2NhdGlvbl9hZnRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ3MDY5ZDAKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvU3VnZ2VzdEluYWNjZXNzaWJsZU9uU2Vjb25kSW52b2NhdGlvbl9hZnRlci5qYXZhCkBAIC0wLDAgKzEsMTEgQEAKK3B1YmxpYyBjbGFzcyBRdWV0emFsY29hdGwgeworICBwcml2YXRlIHN0YXRpYyBpbnQgX2ZvbzsKKyAgcHVibGljIHN0YXRpYyBpbnQgX2JhcjsKKyAgcHVibGljIHN0YXRpYyBpbnQgX2dvbzsKK30KKworcHVibGljIGNsYXNzIEJlZGEgeworICAgIHsKKyAgICAgIFF1ZXR6YWxjb2F0bC5fZm9vPGNhcmV0PgorICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9TdWdnZXN0TWVtYmVyc09mU3RhdGljYWxseUltcG9ydGVkQ2xhc3Nlcy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL1N1Z2dlc3RNZW1iZXJzT2ZTdGF0aWNhbGx5SW1wb3J0ZWRDbGFzc2VzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzQzMTk3NAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9TdWdnZXN0TWVtYmVyc09mU3RhdGljYWxseUltcG9ydGVkQ2xhc3Nlcy5qYXZhCkBAIC0wLDAgKzEsNiBAQAoraW1wb3J0IHN0YXRpYyBmb28uRm9vLmZvbzsKKworY2xhc3MgQmFyIHt7CisgIGZvbygpOworICBiYTxjYXJldD4KK319CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvU3VnZ2VzdE1lbWJlcnNPZlN0YXRpY2FsbHlJbXBvcnRlZENsYXNzZXNVbnF1YWxpZmllZE9ubHkuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9TdWdnZXN0TWVtYmVyc09mU3RhdGljYWxseUltcG9ydGVkQ2xhc3Nlc1VucXVhbGlmaWVkT25seS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIwZjE0MDIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvU3VnZ2VzdE1lbWJlcnNPZlN0YXRpY2FsbHlJbXBvcnRlZENsYXNzZXNVbnF1YWxpZmllZE9ubHkuamF2YQpAQCAtMCwwICsxLDcgQEAKK2ltcG9ydCBmb28uRm9vOworaW1wb3J0IHN0YXRpYyBmb28uRm9vLmZvbzsKKworY2xhc3MgQmFyIHt7CisgIGZvbygpOworICBuZXcgRm9vKCkuYmE8Y2FyZXQ+egorfX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvU3VnZ2VzdE1lbWJlcnNPZlN0YXRpY2FsbHlJbXBvcnRlZENsYXNzZXNVbnF1YWxpZmllZE9ubHlfYWZ0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9TdWdnZXN0TWVtYmVyc09mU3RhdGljYWxseUltcG9ydGVkQ2xhc3Nlc1VucXVhbGlmaWVkT25seV9hZnRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk0NzZiMDkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvU3VnZ2VzdE1lbWJlcnNPZlN0YXRpY2FsbHlJbXBvcnRlZENsYXNzZXNVbnF1YWxpZmllZE9ubHlfYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDcgQEAKK2ltcG9ydCBmb28uRm9vOworaW1wb3J0IHN0YXRpYyBmb28uRm9vLmZvbzsKKworY2xhc3MgQmFyIHt7CisgIGZvbygpOworICBuZXcgRm9vKCkuYmFyKCk7PGNhcmV0PgorfX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvU3VnZ2VzdE1lbWJlcnNPZlN0YXRpY2FsbHlJbXBvcnRlZENsYXNzZXNfYWZ0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9TdWdnZXN0TWVtYmVyc09mU3RhdGljYWxseUltcG9ydGVkQ2xhc3Nlc19hZnRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM5YWZlZTAKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvU3VnZ2VzdE1lbWJlcnNPZlN0YXRpY2FsbHlJbXBvcnRlZENsYXNzZXNfYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDcgQEAKK2ltcG9ydCBzdGF0aWMgZm9vLkZvby5iYXI7CitpbXBvcnQgc3RhdGljIGZvby5Gb28uZm9vOworCitjbGFzcyBCYXIge3sKKyAgZm9vKCk7CisgIGJhcigpOzxjYXJldD4KK319CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvU3VwZXJJbkNvbnN0cnVjdG9yLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvU3VwZXJJbkNvbnN0cnVjdG9yLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGEwMTQ5ZQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9TdXBlckluQ29uc3RydWN0b3IuamF2YQpAQCAtMCwwICsxLDcgQEAKK3B1YmxpYyBjbGFzcyBYeHggeworCisgICAgWHh4KCkgeworICAgICAgICBzdXA8Y2FyZXQ+CisgICAgfQorCit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvU3VwZXJJbkNvbnN0cnVjdG9yV2l0aFBhcmFtcy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL1N1cGVySW5Db25zdHJ1Y3RvcldpdGhQYXJhbXMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZWFlYzE1Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL1N1cGVySW5Db25zdHJ1Y3RvcldpdGhQYXJhbXMuamF2YQpAQCAtMCwwICsxLDcgQEAKK3B1YmxpYyBjbGFzcyBYeHggZXh0ZW5kcyBqYXZhLnV0aWwuQXJyYXlMaXN0IHsKKworICAgIFh4eCgpIHsKKyAgICAgICAgc3VwPGNhcmV0PgorICAgIH0KKworfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL1N1cGVySW5Db25zdHJ1Y3RvcldpdGhQYXJhbXNfYWZ0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9TdXBlckluQ29uc3RydWN0b3JXaXRoUGFyYW1zX2FmdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGE4YWQ5MQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9TdXBlckluQ29uc3RydWN0b3JXaXRoUGFyYW1zX2FmdGVyLmphdmEKQEAgLTAsMCArMSw3IEBACitwdWJsaWMgY2xhc3MgWHh4IGV4dGVuZHMgamF2YS51dGlsLkFycmF5TGlzdCB7CisKKyAgICBYeHgoKSB7CisgICAgICAgIHN1cGVyKDxjYXJldD4pOworICAgIH0KKworfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL1N1cGVySW5Db25zdHJ1Y3Rvcl9hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL1N1cGVySW5Db25zdHJ1Y3Rvcl9hZnRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk5MTIyZWQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvU3VwZXJJbkNvbnN0cnVjdG9yX2FmdGVyLmphdmEKQEAgLTAsMCArMSw3IEBACitwdWJsaWMgY2xhc3MgWHh4IHsKKworICAgIFh4eCgpIHsKKyAgICAgICAgc3VwZXIoKTs8Y2FyZXQ+CisgICAgfQorCit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvU3VwZXJJbk1ldGhvZC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL1N1cGVySW5NZXRob2QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MGU4MGZhCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL1N1cGVySW5NZXRob2QuamF2YQpAQCAtMCwwICsxLDcgQEAKK3B1YmxpYyBjbGFzcyBYeHggeworCisgICAgdm9pZCBmb28oKSB7CisgICAgICAgIHN1cDxjYXJldD4KKyAgICB9CisKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9TdXBlckluTWV0aG9kX2FmdGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvU3VwZXJJbk1ldGhvZF9hZnRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRlNGMxMTIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvU3VwZXJJbk1ldGhvZF9hZnRlci5qYXZhCkBAIC0wLDAgKzEsNyBAQAorcHVibGljIGNsYXNzIFh4eCB7CisKKyAgICB2b2lkIGZvbygpIHsKKyAgICAgICAgc3VwZXI8Y2FyZXQ+CisgICAgfQorCit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvU3VwZXJQcm90ZWN0ZWRNZXRob2QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9TdXBlclByb3RlY3RlZE1ldGhvZC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM1MjIzMzMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvU3VwZXJQcm90ZWN0ZWRNZXRob2QuamF2YQpAQCAtMCwwICsxLDkgQEAKK2NsYXNzIEJhckltcGwgZXh0ZW5kcyBmb28uQmFyIHsKKyAgICB7CisgICAgICAgIG5ldyBSdW5uYWJsZSgpIHsKKyAgICAgICAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKKyAgICAgICAgICAgICAgICBCYXJJbXBsLnN1cGVyLmZvPGNhcmV0PgorICAgICAgICAgICAgfQorICAgICAgICB9OworICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9TdXBlclByb3RlY3RlZE1ldGhvZF9hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL1N1cGVyUHJvdGVjdGVkTWV0aG9kX2FmdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODdiYzM0ZQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9TdXBlclByb3RlY3RlZE1ldGhvZF9hZnRlci5qYXZhCkBAIC0wLDAgKzEsOSBAQAorY2xhc3MgQmFySW1wbCBleHRlbmRzIGZvby5CYXIgeworICAgIHsKKyAgICAgICAgbmV3IFJ1bm5hYmxlKCkgeworICAgICAgICAgICAgcHVibGljIHZvaWQgcnVuKCkgeworICAgICAgICAgICAgICAgIEJhckltcGwuc3VwZXIuZm9vKCk7PGNhcmV0PgorICAgICAgICAgICAgfQorICAgICAgICB9OworICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9Td2l0Y2hDb25zdGFudHNGcm9tUmVmZXJlbmNlZENsYXNzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvU3dpdGNoQ29uc3RhbnRzRnJvbVJlZmVyZW5jZWRDbGFzcy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMwNzg2NTYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvU3dpdGNoQ29uc3RhbnRzRnJvbVJlZmVyZW5jZWRDbGFzcy5qYXZhCkBAIC0wLDAgKzEsMTMgQEAKK2NsYXNzIEZvbyB7CisgIHZvaWQgZm9vKGludCBpKSB7CisgICAgc3dpdGNoIChpKSB7CisgICAgICBjYXNlIENvbnN0YW50cy5CQVIwOiByZXR1cm47CisgICAgICBjYXNlIEI8Y2FyZXQ+OgorICAgIH0KKyAgfQorfQorCitpbnRlcmZhY2UgQ29uc3RhbnRzIHsKKyAgaW50IEJBUjAgPSAwOworICBpbnQgQkFSMSA9IDE7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL1N3aXRjaENvbnN0YW50c0Zyb21SZWZlcmVuY2VkQ2xhc3NfYWZ0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9Td2l0Y2hDb25zdGFudHNGcm9tUmVmZXJlbmNlZENsYXNzX2FmdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDE2NTUwMAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9Td2l0Y2hDb25zdGFudHNGcm9tUmVmZXJlbmNlZENsYXNzX2FmdGVyLmphdmEKQEAgLTAsMCArMSwxMyBAQAorY2xhc3MgRm9vIHsKKyAgdm9pZCBmb28oaW50IGkpIHsKKyAgICBzd2l0Y2ggKGkpIHsKKyAgICAgIGNhc2UgQ29uc3RhbnRzLkJBUjA6IHJldHVybjsKKyAgICAgIGNhc2UgQ29uc3RhbnRzLkJBUjE6PGNhcmV0PgorICAgIH0KKyAgfQorfQorCitpbnRlcmZhY2UgQ29uc3RhbnRzIHsKKyAgaW50IEJBUjAgPSAwOworICBpbnQgQkFSMSA9IDE7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL1N3aXRjaEVudW1MYWJlbC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL1N3aXRjaEVudW1MYWJlbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxZDQxNmQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvU3dpdGNoRW51bUxhYmVsLmphdmEKQEAgLTAsMCArMSwxNSBAQAorY2xhc3MgQSBleHRlbmRzIEJhc2V7CisgIHZvaWQgZm9vKCl7CisgICAgQiB4ID0gbnVsbDsKKyAgICBzd2l0Y2goeCl7CisgICAgICBjYXNlIDxjYXJldD4KKyAgICB9CisgIH0KK30KKworZW51bSBCeworICBBLAorICBCLAorICBDCit9CisKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9TeW5jaHJvbml6ZWRIb25vdXJzQ29kZVN0eWxlLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvU3luY2hyb25pemVkSG9ub3Vyc0NvZGVTdHlsZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIxM2JmOGUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvU3luY2hyb25pemVkSG9ub3Vyc0NvZGVTdHlsZS5qYXZhCkBAIC0wLDAgKzEsNiBAQAorcHVibGljIGNsYXNzIENsaWVudCB7CisgIHB1YmxpYyB2b2lkIHJ1bigpIHsKKyAgICBzeW5jaHJvbmk8Y2FyZXQ+CisKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9TeW5jaHJvbml6ZWRIb25vdXJzQ29kZVN0eWxlX2FmdGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvU3luY2hyb25pemVkSG9ub3Vyc0NvZGVTdHlsZV9hZnRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYzYzM5NWYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvU3luY2hyb25pemVkSG9ub3Vyc0NvZGVTdHlsZV9hZnRlci5qYXZhCkBAIC0wLDAgKzEsNiBAQAorcHVibGljIGNsYXNzIENsaWVudCB7CisgIHB1YmxpYyB2b2lkIHJ1bigpIHsKKyAgICBzeW5jaHJvbml6ZWQgKDxjYXJldD4pCisKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9UYWJJblhtbC54bWwgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvVGFiSW5YbWwueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE5NDYwMWEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvVGFiSW5YbWwueG1sCkBAIC0wLDAgKzEsNSBAQAorPGE+CisgIDxiIGNsYXNzPSJqYXZhLmxhbmcuSW50PGNhcmV0Pnh4eCI+CisKKyAgPC9iPgorPC9hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9UYWJJblhtbDIueG1sIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL1RhYkluWG1sMi54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmZjODdjYwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9UYWJJblhtbDIueG1sCkBAIC0wLDAgKzEsNSBAQAorPGE+CisgIDxiIGNsYXNzPSJqYXZhLmxhbmcuSW50ZTxjYXJldD5oaGhoaGhoaGhoaGhoaGhoaGhoaGhoLmhoaGgiPgorCisgIDwvYj4KKzwvYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvVGFiSW5YbWwyX0FmdGVyLnhtbCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9UYWJJblhtbDJfQWZ0ZXIueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU2MWM0NjYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvVGFiSW5YbWwyX0FmdGVyLnhtbApAQCAtMCwwICsxLDUgQEAKKzxhPgorICA8YiBjbGFzcz0iamF2YS5sYW5nLkludGVnZXI8Y2FyZXQ+LmhoaGgiPgorCisgIDwvYj4KKzwvYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvVGFiSW5YbWxfQWZ0ZXIueG1sIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL1RhYkluWG1sX0FmdGVyLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNWVjN2YwCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL1RhYkluWG1sX0FmdGVyLnhtbApAQCAtMCwwICsxLDUgQEAKKzxhPgorICA8YiBjbGFzcz0iamF2YS5sYW5nLkludGVnZXI8Y2FyZXQ+Ij4KKworICA8L2I+Cis8L2E+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL1RhYlJlcGxhY2VzTWV0aG9kTmFtZVdpdGhMb2NhbFZhcmlhYmxlTmFtZS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL1RhYlJlcGxhY2VzTWV0aG9kTmFtZVdpdGhMb2NhbFZhcmlhYmxlTmFtZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE4MmQ0MGEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvVGFiUmVwbGFjZXNNZXRob2ROYW1lV2l0aExvY2FsVmFyaWFibGVOYW1lLmphdmEKQEAgLTAsMCArMSw2IEBACitjbGFzcyBGb28geworICAgIHZvaWQgZm9vKCkgeworICAgICAgICBPYmplY3QgdGV4dEluZGV4ID0gbnVsbDsKKyAgICAgICAgT2JqZWN0IHAgPSB0STxjYXJldD5lcXVhbHMoMik7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9UYWJSZXBsYWNlc01ldGhvZE5hbWVXaXRoTG9jYWxWYXJpYWJsZU5hbWVfYWZ0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9UYWJSZXBsYWNlc01ldGhvZE5hbWVXaXRoTG9jYWxWYXJpYWJsZU5hbWVfYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NjI3OTExCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL1RhYlJlcGxhY2VzTWV0aG9kTmFtZVdpdGhMb2NhbFZhcmlhYmxlTmFtZV9hZnRlci5qYXZhCkBAIC0wLDAgKzEsNiBAQAorY2xhc3MgRm9vIHsKKyAgICB2b2lkIGZvbygpIHsKKyAgICAgICAgT2JqZWN0IHRleHRJbmRleCA9IG51bGw7CisgICAgICAgIE9iamVjdCBwID0gdGV4dEluZGV4PGNhcmV0PigyKTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL1R3b1NwYWNlc0luUGFyZW5zV2l0aFBhcmFtcy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL1R3b1NwYWNlc0luUGFyZW5zV2l0aFBhcmFtcy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU2ZGRkOTkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvVHdvU3BhY2VzSW5QYXJlbnNXaXRoUGFyYW1zLmphdmEKQEAgLTAsMCArMSw2IEBACitwdWJsaWMgY2xhc3MgTWFpbiB7CisgIHsKKyAgICBNYWluIHY7CisgICAgdi5lcXVhPGNhcmV0PgorICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL1R3b1NwYWNlc0luUGFyZW5zV2l0aFBhcmFtc19hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL1R3b1NwYWNlc0luUGFyZW5zV2l0aFBhcmFtc19hZnRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVlNzBkYzEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvVHdvU3BhY2VzSW5QYXJlbnNXaXRoUGFyYW1zX2FmdGVyLmphdmEKQEAgLTAsMCArMSw2IEBACitwdWJsaWMgY2xhc3MgTWFpbiB7CisgIHsKKyAgICBNYWluIHY7CisgICAgdi5lcXVhbHMoIDxjYXJldD4gKQorICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL1VuYm94ZWRDb25zdGFudHNJbkNhc2UuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9VbmJveGVkQ29uc3RhbnRzSW5DYXNlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2RhNjA3NQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9VbmJveGVkQ29uc3RhbnRzSW5DYXNlLmphdmEKQEAgLTAsMCArMSwxMSBAQAorcHVibGljIGNsYXNzIERlbW8geworICAgIHZvaWQgZm9vKEludGVnZXIgaSl7CisgICAgICAgIHN3aXRjaChpKSB7CisgICAgICAgICAgICBjYXNlIFR5cGVzLkNIPGNhcmV0PgorICAgICAgICB9CisgICAgfQorfQorCitpbnRlcmZhY2UgVHlwZXMgeworICBpbnQgQ0hBUiA9IDI7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL1VuYm94ZWRDb25zdGFudHNJbkNhc2VfYWZ0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9VbmJveGVkQ29uc3RhbnRzSW5DYXNlX2FmdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODUxOTI2MwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9VbmJveGVkQ29uc3RhbnRzSW5DYXNlX2FmdGVyLmphdmEKQEAgLTAsMCArMSwxMSBAQAorcHVibGljIGNsYXNzIERlbW8geworICAgIHZvaWQgZm9vKEludGVnZXIgaSl7CisgICAgICAgIHN3aXRjaChpKSB7CisgICAgICAgICAgICBjYXNlIFR5cGVzLkNIQVI8Y2FyZXQ+CisgICAgICAgIH0KKyAgICB9Cit9CisKK2ludGVyZmFjZSBUeXBlcyB7CisgIGludCBDSEFSID0gMjsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvVW5maW5pc2hlZE1ldGhvZFR5cGVQYXJhbWV0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9VbmZpbmlzaGVkTWV0aG9kVHlwZVBhcmFtZXRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlkZmM4MTcKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvVW5maW5pc2hlZE1ldGhvZFR5cGVQYXJhbWV0ZXIuamF2YQpAQCAtMCwwICsxLDUgQEAKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworCitjbGFzcyBBIHsKKyAgcHVibGljIHN0YXRpYyA8TXlQYXJhbWV0ZXIsIE15U2Vjb25kUGFyYW1ldGVyPiBBcnJheUxpc3Q8TXk8Y2FyZXQ+PgorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9VbmZpbmlzaGVkTWV0aG9kVHlwZVBhcmFtZXRlcjIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9VbmZpbmlzaGVkTWV0aG9kVHlwZVBhcmFtZXRlcjIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jODI0ODlhCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL1VuZmluaXNoZWRNZXRob2RUeXBlUGFyYW1ldGVyMi5qYXZhCkBAIC0wLDAgKzEsNSBAQAoraW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CisKK2NsYXNzIEEgeworICBwdWJsaWMgc3RhdGljIDxNeVBhcmFtZXRlciwgTXlTZWNvbmRQYXJhbWV0ZXI+IE15PGNhcmV0Pj4KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvVW5uZWNlc3NhcnlNZXRob2RNZXJnaW5nLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvVW5uZWNlc3NhcnlNZXRob2RNZXJnaW5nLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTk1MmRhOAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9Vbm5lY2Vzc2FyeU1ldGhvZE1lcmdpbmcuamF2YQpAQCAtMCwwICsxLDggQEAKK2NsYXNzIEZvbyB7CisgICAgdm9pZCBmb2ZvbygpIHt9CisgICAgdm9pZCBmb2ZvbyhpbnQgYSkge30KKworICAgIHsKKyAgICAgICAgZm9mPGNhcmV0Pm8KKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL1ZhcmlhYmxlQ29sb24uamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9WYXJpYWJsZUNvbG9uLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTFlZDRjZgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9WYXJpYWJsZUNvbG9uLmphdmEKQEAgLTAsMCArMSw1IEBACitjbGFzcyBCYXIgeworICBpbnQgZm9vKGludCB6b29vYSwgaW50IHpvb29iKSB7CisgICAgcmV0dXJuIHRydWUgPyB6b288Y2FyZXQ+CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9WYXJpYWJsZUNvbG9uX2FmdGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvVmFyaWFibGVDb2xvbl9hZnRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU3OTA0ZWYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvVmFyaWFibGVDb2xvbl9hZnRlci5qYXZhCkBAIC0wLDAgKzEsNSBAQAorY2xhc3MgQmFyIHsKKyAgaW50IGZvbyhpbnQgem9vb2EsIGludCB6b29vYikgeworICAgIHJldHVybiB0cnVlID8gem9vb2EgOiA8Y2FyZXQ+CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9WYXJpYWJsZVNxdWFyZUJyYWNrZXQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9WYXJpYWJsZVNxdWFyZUJyYWNrZXQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYmZmOWQ5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL1ZhcmlhYmxlU3F1YXJlQnJhY2tldC5qYXZhCkBAIC0wLDAgKzEsNyBAQAorY2xhc3MgRm9vIHsKKyAgeworICAgIGludFtdIGFhYWE7CisgICAgaW50W10gYWFhYjsKKyAgICBhYTxjYXJldD4KKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9WYXJpYWJsZVNxdWFyZUJyYWNrZXRfYWZ0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9WYXJpYWJsZVNxdWFyZUJyYWNrZXRfYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NDUzODY0Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsL1ZhcmlhYmxlU3F1YXJlQnJhY2tldF9hZnRlci5qYXZhCkBAIC0wLDAgKzEsNyBAQAorY2xhc3MgRm9vIHsKKyAgeworICAgIGludFtdIGFhYWE7CisgICAgaW50W10gYWFhYjsKKyAgICBhYWFhWzxjYXJldD5dCisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvV2lsZGNhcmRzSW5Mb29rdXAuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9XaWxkY2FyZHNJbkxvb2t1cC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZhY2Y3MmQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvV2lsZGNhcmRzSW5Mb29rdXAuamF2YQpAQCAtMCwwICsxLDEwIEBACitwdWJsaWMgYWJzdHJhY3QgY2xhc3MgWnp6YSB7CisKKyAgICB7CisgICAgICAgIGludCBhenp6Znp6eiA9IDI7CisgICAgICAgIGludCBmemF6enogPSAyOworICAgICAgICA8Y2FyZXQ+CisgICAgfQorCisKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvV3JpdGVJbkludm9rZUxhdGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvV3JpdGVJbkludm9rZUxhdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjExNjljMgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbC9Xcml0ZUluSW52b2tlTGF0ZXIuamF2YQpAQCAtMCwwICsxLDYgQEAKK2NsYXNzIEZvbyB7CisgIHZvaWQgZigpIHsKKyAgICBsb25nIGZvcnVtSWQ7CisgICAgU3RyaW5nIGZvcnVtTmFtZT1nKGZvcjxjYXJldD4pOworICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWxTb3J0aW5nL0FscGhhU29ydFBhY2thZ2VzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWxTb3J0aW5nL0FscGhhU29ydFBhY2thZ2VzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2NjMzJjMzcKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWxTb3J0aW5nL0FscGhhU29ydFBhY2thZ2VzLmphdmEKQEAgLTAsMCArMSw2IEBACitjbGFzcyBHb28geworICB7CisgICAgbmV3IEZvb3g8Y2FyZXQ+CisgIH0KKworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbFNvcnRpbmcvQ2FzZUluc2Vuc2l0aXZlUHJlZml4TWF0Y2guamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbFNvcnRpbmcvQ2FzZUluc2Vuc2l0aXZlUHJlZml4TWF0Y2guamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MzBkMWJmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsU29ydGluZy9DYXNlSW5zZW5zaXRpdmVQcmVmaXhNYXRjaC5qYXZhCkBAIC0wLDAgKzEsOSBAQAorY2xhc3MgRm9vIHsKKyAgdm9pZCBmb28xKCkge30KKyAgdm9pZCBmb28yKCkge30KKworICB7CisgICAgZm9vPGNhcmV0PgorICB9CisKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWxTb3J0aW5nL0NoYW5nZVByZXNlbGVjdGlvbk9uU2Vjb25kSW52b2NhdGlvbi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsU29ydGluZy9DaGFuZ2VQcmVzZWxlY3Rpb25PblNlY29uZEludm9jYXRpb24uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYzA1ZmU4Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsU29ydGluZy9DaGFuZ2VQcmVzZWxlY3Rpb25PblNlY29uZEludm9jYXRpb24uamF2YQpAQCAtMCwwICsxLDYgQEAKK2NsYXNzIFV0aWwgeworICB7CisgICAgRm9vWm9vPGNhcmV0PgorICB9CisKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWxTb3J0aW5nL0NsYXNzU3RhdGljTWVtYmVyc0luQm9vbGVhbkNvbnRleHQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbFNvcnRpbmcvQ2xhc3NTdGF0aWNNZW1iZXJzSW5Cb29sZWFuQ29udGV4dC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNkNDBhMmYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWxTb3J0aW5nL0NsYXNzU3RhdGljTWVtYmVyc0luQm9vbGVhbkNvbnRleHQuamF2YQpAQCAtMCwwICsxLDE3IEBACitwdWJsaWMgY2xhc3MgRm9vIHsKKyAgICB7CisgICAgICAgIGlmIChCYXIuPGNhcmV0PikKKyAgICB9Cit9CisKK2NsYXNzIEJhciB7CisKKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgdm9pZE1ldGhvZCgpIHt9CisgICAgcHVibGljIHN0YXRpYyBib29sZWFuIGJvb2xlYW5NZXRob2QoKSB7fQorICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgYm9vbGVhbiBCT09MRUFOID0gdHJ1ZTsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIE9iamVjdCBBTl9PQkpFQ1QgPSAiIjsKKworICAgIHB1YmxpYyBzdGF0aWMgY2xhc3MgSW5uZXIge30KKworCit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWxTb3J0aW5nL0NsYXNzU3RhdGljTWVtYmVyc0luVm9pZENvbnRleHQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbFNvcnRpbmcvQ2xhc3NTdGF0aWNNZW1iZXJzSW5Wb2lkQ29udGV4dC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUwZDQwNGQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWxTb3J0aW5nL0NsYXNzU3RhdGljTWVtYmVyc0luVm9pZENvbnRleHQuamF2YQpAQCAtMCwwICsxLDE3IEBACitwdWJsaWMgY2xhc3MgRm9vIHsKKyAgICB7CisgICAgICAgIEJhci48Y2FyZXQ+CisgICAgfQorfQorCitjbGFzcyBCYXIgeworCisgICAgcHVibGljIHN0YXRpYyB2b2lkIHZvaWRNZXRob2QoKSB7fQorICAgIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBib29sZWFuTWV0aG9kKCkge30KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGJvb2xlYW4gQk9PTEVBTiA9IHRydWU7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBPYmplY3QgQU5fT0JKRUNUID0gIiI7CisKKyAgICBwdWJsaWMgc3RhdGljIGNsYXNzIElubmVyIHt9CisKKworfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsU29ydGluZy9Db21tb25QcmVmaXhNb3JlSW1wb3J0YW50VGhhbkV4cGVjdGVkVHlwZS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsU29ydGluZy9Db21tb25QcmVmaXhNb3JlSW1wb3J0YW50VGhhbkV4cGVjdGVkVHlwZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkwYTJmZmIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWxTb3J0aW5nL0NvbW1vblByZWZpeE1vcmVJbXBvcnRhbnRUaGFuRXhwZWN0ZWRUeXBlLmphdmEKQEAgLTAsMCArMSw4IEBACisKK3B1YmxpYyBjbGFzcyBGb28geworICBpbnQgbXlDdXJyZW50U3RlcCA9IG51bGw7CisgIE9iamVjdCBteVN0ZXAgPSBudWxsOworICB2b2lkIGZvbygpIHsKKyAgICBpbnQgYSA9IG15c3Q8Y2FyZXQ+CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWxTb3J0aW5nL0NvbW1vblByZWZpeE1vcmVJbXBvcnRhbnRUaGFuS2luZC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsU29ydGluZy9Db21tb25QcmVmaXhNb3JlSW1wb3J0YW50VGhhbktpbmQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZDBmODEzCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsU29ydGluZy9Db21tb25QcmVmaXhNb3JlSW1wb3J0YW50VGhhbktpbmQuamF2YQpAQCAtMCwwICsxLDEwIEBACitjbGFzcyBQc2lFbGVtZW50IHt9CisKK3B1YmxpYyBjbGFzcyBGb28geworICAKKyAgT2JqZWN0IHBzaUVsZW1lbnQoKSB7fQorICAKKyAgdm9pZCBmb28oKSB7CisgICAgUHNpPGNhcmV0PgorICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsU29ydGluZy9DdXJyZW50Q2xhc3NCZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWxTb3J0aW5nL0N1cnJlbnRDbGFzc0Jlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMjEyMDg1Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsU29ydGluZy9DdXJyZW50Q2xhc3NCZXN0LmphdmEKQEAgLTAsMCArMSw2IEBACitjbGFzcyBYY29kZUNvbmZpZ3VyYWJsZSB7fQorCitjbGFzcyBYY29kZVByb2plY3RUZW1wbGF0ZSB7CisgIFhjb2Q8Y2FyZXQ+CisKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWxTb3J0aW5nL0RlY2xhcmVkTWVtYmVyc0dvRmlyc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbFNvcnRpbmcvRGVjbGFyZWRNZW1iZXJzR29GaXJzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFmNjQ3NGEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWxTb3J0aW5nL0RlY2xhcmVkTWVtYmVyc0dvRmlyc3QuamF2YQpAQCAtMCwwICsxLDE1IEBACitjbGFzcyBGb28geworICB2b2lkIGZyb21TdXBlcigpIHt9CisgIHZvaWQgb3ZlcnJpZGRlbigpIHt9Cit9CisKK2NsYXNzIEZvb0ltcGwgZXh0ZW5kcyBGb28geworICB2b2lkIG92ZXJyaWRkZW4oKSB7fQorICB2b2lkIGZyb21UaGlzKCkge30KK30KKworY2xhc3MgQmFyIHsKKyAgICB7CisgICAgICAgIG5ldyBGb29JbXBsKCkuPGNhcmV0PgorICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbFNvcnRpbmcvRGVlcGVzdFN1cGVyTWV0aG9kU3RhdHMuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbFNvcnRpbmcvRGVlcGVzdFN1cGVyTWV0aG9kU3RhdHMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNDJiN2VhCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsU29ydGluZy9EZWVwZXN0U3VwZXJNZXRob2RTdGF0cy5qYXZhCkBAIC0wLDAgKzEsMTggQEAKK2NsYXNzIEFic3RyYWN0U2V0IHsKKyAgcHVibGljIHZvaWQgYWRkWCgpIHt9CisgIHB1YmxpYyB2b2lkIGFkZFkoKSB7fQorfQorCitjbGFzcyBNeVNldDEgZXh0ZW5kcyBBYnN0cmFjdFNldCB7CisgIHB1YmxpYyB2b2lkIGFkZFgoKSB7fQorfQorY2xhc3MgTXlTZXQyIGV4dGVuZHMgQWJzdHJhY3RTZXQgeworICBwdWJsaWMgdm9pZCBhZGRYKCkge30KK30KKworY2xhc3MgRm9vIHsKKyAgCisgIHZvaWQgZm9vKE15U2V0MSBzZXQxLCBNeVNldDIgc2V0MikgeworICAgIHNldDEuYWQ8Y2FyZXQ+CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWxTb3J0aW5nL0Rpc3ByZWZlckRlY2xhcmVkLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWxTb3J0aW5nL0Rpc3ByZWZlckRlY2xhcmVkLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDJlMGFiYwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbFNvcnRpbmcvRGlzcHJlZmVyRGVjbGFyZWQuamF2YQpAQCAtMCwwICsxLDkgQEAKK3B1YmxpYyBjbGFzcyBBYWFhYWFhIHsKKyAgICBwcml2YXRlIGZpbmFsIFN0cmluZyBhYWE7CisKKyAgICBBYWFhYWFhKFN0cmluZyBhYWJiYikgeworICAgICAgICBhYWEgPSAiIjsKKyAgICAgICAgYWFhID0gdHJ1ZSA/IG51bGwgOiBhYTxjYXJldD4KKyAgICB9CisKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbFNvcnRpbmcvRGlzcHJlZmVyRGVjbGFyZWRPZkV4cGVjdGVkVHlwZS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsU29ydGluZy9EaXNwcmVmZXJEZWNsYXJlZE9mRXhwZWN0ZWRUeXBlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGFjYzBiMQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbFNvcnRpbmcvRGlzcHJlZmVyRGVjbGFyZWRPZkV4cGVjdGVkVHlwZS5qYXZhCkBAIC0wLDAgKzEsOSBAQAorcHVibGljIGNsYXNzIEFhYWFhYWEgeworICAgIHByaXZhdGUgZmluYWwgU3RyaW5nIGFhYTsKKworICAgIEFhYWFhYWEoT2JqZWN0IGFhYmJiKSB7CisgICAgICAgIGFhYSA9ICIiOworICAgICAgICBhYWEgPSB0cnVlID8gbnVsbCA6IGFhPGNhcmV0PgorICAgIH0KKworfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsU29ydGluZy9EaXNwcmVmZXJGaW5hbGl6ZS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsU29ydGluZy9EaXNwcmVmZXJGaW5hbGl6ZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFhZWU3YjcwCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsU29ydGluZy9EaXNwcmVmZXJGaW5hbGl6ZS5qYXZhCkBAIC0wLDAgKzEsNyBAQAorcHVibGljIGNsYXNzIEJhciB7CisKKyAgICB7CisgICAgICAgIGZpbmE8Y2FyZXQ+eAorICAgIH0KKworfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsU29ydGluZy9EaXNwcmVmZXJJbXBscy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsU29ydGluZy9EaXNwcmVmZXJJbXBscy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjczZTgyMDYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWxTb3J0aW5nL0Rpc3ByZWZlckltcGxzLmphdmEKQEAgLTAsMCArMSwxMiBAQAorcHVibGljIGNsYXNzIEFhYWFhYWEgeworICAgIHByaXZhdGUgZmluYWwgU3RyaW5nIGFhYTsKKworICAgIEFhYWFhYWEoT2JqZWN0IGFhYmJiKSB7CisgICAgICAgIFh4PGNhcmV0PgorICAgIH0KKworfQorCitjbGFzcyBYeHhFeCB7fQorY2xhc3MgWHh4SW1wbCB7fQorY2xhc3MgWHh5IHt9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsU29ydGluZy9EaXNwcmVmZXJJbm5lckNsYXNzZXMuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbFNvcnRpbmcvRGlzcHJlZmVySW5uZXJDbGFzc2VzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGIyZTFkMAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbFNvcnRpbmcvRGlzcHJlZmVySW5uZXJDbGFzc2VzLmphdmEKQEAgLTAsMCArMSwxNCBAQAorYWJzdHJhY3QgY2xhc3MgQmFzZSB7CisgICAgcHVibGljIHN0YXRpYyBAaW50ZXJmYWNlIElmTm90UGFyc2VkIHt9CisKKyAgICBzdGF0aWMgY2xhc3MgWCB7fQorfQorCitjbGFzcyBEZXJpdmVkIGV4dGVuZHMgQmFzZSB7CisKK30KK2NsYXNzIEIgeworICAgIHZvaWQgZm9vKERlcml2ZWQgYikgeworICAgICAgICBiLjxjYXJldD4KKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsU29ydGluZy9EaXNwcmVmZXJSZXR1cm5CZWZvcmVTdGF0ZW1lbnQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbFNvcnRpbmcvRGlzcHJlZmVyUmV0dXJuQmVmb3JlU3RhdGVtZW50LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTgxZDQ0OAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbFNvcnRpbmcvRGlzcHJlZmVyUmV0dXJuQmVmb3JlU3RhdGVtZW50LmphdmEKQEAgLTAsMCArMSw3IEBACitjbGFzcyBVdGlsIHsKKyAgdm9pZCBmb28oaW50IHJlYWN0aW9uLCBib29sZWFuIHJlemV0KSB7CisgICAgcmU8Y2FyZXQ+CisgICAgU3lzdGVtLm91dC5wcmludGxuKCk7CisgIH0KKworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbFNvcnRpbmcvRG9Ob3RQcmVmZXJHZXRDbGFzcy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsU29ydGluZy9Eb05vdFByZWZlckdldENsYXNzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzk3NmMwMQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbFNvcnRpbmcvRG9Ob3RQcmVmZXJHZXRDbGFzcy5qYXZhCkBAIC0wLDAgKzEsOCBAQAoraW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOworCitjbGFzcyBVdGlsIHsKKyAgdm9pZCBmb28oaW50IHJlYWN0aW9uLCBib29sZWFuIHJlemV0KSB7CisgICAgbmV3IEhhc2hNYXAoKS5nPGNhcmV0PngKKyAgfQorCit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsU29ydGluZy9Eb250UHJlZmVyUmVjdXJzaXZlTWV0aG9kLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWxTb3J0aW5nL0RvbnRQcmVmZXJSZWN1cnNpdmVNZXRob2QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNmQ5MWVhCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsU29ydGluZy9Eb250UHJlZmVyUmVjdXJzaXZlTWV0aG9kLmphdmEKQEAgLTAsMCArMSw3IEBACitjbGFzcyBGb28geworCisgIHZvaWQgcmVnaXN0ZXIoaW50IHJlZ2lzdHJhcikgeworICAgIHJlZ2k8Y2FyZXQ+CisgIH0KKworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbFNvcnRpbmcvRG9udFByZWZlclJlY3Vyc2l2ZU1ldGhvZDIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbFNvcnRpbmcvRG9udFByZWZlclJlY3Vyc2l2ZU1ldGhvZDIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNjQ2MmFkCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsU29ydGluZy9Eb250UHJlZmVyUmVjdXJzaXZlTWV0aG9kMi5qYXZhCkBAIC0wLDAgKzEsNyBAQAorY2xhc3MgRm9vIHsKKworICBpbnQgcmVnaXN0ZXIoKSB7CisgICAgcmU8Y2FyZXQ+CisgIH0KKworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbFNvcnRpbmcvRG9udFByZXNlbGVjdExhc3RDaG9zZW5XaXRoVW5yZWxhdGVkUHJlZml4LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWxTb3J0aW5nL0RvbnRQcmVzZWxlY3RMYXN0Q2hvc2VuV2l0aFVucmVsYXRlZFByZWZpeC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJmZmQ5MzYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWxTb3J0aW5nL0RvbnRQcmVzZWxlY3RMYXN0Q2hvc2VuV2l0aFVucmVsYXRlZFByZWZpeC5qYXZhCkBAIC0wLDAgKzEsOCBAQAorCitwdWJsaWMgY2xhc3MgRm9vIHsKKyAgT2JqZWN0IG15RXh0ZW5kc0NsYXVzZSA9IG51bGw7CisgIE9iamVjdCBteUNsYXNzID0gbnVsbDsKKyAgdm9pZCBmb28oKSB7CisgICAgbXlleGM8Y2FyZXQ+CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWxTb3J0aW5nL0VxdWFsc1N0YXRzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWxTb3J0aW5nL0VxdWFsc1N0YXRzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDM1YTZjMgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbFNvcnRpbmcvRXF1YWxzU3RhdHMuamF2YQpAQCAtMCwwICsxLDggQEAKK2ltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKKworY2xhc3MgVXRpbCB7CisgIHZvaWQgZm9vKGludCByZWFjdGlvbiwgYm9vbGVhbiByZXpldCkgeworICAgICIiLmVxPGNhcmV0PgorICB9CisKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWxTb3J0aW5nL0V4cGVjdGVkVHlwZUlzTW9yZUltcG9ydGFudFRoYW5DYXNlLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWxTb3J0aW5nL0V4cGVjdGVkVHlwZUlzTW9yZUltcG9ydGFudFRoYW5DYXNlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTVlOWNjMwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbFNvcnRpbmcvRXhwZWN0ZWRUeXBlSXNNb3JlSW1wb3J0YW50VGhhbkNhc2UuamF2YQpAQCAtMCwwICsxLDkgQEAKK2NsYXNzIEZvbyB7CisgIGJvb2xlYW4gRU5BQkxFRDsKKyAgdm9pZCBlbmFibGUoKSB7fQorCisgIHsKKyAgICBpZiAoIWVuPGNhcmV0PikKKyAgfQorCit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsU29ydGluZy9GcW5TdGF0cy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsU29ydGluZy9GcW5TdGF0cy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjliYTM4NDEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWxTb3J0aW5nL0ZxblN0YXRzLmphdmEKQEAgLTAsMCArMSw0IEBACitjbGFzcyBGb28geworICBCYWFhPGNhcmV0PngKKworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbFNvcnRpbmcvR2VuZXJpY01ldGhvZHNXaXRoQm91bmRQYXJhbWV0ZXJzQXJlU3RpbGxCZXR0ZXJUaGFuQ2xhc3NMaXRlcmFsLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWxTb3J0aW5nL0dlbmVyaWNNZXRob2RzV2l0aEJvdW5kUGFyYW1ldGVyc0FyZVN0aWxsQmV0dGVyVGhhbkNsYXNzTGl0ZXJhbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhlNzFjODQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWxTb3J0aW5nL0dlbmVyaWNNZXRob2RzV2l0aEJvdW5kUGFyYW1ldGVyc0FyZVN0aWxsQmV0dGVyVGhhbkNsYXNzTGl0ZXJhbC5qYXZhCkBAIC0wLDAgKzEsMTcgQEAKK3B1YmxpYyBjbGFzcyBTZXJ2aWNlTWFuYWdlciB7CisKKyAgcHVibGljIHN0YXRpYyA8VD4gVCBnZXRTZXJ2aWNlKENsYXNzPFQ+IHNlcnZpY2VDbGFzcykgeworICB9CisKKyAgcHVibGljIHN0YXRpYyA8VD4gVCBnZXRTZXJ2aWNlKFByb2plY3QgcHJvamVjdCwgQ2xhc3M8VD4gc2VydmljZUNsYXNzKSB7CisgIH0KKworfQorCisKK2NsYXNzIEZvbyB7CisgIFN0cmluZyBnZXRGb28oKSB7CisgICAgcmV0dXJuIFNlcnZpY2VNYW5hZ2VyLjxjYXJldD4KKyAgfQorCit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsU29ydGluZy9JZkNvbmRpdGlvblN0YXRzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWxTb3J0aW5nL0lmQ29uZGl0aW9uU3RhdHMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOTNmODEwCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsU29ydGluZy9JZkNvbmRpdGlvblN0YXRzLmphdmEKQEAgLTAsMCArMSwxNCBAQAorY2xhc3MgQWJzdHJhY3RTZXQ8VD4geworICBwdWJsaWMgYm9vbGVhbiBjb250YWlucyhUIHQpIHt9Cit9CisKK2NsYXNzIE15U2V0PFQ+IGV4dGVuZHMgQWJzdHJhY3RTZXQ8VD4geworICBwdWJsaWMgYm9vbGVhbiBjb250YWluc0FsbChDb2xsZWN0aW9uPD8+IGMpIHt9Cit9CisKK3B1YmxpYyBjbGFzcyBGb28geworICBNeVNldDxTdHJpbmc+IHNldDsKKyAgdm9pZCBmb28oKSB7CisgICAgaWYgKHNldC48Y2FyZXQ+CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWxTb3J0aW5nL0ltcGxzQWZ0ZXJOZXcuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbFNvcnRpbmcvSW1wbHNBZnRlck5ldy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFmZGU3MDkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWxTb3J0aW5nL0ltcGxzQWZ0ZXJOZXcuamF2YQpAQCAtMCwwICsxLDEwIEBACitwdWJsaWMgY2xhc3MgQWFhYWFhYSB7CisgICAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgYWFhOworCisgICAgQWFhYWFhYShPYmplY3QgYWFiYmIpIHsKKyAgICAgICAgWHh4IHggPSBuZXcgWHg8Y2FyZXQ+CisgICAgfQorCit9CisKK2NsYXNzIFh4eEltcGwgaW1wbGVtZW50cyBYeHgge30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWxTb3J0aW5nL0pDb21wb25lbnRJbnN0YW5jZU1lbWJlcnMuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbFNvcnRpbmcvSkNvbXBvbmVudEluc3RhbmNlTWVtYmVycy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUxNGFkYzYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWxTb3J0aW5nL0pDb21wb25lbnRJbnN0YW5jZU1lbWJlcnMuamF2YQpAQCAtMCwwICsxLDcgQEAKK2ltcG9ydCBqYXZheC5zd2luZy4qOworCitwdWJsaWMgY2xhc3MgRm9vIHsKKyAgICB7CisgICAgICAgIG5ldyBKUGFuZWwoKS48Y2FyZXQ+CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbFNvcnRpbmcvTG9jYWxWYXJzT3Zlck1ldGhvZHMuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbFNvcnRpbmcvTG9jYWxWYXJzT3Zlck1ldGhvZHMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZGFiY2RlNwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbFNvcnRpbmcvTG9jYWxWYXJzT3Zlck1ldGhvZHMuamF2YQpAQCAtMCwwICsxLDggQEAKK2NsYXNzIFNvbWVDb21wb25lbnQgZXh0ZW5kcyBqYXZheC5zd2luZy5KUGFuZWwgeworICBATnVsbGFibGUKKyAgcHVibGljIFN0cmluZyBnZXRTZWxlY3RlZEl0ZW1TdHJpbmcoKSB7CisgICAgZmluYWwgT2JqZWN0IHZhbHVlID0gZ2V0TGlzdCgpLmdldFNlbGVjdGVkVmFsdWUoKTsKKyAgICByZXR1cm4gdmFsPGNhcmV0PngKKyAgfQorCit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsU29ydGluZy9Ob0V4cGVjdGVkVHlwZUluU3RyaW5nQ29uY2F0ZW5hdGlvbi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsU29ydGluZy9Ob0V4cGVjdGVkVHlwZUluU3RyaW5nQ29uY2F0ZW5hdGlvbi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE3MTg4ZWUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWxTb3J0aW5nL05vRXhwZWN0ZWRUeXBlSW5TdHJpbmdDb25jYXRlbmF0aW9uLmphdmEKQEAgLTAsMCArMSw4IEBACitpbXBvcnQgamF2YS5sYW5nLlN0cmluZzsKKworcHVibGljIGNsYXNzIEZvbyB7CisgIAorICB2b2lkIGZvbyhPYmplY3QgdngpIHsKKyAgICBTdHJpbmcgcyA9ICIiICsgdjxjYXJldD4KKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbFNvcnRpbmcvUHJlZmVyQW5ub3RhdGlvbk1ldGhvZHMuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbFNvcnRpbmcvUHJlZmVyQW5ub3RhdGlvbk1ldGhvZHMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOGRjNzZkCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsU29ydGluZy9QcmVmZXJBbm5vdGF0aW9uTWV0aG9kcy5qYXZhCkBAIC0wLDAgKzEsNyBAQAorQGludGVyZmFjZSBBbm5vIHsKKyAgU3RyaW5nIHZhbHVlKCk7CisgIFN0cmluZyBuYW1lKCk7Cit9CisKK0BBbm5vKDxjYXJldD4pCitjbGFzcyBGb28ge30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWxTb3J0aW5nL1ByZWZlckFwcGxpY2FibGVBbm5vdGF0aW9ucy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsU29ydGluZy9QcmVmZXJBcHBsaWNhYmxlQW5ub3RhdGlvbnMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZTYwODA3Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsU29ydGluZy9QcmVmZXJBcHBsaWNhYmxlQW5ub3RhdGlvbnMuamF2YQpAQCAtMCwwICsxLDIgQEAKK0BUPGNhcmV0PgorQGludGVyZmFjZSBGb28geyB9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWxTb3J0aW5nL1ByZWZlckFwcGxpY2FibGVBbm5vdGF0aW9uc01ldGhvZC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsU29ydGluZy9QcmVmZXJBcHBsaWNhYmxlQW5ub3RhdGlvbnNNZXRob2QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNDVlOGNjCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsU29ydGluZy9QcmVmZXJBcHBsaWNhYmxlQW5ub3RhdGlvbnNNZXRob2QuamF2YQpAQCAtMCwwICsxLDYgQEAKK2NsYXNzIEZvbyB7CisgIEBUPGNhcmV0PgorICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisgICAgCisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWxTb3J0aW5nL1ByZWZlckJldHRlck1hdGNoaW5nQ29uc3RhbnRUb01ldGhvZHMuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbFNvcnRpbmcvUHJlZmVyQmV0dGVyTWF0Y2hpbmdDb25zdGFudFRvTWV0aG9kcy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1NmU3NDcKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWxTb3J0aW5nL1ByZWZlckJldHRlck1hdGNoaW5nQ29uc3RhbnRUb01ldGhvZHMuamF2YQpAQCAtMCwwICsxLDEwIEBACitjbGFzcyBGb28geworICBTdHJpbmcgcyA9IFV0aWwuc2U8Y2FyZXQ+Cit9CisKK2NsYXNzIFV0aWwgeworICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBzZXJpYWwgPSAic2VyaWFsVmVyc2lvblVJRCI7CisKKyAgcHVibGljIHN0YXRpYyBSdW5uYWJsZSBzdXBlckV4cHJlc3Npb25JbklsbGVnYWxDb250ZXh0KCkge30KKworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbFNvcnRpbmcvUHJlZmVyQ2xhc3NTdGF0aWNNZW1iZXJzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWxTb3J0aW5nL1ByZWZlckNsYXNzU3RhdGljTWVtYmVycy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA3MzM0YzIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWxTb3J0aW5nL1ByZWZlckNsYXNzU3RhdGljTWVtYmVycy5qYXZhCkBAIC0wLDAgKzEsMTYgQEAKK2VudW0gWm9vIHsKKyAgICBBLEIsQyxELEUsRixHLEgKK30KKworY2xhc3MgWmFhIHt9CitjbGFzcyBaYWIge30KK2NsYXNzIFphYyB7fQorY2xhc3MgWmFkIHt9CitjbGFzcyBaYWUge30KKworY2xhc3MgQmFyIHsKKworICAgIHsKKyAgICAgICAgWm9vIHogPSBaPGNhcmV0PgorICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWxTb3J0aW5nL1ByZWZlckNsYXNzVG9JdHNDb25zdGFudHMuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbFNvcnRpbmcvUHJlZmVyQ2xhc3NUb0l0c0NvbnN0YW50cy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc1ZWU4N2MKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWxTb3J0aW5nL1ByZWZlckNsYXNzVG9JdHNDb25zdGFudHMuamF2YQpAQCAtMCwwICsxLDggQEAKK2ltcG9ydCBqYXZhLnV0aWwuQ2FsZW5kYXI7CisKK2NsYXNzIFV0aWwgeworICB2b2lkIGZvbygpIHsKKyAgICBDYWxlbmRhci5nZXRJbnN0YW5jZSgpLmdldChDYWxlPGNhcmV0PngpCisgIH0KKworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbFNvcnRpbmcvUHJlZmVyQ2xhc3Nlc0luRXh0ZW5kcy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsU29ydGluZy9QcmVmZXJDbGFzc2VzSW5FeHRlbmRzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWRhOGE1YwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbFNvcnRpbmcvUHJlZmVyQ2xhc3Nlc0luRXh0ZW5kcy5qYXZhCkBAIC0wLDAgKzEsOCBAQAoraW50ZXJmYWNlIEZvb19JbnRmIHt9CitjbGFzcyBGb29DbGFzcyB7fQorCitjbGFzcyBHb28gZXh0ZW5kcyBGb288Y2FyZXQ+IHsKKyAgICBpbnQgYm9vKCkge30KKyAgICBpbnQgZG9vKCkge30KKyAgICBpbnQgZm9vKCkge30KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbFNvcnRpbmcvUHJlZmVyRGVmYXVsdFR5cGVUb0V4cGVjdGVkLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWxTb3J0aW5nL1ByZWZlckRlZmF1bHRUeXBlVG9FeHBlY3RlZC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU3ZmU4MDAKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWxTb3J0aW5nL1ByZWZlckRlZmF1bHRUeXBlVG9FeHBlY3RlZC5qYXZhCkBAIC0wLDAgKzEsMTEgQEAKK2NsYXNzIEZvbyB7CisgICAgU3RyaW5nIGdldE5hbWUoKSB7fQorICAgIEZvbyBnZXROYW1lSWRlbnRpZmllcigpIHt9Cit9CisKK2NsYXNzIEJhciB7CisgICAgdm9pZCBmb28oKSB7CisgICAgICAgRm9vIGY7CisgICAgICAgIGlmICgiYWJjIi5lcXVhbHMoZi5nZXROPGNhcmV0PikpCisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbFNvcnRpbmcvUHJlZmVyRWxzZS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsU29ydGluZy9QcmVmZXJFbHNlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDVhYjI3NAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbFNvcnRpbmcvUHJlZmVyRWxzZS5qYXZhCkBAIC0wLDAgKzEsOCBAQAorY2xhc3MgRm9vIHsKKyAgICB7CisgICAgICAgIE9iamVjdCBlbGVtZW50OworICAgICAgICBpZiAodHJ1ZSkge30KKyAgICAgICAgZWw8Y2FyZXQ+CisgICAgfQorCit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsU29ydGluZy9QcmVmZXJFbnVtQ29uc3RhbnRzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWxTb3J0aW5nL1ByZWZlckVudW1Db25zdGFudHMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYzJlY2Q0Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsU29ydGluZy9QcmVmZXJFbnVtQ29uc3RhbnRzLmphdmEKQEAgLTAsMCArMSwxMSBAQAorcHVibGljIGNsYXNzIEZvbyB7CisgIHZvaWQgbWV0aG9kKE15RW51bSBlKSB7IH0KKworICB7CisgICAgbWV0aG9kKDxjYXJldD4pOworICB9CisKKworfQorCitlbnVtIE15RW51bSB7IGZvbywgYmFyIH0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWxTb3J0aW5nL1ByZWZlckZpZWxkVG9NZXRob2QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbFNvcnRpbmcvUHJlZmVyRmllbGRUb01ldGhvZC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdkMDA1OTIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWxTb3J0aW5nL1ByZWZlckZpZWxkVG9NZXRob2QuamF2YQpAQCAtMCwwICsxLDYgQEAKK3B1YmxpYyBjbGFzcyBGb28geworICBwcml2YXRlIGludCBzaXplOworCisgIHB1YmxpYyBpbnQgc2l6ZSgpIHsgcmV0dXJuIHNpemU7IH0KKworICBwdWJsaWMgYm9vbGVhbiBpc0VtcHR5KCkgeyByZXR1cm4gc2l6ZTxjYXJldD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWxTb3J0aW5nL1ByZWZlckZpbmFsbHlUb0ZpbmFsLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWxTb3J0aW5nL1ByZWZlckZpbmFsbHlUb0ZpbmFsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjdlMTFhNAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbFNvcnRpbmcvUHJlZmVyRmluYWxseVRvRmluYWwuamF2YQpAQCAtMCwwICsxLDYgQEAKK2NsYXNzIEEgeworICB7CisgICAgdHJ5IHt9CisgICAgZmluPGNhcmV0PngKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbFNvcnRpbmcvUHJlZmVySW50ZXJmYWNlc0luSW1wbGVtZW50cy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsU29ydGluZy9QcmVmZXJJbnRlcmZhY2VzSW5JbXBsZW1lbnRzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDgwOWQ0MgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbFNvcnRpbmcvUHJlZmVySW50ZXJmYWNlc0luSW1wbGVtZW50cy5qYXZhCkBAIC0wLDAgKzEsOCBAQAoraW50ZXJmYWNlIEZvb0ludGYge30KK2NsYXNzIEZvb0NsYXNzIHt9CisKK2NsYXNzIEdvbyBpbXBsZW1lbnRzIEZvbzxjYXJldD4geworICAgIGludCBib28oKSB7fQorICAgIGludCBkb28oKSB7fQorICAgIGludCBmb28oKSB7fQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsU29ydGluZy9QcmVmZXJLZXl3b3Jkc1RvVm9pZE1ldGhvZHNJbkV4cGVjdGVkVHlwZUNvbnRleHQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbFNvcnRpbmcvUHJlZmVyS2V5d29yZHNUb1ZvaWRNZXRob2RzSW5FeHBlY3RlZFR5cGVDb250ZXh0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmM4OWZlZgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbFNvcnRpbmcvUHJlZmVyS2V5d29yZHNUb1ZvaWRNZXRob2RzSW5FeHBlY3RlZFR5cGVDb250ZXh0LmphdmEKQEAgLTAsMCArMSwxMSBAQAorY2xhc3MgRm9vIHsKKyAgamF2YS5pby5GaWxlIGY7CisKKyAgeworICAgIGYgPSBuPGNhcmV0PgorICB9CisKKyAgamF2YS5pby5GaWxlIG5vbygpIHt9CisgIE9iamVjdCBub28yKCkge30KKworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbFNvcnRpbmcvUHJlZmVyTGVzc0h1bXBzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWxTb3J0aW5nL1ByZWZlckxlc3NIdW1wcy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ4NmJlYTIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWxTb3J0aW5nL1ByZWZlckxlc3NIdW1wcy5qYXZhCkBAIC0wLDAgKzEsMTIgQEAKK3B1YmxpYyBjbGFzcyBBYWFhYWFhIHsKKyAgICBwcml2YXRlIGZpbmFsIFN0cmluZyBhYWE7CisKKyAgICBBYWFhYWFhKE9iamVjdCBhYWJiYikgeworICAgICAgICBpZiAoYWFiYmIgaW5zdGFuY2VvZiBYWTxjYXJldD4pCisgICAgfQorCit9CisKK2NsYXNzIFhhWWFFeCB7fQorY2xhc3MgWGFZYUltcGwge30KK2NsYXNzIFh5WWFYYSB7fQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbFNvcnRpbmcvUHJlZmVyTGVzc1BhcmFtZXRlcnMuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbFNvcnRpbmcvUHJlZmVyTGVzc1BhcmFtZXRlcnMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OGY4ZWZhCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsU29ydGluZy9QcmVmZXJMZXNzUGFyYW1ldGVycy5qYXZhCkBAIC0wLDAgKzEsMTIgQEAKK3B1YmxpYyBjbGFzcyBNeUZpcnN0VGVzdENsYXNzRm9vIHsKKworICAgdm9pZCBmb28oaW50IGEpIHt9CisgICB2b2lkIGZvbygpIHt9CisgICB2b2lkIGZvbyhpbnQgYSwgaW50IGIpIHt9CisgICB2b2lkIGZveChpbnQgYSkge30KKworICAgIHsKKyAgICAgICAgbmV3IE15Rmlyc3RUZXN0Q2xhc3NGb28oKS5mbzxjYXJldD4KKyAgICB9CisKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbFNvcnRpbmcvUHJlZmVyTG9jYWxzVG9TdGF0aWNzSW5TZWNvbmRDb21wbGV0aW9uLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWxTb3J0aW5nL1ByZWZlckxvY2Fsc1RvU3RhdGljc0luU2Vjb25kQ29tcGxldGlvbi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQxMjY4OGYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWxTb3J0aW5nL1ByZWZlckxvY2Fsc1RvU3RhdGljc0luU2Vjb25kQ29tcGxldGlvbi5qYXZhCkBAIC0wLDAgKzEsNyBAQAorY2xhc3MgVXRpbCB7CisgIHZvaWQgZm9veCgpIHsKKyAgICBpbnQgZm9veTsKKyAgICBmb288Y2FyZXQ+CisgIH0KKworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbFNvcnRpbmcvUHJlZmVyTW9kaWZpZXJzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWxTb3J0aW5nL1ByZWZlck1vZGlmaWVycy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMzMzQ4YzIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWxTb3J0aW5nL1ByZWZlck1vZGlmaWVycy5qYXZhCkBAIC0wLDAgKzEsOSBAQAorcHVibGljIGNsYXNzIFRlc3QgeworCisgICAgcDxjYXJldD4KKworICBjbGFzcyBwYWFhIHt9CisKKyAgc3RhdGljIGNsYXNzIHBhYWIge30KKworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbFNvcnRpbmcvUHJlZmVyTW9yZU1hdGNoaW5nLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWxTb3J0aW5nL1ByZWZlck1vcmVNYXRjaGluZy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE5ZmE1NmUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWxTb3J0aW5nL1ByZWZlck1vcmVNYXRjaGluZy5qYXZhCkBAIC0wLDAgKzEsOSBAQAorY2xhc3MgRm9vT0NTb21ldGhpbmcge30KK2NsYXNzIEZvb09iamVjdENvbGxlY3RvciB7fQorCitjbGFzcyBGb28geworICAgIHsKKyAgICAgICAgRm9vT0M8Y2FyZXQ+CisgICAgfQorCit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsU29ydGluZy9QcmVmZXJOZXdFeHBlY3RlZElubmVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWxTb3J0aW5nL1ByZWZlck5ld0V4cGVjdGVkSW5uZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZDlkMDQ2Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsU29ydGluZy9QcmVmZXJOZXdFeHBlY3RlZElubmVyLmphdmEKQEAgLTAsMCArMSw5IEBACitjbGFzcyBGb29vbyB7CisgIGludGVyZmFjZSBCYXIge30KK30KKworY2xhc3MgQmFyIHsKKyAgICB7CisgICAgICAgIEZvb29vLkJhciBjID0gbmV3IEZvb288Y2FyZXQ+eAorICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbFNvcnRpbmcvUHJlZmVyT3duSW5uZXJDbGFzc2VzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWxTb3J0aW5nL1ByZWZlck93bklubmVyQ2xhc3Nlcy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJiMGYzMWMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWxTb3J0aW5nL1ByZWZlck93bklubmVyQ2xhc3Nlcy5qYXZhCkBAIC0wLDAgKzEsOSBAQAorY2xhc3MgRm9vIHsKKyAgICBmaW5hbCBZeTxjYXJldD4KKworICAgIHByaXZhdGUgc3RhdGljIGNsYXNzIFl5eVh4eCB7CisKKyAgICB9Cit9CisKK2NsYXNzIFl5eVp6eiB7fQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbFNvcnRpbmcvUHJlZmVyUmV0dXJuLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWxTb3J0aW5nL1ByZWZlclJldHVybi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE2NWFiYjAKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWxTb3J0aW5nL1ByZWZlclJldHVybi5qYXZhCkBAIC0wLDAgKzEsMTAgQEAKK3B1YmxpYyBjbGFzcyBUZXN0IHsKKworICAgIHZvaWQgck1ldGhvZCgpIHt9CisKKyAgICBpbnQgZm9vKGludCByUGFyYW0pIHsKKyAgICAgICAgT2JqZWN0IHJMb2NhbDsKKyAgICAgICAgcjxjYXJldD4KKyAgICB9CisKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWxTb3J0aW5nL1ByZWZlclNhbWVOYW1lZE1ldGhvZHMuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbFNvcnRpbmcvUHJlZmVyU2FtZU5hbWVkTWV0aG9kcy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAzZDEwMDMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWxTb3J0aW5nL1ByZWZlclNhbWVOYW1lZE1ldGhvZHMuamF2YQpAQCAtMCwwICsxLDE1IEBACitjbGFzcyBHb28geworICAgIGludCBib28oKSB7fQorICAgIGludCBkb28oKSB7fQorICAgIGludCBmb28oKSB7fQorfQorCitjbGFzcyBGb29vbyB7CisgICAgR29vIGc7CisKKyAgICBpbnQgZm9vKCkgeworICAgICAgICByZXR1cm4gZy48Y2FyZXQ+CisgICAgfQorCit9CisKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbFNvcnRpbmcvUHJlZmVyU2FtZVBhY2thZ2VPdmVySW1wb3J0ZWQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbFNvcnRpbmcvUHJlZmVyU2FtZVBhY2thZ2VPdmVySW1wb3J0ZWQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ODY5NGZlCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsU29ydGluZy9QcmVmZXJTYW1lUGFja2FnZU92ZXJJbXBvcnRlZC5qYXZhCkBAIC0wLDAgKzEsOSBAQAoraW1wb3J0IGJhci4qOworCitwdWJsaWMgY2xhc3MgVGVzdCB7CisKKyAgeworICAgIEJhcjxjYXJldD4KKyAgfQorCit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsU29ydGluZy9QcmVmZXJTdXBlck1ldGhvZHMuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbFNvcnRpbmcvUHJlZmVyU3VwZXJNZXRob2RzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTJkMzFlYQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbFNvcnRpbmcvUHJlZmVyU3VwZXJNZXRob2RzLmphdmEKQEAgLTAsMCArMSwxMCBAQAorY2xhc3MgRm9vIHsKKyAgICB2b2lkIGJhcigpIHt9CisgICAgdm9pZCBmb28oKSB7fQorfQorCitjbGFzcyBCYXIgZXh0ZW5kcyBGb28geworICAgIHZvaWQgZm9vKCkgeworICAgICAgICBzdXBlci48Y2FyZXQ+CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbFNvcnRpbmcvUHJlZmVyVG9wTGV2ZWxDbGFzc2VzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWxTb3J0aW5nL1ByZWZlclRvcExldmVsQ2xhc3Nlcy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ3NjVkMTAKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWxTb3J0aW5nL1ByZWZlclRvcExldmVsQ2xhc3Nlcy5qYXZhCkBAIC0wLDAgKzEsMTAgQEAKK3B1YmxpYyBjbGFzcyBUZXN0Q2xhc3MgeworICAgIHB1YmxpYyBUZXN0Q2xhc3MgY3JlYXRlKFh4WTxjYXJldD4pIHsKKyAgICB9Cit9CisKK2NsYXNzIFh4eFl5eSB7fQorCitjbGFzcyBBYWEgeworICAgIHN0YXRpYyBjbGFzcyBYeHpZeXl7fQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbFNvcnRpbmcvUHJlc2VsZWN0TGFzdENob3Nlbi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsU29ydGluZy9QcmVzZWxlY3RMYXN0Q2hvc2VuLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWJhMDU1OAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbFNvcnRpbmcvUHJlc2VsZWN0TGFzdENob3Nlbi5qYXZhCkBAIC0wLDAgKzEsNyBAQAoraW1wb3J0IGphdmEudXRpbC5TZXQ7CisKK3B1YmxpYyBjbGFzcyBGb28geworICB2b2lkIGZvbyhTZXQ8U3RyaW5nPiBzZXQpIHsKKyAgICBzZXQuYWQ8Y2FyZXQ+eAorICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsU29ydGluZy9QcmVzZWxlY3RNb3N0UmVsZXZhbnRJblRoZU1pZGRsZUFscGhhLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWxTb3J0aW5nL1ByZXNlbGVjdE1vc3RSZWxldmFudEluVGhlTWlkZGxlQWxwaGEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNGRhMmNmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsU29ydGluZy9QcmVzZWxlY3RNb3N0UmVsZXZhbnRJblRoZU1pZGRsZUFscGhhLmphdmEKQEAgLTAsMCArMSwxNyBAQAorY2xhc3MgRm9vIHsKKyAgaW50IEVMWEVNRU5UX0EgPSAxOworICBpbnQgRUxYRU1FTlRfQiA9IDE7CisgIGludCBFTFhFTUVOVF9DID0gMTsKKyAgaW50IEVMWEVNRU5UX0QgPSAxOworICBpbnQgRUxYRU1FTlRfRSA9IDE7CisgIGludCBFTFhFTUVOVF9GID0gMTsKKyAgaW50IEVMWEVNRU5UX0cgPSAxOworICBpbnQgRUxYRU1FTlRfSCA9IDE7CisgIGludCBFTFhFTUVOVF9JID0gMTsKKworCisgICAgeworICAgICAgICBFbHg8Y2FyZXQ+CisgICAgfQorCit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsU29ydGluZy9SZWFsbHlBbHBoYVNvcnRpbmcuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbFNvcnRpbmcvUmVhbGx5QWxwaGFTb3J0aW5nLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGZjYzExYgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbFNvcnRpbmcvUmVhbGx5QWxwaGFTb3J0aW5nLmphdmEKQEAgLTAsMCArMSw4IEBACitjbGFzcyBGb28geworICB2b2lkIHpvbygpIHt9CisKKyAgeworICAgIG5ldyBGb28oKS48Y2FyZXQ+CisgIH0KKworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbFNvcnRpbmcvUmV0dXJuRi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsU29ydGluZy9SZXR1cm5GLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDY1YTM2MQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbFNvcnRpbmcvUmV0dXJuRi5qYXZhCkBAIC0wLDAgKzEsNSBAQAorY2xhc3MgRm9vIHsKKyAgICBib29sZWFuIHpvbyhTdHJpbmcgcykgeworICAgICAgcmV0dXJuIGY8Y2FyZXQ+eAorICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWxTb3J0aW5nL1NhbWVTdGF0c0ZvckRpZmZlcmVudFF1YWxpZmllcnNKQ29tcG9uZW50LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWxTb3J0aW5nL1NhbWVTdGF0c0ZvckRpZmZlcmVudFF1YWxpZmllcnNKQ29tcG9uZW50LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGY0ZGZhNwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbFNvcnRpbmcvU2FtZVN0YXRzRm9yRGlmZmVyZW50UXVhbGlmaWVyc0pDb21wb25lbnQuamF2YQpAQCAtMCwwICsxLDkgQEAKK2ltcG9ydCBqYXZheC5zd2luZy4qOworCitwdWJsaWMgY2xhc3MgTXlGaXJzdFRlc3RDbGFzc0ZvbyB7CisKKyAgdm9pZCBmb28oSkNvbXBvbmVudCBjKSB7CisgICAgYy5nZXRDb208Y2FyZXQ+eAorICB9CisKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbFNvcnRpbmcvU2FtZVN0YXRzRm9yRGlmZmVyZW50UXVhbGlmaWVyc0pMYWJlbC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsU29ydGluZy9TYW1lU3RhdHNGb3JEaWZmZXJlbnRRdWFsaWZpZXJzSkxhYmVsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGVmZGJhNQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbFNvcnRpbmcvU2FtZVN0YXRzRm9yRGlmZmVyZW50UXVhbGlmaWVyc0pMYWJlbC5qYXZhCkBAIC0wLDAgKzEsOSBAQAoraW1wb3J0IGphdmF4LnN3aW5nLio7CisKK3B1YmxpYyBjbGFzcyBNeUZpcnN0VGVzdENsYXNzRm9vIHsKKworICB2b2lkIGZvbyhKTGFiZWwgbCkgeworICAgIGwuZ2V0Q29tcG88Y2FyZXQ+eAorICB9CisKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbFNvcnRpbmcvU2hvcnRlclByZWZpeGVzR29GaXJzdC5odG1sIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsU29ydGluZy9TaG9ydGVyUHJlZml4ZXNHb0ZpcnN0Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmU2MjU0ZAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbFNvcnRpbmcvU2hvcnRlclByZWZpeGVzR29GaXJzdC5odG1sCkBAIC0wLDAgKzEgQEAKKzxwPGNhcmV0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbFNvcnRpbmcvU2hvcnRlclNob3VsZEJlUHJlc2VsZWN0ZWQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbFNvcnRpbmcvU2hvcnRlclNob3VsZEJlUHJlc2VsZWN0ZWQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOGM3YjRhCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsU29ydGluZy9TaG9ydGVyU2hvdWxkQmVQcmVzZWxlY3RlZC5qYXZhCkBAIC0wLDAgKzEsMTEgQEAKK2NsYXNzIEZvbyB7CisgICAgU3RyaW5nIGZvb0xvbmdCdXRPZkRlZmF1bHRUeXBlKCkge30KKyAgICBGb28gZm9vKCkge30KK30KKworY2xhc3MgQmFyIHsKKyAgICB2b2lkIGZvbygpIHsKKyAgICAgICAgRm9vIGY7CisgICAgICAgIGlmICgiYWJjIi5lcXVhbHMoZi5mb288Y2FyZXQ+KSkKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsU29ydGluZy9Ta2lwTGlmdGVkLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWxTb3J0aW5nL1NraXBMaWZ0ZWQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NzYzYjAyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsU29ydGluZy9Ta2lwTGlmdGVkLmphdmEKQEAgLTAsMCArMSw4IEBACitjbGFzcyBGb28geworICB7CisgICAgaGFzaENvPGNhcmV0PngKKyAgfQorCisgIGludCBoYXNoQ29kZU1pbmUoKSB7fQorCit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsU29ydGluZy9Tb3J0U2FtZU5hbWVkVmFyaWFudHNCeVByb3hpbWl0eS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsU29ydGluZy9Tb3J0U2FtZU5hbWVkVmFyaWFudHNCeVByb3hpbWl0eS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRjNDlhNzkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWxTb3J0aW5nL1NvcnRTYW1lTmFtZWRWYXJpYW50c0J5UHJveGltaXR5LmphdmEKQEAgLTAsMCArMSw5IEBACitpbXBvcnQgc3VuLnN3aW5nLkJha2VkQXJyYXlMaXN0OworCitjbGFzcyBGb28geworICAgIHsKKyAgICAgICAgT2JqZWN0IGVsZW1lbnQ7CisgICAgICAgIGlmIChlbGVtZW50IGluc3RhbmNlb2YgQmFyPGNhcmV0PikKKyAgICB9CisKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWxTb3J0aW5nL1N0YXRpc3RpY3NCeVByZWZpeC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsU29ydGluZy9TdGF0aXN0aWNzQnlQcmVmaXguamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZTk2YzA0Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsU29ydGluZy9TdGF0aXN0aWNzQnlQcmVmaXguamF2YQpAQCAtMCwwICsxLDYgQEAKK2NsYXNzIEZvb0JhciB7CisgIGludCBfZm9vMSwgX2ZvbzIsIF9ib28xLCBfYm9vMiwgX2dvbzEsIF9nb28yOworICB7CisgICAgPGNhcmV0PgorICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsU29ydGluZy9TdGF0aXN0aWNzTWF0dGVyc09uTmV4dENvbXBsZXRpb24uamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbFNvcnRpbmcvU3RhdGlzdGljc01hdHRlcnNPbk5leHRDb21wbGV0aW9uLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjk5MmUxNAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbFNvcnRpbmcvU3RhdGlzdGljc01hdHRlcnNPbk5leHRDb21wbGV0aW9uLmphdmEKQEAgLTAsMCArMSw4IEBACitjbGFzcyBKQ29tcG9uZW50IHt9CitjbGFzcyBKQ29tYm9Cb3gge30KKworY2xhc3MgRm9vQmFyIHsKKyAgdm9pZCBmb28oKSB7CisgICAgSkNvbTxjYXJldD4KKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbFNvcnRpbmcvU3RhdHNGb3JDbGFzc05hbWVJbkV4cHJlc3Npb24uamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbFNvcnRpbmcvU3RhdHNGb3JDbGFzc05hbWVJbkV4cHJlc3Npb24uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYzU2NDZmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsU29ydGluZy9TdGF0c0ZvckNsYXNzTmFtZUluRXhwcmVzc2lvbi5qYXZhCkBAIC0wLDAgKzEsNyBAQAorcHVibGljIGNsYXNzIE15Rmlyc3RUZXN0Q2xhc3NGb28geworCisgIGludCBmb28oKSB7CisgICAgcmV0dXJuIEZvb0I8Y2FyZXQ+LmZmZigpLnpvbygpOworICB9CisKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbFNvcnRpbmcvU3RhdHNNb3JlSW1wb3J0YW50VGhhbkV4cGVjdGVkVHlwZS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsU29ydGluZy9TdGF0c01vcmVJbXBvcnRhbnRUaGFuRXhwZWN0ZWRUeXBlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmYxMTYyYwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbFNvcnRpbmcvU3RhdHNNb3JlSW1wb3J0YW50VGhhbkV4cGVjdGVkVHlwZS5qYXZhCkBAIC0wLDAgKzEsMjIgQEAKK3B1YmxpYyBjbGFzcyBBbm90aGVyVGVzdENsYXNzIHsKKyAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgdGhyb3dzIElPRXhjZXB0aW9uIHsKKyAgICB0ZXN0KGdldG51PGNhcmV0Pik7CisgIH0KKworICBwcml2YXRlIHN0YXRpYyB2b2lkIHRlc3QoaW50IGksIGludCBqKSB7CisgIH0KKworICBwdWJsaWMgc3RhdGljIE51bWJlclByb3ZpZGVyIGdldE51bVByb3ZpZGVyKCkgeworICAgIHJldHVybiBuZXcgTnVtYmVyUHJvdmlkZXIoKTsKKyAgfQorCisgIHB1YmxpYyBzdGF0aWMgaW50IGdldE51bWJlcigpIHsKKyAgICByZXR1cm4gMTsKKyAgfQorCisgIHByaXZhdGUgc3RhdGljIGNsYXNzIE51bWJlclByb3ZpZGVyIHsKKyAgICBwdWJsaWMgaW50IGdldE51bWJlcigpIHsKKyAgICAgIHJldHVybiAxOworICAgIH0KKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbFNvcnRpbmcvU3Vic3RyaW5nVnNTdWJTZXF1ZW5jZS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsU29ydGluZy9TdWJzdHJpbmdWc1N1YlNlcXVlbmNlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmU1NjNlZAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbFNvcnRpbmcvU3Vic3RyaW5nVnNTdWJTZXF1ZW5jZS5qYXZhCkBAIC0wLDAgKzEsNiBAQAorY2xhc3MgRm9vIHsKKyAgICB2b2lkIGZvbyhTdHJpbmcgcykge30KKyAgICB7CisgICAgICAgIGZvbygiYWFhIi5zdWI8Y2FyZXQ+KQorICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWxTb3J0aW5nL1VuZGVyc2NvcmVzRG9udE1ha2VNYXRjaE1pZGRsZS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsU29ydGluZy9VbmRlcnNjb3Jlc0RvbnRNYWtlTWF0Y2hNaWRkbGUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ODY3ZTM0Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsU29ydGluZy9VbmRlcnNjb3Jlc0RvbnRNYWtlTWF0Y2hNaWRkbGUuamF2YQpAQCAtMCwwICsxLDUgQEAKK2NsYXNzIEZvb0JhciB7CisgIHZvaWQgZm9vKEZvb0JhciBfZm9vQmFyKSB7CisgICAgZmI8Y2FyZXQ+CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWxTb3J0aW5nL1VwcGVyY2FzZU1hdHRlcnMyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWxTb3J0aW5nL1VwcGVyY2FzZU1hdHRlcnMyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjA5Zjc2YgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL25vcm1hbFNvcnRpbmcvVXBwZXJjYXNlTWF0dGVyczIuamF2YQpAQCAtMCwwICsxLDkgQEAKK2NsYXNzIEZvbyB7CisgIHsKKyAgICBPYmplY3QgY2xhc3NMT1NvbWV0aGluZzsKKyAgICBPYmplY3QgY2xhc3NMb2FkZXI7CisgICAgT2JqZWN0IGNsYXNzTG9hZGVyMjsKKyAgICBjTG88Y2FyZXQ+CisgIH0KKworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3JlZmxlY3Rpb24vRGVjbGFyZWRGaWVsZC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vcmVmbGVjdGlvbi9EZWNsYXJlZEZpZWxkLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODgxMTFhNAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3JlZmxlY3Rpb24vRGVjbGFyZWRGaWVsZC5qYXZhCkBAIC0wLDAgKzEsMjYgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwMC0yMDEyIEpldEJyYWlucyBzLnIuby4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCitjbGFzcyBEZWNsYXJlZEZpZWxkIHsKKyAgdm9pZCBmb28oKSB7CisgICAgVGVzdC5jbGFzcy5nZXREZWNsYXJlZEZpZWxkKCI8Y2FyZXQ+Iik7CisgIH0KK30KKworY2xhc3MgVGVzdCB7CisgIHB1YmxpYyBpbnQgbnVtOworICBwdWJsaWMgaW50IG51bTI7CisgIGludCBudW0zOworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3JlZmxlY3Rpb24vRGVjbGFyZWRGaWVsZF9hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vcmVmbGVjdGlvbi9EZWNsYXJlZEZpZWxkX2FmdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTI0YzhmMAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3JlZmxlY3Rpb24vRGVjbGFyZWRGaWVsZF9hZnRlci5qYXZhCkBAIC0wLDAgKzEsMjYgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwMC0yMDEyIEpldEJyYWlucyBzLnIuby4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCitjbGFzcyBEZWNsYXJlZEZpZWxkIHsKKyAgdm9pZCBmb28oKSB7CisgICAgVGVzdC5jbGFzcy5nZXREZWNsYXJlZEZpZWxkKCJudW0yIik7CisgIH0KK30KKworY2xhc3MgVGVzdCB7CisgIHB1YmxpYyBpbnQgbnVtOworICBwdWJsaWMgaW50IG51bTI7CisgIGludCBudW0zOworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3JlZmxlY3Rpb24vRGVjbGFyZWRNZXRob2QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3JlZmxlY3Rpb24vRGVjbGFyZWRNZXRob2QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YWJjNGM0Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vcmVmbGVjdGlvbi9EZWNsYXJlZE1ldGhvZC5qYXZhCkBAIC0wLDAgKzEsMzAgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwMC0yMDEyIEpldEJyYWlucyBzLnIuby4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCitjbGFzcyBEZWNhbHJlZE1ldGhvZCB7CisgIHZvaWQgZm9vKCkgeworICAgIFRlc3QuY2xhc3MuZ2V0RGVjbGFyZWRNZXRob2QoIjxjYXJldD4iKTsKKyAgfQorfQorCitjbGFzcyBUZXN0IHsKKyAgcHVibGljIHZvaWQgbWV0aG9kKCl7fQorICBwdWJsaWMgdm9pZCBtZXRob2QyKEEgYSwgQiBiKXt9CisgIHB1YmxpYyB2b2lkIG1ldGhvZDMoKXt9Cit9CisKK2NsYXNzIEEge30KK2NsYXNzIEIge30KK2NsYXNzIEMge30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9yZWZsZWN0aW9uL0RlY2xhcmVkTWV0aG9kMi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vcmVmbGVjdGlvbi9EZWNsYXJlZE1ldGhvZDIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YzYzZjliCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vcmVmbGVjdGlvbi9EZWNsYXJlZE1ldGhvZDIuamF2YQpAQCAtMCwwICsxLDMwIEBACisvKgorICogQ29weXJpZ2h0IDIwMDAtMjAxMiBKZXRCcmFpbnMgcy5yLm8uCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworY2xhc3MgRGVjYWxyZWRNZXRob2QyIHsKKyAgdm9pZCBmb28oKSB7CisgICAgVGVzdC5jbGFzcy5nZXREZWNsYXJlZE1ldGhvZCgibTxjYXJldD4iLCBBLmNsYXNzLCBCLmNsYXNzKTsKKyAgfQorfQorCitjbGFzcyBUZXN0IHsKKyAgdm9pZCBtZXRob2QoKXt9CisgIHZvaWQgbWV0aG9kMihBIGEsIEIgYil7fQorICB2b2lkIG1ldGhvZDMoKXt9Cit9CisKK2NsYXNzIEEge30KK2NsYXNzIEIge30KK2NsYXNzIEMge30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9yZWZsZWN0aW9uL0RlY2xhcmVkTWV0aG9kMl9hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vcmVmbGVjdGlvbi9EZWNsYXJlZE1ldGhvZDJfYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOWQ1NmEwCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vcmVmbGVjdGlvbi9EZWNsYXJlZE1ldGhvZDJfYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDMwIEBACisvKgorICogQ29weXJpZ2h0IDIwMDAtMjAxMiBKZXRCcmFpbnMgcy5yLm8uCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworY2xhc3MgRGVjYWxyZWRNZXRob2QyIHsKKyAgdm9pZCBmb28oKSB7CisgICAgVGVzdC5jbGFzcy5nZXREZWNsYXJlZE1ldGhvZCgibWV0aG9kMyIpOworICB9Cit9CisKK2NsYXNzIFRlc3QgeworICB2b2lkIG1ldGhvZCgpe30KKyAgdm9pZCBtZXRob2QyKEEgYSwgQiBiKXt9CisgIHZvaWQgbWV0aG9kMygpe30KK30KKworY2xhc3MgQSB7fQorY2xhc3MgQiB7fQorY2xhc3MgQyB7fQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3JlZmxlY3Rpb24vRGVjbGFyZWRNZXRob2RfYWZ0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3JlZmxlY3Rpb24vRGVjbGFyZWRNZXRob2RfYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNmMwZDViCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vcmVmbGVjdGlvbi9EZWNsYXJlZE1ldGhvZF9hZnRlci5qYXZhCkBAIC0wLDAgKzEsMzAgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwMC0yMDEyIEpldEJyYWlucyBzLnIuby4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCitjbGFzcyBEZWNhbHJlZE1ldGhvZCB7CisgIHZvaWQgZm9vKCkgeworICAgIFRlc3QuY2xhc3MuZ2V0RGVjbGFyZWRNZXRob2QoIm1ldGhvZDIiLCBBLmNsYXNzLCBCLmNsYXNzKTsKKyAgfQorfQorCitjbGFzcyBUZXN0IHsKKyAgcHVibGljIHZvaWQgbWV0aG9kKCl7fQorICBwdWJsaWMgdm9pZCBtZXRob2QyKEEgYSwgQiBiKXt9CisgIHB1YmxpYyB2b2lkIG1ldGhvZDMoKXt9Cit9CisKK2NsYXNzIEEge30KK2NsYXNzIEIge30KK2NsYXNzIEMge30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9yZWZsZWN0aW9uL0ZpZWxkLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9yZWZsZWN0aW9uL0ZpZWxkLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWQzOTQwOGUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9yZWZsZWN0aW9uL0ZpZWxkLmphdmEKQEAgLTAsMCArMSwyNiBAQAorLyoKKyAqIENvcHlyaWdodCAyMDAwLTIwMTIgSmV0QnJhaW5zIHMuci5vLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KK2NsYXNzIEZpZWxkIHsKKyAgdm9pZCBmb28oKSB7CisgICAgVGVzdC5jbGFzcy5nZXRGaWVsZCgiPGNhcmV0PiIpOworICB9Cit9CisKK2NsYXNzIFRlc3QgeworICBwdWJsaWMgaW50IG51bTsKKyAgcHVibGljIGludCBudW0yOworICBpbnQgbnVtMzsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9yZWZsZWN0aW9uL0ZpZWxkX2FmdGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9yZWZsZWN0aW9uL0ZpZWxkX2FmdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzUyNjQ1ZAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3JlZmxlY3Rpb24vRmllbGRfYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDI2IEBACisvKgorICogQ29weXJpZ2h0IDIwMDAtMjAxMiBKZXRCcmFpbnMgcy5yLm8uCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworY2xhc3MgRmllbGQgeworICB2b2lkIGZvbygpIHsKKyAgICBUZXN0LmNsYXNzLmdldEZpZWxkKCJudW0yIik7CisgIH0KK30KKworY2xhc3MgVGVzdCB7CisgIHB1YmxpYyBpbnQgbnVtOworICBwdWJsaWMgaW50IG51bTI7CisgIGludCBudW0zOworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3JlZmxlY3Rpb24vRm9yTmFtZURlY2xhcmVkRmllbGQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3JlZmxlY3Rpb24vRm9yTmFtZURlY2xhcmVkRmllbGQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iODExMWFiCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vcmVmbGVjdGlvbi9Gb3JOYW1lRGVjbGFyZWRGaWVsZC5qYXZhCkBAIC0wLDAgKzEsMjYgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwMC0yMDEyIEpldEJyYWlucyBzLnIuby4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCitjbGFzcyBGb3JOYW1lRGVjbGFyZWRGaWVsZCB7CisgIHZvaWQgZm9vKCkgeworICAgIENsYXNzLmZvck5hbWUoIlRlc3QiKS5nZXREZWNsYXJlZEZpZWxkKCI8Y2FyZXQ+Iik7CisgIH0KK30KKworY2xhc3MgVGVzdCB7CisgIHB1YmxpYyBpbnQgbnVtOworICBwdWJsaWMgaW50IG51bTI7CisgIGludCBudW0zOworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3JlZmxlY3Rpb24vRm9yTmFtZURlY2xhcmVkRmllbGRfYWZ0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3JlZmxlY3Rpb24vRm9yTmFtZURlY2xhcmVkRmllbGRfYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNjIyNGMxZgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3JlZmxlY3Rpb24vRm9yTmFtZURlY2xhcmVkRmllbGRfYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDI2IEBACisvKgorICogQ29weXJpZ2h0IDIwMDAtMjAxMiBKZXRCcmFpbnMgcy5yLm8uCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworY2xhc3MgRm9yTmFtZURlY2xhcmVkRmllbGQgeworICB2b2lkIGZvbygpIHsKKyAgICBDbGFzcy5mb3JOYW1lKCJUZXN0IikuZ2V0RGVjbGFyZWRGaWVsZCgibnVtMyIpOworICB9Cit9CisKK2NsYXNzIFRlc3QgeworICBwdWJsaWMgaW50IG51bTsKKyAgcHVibGljIGludCBudW0yOworICBpbnQgbnVtMzsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9yZWZsZWN0aW9uL0Zvck5hbWVEZWNsYXJlZE1ldGhvZC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vcmVmbGVjdGlvbi9Gb3JOYW1lRGVjbGFyZWRNZXRob2QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZjJkMmFlCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vcmVmbGVjdGlvbi9Gb3JOYW1lRGVjbGFyZWRNZXRob2QuamF2YQpAQCAtMCwwICsxLDMwIEBACisvKgorICogQ29weXJpZ2h0IDIwMDAtMjAxMiBKZXRCcmFpbnMgcy5yLm8uCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworY2xhc3MgRm9yTmFtZURlY2xhcmVkTWV0aG9kIHsKKyAgdm9pZCBmb28oKSB7CisgICAgQ2xhc3MuZm9yTmFtZSgiVGVzdCIpLmdldERlY2xhcmVkTWV0aG9kKCI8Y2FyZXQ+Iik7CisgIH0KK30KKworY2xhc3MgVGVzdCB7CisgIHB1YmxpYyB2b2lkIG1ldGhvZCgpe30KKyAgcHVibGljIHZvaWQgbWV0aG9kMihBIGEsIEIgYil7fQorICB2b2lkIG1ldGhvZDMoKXt9Cit9CisKK2NsYXNzIEEge30KK2NsYXNzIEIge30KK2NsYXNzIEMge30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9yZWZsZWN0aW9uL0Zvck5hbWVEZWNsYXJlZE1ldGhvZF9hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vcmVmbGVjdGlvbi9Gb3JOYW1lRGVjbGFyZWRNZXRob2RfYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZjE2NWNmYwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3JlZmxlY3Rpb24vRm9yTmFtZURlY2xhcmVkTWV0aG9kX2FmdGVyLmphdmEKQEAgLTAsMCArMSwzMCBAQAorLyoKKyAqIENvcHlyaWdodCAyMDAwLTIwMTIgSmV0QnJhaW5zIHMuci5vLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KK2NsYXNzIEZvck5hbWVEZWNsYXJlZE1ldGhvZCB7CisgIHZvaWQgZm9vKCkgeworICAgIENsYXNzLmZvck5hbWUoIlRlc3QiKS5nZXREZWNsYXJlZE1ldGhvZCgibWV0aG9kMiIsIEEuY2xhc3MsIEIuY2xhc3MpOworICB9Cit9CisKK2NsYXNzIFRlc3QgeworICBwdWJsaWMgdm9pZCBtZXRob2QoKXt9CisgIHB1YmxpYyB2b2lkIG1ldGhvZDIoQSBhLCBCIGIpe30KKyAgdm9pZCBtZXRob2QzKCl7fQorfQorCitjbGFzcyBBIHt9CitjbGFzcyBCIHt9CitjbGFzcyBDIHt9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vcmVmbGVjdGlvbi9Gb3JOYW1lRmllbGQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3JlZmxlY3Rpb24vRm9yTmFtZUZpZWxkLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWNlNmU0OAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3JlZmxlY3Rpb24vRm9yTmFtZUZpZWxkLmphdmEKQEAgLTAsMCArMSwyNiBAQAorLyoKKyAqIENvcHlyaWdodCAyMDAwLTIwMTIgSmV0QnJhaW5zIHMuci5vLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KK2NsYXNzIEZvck5hbWVGaWVsZCB7CisgIHZvaWQgZm9vKCkgeworICAgIENsYXNzLmZvck5hbWUoIlRlc3QiKS5nZXRGaWVsZCgiPGNhcmV0PiIpOworICB9Cit9CisKK2NsYXNzIFRlc3QgeworICBwdWJsaWMgaW50IG51bTsKKyAgcHVibGljIGludCBudW0yOworICBpbnQgbnVtMzsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9yZWZsZWN0aW9uL0Zvck5hbWVGaWVsZF9hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vcmVmbGVjdGlvbi9Gb3JOYW1lRmllbGRfYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOGM2ZDVlCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vcmVmbGVjdGlvbi9Gb3JOYW1lRmllbGRfYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDI2IEBACisvKgorICogQ29weXJpZ2h0IDIwMDAtMjAxMiBKZXRCcmFpbnMgcy5yLm8uCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworY2xhc3MgRm9yTmFtZUZpZWxkIHsKKyAgdm9pZCBmb28oKSB7CisgICAgQ2xhc3MuZm9yTmFtZSgiVGVzdCIpLmdldEZpZWxkKCJudW0yIik7CisgIH0KK30KKworY2xhc3MgVGVzdCB7CisgIHB1YmxpYyBpbnQgbnVtOworICBwdWJsaWMgaW50IG51bTI7CisgIGludCBudW0zOworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3JlZmxlY3Rpb24vRm9yTmFtZU1ldGhvZC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vcmVmbGVjdGlvbi9Gb3JOYW1lTWV0aG9kLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTc4OTA3MwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3JlZmxlY3Rpb24vRm9yTmFtZU1ldGhvZC5qYXZhCkBAIC0wLDAgKzEsMzAgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwMC0yMDEyIEpldEJyYWlucyBzLnIuby4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCitjbGFzcyBGb3JOYW1lTWV0aG9kIHsKKyAgdm9pZCBmb28oKSB7CisgICAgQ2xhc3MuZm9yTmFtZSgiVGVzdCIpLmdldE1ldGhvZCgiPGNhcmV0PiIpOworICB9Cit9CisKK2NsYXNzIFRlc3QgeworICBwdWJsaWMgdm9pZCBtZXRob2QoKXt9CisgIHB1YmxpYyB2b2lkIG1ldGhvZDIoQSBhLCBCIGIpe30KKyAgdm9pZCBtZXRob2QzKCl7fQorfQorCitjbGFzcyBBIHt9CitjbGFzcyBCIHt9CitjbGFzcyBDIHt9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vcmVmbGVjdGlvbi9Gb3JOYW1lTWV0aG9kX2FmdGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9yZWZsZWN0aW9uL0Zvck5hbWVNZXRob2RfYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YTE0MTJlCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vcmVmbGVjdGlvbi9Gb3JOYW1lTWV0aG9kX2FmdGVyLmphdmEKQEAgLTAsMCArMSwzMCBAQAorLyoKKyAqIENvcHlyaWdodCAyMDAwLTIwMTIgSmV0QnJhaW5zIHMuci5vLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KK2NsYXNzIEZvck5hbWVNZXRob2QgeworICB2b2lkIGZvbygpIHsKKyAgICBDbGFzcy5mb3JOYW1lKCJUZXN0IikuZ2V0TWV0aG9kKCJtZXRob2QyIiwgQS5jbGFzcywgQi5jbGFzcyk7CisgIH0KK30KKworY2xhc3MgVGVzdCB7CisgIHB1YmxpYyB2b2lkIG1ldGhvZCgpe30KKyAgcHVibGljIHZvaWQgbWV0aG9kMihBIGEsIEIgYil7fQorICB2b2lkIG1ldGhvZDMoKXt9Cit9CisKK2NsYXNzIEEge30KK2NsYXNzIEIge30KK2NsYXNzIEMge30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9yZWZsZWN0aW9uL0dlbmVyaWNzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9yZWZsZWN0aW9uL0dlbmVyaWNzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTA1Yzc0MgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3JlZmxlY3Rpb24vR2VuZXJpY3MuamF2YQpAQCAtMCwwICsxLDI1IEBACisvKgorICogQ29weXJpZ2h0IDIwMDAtMjAxMiBKZXRCcmFpbnMgcy5yLm8uCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworY2xhc3MgR2VuZXJpY3MgeworICB2b2lkIGZvbygpIHsKKyAgICBUZXN0LmNsYXNzLmdldE1ldGhvZCgiPGNhcmV0PiIpOworICB9Cit9CisKK2NsYXNzIFRlc3QgeworICBwdWJsaWMgdm9pZCBmb28oQTw/IGV4dGVuZHMgVGVzdD4gbmFtZSkge30KK30KK2NsYXNzIEE8Sz4ge30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3JlZmxlY3Rpb24vR2VuZXJpY3NfYWZ0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3JlZmxlY3Rpb24vR2VuZXJpY3NfYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZmRjMWVhCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vcmVmbGVjdGlvbi9HZW5lcmljc19hZnRlci5qYXZhCkBAIC0wLDAgKzEsMjUgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwMC0yMDEyIEpldEJyYWlucyBzLnIuby4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCitjbGFzcyBHZW5lcmljcyB7CisgIHZvaWQgZm9vKCkgeworICAgIFRlc3QuY2xhc3MuZ2V0TWV0aG9kKCJmb28iLCBBLmNsYXNzKTsKKyAgfQorfQorCitjbGFzcyBUZXN0IHsKKyAgcHVibGljIHZvaWQgZm9vKEE8PyBleHRlbmRzIFRlc3Q+IG5hbWUpIHt9Cit9CitjbGFzcyBBPEs+IHt9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9yZWZsZWN0aW9uL01ldGhvZC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vcmVmbGVjdGlvbi9NZXRob2QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNmUwYjk2Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vcmVmbGVjdGlvbi9NZXRob2QuamF2YQpAQCAtMCwwICsxLDMwIEBACisvKgorICogQ29weXJpZ2h0IDIwMDAtMjAxMiBKZXRCcmFpbnMgcy5yLm8uCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworY2xhc3MgRGVjYWxyZWRNZXRob2QgeworICB2b2lkIGZvbygpIHsKKyAgICBUZXN0LmNsYXNzLmdldE1ldGhvZCgiPGNhcmV0PiIpOworICB9Cit9CisKK2NsYXNzIFRlc3QgeworICBwdWJsaWMgdm9pZCBtZXRob2QoKXt9CisgIHB1YmxpYyB2b2lkIG1ldGhvZDIoQSBhLCBCIGIpe30KKyAgdm9pZCBtZXRob2QzKCl7fQorfQorCitjbGFzcyBBIHt9CitjbGFzcyBCIHt9CitjbGFzcyBDIHt9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vcmVmbGVjdGlvbi9NZXRob2RfYWZ0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3JlZmxlY3Rpb24vTWV0aG9kX2FmdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTg2YzZlMgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3JlZmxlY3Rpb24vTWV0aG9kX2FmdGVyLmphdmEKQEAgLTAsMCArMSwzMCBAQAorLyoKKyAqIENvcHlyaWdodCAyMDAwLTIwMTIgSmV0QnJhaW5zIHMuci5vLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KK2NsYXNzIERlY2FscmVkTWV0aG9kIHsKKyAgdm9pZCBmb28oKSB7CisgICAgVGVzdC5jbGFzcy5nZXRNZXRob2QoIm1ldGhvZDIiLCBBLmNsYXNzLCBCLmNsYXNzKTsKKyAgfQorfQorCitjbGFzcyBUZXN0IHsKKyAgcHVibGljIHZvaWQgbWV0aG9kKCl7fQorICBwdWJsaWMgdm9pZCBtZXRob2QyKEEgYSwgQiBiKXt9CisgIHZvaWQgbWV0aG9kMygpe30KK30KKworY2xhc3MgQSB7fQorY2xhc3MgQiB7fQorY2xhc3MgQyB7fQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9BYnN0cmFjdENsYXNzVHdpY2UuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9BYnN0cmFjdENsYXNzVHdpY2UuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMjcwMTdhOAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9BYnN0cmFjdENsYXNzVHdpY2UuamF2YQpAQCAtMCwwICsxLDMgQEAKK2Fic3RyYWN0IGNsYXNzIEZvbyB7CisgIEZvbyBmID0gbmV3IDxjYXJldD4KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvQWZ0ZXJOZXdJblRlcm5hcnktb3V0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvQWZ0ZXJOZXdJblRlcm5hcnktb3V0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDE4ZTg0NgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9BZnRlck5ld0luVGVybmFyeS1vdXQuamF2YQpAQCAtMCwwICsxLDUgQEAKK2NsYXNzIFVzZXIgeworICAgIHsKKyAgICAgICAgU3RyaW5nIHMgPSBuZXcgU3RyaW5nKDxjYXJldD4pID09IG51bGwgPyBnZXREZWZhdWx0RWpiTmFtZSgpIDogczsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL0FmdGVyTmV3SW5UZXJuYXJ5LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvQWZ0ZXJOZXdJblRlcm5hcnkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZDBjMDI0Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL0FmdGVyTmV3SW5UZXJuYXJ5LmphdmEKQEAgLTAsMCArMSw1IEBACitjbGFzcyBVc2VyIHsKKyAgICB7CisgICAgICAgIFN0cmluZyBzID0gbmV3IDxjYXJldD4gPT0gbnVsbCA/IGdldERlZmF1bHRFamJOYW1lKCkgOiBzOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvQWZ0ZXJOZXdXaXRoR2VuZXJpY3Mtb3V0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvQWZ0ZXJOZXdXaXRoR2VuZXJpY3Mtb3V0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDk4NGU2YQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9BZnRlck5ld1dpdGhHZW5lcmljcy1vdXQuamF2YQpAQCAtMCwwICsxLDE1IEBACitjbGFzcyBQYWlyPEEsIEI+IHsKKyAgcHVibGljIGZpbmFsIEEgZmlyc3Q7CisgIHB1YmxpYyBmaW5hbCBCIHNlY29uZDsKKworICBQYWlyKEEgZmlyc3QsIEIgc2Vjb25kKSB7CisgICAgdGhpcy5maXJzdCA9IGZpcnN0OworICAgIHRoaXMuc2Vjb25kID0gc2Vjb25kOworICB9Cit9CisKK2NsYXNzIFRlc3QgeworICAgIHZvaWQgdGVzdChQYWlyPFN0cmluZywgSW50ZWdlcj4gcCkgeworICAgICAgICBQYWlyPFN0cmluZywgSW50ZWdlcj4gcDIgPSBuZXcgUGFpcjxTdHJpbmcsIEludGVnZXI+KHAuZmlyc3QsIDxjYXJldD4pOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvQWZ0ZXJOZXdXaXRoR2VuZXJpY3MuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9BZnRlck5ld1dpdGhHZW5lcmljcy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmViNDZmOWYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvQWZ0ZXJOZXdXaXRoR2VuZXJpY3MuamF2YQpAQCAtMCwwICsxLDE1IEBACitjbGFzcyBQYWlyPEEsIEI+IHsKKyAgcHVibGljIGZpbmFsIEEgZmlyc3Q7CisgIHB1YmxpYyBmaW5hbCBCIHNlY29uZDsKKworICBQYWlyKEEgZmlyc3QsIEIgc2Vjb25kKSB7CisgICAgdGhpcy5maXJzdCA9IGZpcnN0OworICAgIHRoaXMuc2Vjb25kID0gc2Vjb25kOworICB9Cit9CisKK2NsYXNzIFRlc3QgeworICAgIHZvaWQgdGVzdChQYWlyPFN0cmluZywgSW50ZWdlcj4gcCkgeworICAgICAgICBQYWlyPFN0cmluZywgSW50ZWdlcj4gcDIgPSBuZXcgUGFpcjxTdHJpbmcsIEludGVnZXI+KHAuZjxjYXJldD4pOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvQWZ0ZXJRdWFsaWZpZWROZXctb3V0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvQWZ0ZXJRdWFsaWZpZWROZXctb3V0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWNhYWNkZjQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvQWZ0ZXJRdWFsaWZpZWROZXctb3V0LmphdmEKQEAgLTAsMCArMSw1IEBACitjbGFzcyBBIHt7CisgIEFhIGEgPSBuZXcgQWEoKTsKKworICBBYS5CIGIgPSBhLm5ldyBCKCk7PGNhcmV0PgorfX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvQWZ0ZXJRdWFsaWZpZWROZXcuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9BZnRlclF1YWxpZmllZE5ldy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY2N2YwYTMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvQWZ0ZXJRdWFsaWZpZWROZXcuamF2YQpAQCAtMCwwICsxLDUgQEAKK2NsYXNzIEEge3sKKyAgQWEgYSA9IG5ldyBBYSgpOworCisgIEFhLkIgYiA9IGEubmV3IDxjYXJldD4KK319ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL0FtYmlndW91c0NvbnN0YW50LW91dC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL0FtYmlndW91c0NvbnN0YW50LW91dC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNiMTk5ZDcKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvQW1iaWd1b3VzQ29uc3RhbnQtb3V0LmphdmEKQEAgLTAsMCArMSwxNSBAQAoraW50ZXJmYWNlIEZvbyB7CisgIGludCBBQkMgPSAxOworfQorCitpbnRlcmZhY2UgQmFyIGV4dGVuZHMgRm9vIHsKKyAgYm9vbGVhbiBBQkMgPSAyOworfQorCitjbGFzcyBGb29JbXBsIGltcGxlbWVudHMgRm9vIHt9CisKK2NsYXNzIEJhckltcGwgZXh0ZW5kcyBGb29JbXBsIGltcGxlbWVudHMgQmFyIHsKKyAgeworICAgIGJvb2xlYW4gYSA9IEJhci5BQkM7PGNhcmV0PgorICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL0FtYmlndW91c0NvbnN0YW50LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvQW1iaWd1b3VzQ29uc3RhbnQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YmRkYWFhCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL0FtYmlndW91c0NvbnN0YW50LmphdmEKQEAgLTAsMCArMSwxNSBAQAoraW50ZXJmYWNlIEZvbyB7CisgIGludCBBQkMgPSAxOworfQorCitpbnRlcmZhY2UgQmFyIGV4dGVuZHMgRm9vIHsKKyAgYm9vbGVhbiBBQkMgPSAyOworfQorCitjbGFzcyBGb29JbXBsIGltcGxlbWVudHMgRm9vIHt9CisKK2NsYXNzIEJhckltcGwgZXh0ZW5kcyBGb29JbXBsIGltcGxlbWVudHMgQmFyIHsKKyAgeworICAgIGJvb2xlYW4gYSA9IEE8Y2FyZXQ+OworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL0Fubm90YXRpb24uamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9Bbm5vdGF0aW9uLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2I5ODZjNwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9Bbm5vdGF0aW9uLmphdmEKQEAgLTAsMCArMSw1IEBACitpbXBvcnQgamF2YS5sYW5nLmFubm90YXRpb24uVGFyZ2V0OworQFRhcmdldCh2YWx1ZT17PGNhcmV0Pn0pCitAaW50ZXJmYWNlIEFubm90YXRpb24geworCit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL0Fubm90YXRpb24yLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvQW5ub3RhdGlvbjIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNGM4MzQzCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL0Fubm90YXRpb24yLmphdmEKQEAgLTAsMCArMSw1IEBACitpbXBvcnQgamF2YS5sYW5nLmFubm90YXRpb24uUmV0ZW50aW9uOworQFJldGVudGlvbig8Y2FyZXQ+KQorQGludGVyZmFjZSBBbm5vdGF0aW9uIHsKKworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9Bbm5vdGF0aW9uMl8yLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvQW5ub3RhdGlvbjJfMi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc3Y2VkYzIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvQW5ub3RhdGlvbjJfMi5qYXZhCkBAIC0wLDAgKzEsNSBAQAoraW1wb3J0IGphdmEubGFuZy5hbm5vdGF0aW9uLlJldGVudGlvbjsKK0BSZXRlbnRpb24odmFsdWU9PGNhcmV0PikKK0BpbnRlcmZhY2UgQW5ub3RhdGlvbiB7CisKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvQW5ub3RhdGlvbjMtb3V0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvQW5ub3RhdGlvbjMtb3V0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGU3OTBlYgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9Bbm5vdGF0aW9uMy1vdXQuamF2YQpAQCAtMCwwICsxLDEzIEBACitAaW50ZXJmYWNlIFRhYmxlIHsKKyAgaW50IGNvbHVtbkNvdW50KCk7Cit9CisKK0BpbnRlcmZhY2UgSm9pbiB7CisgIFRhYmxlIHRhYmxlKCk7Cit9CisKKworQEpvaW4odGFibGUgPSBAVGFibGUoPGNhcmV0PikgKQorQGludGVyZmFjZSBBbm5vdGF0aW9uIHsKKworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9Bbm5vdGF0aW9uMy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL0Fubm90YXRpb24zLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjA5YjgzZAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9Bbm5vdGF0aW9uMy5qYXZhCkBAIC0wLDAgKzEsMTMgQEAKK0BpbnRlcmZhY2UgVGFibGUgeworICBpbnQgY29sdW1uQ291bnQoKTsKK30KKworQGludGVyZmFjZSBKb2luIHsKKyAgVGFibGUgdGFibGUoKTsKK30KKworCitASm9pbih0YWJsZSA9IDxjYXJldD4gKQorQGludGVyZmFjZSBBbm5vdGF0aW9uIHsKKworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9Bbm5vdGF0aW9uM18yLW91dC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL0Fubm90YXRpb24zXzItb3V0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODg4MzM4YTMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvQW5ub3RhdGlvbjNfMi1vdXQuamF2YQpAQCAtMCwwICsxLDE3IEBACitAaW50ZXJmYWNlIENvbHVtbiB7CisgIFN0cmluZyBuYW1lKCk7Cit9CisKK0BpbnRlcmZhY2UgVGFibGUgeworICBDb2x1bW4gaWQoKTsKK30KKworQGludGVyZmFjZSBKb2luIHsKKyAgVGFibGVbXSB0YWJsZSgpOworfQorCisKK0BKb2luKHtAVGFibGUoaWQgPSBAQ29sdW1uKDxjYXJldD4pKX0gKQorQGludGVyZmFjZSBBbm5vdGF0aW9uIHsKKworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9Bbm5vdGF0aW9uM18yLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvQW5ub3RhdGlvbjNfMi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZkZDE1N2QKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvQW5ub3RhdGlvbjNfMi5qYXZhCkBAIC0wLDAgKzEsMTcgQEAKK0BpbnRlcmZhY2UgQ29sdW1uIHsKKyAgU3RyaW5nIG5hbWUoKTsKK30KKworQGludGVyZmFjZSBUYWJsZSB7CisgIENvbHVtbiBpZCgpOworfQorCitAaW50ZXJmYWNlIEpvaW4geworICBUYWJsZVtdIHRhYmxlKCk7Cit9CisKKworQEpvaW4oe0BUYWJsZShpZCA9IDxjYXJldD4pfSApCitAaW50ZXJmYWNlIEFubm90YXRpb24geworCit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL0Fubm90YXRpb240LW91dC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL0Fubm90YXRpb240LW91dC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRkMzJiYzEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvQW5ub3RhdGlvbjQtb3V0LmphdmEKQEAgLTAsMCArMSw4IEBACitAaW50ZXJmYWNlIEpvaW4geworICBib29sZWFuIG5lc3RlZExvb3BzKCk7Cit9CisKK0BKb2luKG5lc3RlZExvb3BzID0gPGNhcmV0PiApCitAaW50ZXJmYWNlIEFubm90YXRpb24geworCit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL0Fubm90YXRpb240LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvQW5ub3RhdGlvbjQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZDMyYmMxCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL0Fubm90YXRpb240LmphdmEKQEAgLTAsMCArMSw4IEBACitAaW50ZXJmYWNlIEpvaW4geworICBib29sZWFuIG5lc3RlZExvb3BzKCk7Cit9CisKK0BKb2luKG5lc3RlZExvb3BzID0gPGNhcmV0PiApCitAaW50ZXJmYWNlIEFubm90YXRpb24geworCit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL0Fubm90YXRpb241LW91dC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL0Fubm90YXRpb241LW91dC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMwNzRhYTkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvQW5ub3RhdGlvbjUtb3V0LmphdmEKQEAgLTAsMCArMSwxNiBAQAorZW51bSBTZXR1cCB7CisgIE5PX0NPTk5FQ1RJT04sCisgIENPTk5FQ1RJT04KK30KKworQFRhcmdldCh2YWx1ZSA9IEVsZW1lbnRUeXBlLk1FVEhPRCkKK0BSZXRlbnRpb24oUmV0ZW50aW9uUG9saWN5LlJVTlRJTUUpCitwdWJsaWMgQGludGVyZmFjZSBUZXN0IHsKKyAgU2V0dXAgc2V0dXAoKTsKK30KKworcHVibGljIGNsYXNzIENsaWVudCB7CisgIEBUZXN0KHNldHVwID0gU2V0dXAuPGNhcmV0PikKKyAgcHVibGljIHZvaWQgcnVuKCkgeworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL0Fubm90YXRpb241LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvQW5ub3RhdGlvbjUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMDc0YWE5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL0Fubm90YXRpb241LmphdmEKQEAgLTAsMCArMSwxNiBAQAorZW51bSBTZXR1cCB7CisgIE5PX0NPTk5FQ1RJT04sCisgIENPTk5FQ1RJT04KK30KKworQFRhcmdldCh2YWx1ZSA9IEVsZW1lbnRUeXBlLk1FVEhPRCkKK0BSZXRlbnRpb24oUmV0ZW50aW9uUG9saWN5LlJVTlRJTUUpCitwdWJsaWMgQGludGVyZmFjZSBUZXN0IHsKKyAgU2V0dXAgc2V0dXAoKTsKK30KKworcHVibGljIGNsYXNzIENsaWVudCB7CisgIEBUZXN0KHNldHVwID0gU2V0dXAuPGNhcmV0PikKKyAgcHVibGljIHZvaWQgcnVuKCkgeworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL0Fubm90YXRpb242LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvQW5ub3RhdGlvbjYuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNTgzOGEyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL0Fubm90YXRpb242LmphdmEKQEAgLTAsMCArMSw1IEBACitpbXBvcnQgamF2YS5sYW5nLmFubm90YXRpb24uVGFyZ2V0OworCitAVGFyZ2V0KDxjYXJldD4pCitwdWJsaWMgQGludGVyZmFjZSBUZXN0IHsKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9Bbm9ueW1vdXNOb1BhaXJCcmFja2V0LW91dC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL0Fub255bW91c05vUGFpckJyYWNrZXQtb3V0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjBkYTY5OAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9Bbm9ueW1vdXNOb1BhaXJCcmFja2V0LW91dC5qYXZhCkBAIC0wLDAgKzEsMTEgQEAKK3B1YmxpYyBjbGFzcyBCYXIgeworICAgIHsKKyAgICAgICAgbmV3IFRocmVhZChuZXcgUnVubmFibGUoKSB7CisgICAgICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKKyAgICAgICAgICAgICAgICA8c2VsZWN0aW9uPi8vVG8gY2hhbmdlIGJvZHkgb2YgaW1wbGVtZW50ZWQgbWV0aG9kcyB1c2UgRmlsZSB8IFNldHRpbmdzIHwgRmlsZSBUZW1wbGF0ZXMuPC9zZWxlY3Rpb24+CisgICAgICAgICAgICB9CisgICAgICAgIH0pCisgICAgfQorCit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvQW5vbnltb3VzTm9QYWlyQnJhY2tldC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL0Fub255bW91c05vUGFpckJyYWNrZXQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZWE0YTQ2Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL0Fub255bW91c05vUGFpckJyYWNrZXQuamF2YQpAQCAtMCwwICsxLDYgQEAKK3B1YmxpYyBjbGFzcyBCYXIgeworICAgIHsKKyAgICAgICAgbmV3IFRocmVhZChuZXcgUnVuPGNhcmV0PikKKyAgICB9CisKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9BcnJheUFjY2Vzc0luZGV4LW91dC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL0FycmF5QWNjZXNzSW5kZXgtb3V0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGNhZTM4ZgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9BcnJheUFjY2Vzc0luZGV4LW91dC5qYXZhCkBAIC0wLDAgKzEsNyBAQAorcHVibGljIGNsYXNzIEZvbyB7CisgICAgeworICAgICAgICBpbnQgcHBwcDsKKyAgICAgICAgaW50W10gYWFhYTsKKyAgICAgICAgYWFhYVtwcHBwPGNhcmV0Pl0KKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvQXJyYXlBY2Nlc3NJbmRleC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL0FycmF5QWNjZXNzSW5kZXguamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNTIyNTMxCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL0FycmF5QWNjZXNzSW5kZXguamF2YQpAQCAtMCwwICsxLDcgQEAKK3B1YmxpYyBjbGFzcyBGb28geworICAgIHsKKyAgICAgICAgaW50IHBwcHA7CisgICAgICAgIGludFtdIGFhYWE7CisgICAgICAgIGFhYWFbcDxjYXJldD5dCisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL0FycmF5QW5ub1BhcmFtZXRlci1vdXQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9BcnJheUFubm9QYXJhbWV0ZXItb3V0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGM3NmNiMAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9BcnJheUFubm9QYXJhbWV0ZXItb3V0LmphdmEKQEAgLTAsMCArMSwxMCBAQAorcHVibGljIEBpbnRlcmZhY2UgQSB7CisgICBTdHJpbmdbXSB2YWx1ZSgpOworfQorCitjbGFzcyBXb250Q29tcGxldGUgeworICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgU1RSSU5HID0gImFhYWFhIjsKKworICAgQEEoU1RSSU5HPGNhcmV0PnsieCJ9KQorICAgaW50IHg7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL0FycmF5QW5ub1BhcmFtZXRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL0FycmF5QW5ub1BhcmFtZXRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY5MGU1OTkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvQXJyYXlBbm5vUGFyYW1ldGVyLmphdmEKQEAgLTAsMCArMSwxMCBAQAorcHVibGljIEBpbnRlcmZhY2UgQSB7CisgICBTdHJpbmdbXSB2YWx1ZSgpOworfQorCitjbGFzcyBXb250Q29tcGxldGUgeworICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgU1RSSU5HID0gImFhYWFhIjsKKworICAgQEEoPGNhcmV0PnsieCJ9KQorICAgaW50IHg7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL0FycmF5Q2xvbmUtb3V0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvQXJyYXlDbG9uZS1vdXQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYzdhMjY1Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL0FycmF5Q2xvbmUtb3V0LmphdmEKQEAgLTAsMCArMSw2IEBACitwdWJsaWMgY2xhc3MgQXJyYXlDbG9uZSB7CisgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJnKSB7CisgICAgICAgIFN0cmluZ1tdIHN0cmluZ3MxID0geyIifTsKKyAgICAgICAgU3RyaW5nW10gc3RyaW5nczIgPSBzdHJpbmdzMS5jbG9uZSgpOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvQXJyYXlDbG9uZS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL0FycmF5Q2xvbmUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMjUzOThkCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL0FycmF5Q2xvbmUuamF2YQpAQCAtMCwwICsxLDYgQEAKK3B1YmxpYyBjbGFzcyBBcnJheUNsb25lIHsKKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmcpIHsKKyAgICAgICAgU3RyaW5nW10gc3RyaW5nczEgPSB7IiJ9OworICAgICAgICBTdHJpbmdbXSBzdHJpbmdzMiA9IHN0cmluZ3MxLmNsPGNhcmV0PigpOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvQXJyYXlJbmRleFRhaWxUeXBlLW91dC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL0FycmF5SW5kZXhUYWlsVHlwZS1vdXQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOTNjZDdjCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL0FycmF5SW5kZXhUYWlsVHlwZS1vdXQuamF2YQpAQCAtMCwwICsxLDEwIEBACitwdWJsaWMgY2xhc3MgRm9vIHsKKworICAgIHsKKyAgICAgICAgaW50IGFiY2RlZjsKKyAgICAgICAgaW50W10geHh4OworICAgICAgICBpbnQgeiA9IHh4eFthYmNkZWY8Y2FyZXQ+XQorCisgICAgfQorCit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvQXJyYXlJbmRleFRhaWxUeXBlLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvQXJyYXlJbmRleFRhaWxUeXBlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWRjMmFhNgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9BcnJheUluZGV4VGFpbFR5cGUuamF2YQpAQCAtMCwwICsxLDEwIEBACitwdWJsaWMgY2xhc3MgRm9vIHsKKworICAgIHsKKyAgICAgICAgaW50IGFiY2RlZjsKKyAgICAgICAgaW50W10geHh4OworICAgICAgICBpbnQgeiA9IHh4eFthPGNhcmV0Pl0KKworICAgIH0KKworfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL0FycmF5SW5pdGlhbGl6ZXJCZWZvcmVWYXJhcmdzLW91dC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL0FycmF5SW5pdGlhbGl6ZXJCZWZvcmVWYXJhcmdzLW91dC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJlYzYwYWMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvQXJyYXlJbml0aWFsaXplckJlZm9yZVZhcmFyZ3Mtb3V0LmphdmEKQEAgLTAsMCArMSw1IEBACitjbGFzcyBTdXBlciB7CisgIHZvaWQgZm9vKFN0cmluZ1tdIHBhcmFtcywgaW50Li4uIGluZGljZXMpIHsKKyAgICAgIGZvbyhuZXcgU3RyaW5nW117PGNhcmV0Pn0sIDApOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvQXJyYXlJbml0aWFsaXplckJlZm9yZVZhcmFyZ3MuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9BcnJheUluaXRpYWxpemVyQmVmb3JlVmFyYXJncy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE3ODNkMTQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvQXJyYXlJbml0aWFsaXplckJlZm9yZVZhcmFyZ3MuamF2YQpAQCAtMCwwICsxLDUgQEAKK2NsYXNzIFN1cGVyIHsKKyAgdm9pZCBmb28oU3RyaW5nW10gcGFyYW1zLCBpbnQuLi4gaW5kaWNlcykgeworICAgICAgZm9vKG5ldyA8Y2FyZXQ+LCAwKTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL0Fzc2VydFRoYXRNYXRjaGVyLW91dC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL0Fzc2VydFRoYXRNYXRjaGVyLW91dC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZlNTc3OTUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvQXNzZXJ0VGhhdE1hdGNoZXItb3V0LmphdmEKQEAgLTAsMCArMSwxMyBAQAoraW1wb3J0IGphdmEudXRpbC5MaXN0OworCitwdWJsaWMgY2xhc3MgWm9vMiB7CisgICAgPFQ+IHZvaWQgYXNzZXJ0VGhhdChUIHQsIExpc3Q8VD4gdHQpIHsgfQorICAgIDxUPiBMaXN0PFQ+IHdyYXAoVCB0KSB7IH0KKworICAgIHB1YmxpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworICAgICAgICBhc3NlcnRUaGF0KGFyZ3MsIHdyYXAoYXJncyk8Y2FyZXQ+KTsKKyAgICB9CisKK30KKworCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvQXNzZXJ0VGhhdE1hdGNoZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9Bc3NlcnRUaGF0TWF0Y2hlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE0OTI1NGUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvQXNzZXJ0VGhhdE1hdGNoZXIuamF2YQpAQCAtMCwwICsxLDEzIEBACitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK3B1YmxpYyBjbGFzcyBab28yIHsKKyAgICA8VD4gdm9pZCBhc3NlcnRUaGF0KFQgdCwgTGlzdDxUPiB0dCkgeyB9CisgICAgPFQ+IExpc3Q8VD4gd3JhcChUIHQpIHsgfQorCisgICAgcHVibGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisgICAgICAgIGFzc2VydFRoYXQoYXJncywgd3JhcCg8Y2FyZXQ+KSk7CisgICAgfQorCit9CisKKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL0Fzc2lnbkZyb21UaGVTYW1lRmllbGRPZkFub3RoZXJPYmplY3Qtb3V0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvQXNzaWduRnJvbVRoZVNhbWVGaWVsZE9mQW5vdGhlck9iamVjdC1vdXQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYThkOTBmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL0Fzc2lnbkZyb21UaGVTYW1lRmllbGRPZkFub3RoZXJPYmplY3Qtb3V0LmphdmEKQEAgLTAsMCArMSw4IEBACitjbGFzcyBGb28geworICAgIGludCBmb287CisKKyAgICB7CisgICAgICAgIEZvbyBmOworICAgICAgICBmb28gPSBmLmZvbzs8Y2FyZXQ+CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9Bc3NpZ25Gcm9tVGhlU2FtZUZpZWxkT2ZBbm90aGVyT2JqZWN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvQXNzaWduRnJvbVRoZVNhbWVGaWVsZE9mQW5vdGhlck9iamVjdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjllM2Y2OWIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvQXNzaWduRnJvbVRoZVNhbWVGaWVsZE9mQW5vdGhlck9iamVjdC5qYXZhCkBAIC0wLDAgKzEsOCBAQAorY2xhc3MgRm9vIHsKKyAgICBpbnQgZm9vOworCisgICAgeworICAgICAgICBGb28gZjsKKyAgICAgICAgZm9vID0gZi5mPGNhcmV0PgorICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvQXNzaWduYWJsZVRvQWZ0ZXJDYXN0LW91dC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL0Fzc2lnbmFibGVUb0FmdGVyQ2FzdC1vdXQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YTE1MTFmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL0Fzc2lnbmFibGVUb0FmdGVyQ2FzdC1vdXQuamF2YQpAQCAtMCwwICsxLDggQEAKK3B1YmxpYyBjbGFzcyBaWlogeworICAgICAgIE9iamVjdCBmb28oKTsKKworICAgICAgICB7CisgICAgICAgICAgICBaWlogejsKKyAgICAgICAgICAgIFpaWiB5ID0gKFpaWiApIHouZm9vKCk8Y2FyZXQ+CisgICAgICAgIH0KKyAgICB9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL0Fzc2lnbmFibGVUb0FmdGVyQ2FzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL0Fzc2lnbmFibGVUb0FmdGVyQ2FzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVmNDJhZWIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvQXNzaWduYWJsZVRvQWZ0ZXJDYXN0LmphdmEKQEAgLTAsMCArMSw4IEBACitwdWJsaWMgY2xhc3MgWlpaIHsKKyAgICAgICBPYmplY3QgZm9vKCk7CisKKyAgICAgICAgeworICAgICAgICAgICAgWlpaIHo7CisgICAgICAgICAgICBaWlogeSA9IChaWlogKSB6LmY8Y2FyZXQ+CisgICAgICAgIH0KKyAgICB9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL0F1dG9DYXN0V2hlbkFscmVhZHlDYXN0ZWQtb3V0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvQXV0b0Nhc3RXaGVuQWxyZWFkeUNhc3RlZC1vdXQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMWUzMDUxCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL0F1dG9DYXN0V2hlbkFscmVhZHlDYXN0ZWQtb3V0LmphdmEKQEAgLTAsMCArMSw5IEBACitjbGFzcyBCIHsKKyAgeworICAgICAgT2JqZWN0IG87CisgICAgICBpZiAobyBpbnN0YW5jZW9mIFN0cmluZykgeworICAgICAgICAgIFN0cmluZyBzID0gKFN0cmluZykgbzsKKyAgICAgICAgICBTdHJpbmcgc3MgPSAoU3RyaW5nKSBvOzxjYXJldD4KKyAgICAgIH0KKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9BdXRvQ2FzdFdoZW5BbHJlYWR5Q2FzdGVkLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvQXV0b0Nhc3RXaGVuQWxyZWFkeUNhc3RlZC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM0Y2M4NjgKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvQXV0b0Nhc3RXaGVuQWxyZWFkeUNhc3RlZC5qYXZhCkBAIC0wLDAgKzEsOSBAQAorY2xhc3MgQiB7CisgIHsKKyAgICAgIE9iamVjdCBvOworICAgICAgaWYgKG8gaW5zdGFuY2VvZiBTdHJpbmcpIHsKKyAgICAgICAgICBTdHJpbmcgcyA9IChTdHJpbmcpIG87CisgICAgICAgICAgU3RyaW5nIHNzID0gbzxjYXJldD4KKyAgICAgIH0KKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9CZWZvcmVCaW5hcnlFeHByZXNzaW9uSW5NZXRob2RDYWxsLW91dC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL0JlZm9yZUJpbmFyeUV4cHJlc3Npb25Jbk1ldGhvZENhbGwtb3V0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmViMzQwNwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9CZWZvcmVCaW5hcnlFeHByZXNzaW9uSW5NZXRob2RDYWxsLW91dC5qYXZhCkBAIC0wLDAgKzEsMTAgQEAKK3B1YmxpYyBjbGFzcyBGb28geworCisgICAgeworICAgICAgICBGb28gZm9vID0gbnVsbDsKKyAgICAgICAgRm9vIGJhciA9IGlkKGZvbywgPGNhcmV0PkZvby5jbGFzcy50b1N0cmluZygpICsgIltdIikpOworICAgIH0KKworICAgIEZvbyBpZChGb28gZm9vLCBTdHJpbmcgYSkge3JldHVybiBmb287fQorCit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvQmVmb3JlQmluYXJ5RXhwcmVzc2lvbkluTWV0aG9kQ2FsbC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL0JlZm9yZUJpbmFyeUV4cHJlc3Npb25Jbk1ldGhvZENhbGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMTNiNzFmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL0JlZm9yZUJpbmFyeUV4cHJlc3Npb25Jbk1ldGhvZENhbGwuamF2YQpAQCAtMCwwICsxLDEwIEBACitwdWJsaWMgY2xhc3MgRm9vIHsKKworICAgIHsKKyAgICAgICAgRm9vIGZvbyA9IG51bGw7CisgICAgICAgIEZvbyBiYXIgPSBpZChmPGNhcmV0PkZvby5jbGFzcy50b1N0cmluZygpICsgIltdIikpOworICAgIH0KKworICAgIEZvbyBpZChGb28gZm9vLCBTdHJpbmcgYSkge3JldHVybiBmb287fQorCit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvQmVmb3JlQ2FzdFRvQXJyYXktb3V0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvQmVmb3JlQ2FzdFRvQXJyYXktb3V0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDMzZWZiZAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9CZWZvcmVDYXN0VG9BcnJheS1vdXQuamF2YQpAQCAtMCwwICsxLDggQEAKK2NsYXNzIEZvbyB7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBGb29bXSBFTVBUWV9BUlJBWSA9IG5ldyBGb29bMF07CisKKyAgICBwdWJsaWMgRm9vW10gZm9vKGJvb2xlYW4gYil7CisgICAgICAgIHJldHVybiBFTVBUWV9BUlJBWTs8Y2FyZXQ+KEJhcltdKTsKKyAgICB9CisKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9CZWZvcmVDYXN0VG9BcnJheS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL0JlZm9yZUNhc3RUb0FycmF5LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmQxNjIxZQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9CZWZvcmVDYXN0VG9BcnJheS5qYXZhCkBAIC0wLDAgKzEsOCBAQAorY2xhc3MgRm9vIHsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIEZvb1tdIEVNUFRZX0FSUkFZID0gbmV3IEZvb1swXTsKKworICAgIHB1YmxpYyBGb29bXSBmb28oYm9vbGVhbiBiKXsKKyAgICAgICAgcmV0dXJuIEVNQTxjYXJldD4oQmFyW10pOworICAgIH0KKworfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL0JyZWFrTGFiZWwtb3V0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvQnJlYWtMYWJlbC1vdXQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YjQ4NGFjCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL0JyZWFrTGFiZWwtb3V0LmphdmEKQEAgLTAsMCArMSw4IEBACitwdWJsaWMgY2xhc3MgVXRpbCB7CisgIHZvaWQgZm9vKGludCBsYWJJbnQpIHsKKyAgICBsYWJlbDoKKyAgICB3aGlsZSAodHJ1ZSkgeworICAgICAgYnJlYWsgbGFiZWw7PGNhcmV0PgorICAgIH0KKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL0JyZWFrTGFiZWwuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9CcmVha0xhYmVsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzNkZGVmYzcKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvQnJlYWtMYWJlbC5qYXZhCkBAIC0wLDAgKzEsOCBAQAorcHVibGljIGNsYXNzIFV0aWwgeworICB2b2lkIGZvbyhpbnQgbGFiSW50KSB7CisgICAgbGFiZWw6CisgICAgd2hpbGUgKHRydWUpIHsKKyAgICAgIGJyZWFrIGw8Y2FyZXQ+CisgICAgfQorICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvQnVnMS1vdXQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9CdWcxLW91dC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNmMTVkOWYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvQnVnMS1vdXQuamF2YQpAQCAtMCwwICsxLDEyIEBACisKK3B1YmxpYyBjbGFzcyBRUVEgeworICB2b2lkIGYoUVFRIHEpIHsgfQorCisgIHsKKyAgICBuZXcgUnVubmFibGUoKSB7CisgICAgICBwdWJsaWMgdm9pZCBydW4oKSB7CisgICAgICAgIGYoUVFRLnRoaXMpOzxjYXJldD4KKyAgICAgIH0KKyAgICB9OworICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvQnVnMS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL0J1ZzEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNzU4MjZkCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL0J1ZzEuamF2YQpAQCAtMCwwICsxLDEyIEBACisKK3B1YmxpYyBjbGFzcyBRUVEgeworICB2b2lkIGYoUVFRIHEpIHsgfQorCisgIHsKKyAgICBuZXcgUnVubmFibGUoKSB7CisgICAgICBwdWJsaWMgdm9pZCBydW4oKSB7CisgICAgICAgIGYoPGNhcmV0Pik7CisgICAgICB9CisgICAgfTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL0J1ZzIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9CdWcyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzJmZTA1YgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9CdWcyLmphdmEKQEAgLTAsMCArMSw3IEBACitjbGFzcyBUZXN0IHsKKyAgLyoqCisgICAqICBAZXhjZXB0aW9uIElsbGVnYWxTdGF0ZUV4Y2VwdGlvbjxjYXJldD4KKyAgICovCisgIHB1YmxpYyB2b2lkIGZvbygpIHRocm93cyBqYXZhLmlvLklPRXhjZXB0aW9uLCBJbGxlZ2FsU3RhdGVFeGNlcHRpb24geworICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvQ2FsbFZhcmFyZ0FyZ3VtZW50LW91dC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL0NhbGxWYXJhcmdBcmd1bWVudC1vdXQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNWNlYzBhCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL0NhbGxWYXJhcmdBcmd1bWVudC1vdXQuamF2YQpAQCAtMCwwICsxLDE4IEBACitwdWJsaWMgY2xhc3MgSmF2YUNsYXNzPFQ+IHsKKworCisKKyAgICA8ViBleHRlbmRzIFQ+IFYgZm9vKENsYXNzPFY+IHMpIHt9Cit9CisKK2NsYXNzIFpvbyB7CisgICAgeworICAgICAgICBDbGFzczw/IGV4dGVuZHMgU3RyaW5nPiB4Y2NjY2NjY2MgPSBudWxsOworICAgICAgICBKYXZhQ2xhc3M8U3RyaW5nPiBjY2NjID0gbmV3IEphdmFDbGFzczxTdHJpbmc+KCk7CisgICAgICAgIGJhcihjY2NjLmZvbyh4Y2NjY2NjY2M8Y2FyZXQ+KSk7CisgICAgfQorCisgICAgdm9pZCBiYXIoU3RyaW5nLi4uIHMpIHsKKworICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9DYWxsVmFyYXJnQXJndW1lbnQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9DYWxsVmFyYXJnQXJndW1lbnQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYTZjZmM5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL0NhbGxWYXJhcmdBcmd1bWVudC5qYXZhCkBAIC0wLDAgKzEsMTggQEAKK3B1YmxpYyBjbGFzcyBKYXZhQ2xhc3M8VD4geworCisKKworICAgIDxWIGV4dGVuZHMgVD4gViBmb28oQ2xhc3M8Vj4gcykge30KK30KKworY2xhc3MgWm9vIHsKKyAgICB7CisgICAgICAgIENsYXNzPD8gZXh0ZW5kcyBTdHJpbmc+IHhjY2NjY2NjYyA9IG51bGw7CisgICAgICAgIEphdmFDbGFzczxTdHJpbmc+IGNjY2MgPSBuZXcgSmF2YUNsYXNzPFN0cmluZz4oKTsKKyAgICAgICAgYmFyKGNjY2MuZm9vKHhjYzxjYXJldD4pKTsKKyAgICB9CisKKyAgICB2b2lkIGJhcihTdHJpbmcuLi4gcykgeworCisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL0Nhc2VNaXNzaW5nRW51bVZhbHVlLW91dC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL0Nhc2VNaXNzaW5nRW51bVZhbHVlLW91dC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI1ZjVlNjkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvQ2FzZU1pc3NpbmdFbnVtVmFsdWUtb3V0LmphdmEKQEAgLTAsMCArMSwxMCBAQAorY2xhc3MgQSB7CisgICAgQShNeUVudW0gZSkgeworICAgICAgc3dpdGNoIChlKSB7CisgICAgICAgIGNhc2UgYmFyOiByZXR1cm47CisgICAgICAgIGNhc2UgZm9vOjxjYXJldD4KKyAgICAgIH0KKyAgICB9Cit9CisKK2VudW0gTXlFbnVtIHsgZm9vLCBiYXIgfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9DYXNlTWlzc2luZ0VudW1WYWx1ZS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL0Nhc2VNaXNzaW5nRW51bVZhbHVlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDU2ZGZiZAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9DYXNlTWlzc2luZ0VudW1WYWx1ZS5qYXZhCkBAIC0wLDAgKzEsMTAgQEAKK2NsYXNzIEEgeworICAgIEEoTXlFbnVtIGUpIHsKKyAgICAgIHN3aXRjaCAoZSkgeworICAgICAgICBjYXNlIGJhcjogcmV0dXJuOworICAgICAgICBjYXNlIDxjYXJldD4KKyAgICAgIH0KKyAgICB9Cit9CisKK2VudW0gTXlFbnVtIHsgZm9vLCBiYXIgfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9DYXNlTWlzc2luZ0VudW1WYWx1ZTItb3V0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvQ2FzZU1pc3NpbmdFbnVtVmFsdWUyLW91dC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIxM2U2MTIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvQ2FzZU1pc3NpbmdFbnVtVmFsdWUyLW91dC5qYXZhCkBAIC0wLDAgKzEsMTAgQEAKK2NsYXNzIEEgeworICAgIEEoTXlFbnVtIGUpIHsKKyAgICAgIHN3aXRjaCAoZSkgeworICAgICAgICBjYXNlIGZvbzo8Y2FyZXQ+CisgICAgICAgIGNhc2UgYmFyOiByZXR1cm47CisgICAgICB9CisgICAgfQorfQorCitlbnVtIE15RW51bSB7IGZvbywgYmFyIH0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvQ2FzZU1pc3NpbmdFbnVtVmFsdWUyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvQ2FzZU1pc3NpbmdFbnVtVmFsdWUyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjFhY2Q0YwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9DYXNlTWlzc2luZ0VudW1WYWx1ZTIuamF2YQpAQCAtMCwwICsxLDEwIEBACitjbGFzcyBBIHsKKyAgICBBKE15RW51bSBlKSB7CisgICAgICBzd2l0Y2ggKGUpIHsKKyAgICAgICAgY2FzZSA8Y2FyZXQ+CisgICAgICAgIGNhc2UgYmFyOiByZXR1cm47CisgICAgICB9CisgICAgfQorfQorCitlbnVtIE15RW51bSB7IGZvbywgYmFyIH0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvQ2FzdEF1dG9ib3hpbmctb3V0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvQ2FzdEF1dG9ib3hpbmctb3V0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmJmMGY3NgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9DYXN0QXV0b2JveGluZy1vdXQuamF2YQpAQCAtMCwwICsxLDggQEAKK2NsYXNzIEEgeworICBwdWJsaWMgYWJzdHJhY3Qgdm9pZCB6b28oaW50IHkpOworCisgIHsKKyAgICBPYmplY3QgeDsKKyAgICB6b28oKEludGVnZXIpIDxjYXJldD54KTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9DYXN0QXV0b2JveGluZy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL0Nhc3RBdXRvYm94aW5nLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjYxYjZlYQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9DYXN0QXV0b2JveGluZy5qYXZhCkBAIC0wLDAgKzEsOCBAQAorY2xhc3MgQSB7CisgIHB1YmxpYyBhYnN0cmFjdCB2b2lkIHpvbyhpbnQgeSk7CisKKyAgeworICAgIE9iamVjdCB4OworICAgIHpvbygoPGNhcmV0PngpOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL0Nhc3RBdXRvYm94aW5nMi1vdXQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9DYXN0QXV0b2JveGluZzItb3V0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmJmMGY3NgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9DYXN0QXV0b2JveGluZzItb3V0LmphdmEKQEAgLTAsMCArMSw4IEBACitjbGFzcyBBIHsKKyAgcHVibGljIGFic3RyYWN0IHZvaWQgem9vKGludCB5KTsKKworICB7CisgICAgT2JqZWN0IHg7CisgICAgem9vKChJbnRlZ2VyKSA8Y2FyZXQ+eCk7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvQ2FzdEF1dG9ib3hpbmcyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvQ2FzdEF1dG9ib3hpbmcyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmVkZTZhZgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9DYXN0QXV0b2JveGluZzIuamF2YQpAQCAtMCwwICsxLDggQEAKK2NsYXNzIEEgeworICBwdWJsaWMgYWJzdHJhY3Qgdm9pZCB6b28oaW50IHkpOworCisgIHsKKyAgICBPYmplY3QgeDsKKyAgICB6b28oKDxjYXJldD4pIHgpOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL0Nhc3RBdXRvYm94aW5nMy1vdXQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9DYXN0QXV0b2JveGluZzMtb3V0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmJmMGY3NgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9DYXN0QXV0b2JveGluZzMtb3V0LmphdmEKQEAgLTAsMCArMSw4IEBACitjbGFzcyBBIHsKKyAgcHVibGljIGFic3RyYWN0IHZvaWQgem9vKGludCB5KTsKKworICB7CisgICAgT2JqZWN0IHg7CisgICAgem9vKChJbnRlZ2VyKSA8Y2FyZXQ+eCk7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvQ2FzdEF1dG9ib3hpbmczLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvQ2FzdEF1dG9ib3hpbmczLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGRmNWQ2YQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9DYXN0QXV0b2JveGluZzMuamF2YQpAQCAtMCwwICsxLDggQEAKK2NsYXNzIEEgeworICBwdWJsaWMgYWJzdHJhY3Qgdm9pZCB6b28oaW50IHkpOworCisgIHsKKyAgICBPYmplY3QgeDsKKyAgICB6b28oKDxjYXJldD5hKSB4KTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9DYXN0R2VuZXJpY1F1YWxpZmllci1vdXQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9DYXN0R2VuZXJpY1F1YWxpZmllci1vdXQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNDU0M2I2Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL0Nhc3RHZW5lcmljUXVhbGlmaWVyLW91dC5qYXZhCkBAIC0wLDAgKzEsMTMgQEAKK2NsYXNzIEE8VD4geworICBUIGdldCgpIHsKKyAgICByZXR1cm4gbnVsbDsKKyAgfQorfQorY2xhc3MgQiBleHRlbmRzIEE8U3RyaW5nQnVmZmVyPiB7fQorY2xhc3MgQyB7CisgIHZvaWQgbShBPD8+IGEpIHsKKyAgICBpZiAoYSBpbnN0YW5jZW9mIEIpIHsKKyAgICAgIFN0cmluZ0J1ZmZlciBzID0gKChCKSBhKS5nZXQoKTs8Y2FyZXQ+CisgICAgfQorICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvQ2FzdEdlbmVyaWNRdWFsaWZpZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9DYXN0R2VuZXJpY1F1YWxpZmllci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI4NGExYzUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvQ2FzdEdlbmVyaWNRdWFsaWZpZXIuamF2YQpAQCAtMCwwICsxLDEzIEBACitjbGFzcyBBPFQ+IHsKKyAgVCBnZXQoKSB7CisgICAgcmV0dXJuIG51bGw7CisgIH0KK30KK2NsYXNzIEIgZXh0ZW5kcyBBPFN0cmluZ0J1ZmZlcj4ge30KK2NsYXNzIEMgeworICB2b2lkIG0oQTw/PiBhKSB7CisgICAgaWYgKGEgaW5zdGFuY2VvZiBCKSB7CisgICAgICBTdHJpbmdCdWZmZXIgcyA9IGEuPGNhcmV0PgorICAgIH0KKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL0Nhc3RJblRocm93LW91dC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL0Nhc3RJblRocm93LW91dC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBiYTAyYTc4Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL0Nhc3RJblRocm93LW91dC5qYXZhCkBAIC0wLDAgKzEsMTEgQEAKK2NsYXNzIE15RXhjZXB0aW9uIGV4dGVuZHMgRXhjZXB0aW9uIHt9CisKK2NsYXNzIFRlc3QgeworICAgIHZvaWQgdGVzdCgpIHRocm93cyBNeUV4Y2VwdGlvbiB7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oKTsKKyAgICAgICAgfSBjYXRjaChFeGNlcHRpb24gZSkgeworICAgICAgICAgIHRocm93IChNeUV4Y2VwdGlvbikgPGNhcmV0PgorICAgICAgICB9CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9DYXN0SW5UaHJvdy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL0Nhc3RJblRocm93LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzk4OTJiZAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9DYXN0SW5UaHJvdy5qYXZhCkBAIC0wLDAgKzEsMTEgQEAKK2NsYXNzIE15RXhjZXB0aW9uIGV4dGVuZHMgRXhjZXB0aW9uIHt9CisKK2NsYXNzIFRlc3QgeworICAgIHZvaWQgdGVzdCgpIHRocm93cyBNeUV4Y2VwdGlvbiB7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oKTsKKyAgICAgICAgfSBjYXRjaChFeGNlcHRpb24gZSkgeworICAgICAgICAgIHRocm93ICg8Y2FyZXQ+KSAKKyAgICAgICAgfQorICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvQ2FzdFRvQXJyYXktb3V0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvQ2FzdFRvQXJyYXktb3V0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzY5M2RmNQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9DYXN0VG9BcnJheS1vdXQuamF2YQpAQCAtMCwwICsxLDcgQEAKK3B1YmxpYyBjbGFzcyBTb21lQ2xhc3MgeworCisgICAgeworICAgICAgICBTdHJpbmdbXSBhYWEgPSAoU3RyaW5nW10pIDxjYXJldD4KKyAgICB9CisKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9DYXN0VG9BcnJheS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL0Nhc3RUb0FycmF5LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2VmZjUyNgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9DYXN0VG9BcnJheS5qYXZhCkBAIC0wLDAgKzEsNyBAQAorcHVibGljIGNsYXNzIFNvbWVDbGFzcyB7CisKKyAgICB7CisgICAgICAgIFN0cmluZ1tdIGFhYSA9ICg8Y2FyZXQ+CisgICAgfQorCit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvQ2FzdFRvUGFyYW1ldGVyaXplZFR5cGUtb3V0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvQ2FzdFRvUGFyYW1ldGVyaXplZFR5cGUtb3V0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmJmMTAzOAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9DYXN0VG9QYXJhbWV0ZXJpemVkVHlwZS1vdXQuamF2YQpAQCAtMCwwICsxLDExIEBACitwdWJsaWMgY2xhc3MgQTxUPiB7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgQTw/PiBYID0gbnVsbDsKKworICAgIEE8U3RyaW5nPiBnZXQoQiBvKSB7CisgICAgICByZXR1cm4gKEE8U3RyaW5nPikgPGNhcmV0Plg7CisgICAgfQorICB9CisKK2NsYXNzIEIgeworCit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL0Nhc3RUb1BhcmFtZXRlcml6ZWRUeXBlLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvQ2FzdFRvUGFyYW1ldGVyaXplZFR5cGUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZWE5YzYxCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL0Nhc3RUb1BhcmFtZXRlcml6ZWRUeXBlLmphdmEKQEAgLTAsMCArMSwxMSBAQAorcHVibGljIGNsYXNzIEE8VD4geworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIEE8Pz4gWCA9IG51bGw7CisKKyAgICBBPFN0cmluZz4gZ2V0KEIgbykgeworICAgICAgcmV0dXJuICg8Y2FyZXQ+WDsKKyAgICB9CisgIH0KKworY2xhc3MgQiB7CisKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvQ2FzdFdpbGRjYXJkcy1vdXQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9DYXN0V2lsZGNhcmRzLW91dC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMwN2EyNzUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvQ2FzdFdpbGRjYXJkcy1vdXQuamF2YQpAQCAtMCwwICsxLDYgQEAKK2Fic3RyYWN0IGNsYXNzIEE8VD4geworICAgIHZvaWQgZm9vKFQgeCl7fQorICAgIHZvaWQgYmFyKEE8PyBzdXBlciBUaHJvd2FibGU+IGEsIE9iamVjdCBiKXsKKyAgICAgICAgYS5mb28oKFRocm93YWJsZSkgPGNhcmV0PmIpOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvQ2FzdFdpbGRjYXJkcy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL0Nhc3RXaWxkY2FyZHMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNTcwZWZjCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL0Nhc3RXaWxkY2FyZHMuamF2YQpAQCAtMCwwICsxLDYgQEAKK2Fic3RyYWN0IGNsYXNzIEE8VD4geworICAgIHZvaWQgZm9vKFQgeCl7fQorICAgIHZvaWQgYmFyKEE8PyBzdXBlciBUaHJvd2FibGU+IGEsIE9iamVjdCBiKXsKKyAgICAgICAgYS5mb28oKDxjYXJldD4pIGIpOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvQ2FzdFdpdGgyVHlwZVBhcmFtZXRlcnMtb3V0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvQ2FzdFdpdGgyVHlwZVBhcmFtZXRlcnMtb3V0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmE1Yjc5ZAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9DYXN0V2l0aDJUeXBlUGFyYW1ldGVycy1vdXQuamF2YQpAQCAtMCwwICsxLDEwIEBACitpbnRlcmZhY2UgRm9vPFQsVj4ge30KKworICBjbGFzcyBCYXI8VCxWPiB7CisgICAgQmFyKEZvbzxULFY+IGZvbykge30KKyAgfQorCisgIGNsYXNzIE1haW4geworICAgIEZvbyBmb287CisgICAgQmFyPFN0cmluZyxTdHJpbmc+IGJhciA9IG5ldyBCYXI8U3RyaW5nLFN0cmluZz4oKEZvbzxTdHJpbmcsIFN0cmluZz4pIDxjYXJldD5mb28pOworICB9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvQ2FzdFdpdGgyVHlwZVBhcmFtZXRlcnMuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9DYXN0V2l0aDJUeXBlUGFyYW1ldGVycy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFlMmQ0NmQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvQ2FzdFdpdGgyVHlwZVBhcmFtZXRlcnMuamF2YQpAQCAtMCwwICsxLDEwIEBACitpbnRlcmZhY2UgRm9vPFQsVj4ge30KKworICBjbGFzcyBCYXI8VCxWPiB7CisgICAgQmFyKEZvbzxULFY+IGZvbykge30KKyAgfQorCisgIGNsYXNzIE1haW4geworICAgIEZvbyBmb287CisgICAgQmFyPFN0cmluZyxTdHJpbmc+IGJhciA9IG5ldyBCYXI8U3RyaW5nLFN0cmluZz4oKDxjYXJldD5mb28pOworICB9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvQ2FzdFdpdGhHZW5lcmljcy1vdXQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9DYXN0V2l0aEdlbmVyaWNzLW91dC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjllNWUwMTIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvQ2FzdFdpdGhHZW5lcmljcy1vdXQuamF2YQpAQCAtMCwwICsxLDkgQEAKK3B1YmxpYyBjbGFzcyBBYWFhYWFhIHsKKworICAgIHZvaWQgZm9vKENsYXNzPD8gZXh0ZW5kcyBPYmplY3Q+IGMpIHt9CisKKyAgICB2b2lkIGJhcigpIHsKKyAgICAgICAgZm9vKChDbGFzczxPYmplY3Q+KSA8Y2FyZXQ+Q2xhc3MuZm9yTmFtZSgic2RkIikpOworICAgIH0KKworfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL0Nhc3RXaXRoR2VuZXJpY3MuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9DYXN0V2l0aEdlbmVyaWNzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGUzNzM1YQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9DYXN0V2l0aEdlbmVyaWNzLmphdmEKQEAgLTAsMCArMSw5IEBACitwdWJsaWMgY2xhc3MgQWFhYWFhYSB7CisKKyAgICB2b2lkIGZvbyhDbGFzczw/IGV4dGVuZHMgT2JqZWN0PiBjKSB7fQorCisgICAgdm9pZCBiYXIoKSB7CisgICAgICAgIGZvbygoPGNhcmV0PkNsYXNzLmZvck5hbWUoInNkZCIpKTsKKyAgICB9CisKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9DYXRjaEluQW5vbnltb3VzLW91dC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL0NhdGNoSW5Bbm9ueW1vdXMtb3V0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWQ5NWRmNQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9DYXRjaEluQW5vbnltb3VzLW91dC5qYXZhCkBAIC0wLDAgKzEsMTcgQEAKK2ltcG9ydCBqYXZhLmlvLio7CisKK2NsYXNzIEZvbyB7CisgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUnVubmFibGUgcnVubmFibGUgPSBuZXcgUnVubmFibGUoKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdWJsaWMgdm9pZCBydW4oKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IElPRXhjZXB0aW9uKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoSU9FeGNlcHRpb24gPGNhcmV0PikgeworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9OworCisgIH0KKworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9DYXRjaEluQW5vbnltb3VzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvQ2F0Y2hJbkFub255bW91cy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhlZjNjY2QKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvQ2F0Y2hJbkFub255bW91cy5qYXZhCkBAIC0wLDAgKzEsMTcgQEAKK2ltcG9ydCBqYXZhLmlvLio7CisKK2NsYXNzIEZvbyB7CisgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUnVubmFibGUgcnVubmFibGUgPSBuZXcgUnVubmFibGUoKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdWJsaWMgdm9pZCBydW4oKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IElPRXhjZXB0aW9uKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoPGNhcmV0PikgeworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9OworCisgIH0KKworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9DaGVja1N0YXRpY0ltcG9ydHNUeXBlLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvQ2hlY2tTdGF0aWNJbXBvcnRzVHlwZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEzNzhlMzYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvQ2hlY2tTdGF0aWNJbXBvcnRzVHlwZS5qYXZhCkBAIC0wLDAgKzEsMTEgQEAKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworaW1wb3J0IGphdmEudXRpbC5MaXN0OworaW1wb3J0IHN0YXRpYyBqYXZhLmxhbmcuTWF0aC4qOworCitwdWJsaWMgY2xhc3MgVGVzdENsYXNzIHsKKyAgICBwcml2YXRlIExpc3Q8U3RyaW5nPiB0ZXN0TGlzdDsKKworICAgIHB1YmxpYyB2b2lkIHRlc3RNZSgpIHsKKyAgICAgICAgTGlzdDxTdHJpbmc+IG5ld0xpc3QgPSBuZXcgQXJyYXlMaXN0PFN0cmluZz4oYXQ8Y2FyZXQ+KTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL0NsYXNzTGl0ZXJhbC1vdXQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9DbGFzc0xpdGVyYWwtb3V0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODIzNjYzYgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9DbGFzc0xpdGVyYWwtb3V0LmphdmEKQEAgLTAsMCArMSw2IEBACitjbGFzcyBDIHsKKyAgdm9pZCBoIChDbGFzczw/IGV4dGVuZHMgU3RyaW5nPiBjbGF6eikge30KKyAgeworICAgIGgoPGNhcmV0Pik7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvQ2xhc3NMaXRlcmFsLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvQ2xhc3NMaXRlcmFsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODIzNjYzYgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9DbGFzc0xpdGVyYWwuamF2YQpAQCAtMCwwICsxLDYgQEAKK2NsYXNzIEMgeworICB2b2lkIGggKENsYXNzPD8gZXh0ZW5kcyBTdHJpbmc+IGNsYXp6KSB7fQorICB7CisgICAgaCg8Y2FyZXQ+KTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9DbGFzc0xpdGVyYWxJbkFubm8xLW91dC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL0NsYXNzTGl0ZXJhbEluQW5ubzEtb3V0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWU4MDAxYgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9DbGFzc0xpdGVyYWxJbkFubm8xLW91dC5qYXZhCkBAIC0wLDAgKzEsNSBAQAorQGludGVyZmFjZSBBbm5vIHsKKyAgQ2xhc3M8PyBleHRlbmRzIFN0cmluZz4gdmFsdWUoKTsKK30KK0BBbm5vKFN0cmluZy5jbGFzczxjYXJldD4pCitjbGFzcyBGb28ge30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvQ2xhc3NMaXRlcmFsSW5Bbm5vMS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL0NsYXNzTGl0ZXJhbEluQW5ubzEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNWUxYWI2Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL0NsYXNzTGl0ZXJhbEluQW5ubzEuamF2YQpAQCAtMCwwICsxLDUgQEAKK0BpbnRlcmZhY2UgQW5ubyB7CisgIENsYXNzPD8gZXh0ZW5kcyBTdHJpbmc+IHZhbHVlKCk7Cit9CitAQW5ubyhTdHJpbmcuY2w8Y2FyZXQ+KQorY2xhc3MgRm9vIHt9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL0NsYXNzTGl0ZXJhbEluQW5ubzItb3V0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvQ2xhc3NMaXRlcmFsSW5Bbm5vMi1vdXQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZTgwMDFiCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL0NsYXNzTGl0ZXJhbEluQW5ubzItb3V0LmphdmEKQEAgLTAsMCArMSw1IEBACitAaW50ZXJmYWNlIEFubm8geworICBDbGFzczw/IGV4dGVuZHMgU3RyaW5nPiB2YWx1ZSgpOworfQorQEFubm8oU3RyaW5nLmNsYXNzPGNhcmV0PikKK2NsYXNzIEZvbyB7fQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9DbGFzc0xpdGVyYWxJbkFubm8yLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvQ2xhc3NMaXRlcmFsSW5Bbm5vMi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlhYmVkOTgKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvQ2xhc3NMaXRlcmFsSW5Bbm5vMi5qYXZhCkBAIC0wLDAgKzEsNSBAQAorQGludGVyZmFjZSBBbm5vIHsKKyAgQ2xhc3M8PyBleHRlbmRzIFN0cmluZz4gdmFsdWUoKTsKK30KK0BBbm5vKDxjYXJldD4pCitjbGFzcyBGb28ge30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvQ2xhc3NMaXRlcmFsSW5BcnJheUFubm9Jbml0aWFsaXplci1vdXQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9DbGFzc0xpdGVyYWxJbkFycmF5QW5ub0luaXRpYWxpemVyLW91dC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNkMjkyYjEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvQ2xhc3NMaXRlcmFsSW5BcnJheUFubm9Jbml0aWFsaXplci1vdXQuamF2YQpAQCAtMCwwICsxLDEwIEBACitAaW50ZXJmYWNlIFRlc3RGb3IgeworICBDbGFzc1tdIHRlc3RGb3JDbGFzcygpOworfQorCitjbGFzcyBGb28geworICBAVGVzdEZvcih0ZXN0Rm9yQ2xhc3MgPSB7IEFhYWFhYWFhYWFhYWFhYWFhYWFhYS5jbGFzczxjYXJldD4gfSApCisgIHB1YmxpYyB2b2lkIGZvbzIyKCkge30KK30KKworY2xhc3MgQWFhYWFhYWFhYWFhYWFhYWFhYWFhIHt9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL0NsYXNzTGl0ZXJhbEluQXJyYXlBbm5vSW5pdGlhbGl6ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9DbGFzc0xpdGVyYWxJbkFycmF5QW5ub0luaXRpYWxpemVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTUyNDc2ZAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9DbGFzc0xpdGVyYWxJbkFycmF5QW5ub0luaXRpYWxpemVyLmphdmEKQEAgLTAsMCArMSwxMCBAQAorQGludGVyZmFjZSBUZXN0Rm9yIHsKKyAgQ2xhc3NbXSB0ZXN0Rm9yQ2xhc3MoKTsKK30KKworY2xhc3MgRm9vIHsKKyAgQFRlc3RGb3IodGVzdEZvckNsYXNzID0geyBBYWFhYWE8Y2FyZXQ+IH0gKQorICBwdWJsaWMgdm9pZCBmb28yMigpIHt9Cit9CisKK2NsYXNzIEFhYWFhYWFhYWFhYWFhYWFhYWFhYSB7fQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9DbGFzc0xpdGVyYWxJbkFycmF5QW5ub0luaXRpYWxpemVyMi1vdXQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9DbGFzc0xpdGVyYWxJbkFycmF5QW5ub0luaXRpYWxpemVyMi1vdXQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YWE5MDM1Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL0NsYXNzTGl0ZXJhbEluQXJyYXlBbm5vSW5pdGlhbGl6ZXIyLW91dC5qYXZhCkBAIC0wLDAgKzEsMTIgQEAKK2ltcG9ydCBqYXZhLmxhbmcuT2JqZWN0OworCitAaW50ZXJmYWNlIFRlc3RGb3IgeworICBDbGFzc1tdIHRlc3RGb3JDbGFzcygpOworfQorCitjbGFzcyBGb28geworICBAVGVzdEZvcih0ZXN0Rm9yQ2xhc3MgPSB7T2JqZWN0LmNsYXNzLCBBYWFhYWFhYWFhYWFhYWFhYWFhYWEuY2xhc3M8Y2FyZXQ+IH0gKQorICBwdWJsaWMgdm9pZCBmb28yMigpIHt9Cit9CisKK2NsYXNzIEFhYWFhYWFhYWFhYWFhYWFhYWFhYSB7fQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9DbGFzc0xpdGVyYWxJbkFycmF5QW5ub0luaXRpYWxpemVyMi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL0NsYXNzTGl0ZXJhbEluQXJyYXlBbm5vSW5pdGlhbGl6ZXIyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzYzODdmZQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9DbGFzc0xpdGVyYWxJbkFycmF5QW5ub0luaXRpYWxpemVyMi5qYXZhCkBAIC0wLDAgKzEsMTIgQEAKK2ltcG9ydCBqYXZhLmxhbmcuT2JqZWN0OworCitAaW50ZXJmYWNlIFRlc3RGb3IgeworICBDbGFzc1tdIHRlc3RGb3JDbGFzcygpOworfQorCitjbGFzcyBGb28geworICBAVGVzdEZvcih0ZXN0Rm9yQ2xhc3MgPSB7T2JqZWN0LmNsYXNzLCBBYWFhYWE8Y2FyZXQ+IH0gKQorICBwdWJsaWMgdm9pZCBmb28yMigpIHt9Cit9CisKK2NsYXNzIEFhYWFhYWFhYWFhYWFhYWFhYWFhYSB7fQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9DbGFzc0xpdGVyYWxJbmhlcml0b3JzLW91dC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL0NsYXNzTGl0ZXJhbEluaGVyaXRvcnMtb3V0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTc2OGE3MwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9DbGFzc0xpdGVyYWxJbmhlcml0b3JzLW91dC5qYXZhCkBAIC0wLDAgKzEsNiBAQAorQGludGVyZmFjZSBBbm5vIHsKKyAgQ2xhc3M8PyBleHRlbmRzIEZvbz4gdmFsdWUoKTsKK30KK0BBbm5vKEJhci5jbGFzczxjYXJldD4pCitjbGFzcyBGb28ge30KK2NsYXNzIEJhciBleHRlbmRzIEZvb3t9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL0NsYXNzTGl0ZXJhbEluaGVyaXRvcnMuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9DbGFzc0xpdGVyYWxJbmhlcml0b3JzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTA4MDEyMQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9DbGFzc0xpdGVyYWxJbmhlcml0b3JzLmphdmEKQEAgLTAsMCArMSw2IEBACitAaW50ZXJmYWNlIEFubm8geworICBDbGFzczw/IGV4dGVuZHMgRm9vPiB2YWx1ZSgpOworfQorQEFubm8oQjxjYXJldD4pCitjbGFzcyBGb28ge30KK2NsYXNzIEJhciBleHRlbmRzIEZvb3t9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL0NsYXNzTGl0ZXJhbFNob3VsZEluc2VydEltcG9ydC1vdXQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9DbGFzc0xpdGVyYWxTaG91bGRJbnNlcnRJbXBvcnQtb3V0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGFhYTg3MwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9DbGFzc0xpdGVyYWxTaG91bGRJbnNlcnRJbXBvcnQtb3V0LmphdmEKQEAgLTAsMCArMSw2IEBACitpbXBvcnQgYmFyLkludGY7CitpbXBvcnQgZm9vLkJhcjsKKworY2xhc3MgRm9vb29vIHsKKyAgICBDbGFzczw/IGV4dGVuZHMgSW50Zj4gZiA9IEJhci5jbGFzczs8Y2FyZXQ+Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL0NsYXNzTGl0ZXJhbFNob3VsZEluc2VydEltcG9ydC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL0NsYXNzTGl0ZXJhbFNob3VsZEluc2VydEltcG9ydC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNlMGQ2OWUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvQ2xhc3NMaXRlcmFsU2hvdWxkSW5zZXJ0SW1wb3J0LmphdmEKQEAgLTAsMCArMSw1IEBACitpbXBvcnQgYmFyLkludGY7CisKK2NsYXNzIEZvb29vbyB7CisgICAgQ2xhc3M8PyBleHRlbmRzIEludGY+IGYgPSBCPGNhcmV0PgorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9Db2xsZWN0aW9uc0VtcHR5U2V0SW5NZXRob2RDYWxsLW91dC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL0NvbGxlY3Rpb25zRW1wdHlTZXRJbk1ldGhvZENhbGwtb3V0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWJlYzM1MgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9Db2xsZWN0aW9uc0VtcHR5U2V0SW5NZXRob2RDYWxsLW91dC5qYXZhCkBAIC0wLDAgKzEsMTQgQEAKK2NsYXNzIFNldDxUPiB7fQorCitjbGFzcyBDb2xsZWN0aW9ucyB7CisgIHN0YXRpYyA8VD4gU2V0PFQ+IGVtcHR5U2V0KCkge30KK30KKworY2xhc3MgQmFyIHsKKworICB7CisgICAgZm9vKENvbGxlY3Rpb25zLjxTdHJpbmc+ZW1wdHlTZXQoKSk7PGNhcmV0PgorICB9CisKKyAgdm9pZCBmb28oU2V0PFN0cmluZz4gc2V0KXt9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL0NvbGxlY3Rpb25zRW1wdHlTZXRJbk1ldGhvZENhbGwuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9Db2xsZWN0aW9uc0VtcHR5U2V0SW5NZXRob2RDYWxsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmMwMzUzZQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9Db2xsZWN0aW9uc0VtcHR5U2V0SW5NZXRob2RDYWxsLmphdmEKQEAgLTAsMCArMSwxNCBAQAorY2xhc3MgU2V0PFQ+IHt9CisKK2NsYXNzIENvbGxlY3Rpb25zIHsKKyAgc3RhdGljIDxUPiBTZXQ8VD4gZW1wdHlTZXQoKSB7fQorfQorCitjbGFzcyBCYXIgeworCisgIHsKKyAgICBmb28oQ29sbGVjdGlvbnMuZTxjYXJldD4pCisgIH0KKworICB2b2lkIGZvbyhTZXQ8U3RyaW5nPiBzZXQpe30KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvQ29sbGVjdGlvbnNFbXB0eVNldEluVGVybmFyeS1vdXQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9Db2xsZWN0aW9uc0VtcHR5U2V0SW5UZXJuYXJ5LW91dC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYyOTJmMTkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvQ29sbGVjdGlvbnNFbXB0eVNldEluVGVybmFyeS1vdXQuamF2YQpAQCAtMCwwICsxLDE0IEBACitjbGFzcyBTZXQ8VD4ge30KKworY2xhc3MgQ29sbGVjdGlvbnMgeworICBzdGF0aWMgPFQ+IFNldDxUPiBlbXB0eVNldCgpIHt9Cit9CisKK2NsYXNzIEJhciB7CisKKyAgU2V0PFN0cmluZz4gYmFyKCkgeworICAgIHJldHVybiB0cnVlID8gQ29sbGVjdGlvbnMuPFN0cmluZz5lbXB0eVNldCgpIDogPGNhcmV0PgorICB9CisKKyAgdm9pZCBmb28oU2V0PFN0cmluZz4gc2V0KXt9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL0NvbGxlY3Rpb25zRW1wdHlTZXRJblRlcm5hcnkuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9Db2xsZWN0aW9uc0VtcHR5U2V0SW5UZXJuYXJ5LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWY5MTNlOGYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvQ29sbGVjdGlvbnNFbXB0eVNldEluVGVybmFyeS5qYXZhCkBAIC0wLDAgKzEsMTQgQEAKK2NsYXNzIFNldDxUPiB7fQorCitjbGFzcyBDb2xsZWN0aW9ucyB7CisgIHN0YXRpYyA8VD4gU2V0PFQ+IGVtcHR5U2V0KCkge30KK30KKworY2xhc3MgQmFyIHsKKworICBTZXQ8U3RyaW5nPiBiYXIoKSB7CisgICAgcmV0dXJuIHRydWUgPyBDb2xsZWN0aW9ucy5lPGNhcmV0PgorICB9CisKKyAgdm9pZCBmb28oU2V0PFN0cmluZz4gc2V0KXt9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL0NvbGxlY3Rpb25zRW1wdHlTZXRJblRlcm5hcnkyLW91dC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL0NvbGxlY3Rpb25zRW1wdHlTZXRJblRlcm5hcnkyLW91dC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUwMDgxZmIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvQ29sbGVjdGlvbnNFbXB0eVNldEluVGVybmFyeTItb3V0LmphdmEKQEAgLTAsMCArMSwxNCBAQAorY2xhc3MgU2V0PFQ+IHt9CisKK2NsYXNzIENvbGxlY3Rpb25zIHsKKyAgc3RhdGljIDxUPiBTZXQ8VD4gZW1wdHlTZXQoKSB7fQorfQorCitjbGFzcyBCYXIgeworCisgIFNldDxTdHJpbmc+IGJhcigpIHsKKyAgICByZXR1cm4gdHJ1ZSA/IG51bGwgOiBDb2xsZWN0aW9ucy48U3RyaW5nPmVtcHR5U2V0KCk7PGNhcmV0PgorICB9CisKKyAgdm9pZCBmb28oU2V0PFN0cmluZz4gc2V0KXt9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL0NvbGxlY3Rpb25zRW1wdHlTZXRJblRlcm5hcnkyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvQ29sbGVjdGlvbnNFbXB0eVNldEluVGVybmFyeTIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMGQ5NGI0Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL0NvbGxlY3Rpb25zRW1wdHlTZXRJblRlcm5hcnkyLmphdmEKQEAgLTAsMCArMSwxNCBAQAorY2xhc3MgU2V0PFQ+IHt9CisKK2NsYXNzIENvbGxlY3Rpb25zIHsKKyAgc3RhdGljIDxUPiBTZXQ8VD4gZW1wdHlTZXQoKSB7fQorfQorCitjbGFzcyBCYXIgeworCisgIFNldDxTdHJpbmc+IGJhcigpIHsKKyAgICByZXR1cm4gdHJ1ZSA/IG51bGwgOiBDb2xsZWN0aW9ucy5lPGNhcmV0PgorICB9CisKKyAgdm9pZCBmb28oU2V0PFN0cmluZz4gc2V0KXt9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL0NvbW1hRG91YmxlUGVuZXRyYXRpb24tb3V0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvQ29tbWFEb3VibGVQZW5ldHJhdGlvbi1vdXQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iM2U3ZjFlCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL0NvbW1hRG91YmxlUGVuZXRyYXRpb24tb3V0LmphdmEKQEAgLTAsMCArMSwxMSBAQAorcHVibGljIGFic3RyYWN0IGNsYXNzIFp6eiB7CisKKyAgICB7CisgICAgICAgIGZvbyhhYWFhKCksIDxjYXJldD4pCisgICAgfQorCisgICAgaW50IGFhYWEoKSB7fQorCisgICAgdm9pZCBmb28oaW50IGEpIHt9CisgICAgdm9pZCBmb28oaW50IGEsIFN0cmluZyBiKSB7fQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9Db21tYURvdWJsZVBlbmV0cmF0aW9uLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvQ29tbWFEb3VibGVQZW5ldHJhdGlvbi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQzZmExODAKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvQ29tbWFEb3VibGVQZW5ldHJhdGlvbi5qYXZhCkBAIC0wLDAgKzEsMTEgQEAKK3B1YmxpYyBhYnN0cmFjdCBjbGFzcyBaenogeworCisgICAgeworICAgICAgICBmb28oPGNhcmV0PikKKyAgICB9CisKKyAgICBpbnQgYWFhYSgpIHt9CisKKyAgICB2b2lkIGZvbyhpbnQgYSkge30KKyAgICB2b2lkIGZvbyhpbnQgYSwgU3RyaW5nIGIpIHt9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL0NvbW1vblByZWZpeFdpdGhTZWxlY3Rpb24tb3V0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvQ29tbW9uUHJlZml4V2l0aFNlbGVjdGlvbi1vdXQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMzAzMjc3Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL0NvbW1vblByZWZpeFdpdGhTZWxlY3Rpb24tb3V0LmphdmEKQEAgLTAsMCArMSwxMyBAQAoraW1wb3J0IGphdmEudXRpbC4qOworCitwdWJsaWMgY2xhc3MgRm9vQmFyIHsKKworICAgIHsKKyAgICAgICAgTGlzdDxTdHJpbmc+IGxhYWFhYWE7CisgICAgICAgIExpc3Q8U3RyaW5nPiBsYWFhYWJiYmJiYjsKKyAgICAgICAgZm9yIChTdHJpbmcgcyA6IGxhYWFhYWE8Y2FyZXQ+KSB7CisKKyAgICAgICAgfQorICAgIH0KKworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9Db21tb25QcmVmaXhXaXRoU2VsZWN0aW9uLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvQ29tbW9uUHJlZml4V2l0aFNlbGVjdGlvbi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlkMTY5YmEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvQ29tbW9uUHJlZml4V2l0aFNlbGVjdGlvbi5qYXZhCkBAIC0wLDAgKzEsMTMgQEAKK2ltcG9ydCBqYXZhLnV0aWwuKjsKKworcHVibGljIGNsYXNzIEZvb0JhciB7CisKKyAgICB7CisgICAgICAgIExpc3Q8U3RyaW5nPiBsYWFhYWFhOworICAgICAgICBMaXN0PFN0cmluZz4gbGFhYWFiYmJiYmI7CisgICAgICAgIGZvciAoU3RyaW5nIHMgOiA8c2VsZWN0aW9uPjxjYXJldD5sYWFhYXNkYWZzZGY8L3NlbGVjdGlvbj4pIHsKKworICAgICAgICB9CisgICAgfQorCit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL0NvbnN0YW50VHdpY2Utb3V0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvQ29uc3RhbnRUd2ljZS1vdXQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZjc3MDUwCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL0NvbnN0YW50VHdpY2Utb3V0LmphdmEKQEAgLTAsMCArMSwxMSBAQAorY2xhc3MgS2V5IHt9CisKK3B1YmxpYyBjbGFzcyBGb28geworICBzdGF0aWMgZmluYWwgS2V5IEZPTzsKKworICB2b2lkIGZvbyhLZXkga2V5KSB7fQorCisgIHsKKyAgICBmb28oRk9PKTs8Y2FyZXQ+CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvQ29uc3RhbnRUd2ljZS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL0NvbnN0YW50VHdpY2UuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMmU2MmRkCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL0NvbnN0YW50VHdpY2UuamF2YQpAQCAtMCwwICsxLDExIEBACitjbGFzcyBLZXkge30KKworcHVibGljIGNsYXNzIEZvbyB7CisgIHN0YXRpYyBmaW5hbCBLZXkgRk9POworCisgIHZvaWQgZm9vKEtleSBrZXkpIHt9CisKKyAgeworICAgIGZvbyg8Y2FyZXQ+KQorICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL0NvbnN0YW50VHdpY2UyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvQ29uc3RhbnRUd2ljZTIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zODg2ZjI4Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL0NvbnN0YW50VHdpY2UyLmphdmEKQEAgLTAsMCArMSwxMCBAQAoraW50ZXJmYWNlIEJhciB7CisgIGNoYXIgYzsKKyAgY2hhciBkOworfQorCitjbGFzcyBGb28geworICB7CisgICAgU3RyaW5nIHMgPSAiIi5zdWJzdHJpbmcoIiIubGFzdEluZGV4T2YoQmFyLjxjYXJldD4pKTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9Db25zdHJ1Y3RvckFyZ3NTbWFydEVudGVyLW91dC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL0NvbnN0cnVjdG9yQXJnc1NtYXJ0RW50ZXItb3V0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWQyNWY5MwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9Db25zdHJ1Y3RvckFyZ3NTbWFydEVudGVyLW91dC5qYXZhCkBAIC0wLDAgKzEsMTAgQEAKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitwdWJsaWMgY2xhc3MgTXlKYXZhQ2xhc3MgeworCisgICAgeworCisgICAgICAgIExpc3QgbCA9IG5ldyBBcnJheUxpc3QoMjM5KTs8Y2FyZXQ+CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL0NvbnN0cnVjdG9yQXJnc1NtYXJ0RW50ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9Db25zdHJ1Y3RvckFyZ3NTbWFydEVudGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjI4YzgyYwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9Db25zdHJ1Y3RvckFyZ3NTbWFydEVudGVyLmphdmEKQEAgLTAsMCArMSw5IEBACitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK3B1YmxpYyBjbGFzcyBNeUphdmFDbGFzcyB7CisKKyAgICB7CisKKyAgICAgICAgTGlzdCBsID0gbmV3IEFycmFMPGNhcmV0PjIzOQorICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9Db25zdHJ1Y3Rvck5vUGFpckJyYWNrZXRTZW1pY29sb24tb3V0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvQ29uc3RydWN0b3JOb1BhaXJCcmFja2V0U2VtaWNvbG9uLW91dC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIxYjlhOTIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvQ29uc3RydWN0b3JOb1BhaXJCcmFja2V0U2VtaWNvbG9uLW91dC5qYXZhCkBAIC0wLDAgKzEsNSBAQAorY2xhc3MgQSB7CisgIHsKKyAgICBTdHJpbmcgYyA9IG5ldyBTdHJpbmcoKTs8Y2FyZXQ+CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvQ29uc3RydWN0b3JOb1BhaXJCcmFja2V0U2VtaWNvbG9uLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvQ29uc3RydWN0b3JOb1BhaXJCcmFja2V0U2VtaWNvbG9uLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjA1YzAyMQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9Db25zdHJ1Y3Rvck5vUGFpckJyYWNrZXRTZW1pY29sb24uamF2YQpAQCAtMCwwICsxLDUgQEAKK2NsYXNzIEEgeworICB7CisgICAgU3RyaW5nIGMgPSBuZXcgU3RyaTxjYXJldD4KKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9Db25zdHJ1Y3Rvck9uU2VwYXJhdGVMaW5lSW5NZXRob2RDYWxsLW91dC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL0NvbnN0cnVjdG9yT25TZXBhcmF0ZUxpbmVJbk1ldGhvZENhbGwtb3V0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDg1OTU5NwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9Db25zdHJ1Y3Rvck9uU2VwYXJhdGVMaW5lSW5NZXRob2RDYWxsLW91dC5qYXZhCkBAIC0wLDAgKzEsMTAgQEAKK2NsYXNzIE1haW4geworICAgIHByaXZhdGUgc3RhdGljIHZvaWQgbWV0aG9kKEludGVnZXIgcGFyYW0pIHsKKyAgICB9CisKKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisgICAgICAgIG1ldGhvZCgKKyAgICAgICAgICAgICAgICBuZXcgSW50ZWdlcig8Y2FyZXQ+KQorICAgICAgICApOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvQ29uc3RydWN0b3JPblNlcGFyYXRlTGluZUluTWV0aG9kQ2FsbC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL0NvbnN0cnVjdG9yT25TZXBhcmF0ZUxpbmVJbk1ldGhvZENhbGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZjE3YWVjCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL0NvbnN0cnVjdG9yT25TZXBhcmF0ZUxpbmVJbk1ldGhvZENhbGwuamF2YQpAQCAtMCwwICsxLDEwIEBACitjbGFzcyBNYWluIHsKKyAgICBwcml2YXRlIHN0YXRpYyB2b2lkIG1ldGhvZChJbnRlZ2VyIHBhcmFtKSB7CisgICAgfQorCisgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworICAgICAgICBtZXRob2QoCisgICAgICAgICAgICAgICAgbmV3IDxjYXJldD4KKyAgICAgICAgKTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL0NvbnN0cnVjdG9yV2l0aEV4aXN0aW5nUGFyZW5zLW91dC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL0NvbnN0cnVjdG9yV2l0aEV4aXN0aW5nUGFyZW5zLW91dC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVkYzNiZjcKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvQ29uc3RydWN0b3JXaXRoRXhpc3RpbmdQYXJlbnMtb3V0LmphdmEKQEAgLTAsMCArMSw3IEBACitwdWJsaWMgY2xhc3MgVGVzdFNtYXJ0Q29tcGxldGUgeworICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKyAgICAgICAgTG9uZyB2YXI7CisKKyAgICAgICAgdmFyID0gbmV3IExvbmcoPGNhcmV0Pik7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9Db25zdHJ1Y3RvcldpdGhFeGlzdGluZ1BhcmVucy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL0NvbnN0cnVjdG9yV2l0aEV4aXN0aW5nUGFyZW5zLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDQzNDljOQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9Db25zdHJ1Y3RvcldpdGhFeGlzdGluZ1BhcmVucy5qYXZhCkBAIC0wLDAgKzEsNyBAQAorcHVibGljIGNsYXNzIFRlc3RTbWFydENvbXBsZXRlIHsKKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisgICAgICAgIExvbmcgdmFyOworCisgICAgICAgIHZhciA9IG5ldyA8Y2FyZXQ+KCk7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9EZWZhdWx0QW5ub01ldGhvZFZhbHVlLW91dC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL0RlZmF1bHRBbm5vTWV0aG9kVmFsdWUtb3V0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjExMDI1NQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9EZWZhdWx0QW5ub01ldGhvZFZhbHVlLW91dC5qYXZhCkBAIC0wLDAgKzEsOCBAQAorZW51bSBNeUVudW0geworICBGT08sIEJBUjsKK30KKworcHVibGljIEBpbnRlcmZhY2UgRm9vIHsKKyAgICAKKyAgICBNeUVudW0gZW4oKSBkZWZhdWx0IE15RW51bS5GT087PGNhcmV0PgorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL0RlZmF1bHRBbm5vTWV0aG9kVmFsdWUuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9EZWZhdWx0QW5ub01ldGhvZFZhbHVlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODU1M2IwYgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9EZWZhdWx0QW5ub01ldGhvZFZhbHVlLmphdmEKQEAgLTAsMCArMSw4IEBACitlbnVtIE15RW51bSB7CisgIEZPTywgQkFSOworfQorCitwdWJsaWMgQGludGVyZmFjZSBGb28geworICAgIAorICAgIE15RW51bSBlbigpIGRlZmF1bHQgRjxjYXJldD4KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9EZWZhdWx0QW5ub1BhcmFtLW91dC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL0RlZmF1bHRBbm5vUGFyYW0tb3V0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjIzM2RkMgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9EZWZhdWx0QW5ub1BhcmFtLW91dC5qYXZhCkBAIC0wLDAgKzEsMTYgQEAKK0BpbnRlcmZhY2UgQW5ubyB7CisgIFN0cmluZyB2YWx1ZSgpOworfQorCitwdWJsaWMgY2xhc3MgRm9vQmFyIHsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBGT09fQkFSOworCisgICAgQEFubm8oRk9PX0JBUjxjYXJldD4pCisgICAgdm9pZCBtKCkge30KKworICAgIFN0cmluZyBGb29CYXJycnJycigpIHt9CisKKyAgICBwdWJsaWMgc3RhdGljIFN0cmluZyBGb29CYXJycnIoKSB7fQorCisKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9EZWZhdWx0QW5ub1BhcmFtLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvRGVmYXVsdEFubm9QYXJhbS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYwYjhkOGIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvRGVmYXVsdEFubm9QYXJhbS5qYXZhCkBAIC0wLDAgKzEsMTYgQEAKK0BpbnRlcmZhY2UgQW5ubyB7CisgIFN0cmluZyB2YWx1ZSgpOworfQorCitwdWJsaWMgY2xhc3MgRm9vQmFyIHsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBGT09fQkFSOworCisgICAgQEFubm8oRkI8Y2FyZXQ+KQorICAgIHZvaWQgbSgpIHt9CisKKyAgICBTdHJpbmcgRm9vQmFycnJycnIoKSB7fQorCisgICAgcHVibGljIHN0YXRpYyBTdHJpbmcgRm9vQmFycnJyKCkge30KKworCit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvRGVmYXVsdEFubm9QYXJhbTItb3V0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvRGVmYXVsdEFubm9QYXJhbTItb3V0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmVlN2E5OQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9EZWZhdWx0QW5ub1BhcmFtMi1vdXQuamF2YQpAQCAtMCwwICsxLDE0IEBACitAaW50ZXJmYWNlIEFubm8geworICBTdHJpbmcgdmFsdWUoKTsKK30KKworQEFubm8oRm9vQmFyLkZFRV9CQVI8Y2FyZXQ+KQorcHVibGljIGNsYXNzIEZvb0JhciB7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRkVFX0JBUjsKKworICAgIFN0cmluZyBGb29CYXJycnJycigpIHt9CisKKyAgICBwdWJsaWMgc3RhdGljIFN0cmluZyBGb29CYXJycnIoKSB7fQorCisKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9EZWZhdWx0QW5ub1BhcmFtMi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL0RlZmF1bHRBbm5vUGFyYW0yLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDE2N2IwOAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9EZWZhdWx0QW5ub1BhcmFtMi5qYXZhCkBAIC0wLDAgKzEsMTQgQEAKK0BpbnRlcmZhY2UgQW5ubyB7CisgIFN0cmluZyB2YWx1ZSgpOworfQorCitAQW5ubyhGQjxjYXJldD4pCitwdWJsaWMgY2xhc3MgRm9vQmFyIHsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBGRUVfQkFSOworCisgICAgU3RyaW5nIEZvb0JhcnJycnJyKCkge30KKworICAgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIEZvb0JhcnJycigpIHt9CisKKworfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL0RlbGVnYXRlTWV0aG9kQXJndW1lbnRzLW91dC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL0RlbGVnYXRlTWV0aG9kQXJndW1lbnRzLW91dC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ5MmY5ZTUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvRGVsZWdhdGVNZXRob2RBcmd1bWVudHMtb3V0LmphdmEKQEAgLTAsMCArMSwxNCBAQAorcHVibGljIGNsYXNzIFNvbWVDbGFzcyB7CisKKyAgICBwdWJsaWMgdm9pZCBmb28oaW50IGNvdW50KSB7fQorICAgIHB1YmxpYyBzdGF0aWMgT2JqZWN0IGZvbyhpbnQgY291bnQsIFN0cmluZyBkZXNjcikgeworCisgICAgfQorCit9CisKK2NsYXNzIFNvbWVDbGFzc0ltcGwgeworICAgIHB1YmxpYyBPYmplY3QgZm9vKGludCBjb3VudCwgU3RyaW5nIGRlc2NyaXB0aW9uKSB7CisgICAgICAgIFNvbWVDbGFzcy5mb28oY291bnQsIGRlc2NyaXB0aW9uKTxjYXJldD47CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL0RlbGVnYXRlTWV0aG9kQXJndW1lbnRzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvRGVsZWdhdGVNZXRob2RBcmd1bWVudHMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZmEyMWUwCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL0RlbGVnYXRlTWV0aG9kQXJndW1lbnRzLmphdmEKQEAgLTAsMCArMSwxNCBAQAorcHVibGljIGNsYXNzIFNvbWVDbGFzcyB7CisKKyAgICBwdWJsaWMgdm9pZCBmb28oaW50IGNvdW50KSB7fQorICAgIHB1YmxpYyBzdGF0aWMgT2JqZWN0IGZvbyhpbnQgY291bnQsIFN0cmluZyBkZXNjcikgeworCisgICAgfQorCit9CisKK2NsYXNzIFNvbWVDbGFzc0ltcGwgeworICAgIHB1YmxpYyBPYmplY3QgZm9vKGludCBjb3VudCwgU3RyaW5nIGRlc2NyaXB0aW9uKSB7CisgICAgICAgIFNvbWVDbGFzcy5mb28oPGNhcmV0Pik7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL0RlbGVnYXRpb25Ub1BhcmVudC1vdXQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9EZWxlZ2F0aW9uVG9QYXJlbnQtb3V0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjM2NDgyMgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9EZWxlZ2F0aW9uVG9QYXJlbnQtb3V0LmphdmEKQEAgLTAsMCArMSwxNSBAQAorY2xhc3MgRXh0ZW5zaW9uUG9pbnROYW1lPFQ+IHsKKyAgICBwdWJsaWMgc3RhdGljIDxUPiBFeHRlbnNpb25Qb2ludE5hbWU8VD4gY3JlYXRlKFN0cmluZyBzKSB7IHJldHVybiBudWxsOyB9Cit9CisKK2NsYXNzIEZvbzxCPiB7CisgICAgcHVibGljIHN0YXRpYyA8VD4gVFtdIGdldEV4dGVuc2lvbnMoRXh0ZW5zaW9uUG9pbnROYW1lPFQ+IGV4dGVuc2lvblBvaW50TmFtZSkgeworICAgICAgcmV0dXJuIG51bGw7CisgICAgfQorCisgICAgRXh0ZW5zaW9uUG9pbnROYW1lPEI+IEVYVEVOU0lPTl9QT0lOVF9OQU1FID0gRXh0ZW5zaW9uUG9pbnROYW1lLmNyZWF0ZSgiY29tLmludGVsbGlqLmZpbGVCYXNlZEluZGV4Iik7CisKKyAgICB2b2lkIGYoKSB7CisgICAgICAgIGZpbmFsIEJbXSBleHRlbnNpb25zID0gZ2V0RXh0ZW5zaW9ucyhFWFRFTlNJT05fUE9JTlRfTkFNRSk8Y2FyZXQ+OworICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9EZWxlZ2F0aW9uVG9QYXJlbnQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9EZWxlZ2F0aW9uVG9QYXJlbnQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMzVlN2E0Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL0RlbGVnYXRpb25Ub1BhcmVudC5qYXZhCkBAIC0wLDAgKzEsMTUgQEAKK2NsYXNzIEV4dGVuc2lvblBvaW50TmFtZTxUPiB7CisgICAgcHVibGljIHN0YXRpYyA8VD4gRXh0ZW5zaW9uUG9pbnROYW1lPFQ+IGNyZWF0ZShTdHJpbmcgcykgeyByZXR1cm4gbnVsbDsgfQorfQorCitjbGFzcyBGb288Qj4geworICAgIHB1YmxpYyBzdGF0aWMgPFQ+IFRbXSBnZXRFeHRlbnNpb25zKEV4dGVuc2lvblBvaW50TmFtZTxUPiBleHRlbnNpb25Qb2ludE5hbWUpIHsKKyAgICAgIHJldHVybiBudWxsOworICAgIH0KKworICAgIEV4dGVuc2lvblBvaW50TmFtZTxCPiBFWFRFTlNJT05fUE9JTlRfTkFNRSA9IEV4dGVuc2lvblBvaW50TmFtZS5jcmVhdGUoImNvbS5pbnRlbGxpai5maWxlQmFzZWRJbmRleCIpOworCisgICAgdm9pZCBmKCkgeworICAgICAgICBmaW5hbCBCW10gZXh0ZW5zaW9ucyA9IGdldEV4dGVuc2lvbnMoPGNhcmV0PlhYWC5FWFRFTlNJT05fUE9JTlRfTkFNRSk7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL0RpYW1vbmRDb2xsYXBzZWQtb3V0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvRGlhbW9uZENvbGxhcHNlZC1vdXQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZTU5NDc3Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL0RpYW1vbmRDb2xsYXBzZWQtb3V0LmphdmEKQEAgLTAsMCArMSw4IEBACitjbGFzcyBNeUNsYXNzIHsKKyAgcHVibGljIHZvaWQgZm9vKCkgeworICAgIE15REQ8U3RyaW5nPiBkID0gbmV3IE15REQ8PigpOzxjYXJldD4KKyAgfQorfQorCitjbGFzcyBNeUREPFQ+IHsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvRGlhbW9uZENvbGxhcHNlZC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL0RpYW1vbmRDb2xsYXBzZWQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZmYxYjRhCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL0RpYW1vbmRDb2xsYXBzZWQuamF2YQpAQCAtMCwwICsxLDggQEAKK2NsYXNzIE15Q2xhc3MgeworICBwdWJsaWMgdm9pZCBmb28oKSB7CisgICAgTXlERDxTdHJpbmc+IGQgPSBuZXcgTXlEPGNhcmV0PgorICB9Cit9CisKK2NsYXNzIE15REQ8VD4geworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9EaWFtb25kTm90Q29sbGFwc2VkLW91dC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL0RpYW1vbmROb3RDb2xsYXBzZWQtb3V0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjBlMGFjNQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9EaWFtb25kTm90Q29sbGFwc2VkLW91dC5qYXZhCkBAIC0wLDAgKzEsOSBAQAorY2xhc3MgTXlDbGFzcyB7CisgIHB1YmxpYyB2b2lkIGZvbygpIHsKKyAgICBNeUREPFN0cmluZz4gZCA9IG5ldyBNeUREPFN0cmluZz4oPGNhcmV0Pik7CisgIH0KK30KKworY2xhc3MgTXlERDxUPiB7CisgIE15REQoVCB0KXt9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL0RpYW1vbmROb3RDb2xsYXBzZWQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9EaWFtb25kTm90Q29sbGFwc2VkLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTI2NzkxNQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9EaWFtb25kTm90Q29sbGFwc2VkLmphdmEKQEAgLTAsMCArMSw5IEBACitjbGFzcyBNeUNsYXNzIHsKKyAgcHVibGljIHZvaWQgZm9vKCkgeworICAgIE15REQ8U3RyaW5nPiBkID0gbmV3IE15RDxjYXJldD4KKyAgfQorfQorCitjbGFzcyBNeUREPFQ+IHsKKyAgTXlERChUIHQpe30KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvRGlhbW9uZE5vdENvbGxhcHNlZEluQ2FzZU9mQW5vbnltb3VzQ2xhc3Nlcy1vdXQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9EaWFtb25kTm90Q29sbGFwc2VkSW5DYXNlT2ZBbm9ueW1vdXNDbGFzc2VzLW91dC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBiMmQ5ZTcKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvRGlhbW9uZE5vdENvbGxhcHNlZEluQ2FzZU9mQW5vbnltb3VzQ2xhc3Nlcy1vdXQuamF2YQpAQCAtMCwwICsxLDMzIEBACitjbGFzcyBNeUNsYXNzIHsKKyAgcHVibGljIHZvaWQgZm9vKCkgeworICAgIE15REQ8U3RyaW5nPiBkID0gbmV3IE15REQ8U3RyaW5nPigpIHsKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyBpbnQgaGFzaENvZGUoKSB7CisgICAgICAgICAgICA8c2VsZWN0aW9uPnJldHVybiBzdXBlci5oYXNoQ29kZSgpOyAgICAvL1RvIGNoYW5nZSBib2R5IG9mIG92ZXJyaWRkZW4gbWV0aG9kcyB1c2UgRmlsZSB8IFNldHRpbmdzIHwgRmlsZSBUZW1wbGF0ZXMuPC9zZWxlY3Rpb24+CisgICAgICAgIH0KKworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIGJvb2xlYW4gZXF1YWxzKE9iamVjdCBvYmopIHsKKyAgICAgICAgICAgIHJldHVybiBzdXBlci5lcXVhbHMob2JqKTsgICAgLy9UbyBjaGFuZ2UgYm9keSBvZiBvdmVycmlkZGVuIG1ldGhvZHMgdXNlIEZpbGUgfCBTZXR0aW5ncyB8IEZpbGUgVGVtcGxhdGVzLgorICAgICAgICB9CisKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHByb3RlY3RlZCBPYmplY3QgY2xvbmUoKSB0aHJvd3MgQ2xvbmVOb3RTdXBwb3J0ZWRFeGNlcHRpb24geworICAgICAgICAgICAgcmV0dXJuIHN1cGVyLmNsb25lKCk7ICAgIC8vVG8gY2hhbmdlIGJvZHkgb2Ygb3ZlcnJpZGRlbiBtZXRob2RzIHVzZSBGaWxlIHwgU2V0dGluZ3MgfCBGaWxlIFRlbXBsYXRlcy4KKyAgICAgICAgfQorCisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgeworICAgICAgICAgICAgcmV0dXJuIHN1cGVyLnRvU3RyaW5nKCk7ICAgIC8vVG8gY2hhbmdlIGJvZHkgb2Ygb3ZlcnJpZGRlbiBtZXRob2RzIHVzZSBGaWxlIHwgU2V0dGluZ3MgfCBGaWxlIFRlbXBsYXRlcy4KKyAgICAgICAgfQorCisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwcm90ZWN0ZWQgdm9pZCBmaW5hbGl6ZSgpIHRocm93cyBUaHJvd2FibGUgeworICAgICAgICAgICAgc3VwZXIuZmluYWxpemUoKTsgICAgLy9UbyBjaGFuZ2UgYm9keSBvZiBvdmVycmlkZGVuIG1ldGhvZHMgdXNlIEZpbGUgfCBTZXR0aW5ncyB8IEZpbGUgVGVtcGxhdGVzLgorICAgICAgICB9CisgICAgfTsKKyAgfQorfQorCithYnN0cmFjdCBjbGFzcyBNeUREPFQ+IHsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvRGlhbW9uZE5vdENvbGxhcHNlZEluQ2FzZU9mQW5vbnltb3VzQ2xhc3Nlcy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL0RpYW1vbmROb3RDb2xsYXBzZWRJbkNhc2VPZkFub255bW91c0NsYXNzZXMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NDZjNTljCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL0RpYW1vbmROb3RDb2xsYXBzZWRJbkNhc2VPZkFub255bW91c0NsYXNzZXMuamF2YQpAQCAtMCwwICsxLDggQEAKK2NsYXNzIE15Q2xhc3MgeworICBwdWJsaWMgdm9pZCBmb28oKSB7CisgICAgTXlERDxTdHJpbmc+IGQgPSBuZXcgTXlEPGNhcmV0PgorICB9Cit9CisKK2Fic3RyYWN0IGNsYXNzIE15REQ8VD4geworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9EaWFtb25kTm90Q29sbGFwc2VkSW5DYXNlT2ZJbmFwcGxpY2FibGVJbmZlcmVuY2Utb3V0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvRGlhbW9uZE5vdENvbGxhcHNlZEluQ2FzZU9mSW5hcHBsaWNhYmxlSW5mZXJlbmNlLW91dC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE2NTgwNjAKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvRGlhbW9uZE5vdENvbGxhcHNlZEluQ2FzZU9mSW5hcHBsaWNhYmxlSW5mZXJlbmNlLW91dC5qYXZhCkBAIC0wLDAgKzEsMTIgQEAKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworCitwdWJsaWMgY2xhc3MgQ29tcGxldGlvbldpdGhQYXNzVG9NZXRob2QgeworCisgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworICAgICAgICBmb28obmV3IEFycmF5TGlzdDxTdHJpbmc+KCkpOworICAgIH0KKworCisgICAgc3RhdGljIHZvaWQgZm9vKEFycmF5TGlzdDxTdHJpbmc+IGxsKSB7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL0RpYW1vbmROb3RDb2xsYXBzZWRJbkNhc2VPZkluYXBwbGljYWJsZUluZmVyZW5jZS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL0RpYW1vbmROb3RDb2xsYXBzZWRJbkNhc2VPZkluYXBwbGljYWJsZUluZmVyZW5jZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ2NjVmN2EKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvRGlhbW9uZE5vdENvbGxhcHNlZEluQ2FzZU9mSW5hcHBsaWNhYmxlSW5mZXJlbmNlLmphdmEKQEAgLTAsMCArMSwxMiBAQAoraW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CisKK3B1YmxpYyBjbGFzcyBDb21wbGV0aW9uV2l0aFBhc3NUb01ldGhvZCB7CisKKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisgICAgICAgIGZvbyhuZXcgQXJyYXlMPGNhcmV0Pik7CisgICAgfQorCisKKyAgICBzdGF0aWMgdm9pZCBmb28oQXJyYXlMaXN0PFN0cmluZz4gbGwpIHsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvRGlhbW9uZE5vdENvbGxhcHNlZE5vdEFwcGxpY2FibGUtb3V0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvRGlhbW9uZE5vdENvbGxhcHNlZE5vdEFwcGxpY2FibGUtb3V0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjE4ZmQzMwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9EaWFtb25kTm90Q29sbGFwc2VkTm90QXBwbGljYWJsZS1vdXQuamF2YQpAQCAtMCwwICsxLDE1IEBACitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKKworcHVibGljIGNsYXNzIFRlc3RDb21wbGV0aW9uIHsKKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgdGVzdCgpIHsKKyAgICAgICAgQTxBcnJheUxpc3Q8U3RyaW5nPj4gcmVmID0gbmV3IEE8PigpOworICAgICAgICByZWYuc2V0KG5ldyBBcnJheUxpc3Q8U3RyaW5nPig8Y2FyZXQ+KSApOworICAgIH0KK30KKworY2xhc3MgQTxWPiB7CisgICAgQSgpIHsKKyAgICB9CisKKyAgICB2b2lkIHNldChWIHYpe30KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvRGlhbW9uZE5vdENvbGxhcHNlZE5vdEFwcGxpY2FibGUuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9EaWFtb25kTm90Q29sbGFwc2VkTm90QXBwbGljYWJsZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNkNzlhMzMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvRGlhbW9uZE5vdENvbGxhcHNlZE5vdEFwcGxpY2FibGUuamF2YQpAQCAtMCwwICsxLDE1IEBACitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKKworcHVibGljIGNsYXNzIFRlc3RDb21wbGV0aW9uIHsKKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgdGVzdCgpIHsKKyAgICAgICAgQTxBcnJheUxpc3Q8U3RyaW5nPj4gcmVmID0gbmV3IEE8PigpOworICAgICAgICByZWYuc2V0KG5ldyA8Y2FyZXQ+ICk7CisgICAgfQorfQorCitjbGFzcyBBPFY+IHsKKyAgICBBKCkgeworICAgIH0KKworICAgIHZvaWQgc2V0KFYgdil7fQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9EaWFtb25kUHJlc2VudGF0aW9uLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvRGlhbW9uZFByZXNlbnRhdGlvbi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRkZGU2NDcKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvRGlhbW9uZFByZXNlbnRhdGlvbi5qYXZhCkBAIC0wLDAgKzEsOCBAQAorY2xhc3MgTXlDbGFzcyB7CisgIHB1YmxpYyB2b2lkIGZvbygpIHsKKyAgICBNeUREPFN0cmluZz4gZCA9IG5ldyBNeUQ8Y2FyZXQ+eAorICB9Cit9CisKK2NsYXNzIE15REQ8VD4geworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9Eb05vdEV4Y2x1ZGVBc3NpZ25lZFZhcmlhYmxlLW91dC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL0RvTm90RXhjbHVkZUFzc2lnbmVkVmFyaWFibGUtb3V0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDhkMjljMAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9Eb05vdEV4Y2x1ZGVBc3NpZ25lZFZhcmlhYmxlLW91dC5qYXZhCkBAIC0wLDAgKzEsMTEgQEAKK2NsYXNzIEZvbyB7CisgIEZvbyBteUZvbzsKKworICBGb28gZm9vKEZvbyBmb28pIHsKKyAgfQorCisgIHsKKyAgICBteUZvbyA9IGZvbyhteUZvbyk8Y2FyZXQ+CisgIH0KKworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9Eb05vdEV4Y2x1ZGVBc3NpZ25lZFZhcmlhYmxlLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvRG9Ob3RFeGNsdWRlQXNzaWduZWRWYXJpYWJsZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE1OGM3MmEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvRG9Ob3RFeGNsdWRlQXNzaWduZWRWYXJpYWJsZS5qYXZhCkBAIC0wLDAgKzEsMTEgQEAKK2NsYXNzIEZvbyB7CisgIEZvbyBteUZvbzsKKworICBGb28gZm9vKEZvbyBmb28pIHsKKyAgfQorCisgIHsKKyAgICBteUZvbyA9IGZvbyhtPGNhcmV0PikKKyAgfQorCit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL0RvbnRBdXRvQ2FzdFdoZW5BbHJlYWR5Q2FzdGVkLW91dC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL0RvbnRBdXRvQ2FzdFdoZW5BbHJlYWR5Q2FzdGVkLW91dC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUzZWNlMmQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvRG9udEF1dG9DYXN0V2hlbkFscmVhZHlDYXN0ZWQtb3V0LmphdmEKQEAgLTAsMCArMSw5IEBACitjbGFzcyBCIHsKKyAgeworICAgICAgT2JqZWN0IG87CisgICAgICBpZiAobyBpbnN0YW5jZW9mIFN0cmluZykgeworICAgICAgICAgIFN0cmluZyBzID0gKFN0cmluZykgbzsKKyAgICAgICAgICBTdHJpbmcgc3MgPSBzOworICAgICAgfQorICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL0RvbnRBdXRvQ2FzdFdoZW5BbHJlYWR5Q2FzdGVkLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvRG9udEF1dG9DYXN0V2hlbkFscmVhZHlDYXN0ZWQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZGYxOWU5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL0RvbnRBdXRvQ2FzdFdoZW5BbHJlYWR5Q2FzdGVkLmphdmEKQEAgLTAsMCArMSw5IEBACitjbGFzcyBCIHsKKyAgeworICAgICAgT2JqZWN0IG87CisgICAgICBpZiAobyBpbnN0YW5jZW9mIFN0cmluZykgeworICAgICAgICAgIFN0cmluZyBzID0gKFN0cmluZykgbzsKKyAgICAgICAgICBTdHJpbmcgc3MgPSA8Y2FyZXQ+CisgICAgICB9CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvRG91YmxlRW1wdHlBcnJheS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL0RvdWJsZUVtcHR5QXJyYXkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xM2M3ODRiCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL0RvdWJsZUVtcHR5QXJyYXkuamF2YQpAQCAtMCwwICsxLDEyIEBACitjbGFzcyBGb28geworICBwdWJsaWMgc3RhdGljIGZpbmFsIEZvb1tdIEVNUFRZID0gbmV3IEZvb1swXTsKK30KKworY2xhc3MgQmFyIHsKKworICBGb29bXSBiYXIoKSB7fQorCisgIEZvb1tdIGZvbygpIHsKKyAgICByZXR1cm4gPGNhcmV0PjsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9Eb3VibGVTZW1pY29sb25QZW5ldHJhdGlvbi1vdXQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9Eb3VibGVTZW1pY29sb25QZW5ldHJhdGlvbi1vdXQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOGZhZWYxCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL0RvdWJsZVNlbWljb2xvblBlbmV0cmF0aW9uLW91dC5qYXZhCkBAIC0wLDAgKzEsMTEgQEAKK3B1YmxpYyBjbGFzcyBGb28geworCisgICAgdm9pZCBiYXIoKSB7CisgICAgICB0aGlzLmZvbygpOzxjYXJldD4KKyAgICB9CisKKyAgICB2b2lkIGZvbygpIHsKKworICAgIH0KKworfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL0RvdWJsZVNlbWljb2xvblBlbmV0cmF0aW9uLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvRG91YmxlU2VtaWNvbG9uUGVuZXRyYXRpb24uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZjhlMTIwCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL0RvdWJsZVNlbWljb2xvblBlbmV0cmF0aW9uLmphdmEKQEAgLTAsMCArMSwxMSBAQAorcHVibGljIGNsYXNzIEZvbyB7CisKKyAgICB2b2lkIGJhcigpIHsKKyAgICAgIHRoaXMuZm88Y2FyZXQ+CisgICAgfQorCisgICAgdm9pZCBmb28oKSB7CisKKyAgICB9CisKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9Eb3VibGVUaGlzLW91dC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL0RvdWJsZVRoaXMtb3V0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWVmNGFkZgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9Eb3VibGVUaGlzLW91dC5qYXZhCkBAIC0wLDAgKzEsMTEgQEAKK2ludGVyZmFjZSBBYWEge30KK2ludGVyZmFjZSBCYmIge30KKworY2xhc3MgQ2NjIGltcGxlbWVudHMgQWFhLCBCYmIgeworICAgIHZvaWQgZm9vKEFhYSBhKTsKKyAgICB2b2lkIGZvbyhCYmIgYik7CisKKyAgICB7CisgICAgICAgIGZvbyh0aGlzKTs8Y2FyZXQ+CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9Eb3VibGVUaGlzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvRG91YmxlVGhpcy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU0MmU2YmYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvRG91YmxlVGhpcy5qYXZhCkBAIC0wLDAgKzEsMTEgQEAKK2ludGVyZmFjZSBBYWEge30KK2ludGVyZmFjZSBCYmIge30KKworY2xhc3MgQ2NjIGltcGxlbWVudHMgQWFhLCBCYmIgeworICAgIHZvaWQgZm9vKEFhYSBhKTsKKyAgICB2b2lkIGZvbyhCYmIgYik7CisKKyAgICB7CisgICAgICAgIGZvbyg8Y2FyZXQ+KQorICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvRG91YmxlVHJ1ZUluT3ZlcmxvYWRlZE1ldGhvZENhbGwtb3V0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvRG91YmxlVHJ1ZUluT3ZlcmxvYWRlZE1ldGhvZENhbGwtb3V0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmIzZDMxNgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9Eb3VibGVUcnVlSW5PdmVybG9hZGVkTWV0aG9kQ2FsbC1vdXQuamF2YQpAQCAtMCwwICsxLDggQEAKK2NsYXNzIENsaWVudCB7CisgICAgeworICAgICAgICBmb28odHJ1ZSk7PGNhcmV0PgorICAgIH0KKworICAgIHZvaWQgZm9vKE9iamVjdCBvKSB7fQorICAgIHZvaWQgZm9vKGJvb2xlYW4gbykge30KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvRG91YmxlVHJ1ZUluT3ZlcmxvYWRlZE1ldGhvZENhbGwuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9Eb3VibGVUcnVlSW5PdmVybG9hZGVkTWV0aG9kQ2FsbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRlODEzYjUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvRG91YmxlVHJ1ZUluT3ZlcmxvYWRlZE1ldGhvZENhbGwuamF2YQpAQCAtMCwwICsxLDggQEAKK2NsYXNzIENsaWVudCB7CisgICAgeworICAgICAgICBmb28odHI8Y2FyZXQ+KQorICAgIH0KKworICAgIHZvaWQgZm9vKE9iamVjdCBvKSB7fQorICAgIHZvaWQgZm9vKGJvb2xlYW4gbykge30KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvRHVwbGljYXRlTWVtYmVyc0Zyb21TdXBlckNsYXNzLW91dC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL0R1cGxpY2F0ZU1lbWJlcnNGcm9tU3VwZXJDbGFzcy1vdXQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNWQ3ODFiCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL0R1cGxpY2F0ZU1lbWJlcnNGcm9tU3VwZXJDbGFzcy1vdXQuamF2YQpAQCAtMCwwICsxLDEwIEBACitjbGFzcyBTdXBlciB7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdXBlciBGT08gPSBudWxsOworfQorCitjbGFzcyBJbnRlcm1lZGlhdGUgZXh0ZW5kcyBTdXBlciB7CisKKyAgICBTdXBlciBzID0gRk9POzxjYXJldD4KK30KKworCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvRHVwbGljYXRlTWVtYmVyc0Zyb21TdXBlckNsYXNzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvRHVwbGljYXRlTWVtYmVyc0Zyb21TdXBlckNsYXNzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTVmMzhkZAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9EdXBsaWNhdGVNZW1iZXJzRnJvbVN1cGVyQ2xhc3MuamF2YQpAQCAtMCwwICsxLDEwIEBACitjbGFzcyBTdXBlciB7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdXBlciBGT08gPSBudWxsOworfQorCitjbGFzcyBJbnRlcm1lZGlhdGUgZXh0ZW5kcyBTdXBlciB7CisKKyAgICBTdXBlciBzID0gRjxjYXJldD4KK30KKworCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvRHVwbGljYXRlTWVtYmVyc0Zyb21TdXBlckNsYXNzSW5Bbm90aGVyRmlsZS1vdXQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9EdXBsaWNhdGVNZW1iZXJzRnJvbVN1cGVyQ2xhc3NJbkFub3RoZXJGaWxlLW91dC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNlYTlmM2MKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvRHVwbGljYXRlTWVtYmVyc0Zyb21TdXBlckNsYXNzSW5Bbm90aGVyRmlsZS1vdXQuamF2YQpAQCAtMCwwICsxLDUgQEAKK2NsYXNzIEludGVybWVkaWF0ZSBleHRlbmRzIFN1cGVyIHsKKyAgICBTdXBlciBzID0gRk9POzxjYXJldD4KK30KKworCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvRHVwbGljYXRlTWVtYmVyc0Zyb21TdXBlckNsYXNzSW5Bbm90aGVyRmlsZS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL0R1cGxpY2F0ZU1lbWJlcnNGcm9tU3VwZXJDbGFzc0luQW5vdGhlckZpbGUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOTNjMjVmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL0R1cGxpY2F0ZU1lbWJlcnNGcm9tU3VwZXJDbGFzc0luQW5vdGhlckZpbGUuamF2YQpAQCAtMCwwICsxLDUgQEAKK2NsYXNzIEludGVybWVkaWF0ZSBleHRlbmRzIFN1cGVyIHsKKyAgICBTdXBlciBzID0gRjxjYXJldD4KK30KKworCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvRW1wdHlMaXN0QmVmb3JlU2VtaWNvbG9uLW91dC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL0VtcHR5TGlzdEJlZm9yZVNlbWljb2xvbi1vdXQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOTdiOGQxCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL0VtcHR5TGlzdEJlZm9yZVNlbWljb2xvbi1vdXQuamF2YQpAQCAtMCwwICsxLDcgQEAKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbnM7CisKK2NsYXNzIEZvbyB7CisgIGphdmEudXRpbC5MaXN0PFN0cmluZz4gZm9vKCkgeworICAgIHJldHVybiBDb2xsZWN0aW9ucy5lbXB0eUxpc3QoKTs8Y2FyZXQ+CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvRW1wdHlMaXN0QmVmb3JlU2VtaWNvbG9uLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvRW1wdHlMaXN0QmVmb3JlU2VtaWNvbG9uLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmExYTU2MwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9FbXB0eUxpc3RCZWZvcmVTZW1pY29sb24uamF2YQpAQCAtMCwwICsxLDUgQEAKK2NsYXNzIEZvbyB7CisgIGphdmEudXRpbC5MaXN0PFN0cmluZz4gZm9vKCkgeworICAgIHJldHVybiBlbTxjYXJldD47CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvRW1wdHlMaXN0SW5SZXR1cm4tb3V0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvRW1wdHlMaXN0SW5SZXR1cm4tb3V0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTk3YjhkMQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9FbXB0eUxpc3RJblJldHVybi1vdXQuamF2YQpAQCAtMCwwICsxLDcgQEAKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbnM7CisKK2NsYXNzIEZvbyB7CisgIGphdmEudXRpbC5MaXN0PFN0cmluZz4gZm9vKCkgeworICAgIHJldHVybiBDb2xsZWN0aW9ucy5lbXB0eUxpc3QoKTs8Y2FyZXQ+CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvRW1wdHlMaXN0SW5SZXR1cm4uamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9FbXB0eUxpc3RJblJldHVybi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZlNmU1NzkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvRW1wdHlMaXN0SW5SZXR1cm4uamF2YQpAQCAtMCwwICsxLDUgQEAKK2NsYXNzIEZvbyB7CisgIGphdmEudXRpbC5MaXN0PFN0cmluZz4gZm9vKCkgeworICAgIHJldHVybiA8Y2FyZXQ+CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvRW1wdHlMaXN0SW5SZXR1cm4yLW91dC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL0VtcHR5TGlzdEluUmV0dXJuMi1vdXQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZTEyOWZlCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL0VtcHR5TGlzdEluUmV0dXJuMi1vdXQuamF2YQpAQCAtMCwwICsxLDUgQEAKK2NsYXNzIEZvbyB7CisgIGphdmEudXRpbC5MaXN0PFN0cmluZz4gZm9vKCkgeworICAgIHJldHVybiBqYXZhLnV0aWwuQ29sbGVjdGlvbnMuZW1wdHlMaXN0KCk7PGNhcmV0PgorICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL0VtcHR5TGlzdEluUmV0dXJuMi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL0VtcHR5TGlzdEluUmV0dXJuMi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNiNWRlZDYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvRW1wdHlMaXN0SW5SZXR1cm4yLmphdmEKQEAgLTAsMCArMSw1IEBACitjbGFzcyBGb28geworICBqYXZhLnV0aWwuTGlzdDxTdHJpbmc+IGZvbygpIHsKKyAgICByZXR1cm4gamF2YS51dGlsLkNvbGxlY3Rpb25zLmVtPGNhcmV0PgorICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL0VtcHR5TGlzdEluUmV0dXJuVGVybmFyeS1vdXQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9FbXB0eUxpc3RJblJldHVyblRlcm5hcnktb3V0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjlkMTA0NQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9FbXB0eUxpc3RJblJldHVyblRlcm5hcnktb3V0LmphdmEKQEAgLTAsMCArMSw3IEBACitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb25zOworCitjbGFzcyBGb28geworICBqYXZhLnV0aWwuU2V0PFN0cmluZz4gZm9vKCkgeworICAgIHJldHVybiB0cnVlID8gQ29sbGVjdGlvbnMuPFN0cmluZz5lbXB0eVNldCgpIDogPGNhcmV0PgorICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL0VtcHR5TGlzdEluUmV0dXJuVGVybmFyeS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL0VtcHR5TGlzdEluUmV0dXJuVGVybmFyeS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRhMzAzNjUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvRW1wdHlMaXN0SW5SZXR1cm5UZXJuYXJ5LmphdmEKQEAgLTAsMCArMSw1IEBACitjbGFzcyBGb28geworICBqYXZhLnV0aWwuU2V0PFN0cmluZz4gZm9vKCkgeworICAgIHJldHVybiB0cnVlID8gZW08Y2FyZXQ+CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvRW1wdHlMaXN0V2l0aENvbGxlY3Rpb25zUHJlZml4LW91dC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL0VtcHR5TGlzdFdpdGhDb2xsZWN0aW9uc1ByZWZpeC1vdXQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOTdiOGQxCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL0VtcHR5TGlzdFdpdGhDb2xsZWN0aW9uc1ByZWZpeC1vdXQuamF2YQpAQCAtMCwwICsxLDcgQEAKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbnM7CisKK2NsYXNzIEZvbyB7CisgIGphdmEudXRpbC5MaXN0PFN0cmluZz4gZm9vKCkgeworICAgIHJldHVybiBDb2xsZWN0aW9ucy5lbXB0eUxpc3QoKTs8Y2FyZXQ+CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvRW1wdHlMaXN0V2l0aENvbGxlY3Rpb25zUHJlZml4LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvRW1wdHlMaXN0V2l0aENvbGxlY3Rpb25zUHJlZml4LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzc3YWU4ZgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9FbXB0eUxpc3RXaXRoQ29sbGVjdGlvbnNQcmVmaXguamF2YQpAQCAtMCwwICsxLDUgQEAKK2NsYXNzIEZvbyB7CisgIGphdmEudXRpbC5MaXN0PFN0cmluZz4gZm9vKCkgeworICAgIHJldHVybiBDb2xsZWN0PGNhcmV0PjsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9FbnVtQXNEZWZhdWx0QW5ub3RhdGlvblBhcmFtLW91dC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL0VudW1Bc0RlZmF1bHRBbm5vdGF0aW9uUGFyYW0tb3V0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2ZhMTE1MgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9FbnVtQXNEZWZhdWx0QW5ub3RhdGlvblBhcmFtLW91dC5qYXZhCkBAIC0wLDAgKzEsMTIgQEAKK2VudW0gTXlFbnVtIHsKKyAgRk9PLCBCQVIKK30KKworQGludGVyZmFjZSBBbm5vIHsKKyAgTXlFbnVtIHZhbHVlKCk7Cit9CisKKworQEFubm8oTXlFbnVtLkZPTzxjYXJldD4pCitjbGFzcyBGb28geworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9FbnVtQXNEZWZhdWx0QW5ub3RhdGlvblBhcmFtLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvRW51bUFzRGVmYXVsdEFubm90YXRpb25QYXJhbS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE0MzY0ZjUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvRW51bUFzRGVmYXVsdEFubm90YXRpb25QYXJhbS5qYXZhCkBAIC0wLDAgKzEsMTIgQEAKK2VudW0gTXlFbnVtIHsKKyAgRk9PLCBCQVIKK30KKworQGludGVyZmFjZSBBbm5vIHsKKyAgTXlFbnVtIHZhbHVlKCk7Cit9CisKKworQEFubm8oTXlFbnVtLkY8Y2FyZXQ+KQorY2xhc3MgRm9vIHsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvRW51bUNvbnN0SW5Td2l0Y2gtb3V0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvRW51bUNvbnN0SW5Td2l0Y2gtb3V0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGUzODNiYwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9FbnVtQ29uc3RJblN3aXRjaC1vdXQuamF2YQpAQCAtMCwwICsxLDkgQEAKK2VudW0gRSB7CisgIENPTlM7CisgIAorICB2b2lkIGZvbyAoRSBlKSB7CisgICAgc3dpdGNoIChlKSB7CisgICAgICBjYXNlIENPTlM6PGNhcmV0PgorICAgIH0KKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9FbnVtQ29uc3RJblN3aXRjaC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL0VudW1Db25zdEluU3dpdGNoLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDA5MTZmZgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9FbnVtQ29uc3RJblN3aXRjaC5qYXZhCkBAIC0wLDAgKzEsOSBAQAorZW51bSBFIHsKKyAgQ09OUzsKKyAgCisgIHZvaWQgZm9vIChFIGUpIHsKKyAgICBzd2l0Y2ggKGUpIHsKKyAgICAgIGNhc2UgPGNhcmV0PgorICAgIH0KKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9FbnVtQ29uc3RJblN3aXRjaE91dHNpZGUtb3V0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvRW51bUNvbnN0SW5Td2l0Y2hPdXRzaWRlLW91dC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZiMDk1ZDIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvRW51bUNvbnN0SW5Td2l0Y2hPdXRzaWRlLW91dC5qYXZhCkBAIC0wLDAgKzEsMTEgQEAKK2VudW0gRSB7CisgIENPTlMKK30KKworY2xhc3MgRm9vIHsKKyAgICB2b2lkIGZvbyAoRSBlKSB7CisgICAgc3dpdGNoIChlKSB7CisgICAgICBjYXNlIENPTlM6PGNhcmV0PgorICAgIH0KKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL0VudW1Db25zdEluU3dpdGNoT3V0c2lkZS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL0VudW1Db25zdEluU3dpdGNoT3V0c2lkZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU0ZGRmMmUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvRW51bUNvbnN0SW5Td2l0Y2hPdXRzaWRlLmphdmEKQEAgLTAsMCArMSwxMSBAQAorZW51bSBFIHsKKyAgQ09OUworfQorCitjbGFzcyBGb28geworICAgIHZvaWQgZm9vIChFIGUpIHsKKyAgICBzd2l0Y2ggKGUpIHsKKyAgICAgIGNhc2UgQzxjYXJldD4KKyAgICB9CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9FbnVtRmllbGQtb3V0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvRW51bUZpZWxkLW91dC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg5NDRmY2IKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvRW51bUZpZWxkLW91dC5qYXZhCkBAIC0wLDAgKzEsOSBAQAorZW51bSBNeUVudW0geworICBGT08sIEJBUgorfQorCitjbGFzcyBGb28geworICB7CisgICAgTXlFbnVtIG1lID0gTXlFbnVtLkZPTzs8Y2FyZXQ+CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvRW51bUZpZWxkLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvRW51bUZpZWxkLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWU2MDBhYwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9FbnVtRmllbGQuamF2YQpAQCAtMCwwICsxLDkgQEAKK2VudW0gTXlFbnVtIHsKKyAgRk9PLCBCQVIKK30KKworY2xhc3MgRm9vIHsKKyAgeworICAgIE15RW51bSBtZSA9IEZPPGNhcmV0PgorICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL0VudW1GaWVsZDEtb3V0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvRW51bUZpZWxkMS1vdXQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NGZiNmVhCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL0VudW1GaWVsZDEtb3V0LmphdmEKQEAgLTAsMCArMSw5IEBACitlbnVtIE15RW51bSB7CisgIEZPTywgQkFSCit9CisKK2NsYXNzIEZvbyB7CisgIE15RW51bSBmb28oKSB7CisgICAgcmV0dXJuIDxjYXJldD4KKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9FbnVtRmllbGQxLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvRW51bUZpZWxkMS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc0ZmI2ZWEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvRW51bUZpZWxkMS5qYXZhCkBAIC0wLDAgKzEsOSBAQAorZW51bSBNeUVudW0geworICBGT08sIEJBUgorfQorCitjbGFzcyBGb28geworICBNeUVudW0gZm9vKCkgeworICAgIHJldHVybiA8Y2FyZXQ+CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvRXZlcnl0aGluZ0RvdWJsZXMuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9FdmVyeXRoaW5nRG91Ymxlcy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJmYWJjY2Y4Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL0V2ZXJ5dGhpbmdEb3VibGVzLmphdmEKQEAgLTAsMCArMSw2IEBACitjbGFzcyBGb28geworICAgIHsKKyAgICAgICAgamF2YS51dGlsLkxpc3Q8U3RyaW5nPiBsOworICAgICAgICBuZXcgaW50W2wuPGNhcmV0Pl0KKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL0V4Y2VwdGlvblR3aWNlLW91dC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL0V4Y2VwdGlvblR3aWNlLW91dC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk2M2EzYWMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvRXhjZXB0aW9uVHdpY2Utb3V0LmphdmEKQEAgLTAsMCArMSw3IEBACitjbGFzcyBNeUV4Y2VwdGlvbiBleHRlbmRzIFJ1bnRpbWVFeGNlcHRpb257fQorCitjbGFzcyBNeUNsYXNzIHsKK3B1YmxpYyB2b2lkIGZvbygpIHRocm93cyBNeUV4Y2VwdGlvbiB7CisgIHRocm93IG5ldyBNeUV4Y2VwdGlvbigpOzxjYXJldD4gCit9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL0V4Y2VwdGlvblR3aWNlLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvRXhjZXB0aW9uVHdpY2UuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNjRhNTc3Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL0V4Y2VwdGlvblR3aWNlLmphdmEKQEAgLTAsMCArMSw3IEBACitjbGFzcyBNeUV4Y2VwdGlvbiBleHRlbmRzIFJ1bnRpbWVFeGNlcHRpb257fQorCitjbGFzcyBNeUNsYXNzIHsKK3B1YmxpYyB2b2lkIGZvbygpIHRocm93cyBNeUV4Y2VwdGlvbiB7CisgIHRocm93IG5ldyBNeUV4PGNhcmV0PiAKK30KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvRXhjZXB0aW9uVHdpY2UyLW91dC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL0V4Y2VwdGlvblR3aWNlMi1vdXQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMDhiNWZkNwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9FeGNlcHRpb25Ud2ljZTItb3V0LmphdmEKQEAgLTAsMCArMSw3IEBACitjbGFzcyBNeUV4Y2VwdGlvbiBleHRlbmRzIEV4Y2VwdGlvbnt9CisKK2NsYXNzIE15Q2xhc3MgeworcHVibGljIHZvaWQgZm9vKCkgdGhyb3dzIE15RXhjZXB0aW9uIHsKKyAgdGhyb3cgbmV3IE15RXhjZXB0aW9uKCk7PGNhcmV0PiAKK30KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvRXhjZXB0aW9uVHdpY2UyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvRXhjZXB0aW9uVHdpY2UyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDM4ZTZlYgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9FeGNlcHRpb25Ud2ljZTIuamF2YQpAQCAtMCwwICsxLDcgQEAKK2NsYXNzIE15RXhjZXB0aW9uIGV4dGVuZHMgRXhjZXB0aW9ue30KKworY2xhc3MgTXlDbGFzcyB7CitwdWJsaWMgdm9pZCBmb28oKSB0aHJvd3MgTXlFeGNlcHRpb24geworICB0aHJvdyBuZXcgTXlFeDxjYXJldD4gCit9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL0V4Y2Vzc2l2ZVRhaWwtb3V0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvRXhjZXNzaXZlVGFpbC1vdXQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jM2MwM2ExCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL0V4Y2Vzc2l2ZVRhaWwtb3V0LmphdmEKQEAgLTAsMCArMSw1IEBACitjbGFzcyBIYXNoTWFwPFQsVj4ge30KKworcHVibGljIGNsYXNzIEEgeworICBwcml2YXRlIEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+IG0gPSBuZXcgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4oKTs8Y2FyZXQ+Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvRXhjZXNzaXZlVGFpbC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL0V4Y2Vzc2l2ZVRhaWwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNDQ0ZDhlCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL0V4Y2Vzc2l2ZVRhaWwuamF2YQpAQCAtMCwwICsxLDUgQEAKK2NsYXNzIEhhc2hNYXA8VCxWPiB7fQorCitwdWJsaWMgY2xhc3MgQSB7CisgIHByaXZhdGUgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4gbSA9IG5ldyBIYXNoTWFwPFN0cmluZywgPHNlbGVjdGlvbj48Y2FyZXQ+SW50ZWdlcjwvc2VsZWN0aW9uPj4oKTsKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9FeGNsYW1hdGlvbkZpbmlzaE5vbkJvb2xlYW4tb3V0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvRXhjbGFtYXRpb25GaW5pc2hOb25Cb29sZWFuLW91dC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc3Njg1MzcKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvRXhjbGFtYXRpb25GaW5pc2hOb25Cb29sZWFuLW91dC5qYXZhCkBAIC0wLDAgKzEsMTEgQEAKK2NsYXNzIEJhckJhc2UgeworCisgICAgeworICAgICAgICBGb28gZiA9IEZvby5mbyE8Y2FyZXQ+CisgICAgfQorCit9CisKK2NsYXNzIEZvbyB7CisgIHN0YXRpYyBmaW5hbCBGb28gZm9vOworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9FeGNsYW1hdGlvbkZpbmlzaE5vbkJvb2xlYW4uamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9FeGNsYW1hdGlvbkZpbmlzaE5vbkJvb2xlYW4uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZWNkODcyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL0V4Y2xhbWF0aW9uRmluaXNoTm9uQm9vbGVhbi5qYXZhCkBAIC0wLDAgKzEsMTEgQEAKK2NsYXNzIEJhckJhc2UgeworCisgICAgeworICAgICAgICBGb28gZiA9IEZvby5mbzxjYXJldD4KKyAgICB9CisKK30KKworY2xhc3MgRm9vIHsKKyAgc3RhdGljIGZpbmFsIEZvbyBmb287Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL0V4Y2xhbWF0aW9uTWV0aG9kRmluaXNoLW91dC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL0V4Y2xhbWF0aW9uTWV0aG9kRmluaXNoLW91dC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI2M2FkYzIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvRXhjbGFtYXRpb25NZXRob2RGaW5pc2gtb3V0LmphdmEKQEAgLTAsMCArMSw4IEBACitjbGFzcyBCYXJCYXNlIHsKKworICAgIHsKKyAgICAgICAgYm9vbGVhbiBmID0gIWZvbygpOzxjYXJldD4KKyAgICB9CisKKyAgICBib29sZWFuIGZvbygpOworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9FeGNsYW1hdGlvbk1ldGhvZEZpbmlzaC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL0V4Y2xhbWF0aW9uTWV0aG9kRmluaXNoLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2U1MThlNgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9FeGNsYW1hdGlvbk1ldGhvZEZpbmlzaC5qYXZhCkBAIC0wLDAgKzEsOCBAQAorY2xhc3MgQmFyQmFzZSB7CisKKyAgICB7CisgICAgICAgIGJvb2xlYW4gZiA9IGZvPGNhcmV0PgorICAgIH0KKworICAgIGJvb2xlYW4gZm9vKCk7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL0V4Y2xhbWF0aW9uU3RhdGljRmllbGRGaW5pc2gtb3V0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvRXhjbGFtYXRpb25TdGF0aWNGaWVsZEZpbmlzaC1vdXQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNzQ3ZDdjCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL0V4Y2xhbWF0aW9uU3RhdGljRmllbGRGaW5pc2gtb3V0LmphdmEKQEAgLTAsMCArMSwxMiBAQAorY2xhc3MgQmFyQmFzZSB7CisKKyAgICB7CisgICAgICAgIGJvb2xlYW4gZm9vOworICAgICAgICBib29sZWFuIGYgPSAhRm9vLmZvbzs8Y2FyZXQ+CisgICAgfQorCit9CisKK2NsYXNzIEZvbyB7CisgIHN0YXRpYyBmaW5hbCBCb29sZWFuIGZvbzsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvRXhjbGFtYXRpb25TdGF0aWNGaWVsZEZpbmlzaC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL0V4Y2xhbWF0aW9uU3RhdGljRmllbGRGaW5pc2guamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YTE1M2E5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL0V4Y2xhbWF0aW9uU3RhdGljRmllbGRGaW5pc2guamF2YQpAQCAtMCwwICsxLDEyIEBACitjbGFzcyBCYXJCYXNlIHsKKworICAgIHsKKyAgICAgICAgYm9vbGVhbiBmb287CisgICAgICAgIGJvb2xlYW4gZiA9IEZvby5mbzxjYXJldD4KKyAgICB9CisKK30KKworY2xhc3MgRm9vIHsKKyAgc3RhdGljIGZpbmFsIEJvb2xlYW4gZm9vOworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9FeGNsYW1hdGlvblZhcmlhYmxlRmluaXNoLW91dC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL0V4Y2xhbWF0aW9uVmFyaWFibGVGaW5pc2gtb3V0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDExNTUxOAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9FeGNsYW1hdGlvblZhcmlhYmxlRmluaXNoLW91dC5qYXZhCkBAIC0wLDAgKzEsOCBAQAorY2xhc3MgQmFyQmFzZSB7CisKKyAgICB7CisgICAgICAgIGJvb2xlYW4gZm9vOworICAgICAgICBib29sZWFuIGYgPSAhZm9vOzxjYXJldD4KKyAgICB9CisKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvRXhjbGFtYXRpb25WYXJpYWJsZUZpbmlzaC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL0V4Y2xhbWF0aW9uVmFyaWFibGVGaW5pc2guamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMDAwMDYxCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL0V4Y2xhbWF0aW9uVmFyaWFibGVGaW5pc2guamF2YQpAQCAtMCwwICsxLDggQEAKK2NsYXNzIEJhckJhc2UgeworCisgICAgeworICAgICAgICBib29sZWFuIGZvbzsKKyAgICAgICAgYm9vbGVhbiBmID0gZm88Y2FyZXQ+CisgICAgfQorCit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL0V4Y2x1ZGVEZWNsYXJlZENvbnN0YW50LW91dC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL0V4Y2x1ZGVEZWNsYXJlZENvbnN0YW50LW91dC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJmZjFhYzcKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvRXhjbHVkZURlY2xhcmVkQ29uc3RhbnQtb3V0LmphdmEKQEAgLTAsMCArMSw1IEBACitwdWJsaWMgY2xhc3MgRm9vIHsKKyAgcHVibGljIHN0YXRpYyBmaW5hbCBGb28gRk9PID0gIiI7CisgIHB1YmxpYyBzdGF0aWMgZmluYWwgRm9vIEJBUiA9IEZPTzsKKworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9FeGNsdWRlRGVjbGFyZWRDb25zdGFudC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL0V4Y2x1ZGVEZWNsYXJlZENvbnN0YW50LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmNhZDNjZQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9FeGNsdWRlRGVjbGFyZWRDb25zdGFudC5qYXZhCkBAIC0wLDAgKzEsNSBAQAorcHVibGljIGNsYXNzIEZvbyB7CisgIHB1YmxpYyBzdGF0aWMgZmluYWwgRm9vIEZPTyA9ICIiOworICBwdWJsaWMgc3RhdGljIGZpbmFsIEZvbyBCQVIgPSA8Y2FyZXQ+OworCit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL0V4cGVjdGVkUmV0dXJuVHlwZS1vdXQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9FeHBlY3RlZFJldHVyblR5cGUtb3V0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzk2MzI4ZAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9FeHBlY3RlZFJldHVyblR5cGUtb3V0LmphdmEKQEAgLTAsMCArMSwyNiBAQAorLyoKKyAqIENvcHlyaWdodCAyMDAwLTIwMTIgSmV0QnJhaW5zIHMuci5vLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KK2ludGVyZmFjZSBJIHsKKyAgYm9vbGVhbiBmb28oU3RyaW5nIHMpOworfQorcHVibGljIGNsYXNzIFRlc3QgeworICBwdWJsaWMgaW50IG0oKSB7CisgICAgSSBpID0gcyAtPiB7CisgICAgICByZXR1cm4gcy5jb250YWlucygpOworICAgIH07CisgICAgcmV0dXJuIDA7CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9FeHBlY3RlZFJldHVyblR5cGUuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9FeHBlY3RlZFJldHVyblR5cGUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MWY3NTlkCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL0V4cGVjdGVkUmV0dXJuVHlwZS5qYXZhCkBAIC0wLDAgKzEsMjYgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwMC0yMDEyIEpldEJyYWlucyBzLnIuby4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCitpbnRlcmZhY2UgSSB7CisgIGJvb2xlYW4gZm9vKFN0cmluZyBzKTsKK30KK3B1YmxpYyBjbGFzcyBUZXN0IHsKKyAgcHVibGljIGludCBtKCkgeworICAgIEkgaSA9IHMgLT4geworICAgICAgcmV0dXJuIHMuPGNhcmV0PgorICAgIH07CisgICAgcmV0dXJuIDA7CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9FeHBlY3RlZFJldHVyblR5cGUxLW91dC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL0V4cGVjdGVkUmV0dXJuVHlwZTEtb3V0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzNhMDNlNAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9FeHBlY3RlZFJldHVyblR5cGUxLW91dC5qYXZhCkBAIC0wLDAgKzEsMjQgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwMC0yMDEyIEpldEJyYWlucyBzLnIuby4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCitpbnRlcmZhY2UgSSB7CisgIGJvb2xlYW4gZm9vKFN0cmluZyBzKTsKK30KK3B1YmxpYyBjbGFzcyBUZXN0IHsKKyAgcHVibGljIGludCBtKCkgeworICAgIEkgaSA9IHMgLT4gcy5jb250YWlucygpOworICAgIHJldHVybiAwOworICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvRXhwZWN0ZWRSZXR1cm5UeXBlMS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL0V4cGVjdGVkUmV0dXJuVHlwZTEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNDBiMDViCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL0V4cGVjdGVkUmV0dXJuVHlwZTEuamF2YQpAQCAtMCwwICsxLDI0IEBACisvKgorICogQ29weXJpZ2h0IDIwMDAtMjAxMiBKZXRCcmFpbnMgcy5yLm8uCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworaW50ZXJmYWNlIEkgeworICBib29sZWFuIGZvbyhTdHJpbmcgcyk7Cit9CitwdWJsaWMgY2xhc3MgVGVzdCB7CisgIHB1YmxpYyBpbnQgbSgpIHsKKyAgICBJIGkgPSBzIC0+IHMuPGNhcmV0PgorICAgIHJldHVybiAwOworICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvRXhwZWN0ZWRSZXR1cm5UeXBlV2l0aFN1YnN0aXR1dGlvbi1vdXQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9FeHBlY3RlZFJldHVyblR5cGVXaXRoU3Vic3RpdHV0aW9uLW91dC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBmZmJiOGIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvRXhwZWN0ZWRSZXR1cm5UeXBlV2l0aFN1YnN0aXR1dGlvbi1vdXQuamF2YQpAQCAtMCwwICsxLDMxIEBACisvKgorICogQ29weXJpZ2h0IDIwMDAtMjAxMiBKZXRCcmFpbnMgcy5yLm8uCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworcHVibGljIGNsYXNzIFRlc3QgeworICBwdWJsaWMgaW50ZXJmYWNlIFNvbWU8VD4geworICAgIFQgdGVzdChUIHAxLCBUIHAyKTsKKyAgfQorCisgIGNsYXNzIEZvbyB7CisgICAgcHVibGljIEZvbyBjcmVhdGUoKSB7cmV0dXJuIG51bGw7fQorICAgIHB1YmxpYyBGb28gY3JlYXRlMSgpIHtyZXR1cm4gbnVsbDt9CisgIH0KKworICB7CisgICAgU29tZTxGb28+IHNvbWUgPSAoaTEsIGkyKSAtPiB7CisgICAgICByZXR1cm4gaTEuY3JlYXRlKCk7CisgICAgfTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9FeHBlY3RlZFJldHVyblR5cGVXaXRoU3Vic3RpdHV0aW9uLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvRXhwZWN0ZWRSZXR1cm5UeXBlV2l0aFN1YnN0aXR1dGlvbi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAyOTQ1NmQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvRXhwZWN0ZWRSZXR1cm5UeXBlV2l0aFN1YnN0aXR1dGlvbi5qYXZhCkBAIC0wLDAgKzEsMzEgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwMC0yMDEyIEpldEJyYWlucyBzLnIuby4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCitwdWJsaWMgY2xhc3MgVGVzdCB7CisgIHB1YmxpYyBpbnRlcmZhY2UgU29tZTxUPiB7CisgICAgVCB0ZXN0KFQgcDEsIFQgcDIpOworICB9CisKKyAgY2xhc3MgRm9vIHsKKyAgICBwdWJsaWMgRm9vIGNyZWF0ZSgpIHtyZXR1cm4gbnVsbDt9CisgICAgcHVibGljIEZvbyBjcmVhdGUxKCkge3JldHVybiBudWxsO30KKyAgfQorCisgIHsKKyAgICBTb21lPEZvbz4gc29tZSA9IChpMSwgaTIpIC0+IHsKKyAgICAgIHJldHVybiBpMS48Y2FyZXQ+CisgICAgfTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9FeHBsaWNpdE1ldGhvZFR5cGVQYXJhbWV0ZXJzRnJvbVN1cGVyQ2xhc3Mtb3V0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvRXhwbGljaXRNZXRob2RUeXBlUGFyYW1ldGVyc0Zyb21TdXBlckNsYXNzLW91dC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgzMWZmMmQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvRXhwbGljaXRNZXRob2RUeXBlUGFyYW1ldGVyc0Zyb21TdXBlckNsYXNzLW91dC5qYXZhCkBAIC0wLDAgKzEsMTMgQEAKK2ltcG9ydCBqYXZhLmlvLkZpbGU7CisKK3B1YmxpYyBjbGFzcyBTdXBlciB7CisgIHByb3RlY3RlZCA8VD4gVCBmb28oKSB7fQorfQorCitwdWJsaWMgY2xhc3MgRm9vIGV4dGVuZHMgU3VwZXIgeworICAgIHsKKyAgICAgICAgYmFyKHRoaXMuPEZpbGU+Zm9vKCkpOzxjYXJldD4KKyAgICB9CisKKyAgICB2b2lkIGJhcihqYXZhLmlvLkZpbGUgcykge30KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9FeHBsaWNpdE1ldGhvZFR5cGVQYXJhbWV0ZXJzRnJvbVN1cGVyQ2xhc3MuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9FeHBsaWNpdE1ldGhvZFR5cGVQYXJhbWV0ZXJzRnJvbVN1cGVyQ2xhc3MuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZDY4NWUzCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL0V4cGxpY2l0TWV0aG9kVHlwZVBhcmFtZXRlcnNGcm9tU3VwZXJDbGFzcy5qYXZhCkBAIC0wLDAgKzEsMTEgQEAKK3B1YmxpYyBjbGFzcyBTdXBlciB7CisgIHByb3RlY3RlZCA8VD4gVCBmb28oKSB7fQorfQorCitwdWJsaWMgY2xhc3MgRm9vIGV4dGVuZHMgU3VwZXIgeworICAgIHsKKyAgICAgICAgYmFyKGZvPGNhcmV0PikKKyAgICB9CisKKyAgICB2b2lkIGJhcihqYXZhLmlvLkZpbGUgcykge30KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9FeHBsaWNpdE1ldGhvZFR5cGVQYXJhbWV0ZXJzT3ZlclplYWxvdXMtb3V0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvRXhwbGljaXRNZXRob2RUeXBlUGFyYW1ldGVyc092ZXJaZWFsb3VzLW91dC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZmMTljMzUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvRXhwbGljaXRNZXRob2RUeXBlUGFyYW1ldGVyc092ZXJaZWFsb3VzLW91dC5qYXZhCkBAIC0wLDAgKzEsOSBAQAorcHVibGljIGNsYXNzIEZvbyB7CisgICAgeworICAgICAgICBiYXIoZm9vKCkpOzxjYXJldD4KKyAgICB9CisKKyAgICA8VD4gVCBmb28oKSB7fQorCisgICAgdm9pZCBiYXIoT2JqZWN0IHMpIHt9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvRXhwbGljaXRNZXRob2RUeXBlUGFyYW1ldGVyc092ZXJaZWFsb3VzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvRXhwbGljaXRNZXRob2RUeXBlUGFyYW1ldGVyc092ZXJaZWFsb3VzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTg2NzU0MgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9FeHBsaWNpdE1ldGhvZFR5cGVQYXJhbWV0ZXJzT3ZlclplYWxvdXMuamF2YQpAQCAtMCwwICsxLDkgQEAKK3B1YmxpYyBjbGFzcyBGb28geworICAgIHsKKyAgICAgICAgYmFyKGZvPGNhcmV0PikKKyAgICB9CisKKyAgICA8VD4gVCBmb28oKSB7fQorCisgICAgdm9pZCBiYXIoT2JqZWN0IHMpIHt9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvRXhwbGljaXRNZXRob2RUeXBlUGFyYW1ldGVyc1F1YWxpZnktb3V0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvRXhwbGljaXRNZXRob2RUeXBlUGFyYW1ldGVyc1F1YWxpZnktb3V0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWNkM2FkYwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9FeHBsaWNpdE1ldGhvZFR5cGVQYXJhbWV0ZXJzUXVhbGlmeS1vdXQuamF2YQpAQCAtMCwwICsxLDExIEBACitpbXBvcnQgamF2YS5pby5GaWxlOworCitwdWJsaWMgY2xhc3MgRm9vIHsKKyAgICB7CisgICAgICAgIGJhcih0aGlzLjxGaWxlPmZvbygpKTs8Y2FyZXQ+CisgICAgfQorCisgICAgPFQ+IFQgZm9vKCkge30KKworICAgIHZvaWQgYmFyKGphdmEuaW8uRmlsZSBzKSB7fQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL0V4cGxpY2l0TWV0aG9kVHlwZVBhcmFtZXRlcnNRdWFsaWZ5LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvRXhwbGljaXRNZXRob2RUeXBlUGFyYW1ldGVyc1F1YWxpZnkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NWVjZWNiCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL0V4cGxpY2l0TWV0aG9kVHlwZVBhcmFtZXRlcnNRdWFsaWZ5LmphdmEKQEAgLTAsMCArMSw5IEBACitwdWJsaWMgY2xhc3MgRm9vIHsKKyAgICB7CisgICAgICAgIGJhcihmbzxjYXJldD4pCisgICAgfQorCisgICAgPFQ+IFQgZm9vKCkge30KKworICAgIHZvaWQgYmFyKGphdmEuaW8uRmlsZSBzKSB7fQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL0V4cGxpY2l0V2lsZGNhcmRBcnJheVBhcmFtLW91dC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL0V4cGxpY2l0V2lsZGNhcmRBcnJheVBhcmFtLW91dC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUzOThkZjcKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvRXhwbGljaXRXaWxkY2FyZEFycmF5UGFyYW0tb3V0LmphdmEKQEAgLTAsMCArMSwxMiBAQAorY2xhc3MgS2V5PFQ+IHsKKyAgc3RhdGljIDxUPiBLZXk8VD4gY3JlYXRlKFN0cmluZyBzKTsKK30KKworY2xhc3MgRm9vIHsKKyAgPFQ+IHZvaWQgcHV0VXNlckRhdGEoS2V5PFRbXT4ga2V5LCBUIHZhbHVlKSB7fQorCisgIHsKKyAgICBwdXRVc2VyRGF0YShLZXkuY3JlYXRlKDxjYXJldD4pLCApCisgIH0KKworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9FeHBsaWNpdFdpbGRjYXJkQXJyYXlQYXJhbS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL0V4cGxpY2l0V2lsZGNhcmRBcnJheVBhcmFtLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWNlMzBkMwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9FeHBsaWNpdFdpbGRjYXJkQXJyYXlQYXJhbS5qYXZhCkBAIC0wLDAgKzEsMTIgQEAKK2NsYXNzIEtleTxUPiB7CisgIHN0YXRpYyA8VD4gS2V5PFQ+IGNyZWF0ZShTdHJpbmcgcyk7Cit9CisKK2NsYXNzIEZvbyB7CisgIDxUPiB2b2lkIHB1dFVzZXJEYXRhKEtleTxUW10+IGtleSwgVCB2YWx1ZSkge30KKworICB7CisgICAgcHV0VXNlckRhdGEoPGNhcmV0PikKKyAgfQorCit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL0V4dGVuZHNJblR5cGVDYXN0LW91dC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL0V4dGVuZHNJblR5cGVDYXN0LW91dC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ0NWY4YTAKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvRXh0ZW5kc0luVHlwZUNhc3Qtb3V0LmphdmEKQEAgLTAsMCArMSwxMCBAQAorY2xhc3MgTGlzdDxUPiB7CisgIHB1YmxpYyB2b2lkIGFkZChUIHQpIHt9OworfQorCitwdWJsaWMgY2xhc3MgQSB7CisgIHsKKyAgICBMaXN0PD8gZXh0ZW5kcyBPYmplY3Q+IGxpc3Q7CisgICAgbGlzdC5hZGQoKE9iamVjdCkgPGNhcmV0PikKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL0V4dGVuZHNJblR5cGVDYXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvRXh0ZW5kc0luVHlwZUNhc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NGQ5NDViCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL0V4dGVuZHNJblR5cGVDYXN0LmphdmEKQEAgLTAsMCArMSwxMCBAQAorY2xhc3MgTGlzdDxUPiB7CisgIHB1YmxpYyB2b2lkIGFkZChUIHQpIHt9OworfQorCitwdWJsaWMgY2xhc3MgQSB7CisgIHsKKyAgICBMaXN0PD8gZXh0ZW5kcyBPYmplY3Q+IGxpc3Q7CisgICAgbGlzdC5hZGQoKDxjYXJldD4pKQorICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvRXh0cmFTZW1pY29sb25BZnRlck1ldGhvZFBhcmFtLW91dC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL0V4dHJhU2VtaWNvbG9uQWZ0ZXJNZXRob2RQYXJhbS1vdXQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOWUzMjNlCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL0V4dHJhU2VtaWNvbG9uQWZ0ZXJNZXRob2RQYXJhbS1vdXQuamF2YQpAQCAtMCwwICsxLDIwIEBACitwdWJsaWMgY2xhc3MgTXlBc3BlY3QgeworCisgICAgcHVibGljIHZvaWQgZm9vKCkgeworICAgICAgICBTdGF0ZSBzdGF0ZTsKKyAgICAgICAgU3RhdGVMaXN0ZW5lciBzdGF0ZUxpc3RlbmVyOworICAgICAgICBzdGF0ZS5hZGRMaXN0ZW5lciggc3RhdGVMaXN0ZW5lciApOzxjYXJldD4KKworICAgIH0KKworICAgIHByaXZhdGUgc3RhdGljIGNsYXNzIFN0YXRlIHsKKyAgICAgICAgdm9pZCBhZGRMaXN0ZW5lcihTdGF0ZUxpc3RlbmVyIGxpc3RlbmVyKSB7fQorICAgIH0KKworCisKKyAgICBwcml2YXRlIHN0YXRpYyBjbGFzcyBTdGF0ZUxpc3RlbmVyIHsKKworICAgIH0KKworfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL0V4dHJhU2VtaWNvbG9uQWZ0ZXJNZXRob2RQYXJhbS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL0V4dHJhU2VtaWNvbG9uQWZ0ZXJNZXRob2RQYXJhbS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIzNzM5ZTgKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvRXh0cmFTZW1pY29sb25BZnRlck1ldGhvZFBhcmFtLmphdmEKQEAgLTAsMCArMSwyMCBAQAorcHVibGljIGNsYXNzIE15QXNwZWN0IHsKKworICAgIHB1YmxpYyB2b2lkIGZvbygpIHsKKyAgICAgICAgU3RhdGUgc3RhdGU7CisgICAgICAgIFN0YXRlTGlzdGVuZXIgc3RhdGVMaXN0ZW5lcjsKKyAgICAgICAgc3RhdGUuYWRkTGlzdGVuZXIoIHN0YTxjYXJldD4pOworCisgICAgfQorCisgICAgcHJpdmF0ZSBzdGF0aWMgY2xhc3MgU3RhdGUgeworICAgICAgICB2b2lkIGFkZExpc3RlbmVyKFN0YXRlTGlzdGVuZXIgbGlzdGVuZXIpIHt9CisgICAgfQorCisKKworICAgIHByaXZhdGUgc3RhdGljIGNsYXNzIFN0YXRlTGlzdGVuZXIgeworCisgICAgfQorCit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvRmllbGRzU2V0QWJvdmUtb3V0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvRmllbGRzU2V0QWJvdmUtb3V0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2M5OWVkNQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9GaWVsZHNTZXRBYm92ZS1vdXQuamF2YQpAQCAtMCwwICsxLDkgQEAKK2NsYXNzIEEgeworICBpbnQgZG9vOworICBpbnQgYWFhOworICBBKGludCBiKSB7CisgICAgZG9vID0gYjsKKyAgICBhYWEgPSBkb287PGNhcmV0PgorICB9Cit9CisKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9GaWVsZHNTZXRBYm92ZS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL0ZpZWxkc1NldEFib3ZlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmFkOGRkMwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9GaWVsZHNTZXRBYm92ZS5qYXZhCkBAIC0wLDAgKzEsOSBAQAorY2xhc3MgQSB7CisgIGludCBkb287CisgIGludCBhYWE7CisgIEEoaW50IGIpIHsKKyAgICBkb28gPSBiOworICAgIGFhYSA9IGQ8Y2FyZXQ+CisgIH0KK30KKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL0ZpZWxkc1NldEluQW5vdGhlckNvbnN0cnVjdG9yLW91dC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL0ZpZWxkc1NldEluQW5vdGhlckNvbnN0cnVjdG9yLW91dC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY3ODgzOGQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvRmllbGRzU2V0SW5Bbm90aGVyQ29uc3RydWN0b3Itb3V0LmphdmEKQEAgLTAsMCArMSwxMyBAQAorY2xhc3MgQSB7CisgIGludCBkb287CisgIGludCBhYWE7CisgIEEoaW50IGIpIHsKKyAgICBkb28gPSBiOworICB9CisKKyAgQShpbnQgYWFjLCBpbnQgYWFkKSB7CisgICAgdGhpcyhhYWMpOworICAgIGFhYSA9IGRvbzs8Y2FyZXQ+CisgIH0KK30KKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL0ZpZWxkc1NldEluQW5vdGhlckNvbnN0cnVjdG9yLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvRmllbGRzU2V0SW5Bbm90aGVyQ29uc3RydWN0b3IuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MWI0N2UxCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL0ZpZWxkc1NldEluQW5vdGhlckNvbnN0cnVjdG9yLmphdmEKQEAgLTAsMCArMSwxMyBAQAorY2xhc3MgQSB7CisgIGludCBkb287CisgIGludCBhYWE7CisgIEEoaW50IGIpIHsKKyAgICBkb28gPSBiOworICB9CisKKyAgQShpbnQgYWFjLCBpbnQgYWFkKSB7CisgICAgdGhpcyhhYWMpOworICAgIGFhYSA9IGQ8Y2FyZXQ+CisgIH0KK30KKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL0ZpbHRlclByaXZhdGVDb25zdHJ1Y3RvcnMtb3V0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvRmlsdGVyUHJpdmF0ZUNvbnN0cnVjdG9ycy1vdXQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMWQyZDdiCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL0ZpbHRlclByaXZhdGVDb25zdHJ1Y3RvcnMtb3V0LmphdmEKQEAgLTAsMCArMSw1IEBACitjbGFzcyBGb28geworICB7CisgICAgQ2xhc3MgYyA9IG5ldyA8Y2FyZXQ+CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvRmlsdGVyUHJpdmF0ZUNvbnN0cnVjdG9ycy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL0ZpbHRlclByaXZhdGVDb25zdHJ1Y3RvcnMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMWQyZDdiCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL0ZpbHRlclByaXZhdGVDb25zdHJ1Y3RvcnMuamF2YQpAQCAtMCwwICsxLDUgQEAKK2NsYXNzIEZvbyB7CisgIHsKKyAgICBDbGFzcyBjID0gbmV3IDxjYXJldD4KKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9Gb3JlYWNoLW91dC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL0ZvcmVhY2gtb3V0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGE0YTBiMAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9Gb3JlYWNoLW91dC5qYXZhCkBAIC0wLDAgKzEsMTEgQEAKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKK2NsYXNzIEZvcmVhY2ggeworICAgIHZvaWQgZm9vIChGb3JlYWNoIGUpIHsKKyAgICAgICAgZm9yIChTdHJpbmcgcyA6IGUuZigpKSB7fQorICAgIH0KKworICAgIExpc3Q8PyBleHRlbmRzIFN0cmluZz4gZiAoKSB7CisgICAgICAgIHJldHVybiBudWxsOworICAgIH0KKworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9Gb3JlYWNoLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvRm9yZWFjaC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRkOWRkOTEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvRm9yZWFjaC5qYXZhCkBAIC0wLDAgKzEsMTEgQEAKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKK2NsYXNzIEZvcmVhY2ggeworICAgIHZvaWQgZm9vIChGb3JlYWNoIGUpIHsKKyAgICAgICAgZm9yIChTdHJpbmcgcyA6IGUuPGNhcmV0Pikge30KKyAgICB9CisKKyAgICBMaXN0PD8gZXh0ZW5kcyBTdHJpbmc+IGYgKCkgeworICAgICAgICByZXR1cm4gbnVsbDsKKyAgICB9CisKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvRm9yZWFjaExvb3BWYXJpYWJsZUluSXRlcmFibGVFeHByZXNzaW9uLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvRm9yZWFjaExvb3BWYXJpYWJsZUluSXRlcmFibGVFeHByZXNzaW9uLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTUwMzJiOQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9Gb3JlYWNoTG9vcFZhcmlhYmxlSW5JdGVyYWJsZUV4cHJlc3Npb24uamF2YQpAQCAtMCwwICsxLDUgQEAKK3B1YmxpYyBjbGFzcyBCYXIge3sKKyAgICAgICAgZm9yIChqYXZhLnV0aWwuTGlzdCB0cm9sb2xvIDogdHJvbG88Y2FyZXQ+KSB7CisKKyAgICAgICAgfQorICAgIH0gfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL0hpZGluZ0ZpZWxkcy1vdXQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9IaWRpbmdGaWVsZHMtb3V0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmIxNTIwMwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9IaWRpbmdGaWVsZHMtb3V0LmphdmEKQEAgLTAsMCArMSwxMiBAQAoraW50ZXJmYWNlIEEgeworICAgIGludCBBQkM7Cit9CitpbnRlcmZhY2UgQiBleHRlbmRzIEF7CisgICAgaW50IEFCQzsKK30KKworY2xhc3MgRm9vIHsKKyAgICB7CisgICAgICAgIGludCB4ID0gQi5BQkM7PGNhcmV0PgorICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9IaWRpbmdGaWVsZHMuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9IaWRpbmdGaWVsZHMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YzQwNWZjCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL0hpZGluZ0ZpZWxkcy5qYXZhCkBAIC0wLDAgKzEsMTIgQEAKK2ludGVyZmFjZSBBIHsKKyAgICBpbnQgQUJDOworfQoraW50ZXJmYWNlIEIgZXh0ZW5kcyBBeworICAgIGludCBBQkM7Cit9CisKK2NsYXNzIEZvbyB7CisgICAgeworICAgICAgICBpbnQgeCA9IEIuQTxjYXJldD4KKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvSG9ub3JTZWxlY3Rpb24tb3V0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvSG9ub3JTZWxlY3Rpb24tb3V0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzliNjE3YQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9Ib25vclNlbGVjdGlvbi1vdXQuamF2YQpAQCAtMCwwICsxLDkgQEAKK2NsYXNzIEZvbyB7CisgIHsKKyAgICBGb28gZmE7CisgICAgU3RyaW5nIGZvbzsKKyAgICBTdHJpbmcgcyA9IGZvbzs8Y2FyZXQ+CisgIH0KKworICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkge30KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvSG9ub3JTZWxlY3Rpb24uamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9Ib25vclNlbGVjdGlvbi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI4MzhmZGUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvSG9ub3JTZWxlY3Rpb24uamF2YQpAQCAtMCwwICsxLDkgQEAKK2NsYXNzIEZvbyB7CisgIHsKKyAgICBGb28gZmE7CisgICAgU3RyaW5nIGZvbzsKKyAgICBTdHJpbmcgcyA9IGY8c2VsZWN0aW9uPi50b1N0cmluZygpOzwvc2VsZWN0aW9uPgorICB9CisKKyAgcHVibGljIFN0cmluZyB0b1N0cmluZygpIHt9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL0lERUFERVYxMzE0OC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL0lERUFERVYxMzE0OC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJkMTQ4YTYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvSURFQURFVjEzMTQ4LmphdmEKQEAgLTAsMCArMSw2IEBACitjbGFzcyBDbGF6eiB7CisKKyAgICBzdGF0aWMgdm9pZCBmb28oKSB7CisgICAgICAgIHN5bmNocm9uaXplZCg8Y2FyZXQ+KQorICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvSURFQURFVjI2MjYtb3V0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvSURFQURFVjI2MjYtb3V0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODZkNWU2MwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9JREVBREVWMjYyNi1vdXQuamF2YQpAQCAtMCwwICsxLDEyIEBACitjbGFzcyBHZW5lcmljPFQ+IHsgfQorCitjbGFzcyBPdGhlciB7CisgIHN0YXRpYyA8VD4gVCB0YWtlKEdlbmVyaWM8VD4gdGhpbmcpIHsgcmV0dXJuIG51bGw7IH0KK30KKworY2xhc3MgVGVzdGVyIHsKKyAgR2VuZXJpYzxTdHJpbmc+IHN0cjsKKyAgdm9pZCBtZXRob2QoKSB7CisgICAgQ2hhclNlcXVlbmNlIHggPSBPdGhlci50YWtlKHN0cik8Y2FyZXQ+OworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL0lERUFERVYyNjI2LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvSURFQURFVjI2MjYuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYTJlODIxMwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9JREVBREVWMjYyNi5qYXZhCkBAIC0wLDAgKzEsMTIgQEAKK2NsYXNzIEdlbmVyaWM8VD4geyB9CisKK2NsYXNzIE90aGVyIHsKKyAgc3RhdGljIDxUPiBUIHRha2UoR2VuZXJpYzxUPiB0aGluZykgeyByZXR1cm4gbnVsbDsgfQorfQorCitjbGFzcyBUZXN0ZXIgeworICBHZW5lcmljPFN0cmluZz4gc3RyOworICB2b2lkIG1ldGhvZCgpIHsKKyAgICBDaGFyU2VxdWVuY2UgeCA9IE90aGVyLnRha2UoPGNhcmV0Pik7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvSURFQURFVjI2Njgtb3V0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvSURFQURFVjI2Njgtb3V0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTE0MDU3NAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9JREVBREVWMjY2OC1vdXQuamF2YQpAQCAtMCwwICsxLDExIEBACitjbGFzcyBCaWdEZWNpbWFse30KKworZW51bSBUcmVhc3VyZXMgeworICAgIERJQU1PTkQobmV3IEJpZ0RlY2ltYWwoKSk8Y2FyZXQ+OworCisgICAgVHJlYXN1cmVzKEJpZ0RlY2ltYWwgdmFsdWUpIHsKKyAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlOworICAgIH0KKworICAgIHByaXZhdGUgQmlnRGVjaW1hbCB2YWx1ZTsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvSURFQURFVjI2NjguamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9JREVBREVWMjY2OC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ3MjlhN2MKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvSURFQURFVjI2NjguamF2YQpAQCAtMCwwICsxLDExIEBACitjbGFzcyBCaWdEZWNpbWFse30KKworZW51bSBUcmVhc3VyZXMgeworICAgIERJQU1PTkQobmV3IDxjYXJldD4pOworCisgICAgVHJlYXN1cmVzKEJpZ0RlY2ltYWwgdmFsdWUpIHsKKyAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlOworICAgIH0KKworICAgIHByaXZhdGUgQmlnRGVjaW1hbCB2YWx1ZTsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvSURFQURFVjUxNTAtb3V0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvSURFQURFVjUxNTAtb3V0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmRjNzk0OAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9JREVBREVWNTE1MC1vdXQuamF2YQpAQCAtMCwwICsxLDEyIEBACitpbXBvcnQgamF2YS51dGlsLio7CisKK2NsYXNzIFRlc3QKK3sKKyAgICBwcml2YXRlIFN0cmluZ1tdIHN0cmluZ3M7CisKKyAgICBwdWJsaWMgTGlzdDxTdHJpbmc+IGdldFN0cmluZ3MoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEFycmF5cy5hc0xpc3Qoc3RyaW5ncyk7CisgICAgfQorCit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL0lERUFERVY1MTUwLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvSURFQURFVjUxNTAuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NzYwNWFjCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL0lERUFERVY1MTUwLmphdmEKQEAgLTAsMCArMSwxMiBAQAoraW1wb3J0IGphdmEudXRpbC4qOworCitjbGFzcyBUZXN0Cit7CisgICAgcHJpdmF0ZSBTdHJpbmdbXSBzdHJpbmdzOworCisgICAgcHVibGljIExpc3Q8U3RyaW5nPiBnZXRTdHJpbmdzKCkKKyAgICB7CisgICAgICAgIHJldHVybiBBcnJheXMuYXNMaXN0KHN0cjxjYXJldD4pOworICAgIH0KKworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9JREVBREVWNzgzNS1vdXQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9JREVBREVWNzgzNS1vdXQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMWY4YThlCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL0lERUFERVY3ODM1LW91dC5qYXZhCkBAIC0wLDAgKzEsMTAgQEAKK2ltcG9ydCBqYXZhLnV0aWwuKjsKKworY2xhc3MgTGlzdDxUPiB7fQorCitjbGFzcyBDbGF6eiB7CisKKyAgICBzdGF0aWMgdm9pZCBmb28oRm9vPFN0cmluZz4gZm9vKSB7CisgICAgICAgIExpc3Q8TWFwLkVudHJ5PiBmID0gbmV3IExpc3Q8TWFwLkVudHJ5PigpOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvSURFQURFVjc4MzUuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9JREVBREVWNzgzNS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVjMmNlNWEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvSURFQURFVjc4MzUuamF2YQpAQCAtMCwwICsxLDEwIEBACitpbXBvcnQgamF2YS51dGlsLio7CisKK2NsYXNzIExpc3Q8VD4ge30KKworY2xhc3MgQ2xhenogeworCisgICAgc3RhdGljIHZvaWQgZm9vKEZvbzxTdHJpbmc+IGZvbykgeworICAgICAgICBMaXN0PE1hcC5FbnRyeT4gZiA9IG5ldyBMPGNhcmV0PgorICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvSWZDb25kaXRpb25CaW5hcnlFeHByZXNzaW9uLW91dC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL0lmQ29uZGl0aW9uQmluYXJ5RXhwcmVzc2lvbi1vdXQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OTk0MTMwCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL0lmQ29uZGl0aW9uQmluYXJ5RXhwcmVzc2lvbi1vdXQuamF2YQpAQCAtMCwwICsxLDYgQEAKK3B1YmxpYyBjbGFzcyBUYWJDb21wbGV0ZSB7CisJcHVibGljIHZvaWQgc2NlbmUoKSB7CisgICAgICAgIGJvb2xlYW4gYmJiOworICAgICAgICBpZiAoYmJiPGNhcmV0PiA9PSAyKSB7fQorCX0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9JZkNvbmRpdGlvbkJpbmFyeUV4cHJlc3Npb24uamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9JZkNvbmRpdGlvbkJpbmFyeUV4cHJlc3Npb24uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMmVlZjRkCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL0lmQ29uZGl0aW9uQmluYXJ5RXhwcmVzc2lvbi5qYXZhCkBAIC0wLDAgKzEsNiBAQAorcHVibGljIGNsYXNzIFRhYkNvbXBsZXRlIHsKKwlwdWJsaWMgdm9pZCBzY2VuZSgpIHsKKyAgICAgICAgYm9vbGVhbiBiYmI7CisgICAgICAgIGlmIChiPGNhcmV0PiA9PSAyKSB7fQorCX0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9JZkNvbmRpdGlvbkV4cGVjdGVkVHlwZS1vdXQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9JZkNvbmRpdGlvbkV4cGVjdGVkVHlwZS1vdXQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOGMxYWQ2Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL0lmQ29uZGl0aW9uRXhwZWN0ZWRUeXBlLW91dC5qYXZhCkBAIC0wLDAgKzEsMTkgQEAKK2ludGVyZmFjZSBDb21wdXRhYmxlPFQ+IHsKKyAgICBUIGNvbXB1dGUoKTsKK30KKworcHVibGljIGNsYXNzIFpvbzIgeworICAgIDxUPiBUIHJ1bihDb21wdXRhYmxlPFQ+IGNvbXB1dGFibGUpIHsKKyAgICAgICAgCisgICAgfQorCisgICAgeworICAgICAgICAKKyAgICAgICAgaWYgKHJ1bihuZXcgQ29tcHV0YWJsZTxCb29sZWFuPigpIHsKKyAgICAgICAgICAgIEBPdmVycmlkZQorICAgICAgICAgICAgcHVibGljIEJvb2xlYW4gY29tcHV0ZSgpIHsKKyAgICAgICAgICAgICAgICA8c2VsZWN0aW9uPnJldHVybiBudWxsOyAgLy9UbyBjaGFuZ2UgYm9keSBvZiBpbXBsZW1lbnRlZCBtZXRob2RzIHVzZSBGaWxlIHwgU2V0dGluZ3MgfCBGaWxlIFRlbXBsYXRlcy48L3NlbGVjdGlvbj4KKyAgICAgICAgICAgIH0KKyAgICAgICAgfSkpCisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL0lmQ29uZGl0aW9uRXhwZWN0ZWRUeXBlLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvSWZDb25kaXRpb25FeHBlY3RlZFR5cGUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNTJjMmNhCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL0lmQ29uZGl0aW9uRXhwZWN0ZWRUeXBlLmphdmEKQEAgLTAsMCArMSwxNCBAQAoraW50ZXJmYWNlIENvbXB1dGFibGU8VD4geworICAgIFQgY29tcHV0ZSgpOworfQorCitwdWJsaWMgY2xhc3MgWm9vMiB7CisgICAgPFQ+IFQgcnVuKENvbXB1dGFibGU8VD4gY29tcHV0YWJsZSkgeworICAgICAgICAKKyAgICB9CisKKyAgICB7CisgICAgICAgIAorICAgICAgICBpZiAocnVuKG5ldyA8Y2FyZXQ+KSkKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvSW5UaGlzRXhwcmVzc2lvbi1vdXQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9JblRoaXNFeHByZXNzaW9uLW91dC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM1Y2NiMzgKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvSW5UaGlzRXhwcmVzc2lvbi1vdXQuamF2YQpAQCAtMCwwICsxLDggQEAKK3B1YmxpYyBjbGFzcyBGb28geworICAgIAorICAgIFJ1bm5hYmxlIHIgPSBuZXcgUnVubmFibGUoKSB7CisgICAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKKyAgICAgICAgICAgIEZvbyBmID0gRm9vLnRoaXM7PGNhcmV0PkZvby50aGlzOworICAgICAgICB9CisgICAgfTsKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9JblRoaXNFeHByZXNzaW9uLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvSW5UaGlzRXhwcmVzc2lvbi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZiYTRlMDgzCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL0luVGhpc0V4cHJlc3Npb24uamF2YQpAQCAtMCwwICsxLDggQEAKK3B1YmxpYyBjbGFzcyBGb28geworICAgIAorICAgIFJ1bm5hYmxlIHIgPSBuZXcgUnVubmFibGUoKSB7CisgICAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKKyAgICAgICAgICAgIEZvbyBmID0gPGNhcmV0PkZvby50aGlzOworICAgICAgICB9CisgICAgfTsKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9JbmFjY2Vzc2libGVDbGFzc0FmdGVyTmV3LW91dC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL0luYWNjZXNzaWJsZUNsYXNzQWZ0ZXJOZXctb3V0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTc2ZGIwNQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9JbmFjY2Vzc2libGVDbGFzc0FmdGVyTmV3LW91dC5qYXZhCkBAIC0wLDAgKzEsNiBAQAorY2xhc3MgQSB7CisgIHsKKyAgICBiYXIuQmFyLmFjY2VwdChuZXcgZm9vLkZvbygpIHsKKyAgICB9KTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9JbmFjY2Vzc2libGVDbGFzc0FmdGVyTmV3LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvSW5hY2Nlc3NpYmxlQ2xhc3NBZnRlck5ldy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM3ZjU3NjkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvSW5hY2Nlc3NpYmxlQ2xhc3NBZnRlck5ldy5qYXZhCkBAIC0wLDAgKzEsNSBAQAorY2xhc3MgQSB7CisgIHsKKyAgICBiYXIuQmFyLmFjY2VwdChuZXcgPGNhcmV0PikKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9JbmZlckZyb21DYWxsLW91dC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL0luZmVyRnJvbUNhbGwtb3V0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzhmZTkwMwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9JbmZlckZyb21DYWxsLW91dC5qYXZhCkBAIC0wLDAgKzEsMTQgQEAKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworCitjbGFzcyBBcnJheXMgeworICBzdGF0aWMgPFQ+IEFycmF5TGlzdDxUPiBhc0xpc3QoVC4uLiB0cykgeworICAgIHJldHVybiBudWxsOworICB9Cit9CisKK2NsYXNzIERERCB7CisgICAgc3RhdGljIHsKKyAgICAgICAgREREIGRkZCA9IG5ldyBEREQoKTsKKyAgICAgICAgbmV3IEFycmF5TGlzdDxEREQ+KEFycmF5cy5hc0xpc3QoZGRkKTxjYXJldD4pOworICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9JbmZlckZyb21DYWxsLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvSW5mZXJGcm9tQ2FsbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNkNjU5MmFiCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL0luZmVyRnJvbUNhbGwuamF2YQpAQCAtMCwwICsxLDE0IEBACitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKKworY2xhc3MgQXJyYXlzIHsKKyAgc3RhdGljIDxUPiBBcnJheUxpc3Q8VD4gYXNMaXN0KFQuLi4gdHMpIHsKKyAgICByZXR1cm4gbnVsbDsKKyAgfQorfQorCitjbGFzcyBEREQgeworICAgIHN0YXRpYyB7CisgICAgICAgIERERCBkZGQgPSBuZXcgREREKCk7CisgICAgICAgIG5ldyBBcnJheUxpc3Q8REREPihBcnJheXMuYXNMaXN0KDxjYXJldD4pKTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvSW5mZXJGcm9tQ2FsbDEtb3V0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvSW5mZXJGcm9tQ2FsbDEtb3V0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWM1NWJjZQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9JbmZlckZyb21DYWxsMS1vdXQuamF2YQpAQCAtMCwwICsxLDExIEBACitjbGFzcyBLZXk8VD4ge30KK2NsYXNzIEZvbyB7CisgIDxUPiB2b2lkIHB1dFVzZXJEYXRhKEtleTxUPiBrLCBUIHQpIHt9CisKKyAgPFQ+IEtleTxUPiBnZXRLZXkoS2V5PFQ+IHQpIHt9CisKKyAgeworICAgIEtleTxLZXk8U3RyaW5nPj4gayA9IG5ldyBLZXk8S2V5PFN0cmluZz4+KCk7CisgICAgcHV0VXNlckRhdGEoaywgZ2V0S2V5KG5ldyBLZXk8U3RyaW5nPigpKTxjYXJldD4pOworICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvSW5mZXJGcm9tQ2FsbDEuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9JbmZlckZyb21DYWxsMS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVlOGIzODkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvSW5mZXJGcm9tQ2FsbDEuamF2YQpAQCAtMCwwICsxLDExIEBACitjbGFzcyBLZXk8VD4ge30KK2NsYXNzIEZvbyB7CisgIDxUPiB2b2lkIHB1dFVzZXJEYXRhKEtleTxUPiBrLCBUIHQpIHt9CisKKyAgPFQ+IEtleTxUPiBnZXRLZXkoS2V5PFQ+IHQpIHt9CisKKyAgeworICAgIEtleTxLZXk8U3RyaW5nPj4gayA9IG5ldyBLZXk8S2V5PFN0cmluZz4+KCk7CisgICAgcHV0VXNlckRhdGEoaywgZ2V0S2V5KG5ldyA8Y2FyZXQ+KSk7CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9Jbmhlcml0ZWRDbGFzcy1vdXQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9Jbmhlcml0ZWRDbGFzcy1vdXQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMGZkN2E1Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL0luaGVyaXRlZENsYXNzLW91dC5qYXZhCkBAIC0wLDAgKzEsMTAgQEAKK2NsYXNzIEZvbyB7fQorY2xhc3MgQmFyIGV4dGVuZHMgRm9vIHsKKwordm9pZCB0ZXN0KCkgeworICBtZXRob2QobmV3IEJhcigpKTs8Y2FyZXQ+Cit9CisKK3ZvaWQgbWV0aG9kKEZvbyBmKSB7fQorCit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL0luaGVyaXRlZENsYXNzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvSW5oZXJpdGVkQ2xhc3MuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNjQ3NDhhCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL0luaGVyaXRlZENsYXNzLmphdmEKQEAgLTAsMCArMSwxMCBAQAorY2xhc3MgRm9vIHt9CitjbGFzcyBCYXIgZXh0ZW5kcyBGb28geworCit2b2lkIHRlc3QoKSB7CisgIG1ldGhvZChuZXcgQjxjYXJldD4pCit9CisKK3ZvaWQgbWV0aG9kKEZvbyBmKSB7fQorCit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL0lubmVyQWZ0ZXJOZXctb3V0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvSW5uZXJBZnRlck5ldy1vdXQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZGQyMjZkCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL0lubmVyQWZ0ZXJOZXctb3V0LmphdmEKQEAgLTAsMCArMSwxNCBAQAorcHVibGljIGNsYXNzIFRlc3QgeworCisgIHsKKyAgICBuZXcgRm9vPFN0cmluZz4oKS5tZXRob2QobmV3IE91dGVyLklubmVyPFN0cmluZz4oKSk7PGNhcmV0PgorICB9CisKKyAgc3RhdGljIGNsYXNzIE91dGVyIHsKKyAgICBzdGF0aWMgY2xhc3MgSW5uZXI8QT4ge30KKyAgfQorCisgIGNsYXNzIEZvbzxBPiB7CisgICAgcHVibGljIHZvaWQgbWV0aG9kKE91dGVyLklubmVyPEE+IGlubmVyKSB7fQorICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL0lubmVyQWZ0ZXJOZXcuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9Jbm5lckFmdGVyTmV3LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWE0ZDIxZAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9Jbm5lckFmdGVyTmV3LmphdmEKQEAgLTAsMCArMSwxNCBAQAorcHVibGljIGNsYXNzIFRlc3QgeworCisgIHsKKyAgICBuZXcgRm9vPFN0cmluZz4oKS5tZXRob2QobmV3IDxjYXJldD4pOworICB9CisKKyAgc3RhdGljIGNsYXNzIE91dGVyIHsKKyAgICBzdGF0aWMgY2xhc3MgSW5uZXI8QT4ge30KKyAgfQorCisgIGNsYXNzIEZvbzxBPiB7CisgICAgcHVibGljIHZvaWQgbWV0aG9kKE91dGVyLklubmVyPEE+IGlubmVyKSB7fQorICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL0lubmVyQ2xhc3NJbXBvcnRzLW91dC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL0lubmVyQ2xhc3NJbXBvcnRzLW91dC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcxNWQ5OTIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvSW5uZXJDbGFzc0ltcG9ydHMtb3V0LmphdmEKQEAgLTAsMCArMSwxMiBAQAoraW1wb3J0IGphdmEuYXd0Lmdlb20uUG9pbnQyRDsKKworY2xhc3MgVVRlc3QgeworCisgICAgdm9pZCBmb28oKSB7CisgICAgICAgIFBvaW50MkQuRG91YmxlIGQgPSBuZXcgUG9pbnQyRC5Eb3VibGUoKTs8Y2FyZXQ+CisgICAgfQorCisgICAgdm9pZCBiYXIoKSB7CisgICAgICAgIERvdWJsZSBkOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvSW5uZXJDbGFzc0ltcG9ydHMuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9Jbm5lckNsYXNzSW1wb3J0cy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQwMzQ0MzAKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvSW5uZXJDbGFzc0ltcG9ydHMuamF2YQpAQCAtMCwwICsxLDEyIEBACitpbXBvcnQgamF2YS5hd3QuZ2VvbS5Qb2ludDJEOworCitjbGFzcyBVVGVzdCB7CisKKyAgICB2b2lkIGZvbygpIHsKKyAgICAgICAgUG9pbnQyRC5Eb3VibGUgZCA9IG5ldyA8Y2FyZXQ+CisgICAgfQorCisgICAgdm9pZCBiYXIoKSB7CisgICAgICAgIERvdWJsZSBkOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvSW5uZXJFbnVtLW91dC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL0lubmVyRW51bS1vdXQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNjNlNTc3Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL0lubmVyRW51bS1vdXQuamF2YQpAQCAtMCwwICsxLDExIEBACitwdWJsaWMgY2xhc3MgRm9vIHsKKyAgICB2b2lkIGZvbygpIHsKKyAgICAgIEJhci5GdWJhciBiID0gdHJ1ZSA/IEJhci5GdWJhci5CYXIgOiA8Y2FyZXQ+CisgICAgfQorfQorICAKK3B1YmxpYyBzdGF0aWMgY2xhc3MgQmFyIHsKKyAgcHVibGljIGVudW0gRnViYXIgeworICAgIEZvbywgQmFyCisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvSW5uZXJFbnVtLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvSW5uZXJFbnVtLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjJjYjkxNTYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvSW5uZXJFbnVtLmphdmEKQEAgLTAsMCArMSwxMSBAQAorcHVibGljIGNsYXNzIEZvbyB7CisgICAgdm9pZCBmb28oKSB7CisgICAgICBCYXIuRnViYXIgYiA9IHRydWUgPyA8Y2FyZXQ+CisgICAgfQorfQorICAKK3B1YmxpYyBzdGF0aWMgY2xhc3MgQmFyIHsKKyAgcHVibGljIGVudW0gRnViYXIgeworICAgIEZvbywgQmFyCisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvSW5uZXJFbnVtSW5NZXRob2Qtb3V0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvSW5uZXJFbnVtSW5NZXRob2Qtb3V0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDY1YjhiYwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9Jbm5lckVudW1Jbk1ldGhvZC1vdXQuamF2YQpAQCAtMCwwICsxLDEwIEBACitwdWJsaWMgY2xhc3MgRm9vIHsKKworICAgIHsKKyAgICAgICAgZW51bSBCYXIgeworICAgICAgICAgICAgRnViYXIKKyAgICAgICAgfQorICAgICAgICBCYXIgYiA9IEJhci5GdWJhcjs8Y2FyZXQ+IAorICAgIH0KKworfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL0lubmVyRW51bUluTWV0aG9kLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvSW5uZXJFbnVtSW5NZXRob2QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ODAyNzMwCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL0lubmVyRW51bUluTWV0aG9kLmphdmEKQEAgLTAsMCArMSwxMCBAQAorcHVibGljIGNsYXNzIEZvbyB7CisKKyAgICB7CisgICAgICAgIGVudW0gQmFyIHsKKyAgICAgICAgICAgIEZ1YmFyCisgICAgICAgIH0KKyAgICAgICAgQmFyIGIgPSBGdWI8Y2FyZXQ+IAorICAgIH0KKworfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL0luc2VydE92ZXJyaWRlLW91dC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL0luc2VydE92ZXJyaWRlLW91dC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJkODZjNTMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvSW5zZXJ0T3ZlcnJpZGUtb3V0LmphdmEKQEAgLTAsMCArMSwxMCBAQAorY2xhc3MgQyB7CisgICAgdm9pZCBmKCkgeworICAgICAgICBSdW5uYWJsZSByID0gbmV3IFJ1bm5hYmxlKCkgeworICAgICAgICAgICAgQE92ZXJyaWRlCisgICAgICAgICAgICBwdWJsaWMgdm9pZCBydW4oKSB7CisgICAgICAgICAgICAgICAgPHNlbGVjdGlvbj4vL1RvIGNoYW5nZSBib2R5IG9mIGltcGxlbWVudGVkIG1ldGhvZHMgdXNlIEZpbGUgfCBTZXR0aW5ncyB8IEZpbGUgVGVtcGxhdGVzLjwvc2VsZWN0aW9uPgorICAgICAgICAgICAgfQorICAgICAgICB9OworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvSW5zZXJ0T3ZlcnJpZGUuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9JbnNlcnRPdmVycmlkZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYwMzBiZTMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvSW5zZXJ0T3ZlcnJpZGUuamF2YQpAQCAtMCwwICsxLDUgQEAKK2NsYXNzIEMgeworICAgIHZvaWQgZigpIHsKKyAgICAgICAgUnVubmFibGUgciA9IG5ldyA8Y2FyZXQ+CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9JbnNlcnRUeXBlUGFyYW1ldGVyc09uSW1wb3J0aW5nLW91dC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL0luc2VydFR5cGVQYXJhbWV0ZXJzT25JbXBvcnRpbmctb3V0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjk1YzA5NmMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvSW5zZXJ0VHlwZVBhcmFtZXRlcnNPbkltcG9ydGluZy1vdXQuamF2YQpAQCAtMCwwICsxLDggQEAKK2ltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuTWFwOworCitjbGFzcyBGb28geworICB7CisgICAgTWFwPFN0cmluZyxTdHJpbmc+IG0gPSBuZXcgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4oPGNhcmV0Pik7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvSW5zZXJ0VHlwZVBhcmFtZXRlcnNPbkltcG9ydGluZy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL0luc2VydFR5cGVQYXJhbWV0ZXJzT25JbXBvcnRpbmcuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMGY3YTgzCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL0luc2VydFR5cGVQYXJhbWV0ZXJzT25JbXBvcnRpbmcuamF2YQpAQCAtMCwwICsxLDcgQEAKK2ltcG9ydCBqYXZhLnV0aWwuTWFwOworCitjbGFzcyBGb28geworICB7CisgICAgTWFwPFN0cmluZyxTdHJpbmc+IG0gPSBuZXcgSGFzaE08Y2FyZXQ+CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvSW5zaWRlQ2F0Y2gtb3V0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvSW5zaWRlQ2F0Y2gtb3V0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODQ2ZTE1NgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9JbnNpZGVDYXRjaC1vdXQuamF2YQpAQCAtMCwwICsxLDkgQEAKK2NsYXNzIEF7CisKK3sKKyB0cnl7CisgIHRocm93IG5ldyBFeGNlcHRpb24oKTsKKyB9CisgY2F0Y2goRXhjZXB0aW9uIDxjYXJldD4pCit9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL0luc2lkZUNhdGNoLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvSW5zaWRlQ2F0Y2guamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NmY2OWFhCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL0luc2lkZUNhdGNoLmphdmEKQEAgLTAsMCArMSw5IEBACitjbGFzcyBBeworCit7CisgdHJ5eworICB0aHJvdyBuZXcgRXhjZXB0aW9uKCk7CisgfQorIGNhdGNoKDxjYXJldD4pCit9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL0luc2lkZUdlbmVyaWNDbGFzc0xpdGVyYWwuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9JbnNpZGVHZW5lcmljQ2xhc3NMaXRlcmFsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjA0MTliNwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9JbnNpZGVHZW5lcmljQ2xhc3NMaXRlcmFsLmphdmEKQEAgLTAsMCArMSw5IEBACitjbGFzcyBGb28geworCisgIDxUIGV4dGVuZHMgQ2hhclNlcXVlbmNlPiBUIGJhcihDbGFzczxUPiB0KSB7fQorCisgIHsKKyAgICAgYmFyKFN0PGNhcmV0Pi5jbGFzcykKKyAgfQorCisgIH0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvSW5zaWRlU3RyaW5nTGl0ZXJhbC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL0luc2lkZVN0cmluZ0xpdGVyYWwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NzUyMmU0Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL0luc2lkZVN0cmluZ0xpdGVyYWwuamF2YQpAQCAtMCwwICsxLDMgQEAKK3B1YmxpYyBjbGFzcyBaWlogeworICAgICAgIFN0cmluZyBzID0gIjxjYXJldD4iOworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9JbnN0YW5jZU1ldGhvZFBhcmFtZXRlcnNGcm9tU3RhdGljQ29udGV4dC1vdXQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9JbnN0YW5jZU1ldGhvZFBhcmFtZXRlcnNGcm9tU3RhdGljQ29udGV4dC1vdXQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOGJjZTJhCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL0luc3RhbmNlTWV0aG9kUGFyYW1ldGVyc0Zyb21TdGF0aWNDb250ZXh0LW91dC5qYXZhCkBAIC0wLDAgKzEsMTMgQEAKK3B1YmxpYyBjbGFzcyBNeUZpcnN0VGVzdENsYXNzQm9vIHsKKworICAgIHN0YXRpYyB2b2lkIGZvbyhpbnQgYSkge30KKworICAgIHZvaWQgZm9vKFN0cmluZyBzKSB7fQorCisgICAgc3RhdGljIHsKKyAgICAgICAgaW50IHh4eTsKKyAgICAgICAgU3RyaW5nIHh4ejsKKyAgICAgICAgZm9vKHh4eSk7PGNhcmV0PgorICAgIH0KKworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9JbnN0YW5jZU1ldGhvZFBhcmFtZXRlcnNGcm9tU3RhdGljQ29udGV4dC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL0luc3RhbmNlTWV0aG9kUGFyYW1ldGVyc0Zyb21TdGF0aWNDb250ZXh0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTdkYzJlMAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9JbnN0YW5jZU1ldGhvZFBhcmFtZXRlcnNGcm9tU3RhdGljQ29udGV4dC5qYXZhCkBAIC0wLDAgKzEsMTMgQEAKK3B1YmxpYyBjbGFzcyBNeUZpcnN0VGVzdENsYXNzQm9vIHsKKworICAgIHN0YXRpYyB2b2lkIGZvbyhpbnQgYSkge30KKworICAgIHZvaWQgZm9vKFN0cmluZyBzKSB7fQorCisgICAgc3RhdGljIHsKKyAgICAgICAgaW50IHh4eTsKKyAgICAgICAgU3RyaW5nIHh4ejsKKyAgICAgICAgZm9vKHh4PGNhcmV0PikKKyAgICB9CisKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvSW5zdGFuY2VNZXRob2RQYXJhbWV0ZXJzRnJvbVN0YXRpY0NvbnRleHQyLW91dC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL0luc3RhbmNlTWV0aG9kUGFyYW1ldGVyc0Zyb21TdGF0aWNDb250ZXh0Mi1vdXQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMWMwYmM3Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL0luc3RhbmNlTWV0aG9kUGFyYW1ldGVyc0Zyb21TdGF0aWNDb250ZXh0Mi1vdXQuamF2YQpAQCAtMCwwICsxLDEwIEBACitwdWJsaWMgY2xhc3MgTXlGaXJzdFRlc3RDbGFzc0JvbyB7CisKKyAgICB2b2lkIGZvbyhTdHJpbmcgcykge30KKworICAgIHN0YXRpYyB7CisgICAgICAgIFN0cmluZyB4eHo7CisgICAgICAgIGZvbyh4eHopOzxjYXJldD4KKyAgICB9CisKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvSW5zdGFuY2VNZXRob2RQYXJhbWV0ZXJzRnJvbVN0YXRpY0NvbnRleHQyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvSW5zdGFuY2VNZXRob2RQYXJhbWV0ZXJzRnJvbVN0YXRpY0NvbnRleHQyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjFiODViYgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9JbnN0YW5jZU1ldGhvZFBhcmFtZXRlcnNGcm9tU3RhdGljQ29udGV4dDIuamF2YQpAQCAtMCwwICsxLDEwIEBACitwdWJsaWMgY2xhc3MgTXlGaXJzdFRlc3RDbGFzc0JvbyB7CisKKyAgICB2b2lkIGZvbyhTdHJpbmcgcykge30KKworICAgIHN0YXRpYyB7CisgICAgICAgIFN0cmluZyB4eHo7CisgICAgICAgIGZvbyh4eDxjYXJldD4pCisgICAgfQorCit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL0luc3RhbmNlb2ZlZEluc2lkZUFub255bW91cy1vdXQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9JbnN0YW5jZW9mZWRJbnNpZGVBbm9ueW1vdXMtb3V0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2NmYjE3ZAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9JbnN0YW5jZW9mZWRJbnNpZGVBbm9ueW1vdXMtb3V0LmphdmEKQEAgLTAsMCArMSwxNiBAQAorY2xhc3MgQ3sKKyAgICB7CisgICAgICAgIE9iamVjdCBvOworICAgICAgICBpZiAobyBpbnN0YW5jZW9mIEZvbykgeworICAgICAgICAgICAgbmV3IFJ1bm5hYmxlKCkgeworICAgICAgICAgICAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKKyAgICAgICAgICAgICAgICAgICAgRm9vIGYgPSAoRm9vKSBvOzxjYXJldD4KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9CisKK2NsYXNzIEZvbyB7CisgICAgdm9pZCBkb2ZvbygpOworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9JbnN0YW5jZW9mZWRJbnNpZGVBbm9ueW1vdXMuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9JbnN0YW5jZW9mZWRJbnNpZGVBbm9ueW1vdXMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYjA4YjIyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL0luc3RhbmNlb2ZlZEluc2lkZUFub255bW91cy5qYXZhCkBAIC0wLDAgKzEsMTYgQEAKK2NsYXNzIEN7CisgICAgeworICAgICAgICBPYmplY3QgbzsKKyAgICAgICAgaWYgKG8gaW5zdGFuY2VvZiBGb28pIHsKKyAgICAgICAgICAgIG5ldyBSdW5uYWJsZSgpIHsKKyAgICAgICAgICAgICAgICBwdWJsaWMgdm9pZCBydW4oKSB7CisgICAgICAgICAgICAgICAgICAgIEZvbyBmID0gPGNhcmV0PgorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK30KKworY2xhc3MgRm9vIHsKKyAgICB2b2lkIGRvZm9vKCk7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL0ludENvbnN0SW5Td2l0Y2gtb3V0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvSW50Q29uc3RJblN3aXRjaC1vdXQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NTQ3ZjUwCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL0ludENvbnN0SW5Td2l0Y2gtb3V0LmphdmEKQEAgLTAsMCArMSwxMSBAQAorY2xhc3MgRSB7CisgIHN0YXRpYyBmaW5hbCBpbnQgQUJDOworICBzdGF0aWMgZmluYWwgaW50IERFRjsKKworICB2b2lkIGZvbyAoaW50IGUpIHsKKyAgICBpbnQgQURGOworICAgIHN3aXRjaCAoZSkgeworICAgICAgY2FzZSBBQkM6PGNhcmV0PgorICAgIH0KKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9JbnRDb25zdEluU3dpdGNoLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvSW50Q29uc3RJblN3aXRjaC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUyZDM3ZGYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvSW50Q29uc3RJblN3aXRjaC5qYXZhCkBAIC0wLDAgKzEsMTEgQEAKK2NsYXNzIEUgeworICBzdGF0aWMgZmluYWwgaW50IEFCQzsKKyAgc3RhdGljIGZpbmFsIGludCBERUY7CisKKyAgdm9pZCBmb28gKGludCBlKSB7CisgICAgaW50IEFERjsKKyAgICBzd2l0Y2ggKGUpIHsKKyAgICAgIGNhc2UgQTxjYXJldD4KKyAgICB9CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvSW50UGx1c0xvbmdOb3REb3VibGUtb3V0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvSW50UGx1c0xvbmdOb3REb3VibGUtb3V0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODAyNTAwOAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9JbnRQbHVzTG9uZ05vdERvdWJsZS1vdXQuamF2YQpAQCAtMCwwICsxLDcgQEAKK2NsYXNzIEZvbyB7CisgICAgeworICAgICAgICBpbnQgYTsKKyAgICAgICAgbG9uZyBiOworICAgICAgICBpbnQgYyA9IGEgKyAoaW50KSA8Y2FyZXQ+YjsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvSW50UGx1c0xvbmdOb3REb3VibGUuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9JbnRQbHVzTG9uZ05vdERvdWJsZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI4OGZlMjEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvSW50UGx1c0xvbmdOb3REb3VibGUuamF2YQpAQCAtMCwwICsxLDcgQEAKK2NsYXNzIEZvbyB7CisgICAgeworICAgICAgICBpbnQgYTsKKyAgICAgICAgbG9uZyBiOworICAgICAgICBpbnQgYyA9IGEgKyAoPGNhcmV0PmI7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL0phdmFkb2NUaHJvd3Mtb3V0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvSmF2YWRvY1Rocm93cy1vdXQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOTdhYzdjCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL0phdmFkb2NUaHJvd3Mtb3V0LmphdmEKQEAgLTAsMCArMSw5IEBACitjbGFzcyBNeUV4Y2VwdGlvbiBleHRlbmRzIFJ1bnRpbWVFeGNlcHRpb257fQorCitjbGFzcyBNeUNsYXNzIHsKKy8qKgorKiBAdGhyb3dzIE15RXhjZXB0aW9uIDxjYXJldD4KKyovCitwdWJsaWMgdm9pZCBmb28oKSB0aHJvd3MgTXlFeGNlcHRpb24geworfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9KYXZhZG9jVGhyb3dzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvSmF2YWRvY1Rocm93cy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIyOTVmYmEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvSmF2YWRvY1Rocm93cy5qYXZhCkBAIC0wLDAgKzEsOSBAQAorY2xhc3MgTXlFeGNlcHRpb24gZXh0ZW5kcyBSdW50aW1lRXhjZXB0aW9ue30KKworY2xhc3MgTXlDbGFzcyB7CisvKioKKyogQHRocm93cyA8Y2FyZXQ+CisqLworcHVibGljIHZvaWQgZm9vKCkgdGhyb3dzIE15RXhjZXB0aW9uIHsKK30KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvTGl2ZVRlbXBsYXRlLW91dC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL0xpdmVUZW1wbGF0ZS1vdXQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOTY5ZDdlCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL0xpdmVUZW1wbGF0ZS1vdXQuamF2YQpAQCAtMCwwICsxLDEyIEBACitjbGFzcyBGb28geworfQorCitjbGFzcyBGb29GYWN0b3J5IHsKKyAgc3RhdGljIEZvbyBjcmVhdGVGb28oKSB7fQorfQorCitjbGFzcyBYWFggeworICB7CisgICAgRm9vIGYgPSBGb29GYWN0b3J5LmNyZWF0ZUZvbygpPGNhcmV0PgorICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL0xpdmVUZW1wbGF0ZS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL0xpdmVUZW1wbGF0ZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJkOTk3OGYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvTGl2ZVRlbXBsYXRlLmphdmEKQEAgLTAsMCArMSwxMiBAQAorY2xhc3MgRm9vIHsKK30KKworY2xhc3MgRm9vRmFjdG9yeSB7CisgIHN0YXRpYyBGb28gY3JlYXRlRm9vKCkge30KK30KKworY2xhc3MgWFhYIHsKKyAgeworICAgIEZvbyBmID0gPGNhcmV0PgorICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL01lYW5pbmdsZXNzRXhwbGljaXRXaWxkY2FyZFBhcmFtLW91dC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL01lYW5pbmdsZXNzRXhwbGljaXRXaWxkY2FyZFBhcmFtLW91dC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYxYzg4ZDcKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvTWVhbmluZ2xlc3NFeHBsaWNpdFdpbGRjYXJkUGFyYW0tb3V0LmphdmEKQEAgLTAsMCArMSwxMiBAQAorY2xhc3MgS2V5PFQ+IHsKKyAgc3RhdGljIDxUPiBLZXk8VD4gY3JlYXRlKFN0cmluZyBzKTsKK30KKworY2xhc3MgRm9vIHsKKyAgPFQ+IHZvaWQgcHV0VXNlckRhdGEoS2V5PFQ+IGtleSwgVCB2YWx1ZSkge30KKworICB7CisgICAgcHV0VXNlckRhdGEoS2V5LmNyZWF0ZSg8Y2FyZXQ+KSwgKQorICB9CisKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvTWVhbmluZ2xlc3NFeHBsaWNpdFdpbGRjYXJkUGFyYW0uamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9NZWFuaW5nbGVzc0V4cGxpY2l0V2lsZGNhcmRQYXJhbS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM3OTM4MWUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvTWVhbmluZ2xlc3NFeHBsaWNpdFdpbGRjYXJkUGFyYW0uamF2YQpAQCAtMCwwICsxLDEyIEBACitjbGFzcyBLZXk8VD4geworICBzdGF0aWMgPFQ+IEtleTxUPiBjcmVhdGUoU3RyaW5nIHMpOworfQorCitjbGFzcyBGb28geworICA8VD4gdm9pZCBwdXRVc2VyRGF0YShLZXk8VD4ga2V5LCBUIHZhbHVlKSB7fQorCisgIHsKKyAgICBwdXRVc2VyRGF0YSg8Y2FyZXQ+KQorICB9CisKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvTWVtYmVySW1wb3J0U3RhdGljYWxseS1vdXQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9NZW1iZXJJbXBvcnRTdGF0aWNhbGx5LW91dC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmExNjg0YzUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvTWVtYmVySW1wb3J0U3RhdGljYWxseS1vdXQuamF2YQpAQCAtMCwwICsxLDEzIEBACitpbXBvcnQgc3RhdGljIFN1cGVyLkZPTzsKKworY2xhc3MgU3VwZXIgeworICBwdWJsaWMgc3RhdGljIGZpbmFsIFN1cGVyIEZPTyA9IG51bGw7CisgIHB1YmxpYyBzdGF0aWMgU3VwZXIgRk9PMigpIHt9OworfQorCitjbGFzcyBJbnRlcm1lZGlhdGUgeworCisgICAgU3VwZXIgcyA9IEZPTzs8Y2FyZXQ+Cit9CisKKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL01lbWJlckltcG9ydFN0YXRpY2FsbHkuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9NZW1iZXJJbXBvcnRTdGF0aWNhbGx5LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmUwZGQwMjAKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvTWVtYmVySW1wb3J0U3RhdGljYWxseS5qYXZhCkBAIC0wLDAgKzEsMTEgQEAKK2NsYXNzIFN1cGVyIHsKKyAgcHVibGljIHN0YXRpYyBmaW5hbCBTdXBlciBGT08gPSBudWxsOworICBwdWJsaWMgc3RhdGljIFN1cGVyIEZPTzIoKSB7fTsKK30KKworY2xhc3MgSW50ZXJtZWRpYXRlIHsKKworICAgIFN1cGVyIHMgPSBGPGNhcmV0PgorfQorCisKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9NZXRob2RBbm5vdGF0aW9uTmFtZWRQYXJhbWV0ZXItb3V0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvTWV0aG9kQW5ub3RhdGlvbk5hbWVkUGFyYW1ldGVyLW91dC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIwODgyOTYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvTWV0aG9kQW5ub3RhdGlvbk5hbWVkUGFyYW1ldGVyLW91dC5qYXZhCkBAIC0wLDAgKzEsOSBAQAorcHVibGljIGNsYXNzIEJhckJheiB7CisKKyAgICBARm9vKGlzQmFyID0gdHJ1ZTxjYXJldD4pCisgICAgcHVibGljIHZvaWQgeCgpIHt9CisKKyAgICBwdWJsaWMgQGludGVyZmFjZSBGb28geworICAgICAgICBib29sZWFuIGlzQmFyKCkgZGVmYXVsdCBmYWxzZTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL01ldGhvZEFubm90YXRpb25OYW1lZFBhcmFtZXRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL01ldGhvZEFubm90YXRpb25OYW1lZFBhcmFtZXRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEzNTQxOTEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvTWV0aG9kQW5ub3RhdGlvbk5hbWVkUGFyYW1ldGVyLmphdmEKQEAgLTAsMCArMSw5IEBACitwdWJsaWMgY2xhc3MgQmFyQmF6IHsKKworICAgIEBGb28oaXNCYXIgPSB0PGNhcmV0PikKKyAgICBwdWJsaWMgdm9pZCB4KCkge30KKworICAgIHB1YmxpYyBAaW50ZXJmYWNlIEZvbyB7CisgICAgICAgIGJvb2xlYW4gaXNCYXIoKSBkZWZhdWx0IGZhbHNlOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvTWV0aG9kQ2FsbERvdC1vdXQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9NZXRob2RDYWxsRG90LW91dC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU5ZTg5YTAKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvTWV0aG9kQ2FsbERvdC1vdXQuamF2YQpAQCAtMCwwICsxLDkgQEAKK3B1YmxpYyBjbGFzcyBGb28geworICAgIHsKKyAgICAgICAgU3RyaW5nIHNzc3M7CisgICAgICAgIGZvbyhzc3NzKTxjYXJldD4uOworICAgIH0KKworICAgIHZvaWQgZm9vKFN0cmluZyBzKTsKKworIH0KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9NZXRob2RDYWxsRG90LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvTWV0aG9kQ2FsbERvdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU4MmE5NDUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvTWV0aG9kQ2FsbERvdC5qYXZhCkBAIC0wLDAgKzEsOSBAQAorcHVibGljIGNsYXNzIEZvbyB7CisgICAgeworICAgICAgICBTdHJpbmcgc3NzczsKKyAgICAgICAgZm9vKHM8Y2FyZXQ+KS47CisgICAgfQorCisgICAgdm9pZCBmb28oU3RyaW5nIHMpOworCisgfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL01ldGhvZENvbG9uLW91dC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL01ldGhvZENvbG9uLW91dC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE1YzEzMzQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvTWV0aG9kQ29sb24tb3V0LmphdmEKQEAgLTAsMCArMSw4IEBACitjbGFzcyBCYXIgeworICBpbnQgem9vb2EoKSB7fQorICBpbnQgem9vb2IoKSB7fQorCisgIGludCBmb28oKSB7CisgICAgcmV0dXJuIHRydWUgPyB6b29vYSgpIDogPGNhcmV0PgorICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvTWV0aG9kQ29sb24uamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9NZXRob2RDb2xvbi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg3OTkwNzQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvTWV0aG9kQ29sb24uamF2YQpAQCAtMCwwICsxLDggQEAKK2NsYXNzIEJhciB7CisgIGludCB6b29vYSgpIHt9CisgIGludCB6b29vYigpIHt9CisKKyAgaW50IGZvbygpIHsKKyAgICByZXR1cm4gdHJ1ZSA/IHpvbzxjYXJldD4KKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL01ldGhvZE5vUGFpckJyYWNrZXRDb21tYS1vdXQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9NZXRob2ROb1BhaXJCcmFja2V0Q29tbWEtb3V0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODgzZWY5YgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9NZXRob2ROb1BhaXJCcmFja2V0Q29tbWEtb3V0LmphdmEKQEAgLTAsMCArMSw4IEBACitjbGFzcyBBIHsKKyAgdm9pZCBmb28oU3RyaW5nIGJhciwgaW50IGEpIHt9CisgIFN0cmluZyB6b28oaW50IGIpIHt9CisKKyAgeworICAgIGZvbyh6b28oKSwgPGNhcmV0PikKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9NZXRob2ROb1BhaXJCcmFja2V0Q29tbWEuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9NZXRob2ROb1BhaXJCcmFja2V0Q29tbWEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYjFlN2QzCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL01ldGhvZE5vUGFpckJyYWNrZXRDb21tYS5qYXZhCkBAIC0wLDAgKzEsOCBAQAorY2xhc3MgQSB7CisgIHZvaWQgZm9vKFN0cmluZyBiYXIsIGludCBhKSB7fQorICBTdHJpbmcgem9vKGludCBiKSB7fQorCisgIHsKKyAgICBmb28oem88Y2FyZXQ+KQorICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL05lZ2F0ZVZhcmlhYmxlLW91dC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL05lZ2F0ZVZhcmlhYmxlLW91dC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk0ZmU5MzYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvTmVnYXRlVmFyaWFibGUtb3V0LmphdmEKQEAgLTAsMCArMSw5IEBACitwdWJsaWMgY2xhc3MgRm9vIHsKKyAgICB7CisgICAgICAgIGJvb2xlYW4gYmJiYjsKKyAgICAgICAgYmJiYiA9ICFiYmJiOzxjYXJldD4KKyAgICB9CisKKworIH0KKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL05lZ2F0ZVZhcmlhYmxlLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvTmVnYXRlVmFyaWFibGUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMDQwMDcyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL05lZ2F0ZVZhcmlhYmxlLmphdmEKQEAgLTAsMCArMSw5IEBACitwdWJsaWMgY2xhc3MgRm9vIHsKKyAgICB7CisgICAgICAgIGJvb2xlYW4gYmJiYjsKKyAgICAgICAgYmJiYiA9ICFiPGNhcmV0PgorICAgIH0KKworCisgfQorCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvTmVzdGVkQXNzaWdubWVudHMtb3V0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvTmVzdGVkQXNzaWdubWVudHMtb3V0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGQyZDU1YwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9OZXN0ZWRBc3NpZ25tZW50cy1vdXQuamF2YQpAQCAtMCwwICsxLDUgQEAKK2NsYXNzIFVzZXIgeworICAgIHsKKyAgICAgICAgaW50IGEgPSBoYXNoQ29kZSgpOzxjYXJldD4gPSBjOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvTmVzdGVkQXNzaWdubWVudHMuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9OZXN0ZWRBc3NpZ25tZW50cy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU4ZjBhMGUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvTmVzdGVkQXNzaWdubWVudHMuamF2YQpAQCAtMCwwICsxLDUgQEAKK2NsYXNzIFVzZXIgeworICAgIHsKKyAgICAgICAgaW50IGEgPSBoPGNhcmV0PiA9IGM7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9OZXdBYnN0cmFjdENsYXNzV2l0aENvbnN0cnVjdG9yQXJncy1vdXQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9OZXdBYnN0cmFjdENsYXNzV2l0aENvbnN0cnVjdG9yQXJncy1vdXQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOGZmY2FjCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL05ld0Fic3RyYWN0Q2xhc3NXaXRoQ29uc3RydWN0b3JBcmdzLW91dC5qYXZhCkBAIC0wLDAgKzEsMTkgQEAKK3B1YmxpYyBjbGFzcyBNYWluIHsKKworICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisgICAgQmFyIGIgPSBuZXcgQmFyKCkgeworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgdm9pZCB1cGRhdGUoKSB7CisgICAgICAgICAgICA8c2VsZWN0aW9uPi8vVG8gY2hhbmdlIGJvZHkgb2YgaW1wbGVtZW50ZWQgbWV0aG9kcyB1c2UgRmlsZSB8IFNldHRpbmdzIHwgRmlsZSBUZW1wbGF0ZXMuPC9zZWxlY3Rpb24+CisgICAgICAgIH0KKyAgICB9OworICB9CisKK30KKworcHVibGljIGFic3RyYWN0IGNsYXNzIEJhciB7CisgIHByb3RlY3RlZCBCYXIoaW50IGEpIHsKKyAgfQorCisgIGFic3RyYWN0IHZvaWQgdXBkYXRlKCk7Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvTmV3QWJzdHJhY3RDbGFzc1dpdGhDb25zdHJ1Y3RvckFyZ3MuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9OZXdBYnN0cmFjdENsYXNzV2l0aENvbnN0cnVjdG9yQXJncy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUyNzRhZWMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvTmV3QWJzdHJhY3RDbGFzc1dpdGhDb25zdHJ1Y3RvckFyZ3MuamF2YQpAQCAtMCwwICsxLDE0IEBACitwdWJsaWMgY2xhc3MgTWFpbiB7CisKKyAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworICAgIEJhciBiID0gbmV3IEI8Y2FyZXQ+CisgIH0KKworfQorCitwdWJsaWMgYWJzdHJhY3QgY2xhc3MgQmFyIHsKKyAgcHJvdGVjdGVkIEJhcihpbnQgYSkgeworICB9CisKKyAgYWJzdHJhY3Qgdm9pZCB1cGRhdGUoKTsKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9OZXdBYnN0cmFjdEluc2lkZUFub255bW91cy1vdXQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9OZXdBYnN0cmFjdEluc2lkZUFub255bW91cy1vdXQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYzI5MDQyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL05ld0Fic3RyYWN0SW5zaWRlQW5vbnltb3VzLW91dC5qYXZhCkBAIC0wLDAgKzEsMTkgQEAKK3B1YmxpYyBjbGFzcyBGb28geworCisgIHB1YmxpYyBGb28oKSB7CisgICAgUnVubmFibGUgciA9IG5ldyBSdW5uYWJsZSgpIHsKKyAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKKyAgICAgICAgR29vPFN0cmluZz4gZyA9IG5ldyBHb288U3RyaW5nPigpIHsKKyAgICAgICAgICAgIEBPdmVycmlkZQorICAgICAgICAgICAgdm9pZCBmb28oKSB7CisgICAgICAgICAgICAgICAgPHNlbGVjdGlvbj4vL1RvIGNoYW5nZSBib2R5IG9mIGltcGxlbWVudGVkIG1ldGhvZHMgdXNlIEZpbGUgfCBTZXR0aW5ncyB8IEZpbGUgVGVtcGxhdGVzLjwvc2VsZWN0aW9uPgorICAgICAgICAgICAgfQorICAgICAgICB9OworICAgICAgfQorICAgIH07CisgIH0KK30KKworYWJzdHJhY3QgY2xhc3MgR29vPFQ+IHsKKyAgYWJzdHJhY3Qgdm9pZCBmb28oKTsKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9OZXdBYnN0cmFjdEluc2lkZUFub255bW91cy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL05ld0Fic3RyYWN0SW5zaWRlQW5vbnltb3VzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjNhMTQxNwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9OZXdBYnN0cmFjdEluc2lkZUFub255bW91cy5qYXZhCkBAIC0wLDAgKzEsMTQgQEAKK3B1YmxpYyBjbGFzcyBGb28geworCisgIHB1YmxpYyBGb28oKSB7CisgICAgUnVubmFibGUgciA9IG5ldyBSdW5uYWJsZSgpIHsKKyAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKKyAgICAgICAgR29vPFN0cmluZz4gZyA9IG5ldyBHPGNhcmV0PgorICAgICAgfQorICAgIH07CisgIH0KK30KKworYWJzdHJhY3QgY2xhc3MgR29vPFQ+IHsKKyAgYWJzdHJhY3Qgdm9pZCBmb28oKTsKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9OZXdBbm9ueW1vdXNGdW5jdGlvbi1vdXQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9OZXdBbm9ueW1vdXNGdW5jdGlvbi1vdXQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYTRkNmZiCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL05ld0Fub255bW91c0Z1bmN0aW9uLW91dC5qYXZhCkBAIC0wLDAgKzEsMjkgQEAKK2ludGVyZmFjZSBGdW5jdGlvbjxYLCBZPiB7IH0KK2NsYXNzIEEgeworICBwcml2YXRlIHN0YXRpYyBmaW5hbCBGdW5jdGlvbjxTdHJpbmcsIFN0cmluZz4gYSA9IG5ldyBGdW5jdGlvbjxTdHJpbmcsIFN0cmluZz4oKSB7CisgICAgICBAT3ZlcnJpZGUKKyAgICAgIHB1YmxpYyBpbnQgaGFzaENvZGUoKSB7CisgICAgICAgICAgPHNlbGVjdGlvbj5yZXR1cm4gc3VwZXIuaGFzaENvZGUoKTsgICAgLy9UbyBjaGFuZ2UgYm9keSBvZiBvdmVycmlkZGVuIG1ldGhvZHMgdXNlIEZpbGUgfCBTZXR0aW5ncyB8IEZpbGUgVGVtcGxhdGVzLjwvc2VsZWN0aW9uPgorICAgICAgfQorCisgICAgICBAT3ZlcnJpZGUKKyAgICAgIHB1YmxpYyBib29sZWFuIGVxdWFscyhPYmplY3Qgb2JqKSB7CisgICAgICAgICAgcmV0dXJuIHN1cGVyLmVxdWFscyhvYmopOyAgICAvL1RvIGNoYW5nZSBib2R5IG9mIG92ZXJyaWRkZW4gbWV0aG9kcyB1c2UgRmlsZSB8IFNldHRpbmdzIHwgRmlsZSBUZW1wbGF0ZXMuCisgICAgICB9CisKKyAgICAgIEBPdmVycmlkZQorICAgICAgcHJvdGVjdGVkIE9iamVjdCBjbG9uZSgpIHRocm93cyBDbG9uZU5vdFN1cHBvcnRlZEV4Y2VwdGlvbiB7CisgICAgICAgICAgcmV0dXJuIHN1cGVyLmNsb25lKCk7ICAgIC8vVG8gY2hhbmdlIGJvZHkgb2Ygb3ZlcnJpZGRlbiBtZXRob2RzIHVzZSBGaWxlIHwgU2V0dGluZ3MgfCBGaWxlIFRlbXBsYXRlcy4KKyAgICAgIH0KKworICAgICAgQE92ZXJyaWRlCisgICAgICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgeworICAgICAgICAgIHJldHVybiBzdXBlci50b1N0cmluZygpOyAgICAvL1RvIGNoYW5nZSBib2R5IG9mIG92ZXJyaWRkZW4gbWV0aG9kcyB1c2UgRmlsZSB8IFNldHRpbmdzIHwgRmlsZSBUZW1wbGF0ZXMuCisgICAgICB9CisKKyAgICAgIEBPdmVycmlkZQorICAgICAgcHJvdGVjdGVkIHZvaWQgZmluYWxpemUoKSB0aHJvd3MgVGhyb3dhYmxlIHsKKyAgICAgICAgICBzdXBlci5maW5hbGl6ZSgpOyAgICAvL1RvIGNoYW5nZSBib2R5IG9mIG92ZXJyaWRkZW4gbWV0aG9kcyB1c2UgRmlsZSB8IFNldHRpbmdzIHwgRmlsZSBUZW1wbGF0ZXMuCisgICAgICB9CisgIH07Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL05ld0Fub255bW91c0Z1bmN0aW9uLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvTmV3QW5vbnltb3VzRnVuY3Rpb24uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YTYzNTk5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL05ld0Fub255bW91c0Z1bmN0aW9uLmphdmEKQEAgLTAsMCArMSw0IEBACitpbnRlcmZhY2UgRnVuY3Rpb248WCwgWT4geyB9CitjbGFzcyBBIHsKKyAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgRnVuY3Rpb248U3RyaW5nLCBTdHJpbmc+IGEgPSBuZXcgPGNhcmV0PgorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9OZXdCeXRlQXJyYXkuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9OZXdCeXRlQXJyYXkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMGNkYjcxCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL05ld0J5dGVBcnJheS5qYXZhCkBAIC0wLDAgKzEsNSBAQAorY2xhc3MgQSB7CisgIGJ5dGVbXSBtKCkgeworICAgIHJldHVybiBuZXcgPGNhcmV0Png7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvTmV3SW5uZXJDbGFzc05hbWVTaG9ydFByZWZpeC1vdXQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9OZXdJbm5lckNsYXNzTmFtZVNob3J0UHJlZml4LW91dC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ5NzJkY2YKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvTmV3SW5uZXJDbGFzc05hbWVTaG9ydFByZWZpeC1vdXQuamF2YQpAQCAtMCwwICsxLDEyIEBACitwdWJsaWMgY2xhc3MgSmF2YUNsYXNzIHsKKyAgeworICAgIE91dGVyLkJvbyBiID0gbmV3IE91dGVyLkJvbygpOzxjYXJldD4KKyAgfQorfQorCitjbGFzcyBPdXRlciB7CisgIHN0YXRpYyBjbGFzcyBCb28geyB9Cit9CisKKworY2xhc3MgQUJvb0ltcGwgZXh0ZW5kcyBPdXRlci5Cb28geyB9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL05ld0lubmVyQ2xhc3NOYW1lU2hvcnRQcmVmaXguamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9OZXdJbm5lckNsYXNzTmFtZVNob3J0UHJlZml4LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWE0MDJkYQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9OZXdJbm5lckNsYXNzTmFtZVNob3J0UHJlZml4LmphdmEKQEAgLTAsMCArMSwxMiBAQAorcHVibGljIGNsYXNzIEphdmFDbGFzcyB7CisgIHsKKyAgICBPdXRlci5Cb28gYiA9IG5ldyBCPGNhcmV0PgorICB9Cit9CisKK2NsYXNzIE91dGVyIHsKKyAgc3RhdGljIGNsYXNzIEJvbyB7IH0KK30KKworCitjbGFzcyBBQm9vSW1wbCBleHRlbmRzIE91dGVyLkJvbyB7IH0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvTmV3SW5uZXJDbGFzc09mU3VwZXItb3V0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvTmV3SW5uZXJDbGFzc09mU3VwZXItb3V0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDcwODk1NAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9OZXdJbm5lckNsYXNzT2ZTdXBlci1vdXQuamF2YQpAQCAtMCwwICsxLDEzIEBACitwdWJsaWMgY2xhc3MgWm9vMiB7CisgICAgc3RhdGljIGNsYXNzIEhhbmRsZXIge30KK30KKworY2xhc3MgWm9vMyBleHRlbmRzIFpvbzIgeworICAgIGNsYXNzIE15SGFuZGxlciBleHRlbmRzIEhhbmRsZXIge30KK30KKworY2xhc3MgWm9vNCBleHRlbmRzIFpvbzMgeworICAgIHsKKyAgICAgICAgSGFuZGxlciBoYW5kbGVyID0gbmV3IE15SGFuZGxlcigpOzxjYXJldD4KKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL05ld0lubmVyQ2xhc3NPZlN1cGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvTmV3SW5uZXJDbGFzc09mU3VwZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MjlmMjg2Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL05ld0lubmVyQ2xhc3NPZlN1cGVyLmphdmEKQEAgLTAsMCArMSwxMyBAQAorcHVibGljIGNsYXNzIFpvbzIgeworICAgIHN0YXRpYyBjbGFzcyBIYW5kbGVyIHt9Cit9CisKK2NsYXNzIFpvbzMgZXh0ZW5kcyBab28yIHsKKyAgICBjbGFzcyBNeUhhbmRsZXIgZXh0ZW5kcyBIYW5kbGVyIHt9Cit9CisKK2NsYXNzIFpvbzQgZXh0ZW5kcyBab28zIHsKKyAgICB7CisgICAgICAgIEhhbmRsZXIgaGFuZGxlciA9IG5ldyBNPGNhcmV0PgorICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvTmV3SW5uZXJPZlBhcmFtZXRlcml6ZWRDbGFzcy1vdXQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9OZXdJbm5lck9mUGFyYW1ldGVyaXplZENsYXNzLW91dC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZjMDE1ZmMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvTmV3SW5uZXJPZlBhcmFtZXRlcml6ZWRDbGFzcy1vdXQuamF2YQpAQCAtMCwwICsxLDEyIEBACitwdWJsaWMgY2xhc3MgRXhlY3V0aW9uQ2hhbm5lbDwKKyAgICAgICAgVF9Db252ZXJzYXRpb25JZCwKKyAgICAgICAgVF9Db252ZXJzYXRpb24sCisgICAgICAgIFRfQ29uZmlndXJhdGlvbiwKKyAgICAgICAgVF9Qcm90b2NvbE9iamVjdD4geworCisgcHJpdmF0ZSBFeGVjdXRpb25DaGFubmVsQ2FjaGVPYnNlcnZlciB5ID0gbmV3IEV4ZWN1dGlvbkNoYW5uZWxDYWNoZU9ic2VydmVyKCk7PGNhcmV0PgorCisgcHJpdmF0ZSBjbGFzcyBFeGVjdXRpb25DaGFubmVsQ2FjaGVPYnNlcnZlciB7CisgfQorCit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL05ld0lubmVyT2ZQYXJhbWV0ZXJpemVkQ2xhc3MuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9OZXdJbm5lck9mUGFyYW1ldGVyaXplZENsYXNzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjAwMzc0YQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9OZXdJbm5lck9mUGFyYW1ldGVyaXplZENsYXNzLmphdmEKQEAgLTAsMCArMSwxMiBAQAorcHVibGljIGNsYXNzIEV4ZWN1dGlvbkNoYW5uZWw8CisgICAgICAgIFRfQ29udmVyc2F0aW9uSWQsCisgICAgICAgIFRfQ29udmVyc2F0aW9uLAorICAgICAgICBUX0NvbmZpZ3VyYXRpb24sCisgICAgICAgIFRfUHJvdG9jb2xPYmplY3Q+IHsKKworIHByaXZhdGUgRXhlY3V0aW9uQ2hhbm5lbENhY2hlT2JzZXJ2ZXIgeSA9IG5ldyA8Y2FyZXQ+CisKKyBwcml2YXRlIGNsYXNzIEV4ZWN1dGlvbkNoYW5uZWxDYWNoZU9ic2VydmVyIHsKKyB9CisKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvTmV3SW5uZXJSdW5uYWJsZS1vdXQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9OZXdJbm5lclJ1bm5hYmxlLW91dC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYwZGZjNDkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvTmV3SW5uZXJSdW5uYWJsZS1vdXQuamF2YQpAQCAtMCwwICsxLDEzIEBACitpbnRlcmZhY2UgUnVubmFibGUge30KKworY2xhc3MgTXlDbGFzcyB7CisgIHN0YXRpYyBjbGFzcyBGb28gaW1wbGVtZW50cyBSdW5uYWJsZSB7fQorfQorCitjbGFzcyBHb28gaW1wbGVtZW50cyBSdW5uYWJsZSB7fQorCitjbGFzcyBYWFggeworICB7CisgICAgUnVubmFibGUgciA9IG5ldyBNeUNsYXNzLkZvbygpOzxjYXJldD4KKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9OZXdJbm5lclJ1bm5hYmxlLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvTmV3SW5uZXJSdW5uYWJsZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM2MWQzYzAKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvTmV3SW5uZXJSdW5uYWJsZS5qYXZhCkBAIC0wLDAgKzEsMTMgQEAKK2ludGVyZmFjZSBSdW5uYWJsZSB7fQorCitjbGFzcyBNeUNsYXNzIHsKKyAgc3RhdGljIGNsYXNzIEZvbyBpbXBsZW1lbnRzIFJ1bm5hYmxlIHt9Cit9CisKK2NsYXNzIEdvbyBpbXBsZW1lbnRzIFJ1bm5hYmxlIHt9CisKK2NsYXNzIFhYWCB7CisgIHsKKyAgICBSdW5uYWJsZSByID0gbmV3IE15Q2xhc3MuPGNhcmV0PgorICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL05ld1ZhcmFyZy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL05ld1ZhcmFyZy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJkNGFkNGQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvTmV3VmFyYXJnLmphdmEKQEAgLTAsMCArMSw5IEBACitpbnRlcmZhY2UgRm9vIHt9CisKK2NsYXNzIEJhciB7CisgICAgdm9pZCBmb28oRm9vLi4uIGYpCisKKyAgICB7CisgICAgICAgIGZvbyhuZXcgPGNhcmV0PikKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvTmV3VmFyYXJnMi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL05ld1ZhcmFyZzIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zY2U1ZTk2Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL05ld1ZhcmFyZzIuamF2YQpAQCAtMCwwICsxLDkgQEAKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworY2xhc3MgQSB7CisgIHB1YmxpYyBzdGF0aWMgPFQ+IExpc3Q8VD4gYXNMaXN0KFQuLi4gYSkgeyB9CisKKyAgTGlzdDxTdHJpbmc+IG0oKSB7CisgICAgcmV0dXJuIGFzTGlzdChuZXcgPGNhcmV0Pik7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvTm9DbGFzc0xpdGVyYWwtb3V0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvTm9DbGFzc0xpdGVyYWwtb3V0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmE5YjYxYQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9Ob0NsYXNzTGl0ZXJhbC1vdXQuamF2YQpAQCAtMCwwICsxLDYgQEAKK2NsYXNzIEMgeworICA8VD4gdm9pZCBoIChDbGFzczw/IGV4dGVuZHMgVD4gY2xhenopIHt9CisgIHsKKyAgICBoKDxjYXJldD4pOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL05vQ2xhc3NMaXRlcmFsLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvTm9DbGFzc0xpdGVyYWwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYTliNjFhCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL05vQ2xhc3NMaXRlcmFsLmphdmEKQEAgLTAsMCArMSw2IEBACitjbGFzcyBDIHsKKyAgPFQ+IHZvaWQgaCAoQ2xhc3M8PyBleHRlbmRzIFQ+IGNsYXp6KSB7fQorICB7CisgICAgaCg8Y2FyZXQ+KTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9Ob0NvbW1hQmVmb3JlVmFyYXJncy1vdXQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9Ob0NvbW1hQmVmb3JlVmFyYXJncy1vdXQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZjdlNTRlCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL05vQ29tbWFCZWZvcmVWYXJhcmdzLW91dC5qYXZhCkBAIC0wLDAgKzEsOCBAQAorY2xhc3MgRm9vb28geworICAgIGludCBiYXIoaW50IGEsIE9iamVjdC4uLiB2YXJhcmdzKSB7fQorCisgICAgaW50IGZvbygpIHsKKyAgICAgICAgYmFyKGhhc2hDb2RlKCk8Y2FyZXQ+KTsKKyAgICB9CisKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9Ob0NvbW1hQmVmb3JlVmFyYXJncy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL05vQ29tbWFCZWZvcmVWYXJhcmdzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmQ1ODgxMzIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvTm9Db21tYUJlZm9yZVZhcmFyZ3MuamF2YQpAQCAtMCwwICsxLDggQEAKK2NsYXNzIEZvb29vIHsKKyAgICBpbnQgYmFyKGludCBhLCBPYmplY3QuLi4gdmFyYXJncykge30KKworICAgIGludCBmb28oKSB7CisgICAgICAgIGJhcihoYTxjYXJldD4pOworICAgIH0KKworfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL05vQ29uc3RydWN0b3JUYWlsV2hlbk5vUGFpckJyYWNrZXQtb3V0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvTm9Db25zdHJ1Y3RvclRhaWxXaGVuTm9QYWlyQnJhY2tldC1vdXQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYWM1ODQyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL05vQ29uc3RydWN0b3JUYWlsV2hlbk5vUGFpckJyYWNrZXQtb3V0LmphdmEKQEAgLTAsMCArMSw1IEBACitjbGFzcyBBIHsKKyAgeworICAgIFN0cmluZyBjID0gbmV3IFN0cmluZyg8Y2FyZXQ+CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvTm9Db25zdHJ1Y3RvclRhaWxXaGVuTm9QYWlyQnJhY2tldC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL05vQ29uc3RydWN0b3JUYWlsV2hlbk5vUGFpckJyYWNrZXQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMDVjMDIxCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL05vQ29uc3RydWN0b3JUYWlsV2hlbk5vUGFpckJyYWNrZXQuamF2YQpAQCAtMCwwICsxLDUgQEAKK2NsYXNzIEEgeworICB7CisgICAgU3RyaW5nIGMgPSBuZXcgU3RyaTxjYXJldD4KKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9Ob0ZpZWxkc0luU3VwZXJDb25zdHJ1Y3RvckNhbGwtb3V0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvTm9GaWVsZHNJblN1cGVyQ29uc3RydWN0b3JDYWxsLW91dC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRkNGUwNGIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvTm9GaWVsZHNJblN1cGVyQ29uc3RydWN0b3JDYWxsLW91dC5qYXZhCkBAIC0wLDAgKzEsMTEgQEAKK2NsYXNzIEEgeworICBBKGludCBhKSB7fQorfQorCitjbGFzcyBCIGV4dGVuZHMgQSB7CisgIGludCBhYWE7CisKKyAgQihpbnQgYWFiKSB7CisgICAgc3VwZXIoYWFiKTs8Y2FyZXQ+CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvTm9GaWVsZHNJblN1cGVyQ29uc3RydWN0b3JDYWxsLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvTm9GaWVsZHNJblN1cGVyQ29uc3RydWN0b3JDYWxsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjU0Y2ZjNAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9Ob0ZpZWxkc0luU3VwZXJDb25zdHJ1Y3RvckNhbGwuamF2YQpAQCAtMCwwICsxLDExIEBACitjbGFzcyBBIHsKKyAgQShpbnQgYSkge30KK30KKworY2xhc3MgQiBleHRlbmRzIEEgeworICBpbnQgYWFhOworCisgIEIoaW50IGFhYikgeworICAgIHN1cGVyKGE8Y2FyZXQ+KTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9Ob0luc3RhbmNlb2ZlZFZhbHVlSW5FbHNlLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvTm9JbnN0YW5jZW9mZWRWYWx1ZUluRWxzZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM1MmJiM2MKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvTm9JbnN0YW5jZW9mZWRWYWx1ZUluRWxzZS5qYXZhCkBAIC0wLDAgKzEsMTMgQEAKK3B1YmxpYyBjbGFzcyBUZXN0Q2FzZSBleHRlbmRzIFp6eiB7CisgIGJvb2xlYW4gZm9vKFN0cmluZyBzKSB7CisgICB9CisKKworICAgIHsKKyAgICAgICAgT2JqZWN0IG9vbzsKKyAgICAgICAgaWYgKG9vbyBpbnN0YW5jZW9mIFN0cmluZykgeworICAgICAgICB9IGVsc2UgeworICAgICAgICAgIGZvbyhvbzxjYXJldD4pCisgICAgICAgIH0KKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL05vSW5zdGFuY2VvZmVkVmFsdWVJbkVsc2VXaXRoQ29tcGxleElmLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvTm9JbnN0YW5jZW9mZWRWYWx1ZUluRWxzZVdpdGhDb21wbGV4SWYuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MzYwMDc0Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL05vSW5zdGFuY2VvZmVkVmFsdWVJbkVsc2VXaXRoQ29tcGxleElmLmphdmEKQEAgLTAsMCArMSwxMyBAQAorcHVibGljIGNsYXNzIFRlc3RDYXNlIGV4dGVuZHMgWnp6IHsKKyAgYm9vbGVhbiBmb28oU3RyaW5nIHMpIHsKKyAgIH0KKworCisgICAgeworICAgICAgICBPYmplY3Qgb29vOworICAgICAgICBpZiAob29vIGluc3RhbmNlb2YgU3RyaW5nICYmIHRydWUpIHsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICBmb28ob288Y2FyZXQ+KQorICAgICAgICB9CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9Ob0luc3RhbmNlb2ZlZFZhbHVlSW5UaGVuTmVnYXRlZC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL05vSW5zdGFuY2VvZmVkVmFsdWVJblRoZW5OZWdhdGVkLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTQ0NjY5MgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9Ob0luc3RhbmNlb2ZlZFZhbHVlSW5UaGVuTmVnYXRlZC5qYXZhCkBAIC0wLDAgKzEsOSBAQAorcHVibGljIGNsYXNzIFRlc3RDYXNlIGV4dGVuZHMgWnp6IHsKKworICAgIHsKKyAgICAgICAgT2JqZWN0IG9vbzsKKyAgICAgICAgaWYgKCEob29vIGluc3RhbmNlb2YgU3RyaW5nKSkgeworICAgICAgICAgIFN0cmluZyBzID0gb288Y2FyZXQ+CisgICAgICAgIH0KKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL05vSW5zdGFuY2VvZmVkVmFsdWVXaGVuQmFzaWNTdWl0cy1vdXQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9Ob0luc3RhbmNlb2ZlZFZhbHVlV2hlbkJhc2ljU3VpdHMtb3V0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDMwYmViOAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9Ob0luc3RhbmNlb2ZlZFZhbHVlV2hlbkJhc2ljU3VpdHMtb3V0LmphdmEKQEAgLTAsMCArMSwxMSBAQAorcHVibGljIGNsYXNzIFRlc3RDYXNlIGV4dGVuZHMgWnp6IHsKKworICAgIE9iamVjdCBvb28oKSB7fQorCisgICAgeworICAgICAgICBpZiAoIShvb28oKSBpbnN0YW5jZW9mIFN0cmluZykpIHsKKyAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgT2JqZWN0IHMgPSBvb28oKTs8Y2FyZXQ+CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9Ob0luc3RhbmNlb2ZlZFZhbHVlV2hlbkJhc2ljU3VpdHMuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9Ob0luc3RhbmNlb2ZlZFZhbHVlV2hlbkJhc2ljU3VpdHMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMTNiYzA1Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL05vSW5zdGFuY2VvZmVkVmFsdWVXaGVuQmFzaWNTdWl0cy5qYXZhCkBAIC0wLDAgKzEsMTEgQEAKK3B1YmxpYyBjbGFzcyBUZXN0Q2FzZSBleHRlbmRzIFp6eiB7CisKKyAgICBPYmplY3Qgb29vKCkge30KKworICAgIHsKKyAgICAgICAgaWYgKCEob29vKCkgaW5zdGFuY2VvZiBTdHJpbmcpKSB7CisgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIE9iamVjdCBzID0gbzxjYXJldD4KKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL05vS2V5Q29uc3RhbnQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9Ob0tleUNvbnN0YW50LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzMwMjJjNQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9Ob0tleUNvbnN0YW50LmphdmEKQEAgLTAsMCArMSwyNSBAQAorY2xhc3MgS2V5PFQ+IHsKKyAgc3RhdGljIDxUPiBLZXk8VD4gY3JlYXRlKCkge30KK30KKworaW50ZXJmYWNlIEludGY8VCxMb2M+IHt9CitjbGFzcyBJbXBsIGltcGxlbWVudHMgSW50ZjxTdHJpbmcsU3RyaW5nPiB7fQorCitpbnRlcmZhY2UgSUJhciB7CisgIEtleTxJbXBsPiBBX0tFWSA9IEtleS5jcmVhdGUoImEiKTsKK30KKworY2xhc3MgQmFyIGltcGxlbWVudHMgSUJhciB7CisKKyAgeworICAgIElCYXIgaXRlbTsKKyAgICBuZXcgRm9vKCkuaW5jVXNlQ291bnQoPGNhcmV0Pml0ZW0pOworICB9Cit9CisKK2NsYXNzIEZvbyB7CisKKyAgcHVibGljIDxULCBMb2M+IHZvaWQgaW5jVXNlQ291bnQoZmluYWwgS2V5PD8gZXh0ZW5kcyBJbnRmPFQsIExvYz4+IGtleSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmluYWwgVCBlbGVtZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaW5hbCBMb2MgbG9jYXRpb24pIHt9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvTm9OZXdFbnVtLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvTm9OZXdFbnVtLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2EwNGRhMAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9Ob05ld0VudW0uamF2YQpAQCAtMCwwICsxLDE3IEBACitpbnRlcmZhY2UgRm9vIHsKK30KKworZW51bSBGb29FbnVtIGltcGxlbWVudHMgRm9vIHsKKyAgICBPTkUsIFRXTzsKK30KKworY2xhc3MgRG9vIHsKKyAgICB2b2lkIGRvU29tZXRoaW5nKEZvbyBmKSB7CisgICAgfQorCisgICAgdm9pZCBkb1NvbWV0aGluZ0Vsc2UoKSB7CisgICAgICAgIGRvU29tZXRoaW5nKG5ldyA8Y2FyZXQ+KTsKKyAgICB9CisKK30KKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL05vTnVsbEFmdGVyRG90LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvTm9OdWxsQWZ0ZXJEb3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZWI3OGVmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL05vTnVsbEFmdGVyRG90LmphdmEKQEAgLTAsMCArMSw2IEBACitwdWJsaWMgY2xhc3MgRm9vIHsKKyAgICAKKyAgICB7CisgICAgICBTdHJpbmcgcyA9IFN0cmluZ1V0aWwubjxjYXJldD4KKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvTm9TZWNvbmRNZXRob2RUeXBlQXJndW1lbnRzLW91dC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL05vU2Vjb25kTWV0aG9kVHlwZUFyZ3VtZW50cy1vdXQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZmQ5MzZlCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL05vU2Vjb25kTWV0aG9kVHlwZUFyZ3VtZW50cy1vdXQuamF2YQpAQCAtMCwwICsxLDkgQEAKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbnM7CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK2NsYXNzIEEgeworICAgIHZvaWQgZm9vKExpc3Q8U3RyaW5nPiB4KXt9CisgICAgeworICAgICAgICBmb28oQ29sbGVjdGlvbnMuPFN0cmluZz5lbXB0eUxpc3QoKSk7PGNhcmV0PgorICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvTm9TZWNvbmRNZXRob2RUeXBlQXJndW1lbnRzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvTm9TZWNvbmRNZXRob2RUeXBlQXJndW1lbnRzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDgxZWEwZAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9Ob1NlY29uZE1ldGhvZFR5cGVBcmd1bWVudHMuamF2YQpAQCAtMCwwICsxLDkgQEAKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbnM7CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK2NsYXNzIEEgeworICAgIHZvaWQgZm9vKExpc3Q8U3RyaW5nPiB4KXt9CisgICAgeworICAgICAgICBmb28oQ29sbGVjdGlvbnMuPFN0cmluZz5lbXB0eUw8Y2FyZXQ+aXN0KCkpOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvTm9UYWlsV2hlbk5vUGFpckJyYWNrZXQtb3V0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvTm9UYWlsV2hlbk5vUGFpckJyYWNrZXQtb3V0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmQ3MmIxMgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9Ob1RhaWxXaGVuTm9QYWlyQnJhY2tldC1vdXQuamF2YQpAQCAtMCwwICsxLDYgQEAKK2NsYXNzIEEgeworICB7CisgICAgU3RyaW5nIHg7CisgICAgQ2xhc3MgYyA9IHguZ2V0Q2xhc3MoPGNhcmV0PgorICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL05vVGFpbFdoZW5Ob1BhaXJCcmFja2V0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvTm9UYWlsV2hlbk5vUGFpckJyYWNrZXQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOTBmYmFlCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL05vVGFpbFdoZW5Ob1BhaXJCcmFja2V0LmphdmEKQEAgLTAsMCArMSw2IEBACitjbGFzcyBBIHsKKyAgeworICAgIFN0cmluZyB4OworICAgIENsYXNzIGMgPSB4LmdldENsPGNhcmV0PgorICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL05vVGFpbFdoZW5Ob1BhaXJCcmFja2V0Mi1vdXQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9Ob1RhaWxXaGVuTm9QYWlyQnJhY2tldDItb3V0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWRiZWFhNgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9Ob1RhaWxXaGVuTm9QYWlyQnJhY2tldDItb3V0LmphdmEKQEAgLTAsMCArMSw3IEBACitjbGFzcyBBIHsKKyAgeworICAgIENsYXNzIGMgPSB0aGlzLnh4eHh4KDxjYXJldD4KKyAgfQorCisgIENsYXNzIHh4eHh4KCkge30KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvTm9UYWlsV2hlbk5vUGFpckJyYWNrZXQyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvTm9UYWlsV2hlbk5vUGFpckJyYWNrZXQyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzFkMWQ2NQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9Ob1RhaWxXaGVuTm9QYWlyQnJhY2tldDIuamF2YQpAQCAtMCwwICsxLDcgQEAKK2NsYXNzIEEgeworICB7CisgICAgQ2xhc3MgYyA9IHRoaXMueHg8Y2FyZXQ+CisgIH0KKworICBDbGFzcyB4eHh4eCgpIHt9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL05vVHlwZVBhcmFtZXRlcnNGb3JUb0FycmF5LW91dC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL05vVHlwZVBhcmFtZXRlcnNGb3JUb0FycmF5LW91dC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJiNjg3ZDMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvTm9UeXBlUGFyYW1ldGVyc0ZvclRvQXJyYXktb3V0LmphdmEKQEAgLTAsMCArMSw4IEBACitjbGFzcyBGb28geworICB2b2lkIGJhcihPYmplY3RbXSBvKSB7fQorCisgIE9iamVjdFtdIGZvbygpIHsKKyAgICBqYXZhLnV0aWwuU2V0PFN0cmluZz4gc2V0OworICAgIGJhcihzZXQudG9BcnJheSg8Y2FyZXQ+KSk7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvTm9UeXBlUGFyYW1ldGVyc0ZvclRvQXJyYXkuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9Ob1R5cGVQYXJhbWV0ZXJzRm9yVG9BcnJheS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjljNDdiNzEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvTm9UeXBlUGFyYW1ldGVyc0ZvclRvQXJyYXkuamF2YQpAQCAtMCwwICsxLDggQEAKK2NsYXNzIEZvbyB7CisgIHZvaWQgYmFyKE9iamVjdFtdIG8pIHt9CisKKyAgT2JqZWN0W10gZm9vKCkgeworICAgIGphdmEudXRpbC5TZXQ8U3RyaW5nPiBzZXQ7CisgICAgYmFyKHNldC50bzxjYXJldD4pCisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvTm9VbmluaXRpYWxpemVkRmllbGRzSW5Db25zdHJ1Y3Rvci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL05vVW5pbml0aWFsaXplZEZpZWxkc0luQ29uc3RydWN0b3IuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZDQ1MTg5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL05vVW5pbml0aWFsaXplZEZpZWxkc0luQ29uc3RydWN0b3IuamF2YQpAQCAtMCwwICsxLDggQEAKK2NsYXNzIEEgeworICBpbnQgYWFhOworICBpbnQgYWFiOworICBBKGludCBhYWMpIHsKKyAgICBhYWEgPSBhPGNhcmV0PgorICB9Cit9CisKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9Ob1dyb25nU3Vic3RpdHV0b3JGcm9tU3RhdHMtb3V0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvTm9Xcm9uZ1N1YnN0aXR1dG9yRnJvbVN0YXRzLW91dC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRmNjg5MDEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvTm9Xcm9uZ1N1YnN0aXR1dG9yRnJvbVN0YXRzLW91dC5qYXZhCkBAIC0wLDAgKzEsMTYgQEAKK2ltcG9ydCBqYXZhLnV0aWwuQ29tcGFyYXRvcjsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbnM7CisKK3B1YmxpYyBjbGFzcyBGb28geworICAgIHByaXZhdGUgTGlzdDxTdHJpbmc+IG15TGlzdDsKKworICAgIHByaXZhdGUgdm9pZCBzb3J0KCkgeworICAgICAgICBDb2xsZWN0aW9ucy5zb3J0KG15TGlzdCwgbmV3IENvbXBhcmF0b3I8U3RyaW5nPigpIHsKKyAgICAgICAgICAgIEBPdmVycmlkZQorICAgICAgICAgICAgcHVibGljIGludCBjb21wYXJlKFN0cmluZyBvMSwgU3RyaW5nIG8yKSB7CisgICAgICAgICAgICAgICAgPHNlbGVjdGlvbj5yZXR1cm4gMDsgIC8vVG8gY2hhbmdlIGJvZHkgb2YgaW1wbGVtZW50ZWQgbWV0aG9kcyB1c2UgRmlsZSB8IFNldHRpbmdzIHwgRmlsZSBUZW1wbGF0ZXMuPC9zZWxlY3Rpb24+CisgICAgICAgICAgICB9CisgICAgICAgIH0pOworICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9Ob1dyb25nU3Vic3RpdHV0b3JGcm9tU3RhdHMuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9Ob1dyb25nU3Vic3RpdHV0b3JGcm9tU3RhdHMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZTRjN2E4Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL05vV3JvbmdTdWJzdGl0dXRvckZyb21TdGF0cy5qYXZhCkBAIC0wLDAgKzEsMTAgQEAKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbnM7CisKK3B1YmxpYyBjbGFzcyBGb28geworICAgIHByaXZhdGUgTGlzdDxTdHJpbmc+IG15TGlzdDsKKworICAgIHByaXZhdGUgdm9pZCBzb3J0KCkgeworICAgICAgICBDb2xsZWN0aW9ucy5zb3J0KG15TGlzdCwgbmV3IENvbXBhcmF0b3I8Y2FyZXQ+KTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvTm9uRXhpc3RlbnRHZW5lcmljQWZ0ZXJOZXctb3V0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvTm9uRXhpc3RlbnRHZW5lcmljQWZ0ZXJOZXctb3V0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjk1ZmY1OAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9Ob25FeGlzdGVudEdlbmVyaWNBZnRlck5ldy1vdXQuamF2YQpAQCAtMCwwICsxLDcgQEAKK2ltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKKworY2xhc3MgVGVzdCB7CisgICAgdm9pZCB0ZXN0KCkgeworICAgICAgamF2YS51dGlsLk1hcDxTdHJpbmcsIENsYXNzVGhhdERvZXNOb3RFeGlzdFlldD4gbWFwID0gbmV3IEhhc2hNYXA8U3RyaW5nLCBDbGFzc1RoYXREb2VzTm90RXhpc3RZZXQ+KDxjYXJldD4pOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvTm9uRXhpc3RlbnRHZW5lcmljQWZ0ZXJOZXcuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9Ob25FeGlzdGVudEdlbmVyaWNBZnRlck5ldy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdmMThhMzUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvTm9uRXhpc3RlbnRHZW5lcmljQWZ0ZXJOZXcuamF2YQpAQCAtMCwwICsxLDUgQEAKK2NsYXNzIFRlc3QgeworICAgIHZvaWQgdGVzdCgpIHsKKyAgICAgIGphdmEudXRpbC5NYXA8U3RyaW5nLCBDbGFzc1RoYXREb2VzTm90RXhpc3RZZXQ+IG1hcCA9IG5ldyBIYXNoTTxjYXJldD4KKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL05vblN0YXRpY0ZpZWxkLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvTm9uU3RhdGljRmllbGQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZmE0YWYwCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL05vblN0YXRpY0ZpZWxkLmphdmEKQEAgLTAsMCArMSwxNSBAQAorcHVibGljIGNsYXNzIFNtYXJ0Q29tcGxldGlvblRlc3QgeworICBpbnRlcmZhY2UgU21hcnRDb21wbGV0aW9uVHlwZSB7fQorICAKKyAgcHJpdmF0ZSBTbWFydENvbXBsZXRpb25UeXBlIG15Tm9uU3RhdGljRmllbGQ7CisgIAorICBwcml2YXRlIHN0YXRpYyB2b2lkIHN0YXRpY01ldGhvZChTbWFydENvbXBsZXRpb25UeXBlIHR5cGUpIHt9CisgIAorICBwcml2YXRlIHN0YXRpYyBjbGFzcyBTdGF0aWNJbm5lckNsYXNzIGV4dGVuZHMgU21hcnRDb21wbGV0aW9uVGVzdCB7CisgICAgCisgICAgcHJpdmF0ZSB2b2lkIG1ldGhvZCgpIHsKKyAgICAgIHN0YXRpY01ldGhvZChteU5vbjxjYXJldD4pOworICAgIH0KKyAgICAKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9Ob25TdGF0aWNJbm5lckNsYXNzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvTm9uU3RhdGljSW5uZXJDbGFzcy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg3Y2Q5ZWIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvTm9uU3RhdGljSW5uZXJDbGFzcy5qYXZhCkBAIC0wLDAgKzEsMTIgQEAKK3B1YmxpYyBjbGFzcyBPdXRlciB7CisgICAgcHVibGljIGNsYXNzIElubmVyIHsKKyAgICAgICAgcHVibGljIElubmVyKCkgeworICAgICAgICB9CisgICAgfQorfQorCitjbGFzcyBPdXRlck1haW4geworICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKyAgICAgICAgT3V0ZXIuSW5uZXIgaW5uZXIgPSBuZXcgPGNhcmV0PgorICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvT25lRWxlbWVudEFycmF5LW91dC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL09uZUVsZW1lbnRBcnJheS1vdXQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNjJlYTUwCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL09uZUVsZW1lbnRBcnJheS1vdXQuamF2YQpAQCAtMCwwICsxLDggQEAKK3B1YmxpYyBjbGFzcyBTb21lQ2xhc3MgeworCisgICAgeworICAgICAgICBpbnRbXSBhYWEgPSBuZXcgaW50WzFdOworICAgICAgICBpbnQgYmJiID0gYWFhWzBdOzxjYXJldD4KKyAgICB9CisKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9PbmVFbGVtZW50QXJyYXkuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9PbmVFbGVtZW50QXJyYXkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MzExNjJjCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL09uZUVsZW1lbnRBcnJheS5qYXZhCkBAIC0wLDAgKzEsOCBAQAorcHVibGljIGNsYXNzIFNvbWVDbGFzcyB7CisKKyAgICB7CisgICAgICAgIGludFtdIGFhYSA9IG5ldyBpbnRbMV07CisgICAgICAgIGludCBiYmIgPSBhPGNhcmV0PgorICAgIH0KKworfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL092ZXJsb2FkZWRNZXRob2RzLW91dC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL092ZXJsb2FkZWRNZXRob2RzLW91dC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjljOTFjZjYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvT3ZlcmxvYWRlZE1ldGhvZHMtb3V0LmphdmEKQEAgLTAsMCArMSwxMyBAQAoraW50ZXJmYWNlIENvbXBhcmFibGU8VCBleHRlbmRzIENvbXBhcmFibGU8VD4+IHt9CitjbGFzcyBMaXN0PFQ+IHt9CitjbGFzcyBDb2xsZWN0aW9ucyB7CisgIHN0YXRpYyA8VCBleHRlbmRzIENvbXBhcmFibGU8PyBzdXBlciBUPj4gdm9pZCBzb3J0KExpc3Q8VD4gbGlzdCkge30KKyAgc3RhdGljIDxUPiB2b2lkIHNvcnQoTGlzdDxUPiBsaXN0LCBDb21wYXJhdG9yPD8gc3VwZXIgVD4gYykge30KK30KKworY2xhc3MgRm9vIGltcGxlbWVudHMgQ29tcGFyYWJsZTxGb28+IHsKKyAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncyl7CisgICAgTGlzdDxGb28+IGxpc3Q7CisgICAgQ29sbGVjdGlvbnMuc29ydChsaXN0PGNhcmV0PikKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9PdmVybG9hZGVkTWV0aG9kcy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL092ZXJsb2FkZWRNZXRob2RzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGFkMjg5YQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9PdmVybG9hZGVkTWV0aG9kcy5qYXZhCkBAIC0wLDAgKzEsMTMgQEAKK2ludGVyZmFjZSBDb21wYXJhYmxlPFQgZXh0ZW5kcyBDb21wYXJhYmxlPFQ+PiB7fQorY2xhc3MgTGlzdDxUPiB7fQorY2xhc3MgQ29sbGVjdGlvbnMgeworICBzdGF0aWMgPFQgZXh0ZW5kcyBDb21wYXJhYmxlPD8gc3VwZXIgVD4+IHZvaWQgc29ydChMaXN0PFQ+IGxpc3QpIHt9CisgIHN0YXRpYyA8VD4gdm9pZCBzb3J0KExpc3Q8VD4gbGlzdCwgQ29tcGFyYXRvcjw/IHN1cGVyIFQ+IGMpIHt9Cit9CisKK2NsYXNzIEZvbyBpbXBsZW1lbnRzIENvbXBhcmFibGU8Rm9vPiB7CisgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpeworICAgIExpc3Q8Rm9vPiBsaXN0OworICAgIENvbGxlY3Rpb25zLnNvcnQobDxjYXJldD4pCisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvUGFyYW1ldGVyaXplZENvbnN0cnVjdG9yLW91dC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL1BhcmFtZXRlcml6ZWRDb25zdHJ1Y3Rvci1vdXQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MzQ0OTBjCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL1BhcmFtZXRlcml6ZWRDb25zdHJ1Y3Rvci1vdXQuamF2YQpAQCAtMCwwICsxLDE0IEBACitjbGFzcyBDb2xsZWN0aW9uPFQ+IHt9CisKK2NsYXNzIENvbW1lbnRDb21wbGV0aW9uPFQ+IHsKKworICAgIHN0YXRpYyB7CisgICAgICAgIENvbGxlY3Rpb248SW50ZWdlcj4gYzsKKyAgICAgICAgbmV3IENvbW1lbnRDb21wbGV0aW9uPEludGVnZXI+KGMpOworICAgIH0KKworICAgIDxFIGV4dGVuZHMgVD4gQ29tbWVudENvbXBsZXRpb24oQ29sbGVjdGlvbjxFPiBjb2xsZWN0aW9uKSB7CisKKyAgICB9CisKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvUGFyYW1ldGVyaXplZENvbnN0cnVjdG9yLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvUGFyYW1ldGVyaXplZENvbnN0cnVjdG9yLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjMwYjAyNQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9QYXJhbWV0ZXJpemVkQ29uc3RydWN0b3IuamF2YQpAQCAtMCwwICsxLDE0IEBACitjbGFzcyBDb2xsZWN0aW9uPFQ+IHt9CisKK2NsYXNzIENvbW1lbnRDb21wbGV0aW9uPFQ+IHsKKworICAgIHN0YXRpYyB7CisgICAgICAgIENvbGxlY3Rpb248SW50ZWdlcj4gYzsKKyAgICAgICAgbmV3IENvbW1lbnRDb21wbGV0aW9uPEludGVnZXI+KDxjYXJldD4pOworICAgIH0KKworICAgIDxFIGV4dGVuZHMgVD4gQ29tbWVudENvbXBsZXRpb24oQ29sbGVjdGlvbjxFPiBjb2xsZWN0aW9uKSB7CisKKyAgICB9CisKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvUG9seWFkaWNFeHByZXNzaW9uLW91dC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL1BvbHlhZGljRXhwcmVzc2lvbi1vdXQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOWQ3MjcyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL1BvbHlhZGljRXhwcmVzc2lvbi1vdXQuamF2YQpAQCAtMCwwICsxLDUgQEAKK2NsYXNzIEEgeworICBpbnQgbSgpIHsKKyAgICByZXR1cm4gMCArIDEgKyBoYXNoQ29kZSgpPGNhcmV0PjsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9Qb2x5YWRpY0V4cHJlc3Npb24uamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9Qb2x5YWRpY0V4cHJlc3Npb24uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NTZhZjk4Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL1BvbHlhZGljRXhwcmVzc2lvbi5qYXZhCkBAIC0wLDAgKzEsNSBAQAorY2xhc3MgQSB7CisgIGludCBtKCkgeworICAgIHJldHVybiAwICsgMSArIGhhPGNhcmV0PjsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9QcmltaXRpdmVBcnJheUNsYXNzSW5NZXRob2Qtb3V0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvUHJpbWl0aXZlQXJyYXlDbGFzc0luTWV0aG9kLW91dC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY5M2NlYmQ1Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL1ByaW1pdGl2ZUFycmF5Q2xhc3NJbk1ldGhvZC1vdXQuamF2YQpAQCAtMCwwICsxLDUgQEAKK2NsYXNzIEJhciB7CisgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKyAgICAgIENsYXNzPD8+IGNscyA9IGJ5dGVbXS5jbGFzczs8Y2FyZXQ+CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvUHJpbWl0aXZlQXJyYXlDbGFzc0luTWV0aG9kLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvUHJpbWl0aXZlQXJyYXlDbGFzc0luTWV0aG9kLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWVmY2I3MwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9QcmltaXRpdmVBcnJheUNsYXNzSW5NZXRob2QuamF2YQpAQCAtMCwwICsxLDUgQEAKK2NsYXNzIEJhciB7CisgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKyAgICAgIENsYXNzPD8+IGNscyA9IGJ5dGVbXS48Y2FyZXQ+CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvUHJpbWl0aXZlQ2xhc3NJbkFubm8tb3V0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvUHJpbWl0aXZlQ2xhc3NJbkFubm8tb3V0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjNiNDNjZQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9QcmltaXRpdmVDbGFzc0luQW5uby1vdXQuamF2YQpAQCAtMCwwICsxLDEwIEBACitjbGFzcyBCYXIgeworICBAaW50ZXJmYWNlIEIgeworICAgICAgQ2xhc3M8Pz4gdmFsdWUoKTsKKyAgfQorCisgIEBCKGJ5dGVbXS5jbGFzczxjYXJldD4pCisgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKyAgfQorCit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL1ByaW1pdGl2ZUNsYXNzSW5Bbm5vLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvUHJpbWl0aXZlQ2xhc3NJbkFubm8uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYjU3OTFmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL1ByaW1pdGl2ZUNsYXNzSW5Bbm5vLmphdmEKQEAgLTAsMCArMSwxMCBAQAorY2xhc3MgQmFyIHsKKyAgQGludGVyZmFjZSBCIHsKKyAgICAgIENsYXNzPD8+IHZhbHVlKCk7CisgIH0KKworICBAQihieXRlW10uPGNhcmV0PikKKyAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworICB9CisKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvUHJpdmF0ZU92ZXJsb2Fkcy1vdXQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9Qcml2YXRlT3ZlcmxvYWRzLW91dC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJkMWMxYTMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvUHJpdmF0ZU92ZXJsb2Fkcy1vdXQuamF2YQpAQCAtMCwwICsxLDEyIEBACitjbGFzcyBBIHsKKyAgcHJpdmF0ZSBzdGF0aWMgdm9pZCBtKGludCBhKSB7IH0KKyAgcHVibGljIHN0YXRpYyB2b2lkIG0oU3RyaW5nIHMpIHsgfQorfQorCitjbGFzcyBCIHsKKyAgdm9pZCBtKCkgeworICAgIGludCB4eHggPSAwOworICAgIFN0cmluZyB4eHkgPSAiIjsKKyAgICBBLm0oeHh5KTs8Y2FyZXQ+CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvUHJpdmF0ZU92ZXJsb2Fkcy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL1ByaXZhdGVPdmVybG9hZHMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YTVjMzE2Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL1ByaXZhdGVPdmVybG9hZHMuamF2YQpAQCAtMCwwICsxLDEyIEBACitjbGFzcyBBIHsKKyAgcHJpdmF0ZSBzdGF0aWMgdm9pZCBtKGludCBhKSB7IH0KKyAgcHVibGljIHN0YXRpYyB2b2lkIG0oU3RyaW5nIHMpIHsgfQorfQorCitjbGFzcyBCIHsKKyAgdm9pZCBtKCkgeworICAgIGludCB4eHggPSAwOworICAgIFN0cmluZyB4eHkgPSAiIjsKKyAgICBBLm0oeHg8Y2FyZXQ+KTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9Qcm90ZWN0ZWRBbm9ueW1vdXNDb25zdHJ1Y3Rvci1vdXQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9Qcm90ZWN0ZWRBbm9ueW1vdXNDb25zdHJ1Y3Rvci1vdXQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNTAzYjQ5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL1Byb3RlY3RlZEFub255bW91c0NvbnN0cnVjdG9yLW91dC5qYXZhCkBAIC0wLDAgKzEsOSBAQAoraW1wb3J0IHBrZy5Gb287CisKK2NsYXNzIEJhciB7CisKKyAgcHVibGljIHZvaWQgZm9vKCkgeworICAgIG5ldyBGb28oaGFzaENvZGUoKSk8Y2FyZXQ+IHt9CisgIH0KKworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9Qcm90ZWN0ZWRBbm9ueW1vdXNDb25zdHJ1Y3Rvci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL1Byb3RlY3RlZEFub255bW91c0NvbnN0cnVjdG9yLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDFjYjM5YQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9Qcm90ZWN0ZWRBbm9ueW1vdXNDb25zdHJ1Y3Rvci5qYXZhCkBAIC0wLDAgKzEsOSBAQAoraW1wb3J0IHBrZy5Gb287CisKK2NsYXNzIEJhciB7CisKKyAgcHVibGljIHZvaWQgZm9vKCkgeworICAgIG5ldyBGb28oaGFzaDxjYXJldD4pIHt9CisgIH0KKworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9Qcm90ZWN0ZWRBbm9ueW1vdXNDb25zdHJ1Y3RvcjItb3V0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvUHJvdGVjdGVkQW5vbnltb3VzQ29uc3RydWN0b3IyLW91dC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI3ZjNkZWEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvUHJvdGVjdGVkQW5vbnltb3VzQ29uc3RydWN0b3IyLW91dC5qYXZhCkBAIC0wLDAgKzEsMTEgQEAKK2ltcG9ydCBwa2cuQmFyOworCitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKKworY2xhc3MgR29vIHsKKworICBwdWJsaWMgdm9pZCBmb28oKSB7CisgICAgbmV3IEJhcjxTdHJpbmc+KG5ldyBBcnJheUxpc3Q8U3RyaW5nPig8Y2FyZXQ+KSkge30KKyAgfQorCit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL1Byb3RlY3RlZEFub255bW91c0NvbnN0cnVjdG9yMi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL1Byb3RlY3RlZEFub255bW91c0NvbnN0cnVjdG9yMi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMwZWU5YzBmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL1Byb3RlY3RlZEFub255bW91c0NvbnN0cnVjdG9yMi5qYXZhCkBAIC0wLDAgKzEsOSBAQAoraW1wb3J0IHBrZy5CYXI7CisKK2NsYXNzIEdvbyB7CisKKyAgcHVibGljIHZvaWQgZm9vKCkgeworICAgIG5ldyBCYXI8U3RyaW5nPihuZXcgQXJyTDxjYXJldD4pIHt9CisgIH0KKworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9RdWFsaWZpZWRBZnRlck5ldy1vdXQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9RdWFsaWZpZWRBZnRlck5ldy1vdXQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZDIyZDVhCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL1F1YWxpZmllZEFmdGVyTmV3LW91dC5qYXZhCkBAIC0wLDAgKzEsNSBAQAorY2xhc3MgQSB7eworICAgIGZvby5Gb288U3RyaW5nPiBmID0gbmV3IGJhci5CYXIoKTs8Y2FyZXQ+Cit9fQorCitjbGFzcyBCYXIge30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvUXVhbGlmaWVkQWZ0ZXJOZXcuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9RdWFsaWZpZWRBZnRlck5ldy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAwZDZhZjUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvUXVhbGlmaWVkQWZ0ZXJOZXcuamF2YQpAQCAtMCwwICsxLDUgQEAKK2NsYXNzIEEge3sKKyAgICBmb28uRm9vPFN0cmluZz4gZiA9IG5ldyBCPGNhcmV0PgorfX0KKworY2xhc3MgQmFyIHt9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL1F1YWxpZmllZFRoaXMtb3V0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvUXVhbGlmaWVkVGhpcy1vdXQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNGRkN2VmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL1F1YWxpZmllZFRoaXMtb3V0LmphdmEKQEAgLTAsMCArMSwxMyBAQAorY2xhc3MgQSB7CisgIHB1YmxpYyB2b2lkIGYoQSBhKXt9CisKKyAgcHVibGljIHZvaWQgZygpeworICAgIEIgYiA9IG5ldyBCKCl7CisgICAgICB2b2lkIGgoKXsKKyAgICAgICAgZihBLnRoaXMpOzxjYXJldD4KKyAgICAgIH0KKyAgICB9OworICB9CisKKyAgcHJpdmF0ZSBjbGFzcyBCe30KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9RdWFsaWZpZWRUaGlzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvUXVhbGlmaWVkVGhpcy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcyZWZmZmEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvUXVhbGlmaWVkVGhpcy5qYXZhCkBAIC0wLDAgKzEsMTMgQEAKK2NsYXNzIEEgeworICBwdWJsaWMgdm9pZCBmKEEgYSl7fQorCisgIHB1YmxpYyB2b2lkIGcoKXsKKyAgICBCIGIgPSBuZXcgQigpeworICAgICAgdm9pZCBoKCl7CisgICAgICAgIGYoQS48Y2FyZXQ+KQorICAgICAgfQorICAgIH07CisgIH0KKworICBwcml2YXRlIGNsYXNzIEJ7fQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL1F1YWxpZmllZFRoaXNJbkFub255bW91c0NvbnN0cnVjdG9yLW91dC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL1F1YWxpZmllZFRoaXNJbkFub255bW91c0NvbnN0cnVjdG9yLW91dC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNhMTFjMDcKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvUXVhbGlmaWVkVGhpc0luQW5vbnltb3VzQ29uc3RydWN0b3Itb3V0LmphdmEKQEAgLTAsMCArMSwxMSBAQAorcHVibGljIGNsYXNzIEZvbyB7CisKKyAgICB7CisgICAgICAgIG5ldyBCYXIodGhpcyk8Y2FyZXQ+IHt9CisgICAgfQorCit9CisKK2NsYXNzIEJhciB7CisgICAgQmFyKEZvbyBmKSB7fQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL1F1YWxpZmllZFRoaXNJbkFub255bW91c0NvbnN0cnVjdG9yLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvUXVhbGlmaWVkVGhpc0luQW5vbnltb3VzQ29uc3RydWN0b3IuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNjZjZDBhCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL1F1YWxpZmllZFRoaXNJbkFub255bW91c0NvbnN0cnVjdG9yLmphdmEKQEAgLTAsMCArMSwxMSBAQAorcHVibGljIGNsYXNzIEZvbyB7CisKKyAgICB7CisgICAgICAgIG5ldyBCYXIoPGNhcmV0Pikge30KKyAgICB9CisKK30KKworY2xhc3MgQmFyIHsKKyAgICBCYXIoRm9vIGYpIHt9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvUmVwbGFjZVdob2xlUmVmZXJlbmNlQ2hhaW4tb3V0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvUmVwbGFjZVdob2xlUmVmZXJlbmNlQ2hhaW4tb3V0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDQzYTU4NwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9SZXBsYWNlV2hvbGVSZWZlcmVuY2VDaGFpbi1vdXQuamF2YQpAQCAtMCwwICsxLDExIEBACitwdWJsaWMgY2xhc3MgVGVzdENhc2UgeworICBPYmplY3QgZmllbGQ7CisKKyAgaW50IGZvbygpIHsKKyAgIH0KKworCisgICAgeworICAgICAgICBpbnQgYSA9IGZvbygpPGNhcmV0PiArIDI7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9SZXBsYWNlV2hvbGVSZWZlcmVuY2VDaGFpbi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL1JlcGxhY2VXaG9sZVJlZmVyZW5jZUNoYWluLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2NlZWE2YgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9SZXBsYWNlV2hvbGVSZWZlcmVuY2VDaGFpbi5qYXZhCkBAIC0wLDAgKzEsMTEgQEAKK3B1YmxpYyBjbGFzcyBUZXN0Q2FzZSB7CisgIE9iamVjdCBmaWVsZDsKKworICBpbnQgZm9vKCkgeworICAgfQorCisKKyAgICB7CisgICAgICAgIGludCBhID0gZm88Y2FyZXQ+dGhpcy5maWVsZC5jbG9uZSgpLmhhc2hDb2RlKCkgKyAyOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvU2FtZUZpZWxkSW5Bbm90aGVyT2JqZWN0LW91dC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL1NhbWVGaWVsZEluQW5vdGhlck9iamVjdC1vdXQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NGMzNGQ0Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL1NhbWVGaWVsZEluQW5vdGhlck9iamVjdC1vdXQuamF2YQpAQCAtMCwwICsxLDggQEAKK2NsYXNzIEZvbyB7CisgIGludCBhYmNkZTsKKworICB7CisgICAgRm9vIGE7CisgICAgYS5hYmNkZSA9IGFiY2RlOzxjYXJldD4KKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL1NhbWVGaWVsZEluQW5vdGhlck9iamVjdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL1NhbWVGaWVsZEluQW5vdGhlck9iamVjdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI1MGQ4NzcKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvU2FtZUZpZWxkSW5Bbm90aGVyT2JqZWN0LmphdmEKQEAgLTAsMCArMSw4IEBACitjbGFzcyBGb28geworICBpbnQgYWJjZGU7CisKKyAgeworICAgIEZvbyBhOworICAgIGEuYWJjZGUgPSBhYjxjYXJldD4KKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL1NhbWVNZXRob2RBcmd1bWVudHNJbklmLW91dC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL1NhbWVNZXRob2RBcmd1bWVudHNJbklmLW91dC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNmODhhN2EKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvU2FtZU1ldGhvZEFyZ3VtZW50c0luSWYtb3V0LmphdmEKQEAgLTAsMCArMSw5IEBACitwdWJsaWMgY2xhc3MgRm9vIHsKKyAgcHVibGljIHZvaWQgaGFuZGxlSW5zZXJ0KEluc2VydGlvbkNvbnRleHQgY29udGV4dCwgTG9va3VwRWxlbWVudCBpdGVtKSB7CisgICAgaWYgKGhhc1BhcmFtcyhjb250ZXh0LCBpdGVtKTxjYXJldD4pCisgIH0KKworICBwcml2YXRlIHN0YXRpYyBib29sZWFuIGhhc1BhcmFtcyhJbnNlcnRpb25Db250ZXh0IGNvbnRleHQsIExvb2t1cEVsZW1lbnQgaXRlbSkgeworICAgIHJldHVybiBmYWxzZTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL1NhbWVNZXRob2RBcmd1bWVudHNJbklmLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvU2FtZU1ldGhvZEFyZ3VtZW50c0luSWYuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZjgxMzY1Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL1NhbWVNZXRob2RBcmd1bWVudHNJbklmLmphdmEKQEAgLTAsMCArMSw5IEBACitwdWJsaWMgY2xhc3MgRm9vIHsKKyAgcHVibGljIHZvaWQgaGFuZGxlSW5zZXJ0KEluc2VydGlvbkNvbnRleHQgY29udGV4dCwgTG9va3VwRWxlbWVudCBpdGVtKSB7CisgICAgaWYgKGhhc1BhcmFtcyg8Y2FyZXQ+KSkKKyAgfQorCisgIHByaXZhdGUgc3RhdGljIGJvb2xlYW4gaGFzUGFyYW1zKEluc2VydGlvbkNvbnRleHQgY29udGV4dCwgTG9va3VwRWxlbWVudCBpdGVtKSB7CisgICAgcmV0dXJuIGZhbHNlOworICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvU2FtZU5hbWVkQXJndW1lbnRzLW91dC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL1NhbWVOYW1lZEFyZ3VtZW50cy1vdXQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZDljOGQwCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL1NhbWVOYW1lZEFyZ3VtZW50cy1vdXQuamF2YQpAQCAtMCwwICsxLDkgQEAKK3B1YmxpYyBjbGFzcyBTb21lQ2xhc3MgeworICBCb3JkZXIgY3JlYXRlQm9yZGVyKENvbG9yIGNvbG9yLCBpbnQgdG9wLCBib29sZWFuIGlzT3BhcXVlLCBpbnQgYm90dG9tLCBpbnQgcmlnaHQsIGludCBsZWZ0KSB7CisgICAgbmV3IEluc2V0cyh0b3AsIGxlZnQsIGJvdHRvbSwgcmlnaHQpPGNhcmV0PgorICB9Cit9CisKK2NsYXNzIEluc2V0cyB7CisgIEluc2V0cyhpbnQgdG9wLCBpbnQgbGVmdCwgaW50IGJvdHRvbSwgaW50IHJpZ2h0KSB7fQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9TYW1lTmFtZWRBcmd1bWVudHMuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9TYW1lTmFtZWRBcmd1bWVudHMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOWE2YmNlCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL1NhbWVOYW1lZEFyZ3VtZW50cy5qYXZhCkBAIC0wLDAgKzEsOSBAQAorcHVibGljIGNsYXNzIFNvbWVDbGFzcyB7CisgIEJvcmRlciBjcmVhdGVCb3JkZXIoQ29sb3IgY29sb3IsIGludCB0b3AsIGJvb2xlYW4gaXNPcGFxdWUsIGludCBib3R0b20sIGludCByaWdodCwgaW50IGxlZnQpIHsKKyAgICBuZXcgSW5zZXRzKDxjYXJldD4pCisgIH0KK30KKworY2xhc3MgSW5zZXRzIHsKKyAgSW5zZXRzKGludCB0b3AsIGludCBsZWZ0LCBpbnQgYm90dG9tLCBpbnQgcmlnaHQpIHt9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL1NhbWVOYW1lZEFyZ3VtZW50c0RlbGVnYXRpb24tb3V0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvU2FtZU5hbWVkQXJndW1lbnRzRGVsZWdhdGlvbi1vdXQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZmY5M2U3YwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9TYW1lTmFtZWRBcmd1bWVudHNEZWxlZ2F0aW9uLW91dC5qYXZhCkBAIC0wLDAgKzEsMTMgQEAKK2ltcG9ydCBqYXZhLmlvLkZpbGU7CisKK3B1YmxpYyBpbnRlcmZhY2UgWm9vIHsKKyAgdm9pZCBmb28oU3RyaW5nIHMsIEZpbGUgZmlsZSk7Cit9CisKK2NsYXNzIFpvb0ltcGwgaW1wbGVtZW50cyBab28geworICBwcml2YXRlIFpvbyBkZWxlZ2F0ZTsKKyAgQE92ZXJyaWRlCisgIHB1YmxpYyB2b2lkIGZvbyhTdHJpbmcgcywgRmlsZSBmaWxlKSB7CisgICAgZGVsZWdhdGUuZm9vKHMsIGZpbGUpOzxjYXJldD4KKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL1NhbWVOYW1lZEFyZ3VtZW50c0RlbGVnYXRpb24uamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9TYW1lTmFtZWRBcmd1bWVudHNEZWxlZ2F0aW9uLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTE1ZTc2MAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9TYW1lTmFtZWRBcmd1bWVudHNEZWxlZ2F0aW9uLmphdmEKQEAgLTAsMCArMSwxMyBAQAoraW1wb3J0IGphdmEuaW8uRmlsZTsKKworcHVibGljIGludGVyZmFjZSBab28geworICB2b2lkIGZvbyhTdHJpbmcgcywgRmlsZSBmaWxlKTsKK30KKworY2xhc3MgWm9vSW1wbCBpbXBsZW1lbnRzIFpvbyB7CisgIHByaXZhdGUgWm9vIGRlbGVnYXRlOworICBAT3ZlcnJpZGUKKyAgcHVibGljIHZvaWQgZm9vKFN0cmluZyBzLCBGaWxlIGZpbGUpIHsKKyAgICBkZWxlZ2F0ZS5mb28oPGNhcmV0Pik7CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9TYW1lTmFtZWRGaWVsZEFuZExvY2FsLW91dC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL1NhbWVOYW1lZEZpZWxkQW5kTG9jYWwtb3V0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTY1MDg3OAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9TYW1lTmFtZWRGaWVsZEFuZExvY2FsLW91dC5qYXZhCkBAIC0wLDAgKzEsOCBAQAorcHVibGljIGNsYXNzIFRlc3QgeworICAgIGludCBmZmE7CisKKyAgICB7CisgICAgICAgIGludCBmZmEgPSAyOworICAgICAgICBpbnQgYiA9IGZmYTs8Y2FyZXQ+CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9TYW1lTmFtZWRGaWVsZEFuZExvY2FsLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvU2FtZU5hbWVkRmllbGRBbmRMb2NhbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQxOGNmNmUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvU2FtZU5hbWVkRmllbGRBbmRMb2NhbC5qYXZhCkBAIC0wLDAgKzEsOCBAQAorcHVibGljIGNsYXNzIFRlc3QgeworICAgIGludCBmZmE7CisKKyAgICB7CisgICAgICAgIGludCBmZmEgPSAyOworICAgICAgICBpbnQgYiA9IGZmPGNhcmV0PgorICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvU2FtZVR5cGVBcmctb3V0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvU2FtZVR5cGVBcmctb3V0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjI2NDZlYgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9TYW1lVHlwZUFyZy1vdXQuamF2YQpAQCAtMCwwICsxLDUgQEAKK2NsYXNzIEJhcjxUPiB7CisgICAgeworICAgICAgICBCYXI8VD4gZiA9IG5ldyBCYXI8VD4oKTs8Y2FyZXQ+CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9TYW1lVHlwZUFyZy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL1NhbWVUeXBlQXJnLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmRiMWM0NQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9TYW1lVHlwZUFyZy5qYXZhCkBAIC0wLDAgKzEsNSBAQAorY2xhc3MgQmFyPFQ+IHsKKyAgICB7CisgICAgICAgIEJhcjxUPiBmID0gbmV3IDxjYXJldD4KKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL1NlbWljb2xvbkluQ29kZUJsb2NCb2R5SW5Mb2NhbFZhcmlhYmxlLW91dC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL1NlbWljb2xvbkluQ29kZUJsb2NCb2R5SW5Mb2NhbFZhcmlhYmxlLW91dC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ0NmQ1OGYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvU2VtaWNvbG9uSW5Db2RlQmxvY0JvZHlJbkxvY2FsVmFyaWFibGUtb3V0LmphdmEKQEAgLTAsMCArMSw1IEBACitjbGFzcyBUZXN0IHsKKyAgcHVibGljIHZvaWQgZm9vKCkgeworICAgIFJ1bm5hYmxlIHIgPSAoKSAtPiB7bm90aWZ5KCk7fTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL1NlbWljb2xvbkluQ29kZUJsb2NCb2R5SW5Mb2NhbFZhcmlhYmxlLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvU2VtaWNvbG9uSW5Db2RlQmxvY0JvZHlJbkxvY2FsVmFyaWFibGUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYTZmMjA5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL1NlbWljb2xvbkluQ29kZUJsb2NCb2R5SW5Mb2NhbFZhcmlhYmxlLmphdmEKQEAgLTAsMCArMSw1IEBACitjbGFzcyBUZXN0IHsKKyAgcHVibGljIHZvaWQgZm9vKCkgeworICAgIFJ1bm5hYmxlIHIgPSAoKSAtPiB7PGNhcmV0Pn07CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9TZW1pY29sb25JbkV4cHJlc3Npb25Cb2R5SW5FeHByZXNzaW9uTGlzdC1vdXQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9TZW1pY29sb25JbkV4cHJlc3Npb25Cb2R5SW5FeHByZXNzaW9uTGlzdC1vdXQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YjE3YWY5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL1NlbWljb2xvbkluRXhwcmVzc2lvbkJvZHlJbkV4cHJlc3Npb25MaXN0LW91dC5qYXZhCkBAIC0wLDAgKzEsNSBAQAorY2xhc3MgVGVzdCB7CisgIHB1YmxpYyB2b2lkIGZvbygpIHsKKyAgICBuZXcgVGhyZWFkKCgpIC0+IG5vdGlmeSgpKTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL1NlbWljb2xvbkluRXhwcmVzc2lvbkJvZHlJbkV4cHJlc3Npb25MaXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvU2VtaWNvbG9uSW5FeHByZXNzaW9uQm9keUluRXhwcmVzc2lvbkxpc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YjQwM2MwCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL1NlbWljb2xvbkluRXhwcmVzc2lvbkJvZHlJbkV4cHJlc3Npb25MaXN0LmphdmEKQEAgLTAsMCArMSw1IEBACitjbGFzcyBUZXN0IHsKKyAgcHVibGljIHZvaWQgZm9vKCkgeworICAgIG5ldyBUaHJlYWQoKCkgLT4gPGNhcmV0Pik7CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9TZW1pY29sb25JbkV4cHJlc3Npb25Cb2R5SW5Mb2NhbFZhcmlhYmxlLW91dC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL1NlbWljb2xvbkluRXhwcmVzc2lvbkJvZHlJbkxvY2FsVmFyaWFibGUtb3V0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjY5NTBjMAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9TZW1pY29sb25JbkV4cHJlc3Npb25Cb2R5SW5Mb2NhbFZhcmlhYmxlLW91dC5qYXZhCkBAIC0wLDAgKzEsNSBAQAorY2xhc3MgVGVzdCB7CisgIHB1YmxpYyB2b2lkIGZvbygpIHsKKyAgICBSdW5uYWJsZSByID0gKCkgLT4gbm90aWZ5KCk7CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9TZW1pY29sb25JbkV4cHJlc3Npb25Cb2R5SW5Mb2NhbFZhcmlhYmxlLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvU2VtaWNvbG9uSW5FeHByZXNzaW9uQm9keUluTG9jYWxWYXJpYWJsZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU0MWMyYTEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvU2VtaWNvbG9uSW5FeHByZXNzaW9uQm9keUluTG9jYWxWYXJpYWJsZS5qYXZhCkBAIC0wLDAgKzEsNSBAQAorY2xhc3MgVGVzdCB7CisgIHB1YmxpYyB2b2lkIGZvbygpIHsKKyAgICBSdW5uYWJsZSByID0gKCkgLT4gPGNhcmV0PgorICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvU2V2ZXJhbFR5cGVBcmd1bWVudHMtb3V0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvU2V2ZXJhbFR5cGVBcmd1bWVudHMtb3V0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDJjNzcxMwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9TZXZlcmFsVHlwZUFyZ3VtZW50cy1vdXQuamF2YQpAQCAtMCwwICsxLDUgQEAKK2ltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKKworcHVibGljIGNsYXNzIEEgeworICBwcml2YXRlIEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+IG0gPSBuZXcgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4oPGNhcmV0Pik7Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvU2V2ZXJhbFR5cGVBcmd1bWVudHMuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9TZXZlcmFsVHlwZUFyZ3VtZW50cy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMxZWM1MDAKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvU2V2ZXJhbFR5cGVBcmd1bWVudHMuamF2YQpAQCAtMCwwICsxLDUgQEAKK2ltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKKworcHVibGljIGNsYXNzIEEgeworICBwcml2YXRlIEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+IG0gPSBuZXcgSGFzaE1hcDw8Y2FyZXQ+PigpOworfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL1NldmVyYWxUeXBlQXJndW1lbnRzU29tZVVua25vd24tb3V0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvU2V2ZXJhbFR5cGVBcmd1bWVudHNTb21lVW5rbm93bi1vdXQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYTE0OGVmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL1NldmVyYWxUeXBlQXJndW1lbnRzU29tZVVua25vd24tb3V0LmphdmEKQEAgLTAsMCArMSwzIEBACitjbGFzcyBBQUFBQTxLLFYsRz57CisgIEFBQUFBPEssViw/PiBhc2QgPSBuZXcgQUFBQUE8SywgPGNhcmV0PgorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL1NldmVyYWxUeXBlQXJndW1lbnRzU29tZVVua25vd24uamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9TZXZlcmFsVHlwZUFyZ3VtZW50c1NvbWVVbmtub3duLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTE1YjM5ZAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9TZXZlcmFsVHlwZUFyZ3VtZW50c1NvbWVVbmtub3duLmphdmEKQEAgLTAsMCArMSwzIEBACitjbGFzcyBBQUFBQTxLLFYsRz57CisgIEFBQUFBPEssViw/PiBhc2QgPSBuZXcgQUFBQUE8PGNhcmV0PgorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL1NpYmxpbmdPZkFTdGF0aWNhbGx5SW1wb3J0ZWRGaWVsZC1vdXQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9TaWJsaW5nT2ZBU3RhdGljYWxseUltcG9ydGVkRmllbGQtb3V0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODRiMzM2ZAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9TaWJsaW5nT2ZBU3RhdGljYWxseUltcG9ydGVkRmllbGQtb3V0LmphdmEKQEAgLTAsMCArMSwxNSBAQAoraW1wb3J0IHN0YXRpYyBCYXIuQkFSOworaW1wb3J0IHN0YXRpYyBCYXIuRk9POworCitjbGFzcyBCYXIgeworICBzdGF0aWMgU3RyaW5nIEZPTzsKKyAgc3RhdGljIFN0cmluZyBCQVI7Cit9CisKK2NsYXNzIEZvbyB7CisKKyAgT2JqZWN0W10gZm9vKCkgeworICAgIFN0cmluZyBhID0gRk9POworICAgIFN0cmluZyBiID0gQkFSOzxjYXJldD4KKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9TaWJsaW5nT2ZBU3RhdGljYWxseUltcG9ydGVkRmllbGQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9TaWJsaW5nT2ZBU3RhdGljYWxseUltcG9ydGVkRmllbGQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NzA0MWJlCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL1NpYmxpbmdPZkFTdGF0aWNhbGx5SW1wb3J0ZWRGaWVsZC5qYXZhCkBAIC0wLDAgKzEsMTQgQEAKK2ltcG9ydCBzdGF0aWMgQmFyLkZPTzsKKworY2xhc3MgQmFyIHsKKyAgc3RhdGljIFN0cmluZyBGT087CisgIHN0YXRpYyBTdHJpbmcgQkFSOworfQorCitjbGFzcyBGb28geworCisgIE9iamVjdFtdIGZvbygpIHsKKyAgICBTdHJpbmcgYSA9IEZPTzsKKyAgICBTdHJpbmcgYiA9IEJBPGNhcmV0PgorICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL1NpbGx5MS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL1NpbGx5MS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI1YzUzZGQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvU2lsbHkxLmphdmEKQEAgLTAsMCArMSw3IEBACitjbGFzcyBBeworIHsKKyAgaW50IGlpaWlpID0gMDsKKworICBpaWlpaSA9IGlpaTxjYXJldD4KKyB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL1NpbGx5QXNzaWdubWVudEluVGVybmFyeS1vdXQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9TaWxseUFzc2lnbm1lbnRJblRlcm5hcnktb3V0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmJiNDBmMwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9TaWxseUFzc2lnbm1lbnRJblRlcm5hcnktb3V0LmphdmEKQEAgLTAsMCArMSw3IEBACitjbGFzcyBGb28geworICBGb29bXSBteUZvb3M7CisKKyAgRm9vKEZvb1tdIGZvb3MpIHsKKyAgICBteUZvb3MgPSB0cnVlID8gZm9vcyA6IDxjYXJldD4KKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL1NpbGx5QXNzaWdubWVudEluVGVybmFyeS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL1NpbGx5QXNzaWdubWVudEluVGVybmFyeS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg0YTA4NDAKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvU2lsbHlBc3NpZ25tZW50SW5UZXJuYXJ5LmphdmEKQEAgLTAsMCArMSw3IEBACitjbGFzcyBGb28geworICBGb29bXSBteUZvb3M7CisKKyAgRm9vKEZvb1tdIGZvb3MpIHsKKyAgICBteUZvb3MgPSB0cnVlID8gPGNhcmV0PgorICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvU21hcnRGaW5pc2gtb3V0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvU21hcnRGaW5pc2gtb3V0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTk1Mjk3ZQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9TbWFydEZpbmlzaC1vdXQuamF2YQpAQCAtMCwwICsxLDEwIEBACitwdWJsaWMgY2xhc3MgRm9vIHsKKworICAgIHsKKyAgICAgICAgRm9vIGZvbyA9IG51bGw7CisgICAgICAgIEZvbyBiYXIgPSBpZChmb28pOzxjYXJldD4KKyAgICB9CisKKyAgICBGb28gaWQoRm9vIGZvbykge3JldHVybiBmb287fQorCit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvU21hcnRGaW5pc2guamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9TbWFydEZpbmlzaC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2YmM5NTMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvU21hcnRGaW5pc2guamF2YQpAQCAtMCwwICsxLDEwIEBACitwdWJsaWMgY2xhc3MgRm9vIHsKKworICAgIHsKKyAgICAgICAgRm9vIGZvbyA9IG51bGw7CisgICAgICAgIEZvbyBiYXIgPSBpZDxjYXJldD5mb287CisgICAgfQorCisgICAgRm9vIGlkKEZvbyBmb28pIHtyZXR1cm4gZm9vO30KKworfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL1NwYWNlQWZ0ZXJDb21tYUluTWV0aG9kQ2FsbC1vdXQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9TcGFjZUFmdGVyQ29tbWFJbk1ldGhvZENhbGwtb3V0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGQzMmU3YgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9TcGFjZUFmdGVyQ29tbWFJbk1ldGhvZENhbGwtb3V0LmphdmEKQEAgLTAsMCArMSw5IEBACitwdWJsaWMgc3RhdGljIGNsYXNzIEcgeworICBwdWJsaWMgc3RhdGljIHZvaWQgZm9vKFN0cmluZyBzMSwgU3RyaW5nIHMyKSB7CisgIH0KKworICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisgICAgU3RyaW5nIHNzczEgPSAidGV4dCI7CisgICAgZm9vKHNzczEsPGNhcmV0Pik7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvU3BhY2VBZnRlckNvbW1hSW5NZXRob2RDYWxsLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvU3BhY2VBZnRlckNvbW1hSW5NZXRob2RDYWxsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzZlMDVmZgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9TcGFjZUFmdGVyQ29tbWFJbk1ldGhvZENhbGwuamF2YQpAQCAtMCwwICsxLDkgQEAKK3B1YmxpYyBzdGF0aWMgY2xhc3MgRyB7CisgIHB1YmxpYyBzdGF0aWMgdm9pZCBmb28oU3RyaW5nIHMxLCBTdHJpbmcgczIpIHsKKyAgfQorCisgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKyAgICBTdHJpbmcgc3NzMSA9ICJ0ZXh0IjsKKyAgICBmb28oc3M8Y2FyZXQ+KTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9TdGF0aWNTdWJjbGFzcy1vdXQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9TdGF0aWNTdWJjbGFzcy1vdXQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNmE1YjNkCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL1N0YXRpY1N1YmNsYXNzLW91dC5qYXZhCkBAIC0wLDAgKzEsMTMgQEAKK2NsYXNzIEJhckJhc2UgeworICAgIHsKKyAgICAgICAgRm9vQmFzZSBmID0gRm9vQmFzZS5FTVBUWTs8Y2FyZXQ+CisgICAgfQorfQorCitjbGFzcyBGb29CYXNlIHsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIEZvb0Jhc2UgRU1QVFk7CisKKyAgICBwdWJsaWMgc3RhdGljIGNsYXNzIEZvb0Jhc2VJbXBsIGV4dGVuZHMgRm9vQmFzZSB7fQorCisKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvU3RhdGljU3ViY2xhc3MuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9TdGF0aWNTdWJjbGFzcy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJiNGU4YWQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvU3RhdGljU3ViY2xhc3MuamF2YQpAQCAtMCwwICsxLDEzIEBACitjbGFzcyBCYXJCYXNlIHsKKyAgICB7CisgICAgICAgIEZvb0Jhc2UgZiA9IDxjYXJldD4KKyAgICB9Cit9CisKK2NsYXNzIEZvb0Jhc2UgeworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgRm9vQmFzZSBFTVBUWTsKKworICAgIHB1YmxpYyBzdGF0aWMgY2xhc3MgRm9vQmFzZUltcGwgZXh0ZW5kcyBGb29CYXNlIHt9CisKKworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9TdGF0aWNhbGx5SW1wb3J0ZWRGaWVsZC1vdXQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9TdGF0aWNhbGx5SW1wb3J0ZWRGaWVsZC1vdXQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ODNkZmQ0Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL1N0YXRpY2FsbHlJbXBvcnRlZEZpZWxkLW91dC5qYXZhCkBAIC0wLDAgKzEsMTMgQEAKK2ltcG9ydCBzdGF0aWMgQmFyLkZPTworCitjbGFzcyBCYXIgeworICBzdGF0aWMgU3RyaW5nIEZPTzsKKyAgc3RhdGljIFN0cmluZyBCQVI7Cit9CisKK2NsYXNzIEZvbyB7CisKKyAgT2JqZWN0W10gZm9vKCkgeworICAgIFN0cmluZyBiID0gRk9POzxjYXJldD4KKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9TdGF0aWNhbGx5SW1wb3J0ZWRGaWVsZC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL1N0YXRpY2FsbHlJbXBvcnRlZEZpZWxkLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzAxZTFlMAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9TdGF0aWNhbGx5SW1wb3J0ZWRGaWVsZC5qYXZhCkBAIC0wLDAgKzEsMTMgQEAKK2ltcG9ydCBzdGF0aWMgQmFyLkZPTworCitjbGFzcyBCYXIgeworICBzdGF0aWMgU3RyaW5nIEZPTzsKKyAgc3RhdGljIFN0cmluZyBCQVI7Cit9CisKK2NsYXNzIEZvbyB7CisKKyAgT2JqZWN0W10gZm9vKCkgeworICAgIFN0cmluZyBiID0gRk88Y2FyZXQ+CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvU3RhdGljYWxseUltcG9ydGVkTWFnaWNNZXRob2Qtb3V0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvU3RhdGljYWxseUltcG9ydGVkTWFnaWNNZXRob2Qtb3V0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzMyMTNkNAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9TdGF0aWNhbGx5SW1wb3J0ZWRNYWdpY01ldGhvZC1vdXQuamF2YQpAQCAtMCwwICsxLDE1IEBACitpbXBvcnQgc3RhdGljIEZvby5mb287CisKK2NsYXNzIEZvbyB7CisgIHB1YmxpYyBzdGF0aWMgPFQ+IFQgZm9vICgpCisKK30KKworY2xhc3MgQmFyIHsKKyAgdm9pZCBmKFN0cmluZyBzKSB7CisgIH0KKworICB7CisgICAgZihGb28uPFN0cmluZz5mb28oKSk7PGNhcmV0PgorICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL1N0YXRpY2FsbHlJbXBvcnRlZE1hZ2ljTWV0aG9kLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvU3RhdGljYWxseUltcG9ydGVkTWFnaWNNZXRob2QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNGU2NjgzCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL1N0YXRpY2FsbHlJbXBvcnRlZE1hZ2ljTWV0aG9kLmphdmEKQEAgLTAsMCArMSwxNSBAQAoraW1wb3J0IHN0YXRpYyBGb28uZm9vOworCitjbGFzcyBGb28geworICBwdWJsaWMgc3RhdGljIDxUPiBUIGZvbyAoKQorCit9CisKK2NsYXNzIEJhciB7CisgIHZvaWQgZihTdHJpbmcgcykgeworICB9CisKKyAgeworICAgIGYoZm9vPGNhcmV0PngpCisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvU3RyaW5nQ29uc3RhbnRJbkFubm8tb3V0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvU3RyaW5nQ29uc3RhbnRJbkFubm8tb3V0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGM4MjE2OAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9TdHJpbmdDb25zdGFudEluQW5uby1vdXQuamF2YQpAQCAtMCwwICsxLDkgQEAKK0BpbnRlcmZhY2UgQW5ubyB7CisgICAgU3RyaW5nIHZhbHVlKCk7Cit9CisKK0BBbm5vKEEuQUFBPGNhcmV0PikKK2NsYXNzIEEgeworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEFBQSA9ICJhYWEiOworfQorCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvU3RyaW5nQ29uc3RhbnRJbkFubm8uamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9TdHJpbmdDb25zdGFudEluQW5uby5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZhOTY0MzkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvU3RyaW5nQ29uc3RhbnRJbkFubm8uamF2YQpAQCAtMCwwICsxLDkgQEAKK0BpbnRlcmZhY2UgQW5ubyB7CisgICAgU3RyaW5nIHZhbHVlKCk7Cit9CisKK0BBbm5vKEEuPGNhcmV0PikKK2NsYXNzIEEgeworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEFBQSA9ICJhYWEiOworfQorCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvU3VnZ2VzdEFueXRoaW5nV2hlbldpbGRjYXJkRXhwZWN0ZWQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9TdWdnZXN0QW55dGhpbmdXaGVuV2lsZGNhcmRFeHBlY3RlZC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdmN2U0ODcKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvU3VnZ2VzdEFueXRoaW5nV2hlbldpbGRjYXJkRXhwZWN0ZWQuamF2YQpAQCAtMCwwICsxLDcgQEAKK2NsYXNzIFg8VD4ge30KK2NsYXNzIFkgZXh0ZW5kcyBYPFN0cmluZz57fQorY2xhc3MgWjxUPiBleHRlbmRzIFg8VD57fQorCitjbGFzcyBNYWluIHsKKyAgICBYPD8+IGEgPSBuZXcgPGNhcmV0PgorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9TdWdnZXN0Q2FzdGVkVmFsdWVBZnRlckNhc3Qtb3V0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvU3VnZ2VzdENhc3RlZFZhbHVlQWZ0ZXJDYXN0LW91dC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFhNGNmMzQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvU3VnZ2VzdENhc3RlZFZhbHVlQWZ0ZXJDYXN0LW91dC5qYXZhCkBAIC0wLDAgKzEsMTAgQEAKK3B1YmxpYyBjbGFzcyBUZXN0Q2FzZSBleHRlbmRzIFp6eiB7CisKKyAgICBPYmplY3Qgb29vKCkge30KKworICAgIHsKKyAgICAgICAgKChTdHJpbmcpIG9vbygpKS50b1N0cmluZygpOworCisgICAgICAgIFN0cmluZyBzID0gKFN0cmluZykgb29vKCk7PGNhcmV0PgorICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvU3VnZ2VzdENhc3RlZFZhbHVlQWZ0ZXJDYXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvU3VnZ2VzdENhc3RlZFZhbHVlQWZ0ZXJDYXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGM0ZmYwZgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9TdWdnZXN0Q2FzdGVkVmFsdWVBZnRlckNhc3QuamF2YQpAQCAtMCwwICsxLDEwIEBACitwdWJsaWMgY2xhc3MgVGVzdENhc2UgZXh0ZW5kcyBaenogeworCisgICAgT2JqZWN0IG9vbygpIHt9CisKKyAgICB7CisgICAgICAgICgoU3RyaW5nKSBvb28oKSkudG9TdHJpbmcoKTsKKworICAgICAgICBTdHJpbmcgcyA9IG88Y2FyZXQ+CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9TdWdnZXN0SW5zdGFuY2VvZmVkVmFsdWUtb3V0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvU3VnZ2VzdEluc3RhbmNlb2ZlZFZhbHVlLW91dC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBkMTIzOTkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvU3VnZ2VzdEluc3RhbmNlb2ZlZFZhbHVlLW91dC5qYXZhCkBAIC0wLDAgKzEsMTAgQEAKK3B1YmxpYyBjbGFzcyBUZXN0Q2FzZSBleHRlbmRzIFp6eiB7CisgIHB1YmxpYyBUZXN0Q2FzZSB0dHQoWnp6IG9vbykgeworICAgIGlmIChvb28gaW5zdGFuY2VvZiBUZXN0Q2FzZSkgeworICAgICAgcmV0dXJuIChUZXN0Q2FzZSkgb29vOzxjYXJldD4KKyAgICB9CisgIH0KK30KKworY2xhc3MgWnp6IHsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvU3VnZ2VzdEluc3RhbmNlb2ZlZFZhbHVlLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvU3VnZ2VzdEluc3RhbmNlb2ZlZFZhbHVlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzczNjA3OQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9TdWdnZXN0SW5zdGFuY2VvZmVkVmFsdWUuamF2YQpAQCAtMCwwICsxLDEwIEBACitwdWJsaWMgY2xhc3MgVGVzdENhc2UgZXh0ZW5kcyBaenogeworICBwdWJsaWMgVGVzdENhc2UgdHR0KFp6eiBvb28pIHsKKyAgICBpZiAob29vIGluc3RhbmNlb2YgVGVzdENhc2UpIHsKKyAgICAgIHJldHVybiBvPGNhcmV0PgorICAgIH0KKyAgfQorfQorCitjbGFzcyBaenogeworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9TdWdnZXN0SW5zdGFuY2VvZmVkVmFsdWVBZnRlclJldHVybi1vdXQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9TdWdnZXN0SW5zdGFuY2VvZmVkVmFsdWVBZnRlclJldHVybi1vdXQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YTQzZWNmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL1N1Z2dlc3RJbnN0YW5jZW9mZWRWYWx1ZUFmdGVyUmV0dXJuLW91dC5qYXZhCkBAIC0wLDAgKzEsMTEgQEAKK3B1YmxpYyBjbGFzcyBUZXN0Q2FzZSBleHRlbmRzIFp6eiB7CisKKyAgICBPYmplY3Qgb29vKCkge30KKworICAgIHsKKyAgICAgICAgaWYgKCEob29vKCkgaW5zdGFuY2VvZiBTdHJpbmcpKSB7CisgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIFN0cmluZyBzID0gKFN0cmluZykgb29vKCk7PGNhcmV0PgorICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvU3VnZ2VzdEluc3RhbmNlb2ZlZFZhbHVlQWZ0ZXJSZXR1cm4uamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9TdWdnZXN0SW5zdGFuY2VvZmVkVmFsdWVBZnRlclJldHVybi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdlZDI3OWYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvU3VnZ2VzdEluc3RhbmNlb2ZlZFZhbHVlQWZ0ZXJSZXR1cm4uamF2YQpAQCAtMCwwICsxLDExIEBACitwdWJsaWMgY2xhc3MgVGVzdENhc2UgZXh0ZW5kcyBaenogeworCisgICAgT2JqZWN0IG9vbygpIHt9CisKKyAgICB7CisgICAgICAgIGlmICghKG9vbygpIGluc3RhbmNlb2YgU3RyaW5nKSkgeworICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBTdHJpbmcgcyA9IG88Y2FyZXQ+CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9TdWdnZXN0SW5zdGFuY2VvZmVkVmFsdWVJbkNvbXBsZXhJZi1vdXQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9TdWdnZXN0SW5zdGFuY2VvZmVkVmFsdWVJbkNvbXBsZXhJZi1vdXQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMGFjYzJlCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL1N1Z2dlc3RJbnN0YW5jZW9mZWRWYWx1ZUluQ29tcGxleElmLW91dC5qYXZhCkBAIC0wLDAgKzEsMTEgQEAKK3B1YmxpYyBjbGFzcyBUZXN0Q2FzZSBleHRlbmRzIFp6eiB7CisgIGJvb2xlYW4gZm9vKFN0cmluZyBzKSB7CisgICB9CisKKworICAgIHsKKyAgICAgICAgT2JqZWN0IG9vbzsKKyAgICAgICAgaWYgKG9vbyBpbnN0YW5jZW9mIFN0cmluZyAmJiBmb28oKFN0cmluZykgb29vKTxjYXJldD4pIHsKKyAgICAgICAgfQorICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvU3VnZ2VzdEluc3RhbmNlb2ZlZFZhbHVlSW5Db21wbGV4SWYuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9TdWdnZXN0SW5zdGFuY2VvZmVkVmFsdWVJbkNvbXBsZXhJZi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFiYjNiYzQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvU3VnZ2VzdEluc3RhbmNlb2ZlZFZhbHVlSW5Db21wbGV4SWYuamF2YQpAQCAtMCwwICsxLDExIEBACitwdWJsaWMgY2xhc3MgVGVzdENhc2UgZXh0ZW5kcyBaenogeworICBib29sZWFuIGZvbyhTdHJpbmcgcykgeworICAgfQorCisKKyAgICB7CisgICAgICAgIE9iamVjdCBvb287CisgICAgICAgIGlmIChvb28gaW5zdGFuY2VvZiBTdHJpbmcgJiYgZm9vKG88Y2FyZXQ+KSkgeworICAgICAgICB9CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9TdWdnZXN0SW5zdGFuY2VvZmVkVmFsdWVJbkVsc2VOZWdhdGVkLW91dC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL1N1Z2dlc3RJbnN0YW5jZW9mZWRWYWx1ZUluRWxzZU5lZ2F0ZWQtb3V0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjk2Njc2MQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9TdWdnZXN0SW5zdGFuY2VvZmVkVmFsdWVJbkVsc2VOZWdhdGVkLW91dC5qYXZhCkBAIC0wLDAgKzEsMTEgQEAKK3B1YmxpYyBjbGFzcyBUZXN0Q2FzZSBleHRlbmRzIFp6eiB7CisKKyAgICBPYmplY3Qgb29vKCkge30KKworICAgIHsKKyAgICAgICAgaWYgKCEob29vKCkgaW5zdGFuY2VvZiBTdHJpbmcpKSB7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgU3RyaW5nIHMgPSAoU3RyaW5nKSBvb28oKTs8Y2FyZXQ+CisgICAgICAgIH0KKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL1N1Z2dlc3RJbnN0YW5jZW9mZWRWYWx1ZUluRWxzZU5lZ2F0ZWQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9TdWdnZXN0SW5zdGFuY2VvZmVkVmFsdWVJbkVsc2VOZWdhdGVkLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjdmNGQ1NgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9TdWdnZXN0SW5zdGFuY2VvZmVkVmFsdWVJbkVsc2VOZWdhdGVkLmphdmEKQEAgLTAsMCArMSwxMSBAQAorcHVibGljIGNsYXNzIFRlc3RDYXNlIGV4dGVuZHMgWnp6IHsKKworICAgIE9iamVjdCBvb28oKSB7fQorCisgICAgeworICAgICAgICBpZiAoIShvb28oKSBpbnN0YW5jZW9mIFN0cmluZykpIHsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICBTdHJpbmcgcyA9IG88Y2FyZXQ+CisgICAgICAgIH0KKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL1N1Z2dlc3RJbnN0YW5jZW9mZWRWYWx1ZUluVGVybmFyeS1vdXQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9TdWdnZXN0SW5zdGFuY2VvZmVkVmFsdWVJblRlcm5hcnktb3V0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzg2NWVjOQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9TdWdnZXN0SW5zdGFuY2VvZmVkVmFsdWVJblRlcm5hcnktb3V0LmphdmEKQEAgLTAsMCArMSw5IEBACitwdWJsaWMgY2xhc3MgVGVzdENhc2UgZXh0ZW5kcyBaenogeworICBwdWJsaWMgVGVzdENhc2UgdHR0KFp6eiBvb28pIHsKKyAgICByZXR1cm4gb29vLmcoKSBpbnN0YW5jZW9mIFRlc3RDYXNlID8gKFRlc3RDYXNlKSBvb28uZygpIDogPGNhcmV0PgorICB9Cit9CisKK2NsYXNzIFp6eiB7CisgIE9iamVjdCBnKCk7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL1N1Z2dlc3RJbnN0YW5jZW9mZWRWYWx1ZUluVGVybmFyeS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL1N1Z2dlc3RJbnN0YW5jZW9mZWRWYWx1ZUluVGVybmFyeS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM1OWNjYTQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvU3VnZ2VzdEluc3RhbmNlb2ZlZFZhbHVlSW5UZXJuYXJ5LmphdmEKQEAgLTAsMCArMSw5IEBACitwdWJsaWMgY2xhc3MgVGVzdENhc2UgZXh0ZW5kcyBaenogeworICBwdWJsaWMgVGVzdENhc2UgdHR0KFp6eiBvb28pIHsKKyAgICByZXR1cm4gb29vLmcoKSBpbnN0YW5jZW9mIFRlc3RDYXNlID8gbzxjYXJldD4KKyAgfQorfQorCitjbGFzcyBaenogeworICBPYmplY3QgZygpOworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9TdWdnZXN0TmFtZXMuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9TdWdnZXN0TmFtZXMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYjUzZmNhCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL1N1Z2dlc3ROYW1lcy5qYXZhCkBAIC0wLDAgKzEsNiBAQAoraW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CisKK2NsYXNzIEZvbyB7CisgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKEFycmF5TGlzdCA8Y2FyZXQ+KXsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9TdWdnZXN0TnVsbC1vdXQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9TdWdnZXN0TnVsbC1vdXQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOWM4MjEwCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL1N1Z2dlc3ROdWxsLW91dC5qYXZhCkBAIC0wLDAgKzEsNiBAQAorcHVibGljIGNsYXNzIEZvbyB7CisgICAgCisgICAgeworICAgICAgU3RyaW5nIHMgPSBudWxsOzxjYXJldD4KKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvU3VnZ2VzdE51bGwuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9TdWdnZXN0TnVsbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMyNGE3ZTAKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvU3VnZ2VzdE51bGwuamF2YQpAQCAtMCwwICsxLDYgQEAKK3B1YmxpYyBjbGFzcyBGb28geworICAgIAorICAgIHsKKyAgICAgIFN0cmluZyBzID0gbnU8Y2FyZXQ+CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL1N1cGVyQ29uc3RydWN0b3JBcmd1bWVudHMtb3V0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvU3VwZXJDb25zdHJ1Y3RvckFyZ3VtZW50cy1vdXQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYWZmMjE0Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL1N1cGVyQ29uc3RydWN0b3JBcmd1bWVudHMtb3V0LmphdmEKQEAgLTAsMCArMSwxNiBAQAorcHVibGljIGNsYXNzIFNvbWVDbGFzcyB7CisgICAgcHVibGljIFNvbWVDbGFzcygpIHsKKyAgICB9CisgICAgcHVibGljIFNvbWVDbGFzcyhpbnQgaSwgaW50IGopIHsKKyAgICB9CisgICAgcHVibGljIFNvbWVDbGFzcyhpbnQgaiwgaW50IGksIGludCBrKSB7CisgICAgfQorCit9CisKK2NsYXNzIFNvbWVDbGFzc0ltcGwgZXh0ZW5kcyBTb21lQ2xhc3MgeworICAgIFNvbWVDbGFzc0ltcGwoaW50IGksIGludCBqKSB7CisgICAgICAgIHN1cGVyKGksIGopOzxjYXJldD4KKyAgICB9CisKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9TdXBlckNvbnN0cnVjdG9yQXJndW1lbnRzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvU3VwZXJDb25zdHJ1Y3RvckFyZ3VtZW50cy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI4ZGNlNDAKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvU3VwZXJDb25zdHJ1Y3RvckFyZ3VtZW50cy5qYXZhCkBAIC0wLDAgKzEsMTYgQEAKK3B1YmxpYyBjbGFzcyBTb21lQ2xhc3MgeworICAgIHB1YmxpYyBTb21lQ2xhc3MoKSB7CisgICAgfQorICAgIHB1YmxpYyBTb21lQ2xhc3MoaW50IGksIGludCBqKSB7CisgICAgfQorICAgIHB1YmxpYyBTb21lQ2xhc3MoaW50IGosIGludCBpLCBpbnQgaykgeworICAgIH0KKworfQorCitjbGFzcyBTb21lQ2xhc3NJbXBsIGV4dGVuZHMgU29tZUNsYXNzIHsKKyAgICBTb21lQ2xhc3NJbXBsKGludCBpLCBpbnQgaikgeworICAgICAgICBzdXBlcig8Y2FyZXQ+KTsKKyAgICB9CisKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9TdXBlck1ldGhvZEFyZ3VtZW50cy1vdXQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9TdXBlck1ldGhvZEFyZ3VtZW50cy1vdXQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZWM1NWZiCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL1N1cGVyTWV0aG9kQXJndW1lbnRzLW91dC5qYXZhCkBAIC0wLDAgKzEsMTQgQEAKK3B1YmxpYyBjbGFzcyBTb21lQ2xhc3MgeworCisgICAgcHVibGljIHZvaWQgZm9vKGludCBjb3VudCkge30KKyAgICBwdWJsaWMgT2JqZWN0IGZvbyhpbnQgY291bnQsIFN0cmluZyBkZXNjcikgeworCisgICAgfQorCit9CisKK2NsYXNzIFNvbWVDbGFzc0ltcGwgZXh0ZW5kcyBTb21lQ2xhc3MgeworICAgIHB1YmxpYyBPYmplY3QgZm9vKGludCBjb3VudCwgU3RyaW5nIGRlc2NyaXB0aW9uKSB7CisgICAgICAgIHN1cGVyLmZvbyhjb3VudCwgZGVzY3JpcHRpb24pPGNhcmV0PjsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvU3VwZXJNZXRob2RBcmd1bWVudHMuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9TdXBlck1ldGhvZEFyZ3VtZW50cy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE0Nzg4ZDIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvU3VwZXJNZXRob2RBcmd1bWVudHMuamF2YQpAQCAtMCwwICsxLDE0IEBACitwdWJsaWMgY2xhc3MgU29tZUNsYXNzIHsKKworICAgIHB1YmxpYyB2b2lkIGZvbyhpbnQgY291bnQpIHt9CisgICAgcHVibGljIE9iamVjdCBmb28oaW50IGNvdW50LCBTdHJpbmcgZGVzY3IpIHsKKworICAgIH0KKworfQorCitjbGFzcyBTb21lQ2xhc3NJbXBsIGV4dGVuZHMgU29tZUNsYXNzIHsKKyAgICBwdWJsaWMgT2JqZWN0IGZvbyhpbnQgY291bnQsIFN0cmluZyBkZXNjcmlwdGlvbikgeworICAgICAgICBzdXBlci5mb28oPGNhcmV0Pik7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL1RhYkFmdGVyTmV3LW91dC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL1RhYkFmdGVyTmV3LW91dC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBlYjMzY2MKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvVGFiQWZ0ZXJOZXctb3V0LmphdmEKQEAgLTAsMCArMSwyMSBAQAorcHVibGljIGNsYXNzIE1haW4geworCisgIHB1YmxpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworICAgIEFhYWEgYSA9IG5ldyBCYmJiKDxjYXJldD4yKTsKKyAgfQorCisgIGNsYXNzIEFhYWEgeworICAgIGludCBhYWE7CisKKyAgICBBYWFhKGludCBhYWEpIHsKKyAgICAgIHRoaXMuYWFhID0gYWFhOworICAgIH0KKyAgfQorCisgIGNsYXNzIEJiYmIgZXh0ZW5kcyBBYWFheworICAgIEJiYmIoaW50IGFhYSkgeworICAgICAgc3VwZXIoYWFhKTsKKyAgICB9CisgIH0KKworfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL1RhYkFmdGVyTmV3LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvVGFiQWZ0ZXJOZXcuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ODE3NGE2Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL1RhYkFmdGVyTmV3LmphdmEKQEAgLTAsMCArMSwyMSBAQAorcHVibGljIGNsYXNzIE1haW4geworCisgIHB1YmxpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworICAgIEFhYWEgYSA9IG5ldyBCPGNhcmV0PkFhYWEoMik7CisgIH0KKworICBjbGFzcyBBYWFhIHsKKyAgICBpbnQgYWFhOworCisgICAgQWFhYShpbnQgYWFhKSB7CisgICAgICB0aGlzLmFhYSA9IGFhYTsKKyAgICB9CisgIH0KKworICBjbGFzcyBCYmJiIGV4dGVuZHMgQWFhYXsKKyAgICBCYmJiKGludCBhYWEpIHsKKyAgICAgIHN1cGVyKGFhYSk7CisgICAgfQorICB9CisKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9UYWJNZXRob2RDYWxsLW91dC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL1RhYk1ldGhvZENhbGwtb3V0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDdjMWE1NgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9UYWJNZXRob2RDYWxsLW91dC5qYXZhCkBAIC0wLDAgKzEsOSBAQAorcHVibGljIGNsYXNzIE15SmF2YUNsYXNzIHsKKworICAgIGJvb2xlYW4gZmZmZigpIHt9CisKKyAgICB7CisKKyAgICAgICAgYm9vbGVhbiBiID0gZmZmZig8Y2FyZXQ+MjM5KTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvVGFiTWV0aG9kQ2FsbC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL1RhYk1ldGhvZENhbGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYTIxYTRiCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL1RhYk1ldGhvZENhbGwuamF2YQpAQCAtMCwwICsxLDkgQEAKK3B1YmxpYyBjbGFzcyBNeUphdmFDbGFzcyB7CisKKyAgICBib29sZWFuIGZmZmYoKSB7fQorCisgICAgeworCisgICAgICAgIGJvb2xlYW4gYiA9IDxjYXJldD5lcXVhbHMoMjM5KTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvVGFiTWV0aG9kSW5CaW5hcnlFeHByZXNzaW9uLW91dC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL1RhYk1ldGhvZEluQmluYXJ5RXhwcmVzc2lvbi1vdXQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZmNiNTY1Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL1RhYk1ldGhvZEluQmluYXJ5RXhwcmVzc2lvbi1vdXQuamF2YQpAQCAtMCwwICsxLDEzIEBACitwdWJsaWMgY2xhc3MgVGFiQ29tcGxldGUgeworCXB1YmxpYyB2b2lkIHNjZW5lKCkgeworCQlTZXJ2YW50IHNlcnZhbnQgPSBuZXcgU2VydmFudCgpOworCQlpbnQgdmFyID0gc2VydmFudC5tZXRob2QxKCk8Y2FyZXQ+ICsgMTsKKwl9Cit9CisKK2NsYXNzIFNlcnZhbnQgeworCXB1YmxpYyBpbnQgbWV0aG9kMSgpIHsKKwkJcmV0dXJuIDE7CisJfQorCit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL1RhYk1ldGhvZEluQmluYXJ5RXhwcmVzc2lvbi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL1RhYk1ldGhvZEluQmluYXJ5RXhwcmVzc2lvbi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUzZmUyMjIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvVGFiTWV0aG9kSW5CaW5hcnlFeHByZXNzaW9uLmphdmEKQEAgLTAsMCArMSwxMyBAQAorcHVibGljIGNsYXNzIFRhYkNvbXBsZXRlIHsKKwlwdWJsaWMgdm9pZCBzY2VuZSgpIHsKKwkJU2VydmFudCBzZXJ2YW50ID0gbmV3IFNlcnZhbnQoKTsKKwkJaW50IHZhciA9IHNlcnZhbnQubWV0PGNhcmV0PmhvZDEoKSArIDE7CisJfQorfQorCitjbGFzcyBTZXJ2YW50IHsKKwlwdWJsaWMgaW50IG1ldGhvZDEoKSB7CisJCXJldHVybiAxOworCX0KKworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9UYWJUb1JlcGxhY2VDbGFzc0tleXdvcmQtb3V0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvVGFiVG9SZXBsYWNlQ2xhc3NLZXl3b3JkLW91dC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYyYjRmNjEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvVGFiVG9SZXBsYWNlQ2xhc3NLZXl3b3JkLW91dC5qYXZhCkBAIC0wLDAgKzEsNyBAQAorY2xhc3MgRm9vIHsKKyAgdm9pZCBmb28oKSB7CisgICAgQ2xhc3M8PyBleHRlbmRzIEZvbz4gYyA9IEZvby5jbGFzczs8Y2FyZXQ+CisgIH0KK30KKworY2xhc3MgQmFyIGV4dGVuZHMgRm9vIHt9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL1RhYlRvUmVwbGFjZUNsYXNzS2V5d29yZC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL1RhYlRvUmVwbGFjZUNsYXNzS2V5d29yZC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUwOTNhMjMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvVGFiVG9SZXBsYWNlQ2xhc3NLZXl3b3JkLmphdmEKQEAgLTAsMCArMSw3IEBACitjbGFzcyBGb28geworICB2b2lkIGZvbygpIHsKKyAgICBDbGFzczw/IGV4dGVuZHMgRm9vPiBjID0gRjxjYXJldD5hLmNsYXNzOworICB9Cit9CisKK2NsYXNzIEJhciBleHRlbmRzIEZvbyB7fQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9UYWlsQWZ0ZXJJbnN0YW5jZU9mLW91dC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL1RhaWxBZnRlckluc3RhbmNlT2Ytb3V0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2MwNDlmMzAKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvVGFpbEFmdGVySW5zdGFuY2VPZi1vdXQuamF2YQpAQCAtMCwwICsxLDkgQEAKK3B1YmxpYyBjbGFzcyBUZXN0Q2FzZSBleHRlbmRzIFp6eiB7CisJcHVibGljIGJvb2xlYW4gdHR0KFp6eiBvKSB7CisJCXJldHVybiBvIGluc3RhbmNlb2YgVGVzdENhc2U8Y2FyZXQ+CisJfQorfQorCitjbGFzcyBaenogeworICAgIHByaXZhdGUgdm9pZCBmYXgoKSB7fQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9UYWlsQWZ0ZXJJbnN0YW5jZU9mLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvVGFpbEFmdGVySW5zdGFuY2VPZi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRlNzI2MTQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvVGFpbEFmdGVySW5zdGFuY2VPZi5qYXZhCkBAIC0wLDAgKzEsOSBAQAorcHVibGljIGNsYXNzIFRlc3RDYXNlIGV4dGVuZHMgWnp6IHsKKwlwdWJsaWMgYm9vbGVhbiB0dHQoWnp6IG8pIHsKKwkJcmV0dXJuIG8gaW5zdGFuY2VvZiA8Y2FyZXQ+CisJfQorfQorCitjbGFzcyBaenogeworICAgIHByaXZhdGUgdm9pZCBmYXgoKSB7fQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9UaGlzRmllbGRBc3NpZ25lZFRvSXRzZWxmLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvVGhpc0ZpZWxkQXNzaWduZWRUb0l0c2VsZi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkzYjEwZmIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvVGhpc0ZpZWxkQXNzaWduZWRUb0l0c2VsZi5qYXZhCkBAIC0wLDAgKzEsOCBAQAorY2xhc3MgQSB7CisgICAgT2JqZWN0IGZpZWxkOworCisgICAgQSgpIHsKKyAgICAgICAgZmllbGQgPSAyOworICAgICAgICB0aGlzLmZpZWxkID0gZmk8Y2FyZXQ+CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9UaHJvd0V4Y2VwdGlvbkNvbnN0cnVjdG9yLW91dC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL1Rocm93RXhjZXB0aW9uQ29uc3RydWN0b3Itb3V0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2Q3NDBlNQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9UaHJvd0V4Y2VwdGlvbkNvbnN0cnVjdG9yLW91dC5qYXZhCkBAIC0wLDAgKzEsOSBAQAorY2xhc3MgTXlFeGNlcHRpb24gZXh0ZW5kcyBSdW50aW1lRXhjZXB0aW9uIHsKKyAgcHVibGljIE15RXhjZXB0aW9uKFN0cmluZ1tdIHMpIHt9Cit9CisKK2NsYXNzIFhYWCB7CisgIHsKKyAgICB0aHJvdyBuZXcgTXlFeGNlcHRpb24obmV3IFN0cmluZ1tdezxjYXJldD59KTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9UaHJvd0V4Y2VwdGlvbkNvbnN0cnVjdG9yLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvVGhyb3dFeGNlcHRpb25Db25zdHJ1Y3Rvci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFhNzc5MjYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvVGhyb3dFeGNlcHRpb25Db25zdHJ1Y3Rvci5qYXZhCkBAIC0wLDAgKzEsOSBAQAorY2xhc3MgTXlFeGNlcHRpb24gZXh0ZW5kcyBSdW50aW1lRXhjZXB0aW9uIHsKKyAgcHVibGljIE15RXhjZXB0aW9uKFN0cmluZ1tdIHMpIHt9Cit9CisKK2NsYXNzIFhYWCB7CisgIHsKKyAgICB0aHJvdyBuZXcgTXlFeGNlcHRpb24obmV3IDxjYXJldD4pCisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvVGhyb3dSdW50aW1lRXhjZXB0aW9uLW91dC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL1Rocm93UnVudGltZUV4Y2VwdGlvbi1vdXQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNjdjYWMwCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL1Rocm93UnVudGltZUV4Y2VwdGlvbi1vdXQuamF2YQpAQCAtMCwwICsxLDcgQEAKK2NsYXNzIEZvbyB7CisgIHsKKyAgICBSdW50aW1lRXhjZXB0aW9uIGU7CisgICAgdGhyb3cgZTs8Y2FyZXQ+CisgIH0KKworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9UaHJvd1J1bnRpbWVFeGNlcHRpb24uamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9UaHJvd1J1bnRpbWVFeGNlcHRpb24uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jODIxYTZlCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL1Rocm93UnVudGltZUV4Y2VwdGlvbi5qYXZhCkBAIC0wLDAgKzEsNyBAQAorY2xhc3MgRm9vIHsKKyAgeworICAgIFJ1bnRpbWVFeGNlcHRpb24gZTsKKyAgICB0aHJvdyA8Y2FyZXQ+CisgIH0KKworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9UcnlXaXRoUmVzb3VyY2VzTm9TZW1pY29sb24tb3V0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvVHJ5V2l0aFJlc291cmNlc05vU2VtaWNvbG9uLW91dC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmViNTdjM2YKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvVHJ5V2l0aFJlc291cmNlc05vU2VtaWNvbG9uLW91dC5qYXZhCkBAIC0wLDAgKzEsOCBAQAorY2xhc3MgTXlDbGFzcyB7CisgIHN0YXRpYyBjbGFzcyBNeVJlc291cmNlIGltcGxlbWVudHMgQXV0b0Nsb3NlYWJsZSB7IH0KKworICB2b2lkIGYoTXlSZXNvdXJjZSByZXNvdXJjZSkgeworICAgIHRyeSAoZmluYWwgTXlSZXNvdXJjZSBjID0gcmVzb3VyY2U8Y2FyZXQ+KSB7CisgICAgfQorICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL1RyeVdpdGhSZXNvdXJjZXNOb1NlbWljb2xvbi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL1RyeVdpdGhSZXNvdXJjZXNOb1NlbWljb2xvbi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRiYmFlNTAKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvVHJ5V2l0aFJlc291cmNlc05vU2VtaWNvbG9uLmphdmEKQEAgLTAsMCArMSw4IEBACitjbGFzcyBNeUNsYXNzIHsKKyAgc3RhdGljIGNsYXNzIE15UmVzb3VyY2UgaW1wbGVtZW50cyBBdXRvQ2xvc2VhYmxlIHsgfQorCisgIHZvaWQgZihNeVJlc291cmNlIHJlc291cmNlKSB7CisgICAgdHJ5IChmaW5hbCBNeVJlc291cmNlIGMgPSByPGNhcmV0PikgeworICAgIH0KKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9UcnlXaXRoUmVzb3VyY2VzVGhyb3dzRXhjZXB0aW9uLW91dC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL1RyeVdpdGhSZXNvdXJjZXNUaHJvd3NFeGNlcHRpb24tb3V0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2IzNTQ3OQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9UcnlXaXRoUmVzb3VyY2VzVGhyb3dzRXhjZXB0aW9uLW91dC5qYXZhCkBAIC0wLDAgKzEsMTEgQEAKK2ltcG9ydCBqYXZhLmlvLkZpbGVJbnB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworCitjbGFzcyBUZXN0IHsKKyAgdm9pZCBmb28oKSB7CisgICAgdHJ5IHsKKyAgICAgIHRyeSAoRmlsZUlucHV0U3RyZWFtIGluID0gbmV3IEZpbGVJbnB1dFN0cmVhbSgiYWRzZiIpKSB7CisgICAgICB9CisgICAgfSBjYXRjaCAoSU9FeGNlcHRpb24gPGNhcmV0Pikge30KKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9UcnlXaXRoUmVzb3VyY2VzVGhyb3dzRXhjZXB0aW9uLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvVHJ5V2l0aFJlc291cmNlc1Rocm93c0V4Y2VwdGlvbi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM2ODNjNzEzCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL1RyeVdpdGhSZXNvdXJjZXNUaHJvd3NFeGNlcHRpb24uamF2YQpAQCAtMCwwICsxLDEwIEBACitpbXBvcnQgamF2YS5pby5GaWxlSW5wdXRTdHJlYW07CisKK2NsYXNzIFRlc3QgeworICB2b2lkIGZvbygpIHsKKyAgICB0cnkgeworICAgICAgdHJ5IChGaWxlSW5wdXRTdHJlYW0gaW4gPSBuZXcgRmlsZUlucHV0U3RyZWFtKCJhZHNmIikpIHsKKyAgICAgIH0KKyAgICB9IGNhdGNoIChJTzxjYXJldD4pIHt9CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvVHlwZUFyZ3MxLW91dC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL1R5cGVBcmdzMS1vdXQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xODVjMzYxCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL1R5cGVBcmdzMS1vdXQuamF2YQpAQCAtMCwwICsxLDkgQEAKK2NsYXNzIExpc3Q8VD4ge30KKworcHVibGljIGNsYXNzIEFBIHsKKyAgICBjbGFzcyBFbnRyeSB7fQorCisgICAgeworICAgICAgICBMaXN0PEVudHJ5PiBsID0gbmV3IExpc3Q8RW50cnk+KCk7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL1R5cGVBcmdzMS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL1R5cGVBcmdzMS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcwNzJjMTQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvVHlwZUFyZ3MxLmphdmEKQEAgLTAsMCArMSw5IEBACitjbGFzcyBMaXN0PFQ+IHt9CisKK3B1YmxpYyBjbGFzcyBBQSB7CisgICAgY2xhc3MgRW50cnkge30KKworICAgIHsKKyAgICAgICAgTGlzdDxFbnRyeT4gbCA9IG5ldyA8Y2FyZXQ+CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL1R5cGVBcmdzMi1vdXQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9UeXBlQXJnczItb3V0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjhkN2JhZWMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvVHlwZUFyZ3MyLW91dC5qYXZhCkBAIC0wLDAgKzEsMTAgQEAKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKKworY2xhc3MgTGlzdDxUPiB7fQorCitwdWJsaWMgY2xhc3MgQSB7CisgICAgdm9pZCBmKCkgeworICAgICAgICBjbGFzcyBDb2xsZWN0aW9uIHt9CisgICAgICAgIExpc3Q8amF2YS51dGlsLkNvbGxlY3Rpb24+IGwgPSBuZXcgTGlzdDxqYXZhLnV0aWwuQ29sbGVjdGlvbj4oKTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvVHlwZUFyZ3MyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvVHlwZUFyZ3MyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGZiMDFjNwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9UeXBlQXJnczIuamF2YQpAQCAtMCwwICsxLDggQEAKK2NsYXNzIExpc3Q8VD4ge30KKworcHVibGljIGNsYXNzIEEgeworICAgIHZvaWQgZigpIHsKKyAgICAgICAgY2xhc3MgQ29sbGVjdGlvbiB7fQorICAgICAgICBMaXN0PGphdmEudXRpbC5Db2xsZWN0aW9uPiBsID0gbmV3IDxjYXJldD4KKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvVHlwZVBhcmFtZXRlcnNJbmhlcml0b3JzLW91dC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL1R5cGVQYXJhbWV0ZXJzSW5oZXJpdG9ycy1vdXQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMWUyZTkyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL1R5cGVQYXJhbWV0ZXJzSW5oZXJpdG9ycy1vdXQuamF2YQpAQCAtMCwwICsxLDcgQEAKK2NsYXNzIEZvbyB7fQorY2xhc3MgQmFyIGV4dGVuZHMgRm9vIHt9CitjbGFzcyBHb28gZXh0ZW5kcyBCYXIge30KKworY2xhc3MgUGFyYW1zPFggZXh0ZW5kcyBGb28+IHt9CitjbGFzcyBNYWluIGV4dGVuZHMgUGFyYW1zPEZvbz48Y2FyZXQ+CisKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9UeXBlUGFyYW1ldGVyc0luaGVyaXRvcnMuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9UeXBlUGFyYW1ldGVyc0luaGVyaXRvcnMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMTg1OTM3Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL1R5cGVQYXJhbWV0ZXJzSW5oZXJpdG9ycy5qYXZhCkBAIC0wLDAgKzEsNyBAQAorY2xhc3MgRm9vIHt9CitjbGFzcyBCYXIgZXh0ZW5kcyBGb28ge30KK2NsYXNzIEdvbyBleHRlbmRzIEJhciB7fQorCitjbGFzcyBQYXJhbXM8WCBleHRlbmRzIEZvbz4ge30KK2NsYXNzIE1haW4gZXh0ZW5kcyBQYXJhbXM8PGNhcmV0PgorCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvVHlwZVBhcmFtZXRlcnNJbmhlcml0b3JzQ29tbWEtb3V0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvVHlwZVBhcmFtZXRlcnNJbmhlcml0b3JzQ29tbWEtb3V0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2MyNGI1NwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9UeXBlUGFyYW1ldGVyc0luaGVyaXRvcnNDb21tYS1vdXQuamF2YQpAQCAtMCwwICsxLDUgQEAKK2NsYXNzIEZvbyB7fQorCitjbGFzcyBQYXJhbXM8WCBleHRlbmRzIEZvbyxZPiB7fQorY2xhc3MgTWFpbiBleHRlbmRzIFBhcmFtczxGb28sIDxjYXJldD4KKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL1R5cGVQYXJhbWV0ZXJzSW5oZXJpdG9yc0NvbW1hLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvVHlwZVBhcmFtZXRlcnNJbmhlcml0b3JzQ29tbWEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZDhjMDI2Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL1R5cGVQYXJhbWV0ZXJzSW5oZXJpdG9yc0NvbW1hLmphdmEKQEAgLTAsMCArMSw1IEBACitjbGFzcyBGb28ge30KKworY2xhc3MgUGFyYW1zPFggZXh0ZW5kcyBGb28sWT4ge30KK2NsYXNzIE1haW4gZXh0ZW5kcyBQYXJhbXM8PGNhcmV0PgorCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvVHlwZVBhcmFtZXRlcnNJbmhlcml0b3JzSW5FeHByZXNzaW9uLW91dC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL1R5cGVQYXJhbWV0ZXJzSW5oZXJpdG9yc0luRXhwcmVzc2lvbi1vdXQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNTFlMTc3Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL1R5cGVQYXJhbWV0ZXJzSW5oZXJpdG9yc0luRXhwcmVzc2lvbi1vdXQuamF2YQpAQCAtMCwwICsxLDYgQEAKK2NsYXNzIENoYXJTZXF1ZW5jZSB7fQorCitjbGFzcyBTdHJpbmd5PFMgZXh0ZW5kcyBDaGFyU2VxdWVuY2U+IHsgfQorCitjbGFzcyBUZXN0ZXIgewordm9pZCBtZXRob2QoKSB7IG5ldyBTdHJpbmd5PENoYXJTZXF1ZW5jZT48Y2FyZXQ+IH0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvVHlwZVBhcmFtZXRlcnNJbmhlcml0b3JzSW5FeHByZXNzaW9uLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvVHlwZVBhcmFtZXRlcnNJbmhlcml0b3JzSW5FeHByZXNzaW9uLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzQ2Y2QwYgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9UeXBlUGFyYW1ldGVyc0luaGVyaXRvcnNJbkV4cHJlc3Npb24uamF2YQpAQCAtMCwwICsxLDYgQEAKK2NsYXNzIENoYXJTZXF1ZW5jZSB7fQorCitjbGFzcyBTdHJpbmd5PFMgZXh0ZW5kcyBDaGFyU2VxdWVuY2U+IHsgfQorCitjbGFzcyBUZXN0ZXIgewordm9pZCBtZXRob2QoKSB7IG5ldyBTdHJpbmd5PENTPGNhcmV0PiB9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL1R5cGVQYXJhbWV0ZXJzT2JqZWN0SW5oZXJpdG9ycy1vdXQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9UeXBlUGFyYW1ldGVyc09iamVjdEluaGVyaXRvcnMtb3V0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWY2NzY0YQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9UeXBlUGFyYW1ldGVyc09iamVjdEluaGVyaXRvcnMtb3V0LmphdmEKQEAgLTAsMCArMSw2IEBACitjbGFzcyBDaGFyU2VxdWVuY2VYIHt9CisKK2NsYXNzIFN0cmluZ3k8Uz4geyB9CisKK2NsYXNzIFRlc3RlciB7Cit2b2lkIG1ldGhvZCgpIHsgbmV3IFN0cmluZ3k8Q2hhclNlcXVlbmNlWD48Y2FyZXQ+IH0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvVHlwZVBhcmFtZXRlcnNPYmplY3RJbmhlcml0b3JzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvVHlwZVBhcmFtZXRlcnNPYmplY3RJbmhlcml0b3JzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWE2MjZjYgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9UeXBlUGFyYW1ldGVyc09iamVjdEluaGVyaXRvcnMuamF2YQpAQCAtMCwwICsxLDYgQEAKK2NsYXNzIENoYXJTZXF1ZW5jZVgge30KKworY2xhc3MgU3RyaW5neTxTPiB7IH0KKworY2xhc3MgVGVzdGVyIHsKK3ZvaWQgbWV0aG9kKCkgeyBuZXcgU3RyaW5neTxDU1g8Y2FyZXQ+IH0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvVHlwZVZhcmlhYmxlSW5zdGFuY2VPZi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL1R5cGVWYXJpYWJsZUluc3RhbmNlT2YuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYzkwMzBmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL1R5cGVWYXJpYWJsZUluc3RhbmNlT2YuamF2YQpAQCAtMCwwICsxLDEwIEBACitpbnRlcmZhY2UgRm9vIHt9CitjbGFzcyBCYXIgaW1wbGVtZW50cyBGb28ge30KK2NsYXNzIEdvbyBpbXBsZW1lbnRzIEZvbyB7fQorCitjbGFzcyBNYWluPFQgZXh0ZW5kcyBGb28+IHsKKyAgeworICAgIFQgdDsKKyAgICBpZiAodCBpbnN0YW5jZW9mIDxjYXJldD4pCisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvVW5ib3VuZFR5cGVBcmdzLW91dC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL1VuYm91bmRUeXBlQXJncy1vdXQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMGY3YmE1Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL1VuYm91bmRUeXBlQXJncy1vdXQuamF2YQpAQCAtMCwwICsxLDEwIEBACitpbnRlcmZhY2UgRm9vIHt9CitpbnRlcmZhY2UgRm9vRXg8VD4gZXh0ZW5kcyBGb28geworICAgIFQgZm9vKCk7Cit9CisKK2NsYXNzIEJhciB7CisgICAgeworICAgICAgICBGb28gZiA9IG5ldyBGb29FeDw8Y2FyZXQ+PigpIHt9OworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvVW5ib3VuZFR5cGVBcmdzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvVW5ib3VuZFR5cGVBcmdzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWEyMzMzZAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9VbmJvdW5kVHlwZUFyZ3MuamF2YQpAQCAtMCwwICsxLDEwIEBACitpbnRlcmZhY2UgRm9vIHt9CitpbnRlcmZhY2UgRm9vRXg8VD4gZXh0ZW5kcyBGb28geworICAgIFQgZm9vKCk7Cit9CisKK2NsYXNzIEJhciB7CisgICAgeworICAgICAgICBGb28gZiA9IG5ldyBGRTxjYXJldD4KKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL1VuYm91bmRUeXBlQXJnczItb3V0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvVW5ib3VuZFR5cGVBcmdzMi1vdXQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OTY1OWI1Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL1VuYm91bmRUeXBlQXJnczItb3V0LmphdmEKQEAgLTAsMCArMSw4IEBACitpbnRlcmZhY2UgRm9vIHt9CitjbGFzcyBGb29FeDxUPiBpbXBsZW1lbnRzIEZvbyB7fQorCitjbGFzcyBCYXIgeworICAgIHsKKyAgICAgICAgRm9vIGYgPSBuZXcgRm9vRXg8PGNhcmV0Pj4oKTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL1VuYm91bmRUeXBlQXJnczIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9VbmJvdW5kVHlwZUFyZ3MyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDc4N2NkZQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9VbmJvdW5kVHlwZUFyZ3MyLmphdmEKQEAgLTAsMCArMSw4IEBACitpbnRlcmZhY2UgRm9vIHt9CitjbGFzcyBGb29FeDxUPiBpbXBsZW1lbnRzIEZvbyB7fQorCitjbGFzcyBCYXIgeworICAgIHsKKyAgICAgICAgRm9vIGYgPSBuZXcgRkU8Y2FyZXQ+CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9VbmxvY2tEb2N1bWVudC1vdXQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9VbmxvY2tEb2N1bWVudC1vdXQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNWNjOGRkCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL1VubG9ja0RvY3VtZW50LW91dC5qYXZhCkBAIC0wLDAgKzEsMTAgQEAKK2ltcG9ydCBqYXZhLnV0aWwuKjsKKworaW1wb3J0IHBrZy5CYXI7CitpbXBvcnQgcGtnLkZvbzsKKworY2xhc3MgTXlDbGFzcyB7Cit7CisgIEZvby5mb28oQ29sbGVjdGlvbnMuPEJhcj5lbXB0eUxpc3QoKSk7Cit9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL1VubG9ja0RvY3VtZW50LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvVW5sb2NrRG9jdW1lbnQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNDczZDhjCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL1VubG9ja0RvY3VtZW50LmphdmEKQEAgLTAsMCArMSw4IEBACitpbXBvcnQgamF2YS51dGlsLio7CitpbXBvcnQgcGtnLkZvbzsKKworY2xhc3MgTXlDbGFzcyB7Cit7CisgIEZvby5mb28oQ29sbGVjdGlvbnMuZW08Y2FyZXQ+KQorfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9VbnF1YWxpZmllZENvbnN0YW50SW5Td2l0Y2gtb3V0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvVW5xdWFsaWZpZWRDb25zdGFudEluU3dpdGNoLW91dC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM5NzUxM2QKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvVW5xdWFsaWZpZWRDb25zdGFudEluU3dpdGNoLW91dC5qYXZhCkBAIC0wLDAgKzEsMTYgQEAKK2VudW0gRm9vIHsKKyAgICBGT08sIEJBUgorICB9CisKKworY2xhc3MgTWFpbiB7CisKKyAgeworICAgIEZvbyBhOworICAgIEZvbyBiOworICAgIHN3aXRjaCAoYSkgeworICAgICAgY2FzZSBGT086IGIgPSBGb28uQkFSOzxjYXJldD4KKyAgICB9CisgIH0KKworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9VbnF1YWxpZmllZENvbnN0YW50SW5Td2l0Y2guamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9VbnF1YWxpZmllZENvbnN0YW50SW5Td2l0Y2guamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NWQ5ZjQ5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL1VucXVhbGlmaWVkQ29uc3RhbnRJblN3aXRjaC5qYXZhCkBAIC0wLDAgKzEsMTYgQEAKK2VudW0gRm9vIHsKKyAgICBGT08sIEJBUgorICB9CisKKworY2xhc3MgTWFpbiB7CisKKyAgeworICAgIEZvbyBhOworICAgIEZvbyBiOworICAgIHN3aXRjaCAoYSkgeworICAgICAgY2FzZSBGT086IGIgPSBCPGNhcmV0PgorICAgIH0KKyAgfQorCit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL1VzZUludENvbnN0YW50c0Zyb21Db25zdHJ1Y3RlZENsYXNzLW91dC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL1VzZUludENvbnN0YW50c0Zyb21Db25zdHJ1Y3RlZENsYXNzLW91dC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmViOTg1NWIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvVXNlSW50Q29uc3RhbnRzRnJvbUNvbnN0cnVjdGVkQ2xhc3Mtb3V0LmphdmEKQEAgLTAsMCArMSwxNSBAQAorY2xhc3MgRm9vIHsKKyAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRk9PX0ZPTzsKKyAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRk9PX0JBUjsKKworICBGb28oaW50IGEpIHt9CisKKyAgdm9pZCBmb28oaW50IHgpOworfQorCitwdWJsaWMgY2xhc3MgQmFyIHsKKyAgICAKKyAgICB7CisgICAgICAgbmV3IEZvbyhGb28uRk9PX0JBUik8Y2FyZXQ+CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL1VzZUludENvbnN0YW50c0Zyb21Db25zdHJ1Y3RlZENsYXNzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvVXNlSW50Q29uc3RhbnRzRnJvbUNvbnN0cnVjdGVkQ2xhc3MuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZmJiMGUyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL1VzZUludENvbnN0YW50c0Zyb21Db25zdHJ1Y3RlZENsYXNzLmphdmEKQEAgLTAsMCArMSwxNSBAQAorY2xhc3MgRm9vIHsKKyAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRk9PX0ZPTzsKKyAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRk9PX0JBUjsKKworICBGb28oaW50IGEpIHt9CisKKyAgdm9pZCBmb28oaW50IHgpOworfQorCitwdWJsaWMgY2xhc3MgQmFyIHsKKyAgICAKKyAgICB7CisgICAgICAgbmV3IEZvbyhGQjxjYXJldD4pCisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL1VzZUludENvbnN0YW50c0Zyb21UYXJnZXRDbGFzcy1vdXQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9Vc2VJbnRDb25zdGFudHNGcm9tVGFyZ2V0Q2xhc3Mtb3V0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGVlNmJjOQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9Vc2VJbnRDb25zdGFudHNGcm9tVGFyZ2V0Q2xhc3Mtb3V0LmphdmEKQEAgLTAsMCArMSwxMyBAQAorY2xhc3MgRm9vIHsKKyAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRk9PX0ZPTzsKKyAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRk9PX0JBUjsKKworICB2b2lkIGZvbyhpbnQgeCk7Cit9CisKK3B1YmxpYyBjbGFzcyBCYXIgeworICAgIAorICAgIHsKKyAgICAgICBuZXcgRm9vKCkuZm9vKEZvby5GT09fQkFSKTs8Y2FyZXQ+CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL1VzZUludENvbnN0YW50c0Zyb21UYXJnZXRDbGFzcy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL1VzZUludENvbnN0YW50c0Zyb21UYXJnZXRDbGFzcy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNlZTkyNmMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvVXNlSW50Q29uc3RhbnRzRnJvbVRhcmdldENsYXNzLmphdmEKQEAgLTAsMCArMSwxMyBAQAorY2xhc3MgRm9vIHsKKyAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRk9PX0ZPTzsKKyAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRk9PX0JBUjsKKworICB2b2lkIGZvbyhpbnQgeCk7Cit9CisKK3B1YmxpYyBjbGFzcyBCYXIgeworICAgIAorICAgIHsKKyAgICAgICBuZXcgRm9vKCkuZm9vKEZCPGNhcmV0PikKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvVXNlSW50Q29uc3RhbnRzRnJvbVRhcmdldENsYXNzUmV0dXJuVmFsdWUtb3V0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvVXNlSW50Q29uc3RhbnRzRnJvbVRhcmdldENsYXNzUmV0dXJuVmFsdWUtb3V0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTdmZWY5OAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9Vc2VJbnRDb25zdGFudHNGcm9tVGFyZ2V0Q2xhc3NSZXR1cm5WYWx1ZS1vdXQuamF2YQpAQCAtMCwwICsxLDEzIEBACitjbGFzcyBGb28geworICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBGT09fRk9POworICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBGT09fQkFSOworCisgIGludCBmb28oKTsKK30KKworcHVibGljIGNsYXNzIEJhciB7CisgICAgCisgICAgeworICAgICAgIGlmIChuZXcgRm9vKCkuZm9vKCkgPT0gRm9vLkZPT19CQVI8Y2FyZXQ+KQorICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9Vc2VJbnRDb25zdGFudHNGcm9tVGFyZ2V0Q2xhc3NSZXR1cm5WYWx1ZS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL1VzZUludENvbnN0YW50c0Zyb21UYXJnZXRDbGFzc1JldHVyblZhbHVlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDBjMjQ5NQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9Vc2VJbnRDb25zdGFudHNGcm9tVGFyZ2V0Q2xhc3NSZXR1cm5WYWx1ZS5qYXZhCkBAIC0wLDAgKzEsMTMgQEAKK2NsYXNzIEZvbyB7CisgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEZPT19GT087CisgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEZPT19CQVI7CisKKyAgaW50IGZvbygpOworfQorCitwdWJsaWMgY2xhc3MgQmFyIHsKKyAgICAKKyAgICB7CisgICAgICAgaWYgKG5ldyBGb28oKS5mb28oKSA9PSBGQjxjYXJldD4pCisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL1VzZUludENvbnN0YW50c0luT3Itb3V0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvVXNlSW50Q29uc3RhbnRzSW5Pci1vdXQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYzZkODRhMAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9Vc2VJbnRDb25zdGFudHNJbk9yLW91dC5qYXZhCkBAIC0wLDAgKzEsMTUgQEAKK2NsYXNzIEZvbyB7CisgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEZPT19GT087CisgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEZPT19CQVI7CisKKyAgRm9vKGludCBhKSB7fQorCisgIHZvaWQgZm9vKGludCB4KTsKK30KKworcHVibGljIGNsYXNzIEJhciB7CisgICAgCisgICAgeworICAgICAgIG5ldyBGb28oMiB8IEZvby5GT09fQkFSPGNhcmV0PikKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvVXNlSW50Q29uc3RhbnRzSW5Pci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL1VzZUludENvbnN0YW50c0luT3IuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YzRkODIyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL1VzZUludENvbnN0YW50c0luT3IuamF2YQpAQCAtMCwwICsxLDE1IEBACitjbGFzcyBGb28geworICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBGT09fRk9POworICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBGT09fQkFSOworCisgIEZvbyhpbnQgYSkge30KKworICB2b2lkIGZvbyhpbnQgeCk7Cit9CisKK3B1YmxpYyBjbGFzcyBCYXIgeworICAgIAorICAgIHsKKyAgICAgICBuZXcgRm9vKDIgfCBGQjxjYXJldD4pCisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL1VzZUludENvbnN0YW50c0luUGx1cy1vdXQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9Vc2VJbnRDb25zdGFudHNJblBsdXMtb3V0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODEyMmYxMAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9Vc2VJbnRDb25zdGFudHNJblBsdXMtb3V0LmphdmEKQEAgLTAsMCArMSwxNSBAQAorY2xhc3MgRm9vIHsKKyAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRk9PX0ZPTzsKKyAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRk9PX0JBUjsKKworICBGb28oaW50IGEpIHt9CisKKyAgdm9pZCBmb28oaW50IHgpOworfQorCitwdWJsaWMgY2xhc3MgQmFyIHsKKyAgICAKKyAgICB7CisgICAgICAgbmV3IEZvbygyICsgRm9vLkZPT19CQVI8Y2FyZXQ+KQorICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9Vc2VJbnRDb25zdGFudHNJblBsdXMuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9Vc2VJbnRDb25zdGFudHNJblBsdXMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OGQ4OWE3Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL1VzZUludENvbnN0YW50c0luUGx1cy5qYXZhCkBAIC0wLDAgKzEsMTUgQEAKK2NsYXNzIEZvbyB7CisgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEZPT19GT087CisgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEZPT19CQVI7CisKKyAgRm9vKGludCBhKSB7fQorCisgIHZvaWQgZm9vKGludCB4KTsKK30KKworcHVibGljIGNsYXNzIEJhciB7CisgICAgCisgICAgeworICAgICAgIG5ldyBGb28oMiArIEZCPGNhcmV0PikKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvVXNlckRhdGFMaXN0QWRkQWxsLW91dC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL1VzZXJEYXRhTGlzdEFkZEFsbC1vdXQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOWRjODZkCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL1VzZXJEYXRhTGlzdEFkZEFsbC1vdXQuamF2YQpAQCAtMCwwICsxLDE4IEBACitjbGFzcyBMaXN0PFQ+IHsKKyAgdm9pZCBhZGRBbGwoTGlzdDw/IGV4dGVuZHMgVD4gbCk7Cit9CisKK2NsYXNzIEtleTxUPiB7fQorCitjbGFzcyBGb29CYXNlIHsKKyAgICBLZXk8TGlzdDxTdHJpbmc+PiBTVFJJTkdfTElTVDsKKworICAgIDxUPiBUIGdldChLZXk8VD4ga2V5KTsKKworICAgIHsKKyAgICAgICAgTGlzdDxTdHJpbmc+IGw7CisgICAgICAgIGwuYWRkQWxsKGdldChTVFJJTkdfTElTVCk8Y2FyZXQ+KQorICAgIH0KKworCit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL1VzZXJEYXRhTGlzdEFkZEFsbC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL1VzZXJEYXRhTGlzdEFkZEFsbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ4ZTQwY2QKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvVXNlckRhdGFMaXN0QWRkQWxsLmphdmEKQEAgLTAsMCArMSwxOCBAQAorY2xhc3MgTGlzdDxUPiB7CisgIHZvaWQgYWRkQWxsKExpc3Q8PyBleHRlbmRzIFQ+IGwpOworfQorCitjbGFzcyBLZXk8VD4ge30KKworY2xhc3MgRm9vQmFzZSB7CisgICAgS2V5PExpc3Q8U3RyaW5nPj4gU1RSSU5HX0xJU1Q7CisKKyAgICA8VD4gVCBnZXQoS2V5PFQ+IGtleSk7CisKKyAgICB7CisgICAgICAgIExpc3Q8U3RyaW5nPiBsOworICAgICAgICBsLmFkZEFsbChnZXQoUzxjYXJldD4pKQorICAgIH0KKworCit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL1ZhcmFyZ3MxLW91dC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL1ZhcmFyZ3MxLW91dC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMxZmIwMWIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvVmFyYXJnczEtb3V0LmphdmEKQEAgLTAsMCArMSw4IEBACitwdWJsaWMgY2xhc3MgVmFyYXJncyB7CisgICAgdm9pZCBmb28gKFN0cmluZyBzLCBTdHJpbmcgLi4uIG9ianMpIHt9CisKKyAgICB2b2lkIGJhciAoKSB7CisgICAgICAgIFN0cmluZyBzc3MgPSBuZXcgU3RyaW5nKCk7CisgICAgICAgIGZvbyAoIiIsICIiLCBzc3M8Y2FyZXQ+KTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL1ZhcmFyZ3MxLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvVmFyYXJnczEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NTZjNWM4Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL1ZhcmFyZ3MxLmphdmEKQEAgLTAsMCArMSw4IEBACitwdWJsaWMgY2xhc3MgVmFyYXJncyB7CisgICAgdm9pZCBmb28gKFN0cmluZyBzLCBTdHJpbmcgLi4uIG9ianMpIHt9CisKKyAgICB2b2lkIGJhciAoKSB7CisgICAgICAgIFN0cmluZyBzc3MgPSBuZXcgU3RyaW5nKCk7CisgICAgICAgIGZvbyAoIiIsICIiLCBzPGNhcmV0Pik7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9WYXJpYWJsZUNvbG9uLW91dC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL1ZhcmlhYmxlQ29sb24tb3V0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTc5MDRlZgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9WYXJpYWJsZUNvbG9uLW91dC5qYXZhCkBAIC0wLDAgKzEsNSBAQAorY2xhc3MgQmFyIHsKKyAgaW50IGZvbyhpbnQgem9vb2EsIGludCB6b29vYikgeworICAgIHJldHVybiB0cnVlID8gem9vb2EgOiA8Y2FyZXQ+CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9WYXJpYWJsZUNvbG9uLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvVmFyaWFibGVDb2xvbi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUxZWQ0Y2YKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvVmFyaWFibGVDb2xvbi5qYXZhCkBAIC0wLDAgKzEsNSBAQAorY2xhc3MgQmFyIHsKKyAgaW50IGZvbyhpbnQgem9vb2EsIGludCB6b29vYikgeworICAgIHJldHVybiB0cnVlID8gem9vPGNhcmV0PgorICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvVm9pZENhc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9Wb2lkQ2FzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNlOTI0OTEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvVm9pZENhc3QuamF2YQpAQCAtMCwwICsxLDUgQEAKK2NsYXNzIEN7CisgICAgeworICAgICAgICAoPGNhcmV0PikgCisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9Wb2lkRXhwZWN0ZWRUeXBlLW91dC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL1ZvaWRFeHBlY3RlZFR5cGUtb3V0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjNhOWQ3YQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9Wb2lkRXhwZWN0ZWRUeXBlLW91dC5qYXZhCkBAIC0wLDAgKzEsOCBAQAorY2xhc3MgTWFpbiB7CisKKyAgeworICAgIG5ldyBGb28oKS5lcXVhbHMoPGNhcmV0Pik7CisgIH0KK30KKworY2xhc3MgRm9vIHt9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL1ZvaWRFeHBlY3RlZFR5cGUuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9Wb2lkRXhwZWN0ZWRUeXBlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGJmNTE5NQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9Wb2lkRXhwZWN0ZWRUeXBlLmphdmEKQEAgLTAsMCArMSw4IEBACitjbGFzcyBNYWluIHsKKworICB7CisgICAgbmV3IEZvbygpLjxjYXJldD4KKyAgfQorfQorCitjbGFzcyBGb28ge30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvV2lsZGNhcmRlZEluc3RhbmNlb2Ytb3V0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvV2lsZGNhcmRlZEluc3RhbmNlb2Ytb3V0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTdkMjAwMAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9XaWxkY2FyZGVkSW5zdGFuY2VvZi1vdXQuamF2YQpAQCAtMCwwICsxLDkgQEAKK2NsYXNzIEE8VD4ge30KK2NsYXNzIEJiYmI8VD4gZXh0ZW5kcyBBPFQ+IHt9CitwdWJsaWMgY2xhc3MgQyB7CisgIHZvaWQgbShBPD8+IGEpIHsKKyAgICBpZiAoYSBpbnN0YW5jZW9mIEJiYmI8Pz48Y2FyZXQ+KSB7CisKKyAgICB9CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvV2lsZGNhcmRlZEluc3RhbmNlb2YuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9XaWxkY2FyZGVkSW5zdGFuY2VvZi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI3YzZiZGMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvV2lsZGNhcmRlZEluc3RhbmNlb2YuamF2YQpAQCAtMCwwICsxLDkgQEAKK2NsYXNzIEE8VD4ge30KK2NsYXNzIEJiYmI8VD4gZXh0ZW5kcyBBPFQ+IHt9CitwdWJsaWMgY2xhc3MgQyB7CisgIHZvaWQgbShBPD8+IGEpIHsKKyAgICBpZiAoYSBpbnN0YW5jZW9mIEI8Y2FyZXQ+KSB7CisKKyAgICB9CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvV2lsZGNhcmRlZEluc3RhbmNlb2YyLW91dC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL1dpbGRjYXJkZWRJbnN0YW5jZW9mMi1vdXQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMmJkYjc3Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL1dpbGRjYXJkZWRJbnN0YW5jZW9mMi1vdXQuamF2YQpAQCAtMCwwICsxLDkgQEAKK2NsYXNzIEE8VD4ge30KK2NsYXNzIEJiYmI8VD4gZXh0ZW5kcyBBPFQ+IHt9CitwdWJsaWMgY2xhc3MgQyB7CisgIHZvaWQgbShBIGEpIHsKKyAgICBpZiAoYSBpbnN0YW5jZW9mIEJiYmI8Y2FyZXQ+KSB7CisKKyAgICB9CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvV2lsZGNhcmRlZEluc3RhbmNlb2YyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvV2lsZGNhcmRlZEluc3RhbmNlb2YyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDZkMzczZQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9XaWxkY2FyZGVkSW5zdGFuY2VvZjIuamF2YQpAQCAtMCwwICsxLDkgQEAKK2NsYXNzIEE8VD4ge30KK2NsYXNzIEJiYmI8VD4gZXh0ZW5kcyBBPFQ+IHt9CitwdWJsaWMgY2xhc3MgQyB7CisgIHZvaWQgbShBIGEpIHsKKyAgICBpZiAoYSBpbnN0YW5jZW9mIEI8Y2FyZXQ+KSB7CisKKyAgICB9CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvV2lsZGNhcmRlZEluc3RhbmNlb2YzLW91dC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL1dpbGRjYXJkZWRJbnN0YW5jZW9mMy1vdXQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NzUwZWQ3Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL1dpbGRjYXJkZWRJbnN0YW5jZW9mMy1vdXQuamF2YQpAQCAtMCwwICsxLDkgQEAKK2NsYXNzIEE8VD4ge30KK2NsYXNzIEJiYmI8VD4gZXh0ZW5kcyBBPFQ+IHt9CitwdWJsaWMgY2xhc3MgQyB7CisgIHZvaWQgbShBPFN0cmluZz4gYSkgeworICAgIGlmIChhIGluc3RhbmNlb2YgQmJiYjw/PjxjYXJldD4pIHsKKworICAgIH0KKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9XaWxkY2FyZGVkSW5zdGFuY2VvZjMuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9XaWxkY2FyZGVkSW5zdGFuY2VvZjMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOGU2OTcwCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL1dpbGRjYXJkZWRJbnN0YW5jZW9mMy5qYXZhCkBAIC0wLDAgKzEsOSBAQAorY2xhc3MgQTxUPiB7fQorY2xhc3MgQmJiYjxUPiBleHRlbmRzIEE8VD4ge30KK3B1YmxpYyBjbGFzcyBDIHsKKyAgdm9pZCBtKEE8U3RyaW5nPiBhKSB7CisgICAgaWYgKGEgaW5zdGFuY2VvZiBCPGNhcmV0PikgeworCisgICAgfQorICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL1dyb25nQW5vbnltb3VzLW91dC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL1dyb25nQW5vbnltb3VzLW91dC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEyN2U0ZjcKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvV3JvbmdBbm9ueW1vdXMtb3V0LmphdmEKQEAgLTAsMCArMSwyMSBAQAoraW1wb3J0IGphdmEuaW8uRmlsZTsKK2ltcG9ydCBqYXZhLmlvLkZpbGVuYW1lRmlsdGVyOworCitjbGFzcyBJbnRlcm1lZGlhdGUgeworCisgICAgeworICAgICAgICBuZXcgRmlsZSgiLiIpLmxpc3RGaWxlcyhuZXcgRmlsZW5hbWVGaWx0ZXIoKSB7CisgICAgICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgICAgIHB1YmxpYyBib29sZWFuIGFjY2VwdChGaWxlIGRpciwgU3RyaW5nIG5hbWUpIHsKKyAgICAgICAgICAgICAgICA8c2VsZWN0aW9uPnJldHVybiBmYWxzZTsgIC8vVG8gY2hhbmdlIGJvZHkgb2YgaW1wbGVtZW50ZWQgbWV0aG9kcyB1c2UgRmlsZSB8IFNldHRpbmdzIHwgRmlsZSBUZW1wbGF0ZXMuPC9zZWxlY3Rpb24+CisgICAgICAgICAgICB9CisgICAgICAgIH0pCisgICAgICAgICAgICAgICAgU3dpbmdVdGlsaXRpZXMuaW52b2tlTGF0ZXIobmV3IFJ1bm5hYmxlKCkgeworICAgICAgICAgICAgICAgICAgICBwdWJsaWMgdm9pZCBydW4oKSB7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9KTsKKworCisgICAgfQorCit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvV3JvbmdBbm9ueW1vdXMuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9Xcm9uZ0Fub255bW91cy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc1NzdhNzYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvV3JvbmdBbm9ueW1vdXMuamF2YQpAQCAtMCwwICsxLDE1IEBACitpbXBvcnQgamF2YS5pby5GaWxlOworCitjbGFzcyBJbnRlcm1lZGlhdGUgeworCisgICAgeworICAgICAgICBuZXcgRmlsZSgiLiIpLmxpc3RGaWxlcyhuZXcgRmlsZUZpbHRlcjxjYXJldD4KKyAgICAgICAgICAgICAgICBTd2luZ1V0aWxpdGllcy5pbnZva2VMYXRlcihuZXcgUnVubmFibGUoKSB7CisgICAgICAgICAgICAgICAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0pOworCisKKyAgICB9CisKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9hZnRlckluc3RhbmNlT2YvYWZ0ZXIxLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvYWZ0ZXJJbnN0YW5jZU9mL2FmdGVyMS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhlY2Y2ZWQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvYWZ0ZXJJbnN0YW5jZU9mL2FmdGVyMS5qYXZhCkBAIC0wLDAgKzEsMTEgQEAKK2NsYXNzIEF7CisgeworICAgQSBhOworCisgICBpZihhIGluc3RhbmNlb2YgQjxjYXJldD4pCisKKyB9CisKKyBjbGFzcyBCIGV4dGVuZHMgQXt9CisKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvYWZ0ZXJJbnN0YW5jZU9mL2FmdGVyMi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL2FmdGVySW5zdGFuY2VPZi9hZnRlcjIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZTg1ZTUxCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL2FmdGVySW5zdGFuY2VPZi9hZnRlcjIuamF2YQpAQCAtMCwwICsxLDExIEBACitjbGFzcyBBeworIHsKKyAgIEEgYTsKKworICAgaWYoYSBpbnN0YW5jZW9mIEJCQkI8Y2FyZXQ+KQorCisgfQorCisgY2xhc3MgQkJCQiBleHRlbmRzIEF7fQorCit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL2FmdGVySW5zdGFuY2VPZi9iZWZvcmUxLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvYWZ0ZXJJbnN0YW5jZU9mL2JlZm9yZTEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ODhkZTUyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL2FmdGVySW5zdGFuY2VPZi9iZWZvcmUxLmphdmEKQEAgLTAsMCArMSwxMSBAQAorY2xhc3MgQXsKKyB7CisgICBBIGE7CisKKyAgIGlmKGEgaW5zdGFuY2VvZiA8Y2FyZXQ+KQorCisgfQorCisgY2xhc3MgQiBleHRlbmRzIEF7fQorCit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL2FmdGVySW5zdGFuY2VPZi9iZWZvcmUyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvYWZ0ZXJJbnN0YW5jZU9mL2JlZm9yZTIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMWI4Y2RmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL2FmdGVySW5zdGFuY2VPZi9iZWZvcmUyLmphdmEKQEAgLTAsMCArMSwxMSBAQAorY2xhc3MgQXsKKyB7CisgICBBIGE7CisKKyAgIGlmKGEgaW5zdGFuY2VvZiBCQjxjYXJldD4pCisKKyB9CisKKyBjbGFzcyBCQkJCIGV4dGVuZHMgQXt9CisKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvYWZ0ZXJOZXcvTGFzdEFyZ0luSW5uZXJOZXdBZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL2FmdGVyTmV3L0xhc3RBcmdJbklubmVyTmV3QWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MzcyOGMyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL2FmdGVyTmV3L0xhc3RBcmdJbklubmVyTmV3QWZ0ZXIuamF2YQpAQCAtMCwwICsxLDEwIEBACitjbGFzcyBCIHsKKyAgICBjbGFzcyBBIHsKKyAgICAgIEEoaW50IGkpIHt9CisgICAgfQorICAgIHN0YXRpYyBCIGNyZWF0ZUIoQSBhKSB7fQorICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKyAgICAgICAgaW50IGk7CisgICAgICAgIGZvbyhjcmVhdGVCKG5ldyBBKGkpPGNhcmV0PikpOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvYWZ0ZXJOZXcvTGFzdEFyZ0luSW5uZXJOZXdBZnRlcjIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9hZnRlck5ldy9MYXN0QXJnSW5Jbm5lck5ld0FmdGVyMi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMyM2IyODQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvYWZ0ZXJOZXcvTGFzdEFyZ0luSW5uZXJOZXdBZnRlcjIuamF2YQpAQCAtMCwwICsxLDkgQEAKK2NsYXNzIEIgeworICAgIHByaXZhdGUgc3RhdGljIGludCBnZXRTZWVkKCkgeyByZXR1cm4gMDsgfQorICAgIGNsYXNzIEEgeworICAgICAgQShpbnQgaSkge30KKyAgICB9CisgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworICAgICAgbmV3IEEoZ2V0U2VlZCgpKS5zaG93KCk7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9hZnRlck5ldy9MYXN0QXJnSW5Jbm5lck5ld0FmdGVyMy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL2FmdGVyTmV3L0xhc3RBcmdJbklubmVyTmV3QWZ0ZXIzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTM4ZWJhZQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9hZnRlck5ldy9MYXN0QXJnSW5Jbm5lck5ld0FmdGVyMy5qYXZhCkBAIC0wLDAgKzEsMTMgQEAKK2NsYXNzIEFBQSB7CisgIEFBQShpbnQgaSkge30KK30KKworY2xhc3MgQiB7CisgICAgaW50IGlpaWk9MDsKKyAgICBCKGludCBpLEFBQSBhYWEsIGludCBqLCBpbnQgaykgeworICAgICAgQiBiID0gbmV3IEIoCisgICAgICAgIDAsCisgICAgICAgIG5ldyBBQUEoaWlpaSksCisgICAgICApOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvYWZ0ZXJOZXcvTGFzdEFyZ0luSW5uZXJOZXdBZnRlcjQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9hZnRlck5ldy9MYXN0QXJnSW5Jbm5lck5ld0FmdGVyNC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNlMmZhNmYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvYWZ0ZXJOZXcvTGFzdEFyZ0luSW5uZXJOZXdBZnRlcjQuamF2YQpAQCAtMCwwICsxLDggQEAKK2NsYXNzIF9NYXA8Sz4ge30KKworY2xhc3MgQiB7CisgIEIoX01hcDxTdHJpbmc+IG1hcCkge30KKyAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJndikgeworICAgIEIgYiA9IG5ldyBCKCAoX01hcDxTdHJpbmc+KSA8Y2FyZXQ+KTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9hZnRlck5ldy9MYXN0QXJnSW5Jbm5lck5ld0JlZm9yZS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL2FmdGVyTmV3L0xhc3RBcmdJbklubmVyTmV3QmVmb3JlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTJhM2I5NQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9hZnRlck5ldy9MYXN0QXJnSW5Jbm5lck5ld0JlZm9yZS5qYXZhCkBAIC0wLDAgKzEsMTAgQEAKK2NsYXNzIEIgeworICAgIGNsYXNzIEEgeworICAgICAgQShpbnQgaSkge30KKyAgICB9CisgICAgc3RhdGljIEIgY3JlYXRlQihBIGEpIHt9CisgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworICAgICAgICBpbnQgaTsKKyAgICAgICAgZm9vKGNyZWF0ZUIobmV3IEEoPGNhcmV0PikpKTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL2FmdGVyTmV3L0xhc3RBcmdJbklubmVyTmV3QmVmb3JlMi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL2FmdGVyTmV3L0xhc3RBcmdJbklubmVyTmV3QmVmb3JlMi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk0ZDg0OGYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvYWZ0ZXJOZXcvTGFzdEFyZ0luSW5uZXJOZXdCZWZvcmUyLmphdmEKQEAgLTAsMCArMSw5IEBACitjbGFzcyBCIHsKKyAgICBwcml2YXRlIHN0YXRpYyBpbnQgZ2V0U2VlZCgpIHsgcmV0dXJuIDA7IH0KKyAgICBjbGFzcyBBIHsKKyAgICAgIEEoaW50IGkpIHt9CisgICAgfQorICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKyAgICAgIG5ldyBBKGdldDxjYXJldD4pLnNob3coKTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL2FmdGVyTmV3L0xhc3RBcmdJbklubmVyTmV3QmVmb3JlMy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL2FmdGVyTmV3L0xhc3RBcmdJbklubmVyTmV3QmVmb3JlMy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJkMzBkOWIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvYWZ0ZXJOZXcvTGFzdEFyZ0luSW5uZXJOZXdCZWZvcmUzLmphdmEKQEAgLTAsMCArMSwxMyBAQAorY2xhc3MgQUFBIHsKKyAgQUFBKGludCBpKSB7fQorfQorCitjbGFzcyBCIHsKKyAgICBpbnQgaWlpaT0wOworICAgIEIoaW50IGksQUFBIGFhYSwgaW50IGosIGludCBrKSB7CisgICAgICBCIGIgPSBuZXcgQigKKyAgICAgICAgMCwKKyAgICAgICAgbmV3IEFBQShpaTxjYXJldD4pLAorICAgICAgKTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL2FmdGVyTmV3L0xhc3RBcmdJbklubmVyTmV3QmVmb3JlNC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL2FmdGVyTmV3L0xhc3RBcmdJbklubmVyTmV3QmVmb3JlNC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU4ODI4Yjk5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL2FmdGVyTmV3L0xhc3RBcmdJbklubmVyTmV3QmVmb3JlNC5qYXZhCkBAIC0wLDAgKzEsOCBAQAorY2xhc3MgX01hcDxLPiB7fQorCitjbGFzcyBCIHsKKyAgQihfTWFwPFN0cmluZz4gbWFwKSB7fQorICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmd2KSB7CisgICAgQiBiID0gbmV3IEIoICg8Y2FyZXQ+KSApOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL2FmdGVyTmV3L2FmdGVyMS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL2FmdGVyTmV3L2FmdGVyMS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZiMGRiODQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvYWZ0ZXJOZXcvYWZ0ZXIxLmphdmEKQEAgLTAsMCArMSw1IEBACitjbGFzcyBBQUE8VD57CisgIHsKKyAgICBBQUEgYWEgPSBuZXcgQUFBKCk7PGNhcmV0PgorICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvYWZ0ZXJOZXcvYWZ0ZXIxMC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL2FmdGVyTmV3L2FmdGVyMTAuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MzY4ODAyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL2FmdGVyTmV3L2FmdGVyMTAuamF2YQpAQCAtMCwwICsxLDExIEBACitpbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKK2NsYXNzIFRlc3QgeworICBJbnB1dFN0cmVhbSBpbnB1dFN0cmVhbSA9IG5ldyBNeUlucHV0U3RyZWFtKDxjYXJldD4pOworCisgIHByaXZhdGUgY2xhc3MgTXlJbnB1dFN0cmVhbSBleHRlbmRzIElucHV0U3RyZWFtIHsKKyAgICBNeUlucHV0U3RyZWFtKFN0cmluZyBubWFtZSl7fQorICAgIHB1YmxpYyBpbnQgcmVhZCgpIHRocm93cyBJT0V4Y2VwdGlvbiB7CisgICAgICByZXR1cm4gMDsKKyAgICB9CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9hZnRlck5ldy9hZnRlcjExLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvYWZ0ZXJOZXcvYWZ0ZXIxMS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZiMGRiODQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvYWZ0ZXJOZXcvYWZ0ZXIxMS5qYXZhCkBAIC0wLDAgKzEsNSBAQAorY2xhc3MgQUFBPFQ+eworICB7CisgICAgQUFBIGFhID0gbmV3IEFBQSgpOzxjYXJldD4KKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL2FmdGVyTmV3L2FmdGVyMTIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9hZnRlck5ldy9hZnRlcjEyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWE4MWI1MgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9hZnRlck5ldy9hZnRlcjEyLmphdmEKQEAgLTAsMCArMSw0IEBACisKK2NsYXNzIFRlc3Q8VD4geworICBUZXN0PFN0cmluZz4gdGVzdCA9IG5ldyBUZXN0PFN0cmluZz4oKTs8Y2FyZXQ+Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL2FmdGVyTmV3L2FmdGVyMTMuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9hZnRlck5ldy9hZnRlcjEzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWQ4Zjg5MwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9hZnRlck5ldy9hZnRlcjEzLmphdmEKQEAgLTAsMCArMSwzIEBACitjbGFzcyBBQUFBQTxLLFY+eworIEFBQUFBPEssVj4gYXNkID0gbmV3IEFBQUFBPEssIFY+KCk7PGNhcmV0PgorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9hZnRlck5ldy9hZnRlcjE0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvYWZ0ZXJOZXcvYWZ0ZXIxNC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFjMjhmMmIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvYWZ0ZXJOZXcvYWZ0ZXIxNC5qYXZhCkBAIC0wLDAgKzEsNSBAQAorY2xhc3MgQXsKKyAgdm9pZCBmb28oKXsKKyAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbig8Y2FyZXQ+KTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9hZnRlck5ldy9hZnRlcjE1LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvYWZ0ZXJOZXcvYWZ0ZXIxNS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQwY2YwYTgKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvYWZ0ZXJOZXcvYWZ0ZXIxNS5qYXZhCkBAIC0wLDAgKzEsNyBAQAorY2xhc3MgQXsKKyAgdm9pZCBmb28oKSB0aHJvd3MgTXlFeGNlcHRpb257CisgICAgdGhyb3cgbmV3IEVycm9yKDxjYXJldD4pOworICB9CisKKyAgY2xhc3MgTXlFeGNlcHRpb24gZXh0ZW5kcyBFeGNlcHRpb257fQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9hZnRlck5ldy9hZnRlcjE2LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvYWZ0ZXJOZXcvYWZ0ZXIxNi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk5NjRiZjEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvYWZ0ZXJOZXcvYWZ0ZXIxNi5qYXZhCkBAIC0wLDAgKzEsNyBAQAorY2xhc3MgQXsKKyAgdm9pZCBmb28oKSB0aHJvd3MgTXlFeGNlcHRpb257CisgICAgdGhyb3cgbmV3IE15RXhjZXB0aW9uKCk7PGNhcmV0PgorICB9CisKKyAgY2xhc3MgTXlFeGNlcHRpb24gZXh0ZW5kcyBFeGNlcHRpb257fQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9hZnRlck5ldy9hZnRlcjIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9hZnRlck5ldy9hZnRlcjIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NjA4ODNlCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL2FmdGVyTmV3L2FmdGVyMi5qYXZhCkBAIC0wLDAgKzEsNSBAQAorY2xhc3MgQUFBPFQ+eworICB7CisgICAgQUFBPFN0cmluZz4gYWEgPSBuZXcgQUFBPFN0cmluZz4oKTs8Y2FyZXQ+CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9hZnRlck5ldy9hZnRlcjMuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9hZnRlck5ldy9hZnRlcjMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZmQwMGJiCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL2FmdGVyTmV3L2FmdGVyMy5qYXZhCkBAIC0wLDAgKzEsOSBAQAoraW50ZXJmYWNlIFhYWDxUPnt9CisKK2NsYXNzIEJCQjxYPiBpbXBsZW1lbnRzIFhYWDxYPnt9CisKK2NsYXNzIEFBQXsKKyAgeworICAgIFhYWCBhYSA9IG5ldyBCQkIoKTs8Y2FyZXQ+CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9hZnRlck5ldy9hZnRlcjQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9hZnRlck5ldy9hZnRlcjQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMTExZGFlCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL2FmdGVyTmV3L2FmdGVyNC5qYXZhCkBAIC0wLDAgKzEsOCBAQAorY2xhc3MgQUFBeworICBpbnRlcmZhY2UgWFhYPFQ+e30KKworICBjbGFzcyBCQkI8Wj4gaW1wbGVtZW50cyBYWFg8Wj57fQorICB7CisgICAgWFhYPFN0cmluZz4gYWEgPSBuZXcgQkJCPFN0cmluZz4oKTs8Y2FyZXQ+CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9hZnRlck5ldy9hZnRlcjUuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9hZnRlck5ldy9hZnRlcjUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YzI1YjNlCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL2FmdGVyTmV3L2FmdGVyNS5qYXZhCkBAIC0wLDAgKzEsOCBAQAorY2xhc3MgQUFBeworICBpbnRlcmZhY2UgWFhYPFQ+e30KKworICBjbGFzcyBCQkI8Wj4gaW1wbGVtZW50cyBYWFg8Wj57fQorICB7CisgICAgWFhYIGFhID0gbmV3IEJCQigpOzxjYXJldD4KKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL2FmdGVyTmV3L2FmdGVyNi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL2FmdGVyTmV3L2FmdGVyNi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIxYTZjZmUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvYWZ0ZXJOZXcvYWZ0ZXI2LmphdmEKQEAgLTAsMCArMSw4IEBACitjbGFzcyBBQUF7CisgIGludGVyZmFjZSBYWFg8VD57fQorCisgIGNsYXNzIEJCQjxaPiBpbXBsZW1lbnRzIFhYWDxaPnt9CisgIHsKKyAgICBYWFg8U3RyaW5nW10+IGFhID0gbmV3IEJCQjxTdHJpbmdbXT4oKTs8Y2FyZXQ+CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9hZnRlck5ldy9hZnRlcjcuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9hZnRlck5ldy9hZnRlcjcuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MDg3YzFlCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL2FmdGVyTmV3L2FmdGVyNy5qYXZhCkBAIC0wLDAgKzEsOCBAQAorY2xhc3MgQUFBeworICBpbnRlcmZhY2UgWFhYPFQsIFQxPnt9CisKKyAgY2xhc3MgQkJCPFosIFoxPiBpbXBsZW1lbnRzIFhYWDxaLCBaMT57fQorICB7CisgICAgWFhYPFN0cmluZyxTdHJpbmdbXT4gYWEgPSBuZXcgQkJCPFN0cmluZywgU3RyaW5nW10+KCk7PGNhcmV0PgorICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvYWZ0ZXJOZXcvYWZ0ZXI4LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvYWZ0ZXJOZXcvYWZ0ZXI4LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGUxN2U4YQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9hZnRlck5ldy9hZnRlcjguamF2YQpAQCAtMCwwICsxLDggQEAKK2NsYXNzIEFBQXsKKyAgaW50ZXJmYWNlIFhYWDxUPnt9CisgIGludGVyZmFjZSBaWlo8VD57fQorICBjbGFzcyBCQkI8Wj4gaW1wbGVtZW50cyBYWFg8WlpaPFo+Pnt9CisgIHsKKyAgICBYWFg8WlpaPFN0cmluZz4+IGFhID0gbmV3IEJCQjxTdHJpbmc+KCk7CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9hZnRlck5ldy9hZnRlcjkuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9hZnRlck5ldy9hZnRlcjkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYmIwMzQyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL2FmdGVyTmV3L2FmdGVyOS5qYXZhCkBAIC0wLDAgKzEsNyBAQAorY2xhc3MgQXsKKyBpbnRlcmZhY2UgSW50ZXJmYWNle30KKworIHsKKyBJbnRlcmZhY2UgaW4gPSBuZXcgPGNhcmV0PgorIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvYWZ0ZXJOZXcvYmVmb3JlMS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL2FmdGVyTmV3L2JlZm9yZTEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOTBmNzg3Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL2FmdGVyTmV3L2JlZm9yZTEuamF2YQpAQCAtMCwwICsxLDUgQEAKK2NsYXNzIEFBQTxUPnsKKyAgeworICAgIEFBQSBhYSA9IG5ldyA8Y2FyZXQ+CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9hZnRlck5ldy9iZWZvcmUxMC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL2FmdGVyTmV3L2JlZm9yZTEwLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmY2NjkzYQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9hZnRlck5ldy9iZWZvcmUxMC5qYXZhCkBAIC0wLDAgKzEsMTEgQEAKK2ltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOworY2xhc3MgVGVzdCB7CisgIElucHV0U3RyZWFtIGlucHV0U3RyZWFtID0gbmV3IE15SW48Y2FyZXQ+CisKKyAgcHJpdmF0ZSBjbGFzcyBNeUlucHV0U3RyZWFtIGV4dGVuZHMgSW5wdXRTdHJlYW0geworICAgIE15SW5wdXRTdHJlYW0oU3RyaW5nIG5tYW1lKXt9CisgICAgcHVibGljIGludCByZWFkKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKKyAgICAgIHJldHVybiAwOworICAgIH0KKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL2FmdGVyTmV3L2JlZm9yZTExLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvYWZ0ZXJOZXcvYmVmb3JlMTEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZjY2OTNhCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL2FmdGVyTmV3L2JlZm9yZTExLmphdmEKQEAgLTAsMCArMSwxMSBAQAoraW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07CitjbGFzcyBUZXN0IHsKKyAgSW5wdXRTdHJlYW0gaW5wdXRTdHJlYW0gPSBuZXcgTXlJbjxjYXJldD4KKworICBwcml2YXRlIGNsYXNzIE15SW5wdXRTdHJlYW0gZXh0ZW5kcyBJbnB1dFN0cmVhbSB7CisgICAgTXlJbnB1dFN0cmVhbShTdHJpbmcgbm1hbWUpe30KKyAgICBwdWJsaWMgaW50IHJlYWQoKSB0aHJvd3MgSU9FeGNlcHRpb24geworICAgICAgcmV0dXJuIDA7CisgICAgfQorICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvYWZ0ZXJOZXcvYmVmb3JlMTIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9hZnRlck5ldy9iZWZvcmUxMi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE4YWYwMjAKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvYWZ0ZXJOZXcvYmVmb3JlMTIuamF2YQpAQCAtMCwwICsxLDQgQEAKKworY2xhc3MgVGVzdDxUPiB7CisgIFRlc3Q8U3RyaW5nPiB0ZXN0ID0gbmV3IFRlc3Q8PGNhcmV0PgorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9hZnRlck5ldy9iZWZvcmUxMy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL2FmdGVyTmV3L2JlZm9yZTEzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODE3ZmVkYwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9hZnRlck5ldy9iZWZvcmUxMy5qYXZhCkBAIC0wLDAgKzEsMyBAQAorY2xhc3MgQUFBQUE8SyxWPnsKKyBBQUFBQTxLLFY+IGFzZCA9IG5ldyBBQUFBQTw8Y2FyZXQ+Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL2FmdGVyTmV3L2JlZm9yZTE0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvYWZ0ZXJOZXcvYmVmb3JlMTQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMjQ4NTg5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL2FmdGVyTmV3L2JlZm9yZTE0LmphdmEKQEAgLTAsMCArMSw1IEBACitjbGFzcyBBeworICB2b2lkIGZvbygpeworICAgIHRocm93IG5ldyBSdW50aW1lRXg8Y2FyZXQ+CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvYWZ0ZXJOZXcvYmVmb3JlMTUuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9hZnRlck5ldy9iZWZvcmUxNS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNiNzc4ZjkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvYWZ0ZXJOZXcvYmVmb3JlMTUuamF2YQpAQCAtMCwwICsxLDcgQEAKK2NsYXNzIEF7CisgIHZvaWQgZm9vKCkgdGhyb3dzIE15RXhjZXB0aW9ueworICAgIHRocm93IG5ldyBFcnJvPGNhcmV0PgorICB9CisKKyAgY2xhc3MgTXlFeGNlcHRpb24gZXh0ZW5kcyBFeGNlcHRpb257fQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9hZnRlck5ldy9iZWZvcmUxNi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL2FmdGVyTmV3L2JlZm9yZTE2LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjIxYTRjNAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9hZnRlck5ldy9iZWZvcmUxNi5qYXZhCkBAIC0wLDAgKzEsNyBAQAorY2xhc3MgQXsKKyAgdm9pZCBmb28oKSB0aHJvd3MgTXlFeGNlcHRpb257CisgICAgdGhyb3cgbmV3IE15RXg8Y2FyZXQ+CisgIH0KKworICBjbGFzcyBNeUV4Y2VwdGlvbiBleHRlbmRzIEV4Y2VwdGlvbnt9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL2FmdGVyTmV3L2JlZm9yZTIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9hZnRlck5ldy9iZWZvcmUyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTk4YmJhNAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9hZnRlck5ldy9iZWZvcmUyLmphdmEKQEAgLTAsMCArMSw1IEBACitjbGFzcyBBQUE8VD57CisgIHsKKyAgICBBQUE8U3RyaW5nPiBhYSA9IG5ldyA8Y2FyZXQ+CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9hZnRlck5ldy9iZWZvcmUzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvYWZ0ZXJOZXcvYmVmb3JlMy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNlNDhlZGEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvYWZ0ZXJOZXcvYmVmb3JlMy5qYXZhCkBAIC0wLDAgKzEsOSBAQAoraW50ZXJmYWNlIFhYWDxUPnt9CisKK2NsYXNzIEJCQjxYPiBpbXBsZW1lbnRzIFhYWDxYPnt9CisKK2NsYXNzIEFBQXsKKyAgeworICAgIFhYWCBhYSA9IG5ldyBCPGNhcmV0PgorICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvYWZ0ZXJOZXcvYmVmb3JlNC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL2FmdGVyTmV3L2JlZm9yZTQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOGE4NTg1Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL2FmdGVyTmV3L2JlZm9yZTQuamF2YQpAQCAtMCwwICsxLDggQEAKK2NsYXNzIEFBQXsKKyAgaW50ZXJmYWNlIFhYWDxUPnt9CisKKyAgY2xhc3MgQkJCPFo+IGltcGxlbWVudHMgWFhYPFo+e30KKyAgeworICAgIFhYWDxTdHJpbmc+IGFhID0gbmV3IEI8Y2FyZXQ+CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9hZnRlck5ldy9iZWZvcmU1LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvYWZ0ZXJOZXcvYmVmb3JlNS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcxZDNjYzMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvYWZ0ZXJOZXcvYmVmb3JlNS5qYXZhCkBAIC0wLDAgKzEsOCBAQAorY2xhc3MgQUFBeworICBpbnRlcmZhY2UgWFhYPFQ+e30KKworICBjbGFzcyBCQkI8Wj4gaW1wbGVtZW50cyBYWFg8Wj57fQorICB7CisgICAgWFhYIGFhID0gbmV3IEI8Y2FyZXQ+CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9hZnRlck5ldy9iZWZvcmU2LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvYWZ0ZXJOZXcvYmVmb3JlNi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVjYmMxYTIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvYWZ0ZXJOZXcvYmVmb3JlNi5qYXZhCkBAIC0wLDAgKzEsOCBAQAorY2xhc3MgQUFBeworICBpbnRlcmZhY2UgWFhYPFQ+e30KKworICBjbGFzcyBCQkI8Wj4gaW1wbGVtZW50cyBYWFg8Wj57fQorICB7CisgICAgWFhYPFN0cmluZ1tdPiBhYSA9IG5ldyBCPGNhcmV0PgorICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvYWZ0ZXJOZXcvYmVmb3JlNy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL2FmdGVyTmV3L2JlZm9yZTcuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNWZjNmQ2Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL2FmdGVyTmV3L2JlZm9yZTcuamF2YQpAQCAtMCwwICsxLDggQEAKK2NsYXNzIEFBQXsKKyAgaW50ZXJmYWNlIFhYWDxULCBUMT57fQorCisgIGNsYXNzIEJCQjxaLCBaMT4gaW1wbGVtZW50cyBYWFg8WiwgWjE+e30KKyAgeworICAgIFhYWDxTdHJpbmcsU3RyaW5nW10+IGFhID0gbmV3IEI8Y2FyZXQ+CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9hZnRlck5ldy9iZWZvcmU4LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvYWZ0ZXJOZXcvYmVmb3JlOC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYzMWFiOGEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvYWZ0ZXJOZXcvYmVmb3JlOC5qYXZhCkBAIC0wLDAgKzEsOCBAQAorY2xhc3MgQUFBeworICBpbnRlcmZhY2UgWFhYPFQ+e30KKyAgaW50ZXJmYWNlIFpaWjxUPnt9CisgIGNsYXNzIEJCQjxaPiBpbXBsZW1lbnRzIFhYWDxaWlo8Wj4+e30KKyAgeworICAgIFhYWDxaWlo8U3RyaW5nPj4gYWEgPSBuZXcgQjxjYXJldD4KKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL2FmdGVyTmV3L2JlZm9yZTkuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9hZnRlck5ldy9iZWZvcmU5LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGJiMDM0MgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9hZnRlck5ldy9iZWZvcmU5LmphdmEKQEAgLTAsMCArMSw3IEBACitjbGFzcyBBeworIGludGVyZmFjZSBJbnRlcmZhY2V7fQorCisgeworIEludGVyZmFjZSBpbiA9IG5ldyA8Y2FyZXQ+CisgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9mb28vR2V0SW5zdGFuY2Utb3V0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvZm9vL0dldEluc3RhbmNlLW91dC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQxOTQ3YTQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvZm9vL0dldEluc3RhbmNlLW91dC5qYXZhCkBAIC0wLDAgKzEsMTEgQEAKK3BhY2thZ2UgZm9vOworCitjbGFzcyBTZXJ2aWNlTWFuYWdlciB7CisgIHN0YXRpYyA8VD4gVCBnZXRTZXJ2aWNlKENsYXNzPFQ+IGFDbGFzcykge30KK30KKworY2xhc3MgTXlDbGFzcyB7CisgIHB1YmxpYyBNeUNsYXNzIGdldEluc3RhbmNlKCkgeworICAgIHJldHVybiBTZXJ2aWNlTWFuYWdlci5nZXRTZXJ2aWNlKE15Q2xhc3MuY2xhc3MpPGNhcmV0PjsgCisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvZm9vL0dldEluc3RhbmNlLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvZm9vL0dldEluc3RhbmNlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzM4MTE0MwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9mb28vR2V0SW5zdGFuY2UuamF2YQpAQCAtMCwwICsxLDExIEBACitwYWNrYWdlIGZvbzsKKworY2xhc3MgU2VydmljZU1hbmFnZXIgeworICBzdGF0aWMgPFQ+IFQgZ2V0U2VydmljZShDbGFzczxUPiBhQ2xhc3MpIHt9Cit9CisKK2NsYXNzIE15Q2xhc3MgeworICBwdWJsaWMgTXlDbGFzcyBnZXRJbnN0YW5jZSgpIHsKKyAgICByZXR1cm4gU2VydmljZU1hbmFnZXIuZ2V0U2VydmljZSg8Y2FyZXQ+KTsgCisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvZ2VuZXJpY3MvYWZ0ZXIxLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvZ2VuZXJpY3MvYWZ0ZXIxLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWZmMDVmMAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9nZW5lcmljcy9hZnRlcjEuamF2YQpAQCAtMCwwICsxLDkgQEAKK2NsYXNzIEE8VD57CisKKyAgVCBnZXQoKXtyZXR1cm4gbnVsbDt9CisgIHZvaWQgcHV0KFN0cmluZyBzdHIpOworCisgIHsKKyAgICBwdXQobmV3IEE8U3RyaW5nPigpLmdldCgpKTs8Y2FyZXQ+CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9nZW5lcmljcy9hZnRlcjIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9nZW5lcmljcy9hZnRlcjIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZTRhMDAwCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL2dlbmVyaWNzL2FmdGVyMi5qYXZhCkBAIC0wLDAgKzEsOSBAQAorY2xhc3MgQTxUPnsKKworICBUIGdldCgpe3JldHVybiBudWxsO30KKyAgdm9pZCBwdXQoVCBzdHIpOworCisgIHsKKyAgICBuZXcgQTxTdHJpbmc+KCkucHV0KG5ldyBBPFN0cmluZz4oKS5nZXQoKSk7PGNhcmV0PgorICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvZ2VuZXJpY3MvYWZ0ZXIzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvZ2VuZXJpY3MvYWZ0ZXIzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGZmZDJkZQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9nZW5lcmljcy9hZnRlcjMuamF2YQpAQCAtMCwwICsxLDEwIEBACitjbGFzcyBBPFQ+eworCisgIFQgZ2V0KCl7cmV0dXJuIG51bGw7fQorICA8VD4gdm9pZCBwdXQoVCBzdHIpOworCisgIHsKKyAgICBPYmplY3Qgb2JqOworICAgIHB1dChvYmopOzxjYXJldD4KKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL2dlbmVyaWNzL2FmdGVyNC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL2dlbmVyaWNzL2FmdGVyNC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY2ZjlhMjMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvZ2VuZXJpY3MvYWZ0ZXI0LmphdmEKQEAgLTAsMCArMSwxMCBAQAorY2xhc3MgQTxUPnsKKworICBUIGdldCgpe3JldHVybiBudWxsO30KKyAgPFQ+IHZvaWQgcHV0KFRbXSBzdHIpOworCisgIHsKKyAgICBPYmplY3RbXSBvYmo7CisgICAgcHV0KG9iaik7PGNhcmV0PgorICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvZ2VuZXJpY3MvYWZ0ZXI1LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvZ2VuZXJpY3MvYWZ0ZXI1LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzk4ZTAxMAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9nZW5lcmljcy9hZnRlcjUuamF2YQpAQCAtMCwwICsxLDkgQEAKK2NsYXNzIEF7CisgY2xhc3MgTWFwPFUsVj57CisgIFYgZ2V0KFUgdSl7fQorIH0KKworIHsKKyAgIFN0cmluZyBzdHIgPSBuZXcgTWFwPE9iamVjdCwgU3RyaW5nPigpLmdldCg8Y2FyZXQ+KTsKKyB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL2dlbmVyaWNzL2FmdGVyNi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL2dlbmVyaWNzL2FmdGVyNi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQzZGFkM2MKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvZ2VuZXJpY3MvYWZ0ZXI2LmphdmEKQEAgLTAsMCArMSw5IEBACitjbGFzcyBDeworIGNsYXNzIFg8VD57fQorCisgcHVibGljIDxUPiBYPFQ+IGZvbyhUIHNkaGcpOycKKyB7CisKKyAgWDxDPiBkc2QgPSBmb28oPGNhcmV0PikKKyB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL2dlbmVyaWNzL2FmdGVyNy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL2dlbmVyaWNzL2FmdGVyNy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEyNzhkZTkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvZ2VuZXJpY3MvYWZ0ZXI3LmphdmEKQEAgLTAsMCArMSw3IEBACitjbGFzcyBMaXN0PFQ+IHt9CisKK2NsYXNzIEMgeworICB2b2lkIGZvbyAoKSB7CisgICAgTGlzdDw/IGV4dGVuZHMgU3RyaW5nPiBsID0gbmV3IExpc3Q8U3RyaW5nPigpOzxjYXJldD4KKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9nZW5lcmljcy9hZnRlcjguamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9nZW5lcmljcy9hZnRlcjguamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMGRiNzNhCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL2dlbmVyaWNzL2FmdGVyOC5qYXZhCkBAIC0wLDAgKzEsNyBAQAorY2xhc3MgTGlzdDxUPiB7fQorCitjbGFzcyBDIHsKKyAgdm9pZCBmb28gKCkgeworICAgIExpc3Q8PyBleHRlbmRzIFN0cmluZz5bXSBhcnJheSA9IG5ldyBMaXN0WzxjYXJldD5dOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL2dlbmVyaWNzL2FmdGVyOS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL2dlbmVyaWNzL2FmdGVyOS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIwNjA1OWEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvZ2VuZXJpY3MvYWZ0ZXI5LmphdmEKQEAgLTAsMCArMSw3IEBACitjbGFzcyBBIHsKKyAgICA8VD4gdm9pZCBmb28oVFtdIHRzKSB7fQorCisgICAgeworICAgICAgICBmb28obmV3IE9iamVjdFtdezxjYXJldD59KTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL2dlbmVyaWNzL2JlZm9yZTEuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9nZW5lcmljcy9iZWZvcmUxLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2Q0MmVlZgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9nZW5lcmljcy9iZWZvcmUxLmphdmEKQEAgLTAsMCArMSw5IEBACitjbGFzcyBBPFQ+eworCisgIFQgZ2V0KCl7cmV0dXJuIG51bGw7fQorICB2b2lkIHB1dChTdHJpbmcgc3RyKTsKKworICB7CisgICAgcHV0KG5ldyBBPFN0cmluZz4oKS5nZTxjYXJldD4pCisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9nZW5lcmljcy9iZWZvcmUyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvZ2VuZXJpY3MvYmVmb3JlMi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdiMWVjMTkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvZ2VuZXJpY3MvYmVmb3JlMi5qYXZhCkBAIC0wLDAgKzEsOSBAQAorY2xhc3MgQTxUPnsKKworICBUIGdldCgpe3JldHVybiBudWxsO30KKyAgdm9pZCBwdXQoVCBzdHIpOworCisgIHsKKyAgICBuZXcgQTxTdHJpbmc+KCkucHV0KG5ldyBBPFN0cmluZz4oKS5nZTxjYXJldD4pCisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9nZW5lcmljcy9iZWZvcmUzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvZ2VuZXJpY3MvYmVmb3JlMy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI1ZDk0MzYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvZ2VuZXJpY3MvYmVmb3JlMy5qYXZhCkBAIC0wLDAgKzEsMTAgQEAKK2NsYXNzIEE8VD57CisKKyAgVCBnZXQoKXtyZXR1cm4gbnVsbDt9CisgIDxUPiB2b2lkIHB1dChUIHN0cik7CisKKyAgeworICAgIE9iamVjdCBvYmo7CisgICAgcHV0KG9iPGNhcmV0PikKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL2dlbmVyaWNzL2JlZm9yZTQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9nZW5lcmljcy9iZWZvcmU0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWU0MzRjMgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9nZW5lcmljcy9iZWZvcmU0LmphdmEKQEAgLTAsMCArMSwxMCBAQAorY2xhc3MgQTxUPnsKKworICBUIGdldCgpe3JldHVybiBudWxsO30KKyAgPFQ+IHZvaWQgcHV0KFRbXSBzdHIpOworCisgIHsKKyAgICBPYmplY3RbXSBvYmo7CisgICAgcHV0KG9iPGNhcmV0PikKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL2dlbmVyaWNzL2JlZm9yZTUuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9nZW5lcmljcy9iZWZvcmU1LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmE4ZDc4YgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9nZW5lcmljcy9iZWZvcmU1LmphdmEKQEAgLTAsMCArMSw5IEBACitjbGFzcyBBeworIGNsYXNzIE1hcDxVLFY+eworICBWIGdldChVIHUpe30KKyB9CisKKyB7CisgICBTdHJpbmcgc3RyID0gbmV3IE1hcDxPYmplY3QsIFN0cmluZz4oKS5nZTxjYXJldD4KKyB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL2dlbmVyaWNzL2JlZm9yZTYuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9nZW5lcmljcy9iZWZvcmU2LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTk0OGQ1ZAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9nZW5lcmljcy9iZWZvcmU2LmphdmEKQEAgLTAsMCArMSw5IEBACitjbGFzcyBDeworIGNsYXNzIFg8VD57fQorCisgcHVibGljIDxUPiBYPFQ+IGZvbyhUIHNkaGcpOycKKyB7CisKKyAgWDxDPiBkc2QgPSBmPGNhcmV0PgorIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvZ2VuZXJpY3MvYmVmb3JlNy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL2dlbmVyaWNzL2JlZm9yZTcuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMzg2ZDIwCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL2dlbmVyaWNzL2JlZm9yZTcuamF2YQpAQCAtMCwwICsxLDcgQEAKK2NsYXNzIExpc3Q8VD4ge30KKworY2xhc3MgQyB7CisgIHZvaWQgZm9vICgpIHsKKyAgICBMaXN0PD8gZXh0ZW5kcyBTdHJpbmc+IGwgPSBuZXcgPGNhcmV0PgorICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL2dlbmVyaWNzL2JlZm9yZTguamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9nZW5lcmljcy9iZWZvcmU4LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjRmNTIzMmIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvZ2VuZXJpY3MvYmVmb3JlOC5qYXZhCkBAIC0wLDAgKzEsNyBAQAorY2xhc3MgTGlzdDxUPiB7fQorCitjbGFzcyBDIHsKKyAgdm9pZCBmb28gKCkgeworICAgIExpc3Q8PyBleHRlbmRzIFN0cmluZz5bXSBhcnJheSA9IG5ldyA8Y2FyZXQ+CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvZ2VuZXJpY3MvYmVmb3JlOS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL2dlbmVyaWNzL2JlZm9yZTkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMmU2MmFlCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL2dlbmVyaWNzL2JlZm9yZTkuamF2YQpAQCAtMCwwICsxLDcgQEAKK2NsYXNzIEEgeworICAgIDxUPiB2b2lkIGZvbyhUW10gdHMpIHt9CisKKyAgICB7CisgICAgICAgIGZvbyhuZXcgPGNhcmV0Pik7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9wYXJlbkFmdGVyQ2FsbC9hZnRlcjEuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9wYXJlbkFmdGVyQ2FsbC9hZnRlcjEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MzYyMzk4Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL3BhcmVuQWZ0ZXJDYWxsL2FmdGVyMS5qYXZhCkBAIC0wLDAgKzEsNSBAQAorcHVibGljIGNsYXNzIFRlc3RDbGFzcyB7CisgICAgcHVibGljIHZvaWQgZm9vKFRlc3RDbGFzcyBwKSB7CisgICAgICAgIGZvbyh0aGlzKTs8Y2FyZXQ+CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9wYXJlbkFmdGVyQ2FsbC9hZnRlcjFfc3BhY2UuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9wYXJlbkFmdGVyQ2FsbC9hZnRlcjFfc3BhY2UuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNmY4OGQwCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL3BhcmVuQWZ0ZXJDYWxsL2FmdGVyMV9zcGFjZS5qYXZhCkBAIC0wLDAgKzEsNSBAQAorcHVibGljIGNsYXNzIFRlc3RDbGFzcyB7CisgICAgcHVibGljIHZvaWQgZm9vKFRlc3RDbGFzcyBwKSB7CisgICAgICAgIGZvbyh0aGlzICk7PGNhcmV0PgorICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvcGFyZW5BZnRlckNhbGwvYWZ0ZXIyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvcGFyZW5BZnRlckNhbGwvYWZ0ZXIyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDYyOWZhNgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9wYXJlbkFmdGVyQ2FsbC9hZnRlcjIuamF2YQpAQCAtMCwwICsxLDUgQEAKK3B1YmxpYyBjbGFzcyBUZXN0Q2xhc3MgeworICAgIHB1YmxpYyBpbnQgZm9vKFRlc3RDbGFzcyBwKSB7CisgICAgICAgIGZvbyh0aGlzKTxjYXJldD4KKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL3BhcmVuQWZ0ZXJDYWxsL2FmdGVyMy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL3BhcmVuQWZ0ZXJDYWxsL2FmdGVyMy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgzNjIzOTgKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvcGFyZW5BZnRlckNhbGwvYWZ0ZXIzLmphdmEKQEAgLTAsMCArMSw1IEBACitwdWJsaWMgY2xhc3MgVGVzdENsYXNzIHsKKyAgICBwdWJsaWMgdm9pZCBmb28oVGVzdENsYXNzIHApIHsKKyAgICAgICAgZm9vKHRoaXMpOzxjYXJldD4KKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL3BhcmVuQWZ0ZXJDYWxsL2FmdGVyNC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL3BhcmVuQWZ0ZXJDYWxsL2FmdGVyNC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM1MzE2ZTAKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvcGFyZW5BZnRlckNhbGwvYWZ0ZXI0LmphdmEKQEAgLTAsMCArMSw1IEBACitwdWJsaWMgY2xhc3MgVGVzdENsYXNzIHsKKyAgICBwdWJsaWMgaW50IGZvbyhUZXN0Q2xhc3MgcCkgeworICAgICAgICBiYXIoZm9vKHRoaXMpPGNhcmV0PikKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL3BhcmVuQWZ0ZXJDYWxsL2FmdGVyNS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL3BhcmVuQWZ0ZXJDYWxsL2FmdGVyNS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc3MzMyYjQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvcGFyZW5BZnRlckNhbGwvYWZ0ZXI1LmphdmEKQEAgLTAsMCArMSw1IEBACitwdWJsaWMgY2xhc3MgVGVzdENsYXNzIHsKKyAgICBwdWJsaWMgaW50IGZvbyhUZXN0Q2xhc3MgcCkgeworICAgICAgICBpZihmb28odGhpcyk8Y2FyZXQ+KQorICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvcGFyZW5BZnRlckNhbGwvYWZ0ZXI2LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvcGFyZW5BZnRlckNhbGwvYWZ0ZXI2LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODIxMDcyYgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9wYXJlbkFmdGVyQ2FsbC9hZnRlcjYuamF2YQpAQCAtMCwwICsxLDcgQEAKK3B1YmxpYyBjbGFzcyBUZXN0Q2xhc3MgeworICAgIHN0YXRpYyBUZXN0Q2xhc3MgZ2V0SW5zdGFuY2UoKSB7IHJldHVybiBuZXcgVGVzdENsYXNzKCk7IH0KKyAgICBwdWJsaWMgaW50IGZvbyhUZXN0Q2xhc3MgcCkgeworICAgICAgICBmb28oZ2V0SW5zdGFuY2UoKTxjYXJldD4KKyAgICAgICAgKTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL3BhcmVuQWZ0ZXJDYWxsL2JlZm9yZTEuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9wYXJlbkFmdGVyQ2FsbC9iZWZvcmUxLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjlkNWNlZgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9wYXJlbkFmdGVyQ2FsbC9iZWZvcmUxLmphdmEKQEAgLTAsMCArMSw1IEBACitwdWJsaWMgY2xhc3MgVGVzdENsYXNzIHsKKyAgICBwdWJsaWMgdm9pZCBmb28oVGVzdENsYXNzIHApIHsKKyAgICAgICAgZm9vKHQ8Y2FyZXQ+CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9wYXJlbkFmdGVyQ2FsbC9iZWZvcmUyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvcGFyZW5BZnRlckNhbGwvYmVmb3JlMi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE4ZWY4OTUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvcGFyZW5BZnRlckNhbGwvYmVmb3JlMi5qYXZhCkBAIC0wLDAgKzEsNSBAQAorcHVibGljIGNsYXNzIFRlc3RDbGFzcyB7CisgICAgcHVibGljIGludCBmb28oVGVzdENsYXNzIHApIHsKKyAgICAgICAgZm9vKHQ8Y2FyZXQ+CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9wYXJlbkFmdGVyQ2FsbC9iZWZvcmUzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvcGFyZW5BZnRlckNhbGwvYmVmb3JlMy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU3OWE5MGYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvcGFyZW5BZnRlckNhbGwvYmVmb3JlMy5qYXZhCkBAIC0wLDAgKzEsNSBAQAorcHVibGljIGNsYXNzIFRlc3RDbGFzcyB7CisgICAgcHVibGljIHZvaWQgZm9vKFRlc3RDbGFzcyBwKSB7CisgICAgICAgIGZvbyh0PGNhcmV0Pik7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9wYXJlbkFmdGVyQ2FsbC9iZWZvcmU0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvcGFyZW5BZnRlckNhbGwvYmVmb3JlNC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEzNGZkMmMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvcGFyZW5BZnRlckNhbGwvYmVmb3JlNC5qYXZhCkBAIC0wLDAgKzEsNSBAQAorcHVibGljIGNsYXNzIFRlc3RDbGFzcyB7CisgICAgcHVibGljIGludCBmb28oVGVzdENsYXNzIHApIHsKKyAgICAgICAgYmFyKGZvbyh0PGNhcmV0PikKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL3BhcmVuQWZ0ZXJDYWxsL2JlZm9yZTUuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9wYXJlbkFmdGVyQ2FsbC9iZWZvcmU1LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTcyYWI2MAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9wYXJlbkFmdGVyQ2FsbC9iZWZvcmU1LmphdmEKQEAgLTAsMCArMSw1IEBACitwdWJsaWMgY2xhc3MgVGVzdENsYXNzIHsKKyAgICBwdWJsaWMgaW50IGZvbyhUZXN0Q2xhc3MgcCkgeworICAgICAgICBpZihmb28odDxjYXJldD4pCisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9wYXJlbkFmdGVyQ2FsbC9iZWZvcmU2LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvcGFyZW5BZnRlckNhbGwvYmVmb3JlNi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhmMWEyZWEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvcGFyZW5BZnRlckNhbGwvYmVmb3JlNi5qYXZhCkBAIC0wLDAgKzEsNyBAQAorcHVibGljIGNsYXNzIFRlc3RDbGFzcyB7CisgICAgc3RhdGljIFRlc3RDbGFzcyBnZXRJbnN0YW5jZSgpIHsgcmV0dXJuIG5ldyBUZXN0Q2xhc3MoKTsgfQorICAgIHB1YmxpYyBpbnQgZm9vKFRlc3RDbGFzcyBwKSB7CisgICAgICAgIGZvbyhnZXQ8Y2FyZXQ+CisgICAgICAgICk7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9wYXJlbkFmdGVyQ2FzdC9hZnRlcjEuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9wYXJlbkFmdGVyQ2FzdC9hZnRlcjEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMjkxNzhmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL3BhcmVuQWZ0ZXJDYXN0L2FmdGVyMS5qYXZhCkBAIC0wLDAgKzEsNSBAQAorcHVibGljIGNsYXNzIFRlc3RDbGFzcyB7CisgICAgcHVibGljIHZvaWQgZm9vKFRlc3RDbGFzcyBwKSB7CisgICAgICAgIGZvbygoVGVzdENsYXNzKSA8Y2FyZXQ+KTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvcGFyZW5BZnRlckNhc3QvYWZ0ZXIyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvcGFyZW5BZnRlckNhc3QvYWZ0ZXIyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTAzNmY5NQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9wYXJlbkFmdGVyQ2FzdC9hZnRlcjIuamF2YQpAQCAtMCwwICsxLDUgQEAKK3B1YmxpYyBjbGFzcyBUZXN0Q2xhc3MgeworICAgIFRlc3RDbGFzcyhUZXN0Q2xhc3MgcCl7CisgICAgICAgbmV3IFRlc3RDbGFzcygoVGVzdENsYXNzKSA8Y2FyZXQ+b2JqKS5mKCk7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9wYXJlbkFmdGVyQ2FzdC9hZnRlcjMuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9wYXJlbkFmdGVyQ2FzdC9hZnRlcjMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNDAyMzZjCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL3BhcmVuQWZ0ZXJDYXN0L2FmdGVyMy5qYXZhCkBAIC0wLDAgKzEsOCBAQAorY2xhc3MgQXsKKyB7CisgIFN0cmluZyBzdHIgPSAoU3RyaW5nKWZvbygpPGNhcmV0PgorCisgfQorCisgT2JqZWN0IGZvbygpe30KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvcGFyZW5BZnRlckNhc3QvYmVmb3JlMS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL3BhcmVuQWZ0ZXJDYXN0L2JlZm9yZTEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lODkxNmFiCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL3BhcmVuQWZ0ZXJDYXN0L2JlZm9yZTEuamF2YQpAQCAtMCwwICsxLDUgQEAKK3B1YmxpYyBjbGFzcyBUZXN0Q2xhc3MgeworICAgIHB1YmxpYyB2b2lkIGZvbyhUZXN0Q2xhc3MgcCkgeworICAgICAgICBmb28oKDxjYXJldD4pOworICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9wYXJlbkFmdGVyQ2FzdC9iZWZvcmUyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvcGFyZW5BZnRlckNhc3QvYmVmb3JlMi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFlNjMxNzEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvcGFyZW5BZnRlckNhc3QvYmVmb3JlMi5qYXZhCkBAIC0wLDAgKzEsNSBAQAorcHVibGljIGNsYXNzIFRlc3RDbGFzcyB7CisgICAgVGVzdENsYXNzKFRlc3RDbGFzcyBwKXsKKyAgICAgICBuZXcgVGVzdENsYXNzKCg8Y2FyZXQ+QUFBKW9iaikuZigpOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvcGFyZW5BZnRlckNhc3QvYmVmb3JlMy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL3BhcmVuQWZ0ZXJDYXN0L2JlZm9yZTMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMDFlYWM2Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL3BhcmVuQWZ0ZXJDYXN0L2JlZm9yZTMuamF2YQpAQCAtMCwwICsxLDggQEAKK2NsYXNzIEF7CisgeworICBTdHJpbmcgc3RyID0gKFN0cmluZylmbzxjYXJldD4KKworIH0KKworIE9iamVjdCBmb28oKXt9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL3BhcmVuQWZ0ZXJJZi9hZnRlcjEuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9wYXJlbkFmdGVySWYvYWZ0ZXIxLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWYxMWQ3ZQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9wYXJlbkFmdGVySWYvYWZ0ZXIxLmphdmEKQEAgLTAsMCArMSw1IEBACitwdWJsaWMgY2xhc3MgVGVzdENsYXNzIHsKKyAgICBwdWJsaWMgdm9pZCBmb28oYm9vbGVhbiBwYXJtKSB7CisgICAgICAgIGlmIChwYXJtKTxjYXJldD4KKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL3BhcmVuQWZ0ZXJJZi9hZnRlcjIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9wYXJlbkFmdGVySWYvYWZ0ZXIyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWYxMWQ3ZQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9wYXJlbkFmdGVySWYvYWZ0ZXIyLmphdmEKQEAgLTAsMCArMSw1IEBACitwdWJsaWMgY2xhc3MgVGVzdENsYXNzIHsKKyAgICBwdWJsaWMgdm9pZCBmb28oYm9vbGVhbiBwYXJtKSB7CisgICAgICAgIGlmIChwYXJtKTxjYXJldD4KKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL3BhcmVuQWZ0ZXJJZi9iZWZvcmUxLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvcGFyZW5BZnRlcklmL2JlZm9yZTEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZjlmYzRiCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL3BhcmVuQWZ0ZXJJZi9iZWZvcmUxLmphdmEKQEAgLTAsMCArMSw1IEBACitwdWJsaWMgY2xhc3MgVGVzdENsYXNzIHsKKyAgICBwdWJsaWMgdm9pZCBmb28oYm9vbGVhbiBwYXJtKSB7CisgICAgICAgIGlmIChwPGNhcmV0PgorICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvcGFyZW5BZnRlcklmL2JlZm9yZTIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9wYXJlbkFmdGVySWYvYmVmb3JlMi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIyODkyNTYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvcGFyZW5BZnRlcklmL2JlZm9yZTIuamF2YQpAQCAtMCwwICsxLDUgQEAKK3B1YmxpYyBjbGFzcyBUZXN0Q2xhc3MgeworICAgIHB1YmxpYyB2b2lkIGZvbyhib29sZWFuIHBhcm0pIHsKKyAgICAgICAgaWYgKHA8Y2FyZXQ+KQorICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvcmV0dXJuL2FmdGVyMS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL3JldHVybi9hZnRlcjEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNDViMmZmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL3JldHVybi9hZnRlcjEuamF2YQpAQCAtMCwwICsxLDEyIEBACitjbGFzcyBBeworICBjbGFzcyBCeworICAgIGludCBmb29vKCl7CisgICAgfQorICB9CisKKyAgaW50IGZvb28oKXsKKyAgICBCIGIgPSBudWxsOworCisgICAgcmV0dXJuIGIuZm9vbygpOzxjYXJldD4KKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9yZXR1cm4vYWZ0ZXIyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvcmV0dXJuL2FmdGVyMi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE2ODAzM2UKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvcmV0dXJuL2FmdGVyMi5qYXZhCkBAIC0wLDAgKzEsMTIgQEAKK2NsYXNzIEF7CisgIGNsYXNzIEJ7CisgICAgaW50IGZvb28oKXsKKyAgICB9CisgIH0KKworICBpbnQgZm9vbygpeworICAgIEEgYiA9IG51bGw7CisKKyAgICByZXR1cm4gYi5mb29vKCk7PGNhcmV0PgorICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL3JldHVybi9hZnRlcjMuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9yZXR1cm4vYWZ0ZXIzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDJhYjAyYgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9yZXR1cm4vYWZ0ZXIzLmphdmEKQEAgLTAsMCArMSwxMiBAQAorY2xhc3MgQXsKKyAgY2xhc3MgQnsKKyAgICBpbnQgZm9vbygpeworICAgIH0KKyAgfQorCisgIGludCBmb29vKCl7CisgICAgQSBiID0gbnVsbDsKKworICAgIHJldHVybiBmbzxjYXJldD4KKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9yZXR1cm4vYmVmb3JlMS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL3JldHVybi9iZWZvcmUxLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjk3ZTU3ZQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9yZXR1cm4vYmVmb3JlMS5qYXZhCkBAIC0wLDAgKzEsMTIgQEAKK2NsYXNzIEF7CisgIGNsYXNzIEJ7CisgICAgaW50IGZvb28oKXsKKyAgICB9CisgIH0KKworICBpbnQgZm9vbygpeworICAgIEIgYiA9IG51bGw7CisKKyAgICByZXR1cm4gYi5mbzxjYXJldD4KKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9yZXR1cm4vYmVmb3JlMi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL3JldHVybi9iZWZvcmUyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjY0NWViZAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9yZXR1cm4vYmVmb3JlMi5qYXZhCkBAIC0wLDAgKzEsMTIgQEAKK2NsYXNzIEF7CisgIGNsYXNzIEJ7CisgICAgaW50IGZvb28oKXsKKyAgICB9CisgIH0KKworICBpbnQgZm9vbygpeworICAgIEEgYiA9IG51bGw7CisKKyAgICByZXR1cm4gYi5mbzxjYXJldD4KKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9yZXR1cm4vYmVmb3JlMy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL3JldHVybi9iZWZvcmUzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDJhYjAyYgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9yZXR1cm4vYmVmb3JlMy5qYXZhCkBAIC0wLDAgKzEsMTIgQEAKK2NsYXNzIEF7CisgIGNsYXNzIEJ7CisgICAgaW50IGZvb28oKXsKKyAgICB9CisgIH0KKworICBpbnQgZm9vbygpeworICAgIEEgYiA9IG51bGw7CisKKyAgICByZXR1cm4gZm88Y2FyZXQ+CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvc2Vjb25kL0FycmF5TWVtYmVyQWNjZXNzLW91dC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL3NlY29uZC9BcnJheU1lbWJlckFjY2Vzcy1vdXQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMTYxMDg3Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL3NlY29uZC9BcnJheU1lbWJlckFjY2Vzcy1vdXQuamF2YQpAQCAtMCwwICsxLDYgQEAKK2NsYXNzIEdvbyB7CisgICAgeworICAgICAgICBib29sZWFuW10gbG9zOworICAgICAgICBib29sZWFuIGEgPSBsb3NbPGNhcmV0Pl07CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL3NlY29uZC9BcnJheU1lbWJlckFjY2Vzcy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL3NlY29uZC9BcnJheU1lbWJlckFjY2Vzcy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZiMmYwZDYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvc2Vjb25kL0FycmF5TWVtYmVyQWNjZXNzLmphdmEKQEAgLTAsMCArMSw2IEBACitjbGFzcyBHb28geworICAgIHsKKyAgICAgICAgYm9vbGVhbltdIGxvczsKKyAgICAgICAgYm9vbGVhbiBhID0gbG9zPGNhcmV0PgorICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9zZWNvbmQvQXJyYXlSZWZBc1F1YWxpZmllci1vdXQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9zZWNvbmQvQXJyYXlSZWZBc1F1YWxpZmllci1vdXQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OTNkOWQ1Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL3NlY29uZC9BcnJheVJlZkFzUXVhbGlmaWVyLW91dC5qYXZhCkBAIC0wLDAgKzEsMTEgQEAKK2NsYXNzIEJhciB7CisgIEdvbyBnZXRHb28oKTsKK30KK2NsYXNzIEdvbyB7fQorCitjbGFzcyBGb28geworICB7CisgICAgQmFyW10gcmVmID0gbmV3IEJhclsxXTsKKyAgICBHb28gZyA9IHJlZlswXS5nZXRHb28oKTs8Y2FyZXQ+CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvc2Vjb25kL0FycmF5UmVmQXNRdWFsaWZpZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9zZWNvbmQvQXJyYXlSZWZBc1F1YWxpZmllci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUzZTRiNjgKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvc2Vjb25kL0FycmF5UmVmQXNRdWFsaWZpZXIuamF2YQpAQCAtMCwwICsxLDExIEBACitjbGFzcyBCYXIgeworICBHb28gZ2V0R29vKCk7Cit9CitjbGFzcyBHb28ge30KKworY2xhc3MgRm9vIHsKKyAgeworICAgIEJhcltdIHJlZiA9IG5ldyBCYXJbMV07CisgICAgR29vIGcgPSA8Y2FyZXQ+CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvc2Vjb25kL0Nhc3RJbnN0YW5jZW9mZWRRdWFsaWZpZXItb3V0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvc2Vjb25kL0Nhc3RJbnN0YW5jZW9mZWRRdWFsaWZpZXItb3V0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzk0M2Y0NQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9zZWNvbmQvQ2FzdEluc3RhbmNlb2ZlZFF1YWxpZmllci1vdXQuamF2YQpAQCAtMCwwICsxLDE5IEBACitpbnRlcmZhY2UgWmlwIGV4dGVuZHMgQmFyeworICBGb28gZ2V0WmlwKCk7Cit9CisKK2ludGVyZmFjZSBCYXIge30KKworY2xhc3MgRm9vIHsKKworfQorCitjbGFzcyBHb28geworICAgIHsKKyAgICAgICAgQmFyIG87CisgICAgICAgIGlmIChvIGluc3RhbmNlb2YgWmlwKSB7CisgICAgICAgICAgRm9vIGYgPSAoKFppcCkgbykuZ2V0WmlwKCk7PGNhcmV0PgorICAgICAgICB9CisgICAgfQorfQorCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvc2Vjb25kL0Nhc3RJbnN0YW5jZW9mZWRRdWFsaWZpZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9zZWNvbmQvQ2FzdEluc3RhbmNlb2ZlZFF1YWxpZmllci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEzMjc1ZDIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvc2Vjb25kL0Nhc3RJbnN0YW5jZW9mZWRRdWFsaWZpZXIuamF2YQpAQCAtMCwwICsxLDE5IEBACitpbnRlcmZhY2UgWmlwIGV4dGVuZHMgQmFyeworICBGb28gZ2V0WmlwKCk7Cit9CisKK2ludGVyZmFjZSBCYXIge30KKworY2xhc3MgRm9vIHsKKworfQorCitjbGFzcyBHb28geworICAgIHsKKyAgICAgICAgQmFyIG87CisgICAgICAgIGlmIChvIGluc3RhbmNlb2YgWmlwKSB7CisgICAgICAgICAgRm9vIGYgPSA8Y2FyZXQ+CisgICAgICAgIH0KKyAgICB9Cit9CisKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9zZWNvbmQvQ2hhaW5pbmdQZXJmb3JtYW5jZS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL3NlY29uZC9DaGFpbmluZ1BlcmZvcm1hbmNlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTQxMjVjYwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9zZWNvbmQvQ2hhaW5pbmdQZXJmb3JtYW5jZS5qYXZhCkBAIC0wLDAgKzEsNyBAQAorY2xhc3MgRm9vIGV4dGVuZHMgamF2YXguc3dpbmcuSkNvbXBvbmVudCB7CisKKyAgICB7CisgICAgICAgIFN0cmluZyBjbCA9IDxjYXJldD4KKyAgICB9CisKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9zZWNvbmQvRGlmZmVyZW50UXVhbGlmaWVycy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL3NlY29uZC9EaWZmZXJlbnRRdWFsaWZpZXJzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmEyYzU2YgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9zZWNvbmQvRGlmZmVyZW50UXVhbGlmaWVycy5qYXZhCkBAIC0wLDAgKzEsMTQgQEAKK2NsYXNzIEJhciB7CisgIEdvbyBnZXRHb28oaW50IGEpOworfQorY2xhc3MgR29vIHt9CisKK2NsYXNzIEZvbyB7CisgIEJhciBnZXRCYXIoKSB7fQorICBCYXIgYjsKKworCisgIHsKKyAgICBHb28gZyA9IDxjYXJldD4KKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9zZWNvbmQvRG9udENoYWluU3RyaW5nTWV0aG9kc09uU3RyaW5nLW91dC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL3NlY29uZC9Eb250Q2hhaW5TdHJpbmdNZXRob2RzT25TdHJpbmctb3V0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2U2MGYyYgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9zZWNvbmQvRG9udENoYWluU3RyaW5nTWV0aG9kc09uU3RyaW5nLW91dC5qYXZhCkBAIC0wLDAgKzEsOSBAQAorY2xhc3MgRm9vIHsKKworICAgU3RyaW5nIGFmb28oKTsKKworICAgIHsKKyAgICAgICAgU3RyaW5nIGNsID0gYWZvbygpOzxjYXJldD4KKyAgICB9CisKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9zZWNvbmQvRG9udENoYWluU3RyaW5nTWV0aG9kc09uU3RyaW5nLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvc2Vjb25kL0RvbnRDaGFpblN0cmluZ01ldGhvZHNPblN0cmluZy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk3NTFhNjk4Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL3NlY29uZC9Eb250Q2hhaW5TdHJpbmdNZXRob2RzT25TdHJpbmcuamF2YQpAQCAtMCwwICsxLDkgQEAKK2NsYXNzIEZvbyB7CisKKyAgIFN0cmluZyBhZm9vKCk7CisKKyAgICB7CisgICAgICAgIFN0cmluZyBjbCA9IGFmPGNhcmV0PgorICAgIH0KKworfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL3NlY29uZC9Eb250SWdub3JlVG9TdHJpbmdJblN0cmluZ0J1aWxkZXJzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvc2Vjb25kL0RvbnRJZ25vcmVUb1N0cmluZ0luU3RyaW5nQnVpbGRlcnMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZWQyOWVmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL3NlY29uZC9Eb250SWdub3JlVG9TdHJpbmdJblN0cmluZ0J1aWxkZXJzLmphdmEKQEAgLTAsMCArMSw4IEBACitjbGFzcyBGb28geworCisgICAgcHVibGljIFN0cmluZyBmb28oKSB7CisgICAgICAgIEFic3RyYWN0U3RyaW5nQnVpbGRlciBiYXI7CisgICAgICAgIFN0cmluZyBmID0gYjxjYXJldD4KKyAgICB9CisKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9zZWNvbmQvRG9udElnbm9yZVRvU3RyaW5nSW5zaWRlSXQtb3V0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvc2Vjb25kL0RvbnRJZ25vcmVUb1N0cmluZ0luc2lkZUl0LW91dC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE3ZTRlNDEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvc2Vjb25kL0RvbnRJZ25vcmVUb1N0cmluZ0luc2lkZUl0LW91dC5qYXZhCkBAIC0wLDAgKzEsOCBAQAorY2xhc3MgRm9vIHsKKworICAgIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7CisgICAgICAgIEZvbyBiYXI7CisgICAgICAgIFN0cmluZyBmID0gYmFyLnRvU3RyaW5nKCk7PGNhcmV0PgorICAgIH0KKworfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL3NlY29uZC9Eb250SWdub3JlVG9TdHJpbmdJbnNpZGVJdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL3NlY29uZC9Eb250SWdub3JlVG9TdHJpbmdJbnNpZGVJdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZjZTQ3NjAKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvc2Vjb25kL0RvbnRJZ25vcmVUb1N0cmluZ0luc2lkZUl0LmphdmEKQEAgLTAsMCArMSw4IEBACitjbGFzcyBGb28geworCisgICAgcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKKyAgICAgICAgRm9vIGJhcjsKKyAgICAgICAgU3RyaW5nIGYgPSBiPGNhcmV0PgorICAgIH0KKworfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL3NlY29uZC9Eb250U3VnZ2VzdFRvb0dlbmVyaWNNZXRob2RzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvc2Vjb25kL0RvbnRTdWdnZXN0VG9vR2VuZXJpY01ldGhvZHMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OTYxN2VlCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL3NlY29uZC9Eb250U3VnZ2VzdFRvb0dlbmVyaWNNZXRob2RzLmphdmEKQEAgLTAsMCArMSwxOSBAQAoraW50ZXJmYWNlIFppcCBleHRlbmRzIEJhcnt9CisKK2ludGVyZmFjZSBCYXIge30KKworaW50ZXJmYWNlIEZvbyB7CisgICAgPFQ+IFQgYW55KCk7CisgICAgPFQgZXh0ZW5kcyBHb28+IFQgZ29vQW55KCk7CisgICAgPFQgZXh0ZW5kcyBaaXA+IFQgemlwQW55KCk7CisgICAgPFQgZXh0ZW5kcyBCYXI+IFQgYmFyQW55KCk7CisKK30KKworY2xhc3MgR29vIHsKKyAgICB7CisgICAgICAgIEZvbyBmOworICAgICAgICBCYXIgYSA9IGY8Y2FyZXQ+CisgICAgfQorfQorCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvc2Vjb25kL0VtcHR5TGlzdEluTWV0aG9kQ2FsbC1vdXQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9zZWNvbmQvRW1wdHlMaXN0SW5NZXRob2RDYWxsLW91dC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI0MzEyNTAKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvc2Vjb25kL0VtcHR5TGlzdEluTWV0aG9kQ2FsbC1vdXQuamF2YQpAQCAtMCwwICsxLDEzIEBACitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb25zOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitwdWJsaWMgY2xhc3MgU29tZUNsYXNzIHsKKyAgICB2b2lkIGZvbyhMaXN0PFN0cmluZz4gbCkgeworCisgICAgfQorCisgICAgeworICAgICAgICBmb28oQ29sbGVjdGlvbnMuPFN0cmluZz5lbXB0eUxpc3QoKSk7PGNhcmV0PgorICAgIH0KKworfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL3NlY29uZC9FbXB0eUxpc3RJbk1ldGhvZENhbGwuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9zZWNvbmQvRW1wdHlMaXN0SW5NZXRob2RDYWxsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjUwYTFkZQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9zZWNvbmQvRW1wdHlMaXN0SW5NZXRob2RDYWxsLmphdmEKQEAgLTAsMCArMSwxMiBAQAoraW1wb3J0IGphdmEudXRpbC5MaXN0OworCitwdWJsaWMgY2xhc3MgU29tZUNsYXNzIHsKKyAgICB2b2lkIGZvbyhMaXN0PFN0cmluZz4gbCkgeworCisgICAgfQorCisgICAgeworICAgICAgICBmb28oZW08Y2FyZXQ+KQorICAgIH0KKworfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL3NlY29uZC9FbXB0eU1hcFByZXNlbnRhdGlvbi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL3NlY29uZC9FbXB0eU1hcFByZXNlbnRhdGlvbi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjExMTg0ZjQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvc2Vjb25kL0VtcHR5TWFwUHJlc2VudGF0aW9uLmphdmEKQEAgLTAsMCArMSwxMiBAQAoraW1wb3J0IGphdmEudXRpbC5NYXA7CisKK3B1YmxpYyBjbGFzcyBGb28geworCisgIHZvaWQgZm9vKE1hcDxTdHJpbmcsIFN0cmluZz4gbWFwKSB7CisgICAgCisgIH0KKworICB2b2lkIGJhcigpIHsKKyAgICBmb28oZW08Y2FyZXQ+KQorICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL3NlY29uZC9FbXB0eU1hcFByZXNlbnRhdGlvbjIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9zZWNvbmQvRW1wdHlNYXBQcmVzZW50YXRpb24yLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDkwMTdhYwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9zZWNvbmQvRW1wdHlNYXBQcmVzZW50YXRpb24yLmphdmEKQEAgLTAsMCArMSw4IEBACitpbXBvcnQgamF2YS51dGlsLk1hcDsKKworcHVibGljIGNsYXNzIEZvbyB7CisKKyAgU2V0PFN0cmluZz4gYmFyKCkgeworICAgIE1hcDxTdHJpbmcsIFN0cmluZz4gcyA9IGVtPGNhcmV0PgorICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL3NlY29uZC9GaWVsZEFzUXVhbGlmaWVyLW91dC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL3NlY29uZC9GaWVsZEFzUXVhbGlmaWVyLW91dC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVjMzQ5NDQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvc2Vjb25kL0ZpZWxkQXNRdWFsaWZpZXItb3V0LmphdmEKQEAgLTAsMCArMSwxMyBAQAorY2xhc3MgQmFyIHsKKyAgR29vIGdvbzsKK30KK2NsYXNzIEdvbyB7fQorCitjbGFzcyBGb28geworICBCYXIgYjsKKworCisgIHsKKyAgICBHb28gZyA9IGIuZ29vOzxjYXJldD4KKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9zZWNvbmQvRmllbGRBc1F1YWxpZmllci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL3NlY29uZC9GaWVsZEFzUXVhbGlmaWVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODczYzVlYQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9zZWNvbmQvRmllbGRBc1F1YWxpZmllci5qYXZhCkBAIC0wLDAgKzEsMTMgQEAKK2NsYXNzIEJhciB7CisgIEdvbyBnb287Cit9CitjbGFzcyBHb28ge30KKworY2xhc3MgRm9vIHsKKyAgQmFyIGI7CisKKworICB7CisgICAgR29vIGcgPSA8Y2FyZXQ+CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvc2Vjb25kL0dlbmVyaWNzLW91dC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL3NlY29uZC9HZW5lcmljcy1vdXQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNTI2OWNjCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL3NlY29uZC9HZW5lcmljcy1vdXQuamF2YQpAQCAtMCwwICsxLDEzIEBACitjbGFzcyBCYXI8VD4geworICBUIGdldEdvbyhpbnQgYSk7Cit9CitjbGFzcyBHb28ge30KKworY2xhc3MgRm9vIHsKKyAgQmFyPEdvbz4gYmdldEJhcigpIHt9CisKKworICB7CisgICAgR29vIGcgPSBiZ2V0QmFyKCkuZ2V0R29vKDxjYXJldD4pOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL3NlY29uZC9HZW5lcmljcy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL3NlY29uZC9HZW5lcmljcy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBkNDA4ODkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvc2Vjb25kL0dlbmVyaWNzLmphdmEKQEAgLTAsMCArMSwxMyBAQAorY2xhc3MgQmFyPFQ+IHsKKyAgVCBnZXRHb28oaW50IGEpOworfQorY2xhc3MgR29vIHt9CisKK2NsYXNzIEZvbyB7CisgIEJhcjxHb28+IGJnZXRCYXIoKSB7fQorCisKKyAgeworICAgIEdvbyBnID0gYjxjYXJldD4KKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9zZWNvbmQvR2V0Q2xhc3NMb2FkZXItb3V0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvc2Vjb25kL0dldENsYXNzTG9hZGVyLW91dC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNiZWE2Y2QKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvc2Vjb25kL0dldENsYXNzTG9hZGVyLW91dC5qYXZhCkBAIC0wLDAgKzEsNyBAQAorY2xhc3MgRm9vIHsKKworICAgIHsKKyAgICAgICAgQ2xhc3NMb2FkZXIgY2wgPSBnZXRDbGFzcygpLmdldENsYXNzTG9hZGVyKCk7PGNhcmV0PgorICAgIH0KKworfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL3NlY29uZC9HZXRDbGFzc0xvYWRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL3NlY29uZC9HZXRDbGFzc0xvYWRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQwNzYwZGMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvc2Vjb25kL0dldENsYXNzTG9hZGVyLmphdmEKQEAgLTAsMCArMSw3IEBACitjbGFzcyBGb28geworCisgICAgeworICAgICAgICBDbGFzc0xvYWRlciBjbCA9IGdldENsPGNhcmV0PgorICAgIH0KKworfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL3NlY29uZC9HbG9iYWxGYWN0b3J5TWV0aG9kcy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL3NlY29uZC9HbG9iYWxGYWN0b3J5TWV0aG9kcy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEwZDM4M2EKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvc2Vjb25kL0dsb2JhbEZhY3RvcnlNZXRob2RzLmphdmEKQEAgLTAsMCArMSwyOSBAQAorY2xhc3MgU3VwZXI8VD4geworfQorCitjbGFzcyBTdWJTdHJpbmcgZXh0ZW5kcyBTdXBlcjxTdHJpbmc+IHsKKyAgcHVibGljIHN0YXRpYyBTdWJTdHJpbmcgY3JlYXRlU3ViU3RyaW5nKCkge30KK30KK2NsYXNzIFN1YkludCBleHRlbmRzIFN1cGVyPEludGVnZXI+IHsgfQorY2xhc3MgU3ViR2VuZXJpYzxUPiBleHRlbmRzIFN1cGVyPFQ+IHsgfQorY2xhc3MgU3ViUmF3IGV4dGVuZHMgU3VwZXIgeyB9CisKK2ludGVyZmFjZSBDb25zdGFudHMgeworICBTdWJTdHJpbmcgU1VCU1RSSU5HID0gbnVsbAorfQorCitjbGFzcyBGYWN0b3J5IHsKKyAgcHVibGljIHN0YXRpYyBPYmplY3QgY3JlYXRlT2JqZWN0KCkge30KKyAgcHVibGljIHN0YXRpYyA8VD4gU3VwZXI8VD4gY3JlYXRlRXhwZWN0ZWQoKSB7fQorICBwdWJsaWMgc3RhdGljIFN1cGVyPEludGVnZXI+IGNyZWF0ZVN1cGVySW50KCkge30KKyAgcHVibGljIHN0YXRpYyBTdWJJbnQgY3JlYXRlU3ViSW50KCkge30KKyAgcHVibGljIHN0YXRpYyA8VD4gU3ViR2VuZXJpYzxUPiBjcmVhdGVTdWJHZW5lcmljKCkge30KKyAgcHVibGljIHN0YXRpYyBTdWJSYXcgY3JlYXRlU3ViUmF3KCkge30KK30KKworY2xhc3MgSW50ZXJtZWRpYXRlIHsKKworICAgIFN1cGVyPFN0cmluZz4gcyA9IDxjYXJldD4KK30KKworCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvc2Vjb25kL0lnbm9yZVRvU3RyaW5nLW91dC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL3NlY29uZC9JZ25vcmVUb1N0cmluZy1vdXQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41Y2U4MTcwCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL3NlY29uZC9JZ25vcmVUb1N0cmluZy1vdXQuamF2YQpAQCAtMCwwICsxLDEwIEBACitjbGFzcyBGb28geworCisgICAgU3RyaW5nIGZvbygpOworCisgICAgeworICAgICAgICBGb28gYmFyOworICAgICAgICBTdHJpbmcgZiA9IGJhci5mb28oKTs8Y2FyZXQ+CisgICAgfQorCit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvc2Vjb25kL0lnbm9yZVRvU3RyaW5nLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvc2Vjb25kL0lnbm9yZVRvU3RyaW5nLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDBhOWE3ZgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9zZWNvbmQvSWdub3JlVG9TdHJpbmcuamF2YQpAQCAtMCwwICsxLDEwIEBACitjbGFzcyBGb28geworCisgICAgU3RyaW5nIGZvbygpOworCisgICAgeworICAgICAgICBGb28gYmFyOworICAgICAgICBTdHJpbmcgZiA9IGI8Y2FyZXQ+CisgICAgfQorCit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvc2Vjb25kL0luaGVyaXRvckVudW1NZW1iZXJzLW91dC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL3NlY29uZC9Jbmhlcml0b3JFbnVtTWVtYmVycy1vdXQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41Y2QxOTRjCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL3NlY29uZC9Jbmhlcml0b3JFbnVtTWVtYmVycy1vdXQuamF2YQpAQCAtMCwwICsxLDE3IEBACitpbnRlcmZhY2UgRm9vIHsKK30KKworZW51bSBGb29FbnVtIGltcGxlbWVudHMgRm9vIHsKKyAgICBPTkUsIFRXTzsKK30KKworY2xhc3MgRG9vIHsKKyAgICB2b2lkIGRvU29tZXRoaW5nKEZvbyBmKSB7CisgICAgfQorCisgICAgdm9pZCBkb1NvbWV0aGluZ0Vsc2UoKSB7CisgICAgICAgIGRvU29tZXRoaW5nKEZvb0VudW0uT05FKTs8Y2FyZXQ+CisgICAgfQorCit9CisKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9zZWNvbmQvSW5oZXJpdG9yRW51bU1lbWJlcnMuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9zZWNvbmQvSW5oZXJpdG9yRW51bU1lbWJlcnMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYTE2NjJjCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL3NlY29uZC9Jbmhlcml0b3JFbnVtTWVtYmVycy5qYXZhCkBAIC0wLDAgKzEsMTcgQEAKK2ludGVyZmFjZSBGb28geworfQorCitlbnVtIEZvb0VudW0gaW1wbGVtZW50cyBGb28geworICAgIE9ORSwgVFdPOworfQorCitjbGFzcyBEb28geworICAgIHZvaWQgZG9Tb21ldGhpbmcoRm9vIGYpIHsKKyAgICB9CisKKyAgICB2b2lkIGRvU29tZXRoaW5nRWxzZSgpIHsKKyAgICAgICAgZG9Tb21ldGhpbmcoTzxjYXJldD4pOworICAgIH0KKworfQorCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvc2Vjb25kL0luaGVyaXRvck1lbWJlcnMtb3V0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvc2Vjb25kL0luaGVyaXRvck1lbWJlcnMtb3V0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTBjYzlmOGEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvc2Vjb25kL0luaGVyaXRvck1lbWJlcnMtb3V0LmphdmEKQEAgLTAsMCArMSwxMyBAQAorY2xhc3MgU3VwZXIgeworfQorCitjbGFzcyBTdWIgZXh0ZW5kcyBTdXBlciB7CisgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3VwZXIgRk9PID0gbnVsbDsKK30KKworY2xhc3MgSW50ZXJtZWRpYXRlIHsKKworICAgIFN1cGVyIHMgPSBTdWIuRk9POzxjYXJldD4KK30KKworCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvc2Vjb25kL0luaGVyaXRvck1lbWJlcnMuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9zZWNvbmQvSW5oZXJpdG9yTWVtYmVycy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVlZmYxNGYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvc2Vjb25kL0luaGVyaXRvck1lbWJlcnMuamF2YQpAQCAtMCwwICsxLDEzIEBACitjbGFzcyBTdXBlciB7Cit9CisKK2NsYXNzIFN1YiBleHRlbmRzIFN1cGVyIHsKKyAgcHVibGljIHN0YXRpYyBmaW5hbCBTdXBlciBGT08gPSBudWxsOworfQorCitjbGFzcyBJbnRlcm1lZGlhdGUgeworCisgICAgU3VwZXIgcyA9IEY8Y2FyZXQ+Cit9CisKKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL3NlY29uZC9NZXJnZU1ldGhvZHMtb3V0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvc2Vjb25kL01lcmdlTWV0aG9kcy1vdXQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMTUyODRmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL3NlY29uZC9NZXJnZU1ldGhvZHMtb3V0LmphdmEKQEAgLTAsMCArMSwxNCBAQAorY2xhc3MgQmFyIHsKKyAgR29vIGdldEdvbyhpbnQgYSk7CisgIEdvbyBnZXRHb28oKTsKK30KK2NsYXNzIEdvbyB7fQorCitjbGFzcyBGb28geworICBCYXIgZ2V0QmFyKCkge30KKworCisgIHsKKyAgICBHb28gZyA9IGdldEJhcigpLmdldEdvbyg8Y2FyZXQ+KTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9zZWNvbmQvTWVyZ2VNZXRob2RzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvc2Vjb25kL01lcmdlTWV0aG9kcy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhiYjZiMWYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvc2Vjb25kL01lcmdlTWV0aG9kcy5qYXZhCkBAIC0wLDAgKzEsMTQgQEAKK2NsYXNzIEJhciB7CisgIEdvbyBnZXRHb28oaW50IGEpOworICBHb28gZ2V0R29vKCk7Cit9CitjbGFzcyBHb28ge30KKworY2xhc3MgRm9vIHsKKyAgQmFyIGdldEJhcigpIHt9CisKKworICB7CisgICAgR29vIGcgPSA8Y2FyZXQ+CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvc2Vjb25kL01ldGhvZEFzUXVhbGlmaWVyLW91dC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL3NlY29uZC9NZXRob2RBc1F1YWxpZmllci1vdXQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NTllYmYwCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL3NlY29uZC9NZXRob2RBc1F1YWxpZmllci1vdXQuamF2YQpAQCAtMCwwICsxLDEzIEBACitjbGFzcyBCYXIgeworICBHb28gZ2V0R29vKCk7Cit9CitjbGFzcyBHb28ge30KKworY2xhc3MgRm9vIHsKKyAgQmFyIGdldEJhcigpIHt9CisKKworICB7CisgICAgR29vIGcgPSBnZXRCYXIoKS5nZXRHb28oKTs8Y2FyZXQ+CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvc2Vjb25kL01ldGhvZEFzUXVhbGlmaWVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvc2Vjb25kL01ldGhvZEFzUXVhbGlmaWVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTMyYmE4MQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9zZWNvbmQvTWV0aG9kQXNRdWFsaWZpZXIuamF2YQpAQCAtMCwwICsxLDEzIEBACitjbGFzcyBCYXIgeworICBHb28gZ2V0R29vKCk7Cit9CitjbGFzcyBHb28ge30KKworY2xhc3MgRm9vIHsKKyAgQmFyIGdldEJhcigpIHt9CisKKworICB7CisgICAgR29vIGcgPSA8Y2FyZXQ+CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvc2Vjb25kL01ldGhvZERlbGVnYXRpb24tb3V0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvc2Vjb25kL01ldGhvZERlbGVnYXRpb24tb3V0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjAxOGQzOQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9zZWNvbmQvTWV0aG9kRGVsZWdhdGlvbi1vdXQuamF2YQpAQCAtMCwwICsxLDkgQEAKK2NsYXNzIEJhciB7fQorCitjbGFzcyBGb28geworICBGb28gbXlGb287CisKKyAgQmFyIGdldEJhcigpIHsKKyAgICByZXR1cm4gbXlGb28uZ2V0QmFyKCk7PGNhcmV0PgorICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL3NlY29uZC9NZXRob2REZWxlZ2F0aW9uLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvc2Vjb25kL01ldGhvZERlbGVnYXRpb24uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMmFlNmE0Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL3NlY29uZC9NZXRob2REZWxlZ2F0aW9uLmphdmEKQEAgLTAsMCArMSw5IEBACitjbGFzcyBCYXIge30KKworY2xhc3MgRm9vIHsKKyAgRm9vIG15Rm9vOworCisgIEJhciBnZXRCYXIoKSB7CisgICAgcmV0dXJuIG08Y2FyZXQ+CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvc2Vjb25kL01ldGhvZFdpdGhQYXJhbXMtb3V0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvc2Vjb25kL01ldGhvZFdpdGhQYXJhbXMtb3V0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWE0ZTE3YwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9zZWNvbmQvTWV0aG9kV2l0aFBhcmFtcy1vdXQuamF2YQpAQCAtMCwwICsxLDEzIEBACitjbGFzcyBCYXIgeworICBHb28gZ2V0R29vKGludCBhKTsKK30KK2NsYXNzIEdvbyB7fQorCitjbGFzcyBGb28geworICBCYXIgZ2V0QmFyKCkge30KKworCisgIHsKKyAgICBHb28gZyA9IGdldEJhcigpLmdldEdvbyg8Y2FyZXQ+KTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9zZWNvbmQvTWV0aG9kV2l0aFBhcmFtcy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL3NlY29uZC9NZXRob2RXaXRoUGFyYW1zLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGFlN2UwOAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9zZWNvbmQvTWV0aG9kV2l0aFBhcmFtcy5qYXZhCkBAIC0wLDAgKzEsMTMgQEAKK2NsYXNzIEJhciB7CisgIEdvbyBnZXRHb28oaW50IGEpOworfQorY2xhc3MgR29vIHt9CisKK2NsYXNzIEZvbyB7CisgIEJhciBnZXRCYXIoKSB7fQorCisKKyAgeworICAgIEdvbyBnID0gPGNhcmV0PgorICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL3NlY29uZC9OZXdTdGF0aWNQcm9ibGVtLW91dC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL3NlY29uZC9OZXdTdGF0aWNQcm9ibGVtLW91dC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkzYjY4MzUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvc2Vjb25kL05ld1N0YXRpY1Byb2JsZW0tb3V0LmphdmEKQEAgLTAsMCArMSwxMyBAQAorcHVibGljIGNsYXNzIFRlc3R7CisgICAgCisgICAgcHVibGljIGNsYXNzIEYge30KKyAgICAKKyAgICBwdWJsaWMgaW50IHgoRiBmKSB7CisgICAgICAgIHJldHVybiAxOworICAgIH0KKworICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKyAgICAgICAgVGVzdCB0ZXN0ID0gbmV3IFRlc3QoKTsKKyAgICAgICAgdGVzdC54KG5ldyBGKCkpPGNhcmV0PjsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL3NlY29uZC9OZXdTdGF0aWNQcm9ibGVtLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvc2Vjb25kL05ld1N0YXRpY1Byb2JsZW0uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNDlmZWUwCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL3NlY29uZC9OZXdTdGF0aWNQcm9ibGVtLmphdmEKQEAgLTAsMCArMSwxMyBAQAorcHVibGljIGNsYXNzIFRlc3R7CisgICAgCisgICAgcHVibGljIGNsYXNzIEYge30KKyAgICAKKyAgICBwdWJsaWMgaW50IHgoRiBmKSB7CisgICAgICAgIHJldHVybiAxOworICAgIH0KKworICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKyAgICAgICAgVGVzdCB0ZXN0ID0gbmV3IFRlc3QoKTsKKyAgICAgICAgdGVzdC54KG5ldyA8Y2FyZXQ+KTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL3NlY29uZC9Ob0FycmF5c0FzTGlzdENvbW1vblByZWZpeC1vdXQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9zZWNvbmQvTm9BcnJheXNBc0xpc3RDb21tb25QcmVmaXgtb3V0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTE3YzI4ZAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9zZWNvbmQvTm9BcnJheXNBc0xpc3RDb21tb25QcmVmaXgtb3V0LmphdmEKQEAgLTAsMCArMSwxMiBAQAoraW1wb3J0IGphdmEudXRpbC4qOworCitjbGFzcyBGb28geworCisgICAgU3RyaW5nW10gZm9vKCk7CisgICAgU3RyaW5nW10gYmFyKCk7CisKKyAgICBzdGF0aWMgeworICAgICAgICBGb28gZjsKKyAgICAgICAgTGlzdDxTdHJpbmc+IGcgPSBBcnJheXMuYXNMaXN0KGYuZm9vKCkpOzxjYXJldD4KKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL3NlY29uZC9Ob0FycmF5c0FzTGlzdENvbW1vblByZWZpeC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL3NlY29uZC9Ob0FycmF5c0FzTGlzdENvbW1vblByZWZpeC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI3YmU1ZDEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvc2Vjb25kL05vQXJyYXlzQXNMaXN0Q29tbW9uUHJlZml4LmphdmEKQEAgLTAsMCArMSwxMiBAQAoraW1wb3J0IGphdmEudXRpbC4qOworCitjbGFzcyBGb28geworCisgICAgU3RyaW5nW10gZm9vKCk7CisgICAgU3RyaW5nW10gYmFyKCk7CisKKyAgICBzdGF0aWMgeworICAgICAgICBGb28gZjsKKyAgICAgICAgTGlzdDxTdHJpbmc+IGcgPSBmLjxjYXJldD4KKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL3NlY29uZC9Ob0xlZnRSZWN1cnNpb24uamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9zZWNvbmQvTm9MZWZ0UmVjdXJzaW9uLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzIyNzUzOQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9zZWNvbmQvTm9MZWZ0UmVjdXJzaW9uLmphdmEKQEAgLTAsMCArMSwxNSBAQAorcHVibGljIGNsYXNzIFRlc3QgeworCisgIHN0YXRpYyBNeUVudW0gZ2V0QXZhaWxhYmlsaXR5U3RhdHVzQ29kZSgpIHsKKworICAgIHJldHVybiBnZXRBUzxjYXJldD4KKyAgfQorCisKKyAgcHVibGljIHN0YXRpYyBlbnVtIE15RW51bSB7CisKKyAgICBWQUxVRV8xLAorICAgIFZBTFVFXzIKKyAgfQorCit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL3NlY29uZC9Ob09iamVjdE1ldGhvZHNBc0ZpcnN0UGFydC1vdXQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9zZWNvbmQvTm9PYmplY3RNZXRob2RzQXNGaXJzdFBhcnQtb3V0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDVkY2Q0ZQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9zZWNvbmQvTm9PYmplY3RNZXRob2RzQXNGaXJzdFBhcnQtb3V0LmphdmEKQEAgLTAsMCArMSwxMiBAQAorY2xhc3MgRm9vIHsKKworICAgYm9vbGVhbiBpcygpOworCisgICAgcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKKyAgICAgICAgYm9vbGVhbiBmb287CisgICAgICAgIGJvb2xlYW4gYmFyOworICAgICAgICBGb28gdG87CisgICAgICAgIGJvb2xlYW4gZiA9IHRvLmlzKCk7PGNhcmV0PgorICAgIH0KKworfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL3NlY29uZC9Ob09iamVjdE1ldGhvZHNBc0ZpcnN0UGFydC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL3NlY29uZC9Ob09iamVjdE1ldGhvZHNBc0ZpcnN0UGFydC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA4NGFkMTgKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvc2Vjb25kL05vT2JqZWN0TWV0aG9kc0FzRmlyc3RQYXJ0LmphdmEKQEAgLTAsMCArMSwxMiBAQAorY2xhc3MgRm9vIHsKKworICAgYm9vbGVhbiBpcygpOworCisgICAgcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKKyAgICAgICAgYm9vbGVhbiBmb287CisgICAgICAgIGJvb2xlYW4gYmFyOworICAgICAgICBGb28gdG87CisgICAgICAgIGJvb2xlYW4gZiA9IHRvPGNhcmV0PgorICAgIH0KKworfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL3NlY29uZC9Ob1JlZHVuZGFudENhc3RzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvc2Vjb25kL05vUmVkdW5kYW50Q2FzdHMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOTFlNjcxZQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9zZWNvbmQvTm9SZWR1bmRhbnRDYXN0cy5qYXZhCkBAIC0wLDAgKzEsMTcgQEAKK3B1YmxpYyBhYnN0cmFjdCBjbGFzcyBaenogeworCisgICAgYm9vbGVhbiBnZ2dnKCkge30KKworICAgIHN0YXRpYyB7CisgICAgICAgIFp6eiBvOworICAgICAgICBpZiAobyBpbnN0YW5jZW9mIFl5eSAmJiA8Y2FyZXQ+KSB7CisKKyAgICAgICAgfQorICAgIH0KKworCit9CisKK2NsYXNzIFl5eSBleHRlbmRzIFp6eiB7CisKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvc2Vjb25kL05vVW5xdWFsaWZpZWRDYXN0c0luUXVhbGlmaWVkQ29udGV4dC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL3NlY29uZC9Ob1VucXVhbGlmaWVkQ2FzdHNJblF1YWxpZmllZENvbnRleHQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNTI4NTU3Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL3NlY29uZC9Ob1VucXVhbGlmaWVkQ2FzdHNJblF1YWxpZmllZENvbnRleHQuamF2YQpAQCAtMCwwICsxLDEyIEBACitjbGFzcyBDeworICAgIHsKKyAgICAgICAgT2JqZWN0IG87CisgICAgICAgIGlmIChvIGluc3RhbmNlb2YgRm9vKSB7CisgICAgICAgICAgICBuZXcgT2JqZWN0KCkuZG9mbzxjYXJldD4KKyAgICAgICAgfQorICAgIH0KK30KKworY2xhc3MgRm9vIHsKKyAgICB2b2lkIGRvZm9vKCk7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL3NlY29uZC9Ob25Jbml0aWFsaXplZEZpZWxkLW91dC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL3NlY29uZC9Ob25Jbml0aWFsaXplZEZpZWxkLW91dC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI3NGFjOTkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvc2Vjb25kL05vbkluaXRpYWxpemVkRmllbGQtb3V0LmphdmEKQEAgLTAsMCArMSw3IEBACitjbGFzcyBGb28geworICBpbnQgYWFhOworICBpbnQgYmJiOworICBGb28oKSB7CisgICAgYWFhID0gYmJiOzxjYXJldD4KKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9zZWNvbmQvTm9uSW5pdGlhbGl6ZWRGaWVsZC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL3NlY29uZC9Ob25Jbml0aWFsaXplZEZpZWxkLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZThlZWU1ZAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9zZWNvbmQvTm9uSW5pdGlhbGl6ZWRGaWVsZC5qYXZhCkBAIC0wLDAgKzEsNyBAQAorY2xhc3MgRm9vIHsKKyAgaW50IGFhYTsKKyAgaW50IGJiYjsKKyAgRm9vKCkgeworICAgIGFhYSA9IGI8Y2FyZXQ+CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvc2Vjb25kL1ByZWZlckZpZWxkQW5kR2V0dGVyUXVhbGlmaWVycy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL3NlY29uZC9QcmVmZXJGaWVsZEFuZEdldHRlclF1YWxpZmllcnMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MDc2Y2ZmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL3NlY29uZC9QcmVmZXJGaWVsZEFuZEdldHRlclF1YWxpZmllcnMuamF2YQpAQCAtMCwwICsxLDIwIEBACitjbGFzcyBGb28geworCit9CisKK2NsYXNzIEJhciB7CisgIEZvbyBnZXRGb28oKSB7fQorfQorCitjbGFzcyBNYWluIHsKKyAgeworICAgIEJhciBsb2NhbEJhciA9IGJhcjsKKyAgICBGb28gZiA9IDxjYXJldD4KKyAgfQorCisgIEJhciBiYXI7CisgIEJhciBnZXRCYXIoKSB7IHJldHVybiBiYXI7IH0KKyAgQmFyIGZpbmRCYXIoKSB7IHJldHVybiBnZXRCYXIoKTsgfQorCisKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvc2Vjb25kL1F1YWxpZmllZEFycmF5TWVtYmVyQWNjZXNzLW91dC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL3NlY29uZC9RdWFsaWZpZWRBcnJheU1lbWJlckFjY2Vzcy1vdXQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMmY1YzhlCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL3NlY29uZC9RdWFsaWZpZWRBcnJheU1lbWJlckFjY2Vzcy1vdXQuamF2YQpAQCAtMCwwICsxLDggQEAKK2NsYXNzIEdvbyB7CisgICAgYm9vbGVhbltdIGFycmF5KCk7CisKKyAgICB7CisKKyAgICAgICAgYm9vbGVhbiBhID0gdGhpcy5hcnJheSgpWzxjYXJldD5dOworICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9zZWNvbmQvUXVhbGlmaWVkQXJyYXlNZW1iZXJBY2Nlc3MuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9zZWNvbmQvUXVhbGlmaWVkQXJyYXlNZW1iZXJBY2Nlc3MuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMTQwMGUxCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL3NlY29uZC9RdWFsaWZpZWRBcnJheU1lbWJlckFjY2Vzcy5qYXZhCkBAIC0wLDAgKzEsOCBAQAorY2xhc3MgR29vIHsKKyAgICBib29sZWFuW10gYXJyYXkoKTsKKworICAgIHsKKworICAgICAgICBib29sZWFuIGEgPSB0aGlzLmFyPGNhcmV0PgorICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9zZWNvbmQvUXVhbGlmaWVyTWF0dGVycy1vdXQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9zZWNvbmQvUXVhbGlmaWVyTWF0dGVycy1vdXQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YTBjODAxCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL3NlY29uZC9RdWFsaWZpZXJNYXR0ZXJzLW91dC5qYXZhCkBAIC0wLDAgKzEsMTkgQEAKK2NsYXNzIEdvbyB7fQorY2xhc3MgRm9vIHsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIEJhcjxHb28+IEJBUjsKKworCit9CisKK2NsYXNzIEJhcjxUPiB7CisgICAgVCBnZXRHb28oKTsKKworfQorCitjbGFzcyBNYWluIHsKKyAgICB7CisKKyAgICAgICAgR29vIGcgPSBGb28uQkFSLmdldEdvbygpOzxjYXJldD4KKworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvc2Vjb25kL1F1YWxpZmllck1hdHRlcnMuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9zZWNvbmQvUXVhbGlmaWVyTWF0dGVycy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJhYzIyZWEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvc2Vjb25kL1F1YWxpZmllck1hdHRlcnMuamF2YQpAQCAtMCwwICsxLDE5IEBACitjbGFzcyBHb28ge30KK2NsYXNzIEZvbyB7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBCYXI8R29vPiBCQVI7CisKKworfQorCitjbGFzcyBCYXI8VD4geworICAgIFQgZ2V0R29vKCk7CisKK30KKworY2xhc3MgTWFpbiB7CisgICAgeworCisgICAgICAgIEdvbyBnID0gRm9vLjxjYXJldD4KKworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvc2Vjb25kL1Jlc3RvcmVJbml0aWFsUHJlZml4LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvc2Vjb25kL1Jlc3RvcmVJbml0aWFsUHJlZml4LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTM1MTcyMAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9zZWNvbmQvUmVzdG9yZUluaXRpYWxQcmVmaXguamF2YQpAQCAtMCwwICsxLDE4IEBACitjbGFzcyBNeUVudW0geworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgTXlFbnVtIEZvbzsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIE15RW51bSBCYXI7Cit9CisKK2NsYXNzIEJhciB7CisgIE15RW51bSBnZXRFbnVtKCk7Cit9CisKK2NsYXNzIEZvbyB7CisKKyAgIEJhciBteTsKKworICAgIHsKKyAgICAgICAgTXlFbnVtIGNsID0gPGNhcmV0PgorICAgIH0KKworfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL3NlY29uZC9TaW5nbGV0b25NYXAtb3V0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvc2Vjb25kL1NpbmdsZXRvbk1hcC1vdXQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYTBhZGFmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL3NlY29uZC9TaW5nbGV0b25NYXAtb3V0LmphdmEKQEAgLTAsMCArMSwxMyBAQAoraW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uczsKK2ltcG9ydCBqYXZhLnV0aWwuTWFwOworCitwdWJsaWMgY2xhc3MgU29tZUNsYXNzIHsKKyAgICB2b2lkIGZvbyhNYXA8U3RyaW5nLCBTdHJpbmc+IGwpIHsKKworICAgIH0KKworICAgIHsKKyAgICAgICAgZm9vKENvbGxlY3Rpb25zLnNpbmdsZXRvbk1hcCg8Y2FyZXQ+KSk7CisgICAgfQorCit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvc2Vjb25kL1NpbmdsZXRvbk1hcC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL3NlY29uZC9TaW5nbGV0b25NYXAuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZDRkZTFiCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL3NlY29uZC9TaW5nbGV0b25NYXAuamF2YQpAQCAtMCwwICsxLDEyIEBACitpbXBvcnQgamF2YS51dGlsLk1hcDsKKworcHVibGljIGNsYXNzIFNvbWVDbGFzcyB7CisgICAgdm9pZCBmb28oTWFwPFN0cmluZywgU3RyaW5nPiBsKSB7CisKKyAgICB9CisKKyAgICB7CisgICAgICAgIGZvbyhzaW5nPGNhcmV0PikKKyAgICB9CisKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9zZWNvbmQvU3RyaW5nTWV0aG9kc1doZW5Ob3RoaW5nRm91bmQtb3V0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvc2Vjb25kL1N0cmluZ01ldGhvZHNXaGVuTm90aGluZ0ZvdW5kLW91dC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIwOTFmNjYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvc2Vjb25kL1N0cmluZ01ldGhvZHNXaGVuTm90aGluZ0ZvdW5kLW91dC5qYXZhCkBAIC0wLDAgKzEsOCBAQAorY2xhc3MgRm9vIHsKKworICAgIHsKKyAgICAgIFN0cmluZyBtZXNzYWdlID0gIiI7CisgICAgICBpZiAobWVzc2FnZS5zdGFydHNXaXRoKDxjYXJldD4pKQorICAgIH0KKworfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL3NlY29uZC9TdHJpbmdNZXRob2RzV2hlbk5vdGhpbmdGb3VuZC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL3NlY29uZC9TdHJpbmdNZXRob2RzV2hlbk5vdGhpbmdGb3VuZC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMyYmY1Y2MKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvc2Vjb25kL1N0cmluZ01ldGhvZHNXaGVuTm90aGluZ0ZvdW5kLmphdmEKQEAgLTAsMCArMSw4IEBACitjbGFzcyBGb28geworCisgICAgeworICAgICAgU3RyaW5nIG1lc3NhZ2UgPSAiIjsKKyAgICAgIGlmIChzdGFXaTxjYXJldD4pCisgICAgfQorCit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvc2Vjb25kL1N1Z2dlc3RBcnJheXNBc0xpc3Qtb3V0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvc2Vjb25kL1N1Z2dlc3RBcnJheXNBc0xpc3Qtb3V0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzM5ZjIxNgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9zZWNvbmQvU3VnZ2VzdEFycmF5c0FzTGlzdC1vdXQuamF2YQpAQCAtMCwwICsxLDExIEBACitpbXBvcnQgamF2YS51dGlsLkFycmF5czsKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKKworY2xhc3MgRm9vIHsKKworICB7CisgICAgRm9vW10gZm9vczsKKyAgICBDb2xsZWN0aW9uPEZvbz4gYyA9IEFycmF5cy5hc0xpc3QoZm9vcyk7PGNhcmV0PgorICB9CisKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvc2Vjb25kL1N1Z2dlc3RBcnJheXNBc0xpc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9zZWNvbmQvU3VnZ2VzdEFycmF5c0FzTGlzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZlM2EyZWIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvc2Vjb25kL1N1Z2dlc3RBcnJheXNBc0xpc3QuamF2YQpAQCAtMCwwICsxLDEwIEBACitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CisKK2NsYXNzIEZvbyB7CisKKyAgeworICAgIEZvb1tdIGZvb3M7CisgICAgQ29sbGVjdGlvbjxGb28+IGMgPSBmb288Y2FyZXQ+CisgIH0KKworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9zZWNvbmQvU3VnZ2VzdEFycmF5c0FzTGlzdFdpbGRjYXJkLW91dC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL3NlY29uZC9TdWdnZXN0QXJyYXlzQXNMaXN0V2lsZGNhcmQtb3V0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODQ1MzBjNwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9zZWNvbmQvU3VnZ2VzdEFycmF5c0FzTGlzdFdpbGRjYXJkLW91dC5qYXZhCkBAIC0wLDAgKzEsMTMgQEAKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlzOworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOworCitpbnRlcmZhY2UgQmFyIHt9CisKK2NsYXNzIEZvbyBpbXBsZW1lbnRzIEJhciB7CisKKyAgeworICAgIEZvb1tdIGZvb3M7CisgICAgQ29sbGVjdGlvbjw/IGV4dGVuZHMgQmFyPiBjID0gQXJyYXlzLmFzTGlzdChmb29zKTs8Y2FyZXQ+CisgIH0KKworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9zZWNvbmQvU3VnZ2VzdEFycmF5c0FzTGlzdFdpbGRjYXJkLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvc2Vjb25kL1N1Z2dlc3RBcnJheXNBc0xpc3RXaWxkY2FyZC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE1YjYyMjgKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvc2Vjb25kL1N1Z2dlc3RBcnJheXNBc0xpc3RXaWxkY2FyZC5qYXZhCkBAIC0wLDAgKzEsMTIgQEAKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKKworaW50ZXJmYWNlIEJhciB7fQorCitjbGFzcyBGb28gaW1wbGVtZW50cyBCYXIgeworCisgIHsKKyAgICBGb29bXSBmb29zOworICAgIENvbGxlY3Rpb248PyBleHRlbmRzIEJhcj4gYyA9IGZvbzxjYXJldD4KKyAgfQorCit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL3NlY29uZC9TdWdnZXN0VG9BcnJheVdpdGhFeGlzdGluZ0VtcHR5QXJyYXktb3V0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvc2Vjb25kL1N1Z2dlc3RUb0FycmF5V2l0aEV4aXN0aW5nRW1wdHlBcnJheS1vdXQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMTk3Nzc0Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL3NlY29uZC9TdWdnZXN0VG9BcnJheVdpdGhFeGlzdGluZ0VtcHR5QXJyYXktb3V0LmphdmEKQEAgLTAsMCArMSwxNCBAQAoraW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOworCitjbGFzcyBGb28geworICBwdWJsaWMgc3RhdGljIGZpbmFsIEZvb1tdIEVNUFRZX0FSUkFZID0gbmV3IEZvb1swXTsKKyAgcHVibGljIHN0YXRpYyBmaW5hbCBGb29bXSBFTVBUWV9BUlJBWTIgPSBuZXcgRm9vW117fTsKKyAgcHVibGljIHN0YXRpYyBmaW5hbCBGb29bXSBOT05fRU1QVFlfQVJSQVkgPSBuZXcgRm9vWzFdOworCisgIENvbGxlY3Rpb248Rm9vPiBmb29zKCkge30KKworICB7CisgICAgRm9vW10gZiA9IGZvb3MoKS50b0FycmF5KEVNUFRZX0FSUkFZKTs8Y2FyZXQ+CisgIH0KKworfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL3NlY29uZC9TdWdnZXN0VG9BcnJheVdpdGhFeGlzdGluZ0VtcHR5QXJyYXkuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9zZWNvbmQvU3VnZ2VzdFRvQXJyYXlXaXRoRXhpc3RpbmdFbXB0eUFycmF5LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjhjMDM3YQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9zZWNvbmQvU3VnZ2VzdFRvQXJyYXlXaXRoRXhpc3RpbmdFbXB0eUFycmF5LmphdmEKQEAgLTAsMCArMSwxNCBAQAoraW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOworCitjbGFzcyBGb28geworICBwdWJsaWMgc3RhdGljIGZpbmFsIEZvb1tdIEVNUFRZX0FSUkFZID0gbmV3IEZvb1swXTsKKyAgcHVibGljIHN0YXRpYyBmaW5hbCBGb29bXSBFTVBUWV9BUlJBWTIgPSBuZXcgRm9vW117fTsKKyAgcHVibGljIHN0YXRpYyBmaW5hbCBGb29bXSBOT05fRU1QVFlfQVJSQVkgPSBuZXcgRm9vWzFdOworCisgIENvbGxlY3Rpb248Rm9vPiBmb29zKCkge30KKworICB7CisgICAgRm9vW10gZiA9IGY8Y2FyZXQ+CisgIH0KKworfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL3NlY29uZC9TdWdnZXN0VG9BcnJheVdpdGhFeGlzdGluZ0VtcHR5QXJyYXlGcm9tQW5vdGhlckNsYXNzLW91dC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL3NlY29uZC9TdWdnZXN0VG9BcnJheVdpdGhFeGlzdGluZ0VtcHR5QXJyYXlGcm9tQW5vdGhlckNsYXNzLW91dC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU3N2FkMzMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvc2Vjb25kL1N1Z2dlc3RUb0FycmF5V2l0aEV4aXN0aW5nRW1wdHlBcnJheUZyb21Bbm90aGVyQ2xhc3Mtb3V0LmphdmEKQEAgLTAsMCArMSwxNiBAQAoraW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOworCitjbGFzcyBCYXIgeworICBwdWJsaWMgc3RhdGljIGZpbmFsIEJhcltdIEVNUFRZX0FSUkFZID0gbmV3IEJhclswXTsKKyAgcHVibGljIHN0YXRpYyBmaW5hbCBCYXJbXSBFTVBUWV9BUlJBWTIgPSBuZXcgQmFyW117fTsKKyAgcHVibGljIHN0YXRpYyBmaW5hbCBCYXJbXSBOT05fRU1QVFlfQVJSQVkgPSBuZXcgQmFyWzFdOworCit9CisKK2NsYXNzIEZvbyB7CisgIENvbGxlY3Rpb248QmFyPiBmb29zKCkge30KKworICB7CisgICAgQmFyW10gZiA9IGZvb3MoKS50b0FycmF5KEJhci5FTVBUWV9BUlJBWSk7CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9zZWNvbmQvU3VnZ2VzdFRvQXJyYXlXaXRoRXhpc3RpbmdFbXB0eUFycmF5RnJvbUFub3RoZXJDbGFzcy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL3NlY29uZC9TdWdnZXN0VG9BcnJheVdpdGhFeGlzdGluZ0VtcHR5QXJyYXlGcm9tQW5vdGhlckNsYXNzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjNjMjllYQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9zZWNvbmQvU3VnZ2VzdFRvQXJyYXlXaXRoRXhpc3RpbmdFbXB0eUFycmF5RnJvbUFub3RoZXJDbGFzcy5qYXZhCkBAIC0wLDAgKzEsMTYgQEAKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKKworY2xhc3MgQmFyIHsKKyAgcHVibGljIHN0YXRpYyBmaW5hbCBCYXJbXSBFTVBUWV9BUlJBWSA9IG5ldyBCYXJbMF07CisgIHB1YmxpYyBzdGF0aWMgZmluYWwgQmFyW10gRU1QVFlfQVJSQVkyID0gbmV3IEJhcltde307CisgIHB1YmxpYyBzdGF0aWMgZmluYWwgQmFyW10gTk9OX0VNUFRZX0FSUkFZID0gbmV3IEJhclsxXTsKKworfQorCitjbGFzcyBGb28geworICBDb2xsZWN0aW9uPEJhcj4gZm9vcygpIHt9CisKKyAgeworICAgIEJhcltdIGYgPSBmPGNhcmV0PgorICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvc2Vjb25kL1N1Z2dlc3RUb0FycmF5V2l0aE5ld0VtcHR5QXJyYXktb3V0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvc2Vjb25kL1N1Z2dlc3RUb0FycmF5V2l0aE5ld0VtcHR5QXJyYXktb3V0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzU3N2YwOQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9zZWNvbmQvU3VnZ2VzdFRvQXJyYXlXaXRoTmV3RW1wdHlBcnJheS1vdXQuamF2YQpAQCAtMCwwICsxLDExIEBACitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CisKK2NsYXNzIEZvbyB7CisKKyAgQ29sbGVjdGlvbjxGb28+IGZvb3MoKSB7fQorCisgIHsKKyAgICBGb29bXSBmID0gZm9vcygpLnRvQXJyYXkobmV3IEZvb1swXSk7PGNhcmV0PgorICB9CisKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9zZWNvbmQvU3VnZ2VzdFRvQXJyYXlXaXRoTmV3RW1wdHlBcnJheS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL3NlY29uZC9TdWdnZXN0VG9BcnJheVdpdGhOZXdFbXB0eUFycmF5LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGY4YjkxMgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9zZWNvbmQvU3VnZ2VzdFRvQXJyYXlXaXRoTmV3RW1wdHlBcnJheS5qYXZhCkBAIC0wLDAgKzEsMTEgQEAKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKKworY2xhc3MgRm9vIHsKKworICBDb2xsZWN0aW9uPEZvbz4gZm9vcygpIHt9CisKKyAgeworICAgIEZvb1tdIGYgPSA8Y2FyZXQ+CisgIH0KKworfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL3NlY29uZC9TdWdnZXN0VG9BcnJheVdpdGhOZXdOb25FbXB0eUFycmF5LW91dC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL3NlY29uZC9TdWdnZXN0VG9BcnJheVdpdGhOZXdOb25FbXB0eUFycmF5LW91dC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI1MDk3MzAKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvc2Vjb25kL1N1Z2dlc3RUb0FycmF5V2l0aE5ld05vbkVtcHR5QXJyYXktb3V0LmphdmEKQEAgLTAsMCArMSwxMCBAQAoraW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOworCitjbGFzcyBGb28geworCisgIHsKKyAgICBDb2xsZWN0aW9uPEZvbz4gZm9vczsKKyAgICBGb29bXSBmID0gZm9vcy50b0FycmF5KG5ldyBGb29bZm9vcy5zaXplKCldKTs8Y2FyZXQ+CisgIH0KKworfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL3NlY29uZC9TdWdnZXN0VG9BcnJheVdpdGhOZXdOb25FbXB0eUFycmF5LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvc2Vjb25kL1N1Z2dlc3RUb0FycmF5V2l0aE5ld05vbkVtcHR5QXJyYXkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45Y2E3YTY3Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL3NlY29uZC9TdWdnZXN0VG9BcnJheVdpdGhOZXdOb25FbXB0eUFycmF5LmphdmEKQEAgLTAsMCArMSwxMCBAQAoraW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOworCitjbGFzcyBGb28geworCisgIHsKKyAgICBDb2xsZWN0aW9uPEZvbz4gZm9vczsKKyAgICBGb29bXSBmID0gPGNhcmV0PgorICB9CisKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9zZWNvbmQvVG9BcnJheUZpZWxkc1F1YWxpZmllci1vdXQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9zZWNvbmQvVG9BcnJheUZpZWxkc1F1YWxpZmllci1vdXQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYzRkODM2Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL3NlY29uZC9Ub0FycmF5RmllbGRzUXVhbGlmaWVyLW91dC5qYXZhCkBAIC0wLDAgKzEsMTMgQEAKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKKworY2xhc3MgQmFyIHsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIENvbGxlY3Rpb248Rm9vPiBmb29zOworfQorCitjbGFzcyBGb28geworCisgICAgeworICAgICAgICBGb29bXSBmID0gQmFyLmZvb3MudG9BcnJheShuZXcgRm9vW0Jhci5mb29zLnNpemUoKV0pOzxjYXJldD4KKyAgICB9CisKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9zZWNvbmQvVG9BcnJheUZpZWxkc1F1YWxpZmllci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL3NlY29uZC9Ub0FycmF5RmllbGRzUXVhbGlmaWVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTI5MTM4OAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9zZWNvbmQvVG9BcnJheUZpZWxkc1F1YWxpZmllci5qYXZhCkBAIC0wLDAgKzEsMTMgQEAKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKKworY2xhc3MgQmFyIHsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIENvbGxlY3Rpb248Rm9vPiBmb29zOworfQorCitjbGFzcyBGb28geworCisgICAgeworICAgICAgICBGb29bXSBmID0gQmFyLjxjYXJldD4KKyAgICB9CisKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9zZWNvbmQvVG9BcnJheUdlbmVyaWNBcnJheUNyZWF0aW9uLW91dC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL3NlY29uZC9Ub0FycmF5R2VuZXJpY0FycmF5Q3JlYXRpb24tb3V0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDBiM2IzZQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9zZWNvbmQvVG9BcnJheUdlbmVyaWNBcnJheUNyZWF0aW9uLW91dC5qYXZhCkBAIC0wLDAgKzEsMTEgQEAKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKKworY2xhc3MgRm9vPFQ+IHsKKworICBDb2xsZWN0aW9uPEZvbzxUPj4gZm9vcygpIHt9CisKKyAgeworICAgIEZvbzxUPltdIGYgPSA8Y2FyZXQ+CisgIH0KKworfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL3NlY29uZC9Ub0FycmF5R2VuZXJpY0FycmF5Q3JlYXRpb24uamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9zZWNvbmQvVG9BcnJheUdlbmVyaWNBcnJheUNyZWF0aW9uLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDBiM2IzZQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9zZWNvbmQvVG9BcnJheUdlbmVyaWNBcnJheUNyZWF0aW9uLmphdmEKQEAgLTAsMCArMSwxMSBAQAoraW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOworCitjbGFzcyBGb288VD4geworCisgIENvbGxlY3Rpb248Rm9vPFQ+PiBmb29zKCkge30KKworICB7CisgICAgRm9vPFQ+W10gZiA9IDxjYXJldD4KKyAgfQorCit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvc2Vjb25kL1RvQXJyYXlNZXRob2RRdWFsaWZpZXItb3V0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvc2Vjb25kL1RvQXJyYXlNZXRob2RRdWFsaWZpZXItb3V0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2E0ZDhlZgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9zZWNvbmQvVG9BcnJheU1ldGhvZFF1YWxpZmllci1vdXQuamF2YQpAQCAtMCwwICsxLDEzIEBACitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CisKK2NsYXNzIEJhciB7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBDb2xsZWN0aW9uPEZvbz4gZm9vcygpOworfQorCitjbGFzcyBGb28geworCisgICAgeworICAgICAgICBGb29bXSBmID0gQmFyLmZvb3MoKS50b0FycmF5KG5ldyBGb29bMF0pOzxjYXJldD4KKyAgICB9CisKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9zZWNvbmQvVG9BcnJheU1ldGhvZFF1YWxpZmllci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL3NlY29uZC9Ub0FycmF5TWV0aG9kUXVhbGlmaWVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWZiZWRmMQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9zZWNvbmQvVG9BcnJheU1ldGhvZFF1YWxpZmllci5qYXZhCkBAIC0wLDAgKzEsMTMgQEAKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKKworY2xhc3MgQmFyIHsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIENvbGxlY3Rpb248Rm9vPiBmb29zKCk7Cit9CisKK2NsYXNzIEZvbyB7CisKKyAgICB7CisgICAgICAgIEZvb1tdIGYgPSBCYXIuPGNhcmV0PgorICAgIH0KKworfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL3NlY29uZC9Ub0xpc3RXaXRoUXVhbGlmaWVyLW91dC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL3NlY29uZC9Ub0xpc3RXaXRoUXVhbGlmaWVyLW91dC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhiZGIyMWIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvc2Vjb25kL1RvTGlzdFdpdGhRdWFsaWZpZXItb3V0LmphdmEKQEAgLTAsMCArMSwxNCBAQAoraW1wb3J0IGphdmEudXRpbC5BcnJheXM7CitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CisKK2NsYXNzIEJhciB7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBGb29bXSBmb29zKCk7Cit9CisKK2NsYXNzIEZvbyB7CisKKyAgICB7CisgICAgICAgIENvbGxlY3Rpb248Rm9vPiBmID0gQXJyYXlzLmFzTGlzdChCYXIuZm9vcygpKTs8Y2FyZXQ+CisgICAgfQorCit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvc2Vjb25kL1RvTGlzdFdpdGhRdWFsaWZpZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9zZWNvbmQvVG9MaXN0V2l0aFF1YWxpZmllci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFlMTQzYzIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvc2Vjb25kL1RvTGlzdFdpdGhRdWFsaWZpZXIuamF2YQpAQCAtMCwwICsxLDEzIEBACitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CisKK2NsYXNzIEJhciB7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBGb29bXSBmb29zKCk7Cit9CisKK2NsYXNzIEZvbyB7CisKKyAgICB7CisgICAgICAgIENvbGxlY3Rpb248Rm9vPiBmID0gQmFyLjxjYXJldD4KKyAgICB9CisKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9zZWNvbmQvVmFyYXJnTWVtYmVyQWNjZXNzLW91dC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL3NlY29uZC9WYXJhcmdNZW1iZXJBY2Nlc3Mtb3V0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDFjMDBmZgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9zZWNvbmQvVmFyYXJnTWVtYmVyQWNjZXNzLW91dC5qYXZhCkBAIC0wLDAgKzEsNSBAQAorY2xhc3MgR29vIHsKKyAgICB2b2lkIGZvbyhib29sZWFuLi4uIGxvcykgeworICAgICAgICBib29sZWFuIGEgPSBsb3NbPGNhcmV0Pl07CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlL3NlY29uZC9WYXJhcmdNZW1iZXJBY2Nlc3MuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9zZWNvbmQvVmFyYXJnTWVtYmVyQWNjZXNzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGJjODJiZgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9zZWNvbmQvVmFyYXJnTWVtYmVyQWNjZXNzLmphdmEKQEAgLTAsMCArMSw1IEBACitjbGFzcyBHb28geworICAgIHZvaWQgZm9vKGJvb2xlYW4uLi4gbG9zKSB7CisgICAgICAgIGJvb2xlYW4gYSA9IGxvczxjYXJldD4KKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGVTb3J0aW5nL0Fzc2VydEVxdWFscy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlU29ydGluZy9Bc3NlcnRFcXVhbHMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOTIyNDI2Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlU29ydGluZy9Bc3NlcnRFcXVhbHMuamF2YQpAQCAtMCwwICsxLDEyIEBACitpbXBvcnQganVuaXQuZnJhbWV3b3JrLkFzc2VydDsKK2ltcG9ydCBqYXZhLmlvLkZpbGU7CisKK3B1YmxpYyBjbGFzcyBBYWFhYWFhIGV4dGVuZHMgQXNzZXJ0IHsKKworICAgIHsKKyAgICAgICAgRmlsZSBib287CisgICAgICAgIGludCBiYXI7CisgICAgICAgIGFzc2VydEVxdWFscyhuZXcgRmlsZSgieCIpLCBiPGNhcmV0Pik7CisgICAgfQorCit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGVTb3J0aW5nL0Jvb2xlYW5WYWx1ZU9mLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGVTb3J0aW5nL0Jvb2xlYW5WYWx1ZU9mLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTE3NDQ2ZgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZVNvcnRpbmcvQm9vbGVhblZhbHVlT2YuamF2YQpAQCAtMCwwICsxLDEwIEBACitwdWJsaWMgYWJzdHJhY3QgY2xhc3MgRm9vIHsKKworICAgIHZvaWQgZm9vKEJvb2xlYW4gdmFsdWUpOworCisgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgIGJvb2xlYW4gYjsKKyAgICAgICAgZm9vKDxjYXJldD4pCisgICAgfQorCit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlU29ydGluZy9DbGFzc0xpdGVyYWwuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZVNvcnRpbmcvQ2xhc3NMaXRlcmFsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWY0M2M4YQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZVNvcnRpbmcvQ2xhc3NMaXRlcmFsLmphdmEKQEAgLTAsMCArMSw2IEBACitwdWJsaWMgY2xhc3MgRm9vICB7CisKKyAgICBwdWJsaWMgQ2xhc3M8PyBleHRlbmRzIFN0cmluZz4gZm9vKCkgeworICAgICAgICByZXR1cm4gPGNhcmV0PgorICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGVTb3J0aW5nL0Rpc3ByZWZlckdldHRlckluU2V0dGVyQ2FsbC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlU29ydGluZy9EaXNwcmVmZXJHZXR0ZXJJblNldHRlckNhbGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MGFiZGRmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlU29ydGluZy9EaXNwcmVmZXJHZXR0ZXJJblNldHRlckNhbGwuamF2YQpAQCAtMCwwICsxLDEzIEBACitwdWJsaWMgY2xhc3MgQWFhYWFhYSB7CisgIGludCBjb2xvcjsKKworICB2b2lkIHNldENvbG9yKGludCBjb2xvcikge30KKyAgaW50IGdldENvbG9yKCkge30KKyAgaW50IGdldFpvb0NvbG9yKCkge30KKworICB7CisgICAgc2V0Q29sb3IoPGNhcmV0Pik7CisgIH0KKworCit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGVTb3J0aW5nL0RvbnRQcmVmZXJDYXN0ZWQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZVNvcnRpbmcvRG9udFByZWZlckNhc3RlZC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjliNjkwZjcKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGVTb3J0aW5nL0RvbnRQcmVmZXJDYXN0ZWQuamF2YQpAQCAtMCwwICsxLDE3IEBACitjbGFzcyBGb28geworICAgIHsKKyAgICAgICAgT2JqZWN0IF9vOworICAgICAgICBCYXIgYjsKKyAgICAgICAgaWYgKF9vIGluc3RhbmNlb2YgR29vKSB7CisgICAgICAgICAgICBHb28gZyA9IDxjYXJldD4KKyAgICAgICAgfQorICAgIH0KK30KKworY2xhc3MgR29vIHsKKworfQorCitjbGFzcyBCYXIgZXh0ZW5kcyBHb28geworCit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlU29ydGluZy9Eb250UHJlZmVyS2V5d29yZHMuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZVNvcnRpbmcvRG9udFByZWZlcktleXdvcmRzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODhkMjZkNAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZVNvcnRpbmcvRG9udFByZWZlcktleXdvcmRzLmphdmEKQEAgLTAsMCArMSwxMCBAQAorcHVibGljIGNsYXNzIEZvbyB7CisKKyAgIHsKKyAgICAgICAgU3RyaW5nIG5hbWU7CisgICAgICAgIE9iamVjdCBvMTsKKyAgICAgICAgRm9vIGZvbzsKKworICAgICAgICBPYmplY3QgbyA9IDxjYXJldD4KKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlU29ydGluZy9FbnVtVmFsdWVPZi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlU29ydGluZy9FbnVtVmFsdWVPZi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM4MmJiMTUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGVTb3J0aW5nL0VudW1WYWx1ZU9mLmphdmEKQEAgLTAsMCArMSwxMSBAQAorZW51bSBNeUVudW0geworICBGT08sIEJBUjsKK30KKworcHVibGljIGNsYXNzIEZvbyB7CisKKyAgIHsKKyAgICAgICAgTXlFbnVtIGU7CisgICAgICAgIE15RW51bSBlMSA9IDxjYXJldD4KKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlU29ydGluZy9FbnVtVmFsdWVPZjIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZVNvcnRpbmcvRW51bVZhbHVlT2YyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmJlYzdlYgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZVNvcnRpbmcvRW51bVZhbHVlT2YyLmphdmEKQEAgLTAsMCArMSwxMyBAQAorZW51bSBNeUVudW0geworICBGT08sIEJBUjsKK30KKworcHVibGljIGNsYXNzIEZvbyB7CisKKyAgIE15RW51bSBiYXIoKSB7fQorCisgICBNeUVudW0gZm9vKCkgeworICAgICAgICBNeUVudW0gZTsKKyAgICAgICAgcmV0dXJuIDxjYXJldD4KKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlU29ydGluZy9FcmFzdXJlTm90QWZmZWN0aW5nUHJveGltaXR5LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGVTb3J0aW5nL0VyYXN1cmVOb3RBZmZlY3RpbmdQcm94aW1pdHkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMGU2NTU3Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlU29ydGluZy9FcmFzdXJlTm90QWZmZWN0aW5nUHJveGltaXR5LmphdmEKQEAgLTAsMCArMSwzIEBACitjbGFzcyBBIHt7CisgICAgZm9vLkZvbzxTdHJpbmc+IGYgPSBuZXcgQjxjYXJldD4KK319ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlU29ydGluZy9FeHBlY3RlZEludGVyZmFjZVNob3VsZEdvRmlyc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZVNvcnRpbmcvRXhwZWN0ZWRJbnRlcmZhY2VTaG91bGRHb0ZpcnN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTQ1NThkZgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZVNvcnRpbmcvRXhwZWN0ZWRJbnRlcmZhY2VTaG91bGRHb0ZpcnN0LmphdmEKQEAgLTAsMCArMSw5IEBACitpbnRlcmZhY2UgTXlQcm9jZXNzb3I8VD4geworICB2b2lkIGV4ZWN1dGUoVCB0KTsKK30KKworY2xhc3MgUHJvYzE8VD4gaW1wbGVtZW50cyBNeVByb2Nlc3NvcjxUPiB7IHB1YmxpYyB2b2lkIGV4ZWN1dGUoVCB0KSB7fX0KKworY2xhc3MgRm9vIHsKKyAgTXlQcm9jZXNzb3I8Rm9vPiBwID0gbmV3IDxjYXJldD4KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGVTb3J0aW5nL0ZhY3RvcnlNZXRob2RGb3JEZWZhdWx0VHlwZS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlU29ydGluZy9GYWN0b3J5TWV0aG9kRm9yRGVmYXVsdFR5cGUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMzA2NjMwCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlU29ydGluZy9GYWN0b3J5TWV0aG9kRm9yRGVmYXVsdFR5cGUuamF2YQpAQCAtMCwwICsxLDE2IEBACitpbXBvcnQgamF2YS51dGlsLio7CisKK3B1YmxpYyBjbGFzcyBGb28geworCisgICAgeworICAgICAgICBNYXA8UGFpcjxPYmplY3QsIE9iamVjdD4sIE9iamVjdD4gbWFwOworICAgICAgICBtYXAuZ2V0KDxjYXJldD4pCisgICAgfQorCit9CisKK2NsYXNzIFBhaXI8QSwgQj4geworICAgIFBhaXIoQSBhLCBCIGIpIHt9CisKKyAgICBzdGF0aWMgPEEsQj4gUGFpcjxBLEI+IGNyZWF0ZShBIGEsIEIgYikge30KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZVNvcnRpbmcvRmllbGROYW1lT3V0d2VpZ2hzU3RhdHMuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZVNvcnRpbmcvRmllbGROYW1lT3V0d2VpZ2hzU3RhdHMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMjQ3MDAyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlU29ydGluZy9GaWVsZE5hbWVPdXR3ZWlnaHNTdGF0cy5qYXZhCkBAIC0wLDAgKzEsOSBAQAorY2xhc3MgRm9vIHsKKyAgU3RyaW5nIG15Rm9vOworICBTdHJpbmcgbXlCYXI7CisKKyAgU3RyaW5nIGdldEZvbygpIHsKKyAgICByZXR1cm4gbXk8Y2FyZXQ+CisgIH0KKworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZVNvcnRpbmcvR3d0QnV0dG9ucy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlU29ydGluZy9Hd3RCdXR0b25zLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2EwZDVmZmUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGVTb3J0aW5nL0d3dEJ1dHRvbnMuamF2YQpAQCAtMCwwICsxLDkgQEAKK2NsYXNzIFNtdGgge30KK2NsYXNzIEJ1dHRvbiBleHRlbmRzIFNtdGgge30KK2NsYXNzIEJ1dHRvbkJhc2UgZXh0ZW5kcyBCdXR0b24ge30KKworY2xhc3MgRm9vIHsKKyAgRm9vIGZvbyhTdHJpbmcgcykgeworICAgIFNtdGggcyA9IG5ldyBCPGNhcmV0PgorICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlU29ydGluZy9Jbm5lckNsYXNzZXNQcm94aW1pdHkuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZVNvcnRpbmcvSW5uZXJDbGFzc2VzUHJveGltaXR5LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDk3ZjdiNQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZVNvcnRpbmcvSW5uZXJDbGFzc2VzUHJveGltaXR5LmphdmEKQEAgLTAsMCArMSwyMSBAQAorcGFja2FnZSB6enp6ejsKKworcHVibGljIGNsYXNzIEZvbyB7CisgICAgeworICAgICAgICBjbGFzcyBJbm5lckdvbyBleHRlbmRzIEdvb3t9CisKKyAgICAgICAgR29vIGcgPSBuZXcgPGNhcmV0PgorICAgIH0KKworICAgIGNsYXNzIEJhciBleHRlbmRzIEdvbyB7CisKKyAgICB9CisKK30KKworY2xhc3MgR29vIHsKKworfQorCitjbGFzcyBBR29vIGV4dGVuZHMgR29vIHt9CisKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZVNvcnRpbmcvSkNvbXBvbmVudEFkZC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlU29ydGluZy9KQ29tcG9uZW50QWRkLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTYyYzRjNgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZVNvcnRpbmcvSkNvbXBvbmVudEFkZC5qYXZhCkBAIC0wLDAgKzEsMTQgQEAKK2ltcG9ydCBqYXZheC5zd2luZy4qOworaW1wb3J0IGphdmEuYXd0Lio7CisKK3B1YmxpYyBjbGFzcyBGb29CZWFuMyBleHRlbmRzIEpDb21wb25lbnQgeworCisgICAgSkNvbXBvbmVudCBmb28oaW50IGEpIHsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBzZXRGb29CZWFuMjM5KFN0cmluZyBmb29CZWFuMjM5KSB7CisgICAgICAgIFN0cmluZyBuYW1lOworICAgICAgICBQb3B1cE1lbnUgYjsKKyAgICAgICAgYWRkKDxjYXJldD4pCisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZVNvcnRpbmcvSkNvbXBvbmVudEFkZE5ldy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlU29ydGluZy9KQ29tcG9uZW50QWRkTmV3LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2IxZmIyMwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZVNvcnRpbmcvSkNvbXBvbmVudEFkZE5ldy5qYXZhCkBAIC0wLDAgKzEsOSBAQAoraW1wb3J0IGphdmF4LnN3aW5nLio7CitpbXBvcnQgamF2YS5hd3QuKjsKKworcHVibGljIGNsYXNzIEZvb0JlYW4zIGV4dGVuZHMgSkNvbXBvbmVudCB7CisKKyAgICB7CisgICAgICAgIGFkZChuZXcgPGNhcmV0PikKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlU29ydGluZy9MaXRlcmFsSW5JZi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlU29ydGluZy9MaXRlcmFsSW5JZi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNkYmUxNTUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGVTb3J0aW5nL0xpdGVyYWxJbklmLmphdmEKQEAgLTAsMCArMSw1IEBACitwdWJsaWMgY2xhc3MgRm9vIHsKKyAgICBwdWJsaWMgdm9pZCBnZXRBYmMoKSB7CisgICAgICAgIGlmKDxjYXJldD4pCisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlU29ydGluZy9MaXRlcmFsSW5SZXR1cm4uamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZVNvcnRpbmcvTGl0ZXJhbEluUmV0dXJuLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWZlNGRhOAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZVNvcnRpbmcvTGl0ZXJhbEluUmV0dXJuLmphdmEKQEAgLTAsMCArMSw1IEBACitwdWJsaWMgY2xhc3MgRm9vIHsKKyAgICBwdWJsaWMgYm9vbGVhbiBnZXRBYmMoKSB7CisgICAgICAgIHJldHVybiA8Y2FyZXQ+CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlU29ydGluZy9Mb2NhbFZhcmlhYmxlc091dHdlaWdoU3RhdHMuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZVNvcnRpbmcvTG9jYWxWYXJpYWJsZXNPdXR3ZWlnaFN0YXRzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWJlZWJiYQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZVNvcnRpbmcvTG9jYWxWYXJpYWJsZXNPdXR3ZWlnaFN0YXRzLmphdmEKQEAgLTAsMCArMSwxMSBAQAorY2xhc3MgRm9vIHsKKworICBGb28gYmFyKCkgeyB9CisgIEZvbyBnb28oKSB7IH0KKworICB2b2lkIGZvbyhGb28gcGFyYW0pIHsKKyAgICBGb28gZm9vOworICAgIEZvbyB6enogPSA8Y2FyZXQ+CisgIH0KKworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZVNvcnRpbmcvTG9jYWxWYXJzQmVmb3JlQ2xhc3NMaXRlcmFscy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlU29ydGluZy9Mb2NhbFZhcnNCZWZvcmVDbGFzc0xpdGVyYWxzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzA0M2M4YwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZVNvcnRpbmcvTG9jYWxWYXJzQmVmb3JlQ2xhc3NMaXRlcmFscy5qYXZhCkBAIC0wLDAgKzEsMTAgQEAKK3B1YmxpYyBjbGFzcyBGb28geworCisgICAgeworICAgICAgICBDbGFzczxGb28+IGxvY2FsOworICAgICAgICBDbGFzczw/IGV4dGVuZHMgRm9vPiBmID0gPGNhcmV0PgorICAgIH0KKworfQorCitjbGFzcyBCYXIgZXh0ZW5kcyBGb28ge30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZVNvcnRpbmcvTWV0aG9kU3RhdHMuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZVNvcnRpbmcvTWV0aG9kU3RhdHMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMmU5YzVmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlU29ydGluZy9NZXRob2RTdGF0cy5qYXZhCkBAIC0wLDAgKzEsMTYgQEAKK3B1YmxpYyBjbGFzcyBGb29CYXIgeworCisgY2xhc3MgWHh4IHt9CisKKyAgICBYeHggZm9vKCkgeyB9CisgICAgWHh4IGJhcigpIHsgfQorICAgIFh4eCBnb28oKSB7IH0KKworICAgIHZvaWQgYWFhKFh4eCBhKSB7fQorCisgICAgeworICAgICAgICBuZXcgRm9vQmFyKCkuYWFhKCBuZXcgRm9vQmFyKCkuPGNhcmV0PiApOworICAgIH0KKworCit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlU29ydGluZy9NZXRob2RzV2l0aFN1YnN0aXR1dGFibGVSZXR1cm5UeXBlLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGVTb3J0aW5nL01ldGhvZHNXaXRoU3Vic3RpdHV0YWJsZVJldHVyblR5cGUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMDE5YTI4Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlU29ydGluZy9NZXRob2RzV2l0aFN1YnN0aXR1dGFibGVSZXR1cm5UeXBlLmphdmEKQEAgLTAsMCArMSwxMSBAQAorcHVibGljIGNsYXNzIEZvbzxUPiB7CisKKyAgIFQgZm9vKCkge30KKworICAgPFY+IFYgYmFyKCkge30KKworICAgIHsKKyAgICAgICAgRm9vPFN0cmluZz4gbzsKKyAgICAgICAgU3RyaW5nIGEgPSBvLjxjYXJldD4KKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlU29ydGluZy9OZXdBcnJheUxpc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZVNvcnRpbmcvTmV3QXJyYXlMaXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2Q1ZWQ5ZQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZVNvcnRpbmcvTmV3QXJyYXlMaXN0LmphdmEKQEAgLTAsMCArMSwxNSBAQAoraW50ZXJmYWNlIExpc3QgeworICB2b2lkIGFkZCgpOworfQorCitjbGFzcyBBcnJheUxpc3QgaW1wbGVtZW50cyBMaXN0IHsKKyAgcHVibGljIHZvaWQgYWRkKCkge30KK30KKworY2xhc3MgT3RoZXJMaXN0IGV4dGVuZHMgQXJyYXlMaXN0IHt9CisKK2NsYXNzIEZvbyB7CisgIHsKKyAgICBBcnJheUxpc3QgbCA9IG5ldyA8Y2FyZXQ+CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGVTb3J0aW5nL05ld0NvbXBvbmVudC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlU29ydGluZy9OZXdDb21wb25lbnQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMTFkZDczOAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZVNvcnRpbmcvTmV3Q29tcG9uZW50LmphdmEKQEAgLTAsMCArMSw5IEBACitpbXBvcnQgamF2YXguc3dpbmcuKjsKK2ltcG9ydCBqYXZhLmF3dC4qOworCitwdWJsaWMgY2xhc3MgRm9vIGV4dGVuZHMgSkNvbXBvbmVudCB7CisKKyAgICBwdWJsaWMgQ29tcG9uZW50IGZvbygpIHsKKyAgICAgICAgcmV0dXJuIG5ldyA8Y2FyZXQ+CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZVNvcnRpbmcvTmV3TGlzdEFsd2F5c0ZpcnN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGVTb3J0aW5nL05ld0xpc3RBbHdheXNGaXJzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY4YTFlNjcKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGVTb3J0aW5nL05ld0xpc3RBbHdheXNGaXJzdC5qYXZhCkBAIC0wLDAgKzEsOCBAQAoraW1wb3J0IGphdmEudXRpbC4qOworCitwdWJsaWMgY2xhc3MgRm9vQmVhbjMgZXh0ZW5kcyBKQ29tcG9uZW50IHsKKworICAgIHsKKyAgICAgIExpc3Q8U3RyaW5nPiBsID0gbmV3IDxjYXJldD4KKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlU29ydGluZy9OZXdSdW5uYWJsZS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlU29ydGluZy9OZXdSdW5uYWJsZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFmYTkzNTgKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGVTb3J0aW5nL05ld1J1bm5hYmxlLmphdmEKQEAgLTAsMCArMSw4IEBACitwdWJsaWMgY2xhc3MgTXlSdW5uYWJsZSBpbXBsZW1lbnRzIFJ1bm5hYmxlIHsKKworICAgIHByaXZhdGUgY2xhc3MgTXlBbm90aGVyUnVubmFibGUgZXh0ZW5kcyBNeVJ1bm5hYmxlIHt9CisKKyAgICBSdW5uYWJsZSBmb28oKSB7CisgICAgICAgIHJldHVybiBuZXcgPGNhcmV0PgorICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGVTb3J0aW5nL05vU2tpcHBpbmdJblNtYXJ0Q2FzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlU29ydGluZy9Ob1NraXBwaW5nSW5TbWFydENhc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMmViMjc2Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlU29ydGluZy9Ob1NraXBwaW5nSW5TbWFydENhc3QuamF2YQpAQCAtMCwwICsxLDE2IEBACitpbnRlcmZhY2UgQmFyIHt9CitjbGFzcyBHb28ge30KKworYWJzdHJhY3QgY2xhc3MgRm9vIHsKKyAgICB2b2lkIGZvbyhCYXIgZik7CisKKyAgICB2b2lkIGZvbyhGb28gZik7CisKKyAgICB2b2lkIGZvbyhHb28gZik7CisKKworICB7CisKKyAgICBmb28oKDxjYXJldD4pKQorICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlU29ydGluZy9QYXNzaW5nUXVhbGlmaWVyVG9NZXRob2RDYWxsLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGVTb3J0aW5nL1Bhc3NpbmdRdWFsaWZpZXJUb01ldGhvZENhbGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNGQ5ODhhCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlU29ydGluZy9QYXNzaW5nUXVhbGlmaWVyVG9NZXRob2RDYWxsLmphdmEKQEAgLTAsMCArMSwxMSBAQAorY2xhc3MgRm9vIHsKKworICB2b2lkIHJlZ2lzdGVyKEZvbyBwYXJhbSkgeworCisgIH0KKworICB2b2lkIGZvbyhGb28gcGFyYW0pIHsKKyAgICBwYXJhbS5yZWdpc3Rlcig8Y2FyZXQ+KQorICB9CisKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGVTb3J0aW5nL1Bhc3NpbmdUaGlzVG9VbnF1YWxpZmllZE1ldGhvZENhbGwuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZVNvcnRpbmcvUGFzc2luZ1RoaXNUb1VucXVhbGlmaWVkTWV0aG9kQ2FsbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg1NGMyMTQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGVTb3J0aW5nL1Bhc3NpbmdUaGlzVG9VbnF1YWxpZmllZE1ldGhvZENhbGwuamF2YQpAQCAtMCwwICsxLDExIEBACitjbGFzcyBGb28geworCisgIHZvaWQgcmVnaXN0ZXIoRm9vIHBhcmFtKSB7CisKKyAgfQorCisgIHZvaWQgZm9vKEZvbyBwYXJhbSkgeworICAgIHJlZ2lzdGVyKDxjYXJldD4pCisgIH0KKworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZVNvcnRpbmcvUHJlZmVyQWNjZXNzaWJsZU1lbWJlcnMuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZVNvcnRpbmcvUHJlZmVyQWNjZXNzaWJsZU1lbWJlcnMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NzZkOGMyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlU29ydGluZy9QcmVmZXJBY2Nlc3NpYmxlTWVtYmVycy5qYXZhCkBAIC0wLDAgKzEsMTIgQEAKK2NsYXNzIEZvbyB7CisgIHByaXZhdGUgc3RhdGljIGZpbmFsIEZvbyBBX1BSSVZBVEU7CisgIEBEZXByZWNhdGVkIHB1YmxpYyBzdGF0aWMgZmluYWwgRm9vIEJfREVQUkVDQVRFRDsKKyAgcHVibGljIHN0YXRpYyBmaW5hbCBGb28gQ19OT1JNQUw7CisKK30KKworY2xhc3MgQmFyIHsKKyAgeworICAgIEZvbyBhID0gPGNhcmV0PgorICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlU29ydGluZy9QcmVmZXJDb2xsZWN0aW9uc0VtcHR5TGlzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlU29ydGluZy9QcmVmZXJDb2xsZWN0aW9uc0VtcHR5TGlzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBiNjkyMGMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGVTb3J0aW5nL1ByZWZlckNvbGxlY3Rpb25zRW1wdHlMaXN0LmphdmEKQEAgLTAsMCArMSwxMiBAQAoraW1wb3J0IGphdmEudXRpbC5MaXN0OworCitwdWJsaWMgY2xhc3MgQWFhYWFhYSB7CisKKyAgTGlzdDxTdHJpbmc+IGxvY01ldGhvZCgpIHt9CisKKyAgICB7CisgICAgICAgIExpc3Q8U3RyaW5nPiBsb2NhbCA9IG51bGw7CisgICAgICAgIExpc3Q8U3RyaW5nPiBsID0gPGNhcmV0PgorICAgIH0KKworfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlU29ydGluZy9QcmVmZXJEZWxlZ2F0aW5nTWV0aG9kUGFyYW1zLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGVTb3J0aW5nL1ByZWZlckRlbGVnYXRpbmdNZXRob2RQYXJhbXMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZGY4YTE2Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlU29ydGluZy9QcmVmZXJEZWxlZ2F0aW5nTWV0aG9kUGFyYW1zLmphdmEKQEAgLTAsMCArMSw3IEBACitwdWJsaWMgY2xhc3MgQSB7CisgIHByaXZhdGUgQSBteURlbGVnYXRlOworCisgIHB1YmxpYyB2b2lkIG1ldGhvZChTdHJpbmcgYWJjLCBTdHJpbmcgeHl6KSB7CisgICAgbXlEZWxlZ2F0ZS5tZXRob2QoYWJjLCA8Y2FyZXQ+KTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZVNvcnRpbmcvUHJlZmVyRmllbGRzVG9NZXRob2RzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGVTb3J0aW5nL1ByZWZlckZpZWxkc1RvTWV0aG9kcy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRkMmRkY2YKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGVTb3J0aW5nL1ByZWZlckZpZWxkc1RvTWV0aG9kcy5qYXZhCkBAIC0wLDAgKzEsOSBAQAorY2xhc3MgRm9vIHsKKyAgU3RyaW5nIG15VmVyc2lvbjsKKyAgU3RyaW5nIGdldFZlcnNpb24oKTsKKyAgU3RyaW5nIGdldFNlbGVjdGVkVmVyc2lvbigpOworICBTdHJpbmcgY2FsY3VsYXRlVmVyc2lvbigpOworICB7CisgICAgU3RyaW5nIHZlcnNpb24gPSA8Y2FyZXQ+CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGVTb3J0aW5nL1ByZWZlckltcG9ydGVkQ2xhc3Nlcy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlU29ydGluZy9QcmVmZXJJbXBvcnRlZENsYXNzZXMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZDczYzQwCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlU29ydGluZy9QcmVmZXJJbXBvcnRlZENsYXNzZXMuamF2YQpAQCAtMCwwICsxLDggQEAKK2ltcG9ydCBqYXZheC5zd2luZy5KUGFuZWw7CisKK3B1YmxpYyBjbGFzcyBGb29CZWFuMyBleHRlbmRzIGphdmF4LnN3aW5nLkpDb21wb25lbnQgeworCisgICAgeworICAgICAgICBhZGQobmV3IDxjYXJldD4pCisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZVNvcnRpbmcvUHJlZmVyTWF0Y2hlZFdvcmRzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGVTb3J0aW5nL1ByZWZlck1hdGNoZWRXb3Jkcy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNlNDAyMTgKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGVTb3J0aW5nL1ByZWZlck1hdGNoZWRXb3Jkcy5qYXZhCkBAIC0wLDAgKzEsOCBAQAorcHVibGljIGNsYXNzIFpaWlpaWiB7CisgICAgcHVibGljIFN0cmluZyBnZXRUaXRsZSgpIHsgfQorICAgIHByaXZhdGUgc3RhdGljIFN0cmluZyBnZXRWZXJzaW9uU3RyaW5nKGludCBhKSB7fQorCisgICAgcHVibGljIFN0cmluZyBnZXREZWZhdWx0VmVyc2lvbigpIHsKKyAgICAgICAgcmV0dXJuIDxjYXJldD4KKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlU29ydGluZy9QcmVmZXJOZXN0ZWRDbGFzc2VzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGVTb3J0aW5nL1ByZWZlck5lc3RlZENsYXNzZXMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZGY3MGEyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlU29ydGluZy9QcmVmZXJOZXN0ZWRDbGFzc2VzLmphdmEKQEAgLTAsMCArMSw4IEBACitwdWJsaWMgY2xhc3MgRm9vQmVhbjMgZXh0ZW5kcyBqYXZheC5zd2luZy5KQ29tcG9uZW50IHsKKworICAgIHsKKyAgICAgICAgYWRkKG5ldyA8Y2FyZXQ+KQorICAgIH0KKworICAgIHByaXZhdGUgY2xhc3MgTmVzdGVkQ2xhc3MgZXh0ZW5kcyBGb29CZWFuMyB7fQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZVNvcnRpbmcvUHJlZmVyTm9uUmVjdXJzaXZlTWV0aG9kUGFyYW1zLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGVTb3J0aW5nL1ByZWZlck5vblJlY3Vyc2l2ZU1ldGhvZFBhcmFtcy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNiMTVhZDcKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGVTb3J0aW5nL1ByZWZlck5vblJlY3Vyc2l2ZU1ldGhvZFBhcmFtcy5qYXZhCkBAIC0wLDAgKzEsMTEgQEAKK2NsYXNzIEZvbyB7CisgIEZvbyBmb28oaW50IGksIFN0cmluZyBzKSB7CisKKyAgfQorCisgIEZvbyBmb28oU3RyaW5nIHMpIHsKKyAgICBTdHJpbmcgYTsKKyAgICBpbnQgYjsKKyAgICByZXR1cm4gZm9vKDxjYXJldD4pCisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGVTb3J0aW5nL1ByZWZlck90aGVyR2V0dGVySW5TZXR0ZXJDYWxsLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGVTb3J0aW5nL1ByZWZlck90aGVyR2V0dGVySW5TZXR0ZXJDYWxsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODYxY2NlMwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZVNvcnRpbmcvUHJlZmVyT3RoZXJHZXR0ZXJJblNldHRlckNhbGwuamF2YQpAQCAtMCwwICsxLDEzIEBACitwdWJsaWMgY2xhc3MgQWFhYWFhYSB7CisgIGludCBjb2xvcjsKKworICB2b2lkIHNldENvbG9yKGludCBjb2xvcikge30KKyAgaW50IGdldENvbG9yKCkge30KKyAgaW50IGdldFpvb0NvbG9yKCkge30KKworICB2b2lkIGZvbyhBYWFhYWFhIGEpIHsKKyAgICBzZXRDb2xvcihhLjxjYXJldD4pOworICB9CisKKworfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlU29ydGluZy9QcmVmZXJQYXJhbWV0ZXJzVG9HZXR0ZXJzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGVTb3J0aW5nL1ByZWZlclBhcmFtZXRlcnNUb0dldHRlcnMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYTE2NTM1Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlU29ydGluZy9QcmVmZXJQYXJhbWV0ZXJzVG9HZXR0ZXJzLmphdmEKQEAgLTAsMCArMSwxNiBAQAorY2xhc3MgVCB7CisgICAgSSBsYXN0STsKKyAgICBJIGdldExhc3RJKCkgeyByZXR1cm4gbGFzdEk7IH0KKworICAgIHZvaWQgc2V0TGFzdEkoSSBhKSB7CisgICAgICAgIGxhc3RJID0gPGNhcmV0PgorICAgIH0KK30KKworY2xhc3MgSSB7CisgICAgc3RhdGljIGZpbmFsIEkgXzEgPSBuZXcgSSgpOworCisgICAgc3RhdGljIEkgdmFsdWVPZihTdHJpbmcgc3RoKSB7CisgICAgICAgIHJldHVybiBudWxsOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGVTb3J0aW5nL1ByZWZlclNhbWVOYW1lZE1ldGhvZHMuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZVNvcnRpbmcvUHJlZmVyU2FtZU5hbWVkTWV0aG9kcy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAzZDEwMDMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGVTb3J0aW5nL1ByZWZlclNhbWVOYW1lZE1ldGhvZHMuamF2YQpAQCAtMCwwICsxLDE1IEBACitjbGFzcyBHb28geworICAgIGludCBib28oKSB7fQorICAgIGludCBkb28oKSB7fQorICAgIGludCBmb28oKSB7fQorfQorCitjbGFzcyBGb29vbyB7CisgICAgR29vIGc7CisKKyAgICBpbnQgZm9vKCkgeworICAgICAgICByZXR1cm4gZy48Y2FyZXQ+CisgICAgfQorCit9CisKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZVNvcnRpbmcvUHJlZmVycmVkQnlOYW1lRG9udENoYW5nZVN0YXRpc3RpY3MuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZVNvcnRpbmcvUHJlZmVycmVkQnlOYW1lRG9udENoYW5nZVN0YXRpc3RpY3MuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNTkxYmI2Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlU29ydGluZy9QcmVmZXJyZWRCeU5hbWVEb250Q2hhbmdlU3RhdGlzdGljcy5qYXZhCkBAIC0wLDAgKzEsMTIgQEAKK2NsYXNzIEZvbyB7CisgIGJvb2xlYW4gZm9vOworICBib29sZWFuIGJhcjsKKworICB7CisgICAgZm9vKGY8Y2FyZXQ+KQorICB9CisKKyAgdm9pZCBmb28oYm9vbGVhbiBmb28sIGJvb2xlYW4gYmFyKSB7CisgIH0KKworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZVNvcnRpbmcvU21hcnRDb2xsZWN0aW9ucy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlU29ydGluZy9TbWFydENvbGxlY3Rpb25zLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDFkYTRhMAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZVNvcnRpbmcvU21hcnRDb2xsZWN0aW9ucy5qYXZhCkBAIC0wLDAgKzEsMTAgQEAKK3B1YmxpYyBjbGFzcyBGb28geworCisgICAgeworICAgICAgICBTdHJpbmcgczsKKyAgICAgICAgT2JqZWN0IG87CisgICAgICAgIGphdmEudXRpbC5MaXN0PFN0cmluZz4gbGlzdDsKKyAgICAgICAgbGlzdC5jb250YWlucyg8Y2FyZXQ+KQorICAgIH0KKworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZVNvcnRpbmcvU21hcnRDb2xsZWN0aW9uc05ldy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlU29ydGluZy9TbWFydENvbGxlY3Rpb25zTmV3LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjc2ZjYzOQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZVNvcnRpbmcvU21hcnRDb2xsZWN0aW9uc05ldy5qYXZhCkBAIC0wLDAgKzEsMTAgQEAKK3B1YmxpYyBhYnN0cmFjdCBjbGFzcyBGb28geworCisgICBwcml2YXRlIGNsYXNzIEJhciBleHRlbmRzIEZvbyB7fQorCisgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgIGphdmEudXRpbC5MaXN0PEZvbz4gbGlzdDsKKyAgICAgICAgbGlzdC5jb250YWlucyhuZXcgPGNhcmV0PikKKyAgICB9CisKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGVTb3J0aW5nL1NtYXJ0RXF1YWxzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGVTb3J0aW5nL1NtYXJ0RXF1YWxzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTEyYWJmMQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZVNvcnRpbmcvU21hcnRFcXVhbHMuamF2YQpAQCAtMCwwICsxLDkgQEAKK3B1YmxpYyBjbGFzcyBGb28geworCisgICAgeworICAgICAgICBTdHJpbmcgczsKKyAgICAgICAgT2JqZWN0IG87CisgICAgICAgIG5ldyBTdHJpbmcoKS5lcXVhbHMoPGNhcmV0PikKKyAgICB9CisKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGVTb3J0aW5nL1NtYXJ0RXF1YWxzMi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlU29ydGluZy9TbWFydEVxdWFsczIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MWJmZDA2Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlU29ydGluZy9TbWFydEVxdWFsczIuamF2YQpAQCAtMCwwICsxLDEwIEBACitwdWJsaWMgY2xhc3MgRm9vIHsKKworICAgIHsKKyAgICAgICAgU3RyaW5nIHM7CisgICAgICAgIEZvbyBmb287CisgICAgICAgIE9iamVjdCBvOworICAgICAgICBuZXcgRm9vKCkuZXF1YWxzKDxjYXJldD4pCisgICAgfQorCit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlU29ydGluZy9TbWFydEVxdWFsczMuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZVNvcnRpbmcvU21hcnRFcXVhbHMzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2ViZjc3NAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZVNvcnRpbmcvU21hcnRFcXVhbHMzLmphdmEKQEAgLTAsMCArMSwxMCBAQAorcHVibGljIGNsYXNzIEZvbyB7CisKKyAgICB7CisgICAgICAgIFN0cmluZyBhOworICAgICAgICBGb28gYjsKKyAgICAgICAgT2JqZWN0IHo7CisgICAgICAgIGVxdWFscyg8Y2FyZXQ+KQorICAgIH0KKworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZVNvcnRpbmcvU21hcnRFcXVhbHNOZXcuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZVNvcnRpbmcvU21hcnRFcXVhbHNOZXcuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYjVjZDk3Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlU29ydGluZy9TbWFydEVxdWFsc05ldy5qYXZhCkBAIC0wLDAgKzEsOSBAQAorcHVibGljIGFic3RyYWN0IGNsYXNzIEZvbyB7CisKKyAgIHByaXZhdGUgY2xhc3MgQmFyIGV4dGVuZHMgRm9vIHt9CisKKyAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgbmV3IEZvbygpLmVxdWFscyhuZXcgPGNhcmV0PikKKyAgICB9CisKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGVTb3J0aW5nL1NtYXJ0RXF1YWxzTmV3Mi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlU29ydGluZy9TbWFydEVxdWFsc05ldzIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMjE2YjNkCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlU29ydGluZy9TbWFydEVxdWFsc05ldzIuamF2YQpAQCAtMCwwICsxLDcgQEAKK3B1YmxpYyBhYnN0cmFjdCBjbGFzcyBGb28geworCisgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgIHRoaXMuZXF1YWxzKG5ldyA8Y2FyZXQ+KQorICAgIH0KKworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZVNvcnRpbmcvU3RhdGlzdGljc0FmZmVjdHNOb25QcmVmZXJhYmxlRXhwZWN0ZWRJdGVtcy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlU29ydGluZy9TdGF0aXN0aWNzQWZmZWN0c05vblByZWZlcmFibGVFeHBlY3RlZEl0ZW1zLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDM3ZTc2YgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZVNvcnRpbmcvU3RhdGlzdGljc0FmZmVjdHNOb25QcmVmZXJhYmxlRXhwZWN0ZWRJdGVtcy5qYXZhCkBAIC0wLDAgKzEsMyBAQAorY2xhc3MgRm9vIHsKKyAgamF2YS51dGlsLkxpc3Q8Rm9vPiBwID0gbmV3IDxjYXJldD4KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGVTb3J0aW5nL1htbFRhZ0dldEF0dHJpYnV0ZS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlU29ydGluZy9YbWxUYWdHZXRBdHRyaWJ1dGUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZTMwYWQ2Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlU29ydGluZy9YbWxUYWdHZXRBdHRyaWJ1dGUuamF2YQpAQCAtMCwwICsxLDExIEBACitjbGFzcyBGb28geworICBTdHJpbmcgZ2V0QXR0cmlidXRlVmFsdWUoU3RyaW5nIHMpOworICBTdHJpbmcgZ2V0TmFtZXNwYWNlKCk7Cit9CisKK2NsYXNzIEJhciB7CisgIFN0cmluZyBnZXRBdHRyaWJ1dGUoKSB7CisgICAgRm9vIGY7CisgICAgcmV0dXJuIGYuPGNhcmV0PgorICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc3R5bGUvQWZ0ZXJOZXcxNS1vdXQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3N0eWxlL0FmdGVyTmV3MTUtb3V0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmQ0M2Q1ZQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3N0eWxlL0FmdGVyTmV3MTUtb3V0LmphdmEKQEAgLTAsMCArMSwxMiBAQAoraW1wb3J0IGphdmEuaW8uRmlsZTsKK2ltcG9ydCBqYXZhLmlvLkZpbGVuYW1lRmlsdGVyOworCitjbGFzcyBBIHsKKyAgeworICAgIG5ldyBqYXZhLmlvLkZpbGUoImFhYSIpLmxpc3QobmV3IEZpbGVuYW1lRmlsdGVyKCkgeworICAgICAgICBwdWJsaWMgYm9vbGVhbiBhY2NlcHQoRmlsZSBkaXIsIFN0cmluZyBuYW1lKSB7CisgICAgICAgICAgICA8c2VsZWN0aW9uPnJldHVybiBmYWxzZTsgIC8vVG8gY2hhbmdlIGJvZHkgb2YgaW1wbGVtZW50ZWQgbWV0aG9kcyB1c2UgRmlsZSB8IFNldHRpbmdzIHwgRmlsZSBUZW1wbGF0ZXMuPC9zZWxlY3Rpb24+CisgICAgICAgIH0KKyAgICB9KTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3N0eWxlL0FmdGVyTmV3MTUuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3N0eWxlL0FmdGVyTmV3MTUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMjQ0ZTg2Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc3R5bGUvQWZ0ZXJOZXcxNS5qYXZhCkBAIC0wLDAgKzEsNSBAQAorY2xhc3MgQSB7CisgIHsKKyAgICBuZXcgamF2YS5pby5GaWxlKCJhYWEiKS5saXN0KG5ldyA8Y2FyZXQ+KTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3N0eWxlL2FmdGVyMS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc3R5bGUvYWZ0ZXIxLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGU4ZjBlYgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3N0eWxlL2FmdGVyMS5qYXZhCkBAIC0wLDAgKzEsMTAgQEAKK2NsYXNzIEF7CisgaW50ZXJmYWNlIEE8VD57fQorIGNsYXNzIE15R2VuZXJpY0NsYXNzMTxUPiBpbXBsZW1lbnRzIEE8VD57fQorIGNsYXNzIE15R2VuZXJpY0NsYXNzMjxUPiBpbXBsZW1lbnRzIEE8VD57fQorIGNsYXNzIE15R2VuZXJpY0NsYXNzMzxUPiBpbXBsZW1lbnRzIEE8VD57fQorCisgeworICAgQTxTdHJpbmc+IGEgPSBuZXcgTXlHZW5lcmljQ2xhc3MyPFN0cmluZz4oKTs8Y2FyZXQ+CisgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc3R5bGUvYWZ0ZXIxMC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc3R5bGUvYWZ0ZXIxMC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE2MWZlOGUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zdHlsZS9hZnRlcjEwLmphdmEKQEAgLTAsMCArMSwxMiBAQAorY2xhc3MgQXsKKyBjbGFzcyBDb25zdGFudHN7CisgIHB1YmxpYyBzdGF0aWMgZmluYWwgQ29uc3RhbnRzIHh4eHg7CisgfQorCisgcHVibGljIHZvaWQgZm9vKENvbnN0YW50cyBzKXt9CisgcHVibGljIHZvaWQgZm9vKGJvb2xlYW4gYm9sKXt9CisKKyB7CisgIGZvbyhDb25zdGFudHMueHh4eCk7CisgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3N0eWxlL2FmdGVyMTEuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3N0eWxlL2FmdGVyMTEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZjUyNDc4Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc3R5bGUvYWZ0ZXIxMS5qYXZhCkBAIC0wLDAgKzEsNSBAQAorY2xhc3MgQXsKKyB7CisgIFN0cmluZy5DQVNFX0lOU0VOU0lUSVZFX09SREVSPGNhcmV0Pmthc2pkaGdma2phc2dmCisgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3N0eWxlL2FmdGVyMTIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3N0eWxlL2FmdGVyMTIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YTRlMzQ0NQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3N0eWxlL2FmdGVyMTIuamF2YQpAQCAtMCwwICsxLDMgQEAKK2NsYXNzIEF7CisgIFN0cmluZyBzID0gbmV3IFN0cmluZyg8Y2FyZXQ+KTtCbGFoKCkKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zdHlsZS9hZnRlcjEzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zdHlsZS9hZnRlcjEzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzA0YmJiOQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3N0eWxlL2FmdGVyMTMuamF2YQpAQCAtMCwwICsxLDUgQEAKK2NsYXNzIEF7CisgeworIG5ldyBBKCkudG9TdHJpbmcoKTxjYXJldD47CisgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3N0eWxlL2FmdGVyMTUuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3N0eWxlL2FmdGVyMTUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ODFiZWQ4Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc3R5bGUvYWZ0ZXIxNS5qYXZhCkBAIC0wLDAgKzEsNiBAQAorY2xhc3MgQXsKK3sKKyBTdHJpbmcgc3RyOworIHN0ci50b0NoYXJBcnJheSgpOworIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zdHlsZS9hZnRlcjE2LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zdHlsZS9hZnRlcjE2LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmQ0ZjhlMgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3N0eWxlL2FmdGVyMTYuamF2YQpAQCAtMCwwICsxLDggQEAKK2NsYXNzIEF7Cit7CitTdHJpbmcgc3RyOworCitzdHIuc3Vic3RyaW5nKDxjYXJldD4pOworamhhc2dmamhzZGdmKCk7Cit9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc3R5bGUvYWZ0ZXIxNy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc3R5bGUvYWZ0ZXIxNy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMwMTcwNDcKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zdHlsZS9hZnRlcjE3LmphdmEKQEAgLTAsMCArMSw3IEBACitjbGFzcyBBeworIHsKKyAgZmluYWwgU3RyaW5nIHBhdGggPSBCQVNFX1BBVEg7CisgIHBhdGgudG9DaGFyQXJyYXkoKTxjYXJldD47CisgIHNka2Zqc2RraGpmaCgpOworIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zdHlsZS9hZnRlcjIxLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zdHlsZS9hZnRlcjIxLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjkzNGQ0ZgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3N0eWxlL2FmdGVyMjEuamF2YQpAQCAtMCwwICsxLDkgQEAKK3B1YmxpYyBjbGFzcyBHZW5lcmljc1NtYXJ0Q2FzdDxUPnsKKyAgcHVibGljIEdlbmVyaWNzU21hcnRDYXN0KEdlbmVyaWNzU21hcnRDYXN0PFQ+IG90aGVyKSB7fQorCisgIHB1YmxpYyBzdGF0aWMgT2JqZWN0IGZvbygpIHsgcmV0dXJuIG51bGw7IH0KKworICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisgICAgR2VuZXJpY3NTbWFydENhc3Q8U3RyaW5nPiBiYXIgPSBuZXcgR2VuZXJpY3NTbWFydENhc3Q8U3RyaW5nPigoR2VuZXJpY3NTbWFydENhc3Q8U3RyaW5nPikgZm9vKCkpOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc3R5bGUvYWZ0ZXIyMi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc3R5bGUvYWZ0ZXIyMi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYwYTFhNmEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zdHlsZS9hZnRlcjIyLmphdmEKQEAgLTAsMCArMSw1IEBACitjbGFzcyBBeworeworc3luY2hyb25pemVkKCA8Y2FyZXQ+ICkKK30KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zdHlsZS9hZnRlcjMuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3N0eWxlL2FmdGVyMy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFiYmU2OWMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zdHlsZS9hZnRlcjMuamF2YQpAQCAtMCwwICsxLDEwIEBACitjbGFzcyBBeworICB2b2lkIGZvbyhpbnQgYSl7fQorICB2b2lkIGZvbyhpbnQgYSwgaW50IGIpe30KKworICB7CisgICBpbnQgYWFhID0gMDsKKworICAgZm9vKGFhYTxjYXJldD4KKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3N0eWxlL2FmdGVyMzEuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3N0eWxlL2FmdGVyMzEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MWNmZTIwYgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3N0eWxlL2FmdGVyMzEuamF2YQpAQCAtMCwwICsxLDYgQEAKK2NsYXNzIEF7CisgeworICBPYmplY3Qgb2JqOworICBTdHJpbmcgcyA9IChTdHJpbmcgKQorIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zdHlsZS9hZnRlcjMyLWEuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3N0eWxlL2FmdGVyMzItYS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM3OTUyNDgKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zdHlsZS9hZnRlcjMyLWEuamF2YQpAQCAtMCwwICsxLDcgQEAKK2NsYXNzIEF7CisgeworICBPYmplY3Qgb2JqOworICBTdHJpbmcgcyA9IG51bGw7CisgIHMuc3Vic3RyaW5nICggPGNhcmV0PiApCisgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3N0eWxlL2FmdGVyMzIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3N0eWxlL2FmdGVyMzIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MTRkNmFhCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc3R5bGUvYWZ0ZXIzMi5qYXZhCkBAIC0wLDAgKzEsNyBAQAorY2xhc3MgQXsKKyB7CisgIE9iamVjdCBvYmo7CisgIFN0cmluZyBzID0gbnVsbDsKKyAgcy5zdWJzdHJpbmcgKDxjYXJldD4pCisgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3N0eWxlL2FmdGVyMzMuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3N0eWxlL2FmdGVyMzMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOTk1Nzc3Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc3R5bGUvYWZ0ZXIzMy5qYXZhCkBAIC0wLDAgKzEsMTMgQEAKK2NsYXNzIEF7CisgcHVibGljIHN0YXRpYyBmaW5hbCBBIE9ORSA9IG5ldyBBKCk7CisgcHVibGljIHN0YXRpYyBmaW5hbCBBIFRXTyA9IG5ldyBBKCk7CisgcHVibGljIHN0YXRpYyBmaW5hbCBBIFRIUkVFID0gbmV3IEEoKTsKK30KKworY2xhc3MgQnsKKworIHN0YXRpYyB2b2lkIGZvbygpe30KKyB7CisgIEEgYSA9IEEuT05FO0IuZm9vKCk7JworIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3N0eWxlL2FmdGVyMzQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3N0eWxlL2FmdGVyMzQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NGNjNTNmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc3R5bGUvYWZ0ZXIzNC5qYXZhCkBAIC0wLDAgKzEsNSBAQAorY2xhc3MgQXsKKyB7CisgRmlsZTxjYXJldD4KKyB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc3R5bGUvYWZ0ZXIzNi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc3R5bGUvYWZ0ZXIzNi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM4MDVhZmYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zdHlsZS9hZnRlcjM2LmphdmEKQEAgLTAsMCArMSw3IEBACitjbGFzcyBBeworIC8qKgorICAgKiBAZGVwcmVjYXRlZCB1c2Uge0BsaW5rICNmb28oU3RyaW5nLCBTdHJpbmcpfQorICAgKi8KKyB2b2lkIGFhYSgpe30KKyB2b2lkIGZvbyhTdHJpbmcgYSwgU3RyaW5nIGIpe30KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3N0eWxlL2FmdGVyMzguamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3N0eWxlL2FmdGVyMzguamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NzYwNzZmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc3R5bGUvYWZ0ZXIzOC5qYXZhCkBAIC0wLDAgKzEsMyBAQAorcHVibGljIGludGVyZmFjZSBTb21ldGhpbmdDb29seworICAgIFNvbWV0aGluZ0Nvb2wgZ2V0U29tZXRoaW5nQ29vbDxjYXJldD4KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3N0eWxlL2FmdGVyMzkuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3N0eWxlL2FmdGVyMzkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZGJkMmNkCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc3R5bGUvYWZ0ZXIzOS5qYXZhCkBAIC0wLDAgKzEsMTIgQEAKK2NsYXNzIEF7CisgcHVibGljIHN0YXRpYyBmaW5hbCBBIE9ORSA9IG5ldyBBKCk7CisgcHVibGljIHN0YXRpYyBmaW5hbCBBIFRXTyA9IG5ldyBBKCk7CisgcHVibGljIHN0YXRpYyBmaW5hbCBBIFRIUkVFID0gbmV3IEEoKTsKK30KKworY2xhc3MgQnsKKworIHN0YXRpYyBBIGZvbygpeworICByZXR1cm4gQS5PTkU7PGNhcmV0PgorIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3N0eWxlL2FmdGVyNC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc3R5bGUvYWZ0ZXI0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTAxYWIxMAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3N0eWxlL2FmdGVyNC5qYXZhCkBAIC0wLDAgKzEsOCBAQAorY2xhc3MgQXsKKyAgdm9pZCBmb28oT2JqZWN0IGEpe30KKyAgdm9pZCBmb28oT2JqZWN0IGEsIGludCBiKXt9CisKKyAgeworICAgZm9vKHRoaXM8Y2FyZXQ+CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zdHlsZS9hZnRlcjYuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3N0eWxlL2FmdGVyNi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEwZDA2NGEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zdHlsZS9hZnRlcjYuamF2YQpAQCAtMCwwICsxLDUgQEAKK2NsYXNzIEF7CisgeworICBib29sZWFuIGEgPSBBPGNhcmV0PjsKKyB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc3R5bGUvYWZ0ZXI3LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zdHlsZS9hZnRlcjcuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NWNmMmVkCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc3R5bGUvYWZ0ZXI3LmphdmEKQEAgLTAsMCArMSw2IEBACitjbGFzcyBBeworIC8qKgorICoge0BsaW5rIFN0cmluZyNjaGFyQXQoaW50KX0gPGNhcmV0PgorICovCisgdm9pZCBmb28oKXt9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc3R5bGUvYWZ0ZXI4LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zdHlsZS9hZnRlcjguamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MDA2YjdkCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc3R5bGUvYWZ0ZXI4LmphdmEKQEAgLTAsMCArMSwxMiBAQAorY2xhc3MgQXsKKyBjbGFzcyBDb25zdGFudHN7CisgIHB1YmxpYyBzdGF0aWMgZmluYWwgQ29uc3RhbnRzIHh4eHg7CisgfQorCisgcHVibGljIHZvaWQgZm9vKENvbnN0YW50cyBzKXt9CisgcHVibGljIHZvaWQgZm9vKGJvb2xlYW4gYm9sKXt9CisKKyB7CisgIGZvbyhDb25zdGFudHMueHh4eCk7PGNhcmV0PgorIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zdHlsZS9hZnRlcjkuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3N0eWxlL2FmdGVyOS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE2MWZlOGUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zdHlsZS9hZnRlcjkuamF2YQpAQCAtMCwwICsxLDEyIEBACitjbGFzcyBBeworIGNsYXNzIENvbnN0YW50c3sKKyAgcHVibGljIHN0YXRpYyBmaW5hbCBDb25zdGFudHMgeHh4eDsKKyB9CisKKyBwdWJsaWMgdm9pZCBmb28oQ29uc3RhbnRzIHMpe30KKyBwdWJsaWMgdm9pZCBmb28oYm9vbGVhbiBib2wpe30KKworIHsKKyAgZm9vKENvbnN0YW50cy54eHh4KTsKKyB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc3R5bGUvYmVmb3JlMS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc3R5bGUvYmVmb3JlMS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNjOGEyMGEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zdHlsZS9iZWZvcmUxLmphdmEKQEAgLTAsMCArMSwxMCBAQAorY2xhc3MgQXsKKyBpbnRlcmZhY2UgQTxUPnt9CisgY2xhc3MgTXlHZW5lcmljQ2xhc3MxPFQ+IGltcGxlbWVudHMgQTxUPnt9CisgY2xhc3MgTXlHZW5lcmljQ2xhc3MyPFQ+IGltcGxlbWVudHMgQTxUPnt9CisgY2xhc3MgTXlHZW5lcmljQ2xhc3MzPFQ+IGltcGxlbWVudHMgQTxUPnt9CisKKyB7CisgICBBPFN0cmluZz4gYSA9IG5ldyA8Y2FyZXQ+YXNqZGdqaDxPYmplY3Q+CisgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc3R5bGUvYmVmb3JlMTAuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3N0eWxlL2JlZm9yZTEwLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzk3ZjBkNgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3N0eWxlL2JlZm9yZTEwLmphdmEKQEAgLTAsMCArMSwxMiBAQAorY2xhc3MgQXsKKyBjbGFzcyBDb25zdGFudHN7CisgIHB1YmxpYyBzdGF0aWMgZmluYWwgQ29uc3RhbnRzIHh4eHg7CisgfQorCisgcHVibGljIHZvaWQgZm9vKENvbnN0YW50cyBzKXt9CisgcHVibGljIHZvaWQgZm9vKGJvb2xlYW4gYm9sKXt9CisKKyB7CisgIGZvbyg8Y2FyZXQ+ZXF1YWxzKTsKKyB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc3R5bGUvYmVmb3JlMTEuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3N0eWxlL2JlZm9yZTExLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjI1ODViMAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3N0eWxlL2JlZm9yZTExLmphdmEKQEAgLTAsMCArMSw1IEBACitjbGFzcyBBeworIHsKKyAgU3RyaW5nLkM8Y2FyZXQ+a2FzamRoZ2ZramFzZ2YKKyB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc3R5bGUvYmVmb3JlMTIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3N0eWxlL2JlZm9yZTEyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2Q5MzVkNwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3N0eWxlL2JlZm9yZTEyLmphdmEKQEAgLTAsMCArMSwzIEBACitjbGFzcyBBeworICBTdHJpbmcgcyA9IG5ldyA8Y2FyZXQ+QmxhaCgpCit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc3R5bGUvYmVmb3JlMTMuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3N0eWxlL2JlZm9yZTEzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDkzZmQ2YQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3N0eWxlL2JlZm9yZTEzLmphdmEKQEAgLTAsMCArMSw1IEBACitjbGFzcyBBeworIHsKKyBuZXcgQSgpLnRvU3RyaW5nPGNhcmV0PigpOworIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zdHlsZS9iZWZvcmUxNS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc3R5bGUvYmVmb3JlMTUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zN2Y0ZWY1Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc3R5bGUvYmVmb3JlMTUuamF2YQpAQCAtMCwwICsxLDYgQEAKK2NsYXNzIEF7Cit7CisgU3RyaW5nIHN0cjsKKyBzdHIudG88Y2FyZXQ+c3Vic3RyaW5nKCk7CisgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3N0eWxlL2JlZm9yZTE2LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zdHlsZS9iZWZvcmUxNi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVjZTkwMjUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zdHlsZS9iZWZvcmUxNi5qYXZhCkBAIC0wLDAgKzEsOCBAQAorY2xhc3MgQXsKK3sKK1N0cmluZyBzdHI7CisKK3N0ci5zdWI8Y2FyZXQ+dG9TdHJpbmcoKTsKK2poYXNnZmpoc2RnZigpOworfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3N0eWxlL2JlZm9yZTE3LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zdHlsZS9iZWZvcmUxNy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJhNTAxZWUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zdHlsZS9iZWZvcmUxNy5qYXZhCkBAIC0wLDAgKzEsNyBAQAorY2xhc3MgQXsKKyB7CisgIGZpbmFsIFN0cmluZyBwYXRoID0gQkFTRV9QQVRIOworICBwYXRoLnRvPGNhcmV0PnN1YmJzdHJpbmcoKTsKKyAgc2RrZmpzZGtoamZoKCk7CisgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3N0eWxlL2JlZm9yZTIxLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zdHlsZS9iZWZvcmUyMS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJiYWVmODgKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zdHlsZS9iZWZvcmUyMS5qYXZhCkBAIC0wLDAgKzEsOSBAQAorcHVibGljIGNsYXNzIEdlbmVyaWNzU21hcnRDYXN0PFQ+eworICBwdWJsaWMgR2VuZXJpY3NTbWFydENhc3QoR2VuZXJpY3NTbWFydENhc3Q8VD4gb3RoZXIpIHt9CisKKyAgcHVibGljIHN0YXRpYyBPYmplY3QgZm9vKCkgeyByZXR1cm4gbnVsbDsgfQorCisgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKyAgICBHZW5lcmljc1NtYXJ0Q2FzdDxTdHJpbmc+IGJhciA9IG5ldyBHZW5lcmljc1NtYXJ0Q2FzdDxTdHJpbmc+KCg8Y2FyZXQ+KSBmb28oKSk7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zdHlsZS9iZWZvcmUyMi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc3R5bGUvYmVmb3JlMjIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YWQ0NzJhCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc3R5bGUvYmVmb3JlMjIuamF2YQpAQCAtMCwwICsxLDUgQEAKK2NsYXNzIEF7Cit7CitzeW5jaDxjYXJldD4KK30KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zdHlsZS9iZWZvcmUzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zdHlsZS9iZWZvcmUzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTIwMzk1OAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3N0eWxlL2JlZm9yZTMuamF2YQpAQCAtMCwwICsxLDEwIEBACitjbGFzcyBBeworICB2b2lkIGZvbyhpbnQgYSl7fQorICB2b2lkIGZvbyhpbnQgYSwgaW50IGIpe30KKworICB7CisgICBpbnQgYWFhID0gMDsKKworICAgZm9vKGFhPGNhcmV0PgorICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc3R5bGUvYmVmb3JlMzEuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3N0eWxlL2JlZm9yZTMxLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGNjNTZmYQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3N0eWxlL2JlZm9yZTMxLmphdmEKQEAgLTAsMCArMSw2IEBACitjbGFzcyBBeworIHsKKyAgT2JqZWN0IG9iajsKKyAgU3RyaW5nIHMgPSAoPGNhcmV0PikKKyB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc3R5bGUvYmVmb3JlMzIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3N0eWxlL2JlZm9yZTMyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjc3Y2Q1MgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3N0eWxlL2JlZm9yZTMyLmphdmEKQEAgLTAsMCArMSw3IEBACitjbGFzcyBBeworIHsKKyAgT2JqZWN0IG9iajsKKyAgU3RyaW5nIHMgPSBudWxsOworICBzLnN1YnN0cjxjYXJldD4KKyB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc3R5bGUvYmVmb3JlMzMuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3N0eWxlL2JlZm9yZTMzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTY0NTJjZgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3N0eWxlL2JlZm9yZTMzLmphdmEKQEAgLTAsMCArMSwxMyBAQAorY2xhc3MgQXsKKyBwdWJsaWMgc3RhdGljIGZpbmFsIEEgT05FID0gbmV3IEEoKTsKKyBwdWJsaWMgc3RhdGljIGZpbmFsIEEgVFdPID0gbmV3IEEoKTsKKyBwdWJsaWMgc3RhdGljIGZpbmFsIEEgVEhSRUUgPSBuZXcgQSgpOworfQorCitjbGFzcyBCeworCisgc3RhdGljIHZvaWQgZm9vKCl7fQorIHsKKyAgQSBhID0gPGNhcmV0PkIuZm9vKCk7JworIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3N0eWxlL2JlZm9yZTM0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zdHlsZS9iZWZvcmUzNC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ0Y2M1M2YKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zdHlsZS9iZWZvcmUzNC5qYXZhCkBAIC0wLDAgKzEsNSBAQAorY2xhc3MgQXsKKyB7CisgRmlsZTxjYXJldD4KKyB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc3R5bGUvYmVmb3JlMzUuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3N0eWxlL2JlZm9yZTM1LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGU0YWQzN2YKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zdHlsZS9iZWZvcmUzNS5qYXZhCkBAIC0wLDAgKzEsMyBAQAorY2xhc3MgQXsKK2FhCit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc3R5bGUvYmVmb3JlMzYuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3N0eWxlL2JlZm9yZTM2LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjZiODNiZAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3N0eWxlL2JlZm9yZTM2LmphdmEKQEAgLTAsMCArMSw3IEBACitjbGFzcyBBeworIC8qKgorICAgKiBAZGVwcmVjYXRlZCB1c2Uge0BsaW5rICNmPGNhcmV0PmFhYSgpfQorICAgKi8KKyB2b2lkIGFhYSgpe30KKyB2b2lkIGZvbyhTdHJpbmcgYSwgU3RyaW5nIGIpe30KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3N0eWxlL2JlZm9yZTM4LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zdHlsZS9iZWZvcmUzOC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdjNjhhMmUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zdHlsZS9iZWZvcmUzOC5qYXZhCkBAIC0wLDAgKzEsMyBAQAorcHVibGljIGludGVyZmFjZSBTb21ldGhpbmdDb29seworICAgIFNvbWV0aGluZ0Nvb2wgZ2V0U29tZTxjYXJldD4KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3N0eWxlL2JlZm9yZTM5LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zdHlsZS9iZWZvcmUzOS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIyNTFhMmMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zdHlsZS9iZWZvcmUzOS5qYXZhCkBAIC0wLDAgKzEsMTIgQEAKK2NsYXNzIEF7CisgcHVibGljIHN0YXRpYyBmaW5hbCBBIE9ORSA9IG5ldyBBKCk7CisgcHVibGljIHN0YXRpYyBmaW5hbCBBIFRXTyA9IG5ldyBBKCk7CisgcHVibGljIHN0YXRpYyBmaW5hbCBBIFRIUkVFID0gbmV3IEEoKTsKK30KKworY2xhc3MgQnsKKworIHN0YXRpYyBBIGZvbygpeworICByZXR1cm4gPGNhcmV0PjsKKyB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zdHlsZS9iZWZvcmU0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zdHlsZS9iZWZvcmU0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWQ5ZTA2NQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3N0eWxlL2JlZm9yZTQuamF2YQpAQCAtMCwwICsxLDggQEAKK2NsYXNzIEF7CisgIHZvaWQgZm9vKE9iamVjdCBhKXt9CisgIHZvaWQgZm9vKE9iamVjdCBhLCBpbnQgYil7fQorCisgIHsKKyAgIGZvbyh0aDxjYXJldD4KKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3N0eWxlL2JlZm9yZTUuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3N0eWxlL2JlZm9yZTUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNzM1NmQ5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc3R5bGUvYmVmb3JlNS5qYXZhCkBAIC0wLDAgKzEsNiBAQAorY2xhc3MgQXsKKyB7CisgU3RyaW5nIHh4eHg7CisgU3RyaW5nIGEgPSA8Y2FyZXQ+CisgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3N0eWxlL2JlZm9yZTYuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3N0eWxlL2JlZm9yZTYuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNGNiZTA4Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc3R5bGUvYmVmb3JlNi5qYXZhCkBAIC0wLDAgKzEsNSBAQAorY2xhc3MgQXsKKyB7CisgIGJvb2xlYW4gYSA9IEE8Y2FyZXQ+ZmFsc2U7CisgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3N0eWxlL2JlZm9yZTcuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3N0eWxlL2JlZm9yZTcuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOWJmZDJjCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc3R5bGUvYmVmb3JlNy5qYXZhCkBAIC0wLDAgKzEsNiBAQAorY2xhc3MgQXsKKyAvKioKKyAqIHtAbGluayBTdHJpbmcjPGNhcmV0PgorICovCisgdm9pZCBmb28oKXt9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc3R5bGUvYmVmb3JlOC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc3R5bGUvYmVmb3JlOC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNmOGIxOTEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi9zdHlsZS9iZWZvcmU4LmphdmEKQEAgLTAsMCArMSwxMiBAQAorY2xhc3MgQXsKKyBjbGFzcyBDb25zdGFudHN7CisgIHB1YmxpYyBzdGF0aWMgZmluYWwgQ29uc3RhbnRzIHh4eHg7CisgfQorCisgcHVibGljIHZvaWQgZm9vKENvbnN0YW50cyBzKXt9CisgcHVibGljIHZvaWQgZm9vKGJvb2xlYW4gYm9sKXt9CisKKyB7CisgIGZvbyg8Y2FyZXQ+dHJ1ZSk7CisgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3N0eWxlL2JlZm9yZTkuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3N0eWxlL2JlZm9yZTkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NTU1ZDZjCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc3R5bGUvYmVmb3JlOS5qYXZhCkBAIC0wLDAgKzEsMTIgQEAKK2NsYXNzIEF7CisgY2xhc3MgQ29uc3RhbnRzeworICBwdWJsaWMgc3RhdGljIGZpbmFsIENvbnN0YW50cyB4eHh4OworIH0KKworIHB1YmxpYyB2b2lkIGZvbyhDb25zdGFudHMgcyl7fQorIHB1YmxpYyB2b2lkIGZvbyhib29sZWFuIGJvbCl7fQorCisgeworICBmb28oPGNhcmV0PmVxdWFscyhudWxsKSk7CisgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3ZhcmlhYmxlcy9Bbm5vdGF0aW9uVmFsdWUuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3ZhcmlhYmxlcy9Bbm5vdGF0aW9uVmFsdWUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZDhhNjJjCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vdmFyaWFibGVzL0Fubm90YXRpb25WYWx1ZS5qYXZhCkBAIC0wLDAgKzEsMyBAQAorQGludGVyZmFjZSBTb21lIHsKKyAgU3RyaW5nIHY8Y2FyZXQ+Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vdmFyaWFibGVzL0Fubm90YXRpb25WYWx1ZV9hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vdmFyaWFibGVzL0Fubm90YXRpb25WYWx1ZV9hZnRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhiMjkwNzAKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi92YXJpYWJsZXMvQW5ub3RhdGlvblZhbHVlX2FmdGVyLmphdmEKQEAgLTAsMCArMSwzIEBACitAaW50ZXJmYWNlIFNvbWUgeworICBTdHJpbmcgdmFsdWUoKTxjYXJldD4KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi92YXJpYWJsZXMvQ29uc3RydWN0b3JQYXJhbWV0ZXJOYW1lLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi92YXJpYWJsZXMvQ29uc3RydWN0b3JQYXJhbWV0ZXJOYW1lLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTJhN2NlOAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3ZhcmlhYmxlcy9Db25zdHJ1Y3RvclBhcmFtZXRlck5hbWUuamF2YQpAQCAtMCwwICsxLDQgQEAKK2NsYXNzIENhciB7CisgIHByaXZhdGUgZmluYWwgU3RyaW5nIGNvbG9yOworICBDYXIoU3RyaW5nIGNvPGNhcmV0PngpIHsgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3ZhcmlhYmxlcy9Db25zdHJ1Y3RvclBhcmFtZXRlck5hbWVXaXRoUHJlZml4LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi92YXJpYWJsZXMvQ29uc3RydWN0b3JQYXJhbWV0ZXJOYW1lV2l0aFByZWZpeC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc5YzI0ZmEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi92YXJpYWJsZXMvQ29uc3RydWN0b3JQYXJhbWV0ZXJOYW1lV2l0aFByZWZpeC5qYXZhCkBAIC0wLDAgKzEsNSBAQAorY2xhc3MgQ2FyIHsKKyAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgbXlDb2xvcjsKKyAgcHJpdmF0ZSBmaW5hbCBpbnQgbXlDb2xvcjI7CisgIENhcihTdHJpbmcgcENvPGNhcmV0PngpIHsgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3ZhcmlhYmxlcy9EdXBsaWNhdGVTdWdnZXN0aW9uc0Zyb21Vc2FnZS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vdmFyaWFibGVzL0R1cGxpY2F0ZVN1Z2dlc3Rpb25zRnJvbVVzYWdlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGJiM2ViOAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3ZhcmlhYmxlcy9EdXBsaWNhdGVTdWdnZXN0aW9uc0Zyb21Vc2FnZS5qYXZhCkBAIC0wLDAgKzEsMTEgQEAKK3B1YmxpYyBjbGFzcyBGb28geworCisgIHZvaWQgYmFyKCkgeworICAgIEFQcmVmZXJlbmNlUG9saWN5IHA8Y2FyZXQ+ID0gMjsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4ocG9saWN5KTsKKyAgfQorfQorCitjbGFzcyBBUHJlZmVyZW5jZVBvbGljeSB7CisKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi92YXJpYWJsZXMvTm9LZXl3b3Jkc0luRm9yTG9vcFZhcmlhYmxlTmFtZS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vdmFyaWFibGVzL05vS2V5d29yZHNJbkZvckxvb3BWYXJpYWJsZU5hbWUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YzA0MDg5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vdmFyaWFibGVzL05vS2V5d29yZHNJbkZvckxvb3BWYXJpYWJsZU5hbWUuamF2YQpAQCAtMCwwICsxLDE1IEBACitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKKworcHVibGljIGNsYXNzIFRlc3QgeworICB7CisKKyAgICBSdW5uYWJsZSBydW5uYWJsZSA9IG5ldyBSdW5uYWJsZSgpIHsKKyAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKKyAgICAgICAgZm9yIChTdHJpbmdCdWZmZXIgPGNhcmV0PiA6IG5ldyBBcnJheUxpc3Q8U3RyaW5nQnVmZmVyPigpKSB7CisKKyAgICAgICAgfQorICAgICAgfQorICAgIH07CisgIH0KKworfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vdmFyaWFibGVzL2xvY2Fscy9BcnJheU1ldGhvZE5hbWUtcmVzdWx0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi92YXJpYWJsZXMvbG9jYWxzL0FycmF5TWV0aG9kTmFtZS1yZXN1bHQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40Y2ZhMjUxCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vdmFyaWFibGVzL2xvY2Fscy9BcnJheU1ldGhvZE5hbWUtcmVzdWx0LmphdmEKQEAgLTAsMCArMSwzIEBACitpbnRlcmZhY2UgQWJjIHsKKyAgICBTdHJpbmdbXSBnZXRTdHJpbmdzPGNhcmV0PgorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3ZhcmlhYmxlcy9sb2NhbHMvQXJyYXlNZXRob2ROYW1lLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi92YXJpYWJsZXMvbG9jYWxzL0FycmF5TWV0aG9kTmFtZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM2MzJmMmIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi92YXJpYWJsZXMvbG9jYWxzL0FycmF5TWV0aG9kTmFtZS5qYXZhCkBAIC0wLDAgKzEsMyBAQAoraW50ZXJmYWNlIEFiYyB7CisgICAgU3RyaW5nW10gZ2V0PGNhcmV0PgorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3ZhcmlhYmxlcy9sb2NhbHMvRmllbGROYW1lQ29tcGxldGlvbjEtcmVzdWx0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi92YXJpYWJsZXMvbG9jYWxzL0ZpZWxkTmFtZUNvbXBsZXRpb24xLXJlc3VsdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEwYmZjZjkyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vdmFyaWFibGVzL2xvY2Fscy9GaWVsZE5hbWVDb21wbGV0aW9uMS1yZXN1bHQuamF2YQpAQCAtMCwwICsxLDQgQEAKK2NsYXNzIFpsb2JvZ2xhc3t9CitjbGFzcyBBeworICBabG9ib2dsYXMgemxvYm9nbGFzPGNhcmV0PgorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3ZhcmlhYmxlcy9sb2NhbHMvRmllbGROYW1lQ29tcGxldGlvbjEuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3ZhcmlhYmxlcy9sb2NhbHMvRmllbGROYW1lQ29tcGxldGlvbjEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMWZkMTBkMAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3ZhcmlhYmxlcy9sb2NhbHMvRmllbGROYW1lQ29tcGxldGlvbjEuamF2YQpAQCAtMCwwICsxLDQgQEAKK2NsYXNzIFpsb2JvZ2xhc3t9CitjbGFzcyBBeworICBabG9ib2dsYXMgejxjYXJldD4KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi92YXJpYWJsZXMvbG9jYWxzL0ZpZWxkTmFtZUNvbXBsZXRpb24yLXJlc3VsdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vdmFyaWFibGVzL2xvY2Fscy9GaWVsZE5hbWVDb21wbGV0aW9uMi1yZXN1bHQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NGYzNGVhCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vdmFyaWFibGVzL2xvY2Fscy9GaWVsZE5hbWVDb21wbGV0aW9uMi1yZXN1bHQuamF2YQpAQCAtMCwwICsxLDQgQEAKK2NsYXNzIFpsb2JvZ2xhc3t9CitjbGFzcyBBeworICBabG9ib2dsYXMgbXlabG9ib2dsYXM8Y2FyZXQ+Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vdmFyaWFibGVzL2xvY2Fscy9GaWVsZE5hbWVDb21wbGV0aW9uMi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vdmFyaWFibGVzL2xvY2Fscy9GaWVsZE5hbWVDb21wbGV0aW9uMi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVlM2E2NDAKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi92YXJpYWJsZXMvbG9jYWxzL0ZpZWxkTmFtZUNvbXBsZXRpb24yLmphdmEKQEAgLTAsMCArMSw0IEBACitjbGFzcyBabG9ib2dsYXN7fQorY2xhc3MgQXsKKyAgWmxvYm9nbGFzIG15PGNhcmV0PgorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3ZhcmlhYmxlcy9sb2NhbHMvRmllbGROYW1lQ29tcGxldGlvbjMtcmVzdWx0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi92YXJpYWJsZXMvbG9jYWxzL0ZpZWxkTmFtZUNvbXBsZXRpb24zLXJlc3VsdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNiNDljZjQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi92YXJpYWJsZXMvbG9jYWxzL0ZpZWxkTmFtZUNvbXBsZXRpb24zLXJlc3VsdC5qYXZhCkBAIC0wLDAgKzEsNyBAQAorY2xhc3MgWmxvYm9nbGFze30KK2NsYXNzIEIgeworICBwcml2YXRlIFpsb2JvZ2xhcyBteVpsb2JvZ2xhczsKK30KK2NsYXNzIEEgZXh0ZW5kcyBCIHsKKyAgcHJpdmF0ZSBabG9ib2dsYXMgbXlabG9ib2dsYXM8Y2FyZXQ+Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vdmFyaWFibGVzL2xvY2Fscy9GaWVsZE5hbWVDb21wbGV0aW9uMy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vdmFyaWFibGVzL2xvY2Fscy9GaWVsZE5hbWVDb21wbGV0aW9uMy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRjYWM0MGQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi92YXJpYWJsZXMvbG9jYWxzL0ZpZWxkTmFtZUNvbXBsZXRpb24zLmphdmEKQEAgLTAsMCArMSw3IEBACitjbGFzcyBabG9ib2dsYXN7fQorY2xhc3MgQiB7CisgIHByaXZhdGUgWmxvYm9nbGFzIG15WmxvYm9nbGFzOworfQorY2xhc3MgQSBleHRlbmRzIEIgeworICBwcml2YXRlIFpsb2JvZ2xhcyBteTxjYXJldD4KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi92YXJpYWJsZXMvbG9jYWxzL0lucHV0TWV0aG9kRXZlbnRWYXJpYWJsZS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vdmFyaWFibGVzL2xvY2Fscy9JbnB1dE1ldGhvZEV2ZW50VmFyaWFibGUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZjQxZDJjCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vdmFyaWFibGVzL2xvY2Fscy9JbnB1dE1ldGhvZEV2ZW50VmFyaWFibGUuamF2YQpAQCAtMCwwICsxLDUgQEAKK2NsYXNzIFRlc3RTb3VyY2UxeworICBwdWJsaWMgdm9pZCBmb28oKXsKKyAgICBqYXZhLmF3dC5ldmVudC5JbnB1dE1ldGhvZEV2ZW50IGk8Y2FyZXQ+CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi92YXJpYWJsZXMvbG9jYWxzL0lucHV0TWV0aG9kRXZlbnRWYXJpYWJsZV9hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vdmFyaWFibGVzL2xvY2Fscy9JbnB1dE1ldGhvZEV2ZW50VmFyaWFibGVfYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNjJlYWIzCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vdmFyaWFibGVzL2xvY2Fscy9JbnB1dE1ldGhvZEV2ZW50VmFyaWFibGVfYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDUgQEAKK2NsYXNzIFRlc3RTb3VyY2UxeworICBwdWJsaWMgdm9pZCBmb28oKXsKKyAgICBqYXZhLmF3dC5ldmVudC5JbnB1dE1ldGhvZEV2ZW50IGlucHV0TWV0aG9kRXZlbnQ8Y2FyZXQ+CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi92YXJpYWJsZXMvbG9jYWxzL0ludGVyZmFjZU1ldGhvZC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vdmFyaWFibGVzL2xvY2Fscy9JbnRlcmZhY2VNZXRob2QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MDNjMGNkCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vdmFyaWFibGVzL2xvY2Fscy9JbnRlcmZhY2VNZXRob2QuamF2YQpAQCAtMCwwICsxLDUgQEAKK2ludGVyZmFjZSBGb28geworICBHb29CYXJEb28gY2FsYzxjYXJldD4KK30KKworaW50ZXJmYWNlIEdvb0JhckRvbyB7fQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3ZhcmlhYmxlcy9sb2NhbHMvTG9jYWxSZXNlcnZlZC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vdmFyaWFibGVzL2xvY2Fscy9Mb2NhbFJlc2VydmVkLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWE4YzI4MAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3ZhcmlhYmxlcy9sb2NhbHMvTG9jYWxSZXNlcnZlZC5qYXZhCkBAIC0wLDAgKzEsNSBAQAorcHVibGljIGNsYXNzIFRlc3RTb3VyY2U3IHsKKyAgICBwdWJsaWMgdm9pZCBmb28oKXsKKyAgICAgICAgQ2xhc3MgbXk8Y2FyZXQ+CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vdmFyaWFibGVzL2xvY2Fscy9Mb2NhbFJlc2VydmVkMi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vdmFyaWFibGVzL2xvY2Fscy9Mb2NhbFJlc2VydmVkMi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJiNDEwZTMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi92YXJpYWJsZXMvbG9jYWxzL0xvY2FsUmVzZXJ2ZWQyLmphdmEKQEAgLTAsMCArMSw1IEBACitwdWJsaWMgY2xhc3MgVGVzdFNvdXJjZTcgeworICAgIHB1YmxpYyB2b2lkIGZvbygpeworICAgICAgICBDbGFzcyBjPGNhcmV0PgorICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3ZhcmlhYmxlcy9sb2NhbHMvTG9jYWxSZXNlcnZlZF9hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vdmFyaWFibGVzL2xvY2Fscy9Mb2NhbFJlc2VydmVkX2FmdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjA0NGQ0YQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3ZhcmlhYmxlcy9sb2NhbHMvTG9jYWxSZXNlcnZlZF9hZnRlci5qYXZhCkBAIC0wLDAgKzEsNSBAQAorcHVibGljIGNsYXNzIFRlc3RTb3VyY2U3IHsKKyAgICBwdWJsaWMgdm9pZCBmb28oKXsKKyAgICAgICAgQ2xhc3MgbXlDbGFzczxjYXJldD4KKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi92YXJpYWJsZXMvbG9jYWxzL09iamVjdFZhcmlhYmxlLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi92YXJpYWJsZXMvbG9jYWxzL09iamVjdFZhcmlhYmxlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjlkYjA2MgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3ZhcmlhYmxlcy9sb2NhbHMvT2JqZWN0VmFyaWFibGUuamF2YQpAQCAtMCwwICsxLDUgQEAKK2NsYXNzIFRlc3RTb3VyY2UxeworICBwdWJsaWMgdm9pZCBmb28oKXsKKyAgICBPYmplY3Qgb2I8Y2FyZXQ+CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi92YXJpYWJsZXMvbG9jYWxzL09iamVjdFZhcmlhYmxlX2FmdGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi92YXJpYWJsZXMvbG9jYWxzL09iamVjdFZhcmlhYmxlX2FmdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjA1YjdiOAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3ZhcmlhYmxlcy9sb2NhbHMvT2JqZWN0VmFyaWFibGVfYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDUgQEAKK2NsYXNzIFRlc3RTb3VyY2UxeworICBwdWJsaWMgdm9pZCBmb28oKXsKKyAgICBPYmplY3Qgb2JqZWN0PGNhcmV0PgorICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vdmFyaWFibGVzL2xvY2Fscy9TdHJpbmdWYXJpYWJsZS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vdmFyaWFibGVzL2xvY2Fscy9TdHJpbmdWYXJpYWJsZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRmMGMxZjUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi92YXJpYWJsZXMvbG9jYWxzL1N0cmluZ1ZhcmlhYmxlLmphdmEKQEAgLTAsMCArMSw1IEBACitjbGFzcyBUZXN0U291cmNlMXsKKyAgcHVibGljIHZvaWQgZm9vKCl7CisgICAgU3RyaW5nIHN0PGNhcmV0PgorICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vdmFyaWFibGVzL2xvY2Fscy9TdHJpbmdWYXJpYWJsZV9hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vdmFyaWFibGVzL2xvY2Fscy9TdHJpbmdWYXJpYWJsZV9hZnRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM5YWE1YjgKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi92YXJpYWJsZXMvbG9jYWxzL1N0cmluZ1ZhcmlhYmxlX2FmdGVyLmphdmEKQEAgLTAsMCArMSw1IEBACitjbGFzcyBUZXN0U291cmNlMXsKKyAgcHVibGljIHZvaWQgZm9vKCl7CisgICAgU3RyaW5nIHN0cmluZzxjYXJldD4KKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3ZhcmlhYmxlcy9sb2NhbHMvVGVzdEZpZWxkT3V0T2ZBbm9ueW1vdXMuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3ZhcmlhYmxlcy9sb2NhbHMvVGVzdEZpZWxkT3V0T2ZBbm9ueW1vdXMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MDY4NDNhCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vdmFyaWFibGVzL2xvY2Fscy9UZXN0RmllbGRPdXRPZkFub255bW91cy5qYXZhCkBAIC0wLDAgKzEsMTkgQEAKK3BhY2thZ2UgY29kZUluc2lnaHQuY29tcGxldGlvbi52YXJpYWJsZXMubG9jYWxzOworCisvKioKKyAqIENyZWF0ZWQgYnkgSW50ZWxsaUogSURFQS4KKyAqIFVzZXI6IGlnb3JrCisgKiBEYXRlOiBOb3YgMjUsIDIwMDIKKyAqIFRpbWU6IDM6MTA6MDggUE0KKyAqIFRvIGNoYW5nZSB0aGlzIHRlbXBsYXRlIHVzZSBPcHRpb25zIHwgRmlsZSBUZW1wbGF0ZXMuCisgKi8KK3B1YmxpYyBjbGFzcyBUZXN0U291cmNlOSB7CisgICAgcHJpdmF0ZSBpbnQgYUZpZWxkOworICAgIHB1YmxpYyB2b2lkIGZvbygpIHsKKyAgICAgICAgUnVubmFibGUgciA9IG5ldyBSdW5uYWJsZSgpIHsKKyAgICAgICAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKKyAgICAgICAgICAgICAgIGludCB4ID0gYUY8Y2FyZXQ+OworICAgICAgICAgICAgfQorICAgICAgICB9OworICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3ZhcmlhYmxlcy9sb2NhbHMvVGVzdEZpZWxkT3V0T2ZBbm9ueW1vdXNSZXN1bHQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3ZhcmlhYmxlcy9sb2NhbHMvVGVzdEZpZWxkT3V0T2ZBbm9ueW1vdXNSZXN1bHQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYjBkZjllCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vdmFyaWFibGVzL2xvY2Fscy9UZXN0RmllbGRPdXRPZkFub255bW91c1Jlc3VsdC5qYXZhCkBAIC0wLDAgKzEsMTkgQEAKK3BhY2thZ2UgY29kZUluc2lnaHQuY29tcGxldGlvbi52YXJpYWJsZXMubG9jYWxzOworCisvKioKKyAqIENyZWF0ZWQgYnkgSW50ZWxsaUogSURFQS4KKyAqIFVzZXI6IGlnb3JrCisgKiBEYXRlOiBOb3YgMjUsIDIwMDIKKyAqIFRpbWU6IDM6MTA6MDggUE0KKyAqIFRvIGNoYW5nZSB0aGlzIHRlbXBsYXRlIHVzZSBPcHRpb25zIHwgRmlsZSBUZW1wbGF0ZXMuCisgKi8KK3B1YmxpYyBjbGFzcyBUZXN0U291cmNlOSB7CisgICAgcHJpdmF0ZSBpbnQgYUZpZWxkOworICAgIHB1YmxpYyB2b2lkIGZvbygpIHsKKyAgICAgICAgUnVubmFibGUgciA9IG5ldyBSdW5uYWJsZSgpIHsKKyAgICAgICAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKKyAgICAgICAgICAgICAgIGludCB4ID0gYUZpZWxkPGNhcmV0PjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi92YXJpYWJsZXMvbG9jYWxzL1Rlc3RSZXN1bHQxLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi92YXJpYWJsZXMvbG9jYWxzL1Rlc3RSZXN1bHQxLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGVjYmY3NwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3ZhcmlhYmxlcy9sb2NhbHMvVGVzdFJlc3VsdDEuamF2YQpAQCAtMCwwICsxLDUgQEAKK2NsYXNzIFRlc3RTb3VyY2UxeworICBwdWJsaWMgdm9pZCBmb28oKXsKKyAgICBpbnQgYWJjID0gMCwgYmFjID0gYWJjPGNhcmV0PgorICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vdmFyaWFibGVzL2xvY2Fscy9UZXN0UmVzdWx0Mi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vdmFyaWFibGVzL2xvY2Fscy9UZXN0UmVzdWx0Mi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEwMGE1OTAKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi92YXJpYWJsZXMvbG9jYWxzL1Rlc3RSZXN1bHQyLmphdmEKQEAgLTAsMCArMSwxNSBAQAorcGFja2FnZSBjb2RlSW5zaWdodC5jb21wbGV0aW9uLnZhcmlhYmxlcy5sb2NhbHM7CisKKy8qKgorICogQ3JlYXRlZCBieSBJbnRlbGxpSiBJREVBLgorICogVXNlcjogaWdvcmsKKyAqIERhdGU6IE5vdiAyNSwgMjAwMgorICogVGltZTogMzowNzoxOCBQTQorICogVG8gY2hhbmdlIHRoaXMgdGVtcGxhdGUgdXNlIE9wdGlvbnMgfCBGaWxlIFRlbXBsYXRlcy4KKyAqLworcHVibGljIGNsYXNzIFRlc3RTb3VyY2UyIHsKKyAgaW50IGFhYSA9IDA7CisgIHB1YmxpYyB2b2lkIGZvbygpeworICAgIGludCBhYmMgPSAwLCBiYWMgPSBhPGNhcmV0PgorICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi92YXJpYWJsZXMvbG9jYWxzL1Rlc3RSZXN1bHQzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi92YXJpYWJsZXMvbG9jYWxzL1Rlc3RSZXN1bHQzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2IzNWQyMAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3ZhcmlhYmxlcy9sb2NhbHMvVGVzdFJlc3VsdDMuamF2YQpAQCAtMCwwICsxLDE1IEBACitwYWNrYWdlIGNvZGVJbnNpZ2h0LmNvbXBsZXRpb24udmFyaWFibGVzLmxvY2FsczsKKworLyoqCisgKiBDcmVhdGVkIGJ5IEludGVsbGlKIElERUEuCisgKiBVc2VyOiBpZ29yaworICogRGF0ZTogTm92IDI1LCAyMDAyCisgKiBUaW1lOiAzOjEwOjA4IFBNCisgKiBUbyBjaGFuZ2UgdGhpcyB0ZW1wbGF0ZSB1c2UgT3B0aW9ucyB8IEZpbGUgVGVtcGxhdGVzLgorICovCitwdWJsaWMgY2xhc3MgVGVzdFNvdXJjZTMgeworICAgIGludCBhYWEgPSAwOworICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBmb28oKXsKKyAgICAgICAgaW50IGFiYyA9IDAsIGJhYyA9IGFiYzxjYXJldD4KKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi92YXJpYWJsZXMvbG9jYWxzL1Rlc3RSZXN1bHQ0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi92YXJpYWJsZXMvbG9jYWxzL1Rlc3RSZXN1bHQ0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2M0MTdmNQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3ZhcmlhYmxlcy9sb2NhbHMvVGVzdFJlc3VsdDQuamF2YQpAQCAtMCwwICsxLDE4IEBACitwYWNrYWdlIGNvZGVJbnNpZ2h0LmNvbXBsZXRpb24udmFyaWFibGVzLmxvY2FsczsKKworLyoqCisgKiBDcmVhdGVkIGJ5IEludGVsbGlKIElERUEuCisgKiBVc2VyOiBpZ29yaworICogRGF0ZTogTm92IDI1LCAyMDAyCisgKiBUaW1lOiAzOjEwOjA4IFBNCisgKiBUbyBjaGFuZ2UgdGhpcyB0ZW1wbGF0ZSB1c2UgT3B0aW9ucyB8IEZpbGUgVGVtcGxhdGVzLgorICovCitwdWJsaWMgY2xhc3MgVGVzdFNvdXJjZTQgeworICAgIGludCBhYWEgPSAwOworICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBmb28oKXsKKyAgICAgICAgaW50IGFiYyA9IDA7CisgICAgICAgIGNsYXNzIElubmVyMXsKKyAgICAgICAgICAgaW50IHNiZT1hYmM8Y2FyZXQ+CisgICAgICAgIH0KKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi92YXJpYWJsZXMvbG9jYWxzL1Rlc3RSZXN1bHQ1LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi92YXJpYWJsZXMvbG9jYWxzL1Rlc3RSZXN1bHQ1LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTFjNzcwMQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3ZhcmlhYmxlcy9sb2NhbHMvVGVzdFJlc3VsdDUuamF2YQpAQCAtMCwwICsxLDIyIEBACitwYWNrYWdlIGNvZGVJbnNpZ2h0LmNvbXBsZXRpb24udmFyaWFibGVzLmxvY2FsczsKKworLyoqCisgKiBDcmVhdGVkIGJ5IEludGVsbGlKIElERUEuCisgKiBVc2VyOiBpZ29yaworICogRGF0ZTogTm92IDI1LCAyMDAyCisgKiBUaW1lOiAzOjEwOjA4IFBNCisgKiBUbyBjaGFuZ2UgdGhpcyB0ZW1wbGF0ZSB1c2UgT3B0aW9ucyB8IEZpbGUgVGVtcGxhdGVzLgorICovCitwdWJsaWMgY2xhc3MgVGVzdFNvdXJjZTUgeworCisgICAgcHVibGljIHN0YXRpYyBjbGFzcyBpbm5lcnsKKyAgICAgICAgc3RhdGljIGludCBhYWEgPSAwOworICAgICAgICBwdWJsaWMgdm9pZCBmb28oKXsKKyAgICAgICAgICAgIGludCBhYmMgPSAwOworICAgICAgICB9CisKKyAgICAgICAgc3RhdGljIGNsYXNzIElubmVyMXsKKyAgICAgICAgICAgIHN0YXRpYyBpbnQgc2JlID0gYWFhPGNhcmV0PgorICAgICAgICB9CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vdmFyaWFibGVzL2xvY2Fscy9UZXN0UmVzdWx0Ni5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vdmFyaWFibGVzL2xvY2Fscy9UZXN0UmVzdWx0Ni5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE0MzU1ZDkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi92YXJpYWJsZXMvbG9jYWxzL1Rlc3RSZXN1bHQ2LmphdmEKQEAgLTAsMCArMSwxMyBAQAorcGFja2FnZSBjb2RlSW5zaWdodC5jb21wbGV0aW9uLnZhcmlhYmxlcy5sb2NhbHM7CisKKy8qKgorICogQ3JlYXRlZCBieSBJbnRlbGxpSiBJREVBLgorICogVXNlcjogaWdvcmsKKyAqIERhdGU6IE5vdiAyNSwgMjAwMgorICogVGltZTogMzoxMDowOCBQTQorICogVG8gY2hhbmdlIHRoaXMgdGVtcGxhdGUgdXNlIE9wdGlvbnMgfCBGaWxlIFRlbXBsYXRlcy4KKyAqLworcHVibGljIGNsYXNzIFRlc3RTb3VyY2U2IHsKKyAgICBpbnQgYWFhID0gYmJiPGNhcmV0PgorICAgIGludCBiYmIgPSAwOworfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vdmFyaWFibGVzL2xvY2Fscy9UZXN0UmVzdWx0Ny5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vdmFyaWFibGVzL2xvY2Fscy9UZXN0UmVzdWx0Ny5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIwNDVmNGMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi92YXJpYWJsZXMvbG9jYWxzL1Rlc3RSZXN1bHQ3LmphdmEKQEAgLTAsMCArMSwxNSBAQAorcGFja2FnZSBjb2RlSW5zaWdodC5jb21wbGV0aW9uLnZhcmlhYmxlcy5sb2NhbHM7CisKKy8qKgorICogQ3JlYXRlZCBieSBJbnRlbGxpSiBJREVBLgorICogVXNlcjogaWdvcmsKKyAqIERhdGU6IE5vdiAyNSwgMjAwMgorICogVGltZTogMzoxMDowOCBQTQorICogVG8gY2hhbmdlIHRoaXMgdGVtcGxhdGUgdXNlIE9wdGlvbnMgfCBGaWxlIFRlbXBsYXRlcy4KKyAqLworcHVibGljIGNsYXNzIFRlc3RTb3VyY2U3IHsKKyAgICBwdWJsaWMgdm9pZCBmb28oKXsKKyAgICAgICAgaW50IGFhYSA9IGI8Y2FyZXQ+CisgICAgICAgIGludCBiYmIgPSAwOworICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3ZhcmlhYmxlcy9sb2NhbHMvVGVzdFJlc3VsdDguamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3ZhcmlhYmxlcy9sb2NhbHMvVGVzdFJlc3VsdDguamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40Y2YyNjM4Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vdmFyaWFibGVzL2xvY2Fscy9UZXN0UmVzdWx0OC5qYXZhCkBAIC0wLDAgKzEsMTUgQEAKK3BhY2thZ2UgY29kZUluc2lnaHQuY29tcGxldGlvbi52YXJpYWJsZXMubG9jYWxzOworCisvKioKKyAqIENyZWF0ZWQgYnkgSW50ZWxsaUogSURFQS4KKyAqIFVzZXI6IGlnb3JrCisgKiBEYXRlOiBOb3YgMjUsIDIwMDIKKyAqIFRpbWU6IDM6MTA6MDggUE0KKyAqIFRvIGNoYW5nZSB0aGlzIHRlbXBsYXRlIHVzZSBPcHRpb25zIHwgRmlsZSBUZW1wbGF0ZXMuCisgKi8KK3B1YmxpYyBjbGFzcyBUZXN0U291cmNlOCB7CisgICAgc3RhdGljIHsKKyAgICAgICAgaW50IGFhYSA9IGI8Y2FyZXQ+CisgICAgICAgIGludCBiYmIgPSAwOworICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3ZhcmlhYmxlcy9sb2NhbHMvVGVzdFJlc3VsdDkuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3ZhcmlhYmxlcy9sb2NhbHMvVGVzdFJlc3VsdDkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMWZjMGQ1Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vdmFyaWFibGVzL2xvY2Fscy9UZXN0UmVzdWx0OS5qYXZhCkBAIC0wLDAgKzEsMTUgQEAKK3BhY2thZ2UgY29kZUluc2lnaHQuY29tcGxldGlvbi52YXJpYWJsZXMubG9jYWxzOworCisvKioKKyAqIENyZWF0ZWQgYnkgSW50ZWxsaUogSURFQS4KKyAqIFVzZXI6IGlnb3JrCisgKiBEYXRlOiBOb3YgMjUsIDIwMDIKKyAqIFRpbWU6IDM6MTA6MDggUE0KKyAqIFRvIGNoYW5nZSB0aGlzIHRlbXBsYXRlIHVzZSBPcHRpb25zIHwgRmlsZSBUZW1wbGF0ZXMuCisgKi8KK3B1YmxpYyBjbGFzcyBUZXN0U291cmNlOSB7CisgICAgc3RhdGljIHsKKyAgICAgICAgaW50IGJiYiA9IDA7CisgICAgICAgIGludCBhYWEgPSBiYmI8Y2FyZXQ+CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vdmFyaWFibGVzL2xvY2Fscy9UZXN0U291cmNlMS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vdmFyaWFibGVzL2xvY2Fscy9UZXN0U291cmNlMS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI5ZGVkMWUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi92YXJpYWJsZXMvbG9jYWxzL1Rlc3RTb3VyY2UxLmphdmEKQEAgLTAsMCArMSw1IEBACitjbGFzcyBUZXN0U291cmNlMXsKKyAgcHVibGljIHZvaWQgZm9vKCl7CisgICAgaW50IGFiYyA9IDAsIGJhYyA9IGE8Y2FyZXQ+CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi92YXJpYWJsZXMvbG9jYWxzL1Rlc3RTb3VyY2UyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi92YXJpYWJsZXMvbG9jYWxzL1Rlc3RTb3VyY2UyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTAwYTU5MAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3ZhcmlhYmxlcy9sb2NhbHMvVGVzdFNvdXJjZTIuamF2YQpAQCAtMCwwICsxLDE1IEBACitwYWNrYWdlIGNvZGVJbnNpZ2h0LmNvbXBsZXRpb24udmFyaWFibGVzLmxvY2FsczsKKworLyoqCisgKiBDcmVhdGVkIGJ5IEludGVsbGlKIElERUEuCisgKiBVc2VyOiBpZ29yaworICogRGF0ZTogTm92IDI1LCAyMDAyCisgKiBUaW1lOiAzOjA3OjE4IFBNCisgKiBUbyBjaGFuZ2UgdGhpcyB0ZW1wbGF0ZSB1c2UgT3B0aW9ucyB8IEZpbGUgVGVtcGxhdGVzLgorICovCitwdWJsaWMgY2xhc3MgVGVzdFNvdXJjZTIgeworICBpbnQgYWFhID0gMDsKKyAgcHVibGljIHZvaWQgZm9vKCl7CisgICAgaW50IGFiYyA9IDAsIGJhYyA9IGE8Y2FyZXQ+CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3ZhcmlhYmxlcy9sb2NhbHMvVGVzdFNvdXJjZTMuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3ZhcmlhYmxlcy9sb2NhbHMvVGVzdFNvdXJjZTMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOTU4YzViCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vdmFyaWFibGVzL2xvY2Fscy9UZXN0U291cmNlMy5qYXZhCkBAIC0wLDAgKzEsMTUgQEAKK3BhY2thZ2UgY29kZUluc2lnaHQuY29tcGxldGlvbi52YXJpYWJsZXMubG9jYWxzOworCisvKioKKyAqIENyZWF0ZWQgYnkgSW50ZWxsaUogSURFQS4KKyAqIFVzZXI6IGlnb3JrCisgKiBEYXRlOiBOb3YgMjUsIDIwMDIKKyAqIFRpbWU6IDM6MTA6MDggUE0KKyAqIFRvIGNoYW5nZSB0aGlzIHRlbXBsYXRlIHVzZSBPcHRpb25zIHwgRmlsZSBUZW1wbGF0ZXMuCisgKi8KK3B1YmxpYyBjbGFzcyBUZXN0U291cmNlMyB7CisgICAgaW50IGFhYSA9IDA7CisgICAgcHVibGljIHN0YXRpYyB2b2lkIGZvbygpeworICAgICAgICBpbnQgYWJjID0gMCwgYmFjID0gYTxjYXJldD4KKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi92YXJpYWJsZXMvbG9jYWxzL1Rlc3RTb3VyY2U0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi92YXJpYWJsZXMvbG9jYWxzL1Rlc3RTb3VyY2U0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzg0YTg1ZgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3ZhcmlhYmxlcy9sb2NhbHMvVGVzdFNvdXJjZTQuamF2YQpAQCAtMCwwICsxLDE4IEBACitwYWNrYWdlIGNvZGVJbnNpZ2h0LmNvbXBsZXRpb24udmFyaWFibGVzLmxvY2FsczsKKworLyoqCisgKiBDcmVhdGVkIGJ5IEludGVsbGlKIElERUEuCisgKiBVc2VyOiBpZ29yaworICogRGF0ZTogTm92IDI1LCAyMDAyCisgKiBUaW1lOiAzOjEwOjA4IFBNCisgKiBUbyBjaGFuZ2UgdGhpcyB0ZW1wbGF0ZSB1c2UgT3B0aW9ucyB8IEZpbGUgVGVtcGxhdGVzLgorICovCitwdWJsaWMgY2xhc3MgVGVzdFNvdXJjZTQgeworICAgIGludCBhYWEgPSAwOworICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBmb28oKXsKKyAgICAgICAgaW50IGFiYyA9IDA7CisgICAgICAgIGNsYXNzIElubmVyMXsKKyAgICAgICAgICAgaW50IHNiZT1hPGNhcmV0PgorICAgICAgICB9CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vdmFyaWFibGVzL2xvY2Fscy9UZXN0U291cmNlNS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vdmFyaWFibGVzL2xvY2Fscy9UZXN0U291cmNlNS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZmZDRmZGYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi92YXJpYWJsZXMvbG9jYWxzL1Rlc3RTb3VyY2U1LmphdmEKQEAgLTAsMCArMSwyMiBAQAorcGFja2FnZSBjb2RlSW5zaWdodC5jb21wbGV0aW9uLnZhcmlhYmxlcy5sb2NhbHM7CisKKy8qKgorICogQ3JlYXRlZCBieSBJbnRlbGxpSiBJREVBLgorICogVXNlcjogaWdvcmsKKyAqIERhdGU6IE5vdiAyNSwgMjAwMgorICogVGltZTogMzoxMDowOCBQTQorICogVG8gY2hhbmdlIHRoaXMgdGVtcGxhdGUgdXNlIE9wdGlvbnMgfCBGaWxlIFRlbXBsYXRlcy4KKyAqLworcHVibGljIGNsYXNzIFRlc3RTb3VyY2U1IHsKKworICAgIHB1YmxpYyBzdGF0aWMgY2xhc3MgaW5uZXJ7CisgICAgICAgIHN0YXRpYyBpbnQgYWFhID0gMDsKKyAgICAgICAgcHVibGljIHZvaWQgZm9vKCl7CisgICAgICAgICAgICBpbnQgYWJjID0gMDsKKyAgICAgICAgfQorCisgICAgICAgIHN0YXRpYyBjbGFzcyBJbm5lcjF7CisgICAgICAgICAgICBzdGF0aWMgaW50IHNiZSA9IGE8Y2FyZXQ+CisgICAgICAgIH0KKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi92YXJpYWJsZXMvbG9jYWxzL1Rlc3RTb3VyY2U2LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi92YXJpYWJsZXMvbG9jYWxzL1Rlc3RTb3VyY2U2LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODA5ZTM0YQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3ZhcmlhYmxlcy9sb2NhbHMvVGVzdFNvdXJjZTYuamF2YQpAQCAtMCwwICsxLDEzIEBACitwYWNrYWdlIGNvZGVJbnNpZ2h0LmNvbXBsZXRpb24udmFyaWFibGVzLmxvY2FsczsKKworLyoqCisgKiBDcmVhdGVkIGJ5IEludGVsbGlKIElERUEuCisgKiBVc2VyOiBpZ29yaworICogRGF0ZTogTm92IDI1LCAyMDAyCisgKiBUaW1lOiAzOjEwOjA4IFBNCisgKiBUbyBjaGFuZ2UgdGhpcyB0ZW1wbGF0ZSB1c2UgT3B0aW9ucyB8IEZpbGUgVGVtcGxhdGVzLgorICovCitwdWJsaWMgY2xhc3MgVGVzdFNvdXJjZTYgeworICAgIGludCBhYWEgPSBiPGNhcmV0PgorICAgIGludCBiYmIgPSAwOworfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vdmFyaWFibGVzL2xvY2Fscy9UZXN0U291cmNlNy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vdmFyaWFibGVzL2xvY2Fscy9UZXN0U291cmNlNy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIwNDVmNGMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi92YXJpYWJsZXMvbG9jYWxzL1Rlc3RTb3VyY2U3LmphdmEKQEAgLTAsMCArMSwxNSBAQAorcGFja2FnZSBjb2RlSW5zaWdodC5jb21wbGV0aW9uLnZhcmlhYmxlcy5sb2NhbHM7CisKKy8qKgorICogQ3JlYXRlZCBieSBJbnRlbGxpSiBJREVBLgorICogVXNlcjogaWdvcmsKKyAqIERhdGU6IE5vdiAyNSwgMjAwMgorICogVGltZTogMzoxMDowOCBQTQorICogVG8gY2hhbmdlIHRoaXMgdGVtcGxhdGUgdXNlIE9wdGlvbnMgfCBGaWxlIFRlbXBsYXRlcy4KKyAqLworcHVibGljIGNsYXNzIFRlc3RTb3VyY2U3IHsKKyAgICBwdWJsaWMgdm9pZCBmb28oKXsKKyAgICAgICAgaW50IGFhYSA9IGI8Y2FyZXQ+CisgICAgICAgIGludCBiYmIgPSAwOworICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3ZhcmlhYmxlcy9sb2NhbHMvVGVzdFNvdXJjZTguamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3ZhcmlhYmxlcy9sb2NhbHMvVGVzdFNvdXJjZTguamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40Y2YyNjM4Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vdmFyaWFibGVzL2xvY2Fscy9UZXN0U291cmNlOC5qYXZhCkBAIC0wLDAgKzEsMTUgQEAKK3BhY2thZ2UgY29kZUluc2lnaHQuY29tcGxldGlvbi52YXJpYWJsZXMubG9jYWxzOworCisvKioKKyAqIENyZWF0ZWQgYnkgSW50ZWxsaUogSURFQS4KKyAqIFVzZXI6IGlnb3JrCisgKiBEYXRlOiBOb3YgMjUsIDIwMDIKKyAqIFRpbWU6IDM6MTA6MDggUE0KKyAqIFRvIGNoYW5nZSB0aGlzIHRlbXBsYXRlIHVzZSBPcHRpb25zIHwgRmlsZSBUZW1wbGF0ZXMuCisgKi8KK3B1YmxpYyBjbGFzcyBUZXN0U291cmNlOCB7CisgICAgc3RhdGljIHsKKyAgICAgICAgaW50IGFhYSA9IGI8Y2FyZXQ+CisgICAgICAgIGludCBiYmIgPSAwOworICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3ZhcmlhYmxlcy9sb2NhbHMvVGVzdFNvdXJjZTkuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3ZhcmlhYmxlcy9sb2NhbHMvVGVzdFNvdXJjZTkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OTFjM2NmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vdmFyaWFibGVzL2xvY2Fscy9UZXN0U291cmNlOS5qYXZhCkBAIC0wLDAgKzEsMTUgQEAKK3BhY2thZ2UgY29kZUluc2lnaHQuY29tcGxldGlvbi52YXJpYWJsZXMubG9jYWxzOworCisvKioKKyAqIENyZWF0ZWQgYnkgSW50ZWxsaUogSURFQS4KKyAqIFVzZXI6IGlnb3JrCisgKiBEYXRlOiBOb3YgMjUsIDIwMDIKKyAqIFRpbWU6IDM6MTA6MDggUE0KKyAqIFRvIGNoYW5nZSB0aGlzIHRlbXBsYXRlIHVzZSBPcHRpb25zIHwgRmlsZSBUZW1wbGF0ZXMuCisgKi8KK3B1YmxpYyBjbGFzcyBUZXN0U291cmNlOSB7CisgICAgc3RhdGljIHsKKyAgICAgICAgaW50IGJiYiA9IDA7CisgICAgICAgIGludCBhYWEgPSBiPGNhcmV0PgorICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3ZhcmlhYmxlcy9sb2NhbHMvVW5pcXVlTmFtZUluRm9yLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi92YXJpYWJsZXMvbG9jYWxzL1VuaXF1ZU5hbWVJbkZvci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ5ODJjN2UKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi92YXJpYWJsZXMvbG9jYWxzL1VuaXF1ZU5hbWVJbkZvci5qYXZhCkBAIC0wLDAgKzEsOCBAQAorcHVibGljIGNsYXNzIFRlc3RTb3VyY2U3IHsKKyAgcHVibGljIHZvaWQgZm9vKCl7CisgICAgTGlzdDxNb2RlbD4gbW9kZWxzOworICAgIE1vZGVsIG1vZGVsOworICAgIGZvcihNb2RlbCBtPGNhcmV0PikKKyAgfQorfQorY2xhc3MgTW9kZWx7fQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vdmFyaWFibGVzL2xvY2Fscy9VbmlxdWVOYW1lSW5Gb3JfYWZ0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3ZhcmlhYmxlcy9sb2NhbHMvVW5pcXVlTmFtZUluRm9yX2FmdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTIxZWYxYwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3ZhcmlhYmxlcy9sb2NhbHMvVW5pcXVlTmFtZUluRm9yX2FmdGVyLmphdmEKQEAgLTAsMCArMSw4IEBACitwdWJsaWMgY2xhc3MgVGVzdFNvdXJjZTcgeworICBwdWJsaWMgdm9pZCBmb28oKXsKKyAgICBMaXN0PE1vZGVsPiBtb2RlbHM7CisgICAgTW9kZWwgbW9kZWw7CisgICAgZm9yKE1vZGVsIG1vZGVsMTxjYXJldD4pCisgIH0KK30KK2NsYXNzIE1vZGVse30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3ZhcmlhYmxlcy9sb2NhbHMvVW5yZXNvbHZlZE1ldGhvZE5hbWUuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3ZhcmlhYmxlcy9sb2NhbHMvVW5yZXNvbHZlZE1ldGhvZE5hbWUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNWRmNzhlCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vdmFyaWFibGVzL2xvY2Fscy9VbnJlc29sdmVkTWV0aG9kTmFtZS5qYXZhCkBAIC0wLDAgKzEsNyBAQAorcHVibGljIGNsYXNzIEZvbyB7CisgIHB1YmxpYyB2b2lkIGEoKSB7CisgICAgaW50IGkgPSBjcmVhdGVTdHlsZXNoZWV0Q29tYm9ib3goKTsKKyAgfQorCisgIHByaXZhdGUgaW50IGNyZTxjYXJldD4KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3ZhcmlhYmxlcy9sb2NhbHMvVW5yZXNvbHZlZE1ldGhvZE5hbWVfYWZ0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3ZhcmlhYmxlcy9sb2NhbHMvVW5yZXNvbHZlZE1ldGhvZE5hbWVfYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MDk2ZDY1Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vdmFyaWFibGVzL2xvY2Fscy9VbnJlc29sdmVkTWV0aG9kTmFtZV9hZnRlci5qYXZhCkBAIC0wLDAgKzEsNyBAQAorcHVibGljIGNsYXNzIEZvbyB7CisgIHB1YmxpYyB2b2lkIGEoKSB7CisgICAgaW50IGkgPSBjcmVhdGVTdHlsZXNoZWV0Q29tYm9ib3goKTsKKyAgfQorCisgIHByaXZhdGUgaW50IGNyZWF0ZVN0eWxlc2hlZXRDb21ib2JveDxjYXJldD4KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3ZhcmlhYmxlcy9sb2NhbHMvVW5yZXNvbHZlZFJlZmVyZW5jZS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vdmFyaWFibGVzL2xvY2Fscy9VbnJlc29sdmVkUmVmZXJlbmNlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDZiM2MzMAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3ZhcmlhYmxlcy9sb2NhbHMvVW5yZXNvbHZlZFJlZmVyZW5jZS5qYXZhCkBAIC0wLDAgKzEsOCBAQAorY2xhc3MgRm9vIHsKKyAgICB2b2lkIGZvbygpIHsKKyAgICAgICAgT2JqZWN0IDxjYXJldD4KKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKHBzaUNsYXNzKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKHBzaUNsYXNzKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKHBzaUNsYXNzKTsKKyAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi92YXJpYWJsZXMvbG9jYWxzL1dpdGhCdWlsZGVyUGFyYW1ldGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi92YXJpYWJsZXMvbG9jYWxzL1dpdGhCdWlsZGVyUGFyYW1ldGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTExZTZhNwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3ZhcmlhYmxlcy9sb2NhbHMvV2l0aEJ1aWxkZXJQYXJhbWV0ZXIuamF2YQpAQCAtMCwwICsxLDQgQEAKK3B1YmxpYyBjbGFzcyBCdWlsZGVyIHsKKyAgcHVibGljIEJ1aWxkZXIgd2l0aFNvbWV0aGluZyhTdHJpbmcgc288Y2FyZXQ+KSB7fQorfQorCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi92YXJpYWJsZXMvbG9jYWxzL1dpdGhCdWlsZGVyUGFyYW1ldGVyX2FmdGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi92YXJpYWJsZXMvbG9jYWxzL1dpdGhCdWlsZGVyUGFyYW1ldGVyX2FmdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWY5MTQ3YgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3ZhcmlhYmxlcy9sb2NhbHMvV2l0aEJ1aWxkZXJQYXJhbWV0ZXJfYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDQgQEAKK3B1YmxpYyBjbGFzcyBCdWlsZGVyIHsKKyAgcHVibGljIEJ1aWxkZXIgd2l0aFNvbWV0aGluZyhTdHJpbmcgc29tZXRoaW5nPGNhcmV0Pikge30KK30KKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vd29yZC8xLnByb3BlcnRpZXMgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi93b3JkLzEucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wN2ZmMTg5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vd29yZC8xLnByb3BlcnRpZXMKQEAgLTAsMCArMSBAQAorU2V0dGluZ3MgU2V0dDxjYXJldD4gb3RoZXIKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi93b3JkLzEudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vd29yZC8xLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wN2ZmMTg5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vd29yZC8xLnR4dApAQCAtMCwwICsxIEBACitTZXR0aW5ncyBTZXR0PGNhcmV0PiBvdGhlcgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3dvcmQvMS54bWwgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi93b3JkLzEueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU5Y2U2MTcKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi93b3JkLzEueG1sCkBAIC0wLDAgKzEgQEAKKzxhPlNldHRpbmdzIFNldHQ8Y2FyZXQ+IG90aGVyPC9hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3dvcmQvMV9hZnRlci5wcm9wZXJ0aWVzIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vd29yZC8xX2FmdGVyLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDA2NWU0YQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3dvcmQvMV9hZnRlci5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEgQEAKK1NldHRpbmdzIFNldHRpbmdzPGNhcmV0PiBvdGhlcgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3dvcmQvMV9hZnRlci50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi93b3JkLzFfYWZ0ZXIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQwNjVlNGEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi93b3JkLzFfYWZ0ZXIudHh0CkBAIC0wLDAgKzEgQEAKK1NldHRpbmdzIFNldHRpbmdzPGNhcmV0PiBvdGhlcgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3dvcmQvMV9hZnRlci54bWwgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi93b3JkLzFfYWZ0ZXIueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFhY2M4OTUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi93b3JkLzFfYWZ0ZXIueG1sCkBAIC0wLDAgKzEgQEAKKzxhPlNldHRpbmdzIFNldHRpbmdzPGNhcmV0PiBvdGhlcjwvYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi93b3JkLzIueG1sIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vd29yZC8yLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MjdmZjQyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vd29yZC8yLnhtbApAQCAtMCwwICsxLDQgQEAKKzxyb290PgorPGEgdmFsdWU9IlNldHRpbmdzIi8+Cis8YSB2YWx1ZT0iU2V0dDxjYXJldD4iPjwvYT4KKzwvcm9vdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi93b3JkLzJfYWZ0ZXIueG1sIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vd29yZC8yX2FmdGVyLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOTkzYTljCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vd29yZC8yX2FmdGVyLnhtbApAQCAtMCwwICsxLDQgQEAKKzxyb290PgorPGEgdmFsdWU9IlNldHRpbmdzIi8+Cis8YSB2YWx1ZT0iU2V0dGluZ3M8Y2FyZXQ+Ij48L2E+Cis8L3Jvb3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vd29yZC8zLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi93b3JkLzMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YjVmNDk4Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vd29yZC8zLmphdmEKQEAgLTAsMCArMSwzIEBACitwdWJsaWMgY2xhc3MgTXlDbGFzcyB7CisgU3RyaW5nIGIgPSAiTXk8Y2FyZXQ+IjsgCit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vd29yZC8zX2FmdGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi93b3JkLzNfYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNjI1MTNjCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vd29yZC8zX2FmdGVyLmphdmEKQEAgLTAsMCArMSwzIEBACitwdWJsaWMgY2xhc3MgTXlDbGFzcyB7CisgU3RyaW5nIGIgPSAiTXlIYXJkVmFyaWFudDxjYXJldD4iOyAKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi93b3JkLzQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3dvcmQvNC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVlNjdlZmQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi93b3JkLzQuamF2YQpAQCAtMCwwICsxLDQgQEAKK3B1YmxpYyBjbGFzcyBNeUNsYXNzIHsKKyBTdHJpbmcgYiA9ICJNeSI7CisgIC8vIHB1PGNhcmV0PgorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3dvcmQvNF9hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vd29yZC80X2FmdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTVmYjk4ZgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3dvcmQvNF9hZnRlci5qYXZhCkBAIC0wLDAgKzEsNCBAQAorcHVibGljIGNsYXNzIE15Q2xhc3MgeworIFN0cmluZyBiID0gIk15IjsKKyAgLy8gcHVibGljPGNhcmV0PgorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3dvcmQvQ29tcGxldGVTdHJpbmdMaXRlcmFsQ29weS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vd29yZC9Db21wbGV0ZVN0cmluZ0xpdGVyYWxDb3B5LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDQwNjQ2MQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3dvcmQvQ29tcGxldGVTdHJpbmdMaXRlcmFsQ29weS5qYXZhCkBAIC0wLDAgKzEsNSBAQAorY2xhc3MgQmFyIHsKKyAgU3RyaW5nIGEgPSAiYWJjLmRlZiIKKyAgU3RyaW5nIGIgPSAiYWJkZTxjYXJldD4iCit9CisKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3dvcmQvQ29tcGxldGVTdHJpbmdMaXRlcmFsQ29weV9hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vd29yZC9Db21wbGV0ZVN0cmluZ0xpdGVyYWxDb3B5X2FmdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzRhMDliYgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3dvcmQvQ29tcGxldGVTdHJpbmdMaXRlcmFsQ29weV9hZnRlci5qYXZhCkBAIC0wLDAgKzEsNSBAQAorY2xhc3MgQmFyIHsKKyAgU3RyaW5nIGEgPSAiYWJjLmRlZiIKKyAgU3RyaW5nIGIgPSAiYWJjLmRlZjxjYXJldD4iCit9CisKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3dvcmQvRG9sbGFyc0luUHJlZml4LnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3dvcmQvRG9sbGFyc0luUHJlZml4LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMjBhYWJiCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vd29yZC9Eb2xsYXJzSW5QcmVmaXgudHh0CkBAIC0wLDAgKzEsMiBAQAorJHRlc3QKKyR0ZTxjYXJldD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi93b3JkL0RvbGxhcnNJblByZWZpeF9hZnRlci50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi93b3JkL0RvbGxhcnNJblByZWZpeF9hZnRlci50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzQ4ZTI0MgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3dvcmQvRG9sbGFyc0luUHJlZml4X2FmdGVyLnR4dApAQCAtMCwwICsxLDIgQEAKKyR0ZXN0CiskdGVzdDxjYXJldD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi93b3JkL0luSmF2YUxpdGVyYWxzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi93b3JkL0luSmF2YUxpdGVyYWxzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDliY2UzMgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3dvcmQvSW5KYXZhTGl0ZXJhbHMuamF2YQpAQCAtMCwwICsxLDMgQEAKK3B1YmxpYyBjbGFzcyBNeUNsYXNzIHsKKyBTdHJpbmcgYiA9ICJNeTxjYXJldD4iOworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3dvcmQvSW5KYXZhTGl0ZXJhbHNfYWZ0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3dvcmQvSW5KYXZhTGl0ZXJhbHNfYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YTMwNzVjCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vd29yZC9JbkphdmFMaXRlcmFsc19hZnRlci5qYXZhCkBAIC0wLDAgKzEsMyBAQAorcHVibGljIGNsYXNzIE15Q2xhc3MgeworIFN0cmluZyBiID0gIk15Q2xhc3M8Y2FyZXQ+IjsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi93b3JkL1NwYWNlSW5Db21tZW50LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi93b3JkL1NwYWNlSW5Db21tZW50LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWVjZjIwYWUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi93b3JkL1NwYWNlSW5Db21tZW50LmphdmEKQEAgLTAsMCArMSw0IEBACitwdWJsaWMgY2xhc3MgTXlDbGFzcyB7CisKKyAgLy8gY29tbWVudCAgPGNhcmV0PgorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3dvcmQvVGV4dEluQ29tbWVudC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vd29yZC9UZXh0SW5Db21tZW50LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTMyODVlYwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3dvcmQvVGV4dEluQ29tbWVudC5qYXZhCkBAIC0wLDAgKzEsNCBAQAorcHVibGljIGNsYXNzIE15Q2xhc3MgeworCisgIC8qKiBjb21tZW50ICBNeTxjYXJldD4gKi8KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi93b3JkL1RleHRJbkNvbW1lbnRfYWZ0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3dvcmQvVGV4dEluQ29tbWVudF9hZnRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFhN2I4ZDcKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29tcGxldGlvbi93b3JkL1RleHRJbkNvbW1lbnRfYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDQgQEAKK3B1YmxpYyBjbGFzcyBNeUNsYXNzIHsKKworICAvKiogY29tbWVudCAgTXlDbGFzczxjYXJldD4gKi8KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29udmVydFRvQmFzaWNMYXRpbi9DaGFyTGl0ZXJhbC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbnZlcnRUb0Jhc2ljTGF0aW4vQ2hhckxpdGVyYWwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44Mjk2YTFjCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbnZlcnRUb0Jhc2ljTGF0aW4vQ2hhckxpdGVyYWwuamF2YQpAQCAtMCwwICsxLDMgQEAKK2NsYXNzIEMgeworICAgIGNoYXIgY2ggPSAnPGNhcmV0PsKpJzsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29udmVydFRvQmFzaWNMYXRpbi9DaGFyTGl0ZXJhbF9hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbnZlcnRUb0Jhc2ljTGF0aW4vQ2hhckxpdGVyYWxfYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yODI2ZjNlCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbnZlcnRUb0Jhc2ljTGF0aW4vQ2hhckxpdGVyYWxfYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDMgQEAKK2NsYXNzIEMgeworICAgIGNoYXIgY2ggPSAnXHUwMGE5JzsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29udmVydFRvQmFzaWNMYXRpbi9Eb2NDb21tZW50LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29udmVydFRvQmFzaWNMYXRpbi9Eb2NDb21tZW50LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjEzMjlhOAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb252ZXJ0VG9CYXNpY0xhdGluL0RvY0NvbW1lbnQuamF2YQpAQCAtMCwwICsxLDUgQEAKKy8qKjxjYXJldD4KKyAqIENvcHlyaWdodCDCqSAyMDAwLTIwMTAgSmV0QnJhaW5zIHMuci5vLgorICovCitjbGFzcyBDIHsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29udmVydFRvQmFzaWNMYXRpbi9Eb2NDb21tZW50X2FmdGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29udmVydFRvQmFzaWNMYXRpbi9Eb2NDb21tZW50X2FmdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzljYzY1YQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb252ZXJ0VG9CYXNpY0xhdGluL0RvY0NvbW1lbnRfYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDUgQEAKKy8qKgorICogQ29weXJpZ2h0ICZjb3B5OyAyMDAwLTIwMTAgSmV0QnJhaW5zIHMuci5vLgorICovCitjbGFzcyBDIHsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29udmVydFRvQmFzaWNMYXRpbi9Eb2NUYWcuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb252ZXJ0VG9CYXNpY0xhdGluL0RvY1RhZy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjExZjRlMmUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29udmVydFRvQmFzaWNMYXRpbi9Eb2NUYWcuamF2YQpAQCAtMCwwICsxLDIzIEBACisvKgorICogQ29weXJpZ2h0IDIwMDAtMjAxMiBKZXRCcmFpbnMgcy5yLm8uCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworY2xhc3MgQyB7CisgIC8qKgorICAgKiBTb21lIG1ldGhvZC4KKyAgICoKKyAgICogQHBhcmFtIHZhbHVlIHNvbWUgKMKpKTxjYXJldD4gcGFyYW0uCisgICAqLworICBhYnN0cmFjdCB2b2lkIG0oaW50IHZhbHVlKTsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29udmVydFRvQmFzaWNMYXRpbi9Eb2NUYWdfYWZ0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb252ZXJ0VG9CYXNpY0xhdGluL0RvY1RhZ19hZnRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI4NjA2Y2EKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29udmVydFRvQmFzaWNMYXRpbi9Eb2NUYWdfYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDIzIEBACisvKgorICogQ29weXJpZ2h0IDIwMDAtMjAxMiBKZXRCcmFpbnMgcy5yLm8uCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworY2xhc3MgQyB7CisgIC8qKgorICAgKiBTb21lIG1ldGhvZC4KKyAgICoKKyAgICogQHBhcmFtIHZhbHVlIHNvbWUgKCZjb3B5OykgcGFyYW0uCisgICAqLworICBhYnN0cmFjdCB2b2lkIG0oaW50IHZhbHVlKTsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29udmVydFRvQmFzaWNMYXRpbi9QbGFpbkNvbW1lbnQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb252ZXJ0VG9CYXNpY0xhdGluL1BsYWluQ29tbWVudC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ2NzVkZDIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29udmVydFRvQmFzaWNMYXRpbi9QbGFpbkNvbW1lbnQuamF2YQpAQCAtMCwwICsxLDMgQEAKK2NsYXNzIEMgeworICAgIC8vPGNhcmV0PiDCqSAyMDEwIEpldEJyYWlucworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb252ZXJ0VG9CYXNpY0xhdGluL1BsYWluQ29tbWVudF9hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbnZlcnRUb0Jhc2ljTGF0aW4vUGxhaW5Db21tZW50X2FmdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWI1YzQxZgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb252ZXJ0VG9CYXNpY0xhdGluL1BsYWluQ29tbWVudF9hZnRlci5qYXZhCkBAIC0wLDAgKzEsMyBAQAorY2xhc3MgQyB7CisgICAgLy8gJmNvcHk7IDIwMTAgSmV0QnJhaW5zCit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbnZlcnRUb0Jhc2ljTGF0aW4vU3RyaW5nTGl0ZXJhbC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbnZlcnRUb0Jhc2ljTGF0aW4vU3RyaW5nTGl0ZXJhbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJiYTFkOTQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29udmVydFRvQmFzaWNMYXRpbi9TdHJpbmdMaXRlcmFsLmphdmEKQEAgLTAsMCArMSwzIEBACitjbGFzcyBDIHsKKyAgICBTdHJpbmcgcyA9ICI8Y2FyZXQ+w4HDriI7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbnZlcnRUb0Jhc2ljTGF0aW4vU3RyaW5nTGl0ZXJhbF9hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbnZlcnRUb0Jhc2ljTGF0aW4vU3RyaW5nTGl0ZXJhbF9hZnRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg2MjJmOWIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29udmVydFRvQmFzaWNMYXRpbi9TdHJpbmdMaXRlcmFsX2FmdGVyLmphdmEKQEAgLTAsMCArMSwzIEBACitjbGFzcyBDIHsKKyAgICBTdHJpbmcgcyA9ICJcdTAwYzFcdTAwZWUiOworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb252ZXJ0VG9TdHJpbmdMaXRlcmFsL1NpbXBsZS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvbnZlcnRUb1N0cmluZ0xpdGVyYWwvU2ltcGxlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjg1YzdhYgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb252ZXJ0VG9TdHJpbmdMaXRlcmFsL1NpbXBsZS5qYXZhCkBAIC0wLDAgKzEsMjAgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwMC0yMDExIEpldEJyYWlucyBzLnIuby4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCitjbGFzcyBDIHsKKyAgICB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbignPGNhcmV0PmFhYScpOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29udmVydFRvU3RyaW5nTGl0ZXJhbC9TaW1wbGVfYWZ0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb252ZXJ0VG9TdHJpbmdMaXRlcmFsL1NpbXBsZV9hZnRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQyODc1OGUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29udmVydFRvU3RyaW5nTGl0ZXJhbC9TaW1wbGVfYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDIwIEBACisvKgorICogQ29weXJpZ2h0IDIwMDAtMjAxMSBKZXRCcmFpbnMgcy5yLm8uCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworY2xhc3MgQyB7CisgICAgeworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImFhYSIpOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29weVJlZmVyZW5jZS9Db25zdHJ1Y3Rvci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvcHlSZWZlcmVuY2UvQ29uc3RydWN0b3IuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYWE0ODVjCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvcHlSZWZlcmVuY2UvQ29uc3RydWN0b3IuamF2YQpAQCAtMCwwICsxLDQgQEAKK2NsYXNzIEMyIHsKKyAgICBwdWJsaWMgPGNhcmV0PkMyKGludCBpKSB7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvcHlSZWZlcmVuY2UvQ29uc3RydWN0b3JfYWZ0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb3B5UmVmZXJlbmNlL0NvbnN0cnVjdG9yX2FmdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjkzZWVlYgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb3B5UmVmZXJlbmNlL0NvbnN0cnVjdG9yX2FmdGVyLmphdmEKQEAgLTAsMCArMSw5IEBACitjbGFzcyBYWFggeworICAgIHZvaWQgZigpIHsKKyAgICAgICAgbmV3IEMyKDxjYXJldD4pCisgICAgfQorfQorY2xhc3MgQzIgeworICAgIHB1YmxpYyBDMihpbnQgaSkgeworICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb3B5UmVmZXJlbmNlL0NvbnN0cnVjdG9yX2RzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvcHlSZWZlcmVuY2UvQ29uc3RydWN0b3JfZHN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjY5NWI5MwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb3B5UmVmZXJlbmNlL0NvbnN0cnVjdG9yX2RzdC5qYXZhCkBAIC0wLDAgKzEsOSBAQAorY2xhc3MgWFhYIHsKKyAgICB2b2lkIGYoKSB7CisgICAgICAgIG5ldyA8Y2FyZXQ+CisgICAgfQorfQorY2xhc3MgQzIgeworICAgIHB1YmxpYyBDMihpbnQgaSkgeworICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb3B5UmVmZXJlbmNlL0NvcHlGaWxlX2FmdGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29weVJlZmVyZW5jZS9Db3B5RmlsZV9hZnRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIwYzA3ODMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29weVJlZmVyZW5jZS9Db3B5RmlsZV9hZnRlci5qYXZhCkBAIC0wLDAgKzEsMyBAQAorY2xhc3MgWCB7CisgIFN0cmluZyBzID0gIi94L3gudHh0PGNhcmV0PiI7Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29weVJlZmVyZW5jZS9Db3B5RmlsZV9kc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb3B5UmVmZXJlbmNlL0NvcHlGaWxlX2RzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgyYjUwY2Q3Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvcHlSZWZlcmVuY2UvQ29weUZpbGVfZHN0LmphdmEKQEAgLTAsMCArMSwzIEBACitjbGFzcyBYIHsKKyAgU3RyaW5nIHMgPSAiPGNhcmV0PiI7Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29weVJlZmVyZW5jZS9EZWZhdWx0Q29uc3RydWN0b3IuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb3B5UmVmZXJlbmNlL0RlZmF1bHRDb25zdHJ1Y3Rvci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZhNjRmN2MKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29weVJlZmVyZW5jZS9EZWZhdWx0Q29uc3RydWN0b3IuamF2YQpAQCAtMCwwICsxLDcgQEAKK2NsYXNzIFhYWCB7CisgICAgdm9pZCBmKCkgeworICAgICAgICBuZXcgPGNhcmV0PkMyKCk7CisgICAgfQorfQorY2xhc3MgQzIgeworfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvcHlSZWZlcmVuY2UvRGVmYXVsdENvbnN0cnVjdG9yX2FmdGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29weVJlZmVyZW5jZS9EZWZhdWx0Q29uc3RydWN0b3JfYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MjA3MzQwCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvcHlSZWZlcmVuY2UvRGVmYXVsdENvbnN0cnVjdG9yX2FmdGVyLmphdmEKQEAgLTAsMCArMSw4IEBACitjbGFzcyBYWFggeworICAgIHZvaWQgZigpIHsKKyAgICAgICAgbmV3IEMyKCk7CisgICAgICAgIG5ldyBDMigpPGNhcmV0PgorICAgIH0KK30KK2NsYXNzIEMyIHsKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb3B5UmVmZXJlbmNlL0RlZmF1bHRDb25zdHJ1Y3Rvcl9kc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb3B5UmVmZXJlbmNlL0RlZmF1bHRDb25zdHJ1Y3Rvcl9kc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZDJlODNlCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvcHlSZWZlcmVuY2UvRGVmYXVsdENvbnN0cnVjdG9yX2RzdC5qYXZhCkBAIC0wLDAgKzEsOCBAQAorY2xhc3MgWFhYIHsKKyAgICB2b2lkIGYoKSB7CisgICAgICAgIG5ldyBDMigpOworICAgICAgICBuZXcgPGNhcmV0PgorICAgIH0KK30KK2NsYXNzIEMyIHsKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb3B5UmVmZXJlbmNlL0lkZW50aWZpZXJTZXBhcmF0b3IuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb3B5UmVmZXJlbmNlL0lkZW50aWZpZXJTZXBhcmF0b3IuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMzg0MmExCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvcHlSZWZlcmVuY2UvSWRlbnRpZmllclNlcGFyYXRvci5qYXZhCkBAIC0wLDAgKzEsMiBAQAorY2xhc3MgPGNhcmV0PkMgeworfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvcHlSZWZlcmVuY2UvSWRlbnRpZmllclNlcGFyYXRvcl9hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvcHlSZWZlcmVuY2UvSWRlbnRpZmllclNlcGFyYXRvcl9hZnRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVjZDRhYzYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29weVJlZmVyZW5jZS9JZGVudGlmaWVyU2VwYXJhdG9yX2FmdGVyLmphdmEKQEAgLTAsMCArMSw1IEBACitjbGFzcyBYIHsKKyAgIHZvaWQgZihDIDxjYXJldD5YIHgpIHt9Cit9CitjbGFzcyBDIHsKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb3B5UmVmZXJlbmNlL0lkZW50aWZpZXJTZXBhcmF0b3JfZHN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29weVJlZmVyZW5jZS9JZGVudGlmaWVyU2VwYXJhdG9yX2RzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmViNGFhZjcKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29weVJlZmVyZW5jZS9JZGVudGlmaWVyU2VwYXJhdG9yX2RzdC5qYXZhCkBAIC0wLDAgKzEsNSBAQAorY2xhc3MgWCB7CisgICB2b2lkIGYoPGNhcmV0PlggeCkge30KK30KK2NsYXNzIEMgeworfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvcHlSZWZlcmVuY2UvTWV0aG9kRnJvbUFub255bW91c0NsYXNzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29weVJlZmVyZW5jZS9NZXRob2RGcm9tQW5vbnltb3VzQ2xhc3MuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMTZiMjUyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvcHlSZWZlcmVuY2UvTWV0aG9kRnJvbUFub255bW91c0NsYXNzLmphdmEKQEAgLTAsMCArMSw5IEBACisgIGNsYXNzIFRlc3QgeworICAgICBwdWJsaWMgdm9pZCBtKCkgeworICAgICAgIG5ldyBSdW5uYWJsZSgpIHsKKyAgICAgICAgICAgcHVibGljIHZvaWQgPGNhcmV0PnJ1bigpIHsKKworICAgICAgICAgICB9CisgICAgICAgfTsKKyAgICAgfQorICB9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29weVJlZmVyZW5jZS9NZXRob2RGcm9tQW5vbnltb3VzQ2xhc3NfYWZ0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jb3B5UmVmZXJlbmNlL01ldGhvZEZyb21Bbm9ueW1vdXNDbGFzc19hZnRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxNzY5YzAKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29weVJlZmVyZW5jZS9NZXRob2RGcm9tQW5vbnltb3VzQ2xhc3NfYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDkgQEAKKyAgY2xhc3MgVGVzdCB7CisgICAgIHB1YmxpYyB2b2lkIG0oKSB7CisgICAgICAgbmV3IFJ1bm5hYmxlKCkgeworICAgICAgICAgICBwdWJsaWMgdm9pZCBydW4oKSB7CisgICAgICAgICAgICAgICBydW4oKTxjYXJldD4KKyAgICAgICAgICAgfQorICAgICAgIH07CisgICAgIH0KKyAgfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvcHlSZWZlcmVuY2UvTWV0aG9kRnJvbUFub255bW91c0NsYXNzX2RzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NvcHlSZWZlcmVuY2UvTWV0aG9kRnJvbUFub255bW91c0NsYXNzX2RzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEzOWU3ZWMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY29weVJlZmVyZW5jZS9NZXRob2RGcm9tQW5vbnltb3VzQ2xhc3NfZHN0LmphdmEKQEAgLTAsMCArMSw5IEBACisgIGNsYXNzIFRlc3QgeworICAgICBwdWJsaWMgdm9pZCBtKCkgeworICAgICAgIG5ldyBSdW5uYWJsZSgpIHsKKyAgICAgICAgICAgcHVibGljIHZvaWQgcnVuKCkgeworICAgICAgICAgICAgICA8Y2FyZXQ+CisgICAgICAgICAgIH0KKyAgICAgICB9OworICAgICB9CisgIH0KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jcmVhdGVTdWJjbGFzcy9nZW5lcmljcy9hZnRlci9TdWJjbGFzcy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NyZWF0ZVN1YmNsYXNzL2dlbmVyaWNzL2FmdGVyL1N1YmNsYXNzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTYyNzdlZAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jcmVhdGVTdWJjbGFzcy9nZW5lcmljcy9hZnRlci9TdWJjbGFzcy5qYXZhCkBAIC0wLDAgKzEsMiBAQAorcHVibGljIGNsYXNzIFN1YmNsYXNzPEUgZXh0ZW5kcyBSdW5uYWJsZSwgUSBleHRlbmRzIFJ1bm5hYmxlPiBleHRlbmRzIFN1cGVyY2xhc3M8RSwgUT4geworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jcmVhdGVTdWJjbGFzcy9nZW5lcmljcy9hZnRlci9TdXBlcmNsYXNzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY3JlYXRlU3ViY2xhc3MvZ2VuZXJpY3MvYWZ0ZXIvU3VwZXJjbGFzcy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFjMGVjNWMwCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NyZWF0ZVN1YmNsYXNzL2dlbmVyaWNzL2FmdGVyL1N1cGVyY2xhc3MuamF2YQpAQCAtMCwwICsxLDIgQEAKK2NsYXNzIFN1cGVyY2xhc3M8RSBleHRlbmRzIFJ1bm5hYmxlLCBRIGV4dGVuZHMgUnVubmFibGU+IHsKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jcmVhdGVTdWJjbGFzcy9nZW5lcmljcy9iZWZvcmUvU3VwZXJjbGFzcy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NyZWF0ZVN1YmNsYXNzL2dlbmVyaWNzL2JlZm9yZS9TdXBlcmNsYXNzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWMwZWM1YzAKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvY3JlYXRlU3ViY2xhc3MvZ2VuZXJpY3MvYmVmb3JlL1N1cGVyY2xhc3MuamF2YQpAQCAtMCwwICsxLDIgQEAKK2NsYXNzIFN1cGVyY2xhc3M8RSBleHRlbmRzIFJ1bm5hYmxlLCBRIGV4dGVuZHMgUnVubmFibGU+IHsKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jcmVhdGVTdWJjbGFzcy9pbm5lckNsYXNzL2FmdGVyL1Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jcmVhdGVTdWJjbGFzcy9pbm5lckNsYXNzL2FmdGVyL1Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMWQzZTBiNQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jcmVhdGVTdWJjbGFzcy9pbm5lckNsYXNzL2FmdGVyL1Rlc3QuamF2YQpAQCAtMCwwICsxLDYgQEAKK3B1YmxpYyBjbGFzcyBUZXN0IHsKKyAgICBwcml2YXRlIGludGVyZmFjZSBJbm5lciB7fQorCisgICAgcHVibGljIGNsYXNzIElubmVySW1wbCBpbXBsZW1lbnRzIElubmVyIHsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2NyZWF0ZVN1YmNsYXNzL2lubmVyQ2xhc3MvYmVmb3JlL1Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jcmVhdGVTdWJjbGFzcy9pbm5lckNsYXNzL2JlZm9yZS9UZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2IwOGYwOAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9jcmVhdGVTdWJjbGFzcy9pbm5lckNsYXNzL2JlZm9yZS9UZXN0LmphdmEKQEAgLTAsMCArMSwzIEBACitwdWJsaWMgY2xhc3MgVGVzdCB7CisgICAgcHJpdmF0ZSBpbnRlcmZhY2UgSW5uZXIge30KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZy9BYnN0cmFjdE1ldGhvZHMuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nL0Fic3RyYWN0TWV0aG9kcy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk4NmU2ZjMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZy9BYnN0cmFjdE1ldGhvZHMuamF2YQpAQCAtMCwwICsxLDEwOSBAQAorLy8gYWJzdHJhY3QgbWV0aG9kcworcHVibGljIGNsYXNzIGEgeworICA8ZXJyb3IgZGVzY3I9Ik1pc3NpbmcgbWV0aG9kIGJvZHksIG9yIGRlY2xhcmUgYWJzdHJhY3QiPnZvaWQgZigpOzwvZXJyb3I+CisKK30KK2Fic3RyYWN0IGNsYXNzIGMxIHsKKyAgYWJzdHJhY3Qgdm9pZCBmMSgpOworICA8ZXJyb3IgZGVzY3I9Ik1pc3NpbmcgbWV0aG9kIGJvZHksIG9yIGRlY2xhcmUgYWJzdHJhY3QiPmludCBmMigpOzwvZXJyb3I+Cit9CisKK2ludGVyZmFjZSBmZiB7CisgIGFic3RyYWN0IHZvaWQgZjEoKTsKKyAgdm9pZCBmMigpOworfQorCitjbGFzcyB4IHsKKyAgdm9pZCBmKCkgeworICAgIDxlcnJvciBkZXNjcj0iTWV0aG9kIGNhbGwgZXhwZWN0ZWQiPlJ1bnRpbWVFeGNlcHRpb24oKTwvZXJyb3I+OworICAgIHRocm93IDxlcnJvciBkZXNjcj0iTWV0aG9kIGNhbGwgZXhwZWN0ZWQiPlJ1bnRpbWVFeGNlcHRpb24oKTwvZXJyb3I+OworICB9Cit9CisKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKzxlcnJvciBkZXNjcj0iQ2xhc3MgJ2MyJyBtdXN0IGVpdGhlciBiZSBkZWNsYXJlZCBhYnN0cmFjdCBvciBpbXBsZW1lbnQgYWJzdHJhY3QgbWV0aG9kICdmKCknIGluICdjMiciPmNsYXNzIGMyPC9lcnJvcj4geworICA8ZXJyb3IgZGVzY3I9IkFic3RyYWN0IG1ldGhvZCBpbiBub24tYWJzdHJhY3QgY2xhc3MiPmFic3RyYWN0PC9lcnJvcj4gdm9pZCBmKCk7Cit9CisKKzxlcnJvciBkZXNjcj0iQ2xhc3MgJ2MzJyBtdXN0IGVpdGhlciBiZSBkZWNsYXJlZCBhYnN0cmFjdCBvciBpbXBsZW1lbnQgYWJzdHJhY3QgbWV0aG9kICdpaWYoKScgaW4gJ2M0JyI+Y2xhc3MgYzMgZXh0ZW5kcyBjNDwvZXJyb3I+IHsKKworfQorCithYnN0cmFjdCBjbGFzcyBjNCB7CisgIGFic3RyYWN0IHZvaWQgaWlmKCk7Cit9CisKK2NsYXNzIGM1IGV4dGVuZHMgYzYgaW1wbGVtZW50cyBpNyB7IHB1YmxpYyB2b2lkIGZmKCl7fSB9CithYnN0cmFjdCBjbGFzcyBjNiB7fQoraW50ZXJmYWNlIGk3IHsgdm9pZCBmZigpOyB9CisKKzxlcnJvciBkZXNjcj0iQ2xhc3MgJ2M3JyBtdXN0IGVpdGhlciBiZSBkZWNsYXJlZCBhYnN0cmFjdCBvciBpbXBsZW1lbnQgYWJzdHJhY3QgbWV0aG9kICdmZigpJyBpbiAnaTcnIj5jbGFzcyBjNyBpbXBsZW1lbnRzIGk3PC9lcnJvcj4geworfQorCitjbGFzcyBjYWxsYWJzdHJhY3QgZXh0ZW5kcyBjNCB7CisgIHZvaWQgaWlmKCkgeworICAgIDxlcnJvciBkZXNjcj0iQWJzdHJhY3QgbWV0aG9kICdpaWYoKScgY2Fubm90IGJlIGFjY2Vzc2VkIGRpcmVjdGx5Ij5zdXBlci5paWYoKTwvZXJyb3I+OworICB9Cit9CisKKworYWJzdHJhY3QgY2xhc3MgYzggeworICAgIHB1YmxpYyBhYnN0cmFjdCBib29sZWFuIGVxdWFscyhPYmplY3Qgb3RoZXIpOworfQorCis8ZXJyb3IgZGVzY3I9IkNsYXNzICdjOScgbXVzdCBlaXRoZXIgYmUgZGVjbGFyZWQgYWJzdHJhY3Qgb3IgaW1wbGVtZW50IGFic3RyYWN0IG1ldGhvZCAnZXF1YWxzKE9iamVjdCknIGluICdjOCciPmZpbmFsIGNsYXNzIGM5IGV4dGVuZHMgYzg8L2Vycm9yPiB7Cit9CisKKworCisvLy0tLS0tLS0gaWYgb25seSBCb3R0b20gd2VyZSBpbiBvdGhlciBwYWNrYWdlLCBpdCBzaG91bGQgaGF2ZSBiZWVuIGFic3RyYWN0IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitwdWJsaWMgYWJzdHJhY3QgY2xhc3MgQWJzdHJhY3RUZXN0IHsKKyAKKyAgICBhYnN0cmFjdCBTdHJpbmcgZ2V0TmFtZSgpOworIAorICAgIGFic3RyYWN0IHN0YXRpYyBjbGFzcyBNaWRkbGUgZXh0ZW5kcyBBYnN0cmFjdFRlc3QgeworIAorICAgIH0KKyAKKyAgICBzdGF0aWMgY2xhc3MgQm90dG9tIGV4dGVuZHMgTWlkZGxlIHsKKyAgICAgICAgU3RyaW5nIGdldE5hbWUoKSB7CisgICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgfQorICAgIH0KK30KKworLy8vLy8vLy8vLy8KK2Fic3RyYWN0IGNsYXNzIGNjMSB7CisgIGFic3RyYWN0IHZvaWQgZihpbnQgaSk7Cit9CithYnN0cmFjdCBjbGFzcyBjYzIgZXh0ZW5kcyBjYzEgeworICBhYnN0cmFjdCBwcm90ZWN0ZWQgdm9pZCBmKGludCBpKTsKK30KK2NsYXNzIGNjMyBleHRlbmRzIGNjMiB7CisgIHB1YmxpYyB2b2lkIGYoaW50IGkpIHt9Cit9CisvLy8vLy8vLy8vLy8vLy8KK2ludGVyZmFjZSBNeUNvbXBhcmF0b3IgeworICAgIGludCBjb21wYXJlKE9iamVjdCB0LCBPYmplY3QgdDEpOworCisgICAgYm9vbGVhbiBlcXVhbHMoamF2YS5sYW5nLk9iamVjdCBvYmplY3QpOworfQorY2xhc3MgTXlDb21wYXJhdG9ySW1wbCBpbXBsZW1lbnRzIE15Q29tcGFyYXRvciB7CisgICAgcHVibGljIGludCBjb21wYXJlKE9iamVjdCBvLCBPYmplY3QgbzEpIHsKKyAgICAgICAgbmV3IE15Q29tcGFyYXRvcigpIHsKKyAgICAgICAgICAgIHB1YmxpYyBpbnQgY29tcGFyZShPYmplY3QgbywgT2JqZWN0IG8xKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICB9CisgICAgICAgIH07CisgICAgICAgIHJldHVybiAwOworICAgIH0KK30KKy8vLy8vLy8vLy8vLy8vLy8gSURFQURFVi02MDUwCitpbnRlcmZhY2UgQ29tcGFyYWJsZSB7fQorCitpbnRlcmZhY2UgUHVibGljQ2xvbmVhYmxlIGV4dGVuZHMgQ2xvbmVhYmxlIHsKKyAgICBPYmplY3QgY2xvbmUoKSB0aHJvd3MgQ2xvbmVOb3RTdXBwb3J0ZWRFeGNlcHRpb247Cit9CisKK2ludGVyZmFjZSBQdWJsaWNDbG9uZWFibGVFeHRlbnNpb24gZXh0ZW5kcyAgQ29tcGFyYWJsZSwgUHVibGljQ2xvbmVhYmxlIHsKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nL0FjY2Vzc0lubmVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZy9BY2Nlc3NJbm5lci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJhYjVhNjYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZy9BY2Nlc3NJbm5lci5qYXZhCkBAIC0wLDAgKzEsNTUgQEAKKy8vIGFjY2VzcyBwcm9ibGVtcyBpbiBpbm5lciBjbGFzc2VzCisKK2ltcG9ydCBqYXZhLmF3dC4qOworaW1wb3J0IGphdmEuYmVhbnMuYmVhbmNvbnRleHQuQmVhbkNvbnRleHRTZXJ2aWNlc1N1cHBvcnQ7CitpbXBvcnQgamF2YS5iZWFucy5iZWFuY29udGV4dC5CZWFuQ29udGV4dFNlcnZpY2VzU3VwcG9ydC48ZXJyb3IgZGVzY3I9IidqYXZhLmJlYW5zLmJlYW5jb250ZXh0LkJlYW5Db250ZXh0U2VydmljZXNTdXBwb3J0LkJDU1NDaGlsZCcgaGFzIHByb3RlY3RlZCBhY2Nlc3MgaW4gJ2phdmEuYmVhbnMuYmVhbmNvbnRleHQuQmVhbkNvbnRleHRTZXJ2aWNlc1N1cHBvcnQnIj5CQ1NTQ2hpbGQ8L2Vycm9yPjsKKworY2xhc3MgYSBleHRlbmRzIENvbXBvbmVudCB7CisgICAgdm9pZCBmKCkgeworICAgICAgICBGbGlwQnVmZmVyU3RyYXRlZ3kgcyA9IG51bGw7CisgICAgICAgIGludCBpID0gcy48ZXJyb3IgZGVzY3I9IidudW1CdWZmZXJzJyBoYXMgcHJvdGVjdGVkIGFjY2VzcyBpbiAnamF2YS5hd3QuQ29tcG9uZW50LkZsaXBCdWZmZXJTdHJhdGVneSciPm51bUJ1ZmZlcnM8L2Vycm9yPjsKKyAgICAgICAgcy48ZXJyb3IgZGVzY3I9IidjcmVhdGVCdWZmZXJzKGludCwgamF2YS5hd3QuQnVmZmVyQ2FwYWJpbGl0aWVzKScgaGFzIHByb3RlY3RlZCBhY2Nlc3MgaW4gJ2phdmEuYXd0LkNvbXBvbmVudC5GbGlwQnVmZmVyU3RyYXRlZ3knIj5jcmVhdGVCdWZmZXJzPC9lcnJvcj4oMSxudWxsKTsKKworICAgICAgICAvLyBUT0RPCisgICAgICAgIC8vIG5vdyBjYW5ub3QgZGlzdGlucXVpc2ggcHJpdmF0ZSBmcm9tIHBhY2thZ2UgbG9jYWwgaW4gY2xhc3MgZmlsZXMKKyAgICAgICAgLy88IGVycm9yIGRlc2NyPSInamF2YS5hd3QuQ29tcG9uZW50LlNpbmdsZUJ1ZmZlclN0cmF0ZWd5JyBoYXMgcHJpdmF0ZSBhY2Nlc3MgaW4gJ2phdmEuYXd0LkNvbXBvbmVudCciPlNpbmdsZUJ1ZmZlclN0cmF0ZWd5PCAvZXJyb3I+IHMyID0gbnVsbDsKKyAgICAgICAgLy9PYmplY3QgbyA9IHMyLjwgZXJyb3IgZGVzY3I9IidjYXBzJyBoYXMgcHJpdmF0ZSBhY2Nlc3MgaW4gJ2phdmEuYXd0LkNvbXBvbmVudC5TaW5nbGVCdWZmZXJTdHJhdGVneSciPmNhcHM8IC9lcnJvcj47CisgICAgfQorCisKKworICAgICAgICBjbGFzcyBkZGQgZXh0ZW5kcyBCZWFuQ29udGV4dFNlcnZpY2VzU3VwcG9ydCB7CisgICAgICAgICAgICBCQ1NTQ2hpbGQuPGVycm9yIGRlc2NyPSInamF2YS5iZWFucy5iZWFuY29udGV4dC5CZWFuQ29udGV4dFNlcnZpY2VzU3VwcG9ydC5CQ1NTQ2hpbGQuQkNTU0NTZXJ2aWNlQ2xhc3NSZWYnIGlzIG5vdCBwdWJsaWMgaW4gJ2phdmEuYmVhbnMuYmVhbmNvbnRleHQuQmVhbkNvbnRleHRTZXJ2aWNlc1N1cHBvcnQuQkNTU0NoaWxkJy4gQ2Fubm90IGJlIGFjY2Vzc2VkIGZyb20gb3V0c2lkZSBwYWNrYWdlIj5CQ1NTQ1NlcnZpY2VDbGFzc1JlZjwvZXJyb3I+IGZkID0gbnVsbDsKKyAgICAgICAgICAgIHZvaWQgZmYoKSB7CisgICAgICAgICAgICAgICAgZmQuPGVycm9yIGRlc2NyPSInYWRkUmVxdWVzdG9yKGphdmEubGFuZy5PYmplY3QsIGphdmEuYmVhbnMuYmVhbmNvbnRleHQuQmVhbkNvbnRleHRTZXJ2aWNlUmV2b2tlZExpc3RlbmVyKScgaXMgbm90IHB1YmxpYyBpbiAnamF2YS5iZWFucy5iZWFuY29udGV4dC5CZWFuQ29udGV4dFNlcnZpY2VzU3VwcG9ydC5CQ1NTQ2hpbGQuQkNTU0NTZXJ2aWNlQ2xhc3NSZWYnLiBDYW5ub3QgYmUgYWNjZXNzZWQgZnJvbSBvdXRzaWRlIHBhY2thZ2UiPmFkZFJlcXVlc3RvcjwvZXJyb3I+KG51bGwsbnVsbCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworfQorCisKK2ludGVyZmFjZSBJIHsKKyAgYWJzdHJhY3QgY2xhc3MgSW1wbGUgaW1wbGVtZW50cyBJIHsKKyAgICBhYnN0cmFjdCB2b2lkIGYoKTsKKyAgfQorICBhYnN0cmFjdCBjbGFzcyBJbXBsMiBleHRlbmRzIEltcGxlIHsKKyAgICBhYnN0cmFjdCBjbGFzcyBJbm5lciBleHRlbmRzIEltcGwyIHsKKworICAgIH0KKyAgfQorfQorCisKK2NsYXNzIENsYXNzMSBleHRlbmRzIENsYXNzMiB7CisgIHB1YmxpYyB2b2lkIHRlc3QoKSB7CisgICAgbmV3IDxlcnJvciBkZXNjcj0iJ0NsYXNzMi5DbGFzczJJbm5lcicgaGFzIHByaXZhdGUgYWNjZXNzIGluICdDbGFzczInIj5DbGFzczJJbm5lcjwvZXJyb3I+KCk7CisgICAgaW50IGkgPSA8ZXJyb3IgZGVzY3I9IidDbGFzczIuQ2xhc3MySW5uZXInIGhhcyBwcml2YXRlIGFjY2VzcyBpbiAnQ2xhc3MyJyI+Q2xhc3MySW5uZXI8L2Vycm9yPi5pOworICB9Cit9CitjbGFzcyBDbGFzczIgeworICBwcml2YXRlIHN0YXRpYyBjbGFzcyBDbGFzczJJbm5lcnsKKyAgICBwdWJsaWMgc3RhdGljIGludCBpOworICAgIHB1YmxpYyBDbGFzczJJbm5lcigpIHsKKyAgICB9CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nL0FjY2Vzc0xldmVsQ2xhc2guamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nL0FjY2Vzc0xldmVsQ2xhc2guamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZmE2MmI4Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmcvQWNjZXNzTGV2ZWxDbGFzaC5qYXZhCkBAIC0wLDAgKzEsODcgQEAKKy8vIGFjY2VzcyBsZXZlbCBjbGFzaGVzCitpbnRlcmZhY2UgaSB7Cisgdm9pZCBmZigpOworfQorCitwdWJsaWMgY2xhc3MgYSBpbXBsZW1lbnRzIGkgeworIHZvaWQgPGVycm9yIGRlc2NyPSInZmYoKScgaW4gJ2EnIGNsYXNoZXMgd2l0aCAnZmYoKScgaW4gJ2knOyBhdHRlbXB0aW5nIHRvIGFzc2lnbiB3ZWFrZXIgYWNjZXNzIHByaXZpbGVnZXMgKCdwYWNrYWdlTG9jYWwnKTsgd2FzICdwdWJsaWMnIj5mZjwvZXJyb3I+KCkge30KK30KK2NsYXNzIGFpIGltcGxlbWVudHMgaSB7CisgcHVibGljIDxlcnJvciBkZXNjcj0iJ2ZmKCknIGluICdhaScgY2xhc2hlcyB3aXRoICdmZigpJyBpbiAnaSc7IGF0dGVtcHRpbmcgdG8gdXNlIGluY29tcGF0aWJsZSByZXR1cm4gdHlwZSI+aW50PC9lcnJvcj4gZmYoKSB7IHJldHVybiAwO30KK30KKworY2xhc3MgYzIgaW1wbGVtZW50cyBpIHsKKyBwdWJsaWMgYzIoKSB7fQorIHB1YmxpYyB2b2lkIGZmKCkge30KKyBwcm90ZWN0ZWQgdm9pZCBnKCkge30KKyBwcml2YXRlIGludCBmZmYoU3RyaW5nIHMpIHsgcmV0dXJuIDA7IH0KK30KKworY2xhc3MgYzMgZXh0ZW5kcyBjMiB7CisgcHJvdGVjdGVkIGMzKCkge30KKyBwcml2YXRlIGludCBnKGludCBrKSB7IHJldHVybiAyO30KKyBwcml2YXRlIGNoYXIgZmZmKFN0cmluZyBzKSB7IHJldHVybiAwOyB9Cit9CisKK2NsYXNzIGM0IGV4dGVuZHMgYzMgeworIHByaXZhdGUgYzQoKSB7fQorIDxlcnJvciBkZXNjcj0iJ2coKScgaW4gJ2M0JyBjbGFzaGVzIHdpdGggJ2coKScgaW4gJ2MyJzsgYXR0ZW1wdGluZyB0byBhc3NpZ24gd2Vha2VyIGFjY2VzcyBwcml2aWxlZ2VzICgncHJpdmF0ZScpOyB3YXMgJ3Byb3RlY3RlZCciPnByaXZhdGU8L2Vycm9yPiB2b2lkIGcoKSB7fQorIHByaXZhdGUgU3RyaW5nIGZmZihTdHJpbmcgcykgdGhyb3dzIGphdmEuaW8uSU9FeGNlcHRpb24geyByZXR1cm4gbnVsbDsgfQorfQorY2xhc3MgYzRpIGV4dGVuZHMgYzMgeworIHByb3RlY3RlZCA8ZXJyb3IgZGVzY3I9IidnKCknIGluICdjNGknIGNsYXNoZXMgd2l0aCAnZygpJyBpbiAnYzInOyBhdHRlbXB0aW5nIHRvIHVzZSBpbmNvbXBhdGlibGUgcmV0dXJuIHR5cGUiPk9iamVjdDwvZXJyb3I+IGcoKSB7cmV0dXJuIG51bGw7fQorfQorCisvLyBzaWJsaW5nIGluaGVyaXRhbmNlCithYnN0cmFjdCBjbGFzcyBjNSB7IGFic3RyYWN0IHB1YmxpYyBpbnQgZmYoKTsgfQoraW50ZXJmYWNlIGk1IHsgdm9pZCBmZigpOyB9Cis8ZXJyb3IgZGVzY3I9IidmZigpJyBpbiAnaTUnIGNsYXNoZXMgd2l0aCAnZmYoKScgaW4gJ2M1JzsgbWV0aG9kcyBoYXZlIHVucmVsYXRlZCByZXR1cm4gdHlwZXMiPmFic3RyYWN0IGNsYXNzIGM2IGV4dGVuZHMgYzUgaW1wbGVtZW50cyBpNTwvZXJyb3I+IHsKK30KKworY2xhc3MgYzcgeyBwdWJsaWMgU3RyaW5nIGZmKCkgeyByZXR1cm4gbnVsbDt9IH0KKzxlcnJvciBkZXNjcj0iJ2ZmKCknIGluICdjNycgY2xhc2hlcyB3aXRoICdmZigpJyBpbiAnaTUnOyBhdHRlbXB0aW5nIHRvIHVzZSBpbmNvbXBhdGlibGUgcmV0dXJuIHR5cGUiPmNsYXNzIGM4IGV4dGVuZHMgYzcgaW1wbGVtZW50cyBpNTwvZXJyb3I+IHsKK30KKworLy8gaW50ZXJmYWNlIHNob3VsZCBub3QgY2xhc2ggd2l0aCBPYmplY3QKK2ludGVyZmFjZSBBIHsKKyAgICBPYmplY3QgY2xvbmUoKSB0aHJvd3MgQ2xvbmVOb3RTdXBwb3J0ZWRFeGNlcHRpb247CisgICAgdm9pZCBmaW5hbGl6ZSgpOworCisgICAgPGVycm9yIGRlc2NyPSInaGFzaENvZGUoKScgaW4gJ0EnIGNsYXNoZXMgd2l0aCAnaGFzaENvZGUoKScgaW4gJ2phdmEubGFuZy5PYmplY3QnOyBhdHRlbXB0aW5nIHRvIHVzZSBpbmNvbXBhdGlibGUgcmV0dXJuIHR5cGUiPnZvaWQ8L2Vycm9yPiBoYXNoQ29kZSgpOworICAgIDxlcnJvciBkZXNjcj0iJ2VxdWFscyhPYmplY3QpJyBpbiAnQScgY2xhc2hlcyB3aXRoICdlcXVhbHMoT2JqZWN0KScgaW4gJ2phdmEubGFuZy5PYmplY3QnOyBhdHRlbXB0aW5nIHRvIHVzZSBpbmNvbXBhdGlibGUgcmV0dXJuIHR5cGUiPnZvaWQ8L2Vycm9yPiBlcXVhbHMoT2JqZWN0IG8pOworICAgIDxlcnJvciBkZXNjcj0iJ3RvU3RyaW5nKCknIGluICdBJyBjbGFzaGVzIHdpdGggJ3RvU3RyaW5nKCknIGluICdqYXZhLmxhbmcuT2JqZWN0JzsgYXR0ZW1wdGluZyB0byB1c2UgaW5jb21wYXRpYmxlIHJldHVybiB0eXBlIj52b2lkPC9lcnJvcj4gdG9TdHJpbmcoKTsKK30KKworaW50ZXJmYWNlIENvbmZsaWN0V2l0aE9iamVjdCB7CisgICAgICAgIE9iamVjdCBjbG9uZSgpIHRocm93cyBDbG9uZU5vdFN1cHBvcnRlZEV4Y2VwdGlvbjsKK30KKzxlcnJvciBkZXNjcj0iJ2Nsb25lKCknIGluICdqYXZhLmxhbmcuT2JqZWN0JyBjbGFzaGVzIHdpdGggJ2Nsb25lKCknIGluICdDb25mbGljdFdpdGhPYmplY3QnOyBhdHRlbXB0aW5nIHRvIGFzc2lnbiB3ZWFrZXIgYWNjZXNzIHByaXZpbGVnZXMgKCdwcm90ZWN0ZWQnKTsgd2FzICdwdWJsaWMnIj5jbGFzcyBzIGltcGxlbWVudHMgQ29uZmxpY3RXaXRoT2JqZWN0PC9lcnJvcj4geworCit9CisKKy8vIHBhcmFsbGVsIG92ZXJyaWRpbmcgbWV0aG9kcyBmcm9tIE9iamVjdAoraW50ZXJmYWNlIEluZGVyRmFjZSB7CisgIE9iamVjdCBjbG9uZSgpIHRocm93cyBDbG9uZU5vdFN1cHBvcnRlZEV4Y2VwdGlvbjsKK30KKworaW50ZXJmYWNlIFN1YkluZGVyRmFjZSBleHRlbmRzIEluZGVyRmFjZSB7Cit9CisKKzxlcnJvciBkZXNjcj0iJ2Nsb25lKCknIGluICdqYXZhLmxhbmcuT2JqZWN0JyBjbGFzaGVzIHdpdGggJ2Nsb25lKCknIGluICdJbmRlckZhY2UnOyBhdHRlbXB0aW5nIHRvIGFzc2lnbiB3ZWFrZXIgYWNjZXNzIHByaXZpbGVnZXMgKCdwcm90ZWN0ZWQnKTsgd2FzICdwdWJsaWMnIj5jbGFzcyBJbXBsZW1lbnRhdGlvbiBpbXBsZW1lbnRzIFN1YkluZGVyRmFjZTwvZXJyb3I+IHsKK30KKworCisKKy8vU0NSMjAwMDIKK2Fic3RyYWN0IGNsYXNzIFNDUjIwMDAyQSBleHRlbmRzIE9iamVjdCBpbXBsZW1lbnRzIFJ1bm5hYmxlIHsKKyAgcHJvdGVjdGVkIGFic3RyYWN0IGludCBnZXRTb21lKCk7CisgIHByaXZhdGUgZmluYWwgSW5uZXIgZ2V0SW5uZXIoKSB7IHJldHVybiBudWxsOyB9CisgIHByaXZhdGUgY2xhc3MgSW5uZXIgeyB9Cit9CisKK2Fic3RyYWN0IGNsYXNzIFNDUjIwMDAyQiBleHRlbmRzIFNDUjIwMDAyQSBpbXBsZW1lbnRzIFJ1bm5hYmxlIHsKKyAgcHJpdmF0ZSBmaW5hbCBJbm5lciBnZXRJbm5lcigpIHsgcmV0dXJuIG51bGw7IH0KKyAgcHJpdmF0ZSBjbGFzcyBJbm5lciB7IH0KK30KK2Fic3RyYWN0IGNsYXNzIFNDUjIwMDAyQyBleHRlbmRzIFNDUjIwMDAyQiBpbXBsZW1lbnRzIFJ1bm5hYmxlIHsKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nL0FtYmlndW91c01ldGhvZENhbGwuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nL0FtYmlndW91c01ldGhvZENhbGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MTU1ZWUwCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmcvQW1iaWd1b3VzTWV0aG9kQ2FsbC5qYXZhCkBAIC0wLDAgKzEsMzUgQEAKKy8vIEFtYmlndW91cyBtZXRob2QgY2FsbAorCitjbGFzcyBDNjEgeworCXB1YmxpYyB2b2lkIGZvbyhTdHJpbmcgcykge30KKwlwdWJsaWMgdm9pZCBmb28oSW50ZWdlciBpKSB7fQorCXB1YmxpYyB2b2lkIGZvbzIoKSB7CisJCWZvbzxlcnJvciBkZXNjcj0iQW1iaWd1b3VzIG1ldGhvZCBjYWxsOiBib3RoICdDNjEuZm9vKFN0cmluZyknIGFuZCAnQzYxLmZvbyhJbnRlZ2VyKScgbWF0Y2giPihudWxsKTwvZXJyb3I+OworCX0KK30KKworY2xhc3MgRDYxIGV4dGVuZHMgQzYxIHsKKwlwdWJsaWMgdm9pZCBmb28oSW50ZWdlciBpKSB7fQorCXB1YmxpYyB2b2lkIGZvbzIoKSB7CisJCWZvbzxlcnJvciBkZXNjcj0iQW1iaWd1b3VzIG1ldGhvZCBjYWxsOiBib3RoICdENjEuZm9vKEludGVnZXIpJyBhbmQgJ0M2MS5mb28oU3RyaW5nKScgbWF0Y2giPihudWxsKTwvZXJyb3I+OworCQlmb288ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIG1ldGhvZCAnZm9vKGludCknIj4oMSk8L2Vycm9yPjsKKwl9Cit9CitjbGFzcyBleCB7CisgICAgdm9pZCBmKFN0cmluZyBuYW1lLCBTdHJpbmdbXSBpKXt9CisgICAgdm9pZCBmKFN0cmluZyBuYW1lLCBleCBpKXt9CisKKyAgICB2b2lkIGcoKSB7CisgICAgICAgIGY8ZXJyb3IgZGVzY3I9IkFtYmlndW91cyBtZXRob2QgY2FsbDogYm90aCAnZXguZihTdHJpbmcsIFN0cmluZ1tdKScgYW5kICdleC5mKFN0cmluZywgZXgpJyBtYXRjaCI+KCIiLG51bGwpPC9lcnJvcj47CisgICAgfQorfQorCitjbGFzcyBYWCB7CisgICAgWFgoKSB7fQorICAgIHZvaWQgWFgoKSB7fQorCisgICAgeworICAgICAgICBuZXcgWFgoKS5YWCgpOworICAgIH0KK30KKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmcvQW5vbkJhc2VSZWYuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nL0Fub25CYXNlUmVmLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmVmMjUyNgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nL0Fub25CYXNlUmVmLmphdmEKQEAgLTAsMCArMSwxMSBAQAorY2xhc3MgQXsKKyAgeworICAgIGNsYXNzIExvY2FseworICAgICAgdm9pZCBmb28oKXt9CisgICAgfQorCisgICAgbmV3IExvY2FsKCl7CisgICAgICB2b2lkIGZvbygpe30KKyAgICB9OworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmcvQW5vbkluQW5vbi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmcvQW5vbkluQW5vbi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI5ODY2OGUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZy9Bbm9uSW5Bbm9uLmphdmEKQEAgLTAsMCArMSwyMSBAQAorcHVibGljIGNsYXNzIFFRUSB7CisgIHsKKyAgICBuZXcgT3V0ZXIoKXsKKyAgICAgIHZvaWQgZm9vKCl7CisgICAgICAgIG5ldyBJbm5lcigpeworICAgICAgICAgIHZvaWQgbWV0aG9kKCkgeworICAgICAgICAgICAgc3VwZXIubWV0aG9kKCk7CisgICAgICAgICAgfQorICAgICAgICB9OworICAgICAgfQorICAgIH07CisgIH0KK30KKworY2xhc3MgT3V0ZXJ7CisgIGNsYXNzIElubmVyeworICAgIHZvaWQgbWV0aG9kKCl7CisKKyAgICB9CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nL0Fzc2VydEV4cHJlc3Npb24uamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nL0Fzc2VydEV4cHJlc3Npb24uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZjVhMmVjCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmcvQXNzZXJ0RXhwcmVzc2lvbi5qYXZhCkBAIC0wLDAgKzEsMTIgQEAKKy8vIGFzc2VydCBzdGF0ZW1lbnQKKworY2xhc3MgYSB7CisgIHZvaWQgZigpIHsKKyAgICBhc3NlcnQgZmFsc2UgOiA8ZXJyb3IgZGVzY3I9Iid2b2lkJyB0eXBlIGlzIG5vdCBhbGxvd2VkIGhlcmUiPlN5c3RlbS5vdXQucHJpbnRsbigpPC9lcnJvcj47CisKKyAgICBhc3NlcnQgPGVycm9yIGRlc2NyPSJJbmNvbXBhdGlibGUgdHlwZXMuIEZvdW5kOiAnaW50JywgcmVxdWlyZWQ6ICdib29sZWFuJyI+MDwvZXJyb3I+OworICAgIGFzc2VydCA8ZXJyb3IgZGVzY3I9IkluY29tcGF0aWJsZSB0eXBlcy4gRm91bmQ6ICdjaGFyJywgcmVxdWlyZWQ6ICdib29sZWFuJyI+J2EnPC9lcnJvcj47CisgICAgYXNzZXJ0IDxlcnJvciBkZXNjcj0iSW5jb21wYXRpYmxlIHR5cGVzLiBGb3VuZDogJ2phdmEubGFuZy5TdHJpbmcnLCByZXF1aXJlZDogJ2Jvb2xlYW4nIj4iIjwvZXJyb3I+OyAKKyAgICBhc3NlcnQgPGVycm9yIGRlc2NyPSJJbmNvbXBhdGlibGUgdHlwZXMuIEZvdW5kOiAndm9pZCcsIHJlcXVpcmVkOiAnYm9vbGVhbiciPmYoKTwvZXJyb3I+OworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmcvQXNzaWduVG9GaW5hbC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmcvQXNzaWduVG9GaW5hbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIwNDlhYmMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZy9Bc3NpZ25Ub0ZpbmFsLmphdmEKQEAgLTAsMCArMSw3MiBAQAorLy8gYXNzaWduIHRvIGZpbmFsCitpbXBvcnQgamF2YS5pby4qOworaW1wb3J0IGphdmEubmV0Lio7CitwdWJsaWMgY2xhc3MgYTIxICB7CisgIGZpbmFsIGludCBmaTsKKyAgeworICAgZmkgPSA0OworICB9CisgIHZvaWQgZjEoaW50IGkpIHsKKyAgICBmaW5hbCBpbnQgaiA9IDQ7CisgICAgPGVycm9yIGRlc2NyPSJDYW5ub3QgYXNzaWduIGEgdmFsdWUgdG8gZmluYWwgdmFyaWFibGUgJ2onIj5qID0gMzwvZXJyb3I+OworICAgIAorICB9CisgIHZvaWQgZjIoZmluYWwgaW50IGkpIHsKKyAgICBmaW5hbCBpbnQgaiA9IDQ7CisgICAgPGVycm9yIGRlc2NyPSJDYW5ub3QgYXNzaWduIGEgdmFsdWUgdG8gZmluYWwgdmFyaWFibGUgJ2knIj5pID0gMzwvZXJyb3I+OworICAgIAorICB9CisgIHZvaWQgZjMoIGludCBpcCkgeworICAgIDxlcnJvciBkZXNjcj0iQ2Fubm90IGFzc2lnbiBhIHZhbHVlIHRvIGZpbmFsIHZhcmlhYmxlICdmaSciPmZpID0gMzwvZXJyb3I+OworICAgIGZvciAoZmluYWwgaW50IGkgPSAwOyBpPDM7IDxlcnJvciBkZXNjcj0iQ2Fubm90IGFzc2lnbiBhIHZhbHVlIHRvIGZpbmFsIHZhcmlhYmxlICdpJyI+aSsrPC9lcnJvcj4pIHsKKyAgICAgIGludCBrID0gNDsgIAorICAgIH0KKyAgICBmaW5hbCBpbnQgaTEgPSAwOworICAgIDxlcnJvciBkZXNjcj0iQ2Fubm90IGFzc2lnbiBhIHZhbHVlIHRvIGZpbmFsIHZhcmlhYmxlICdpMSciPmkxKys8L2Vycm9yPjsKKyAgICA8ZXJyb3IgZGVzY3I9IkNhbm5vdCBhc3NpZ24gYSB2YWx1ZSB0byBmaW5hbCB2YXJpYWJsZSAnaTEnIj4tLWkxPC9lcnJvcj47CisgICAgaW50IGkyID0gLWkxICsgfmkxOworICAgIGZpbmFsIGludCBqID0gKDxlcnJvciBkZXNjcj0iQ2Fubm90IGFzc2lnbiBhIHZhbHVlIHRvIGZpbmFsIHZhcmlhYmxlICdqJyI+aj0wPC9lcnJvcj4pID09IDEgfHwgaj09MCA/IDkgOiBqOworICB9CisKKyAgc3RhdGljIGZpbmFsIGJvb2xlYW4gREVCVUcgPSBmYWxzZTsKKyAgdm9pZCBmNCgpIHsKKyAgICBpZiAoREVCVUcgJiYgKGZpIDwgMyB8fCBmaSA+NCkpIHJldHVybjsKKyAgfQorfQorY2xhc3MgQiBleHRlbmRzIGEyMSB7CisgIHB1YmxpYyBCKCkgeworICAgIDxlcnJvciBkZXNjcj0iQ2Fubm90IGFzc2lnbiBhIHZhbHVlIHRvIGZpbmFsIHZhcmlhYmxlICdmaSciPmZpID0gMDwvZXJyb3I+OworICB9CisgIHZvaWQgZigpIHsKKyAgICAgZmluYWwgSW50ZWdlciBpOworICAgICBuZXcgUnVubmFibGUoKSB7CisgICAgICAgICBwdWJsaWMgdm9pZCBydW4oKSB7CisgICAgICAgICAgICAgPGVycm9yIGRlc2NyPSJDYW5ub3QgYXNzaWduIGEgdmFsdWUgdG8gZmluYWwgdmFyaWFibGUgJ2knIj5pID0gbmV3IEludGVnZXIoNCk8L2Vycm9yPjsKKyAgICAgICAgIH0KKyAgICAgfTsKKyAgfQorfQorCitjbGFzcyBhMjFfMiB7CisgIGZpbmFsIGludCBpOworICBhMjFfMigpIHsKKyAgICBpID0gMDsKKyAgICBuZXcgUnVubmFibGUoKSB7CisgICAgICBwdWJsaWMgdm9pZCBydW4oKSB7CisgICAgICAgIDxlcnJvciBkZXNjcj0iQ2Fubm90IGFzc2lnbiBhIHZhbHVlIHRvIGZpbmFsIHZhcmlhYmxlICdpJyI+aSA9IDA8L2Vycm9yPjsKKyAgICAgIH0KKyAgICB9OworICB9Cit9CisKK2NsYXNzIEZvbyB7CisgIHByaXZhdGUgZmluYWwgRm9vIG5leHQ7CisKKyAgcHVibGljIEZvbyhGb28gcHJldmlvdXMpIHsKKyAgICB0aGlzLm5leHQgPSBudWxsOworCisgICAgaWYgKHByZXZpb3VzICE9IG51bGwpIHsKKyAgICAgIDxlcnJvciBkZXNjcj0iQ2Fubm90IGFzc2lnbiBhIHZhbHVlIHRvIGZpbmFsIHZhcmlhYmxlICduZXh0JyI+cHJldmlvdXMubmV4dCA9IHRoaXM8L2Vycm9yPjsKKyAgICB9CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nL0Fzc2lnbm1lbnRDb21wYXRpYmxlLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZy9Bc3NpZ25tZW50Q29tcGF0aWJsZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUyZjZiNDQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZy9Bc3NpZ25tZW50Q29tcGF0aWJsZS5qYXZhCkBAIC0wLDAgKzEsNDYgQEAKKy8vLyBhc3NpZ25tZW50IGNvbXBhdGlibGUgdHlwZXMKK2ltcG9ydCBqYXZhLmlvLio7CitpbXBvcnQgamF2YS5uZXQuKjsKK3B1YmxpYyBjbGFzcyBhICB7CisgIGZpbmFsIGludCBGSSA9IDI7CisgIGZpbmFsIGludCBGSUJJRyA9IDIwMDAwMDAwMDsKKworCisgIHZvaWQgZigpIHsKKyAgICAvLyBub3QgbWFya2VkOiBPSywgYXMgbGl0ZXJhbCB2YWx1ZSBpcyBpbiBieXRlLXJhbmdlCisgICAgYnl0ZSBiMSA9IDE7CisKKyAgICAvLyBtYXJrZWQ6IE9LLCBhcyBsaXRlcmFsIHZhbHVlIGlzIG91dCBvZiBieXRlLXJhbmdlIGFuZCBkb2VzIG5vdCBjb21waWxlCisgICAgPGVycm9yIGRlc2NyPSJJbmNvbXBhdGlibGUgdHlwZXMuIEZvdW5kOiAnaW50JywgcmVxdWlyZWQ6ICdieXRlJyI+Ynl0ZSBiMiA9IDEwMDA7PC9lcnJvcj4KKyAgIAorICAgIC8vIG1hcmtlZDogT0ssIGFzIGNoYXItdmFsdWUgY2Fubm90IGJlIGRldGVybWluZWQgYW5kIGRvZXMgbm90IGNvbXBpbGUKKyAgICBjaGFyIGMgPSAwOworICAgIDxlcnJvciBkZXNjcj0iSW5jb21wYXRpYmxlIHR5cGVzLiBGb3VuZDogJ2NoYXInLCByZXF1aXJlZDogJ2J5dGUnIj5ieXRlIGIzID0gYzs8L2Vycm9yPgorCisgICAgLy8gbWFya2VkOiBPSywgYXMgbGl0ZXJhbCBjaGFyLXZhbHVlIGlzIG91dCBvZiBieXRlLXJhbmdlIGFuZCBkb2VzIG5vdCBjb21waWxlCisgICAgPGVycm9yIGRlc2NyPSJJbmNvbXBhdGlibGUgdHlwZXMuIEZvdW5kOiAnY2hhcicsIHJlcXVpcmVkOiAnYnl0ZSciPmJ5dGUgYjQgPSAnXHUyMEFDJzs8L2Vycm9yPgorCisgICAgPGVycm9yIGRlc2NyPSJJbmNvbXBhdGlibGUgdHlwZXMuIEZvdW5kOiAnaW50JywgcmVxdWlyZWQ6ICdieXRlJyI+Ynl0ZSBiNSA9ICdcbicgLSA0ICsgMTgwMDs8L2Vycm9yPgorICAgIC8vIGxpdGVyYWwgY2hhci12YWx1ZSBpcyBpbiBieXRlLXJhbmdlIGFuZCBjb21waWxlcyBmaW5lCisgICAgYnl0ZSBiNiA9ICdcdTAwN0YnOworICAgIGJ5dGUgYjc9KHNob3J0KSAwOworICAgIDxlcnJvciBkZXNjcj0iSW5jb21wYXRpYmxlIHR5cGVzLiBGb3VuZDogJ2xvbmcnLCByZXF1aXJlZDogJ2J5dGUnIj5ieXRlIGI4ID0gKGxvbmcpMDs8L2Vycm9yPgorCisgICAgPGVycm9yIGRlc2NyPSJJbmNvbXBhdGlibGUgdHlwZXMuIEZvdW5kOiAnZG91YmxlJywgcmVxdWlyZWQ6ICdmbG9hdCciPmZsb2F0IGYxID0gNzcuMzs8L2Vycm9yPgorICAgIGZsb2F0IGYyID0gNzcuM0Y7CisKKyAgICBzaG9ydCBzMSA9IDEgKyBGSTsKKyAgICA8ZXJyb3IgZGVzY3I9IkluY29tcGF0aWJsZSB0eXBlcy4gRm91bmQ6ICdpbnQnLCByZXF1aXJlZDogJ3Nob3J0JyI+c2hvcnQgczIgPSAxMDAwMDAwOzwvZXJyb3I+CisgICAgc2hvcnQgczMgPSAnRicgJSBGSUJJRzsKKworICAgIGNoYXIgYzEgPSAwOworICAgIDxlcnJvciBkZXNjcj0iSW5jb21wYXRpYmxlIHR5cGVzLiBGb3VuZDogJ2ludCcsIHJlcXVpcmVkOiAnY2hhciciPmNoYXIgYzIgPSAtMSArIEZJQklHOzwvZXJyb3I+CisgICAgY2hhciBjMz0oYnl0ZSkgMDsKKyAgICBjaGFyIGM0PShzaG9ydCkgMDsKKyAgICA8ZXJyb3IgZGVzY3I9IkluY29tcGF0aWJsZSB0eXBlcy4gRm91bmQ6ICdsb25nJywgcmVxdWlyZWQ6ICdjaGFyJyI+Y2hhciBjNSA9IDBMOzwvZXJyb3I+CisKKyAgICBpbnQgaTE9J2QnOworICAgIDxlcnJvciBkZXNjcj0iSW5jb21wYXRpYmxlIHR5cGVzLiBGb3VuZDogJ2xvbmcnLCByZXF1aXJlZDogJ2ludCciPmludCBpMiA9IDFMOzwvZXJyb3I+CisKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nL0JyZWFrT3V0c2lkZS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmcvQnJlYWtPdXRzaWRlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjJmZDA1YgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nL0JyZWFrT3V0c2lkZS5qYXZhCkBAIC0wLDAgKzEsNTAgQEAKKy8vIGJyZWFrIG91dHNpZGUgb2YKK3B1YmxpYyBjbGFzcyBhIHsKKworICB2b2lkIGYoKSB7CisgICAgPGVycm9yIGRlc2NyPSJCcmVhayBvdXRzaWRlIHN3aXRjaCBvciBsb29wIj5icmVhazs8L2Vycm9yPgorICAgIHdoaWxlICh0cnVlKSB7CisgICAgICBicmVhazsKKyAgICB9CisgICAgZG8geyBicmVhazsgfSB3aGlsZSAodHJ1ZSk7CisgICAgc3dpdGNoICgxKSB7CisgICAgICBjYXNlIDE6IGJyZWFrOworICAgIH0KKyAgICBmb3IgKDs7KSB7CisgICAgICBicmVhazsKKyAgICB9CisKKyAgICBmb3IgKDs7KSB7CisgICAgICBuZXcgZmYoKSB7CisgICAgICAgIHZvaWQgZigpIHsgCisgICAgICAgICAgPGVycm9yIGRlc2NyPSJCcmVhayBvdXRzaWRlIHN3aXRjaCBvciBsb29wIj5icmVhazs8L2Vycm9yPgorICAgICAgICB9CisgICAgICB9OworICAgICAgYnJlYWs7CisgICAgfQorCisKKyAgICB3aGlsZSAodHJ1ZSkgeworICAgICAgY2xhc3MgcyB7CisgICAgICAgeworICAgICAgICAgPGVycm9yIGRlc2NyPSJCcmVhayBvdXRzaWRlIHN3aXRjaCBvciBsb29wIj5icmVhazs8L2Vycm9yPgorICAgICAgIH0KKyAgICAgIH0KKyAgICAgIGJyZWFrOworICAgIH0KKworICAgIGRvIHsKKyAgICAgIGNsYXNzIHMgeworICAgICAgIHsKKyAgICAgICAgIDxlcnJvciBkZXNjcj0iQnJlYWsgb3V0c2lkZSBzd2l0Y2ggb3IgbG9vcCI+YnJlYWs7PC9lcnJvcj4KKyAgICAgICB9CisgICAgICB9CisgICAgICBicmVhazsKKyAgICB9IHdoaWxlICh0cnVlKTsKKworICB9Cit9CisKK2NsYXNzIGZmIHsKKyAKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nL0NhbkhhdmVCb2R5LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZy9DYW5IYXZlQm9keS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNkYjdkMTkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZy9DYW5IYXZlQm9keS5qYXZhCkBAIC0wLDAgKzEsMTYgQEAKK2Fic3RyYWN0IHB1YmxpYyBjbGFzcyBhMSB7CisgIDxlcnJvciBkZXNjcj0iQWJzdHJhY3QgbWV0aG9kcyBjYW5ub3QgaGF2ZSBhIGJvZHkiPmFic3RyYWN0IHZvaWQgZigpPC9lcnJvcj4ge30KKyAgPGVycm9yIGRlc2NyPSJOYXRpdmUgbWV0aG9kcyBjYW5ub3QgaGF2ZSBhIGJvZHkiPm5hdGl2ZSB2b2lkIGZmKCk8L2Vycm9yPiB7fQorCisgIHZvaWQgZjIoKSB7CisgICAgbmV3IGlpKCkgeworICAgICAgcHVibGljIGludCBpaWYoaW50IGkpIHsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgICB9CisgICAgfTsKKyAgfQorfQorCitpbnRlcmZhY2UgaWkgeworICA8ZXJyb3IgZGVzY3I9IkludGVyZmFjZSBtZXRob2RzIGNhbm5vdCBoYXZlIGJvZHkiPmludCBpaWYoaW50IGkpIHRocm93cyBFeGNlcHRpb248L2Vycm9yPiB7IHJldHVybiAyOyB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZy9DYXN0RnJvbVZvaWQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nL0Nhc3RGcm9tVm9pZC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ5ZWE5YzkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZy9DYXN0RnJvbVZvaWQuamF2YQpAQCAtMCwwICsxLDggQEAKK2NsYXNzIEsgeworICAgIHB1YmxpYyBLIGZvbygpIHsKKyAgICAgICAgcmV0dXJuIDxlcnJvciBkZXNjcj0iSW5jb252ZXJ0aWJsZSB0eXBlczsgY2Fubm90IGNhc3QgJ3ZvaWQnIHRvICdLJyI+KEspIGJhcigpPC9lcnJvcj47CisgICAgfQorCisgICAgcHJpdmF0ZSB2b2lkIGJhcigpIHsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmcvQ2FzdHMuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nL0Nhc3RzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODYyMjIyNAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nL0Nhc3RzLmphdmEKQEAgLTAsMCArMSwxMDIgQEAKKy8vIGNhc3RzCitwdWJsaWMgY2xhc3MgYSAgeworIHZvaWQgZihpIGlpKSB7CisgICBib29sZWFuIGI7CisgICBiID0gPGVycm9yIGRlc2NyPSJJbmNvbnZlcnRpYmxlIHR5cGVzOyBjYW5ub3QgY2FzdCAnaW50JyB0byAnYSciPjIgaW5zdGFuY2VvZiBhPC9lcnJvcj47CisgICBiID0gPGVycm9yIGRlc2NyPSJJbmNvbnZlcnRpYmxlIHR5cGVzOyBjYW5ub3QgY2FzdCAnbnVsbCcgdG8gJ2ludCciPm51bGwgaW5zdGFuY2VvZiBpbnQ8L2Vycm9yPjsKKyAgIGIgPSA8ZXJyb3IgZGVzY3I9IkluY29udmVydGlibGUgdHlwZXM7IGNhbm5vdCBjYXN0ICdjMycgdG8gJ2phdmEubGFuZy5Cb29sZWFuJyI+KGMzKW51bGwgaW5zdGFuY2VvZiBCb29sZWFuPC9lcnJvcj47CisKKyAgIGIgPSBpaSBpbnN0YW5jZW9mIGk7CisgICBiID0gKChjMilpaSkgaW5zdGFuY2VvZiBjNDsKKyAgIGIgPSBudWxsIGluc3RhbmNlb2YgYTsKKyAgIGIgPSBpaSBpbnN0YW5jZW9mIGMzOworICAgYiA9IEJvb2xlYW4udmFsdWVPZigidHJ1ZSIpIGluc3RhbmNlb2YgQm9vbGVhbjsKKyAgIGIgPSBuZXcgTG9uZygzKSBpbnN0YW5jZW9mIE51bWJlcjsKKyAgIGIgPSB0aGlzIGluc3RhbmNlb2YgYTsKKyAgIGIgPSBpaSBpbnN0YW5jZW9mIGE7CisgICBiID0gdGhpcyBpbnN0YW5jZW9mIGk7CisKKworICAgLy8gY2FzdHMKKyAgIGMyIGMyaSA9IG51bGw7CisgICBjMyBjM2kgPSBudWxsOworICAgYzQgYzRpID0gbnVsbDsKKyAgIE9iamVjdCBvOworICAgYzRpID0gPGVycm9yIGRlc2NyPSJJbmNvbnZlcnRpYmxlIHR5cGVzOyBjYW5ub3QgY2FzdCAnYScgdG8gJ2M0JyI+KGM0KSB0aGlzPC9lcnJvcj47CisgICBvICAgPSA8ZXJyb3IgZGVzY3I9IkluY29udmVydGlibGUgdHlwZXM7IGNhbm5vdCBjYXN0ICdjMicgdG8gJ2Jvb2xlYW4nIj4oYm9vbGVhbikgYzJpPC9lcnJvcj47CisgICBvICAgPSA8ZXJyb3IgZGVzY3I9IkluY29udmVydGlibGUgdHlwZXM7IGNhbm5vdCBjYXN0ICdjMycgdG8gJ2phdmEubGFuZy5JbnRlZ2VyJyI+KEludGVnZXIpIGMzaTwvZXJyb3I+OworICAgbyAgID0gPGVycm9yIGRlc2NyPSJJbmNvbnZlcnRpYmxlIHR5cGVzOyBjYW5ub3QgY2FzdCAnYzInIHRvICdhJyI+KGEpIGMyaTwvZXJyb3I+OworICAgbyAgID0gPGVycm9yIGRlc2NyPSJJbmNvbnZlcnRpYmxlIHR5cGVzOyBjYW5ub3QgY2FzdCAnYzMnIHRvICdpbnQnIj4oaW50KSBjM2k8L2Vycm9yPjsKKworICAgbyA9IChhKSBpaTsKKyAgIG8gPSAoaSkgYzRpOyAvL2Nhc3QgdG8gaW50ZXJmYWNlCisgICBvID0gKGMzKSBjMmk7CisgICBvID0gKGMzKSBjM2k7CisgICBvID0gKGMzKSBjNGk7CisgICBvID0gKE9iamVjdCkgaWk7CisgICBvID0gKGl1bnJlbGF0ZWQpIGlpOworICAgbyA9IChpdW5yZWxhdGVkKSBjMmk7CisgICBvID0gKGM0KSBjMmk7CisgICBvID0gKGM0KSBpaTsKKyAgIG8gICA9IDxlcnJvciBkZXNjcj0iSW5jb252ZXJ0aWJsZSB0eXBlczsgY2Fubm90IGNhc3QgJ2knIHRvICdjNSciPihjNSkgaWk8L2Vycm9yPjsKKworICAgaW50W10gYWkgPSBudWxsOworICAgbyA9IDxlcnJvciBkZXNjcj0iSW5jb252ZXJ0aWJsZSB0eXBlczsgY2Fubm90IGNhc3QgJ2ludFtdJyB0byAnYnl0ZVtdJyI+KGJ5dGVbXSlhaTwvZXJyb3I+OworICAgbyA9IDxlcnJvciBkZXNjcj0iSW5jb252ZXJ0aWJsZSB0eXBlczsgY2Fubm90IGNhc3QgJ2ludFtdJyB0byAnZG91YmxlW10nIj4oZG91YmxlW10pYWk8L2Vycm9yPjsKKyAgIGMzW10gYWMzaSA9IG51bGw7CisgICBvID0gYWMzaTsKKyAgIG8gPSAoYzRbXSlhYzNpOworICAgbyA9IChpW10pYWMzaTsKKyAgIE9iamVjdFtdIHJlc3VsdHMgPSBudWxsOworICAgaW50IGluZGV4ID0gKDxlcnJvciBkZXNjcj0iSW5jb252ZXJ0aWJsZSB0eXBlczsgY2Fubm90IGNhc3QgJ2phdmEubGFuZy5PYmplY3RbXScgdG8gJ2phdmEubGFuZy5JbnRlZ2VyJyI+KEludGVnZXIpIHJlc3VsdHM8L2Vycm9yPikuaW50VmFsdWUoKTsKKworCisgICAvLyBhcnJheXMgYW5kIFNlcmlhbGl6YWJsZS9DbG9uZWFibGUvT2JqZWN0CisgICBpbnRbXSBhaTIgPSAoaW50W10pbzsKKyAgIENsb25lYWJsZSBjbG9uZWFibGUgPSBudWxsOworICAgYWkyID0gKGludFtdKSBjbG9uZWFibGU7CisgICBqYXZhLmlvLlNlcmlhbGl6YWJsZSBzZXJpYWxpemFibGUgPSBudWxsOworICAgYWkyID0gKGludFtdKSBzZXJpYWxpemFibGU7CisKKyB9CisgCit9CisKK2ludGVyZmFjZSBpdW5yZWxhdGVkIHt9CitpbnRlcmZhY2UgaSB7fQorY2xhc3MgYzIgaW1wbGVtZW50cyBpIHsKKyBwdWJsaWMgYzIoKSB7fQorIHB1YmxpYyB2b2lkIGYoKSB7fQorIHByb3RlY3RlZCB2b2lkIGcoKSB7fQorfQorCitjbGFzcyBjMyBleHRlbmRzIGMyIHsKKyBwcm90ZWN0ZWQgYzMoKSB7fQorIHByaXZhdGUgaW50IGcoaW50IGspIHsgcmV0dXJuIDA7IH0KK30KKworZmluYWwgY2xhc3MgYzQgZXh0ZW5kcyBjMyB7CisgcHJpdmF0ZSBjNCgpIHsKKyAgICAgICAgaW50W10gYT1uZXcgaW50WzNdOworICAgICAgICBDbG9uZWFibGUgcz1hOyAKKyAgICAgICAgamF2YS5pby5TZXJpYWxpemFibGUgc3MgPSBhOworIH0KK30KK2ZpbmFsIGNsYXNzIGM1IHt9CisKKy8vIGNsYXNoaW5nIGludGVyZmFjZXMKK2ludGVyZmFjZSBBIHsKKyAgICB2b2lkIGcoKTsKK30KK2ludGVyZmFjZSBCIHsKKyAgICBpbnQgZygpOworfQoraW50ZXJmYWNlIEJCIGV4dGVuZHMgQiB7Cit9CitjbGFzcyBGb28geworICAgIHZvaWQgZihBIGEpIHsKKyAgICAgICAgQiBiID0gPGVycm9yIGRlc2NyPSJJbmNvbnZlcnRpYmxlIHR5cGVzOyBjYW5ub3QgY2FzdCAnQScgdG8gJ0InIj4oQikgYTwvZXJyb3I+OworICAgICAgICBCQiBiMiA9IDxlcnJvciBkZXNjcj0iSW5jb252ZXJ0aWJsZSB0eXBlczsgY2Fubm90IGNhc3QgJ0EnIHRvICdCQiciPihCQikgYTwvZXJyb3I+OworICAgICAgICBBIGEyID0gPGVycm9yIGRlc2NyPSJJbmNvbnZlcnRpYmxlIHR5cGVzOyBjYW5ub3QgY2FzdCAnQkInIHRvICdBJyI+KEEpIGIyPC9lcnJvcj47CisgICAgfQorfSAgICAgICAKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nL0NhdGNoVHlwZS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmcvQ2F0Y2hUeXBlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzRlMGZiNAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nL0NhdGNoVHlwZS5qYXZhCkBAIC0wLDAgKzEsMzIgQEAKKy8vIGV4Y2VwdGlvbiBqYXZhLmxhbmcuRXhjZXB0aW9uIGhhcyBhbHJlYWR5IGJlZW4gY2F1Z2h0LyBpbGxlZ2FsIGNhdGNoIHR5cGUKKworaW1wb3J0IGphdmEuaW8uRU9GRXhjZXB0aW9uOworaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CitjbGFzcyBGb28geworICAgIHZvaWQgZigpIHsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgfSBjYXRjaCAoVGhyb3dhYmxlIHQpIHsKKyAgICAgICAgfSBjYXRjaCAoPGVycm9yIGRlc2NyPSJFeGNlcHRpb24gJ2phdmEubGFuZy5FeGNlcHRpb24nIGhhcyBhbHJlYWR5IGJlZW4gY2F1Z2h0Ij5FeGNlcHRpb248L2Vycm9yPiBlKSB7CisgICAgICAgIH0KKyAgICAgICAgdHJ5IHsKKyAgICAgICAgfSBjYXRjaCAoUnVudGltZUV4Y2VwdGlvbiBlKSB7CisgICAgICAgIH0gY2F0Y2ggKDxlcnJvciBkZXNjcj0iRXhjZXB0aW9uICdqYXZhLmxhbmcuTnVsbFBvaW50ZXJFeGNlcHRpb24nIGhhcyBhbHJlYWR5IGJlZW4gY2F1Z2h0Ij5OdWxsUG9pbnRlckV4Y2VwdGlvbjwvZXJyb3I+ICBlKSB7CisgICAgICAgIH0KKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIHRocm93IG5ldyBFT0ZFeGNlcHRpb24oKTsKKyAgICAgICAgfSBjYXRjaCAoSU9FeGNlcHRpb24gZSkgeworICAgICAgICB9IGNhdGNoICg8ZXJyb3IgZGVzY3I9IkV4Y2VwdGlvbiAnamF2YS5pby5FT0ZFeGNlcHRpb24nIGhhcyBhbHJlYWR5IGJlZW4gY2F1Z2h0Ij5FT0ZFeGNlcHRpb248L2Vycm9yPiAgZSkgeworICAgICAgICB9CisKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgfQorICAgICAgICBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgfQorICAgICAgICBjYXRjaCAoPGVycm9yIGRlc2NyPSJFeGNlcHRpb24gJ2phdmEubGFuZy5FeGNlcHRpb24nIGhhcyBhbHJlYWR5IGJlZW4gY2F1Z2h0Ij5FeGNlcHRpb248L2Vycm9yPiBlKSB7CisgICAgICAKKyAgICAgICAgfQorICAgIH0KKworCit9CisKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nL0NhdGNoVW5rbm93bk1ldGhvZC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmcvQ2F0Y2hVbmtub3duTWV0aG9kLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGE5MGI4YjIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZy9DYXRjaFVua25vd25NZXRob2QuamF2YQpAQCAtMCwwICsxLDExIEBACitwdWJsaWMgY2xhc3MgTXlDbGFzcyB7CisKKyBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisgICAgdHJ5IHsKKyAgICAgIDxlcnJvcj51bmtub3duTWV0aG9kPC9lcnJvcj4oKTsgLyogUmVkIGNvZGUgLSBhcyBleHBlY3RlZCAgKi8KKyAgICB9IGNhdGNoIChqYXZhLmlvLklPRXhjZXB0aW9uIGUpIHsgLyogVW53YW50ZWQgcmVkIHNxdWlnZ2x5IGxpbmUgICovCisgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOworICAgIH0KKyAgfQorCit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZy9DbGFzc2ljUmV0aHJvdy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmcvQ2xhc3NpY1JldGhyb3cuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZThlNzhiCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmcvQ2xhc3NpY1JldGhyb3cuamF2YQpAQCAtMCwwICsxLDE1MyBAQAorY2xhc3MgQyB7CisgIHN0YXRpYyBjbGFzcyBFIGV4dGVuZHMgRXhjZXB0aW9uIHsgfQorICBzdGF0aWMgY2xhc3MgRTEgZXh0ZW5kcyBFIHsgfQorICBzdGF0aWMgY2xhc3MgRTIgZXh0ZW5kcyBFIHsgfQorICBzdGF0aWMgY2xhc3MgRXJyIGV4dGVuZHMgRXJyb3IgeyB9CisKKyAgdm9pZCBtMSgpIHsKKyAgICB0cnkgeworICAgICAgdGhyb3cgbmV3IEUxKCk7CisgICAgfQorICAgIGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgICAgdHJ5IHsKKyAgICAgICAgLy8gdGhyb3dzIEV4Y2VwdGlvbiBiZWZvcmUgSkRLNworICAgICAgICA8ZXJyb3IgZGVzY3I9IlVuaGFuZGxlZCBleGNlcHRpb246IGphdmEubGFuZy5FeGNlcHRpb24iPnRocm93IGU7PC9lcnJvcj4KKyAgICAgIH0KKyAgICAgIGNhdGNoIChFMiBlMikgeyB9CisgICAgfQorICB9CisKKyAgdm9pZCBtMigpIHsKKyAgICB0cnkgeworICAgICAgdGhyb3cgbmV3IEUxKCk7CisgICAgfQorICAgIGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgICAgdHJ5IHsKKyAgICAgICAgZSA9IG5ldyBFMSgpOyAvLyBubyBlZmZlY3QgYmVmb3JlIEpESzcKKyAgICAgICAgPGVycm9yIGRlc2NyPSJVbmhhbmRsZWQgZXhjZXB0aW9uOiBqYXZhLmxhbmcuRXhjZXB0aW9uIj50aHJvdyBlOzwvZXJyb3I+CisgICAgICB9CisgICAgICBjYXRjaCAoRTIgZTIpIHsgfQorICAgIH0KKyAgfQorCisgIHZvaWQgbTMoYm9vbGVhbiBmKSB0aHJvd3MgRTEsIEUyIHsKKyAgICB0cnkgeworICAgICAgaWYgKGYpCisgICAgICAgIHRocm93IG5ldyBFMSgpOworICAgICAgZWxzZQorICAgICAgICB0aHJvdyBuZXcgRTIoKTsKKyAgICB9CisgICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgICAvLyB0aHJvd3MgRXhjZXB0aW9uIGJlZm9yZSBKREs3CisgICAgICA8ZXJyb3IgZGVzY3I9IlVuaGFuZGxlZCBleGNlcHRpb246IGphdmEubGFuZy5FeGNlcHRpb24iPnRocm93IGU7PC9lcnJvcj4KKyAgICB9CisgIH0KKworICB2b2lkIG00KGJvb2xlYW4gZikgdGhyb3dzIEUxLCBFMiB7CisgICAgdHJ5IHsKKyAgICAgIGlmIChmKQorICAgICAgICB0aHJvdyBuZXcgRTEoKTsKKyAgICAgIGVsc2UKKyAgICAgICAgdGhyb3cgbmV3IEUyKCk7CisgICAgfQorICAgIGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgICAgZSA9IG5ldyBFMigpOyAvLyBubyBlZmZlY3QgYmVmb3JlIEpESzcKKyAgICAgIDxlcnJvciBkZXNjcj0iVW5oYW5kbGVkIGV4Y2VwdGlvbjogamF2YS5sYW5nLkV4Y2VwdGlvbiI+dGhyb3cgZTs8L2Vycm9yPgorICAgIH0KKyAgfQorCisgIHZvaWQgbTUoYm9vbGVhbiBmKSB0aHJvd3MgRSB7CisgICAgdHJ5IHsKKyAgICAgIGlmIChmKQorICAgICAgICB0aHJvdyBuZXcgRTEoKTsKKyAgICAgIGVsc2UgaWYgKCFmKQorICAgICAgICB0aHJvdyBuZXcgRTIoKTsKKyAgICAgIGVsc2UKKyAgICAgICAgdGhyb3cgKFRocm93YWJsZSluZXcgRSgpOworICAgIH0KKyAgICBjYXRjaCAoRTEgZTEpIHsgfQorICAgIGNhdGNoIChmaW5hbCBFeGNlcHRpb24gZSkgeworICAgICAgLy8gdGhyb3dzIEV4Y2VwdGlvbgorICAgICAgPGVycm9yIGRlc2NyPSJVbmhhbmRsZWQgZXhjZXB0aW9uOiBqYXZhLmxhbmcuRXhjZXB0aW9uIj50aHJvdyBlOzwvZXJyb3I+CisgICAgfQorICAgIGNhdGNoIChUaHJvd2FibGUgdCkgeyB9CisgIH0KKworICB2b2lkIG02KGJvb2xlYW4gZikgdGhyb3dzIEUyIHsKKyAgICB0cnkgeworICAgICAgaWYgKGYpCisgICAgICAgIHRocm93IG5ldyBFMSgpOworICAgICAgZWxzZSBpZiAoIWYpCisgICAgICAgIHRocm93IG5ldyBFMigpOworICAgIH0KKyAgICBjYXRjaCAoRTEgZTEpIHsgfQorICAgIGNhdGNoIChmaW5hbCBFeGNlcHRpb24gZSkgeworICAgICAgLy8gdGhyb3dzIEV4Y2VwdGlvbiBiZWZvcmUgSkRLNworICAgICAgPGVycm9yIGRlc2NyPSJVbmhhbmRsZWQgZXhjZXB0aW9uOiBqYXZhLmxhbmcuRXhjZXB0aW9uIj50aHJvdyBlOzwvZXJyb3I+CisgICAgfQorICB9CisKKyAgdm9pZCBtNygpIHsKKyAgICB0cnkgeworICAgICAgdGhyb3cgbmV3IEUxKCk7CisgICAgfQorICAgIGNhdGNoIChFIGUpIHsKKyAgICAgIHRyeSB7CisgICAgICAgIHRocm93IGU7CisgICAgICB9CisgICAgICBjYXRjaCAoRSB4KSB7CisgICAgICAgIC8vIG5vIGNoYWluZWQgZXhjZXB0aW9uIHR5cGUgZXZhbHVhdGlvbgorICAgICAgICA8ZXJyb3IgZGVzY3I9IlVuaGFuZGxlZCBleGNlcHRpb246IEMuRSI+dGhyb3cgeDs8L2Vycm9yPgorICAgICAgfQorICAgIH0KKyAgfQorCisgIHZvaWQgbTgoKSB7CisgICAgdHJ5IHsKKyAgICAgIHRocm93IG5ldyBFMSgpOworICAgIH0KKyAgICBjYXRjaCAoRSBlKSB7CisgICAgICBFIHggPSBlOworICAgICAgLy8gbm8gY2hhaW5lZCBleGNlcHRpb24gdHlwZSBldmFsdWF0aW9uCisgICAgICA8ZXJyb3IgZGVzY3I9IlVuaGFuZGxlZCBleGNlcHRpb246IEMuRSI+dGhyb3cgeDs8L2Vycm9yPgorICAgIH0KKyAgfQorCisgIHZvaWQgbTlfMSgpIHsKKyAgICB0cnkgeworICAgICAgU3lzdGVtLm91dC5wcmludGxuKCk7CisgICAgfQorICAgIGNhdGNoIChUaHJvd2FibGUgdCkgeworICAgICAgLy8gdGhyb3dzIFRocm93YWJsZSBiZWZvcmUgSkRLNworICAgICAgPGVycm9yIGRlc2NyPSJVbmhhbmRsZWQgZXhjZXB0aW9uOiBqYXZhLmxhbmcuVGhyb3dhYmxlIj50aHJvdyB0OzwvZXJyb3I+CisgICAgfQorICB9CisKKyAgdm9pZCBtOV8yKCkgeworICAgIHRyeSB7CisgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oKTsKKyAgICB9CisgICAgY2F0Y2ggKEVycm9yIGUpIHsKKyAgICAgIHRocm93IGU7CisgICAgfQorICB9CisKKyAgdm9pZCBtOV8zKCkgeworICAgIHRyeSB7CisgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oKTsKKyAgICB9CisgICAgY2F0Y2ggKEVyciBlKSB7CisgICAgICB0aHJvdyBlOworICAgIH0KKyAgfQorCisgIHZvaWQgbTlfNCgpIHsKKyAgICB0cnkgeworICAgICAgaWYgKGZhbHNlKSB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigpOworICAgIH0KKyAgICBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICAgIC8vIHRocm93cyBFeGNlcHRpb24gYmVmb3JlIEpESzcKKyAgICAgIDxlcnJvciBkZXNjcj0iVW5oYW5kbGVkIGV4Y2VwdGlvbjogamF2YS5sYW5nLkV4Y2VwdGlvbiI+dGhyb3cgZTs8L2Vycm9yPgorICAgIH0KKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nL0NvbXB1dGVDb25zdGFudC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmcvQ29tcHV0ZUNvbnN0YW50LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDNhNzk0ZAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nL0NvbXB1dGVDb25zdGFudC5qYXZhCkBAIC0wLDAgKzEsMjAgQEAKK2NsYXNzIEFfQ1J7CisgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IENPTlNUID0gPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ0NPTlNUWCciPkNPTlNUWDwvZXJyb3I+OworCisgIHsKKyAgICBzd2l0Y2goMCl7CisgICAgICBjYXNlIDxlcnJvciBkZXNjcj0iQ29uc3RhbnQgZXhwcmVzc2lvbiByZXF1aXJlZCI+Q09OU1Q8L2Vycm9yPjoKKyAgICB9CisgIH0KK30KKworY2xhc3MgQUNsYXNzIHsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgU1BBQ0UgPSAiICI7CisgICAgY2xhc3MgcyB7CisgICAgICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBSRVRfVkFMID0KKyAgICAgICAgICAgICAgICAgICAgIlJvZ2VyIiArCisgICAgICAgICAgICAgICAgICAgIFNQQUNFICsKKyAgICAgICAgICAgICAgICAgICAgU1BBQ0UgKyAvLyBjb21tZW50IGFuZCB1bmNvbW1lbnQgdGhpcyBsaW5lCisgICAgICAgICAgICAgICAgICAgICIgRG9kZ2VyIjsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmcvQ3RyQ2FsbElzRmlyc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nL0N0ckNhbGxJc0ZpcnN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTMwNTlmYgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nL0N0ckNhbGxJc0ZpcnN0LmphdmEKQEAgLTAsMCArMSw2MyBAQAorLy8gY2FsbCB0byBzdXBlciBtdXN0IGJlIGZpcnN0CitwdWJsaWMgY2xhc3MgYSB7CisgYSgpIHt9CisgYShpbnQgaSkge30KK30KKworY2xhc3MgYiBleHRlbmRzIGEgeworIGIoKSB7CisgICBpbnQgaSA9IDM7CisgICA8ZXJyb3IgZGVzY3I9IkNhbGwgdG8gJ3N1cGVyKCknIG11c3QgYmUgZmlyc3Qgc3RhdGVtZW50IGluIGNvbnN0cnVjdG9yIGJvZHkiPnN1cGVyKCk8L2Vycm9yPjsKKyB9CisgYihpbnQgaSkgeworICAgdGhpcygpOworICAgPGVycm9yIGRlc2NyPSJDYWxsIHRvICdzdXBlcigpJyBtdXN0IGJlIGZpcnN0IHN0YXRlbWVudCBpbiBjb25zdHJ1Y3RvciBib2R5Ij5zdXBlcigyKTwvZXJyb3I+OworIH0KKyBiKGNoYXIgaSkgeworICAgc3VwZXIoNCk7CisgICA8ZXJyb3IgZGVzY3I9IkNhbGwgdG8gJ3RoaXMoKScgbXVzdCBiZSBmaXJzdCBzdGF0ZW1lbnQgaW4gY29uc3RydWN0b3IgYm9keSI+dGhpcygpPC9lcnJvcj47CisgfQorCisgYihTdHJpbmcgcykgeworICAgdHJ5IHsKKyAgICAgPGVycm9yIGRlc2NyPSJDYWxsIHRvICdzdXBlcigpJyBtdXN0IGJlIGZpcnN0IHN0YXRlbWVudCBpbiBjb25zdHJ1Y3RvciBib2R5Ij5zdXBlcigyKTwvZXJyb3I+OworICAgfQorICAgZmluYWxseSB7CisgICB9CisgfQorIGIoU3RyaW5nIHMsIGludCBpKSB7CisgICB7CisgICAgIDxlcnJvciBkZXNjcj0iQ2FsbCB0byAnc3VwZXIoKScgbXVzdCBiZSBmaXJzdCBzdGF0ZW1lbnQgaW4gY29uc3RydWN0b3IgYm9keSI+c3VwZXIoMik8L2Vycm9yPjsKKyAgIH0KKyB9CisKKyAgICB2b2lkIGYoKSB7CisgICAgICA8ZXJyb3IgZGVzY3I9IkNhbGwgdG8gJ3N1cGVyKCknIG11c3QgYmUgZmlyc3Qgc3RhdGVtZW50IGluIGNvbnN0cnVjdG9yIGJvZHkiPnN1cGVyKCk8L2Vycm9yPjsKKyAgICB9CisgICAgdm9pZCBnKCkgeworICAgICAgPGVycm9yIGRlc2NyPSJDYWxsIHRvICd0aGlzKCknIG11c3QgYmUgZmlyc3Qgc3RhdGVtZW50IGluIGNvbnN0cnVjdG9yIGJvZHkiPnRoaXMoKTwvZXJyb3I+OworICAgIH0KKworfQorY2xhc3MgTyBleHRlbmRzIDxlcnJvciBkZXNjcj0iTm8gZW5jbG9zaW5nIGluc3RhbmNlIG9mIHR5cGUgJ0EnIGlzIGluIHNjb3BlIj5BLkI8L2Vycm9yPgoreworICBwdWJsaWMgTyhBIGEpCisgIHsKKyAgICAgIGludCBpID0gMDsKKyAgICAgIDxlcnJvciBkZXNjcj0iQ2FsbCB0byAnYS5zdXBlcigpJyBtdXN0IGJlIGZpcnN0IHN0YXRlbWVudCBpbiBjb25zdHJ1Y3RvciBib2R5Ij5hLnN1cGVyKCk8L2Vycm9yPjsKKyAgfQorICBwdWJsaWMgTyhBIGEsaW50IGkpCisgIHsKKyAgICAgIGEuc3VwZXIoKTsKKyAgICAgIGkgPSAwOworICB9Cit9CisKK2NsYXNzIEEKK3sKKyAgY2xhc3MgQgorICB7CisgICAgICBjbGFzcyBDe30KKyAgfQorCit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZy9DeWNsaWNJbmhlcml0YW5jZS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmcvQ3ljbGljSW5oZXJpdGFuY2UuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNDFiNTkyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmcvQ3ljbGljSW5oZXJpdGFuY2UuamF2YQpAQCAtMCwwICsxLDQwIEBACisvLyBjeWNsaWMgaW5oZXJ0aWFuY2UKK2ltcG9ydCBqYXZhLmlvLio7CitpbXBvcnQgamF2YS5uZXQuKjsKKworPGVycm9yIGRlc2NyPSJDeWNsaWMgaW5oZXJpdGFuY2UgaW52b2x2aW5nICdGb28nIj5jbGFzcyBGb28gZXh0ZW5kcyBGb288L2Vycm9yPiB7Cit9CisKKworaW50ZXJmYWNlIEZvbzEgZXh0ZW5kcyA8ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAnQmFyJyI+QmFyPC9lcnJvcj4geworICAgIGludGVyZmFjZSBCYXIgeworICAgIH0KK30KKworCis8ZXJyb3IgZGVzY3I9IkN5Y2xpYyBpbmhlcml0YW5jZSBpbnZvbHZpbmcgJ2MxJyI+Y2xhc3MgYzEgZXh0ZW5kcyBjMjwvZXJyb3I+IHt9Cis8ZXJyb3IgZGVzY3I9IkN5Y2xpYyBpbmhlcml0YW5jZSBpbnZvbHZpbmcgJ2MyJyI+Y2xhc3MgYzIgZXh0ZW5kcyBjMTwvZXJyb3I+IHt9CisKKworCitjbGFzcyBhMSB7CisgICAgY2xhc3MgYiBleHRlbmRzIGExIHsKKyAgICB9Cit9CisKKworY2xhc3MgYSB7Cisgc3RhdGljIGNsYXNzIHNiIGV4dGVuZHMgYSB7CisgICBjbGFzcyBjIGV4dGVuZHMgYSB7CisgICAgIHZvaWQgZigpIHsKKyAgICAgICBjbGFzcyBkIGV4dGVuZHMgYSB7CisgICAgICAgfQorICAgICB9CisgICB9CisgfQorIGNsYXNzIGIgZXh0ZW5kcyBzYiB7CisgIGNsYXNzIGMgZXh0ZW5kcyBhIHsKKyAgfQorIH0KK30KKyAgICAgICAgIApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nL0RlZmF1bHRQYWNrYWdlQ2xhc3NJblN0YXRpY0ltcG9ydC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmcvRGVmYXVsdFBhY2thZ2VDbGFzc0luU3RhdGljSW1wb3J0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWZhZGIzNwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nL0RlZmF1bHRQYWNrYWdlQ2xhc3NJblN0YXRpY0ltcG9ydC5qYXZhCkBAIC0wLDAgKzEsMTIgQEAKK2ltcG9ydCBzdGF0aWMgPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ015Q29uc3RhbnRzJyI+TXlDb25zdGFudHM8L2Vycm9yPi4qOworaW1wb3J0IDxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICdNeUNvbnN0YW50cyciPk15Q29uc3RhbnRzPC9lcnJvcj47CisKK3B1YmxpYyBjbGFzcyBNeUNsaWVudAoreworICAgIHByaXZhdGUgaW50IGZpZWxkID0gTXlDb25zdGFudHMuQ09OU1RBTlQ7Cit9CisKK2NsYXNzIE15Q29uc3RhbnRzCit7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQ09OU1RBTlQgPSAxOworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nL0RlcHJlY2F0ZWQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nL0RlcHJlY2F0ZWQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ODQ4MmMzCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmcvRGVwcmVjYXRlZC5qYXZhCkBAIC0wLDAgKzEsODkgQEAKKy8vIGRlcHJlY2F0ZWQKKworY2xhc3MgYSAgeworICAvKioKKyAgKiBAZGVwcmVjYXRlZAorICAqLworICB2b2lkIGYoKSB7fQorCisgIC8qKgorICAqIEBkZXByZWNhdGVkCisgICovCisgIGludCBkZXA7CisgIGludCBub3RkZXA7CisKKyAgLyoqCisgICogQGRlcHJlY2F0ZWQKKyAgKi8KKyAgYShpbnQgaSxpbnQgaixpbnQgaykgeworICAgICBuZXcgPHdhcm5pbmcgZGVzY3I9IidhKGludCwgaW50LCBpbnQpJyBpcyBkZXByZWNhdGVkIj5hPC93YXJuaW5nPihrK2kraiw8d2FybmluZyBkZXNjcj0iJ2RlcCcgaXMgZGVwcmVjYXRlZCI+ZGVwPC93YXJuaW5nPixub3RkZXApOworICB9Cit9CisKK2NsYXNzIGIgZXh0ZW5kcyBhIHsKKyAgdm9pZCA8d2FybmluZyBkZXNjcj0iT3ZlcnJpZGVzIGRlcHJlY2F0ZWQgbWV0aG9kIGluICdhJyI+Zjwvd2FybmluZz4oKSB7CisgICAgc3VwZXIuPHdhcm5pbmcgZGVzY3I9IidmKCknIGlzIGRlcHJlY2F0ZWQiPmY8L3dhcm5pbmc+KCk7CisgIH0KKworICBiKCkgeworICAgIDx3YXJuaW5nIGRlc2NyPSInYihpbnQpJyBpcyBkZXByZWNhdGVkIj50aGlzPC93YXJuaW5nPigxKTsKKyAgfQorCisgIC8qKgorICAqIEBkZXByZWNhdGVkCisgICovCisgIGIoaW50IGkpIHsKKyAgICA8d2FybmluZyBkZXNjcj0iJ2EoaW50LCBpbnQsIGludCknIGlzIGRlcHJlY2F0ZWQiPnN1cGVyPC93YXJuaW5nPigwLDAsaSk7CisgICAgU3lzdGVtLm91dC5wcmludChpKTsKKyAgfQorfQorCitjbGFzcyBjIGV4dGVuZHMgYiB7CisgIC8vIGIuZiBpcyBub3QgZGVwcmVjYXRlZCAKKyAgdm9pZCBmKCkge30KK30KKworaW50ZXJmYWNlIGkxIHsKKyAgLyoqCisgICogQGRlcHJlY2F0ZWQKKyAgKi8KKyAgdm9pZCBmKCk7Cit9CithYnN0cmFjdCBjbGFzcyBhYzEgeworICAvKioKKyAgKiBAZGVwcmVjYXRlZAorICAqLworICBwdWJsaWMgYWJzdHJhY3Qgdm9pZCBmKCk7Cit9CisKK2NsYXNzIGNpMSBleHRlbmRzIGFjMSBpbXBsZW1lbnRzIGkxIHsKKyAvLyBubyBjaGFuY2Ugbm90IHRvIGltcGxlbWVudCBpdAorIHB1YmxpYyB2b2lkIGYoKSB7fQorfQorCitjbGFzcyBBYWEgeworICBwdWJsaWMgQWFhKFN0cmluZyBzKSB7CisgICAgU3lzdGVtLm91dC5wcmludGxuKHMpOworICB9CisKKyAgLyoqCisgICAqIEBkZXByZWNhdGVkCisgICAqLworICBwdWJsaWMgQWFhKCkge30KKworICBwdWJsaWMgdm9pZCBmb28oKSB7CisgICAgbmV3IEFhYSgiYXNkYXNkYWQiKSB7fTsKKyAgfQorfQorCitjbGFzcyBBbm9ueW0geworICAgIC8qKgorICAgICAqIEBkZXByZWNhdGVkCisgICAgICovCisgICAgcHVibGljIEFub255bShTdHJpbmcgc3NzKSB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihzc3MpOworICAgIH0KKyAgICBwdWJsaWMgdm9pZCBmb28oKSB7CisgICAgICAgIG5ldyA8d2FybmluZyBkZXNjcj0iJ0Fub255bShqYXZhLmxhbmcuU3RyaW5nKScgaXMgZGVwcmVjYXRlZCI+QW5vbnltPC93YXJuaW5nPigiYXNkYXNkIikge307CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmcvRG90QmVmb3JlRGVjbC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmcvRG90QmVmb3JlRGVjbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA1OGI0MDUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZy9Eb3RCZWZvcmVEZWNsLmphdmEKQEAgLTAsMCArMSw3IEBACitwdWJsaWMgY2xhc3MgQV9EQkQgeworICB7CisgICAgaW50IGZpZWxkID0gMDsKKyAgICBmaWVsZC4KKyAgICA8ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAnU3RyaW5nJyI+U3RyaW5nPC9lcnJvcj4gcyA9IG51bGw7CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nL0R1cGxpY2F0ZUNsYXNzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZy9EdXBsaWNhdGVDbGFzcy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY0ZjQ3NjYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZy9EdXBsaWNhdGVDbGFzcy5qYXZhCkBAIC0wLDAgKzEsMTIgQEAKKy8vIGR1cGxpY2F0ZXMgaW4gZXh0ZW5kcworCitjbGFzcyBhIHsKK30KKworY2xhc3MgYiBleHRlbmRzIDxlcnJvciBkZXNjcj0iRHVwbGljYXRlIGNsYXNzOiAnYSciPmE8L2Vycm9yPiwgPGVycm9yIGRlc2NyPSJEdXBsaWNhdGUgY2xhc3M6ICdhJyI+YTwvZXJyb3I+IHsKK30KKworaW50ZXJmYWNlIGkge30KKworY2xhc3MgYyBpbXBsZW1lbnRzIDxlcnJvciBkZXNjcj0iRHVwbGljYXRlIGNsYXNzOiAnaSciPmk8L2Vycm9yPiwgPGVycm9yIGRlc2NyPSJEdXBsaWNhdGUgY2xhc3M6ICdpJyI+aTwvZXJyb3I+IHsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZy9EdXBsaWNhdGVDbGFzc01ldGhvZC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmcvRHVwbGljYXRlQ2xhc3NNZXRob2QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNWQ3NGViZQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nL0R1cGxpY2F0ZUNsYXNzTWV0aG9kLmphdmEKQEAgLTAsMCArMSw3NSBAQAorcHVibGljIGNsYXNzIGEgeworICA8ZXJyb3IgZGVzY3I9IidmKGludCknIGlzIGFscmVhZHkgZGVmaW5lZCBpbiAnYSciPnZvaWQgZihpbnQgaSk8L2Vycm9yPiB7IH0KKyAgPGVycm9yIGRlc2NyPSInZihpbnQpJyBpcyBhbHJlYWR5IGRlZmluZWQgaW4gJ2EnIj52b2lkIGYoaW50IGkpPC9lcnJvcj4geworCisgICAgbmV3IGMxKCkgeworICAgICAgPGVycm9yIGRlc2NyPSInZjEoKScgaXMgYWxyZWFkeSBkZWZpbmVkIGluICdBbm9ueW1vdXMgY2xhc3MgZGVyaXZlZCBmcm9tIGMxJyI+cHVibGljIHZvaWQgZjEoKTwvZXJyb3I+IHt9CisgICAgICA8ZXJyb3IgZGVzY3I9IidmMSgpJyBpcyBhbHJlYWR5IGRlZmluZWQgaW4gJ0Fub255bW91cyBjbGFzcyBkZXJpdmVkIGZyb20gYzEnIj5wdWJsaWMgdm9pZCBmMSgpPC9lcnJvcj4ge30KKyAgICB9OworICB9Cit9CithYnN0cmFjdCBjbGFzcyBjMSB7CisgIGFic3RyYWN0IHZvaWQgZjEoKTsKK30KKworaW50ZXJmYWNlIGlpIHsKKyAgYWJzdHJhY3Qgdm9pZCBmMSgpOworICB2b2lkIGYyKCk7Cit9CisKKzxlcnJvciBkZXNjcj0iRHVwbGljYXRlIGNsYXNzOiAnYSciPmNsYXNzIGE8L2Vycm9yPiB7Cit9CisKK2NsYXNzIEZvbyB7CisgICAgdm9pZCBmKCkgeworICAgICAgICBjbGFzcyBCYXIgeworICAgICAgICB9CisgICAgICAgIDxlcnJvciBkZXNjcj0iRHVwbGljYXRlIGNsYXNzOiAnQmFyJyI+Y2xhc3MgQmFyPC9lcnJvcj4geworICAgICAgICB9CisgICAgfQorfQorCisKK2NsYXNzIGMyIHsKKyAgY2xhc3MgYzMgeworICAgIHZvaWQgZigpIHsKKyAgICAgIDxlcnJvciBkZXNjcj0iRHVwbGljYXRlIGNsYXNzOiAnYzInIj5jbGFzcyBjMjwvZXJyb3I+IHsKKyAgICAgIH0KKyAgICB9CisgIH0KK30KKworCitjbGFzcyBjb250IHsKKyAgICAgICAgY2xhc3MgQiB7CisgICAgICAgIH0KKyAgICAgICAgeworICAgICAgICAgICAgY2xhc3MgQiB7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgPGVycm9yIGRlc2NyPSJEdXBsaWNhdGUgY2xhc3M6ICdCJyI+Y2xhc3MgQjwvZXJyb3I+IHsKKyAgICAgICAgfQorfQorY2xhc3MgY29udDIgeworICAgICAgICB7CisgICAgICAgICAgICBjbGFzcyBCIHsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBjbGFzcyBCIHsKKyAgICAgICAgfQorfQorY2xhc3Mgb2sgeworICAgICAgICBjbGFzcyBMb2NhbHt9OworICAgICAgICBjbGFzcyBBbm90aGVyTG9jYWwgeworICAgICAgICAgICAgY2xhc3MgTG9jYWwge307CisgICAgICAgICAgICB2b2lkIGJhcigpIHsKKyAgICAgICAgICAgICAgICBjbGFzcyBMb2NhbCB7fTsKKyAgICAgICAgICAgICAgICBMb2NhbCBsOworICAgICAgICAgICAgfQorICAgICAgICB9Cit9CisKK2NsYXNzIG9rMiB7CisgIHB1YmxpYyBvazIoKSB7fQorICBwdWJsaWMgdm9pZCBvazIoKSB7fQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nL0R1cGxpY2F0ZUNsYXNzTWV0aG9kVG9wLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZy9EdXBsaWNhdGVDbGFzc01ldGhvZFRvcC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY0MmUzNTAKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZy9EdXBsaWNhdGVDbGFzc01ldGhvZFRvcC5qYXZhCkBAIC0wLDAgKzEsNzUgQEAKK3B1YmxpYyBjbGFzcyBhIHsKKyAgdm9pZCBmKGludCBpKSB7IH0KKyAgPGVycm9yIGRlc2NyPSInZihpbnQpJyBpcyBhbHJlYWR5IGRlZmluZWQgaW4gJ2EnIj52b2lkIGYoaW50IGkpPC9lcnJvcj4geworCisgICAgbmV3IGMxKCkgeworICAgICAgcHVibGljIHZvaWQgZjEoKSB7fQorICAgICAgPGVycm9yIGRlc2NyPSInZjEoKScgaXMgYWxyZWFkeSBkZWZpbmVkIGluICdBbm9ueW1vdXMgY2xhc3MgZGVyaXZlZCBmcm9tIGMxJyI+cHVibGljIHZvaWQgZjEoKTwvZXJyb3I+IHt9CisgICAgfTsKKyAgfQorfQorYWJzdHJhY3QgY2xhc3MgYzEgeworICBhYnN0cmFjdCB2b2lkIGYxKCk7Cit9CisKK2ludGVyZmFjZSBpaSB7CisgIGFic3RyYWN0IHZvaWQgZjEoKTsKKyAgdm9pZCBmMigpOworfQorCis8ZXJyb3IgZGVzY3I9IkR1cGxpY2F0ZSBjbGFzczogJ2EnIj5jbGFzcyBhPC9lcnJvcj4geworfQorCitjbGFzcyBGb28geworICAgIHZvaWQgZigpIHsKKyAgICAgICAgY2xhc3MgQmFyIHsKKyAgICAgICAgfQorICAgICAgICA8ZXJyb3IgZGVzY3I9IkR1cGxpY2F0ZSBjbGFzczogJ0JhciciPmNsYXNzIEJhcjwvZXJyb3I+IHsKKyAgICAgICAgfQorICAgIH0KK30KKworCitjbGFzcyBjMiB7CisgIGNsYXNzIGMzIHsKKyAgICB2b2lkIGYoKSB7CisgICAgICA8ZXJyb3IgZGVzY3I9IkR1cGxpY2F0ZSBjbGFzczogJ2MyJyI+Y2xhc3MgYzI8L2Vycm9yPiB7CisgICAgICB9CisgICAgfQorICB9Cit9CisKKworY2xhc3MgY29udCB7CisgICAgICAgIGNsYXNzIEIgeworICAgICAgICB9CisgICAgICAgIHsKKyAgICAgICAgICAgIDxlcnJvciBkZXNjcj0iRHVwbGljYXRlIGNsYXNzOiAnQiciPmNsYXNzIEI8L2Vycm9yPiB7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgPGVycm9yIGRlc2NyPSJEdXBsaWNhdGUgY2xhc3M6ICdCJyI+Y2xhc3MgQjwvZXJyb3I+IHsKKyAgICAgICAgfQorfQorY2xhc3MgY29udDIgeworICAgICAgICB7CisgICAgICAgICAgICBjbGFzcyBCIHsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBjbGFzcyBCIHsKKyAgICAgICAgfQorfQorY2xhc3Mgb2sgeworICAgICAgICBjbGFzcyBMb2NhbHt9OworICAgICAgICBjbGFzcyBBbm90aGVyTG9jYWwgeworICAgICAgICAgICAgY2xhc3MgTG9jYWwge307CisgICAgICAgICAgICB2b2lkIGJhcigpIHsKKyAgICAgICAgICAgICAgICBjbGFzcyBMb2NhbCB7fTsKKyAgICAgICAgICAgICAgICBMb2NhbCBsOworICAgICAgICAgICAgfQorICAgICAgICB9Cit9CisKK2NsYXNzIG9rMiB7CisgIHB1YmxpYyBvazIoKSB7fQorICBwdWJsaWMgdm9pZCBvazIoKSB7fQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nL0R1cGxpY2F0ZVN3aXRjaExhYmVscy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmcvRHVwbGljYXRlU3dpdGNoTGFiZWxzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDJmN2M2MjYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZy9EdXBsaWNhdGVTd2l0Y2hMYWJlbHMuamF2YQpAQCAtMCwwICsxLDY2IEBACisvLyBkdXBsaWNhdGUgbGFiZWxzCitpbXBvcnQgamF2YS5pby4qOworaW1wb3J0IGphdmEubmV0Lio7CisKK3B1YmxpYyBjbGFzcyBhICB7CisKKyAgZmluYWwgaW50IEZJID0gNDsKKworICB2b2lkIGYoZmluYWwgaW50IGkpIHsKKyAgICBzd2l0Y2ggKGkpIHsKKyAgICAgIDxlcnJvciBkZXNjcj0iRHVwbGljYXRlIGRlZmF1bHQgbGFiZWwiPmRlZmF1bHQ6PC9lcnJvcj4gYnJlYWs7CisgICAgICBjYXNlIDE6IGJyZWFrOworICAgICAgPGVycm9yIGRlc2NyPSJEdXBsaWNhdGUgZGVmYXVsdCBsYWJlbCI+ZGVmYXVsdDo8L2Vycm9yPiBicmVhazsKKyAgICB9CisKKyAgICBzd2l0Y2ggKGkpIHsKKyAgICAgIGNhc2UgPGVycm9yIGRlc2NyPSJEdXBsaWNhdGUgbGFiZWwgJzEnIj4xPC9lcnJvcj46IGJyZWFrOworICAgICAgY2FzZSA8ZXJyb3IgZGVzY3I9IkR1cGxpY2F0ZSBsYWJlbCAnMSciPjE8L2Vycm9yPjogYnJlYWs7CisgICAgfQorCisgICAgc3dpdGNoIChpKSB7CisgICAgICBjYXNlIDxlcnJvciBkZXNjcj0iRHVwbGljYXRlIGxhYmVsICcxJyI+RkkvMiAtIDE8L2Vycm9yPjogYnJlYWs7CisgICAgICBjYXNlIDxlcnJvciBkZXNjcj0iRHVwbGljYXRlIGxhYmVsICcxJyI+KDEgKyAzNS8xNiklMjwvZXJyb3I+OiBicmVhazsKKyAgICAgIGNhc2UgRkkgLSA4OiBicmVhazsKKyAgICB9CisKKyAgICAgICAgIGZpbmFsIGJ5dGUgYiA9IDEyNzsKKworICAgICAgICAgc3dpdGNoKGkpIHsKKyAgICAgICAgICAgIGNhc2UgPGVycm9yIGRlc2NyPSJEdXBsaWNhdGUgbGFiZWwgJzEyNyciPmI8L2Vycm9yPjoKKyAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiYj0iICsgYiArICI7Iik7CisgICAgICAgICAgICBjYXNlIDxlcnJvciBkZXNjcj0iRHVwbGljYXRlIGxhYmVsICcxMjcnIj4xMjc8L2Vycm9yPjoKKyAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiTXlTd2l0Y2guTXlTd2l0Y2giKTsKKyAgICAgICAgIH0KKworCisgICAgLy8gaW50ZXJuYWxpemUgc3RyaW5ncworICAgIHN3aXRjaCAoMCkgeworICAgICAgICBjYXNlIDA6CisgICAgICAgIGNhc2UgIlw0MTAiID09ICIhMCIgPyAxIDogMDoKKyAgICAgICAgY2FzZSAiIj09IiIrIiIgPyAzIDogMDoKKyAgICB9CisKKyAgICAgICAgc3dpdGNoICgwKSB7CisgICAgICAgIGNhc2UgMDoKKyAgICAgICAgLy9jYXNlIDEuLzAgPT0gRG91YmxlLlBPU0lUSVZFX0lORklOSVRZID8gMSA6IDA6CisKKyAgICAgICAgLy9jYXNlIDEuLzAgPT0gRmxvYXQuUE9TSVRJVkVfSU5GSU5JVFkgPyAyIDogMDoKKworICAgICAgICAvLyBjb21tZW50ZWQgb3V0IHJlZgorICAgICAgICAvLyBkb2VzIG5vdCB3b3JrIHdoZW4gcnVubmluZyB1bmRlciBKUkUKKyAgICAgICAgLy9jYXNlIC0xLi8wID09IERvdWJsZS5ORUdBVElWRV9JTkZJTklUWSA/IDMgOiAwOgorICAgICAgICAvL2Nhc2UgLTEuLzAgPT0gRmxvYXQuTkVHQVRJVkVfSU5GSU5JVFkgPyA0IDogMDoKKyAgICAgICAgLy9jYXNlIERvdWJsZS5QT1NJVElWRV9JTkZJTklUWSA9PSBGbG9hdC5QT1NJVElWRV9JTkZJTklUWSA/IDUgOiAwOgorICAgICAgICAvL2Nhc2UgRG91YmxlLk5FR0FUSVZFX0lORklOSVRZID09IEZsb2F0Lk5FR0FUSVZFX0lORklOSVRZID8gNiA6IDA6CisgICAgICAgIC8vY2FzZSBEb3VibGUuTmFOICE9IEZsb2F0Lk5hTiA/IDcgOiAwOgorICAgICAgICAvL2Nhc2UgSW50ZWdlci5NSU5fVkFMVUUgPT0gLTIuMTQ3NDgzNjQ4ZTkgPyA4IDogMDoKKyAgICAgICAgLy9jYXNlIEludGVnZXIuTUlOX1ZBTFVFID09IC0yLjE0NzQ4MzY1ZTlmID8gOSA6IDA6CisgICAgICAgIC8vY2FzZSBMb25nLk1JTl9WQUxVRSA9PSAtOS4yMjMzNzIwMzY4NTQ3NzZlMTggPyAxMCA6IDA6CisgICAgICAgIC8vY2FzZSBMb25nLk1JTl9WQUxVRSA9PSAtOS4yMjMzNzJlMThmID8gMTEgOiAwOgorCisKKworICAgICAgICB9CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZy9FbmNsb3NpbmdJbnN0YW5jZS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmcvRW5jbG9zaW5nSW5zdGFuY2UuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NWRkNmFjCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmcvRW5jbG9zaW5nSW5zdGFuY2UuamF2YQpAQCAtMCwwICsxLDk3IEBACisvLyBubyBlbmNsb3NpbmcgaW5zdGFuY2Ugd2hlbiBpbmhlcml0aW5nIGlubmVyIGNsYXNzCisKKworY2xhc3MgQTU3IHsKKyAgICBjbGFzcyBYICB7CisgICAgfQorICAgIHZvaWQgZigpIHsKKyAgICAgICAgY2xhc3MgWEwgZXh0ZW5kcyBBNTcuWCB7CisgICAgICAgIH0KKworICAgIH0KKyAgICBjbGFzcyBYWEwgZXh0ZW5kcyBBNTcuWCB7CisgICAgfQorfQorY2xhc3MgQjU3IHsKKyAgICBjbGFzcyBYIGV4dGVuZHMgPGVycm9yIGRlc2NyPSJObyBlbmNsb3NpbmcgaW5zdGFuY2Ugb2YgdHlwZSAnQTU3JyBpcyBpbiBzY29wZSI+QTU3Llg8L2Vycm9yPiB7CisgICAgfQorfQorY2xhc3MgQzU3IGV4dGVuZHMgPGVycm9yIGRlc2NyPSJObyBlbmNsb3NpbmcgaW5zdGFuY2Ugb2YgdHlwZSAnQjU3JyBpcyBpbiBzY29wZSI+QjU3Llg8L2Vycm9yPiB7Cit9CisKKworY2xhc3MgaW5uZXJfaG9sZGVyIHsKKyAgY2xhc3MgaW5uZXIge30KK30KKworcHVibGljIGNsYXNzIEMxXzU3IGV4dGVuZHMgaW5uZXJfaG9sZGVyIHsKKyAgLy8gaW5uZXIgaW5zdGFuY2UgYXZhaWxhYmxlIHRocm91Z2ggaW5oZXJpdGFuY2UKKyAgcHJvdGVjdGVkIGNsYXNzIGMgZXh0ZW5kcyBpbm5lciB7IAorICAgIHByaXZhdGUgY2xhc3MgaWlpIGV4dGVuZHMgaW5uZXIge30KKyAgfQorfQorCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCitjbGFzcyBQYXJlbnRBIHsKKyAgICBjbGFzcyBJbm5lckEgeworCisgICAgfQorfQorCitjbGFzcyBQYXJlbnRCIGV4dGVuZHMgUGFyZW50QSB7CisgICAgc3RhdGljIGNsYXNzIElubmVyQiBleHRlbmRzIDxlcnJvciBkZXNjcj0iTm8gZW5jbG9zaW5nIGluc3RhbmNlIG9mIHR5cGUgJ1BhcmVudEEnIGlzIGluIHNjb3BlIj5Jbm5lckE8L2Vycm9yPiB7CisKKyAgICB9CisgICAgY2xhc3MgSW5uZXJDIGV4dGVuZHMgSW5uZXJBIHsKKworICAgIH0KK30KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworY2xhc3MgYyB7CisgICAgc3RhdGljIGNsYXNzIHMgeworICAgICAgICB2b2lkIGYoKSB7CisgICAgICAgICAgICBPYmplY3QgbyA9IHRoaXM7CisgICAgICAgIH0KKyAgICB9CisgICAgdm9pZCBmKCkge30KK30KKworY2xhc3MgY2MgeworICAgIHN0YXRpYyBjbGFzcyBzYyBleHRlbmRzIGMgeworICAgICAgICB2b2lkIGYoKSB7CisgICAgICAgICAgICBzdXBlci5mKCk7CisgICAgICAgIH0KKyAgICB9Cit9CisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KK2NsYXNzIEEKK3sKKyAgY2xhc3MgQgorICB7CisgICAgICBjbGFzcyBDe30KKyAgfQorfQorY2xhc3MgQUIgZXh0ZW5kcyBBLkIgeworICBBQihBIGEpIHsKKyAgICBhLnN1cGVyKCk7CisgIH0KKyAgQUIoKSB7CisgICAgdGhpcyhuZXcgQSgpKTsKKyAgfQorfQorY2xhc3MgQUJJbGxlZ2FsIGV4dGVuZHMgPGVycm9yIGRlc2NyPSJObyBlbmNsb3NpbmcgaW5zdGFuY2Ugb2YgdHlwZSAnQScgaXMgaW4gc2NvcGUiPkEuQjwvZXJyb3I+IHsKKyAgQUJJbGxlZ2FsKEEgYSkgeworICB9CisgIEFCSWxsZWdhbCgpIHsKKyAgICB0aGlzKG5ldyBBKCkpOworICB9Cit9CisKKworcHVibGljIGNsYXNzIEE0MiB7CisgIGNsYXNzIEIge30KK30KKworY2xhc3MgRDQyIGV4dGVuZHMgQTQyLkIgeworICBENDIoKSB7bmV3IEE0MigpLnN1cGVyKCk7fQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmcvRXhjZXB0aW9uTmV2ZXJUaHJvd24uamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nL0V4Y2VwdGlvbk5ldmVyVGhyb3duLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTE1OGE3NAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nL0V4Y2VwdGlvbk5ldmVyVGhyb3duLmphdmEKQEAgLTAsMCArMSwxMDUgQEAKKy8vIEV4Y2VwdGlvbiBpcyBuZXZlciB0aHJvd24gaW4gbWV0aG9kCisKK2ltcG9ydCBqYXZhLmlvLio7CitpbXBvcnQgamF2YS5zcWwuKjsKKworY2xhc3MgYSB7CisgICAgcHJpdmF0ZSB2b2lkIGYoKSB0aHJvd3MgPHdhcm5pbmcgZGVzY3I9IkV4Y2VwdGlvbiAnamF2YS5pby5JT0V4Y2VwdGlvbicgaXMgbmV2ZXIgdGhyb3duIGluIHRoZSBtZXRob2QiPklPRXhjZXB0aW9uPC93YXJuaW5nPiB7CisgICAgfQorICAgIHB1YmxpYyB2b2lkIHVzZWYoKSB0aHJvd3MgRXhjZXB0aW9uIHsgCisgICAgICAgIGYoKTsgLy9hdm9pZCB1bnVzZWQgZigpCisgICAgfQorCisgICAgcHJpdmF0ZSB2b2lkIGYyKCkgdGhyb3dzIDx3YXJuaW5nIGRlc2NyPSJFeGNlcHRpb24gJ2phdmEuaW8uSU9FeGNlcHRpb24nIGlzIG5ldmVyIHRocm93biBpbiB0aGUgbWV0aG9kIj5JT0V4Y2VwdGlvbjwvd2FybmluZz4geworICAgICAgdHJ5IHsKKyAgICAgICAgdGhyb3cgbmV3IElPRXhjZXB0aW9uKCk7CisgICAgICB9CisgICAgICBmaW5hbGx5IHsKKyAgICAgICAgcmV0dXJuOworICAgICAgfQorICAgIH0KKyAgICBwdWJsaWMgZmluYWwgdm9pZCBmMygpIHRocm93cyA8d2FybmluZyBkZXNjcj0iRXhjZXB0aW9uICdqYXZhLmlvLklPRXhjZXB0aW9uJyBpcyBuZXZlciB0aHJvd24gaW4gdGhlIG1ldGhvZCI+SU9FeGNlcHRpb248L3dhcm5pbmc+IHsKKyAgICB9CisgICAgcHVibGljIHN0YXRpYyB2b2lkIGY0KCkgdGhyb3dzIDx3YXJuaW5nIGRlc2NyPSJFeGNlcHRpb24gJ2phdmEuaW8uSU9FeGNlcHRpb24nIGlzIG5ldmVyIHRocm93biBpbiB0aGUgbWV0aG9kIj5JT0V4Y2VwdGlvbjwvd2FybmluZz4geworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIHVzZWYyKCkgdGhyb3dzIEV4Y2VwdGlvbiB7IAorICAgICAgICBmMigpOyAvL2F2b2lkIHVudXNlZCBmKCkKKyAgICB9CisgICAgcHVibGljIHZvaWQgdXNlZjMoKSB0aHJvd3MgRXhjZXB0aW9uIHsgCisgICAgICAgIGYzKCk7IC8vYXZvaWQgdW51c2VkIGYoKQorICAgIH0KKyAgICBwdWJsaWMgdm9pZCB1c2VmNCgpIHRocm93cyBFeGNlcHRpb24geyAKKyAgICAgICAgZjQoKTsgLy9hdm9pZCB1bnVzZWQgZigpCisgICAgfQorCit9CisKK2ZpbmFsIGNsYXNzIEZpbmFsIHsKKyAgeworICAgICAgbmV3IE9iamVjdCgpIHsKKyAgICAgICAgICB2b2lkIGYoKSB0aHJvd3MgPHdhcm5pbmcgZGVzY3I9IkV4Y2VwdGlvbiAnamF2YS5pby5JT0V4Y2VwdGlvbicgaXMgbmV2ZXIgdGhyb3duIGluIHRoZSBtZXRob2QiPklPRXhjZXB0aW9uPC93YXJuaW5nPiB7fQorICAgICAgfTsKKyAgfQorICAKKyAgdm9pZCBmKCkgdGhyb3dzIDx3YXJuaW5nIGRlc2NyPSJFeGNlcHRpb24gJ2phdmEuaW8uSU9FeGNlcHRpb24nIGlzIG5ldmVyIHRocm93biBpbiB0aGUgbWV0aG9kIj5JT0V4Y2VwdGlvbjwvd2FybmluZz4ge30KKyAgcHVibGljIHZvaWQgZjEoKSB0aHJvd3MgPHdhcm5pbmcgZGVzY3I9IkV4Y2VwdGlvbiAnamF2YS5pby5JT0V4Y2VwdGlvbicgaXMgbmV2ZXIgdGhyb3duIGluIHRoZSBtZXRob2QiPklPRXhjZXB0aW9uPC93YXJuaW5nPiB7fQorICBwcm90ZWN0ZWQgdm9pZCBmMigpIHRocm93cyA8d2FybmluZyBkZXNjcj0iRXhjZXB0aW9uICdqYXZhLmlvLklPRXhjZXB0aW9uJyBpcyBuZXZlciB0aHJvd24gaW4gdGhlIG1ldGhvZCI+SU9FeGNlcHRpb248L3dhcm5pbmc+IHt9Cit9CisKKworCitjbGFzcyBhMSB7CisgICAgYTEoKSB0aHJvd3MgPHdhcm5pbmcgZGVzY3I9IkV4Y2VwdGlvbiAnamF2YS5pby5JT0V4Y2VwdGlvbicgaXMgbmV2ZXIgdGhyb3duIGluIHRoZSBtZXRob2QiPmphdmEuaW8uSU9FeGNlcHRpb248L3dhcm5pbmc+LCA8d2FybmluZyBkZXNjcj0iRXhjZXB0aW9uICdqYXZhLnNxbC5TUUxFeGNlcHRpb24nIGlzIG5ldmVyIHRocm93biBpbiB0aGUgbWV0aG9kIj5TUUxFeGNlcHRpb248L3dhcm5pbmc+eworICAgIH0KKworfQorCitjbGFzcyBiMSBleHRlbmRzIGExIHsKKyAgICBiMSgpIHRocm93cyBJT0V4Y2VwdGlvbiwgU1FMRXhjZXB0aW9uIHsKKyAgICB9Cit9CisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCitwdWJsaWMgY2xhc3MgRm9vVGhyb3cKK3sKKyAgZmluYWwgRm9vIGZvbyA9IG5ldyBGb28oKTsgIC8vIENhbiB0aHJvdyBGb29FeGNlcHRpb24KKyAgRm9vVGhyb3coKSB0aHJvd3MgRm9vIHsKKyAgfQorfQorY2xhc3MgRm9vIGV4dGVuZHMgRXhjZXB0aW9uIHsKKyAgICBwdWJsaWMgRm9vKCkgdGhyb3dzIEZvbyB7CisgICAgICAgIHRocm93IG5ldyBGb28oKTsKKyAgICB9Cit9CisvLy8vLy8vLy8vLy8vLworY2xhc3MgSCB7CisgICAgcHVibGljIEgoKSB0aHJvd3MgRmlsZU5vdEZvdW5kRXhjZXB0aW9uIHsgICAgICAgICAgICAKKyAgICB9CisKKyAgICB7CisgICAgICAgIGlmKHRydWUpIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBGaWxlTm90Rm91bmRFeGNlcHRpb24oKTsKKyAgICAgICAgfQorICAgIH0KK30KKworY2xhc3MgUG9zc2libGVJZGVhQnVncyBpbXBsZW1lbnRzIGphdmEuaW8uU2VyaWFsaXphYmxlIHsKKworICAgIHByaXZhdGUgdm9pZCB3cml0ZU9iamVjdChqYXZhLmlvLk9iamVjdE91dHB1dFN0cmVhbSBvdXQpIHRocm93cyBqYXZhLmlvLklPRXhjZXB0aW9uIHsKKyAgICB9CisKKyAgICBwcml2YXRlIHZvaWQgcmVhZE9iamVjdChqYXZhLmlvLk9iamVjdElucHV0U3RyZWFtIGluKQorICAgICAgICAgICAgdGhyb3dzIGphdmEuaW8uSU9FeGNlcHRpb24sIENsYXNzTm90Rm91bmRFeGNlcHRpb24geworICAgIH0KKworCisgICAgcHJpdmF0ZSBPYmplY3Qgd3JpdGVSZXBsYWNlKCkgdGhyb3dzIGphdmEuaW8uT2JqZWN0U3RyZWFtRXhjZXB0aW9uIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzOworICAgIH0KKworICAgIHByaXZhdGUgT2JqZWN0IHJlYWRSZXNvbHZlKCkgdGhyb3dzIGphdmEuaW8uT2JqZWN0U3RyZWFtRXhjZXB0aW9uIHsKKyAgICAgICAgcmV0dXJuIG51bGw7CisgICAgfQorfQorCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZy9FeGNlcHRpb25OZXZlclRocm93bkluVHJ5LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZy9FeGNlcHRpb25OZXZlclRocm93bkluVHJ5LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzg3ODJjMwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nL0V4Y2VwdGlvbk5ldmVyVGhyb3duSW5UcnkuamF2YQpAQCAtMCwwICsxLDEzIEBACitpbXBvcnQgamF2YS5pby4qOworaW1wb3J0IGphdmEuc3FsLio7CisKKy8vLy8vLy8vLy8vLworY2xhc3MgeCB7CisgIHZvaWQgZigpIHsKKyAgICB0cnkgeworICAgICAgaW50IGkgPSAwOworICAgIH0KKyAgICBjYXRjaCAoPGVycm9yIGRlc2NyPSJFeGNlcHRpb24gJ2phdmEuaW8uSU9FeGNlcHRpb24nIGlzIG5ldmVyIHRocm93biBpbiB0aGUgY29ycmVzcG9uZGluZyB0cnkgYmxvY2siPklPRXhjZXB0aW9uIGU8L2Vycm9yPikgeworICAgIH0KKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nL0V4cGxpY2l0Q29uc3RydWN0b3JJbnZvY2F0aW9uLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZy9FeHBsaWNpdENvbnN0cnVjdG9ySW52b2NhdGlvbi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBiYjUzYmYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZy9FeHBsaWNpdENvbnN0cnVjdG9ySW52b2NhdGlvbi5qYXZhCkBAIC0wLDAgKzEsNDIgQEAKK2NsYXNzIEEgeworICAgIGNsYXNzIFMgeworICAgIH0KKworICAgIGNsYXNzIEMgZXh0ZW5kcyBTIHsKKyAgICAgICAgQyhBIGMpIHsKKyAgICAgICAgICAgIGMuc3VwZXIoKTsKKyAgICAgICAgfQorICAgICAgICBDKEIgYikgeworICAgICAgICAgICAgYi5zdXBlcigpOworICAgICAgICB9CisgICAgfQorfQorY2xhc3MgQiBleHRlbmRzIEEge30KKworY2xhc3MgQTEgeworICAgIHN0YXRpYyBjbGFzcyBTIHsKKyAgICB9CisKKyAgICBjbGFzcyBDIGV4dGVuZHMgUyB7CisgICAgICAgIEMoQTEgYykgeworICAgICAgICAgICAgPGVycm9yIGRlc2NyPSInQTEuUycgaXMgbm90IGFuIGlubmVyIGNsYXNzIj5jPC9lcnJvcj4uc3VwZXIoKTsKKyAgICAgICAgfQorICAgIH0KK30KKworY2xhc3MgQzIgeworICAgIEMyKFN0cmluZyBjKXsKKyAgICAgICAgPGVycm9yIGRlc2NyPSInamF2YS5sYW5nLk9iamVjdCcgaXMgbm90IGFuIGlubmVyIGNsYXNzIj5jPC9lcnJvcj4uc3VwZXIoKTsKKyAgICB9Cit9CisKK2NsYXNzIEEzIHsKKyAgICBjbGFzcyBTIHsKKyAgICB9CisKKyAgICBjbGFzcyBDIGV4dGVuZHMgUyB7CisgICAgICAgIEMoU3RyaW5nIGMpIHsKKyAgICAgICAgICA8ZXJyb3IgZGVzY3I9IkluY29tcGF0aWJsZSB0eXBlcy4gRm91bmQ6ICdqYXZhLmxhbmcuU3RyaW5nJywgcmVxdWlyZWQ6ICdBMyciPmM8L2Vycm9yPi5zdXBlcigpOworICAgICAgICB9CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nL0V4cHJlc3Npb25zSW5Td2l0Y2guamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nL0V4cHJlc3Npb25zSW5Td2l0Y2guamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YzcyNWQ1Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmcvRXhwcmVzc2lvbnNJblN3aXRjaC5qYXZhCkBAIC0wLDAgKzEsNTQgQEAKKy8vIGNvbnN0YW50IGV4cHJlc3Npb25zIGluIHN3aXRjaAorCitpbXBvcnQgamF2YS51dGlsLkRhdGU7CisKK2NsYXNzIGEgeworIGZpbmFsIGludCBmID0gLTM7CisKKyB2b2lkIGYxKCkgeworICAgICAgICBzd2l0Y2ggKDApIHsKKyAgICAgICAgY2FzZSA8ZXJyb3IgZGVzY3I9IkNvbnN0YW50IGV4cHJlc3Npb24gcmVxdWlyZWQiPm5ldyBJbnRlZ2VyKDApLk1BWF9WQUxVRTwvZXJyb3I+OgorICAgICAgICB9CisgICAgICAgIGludCBrPTA7CisgICAgICAgIHN3aXRjaCAoMCkgeworICAgICAgICBjYXNlIDxlcnJvciBkZXNjcj0iQ29uc3RhbnQgZXhwcmVzc2lvbiByZXF1aXJlZCI+ZmFsc2UgPyBrIDogMDwvZXJyb3I+OgorICAgICAgICBjYXNlIDxlcnJvciBkZXNjcj0iQ29uc3RhbnQgZXhwcmVzc2lvbiByZXF1aXJlZCI+dHJ1ZSA/IDEgOiBrPC9lcnJvcj46CisgICAgICAgIH0KKyAgICAgICAgYm9vbGVhbiBiPXRydWU7CisgICAgICAgIHN3aXRjaCAoMCkgeworICAgICAgICBjYXNlIDxlcnJvciBkZXNjcj0iQ29uc3RhbnQgZXhwcmVzc2lvbiByZXF1aXJlZCI+ZmFsc2UgJiYgYiA/IDAgOiAxPC9lcnJvcj46CisgICAgICAgIGNhc2UgPGVycm9yIGRlc2NyPSJDb25zdGFudCBleHByZXNzaW9uIHJlcXVpcmVkIj50cnVlIHx8IGIgPyAyIDogMDwvZXJyb3I+OgorICAgICAgICB9CisgICAgICAgIGZpbmFsIE9iamVjdCBvYmo9IiI7CisgICAgICAgIHN3aXRjaCAoMCkgeworICAgICAgICBjYXNlIDxlcnJvciBkZXNjcj0iQ29uc3RhbnQgZXhwcmVzc2lvbiByZXF1aXJlZCI+b2JqPT0iIiA/IDAgOiAwPC9lcnJvcj46CisgICAgICAgIGNhc2UgPGVycm9yIGRlc2NyPSJDb25zdGFudCBleHByZXNzaW9uIHJlcXVpcmVkIj50aGlzLmY8L2Vycm9yPjoKKyAgICAgICAgfQorCisgICAgaW50IGkgPSAwOworICAgIGZpbmFsIEludGVnZXIgSSA9IG51bGw7CisgICAgc3dpdGNoICgwKSB7CisgICAgICBjYXNlIDxlcnJvciBkZXNjcj0iQ29uc3RhbnQgZXhwcmVzc2lvbiByZXF1aXJlZCI+aTwvZXJyb3I+OgorICAgICAgY2FzZSA8ZXJyb3IgZGVzY3I9IkNvbnN0YW50IGV4cHJlc3Npb24gcmVxdWlyZWQiPkkuTUFYX1ZBTFVFPC9lcnJvcj46CisgICAgICBjYXNlIEludGVnZXIuTUFYX1ZBTFVFOgorICAgIH0KKworIH0KKworIHN0YXRpYyBjbGFzcyBiIHsKKyAgIHN0YXRpYyBmaW5hbCBpbnQgYyA9IDg7CisgfQorIHZvaWQgY2YxKCkgeworICAgIGZpbmFsIGludCBpID0gOTsKKyAgICBzd2l0Y2ggKDApIHsKKyAgICAgIGNhc2UgaToKKyAgICAgIGNhc2UgMis0OgorICAgICAgY2FzZSBmOgorICAgICAgY2FzZSBhLmIuYzoKKyAgICB9CisgICAgICAgIHN3aXRjaCAoMCkgeworICAgICAgICBjYXNlIHRydWUgXiB0cnVlID8gMCA6IDA6CisgICAgICAgIH0KKworIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZy9FeHRlbmRNdWx0aXBsZUNsYXNzZXMuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nL0V4dGVuZE11bHRpcGxlQ2xhc3Nlcy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY2NmIyZWMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZy9FeHRlbmRNdWx0aXBsZUNsYXNzZXMuamF2YQpAQCAtMCwwICsxLDE2IEBACisvLyBtdWx0aXBsZSBleHRlbmQKKworaW1wb3J0IGphdmEuaW8uKjsKKworY2xhc3MgYzEge30KK2NsYXNzIGMyIGltcGxlbWVudHMgU2VyaWFsaXphYmxlLCBFeHRlcm5hbGl6YWJsZSB7CisgICAgcHVibGljIHZvaWQgd3JpdGVFeHRlcm5hbChPYmplY3RPdXRwdXQgb3V0KSB0aHJvd3MgSU9FeGNlcHRpb24geworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIHJlYWRFeHRlcm5hbChPYmplY3RJbnB1dCBpbikgdGhyb3dzIElPRXhjZXB0aW9uLCBDbGFzc05vdEZvdW5kRXhjZXB0aW9uIHsKKyAgICB9Cit9CQorY2xhc3MgYSA8ZXJyb3IgZGVzY3I9IkNsYXNzIGNhbm5vdCBleHRlbmQgbXVsdGlwbGUgY2xhc3NlcyI+ZXh0ZW5kcyBjMSxjMjwvZXJyb3I+IHsKKworCit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmcvRXh0ZW5kc0NsYXVzZS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmcvRXh0ZW5kc0NsYXVzZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVhY2VmOWIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZy9FeHRlbmRzQ2xhdXNlLmphdmEKQEAgLTAsMCArMSwxNyBAQAorY2xhc3MgcyB7CisgIGludCBpOworICBjbGFzcyBpbm4gZXh0ZW5kcyA8ZXJyb3IgZGVzY3I9IkNsYXNzIG5hbWUgZXhwZWN0ZWQiPmk8L2Vycm9yPiB7fQorfQorCitpbnRlcmZhY2UgSUZvbyB7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBkb3VibGUgVU5LTk9XTiA9IC0xOworfQorY2xhc3MgRm9vIGltcGxlbWVudHMgPGVycm9yIGRlc2NyPSJDbGFzcyBuYW1lIGV4cGVjdGVkIj5JRm9vLlVOS05PV048L2Vycm9yPiB7CisgIC8vIGVycm9yIHNob3VsZCBiZSBzaG93biBoZXJlCit9CitjbGFzcyBGb28yIGV4dGVuZHMgPGVycm9yIGRlc2NyPSJDbGFzcyBuYW1lIGV4cGVjdGVkIj5JRm9vLlVOS05PV048L2Vycm9yPiB7CisgIC8vIGVycm9yIHNob3VsZCBiZSBzaG93biBoZXJlCit9CitjbGFzcyBYc3MgaW1wbGVtZW50cyA8ZXJyb3IgZGVzY3I9IkNsYXNzIG5hbWUgZXhwZWN0ZWQiPkludGVnZXIuTUFYX1ZBTFVFPC9lcnJvcj4ge30KK2NsYXNzIFhzczIgZXh0ZW5kcyA8ZXJyb3IgZGVzY3I9IkNsYXNzIG5hbWUgZXhwZWN0ZWQiPkludGVnZXIuTUFYX1ZBTFVFPC9lcnJvcj4ge30KKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmcvRmllbGREb3VibGVJbml0aWFsaXphdGlvbi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmcvRmllbGREb3VibGVJbml0aWFsaXphdGlvbi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMzZGUzN2IKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZy9GaWVsZERvdWJsZUluaXRpYWxpemF0aW9uLmphdmEKQEAgLTAsMCArMSwxMTggQEAKKy8vIGZpZWxkcyBkb3VibGUgaW5pdGlhbGl6YXRpb24KK2ltcG9ydCBqYXZhLmlvLio7CitpbXBvcnQgamF2YS5uZXQuKjsKK2NsYXNzIEZvbyB7CisgICAgZmluYWwgaW50IGs7CisgICAgZmluYWwgaW50IGZmID0gNTsKKyAgICBGb28oaW50IGkpIHsKKyAgICAgICAgPGVycm9yIGRlc2NyPSJWYXJpYWJsZSAnaycgbWlnaHQgYWxyZWFkeSBoYXZlIGJlZW4gYXNzaWduZWQgdG8iPms8L2Vycm9yPiA9MTsKKyAgICB9CisgICAgeworICAgICAgICBrPTA7CisgICAgfQorfQorCitjbGFzcyBjMiB7CisgICAgc3RhdGljIGZpbmFsIGludCBrOworICAgIHN0YXRpYyB7CisgICAgICAgIGs9MDsKKyAgICB9CisgICAgYzIoKSB7CisgICAgICBpbnQgaSA9IGs7CisgICAgfQorICAgIHN0YXRpYyB7CisgICAgICAgPGVycm9yIGRlc2NyPSJWYXJpYWJsZSAnaycgbWlnaHQgYWxyZWFkeSBoYXZlIGJlZW4gYXNzaWduZWQgdG8iPms8L2Vycm9yPiA9MTsKKyAgICB9Cit9CisKK2NsYXNzIGMzIHsKKyAgICBmaW5hbCBpbnQgazsKKyAgICB7CisgICAgICAgIGs9MDsKKyAgICB9CisgICAgYzMoKSB7CisgICAgICBpbnQgaSA9IGs7CisgICAgfQorICAgIHsKKyAgICAgICA8ZXJyb3IgZGVzY3I9IlZhcmlhYmxlICdrJyBtaWdodCBhbHJlYWR5IGhhdmUgYmVlbiBhc3NpZ25lZCB0byI+azwvZXJyb3I+ID0xOworICAgIH0KK30KKworY2xhc3MgYzQgeworICAgIGZpbmFsIGludCBrOworICAgIHsKKyAgICAgICAgaz0wOworICAgIH0KKyAgICBjNChpbnQgaSkgeworICAgICAgaWYgKGZhbHNlKSAKKyAgICAgICAgPGVycm9yIGRlc2NyPSJWYXJpYWJsZSAnaycgbWlnaHQgYWxyZWFkeSBoYXZlIGJlZW4gYXNzaWduZWQgdG8iPms8L2Vycm9yPiA9MTsKKyAgICB9CisgICAgYzQoKSB7CisgICAgICB0aGlzKDApOworICAgICAgPGVycm9yIGRlc2NyPSJWYXJpYWJsZSAnaycgbWlnaHQgYWxyZWFkeSBoYXZlIGJlZW4gYXNzaWduZWQgdG8iPms8L2Vycm9yPiA9MTsKKyAgICB9Cit9CisvLyByZWRpcmVjdGVkIGN0cnMKK2NsYXNzIGM1IHsKKyAgICA8ZXJyb3IgZGVzY3I9IlZhcmlhYmxlICdrJyBtaWdodCBub3QgaGF2ZSBiZWVuIGluaXRpYWxpemVkIj5maW5hbCBpbnQgazwvZXJyb3I+OworICAgIGM1KGludCBpKSB7CisgICAgICBrID0xOworICAgIH0KKyAgICBjNSgpIHsKKyAgICAgIHRoaXMoMCk7CisgICAgICA8ZXJyb3IgZGVzY3I9IlZhcmlhYmxlICdrJyBtaWdodCBhbHJlYWR5IGhhdmUgYmVlbiBhc3NpZ25lZCB0byI+azwvZXJyb3I+ID0xOworICAgIH0KKworCisgICAgYzUoY2hhciBjKSB7CisgICAgfQorICAgIGM1KGludCBpLCBpbnQgaikgeworICAgICAgdGhpcygnYycpOworICAgICAgayA9IDU7CisgICAgfQorICAgIGM1KFN0cmluZyBzKSB7CisgICAgICB0aGlzKDAsMCk7CisgICAgICA8ZXJyb3IgZGVzY3I9IlZhcmlhYmxlICdrJyBtaWdodCBhbHJlYWR5IGhhdmUgYmVlbiBhc3NpZ25lZCB0byI+azwvZXJyb3I+ID0xOworICAgIH0KK30KKworY2xhc3MgYzYgeworICAgIGZpbmFsIGludCBpOworICAgIGM2KCkgeworICAgICAgICB0aGlzKDApOworICAgIH0KKyAgICBjNihpbnQgaSkgeworICAgICAgICB0aGlzKDAsMCk7CisgICAgfQorICAgIGM2KGludCBrLCBpbnQgbCkgeworICAgICAgICBpID0gazsKKyAgICB9Cit9CisKKworCisvLyBtdWx0aXBsZSBpbml0YWxpemVycworY2xhc3MgYzcgeworIHByaXZhdGUgZmluYWwgU3RyaW5nIHg7CisgeworICAgeCA9ICJIZWxsbyI7CisgfQorCisgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgeTsKKyB7CisgICB5ID0geDsgCisgfQorCisgcHJpdmF0ZSBzdGF0aWMgaW50IGk7CisgeworICAgaW50IGogPSAwOworIH0KKworIHN0YXRpYyB7CisgICBpID0gOTsKKyB9CisKKyB7CisgICA8ZXJyb3IgZGVzY3I9IlZhcmlhYmxlICd5JyBtaWdodCBhbHJlYWR5IGhhdmUgYmVlbiBhc3NpZ25lZCB0byI+eTwvZXJyb3I+ID0gIiIraTsKKyB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZy9GaW5hbEZpZWxkSW5pdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmcvRmluYWxGaWVsZEluaXQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xN2JkMjlhCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmcvRmluYWxGaWVsZEluaXQuamF2YQpAQCAtMCwwICsxLDIyMyBAQAorLy8gZmluYWwgRmllbGRzIGluaXRpYWxpemF0aW9uCitpbXBvcnQgamF2YS5pby4qOworaW1wb3J0IGphdmEubmV0Lio7CitpbXBvcnQgamF2YS5hd3QuZXZlbnQuKjsKKworcHVibGljIGNsYXNzIGEgIHsKKyAgLyoqCisgICAqIGphdmFkb2Mgc2hvdWxkIG5vdCBiZSBoaWdobGlnaHRlZAorICAgKi8gCisgIDxlcnJvciBkZXNjcj0iVmFyaWFibGUgJ2phdmFEb2NlZCcgbWlnaHQgbm90IGhhdmUgYmVlbiBpbml0aWFsaXplZCI+ZmluYWwgaW50IGphdmFEb2NlZDwvZXJyb3I+OworCisgIDxlcnJvciBkZXNjcj0iVmFyaWFibGUgJ3NmaTEnIG1pZ2h0IG5vdCBoYXZlIGJlZW4gaW5pdGlhbGl6ZWQiPnN0YXRpYyBmaW5hbCBpbnQgc2ZpMTwvZXJyb3I+OworICA8ZXJyb3IgZGVzY3I9IlZhcmlhYmxlICdzZmkyJyBtaWdodCBub3QgaGF2ZSBiZWVuIGluaXRpYWxpemVkIj5zdGF0aWMgZmluYWwgaW50IHNmaTI8L2Vycm9yPjsKKyAgPGVycm9yIGRlc2NyPSJWYXJpYWJsZSAnZmkxJyBtaWdodCBub3QgaGF2ZSBiZWVuIGluaXRpYWxpemVkIj5maW5hbCBpbnQgZmkxPC9lcnJvcj47CisgIDxlcnJvciBkZXNjcj0iVmFyaWFibGUgJ2ZpMicgbWlnaHQgbm90IGhhdmUgYmVlbiBpbml0aWFsaXplZCI+ZmluYWwgaW50IGZpMjwvZXJyb3I+OworCisgIGNsYXNzIGlubmVyIHsKKyAgICA8ZXJyb3IgZGVzY3I9IlZhcmlhYmxlICdmaWknIG1pZ2h0IG5vdCBoYXZlIGJlZW4gaW5pdGlhbGl6ZWQiPmZpbmFsIGludCBmaWk8L2Vycm9yPjsKKyAgfQorICBmaW5hbCBpbnQgZmkzOworICBmaW5hbCBpbnQgZmk0OworCisKKyAgc3RhdGljIGZpbmFsIGludCBjc2ZpMSA9IDA7CisgIHN0YXRpYyBmaW5hbCBpbnQgY3NmaTIgPSBjc2ZpMSArIDEzIC8gNTsKKyAgc3RhdGljIGZpbmFsIGludCBjc2ZpMzsgCisgIHN0YXRpYyB7CisgICBpZiAoY3NmaTEgPCAxMykgeworICAgICBjc2ZpMyA9IGNzZmkyICsgKGNzZmkxID09IDQgPyA1IDogY3NmaTIvMTMpOworICAgfQorICAgZWxzZSB7CisgICAgIGNzZmkzID0gMDsKKyAgICAgc2ZpMiA9IDI7CisgICB9CisgIH0KKworCisgIGZpbmFsIGludCBjaWZpMSA9IDE7CisgIGZpbmFsIGludCBjaWZpMiA9IGZmKCk7CisgIGZpbmFsIGludCBjaWZpMzsKKworICBpbnQgZmYoKSB7IAorICAgIGludCBpID0gY2lmaTEgKyBjaWZpMiArIGNpZmkzICsgZmkzICsgZmk0OworICAgIHJldHVybiBpOyAKKyAgfQorCisgIHsKKyAgIHN3aXRjaCAoY2lmaTEpIHsKKyAgICBjYXNlIDI6IGNpZmkzID0gMjsgYnJlYWs7CisgICAgY2FzZSAxOiBjaWZpMyA9IDIwOyBicmVhazsKKyAgICBjYXNlIDA6IGNpZmkzID0gMjE7IGJyZWFrOworICAgIGRlZmF1bHQ6IGNpZmkzID0gMjI7IGJyZWFrOworICAgfQorICB9CisKKyAgZmluYWwgaW50IGNpZmk0OworICBhKCkgeworICAgIGNpZmk0ID0gNDsKKyAgICBpbnQgaSA9IDxlcnJvciBkZXNjcj0iVmFyaWFibGUgJ2ZpMycgbWlnaHQgbm90IGhhdmUgYmVlbiBpbml0aWFsaXplZCI+ZmkzPC9lcnJvcj47CisgICAgZmkzID0gMzsKKyAgICBhIGFpbnN0ID0gbnVsbDsKKyAgICBmaTQgPSBhaW5zdC5maTQ7CisgIH0KKyAgYShpbnQgaSkgeworICAgIHRoaXMuY2lmaTQgPSBpOworICAgIGZpMiA9IDM7CisgICAgZmkzID0gMzsKKyAgICBhIGFpbnN0ID0gbnVsbDsKKyAgICBmaTQgPSBhaW5zdC5maTQ7CisgIH0KKyAgYShTdHJpbmcgcykgeworICAgIHRoaXMoMCk7CisgICAgaW50IGkgPSBmaTM7CisKKyAgfQorfQorCitjbGFzcyBUZXN0IHsKKyAgLy8gYWNjZXNzIGZyb20gd2l0aGluIGlubmVyIGNsYXNzIE9LCisgICAgZmluYWwgYm9vbGVhbiBGQjsKKyAgICB7CisgICAgICBjbGFzcyBzIHsKKyAgICAgICAgYm9vbGVhbiBiID0gRkI7CisgICAgICB9CisgICAgICBGQiA9IHRydWU7CisKKyAgICB9CisgICAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgdGV4dDsKKyAgICBwdWJsaWMgVGVzdCgpIHsKKyAgICAgIG5ldyBBY3Rpb25MaXN0ZW5lcigpIHsKKyAgICAgICAgcHVibGljIHZvaWQgYWN0aW9uUGVyZm9ybWVkKEFjdGlvbkV2ZW50IGUpIHsKKyAgICAgICAgICBkb1NvbWV0aGluZyh0ZXh0KTsvLy8vCisgICAgICAgIH0KKyAgICAgIH07CisgICAgICB0ZXh0ID0gIkhlbGxvIHdvcmxkIjsKKyAgICB9CisKKyAgICBwcml2YXRlIHZvaWQgZG9Tb21ldGhpbmcoU3RyaW5nIHZhbHVlKSB7CisgICAgfQorfQorCisvLyBtdWx0aXBsZSBpbml0YWxpemVycworY2xhc3MgYzEgeworIHByaXZhdGUgZmluYWwgU3RyaW5nIHg7CisgeworICAgeCA9ICJIZWxsbyI7CisgfQorCisgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgeTsKKyB7CisgICB5ID0geDsgCisgfQorIHZvaWQgZigpIHsKKyAgIFN0cmluZyBzID0geCt5OworIH0KK30KKworY2xhc3MgYzIgeworICAgIHN0YXRpYyB7IAorICAgIH0KKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgbGltaXQ7CisgICAgc3RhdGljIHsKKyAgICAgICAgbGltaXQgPSA1OworICAgIH0KKyAgICBmaW5hbCBTdHJpbmcgczsKKyAgICBpbnQgayA9IDxlcnJvciBkZXNjcj0iVmFyaWFibGUgJ3MnIG1pZ2h0IG5vdCBoYXZlIGJlZW4gaW5pdGlhbGl6ZWQiPnM8L2Vycm9yPi5sZW5ndGgoKTsKKyAgICBmaW5hbCBTdHJpbmcgYzsKKyAgICBpbnQgazIgPSA8ZXJyb3IgZGVzY3I9IlZhcmlhYmxlICdjJyBtaWdodCBub3QgaGF2ZSBiZWVuIGluaXRpYWxpemVkIj5jPC9lcnJvcj4ubGVuZ3RoKCk7CisgICAgeworICAgICAgICBzID0gIiI7CisgICAgfQorCisgICAgcHVibGljIGMyKCkgeworICAgICAgICBjID0gIiI7CisgICAgfQorICAgIC8vIGl0cyBvaworICAgIGludCBrMyA9IGMubGVuZ3RoKCk7CisKKyAgICBjMihpbnQgaSkgeworICAgICAgdGhpcygpOworICAgIH0KK30KKworY2xhc3MgVW5pbml0aWFsaXplZEZpbmFsMiB7CisgICAgPGVycm9yIGRlc2NyPSJWYXJpYWJsZSAncycgbWlnaHQgbm90IGhhdmUgYmVlbiBpbml0aWFsaXplZCI+cHJpdmF0ZSBmaW5hbCBTdHJpbmcgczwvZXJyb3I+OworCisgICAgVW5pbml0aWFsaXplZEZpbmFsMigpeworICAgICAgICB0cnkgeworICAgICAgICB9CisgICAgICAgIGZpbmFsbHkgeworICAgICAgICB9CisgICAgfQorfQorY2xhc3MgVW5pbml0ZWRGaW5hbEZpZWQgeworCisJPGVycm9yIGRlc2NyPSJWYXJpYWJsZSAnc3RyaW5nJyBtaWdodCBub3QgaGF2ZSBiZWVuIGluaXRpYWxpemVkIj5wcml2YXRlIGZpbmFsIFN0cmluZyBzdHJpbmc8L2Vycm9yPjsKKworCXB1YmxpYyBVbmluaXRlZEZpbmFsRmllZCgpIHRocm93cyBJT0V4Y2VwdGlvbiB7CisJCWluaXQoKTsKKwl9CisKKwlwcml2YXRlIHZvaWQgaW5pdCgpIHRocm93cyBJT0V4Y2VwdGlvbiB7fQorfQorY2xhc3MgQXNzZXJ0RmluYWxGaWVkIHsKKwlwcml2YXRlIGZpbmFsIFN0cmluZyBzdHJpbmc7CisKKwlwdWJsaWMgQXNzZXJ0RmluYWxGaWVkKGJvb2xlYW4gYikgdGhyb3dzIEV4Y2VwdGlvbiB7CisJICAgICBhc3NlcnQgYjsKKwkgICAgIHN0cmluZyA9IG51bGw7CisJfQorfQorCitjbGFzcyBhMjBFeG90aWMgeworICAgIGludCBuPWs9MDsKKyAgICBmaW5hbCBpbnQgazsKKyAgICBmaW5hbCBpbnQgazI7CisgICAgaW50IG4yID0gaz09MCA/IChrMj05KSA6IChrMj0wKTsKK30KKworcHVibGljIGNsYXNzIGNYIHsKKyAgICBmaW5hbCBpbnQgaTsKKyAgICBjWCgpIHsKKyAgICAgICAgdGhpcygxKTsKKyAgICAgICAgaW50IGsgPSBpOworICAgIH0KKyAgICBjWChpbnQgZCkgeworICAgICAgICBpID0gZDsKKyAgICB9Cit9CisKKy8vIGh0dHA6Ly93d3cuaW50ZWxsaWoubmV0L3RyYWNrZXIvaWRlYS92aWV3U0NSP3B1YmxpY0lkPTIwMDk3CitjbGFzcyBMZW1tYSB7CisgICAgcHVibGljIExlbW1hKCkgeworICAgICAgICBuYW1lLmhhc2hDb2RlKCk7CisgICAgfQorICAgIHByaXZhdGUgZmluYWwgU3RyaW5nIG5hbWU7CisgICAgeyAgIG5hbWUgPSAiQW5keSI7CisgICAgfQorfQorCitjbGFzcyBjb3JyZWN0IHsKKyAgICB2b2lkIGYoKSB7CisgICAgICAgIGZpbmFsIE9iamVjdCBvOworICAgICAgICBvID0gbmV3IE9iamVjdCgpOworICAgICAgICBuZXcgT2JqZWN0KCkgeworICAgICAgICAgIHsgby50b1N0cmluZygpOyB9CisgICAgICAgIH07IAorICAgIH0KK30KKworcHVibGljIGNsYXNzIFggeworICAgIGZpbmFsIGludCBpOworICAgIFgoKSB7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBpID0gMDsKKyAgICAgICAgfQorICAgICAgICBmaW5hbGx5IHsKKworICAgICAgICB9CisgICAgfQorfQorCisKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nL0lERUFERVYxMTg3Ny5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmcvSURFQURFVjExODc3LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2RmYzAwMgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nL0lERUFERVYxMTg3Ny5qYXZhCkBAIC0wLDAgKzEsNyBAQAoraW50ZXJmYWNlIE15Q2xvbmVhYmxlIHsKKworICAgIC8vcHJvdGVjdGVkIG1ldGhvZCBmcm9tIGphdmEubGFuZy5PYmplY3QgaXMgbm90IGltcGxpY2l0bHkgZGVjbGFyZWQgaW4gaW50ZXJmYWNlIHdpdGggbm8gYmFzZSBpbnRlcmZhY2VzCisgICAgPGVycm9yIGRlc2NyPSInY2xvbmUoKScgaW4gJ015Q2xvbmVhYmxlJyBjbGFzaGVzIHdpdGggJ2Nsb25lKCknIGluICdqYXZhLmxhbmcuT2JqZWN0JzsgYXR0ZW1wdGluZyB0byB1c2UgaW5jb21wYXRpYmxlIHJldHVybiB0eXBlIj5pbnQ8L2Vycm9yPiBjbG9uZSgpOworCisgICAgPGVycm9yIGRlc2NyPSIndG9TdHJpbmcoKScgaW4gJ015Q2xvbmVhYmxlJyBjbGFzaGVzIHdpdGggJ3RvU3RyaW5nKCknIGluICdqYXZhLmxhbmcuT2JqZWN0JzsgYXR0ZW1wdGluZyB0byB1c2UgaW5jb21wYXRpYmxlIHJldHVybiB0eXBlIj5pbnQ8L2Vycm9yPiB0b1N0cmluZygpOworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nL0lERUFERVYxMTkxOS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmcvSURFQURFVjExOTE5LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODE4MWIwMwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nL0lERUFERVYxMTkxOS5qYXZhCkBAIC0wLDAgKzEsNTUgQEAKK2ludGVyZmFjZSBCYXIgeworICAgIHZvaWQgRG9CYXIoKTsKK30KKworYWJzdHJhY3QgY2xhc3MgRm9vIHsKKyAgICBwdWJsaWMgRm9vKEJhciBiKSB7CisgICAgfQorfQorCitjbGFzcyBJbmggZXh0ZW5kcyBGb28geworICAgIHB1YmxpYyBJbnRlZ2VyIG15RmllbGQgPSBuZXcgSW50ZWdlcigwKTsKKworICAgIHB1YmxpYyBJbmgoKSB7CisgICAgICAgIHN1cGVyKG5ldyBCYXIoKSB7CisgICAgICAgICAgICBwdWJsaWMgdm9pZCBEb0JhcigpIHsKKyAgICAgICAgICAgICAgICA8ZXJyb3IgZGVzY3I9IkNhbm5vdCByZWZlcmVuY2UgJ0luaC50aGlzJyBiZWZvcmUgc3VwZXJ0eXBlIGNvbnN0cnVjdG9yIGhhcyBiZWVuIGNhbGxlZCI+SW5oLnRoaXM8L2Vycm9yPi5teUZpZWxkLnRvU3RyaW5nKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0pOworCisgICAgICAgIGNsYXNzIEUgZXh0ZW5kcyBGb28geworICAgICAgICAgICAgRSgpIHsKKyAgICAgICAgICAgICAgICBzdXBlcihuZXcgQmFyKCkgeworICAgICAgICAgICAgICAgICAgICBwdWJsaWMgdm9pZCBEb0JhcigpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIEluaC50aGlzLm15RmllbGQudG9TdHJpbmcoKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBwdWJsaWMgdm9pZCBEb0JhcigpIHsKKyAgICAgICAgICAgICAgICBJbmgudGhpcy5teUZpZWxkLnRvU3RyaW5nKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgSW5oLnRoaXMubXlGaWVsZC50b1N0cmluZygpOworICAgIH0KKworICAgIHB1YmxpYyBJbmgoQmFyIGIpIHsKKyAgICAgICAgc3VwZXIoYik7CisgICAgfQorfQorCisvL0lERUFERVYtMTQzMDYKK2NsYXNzIEJhc2UgeworICBwcm90ZWN0ZWQgU3RyaW5nIGZpZWxkOworCisgIHB1YmxpYyBCYXNlKGZpbmFsIFN0cmluZyBmaWVsZCwgaW50IGwpIHsKKyAgICB0aGlzLmZpZWxkID0gZmllbGQ7CisgIH0KK30KKworY2xhc3MgSW5oZXJ0aW9yIGV4dGVuZHMgQmFzZSB7CisgIHB1YmxpYyBJbmhlcnRpb3IoKSB7CisgICAgc3VwZXIoIiIsIDxlcnJvciBkZXNjcj0iQ2Fubm90IHJlZmVyZW5jZSAnQmFzZS5maWVsZCcgYmVmb3JlIHN1cGVydHlwZSBjb25zdHJ1Y3RvciBoYXMgYmVlbiBjYWxsZWQiPmZpZWxkPC9lcnJvcj4ubGVuZ3RoKCkpOworICB9Cit9CisvL2VuZCBvZiBJREVBREVWLTE0MzA2ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmcvSURFQURFVjEzMjQ5LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZy9JREVBREVWMTMyNDkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYWRjMTVkCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmcvSURFQURFVjEzMjQ5LmphdmEKQEAgLTAsMCArMSwyMiBAQAorY2xhc3MgVGVzdFN1cGVyIHsKKyAgICBwdWJsaWMgc3RhdGljIGNsYXNzIEEgeworICAgICAgICBwcml2YXRlIFN0cmluZyBzID0gIkEiOworCisgICAgICAgIHB1YmxpYyB2b2lkIGZvbygpIHsKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQTo6Zm9vIik7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwdWJsaWMgc3RhdGljIGNsYXNzIEIgZXh0ZW5kcyBBIHsKKworICAgICAgICBwdWJsaWMgdm9pZCBmb28oKSB7CisgICAgICAgICAgICBzdXBlci5mb28oKTsKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQjo6Zm9vICIgKyBzdXBlci5zKTsKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQjo6Zm9vICIgKyAoKEEpIHRoaXMpLnMpOworICAgICAgICB9CisgICAgfQorCisgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworICAgICAgICBuZXcgQigpLmZvbygpOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZy9JREVBREVWMjU3ODQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nL0lERUFERVYyNTc4NC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk5YjZiYzUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZy9JREVBREVWMjU3ODQuamF2YQpAQCAtMCwwICsxLDEzIEBACitwdWJsaWMgY2xhc3MgWCBleHRlbmRzIFkge30KK3B1YmxpYyBjbGFzcyBZIHsKKworCXByaXZhdGUgc3RhdGljIGludCB4ID0gMDsKKworCXB1YmxpYyBzdGF0aWMgaW50IGdldFgoKSB7CisJCXJldHVybiB4OworCX0KKworCXB1YmxpYyBzdGF0aWMgdm9pZCBzZXRYKGludCB4KSB7CisJCVguPGVycm9yIGRlc2NyPSIneCcgaGFzIHByaXZhdGUgYWNjZXNzIGluICdZJyI+eDwvZXJyb3I+ID0geDsKKwl9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmcvSURFQURFVjg4MjIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nL0lERUFERVY4ODIyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjMzNDdkNgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nL0lERUFERVY4ODIyLmphdmEKQEAgLTAsMCArMSw4IEBACitjbGFzcyBTIGV4dGVuZHMgUzMgeworICAgIFN0cmluZyBYWFg7ICAvL3Nob3VsZCBjb3JyZWN0bHkgcmVzb2x2ZSB0byBqYXZhLmxhbmcuU3RyaW5nCit9CisKK2NsYXNzIFMzIHsKKyAgICBwcml2YXRlIGNsYXNzIFN0cmluZyB7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmcvSURFQURFVjkyMDEuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nL0lERUFERVY5MjAxLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzIyMDc5YQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nL0lERUFERVY5MjAxLmphdmEKQEAgLTAsMCArMSw2IEBACitjbGFzcyBZb3VBcmVOb3RNeVR5cGUgeworCisgICAgU3RyaW5nW11bXSBvbGRMYWR5KCkgeworICAgICAgICByZXR1cm4gIG5ldyBTdHJpbmdbXVtdezxlcnJvciBkZXNjcj0iSW5jb21wYXRpYmxlIHR5cGVzLiBGb3VuZDogJ2phdmEubGFuZy5JbnRlZ2VyW10nLCByZXF1aXJlZDogJ2phdmEubGFuZy5TdHJpbmdbXSciPm5ldyBJbnRlZ2VyW117fTwvZXJyb3I+fTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmcvSWxsZWdhbEZvcndhcmRSZWZlcmVuY2UuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nL0lsbGVnYWxGb3J3YXJkUmVmZXJlbmNlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODhkZDk1MwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nL0lsbGVnYWxGb3J3YXJkUmVmZXJlbmNlLmphdmEKQEAgLTAsMCArMSw3NCBAQAorLy8vIGZvcndhcmQgcmVmZXJlbmNlcworaW1wb3J0IGphdmEuaW8uKjsKK2ltcG9ydCBqYXZhLm5ldC4qOworCitwdWJsaWMgY2xhc3MgYSAgeworCisgIHsKKyAgICBpbnQgaTsKKyAgICBpZiAoPGVycm9yIGRlc2NyPSJJbGxlZ2FsIGZvcndhcmQgcmVmZXJlbmNlIj5GSTwvZXJyb3I+ID09IDQpIGkgPSA1OworICB9CisgIGZpbmFsIGludCBGSSA9IDQ7CisKKyAgaW50IGsgPSAxICsgPGVycm9yIGRlc2NyPSJJbGxlZ2FsIGZvcndhcmQgcmVmZXJlbmNlIj5raTwvZXJyb3I+OworICBpbnQga2k7CisKKyAgZmluYWwgaW50IGZpNSA9IDxlcnJvciBkZXNjcj0iSWxsZWdhbCBmb3J3YXJkIHJlZmVyZW5jZSI+Zmk1PC9lcnJvcj4gKyAxOworfQorCitjbGFzcyBhMSB7Cisgc3RhdGljIGludCBpID0gPGVycm9yIGRlc2NyPSJJbGxlZ2FsIGZvcndhcmQgcmVmZXJlbmNlIj5qPC9lcnJvcj4gKyAyOyAKKyBzdGF0aWMgaW50IGogPSA0OworfQorY2xhc3MgYTIgeworIHN0YXRpYyB7IGkgPSA8ZXJyb3IgZGVzY3I9IklsbGVnYWwgZm9yd2FyZCByZWZlcmVuY2UiPmo8L2Vycm9yPiArIDI7IH0KKyBzdGF0aWMgaW50IGksIGo7Cisgc3RhdGljIHsgaiA9IDQ7IH0KK30KKworLy8gcGFzdGVkIGZyb20gSkxTIDguMy4yLjMKK2NsYXNzIFVzZUJlZm9yZURlY2xhcmF0aW9uIHsKKyBzdGF0aWMgeworICB4ID0gMTAwOyAvLyBvayAtIGFzc2lnbm1lbnQKKyAgaW50IHkgPSA8ZXJyb3IgZGVzY3I9IklsbGVnYWwgZm9yd2FyZCByZWZlcmVuY2UiPng8L2Vycm9yPiArIDE7IC8vIGVycm9yIC0gcmVhZCBiZWZvcmUgZGVjbGFyYXRpb24KKyAgaW50IHYgPSB4ID0gMzsgLy8gb2sgLSB4IGF0IGxlZnQgaGFuZCBzaWRlIG9mIGFzc2lnbm1lbnQKKyAgaW50IHogPSBVc2VCZWZvcmVEZWNsYXJhdGlvbi54ICogMjsJLy8gb2sgLSBub3QgYWNjZXNzZWQgdmlhIHNpbXBsZSBuYW1lCisgIE9iamVjdCBvID0gbmV3IE9iamVjdCgpeyAKKyAgICAgdm9pZCBmb28oKXt4Kys7fSAvLyBvayAtIG9jY3VycyBpbiBhIGRpZmZlcmVudCBjbGFzcworICAgICB7eCsrO30gLy8gb2sgLSBvY2N1cnMgaW4gYSBkaWZmZXJlbnQgY2xhc3MKKyAgIH07CisgIH0KKyAgeworICAgaiA9IDIwMDsgLy8gb2sgLSBhc3NpZ25tZW50CisgICBqID0gPGVycm9yIGRlc2NyPSJJbGxlZ2FsIGZvcndhcmQgcmVmZXJlbmNlIj5qPC9lcnJvcj4gKyAxOyAvLyBlcnJvciAtIHJpZ2h0IGhhbmQgc2lkZSByZWFkcyBiZWZvcmUgZGVjbGFyYXRpb24KKyAgIGludCBrID0gaiA9IDxlcnJvciBkZXNjcj0iSWxsZWdhbCBmb3J3YXJkIHJlZmVyZW5jZSI+ajwvZXJyb3I+ICsgMTsgCisgICBpbnQgbiA9IGogPSAzMDA7IC8vIG9rIC0gaiBhdCBsZWZ0IGhhbmQgc2lkZSBvZiBhc3NpZ25tZW50CisgICBpbnQgaCA9IDxlcnJvciBkZXNjcj0iSWxsZWdhbCBmb3J3YXJkIHJlZmVyZW5jZSI+ajwvZXJyb3I+Kys7IC8vIGVycm9yIC0gcmVhZCBiZWZvcmUgZGVjbGFyYXRpb24KKyAgIGludCBsID0gdGhpcy5qICogMzsgLy8gb2sgLSBub3QgYWNjZXNzZWQgdmlhIHNpbXBsZSBuYW1lCisgICBPYmplY3QgbyA9IG5ldyBPYmplY3QoKXsgCisgICAgIHZvaWQgZm9vKCl7aisrO30gLy8gb2sgLSBvY2N1cnMgaW4gYSBkaWZmZXJlbnQgY2xhc3MKKyAgICAgeyBqID0gaiArIDE7fSAvLyBvayAtIG9jY3VycyBpbiBhIGRpZmZlcmVudCBjbGFzcworICAgfTsKKyAgfQorCisgIGludCB3ID0geD0gMzsgLy8gb2sgLSB4IGF0IGxlZnQgaGFuZCBzaWRlIG9mIGFzc2lnbm1lbnQKKyAgaW50IHAgPSB4OyAvLyBvayAtIGluc3RhbmNlIGluaXRpYWxpemVycyBtYXkgYWNjZXNzIHN0YXRpYyBmaWVsZHMKKyAgc3RhdGljIGludCB1ID0gKG5ldyBPYmplY3QoKXtpbnQgYmFyKCl7cmV0dXJuIHg7fX0pLmJhcigpOyAgLy8gb2sgLSBvY2N1cnMgaW4gYSBkaWZmZXJlbnQgY2xhc3MKKyAgc3RhdGljIGludCB4OworICBpbnQgbSA9IGogPSA0OyAvLyBvayAtIGogYXQgbGVmdCBoYW5kIHNpZGUgb2YgYXNzaWdubWVudAorICBpbnQgbyA9IChuZXcgT2JqZWN0KCl7aW50IGJhcigpe3JldHVybiBqO319KS5iYXIoKTsgICAvLyBvayAtIG9jY3VycyBpbiBhIGRpZmZlcmVudCBjbGFzcworICBpbnQgajsKK30KKworY2xhc3MgYTMgeworICAgIHN0YXRpYyB7CisgICAgICAgIDxlcnJvciBkZXNjcj0iSWxsZWdhbCBmb3J3YXJkIHJlZmVyZW5jZSI+aTwvZXJyb3I+Kz0xOworICAgIH0KKyAgICBzdGF0aWMgaW50IGo9PGVycm9yIGRlc2NyPSJJbGxlZ2FsIGZvcndhcmQgcmVmZXJlbmNlIj5pPC9lcnJvcj4rPTE7CisgICAgc3RhdGljIGludCBpPTA7CisgICAgeworICAgICAgICA8ZXJyb3IgZGVzY3I9IklsbGVnYWwgZm9yd2FyZCByZWZlcmVuY2UiPms8L2Vycm9yPis9MTsKKyAgICB9CisgICAgaW50IG49PGVycm9yIGRlc2NyPSJJbGxlZ2FsIGZvcndhcmQgcmVmZXJlbmNlIj5rPC9lcnJvcj4rPTE7CisgICAgaW50IGs9MDsKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nL0lsbGVnYWxNb2RpZmllcnNDb21iaW5hdGlvbi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmcvSWxsZWdhbE1vZGlmaWVyc0NvbWJpbmF0aW9uLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDY4MmJhMwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nL0lsbGVnYWxNb2RpZmllcnNDb21iaW5hdGlvbi5qYXZhCkBAIC0wLDAgKzEsNzQgQEAKKy8vIGlsbGVnYWwgbW9kaWZpZXIgY29tYmluYXRpb25zCisKK2Fic3RyYWN0IHB1YmxpYyBjbGFzcyBhIHsKKyAgLy8vLy8vLy8vLy8vLy8vLy8vLy8gZmllbGRzIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisgIDxlcnJvciBkZXNjcj0iSWxsZWdhbCBjb21iaW5hdGlvbiBvZiBtb2RpZmllcnM6ICdwdWJsaWMnIGFuZCAncHJvdGVjdGVkJyI+cHVibGljPC9lcnJvcj4gc3RhdGljCisgIDxlcnJvciBkZXNjcj0iSWxsZWdhbCBjb21iaW5hdGlvbiBvZiBtb2RpZmllcnM6ICdwcm90ZWN0ZWQnIGFuZCAncHVibGljJyI+cHJvdGVjdGVkPC9lcnJvcj4gaW50IGYxID0gMDsKKworICA8ZXJyb3IgZGVzY3I9IklsbGVnYWwgY29tYmluYXRpb24gb2YgbW9kaWZpZXJzOiAncHVibGljJyBhbmQgJ3ByaXZhdGUnIj5wdWJsaWM8L2Vycm9yPiB2b2xhdGlsZQorICA8ZXJyb3IgZGVzY3I9IklsbGVnYWwgY29tYmluYXRpb24gb2YgbW9kaWZpZXJzOiAncHJpdmF0ZScgYW5kICdwdWJsaWMnIj5wcml2YXRlPC9lcnJvcj4gaW50IGYyID0gMDsKKworICA8ZXJyb3IgZGVzY3I9IklsbGVnYWwgY29tYmluYXRpb24gb2YgbW9kaWZpZXJzOiAncHJvdGVjdGVkJyBhbmQgJ3ByaXZhdGUnIj5wcm90ZWN0ZWQ8L2Vycm9yPiBmaW5hbAorICA8ZXJyb3IgZGVzY3I9IklsbGVnYWwgY29tYmluYXRpb24gb2YgbW9kaWZpZXJzOiAncHJpdmF0ZScgYW5kICdwcm90ZWN0ZWQnIj5wcml2YXRlPC9lcnJvcj4gaW50IGYzID0gMDsKKworICA8ZXJyb3IgZGVzY3I9IklsbGVnYWwgY29tYmluYXRpb24gb2YgbW9kaWZpZXJzOiAnZmluYWwnIGFuZCAndm9sYXRpbGUnIj5maW5hbDwvZXJyb3I+CisgIDxlcnJvciBkZXNjcj0iSWxsZWdhbCBjb21iaW5hdGlvbiBvZiBtb2RpZmllcnM6ICd2b2xhdGlsZScgYW5kICdmaW5hbCciPnZvbGF0aWxlPC9lcnJvcj4gcHJpdmF0ZSBpbnQgZjQgPSAwOworCisgIDxlcnJvciBkZXNjcj0iSWxsZWdhbCBjb21iaW5hdGlvbiBvZiBtb2RpZmllcnM6ICdwdWJsaWMnIGFuZCAncHVibGljJyI+cHVibGljPC9lcnJvcj4gCisgIDxlcnJvciBkZXNjcj0iSWxsZWdhbCBjb21iaW5hdGlvbiBvZiBtb2RpZmllcnM6ICdwdWJsaWMnIGFuZCAncHVibGljJyI+cHVibGljPC9lcnJvcj4KKyAgICAgaW50IGY1ID0gMDsKKworICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBjZjEgPSAwOworICBzdGF0aWMgdm9sYXRpbGUgcHJpdmF0ZSBpbnQgY2YyOworICB0cmFuc2llbnQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgY2YzID0gMDsKKyAgcHJvdGVjdGVkIHZvbGF0aWxlIHRyYW5zaWVudCBpbnQgY2Y0OworICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgY2Y1ID0gMTsKKworCisKKyAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vIG1ldGhvZHMgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworICA8ZXJyb3IgZGVzY3I9IklsbGVnYWwgY29tYmluYXRpb24gb2YgbW9kaWZpZXJzOiAnYWJzdHJhY3QnIGFuZCAnbmF0aXZlJyI+YWJzdHJhY3Q8L2Vycm9yPiAgCisgIDxlcnJvciBkZXNjcj0iSWxsZWdhbCBjb21iaW5hdGlvbiBvZiBtb2RpZmllcnM6ICduYXRpdmUnIGFuZCAnYWJzdHJhY3QnIj5uYXRpdmU8L2Vycm9yPiAgdm9pZCBtMSgpOworCisgIDxlcnJvciBkZXNjcj0iSWxsZWdhbCBjb21iaW5hdGlvbiBvZiBtb2RpZmllcnM6ICdzdGF0aWMnIGFuZCAnYWJzdHJhY3QnIj5zdGF0aWM8L2Vycm9yPiAgcHVibGljCisgIDxlcnJvciBkZXNjcj0iSWxsZWdhbCBjb21iaW5hdGlvbiBvZiBtb2RpZmllcnM6ICdhYnN0cmFjdCcgYW5kICdzdGF0aWMnIj5hYnN0cmFjdDwvZXJyb3I+ICB2b2lkIG0yKCk7CisKKyAgPGVycm9yIGRlc2NyPSJJbGxlZ2FsIGNvbWJpbmF0aW9uIG9mIG1vZGlmaWVyczogJ2ZpbmFsJyBhbmQgJ2Fic3RyYWN0JyI+ZmluYWw8L2Vycm9yPgorICA8ZXJyb3IgZGVzY3I9IklsbGVnYWwgY29tYmluYXRpb24gb2YgbW9kaWZpZXJzOiAnYWJzdHJhY3QnIGFuZCAnZmluYWwnIj5hYnN0cmFjdDwvZXJyb3I+ICB2b2lkIG0zKCk7CisKKyAgPGVycm9yIGRlc2NyPSJJbGxlZ2FsIGNvbWJpbmF0aW9uIG9mIG1vZGlmaWVyczogJ3ByaXZhdGUnIGFuZCAncHVibGljJyI+cHJpdmF0ZTwvZXJyb3I+IHN0YXRpYworICA8ZXJyb3IgZGVzY3I9IklsbGVnYWwgY29tYmluYXRpb24gb2YgbW9kaWZpZXJzOiAncHVibGljJyBhbmQgJ3ByaXZhdGUnIj5wdWJsaWM8L2Vycm9yPiAgdm9pZCBtNCgpIHt9CisKKyAgPGVycm9yIGRlc2NyPSJJbGxlZ2FsIGNvbWJpbmF0aW9uIG9mIG1vZGlmaWVyczogJ3Byb3RlY3RlZCcgYW5kICdwcml2YXRlJyI+cHJvdGVjdGVkPC9lcnJvcj4gZmluYWwKKyAgPGVycm9yIGRlc2NyPSJJbGxlZ2FsIGNvbWJpbmF0aW9uIG9mIG1vZGlmaWVyczogJ3ByaXZhdGUnIGFuZCAncHJvdGVjdGVkJyI+cHJpdmF0ZTwvZXJyb3I+ICB2b2lkIG01KCkge30KKworICA8ZXJyb3IgZGVzY3I9IklsbGVnYWwgY29tYmluYXRpb24gb2YgbW9kaWZpZXJzOiAncHVibGljJyBhbmQgJ3B1YmxpYyciPnB1YmxpYzwvZXJyb3I+IAorICA8ZXJyb3IgZGVzY3I9IklsbGVnYWwgY29tYmluYXRpb24gb2YgbW9kaWZpZXJzOiAncHVibGljJyBhbmQgJ3B1YmxpYyciPnB1YmxpYzwvZXJyb3I+IHZvaWQgbTYoKSB7fTsKKworICBwdWJsaWMgYWJzdHJhY3Qgdm9pZCBjbTEoKTsKKyAgcHJvdGVjdGVkIHN0YXRpYyBzeW5jaHJvbml6ZWQgbmF0aXZlIHZvaWQgY20yKCk7CisgIHB1YmxpYyBzdGF0aWMgZmluYWwgdm9pZCBjbTMoKSB7fQorCisKKyAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLyBjbGFzc2VzIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKyAgPGVycm9yIGRlc2NyPSJJbGxlZ2FsIGNvbWJpbmF0aW9uIG9mIG1vZGlmaWVyczogJ2ZpbmFsJyBhbmQgJ2Fic3RyYWN0JyI+ZmluYWw8L2Vycm9yPiAgc3RhdGljIHN0cmljdGZwIHByb3RlY3RlZAorICA8ZXJyb3IgZGVzY3I9IklsbGVnYWwgY29tYmluYXRpb24gb2YgbW9kaWZpZXJzOiAnYWJzdHJhY3QnIGFuZCAnZmluYWwnIj5hYnN0cmFjdDwvZXJyb3I+ICBjbGFzcyBjMSB7fQorCisgIDxlcnJvciBkZXNjcj0iSWxsZWdhbCBjb21iaW5hdGlvbiBvZiBtb2RpZmllcnM6ICdwcml2YXRlJyBhbmQgJ3B1YmxpYyciPnByaXZhdGU8L2Vycm9yPiBmaW5hbAorICA8ZXJyb3IgZGVzY3I9IklsbGVnYWwgY29tYmluYXRpb24gb2YgbW9kaWZpZXJzOiAncHVibGljJyBhbmQgJ3ByaXZhdGUnIj5wdWJsaWM8L2Vycm9yPiAgY2xhc3MgYzIge30KKworICA8ZXJyb3IgZGVzY3I9IklsbGVnYWwgY29tYmluYXRpb24gb2YgbW9kaWZpZXJzOiAnZmluYWwnIGFuZCAnZmluYWwnIj5maW5hbDwvZXJyb3I+IAorICA8ZXJyb3IgZGVzY3I9IklsbGVnYWwgY29tYmluYXRpb24gb2YgbW9kaWZpZXJzOiAnZmluYWwnIGFuZCAnZmluYWwnIj5maW5hbDwvZXJyb3I+IGNsYXNzIGMzIHt9CisKKyAgYWJzdHJhY3QgcHJvdGVjdGVkIHN0YXRpYyBzdHJpY3RmcCBjbGFzcyBjYzEge30KKyAgZmluYWwgcHJpdmF0ZSBzdGF0aWMgY2xhc3MgY2MyIHt9CisgIGNsYXNzIGNjMyB7fQorICBzdGF0aWMgY2xhc3MgY2M0IHt9CisKKyAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLyBsb2NhbHMKKyAgdm9pZCBmKCkgeworICAgIDxlcnJvciBkZXNjcj0iSWxsZWdhbCBjb21iaW5hdGlvbiBvZiBtb2RpZmllcnM6ICdmaW5hbCcgYW5kICdmaW5hbCciPmZpbmFsPC9lcnJvcj4KKyAgICA8ZXJyb3IgZGVzY3I9IklsbGVnYWwgY29tYmluYXRpb24gb2YgbW9kaWZpZXJzOiAnZmluYWwnIGFuZCAnZmluYWwnIj5maW5hbDwvZXJyb3I+IGludCBsb2M7CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nL0lsbGVnYWxUeXBlLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZy9JbGxlZ2FsVHlwZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFmZDI1YzgKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZy9JbGxlZ2FsVHlwZS5qYXZhCkBAIC0wLDAgKzEsOCBAQAorCisgIGNsYXNzIEZvbyB7CisgICAgaW50IGs7CisgICAgQ2xhc3MgYz08ZXJyb3IgZGVzY3I9IlVua25vd24gY2xhc3M6ICdrJyI+azwvZXJyb3I+LmNsYXNzOworICAgIHZvaWQgZigpIHsKKyAgICAgIDxlcnJvciBkZXNjcj0iVW5rbm93biBjbGFzczogJ2phdmEuaW8nIj5qYXZhLmlvPC9lcnJvcj4gamF2YWlvOworICAgIH0KKyAgfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmcvSWxsZWdhbFZvaWRUeXBlLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZy9JbGxlZ2FsVm9pZFR5cGUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMDZiZTkwCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmcvSWxsZWdhbFZvaWRUeXBlLmphdmEKQEAgLTAsMCArMSwxOCBAQAorY2xhc3MgcyB7CisgIHZvaWQgZigpIHsKKyAgICAvLyBpbGxlZ2FsIHR5cGUKKyAgICA8ZXJyb3IgZGVzY3I9IklsbGVnYWwgdHlwZTogJ3ZvaWQnIj52b2lkPC9lcnJvcj5bXSB2YTsKKyAgICA8ZXJyb3IgZGVzY3I9IklsbGVnYWwgdHlwZTogJ3ZvaWQnIj52b2lkPC9lcnJvcj4gdnY7CisgICAgY2xhc3MgbG9jIHsKKyAgICAgIHZvaWQgZig8ZXJyb3IgZGVzY3I9IklsbGVnYWwgdHlwZTogJ3ZvaWQnIj52b2lkPC9lcnJvcj4gaSkge30KKyAgICB9CisgICAgT2JqZWN0IG8gPSBuZXcgPGVycm9yIGRlc2NyPSJJbGxlZ2FsIHR5cGU6ICd2b2lkJyI+dm9pZDwvZXJyb3I+WzFdOworCisgICAgLy8gdGhpcyBpcyB0aGUgb25seSB2YWxpZCB2b2lkIHVzYWdlCisgICAgQ2xhc3Mgdm9pZENsYXNzID0gdm9pZC5jbGFzczsKKyAgfQorCisgIHsKKyAgICA8ZXJyb3IgZGVzY3I9IkluY29tcGF0aWJsZSB0eXBlcy4gRm91bmQ6ICd2b2lkJywgcmVxdWlyZWQ6ICdqYXZhLmxhbmcuT2JqZWN0JyI+T2JqZWN0IG8gPSBmKCk7PC9lcnJvcj4KKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmcvSW1wbGljaXRDb25zdHJ1Y3Rvci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmcvSW1wbGljaXRDb25zdHJ1Y3Rvci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE0MDJkZWMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZy9JbXBsaWNpdENvbnN0cnVjdG9yLmphdmEKQEAgLTAsMCArMSw5IEBACitjbGFzcyBBX0kgZXh0ZW5kcyBCX0l7CisgIHB1YmxpYyBBX0koKSB7CisgICAgc3VwZXIoKTsKKyAgICBuZXcgQl9JKCk7CisgIH0KK30KKworY2xhc3MgQl9JeworfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmcvSW5jb21wYXRpYmxlVHlwZXMuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nL0luY29tcGF0aWJsZVR5cGVzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMThmOGIzNgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nL0luY29tcGF0aWJsZVR5cGVzLmphdmEKQEAgLTAsMCArMSw4MCBAQAorY2xhc3MgYyB7CisgIHZvaWQgZigpIHsKKyAgICAvLy0tLS0gc3dpdGNoIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgc3dpdGNoICg8ZXJyb3IgZGVzY3I9IkluY29tcGF0aWJsZSB0eXBlcy4gRm91bmQ6ICdqYXZhLmxhbmcuU3RyaW5nJywgcmVxdWlyZWQ6ICdieXRlLCBjaGFyLCBzaG9ydCBvciBpbnQnIj4icyI8L2Vycm9yPikgCisgICAge2RlZmF1bHQ6fQorICAgIGJ5dGUgYnQgPSAwOworICAgIHN3aXRjaCAoYnQpIHsKKyAgICAgIGNhc2UgPGVycm9yIGRlc2NyPSJJbmNvbXBhdGlibGUgdHlwZXMuIEZvdW5kOiAnamF2YS5sYW5nLlN0cmluZycsIHJlcXVpcmVkOiAnYnl0ZSciPiJTIjwvZXJyb3I+OiBicmVhazsKKyAgICAgIGNhc2UgPGVycm9yIGRlc2NyPSJJbmNvbXBhdGlibGUgdHlwZXMuIEZvdW5kOiAnbG9uZycsIHJlcXVpcmVkOiAnYnl0ZSciPjEwTDwvZXJyb3I+OiBicmVhazsKKyAgICAgIGNhc2UgPGVycm9yIGRlc2NyPSJJbmNvbXBhdGlibGUgdHlwZXMuIEZvdW5kOiAnYm9vbGVhbicsIHJlcXVpcmVkOiAnYnl0ZSciPnRydWU8L2Vycm9yPjogYnJlYWs7CisgICAgICBjYXNlIDxlcnJvciBkZXNjcj0iSW5jb21wYXRpYmxlIHR5cGVzLiBGb3VuZDogJ2ludCcsIHJlcXVpcmVkOiAnYnl0ZSciPjB4ZGZmZmZmZmY8L2Vycm9yPjogYnJlYWs7CisgICAgICBjYXNlIDxlcnJvciBkZXNjcj0iSW5jb21wYXRpYmxlIHR5cGVzLiBGb3VuZDogJ2NoYXInLCByZXF1aXJlZDogJ2J5dGUnIj4nXHVkZWRlJzwvZXJyb3I+OiBicmVhazsKKyAgICAgIGNhc2UgPGVycm9yIGRlc2NyPSJJbmNvbXBhdGlibGUgdHlwZXMuIEZvdW5kOiAnaW50JywgcmVxdWlyZWQ6ICdieXRlJyI+MTI4MDwvZXJyb3I+OiBicmVhazsKKyAgICAgIC8vIGFzc2lnbmFibGUgY29tcGF0aWJsZSB0byBieXRlCisgICAgICBjYXNlIDA6IGJyZWFrOworICAgICAgY2FzZSAnYyc6IGJyZWFrOworICAgICAgY2FzZSAtMTogYnJlYWs7CisgICAgICBjYXNlIDEyNzogYnJlYWs7CisgICAgfQorICAgIGNoYXIgY2ggPSAnZCc7CisgICAgc3dpdGNoIChjaCkgeworICAgICAgY2FzZSA8ZXJyb3IgZGVzY3I9IkluY29tcGF0aWJsZSB0eXBlcy4gRm91bmQ6ICdqYXZhLmxhbmcuU3RyaW5nJywgcmVxdWlyZWQ6ICdjaGFyJyI+IlMiPC9lcnJvcj46IGJyZWFrOworICAgICAgY2FzZSA8ZXJyb3IgZGVzY3I9IkluY29tcGF0aWJsZSB0eXBlcy4gRm91bmQ6ICdsb25nJywgcmVxdWlyZWQ6ICdjaGFyJyI+MTBMPC9lcnJvcj46IGJyZWFrOworICAgICAgY2FzZSA8ZXJyb3IgZGVzY3I9IkluY29tcGF0aWJsZSB0eXBlcy4gRm91bmQ6ICdib29sZWFuJywgcmVxdWlyZWQ6ICdjaGFyJyI+dHJ1ZTwvZXJyb3I+OiBicmVhazsKKyAgICAgIGNhc2UgPGVycm9yIGRlc2NyPSJJbmNvbXBhdGlibGUgdHlwZXMuIEZvdW5kOiAnaW50JywgcmVxdWlyZWQ6ICdjaGFyJyI+MHhhZmZmZmZmZjwvZXJyb3I+OiBicmVhazsKKyAgICAgIC8vIGFzc2lnbmFibGUgY29tcGF0aWJsZSB0byBjaGFyCisgICAgICBjYXNlIDA6IGJyZWFrOworICAgICAgY2FzZSAnXHU0NTY3JzogYnJlYWs7CisgICAgICBjYXNlIDB4ZmZmZjogYnJlYWs7CisgICAgICBjYXNlIDI1NTogYnJlYWs7CisgICAgfQorICAgIHN3aXRjaCAoJ2QnKSB7ZGVmYXVsdDp9CisKKyAgICAvLy8gLS0tLS0tLS0tIGluY29tcGF0aWJsZSB0eXBlcyBpbnNpZGUgYXJyYXkgaW5pdGlhbGl6ZXIgLS0tLS0tLS0tLQorCisKKyAgICBpbnRbXSBpYSA9IG5ldyBpbnRbXSB7CisgICAgICA8ZXJyb3IgZGVzY3I9IkluY29tcGF0aWJsZSB0eXBlcy4gRm91bmQ6ICdqYXZhLmxhbmcuU3RyaW5nJywgcmVxdWlyZWQ6ICdpbnQnIj4iU3RyaW5nIjwvZXJyb3I+IAorICAgICAgLCA8ZXJyb3IgZGVzY3I9IkluY29tcGF0aWJsZSB0eXBlcy4gRm91bmQ6ICdkb3VibGUnLCByZXF1aXJlZDogJ2ludCciPjMuNDwvZXJyb3I+IAorICAgIH07CisKKyAgICBTdHJpbmdbXSBzYSA9IHsgInMiLAorICAgICAgIDxlcnJvciBkZXNjcj0iSW5jb21wYXRpYmxlIHR5cGVzLiBGb3VuZDogJ2Jvb2xlYW4nLCByZXF1aXJlZDogJ2phdmEubGFuZy5TdHJpbmcnIj5mYWxzZTwvZXJyb3I+IAorICAgICAgICwgPGVycm9yIGRlc2NyPSJJbmNvbXBhdGlibGUgdHlwZXMuIEZvdW5kOiAnY2hhcicsIHJlcXVpcmVkOiAnamF2YS5sYW5nLlN0cmluZyciPidTJzwvZXJyb3I+IAorICAgIH07CisKKyAgICBTdHJpbmdbXSB2YXMgPSBudWxsOworICAgIE9iamVjdCBvID0gIG5ldyBpbnRbPGVycm9yIGRlc2NyPSJJbmNvbXBhdGlibGUgdHlwZXMuIEZvdW5kOiAnamF2YS5sYW5nLlN0cmluZycsIHJlcXVpcmVkOiAnaW50JyI+dmFzWzBdPC9lcnJvcj5dOworCisgICAgaW50W10gd2VpcmQ9ezxlcnJvciBkZXNjcj0iSWxsZWdhbCBpbml0aWFsaXplciBmb3IgJ2ludCciPnswfTwvZXJyb3I+fTsKKyAgICBpbnRbXVtdIGFycmF5SW5pdGlhbGl6ZXJzID0ge3sgfX07CisgICAgaW50W11bXVtdIGFycmF5SW5pdGlhbGl6ZXJzMiA9IHt7IH0sIHt7fX0gfTsKKyAgICBkb3VibGVbXVtdIGkyZCA9IHt7MX19OworICAgIGNoYXJbXVtdIGkyYyA9IHt7MX19OworICAgIGNoYXIgZm9vID0gMHgwMDAwOyAvKiBva2F5ICovCisgICAgY2hhcltdIGJhciA9IHsgMSwyLDMgfTsgLyogc3RpbGwgb2theSAqLworICAgIGNoYXJbXVtdIGJheiA9IHsgeyAxLDIsMyB9IH07IC8qIG5vdCBva2F5IGluIDQuNSwgb2theSBpbiA0LjAueCBhbmQgZm9yIGphdmFjICovCisKKworICAgIC8vLyAtLS0tLS0tLSBjb25kaXRpb25hbCBvcGVyYXRvcgorICAgIGludCBpOCA9IDxlcnJvciBkZXNjcj0iSW5jb21wYXRpYmxlIHR5cGVzLiBGb3VuZDogJ2phdmEubGFuZy5TdHJpbmcnLCByZXF1aXJlZDogJ2Jvb2xlYW4nIj4iZmYiICsgdHJ1ZTwvZXJyb3I+ID8gMSA6IDI7CisgICAgaW50IGk5ID0gMT09MiA/IDEgOiA8ZXJyb3IgZGVzY3I9IkluY29tcGF0aWJsZSB0eXBlcy4gRm91bmQ6ICdqYXZhLmxhbmcuU3RyaW5nJywgcmVxdWlyZWQ6ICdpbnQnIj4iZmYiICsgdHJ1ZTwvZXJyb3I+OworICAgIGk5ID0gMT09MiA/IDMgOiA8ZXJyb3IgZGVzY3I9IkluY29tcGF0aWJsZSB0eXBlcy4gRm91bmQ6ICdudWxsJywgcmVxdWlyZWQ6ICdpbnQnIj5udWxsPC9lcnJvcj47CisgICAgT2JqZWN0IG85ID0gdHJ1ZSA/IDAgOiA8ZXJyb3IgZGVzY3I9IkluY29tcGF0aWJsZSB0eXBlcy4gRm91bmQ6ICdqYXZhLmxhbmcuT2JqZWN0JywgcmVxdWlyZWQ6ICdpbnQnIj5uZXcgT2JqZWN0KCk8L2Vycm9yPjsKKworCisKKyAgICBmaW5hbCBjaGFyIGNjb25zPScwJzsKKyAgICBzaG9ydCBzc3NzPWNjb25zOworICAgIGJ5dGUgYmJiYmJiPWNjb25zOworICAgIC8vIHRvbyBiaWcgY2hhciB0byBmaXQgaW4gc2hvcnQKKyAgICBmaW5hbCBjaGFyIGJpZ2NoYXI9J1x1ZmZmZic7CisgICAgPGVycm9yIGRlc2NyPSJJbmNvbXBhdGlibGUgdHlwZXMuIEZvdW5kOiAnY2hhcicsIHJlcXVpcmVkOiAnc2hvcnQnIj5zaG9ydCBzYmlnID0gYmlnY2hhcjs8L2Vycm9yPgorICB9CisKKyAgdm9pZCBnKGJvb2xlYW4gZiwgYnl0ZSBiKSB7CisgICAgICBieXRlIGMgPSAnXG4nOworICAgICAgPGVycm9yIGRlc2NyPSJJbmNvbXBhdGlibGUgdHlwZXMuIEZvdW5kOiAnaW50JywgcmVxdWlyZWQ6ICdieXRlJyI+Ynl0ZSBuZXh0ID0gZiA/IGIgOiAnXG4nOzwvZXJyb3I+CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZy9Jbmhlcml0RmluYWwuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nL0luaGVyaXRGaW5hbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU2ZTEyNjUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZy9Jbmhlcml0RmluYWwuamF2YQpAQCAtMCwwICsxLDEwIEBACisvLyBpbmhlcml0IGZyb20gZmluYWwKK3B1YmxpYyBjbGFzcyBhIGV4dGVuZHMgPGVycm9yIGRlc2NyPSJDYW5ub3QgaW5oZXJpdCBmcm9tIGZpbmFsICdmZiciPmZmPC9lcnJvcj4geworCisgIHZvaWQgZigpIHsKKyAgICBPYmplY3QgbyA9IG5ldyA8ZXJyb3IgZGVzY3I9IkNhbm5vdCBpbmhlcml0IGZyb20gZmluYWwgJ2ZmJyI+ZmY8L2Vycm9yPigpIHsgdm9pZCBnZygpe30gfTsKKyAgfQorfQorCitmaW5hbCBjbGFzcyBmZiB7Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZy9Jbml0aWFsaXplckNvbXBsZXRpb24uamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nL0luaXRpYWxpemVyQ29tcGxldGlvbi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJlMjcwYzAKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZy9Jbml0aWFsaXplckNvbXBsZXRpb24uamF2YQpAQCAtMCwwICsxLDEzNCBAQAorLy8vIGluaXRhbGl6ZXJzIGNvbXBsZXRpb24KK2ltcG9ydCBqYXZhLmlvLio7CitpbXBvcnQgamF2YS5uZXQuKjsKKworcHVibGljIGNsYXNzIGEgIHsKKworICA8ZXJyb3IgZGVzY3I9IkluaXRpYWxpemVyIG11c3QgYmUgYWJsZSB0byBjb21wbGV0ZSBub3JtYWxseSI+eworICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCk7CisgIH08L2Vycm9yPgorCisgIHN0YXRpYyA8ZXJyb3IgZGVzY3I9IkluaXRpYWxpemVyIG11c3QgYmUgYWJsZSB0byBjb21wbGV0ZSBub3JtYWxseSI+eworICAgIHRyeSB7CisgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigpOworICAgIH0KKyAgICBmaW5hbGx5IHsKKyAgICAgIHRocm93IG5ldyBOdWxsUG9pbnRlckV4Y2VwdGlvbigpOworICAgIH0KKyAgfTwvZXJyb3I+CisKKworfQorY2xhc3MgYTIgeworICB7IAorICAgIGlmICgxPT0yKSA8ZXJyb3IgZGVzY3I9IlVuaGFuZGxlZCBleGNlcHRpb246IGphdmEuaW8uSU9FeGNlcHRpb24iPnRocm93IG5ldyBJT0V4Y2VwdGlvbigpOzwvZXJyb3I+IAorICB9CisKKyAgPGVycm9yIGRlc2NyPSJVbmhhbmRsZWQgZXhjZXB0aW9uOiBqYXZhLmlvLklPRXhjZXB0aW9uIj5hMigpPC9lcnJvcj4ge30KK30KK2NsYXNzIGEzIHsKKyAgeyAKKyAgICBpZiAoMT09MikgPGVycm9yIGRlc2NyPSJVbmhhbmRsZWQgZXhjZXB0aW9uOiBqYXZhLm5ldC5Tb2NrZXRFeGNlcHRpb24iPnRocm93IG5ldyBTb2NrZXRFeGNlcHRpb24oKTs8L2Vycm9yPiAKKyAgfQorCisgIDxlcnJvciBkZXNjcj0iVW5oYW5kbGVkIGV4Y2VwdGlvbjogamF2YS5uZXQuU29ja2V0RXhjZXB0aW9uIj5hMygpIHRocm93cyBDb25uZWN0RXhjZXB0aW9uPC9lcnJvcj4ge30KK30KKworY2xhc3MgYiB7CisKKyAgeyBpZiAoMT09MikgdGhyb3cgbmV3IFNvY2tldEV4Y2VwdGlvbigpOyB9CisKKyAgYigpIHRocm93cyBJT0V4Y2VwdGlvbiAge30KK30KKworY2xhc3MgYTQgeworICAgIHsKKyAgICAgICAgaWYgKHRydWUpIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBhNCgpIHRocm93cyBFeGNlcHRpb24geworICAgIH0KK30KKworY2xhc3MgYTUgeworICBpbnQgaSA9IDxlcnJvciBkZXNjcj0iVW5oYW5kbGVkIGV4Y2VwdGlvbjogamF2YS5sYW5nLkNsYXNzTm90Rm91bmRFeGNlcHRpb24iPmYoKTs8L2Vycm9yPgorCisgIGludCBmKCkgdGhyb3dzIENsYXNzTm90Rm91bmRFeGNlcHRpb24geworICAgIHJldHVybiAwOworICB9Cit9CitjbGFzcyBhNiB7CisgIGludCBpID0gZigpOworCisgIGludCBmKCkgdGhyb3dzIENsYXNzTm90Rm91bmRFeGNlcHRpb24geworICAgIHJldHVybiAwOworICB9CisKKyAgYTYoKSB0aHJvd3MgQ2xhc3NOb3RGb3VuZEV4Y2VwdGlvbiB7CisgIH0KK30KKworY2xhc3MgYTcgeworPGVycm9yIGRlc2NyPSJJbml0aWFsaXplciBtdXN0IGJlIGFibGUgdG8gY29tcGxldGUgbm9ybWFsbHkiPnsKKyAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oKTsKKyAgICAgICAgICAgIH0gZmluYWxseSB7CisgICAgICAgICAgICB9CisgfTwvZXJyb3I+Cit9CisKK2NsYXNzIE15UnVudGltZUV4Y2VwdGlvbiBleHRlbmRzIFJ1bnRpbWVFeGNlcHRpb24ge30KKworY2xhc3MgR1VJQmFzZSB7CisgIEdVSUJhc2UgKCkgdGhyb3dzIE15UnVudGltZUV4Y2VwdGlvbiB7fQorfQorCitjbGFzcyBHVUkgZXh0ZW5kcyBHVUlCYXNlIHsKKworfQorCisKK2NsYXNzIGE4IHsKKyB7CisgICBhc3NlcnQgdHJ1ZTsKKyB9CisgeworICAgYXNzZXJ0IGZhbHNlOworIH0KKworfQorCitjbGFzcyBhOSB7CisKKyAgcHJpdmF0ZSBzdGF0aWMgaW50ZXJmYWNlIEFuSW50ZXJmYWNlIHt9CisKKyAgcHVibGljIEFuSW50ZXJmYWNlIGdldEFuSW50ZXJmYWNlKCkgeworICAgICAgICByZXR1cm4gbmV3IEFuSW50ZXJmYWNlKCkgeworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIDxlcnJvciBkZXNjcj0iVW5oYW5kbGVkIGV4Y2VwdGlvbjogamF2YS5pby5GaWxlTm90Rm91bmRFeGNlcHRpb24iPm5ldyBqYXZhLmlvLkZpbGVJbnB1dFN0cmVhbSgic29tZWZpbGUiKTwvZXJyb3I+OworICAgICAgICAgICAgfQorICAgICAgICB9OworICAgIH0KK30KKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KK2NsYXNzIEJhZFN0YXRpYyB7CisgICAgc3RhdGljIFN0cmluZyBmKCkgdGhyb3dzIENsYXNzTm90Rm91bmRFeGNlcHRpb24geworICAgICAgICByZXR1cm4gbnVsbDsKKyAgICB9CisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEZPTyA9IDxlcnJvciBkZXNjcj0iVW5oYW5kbGVkIGV4Y2VwdGlvbjogamF2YS5sYW5nLkNsYXNzTm90Rm91bmRFeGNlcHRpb24iPmYoKTs8L2Vycm9yPgorCisJcHVibGljIEJhZFN0YXRpYygpICB0aHJvd3MgQ2xhc3NOb3RGb3VuZEV4Y2VwdGlvbiB7CisJfQorfQorY2xhc3MgSCB7CisgICAgcHVibGljIEgoKSB0aHJvd3MgRmlsZU5vdEZvdW5kRXhjZXB0aW9uIHsKKyAgICB9CisKKyAgICBzdGF0aWMgeworICAgICAgICBpZih0cnVlKSB7ICAgICAgCisgICAgICAgICAgICA8ZXJyb3IgZGVzY3I9IlVuaGFuZGxlZCBleGNlcHRpb246IGphdmEuaW8uRmlsZU5vdEZvdW5kRXhjZXB0aW9uIj50aHJvdyBuZXcgRmlsZU5vdEZvdW5kRXhjZXB0aW9uKCk7PC9lcnJvcj4KKyAgICAgICAgfQorICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nL0luamVjdGVkQW5ub3RhdG9yLnhtbCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nL0luamVjdGVkQW5ub3RhdG9yLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZWZkZTkxCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmcvSW5qZWN0ZWRBbm5vdGF0b3IueG1sCkBAIC0wLDAgKzEsNSBAQAorPHggPHdhcm5pbmcgZGVzY3I9IkFBQVRUUiI+YWFhPSJkZGRkIjwvd2FybmluZz4+CisgICAgPGw+CisgICAgICA8d2FybmluZyBkZXNyPSJFTlRJVFkiPiZuYnNwOzwvd2FybmluZz4KKyAgICA8L2w+Cis8L3g+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmcvSW5uZXJDbGFzc2VzU2hhZG93aW5nLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZy9Jbm5lckNsYXNzZXNTaGFkb3dpbmcuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lODdjNWRiCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmcvSW5uZXJDbGFzc2VzU2hhZG93aW5nLmphdmEKQEAgLTAsMCArMSw5OCBAQAoraW1wb3J0IGphdmEuaW8uKjsKKworcHVibGljIGNsYXNzIE1haW4geworICAgIHN0YXRpYyBpbnRlcmZhY2UgQQorICAgIHsKKyAgICAgICAgaW50ZXJmYWNlIEIgIHsgfQorICAgIH0KKworICAgIHN0YXRpYyBjbGFzcyBEIGltcGxlbWVudHMgQQorICAgIHsKKyAgICAgICAgcHJpdmF0ZSBpbnRlcmZhY2UgQiB7IH0KKyAgICB9CisKKworICAgIHN0YXRpYyBjbGFzcyBDIGV4dGVuZHMgRCBpbXBsZW1lbnRzIEEKKyAgICB7CisgICAgICAgIGludGVyZmFjZSBFIGV4dGVuZHMgQiB7IH0KKyAgICAgICAgaW50ZXJmYWNlIEUxIGV4dGVuZHMgRC5CIHsgfQorICAgICAgICBpbnRlcmZhY2UgRTIgZXh0ZW5kcyBBLkIgeyB9CisgICAgfQorCit9CisKKworCitjbGFzcyBNYWluMSB7CisgICAgc3RhdGljIGludGVyZmFjZSBBCisgICAgeworICAgICAgICBpbnRlcmZhY2UgQiAgeyB9CisgICAgfQorCisgICAgc3RhdGljIGNsYXNzIEQgaW1wbGVtZW50cyBBCisgICAgeworICAgICAgICBpbnRlcmZhY2UgQiB7IH0KKyAgICB9CisKKworICAgIHN0YXRpYyBjbGFzcyBDIGV4dGVuZHMgRCBpbXBsZW1lbnRzIEEKKyAgICB7CisgICAgICAgIGludGVyZmFjZSBFIGV4dGVuZHMgPGVycm9yIGRlc2NyPSJSZWZlcmVuY2UgdG8gJ0InIGlzIGFtYmlndW91cywgYm90aCAnTWFpbjEuRC5CJyBhbmQgJ01haW4xLkEuQicgbWF0Y2giPkI8L2Vycm9yPiB7IH0KKyAgICAgICAgaW50ZXJmYWNlIEUxIGV4dGVuZHMgRC5CIHsKKyAgICAgICAgfQorICAgICAgICBpbnRlcmZhY2UgRTIgZXh0ZW5kcyBBLkIgeyB9CisgICAgfQorCit9CisKKworaW50ZXJmYWNlIEEKK3sKKyAgICBpbnRlcmZhY2UgQiAgeyB9CisgICAgaW50ZXJmYWNlIEIxICB7IH0KK30KKworY2xhc3MgRCBpbXBsZW1lbnRzIEEKK3sKKyAgICBwcml2YXRlIGludGVyZmFjZSBCIHsgfQorICAgIGludGVyZmFjZSBCMSB7IH0KK30KKworCitjbGFzcyBDIGV4dGVuZHMgRCBpbXBsZW1lbnRzIEEKK3sKKyAgICBpbnRlcmZhY2UgRSBleHRlbmRzIEIgeyB9CisgICAgaW50ZXJmYWNlIEUxIGV4dGVuZHMgRC48ZXJyb3IgZGVzY3I9IidELkInIGhhcyBwcml2YXRlIGFjY2VzcyBpbiAnRCciPkI8L2Vycm9yPiB7IH0KKyAgICBpbnRlcmZhY2UgRTIgZXh0ZW5kcyBBLkIgeyB9CisKKyAgICBpbnRlcmZhY2UgRiBleHRlbmRzIDxlcnJvciBkZXNjcj0iUmVmZXJlbmNlIHRvICdCMScgaXMgYW1iaWd1b3VzLCBib3RoICdELkIxJyBhbmQgJ0EuQjEnIG1hdGNoIj5CMTwvZXJyb3I+IHsgfQorICAgIGludGVyZmFjZSBGMSBleHRlbmRzIEQuQjEgeyB9CisgICAgaW50ZXJmYWNlIEYyIGV4dGVuZHMgQS5CMSB7IH0KKworfQorCisKK2NsYXNzIEFPIHt9CitjbGFzcyBCQU8geworICAgIEFPIGJhciA9IG5ldyBBTygpOworICAgIHsKKyAgICAgICAgYmFyLmZvbygpOworICAgIH0KKyAgICBwcml2YXRlIGNsYXNzIEFPIHsKKyAgICAgICAgdm9pZCBmb28oKXt9CisgICAgfQorCit9CisKK2NsYXNzIFdpdGhGaWxlSW5wdXRTdHJlYW0geworICBwcml2YXRlIHN0YXRpYyBmaW5hbCBSdW5uYWJsZSBydW5uID0gbmV3IFJ1bm5hYmxlKCkgeworICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKKyAgICAgIG5ldyBGaWxlSW5wdXRTdHJlYW0oInBhdGgiKTsKKyAgICB9CisgIH07CisgIAorICBwcml2YXRlIHN0YXRpYyBjbGFzcyBGaWxlSW5wdXRTdHJlYW0geworICAgIHByaXZhdGUgRmlsZUlucHV0U3RyZWFtKFN0cmluZyBzdHIpIHsKKyAgICB9CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZy9JbnN0YW50aWF0ZUFic3RyYWN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZy9JbnN0YW50aWF0ZUFic3RyYWN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWJmMWJlYgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nL0luc3RhbnRpYXRlQWJzdHJhY3QuamF2YQpAQCAtMCwwICsxLDM3IEBACisvLyBpbnN0YW50aWF0ZSBhYnN0cmFjdAorcHVibGljIGNsYXNzIGEgeworICB2b2lkIGYoKSB7CisgICAgPGVycm9yIGRlc2NyPSInaWknIGlzIGFic3RyYWN0OyBjYW5ub3QgYmUgaW5zdGFudGlhdGVkIj5uZXcgaWkoKTwvZXJyb3I+OworCisgICAgPGVycm9yIGRlc2NyPSInYzEnIGlzIGFic3RyYWN0OyBjYW5ub3QgYmUgaW5zdGFudGlhdGVkIj5uZXcgYzEoKTwvZXJyb3I+OworCisgICAgbmV3IDxlcnJvciBkZXNjcj0iQ2xhc3MgJ0Fub255bW91cyBjbGFzcyBkZXJpdmVkIGZyb20gYzEnIG11c3QgZWl0aGVyIGJlIGRlY2xhcmVkIGFic3RyYWN0IG9yIGltcGxlbWVudCBhYnN0cmFjdCBtZXRob2QgJ2YxKGludCknIGluICdjMSciPmMxPC9lcnJvcj4oKSB7CisgICAgICBwdWJsaWMgdm9pZCBmMigpIHt9CisgICAgfTsKKworICAgIG5ldyA8ZXJyb3IgZGVzY3I9IkNsYXNzICdBbm9ueW1vdXMgY2xhc3MgZGVyaXZlZCBmcm9tIGMxJyBtdXN0IGVpdGhlciBiZSBkZWNsYXJlZCBhYnN0cmFjdCBvciBpbXBsZW1lbnQgYWJzdHJhY3QgbWV0aG9kICdmMShpbnQpJyBpbiAnYzEnIj5jMTwvZXJyb3I+KCkgeworICAgICAgcHVibGljIHZvaWQgZjEoKSB7fQorICAgIH07CisKKyAgICBuZXcgPGVycm9yIGRlc2NyPSJDbGFzcyAnQW5vbnltb3VzIGNsYXNzIGRlcml2ZWQgZnJvbSBjMScgbXVzdCBlaXRoZXIgYmUgZGVjbGFyZWQgYWJzdHJhY3Qgb3IgaW1wbGVtZW50IGFic3RyYWN0IG1ldGhvZCAnZjIoKScgaW4gJ0Fub255bW91cyBjbGFzcyBkZXJpdmVkIGZyb20gYzEnIj5jMTwvZXJyb3I+KCkgeworICAgICAgcHVibGljIHZvaWQgZjEoaW50IGkpIHt9CisgICAgICBwdWJsaWMgPGVycm9yIGRlc2NyPSJBYnN0cmFjdCBtZXRob2QgaW4gbm9uLWFic3RyYWN0IGNsYXNzIj5hYnN0cmFjdDwvZXJyb3I+IHZvaWQgZjIoKTsKKyAgICB9OworCisKKyAgICBuZXcgYzEoKSB7CisgICAgICBwdWJsaWMgdm9pZCBmMShpbnQgaSkge30KKyAgICB9OworICAgIG5ldyBpaSgpIHsgcHVibGljIHZvaWQgZjEoKXt9IHB1YmxpYyB2b2lkIGYyKCl7fSB9OworCisgIH0KK30KK2Fic3RyYWN0IGNsYXNzIGMxIHsKKyAgYWJzdHJhY3QgcHVibGljIHZvaWQgZjEoaW50IGkpOworfQorCitpbnRlcmZhY2UgaWkgeworICBhYnN0cmFjdCB2b2lkIGYxKCk7CisgIHZvaWQgZjIoKTsKK30KKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmcvSW50ZXJmYWNlLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZy9JbnRlcmZhY2UuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZDNjOTg5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmcvSW50ZXJmYWNlLmphdmEKQEAgLTAsMCArMSwzNSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDAwLTIwMTIgSmV0QnJhaW5zIHMuci5vLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KK2ludGVyZmFjZSBpIDxlcnJvciBkZXNjcj0iTm8gaW1wbGVtZW50cyBjbGF1c2UgYWxsb3dlZCBmb3IgaW50ZXJmYWNlIj5pbXBsZW1lbnRzIFJ1bm5hYmxlPC9lcnJvcj4ge30KKworaW50ZXJmYWNlIGlpIHt9CitjbGFzcyBjcyBleHRlbmRzIDxlcnJvciBkZXNjcj0iTm8gaW50ZXJmYWNlIGV4cGVjdGVkIGhlcmUiPmlpPC9lcnJvcj4ge30KK2ludGVyZmFjZSBpcyBleHRlbmRzIGlpIHt9CisKK2NsYXNzIGNzMiBpbXBsZW1lbnRzIDxlcnJvciBkZXNjcj0iSW50ZXJmYWNlIGV4cGVjdGVkIGhlcmUiPmNzPC9lcnJvcj4ge30KK2ludGVyZmFjZSBpczMgZXh0ZW5kcyA8ZXJyb3IgZGVzY3I9IkludGVyZmFjZSBleHBlY3RlZCBoZXJlIj5jczwvZXJyb3I+IHt9CisKK2Fic3RyYWN0IGNsYXNzIEV4ZXJjaXMgeworICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKCkgeworICAgICAgICBPYmplY3QgbyA9IDxlcnJvciBkZXNjcj0iQ2xhc3MgbmFtZSBleHBlY3RlZCBoZXJlIj5qYXZhLmxhbmc8L2Vycm9yPi50aGlzOworCisgICAgICAgIG5ldyBSdW5uYWJsZSgpIHsKKyAgICAgICAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKKyAgICAgICAgICAgICAgICA8ZXJyb3IgZGVzY3I9IidqYXZhLmxhbmcuUnVubmFibGUnIGlzIG5vdCBhbiBlbmNsb3NpbmcgY2xhc3MiPlJ1bm5hYmxlLnRoaXM8L2Vycm9yPi5ydW4oKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZy9JbnZhbGlkRXhwcmVzc2lvbnMuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nL0ludmFsaWRFeHByZXNzaW9ucy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc5YWIyYmQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZy9JbnZhbGlkRXhwcmVzc2lvbnMuamF2YQpAQCAtMCwwICsxLDExMiBAQAorLy8gaW52YWxpZCBleHByZXNzaW9ucworcHVibGljIGNsYXNzIGExMiB7CisgIHN0YXRpYyBpbnQgaTsKKworICBpbnQgZihpbnQgaSkgeworICAgIDxlcnJvciBkZXNjcj0iTm90IGEgc3RhdGVtZW50Ij4xOzwvZXJyb3I+CisgICAgPGVycm9yIGRlc2NyPSJOb3QgYSBzdGF0ZW1lbnQiPjE9PTI7PC9lcnJvcj4KKyAgICA8ZXJyb3IgZGVzY3I9Ik5vdCBhIHN0YXRlbWVudCI+MT09MiA/IDEgOiAzOzwvZXJyb3I+CisgICAgPGVycm9yIGRlc2NyPSJOb3QgYSBzdGF0ZW1lbnQiPmYoMSkgPT0gMzs8L2Vycm9yPgorICAgIDxlcnJvciBkZXNjcj0iTm90IGEgc3RhdGVtZW50Ij4xLDI7PC9lcnJvcj4KKyAgICA8ZXJyb3IgZGVzY3I9Ik5vdCBhIHN0YXRlbWVudCI+fjE7PC9lcnJvcj4KKyAgICA8ZXJyb3IgZGVzY3I9Ik5vdCBhIHN0YXRlbWVudCI+ISgxPT0yKTs8L2Vycm9yPgorICAgIDxlcnJvciBkZXNjcj0iTm90IGEgc3RhdGVtZW50Ij5uZXcgaW50WzBdOzwvZXJyb3I+CisgICAgPGVycm9yIGRlc2NyPSJOb3QgYSBzdGF0ZW1lbnQiPm5ldyBhMTJbMTBdOzwvZXJyb3I+CisgICAgPGVycm9yIGRlc2NyPSJOb3QgYSBzdGF0ZW1lbnQiPm5ldyBhMTJbXXt9OzwvZXJyb3I+CisgICAgPGVycm9yIGRlc2NyPSJOb3QgYSBzdGF0ZW1lbnQiPm5ldyBpbnRbXXsxfTs8L2Vycm9yPgorICAgIDxlcnJvciBkZXNjcj0iTm90IGEgc3RhdGVtZW50Ij5uZXcgU3RyaW5nW117bmV3IFN0cmluZygpfTs8L2Vycm9yPgorICAgIGlmIChpPT0xKQorICAgICAgPGVycm9yIGRlc2NyPSJOb3QgYSBzdGF0ZW1lbnQiPlN0cmluZyBzMDAgPSAiIjs8L2Vycm9yPgorICAgIGZvciAoOzspCisgICAgICA8ZXJyb3IgZGVzY3I9Ik5vdCBhIHN0YXRlbWVudCI+U3RyaW5nIHMwMSA9ICIiOzwvZXJyb3I+CisKKyAgICAKKyAgICBmb3IgKDxlcnJvciBkZXNjcj0iTm90IGEgc3RhdGVtZW50Ij4xPT0yLGk9Mzs8L2Vycm9yPiBpPDM7IDxlcnJvciBkZXNjcj0iTm90IGEgc3RhdGVtZW50Ij4hKDE9PTIpPC9lcnJvcj4pOworCisgICAgbGFiZWwyOgorICAgICAgICA8ZXJyb3IgZGVzY3I9Ik5vdCBhIHN0YXRlbWVudCI+aW50IGtzZGZnZGY7PC9lcnJvcj4KKworCisgICAgaW50IGkxPTMsIGc9NTsKKyAgICBnKys7CisgICAgKytnOworICAgIGZvciAoaW50IGs9MSxsPTM7IGs8MzsgaysrLGwtLSkgezt9OworICAgIGNsYXNzIHMge30KKyAgICBuZXcgcygpIHsgdm9pZCBmKCl7fX07CisgICAgcmV0dXJuIDM7CisgIH0KKworCisKKyAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKyAgdm9pZCBmKCkgeworICAgIGExMiBhW10gPSBuZXcgYTEyWzRdOworICAgIGludFtdIGFpID0gbnVsbDsKKworICAgIDxlcnJvciBkZXNjcj0iVmFyaWFibGUgZXhwZWN0ZWQiPjU8L2Vycm9yPiA9IDU7CisgICAgPGVycm9yIGRlc2NyPSJWYXJpYWJsZSBleHBlY3RlZCI+NTwvZXJyb3I+Kys7CisgICAgKys8ZXJyb3IgZGVzY3I9IlZhcmlhYmxlIGV4cGVjdGVkIj41PC9lcnJvcj47CisgICAgPGVycm9yIGRlc2NyPSJWYXJpYWJsZSBleHBlY3RlZCI+NTwvZXJyb3I+ICs9IDU7CisKKyAgICA8ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIG1ldGhvZCAnZm9vMTIzVW5yZXNvbHZlZCg/KSciPmZvbzEyM1VucmVzb2x2ZWQ8L2Vycm9yPig8ZXJyb3IgZGVzY3I9IkV4cHJlc3Npb24gZXhwZWN0ZWQiPlN0cmluZzwvZXJyb3I+KTsKKyAgICA8ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIG1ldGhvZCAnZm9vMTIzVW5yZXNvbHZlZCg/KSciPmZvbzEyM1VucmVzb2x2ZWQ8L2Vycm9yPig8ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAneHh4eCciPnh4eHg8L2Vycm9yPik7CisKKyAgICA8ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIG1ldGhvZCAneHh4eHh4KD8pJyI+eHh4eHh4PC9lcnJvcj4oPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ3h4eHh4eCciPnh4eHh4eDwvZXJyb3I+KTsKKworICAgIC8vIGluY29tcGxldGUgY29kZSBzaG91bGQgbm90IGNhdXNlICdleHByIGV4cGVjdGVkJworICAgIE9iamVjdDxlcnJvciBkZXNjcj0iJzsnIGV4cGVjdGVkIj4gPC9lcnJvcj4KKworCisgICAgPGVycm9yIGRlc2NyPSJBcnJheSB0eXBlIGV4cGVjdGVkOyBmb3VuZDogJ2ludCciPjQ8L2Vycm9yPlsxXSA9IDU7CisgICAgYVs8ZXJyb3IgZGVzY3I9IkluY29tcGF0aWJsZSB0eXBlcy4gRm91bmQ6ICdqYXZhLmxhbmcuU3RyaW5nJywgcmVxdWlyZWQ6ICdpbnQnIj4iZCI8L2Vycm9yPl0gPSBudWxsOworCisgICAgPGVycm9yIGRlc2NyPSJBcnJheSB0eXBlIGV4cGVjdGVkOyBmb3VuZDogJ2ExMiciPmFbMF08L2Vycm9yPlsxXSA9IDU7CisgICAgPGVycm9yIGRlc2NyPSJBcnJheSB0eXBlIGV4cGVjdGVkOyBmb3VuZDogJ2ludCciPmk8L2Vycm9yPlswXSA9IDU7CisgICAgaSA9IGFpWzxlcnJvciBkZXNjcj0iSW5jb21wYXRpYmxlIHR5cGVzLiBGb3VuZDogJ2ExMicsIHJlcXVpcmVkOiAnaW50JyI+YVsxXTwvZXJyb3I+XTsKKworICAgIGZpbmFsIGExMltdIGExMmEgPSBuZXcgYTEyWzxlcnJvciBkZXNjcj0iSW5jb21wYXRpYmxlIHR5cGVzLiBGb3VuZDogJ251bGwnLCByZXF1aXJlZDogJ2ludCciPntudWxsfTwvZXJyb3I+XTsKKyAgICBpbnRbXSBpYXJyID0gbmV3IGludFs8ZXJyb3IgZGVzY3I9IkluY29tcGF0aWJsZSB0eXBlcy4gRm91bmQ6ICdudWxsJywgcmVxdWlyZWQ6ICdpbnQnIj57MH08L2Vycm9yPl07CisKKworICAgIG5ldyBTdHJpbmdbPGVycm9yIGRlc2NyPSJJbmNvbXBhdGlibGUgdHlwZXMuIEZvdW5kOiAnamF2YS5sYW5nLlN0cmluZycsIHJlcXVpcmVkOiAnaW50JyI+ImQiPC9lcnJvcj5dOworICAgIG5ldyBTdHJpbmdbPGVycm9yIGRlc2NyPSJJbmNvbXBhdGlibGUgdHlwZXMuIEZvdW5kOiAnZG91YmxlJywgcmVxdWlyZWQ6ICdpbnQnIj4xLjE8L2Vycm9yPl0KKyAgICAgICAgICAgICAgWzxlcnJvciBkZXNjcj0iSW5jb21wYXRpYmxlIHR5cGVzLiBGb3VuZDogJ2ExMicsIHJlcXVpcmVkOiAnaW50JyI+dGhpczwvZXJyb3I+XTsKKworICAgIGFbMF0gPSBudWxsOworICAgIChhKVsoMSldLmkgPSAzOworICAgICgoIGkpICkgPSAoNSk7CisgICAgYTEyLmkgPSAwOworICAgIGFycigpWzBdID0gMTsKKyAgICBuZXcgaW50W10geyAxLDN9IFswXSA9IDI7CisgICAgT2JqZWN0W10gdmFyID0gbnVsbDsKKyAgICBpID0gdmFyLmxlbmd0aDsKKworICAgIC8vIGFycmF5IGluaXRpYWxpemVycworICAgIHZhciA9IDxlcnJvciBkZXNjcj0iQXJyYXkgaW5pdGlhbGl6ZXIgaXMgbm90IGFsbG93ZWQgaGVyZSI+eyBudWxsLCBudWxsIH08L2Vycm9yPjsKKyAgICBPYmplY3QgdmFyMSA9IDxlcnJvciBkZXNjcj0iQXJyYXkgaW5pdGlhbGl6ZXIgaXMgbm90IGFsbG93ZWQgaGVyZSI+eyBudWxsLCBudWxsIH08L2Vycm9yPjsKKyAgICBpbnRbXSB2YXIyID0geyAxLDIgfTsKKyAgICB2YXIyID0gbmV3IGludFtdIHsgMiwgNH07CisgICAgaW50W11bXSBpaTIgPSB7IHsgMSwyfSwgezR9IH07CisKKyAgfQorICA8ZXJyb3IgZGVzY3I9IklsbGVnYWwgdHlwZTogJ3ZvaWQnIj52b2lkPC9lcnJvcj5bXSBmdigpIHsKKyAgICAgaWYgKDE9PTIpIHJldHVybiBuZXcgPGVycm9yIGRlc2NyPSJJbGxlZ2FsIHR5cGU6ICd2b2lkJyI+dm9pZDwvZXJyb3I+WzBdOworICAgICByZXR1cm4gbnVsbDsKKyAgfQorCisgIGludFtdIGFycigpIHsgcmV0dXJuIG5ldyBpbnRbMF07IH0KKworICBwdWJsaWMgPGVycm9yIGRlc2NyPSJJbnZhbGlkIG1ldGhvZCBkZWNsYXJhdGlvbjsgcmV0dXJuIHR5cGUgcmVxdWlyZWQiPmZvbzwvZXJyb3I+KCkgeworICB9CisKKyAgeworICAgIG5ldyBPYmplY3QoKSB7CisgICAgICA8ZXJyb3IgZGVzY3I9IkludmFsaWQgbWV0aG9kIGRlY2xhcmF0aW9uOyByZXR1cm4gdHlwZSByZXF1aXJlZCI+T2JqZWN0PC9lcnJvcj4oKSB7fQorICAgIH07CisgIH0KKworICAvLyBkbyBub3Qgd2FybiBhYm91dCBpbGxlZ2FsIHR5cGUgaW4gaW5jb21wbGV0ZSBkZWNsYXJhdGlvbnMgKGh0dHA6Ly93d3cuaW50ZWxsaWoubmV0L3RyYWNrZXIvaWRlYS92aWV3U0NSP3B1YmxpY0lkPTk1ODYpCisgIHZvaWQgZm9vPEVPTEVycm9yIGRlc2NyPSInOycgZXhwZWN0ZWQiPjwvRU9MRXJyb3I+Cit9CisKKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmcvSmF2YWRvYy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmcvSmF2YWRvYy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRhNzNlYzIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZy9KYXZhZG9jLmphdmEKQEAgLTAsMCArMSwzOSBAQAorY2xhc3MgYSAgeworICAvKipwZXJpb2QuCisgICogQHJldHVybiB4CisgICovCisgIGludCBmKCkgeworICAgIHJldHVybiAwOworICB9CisgIC8qKnBlcmlvZC4KKyAgKiBAcmV0dXJuIDx0dD54PC90dD4gd3RmID8KKyAgKi8KKyAgaW50IGYyKCkgeworICAgIHJldHVybiAwOworICB9CisKKyAgLyoqcGVyaW9kLgorICAqIEByZXR1cm4KKyAgKiAgIHRydWUgaWYgc29tZW9uZSB3YW50cworICAqLworICBpbnQgZjMoKSB7CisgICAgcmV0dXJuIDA7CisgIH0KKworCisgIC8qKnBlcmlvZC4KKyAgKiBAcGFyYW0gaSBkZXNjcmlwdGlvbiBnb2VzIGhlcmUKKyAgKiA8d2FybmluZz5AcmV0dXJuPC93YXJuaW5nPgorICAqLworICBpbnQgZihpbnQgaSkgeworICAgICByZXR1cm4gaTsKKyAgfQorCisgIAorICAgICAgLyoqCisgICAgICAgICogQHNlZSBsb2NhbFZhcgorICAgICAgICAqLworICAgICAgIHN0YXRpYyBTdHJpbmcgS0VZX0ZPUl9WQVI9ImluZGV4LmxvY2FsVmFyIjsKKyAgICAgICBTdHJpbmcgbG9jYWxWYXI7Cit9CisKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nL0xhYmVscy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmcvTGFiZWxzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjk4ODI0YwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nL0xhYmVscy5qYXZhCkBAIC0wLDAgKzEsNjkgQEAKKy8vIGxhYmVscworaW1wb3J0IGphdmEuaW8uKjsKK2ltcG9ydCBqYXZhLm5ldC4qOworCitjbGFzcyBhIHsKKyB2b2lkIGYoKSB7CisgICA8ZXJyb3IgZGVzY3I9IkxhYmVsIHdpdGhvdXQgc3RhdGVtZW50Ij5hOjwvZXJyb3I+CisgfQorIHZvaWQgZjEoKSB7CisgICBhOgorICAgPGVycm9yIGRlc2NyPSJMYWJlbCB3aXRob3V0IHN0YXRlbWVudCI+Yjo8L2Vycm9yPgorIH0KKyB2b2lkIGYyKCkgeworICAgYTogcmV0dXJuOworIH0KKyB2b2lkIGYzKCkgeworICAgYTogcmV0dXJuOworIH0KKyB2b2lkIGY0KCkgeworICAgYTogCisgICBiOgorICAgIHJldHVybjsKKyB9Cisgdm9pZCBmNSgpIHsKKyAgIGE6IAorICAgIGlmICg0PT01KSByZXR1cm47CisgICBiOiA7CisgfQorIHZvaWQgZjYoKSB7CisgICBhOiA7CisgfQorfSAJCisKKworY2xhc3MgQWxyZWFkeUluVXNlIHsKKyB2b2lkIGYwKCkgeworICAgYTogeworICAgICAgIGYwKCk7CisgICAgICAgPGVycm9yIGRlc2NyPSJMYWJlbCAnYScgYWxyZWFkeSBpbiB1c2UiPmE8L2Vycm9yPjogZjAoKTsKKyAgIH0KKworIH0KKyB2b2lkIGYxKCkgeworICAgYToKKyAgIHRyeSB7CisgICAgIGYxKCk7CisgICAgIDxlcnJvciBkZXNjcj0iTGFiZWwgJ2EnIGFscmVhZHkgaW4gdXNlIj5hPC9lcnJvcj46CisgICAgIGYxKCk7CisgICB9CisgICBmaW5hbGx5IHsKKyAgIH0KKyB9Cisgdm9pZCBmMigpIHsKKyAgeworICAgIGE6OworICB9CisgIHsKKyAgICBhOjsKKyAgfQorIH0KKyB2b2lkIGYzKCkgeworICAgYToKKyAgIG5ldyBPYmplY3QoKSB7CisgICAgIHZvaWQgZigpIHsKKyAgICAgIGE6OworICAgICB9CisgICB9OworIH0KK30gICAgICAgClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmcvTG9jYWxWYXJpYWJsZUluaXRpYWxpemF0aW9uLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZy9Mb2NhbFZhcmlhYmxlSW5pdGlhbGl6YXRpb24uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZGRhYTFkCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmcvTG9jYWxWYXJpYWJsZUluaXRpYWxpemF0aW9uLmphdmEKQEAgLTAsMCArMSw0MTggQEAKK2ltcG9ydCBqYXZhLmlvLio7CitpbXBvcnQgamF2YS5uZXQuKjsKK2ltcG9ydCBqYXZhLnV0aWwuKjsKKworcHVibGljIGNsYXNzIGEgIHsKKyAgc3RhdGljIGZpbmFsIGEgYWk7CisgIGludCBpaTsKKworICBzdGF0aWMgeworICAgIDxlcnJvciBkZXNjcj0iVmFyaWFibGUgJ2FpJyBtaWdodCBub3QgaGF2ZSBiZWVuIGluaXRpYWxpemVkIj5haTwvZXJyb3I+LmlpID0gNDsKKyAgICBhaSA9IG51bGw7CisgIH0KKworICB2b2lkIGYxKGludCBpKSB7CisgICAgaW50IGo7CisgICAgaSA9IDxlcnJvciBkZXNjcj0iVmFyaWFibGUgJ2onIG1pZ2h0IG5vdCBoYXZlIGJlZW4gaW5pdGlhbGl6ZWQiPmo8L2Vycm9yPjsKKyAgfQorICB2b2lkIGYyKGludCBpKSB7CisgICAgaW50IGo7CisgICAgaWYgKGkgPT0yKSBqID0gNDsKKyAgICBpID0gPGVycm9yIGRlc2NyPSJWYXJpYWJsZSAnaicgbWlnaHQgbm90IGhhdmUgYmVlbiBpbml0aWFsaXplZCI+ajwvZXJyb3I+OworICB9CisgIHZvaWQgZjMoaW50IGkpIHsKKyAgICBpbnQgajsKKyAgICBpZiAoaT09MyAmJiAoaj1pKSAhPSA5KSB7CisgICAgICBpID0gaisyOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgIGkgLT0gLTEgLSA8ZXJyb3IgZGVzY3I9IlZhcmlhYmxlICdqJyBtaWdodCBub3QgaGF2ZSBiZWVuIGluaXRpYWxpemVkIj5qPC9lcnJvcj47CisgICAgfQorICB9CisgIHZvaWQgZjQoaW50IGkpIHsKKworICAgZmluYWwgaW50IGRkOworCisgICBSdW5uYWJsZSByID0gbmV3IFJ1bm5hYmxlKCkgeworICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKKyAgICAgaW50IGogPSA8ZXJyb3IgZGVzY3I9IlZhcmlhYmxlICdkZCcgbWlnaHQgbm90IGhhdmUgYmVlbiBpbml0aWFsaXplZCI+ZGQ8L2Vycm9yPjsKKyAgICB9CisgICB9OworCisgICBpZiAoaSA9PSAzKSBkZCA9IDU7CisgICBlbHNlIGRkID0gNjsKKyAgfQorICB2b2lkIGY1KGludCBpKSB7CisgICBmaW5hbCBpbnQgazsKKyAgIGNsYXNzIGlubmVyIHsgCisgICAgIHZvaWQgZigpIHsKKyAgICAgICBpbnQgaiA9IDxlcnJvciBkZXNjcj0iVmFyaWFibGUgJ2snIG1pZ2h0IG5vdCBoYXZlIGJlZW4gaW5pdGlhbGl6ZWQiPms8L2Vycm9yPjsKKyAgICAgfQorICAgfQorCisgIH0KKyAgICB2b2lkIGY2KGludCBhKXsKKyAgICAgIE9iamVjdFtdIHZhcjsKKyAgICAgIGlmIChhID4gMCl7CisgICAgICB9CisgICAgICBlbHNleworICAgICAgICB2YXIgPSBuZXcgT2JqZWN0WzFdOworICAgICAgfQorICAgICAgU3lzdGVtLm91dC5wcmludGxuKDxlcnJvciBkZXNjcj0iVmFyaWFibGUgJ3ZhcicgbWlnaHQgbm90IGhhdmUgYmVlbiBpbml0aWFsaXplZCI+dmFyPC9lcnJvcj4pOworICAgIH0KKworCisgICAgdm9pZCBmNygpIHsKKyAgICAgICAgaW50IGs7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBrPTA7CisgICAgICAgIH0gZmluYWxseSB7CisgICAgICAgICAgICBpZiAoPGVycm9yIGRlc2NyPSJWYXJpYWJsZSAnaycgbWlnaHQgbm90IGhhdmUgYmVlbiBpbml0aWFsaXplZCI+azwvZXJyb3I+PT0wKSB7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICB2b2lkIGY4KGludCBuKQorICAgIHsKKyAgICAgICAgaW50IGs7CisgICAgICAgIHdoaWxlIChuIDwgNCkgeworICAgICAgICAgICAgayA9IG47CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAvLyBrIGlzIG5vdCAiZGVmaW5pdGVseSBhc3NpZ25lZCIgYmVmb3JlIHRoaXMKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKDxlcnJvciBkZXNjcj0iVmFyaWFibGUgJ2snIG1pZ2h0IG5vdCBoYXZlIGJlZW4gaW5pdGlhbGl6ZWQiPms8L2Vycm9yPik7ICAKKyAgICB9CisKKyAgICB2b2lkIGY5KCkgeworICAgICAgICBmaW5hbCBpbnQgazsKKyAgICAgICAgPGVycm9yIGRlc2NyPSJWYXJpYWJsZSAnaycgbWlnaHQgbm90IGhhdmUgYmVlbiBpbml0aWFsaXplZCI+azwvZXJyb3I+Kz0xOworICAgIH0KKyAgICB2b2lkIGYxMCgpIHsKKyAgICAgICAgZmluYWwgaW50IGs7CisgICAgICAgIDxlcnJvciBkZXNjcj0iVmFyaWFibGUgJ2snIG1pZ2h0IG5vdCBoYXZlIGJlZW4gaW5pdGlhbGl6ZWQiPms8L2Vycm9yPisrOworICAgICAgICBpbnQgaSA9IDxlcnJvciBkZXNjcj0iVmFyaWFibGUgJ2knIG1pZ2h0IG5vdCBoYXZlIGJlZW4gaW5pdGlhbGl6ZWQiPmk8L2Vycm9yPiArIDE7CisgICAgICAgIGludCBqID0gKGo9MikgPT0gMSB8fCBqPT0wID8gMSA6IGo7CisgICAgfQorCisgICAgdm9pZCBmMTEoKSB7CisgICAgICAgIGludCB4ID0gMDsKKyAgICAgICAgc3dpdGNoICh4KSB7CisgICAgICAgICAgICBjYXNlIDA6CisgICAgICAgICAgICAgICAgaW50IHkgPSAxOworICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbih5KTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgMToKKyAgICAgICAgICAgICAgICBpbnQgeiA9IDxlcnJvciBkZXNjcj0iVmFyaWFibGUgJ3knIG1pZ2h0IG5vdCBoYXZlIGJlZW4gaW5pdGlhbGl6ZWQiPnk8L2Vycm9yPjsKKyAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oeik7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisgICAgdm9pZCBmMTIoKSB7CisgICAgICAgIHN3aXRjaCAoMCkgeworICAgICAgICBjYXNlIDA6CisgICAgICAgICAgICBpbnQgaz0wOworICAgICAgICBjYXNlIDE6CisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oPGVycm9yIGRlc2NyPSJWYXJpYWJsZSAnaycgbWlnaHQgbm90IGhhdmUgYmVlbiBpbml0aWFsaXplZCI+azwvZXJyb3I+KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHB1YmxpYyBjbGFzcyBBSW5uZXIgeworICAgICAgY2xhc3MgQUkyIHt9CisgICAgICBwcml2YXRlIEFJMiBteVRpdGxlUmVuZGVyZXIgPSBuZXcgQUkyKCkgeworICAgICAgICBwcml2YXRlIFN0cmluZyBteUxhYmVsID0gIiI7CisKKyAgICAgICAgcHVibGljIFN0cmluZyBnZXRUcmVlQ2VsbFJlbmRlcmVyQ29tcG9uZW50KFN0cmluZyB2YWx1ZSkgeworICAgICAgICAgICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgU3RyaW5nKSB7CisgICAgICAgICAgICAgICAgaW50IGkgPSBteUxhYmVsLmxlbmd0aCgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgIH0KKyAgICAgIH07CisgICAgfQorCisgICAgdm9pZCBmMTMoKSB7CisgICAgICAgIGludCBpIDsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIGkgPSAwOworICAgICAgICAgICAgaWYgKGk9PTApIHRocm93IG5ldyBJT0V4Y2VwdGlvbigpOworICAgICAgICB9CisgICAgICAgIGNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICBpZiAoPGVycm9yIGRlc2NyPSJWYXJpYWJsZSAnaScgbWlnaHQgbm90IGhhdmUgYmVlbiBpbml0aWFsaXplZCI+aTwvZXJyb3I+PT0wKSByZXR1cm47CisgICAgICAgIH0KKyAgICB9CisKKyAgICBhYnN0cmFjdCBjbGFzcyBYIHsKKyAgICAgICAgY2xhc3MgWEV4Y2VwdGlvbiBleHRlbmRzIEV4Y2VwdGlvbnt9CisgICAgICAgIGNsYXNzIFlFeGNlcHRpb24gZXh0ZW5kcyBFeGNlcHRpb257fQorICAgICAgICBjbGFzcyBaRXhjZXB0aW9uIGV4dGVuZHMgRXhjZXB0aW9ue30KKyAgICAgICAgcHVibGljIHZvaWQgdGVzdCgpIHRocm93cyBYRXhjZXB0aW9uIHsKKyAgICAgICAgICAgIGZpbmFsIE9iamVjdCBvYmo7CisgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgIG9iaiA9IHRlc3QxKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjYXRjaCAoWUV4Y2VwdGlvbiBmbmYpIHsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGZpbmFsbHkgeworICAgICAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgICAgIHRlc3QyKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGNhdGNoIChaRXhjZXB0aW9uIGVvZikgeworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIDxlcnJvciBkZXNjcj0iVmFyaWFibGUgJ29iaicgbWlnaHQgbm90IGhhdmUgYmVlbiBpbml0aWFsaXplZCI+b2JqPC9lcnJvcj4uaGFzaENvZGUoKTsgLy9jYW4gc3RheSB1bmluaXRpYWxpemVkCisgICAgICAgIH0KKworICAgICAgICBwdWJsaWMgYWJzdHJhY3QgT2JqZWN0IHRlc3QxKCkgdGhyb3dzIFlFeGNlcHRpb24sIFhFeGNlcHRpb247CisKKyAgICAgICAgcHVibGljIGFic3RyYWN0IHZvaWQgdGVzdDIoKSB0aHJvd3MgWEV4Y2VwdGlvbiwgWkV4Y2VwdGlvbjsKKyAgICB9CisKKyAgICBwdWJsaWMgc3RhdGljIGludCB0ZXN0KExpc3QgYUxpc3QpIHsKKyAgICAgICAgTGlzdCBsaXN0MjsKKyAgICAgICAgaW50IGNvdW50ZXIgPSAwOworICAgICAgICBmb3IgKGludCBpPTA7IGk8YUxpc3Quc2l6ZSgpOyBpKyspIHsKKyAgICAgICAgICAgIHdoaWxlIChjb3VudGVyICE9IDApIHsKKyAgICAgICAgICAgICAgICBjb3VudGVyKys7CisgICAgICAgICAgICAgICAgbGlzdDIgPSBuZXcgQXJyYXlMaXN0KCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICA8ZXJyb3IgZGVzY3I9IlZhcmlhYmxlICdsaXN0MicgbWlnaHQgbm90IGhhdmUgYmVlbiBpbml0aWFsaXplZCI+bGlzdDI8L2Vycm9yPi5hZGQoYUxpc3QuZ2V0KGkpKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gY291bnRlcjsKKyAgICB9CisKKyAgICB2b2lkIGZvckVhY2hQYXJhbShqYXZhLmlvLkZpbGUgeCkgeworICAgICAgICBmb3IgKGphdmEuaW8uRmlsZSBmOiA8ZXJyb3IgZGVzY3I9IlZhcmlhYmxlICdmJyBtaWdodCBub3QgaGF2ZSBiZWVuIGluaXRpYWxpemVkIj5mPC9lcnJvcj4ubGlzdEZpbGVzKCkpIHsKKyAgICAgICAgICAgZm9yRWFjaFBhcmFtKGYpOworICAgICAgICB9CisgICAgfQorCisgIC8vIGFsbCBjb2RlIGJlbG93IGlzIGNvcnJlY3QKKyAgaW50IGNmMShpbnQgaSkgeworICAgIHJldHVybiBpOworICB9CisKKyAgdm9pZCBjZjIoaW50IGkpIHsKKyAgICBpbnQgajsKKyAgICBpZiAoaSA9PSAwICYmIChqPWkpICE9IDIpIHsKKyAgICAgIGkgPSBqOworICAgIH0KKyAgICBpZiAoaSA9PSAwIHx8IChqPWkpICE9IDIgfHwgaj4zKSB7CisgICAgICBpID0gMjsKKyAgICB9CisgIH0KKworICBib29sZWFuIGNmMyhpbnQgaSkgeworICAgIGZpbmFsIGludCBqOworICAgIGlmIChpPDMgfHwgaT4zMykgaiA9IGk7CisgICAgZWxzZSBqID0gNDsKKyAgICBpID0gajsKKworICAgIHJldHVybiBpPT0zICYmIGk9PTU7CisgIH0KKyAgdm9pZCBjZjMzKGludCBpKSB7CisgICAgZmluYWwgaW50IGoyOworICAgIHdoaWxlICh0cnVlKSB7CisgICAgICBqMiA9IDU7CisgICAgICBicmVhazsKKyAgICB9CisgICAgaSA9IGoyOworICB9CisKKyAgdm9pZCBjZjQoKSB7CisgICAgZmluYWwgaW50IGkxOworICAgIGludCBpMjsKKyAgICBmaW5hbCBPYmplY3QgbzE7CisgIH0KKyAgdm9pZCBjZjUoKSB7CisgICBmaW5hbCBpbnQgZGlhbG9nID0gMzsKKworICAgZmluYWwgaW50IGRkOworICAgaWYgKGRpYWxvZyA9PSAzKSBkZCA9IDU7CisgICBlbHNlIGRkID0gNjsKKworICAgUnVubmFibGUgciA9IG5ldyBSdW5uYWJsZSgpIHsKKyAgICBwdWJsaWMgdm9pZCBydW4oKSB7CisgICAgIGludCBpID0gZGlhbG9nOworICAgICBpbnQgaiA9IGRkOworICAgIH0KKyAgIH07CisKKyAgfQorICB2b2lkIGNmNigpIHsKKyAgICBjbGFzcyBpbm5lciBleHRlbmRzIGEgeworICAgICAgdm9pZCBmaSgpIHsKKyAgICAgICBpbnQgaSA9IGlpOworICAgICAgfQorICAgIH0KKyAgICBhIGFpbnN0ID0gbmV3IGEoKSB7CisgICAgICB2b2lkIGZpKCkgeworICAgICAgICBpbnQgaSA9IGlpOworICAgICAgfQorICAgIH07CisgIH0KKyAgYSgpIHsKKyAgICBpbnQgaSA9IGFpLmlpOworICB9CisgIHZvaWQgY2Y3KCkgeworICAgICAgZm9yKGludCBpID0gMDsgaSA8IDM7IGkrKyl7CisgICAgICAgIE9iamVjdCBlbGVtZW50OworICAgICAgICBpZiAoaT09MCl7CisgICAgICAgICAgZWxlbWVudCA9IG51bGw7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoaT09Myl7CisgICAgICAgICAgZWxlbWVudCA9IG51bGw7CisgICAgICAgIH0KKyAgICAgICAgZWxzZXsKKyAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICBPYmplY3QgbmV3ZSA9IGVsZW1lbnQ7CisgICAgICB9CisgIH0KKyAgdm9pZCBjZjgoaW50IG4pCisgICB7CisgICAgICAgIGludCBpOworICAgICAgICB3aGlsZSAodHJ1ZSkgeworICAgICAgICAgICAgaWYgKGZhbHNlKSB7CisgICAgICAgICAgICAgIGkgPSAwOworICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpKys7CisKKyAgICB9CisgIGZpbmFsIGJvb2xlYW4gRkIgPSB0cnVlOworCisgIHZvaWQgY2Y5KCkgeworICAgICAgaW50IGs7CisgICAgICBpZiAoRkIpIHsKKyAgICAgICAgayA9IDQ7CisgICAgICB9CisgICAgICBpbnQgaiA9IGs7CisgIH0KKworCisgIHZvaWQgY2YxMCgpIHsKKyAgICBmb3IgKFN0cmluZyBsaW5lOyAobGluZSA9ICIiKSAhPSBudWxsOyApIHsKKyAgICAgIGxpbmUuaW5kZXhPZigiICIpOworICAgIH0KKyAgfQorCisgIHZvaWQgY2YxMShib29sZWFuIGQpIHsKKyAgICAgICAgYm9vbGVhbiBiOworICAgICAgICBib29sZWFuIGMgPSB0cnVlOworICAgICAgICBpZiAoYyAmJiAoZmFsc2UgJiYgdHJ1ZSkpIHsKKyAgICAgICAgICAgIGMgPSBiOworICAgICAgICB9CisgIH0KKyAgdm9pZCBjZjEyKCkgeworICAgICAgICBib29sZWFuIGJvb2xlYW5WYXIgPSB0cnVlOworICAgICAgICBib29sZWFuIHN0cmluZ1ZhcjsKKyAgICAgICAgaWYgKCEoYm9vbGVhblZhciAmJiAoc3RyaW5nVmFyID0gdHJ1ZSkpKSB7CisgICAgICAgICAgICBzdHJpbmdWYXIgPSBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBpZiAoc3RyaW5nVmFyKSB7CisKKyAgICAgICAgfQorICB9CisgIAorICAgIHZvaWQgY2Z4eChib29sZWFuIGEsIGJvb2xlYW4gYikgeworICAgICAgICBpbnQgbjsKKyAgICAgICAgaWYgKChhIHx8IGIpICYmIChuID0gMCkgPj0gMikgeworICAgICAgICAgICAgbisrOyAgIC8vCisgICAgICAgIH0KKyAgICB9CisgICAgdm9pZCBjZnh4MShib29sZWFuIGEsIGludCBiKSB7CisgICAgICAgIGZpbmFsIGludCBpOworICAgICAgICBpZiAoKHRydWUgfHwgZmFsc2UpICYmIChpID0gYikgIT0gMCkgeworICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKGkpOyAvLyBpIGdldHMgaGlnaGxpZ2h0ZWQgfQorICAgICAgICB9CisgICAgfQorICAgIHZvaWQgY2Z4MygpIHsKKyAgICAgIGJvb2xlYW4gYjsKKyAgICAgIGJvb2xlYW4gYzsvLyA9IHRydWU7CisgICAgICBpZiAoPGVycm9yIGRlc2NyPSJWYXJpYWJsZSAnYycgbWlnaHQgbm90IGhhdmUgYmVlbiBpbml0aWFsaXplZCI+YzwvZXJyb3I+ICYmIGZhbHNlKSB7CisgICAgICAgICAgYyA9IGI7CisgICAgICB9CisgICAgfQorICAgIHZvaWQgY2Z4NCgpCisgICAgeworICAgICAgICBmaW5hbCBpbnQgazsKKyAgICAgICAgaWYgKGZhbHNlKSB7CisgICAgICAgICAgICBrID0gMDsKKyAgICAgICAgICAgIGsgPSAxOworICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKGspOworICAgICAgICB9CisgICAgfQorfQorCisKK2NsYXNzIE1haW4geworICAgICB2b2lkIGYoKSB7CisgICAgICAgICBmaW5hbCBpbnQgeDsKKyAgICAgICAgIHggPSAwOworICAgICAgICAgY2xhc3MgQyB7CisgICAgICAgICAgICAgdm9pZCBtICgpIHsKKyAgICAgICAgICAgICAgICAgaW50IHkgPSB4OworICAgICAgICAgICAgIH0KKyAgICAgICAgIH0KKyAgICAgfQorfQorCisKKy8vIGNvbnRpbnVlIGluIGZpbmFsbHkKK2NsYXNzIFF1YXJ0elNjaGVkdWxlclRocmVhZCB7CisgICAgcHVibGljIHZvaWQgcnVuKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKKyAgICAgICAgd2hpbGUgKHRydWUpIHsKKyAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICB9IGZpbmFsbHkgeworICAgICAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgICAgIHJ1bigpOworICAgICAgICAgICAgICAgIH0gY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKK30KK2NsYXNzIEV4Y2VwdGlvblByb2JsZW1zIHsKKworCXByaXZhdGUgYm9vbGVhbiBiYWQoKSB7CisJCWZpbmFsIGJvb2xlYW4gc3VjY2VlZGVkOworCQl0cnkgeworICAgICAgICAgICAgbmV3IEZpbGVJbnB1dFN0cmVhbSgidGVzdCIpOworICAgICAgICAgICAgc3VjY2VlZGVkID0gdHJ1ZTsKKwkJfSBjYXRjaCAoSU9FeGNlcHRpb24gZSkgeworCQkJPGVycm9yIGRlc2NyPSJWYXJpYWJsZSAnc3VjY2VlZGVkJyBtaWdodCBhbHJlYWR5IGhhdmUgYmVlbiBhc3NpZ25lZCB0byI+c3VjY2VlZGVkPC9lcnJvcj4gPSBmYWxzZTsgLy8gc2hvdWxkIHdhcm4gaGVyZQorCQl9CisJCXJldHVybiBzdWNjZWVkZWQ7CisJfQorfQorY2xhc3MgSW1Hb29kIHsKKyAgICAgICAgaW50IGZvbygpIHsgICAgLy9JREVBREVWLTc0NDYgCisgICAgICAgICAgICBpbnQgZm9vOworICAgICAgICAgICAgaWYgKHRydWUpIHsKKyAgICAgICAgICAgICAgICBmb28gPSA0MjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBmb287CisgICAgICAgIH0KKyAgICB9CisKK2NsYXNzIFN3aXRjaFRlc3QKK3sKKyAgICBwdWJsaWMgc3RhdGljIFN0cmluZyBtZXRob2QoKQorICAgIHsKKyAgICAgICAgaW50IGEgPSAwOworICAgICAgICBzd2l0Y2ggKGEpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNhc2UgMDoKKyAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgICAgIGNhc2UgNDoKKyAgICAgICAgICAgICAgICBTdHJpbmcgZGVzY3JpcHRpb247CisgICAgICAgICAgICAgICAgcmV0dXJuIDxlcnJvciBkZXNjcj0iVmFyaWFibGUgJ2Rlc2NyaXB0aW9uJyBtaWdodCBub3QgaGF2ZSBiZWVuIGluaXRpYWxpemVkIj5kZXNjcmlwdGlvbjwvZXJyb3I+OworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICByZXR1cm4gIiI7CisgICAgICAgIH0KKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmcvTG9vcC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmcvTG9vcC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYwMGJhZTMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZy9Mb29wLmphdmEKQEAgLTAsMCArMSw2NyBAQAorLy8gY29udGludWUgb3V0c2lkZSBvZi4uLi9sb29wIGxhYmVsCitwdWJsaWMgY2xhc3MgYSB7CisKKyAgdm9pZCBmKCkgeworICAgIDxlcnJvciBkZXNjcj0iQ29udGludWUgb3V0c2lkZSBvZiBsb29wIj5jb250aW51ZTs8L2Vycm9yPgorICAgIHdoaWxlICh0cnVlKSB7CisgICAgICBjb250aW51ZTsKKyAgICB9CisgICAgZG8geyBjb250aW51ZTsgfSB3aGlsZSAodHJ1ZSk7CisgICAgc3dpdGNoICgxKSB7CisgICAgICBjYXNlIDE6IDxlcnJvciBkZXNjcj0iQ29udGludWUgb3V0c2lkZSBvZiBsb29wIj5jb250aW51ZTs8L2Vycm9yPgorICAgIH0KKyAgICBmb3IgKDs7KSB7CisgICAgICBjb250aW51ZTsKKyAgICB9CisKKyAgICBmb3IgKDs7KSB7CisgICAgICBuZXcgZmYoKSB7CisgICAgICAgIHZvaWQgZigpIHsgCisgICAgICAgICAgPGVycm9yIGRlc2NyPSJDb250aW51ZSBvdXRzaWRlIG9mIGxvb3AiPmNvbnRpbnVlOzwvZXJyb3I+CisgICAgICAgIH0KKyAgICAgIH07CisgICAgICBjb250aW51ZTsKKyAgICB9CisKKworICAgIHdoaWxlICh0cnVlKSB7CisgICAgICBjbGFzcyBzIHsKKyAgICAgICB7CisgICAgICAgICA8ZXJyb3IgZGVzY3I9IkNvbnRpbnVlIG91dHNpZGUgb2YgbG9vcCI+Y29udGludWU7PC9lcnJvcj4KKyAgICAgICB9CisgICAgICB9CisgICAgICBjb250aW51ZTsKKyAgICB9CisKKyAgICBkbyB7CisgICAgICBjbGFzcyBzIHsKKyAgICAgICB7CisgICAgICAgICA8ZXJyb3IgZGVzY3I9IkNvbnRpbnVlIG91dHNpZGUgb2YgbG9vcCI+Y29udGludWU7PC9lcnJvcj4KKyAgICAgICB9CisgICAgICB9CisgICAgICBjb250aW51ZTsKKyAgICB9IHdoaWxlICh0cnVlKTsKKworCisKKyAgICBhOgorICAgIGlmICgyPT00KSB7CisgICAgZm9yICg7OykgeworICAgICAgPGVycm9yIGRlc2NyPSJOb3QgYSBsb29wIGxhYmVsOiAnYSciPmNvbnRpbnVlIGE7PC9lcnJvcj4KKyAgICB9CisgICAgfQorCisgICAgYToKKyAgICBiOgorICAgIGZvciAoOzspIHsKKyAgICAgIDxlcnJvciBkZXNjcj0iTm90IGEgbG9vcCBsYWJlbDogJ2EnIj5jb250aW51ZSBhOzwvZXJyb3I+CisgICAgfQorICAgIAorCisKKyAgfQorfQorCitjbGFzcyBmZiB7CisKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nL01ldGhvZENhbGxzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZy9NZXRob2RDYWxscy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE4M2U4ZDAKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZy9NZXRob2RDYWxscy5qYXZhCkBAIC0wLDAgKzEsMTIxIEBACisvKgorICogQ29weXJpZ2h0IDIwMDAtMjAxMiBKZXRCcmFpbnMgcy5yLm8uCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisvLyBpbGxlZ2FsIG1ldGhvZCBjYWxscworCitjbGFzcyBBIHsKKyAgICBwcml2YXRlIGNsYXNzIEIgeworICAgICAgT2JqZWN0IG8gPSBzdXBlcjxlcnJvciBkZXNjcj0iJy4nIGV4cGVjdGVkIj47PC9lcnJvcj4KKyAgICB9CisgICAgcHJpdmF0ZSBCIGIgPSBudWxsOworICAgIEEoQSBhKQorICAgIHsKKyAgICAgICAgbmV3IEEoYSkubmV3IEIoKTsKKyAgICAgICAgQiBiID0gbmV3IEEoYSkuYjsKKyAgICAgICAgQUEgYWEgPSAoQUEpIGE7CisgICAgICAgIEFBLlNBQSBzYWEgPSBhYS5uZXcgU0FBKCk7CisgICAgICAgIEFBLlNBQSBzYWExID0gPGVycm9yIGRlc2NyPSInQUEnIGlzIG5vdCBhbiBlbmNsb3NpbmcgY2xhc3MiPm5ldyBBQS5TQUEoKTwvZXJyb3I+OworICAgIH0KK30KKworY2xhc3MgQUEgZXh0ZW5kcyBBIHsKKyAgICBwcml2YXRlIEFBIGFhOworICAgIEFBKEEgYSkgeworICAgICAgICBzdXBlcihhKTsKKyAgICB9CisgICAgY2xhc3MgU0FBIHt9CisKKyAgICB2b2lkIGYoKSB7CisgICAgICBuZXcgQUEuU0FBKCk7CisgICAgICBuZXcgU0FBKCk7CisgICAgICBBQS50aGlzLmFhLm5ldyBTQUEoKTsKKworICAgICAgY2xhc3MgTXlBQSBleHRlbmRzIEFBIHsKKyAgICAgICAgcHVibGljIE15QUEoQSBhKSB7CisgICAgICAgICAgc3VwZXIoYSk7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9Cit9CisKK2NsYXNzIEFYIHsKKyAgICBjbGFzcyBCIHsKKyAgICB9Cit9CitjbGFzcyBDWCB7CisgICAgeworICAgICAgICA8ZXJyb3IgZGVzY3I9IidBWCcgaXMgbm90IGFuIGVuY2xvc2luZyBjbGFzcyI+bmV3IEFYLkIoKTwvZXJyb3I+OworICAgIH0KK30KKworCisKK2NsYXNzIGMgeworICAgIGMoKSB7fQorCisgICAgY2xhc3MgaW5uZXIgeworICAgICAgICBjbGFzcyBpbmlubmVyIHt9CisgICAgfQorCisgICAgc3RhdGljIHZvaWQgZigpIHsKKyAgICAgICAgPGVycm9yIGRlc2NyPSInYy50aGlzJyBjYW5ub3QgYmUgcmVmZXJlbmNlZCBmcm9tIGEgc3RhdGljIGNvbnRleHQiPm5ldyBpbm5lcigpPC9lcnJvcj47CisgICAgfQorCisgICAgc3RhdGljIHsKKyAgICAgICAgPGVycm9yIGRlc2NyPSInYy50aGlzJyBjYW5ub3QgYmUgcmVmZXJlbmNlZCBmcm9tIGEgc3RhdGljIGNvbnRleHQiPm5ldyBpbm5lcigpPC9lcnJvcj47CisgICAgfQorfQorCisKK2NsYXNzIEExIHsKKyAgdm9pZCBmKCkge30KK30KK2NsYXNzIEIxIHsKKyAgdm9pZCBmKCkgeworICAgIEExLjxlcnJvciBkZXNjcj0iTm9uLXN0YXRpYyBtZXRob2QgJ2YoKScgY2Fubm90IGJlIHJlZmVyZW5jZWQgZnJvbSBhIHN0YXRpYyBjb250ZXh0Ij5mPC9lcnJvcj4oKTsKKyAgfQorfQorCitjbGFzcyBBQUFBIGltcGxlbWVudHMgamF2YS5pby5TZXJpYWxpemFibGUKK3sKKyAgICBwdWJsaWMgQUFBQSAoKQorICAgIHsKKyAgICAgICAgc3VwZXIoKTsgLy8gaGVyZQorICAgIH0KK30KKworY2xhc3MgRENDIHsKKyAgICBwdWJsaWMgRENDKGludCBpKSB7CisgICAgfQorCisgICAgcHVibGljIERDQyhpbnQgaSwgaW50IHopIHsKKyAgICAgICAgPGVycm9yIGRlc2NyPSJNZXRob2QgY2FsbCBleHBlY3RlZCI+RENDKGkpPC9lcnJvcj47CisgICAgfQorICAgIHZvaWQgZigpIHsKKyAgICAgICAgPGVycm9yIGRlc2NyPSJNZXRob2QgY2FsbCBleHBlY3RlZCI+RENDKDEpPC9lcnJvcj47CisgICAgICAgIG5ldyBEQ0MoMSk7CisgICAgfQorICAgIHsKKyAgICAgICAgPGVycm9yIGRlc2NyPSJRdWFsaWZpZXIgbXVzdCBiZSBhbiBleHByZXNzaW9uIj5qYXZhPC9lcnJvcj4udG9TdHJpbmcoKTsKKyAgICB9Cit9CisKK2NsYXNzIFRoaXNFeHByZXNzaW9uIHsKKyAgICBzdGF0aWMgU3RyaW5nIGZvbygpIHsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKDxlcnJvciBkZXNjcj0iJ1RoaXNFeHByZXNzaW9uLnRoaXMnIGNhbm5vdCBiZSByZWZlcmVuY2VkIGZyb20gYSBzdGF0aWMgY29udGV4dCI+dGhpczwvZXJyb3I+KTsKKyAgICAgICAgcmV0dXJuIDxlcnJvciBkZXNjcj0iJ1RoaXNFeHByZXNzaW9uLnN1cGVyJyBjYW5ub3QgYmUgcmVmZXJlbmNlZCBmcm9tIGEgc3RhdGljIGNvbnRleHQiPnN1cGVyPC9lcnJvcj4udG9TdHJpbmcoKTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZy9NZXRob2RDYW5ub3RCZUFwcGxpZWQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nL01ldGhvZENhbm5vdEJlQXBwbGllZC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYxOTFkYzkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZy9NZXRob2RDYW5ub3RCZUFwcGxpZWQuamF2YQpAQCAtMCwwICsxLDcgQEAKK2NsYXNzIEEge3sKKyAgU3RyaW5nLnZhbHVlT2YoPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ2NoYXJzJyI+Y2hhcnM8L2Vycm9yPiwgMCwgMTApOyAvLyBhbGwgYXJndW1lbnRzIGFyZSBoaWdobGlnaHRlZCB3aGVuIG9ubHkgY2hhcnMgaGFzIGEgcHJvYmxlbWlqCisgIG5ldyBTdHJpbmcoPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ2NoYXJzJyI+Y2hhcnM8L2Vycm9yPiwgMCwgMTApOyAvLyBoaWdobGlnaHRpbmcgaXMgZ29vZCBoZXJlLgorCisgIFN0cmluZy52YWx1ZU9mPGVycm9yIGRlc2NyPSIndmFsdWVPZihjaGFyW10sIGludCwgaW50KScgaW4gJ2phdmEubGFuZy5TdHJpbmcnIGNhbm5vdCBiZSBhcHBsaWVkIHRvICcoaW50LCBpbnQsIGludCknIj4oMCwgMCwgMTApPC9lcnJvcj47CisgIG5ldyBTdHJpbmc8ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIGNvbnN0cnVjdG9yICdTdHJpbmcoaW50LCBpbnQsIGludCknIj4oMCwgMCwgMTApPC9lcnJvcj47Cit9fQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmcvTWlzc2luZ1JldHVybi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmcvTWlzc2luZ1JldHVybi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVhM2I3MDUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZy9NaXNzaW5nUmV0dXJuLmphdmEKQEAgLTAsMCArMSwxMDU5IEBACisvL01pc3NpbmcgcmV0dXJuIHN0YXRlbWVudAoraW1wb3J0IGphdmEuaW8uKjsKK2ltcG9ydCBqYXZhLm5ldC4qOworcHVibGljIGNsYXNzIGEgIHsKK2ludGVyZmFjZSBpaSB7fQorCisKKworIGludCBmMSgpIHRocm93cyBFeGNlcHRpb24geworIDxlcnJvciBkZXNjcj0iTWlzc2luZyByZXR1cm4gc3RhdGVtZW50Ij59PC9lcnJvcj4KKyAKKyBPYmplY3QgZjIoaW50IGkpIHRocm93cyBFeGNlcHRpb24geworICAgaWYgKGkgPT0gMCkgcmV0dXJuIG51bGw7CisgPGVycm9yIGRlc2NyPSJNaXNzaW5nIHJldHVybiBzdGF0ZW1lbnQiPn08L2Vycm9yPgorCisgT2JqZWN0IGYzKGludCBpKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgIHdoaWxlIChpID09IDApIHJldHVybiBudWxsOworIDxlcnJvciBkZXNjcj0iTWlzc2luZyByZXR1cm4gc3RhdGVtZW50Ij59PC9lcnJvcj4KKworIE9iamVjdCBmNChpbnQgaSkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICBzd2l0Y2ggKGkpIHsKKyAgICAgY2FzZSAxOiByZXR1cm4gbnVsbDsKKyAgIH0KKyA8ZXJyb3IgZGVzY3I9Ik1pc3NpbmcgcmV0dXJuIHN0YXRlbWVudCI+fTwvZXJyb3I+CisKKyBPYmplY3QgZjUoaW50IGkpIHRocm93cyBFeGNlcHRpb24geworICAgaWYgKGk9PTIpIHJldHVybiBudWxsOworICAgZWxzZSBpZiAoaSAhPSAyKSByZXR1cm4gbnVsbDsKKyA8ZXJyb3IgZGVzY3I9Ik1pc3NpbmcgcmV0dXJuIHN0YXRlbWVudCI+fTwvZXJyb3I+CisKKyBPYmplY3QgZjYoaW50IGkpIHRocm93cyBFeGNlcHRpb24geworICAgaWYgKHRydWUpIHJldHVybiBudWxsOworIDxlcnJvciBkZXNjcj0iTWlzc2luZyByZXR1cm4gc3RhdGVtZW50Ij59PC9lcnJvcj4KKworIGludCBmNyhpbnQgaSkgeworICB0cnkgeworICAgaWYgKGk9PTIpIHJldHVybiA0OworICAgZWxzZSB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCk7CisgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgIH0KKyA8ZXJyb3IgZGVzY3I9Ik1pc3NpbmcgcmV0dXJuIHN0YXRlbWVudCI+fTwvZXJyb3I+CisKKyAgaW50IGY4KGludCBpKSB7CisgICAgdHJ5IHsKKyAgICAgIC8vdGhyb3cgbmV3IEVycm9yKCk7CisgICAgfQorICAgIGZpbmFsbHkgeworICAgICAgdHJ5IHsKKyAgICAgICAgLy90aHJvdyBuZXcgRXhjZXB0aW9uKCk7CisgICAgICB9CisgICAgICBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgcmV0dXJuIDU7CisgICAgICB9CisgICAgfQorIDxlcnJvciBkZXNjcj0iTWlzc2luZyByZXR1cm4gc3RhdGVtZW50Ij59PC9lcnJvcj4KKworIGludCBjZjEoaW50IGkpIHsKKyAgIHJldHVybiAwOworIH0KKyBpbnQgY2YyKGludCBpKSB7CisgICBpZiAoaT09MikgcmV0dXJuIDA7CisgICBlbHNlIGlmIChpPT00KSByZXR1cm4gLTE7CisgICBlbHNlIHJldHVybiAyOworIH0KKyBpbnQgY2YzKGludCBpKSB7CisgICByZXR1cm4gaT09MiA/IDMgOiA1OworIH0KKyBpbnQgY2Y0KGludCBpKSB7CisgICBzd2l0Y2ggKGkpIHsKKyAgICBjYXNlIDE6IHJldHVybiA0OworICAgIGNhc2UgMzogcmV0dXJuIDY7CisgICAgZGVmYXVsdDogcmV0dXJuIDU7CisgICB9CisgfQorIGludCBjZjUoaW50IGkpIHsKKyAgIGlmIChpPjEpIHsKKyAgICBpZiAoaT09NCkgcmV0dXJuIDA7CisgICAgZWxzZSByZXR1cm4gaT09MyA/IDIgOiAwOworICAgfQorICAgZWxzZSByZXR1cm4gMjsKKyB9CisgaW50IGNmNihpbnQgaSkgeworICAgcmV0dXJuIGNmNChpKzEpOworIH0KKworIGludCBjZjcoaW50IGkpIHRocm93cyBFeGNlcHRpb24geworICAgdHJ5IHsKKyAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbigpOworICAgfSBjYXRjaChFcnJvciBlKSB7CisgICAgIHJldHVybiAzOworICAgfSBmaW5hbGx5IHsKKyAgICAgcmV0dXJuIDI7CisgICB9CisKKyB9CisKKyBpbnQgY2Y4KGludCBpKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgIHRyeSB7CisgICAgIHJldHVybiAyOworICAgfSBmaW5hbGx5IHsKKyAgICAgcmV0dXJuIDQ7CisgICB9CisgfQorIGludCBjZjkoaW50IGkpIHRocm93cyBFeGNlcHRpb24geworICAgdHJ5IHsKKyAgICAgaSA9IDU7CisgICB9IGZpbmFsbHkgeworICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCk7CisgICB9CisgfQorCisgaW50IGNmMTAoaW50IGkpIHsKKworICAgd2hpbGUgKHRydWUpCisgICAgIHJldHVybiAwOworIH0KKyBpbnQgY2YxMShpbnQgaSkgeworCisgIC8vIGNvbW1lbnRlZCBvdXQgcmVmZXJlbmNlCisgIC8vIGRvZXMgbm90IHdvcmsgd2hlbiBydW5uaW5nIHVuZGVyIEpSRQorCisgICB3aGlsZSAoYS5jbyAhPSAyICYmIDErMy8yLTEgKyAoaW50KTEuNSArIDIlMiA9PSAyIC8qICYmIDB4N2ZmZmZmZmYgPT0gSW50ZWdlci5NQVhfVkFMVUUgKi8gJiYgKCdjJyAmIDB4MDApID09IDApCisgICAgIHJldHVybiAwOworIH0KKyBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgY28gPSAxLzIgKyAxOworIGludCBjZjEyKGludCBpKSB7CisKKyAgIGZvciAoaW50IGs9MDsgKDB4ZjAgfCAweDBmKSA9PSAweGZmICYmIGZhbHNlICE9IHRydWUgJiYgY28gPT0gMTtrKyspCisgICAgIHJldHVybiAwOworIH0KKworCisgaW50IGNmMTMoKSB7CisgdHJ5IHsKKyAgdHJ5IHsKKyAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oKTsKKyAgIC8vdGhyb3cgbmV3IGphdmEuaW8uSU9FeGNlcHRpb24oKTsKKyAgfSBjYXRjaCAoSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIGUpIHsKKyAgIHJldHVybiAzOworICB9CisgIGZpbmFsbHkgeworICAgdGhyb3cgbmV3IGphdmEuaW8uSU9FeGNlcHRpb24oKTsKKyAgfQorCisgfSBjYXRjaCAoamF2YS5pby5JT0V4Y2VwdGlvbiBlZSkgeworICAgcmV0dXJuIDg4OworIH0KKyB9CisKKyBpbnQgY2YxNCgpIHsKKyAgIHRyeSB7CisgICAgIGNmMTMoKTsKKyAgICAgcmV0dXJuIDEzOworICAgfSBmaW5hbGx5IHsKKyAgICAgY2YxMygpOworICAgfQorIH0KKyAKKyBpbnQgY2YxNSgpIHsKKyAgdHJ5IHsKKyAgIGludCBpPTA7CisgICByZXR1cm4gaTsKKyAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgfSBmaW5hbGx5IHsKKyAgfQorICByZXR1cm4gMDsKKyB9CisgaW50IGNmMTYoKSB7CisgICAgdHJ5IHsKKyAgICAgIGlmICggISAoMT09MykpIHsKKyAgICAgICAgICByZXR1cm4gMDsKKyAgICAgIH0KKyAgICB9IGZpbmFsbHkgeworICAgICAgICAvLyBSZXN0b3JlIHRoZSBjdXJyZW50IHBvc2l0aW9uIG9mIHRoZSBvdGhlciBEeW5BbnkKKyAgICB9CisgICAgcmV0dXJuIDE7CisgfQorCisgaW50IGNmMTcoKSB7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgfSBmaW5hbGx5IHsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBmaW5hbGx5IHsKKyAgICAgICAgfQorICB9CisgaW50IGNmMTgoaW50IGkpIHsKKyAgIGludCBrOworICAgdHJ5IHsKKyAgICAgIGlmIChpPT00KSByZXR1cm4gMDsKKyAgICAgIGsgPSA0OworICAgfSBmaW5hbGx5IHsKKyAgIH0KKyAgIHJldHVybiBrOworICB9CisKKworIHZvaWQgY2YxOSgpIHsKKworICAgICAgdHJ5IHsKKworICAgICAgICB0cnkgeworICAgICAgICB9CisgICAgICAgIGZpbmFsbHkgeworICAgICAgICB9CisgICAgICAgICAgcmV0dXJuIDsKKyAgICAgIH0KKyAgICAgIGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgICAgfQorIH0KKworfQorCisgY2xhc3MgYTIgIHsKK2ludGVyZmFjZSBpaSB7fQorCisKKworIGludCBmMSgpIHRocm93cyBFeGNlcHRpb24geworIDxlcnJvciBkZXNjcj0iTWlzc2luZyByZXR1cm4gc3RhdGVtZW50Ij59PC9lcnJvcj4KKyAKKyBPYmplY3QgZjIoaW50IGkpIHRocm93cyBFeGNlcHRpb24geworICAgaWYgKGkgPT0gMCkgcmV0dXJuIG51bGw7CisgPGVycm9yIGRlc2NyPSJNaXNzaW5nIHJldHVybiBzdGF0ZW1lbnQiPn08L2Vycm9yPgorCisgT2JqZWN0IGYzKGludCBpKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgIHdoaWxlIChpID09IDApIHJldHVybiBudWxsOworIDxlcnJvciBkZXNjcj0iTWlzc2luZyByZXR1cm4gc3RhdGVtZW50Ij59PC9lcnJvcj4KKworIE9iamVjdCBmNChpbnQgaSkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICBzd2l0Y2ggKGkpIHsKKyAgICAgY2FzZSAxOiByZXR1cm4gbnVsbDsKKyAgIH0KKyA8ZXJyb3IgZGVzY3I9Ik1pc3NpbmcgcmV0dXJuIHN0YXRlbWVudCI+fTwvZXJyb3I+CisKKyBPYmplY3QgZjUoaW50IGkpIHRocm93cyBFeGNlcHRpb24geworICAgaWYgKGk9PTIpIHJldHVybiBudWxsOworICAgZWxzZSBpZiAoaSAhPSAyKSByZXR1cm4gbnVsbDsKKyA8ZXJyb3IgZGVzY3I9Ik1pc3NpbmcgcmV0dXJuIHN0YXRlbWVudCI+fTwvZXJyb3I+CisKKyBPYmplY3QgZjYoaW50IGkpIHRocm93cyBFeGNlcHRpb24geworICAgaWYgKHRydWUpIHJldHVybiBudWxsOworIDxlcnJvciBkZXNjcj0iTWlzc2luZyByZXR1cm4gc3RhdGVtZW50Ij59PC9lcnJvcj4KKworIGludCBmNyhpbnQgaSkgeworICB0cnkgeworICAgaWYgKGk9PTIpIHJldHVybiA0OworICAgZWxzZSB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCk7CisgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgIH0KKyA8ZXJyb3IgZGVzY3I9Ik1pc3NpbmcgcmV0dXJuIHN0YXRlbWVudCI+fTwvZXJyb3I+CisKKyAgaW50IGY4KGludCBpKSB7CisgICAgdHJ5IHsKKyAgICAgIC8vdGhyb3cgbmV3IEVycm9yKCk7CisgICAgfQorICAgIGZpbmFsbHkgeworICAgICAgdHJ5IHsKKyAgICAgICAgLy90aHJvdyBuZXcgRXhjZXB0aW9uKCk7CisgICAgICB9CisgICAgICBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgcmV0dXJuIDU7CisgICAgICB9CisgICAgfQorIDxlcnJvciBkZXNjcj0iTWlzc2luZyByZXR1cm4gc3RhdGVtZW50Ij59PC9lcnJvcj4KKworIGludCBjZjEoaW50IGkpIHsKKyAgIHJldHVybiAwOworIH0KKyBpbnQgY2YyKGludCBpKSB7CisgICBpZiAoaT09MikgcmV0dXJuIDA7CisgICBlbHNlIGlmIChpPT00KSByZXR1cm4gLTE7CisgICBlbHNlIHJldHVybiAyOworIH0KKyBpbnQgY2YzKGludCBpKSB7CisgICByZXR1cm4gaT09MiA/IDMgOiA1OworIH0KKyBpbnQgY2Y0KGludCBpKSB7CisgICBzd2l0Y2ggKGkpIHsKKyAgICBjYXNlIDE6IHJldHVybiA0OworICAgIGNhc2UgMzogcmV0dXJuIDY7CisgICAgZGVmYXVsdDogcmV0dXJuIDU7CisgICB9CisgfQorIGludCBjZjUoaW50IGkpIHsKKyAgIGlmIChpPjEpIHsKKyAgICBpZiAoaT09NCkgcmV0dXJuIDA7CisgICAgZWxzZSByZXR1cm4gaT09MyA/IDIgOiAwOworICAgfQorICAgZWxzZSByZXR1cm4gMjsKKyB9CisgaW50IGNmNihpbnQgaSkgeworICAgcmV0dXJuIGNmNChpKzEpOworIH0KKworIGludCBjZjcoaW50IGkpIHRocm93cyBFeGNlcHRpb24geworICAgdHJ5IHsKKyAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbigpOworICAgfSBjYXRjaChFcnJvciBlKSB7CisgICAgIHJldHVybiAzOworICAgfSBmaW5hbGx5IHsKKyAgICAgcmV0dXJuIDI7CisgICB9CisKKyB9CisKKyBpbnQgY2Y4KGludCBpKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgIHRyeSB7CisgICAgIHJldHVybiAyOworICAgfSBmaW5hbGx5IHsKKyAgICAgcmV0dXJuIDQ7CisgICB9CisgfQorIGludCBjZjkoaW50IGkpIHRocm93cyBFeGNlcHRpb24geworICAgdHJ5IHsKKyAgICAgaSA9IDU7CisgICB9IGZpbmFsbHkgeworICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCk7CisgICB9CisgfQorCisgaW50IGNmMTAoaW50IGkpIHsKKworICAgd2hpbGUgKHRydWUpCisgICAgIHJldHVybiAwOworIH0KKyBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgY28gPSAxLzIgKyAxOworIGludCBjZjEyKGludCBpKSB7CisKKyAgIGZvciAoaW50IGs9MDsgKDB4ZjAgfCAweDBmKSA9PSAweGZmICYmIGZhbHNlICE9IHRydWUgJiYgY28gPT0gMTtrKyspCisgICAgIHJldHVybiAwOworIH0KKworCisgaW50IGNmMTMoKSB7CisgdHJ5IHsKKyAgdHJ5IHsKKyAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oKTsKKyAgIC8vdGhyb3cgbmV3IGphdmEuaW8uSU9FeGNlcHRpb24oKTsKKyAgfSBjYXRjaCAoSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIGUpIHsKKyAgIHJldHVybiAzOworICB9CisgIGZpbmFsbHkgeworICAgdGhyb3cgbmV3IGphdmEuaW8uSU9FeGNlcHRpb24oKTsKKyAgfQorCisgfSBjYXRjaCAoamF2YS5pby5JT0V4Y2VwdGlvbiBlZSkgeworICAgcmV0dXJuIDg4OworIH0KKyB9CisKKyBpbnQgY2YxNCgpIHsKKyAgIHRyeSB7CisgICAgIGNmMTMoKTsKKyAgICAgcmV0dXJuIDEzOworICAgfSBmaW5hbGx5IHsKKyAgICAgY2YxMygpOworICAgfQorIH0KKyAKKyBpbnQgY2YxNSgpIHsKKyAgdHJ5IHsKKyAgIGludCBpPTA7CisgICByZXR1cm4gaTsKKyAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgfSBmaW5hbGx5IHsKKyAgfQorICByZXR1cm4gMDsKKyB9CisgaW50IGNmMTYoKSB7CisgICAgdHJ5IHsKKyAgICAgIGlmICggISAoMT09MykpIHsKKyAgICAgICAgICByZXR1cm4gMDsKKyAgICAgIH0KKyAgICB9IGZpbmFsbHkgeworICAgICAgICAvLyBSZXN0b3JlIHRoZSBjdXJyZW50IHBvc2l0aW9uIG9mIHRoZSBvdGhlciBEeW5BbnkKKyAgICB9CisgICAgcmV0dXJuIDE7CisgfQorCisgaW50IGNmMTcoKSB7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgfSBmaW5hbGx5IHsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBmaW5hbGx5IHsKKyAgICAgICAgfQorICB9CisgaW50IGNmMTgoaW50IGkpIHsKKyAgIGludCBrOworICAgdHJ5IHsKKyAgICAgIGlmIChpPT00KSByZXR1cm4gMDsKKyAgICAgIGsgPSA0OworICAgfSBmaW5hbGx5IHsKKyAgIH0KKyAgIHJldHVybiBrOworICB9CisKKworIHZvaWQgY2YxOSgpIHsKKworICAgICAgdHJ5IHsKKworICAgICAgICB0cnkgeworICAgICAgICB9CisgICAgICAgIGZpbmFsbHkgeworICAgICAgICB9CisgICAgICAgICAgcmV0dXJuIDsKKyAgICAgIH0KKyAgICAgIGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgICAgfQorIH0KKworfQorCisKKyBjbGFzcyBhMyAgeworaW50ZXJmYWNlIGlpIHt9CisKKworCisgaW50IGYxKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgPGVycm9yIGRlc2NyPSJNaXNzaW5nIHJldHVybiBzdGF0ZW1lbnQiPn08L2Vycm9yPgorIAorIE9iamVjdCBmMihpbnQgaSkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICBpZiAoaSA9PSAwKSByZXR1cm4gbnVsbDsKKyA8ZXJyb3IgZGVzY3I9Ik1pc3NpbmcgcmV0dXJuIHN0YXRlbWVudCI+fTwvZXJyb3I+CisKKyBPYmplY3QgZjMoaW50IGkpIHRocm93cyBFeGNlcHRpb24geworICAgd2hpbGUgKGkgPT0gMCkgcmV0dXJuIG51bGw7CisgPGVycm9yIGRlc2NyPSJNaXNzaW5nIHJldHVybiBzdGF0ZW1lbnQiPn08L2Vycm9yPgorCisgT2JqZWN0IGY0KGludCBpKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgIHN3aXRjaCAoaSkgeworICAgICBjYXNlIDE6IHJldHVybiBudWxsOworICAgfQorIDxlcnJvciBkZXNjcj0iTWlzc2luZyByZXR1cm4gc3RhdGVtZW50Ij59PC9lcnJvcj4KKworIE9iamVjdCBmNShpbnQgaSkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICBpZiAoaT09MikgcmV0dXJuIG51bGw7CisgICBlbHNlIGlmIChpICE9IDIpIHJldHVybiBudWxsOworIDxlcnJvciBkZXNjcj0iTWlzc2luZyByZXR1cm4gc3RhdGVtZW50Ij59PC9lcnJvcj4KKworIE9iamVjdCBmNihpbnQgaSkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICBpZiAodHJ1ZSkgcmV0dXJuIG51bGw7CisgPGVycm9yIGRlc2NyPSJNaXNzaW5nIHJldHVybiBzdGF0ZW1lbnQiPn08L2Vycm9yPgorCisgaW50IGY3KGludCBpKSB7CisgIHRyeSB7CisgICBpZiAoaT09MikgcmV0dXJuIDQ7CisgICBlbHNlIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oKTsKKyAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgfQorIDxlcnJvciBkZXNjcj0iTWlzc2luZyByZXR1cm4gc3RhdGVtZW50Ij59PC9lcnJvcj4KKworICBpbnQgZjgoaW50IGkpIHsKKyAgICB0cnkgeworICAgICAgLy90aHJvdyBuZXcgRXJyb3IoKTsKKyAgICB9CisgICAgZmluYWxseSB7CisgICAgICB0cnkgeworICAgICAgICAvL3Rocm93IG5ldyBFeGNlcHRpb24oKTsKKyAgICAgIH0KKyAgICAgIGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgICAgICByZXR1cm4gNTsKKyAgICAgIH0KKyAgICB9CisgPGVycm9yIGRlc2NyPSJNaXNzaW5nIHJldHVybiBzdGF0ZW1lbnQiPn08L2Vycm9yPgorCisgaW50IGNmMShpbnQgaSkgeworICAgcmV0dXJuIDA7CisgfQorIGludCBjZjIoaW50IGkpIHsKKyAgIGlmIChpPT0yKSByZXR1cm4gMDsKKyAgIGVsc2UgaWYgKGk9PTQpIHJldHVybiAtMTsKKyAgIGVsc2UgcmV0dXJuIDI7CisgfQorIGludCBjZjMoaW50IGkpIHsKKyAgIHJldHVybiBpPT0yID8gMyA6IDU7CisgfQorIGludCBjZjQoaW50IGkpIHsKKyAgIHN3aXRjaCAoaSkgeworICAgIGNhc2UgMTogcmV0dXJuIDQ7CisgICAgY2FzZSAzOiByZXR1cm4gNjsKKyAgICBkZWZhdWx0OiByZXR1cm4gNTsKKyAgIH0KKyB9CisgaW50IGNmNShpbnQgaSkgeworICAgaWYgKGk+MSkgeworICAgIGlmIChpPT00KSByZXR1cm4gMDsKKyAgICBlbHNlIHJldHVybiBpPT0zID8gMiA6IDA7CisgICB9CisgICBlbHNlIHJldHVybiAyOworIH0KKyBpbnQgY2Y2KGludCBpKSB7CisgICByZXR1cm4gY2Y0KGkrMSk7CisgfQorCisgaW50IGNmNyhpbnQgaSkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICB0cnkgeworICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCk7CisgICB9IGNhdGNoKEVycm9yIGUpIHsKKyAgICAgcmV0dXJuIDM7CisgICB9IGZpbmFsbHkgeworICAgICByZXR1cm4gMjsKKyAgIH0KKworIH0KKworIGludCBjZjgoaW50IGkpIHRocm93cyBFeGNlcHRpb24geworICAgdHJ5IHsKKyAgICAgcmV0dXJuIDI7CisgICB9IGZpbmFsbHkgeworICAgICByZXR1cm4gNDsKKyAgIH0KKyB9CisgaW50IGNmOShpbnQgaSkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICB0cnkgeworICAgICBpID0gNTsKKyAgIH0gZmluYWxseSB7CisgICAgIHRocm93IG5ldyBFeGNlcHRpb24oKTsKKyAgIH0KKyB9CisKKyBpbnQgY2YxMChpbnQgaSkgeworCisgICB3aGlsZSAodHJ1ZSkKKyAgICAgcmV0dXJuIDA7CisgfQorIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBjbyA9IDEvMiArIDE7CisgaW50IGNmMTIoaW50IGkpIHsKKworICAgZm9yIChpbnQgaz0wOyAoMHhmMCB8IDB4MGYpID09IDB4ZmYgJiYgZmFsc2UgIT0gdHJ1ZSAmJiBjbyA9PSAxO2srKykKKyAgICAgcmV0dXJuIDA7CisgfQorCisKKyBpbnQgY2YxMygpIHsKKyB0cnkgeworICB0cnkgeworICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigpOworICAgLy90aHJvdyBuZXcgamF2YS5pby5JT0V4Y2VwdGlvbigpOworICB9IGNhdGNoIChJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gZSkgeworICAgcmV0dXJuIDM7CisgIH0KKyAgZmluYWxseSB7CisgICB0aHJvdyBuZXcgamF2YS5pby5JT0V4Y2VwdGlvbigpOworICB9CisKKyB9IGNhdGNoIChqYXZhLmlvLklPRXhjZXB0aW9uIGVlKSB7CisgICByZXR1cm4gODg7CisgfQorIH0KKworIGludCBjZjE0KCkgeworICAgdHJ5IHsKKyAgICAgY2YxMygpOworICAgICByZXR1cm4gMTM7CisgICB9IGZpbmFsbHkgeworICAgICBjZjEzKCk7CisgICB9CisgfQorIAorIGludCBjZjE1KCkgeworICB0cnkgeworICAgaW50IGk9MDsKKyAgIHJldHVybiBpOworICB9IGNhdGNoIChFeGNlcHRpb24gZSkgeworICB9IGZpbmFsbHkgeworICB9CisgIHJldHVybiAwOworIH0KKyBpbnQgY2YxNigpIHsKKyAgICB0cnkgeworICAgICAgaWYgKCAhICgxPT0zKSkgeworICAgICAgICAgIHJldHVybiAwOworICAgICAgfQorICAgIH0gZmluYWxseSB7CisgICAgICAgIC8vIFJlc3RvcmUgdGhlIGN1cnJlbnQgcG9zaXRpb24gb2YgdGhlIG90aGVyIER5bkFueQorICAgIH0KKyAgICByZXR1cm4gMTsKKyB9CisKKyBpbnQgY2YxNygpIHsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICB9IGZpbmFsbHkgeworICAgICAgICAgICAgfQorICAgICAgICB9IGZpbmFsbHkgeworICAgICAgICB9CisgIH0KKyBpbnQgY2YxOChpbnQgaSkgeworICAgaW50IGs7CisgICB0cnkgeworICAgICAgaWYgKGk9PTQpIHJldHVybiAwOworICAgICAgayA9IDQ7CisgICB9IGZpbmFsbHkgeworICAgfQorICAgcmV0dXJuIGs7CisgIH0KKworCisgdm9pZCBjZjE5KCkgeworCisgICAgICB0cnkgeworCisgICAgICAgIHRyeSB7CisgICAgICAgIH0KKyAgICAgICAgZmluYWxseSB7CisgICAgICAgIH0KKyAgICAgICAgICByZXR1cm4gOworICAgICAgfQorICAgICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgICB9CisgfQorCit9CisKKworCisgY2xhc3MgYTQgIHsKK2ludGVyZmFjZSBpaSB7fQorCisKKworIGludCBmMSgpIHRocm93cyBFeGNlcHRpb24geworIDxlcnJvciBkZXNjcj0iTWlzc2luZyByZXR1cm4gc3RhdGVtZW50Ij59PC9lcnJvcj4KKyAKKyBPYmplY3QgZjIoaW50IGkpIHRocm93cyBFeGNlcHRpb24geworICAgaWYgKGkgPT0gMCkgcmV0dXJuIG51bGw7CisgPGVycm9yIGRlc2NyPSJNaXNzaW5nIHJldHVybiBzdGF0ZW1lbnQiPn08L2Vycm9yPgorCisgT2JqZWN0IGYzKGludCBpKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgIHdoaWxlIChpID09IDApIHJldHVybiBudWxsOworIDxlcnJvciBkZXNjcj0iTWlzc2luZyByZXR1cm4gc3RhdGVtZW50Ij59PC9lcnJvcj4KKworIE9iamVjdCBmNChpbnQgaSkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICBzd2l0Y2ggKGkpIHsKKyAgICAgY2FzZSAxOiByZXR1cm4gbnVsbDsKKyAgIH0KKyA8ZXJyb3IgZGVzY3I9Ik1pc3NpbmcgcmV0dXJuIHN0YXRlbWVudCI+fTwvZXJyb3I+CisKKyBPYmplY3QgZjUoaW50IGkpIHRocm93cyBFeGNlcHRpb24geworICAgaWYgKGk9PTIpIHJldHVybiBudWxsOworICAgZWxzZSBpZiAoaSAhPSAyKSByZXR1cm4gbnVsbDsKKyA8ZXJyb3IgZGVzY3I9Ik1pc3NpbmcgcmV0dXJuIHN0YXRlbWVudCI+fTwvZXJyb3I+CisKKyBPYmplY3QgZjYoaW50IGkpIHRocm93cyBFeGNlcHRpb24geworICAgaWYgKHRydWUpIHJldHVybiBudWxsOworIDxlcnJvciBkZXNjcj0iTWlzc2luZyByZXR1cm4gc3RhdGVtZW50Ij59PC9lcnJvcj4KKworIGludCBmNyhpbnQgaSkgeworICB0cnkgeworICAgaWYgKGk9PTIpIHJldHVybiA0OworICAgZWxzZSB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCk7CisgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgIH0KKyA8ZXJyb3IgZGVzY3I9Ik1pc3NpbmcgcmV0dXJuIHN0YXRlbWVudCI+fTwvZXJyb3I+CisKKyAgaW50IGY4KGludCBpKSB7CisgICAgdHJ5IHsKKyAgICAgIC8vdGhyb3cgbmV3IEVycm9yKCk7CisgICAgfQorICAgIGZpbmFsbHkgeworICAgICAgdHJ5IHsKKyAgICAgICAgLy90aHJvdyBuZXcgRXhjZXB0aW9uKCk7CisgICAgICB9CisgICAgICBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgcmV0dXJuIDU7CisgICAgICB9CisgICAgfQorIDxlcnJvciBkZXNjcj0iTWlzc2luZyByZXR1cm4gc3RhdGVtZW50Ij59PC9lcnJvcj4KKworIGludCBjZjEoaW50IGkpIHsKKyAgIHJldHVybiAwOworIH0KKyBpbnQgY2YyKGludCBpKSB7CisgICBpZiAoaT09MikgcmV0dXJuIDA7CisgICBlbHNlIGlmIChpPT00KSByZXR1cm4gLTE7CisgICBlbHNlIHJldHVybiAyOworIH0KKyBpbnQgY2YzKGludCBpKSB7CisgICByZXR1cm4gaT09MiA/IDMgOiA1OworIH0KKyBpbnQgY2Y0KGludCBpKSB7CisgICBzd2l0Y2ggKGkpIHsKKyAgICBjYXNlIDE6IHJldHVybiA0OworICAgIGNhc2UgMzogcmV0dXJuIDY7CisgICAgZGVmYXVsdDogcmV0dXJuIDU7CisgICB9CisgfQorIGludCBjZjUoaW50IGkpIHsKKyAgIGlmIChpPjEpIHsKKyAgICBpZiAoaT09NCkgcmV0dXJuIDA7CisgICAgZWxzZSByZXR1cm4gaT09MyA/IDIgOiAwOworICAgfQorICAgZWxzZSByZXR1cm4gMjsKKyB9CisgaW50IGNmNihpbnQgaSkgeworICAgcmV0dXJuIGNmNChpKzEpOworIH0KKworIGludCBjZjcoaW50IGkpIHRocm93cyBFeGNlcHRpb24geworICAgdHJ5IHsKKyAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbigpOworICAgfSBjYXRjaChFcnJvciBlKSB7CisgICAgIHJldHVybiAzOworICAgfSBmaW5hbGx5IHsKKyAgICAgcmV0dXJuIDI7CisgICB9CisKKyB9CisKKyBpbnQgY2Y4KGludCBpKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgIHRyeSB7CisgICAgIHJldHVybiAyOworICAgfSBmaW5hbGx5IHsKKyAgICAgcmV0dXJuIDQ7CisgICB9CisgfQorIGludCBjZjkoaW50IGkpIHRocm93cyBFeGNlcHRpb24geworICAgdHJ5IHsKKyAgICAgaSA9IDU7CisgICB9IGZpbmFsbHkgeworICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCk7CisgICB9CisgfQorCisgaW50IGNmMTAoaW50IGkpIHsKKworICAgd2hpbGUgKHRydWUpCisgICAgIHJldHVybiAwOworIH0KKyBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgY28gPSAxLzIgKyAxOworIGludCBjZjEyKGludCBpKSB7CisKKyAgIGZvciAoaW50IGs9MDsgKDB4ZjAgfCAweDBmKSA9PSAweGZmICYmIGZhbHNlICE9IHRydWUgJiYgY28gPT0gMTtrKyspCisgICAgIHJldHVybiAwOworIH0KKworCisgaW50IGNmMTMoKSB7CisgdHJ5IHsKKyAgdHJ5IHsKKyAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oKTsKKyAgIC8vdGhyb3cgbmV3IGphdmEuaW8uSU9FeGNlcHRpb24oKTsKKyAgfSBjYXRjaCAoSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIGUpIHsKKyAgIHJldHVybiAzOworICB9CisgIGZpbmFsbHkgeworICAgdGhyb3cgbmV3IGphdmEuaW8uSU9FeGNlcHRpb24oKTsKKyAgfQorCisgfSBjYXRjaCAoamF2YS5pby5JT0V4Y2VwdGlvbiBlZSkgeworICAgcmV0dXJuIDg4OworIH0KKyB9CisKKyBpbnQgY2YxNCgpIHsKKyAgIHRyeSB7CisgICAgIGNmMTMoKTsKKyAgICAgcmV0dXJuIDEzOworICAgfSBmaW5hbGx5IHsKKyAgICAgY2YxMygpOworICAgfQorIH0KKyAKKyBpbnQgY2YxNSgpIHsKKyAgdHJ5IHsKKyAgIGludCBpPTA7CisgICByZXR1cm4gaTsKKyAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgfSBmaW5hbGx5IHsKKyAgfQorICByZXR1cm4gMDsKKyB9CisgaW50IGNmMTYoKSB7CisgICAgdHJ5IHsKKyAgICAgIGlmICggISAoMT09MykpIHsKKyAgICAgICAgICByZXR1cm4gMDsKKyAgICAgIH0KKyAgICB9IGZpbmFsbHkgeworICAgICAgICAvLyBSZXN0b3JlIHRoZSBjdXJyZW50IHBvc2l0aW9uIG9mIHRoZSBvdGhlciBEeW5BbnkKKyAgICB9CisgICAgcmV0dXJuIDE7CisgfQorCisgaW50IGNmMTcoKSB7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgfSBmaW5hbGx5IHsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBmaW5hbGx5IHsKKyAgICAgICAgfQorICB9CisgaW50IGNmMTgoaW50IGkpIHsKKyAgIGludCBrOworICAgdHJ5IHsKKyAgICAgIGlmIChpPT00KSByZXR1cm4gMDsKKyAgICAgIGsgPSA0OworICAgfSBmaW5hbGx5IHsKKyAgIH0KKyAgIHJldHVybiBrOworICB9CisKKworIHZvaWQgY2YxOSgpIHsKKworICAgICAgdHJ5IHsKKworICAgICAgICB0cnkgeworICAgICAgICB9CisgICAgICAgIGZpbmFsbHkgeworICAgICAgICB9CisgICAgICAgICAgcmV0dXJuIDsKKyAgICAgIH0KKyAgICAgIGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgICAgfQorIH0KKworfQorCisgY2xhc3MgYTUgIHsKK2ludGVyZmFjZSBpaSB7fQorCisKKworIGludCBmMSgpIHRocm93cyBFeGNlcHRpb24geworIDxlcnJvciBkZXNjcj0iTWlzc2luZyByZXR1cm4gc3RhdGVtZW50Ij59PC9lcnJvcj4KKyAKKyBPYmplY3QgZjIoaW50IGkpIHRocm93cyBFeGNlcHRpb24geworICAgaWYgKGkgPT0gMCkgcmV0dXJuIG51bGw7CisgPGVycm9yIGRlc2NyPSJNaXNzaW5nIHJldHVybiBzdGF0ZW1lbnQiPn08L2Vycm9yPgorCisgT2JqZWN0IGYzKGludCBpKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgIHdoaWxlIChpID09IDApIHJldHVybiBudWxsOworIDxlcnJvciBkZXNjcj0iTWlzc2luZyByZXR1cm4gc3RhdGVtZW50Ij59PC9lcnJvcj4KKworIE9iamVjdCBmNChpbnQgaSkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICBzd2l0Y2ggKGkpIHsKKyAgICAgY2FzZSAxOiByZXR1cm4gbnVsbDsKKyAgIH0KKyA8ZXJyb3IgZGVzY3I9Ik1pc3NpbmcgcmV0dXJuIHN0YXRlbWVudCI+fTwvZXJyb3I+CisKKyBPYmplY3QgZjUoaW50IGkpIHRocm93cyBFeGNlcHRpb24geworICAgaWYgKGk9PTIpIHJldHVybiBudWxsOworICAgZWxzZSBpZiAoaSAhPSAyKSByZXR1cm4gbnVsbDsKKyA8ZXJyb3IgZGVzY3I9Ik1pc3NpbmcgcmV0dXJuIHN0YXRlbWVudCI+fTwvZXJyb3I+CisKKyBPYmplY3QgZjYoaW50IGkpIHRocm93cyBFeGNlcHRpb24geworICAgaWYgKHRydWUpIHJldHVybiBudWxsOworIDxlcnJvciBkZXNjcj0iTWlzc2luZyByZXR1cm4gc3RhdGVtZW50Ij59PC9lcnJvcj4KKworIGludCBmNyhpbnQgaSkgeworICB0cnkgeworICAgaWYgKGk9PTIpIHJldHVybiA0OworICAgZWxzZSB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCk7CisgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgIH0KKyA8ZXJyb3IgZGVzY3I9Ik1pc3NpbmcgcmV0dXJuIHN0YXRlbWVudCI+fTwvZXJyb3I+CisKKyAgaW50IGY4KGludCBpKSB7CisgICAgdHJ5IHsKKyAgICAgIC8vdGhyb3cgbmV3IEVycm9yKCk7CisgICAgfQorICAgIGZpbmFsbHkgeworICAgICAgdHJ5IHsKKyAgICAgICAgLy90aHJvdyBuZXcgRXhjZXB0aW9uKCk7CisgICAgICB9CisgICAgICBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgcmV0dXJuIDU7CisgICAgICB9CisgICAgfQorIDxlcnJvciBkZXNjcj0iTWlzc2luZyByZXR1cm4gc3RhdGVtZW50Ij59PC9lcnJvcj4KKworICBpbnQgZjkoaW50IGkpIHsKKyAgICBpZiAoaT09MSkgcmV0dXJuIDA7CisgICAgZWxzZSBhc3NlcnQgZmFsc2U7CisgPGVycm9yIGRlc2NyPSJNaXNzaW5nIHJldHVybiBzdGF0ZW1lbnQiPn08L2Vycm9yPgorCisKKworIGludCBjZjEoaW50IGkpIHsKKyAgIHJldHVybiAwOworIH0KKyBpbnQgY2YyKGludCBpKSB7CisgICBpZiAoaT09MikgcmV0dXJuIDA7CisgICBlbHNlIGlmIChpPT00KSByZXR1cm4gLTE7CisgICBlbHNlIHJldHVybiAyOworIH0KKyBpbnQgY2YzKGludCBpKSB7CisgICByZXR1cm4gaT09MiA/IDMgOiA1OworIH0KKyBpbnQgY2Y0KGludCBpKSB7CisgICBzd2l0Y2ggKGkpIHsKKyAgICBjYXNlIDE6IHJldHVybiA0OworICAgIGNhc2UgMzogcmV0dXJuIDY7CisgICAgZGVmYXVsdDogcmV0dXJuIDU7CisgICB9CisgfQorIGludCBjZjUoaW50IGkpIHsKKyAgIGlmIChpPjEpIHsKKyAgICBpZiAoaT09NCkgcmV0dXJuIDA7CisgICAgZWxzZSByZXR1cm4gaT09MyA/IDIgOiAwOworICAgfQorICAgZWxzZSByZXR1cm4gMjsKKyB9CisgaW50IGNmNihpbnQgaSkgeworICAgcmV0dXJuIGNmNChpKzEpOworIH0KKworIGludCBjZjcoaW50IGkpIHRocm93cyBFeGNlcHRpb24geworICAgdHJ5IHsKKyAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbigpOworICAgfSBjYXRjaChFcnJvciBlKSB7CisgICAgIHJldHVybiAzOworICAgfSBmaW5hbGx5IHsKKyAgICAgcmV0dXJuIDI7CisgICB9CisKKyB9CisKKyBpbnQgY2Y4KGludCBpKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgIHRyeSB7CisgICAgIHJldHVybiAyOworICAgfSBmaW5hbGx5IHsKKyAgICAgcmV0dXJuIDQ7CisgICB9CisgfQorIGludCBjZjkoaW50IGkpIHRocm93cyBFeGNlcHRpb24geworICAgdHJ5IHsKKyAgICAgaSA9IDU7CisgICB9IGZpbmFsbHkgeworICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCk7CisgICB9CisgfQorCisgaW50IGNmMTAoaW50IGkpIHsKKworICAgd2hpbGUgKHRydWUpCisgICAgIHJldHVybiAwOworIH0KKyBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgY28gPSAxLzIgKyAxOworIGludCBjZjEyKGludCBpKSB7CisKKyAgIGZvciAoaW50IGs9MDsgKDB4ZjAgfCAweDBmKSA9PSAweGZmICYmIGZhbHNlICE9IHRydWUgJiYgY28gPT0gMTtrKyspCisgICAgIHJldHVybiAwOworIH0KKworCisgaW50IGNmMTMoKSB7CisgdHJ5IHsKKyAgdHJ5IHsKKyAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oKTsKKyAgIC8vdGhyb3cgbmV3IGphdmEuaW8uSU9FeGNlcHRpb24oKTsKKyAgfSBjYXRjaCAoSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIGUpIHsKKyAgIHJldHVybiAzOworICB9CisgIGZpbmFsbHkgeworICAgdGhyb3cgbmV3IGphdmEuaW8uSU9FeGNlcHRpb24oKTsKKyAgfQorCisgfSBjYXRjaCAoamF2YS5pby5JT0V4Y2VwdGlvbiBlZSkgeworICAgcmV0dXJuIDg4OworIH0KKyB9CisKKyBpbnQgY2YxNCgpIHsKKyAgIHRyeSB7CisgICAgIGNmMTMoKTsKKyAgICAgcmV0dXJuIDEzOworICAgfSBmaW5hbGx5IHsKKyAgICAgY2YxMygpOworICAgfQorIH0KKyAKKyBpbnQgY2YxNSgpIHsKKyAgdHJ5IHsKKyAgIGludCBpPTA7CisgICByZXR1cm4gaTsKKyAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgfSBmaW5hbGx5IHsKKyAgfQorICByZXR1cm4gMDsKKyB9CisgaW50IGNmMTYoKSB7CisgICAgdHJ5IHsKKyAgICAgIGlmICggISAoMT09MykpIHsKKyAgICAgICAgICByZXR1cm4gMDsKKyAgICAgIH0KKyAgICB9IGZpbmFsbHkgeworICAgICAgICAvLyBSZXN0b3JlIHRoZSBjdXJyZW50IHBvc2l0aW9uIG9mIHRoZSBvdGhlciBEeW5BbnkKKyAgICB9CisgICAgcmV0dXJuIDE7CisgfQorCisgaW50IGNmMTcoKSB7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgfSBmaW5hbGx5IHsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBmaW5hbGx5IHsKKyAgICAgICAgfQorICB9CisgaW50IGNmMTgoaW50IGkpIHsKKyAgIGludCBrOworICAgdHJ5IHsKKyAgICAgIGlmIChpPT00KSByZXR1cm4gMDsKKyAgICAgIGsgPSA0OworICAgfSBmaW5hbGx5IHsKKyAgIH0KKyAgIHJldHVybiBrOworICB9CisKKworIHZvaWQgY2YxOSgpIHsKKworICAgICAgdHJ5IHsKKworICAgICAgICB0cnkgeworICAgICAgICB9CisgICAgICAgIGZpbmFsbHkgeworICAgICAgICB9CisgICAgICAgICAgcmV0dXJuIDsKKyAgICAgIH0KKyAgICAgIGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgICAgfQorIH0KKyBpbnQgY2YyMChib29sZWFuIGIxLCBib29sZWFuIGIyKSB7CisgICAgZG8geworICAgIH0gd2hpbGUgKGIxIHx8IGIyKTsKKyAgICByZXR1cm4gMDsKKyB9CisKKyBwdWJsaWMgYm9vbGVhbiBjZjIxKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKKyAgICB0cnkgeworICAgICAgcmV0dXJuIGdldGEoKTsKKyAgICB9CisgICAgY2F0Y2goSU9FeGNlcHRpb24gZSkgeworICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oKTsKKyAgICB9CisgICAgZmluYWxseSB7CisgICAgICBnZXRhKCk7CisgICAgfQorIH0KKyBwcml2YXRlIGJvb2xlYW4gZ2V0YSgpIHRocm93cyBJT0V4Y2VwdGlvbiB7CisgICAgcmV0dXJuIHRydWU7CisgfQorCisgU3RyaW5nIGNvbXBsZXhBc3MoT2JqZWN0IG8sIE9iamVjdCBwKSB7CisgICBhc3NlcnQgbyAhPSBudWxsICYmIHAgIT0gbnVsbDsKKyAgIHJldHVybiBudWxsOworIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nL01vZGlmaWVyQWxsb3dlZC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmcvTW9kaWZpZXJBbGxvd2VkLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2NhMjdlNgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nL01vZGlmaWVyQWxsb3dlZC5qYXZhCkBAIC0wLDAgKzEsNzcgQEAKKy8vIG5vdCBhbGxvd2VkIG1vZGlmaWVycworPGVycm9yIGRlc2NyPSJNb2RpZmllciAncHJpdmF0ZScgbm90IGFsbG93ZWQgaGVyZSI+cHJpdmF0ZTwvZXJyb3I+IAorPGVycm9yIGRlc2NyPSJNb2RpZmllciAnc3RhdGljJyBub3QgYWxsb3dlZCBoZXJlIj5zdGF0aWM8L2Vycm9yPgorPGVycm9yIGRlc2NyPSJNb2RpZmllciAndm9sYXRpbGUnIG5vdCBhbGxvd2VkIGhlcmUiPnZvbGF0aWxlPC9lcnJvcj4KK2NsYXNzIGEgeworCisgIHN0YXRpYyAKKyAgPGVycm9yIGRlc2NyPSJNb2RpZmllciAncHJpdmF0ZScgbm90IGFsbG93ZWQgaGVyZSI+cHJpdmF0ZTwvZXJyb3I+CisgIDxlcnJvciBkZXNjcj0iTW9kaWZpZXIgJ3B1YmxpYycgbm90IGFsbG93ZWQgaGVyZSI+cHVibGljPC9lcnJvcj4KKyAgPGVycm9yIGRlc2NyPSJNb2RpZmllciAnYWJzdHJhY3QnIG5vdCBhbGxvd2VkIGhlcmUiPmFic3RyYWN0PC9lcnJvcj4geworICAgIGludCBpID0gNDsKKyAgfQorICA8ZXJyb3IgZGVzY3I9Ik1vZGlmaWVyICdzeW5jaHJvbml6ZWQnIG5vdCBhbGxvd2VkIGhlcmUiPnN5bmNocm9uaXplZDwvZXJyb3I+IE9iamVjdCB4OworCisKKyAgcHJpdmF0ZSBjbGFzcyBjMSB7IAorICAgIHByaXZhdGUgdm9pZCBmZigpIHt9CisgIH0KKyAgc3RhdGljIHN0cmljdGZwIGNsYXNzIGMyIHt9CisKKyAgcHJpdmF0ZSBzdGF0aWMgaW50ZXJmYWNlIGlpIHsKKyAgICA8ZXJyb3IgZGVzY3I9Ik1vZGlmaWVyICdwcml2YXRlJyBub3QgYWxsb3dlZCBoZXJlIj5wcml2YXRlPC9lcnJvcj4gaW50IGYxID0gMjsKKyAgICA8ZXJyb3IgZGVzY3I9Ik1vZGlmaWVyICdwcm90ZWN0ZWQnIG5vdCBhbGxvd2VkIGhlcmUiPnByb3RlY3RlZDwvZXJyb3I+IGludCBmMiA9IDI7CisgICAgcHVibGljIGludCBmMyA9IDM7CisKKworICAgIDxlcnJvciBkZXNjcj0iTW9kaWZpZXIgJ3ByaXZhdGUnIG5vdCBhbGxvd2VkIGhlcmUiPnByaXZhdGU8L2Vycm9yPiBpbnQgZjEoKTsKKyAgICA8ZXJyb3IgZGVzY3I9Ik1vZGlmaWVyICdwcm90ZWN0ZWQnIG5vdCBhbGxvd2VkIGhlcmUiPnByb3RlY3RlZDwvZXJyb3I+IGludCBmMigpOworICAgIHB1YmxpYyBpbnQgZjMoKTsKKyAgICB2b2lkIGY0KCk7CisKKyAgfQorCisgIHZvaWQgZjEoZmluYWwgU3RyaW5nIGkpIHsKKyAgICBmaW5hbCBpbnQgaWkgPSAzOworICAgIDxlcnJvciBkZXNjcj0iTW9kaWZpZXIgJ3ByaXZhdGUnIG5vdCBhbGxvd2VkIGhlcmUiPnByaXZhdGU8L2Vycm9yPiBpbnQgaTI7CisgICAgPGVycm9yIGRlc2NyPSJNb2RpZmllciAnc3RhdGljJyBub3QgYWxsb3dlZCBoZXJlIj5zdGF0aWM8L2Vycm9yPiBpbnQgaTM7CisKKyAgICB0cnkgeworICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCk7CisgICAgfSBjYXRjaCAoZmluYWwgPGVycm9yIGRlc2NyPSJNb2RpZmllciAnc3RhdGljJyBub3QgYWxsb3dlZCBoZXJlIj5zdGF0aWM8L2Vycm9yPiBFeGNlcHRpb24gZSkgeworICAgIH0KKyAgfQorCit9CisKK2ludGVyZmFjZSBmZiB7CisgIHN0YXRpYyBjbGFzcyBjYyB7fQorfQorCithYnN0cmFjdCBjbGFzcyBjIHsKKyAgPGVycm9yIGRlc2NyPSJNb2RpZmllciAnYWJzdHJhY3QnIG5vdCBhbGxvd2VkIGhlcmUiPmFic3RyYWN0PC9lcnJvcj4gYygpOworICA8ZXJyb3IgZGVzY3I9Ik1vZGlmaWVyICdzdGF0aWMnIG5vdCBhbGxvd2VkIGhlcmUiPnN0YXRpYzwvZXJyb3I+IGMoaW50IGkpIHt9CisgIDxlcnJvciBkZXNjcj0iTW9kaWZpZXIgJ25hdGl2ZScgbm90IGFsbG93ZWQgaGVyZSI+bmF0aXZlPC9lcnJvcj4gYyhib29sZWFuIGIpOworICA8ZXJyb3IgZGVzY3I9Ik1vZGlmaWVyICdmaW5hbCcgbm90IGFsbG93ZWQgaGVyZSI+ZmluYWw8L2Vycm9yPiBjKGNoYXIgYykge30KKyAgPGVycm9yIGRlc2NyPSJNb2RpZmllciAnc3RyaWN0ZnAnIG5vdCBhbGxvd2VkIGhlcmUiPnN0cmljdGZwPC9lcnJvcj4gYyhTdHJpbmcgcykge30KKyAgPGVycm9yIGRlc2NyPSJNb2RpZmllciAnc3luY2hyb25pemVkJyBub3QgYWxsb3dlZCBoZXJlIj5zeW5jaHJvbml6ZWQ8L2Vycm9yPiBjKE9iamVjdCBvKSB7fQorfQorCitpbnRlcmZhY2UgaTMgeworICA8ZXJyb3IgZGVzY3I9Ik1vZGlmaWVyICdzdHJpY3RmcCcgbm90IGFsbG93ZWQgaGVyZSI+c3RyaWN0ZnA8L2Vycm9yPiBpbnQgZjE7CisgIDxlcnJvciBkZXNjcj0iTW9kaWZpZXIgJ3RyYW5zaWVudCcgbm90IGFsbG93ZWQgaGVyZSI+dHJhbnNpZW50PC9lcnJvcj4gaW50IGYyOworICA8ZXJyb3IgZGVzY3I9Ik1vZGlmaWVyICdzeW5jaHJvbml6ZWQnIG5vdCBhbGxvd2VkIGhlcmUiPnN5bmNocm9uaXplZDwvZXJyb3I+ICBpbnQgZjM7CisKKyAgPGVycm9yIGRlc2NyPSJNb2RpZmllciAnc3RyaWN0ZnAnIG5vdCBhbGxvd2VkIGhlcmUiPnN0cmljdGZwPC9lcnJvcj4gaW50IG0xKCkgeyByZXR1cm4gMDsgfQorICA8ZXJyb3IgZGVzY3I9Ik1vZGlmaWVyICd0cmFuc2llbnQnIG5vdCBhbGxvd2VkIGhlcmUiPnRyYW5zaWVudDwvZXJyb3I+IGludCBtMigpIHsgcmV0dXJuIDA7IH0KKyAgPGVycm9yIGRlc2NyPSJNb2RpZmllciAnc3luY2hyb25pemVkJyBub3QgYWxsb3dlZCBoZXJlIj5zeW5jaHJvbml6ZWQ8L2Vycm9yPiAgaW50IG0zKCkgeyByZXR1cm4gMDsgfQorfQorCitjbGFzcyBMb2NhbENsYXNzV2l0aElubmVyIHsKKyAgICB2b2lkIGZvbyAoKSB7CisgICAgICAgICAgY2xhc3MgQSB7CisgICAgICAgICAgICAgPGVycm9yIGRlc2NyPSJNb2RpZmllciAncHJpdmF0ZScgbm90IGFsbG93ZWQgaGVyZSI+cHJpdmF0ZTwvZXJyb3I+IGNsYXNzIEIge30KKyAgICAgICAgICAgICA8ZXJyb3IgZGVzY3I9Ik1vZGlmaWVyICdwdWJsaWMnIG5vdCBhbGxvd2VkIGhlcmUiPnB1YmxpYzwvZXJyb3I+IGNsYXNzIEIxIHt9CisgICAgICAgIH0KKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZy9NdWx0aUZpZWxkRGVjbE5hbWVzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZy9NdWx0aUZpZWxkRGVjbE5hbWVzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmVhMGE3MAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nL011bHRpRmllbGREZWNsTmFtZXMuamF2YQpAQCAtMCwwICsxLDQgQEAKK2NsYXNzIDxzeW1ib2xOYW1lIGRlc2NyPSJudWxsIiB0eXBlPSJDTEFTU19OQU1FIj5UZXN0PC9zeW1ib2xOYW1lPnsKKyAgaW50IDxzeW1ib2xOYW1lIGRlc2NyPSJudWxsIiB0eXBlPSJJTlNUQU5DRV9GSUVMRCI+ZmllbGQxPC9zeW1ib2xOYW1lPiA9IDAsIDxzeW1ib2xOYW1lIGRlc2NyPSJudWxsIiB0eXBlPSJJTlNUQU5DRV9GSUVMRCI+ZmllbGQyPC9zeW1ib2xOYW1lPiA9IDA7CisgIGludCA8c3ltYm9sTmFtZSBkZXNjcj0ibnVsbCIgdHlwZT0iSU5TVEFOQ0VfRklFTEQiPmZpZWxkMzwvc3ltYm9sTmFtZT4sIDxzeW1ib2xOYW1lIGRlc2NyPSJudWxsIiB0eXBlPSJJTlNUQU5DRV9GSUVMRCI+ZmllbGQ0PC9zeW1ib2xOYW1lPjsKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nL011bHRpcGxlU2luZ2xlVHlwZUltcG9ydHMuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nL011bHRpcGxlU2luZ2xlVHlwZUltcG9ydHMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zODE0N2U5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmcvTXVsdGlwbGVTaW5nbGVUeXBlSW1wb3J0cy5qYXZhCkBAIC0wLDAgKzEsOSBAQAorLy8gbXVsdGlwbGUgc2luZ2xlLXR5cGUgaW1wb3J0IG9mIHRoZSBzYW1lIGNsYXNzIAorCitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKKzx3YXJuaW5nIGRlc2NyPSJVbnVzZWQgaW1wb3J0IHN0YXRlbWVudCI+aW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247PC93YXJuaW5nPgorCisKK3B1YmxpYyBjbGFzcyBjIHsgCisgIHB1YmxpYyBJT0V4Y2VwdGlvbiBtOworfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmcvTXVzdEJlQm9vbGVhbi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmcvTXVzdEJlQm9vbGVhbi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZmNWFmZDUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZy9NdXN0QmVCb29sZWFuLmphdmEKQEAgLTAsMCArMSwyMCBAQAorY2xhc3MgYyB7CisgIHZvaWQgZigpIHsKKyAgICBPYmplY3QgbyA9IG51bGw7CisgICAgaWYgKDxlcnJvciBkZXNjcj0iSW5jb21wYXRpYmxlIHR5cGVzLiBGb3VuZDogJ2phdmEubGFuZy5PYmplY3QnLCByZXF1aXJlZDogJ2Jvb2xlYW4nIj5vPC9lcnJvcj4pIHsKKyAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBTdHJpbmcgc3RyMSA9ICIiOworICAgIFN0cmluZyBzdHIyID0gIiI7CisgICAgZG8ge30gCisgICAgd2hpbGUgKDxlcnJvciBkZXNjcj0iSW5jb21wYXRpYmxlIHR5cGVzLiBGb3VuZDogJ2phdmEubGFuZy5TdHJpbmcnLCByZXF1aXJlZDogJ2Jvb2xlYW4nIj5zdHIxID0gc3RyMjwvZXJyb3I+KTsKKworICAgIGludCBpOCA9IDxlcnJvciBkZXNjcj0iSW5jb21wYXRpYmxlIHR5cGVzLiBGb3VuZDogJ2phdmEubGFuZy5TdHJpbmcnLCByZXF1aXJlZDogJ2Jvb2xlYW4nIj4iZmYiICsgdHJ1ZTwvZXJyb3I+ID8gMSA6IDI7CisKKyAgICBhc3NlcnQgPGVycm9yIGRlc2NyPSJJbmNvbXBhdGlibGUgdHlwZXMuIEZvdW5kOiAnaW50JywgcmVxdWlyZWQ6ICdib29sZWFuJyI+MDwvZXJyb3I+OworICAgIGFzc2VydCA8ZXJyb3IgZGVzY3I9IkluY29tcGF0aWJsZSB0eXBlcy4gRm91bmQ6ICdjaGFyJywgcmVxdWlyZWQ6ICdib29sZWFuJyI+J2EnPC9lcnJvcj47CisgICAgYXNzZXJ0IDxlcnJvciBkZXNjcj0iSW5jb21wYXRpYmxlIHR5cGVzLiBGb3VuZDogJ2phdmEubGFuZy5TdHJpbmcnLCByZXF1aXJlZDogJ2Jvb2xlYW4nIj4iIjwvZXJyb3I+OyAKKyAgICBhc3NlcnQgPGVycm9yIGRlc2NyPSJJbmNvbXBhdGlibGUgdHlwZXMuIEZvdW5kOiAndm9pZCcsIHJlcXVpcmVkOiAnYm9vbGVhbiciPmYoKTwvZXJyb3I+OworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmcvTXVzdEJlRmluYWwuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nL011c3RCZUZpbmFsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjJhOTE0YgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nL011c3RCZUZpbmFsLmphdmEKQEAgLTAsMCArMSwxMiBAQAorY2xhc3MgbSB7CisgIGludCBpOworICB2b2lkIGYoKSB7CisgICAgaW50IHIgPSAwOworICAgIG5ldyBSdW5uYWJsZSgpIHsKKyAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKKyAgICAgICAgaW50IGsgPSA8ZXJyb3IgZGVzY3I9IlZhcmlhYmxlICdyJyBpcyBhY2Nlc3NlZCBmcm9tIHdpdGhpbiBpbm5lciBjbGFzcy4gTmVlZHMgdG8gYmUgZGVjbGFyZWQgZmluYWwuIj5yPC9lcnJvcj47CisgICAgICAgIGludCBpaSA9IGk7CisgICAgICB9CisgICAgfTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nL011c3RCZVRocm93YWJsZS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmcvTXVzdEJlVGhyb3dhYmxlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmQ0ZTU5YgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nL011c3RCZVRocm93YWJsZS5qYXZhCkBAIC0wLDAgKzEsNDYgQEAKK2NsYXNzIGMgeworICAgIHZvaWQgZjEoKSB7CisgICAgICAgIHRyeSB7CisgICAgICAgIH0gY2F0Y2ggKDxlcnJvciBkZXNjcj0iSW5jb21wYXRpYmxlIHR5cGVzLiBGb3VuZDogJ2phdmEubGFuZy5FcnJvcltdJywgcmVxdWlyZWQ6ICdqYXZhLmxhbmcuVGhyb3dhYmxlJyI+RXJyb3JbXSBlPC9lcnJvcj4pIHsKKyAgICAgICAgfQorICAgICAgICB0cnkgeworICAgICAgICB9IGNhdGNoICg8ZXJyb3IgZGVzY3I9IkluY29tcGF0aWJsZSB0eXBlcy4gRm91bmQ6ICdqYXZhLmxhbmcuRXJyb3JbXScsIHJlcXVpcmVkOiAnamF2YS5sYW5nLlRocm93YWJsZSciPkVycm9yIGVbXTwvZXJyb3I+KSB7CisgICAgICAgIH0KKyAgICAgICAgdHJ5IHsKKyAgICAgICAgfSBjYXRjaCAoPGVycm9yIGRlc2NyPSJJbmNvbXBhdGlibGUgdHlwZXMuIEZvdW5kOiAnamF2YS5sYW5nLkVycm9yW11bXVtdW10nLCByZXF1aXJlZDogJ2phdmEubGFuZy5UaHJvd2FibGUnIj5FcnJvcltdIFtdZVtdIFtdPC9lcnJvcj4pIHsKKyAgICAgICAgfQorICAgICAgICBjYXRjaCg8ZXJyb3IgZGVzY3I9IkluY29tcGF0aWJsZSB0eXBlcy4gRm91bmQ6ICdpbnQnLCByZXF1aXJlZDogJ2phdmEubGFuZy5UaHJvd2FibGUnIj5pbnQgZTwvZXJyb3I+KSB7CisgICAgICAgIH0KKworICAgIH0KKworfQorCitjbGFzcyBNeUV4Y2VwdGlvbiAvLyBkb2VzIG5vdCBleHRlbmQgVGhyb3dhYmxlCit7fQorIAorY2xhc3MgYTYwCit7CisgIHB1YmxpYyB2b2lkIHRlc3QoKSB0aHJvd3MgPGVycm9yIGRlc2NyPSJJbmNvbXBhdGlibGUgdHlwZXMuIEZvdW5kOiAnTXlFeGNlcHRpb24nLCByZXF1aXJlZDogJ2phdmEubGFuZy5UaHJvd2FibGUnIj5NeUV4Y2VwdGlvbjwvZXJyb3I+CisgIHsKKyAgICB0aHJvdyA8ZXJyb3IgZGVzY3I9IkluY29tcGF0aWJsZSB0eXBlcy4gRm91bmQ6ICdNeUV4Y2VwdGlvbicsIHJlcXVpcmVkOiAnamF2YS5sYW5nLlRocm93YWJsZSciPm5ldyBNeUV4Y2VwdGlvbigpPC9lcnJvcj47CisgIH0KKyAgcHVibGljIHZvaWQgdGVzdChpbnQgaSkgeworCXN3aXRjaCAoaSkgeworCQljYXNlIDE6IHRocm93IDxlcnJvciBkZXNjcj0iSW5jb21wYXRpYmxlIHR5cGVzLiBGb3VuZDogJ2Jvb2xlYW4nLCByZXF1aXJlZDogJ2phdmEubGFuZy5UaHJvd2FibGUnIj5mYWxzZTwvZXJyb3I+OworCQljYXNlIDI6IHRocm93IDxlcnJvciBkZXNjcj0iSW5jb21wYXRpYmxlIHR5cGVzLiBGb3VuZDogJ2ludCcsIHJlcXVpcmVkOiAnamF2YS5sYW5nLlRocm93YWJsZSciPjE8L2Vycm9yPjsKKwkJY2FzZSAzOiB0aHJvdyA8ZXJyb3IgZGVzY3I9IkluY29tcGF0aWJsZSB0eXBlcy4gRm91bmQ6ICdkb3VibGUnLCByZXF1aXJlZDogJ2phdmEubGFuZy5UaHJvd2FibGUnIj4xLjA8L2Vycm9yPjsKKwkJY2FzZSA0OiB0aHJvdyA8ZXJyb3IgZGVzY3I9IkluY29tcGF0aWJsZSB0eXBlcy4gRm91bmQ6ICdjaGFyJywgcmVxdWlyZWQ6ICdqYXZhLmxhbmcuVGhyb3dhYmxlJyI+J2EnPC9lcnJvcj47CisJCWNhc2UgNTogdGhyb3cgPGVycm9yIGRlc2NyPSJJbmNvbXBhdGlibGUgdHlwZXMuIEZvdW5kOiAnbG9uZycsIHJlcXVpcmVkOiAnamF2YS5sYW5nLlRocm93YWJsZSciPjFMPC9lcnJvcj47CisJCWNhc2UgNjogdGhyb3cgPGVycm9yIGRlc2NyPSJJbmNvbXBhdGlibGUgdHlwZXMuIEZvdW5kOiAnZmxvYXQnLCByZXF1aXJlZDogJ2phdmEubGFuZy5UaHJvd2FibGUnIj4xLjBmPC9lcnJvcj47CisJfQorICB9Cit9CisKKyBjbGFzcyBDb250ZXN0IHsKKyAgICBzaG9ydCBtaWRnZXQ7CisKKyAgICB2b2lkIHN0cm9uZ01hbigpIHRocm93cyA8ZXJyb3IgZGVzY3I9IkNsYXNzIG5hbWUgZXhwZWN0ZWQiPm1pZGdldDwvZXJyb3I+IHsKKyAgICB9Cit9CisKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nL05hbWVzSGlnaGxpZ2h0aW5nLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZy9OYW1lc0hpZ2hsaWdodGluZy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE5MmFlZmEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZy9OYW1lc0hpZ2hsaWdodGluZy5qYXZhCkBAIC0wLDAgKzEsNjIgQEAKK2ltcG9ydCA8c3ltYm9sTmFtZSBkZXNjcj0ibnVsbCIgdHlwZT0iQ0xBU1NfTkFNRSI+amF2YS5pbzwvc3ltYm9sTmFtZT4uKjsgLy8gaGlnaGxpZ2h0IG9uIGRlbWFuZCBpbXBvcnQgYXMgY2xhc3MgbmFtZQorCitjbGFzcyA8c3ltYm9sTmFtZSBkZXNjcj0ibnVsbCIgdHlwZT0iQ0xBU1NfTkFNRSI+YTwvc3ltYm9sTmFtZT4geworICB2b2lkIDxzeW1ib2xOYW1lIGRlc2NyPSJudWxsIiB0eXBlPSJNRVRIT0RfREVDTEFSQVRJT04iPm1ldGhvZDwvc3ltYm9sTmFtZT4oKSB7CisgICAgPHN5bWJvbE5hbWUgZGVzY3I9Im51bGwiIHR5cGU9Ik1FVEhPRF9DQUxMIj5tZXRob2Q8L3N5bWJvbE5hbWU+KCk7CisKKyAgICBuZXcgPHN5bWJvbE5hbWUgZGVzY3I9Im51bGwiIHR5cGU9IkNPTlNUUlVDVE9SX0NBTEwiPkV4Y2VwdGlvbjwvc3ltYm9sTmFtZT4oKTsKKyAgICBuZXcgPHN5bWJvbE5hbWUgZGVzY3I9Im51bGwiIHR5cGU9IkNPTlNUUlVDVE9SX0NBTEwiPmphdmEubGFuZy5FeGNlcHRpb248L3N5bWJvbE5hbWU+KCk7CisgIH0KKworICA8c3ltYm9sTmFtZSBkZXNjcj0ibnVsbCIgdHlwZT0iQ09OU1RSVUNUT1JfREVDTEFSQVRJT04iPmE8L3N5bWJvbE5hbWU+KCkgeworICAgIG5ldyA8c3ltYm9sTmFtZSBkZXNjcj0ibnVsbCIgdHlwZT0iQ09OU1RSVUNUT1JfQ0FMTCI+YTwvc3ltYm9sTmFtZT4oKTsKKyAgfQorIAorICAvKioKKyAgICogQHNlZSA8c3ltYm9sTmFtZSBkZXNjcj0ibnVsbCIgdHlwZT0iSU5URVJGQUNFX05BTUUiPml0Zjwvc3ltYm9sTmFtZT4jPHN5bWJvbE5hbWUgZGVzY3I9Im51bGwiIHR5cGU9IkFCU1RSQUNUX01FVEhPRCI+bWV0aG9kPC9zeW1ib2xOYW1lPihkb3VibGUpCisgICAqLworICBzdGF0aWMgdm9pZCA8c3ltYm9sTmFtZSBkZXNjcj0ibnVsbCIgdHlwZT0iTUVUSE9EX0RFQ0xBUkFUSU9OIj5mPC9zeW1ib2xOYW1lPigpIHsKKyAgICA8c3ltYm9sTmFtZSBkZXNjcj0ibnVsbCIgdHlwZT0iQ0xBU1NfTkFNRSI+SW50ZWdlcjwvc3ltYm9sTmFtZT4uPHN5bWJvbE5hbWUgZGVzY3I9Im51bGwiIHR5cGU9IlNUQVRJQ19NRVRIT0QiPnBhcnNlSW50PC9zeW1ib2xOYW1lPigiIik7CisgICAgPHN5bWJvbE5hbWUgZGVzY3I9Im51bGwiIHR5cGU9IkNMQVNTX05BTUUiPmphdmEubGFuZy5JbnRlZ2VyPC9zeW1ib2xOYW1lPi48c3ltYm9sTmFtZSBkZXNjcj0ibnVsbCIgdHlwZT0iU1RBVElDX01FVEhPRCI+cGFyc2VJbnQ8L3N5bWJvbE5hbWU+KCIiKTsKKyAgICA8c3ltYm9sTmFtZSBkZXNjcj0ibnVsbCIgdHlwZT0iU1RBVElDX01FVEhPRCI+Zjwvc3ltYm9sTmFtZT4oKTsKKyAgfQorCisgIGludGVyZmFjZSA8c3ltYm9sTmFtZSBkZXNjcj0ibnVsbCIgdHlwZT0iSU5URVJGQUNFX05BTUUiPml0Zjwvc3ltYm9sTmFtZT4geworICAgIGludCA8c3ltYm9sTmFtZSBkZXNjcj0ibnVsbCIgdHlwZT0iU1RBVElDX0ZJTkFMX0ZJRUxEIj5DT05TVDwvc3ltYm9sTmFtZT4gPSAwOworCisgICAgLyoqCisgICAgICogQHBhcmFtIDxzeW1ib2xOYW1lIGRlc2NyPSJudWxsIiB0eXBlPSJQQVJBTUVURVIiPmQ8L3N5bWJvbE5hbWU+IEltcG9ydGFudCBwYXJhbQorICAgICAqLworICAgIHZvaWQgPHN5bWJvbE5hbWUgZGVzY3I9Im51bGwiIHR5cGU9Ik1FVEhPRF9ERUNMQVJBVElPTiI+bWV0aG9kPC9zeW1ib2xOYW1lPihkb3VibGUgPHN5bWJvbE5hbWUgZGVzY3I9Im51bGwiIHR5cGU9IlBBUkFNRVRFUiI+ZDwvc3ltYm9sTmFtZT4pOworICB9CisKKyAgdm9pZCA8c3ltYm9sTmFtZSBkZXNjcj0ibnVsbCIgdHlwZT0iTUVUSE9EX0RFQ0xBUkFUSU9OIj5mZjwvc3ltYm9sTmFtZT4oPHN5bWJvbE5hbWUgZGVzY3I9Im51bGwiIHR5cGU9IklOVEVSRkFDRV9OQU1FIj5SdW5uYWJsZTwvc3ltYm9sTmFtZT4gPHN5bWJvbE5hbWUgZGVzY3I9Im51bGwiIHR5cGU9IlBBUkFNRVRFUiI+cjwvc3ltYm9sTmFtZT4pIHsKKyAgICAgPHN5bWJvbE5hbWUgZGVzY3I9Im51bGwiIHR5cGU9Ik1FVEhPRF9DQUxMIj5mZjwvc3ltYm9sTmFtZT4oCisgICAgICAgbmV3IDxzeW1ib2xOYW1lIGRlc2NyPSJudWxsIiB0eXBlPSJBTk9OWU1PVVNfQ0xBU1NfTkFNRSI+amF2YS5sYW5nLlJ1bm5hYmxlPC9zeW1ib2xOYW1lPigpIHsKKyAgICAgICAgIHB1YmxpYyB2b2lkIDxzeW1ib2xOYW1lIGRlc2NyPSJudWxsIiB0eXBlPSJNRVRIT0RfREVDTEFSQVRJT04iPnJ1bjwvc3ltYm9sTmFtZT4oKSB7fQorICAgICAgICAgaW50IDxzeW1ib2xOYW1lIGRlc2NyPSJudWxsIiB0eXBlPSJJTlNUQU5DRV9GSUVMRCI+aW5zdGFuY2U8L3N5bWJvbE5hbWU+ID0gMDsKKyAgICAgICB9CisgICAgICk7CisKKyAgICBpbnQgPHN5bWJvbE5hbWUgZGVzY3I9Im51bGwiIHR5cGU9IkxPQ0FMX1ZBUklBQkxFIj5pPC9zeW1ib2xOYW1lPiA9IDxzeW1ib2xOYW1lIGRlc2NyPSJudWxsIiB0eXBlPSJDTEFTU19OQU1FIj5qYXZhLmxhbmcuSW50ZWdlcjwvc3ltYm9sTmFtZT4uPHN5bWJvbE5hbWUgZGVzY3I9Im51bGwiIHR5cGU9IlNUQVRJQ19GSU5BTF9GSUVMRCI+TUlOX1ZBTFVFPC9zeW1ib2xOYW1lPjsKKyAgICBpbnQgPHN5bWJvbE5hbWUgZGVzY3I9Im51bGwiIHR5cGU9IkxPQ0FMX1ZBUklBQkxFIj5qPC9zeW1ib2xOYW1lPiA9IDxzeW1ib2xOYW1lIGRlc2NyPSJudWxsIiB0eXBlPSJJTlRFUkZBQ0VfTkFNRSI+aXRmPC9zeW1ib2xOYW1lPi48c3ltYm9sTmFtZSBkZXNjcj0ibnVsbCIgdHlwZT0iU1RBVElDX0ZJTkFMX0ZJRUxEIj5DT05TVDwvc3ltYm9sTmFtZT47CisgIH0KK30KKworY2xhc3MgPHN5bWJvbE5hbWUgZGVzY3I9Im51bGwiIHR5cGU9IkNMQVNTX05BTUUiPk5vQ3RyQ2xhc3M8L3N5bWJvbE5hbWU+IHsKKyAgeworICAgIC8vIGRlZmF1bHQgY29uc3RydWN0b3IgY2FsbCBsb29rcyBsaWtlIGNsYXNzCisgICAgbmV3IDxzeW1ib2xOYW1lIGRlc2NyPSJudWxsIiB0eXBlPSJDTEFTU19OQU1FIj5Ob0N0ckNsYXNzPC9zeW1ib2xOYW1lPigpOworICB9CisKKyAgdm9pZCA8c3ltYm9sTmFtZSBkZXNjcj0ibnVsbCIgdHlwZT0iTUVUSE9EX0RFQ0xBUkFUSU9OIj5mZjwvc3ltYm9sTmFtZT4oaW50IDxzeW1ib2xOYW1lIGRlc2NyPSJudWxsIiB0eXBlPSJSRUFTU0lHTkVEX1BBUkFNRVRFUiI+cGFyYW08L3N5bWJvbE5hbWU+KSB7CisgICAgIGludCA8c3ltYm9sTmFtZSBkZXNjcj0ibnVsbCIgdHlwZT0iUkVBU1NJR05FRF9MT0NBTF9WQVJJQUJMRSI+aTwvc3ltYm9sTmFtZT4gPSAxOworICAgICA8c3ltYm9sTmFtZSBkZXNjcj0ibnVsbCIgdHlwZT0iUkVBU1NJR05FRF9MT0NBTF9WQVJJQUJMRSI+aTwvc3ltYm9sTmFtZT4gKys7CisKKyAgICAgPHN5bWJvbE5hbWUgZGVzY3I9Im51bGwiIHR5cGU9IlJFQVNTSUdORURfUEFSQU1FVEVSIj5wYXJhbTwvc3ltYm9sTmFtZT4gPSAwOworICB9Cit9CisKK2NsYXNzIDxzeW1ib2xOYW1lIGRlc2NyPSJudWxsIiB0eXBlPSJDTEFTU19OQU1FIj5HZW5lcmljPC9zeW1ib2xOYW1lPjw8c3ltYm9sTmFtZSBkZXNjcj0ibnVsbCIgdHlwZT0iVFlQRV9QQVJBTUVURVJfTkFNRSI+VFQ8L3N5bWJvbE5hbWU+IGV4dGVuZHMgPHN5bWJvbE5hbWUgZGVzY3I9Im51bGwiIHR5cGU9IklOVEVSRkFDRV9OQU1FIj5SdW5uYWJsZTwvc3ltYm9sTmFtZT4+IHsKKyAgPHN5bWJvbE5hbWUgZGVzY3I9Im51bGwiIHR5cGU9IlRZUEVfUEFSQU1FVEVSX05BTUUiPlRUPC9zeW1ib2xOYW1lPiA8c3ltYm9sTmFtZSBkZXNjcj0ibnVsbCIgdHlwZT0iSU5TVEFOQ0VfRklFTEQiPmZpZWxkPC9zeW1ib2xOYW1lPjsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZy9Ob3RBbGxvd2VkSW5JbnRlcmZhY2UuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nL05vdEFsbG93ZWRJbkludGVyZmFjZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY5ZTlhOWEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZy9Ob3RBbGxvd2VkSW5JbnRlcmZhY2UuamF2YQpAQCAtMCwwICsxLDkgQEAKKy8vIE5vdCBhbGxvd2VkIGluIGludGVyZmFjZQorCisKK2ludGVyZmFjZSBBIHsKKyAgICA8ZXJyb3IgZGVzY3I9Ik5vdCBhbGxvd2VkIGluIGludGVyZmFjZSI+QSgpOzwvZXJyb3I+CisgICAgPGVycm9yIGRlc2NyPSJOb3QgYWxsb3dlZCBpbiBpbnRlcmZhY2UiPnN0YXRpYyB7fTwvZXJyb3I+CisgICAgPGVycm9yIGRlc2NyPSJOb3QgYWxsb3dlZCBpbiBpbnRlcmZhY2UiPnt9PC9lcnJvcj4KK30KKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmcvTnVtZXJpY0xpdGVyYWxzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZy9OdW1lcmljTGl0ZXJhbHMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZWNkZGE1Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmcvTnVtZXJpY0xpdGVyYWxzLmphdmEKQEAgLTAsMCArMSw4NSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDAwLTIwMTIgSmV0QnJhaW5zIHMuci5vLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworLy8vIGFzc2lnbm1lbnQgY29tcGF0aWJsZSB0eXBlcworaW1wb3J0IGphdmEuaW8uKjsKK2ltcG9ydCBqYXZhLm5ldC4qOworCitwdWJsaWMgY2xhc3MgYSAgeworICBmaW5hbCBpbnQgRkkgPSAyOworICBmaW5hbCBpbnQgRklCSUcgPSAyMDAwMDAwMDA7CisKKyAgdm9pZCBmKCkgeworICAgIGludCBpMT0gLTxlcnJvciBkZXNjcj0iSW50ZWdlciBudW1iZXIgdG9vIGxhcmdlIj4yMTQ3NDgzNjQ5PC9lcnJvcj47CisgICAgaW50IGkyPSA8ZXJyb3IgZGVzY3I9IkludGVnZXIgbnVtYmVyIHRvbyBsYXJnZSI+MjE0NzQ4MzY0ODwvZXJyb3I+OworICAgIGludCBpMyA9IC0yMTQ3NDgzNjQ4OworICAgIGludCBpNCA9IC0weDdmZmZmZmZmOworICAgIGludCBpNSA9IC0wMTc3Nzc3Nzc3Nzc7CisgICAgaW50IGk2ID0gPGVycm9yIGRlc2NyPSJIZXhhZGVjaW1hbCBudW1iZXJzIG11c3QgY29udGFpbiBhdCBsZWFzdCBvbmUgaGV4YWRlY2ltYWwgZGlnaXQiPjB4PC9lcnJvcj47CisgICAgaW50IGk3ID0gMHhkZWFkYmVlZjsKKyAgICBpbnQgaTggPSAweGZmZmZmZmZmOworICAgIGludCBpOSA9IDxlcnJvciBkZXNjcj0iSW50ZWdlciBudW1iZXIgdG9vIGxhcmdlIj4weGZmZmZmZmZmOTwvZXJyb3I+OworICAgIGludCBpMTAgPSAweDgwMDAwMDAwOworICAgIGludCBpMTEgPSAwMDAwMDAwMDAwMDAwKzB4MDAwMDAwMDAwOworICAgIGludCBpMTIgPSAweDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOworICAgIGludCBpMTMgPSA8ZXJyb3IgZGVzY3I9IkludGVnZXIgbnVtYmVyIHRvbyBsYXJnZSI+MDQwMDAwMDAwMDAwPC9lcnJvcj47CisgICAgaW50IGkxNCA9IDAyMDAwMDAwMDAwMDsKKyAgICBpbnQgaTE1ID0gPGVycm9yIGRlc2NyPSJJbnRlZ2VyIG51bWJlciB0b28gbGFyZ2UiPjB4ZjA0NDMzMjIxMTwvZXJyb3I+OworICAgIGludCBvY3RhbGUgPSAwMTc3Nzc3Nzc3Nzc7ICAvLyBuZWdhdGl2ZQorICAgIGludCBiaTEgPSA8ZXJyb3IgZGVzY3I9IkJpbmFyeSBsaXRlcmFscyBhcmUgbm90IHN1cHBvcnRlZCBhdCB0aGlzIGxhbmd1YWdlIGxldmVsIj4wYjAwMTA8L2Vycm9yPjsKKyAgICBpbnQgYmkyID0gPGVycm9yIGRlc2NyPSJCaW5hcnkgbGl0ZXJhbHMgYXJlIG5vdCBzdXBwb3J0ZWQgYXQgdGhpcyBsYW5ndWFnZSBsZXZlbCI+MEIwMDEwPC9lcnJvcj47CisgICAgaW50IGJpMyA9IDxlcnJvciBkZXNjcj0iVW5kZXJzY29yZXMgaW4gbGl0ZXJhbHMgYXJlIG5vdCBzdXBwb3J0ZWQgYXQgdGhpcyBsYW5ndWFnZSBsZXZlbCI+MV8yPC9lcnJvcj47CisKKyAgICBsb25nIGwxID0gLTxlcnJvciBkZXNjcj0iTG9uZyBudW1iZXIgdG9vIGxhcmdlIj45MjIzMzcyMDM2ODU0Nzc1ODA5TDwvZXJyb3I+OworICAgIGxvbmcgbDIgPSA8ZXJyb3IgZGVzY3I9IkxvbmcgbnVtYmVyIHRvbyBsYXJnZSI+OTIyMzM3MjAzNjg1NDc3NTgwOEw8L2Vycm9yPjsKKyAgICBsb25nIGwzID0gLTkyMjMzNzIwMzY4NTQ3NzU4MDhMOworICAgIGxvbmcgbDQgPSAtPGVycm9yIGRlc2NyPSJJbnRlZ2VyIG51bWJlciB0b28gbGFyZ2UiPjIxNDc0ODM2NDk8L2Vycm9yPjsKKyAgICBsb25nIGw1ID0gPGVycm9yIGRlc2NyPSJJbnRlZ2VyIG51bWJlciB0b28gbGFyZ2UiPjIxNDc0ODM2NDg8L2Vycm9yPjsKKyAgICBsb25nIGw2ID0gPGVycm9yIGRlc2NyPSJIZXhhZGVjaW1hbCBudW1iZXJzIG11c3QgY29udGFpbiBhdCBsZWFzdCBvbmUgaGV4YWRlY2ltYWwgZGlnaXQiPjB4TDwvZXJyb3I+OworICAgIGxvbmcgbDcgPSAweGRlYWRiZWVmZmZmZmZmZmZMOworICAgIGxvbmcgbDggPSAweGZmZmZmZmZmZmZmZmZmZmZMOworICAgIGxvbmcgbDkgPSA8ZXJyb3IgZGVzY3I9IkxvbmcgbnVtYmVyIHRvbyBsYXJnZSI+MHhmZmZmZmZmZmZmZmZmZmZmOUw8L2Vycm9yPjsKKyAgICBsb25nIGwxMCA9IDB4ODAwMDAwMDAwMDAwMDAwMEw7CisgICAgbG9uZyBvY3RhbFZhbHVlID0gMDE3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc2MDBMOworICAgIGxvbmcgb2N0YWxWYWx1YSA9IDAxNzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3TDsKKyAgICBsb25nIGJsMSA9IDxlcnJvciBkZXNjcj0iQmluYXJ5IGxpdGVyYWxzIGFyZSBub3Qgc3VwcG9ydGVkIGF0IHRoaXMgbGFuZ3VhZ2UgbGV2ZWwiPjBiMDAxMGw8L2Vycm9yPjsKKyAgICBsb25nIGJsMiA9IDxlcnJvciBkZXNjcj0iQmluYXJ5IGxpdGVyYWxzIGFyZSBub3Qgc3VwcG9ydGVkIGF0IHRoaXMgbGFuZ3VhZ2UgbGV2ZWwiPjBCMDAxMEw8L2Vycm9yPjsKKyAgICBsb25nIGJsMyA9IDxlcnJvciBkZXNjcj0iVW5kZXJzY29yZXMgaW4gbGl0ZXJhbHMgYXJlIG5vdCBzdXBwb3J0ZWQgYXQgdGhpcyBsYW5ndWFnZSBsZXZlbCI+MTBfMjRMPC9lcnJvcj47CisKKyAgICBmbG9hdCBmMT0gPGVycm9yIGRlc2NyPSJGbG9hdGluZyBwb2ludCBudW1iZXIgdG9vIHNtYWxsIj4xZS00NmY8L2Vycm9yPjsKKyAgICBmbG9hdCBmMiA9IDxlcnJvciBkZXNjcj0iRmxvYXRpbmcgcG9pbnQgbnVtYmVyIHRvbyBsYXJnZSI+MWUzOWY8L2Vycm9yPjsKKyAgICBmbG9hdCBmMyA9IDBFMUY7CisgICAgZmxvYXQgZjQgPSA8ZXJyb3IgZGVzY3I9IkhleGFkZWNpbWFsIGZsb2F0aW5nIHBvaW50IGxpdGVyYWxzIGFyZSBub3Qgc3VwcG9ydGVkIGF0IHRoaXMgbGFuZ3VhZ2UgbGV2ZWwiPjB4YWJjLmRlZlAyZjwvZXJyb3I+OworICAgIGZsb2F0IGJmMSA9IDxlcnJvciBkZXNjcj0iVW5kZXJzY29yZXMgaW4gbGl0ZXJhbHMgYXJlIG5vdCBzdXBwb3J0ZWQgYXQgdGhpcyBsYW5ndWFnZSBsZXZlbCI+My4xNDFfNTkyZjwvZXJyb3I+OworCisgICAgZG91YmxlIGRkMSA9IDxlcnJvciBkZXNjcj0iRmxvYXRpbmcgcG9pbnQgbnVtYmVyIHRvbyBzbWFsbCI+MWUtMzI0PC9lcnJvcj47CisgICAgZG91YmxlIGRkMiA9IDxlcnJvciBkZXNjcj0iRmxvYXRpbmcgcG9pbnQgbnVtYmVyIHRvbyBsYXJnZSI+MWUzMDk8L2Vycm9yPjsKKyAgICBkb3VibGUgZGQzID0gMEUxOworICAgIGRvdWJsZSBkZDQgPSA8ZXJyb3IgZGVzY3I9IkhleGFkZWNpbWFsIGZsb2F0aW5nIHBvaW50IGxpdGVyYWxzIGFyZSBub3Qgc3VwcG9ydGVkIGF0IHRoaXMgbGFuZ3VhZ2UgbGV2ZWwiPjB4MS5mZmZmZmZmZmZmZmZmUDEwMjM8L2Vycm9yPjsKKyAgICBkb3VibGUgZDEgPSA8ZXJyb3IgZGVzY3I9Ik1hbGZvcm1lZCBmbG9hdGluZyBwb2ludCBsaXRlcmFsIj4xLkU8L2Vycm9yPjsKKyAgICBkb3VibGUgZDIgPSA8ZXJyb3IgZGVzY3I9Ik1hbGZvcm1lZCBmbG9hdGluZyBwb2ludCBsaXRlcmFsIj4xLmU8L2Vycm9yPjsKKyAgICBkb3VibGUgZDMgPSA8ZXJyb3IgZGVzY3I9Ik1hbGZvcm1lZCBmbG9hdGluZyBwb2ludCBsaXRlcmFsIj4xLkUrPC9lcnJvcj47CisgICAgZG91YmxlIGQ0ID0gPGVycm9yIGRlc2NyPSJNYWxmb3JtZWQgZmxvYXRpbmcgcG9pbnQgbGl0ZXJhbCI+MS5FLTwvZXJyb3I+OworICAgIGRvdWJsZSBkNSA9IDxlcnJvciBkZXNjcj0iTWFsZm9ybWVkIGZsb2F0aW5nIHBvaW50IGxpdGVyYWwiPi4xZUQ8L2Vycm9yPjsKKyAgICBkb3VibGUgZDYgPSA8ZXJyb3IgZGVzY3I9Ik1hbGZvcm1lZCBmbG9hdGluZyBwb2ludCBsaXRlcmFsIj4uMWUrRDwvZXJyb3I+OworICAgIGRvdWJsZSBkNyA9IDxlcnJvciBkZXNjcj0iTWFsZm9ybWVkIGZsb2F0aW5nIHBvaW50IGxpdGVyYWwiPjFlK0Q8L2Vycm9yPjsKKyAgICBkb3VibGUgZDggPSA8ZXJyb3IgZGVzY3I9Ik1hbGZvcm1lZCBmbG9hdGluZyBwb2ludCBsaXRlcmFsIj4xZS1EPC9lcnJvcj47CisgICAgZG91YmxlIGQ5ID0gPGVycm9yIGRlc2NyPSJNYWxmb3JtZWQgZmxvYXRpbmcgcG9pbnQgbGl0ZXJhbCI+MWUtZDwvZXJyb3I+OworICAgIGRvdWJsZSBkMTAgPSA8ZXJyb3IgZGVzY3I9Ik1hbGZvcm1lZCBmbG9hdGluZyBwb2ludCBsaXRlcmFsIj4xZS1GPC9lcnJvcj47CisgICAgZG91YmxlIGQxMSA9IDxlcnJvciBkZXNjcj0iTWFsZm9ybWVkIGZsb2F0aW5nIHBvaW50IGxpdGVyYWwiPjFlLWY8L2Vycm9yPjsKKyAgICBkb3VibGUgZDEyID0gPGVycm9yIGRlc2NyPSJVbmRlcnNjb3JlcyBpbiBsaXRlcmFscyBhcmUgbm90IHN1cHBvcnRlZCBhdCB0aGlzIGxhbmd1YWdlIGxldmVsIj4zLjE0MV81OTJfNjUzXzU4OV83OTNkPC9lcnJvcj47CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nL051bWVyaWNPdmVyZmxvdy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmcvTnVtZXJpY092ZXJmbG93LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzQyZDVmZQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nL051bWVyaWNPdmVyZmxvdy5qYXZhCkBAIC0wLDAgKzEsODggQEAKKy8vIG92ZXJmbG93cyBpbiBjb25zdCBleHByZXNzaW9ucworCisKK2NsYXNzIGMgeworIC8vIEAqIyQmICEgcmVmZXJlbmNlcyBkbyBub3Qgd29yayBpbiBKUkUKKyBzdGF0aWMgZmluYWwgbG9uZyBMT05HX01JTl9WQUxVRSA9IDB4ODAwMDAwMDAwMDAwMDAwMEw7Cisgc3RhdGljIGZpbmFsIGxvbmcgTE9OR19NQVhfVkFMVUUgPSAweDdmZmZmZmZmZmZmZmZmZmZMOworIHN0YXRpYyBmaW5hbCBpbnQgSU5URUdFUl9NSU5fVkFMVUUgPSAweDgwMDAwMDAwOworIHN0YXRpYyBmaW5hbCBpbnQgSU5URUdFUl9NQVhfVkFMVUUgPSAweDdmZmZmZmZmOworIHN0YXRpYyBmaW5hbCBmbG9hdCBGTE9BVF9NSU5fVkFMVUUgPSAxLjRlLTQ1ZjsKKyBzdGF0aWMgZmluYWwgZmxvYXQgRkxPQVRfTUFYX1ZBTFVFID0gMy40MDI4MjM1ZSszOGY7Cisgc3RhdGljIGZpbmFsIGRvdWJsZSBET1VCTEVfTUlOX1ZBTFVFID0gNC45ZS0zMjQ7Cisgc3RhdGljIGZpbmFsIGRvdWJsZSBET1VCTEVfTUFYX1ZBTFVFID0gMS43OTc2OTMxMzQ4NjIzMTU3ZSszMDg7CisKKyB2b2lkIGYoKSB7CisgICBmbG9hdCBmMSA9IDx3YXJuaW5nIGRlc2NyPSJOdW1lcmljIG92ZXJmbG93IGluIGV4cHJlc3Npb24iPjEuMGYgLyAwLjBmPC93YXJuaW5nPjsKKyAgIGYxID0gPHdhcm5pbmcgZGVzY3I9Ik51bWVyaWMgb3ZlcmZsb3cgaW4gZXhwcmVzc2lvbiI+RkxPQVRfTUFYX1ZBTFVFICsgRkxPQVRfTUFYX1ZBTFVFPC93YXJuaW5nPjsKKyAgIGYxID0gPHdhcm5pbmcgZGVzY3I9Ik51bWVyaWMgb3ZlcmZsb3cgaW4gZXhwcmVzc2lvbiI+RkxPQVRfTUFYX1ZBTFVFICogMjwvd2FybmluZz47CisgICBmMSA9IDx3YXJuaW5nIGRlc2NyPSJOdW1lcmljIG92ZXJmbG93IGluIGV4cHJlc3Npb24iPjIgLyBGTE9BVF9NSU5fVkFMVUU8L3dhcm5pbmc+OworICAgZjEgPSBGTE9BVF9NSU5fVkFMVUUgKyAxOworICAgZjEgPSAtIEZMT0FUX01JTl9WQUxVRTsKKyAgIGYxID0gLUZMT0FUX01BWF9WQUxVRTsKKyAgIFN5c3RlbS5vdXQucHJpbnRsbihmMSk7CisKKyAgIGRvdWJsZSBkMSA9IDx3YXJuaW5nIGRlc2NyPSJOdW1lcmljIG92ZXJmbG93IGluIGV4cHJlc3Npb24iPkRPVUJMRV9NQVhfVkFMVUUgLSAtRE9VQkxFX01BWF9WQUxVRTwvd2FybmluZz47CisgICBkMSA9IERPVUJMRV9NQVhfVkFMVUUgKyAxOworICAgZDEgPSA8d2FybmluZyBkZXNjcj0iTnVtZXJpYyBvdmVyZmxvdyBpbiBleHByZXNzaW9uIj4yICogRE9VQkxFX01BWF9WQUxVRTwvd2FybmluZz47CisgICBkMSA9IDx3YXJuaW5nIGRlc2NyPSJOdW1lcmljIG92ZXJmbG93IGluIGV4cHJlc3Npb24iPjIgLyBET1VCTEVfTUlOX1ZBTFVFPC93YXJuaW5nPjsKKyAgIGQxID0gPHdhcm5pbmcgZGVzY3I9Ik51bWVyaWMgb3ZlcmZsb3cgaW4gZXhwcmVzc2lvbiI+MiAvIDAuMGQ8L3dhcm5pbmc+OworICAgZDEgPSA8d2FybmluZyBkZXNjcj0iTnVtZXJpYyBvdmVyZmxvdyBpbiBleHByZXNzaW9uIj4yIC8gMC4wPC93YXJuaW5nPjsKKyAgIFN5c3RlbS5vdXQucHJpbnRsbihkMSk7CisKKworICAgaW50IGkxID0gPHdhcm5pbmcgZGVzY3I9Ik51bWVyaWMgb3ZlcmZsb3cgaW4gZXhwcmVzc2lvbiI+SU5URUdFUl9NQVhfVkFMVUUgKyAxPC93YXJuaW5nPjsKKyAgIGkxID0gPHdhcm5pbmcgZGVzY3I9Ik51bWVyaWMgb3ZlcmZsb3cgaW4gZXhwcmVzc2lvbiI+SU5URUdFUl9NQVhfVkFMVUUgLSAxICsgMjwvd2FybmluZz47CisgICBpMSA9IDx3YXJuaW5nIGRlc2NyPSJOdW1lcmljIG92ZXJmbG93IGluIGV4cHJlc3Npb24iPklOVEVHRVJfTUFYX1ZBTFVFIC0gSU5URUdFUl9NSU5fVkFMVUU8L3dhcm5pbmc+OworICAgaTEgPSA8d2FybmluZyBkZXNjcj0iTnVtZXJpYyBvdmVyZmxvdyBpbiBleHByZXNzaW9uIj4tSU5URUdFUl9NSU5fVkFMVUU8L3dhcm5pbmc+OworICAgaTEgPSA8d2FybmluZyBkZXNjcj0iTnVtZXJpYyBvdmVyZmxvdyBpbiBleHByZXNzaW9uIj5JTlRFR0VSX01JTl9WQUxVRSAtIDE8L3dhcm5pbmc+OworICAgaTEgPSA8d2FybmluZyBkZXNjcj0iTnVtZXJpYyBvdmVyZmxvdyBpbiBleHByZXNzaW9uIj5JTlRFR0VSX01JTl9WQUxVRSAtIElOVEVHRVJfTUFYX1ZBTFVFPC93YXJuaW5nPjsKKyAgIGkxID0gSU5URUdFUl9NSU5fVkFMVUUgKyBJTlRFR0VSX01BWF9WQUxVRTsKKyAgIGkxID0gLSBJTlRFR0VSX01BWF9WQUxVRTsKKyAgIGkxID0gLSAtSU5URUdFUl9NQVhfVkFMVUU7CisgICBpMSA9IDx3YXJuaW5nIGRlc2NyPSJOdW1lcmljIG92ZXJmbG93IGluIGV4cHJlc3Npb24iPklOVEVHRVJfTUlOX1ZBTFVFICogLTE8L3dhcm5pbmc+OworICAgaTEgPSA8d2FybmluZyBkZXNjcj0iTnVtZXJpYyBvdmVyZmxvdyBpbiBleHByZXNzaW9uIj5JTlRFR0VSX01JTl9WQUxVRSAqIDI8L3dhcm5pbmc+OworICAgaTEgPSA8d2FybmluZyBkZXNjcj0iTnVtZXJpYyBvdmVyZmxvdyBpbiBleHByZXNzaW9uIj5JTlRFR0VSX01BWF9WQUxVRSAqIC0yPC93YXJuaW5nPjsKKyAgIGkxID0gSU5URUdFUl9NQVhfVkFMVUUgKiAtMTsKKyAgIGkxID0gPHdhcm5pbmcgZGVzY3I9Ik51bWVyaWMgb3ZlcmZsb3cgaW4gZXhwcmVzc2lvbiI+MiAvIDA8L3dhcm5pbmc+OworICAgaTEgPSA8d2FybmluZyBkZXNjcj0iTnVtZXJpYyBvdmVyZmxvdyBpbiBleHByZXNzaW9uIj5JTlRFR0VSX01JTl9WQUxVRSAvIC0xPC93YXJuaW5nPjsKKyAgIFN5c3RlbS5vdXQucHJpbnRsbihpMSk7CisKKyAgIGxvbmcgbDEgPSA8d2FybmluZyBkZXNjcj0iTnVtZXJpYyBvdmVyZmxvdyBpbiBleHByZXNzaW9uIj5MT05HX01BWF9WQUxVRSArIDE8L3dhcm5pbmc+OworICAgbDEgPSA8d2FybmluZyBkZXNjcj0iTnVtZXJpYyBvdmVyZmxvdyBpbiBleHByZXNzaW9uIj5MT05HX01BWF9WQUxVRSAtIDEgKyAyPC93YXJuaW5nPjsKKyAgIGwxID0gPHdhcm5pbmcgZGVzY3I9Ik51bWVyaWMgb3ZlcmZsb3cgaW4gZXhwcmVzc2lvbiI+TE9OR19NQVhfVkFMVUUgLSBMT05HX01JTl9WQUxVRTwvd2FybmluZz47CisgICBsMSA9IDx3YXJuaW5nIGRlc2NyPSJOdW1lcmljIG92ZXJmbG93IGluIGV4cHJlc3Npb24iPi1MT05HX01JTl9WQUxVRTwvd2FybmluZz47CisgICBsMSA9IDx3YXJuaW5nIGRlc2NyPSJOdW1lcmljIG92ZXJmbG93IGluIGV4cHJlc3Npb24iPkxPTkdfTUlOX1ZBTFVFIC0gMTwvd2FybmluZz47CisgICBsMSA9IDx3YXJuaW5nIGRlc2NyPSJOdW1lcmljIG92ZXJmbG93IGluIGV4cHJlc3Npb24iPkxPTkdfTUlOX1ZBTFVFIC0gTE9OR19NQVhfVkFMVUU8L3dhcm5pbmc+OworICAgbDEgPSBMT05HX01JTl9WQUxVRSArIExPTkdfTUFYX1ZBTFVFOworICAgbDEgPSAtIExPTkdfTUFYX1ZBTFVFOworICAgbDEgPSAtIC1MT05HX01BWF9WQUxVRTsKKyAgIGwxID0gPHdhcm5pbmcgZGVzY3I9Ik51bWVyaWMgb3ZlcmZsb3cgaW4gZXhwcmVzc2lvbiI+LUlOVEVHRVJfTUlOX1ZBTFVFPC93YXJuaW5nPjsKKyAgIGwxID0gIC0xTCArIElOVEVHRVJfTUlOX1ZBTFVFOworICAgbDEgPSA8d2FybmluZyBkZXNjcj0iTnVtZXJpYyBvdmVyZmxvdyBpbiBleHByZXNzaW9uIj5MT05HX01JTl9WQUxVRSAqIElOVEVHRVJfTUlOX1ZBTFVFPC93YXJuaW5nPjsKKyAgIGwxID0gPHdhcm5pbmcgZGVzY3I9Ik51bWVyaWMgb3ZlcmZsb3cgaW4gZXhwcmVzc2lvbiI+TE9OR19NSU5fVkFMVUUgKiAtMTwvd2FybmluZz47CisgICBsMSA9IDx3YXJuaW5nIGRlc2NyPSJOdW1lcmljIG92ZXJmbG93IGluIGV4cHJlc3Npb24iPkxPTkdfTUlOX1ZBTFVFICogMjwvd2FybmluZz47CisgICBsMSA9IDx3YXJuaW5nIGRlc2NyPSJOdW1lcmljIG92ZXJmbG93IGluIGV4cHJlc3Npb24iPkxPTkdfTUFYX1ZBTFVFICogLTI8L3dhcm5pbmc+OworICAgbDEgPSBJTlRFR0VSX01JTl9WQUxVRSAqIC0xTDsKKyAgIGwxID0gPHdhcm5pbmcgZGVzY3I9Ik51bWVyaWMgb3ZlcmZsb3cgaW4gZXhwcmVzc2lvbiI+MiAvIDBMPC93YXJuaW5nPjsKKyAgIGwxID0gPHdhcm5pbmcgZGVzY3I9Ik51bWVyaWMgb3ZlcmZsb3cgaW4gZXhwcmVzc2lvbiI+MiAlIDBMPC93YXJuaW5nPjsKKyAgIGwxID0gPHdhcm5pbmcgZGVzY3I9Ik51bWVyaWMgb3ZlcmZsb3cgaW4gZXhwcmVzc2lvbiI+TE9OR19NSU5fVkFMVUUgLyAtMTwvd2FybmluZz47CisKKyAgIGwxID0gPHdhcm5pbmcgZGVzY3I9Ik51bWVyaWMgb3ZlcmZsb3cgaW4gZXhwcmVzc2lvbiI+MzAgKiAyNCAqIDYwICogNjAgKiAxMDAwPC93YXJuaW5nPjsgCisgICBsMSA9IDx3YXJuaW5nIGRlc2NyPSJOdW1lcmljIG92ZXJmbG93IGluIGV4cHJlc3Npb24iPjMwMDAwMDAwICogMjQzMjMyMzIzPC93YXJuaW5nPiAKKyAgICAgICAgKiAoPHdhcm5pbmcgZGVzY3I9Ik51bWVyaWMgb3ZlcmZsb3cgaW4gZXhwcmVzc2lvbiI+TE9OR19NQVhfVkFMVUUgKzM8L3dhcm5pbmc+KSAvIDU7IAorICAgU3lzdGVtLm91dC5wcmludGxuKGwxKTsKKworCisgICAKKyAgIH0KKyAgIAorICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGxvbmcgTUlMTElTX1BFUl9EQVkgPSAyNCAqIDM2MDAgKiAxMDAwOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGxvbmcgXzdEQVlTID0gNyAqIE1JTExJU19QRVJfREFZOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGxvbmcgXzMwREFZUyA9IDMwICogTUlMTElTX1BFUl9EQVk7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgbG9uZyBfMTAwMERBWVMgPSAxMDAwICogTUlMTElTX1BFUl9EQVk7CisgICAgeworICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihfMTAwMERBWVMgKyBfMzBEQVlTICsgXzdEQVlTKTsKKyAgICB9CisgICAgaW50IGlpaSA9IDx3YXJuaW5nIGRlc2NyPSJOdW1lcmljIG92ZXJmbG93IGluIGV4cHJlc3Npb24iPjIgJSAwPC93YXJuaW5nPjsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZy9PcGVyYXRvckFwcGxpY2FiaWxpdHkuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nL09wZXJhdG9yQXBwbGljYWJpbGl0eS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2MGM0NDAKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZy9PcGVyYXRvckFwcGxpY2FiaWxpdHkuamF2YQpAQCAtMCwwICsxLDcwIEBACisvLyBvcGVyYXRvcnMgYXBwbGljYWJpbGl0eQorcHVibGljIGNsYXNzIGEgeworCisgIGludCBmKGludCBpaykgeworICAgIGlmICg8ZXJyb3IgZGVzY3I9Ik9wZXJhdG9yICc8JyBjYW5ub3QgYmUgYXBwbGllZCB0byAnaW50JywgJ251bGwnIj4xIDwgbnVsbDwvZXJyb3I+KSB7fQorICAgIGlmICg8ZXJyb3IgZGVzY3I9Ik9wZXJhdG9yICc9PScgY2Fubm90IGJlIGFwcGxpZWQgdG8gJ251bGwnLCAnY2hhciciPm51bGwgPT0gJ2MnPC9lcnJvcj4pIHt9CisgICAgT2JqZWN0IG8gPSBudWxsOworICAgIGlmICg8ZXJyb3IgZGVzY3I9Ik9wZXJhdG9yICc+PScgY2Fubm90IGJlIGFwcGxpZWQgdG8gJ2RvdWJsZScsICdqYXZhLmxhbmcuT2JqZWN0JyI+MS4yID49IG88L2Vycm9yPikge30KKyAgICBpZiAoPGVycm9yIGRlc2NyPSJPcGVyYXRvciAnIT0nIGNhbm5vdCBiZSBhcHBsaWVkIHRvICdsb25nJywgJ2phdmEubGFuZy5TdHJpbmcnIj4xTCAhPSAibnVsbCI8L2Vycm9yPikge30KKyAgICBpZiAoPGVycm9yIGRlc2NyPSJPcGVyYXRvciAnPT0nIGNhbm5vdCBiZSBhcHBsaWVkIHRvICdib29sZWFuJywgJ2ludCciPigxPT0yKSA9PSAzPC9lcnJvcj4pIHt9CisKKyAgICBpbnQgaSA9ICg8ZXJyb3IgZGVzY3I9Ik9wZXJhdG9yICcrJyBjYW5ub3QgYmUgYXBwbGllZCB0byAnaW50JywgJ251bGwnIj4xICsgbnVsbDwvZXJyb3I+KTsKKyAgICBpID0gPGVycm9yIGRlc2NyPSJPcGVyYXRvciAnLycgY2Fubm90IGJlIGFwcGxpZWQgdG8gJ2phdmEubGFuZy5PYmplY3QnLCAnamF2YS5sYW5nLk9iamVjdCciPm8vbzwvZXJyb3I+OworICAgIGkgPSA8ZXJyb3IgZGVzY3I9Ik9wZXJhdG9yICctJyBjYW5ub3QgYmUgYXBwbGllZCB0byAnbnVsbCcsICdkb3VibGUnIj5udWxsIC0gMS4yPC9lcnJvcj47CisgICAgaSA9IDxlcnJvciBkZXNjcj0iT3BlcmF0b3IgJyUnIGNhbm5vdCBiZSBhcHBsaWVkIHRvICdib29sZWFuJywgJ2ludCciPnRydWUgJSA0PC9lcnJvcj47CisKKyAgICBpID0gPGVycm9yIGRlc2NyPSJPcGVyYXRvciAnPDwnIGNhbm5vdCBiZSBhcHBsaWVkIHRvICdpbnQnLCAnamF2YS5sYW5nLk9iamVjdCciPmkgPDwgbzwvZXJyb3I+OworICAgIGkgPSA8ZXJyb3IgZGVzY3I9Ik9wZXJhdG9yICc+PicgY2Fubm90IGJlIGFwcGxpZWQgdG8gJ2Jvb2xlYW4nLCAnbnVsbCciPihpPT0yKSA+PiBudWxsPC9lcnJvcj47CisgICAgaSA9IDxlcnJvciBkZXNjcj0iT3BlcmF0b3IgJz4+PicgY2Fubm90IGJlIGFwcGxpZWQgdG8gJ2ludCcsICdkb3VibGUnIj5pID4+PiAyLjI8L2Vycm9yPjsKKworICAgIGkgPSA8ZXJyb3IgZGVzY3I9Ik9wZXJhdG9yICcmJyBjYW5ub3QgYmUgYXBwbGllZCB0byAnaW50JywgJ2phdmEubGFuZy5PYmplY3QnIj5pICYgbzwvZXJyb3I+OworICAgIGkgPSA8ZXJyb3IgZGVzY3I9Ik9wZXJhdG9yICd8JyBjYW5ub3QgYmUgYXBwbGllZCB0byAnYm9vbGVhbicsICdkb3VibGUnIj50cnVlIHwgMi4xPC9lcnJvcj47CisgICAgaSA9IDxlcnJvciBkZXNjcj0iT3BlcmF0b3IgJyYmJyBjYW5ub3QgYmUgYXBwbGllZCB0byAnaW50JywgJ2ludCciPjIgJiYgMzwvZXJyb3I+OworICAgIGkgPSA8ZXJyb3IgZGVzY3I9Ik9wZXJhdG9yICd8fCcgY2Fubm90IGJlIGFwcGxpZWQgdG8gJ2RvdWJsZScsICdsb25nJyI+My44IHx8IDJMPC9lcnJvcj47CisgICAgaSA9IDxlcnJvciBkZXNjcj0iT3BlcmF0b3IgJ3x8JyBjYW5ub3QgYmUgYXBwbGllZCB0byAnbnVsbCcsICdqYXZhLmxhbmcuT2JqZWN0JyI+bnVsbCB8fCBvPC9lcnJvcj47CisKKyAgICA8ZXJyb3IgZGVzY3I9Ik9wZXJhdG9yICd8JyBjYW5ub3QgYmUgYXBwbGllZCB0byAnaW50JywgJ251bGwnIj5pIHw9IG51bGw8L2Vycm9yPjsKKyAgICBkb3VibGUgZCA9IDA7CisgICAgPGVycm9yIGRlc2NyPSJPcGVyYXRvciAnJicgY2Fubm90IGJlIGFwcGxpZWQgdG8gJ2RvdWJsZScsICdpbnQnIj5kICY9IGk8L2Vycm9yPjsKKyAgICA8ZXJyb3IgZGVzY3I9Ik9wZXJhdG9yICcvJyBjYW5ub3QgYmUgYXBwbGllZCB0byAnamF2YS5sYW5nLk9iamVjdCcsICdpbnQnIj5vIC89IDM8L2Vycm9yPjsKKworCisgICAgU3RyaW5nIHNzczIgPSA8ZXJyb3IgZGVzY3I9Ik9wZXJhdG9yICcrJyBjYW5ub3QgYmUgYXBwbGllZCB0byAnamF2YS5sYW5nLlN0cmluZycsICd2b2lkJyI+IiIgKyBmdm9pZCgpPC9lcnJvcj47CisgICAgaW50IHNzczEgPSA8ZXJyb3IgZGVzY3I9Ik9wZXJhdG9yICcrJyBjYW5ub3QgYmUgYXBwbGllZCB0byAndm9pZCcsICdpbnQnIj5mdm9pZCgpICsgMjwvZXJyb3I+OworCisgICAgaW50IGlhW10gPSBudWxsOworICAgIGJvb2xlYW4gYiA9IDE9PTMgfHwgMyA8ICc0JyAmJiAoMT4zLjUpID09IChvID09IG51bGwpIHx8IGZhbHNlIHx8IChvID09ICJkIik7CisgICAgYiA9ICgxICE9ICdmJykgPT0gKDMuNCA+PSAneCcpICYmIG8hPW51bGwgJiAoYiB8ICgzPDQpKTsKKyAgICBpID0gaSAmIDIgfCBpPj5pIF4gMTU+Pj40ICYgfmlhW2ktLSArIChpbnQpZF0gLSAoaW50KWQ7CisKKyAgICBiIHw9IChpICY9IDcpID09IDUgfCAobnVsbCA9PSBudWxsKTsKKyAgICBkICo9IChpIC09IDMpIC8gMTMuNDsKKyAgICBpYVswXSsrOworICAgIGlhW35pIHwgKGkrPSghYj8yOmkpKV0gLT0gaSArIDMuMzsKKyAgICAKKyAgICAvLyBPYmplY3QgKz0gU3RyaW5nCisgICAgPGVycm9yIGRlc2NyPSJPcGVyYXRvciAnKycgY2Fubm90IGJlIGFwcGxpZWQgdG8gJ2phdmEubGFuZy5PYmplY3QnLCAnamF2YS5sYW5nLlN0cmluZyciPm8gKz0gbyArICJzdHJpbmciPC9lcnJvcj47CisKKyAgICByZXR1cm4gMDsKKyAgfQorCisgIHZvaWQgZnZvaWQoKSB7fQorCit9CisKK2NsYXNzIFRlc3QKK3sKKyAgIHB1YmxpYyB2b2lkIHRlc3QoVGVzdEIgYSkKKyAgIHsKKyAgICAgaWYoYSA9PSB0aGlzKQorICAgICB7CisgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJhIGlzIGVxdWFscyB0byB0aGlzIik7CisgICAgIH0KKyAgIH0KKworICAgcHVibGljIHN0YXRpYyBpbnRlcmZhY2UgVGVzdEIKKyAgIHsKKyAgICAgcHVibGljIHZvaWQgYmxhKCk7CisgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZy9PdmVycmlkZGVuTWV0aG9kSXNGaW5hbC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmcvT3ZlcnJpZGRlbk1ldGhvZElzRmluYWwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMWMzZGQ0Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmcvT3ZlcnJpZGRlbk1ldGhvZElzRmluYWwuamF2YQpAQCAtMCwwICsxLDE0IEBACisKK2ludGVyZmFjZSBDb25mbGljdFdpdGhPYmplY3QgeworICAgIDxlcnJvciBkZXNjcj0iJ25vdGlmeSgpJyBjYW5ub3Qgb3ZlcnJpZGUgJ25vdGlmeSgpJyBpbiAnamF2YS5sYW5nLk9iamVjdCc7IG92ZXJyaWRkZW4gbWV0aG9kIGlzIGZpbmFsIj5wdWJsaWMgdm9pZCBub3RpZnkoKTwvZXJyb3I+OworfQorCisvLy0tb3ZlcnJpZGUgZmluYWwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitjbGFzcyBiYXNlIHsKKyBmaW5hbCB2b2lkIGYoKSB7fQorfQorY2xhc3MgZGVyaXZlZCBleHRlbmRzIGJhc2UgeworCisgPGVycm9yIGRlc2NyPSInZigpJyBjYW5ub3Qgb3ZlcnJpZGUgJ2YoKScgaW4gJ2Jhc2UnOyBvdmVycmlkZGVuIG1ldGhvZCBpcyBmaW5hbCI+dm9pZCBmKCk8L2Vycm9yPiB7fQorICAgICAgICAgICAgICAgCit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZy9PdmVycmlkZUNvbmZsaWN0cy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmcvT3ZlcnJpZGVDb25mbGljdHMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZjdjYzc1Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmcvT3ZlcnJpZGVDb25mbGljdHMuamF2YQpAQCAtMCwwICsxLDEwNiBAQAorLy8gdGhyb3dzIGNvbmZsaWN0cyBvbiBvdmVycmlkaW5nLyBvdmVycmlkZSBmaW5hbAoraW1wb3J0IGphdmEuaW8uKjsKK2ltcG9ydCBqYXZhLm5ldC4qOworcHVibGljIGNsYXNzIGEgZXh0ZW5kcyBjMyB7CisgcHVibGljIHZvaWQgZigpIHRocm93cyA8ZXJyb3IgZGVzY3I9IidmKCknIGluICdhJyBjbGFzaGVzIHdpdGggJ2YoKScgaW4gJ2MzJzsgb3ZlcnJpZGRlbiBtZXRob2QgZG9lcyBub3QgdGhyb3cgJ2phdmEubGFuZy5FeGNlcHRpb24nIj5FeGNlcHRpb248L2Vycm9yPiB7CisgfQorfQorCitpbnRlcmZhY2UgaSB7Cisgdm9pZCBmKCkgdGhyb3dzIGphdmEubmV0LlNvY2tldEV4Y2VwdGlvbjsKK30KK2NsYXNzIGMyIGltcGxlbWVudHMgaSB7CisgcHVibGljIHZvaWQgZigpIHRocm93cyA8ZXJyb3IgZGVzY3I9IidmKCknIGluICdjMicgY2xhc2hlcyB3aXRoICdmKCknIGluICdpJzsgb3ZlcnJpZGRlbiBtZXRob2QgZG9lcyBub3QgdGhyb3cgJ2phdmEuaW8uSU9FeGNlcHRpb24nIj5qYXZhLmlvLklPRXhjZXB0aW9uPC9lcnJvcj4ge30KK30KK2NsYXNzIGMyaSBpbXBsZW1lbnRzIGkgeworIHB1YmxpYyB2b2lkIGYoKSB0aHJvd3MgPGVycm9yIGRlc2NyPSInZigpJyBpbiAnYzJpJyBjbGFzaGVzIHdpdGggJ2YoKScgaW4gJ2knOyBvdmVycmlkZGVuIG1ldGhvZCBkb2VzIG5vdCB0aHJvdyAnamF2YS5sYW5nLkV4Y2VwdGlvbiciPkV4Y2VwdGlvbjwvZXJyb3I+IHt9Cit9CisKK2NsYXNzIGMzIGltcGxlbWVudHMgaSB7CisgcHVibGljIHZvaWQgZigpIHRocm93cyBqYXZhLm5ldC5Db25uZWN0RXhjZXB0aW9uIHt9Cit9CisKK2NsYXNzIGM0IGV4dGVuZHMgYzMgeworIHB1YmxpYyB2b2lkIGYoKSB0aHJvd3MgamF2YS5uZXQuQ29ubmVjdEV4Y2VwdGlvbiB7fQorfQorCitpbnRlcmZhY2UgTWV0aG9kc0Zyb21PYmplY3QgeworICBPYmplY3QgY2xvbmUoKTsKK30KK2ludGVyZmFjZSBpbSBleHRlbmRzIE1ldGhvZHNGcm9tT2JqZWN0IHsKK30KKzxlcnJvciBkZXNjcj0iJ2Nsb25lKCknIGluICdqYXZhLmxhbmcuT2JqZWN0JyBjbGFzaGVzIHdpdGggJ2Nsb25lKCknIGluICdNZXRob2RzRnJvbU9iamVjdCc7IG92ZXJyaWRkZW4gbWV0aG9kIGRvZXMgbm90IHRocm93ICdqYXZhLmxhbmcuQ2xvbmVOb3RTdXBwb3J0ZWRFeGNlcHRpb24nIj5jbGFzcyBjbSBpbXBsZW1lbnRzIE1ldGhvZHNGcm9tT2JqZWN0PC9lcnJvcj4geworfQorCisvLyBzaWJsaW5nIGluaGVyaXRhbmNlCitjbGFzcyBjNSB7IHB1YmxpYyB2b2lkIGYoKSB0aHJvd3MgRXhjZXB0aW9uIHt9IH0KK2ludGVyZmFjZSBpNSB7IHZvaWQgZigpOyB9Cis8ZXJyb3IgZGVzY3I9IidmKCknIGluICdjNScgY2xhc2hlcyB3aXRoICdmKCknIGluICdpNSc7IG92ZXJyaWRkZW4gbWV0aG9kIGRvZXMgbm90IHRocm93ICdqYXZhLmxhbmcuRXhjZXB0aW9uJyI+Y2xhc3MgYzYgZXh0ZW5kcyBjNSBpbXBsZW1lbnRzIGk1PC9lcnJvcj4geworfQorCisvLyBvdmVycmlkaW5nIG1ldGhvZCBkb2VzIG5vdCB0aHJvdyBleGNlcHRpb24sIGl0cyBPSworY2xhc3MgYyB7CisgICAgcHJvdGVjdGVkIE9iamVjdCBjbG9uZSgpIHsKKyAgICAgICAgcmV0dXJuIG51bGw7CisgICAgfQorfQoraW50ZXJmYWNlIGk2IHsKKworfQorY2xhc3MgYiBleHRlbmRzIGMgaW1wbGVtZW50cyBpNiB7CisKK30KKworCisvLy0tLS0tLS0tLS0tLS0tIG1ldGhvZHMgd2l0aCBzYW1lIHNpZ25hdHVyZQoraW50ZXJmYWNlIEFDb250cmFjdAoreworICB2b2lkIGludm9rZSAoKSB0aHJvd3MgRXhjZXB0aW9uOworfQorCitjbGFzcyBBIGltcGxlbWVudHMgQUNvbnRyYWN0Cit7CisgIHB1YmxpYyB2b2lkIGludm9rZSAoKSB0aHJvd3MgRXhjZXB0aW9uIHsgfQorfQorCitpbnRlcmZhY2UgQkNvbnRyYWN0Cit7CisgIHZvaWQgaW52b2tlICgpOworfQorCitjbGFzcyBCIGV4dGVuZHMgQSBpbXBsZW1lbnRzIEJDb250cmFjdAoreworICBwdWJsaWMgdm9pZCBpbnZva2UgKCkgeyB9Cit9CisKK2NsYXNzIEMgZXh0ZW5kcyBCIAoreworfQorCisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KK2NsYXNzIEJ1ZyBleHRlbmRzIEFic3RyQ29sbCBpbXBsZW1lbnRzIGphdmEuaW8uU2VyaWFsaXphYmxlIHsKK30KK2ludGVyZmFjZSBDb2xsICB7CisgICAgYm9vbGVhbiBlcXVhbHMoT2JqZWN0IGYpOworfQorY2xhc3MgQWJzdHJDb2xsIGltcGxlbWVudHMgQ29sbCB7fQorCitpbnRlcmZhY2UgSW50ZXJmYWNlT3ZlcnJpZGVzT2JqZWN0IHsKKyAgICBPYmplY3QgY2xvbmUoKSB0aHJvd3MgamF2YS5pby5JT0V4Y2VwdGlvbjsKK30KKworLy8vLy8vLy8vLy8vbXVsdGlwbGUgaW50ZXJmYWNlIGluaGVyaXRhbmNlLy8vLy8vLworY2xhc3Mgc3FsRXhjZXB0IGV4dGVuZHMgRXhjZXB0aW9uIHt9CitjbGFzcyBzcWxJbmhlcml0b3JFeGNlcHRpb24gZXh0ZW5kcyBzcWxFeGNlcHQge30KK2NsYXNzIHRpbWVvdXRFeCBleHRlbmRzIEV4Y2VwdGlvbnt9CisKK2ludGVyZmFjZSBBTXVsdGlwbGUgeworICB2b2lkIG0oKSB0aHJvd3MgamF2YS5pby5JT0V4Y2VwdGlvbiwgc3FsSW5oZXJpdG9yRXhjZXB0aW9uOworfQorCitpbnRlcmZhY2UgQk11bHRpcGxlIHsKKyAgdm9pZCBtKCkgdGhyb3dzIGphdmEuaW8uRU9GRXhjZXB0aW9uLCBzcWxFeGNlcHQsIHRpbWVvdXRFeDsKK30KKworaW50ZXJmYWNlIERNdWx0aXBsZSBleHRlbmRzIEFNdWx0aXBsZSwgQk11bHRpcGxlIHt9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmcvUXVhbGlmaWVkTmV3LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZy9RdWFsaWZpZWROZXcuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iODMyYjkxCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmcvUXVhbGlmaWVkTmV3LmphdmEKQEAgLTAsMCArMSwzMiBAQAorLy8gUXVhbGlmaWVkIG5ldyBvZiBzdGF0aWMgY2xhc3MKKworY2xhc3MgQSB7CisgICAgYiBiOworICAgIEEoKSB7CisgICAgICA8ZXJyb3IgZGVzY3I9IlF1YWxpZmllZCBuZXcgb2Ygc3RhdGljIGNsYXNzIj5iLm5ldyBjKCk8L2Vycm9yPjsKKyAgICAgIGIubmV3IGlubmVyKCk7CisgICAgfQorICAgIGNsYXNzIGlubmVyIHt9CisKKyAgICB2b2lkIGYoKSB7CisgICAgICBjaGFyW10gYyA9IDxlcnJvciBkZXNjcj0iSW52YWxpZCBxdWFsaWZpZWQgbmV3Ij5iLm5ldyBjaGFyWzBdPC9lcnJvcj47CisgICAgfQorfQorCitjbGFzcyBiIGV4dGVuZHMgQSB7CisgIHN0YXRpYyBjbGFzcyBjIHt9Cit9CisKKworY2xhc3MgV2l0aEFub255bSB7CisgIGludGVyZmFjZSBJIHsKKyAgfQorICBjbGFzcyBJbm5lcnt9Cit9CisKK2NsYXNzIFdpdGhBbm9ueW1Jbmhlcml0b3IgZXh0ZW5kcyBXaXRoQW5vbnltIHsKKyAgeworICAgIDxlcnJvciBkZXNjcj0iQW5vbnltb3VzIGNsYXNzIGltcGxlbWVudHMgaW50ZXJmYWNlOyBjYW5ub3QgaGF2ZSBxdWFsaWZpZXIgZm9yIG5ldyI+dGhpcy5uZXcgSSgpIHt9PC9lcnJvcj47CisgICAgdGhpcy5uZXcgSW5uZXIoKSB7fTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nL1F1YWxpZmllZFN1cGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZy9RdWFsaWZpZWRTdXBlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI0YzM0NDQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZy9RdWFsaWZpZWRTdXBlci5qYXZhCkBAIC0wLDAgKzEsNDggQEAKK2NsYXNzIE91dGVyIHsKKyAgICAgICAgICAgIGNsYXNzIElubmVyMSBleHRlbmRzIE91dGVyIHsKKyAgICAgICAgICAgICAgSW5uZXIxKCkge30KKyAgICAgICAgICAgICAgSW5uZXIxKE91dGVyIG8pIHt9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGNsYXNzIElubmVyMiBleHRlbmRzIElubmVyMSB7CisgICAgICAgICAgICAgICAgcHVibGljIElubmVyMihPYmplY3QgbykgeworICAgICAgICAgICAgICAgICAgICA8ZXJyb3IgZGVzY3I9IkluY29tcGF0aWJsZSB0eXBlcy4gRm91bmQ6ICdqYXZhLmxhbmcuT2JqZWN0JywgcmVxdWlyZWQ6ICdPdXRlciciPm88L2Vycm9yPi5zdXBlcigpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBwdWJsaWMgSW5uZXIyKGludCBvKSB7CisgICAgICAgICAgICAgICAgICBPdXRlci50aGlzLnN1cGVyKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHB1YmxpYyBJbm5lcjIoT3V0ZXIgbykgeworICAgICAgICAgICAgICAgICAgby5zdXBlcihPdXRlci50aGlzKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcHVibGljIElubmVyMihPdXRlciBvLCBpbnQgcGFyKSB7CisgICAgICAgICAgICAgICAgICBvLnN1cGVyKDxlcnJvciBkZXNjcj0iQ2Fubm90IHJlZmVyZW5jZSAndGhpcycgYmVmb3JlIHN1cGVydHlwZSBjb25zdHJ1Y3RvciBoYXMgYmVlbiBjYWxsZWQiPnRoaXM8L2Vycm9yPik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHB1YmxpYyBJbm5lcjIoT3V0ZXIgbywgT2JqZWN0IHBhcikgeworICAgICAgICAgICAgICAgICAgPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVmZXJlbmNlICd0aGlzJyBiZWZvcmUgc3VwZXJ0eXBlIGNvbnN0cnVjdG9yIGhhcyBiZWVuIGNhbGxlZCI+dGhpczwvZXJyb3I+LnN1cGVyKG8pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgY2xhc3MgQmFkSW5uZXIgZXh0ZW5kcyBJbm5lcjEgeworICAgICAgICAgICAgICA8ZXJyb3IgZGVzY3I9IkNhbm5vdCByZWZlcmVuY2UgJ0JhZElubmVyLnRoaXMnIGJlZm9yZSBzdXBlcnR5cGUgY29uc3RydWN0b3IgaGFzIGJlZW4gY2FsbGVkIj5CYWRJbm5lcigpPC9lcnJvcj4ge30KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIDxlcnJvciBkZXNjcj0iQ2Fubm90IHJlZmVyZW5jZSAnQmFkSW5uZXIyLnRoaXMnIGJlZm9yZSBzdXBlcnR5cGUgY29uc3RydWN0b3IgaGFzIGJlZW4gY2FsbGVkIj5jbGFzcyBCYWRJbm5lcjIgZXh0ZW5kcyBJbm5lcjE8L2Vycm9yPiB7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGNsYXNzIHMgeworICAgICAgICAgICAgICAgIHZvaWQgZihPYmplY3QgbykgeworICAgICAgICAgICAgICAgICAgICBuZXcgcygpOworICAgICAgICAgICAgICAgICAgICBPdXRlci50aGlzLm5ldyBzKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorfQorCitjbGFzcyBPdXRlcjIgeworICBjbGFzcyBJbm5lciB7fQorfQorY2xhc3MgRXh0IGV4dGVuZHMgT3V0ZXIyIHsKKyAgIGNsYXNzIEV4dElubmVyIGV4dGVuZHMgSW5uZXIgeworICAgICAgIEV4dElubmVyKCkgeworICAgICAgICAgc3VwZXIoKTsKKyAgICAgICB9CisgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmcvUXVhbGlmaWVkVGhpc1N1cGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZy9RdWFsaWZpZWRUaGlzU3VwZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYmEwOGNkCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmcvUXVhbGlmaWVkVGhpc1N1cGVyLmphdmEKQEAgLTAsMCArMSwxNyBAQAorY2xhc3MgWSB7CisgICAgaW50IHNpemUgPSA0OworfQorCitjbGFzcyBaIGV4dGVuZHMgWSB7CisgICAgY2xhc3MgSSB7CisgICAgICAgIHZvaWQgZm9vKCkgeworICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigic2l6ZSA9ICIgKyA8ZXJyb3IgZGVzY3I9IidZJyBpcyBub3QgYW4gZW5jbG9zaW5nIGNsYXNzIj5ZLnRoaXM8L2Vycm9yPi5zaXplKTsgLy8gaWxsZWdhbCBjb25zdHJ1Y3QKKyAgICAgICAgfQorICAgIH0KK30KKworY2xhc3MgUiB7CisgICAgcHVibGljIHZvaWQgc211KCkgeworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oPGVycm9yIGRlc2NyPSInWicgaXMgbm90IGFuIGVuY2xvc2luZyBjbGFzcyI+Wi5zdXBlcjwvZXJyb3I+LnRvU3RyaW5nKCkpOworICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nL1F1YWxpZmllckJlZm9yZUNsYXNzTmFtZS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmcvUXVhbGlmaWVyQmVmb3JlQ2xhc3NOYW1lLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWY4MTA0NAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nL1F1YWxpZmllckJlZm9yZUNsYXNzTmFtZS5qYXZhCkBAIC0wLDAgKzEsMjEgQEAKK2NsYXNzIEUgeworICBjbGFzcyBPdXRlciB7CisgICAgY2xhc3MgUyB7CisgICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBTUyA9IDA7CisgICAgfQorICB9CisKKyAgT3V0ZXIgZigpIHsKKyAgICBpbnQgcyA9IDxlcnJvciBkZXNjcj0iRXhwZWN0ZWQgY2xhc3Mgb3IgcGFja2FnZSI+ZigpPC9lcnJvcj4uUy5TUzsKKyAgICBpbnQgczEgPSA8ZXJyb3IgZGVzY3I9IkV4cGVjdGVkIGNsYXNzIG9yIHBhY2thZ2UiPnRoaXM8L2Vycm9yPi5PdXRlci5TLlNTOworICAgIGludCBzMiA9IE91dGVyLlMuU1M7CisgICAgcmV0dXJuIG51bGw7CisgIH0KKworICBjbGFzcyBvcG9wbyB7CisgICAgcHVibGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisgICAgICBTdHJpbmcgamF2YSA9ICJibGEiOworICAgICAgamF2YS48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAnbGFuZyciPmxhbmc8L2Vycm9yPi5TdHJpbmcudmFsdWVPZigiIik7CisgICAgfQorICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZy9SZWN1cnNpdmVDb25zdHJ1Y3Rvckludm9jYXRpb24uamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nL1JlY3Vyc2l2ZUNvbnN0cnVjdG9ySW52b2NhdGlvbi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk2MDVkYTMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZy9SZWN1cnNpdmVDb25zdHJ1Y3Rvckludm9jYXRpb24uamF2YQpAQCAtMCwwICsxLDM3IEBACisvLyByZWN1c3JzaXZlIGN0ciBjYWxsCisKKworY2xhc3MgcyAgeworICAgIDxlcnJvciBkZXNjcj0iUmVjdXJzaXZlIGNvbnN0cnVjdG9yIGludm9jYXRpb24iPnMoKTwvZXJyb3I+IHsKKyAgICAgICAgdGhpcygpOworICAgIH0KKworICAgIDxlcnJvciBkZXNjcj0iUmVjdXJzaXZlIGNvbnN0cnVjdG9yIGludm9jYXRpb24iPnMoaW50IGkpPC9lcnJvcj4geworICAgICAgICB0aGlzKDIpOworICAgIH0KK30KKworY2xhc3MgYyB7CisgIGMoKSB7CisgICAgdGhpcygyKTsKKyAgfQorCisgIDxlcnJvciBkZXNjcj0iUmVjdXJzaXZlIGNvbnN0cnVjdG9yIGludm9jYXRpb24iPmMoaW50IGkpPC9lcnJvcj4geworICAgIHRoaXMoMSwxKTsKKyAgfQorICA8ZXJyb3IgZGVzY3I9IlJlY3Vyc2l2ZSBjb25zdHJ1Y3RvciBpbnZvY2F0aW9uIj5jKGludCBpLCBpbnQgayk8L2Vycm9yPiB7CisgICAgdGhpcygxKTsKKyAgfQorfQorCitjbGFzcyBjdiB7CisgIGN2KCkgeworICAgIHRoaXMoMSk7CisgIH0KKworICBjdihpbnQgaSkgeworICAgIHRoaXMoMSwyKTsKKyAgfQorCisgIGN2KGludCBpLGludCBqKSB7fQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nL1JlZmVyZW5jZU1lbWJlckJlZm9yZUN0ckNhbGxlZC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmcvUmVmZXJlbmNlTWVtYmVyQmVmb3JlQ3RyQ2FsbGVkLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmVjOTFiYwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nL1JlZmVyZW5jZU1lbWJlckJlZm9yZUN0ckNhbGxlZC5qYXZhCkBAIC0wLDAgKzEsMTc0IEBACisvLyByZWZlcmVuY2UgYmVmb3JlIGN0ciBjYWxsZWQKK2ltcG9ydCBqYXZhLmlvLio7CitpbXBvcnQgamF2YS5uZXQuKjsKKworY2xhc3MgQSB7CisgQShpbnQgaSkge30KKyBBKEEgYSkge30KKyBpbnQgZigpIHsgcmV0dXJuIDA7IH0KKyBpbnQgZmk7Cit9IAkKKworY2xhc3MgQiBleHRlbmRzIEEgeworICBpbnQgYmk7CisgIEIoaW50IGgpIHsKKyAgICBzdXBlcig8ZXJyb3IgZGVzY3I9IkNhbm5vdCByZWZlcmVuY2UgJ0IuYmknIGJlZm9yZSBzdXBlcnR5cGUgY29uc3RydWN0b3IgaGFzIGJlZW4gY2FsbGVkIj5iaTwvZXJyb3I+KTsKKyAgfQorICBCKCkgeworICAgIHRoaXMoPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVmZXJlbmNlICdCLmJpJyBiZWZvcmUgc3VwZXJ0eXBlIGNvbnN0cnVjdG9yIGhhcyBiZWVuIGNhbGxlZCI+Ymk8L2Vycm9yPik7CisgIH0KKworICBCKFN0cmluZyBzKSB7CisgICAgc3VwZXIoPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVmZXJlbmNlICdCLmRiJyBiZWZvcmUgc3VwZXJ0eXBlIGNvbnN0cnVjdG9yIGhhcyBiZWVuIGNhbGxlZCI+ZGI8L2Vycm9yPigxKSApOworICB9CisKKyAgQihpbnQgaSwgaW50IGopIHsKKyAgICBzdXBlcig8ZXJyb3IgZGVzY3I9IkNhbm5vdCByZWZlcmVuY2UgJ0EuZicgYmVmb3JlIHN1cGVydHlwZSBjb25zdHJ1Y3RvciBoYXMgYmVlbiBjYWxsZWQiPmY8L2Vycm9yPigpKTsKKyAgfQorICBCKGludCBpLCBpbnQgaiwgaW50IGspIHsKKyAgICBzdXBlcig8ZXJyb3IgZGVzY3I9IkNhbm5vdCByZWZlcmVuY2UgJ0EuZicgYmVmb3JlIHN1cGVydHlwZSBjb25zdHJ1Y3RvciBoYXMgYmVlbiBjYWxsZWQiPnN1cGVyLmY8L2Vycm9yPigpKTsKKyAgfQorCisgIEIoU3RyaW5nIHMsIGludCBpKSB7CisgICAgc3VwZXIocy5sZW5ndGgoKSk7CisgIH0KKworICBCKGludCBzLCBpbnQgaSwgY2hhciBqKSB7CisgICAgc3VwZXIoPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVmZXJlbmNlICdBLmZpJyBiZWZvcmUgc3VwZXJ0eXBlIGNvbnN0cnVjdG9yIGhhcyBiZWVuIGNhbGxlZCI+c3VwZXIuZmk8L2Vycm9yPiApOworICB9CisKKyAgQihkb3VibGUgZCkgeworICAgIHN1cGVyKG5ldyA8ZXJyb3IgZGVzY3I9IkNhbm5vdCByZWZlcmVuY2UgJ0lubmVyJyBiZWZvcmUgc3VwZXJ0eXBlIGNvbnN0cnVjdG9yIGhhcyBiZWVuIGNhbGxlZCI+SW5uZXI8L2Vycm9yPigpICk7CisgIH0KKyAgY2xhc3MgSW5uZXIgZXh0ZW5kcyBBIHsKKyAgICBJbm5lcigpeworICAgICAgc3VwZXIoMSk7CisgICAgfQorICB9CisKKyAgaW50IGRiKGludCBqKSB7IAorICAgcmV0dXJuIDA7CisgIH0KK30KKworCitjbGFzcyBFbmMgeworICBpbnQgaWVuYzsKKyAgY2xhc3MgQmIgZXh0ZW5kcyBBIHsKKyAgICBpbnQgaWJiOworICAgIEJiKCkgeyBzdXBlcihpZW5jKTsgfQorICAgIEJiKGludCBpKSB7CisgICAgICBzdXBlcihpKTsKKyAgICB9CisKKyAgICBCYihpbnQgaSwgaW50IGopIHsKKyAgICAgIHN1cGVyKDxlcnJvciBkZXNjcj0iQ2Fubm90IHJlZmVyZW5jZSAnQmIudGhpcycgYmVmb3JlIHN1cGVydHlwZSBjb25zdHJ1Y3RvciBoYXMgYmVlbiBjYWxsZWQiPkVuYy5CYi50aGlzPC9lcnJvcj4uaWJiICk7CisgICAgfQorCisgICAgQmIoaW50IGksIFN0cmluZyBzKSB7CisgICAgICBzdXBlcihFbmMudGhpcy5pZW5jKTsKKyAgICB9CisKKyAgICBCYihpbnQgaSwgY2hhciBqKSB7CisgICAgICBzdXBlcig8ZXJyb3IgZGVzY3I9IkNhbm5vdCByZWZlcmVuY2UgJ3RoaXMnIGJlZm9yZSBzdXBlcnR5cGUgY29uc3RydWN0b3IgaGFzIGJlZW4gY2FsbGVkIj50aGlzPC9lcnJvcj4gKTsKKyAgICB9CisgIH0KKworICBFbmMoKSB7CisgICAgdGhpcyhuZXcgPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVmZXJlbmNlICdCYicgYmVmb3JlIHN1cGVydHlwZSBjb25zdHJ1Y3RvciBoYXMgYmVlbiBjYWxsZWQiPkJiPC9lcnJvcj4oKSk7CisgIH0KKyAgRW5jKEJiIGIpIHt9Cit9CisKKy8vIHN0YXRpYyBhcmUgT0sKK2NsYXNzIEMyIGV4dGVuZHMgQSB7CisgIHN0YXRpYyBmaW5hbCBpbnQgZmkgPSA0OworICBDMigpIHsKKyAgICBzdXBlcihmaSk7CisgIH0KKyAgQzIoaW50IGkpIHsKKyAgICBzdXBlcihzZigpKTsKKyAgfQorICBzdGF0aWMgaW50IHNmKCkgeyByZXR1cm4gMDsgfQorCisgIEMyKGludCBpLCBpbnQgaikgeworICAgIHN1cGVyKG5ldyBTYygpLmkpOworICB9CisgIHN0YXRpYyBjbGFzcyBTYyB7CisgICAgaW50IGk7CisgIH0KK30KKworaW50ZXJmYWNlIENhbGxiYWNrIHsKKyAgICB2b2lkIGNhbGwoKTsKK30KKworY2xhc3MgQmFzZSB7CisgICAgQ2FsbGJhY2sgY2FsbGJhY2s7CisKKyAgICBwdWJsaWMgQmFzZShmaW5hbCBDYWxsYmFjayBjYWxsYmFjaykgeworICAgICAgICB0aGlzLmNhbGxiYWNrID0gY2FsbGJhY2s7CisgICAgfQorfQorCitjbGFzcyBZZWxsaW5CdWcgZXh0ZW5kcyBCYXNlIHsKKyAgICBwdWJsaWMgWWVsbGluQnVnKCkgeworICAgICAgICBzdXBlcihuZXcgQ2FsbGJhY2soKSB7CisKKyAgICAgICAgICAgIHB1YmxpYyB2b2lkIGNhbGwoKSB7CisgICAgICAgICAgICAgICA8ZXJyb3IgZGVzY3I9IkNhbm5vdCByZWZlcmVuY2UgJ1llbGxpbkJ1Zy50aGlzJyBiZWZvcmUgc3VwZXJ0eXBlIGNvbnN0cnVjdG9yIGhhcyBiZWVuIGNhbGxlZCI+WWVsbGluQnVnLnRoaXM8L2Vycm9yPi5mKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0pOworICAgIH0KKworICAgIHByaXZhdGUgdm9pZCBmKCkge30KKworICAgIHsKKyAgICAgICAgbmV3IENhbGxiYWNrKCkgeworCisgICAgICAgICAgICBwdWJsaWMgdm9pZCBjYWxsKCkgeworICAgICAgICAgICAgICAgIFllbGxpbkJ1Zy50aGlzLmYoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfTsKKyAgICB9Cit9CisKK2NsYXNzIE91dGVyIHsKKyAgY2xhc3MgSW5uZXIgZXh0ZW5kcyBPdXRlcnt9CisgIGNsYXNzIFVzZUl0IGV4dGVuZHMgSW5uZXJ7CisgICAgT3V0ZXIgbzsKKyAgICBVc2VJdCgpIHsKKyAgICAgIDxlcnJvciBkZXNjcj0iQ2Fubm90IHJlZmVyZW5jZSAnVXNlSXQubycgYmVmb3JlIHN1cGVydHlwZSBjb25zdHJ1Y3RvciBoYXMgYmVlbiBjYWxsZWQiPm88L2Vycm9yPi5zdXBlcigpOworICAgIH0KKworICAgIE91dGVyIGdldG8oKSB7CisgICAgIHJldHVybiBudWxsOworICAgIH0KKyAgICBVc2VJdChpbnQgeCkgeworICAgICAgPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVmZXJlbmNlICdVc2VJdC5nZXRvJyBiZWZvcmUgc3VwZXJ0eXBlIGNvbnN0cnVjdG9yIGhhcyBiZWVuIGNhbGxlZCI+Z2V0bzwvZXJyb3I+KCkuc3VwZXIoKTsKKyAgICB9CisgICAgVXNlSXQoT3V0ZXIgeCkgeworICAgICAgPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVmZXJlbmNlICd0aGlzJyBiZWZvcmUgc3VwZXJ0eXBlIGNvbnN0cnVjdG9yIGhhcyBiZWVuIGNhbGxlZCI+dGhpczwvZXJyb3I+LnN1cGVyKCk7CisgICAgfQorICB9Cit9CisKK2NsYXNzIFdpdGhBbm9ueW1vdXMgeworICBzdGF0aWMgY2xhc3MgU3VwZXJDbGFzcyB7CisgICAgICBwdWJsaWMgdm9pZCBmb28oKSB7fQorICB9IAorICBjbGFzcyBDaGlsZENsYXNzIGV4dGVuZHMgU3VwZXJDbGFzcyB7CisgIAorICAgICAgcHVibGljIENoaWxkQ2xhc3MoZmluYWwgU3RyaW5nIHRpdGxlKSB7CisgICAgICAgICAgdGhpcyhuZXcgU3VwZXJDbGFzcygpeworICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICBmb28oKTsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgIH0pOworICAgICAgfQorICAKKyAgICAgIHB1YmxpYyBDaGlsZENsYXNzKFN1cGVyQ2xhc3MgY2hpbGQpIHsKKyAgICAgIH0KKyAgCisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZy9SZWdleHAuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nL1JlZ2V4cC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYyNjllZTgKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZy9SZWdleHAuamF2YQpAQCAtMCwwICsxLDYgQEAKK2NsYXNzIEMgeworICB2b2lkIGZvbygpIHsKKyAgICAiIi5yZXBsYWNlQWxsKCJcXFFcclxuXFxFIiwgIiIpOworICB9CisKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZy9SZXR1cm4uamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nL1JldHVybi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY3NWM2MDIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZy9SZXR1cm4uamF2YQpAQCAtMCwwICsxLDIwIEBACitjbGFzcyBzIHsKKyAgdm9pZCBmKCkgeworICAgIDxlcnJvciBkZXNjcj0iQ2Fubm90IHJldHVybiBhIHZhbHVlIGZyb20gYSBtZXRob2Qgd2l0aCB2b2lkIHJlc3VsdCB0eXBlIj5yZXR1cm4gMDs8L2Vycm9yPgorICB9CisgIHZvaWQgZjIoKSB7CisgICAgcmV0dXJuOworICB9CisKKyAgaW50IGYzKCkgeworICAgIDxlcnJvciBkZXNjcj0iTWlzc2luZyByZXR1cm4gdmFsdWUiPnJldHVybjs8L2Vycm9yPgorICB9CisgIGludCBmNCgpIHsKKyAgICByZXR1cm4gMDsKKyAgfQorCisgIHsKKyAgICA8ZXJyb3IgZGVzY3I9IlJldHVybiBvdXRzaWRlIG1ldGhvZCI+cmV0dXJuOzwvZXJyb3I+CisKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nL1NlcmlhbGl6YWJsZVN0dWZmLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZy9TZXJpYWxpemFibGVTdHVmZi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJlYjIwOWYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZy9TZXJpYWxpemFibGVTdHVmZi5qYXZhCkBAIC0wLDAgKzEsNjIgQEAKKy8vIFNlcmlhbGl6YWJsZS9leHRlcm5hbGl6YWJsZSBzcGVjaWZpYworCitpbXBvcnQgamF2YS5pby4qOworY2xhc3MgYSBpbXBsZW1lbnRzIFNlcmlhbGl6YWJsZSB7CisgICBwcml2YXRlIHZvaWQgcmVhZE9iamVjdChPYmplY3RJbnB1dFN0cmVhbSBzdHJlYW0pCisgICAgICAgIHRocm93cyBJT0V4Y2VwdGlvbiwgQ2xhc3NOb3RGb3VuZEV4Y2VwdGlvbiB7CisgICAgICAgaWYgKHN0cmVhbSA9PSBudWxsKSB0aHJvdyBuZXcgSU9FeGNlcHRpb24oKTsKKyAgICAgICBpZiAoc3RyZWFtID09IG51bGwpIHRocm93IG5ldyBDbGFzc05vdEZvdW5kRXhjZXB0aW9uKCk7CisgICB9CisKKyAgIHByaXZhdGUgdm9pZCByZWFkT2JqZWN0Tm9EYXRhKCkgdGhyb3dzIE9iamVjdFN0cmVhbUV4Y2VwdGlvbiB7CisgICAgICAgaWYgKHRoaXMgPT0gbnVsbCkgdGhyb3cgbmV3IE9iamVjdFN0cmVhbUV4Y2VwdGlvbigpe307CisgICB9CisKKworICAgcHJpdmF0ZSBPYmplY3QgcmVhZFJlc29sdmUoKQorICAgICAgICAgICAgICAgICAgICB0aHJvd3MgT2JqZWN0U3RyZWFtRXhjZXB0aW9uIHsKKyAgICAgICBpZiAodGhpcyA9PSBudWxsKSB0aHJvdyBuZXcgT2JqZWN0U3RyZWFtRXhjZXB0aW9uKCl7fTsKKyAgICAgICByZXR1cm4gbnVsbDsKKyAgIH0KKworICAgcHJpdmF0ZSBPYmplY3Qgd3JpdGVSZXBsYWNlKCkgeyByZXR1cm4gbnVsbDsgfQorICAgcHJpdmF0ZSB2b2lkIHdyaXRlT2JqZWN0KE9iamVjdE91dHB1dFN0cmVhbSBzdHJlYW0pIHsgaWYgKHN0cmVhbT09bnVsbCkgcmV0dXJuOyB9CisKKyAgCit9CisKK2NsYXNzIGIgIHsKKyAgIHByaXZhdGUgdm9pZCA8d2FybmluZyBkZXNjcj0iUHJpdmF0ZSBtZXRob2QgJ3JlYWRPYmplY3QoamF2YS5pby5PYmplY3RJbnB1dFN0cmVhbSknIGlzIG5ldmVyIHVzZWQiPnJlYWRPYmplY3Q8L3dhcm5pbmc+KE9iamVjdElucHV0U3RyZWFtIHN0cmVhbSkKKyAgICAgICAgdGhyb3dzIElPRXhjZXB0aW9uLCBDbGFzc05vdEZvdW5kRXhjZXB0aW9uIHsKKyAgICAgICBpZiAoc3RyZWFtID09IG51bGwpIHRocm93IG5ldyBJT0V4Y2VwdGlvbigpOworICAgICAgIGlmIChzdHJlYW0gPT0gbnVsbCkgdGhyb3cgbmV3IENsYXNzTm90Rm91bmRFeGNlcHRpb24oKTsKKyAgIH0KKworICAgcHJpdmF0ZSB2b2lkIDx3YXJuaW5nIGRlc2NyPSJQcml2YXRlIG1ldGhvZCAncmVhZE9iamVjdE5vRGF0YSgpJyBpcyBuZXZlciB1c2VkIj5yZWFkT2JqZWN0Tm9EYXRhPC93YXJuaW5nPigpIHRocm93cyBPYmplY3RTdHJlYW1FeGNlcHRpb24geworICAgICAgIGlmICh0aGlzID09IG51bGwpIHRocm93IG5ldyBPYmplY3RTdHJlYW1FeGNlcHRpb24oKXt9OworICAgfQorCisKKyAgIHByaXZhdGUgT2JqZWN0IDx3YXJuaW5nIGRlc2NyPSJQcml2YXRlIG1ldGhvZCAncmVhZFJlc29sdmUoKScgaXMgbmV2ZXIgdXNlZCI+cmVhZFJlc29sdmU8L3dhcm5pbmc+KCkKKyAgICAgICAgICAgICAgICAgICAgdGhyb3dzIE9iamVjdFN0cmVhbUV4Y2VwdGlvbiB7CisgICAgICAgaWYgKHRoaXMgPT0gbnVsbCkgdGhyb3cgbmV3IE9iamVjdFN0cmVhbUV4Y2VwdGlvbigpe307CisgICAgICAgcmV0dXJuIG51bGw7CisgICB9CisKKyAgIHByaXZhdGUgT2JqZWN0IDx3YXJuaW5nIGRlc2NyPSJQcml2YXRlIG1ldGhvZCAnd3JpdGVSZXBsYWNlKCknIGlzIG5ldmVyIHVzZWQiPndyaXRlUmVwbGFjZTwvd2FybmluZz4oKSB7IHJldHVybiBudWxsOyB9CisgICBwcml2YXRlIHZvaWQgPHdhcm5pbmcgZGVzY3I9IlByaXZhdGUgbWV0aG9kICd3cml0ZU9iamVjdChqYXZhLmlvLk9iamVjdE91dHB1dFN0cmVhbSknIGlzIG5ldmVyIHVzZWQiPndyaXRlT2JqZWN0PC93YXJuaW5nPihPYmplY3RPdXRwdXRTdHJlYW0gc3RyZWFtKSB7IGlmIChzdHJlYW09PW51bGwpIHJldHVybjsgfQorfQorCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKK2Fic3RyYWN0IGNsYXNzIGFic3RyYWN0Tm9TZXJpYWxpemFibGUgeworICBwcm90ZWN0ZWQgT2JqZWN0IHJlYWRSZXNvbHZlKCkgdGhyb3dzIE9iamVjdFN0cmVhbUV4Y2VwdGlvbiB7CisgICAgcmV0dXJuIG51bGw7CisgIH0KK30KKworY2xhc3Mgc2VyaWFsaXphYmxlU3ViY2xhc3NPZkFic3RyYWN0Tm9TZXJpYWxpemFibGUgZXh0ZW5kcyBhYnN0cmFjdE5vU2VyaWFsaXphYmxlIGltcGxlbWVudHMgU2VyaWFsaXphYmxlIHsKKyAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworICAgIFN5c3RlbS5vdXQucHJpbnRsbihuZXcgc2VyaWFsaXphYmxlU3ViY2xhc3NPZkFic3RyYWN0Tm9TZXJpYWxpemFibGUoKS50b1N0cmluZygpKTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nL1NpbGx5QXNzaWdubWVudC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmcvU2lsbHlBc3NpZ25tZW50LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjBiZGI0ZgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nL1NpbGx5QXNzaWdubWVudC5qYXZhCkBAIC0wLDAgKzEsMzcgQEAKKy8vIHNpbGx5IGFzaWdubWVudAoraW1wb3J0IGphdmF4LnN3aW5nLio7CisKK2NsYXNzIGEgeworICBpbnQgZjsKKyAgSlBhbmVsIGZwYW5lbDsKKworICB2b2lkIGYoaW50IGkpIHsKKworICAgPHdhcm5pbmcgZGVzY3I9IlZhcmlhYmxlICdpJyBpcyBhc3NpZ25lZCB0byBpdHNlbGYiPmkgPSBpPC93YXJuaW5nPjsKKyAgfQorCisgIHZvaWQgZjIoKSB7CisgICAgPHdhcm5pbmcgZGVzY3I9IlZhcmlhYmxlICdmJyBpcyBhc3NpZ25lZCB0byBpdHNlbGYiPnRoaXMuZiA9IGY8L3dhcm5pbmc+OworICAgIDx3YXJuaW5nIGRlc2NyPSJWYXJpYWJsZSAnZicgaXMgYXNzaWduZWQgdG8gaXRzZWxmIj5hLnRoaXMuZiA9IGY8L3dhcm5pbmc+OworICAgIDx3YXJuaW5nIGRlc2NyPSJWYXJpYWJsZSAnZicgaXMgYXNzaWduZWQgdG8gaXRzZWxmIj5mID0gdGhpcy5mPC93YXJuaW5nPjsKKyAgfQorCisgIHZvaWQgZjMoT2JqZWN0IG8pIHsKKyAgICBpbnQgaSA9IDA7CisgICAgPHdhcm5pbmcgZGVzY3I9IlZhcmlhYmxlICdpJyBpcyBhc3NpZ25lZCB0byBpdHNlbGYiPmkgPSBpPC93YXJuaW5nPjsKKyAgICA8d2FybmluZyBkZXNjcj0iVmFyaWFibGUgJ2knIGlzIGFzc2lnbmVkIHRvIGl0c2VsZiI+aSA9IChpbnQpaTwvd2FybmluZz47CisgICAgPHdhcm5pbmcgZGVzY3I9IlZhcmlhYmxlICdvJyBpcyBhc3NpZ25lZCB0byBpdHNlbGYiPm8gPSAoKE9iamVjdCkobykpPC93YXJuaW5nPjsKKyAgfQorICB2b2lkIGY0KCkgeworICAgIGZwYW5lbC5nZXRTaXplKCkuaGVpZ2h0ID0gdGhpcy5mcGFuZWwuZ2V0U2l6ZSgpLmhlaWdodDsgLy8gbm90IHNpbGx5LiBBcmUgeW91IHN1cmUgeW91IGNhbiBiZXQgZ2V0U2l6ZSgpIGhhcyBubyBzaWRlIGVmZmVjdHM/IAorICB9CisKKyAgdm9pZCBjZjEoKSB7CisgICAgSlBhbmVsIGEgPSBuZXcgSlBhbmVsKCksIGIgPSBuZXcgSlBhbmVsKCk7CisgICAgYS5nZXRTaXplKCkuaGVpZ2h0ID0gYi5nZXRTaXplKCkuaGVpZ2h0OyAvLyBub3Qgc2lsbHkhCisgIH0KKworICB2b2lkIGNmMihhIGFhKSB7CisgICAgYWEuZiA9IGY7CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nL1NpbmdsZVR5cGVJbXBvcnRDb25mbGljdHMuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nL1NpbmdsZVR5cGVJbXBvcnRDb25mbGljdHMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YTdjOWRmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmcvU2luZ2xlVHlwZUltcG9ydENvbmZsaWN0cy5qYXZhCkBAIC0wLDAgKzEsMTEgQEAKKy8vIHNpbmdsZSBpbXBvcnQgY29uZmxpY3QKK2ltcG9ydCBqYXZhLnNxbC5EYXRlOworPGVycm9yIGRlc2NyPSInamF2YS5zcWwuRGF0ZScgaXMgYWxyZWFkeSBkZWZpbmVkIGluIGEgc2luZ2xlLXR5cGUgaW1wb3J0Ij5pbXBvcnQgamF2YS51dGlsLkRhdGU7PC9lcnJvcj4KK2ltcG9ydCBqYXZhLnNxbC4qOworaW1wb3J0IGphdmEudXRpbC4qOworLy8gbXVsdGlwbGUgc2luZ2xlLXR5cGUgaW1wb3J0IG9mIHRoZSBzYW1lIGNsYXNzIGlzIGZpbmUKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CisKKworcHVibGljIGNsYXNzIGMge30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nL1N0YXRpY0luSW5uZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nL1N0YXRpY0luSW5uZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOGM4MmYzCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmcvU3RhdGljSW5Jbm5lci5qYXZhCkBAIC0wLDAgKzEsMTE0IEBACisvL3N0YXRpY3MgaW4gaW5uZXIKK3B1YmxpYyBjbGFzcyBhIHsKKworICBzdGF0aWMgZmluYWwgTnVtYmVyIHggPSBudWxsOworICBzdGF0aWMgZmluYWwgaW50IGl4ID0geD09IG51bGwgPyA0IDogMzsKKworICBjbGFzcyBpYyB7CisgICAgPGVycm9yIGRlc2NyPSJJbm5lciBjbGFzc2VzIGNhbm5vdCBoYXZlIHN0YXRpYyBkZWNsYXJhdGlvbnMiPnN0YXRpYzwvZXJyb3I+CisgICAgICBpbnQgaTsKKworICAgIDxlcnJvciBkZXNjcj0iSW5uZXIgY2xhc3NlcyBjYW5ub3QgaGF2ZSBzdGF0aWMgZGVjbGFyYXRpb25zIj5zdGF0aWM8L2Vycm9yPgorICAgICAgZmluYWwgaW50IGYxID0gMyA8IDQgPyAoYS5peD09NSA/ICAxIDogMykgLyA0ICsgMTggOiAwOworCisgICAgPGVycm9yIGRlc2NyPSJJbm5lciBjbGFzc2VzIGNhbm5vdCBoYXZlIHN0YXRpYyBkZWNsYXJhdGlvbnMiPnN0YXRpYzwvZXJyb3I+IAorICAgICAgZmluYWwgaW50IGYyID0geCBpbnN0YW5jZW9mIEludGVnZXIgPyAxIDogMDsKKworICAgIDxlcnJvciBkZXNjcj0iSW5uZXIgY2xhc3NlcyBjYW5ub3QgaGF2ZSBzdGF0aWMgZGVjbGFyYXRpb25zIj5zdGF0aWM8L2Vycm9yPiAKKyAgICAgIGNsYXNzIGFfaWNfYyB7fQorCisgICAgPGVycm9yIGRlc2NyPSJJbm5lciBjbGFzc2VzIGNhbm5vdCBoYXZlIHN0YXRpYyBkZWNsYXJhdGlvbnMiPmludGVyZmFjZSBhX2ljX2k8L2Vycm9yPiB7fQorICAgIDxlcnJvciBkZXNjcj0iSW5uZXIgY2xhc3NlcyBjYW5ub3QgaGF2ZSBzdGF0aWMgZGVjbGFyYXRpb25zIj5zdGF0aWM8L2Vycm9yPiAgaW50ZXJmYWNlIGFfaWNfaTIge30KKworICAgIDxlcnJvciBkZXNjcj0iSW5uZXIgY2xhc3NlcyBjYW5ub3QgaGF2ZSBzdGF0aWMgZGVjbGFyYXRpb25zIj5zdGF0aWM8L2Vycm9yPiAKKyAgICAgIGludCBhX2ljX20oU3RyaW5nIHMpIHsgcmV0dXJuIDA7IH0KKworICAgIC8vIHN0YXRpYyBpbml0aWFsaXplcgorICAgIDxlcnJvciBkZXNjcj0iSW5uZXIgY2xhc3NlcyBjYW5ub3QgaGF2ZSBzdGF0aWMgZGVjbGFyYXRpb25zIj5zdGF0aWM8L2Vycm9yPgorICAgIHt9CisgIH0KKworCisgIGludGVyZmFjZSBpaSB7CisgICAgc3RhdGljIGludCBpID0gOTsKKyAgICB2b2lkIGYoKTsKKyAgICAvLyBzaW5jZSBuZXN0ZWQgaW50ZXJmYWNlIGlzIGltcGxpY2l0bHkgc3RhdGljOgorICAgIHN0YXRpYyBjbGFzcyBpaV9jIHt9CisgIH0KKworICAvLyBzdGF0aWMgaW5zaWRlIGNsYXNzIGluc2lkZSBjb2RlIGJsb2NrCisgIHZvaWQgZigpIHsKKyAgY2xhc3MgaWMyIHsKKyAgICA8ZXJyb3IgZGVzY3I9IklubmVyIGNsYXNzZXMgY2Fubm90IGhhdmUgc3RhdGljIGRlY2xhcmF0aW9ucyI+c3RhdGljPC9lcnJvcj4KKyAgICAgIGludCBpOworCisgICAgPGVycm9yIGRlc2NyPSJJbm5lciBjbGFzc2VzIGNhbm5vdCBoYXZlIHN0YXRpYyBkZWNsYXJhdGlvbnMiPnN0YXRpYzwvZXJyb3I+CisgICAgICBmaW5hbCBpbnQgZjEgPSAzIDwgNCA/IChhLml4PT01ID8gIDEgOiAzKSAvIDQgKyAxOCA6IDA7CisKKyAgICA8ZXJyb3IgZGVzY3I9IklubmVyIGNsYXNzZXMgY2Fubm90IGhhdmUgc3RhdGljIGRlY2xhcmF0aW9ucyI+c3RhdGljPC9lcnJvcj4gCisgICAgICBmaW5hbCBpbnQgZjIgPSB4IGluc3RhbmNlb2YgSW50ZWdlciA/IDEgOiAwOworCisgICAgPGVycm9yIGRlc2NyPSJNb2RpZmllciAnc3RhdGljJyBub3QgYWxsb3dlZCBoZXJlIj5zdGF0aWM8L2Vycm9yPiAKKyAgICAgIGNsYXNzIGFfaWNfYzIge30KKworICAgIDxlcnJvciBkZXNjcj0iSW5uZXIgY2xhc3NlcyBjYW5ub3QgaGF2ZSBzdGF0aWMgZGVjbGFyYXRpb25zIj5zdGF0aWM8L2Vycm9yPiAKKyAgICAgIGludCBhX2ljX20yKFN0cmluZyBzKSB7IHJldHVybiAwOyB9CisgICAgLy8gc3RhdGljIGluaXRpYWxpemVyCisgICAgPGVycm9yIGRlc2NyPSJJbm5lciBjbGFzc2VzIGNhbm5vdCBoYXZlIHN0YXRpYyBkZWNsYXJhdGlvbnMiPnN0YXRpYzwvZXJyb3I+CisgICAge30KKyAgfQorICB9CisKKyAgdm9pZCBmMSgpIAorICB7CisgICAgbmV3IGEoKSB7CisgICAgPGVycm9yIGRlc2NyPSJJbm5lciBjbGFzc2VzIGNhbm5vdCBoYXZlIHN0YXRpYyBkZWNsYXJhdGlvbnMiPnN0YXRpYzwvZXJyb3I+CisgICAgICBpbnQgaTsKKworICAgIDxlcnJvciBkZXNjcj0iSW5uZXIgY2xhc3NlcyBjYW5ub3QgaGF2ZSBzdGF0aWMgZGVjbGFyYXRpb25zIj5zdGF0aWM8L2Vycm9yPgorICAgIGZpbmFsIGludCBmMSA9IDMgPCA0ID8gKGEuaXg9PTUgPyAgMSA6IDMpIC8gNCArIDE4IDogMDsKKworICAgIC8vIGl0cyBub3QgYSBjb21waWxlIHRpbWUgY29uc3RhbnQKKyAgICA8ZXJyb3IgZGVzY3I9IklubmVyIGNsYXNzZXMgY2Fubm90IGhhdmUgc3RhdGljIGRlY2xhcmF0aW9ucyI+c3RhdGljPC9lcnJvcj4gCisgICAgICBmaW5hbCBPYmplY3QgbyA9IG51bGw7CisKKyAgICA8ZXJyb3IgZGVzY3I9IklubmVyIGNsYXNzZXMgY2Fubm90IGhhdmUgc3RhdGljIGRlY2xhcmF0aW9ucyI+c3RhdGljPC9lcnJvcj4gCisgICAgICBmaW5hbCBpbnQgZjIgPSB4IGluc3RhbmNlb2YgSW50ZWdlciA/IDEgOiAwOworCisgICAgPGVycm9yIGRlc2NyPSJNb2RpZmllciAnc3RhdGljJyBub3QgYWxsb3dlZCBoZXJlIj5zdGF0aWM8L2Vycm9yPiAKKyAgICAgIGNsYXNzIGFfaWNfYzIge30KKworICAgIDxlcnJvciBkZXNjcj0iSW5uZXIgY2xhc3NlcyBjYW5ub3QgaGF2ZSBzdGF0aWMgZGVjbGFyYXRpb25zIj5zdGF0aWM8L2Vycm9yPiAKKyAgICAgIGludCBhX2ljX20yKFN0cmluZyBzKSB7IHJldHVybiAwOyB9CisgICAgLy8gc3RhdGljIGluaXRpYWxpemVyCisgICAgPGVycm9yIGRlc2NyPSJJbm5lciBjbGFzc2VzIGNhbm5vdCBoYXZlIHN0YXRpYyBkZWNsYXJhdGlvbnMiPnN0YXRpYzwvZXJyb3I+CisgICAge30KKyAgICB9OworICB9CisKKyAgLy8gbG9jYWwgaW50ZXJmYWNlCisgIGNsYXNzIGNjIHsKKyAgICB2b2lkIGYoKSB7CisgICAgICA8ZXJyb3IgZGVzY3I9Ik1vZGlmaWVyICdpbnRlcmZhY2UnIG5vdCBhbGxvd2VkIGhlcmUiPmludGVyZmFjZSBpPC9lcnJvcj4ge30KKyAgICB9CisgICAgdm9pZCBmZigpIHsKKyAgICAgIGNsYXNzIGlubiB7CisgICAgICAgIDxlcnJvciBkZXNjcj0iSW5uZXIgY2xhc3NlcyBjYW5ub3QgaGF2ZSBzdGF0aWMgZGVjbGFyYXRpb25zIj5pbnRlcmZhY2UgaTwvZXJyb3I+IHt9CisgICAgICB9CisgICAgfQorCisgICAgT2JqZWN0IG8gPSBuZXcgUnVubmFibGUoKSB7CisgICAgICA8ZXJyb3IgZGVzY3I9IklubmVyIGNsYXNzZXMgY2Fubm90IGhhdmUgc3RhdGljIGRlY2xhcmF0aW9ucyI+aW50ZXJmYWNlIGk8L2Vycm9yPiB7fQorICAgICAgcHVibGljIHZvaWQgcnVuKCkge30KKyAgICB9OworICB9CisKKyAgdm9pZCB3aXRoYW5vbnltb3VzKCkgeworICAgIG5ldyBPYmplY3QoKSB7CisgICAgICA8ZXJyb3IgZGVzY3I9Ik1vZGlmaWVyICdwcml2YXRlJyBub3QgYWxsb3dlZCBoZXJlIj5wcml2YXRlPC9lcnJvcj4gY2xhc3MgUlQge30KKyAgICAgIHByaXZhdGUgdm9pZCBtZXRob2QoKSB7fQorICAgICAgcHJpdmF0ZSBpbnQgbXlJOworICAgIH07CisgIH0KK30KKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmcvU3RhdGljT3ZlcnJpZGUuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nL1N0YXRpY092ZXJyaWRlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjIyOTMxMQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nL1N0YXRpY092ZXJyaWRlLmphdmEKQEAgLTAsMCArMSwxMzIgQEAKKy8vIG1ldGhvZCBvdmVycmlkZQoraW1wb3J0IGphdmEuaW8uKjsKK2ltcG9ydCBqYXZhLm5ldC4qOworCitwdWJsaWMgY2xhc3MgYSBleHRlbmRzIGExIHsKKyA8ZXJyb3IgZGVzY3I9IlN0YXRpYyBtZXRob2QgJ2YoKScgaW4gJ2EnIGNhbm5vdCBvdmVycmlkZSBpbnN0YW5jZSBtZXRob2QgJ2YoKScgaW4gJ2ExJyI+cHVibGljIHN0YXRpYyB2b2lkIGYoKTwvZXJyb3I+IHsgfQorIDxlcnJvciBkZXNjcj0iSW5zdGFuY2UgbWV0aG9kICdmMSgpJyBpbiAnYScgY2Fubm90IG92ZXJyaWRlIHN0YXRpYyBtZXRob2QgJ2YxKCknIGluICdhMSciPnB1YmxpYyB2b2lkIGYxKCk8L2Vycm9yPiB7IH0KK30KK2NsYXNzIGExIHsKKyBwdWJsaWMgdm9pZCBmKCkge30KKyBwdWJsaWMgc3RhdGljIHZvaWQgZjEoKSB7fQorfQorCitpbnRlcmZhY2UgaSB7Cisgdm9pZCBmMSgpOworfQorCis8ZXJyb3IgZGVzY3I9IlN0YXRpYyBtZXRob2QgJ2YxKCknIGluICdhMScgY2Fubm90IG92ZXJyaWRlIGluc3RhbmNlIG1ldGhvZCAnZjEoKScgaW4gJ2knIj5jbGFzcyBjX2ExX2kgZXh0ZW5kcyBhMSBpbXBsZW1lbnRzIGk8L2Vycm9yPiB7Cit9CisKK2ludGVyZmFjZSBpaSB7CisgaW50IGYoKTsKK30KKworPGVycm9yIGRlc2NyPSInZigpJyBpbiAnYTEnIGNsYXNoZXMgd2l0aCAnZigpJyBpbiAnaWknOyBhdHRlbXB0aW5nIHRvIHVzZSBpbmNvbXBhdGlibGUgcmV0dXJuIHR5cGUiPmFic3RyYWN0IGNsYXNzIGNfYTFfaWkgZXh0ZW5kcyBhMSBpbXBsZW1lbnRzIGlpPC9lcnJvcj4geworfQorCitpbnRlcmZhY2UgaTIgeworIGludCBmMSgpOworfQorPGVycm9yIGRlc2NyPSInZjEoKScgaW4gJ2kyJyBjbGFzaGVzIHdpdGggJ2YxKCknIGluICdpJzsgbWV0aG9kcyBoYXZlIHVucmVsYXRlZCByZXR1cm4gdHlwZXMiPmludGVyZmFjZSBpMyBleHRlbmRzIGksIGkyPC9lcnJvcj4geworfQorCitjbGFzcyB3ZWFrIHsKKyAgdm9pZCBmMSgpIHt9Cit9Cis8ZXJyb3IgZGVzY3I9IidmMSgpJyBpbiAnd2VhaycgY2xhc2hlcyB3aXRoICdmMSgpJyBpbiAnaSc7IGF0dGVtcHRpbmcgdG8gYXNzaWduIHdlYWtlciBhY2Nlc3MgcHJpdmlsZWdlcyAoJ3BhY2thZ2VMb2NhbCcpOyB3YXMgJ3B1YmxpYyciPmNsYXNzIGEyIGV4dGVuZHMgd2VhayBpbXBsZW1lbnRzIGk8L2Vycm9yPiB7Cit9CisKK2NsYXNzIGEzIHsKKyAgcHJvdGVjdGVkIHZvaWQgZjEoKSB7fQorfQorPGVycm9yIGRlc2NyPSInZjEoKScgaW4gJ2EzJyBjbGFzaGVzIHdpdGggJ2YxKCknIGluICdpJzsgYXR0ZW1wdGluZyB0byBhc3NpZ24gd2Vha2VyIGFjY2VzcyBwcml2aWxlZ2VzICgncHJvdGVjdGVkJyk7IHdhcyAncHVibGljJyI+Y2xhc3MgYTQgZXh0ZW5kcyBhMyBpbXBsZW1lbnRzIGk8L2Vycm9yPiB7CisvLyAgcHVibGljIHZvaWQgZjEoKSB7fQorfQorY2xhc3MgYTUgZXh0ZW5kcyBhMyBpbXBsZW1lbnRzIGkgeworICAvLyBpZiB3ZSBvdmVycmlkZSBzdXNwaWNpb3VzIG1ldGhvZCwgaXRzIE9LCisgIHB1YmxpYyB2b2lkIGYxKCkge30KK30KKworCisKKy8vIGRlZXAgaW5oZXJpdAorY2xhc3MgZGExIHsgdm9pZCBmKCkge30gfQorY2xhc3MgZGEyIGV4dGVuZHMgZGExIHsgdm9pZCBmKCkge30gfQorY2xhc3MgZGEzIGV4dGVuZHMgZGEyIHt9CisKKworCisKK2ludGVyZmFjZSBNeUludGVyZmFjZQoreworICAgIHB1YmxpYyB2b2lkIG15TWV0aG9kKCk7Cit9CitjbGFzcyBNeUludGVyZmFjZUltcGwgaW1wbGVtZW50cyBNeUludGVyZmFjZSAKK3sKKyAgICA8ZXJyb3IgZGVzY3I9IlN0YXRpYyBtZXRob2QgJ215TWV0aG9kKCknIGluICdNeUludGVyZmFjZUltcGwnIGNhbm5vdCBvdmVycmlkZSBpbnN0YW5jZSBtZXRob2QgJ215TWV0aG9kKCknIGluICdNeUludGVyZmFjZSciPnB1YmxpYyBzdGF0aWMgdm9pZCBteU1ldGhvZCgpPC9lcnJvcj4geyAvKiBpbXBsZW1lbnRhdGlvbiBnb2VzIGhlcmUgKi8gfQorCisgICAgPGVycm9yIGRlc2NyPSJTdGF0aWMgbWV0aG9kICd0b1N0cmluZygpJyBpbiAnTXlJbnRlcmZhY2VJbXBsJyBjYW5ub3Qgb3ZlcnJpZGUgaW5zdGFuY2UgbWV0aG9kICd0b1N0cmluZygpJyBpbiAnamF2YS5sYW5nLk9iamVjdCciPnByaXZhdGUgc3RhdGljIFN0cmluZyB0b1N0cmluZygpPC9lcnJvcj4geworICAgICAgICByZXR1cm4gbnVsbDsKKyAgICB9CisKK30KKworCisKKy8vIFN1bi1zdHlsZSBpbmhlcml0YW5jZQorcHVibGljIGNsYXNzIFN1bmMgeworICBwcm90ZWN0ZWQgdm9pZCBmKCkge30KK30KK3B1YmxpYyBjbGFzcyBTdW5jYyBleHRlbmRzIFN1bmMgIHsKKyAgcHVibGljIHZvaWQgZigpIHt9Cit9CitwdWJsaWMgaW50ZXJmYWNlIFN1bmkgeworICBwdWJsaWMgdm9pZCBmKCk7Cit9CitjbGFzcyBTdW5jY2MgZXh0ZW5kcyBTdW5jYyBpbXBsZW1lbnRzIFN1bmkgeworfQorCisvLyBvdmVycmlkZSBzdGF0aWMKK2NsYXNzIFN0QSB7CisgIHB1YmxpYyBzdGF0aWMgU3RBIGNyZWF0ZUluc3RhbmNlKCkgeworICAgIHJldHVybiBuZXcgU3RBKCk7CisgIH0KK30KK2NsYXNzIFN0QiBleHRlbmRzIFN0QSB7CisgIHB1YmxpYyBzdGF0aWMgPGVycm9yIGRlc2NyPSInY3JlYXRlSW5zdGFuY2UoKScgaW4gJ1N0QicgY2xhc2hlcyB3aXRoICdjcmVhdGVJbnN0YW5jZSgpJyBpbiAnU3RBJzsgYXR0ZW1wdGluZyB0byB1c2UgaW5jb21wYXRpYmxlIHJldHVybiB0eXBlIj5TdHJpbmc8L2Vycm9yPiBjcmVhdGVJbnN0YW5jZSgpIHsKKyAgICByZXR1cm4gbnVsbDsKKyAgfQorfQorCisvLy8vLy8vLworY2xhc3MgRm9vIHsKKyAgICBwcm90ZWN0ZWQgc3RhdGljIHZvaWQgZm9vKFN0cmluZyBzKSB7fQorfQorcHVibGljIGNsYXNzIEJhciBleHRlbmRzIEZvb3sKKyAgICA8ZXJyb3IgZGVzY3I9Iidmb28oU3RyaW5nKScgaW4gJ0JhcicgY2xhc2hlcyB3aXRoICdmb28oU3RyaW5nKScgaW4gJ0Zvbyc7IGF0dGVtcHRpbmcgdG8gYXNzaWduIHdlYWtlciBhY2Nlc3MgcHJpdmlsZWdlcyAoJ3ByaXZhdGUnKTsgd2FzICdwcm90ZWN0ZWQnIj5wcml2YXRlPC9lcnJvcj4gc3RhdGljIHZvaWQgZm9vKFN0cmluZyBzKSB7fQorfQorCisKKy8vLy8vLy8vLy8vLy8gIElERUFERVYtNDE3NzkKK2NsYXNzIEEgeworICAgIHB1YmxpYyBzdGF0aWMgQyBDKCkgeyByZXR1cm4gbmV3IEMoKTsgfQorfQorY2xhc3MgQiBleHRlbmRzIEEgeworfQorY2xhc3MgQyBleHRlbmRzIEIgeworICAgIHB1YmxpYyBDKCkge30KK30KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworY2xhc3MgWjEgeworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgdm9pZCBkb0l0QmFieSgpIHsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJIZWxsbywgZGlhciBBIik7CisgICAgfQorfQorCitjbGFzcyBaMiBleHRlbmRzIFoxIHsKKyAgICA8ZXJyb3IgZGVzY3I9Iidkb0l0QmFieSgpJyBjYW5ub3Qgb3ZlcnJpZGUgJ2RvSXRCYWJ5KCknIGluICdaMSc7IG92ZXJyaWRkZW4gbWV0aG9kIGlzIGZpbmFsIj5wdWJsaWMgc3RhdGljIHZvaWQgZG9JdEJhYnkoKTwvZXJyb3I+IHsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJIZWxsbywgZGlhciBCIik7CisgICAgfQorfQorLy8vLy8vLy8vLy8vLy8vLy8vLwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nL1N0YXRpY1ZpYUluc3RhbmNlLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZy9TdGF0aWNWaWFJbnN0YW5jZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNlZWVhNGQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZy9TdGF0aWNWaWFJbnN0YW5jZS5qYXZhCkBAIC0wLDAgKzEsMzEgQEAKKy8vIGFjY2VzcyBzdGF0aWMgdmlhIGluc3RhbmNlCitjbGFzcyBBQ2xhc3MKK3sKKyAgICBwdWJsaWMgaW50IGdldCgpIHsKKyAgICAgICAgaW50IGkgPSA8d2FybmluZyBkZXNjcj0iU3RhdGljIG1lbWJlciAnQUNsYXNzLmZmZicgYWNjZXNzZWQgdmlhIGluc3RhbmNlIHJlZmVyZW5jZSI+dGhpcy5mZmY8L3dhcm5pbmc+OworICAgICAgICByZXR1cm4gaTsKKyAgICB9CisgICAgcHVibGljIHN0YXRpYyBBQ2xhc3MgZ2V0QSgpIHsKKyAgICAgICAgcmV0dXJuIG51bGw7CisgICAgfQorCisgICAgT2JqZWN0IGdnKCkKKyAgICB7CisgICAgICByZXR1cm4gPHdhcm5pbmcgZGVzY3I9IlN0YXRpYyBtZW1iZXIgJ0FDbGFzcy5nZXRBKCknIGFjY2Vzc2VkIHZpYSBpbnN0YW5jZSByZWZlcmVuY2UiPnRoaXMuZ2V0QTwvd2FybmluZz4oKTsKKyAgICB9CisgICAgc3RhdGljIGludCBmZmY7CisKKyAgICBwcm90ZWN0ZWQgc3RhdGljIGNsYXNzIFIgeworICAgICAgICBzdGF0aWMgaW50IHJyID0gMDsKKyAgICB9CisgICAgcHVibGljIFIgZ2V0UigpIHsKKyAgICAgICAgcmV0dXJuIG51bGw7CisgICAgfQorfQorCitjbGFzcyBhbm90aGVyY2xhc3MgeworICAgIGludCBmKEFDbGFzcyBkKXsKKyAgICAgICAgaW50IGkgPSA8d2FybmluZyBkZXNjcj0iU3RhdGljIG1lbWJlciAnQUNsYXNzLlIucnInIGFjY2Vzc2VkIHZpYSBpbnN0YW5jZSByZWZlcmVuY2UiPmQuZ2V0UigpLnJyPC93YXJuaW5nPjsKKyAgICAgICAgcmV0dXJuIGk7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmcvU3RyaW5nTGl0ZXJhbHMuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nL1N0cmluZ0xpdGVyYWxzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTBmN2U5ZAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nL1N0cmluZ0xpdGVyYWxzLmphdmEKQEAgLTAsMCArMSw1MiBAQAorLyoKKyAqIENvcHlyaWdodCAyMDAwLTIwMTIgSmV0QnJhaW5zIHMuci5vLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworLy8gc3RyaW5nIGxpdGVyYWwKK3B1YmxpYyBjbGFzcyBhIHsKKyAgY2hhciBjMSA9ICA8ZXJyb3IgZGVzY3I9IkVtcHR5IGNoYXJhY3RlciBsaXRlcmFsIj4nJzwvZXJyb3I+OworICBjaGFyIGMyID0gIDxlcnJvciBkZXNjcj0iSWxsZWdhbCBlc2NhcGUgY2hhcmFjdGVyIGluIGNoYXJhY3RlciBsaXRlcmFsIj4nXGRkJzwvZXJyb3I+OworICBjaGFyIGM0ID0gIDxlcnJvciBkZXNjcj0iVG9vIG1hbnkgY2hhcmFjdGVycyBpbiBjaGFyYWN0ZXIgbGl0ZXJhbCI+J3h4eCc8L2Vycm9yPjsKKyAgY2hhciBjNSA9ICA8ZXJyb3IgZGVzY3I9IlRvbyBtYW55IGNoYXJhY3RlcnMgaW4gY2hhcmFjdGVyIGxpdGVyYWwiPidcNzgnPC9lcnJvcj47CisgIGNoYXIgYzYgPSAgPGVycm9yIGRlc2NyPSJUb28gbWFueSBjaGFyYWN0ZXJzIGluIGNoYXJhY3RlciBsaXRlcmFsIj4nXDc4JzwvZXJyb3I+OworCisgIGNoYXJbXSBjQSA9IG5ldyBjaGFyW10geyAnZCcsJ1xiJywnXGYnLCdcbicsJ1xyJworICAgICAgICAgICAgICwnXHQnLCciJywnXFwnLCcgJywnXHUxMjM0JywnXHVGRkZGJworICAgICAgICAgICAgICwgJ1w3JywgJ1w3NycsICdcMzQ1JywgJ1wwJywgPGVycm9yIGRlc2NyPSJVbmNsb3NlZCBjaGFyYWN0ZXIgbGl0ZXJhbCI+J3g8L2Vycm9yPgorICB9OworCisgIFN0cmluZyBzMSA9ICA8ZXJyb3IgZGVzY3I9IklsbGVnYWwgZXNjYXBlIGNoYXJhY3RlciBpbiBzdHJpbmcgbGl0ZXJhbCI+Ilx4ZCI8L2Vycm9yPjsKKyAgU3RyaW5nIHMxMT0gIDxlcnJvciBkZXNjcj0iSWxsZWdhbCBlc2NhcGUgY2hhcmFjdGVyIGluIHN0cmluZyBsaXRlcmFsIj4iXHVkWCI8L2Vycm9yPjsKKyAgU3RyaW5nIHMxMj0gIDxlcnJvciBkZXNjcj0iSWxsZWdhbCBlc2NhcGUgY2hhcmFjdGVyIGluIHN0cmluZyBsaXRlcmFsIj4iYzpcVEVNUFx0ZXN0LmphciI8L2Vycm9yPjsKKyAgU3RyaW5nIHMzID0gIiI7CisgIFN0cmluZyBzNCA9ICJcdTAwMDAiOworCisgIFN0cmluZyBzNSA9IDxlcnJvciBkZXNjcj0iSWxsZWdhbCBlc2NhcGUgY2hhcmFjdGVyIGluIHN0cmluZyBsaXRlcmFsIj4iXHUwMDBkIjwvZXJyb3I+OworICBTdHJpbmcgczYgPSA8ZXJyb3IgZGVzY3I9IklsbGVnYWwgZXNjYXBlIGNoYXJhY3RlciBpbiBzdHJpbmcgbGl0ZXJhbCI+Ilx1MDAwYSI8L2Vycm9yPjsKKyAgY2hhciBjNyA9IDxlcnJvciBkZXNjcj0iSWxsZWdhbCBlc2NhcGUgY2hhcmFjdGVyIGluIGNoYXJhY3RlciBsaXRlcmFsIj4nXHUwMDBkJzwvZXJyb3I+OworICBjaGFyIGM4ICA9IDxlcnJvciBkZXNjcj0iSWxsZWdhbCBlc2NhcGUgY2hhcmFjdGVyIGluIGNoYXJhY3RlciBsaXRlcmFsIj4nXHUwMDBhJzwvZXJyb3I+OworCisgIFN0cmluZyBwZXJ2ZXJ0cyA9ICJcdXV1dXV1dXV1dXV1MTIzNCI7CisgIGNoYXIgcGVydjIgPSAnXHV1MzI2NCc7CisKKyAgdm9pZCBmb28oU3RyaW5nIGEpIHsKKyAgICAgZm9vKDxlcnJvciBkZXNjcj0iSWxsZWdhbCBsaW5lIGVuZCBpbiBzdHJpbmcgbGl0ZXJhbCI+ImFhYTwvZXJyb3I+CisgICAgICk7CisgIH0KKworICBTdHJpbmdbXSBzID0geworICAgIDxlcnJvciBkZXNjcj0iSWxsZWdhbCBsaW5lIGVuZCBpbiBzdHJpbmcgbGl0ZXJhbCI+InVuY2xvc2VkPC9lcnJvcj4KKyAgfTsKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nL1N0cmluZ1N3aXRjaExhYmVscy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmcvU3RyaW5nU3dpdGNoTGFiZWxzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWI4Zjk5YgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nL1N0cmluZ1N3aXRjaExhYmVscy5qYXZhCkBAIC0wLDAgKzEsMjMgQEAKK3B1YmxpYyBjbGFzcyBUZXN0IHsKKyAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEJBWiA9ICJiYXoiOworCisgIHByaXZhdGUgdm9pZCBzdHJpbmdTd2l0Y2goKSB7CisgICAgICBmaW5hbCBTdHJpbmcgYmFyID0gImJhciI7CisgICAgICBTdHJpbmcga2V5ID0gImtleSI7CisgICAgICBzd2l0Y2ggKDxlcnJvcj5rZXk8L2Vycm9yPikgeworICAgICAgICAgIGNhc2UgIiI6IHsKKyAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJOb3RoaW5nIik7CisgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIH0KKyAgICAgICAgICBjYXNlICJmb28iOgorICAgICAgICAgIGNhc2UgYmFyOgorICAgICAgICAgIGNhc2UgQkFaOiB7CisgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiTWF0Y2hlZCBrZXkiKTsKKyAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgfQorICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgIGJyZWFrOworICAgICAgfQorICB9CisKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZy9TdXBwcmVzc2VkLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZy9TdXBwcmVzc2VkLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWVlNTMzZgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nL1N1cHByZXNzZWQuamF2YQpAQCAtMCwwICsxLDggQEAKK3B1YmxpYyBjbGFzcyBTdXBwcmVzc2VkIHsKKyAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFVOVVNFRF9ERUNMQVJBVElPTiA9ICJVbnVzZWREZWNsYXJhdGlvbiI7CisKKyAgQGphdmEubGFuZy5TdXBwcmVzc1dhcm5pbmdzKFVOVVNFRF9ERUNMQVJBVElPTikKKyAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworICAgIGludCBpID0gMDsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nL1N3aXRjaFN0YXRlbWVudC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmcvU3dpdGNoU3RhdGVtZW50LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTc2OGFhYwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nL1N3aXRjaFN0YXRlbWVudC5qYXZhCkBAIC0wLDAgKzEsMzUgQEAKKy8vIHN3aXRjaCBzdGF0ZW1lbnQKKworY2xhc3MgYSB7CisgICAgeworICAgICAgICA8ZXJyb3IgZGVzY3I9IkNhc2Ugc3RhdGVtZW50IG91dHNpZGUgc3dpdGNoIj5jYXNlIDA6PC9lcnJvcj4KKyAgICB9CisgICAgeworICAgICAgICA8ZXJyb3IgZGVzY3I9IkNhc2Ugc3RhdGVtZW50IG91dHNpZGUgc3dpdGNoIj5kZWZhdWx0OjwvZXJyb3I+CisgICAgfQorCisgICAgeworICAgICAgICBzd2l0Y2ggKDApIHsKKyAgICAgICAgIGNhc2UgMDxlcnJvciBkZXNjcj0iJzonIGV4cGVjdGVkIj47PC9lcnJvcj4KKyAgICAgICAgfQorCisgICAgICAgIHN3aXRjaCAoMCkgeworICAgICAgICAgZGVmYXVsdDxlcnJvciBkZXNjcj0iJzonIGV4cGVjdGVkIj47PC9lcnJvcj4KKyAgICAgICAgfQorCisgICAgICAgIHN3aXRjaCAoMCkgeworICAgICAgICAvLy8vLy8vLy8vLy8vLy8vCisgICAgICAgIC8qKiAKKyAgICAgICAgKi8KKyAgICAgICAgPGVycm9yIGRlc2NyPSJTdGF0ZW1lbnQgbXVzdCBiZSBwcmVwZW5kZWQgd2l0aCBjYXNlIGxhYmVsIj5TeXN0ZW0ub3V0LnByaW50bG4oKTs8L2Vycm9yPgorICAgICAgICAKKworICAgICAgICBkZWZhdWx0PGVycm9yIGRlc2NyPSInOicgZXhwZWN0ZWQiPjs8L2Vycm9yPgorICAgICAgICB9CisKKyAgICAgICAgc3dpdGNoICgwKSB7CisgICAgICAgICAgPGVycm9yIGRlc2NyPSJTdGF0ZW1lbnQgbXVzdCBiZSBwcmVwZW5kZWQgd2l0aCBjYXNlIGxhYmVsIj5icmVhazs8L2Vycm9yPgorICAgICAgICB9CisgICAgfQorCit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmcvU3luY2hyb25pemVkRXhwcmVzc2lvbi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmcvU3luY2hyb25pemVkRXhwcmVzc2lvbi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZmN2VkZmIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZy9TeW5jaHJvbml6ZWRFeHByZXNzaW9uLmphdmEKQEAgLTAsMCArMSwyMCBAQAorLy8gc3luYyBzdGF0ZW1lbnQKKworY2xhc3MgYSB7CisgIHZvaWQgZigpIHsKKworICAgICAgICBzeW5jaHJvbml6ZWQgKDxlcnJvciBkZXNjcj0iSW5jb21wYXRpYmxlIHR5cGVzLiBGb3VuZDogJ251bGwnLCByZXF1aXJlZDogJ2phdmEubGFuZy5PYmplY3QnIj5udWxsPC9lcnJvcj4pIHsKKyAgICAgICAgfQorICAgICAgICBzeW5jaHJvbml6ZWQgKDxlcnJvciBkZXNjcj0iSW5jb21wYXRpYmxlIHR5cGVzLiBGb3VuZDogJ2ludCcsIHJlcXVpcmVkOiAnamF2YS5sYW5nLk9iamVjdCciPjA8L2Vycm9yPikgeworICAgICAgICB9CisgICAgICAgIHN5bmNocm9uaXplZCAoPGVycm9yIGRlc2NyPSJJbmNvbXBhdGlibGUgdHlwZXMuIEZvdW5kOiAnY2hhcicsIHJlcXVpcmVkOiAnamF2YS5sYW5nLk9iamVjdCciPidhJzwvZXJyb3I+KSB7CisgICAgICAgIH0KKyAgICAgICAgc3luY2hyb25pemVkICg8ZXJyb3IgZGVzY3I9IkluY29tcGF0aWJsZSB0eXBlcy4gRm91bmQ6ICdib29sZWFuJywgcmVxdWlyZWQ6ICdqYXZhLmxhbmcuT2JqZWN0JyI+dHJ1ZTwvZXJyb3I+KSB7CisgICAgICAgIH0KKyAgICAgICAgc3luY2hyb25pemVkICg8ZXJyb3IgZGVzY3I9IkluY29tcGF0aWJsZSB0eXBlcy4gRm91bmQ6ICd2b2lkJywgcmVxdWlyZWQ6ICdqYXZhLmxhbmcuT2JqZWN0JyI+U3lzdGVtLm91dC5wcmludGxuKCk8L2Vycm9yPiApIHsKKyAgICAgICAgfQorCisKKyAgfQorCit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmcvVGVybmFyeS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmcvVGVybmFyeS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMzNGI1ZTkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZy9UZXJuYXJ5LmphdmEKQEAgLTAsMCArMSwzMSBAQAorLy8gdGVybmFyeSBvcGVyYXRvcgorCitjbGFzcyBhIHsKKyB2b2lkIGYxKCkgeworICAgIGJ5dGUgYiA9IDQ7CisgICAgaW50IGkgPSAyOworICAgIGJvb2xlYW4gYm8gPSBmYWxzZTsKKyAgICBsb25nIGwgPSA1OworICAgIGZsb2F0IGYgPSA1OworICAgIGRvdWJsZSBkID0gNDU7CisKKyAgICBTdHJpbmcgczsKKyAgICA8ZXJyb3IgZGVzY3I9IkluY29tcGF0aWJsZSB0eXBlcy4gRm91bmQ6ICdpbnQnLCByZXF1aXJlZDogJ2phdmEubGFuZy5TdHJpbmcnIj5zID0gYm8gPyAxIDogMjwvZXJyb3I+OworICAgIDxlcnJvciBkZXNjcj0iSW5jb21wYXRpYmxlIHR5cGVzLiBGb3VuZDogJ2xvbmcnLCByZXF1aXJlZDogJ2phdmEubGFuZy5TdHJpbmcnIj5zID0gYm8gPyAxTDogMjwvZXJyb3I+OworICAgIDxlcnJvciBkZXNjcj0iSW5jb21wYXRpYmxlIHR5cGVzLiBGb3VuZDogJ2J5dGUnLCByZXF1aXJlZDogJ2phdmEubGFuZy5TdHJpbmcnIj5zID0gYm8gPyBiIDogMjwvZXJyb3I+OworICAgIDxlcnJvciBkZXNjcj0iSW5jb21wYXRpYmxlIHR5cGVzLiBGb3VuZDogJ2ludCcsIHJlcXVpcmVkOiAnamF2YS5sYW5nLlN0cmluZyciPnMgPSBibyA/IGIgOiBiKzI8L2Vycm9yPjsKKyAgICA8ZXJyb3IgZGVzY3I9IkluY29tcGF0aWJsZSB0eXBlcy4gRm91bmQ6ICdsb25nJywgcmVxdWlyZWQ6ICdqYXZhLmxhbmcuU3RyaW5nJyI+cyA9IGJvID8gYisxTCA6IDI8L2Vycm9yPjsKKyAgICA8ZXJyb3IgZGVzY3I9IkluY29tcGF0aWJsZSB0eXBlcy4gRm91bmQ6ICdmbG9hdCcsIHJlcXVpcmVkOiAnamF2YS5sYW5nLlN0cmluZyciPnMgPSBibyA/IGYgOiBmKzI8L2Vycm9yPjsKKyAgICA8ZXJyb3IgZGVzY3I9IkluY29tcGF0aWJsZSB0eXBlcy4gRm91bmQ6ICdkb3VibGUnLCByZXF1aXJlZDogJ2phdmEubGFuZy5TdHJpbmcnIj5zID0gYm8gPyBkIDogMjwvZXJyb3I+OworCisgfQorCisgdm9pZCBjZjEoKSB7CisKKyAgICAgICAgYnl0ZVtdIGJ5dGVBcnIgPSBuZXcgYnl0ZVsxMF07CisgICAgICAgIGJvb2xlYW4gYm9vbCA9IHRydWU7CisgICAgICAgIGJ5dGUgaSA9IGJvb2wgPyBieXRlQXJyWzBdIDogMDsKKyB9CisKKworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nL1RoaXNCZWZvcmVTdXBlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmcvVGhpc0JlZm9yZVN1cGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWRiMWZkYQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nL1RoaXNCZWZvcmVTdXBlci5qYXZhCkBAIC0wLDAgKzEsMjYgQEAKK2NsYXNzIEEKK3sKKyAgICBjbGFzcyBCCisgICAgeworICAgIH0KK30KKworCitjbGFzcyBDIGV4dGVuZHMgQQoreworICAgIGNsYXNzIEQgZXh0ZW5kcyBCCisgICAgeworICAgICAgICBEKCl7CisgICAgICAgICAgICBDLnRoaXMuc3VwZXIoKTsKKyAgICAgICAgfQorICAgIH0KK30KKworY2xhc3MgQzEgeworICAgIGNsYXNzIEIxIHt9CisgICAgY2xhc3MgRDEgZXh0ZW5kcyBDMS5CMSB7CisgICAgICAgIEQxKCkgeworICAgICAgICAgICAgQzEudGhpcy5zdXBlcigpOworICAgICAgICB9CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nL1RoaXNJbkludGVyZmFjZS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmcvVGhpc0luSW50ZXJmYWNlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGYxYjliMwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nL1RoaXNJbkludGVyZmFjZS5qYXZhCkBAIC0wLDAgKzEsMjQgQEAKK2NsYXNzIEMgaW1wbGVtZW50cyBBIHsKKyAgICBDKEEgYSkge30KK30KKworaW50ZXJmYWNlIEEgeworICAgIEEgYSA9IG5ldyBDKDxlcnJvciBkZXNjcj0iQ2Fubm90IGZpbmQgc3ltYm9sIHZhcmlhYmxlIHRoaXMiPnRoaXM8L2Vycm9yPik7CisgICAgQSBhMSA9IG5ldyBDKDxlcnJvciBkZXNjcj0iQ2Fubm90IGZpbmQgc3ltYm9sIHZhcmlhYmxlIHRoaXMiPnRoaXM8L2Vycm9yPil7fTsKKworICAgIGNsYXNzIEIgIHsKKyAgICAgICAgQSBmb28oKSB7CisgICAgICAgICAgICByZXR1cm4gPGVycm9yIGRlc2NyPSJDYW5ub3QgZmluZCBzeW1ib2wgdmFyaWFibGUgdGhpcyI+QS50aGlzPC9lcnJvcj47CisgICAgICAgIH0KKworICAgICAgICBCIGZvbzEoKSB7CisgICAgICAgICAgICByZXR1cm4gQi50aGlzOworICAgICAgICB9CisKKyAgICAgICAgY2xhc3MgRCB7CisgICAgICAgICAgICBCIGYoKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIEIudGhpczsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZy9VbmNsb3NlZEJsb2NrQ29tbWVudC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmcvVW5jbG9zZWRCbG9ja0NvbW1lbnQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MDYwNzE4Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmcvVW5jbG9zZWRCbG9ja0NvbW1lbnQuamF2YQpAQCAtMCwwICsxLDggQEAKKy8vIHVuY2xvc2VkIGNvbW1lbnQKKy8qCisKK2ltcG9ydCBqYXZhLmlvLio7CitpbXBvcnQgamF2YS5uZXQuKjsKKworY2xhc3MgYSB7Cis8ZXJyb3IgZGVzY3I9IlVuY2xvc2VkIGNvbW1lbnQiPn08L2Vycm9yPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nL1VuY2xvc2VkQ29tbWVudC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmcvVW5jbG9zZWRDb21tZW50LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjQ4NzBlZQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nL1VuY2xvc2VkQ29tbWVudC5qYXZhCkBAIC0wLDAgKzEsOSBAQAorLy8gdW5jbG9zZWQgY29tbWVudAorCisKK2ltcG9ydCBqYXZhLmlvLio7CitpbXBvcnQgamF2YS5uZXQuKjsKKworLyoqCitjbGFzcyBhIHsKKyAgaW50IGk8ZXJyb3IgZGVzY3I9IlVuY2xvc2VkIGNvbW1lbnQiPjs8L2Vycm9yPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nL1VuY2xvc2VkRGVjbC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmcvVW5jbG9zZWREZWNsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTJkNDU3YmIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZy9VbmNsb3NlZERlY2wuamF2YQpAQCAtMCwwICsxLDMgQEAKKy8vIHVuY2xvc2VkIGRlY2wKKworY2xhc3MgYSB7PEVPTEVycm9yLz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZy9VbmRlZmluZWRMYWJlbC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmcvVW5kZWZpbmVkTGFiZWwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNDYzMGQyNAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nL1VuZGVmaW5lZExhYmVsLmphdmEKQEAgLTAsMCArMSw0MiBAQAorLy8vIGxhYmVscworaW1wb3J0IGphdmEuaW8uKjsKK2ltcG9ydCBqYXZhLm5ldC4qOworCitwdWJsaWMgY2xhc3MgYSAgeworCisgIHZvaWQgZihmaW5hbCBib29sZWFuIGIpIHsKKyAgICB3aGlsZSAoYikgYnJlYWsgPGVycm9yIGRlc2NyPSJVbmRlZmluZWQgbGFiZWw6ICdsYWIxJyI+bGFiMTwvZXJyb3I+OworICAgIHdoaWxlIChiKSBjb250aW51ZSA8ZXJyb3IgZGVzY3I9IlVuZGVmaW5lZCBsYWJlbDogJ2xhYjEnIj5sYWIxPC9lcnJvcj47CisKKyAgICBmb3IgKDs7KSB7CisgICAgICBsYWIyOiA7CisgICAgICBicmVhayA8ZXJyb3IgZGVzY3I9IlVuZGVmaW5lZCBsYWJlbDogJ2xhYjInIj5sYWIyPC9lcnJvcj47CisgICAgICBjb250aW51ZSA8ZXJyb3IgZGVzY3I9IlVuZGVmaW5lZCBsYWJlbDogJ2xhYjInIj5sYWIyPC9lcnJvcj47CisgICAgfQorCisgICAgbGFiMzoKKyAgICBuZXcgUnVubmFibGUoKSB7CisgICAgICBwdWJsaWMgdm9pZCBydW4oKSB7CisgICAgICAgIHdoaWxlICh0cnVlKSB7CisgICAgICAgICAgaWYgKGIpIGJyZWFrIDxlcnJvciBkZXNjcj0iVW5kZWZpbmVkIGxhYmVsOiAnbGFiMyciPmxhYjM8L2Vycm9yPjsKKyAgICAgICAgICBpZiAoYikgY29udGludWUgPGVycm9yIGRlc2NyPSJVbmRlZmluZWQgbGFiZWw6ICdsYWIzJyI+bGFiMzwvZXJyb3I+OworICAgICAgICB9CisgICAgICB9CisgICAgfTsKKyAgfQorCisgIHZvaWQgY2YoKSB7CisgICAgIGJvb2xlYW4gYiA9IGZhbHNlOworICAgICB3aGlsZSAoYikgeworICAgICAgIGxhYjA6IGJyZWFrIGxhYjA7CisgICAgIH0KKworICAgICBsYWIxOiB0cnkgeworICAgICAgIGxhYjI6IGZvciAoO2I7KSBpZiAoMT09MykgY29udGludWUgbGFiMjsKKyAgICAgICBicmVhayBsYWIxOworICAgICB9CisgICAgIGZpbmFsbHkgeworICAgICAgIGJyZWFrIGxhYjE7CisgICAgIH0KKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nL1VuaGFuZGxlZEV4Y2VwdGlvbnNJblN1cGVyY2xhc3MuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nL1VuaGFuZGxlZEV4Y2VwdGlvbnNJblN1cGVyY2xhc3MuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MjFiZTQ2Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmcvVW5oYW5kbGVkRXhjZXB0aW9uc0luU3VwZXJjbGFzcy5qYXZhCkBAIC0wLDAgKzEsMTc4IEBACisvLyB1bmhhbmRsZWQgZXhjZXB0aW9ucyBmcm9tIHN1cGVyY2xhc2VzL2V0YworaW1wb3J0IGphdmEuaW8uKjsKK2ltcG9ydCBqYXZhLm5ldC4qOworcHVibGljIGNsYXNzIGEgIHsKKyBhKGludCBpKSB7fQorfQorCisvLyBzdXBlciBjdHIKKworPGVycm9yIGRlc2NyPSJUaGVyZSBpcyBubyBkZWZhdWx0IGNvbnN0cnVjdG9yIGF2YWlsYWJsZSBpbiAnYSciPmNsYXNzIGIgZXh0ZW5kcyBhPC9lcnJvcj4geworfQorCitjbGFzcyBjIGV4dGVuZHMgYSB7CisgIDxlcnJvciBkZXNjcj0iVGhlcmUgaXMgbm8gZGVmYXVsdCBjb25zdHJ1Y3RvciBhdmFpbGFibGUgaW4gJ2EnIj5jKCk8L2Vycm9yPiB7CisgIH0KKworICBjKFN0cmluZyBzKSB7CisgICAgdGhpcygxKTsKKyAgfQorICBjKGludCBpKSB7CisgICAgc3VwZXIoaSk7CisgIH0KK30KKworY2xhc3MgQSB7CisgICAgcHJpdmF0ZSBBKCkge30KKyAgICBjbGFzcyBCIGV4dGVuZHMgQSB7fQorfQorCitjbGFzcyBBMSB7CisgICAgQTEoKSB0aHJvd3MgRXhjZXB0aW9uIHt9Cit9CisKKzxlcnJvciBkZXNjcj0iVW5oYW5kbGVkIGV4Y2VwdGlvbjogamF2YS5sYW5nLkV4Y2VwdGlvbiI+Y2xhc3MgQjEgZXh0ZW5kcyBBMTwvZXJyb3I+Cit7fQorCitjbGFzcyBBMiBleHRlbmRzIEExIHsKKyAgPGVycm9yIGRlc2NyPSJVbmhhbmRsZWQgZXhjZXB0aW9uOiBqYXZhLmxhbmcuRXhjZXB0aW9uIj5BMigpPC9lcnJvcj4ge30KK30KKworCisvLyBleGNlcHRpb24gdGhyb3duIGZyb20gd2l0aGluIGFub255bW91cworY2xhc3MgQTMgeworICAgIHZvaWQgZigpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICBuZXcgQTMoKSB7CisgICAgICAgICAgICBpbnQgZygpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaW50IGs9ZygpOworICAgICAgICB9OworICAgIH0KK30KKworCisvLyBpbiBpbml0aWFsaXplcgorY2xhc3MgVGVzdHsKKyAgZmluYWwgU3RyaW5nIHMgPSA8ZXJyb3IgZGVzY3I9IlVuaGFuZGxlZCBleGNlcHRpb246IGphdmEubGFuZy5FeGNlcHRpb24iPm1ha2VTdHJpbmcoKTs8L2Vycm9yPgorICBTdHJpbmcgbWFrZVN0cmluZygpIHRocm93cyBFeGNlcHRpb24ge3Rocm93IG5ldyBFeGNlcHRpb24oKTt9Cit9CisKKworY2xhc3MgQzEgeworICBwdWJsaWMgQzEoKSB0aHJvd3MgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIHt9Cit9CitjbGFzcyBDMiBleHRlbmRzIEMxIHsKKyAgcHVibGljIEMyKCkgeworICB9Cit9CisKKy8vIHByaXZhdGUgYnV0IGFjY2Vzc2libGUgYmFzZSBjdHIKK2NsYXNzIEQxIHsKKyAgICBwcml2YXRlIEQxKCkge30KKyAgICBzdGF0aWMgY2xhc3MgRDIgZXh0ZW5kcyBEMSB7CisgICAgICAgIEQyKCkgeworICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIhIik7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisgICAgICAgIG5ldyBEMigpOworICAgICAgICBuZXcgRDEoKTsKKyAgICB9Cit9CisKKworLy8vLy8vLy8vLy8vLy8vCitjbGFzcyBNeUNsYXNzCit7CisgICAgcHVibGljIE15Q2xhc3MoKSB0aHJvd3MgRXhjZXB0aW9uCisgICAgeworICAgICAgICAvL2RlZmF1bHQgY3RvciB0aHJvd3MgZXhjCisgICAgfQorICAgIAorICAgIHB1YmxpYyBNeUNsYXNzKE9iamVjdCBhbk9iamVjdCkKKyAgICB7CisgICAgICAgIC8vb3RoZXIgY3RvciBkb2VzIG5vdAorICAgIH0KK30KKworY2xhc3MgTXlDbGFzczIgZXh0ZW5kcyBNeUNsYXNzIAoreworICAgIC8vSEVSRSBnb29kIGNvZGUgaXMgbWFya2VkIHJlZAorICAgIHB1YmxpYyBNeUNsYXNzMiAoT2JqZWN0IGFuT2JqZWN0KQorICAgIHsKKyAgICAgICAgc3VwZXIoYW5PYmplY3QpOworICAgIH0KK30KKworY2xhc3MgVGhyb3dDQyAgeworICAgIHB1YmxpYyB2b2lkIHRlc3QzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICBUaHJvd2FibGUgZXhjZXB0aW9uID0gbnVsbDsKKyAgICAgIDxlcnJvciBkZXNjcj0iVW5oYW5kbGVkIGV4Y2VwdGlvbjogamF2YS5sYW5nLlRocm93YWJsZSI+dGhyb3cgZXhjZXB0aW9uOzwvZXJyb3I+CisgICAgfQorfQorCisKKy8vSW5hY2Nlc3NpYmxlIGZpZWxkCitjbGFzcyBKIHsKKyAgICBpbnQgdCA9IG5ldyBJMSgpLmk7IC8vYWNjZXNzIG9iamVjdCBjbGFzcyBpcyBPSworICAgIGludCB2ID0gbmV3IEkyKCkuPGVycm9yIGRlc2NyPSInaScgaGFzIHByaXZhdGUgYWNjZXNzIGluICdKLkkxJyI+aTwvZXJyb3I+OyAvL2JhZCBhY2Nlc3Mgb2JqZWN0IGNsYXNzCisKKyAgICBjbGFzcyBJMSB7CisgICAgICAgIGNsYXNzIEkzIHsKKyAgICAgICAgICAgIGludCB0ID0gaTsgLy92aXNpYmlsaXR5IE9LCisgICAgICAgIH0KKworICAgICAgICBwcml2YXRlIGludCBpOworICAgIH0KKworICAgIGNsYXNzIEkyIGV4dGVuZHMgSTEgeworICAgICAgICBpbnQgaiA9IDxlcnJvciBkZXNjcj0iJ2knIGhhcyBwcml2YXRlIGFjY2VzcyBpbiAnSi5JMSciPmk8L2Vycm9yPjsgLy9XZSBkb24ndCBzZWUgaSBmcm9tIGJhc2VyIGNsYXNzCisgICAgfQorCisgICAgc3RhdGljIEkxIGkxOworICAgIGNsYXNzIEk0IHsKKyAgICAgICAgaW50IHUgPSBpMS5pOyAvL09LLCBpIGlzIHZpc2libGUgc2luY2UgdGhlIHRvcGxldmVsIGNsYXNzIGlzIHRoZSBzYW1lCisgICAgfQorfQorY2xhc3MgVGVzdDMgeworCisgICAgcHJpdmF0ZSBjbGFzcyBDaGlsZCBleHRlbmRzIFBhcmVudCB7CisgICAgfQorCisgICAgcHJpdmF0ZSBjbGFzcyBQYXJlbnQgZXh0ZW5kcyBTdXBlclBhcmVudCB7CisgICAgfQorCisgICAgcHJpdmF0ZSBjbGFzcyBTdXBlclBhcmVudCB7CisgICAgICAgIHByaXZhdGUgaW50IGZpZWxkID0gMTsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBmb28oKSB7CisgICAgICAgIENoaWxkIGNoaWxkID0gbmV3IENoaWxkKCk7CisgICAgICAgIGludCBpID0gY2hpbGQuPGVycm9yIGRlc2NyPSInZmllbGQnIGhhcyBwcml2YXRlIGFjY2VzcyBpbiAnVGVzdDMuU3VwZXJQYXJlbnQnIj5maWVsZDwvZXJyb3I+OworICAgIH0KK30KKworLy9JREVBREVWLTQ0NTU6IHRoaXMgY29kZSBpcyBPSworY2xhc3MgWFlaIHsKKyAgICBwcml2YXRlIGNsYXNzIElubmVyIGV4dGVuZHMgWFlaIHsKKyAgICAgICAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgczsKKyAgICAgICAgSW5uZXIoU3RyaW5nIF9zKSB7CisgICAgICAgICAgICB0aGlzLnMgPSBfczsKKyAgICAgICAgfQorCisKKyAgICAgICAgcHVibGljIGJvb2xlYW4gZXF1YWxzKE9iamVjdCBvKSB7CisgICAgICAgICAgICBpZiAodGhpcyA9PSBvKSByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIGlmIChvID09IG51bGwgfHwgZ2V0Q2xhc3MoKSAhPSBvLmdldENsYXNzKCkpIHJldHVybiBmYWxzZTsKKworICAgICAgICAgICAgZmluYWwgSW5uZXIgeSA9IChJbm5lcikgbzsKKworICAgICAgICAgICAgaWYgKHMgIT0gbnVsbCA/ICFzLmVxdWFscyh5LnMpIDogeS5zICE9IG51bGwpIHJldHVybiBmYWxzZTsKKworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICB9Cit9CisvL2VuZCBvZiBJREVBREVWLTQ0NTUKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZy9VbmhhbmRsZWRNZXNzaW5nV2l0aEZpbmFsbHkuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nL1VuaGFuZGxlZE1lc3NpbmdXaXRoRmluYWxseS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRlNjUwMjc3Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmcvVW5oYW5kbGVkTWVzc2luZ1dpdGhGaW5hbGx5LmphdmEKQEAgLTAsMCArMSw4NCBAQAorLy8gdW5oYW5kbGVkIGV4Y2VwdGlvbiB3aGVuIG1lc3Npbmcgd2l0aCBmaW5hbGx5IGJsb2NrCisKK2ltcG9ydCBqYXZhLmlvLio7CitjbGFzcyBhICB7CisgIHZvaWQgZjEoaW50IGkpIHsKKyAgICB0cnkgeworICAgICAgbmV3IEZpbGVSZWFkZXIoIiIpOworICAgIH0KKyAgICBmaW5hbGx5IHsKKyAgICAgIDxlcnJvciBkZXNjcj0iVW5oYW5kbGVkIGV4Y2VwdGlvbjogamF2YS5sYW5nLkNsYXNzTm90Rm91bmRFeGNlcHRpb24iPnRocm93IG5ldyBDbGFzc05vdEZvdW5kRXhjZXB0aW9uKCk7PC9lcnJvcj4KKyAgICB9CisgIH0KKworICB2b2lkIGYyKGludCBpKSB7CisgICAgdHJ5IHsKKyAgICAgIDxlcnJvciBkZXNjcj0iVW5oYW5kbGVkIGV4Y2VwdGlvbjogamF2YS5pby5GaWxlTm90Rm91bmRFeGNlcHRpb24iPm5ldyBGaWxlUmVhZGVyKCIiKTwvZXJyb3I+OworICAgIH0KKyAgICBmaW5hbGx5IHsKKyAgICAgIGlmIChpPT00KSA8ZXJyb3IgZGVzY3I9IlVuaGFuZGxlZCBleGNlcHRpb246IGphdmEubGFuZy5DbGFzc05vdEZvdW5kRXhjZXB0aW9uIj50aHJvdyBuZXcgQ2xhc3NOb3RGb3VuZEV4Y2VwdGlvbigpOzwvZXJyb3I+CisgICAgfQorICB9CisKKyAgdm9pZCBmMyhpbnQgaSkgeworICAgIHRyeSB7CisgICAgICA8ZXJyb3IgZGVzY3I9IlVuaGFuZGxlZCBleGNlcHRpb246IGphdmEuaW8uRmlsZU5vdEZvdW5kRXhjZXB0aW9uIj5uZXcgRmlsZVJlYWRlcigiIik8L2Vycm9yPjsKKyAgICB9CisgICAgZmluYWxseSB7CisgICAgICBpZiAoaT09MSkgcmV0dXJuOworICAgIH0KKyAgfQorCisgIHZvaWQgZjQoaW50IGkpIHsKKyAgICB0cnkgeworICAgICAgPGVycm9yIGRlc2NyPSJVbmhhbmRsZWQgZXhjZXB0aW9uOiBqYXZhLmlvLkZpbGVOb3RGb3VuZEV4Y2VwdGlvbiI+bmV3IEZpbGVSZWFkZXIoIiIpPC9lcnJvcj47CisgICAgfQorICAgIGZpbmFsbHkgeworICAgICAgaWYgKGk9PTEpIDxlcnJvciBkZXNjcj0iVW5oYW5kbGVkIGV4Y2VwdGlvbjogamF2YS5pby5GaWxlTm90Rm91bmRFeGNlcHRpb24iPnRocm93IG5ldyBGaWxlTm90Rm91bmRFeGNlcHRpb24oKTs8L2Vycm9yPgorICAgIH0KKyAgfQorCisgIHZvaWQgY2YxKGludCBpKSB7CisgICAgdHJ5IHsKKyAgICAgIG5ldyBGaWxlUmVhZGVyKCIiKTsKKyAgICB9CisgICAgY2F0Y2ggKEZpbGVOb3RGb3VuZEV4Y2VwdGlvbiBlKSB7CisgICAgfQorICAgIGZpbmFsbHkgeworICAgICAgaWYgKDE9PTEpIHJldHVybjsKKyAgICB9CisgIH0KKworICB2b2lkIGNmMihpbnQgaSkgeworICAgIHRyeSB7CisgICAgICBuZXcgRmlsZVJlYWRlcigiIik7CisgICAgfQorICAgIGZpbmFsbHkgeworICAgICAgd2hpbGUgKDE9PTEpIHJldHVybjsKKyAgICB9CisgIH0KKyAgdm9pZCBmb28oT3V0cHV0U3RyZWFtIG91dCwgYnl0ZVtdIGRhdGEpIHRocm93cyBJT0V4Y2VwdGlvbiB7CisgICAgb3V0LndyaXRlKGRhdGEpOworICB9CisKKyAgICBwdWJsaWMgdm9pZCBzd2FsbG93KCkgeworICAgICAgICB0cnkgeworICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbigiSGVsbG8gV29ybGQhIEknbSBDaGVja2VkIEV4Y2VwdGlvbiBhbmQgbXVzdCBiZSBkZWNsYXJlZCEiKTsKKyAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIHRocm93IGU7CisgICAgICAgIH0gZmluYWxseSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9CisgICAgcHVibGljIHZvaWQgc3BpdG91dCgpIHsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oIkhlbGxvIFdvcmxkISBJJ20gQ2hlY2tlZCBFeGNlcHRpb24gYW5kIG11c3QgYmUgZGVjbGFyZWQhIik7CisgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICAgPGVycm9yIGRlc2NyPSJVbmhhbmRsZWQgZXhjZXB0aW9uOiBqYXZhLmxhbmcuRXhjZXB0aW9uIj50aHJvdyBlOzwvZXJyb3I+CisgICAgICAgIH0gZmluYWxseSB7CisgICAgICAgICAgICAvL3JldHVybjsKKyAgICAgICAgfQorICAgIH0KKworfQorCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZy9VbnJlYWNoYWJsZS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmcvVW5yZWFjaGFibGUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YjQxOWIzCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmcvVW5yZWFjaGFibGUuamF2YQpAQCAtMCwwICsxLDM1OSBAQAorLy8gdW5yZWFjaGFibGVzCitpbXBvcnQgamF2YS5pby4qOworaW1wb3J0IGphdmEubmV0Lio7CitwdWJsaWMgY2xhc3MgYSAgeworaW50ZXJmYWNlIGlpIHt9CisKKyB7IC8vIGluaXRpYWxpemVyCisgICB0cnkgeworICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCk7CisgICAgIDxlcnJvciBkZXNjcj0iVW5yZWFjaGFibGUgc3RhdGVtZW50Ij5pbnQgaSA9IDU7PC9lcnJvcj4KKyAgIH0KKyAgIGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgfQorIH0KKworCisgaW50IGYxKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICByZXR1cm4gMjsKKyAgIDxlcnJvciBkZXNjcj0iVW5yZWFjaGFibGUgc3RhdGVtZW50Ij5yZXR1cm4gNTs8L2Vycm9yPgorIH0KKyBpbnQgZjIoaW50IGkpIHRocm93cyBFeGNlcHRpb24geworICAgaWYgKGk9PTIpIHJldHVybiAyOworICAgdGhyb3cgbmV3IEV4Y2VwdGlvbigpOworICAgPGVycm9yIGRlc2NyPSJVbnJlYWNoYWJsZSBzdGF0ZW1lbnQiPnJldHVybiA1OzwvZXJyb3I+CisgfQorIGludCBmMyhpbnQgaSkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICBmb3IgKDs7KSByZXR1cm4gMjsKKyAgIDxlcnJvciBkZXNjcj0iVW5yZWFjaGFibGUgc3RhdGVtZW50Ij5yZXR1cm4gNTs8L2Vycm9yPgorIH0KKyBpbnQgZjQoaW50IGkpIHRocm93cyBFeGNlcHRpb24geworICAgdHJ5IHsKKyAgICAgaWYgKGk9PTMpIHRocm93IG5ldyBFeGNlcHRpb24oKTsKKyAgICAgcmV0dXJuIDQ7CisgICB9IGZpbmFsbHkgeworICAgICBpZiAoaT09NikgcmV0dXJuIDk7CisgICB9CisgICA8ZXJyb3IgZGVzY3I9IlVucmVhY2hhYmxlIHN0YXRlbWVudCI+cmV0dXJuIDU7PC9lcnJvcj4KKyB9CisKKyB2b2lkIGY1KCkKKyAgICB7CisgICAgICAgIHRyeSB7CisgICAgICAgIH0gY2F0Y2ggKEVycm9yIGUpIHsKKyAgICAgICAgICAgIHRocm93IGU7CisgICAgICAgICAgICA8ZXJyb3IgZGVzY3I9IlVucmVhY2hhYmxlIHN0YXRlbWVudCI+OzwvZXJyb3I+CisgICAgICAgIH0KKyAgICB9CisKKyB2b2lkIGY2KCkgeworICAgIHRyeSB7CisgICAgfQorICAgIGZpbmFsbHkgeworICAgICAgcmV0dXJuOworICAgICAgPGVycm9yIGRlc2NyPSJVbnJlYWNoYWJsZSBzdGF0ZW1lbnQiPjs8L2Vycm9yPgorICAgIH0KKyB9CisKKyAgdm9pZCBmNyhSdW50aW1lRXhjZXB0aW9uIGUpIHsKKyAgICBmb3IgKDs7KSB7CisgICAgICBpZiAoZT09bnVsbCkgeworICAgICAgICByZXR1cm47CisgICAgICAgIDxlcnJvciBkZXNjcj0iVW5yZWFjaGFibGUgc3RhdGVtZW50Ij5icmVhazs8L2Vycm9yPgorICAgICAgfQorICAgIH0KKyAgfQorICB2b2lkIGY4KFJ1bnRpbWVFeGNlcHRpb24gZSxpbnQgaSxpbnQgaixpbnQgayxpbnQgbCkgeworICAgIGZvciAoOzspIHsKKyAgICAgIGlmIChlPT1udWxsKSB7CisgICAgICAgIHJldHVybjsKKyAgICAgICAgPGVycm9yIGRlc2NyPSJVbnJlYWNoYWJsZSBzdGF0ZW1lbnQiPmY4KGUsaSxqLGssbCk7PC9lcnJvcj4KKyAgICAgIH0KKyAgICB9CisgIH0KKyAgdm9pZCBmOShSdW50aW1lRXhjZXB0aW9uIGUsaW50IGksaW50IGosaW50IGssaW50IGwpIHsKKyAgICBmb3IgKDs7KSB7CisgICAgICBpZiAoZT09bnVsbCkgeworICAgICAgICByZXR1cm47CisgICAgICAgIDxlcnJvciBkZXNjcj0iVW5yZWFjaGFibGUgc3RhdGVtZW50Ij50aHJvdyBlOzwvZXJyb3I+CisgICAgICB9CisgICAgfQorICB9CisgIGNsYXNzIEFmMTAgeworICAgIGludCBmKCkgeworICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgPGVycm9yIGRlc2NyPSJVbnJlYWNoYWJsZSBzdGF0ZW1lbnQiPm5ldyBBZjEwKCk7PC9lcnJvcj4KKyAgICB9CisKKyAgfQorICBjbGFzcyBBZjExIHsKKyAgICBpbnQgZigpIHsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIDxlcnJvciBkZXNjcj0iVW5yZWFjaGFibGUgc3RhdGVtZW50Ij5pbnQgazs8L2Vycm9yPgorICAgIH0KKyAgICB2b2lkIHRlc3QoKSB7CisgICAgICAgIGludCBpOworICAgICAgICByZXR1cm47CisgICAgICAgIDxlcnJvciBkZXNjcj0iVW5yZWFjaGFibGUgc3RhdGVtZW50Ij5hc3NlcnQgaSA9PSBpOzwvZXJyb3I+CisgICAgfQorICB9CisKKworCisgaW50IGNmMShpbnQgaSkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICBpZiAoaT09MikgcmV0dXJuIDI7CisgICBmb3IgKGludCBrPTA7MT09MTtrKyspIGJyZWFrOworICAgdHJ5IHsKKyAgICBpID0gNTsKKyAgIH0gCisgICBjYXRjaCAoRXJyb3IgZSkgeworICAgICBpZiAoaT09NSkgcmV0dXJuIDI7CisgICB9CisgICBjYXRjaCAoUnVudGltZUV4Y2VwdGlvbiBlKSB7CisgICB9CisgICBjYXRjaCAoVGhyb3dhYmxlIGUpIHsKKyAgIH0KKworICAgcmV0dXJuIDU7CisgfQorCisgaW50IGNmMihpbnQgaSkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICBzd2l0Y2ggKGkpIHsKKyAgICAgY2FzZSAxOiByZXR1cm4gNDsKKyAgIH0KKyAgIHJldHVybiA1OworIH0KKyB2b2lkIGNmMygpIHsKKyAgIGlmIChmYWxzZSkgeworICAgICBpbnQgaSA9IDU7CisgICB9CisgICB3aGlsZSAodHJ1ZSkgeyBicmVhazsgfQorICAgaWYgKHRydWUpIHsKKyAgICAgaW50IGkgPSA0OworICAgfQorICAgZWxzZSB7CisgICAgIGludCBpID0gNjsKKyAgIH0KKyB9Cisgdm9pZCBjZjQoKSB0aHJvd3MgamF2YS5uZXQuU29ja2V0RXhjZXB0aW9uIHsKKyAgdHJ5IHsKKyAgICBiaW5kKCk7CisgIH0gY2F0Y2ggKGphdmEubmV0LlNvY2tldEV4Y2VwdGlvbiBzZSkgeworICAgIHRocm93IHNlOworICB9IGNhdGNoKGphdmEuaW8uSU9FeGNlcHRpb24gZSkgeworICAgIHRocm93IG5ldyBqYXZhLm5ldC5Tb2NrZXRFeGNlcHRpb24oZS5nZXRNZXNzYWdlKCkpOworICB9CisgfQorIHZvaWQgYmluZCgpIHRocm93cyBqYXZhLm5ldC5Tb2NrZXRFeGNlcHRpb24ge30KKworCisgdm9pZCBjZjUoKSB7CisgIHRyeSB7CisgIH0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKKyAgICAKKyAgfQorIH0KKworIHZvaWQgY2Y2KCkgeworICAgICAgICBpZiAodHJ1ZSB8fCB0cnVlKSB7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImhpIik7CisgICAgICAgIH0KKyB9CisKKworICAgIHN0YXRpYyBib29sZWFuIGcoKSB7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisgICAgICAgIGJvb2xlYW4gYj1mYWxzZSAmJiBnKCk7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiYiA9ICIrYik7CisgICAgfQorCisKKworIHZvaWQgY2Y3KCkgeworICAgICAgICB0cnkgeworICAgICAgICB9IGZpbmFsbHkgeworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIH0gZmluYWxseSB7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgfSBmaW5hbGx5IHsKKyAgICAgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgIH0gZmluYWxseSB7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgfSBmaW5hbGx5IHsKKyAgICAgICAgICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICAgICAgfSBmaW5hbGx5IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgICAgICAgICB9IGZpbmFsbHkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBmaW5hbGx5IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBmaW5hbGx5IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0gZmluYWxseSB7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0gZmluYWxseSB7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgOworIH0KKworIHZvaWQgY2Y4KCkgeworICBjbGFzcyBUZXN0MDEKKyAgeworIAorICBwdWJsaWMgaW50IHRlc3RNZXRob2QoKQorICB7CisgICAgdHJ5CisgICAgeworICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbigidGVzdCIpOworICAgIH0KKyAgICBjYXRjaChFeGNlcHRpb24gZSkKKyAgICB7CisgICAgICB0cnkKKyAgICAgIHsKKyAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbigidGVzdCIpOworICAgICAgfQorICAgICAgY2F0Y2goRXhjZXB0aW9uIGVlKQorICAgICAge30KKyAgICAgIGZpbmFsbHkKKyAgICAgIHt9CisgICAgfQorICAgIGZpbmFsbHkKKyAgICB7CisgCisgICAgICB0cnkKKyAgICAgIHsKKyAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbigidGVzdCIpOworICAgICAgfQorICAgICAgY2F0Y2goRXhjZXB0aW9uIGUpCisgICAgICB7fQorICAgICAgZmluYWxseQorICAgICAge30KKyAgICB9CisgICAgcmV0dXJuIDA7CisgIH0KKyAgfQorIH0KKworIHZvaWQgY2Y5KCkgeworICAgICAgLy8gc2hvdWxkIG5vdCB0cnkgdG8gY29tcHV0ZSBjb25zdGFudCBleHByZXNzaW9uIHdpdGhpbiBhc3NlcnQKKyAgICAgIC8vIHNpbmNlIGFzc2VydGlvbnMgY2FuIGJlIGRpc2FibGVkL2VuYWJsZWQgYXQgYW55IG1vbWVudCB2aWEgSlZNIGZsYWdzCisgICBhc3NlcnQgdHJ1ZTsKKyAgIGFzc2VydCBmYWxzZTsKKyAgIGZpbmFsIGludCBpOworICAgaWYgKDA9PTEpIHsKKyAgICAgaSA9IDk7CisgICB9CisgICBlbHNlIHsKKyAgICAgaSA9IDA7CisgICB9CisgfQorCisgdm9pZCBjZjEwKCkgeworICAgaW50IGsgPSAwOworICAgc3dpdGNoIChrKSB7CisgICB9CisgfQorCisKKyAgcHJpdmF0ZSBFeGNlcHRpb24gZ2V0RXhjZXB0aW9uKCkKKyAgeworICAgIHJldHVybiBuZXcgamF2YS5pby5JT0V4Y2VwdGlvbigpOworICB9CisKKyAgcHVibGljIHZvaWQgY2YxMSgpCisgIHsKKyAgICB0cnkgeworICAgICAgdGhyb3cgZ2V0RXhjZXB0aW9uKCk7CisgICAgfQorICAgIGNhdGNoIChqYXZhLmlvLklPRXhjZXB0aW9uIGUpIHsKKyAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7ICAvLyBJREVBIGNsYWltcyB0aGlzIHRvIGJlICJVbnJlYWNoYWJsZSBzdGF0ZW1lbnQiLy8KKyAgICB9CisgICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOworICAgIH0KKyAgfQorCisgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisgICAgcHVibGljIHZvaWQgY2YxMigpIHsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICB9IGZpbmFsbHkgeworICAgICAgICAgICAgICAgIGRvaXQoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBjYXRjaCAoRXhjZXAxIGUpIHsKKyAgICAgICAgICAgIFN0cmluZyBlcnJvciA9ICJSb2xsYmFja0V4Y2VwdGlvbiI7CisgICAgICAgIH0gY2F0Y2ggKEV4Y2VwMiBlKSB7CisgICAgICAgICAgICBTdHJpbmcgZXJyb3IgPSAiSGV1cmlzdGljUm9sbGJhY2tFeGNlcHRpb24iOworICAgICAgICB9IGNhdGNoIChFeGNlcDMgZSkgeworICAgICAgICAgICAgU3RyaW5nIGVycm9yID0gIlN5c3RlbUV4Y2VwdGlvbiI7CisgICAgICAgIH0gY2F0Y2ggKElsbGVnYWxTdGF0ZUV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICBTdHJpbmcgZXJyb3IgPSAiSWxsZWdhbFN0YXRlRXhjZXB0aW9uIjsKKyAgICAgICAgfSBjYXRjaCAoUnVudGltZUV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICBTdHJpbmcgZXJyb3IgPSAiUnVudGltZUV4Y2VwdGlvbiI7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwcml2YXRlIHZvaWQgZG9pdCgpIHRocm93cyBFeGNlcDEsIEV4Y2VwMiwgRXhjZXAzeworICAgICAgICAvL1RvIGNoYW5nZSBib2R5IG9mIGNyZWF0ZWQgbWV0aG9kcyB1c2UgT3B0aW9ucyB8IEZpbGUgVGVtcGxhdGVzLgorICAgIH0KKworICAgY2xhc3MgRXhjZXAxIGV4dGVuZHMgRXhjZXB0aW9uIHt9CisgICBjbGFzcyBFeGNlcDIgZXh0ZW5kcyBFeGNlcHRpb24ge30KKyAgIGNsYXNzIEV4Y2VwMyBleHRlbmRzIEV4Y2VwdGlvbiB7fQorCisKKworCisgICAgcHVibGljIHZvaWQgY2YxMygpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICB3aGlsZSAodHJ1ZSkgeworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICBjZjEzKCk7CisgICAgICAgICAgICB9IGZpbmFsbHkgeworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfSAKKyAgICAgICAgfQorICAgIH0KKworfQorCisKK2NsYXNzIE5lc3RlZEZpbmFsbHlUZXN0IHsKKyAgICB2b2lkIGZ0ZXN0NCgpIHsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgfQorICAgICAgICBmaW5hbGx5IHsKKyAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBmaW5hbGx5IHsKKyAgICAgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBmaW5hbGx5IHsKKyAgICAgICAgICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBjYXRjaCAoVGhyb3dhYmxlIHQ0KSB7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZnRlc3Q0KCk7CisgICAgfQorfQorCisKKworCisKKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmcvVW5zdXBwb3J0ZWRGZWF0dXJlcy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmcvVW5zdXBwb3J0ZWRGZWF0dXJlcy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQyNjM1YzIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZy9VbnN1cHBvcnRlZEZlYXR1cmVzLmphdmEKQEAgLTAsMCArMSw0OSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDAwLTIwMTIgSmV0QnJhaW5zIHMuci5vLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworaW1wb3J0IGphdmEuaW8uKjsKK2ltcG9ydCBqYXZhLnV0aWwuKjsKKworPGVycm9yIGRlc2NyPSJTdGF0aWMgaW1wb3J0cyBhcmUgbm90IHN1cHBvcnRlZCBhdCB0aGlzIGxhbmd1YWdlIGxldmVsIj5pbXBvcnQgc3RhdGljIGphdmEubGFuZy5NYXRoLio7PC9lcnJvcj4KKworQGludGVyZmFjZSA8ZXJyb3IgZGVzY3I9IkFubm90YXRpb25zIGFyZSBub3Qgc3VwcG9ydGVkIGF0IHRoaXMgbGFuZ3VhZ2UgbGV2ZWwiPkFubm88L2Vycm9yPiB7IH0KKworPGVycm9yIGRlc2NyPSJBbm5vdGF0aW9ucyBhcmUgbm90IHN1cHBvcnRlZCBhdCB0aGlzIGxhbmd1YWdlIGxldmVsIj5AQW5ubzwvZXJyb3I+CitjbGFzcyBVbnN1cHBvcnRlZEZlYXR1cmVzIHsKKyAgdm9pZCBtKDxlcnJvciBkZXNjcj0iVmFyaWFibGUgYXJpdHkgbWV0aG9kcyBhcmUgbm90IHN1cHBvcnRlZCBhdCB0aGlzIGxhbmd1YWdlIGxldmVsIj5TdHJpbmcuLi4gYXJnczwvZXJyb3I+KSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICA8ZXJyb3IgZGVzY3I9IkZvci1lYWNoIGxvb3BzIGFyZSBub3Qgc3VwcG9ydGVkIGF0IHRoaXMgbGFuZ3VhZ2UgbGV2ZWwiPmZvciAoU3RyaW5nIHMgOiBhcmdzKSB7IFN5c3RlbS5vdXQucHJpbnRsbihzKTsgfTwvZXJyb3I+CisKKyAgICBMaXN0PGVycm9yIGRlc2NyPSJHZW5lcmljcyBhcmUgbm90IHN1cHBvcnRlZCBhdCB0aGlzIGxhbmd1YWdlIGxldmVsIj48U3RyaW5nPjwvZXJyb3I+IGxpc3QgPQorICAgICAgbmV3IEFycmF5TGlzdDxlcnJvciBkZXNjcj0iRGlhbW9uZCB0eXBlcyBhcmUgbm90IHN1cHBvcnRlZCBhdCB0aGlzIGxhbmd1YWdlIGxldmVsIj48PjwvZXJyb3I+KCk7CisKKyAgICBmb3IgKDxlcnJvciBkZXNjcj0iSW5jb21wYXRpYmxlIHR5cGVzLiBGb3VuZDogJ2phdmEubGFuZy5PYmplY3QnLCByZXF1aXJlZDogJ2phdmEubGFuZy5TdHJpbmcnIj5TdHJpbmcgcyA6IGxpc3Q8L2Vycm9yPikge30KKyAgICBBcnJheXMuYXNMaXN0PGVycm9yIGRlc2NyPSInYXNMaXN0KGphdmEubGFuZy5TdHJpbmcuLi4pJyBpbiAnamF2YS51dGlsLkFycmF5cycgY2Fubm90IGJlIGFwcGxpZWQgdG8gJyhqYXZhLmxhbmcuU3RyaW5nKSciPigiIik8L2Vycm9yPjsKKyAgICA8ZXJyb3IgZGVzY3I9IkluY29tcGF0aWJsZSB0eXBlcy4gRm91bmQ6ICdib29sZWFuJywgcmVxdWlyZWQ6ICdqYXZhLmxhbmcuQm9vbGVhbiciPkJvb2xlYW4gYiA9IHRydWU7PC9lcnJvcj4KKyAgICA8ZXJyb3IgZGVzY3I9IkluY29tcGF0aWJsZSB0eXBlcy4gRm91bmQ6ICdqYXZhLmxhbmcuQm9vbGVhbicsIHJlcXVpcmVkOiAnYm9vbGVhbiciPmJvb2xlYW4gYjEgPSBCb29sZWFuLlRSVUU7PC9lcnJvcj4KKworICAgIHRyeSB7IFJlYWRlciByID0gbmV3IEZpbGVSZWFkZXIoIi9kZXYvbnVsbCIpOyB9CisgICAgY2F0Y2ggKDxlcnJvciBkZXNjcj0iTXVsdGktY2F0Y2hlcyBhcmUgbm90IHN1cHBvcnRlZCBhdCB0aGlzIGxhbmd1YWdlIGxldmVsIj5GaWxlTm90Rm91bmRFeGNlcHRpb24gfCBJT0V4Y2VwdGlvbiBlPC9lcnJvcj4pIHsgZS5wcmludFN0YWNrVHJhY2UoKTsgfQorCisgICAgdHJ5IDxlcnJvciBkZXNjcj0iVHJ5LXdpdGgtcmVzb3VyY2VzIGFyZSBub3Qgc3VwcG9ydGVkIGF0IHRoaXMgbGFuZ3VhZ2UgbGV2ZWwiPihSZWFkZXIgciA9IG5ldyBGaWxlUmVhZGVyKCIvZGV2L251bGwiKSk8L2Vycm9yPiB7IH0KKworICAgIEkgaTEgPSA8ZXJyb3IgZGVzY3I9Ik1ldGhvZCByZWZlcmVuY2VzIGFyZSBub3Qgc3VwcG9ydGVkIGF0IHRoaXMgbGFuZ3VhZ2UgbGV2ZWwiPlVuc3VwcG9ydGVkRmVhdHVyZXM6Om08L2Vycm9yPjsKKyAgICBJIGkyID0gPGVycm9yIGRlc2NyPSJMYW1iZGEgZXhwcmVzc2lvbnMgYXJlIG5vdCBzdXBwb3J0ZWQgYXQgdGhpcyBsYW5ndWFnZSBsZXZlbCI+KCkgLT4geyB9PC9lcnJvcj47CisgIH0KKworICBpbnRlcmZhY2UgSSB7CisgICAgPGVycm9yIGRlc2NyPSJFeHRlbnNpb24gbWV0aG9kcyBhcmUgbm90IHN1cHBvcnRlZCBhdCB0aGlzIGxhbmd1YWdlIGxldmVsIj52b2lkIG0oKSBkZWZhdWx0IHsgfTwvZXJyb3I+CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nL1VudXNlZC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmcvVW51c2VkLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmNiY2QyNwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nL1VudXNlZC5qYXZhCkBAIC0wLDAgKzEsNDYgQEAKK3B1YmxpYyBjbGFzcyBhIGV4dGVuZHMgRXhjZXB0aW9uIHsKKyAgcHJpdmF0ZSA8d2FybmluZyBkZXNjcj0iUHJpdmF0ZSBjb25zdHJ1Y3RvciAnYShqYXZhLmxhbmcuU3RyaW5nKScgaXMgbmV2ZXIgdXNlZCI+YTwvd2FybmluZz4oU3RyaW5nIHMpIHsKKyAgICBzdXBlcihzKTsKKyAgfQorfQorCitjbGFzcyBzIGV4dGVuZHMgRXhjZXB0aW9uIHsKKyAgcHJpdmF0ZSBzKFN0cmluZyBzKSB7CisgICAgc3VwZXIocyk7CisgIH0KKyAgcHVibGljIHMgY3JlYXRlKCkgeworICAgIHJldHVybiBuZXcgcygiIik7CisgIH0KK30KKworY2xhc3MgUHJpdmF0ZUNsYXNzVGVzdCB7CisJcHJpdmF0ZSBzdGF0aWMgY2xhc3MgVGVzdDEgeworCQkvLyBDb21wbGFpbnMgdGhhdCB0aGlzIGNvbnN0cnVjdG9yIGlzIG5ldmVyIHVzZWQKKwkJcHJpdmF0ZSBUZXN0MSAoKSB7fQorCisJCXByaXZhdGUgVGVzdDEgKFN0cmluZyBzKSB7CisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4ocyk7CisgICAgICAgIH0KKwl9CisKKwlwcml2YXRlIHN0YXRpYyBjbGFzcyBUZXN0MiBleHRlbmRzIFRlc3QxIHsKKwkJLy8gQ29tcGxhaW5zIHRoYXQgbm8gZGVmYXVsdCBjb25zdHJ1Y3RvciBpcyBhdmFpbGFibGUKKwkJcHVibGljIFRlc3QyICgpIHsKKyAgICAgICAgfQorCisJCS8vIENvbXBsYWlucyB0aGF0IHRoZSByZWxldmFudCBjb25zdHJ1Y3RvciBoYXMgcHJpdmF0ZSBhY2Nlc3MKKwkJcHVibGljIFRlc3QyIChTdHJpbmcgcykgeworCQkJc3VwZXIgKHMpOworCQl9CisJfQorICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKG5ldyBUZXN0MigpKTsKKyAgICB9CisKKyAgICBwcml2YXRlIHZvaWQgPHdhcm5pbmcgZGVzY3I9IlByaXZhdGUgbWV0aG9kICdmKGJvb2xlYW4sIGludCknIGlzIG5ldmVyIHVzZWQiPmY8L3dhcm5pbmc+KGJvb2xlYW4gYiwKKyAgICAgICAgICAgICAgIGludCA8d2FybmluZyBkZXNjcj0iUGFyYW1ldGVyICdwYXJhbScgaXMgbmV2ZXIgdXNlZCI+cGFyYW08L3dhcm5pbmc+KSB7CisgICAgICAgaWYgKGIpIHsKKyAgICAgICAgIGYoYiwgcGFyYW0pOworICAgICAgIH0KKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZy9VbnVzZWROb25Qcml2YXRlTWVtYmVycy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmcvVW51c2VkTm9uUHJpdmF0ZU1lbWJlcnMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZjNhN2I0Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmcvVW51c2VkTm9uUHJpdmF0ZU1lbWJlcnMuamF2YQpAQCAtMCwwICsxLDE5IEBACitwdWJsaWMgY2xhc3MgPHdhcm5pbmcgZGVzY3I9IkNsYXNzICdYWFgnIGlzIG5ldmVyIHVzZWQiPlhYWDwvd2FybmluZz4geworICB2b2lkIDx3YXJuaW5nIGRlc2NyPSJNZXRob2QgJ2ZmZmZmKCknIGlzIG5ldmVyIHVzZWQiPmZmZmZmPC93YXJuaW5nPigpe30KKyAgcHVibGljIHZvaWQgPHdhcm5pbmcgZGVzY3I9Ik1ldGhvZCAnYXNkZmFmZmZmZmYoKScgaXMgbmV2ZXIgdXNlZCI+YXNkZmFmZmZmZmY8L3dhcm5pbmc+KCl7fQorICBwcm90ZWN0ZWQgdm9pZCA8d2FybmluZyBkZXNjcj0iTWV0aG9kICdkYXNrbGZqaHNhZCgpJyBpcyBuZXZlciB1c2VkIj5kYXNrbGZqaHNhZDwvd2FybmluZz4oKXt9CisKKyAgU3RyaW5nIDx3YXJuaW5nIGRlc2NyPSJGaWVsZCAnYXNkZmFkc2YnIGlzIG5ldmVyIHVzZWQiPmFzZGZhZHNmPC93YXJuaW5nPjsKKyAgcHVibGljIFN0cmluZyA8d2FybmluZyBkZXNjcj0iRmllbGQgJ2FzZGFzZGZhZHNmJyBpcyBuZXZlciB1c2VkIj5hc2Rhc2RmYWRzZjwvd2FybmluZz47CisgIHN0YXRpYyBjbGFzcyA8d2FybmluZyBkZXNjcj0iQ2xhc3MgJ3Nhc2RmYXNkZmFzZCcgaXMgbmV2ZXIgdXNlZCI+c2FzZGZhc2RmYXNkPC93YXJuaW5nPiB7fQorICAKKyAgcHVibGljIDx3YXJuaW5nIGRlc2NyPSJDb25zdHJ1Y3RvciAnWFhYKCknIGlzIG5ldmVyIHVzZWQiPlhYWDwvd2FybmluZz4oKSB7fQorCisKKyAgLy8gb3ZlcmxvYWRlZAorICB2b2lkIGZmZmZmKFN0cmluZyBpKXtpLmhhc2hDb2RlKCk7fQorICB7CisgICAgIGZmZmZmKG51bGwpOworICB9Cit9CisKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nL1VudXNlZE5vblByaXZhdGVNZW1iZXJzMi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmcvVW51c2VkTm9uUHJpdmF0ZU1lbWJlcnMyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjdhZTQ3NQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nL1VudXNlZE5vblByaXZhdGVNZW1iZXJzMi5qYXZhCkBAIC0wLDAgKzEsOSBAQAorcHVibGljIGNsYXNzIFdpdGhNYWluIHsKKworICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKXsKKworICB9CisKKyAgcHVibGljIHZvaWQgbXlUZXN0TWV0aG9kKCl7fQorfQorCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZy9VbnVzZWROb25Qcml2YXRlTWVtYmVyc1JlZmVyZW5jZWRGcm9tVGV4dC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmcvVW51c2VkTm9uUHJpdmF0ZU1lbWJlcnNSZWZlcmVuY2VkRnJvbVRleHQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNWMwYjJhCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmcvVW51c2VkTm9uUHJpdmF0ZU1lbWJlcnNSZWZlcmVuY2VkRnJvbVRleHQuamF2YQpAQCAtMCwwICsxLDMgQEAKK3B1YmxpYyBjbGFzcyA8d2FybmluZyBkZXNjcj0iQ2xhc3MgJ1hYWCcgaXMgbmV2ZXIgdXNlZCI+WFhYPC93YXJuaW5nPiB7Cit9CisKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nL1VudXNlZFBhcmFtc09mUHVibGljTWV0aG9kLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZy9VbnVzZWRQYXJhbXNPZlB1YmxpY01ldGhvZC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJhZjgwZDFmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmcvVW51c2VkUGFyYW1zT2ZQdWJsaWNNZXRob2QuamF2YQpAQCAtMCwwICsxLDE5IEBACitjbGFzcyBTdXAgeworICBwcm90ZWN0ZWQgdm9pZCBmKGludCBpKXt9Cit9CitjbGFzcyBGb28gZXh0ZW5kcyBTdXAgeworICBwdWJsaWMgdm9pZCBmb28oaW50IDx3YXJuaW5nIGRlc2NyPSJQYXJhbWV0ZXIgJ2knIGlzIG5ldmVyIHVzZWQiPmk8L3dhcm5pbmc+KXt9CisgIHB1YmxpYyB2b2lkIGcoaW50IGkpe30KKyAgcHJvdGVjdGVkIHZvaWQgZihpbnQgaSl7fQorfQorY2xhc3MgU3ViIGV4dGVuZHMgRm9vIHsKKyAgcHVibGljIHZvaWQgZyhpbnQgaSl7fQorfQorCisKK2ludGVyZmFjZSBmZmYgeworICB2b2lkIGYoaW50IGdnZ2dnKTsvLworfQorYWJzdHJhY3QgY2xhc3MgYWIgeworICBwdWJsaWMgYWJzdHJhY3Qgdm9pZCBmKGludCBnZ2dnZyk7Ly8KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZy9VbnVzZWRQYXJhbXNPZlB1YmxpY01ldGhvZERpc2FibGVkLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZy9VbnVzZWRQYXJhbXNPZlB1YmxpY01ldGhvZERpc2FibGVkLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTk0Y2NiYQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nL1VudXNlZFBhcmFtc09mUHVibGljTWV0aG9kRGlzYWJsZWQuamF2YQpAQCAtMCwwICsxLDE5IEBACitjbGFzcyBTdXAgeworICBwcm90ZWN0ZWQgdm9pZCBmKGludCBpKXt9Cit9CitjbGFzcyBGb28gZXh0ZW5kcyBTdXAgeworICBwdWJsaWMgdm9pZCBmb28oaW50IGkpe30KKyAgcHVibGljIHZvaWQgZyhpbnQgaSl7fQorICBwcm90ZWN0ZWQgdm9pZCBmKGludCBpKXt9Cit9CitjbGFzcyBTdWIgZXh0ZW5kcyBGb28geworICBwdWJsaWMgdm9pZCBnKGludCBpKXt9Cit9CisKKworaW50ZXJmYWNlIGZmZiB7CisgIHZvaWQgZihpbnQgZ2dnZ2cpOy8vCit9CithYnN0cmFjdCBjbGFzcyBhYiB7CisgIHB1YmxpYyBhYnN0cmFjdCB2b2lkIGYoaW50IGdnZ2dnKTsvLworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nL1ZhckRvdWJsZUluaXRpYWxpemF0aW9uLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZy9WYXJEb3VibGVJbml0aWFsaXphdGlvbi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRlMGY0ZjAKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZy9WYXJEb3VibGVJbml0aWFsaXphdGlvbi5qYXZhCkBAIC0wLDAgKzEsMTUwIEBACisvLyB2YXJzIGRvdWJsZSBpbml0aWFsaXphdGlvbgoraW1wb3J0IGphdmEuaW8uKjsKK2ltcG9ydCBqYXZhLm5ldC4qOworcHVibGljIGNsYXNzIGEyMSAgeworCisgIHZvaWQgZjEoaW50IGkpIHsKKyAgICBmaW5hbCBpbnQgajsKKyAgICBqID0gMjsKKyAgICA8ZXJyb3IgZGVzY3I9IlZhcmlhYmxlICdqJyBtaWdodCBhbHJlYWR5IGhhdmUgYmVlbiBhc3NpZ25lZCB0byI+ajwvZXJyb3I+ID0gMjsKKyAgfQorICB2b2lkIGYyKGludCBpKSB7CisgICAgZmluYWwgaW50IGo7CisgICAgaWYgKGk9PTMpIGogPSAyOworICAgIGVsc2UgaiA9IDU7CisgICAgPGVycm9yIGRlc2NyPSJWYXJpYWJsZSAnaicgbWlnaHQgYWxyZWFkeSBoYXZlIGJlZW4gYXNzaWduZWQgdG8iPmo8L2Vycm9yPiA9IDI7CisgIH0KKyAgdm9pZCBmMyhpbnQgaSkgeworICAgIGZpbmFsIGludCBqOworICAgIGlmIChpPT00KSBqID0gMjsKKyAgICA8ZXJyb3IgZGVzY3I9IlZhcmlhYmxlICdqJyBtaWdodCBhbHJlYWR5IGhhdmUgYmVlbiBhc3NpZ25lZCB0byI+ajwvZXJyb3I+ID0gMjsKKyAgfQorICB2b2lkIGY1KGludCBpKSB7CisgICAgZmluYWwgaW50IGo7CisgICAgaiA9IDI7CisgICAgaWYgKGk9PTMpIHJldHVybjsKKyAgICA8ZXJyb3IgZGVzY3I9IlZhcmlhYmxlICdqJyBtaWdodCBhbHJlYWR5IGhhdmUgYmVlbiBhc3NpZ25lZCB0byI+ajwvZXJyb3I+ID0gMjsKKyAgfQorICB2b2lkIGY2KGludCBpKSB7CisgICAgZmluYWwgaW50IGo7CisgICAgc3dpdGNoIChpKSB7CisgICAgY2FzZSAxOiBqID0gMjsKKyAgICB9CisgICAgPGVycm9yIGRlc2NyPSJWYXJpYWJsZSAnaicgbWlnaHQgYWxyZWFkeSBoYXZlIGJlZW4gYXNzaWduZWQgdG8iPmo8L2Vycm9yPiA9IDI7CisgIH0KKyAgdm9pZCBmNyhpbnQgaSkgeworICAgIGZpbmFsIGludCBqOworICAgIHdoaWxlIChpIDwgNCkgeworICAgICAgPGVycm9yIGRlc2NyPSJWYXJpYWJsZSAnaicgbWlnaHQgYmUgYXNzaWduZWQgaW4gbG9vcCI+ajwvZXJyb3I+ID0gMjsKKyAgICAgIGZpbmFsIGludCBpaSA9IDQ7CisgICAgICBpKz1paTsKKyAgICB9CisgICAgCisgIH0KKyAgdm9pZCBmOChTdHJpbmcgaykgeworICAgICAgICBpZiAoayAhPSBudWxsKSB7CisgICAgICAgIGZpbmFsIFN0cmluZyBpOworICAgICAgICBpZiAoay5lcXVhbHMoIiEiKSkgaSA9ICIzIjsKKyAgICAgICAgaWYgKGsuZXF1YWxzKCIhIikpIDxlcnJvciBkZXNjcj0iVmFyaWFibGUgJ2knIG1pZ2h0IGFscmVhZHkgaGF2ZSBiZWVuIGFzc2lnbmVkIHRvIj5pPC9lcnJvcj4gPSAiMiI7CisgICAgICAgIH0KKworICB9CisKKyAgdm9pZCBmOSgpIHsKKyAgICBmaW5hbCBPYmplY3QgdHlwZTsKKyAgICB0cnkgeworICAgICAgdHlwZSA9IG51bGw7ICAgIAorICAgIH0KKyAgICBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICAgIDxlcnJvciBkZXNjcj0iVmFyaWFibGUgJ3R5cGUnIG1pZ2h0IGFscmVhZHkgaGF2ZSBiZWVuIGFzc2lnbmVkIHRvIj50eXBlPC9lcnJvcj4gPSBudWxsOworICAgIH0KKyAgfQorCisgIHZvaWQgZjEwKCkgeworICAgICAgICBmaW5hbCBpbnQgazsKKyAgICAgICAgaWYgKGZhbHNlKSB7CisgICAgICAgICAgICBrPTA7CisgICAgICAgICAgICAvLzwgZXJyb3IgZGVzY3I9IlZhcmlhYmxlICdrJyBtaWdodCBhbHJlYWR5IGhhdmUgYmVlbiBhc3NpZ25lZCB0byI+azwgL2Vycm9yPj0wOworICAgICAgICB9CisgIH0KKworY2xhc3MgRm9vIHsKKyAgICBmaW5hbCBpbnQgazsKKyAgICBGb28oKSB7CisgICAgICAgIGs9MDsKKyAgICAgICAgPGVycm9yIGRlc2NyPSJWYXJpYWJsZSAnaycgbWlnaHQgYWxyZWFkeSBoYXZlIGJlZW4gYXNzaWduZWQgdG8iPms8L2Vycm9yPj0wOworICAgIH0KK30KKworCisKKworICB2b2lkIGNmMShpbnQgaSkgeworICAgIGZpbmFsIGludCBqOworICAgIGZpbmFsIGludCBqMSA9IDM7CisgICAgaiA9IDU7CisgICAgZmluYWwgaW50IHVudXNlZDsKKyAgICBmaW5hbCBpbnQgajI7CisgICAgaWYgKGogPT0gMykgajIgPSA0OworICAgIGZpbmFsIGludCBqMzsKKyAgICBpZiAoaj09NCkgajMgPSA1OworICAgIGVsc2UgajMgPSA2OworICAgIGZpbmFsIGludCBqNCA9IGozICsgNjsKKyAgICBmaW5hbCBpbnQgajU7CisgICAgd2hpbGUgKGkgIT0gOSkgeworICAgICAgaWYgKGogPT0gOCkgeworICAgICAgICBqNSA9IDk7CisgICAgICAgIGJyZWFrOworICAgICAgfQorICAgIH0KKyAgfQorCisgIGZpbmFsIGJvb2xlYW4gRkIgPSB0cnVlOworCisgIHZvaWQgY2YyKCkgeworICAgICAgZmluYWwgaW50IGs7CisgICAgICBpZiAoIUZCKSB7CisgICAgICAgIGsgPSA0OworICAgICAgfQorICAgICAgLy8gPCBlcnJvciBkZXNjcj0iVmFyaWFibGUgJ2snIG1pZ2h0IGFscmVhZHkgaGF2ZSBiZWVuIGFzc2lnbmVkIHRvIj5rPCAvZXJyb3I+PTA7CisgIH0KKworCisgICAgLy8gdG9kbzoKKyAgICAvLyBpbiBJREVBIFZhcmlhYmxlICdiJyBtaWdodCBub3QgaGF2ZSBiZWVuIGluaXRpYWxpemVkCisgICAgLy8gaW4gamF2YWM6IE9LCisgICAgLyoKKyAgICB2b2lkIGYyKCkgeworICAgICAgICBib29sZWFuIGI7CisgICAgICAgIGJvb2xlYW4gYyA9IHRydWU7CisgICAgICAgIGlmIChjICYmIGZhbHNlKSB7CisgICAgICAgICAgICBjID0gYjsKKyAgICAgICAgfQorICAgIH0KKyAgICAqLworCit9CisKKworY2xhc3MgQSB7CisgICAgZmluYWwgaW50IGs7CisgICAgQSgpIHsKKyAgICAgICAgZm9yICg7OykgeworICAgICAgICAgICAgPGVycm9yIGRlc2NyPSJWYXJpYWJsZSAnaycgbWlnaHQgYmUgYXNzaWduZWQgaW4gbG9vcCI+azwvZXJyb3I+PTA7CisgICAgICAgIH0KKyAgICB9Cit9CisKK2NsYXNzIEV4YW1wbGUgeworICAgIHB1YmxpYyBpbnQgbWV0aG9kKGJvb2xlYW4gYikgeworICAgICAgICBpZiAoYikgeworICAgICAgICAgIGZpbmFsIGludCBpbmRlbnQ7CisgICAgICAgICAgaW5kZW50ID0gMDsKKworICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgIG5ldyA8ZXJyb3I+UnVubmFibGU8L2Vycm9yPigpe308RU9MRXJyb3IvPgorICAgICAgICB9CisgICAgPGVycm9yPn08L2Vycm9yPgorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nL1ZhcmlhYmxlQWxyZWFkeURlZmluZWQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nL1ZhcmlhYmxlQWxyZWFkeURlZmluZWQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNTQ5ZjI2Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmcvVmFyaWFibGVBbHJlYWR5RGVmaW5lZC5qYXZhCkBAIC0wLDAgKzEsMzQgQEAKK2NsYXNzIHMgeworICB2b2lkIGYoKSB7CisgICAgaW50IGk7CisgICAgaW50IDxlcnJvciBkZXNjcj0iVmFyaWFibGUgJ2knIGlzIGFscmVhZHkgZGVmaW5lZCBpbiB0aGUgc2NvcGUiPmk8L2Vycm9yPjsKKyAgfQorICB2b2lkIGYxKCkgeworICAgIGludCBpOworICAgIHsKKyAgICAgIGludCA8ZXJyb3IgZGVzY3I9IlZhcmlhYmxlICdpJyBpcyBhbHJlYWR5IGRlZmluZWQgaW4gdGhlIHNjb3BlIj5pPC9lcnJvcj47CisgICAgfQorICB9CisgIHZvaWQgZjIoKSB7CisgICAgaW50IGk7CisgICAgY2xhc3Mgc3MKKyAgICB7CisgICAgICBpbnQgaTsKKyAgICB9CisgIH0KKworICBpbnQgPGVycm9yIGRlc2NyPSJWYXJpYWJsZSAnZicgaXMgYWxyZWFkeSBkZWZpbmVkIGluIHRoZSBzY29wZSI+ZjwvZXJyb3I+OworICBpbnQgPGVycm9yIGRlc2NyPSJWYXJpYWJsZSAnZicgaXMgYWxyZWFkeSBkZWZpbmVkIGluIHRoZSBzY29wZSI+ZjwvZXJyb3I+OworICB2b2lkIGYzKCkgeworICAgIGludCBmOworICB9CisKKyAgcHVibGljIHZvaWQgdHV0dShTdHJpbmcgZSkgeworICAgIHRyeSB7CisgICAgICBJbnRlZ2VyLnBhcnNlSW50KCIzIik7CisgICAgfSBjYXRjaCAoTnVtYmVyRm9ybWF0RXhjZXB0aW9uIDxlcnJvciBkZXNjcj0iVmFyaWFibGUgJ2UnIGlzIGFscmVhZHkgZGVmaW5lZCBpbiB0aGUgc2NvcGUiPmU8L2Vycm9yPikgeworICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKKyAgICB9CisgIH0KKworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nL1ZhcmlhYmxlQWxyZWFkeURlZmluZWRUb3AuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nL1ZhcmlhYmxlQWxyZWFkeURlZmluZWRUb3AuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNTBlYjFkCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmcvVmFyaWFibGVBbHJlYWR5RGVmaW5lZFRvcC5qYXZhCkBAIC0wLDAgKzEsMjUgQEAKK2NsYXNzIHMgeworICB2b2lkIGYoKSB7CisgICAgaW50IGk7CisgICAgaW50IDxlcnJvciBkZXNjcj0iVmFyaWFibGUgJ2knIGlzIGFscmVhZHkgZGVmaW5lZCBpbiB0aGUgc2NvcGUiPmk8L2Vycm9yPjsKKyAgfQorICB2b2lkIGYxKCkgeworICAgIGludCBpOworICAgIHsKKyAgICAgIGludCA8ZXJyb3IgZGVzY3I9IlZhcmlhYmxlICdpJyBpcyBhbHJlYWR5IGRlZmluZWQgaW4gdGhlIHNjb3BlIj5pPC9lcnJvcj47CisgICAgfQorICB9CisgIHZvaWQgZjIoKSB7CisgICAgaW50IGk7CisgICAgY2xhc3Mgc3MKKyAgICB7CisgICAgICBpbnQgaTsKKyAgICB9CisgIH0KKworICBpbnQgZjsKKyAgaW50IDxlcnJvciBkZXNjcj0iVmFyaWFibGUgJ2YnIGlzIGFscmVhZHkgZGVmaW5lZCBpbiB0aGUgc2NvcGUiPmY8L2Vycm9yPjsKKyAgdm9pZCBmMygpIHsKKyAgICBpbnQgZjsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nL1hYWC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmcvWFhYLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGE5YTE3MwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nL1hYWC5qYXZhCkBAIC0wLDAgKzEsNSBAQAoraW1wb3J0IGphdmEuaW8uKjsKKworcHVibGljIGNsYXNzIHggeworIHN0YXRpYyB7aW50IGk7fQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nL2FDbGFzc0xvYWRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmcvYUNsYXNzTG9hZGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGJlMzVlYQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nL2FDbGFzc0xvYWRlci5qYXZhCkBAIC0wLDAgKzEsMTczMSBAQAorLyoKKyAqIEAoIylDbGFzc0xvYWRlci5qYXZhCTEuMTYyIDAyLzAzLzE5CisgKgorICogQ29weXJpZ2h0IDIwMDIgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogU1VOIFBST1BSSUVUQVJZL0NPTkZJREVOVElBTC4gVXNlIGlzIHN1YmplY3QgdG8gbGljZW5zZSB0ZXJtcy4KKyAqLworCitpbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworaW1wb3J0IGphdmEuaW8uU3RyaW5nV3JpdGVyOworaW1wb3J0IGphdmEuaW8uUHJpbnRXcml0ZXI7CitpbXBvcnQgamF2YS5pby5GaWxlOworaW1wb3J0IGphdmEubGFuZy5yZWZsZWN0LkNvbnN0cnVjdG9yOworaW1wb3J0IGphdmEubGFuZy5yZWZsZWN0Lkludm9jYXRpb25UYXJnZXRFeGNlcHRpb247CitpbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKK2ltcG9ydCBqYXZhLnV0aWwuRW51bWVyYXRpb247CitpbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKK2ltcG9ydCBqYXZhLnV0aWwuU3RhY2s7CitpbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7CitpbXBvcnQgamF2YS51dGlsLkhhc2hTZXQ7CitpbXBvcnQgamF2YS51dGlsLk1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuTm9TdWNoRWxlbWVudEV4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuU2V0OworaW1wb3J0IGphdmEudXRpbC5qYXIuTWFuaWZlc3Q7CitpbXBvcnQgamF2YS5uZXQuVVJMOworaW1wb3J0IGphdmEubmV0Lk1hbGZvcm1lZFVSTEV4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLnNlY3VyaXR5LkFjY2Vzc0NvbnRyb2xsZXI7CitpbXBvcnQgamF2YS5zZWN1cml0eS5BY2Nlc3NDb250cm9sQ29udGV4dDsKK2ltcG9ydCBqYXZhLnNlY3VyaXR5LlByaXZpbGVnZWRBY3Rpb247CitpbXBvcnQgamF2YS5zZWN1cml0eS5Qcml2aWxlZ2VkQWN0aW9uRXhjZXB0aW9uOworaW1wb3J0IGphdmEuc2VjdXJpdHkuUHJpdmlsZWdlZEV4Y2VwdGlvbkFjdGlvbjsKK2ltcG9ydCBqYXZhLnNlY3VyaXR5LlByb3RlY3Rpb25Eb21haW47CitpbXBvcnQgamF2YS5zZWN1cml0eS5QZXJtaXNzaW9uczsKK2ltcG9ydCBqYXZhLnNlY3VyaXR5LkNvZGVTb3VyY2U7CitpbXBvcnQgamF2YS5zZWN1cml0eS5Qb2xpY3k7CitpbXBvcnQgc3VuLm1pc2MuVVJMQ2xhc3NQYXRoOworaW1wb3J0IHN1bi5taXNjLlJlc291cmNlOworaW1wb3J0IHN1bi5taXNjLkNvbXBvdW5kRW51bWVyYXRpb247CitpbXBvcnQgc3VuLm1pc2MuQ2xhc3NGaWxlVHJhbnNmb3JtZXI7CisvL2ltcG9ydCBzdW4ubWlzYy5MYXVuY2hlcjsKK2ltcG9ydCBzdW4ucmVmbGVjdC5SZWZsZWN0aW9uOworaW1wb3J0IHN1bi5zZWN1cml0eS5hY3Rpb24uR2V0UHJvcGVydHlBY3Rpb247CisKKy8qKgorICogQSBjbGFzcyBsb2FkZXIgaXMgYW4gb2JqZWN0IHRoYXQgaXMgcmVzcG9uc2libGUgZm9yIGxvYWRpbmcKKyAqIGNsYXNzZXMuIFRoZSBjbGFzcyA8Y29kZT5DbGFzc0xvYWRlcjwvY29kZT4gaXMgYW4gYWJzdHJhY3QgY2xhc3MuCisgKiBHaXZlbiB0aGUgbmFtZSBvZiBhIGNsYXNzLCBhIGNsYXNzIGxvYWRlciBzaG91bGQgYXR0ZW1wdCB0byBsb2NhdGUKKyAqIG9yIGdlbmVyYXRlIGRhdGEgdGhhdCBjb25zdGl0dXRlcyBhIGRlZmluaXRpb24gZm9yIHRoZSBjbGFzcy4gQQorICogdHlwaWNhbCBzdHJhdGVneSBpcyB0byB0cmFuc2Zvcm0gdGhlIG5hbWUgaW50byBhIGZpbGUKKyAqIG5hbWUgYW5kIHRoZW4gcmVhZCBhICJjbGFzcyBmaWxlIiBvZiB0aGF0IG5hbWUgZnJvbSBhIGZpbGUgc3lzdGVtLgorICogPHA+CisgKiBFdmVyeSA8Y29kZT5DbGFzczwvY29kZT4gb2JqZWN0IGNvbnRhaW5zIGEKKyAqIHtAbGluayBDbGFzcyNnZXRDbGFzc0xvYWRlcigpIHJlZmVyZW5jZX0gdG8gdGhlCisgKiA8Y29kZT5DbGFzc0xvYWRlcjwvY29kZT4gdGhhdCBkZWZpbmVkIGl0LgorICogPHA+CisgKiBDbGFzcyBvYmplY3RzIGZvciBhcnJheSBjbGFzc2VzIGFyZSBub3QgY3JlYXRlZCBieSBjbGFzcyBsb2FkZXJzLCBidXQKKyAqIGFyZSBjcmVhdGVkIGF1dG9tYXRpY2FsbHkgYXMgcmVxdWlyZWQgYnkgdGhlIEphdmEgcnVudGltZS4gVGhlIGNsYXNzCisgKiBsb2FkZXIgZm9yIGFuIGFycmF5IGNsYXNzLCBhcyByZXR1cm5lZCBieSB7QGxpbmsgQ2xhc3MjZ2V0Q2xhc3NMb2FkZXIoKX0KKyAqIGlzIHRoZSBzYW1lIGFzIHRoZSBjbGFzcyBsb2FkZXIgZm9yIGl0cyBlbGVtZW50IHR5cGU7IGlmIHRoZSBlbGVtZW50CisgKiB0eXBlIGlzIGEgcHJpbWl0aXZlIHR5cGUsIHRoZW4gdGhlIGFycmF5IGNsYXNzIGhhcyBubyBjbGFzcyBsb2FkZXIuCisgKiA8cD4KKyAqIEFwcGxpY2F0aW9ucyBpbXBsZW1lbnQgc3ViY2xhc3NlcyBvZiA8Y29kZT5DbGFzc0xvYWRlcjwvY29kZT4gaW4KKyAqIG9yZGVyIHRvIGV4dGVuZCB0aGUgbWFubmVyIGluIHdoaWNoIHRoZSBKYXZhIHZpcnR1YWwgbWFjaGluZQorICogZHluYW1pY2FsbHkgbG9hZHMgY2xhc3Nlcy4KKyAqIDxwPgorICogQ2xhc3MgbG9hZGVycyBtYXkgdHlwaWNhbGx5IGJlIHVzZWQgYnkgc2VjdXJpdHkgbWFuYWdlcnMgdG8KKyAqIGluZGljYXRlIHNlY3VyaXR5IGRvbWFpbnMuCisgKiA8cD4KKyAqIFRoZSA8Y29kZT5DbGFzc0xvYWRlcjwvY29kZT4gY2xhc3MgdXNlcyBhIGRlbGVnYXRpb24gbW9kZWwgdG8KKyAqIHNlYXJjaCBmb3IgY2xhc3NlcyBhbmQgcmVzb3VyY2VzLiBFYWNoIGluc3RhbmNlIG9mCisgKiA8Y29kZT5DbGFzc0xvYWRlcjwvY29kZT4gaGFzIGFuIGFzc29jaWF0ZWQgcGFyZW50IGNsYXNzIGxvYWRlci4KKyAqIFdoZW4gY2FsbGVkIHVwb24gdG8gZmluZCBhIGNsYXNzIG9yIHJlc291cmNlLCBhCisgKiA8Y29kZT5DbGFzc0xvYWRlcjwvY29kZT4gaW5zdGFuY2Ugd2lsbCBkZWxlZ2F0ZSB0aGUgc2VhcmNoIGZvcgorICogdGhlIGNsYXNzIG9yIHJlc291cmNlIHRvIGl0cyBwYXJlbnQgY2xhc3MgbG9hZGVyIGJlZm9yZQorICogYXR0ZW1wdGluZyB0byBmaW5kIHRoZSBjbGFzcyBvciByZXNvdXJjZSBpdHNlbGYuICBUaGUgdmlydHVhbAorICogbWFjaGluZSdzIGJ1aWx0LWluIGNsYXNzIGxvYWRlciwgY2FsbGVkIHRoZSBib290c3RyYXAgY2xhc3MgbG9hZGVyLAorICogZG9lcyBub3QgaXRzZWxmIGhhdmUgYSBwYXJlbnQgYnV0IG1heSBzZXJ2ZSBhcyB0aGUgcGFyZW50IG9mIGEKKyAqIDxjb2RlPkNsYXNzTG9hZGVyPC9jb2RlPiBpbnN0YW5jZS4KKyAqIDxwPgorICogTm9ybWFsbHksIHRoZSBKYXZhIHZpcnR1YWwgbWFjaGluZSBsb2FkcyBjbGFzc2VzIGZyb20gdGhlIGxvY2FsCisgKiBmaWxlIHN5c3RlbSBpbiBhIHBsYXRmb3JtLWRlcGVuZGVudCBtYW5uZXIuIEZvciBleGFtcGxlLCBvbiBVTklYCisgKiBzeXN0ZW1zLCB0aGUgdmlydHVhbCBtYWNoaW5lIGxvYWRzIGNsYXNzZXMgZnJvbSB0aGUgZGlyZWN0b3J5CisgKiBkZWZpbmVkIGJ5IHRoZSA8Y29kZT5DTEFTU1BBVEg8L2NvZGU+IGVudmlyb25tZW50IHZhcmlhYmxlLgorICogPHA+CisgKiBIb3dldmVyLCBzb21lIGNsYXNzZXMgbWF5IG5vdCBvcmlnaW5hdGUgZnJvbSBhIGZpbGU7IHRoZXkgbWF5CisgKiBvcmlnaW5hdGUgZnJvbSBvdGhlciBzb3VyY2VzLCBzdWNoIGFzIHRoZSBuZXR3b3JrLCBvciB0aGV5IGNvdWxkCisgKiBiZSBjb25zdHJ1Y3RlZCBieSBhbiBhcHBsaWNhdGlvbi4gVGhlIG1ldGhvZAorICogPGNvZGU+ZGVmaW5lQ2xhc3M8L2NvZGU+IGNvbnZlcnRzIGFuIGFycmF5IG9mIGJ5dGVzIGludG8gYW4KKyAqIGluc3RhbmNlIG9mIGNsYXNzIDxjb2RlPkNsYXNzPC9jb2RlPi4gSW5zdGFuY2VzIG9mIHRoaXMgbmV3bHkKKyAqIGRlZmluZWQgY2xhc3MgY2FuIGJlIGNyZWF0ZWQgdXNpbmcgdGhlIDxjb2RlPm5ld0luc3RhbmNlPC9jb2RlPgorICogbWV0aG9kIGluIGNsYXNzIDxjb2RlPkNsYXNzPC9jb2RlPi4KKyAqIDxwPgorICogVGhlIG1ldGhvZHMgYW5kIGNvbnN0cnVjdG9ycyBvZiBvYmplY3RzIGNyZWF0ZWQgYnkgYSBjbGFzcyBsb2FkZXIKKyAqIG1heSByZWZlcmVuY2Ugb3RoZXIgY2xhc3Nlcy4gVG8gZGV0ZXJtaW5lIHRoZSBjbGFzcyhlcykgcmVmZXJyZWQKKyAqIHRvLCB0aGUgSmF2YSB2aXJ0dWFsIG1hY2hpbmUgY2FsbHMgdGhlIDxjb2RlPmxvYWRDbGFzczwvY29kZT4KKyAqIG1ldGhvZCBvZiB0aGUgY2xhc3MgbG9hZGVyIHRoYXQgb3JpZ2luYWxseSBjcmVhdGVkIHRoZSBjbGFzcy4KKyAqIDxwPgorICogRm9yIGV4YW1wbGUsIGFuIGFwcGxpY2F0aW9uIGNvdWxkIGNyZWF0ZSBhIG5ldHdvcmsgY2xhc3MgbG9hZGVyCisgKiB0byBkb3dubG9hZCBjbGFzcyBmaWxlcyBmcm9tIGEgc2VydmVyLiBTYW1wbGUgY29kZSBtaWdodCBsb29rIGxpa2U6CisgKiA8YmxvY2txdW90ZT48cHJlPgorICogICBDbGFzc0xvYWRlciBsb2FkZXImbmJzcDs9IG5ldyBOZXR3b3JrQ2xhc3NMb2FkZXIoaG9zdCwmbmJzcDtwb3J0KTsKKyAqICAgT2JqZWN0IG1haW4mbmJzcDs9IGxvYWRlci5sb2FkQ2xhc3MoIk1haW4iLCB0cnVlKS5uZXdJbnN0YW5jZSgpOworICoJICZuYnNwOy4mbmJzcDsuJm5ic3A7LgorICogPC9wcmU+PC9ibG9ja3F1b3RlPgorICogPHA+CisgKiBUaGUgbmV0d29yayBjbGFzcyBsb2FkZXIgc3ViY2xhc3MgbXVzdCBkZWZpbmUgdGhlIG1ldGhvZHMKKyAqIDxjb2RlPmZpbmRDbGFzczwvY29kZT4gYW5kIDxjb2RlPmxvYWRDbGFzc0RhdGE8L2NvZGU+CisgKiB0byBsb2FkIGEgY2xhc3MgZnJvbSB0aGUgbmV0d29yay4gT25jZSBpdAorICogaGFzIGRvd25sb2FkZWQgdGhlIGJ5dGVzIHRoYXQgbWFrZSB1cCB0aGUgY2xhc3MsIGl0IHNob3VsZCB1c2UgdGhlCisgKiBtZXRob2QgPGNvZGU+ZGVmaW5lQ2xhc3M8L2NvZGU+IHRvIGNyZWF0ZSBhIGNsYXNzIGluc3RhbmNlLiBBCisgKiBzYW1wbGUgaW1wbGVtZW50YXRpb24gaXM6CisgKiA8cD48aHI+PGJsb2NrcXVvdGU+PHByZT4KKyAqICAgICBjbGFzcyBOZXR3b3JrQ2xhc3NMb2FkZXIgZXh0ZW5kcyBDbGFzc0xvYWRlciB7CisgKiAgICAgICAgIFN0cmluZyBob3N0OworICogICAgICAgICBpbnQgcG9ydDsKKyAqCisgKiAgICAgICAgIHB1YmxpYyBDbGFzcyBmaW5kQ2xhc3MoU3RyaW5nIG5hbWUpIHsKKyAqICAgICAgICAgICAgIGJ5dGVbXSBiID0gbG9hZENsYXNzRGF0YShuYW1lKTsKKyAqICAgICAgICAgICAgIHJldHVybiBkZWZpbmVDbGFzcyhuYW1lLCBiLCAwLCBiLmxlbmd0aCk7CisgKiAgICAgICAgIH0KKyAqCisgKiAgICAgICAgIHByaXZhdGUgYnl0ZVtdIGxvYWRDbGFzc0RhdGEoU3RyaW5nIG5hbWUpIHsKKyAqICAgICAgICAgICAgIC8vIGxvYWQgdGhlIGNsYXNzIGRhdGEgZnJvbSB0aGUgY29ubmVjdGlvbgorICogICAgICAgICAgICAgJm5ic3A7LiZuYnNwOy4mbmJzcDsuCisgKiAgICAgICAgIH0KKyAqICAgICB9CisgKiA8L3ByZT48L2Jsb2NrcXVvdGU+PGhyPgorICoKKyAqIEB2ZXJzaW9uIDEuMTYyLCAwMy8xOS8wMgorICogQHNlZSAgICAgamF2YS5sYW5nLkNsYXNzCisgKiBAc2VlICAgICBqYXZhLmxhbmcuQ2xhc3MjbmV3SW5zdGFuY2UoKQorICogQHNlZSAgICAgamF2YS5sYW5nLkNsYXNzTG9hZGVyI2RlZmluZUNsYXNzKGJ5dGVbXSwgaW50LCBpbnQpCisgKiBAc2VlICAgICBqYXZhLmxhbmcuQ2xhc3NMb2FkZXIjbG9hZENsYXNzKGphdmEubGFuZy5TdHJpbmcsIGJvb2xlYW4pCisgKiBAc2VlICAgICBqYXZhLmxhbmcuQ2xhc3NMb2FkZXIjcmVzb2x2ZUNsYXNzKGphdmEubGFuZy5DbGFzcykKKyAqIEBzaW5jZSAgIEpESzEuMAorICovCitwdWJsaWMgYWJzdHJhY3QgY2xhc3MgQ2xhc3NMb2FkZXIgeworCisgICAgcHJpdmF0ZSBzdGF0aWMgbmF0aXZlIHZvaWQgcmVnaXN0ZXJOYXRpdmVzKCk7CisgICAgc3RhdGljIHsKKyAgICAgICAgcmVnaXN0ZXJOYXRpdmVzKCk7CisgICAgfQorCisgICAgLyoKKyAgICAgKiBJZiBpbml0aWFsaXphdGlvbiBzdWNjZWVkIHRoaXMgaXMgc2V0IHRvIHRydWUgYW5kIHNlY3VyaXR5IGNoZWNrcyB3aWxsCisgICAgICogc3VjY2VlZC4gT3RoZXJ3aXNlIHRoZSBvYmplY3QgaXMgbm90IGluaXRpYWxpemVkIGFuZCB0aGUgb2JqZWN0IGlzCisgICAgICogdXNlbGVzcy4KKyAgICAgKi8KKyAgICBwcml2YXRlIGJvb2xlYW4gaW5pdGlhbGl6ZWQgPSBmYWxzZTsKKworICAgIC8qCisgICAgICogVGhlIHBhcmVudCBjbGFzcyBsb2FkZXIgZm9yIGRlbGVnYXRpb24uCisgICAgICovCisgICAgcHJpdmF0ZSBDbGFzc0xvYWRlciBwYXJlbnQ7CisKKyAgICAvKgorICAgICAqIEhhc2h0YWJsZSB0aGF0IG1hcHMgcGFja2FnZXMgdG8gY2VydHMKKyAgICAgKi8KKyAgICBwcml2YXRlIEhhc2h0YWJsZSBwYWNrYWdlMmNlcnRzID0gbmV3IEhhc2h0YWJsZSgxMSk7CisKKyAgICAvKgorICAgICAqIHNoYXJlZCBhbW9uZyBhbGwgcGFja2FnZXMgd2l0aCB1bnNpZ25lZCBjbGFzc2VzCisgICAgICovCisgICAgamF2YS5zZWN1cml0eS5jZXJ0LkNlcnRpZmljYXRlW10gbm9jZXJ0czsKKworICAgIC8qCisgICAgICogVGhlIGNsYXNzZXMgbG9hZGVkIGJ5IHRoaXMgY2xhc3MgbG9hZGVyLiBUaGUgb25seSBwdXJwb3NlIG9mIHRoaXMKKyAgICAgKiB0YWJsZSBpcyB0byBrZWVwIHRoZSBjbGFzc2VzIGZyb20gYmVpbmcgR0MnZWQgdW50aWwgdGhlIGxvYWRlcgorICAgICAqIGlzIEdDJ2VkLgorICAgICAqLworICAgIHByaXZhdGUgVmVjdG9yIGNsYXNzZXMgPSBuZXcgVmVjdG9yKCk7CisKKyAgICAvKgorICAgICAqIFRoZSBpbml0aWF0aW5nIHByb3RlY3Rpb24gZG9tYWlucyBmb3IgYWxsIGNsYXNzZXMKKyAgICAgKiBsb2FkZWQgYnkgdGhpcyBsb2FkZXIuCisgICAgICovCisgICAgcHJpdmF0ZSBTZXQgZG9tYWlucyA9IG5ldyBIYXNoU2V0KCk7CisKKyAgICAvKgorICAgICAqIENhbGxlZCBieSB0aGUgVk0gdG8gcmVjb3JkIGV2ZXJ5IGxvYWRlZCBjbGFzcyB3aXRoIHRoaXMgbG9hZGVyLgorICAgICAqLworICAgIHZvaWQgYWRkQ2xhc3MoQ2xhc3MgYykgeworICAgICAgICBjbGFzc2VzLmFkZEVsZW1lbnQoYyk7CisgICAgfQorCisgICAgLyoKKyAgICAgKiBUaGUgcGFja2FnZXMgZGVmaW5lZCBpbiB0aGlzIGNsYXNzIGxvYWRlci4gRWFjaCBwYWNrYWdlIG5hbWUgaXMKKyAgICAgKiBtYXBwZWQgdG8gaXRzIGNvcnJlc3BvbmRpbmcgUGFja2FnZSBvYmplY3QuCisgICAgICovCisgICAgcHJpdmF0ZSBIYXNoTWFwIHBhY2thZ2VzID0gbmV3IEhhc2hNYXAoKTsKKworICAgIC8qKgorICAgICAqIENyZWF0ZXMgYSBuZXcgY2xhc3MgbG9hZGVyIHVzaW5nIHRoZSBzcGVjaWZpZWQgcGFyZW50IGNsYXNzIGxvYWRlcgorICAgICAqIGZvciBkZWxlZ2F0aW9uLgorICAgICAqIDxwPgorICAgICAqIElmIHRoZXJlIGlzIGEgc2VjdXJpdHkgbWFuYWdlciwgaXRzIDxjb2RlPmNoZWNrQ3JlYXRlQ2xhc3NMb2FkZXI8L2NvZGU+CisgICAgICogbWV0aG9kIGlzIGNhbGxlZC4gVGhpcyBtYXkgcmVzdWx0IGluIGEgc2VjdXJpdHkgZXhjZXB0aW9uLgorICAgICAqCisgICAgICogQHBhcmFtIHBhcmVudCB0aGUgcGFyZW50IGNsYXNzIGxvYWRlcgorICAgICAqCisgICAgICogQHRocm93cyAgU2VjdXJpdHlFeGNlcHRpb24gaWYgYSBzZWN1cml0eSBtYW5hZ2VyIGV4aXN0cyBhbmQgaXRzCisgICAgICogPGNvZGU+Y2hlY2tDcmVhdGVDbGFzc0xvYWRlcjwvY29kZT4gbWV0aG9kIGRvZXNuJ3QgYWxsb3cgY3JlYXRpb24gb2YgYQorICAgICAqIG5ldyBjbGFzcyBsb2FkZXIuCisgICAgICogQHNlZSAgICAgICBqYXZhLmxhbmcuU2VjdXJpdHlFeGNlcHRpb24KKyAgICAgKiBAc2VlICAgICAgIGphdmEubGFuZy5TZWN1cml0eU1hbmFnZXIjY2hlY2tDcmVhdGVDbGFzc0xvYWRlcigpCisgICAgICogQHNpbmNlICAgICAxLjIKKyAgICAgKi8KKyAgICBwcm90ZWN0ZWQgQ2xhc3NMb2FkZXIoQ2xhc3NMb2FkZXIgcGFyZW50KSB7CisJU2VjdXJpdHlNYW5hZ2VyIHNlY3VyaXR5ID0gU3lzdGVtLmdldFNlY3VyaXR5TWFuYWdlcigpOworCWlmIChzZWN1cml0eSAhPSBudWxsKSB7CisJICAgIHNlY3VyaXR5LmNoZWNrQ3JlYXRlQ2xhc3NMb2FkZXIoKTsKKwl9CisJdGhpcy5wYXJlbnQgPSBwYXJlbnQ7CisJaW5pdGlhbGl6ZWQgPSB0cnVlOworICAgIH0KKworICAgIC8qKgorICAgICAqIENyZWF0ZXMgYSBuZXcgY2xhc3MgbG9hZGVyIHVzaW5nIHRoZSA8Y29kZT5DbGFzc0xvYWRlcjwvY29kZT4KKyAgICAgKiByZXR1cm5lZCBieSB0aGUgbWV0aG9kIDxjb2RlPmdldFN5c3RlbUNsYXNzTG9hZGVyKCk8L2NvZGU+IGFzIHRoZQorICAgICAqIHBhcmVudCBjbGFzcyBsb2FkZXIuCisgICAgICogPHA+CisgICAgICogSWYgdGhlcmUgaXMgYSBzZWN1cml0eSBtYW5hZ2VyLCBpdHMgPGNvZGU+Y2hlY2tDcmVhdGVDbGFzc0xvYWRlcjwvY29kZT4KKyAgICAgKiBtZXRob2QgaXMgY2FsbGVkLiBUaGlzIG1heSByZXN1bHQgaW4gYSBzZWN1cml0eSBleGNlcHRpb24uCisgICAgICoKKyAgICAgKiBAdGhyb3dzICBTZWN1cml0eUV4Y2VwdGlvbgorICAgICAqICAgIGlmIGEgc2VjdXJpdHkgbWFuYWdlciBleGlzdHMgYW5kIGl0cyA8Y29kZT5jaGVja0NyZWF0ZUNsYXNzTG9hZGVyPC9jb2RlPgorICAgICAqICAgIG1ldGhvZCBkb2Vzbid0IGFsbG93IGNyZWF0aW9uIG9mIGEgbmV3IGNsYXNzIGxvYWRlci4KKyAgICAgKgorICAgICAqIEBzZWUgICAgICAgamF2YS5sYW5nLlNlY3VyaXR5RXhjZXB0aW9uCisgICAgICogQHNlZSAgICAgICBqYXZhLmxhbmcuU2VjdXJpdHlNYW5hZ2VyI2NoZWNrQ3JlYXRlQ2xhc3NMb2FkZXIoKQorICAgICAqLworICAgIHByb3RlY3RlZCBDbGFzc0xvYWRlcigpIHsKKwlTZWN1cml0eU1hbmFnZXIgc2VjdXJpdHkgPSBTeXN0ZW0uZ2V0U2VjdXJpdHlNYW5hZ2VyKCk7CisJaWYgKHNlY3VyaXR5ICE9IG51bGwpIHsKKwkgICAgc2VjdXJpdHkuY2hlY2tDcmVhdGVDbGFzc0xvYWRlcigpOworCX0KKwl0aGlzLnBhcmVudCA9IGdldFN5c3RlbUNsYXNzTG9hZGVyKCk7CisJaW5pdGlhbGl6ZWQgPSB0cnVlOworICAgIH0KKworICAgIC8qKgorICAgICAqIExvYWRzIHRoZSBjbGFzcyB3aXRoIHRoZSBzcGVjaWZpZWQgbmFtZS4gVGhpcyBtZXRob2Qgc2VhcmNoZXMgZm9yCisgICAgICogY2xhc3NlcyBpbiB0aGUgc2FtZSBtYW5uZXIgYXMgdGhlIHtAbGluayAjbG9hZENsYXNzKFN0cmluZywgYm9vbGVhbil9CisgICAgICogbWV0aG9kLiBJdCBpcyBjYWxsZWQgYnkgdGhlIEphdmEgdmlydHVhbCBtYWNoaW5lIHRvIHJlc29sdmUgY2xhc3MKKyAgICAgKiByZWZlcmVuY2VzLiBDYWxsaW5nIHRoaXMgbWV0aG9kIGlzIGVxdWl2YWxlbnQgdG8gY2FsbGluZworICAgICAqIDxjb2RlPmxvYWRDbGFzcyhuYW1lLCBmYWxzZSk8L2NvZGU+LgorICAgICAqCisgICAgICogQHBhcmFtICAgICBuYW1lIHRoZSBuYW1lIG9mIHRoZSBjbGFzcworICAgICAqIEByZXR1cm4gICAgdGhlIHJlc3VsdGluZyA8Y29kZT5DbGFzczwvY29kZT4gb2JqZWN0CisgICAgICogQGV4Y2VwdGlvbiBDbGFzc05vdEZvdW5kRXhjZXB0aW9uIGlmIHRoZSBjbGFzcyB3YXMgbm90IGZvdW5kCisgICAgICovCisgICAgcHVibGljIENsYXNzIGxvYWRDbGFzcyhTdHJpbmcgbmFtZSkgdGhyb3dzIENsYXNzTm90Rm91bmRFeGNlcHRpb24KKyAgICB7CisJcmV0dXJuIGxvYWRDbGFzcyhuYW1lLCBmYWxzZSk7CisgICAgfQorCisgICAgLyoqCisgICAgICogTG9hZHMgdGhlIGNsYXNzIHdpdGggdGhlIHNwZWNpZmllZCBuYW1lLiAgVGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gb2YKKyAgICAgKiB0aGlzIG1ldGhvZCBzZWFyY2hlcyBmb3IgY2xhc3NlcyBpbiB0aGUgZm9sbG93aW5nIG9yZGVyOjxwPgorICAgICAqCisgICAgICogPG9sPgorICAgICAqIDxsaT4gQ2FsbCB7QGxpbmsgI2ZpbmRMb2FkZWRDbGFzcyhTdHJpbmcpfSB0byBjaGVjayBpZiB0aGUgY2xhc3MgaGFzCisgICAgICogICAgICBhbHJlYWR5IGJlZW4gbG9hZGVkLiA8cD4KKyAgICAgKiA8bGk+IENhbGwgdGhlIDxjb2RlPmxvYWRDbGFzczwvY29kZT4gbWV0aG9kIG9uIHRoZSBwYXJlbnQgY2xhc3MKKyAgICAgKiAgICAgIGxvYWRlci4gIElmIHRoZSBwYXJlbnQgaXMgPGNvZGU+bnVsbDwvY29kZT4gdGhlIGNsYXNzIGxvYWRlcgorICAgICAqICAgICAgYnVpbHQtaW4gdG8gdGhlIHZpcnR1YWwgbWFjaGluZSBpcyB1c2VkLCBpbnN0ZWFkLiA8cD4KKyAgICAgKiA8bGk+IENhbGwgdGhlIHtAbGluayAjZmluZENsYXNzKFN0cmluZyl9IG1ldGhvZCB0byBmaW5kIHRoZSBjbGFzcy4gPHA+CisgICAgICogPC9vbD4KKyAgICAgKgorICAgICAqIElmIHRoZSBjbGFzcyB3YXMgZm91bmQgdXNpbmcgdGhlIGFib3ZlIHN0ZXBzLCBhbmQgdGhlCisgICAgICogPGNvZGU+cmVzb2x2ZTwvY29kZT4gZmxhZyBpcyB0cnVlLCB0aGlzIG1ldGhvZCB3aWxsIHRoZW4gY2FsbCB0aGUKKyAgICAgKiB7QGxpbmsgI3Jlc29sdmVDbGFzcyhDbGFzcyl9IG1ldGhvZCBvbiB0aGUgcmVzdWx0aW5nIGNsYXNzIG9iamVjdC4KKyAgICAgKiA8cD4KKyAgICAgKiBGcm9tIHRoZSBKYXZhIDIgU0RLLCB2MS4yLCBzdWJjbGFzc2VzIG9mIENsYXNzTG9hZGVyIGFyZQorICAgICAqIGVuY291cmFnZWQgdG8gb3ZlcnJpZGUKKyAgICAgKiB7QGxpbmsgI2ZpbmRDbGFzcyhTdHJpbmcpfSwgcmF0aGVyIHRoYW4gdGhpcyBtZXRob2QuPHA+CisgICAgICoKKyAgICAgKiBAcGFyYW0gICAgIG5hbWUgdGhlIG5hbWUgb2YgdGhlIGNsYXNzCisgICAgICogQHBhcmFtICAgICByZXNvbHZlIGlmIDxjb2RlPnRydWU8L2NvZGU+IHRoZW4gcmVzb2x2ZSB0aGUgY2xhc3MKKyAgICAgKiBAcmV0dXJuCSAgdGhlIHJlc3VsdGluZyA8Y29kZT5DbGFzczwvY29kZT4gb2JqZWN0CisgICAgICogQGV4Y2VwdGlvbiBDbGFzc05vdEZvdW5kRXhjZXB0aW9uIGlmIHRoZSBjbGFzcyBjb3VsZCBub3QgYmUgZm91bmQKKyAgICAgKi8KKyAgICBwcm90ZWN0ZWQgc3luY2hyb25pemVkIENsYXNzIGxvYWRDbGFzcyhTdHJpbmcgbmFtZSwgYm9vbGVhbiByZXNvbHZlKQorCXRocm93cyBDbGFzc05vdEZvdW5kRXhjZXB0aW9uCisgICAgeworCS8vIEZpcnN0LCBjaGVjayBpZiB0aGUgY2xhc3MgaGFzIGFscmVhZHkgYmVlbiBsb2FkZWQKKwlDbGFzcyBjID0gZmluZExvYWRlZENsYXNzKG5hbWUpOworCWlmIChjID09IG51bGwpIHsKKwkgICAgdHJ5IHsKKwkJaWYgKHBhcmVudCAhPSBudWxsKSB7CisJCSAgICBjID0gcGFyZW50LmxvYWRDbGFzcyhuYW1lLCBmYWxzZSk7CisJCX0gZWxzZSB7CisJCSAgICBjID0gZmluZEJvb3RzdHJhcENsYXNzMChuYW1lKTsKKwkJfQorCSAgICB9IGNhdGNoIChDbGFzc05vdEZvdW5kRXhjZXB0aW9uIGUpIHsKKwkgICAgICAgIC8vIElmIHN0aWxsIG5vdCBmb3VuZCwgdGhlbiBjYWxsIGZpbmRDbGFzcyBpbiBvcmRlcgorCSAgICAgICAgLy8gdG8gZmluZCB0aGUgY2xhc3MuCisJICAgICAgICBjID0gZmluZENsYXNzKG5hbWUpOworCSAgICB9CisJfQorCWlmIChyZXNvbHZlKSB7CisJICAgIHJlc29sdmVDbGFzcyhjKTsKKwl9CisJcmV0dXJuIGM7CisgICAgfQorCisgICAgLyoKKyAgICAgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgdGhlIHZpcnR1YWwgbWFjaGluZSB0byBsb2FkCisgICAgICogYSBjbGFzcy4KKyAgICAgKi8KKyAgICBwcml2YXRlIHN5bmNocm9uaXplZCBDbGFzcyBsb2FkQ2xhc3NJbnRlcm5hbChTdHJpbmcgbmFtZSkKKwl0aHJvd3MgQ2xhc3NOb3RGb3VuZEV4Y2VwdGlvbiB7CisKKwlyZXR1cm4gbG9hZENsYXNzKG5hbWUpOworICAgIH0KKworICAgIHByaXZhdGUgdm9pZCBjaGVja1BhY2thZ2VBY2Nlc3MoQ2xhc3MgY2xzLCBQcm90ZWN0aW9uRG9tYWluIHBkKSB7CisJZmluYWwgU2VjdXJpdHlNYW5hZ2VyIHNtID0gU3lzdGVtLmdldFNlY3VyaXR5TWFuYWdlcigpOworCWlmIChzbSAhPSBudWxsKSB7CisJICAgIGZpbmFsIFN0cmluZyBuYW1lID0gY2xzLmdldE5hbWUoKTsKKyAgICAgICAgICAgIGZpbmFsIGludCBpID0gbmFtZS5sYXN0SW5kZXhPZignLicpOworCSAgICBpZiAoaSAhPSAtMSkgeworICAgICAgICAgICAgICAgIEFjY2Vzc0NvbnRyb2xsZXIuZG9Qcml2aWxlZ2VkKG5ldyBQcml2aWxlZ2VkQWN0aW9uKCkgeworICAgICAgICAgICAgICAgICAgICBwdWJsaWMgT2JqZWN0IHJ1bigpIHsKKwkJICAgICAgICBzbS5jaGVja1BhY2thZ2VBY2Nlc3MobmFtZS5zdWJzdHJpbmcoMCwgaSkpOworCQkgICAgICAgIHJldHVybiBudWxsOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSwgbmV3IEFjY2Vzc0NvbnRyb2xDb250ZXh0KG5ldyBQcm90ZWN0aW9uRG9tYWluW10ge3BkfSkpOworCSAgICB9CisJfQorCWRvbWFpbnMuYWRkKHBkKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBGaW5kcyB0aGUgc3BlY2lmaWVkIGNsYXNzLiBUaGlzIG1ldGhvZCBzaG91bGQgYmUgb3ZlcnJpZGRlbgorICAgICAqIGJ5IGNsYXNzIGxvYWRlciBpbXBsZW1lbnRhdGlvbnMgdGhhdCBmb2xsb3cgdGhlIG5ldyBkZWxlZ2F0aW9uIG1vZGVsCisgICAgICogZm9yIGxvYWRpbmcgY2xhc3NlcywgYW5kIHdpbGwgYmUgY2FsbGVkIGJ5IHRoZSA8Y29kZT5sb2FkQ2xhc3M8L2NvZGU+CisgICAgICogbWV0aG9kIGFmdGVyIGNoZWNraW5nIHRoZSBwYXJlbnQgY2xhc3MgbG9hZGVyIGZvciB0aGUgcmVxdWVzdGVkIGNsYXNzLgorICAgICAqIFRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHRocm93cyA8Y29kZT5DbGFzc05vdEZvdW5kRXhjZXB0aW9uPC9jb2RlPi4KKyAgICAgKgorICAgICAqIEBwYXJhbSAgbmFtZSB0aGUgbmFtZSBvZiB0aGUgY2xhc3MKKyAgICAgKiBAcmV0dXJuIHRoZSByZXN1bHRpbmcgPGNvZGU+Q2xhc3M8L2NvZGU+IG9iamVjdAorICAgICAqIEBleGNlcHRpb24gQ2xhc3NOb3RGb3VuZEV4Y2VwdGlvbiBpZiB0aGUgY2xhc3MgY291bGQgbm90IGJlIGZvdW5kCisgICAgICogQHNpbmNlICAxLjIKKyAgICAgKi8KKyAgICBwcm90ZWN0ZWQgQ2xhc3MgZmluZENsYXNzKFN0cmluZyBuYW1lKSB0aHJvd3MgQ2xhc3NOb3RGb3VuZEV4Y2VwdGlvbiB7CisJdGhyb3cgbmV3IENsYXNzTm90Rm91bmRFeGNlcHRpb24obmFtZSk7CisgICAgfQorCisgICAgLyoqCisgICAgICogQ29udmVydHMgYW4gYXJyYXkgb2YgYnl0ZXMgaW50byBhbiBpbnN0YW5jZSBvZiBjbGFzcworICAgICAqIDxjb2RlPkNsYXNzPC9jb2RlPi4gIEJlZm9yZSB0aGUgQ2xhc3MgY2FuIGJlIHVzZWQgaXQgbXVzdCBiZQorICAgICAqIHJlc29sdmVkLiBUaGlzIG1ldGhvZCBpcyBkZXByZWNhdGVkIGluIGZhdm9yIG9mIHRoZSB2ZXJzaW9uCisgICAgICogdGhhdCB0YWtlcyB0aGUgY2xhc3MgbmFtZSBhcyBpdHMgZmlyc3QgYXJndW1lbnQsIGFuZCBpcyBtb3JlCisgICAgICogc2VjdXJlLgorICAgICAqCisgICAgICogQHBhcmFtICAgICAgYiAgIHRoZSBieXRlcyB0aGF0IG1ha2UgdXAgdGhlIGNsYXNzIGRhdGEuIFRoZSBieXRlcyBpbgorICAgICAqICAgICAgICAgICAgIHBvc2l0aW9ucyA8Y29kZT5vZmY8L2NvZGU+IHRocm91Z2ggPGNvZGU+b2ZmK2xlbi0xPC9jb2RlPgorICAgICAqICAgICAgICAgICAgIHNob3VsZCBoYXZlIHRoZSBmb3JtYXQgb2YgYSB2YWxpZCBjbGFzcyBmaWxlIGFzIGRlZmluZWQKKyAgICAgKiAgICAgICAgICAgICBieSB0aGUKKyAgICAgKiAgICAgICAgICAgICA8YSBocmVmPSJodHRwOi8vamF2YS5zdW4uY29tL2RvY3MvYm9va3Mvdm1zcGVjLyI+SmF2YQorICAgICAqICAgICAgICAgICAgIFZpcnR1YWwgTWFjaGluZSBTcGVjaWZpY2F0aW9uPC9hPi4KKyAgICAgKiBAcGFyYW0gICAgICBvZmYgIHRoZSBzdGFydCBvZmZzZXQgaW4gPGNvZGU+YjwvY29kZT4gb2YgdGhlIGNsYXNzIGRhdGEKKyAgICAgKiBAcGFyYW0gICAgICBsZW4gdGhlIGxlbmd0aCBvZiB0aGUgY2xhc3MgZGF0YQorICAgICAqIEByZXR1cm4gICAgIHRoZSA8Y29kZT5DbGFzczwvY29kZT4gb2JqZWN0IHRoYXQgd2FzIGNyZWF0ZWQgZnJvbSB0aGUKKyAgICAgKiAgICAgICAgICAgICBzcGVjaWZpZWQgY2xhc3MgZGF0YQorICAgICAqIEBleGNlcHRpb24gIENsYXNzRm9ybWF0RXJyb3IgaWYgdGhlIGRhdGEgZGlkIG5vdCBjb250YWluIGEgdmFsaWQgY2xhc3MKKyAgICAgKiBAZXhjZXB0aW9uICBJbmRleE91dE9mQm91bmRzRXhjZXB0aW9uIGlmIGVpdGhlciA8Y29kZT5vZmY8L2NvZGU+IG9yCisgICAgICogICAgICAgICAgICAgPGNvZGU+bGVuPC9jb2RlPiBpcyBuZWdhdGl2ZSwgb3IgaWYKKyAgICAgKiAgICAgICAgICAgICA8Y29kZT5vZmYrbGVuPC9jb2RlPiBpcyBncmVhdGVyIHRoYW4gPGNvZGU+Yi5sZW5ndGg8L2NvZGU+LgorICAgICAqIEBzZWUgICAgICAgIENsYXNzTG9hZGVyI2xvYWRDbGFzcyhqYXZhLmxhbmcuU3RyaW5nLCBib29sZWFuKQorICAgICAqIEBzZWUgICAgICAgIENsYXNzTG9hZGVyI3Jlc29sdmVDbGFzcyhqYXZhLmxhbmcuQ2xhc3MpCisgICAgICogQGRlcHJlY2F0ZWQgUmVwbGFjZWQgYnkgZGVmaW5lQ2xhc3MoamF2YS5sYW5nLlN0cmluZywgYnl0ZVtdLCBpbnQsIGludCkKKyAgICAgKi8KKyAgICBwcm90ZWN0ZWQgZmluYWwgQ2xhc3MgZGVmaW5lQ2xhc3MoYnl0ZVtdIGIsIGludCBvZmYsIGludCBsZW4pCisJdGhyb3dzIENsYXNzRm9ybWF0RXJyb3IKKyAgICB7CisJcmV0dXJuIGRlZmluZUNsYXNzKG51bGwsIGIsIG9mZiwgbGVuLCBudWxsKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDb252ZXJ0cyBhbiBhcnJheSBvZiBieXRlcyBpbnRvIGFuIGluc3RhbmNlIG9mIGNsYXNzIDxjb2RlPkNsYXNzPC9jb2RlPi4KKyAgICAgKiBCZWZvcmUgdGhlIENsYXNzIGNhbiBiZSB1c2VkIGl0IG11c3QgYmUgcmVzb2x2ZWQuCisgICAgICogPHA+CisgICAgICogVGhpcyBtZXRob2QgYXNzaWducyBhIGRlZmF1bHQgPGNvZGU+UHJvdGVjdGlvbkRvbWFpbjwvY29kZT4gdG8KKyAgICAgKiB0aGUgbmV3bHkgZGVmaW5lZCBjbGFzcy4gVGhlIDxjb2RlPlByb3RlY3Rpb25Eb21haW48L2NvZGU+CisgICAgICogY29udGFpbnMgdGhlIHNldCBvZiBwZXJtaXNzaW9ucyBncmFudGVkIHdoZW4KKyAgICAgKiBhIGNhbGwgdG8gPGNvZGU+UG9saWN5LmdldFBvbGljeSgpLmdldFBlcm1pc3Npb25zKCk8L2NvZGU+IGlzIG1hZGUgd2l0aAorICAgICAqIGEgY29kZSBzb3VyY2Ugb2YgPGNvZGU+bnVsbCxudWxsPC9jb2RlPi4gVGhlIGRlZmF1bHQgZG9tYWluIGlzCisgICAgICogY3JlYXRlZCBvbiB0aGUgZmlyc3QgaW52b2NhdGlvbiBvZiA8Y29kZT5kZWZpbmVDbGFzczwvY29kZT4sIGFuZAorICAgICAqIHJlLXVzZWQgb24gc3Vic2VxdWVudCBjYWxscy4KKyAgICAgKiA8cD4KKyAgICAgKiBUbyBhc3NpZ24gYSBzcGVjaWZpYyA8Y29kZT5Qcm90ZWN0aW9uRG9tYWluPC9jb2RlPiB0byB0aGUgY2xhc3MsCisgICAgICogdXNlIHRoZSA8Y29kZT5kZWZpbmVDbGFzczwvY29kZT4gbWV0aG9kIHRoYXQgdGFrZXMgYQorICAgICAqIDxjb2RlPlByb3RlY3Rpb25Eb21haW48L2NvZGU+IGFzIG9uZSBvZiBpdHMgYXJndW1lbnRzLgorICAgICAqCisgICAgICogQHBhcmFtICAgICAgbmFtZSB0aGUgZXhwZWN0ZWQgbmFtZSBvZiB0aGUgY2xhc3MsIG9yIDxjb2RlPm51bGw8L2NvZGU+CisgICAgICogICAgICAgICAgICAgICAgICBpZiBub3Qga25vd24sIHVzaW5nICcuJyBhbmQgbm90ICcvJyBhcyB0aGUgc2VwYXJhdG9yCisgICAgICogICAgICAgICAgICAgICAgICBhbmQgd2l0aG91dCBhIHRyYWlsaW5nICIuY2xhc3MiIHN1ZmZpeC4KKyAgICAgKiBAcGFyYW0gICAgICBiICAgIHRoZSBieXRlcyB0aGF0IG1ha2UgdXAgdGhlIGNsYXNzIGRhdGEuIFRoZSBieXRlcyBpbgorICAgICAqICAgICAgICAgICAgIHBvc2l0aW9ucyA8Y29kZT5vZmY8L2NvZGU+IHRocm91Z2ggPGNvZGU+b2ZmK2xlbi0xPC9jb2RlPgorICAgICAqICAgICAgICAgICAgIHNob3VsZCBoYXZlIHRoZSBmb3JtYXQgb2YgYSB2YWxpZCBjbGFzcyBmaWxlIGFzIGRlZmluZWQKKyAgICAgKiAgICAgICAgICAgICBieSB0aGUKKyAgICAgKiAgICAgICAgICAgICA8YSBocmVmPSJodHRwOi8vamF2YS5zdW4uY29tL2RvY3MvYm9va3Mvdm1zcGVjLyI+SmF2YQorICAgICAqICAgICAgICAgICAgIFZpcnR1YWwgTWFjaGluZSBTcGVjaWZpY2F0aW9uPC9hPi4KKyAgICAgKiBAcGFyYW0gICAgICBvZmYgIHRoZSBzdGFydCBvZmZzZXQgaW4gPGNvZGU+YjwvY29kZT4gb2YgdGhlIGNsYXNzIGRhdGEKKyAgICAgKiBAcGFyYW0gICAgICBsZW4gIHRoZSBsZW5ndGggb2YgdGhlIGNsYXNzIGRhdGEKKyAgICAgKiBAcmV0dXJuICAgICB0aGUgPGNvZGU+Q2xhc3M8L2NvZGU+IG9iamVjdCB0aGF0IHdhcyBjcmVhdGVkIGZyb20gdGhlCisgICAgICogICAgICAgICAgICAgc3BlY2lmaWVkIGNsYXNzIGRhdGEKKyAgICAgKiBAZXhjZXB0aW9uICBDbGFzc0Zvcm1hdEVycm9yIGlmIHRoZSBkYXRhIGRpZCBub3QgY29udGFpbiBhIHZhbGlkIGNsYXNzCisgICAgICogQGV4Y2VwdGlvbiAgSW5kZXhPdXRPZkJvdW5kc0V4Y2VwdGlvbiBpZiBlaXRoZXIgPGNvZGU+b2ZmPC9jb2RlPiBvcgorICAgICAqICAgICAgICAgICAgIDxjb2RlPmxlbjwvY29kZT4gaXMgbmVnYXRpdmUsIG9yIGlmCisgICAgICogICAgICAgICAgICAgPGNvZGU+b2ZmK2xlbjwvY29kZT4gaXMgZ3JlYXRlciB0aGFuIDxjb2RlPmIubGVuZ3RoPC9jb2RlPi4KKyAgICAgKiBAZXhjZXB0aW9uICBTZWN1cml0eUV4Y2VwdGlvbiBpZiBhbiBhdHRlbXB0IGlzIG1hZGUgdG8gYWRkIHRoaXMgY2xhc3MKKyAgICAgKiAgICAgICAgICAgICB0byBhIHBhY2thZ2UgdGhhdCBjb250YWlucyBjbGFzc2VzIHRoYXQgd2VyZSBzaWduZWQgYnkKKyAgICAgKiAgICAgICAgICAgICBhIGRpZmZlcmVudCBzZXQgb2YgY2VydGlmaWNhdGVzIHRoYW4gdGhpcyBjbGFzcyAod2hpY2gKKyAgICAgKiAgICAgICAgICAgICBpcyB1bnNpZ25lZCksIG9yIGlmIHRoZSBjbGFzcyBuYW1lIGJlZ2lucyB3aXRoICJqYXZhLiIuCisgICAgICoKKyAgICAgKiBAc2VlICAgICAgICBDbGFzc0xvYWRlciNsb2FkQ2xhc3MoamF2YS5sYW5nLlN0cmluZywgYm9vbGVhbikKKyAgICAgKiBAc2VlICAgICAgICBDbGFzc0xvYWRlciNyZXNvbHZlQ2xhc3MoamF2YS5sYW5nLkNsYXNzKQorICAgICAqIEBzZWUgICAgICAgIGphdmEuc2VjdXJpdHkuUHJvdGVjdGlvbkRvbWFpbgorICAgICAqIEBzZWUgICAgICAgIGphdmEuc2VjdXJpdHkuUG9saWN5CisgICAgICogQHNlZSAgICAgICAgamF2YS5zZWN1cml0eS5Db2RlU291cmNlCisgICAgICogQHNlZSAgICAgICAgamF2YS5zZWN1cml0eS5TZWN1cmVDbGFzc0xvYWRlcgorICAgICAqIEBzaW5jZSAgICAgIEpESzEuMQorICAgICAqLworICAgIHByb3RlY3RlZCBmaW5hbCBDbGFzcyBkZWZpbmVDbGFzcyhTdHJpbmcgbmFtZSwgYnl0ZVtdIGIsIGludCBvZmYsIGludCBsZW4pCisJdGhyb3dzIENsYXNzRm9ybWF0RXJyb3IKKyAgICB7CisJcmV0dXJuIGRlZmluZUNsYXNzKG5hbWUsIGIsIG9mZiwgbGVuLCBudWxsKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDb252ZXJ0cyBhbiBhcnJheSBvZiBieXRlcyBpbnRvIGFuIGluc3RhbmNlIG9mIGNsYXNzIENsYXNzLAorICAgICAqIHdpdGggYW4gb3B0aW9uYWwgUHJvdGVjdGlvbkRvbWFpbi4gSWYgdGhlIGRvbWFpbiBpcyA8Y29kZT5udWxsPC9jb2RlPiwKKyAgICAgKiB0aGVuIGEgZGVmYXVsdCBkb21haW4gd2lsbCBiZSBhc3NpZ25lZCB0byB0aGUgY2xhc3MgYXMgc3BlY2lmaWVkCisgICAgICogaW4gdGhlIGRvY3VtZW50YXRpb24gZm9yIHtAbGluayAjZGVmaW5lQ2xhc3MoU3RyaW5nLGJ5dGVbXSxpbnQsaW50KX0uCisgICAgICogQmVmb3JlIHRoZSBjbGFzcyBjYW4gYmUgdXNlZCBpdCBtdXN0IGJlIHJlc29sdmVkLgorICAgICAqCisgICAgICogPHA+VGhlIGZpcnN0IGNsYXNzIGRlZmluZWQgaW4gYSBwYWNrYWdlIGRldGVybWluZXMgdGhlIGV4YWN0IHNldCBvZgorICAgICAqIGNlcnRpZmljYXRlcyB0aGF0IGFsbCBzdWJzZXF1ZW50IGNsYXNzZXMgZGVmaW5lZCBpbiB0aGF0IHBhY2thZ2UgbXVzdAorICAgICAqIGNvbnRhaW4uIFRoZSBzZXQgb2YgY2VydGlmaWNhdGVzIGZvciBhIGNsYXNzIGlzIG9idGFpbmVkIGZyb20gdGhlCisgICAgICogPGNvZGU+Q29kZVNvdXJjZTwvY29kZT4gd2l0aGluIHRoZSA8Y29kZT5Qcm90ZWN0aW9uRG9tYWluPC9jb2RlPiBvZgorICAgICAqIHRoZSBjbGFzcy4gQW55IGNsYXNzZXMgYWRkZWQgdG8gdGhhdCBwYWNrYWdlIG11c3QgY29udGFpbgorICAgICAqIHRoZSBzYW1lIHNldCBvZiBjZXJ0aWZpY2F0ZXMgb3IgYSA8Y29kZT5TZWN1cml0eUV4Y2VwdGlvbjwvY29kZT4KKyAgICAgKiB3aWxsIGJlIHRocm93bi4gTm90ZSB0aGF0IGlmIHRoZSA8Y29kZT5uYW1lPC9jb2RlPiBhcmd1bWVudCBpcworICAgICAqIG51bGwsIHRoaXMgY2hlY2sgaXMgbm90IHBlcmZvcm1lZC4gWW91IHNob3VsZCBhbHdheXMgcGFzcyBpbiB0aGUKKyAgICAgKiBuYW1lIG9mIHRoZSBjbGFzcyB5b3UgYXJlIGRlZmluaW5nIGFzIHdlbGwgYXMgdGhlIGJ5dGVzLiBUaGlzCisgICAgICogZW5zdXJlcyB0aGF0IHRoZSBjbGFzcyB5b3UgYXJlIGRlZmluaW5nIGlzIGluZGVlZCB0aGUgY2xhc3MKKyAgICAgKiB5b3UgdGhpbmsgaXQgaXMuCisgICAgICoKKyAgICAgKiA8cD5UaGUgc3BlY2lmaWVkIGNsYXNzIG5hbWUgY2Fubm90IGJlZ2luIHdpdGggImphdmEuIiwgc2luY2UgYWxsCisgICAgICogY2xhc3NlcyBpbiB0aGUgamF2YS4qIHBhY2thZ2VzIGNhbiBvbmx5IGJlIGRlZmluZWQgYnkgdGhlIGJvb3RzdHJhcAorICAgICAqIGNsYXNzIGxvYWRlci4gSWYgdGhlIG5hbWUgcGFyYW1ldGVyIGlzIG5vdCA8VFQ+bnVsbDwvVFQ+LCBpdAorICAgICAqIG11c3QgYmUgZXF1YWwgdG8gdGhlIG5hbWUgb2YgdGhlIGNsYXNzIHNwZWNpZmllZCBieSB0aGUgYnl0ZQorICAgICAqIGFycmF5IGIsIG90aGVyd2lzZSBhIDxUVD5DbGFzc0Zvcm1hdEVycm9yPC9UVD4gaXMgcmFpc2VkLgorICAgICAqCisgICAgICogQHBhcmFtICAgICAgbmFtZSB0aGUgZXhwZWN0ZWQgbmFtZSBvZiB0aGUgY2xhc3MsIG9yIDxjb2RlPm51bGw8L2NvZGU+CisgICAgICogICAgICAgICAgICAgICAgICBpZiBub3Qga25vd24sIHVzaW5nICcuJyBhbmQgbm90ICcvJyBhcyB0aGUgc2VwYXJhdG9yCisgICAgICogICAgICAgICAgICAgICAgICBhbmQgd2l0aG91dCBhIHRyYWlsaW5nICIuY2xhc3MiIHN1ZmZpeC4KKyAgICAgKiBAcGFyYW0gICAgICBiICAgIHRoZSBieXRlcyB0aGF0IG1ha2UgdXAgdGhlIGNsYXNzIGRhdGEuIFRoZSBieXRlcyBpbgorICAgICAqICAgICAgICAgICAgIHBvc2l0aW9ucyA8Y29kZT5vZmY8L2NvZGU+IHRocm91Z2ggPGNvZGU+b2ZmK2xlbi0xPC9jb2RlPgorICAgICAqICAgICAgICAgICAgIHNob3VsZCBoYXZlIHRoZSBmb3JtYXQgb2YgYSB2YWxpZCBjbGFzcyBmaWxlIGFzIGRlZmluZWQKKyAgICAgKiAgICAgICAgICAgICBieSB0aGUKKyAgICAgKiAgICAgICAgICAgICA8YSBocmVmPSJodHRwOi8vamF2YS5zdW4uY29tL2RvY3MvYm9va3Mvdm1zcGVjLyI+SmF2YQorICAgICAqICAgICAgICAgICAgIFZpcnR1YWwgTWFjaGluZSBTcGVjaWZpY2F0aW9uPC9hPi4KKyAgICAgKiBAcGFyYW0gICAgICBvZmYgIHRoZSBzdGFydCBvZmZzZXQgaW4gPGNvZGU+YjwvY29kZT4gb2YgdGhlIGNsYXNzIGRhdGEKKyAgICAgKiBAcGFyYW0gICAgICBsZW4gIHRoZSBsZW5ndGggb2YgdGhlIGNsYXNzIGRhdGEKKyAgICAgKiBAcGFyYW0gcHJvdGVjdGlvbkRvbWFpbiB0aGUgUHJvdGVjdGlvbkRvbWFpbiBvZiB0aGUgY2xhc3MKKyAgICAgKiBAcmV0dXJuIHRoZSA8Y29kZT5DbGFzczwvY29kZT4gb2JqZWN0IGNyZWF0ZWQgZnJvbSB0aGUgZGF0YSwKKyAgICAgKiAgICAgICAgIGFuZCBvcHRpb25hbCBQcm90ZWN0aW9uRG9tYWluLgorICAgICAqIEBleGNlcHRpb24gIENsYXNzRm9ybWF0RXJyb3IgaWYgdGhlIGRhdGEgZGlkIG5vdCBjb250YWluIGEgdmFsaWQgY2xhc3MKKyAgICAgKiBAZXhjZXB0aW9uICBJbmRleE91dE9mQm91bmRzRXhjZXB0aW9uIGlmIGVpdGhlciA8Y29kZT5vZmY8L2NvZGU+IG9yCisgICAgICogICAgICAgICAgICAgPGNvZGU+bGVuPC9jb2RlPiBpcyBuZWdhdGl2ZSwgb3IgaWYKKyAgICAgKiAgICAgICAgICAgICA8Y29kZT5vZmYrbGVuPC9jb2RlPiBpcyBncmVhdGVyIHRoYW4gPGNvZGU+Yi5sZW5ndGg8L2NvZGU+LgorICAgICAqIEBleGNlcHRpb24gIFNlY3VyaXR5RXhjZXB0aW9uIGlmIGFuIGF0dGVtcHQgaXMgbWFkZSB0byBhZGQgdGhpcyBjbGFzcworICAgICAqICAgICAgICAgICAgIHRvIGEgcGFja2FnZSB0aGF0IGNvbnRhaW5zIGNsYXNzZXMgdGhhdCB3ZXJlIHNpZ25lZCBieQorICAgICAqICAgICAgICAgICAgIGEgZGlmZmVyZW50IHNldCBvZiBjZXJ0aWZpY2F0ZXMgdGhhbiB0aGlzIGNsYXNzLCBvciBpZgorICAgICAqICAgICAgICAgICAgIHRoZSBjbGFzcyBuYW1lIGJlZ2lucyB3aXRoICJqYXZhLiIuCisgICAgICovCisgICAgcHJvdGVjdGVkIGZpbmFsIENsYXNzIGRlZmluZUNsYXNzKFN0cmluZyBuYW1lLCBieXRlW10gYiwgaW50IG9mZiwgaW50IGxlbiwKKwkJCQkgICAgICBQcm90ZWN0aW9uRG9tYWluIHByb3RlY3Rpb25Eb21haW4pCisJdGhyb3dzIENsYXNzRm9ybWF0RXJyb3IKKyAgICB7CisJY2hlY2soKTsKKyAgICAgICAgaWYgKChuYW1lICE9IG51bGwpICYmIG5hbWUuc3RhcnRzV2l0aCgiamF2YS4iKSkgeworICAgICAgICAgICAgdGhyb3cgbmV3IFNlY3VyaXR5RXhjZXB0aW9uKCJQcm9oaWJpdGVkIHBhY2thZ2UgbmFtZTogIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZS5zdWJzdHJpbmcoMCwgbmFtZS5sYXN0SW5kZXhPZignLicpKSk7CisgICAgICAgIH0KKwlpZiAocHJvdGVjdGlvbkRvbWFpbiA9PSBudWxsKSB7CisJICAgIHByb3RlY3Rpb25Eb21haW4gPSBnZXREZWZhdWx0RG9tYWluKCk7CisJfQorCisJaWYgKG5hbWUgIT0gbnVsbCkKKwkgICAgY2hlY2tDZXJ0cyhuYW1lLCBwcm90ZWN0aW9uRG9tYWluLmdldENvZGVTb3VyY2UoKSk7CisKKwlDbGFzcyBjID0gbnVsbDsKKworCXRyeQorCXsKKwkgICAgYyA9IGRlZmluZUNsYXNzMChuYW1lLCBiLCBvZmYsIGxlbiwgcHJvdGVjdGlvbkRvbWFpbik7CisJfQorCWNhdGNoIChDbGFzc0Zvcm1hdEVycm9yIGNmZSkKKwl7CisJICAgIC8vIENsYXNzIGZvcm1hdCBlcnJvciAtIHRyeSB0byB0cmFuc2Zvcm0gdGhlIGJ5dGVjb2RlIGFuZAorCSAgICAvLyBkZWZpbmUgdGhlIGNsYXNzIGFnYWluCisJICAgIC8vCisJICAgIE9iamVjdFtdIHRyYW5zZm9ybWVycyA9IENsYXNzRmlsZVRyYW5zZm9ybWVyLmdldFRyYW5zZm9ybWVycygpOworCisJICAgIGZvciAoaW50IGk9MDsgdHJhbnNmb3JtZXJzICE9IG51bGwgJiYgaSA8IHRyYW5zZm9ybWVycy5sZW5ndGg7IGkrKykKKwkgICAgeworCQl0cnkKKwkJeworCQkgICAgLy8gVHJhbnNmb3JtIGJ5dGUgY29kZSB1c2luZyB0cmFuc2Zvcm1lcgorCQkgICAgYnl0ZVtdIHRiID0gKChDbGFzc0ZpbGVUcmFuc2Zvcm1lcikgdHJhbnNmb3JtZXJzW2ldKS50cmFuc2Zvcm0oYiwgb2ZmLCBsZW4pOworCQkgICAgYyA9IGRlZmluZUNsYXNzMChuYW1lLCB0YiwgMCwgdGIubGVuZ3RoLCBwcm90ZWN0aW9uRG9tYWluKTsKKwkJICAgIGJyZWFrOworCQl9CisJCWNhdGNoIChDbGFzc0Zvcm1hdEVycm9yIGNmZTIpCisJCXsKKwkJICAgIC8vIElmIENsYXNzRm9ybWF0RXJyb3Igb2NjdXJzLCB0cnkgbmV4dCB0cmFuc2Zvcm1lcgorCQl9CisJICAgIH0KKworCSAgICAvLyBSZXRocm93IG9yaWdpbmFsIENsYXNzRm9ybWF0RXJyb3IgaWYgdW5hYmxlIHRvIHRyYW5zZm9ybQorCSAgICAvLyBieXRlY29kZSB0byB3ZWxsLWZvcm1lZAorCSAgICAvLworCSAgICBpZiAoYyA9PSBudWxsKQorCQl0aHJvdyBjZmU7CisJfQorCisJaWYgKHByb3RlY3Rpb25Eb21haW4uZ2V0Q29kZVNvdXJjZSgpICE9IG51bGwpIHsKKwkgICAgamF2YS5zZWN1cml0eS5jZXJ0LkNlcnRpZmljYXRlIGNlcnRzW10gPQorCQlwcm90ZWN0aW9uRG9tYWluLmdldENvZGVTb3VyY2UoKS5nZXRDZXJ0aWZpY2F0ZXMoKTsKKwkgICAgaWYgKGNlcnRzICE9IG51bGwpCisJCXNldFNpZ25lcnMoYywgY2VydHMpOworCX0KKwlyZXR1cm4gYzsKKyAgICB9CisKKyAgICBwcml2YXRlIHN5bmNocm9uaXplZCB2b2lkIGNoZWNrQ2VydHMoU3RyaW5nIG5hbWUsIENvZGVTb3VyY2UgY3MpCisgICAgeworCWludCBpID0gbmFtZS5sYXN0SW5kZXhPZignLicpOworCVN0cmluZyBwbmFtZSA9IChpID09IC0xKSA/ICIiIDogbmFtZS5zdWJzdHJpbmcoMCxpKTsKKwlqYXZhLnNlY3VyaXR5LmNlcnQuQ2VydGlmaWNhdGVbXSBwY2VydHMgPQorCSAgICAoamF2YS5zZWN1cml0eS5jZXJ0LkNlcnRpZmljYXRlW10pIHBhY2thZ2UyY2VydHMuZ2V0KHBuYW1lKTsKKyAgICAgICAgaWYgKHBjZXJ0cyA9PSBudWxsKSB7CisJICAgIC8vIGZpcnN0IGNsYXNzIGluIHRoaXMgcGFja2FnZSBnZXRzIHRvIGRlZmluZSB3aGljaAorCSAgICAvLyBjZXJ0aWZpY2F0ZXMgbXVzdCBiZSB0aGUgc2FtZSBmb3IgYWxsIG90aGVyIGNsYXNzZXMKKwkgICAgLy8gaW4gdGhpcyBwYWNrYWdlCisJICAgIGlmIChjcyAhPSBudWxsKSB7CisJCXBjZXJ0cyA9IGNzLmdldENlcnRpZmljYXRlcygpOworCSAgICB9CisJICAgIGlmIChwY2VydHMgPT0gbnVsbCkgeworCQlpZiAobm9jZXJ0cyA9PSBudWxsKQorCQkgICAgbm9jZXJ0cyA9IG5ldyBqYXZhLnNlY3VyaXR5LmNlcnQuQ2VydGlmaWNhdGVbMF07CisJCXBjZXJ0cyA9IG5vY2VydHM7CisJICAgIH0KKwkgICAgcGFja2FnZTJjZXJ0cy5wdXQocG5hbWUsIHBjZXJ0cyk7CisJfSBlbHNlIHsKKwkgICAgamF2YS5zZWN1cml0eS5jZXJ0LkNlcnRpZmljYXRlW10gY2VydHMgPSBudWxsOworCSAgICBpZiAoY3MgIT0gbnVsbCkgeworCQljZXJ0cyA9IGNzLmdldENlcnRpZmljYXRlcygpOworCSAgICB9CisKKwkgICAgaWYgKCFjb21wYXJlQ2VydHMocGNlcnRzLGNlcnRzKSkgeworCQl0aHJvdyBuZXcgU2VjdXJpdHlFeGNlcHRpb24oImNsYXNzIFwiIisgbmFtZSsKKwkJCQkJICAgICJcIidzIHNpZ25lciBpbmZvcm1hdGlvbiBkb2VzIG5vdCBtYXRjaCBzaWduZXIgaW5mb3JtYXRpb24gb2Ygb3RoZXIgY2xhc3NlcyBpbiB0aGUgc2FtZSBwYWNrYWdlIik7CisJICAgIH0KKwl9CisgICAgfQorCisgICAgLyoqCisgICAgICogY2hlY2sgdG8gbWFrZSBzdXJlIHRoZSBjZXJ0cyBmb3IgdGhlIG5ldyBjbGFzcyAoY2VydHMpIGFyZQorICAgICAqIHRoZSBzYW1lIGFzIHRoZSBjZXJ0cyBmb3IgdGhlIGZpcnN0IGNsYXNzIGluc2VydGVkCisgICAgICogaW4gdGhlIHBhY2thZ2UgKHBjZXJ0cykKKyAgICAgKi8KKyAgICBwcml2YXRlIGJvb2xlYW4gY29tcGFyZUNlcnRzKGphdmEuc2VjdXJpdHkuY2VydC5DZXJ0aWZpY2F0ZVtdIHBjZXJ0cywKKwkJCQkgamF2YS5zZWN1cml0eS5jZXJ0LkNlcnRpZmljYXRlW10gY2VydHMpCisgICAgeworCS8vIGNlcnRzIGNhbiBiZSBudWxsLCBpbmRpY2F0aW5nIG5vIGNlcnRzLgorCWlmICgoY2VydHMgPT0gbnVsbCkgfHwgKGNlcnRzLmxlbmd0aCA9PSAwKSkgeworCSAgICByZXR1cm4gcGNlcnRzLmxlbmd0aCA9PSAwOworCX0KKworCS8vIHRoZSBsZW5ndGggbXVzdCBiZSB0aGUgc2FtZSBhdCB0aGlzIHBvaW50CisJaWYgKGNlcnRzLmxlbmd0aCAhPSBwY2VydHMubGVuZ3RoKQorCSAgICByZXR1cm4gZmFsc2U7CisKKwkvLyBnbyB0aHJvdWdoIGFuZCBtYWtlIHN1cmUgYWxsIHRoZSBjZXJ0cyBpbiBvbmUgYXJyYXkKKwkvLyBhcmUgaW4gdGhlIG90aGVyIGFuZCB2aWNlLXZlcnNhLgorCWJvb2xlYW4gbWF0Y2g7CisJZm9yIChpbnQgaT0wOyBpIDwgY2VydHMubGVuZ3RoOyBpKyspIHsKKwkgICAgbWF0Y2ggPSBmYWxzZTsKKwkgICAgZm9yIChpbnQgaj0wOyBqIDwgcGNlcnRzLmxlbmd0aDsgaisrKSB7CisJCWlmIChjZXJ0c1tpXS5lcXVhbHMocGNlcnRzW2pdKSkgeworCQkgICAgbWF0Y2ggPSB0cnVlOworCQkgICAgYnJlYWs7CisJCX0KKwkgICAgfQorCSAgICBpZiAoIW1hdGNoKSByZXR1cm4gZmFsc2U7CisJfQorCisJLy8gbm93IGRvIHRoZSBzYW1lIGZvciBwY2VydHMKKwlmb3IgKGludCBpPTA7IGkgPCBwY2VydHMubGVuZ3RoOyBpKyspIHsKKwkgICAgbWF0Y2ggPSBmYWxzZTsKKwkgICAgZm9yIChpbnQgaj0wOyBqIDwgY2VydHMubGVuZ3RoOyBqKyspIHsKKwkJaWYgKHBjZXJ0c1tpXS5lcXVhbHMoY2VydHNbal0pKSB7CisJCSAgICBtYXRjaCA9IHRydWU7CisJCSAgICBicmVhazsKKwkJfQorCSAgICB9CisJICAgIGlmICghbWF0Y2gpIHJldHVybiBmYWxzZTsKKwl9CisKKwlyZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBMaW5rcyB0aGUgc3BlY2lmaWVkIGNsYXNzLgorICAgICAqIFRoaXMgKG1pc2xlYWRpbmdseSBuYW1lZCkgbWV0aG9kIG1heSBiZSB1c2VkIGJ5IGEgY2xhc3MgbG9hZGVyIHRvCisgICAgICogbGluayBhIGNsYXNzLiBJZiB0aGUgY2xhc3MgPGNvZGU+YzwvY29kZT4gaGFzIGFscmVhZHkgYmVlbiBsaW5rZWQsCisgICAgICogdGhlbiB0aGlzIG1ldGhvZCBzaW1wbHkgcmV0dXJucy4gT3RoZXJ3aXNlLCB0aGUgY2xhc3MgaXMgbGlua2VkCisgICAgICogYXMgZGVzY3JpYmVkIGluIHRoZSAiRXhlY3V0aW9uIiBjaGFwdGVyIG9mIHRoZSA8aT5KYXZhIExhbmd1YWdlCisgICAgICogU3BlY2lmaWNhdGlvbjwvaT4uCisgICAgICoKKyAgICAgKiBAcGFyYW0gYyB0aGUgY2xhc3MgdG8gbGluaworICAgICAqIEBleGNlcHRpb24gTnVsbFBvaW50ZXJFeGNlcHRpb24gaWYgPGNvZGU+YzwvY29kZT4gaXMgPGNvZGU+bnVsbDwvY29kZT4uCisgICAgICogQHNlZSAgIGphdmEubGFuZy5DbGFzc0xvYWRlciNkZWZpbmVDbGFzcyhqYXZhLmxhbmcuU3RyaW5nLGJ5dGVbXSxpbnQsaW50KQorICAgICAqLworICAgIHByb3RlY3RlZCBmaW5hbCB2b2lkIHJlc29sdmVDbGFzcyhDbGFzcyBjKSB7CisJY2hlY2soKTsKKwlyZXNvbHZlQ2xhc3MwKGMpOworICAgIH0KKworICAgIC8qKgorICAgICAqIEZpbmRzIGEgY2xhc3Mgd2l0aCB0aGUgc3BlY2lmaWVkIG5hbWUsIGxvYWRpbmcgaXQgaWYgbmVjZXNzYXJ5LjxwPgorICAgICAqCisgICAgICogUHJpb3IgdG8gdGhlIEphdmEgMiBTREssIHRoaXMgbWV0aG9kIGxvYWRzIGEgY2xhc3MgZnJvbSB0aGUgbG9jYWwgZmlsZQorICAgICAqIHN5c3RlbSBpbiBhIHBsYXRmb3JtLWRlcGVuZGVudCBtYW5uZXIsIGFuZCByZXR1cm5zIGEgY2xhc3Mgb2JqZWN0CisgICAgICogdGhhdCBoYXMgbm8gYXNzb2NpYXRlZCBjbGFzcyBsb2FkZXIuPHA+CisgICAgICoKKyAgICAgKiBTaW5jZSB0aGUgSmF2YSAyIFNESyB2MS4yLCB0aGlzIG1ldGhvZCBsb2FkcyB0aGUgY2xhc3MgdGhyb3VnaCB0aGUKKyAgICAgKiBzeXN0ZW0gY2xhc3MgbG9hZGVyKHNlZSB7QGxpbmsgI2dldFN5c3RlbUNsYXNzTG9hZGVyKCl9KS4gIENsYXNzIG9iamVjdHMKKyAgICAgKiByZXR1cm5lZCBtaWdodCBoYXZlIDxjb2RlPkNsYXNzTG9hZGVyPC9jb2RlPnMgYXNzb2NpYXRlZCB3aXRoIHRoZW0uCisgICAgICogU3ViY2xhc3NlcyBvZiA8Y29kZT5DbGFzc0xvYWRlcjwvY29kZT4gbmVlZCBub3QgdXN1YWxseSBjYWxsIHRoaXMKKyAgICAgKiBtZXRob2QsIGJlY2F1c2UgbW9zdCBjbGFzcyBsb2FkZXJzIG5lZWQgdG8gb3ZlcnJpZGUganVzdCB7QGxpbmsKKyAgICAgKiAjZmluZENsYXNzKFN0cmluZyl9LjxwPgorICAgICAqCisgICAgICogQHBhcmFtICAgICBuYW1lIHRoZSBuYW1lIG9mIHRoZSBjbGFzcyB0aGF0IGlzIHRvIGJlIGZvdW5kCisgICAgICogQHJldHVybiB0aGUgPGNvZGU+Q2xhc3M8L2NvZGU+IG9iamVjdCBmb3IgdGhlIHNwZWNpZmllZAorICAgICAqIDxjb2RlPm5hbWU8L2NvZGU+CisgICAgICogQGV4Y2VwdGlvbiBDbGFzc05vdEZvdW5kRXhjZXB0aW9uIGlmIHRoZSBjbGFzcyBjb3VsZCBub3QgYmUgZm91bmQKKyAgICAgKiBAc2VlICAgICAgICNDbGFzc0xvYWRlcihDbGFzc0xvYWRlcikKKyAgICAgKiBAc2VlICAgICAgICNnZXRQYXJlbnQoKQorICAgICAqLworICAgIHByb3RlY3RlZCBmaW5hbCBDbGFzcyBmaW5kU3lzdGVtQ2xhc3MoU3RyaW5nIG5hbWUpCisJdGhyb3dzIENsYXNzTm90Rm91bmRFeGNlcHRpb24KKyAgICB7CisJY2hlY2soKTsKKwlDbGFzc0xvYWRlciBzeXN0ZW0gPSBnZXRTeXN0ZW1DbGFzc0xvYWRlcigpOworCWlmIChzeXN0ZW0gPT0gbnVsbCkgeworCSAgICByZXR1cm4gZmluZEJvb3RzdHJhcENsYXNzKG5hbWUpOworCX0KKwlyZXR1cm4gc3lzdGVtLmxvYWRDbGFzcyhuYW1lKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIHRoZSBwYXJlbnQgY2xhc3MgbG9hZGVyIGZvciBkZWxlZ2F0aW9uLiBTb21lIGltcGxlbWVudGF0aW9ucworICAgICAqIG1heSB1c2UgPGNvZGU+bnVsbDwvY29kZT4gdG8gcmVwcmVzZW50IHRoZSBib290c3RyYXAgY2xhc3MKKyAgICAgKiBsb2FkZXIuIFRoaXMgbWV0aG9kIHdpbGwgcmV0dXJuIDxjb2RlPm51bGw8L2NvZGU+IGluIHN1Y2gKKyAgICAgKiBpbXBsZW1lbnRhdGlvbnMgaWYgdGhpcyBjbGFzcyBsb2FkZXIncyBwYXJlbnQgaXMgdGhlIGJvb3RzdHJhcAorICAgICAqIGNsYXNzIGxvYWRlci4KKyAgICAgKiA8cD4KKyAgICAgKiBJZiBhIHNlY3VyaXR5IG1hbmFnZXIgaXMgcHJlc2VudCwgYW5kIHRoZSBjYWxsZXIncyBjbGFzcyBsb2FkZXIgaXMKKyAgICAgKiBub3QgbnVsbCBhbmQgaXMgbm90IGFuIGFuY2VzdG9yIG9mIHRoaXMgY2xhc3MgbG9hZGVyLCB0aGVuCisgICAgICogdGhpcyBtZXRob2QgY2FsbHMgdGhlIHNlY3VyaXR5IG1hbmFnZXIncyA8Y29kZT5jaGVja1Blcm1pc3Npb248L2NvZGU+CisgICAgICogbWV0aG9kIHdpdGggYSA8Y29kZT5SdW50aW1lUGVybWlzc2lvbigiZ2V0Q2xhc3NMb2FkZXIiKTwvY29kZT4KKyAgICAgKiBwZXJtaXNzaW9uIHRvIGVuc3VyZSBpdCdzIG9rIHRvIGFjY2VzcyB0aGUgcGFyZW50IGNsYXNzIGxvYWRlci4KKyAgICAgKiBJZiBub3QsIGEgPGNvZGU+U2VjdXJpdHlFeGNlcHRpb248L2NvZGU+IHdpbGwgYmUgdGhyb3duLgorICAgICAqCisgICAgICogQHJldHVybiB0aGUgcGFyZW50IDxjb2RlPkNsYXNzTG9hZGVyPC9jb2RlPgorICAgICAqIEB0aHJvd3MgU2VjdXJpdHlFeGNlcHRpb24KKyAgICAgKiAgICBpZiBhIHNlY3VyaXR5IG1hbmFnZXIgZXhpc3RzIGFuZCBpdHMKKyAgICAgKiAgICA8Y29kZT5jaGVja1Blcm1pc3Npb248L2NvZGU+IG1ldGhvZCBkb2Vzbid0IGFsbG93CisgICAgICogICAgYWNjZXNzIHRvIHRoaXMgY2xhc3MgbG9hZGVyJ3MgcGFyZW50IGNsYXNzIGxvYWRlci4KKyAgICAgKgorICAgICAqIEBzZWUgU2VjdXJpdHlNYW5hZ2VyI2NoZWNrUGVybWlzc2lvbgorICAgICAqIEBzZWUgamF2YS5sYW5nLlJ1bnRpbWVQZXJtaXNzaW9uCisgICAgICoKKyAgICAgKiBAc2luY2UgMS4yCisgICAgICovCisgICAgcHVibGljIGZpbmFsIENsYXNzTG9hZGVyIGdldFBhcmVudCgpIHsKKwlpZiAocGFyZW50ID09IG51bGwpCisJICAgIHJldHVybiBudWxsOworCVNlY3VyaXR5TWFuYWdlciBzbSA9IFN5c3RlbS5nZXRTZWN1cml0eU1hbmFnZXIoKTsKKwlpZiAoc20gIT0gbnVsbCkgeworCSAgICBDbGFzc0xvYWRlciBjY2wgPSBnZXRDYWxsZXJDbGFzc0xvYWRlcigpOworCSAgICBpZiAoY2NsICE9IG51bGwgJiYgIWlzQW5jZXN0b3IoY2NsKSkgeworCQlzbS5jaGVja1Blcm1pc3Npb24oZ2V0R2V0Q2xhc3NMb2FkZXJQZXJtKCkpOworCSAgICB9CisJfQorCXJldHVybiBwYXJlbnQ7CisgICAgfQorCisgICAgLyoqCisgICAgICogU2V0cyB0aGUgc2lnbmVycyBvZiBhIGNsYXNzLiBUaGlzIHNob3VsZCBiZSBjYWxsZWQgYWZ0ZXIgZGVmaW5pbmcgYQorICAgICAqIGNsYXNzLgorICAgICAqCisgICAgICogQHBhcmFtIGMgdGhlIDxjb2RlPkNsYXNzPC9jb2RlPiBvYmplY3QKKyAgICAgKiBAcGFyYW0gc2lnbmVycyB0aGUgc2lnbmVycyBmb3IgdGhlIGNsYXNzCisgICAgICogQHNpbmNlIEpESzEuMQorICAgICAqLworICAgIHByb3RlY3RlZCBmaW5hbCB2b2lkIHNldFNpZ25lcnMoQ2xhc3MgYywgT2JqZWN0W10gc2lnbmVycykgeworICAgICAgICBjaGVjaygpOworCWMuc2V0U2lnbmVycyhzaWduZXJzKTsKKyAgICB9CisKKyAgICBwcml2YXRlIENsYXNzIGZpbmRCb290c3RyYXBDbGFzczAoU3RyaW5nIG5hbWUpCisJdGhyb3dzIENsYXNzTm90Rm91bmRFeGNlcHRpb24geworCWNoZWNrKCk7CisJcmV0dXJuIGZpbmRCb290c3RyYXBDbGFzcyhuYW1lKTsKKyAgICB9CisKKyAgICBwcml2YXRlIG5hdGl2ZSBDbGFzcyBkZWZpbmVDbGFzczAoU3RyaW5nIG5hbWUsIGJ5dGVbXSBiLCBpbnQgb2ZmLCBpbnQgbGVuLAorCVByb3RlY3Rpb25Eb21haW4gcGQpOworICAgIHByaXZhdGUgbmF0aXZlIHZvaWQgcmVzb2x2ZUNsYXNzMChDbGFzcyBjKTsKKyAgICBwcml2YXRlIG5hdGl2ZSBDbGFzcyBmaW5kQm9vdHN0cmFwQ2xhc3MoU3RyaW5nIG5hbWUpCisJdGhyb3dzIENsYXNzTm90Rm91bmRFeGNlcHRpb247CisKKyAgICAvKgorICAgICAqIENoZWNrIHRvIG1ha2Ugc3VyZSB0aGUgY2xhc3MgbG9hZGVyIGhhcyBiZWVuIGluaXRpYWxpemVkLgorICAgICAqLworICAgIHByaXZhdGUgdm9pZCBjaGVjaygpIHsKKwlpZiAoIWluaXRpYWxpemVkKSB7CisJICAgIHRocm93IG5ldyBTZWN1cml0eUV4Y2VwdGlvbigiQ2xhc3NMb2FkZXIgb2JqZWN0IG5vdCBpbml0aWFsaXplZCIpOworCX0KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBGaW5kcyB0aGUgY2xhc3Mgd2l0aCB0aGUgZ2l2ZW4gbmFtZSBpZiBpdCBoYWQgYmVlbiBwcmV2aW91c2x5IGxvYWRlZAorICAgICAqIHRocm91Z2ggdGhpcyBjbGFzcyBsb2FkZXIuCisgICAgICoKKyAgICAgKiBAcGFyYW0gIG5hbWUgdGhlIGNsYXNzIG5hbWUKKyAgICAgKiBAcmV0dXJuIHRoZSA8Y29kZT5DbGFzczwvY29kZT4gb2JqZWN0LCBvciA8Y29kZT5udWxsPC9jb2RlPiBpZgorICAgICAqICAgICAgICAgdGhlIGNsYXNzIGhhcyBub3QgYmVlbiBsb2FkZWQKKyAgICAgKiBAc2luY2UgIEpESzEuMQorICAgICAqLworICAgIHByb3RlY3RlZCBuYXRpdmUgZmluYWwgQ2xhc3MgZmluZExvYWRlZENsYXNzKFN0cmluZyBuYW1lKTsKKworICAgIC8qKgorICAgICAqIEZpbmRzIHRoZSByZXNvdXJjZSB3aXRoIHRoZSBnaXZlbiBuYW1lLiBBIHJlc291cmNlIGlzIHNvbWUgZGF0YQorICAgICAqIChpbWFnZXMsIGF1ZGlvLCB0ZXh0LCBldGMpIHRoYXQgY2FuIGJlIGFjY2Vzc2VkIGJ5IGNsYXNzIGNvZGUgaW4gYSB3YXkKKyAgICAgKiB0aGF0IGlzIGluZGVwZW5kZW50IG9mIHRoZSBsb2NhdGlvbiBvZiB0aGUgY29kZS48cD4KKyAgICAgKgorICAgICAqIFRoZSBuYW1lIG9mIGEgcmVzb3VyY2UgaXMgYSAiLyItc2VwYXJhdGVkIHBhdGggbmFtZSB0aGF0IGlkZW50aWZpZXMKKyAgICAgKiB0aGUgcmVzb3VyY2UuPHA+CisgICAgICoKKyAgICAgKiBUaGlzIG1ldGhvZCB3aWxsIGZpcnN0IHNlYXJjaCB0aGUgcGFyZW50IGNsYXNzIGxvYWRlciBmb3IgdGhlIHJlc291cmNlOworICAgICAqIGlmIHRoZSBwYXJlbnQgaXMgPGNvZGU+bnVsbDwvY29kZT4gdGhlIHBhdGggb2YgdGhlIGNsYXNzIGxvYWRlcgorICAgICAqIGJ1aWx0LWluIHRvIHRoZSB2aXJ0dWFsIG1hY2hpbmUgaXMgc2VhcmNoZWQuICBUaGF0IGZhaWxpbmcsIHRoaXMgbWV0aG9kCisgICAgICogd2lsbCBjYWxsIDxjb2RlPmZpbmRSZXNvdXJjZTwvY29kZT4gdG8gZmluZCB0aGUgcmVzb3VyY2UuPHA+CisgICAgICoKKyAgICAgKiBAcGFyYW0gIG5hbWUgcmVzb3VyY2UgbmFtZQorICAgICAqIEByZXR1cm4gYSBVUkwgZm9yIHJlYWRpbmcgdGhlIHJlc291cmNlLCBvciA8Y29kZT5udWxsPC9jb2RlPiBpZgorICAgICAqICAgICAgICAgdGhlIHJlc291cmNlIGNvdWxkIG5vdCBiZSBmb3VuZCBvciB0aGUgY2FsbGVyIGRvZXNuJ3QgaGF2ZQorICAgICAqICAgICAgICAgYWRlcXVhdGUgcHJpdmlsZWdlcyB0byBnZXQgdGhlIHJlc291cmNlLgorICAgICAqIEBzaW5jZSAgSkRLMS4xCisgICAgICogQHNlZSAjZmluZFJlc291cmNlKFN0cmluZykKKyAgICAgKi8KKyAgICBwdWJsaWMgVVJMIGdldFJlc291cmNlKFN0cmluZyBuYW1lKSB7CisJVVJMIHVybDsKKwlpZiAocGFyZW50ICE9IG51bGwpIHsKKwkgICAgdXJsID0gcGFyZW50LmdldFJlc291cmNlKG5hbWUpOworCX0gZWxzZSB7CisJICAgIHVybCA9IGdldEJvb3RzdHJhcFJlc291cmNlKG5hbWUpOworCX0KKwlpZiAodXJsID09IG51bGwpIHsKKwkgICAgdXJsID0gZmluZFJlc291cmNlKG5hbWUpOworCX0KKwlyZXR1cm4gdXJsOworICAgIH0KKworICAgIC8qKgorICAgICAqIEZpbmRzIGFsbCB0aGUgcmVzb3VyY2VzIHdpdGggdGhlIGdpdmVuIG5hbWUuIEEgcmVzb3VyY2UgaXMgc29tZSBkYXRhCisgICAgICogKGltYWdlcywgYXVkaW8sIHRleHQsIGV0YykgdGhhdCBjYW4gYmUgYWNjZXNzZWQgYnkgY2xhc3MgY29kZSBpbiBhIHdheQorICAgICAqIHRoYXQgaXMgaW5kZXBlbmRlbnQgb2YgdGhlIGxvY2F0aW9uIG9mIHRoZSBjb2RlLjxwPgorICAgICAqCisgICAgICogVGhlIG5hbWUgb2YgYSByZXNvdXJjZSBpcyBhICIvIi1zZXBhcmF0ZWQgcGF0aCBuYW1lIHRoYXQgaWRlbnRpZmllcyB0aGUKKyAgICAgKiByZXNvdXJjZS48cD4KKyAgICAgKgorICAgICAqIFRoZSBzZWFyY2ggb3JkZXIgaXMgZGVzY3JpYmVkIGluIHRoZSBkb2N1bWVudGF0aW9uIGZvciB7QGxpbmsKKyAgICAgKiAjZ2V0UmVzb3VyY2UoU3RyaW5nKX0uPHA+CisgICAgICoKKyAgICAgKiBAcGFyYW0gIG5hbWUgcmVzb3VyY2UgbmFtZQorICAgICAqIEByZXR1cm4gYW4gZW51bWVyYXRpb24gb2YgVVJMIHRvIHRoZSByZXNvdXJjZS4gSWYgbm8gcmVzb3VyY2VzIGNvdWxkCisgICAgICogICAgICAgICBiZSBmb3VuZCwgdGhlIGVudW1lcmF0aW9uIHdpbGwgYmUgZW1wdHkuIFJlc291cmNlcyB0aGF0IHRoZQorICAgICAqICAgICAgICAgZG9lc24ndCBoYXZlIGFjY2VzcyB0byB3aWxsIG5vdCBiZSBpbiB0aGUgZW51bWVyYXRpb24uCisgICAgICogQHRocm93cyBJT0V4Y2VwdGlvbiBpZiBJL08gZXJyb3JzIG9jY3VyCisgICAgICogQHNpbmNlICAxLjIKKyAgICAgKiBAc2VlICAgICNnZXRSZXNvdXJjZQorICAgICAqIEBzZWUgI2ZpbmRSZXNvdXJjZXMKKyAgICAgKi8KKyAgICBwdWJsaWMgZmluYWwgRW51bWVyYXRpb24gZ2V0UmVzb3VyY2VzKFN0cmluZyBuYW1lKSB0aHJvd3MgSU9FeGNlcHRpb24geworCUVudW1lcmF0aW9uW10gdG1wID0gbmV3IEVudW1lcmF0aW9uWzJdOworCWlmIChwYXJlbnQgIT0gbnVsbCkgeworCSAgICB0bXBbMF0gPSBwYXJlbnQuZ2V0UmVzb3VyY2VzKG5hbWUpOworCX0gZWxzZSB7CisJICAgIHRtcFswXSA9IGdldEJvb3RzdHJhcFJlc291cmNlcyhuYW1lKTsKKwl9CisJdG1wWzFdID0gZmluZFJlc291cmNlcyhuYW1lKTsKKworCXJldHVybiBuZXcgQ29tcG91bmRFbnVtZXJhdGlvbih0bXApOworICAgIH0KKworICAgIC8qKgorICAgICAqIFJldHVybnMgYW4gRW51bWVyYXRpb24gb2YgVVJMcyByZXByZXNlbnRpbmcgYWxsIHRoZSByZXNvdXJjZXMgd2l0aAorICAgICAqIHRoZSBnaXZlbiBuYW1lLiBDbGFzcyBsb2FkZXIgaW1wbGVtZW50YXRpb25zIHNob3VsZCBvdmVycmlkZSB0aGlzCisgICAgICogbWV0aG9kIHRvIHNwZWNpZnkgd2hlcmUgdG8gbG9hZCByZXNvdXJjZXMgZnJvbS4KKyAgICAgKgorICAgICAqIEBwYXJhbSAgbmFtZSB0aGUgcmVzb3VyY2UgbmFtZQorICAgICAqIEByZXR1cm4gYW4gRW51bWVyYXRpb24gb2YgVVJMcyBmb3IgdGhlIHJlc291cmNlcworICAgICAqIEB0aHJvd3MgSU9FeGNlcHRpb24gaWYgSS9PIGVycm9ycyBvY2N1cgorICAgICAqIEBzaW5jZSAgMS4yCisgICAgICovCisgICAgcHJvdGVjdGVkIEVudW1lcmF0aW9uIGZpbmRSZXNvdXJjZXMoU3RyaW5nIG5hbWUpIHRocm93cyBJT0V4Y2VwdGlvbiB7CisJcmV0dXJuIG5ldyBDb21wb3VuZEVudW1lcmF0aW9uKG5ldyBFbnVtZXJhdGlvblswXSk7CisgICAgfQorCisgICAgLyoqCisgICAgICogRmluZHMgdGhlIHJlc291cmNlIHdpdGggdGhlIGdpdmVuIG5hbWUuIENsYXNzIGxvYWRlcgorICAgICAqIGltcGxlbWVudGF0aW9ucyBzaG91bGQgb3ZlcnJpZGUgdGhpcyBtZXRob2QgdG8gc3BlY2lmeSB3aGVyZSB0bworICAgICAqIGZpbmQgcmVzb3VyY2VzLgorICAgICAqCisgICAgICogQHBhcmFtICBuYW1lIHRoZSByZXNvdXJjZSBuYW1lCisgICAgICogQHJldHVybiBhIFVSTCBmb3IgcmVhZGluZyB0aGUgcmVzb3VyY2UsIG9yIDxjb2RlPm51bGw8L2NvZGU+CisgICAgICogICAgICAgICBpZiB0aGUgcmVzb3VyY2UgY291bGQgbm90IGJlIGZvdW5kCisgICAgICogQHNpbmNlICAxLjIKKyAgICAgKi8KKyAgICBwcm90ZWN0ZWQgVVJMIGZpbmRSZXNvdXJjZShTdHJpbmcgbmFtZSkgeworCXJldHVybiBudWxsOworICAgIH0KKworICAgIC8qKgorICAgICAqIEZpbmQgYSByZXNvdXJjZSBvZiB0aGUgc3BlY2lmaWVkIG5hbWUgZnJvbSB0aGUgc2VhcmNoIHBhdGggdXNlZCB0byBsb2FkCisgICAgICogY2xhc3Nlcy48cD4KKyAgICAgKgorICAgICAqIEluIEpESzEuMSwgdGhlIHNlYXJjaCBwYXRoIHVzZWQgaXMgdGhhdCBvZiB0aGUgdmlydHVhbCBtYWNoaW5lJ3MKKyAgICAgKiBidWlsdC1pbiBjbGFzcyBsb2FkZXIuPHA+CisgICAgICoKKyAgICAgKiBTaW5jZSB0aGUgSmF2YSAyIFNESyB2MS4yLCB0aGlzIG1ldGhvZCBsb2NhdGVzIHRoZSByZXNvdXJjZSB0aHJvdWdoIHRoZSBzeXN0ZW0gY2xhc3MKKyAgICAgKiBsb2FkZXIgKHNlZSB7QGxpbmsgI2dldFN5c3RlbUNsYXNzTG9hZGVyKCl9KS4KKyAgICAgKgorICAgICAqIEBwYXJhbSAgbmFtZSB0aGUgcmVzb3VyY2UgbmFtZQorICAgICAqIEByZXR1cm4gYSBVUkwgZm9yIHJlYWRpbmcgdGhlIHJlc291cmNlLCBvciA8Y29kZT5udWxsPC9jb2RlPiBpZgorICAgICAqICAgICAgICAgdGhlIHJlc291cmNlIGNvdWxkIG5vdCBiZSBmb3VuZAorICAgICAqIEBzaW5jZSBKREsxLjEKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIFVSTCBnZXRTeXN0ZW1SZXNvdXJjZShTdHJpbmcgbmFtZSkgeworCUNsYXNzTG9hZGVyIHN5c3RlbSA9IGdldFN5c3RlbUNsYXNzTG9hZGVyKCk7CisJaWYgKHN5c3RlbSA9PSBudWxsKSB7CisJICAgIHJldHVybiBnZXRCb290c3RyYXBSZXNvdXJjZShuYW1lKTsKKwl9CisJcmV0dXJuIHN5c3RlbS5nZXRSZXNvdXJjZShuYW1lKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBGaW5kIHJlc291cmNlcyBmcm9tIHRoZSBWTSdzIGJ1aWx0LWluIGNsYXNzbG9hZGVyLgorICAgICAqLworICAgIHByaXZhdGUgc3RhdGljIFVSTCBnZXRCb290c3RyYXBSZXNvdXJjZShTdHJpbmcgbmFtZSkgeworCVVSTENsYXNzUGF0aCB1Y3AgPSBnZXRCb290c3RyYXBDbGFzc1BhdGgoKTsKKwlSZXNvdXJjZSByZXMgPSB1Y3AuZ2V0UmVzb3VyY2UobmFtZSk7CisJcmV0dXJuIHJlcyAhPSBudWxsID8gcmVzLmdldFVSTCgpIDogbnVsbDsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBGaW5kcyBhbGwgcmVzb3VyY2VzIG9mIHRoZSBzcGVjaWZpZWQgbmFtZSBmcm9tIHRoZSBzZWFyY2ggcGF0aCB1c2VkIHRvCisgICAgICogbG9hZCBjbGFzc2VzLiBUaGUgcmVzb3VyY2VzIHRodXMgZm91bmQgYXJlIHJldHVybmVkIGFzIGFuCisgICAgICogPGNvZGU+RW51bWVyYXRpb248L2NvZGU+IG9mIDxjb2RlPlVSTDwvY29kZT4gb2JqZWN0cy4gPHA+CisgICAgICoKKyAgICAgKiBUaGUgc2VhcmNoIG9yZGVyIGlzIGRlc2NyaWJlZCBpbiB0aGUgZG9jdW1lbnRhdGlvbiBmb3Ige0BsaW5rCisgICAgICogI2dldFN5c3RlbVJlc291cmNlKFN0cmluZyl9LiA8cD4KKyAgICAgKgorICAgICAqIEBwYXJhbSAgbmFtZSB0aGUgcmVzb3VyY2UgbmFtZQorICAgICAqIEByZXR1cm4gYW4gZW51bWVyYXRpb24gb2YgcmVzb3VyY2UgVVJMcworICAgICAqIEB0aHJvd3MgSU9FeGNlcHRpb24gaWYgSS9PIGVycm9ycyBvY2N1cgorICAgICAqIEBzaW5jZSAxLjIKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIEVudW1lcmF0aW9uIGdldFN5c3RlbVJlc291cmNlcyhTdHJpbmcgbmFtZSkKKwl0aHJvd3MgSU9FeGNlcHRpb24KKyAgICB7CisJQ2xhc3NMb2FkZXIgc3lzdGVtID0gZ2V0U3lzdGVtQ2xhc3NMb2FkZXIoKTsKKwlpZiAoc3lzdGVtID09IG51bGwpIHsKKwkgICAgcmV0dXJuIGdldEJvb3RzdHJhcFJlc291cmNlcyhuYW1lKTsKKwl9CisJcmV0dXJuIHN5c3RlbS5nZXRSZXNvdXJjZXMobmFtZSk7CisgICAgfQorCisgICAgLyoqCisgICAgICogRmluZCByZXNvdXJjZXMgZnJvbSB0aGUgVk0ncyBidWlsdC1pbiBjbGFzc2xvYWRlci4KKyAgICAgKi8KKyAgICBwcml2YXRlIHN0YXRpYyBFbnVtZXJhdGlvbiBnZXRCb290c3RyYXBSZXNvdXJjZXMoU3RyaW5nIG5hbWUpCisJdGhyb3dzIElPRXhjZXB0aW9uCisgICAgeworCWZpbmFsIEVudW1lcmF0aW9uIGUgPSBnZXRCb290c3RyYXBDbGFzc1BhdGgoKS5nZXRSZXNvdXJjZXMobmFtZSk7CisJcmV0dXJuIG5ldyBFbnVtZXJhdGlvbiAoKSB7CisJICAgIHB1YmxpYyBPYmplY3QgbmV4dEVsZW1lbnQoKSB7CisJCXJldHVybiAoKFJlc291cmNlKWUubmV4dEVsZW1lbnQoKSkuZ2V0VVJMKCk7CisJICAgIH0KKwkgICAgcHVibGljIGJvb2xlYW4gaGFzTW9yZUVsZW1lbnRzKCkgeworCQlyZXR1cm4gZS5oYXNNb3JlRWxlbWVudHMoKTsKKwkgICAgfQorCX07CisgICAgfQorCisgICAgLyoKKyAgICAgKiBSZXR1cm5zIHRoZSBVUkxDbGFzc1BhdGggdGhhdCBpcyB1c2VkIGZvciBmaW5kaW5nIHN5c3RlbSByZXNvdXJjZXMuCisgICAgICovCisgICAgc3RhdGljIFVSTENsYXNzUGF0aCBnZXRCb290c3RyYXBDbGFzc1BhdGgoKSB7CisJaWYgKGJvb3RzdHJhcENsYXNzUGF0aCA9PSBudWxsKSB7CisJICAgIGJvb3RzdHJhcENsYXNzUGF0aCA9IHN1bi5taXNjLkxhdW5jaGVyLmdldEJvb3RzdHJhcENsYXNzUGF0aCgpOworCX0KKwlyZXR1cm4gYm9vdHN0cmFwQ2xhc3NQYXRoOworICAgIH0KKworICAgIHByaXZhdGUgc3RhdGljIFVSTENsYXNzUGF0aCBib290c3RyYXBDbGFzc1BhdGg7CisKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIGFuIGlucHV0IHN0cmVhbSBmb3IgcmVhZGluZyB0aGUgc3BlY2lmaWVkIHJlc291cmNlLgorICAgICAqCisgICAgICogVGhlIHNlYXJjaCBvcmRlciBpcyBkZXNjcmliZWQgaW4gdGhlIGRvY3VtZW50YXRpb24gZm9yIHtAbGluaworICAgICAqICNnZXRSZXNvdXJjZShTdHJpbmcpfS48cD4KKyAgICAgKgorICAgICAqIEBwYXJhbSAgbmFtZSB0aGUgcmVzb3VyY2UgbmFtZQorICAgICAqIEByZXR1cm4gYW4gaW5wdXQgc3RyZWFtIGZvciByZWFkaW5nIHRoZSByZXNvdXJjZSwgb3IgPGNvZGU+bnVsbDwvY29kZT4KKyAgICAgKiAgICAgICAgIGlmIHRoZSByZXNvdXJjZSBjb3VsZCBub3QgYmUgZm91bmQKKyAgICAgKiBAc2luY2UgIEpESzEuMQorICAgICAqLworICAgIHB1YmxpYyBJbnB1dFN0cmVhbSBnZXRSZXNvdXJjZUFzU3RyZWFtKFN0cmluZyBuYW1lKSB7CisJVVJMIHVybCA9IGdldFJlc291cmNlKG5hbWUpOworCXRyeSB7CisJICAgIHJldHVybiB1cmwgIT0gbnVsbCA/IHVybC5vcGVuU3RyZWFtKCkgOiBudWxsOworCX0gY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKwkgICAgcmV0dXJuIG51bGw7CisJfQorICAgIH0KKworICAgIC8qKgorICAgICAqIE9wZW4gZm9yIHJlYWRpbmcsIGEgcmVzb3VyY2Ugb2YgdGhlIHNwZWNpZmllZCBuYW1lIGZyb20gdGhlIHNlYXJjaCBwYXRoCisgICAgICogdXNlZCB0byBsb2FkIGNsYXNzZXMuPHA+CisgICAgICoKKyAgICAgKiBUaGUgc2VhcmNoIG9yZGVyIGlzIGRlc2NyaWJlZCBpbiB0aGUgZG9jdW1lbnRhdGlvbiBmb3Ige0BsaW5rCisgICAgICogI2dldFN5c3RlbVJlc291cmNlKFN0cmluZyl9LiA8cD4KKyAgICAgKgorICAgICAqIEBwYXJhbSAgbmFtZSB0aGUgcmVzb3VyY2UgbmFtZQorICAgICAqIEByZXR1cm4gYW4gaW5wdXQgc3RyZWFtIGZvciByZWFkaW5nIHRoZSByZXNvdXJjZSwgb3IgPGNvZGU+bnVsbDwvY29kZT4KKyAgICAgKiAJICAgICAgIGlmIHRoZSByZXNvdXJjZSBjb3VsZCBub3QgYmUgZm91bmQKKyAgICAgKiBAc2luY2UgSkRLMS4xCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBJbnB1dFN0cmVhbSBnZXRTeXN0ZW1SZXNvdXJjZUFzU3RyZWFtKFN0cmluZyBuYW1lKSB7CisJVVJMIHVybCA9IGdldFN5c3RlbVJlc291cmNlKG5hbWUpOworCXRyeSB7CisJICAgIHJldHVybiB1cmwgIT0gbnVsbCA/IHVybC5vcGVuU3RyZWFtKCkgOiBudWxsOworCX0gY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKwkgICAgcmV0dXJuIG51bGw7CisJfQorICAgIH0KKworICAgIC8qKgorICAgICAqIFJldHVybnMgdGhlIHN5c3RlbSBjbGFzcyBsb2FkZXIgZm9yIGRlbGVnYXRpb24uIFRoaXMgaXMgdGhlIGRlZmF1bHQKKyAgICAgKiBkZWxlZ2F0aW9uIHBhcmVudCBmb3IgbmV3IDxjb2RlPkNsYXNzTG9hZGVyPC9jb2RlPiBpbnN0YW5jZXMsIGFuZAorICAgICAqIGlzIHR5cGljYWxseSB0aGUgY2xhc3MgbG9hZGVyIHVzZWQgdG8gc3RhcnQgdGhlIGFwcGxpY2F0aW9uLgorICAgICAqIDxwPgorICAgICAqIFRoaXMgbWV0aG9kIGlzIGZpcnN0IGludm9rZWQgZWFybHkgaW4gdGhlIHJ1bnRpbWUncyBzdGFydHVwCisgICAgICogc2VxdWVuY2UsIGF0IHdoaWNoIHBvaW50IGl0IGNyZWF0ZXMgdGhlIHN5c3RlbSBjbGFzcyBsb2FkZXIKKyAgICAgKiBhbmQgc2V0cyBpdCBhcyB0aGUgY29udGV4dCBjbGFzcyBsb2FkZXIgb2YgdGhlIGludm9raW5nCisgICAgICogPHR0PlRocmVhZDwvdHQ+LgorICAgICAqIDxwPgorICAgICAqIFRoZSBkZWZhdWx0IHN5c3RlbSBjbGFzcyBsb2FkZXIgaXMgYW4gaW1wbGVtZW50YXRpb24tZGVwZW5kZW50CisgICAgICogaW5zdGFuY2Ugb2YgdGhpcyBjbGFzcy4KKyAgICAgKiA8cD4KKyAgICAgKiBJZiB0aGUgc3lzdGVtIHByb3BlcnR5IDx0dD5qYXZhLnN5c3RlbS5jbGFzcy5sb2FkZXI8L3R0PiBpcworICAgICAqIGRlZmluZWQgd2hlbiB0aGlzIG1ldGhvZCBpcyBmaXJzdCBpbnZva2VkIHRoZW4gdGhlIHZhbHVlIG9mIHRoYXQKKyAgICAgKiBwcm9wZXJ0eSBpcyB0YWtlbiB0byBiZSB0aGUgbmFtZSBvZiBhIGNsYXNzIHRoYXQgd2lsbCBiZSByZXR1cm5lZCBhcworICAgICAqIHRoZSBzeXN0ZW0gY2xhc3MgbG9hZGVyLiBUaGUgY2xhc3MgaXMgbG9hZGVkIHVzaW5nIHRoZSBkZWZhdWx0IHN5c3RlbQorICAgICAqIGNsYXNzIGxvYWRlciBhbmQgbXVzdCBkZWZpbmUgYSBwdWJsaWMgY29uc3RydWN0b3IgdGhhdCB0YWtlcyBhIHNpbmdsZQorICAgICAqIHBhcmFtZXRlciBvZiB0eXBlIDx0dD5DbGFzc0xvYWRlcjwvdHQ+IHdoaWNoIGlzIHVzZWQKKyAgICAgKiBhcyB0aGUgZGVsZWdhdGlvbiBwYXJlbnQuIEFuIGluc3RhbmNlIGlzIHRoZW4gY3JlYXRlZCB1c2luZyB0aGlzCisgICAgICogY29uc3RydWN0b3Igd2l0aCB0aGUgZGVmYXVsdCBzeXN0ZW0gY2xhc3MgbG9hZGVyIGFzIHRoZSBwYXJhbWV0ZXIuCisgICAgICogVGhlIHJlc3VsdGluZyBjbGFzcyBsb2FkZXIgaXMgZGVmaW5lZCB0byBiZSB0aGUgc3lzdGVtIGNsYXNzIGxvYWRlci4KKyAgICAgKiA8cD4KKyAgICAgKiBJZiBhIHNlY3VyaXR5IG1hbmFnZXIgaXMgcHJlc2VudCwgYW5kIHRoZSBjYWxsZXIncyBjbGFzcyBsb2FkZXIgaXMKKyAgICAgKiBub3QgbnVsbCBhbmQgdGhlIGNhbGxlcidzIGNsYXNzIGxvYWRlciBpcyBub3QgdGhlIHNhbWUgYXMgb3IgYW4gYW5jZXN0b3Igb2YKKyAgICAgKiB0aGUgc3lzdGVtIGNsYXNzIGxvYWRlciwgdGhlbgorICAgICAqIHRoaXMgbWV0aG9kIGNhbGxzIHRoZSBzZWN1cml0eSBtYW5hZ2VyJ3MgPGNvZGU+Y2hlY2tQZXJtaXNzaW9uPC9jb2RlPgorICAgICAqIG1ldGhvZCB3aXRoIGEgPGNvZGU+UnVudGltZVBlcm1pc3Npb24oImdldENsYXNzTG9hZGVyIik8L2NvZGU+CisgICAgICogcGVybWlzc2lvbiB0byBlbnN1cmUgaXQncyBvayB0byBhY2Nlc3MgdGhlIHN5c3RlbSBjbGFzcyBsb2FkZXIuCisgICAgICogSWYgbm90LCBhIDxjb2RlPlNlY3VyaXR5RXhjZXB0aW9uPC9jb2RlPiB3aWxsIGJlIHRocm93bi4KKyAgICAgKgorICAgICAqIEByZXR1cm4gdGhlIHN5c3RlbSA8Y29kZT5DbGFzc0xvYWRlcjwvY29kZT4gZm9yIGRlbGVnYXRpb24sIG9yCisgICAgICogICAgICAgICA8Y29kZT5udWxsPC9jb2RlPiBpZiBub25lCisgICAgICogQHRocm93cyBTZWN1cml0eUV4Y2VwdGlvbgorICAgICAqICAgICAgICBpZiBhIHNlY3VyaXR5IG1hbmFnZXIgZXhpc3RzIGFuZCBpdHMKKyAgICAgKiAgICAgICAgPGNvZGU+Y2hlY2tQZXJtaXNzaW9uPC9jb2RlPiBtZXRob2QgZG9lc24ndCBhbGxvdworICAgICAqICAgICAgICBhY2Nlc3MgdG8gdGhlIHN5c3RlbSBjbGFzcyBsb2FkZXIuCisgICAgICogQHRocm93cyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24KKyAgICAgKiAgICAgICAgaWYgaW52b2tlZCByZWN1cnNpdmVseSBkdXJpbmcgdGhlIGNvbnN0cnVjdGlvbgorICAgICAqICAgICAgICBvZiB0aGUgY2xhc3MgbG9hZGVyIHNwZWNpZmllZCBieSB0aGUKKyAgICAgKiAgICAgICAgPGNvZGU+amF2YS5zeXN0ZW0uY2xhc3MubG9hZGVyPC9jb2RlPiBwcm9wZXJ0eS4KKyAgICAgKiBAdGhyb3dzIEVycm9yCisgICAgICogICAgICAgIGlmIHRoZSBzeXN0ZW0gcHJvcGVydHkgPHR0PmphdmEuc3lzdGVtLmNsYXNzLmxvYWRlcjwvdHQ+CisgICAgICogICAgICAgIGlzIGRlZmluZWQgYnV0IHRoZSBuYW1lZCBjbGFzcyBjb3VsZCBub3QgYmUgbG9hZGVkLCB0aGUKKyAgICAgKiAgICAgICAgcHJvdmlkZXIgY2xhc3MgZG9lcyBub3QgZGVmaW5lIHRoZSByZXF1aXJlZCBjb25zdHJ1Y3Rvciwgb3IgYW4KKyAgICAgKiAgICAgICAgZXhjZXB0aW9uIGlzIHRocm93biBieSB0aGF0IGNvbnN0cnVjdG9yIHdoZW4gaXQgaXMgaW52b2tlZC4gVGhlCisgICAgICogICAgICAgIHVuZGVybHlpbmcgY2F1c2Ugb2YgdGhlIGVycm9yIGNhbiBiZSByZXRyaWV2ZWQgdmlhIHRoZQorICAgICAqICAgICAgICB7QGxpbmsgVGhyb3dhYmxlI2dldENhdXNlKCl9IG1ldGhvZC4KKyAgICAgKiBAc2VlIFNlY3VyaXR5TWFuYWdlciNjaGVja1Blcm1pc3Npb24KKyAgICAgKiBAc2VlIGphdmEubGFuZy5SdW50aW1lUGVybWlzc2lvbgorICAgICAqIEByZXZpc2VkIDEuNAorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgQ2xhc3NMb2FkZXIgZ2V0U3lzdGVtQ2xhc3NMb2FkZXIoKSB7CisJaW5pdFN5c3RlbUNsYXNzTG9hZGVyKCk7CisJaWYgKHNjbCA9PSBudWxsKSB7CisJICAgIHJldHVybiBudWxsOworCX0KKwlTZWN1cml0eU1hbmFnZXIgc20gPSBTeXN0ZW0uZ2V0U2VjdXJpdHlNYW5hZ2VyKCk7CisJaWYgKHNtICE9IG51bGwpIHsKKwkgICAgQ2xhc3NMb2FkZXIgY2NsID0gZ2V0Q2FsbGVyQ2xhc3NMb2FkZXIoKTsKKwkgICAgaWYgKGNjbCAhPSBudWxsICYmIGNjbCAhPSBzY2wgJiYgIXNjbC5pc0FuY2VzdG9yKGNjbCkpIHsKKwkJc20uY2hlY2tQZXJtaXNzaW9uKGdldEdldENsYXNzTG9hZGVyUGVybSgpKTsKKwkgICAgfQorCX0KKwlyZXR1cm4gc2NsOworICAgIH0KKworICAgIHByaXZhdGUgc3RhdGljIHN5bmNocm9uaXplZCB2b2lkIGluaXRTeXN0ZW1DbGFzc0xvYWRlcigpIHsKKwlpZiAoIXNjbFNldCkgeworCSAgICBpZiAoc2NsICE9IG51bGwpCisJCXRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oInJlY3Vyc2l2ZSBjYWxsIik7CisgICAgICAgICAgICBzdW4ubWlzYy5MYXVuY2hlciBsID0gc3VuLm1pc2MuTGF1bmNoZXIuZ2V0TGF1bmNoZXIoKTsKKwkgICAgaWYgKGwgIT0gbnVsbCkgeworCQlUaHJvd2FibGUgb29wcyA9IG51bGw7CisJCXNjbCA9IGwuZ2V0Q2xhc3NMb2FkZXIoKTsKKwkgICAgICAgIHRyeSB7CisJCSAgICBQcml2aWxlZ2VkRXhjZXB0aW9uQWN0aW9uIGE7CisJCSAgICBhID0gbmV3IFN5c3RlbUNsYXNzTG9hZGVyQWN0aW9uKHNjbCk7CisgICAgICAgICAgICAgICAgICAgIHNjbCA9IChDbGFzc0xvYWRlcikgQWNjZXNzQ29udHJvbGxlci5kb1ByaXZpbGVnZWQoYSk7CisJICAgICAgICB9IGNhdGNoIChQcml2aWxlZ2VkQWN0aW9uRXhjZXB0aW9uIHBhZSkgeworCQkgICAgb29wcyA9IHBhZS5nZXRDYXVzZSgpOworCSAgICAgICAgICAgIGlmIChvb3BzIGluc3RhbmNlb2YgSW52b2NhdGlvblRhcmdldEV4Y2VwdGlvbikgeworCQkgICAgICAgIG9vcHMgPSBvb3BzLmdldENhdXNlKCk7CisJCSAgICB9CisJICAgICAgICB9CisJCWlmIChvb3BzICE9IG51bGwpIHsKKwkJICAgIGlmIChvb3BzIGluc3RhbmNlb2YgRXJyb3IpIHsKKwkJCXRocm93IChFcnJvcikgb29wczsKKwkJICAgIH0gZWxzZSB7CisJCSAgICAgICAgLy8gd3JhcCB0aGUgZXhjZXB0aW9uCisJCSAgICAgICAgdGhyb3cgbmV3IEVycm9yKG9vcHMpOworCQkgICAgfQorCQl9CisJICAgIH0KKwkgICAgc2NsU2V0ID0gdHJ1ZTsKKwl9CisgICAgfQorCisgICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBzcGVjaWZpZWQgY2xhc3MgbG9hZGVyIGNhbiBiZSBmb3VuZAorICAgIC8vIGluIHRoaXMgY2xhc3MgbG9hZGVyJ3MgZGVsZWdhdGlvbiBjaGFpbi4KKyAgICBib29sZWFuIGlzQW5jZXN0b3IoQ2xhc3NMb2FkZXIgY2wpIHsKKwlDbGFzc0xvYWRlciBhY2wgPSB0aGlzOworCWRvIHsKKwkgICAgYWNsID0gYWNsLnBhcmVudDsKKwkgICAgaWYgKGNsID09IGFjbCkgeworCQlyZXR1cm4gdHJ1ZTsKKwkgICAgfQorCX0gd2hpbGUgKGFjbCAhPSBudWxsKTsKKwlyZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgLy8gUmV0dXJucyB0aGUgY2FsbGVyJ3MgY2xhc3MgbG9hZGVyLCBvciBudWxsIGlmIG5vbmUuCisgICAgLy8gTk9URSB0aGlzIG11c3QgYWx3YXlzIGJlIGNhbGxlZCB3aGVuIHRoZXJlIGlzIGV4YWN0bHkgb25lCisgICAgLy8gaW50ZXJ2ZW5pbmcgZnJhbWUgZnJvbSB0aGUgY29yZSBsaWJyYXJpZXMgb24gdGhlIHN0YWNrIGJldHdlZW4KKyAgICAvLyB0aGlzIG1ldGhvZCdzIGludm9jYXRpb24gYW5kIHRoZSBkZXNpcmVkIGNhbGxlci4KKyAgICBzdGF0aWMgQ2xhc3NMb2FkZXIgZ2V0Q2FsbGVyQ2xhc3NMb2FkZXIoKSB7CisgICAgICAgIC8vIE5PVEUgdXNlIG9mIG1vcmUgZ2VuZXJpYyBSZWZsZWN0aW9uLmdldENhbGxlckNsYXNzKCkKKyAgICAgICAgQ2xhc3MgY2FsbGVyID0gUmVmbGVjdGlvbi5nZXRDYWxsZXJDbGFzcygzKTsKKyAgICAgICAgLy8gVGhpcyBjYW4gYmUgbnVsbCBpZiB0aGUgVk0gaXMgcmVxdWVzdGluZyBpdAorICAgICAgICBpZiAoY2FsbGVyID09IG51bGwpIHsKKyAgICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICB9CisgICAgICAgIC8vIENpcmN1bXZlbnQgc2VjdXJpdHkgY2hlY2sgc2luY2UgdGhpcyBpcyBwYWNrYWdlLXByaXZhdGUKKyAgICAgICAgcmV0dXJuIGNhbGxlci5nZXRDbGFzc0xvYWRlcjAoKTsKKyAgICB9CisKKyAgICAvLyBUaGUgY2xhc3MgbG9hZGVyIGZvciB0aGUgc3lzdGVtCisgICAgcHJpdmF0ZSBzdGF0aWMgQ2xhc3NMb2FkZXIgc2NsOworCisgICAgLy8gU2V0IHRvIHRydWUgb25jZSB0aGUgc3lzdGVtIGNsYXNzIGxvYWRlciBoYXMgYmVlbiBzZXQKKyAgICBwcml2YXRlIHN0YXRpYyBib29sZWFuIHNjbFNldDsKKworICAgIC8vIFBlcm1pc3Npb24gdG8gYWNjZXNzIHN5c3RlbSBvciBwYXJlbnQgY2xhc3MgbG9hZGVyCisgICAgcHJpdmF0ZSBzdGF0aWMgUnVudGltZVBlcm1pc3Npb24gZ2V0Q2xhc3NMb2FkZXJQZXJtID0gbnVsbDsKKworICAgIHN0YXRpYyBSdW50aW1lUGVybWlzc2lvbiBnZXRHZXRDbGFzc0xvYWRlclBlcm0oKQorICAgIHsKKwlpZiAoZ2V0Q2xhc3NMb2FkZXJQZXJtID09IG51bGwpCisJICAgIGdldENsYXNzTG9hZGVyUGVybSA9IG5ldyBSdW50aW1lUGVybWlzc2lvbigiZ2V0Q2xhc3NMb2FkZXIiKTsKKwlyZXR1cm4gZ2V0Q2xhc3NMb2FkZXJQZXJtOworICAgIH0KKworICAgIC8qKgorICAgICAqIERlZmluZXMgYSBwYWNrYWdlIGJ5IG5hbWUgaW4gdGhpcyBDbGFzc0xvYWRlci4gVGhpcyBhbGxvd3MgY2xhc3MKKyAgICAgKiBsb2FkZXJzIHRvIGRlZmluZSB0aGUgcGFja2FnZXMgZm9yIHRoZWlyIGNsYXNzZXMuIFBhY2thZ2VzIG11c3QgYmUKKyAgICAgKiBjcmVhdGVkIGJlZm9yZSB0aGUgY2xhc3MgaXMgZGVmaW5lZCwgYW5kIHBhY2thZ2UgbmFtZXMgbXVzdCBiZQorICAgICAqIHVuaXF1ZSB3aXRoaW4gYSBjbGFzcyBsb2FkZXIgYW5kIGNhbm5vdCBiZSByZWRlZmluZWQgb3IgY2hhbmdlZAorICAgICAqIG9uY2UgY3JlYXRlZC4KKyAgICAgKgorICAgICAqIEBwYXJhbSBuYW1lICAgICAgICB0aGUgcGFja2FnZSBuYW1lCisgICAgICogQHBhcmFtIHNwZWNUaXRsZSAgIHRoZSBzcGVjaWZpY2F0aW9uIHRpdGxlCisgICAgICogQHBhcmFtIHNwZWNWZXJzaW9uIHRoZSBzcGVjaWZpY2F0aW9uIHZlcnNpb24KKyAgICAgKiBAcGFyYW0gc3BlY1ZlbmRvciAgdGhlIHNwZWNpZmljYXRpb24gdmVuZG9yCisgICAgICogQHBhcmFtIGltcGxUaXRsZSAgIHRoZSBpbXBsZW1lbnRhdGlvbiB0aXRsZQorICAgICAqIEBwYXJhbSBpbXBsVmVyc2lvbiB0aGUgaW1wbGVtZW50YXRpb24gdmVyc2lvbgorICAgICAqIEBwYXJhbSBpbXBsVmVuZG9yICB0aGUgaW1wbGVtZW50YXRpb24gdmVuZG9yCisgICAgICogQHBhcmFtIHNlYWxCYXNlICAgIElmIG5vdCBudWxsLCB0aGVuIHRoaXMgcGFja2FnZSBpcyBzZWFsZWQgd2l0aAorICAgICAqICAgICAgICAgICAgICAgICAgICByZXNwZWN0IHRvIHRoZSBnaXZlbiBjb2RlIHNvdXJjZSBVUkwuIE90aGVyd2lzZSwKKyAgICAgKgkJCSAgdGhlIHBhY2thZ2UgaXMgbm90IHNlYWxlZC4KKyAgICAgKiBAcmV0dXJuIHRoZSBuZXdseSBkZWZpbmVkIDxjb2RlPlBhY2thZ2U8L2NvZGU+IG9iamVjdAorICAgICAqIEBleGNlcHRpb24gSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIGlmIHBhY2thZ2UgbmFtZSBkdXBsaWNhdGVzIGFuCisgICAgICogICAgICAgICAgICBleGlzdGluZyBwYWNrYWdlIGVpdGhlciBpbiB0aGlzIGNsYXNzIGxvYWRlciBvciBvbmUgb2YKKyAgICAgKiAgICAgICAgICAgIGl0cyBhbmNlc3RvcnMKKyAgICAgKiBAc2luY2UgMS4yCisgICAgICovCisgICAgcHJvdGVjdGVkIFBhY2thZ2UgZGVmaW5lUGFja2FnZShTdHJpbmcgbmFtZSwgU3RyaW5nIHNwZWNUaXRsZSwKKwkJCQkgICAgU3RyaW5nIHNwZWNWZXJzaW9uLCBTdHJpbmcgc3BlY1ZlbmRvciwKKwkJCQkgICAgU3RyaW5nIGltcGxUaXRsZSwgU3RyaW5nIGltcGxWZXJzaW9uLAorCQkJCSAgICBTdHJpbmcgaW1wbFZlbmRvciwgVVJMIHNlYWxCYXNlKQorCXRocm93cyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24KKyAgICB7CisJc3luY2hyb25pemVkIChwYWNrYWdlcykgeworCSAgICBQYWNrYWdlIHBrZyA9IGdldFBhY2thZ2UobmFtZSk7CisJICAgIGlmIChwa2cgIT0gbnVsbCkgeworCQl0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKG5hbWUpOworCSAgICB9CisJICAgIHBrZyA9IG5ldyBQYWNrYWdlKG5hbWUsIHNwZWNUaXRsZSwgc3BlY1ZlcnNpb24sIHNwZWNWZW5kb3IsCisJCQkgICAgICBpbXBsVGl0bGUsIGltcGxWZXJzaW9uLCBpbXBsVmVuZG9yLAorCQkJICAgICAgc2VhbEJhc2UpOworCSAgICBwYWNrYWdlcy5wdXQobmFtZSwgcGtnKTsKKwkgICAgcmV0dXJuIHBrZzsKKwl9CisgICAgfQorCisgICAgLyoqCisgICAgICogUmV0dXJucyBhIFBhY2thZ2UgdGhhdCBoYXMgYmVlbiBkZWZpbmVkIGJ5IHRoaXMgY2xhc3MgbG9hZGVyIG9yIGFueQorICAgICAqIG9mIGl0cyBhbmNlc3RvcnMuCisgICAgICoKKyAgICAgKiBAcGFyYW0gIG5hbWUgdGhlIHBhY2thZ2UgbmFtZQorICAgICAqIEByZXR1cm4gdGhlIFBhY2thZ2UgY29ycmVzcG9uZGluZyB0byB0aGUgZ2l2ZW4gbmFtZSwgb3IgbnVsbCBpZiBub3QKKyAgICAgKiAgICAgICAgIGZvdW5kCisgICAgICogQHNpbmNlICAxLjIKKyAgICAgKi8KKyAgICBwcm90ZWN0ZWQgUGFja2FnZSBnZXRQYWNrYWdlKFN0cmluZyBuYW1lKSB7CisJc3luY2hyb25pemVkIChwYWNrYWdlcykgeworCSAgICBQYWNrYWdlIHBrZyA9IChQYWNrYWdlKXBhY2thZ2VzLmdldChuYW1lKTsKKwkgICAgaWYgKHBrZyA9PSBudWxsKSB7CisJCWlmIChwYXJlbnQgIT0gbnVsbCkgeworCQkgICAgcGtnID0gcGFyZW50LmdldFBhY2thZ2UobmFtZSk7CisJCX0gZWxzZSB7CisJCSAgICBwa2cgPSBQYWNrYWdlLmdldFN5c3RlbVBhY2thZ2UobmFtZSk7CisJCX0KKwkJaWYgKHBrZyAhPSBudWxsKSB7CisJCSAgICBwYWNrYWdlcy5wdXQobmFtZSwgcGtnKTsKKwkJfQorCSAgICB9CisJICAgIHJldHVybiBwa2c7CisJfQorICAgIH0KKworICAgIC8qKgorICAgICAqIFJldHVybnMgYWxsIG9mIHRoZSBQYWNrYWdlcyBkZWZpbmVkIGJ5IHRoaXMgY2xhc3MgbG9hZGVyIGFuZCBpdHMKKyAgICAgKiBhbmNlc3RvcnMuCisgICAgICoKKyAgICAgKiBAcmV0dXJuIHRoZSBhcnJheSBvZiA8Y29kZT5QYWNrYWdlPC9jb2RlPiBvYmplY3RzIGRlZmluZWQgYnkgdGhpcworICAgICAqIDxjb2RlPkNsYXNzTG9hZGVyPC9jb2RlPgorICAgICAqIEBzaW5jZSAxLjIKKyAgICAgKi8KKyAgICBwcm90ZWN0ZWQgUGFja2FnZVtdIGdldFBhY2thZ2VzKCkgeworCU1hcCBtYXA7CisJc3luY2hyb25pemVkIChwYWNrYWdlcykgeworCSAgICBtYXAgPSAoTWFwKXBhY2thZ2VzLmNsb25lKCk7CisJfQorCVBhY2thZ2VbXSBwa2dzOworCWlmIChwYXJlbnQgIT0gbnVsbCkgeworCSAgICBwa2dzID0gcGFyZW50LmdldFBhY2thZ2VzKCk7CisJfSBlbHNlIHsKKwkgICAgcGtncyA9IFBhY2thZ2UuZ2V0U3lzdGVtUGFja2FnZXMoKTsKKwl9CisJaWYgKHBrZ3MgIT0gbnVsbCkgeworCSAgICBmb3IgKGludCBpID0gMDsgaSA8IHBrZ3MubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgICAgICBTdHJpbmcgcGtnTmFtZSA9IHBrZ3NbaV0uZ2V0TmFtZSgpOworICAgICAgICAgICAgICAgIGlmIChtYXAuZ2V0KHBrZ05hbWUpID09IG51bGwpIHsKKyAgICAgICAgICAgICAgICAgICAgbWFwLnB1dChwa2dOYW1lLCBwa2dzW2ldKTsKKyAgICAgICAgICAgICAgICB9CisJICAgIH0KKwl9CisJcmV0dXJuIChQYWNrYWdlW10pbWFwLnZhbHVlcygpLnRvQXJyYXkobmV3IFBhY2thZ2VbbWFwLnNpemUoKV0pOworICAgIH0KKworICAgIC8qKgorICAgICAqIFJldHVybnMgdGhlIGFic29sdXRlIHBhdGggbmFtZSBvZiBhIG5hdGl2ZSBsaWJyYXJ5LiBUaGUgVk0KKyAgICAgKiBpbnZva2VzIHRoaXMgbWV0aG9kIHRvIGxvY2F0ZSB0aGUgbmF0aXZlIGxpYnJhcmllcyB0aGF0IGJlbG9uZworICAgICAqIHRvIGNsYXNzZXMgbG9hZGVkIHdpdGggdGhpcyBjbGFzcyBsb2FkZXIuIElmIHRoaXMgbWV0aG9kIHJldHVybnMKKyAgICAgKiA8Y29kZT5udWxsPC9jb2RlPiwgdGhlIFZNIHNlYXJjaGVzIHRoZSBsaWJyYXJ5IGFsb25nIHRoZSBwYXRoCisgICAgICogc3BlY2lmaWVkIGFzIHRoZSA8Y29kZT5qYXZhLmxpYnJhcnkucGF0aDwvY29kZT4gcHJvcGVydHkuCisgICAgICoKKyAgICAgKiBAcGFyYW0gICAgICBsaWJuYW1lICAgdGhlIGxpYnJhcnkgbmFtZQorICAgICAqIEByZXR1cm4gICAgIHRoZSBhYnNvbHV0ZSBwYXRoIG9mIHRoZSBuYXRpdmUgbGlicmFyeQorICAgICAqIEBzZWUgICAgICAgIGphdmEubGFuZy5TeXN0ZW0jbG9hZExpYnJhcnkoamF2YS5sYW5nLlN0cmluZykKKyAgICAgKiBAc2VlICAgICAgICBqYXZhLmxhbmcuU3lzdGVtI21hcExpYnJhcnlOYW1lKGphdmEubGFuZy5TdHJpbmcpCisgICAgICogQHNpbmNlICAgICAgMS4yCisgICAgICovCisgICAgcHJvdGVjdGVkIFN0cmluZyBmaW5kTGlicmFyeShTdHJpbmcgbGlibmFtZSkgeworICAgICAgICByZXR1cm4gbnVsbDsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBUaGUgaW5uZXIgY2xhc3MgTmF0aXZlTGlicmFyeSBkZW5vdGVzIGEgbG9hZGVkIG5hdGl2ZSBsaWJyYXJ5CisgICAgICogaW5zdGFuY2UuIEV2ZXJ5IGNsYXNzbG9hZGVyIGNvbnRhaW5zIGEgdmVjdG9yIG9mIGxvYWRlZCBuYXRpdmUKKyAgICAgKiBsaWJyYXJpZXMgaW4gdGhlIHByaXZhdGUgZmllbGQgPGNvZGU+bmF0aXZlTGlicmFyaWVzPC9jb2RlPi4KKyAgICAgKiBUaGUgbmF0aXZlIGxpYnJhcmllcyBsb2FkZWQgaW50byB0aGUgc3lzdGVtIGFyZSBlbnRlcmVkIGludG8KKyAgICAgKiB0aGUgPGNvZGU+c3lzdGVtTmF0aXZlTGlicmFyaWVzPC9jb2RlPiB2ZWN0b3IuCisgICAgICoKKyAgICAgKiBFdmVyeSBuYXRpdmUgbGlicmFyeSByZXVxaXJlcyBhIHBhcnRpY3VsYXIgdmVyc2lvbiBvZiBKTkkuIFRoaXMKKyAgICAgKiBpcyBkZW5vdGVkIGJ5IHRoZSBwcml2YXRlIGpuaVZlcnNpb24gZmllbGQuIFRoaXMgZmllbGQgaXMgc2V0CisgICAgICogYnkgdGhlIFZNIHdoZW4gaXQgbG9hZHMgdGhlIGxpYnJhcnksIGFuZCB1c2VkIGJ5IHRoZSBWTSB0byBwYXNzCisgICAgICogdGhlIGNvcnJlY3QgdmVyc2lvbiBvZiBKTkkgdG8gdGhlIG5hdGl2ZSBtZXRob2RzLgorICAgICAqCisgICAgICogQHZlcnNpb24gMS4xNjIsIDAzLzE5LzAyCisgICAgICogQHNlZSAgICAgamF2YS5sYW5nLkNsYXNzTG9hZGVyCisgICAgICogQHNpbmNlICAgMS4yCisgICAgICovCisgICAgc3RhdGljIGNsYXNzIE5hdGl2ZUxpYnJhcnkgeworICAgICAgICAvKiBvcGFxdWUgaGFuZGxlIHRvIG5hdGl2ZSBsaWJyYXJ5LCB1c2VkIGluIG5hdGl2ZSBjb2RlLiAqLworICAgICAgICBsb25nIGhhbmRsZTsKKyAgICAgICAgLyogdGhlIHZlcnNpb24gb2YgSk5JIGVudmlyb25tZW50IHRoZSBuYXRpdmUgbGlicmFyeSByZXF1aXJlcy4gKi8KKyAgICAgICAgcHJpdmF0ZSBpbnQgam5pVmVyc2lvbjsKKyAgICAgICAgLyogdGhlIGNsYXNzIGZyb20gd2hpY2ggdGhlIGxpYnJhcnkgaXMgbG9hZGVkLCBhbHNvIGluZGljYXRlcworCSAgIHRoZSBsb2FkZXIgdGhpcyBuYXRpdmUgbGlicmFyeSBiZWxvbmdzLiAqLworICAgICAgICBwcml2YXRlIENsYXNzIGZyb21DbGFzczsKKyAgICAgICAgLyogdGhlIGNhbm9uaWNhbGl6ZWQgbmFtZSBvZiB0aGUgbmF0aXZlIGxpYnJhcnkuICovCisgICAgICAgIFN0cmluZyBuYW1lOworCisgICAgICAgIG5hdGl2ZSB2b2lkIGxvYWQoU3RyaW5nIG5hbWUpOworICAgICAgICBuYXRpdmUgbG9uZyBmaW5kKFN0cmluZyBuYW1lKTsKKyAgICAgICAgbmF0aXZlIHZvaWQgdW5sb2FkKCk7CisKKyAgICAgICAgcHVibGljIE5hdGl2ZUxpYnJhcnkoQ2xhc3MgZnJvbUNsYXNzLCBTdHJpbmcgbmFtZSkgeworICAgICAgICAgICAgdGhpcy5uYW1lID0gbmFtZTsKKwkgICAgdGhpcy5mcm9tQ2xhc3MgPSBmcm9tQ2xhc3M7CisJfQorCisgICAgICAgIHByb3RlY3RlZCB2b2lkIGZpbmFsaXplKCkgeworCSAgICBzeW5jaHJvbml6ZWQgKGxvYWRlZExpYnJhcnlOYW1lcykgeworCSAgICAgICAgaWYgKGZyb21DbGFzcy5nZXRDbGFzc0xvYWRlcigpICE9IG51bGwgJiYgaGFuZGxlICE9IDApIHsKKwkJICAgIC8qIHJlbW92ZSB0aGUgbmF0aXZlIGxpYnJhcnkgbmFtZSAqLworCQkgICAgaW50IHNpemUgPSBsb2FkZWRMaWJyYXJ5TmFtZXMuc2l6ZSgpOworCQkgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzaXplOyBpKyspIHsKKwkJICAgICAgICBpZiAobmFtZS5lcXVhbHMobG9hZGVkTGlicmFyeU5hbWVzLmVsZW1lbnRBdChpKSkpIHsKKwkJCSAgICBsb2FkZWRMaWJyYXJ5TmFtZXMucmVtb3ZlRWxlbWVudEF0KGkpOworCQkJICAgIGJyZWFrOworCQkJfQorCQkgICAgfQorCQkgICAgLyogdW5sb2FkIHRoZSBsaWJyYXJ5LiAqLworCQkgICAgQ2xhc3NMb2FkZXIubmF0aXZlTGlicmFyeUNvbnRleHQucHVzaCh0aGlzKTsKKwkJICAgIHRyeSB7CisJCQl1bmxvYWQoKTsKKwkJICAgIH0gZmluYWxseSB7CisJCSAgICAgICAgQ2xhc3NMb2FkZXIubmF0aXZlTGlicmFyeUNvbnRleHQucG9wKCk7CisJCSAgICB9CisJCX0KKwkgICAgfQorCX0KKyAgICAgICAgLyogQ2FsbGVkIGluIHRoZSBWTSB0byBkZXRlcm1pbmUgdGhlIGNvbnRleHQgY2xhc3MgaW4KKwkgICBKTklfTG9hZC9KTklfVW5sb2FkICovCisgICAgICAgIHN0YXRpYyBDbGFzcyBnZXRGcm9tQ2xhc3MoKSB7CisgICAgICAgICAgICByZXR1cm4gKChOYXRpdmVMaWJyYXJ5KQorCQkgICAgKENsYXNzTG9hZGVyLm5hdGl2ZUxpYnJhcnlDb250ZXh0LnBlZWsoKSkpLmZyb21DbGFzczsKKwl9CisgICAgfQorCisgICAgLyogdGhlICJkZWZhdWx0IiBkb21haW4uIFNldCBhcyB0aGUgZGVmYXVsdCBQcm90ZWN0aW9uRG9tYWluCisgICAgICogb24gbmV3bHkgY3JlYXRlZCBjbGFzc3Nlcy4KKyAgICAgKi8KKyAgICBwcml2YXRlIFByb3RlY3Rpb25Eb21haW4gZGVmYXVsdERvbWFpbiA9IG51bGw7CisKKyAgICAvKgorICAgICAqIHJldHVybnMgKGFuZCBpbml0aWFsaXplcykgdGhlIGRlZmF1bHQgZG9tYWluLgorICAgICAqLworCisgICAgcHJpdmF0ZSBzeW5jaHJvbml6ZWQgUHJvdGVjdGlvbkRvbWFpbiBnZXREZWZhdWx0RG9tYWluKCkgeworCWlmIChkZWZhdWx0RG9tYWluID09IG51bGwpIHsKKwkgICAgQ29kZVNvdXJjZSBjcyA9IG5ldyBDb2RlU291cmNlKG51bGwsIG51bGwpOworCSAgICBkZWZhdWx0RG9tYWluID0gbmV3IFByb3RlY3Rpb25Eb21haW4oY3MsIG51bGwsIHRoaXMsIG51bGwpOworCX0KKwlyZXR1cm4gZGVmYXVsdERvbWFpbjsKKyAgICB9CisKKyAgICAvKiBBbGwgbmF0aXZlIGxpYnJhcnkgbmFtZXMgd2UndmUgbG9hZGVkLiAqLworICAgIHByaXZhdGUgc3RhdGljIFZlY3RvciBsb2FkZWRMaWJyYXJ5TmFtZXMgPSBuZXcgVmVjdG9yKCk7CisgICAgLyogTmF0aXZlIGxpYnJhcmllcyBiZWxvbmdpbmcgdG8gc3lzdGVtIGNsYXNzZXMuICovCisgICAgcHJpdmF0ZSBzdGF0aWMgVmVjdG9yIHN5c3RlbU5hdGl2ZUxpYnJhcmllcyA9IG5ldyBWZWN0b3IoKTsKKyAgICAvKiBOYXRpdmUgbGlicmFyaWVzIGFzc29jaWF0ZWQgd2l0aCB0aGUgY2xhc3MgbG9hZGVyLiAqLworICAgIHByaXZhdGUgVmVjdG9yIG5hdGl2ZUxpYnJhcmllcyA9IG5ldyBWZWN0b3IoKTsKKworICAgIC8qIG5hdGl2ZSBsaWJyYXJpZXMgYmVpbmcgbG9hZGVkL3VubG9hZGVkLiAqLworICAgIHByaXZhdGUgc3RhdGljIFN0YWNrIG5hdGl2ZUxpYnJhcnlDb250ZXh0ID0gbmV3IFN0YWNrKCk7CisKKyAgICAvKiBUaGUgcGF0aHMgc2VhcmNoZWQgZm9yIGxpYnJhcmllcyAqLworICAgIHN0YXRpYyBwcml2YXRlIFN0cmluZyB1c3JfcGF0aHNbXTsKKyAgICBzdGF0aWMgcHJpdmF0ZSBTdHJpbmcgc3lzX3BhdGhzW107CisKKyAgICBwcml2YXRlIHN0YXRpYyBTdHJpbmdbXSBpbml0aWFsaXplUGF0aChTdHJpbmcgcHJvcG5hbWUpIHsKKyAgICAgICAgU3RyaW5nIGxkcGF0aCA9IFN5c3RlbS5nZXRQcm9wZXJ0eShwcm9wbmFtZSwgIiIpOworCVN0cmluZyBwcyA9IEZpbGUucGF0aFNlcGFyYXRvcjsKKwlpbnQgbGRsZW4gPSBsZHBhdGgubGVuZ3RoKCk7CisJaW50IGksIGosIG47CisJLy8gQ291bnQgdGhlIHNlcGFyYXRvcnMgaW4gdGhlIHBhdGgKKwlpID0gbGRwYXRoLmluZGV4T2YocHMpOworCW4gPSAwOworCXdoaWxlIChpID49IDApIHsKKwkgICAgbisrOworCSAgICBpID0gbGRwYXRoLmluZGV4T2YocHMsIGkrMSk7CisJfQorCisJLy8gYWxsb2NhdGUgdGhlIGFycmF5IG9mIHBhdGhzIC0gbiA6J3MgPSBuICsgMSBwYXRoIGVsZW1lbnRzCisJU3RyaW5nW10gcGF0aHMgPSBuZXcgU3RyaW5nW24gKyAxXTsKKworCS8vIEZpbGwgdGhlIGFycmF5IHdpdGggcGF0aHMgZnJvbSB0aGUgbGRwYXRoCisJbiA9IGkgPSAwOworCWogPSBsZHBhdGguaW5kZXhPZihwcyk7CisJd2hpbGUgKGogPj0gMCkgeworCSAgICBpZiAoaiAtIGkgPiAwKSB7CisJICAgICAgICBwYXRoc1tuKytdID0gbGRwYXRoLnN1YnN0cmluZyhpLCBqKTsKKwkgICAgfSBlbHNlIGlmIChqIC0gaSA9PSAwKSB7CisJICAgICAgICBwYXRoc1tuKytdID0gIi4iOworCSAgICB9CisJICAgIGkgPSBqICsgMTsKKwkgICAgaiA9IGxkcGF0aC5pbmRleE9mKHBzLCBpKTsKKwl9CisJcGF0aHNbbl0gPSBsZHBhdGguc3Vic3RyaW5nKGksIGxkbGVuKTsKKwlyZXR1cm4gcGF0aHM7CisgICAgfQorCisKKyAgICAvKiBDYWxsZWQgaW4gdGhlIGphdmEubGFuZy5SdW50aW1lIGNsYXNzIHRvIGltcGxlbWVudCBsb2FkCisgICAgICogYW5kIGxvYWRMaWJyYXJ5LgorICAgICAqLworICAgIHN0YXRpYyB2b2lkIGxvYWRMaWJyYXJ5KENsYXNzIGZyb21DbGFzcywgU3RyaW5nIG5hbWUsCisJCQkgICAgYm9vbGVhbiBpc0Fic29sdXRlKSB7CisgICAgICAgIENsYXNzTG9hZGVyIGxvYWRlciA9CisJICAgIChmcm9tQ2xhc3MgPT0gbnVsbCkgPyBudWxsIDogZnJvbUNsYXNzLmdldENsYXNzTG9hZGVyKCk7CisgICAgICAgIGlmIChzeXNfcGF0aHMgPT0gbnVsbCkgeworCSAgICB1c3JfcGF0aHMgPSBpbml0aWFsaXplUGF0aCgiamF2YS5saWJyYXJ5LnBhdGgiKTsKKwkgICAgc3lzX3BhdGhzID0gaW5pdGlhbGl6ZVBhdGgoInN1bi5ib290LmxpYnJhcnkucGF0aCIpOworICAgICAgICB9CisgICAgICAgIGlmIChpc0Fic29sdXRlKSB7CisJICAgIGlmIChsb2FkTGlicmFyeTAoZnJvbUNsYXNzLCBuZXcgRmlsZShuYW1lKSkpIHsKKwkgICAgICAgIHJldHVybjsKKwkgICAgfQorCSAgICB0aHJvdyBuZXcgVW5zYXRpc2ZpZWRMaW5rRXJyb3IoIkNhbid0IGxvYWQgbGlicmFyeTogIiArIG5hbWUpOworCX0KKwlpZiAobG9hZGVyICE9IG51bGwpIHsKKwkgICAgU3RyaW5nIGxpYmZpbGVuYW1lID0gbG9hZGVyLmZpbmRMaWJyYXJ5KG5hbWUpOworCSAgICBpZiAobGliZmlsZW5hbWUgIT0gbnVsbCkgeworCSAgICAgICAgRmlsZSBsaWJmaWxlID0gbmV3IEZpbGUobGliZmlsZW5hbWUpOworCSAgICAgICAgaWYgKCFsaWJmaWxlLmlzQWJzb2x1dGUoKSkgeworCQkgICAgdGhyb3cgbmV3IFVuc2F0aXNmaWVkTGlua0Vycm9yKAorICAgICJDbGFzc0xvYWRlci5maW5kTGlicmFyeSBmYWlsZWQgdG8gcmV0dXJuIGFuIGFic29sdXRlIHBhdGg6ICIgKyBsaWJmaWxlbmFtZSk7CisJCX0KKwkJaWYgKGxvYWRMaWJyYXJ5MChmcm9tQ2xhc3MsIGxpYmZpbGUpKSB7CisJCSAgICByZXR1cm47CisJCX0KKwkJdGhyb3cgbmV3IFVuc2F0aXNmaWVkTGlua0Vycm9yICgiQ2FuJ3QgbG9hZCAiICsgbGliZmlsZW5hbWUpOworCSAgICB9CisJfQorCWZvciAoaW50IGkgPSAwIDsgaSA8IHN5c19wYXRocy5sZW5ndGggOyBpKyspIHsKKwkgICAgRmlsZSBsaWJmaWxlID0gbmV3IEZpbGUoc3lzX3BhdGhzW2ldLCBTeXN0ZW0ubWFwTGlicmFyeU5hbWUobmFtZSkpOworCSAgICBpZiAobG9hZExpYnJhcnkwKGZyb21DbGFzcywgbGliZmlsZSkpIHsKKwkgICAgICAgIHJldHVybjsKKwkgICAgfQorCX0KKwlpZiAobG9hZGVyICE9IG51bGwpIHsKKwkgICAgZm9yIChpbnQgaSA9IDAgOyBpIDwgdXNyX3BhdGhzLmxlbmd0aCA7IGkrKykgeworCSAgICAgICAgRmlsZSBsaWJmaWxlID0gbmV3IEZpbGUodXNyX3BhdGhzW2ldLAorCQkJCQlTeXN0ZW0ubWFwTGlicmFyeU5hbWUobmFtZSkpOworCQlpZiAobG9hZExpYnJhcnkwKGZyb21DbGFzcywgbGliZmlsZSkpIHsKKwkJICAgIHJldHVybjsKKwkJfQorCSAgICB9CisJfQorCS8vIE9vcHMsIGl0IGZhaWxlZAorICAgICAgICB0aHJvdyBuZXcgVW5zYXRpc2ZpZWRMaW5rRXJyb3IoIm5vICIgKyBuYW1lICsgIiBpbiBqYXZhLmxpYnJhcnkucGF0aCIpOworICAgIH0KKworICAgIHByaXZhdGUgc3RhdGljIGJvb2xlYW4gbG9hZExpYnJhcnkwKENsYXNzIGZyb21DbGFzcywgZmluYWwgRmlsZSBmaWxlKSB7CisJQm9vbGVhbiBleGlzdHMgPSAoQm9vbGVhbikKKwkgICAgQWNjZXNzQ29udHJvbGxlci5kb1ByaXZpbGVnZWQobmV3IFByaXZpbGVnZWRBY3Rpb24oKSB7CisJCXB1YmxpYyBPYmplY3QgcnVuKCkgeworCQkgICAgcmV0dXJuIG5ldyBCb29sZWFuKGZpbGUuZXhpc3RzKCkpOworCQl9CisJICAgIH0pOworCWlmICghZXhpc3RzLmJvb2xlYW5WYWx1ZSgpKSB7CisJICAgIHJldHVybiBmYWxzZTsKKwl9CisgICAgICAgIFN0cmluZyBuYW1lOworCXRyeSB7CisJICAgIG5hbWUgPSBmaWxlLmdldENhbm9uaWNhbFBhdGgoKTsKKwl9IGNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CisJICAgIHJldHVybiBmYWxzZTsKKwl9CisgICAgICAgIENsYXNzTG9hZGVyIGxvYWRlciA9CisJICAgIChmcm9tQ2xhc3MgPT0gbnVsbCkgPyBudWxsIDogZnJvbUNsYXNzLmdldENsYXNzTG9hZGVyKCk7CisgICAgICAgIFZlY3RvciBsaWJzID0KKwkgICAgbG9hZGVyICE9IG51bGwgPyBsb2FkZXIubmF0aXZlTGlicmFyaWVzIDogc3lzdGVtTmF0aXZlTGlicmFyaWVzOworCXN5bmNocm9uaXplZCAobGlicykgeworCSAgICBpbnQgc2l6ZSA9IGxpYnMuc2l6ZSgpOworCSAgICBmb3IgKGludCBpID0gMDsgaSA8IHNpemU7IGkrKykgeworCSAgICAgICAgTmF0aXZlTGlicmFyeSBsaWIgPSAoTmF0aXZlTGlicmFyeSlsaWJzLmVsZW1lbnRBdChpKTsKKwkJaWYgKG5hbWUuZXF1YWxzKGxpYi5uYW1lKSkgeworCQkgICAgcmV0dXJuIHRydWU7CisJCX0KKwkgICAgfQorCisJICAgIHN5bmNocm9uaXplZCAobG9hZGVkTGlicmFyeU5hbWVzKSB7CisJICAgICAgICBpZiAobG9hZGVkTGlicmFyeU5hbWVzLmNvbnRhaW5zKG5hbWUpKSB7CisJCSAgICB0aHJvdyBuZXcgVW5zYXRpc2ZpZWRMaW5rRXJyb3IKKwkJICAgICAgICAoIk5hdGl2ZSBMaWJyYXJ5ICIgKworCQkJIG5hbWUgKworCQkJICIgYWxyZWFkeSBsb2FkZWQgaW4gYW5vdGhlciBjbGFzc2xvYWRlciIpOworCQl9CisJCS8qIElmIHRoZSBsaWJyYXJ5IGlzIGJlaW5nIGxvYWRlZCAobXVzdCBiZSBieQorCQkgKiB0aGUgc2FtZSB0aHJlYWQsIGJlY2F1c2UgUnVudGltZS5sb2FkIGFuZAorCQkgKiBSdW50aW1lLmxvYWRMaWJyYXJ5IGFyZSBzeW5jaHJvbm91cykuIFRoZQorCQkgKiByZWFzb24gaXMgY2FuIG9jY3VyIGlzIHRoYXQgdGhlIEpOSV9PbkxvYWQKKwkJICogZnVuY3Rpb24gY2FuIGNhdXNlIGFub3RoZXIgbG9hZExpYnJhcnkgY2FsbC4KKwkJICoKKwkJICogVGh1cyB3ZSBjYW4gdXNlIGEgc3RhdGljIHN0YWNrIHRvIGhvbGQgdGhlIGxpc3QKKwkJICogb2YgbGlicmFyaWVzIHdlIGFyZSBsb2FkaW5nLgorCQkgKgorCQkgKiBJZiB0aGVyZSBpcyBhIHBlbmRpbmcgbG9hZCBvcGVyYXRpb24gZm9yIHRoZQorCQkgKiBsaWJyYXJ5LCB3ZSBpbW1lZGlhdGVseSByZXR1cm4gc3VjY2Vzczsgb3RoZXJ3aXNlLAorCQkgKiB3ZSByYWlzZSBVbnNhdGlzZmllZExpbmtFcnJvci4KKwkJICovCisJCWludCBuID0gbmF0aXZlTGlicmFyeUNvbnRleHQuc2l6ZSgpOworCQlmb3IgKGludCBpID0gMDsgaSA8IG47IGkrKykgeworCQkgICAgTmF0aXZlTGlicmFyeSBsaWIgPSAoTmF0aXZlTGlicmFyeSkKKwkJICAgICAgICBuYXRpdmVMaWJyYXJ5Q29udGV4dC5lbGVtZW50QXQoaSk7CisJCSAgICBpZiAobmFtZS5lcXVhbHMobGliLm5hbWUpKSB7CisJCSAgICAgICAgaWYgKGxvYWRlciA9PSBsaWIuZnJvbUNsYXNzLmdldENsYXNzTG9hZGVyKCkpIHsKKwkJCSAgICByZXR1cm4gdHJ1ZTsKKwkJCX0gZWxzZSB7CisJCQkgICAgdGhyb3cgbmV3IFVuc2F0aXNmaWVkTGlua0Vycm9yCisJCQkgICAgICAgICgiTmF0aXZlIExpYnJhcnkgIiArCisJCQkJIG5hbWUgKworCQkJCSAiIGlzIGJlaW5nIGxvYWRlZCBpbiBhbm90aGVyIGNsYXNzbG9hZGVyIik7CisJCQl9CisJCSAgICB9CisJCX0KKwkJTmF0aXZlTGlicmFyeSBsaWIgPSBuZXcgTmF0aXZlTGlicmFyeShmcm9tQ2xhc3MsIG5hbWUpOworCQluYXRpdmVMaWJyYXJ5Q29udGV4dC5wdXNoKGxpYik7CisJCXRyeSB7CisJCSAgICBsaWIubG9hZChuYW1lKTsKKwkJfSBmaW5hbGx5IHsKKwkJICAgIG5hdGl2ZUxpYnJhcnlDb250ZXh0LnBvcCgpOworCQl9CisJCWlmIChsaWIuaGFuZGxlICE9IDApIHsKKwkJICAgIGxvYWRlZExpYnJhcnlOYW1lcy5hZGRFbGVtZW50KG5hbWUpOworCQkgICAgbGlicy5hZGRFbGVtZW50KGxpYik7CisJCSAgICByZXR1cm4gdHJ1ZTsKKwkJfQorCQlyZXR1cm4gZmFsc2U7CisJICAgIH0KKwl9CisgICAgfQorCisgICAgLyogQ2FsbGVkIGluIHRoZSBWTSBjbGFzcyBsaW5raW5nIGNvZGUuICovCisgICAgc3RhdGljIGxvbmcgZmluZE5hdGl2ZShDbGFzc0xvYWRlciBsb2FkZXIsIFN0cmluZyBuYW1lKSB7CisgICAgICAgIFZlY3RvciBsaWJzID0KKwkgICAgbG9hZGVyICE9IG51bGwgPyBsb2FkZXIubmF0aXZlTGlicmFyaWVzIDogc3lzdGVtTmF0aXZlTGlicmFyaWVzOworCXN5bmNocm9uaXplZCAobGlicykgeworCSAgICBpbnQgc2l6ZSA9IGxpYnMuc2l6ZSgpOworCSAgICBmb3IgKGludCBpID0gMDsgaSA8IHNpemU7IGkrKykgeworCSAgICAgICAgTmF0aXZlTGlicmFyeSBsaWIgPSAoTmF0aXZlTGlicmFyeSlsaWJzLmVsZW1lbnRBdChpKTsKKwkJbG9uZyBlbnRyeSA9IGxpYi5maW5kKG5hbWUpOworCQlpZiAoZW50cnkgIT0gMCkKKwkJICAgIHJldHVybiBlbnRyeTsKKwkgICAgfQorCX0KKwlyZXR1cm4gMDsKKyAgICB9CisKKyAgICAvKgorICAgICAqIFRoZSBkZWZhdWx0IHRvZ2dsZSBmb3IgYXNzZXJ0aW9uIGNoZWNraW5nLgorICAgICAqLworICAgIHByaXZhdGUgYm9vbGVhbiBkZWZhdWx0QXNzZXJ0aW9uU3RhdHVzID0gZmFsc2U7CisKKyAgICAvKgorICAgICAqIE1hcHMgU3RyaW5nIHBhY2thZ2VOYW1lIHRvIEJvb2xlYW4gcGFja2FnZSBkZWZhdWx0IGFzc2VydGlvbiBzdGF0dXMKKyAgICAgKiBOb3RlIHRoYXQgdGhlIGRlZmF1bHQgcGFja2FnZSBpcyBwbGFjZWQgdW5kZXIgYSBudWxsIG1hcCBrZXkuCisgICAgICogSWYgdGhpcyBmaWVsZCBpcyBudWxsIHRoZW4gd2UgYXJlIGRlbGVnYXRpbmcgYXNzZXJ0aW9uIHN0YXR1cyBxdWVyaWVzCisgICAgICogdG8gdGhlIFZNLCBpLmUuLCBub25lIG9mIHRoaXMgQ2xhc3NMb2FkZXIncyBhc3NlcnRpb24gc3RhdHVzCisgICAgICogbW9kaWZpY2F0aW9uIG1ldGhvZHMgaGF2ZSBiZWVuIGNhbGxlZC4KKyAgICAgKi8KKyAgICBwcml2YXRlIE1hcCBwYWNrYWdlQXNzZXJ0aW9uU3RhdHVzID0gbnVsbDsKKworICAgIC8qCisgICAgICogTWFwcyBTdHJpbmcgZnVsbHlRdWFsaWZpZWRDbGFzc05hbWUgdG8gQm9vbGVhbiBhc3NlcnRpb25TdGF0dXMKKyAgICAgKiBJZiB0aGlzIGZpZWxkIGlzIG51bGwgdGhlbiB3ZSBhcmUgZGVsZWdhdGluZyBhc3NlcnRpb24gc3RhdHVzIHF1ZXJpZXMKKyAgICAgKiB0byB0aGUgVk0sIGkuZS4sIG5vbmUgb2YgdGhpcyBDbGFzc0xvYWRlcidzIGFzc2VydGlvbiBzdGF0dXMKKyAgICAgKiBtb2RpZmljYXRpb24gbWV0aG9kcyBoYXZlIGJlZW4gY2FsbGVkLgorICAgICAqLworICAgIE1hcCBjbGFzc0Fzc2VydGlvblN0YXR1cyA9IG51bGw7CisKKyAgICAvKioKKyAgICAgKiBTZXRzIHRoZSBkZWZhdWx0IGFzc2VydGlvbiBzdGF0dXMgZm9yIHRoaXMgY2xhc3MgbG9hZGVyLiAgVGhpcyBzZXR0aW5nCisgICAgICogZGV0ZXJtaW5lcyB3aGV0aGVyIGNsYXNzZXMgbG9hZGVkIGJ5IHRoaXMgY2xhc3MgbG9hZGVyIGFuZCBpbml0aWFsaXplZAorICAgICAqIGluIHRoZSBmdXR1cmUgd2lsbCBoYXZlIGFzc2VydGlvbnMgZW5hYmxlZCBvciBkaXNhYmxlZCBieSBkZWZhdWx0LgorICAgICAqIFRoaXMgc2V0dGluZyBtYXkgYmUgb3ZlcnJpZGRlbiBvbiBhIHBlci1wYWNrYWdlIG9yIHBlci1jbGFzcyBiYXNpcyBieQorICAgICAqIGludm9raW5nIHtAbGluayAjc2V0UGFja2FnZUFzc2VydGlvblN0YXR1cyhTdHJpbmcsYm9vbGVhbil9IG9yIHtAbGluaworICAgICAqICNzZXRDbGFzc0Fzc2VydGlvblN0YXR1cyhTdHJpbmcsYm9vbGVhbil9LgorICAgICAqCisgICAgICogQHBhcmFtIGVuYWJsZWQgPHR0PnRydWU8L3R0PiBpZiBjbGFzc2VzIGxvYWRlZCBieSB0aGlzIGNsYXNzIGxvYWRlcgorICAgICAqICAgICAgICB3aWxsIGhlbmNlZm9ydGggaGF2ZSBhc3NlcnRpb25zIGVuYWJsZWQgYnkgZGVmYXVsdCwKKyAgICAgKiAgICAgICAgPHR0PmZhbHNlPC90dD4gaWYgdGhleSB3aWxsIGhhdmUgYXNzZXJ0aW9ucyBkaXNhYmxlZCBieSBkZWZhdWx0LgorICAgICAqIEBzaW5jZSAxLjQKKyAgICAgKi8KKyAgICBwdWJsaWMgc3luY2hyb25pemVkIHZvaWQgc2V0RGVmYXVsdEFzc2VydGlvblN0YXR1cyhib29sZWFuIGVuYWJsZWQpIHsKKyAgICAgICAgaWYgKGNsYXNzQXNzZXJ0aW9uU3RhdHVzID09IG51bGwpCisgICAgICAgICAgICBpbml0aWFsaXplSmF2YUFzc2VydGlvbk1hcHMoKTsKKworICAgICAgICBkZWZhdWx0QXNzZXJ0aW9uU3RhdHVzID0gZW5hYmxlZDsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBTZXRzIHRoZSBwYWNrYWdlIGRlZmF1bHQgYXNzZXJ0aW9uIHN0YXR1cyBmb3IgdGhlIG5hbWVkCisgICAgICogcGFja2FnZS4gIFRoZSBwYWNrYWdlIGRlZmF1bHQgYXNzZXJ0aW9uIHN0YXR1cyBkZXRlcm1pbmVzIHRoZQorICAgICAqIGFzc2VydGlvbiBzdGF0dXMgZm9yIGNsYXNzZXMgaW5pdGlhbGl6ZWQgaW4gdGhlIGZ1dHVyZSB0aGF0IGJlbG9uZworICAgICAqIHRvIHRoZSBuYW1lZCBwYWNrYWdlIG9yIGFueSBvZiBpdHMgInN1YnBhY2thZ2VzLiIKKyAgICAgKiA8cD4KKyAgICAgKiBBIHN1YnBhY2thZ2Ugb2YgYSBwYWNrYWdlIG5hbWVkIHAgaXMgYW55IHBhY2thZ2Ugd2hvc2UgbmFtZQorICAgICAqIGJlZ2lucyB3aXRoICJwLiIgLiAgRm9yIGV4YW1wbGUsIDx0dD5qYXZheC5zd2luZy50ZXh0PC90dD4gaXMKKyAgICAgKiBhIHN1YnBhY2thZ2Ugb2YgPHR0PmphdmF4LnN3aW5nPC90dD4sIGFuZCBib3RoIDx0dD5qYXZhLnV0aWw8L3R0PgorICAgICAqIGFuZCA8dHQ+amF2YS5sYW5nLnJlZmxlY3Q8L3R0PiBhcmUgc3VicGFja2FnZXMgb2YgPHR0PmphdmE8L3R0Pi4KKyAgICAgKiA8cD4KKyAgICAgKiBJbiB0aGUgZXZlbnQgdGhhdCBtdWx0aXBsZSBwYWNrYWdlIGRlZmF1bHRzIGFwcGx5IHRvIGEgZ2l2ZW4KKyAgICAgKiBjbGFzcywgdGhlIHBhY2thZ2UgZGVmYXVsdCBwZXJ0YWluaW5nIHRvIHRoZSBtb3N0IHNwZWNpZmljIHBhY2thZ2UKKyAgICAgKiB0YWtlcyBwcmVjZWRlbmNlIG92ZXIgdGhlIG90aGVycy4gIEZvciBleGFtcGxlLCBpZgorICAgICAqIDx0dD5qYXZheC5sYW5nPC90dD4gYW5kIDx0dD5qYXZheC5sYW5nLnJlZmxlY3Q8L3R0PiBib3RoIGhhdmUKKyAgICAgKiBwYWNrYWdlIGRlZmF1bHRzIGFzc29jaWF0ZWQgd2l0aCB0aGVtLCB0aGUgbGF0dGVyIHBhY2thZ2UKKyAgICAgKiBkZWZhdWx0IGFwcGxpZXMgdG8gY2xhc3NlcyBpbiA8dHQ+amF2YXgubGFuZy5yZWZsZWN0PC90dD4uCisgICAgICogPHA+CisgICAgICogUGFja2FnZSBkZWZhdWx0cyB0YWtlIHByZWNlZGVuY2Ugb3ZlciB0aGUgY2xhc3MgbG9hZGVyJ3MgZGVmYXVsdAorICAgICAqIGFzc2VydGlvbiBzdGF0dXMsIGFuZCBtYXkgYmUgb3ZlcnJpZGRlbiBvbiBhIHBlci1jbGFzcyBiYXNpcyBieQorICAgICAqIGludm9raW5nIHtAbGluayAjc2V0Q2xhc3NBc3NlcnRpb25TdGF0dXMoU3RyaW5nLGJvb2xlYW4pfS4KKyAgICAgKgorICAgICAqIEBwYXJhbSBwYWNrYWdlTmFtZSB0aGUgbmFtZSBvZiB0aGUgcGFja2FnZSB3aG9zZSBwYWNrYWdlIGRlZmF1bHQKKyAgICAgKiAgICAgICAgYXNzZXJ0aW9uIHN0YXR1cyBpcyB0byBiZSBzZXQuIEEgbnVsbCB2YWx1ZQorICAgICAqICAgICAgICBpbmRpY2F0ZXMgdGhlIHVubmFtZWQgcGFja2FnZSB0aGF0IGlzICJjdXJyZW50IgorICAgICAqICAgICAgICAoSkxTIDcuNC4yKS4KKyAgICAgKiBAcGFyYW0gZW5hYmxlZCA8dHQ+dHJ1ZTwvdHQ+IGlmIGNsYXNzZXMgbG9hZGVkIGJ5IHRoaXMgY2xhc3Nsb2FkZXIKKyAgICAgKiAgICAgICAgYW5kIGJlbG9uZ2luZyB0byB0aGUgbmFtZWQgcGFja2FnZSBvciBhbnkgb2YgaXRzIHN1YnBhY2thZ2VzCisgICAgICogICAgICAgIHdpbGwgaGF2ZSBhc3NlcnRpb25zIGVuYWJsZWQgYnkgZGVmYXVsdCwgPHR0PmZhbHNlPC90dD4gaWYgdGhleQorICAgICAqICAgICAgICB3aWxsIGhhdmUgYXNzZXJ0aW9ucyBkaXNhYmxlZCBieSBkZWZhdWx0LgorICAgICAqIEBzaW5jZSAxLjQKKyAgICAgKi8KKyAgICBwdWJsaWMgc3luY2hyb25pemVkIHZvaWQgc2V0UGFja2FnZUFzc2VydGlvblN0YXR1cyhTdHJpbmcgcGFja2FnZU5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbGVhbiBlbmFibGVkKQorICAgIHsKKyAgICAgICAgaWYgKHBhY2thZ2VBc3NlcnRpb25TdGF0dXMgPT0gbnVsbCkKKyAgICAgICAgICAgIGluaXRpYWxpemVKYXZhQXNzZXJ0aW9uTWFwcygpOworCisgICAgICAgIHBhY2thZ2VBc3NlcnRpb25TdGF0dXMucHV0KHBhY2thZ2VOYW1lLCBCb29sZWFuLnZhbHVlT2YoZW5hYmxlZCkpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFNldHMgdGhlIGRlc2lyZWQgYXNzZXJ0aW9uIHN0YXR1cyBmb3IgdGhlIG5hbWVkIHRvcC1sZXZlbCBjbGFzcyBpbgorICAgICAqIHRoaXMgY2xhc3MgbG9hZGVyIGFuZCBhbnkgbmVzdGVkIGNsYXNzZXMgY29udGFpbmVkIHRoZXJlaW4uCisgICAgICogVGhpcyBzZXR0aW5nIHRha2VzIHByZWNlZGVuY2Ugb3ZlciB0aGUgIGNsYXNzIGxvYWRlcidzIGRlZmF1bHQKKyAgICAgKiBhc3NlcnRpb24gc3RhdHVzLCBhbmQgb3ZlciBhbnkgYXBwbGljYWJsZSBwZXItcGFja2FnZSBkZWZhdWx0LgorICAgICAqIFRoaXMgbWV0aG9kIGhhcyBubyBlZmZlY3QgaWYgdGhlIG5hbWVkIGNsYXNzIGhhcyBhbHJlYWR5IGJlZW4KKyAgICAgKiBpbml0aWFsaXplZC4gIChPbmNlIGEgY2xhc3MgaXMgaW5pdGlhbGl6ZWQsIGl0cyBhc3NlcnRpb24gc3RhdHVzIGNhbm5vdAorICAgICAqIGNoYW5nZS4pCisgICAgICogPHA+CisgICAgICogSWYgdGhlIG5hbWVkIGNsYXNzIGlzIG5vdCBhIHRvcC1sZXZlbCBjbGFzcywgdGhpcyBjYWxsIHdpbGwgaGF2ZSBubworICAgICAqIGVmZmVjdCBvbiB0aGUgYWN0dWFsIGFzc2VydGlvbiBzdGF0dXMgb2YgYW55IGNsYXNzLCBhbmQgaXRzIHJldHVybgorICAgICAqIHZhbHVlIGlzIHVuZGVmaW5lZC4KKyAgICAgKgorICAgICAqIEBwYXJhbSBjbGFzc05hbWUgdGhlIGZ1bGx5IHF1YWxpZmllZCBjbGFzcyBuYW1lIG9mIHRoZSB0b3AtbGV2ZWwgY2xhc3MKKyAgICAgKiAgICAgICAgd2hvc2UgYXNzZXJ0aW9uIHN0YXR1cyBpcyB0byBiZSBzZXQuCisgICAgICogQHBhcmFtIGVuYWJsZWQgPHR0PnRydWU8L3R0PiBpZiB0aGUgbmFtZWQgY2xhc3MgaXMgdG8gaGF2ZSBhc3NlcnRpb25zCisgICAgICogICAgICAgIGVuYWJsZWQgd2hlbiAoYW5kIGlmKSBpdCBpcyBpbml0aWFsaXplZCwgPHR0PmZhbHNlPC90dD4gaWYgdGhlCisgICAgICogICAgICAgIGNsYXNzIGlzIHRvIGhhdmUgYXNzZXJ0aW9ucyBkaXNhYmxlZC4KKyAgICAgKiBAc2luY2UgMS40CisgICAgICovCisgICAgcHVibGljIHN5bmNocm9uaXplZCB2b2lkIHNldENsYXNzQXNzZXJ0aW9uU3RhdHVzKFN0cmluZyBjbGFzc05hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2xlYW4gZW5hYmxlZCkKKyAgICB7CisgICAgICAgIGlmIChjbGFzc0Fzc2VydGlvblN0YXR1cyA9PSBudWxsKQorICAgICAgICAgICAgaW5pdGlhbGl6ZUphdmFBc3NlcnRpb25NYXBzKCk7CisKKyAgICAgICAgY2xhc3NBc3NlcnRpb25TdGF0dXMucHV0KGNsYXNzTmFtZSwgQm9vbGVhbi52YWx1ZU9mKGVuYWJsZWQpKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBTZXRzIHRoZSBkZWZhdWx0IGFzc2VydGlvbiBzdGF0dXMgZm9yIHRoaXMgY2xhc3MgbG9hZGVyIHRvCisgICAgICogPHR0PmZhbHNlPC90dD4gYW5kIGRpc2NhcmRzIGFueSBwYWNrYWdlIGRlZmF1bHRzIG9yIGNsYXNzIGFzc2VydGlvbgorICAgICAqIHN0YXR1cyBzZXR0aW5ncyBhc3NvY2lhdGVkIHdpdGggdGhlIGNsYXNzIGxvYWRlci4gIFRoaXMgY2FsbCBpcworICAgICAqIHByb3ZpZGVkIHNvIHRoYXQgY2xhc3MgbG9hZGVycyBjYW4gYmUgbWFkZSB0byBpZ25vcmUgYW55IGNvbW1hbmQgbGluZQorICAgICAqIG9yIHBlcnNpc3RlbnQgYXNzZXJ0aW9uIHN0YXR1cyBzZXR0aW5ncyBhbmQgInN0YXJ0IHdpdGggYSBjbGVhbiBzbGF0ZS4iCisgICAgICoKKyAgICAgKiBAc2luY2UgMS40CisgICAgICovCisgICAgcHVibGljIHN5bmNocm9uaXplZCB2b2lkIGNsZWFyQXNzZXJ0aW9uU3RhdHVzKCkgeworICAgICAgICAvKgorICAgICAgICAgKiBXaGV0aGVyIG9yIG5vdCAiSmF2YSBhc3NlcnRpb24gbWFwcyIgYXJlIGluaXRpYWxpemVkLCBzZXQKKyAgICAgICAgICogdGhlbSB0byBlbXB0eSBtYXBzLCBlZmZlY3RpdmVseSBpZ25vcmluZyBhbnkgcHJlc2VudCBzZXR0aW5ncy4KKyAgICAgICAgICovCisgICAgICAgIGNsYXNzQXNzZXJ0aW9uU3RhdHVzID0gbmV3IEhhc2hNYXAoKTsKKyAgICAgICAgcGFja2FnZUFzc2VydGlvblN0YXR1cyA9IG5ldyBIYXNoTWFwKCk7CisKKyAgICAgICAgZGVmYXVsdEFzc2VydGlvblN0YXR1cyA9IGZhbHNlOworICAgIH0KKworICAgIC8qKgorICAgICAqIFJldHVybnMgdGhlIGFzc2VydGlvbiBzdGF0dXMgdGhhdCB3b3VsZCBiZSBhc3NpZ25lZCB0byB0aGUgc3BlY2lmaWVkCisgICAgICogY2xhc3MgaWYgaXQgd2VyZSB0byBiZSBpbml0aWFsaXplZCBhdCB0aGUgdGltZSB0aGlzIG1ldGhvZCBpcyBpbnZva2VkLgorICAgICAqIElmIHRoZSBuYW1lZCBjbGFzcyBoYXMgaGFkIGl0cyBhc3NlcnRpb24gc3RhdHVzIHNldCwgdGhlIG1vc3QgcmVjZW50CisgICAgICogc2V0dGluZyB3aWxsIGJlIHJldHVybmVkOyBvdGhlcndpc2UsIGlmIGFueSBwYWNrYWdlIGRlZmF1bHQgYXNzZXJ0aW9uCisgICAgICogc3RhdHVzIHBlcnRhaW5zIHRvIHRoaXMgY2xhc3MsIHRoZSBtb3N0IHJlY2VudCBzZXR0aW5nIGZvciB0aGUgbW9zdAorICAgICAqIHNwZWNpZmljIHBlcnRpbmVudCBwYWNrYWdlIGRlZmF1bHQgYXNzZXJ0aW9uIHN0YXR1cyBpcyByZXR1cm5lZDsKKyAgICAgKiBvdGhlcndpc2UsIHRoaXMgY2xhc3MgbG9hZGVyJ3MgZGVmYXVsdCBhc3NlcnRpb24gc3RhdHVzIGlzIHJldHVybmVkLgorICAgICAqCisgICAgICogQHBhcmFtICBjbGFzc05hbWUgdGhlIGZ1bGx5IHF1YWxpZmllZCBjbGFzcyBuYW1lIG9mIHRoZSBjbGFzcyB3aG9zZQorICAgICAqICAgICAgICAgZGVzaXJlZCBhc3NlcnRpb24gc3RhdHVzIGlzIGJlaW5nIHF1ZXJpZWQuCisgICAgICogQHJldHVybiB0aGUgZGVzaXJlZCBhc3NlcnRpb24gc3RhdHVzIG9mIHRoZSBzcGVjaWZpZWQgY2xhc3MuCisgICAgICogQHNlZSAgICAjc2V0Q2xhc3NBc3NlcnRpb25TdGF0dXMoU3RyaW5nLGJvb2xlYW4pCisgICAgICogQHNlZSAgICAjc2V0UGFja2FnZUFzc2VydGlvblN0YXR1cyhTdHJpbmcsYm9vbGVhbikKKyAgICAgKiBAc2VlICAgICNzZXREZWZhdWx0QXNzZXJ0aW9uU3RhdHVzKGJvb2xlYW4pCisgICAgICogQHNpbmNlICAxLjQKKyAgICAgKi8KKyAgICBzeW5jaHJvbml6ZWQgYm9vbGVhbiBkZXNpcmVkQXNzZXJ0aW9uU3RhdHVzKFN0cmluZyBjbGFzc05hbWUpIHsKKyAgICAgICAgQm9vbGVhbiByZXN1bHQ7CisKKyAgICAgICAgLy8gYXNzZXJ0IGNsYXNzQXNzZXJ0aW9uU3RhdHVzICAgIT0gbnVsbDsKKyAgICAgICAgLy8gYXNzZXJ0IHBhY2thZ2VBc3NlcnRpb25TdGF0dXMgIT0gbnVsbDsKKworICAgICAgICAvLyBDaGVjayBmb3IgYSBjbGFzcyBlbnRyeQorICAgICAgICByZXN1bHQgPSAoQm9vbGVhbiljbGFzc0Fzc2VydGlvblN0YXR1cy5nZXQoY2xhc3NOYW1lKTsKKyAgICAgICAgaWYgKHJlc3VsdCAhPSBudWxsKQorICAgICAgICAgICAgcmV0dXJuIHJlc3VsdC5ib29sZWFuVmFsdWUoKTsKKworICAgICAgICAvLyBDaGVjayBmb3IgbW9zdCBzcGVjaWZpYyBwYWNrYWdlIGVudHJ5CisgICAgICAgIGludCBkb3RJbmRleCA9IGNsYXNzTmFtZS5sYXN0SW5kZXhPZigiLiIpOworICAgICAgICBpZiAoZG90SW5kZXggPCAwKSB7IC8vIGRlZmF1bHQgcGFja2FnZQorICAgICAgICAgICAgcmVzdWx0ID0gKEJvb2xlYW4pcGFja2FnZUFzc2VydGlvblN0YXR1cy5nZXQobnVsbCk7CisgICAgICAgICAgICBpZiAocmVzdWx0ICE9IG51bGwpCisgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdC5ib29sZWFuVmFsdWUoKTsKKyAgICAgICAgfQorICAgICAgICB3aGlsZShkb3RJbmRleCA+IDApIHsKKyAgICAgICAgICAgIGNsYXNzTmFtZSA9IGNsYXNzTmFtZS5zdWJzdHJpbmcoMCwgZG90SW5kZXgpOworICAgICAgICAgICAgcmVzdWx0ID0gKEJvb2xlYW4pcGFja2FnZUFzc2VydGlvblN0YXR1cy5nZXQoY2xhc3NOYW1lKTsKKyAgICAgICAgICAgIGlmIChyZXN1bHQgIT0gbnVsbCkKKyAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0LmJvb2xlYW5WYWx1ZSgpOworICAgICAgICAgICAgZG90SW5kZXggPSBjbGFzc05hbWUubGFzdEluZGV4T2YoIi4iLCBkb3RJbmRleC0xKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIFJldHVybiB0aGUgY2xhc3Nsb2FkZXIgZGVmYXVsdAorICAgICAgICByZXR1cm4gZGVmYXVsdEFzc2VydGlvblN0YXR1czsKKyAgICB9CisKKyAgICAvLyBTZXQgdXAgdGhlIGFzc2VydGlvbnMgd2l0aCBpbmZvcm1hdGlvbiBwcm92aWRlZCBieSB0aGUgVk0uCisgICAgcHJpdmF0ZSB2b2lkIGluaXRpYWxpemVKYXZhQXNzZXJ0aW9uTWFwcygpIHsKKyAgICAgICAgLy8gYXNzZXJ0IFRocmVhZC5ob2xkc0xvY2sodGhpcyk7CisKKyAgICAgICAgY2xhc3NBc3NlcnRpb25TdGF0dXMgPSBuZXcgSGFzaE1hcCgpOworICAgICAgICBwYWNrYWdlQXNzZXJ0aW9uU3RhdHVzID0gbmV3IEhhc2hNYXAoKTsKKyAgICAgICAgQXNzZXJ0aW9uU3RhdHVzRGlyZWN0aXZlcyBkaXJlY3RpdmVzID0gcmV0cmlldmVEaXJlY3RpdmVzKCk7CisKKyAgICAgICAgZm9yKGludCBpPTA7IGk8ZGlyZWN0aXZlcy5jbGFzc2VzLmxlbmd0aDsgaSsrKQorICAgICAgICAgICAgY2xhc3NBc3NlcnRpb25TdGF0dXMucHV0KGRpcmVjdGl2ZXMuY2xhc3Nlc1tpXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJvb2xlYW4udmFsdWVPZihkaXJlY3RpdmVzLmNsYXNzRW5hYmxlZFtpXSkpOworCisgICAgICAgIGZvcihpbnQgaT0wOyBpPGRpcmVjdGl2ZXMucGFja2FnZXMubGVuZ3RoOyBpKyspCisgICAgICAgICAgICBwYWNrYWdlQXNzZXJ0aW9uU3RhdHVzLnB1dChkaXJlY3RpdmVzLnBhY2thZ2VzW2ldLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQm9vbGVhbi52YWx1ZU9mKGRpcmVjdGl2ZXMucGFja2FnZUVuYWJsZWRbaV0pKTsKKworICAgICAgICBkZWZhdWx0QXNzZXJ0aW9uU3RhdHVzID0gZGlyZWN0aXZlcy5kZWZsdDsKKyAgICB9CisKKyAgICAvLyBSZXRyaWV2ZXMgdGhlIGFzc2VydGlvbiBkaXJlY3RpdmVzIGZyb20gdGhlIFZNLgorICAgIHByaXZhdGUgc3RhdGljIG5hdGl2ZSBBc3NlcnRpb25TdGF0dXNEaXJlY3RpdmVzIHJldHJpZXZlRGlyZWN0aXZlcygpOworCit9CisKKworY2xhc3MgU3lzdGVtQ2xhc3NMb2FkZXJBY3Rpb24gaW1wbGVtZW50cyBQcml2aWxlZ2VkRXhjZXB0aW9uQWN0aW9uIHsKKyAgICBwcml2YXRlIENsYXNzTG9hZGVyIHBhcmVudDsKKworICAgIFN5c3RlbUNsYXNzTG9hZGVyQWN0aW9uKENsYXNzTG9hZGVyIHBhcmVudCkgeworCXRoaXMucGFyZW50ID0gcGFyZW50OworICAgIH0KKworICAgIHB1YmxpYyBPYmplY3QgcnVuKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJQ2xhc3NMb2FkZXIgc3lzOworCUNvbnN0cnVjdG9yIGN0b3I7CisJQ2xhc3MgYzsKKwlDbGFzcyBjcFtdID0geyBDbGFzc0xvYWRlci5jbGFzcyB9OworCU9iamVjdCBwYXJhbXNbXSA9IHsgcGFyZW50IH07CisKKyAgICAgICAgU3RyaW5nIGNscyA9IFN5c3RlbS5nZXRQcm9wZXJ0eSgiamF2YS5zeXN0ZW0uY2xhc3MubG9hZGVyIik7CisJaWYgKGNscyA9PSBudWxsKSB7CisJICAgIHJldHVybiBwYXJlbnQ7CisJfQorCisJYyA9IENsYXNzLmZvck5hbWUoY2xzLCB0cnVlLCBwYXJlbnQpOworCWN0b3IgPSBjLmdldERlY2xhcmVkQ29uc3RydWN0b3IoY3ApOworCXN5cyA9IChDbGFzc0xvYWRlcikgY3Rvci5uZXdJbnN0YW5jZShwYXJhbXMpOworCVRocmVhZC5jdXJyZW50VGhyZWFkKCkuc2V0Q29udGV4dENsYXNzTG9hZGVyKHN5cyk7CisJcmV0dXJuIHN5czsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZy9hQ2xhc3NMb2FkZXJfaGwuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nL2FDbGFzc0xvYWRlcl9obC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM3Zjk1OWIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZy9hQ2xhc3NMb2FkZXJfaGwuamF2YQpAQCAtMCwwICsxLDE3MzEgQEAKKy8qCisgKiBAKCMpQ2xhc3NMb2FkZXIuamF2YQkxLjE2MiAwMi8wMy8xOQorICoKKyAqIENvcHlyaWdodCAyMDAyIFN1biBNaWNyb3N5c3RlbXMsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFNVTiBQUk9QUklFVEFSWS9DT05GSURFTlRJQUwuIFVzZSBpcyBzdWJqZWN0IHRvIGxpY2Vuc2UgdGVybXMuCisgKi8KKworaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07CitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLmlvLjxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICdTdHJpbmdXcml0ZXInIj5TdHJpbmdXcml0ZXI8L2Vycm9yPjsKK2ltcG9ydCBqYXZhLmlvLjxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICdQcmludFdyaXRlciciPlByaW50V3JpdGVyPC9lcnJvcj47CitpbXBvcnQgamF2YS5pby5GaWxlOworaW1wb3J0IGphdmEubGFuZy5yZWZsZWN0LjxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICdDb25zdHJ1Y3RvciciPkNvbnN0cnVjdG9yPC9lcnJvcj47CitpbXBvcnQgamF2YS5sYW5nLnJlZmxlY3QuPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ0ludm9jYXRpb25UYXJnZXRFeGNlcHRpb24nIj5JbnZvY2F0aW9uVGFyZ2V0RXhjZXB0aW9uPC9lcnJvcj47CitpbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKK2ltcG9ydCBqYXZhLnV0aWwuRW51bWVyYXRpb247CitpbXBvcnQgamF2YS51dGlsLjxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICdWZWN0b3InIj5WZWN0b3I8L2Vycm9yPjsKK2ltcG9ydCBqYXZhLnV0aWwuPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ1N0YWNrJyI+U3RhY2s8L2Vycm9yPjsKK2ltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ0hhc2hTZXQnIj5IYXNoU2V0PC9lcnJvcj47CitpbXBvcnQgamF2YS51dGlsLk1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuTm9TdWNoRWxlbWVudEV4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuU2V0OworaW1wb3J0IGphdmEudXRpbC48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAnamFyJyI+amFyPC9lcnJvcj4uTWFuaWZlc3Q7CitpbXBvcnQgamF2YS5uZXQuVVJMOworaW1wb3J0IGphdmEubmV0Lk1hbGZvcm1lZFVSTEV4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLnNlY3VyaXR5LjxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICdBY2Nlc3NDb250cm9sbGVyJyI+QWNjZXNzQ29udHJvbGxlcjwvZXJyb3I+OworaW1wb3J0IGphdmEuc2VjdXJpdHkuPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ0FjY2Vzc0NvbnRyb2xDb250ZXh0JyI+QWNjZXNzQ29udHJvbENvbnRleHQ8L2Vycm9yPjsKK2ltcG9ydCBqYXZhLnNlY3VyaXR5LjxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICdQcml2aWxlZ2VkQWN0aW9uJyI+UHJpdmlsZWdlZEFjdGlvbjwvZXJyb3I+OworaW1wb3J0IGphdmEuc2VjdXJpdHkuPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ1ByaXZpbGVnZWRBY3Rpb25FeGNlcHRpb24nIj5Qcml2aWxlZ2VkQWN0aW9uRXhjZXB0aW9uPC9lcnJvcj47CitpbXBvcnQgamF2YS5zZWN1cml0eS48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAnUHJpdmlsZWdlZEV4Y2VwdGlvbkFjdGlvbiciPlByaXZpbGVnZWRFeGNlcHRpb25BY3Rpb248L2Vycm9yPjsKK2ltcG9ydCBqYXZhLnNlY3VyaXR5LjxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICdQcm90ZWN0aW9uRG9tYWluJyI+UHJvdGVjdGlvbkRvbWFpbjwvZXJyb3I+OworaW1wb3J0IGphdmEuc2VjdXJpdHkuPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ1Blcm1pc3Npb25zJyI+UGVybWlzc2lvbnM8L2Vycm9yPjsKK2ltcG9ydCBqYXZhLnNlY3VyaXR5LjxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICdDb2RlU291cmNlJyI+Q29kZVNvdXJjZTwvZXJyb3I+OworaW1wb3J0IGphdmEuc2VjdXJpdHkuUG9saWN5OworaW1wb3J0IDxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICdzdW4nIj5zdW48L2Vycm9yPi5taXNjLlVSTENsYXNzUGF0aDsKK2ltcG9ydCA8ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAnc3VuJyI+c3VuPC9lcnJvcj4ubWlzYy5SZXNvdXJjZTsKK2ltcG9ydCA8ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAnc3VuJyI+c3VuPC9lcnJvcj4ubWlzYy5Db21wb3VuZEVudW1lcmF0aW9uOworaW1wb3J0IDxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICdzdW4nIj5zdW48L2Vycm9yPi5taXNjLkNsYXNzRmlsZVRyYW5zZm9ybWVyOworLy9pbXBvcnQgc3VuLm1pc2MuTGF1bmNoZXI7CitpbXBvcnQgPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ3N1biciPnN1bjwvZXJyb3I+LnJlZmxlY3QuUmVmbGVjdGlvbjsKK2ltcG9ydCA8ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAnc3VuJyI+c3VuPC9lcnJvcj4uc2VjdXJpdHkuYWN0aW9uLkdldFByb3BlcnR5QWN0aW9uOworCisvKioKKyAqIEEgY2xhc3MgbG9hZGVyIGlzIGFuIG9iamVjdCB0aGF0IGlzIHJlc3BvbnNpYmxlIGZvciBsb2FkaW5nCisgKiBjbGFzc2VzLiBUaGUgY2xhc3MgPGNvZGU+Q2xhc3NMb2FkZXI8L2NvZGU+IGlzIGFuIGFic3RyYWN0IGNsYXNzLgorICogR2l2ZW4gdGhlIG5hbWUgb2YgYSBjbGFzcywgYSBjbGFzcyBsb2FkZXIgc2hvdWxkIGF0dGVtcHQgdG8gbG9jYXRlCisgKiBvciBnZW5lcmF0ZSBkYXRhIHRoYXQgY29uc3RpdHV0ZXMgYSBkZWZpbml0aW9uIGZvciB0aGUgY2xhc3MuIEEKKyAqIHR5cGljYWwgc3RyYXRlZ3kgaXMgdG8gdHJhbnNmb3JtIHRoZSBuYW1lIGludG8gYSBmaWxlCisgKiBuYW1lIGFuZCB0aGVuIHJlYWQgYSAiY2xhc3MgZmlsZSIgb2YgdGhhdCBuYW1lIGZyb20gYSBmaWxlIHN5c3RlbS4KKyAqIDxwPgorICogRXZlcnkgPGNvZGU+Q2xhc3M8L2NvZGU+IG9iamVjdCBjb250YWlucyBhCisgKiB7QGxpbmsgQ2xhc3MjZ2V0Q2xhc3NMb2FkZXIoKSByZWZlcmVuY2V9IHRvIHRoZQorICogPGNvZGU+Q2xhc3NMb2FkZXI8L2NvZGU+IHRoYXQgZGVmaW5lZCBpdC4KKyAqIDxwPgorICogQ2xhc3Mgb2JqZWN0cyBmb3IgYXJyYXkgY2xhc3NlcyBhcmUgbm90IGNyZWF0ZWQgYnkgY2xhc3MgbG9hZGVycywgYnV0CisgKiBhcmUgY3JlYXRlZCBhdXRvbWF0aWNhbGx5IGFzIHJlcXVpcmVkIGJ5IHRoZSBKYXZhIHJ1bnRpbWUuIFRoZSBjbGFzcworICogbG9hZGVyIGZvciBhbiBhcnJheSBjbGFzcywgYXMgcmV0dXJuZWQgYnkge0BsaW5rIENsYXNzI2dldENsYXNzTG9hZGVyKCl9CisgKiBpcyB0aGUgc2FtZSBhcyB0aGUgY2xhc3MgbG9hZGVyIGZvciBpdHMgZWxlbWVudCB0eXBlOyBpZiB0aGUgZWxlbWVudAorICogdHlwZSBpcyBhIHByaW1pdGl2ZSB0eXBlLCB0aGVuIHRoZSBhcnJheSBjbGFzcyBoYXMgbm8gY2xhc3MgbG9hZGVyLgorICogPHA+CisgKiBBcHBsaWNhdGlvbnMgaW1wbGVtZW50IHN1YmNsYXNzZXMgb2YgPGNvZGU+Q2xhc3NMb2FkZXI8L2NvZGU+IGluCisgKiBvcmRlciB0byBleHRlbmQgdGhlIG1hbm5lciBpbiB3aGljaCB0aGUgSmF2YSB2aXJ0dWFsIG1hY2hpbmUKKyAqIGR5bmFtaWNhbGx5IGxvYWRzIGNsYXNzZXMuCisgKiA8cD4KKyAqIENsYXNzIGxvYWRlcnMgbWF5IHR5cGljYWxseSBiZSB1c2VkIGJ5IHNlY3VyaXR5IG1hbmFnZXJzIHRvCisgKiBpbmRpY2F0ZSBzZWN1cml0eSBkb21haW5zLgorICogPHA+CisgKiBUaGUgPGNvZGU+Q2xhc3NMb2FkZXI8L2NvZGU+IGNsYXNzIHVzZXMgYSBkZWxlZ2F0aW9uIG1vZGVsIHRvCisgKiBzZWFyY2ggZm9yIGNsYXNzZXMgYW5kIHJlc291cmNlcy4gRWFjaCBpbnN0YW5jZSBvZgorICogPGNvZGU+Q2xhc3NMb2FkZXI8L2NvZGU+IGhhcyBhbiBhc3NvY2lhdGVkIHBhcmVudCBjbGFzcyBsb2FkZXIuCisgKiBXaGVuIGNhbGxlZCB1cG9uIHRvIGZpbmQgYSBjbGFzcyBvciByZXNvdXJjZSwgYQorICogPGNvZGU+Q2xhc3NMb2FkZXI8L2NvZGU+IGluc3RhbmNlIHdpbGwgZGVsZWdhdGUgdGhlIHNlYXJjaCBmb3IKKyAqIHRoZSBjbGFzcyBvciByZXNvdXJjZSB0byBpdHMgcGFyZW50IGNsYXNzIGxvYWRlciBiZWZvcmUKKyAqIGF0dGVtcHRpbmcgdG8gZmluZCB0aGUgY2xhc3Mgb3IgcmVzb3VyY2UgaXRzZWxmLiAgVGhlIHZpcnR1YWwKKyAqIG1hY2hpbmUncyBidWlsdC1pbiBjbGFzcyBsb2FkZXIsIGNhbGxlZCB0aGUgYm9vdHN0cmFwIGNsYXNzIGxvYWRlciwKKyAqIGRvZXMgbm90IGl0c2VsZiBoYXZlIGEgcGFyZW50IGJ1dCBtYXkgc2VydmUgYXMgdGhlIHBhcmVudCBvZiBhCisgKiA8Y29kZT5DbGFzc0xvYWRlcjwvY29kZT4gaW5zdGFuY2UuCisgKiA8cD4KKyAqIE5vcm1hbGx5LCB0aGUgSmF2YSB2aXJ0dWFsIG1hY2hpbmUgbG9hZHMgY2xhc3NlcyBmcm9tIHRoZSBsb2NhbAorICogZmlsZSBzeXN0ZW0gaW4gYSBwbGF0Zm9ybS1kZXBlbmRlbnQgbWFubmVyLiBGb3IgZXhhbXBsZSwgb24gVU5JWAorICogc3lzdGVtcywgdGhlIHZpcnR1YWwgbWFjaGluZSBsb2FkcyBjbGFzc2VzIGZyb20gdGhlIGRpcmVjdG9yeQorICogZGVmaW5lZCBieSB0aGUgPGNvZGU+Q0xBU1NQQVRIPC9jb2RlPiBlbnZpcm9ubWVudCB2YXJpYWJsZS4KKyAqIDxwPgorICogSG93ZXZlciwgc29tZSBjbGFzc2VzIG1heSBub3Qgb3JpZ2luYXRlIGZyb20gYSBmaWxlOyB0aGV5IG1heQorICogb3JpZ2luYXRlIGZyb20gb3RoZXIgc291cmNlcywgc3VjaCBhcyB0aGUgbmV0d29yaywgb3IgdGhleSBjb3VsZAorICogYmUgY29uc3RydWN0ZWQgYnkgYW4gYXBwbGljYXRpb24uIFRoZSBtZXRob2QKKyAqIDxjb2RlPmRlZmluZUNsYXNzPC9jb2RlPiBjb252ZXJ0cyBhbiBhcnJheSBvZiBieXRlcyBpbnRvIGFuCisgKiBpbnN0YW5jZSBvZiBjbGFzcyA8Y29kZT5DbGFzczwvY29kZT4uIEluc3RhbmNlcyBvZiB0aGlzIG5ld2x5CisgKiBkZWZpbmVkIGNsYXNzIGNhbiBiZSBjcmVhdGVkIHVzaW5nIHRoZSA8Y29kZT5uZXdJbnN0YW5jZTwvY29kZT4KKyAqIG1ldGhvZCBpbiBjbGFzcyA8Y29kZT5DbGFzczwvY29kZT4uCisgKiA8cD4KKyAqIFRoZSBtZXRob2RzIGFuZCBjb25zdHJ1Y3RvcnMgb2Ygb2JqZWN0cyBjcmVhdGVkIGJ5IGEgY2xhc3MgbG9hZGVyCisgKiBtYXkgcmVmZXJlbmNlIG90aGVyIGNsYXNzZXMuIFRvIGRldGVybWluZSB0aGUgY2xhc3MoZXMpIHJlZmVycmVkCisgKiB0bywgdGhlIEphdmEgdmlydHVhbCBtYWNoaW5lIGNhbGxzIHRoZSA8Y29kZT5sb2FkQ2xhc3M8L2NvZGU+CisgKiBtZXRob2Qgb2YgdGhlIGNsYXNzIGxvYWRlciB0aGF0IG9yaWdpbmFsbHkgY3JlYXRlZCB0aGUgY2xhc3MuCisgKiA8cD4KKyAqIEZvciBleGFtcGxlLCBhbiBhcHBsaWNhdGlvbiBjb3VsZCBjcmVhdGUgYSBuZXR3b3JrIGNsYXNzIGxvYWRlcgorICogdG8gZG93bmxvYWQgY2xhc3MgZmlsZXMgZnJvbSBhIHNlcnZlci4gU2FtcGxlIGNvZGUgbWlnaHQgbG9vayBsaWtlOgorICogPGJsb2NrcXVvdGU+PHByZT4KKyAqICAgQ2xhc3NMb2FkZXIgbG9hZGVyJm5ic3A7PSBuZXcgTmV0d29ya0NsYXNzTG9hZGVyKGhvc3QsJm5ic3A7cG9ydCk7CisgKiAgIE9iamVjdCBtYWluJm5ic3A7PSBsb2FkZXIubG9hZENsYXNzKCJNYWluIiwgdHJ1ZSkubmV3SW5zdGFuY2UoKTsKKyAqCSAmbmJzcDsuJm5ic3A7LiZuYnNwOy4KKyAqIDwvcHJlPjwvYmxvY2txdW90ZT4KKyAqIDxwPgorICogVGhlIG5ldHdvcmsgY2xhc3MgbG9hZGVyIHN1YmNsYXNzIG11c3QgZGVmaW5lIHRoZSBtZXRob2RzCisgKiA8Y29kZT5maW5kQ2xhc3M8L2NvZGU+IGFuZCA8Y29kZT5sb2FkQ2xhc3NEYXRhPC9jb2RlPgorICogdG8gbG9hZCBhIGNsYXNzIGZyb20gdGhlIG5ldHdvcmsuIE9uY2UgaXQKKyAqIGhhcyBkb3dubG9hZGVkIHRoZSBieXRlcyB0aGF0IG1ha2UgdXAgdGhlIGNsYXNzLCBpdCBzaG91bGQgdXNlIHRoZQorICogbWV0aG9kIDxjb2RlPmRlZmluZUNsYXNzPC9jb2RlPiB0byBjcmVhdGUgYSBjbGFzcyBpbnN0YW5jZS4gQQorICogc2FtcGxlIGltcGxlbWVudGF0aW9uIGlzOgorICogPHA+PGhyPjxibG9ja3F1b3RlPjxwcmU+CisgKiAgICAgY2xhc3MgTmV0d29ya0NsYXNzTG9hZGVyIGV4dGVuZHMgQ2xhc3NMb2FkZXIgeworICogICAgICAgICBTdHJpbmcgaG9zdDsKKyAqICAgICAgICAgaW50IHBvcnQ7CisgKgorICogICAgICAgICBwdWJsaWMgQ2xhc3MgZmluZENsYXNzKFN0cmluZyBuYW1lKSB7CisgKiAgICAgICAgICAgICBieXRlW10gYiA9IGxvYWRDbGFzc0RhdGEobmFtZSk7CisgKiAgICAgICAgICAgICByZXR1cm4gZGVmaW5lQ2xhc3MobmFtZSwgYiwgMCwgYi5sZW5ndGgpOworICogICAgICAgICB9CisgKgorICogICAgICAgICBwcml2YXRlIGJ5dGVbXSBsb2FkQ2xhc3NEYXRhKFN0cmluZyBuYW1lKSB7CisgKiAgICAgICAgICAgICAvLyBsb2FkIHRoZSBjbGFzcyBkYXRhIGZyb20gdGhlIGNvbm5lY3Rpb24KKyAqICAgICAgICAgICAgICZuYnNwOy4mbmJzcDsuJm5ic3A7LgorICogICAgICAgICB9CisgKiAgICAgfQorICogPC9wcmU+PC9ibG9ja3F1b3RlPjxocj4KKyAqCisgKiBAdmVyc2lvbiAxLjE2MiwgMDMvMTkvMDIKKyAqIEBzZWUgICAgIGphdmEubGFuZy5DbGFzcworICogQHNlZSAgICAgamF2YS5sYW5nLkNsYXNzI25ld0luc3RhbmNlKCkKKyAqIEBzZWUgICAgIGphdmEubGFuZy5DbGFzc0xvYWRlciNkZWZpbmVDbGFzcyhieXRlW10sIGludCwgaW50KQorICogQHNlZSAgICAgamF2YS5sYW5nLkNsYXNzTG9hZGVyI2xvYWRDbGFzcyhqYXZhLmxhbmcuU3RyaW5nLCBib29sZWFuKQorICogQHNlZSAgICAgamF2YS5sYW5nLkNsYXNzTG9hZGVyI3Jlc29sdmVDbGFzcyhqYXZhLmxhbmcuQ2xhc3MpCisgKiBAc2luY2UgICBKREsxLjAKKyAqLworcHVibGljIGFic3RyYWN0IGNsYXNzIENsYXNzTG9hZGVyIHsKKworICAgIHByaXZhdGUgc3RhdGljIG5hdGl2ZSB2b2lkIHJlZ2lzdGVyTmF0aXZlcygpOworICAgIHN0YXRpYyB7CisgICAgICAgIHJlZ2lzdGVyTmF0aXZlcygpOworICAgIH0KKworICAgIC8qCisgICAgICogSWYgaW5pdGlhbGl6YXRpb24gc3VjY2VlZCB0aGlzIGlzIHNldCB0byB0cnVlIGFuZCBzZWN1cml0eSBjaGVja3Mgd2lsbAorICAgICAqIHN1Y2NlZWQuIE90aGVyd2lzZSB0aGUgb2JqZWN0IGlzIG5vdCBpbml0aWFsaXplZCBhbmQgdGhlIG9iamVjdCBpcworICAgICAqIHVzZWxlc3MuCisgICAgICovCisgICAgcHJpdmF0ZSBib29sZWFuIGluaXRpYWxpemVkID0gZmFsc2U7CisKKyAgICAvKgorICAgICAqIFRoZSBwYXJlbnQgY2xhc3MgbG9hZGVyIGZvciBkZWxlZ2F0aW9uLgorICAgICAqLworICAgIHByaXZhdGUgQ2xhc3NMb2FkZXIgcGFyZW50OworCisgICAgLyoKKyAgICAgKiBIYXNodGFibGUgdGhhdCBtYXBzIHBhY2thZ2VzIHRvIGNlcnRzCisgICAgICovCisgICAgcHJpdmF0ZSBIYXNodGFibGUgcGFja2FnZTJjZXJ0cyA9IG5ldyBIYXNodGFibGUoMTEpOworCisgICAgLyoKKyAgICAgKiBzaGFyZWQgYW1vbmcgYWxsIHBhY2thZ2VzIHdpdGggdW5zaWduZWQgY2xhc3NlcworICAgICAqLworICAgIGphdmEuc2VjdXJpdHkuPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ2NlcnQnIj5jZXJ0PC9lcnJvcj4uQ2VydGlmaWNhdGVbXSBub2NlcnRzOworCisgICAgLyoKKyAgICAgKiBUaGUgY2xhc3NlcyBsb2FkZWQgYnkgdGhpcyBjbGFzcyBsb2FkZXIuIFRoZSBvbmx5IHB1cnBvc2Ugb2YgdGhpcworICAgICAqIHRhYmxlIGlzIHRvIGtlZXAgdGhlIGNsYXNzZXMgZnJvbSBiZWluZyBHQydlZCB1bnRpbCB0aGUgbG9hZGVyCisgICAgICogaXMgR0MnZWQuCisgICAgICovCisgICAgcHJpdmF0ZSA8ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAnVmVjdG9yJyI+VmVjdG9yPC9lcnJvcj4gY2xhc3NlcyA9IG5ldyA8ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAnVmVjdG9yJyI+VmVjdG9yPC9lcnJvcj4oKTsKKworICAgIC8qCisgICAgICogVGhlIGluaXRpYXRpbmcgcHJvdGVjdGlvbiBkb21haW5zIGZvciBhbGwgY2xhc3NlcworICAgICAqIGxvYWRlZCBieSB0aGlzIGxvYWRlci4KKyAgICAgKi8KKyAgICBwcml2YXRlIFNldCBkb21haW5zID0gbmV3IDxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICdIYXNoU2V0JyI+SGFzaFNldDwvZXJyb3I+KCk7CisKKyAgICAvKgorICAgICAqIENhbGxlZCBieSB0aGUgVk0gdG8gcmVjb3JkIGV2ZXJ5IGxvYWRlZCBjbGFzcyB3aXRoIHRoaXMgbG9hZGVyLgorICAgICAqLworICAgIHZvaWQgYWRkQ2xhc3MoQ2xhc3MgYykgeworICAgICAgICBjbGFzc2VzLjxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgbWV0aG9kICdhZGRFbGVtZW50KGphdmEubGFuZy5DbGFzcyknIj5hZGRFbGVtZW50PC9lcnJvcj4oYyk7CisgICAgfQorCisgICAgLyoKKyAgICAgKiBUaGUgcGFja2FnZXMgZGVmaW5lZCBpbiB0aGlzIGNsYXNzIGxvYWRlci4gRWFjaCBwYWNrYWdlIG5hbWUgaXMKKyAgICAgKiBtYXBwZWQgdG8gaXRzIGNvcnJlc3BvbmRpbmcgUGFja2FnZSBvYmplY3QuCisgICAgICovCisgICAgcHJpdmF0ZSBIYXNoTWFwIHBhY2thZ2VzID0gbmV3IEhhc2hNYXAoKTsKKworICAgIC8qKgorICAgICAqIENyZWF0ZXMgYSBuZXcgY2xhc3MgbG9hZGVyIHVzaW5nIHRoZSBzcGVjaWZpZWQgcGFyZW50IGNsYXNzIGxvYWRlcgorICAgICAqIGZvciBkZWxlZ2F0aW9uLgorICAgICAqIDxwPgorICAgICAqIElmIHRoZXJlIGlzIGEgc2VjdXJpdHkgbWFuYWdlciwgaXRzIDxjb2RlPmNoZWNrQ3JlYXRlQ2xhc3NMb2FkZXI8L2NvZGU+CisgICAgICogbWV0aG9kIGlzIGNhbGxlZC4gVGhpcyBtYXkgcmVzdWx0IGluIGEgc2VjdXJpdHkgZXhjZXB0aW9uLgorICAgICAqCisgICAgICogQHBhcmFtIHBhcmVudCB0aGUgcGFyZW50IGNsYXNzIGxvYWRlcgorICAgICAqCisgICAgICogQHRocm93cyAgU2VjdXJpdHlFeGNlcHRpb24gaWYgYSBzZWN1cml0eSBtYW5hZ2VyIGV4aXN0cyBhbmQgaXRzCisgICAgICogPGNvZGU+Y2hlY2tDcmVhdGVDbGFzc0xvYWRlcjwvY29kZT4gbWV0aG9kIGRvZXNuJ3QgYWxsb3cgY3JlYXRpb24gb2YgYQorICAgICAqIG5ldyBjbGFzcyBsb2FkZXIuCisgICAgICogQHNlZSAgICAgICBqYXZhLmxhbmcuU2VjdXJpdHlFeGNlcHRpb24KKyAgICAgKiBAc2VlICAgICAgIGphdmEubGFuZy5TZWN1cml0eU1hbmFnZXIjY2hlY2tDcmVhdGVDbGFzc0xvYWRlcigpCisgICAgICogQHNpbmNlICAgICAxLjIKKyAgICAgKi8KKyAgICBwcm90ZWN0ZWQgQ2xhc3NMb2FkZXIoQ2xhc3NMb2FkZXIgcGFyZW50KSB7CisJPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ1NlY3VyaXR5TWFuYWdlciciPlNlY3VyaXR5TWFuYWdlcjwvZXJyb3I+IHNlY3VyaXR5ID0gU3lzdGVtLmdldFNlY3VyaXR5TWFuYWdlcigpOworCWlmIChzZWN1cml0eSAhPSBudWxsKSB7CisJICAgIHNlY3VyaXR5LjxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgbWV0aG9kICdjaGVja0NyZWF0ZUNsYXNzTG9hZGVyKCknIj5jaGVja0NyZWF0ZUNsYXNzTG9hZGVyPC9lcnJvcj4oKTsKKwl9CisJdGhpcy5wYXJlbnQgPSBwYXJlbnQ7CisJaW5pdGlhbGl6ZWQgPSB0cnVlOworICAgIH0KKworICAgIC8qKgorICAgICAqIENyZWF0ZXMgYSBuZXcgY2xhc3MgbG9hZGVyIHVzaW5nIHRoZSA8Y29kZT5DbGFzc0xvYWRlcjwvY29kZT4KKyAgICAgKiByZXR1cm5lZCBieSB0aGUgbWV0aG9kIDxjb2RlPmdldFN5c3RlbUNsYXNzTG9hZGVyKCk8L2NvZGU+IGFzIHRoZQorICAgICAqIHBhcmVudCBjbGFzcyBsb2FkZXIuCisgICAgICogPHA+CisgICAgICogSWYgdGhlcmUgaXMgYSBzZWN1cml0eSBtYW5hZ2VyLCBpdHMgPGNvZGU+Y2hlY2tDcmVhdGVDbGFzc0xvYWRlcjwvY29kZT4KKyAgICAgKiBtZXRob2QgaXMgY2FsbGVkLiBUaGlzIG1heSByZXN1bHQgaW4gYSBzZWN1cml0eSBleGNlcHRpb24uCisgICAgICoKKyAgICAgKiBAdGhyb3dzICBTZWN1cml0eUV4Y2VwdGlvbgorICAgICAqICAgIGlmIGEgc2VjdXJpdHkgbWFuYWdlciBleGlzdHMgYW5kIGl0cyA8Y29kZT5jaGVja0NyZWF0ZUNsYXNzTG9hZGVyPC9jb2RlPgorICAgICAqICAgIG1ldGhvZCBkb2Vzbid0IGFsbG93IGNyZWF0aW9uIG9mIGEgbmV3IGNsYXNzIGxvYWRlci4KKyAgICAgKgorICAgICAqIEBzZWUgICAgICAgamF2YS5sYW5nLlNlY3VyaXR5RXhjZXB0aW9uCisgICAgICogQHNlZSAgICAgICBqYXZhLmxhbmcuU2VjdXJpdHlNYW5hZ2VyI2NoZWNrQ3JlYXRlQ2xhc3NMb2FkZXIoKQorICAgICAqLworICAgIHByb3RlY3RlZCBDbGFzc0xvYWRlcigpIHsKKwk8ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAnU2VjdXJpdHlNYW5hZ2VyJyI+U2VjdXJpdHlNYW5hZ2VyPC9lcnJvcj4gc2VjdXJpdHkgPSBTeXN0ZW0uZ2V0U2VjdXJpdHlNYW5hZ2VyKCk7CisJaWYgKHNlY3VyaXR5ICE9IG51bGwpIHsKKwkgICAgc2VjdXJpdHkuPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBtZXRob2QgJ2NoZWNrQ3JlYXRlQ2xhc3NMb2FkZXIoKSciPmNoZWNrQ3JlYXRlQ2xhc3NMb2FkZXI8L2Vycm9yPigpOworCX0KKwl0aGlzLnBhcmVudCA9IGdldFN5c3RlbUNsYXNzTG9hZGVyKCk7CisJaW5pdGlhbGl6ZWQgPSB0cnVlOworICAgIH0KKworICAgIC8qKgorICAgICAqIExvYWRzIHRoZSBjbGFzcyB3aXRoIHRoZSBzcGVjaWZpZWQgbmFtZS4gVGhpcyBtZXRob2Qgc2VhcmNoZXMgZm9yCisgICAgICogY2xhc3NlcyBpbiB0aGUgc2FtZSBtYW5uZXIgYXMgdGhlIHtAbGluayAjbG9hZENsYXNzKFN0cmluZywgYm9vbGVhbil9CisgICAgICogbWV0aG9kLiBJdCBpcyBjYWxsZWQgYnkgdGhlIEphdmEgdmlydHVhbCBtYWNoaW5lIHRvIHJlc29sdmUgY2xhc3MKKyAgICAgKiByZWZlcmVuY2VzLiBDYWxsaW5nIHRoaXMgbWV0aG9kIGlzIGVxdWl2YWxlbnQgdG8gY2FsbGluZworICAgICAqIDxjb2RlPmxvYWRDbGFzcyhuYW1lLCBmYWxzZSk8L2NvZGU+LgorICAgICAqCisgICAgICogQHBhcmFtICAgICBuYW1lIHRoZSBuYW1lIG9mIHRoZSBjbGFzcworICAgICAqIEByZXR1cm4gICAgdGhlIHJlc3VsdGluZyA8Y29kZT5DbGFzczwvY29kZT4gb2JqZWN0CisgICAgICogQGV4Y2VwdGlvbiBDbGFzc05vdEZvdW5kRXhjZXB0aW9uIGlmIHRoZSBjbGFzcyB3YXMgbm90IGZvdW5kCisgICAgICovCisgICAgcHVibGljIENsYXNzIGxvYWRDbGFzcyhTdHJpbmcgbmFtZSkgdGhyb3dzIENsYXNzTm90Rm91bmRFeGNlcHRpb24KKyAgICB7CisJcmV0dXJuIGxvYWRDbGFzcyhuYW1lLCBmYWxzZSk7CisgICAgfQorCisgICAgLyoqCisgICAgICogTG9hZHMgdGhlIGNsYXNzIHdpdGggdGhlIHNwZWNpZmllZCBuYW1lLiAgVGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gb2YKKyAgICAgKiB0aGlzIG1ldGhvZCBzZWFyY2hlcyBmb3IgY2xhc3NlcyBpbiB0aGUgZm9sbG93aW5nIG9yZGVyOjxwPgorICAgICAqCisgICAgICogPG9sPgorICAgICAqIDxsaT4gQ2FsbCB7QGxpbmsgI2ZpbmRMb2FkZWRDbGFzcyhTdHJpbmcpfSB0byBjaGVjayBpZiB0aGUgY2xhc3MgaGFzCisgICAgICogICAgICBhbHJlYWR5IGJlZW4gbG9hZGVkLiA8cD4KKyAgICAgKiA8bGk+IENhbGwgdGhlIDxjb2RlPmxvYWRDbGFzczwvY29kZT4gbWV0aG9kIG9uIHRoZSBwYXJlbnQgY2xhc3MKKyAgICAgKiAgICAgIGxvYWRlci4gIElmIHRoZSBwYXJlbnQgaXMgPGNvZGU+bnVsbDwvY29kZT4gdGhlIGNsYXNzIGxvYWRlcgorICAgICAqICAgICAgYnVpbHQtaW4gdG8gdGhlIHZpcnR1YWwgbWFjaGluZSBpcyB1c2VkLCBpbnN0ZWFkLiA8cD4KKyAgICAgKiA8bGk+IENhbGwgdGhlIHtAbGluayAjZmluZENsYXNzKFN0cmluZyl9IG1ldGhvZCB0byBmaW5kIHRoZSBjbGFzcy4gPHA+CisgICAgICogPC9vbD4KKyAgICAgKgorICAgICAqIElmIHRoZSBjbGFzcyB3YXMgZm91bmQgdXNpbmcgdGhlIGFib3ZlIHN0ZXBzLCBhbmQgdGhlCisgICAgICogPGNvZGU+cmVzb2x2ZTwvY29kZT4gZmxhZyBpcyB0cnVlLCB0aGlzIG1ldGhvZCB3aWxsIHRoZW4gY2FsbCB0aGUKKyAgICAgKiB7QGxpbmsgI3Jlc29sdmVDbGFzcyhDbGFzcyl9IG1ldGhvZCBvbiB0aGUgcmVzdWx0aW5nIGNsYXNzIG9iamVjdC4KKyAgICAgKiA8cD4KKyAgICAgKiBGcm9tIHRoZSBKYXZhIDIgU0RLLCB2MS4yLCBzdWJjbGFzc2VzIG9mIENsYXNzTG9hZGVyIGFyZQorICAgICAqIGVuY291cmFnZWQgdG8gb3ZlcnJpZGUKKyAgICAgKiB7QGxpbmsgI2ZpbmRDbGFzcyhTdHJpbmcpfSwgcmF0aGVyIHRoYW4gdGhpcyBtZXRob2QuPHA+CisgICAgICoKKyAgICAgKiBAcGFyYW0gICAgIG5hbWUgdGhlIG5hbWUgb2YgdGhlIGNsYXNzCisgICAgICogQHBhcmFtICAgICByZXNvbHZlIGlmIDxjb2RlPnRydWU8L2NvZGU+IHRoZW4gcmVzb2x2ZSB0aGUgY2xhc3MKKyAgICAgKiBAcmV0dXJuCSAgdGhlIHJlc3VsdGluZyA8Y29kZT5DbGFzczwvY29kZT4gb2JqZWN0CisgICAgICogQGV4Y2VwdGlvbiBDbGFzc05vdEZvdW5kRXhjZXB0aW9uIGlmIHRoZSBjbGFzcyBjb3VsZCBub3QgYmUgZm91bmQKKyAgICAgKi8KKyAgICBwcm90ZWN0ZWQgc3luY2hyb25pemVkIENsYXNzIGxvYWRDbGFzcyhTdHJpbmcgbmFtZSwgYm9vbGVhbiByZXNvbHZlKQorCXRocm93cyBDbGFzc05vdEZvdW5kRXhjZXB0aW9uCisgICAgeworCS8vIEZpcnN0LCBjaGVjayBpZiB0aGUgY2xhc3MgaGFzIGFscmVhZHkgYmVlbiBsb2FkZWQKKwlDbGFzcyBjID0gZmluZExvYWRlZENsYXNzKG5hbWUpOworCWlmIChjID09IG51bGwpIHsKKwkgICAgdHJ5IHsKKwkJaWYgKHBhcmVudCAhPSBudWxsKSB7CisJCSAgICBjID0gcGFyZW50LmxvYWRDbGFzcyhuYW1lLCBmYWxzZSk7CisJCX0gZWxzZSB7CisJCSAgICBjID0gZmluZEJvb3RzdHJhcENsYXNzMChuYW1lKTsKKwkJfQorCSAgICB9IGNhdGNoIChDbGFzc05vdEZvdW5kRXhjZXB0aW9uIGUpIHsKKwkgICAgICAgIC8vIElmIHN0aWxsIG5vdCBmb3VuZCwgdGhlbiBjYWxsIGZpbmRDbGFzcyBpbiBvcmRlcgorCSAgICAgICAgLy8gdG8gZmluZCB0aGUgY2xhc3MuCisJICAgICAgICBjID0gZmluZENsYXNzKG5hbWUpOworCSAgICB9CisJfQorCWlmIChyZXNvbHZlKSB7CisJICAgIHJlc29sdmVDbGFzcyhjKTsKKwl9CisJcmV0dXJuIGM7CisgICAgfQorCisgICAgLyoKKyAgICAgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgdGhlIHZpcnR1YWwgbWFjaGluZSB0byBsb2FkCisgICAgICogYSBjbGFzcy4KKyAgICAgKi8KKyAgICBwcml2YXRlIHN5bmNocm9uaXplZCBDbGFzcyBsb2FkQ2xhc3NJbnRlcm5hbChTdHJpbmcgbmFtZSkKKwl0aHJvd3MgQ2xhc3NOb3RGb3VuZEV4Y2VwdGlvbiB7CisKKwlyZXR1cm4gbG9hZENsYXNzKG5hbWUpOworICAgIH0KKworICAgIHByaXZhdGUgdm9pZCBjaGVja1BhY2thZ2VBY2Nlc3MoQ2xhc3MgY2xzLCA8ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAnUHJvdGVjdGlvbkRvbWFpbiciPlByb3RlY3Rpb25Eb21haW48L2Vycm9yPiBwZCkgeworCWZpbmFsIDxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICdTZWN1cml0eU1hbmFnZXInIj5TZWN1cml0eU1hbmFnZXI8L2Vycm9yPiBzbSA9IFN5c3RlbS5nZXRTZWN1cml0eU1hbmFnZXIoKTsKKwlpZiAoc20gIT0gbnVsbCkgeworCSAgICBmaW5hbCBTdHJpbmcgbmFtZSA9IGNscy5nZXROYW1lKCk7CisgICAgICAgICAgICBmaW5hbCBpbnQgaSA9IG5hbWUubGFzdEluZGV4T2YoJy4nKTsKKwkgICAgaWYgKGkgIT0gLTEpIHsKKyAgICAgICAgICAgICAgICA8ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAnQWNjZXNzQ29udHJvbGxlciciPkFjY2Vzc0NvbnRyb2xsZXI8L2Vycm9yPi5kb1ByaXZpbGVnZWQobmV3IDxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICdQcml2aWxlZ2VkQWN0aW9uJyI+UHJpdmlsZWdlZEFjdGlvbjwvZXJyb3I+KCkgeworICAgICAgICAgICAgICAgICAgICBwdWJsaWMgT2JqZWN0IHJ1bigpIHsKKwkJICAgICAgICBzbS48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIG1ldGhvZCAnY2hlY2tQYWNrYWdlQWNjZXNzKGphdmEubGFuZy5TdHJpbmcpJyI+Y2hlY2tQYWNrYWdlQWNjZXNzPC9lcnJvcj4obmFtZS5zdWJzdHJpbmcoMCwgaSkpOworCQkgICAgICAgIHJldHVybiBudWxsOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSwgbmV3IDxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICdBY2Nlc3NDb250cm9sQ29udGV4dCciPkFjY2Vzc0NvbnRyb2xDb250ZXh0PC9lcnJvcj4obmV3IDxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICdQcm90ZWN0aW9uRG9tYWluJyI+UHJvdGVjdGlvbkRvbWFpbjwvZXJyb3I+W10ge3BkfSkpOworCSAgICB9CisJfQorCWRvbWFpbnMuYWRkPGVycm9yIGRlc2NyPSInYWRkKGphdmEubGFuZy5PYmplY3QpJyBpbiAnamF2YS51dGlsLlNldCcgY2Fubm90IGJlIGFwcGxpZWQgdG8gJyhQcm90ZWN0aW9uRG9tYWluKSciPihwZCk8L2Vycm9yPjsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBGaW5kcyB0aGUgc3BlY2lmaWVkIGNsYXNzLiBUaGlzIG1ldGhvZCBzaG91bGQgYmUgb3ZlcnJpZGRlbgorICAgICAqIGJ5IGNsYXNzIGxvYWRlciBpbXBsZW1lbnRhdGlvbnMgdGhhdCBmb2xsb3cgdGhlIG5ldyBkZWxlZ2F0aW9uIG1vZGVsCisgICAgICogZm9yIGxvYWRpbmcgY2xhc3NlcywgYW5kIHdpbGwgYmUgY2FsbGVkIGJ5IHRoZSA8Y29kZT5sb2FkQ2xhc3M8L2NvZGU+CisgICAgICogbWV0aG9kIGFmdGVyIGNoZWNraW5nIHRoZSBwYXJlbnQgY2xhc3MgbG9hZGVyIGZvciB0aGUgcmVxdWVzdGVkIGNsYXNzLgorICAgICAqIFRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHRocm93cyA8Y29kZT5DbGFzc05vdEZvdW5kRXhjZXB0aW9uPC9jb2RlPi4KKyAgICAgKgorICAgICAqIEBwYXJhbSAgbmFtZSB0aGUgbmFtZSBvZiB0aGUgY2xhc3MKKyAgICAgKiBAcmV0dXJuIHRoZSByZXN1bHRpbmcgPGNvZGU+Q2xhc3M8L2NvZGU+IG9iamVjdAorICAgICAqIEBleGNlcHRpb24gQ2xhc3NOb3RGb3VuZEV4Y2VwdGlvbiBpZiB0aGUgY2xhc3MgY291bGQgbm90IGJlIGZvdW5kCisgICAgICogQHNpbmNlICAxLjIKKyAgICAgKi8KKyAgICBwcm90ZWN0ZWQgQ2xhc3MgZmluZENsYXNzKFN0cmluZyBuYW1lKSB0aHJvd3MgQ2xhc3NOb3RGb3VuZEV4Y2VwdGlvbiB7CisJdGhyb3cgbmV3IENsYXNzTm90Rm91bmRFeGNlcHRpb24obmFtZSk7CisgICAgfQorCisgICAgLyoqCisgICAgICogQ29udmVydHMgYW4gYXJyYXkgb2YgYnl0ZXMgaW50byBhbiBpbnN0YW5jZSBvZiBjbGFzcworICAgICAqIDxjb2RlPkNsYXNzPC9jb2RlPi4gIEJlZm9yZSB0aGUgQ2xhc3MgY2FuIGJlIHVzZWQgaXQgbXVzdCBiZQorICAgICAqIHJlc29sdmVkLiBUaGlzIG1ldGhvZCBpcyBkZXByZWNhdGVkIGluIGZhdm9yIG9mIHRoZSB2ZXJzaW9uCisgICAgICogdGhhdCB0YWtlcyB0aGUgY2xhc3MgbmFtZSBhcyBpdHMgZmlyc3QgYXJndW1lbnQsIGFuZCBpcyBtb3JlCisgICAgICogc2VjdXJlLgorICAgICAqCisgICAgICogQHBhcmFtICAgICAgYiAgIHRoZSBieXRlcyB0aGF0IG1ha2UgdXAgdGhlIGNsYXNzIGRhdGEuIFRoZSBieXRlcyBpbgorICAgICAqICAgICAgICAgICAgIHBvc2l0aW9ucyA8Y29kZT5vZmY8L2NvZGU+IHRocm91Z2ggPGNvZGU+b2ZmK2xlbi0xPC9jb2RlPgorICAgICAqICAgICAgICAgICAgIHNob3VsZCBoYXZlIHRoZSBmb3JtYXQgb2YgYSB2YWxpZCBjbGFzcyBmaWxlIGFzIGRlZmluZWQKKyAgICAgKiAgICAgICAgICAgICBieSB0aGUKKyAgICAgKiAgICAgICAgICAgICA8YSBocmVmPSJodHRwOi8vamF2YS5zdW4uY29tL2RvY3MvYm9va3Mvdm1zcGVjLyI+SmF2YQorICAgICAqICAgICAgICAgICAgIFZpcnR1YWwgTWFjaGluZSBTcGVjaWZpY2F0aW9uPC9hPi4KKyAgICAgKiBAcGFyYW0gICAgICBvZmYgIHRoZSBzdGFydCBvZmZzZXQgaW4gPGNvZGU+YjwvY29kZT4gb2YgdGhlIGNsYXNzIGRhdGEKKyAgICAgKiBAcGFyYW0gICAgICBsZW4gdGhlIGxlbmd0aCBvZiB0aGUgY2xhc3MgZGF0YQorICAgICAqIEByZXR1cm4gICAgIHRoZSA8Y29kZT5DbGFzczwvY29kZT4gb2JqZWN0IHRoYXQgd2FzIGNyZWF0ZWQgZnJvbSB0aGUKKyAgICAgKiAgICAgICAgICAgICBzcGVjaWZpZWQgY2xhc3MgZGF0YQorICAgICAqIEBleGNlcHRpb24gIENsYXNzRm9ybWF0RXJyb3IgaWYgdGhlIGRhdGEgZGlkIG5vdCBjb250YWluIGEgdmFsaWQgY2xhc3MKKyAgICAgKiBAZXhjZXB0aW9uICBJbmRleE91dE9mQm91bmRzRXhjZXB0aW9uIGlmIGVpdGhlciA8Y29kZT5vZmY8L2NvZGU+IG9yCisgICAgICogICAgICAgICAgICAgPGNvZGU+bGVuPC9jb2RlPiBpcyBuZWdhdGl2ZSwgb3IgaWYKKyAgICAgKiAgICAgICAgICAgICA8Y29kZT5vZmYrbGVuPC9jb2RlPiBpcyBncmVhdGVyIHRoYW4gPGNvZGU+Yi5sZW5ndGg8L2NvZGU+LgorICAgICAqIEBzZWUgICAgICAgIENsYXNzTG9hZGVyI2xvYWRDbGFzcyhqYXZhLmxhbmcuU3RyaW5nLCBib29sZWFuKQorICAgICAqIEBzZWUgICAgICAgIENsYXNzTG9hZGVyI3Jlc29sdmVDbGFzcyhqYXZhLmxhbmcuQ2xhc3MpCisgICAgICogQGRlcHJlY2F0ZWQgUmVwbGFjZWQgYnkgZGVmaW5lQ2xhc3MoamF2YS5sYW5nLlN0cmluZywgYnl0ZVtdLCBpbnQsIGludCkKKyAgICAgKi8KKyAgICBwcm90ZWN0ZWQgZmluYWwgQ2xhc3MgZGVmaW5lQ2xhc3MoYnl0ZVtdIGIsIGludCBvZmYsIGludCBsZW4pCisJdGhyb3dzIDxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICdDbGFzc0Zvcm1hdEVycm9yJyI+Q2xhc3NGb3JtYXRFcnJvcjwvZXJyb3I+CisgICAgeworCXJldHVybiBkZWZpbmVDbGFzcyhudWxsLCBiLCBvZmYsIGxlbiwgbnVsbCk7CisgICAgfQorCisgICAgLyoqCisgICAgICogQ29udmVydHMgYW4gYXJyYXkgb2YgYnl0ZXMgaW50byBhbiBpbnN0YW5jZSBvZiBjbGFzcyA8Y29kZT5DbGFzczwvY29kZT4uCisgICAgICogQmVmb3JlIHRoZSBDbGFzcyBjYW4gYmUgdXNlZCBpdCBtdXN0IGJlIHJlc29sdmVkLgorICAgICAqIDxwPgorICAgICAqIFRoaXMgbWV0aG9kIGFzc2lnbnMgYSBkZWZhdWx0IDxjb2RlPlByb3RlY3Rpb25Eb21haW48L2NvZGU+IHRvCisgICAgICogdGhlIG5ld2x5IGRlZmluZWQgY2xhc3MuIFRoZSA8Y29kZT5Qcm90ZWN0aW9uRG9tYWluPC9jb2RlPgorICAgICAqIGNvbnRhaW5zIHRoZSBzZXQgb2YgcGVybWlzc2lvbnMgZ3JhbnRlZCB3aGVuCisgICAgICogYSBjYWxsIHRvIDxjb2RlPlBvbGljeS5nZXRQb2xpY3koKS5nZXRQZXJtaXNzaW9ucygpPC9jb2RlPiBpcyBtYWRlIHdpdGgKKyAgICAgKiBhIGNvZGUgc291cmNlIG9mIDxjb2RlPm51bGwsbnVsbDwvY29kZT4uIFRoZSBkZWZhdWx0IGRvbWFpbiBpcworICAgICAqIGNyZWF0ZWQgb24gdGhlIGZpcnN0IGludm9jYXRpb24gb2YgPGNvZGU+ZGVmaW5lQ2xhc3M8L2NvZGU+LCBhbmQKKyAgICAgKiByZS11c2VkIG9uIHN1YnNlcXVlbnQgY2FsbHMuCisgICAgICogPHA+CisgICAgICogVG8gYXNzaWduIGEgc3BlY2lmaWMgPGNvZGU+UHJvdGVjdGlvbkRvbWFpbjwvY29kZT4gdG8gdGhlIGNsYXNzLAorICAgICAqIHVzZSB0aGUgPGNvZGU+ZGVmaW5lQ2xhc3M8L2NvZGU+IG1ldGhvZCB0aGF0IHRha2VzIGEKKyAgICAgKiA8Y29kZT5Qcm90ZWN0aW9uRG9tYWluPC9jb2RlPiBhcyBvbmUgb2YgaXRzIGFyZ3VtZW50cy4KKyAgICAgKgorICAgICAqIEBwYXJhbSAgICAgIG5hbWUgdGhlIGV4cGVjdGVkIG5hbWUgb2YgdGhlIGNsYXNzLCBvciA8Y29kZT5udWxsPC9jb2RlPgorICAgICAqICAgICAgICAgICAgICAgICAgaWYgbm90IGtub3duLCB1c2luZyAnLicgYW5kIG5vdCAnLycgYXMgdGhlIHNlcGFyYXRvcgorICAgICAqICAgICAgICAgICAgICAgICAgYW5kIHdpdGhvdXQgYSB0cmFpbGluZyAiLmNsYXNzIiBzdWZmaXguCisgICAgICogQHBhcmFtICAgICAgYiAgICB0aGUgYnl0ZXMgdGhhdCBtYWtlIHVwIHRoZSBjbGFzcyBkYXRhLiBUaGUgYnl0ZXMgaW4KKyAgICAgKiAgICAgICAgICAgICBwb3NpdGlvbnMgPGNvZGU+b2ZmPC9jb2RlPiB0aHJvdWdoIDxjb2RlPm9mZitsZW4tMTwvY29kZT4KKyAgICAgKiAgICAgICAgICAgICBzaG91bGQgaGF2ZSB0aGUgZm9ybWF0IG9mIGEgdmFsaWQgY2xhc3MgZmlsZSBhcyBkZWZpbmVkCisgICAgICogICAgICAgICAgICAgYnkgdGhlCisgICAgICogICAgICAgICAgICAgPGEgaHJlZj0iaHR0cDovL2phdmEuc3VuLmNvbS9kb2NzL2Jvb2tzL3Ztc3BlYy8iPkphdmEKKyAgICAgKiAgICAgICAgICAgICBWaXJ0dWFsIE1hY2hpbmUgU3BlY2lmaWNhdGlvbjwvYT4uCisgICAgICogQHBhcmFtICAgICAgb2ZmICB0aGUgc3RhcnQgb2Zmc2V0IGluIDxjb2RlPmI8L2NvZGU+IG9mIHRoZSBjbGFzcyBkYXRhCisgICAgICogQHBhcmFtICAgICAgbGVuICB0aGUgbGVuZ3RoIG9mIHRoZSBjbGFzcyBkYXRhCisgICAgICogQHJldHVybiAgICAgdGhlIDxjb2RlPkNsYXNzPC9jb2RlPiBvYmplY3QgdGhhdCB3YXMgY3JlYXRlZCBmcm9tIHRoZQorICAgICAqICAgICAgICAgICAgIHNwZWNpZmllZCBjbGFzcyBkYXRhCisgICAgICogQGV4Y2VwdGlvbiAgQ2xhc3NGb3JtYXRFcnJvciBpZiB0aGUgZGF0YSBkaWQgbm90IGNvbnRhaW4gYSB2YWxpZCBjbGFzcworICAgICAqIEBleGNlcHRpb24gIEluZGV4T3V0T2ZCb3VuZHNFeGNlcHRpb24gaWYgZWl0aGVyIDxjb2RlPm9mZjwvY29kZT4gb3IKKyAgICAgKiAgICAgICAgICAgICA8Y29kZT5sZW48L2NvZGU+IGlzIG5lZ2F0aXZlLCBvciBpZgorICAgICAqICAgICAgICAgICAgIDxjb2RlPm9mZitsZW48L2NvZGU+IGlzIGdyZWF0ZXIgdGhhbiA8Y29kZT5iLmxlbmd0aDwvY29kZT4uCisgICAgICogQGV4Y2VwdGlvbiAgU2VjdXJpdHlFeGNlcHRpb24gaWYgYW4gYXR0ZW1wdCBpcyBtYWRlIHRvIGFkZCB0aGlzIGNsYXNzCisgICAgICogICAgICAgICAgICAgdG8gYSBwYWNrYWdlIHRoYXQgY29udGFpbnMgY2xhc3NlcyB0aGF0IHdlcmUgc2lnbmVkIGJ5CisgICAgICogICAgICAgICAgICAgYSBkaWZmZXJlbnQgc2V0IG9mIGNlcnRpZmljYXRlcyB0aGFuIHRoaXMgY2xhc3MgKHdoaWNoCisgICAgICogICAgICAgICAgICAgaXMgdW5zaWduZWQpLCBvciBpZiB0aGUgY2xhc3MgbmFtZSBiZWdpbnMgd2l0aCAiamF2YS4iLgorICAgICAqCisgICAgICogQHNlZSAgICAgICAgQ2xhc3NMb2FkZXIjbG9hZENsYXNzKGphdmEubGFuZy5TdHJpbmcsIGJvb2xlYW4pCisgICAgICogQHNlZSAgICAgICAgQ2xhc3NMb2FkZXIjcmVzb2x2ZUNsYXNzKGphdmEubGFuZy5DbGFzcykKKyAgICAgKiBAc2VlICAgICAgICBqYXZhLnNlY3VyaXR5LlByb3RlY3Rpb25Eb21haW4KKyAgICAgKiBAc2VlICAgICAgICBqYXZhLnNlY3VyaXR5LlBvbGljeQorICAgICAqIEBzZWUgICAgICAgIGphdmEuc2VjdXJpdHkuQ29kZVNvdXJjZQorICAgICAqIEBzZWUgICAgICAgIGphdmEuc2VjdXJpdHkuU2VjdXJlQ2xhc3NMb2FkZXIKKyAgICAgKiBAc2luY2UgICAgICBKREsxLjEKKyAgICAgKi8KKyAgICBwcm90ZWN0ZWQgZmluYWwgQ2xhc3MgZGVmaW5lQ2xhc3MoU3RyaW5nIG5hbWUsIGJ5dGVbXSBiLCBpbnQgb2ZmLCBpbnQgbGVuKQorCXRocm93cyA8ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAnQ2xhc3NGb3JtYXRFcnJvciciPkNsYXNzRm9ybWF0RXJyb3I8L2Vycm9yPgorICAgIHsKKwlyZXR1cm4gZGVmaW5lQ2xhc3MobmFtZSwgYiwgb2ZmLCBsZW4sIG51bGwpOworICAgIH0KKworICAgIC8qKgorICAgICAqIENvbnZlcnRzIGFuIGFycmF5IG9mIGJ5dGVzIGludG8gYW4gaW5zdGFuY2Ugb2YgY2xhc3MgQ2xhc3MsCisgICAgICogd2l0aCBhbiBvcHRpb25hbCBQcm90ZWN0aW9uRG9tYWluLiBJZiB0aGUgZG9tYWluIGlzIDxjb2RlPm51bGw8L2NvZGU+LAorICAgICAqIHRoZW4gYSBkZWZhdWx0IGRvbWFpbiB3aWxsIGJlIGFzc2lnbmVkIHRvIHRoZSBjbGFzcyBhcyBzcGVjaWZpZWQKKyAgICAgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBmb3Ige0BsaW5rICNkZWZpbmVDbGFzcyhTdHJpbmcsYnl0ZVtdLGludCxpbnQpfS4KKyAgICAgKiBCZWZvcmUgdGhlIGNsYXNzIGNhbiBiZSB1c2VkIGl0IG11c3QgYmUgcmVzb2x2ZWQuCisgICAgICoKKyAgICAgKiA8cD5UaGUgZmlyc3QgY2xhc3MgZGVmaW5lZCBpbiBhIHBhY2thZ2UgZGV0ZXJtaW5lcyB0aGUgZXhhY3Qgc2V0IG9mCisgICAgICogY2VydGlmaWNhdGVzIHRoYXQgYWxsIHN1YnNlcXVlbnQgY2xhc3NlcyBkZWZpbmVkIGluIHRoYXQgcGFja2FnZSBtdXN0CisgICAgICogY29udGFpbi4gVGhlIHNldCBvZiBjZXJ0aWZpY2F0ZXMgZm9yIGEgY2xhc3MgaXMgb2J0YWluZWQgZnJvbSB0aGUKKyAgICAgKiA8Y29kZT5Db2RlU291cmNlPC9jb2RlPiB3aXRoaW4gdGhlIDxjb2RlPlByb3RlY3Rpb25Eb21haW48L2NvZGU+IG9mCisgICAgICogdGhlIGNsYXNzLiBBbnkgY2xhc3NlcyBhZGRlZCB0byB0aGF0IHBhY2thZ2UgbXVzdCBjb250YWluCisgICAgICogdGhlIHNhbWUgc2V0IG9mIGNlcnRpZmljYXRlcyBvciBhIDxjb2RlPlNlY3VyaXR5RXhjZXB0aW9uPC9jb2RlPgorICAgICAqIHdpbGwgYmUgdGhyb3duLiBOb3RlIHRoYXQgaWYgdGhlIDxjb2RlPm5hbWU8L2NvZGU+IGFyZ3VtZW50IGlzCisgICAgICogbnVsbCwgdGhpcyBjaGVjayBpcyBub3QgcGVyZm9ybWVkLiBZb3Ugc2hvdWxkIGFsd2F5cyBwYXNzIGluIHRoZQorICAgICAqIG5hbWUgb2YgdGhlIGNsYXNzIHlvdSBhcmUgZGVmaW5pbmcgYXMgd2VsbCBhcyB0aGUgYnl0ZXMuIFRoaXMKKyAgICAgKiBlbnN1cmVzIHRoYXQgdGhlIGNsYXNzIHlvdSBhcmUgZGVmaW5pbmcgaXMgaW5kZWVkIHRoZSBjbGFzcworICAgICAqIHlvdSB0aGluayBpdCBpcy4KKyAgICAgKgorICAgICAqIDxwPlRoZSBzcGVjaWZpZWQgY2xhc3MgbmFtZSBjYW5ub3QgYmVnaW4gd2l0aCAiamF2YS4iLCBzaW5jZSBhbGwKKyAgICAgKiBjbGFzc2VzIGluIHRoZSBqYXZhLiogcGFja2FnZXMgY2FuIG9ubHkgYmUgZGVmaW5lZCBieSB0aGUgYm9vdHN0cmFwCisgICAgICogY2xhc3MgbG9hZGVyLiBJZiB0aGUgbmFtZSBwYXJhbWV0ZXIgaXMgbm90IDxUVD5udWxsPC9UVD4sIGl0CisgICAgICogbXVzdCBiZSBlcXVhbCB0byB0aGUgbmFtZSBvZiB0aGUgY2xhc3Mgc3BlY2lmaWVkIGJ5IHRoZSBieXRlCisgICAgICogYXJyYXkgYiwgb3RoZXJ3aXNlIGEgPFRUPkNsYXNzRm9ybWF0RXJyb3I8L1RUPiBpcyByYWlzZWQuCisgICAgICoKKyAgICAgKiBAcGFyYW0gICAgICBuYW1lIHRoZSBleHBlY3RlZCBuYW1lIG9mIHRoZSBjbGFzcywgb3IgPGNvZGU+bnVsbDwvY29kZT4KKyAgICAgKiAgICAgICAgICAgICAgICAgIGlmIG5vdCBrbm93biwgdXNpbmcgJy4nIGFuZCBub3QgJy8nIGFzIHRoZSBzZXBhcmF0b3IKKyAgICAgKiAgICAgICAgICAgICAgICAgIGFuZCB3aXRob3V0IGEgdHJhaWxpbmcgIi5jbGFzcyIgc3VmZml4LgorICAgICAqIEBwYXJhbSAgICAgIGIgICAgdGhlIGJ5dGVzIHRoYXQgbWFrZSB1cCB0aGUgY2xhc3MgZGF0YS4gVGhlIGJ5dGVzIGluCisgICAgICogICAgICAgICAgICAgcG9zaXRpb25zIDxjb2RlPm9mZjwvY29kZT4gdGhyb3VnaCA8Y29kZT5vZmYrbGVuLTE8L2NvZGU+CisgICAgICogICAgICAgICAgICAgc2hvdWxkIGhhdmUgdGhlIGZvcm1hdCBvZiBhIHZhbGlkIGNsYXNzIGZpbGUgYXMgZGVmaW5lZAorICAgICAqICAgICAgICAgICAgIGJ5IHRoZQorICAgICAqICAgICAgICAgICAgIDxhIGhyZWY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vZG9jcy9ib29rcy92bXNwZWMvIj5KYXZhCisgICAgICogICAgICAgICAgICAgVmlydHVhbCBNYWNoaW5lIFNwZWNpZmljYXRpb248L2E+LgorICAgICAqIEBwYXJhbSAgICAgIG9mZiAgdGhlIHN0YXJ0IG9mZnNldCBpbiA8Y29kZT5iPC9jb2RlPiBvZiB0aGUgY2xhc3MgZGF0YQorICAgICAqIEBwYXJhbSAgICAgIGxlbiAgdGhlIGxlbmd0aCBvZiB0aGUgY2xhc3MgZGF0YQorICAgICAqIEBwYXJhbSBwcm90ZWN0aW9uRG9tYWluIHRoZSBQcm90ZWN0aW9uRG9tYWluIG9mIHRoZSBjbGFzcworICAgICAqIEByZXR1cm4gdGhlIDxjb2RlPkNsYXNzPC9jb2RlPiBvYmplY3QgY3JlYXRlZCBmcm9tIHRoZSBkYXRhLAorICAgICAqICAgICAgICAgYW5kIG9wdGlvbmFsIFByb3RlY3Rpb25Eb21haW4uCisgICAgICogQGV4Y2VwdGlvbiAgQ2xhc3NGb3JtYXRFcnJvciBpZiB0aGUgZGF0YSBkaWQgbm90IGNvbnRhaW4gYSB2YWxpZCBjbGFzcworICAgICAqIEBleGNlcHRpb24gIEluZGV4T3V0T2ZCb3VuZHNFeGNlcHRpb24gaWYgZWl0aGVyIDxjb2RlPm9mZjwvY29kZT4gb3IKKyAgICAgKiAgICAgICAgICAgICA8Y29kZT5sZW48L2NvZGU+IGlzIG5lZ2F0aXZlLCBvciBpZgorICAgICAqICAgICAgICAgICAgIDxjb2RlPm9mZitsZW48L2NvZGU+IGlzIGdyZWF0ZXIgdGhhbiA8Y29kZT5iLmxlbmd0aDwvY29kZT4uCisgICAgICogQGV4Y2VwdGlvbiAgU2VjdXJpdHlFeGNlcHRpb24gaWYgYW4gYXR0ZW1wdCBpcyBtYWRlIHRvIGFkZCB0aGlzIGNsYXNzCisgICAgICogICAgICAgICAgICAgdG8gYSBwYWNrYWdlIHRoYXQgY29udGFpbnMgY2xhc3NlcyB0aGF0IHdlcmUgc2lnbmVkIGJ5CisgICAgICogICAgICAgICAgICAgYSBkaWZmZXJlbnQgc2V0IG9mIGNlcnRpZmljYXRlcyB0aGFuIHRoaXMgY2xhc3MsIG9yIGlmCisgICAgICogICAgICAgICAgICAgdGhlIGNsYXNzIG5hbWUgYmVnaW5zIHdpdGggImphdmEuIi4KKyAgICAgKi8KKyAgICBwcm90ZWN0ZWQgZmluYWwgQ2xhc3MgZGVmaW5lQ2xhc3MoU3RyaW5nIG5hbWUsIGJ5dGVbXSBiLCBpbnQgb2ZmLCBpbnQgbGVuLAorCQkJCSAgICAgIDxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICdQcm90ZWN0aW9uRG9tYWluJyI+UHJvdGVjdGlvbkRvbWFpbjwvZXJyb3I+IHByb3RlY3Rpb25Eb21haW4pCisJdGhyb3dzIDxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICdDbGFzc0Zvcm1hdEVycm9yJyI+Q2xhc3NGb3JtYXRFcnJvcjwvZXJyb3I+CisgICAgeworCWNoZWNrKCk7CisgICAgICAgIGlmICgobmFtZSAhPSBudWxsKSAmJiBuYW1lLnN0YXJ0c1dpdGgoImphdmEuIikpIHsKKyAgICAgICAgICAgIHRocm93IG5ldyA8ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAnU2VjdXJpdHlFeGNlcHRpb24nIj5TZWN1cml0eUV4Y2VwdGlvbjwvZXJyb3I+KCJQcm9oaWJpdGVkIHBhY2thZ2UgbmFtZTogIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZS5zdWJzdHJpbmcoMCwgbmFtZS5sYXN0SW5kZXhPZignLicpKSk7CisgICAgICAgIH0KKwlpZiAocHJvdGVjdGlvbkRvbWFpbiA9PSBudWxsKSB7CisJICAgIHByb3RlY3Rpb25Eb21haW4gPSBnZXREZWZhdWx0RG9tYWluKCk7CisJfQorCisJaWYgKG5hbWUgIT0gbnVsbCkKKwkgICAgY2hlY2tDZXJ0cyhuYW1lLCBwcm90ZWN0aW9uRG9tYWluLjxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgbWV0aG9kICdnZXRDb2RlU291cmNlKCknIj5nZXRDb2RlU291cmNlPC9lcnJvcj4oKSk7CisKKwlDbGFzcyBjID0gbnVsbDsKKworCXRyeQorCXsKKwkgICAgYyA9IGRlZmluZUNsYXNzMChuYW1lLCBiLCBvZmYsIGxlbiwgcHJvdGVjdGlvbkRvbWFpbik7CisJfQorCWNhdGNoICg8ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAnQ2xhc3NGb3JtYXRFcnJvciciPkNsYXNzRm9ybWF0RXJyb3I8L2Vycm9yPiBjZmUpCisJeworCSAgICAvLyBDbGFzcyBmb3JtYXQgZXJyb3IgLSB0cnkgdG8gdHJhbnNmb3JtIHRoZSBieXRlY29kZSBhbmQKKwkgICAgLy8gZGVmaW5lIHRoZSBjbGFzcyBhZ2FpbgorCSAgICAvLworCSAgICBPYmplY3RbXSB0cmFuc2Zvcm1lcnMgPSA8ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAnQ2xhc3NGaWxlVHJhbnNmb3JtZXInIj5DbGFzc0ZpbGVUcmFuc2Zvcm1lcjwvZXJyb3I+LmdldFRyYW5zZm9ybWVycygpOworCisJICAgIGZvciAoaW50IGk9MDsgdHJhbnNmb3JtZXJzICE9IG51bGwgJiYgaSA8IHRyYW5zZm9ybWVycy5sZW5ndGg7IGkrKykKKwkgICAgeworCQl0cnkKKwkJeworCQkgICAgLy8gVHJhbnNmb3JtIGJ5dGUgY29kZSB1c2luZyB0cmFuc2Zvcm1lcgorCQkgICAgYnl0ZVtdIHRiID0gKCg8ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAnQ2xhc3NGaWxlVHJhbnNmb3JtZXInIj5DbGFzc0ZpbGVUcmFuc2Zvcm1lcjwvZXJyb3I+KSB0cmFuc2Zvcm1lcnNbaV0pLnRyYW5zZm9ybShiLCBvZmYsIGxlbik7CisJCSAgICBjID0gZGVmaW5lQ2xhc3MwKG5hbWUsIHRiLCAwLCB0Yi5sZW5ndGgsIHByb3RlY3Rpb25Eb21haW4pOworCQkgICAgYnJlYWs7CisJCX0KKwkJY2F0Y2ggKDxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICdDbGFzc0Zvcm1hdEVycm9yJyI+Q2xhc3NGb3JtYXRFcnJvcjwvZXJyb3I+IGNmZTIpCisJCXsKKwkJICAgIC8vIElmIENsYXNzRm9ybWF0RXJyb3Igb2NjdXJzLCB0cnkgbmV4dCB0cmFuc2Zvcm1lcgorCQl9CisJICAgIH0KKworCSAgICAvLyBSZXRocm93IG9yaWdpbmFsIENsYXNzRm9ybWF0RXJyb3IgaWYgdW5hYmxlIHRvIHRyYW5zZm9ybQorCSAgICAvLyBieXRlY29kZSB0byB3ZWxsLWZvcm1lZAorCSAgICAvLworCSAgICBpZiAoYyA9PSBudWxsKQorCQl0aHJvdyA8ZXJyb3IgZGVzY3I9IkluY29tcGF0aWJsZSB0eXBlcy4gRm91bmQ6ICdDbGFzc0Zvcm1hdEVycm9yJywgcmVxdWlyZWQ6ICdqYXZhLmxhbmcuVGhyb3dhYmxlJyI+Y2ZlPC9lcnJvcj47CisJfQorCisJaWYgKHByb3RlY3Rpb25Eb21haW4uPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBtZXRob2QgJ2dldENvZGVTb3VyY2UoKSciPmdldENvZGVTb3VyY2U8L2Vycm9yPigpICE9IG51bGwpIHsKKwkgICAgamF2YS5zZWN1cml0eS48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAnY2VydCciPmNlcnQ8L2Vycm9yPi5DZXJ0aWZpY2F0ZSBjZXJ0c1tdID0KKwkJcHJvdGVjdGlvbkRvbWFpbi48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIG1ldGhvZCAnZ2V0Q29kZVNvdXJjZSgpJyI+Z2V0Q29kZVNvdXJjZTwvZXJyb3I+KCkuZ2V0Q2VydGlmaWNhdGVzKCk7CisJICAgIGlmIChjZXJ0cyAhPSBudWxsKQorCQlzZXRTaWduZXJzPGVycm9yIGRlc2NyPSInc2V0U2lnbmVycyhqYXZhLmxhbmcuQ2xhc3MsIGphdmEubGFuZy5PYmplY3RbXSknIGluICdDbGFzc0xvYWRlcicgY2Fubm90IGJlIGFwcGxpZWQgdG8gJyhqYXZhLmxhbmcuQ2xhc3MsIGphdmEuc2VjdXJpdHkuY2VydC5DZXJ0aWZpY2F0ZVtdKSciPihjLCBjZXJ0cyk8L2Vycm9yPjsKKwl9CisJcmV0dXJuIGM7CisgICAgfQorCisgICAgcHJpdmF0ZSBzeW5jaHJvbml6ZWQgdm9pZCBjaGVja0NlcnRzKFN0cmluZyBuYW1lLCA8ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAnQ29kZVNvdXJjZSciPkNvZGVTb3VyY2U8L2Vycm9yPiBjcykKKyAgICB7CisJaW50IGkgPSBuYW1lLmxhc3RJbmRleE9mKCcuJyk7CisJU3RyaW5nIHBuYW1lID0gKGkgPT0gLTEpID8gIiIgOiBuYW1lLnN1YnN0cmluZygwLGkpOworCWphdmEuc2VjdXJpdHkuPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ2NlcnQnIj5jZXJ0PC9lcnJvcj4uQ2VydGlmaWNhdGVbXSBwY2VydHMgPQorCSAgICAoamF2YS5zZWN1cml0eS48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAnY2VydCciPmNlcnQ8L2Vycm9yPi5DZXJ0aWZpY2F0ZVtdKSBwYWNrYWdlMmNlcnRzLmdldChwbmFtZSk7CisgICAgICAgIGlmIChwY2VydHMgPT0gbnVsbCkgeworCSAgICAvLyBmaXJzdCBjbGFzcyBpbiB0aGlzIHBhY2thZ2UgZ2V0cyB0byBkZWZpbmUgd2hpY2gKKwkgICAgLy8gY2VydGlmaWNhdGVzIG11c3QgYmUgdGhlIHNhbWUgZm9yIGFsbCBvdGhlciBjbGFzc2VzCisJICAgIC8vIGluIHRoaXMgcGFja2FnZQorCSAgICBpZiAoY3MgIT0gbnVsbCkgeworCQlwY2VydHMgPSBjcy48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIG1ldGhvZCAnZ2V0Q2VydGlmaWNhdGVzKCknIj5nZXRDZXJ0aWZpY2F0ZXM8L2Vycm9yPigpOworCSAgICB9CisJICAgIGlmIChwY2VydHMgPT0gbnVsbCkgeworCQlpZiAobm9jZXJ0cyA9PSBudWxsKQorCQkgICAgbm9jZXJ0cyA9IG5ldyBqYXZhLnNlY3VyaXR5LjxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICdjZXJ0JyI+Y2VydDwvZXJyb3I+LkNlcnRpZmljYXRlWzBdOworCQlwY2VydHMgPSBub2NlcnRzOworCSAgICB9CisJICAgIHBhY2thZ2UyY2VydHMucHV0KHBuYW1lLCBwY2VydHMpOworCX0gZWxzZSB7CisJICAgIGphdmEuc2VjdXJpdHkuPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ2NlcnQnIj5jZXJ0PC9lcnJvcj4uQ2VydGlmaWNhdGVbXSBjZXJ0cyA9IG51bGw7CisJICAgIGlmIChjcyAhPSBudWxsKSB7CisJCWNlcnRzID0gY3MuPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBtZXRob2QgJ2dldENlcnRpZmljYXRlcygpJyI+Z2V0Q2VydGlmaWNhdGVzPC9lcnJvcj4oKTsKKwkgICAgfQorCisJICAgIGlmICghY29tcGFyZUNlcnRzKHBjZXJ0cyxjZXJ0cykpIHsKKwkJdGhyb3cgbmV3IDxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICdTZWN1cml0eUV4Y2VwdGlvbiciPlNlY3VyaXR5RXhjZXB0aW9uPC9lcnJvcj4oImNsYXNzIFwiIisgbmFtZSsKKwkJCQkJICAgICJcIidzIHNpZ25lciBpbmZvcm1hdGlvbiBkb2VzIG5vdCBtYXRjaCBzaWduZXIgaW5mb3JtYXRpb24gb2Ygb3RoZXIgY2xhc3NlcyBpbiB0aGUgc2FtZSBwYWNrYWdlIik7CisJICAgIH0KKwl9CisgICAgfQorCisgICAgLyoqCisgICAgICogY2hlY2sgdG8gbWFrZSBzdXJlIHRoZSBjZXJ0cyBmb3IgdGhlIG5ldyBjbGFzcyAoY2VydHMpIGFyZQorICAgICAqIHRoZSBzYW1lIGFzIHRoZSBjZXJ0cyBmb3IgdGhlIGZpcnN0IGNsYXNzIGluc2VydGVkCisgICAgICogaW4gdGhlIHBhY2thZ2UgKHBjZXJ0cykKKyAgICAgKi8KKyAgICBwcml2YXRlIGJvb2xlYW4gY29tcGFyZUNlcnRzKGphdmEuc2VjdXJpdHkuPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ2NlcnQnIj5jZXJ0PC9lcnJvcj4uQ2VydGlmaWNhdGVbXSBwY2VydHMsCisJCQkJIGphdmEuc2VjdXJpdHkuPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ2NlcnQnIj5jZXJ0PC9lcnJvcj4uQ2VydGlmaWNhdGVbXSBjZXJ0cykKKyAgICB7CisJLy8gY2VydHMgY2FuIGJlIG51bGwsIGluZGljYXRpbmcgbm8gY2VydHMuCisJaWYgKChjZXJ0cyA9PSBudWxsKSB8fCAoY2VydHMubGVuZ3RoID09IDApKSB7CisJICAgIHJldHVybiBwY2VydHMubGVuZ3RoID09IDA7CisJfQorCisJLy8gdGhlIGxlbmd0aCBtdXN0IGJlIHRoZSBzYW1lIGF0IHRoaXMgcG9pbnQKKwlpZiAoY2VydHMubGVuZ3RoICE9IHBjZXJ0cy5sZW5ndGgpCisJICAgIHJldHVybiBmYWxzZTsKKworCS8vIGdvIHRocm91Z2ggYW5kIG1ha2Ugc3VyZSBhbGwgdGhlIGNlcnRzIGluIG9uZSBhcnJheQorCS8vIGFyZSBpbiB0aGUgb3RoZXIgYW5kIHZpY2UtdmVyc2EuCisJYm9vbGVhbiBtYXRjaDsKKwlmb3IgKGludCBpPTA7IGkgPCBjZXJ0cy5sZW5ndGg7IGkrKykgeworCSAgICBtYXRjaCA9IGZhbHNlOworCSAgICBmb3IgKGludCBqPTA7IGogPCBwY2VydHMubGVuZ3RoOyBqKyspIHsKKwkJaWYgKGNlcnRzW2ldLjxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgbWV0aG9kICdlcXVhbHMoamF2YS5zZWN1cml0eS5jZXJ0LkNlcnRpZmljYXRlKSciPmVxdWFsczwvZXJyb3I+KHBjZXJ0c1tqXSkpIHsKKwkJICAgIG1hdGNoID0gdHJ1ZTsKKwkJICAgIGJyZWFrOworCQl9CisJICAgIH0KKwkgICAgaWYgKCFtYXRjaCkgcmV0dXJuIGZhbHNlOworCX0KKworCS8vIG5vdyBkbyB0aGUgc2FtZSBmb3IgcGNlcnRzCisJZm9yIChpbnQgaT0wOyBpIDwgcGNlcnRzLmxlbmd0aDsgaSsrKSB7CisJICAgIG1hdGNoID0gZmFsc2U7CisJICAgIGZvciAoaW50IGo9MDsgaiA8IGNlcnRzLmxlbmd0aDsgaisrKSB7CisJCWlmIChwY2VydHNbaV0uPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBtZXRob2QgJ2VxdWFscyhqYXZhLnNlY3VyaXR5LmNlcnQuQ2VydGlmaWNhdGUpJyI+ZXF1YWxzPC9lcnJvcj4oY2VydHNbal0pKSB7CisJCSAgICBtYXRjaCA9IHRydWU7CisJCSAgICBicmVhazsKKwkJfQorCSAgICB9CisJICAgIGlmICghbWF0Y2gpIHJldHVybiBmYWxzZTsKKwl9CisKKwlyZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBMaW5rcyB0aGUgc3BlY2lmaWVkIGNsYXNzLgorICAgICAqIFRoaXMgKG1pc2xlYWRpbmdseSBuYW1lZCkgbWV0aG9kIG1heSBiZSB1c2VkIGJ5IGEgY2xhc3MgbG9hZGVyIHRvCisgICAgICogbGluayBhIGNsYXNzLiBJZiB0aGUgY2xhc3MgPGNvZGU+YzwvY29kZT4gaGFzIGFscmVhZHkgYmVlbiBsaW5rZWQsCisgICAgICogdGhlbiB0aGlzIG1ldGhvZCBzaW1wbHkgcmV0dXJucy4gT3RoZXJ3aXNlLCB0aGUgY2xhc3MgaXMgbGlua2VkCisgICAgICogYXMgZGVzY3JpYmVkIGluIHRoZSAiRXhlY3V0aW9uIiBjaGFwdGVyIG9mIHRoZSA8aT5KYXZhIExhbmd1YWdlCisgICAgICogU3BlY2lmaWNhdGlvbjwvaT4uCisgICAgICoKKyAgICAgKiBAcGFyYW0gYyB0aGUgY2xhc3MgdG8gbGluaworICAgICAqIEBleGNlcHRpb24gTnVsbFBvaW50ZXJFeGNlcHRpb24gaWYgPGNvZGU+YzwvY29kZT4gaXMgPGNvZGU+bnVsbDwvY29kZT4uCisgICAgICogQHNlZSAgIGphdmEubGFuZy5DbGFzc0xvYWRlciNkZWZpbmVDbGFzcyhqYXZhLmxhbmcuU3RyaW5nLGJ5dGVbXSxpbnQsaW50KQorICAgICAqLworICAgIHByb3RlY3RlZCBmaW5hbCB2b2lkIHJlc29sdmVDbGFzcyhDbGFzcyBjKSB7CisJY2hlY2soKTsKKwlyZXNvbHZlQ2xhc3MwKGMpOworICAgIH0KKworICAgIC8qKgorICAgICAqIEZpbmRzIGEgY2xhc3Mgd2l0aCB0aGUgc3BlY2lmaWVkIG5hbWUsIGxvYWRpbmcgaXQgaWYgbmVjZXNzYXJ5LjxwPgorICAgICAqCisgICAgICogUHJpb3IgdG8gdGhlIEphdmEgMiBTREssIHRoaXMgbWV0aG9kIGxvYWRzIGEgY2xhc3MgZnJvbSB0aGUgbG9jYWwgZmlsZQorICAgICAqIHN5c3RlbSBpbiBhIHBsYXRmb3JtLWRlcGVuZGVudCBtYW5uZXIsIGFuZCByZXR1cm5zIGEgY2xhc3Mgb2JqZWN0CisgICAgICogdGhhdCBoYXMgbm8gYXNzb2NpYXRlZCBjbGFzcyBsb2FkZXIuPHA+CisgICAgICoKKyAgICAgKiBTaW5jZSB0aGUgSmF2YSAyIFNESyB2MS4yLCB0aGlzIG1ldGhvZCBsb2FkcyB0aGUgY2xhc3MgdGhyb3VnaCB0aGUKKyAgICAgKiBzeXN0ZW0gY2xhc3MgbG9hZGVyKHNlZSB7QGxpbmsgI2dldFN5c3RlbUNsYXNzTG9hZGVyKCl9KS4gIENsYXNzIG9iamVjdHMKKyAgICAgKiByZXR1cm5lZCBtaWdodCBoYXZlIDxjb2RlPkNsYXNzTG9hZGVyPC9jb2RlPnMgYXNzb2NpYXRlZCB3aXRoIHRoZW0uCisgICAgICogU3ViY2xhc3NlcyBvZiA8Y29kZT5DbGFzc0xvYWRlcjwvY29kZT4gbmVlZCBub3QgdXN1YWxseSBjYWxsIHRoaXMKKyAgICAgKiBtZXRob2QsIGJlY2F1c2UgbW9zdCBjbGFzcyBsb2FkZXJzIG5lZWQgdG8gb3ZlcnJpZGUganVzdCB7QGxpbmsKKyAgICAgKiAjZmluZENsYXNzKFN0cmluZyl9LjxwPgorICAgICAqCisgICAgICogQHBhcmFtICAgICBuYW1lIHRoZSBuYW1lIG9mIHRoZSBjbGFzcyB0aGF0IGlzIHRvIGJlIGZvdW5kCisgICAgICogQHJldHVybiB0aGUgPGNvZGU+Q2xhc3M8L2NvZGU+IG9iamVjdCBmb3IgdGhlIHNwZWNpZmllZAorICAgICAqIDxjb2RlPm5hbWU8L2NvZGU+CisgICAgICogQGV4Y2VwdGlvbiBDbGFzc05vdEZvdW5kRXhjZXB0aW9uIGlmIHRoZSBjbGFzcyBjb3VsZCBub3QgYmUgZm91bmQKKyAgICAgKiBAc2VlICAgICAgICNDbGFzc0xvYWRlcihDbGFzc0xvYWRlcikKKyAgICAgKiBAc2VlICAgICAgICNnZXRQYXJlbnQoKQorICAgICAqLworICAgIHByb3RlY3RlZCBmaW5hbCBDbGFzcyBmaW5kU3lzdGVtQ2xhc3MoU3RyaW5nIG5hbWUpCisJdGhyb3dzIENsYXNzTm90Rm91bmRFeGNlcHRpb24KKyAgICB7CisJY2hlY2soKTsKKwlDbGFzc0xvYWRlciBzeXN0ZW0gPSBnZXRTeXN0ZW1DbGFzc0xvYWRlcigpOworCWlmIChzeXN0ZW0gPT0gbnVsbCkgeworCSAgICByZXR1cm4gZmluZEJvb3RzdHJhcENsYXNzKG5hbWUpOworCX0KKwlyZXR1cm4gc3lzdGVtLmxvYWRDbGFzcyhuYW1lKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIHRoZSBwYXJlbnQgY2xhc3MgbG9hZGVyIGZvciBkZWxlZ2F0aW9uLiBTb21lIGltcGxlbWVudGF0aW9ucworICAgICAqIG1heSB1c2UgPGNvZGU+bnVsbDwvY29kZT4gdG8gcmVwcmVzZW50IHRoZSBib290c3RyYXAgY2xhc3MKKyAgICAgKiBsb2FkZXIuIFRoaXMgbWV0aG9kIHdpbGwgcmV0dXJuIDxjb2RlPm51bGw8L2NvZGU+IGluIHN1Y2gKKyAgICAgKiBpbXBsZW1lbnRhdGlvbnMgaWYgdGhpcyBjbGFzcyBsb2FkZXIncyBwYXJlbnQgaXMgdGhlIGJvb3RzdHJhcAorICAgICAqIGNsYXNzIGxvYWRlci4KKyAgICAgKiA8cD4KKyAgICAgKiBJZiBhIHNlY3VyaXR5IG1hbmFnZXIgaXMgcHJlc2VudCwgYW5kIHRoZSBjYWxsZXIncyBjbGFzcyBsb2FkZXIgaXMKKyAgICAgKiBub3QgbnVsbCBhbmQgaXMgbm90IGFuIGFuY2VzdG9yIG9mIHRoaXMgY2xhc3MgbG9hZGVyLCB0aGVuCisgICAgICogdGhpcyBtZXRob2QgY2FsbHMgdGhlIHNlY3VyaXR5IG1hbmFnZXIncyA8Y29kZT5jaGVja1Blcm1pc3Npb248L2NvZGU+CisgICAgICogbWV0aG9kIHdpdGggYSA8Y29kZT5SdW50aW1lUGVybWlzc2lvbigiZ2V0Q2xhc3NMb2FkZXIiKTwvY29kZT4KKyAgICAgKiBwZXJtaXNzaW9uIHRvIGVuc3VyZSBpdCdzIG9rIHRvIGFjY2VzcyB0aGUgcGFyZW50IGNsYXNzIGxvYWRlci4KKyAgICAgKiBJZiBub3QsIGEgPGNvZGU+U2VjdXJpdHlFeGNlcHRpb248L2NvZGU+IHdpbGwgYmUgdGhyb3duLgorICAgICAqCisgICAgICogQHJldHVybiB0aGUgcGFyZW50IDxjb2RlPkNsYXNzTG9hZGVyPC9jb2RlPgorICAgICAqIEB0aHJvd3MgU2VjdXJpdHlFeGNlcHRpb24KKyAgICAgKiAgICBpZiBhIHNlY3VyaXR5IG1hbmFnZXIgZXhpc3RzIGFuZCBpdHMKKyAgICAgKiAgICA8Y29kZT5jaGVja1Blcm1pc3Npb248L2NvZGU+IG1ldGhvZCBkb2Vzbid0IGFsbG93CisgICAgICogICAgYWNjZXNzIHRvIHRoaXMgY2xhc3MgbG9hZGVyJ3MgcGFyZW50IGNsYXNzIGxvYWRlci4KKyAgICAgKgorICAgICAqIEBzZWUgU2VjdXJpdHlNYW5hZ2VyI2NoZWNrUGVybWlzc2lvbgorICAgICAqIEBzZWUgamF2YS5sYW5nLlJ1bnRpbWVQZXJtaXNzaW9uCisgICAgICoKKyAgICAgKiBAc2luY2UgMS4yCisgICAgICovCisgICAgcHVibGljIGZpbmFsIENsYXNzTG9hZGVyIGdldFBhcmVudCgpIHsKKwlpZiAocGFyZW50ID09IG51bGwpCisJICAgIHJldHVybiBudWxsOworCTxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICdTZWN1cml0eU1hbmFnZXInIj5TZWN1cml0eU1hbmFnZXI8L2Vycm9yPiBzbSA9IFN5c3RlbS5nZXRTZWN1cml0eU1hbmFnZXIoKTsKKwlpZiAoc20gIT0gbnVsbCkgeworCSAgICBDbGFzc0xvYWRlciBjY2wgPSBnZXRDYWxsZXJDbGFzc0xvYWRlcigpOworCSAgICBpZiAoY2NsICE9IG51bGwgJiYgIWlzQW5jZXN0b3IoY2NsKSkgeworCQlzbS48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIG1ldGhvZCAnY2hlY2tQZXJtaXNzaW9uKFJ1bnRpbWVQZXJtaXNzaW9uKSciPmNoZWNrUGVybWlzc2lvbjwvZXJyb3I+KGdldEdldENsYXNzTG9hZGVyUGVybSgpKTsKKwkgICAgfQorCX0KKwlyZXR1cm4gcGFyZW50OworICAgIH0KKworICAgIC8qKgorICAgICAqIFNldHMgdGhlIHNpZ25lcnMgb2YgYSBjbGFzcy4gVGhpcyBzaG91bGQgYmUgY2FsbGVkIGFmdGVyIGRlZmluaW5nIGEKKyAgICAgKiBjbGFzcy4KKyAgICAgKgorICAgICAqIEBwYXJhbSBjIHRoZSA8Y29kZT5DbGFzczwvY29kZT4gb2JqZWN0CisgICAgICogQHBhcmFtIHNpZ25lcnMgdGhlIHNpZ25lcnMgZm9yIHRoZSBjbGFzcworICAgICAqIEBzaW5jZSBKREsxLjEKKyAgICAgKi8KKyAgICBwcm90ZWN0ZWQgZmluYWwgdm9pZCBzZXRTaWduZXJzKENsYXNzIGMsIE9iamVjdFtdIHNpZ25lcnMpIHsKKyAgICAgICAgY2hlY2soKTsKKwljLjxlcnJvciBkZXNjcj0iJ3NldFNpZ25lcnMoamF2YS5sYW5nLk9iamVjdFtdKScgaXMgbm90IHB1YmxpYyBpbiAnamF2YS5sYW5nLkNsYXNzJy4gQ2Fubm90IGJlIGFjY2Vzc2VkIGZyb20gb3V0c2lkZSBwYWNrYWdlIj5zZXRTaWduZXJzPC9lcnJvcj4oc2lnbmVycyk7CisgICAgfQorCisgICAgcHJpdmF0ZSBDbGFzcyBmaW5kQm9vdHN0cmFwQ2xhc3MwKFN0cmluZyBuYW1lKQorCXRocm93cyBDbGFzc05vdEZvdW5kRXhjZXB0aW9uIHsKKwljaGVjaygpOworCXJldHVybiBmaW5kQm9vdHN0cmFwQ2xhc3MobmFtZSk7CisgICAgfQorCisgICAgcHJpdmF0ZSBuYXRpdmUgQ2xhc3MgZGVmaW5lQ2xhc3MwKFN0cmluZyBuYW1lLCBieXRlW10gYiwgaW50IG9mZiwgaW50IGxlbiwKKwk8ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAnUHJvdGVjdGlvbkRvbWFpbiciPlByb3RlY3Rpb25Eb21haW48L2Vycm9yPiBwZCk7CisgICAgcHJpdmF0ZSBuYXRpdmUgdm9pZCByZXNvbHZlQ2xhc3MwKENsYXNzIGMpOworICAgIHByaXZhdGUgbmF0aXZlIENsYXNzIGZpbmRCb290c3RyYXBDbGFzcyhTdHJpbmcgbmFtZSkKKwl0aHJvd3MgQ2xhc3NOb3RGb3VuZEV4Y2VwdGlvbjsKKworICAgIC8qCisgICAgICogQ2hlY2sgdG8gbWFrZSBzdXJlIHRoZSBjbGFzcyBsb2FkZXIgaGFzIGJlZW4gaW5pdGlhbGl6ZWQuCisgICAgICovCisgICAgcHJpdmF0ZSB2b2lkIGNoZWNrKCkgeworCWlmICghaW5pdGlhbGl6ZWQpIHsKKwkgICAgdGhyb3cgbmV3IDxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICdTZWN1cml0eUV4Y2VwdGlvbiciPlNlY3VyaXR5RXhjZXB0aW9uPC9lcnJvcj4oIkNsYXNzTG9hZGVyIG9iamVjdCBub3QgaW5pdGlhbGl6ZWQiKTsKKwl9CisgICAgfQorCisgICAgLyoqCisgICAgICogRmluZHMgdGhlIGNsYXNzIHdpdGggdGhlIGdpdmVuIG5hbWUgaWYgaXQgaGFkIGJlZW4gcHJldmlvdXNseSBsb2FkZWQKKyAgICAgKiB0aHJvdWdoIHRoaXMgY2xhc3MgbG9hZGVyLgorICAgICAqCisgICAgICogQHBhcmFtICBuYW1lIHRoZSBjbGFzcyBuYW1lCisgICAgICogQHJldHVybiB0aGUgPGNvZGU+Q2xhc3M8L2NvZGU+IG9iamVjdCwgb3IgPGNvZGU+bnVsbDwvY29kZT4gaWYKKyAgICAgKiAgICAgICAgIHRoZSBjbGFzcyBoYXMgbm90IGJlZW4gbG9hZGVkCisgICAgICogQHNpbmNlICBKREsxLjEKKyAgICAgKi8KKyAgICBwcm90ZWN0ZWQgbmF0aXZlIGZpbmFsIENsYXNzIGZpbmRMb2FkZWRDbGFzcyhTdHJpbmcgbmFtZSk7CisKKyAgICAvKioKKyAgICAgKiBGaW5kcyB0aGUgcmVzb3VyY2Ugd2l0aCB0aGUgZ2l2ZW4gbmFtZS4gQSByZXNvdXJjZSBpcyBzb21lIGRhdGEKKyAgICAgKiAoaW1hZ2VzLCBhdWRpbywgdGV4dCwgZXRjKSB0aGF0IGNhbiBiZSBhY2Nlc3NlZCBieSBjbGFzcyBjb2RlIGluIGEgd2F5CisgICAgICogdGhhdCBpcyBpbmRlcGVuZGVudCBvZiB0aGUgbG9jYXRpb24gb2YgdGhlIGNvZGUuPHA+CisgICAgICoKKyAgICAgKiBUaGUgbmFtZSBvZiBhIHJlc291cmNlIGlzIGEgIi8iLXNlcGFyYXRlZCBwYXRoIG5hbWUgdGhhdCBpZGVudGlmaWVzCisgICAgICogdGhlIHJlc291cmNlLjxwPgorICAgICAqCisgICAgICogVGhpcyBtZXRob2Qgd2lsbCBmaXJzdCBzZWFyY2ggdGhlIHBhcmVudCBjbGFzcyBsb2FkZXIgZm9yIHRoZSByZXNvdXJjZTsKKyAgICAgKiBpZiB0aGUgcGFyZW50IGlzIDxjb2RlPm51bGw8L2NvZGU+IHRoZSBwYXRoIG9mIHRoZSBjbGFzcyBsb2FkZXIKKyAgICAgKiBidWlsdC1pbiB0byB0aGUgdmlydHVhbCBtYWNoaW5lIGlzIHNlYXJjaGVkLiAgVGhhdCBmYWlsaW5nLCB0aGlzIG1ldGhvZAorICAgICAqIHdpbGwgY2FsbCA8Y29kZT5maW5kUmVzb3VyY2U8L2NvZGU+IHRvIGZpbmQgdGhlIHJlc291cmNlLjxwPgorICAgICAqCisgICAgICogQHBhcmFtICBuYW1lIHJlc291cmNlIG5hbWUKKyAgICAgKiBAcmV0dXJuIGEgVVJMIGZvciByZWFkaW5nIHRoZSByZXNvdXJjZSwgb3IgPGNvZGU+bnVsbDwvY29kZT4gaWYKKyAgICAgKiAgICAgICAgIHRoZSByZXNvdXJjZSBjb3VsZCBub3QgYmUgZm91bmQgb3IgdGhlIGNhbGxlciBkb2Vzbid0IGhhdmUKKyAgICAgKiAgICAgICAgIGFkZXF1YXRlIHByaXZpbGVnZXMgdG8gZ2V0IHRoZSByZXNvdXJjZS4KKyAgICAgKiBAc2luY2UgIEpESzEuMQorICAgICAqIEBzZWUgI2ZpbmRSZXNvdXJjZShTdHJpbmcpCisgICAgICovCisgICAgcHVibGljIFVSTCBnZXRSZXNvdXJjZShTdHJpbmcgbmFtZSkgeworCVVSTCB1cmw7CisJaWYgKHBhcmVudCAhPSBudWxsKSB7CisJICAgIHVybCA9IHBhcmVudC5nZXRSZXNvdXJjZShuYW1lKTsKKwl9IGVsc2UgeworCSAgICB1cmwgPSBnZXRCb290c3RyYXBSZXNvdXJjZShuYW1lKTsKKwl9CisJaWYgKHVybCA9PSBudWxsKSB7CisJICAgIHVybCA9IGZpbmRSZXNvdXJjZShuYW1lKTsKKwl9CisJcmV0dXJuIHVybDsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBGaW5kcyBhbGwgdGhlIHJlc291cmNlcyB3aXRoIHRoZSBnaXZlbiBuYW1lLiBBIHJlc291cmNlIGlzIHNvbWUgZGF0YQorICAgICAqIChpbWFnZXMsIGF1ZGlvLCB0ZXh0LCBldGMpIHRoYXQgY2FuIGJlIGFjY2Vzc2VkIGJ5IGNsYXNzIGNvZGUgaW4gYSB3YXkKKyAgICAgKiB0aGF0IGlzIGluZGVwZW5kZW50IG9mIHRoZSBsb2NhdGlvbiBvZiB0aGUgY29kZS48cD4KKyAgICAgKgorICAgICAqIFRoZSBuYW1lIG9mIGEgcmVzb3VyY2UgaXMgYSAiLyItc2VwYXJhdGVkIHBhdGggbmFtZSB0aGF0IGlkZW50aWZpZXMgdGhlCisgICAgICogcmVzb3VyY2UuPHA+CisgICAgICoKKyAgICAgKiBUaGUgc2VhcmNoIG9yZGVyIGlzIGRlc2NyaWJlZCBpbiB0aGUgZG9jdW1lbnRhdGlvbiBmb3Ige0BsaW5rCisgICAgICogI2dldFJlc291cmNlKFN0cmluZyl9LjxwPgorICAgICAqCisgICAgICogQHBhcmFtICBuYW1lIHJlc291cmNlIG5hbWUKKyAgICAgKiBAcmV0dXJuIGFuIGVudW1lcmF0aW9uIG9mIFVSTCB0byB0aGUgcmVzb3VyY2UuIElmIG5vIHJlc291cmNlcyBjb3VsZAorICAgICAqICAgICAgICAgYmUgZm91bmQsIHRoZSBlbnVtZXJhdGlvbiB3aWxsIGJlIGVtcHR5LiBSZXNvdXJjZXMgdGhhdCB0aGUKKyAgICAgKiAgICAgICAgIGRvZXNuJ3QgaGF2ZSBhY2Nlc3MgdG8gd2lsbCBub3QgYmUgaW4gdGhlIGVudW1lcmF0aW9uLgorICAgICAqIEB0aHJvd3MgSU9FeGNlcHRpb24gaWYgSS9PIGVycm9ycyBvY2N1cgorICAgICAqIEBzaW5jZSAgMS4yCisgICAgICogQHNlZSAgICAjZ2V0UmVzb3VyY2UKKyAgICAgKiBAc2VlICNmaW5kUmVzb3VyY2VzCisgICAgICovCisgICAgcHVibGljIGZpbmFsIEVudW1lcmF0aW9uIGdldFJlc291cmNlcyhTdHJpbmcgbmFtZSkgdGhyb3dzIElPRXhjZXB0aW9uIHsKKwlFbnVtZXJhdGlvbltdIHRtcCA9IG5ldyBFbnVtZXJhdGlvblsyXTsKKwlpZiAocGFyZW50ICE9IG51bGwpIHsKKwkgICAgdG1wWzBdID0gcGFyZW50LmdldFJlc291cmNlcyhuYW1lKTsKKwl9IGVsc2UgeworCSAgICB0bXBbMF0gPSBnZXRCb290c3RyYXBSZXNvdXJjZXMobmFtZSk7CisJfQorCXRtcFsxXSA9IGZpbmRSZXNvdXJjZXMobmFtZSk7CisKKwlyZXR1cm4gbmV3IDxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICdDb21wb3VuZEVudW1lcmF0aW9uJyI+Q29tcG91bmRFbnVtZXJhdGlvbjwvZXJyb3I+KHRtcCk7CisgICAgfQorCisgICAgLyoqCisgICAgICogUmV0dXJucyBhbiBFbnVtZXJhdGlvbiBvZiBVUkxzIHJlcHJlc2VudGluZyBhbGwgdGhlIHJlc291cmNlcyB3aXRoCisgICAgICogdGhlIGdpdmVuIG5hbWUuIENsYXNzIGxvYWRlciBpbXBsZW1lbnRhdGlvbnMgc2hvdWxkIG92ZXJyaWRlIHRoaXMKKyAgICAgKiBtZXRob2QgdG8gc3BlY2lmeSB3aGVyZSB0byBsb2FkIHJlc291cmNlcyBmcm9tLgorICAgICAqCisgICAgICogQHBhcmFtICBuYW1lIHRoZSByZXNvdXJjZSBuYW1lCisgICAgICogQHJldHVybiBhbiBFbnVtZXJhdGlvbiBvZiBVUkxzIGZvciB0aGUgcmVzb3VyY2VzCisgICAgICogQHRocm93cyBJT0V4Y2VwdGlvbiBpZiBJL08gZXJyb3JzIG9jY3VyCisgICAgICogQHNpbmNlICAxLjIKKyAgICAgKi8KKyAgICBwcm90ZWN0ZWQgRW51bWVyYXRpb24gZmluZFJlc291cmNlcyhTdHJpbmcgbmFtZSkgdGhyb3dzIElPRXhjZXB0aW9uIHsKKwlyZXR1cm4gbmV3IDxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICdDb21wb3VuZEVudW1lcmF0aW9uJyI+Q29tcG91bmRFbnVtZXJhdGlvbjwvZXJyb3I+KG5ldyBFbnVtZXJhdGlvblswXSk7CisgICAgfQorCisgICAgLyoqCisgICAgICogRmluZHMgdGhlIHJlc291cmNlIHdpdGggdGhlIGdpdmVuIG5hbWUuIENsYXNzIGxvYWRlcgorICAgICAqIGltcGxlbWVudGF0aW9ucyBzaG91bGQgb3ZlcnJpZGUgdGhpcyBtZXRob2QgdG8gc3BlY2lmeSB3aGVyZSB0bworICAgICAqIGZpbmQgcmVzb3VyY2VzLgorICAgICAqCisgICAgICogQHBhcmFtICBuYW1lIHRoZSByZXNvdXJjZSBuYW1lCisgICAgICogQHJldHVybiBhIFVSTCBmb3IgcmVhZGluZyB0aGUgcmVzb3VyY2UsIG9yIDxjb2RlPm51bGw8L2NvZGU+CisgICAgICogICAgICAgICBpZiB0aGUgcmVzb3VyY2UgY291bGQgbm90IGJlIGZvdW5kCisgICAgICogQHNpbmNlICAxLjIKKyAgICAgKi8KKyAgICBwcm90ZWN0ZWQgVVJMIGZpbmRSZXNvdXJjZShTdHJpbmcgbmFtZSkgeworCXJldHVybiBudWxsOworICAgIH0KKworICAgIC8qKgorICAgICAqIEZpbmQgYSByZXNvdXJjZSBvZiB0aGUgc3BlY2lmaWVkIG5hbWUgZnJvbSB0aGUgc2VhcmNoIHBhdGggdXNlZCB0byBsb2FkCisgICAgICogY2xhc3Nlcy48cD4KKyAgICAgKgorICAgICAqIEluIEpESzEuMSwgdGhlIHNlYXJjaCBwYXRoIHVzZWQgaXMgdGhhdCBvZiB0aGUgdmlydHVhbCBtYWNoaW5lJ3MKKyAgICAgKiBidWlsdC1pbiBjbGFzcyBsb2FkZXIuPHA+CisgICAgICoKKyAgICAgKiBTaW5jZSB0aGUgSmF2YSAyIFNESyB2MS4yLCB0aGlzIG1ldGhvZCBsb2NhdGVzIHRoZSByZXNvdXJjZSB0aHJvdWdoIHRoZSBzeXN0ZW0gY2xhc3MKKyAgICAgKiBsb2FkZXIgKHNlZSB7QGxpbmsgI2dldFN5c3RlbUNsYXNzTG9hZGVyKCl9KS4KKyAgICAgKgorICAgICAqIEBwYXJhbSAgbmFtZSB0aGUgcmVzb3VyY2UgbmFtZQorICAgICAqIEByZXR1cm4gYSBVUkwgZm9yIHJlYWRpbmcgdGhlIHJlc291cmNlLCBvciA8Y29kZT5udWxsPC9jb2RlPiBpZgorICAgICAqICAgICAgICAgdGhlIHJlc291cmNlIGNvdWxkIG5vdCBiZSBmb3VuZAorICAgICAqIEBzaW5jZSBKREsxLjEKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIFVSTCBnZXRTeXN0ZW1SZXNvdXJjZShTdHJpbmcgbmFtZSkgeworCUNsYXNzTG9hZGVyIHN5c3RlbSA9IGdldFN5c3RlbUNsYXNzTG9hZGVyKCk7CisJaWYgKHN5c3RlbSA9PSBudWxsKSB7CisJICAgIHJldHVybiBnZXRCb290c3RyYXBSZXNvdXJjZShuYW1lKTsKKwl9CisJcmV0dXJuIHN5c3RlbS5nZXRSZXNvdXJjZShuYW1lKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBGaW5kIHJlc291cmNlcyBmcm9tIHRoZSBWTSdzIGJ1aWx0LWluIGNsYXNzbG9hZGVyLgorICAgICAqLworICAgIHByaXZhdGUgc3RhdGljIFVSTCBnZXRCb290c3RyYXBSZXNvdXJjZShTdHJpbmcgbmFtZSkgeworCTxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICdVUkxDbGFzc1BhdGgnIj5VUkxDbGFzc1BhdGg8L2Vycm9yPiB1Y3AgPSBnZXRCb290c3RyYXBDbGFzc1BhdGgoKTsKKwk8ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAnUmVzb3VyY2UnIj5SZXNvdXJjZTwvZXJyb3I+IHJlcyA9IHVjcC48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIG1ldGhvZCAnZ2V0UmVzb3VyY2UoamF2YS5sYW5nLlN0cmluZyknIj5nZXRSZXNvdXJjZTwvZXJyb3I+KG5hbWUpOworCXJldHVybiByZXMgIT0gbnVsbCA/IHJlcy48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIG1ldGhvZCAnZ2V0VVJMKCknIj5nZXRVUkw8L2Vycm9yPigpIDogbnVsbDsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBGaW5kcyBhbGwgcmVzb3VyY2VzIG9mIHRoZSBzcGVjaWZpZWQgbmFtZSBmcm9tIHRoZSBzZWFyY2ggcGF0aCB1c2VkIHRvCisgICAgICogbG9hZCBjbGFzc2VzLiBUaGUgcmVzb3VyY2VzIHRodXMgZm91bmQgYXJlIHJldHVybmVkIGFzIGFuCisgICAgICogPGNvZGU+RW51bWVyYXRpb248L2NvZGU+IG9mIDxjb2RlPlVSTDwvY29kZT4gb2JqZWN0cy4gPHA+CisgICAgICoKKyAgICAgKiBUaGUgc2VhcmNoIG9yZGVyIGlzIGRlc2NyaWJlZCBpbiB0aGUgZG9jdW1lbnRhdGlvbiBmb3Ige0BsaW5rCisgICAgICogI2dldFN5c3RlbVJlc291cmNlKFN0cmluZyl9LiA8cD4KKyAgICAgKgorICAgICAqIEBwYXJhbSAgbmFtZSB0aGUgcmVzb3VyY2UgbmFtZQorICAgICAqIEByZXR1cm4gYW4gZW51bWVyYXRpb24gb2YgcmVzb3VyY2UgVVJMcworICAgICAqIEB0aHJvd3MgSU9FeGNlcHRpb24gaWYgSS9PIGVycm9ycyBvY2N1cgorICAgICAqIEBzaW5jZSAxLjIKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIEVudW1lcmF0aW9uIGdldFN5c3RlbVJlc291cmNlcyhTdHJpbmcgbmFtZSkKKwl0aHJvd3MgSU9FeGNlcHRpb24KKyAgICB7CisJQ2xhc3NMb2FkZXIgc3lzdGVtID0gZ2V0U3lzdGVtQ2xhc3NMb2FkZXIoKTsKKwlpZiAoc3lzdGVtID09IG51bGwpIHsKKwkgICAgcmV0dXJuIGdldEJvb3RzdHJhcFJlc291cmNlcyhuYW1lKTsKKwl9CisJcmV0dXJuIHN5c3RlbS5nZXRSZXNvdXJjZXMobmFtZSk7CisgICAgfQorCisgICAgLyoqCisgICAgICogRmluZCByZXNvdXJjZXMgZnJvbSB0aGUgVk0ncyBidWlsdC1pbiBjbGFzc2xvYWRlci4KKyAgICAgKi8KKyAgICBwcml2YXRlIHN0YXRpYyBFbnVtZXJhdGlvbiBnZXRCb290c3RyYXBSZXNvdXJjZXMoU3RyaW5nIG5hbWUpCisJdGhyb3dzIElPRXhjZXB0aW9uCisgICAgeworCWZpbmFsIEVudW1lcmF0aW9uIGUgPSBnZXRCb290c3RyYXBDbGFzc1BhdGgoKS48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIG1ldGhvZCAnZ2V0UmVzb3VyY2VzKGphdmEubGFuZy5TdHJpbmcpJyI+Z2V0UmVzb3VyY2VzPC9lcnJvcj4obmFtZSk7CisJcmV0dXJuIG5ldyBFbnVtZXJhdGlvbiAoKSB7CisJICAgIHB1YmxpYyBPYmplY3QgbmV4dEVsZW1lbnQoKSB7CisJCXJldHVybiAoKDxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICdSZXNvdXJjZSciPlJlc291cmNlPC9lcnJvcj4pZS5uZXh0RWxlbWVudCgpKS5nZXRVUkwoKTsKKwkgICAgfQorCSAgICBwdWJsaWMgYm9vbGVhbiBoYXNNb3JlRWxlbWVudHMoKSB7CisJCXJldHVybiBlLmhhc01vcmVFbGVtZW50cygpOworCSAgICB9CisJfTsKKyAgICB9CisKKyAgICAvKgorICAgICAqIFJldHVybnMgdGhlIFVSTENsYXNzUGF0aCB0aGF0IGlzIHVzZWQgZm9yIGZpbmRpbmcgc3lzdGVtIHJlc291cmNlcy4KKyAgICAgKi8KKyAgICBzdGF0aWMgPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ1VSTENsYXNzUGF0aCciPlVSTENsYXNzUGF0aDwvZXJyb3I+IGdldEJvb3RzdHJhcENsYXNzUGF0aCgpIHsKKwlpZiAoYm9vdHN0cmFwQ2xhc3NQYXRoID09IG51bGwpIHsKKwkgICAgYm9vdHN0cmFwQ2xhc3NQYXRoID0gPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ3N1biciPnN1bjwvZXJyb3I+Lm1pc2MuTGF1bmNoZXIuZ2V0Qm9vdHN0cmFwQ2xhc3NQYXRoKCk7CisJfQorCXJldHVybiBib290c3RyYXBDbGFzc1BhdGg7CisgICAgfQorCisgICAgcHJpdmF0ZSBzdGF0aWMgPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ1VSTENsYXNzUGF0aCciPlVSTENsYXNzUGF0aDwvZXJyb3I+IGJvb3RzdHJhcENsYXNzUGF0aDsKKworICAgIC8qKgorICAgICAqIFJldHVybnMgYW4gaW5wdXQgc3RyZWFtIGZvciByZWFkaW5nIHRoZSBzcGVjaWZpZWQgcmVzb3VyY2UuCisgICAgICoKKyAgICAgKiBUaGUgc2VhcmNoIG9yZGVyIGlzIGRlc2NyaWJlZCBpbiB0aGUgZG9jdW1lbnRhdGlvbiBmb3Ige0BsaW5rCisgICAgICogI2dldFJlc291cmNlKFN0cmluZyl9LjxwPgorICAgICAqCisgICAgICogQHBhcmFtICBuYW1lIHRoZSByZXNvdXJjZSBuYW1lCisgICAgICogQHJldHVybiBhbiBpbnB1dCBzdHJlYW0gZm9yIHJlYWRpbmcgdGhlIHJlc291cmNlLCBvciA8Y29kZT5udWxsPC9jb2RlPgorICAgICAqICAgICAgICAgaWYgdGhlIHJlc291cmNlIGNvdWxkIG5vdCBiZSBmb3VuZAorICAgICAqIEBzaW5jZSAgSkRLMS4xCisgICAgICovCisgICAgcHVibGljIElucHV0U3RyZWFtIGdldFJlc291cmNlQXNTdHJlYW0oU3RyaW5nIG5hbWUpIHsKKwlVUkwgdXJsID0gZ2V0UmVzb3VyY2UobmFtZSk7CisJdHJ5IHsKKwkgICAgcmV0dXJuIHVybCAhPSBudWxsID8gdXJsLm9wZW5TdHJlYW0oKSA6IG51bGw7CisJfSBjYXRjaCAoSU9FeGNlcHRpb24gZSkgeworCSAgICByZXR1cm4gbnVsbDsKKwl9CisgICAgfQorCisgICAgLyoqCisgICAgICogT3BlbiBmb3IgcmVhZGluZywgYSByZXNvdXJjZSBvZiB0aGUgc3BlY2lmaWVkIG5hbWUgZnJvbSB0aGUgc2VhcmNoIHBhdGgKKyAgICAgKiB1c2VkIHRvIGxvYWQgY2xhc3Nlcy48cD4KKyAgICAgKgorICAgICAqIFRoZSBzZWFyY2ggb3JkZXIgaXMgZGVzY3JpYmVkIGluIHRoZSBkb2N1bWVudGF0aW9uIGZvciB7QGxpbmsKKyAgICAgKiAjZ2V0U3lzdGVtUmVzb3VyY2UoU3RyaW5nKX0uIDxwPgorICAgICAqCisgICAgICogQHBhcmFtICBuYW1lIHRoZSByZXNvdXJjZSBuYW1lCisgICAgICogQHJldHVybiBhbiBpbnB1dCBzdHJlYW0gZm9yIHJlYWRpbmcgdGhlIHJlc291cmNlLCBvciA8Y29kZT5udWxsPC9jb2RlPgorICAgICAqIAkgICAgICAgaWYgdGhlIHJlc291cmNlIGNvdWxkIG5vdCBiZSBmb3VuZAorICAgICAqIEBzaW5jZSBKREsxLjEKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIElucHV0U3RyZWFtIGdldFN5c3RlbVJlc291cmNlQXNTdHJlYW0oU3RyaW5nIG5hbWUpIHsKKwlVUkwgdXJsID0gZ2V0U3lzdGVtUmVzb3VyY2UobmFtZSk7CisJdHJ5IHsKKwkgICAgcmV0dXJuIHVybCAhPSBudWxsID8gdXJsLm9wZW5TdHJlYW0oKSA6IG51bGw7CisJfSBjYXRjaCAoSU9FeGNlcHRpb24gZSkgeworCSAgICByZXR1cm4gbnVsbDsKKwl9CisgICAgfQorCisgICAgLyoqCisgICAgICogUmV0dXJucyB0aGUgc3lzdGVtIGNsYXNzIGxvYWRlciBmb3IgZGVsZWdhdGlvbi4gVGhpcyBpcyB0aGUgZGVmYXVsdAorICAgICAqIGRlbGVnYXRpb24gcGFyZW50IGZvciBuZXcgPGNvZGU+Q2xhc3NMb2FkZXI8L2NvZGU+IGluc3RhbmNlcywgYW5kCisgICAgICogaXMgdHlwaWNhbGx5IHRoZSBjbGFzcyBsb2FkZXIgdXNlZCB0byBzdGFydCB0aGUgYXBwbGljYXRpb24uCisgICAgICogPHA+CisgICAgICogVGhpcyBtZXRob2QgaXMgZmlyc3QgaW52b2tlZCBlYXJseSBpbiB0aGUgcnVudGltZSdzIHN0YXJ0dXAKKyAgICAgKiBzZXF1ZW5jZSwgYXQgd2hpY2ggcG9pbnQgaXQgY3JlYXRlcyB0aGUgc3lzdGVtIGNsYXNzIGxvYWRlcgorICAgICAqIGFuZCBzZXRzIGl0IGFzIHRoZSBjb250ZXh0IGNsYXNzIGxvYWRlciBvZiB0aGUgaW52b2tpbmcKKyAgICAgKiA8dHQ+VGhyZWFkPC90dD4uCisgICAgICogPHA+CisgICAgICogVGhlIGRlZmF1bHQgc3lzdGVtIGNsYXNzIGxvYWRlciBpcyBhbiBpbXBsZW1lbnRhdGlvbi1kZXBlbmRlbnQKKyAgICAgKiBpbnN0YW5jZSBvZiB0aGlzIGNsYXNzLgorICAgICAqIDxwPgorICAgICAqIElmIHRoZSBzeXN0ZW0gcHJvcGVydHkgPHR0PmphdmEuc3lzdGVtLmNsYXNzLmxvYWRlcjwvdHQ+IGlzCisgICAgICogZGVmaW5lZCB3aGVuIHRoaXMgbWV0aG9kIGlzIGZpcnN0IGludm9rZWQgdGhlbiB0aGUgdmFsdWUgb2YgdGhhdAorICAgICAqIHByb3BlcnR5IGlzIHRha2VuIHRvIGJlIHRoZSBuYW1lIG9mIGEgY2xhc3MgdGhhdCB3aWxsIGJlIHJldHVybmVkIGFzCisgICAgICogdGhlIHN5c3RlbSBjbGFzcyBsb2FkZXIuIFRoZSBjbGFzcyBpcyBsb2FkZWQgdXNpbmcgdGhlIGRlZmF1bHQgc3lzdGVtCisgICAgICogY2xhc3MgbG9hZGVyIGFuZCBtdXN0IGRlZmluZSBhIHB1YmxpYyBjb25zdHJ1Y3RvciB0aGF0IHRha2VzIGEgc2luZ2xlCisgICAgICogcGFyYW1ldGVyIG9mIHR5cGUgPHR0PkNsYXNzTG9hZGVyPC90dD4gd2hpY2ggaXMgdXNlZAorICAgICAqIGFzIHRoZSBkZWxlZ2F0aW9uIHBhcmVudC4gQW4gaW5zdGFuY2UgaXMgdGhlbiBjcmVhdGVkIHVzaW5nIHRoaXMKKyAgICAgKiBjb25zdHJ1Y3RvciB3aXRoIHRoZSBkZWZhdWx0IHN5c3RlbSBjbGFzcyBsb2FkZXIgYXMgdGhlIHBhcmFtZXRlci4KKyAgICAgKiBUaGUgcmVzdWx0aW5nIGNsYXNzIGxvYWRlciBpcyBkZWZpbmVkIHRvIGJlIHRoZSBzeXN0ZW0gY2xhc3MgbG9hZGVyLgorICAgICAqIDxwPgorICAgICAqIElmIGEgc2VjdXJpdHkgbWFuYWdlciBpcyBwcmVzZW50LCBhbmQgdGhlIGNhbGxlcidzIGNsYXNzIGxvYWRlciBpcworICAgICAqIG5vdCBudWxsIGFuZCB0aGUgY2FsbGVyJ3MgY2xhc3MgbG9hZGVyIGlzIG5vdCB0aGUgc2FtZSBhcyBvciBhbiBhbmNlc3RvciBvZgorICAgICAqIHRoZSBzeXN0ZW0gY2xhc3MgbG9hZGVyLCB0aGVuCisgICAgICogdGhpcyBtZXRob2QgY2FsbHMgdGhlIHNlY3VyaXR5IG1hbmFnZXIncyA8Y29kZT5jaGVja1Blcm1pc3Npb248L2NvZGU+CisgICAgICogbWV0aG9kIHdpdGggYSA8Y29kZT5SdW50aW1lUGVybWlzc2lvbigiZ2V0Q2xhc3NMb2FkZXIiKTwvY29kZT4KKyAgICAgKiBwZXJtaXNzaW9uIHRvIGVuc3VyZSBpdCdzIG9rIHRvIGFjY2VzcyB0aGUgc3lzdGVtIGNsYXNzIGxvYWRlci4KKyAgICAgKiBJZiBub3QsIGEgPGNvZGU+U2VjdXJpdHlFeGNlcHRpb248L2NvZGU+IHdpbGwgYmUgdGhyb3duLgorICAgICAqCisgICAgICogQHJldHVybiB0aGUgc3lzdGVtIDxjb2RlPkNsYXNzTG9hZGVyPC9jb2RlPiBmb3IgZGVsZWdhdGlvbiwgb3IKKyAgICAgKiAgICAgICAgIDxjb2RlPm51bGw8L2NvZGU+IGlmIG5vbmUKKyAgICAgKiBAdGhyb3dzIFNlY3VyaXR5RXhjZXB0aW9uCisgICAgICogICAgICAgIGlmIGEgc2VjdXJpdHkgbWFuYWdlciBleGlzdHMgYW5kIGl0cworICAgICAqICAgICAgICA8Y29kZT5jaGVja1Blcm1pc3Npb248L2NvZGU+IG1ldGhvZCBkb2Vzbid0IGFsbG93CisgICAgICogICAgICAgIGFjY2VzcyB0byB0aGUgc3lzdGVtIGNsYXNzIGxvYWRlci4KKyAgICAgKiBAdGhyb3dzIElsbGVnYWxTdGF0ZUV4Y2VwdGlvbgorICAgICAqICAgICAgICBpZiBpbnZva2VkIHJlY3Vyc2l2ZWx5IGR1cmluZyB0aGUgY29uc3RydWN0aW9uCisgICAgICogICAgICAgIG9mIHRoZSBjbGFzcyBsb2FkZXIgc3BlY2lmaWVkIGJ5IHRoZQorICAgICAqICAgICAgICA8Y29kZT5qYXZhLnN5c3RlbS5jbGFzcy5sb2FkZXI8L2NvZGU+IHByb3BlcnR5LgorICAgICAqIEB0aHJvd3MgRXJyb3IKKyAgICAgKiAgICAgICAgaWYgdGhlIHN5c3RlbSBwcm9wZXJ0eSA8dHQ+amF2YS5zeXN0ZW0uY2xhc3MubG9hZGVyPC90dD4KKyAgICAgKiAgICAgICAgaXMgZGVmaW5lZCBidXQgdGhlIG5hbWVkIGNsYXNzIGNvdWxkIG5vdCBiZSBsb2FkZWQsIHRoZQorICAgICAqICAgICAgICBwcm92aWRlciBjbGFzcyBkb2VzIG5vdCBkZWZpbmUgdGhlIHJlcXVpcmVkIGNvbnN0cnVjdG9yLCBvciBhbgorICAgICAqICAgICAgICBleGNlcHRpb24gaXMgdGhyb3duIGJ5IHRoYXQgY29uc3RydWN0b3Igd2hlbiBpdCBpcyBpbnZva2VkLiBUaGUKKyAgICAgKiAgICAgICAgdW5kZXJseWluZyBjYXVzZSBvZiB0aGUgZXJyb3IgY2FuIGJlIHJldHJpZXZlZCB2aWEgdGhlCisgICAgICogICAgICAgIHtAbGluayBUaHJvd2FibGUjZ2V0Q2F1c2UoKX0gbWV0aG9kLgorICAgICAqIEBzZWUgU2VjdXJpdHlNYW5hZ2VyI2NoZWNrUGVybWlzc2lvbgorICAgICAqIEBzZWUgamF2YS5sYW5nLlJ1bnRpbWVQZXJtaXNzaW9uCisgICAgICogQHJldmlzZWQgMS40CisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBDbGFzc0xvYWRlciBnZXRTeXN0ZW1DbGFzc0xvYWRlcigpIHsKKwlpbml0U3lzdGVtQ2xhc3NMb2FkZXIoKTsKKwlpZiAoc2NsID09IG51bGwpIHsKKwkgICAgcmV0dXJuIG51bGw7CisJfQorCTxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICdTZWN1cml0eU1hbmFnZXInIj5TZWN1cml0eU1hbmFnZXI8L2Vycm9yPiBzbSA9IFN5c3RlbS5nZXRTZWN1cml0eU1hbmFnZXIoKTsKKwlpZiAoc20gIT0gbnVsbCkgeworCSAgICBDbGFzc0xvYWRlciBjY2wgPSBnZXRDYWxsZXJDbGFzc0xvYWRlcigpOworCSAgICBpZiAoY2NsICE9IG51bGwgJiYgY2NsICE9IHNjbCAmJiAhc2NsLmlzQW5jZXN0b3IoY2NsKSkgeworCQlzbS48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIG1ldGhvZCAnY2hlY2tQZXJtaXNzaW9uKFJ1bnRpbWVQZXJtaXNzaW9uKSciPmNoZWNrUGVybWlzc2lvbjwvZXJyb3I+KGdldEdldENsYXNzTG9hZGVyUGVybSgpKTsKKwkgICAgfQorCX0KKwlyZXR1cm4gc2NsOworICAgIH0KKworICAgIHByaXZhdGUgc3RhdGljIHN5bmNocm9uaXplZCB2b2lkIGluaXRTeXN0ZW1DbGFzc0xvYWRlcigpIHsKKwlpZiAoIXNjbFNldCkgeworCSAgICBpZiAoc2NsICE9IG51bGwpCisJCXRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oInJlY3Vyc2l2ZSBjYWxsIik7CisgICAgICAgICAgICA8ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAnc3VuJyI+c3VuPC9lcnJvcj4ubWlzYy5MYXVuY2hlciBsID0gPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ3N1biciPnN1bjwvZXJyb3I+Lm1pc2MuTGF1bmNoZXIuZ2V0TGF1bmNoZXIoKTsKKwkgICAgaWYgKGwgIT0gbnVsbCkgeworCQlUaHJvd2FibGUgb29wcyA9IG51bGw7CisJCXNjbCA9IGwuPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBtZXRob2QgJ2dldENsYXNzTG9hZGVyKCknIj5nZXRDbGFzc0xvYWRlcjwvZXJyb3I+KCk7CisJICAgICAgICB0cnkgeworCQkgICAgPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ1ByaXZpbGVnZWRFeGNlcHRpb25BY3Rpb24nIj5Qcml2aWxlZ2VkRXhjZXB0aW9uQWN0aW9uPC9lcnJvcj4gYTsKKwkJICAgIDxlcnJvciBkZXNjcj0iSW5jb21wYXRpYmxlIHR5cGVzLiBGb3VuZDogJ1N5c3RlbUNsYXNzTG9hZGVyQWN0aW9uJywgcmVxdWlyZWQ6ICdQcml2aWxlZ2VkRXhjZXB0aW9uQWN0aW9uJyI+YSA9IG5ldyBTeXN0ZW1DbGFzc0xvYWRlckFjdGlvbihzY2wpPC9lcnJvcj47CisgICAgICAgICAgICAgICAgICAgIHNjbCA9IChDbGFzc0xvYWRlcikgPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ0FjY2Vzc0NvbnRyb2xsZXInIj5BY2Nlc3NDb250cm9sbGVyPC9lcnJvcj4uZG9Qcml2aWxlZ2VkKGEpOworCSAgICAgICAgfSBjYXRjaCAoPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ1ByaXZpbGVnZWRBY3Rpb25FeGNlcHRpb24nIj5Qcml2aWxlZ2VkQWN0aW9uRXhjZXB0aW9uPC9lcnJvcj4gcGFlKSB7CisJCSAgICBvb3BzID0gcGFlLjxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgbWV0aG9kICdnZXRDYXVzZSgpJyI+Z2V0Q2F1c2U8L2Vycm9yPigpOworCSAgICAgICAgICAgIGlmIChvb3BzIGluc3RhbmNlb2YgPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ0ludm9jYXRpb25UYXJnZXRFeGNlcHRpb24nIj5JbnZvY2F0aW9uVGFyZ2V0RXhjZXB0aW9uPC9lcnJvcj4pIHsKKwkJICAgICAgICBvb3BzID0gb29wcy5nZXRDYXVzZSgpOworCQkgICAgfQorCSAgICAgICAgfQorCQlpZiAob29wcyAhPSBudWxsKSB7CisJCSAgICBpZiAob29wcyBpbnN0YW5jZW9mIEVycm9yKSB7CisJCQl0aHJvdyAoRXJyb3IpIG9vcHM7CisJCSAgICB9IGVsc2UgeworCQkgICAgICAgIC8vIHdyYXAgdGhlIGV4Y2VwdGlvbgorCQkgICAgICAgIHRocm93IG5ldyBFcnJvcihvb3BzKTsKKwkJICAgIH0KKwkJfQorCSAgICB9CisJICAgIHNjbFNldCA9IHRydWU7CisJfQorICAgIH0KKworICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgc3BlY2lmaWVkIGNsYXNzIGxvYWRlciBjYW4gYmUgZm91bmQKKyAgICAvLyBpbiB0aGlzIGNsYXNzIGxvYWRlcidzIGRlbGVnYXRpb24gY2hhaW4uCisgICAgYm9vbGVhbiBpc0FuY2VzdG9yKENsYXNzTG9hZGVyIGNsKSB7CisJQ2xhc3NMb2FkZXIgYWNsID0gdGhpczsKKwlkbyB7CisJICAgIGFjbCA9IGFjbC5wYXJlbnQ7CisJICAgIGlmIChjbCA9PSBhY2wpIHsKKwkJcmV0dXJuIHRydWU7CisJICAgIH0KKwl9IHdoaWxlIChhY2wgIT0gbnVsbCk7CisJcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIC8vIFJldHVybnMgdGhlIGNhbGxlcidzIGNsYXNzIGxvYWRlciwgb3IgbnVsbCBpZiBub25lLgorICAgIC8vIE5PVEUgdGhpcyBtdXN0IGFsd2F5cyBiZSBjYWxsZWQgd2hlbiB0aGVyZSBpcyBleGFjdGx5IG9uZQorICAgIC8vIGludGVydmVuaW5nIGZyYW1lIGZyb20gdGhlIGNvcmUgbGlicmFyaWVzIG9uIHRoZSBzdGFjayBiZXR3ZWVuCisgICAgLy8gdGhpcyBtZXRob2QncyBpbnZvY2F0aW9uIGFuZCB0aGUgZGVzaXJlZCBjYWxsZXIuCisgICAgc3RhdGljIENsYXNzTG9hZGVyIGdldENhbGxlckNsYXNzTG9hZGVyKCkgeworICAgICAgICAvLyBOT1RFIHVzZSBvZiBtb3JlIGdlbmVyaWMgUmVmbGVjdGlvbi5nZXRDYWxsZXJDbGFzcygpCisgICAgICAgIENsYXNzIGNhbGxlciA9IDxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICdSZWZsZWN0aW9uJyI+UmVmbGVjdGlvbjwvZXJyb3I+LmdldENhbGxlckNsYXNzKDMpOworICAgICAgICAvLyBUaGlzIGNhbiBiZSBudWxsIGlmIHRoZSBWTSBpcyByZXF1ZXN0aW5nIGl0CisgICAgICAgIGlmIChjYWxsZXIgPT0gbnVsbCkgeworICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgIH0KKyAgICAgICAgLy8gQ2lyY3VtdmVudCBzZWN1cml0eSBjaGVjayBzaW5jZSB0aGlzIGlzIHBhY2thZ2UtcHJpdmF0ZQorICAgICAgICByZXR1cm4gY2FsbGVyLjxlcnJvciBkZXNjcj0iJ2dldENsYXNzTG9hZGVyMCgpJyBpcyBub3QgcHVibGljIGluICdqYXZhLmxhbmcuQ2xhc3MnLiBDYW5ub3QgYmUgYWNjZXNzZWQgZnJvbSBvdXRzaWRlIHBhY2thZ2UiPmdldENsYXNzTG9hZGVyMDwvZXJyb3I+KCk7CisgICAgfQorCisgICAgLy8gVGhlIGNsYXNzIGxvYWRlciBmb3IgdGhlIHN5c3RlbQorICAgIHByaXZhdGUgc3RhdGljIENsYXNzTG9hZGVyIHNjbDsKKworICAgIC8vIFNldCB0byB0cnVlIG9uY2UgdGhlIHN5c3RlbSBjbGFzcyBsb2FkZXIgaGFzIGJlZW4gc2V0CisgICAgcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBzY2xTZXQ7CisKKyAgICAvLyBQZXJtaXNzaW9uIHRvIGFjY2VzcyBzeXN0ZW0gb3IgcGFyZW50IGNsYXNzIGxvYWRlcgorICAgIHByaXZhdGUgc3RhdGljIDxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICdSdW50aW1lUGVybWlzc2lvbiciPlJ1bnRpbWVQZXJtaXNzaW9uPC9lcnJvcj4gZ2V0Q2xhc3NMb2FkZXJQZXJtID0gbnVsbDsKKworICAgIHN0YXRpYyA8ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAnUnVudGltZVBlcm1pc3Npb24nIj5SdW50aW1lUGVybWlzc2lvbjwvZXJyb3I+IGdldEdldENsYXNzTG9hZGVyUGVybSgpCisgICAgeworCWlmIChnZXRDbGFzc0xvYWRlclBlcm0gPT0gbnVsbCkKKwkgICAgZ2V0Q2xhc3NMb2FkZXJQZXJtID0gbmV3IDxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICdSdW50aW1lUGVybWlzc2lvbiciPlJ1bnRpbWVQZXJtaXNzaW9uPC9lcnJvcj4oImdldENsYXNzTG9hZGVyIik7CisJcmV0dXJuIGdldENsYXNzTG9hZGVyUGVybTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBEZWZpbmVzIGEgcGFja2FnZSBieSBuYW1lIGluIHRoaXMgQ2xhc3NMb2FkZXIuIFRoaXMgYWxsb3dzIGNsYXNzCisgICAgICogbG9hZGVycyB0byBkZWZpbmUgdGhlIHBhY2thZ2VzIGZvciB0aGVpciBjbGFzc2VzLiBQYWNrYWdlcyBtdXN0IGJlCisgICAgICogY3JlYXRlZCBiZWZvcmUgdGhlIGNsYXNzIGlzIGRlZmluZWQsIGFuZCBwYWNrYWdlIG5hbWVzIG11c3QgYmUKKyAgICAgKiB1bmlxdWUgd2l0aGluIGEgY2xhc3MgbG9hZGVyIGFuZCBjYW5ub3QgYmUgcmVkZWZpbmVkIG9yIGNoYW5nZWQKKyAgICAgKiBvbmNlIGNyZWF0ZWQuCisgICAgICoKKyAgICAgKiBAcGFyYW0gbmFtZSAgICAgICAgdGhlIHBhY2thZ2UgbmFtZQorICAgICAqIEBwYXJhbSBzcGVjVGl0bGUgICB0aGUgc3BlY2lmaWNhdGlvbiB0aXRsZQorICAgICAqIEBwYXJhbSBzcGVjVmVyc2lvbiB0aGUgc3BlY2lmaWNhdGlvbiB2ZXJzaW9uCisgICAgICogQHBhcmFtIHNwZWNWZW5kb3IgIHRoZSBzcGVjaWZpY2F0aW9uIHZlbmRvcgorICAgICAqIEBwYXJhbSBpbXBsVGl0bGUgICB0aGUgaW1wbGVtZW50YXRpb24gdGl0bGUKKyAgICAgKiBAcGFyYW0gaW1wbFZlcnNpb24gdGhlIGltcGxlbWVudGF0aW9uIHZlcnNpb24KKyAgICAgKiBAcGFyYW0gaW1wbFZlbmRvciAgdGhlIGltcGxlbWVudGF0aW9uIHZlbmRvcgorICAgICAqIEBwYXJhbSBzZWFsQmFzZSAgICBJZiBub3QgbnVsbCwgdGhlbiB0aGlzIHBhY2thZ2UgaXMgc2VhbGVkIHdpdGgKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgcmVzcGVjdCB0byB0aGUgZ2l2ZW4gY29kZSBzb3VyY2UgVVJMLiBPdGhlcndpc2UsCisgICAgICoJCQkgIHRoZSBwYWNrYWdlIGlzIG5vdCBzZWFsZWQuCisgICAgICogQHJldHVybiB0aGUgbmV3bHkgZGVmaW5lZCA8Y29kZT5QYWNrYWdlPC9jb2RlPiBvYmplY3QKKyAgICAgKiBAZXhjZXB0aW9uIElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBpZiBwYWNrYWdlIG5hbWUgZHVwbGljYXRlcyBhbgorICAgICAqICAgICAgICAgICAgZXhpc3RpbmcgcGFja2FnZSBlaXRoZXIgaW4gdGhpcyBjbGFzcyBsb2FkZXIgb3Igb25lIG9mCisgICAgICogICAgICAgICAgICBpdHMgYW5jZXN0b3JzCisgICAgICogQHNpbmNlIDEuMgorICAgICAqLworICAgIHByb3RlY3RlZCA8ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAnUGFja2FnZSciPlBhY2thZ2U8L2Vycm9yPiBkZWZpbmVQYWNrYWdlKFN0cmluZyBuYW1lLCBTdHJpbmcgc3BlY1RpdGxlLAorCQkJCSAgICBTdHJpbmcgc3BlY1ZlcnNpb24sIFN0cmluZyBzcGVjVmVuZG9yLAorCQkJCSAgICBTdHJpbmcgaW1wbFRpdGxlLCBTdHJpbmcgaW1wbFZlcnNpb24sCisJCQkJICAgIFN0cmluZyBpbXBsVmVuZG9yLCBVUkwgc2VhbEJhc2UpCisJdGhyb3dzIElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbgorICAgIHsKKwlzeW5jaHJvbml6ZWQgKHBhY2thZ2VzKSB7CisJICAgIDxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICdQYWNrYWdlJyI+UGFja2FnZTwvZXJyb3I+IHBrZyA9IGdldFBhY2thZ2UobmFtZSk7CisJICAgIGlmIChwa2cgIT0gbnVsbCkgeworCQl0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKG5hbWUpOworCSAgICB9CisJICAgIHBrZyA9IG5ldyA8ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAnUGFja2FnZSciPlBhY2thZ2U8L2Vycm9yPihuYW1lLCBzcGVjVGl0bGUsIHNwZWNWZXJzaW9uLCBzcGVjVmVuZG9yLAorCQkJICAgICAgaW1wbFRpdGxlLCBpbXBsVmVyc2lvbiwgaW1wbFZlbmRvciwKKwkJCSAgICAgIHNlYWxCYXNlKTsKKwkgICAgcGFja2FnZXMucHV0PGVycm9yIGRlc2NyPSIncHV0KGphdmEubGFuZy5PYmplY3QsIGphdmEubGFuZy5PYmplY3QpJyBpbiAnamF2YS51dGlsLkhhc2hNYXAnIGNhbm5vdCBiZSBhcHBsaWVkIHRvICcoamF2YS5sYW5nLlN0cmluZywgUGFja2FnZSknIj4obmFtZSwgcGtnKTwvZXJyb3I+OworCSAgICByZXR1cm4gcGtnOworCX0KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIGEgUGFja2FnZSB0aGF0IGhhcyBiZWVuIGRlZmluZWQgYnkgdGhpcyBjbGFzcyBsb2FkZXIgb3IgYW55CisgICAgICogb2YgaXRzIGFuY2VzdG9ycy4KKyAgICAgKgorICAgICAqIEBwYXJhbSAgbmFtZSB0aGUgcGFja2FnZSBuYW1lCisgICAgICogQHJldHVybiB0aGUgUGFja2FnZSBjb3JyZXNwb25kaW5nIHRvIHRoZSBnaXZlbiBuYW1lLCBvciBudWxsIGlmIG5vdAorICAgICAqICAgICAgICAgZm91bmQKKyAgICAgKiBAc2luY2UgIDEuMgorICAgICAqLworICAgIHByb3RlY3RlZCA8ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAnUGFja2FnZSciPlBhY2thZ2U8L2Vycm9yPiBnZXRQYWNrYWdlKFN0cmluZyBuYW1lKSB7CisJc3luY2hyb25pemVkIChwYWNrYWdlcykgeworCSAgICA8ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAnUGFja2FnZSciPlBhY2thZ2U8L2Vycm9yPiBwa2cgPSAoPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ1BhY2thZ2UnIj5QYWNrYWdlPC9lcnJvcj4pcGFja2FnZXMuZ2V0KG5hbWUpOworCSAgICBpZiAocGtnID09IG51bGwpIHsKKwkJaWYgKHBhcmVudCAhPSBudWxsKSB7CisJCSAgICBwa2cgPSBwYXJlbnQuZ2V0UGFja2FnZShuYW1lKTsKKwkJfSBlbHNlIHsKKwkJICAgIHBrZyA9IDxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICdQYWNrYWdlJyI+UGFja2FnZTwvZXJyb3I+LmdldFN5c3RlbVBhY2thZ2UobmFtZSk7CisJCX0KKwkJaWYgKHBrZyAhPSBudWxsKSB7CisJCSAgICBwYWNrYWdlcy5wdXQ8ZXJyb3IgZGVzY3I9IidwdXQoamF2YS5sYW5nLk9iamVjdCwgamF2YS5sYW5nLk9iamVjdCknIGluICdqYXZhLnV0aWwuSGFzaE1hcCcgY2Fubm90IGJlIGFwcGxpZWQgdG8gJyhqYXZhLmxhbmcuU3RyaW5nLCBQYWNrYWdlKSciPihuYW1lLCBwa2cpPC9lcnJvcj47CisJCX0KKwkgICAgfQorCSAgICByZXR1cm4gcGtnOworCX0KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIGFsbCBvZiB0aGUgUGFja2FnZXMgZGVmaW5lZCBieSB0aGlzIGNsYXNzIGxvYWRlciBhbmQgaXRzCisgICAgICogYW5jZXN0b3JzLgorICAgICAqCisgICAgICogQHJldHVybiB0aGUgYXJyYXkgb2YgPGNvZGU+UGFja2FnZTwvY29kZT4gb2JqZWN0cyBkZWZpbmVkIGJ5IHRoaXMKKyAgICAgKiA8Y29kZT5DbGFzc0xvYWRlcjwvY29kZT4KKyAgICAgKiBAc2luY2UgMS4yCisgICAgICovCisgICAgcHJvdGVjdGVkIDxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICdQYWNrYWdlJyI+UGFja2FnZTwvZXJyb3I+W10gZ2V0UGFja2FnZXMoKSB7CisJTWFwIG1hcDsKKwlzeW5jaHJvbml6ZWQgKHBhY2thZ2VzKSB7CisJICAgIG1hcCA9IChNYXApcGFja2FnZXMuY2xvbmUoKTsKKwl9CisJPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ1BhY2thZ2UnIj5QYWNrYWdlPC9lcnJvcj5bXSBwa2dzOworCWlmIChwYXJlbnQgIT0gbnVsbCkgeworCSAgICBwa2dzID0gcGFyZW50LmdldFBhY2thZ2VzKCk7CisJfSBlbHNlIHsKKwkgICAgcGtncyA9IDxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICdQYWNrYWdlJyI+UGFja2FnZTwvZXJyb3I+LmdldFN5c3RlbVBhY2thZ2VzKCk7CisJfQorCWlmIChwa2dzICE9IG51bGwpIHsKKwkgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBwa2dzLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICAgICAgU3RyaW5nIHBrZ05hbWUgPSBwa2dzW2ldLjxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgbWV0aG9kICdnZXROYW1lKCknIj5nZXROYW1lPC9lcnJvcj4oKTsKKyAgICAgICAgICAgICAgICBpZiAobWFwLmdldChwa2dOYW1lKSA9PSBudWxsKSB7CisgICAgICAgICAgICAgICAgICAgIG1hcC5wdXQ8ZXJyb3IgZGVzY3I9IidwdXQoamF2YS5sYW5nLk9iamVjdCwgamF2YS5sYW5nLk9iamVjdCknIGluICdqYXZhLnV0aWwuTWFwJyBjYW5ub3QgYmUgYXBwbGllZCB0byAnKGphdmEubGFuZy5TdHJpbmcsIFBhY2thZ2UpJyI+KHBrZ05hbWUsIHBrZ3NbaV0pPC9lcnJvcj47CisgICAgICAgICAgICAgICAgfQorCSAgICB9CisJfQorCXJldHVybiAoPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ1BhY2thZ2UnIj5QYWNrYWdlPC9lcnJvcj5bXSltYXAudmFsdWVzKCkudG9BcnJheShuZXcgPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ1BhY2thZ2UnIj5QYWNrYWdlPC9lcnJvcj5bbWFwLnNpemUoKV0pOworICAgIH0KKworICAgIC8qKgorICAgICAqIFJldHVybnMgdGhlIGFic29sdXRlIHBhdGggbmFtZSBvZiBhIG5hdGl2ZSBsaWJyYXJ5LiBUaGUgVk0KKyAgICAgKiBpbnZva2VzIHRoaXMgbWV0aG9kIHRvIGxvY2F0ZSB0aGUgbmF0aXZlIGxpYnJhcmllcyB0aGF0IGJlbG9uZworICAgICAqIHRvIGNsYXNzZXMgbG9hZGVkIHdpdGggdGhpcyBjbGFzcyBsb2FkZXIuIElmIHRoaXMgbWV0aG9kIHJldHVybnMKKyAgICAgKiA8Y29kZT5udWxsPC9jb2RlPiwgdGhlIFZNIHNlYXJjaGVzIHRoZSBsaWJyYXJ5IGFsb25nIHRoZSBwYXRoCisgICAgICogc3BlY2lmaWVkIGFzIHRoZSA8Y29kZT5qYXZhLmxpYnJhcnkucGF0aDwvY29kZT4gcHJvcGVydHkuCisgICAgICoKKyAgICAgKiBAcGFyYW0gICAgICBsaWJuYW1lICAgdGhlIGxpYnJhcnkgbmFtZQorICAgICAqIEByZXR1cm4gICAgIHRoZSBhYnNvbHV0ZSBwYXRoIG9mIHRoZSBuYXRpdmUgbGlicmFyeQorICAgICAqIEBzZWUgICAgICAgIGphdmEubGFuZy5TeXN0ZW0jbG9hZExpYnJhcnkoamF2YS5sYW5nLlN0cmluZykKKyAgICAgKiBAc2VlICAgICAgICBqYXZhLmxhbmcuU3lzdGVtI21hcExpYnJhcnlOYW1lKGphdmEubGFuZy5TdHJpbmcpCisgICAgICogQHNpbmNlICAgICAgMS4yCisgICAgICovCisgICAgcHJvdGVjdGVkIFN0cmluZyBmaW5kTGlicmFyeShTdHJpbmcgbGlibmFtZSkgeworICAgICAgICByZXR1cm4gbnVsbDsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBUaGUgaW5uZXIgY2xhc3MgTmF0aXZlTGlicmFyeSBkZW5vdGVzIGEgbG9hZGVkIG5hdGl2ZSBsaWJyYXJ5CisgICAgICogaW5zdGFuY2UuIEV2ZXJ5IGNsYXNzbG9hZGVyIGNvbnRhaW5zIGEgdmVjdG9yIG9mIGxvYWRlZCBuYXRpdmUKKyAgICAgKiBsaWJyYXJpZXMgaW4gdGhlIHByaXZhdGUgZmllbGQgPGNvZGU+bmF0aXZlTGlicmFyaWVzPC9jb2RlPi4KKyAgICAgKiBUaGUgbmF0aXZlIGxpYnJhcmllcyBsb2FkZWQgaW50byB0aGUgc3lzdGVtIGFyZSBlbnRlcmVkIGludG8KKyAgICAgKiB0aGUgPGNvZGU+c3lzdGVtTmF0aXZlTGlicmFyaWVzPC9jb2RlPiB2ZWN0b3IuCisgICAgICoKKyAgICAgKiBFdmVyeSBuYXRpdmUgbGlicmFyeSByZXVxaXJlcyBhIHBhcnRpY3VsYXIgdmVyc2lvbiBvZiBKTkkuIFRoaXMKKyAgICAgKiBpcyBkZW5vdGVkIGJ5IHRoZSBwcml2YXRlIGpuaVZlcnNpb24gZmllbGQuIFRoaXMgZmllbGQgaXMgc2V0CisgICAgICogYnkgdGhlIFZNIHdoZW4gaXQgbG9hZHMgdGhlIGxpYnJhcnksIGFuZCB1c2VkIGJ5IHRoZSBWTSB0byBwYXNzCisgICAgICogdGhlIGNvcnJlY3QgdmVyc2lvbiBvZiBKTkkgdG8gdGhlIG5hdGl2ZSBtZXRob2RzLgorICAgICAqCisgICAgICogQHZlcnNpb24gMS4xNjIsIDAzLzE5LzAyCisgICAgICogQHNlZSAgICAgamF2YS5sYW5nLkNsYXNzTG9hZGVyCisgICAgICogQHNpbmNlICAgMS4yCisgICAgICovCisgICAgc3RhdGljIGNsYXNzIE5hdGl2ZUxpYnJhcnkgeworICAgICAgICAvKiBvcGFxdWUgaGFuZGxlIHRvIG5hdGl2ZSBsaWJyYXJ5LCB1c2VkIGluIG5hdGl2ZSBjb2RlLiAqLworICAgICAgICBsb25nIGhhbmRsZTsKKyAgICAgICAgLyogdGhlIHZlcnNpb24gb2YgSk5JIGVudmlyb25tZW50IHRoZSBuYXRpdmUgbGlicmFyeSByZXF1aXJlcy4gKi8KKyAgICAgICAgcHJpdmF0ZSBpbnQgam5pVmVyc2lvbjsKKyAgICAgICAgLyogdGhlIGNsYXNzIGZyb20gd2hpY2ggdGhlIGxpYnJhcnkgaXMgbG9hZGVkLCBhbHNvIGluZGljYXRlcworCSAgIHRoZSBsb2FkZXIgdGhpcyBuYXRpdmUgbGlicmFyeSBiZWxvbmdzLiAqLworICAgICAgICBwcml2YXRlIENsYXNzIGZyb21DbGFzczsKKyAgICAgICAgLyogdGhlIGNhbm9uaWNhbGl6ZWQgbmFtZSBvZiB0aGUgbmF0aXZlIGxpYnJhcnkuICovCisgICAgICAgIFN0cmluZyBuYW1lOworCisgICAgICAgIG5hdGl2ZSB2b2lkIGxvYWQoU3RyaW5nIG5hbWUpOworICAgICAgICBuYXRpdmUgbG9uZyBmaW5kKFN0cmluZyBuYW1lKTsKKyAgICAgICAgbmF0aXZlIHZvaWQgdW5sb2FkKCk7CisKKyAgICAgICAgcHVibGljIE5hdGl2ZUxpYnJhcnkoQ2xhc3MgZnJvbUNsYXNzLCBTdHJpbmcgbmFtZSkgeworICAgICAgICAgICAgdGhpcy5uYW1lID0gbmFtZTsKKwkgICAgdGhpcy5mcm9tQ2xhc3MgPSBmcm9tQ2xhc3M7CisJfQorCisgICAgICAgIHByb3RlY3RlZCB2b2lkIGZpbmFsaXplKCkgeworCSAgICBzeW5jaHJvbml6ZWQgKGxvYWRlZExpYnJhcnlOYW1lcykgeworCSAgICAgICAgaWYgKGZyb21DbGFzcy5nZXRDbGFzc0xvYWRlcigpICE9IG51bGwgJiYgaGFuZGxlICE9IDApIHsKKwkJICAgIC8qIHJlbW92ZSB0aGUgbmF0aXZlIGxpYnJhcnkgbmFtZSAqLworCQkgICAgaW50IHNpemUgPSBsb2FkZWRMaWJyYXJ5TmFtZXMuPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBtZXRob2QgJ3NpemUoKSciPnNpemU8L2Vycm9yPigpOworCQkgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzaXplOyBpKyspIHsKKwkJICAgICAgICBpZiAobmFtZS5lcXVhbHMobG9hZGVkTGlicmFyeU5hbWVzLjxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgbWV0aG9kICdlbGVtZW50QXQoaW50KSciPmVsZW1lbnRBdDwvZXJyb3I+KGkpKSkgeworCQkJICAgIGxvYWRlZExpYnJhcnlOYW1lcy48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIG1ldGhvZCAncmVtb3ZlRWxlbWVudEF0KGludCknIj5yZW1vdmVFbGVtZW50QXQ8L2Vycm9yPihpKTsKKwkJCSAgICBicmVhazsKKwkJCX0KKwkJICAgIH0KKwkJICAgIC8qIHVubG9hZCB0aGUgbGlicmFyeS4gKi8KKwkJICAgIENsYXNzTG9hZGVyLm5hdGl2ZUxpYnJhcnlDb250ZXh0LjxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgbWV0aG9kICdwdXNoKENsYXNzTG9hZGVyLk5hdGl2ZUxpYnJhcnkpJyI+cHVzaDwvZXJyb3I+KHRoaXMpOworCQkgICAgdHJ5IHsKKwkJCXVubG9hZCgpOworCQkgICAgfSBmaW5hbGx5IHsKKwkJICAgICAgICBDbGFzc0xvYWRlci5uYXRpdmVMaWJyYXJ5Q29udGV4dC48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIG1ldGhvZCAncG9wKCknIj5wb3A8L2Vycm9yPigpOworCQkgICAgfQorCQl9CisJICAgIH0KKwl9CisgICAgICAgIC8qIENhbGxlZCBpbiB0aGUgVk0gdG8gZGV0ZXJtaW5lIHRoZSBjb250ZXh0IGNsYXNzIGluCisJICAgSk5JX0xvYWQvSk5JX1VubG9hZCAqLworICAgICAgICBzdGF0aWMgQ2xhc3MgZ2V0RnJvbUNsYXNzKCkgeworICAgICAgICAgICAgcmV0dXJuICgoTmF0aXZlTGlicmFyeSkKKwkJICAgIChDbGFzc0xvYWRlci5uYXRpdmVMaWJyYXJ5Q29udGV4dC48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIG1ldGhvZCAncGVlaygpJyI+cGVlazwvZXJyb3I+KCkpKS5mcm9tQ2xhc3M7CisJfQorICAgIH0KKworICAgIC8qIHRoZSAiZGVmYXVsdCIgZG9tYWluLiBTZXQgYXMgdGhlIGRlZmF1bHQgUHJvdGVjdGlvbkRvbWFpbgorICAgICAqIG9uIG5ld2x5IGNyZWF0ZWQgY2xhc3NzZXMuCisgICAgICovCisgICAgcHJpdmF0ZSA8ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAnUHJvdGVjdGlvbkRvbWFpbiciPlByb3RlY3Rpb25Eb21haW48L2Vycm9yPiBkZWZhdWx0RG9tYWluID0gbnVsbDsKKworICAgIC8qCisgICAgICogcmV0dXJucyAoYW5kIGluaXRpYWxpemVzKSB0aGUgZGVmYXVsdCBkb21haW4uCisgICAgICovCisKKyAgICBwcml2YXRlIHN5bmNocm9uaXplZCA8ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAnUHJvdGVjdGlvbkRvbWFpbiciPlByb3RlY3Rpb25Eb21haW48L2Vycm9yPiBnZXREZWZhdWx0RG9tYWluKCkgeworCWlmIChkZWZhdWx0RG9tYWluID09IG51bGwpIHsKKwkgICAgPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ0NvZGVTb3VyY2UnIj5Db2RlU291cmNlPC9lcnJvcj4gY3MgPSBuZXcgPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ0NvZGVTb3VyY2UnIj5Db2RlU291cmNlPC9lcnJvcj4obnVsbCwgbnVsbCk7CisJICAgIGRlZmF1bHREb21haW4gPSBuZXcgPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ1Byb3RlY3Rpb25Eb21haW4nIj5Qcm90ZWN0aW9uRG9tYWluPC9lcnJvcj4oY3MsIG51bGwsIHRoaXMsIG51bGwpOworCX0KKwlyZXR1cm4gZGVmYXVsdERvbWFpbjsKKyAgICB9CisKKyAgICAvKiBBbGwgbmF0aXZlIGxpYnJhcnkgbmFtZXMgd2UndmUgbG9hZGVkLiAqLworICAgIHByaXZhdGUgc3RhdGljIDxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICdWZWN0b3InIj5WZWN0b3I8L2Vycm9yPiBsb2FkZWRMaWJyYXJ5TmFtZXMgPSBuZXcgPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ1ZlY3RvciciPlZlY3RvcjwvZXJyb3I+KCk7CisgICAgLyogTmF0aXZlIGxpYnJhcmllcyBiZWxvbmdpbmcgdG8gc3lzdGVtIGNsYXNzZXMuICovCisgICAgcHJpdmF0ZSBzdGF0aWMgPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ1ZlY3RvciciPlZlY3RvcjwvZXJyb3I+IHN5c3RlbU5hdGl2ZUxpYnJhcmllcyA9IG5ldyA8ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAnVmVjdG9yJyI+VmVjdG9yPC9lcnJvcj4oKTsKKyAgICAvKiBOYXRpdmUgbGlicmFyaWVzIGFzc29jaWF0ZWQgd2l0aCB0aGUgY2xhc3MgbG9hZGVyLiAqLworICAgIHByaXZhdGUgPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ1ZlY3RvciciPlZlY3RvcjwvZXJyb3I+IG5hdGl2ZUxpYnJhcmllcyA9IG5ldyA8ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAnVmVjdG9yJyI+VmVjdG9yPC9lcnJvcj4oKTsKKworICAgIC8qIG5hdGl2ZSBsaWJyYXJpZXMgYmVpbmcgbG9hZGVkL3VubG9hZGVkLiAqLworICAgIHByaXZhdGUgc3RhdGljIDxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICdTdGFjayciPlN0YWNrPC9lcnJvcj4gbmF0aXZlTGlicmFyeUNvbnRleHQgPSBuZXcgPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ1N0YWNrJyI+U3RhY2s8L2Vycm9yPigpOworCisgICAgLyogVGhlIHBhdGhzIHNlYXJjaGVkIGZvciBsaWJyYXJpZXMgKi8KKyAgICBzdGF0aWMgcHJpdmF0ZSBTdHJpbmcgdXNyX3BhdGhzW107CisgICAgc3RhdGljIHByaXZhdGUgU3RyaW5nIHN5c19wYXRoc1tdOworCisgICAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nW10gaW5pdGlhbGl6ZVBhdGgoU3RyaW5nIHByb3BuYW1lKSB7CisgICAgICAgIFN0cmluZyBsZHBhdGggPSBTeXN0ZW0uZ2V0UHJvcGVydHkocHJvcG5hbWUsICIiKTsKKwlTdHJpbmcgcHMgPSBGaWxlLnBhdGhTZXBhcmF0b3I7CisJaW50IGxkbGVuID0gbGRwYXRoLmxlbmd0aCgpOworCWludCBpLCBqLCBuOworCS8vIENvdW50IHRoZSBzZXBhcmF0b3JzIGluIHRoZSBwYXRoCisJaSA9IGxkcGF0aC5pbmRleE9mKHBzKTsKKwluID0gMDsKKwl3aGlsZSAoaSA+PSAwKSB7CisJICAgIG4rKzsKKwkgICAgaSA9IGxkcGF0aC5pbmRleE9mKHBzLCBpKzEpOworCX0KKworCS8vIGFsbG9jYXRlIHRoZSBhcnJheSBvZiBwYXRocyAtIG4gOidzID0gbiArIDEgcGF0aCBlbGVtZW50cworCVN0cmluZ1tdIHBhdGhzID0gbmV3IFN0cmluZ1tuICsgMV07CisKKwkvLyBGaWxsIHRoZSBhcnJheSB3aXRoIHBhdGhzIGZyb20gdGhlIGxkcGF0aAorCW4gPSBpID0gMDsKKwlqID0gbGRwYXRoLmluZGV4T2YocHMpOworCXdoaWxlIChqID49IDApIHsKKwkgICAgaWYgKGogLSBpID4gMCkgeworCSAgICAgICAgcGF0aHNbbisrXSA9IGxkcGF0aC5zdWJzdHJpbmcoaSwgaik7CisJICAgIH0gZWxzZSBpZiAoaiAtIGkgPT0gMCkgeworCSAgICAgICAgcGF0aHNbbisrXSA9ICIuIjsKKwkgICAgfQorCSAgICBpID0gaiArIDE7CisJICAgIGogPSBsZHBhdGguaW5kZXhPZihwcywgaSk7CisJfQorCXBhdGhzW25dID0gbGRwYXRoLnN1YnN0cmluZyhpLCBsZGxlbik7CisJcmV0dXJuIHBhdGhzOworICAgIH0KKworCisgICAgLyogQ2FsbGVkIGluIHRoZSBqYXZhLmxhbmcuUnVudGltZSBjbGFzcyB0byBpbXBsZW1lbnQgbG9hZAorICAgICAqIGFuZCBsb2FkTGlicmFyeS4KKyAgICAgKi8KKyAgICBzdGF0aWMgdm9pZCBsb2FkTGlicmFyeShDbGFzcyBmcm9tQ2xhc3MsIFN0cmluZyBuYW1lLAorCQkJICAgIGJvb2xlYW4gaXNBYnNvbHV0ZSkgeworICAgICAgICA8ZXJyb3IgZGVzY3I9IkluY29tcGF0aWJsZSB0eXBlcy4gRm91bmQ6ICdqYXZhLmxhbmcuQ2xhc3NMb2FkZXInLCByZXF1aXJlZDogJ0NsYXNzTG9hZGVyJyI+Q2xhc3NMb2FkZXIgbG9hZGVyID0KKwkgICAgKGZyb21DbGFzcyA9PSBudWxsKSA/IG51bGwgOiBmcm9tQ2xhc3MuZ2V0Q2xhc3NMb2FkZXIoKTs8L2Vycm9yPgorICAgICAgICBpZiAoc3lzX3BhdGhzID09IG51bGwpIHsKKwkgICAgdXNyX3BhdGhzID0gaW5pdGlhbGl6ZVBhdGgoImphdmEubGlicmFyeS5wYXRoIik7CisJICAgIHN5c19wYXRocyA9IGluaXRpYWxpemVQYXRoKCJzdW4uYm9vdC5saWJyYXJ5LnBhdGgiKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoaXNBYnNvbHV0ZSkgeworCSAgICBpZiAobG9hZExpYnJhcnkwKGZyb21DbGFzcywgbmV3IEZpbGUobmFtZSkpKSB7CisJICAgICAgICByZXR1cm47CisJICAgIH0KKwkgICAgdGhyb3cgbmV3IDxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICdVbnNhdGlzZmllZExpbmtFcnJvciciPlVuc2F0aXNmaWVkTGlua0Vycm9yPC9lcnJvcj4oIkNhbid0IGxvYWQgbGlicmFyeTogIiArIG5hbWUpOworCX0KKwlpZiAobG9hZGVyICE9IG51bGwpIHsKKwkgICAgU3RyaW5nIGxpYmZpbGVuYW1lID0gbG9hZGVyLmZpbmRMaWJyYXJ5KG5hbWUpOworCSAgICBpZiAobGliZmlsZW5hbWUgIT0gbnVsbCkgeworCSAgICAgICAgRmlsZSBsaWJmaWxlID0gbmV3IEZpbGUobGliZmlsZW5hbWUpOworCSAgICAgICAgaWYgKCFsaWJmaWxlLmlzQWJzb2x1dGUoKSkgeworCQkgICAgdGhyb3cgbmV3IDxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICdVbnNhdGlzZmllZExpbmtFcnJvciciPlVuc2F0aXNmaWVkTGlua0Vycm9yPC9lcnJvcj4oCisgICAgIkNsYXNzTG9hZGVyLmZpbmRMaWJyYXJ5IGZhaWxlZCB0byByZXR1cm4gYW4gYWJzb2x1dGUgcGF0aDogIiArIGxpYmZpbGVuYW1lKTsKKwkJfQorCQlpZiAobG9hZExpYnJhcnkwKGZyb21DbGFzcywgbGliZmlsZSkpIHsKKwkJICAgIHJldHVybjsKKwkJfQorCQl0aHJvdyBuZXcgPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ1Vuc2F0aXNmaWVkTGlua0Vycm9yJyI+VW5zYXRpc2ZpZWRMaW5rRXJyb3I8L2Vycm9yPiAoIkNhbid0IGxvYWQgIiArIGxpYmZpbGVuYW1lKTsKKwkgICAgfQorCX0KKwlmb3IgKGludCBpID0gMCA7IGkgPCBzeXNfcGF0aHMubGVuZ3RoIDsgaSsrKSB7CisJICAgIEZpbGUgbGliZmlsZSA9IG5ldyBGaWxlKHN5c19wYXRoc1tpXSwgU3lzdGVtLm1hcExpYnJhcnlOYW1lKG5hbWUpKTsKKwkgICAgaWYgKGxvYWRMaWJyYXJ5MChmcm9tQ2xhc3MsIGxpYmZpbGUpKSB7CisJICAgICAgICByZXR1cm47CisJICAgIH0KKwl9CisJaWYgKGxvYWRlciAhPSBudWxsKSB7CisJICAgIGZvciAoaW50IGkgPSAwIDsgaSA8IHVzcl9wYXRocy5sZW5ndGggOyBpKyspIHsKKwkgICAgICAgIEZpbGUgbGliZmlsZSA9IG5ldyBGaWxlKHVzcl9wYXRoc1tpXSwKKwkJCQkJU3lzdGVtLm1hcExpYnJhcnlOYW1lKG5hbWUpKTsKKwkJaWYgKGxvYWRMaWJyYXJ5MChmcm9tQ2xhc3MsIGxpYmZpbGUpKSB7CisJCSAgICByZXR1cm47CisJCX0KKwkgICAgfQorCX0KKwkvLyBPb3BzLCBpdCBmYWlsZWQKKyAgICAgICAgdGhyb3cgbmV3IDxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICdVbnNhdGlzZmllZExpbmtFcnJvciciPlVuc2F0aXNmaWVkTGlua0Vycm9yPC9lcnJvcj4oIm5vICIgKyBuYW1lICsgIiBpbiBqYXZhLmxpYnJhcnkucGF0aCIpOworICAgIH0KKworICAgIHByaXZhdGUgc3RhdGljIGJvb2xlYW4gbG9hZExpYnJhcnkwKENsYXNzIGZyb21DbGFzcywgZmluYWwgRmlsZSBmaWxlKSB7CisJQm9vbGVhbiBleGlzdHMgPSAoQm9vbGVhbikKKwkgICAgPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ0FjY2Vzc0NvbnRyb2xsZXInIj5BY2Nlc3NDb250cm9sbGVyPC9lcnJvcj4uZG9Qcml2aWxlZ2VkKG5ldyA8ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAnUHJpdmlsZWdlZEFjdGlvbiciPlByaXZpbGVnZWRBY3Rpb248L2Vycm9yPigpIHsKKwkJcHVibGljIE9iamVjdCBydW4oKSB7CisJCSAgICByZXR1cm4gbmV3IEJvb2xlYW4oZmlsZS5leGlzdHMoKSk7CisJCX0KKwkgICAgfSk7CisJaWYgKCFleGlzdHMuYm9vbGVhblZhbHVlKCkpIHsKKwkgICAgcmV0dXJuIGZhbHNlOworCX0KKyAgICAgICAgU3RyaW5nIG5hbWU7CisJdHJ5IHsKKwkgICAgbmFtZSA9IGZpbGUuZ2V0Q2Fub25pY2FsUGF0aCgpOworCX0gY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKwkgICAgcmV0dXJuIGZhbHNlOworCX0KKyAgICAgICAgPGVycm9yIGRlc2NyPSJJbmNvbXBhdGlibGUgdHlwZXMuIEZvdW5kOiAnamF2YS5sYW5nLkNsYXNzTG9hZGVyJywgcmVxdWlyZWQ6ICdDbGFzc0xvYWRlciciPkNsYXNzTG9hZGVyIGxvYWRlciA9CisJICAgIChmcm9tQ2xhc3MgPT0gbnVsbCkgPyBudWxsIDogZnJvbUNsYXNzLmdldENsYXNzTG9hZGVyKCk7PC9lcnJvcj4KKyAgICAgICAgPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ1ZlY3RvciciPlZlY3RvcjwvZXJyb3I+IGxpYnMgPQorCSAgICBsb2FkZXIgIT0gbnVsbCA/IGxvYWRlci5uYXRpdmVMaWJyYXJpZXMgOiBzeXN0ZW1OYXRpdmVMaWJyYXJpZXM7CisJc3luY2hyb25pemVkIChsaWJzKSB7CisJICAgIGludCBzaXplID0gbGlicy48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIG1ldGhvZCAnc2l6ZSgpJyI+c2l6ZTwvZXJyb3I+KCk7CisJICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7CisJICAgICAgICBOYXRpdmVMaWJyYXJ5IGxpYiA9IChOYXRpdmVMaWJyYXJ5KWxpYnMuPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBtZXRob2QgJ2VsZW1lbnRBdChpbnQpJyI+ZWxlbWVudEF0PC9lcnJvcj4oaSk7CisJCWlmIChuYW1lLmVxdWFscyhsaWIubmFtZSkpIHsKKwkJICAgIHJldHVybiB0cnVlOworCQl9CisJICAgIH0KKworCSAgICBzeW5jaHJvbml6ZWQgKGxvYWRlZExpYnJhcnlOYW1lcykgeworCSAgICAgICAgaWYgKGxvYWRlZExpYnJhcnlOYW1lcy48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIG1ldGhvZCAnY29udGFpbnMoamF2YS5sYW5nLlN0cmluZyknIj5jb250YWluczwvZXJyb3I+KG5hbWUpKSB7CisJCSAgICB0aHJvdyBuZXcgPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ1Vuc2F0aXNmaWVkTGlua0Vycm9yJyI+VW5zYXRpc2ZpZWRMaW5rRXJyb3I8L2Vycm9yPgorCQkgICAgICAgICgiTmF0aXZlIExpYnJhcnkgIiArCisJCQkgbmFtZSArCisJCQkgIiBhbHJlYWR5IGxvYWRlZCBpbiBhbm90aGVyIGNsYXNzbG9hZGVyIik7CisJCX0KKwkJLyogSWYgdGhlIGxpYnJhcnkgaXMgYmVpbmcgbG9hZGVkIChtdXN0IGJlIGJ5CisJCSAqIHRoZSBzYW1lIHRocmVhZCwgYmVjYXVzZSBSdW50aW1lLmxvYWQgYW5kCisJCSAqIFJ1bnRpbWUubG9hZExpYnJhcnkgYXJlIHN5bmNocm9ub3VzKS4gVGhlCisJCSAqIHJlYXNvbiBpcyBjYW4gb2NjdXIgaXMgdGhhdCB0aGUgSk5JX09uTG9hZAorCQkgKiBmdW5jdGlvbiBjYW4gY2F1c2UgYW5vdGhlciBsb2FkTGlicmFyeSBjYWxsLgorCQkgKgorCQkgKiBUaHVzIHdlIGNhbiB1c2UgYSBzdGF0aWMgc3RhY2sgdG8gaG9sZCB0aGUgbGlzdAorCQkgKiBvZiBsaWJyYXJpZXMgd2UgYXJlIGxvYWRpbmcuCisJCSAqCisJCSAqIElmIHRoZXJlIGlzIGEgcGVuZGluZyBsb2FkIG9wZXJhdGlvbiBmb3IgdGhlCisJCSAqIGxpYnJhcnksIHdlIGltbWVkaWF0ZWx5IHJldHVybiBzdWNjZXNzOyBvdGhlcndpc2UsCisJCSAqIHdlIHJhaXNlIFVuc2F0aXNmaWVkTGlua0Vycm9yLgorCQkgKi8KKwkJaW50IG4gPSBuYXRpdmVMaWJyYXJ5Q29udGV4dC48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIG1ldGhvZCAnc2l6ZSgpJyI+c2l6ZTwvZXJyb3I+KCk7CisJCWZvciAoaW50IGkgPSAwOyBpIDwgbjsgaSsrKSB7CisJCSAgICBOYXRpdmVMaWJyYXJ5IGxpYiA9IChOYXRpdmVMaWJyYXJ5KQorCQkgICAgICAgIG5hdGl2ZUxpYnJhcnlDb250ZXh0LjxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgbWV0aG9kICdlbGVtZW50QXQoaW50KSciPmVsZW1lbnRBdDwvZXJyb3I+KGkpOworCQkgICAgaWYgKG5hbWUuZXF1YWxzKGxpYi5uYW1lKSkgeworCQkgICAgICAgIGlmICg8ZXJyb3IgZGVzY3I9Ik9wZXJhdG9yICc9PScgY2Fubm90IGJlIGFwcGxpZWQgdG8gJ0NsYXNzTG9hZGVyJywgJ2phdmEubGFuZy5DbGFzc0xvYWRlciciPmxvYWRlciA9PSBsaWIuZnJvbUNsYXNzLmdldENsYXNzTG9hZGVyKCk8L2Vycm9yPikgeworCQkJICAgIHJldHVybiB0cnVlOworCQkJfSBlbHNlIHsKKwkJCSAgICB0aHJvdyBuZXcgPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ1Vuc2F0aXNmaWVkTGlua0Vycm9yJyI+VW5zYXRpc2ZpZWRMaW5rRXJyb3I8L2Vycm9yPgorCQkJICAgICAgICAoIk5hdGl2ZSBMaWJyYXJ5ICIgKworCQkJCSBuYW1lICsKKwkJCQkgIiBpcyBiZWluZyBsb2FkZWQgaW4gYW5vdGhlciBjbGFzc2xvYWRlciIpOworCQkJfQorCQkgICAgfQorCQl9CisJCU5hdGl2ZUxpYnJhcnkgbGliID0gbmV3IE5hdGl2ZUxpYnJhcnkoZnJvbUNsYXNzLCBuYW1lKTsKKwkJbmF0aXZlTGlicmFyeUNvbnRleHQuPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBtZXRob2QgJ3B1c2goQ2xhc3NMb2FkZXIuTmF0aXZlTGlicmFyeSknIj5wdXNoPC9lcnJvcj4obGliKTsKKwkJdHJ5IHsKKwkJICAgIGxpYi5sb2FkKG5hbWUpOworCQl9IGZpbmFsbHkgeworCQkgICAgbmF0aXZlTGlicmFyeUNvbnRleHQuPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBtZXRob2QgJ3BvcCgpJyI+cG9wPC9lcnJvcj4oKTsKKwkJfQorCQlpZiAobGliLmhhbmRsZSAhPSAwKSB7CisJCSAgICBsb2FkZWRMaWJyYXJ5TmFtZXMuPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBtZXRob2QgJ2FkZEVsZW1lbnQoamF2YS5sYW5nLlN0cmluZyknIj5hZGRFbGVtZW50PC9lcnJvcj4obmFtZSk7CisJCSAgICBsaWJzLjxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgbWV0aG9kICdhZGRFbGVtZW50KENsYXNzTG9hZGVyLk5hdGl2ZUxpYnJhcnkpJyI+YWRkRWxlbWVudDwvZXJyb3I+KGxpYik7CisJCSAgICByZXR1cm4gdHJ1ZTsKKwkJfQorCQlyZXR1cm4gZmFsc2U7CisJICAgIH0KKwl9CisgICAgfQorCisgICAgLyogQ2FsbGVkIGluIHRoZSBWTSBjbGFzcyBsaW5raW5nIGNvZGUuICovCisgICAgc3RhdGljIGxvbmcgZmluZE5hdGl2ZShDbGFzc0xvYWRlciBsb2FkZXIsIFN0cmluZyBuYW1lKSB7CisgICAgICAgIDxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICdWZWN0b3InIj5WZWN0b3I8L2Vycm9yPiBsaWJzID0KKwkgICAgbG9hZGVyICE9IG51bGwgPyBsb2FkZXIubmF0aXZlTGlicmFyaWVzIDogc3lzdGVtTmF0aXZlTGlicmFyaWVzOworCXN5bmNocm9uaXplZCAobGlicykgeworCSAgICBpbnQgc2l6ZSA9IGxpYnMuPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBtZXRob2QgJ3NpemUoKSciPnNpemU8L2Vycm9yPigpOworCSAgICBmb3IgKGludCBpID0gMDsgaSA8IHNpemU7IGkrKykgeworCSAgICAgICAgTmF0aXZlTGlicmFyeSBsaWIgPSAoTmF0aXZlTGlicmFyeSlsaWJzLjxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgbWV0aG9kICdlbGVtZW50QXQoaW50KSciPmVsZW1lbnRBdDwvZXJyb3I+KGkpOworCQlsb25nIGVudHJ5ID0gbGliLmZpbmQobmFtZSk7CisJCWlmIChlbnRyeSAhPSAwKQorCQkgICAgcmV0dXJuIGVudHJ5OworCSAgICB9CisJfQorCXJldHVybiAwOworICAgIH0KKworICAgIC8qCisgICAgICogVGhlIGRlZmF1bHQgdG9nZ2xlIGZvciBhc3NlcnRpb24gY2hlY2tpbmcuCisgICAgICovCisgICAgcHJpdmF0ZSBib29sZWFuIGRlZmF1bHRBc3NlcnRpb25TdGF0dXMgPSBmYWxzZTsKKworICAgIC8qCisgICAgICogTWFwcyBTdHJpbmcgcGFja2FnZU5hbWUgdG8gQm9vbGVhbiBwYWNrYWdlIGRlZmF1bHQgYXNzZXJ0aW9uIHN0YXR1cworICAgICAqIE5vdGUgdGhhdCB0aGUgZGVmYXVsdCBwYWNrYWdlIGlzIHBsYWNlZCB1bmRlciBhIG51bGwgbWFwIGtleS4KKyAgICAgKiBJZiB0aGlzIGZpZWxkIGlzIG51bGwgdGhlbiB3ZSBhcmUgZGVsZWdhdGluZyBhc3NlcnRpb24gc3RhdHVzIHF1ZXJpZXMKKyAgICAgKiB0byB0aGUgVk0sIGkuZS4sIG5vbmUgb2YgdGhpcyBDbGFzc0xvYWRlcidzIGFzc2VydGlvbiBzdGF0dXMKKyAgICAgKiBtb2RpZmljYXRpb24gbWV0aG9kcyBoYXZlIGJlZW4gY2FsbGVkLgorICAgICAqLworICAgIHByaXZhdGUgTWFwIHBhY2thZ2VBc3NlcnRpb25TdGF0dXMgPSBudWxsOworCisgICAgLyoKKyAgICAgKiBNYXBzIFN0cmluZyBmdWxseVF1YWxpZmllZENsYXNzTmFtZSB0byBCb29sZWFuIGFzc2VydGlvblN0YXR1cworICAgICAqIElmIHRoaXMgZmllbGQgaXMgbnVsbCB0aGVuIHdlIGFyZSBkZWxlZ2F0aW5nIGFzc2VydGlvbiBzdGF0dXMgcXVlcmllcworICAgICAqIHRvIHRoZSBWTSwgaS5lLiwgbm9uZSBvZiB0aGlzIENsYXNzTG9hZGVyJ3MgYXNzZXJ0aW9uIHN0YXR1cworICAgICAqIG1vZGlmaWNhdGlvbiBtZXRob2RzIGhhdmUgYmVlbiBjYWxsZWQuCisgICAgICovCisgICAgTWFwIGNsYXNzQXNzZXJ0aW9uU3RhdHVzID0gbnVsbDsKKworICAgIC8qKgorICAgICAqIFNldHMgdGhlIGRlZmF1bHQgYXNzZXJ0aW9uIHN0YXR1cyBmb3IgdGhpcyBjbGFzcyBsb2FkZXIuICBUaGlzIHNldHRpbmcKKyAgICAgKiBkZXRlcm1pbmVzIHdoZXRoZXIgY2xhc3NlcyBsb2FkZWQgYnkgdGhpcyBjbGFzcyBsb2FkZXIgYW5kIGluaXRpYWxpemVkCisgICAgICogaW4gdGhlIGZ1dHVyZSB3aWxsIGhhdmUgYXNzZXJ0aW9ucyBlbmFibGVkIG9yIGRpc2FibGVkIGJ5IGRlZmF1bHQuCisgICAgICogVGhpcyBzZXR0aW5nIG1heSBiZSBvdmVycmlkZGVuIG9uIGEgcGVyLXBhY2thZ2Ugb3IgcGVyLWNsYXNzIGJhc2lzIGJ5CisgICAgICogaW52b2tpbmcge0BsaW5rICNzZXRQYWNrYWdlQXNzZXJ0aW9uU3RhdHVzKFN0cmluZyxib29sZWFuKX0gb3Ige0BsaW5rCisgICAgICogI3NldENsYXNzQXNzZXJ0aW9uU3RhdHVzKFN0cmluZyxib29sZWFuKX0uCisgICAgICoKKyAgICAgKiBAcGFyYW0gZW5hYmxlZCA8dHQ+dHJ1ZTwvdHQ+IGlmIGNsYXNzZXMgbG9hZGVkIGJ5IHRoaXMgY2xhc3MgbG9hZGVyCisgICAgICogICAgICAgIHdpbGwgaGVuY2Vmb3J0aCBoYXZlIGFzc2VydGlvbnMgZW5hYmxlZCBieSBkZWZhdWx0LAorICAgICAqICAgICAgICA8dHQ+ZmFsc2U8L3R0PiBpZiB0aGV5IHdpbGwgaGF2ZSBhc3NlcnRpb25zIGRpc2FibGVkIGJ5IGRlZmF1bHQuCisgICAgICogQHNpbmNlIDEuNAorICAgICAqLworICAgIHB1YmxpYyBzeW5jaHJvbml6ZWQgdm9pZCBzZXREZWZhdWx0QXNzZXJ0aW9uU3RhdHVzKGJvb2xlYW4gZW5hYmxlZCkgeworICAgICAgICBpZiAoY2xhc3NBc3NlcnRpb25TdGF0dXMgPT0gbnVsbCkKKyAgICAgICAgICAgIGluaXRpYWxpemVKYXZhQXNzZXJ0aW9uTWFwcygpOworCisgICAgICAgIGRlZmF1bHRBc3NlcnRpb25TdGF0dXMgPSBlbmFibGVkOworICAgIH0KKworICAgIC8qKgorICAgICAqIFNldHMgdGhlIHBhY2thZ2UgZGVmYXVsdCBhc3NlcnRpb24gc3RhdHVzIGZvciB0aGUgbmFtZWQKKyAgICAgKiBwYWNrYWdlLiAgVGhlIHBhY2thZ2UgZGVmYXVsdCBhc3NlcnRpb24gc3RhdHVzIGRldGVybWluZXMgdGhlCisgICAgICogYXNzZXJ0aW9uIHN0YXR1cyBmb3IgY2xhc3NlcyBpbml0aWFsaXplZCBpbiB0aGUgZnV0dXJlIHRoYXQgYmVsb25nCisgICAgICogdG8gdGhlIG5hbWVkIHBhY2thZ2Ugb3IgYW55IG9mIGl0cyAic3VicGFja2FnZXMuIgorICAgICAqIDxwPgorICAgICAqIEEgc3VicGFja2FnZSBvZiBhIHBhY2thZ2UgbmFtZWQgcCBpcyBhbnkgcGFja2FnZSB3aG9zZSBuYW1lCisgICAgICogYmVnaW5zIHdpdGggInAuIiAuICBGb3IgZXhhbXBsZSwgPHR0PmphdmF4LnN3aW5nLnRleHQ8L3R0PiBpcworICAgICAqIGEgc3VicGFja2FnZSBvZiA8dHQ+amF2YXguc3dpbmc8L3R0PiwgYW5kIGJvdGggPHR0PmphdmEudXRpbDwvdHQ+CisgICAgICogYW5kIDx0dD5qYXZhLmxhbmcucmVmbGVjdDwvdHQ+IGFyZSBzdWJwYWNrYWdlcyBvZiA8dHQ+amF2YTwvdHQ+LgorICAgICAqIDxwPgorICAgICAqIEluIHRoZSBldmVudCB0aGF0IG11bHRpcGxlIHBhY2thZ2UgZGVmYXVsdHMgYXBwbHkgdG8gYSBnaXZlbgorICAgICAqIGNsYXNzLCB0aGUgcGFja2FnZSBkZWZhdWx0IHBlcnRhaW5pbmcgdG8gdGhlIG1vc3Qgc3BlY2lmaWMgcGFja2FnZQorICAgICAqIHRha2VzIHByZWNlZGVuY2Ugb3ZlciB0aGUgb3RoZXJzLiAgRm9yIGV4YW1wbGUsIGlmCisgICAgICogPHR0PmphdmF4Lmxhbmc8L3R0PiBhbmQgPHR0PmphdmF4LmxhbmcucmVmbGVjdDwvdHQ+IGJvdGggaGF2ZQorICAgICAqIHBhY2thZ2UgZGVmYXVsdHMgYXNzb2NpYXRlZCB3aXRoIHRoZW0sIHRoZSBsYXR0ZXIgcGFja2FnZQorICAgICAqIGRlZmF1bHQgYXBwbGllcyB0byBjbGFzc2VzIGluIDx0dD5qYXZheC5sYW5nLnJlZmxlY3Q8L3R0Pi4KKyAgICAgKiA8cD4KKyAgICAgKiBQYWNrYWdlIGRlZmF1bHRzIHRha2UgcHJlY2VkZW5jZSBvdmVyIHRoZSBjbGFzcyBsb2FkZXIncyBkZWZhdWx0CisgICAgICogYXNzZXJ0aW9uIHN0YXR1cywgYW5kIG1heSBiZSBvdmVycmlkZGVuIG9uIGEgcGVyLWNsYXNzIGJhc2lzIGJ5CisgICAgICogaW52b2tpbmcge0BsaW5rICNzZXRDbGFzc0Fzc2VydGlvblN0YXR1cyhTdHJpbmcsYm9vbGVhbil9LgorICAgICAqCisgICAgICogQHBhcmFtIHBhY2thZ2VOYW1lIHRoZSBuYW1lIG9mIHRoZSBwYWNrYWdlIHdob3NlIHBhY2thZ2UgZGVmYXVsdAorICAgICAqICAgICAgICBhc3NlcnRpb24gc3RhdHVzIGlzIHRvIGJlIHNldC4gQSBudWxsIHZhbHVlCisgICAgICogICAgICAgIGluZGljYXRlcyB0aGUgdW5uYW1lZCBwYWNrYWdlIHRoYXQgaXMgImN1cnJlbnQiCisgICAgICogICAgICAgIChKTFMgNy40LjIpLgorICAgICAqIEBwYXJhbSBlbmFibGVkIDx0dD50cnVlPC90dD4gaWYgY2xhc3NlcyBsb2FkZWQgYnkgdGhpcyBjbGFzc2xvYWRlcgorICAgICAqICAgICAgICBhbmQgYmVsb25naW5nIHRvIHRoZSBuYW1lZCBwYWNrYWdlIG9yIGFueSBvZiBpdHMgc3VicGFja2FnZXMKKyAgICAgKiAgICAgICAgd2lsbCBoYXZlIGFzc2VydGlvbnMgZW5hYmxlZCBieSBkZWZhdWx0LCA8dHQ+ZmFsc2U8L3R0PiBpZiB0aGV5CisgICAgICogICAgICAgIHdpbGwgaGF2ZSBhc3NlcnRpb25zIGRpc2FibGVkIGJ5IGRlZmF1bHQuCisgICAgICogQHNpbmNlIDEuNAorICAgICAqLworICAgIHB1YmxpYyBzeW5jaHJvbml6ZWQgdm9pZCBzZXRQYWNrYWdlQXNzZXJ0aW9uU3RhdHVzKFN0cmluZyBwYWNrYWdlTmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sZWFuIGVuYWJsZWQpCisgICAgeworICAgICAgICBpZiAocGFja2FnZUFzc2VydGlvblN0YXR1cyA9PSBudWxsKQorICAgICAgICAgICAgaW5pdGlhbGl6ZUphdmFBc3NlcnRpb25NYXBzKCk7CisKKyAgICAgICAgcGFja2FnZUFzc2VydGlvblN0YXR1cy5wdXQocGFja2FnZU5hbWUsIEJvb2xlYW4udmFsdWVPZihlbmFibGVkKSk7CisgICAgfQorCisgICAgLyoqCisgICAgICogU2V0cyB0aGUgZGVzaXJlZCBhc3NlcnRpb24gc3RhdHVzIGZvciB0aGUgbmFtZWQgdG9wLWxldmVsIGNsYXNzIGluCisgICAgICogdGhpcyBjbGFzcyBsb2FkZXIgYW5kIGFueSBuZXN0ZWQgY2xhc3NlcyBjb250YWluZWQgdGhlcmVpbi4KKyAgICAgKiBUaGlzIHNldHRpbmcgdGFrZXMgcHJlY2VkZW5jZSBvdmVyIHRoZSAgY2xhc3MgbG9hZGVyJ3MgZGVmYXVsdAorICAgICAqIGFzc2VydGlvbiBzdGF0dXMsIGFuZCBvdmVyIGFueSBhcHBsaWNhYmxlIHBlci1wYWNrYWdlIGRlZmF1bHQuCisgICAgICogVGhpcyBtZXRob2QgaGFzIG5vIGVmZmVjdCBpZiB0aGUgbmFtZWQgY2xhc3MgaGFzIGFscmVhZHkgYmVlbgorICAgICAqIGluaXRpYWxpemVkLiAgKE9uY2UgYSBjbGFzcyBpcyBpbml0aWFsaXplZCwgaXRzIGFzc2VydGlvbiBzdGF0dXMgY2Fubm90CisgICAgICogY2hhbmdlLikKKyAgICAgKiA8cD4KKyAgICAgKiBJZiB0aGUgbmFtZWQgY2xhc3MgaXMgbm90IGEgdG9wLWxldmVsIGNsYXNzLCB0aGlzIGNhbGwgd2lsbCBoYXZlIG5vCisgICAgICogZWZmZWN0IG9uIHRoZSBhY3R1YWwgYXNzZXJ0aW9uIHN0YXR1cyBvZiBhbnkgY2xhc3MsIGFuZCBpdHMgcmV0dXJuCisgICAgICogdmFsdWUgaXMgdW5kZWZpbmVkLgorICAgICAqCisgICAgICogQHBhcmFtIGNsYXNzTmFtZSB0aGUgZnVsbHkgcXVhbGlmaWVkIGNsYXNzIG5hbWUgb2YgdGhlIHRvcC1sZXZlbCBjbGFzcworICAgICAqICAgICAgICB3aG9zZSBhc3NlcnRpb24gc3RhdHVzIGlzIHRvIGJlIHNldC4KKyAgICAgKiBAcGFyYW0gZW5hYmxlZCA8dHQ+dHJ1ZTwvdHQ+IGlmIHRoZSBuYW1lZCBjbGFzcyBpcyB0byBoYXZlIGFzc2VydGlvbnMKKyAgICAgKiAgICAgICAgZW5hYmxlZCB3aGVuIChhbmQgaWYpIGl0IGlzIGluaXRpYWxpemVkLCA8dHQ+ZmFsc2U8L3R0PiBpZiB0aGUKKyAgICAgKiAgICAgICAgY2xhc3MgaXMgdG8gaGF2ZSBhc3NlcnRpb25zIGRpc2FibGVkLgorICAgICAqIEBzaW5jZSAxLjQKKyAgICAgKi8KKyAgICBwdWJsaWMgc3luY2hyb25pemVkIHZvaWQgc2V0Q2xhc3NBc3NlcnRpb25TdGF0dXMoU3RyaW5nIGNsYXNzTmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbGVhbiBlbmFibGVkKQorICAgIHsKKyAgICAgICAgaWYgKGNsYXNzQXNzZXJ0aW9uU3RhdHVzID09IG51bGwpCisgICAgICAgICAgICBpbml0aWFsaXplSmF2YUFzc2VydGlvbk1hcHMoKTsKKworICAgICAgICBjbGFzc0Fzc2VydGlvblN0YXR1cy5wdXQoY2xhc3NOYW1lLCBCb29sZWFuLnZhbHVlT2YoZW5hYmxlZCkpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFNldHMgdGhlIGRlZmF1bHQgYXNzZXJ0aW9uIHN0YXR1cyBmb3IgdGhpcyBjbGFzcyBsb2FkZXIgdG8KKyAgICAgKiA8dHQ+ZmFsc2U8L3R0PiBhbmQgZGlzY2FyZHMgYW55IHBhY2thZ2UgZGVmYXVsdHMgb3IgY2xhc3MgYXNzZXJ0aW9uCisgICAgICogc3RhdHVzIHNldHRpbmdzIGFzc29jaWF0ZWQgd2l0aCB0aGUgY2xhc3MgbG9hZGVyLiAgVGhpcyBjYWxsIGlzCisgICAgICogcHJvdmlkZWQgc28gdGhhdCBjbGFzcyBsb2FkZXJzIGNhbiBiZSBtYWRlIHRvIGlnbm9yZSBhbnkgY29tbWFuZCBsaW5lCisgICAgICogb3IgcGVyc2lzdGVudCBhc3NlcnRpb24gc3RhdHVzIHNldHRpbmdzIGFuZCAic3RhcnQgd2l0aCBhIGNsZWFuIHNsYXRlLiIKKyAgICAgKgorICAgICAqIEBzaW5jZSAxLjQKKyAgICAgKi8KKyAgICBwdWJsaWMgc3luY2hyb25pemVkIHZvaWQgY2xlYXJBc3NlcnRpb25TdGF0dXMoKSB7CisgICAgICAgIC8qCisgICAgICAgICAqIFdoZXRoZXIgb3Igbm90ICJKYXZhIGFzc2VydGlvbiBtYXBzIiBhcmUgaW5pdGlhbGl6ZWQsIHNldAorICAgICAgICAgKiB0aGVtIHRvIGVtcHR5IG1hcHMsIGVmZmVjdGl2ZWx5IGlnbm9yaW5nIGFueSBwcmVzZW50IHNldHRpbmdzLgorICAgICAgICAgKi8KKyAgICAgICAgY2xhc3NBc3NlcnRpb25TdGF0dXMgPSBuZXcgSGFzaE1hcCgpOworICAgICAgICBwYWNrYWdlQXNzZXJ0aW9uU3RhdHVzID0gbmV3IEhhc2hNYXAoKTsKKworICAgICAgICBkZWZhdWx0QXNzZXJ0aW9uU3RhdHVzID0gZmFsc2U7CisgICAgfQorCisgICAgLyoqCisgICAgICogUmV0dXJucyB0aGUgYXNzZXJ0aW9uIHN0YXR1cyB0aGF0IHdvdWxkIGJlIGFzc2lnbmVkIHRvIHRoZSBzcGVjaWZpZWQKKyAgICAgKiBjbGFzcyBpZiBpdCB3ZXJlIHRvIGJlIGluaXRpYWxpemVkIGF0IHRoZSB0aW1lIHRoaXMgbWV0aG9kIGlzIGludm9rZWQuCisgICAgICogSWYgdGhlIG5hbWVkIGNsYXNzIGhhcyBoYWQgaXRzIGFzc2VydGlvbiBzdGF0dXMgc2V0LCB0aGUgbW9zdCByZWNlbnQKKyAgICAgKiBzZXR0aW5nIHdpbGwgYmUgcmV0dXJuZWQ7IG90aGVyd2lzZSwgaWYgYW55IHBhY2thZ2UgZGVmYXVsdCBhc3NlcnRpb24KKyAgICAgKiBzdGF0dXMgcGVydGFpbnMgdG8gdGhpcyBjbGFzcywgdGhlIG1vc3QgcmVjZW50IHNldHRpbmcgZm9yIHRoZSBtb3N0CisgICAgICogc3BlY2lmaWMgcGVydGluZW50IHBhY2thZ2UgZGVmYXVsdCBhc3NlcnRpb24gc3RhdHVzIGlzIHJldHVybmVkOworICAgICAqIG90aGVyd2lzZSwgdGhpcyBjbGFzcyBsb2FkZXIncyBkZWZhdWx0IGFzc2VydGlvbiBzdGF0dXMgaXMgcmV0dXJuZWQuCisgICAgICoKKyAgICAgKiBAcGFyYW0gIGNsYXNzTmFtZSB0aGUgZnVsbHkgcXVhbGlmaWVkIGNsYXNzIG5hbWUgb2YgdGhlIGNsYXNzIHdob3NlCisgICAgICogICAgICAgICBkZXNpcmVkIGFzc2VydGlvbiBzdGF0dXMgaXMgYmVpbmcgcXVlcmllZC4KKyAgICAgKiBAcmV0dXJuIHRoZSBkZXNpcmVkIGFzc2VydGlvbiBzdGF0dXMgb2YgdGhlIHNwZWNpZmllZCBjbGFzcy4KKyAgICAgKiBAc2VlICAgICNzZXRDbGFzc0Fzc2VydGlvblN0YXR1cyhTdHJpbmcsYm9vbGVhbikKKyAgICAgKiBAc2VlICAgICNzZXRQYWNrYWdlQXNzZXJ0aW9uU3RhdHVzKFN0cmluZyxib29sZWFuKQorICAgICAqIEBzZWUgICAgI3NldERlZmF1bHRBc3NlcnRpb25TdGF0dXMoYm9vbGVhbikKKyAgICAgKiBAc2luY2UgIDEuNAorICAgICAqLworICAgIHN5bmNocm9uaXplZCBib29sZWFuIGRlc2lyZWRBc3NlcnRpb25TdGF0dXMoU3RyaW5nIGNsYXNzTmFtZSkgeworICAgICAgICBCb29sZWFuIHJlc3VsdDsKKworICAgICAgICAvLyBhc3NlcnQgY2xhc3NBc3NlcnRpb25TdGF0dXMgICAhPSBudWxsOworICAgICAgICAvLyBhc3NlcnQgcGFja2FnZUFzc2VydGlvblN0YXR1cyAhPSBudWxsOworCisgICAgICAgIC8vIENoZWNrIGZvciBhIGNsYXNzIGVudHJ5CisgICAgICAgIHJlc3VsdCA9IChCb29sZWFuKWNsYXNzQXNzZXJ0aW9uU3RhdHVzLmdldChjbGFzc05hbWUpOworICAgICAgICBpZiAocmVzdWx0ICE9IG51bGwpCisgICAgICAgICAgICByZXR1cm4gcmVzdWx0LmJvb2xlYW5WYWx1ZSgpOworCisgICAgICAgIC8vIENoZWNrIGZvciBtb3N0IHNwZWNpZmljIHBhY2thZ2UgZW50cnkKKyAgICAgICAgaW50IGRvdEluZGV4ID0gY2xhc3NOYW1lLmxhc3RJbmRleE9mKCIuIik7CisgICAgICAgIGlmIChkb3RJbmRleCA8IDApIHsgLy8gZGVmYXVsdCBwYWNrYWdlCisgICAgICAgICAgICByZXN1bHQgPSAoQm9vbGVhbilwYWNrYWdlQXNzZXJ0aW9uU3RhdHVzLmdldChudWxsKTsKKyAgICAgICAgICAgIGlmIChyZXN1bHQgIT0gbnVsbCkKKyAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0LmJvb2xlYW5WYWx1ZSgpOworICAgICAgICB9CisgICAgICAgIHdoaWxlKGRvdEluZGV4ID4gMCkgeworICAgICAgICAgICAgY2xhc3NOYW1lID0gY2xhc3NOYW1lLnN1YnN0cmluZygwLCBkb3RJbmRleCk7CisgICAgICAgICAgICByZXN1bHQgPSAoQm9vbGVhbilwYWNrYWdlQXNzZXJ0aW9uU3RhdHVzLmdldChjbGFzc05hbWUpOworICAgICAgICAgICAgaWYgKHJlc3VsdCAhPSBudWxsKQorICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQuYm9vbGVhblZhbHVlKCk7CisgICAgICAgICAgICBkb3RJbmRleCA9IGNsYXNzTmFtZS5sYXN0SW5kZXhPZigiLiIsIGRvdEluZGV4LTEpOworICAgICAgICB9CisKKyAgICAgICAgLy8gUmV0dXJuIHRoZSBjbGFzc2xvYWRlciBkZWZhdWx0CisgICAgICAgIHJldHVybiBkZWZhdWx0QXNzZXJ0aW9uU3RhdHVzOworICAgIH0KKworICAgIC8vIFNldCB1cCB0aGUgYXNzZXJ0aW9ucyB3aXRoIGluZm9ybWF0aW9uIHByb3ZpZGVkIGJ5IHRoZSBWTS4KKyAgICBwcml2YXRlIHZvaWQgaW5pdGlhbGl6ZUphdmFBc3NlcnRpb25NYXBzKCkgeworICAgICAgICAvLyBhc3NlcnQgVGhyZWFkLmhvbGRzTG9jayh0aGlzKTsKKworICAgICAgICBjbGFzc0Fzc2VydGlvblN0YXR1cyA9IG5ldyBIYXNoTWFwKCk7CisgICAgICAgIHBhY2thZ2VBc3NlcnRpb25TdGF0dXMgPSBuZXcgSGFzaE1hcCgpOworICAgICAgICA8ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAnQXNzZXJ0aW9uU3RhdHVzRGlyZWN0aXZlcyciPkFzc2VydGlvblN0YXR1c0RpcmVjdGl2ZXM8L2Vycm9yPiBkaXJlY3RpdmVzID0gcmV0cmlldmVEaXJlY3RpdmVzKCk7CisKKyAgICAgICAgZm9yKGludCBpPTA7IGk8ZGlyZWN0aXZlcy48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAnY2xhc3NlcyciPmNsYXNzZXM8L2Vycm9yPi5sZW5ndGg7IGkrKykKKyAgICAgICAgICAgIGNsYXNzQXNzZXJ0aW9uU3RhdHVzLnB1dChkaXJlY3RpdmVzLjxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICdjbGFzc2VzJyI+Y2xhc3NlczwvZXJyb3I+W2ldLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQm9vbGVhbi52YWx1ZU9mPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBtZXRob2QgJ3ZhbHVlT2YoPyknIj4oZGlyZWN0aXZlcy48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAnY2xhc3NFbmFibGVkJyI+Y2xhc3NFbmFibGVkPC9lcnJvcj5baV0pPC9lcnJvcj4pOworCisgICAgICAgIGZvcihpbnQgaT0wOyBpPGRpcmVjdGl2ZXMuPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ3BhY2thZ2VzJyI+cGFja2FnZXM8L2Vycm9yPi5sZW5ndGg7IGkrKykKKyAgICAgICAgICAgIHBhY2thZ2VBc3NlcnRpb25TdGF0dXMucHV0KGRpcmVjdGl2ZXMuPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ3BhY2thZ2VzJyI+cGFja2FnZXM8L2Vycm9yPltpXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJvb2xlYW4udmFsdWVPZjxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgbWV0aG9kICd2YWx1ZU9mKD8pJyI+KGRpcmVjdGl2ZXMuPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ3BhY2thZ2VFbmFibGVkJyI+cGFja2FnZUVuYWJsZWQ8L2Vycm9yPltpXSk8L2Vycm9yPik7CisKKyAgICAgICAgZGVmYXVsdEFzc2VydGlvblN0YXR1cyA9IGRpcmVjdGl2ZXMuPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ2RlZmx0JyI+ZGVmbHQ8L2Vycm9yPjsKKyAgICB9CisKKyAgICAvLyBSZXRyaWV2ZXMgdGhlIGFzc2VydGlvbiBkaXJlY3RpdmVzIGZyb20gdGhlIFZNLgorICAgIHByaXZhdGUgc3RhdGljIG5hdGl2ZSA8ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAnQXNzZXJ0aW9uU3RhdHVzRGlyZWN0aXZlcyciPkFzc2VydGlvblN0YXR1c0RpcmVjdGl2ZXM8L2Vycm9yPiByZXRyaWV2ZURpcmVjdGl2ZXMoKTsKKworfQorCisKK2NsYXNzIFN5c3RlbUNsYXNzTG9hZGVyQWN0aW9uIGltcGxlbWVudHMgPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ1ByaXZpbGVnZWRFeGNlcHRpb25BY3Rpb24nIj5Qcml2aWxlZ2VkRXhjZXB0aW9uQWN0aW9uPC9lcnJvcj4geworICAgIHByaXZhdGUgQ2xhc3NMb2FkZXIgcGFyZW50OworCisgICAgU3lzdGVtQ2xhc3NMb2FkZXJBY3Rpb24oQ2xhc3NMb2FkZXIgcGFyZW50KSB7CisJdGhpcy5wYXJlbnQgPSBwYXJlbnQ7CisgICAgfQorCisgICAgcHVibGljIE9iamVjdCBydW4oKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwlDbGFzc0xvYWRlciBzeXM7CisJPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ0NvbnN0cnVjdG9yJyI+Q29uc3RydWN0b3I8L2Vycm9yPiBjdG9yOworCUNsYXNzIGM7CisJQ2xhc3MgY3BbXSA9IHsgQ2xhc3NMb2FkZXIuY2xhc3MgfTsKKwlPYmplY3QgcGFyYW1zW10gPSB7IHBhcmVudCB9OworCisgICAgICAgIFN0cmluZyBjbHMgPSBTeXN0ZW0uZ2V0UHJvcGVydHkoImphdmEuc3lzdGVtLmNsYXNzLmxvYWRlciIpOworCWlmIChjbHMgPT0gbnVsbCkgeworCSAgICByZXR1cm4gcGFyZW50OworCX0KKworCWMgPSBDbGFzcy5mb3JOYW1lPGVycm9yIGRlc2NyPSInZm9yTmFtZShqYXZhLmxhbmcuU3RyaW5nLCBib29sZWFuLCBqYXZhLmxhbmcuQ2xhc3NMb2FkZXIpJyBpbiAnamF2YS5sYW5nLkNsYXNzJyBjYW5ub3QgYmUgYXBwbGllZCB0byAnKGphdmEubGFuZy5TdHJpbmcsIGJvb2xlYW4sIENsYXNzTG9hZGVyKSciPihjbHMsIHRydWUsIHBhcmVudCk8L2Vycm9yPjsKKwljdG9yID0gYy5nZXREZWNsYXJlZENvbnN0cnVjdG9yKGNwKTsKKwlzeXMgPSAoQ2xhc3NMb2FkZXIpIGN0b3IuPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBtZXRob2QgJ25ld0luc3RhbmNlKGphdmEubGFuZy5PYmplY3RbXSknIj5uZXdJbnN0YW5jZTwvZXJyb3I+KHBhcmFtcyk7CisJVGhyZWFkLmN1cnJlbnRUaHJlYWQoKS5zZXRDb250ZXh0Q2xhc3NMb2FkZXI8ZXJyb3IgZGVzY3I9IidzZXRDb250ZXh0Q2xhc3NMb2FkZXIoamF2YS5sYW5nLkNsYXNzTG9hZGVyKScgaW4gJ2phdmEubGFuZy5UaHJlYWQnIGNhbm5vdCBiZSBhcHBsaWVkIHRvICcoQ2xhc3NMb2FkZXIpJyI+KHN5cyk8L2Vycm9yPjsKKwlyZXR1cm4gc3lzOworICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nL2FNZXRob2RzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZy9hTWV0aG9kcy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM3OWExYTgKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZy9hTWV0aG9kcy5qYXZhCkBAIC0wLDAgKzEsMzAwMiBAQAorY2xhc3MgYV9NZSB7IAorICB2b2lkIG1ldGhvZDAgKCkgeyB9CisgIHZvaWQgbWV0aG9kMSAoKSB7IH0KKyAgdm9pZCBtZXRob2QyICgpIHsgfQorICB2b2lkIG1ldGhvZDMgKCkgeyB9CisgIHZvaWQgbWV0aG9kNCAoKSB7IH0KKyAgdm9pZCBtZXRob2Q1ICgpIHsgfQorICB2b2lkIG1ldGhvZDYgKCkgeyB9CisgIHZvaWQgbWV0aG9kNyAoKSB7IH0KKyAgdm9pZCBtZXRob2Q4ICgpIHsgfQorICB2b2lkIG1ldGhvZDkgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTAgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTEgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTIgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTMgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTQgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTUgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTYgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTcgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTggKCkgeyB9CisgIHZvaWQgbWV0aG9kMTkgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjAgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjEgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjIgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjMgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjQgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjUgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjYgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjcgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjggKCkgeyB9CisgIHZvaWQgbWV0aG9kMjkgKCkgeyB9CisgIHZvaWQgbWV0aG9kMzAgKCkgeyB9CisgIHZvaWQgbWV0aG9kMzEgKCkgeyB9CisgIHZvaWQgbWV0aG9kMzIgKCkgeyB9CisgIHZvaWQgbWV0aG9kMzMgKCkgeyB9CisgIHZvaWQgbWV0aG9kMzQgKCkgeyB9CisgIHZvaWQgbWV0aG9kMzUgKCkgeyB9CisgIHZvaWQgbWV0aG9kMzYgKCkgeyB9CisgIHZvaWQgbWV0aG9kMzcgKCkgeyB9CisgIHZvaWQgbWV0aG9kMzggKCkgeyB9CisgIHZvaWQgbWV0aG9kMzkgKCkgeyB9CisgIHZvaWQgbWV0aG9kNDAgKCkgeyB9CisgIHZvaWQgbWV0aG9kNDEgKCkgeyB9CisgIHZvaWQgbWV0aG9kNDIgKCkgeyB9CisgIHZvaWQgbWV0aG9kNDMgKCkgeyB9CisgIHZvaWQgbWV0aG9kNDQgKCkgeyB9CisgIHZvaWQgbWV0aG9kNDUgKCkgeyB9CisgIHZvaWQgbWV0aG9kNDYgKCkgeyB9CisgIHZvaWQgbWV0aG9kNDcgKCkgeyB9CisgIHZvaWQgbWV0aG9kNDggKCkgeyB9CisgIHZvaWQgbWV0aG9kNDkgKCkgeyB9CisgIHZvaWQgbWV0aG9kNTAgKCkgeyB9CisgIHZvaWQgbWV0aG9kNTEgKCkgeyB9CisgIHZvaWQgbWV0aG9kNTIgKCkgeyB9CisgIHZvaWQgbWV0aG9kNTMgKCkgeyB9CisgIHZvaWQgbWV0aG9kNTQgKCkgeyB9CisgIHZvaWQgbWV0aG9kNTUgKCkgeyB9CisgIHZvaWQgbWV0aG9kNTYgKCkgeyB9CisgIHZvaWQgbWV0aG9kNTcgKCkgeyB9CisgIHZvaWQgbWV0aG9kNTggKCkgeyB9CisgIHZvaWQgbWV0aG9kNTkgKCkgeyB9CisgIHZvaWQgbWV0aG9kNjAgKCkgeyB9CisgIHZvaWQgbWV0aG9kNjEgKCkgeyB9CisgIHZvaWQgbWV0aG9kNjIgKCkgeyB9CisgIHZvaWQgbWV0aG9kNjMgKCkgeyB9CisgIHZvaWQgbWV0aG9kNjQgKCkgeyB9CisgIHZvaWQgbWV0aG9kNjUgKCkgeyB9CisgIHZvaWQgbWV0aG9kNjYgKCkgeyB9CisgIHZvaWQgbWV0aG9kNjcgKCkgeyB9CisgIHZvaWQgbWV0aG9kNjggKCkgeyB9CisgIHZvaWQgbWV0aG9kNjkgKCkgeyB9CisgIHZvaWQgbWV0aG9kNzAgKCkgeyB9CisgIHZvaWQgbWV0aG9kNzEgKCkgeyB9CisgIHZvaWQgbWV0aG9kNzIgKCkgeyB9CisgIHZvaWQgbWV0aG9kNzMgKCkgeyB9CisgIHZvaWQgbWV0aG9kNzQgKCkgeyB9CisgIHZvaWQgbWV0aG9kNzUgKCkgeyB9CisgIHZvaWQgbWV0aG9kNzYgKCkgeyB9CisgIHZvaWQgbWV0aG9kNzcgKCkgeyB9CisgIHZvaWQgbWV0aG9kNzggKCkgeyB9CisgIHZvaWQgbWV0aG9kNzkgKCkgeyB9CisgIHZvaWQgbWV0aG9kODAgKCkgeyB9CisgIHZvaWQgbWV0aG9kODEgKCkgeyB9CisgIHZvaWQgbWV0aG9kODIgKCkgeyB9CisgIHZvaWQgbWV0aG9kODMgKCkgeyB9CisgIHZvaWQgbWV0aG9kODQgKCkgeyB9CisgIHZvaWQgbWV0aG9kODUgKCkgeyB9CisgIHZvaWQgbWV0aG9kODYgKCkgeyB9CisgIHZvaWQgbWV0aG9kODcgKCkgeyB9CisgIHZvaWQgbWV0aG9kODggKCkgeyB9CisgIHZvaWQgbWV0aG9kODkgKCkgeyB9CisgIHZvaWQgbWV0aG9kOTAgKCkgeyB9CisgIHZvaWQgbWV0aG9kOTEgKCkgeyB9CisgIHZvaWQgbWV0aG9kOTIgKCkgeyB9CisgIHZvaWQgbWV0aG9kOTMgKCkgeyB9CisgIHZvaWQgbWV0aG9kOTQgKCkgeyB9CisgIHZvaWQgbWV0aG9kOTUgKCkgeyB9CisgIHZvaWQgbWV0aG9kOTYgKCkgeyB9CisgIHZvaWQgbWV0aG9kOTcgKCkgeyB9CisgIHZvaWQgbWV0aG9kOTggKCkgeyB9CisgIHZvaWQgbWV0aG9kOTkgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTAwICgpIHsgfQorICB2b2lkIG1ldGhvZDEwMSAoKSB7IH0KKyAgdm9pZCBtZXRob2QxMDIgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTAzICgpIHsgfQorICB2b2lkIG1ldGhvZDEwNCAoKSB7IH0KKyAgdm9pZCBtZXRob2QxMDUgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTA2ICgpIHsgfQorICB2b2lkIG1ldGhvZDEwNyAoKSB7IH0KKyAgdm9pZCBtZXRob2QxMDggKCkgeyB9CisgIHZvaWQgbWV0aG9kMTA5ICgpIHsgfQorICB2b2lkIG1ldGhvZDExMCAoKSB7IH0KKyAgdm9pZCBtZXRob2QxMTEgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTEyICgpIHsgfQorICB2b2lkIG1ldGhvZDExMyAoKSB7IH0KKyAgdm9pZCBtZXRob2QxMTQgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTE1ICgpIHsgfQorICB2b2lkIG1ldGhvZDExNiAoKSB7IH0KKyAgdm9pZCBtZXRob2QxMTcgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTE4ICgpIHsgfQorICB2b2lkIG1ldGhvZDExOSAoKSB7IH0KKyAgdm9pZCBtZXRob2QxMjAgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTIxICgpIHsgfQorICB2b2lkIG1ldGhvZDEyMiAoKSB7IH0KKyAgdm9pZCBtZXRob2QxMjMgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTI0ICgpIHsgfQorICB2b2lkIG1ldGhvZDEyNSAoKSB7IH0KKyAgdm9pZCBtZXRob2QxMjYgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTI3ICgpIHsgfQorICB2b2lkIG1ldGhvZDEyOCAoKSB7IH0KKyAgdm9pZCBtZXRob2QxMjkgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTMwICgpIHsgfQorICB2b2lkIG1ldGhvZDEzMSAoKSB7IH0KKyAgdm9pZCBtZXRob2QxMzIgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTMzICgpIHsgfQorICB2b2lkIG1ldGhvZDEzNCAoKSB7IH0KKyAgdm9pZCBtZXRob2QxMzUgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTM2ICgpIHsgfQorICB2b2lkIG1ldGhvZDEzNyAoKSB7IH0KKyAgdm9pZCBtZXRob2QxMzggKCkgeyB9CisgIHZvaWQgbWV0aG9kMTM5ICgpIHsgfQorICB2b2lkIG1ldGhvZDE0MCAoKSB7IH0KKyAgdm9pZCBtZXRob2QxNDEgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTQyICgpIHsgfQorICB2b2lkIG1ldGhvZDE0MyAoKSB7IH0KKyAgdm9pZCBtZXRob2QxNDQgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTQ1ICgpIHsgfQorICB2b2lkIG1ldGhvZDE0NiAoKSB7IH0KKyAgdm9pZCBtZXRob2QxNDcgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTQ4ICgpIHsgfQorICB2b2lkIG1ldGhvZDE0OSAoKSB7IH0KKyAgdm9pZCBtZXRob2QxNTAgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTUxICgpIHsgfQorICB2b2lkIG1ldGhvZDE1MiAoKSB7IH0KKyAgdm9pZCBtZXRob2QxNTMgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTU0ICgpIHsgfQorICB2b2lkIG1ldGhvZDE1NSAoKSB7IH0KKyAgdm9pZCBtZXRob2QxNTYgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTU3ICgpIHsgfQorICB2b2lkIG1ldGhvZDE1OCAoKSB7IH0KKyAgdm9pZCBtZXRob2QxNTkgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTYwICgpIHsgfQorICB2b2lkIG1ldGhvZDE2MSAoKSB7IH0KKyAgdm9pZCBtZXRob2QxNjIgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTYzICgpIHsgfQorICB2b2lkIG1ldGhvZDE2NCAoKSB7IH0KKyAgdm9pZCBtZXRob2QxNjUgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTY2ICgpIHsgfQorICB2b2lkIG1ldGhvZDE2NyAoKSB7IH0KKyAgdm9pZCBtZXRob2QxNjggKCkgeyB9CisgIHZvaWQgbWV0aG9kMTY5ICgpIHsgfQorICB2b2lkIG1ldGhvZDE3MCAoKSB7IH0KKyAgdm9pZCBtZXRob2QxNzEgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTcyICgpIHsgfQorICB2b2lkIG1ldGhvZDE3MyAoKSB7IH0KKyAgdm9pZCBtZXRob2QxNzQgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTc1ICgpIHsgfQorICB2b2lkIG1ldGhvZDE3NiAoKSB7IH0KKyAgdm9pZCBtZXRob2QxNzcgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTc4ICgpIHsgfQorICB2b2lkIG1ldGhvZDE3OSAoKSB7IH0KKyAgdm9pZCBtZXRob2QxODAgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTgxICgpIHsgfQorICB2b2lkIG1ldGhvZDE4MiAoKSB7IH0KKyAgdm9pZCBtZXRob2QxODMgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTg0ICgpIHsgfQorICB2b2lkIG1ldGhvZDE4NSAoKSB7IH0KKyAgdm9pZCBtZXRob2QxODYgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTg3ICgpIHsgfQorICB2b2lkIG1ldGhvZDE4OCAoKSB7IH0KKyAgdm9pZCBtZXRob2QxODkgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTkwICgpIHsgfQorICB2b2lkIG1ldGhvZDE5MSAoKSB7IH0KKyAgdm9pZCBtZXRob2QxOTIgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTkzICgpIHsgfQorICB2b2lkIG1ldGhvZDE5NCAoKSB7IH0KKyAgdm9pZCBtZXRob2QxOTUgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTk2ICgpIHsgfQorICB2b2lkIG1ldGhvZDE5NyAoKSB7IH0KKyAgdm9pZCBtZXRob2QxOTggKCkgeyB9CisgIHZvaWQgbWV0aG9kMTk5ICgpIHsgfQorICB2b2lkIG1ldGhvZDIwMCAoKSB7IH0KKyAgdm9pZCBtZXRob2QyMDEgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjAyICgpIHsgfQorICB2b2lkIG1ldGhvZDIwMyAoKSB7IH0KKyAgdm9pZCBtZXRob2QyMDQgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjA1ICgpIHsgfQorICB2b2lkIG1ldGhvZDIwNiAoKSB7IH0KKyAgdm9pZCBtZXRob2QyMDcgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjA4ICgpIHsgfQorICB2b2lkIG1ldGhvZDIwOSAoKSB7IH0KKyAgdm9pZCBtZXRob2QyMTAgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjExICgpIHsgfQorICB2b2lkIG1ldGhvZDIxMiAoKSB7IH0KKyAgdm9pZCBtZXRob2QyMTMgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjE0ICgpIHsgfQorICB2b2lkIG1ldGhvZDIxNSAoKSB7IH0KKyAgdm9pZCBtZXRob2QyMTYgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjE3ICgpIHsgfQorICB2b2lkIG1ldGhvZDIxOCAoKSB7IH0KKyAgdm9pZCBtZXRob2QyMTkgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjIwICgpIHsgfQorICB2b2lkIG1ldGhvZDIyMSAoKSB7IH0KKyAgdm9pZCBtZXRob2QyMjIgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjIzICgpIHsgfQorICB2b2lkIG1ldGhvZDIyNCAoKSB7IH0KKyAgdm9pZCBtZXRob2QyMjUgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjI2ICgpIHsgfQorICB2b2lkIG1ldGhvZDIyNyAoKSB7IH0KKyAgdm9pZCBtZXRob2QyMjggKCkgeyB9CisgIHZvaWQgbWV0aG9kMjI5ICgpIHsgfQorICB2b2lkIG1ldGhvZDIzMCAoKSB7IH0KKyAgdm9pZCBtZXRob2QyMzEgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjMyICgpIHsgfQorICB2b2lkIG1ldGhvZDIzMyAoKSB7IH0KKyAgdm9pZCBtZXRob2QyMzQgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjM1ICgpIHsgfQorICB2b2lkIG1ldGhvZDIzNiAoKSB7IH0KKyAgdm9pZCBtZXRob2QyMzcgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjM4ICgpIHsgfQorICB2b2lkIG1ldGhvZDIzOSAoKSB7IH0KKyAgdm9pZCBtZXRob2QyNDAgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjQxICgpIHsgfQorICB2b2lkIG1ldGhvZDI0MiAoKSB7IH0KKyAgdm9pZCBtZXRob2QyNDMgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjQ0ICgpIHsgfQorICB2b2lkIG1ldGhvZDI0NSAoKSB7IH0KKyAgdm9pZCBtZXRob2QyNDYgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjQ3ICgpIHsgfQorICB2b2lkIG1ldGhvZDI0OCAoKSB7IH0KKyAgdm9pZCBtZXRob2QyNDkgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjUwICgpIHsgfQorICB2b2lkIG1ldGhvZDI1MSAoKSB7IH0KKyAgdm9pZCBtZXRob2QyNTIgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjUzICgpIHsgfQorICB2b2lkIG1ldGhvZDI1NCAoKSB7IH0KKyAgdm9pZCBtZXRob2QyNTUgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjU2ICgpIHsgfQorICB2b2lkIG1ldGhvZDI1NyAoKSB7IH0KKyAgdm9pZCBtZXRob2QyNTggKCkgeyB9CisgIHZvaWQgbWV0aG9kMjU5ICgpIHsgfQorICB2b2lkIG1ldGhvZDI2MCAoKSB7IH0KKyAgdm9pZCBtZXRob2QyNjEgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjYyICgpIHsgfQorICB2b2lkIG1ldGhvZDI2MyAoKSB7IH0KKyAgdm9pZCBtZXRob2QyNjQgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjY1ICgpIHsgfQorICB2b2lkIG1ldGhvZDI2NiAoKSB7IH0KKyAgdm9pZCBtZXRob2QyNjcgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjY4ICgpIHsgfQorICB2b2lkIG1ldGhvZDI2OSAoKSB7IH0KKyAgdm9pZCBtZXRob2QyNzAgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjcxICgpIHsgfQorICB2b2lkIG1ldGhvZDI3MiAoKSB7IH0KKyAgdm9pZCBtZXRob2QyNzMgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjc0ICgpIHsgfQorICB2b2lkIG1ldGhvZDI3NSAoKSB7IH0KKyAgdm9pZCBtZXRob2QyNzYgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjc3ICgpIHsgfQorICB2b2lkIG1ldGhvZDI3OCAoKSB7IH0KKyAgdm9pZCBtZXRob2QyNzkgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjgwICgpIHsgfQorICB2b2lkIG1ldGhvZDI4MSAoKSB7IH0KKyAgdm9pZCBtZXRob2QyODIgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjgzICgpIHsgfQorICB2b2lkIG1ldGhvZDI4NCAoKSB7IH0KKyAgdm9pZCBtZXRob2QyODUgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjg2ICgpIHsgfQorICB2b2lkIG1ldGhvZDI4NyAoKSB7IH0KKyAgdm9pZCBtZXRob2QyODggKCkgeyB9CisgIHZvaWQgbWV0aG9kMjg5ICgpIHsgfQorICB2b2lkIG1ldGhvZDI5MCAoKSB7IH0KKyAgdm9pZCBtZXRob2QyOTEgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjkyICgpIHsgfQorICB2b2lkIG1ldGhvZDI5MyAoKSB7IH0KKyAgdm9pZCBtZXRob2QyOTQgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjk1ICgpIHsgfQorICB2b2lkIG1ldGhvZDI5NiAoKSB7IH0KKyAgdm9pZCBtZXRob2QyOTcgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjk4ICgpIHsgfQorICB2b2lkIG1ldGhvZDI5OSAoKSB7IH0KKyAgdm9pZCBtZXRob2QzMDAgKCkgeyB9CisgIHZvaWQgbWV0aG9kMzAxICgpIHsgfQorICB2b2lkIG1ldGhvZDMwMiAoKSB7IH0KKyAgdm9pZCBtZXRob2QzMDMgKCkgeyB9CisgIHZvaWQgbWV0aG9kMzA0ICgpIHsgfQorICB2b2lkIG1ldGhvZDMwNSAoKSB7IH0KKyAgdm9pZCBtZXRob2QzMDYgKCkgeyB9CisgIHZvaWQgbWV0aG9kMzA3ICgpIHsgfQorICB2b2lkIG1ldGhvZDMwOCAoKSB7IH0KKyAgdm9pZCBtZXRob2QzMDkgKCkgeyB9CisgIHZvaWQgbWV0aG9kMzEwICgpIHsgfQorICB2b2lkIG1ldGhvZDMxMSAoKSB7IH0KKyAgdm9pZCBtZXRob2QzMTIgKCkgeyB9CisgIHZvaWQgbWV0aG9kMzEzICgpIHsgfQorICB2b2lkIG1ldGhvZDMxNCAoKSB7IH0KKyAgdm9pZCBtZXRob2QzMTUgKCkgeyB9CisgIHZvaWQgbWV0aG9kMzE2ICgpIHsgfQorICB2b2lkIG1ldGhvZDMxNyAoKSB7IH0KKyAgdm9pZCBtZXRob2QzMTggKCkgeyB9CisgIHZvaWQgbWV0aG9kMzE5ICgpIHsgfQorICB2b2lkIG1ldGhvZDMyMCAoKSB7IH0KKyAgdm9pZCBtZXRob2QzMjEgKCkgeyB9CisgIHZvaWQgbWV0aG9kMzIyICgpIHsgfQorICB2b2lkIG1ldGhvZDMyMyAoKSB7IH0KKyAgdm9pZCBtZXRob2QzMjQgKCkgeyB9CisgIHZvaWQgbWV0aG9kMzI1ICgpIHsgfQorICB2b2lkIG1ldGhvZDMyNiAoKSB7IH0KKyAgdm9pZCBtZXRob2QzMjcgKCkgeyB9CisgIHZvaWQgbWV0aG9kMzI4ICgpIHsgfQorICB2b2lkIG1ldGhvZDMyOSAoKSB7IH0KKyAgdm9pZCBtZXRob2QzMzAgKCkgeyB9CisgIHZvaWQgbWV0aG9kMzMxICgpIHsgfQorICB2b2lkIG1ldGhvZDMzMiAoKSB7IH0KKyAgdm9pZCBtZXRob2QzMzMgKCkgeyB9CisgIHZvaWQgbWV0aG9kMzM0ICgpIHsgfQorICB2b2lkIG1ldGhvZDMzNSAoKSB7IH0KKyAgdm9pZCBtZXRob2QzMzYgKCkgeyB9CisgIHZvaWQgbWV0aG9kMzM3ICgpIHsgfQorICB2b2lkIG1ldGhvZDMzOCAoKSB7IH0KKyAgdm9pZCBtZXRob2QzMzkgKCkgeyB9CisgIHZvaWQgbWV0aG9kMzQwICgpIHsgfQorICB2b2lkIG1ldGhvZDM0MSAoKSB7IH0KKyAgdm9pZCBtZXRob2QzNDIgKCkgeyB9CisgIHZvaWQgbWV0aG9kMzQzICgpIHsgfQorICB2b2lkIG1ldGhvZDM0NCAoKSB7IH0KKyAgdm9pZCBtZXRob2QzNDUgKCkgeyB9CisgIHZvaWQgbWV0aG9kMzQ2ICgpIHsgfQorICB2b2lkIG1ldGhvZDM0NyAoKSB7IH0KKyAgdm9pZCBtZXRob2QzNDggKCkgeyB9CisgIHZvaWQgbWV0aG9kMzQ5ICgpIHsgfQorICB2b2lkIG1ldGhvZDM1MCAoKSB7IH0KKyAgdm9pZCBtZXRob2QzNTEgKCkgeyB9CisgIHZvaWQgbWV0aG9kMzUyICgpIHsgfQorICB2b2lkIG1ldGhvZDM1MyAoKSB7IH0KKyAgdm9pZCBtZXRob2QzNTQgKCkgeyB9CisgIHZvaWQgbWV0aG9kMzU1ICgpIHsgfQorICB2b2lkIG1ldGhvZDM1NiAoKSB7IH0KKyAgdm9pZCBtZXRob2QzNTcgKCkgeyB9CisgIHZvaWQgbWV0aG9kMzU4ICgpIHsgfQorICB2b2lkIG1ldGhvZDM1OSAoKSB7IH0KKyAgdm9pZCBtZXRob2QzNjAgKCkgeyB9CisgIHZvaWQgbWV0aG9kMzYxICgpIHsgfQorICB2b2lkIG1ldGhvZDM2MiAoKSB7IH0KKyAgdm9pZCBtZXRob2QzNjMgKCkgeyB9CisgIHZvaWQgbWV0aG9kMzY0ICgpIHsgfQorICB2b2lkIG1ldGhvZDM2NSAoKSB7IH0KKyAgdm9pZCBtZXRob2QzNjYgKCkgeyB9CisgIHZvaWQgbWV0aG9kMzY3ICgpIHsgfQorICB2b2lkIG1ldGhvZDM2OCAoKSB7IH0KKyAgdm9pZCBtZXRob2QzNjkgKCkgeyB9CisgIHZvaWQgbWV0aG9kMzcwICgpIHsgfQorICB2b2lkIG1ldGhvZDM3MSAoKSB7IH0KKyAgdm9pZCBtZXRob2QzNzIgKCkgeyB9CisgIHZvaWQgbWV0aG9kMzczICgpIHsgfQorICB2b2lkIG1ldGhvZDM3NCAoKSB7IH0KKyAgdm9pZCBtZXRob2QzNzUgKCkgeyB9CisgIHZvaWQgbWV0aG9kMzc2ICgpIHsgfQorICB2b2lkIG1ldGhvZDM3NyAoKSB7IH0KKyAgdm9pZCBtZXRob2QzNzggKCkgeyB9CisgIHZvaWQgbWV0aG9kMzc5ICgpIHsgfQorICB2b2lkIG1ldGhvZDM4MCAoKSB7IH0KKyAgdm9pZCBtZXRob2QzODEgKCkgeyB9CisgIHZvaWQgbWV0aG9kMzgyICgpIHsgfQorICB2b2lkIG1ldGhvZDM4MyAoKSB7IH0KKyAgdm9pZCBtZXRob2QzODQgKCkgeyB9CisgIHZvaWQgbWV0aG9kMzg1ICgpIHsgfQorICB2b2lkIG1ldGhvZDM4NiAoKSB7IH0KKyAgdm9pZCBtZXRob2QzODcgKCkgeyB9CisgIHZvaWQgbWV0aG9kMzg4ICgpIHsgfQorICB2b2lkIG1ldGhvZDM4OSAoKSB7IH0KKyAgdm9pZCBtZXRob2QzOTAgKCkgeyB9CisgIHZvaWQgbWV0aG9kMzkxICgpIHsgfQorICB2b2lkIG1ldGhvZDM5MiAoKSB7IH0KKyAgdm9pZCBtZXRob2QzOTMgKCkgeyB9CisgIHZvaWQgbWV0aG9kMzk0ICgpIHsgfQorICB2b2lkIG1ldGhvZDM5NSAoKSB7IH0KKyAgdm9pZCBtZXRob2QzOTYgKCkgeyB9CisgIHZvaWQgbWV0aG9kMzk3ICgpIHsgfQorICB2b2lkIG1ldGhvZDM5OCAoKSB7IH0KKyAgdm9pZCBtZXRob2QzOTkgKCkgeyB9CisgIHZvaWQgbWV0aG9kNDAwICgpIHsgfQorICB2b2lkIG1ldGhvZDQwMSAoKSB7IH0KKyAgdm9pZCBtZXRob2Q0MDIgKCkgeyB9CisgIHZvaWQgbWV0aG9kNDAzICgpIHsgfQorICB2b2lkIG1ldGhvZDQwNCAoKSB7IH0KKyAgdm9pZCBtZXRob2Q0MDUgKCkgeyB9CisgIHZvaWQgbWV0aG9kNDA2ICgpIHsgfQorICB2b2lkIG1ldGhvZDQwNyAoKSB7IH0KKyAgdm9pZCBtZXRob2Q0MDggKCkgeyB9CisgIHZvaWQgbWV0aG9kNDA5ICgpIHsgfQorICB2b2lkIG1ldGhvZDQxMCAoKSB7IH0KKyAgdm9pZCBtZXRob2Q0MTEgKCkgeyB9CisgIHZvaWQgbWV0aG9kNDEyICgpIHsgfQorICB2b2lkIG1ldGhvZDQxMyAoKSB7IH0KKyAgdm9pZCBtZXRob2Q0MTQgKCkgeyB9CisgIHZvaWQgbWV0aG9kNDE1ICgpIHsgfQorICB2b2lkIG1ldGhvZDQxNiAoKSB7IH0KKyAgdm9pZCBtZXRob2Q0MTcgKCkgeyB9CisgIHZvaWQgbWV0aG9kNDE4ICgpIHsgfQorICB2b2lkIG1ldGhvZDQxOSAoKSB7IH0KKyAgdm9pZCBtZXRob2Q0MjAgKCkgeyB9CisgIHZvaWQgbWV0aG9kNDIxICgpIHsgfQorICB2b2lkIG1ldGhvZDQyMiAoKSB7IH0KKyAgdm9pZCBtZXRob2Q0MjMgKCkgeyB9CisgIHZvaWQgbWV0aG9kNDI0ICgpIHsgfQorICB2b2lkIG1ldGhvZDQyNSAoKSB7IH0KKyAgdm9pZCBtZXRob2Q0MjYgKCkgeyB9CisgIHZvaWQgbWV0aG9kNDI3ICgpIHsgfQorICB2b2lkIG1ldGhvZDQyOCAoKSB7IH0KKyAgdm9pZCBtZXRob2Q0MjkgKCkgeyB9CisgIHZvaWQgbWV0aG9kNDMwICgpIHsgfQorICB2b2lkIG1ldGhvZDQzMSAoKSB7IH0KKyAgdm9pZCBtZXRob2Q0MzIgKCkgeyB9CisgIHZvaWQgbWV0aG9kNDMzICgpIHsgfQorICB2b2lkIG1ldGhvZDQzNCAoKSB7IH0KKyAgdm9pZCBtZXRob2Q0MzUgKCkgeyB9CisgIHZvaWQgbWV0aG9kNDM2ICgpIHsgfQorICB2b2lkIG1ldGhvZDQzNyAoKSB7IH0KKyAgdm9pZCBtZXRob2Q0MzggKCkgeyB9CisgIHZvaWQgbWV0aG9kNDM5ICgpIHsgfQorICB2b2lkIG1ldGhvZDQ0MCAoKSB7IH0KKyAgdm9pZCBtZXRob2Q0NDEgKCkgeyB9CisgIHZvaWQgbWV0aG9kNDQyICgpIHsgfQorICB2b2lkIG1ldGhvZDQ0MyAoKSB7IH0KKyAgdm9pZCBtZXRob2Q0NDQgKCkgeyB9CisgIHZvaWQgbWV0aG9kNDQ1ICgpIHsgfQorICB2b2lkIG1ldGhvZDQ0NiAoKSB7IH0KKyAgdm9pZCBtZXRob2Q0NDcgKCkgeyB9CisgIHZvaWQgbWV0aG9kNDQ4ICgpIHsgfQorICB2b2lkIG1ldGhvZDQ0OSAoKSB7IH0KKyAgdm9pZCBtZXRob2Q0NTAgKCkgeyB9CisgIHZvaWQgbWV0aG9kNDUxICgpIHsgfQorICB2b2lkIG1ldGhvZDQ1MiAoKSB7IH0KKyAgdm9pZCBtZXRob2Q0NTMgKCkgeyB9CisgIHZvaWQgbWV0aG9kNDU0ICgpIHsgfQorICB2b2lkIG1ldGhvZDQ1NSAoKSB7IH0KKyAgdm9pZCBtZXRob2Q0NTYgKCkgeyB9CisgIHZvaWQgbWV0aG9kNDU3ICgpIHsgfQorICB2b2lkIG1ldGhvZDQ1OCAoKSB7IH0KKyAgdm9pZCBtZXRob2Q0NTkgKCkgeyB9CisgIHZvaWQgbWV0aG9kNDYwICgpIHsgfQorICB2b2lkIG1ldGhvZDQ2MSAoKSB7IH0KKyAgdm9pZCBtZXRob2Q0NjIgKCkgeyB9CisgIHZvaWQgbWV0aG9kNDYzICgpIHsgfQorICB2b2lkIG1ldGhvZDQ2NCAoKSB7IH0KKyAgdm9pZCBtZXRob2Q0NjUgKCkgeyB9CisgIHZvaWQgbWV0aG9kNDY2ICgpIHsgfQorICB2b2lkIG1ldGhvZDQ2NyAoKSB7IH0KKyAgdm9pZCBtZXRob2Q0NjggKCkgeyB9CisgIHZvaWQgbWV0aG9kNDY5ICgpIHsgfQorICB2b2lkIG1ldGhvZDQ3MCAoKSB7IH0KKyAgdm9pZCBtZXRob2Q0NzEgKCkgeyB9CisgIHZvaWQgbWV0aG9kNDcyICgpIHsgfQorICB2b2lkIG1ldGhvZDQ3MyAoKSB7IH0KKyAgdm9pZCBtZXRob2Q0NzQgKCkgeyB9CisgIHZvaWQgbWV0aG9kNDc1ICgpIHsgfQorICB2b2lkIG1ldGhvZDQ3NiAoKSB7IH0KKyAgdm9pZCBtZXRob2Q0NzcgKCkgeyB9CisgIHZvaWQgbWV0aG9kNDc4ICgpIHsgfQorICB2b2lkIG1ldGhvZDQ3OSAoKSB7IH0KKyAgdm9pZCBtZXRob2Q0ODAgKCkgeyB9CisgIHZvaWQgbWV0aG9kNDgxICgpIHsgfQorICB2b2lkIG1ldGhvZDQ4MiAoKSB7IH0KKyAgdm9pZCBtZXRob2Q0ODMgKCkgeyB9CisgIHZvaWQgbWV0aG9kNDg0ICgpIHsgfQorICB2b2lkIG1ldGhvZDQ4NSAoKSB7IH0KKyAgdm9pZCBtZXRob2Q0ODYgKCkgeyB9CisgIHZvaWQgbWV0aG9kNDg3ICgpIHsgfQorICB2b2lkIG1ldGhvZDQ4OCAoKSB7IH0KKyAgdm9pZCBtZXRob2Q0ODkgKCkgeyB9CisgIHZvaWQgbWV0aG9kNDkwICgpIHsgfQorICB2b2lkIG1ldGhvZDQ5MSAoKSB7IH0KKyAgdm9pZCBtZXRob2Q0OTIgKCkgeyB9CisgIHZvaWQgbWV0aG9kNDkzICgpIHsgfQorICB2b2lkIG1ldGhvZDQ5NCAoKSB7IH0KKyAgdm9pZCBtZXRob2Q0OTUgKCkgeyB9CisgIHZvaWQgbWV0aG9kNDk2ICgpIHsgfQorICB2b2lkIG1ldGhvZDQ5NyAoKSB7IH0KKyAgdm9pZCBtZXRob2Q0OTggKCkgeyB9CisgIHZvaWQgbWV0aG9kNDk5ICgpIHsgfQorICB2b2lkIG1ldGhvZDUwMCAoKSB7IH0KKyAgdm9pZCBtZXRob2Q1MDEgKCkgeyB9CisgIHZvaWQgbWV0aG9kNTAyICgpIHsgfQorICB2b2lkIG1ldGhvZDUwMyAoKSB7IH0KKyAgdm9pZCBtZXRob2Q1MDQgKCkgeyB9CisgIHZvaWQgbWV0aG9kNTA1ICgpIHsgfQorICB2b2lkIG1ldGhvZDUwNiAoKSB7IH0KKyAgdm9pZCBtZXRob2Q1MDcgKCkgeyB9CisgIHZvaWQgbWV0aG9kNTA4ICgpIHsgfQorICB2b2lkIG1ldGhvZDUwOSAoKSB7IH0KKyAgdm9pZCBtZXRob2Q1MTAgKCkgeyB9CisgIHZvaWQgbWV0aG9kNTExICgpIHsgfQorICB2b2lkIG1ldGhvZDUxMiAoKSB7IH0KKyAgdm9pZCBtZXRob2Q1MTMgKCkgeyB9CisgIHZvaWQgbWV0aG9kNTE0ICgpIHsgfQorICB2b2lkIG1ldGhvZDUxNSAoKSB7IH0KKyAgdm9pZCBtZXRob2Q1MTYgKCkgeyB9CisgIHZvaWQgbWV0aG9kNTE3ICgpIHsgfQorICB2b2lkIG1ldGhvZDUxOCAoKSB7IH0KKyAgdm9pZCBtZXRob2Q1MTkgKCkgeyB9CisgIHZvaWQgbWV0aG9kNTIwICgpIHsgfQorICB2b2lkIG1ldGhvZDUyMSAoKSB7IH0KKyAgdm9pZCBtZXRob2Q1MjIgKCkgeyB9CisgIHZvaWQgbWV0aG9kNTIzICgpIHsgfQorICB2b2lkIG1ldGhvZDUyNCAoKSB7IH0KKyAgdm9pZCBtZXRob2Q1MjUgKCkgeyB9CisgIHZvaWQgbWV0aG9kNTI2ICgpIHsgfQorICB2b2lkIG1ldGhvZDUyNyAoKSB7IH0KKyAgdm9pZCBtZXRob2Q1MjggKCkgeyB9CisgIHZvaWQgbWV0aG9kNTI5ICgpIHsgfQorICB2b2lkIG1ldGhvZDUzMCAoKSB7IH0KKyAgdm9pZCBtZXRob2Q1MzEgKCkgeyB9CisgIHZvaWQgbWV0aG9kNTMyICgpIHsgfQorICB2b2lkIG1ldGhvZDUzMyAoKSB7IH0KKyAgdm9pZCBtZXRob2Q1MzQgKCkgeyB9CisgIHZvaWQgbWV0aG9kNTM1ICgpIHsgfQorICB2b2lkIG1ldGhvZDUzNiAoKSB7IH0KKyAgdm9pZCBtZXRob2Q1MzcgKCkgeyB9CisgIHZvaWQgbWV0aG9kNTM4ICgpIHsgfQorICB2b2lkIG1ldGhvZDUzOSAoKSB7IH0KKyAgdm9pZCBtZXRob2Q1NDAgKCkgeyB9CisgIHZvaWQgbWV0aG9kNTQxICgpIHsgfQorICB2b2lkIG1ldGhvZDU0MiAoKSB7IH0KKyAgdm9pZCBtZXRob2Q1NDMgKCkgeyB9CisgIHZvaWQgbWV0aG9kNTQ0ICgpIHsgfQorICB2b2lkIG1ldGhvZDU0NSAoKSB7IH0KKyAgdm9pZCBtZXRob2Q1NDYgKCkgeyB9CisgIHZvaWQgbWV0aG9kNTQ3ICgpIHsgfQorICB2b2lkIG1ldGhvZDU0OCAoKSB7IH0KKyAgdm9pZCBtZXRob2Q1NDkgKCkgeyB9CisgIHZvaWQgbWV0aG9kNTUwICgpIHsgfQorICB2b2lkIG1ldGhvZDU1MSAoKSB7IH0KKyAgdm9pZCBtZXRob2Q1NTIgKCkgeyB9CisgIHZvaWQgbWV0aG9kNTUzICgpIHsgfQorICB2b2lkIG1ldGhvZDU1NCAoKSB7IH0KKyAgdm9pZCBtZXRob2Q1NTUgKCkgeyB9CisgIHZvaWQgbWV0aG9kNTU2ICgpIHsgfQorICB2b2lkIG1ldGhvZDU1NyAoKSB7IH0KKyAgdm9pZCBtZXRob2Q1NTggKCkgeyB9CisgIHZvaWQgbWV0aG9kNTU5ICgpIHsgfQorICB2b2lkIG1ldGhvZDU2MCAoKSB7IH0KKyAgdm9pZCBtZXRob2Q1NjEgKCkgeyB9CisgIHZvaWQgbWV0aG9kNTYyICgpIHsgfQorICB2b2lkIG1ldGhvZDU2MyAoKSB7IH0KKyAgdm9pZCBtZXRob2Q1NjQgKCkgeyB9CisgIHZvaWQgbWV0aG9kNTY1ICgpIHsgfQorICB2b2lkIG1ldGhvZDU2NiAoKSB7IH0KKyAgdm9pZCBtZXRob2Q1NjcgKCkgeyB9CisgIHZvaWQgbWV0aG9kNTY4ICgpIHsgfQorICB2b2lkIG1ldGhvZDU2OSAoKSB7IH0KKyAgdm9pZCBtZXRob2Q1NzAgKCkgeyB9CisgIHZvaWQgbWV0aG9kNTcxICgpIHsgfQorICB2b2lkIG1ldGhvZDU3MiAoKSB7IH0KKyAgdm9pZCBtZXRob2Q1NzMgKCkgeyB9CisgIHZvaWQgbWV0aG9kNTc0ICgpIHsgfQorICB2b2lkIG1ldGhvZDU3NSAoKSB7IH0KKyAgdm9pZCBtZXRob2Q1NzYgKCkgeyB9CisgIHZvaWQgbWV0aG9kNTc3ICgpIHsgfQorICB2b2lkIG1ldGhvZDU3OCAoKSB7IH0KKyAgdm9pZCBtZXRob2Q1NzkgKCkgeyB9CisgIHZvaWQgbWV0aG9kNTgwICgpIHsgfQorICB2b2lkIG1ldGhvZDU4MSAoKSB7IH0KKyAgdm9pZCBtZXRob2Q1ODIgKCkgeyB9CisgIHZvaWQgbWV0aG9kNTgzICgpIHsgfQorICB2b2lkIG1ldGhvZDU4NCAoKSB7IH0KKyAgdm9pZCBtZXRob2Q1ODUgKCkgeyB9CisgIHZvaWQgbWV0aG9kNTg2ICgpIHsgfQorICB2b2lkIG1ldGhvZDU4NyAoKSB7IH0KKyAgdm9pZCBtZXRob2Q1ODggKCkgeyB9CisgIHZvaWQgbWV0aG9kNTg5ICgpIHsgfQorICB2b2lkIG1ldGhvZDU5MCAoKSB7IH0KKyAgdm9pZCBtZXRob2Q1OTEgKCkgeyB9CisgIHZvaWQgbWV0aG9kNTkyICgpIHsgfQorICB2b2lkIG1ldGhvZDU5MyAoKSB7IH0KKyAgdm9pZCBtZXRob2Q1OTQgKCkgeyB9CisgIHZvaWQgbWV0aG9kNTk1ICgpIHsgfQorICB2b2lkIG1ldGhvZDU5NiAoKSB7IH0KKyAgdm9pZCBtZXRob2Q1OTcgKCkgeyB9CisgIHZvaWQgbWV0aG9kNTk4ICgpIHsgfQorICB2b2lkIG1ldGhvZDU5OSAoKSB7IH0KKyAgdm9pZCBtZXRob2Q2MDAgKCkgeyB9CisgIHZvaWQgbWV0aG9kNjAxICgpIHsgfQorICB2b2lkIG1ldGhvZDYwMiAoKSB7IH0KKyAgdm9pZCBtZXRob2Q2MDMgKCkgeyB9CisgIHZvaWQgbWV0aG9kNjA0ICgpIHsgfQorICB2b2lkIG1ldGhvZDYwNSAoKSB7IH0KKyAgdm9pZCBtZXRob2Q2MDYgKCkgeyB9CisgIHZvaWQgbWV0aG9kNjA3ICgpIHsgfQorICB2b2lkIG1ldGhvZDYwOCAoKSB7IH0KKyAgdm9pZCBtZXRob2Q2MDkgKCkgeyB9CisgIHZvaWQgbWV0aG9kNjEwICgpIHsgfQorICB2b2lkIG1ldGhvZDYxMSAoKSB7IH0KKyAgdm9pZCBtZXRob2Q2MTIgKCkgeyB9CisgIHZvaWQgbWV0aG9kNjEzICgpIHsgfQorICB2b2lkIG1ldGhvZDYxNCAoKSB7IH0KKyAgdm9pZCBtZXRob2Q2MTUgKCkgeyB9CisgIHZvaWQgbWV0aG9kNjE2ICgpIHsgfQorICB2b2lkIG1ldGhvZDYxNyAoKSB7IH0KKyAgdm9pZCBtZXRob2Q2MTggKCkgeyB9CisgIHZvaWQgbWV0aG9kNjE5ICgpIHsgfQorICB2b2lkIG1ldGhvZDYyMCAoKSB7IH0KKyAgdm9pZCBtZXRob2Q2MjEgKCkgeyB9CisgIHZvaWQgbWV0aG9kNjIyICgpIHsgfQorICB2b2lkIG1ldGhvZDYyMyAoKSB7IH0KKyAgdm9pZCBtZXRob2Q2MjQgKCkgeyB9CisgIHZvaWQgbWV0aG9kNjI1ICgpIHsgfQorICB2b2lkIG1ldGhvZDYyNiAoKSB7IH0KKyAgdm9pZCBtZXRob2Q2MjcgKCkgeyB9CisgIHZvaWQgbWV0aG9kNjI4ICgpIHsgfQorICB2b2lkIG1ldGhvZDYyOSAoKSB7IH0KKyAgdm9pZCBtZXRob2Q2MzAgKCkgeyB9CisgIHZvaWQgbWV0aG9kNjMxICgpIHsgfQorICB2b2lkIG1ldGhvZDYzMiAoKSB7IH0KKyAgdm9pZCBtZXRob2Q2MzMgKCkgeyB9CisgIHZvaWQgbWV0aG9kNjM0ICgpIHsgfQorICB2b2lkIG1ldGhvZDYzNSAoKSB7IH0KKyAgdm9pZCBtZXRob2Q2MzYgKCkgeyB9CisgIHZvaWQgbWV0aG9kNjM3ICgpIHsgfQorICB2b2lkIG1ldGhvZDYzOCAoKSB7IH0KKyAgdm9pZCBtZXRob2Q2MzkgKCkgeyB9CisgIHZvaWQgbWV0aG9kNjQwICgpIHsgfQorICB2b2lkIG1ldGhvZDY0MSAoKSB7IH0KKyAgdm9pZCBtZXRob2Q2NDIgKCkgeyB9CisgIHZvaWQgbWV0aG9kNjQzICgpIHsgfQorICB2b2lkIG1ldGhvZDY0NCAoKSB7IH0KKyAgdm9pZCBtZXRob2Q2NDUgKCkgeyB9CisgIHZvaWQgbWV0aG9kNjQ2ICgpIHsgfQorICB2b2lkIG1ldGhvZDY0NyAoKSB7IH0KKyAgdm9pZCBtZXRob2Q2NDggKCkgeyB9CisgIHZvaWQgbWV0aG9kNjQ5ICgpIHsgfQorICB2b2lkIG1ldGhvZDY1MCAoKSB7IH0KKyAgdm9pZCBtZXRob2Q2NTEgKCkgeyB9CisgIHZvaWQgbWV0aG9kNjUyICgpIHsgfQorICB2b2lkIG1ldGhvZDY1MyAoKSB7IH0KKyAgdm9pZCBtZXRob2Q2NTQgKCkgeyB9CisgIHZvaWQgbWV0aG9kNjU1ICgpIHsgfQorICB2b2lkIG1ldGhvZDY1NiAoKSB7IH0KKyAgdm9pZCBtZXRob2Q2NTcgKCkgeyB9CisgIHZvaWQgbWV0aG9kNjU4ICgpIHsgfQorICB2b2lkIG1ldGhvZDY1OSAoKSB7IH0KKyAgdm9pZCBtZXRob2Q2NjAgKCkgeyB9CisgIHZvaWQgbWV0aG9kNjYxICgpIHsgfQorICB2b2lkIG1ldGhvZDY2MiAoKSB7IH0KKyAgdm9pZCBtZXRob2Q2NjMgKCkgeyB9CisgIHZvaWQgbWV0aG9kNjY0ICgpIHsgfQorICB2b2lkIG1ldGhvZDY2NSAoKSB7IH0KKyAgdm9pZCBtZXRob2Q2NjYgKCkgeyB9CisgIHZvaWQgbWV0aG9kNjY3ICgpIHsgfQorICB2b2lkIG1ldGhvZDY2OCAoKSB7IH0KKyAgdm9pZCBtZXRob2Q2NjkgKCkgeyB9CisgIHZvaWQgbWV0aG9kNjcwICgpIHsgfQorICB2b2lkIG1ldGhvZDY3MSAoKSB7IH0KKyAgdm9pZCBtZXRob2Q2NzIgKCkgeyB9CisgIHZvaWQgbWV0aG9kNjczICgpIHsgfQorICB2b2lkIG1ldGhvZDY3NCAoKSB7IH0KKyAgdm9pZCBtZXRob2Q2NzUgKCkgeyB9CisgIHZvaWQgbWV0aG9kNjc2ICgpIHsgfQorICB2b2lkIG1ldGhvZDY3NyAoKSB7IH0KKyAgdm9pZCBtZXRob2Q2NzggKCkgeyB9CisgIHZvaWQgbWV0aG9kNjc5ICgpIHsgfQorICB2b2lkIG1ldGhvZDY4MCAoKSB7IH0KKyAgdm9pZCBtZXRob2Q2ODEgKCkgeyB9CisgIHZvaWQgbWV0aG9kNjgyICgpIHsgfQorICB2b2lkIG1ldGhvZDY4MyAoKSB7IH0KKyAgdm9pZCBtZXRob2Q2ODQgKCkgeyB9CisgIHZvaWQgbWV0aG9kNjg1ICgpIHsgfQorICB2b2lkIG1ldGhvZDY4NiAoKSB7IH0KKyAgdm9pZCBtZXRob2Q2ODcgKCkgeyB9CisgIHZvaWQgbWV0aG9kNjg4ICgpIHsgfQorICB2b2lkIG1ldGhvZDY4OSAoKSB7IH0KKyAgdm9pZCBtZXRob2Q2OTAgKCkgeyB9CisgIHZvaWQgbWV0aG9kNjkxICgpIHsgfQorICB2b2lkIG1ldGhvZDY5MiAoKSB7IH0KKyAgdm9pZCBtZXRob2Q2OTMgKCkgeyB9CisgIHZvaWQgbWV0aG9kNjk0ICgpIHsgfQorICB2b2lkIG1ldGhvZDY5NSAoKSB7IH0KKyAgdm9pZCBtZXRob2Q2OTYgKCkgeyB9CisgIHZvaWQgbWV0aG9kNjk3ICgpIHsgfQorICB2b2lkIG1ldGhvZDY5OCAoKSB7IH0KKyAgdm9pZCBtZXRob2Q2OTkgKCkgeyB9CisgIHZvaWQgbWV0aG9kNzAwICgpIHsgfQorICB2b2lkIG1ldGhvZDcwMSAoKSB7IH0KKyAgdm9pZCBtZXRob2Q3MDIgKCkgeyB9CisgIHZvaWQgbWV0aG9kNzAzICgpIHsgfQorICB2b2lkIG1ldGhvZDcwNCAoKSB7IH0KKyAgdm9pZCBtZXRob2Q3MDUgKCkgeyB9CisgIHZvaWQgbWV0aG9kNzA2ICgpIHsgfQorICB2b2lkIG1ldGhvZDcwNyAoKSB7IH0KKyAgdm9pZCBtZXRob2Q3MDggKCkgeyB9CisgIHZvaWQgbWV0aG9kNzA5ICgpIHsgfQorICB2b2lkIG1ldGhvZDcxMCAoKSB7IH0KKyAgdm9pZCBtZXRob2Q3MTEgKCkgeyB9CisgIHZvaWQgbWV0aG9kNzEyICgpIHsgfQorICB2b2lkIG1ldGhvZDcxMyAoKSB7IH0KKyAgdm9pZCBtZXRob2Q3MTQgKCkgeyB9CisgIHZvaWQgbWV0aG9kNzE1ICgpIHsgfQorICB2b2lkIG1ldGhvZDcxNiAoKSB7IH0KKyAgdm9pZCBtZXRob2Q3MTcgKCkgeyB9CisgIHZvaWQgbWV0aG9kNzE4ICgpIHsgfQorICB2b2lkIG1ldGhvZDcxOSAoKSB7IH0KKyAgdm9pZCBtZXRob2Q3MjAgKCkgeyB9CisgIHZvaWQgbWV0aG9kNzIxICgpIHsgfQorICB2b2lkIG1ldGhvZDcyMiAoKSB7IH0KKyAgdm9pZCBtZXRob2Q3MjMgKCkgeyB9CisgIHZvaWQgbWV0aG9kNzI0ICgpIHsgfQorICB2b2lkIG1ldGhvZDcyNSAoKSB7IH0KKyAgdm9pZCBtZXRob2Q3MjYgKCkgeyB9CisgIHZvaWQgbWV0aG9kNzI3ICgpIHsgfQorICB2b2lkIG1ldGhvZDcyOCAoKSB7IH0KKyAgdm9pZCBtZXRob2Q3MjkgKCkgeyB9CisgIHZvaWQgbWV0aG9kNzMwICgpIHsgfQorICB2b2lkIG1ldGhvZDczMSAoKSB7IH0KKyAgdm9pZCBtZXRob2Q3MzIgKCkgeyB9CisgIHZvaWQgbWV0aG9kNzMzICgpIHsgfQorICB2b2lkIG1ldGhvZDczNCAoKSB7IH0KKyAgdm9pZCBtZXRob2Q3MzUgKCkgeyB9CisgIHZvaWQgbWV0aG9kNzM2ICgpIHsgfQorICB2b2lkIG1ldGhvZDczNyAoKSB7IH0KKyAgdm9pZCBtZXRob2Q3MzggKCkgeyB9CisgIHZvaWQgbWV0aG9kNzM5ICgpIHsgfQorICB2b2lkIG1ldGhvZDc0MCAoKSB7IH0KKyAgdm9pZCBtZXRob2Q3NDEgKCkgeyB9CisgIHZvaWQgbWV0aG9kNzQyICgpIHsgfQorICB2b2lkIG1ldGhvZDc0MyAoKSB7IH0KKyAgdm9pZCBtZXRob2Q3NDQgKCkgeyB9CisgIHZvaWQgbWV0aG9kNzQ1ICgpIHsgfQorICB2b2lkIG1ldGhvZDc0NiAoKSB7IH0KKyAgdm9pZCBtZXRob2Q3NDcgKCkgeyB9CisgIHZvaWQgbWV0aG9kNzQ4ICgpIHsgfQorICB2b2lkIG1ldGhvZDc0OSAoKSB7IH0KKyAgdm9pZCBtZXRob2Q3NTAgKCkgeyB9CisgIHZvaWQgbWV0aG9kNzUxICgpIHsgfQorICB2b2lkIG1ldGhvZDc1MiAoKSB7IH0KKyAgdm9pZCBtZXRob2Q3NTMgKCkgeyB9CisgIHZvaWQgbWV0aG9kNzU0ICgpIHsgfQorICB2b2lkIG1ldGhvZDc1NSAoKSB7IH0KKyAgdm9pZCBtZXRob2Q3NTYgKCkgeyB9CisgIHZvaWQgbWV0aG9kNzU3ICgpIHsgfQorICB2b2lkIG1ldGhvZDc1OCAoKSB7IH0KKyAgdm9pZCBtZXRob2Q3NTkgKCkgeyB9CisgIHZvaWQgbWV0aG9kNzYwICgpIHsgfQorICB2b2lkIG1ldGhvZDc2MSAoKSB7IH0KKyAgdm9pZCBtZXRob2Q3NjIgKCkgeyB9CisgIHZvaWQgbWV0aG9kNzYzICgpIHsgfQorICB2b2lkIG1ldGhvZDc2NCAoKSB7IH0KKyAgdm9pZCBtZXRob2Q3NjUgKCkgeyB9CisgIHZvaWQgbWV0aG9kNzY2ICgpIHsgfQorICB2b2lkIG1ldGhvZDc2NyAoKSB7IH0KKyAgdm9pZCBtZXRob2Q3NjggKCkgeyB9CisgIHZvaWQgbWV0aG9kNzY5ICgpIHsgfQorICB2b2lkIG1ldGhvZDc3MCAoKSB7IH0KKyAgdm9pZCBtZXRob2Q3NzEgKCkgeyB9CisgIHZvaWQgbWV0aG9kNzcyICgpIHsgfQorICB2b2lkIG1ldGhvZDc3MyAoKSB7IH0KKyAgdm9pZCBtZXRob2Q3NzQgKCkgeyB9CisgIHZvaWQgbWV0aG9kNzc1ICgpIHsgfQorICB2b2lkIG1ldGhvZDc3NiAoKSB7IH0KKyAgdm9pZCBtZXRob2Q3NzcgKCkgeyB9CisgIHZvaWQgbWV0aG9kNzc4ICgpIHsgfQorICB2b2lkIG1ldGhvZDc3OSAoKSB7IH0KKyAgdm9pZCBtZXRob2Q3ODAgKCkgeyB9CisgIHZvaWQgbWV0aG9kNzgxICgpIHsgfQorICB2b2lkIG1ldGhvZDc4MiAoKSB7IH0KKyAgdm9pZCBtZXRob2Q3ODMgKCkgeyB9CisgIHZvaWQgbWV0aG9kNzg0ICgpIHsgfQorICB2b2lkIG1ldGhvZDc4NSAoKSB7IH0KKyAgdm9pZCBtZXRob2Q3ODYgKCkgeyB9CisgIHZvaWQgbWV0aG9kNzg3ICgpIHsgfQorICB2b2lkIG1ldGhvZDc4OCAoKSB7IH0KKyAgdm9pZCBtZXRob2Q3ODkgKCkgeyB9CisgIHZvaWQgbWV0aG9kNzkwICgpIHsgfQorICB2b2lkIG1ldGhvZDc5MSAoKSB7IH0KKyAgdm9pZCBtZXRob2Q3OTIgKCkgeyB9CisgIHZvaWQgbWV0aG9kNzkzICgpIHsgfQorICB2b2lkIG1ldGhvZDc5NCAoKSB7IH0KKyAgdm9pZCBtZXRob2Q3OTUgKCkgeyB9CisgIHZvaWQgbWV0aG9kNzk2ICgpIHsgfQorICB2b2lkIG1ldGhvZDc5NyAoKSB7IH0KKyAgdm9pZCBtZXRob2Q3OTggKCkgeyB9CisgIHZvaWQgbWV0aG9kNzk5ICgpIHsgfQorICB2b2lkIG1ldGhvZDgwMCAoKSB7IH0KKyAgdm9pZCBtZXRob2Q4MDEgKCkgeyB9CisgIHZvaWQgbWV0aG9kODAyICgpIHsgfQorICB2b2lkIG1ldGhvZDgwMyAoKSB7IH0KKyAgdm9pZCBtZXRob2Q4MDQgKCkgeyB9CisgIHZvaWQgbWV0aG9kODA1ICgpIHsgfQorICB2b2lkIG1ldGhvZDgwNiAoKSB7IH0KKyAgdm9pZCBtZXRob2Q4MDcgKCkgeyB9CisgIHZvaWQgbWV0aG9kODA4ICgpIHsgfQorICB2b2lkIG1ldGhvZDgwOSAoKSB7IH0KKyAgdm9pZCBtZXRob2Q4MTAgKCkgeyB9CisgIHZvaWQgbWV0aG9kODExICgpIHsgfQorICB2b2lkIG1ldGhvZDgxMiAoKSB7IH0KKyAgdm9pZCBtZXRob2Q4MTMgKCkgeyB9CisgIHZvaWQgbWV0aG9kODE0ICgpIHsgfQorICB2b2lkIG1ldGhvZDgxNSAoKSB7IH0KKyAgdm9pZCBtZXRob2Q4MTYgKCkgeyB9CisgIHZvaWQgbWV0aG9kODE3ICgpIHsgfQorICB2b2lkIG1ldGhvZDgxOCAoKSB7IH0KKyAgdm9pZCBtZXRob2Q4MTkgKCkgeyB9CisgIHZvaWQgbWV0aG9kODIwICgpIHsgfQorICB2b2lkIG1ldGhvZDgyMSAoKSB7IH0KKyAgdm9pZCBtZXRob2Q4MjIgKCkgeyB9CisgIHZvaWQgbWV0aG9kODIzICgpIHsgfQorICB2b2lkIG1ldGhvZDgyNCAoKSB7IH0KKyAgdm9pZCBtZXRob2Q4MjUgKCkgeyB9CisgIHZvaWQgbWV0aG9kODI2ICgpIHsgfQorICB2b2lkIG1ldGhvZDgyNyAoKSB7IH0KKyAgdm9pZCBtZXRob2Q4MjggKCkgeyB9CisgIHZvaWQgbWV0aG9kODI5ICgpIHsgfQorICB2b2lkIG1ldGhvZDgzMCAoKSB7IH0KKyAgdm9pZCBtZXRob2Q4MzEgKCkgeyB9CisgIHZvaWQgbWV0aG9kODMyICgpIHsgfQorICB2b2lkIG1ldGhvZDgzMyAoKSB7IH0KKyAgdm9pZCBtZXRob2Q4MzQgKCkgeyB9CisgIHZvaWQgbWV0aG9kODM1ICgpIHsgfQorICB2b2lkIG1ldGhvZDgzNiAoKSB7IH0KKyAgdm9pZCBtZXRob2Q4MzcgKCkgeyB9CisgIHZvaWQgbWV0aG9kODM4ICgpIHsgfQorICB2b2lkIG1ldGhvZDgzOSAoKSB7IH0KKyAgdm9pZCBtZXRob2Q4NDAgKCkgeyB9CisgIHZvaWQgbWV0aG9kODQxICgpIHsgfQorICB2b2lkIG1ldGhvZDg0MiAoKSB7IH0KKyAgdm9pZCBtZXRob2Q4NDMgKCkgeyB9CisgIHZvaWQgbWV0aG9kODQ0ICgpIHsgfQorICB2b2lkIG1ldGhvZDg0NSAoKSB7IH0KKyAgdm9pZCBtZXRob2Q4NDYgKCkgeyB9CisgIHZvaWQgbWV0aG9kODQ3ICgpIHsgfQorICB2b2lkIG1ldGhvZDg0OCAoKSB7IH0KKyAgdm9pZCBtZXRob2Q4NDkgKCkgeyB9CisgIHZvaWQgbWV0aG9kODUwICgpIHsgfQorICB2b2lkIG1ldGhvZDg1MSAoKSB7IH0KKyAgdm9pZCBtZXRob2Q4NTIgKCkgeyB9CisgIHZvaWQgbWV0aG9kODUzICgpIHsgfQorICB2b2lkIG1ldGhvZDg1NCAoKSB7IH0KKyAgdm9pZCBtZXRob2Q4NTUgKCkgeyB9CisgIHZvaWQgbWV0aG9kODU2ICgpIHsgfQorICB2b2lkIG1ldGhvZDg1NyAoKSB7IH0KKyAgdm9pZCBtZXRob2Q4NTggKCkgeyB9CisgIHZvaWQgbWV0aG9kODU5ICgpIHsgfQorICB2b2lkIG1ldGhvZDg2MCAoKSB7IH0KKyAgdm9pZCBtZXRob2Q4NjEgKCkgeyB9CisgIHZvaWQgbWV0aG9kODYyICgpIHsgfQorICB2b2lkIG1ldGhvZDg2MyAoKSB7IH0KKyAgdm9pZCBtZXRob2Q4NjQgKCkgeyB9CisgIHZvaWQgbWV0aG9kODY1ICgpIHsgfQorICB2b2lkIG1ldGhvZDg2NiAoKSB7IH0KKyAgdm9pZCBtZXRob2Q4NjcgKCkgeyB9CisgIHZvaWQgbWV0aG9kODY4ICgpIHsgfQorICB2b2lkIG1ldGhvZDg2OSAoKSB7IH0KKyAgdm9pZCBtZXRob2Q4NzAgKCkgeyB9CisgIHZvaWQgbWV0aG9kODcxICgpIHsgfQorICB2b2lkIG1ldGhvZDg3MiAoKSB7IH0KKyAgdm9pZCBtZXRob2Q4NzMgKCkgeyB9CisgIHZvaWQgbWV0aG9kODc0ICgpIHsgfQorICB2b2lkIG1ldGhvZDg3NSAoKSB7IH0KKyAgdm9pZCBtZXRob2Q4NzYgKCkgeyB9CisgIHZvaWQgbWV0aG9kODc3ICgpIHsgfQorICB2b2lkIG1ldGhvZDg3OCAoKSB7IH0KKyAgdm9pZCBtZXRob2Q4NzkgKCkgeyB9CisgIHZvaWQgbWV0aG9kODgwICgpIHsgfQorICB2b2lkIG1ldGhvZDg4MSAoKSB7IH0KKyAgdm9pZCBtZXRob2Q4ODIgKCkgeyB9CisgIHZvaWQgbWV0aG9kODgzICgpIHsgfQorICB2b2lkIG1ldGhvZDg4NCAoKSB7IH0KKyAgdm9pZCBtZXRob2Q4ODUgKCkgeyB9CisgIHZvaWQgbWV0aG9kODg2ICgpIHsgfQorICB2b2lkIG1ldGhvZDg4NyAoKSB7IH0KKyAgdm9pZCBtZXRob2Q4ODggKCkgeyB9CisgIHZvaWQgbWV0aG9kODg5ICgpIHsgfQorICB2b2lkIG1ldGhvZDg5MCAoKSB7IH0KKyAgdm9pZCBtZXRob2Q4OTEgKCkgeyB9CisgIHZvaWQgbWV0aG9kODkyICgpIHsgfQorICB2b2lkIG1ldGhvZDg5MyAoKSB7IH0KKyAgdm9pZCBtZXRob2Q4OTQgKCkgeyB9CisgIHZvaWQgbWV0aG9kODk1ICgpIHsgfQorICB2b2lkIG1ldGhvZDg5NiAoKSB7IH0KKyAgdm9pZCBtZXRob2Q4OTcgKCkgeyB9CisgIHZvaWQgbWV0aG9kODk4ICgpIHsgfQorICB2b2lkIG1ldGhvZDg5OSAoKSB7IH0KKyAgdm9pZCBtZXRob2Q5MDAgKCkgeyB9CisgIHZvaWQgbWV0aG9kOTAxICgpIHsgfQorICB2b2lkIG1ldGhvZDkwMiAoKSB7IH0KKyAgdm9pZCBtZXRob2Q5MDMgKCkgeyB9CisgIHZvaWQgbWV0aG9kOTA0ICgpIHsgfQorICB2b2lkIG1ldGhvZDkwNSAoKSB7IH0KKyAgdm9pZCBtZXRob2Q5MDYgKCkgeyB9CisgIHZvaWQgbWV0aG9kOTA3ICgpIHsgfQorICB2b2lkIG1ldGhvZDkwOCAoKSB7IH0KKyAgdm9pZCBtZXRob2Q5MDkgKCkgeyB9CisgIHZvaWQgbWV0aG9kOTEwICgpIHsgfQorICB2b2lkIG1ldGhvZDkxMSAoKSB7IH0KKyAgdm9pZCBtZXRob2Q5MTIgKCkgeyB9CisgIHZvaWQgbWV0aG9kOTEzICgpIHsgfQorICB2b2lkIG1ldGhvZDkxNCAoKSB7IH0KKyAgdm9pZCBtZXRob2Q5MTUgKCkgeyB9CisgIHZvaWQgbWV0aG9kOTE2ICgpIHsgfQorICB2b2lkIG1ldGhvZDkxNyAoKSB7IH0KKyAgdm9pZCBtZXRob2Q5MTggKCkgeyB9CisgIHZvaWQgbWV0aG9kOTE5ICgpIHsgfQorICB2b2lkIG1ldGhvZDkyMCAoKSB7IH0KKyAgdm9pZCBtZXRob2Q5MjEgKCkgeyB9CisgIHZvaWQgbWV0aG9kOTIyICgpIHsgfQorICB2b2lkIG1ldGhvZDkyMyAoKSB7IH0KKyAgdm9pZCBtZXRob2Q5MjQgKCkgeyB9CisgIHZvaWQgbWV0aG9kOTI1ICgpIHsgfQorICB2b2lkIG1ldGhvZDkyNiAoKSB7IH0KKyAgdm9pZCBtZXRob2Q5MjcgKCkgeyB9CisgIHZvaWQgbWV0aG9kOTI4ICgpIHsgfQorICB2b2lkIG1ldGhvZDkyOSAoKSB7IH0KKyAgdm9pZCBtZXRob2Q5MzAgKCkgeyB9CisgIHZvaWQgbWV0aG9kOTMxICgpIHsgfQorICB2b2lkIG1ldGhvZDkzMiAoKSB7IH0KKyAgdm9pZCBtZXRob2Q5MzMgKCkgeyB9CisgIHZvaWQgbWV0aG9kOTM0ICgpIHsgfQorICB2b2lkIG1ldGhvZDkzNSAoKSB7IH0KKyAgdm9pZCBtZXRob2Q5MzYgKCkgeyB9CisgIHZvaWQgbWV0aG9kOTM3ICgpIHsgfQorICB2b2lkIG1ldGhvZDkzOCAoKSB7IH0KKyAgdm9pZCBtZXRob2Q5MzkgKCkgeyB9CisgIHZvaWQgbWV0aG9kOTQwICgpIHsgfQorICB2b2lkIG1ldGhvZDk0MSAoKSB7IH0KKyAgdm9pZCBtZXRob2Q5NDIgKCkgeyB9CisgIHZvaWQgbWV0aG9kOTQzICgpIHsgfQorICB2b2lkIG1ldGhvZDk0NCAoKSB7IH0KKyAgdm9pZCBtZXRob2Q5NDUgKCkgeyB9CisgIHZvaWQgbWV0aG9kOTQ2ICgpIHsgfQorICB2b2lkIG1ldGhvZDk0NyAoKSB7IH0KKyAgdm9pZCBtZXRob2Q5NDggKCkgeyB9CisgIHZvaWQgbWV0aG9kOTQ5ICgpIHsgfQorICB2b2lkIG1ldGhvZDk1MCAoKSB7IH0KKyAgdm9pZCBtZXRob2Q5NTEgKCkgeyB9CisgIHZvaWQgbWV0aG9kOTUyICgpIHsgfQorICB2b2lkIG1ldGhvZDk1MyAoKSB7IH0KKyAgdm9pZCBtZXRob2Q5NTQgKCkgeyB9CisgIHZvaWQgbWV0aG9kOTU1ICgpIHsgfQorICB2b2lkIG1ldGhvZDk1NiAoKSB7IH0KKyAgdm9pZCBtZXRob2Q5NTcgKCkgeyB9CisgIHZvaWQgbWV0aG9kOTU4ICgpIHsgfQorICB2b2lkIG1ldGhvZDk1OSAoKSB7IH0KKyAgdm9pZCBtZXRob2Q5NjAgKCkgeyB9CisgIHZvaWQgbWV0aG9kOTYxICgpIHsgfQorICB2b2lkIG1ldGhvZDk2MiAoKSB7IH0KKyAgdm9pZCBtZXRob2Q5NjMgKCkgeyB9CisgIHZvaWQgbWV0aG9kOTY0ICgpIHsgfQorICB2b2lkIG1ldGhvZDk2NSAoKSB7IH0KKyAgdm9pZCBtZXRob2Q5NjYgKCkgeyB9CisgIHZvaWQgbWV0aG9kOTY3ICgpIHsgfQorICB2b2lkIG1ldGhvZDk2OCAoKSB7IH0KKyAgdm9pZCBtZXRob2Q5NjkgKCkgeyB9CisgIHZvaWQgbWV0aG9kOTcwICgpIHsgfQorICB2b2lkIG1ldGhvZDk3MSAoKSB7IH0KKyAgdm9pZCBtZXRob2Q5NzIgKCkgeyB9CisgIHZvaWQgbWV0aG9kOTczICgpIHsgfQorICB2b2lkIG1ldGhvZDk3NCAoKSB7IH0KKyAgdm9pZCBtZXRob2Q5NzUgKCkgeyB9CisgIHZvaWQgbWV0aG9kOTc2ICgpIHsgfQorICB2b2lkIG1ldGhvZDk3NyAoKSB7IH0KKyAgdm9pZCBtZXRob2Q5NzggKCkgeyB9CisgIHZvaWQgbWV0aG9kOTc5ICgpIHsgfQorICB2b2lkIG1ldGhvZDk4MCAoKSB7IH0KKyAgdm9pZCBtZXRob2Q5ODEgKCkgeyB9CisgIHZvaWQgbWV0aG9kOTgyICgpIHsgfQorICB2b2lkIG1ldGhvZDk4MyAoKSB7IH0KKyAgdm9pZCBtZXRob2Q5ODQgKCkgeyB9CisgIHZvaWQgbWV0aG9kOTg1ICgpIHsgfQorICB2b2lkIG1ldGhvZDk4NiAoKSB7IH0KKyAgdm9pZCBtZXRob2Q5ODcgKCkgeyB9CisgIHZvaWQgbWV0aG9kOTg4ICgpIHsgfQorICB2b2lkIG1ldGhvZDk4OSAoKSB7IH0KKyAgdm9pZCBtZXRob2Q5OTAgKCkgeyB9CisgIHZvaWQgbWV0aG9kOTkxICgpIHsgfQorICB2b2lkIG1ldGhvZDk5MiAoKSB7IH0KKyAgdm9pZCBtZXRob2Q5OTMgKCkgeyB9CisgIHZvaWQgbWV0aG9kOTk0ICgpIHsgfQorICB2b2lkIG1ldGhvZDk5NSAoKSB7IH0KKyAgdm9pZCBtZXRob2Q5OTYgKCkgeyB9CisgIHZvaWQgbWV0aG9kOTk3ICgpIHsgfQorICB2b2lkIG1ldGhvZDk5OCAoKSB7IH0KKyAgdm9pZCBtZXRob2Q5OTkgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTAwMCAoKSB7IH0KKyAgdm9pZCBtZXRob2QxMDAxICgpIHsgfQorICB2b2lkIG1ldGhvZDEwMDIgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTAwMyAoKSB7IH0KKyAgdm9pZCBtZXRob2QxMDA0ICgpIHsgfQorICB2b2lkIG1ldGhvZDEwMDUgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTAwNiAoKSB7IH0KKyAgdm9pZCBtZXRob2QxMDA3ICgpIHsgfQorICB2b2lkIG1ldGhvZDEwMDggKCkgeyB9CisgIHZvaWQgbWV0aG9kMTAwOSAoKSB7IH0KKyAgdm9pZCBtZXRob2QxMDEwICgpIHsgfQorICB2b2lkIG1ldGhvZDEwMTEgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTAxMiAoKSB7IH0KKyAgdm9pZCBtZXRob2QxMDEzICgpIHsgfQorICB2b2lkIG1ldGhvZDEwMTQgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTAxNSAoKSB7IH0KKyAgdm9pZCBtZXRob2QxMDE2ICgpIHsgfQorICB2b2lkIG1ldGhvZDEwMTcgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTAxOCAoKSB7IH0KKyAgdm9pZCBtZXRob2QxMDE5ICgpIHsgfQorICB2b2lkIG1ldGhvZDEwMjAgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTAyMSAoKSB7IH0KKyAgdm9pZCBtZXRob2QxMDIyICgpIHsgfQorICB2b2lkIG1ldGhvZDEwMjMgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTAyNCAoKSB7IH0KKyAgdm9pZCBtZXRob2QxMDI1ICgpIHsgfQorICB2b2lkIG1ldGhvZDEwMjYgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTAyNyAoKSB7IH0KKyAgdm9pZCBtZXRob2QxMDI4ICgpIHsgfQorICB2b2lkIG1ldGhvZDEwMjkgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTAzMCAoKSB7IH0KKyAgdm9pZCBtZXRob2QxMDMxICgpIHsgfQorICB2b2lkIG1ldGhvZDEwMzIgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTAzMyAoKSB7IH0KKyAgdm9pZCBtZXRob2QxMDM0ICgpIHsgfQorICB2b2lkIG1ldGhvZDEwMzUgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTAzNiAoKSB7IH0KKyAgdm9pZCBtZXRob2QxMDM3ICgpIHsgfQorICB2b2lkIG1ldGhvZDEwMzggKCkgeyB9CisgIHZvaWQgbWV0aG9kMTAzOSAoKSB7IH0KKyAgdm9pZCBtZXRob2QxMDQwICgpIHsgfQorICB2b2lkIG1ldGhvZDEwNDEgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTA0MiAoKSB7IH0KKyAgdm9pZCBtZXRob2QxMDQzICgpIHsgfQorICB2b2lkIG1ldGhvZDEwNDQgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTA0NSAoKSB7IH0KKyAgdm9pZCBtZXRob2QxMDQ2ICgpIHsgfQorICB2b2lkIG1ldGhvZDEwNDcgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTA0OCAoKSB7IH0KKyAgdm9pZCBtZXRob2QxMDQ5ICgpIHsgfQorICB2b2lkIG1ldGhvZDEwNTAgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTA1MSAoKSB7IH0KKyAgdm9pZCBtZXRob2QxMDUyICgpIHsgfQorICB2b2lkIG1ldGhvZDEwNTMgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTA1NCAoKSB7IH0KKyAgdm9pZCBtZXRob2QxMDU1ICgpIHsgfQorICB2b2lkIG1ldGhvZDEwNTYgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTA1NyAoKSB7IH0KKyAgdm9pZCBtZXRob2QxMDU4ICgpIHsgfQorICB2b2lkIG1ldGhvZDEwNTkgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTA2MCAoKSB7IH0KKyAgdm9pZCBtZXRob2QxMDYxICgpIHsgfQorICB2b2lkIG1ldGhvZDEwNjIgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTA2MyAoKSB7IH0KKyAgdm9pZCBtZXRob2QxMDY0ICgpIHsgfQorICB2b2lkIG1ldGhvZDEwNjUgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTA2NiAoKSB7IH0KKyAgdm9pZCBtZXRob2QxMDY3ICgpIHsgfQorICB2b2lkIG1ldGhvZDEwNjggKCkgeyB9CisgIHZvaWQgbWV0aG9kMTA2OSAoKSB7IH0KKyAgdm9pZCBtZXRob2QxMDcwICgpIHsgfQorICB2b2lkIG1ldGhvZDEwNzEgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTA3MiAoKSB7IH0KKyAgdm9pZCBtZXRob2QxMDczICgpIHsgfQorICB2b2lkIG1ldGhvZDEwNzQgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTA3NSAoKSB7IH0KKyAgdm9pZCBtZXRob2QxMDc2ICgpIHsgfQorICB2b2lkIG1ldGhvZDEwNzcgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTA3OCAoKSB7IH0KKyAgdm9pZCBtZXRob2QxMDc5ICgpIHsgfQorICB2b2lkIG1ldGhvZDEwODAgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTA4MSAoKSB7IH0KKyAgdm9pZCBtZXRob2QxMDgyICgpIHsgfQorICB2b2lkIG1ldGhvZDEwODMgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTA4NCAoKSB7IH0KKyAgdm9pZCBtZXRob2QxMDg1ICgpIHsgfQorICB2b2lkIG1ldGhvZDEwODYgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTA4NyAoKSB7IH0KKyAgdm9pZCBtZXRob2QxMDg4ICgpIHsgfQorICB2b2lkIG1ldGhvZDEwODkgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTA5MCAoKSB7IH0KKyAgdm9pZCBtZXRob2QxMDkxICgpIHsgfQorICB2b2lkIG1ldGhvZDEwOTIgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTA5MyAoKSB7IH0KKyAgdm9pZCBtZXRob2QxMDk0ICgpIHsgfQorICB2b2lkIG1ldGhvZDEwOTUgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTA5NiAoKSB7IH0KKyAgdm9pZCBtZXRob2QxMDk3ICgpIHsgfQorICB2b2lkIG1ldGhvZDEwOTggKCkgeyB9CisgIHZvaWQgbWV0aG9kMTA5OSAoKSB7IH0KKyAgdm9pZCBtZXRob2QxMTAwICgpIHsgfQorICB2b2lkIG1ldGhvZDExMDEgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTEwMiAoKSB7IH0KKyAgdm9pZCBtZXRob2QxMTAzICgpIHsgfQorICB2b2lkIG1ldGhvZDExMDQgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTEwNSAoKSB7IH0KKyAgdm9pZCBtZXRob2QxMTA2ICgpIHsgfQorICB2b2lkIG1ldGhvZDExMDcgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTEwOCAoKSB7IH0KKyAgdm9pZCBtZXRob2QxMTA5ICgpIHsgfQorICB2b2lkIG1ldGhvZDExMTAgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTExMSAoKSB7IH0KKyAgdm9pZCBtZXRob2QxMTEyICgpIHsgfQorICB2b2lkIG1ldGhvZDExMTMgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTExNCAoKSB7IH0KKyAgdm9pZCBtZXRob2QxMTE1ICgpIHsgfQorICB2b2lkIG1ldGhvZDExMTYgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTExNyAoKSB7IH0KKyAgdm9pZCBtZXRob2QxMTE4ICgpIHsgfQorICB2b2lkIG1ldGhvZDExMTkgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTEyMCAoKSB7IH0KKyAgdm9pZCBtZXRob2QxMTIxICgpIHsgfQorICB2b2lkIG1ldGhvZDExMjIgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTEyMyAoKSB7IH0KKyAgdm9pZCBtZXRob2QxMTI0ICgpIHsgfQorICB2b2lkIG1ldGhvZDExMjUgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTEyNiAoKSB7IH0KKyAgdm9pZCBtZXRob2QxMTI3ICgpIHsgfQorICB2b2lkIG1ldGhvZDExMjggKCkgeyB9CisgIHZvaWQgbWV0aG9kMTEyOSAoKSB7IH0KKyAgdm9pZCBtZXRob2QxMTMwICgpIHsgfQorICB2b2lkIG1ldGhvZDExMzEgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTEzMiAoKSB7IH0KKyAgdm9pZCBtZXRob2QxMTMzICgpIHsgfQorICB2b2lkIG1ldGhvZDExMzQgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTEzNSAoKSB7IH0KKyAgdm9pZCBtZXRob2QxMTM2ICgpIHsgfQorICB2b2lkIG1ldGhvZDExMzcgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTEzOCAoKSB7IH0KKyAgdm9pZCBtZXRob2QxMTM5ICgpIHsgfQorICB2b2lkIG1ldGhvZDExNDAgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTE0MSAoKSB7IH0KKyAgdm9pZCBtZXRob2QxMTQyICgpIHsgfQorICB2b2lkIG1ldGhvZDExNDMgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTE0NCAoKSB7IH0KKyAgdm9pZCBtZXRob2QxMTQ1ICgpIHsgfQorICB2b2lkIG1ldGhvZDExNDYgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTE0NyAoKSB7IH0KKyAgdm9pZCBtZXRob2QxMTQ4ICgpIHsgfQorICB2b2lkIG1ldGhvZDExNDkgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTE1MCAoKSB7IH0KKyAgdm9pZCBtZXRob2QxMTUxICgpIHsgfQorICB2b2lkIG1ldGhvZDExNTIgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTE1MyAoKSB7IH0KKyAgdm9pZCBtZXRob2QxMTU0ICgpIHsgfQorICB2b2lkIG1ldGhvZDExNTUgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTE1NiAoKSB7IH0KKyAgdm9pZCBtZXRob2QxMTU3ICgpIHsgfQorICB2b2lkIG1ldGhvZDExNTggKCkgeyB9CisgIHZvaWQgbWV0aG9kMTE1OSAoKSB7IH0KKyAgdm9pZCBtZXRob2QxMTYwICgpIHsgfQorICB2b2lkIG1ldGhvZDExNjEgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTE2MiAoKSB7IH0KKyAgdm9pZCBtZXRob2QxMTYzICgpIHsgfQorICB2b2lkIG1ldGhvZDExNjQgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTE2NSAoKSB7IH0KKyAgdm9pZCBtZXRob2QxMTY2ICgpIHsgfQorICB2b2lkIG1ldGhvZDExNjcgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTE2OCAoKSB7IH0KKyAgdm9pZCBtZXRob2QxMTY5ICgpIHsgfQorICB2b2lkIG1ldGhvZDExNzAgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTE3MSAoKSB7IH0KKyAgdm9pZCBtZXRob2QxMTcyICgpIHsgfQorICB2b2lkIG1ldGhvZDExNzMgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTE3NCAoKSB7IH0KKyAgdm9pZCBtZXRob2QxMTc1ICgpIHsgfQorICB2b2lkIG1ldGhvZDExNzYgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTE3NyAoKSB7IH0KKyAgdm9pZCBtZXRob2QxMTc4ICgpIHsgfQorICB2b2lkIG1ldGhvZDExNzkgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTE4MCAoKSB7IH0KKyAgdm9pZCBtZXRob2QxMTgxICgpIHsgfQorICB2b2lkIG1ldGhvZDExODIgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTE4MyAoKSB7IH0KKyAgdm9pZCBtZXRob2QxMTg0ICgpIHsgfQorICB2b2lkIG1ldGhvZDExODUgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTE4NiAoKSB7IH0KKyAgdm9pZCBtZXRob2QxMTg3ICgpIHsgfQorICB2b2lkIG1ldGhvZDExODggKCkgeyB9CisgIHZvaWQgbWV0aG9kMTE4OSAoKSB7IH0KKyAgdm9pZCBtZXRob2QxMTkwICgpIHsgfQorICB2b2lkIG1ldGhvZDExOTEgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTE5MiAoKSB7IH0KKyAgdm9pZCBtZXRob2QxMTkzICgpIHsgfQorICB2b2lkIG1ldGhvZDExOTQgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTE5NSAoKSB7IH0KKyAgdm9pZCBtZXRob2QxMTk2ICgpIHsgfQorICB2b2lkIG1ldGhvZDExOTcgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTE5OCAoKSB7IH0KKyAgdm9pZCBtZXRob2QxMTk5ICgpIHsgfQorICB2b2lkIG1ldGhvZDEyMDAgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTIwMSAoKSB7IH0KKyAgdm9pZCBtZXRob2QxMjAyICgpIHsgfQorICB2b2lkIG1ldGhvZDEyMDMgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTIwNCAoKSB7IH0KKyAgdm9pZCBtZXRob2QxMjA1ICgpIHsgfQorICB2b2lkIG1ldGhvZDEyMDYgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTIwNyAoKSB7IH0KKyAgdm9pZCBtZXRob2QxMjA4ICgpIHsgfQorICB2b2lkIG1ldGhvZDEyMDkgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTIxMCAoKSB7IH0KKyAgdm9pZCBtZXRob2QxMjExICgpIHsgfQorICB2b2lkIG1ldGhvZDEyMTIgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTIxMyAoKSB7IH0KKyAgdm9pZCBtZXRob2QxMjE0ICgpIHsgfQorICB2b2lkIG1ldGhvZDEyMTUgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTIxNiAoKSB7IH0KKyAgdm9pZCBtZXRob2QxMjE3ICgpIHsgfQorICB2b2lkIG1ldGhvZDEyMTggKCkgeyB9CisgIHZvaWQgbWV0aG9kMTIxOSAoKSB7IH0KKyAgdm9pZCBtZXRob2QxMjIwICgpIHsgfQorICB2b2lkIG1ldGhvZDEyMjEgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTIyMiAoKSB7IH0KKyAgdm9pZCBtZXRob2QxMjIzICgpIHsgfQorICB2b2lkIG1ldGhvZDEyMjQgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTIyNSAoKSB7IH0KKyAgdm9pZCBtZXRob2QxMjI2ICgpIHsgfQorICB2b2lkIG1ldGhvZDEyMjcgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTIyOCAoKSB7IH0KKyAgdm9pZCBtZXRob2QxMjI5ICgpIHsgfQorICB2b2lkIG1ldGhvZDEyMzAgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTIzMSAoKSB7IH0KKyAgdm9pZCBtZXRob2QxMjMyICgpIHsgfQorICB2b2lkIG1ldGhvZDEyMzMgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTIzNCAoKSB7IH0KKyAgdm9pZCBtZXRob2QxMjM1ICgpIHsgfQorICB2b2lkIG1ldGhvZDEyMzYgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTIzNyAoKSB7IH0KKyAgdm9pZCBtZXRob2QxMjM4ICgpIHsgfQorICB2b2lkIG1ldGhvZDEyMzkgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTI0MCAoKSB7IH0KKyAgdm9pZCBtZXRob2QxMjQxICgpIHsgfQorICB2b2lkIG1ldGhvZDEyNDIgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTI0MyAoKSB7IH0KKyAgdm9pZCBtZXRob2QxMjQ0ICgpIHsgfQorICB2b2lkIG1ldGhvZDEyNDUgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTI0NiAoKSB7IH0KKyAgdm9pZCBtZXRob2QxMjQ3ICgpIHsgfQorICB2b2lkIG1ldGhvZDEyNDggKCkgeyB9CisgIHZvaWQgbWV0aG9kMTI0OSAoKSB7IH0KKyAgdm9pZCBtZXRob2QxMjUwICgpIHsgfQorICB2b2lkIG1ldGhvZDEyNTEgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTI1MiAoKSB7IH0KKyAgdm9pZCBtZXRob2QxMjUzICgpIHsgfQorICB2b2lkIG1ldGhvZDEyNTQgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTI1NSAoKSB7IH0KKyAgdm9pZCBtZXRob2QxMjU2ICgpIHsgfQorICB2b2lkIG1ldGhvZDEyNTcgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTI1OCAoKSB7IH0KKyAgdm9pZCBtZXRob2QxMjU5ICgpIHsgfQorICB2b2lkIG1ldGhvZDEyNjAgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTI2MSAoKSB7IH0KKyAgdm9pZCBtZXRob2QxMjYyICgpIHsgfQorICB2b2lkIG1ldGhvZDEyNjMgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTI2NCAoKSB7IH0KKyAgdm9pZCBtZXRob2QxMjY1ICgpIHsgfQorICB2b2lkIG1ldGhvZDEyNjYgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTI2NyAoKSB7IH0KKyAgdm9pZCBtZXRob2QxMjY4ICgpIHsgfQorICB2b2lkIG1ldGhvZDEyNjkgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTI3MCAoKSB7IH0KKyAgdm9pZCBtZXRob2QxMjcxICgpIHsgfQorICB2b2lkIG1ldGhvZDEyNzIgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTI3MyAoKSB7IH0KKyAgdm9pZCBtZXRob2QxMjc0ICgpIHsgfQorICB2b2lkIG1ldGhvZDEyNzUgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTI3NiAoKSB7IH0KKyAgdm9pZCBtZXRob2QxMjc3ICgpIHsgfQorICB2b2lkIG1ldGhvZDEyNzggKCkgeyB9CisgIHZvaWQgbWV0aG9kMTI3OSAoKSB7IH0KKyAgdm9pZCBtZXRob2QxMjgwICgpIHsgfQorICB2b2lkIG1ldGhvZDEyODEgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTI4MiAoKSB7IH0KKyAgdm9pZCBtZXRob2QxMjgzICgpIHsgfQorICB2b2lkIG1ldGhvZDEyODQgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTI4NSAoKSB7IH0KKyAgdm9pZCBtZXRob2QxMjg2ICgpIHsgfQorICB2b2lkIG1ldGhvZDEyODcgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTI4OCAoKSB7IH0KKyAgdm9pZCBtZXRob2QxMjg5ICgpIHsgfQorICB2b2lkIG1ldGhvZDEyOTAgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTI5MSAoKSB7IH0KKyAgdm9pZCBtZXRob2QxMjkyICgpIHsgfQorICB2b2lkIG1ldGhvZDEyOTMgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTI5NCAoKSB7IH0KKyAgdm9pZCBtZXRob2QxMjk1ICgpIHsgfQorICB2b2lkIG1ldGhvZDEyOTYgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTI5NyAoKSB7IH0KKyAgdm9pZCBtZXRob2QxMjk4ICgpIHsgfQorICB2b2lkIG1ldGhvZDEyOTkgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTMwMCAoKSB7IH0KKyAgdm9pZCBtZXRob2QxMzAxICgpIHsgfQorICB2b2lkIG1ldGhvZDEzMDIgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTMwMyAoKSB7IH0KKyAgdm9pZCBtZXRob2QxMzA0ICgpIHsgfQorICB2b2lkIG1ldGhvZDEzMDUgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTMwNiAoKSB7IH0KKyAgdm9pZCBtZXRob2QxMzA3ICgpIHsgfQorICB2b2lkIG1ldGhvZDEzMDggKCkgeyB9CisgIHZvaWQgbWV0aG9kMTMwOSAoKSB7IH0KKyAgdm9pZCBtZXRob2QxMzEwICgpIHsgfQorICB2b2lkIG1ldGhvZDEzMTEgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTMxMiAoKSB7IH0KKyAgdm9pZCBtZXRob2QxMzEzICgpIHsgfQorICB2b2lkIG1ldGhvZDEzMTQgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTMxNSAoKSB7IH0KKyAgdm9pZCBtZXRob2QxMzE2ICgpIHsgfQorICB2b2lkIG1ldGhvZDEzMTcgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTMxOCAoKSB7IH0KKyAgdm9pZCBtZXRob2QxMzE5ICgpIHsgfQorICB2b2lkIG1ldGhvZDEzMjAgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTMyMSAoKSB7IH0KKyAgdm9pZCBtZXRob2QxMzIyICgpIHsgfQorICB2b2lkIG1ldGhvZDEzMjMgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTMyNCAoKSB7IH0KKyAgdm9pZCBtZXRob2QxMzI1ICgpIHsgfQorICB2b2lkIG1ldGhvZDEzMjYgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTMyNyAoKSB7IH0KKyAgdm9pZCBtZXRob2QxMzI4ICgpIHsgfQorICB2b2lkIG1ldGhvZDEzMjkgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTMzMCAoKSB7IH0KKyAgdm9pZCBtZXRob2QxMzMxICgpIHsgfQorICB2b2lkIG1ldGhvZDEzMzIgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTMzMyAoKSB7IH0KKyAgdm9pZCBtZXRob2QxMzM0ICgpIHsgfQorICB2b2lkIG1ldGhvZDEzMzUgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTMzNiAoKSB7IH0KKyAgdm9pZCBtZXRob2QxMzM3ICgpIHsgfQorICB2b2lkIG1ldGhvZDEzMzggKCkgeyB9CisgIHZvaWQgbWV0aG9kMTMzOSAoKSB7IH0KKyAgdm9pZCBtZXRob2QxMzQwICgpIHsgfQorICB2b2lkIG1ldGhvZDEzNDEgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTM0MiAoKSB7IH0KKyAgdm9pZCBtZXRob2QxMzQzICgpIHsgfQorICB2b2lkIG1ldGhvZDEzNDQgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTM0NSAoKSB7IH0KKyAgdm9pZCBtZXRob2QxMzQ2ICgpIHsgfQorICB2b2lkIG1ldGhvZDEzNDcgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTM0OCAoKSB7IH0KKyAgdm9pZCBtZXRob2QxMzQ5ICgpIHsgfQorICB2b2lkIG1ldGhvZDEzNTAgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTM1MSAoKSB7IH0KKyAgdm9pZCBtZXRob2QxMzUyICgpIHsgfQorICB2b2lkIG1ldGhvZDEzNTMgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTM1NCAoKSB7IH0KKyAgdm9pZCBtZXRob2QxMzU1ICgpIHsgfQorICB2b2lkIG1ldGhvZDEzNTYgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTM1NyAoKSB7IH0KKyAgdm9pZCBtZXRob2QxMzU4ICgpIHsgfQorICB2b2lkIG1ldGhvZDEzNTkgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTM2MCAoKSB7IH0KKyAgdm9pZCBtZXRob2QxMzYxICgpIHsgfQorICB2b2lkIG1ldGhvZDEzNjIgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTM2MyAoKSB7IH0KKyAgdm9pZCBtZXRob2QxMzY0ICgpIHsgfQorICB2b2lkIG1ldGhvZDEzNjUgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTM2NiAoKSB7IH0KKyAgdm9pZCBtZXRob2QxMzY3ICgpIHsgfQorICB2b2lkIG1ldGhvZDEzNjggKCkgeyB9CisgIHZvaWQgbWV0aG9kMTM2OSAoKSB7IH0KKyAgdm9pZCBtZXRob2QxMzcwICgpIHsgfQorICB2b2lkIG1ldGhvZDEzNzEgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTM3MiAoKSB7IH0KKyAgdm9pZCBtZXRob2QxMzczICgpIHsgfQorICB2b2lkIG1ldGhvZDEzNzQgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTM3NSAoKSB7IH0KKyAgdm9pZCBtZXRob2QxMzc2ICgpIHsgfQorICB2b2lkIG1ldGhvZDEzNzcgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTM3OCAoKSB7IH0KKyAgdm9pZCBtZXRob2QxMzc5ICgpIHsgfQorICB2b2lkIG1ldGhvZDEzODAgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTM4MSAoKSB7IH0KKyAgdm9pZCBtZXRob2QxMzgyICgpIHsgfQorICB2b2lkIG1ldGhvZDEzODMgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTM4NCAoKSB7IH0KKyAgdm9pZCBtZXRob2QxMzg1ICgpIHsgfQorICB2b2lkIG1ldGhvZDEzODYgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTM4NyAoKSB7IH0KKyAgdm9pZCBtZXRob2QxMzg4ICgpIHsgfQorICB2b2lkIG1ldGhvZDEzODkgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTM5MCAoKSB7IH0KKyAgdm9pZCBtZXRob2QxMzkxICgpIHsgfQorICB2b2lkIG1ldGhvZDEzOTIgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTM5MyAoKSB7IH0KKyAgdm9pZCBtZXRob2QxMzk0ICgpIHsgfQorICB2b2lkIG1ldGhvZDEzOTUgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTM5NiAoKSB7IH0KKyAgdm9pZCBtZXRob2QxMzk3ICgpIHsgfQorICB2b2lkIG1ldGhvZDEzOTggKCkgeyB9CisgIHZvaWQgbWV0aG9kMTM5OSAoKSB7IH0KKyAgdm9pZCBtZXRob2QxNDAwICgpIHsgfQorICB2b2lkIG1ldGhvZDE0MDEgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTQwMiAoKSB7IH0KKyAgdm9pZCBtZXRob2QxNDAzICgpIHsgfQorICB2b2lkIG1ldGhvZDE0MDQgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTQwNSAoKSB7IH0KKyAgdm9pZCBtZXRob2QxNDA2ICgpIHsgfQorICB2b2lkIG1ldGhvZDE0MDcgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTQwOCAoKSB7IH0KKyAgdm9pZCBtZXRob2QxNDA5ICgpIHsgfQorICB2b2lkIG1ldGhvZDE0MTAgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTQxMSAoKSB7IH0KKyAgdm9pZCBtZXRob2QxNDEyICgpIHsgfQorICB2b2lkIG1ldGhvZDE0MTMgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTQxNCAoKSB7IH0KKyAgdm9pZCBtZXRob2QxNDE1ICgpIHsgfQorICB2b2lkIG1ldGhvZDE0MTYgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTQxNyAoKSB7IH0KKyAgdm9pZCBtZXRob2QxNDE4ICgpIHsgfQorICB2b2lkIG1ldGhvZDE0MTkgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTQyMCAoKSB7IH0KKyAgdm9pZCBtZXRob2QxNDIxICgpIHsgfQorICB2b2lkIG1ldGhvZDE0MjIgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTQyMyAoKSB7IH0KKyAgdm9pZCBtZXRob2QxNDI0ICgpIHsgfQorICB2b2lkIG1ldGhvZDE0MjUgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTQyNiAoKSB7IH0KKyAgdm9pZCBtZXRob2QxNDI3ICgpIHsgfQorICB2b2lkIG1ldGhvZDE0MjggKCkgeyB9CisgIHZvaWQgbWV0aG9kMTQyOSAoKSB7IH0KKyAgdm9pZCBtZXRob2QxNDMwICgpIHsgfQorICB2b2lkIG1ldGhvZDE0MzEgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTQzMiAoKSB7IH0KKyAgdm9pZCBtZXRob2QxNDMzICgpIHsgfQorICB2b2lkIG1ldGhvZDE0MzQgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTQzNSAoKSB7IH0KKyAgdm9pZCBtZXRob2QxNDM2ICgpIHsgfQorICB2b2lkIG1ldGhvZDE0MzcgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTQzOCAoKSB7IH0KKyAgdm9pZCBtZXRob2QxNDM5ICgpIHsgfQorICB2b2lkIG1ldGhvZDE0NDAgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTQ0MSAoKSB7IH0KKyAgdm9pZCBtZXRob2QxNDQyICgpIHsgfQorICB2b2lkIG1ldGhvZDE0NDMgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTQ0NCAoKSB7IH0KKyAgdm9pZCBtZXRob2QxNDQ1ICgpIHsgfQorICB2b2lkIG1ldGhvZDE0NDYgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTQ0NyAoKSB7IH0KKyAgdm9pZCBtZXRob2QxNDQ4ICgpIHsgfQorICB2b2lkIG1ldGhvZDE0NDkgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTQ1MCAoKSB7IH0KKyAgdm9pZCBtZXRob2QxNDUxICgpIHsgfQorICB2b2lkIG1ldGhvZDE0NTIgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTQ1MyAoKSB7IH0KKyAgdm9pZCBtZXRob2QxNDU0ICgpIHsgfQorICB2b2lkIG1ldGhvZDE0NTUgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTQ1NiAoKSB7IH0KKyAgdm9pZCBtZXRob2QxNDU3ICgpIHsgfQorICB2b2lkIG1ldGhvZDE0NTggKCkgeyB9CisgIHZvaWQgbWV0aG9kMTQ1OSAoKSB7IH0KKyAgdm9pZCBtZXRob2QxNDYwICgpIHsgfQorICB2b2lkIG1ldGhvZDE0NjEgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTQ2MiAoKSB7IH0KKyAgdm9pZCBtZXRob2QxNDYzICgpIHsgfQorICB2b2lkIG1ldGhvZDE0NjQgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTQ2NSAoKSB7IH0KKyAgdm9pZCBtZXRob2QxNDY2ICgpIHsgfQorICB2b2lkIG1ldGhvZDE0NjcgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTQ2OCAoKSB7IH0KKyAgdm9pZCBtZXRob2QxNDY5ICgpIHsgfQorICB2b2lkIG1ldGhvZDE0NzAgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTQ3MSAoKSB7IH0KKyAgdm9pZCBtZXRob2QxNDcyICgpIHsgfQorICB2b2lkIG1ldGhvZDE0NzMgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTQ3NCAoKSB7IH0KKyAgdm9pZCBtZXRob2QxNDc1ICgpIHsgfQorICB2b2lkIG1ldGhvZDE0NzYgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTQ3NyAoKSB7IH0KKyAgdm9pZCBtZXRob2QxNDc4ICgpIHsgfQorICB2b2lkIG1ldGhvZDE0NzkgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTQ4MCAoKSB7IH0KKyAgdm9pZCBtZXRob2QxNDgxICgpIHsgfQorICB2b2lkIG1ldGhvZDE0ODIgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTQ4MyAoKSB7IH0KKyAgdm9pZCBtZXRob2QxNDg0ICgpIHsgfQorICB2b2lkIG1ldGhvZDE0ODUgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTQ4NiAoKSB7IH0KKyAgdm9pZCBtZXRob2QxNDg3ICgpIHsgfQorICB2b2lkIG1ldGhvZDE0ODggKCkgeyB9CisgIHZvaWQgbWV0aG9kMTQ4OSAoKSB7IH0KKyAgdm9pZCBtZXRob2QxNDkwICgpIHsgfQorICB2b2lkIG1ldGhvZDE0OTEgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTQ5MiAoKSB7IH0KKyAgdm9pZCBtZXRob2QxNDkzICgpIHsgfQorICB2b2lkIG1ldGhvZDE0OTQgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTQ5NSAoKSB7IH0KKyAgdm9pZCBtZXRob2QxNDk2ICgpIHsgfQorICB2b2lkIG1ldGhvZDE0OTcgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTQ5OCAoKSB7IH0KKyAgdm9pZCBtZXRob2QxNDk5ICgpIHsgfQorICB2b2lkIG1ldGhvZDE1MDAgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTUwMSAoKSB7IH0KKyAgdm9pZCBtZXRob2QxNTAyICgpIHsgfQorICB2b2lkIG1ldGhvZDE1MDMgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTUwNCAoKSB7IH0KKyAgdm9pZCBtZXRob2QxNTA1ICgpIHsgfQorICB2b2lkIG1ldGhvZDE1MDYgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTUwNyAoKSB7IH0KKyAgdm9pZCBtZXRob2QxNTA4ICgpIHsgfQorICB2b2lkIG1ldGhvZDE1MDkgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTUxMCAoKSB7IH0KKyAgdm9pZCBtZXRob2QxNTExICgpIHsgfQorICB2b2lkIG1ldGhvZDE1MTIgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTUxMyAoKSB7IH0KKyAgdm9pZCBtZXRob2QxNTE0ICgpIHsgfQorICB2b2lkIG1ldGhvZDE1MTUgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTUxNiAoKSB7IH0KKyAgdm9pZCBtZXRob2QxNTE3ICgpIHsgfQorICB2b2lkIG1ldGhvZDE1MTggKCkgeyB9CisgIHZvaWQgbWV0aG9kMTUxOSAoKSB7IH0KKyAgdm9pZCBtZXRob2QxNTIwICgpIHsgfQorICB2b2lkIG1ldGhvZDE1MjEgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTUyMiAoKSB7IH0KKyAgdm9pZCBtZXRob2QxNTIzICgpIHsgfQorICB2b2lkIG1ldGhvZDE1MjQgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTUyNSAoKSB7IH0KKyAgdm9pZCBtZXRob2QxNTI2ICgpIHsgfQorICB2b2lkIG1ldGhvZDE1MjcgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTUyOCAoKSB7IH0KKyAgdm9pZCBtZXRob2QxNTI5ICgpIHsgfQorICB2b2lkIG1ldGhvZDE1MzAgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTUzMSAoKSB7IH0KKyAgdm9pZCBtZXRob2QxNTMyICgpIHsgfQorICB2b2lkIG1ldGhvZDE1MzMgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTUzNCAoKSB7IH0KKyAgdm9pZCBtZXRob2QxNTM1ICgpIHsgfQorICB2b2lkIG1ldGhvZDE1MzYgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTUzNyAoKSB7IH0KKyAgdm9pZCBtZXRob2QxNTM4ICgpIHsgfQorICB2b2lkIG1ldGhvZDE1MzkgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTU0MCAoKSB7IH0KKyAgdm9pZCBtZXRob2QxNTQxICgpIHsgfQorICB2b2lkIG1ldGhvZDE1NDIgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTU0MyAoKSB7IH0KKyAgdm9pZCBtZXRob2QxNTQ0ICgpIHsgfQorICB2b2lkIG1ldGhvZDE1NDUgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTU0NiAoKSB7IH0KKyAgdm9pZCBtZXRob2QxNTQ3ICgpIHsgfQorICB2b2lkIG1ldGhvZDE1NDggKCkgeyB9CisgIHZvaWQgbWV0aG9kMTU0OSAoKSB7IH0KKyAgdm9pZCBtZXRob2QxNTUwICgpIHsgfQorICB2b2lkIG1ldGhvZDE1NTEgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTU1MiAoKSB7IH0KKyAgdm9pZCBtZXRob2QxNTUzICgpIHsgfQorICB2b2lkIG1ldGhvZDE1NTQgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTU1NSAoKSB7IH0KKyAgdm9pZCBtZXRob2QxNTU2ICgpIHsgfQorICB2b2lkIG1ldGhvZDE1NTcgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTU1OCAoKSB7IH0KKyAgdm9pZCBtZXRob2QxNTU5ICgpIHsgfQorICB2b2lkIG1ldGhvZDE1NjAgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTU2MSAoKSB7IH0KKyAgdm9pZCBtZXRob2QxNTYyICgpIHsgfQorICB2b2lkIG1ldGhvZDE1NjMgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTU2NCAoKSB7IH0KKyAgdm9pZCBtZXRob2QxNTY1ICgpIHsgfQorICB2b2lkIG1ldGhvZDE1NjYgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTU2NyAoKSB7IH0KKyAgdm9pZCBtZXRob2QxNTY4ICgpIHsgfQorICB2b2lkIG1ldGhvZDE1NjkgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTU3MCAoKSB7IH0KKyAgdm9pZCBtZXRob2QxNTcxICgpIHsgfQorICB2b2lkIG1ldGhvZDE1NzIgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTU3MyAoKSB7IH0KKyAgdm9pZCBtZXRob2QxNTc0ICgpIHsgfQorICB2b2lkIG1ldGhvZDE1NzUgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTU3NiAoKSB7IH0KKyAgdm9pZCBtZXRob2QxNTc3ICgpIHsgfQorICB2b2lkIG1ldGhvZDE1NzggKCkgeyB9CisgIHZvaWQgbWV0aG9kMTU3OSAoKSB7IH0KKyAgdm9pZCBtZXRob2QxNTgwICgpIHsgfQorICB2b2lkIG1ldGhvZDE1ODEgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTU4MiAoKSB7IH0KKyAgdm9pZCBtZXRob2QxNTgzICgpIHsgfQorICB2b2lkIG1ldGhvZDE1ODQgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTU4NSAoKSB7IH0KKyAgdm9pZCBtZXRob2QxNTg2ICgpIHsgfQorICB2b2lkIG1ldGhvZDE1ODcgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTU4OCAoKSB7IH0KKyAgdm9pZCBtZXRob2QxNTg5ICgpIHsgfQorICB2b2lkIG1ldGhvZDE1OTAgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTU5MSAoKSB7IH0KKyAgdm9pZCBtZXRob2QxNTkyICgpIHsgfQorICB2b2lkIG1ldGhvZDE1OTMgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTU5NCAoKSB7IH0KKyAgdm9pZCBtZXRob2QxNTk1ICgpIHsgfQorICB2b2lkIG1ldGhvZDE1OTYgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTU5NyAoKSB7IH0KKyAgdm9pZCBtZXRob2QxNTk4ICgpIHsgfQorICB2b2lkIG1ldGhvZDE1OTkgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTYwMCAoKSB7IH0KKyAgdm9pZCBtZXRob2QxNjAxICgpIHsgfQorICB2b2lkIG1ldGhvZDE2MDIgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTYwMyAoKSB7IH0KKyAgdm9pZCBtZXRob2QxNjA0ICgpIHsgfQorICB2b2lkIG1ldGhvZDE2MDUgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTYwNiAoKSB7IH0KKyAgdm9pZCBtZXRob2QxNjA3ICgpIHsgfQorICB2b2lkIG1ldGhvZDE2MDggKCkgeyB9CisgIHZvaWQgbWV0aG9kMTYwOSAoKSB7IH0KKyAgdm9pZCBtZXRob2QxNjEwICgpIHsgfQorICB2b2lkIG1ldGhvZDE2MTEgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTYxMiAoKSB7IH0KKyAgdm9pZCBtZXRob2QxNjEzICgpIHsgfQorICB2b2lkIG1ldGhvZDE2MTQgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTYxNSAoKSB7IH0KKyAgdm9pZCBtZXRob2QxNjE2ICgpIHsgfQorICB2b2lkIG1ldGhvZDE2MTcgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTYxOCAoKSB7IH0KKyAgdm9pZCBtZXRob2QxNjE5ICgpIHsgfQorICB2b2lkIG1ldGhvZDE2MjAgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTYyMSAoKSB7IH0KKyAgdm9pZCBtZXRob2QxNjIyICgpIHsgfQorICB2b2lkIG1ldGhvZDE2MjMgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTYyNCAoKSB7IH0KKyAgdm9pZCBtZXRob2QxNjI1ICgpIHsgfQorICB2b2lkIG1ldGhvZDE2MjYgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTYyNyAoKSB7IH0KKyAgdm9pZCBtZXRob2QxNjI4ICgpIHsgfQorICB2b2lkIG1ldGhvZDE2MjkgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTYzMCAoKSB7IH0KKyAgdm9pZCBtZXRob2QxNjMxICgpIHsgfQorICB2b2lkIG1ldGhvZDE2MzIgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTYzMyAoKSB7IH0KKyAgdm9pZCBtZXRob2QxNjM0ICgpIHsgfQorICB2b2lkIG1ldGhvZDE2MzUgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTYzNiAoKSB7IH0KKyAgdm9pZCBtZXRob2QxNjM3ICgpIHsgfQorICB2b2lkIG1ldGhvZDE2MzggKCkgeyB9CisgIHZvaWQgbWV0aG9kMTYzOSAoKSB7IH0KKyAgdm9pZCBtZXRob2QxNjQwICgpIHsgfQorICB2b2lkIG1ldGhvZDE2NDEgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTY0MiAoKSB7IH0KKyAgdm9pZCBtZXRob2QxNjQzICgpIHsgfQorICB2b2lkIG1ldGhvZDE2NDQgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTY0NSAoKSB7IH0KKyAgdm9pZCBtZXRob2QxNjQ2ICgpIHsgfQorICB2b2lkIG1ldGhvZDE2NDcgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTY0OCAoKSB7IH0KKyAgdm9pZCBtZXRob2QxNjQ5ICgpIHsgfQorICB2b2lkIG1ldGhvZDE2NTAgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTY1MSAoKSB7IH0KKyAgdm9pZCBtZXRob2QxNjUyICgpIHsgfQorICB2b2lkIG1ldGhvZDE2NTMgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTY1NCAoKSB7IH0KKyAgdm9pZCBtZXRob2QxNjU1ICgpIHsgfQorICB2b2lkIG1ldGhvZDE2NTYgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTY1NyAoKSB7IH0KKyAgdm9pZCBtZXRob2QxNjU4ICgpIHsgfQorICB2b2lkIG1ldGhvZDE2NTkgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTY2MCAoKSB7IH0KKyAgdm9pZCBtZXRob2QxNjYxICgpIHsgfQorICB2b2lkIG1ldGhvZDE2NjIgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTY2MyAoKSB7IH0KKyAgdm9pZCBtZXRob2QxNjY0ICgpIHsgfQorICB2b2lkIG1ldGhvZDE2NjUgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTY2NiAoKSB7IH0KKyAgdm9pZCBtZXRob2QxNjY3ICgpIHsgfQorICB2b2lkIG1ldGhvZDE2NjggKCkgeyB9CisgIHZvaWQgbWV0aG9kMTY2OSAoKSB7IH0KKyAgdm9pZCBtZXRob2QxNjcwICgpIHsgfQorICB2b2lkIG1ldGhvZDE2NzEgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTY3MiAoKSB7IH0KKyAgdm9pZCBtZXRob2QxNjczICgpIHsgfQorICB2b2lkIG1ldGhvZDE2NzQgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTY3NSAoKSB7IH0KKyAgdm9pZCBtZXRob2QxNjc2ICgpIHsgfQorICB2b2lkIG1ldGhvZDE2NzcgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTY3OCAoKSB7IH0KKyAgdm9pZCBtZXRob2QxNjc5ICgpIHsgfQorICB2b2lkIG1ldGhvZDE2ODAgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTY4MSAoKSB7IH0KKyAgdm9pZCBtZXRob2QxNjgyICgpIHsgfQorICB2b2lkIG1ldGhvZDE2ODMgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTY4NCAoKSB7IH0KKyAgdm9pZCBtZXRob2QxNjg1ICgpIHsgfQorICB2b2lkIG1ldGhvZDE2ODYgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTY4NyAoKSB7IH0KKyAgdm9pZCBtZXRob2QxNjg4ICgpIHsgfQorICB2b2lkIG1ldGhvZDE2ODkgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTY5MCAoKSB7IH0KKyAgdm9pZCBtZXRob2QxNjkxICgpIHsgfQorICB2b2lkIG1ldGhvZDE2OTIgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTY5MyAoKSB7IH0KKyAgdm9pZCBtZXRob2QxNjk0ICgpIHsgfQorICB2b2lkIG1ldGhvZDE2OTUgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTY5NiAoKSB7IH0KKyAgdm9pZCBtZXRob2QxNjk3ICgpIHsgfQorICB2b2lkIG1ldGhvZDE2OTggKCkgeyB9CisgIHZvaWQgbWV0aG9kMTY5OSAoKSB7IH0KKyAgdm9pZCBtZXRob2QxNzAwICgpIHsgfQorICB2b2lkIG1ldGhvZDE3MDEgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTcwMiAoKSB7IH0KKyAgdm9pZCBtZXRob2QxNzAzICgpIHsgfQorICB2b2lkIG1ldGhvZDE3MDQgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTcwNSAoKSB7IH0KKyAgdm9pZCBtZXRob2QxNzA2ICgpIHsgfQorICB2b2lkIG1ldGhvZDE3MDcgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTcwOCAoKSB7IH0KKyAgdm9pZCBtZXRob2QxNzA5ICgpIHsgfQorICB2b2lkIG1ldGhvZDE3MTAgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTcxMSAoKSB7IH0KKyAgdm9pZCBtZXRob2QxNzEyICgpIHsgfQorICB2b2lkIG1ldGhvZDE3MTMgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTcxNCAoKSB7IH0KKyAgdm9pZCBtZXRob2QxNzE1ICgpIHsgfQorICB2b2lkIG1ldGhvZDE3MTYgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTcxNyAoKSB7IH0KKyAgdm9pZCBtZXRob2QxNzE4ICgpIHsgfQorICB2b2lkIG1ldGhvZDE3MTkgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTcyMCAoKSB7IH0KKyAgdm9pZCBtZXRob2QxNzIxICgpIHsgfQorICB2b2lkIG1ldGhvZDE3MjIgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTcyMyAoKSB7IH0KKyAgdm9pZCBtZXRob2QxNzI0ICgpIHsgfQorICB2b2lkIG1ldGhvZDE3MjUgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTcyNiAoKSB7IH0KKyAgdm9pZCBtZXRob2QxNzI3ICgpIHsgfQorICB2b2lkIG1ldGhvZDE3MjggKCkgeyB9CisgIHZvaWQgbWV0aG9kMTcyOSAoKSB7IH0KKyAgdm9pZCBtZXRob2QxNzMwICgpIHsgfQorICB2b2lkIG1ldGhvZDE3MzEgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTczMiAoKSB7IH0KKyAgdm9pZCBtZXRob2QxNzMzICgpIHsgfQorICB2b2lkIG1ldGhvZDE3MzQgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTczNSAoKSB7IH0KKyAgdm9pZCBtZXRob2QxNzM2ICgpIHsgfQorICB2b2lkIG1ldGhvZDE3MzcgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTczOCAoKSB7IH0KKyAgdm9pZCBtZXRob2QxNzM5ICgpIHsgfQorICB2b2lkIG1ldGhvZDE3NDAgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTc0MSAoKSB7IH0KKyAgdm9pZCBtZXRob2QxNzQyICgpIHsgfQorICB2b2lkIG1ldGhvZDE3NDMgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTc0NCAoKSB7IH0KKyAgdm9pZCBtZXRob2QxNzQ1ICgpIHsgfQorICB2b2lkIG1ldGhvZDE3NDYgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTc0NyAoKSB7IH0KKyAgdm9pZCBtZXRob2QxNzQ4ICgpIHsgfQorICB2b2lkIG1ldGhvZDE3NDkgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTc1MCAoKSB7IH0KKyAgdm9pZCBtZXRob2QxNzUxICgpIHsgfQorICB2b2lkIG1ldGhvZDE3NTIgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTc1MyAoKSB7IH0KKyAgdm9pZCBtZXRob2QxNzU0ICgpIHsgfQorICB2b2lkIG1ldGhvZDE3NTUgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTc1NiAoKSB7IH0KKyAgdm9pZCBtZXRob2QxNzU3ICgpIHsgfQorICB2b2lkIG1ldGhvZDE3NTggKCkgeyB9CisgIHZvaWQgbWV0aG9kMTc1OSAoKSB7IH0KKyAgdm9pZCBtZXRob2QxNzYwICgpIHsgfQorICB2b2lkIG1ldGhvZDE3NjEgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTc2MiAoKSB7IH0KKyAgdm9pZCBtZXRob2QxNzYzICgpIHsgfQorICB2b2lkIG1ldGhvZDE3NjQgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTc2NSAoKSB7IH0KKyAgdm9pZCBtZXRob2QxNzY2ICgpIHsgfQorICB2b2lkIG1ldGhvZDE3NjcgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTc2OCAoKSB7IH0KKyAgdm9pZCBtZXRob2QxNzY5ICgpIHsgfQorICB2b2lkIG1ldGhvZDE3NzAgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTc3MSAoKSB7IH0KKyAgdm9pZCBtZXRob2QxNzcyICgpIHsgfQorICB2b2lkIG1ldGhvZDE3NzMgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTc3NCAoKSB7IH0KKyAgdm9pZCBtZXRob2QxNzc1ICgpIHsgfQorICB2b2lkIG1ldGhvZDE3NzYgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTc3NyAoKSB7IH0KKyAgdm9pZCBtZXRob2QxNzc4ICgpIHsgfQorICB2b2lkIG1ldGhvZDE3NzkgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTc4MCAoKSB7IH0KKyAgdm9pZCBtZXRob2QxNzgxICgpIHsgfQorICB2b2lkIG1ldGhvZDE3ODIgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTc4MyAoKSB7IH0KKyAgdm9pZCBtZXRob2QxNzg0ICgpIHsgfQorICB2b2lkIG1ldGhvZDE3ODUgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTc4NiAoKSB7IH0KKyAgdm9pZCBtZXRob2QxNzg3ICgpIHsgfQorICB2b2lkIG1ldGhvZDE3ODggKCkgeyB9CisgIHZvaWQgbWV0aG9kMTc4OSAoKSB7IH0KKyAgdm9pZCBtZXRob2QxNzkwICgpIHsgfQorICB2b2lkIG1ldGhvZDE3OTEgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTc5MiAoKSB7IH0KKyAgdm9pZCBtZXRob2QxNzkzICgpIHsgfQorICB2b2lkIG1ldGhvZDE3OTQgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTc5NSAoKSB7IH0KKyAgdm9pZCBtZXRob2QxNzk2ICgpIHsgfQorICB2b2lkIG1ldGhvZDE3OTcgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTc5OCAoKSB7IH0KKyAgdm9pZCBtZXRob2QxNzk5ICgpIHsgfQorICB2b2lkIG1ldGhvZDE4MDAgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTgwMSAoKSB7IH0KKyAgdm9pZCBtZXRob2QxODAyICgpIHsgfQorICB2b2lkIG1ldGhvZDE4MDMgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTgwNCAoKSB7IH0KKyAgdm9pZCBtZXRob2QxODA1ICgpIHsgfQorICB2b2lkIG1ldGhvZDE4MDYgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTgwNyAoKSB7IH0KKyAgdm9pZCBtZXRob2QxODA4ICgpIHsgfQorICB2b2lkIG1ldGhvZDE4MDkgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTgxMCAoKSB7IH0KKyAgdm9pZCBtZXRob2QxODExICgpIHsgfQorICB2b2lkIG1ldGhvZDE4MTIgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTgxMyAoKSB7IH0KKyAgdm9pZCBtZXRob2QxODE0ICgpIHsgfQorICB2b2lkIG1ldGhvZDE4MTUgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTgxNiAoKSB7IH0KKyAgdm9pZCBtZXRob2QxODE3ICgpIHsgfQorICB2b2lkIG1ldGhvZDE4MTggKCkgeyB9CisgIHZvaWQgbWV0aG9kMTgxOSAoKSB7IH0KKyAgdm9pZCBtZXRob2QxODIwICgpIHsgfQorICB2b2lkIG1ldGhvZDE4MjEgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTgyMiAoKSB7IH0KKyAgdm9pZCBtZXRob2QxODIzICgpIHsgfQorICB2b2lkIG1ldGhvZDE4MjQgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTgyNSAoKSB7IH0KKyAgdm9pZCBtZXRob2QxODI2ICgpIHsgfQorICB2b2lkIG1ldGhvZDE4MjcgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTgyOCAoKSB7IH0KKyAgdm9pZCBtZXRob2QxODI5ICgpIHsgfQorICB2b2lkIG1ldGhvZDE4MzAgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTgzMSAoKSB7IH0KKyAgdm9pZCBtZXRob2QxODMyICgpIHsgfQorICB2b2lkIG1ldGhvZDE4MzMgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTgzNCAoKSB7IH0KKyAgdm9pZCBtZXRob2QxODM1ICgpIHsgfQorICB2b2lkIG1ldGhvZDE4MzYgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTgzNyAoKSB7IH0KKyAgdm9pZCBtZXRob2QxODM4ICgpIHsgfQorICB2b2lkIG1ldGhvZDE4MzkgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTg0MCAoKSB7IH0KKyAgdm9pZCBtZXRob2QxODQxICgpIHsgfQorICB2b2lkIG1ldGhvZDE4NDIgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTg0MyAoKSB7IH0KKyAgdm9pZCBtZXRob2QxODQ0ICgpIHsgfQorICB2b2lkIG1ldGhvZDE4NDUgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTg0NiAoKSB7IH0KKyAgdm9pZCBtZXRob2QxODQ3ICgpIHsgfQorICB2b2lkIG1ldGhvZDE4NDggKCkgeyB9CisgIHZvaWQgbWV0aG9kMTg0OSAoKSB7IH0KKyAgdm9pZCBtZXRob2QxODUwICgpIHsgfQorICB2b2lkIG1ldGhvZDE4NTEgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTg1MiAoKSB7IH0KKyAgdm9pZCBtZXRob2QxODUzICgpIHsgfQorICB2b2lkIG1ldGhvZDE4NTQgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTg1NSAoKSB7IH0KKyAgdm9pZCBtZXRob2QxODU2ICgpIHsgfQorICB2b2lkIG1ldGhvZDE4NTcgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTg1OCAoKSB7IH0KKyAgdm9pZCBtZXRob2QxODU5ICgpIHsgfQorICB2b2lkIG1ldGhvZDE4NjAgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTg2MSAoKSB7IH0KKyAgdm9pZCBtZXRob2QxODYyICgpIHsgfQorICB2b2lkIG1ldGhvZDE4NjMgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTg2NCAoKSB7IH0KKyAgdm9pZCBtZXRob2QxODY1ICgpIHsgfQorICB2b2lkIG1ldGhvZDE4NjYgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTg2NyAoKSB7IH0KKyAgdm9pZCBtZXRob2QxODY4ICgpIHsgfQorICB2b2lkIG1ldGhvZDE4NjkgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTg3MCAoKSB7IH0KKyAgdm9pZCBtZXRob2QxODcxICgpIHsgfQorICB2b2lkIG1ldGhvZDE4NzIgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTg3MyAoKSB7IH0KKyAgdm9pZCBtZXRob2QxODc0ICgpIHsgfQorICB2b2lkIG1ldGhvZDE4NzUgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTg3NiAoKSB7IH0KKyAgdm9pZCBtZXRob2QxODc3ICgpIHsgfQorICB2b2lkIG1ldGhvZDE4NzggKCkgeyB9CisgIHZvaWQgbWV0aG9kMTg3OSAoKSB7IH0KKyAgdm9pZCBtZXRob2QxODgwICgpIHsgfQorICB2b2lkIG1ldGhvZDE4ODEgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTg4MiAoKSB7IH0KKyAgdm9pZCBtZXRob2QxODgzICgpIHsgfQorICB2b2lkIG1ldGhvZDE4ODQgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTg4NSAoKSB7IH0KKyAgdm9pZCBtZXRob2QxODg2ICgpIHsgfQorICB2b2lkIG1ldGhvZDE4ODcgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTg4OCAoKSB7IH0KKyAgdm9pZCBtZXRob2QxODg5ICgpIHsgfQorICB2b2lkIG1ldGhvZDE4OTAgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTg5MSAoKSB7IH0KKyAgdm9pZCBtZXRob2QxODkyICgpIHsgfQorICB2b2lkIG1ldGhvZDE4OTMgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTg5NCAoKSB7IH0KKyAgdm9pZCBtZXRob2QxODk1ICgpIHsgfQorICB2b2lkIG1ldGhvZDE4OTYgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTg5NyAoKSB7IH0KKyAgdm9pZCBtZXRob2QxODk4ICgpIHsgfQorICB2b2lkIG1ldGhvZDE4OTkgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTkwMCAoKSB7IH0KKyAgdm9pZCBtZXRob2QxOTAxICgpIHsgfQorICB2b2lkIG1ldGhvZDE5MDIgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTkwMyAoKSB7IH0KKyAgdm9pZCBtZXRob2QxOTA0ICgpIHsgfQorICB2b2lkIG1ldGhvZDE5MDUgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTkwNiAoKSB7IH0KKyAgdm9pZCBtZXRob2QxOTA3ICgpIHsgfQorICB2b2lkIG1ldGhvZDE5MDggKCkgeyB9CisgIHZvaWQgbWV0aG9kMTkwOSAoKSB7IH0KKyAgdm9pZCBtZXRob2QxOTEwICgpIHsgfQorICB2b2lkIG1ldGhvZDE5MTEgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTkxMiAoKSB7IH0KKyAgdm9pZCBtZXRob2QxOTEzICgpIHsgfQorICB2b2lkIG1ldGhvZDE5MTQgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTkxNSAoKSB7IH0KKyAgdm9pZCBtZXRob2QxOTE2ICgpIHsgfQorICB2b2lkIG1ldGhvZDE5MTcgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTkxOCAoKSB7IH0KKyAgdm9pZCBtZXRob2QxOTE5ICgpIHsgfQorICB2b2lkIG1ldGhvZDE5MjAgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTkyMSAoKSB7IH0KKyAgdm9pZCBtZXRob2QxOTIyICgpIHsgfQorICB2b2lkIG1ldGhvZDE5MjMgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTkyNCAoKSB7IH0KKyAgdm9pZCBtZXRob2QxOTI1ICgpIHsgfQorICB2b2lkIG1ldGhvZDE5MjYgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTkyNyAoKSB7IH0KKyAgdm9pZCBtZXRob2QxOTI4ICgpIHsgfQorICB2b2lkIG1ldGhvZDE5MjkgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTkzMCAoKSB7IH0KKyAgdm9pZCBtZXRob2QxOTMxICgpIHsgfQorICB2b2lkIG1ldGhvZDE5MzIgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTkzMyAoKSB7IH0KKyAgdm9pZCBtZXRob2QxOTM0ICgpIHsgfQorICB2b2lkIG1ldGhvZDE5MzUgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTkzNiAoKSB7IH0KKyAgdm9pZCBtZXRob2QxOTM3ICgpIHsgfQorICB2b2lkIG1ldGhvZDE5MzggKCkgeyB9CisgIHZvaWQgbWV0aG9kMTkzOSAoKSB7IH0KKyAgdm9pZCBtZXRob2QxOTQwICgpIHsgfQorICB2b2lkIG1ldGhvZDE5NDEgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTk0MiAoKSB7IH0KKyAgdm9pZCBtZXRob2QxOTQzICgpIHsgfQorICB2b2lkIG1ldGhvZDE5NDQgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTk0NSAoKSB7IH0KKyAgdm9pZCBtZXRob2QxOTQ2ICgpIHsgfQorICB2b2lkIG1ldGhvZDE5NDcgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTk0OCAoKSB7IH0KKyAgdm9pZCBtZXRob2QxOTQ5ICgpIHsgfQorICB2b2lkIG1ldGhvZDE5NTAgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTk1MSAoKSB7IH0KKyAgdm9pZCBtZXRob2QxOTUyICgpIHsgfQorICB2b2lkIG1ldGhvZDE5NTMgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTk1NCAoKSB7IH0KKyAgdm9pZCBtZXRob2QxOTU1ICgpIHsgfQorICB2b2lkIG1ldGhvZDE5NTYgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTk1NyAoKSB7IH0KKyAgdm9pZCBtZXRob2QxOTU4ICgpIHsgfQorICB2b2lkIG1ldGhvZDE5NTkgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTk2MCAoKSB7IH0KKyAgdm9pZCBtZXRob2QxOTYxICgpIHsgfQorICB2b2lkIG1ldGhvZDE5NjIgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTk2MyAoKSB7IH0KKyAgdm9pZCBtZXRob2QxOTY0ICgpIHsgfQorICB2b2lkIG1ldGhvZDE5NjUgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTk2NiAoKSB7IH0KKyAgdm9pZCBtZXRob2QxOTY3ICgpIHsgfQorICB2b2lkIG1ldGhvZDE5NjggKCkgeyB9CisgIHZvaWQgbWV0aG9kMTk2OSAoKSB7IH0KKyAgdm9pZCBtZXRob2QxOTcwICgpIHsgfQorICB2b2lkIG1ldGhvZDE5NzEgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTk3MiAoKSB7IH0KKyAgdm9pZCBtZXRob2QxOTczICgpIHsgfQorICB2b2lkIG1ldGhvZDE5NzQgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTk3NSAoKSB7IH0KKyAgdm9pZCBtZXRob2QxOTc2ICgpIHsgfQorICB2b2lkIG1ldGhvZDE5NzcgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTk3OCAoKSB7IH0KKyAgdm9pZCBtZXRob2QxOTc5ICgpIHsgfQorICB2b2lkIG1ldGhvZDE5ODAgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTk4MSAoKSB7IH0KKyAgdm9pZCBtZXRob2QxOTgyICgpIHsgfQorICB2b2lkIG1ldGhvZDE5ODMgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTk4NCAoKSB7IH0KKyAgdm9pZCBtZXRob2QxOTg1ICgpIHsgfQorICB2b2lkIG1ldGhvZDE5ODYgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTk4NyAoKSB7IH0KKyAgdm9pZCBtZXRob2QxOTg4ICgpIHsgfQorICB2b2lkIG1ldGhvZDE5ODkgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTk5MCAoKSB7IH0KKyAgdm9pZCBtZXRob2QxOTkxICgpIHsgfQorICB2b2lkIG1ldGhvZDE5OTIgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTk5MyAoKSB7IH0KKyAgdm9pZCBtZXRob2QxOTk0ICgpIHsgfQorICB2b2lkIG1ldGhvZDE5OTUgKCkgeyB9CisgIHZvaWQgbWV0aG9kMTk5NiAoKSB7IH0KKyAgdm9pZCBtZXRob2QxOTk3ICgpIHsgfQorICB2b2lkIG1ldGhvZDE5OTggKCkgeyB9CisgIHZvaWQgbWV0aG9kMTk5OSAoKSB7IH0KKyAgdm9pZCBtZXRob2QyMDAwICgpIHsgfQorICB2b2lkIG1ldGhvZDIwMDEgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjAwMiAoKSB7IH0KKyAgdm9pZCBtZXRob2QyMDAzICgpIHsgfQorICB2b2lkIG1ldGhvZDIwMDQgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjAwNSAoKSB7IH0KKyAgdm9pZCBtZXRob2QyMDA2ICgpIHsgfQorICB2b2lkIG1ldGhvZDIwMDcgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjAwOCAoKSB7IH0KKyAgdm9pZCBtZXRob2QyMDA5ICgpIHsgfQorICB2b2lkIG1ldGhvZDIwMTAgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjAxMSAoKSB7IH0KKyAgdm9pZCBtZXRob2QyMDEyICgpIHsgfQorICB2b2lkIG1ldGhvZDIwMTMgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjAxNCAoKSB7IH0KKyAgdm9pZCBtZXRob2QyMDE1ICgpIHsgfQorICB2b2lkIG1ldGhvZDIwMTYgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjAxNyAoKSB7IH0KKyAgdm9pZCBtZXRob2QyMDE4ICgpIHsgfQorICB2b2lkIG1ldGhvZDIwMTkgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjAyMCAoKSB7IH0KKyAgdm9pZCBtZXRob2QyMDIxICgpIHsgfQorICB2b2lkIG1ldGhvZDIwMjIgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjAyMyAoKSB7IH0KKyAgdm9pZCBtZXRob2QyMDI0ICgpIHsgfQorICB2b2lkIG1ldGhvZDIwMjUgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjAyNiAoKSB7IH0KKyAgdm9pZCBtZXRob2QyMDI3ICgpIHsgfQorICB2b2lkIG1ldGhvZDIwMjggKCkgeyB9CisgIHZvaWQgbWV0aG9kMjAyOSAoKSB7IH0KKyAgdm9pZCBtZXRob2QyMDMwICgpIHsgfQorICB2b2lkIG1ldGhvZDIwMzEgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjAzMiAoKSB7IH0KKyAgdm9pZCBtZXRob2QyMDMzICgpIHsgfQorICB2b2lkIG1ldGhvZDIwMzQgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjAzNSAoKSB7IH0KKyAgdm9pZCBtZXRob2QyMDM2ICgpIHsgfQorICB2b2lkIG1ldGhvZDIwMzcgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjAzOCAoKSB7IH0KKyAgdm9pZCBtZXRob2QyMDM5ICgpIHsgfQorICB2b2lkIG1ldGhvZDIwNDAgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjA0MSAoKSB7IH0KKyAgdm9pZCBtZXRob2QyMDQyICgpIHsgfQorICB2b2lkIG1ldGhvZDIwNDMgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjA0NCAoKSB7IH0KKyAgdm9pZCBtZXRob2QyMDQ1ICgpIHsgfQorICB2b2lkIG1ldGhvZDIwNDYgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjA0NyAoKSB7IH0KKyAgdm9pZCBtZXRob2QyMDQ4ICgpIHsgfQorICB2b2lkIG1ldGhvZDIwNDkgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjA1MCAoKSB7IH0KKyAgdm9pZCBtZXRob2QyMDUxICgpIHsgfQorICB2b2lkIG1ldGhvZDIwNTIgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjA1MyAoKSB7IH0KKyAgdm9pZCBtZXRob2QyMDU0ICgpIHsgfQorICB2b2lkIG1ldGhvZDIwNTUgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjA1NiAoKSB7IH0KKyAgdm9pZCBtZXRob2QyMDU3ICgpIHsgfQorICB2b2lkIG1ldGhvZDIwNTggKCkgeyB9CisgIHZvaWQgbWV0aG9kMjA1OSAoKSB7IH0KKyAgdm9pZCBtZXRob2QyMDYwICgpIHsgfQorICB2b2lkIG1ldGhvZDIwNjEgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjA2MiAoKSB7IH0KKyAgdm9pZCBtZXRob2QyMDYzICgpIHsgfQorICB2b2lkIG1ldGhvZDIwNjQgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjA2NSAoKSB7IH0KKyAgdm9pZCBtZXRob2QyMDY2ICgpIHsgfQorICB2b2lkIG1ldGhvZDIwNjcgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjA2OCAoKSB7IH0KKyAgdm9pZCBtZXRob2QyMDY5ICgpIHsgfQorICB2b2lkIG1ldGhvZDIwNzAgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjA3MSAoKSB7IH0KKyAgdm9pZCBtZXRob2QyMDcyICgpIHsgfQorICB2b2lkIG1ldGhvZDIwNzMgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjA3NCAoKSB7IH0KKyAgdm9pZCBtZXRob2QyMDc1ICgpIHsgfQorICB2b2lkIG1ldGhvZDIwNzYgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjA3NyAoKSB7IH0KKyAgdm9pZCBtZXRob2QyMDc4ICgpIHsgfQorICB2b2lkIG1ldGhvZDIwNzkgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjA4MCAoKSB7IH0KKyAgdm9pZCBtZXRob2QyMDgxICgpIHsgfQorICB2b2lkIG1ldGhvZDIwODIgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjA4MyAoKSB7IH0KKyAgdm9pZCBtZXRob2QyMDg0ICgpIHsgfQorICB2b2lkIG1ldGhvZDIwODUgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjA4NiAoKSB7IH0KKyAgdm9pZCBtZXRob2QyMDg3ICgpIHsgfQorICB2b2lkIG1ldGhvZDIwODggKCkgeyB9CisgIHZvaWQgbWV0aG9kMjA4OSAoKSB7IH0KKyAgdm9pZCBtZXRob2QyMDkwICgpIHsgfQorICB2b2lkIG1ldGhvZDIwOTEgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjA5MiAoKSB7IH0KKyAgdm9pZCBtZXRob2QyMDkzICgpIHsgfQorICB2b2lkIG1ldGhvZDIwOTQgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjA5NSAoKSB7IH0KKyAgdm9pZCBtZXRob2QyMDk2ICgpIHsgfQorICB2b2lkIG1ldGhvZDIwOTcgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjA5OCAoKSB7IH0KKyAgdm9pZCBtZXRob2QyMDk5ICgpIHsgfQorICB2b2lkIG1ldGhvZDIxMDAgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjEwMSAoKSB7IH0KKyAgdm9pZCBtZXRob2QyMTAyICgpIHsgfQorICB2b2lkIG1ldGhvZDIxMDMgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjEwNCAoKSB7IH0KKyAgdm9pZCBtZXRob2QyMTA1ICgpIHsgfQorICB2b2lkIG1ldGhvZDIxMDYgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjEwNyAoKSB7IH0KKyAgdm9pZCBtZXRob2QyMTA4ICgpIHsgfQorICB2b2lkIG1ldGhvZDIxMDkgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjExMCAoKSB7IH0KKyAgdm9pZCBtZXRob2QyMTExICgpIHsgfQorICB2b2lkIG1ldGhvZDIxMTIgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjExMyAoKSB7IH0KKyAgdm9pZCBtZXRob2QyMTE0ICgpIHsgfQorICB2b2lkIG1ldGhvZDIxMTUgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjExNiAoKSB7IH0KKyAgdm9pZCBtZXRob2QyMTE3ICgpIHsgfQorICB2b2lkIG1ldGhvZDIxMTggKCkgeyB9CisgIHZvaWQgbWV0aG9kMjExOSAoKSB7IH0KKyAgdm9pZCBtZXRob2QyMTIwICgpIHsgfQorICB2b2lkIG1ldGhvZDIxMjEgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjEyMiAoKSB7IH0KKyAgdm9pZCBtZXRob2QyMTIzICgpIHsgfQorICB2b2lkIG1ldGhvZDIxMjQgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjEyNSAoKSB7IH0KKyAgdm9pZCBtZXRob2QyMTI2ICgpIHsgfQorICB2b2lkIG1ldGhvZDIxMjcgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjEyOCAoKSB7IH0KKyAgdm9pZCBtZXRob2QyMTI5ICgpIHsgfQorICB2b2lkIG1ldGhvZDIxMzAgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjEzMSAoKSB7IH0KKyAgdm9pZCBtZXRob2QyMTMyICgpIHsgfQorICB2b2lkIG1ldGhvZDIxMzMgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjEzNCAoKSB7IH0KKyAgdm9pZCBtZXRob2QyMTM1ICgpIHsgfQorICB2b2lkIG1ldGhvZDIxMzYgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjEzNyAoKSB7IH0KKyAgdm9pZCBtZXRob2QyMTM4ICgpIHsgfQorICB2b2lkIG1ldGhvZDIxMzkgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjE0MCAoKSB7IH0KKyAgdm9pZCBtZXRob2QyMTQxICgpIHsgfQorICB2b2lkIG1ldGhvZDIxNDIgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjE0MyAoKSB7IH0KKyAgdm9pZCBtZXRob2QyMTQ0ICgpIHsgfQorICB2b2lkIG1ldGhvZDIxNDUgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjE0NiAoKSB7IH0KKyAgdm9pZCBtZXRob2QyMTQ3ICgpIHsgfQorICB2b2lkIG1ldGhvZDIxNDggKCkgeyB9CisgIHZvaWQgbWV0aG9kMjE0OSAoKSB7IH0KKyAgdm9pZCBtZXRob2QyMTUwICgpIHsgfQorICB2b2lkIG1ldGhvZDIxNTEgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjE1MiAoKSB7IH0KKyAgdm9pZCBtZXRob2QyMTUzICgpIHsgfQorICB2b2lkIG1ldGhvZDIxNTQgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjE1NSAoKSB7IH0KKyAgdm9pZCBtZXRob2QyMTU2ICgpIHsgfQorICB2b2lkIG1ldGhvZDIxNTcgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjE1OCAoKSB7IH0KKyAgdm9pZCBtZXRob2QyMTU5ICgpIHsgfQorICB2b2lkIG1ldGhvZDIxNjAgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjE2MSAoKSB7IH0KKyAgdm9pZCBtZXRob2QyMTYyICgpIHsgfQorICB2b2lkIG1ldGhvZDIxNjMgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjE2NCAoKSB7IH0KKyAgdm9pZCBtZXRob2QyMTY1ICgpIHsgfQorICB2b2lkIG1ldGhvZDIxNjYgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjE2NyAoKSB7IH0KKyAgdm9pZCBtZXRob2QyMTY4ICgpIHsgfQorICB2b2lkIG1ldGhvZDIxNjkgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjE3MCAoKSB7IH0KKyAgdm9pZCBtZXRob2QyMTcxICgpIHsgfQorICB2b2lkIG1ldGhvZDIxNzIgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjE3MyAoKSB7IH0KKyAgdm9pZCBtZXRob2QyMTc0ICgpIHsgfQorICB2b2lkIG1ldGhvZDIxNzUgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjE3NiAoKSB7IH0KKyAgdm9pZCBtZXRob2QyMTc3ICgpIHsgfQorICB2b2lkIG1ldGhvZDIxNzggKCkgeyB9CisgIHZvaWQgbWV0aG9kMjE3OSAoKSB7IH0KKyAgdm9pZCBtZXRob2QyMTgwICgpIHsgfQorICB2b2lkIG1ldGhvZDIxODEgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjE4MiAoKSB7IH0KKyAgdm9pZCBtZXRob2QyMTgzICgpIHsgfQorICB2b2lkIG1ldGhvZDIxODQgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjE4NSAoKSB7IH0KKyAgdm9pZCBtZXRob2QyMTg2ICgpIHsgfQorICB2b2lkIG1ldGhvZDIxODcgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjE4OCAoKSB7IH0KKyAgdm9pZCBtZXRob2QyMTg5ICgpIHsgfQorICB2b2lkIG1ldGhvZDIxOTAgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjE5MSAoKSB7IH0KKyAgdm9pZCBtZXRob2QyMTkyICgpIHsgfQorICB2b2lkIG1ldGhvZDIxOTMgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjE5NCAoKSB7IH0KKyAgdm9pZCBtZXRob2QyMTk1ICgpIHsgfQorICB2b2lkIG1ldGhvZDIxOTYgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjE5NyAoKSB7IH0KKyAgdm9pZCBtZXRob2QyMTk4ICgpIHsgfQorICB2b2lkIG1ldGhvZDIxOTkgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjIwMCAoKSB7IH0KKyAgdm9pZCBtZXRob2QyMjAxICgpIHsgfQorICB2b2lkIG1ldGhvZDIyMDIgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjIwMyAoKSB7IH0KKyAgdm9pZCBtZXRob2QyMjA0ICgpIHsgfQorICB2b2lkIG1ldGhvZDIyMDUgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjIwNiAoKSB7IH0KKyAgdm9pZCBtZXRob2QyMjA3ICgpIHsgfQorICB2b2lkIG1ldGhvZDIyMDggKCkgeyB9CisgIHZvaWQgbWV0aG9kMjIwOSAoKSB7IH0KKyAgdm9pZCBtZXRob2QyMjEwICgpIHsgfQorICB2b2lkIG1ldGhvZDIyMTEgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjIxMiAoKSB7IH0KKyAgdm9pZCBtZXRob2QyMjEzICgpIHsgfQorICB2b2lkIG1ldGhvZDIyMTQgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjIxNSAoKSB7IH0KKyAgdm9pZCBtZXRob2QyMjE2ICgpIHsgfQorICB2b2lkIG1ldGhvZDIyMTcgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjIxOCAoKSB7IH0KKyAgdm9pZCBtZXRob2QyMjE5ICgpIHsgfQorICB2b2lkIG1ldGhvZDIyMjAgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjIyMSAoKSB7IH0KKyAgdm9pZCBtZXRob2QyMjIyICgpIHsgfQorICB2b2lkIG1ldGhvZDIyMjMgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjIyNCAoKSB7IH0KKyAgdm9pZCBtZXRob2QyMjI1ICgpIHsgfQorICB2b2lkIG1ldGhvZDIyMjYgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjIyNyAoKSB7IH0KKyAgdm9pZCBtZXRob2QyMjI4ICgpIHsgfQorICB2b2lkIG1ldGhvZDIyMjkgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjIzMCAoKSB7IH0KKyAgdm9pZCBtZXRob2QyMjMxICgpIHsgfQorICB2b2lkIG1ldGhvZDIyMzIgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjIzMyAoKSB7IH0KKyAgdm9pZCBtZXRob2QyMjM0ICgpIHsgfQorICB2b2lkIG1ldGhvZDIyMzUgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjIzNiAoKSB7IH0KKyAgdm9pZCBtZXRob2QyMjM3ICgpIHsgfQorICB2b2lkIG1ldGhvZDIyMzggKCkgeyB9CisgIHZvaWQgbWV0aG9kMjIzOSAoKSB7IH0KKyAgdm9pZCBtZXRob2QyMjQwICgpIHsgfQorICB2b2lkIG1ldGhvZDIyNDEgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjI0MiAoKSB7IH0KKyAgdm9pZCBtZXRob2QyMjQzICgpIHsgfQorICB2b2lkIG1ldGhvZDIyNDQgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjI0NSAoKSB7IH0KKyAgdm9pZCBtZXRob2QyMjQ2ICgpIHsgfQorICB2b2lkIG1ldGhvZDIyNDcgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjI0OCAoKSB7IH0KKyAgdm9pZCBtZXRob2QyMjQ5ICgpIHsgfQorICB2b2lkIG1ldGhvZDIyNTAgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjI1MSAoKSB7IH0KKyAgdm9pZCBtZXRob2QyMjUyICgpIHsgfQorICB2b2lkIG1ldGhvZDIyNTMgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjI1NCAoKSB7IH0KKyAgdm9pZCBtZXRob2QyMjU1ICgpIHsgfQorICB2b2lkIG1ldGhvZDIyNTYgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjI1NyAoKSB7IH0KKyAgdm9pZCBtZXRob2QyMjU4ICgpIHsgfQorICB2b2lkIG1ldGhvZDIyNTkgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjI2MCAoKSB7IH0KKyAgdm9pZCBtZXRob2QyMjYxICgpIHsgfQorICB2b2lkIG1ldGhvZDIyNjIgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjI2MyAoKSB7IH0KKyAgdm9pZCBtZXRob2QyMjY0ICgpIHsgfQorICB2b2lkIG1ldGhvZDIyNjUgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjI2NiAoKSB7IH0KKyAgdm9pZCBtZXRob2QyMjY3ICgpIHsgfQorICB2b2lkIG1ldGhvZDIyNjggKCkgeyB9CisgIHZvaWQgbWV0aG9kMjI2OSAoKSB7IH0KKyAgdm9pZCBtZXRob2QyMjcwICgpIHsgfQorICB2b2lkIG1ldGhvZDIyNzEgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjI3MiAoKSB7IH0KKyAgdm9pZCBtZXRob2QyMjczICgpIHsgfQorICB2b2lkIG1ldGhvZDIyNzQgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjI3NSAoKSB7IH0KKyAgdm9pZCBtZXRob2QyMjc2ICgpIHsgfQorICB2b2lkIG1ldGhvZDIyNzcgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjI3OCAoKSB7IH0KKyAgdm9pZCBtZXRob2QyMjc5ICgpIHsgfQorICB2b2lkIG1ldGhvZDIyODAgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjI4MSAoKSB7IH0KKyAgdm9pZCBtZXRob2QyMjgyICgpIHsgfQorICB2b2lkIG1ldGhvZDIyODMgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjI4NCAoKSB7IH0KKyAgdm9pZCBtZXRob2QyMjg1ICgpIHsgfQorICB2b2lkIG1ldGhvZDIyODYgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjI4NyAoKSB7IH0KKyAgdm9pZCBtZXRob2QyMjg4ICgpIHsgfQorICB2b2lkIG1ldGhvZDIyODkgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjI5MCAoKSB7IH0KKyAgdm9pZCBtZXRob2QyMjkxICgpIHsgfQorICB2b2lkIG1ldGhvZDIyOTIgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjI5MyAoKSB7IH0KKyAgdm9pZCBtZXRob2QyMjk0ICgpIHsgfQorICB2b2lkIG1ldGhvZDIyOTUgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjI5NiAoKSB7IH0KKyAgdm9pZCBtZXRob2QyMjk3ICgpIHsgfQorICB2b2lkIG1ldGhvZDIyOTggKCkgeyB9CisgIHZvaWQgbWV0aG9kMjI5OSAoKSB7IH0KKyAgdm9pZCBtZXRob2QyMzAwICgpIHsgfQorICB2b2lkIG1ldGhvZDIzMDEgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjMwMiAoKSB7IH0KKyAgdm9pZCBtZXRob2QyMzAzICgpIHsgfQorICB2b2lkIG1ldGhvZDIzMDQgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjMwNSAoKSB7IH0KKyAgdm9pZCBtZXRob2QyMzA2ICgpIHsgfQorICB2b2lkIG1ldGhvZDIzMDcgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjMwOCAoKSB7IH0KKyAgdm9pZCBtZXRob2QyMzA5ICgpIHsgfQorICB2b2lkIG1ldGhvZDIzMTAgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjMxMSAoKSB7IH0KKyAgdm9pZCBtZXRob2QyMzEyICgpIHsgfQorICB2b2lkIG1ldGhvZDIzMTMgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjMxNCAoKSB7IH0KKyAgdm9pZCBtZXRob2QyMzE1ICgpIHsgfQorICB2b2lkIG1ldGhvZDIzMTYgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjMxNyAoKSB7IH0KKyAgdm9pZCBtZXRob2QyMzE4ICgpIHsgfQorICB2b2lkIG1ldGhvZDIzMTkgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjMyMCAoKSB7IH0KKyAgdm9pZCBtZXRob2QyMzIxICgpIHsgfQorICB2b2lkIG1ldGhvZDIzMjIgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjMyMyAoKSB7IH0KKyAgdm9pZCBtZXRob2QyMzI0ICgpIHsgfQorICB2b2lkIG1ldGhvZDIzMjUgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjMyNiAoKSB7IH0KKyAgdm9pZCBtZXRob2QyMzI3ICgpIHsgfQorICB2b2lkIG1ldGhvZDIzMjggKCkgeyB9CisgIHZvaWQgbWV0aG9kMjMyOSAoKSB7IH0KKyAgdm9pZCBtZXRob2QyMzMwICgpIHsgfQorICB2b2lkIG1ldGhvZDIzMzEgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjMzMiAoKSB7IH0KKyAgdm9pZCBtZXRob2QyMzMzICgpIHsgfQorICB2b2lkIG1ldGhvZDIzMzQgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjMzNSAoKSB7IH0KKyAgdm9pZCBtZXRob2QyMzM2ICgpIHsgfQorICB2b2lkIG1ldGhvZDIzMzcgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjMzOCAoKSB7IH0KKyAgdm9pZCBtZXRob2QyMzM5ICgpIHsgfQorICB2b2lkIG1ldGhvZDIzNDAgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjM0MSAoKSB7IH0KKyAgdm9pZCBtZXRob2QyMzQyICgpIHsgfQorICB2b2lkIG1ldGhvZDIzNDMgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjM0NCAoKSB7IH0KKyAgdm9pZCBtZXRob2QyMzQ1ICgpIHsgfQorICB2b2lkIG1ldGhvZDIzNDYgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjM0NyAoKSB7IH0KKyAgdm9pZCBtZXRob2QyMzQ4ICgpIHsgfQorICB2b2lkIG1ldGhvZDIzNDkgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjM1MCAoKSB7IH0KKyAgdm9pZCBtZXRob2QyMzUxICgpIHsgfQorICB2b2lkIG1ldGhvZDIzNTIgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjM1MyAoKSB7IH0KKyAgdm9pZCBtZXRob2QyMzU0ICgpIHsgfQorICB2b2lkIG1ldGhvZDIzNTUgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjM1NiAoKSB7IH0KKyAgdm9pZCBtZXRob2QyMzU3ICgpIHsgfQorICB2b2lkIG1ldGhvZDIzNTggKCkgeyB9CisgIHZvaWQgbWV0aG9kMjM1OSAoKSB7IH0KKyAgdm9pZCBtZXRob2QyMzYwICgpIHsgfQorICB2b2lkIG1ldGhvZDIzNjEgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjM2MiAoKSB7IH0KKyAgdm9pZCBtZXRob2QyMzYzICgpIHsgfQorICB2b2lkIG1ldGhvZDIzNjQgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjM2NSAoKSB7IH0KKyAgdm9pZCBtZXRob2QyMzY2ICgpIHsgfQorICB2b2lkIG1ldGhvZDIzNjcgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjM2OCAoKSB7IH0KKyAgdm9pZCBtZXRob2QyMzY5ICgpIHsgfQorICB2b2lkIG1ldGhvZDIzNzAgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjM3MSAoKSB7IH0KKyAgdm9pZCBtZXRob2QyMzcyICgpIHsgfQorICB2b2lkIG1ldGhvZDIzNzMgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjM3NCAoKSB7IH0KKyAgdm9pZCBtZXRob2QyMzc1ICgpIHsgfQorICB2b2lkIG1ldGhvZDIzNzYgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjM3NyAoKSB7IH0KKyAgdm9pZCBtZXRob2QyMzc4ICgpIHsgfQorICB2b2lkIG1ldGhvZDIzNzkgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjM4MCAoKSB7IH0KKyAgdm9pZCBtZXRob2QyMzgxICgpIHsgfQorICB2b2lkIG1ldGhvZDIzODIgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjM4MyAoKSB7IH0KKyAgdm9pZCBtZXRob2QyMzg0ICgpIHsgfQorICB2b2lkIG1ldGhvZDIzODUgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjM4NiAoKSB7IH0KKyAgdm9pZCBtZXRob2QyMzg3ICgpIHsgfQorICB2b2lkIG1ldGhvZDIzODggKCkgeyB9CisgIHZvaWQgbWV0aG9kMjM4OSAoKSB7IH0KKyAgdm9pZCBtZXRob2QyMzkwICgpIHsgfQorICB2b2lkIG1ldGhvZDIzOTEgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjM5MiAoKSB7IH0KKyAgdm9pZCBtZXRob2QyMzkzICgpIHsgfQorICB2b2lkIG1ldGhvZDIzOTQgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjM5NSAoKSB7IH0KKyAgdm9pZCBtZXRob2QyMzk2ICgpIHsgfQorICB2b2lkIG1ldGhvZDIzOTcgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjM5OCAoKSB7IH0KKyAgdm9pZCBtZXRob2QyMzk5ICgpIHsgfQorICB2b2lkIG1ldGhvZDI0MDAgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjQwMSAoKSB7IH0KKyAgdm9pZCBtZXRob2QyNDAyICgpIHsgfQorICB2b2lkIG1ldGhvZDI0MDMgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjQwNCAoKSB7IH0KKyAgdm9pZCBtZXRob2QyNDA1ICgpIHsgfQorICB2b2lkIG1ldGhvZDI0MDYgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjQwNyAoKSB7IH0KKyAgdm9pZCBtZXRob2QyNDA4ICgpIHsgfQorICB2b2lkIG1ldGhvZDI0MDkgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjQxMCAoKSB7IH0KKyAgdm9pZCBtZXRob2QyNDExICgpIHsgfQorICB2b2lkIG1ldGhvZDI0MTIgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjQxMyAoKSB7IH0KKyAgdm9pZCBtZXRob2QyNDE0ICgpIHsgfQorICB2b2lkIG1ldGhvZDI0MTUgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjQxNiAoKSB7IH0KKyAgdm9pZCBtZXRob2QyNDE3ICgpIHsgfQorICB2b2lkIG1ldGhvZDI0MTggKCkgeyB9CisgIHZvaWQgbWV0aG9kMjQxOSAoKSB7IH0KKyAgdm9pZCBtZXRob2QyNDIwICgpIHsgfQorICB2b2lkIG1ldGhvZDI0MjEgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjQyMiAoKSB7IH0KKyAgdm9pZCBtZXRob2QyNDIzICgpIHsgfQorICB2b2lkIG1ldGhvZDI0MjQgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjQyNSAoKSB7IH0KKyAgdm9pZCBtZXRob2QyNDI2ICgpIHsgfQorICB2b2lkIG1ldGhvZDI0MjcgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjQyOCAoKSB7IH0KKyAgdm9pZCBtZXRob2QyNDI5ICgpIHsgfQorICB2b2lkIG1ldGhvZDI0MzAgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjQzMSAoKSB7IH0KKyAgdm9pZCBtZXRob2QyNDMyICgpIHsgfQorICB2b2lkIG1ldGhvZDI0MzMgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjQzNCAoKSB7IH0KKyAgdm9pZCBtZXRob2QyNDM1ICgpIHsgfQorICB2b2lkIG1ldGhvZDI0MzYgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjQzNyAoKSB7IH0KKyAgdm9pZCBtZXRob2QyNDM4ICgpIHsgfQorICB2b2lkIG1ldGhvZDI0MzkgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjQ0MCAoKSB7IH0KKyAgdm9pZCBtZXRob2QyNDQxICgpIHsgfQorICB2b2lkIG1ldGhvZDI0NDIgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjQ0MyAoKSB7IH0KKyAgdm9pZCBtZXRob2QyNDQ0ICgpIHsgfQorICB2b2lkIG1ldGhvZDI0NDUgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjQ0NiAoKSB7IH0KKyAgdm9pZCBtZXRob2QyNDQ3ICgpIHsgfQorICB2b2lkIG1ldGhvZDI0NDggKCkgeyB9CisgIHZvaWQgbWV0aG9kMjQ0OSAoKSB7IH0KKyAgdm9pZCBtZXRob2QyNDUwICgpIHsgfQorICB2b2lkIG1ldGhvZDI0NTEgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjQ1MiAoKSB7IH0KKyAgdm9pZCBtZXRob2QyNDUzICgpIHsgfQorICB2b2lkIG1ldGhvZDI0NTQgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjQ1NSAoKSB7IH0KKyAgdm9pZCBtZXRob2QyNDU2ICgpIHsgfQorICB2b2lkIG1ldGhvZDI0NTcgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjQ1OCAoKSB7IH0KKyAgdm9pZCBtZXRob2QyNDU5ICgpIHsgfQorICB2b2lkIG1ldGhvZDI0NjAgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjQ2MSAoKSB7IH0KKyAgdm9pZCBtZXRob2QyNDYyICgpIHsgfQorICB2b2lkIG1ldGhvZDI0NjMgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjQ2NCAoKSB7IH0KKyAgdm9pZCBtZXRob2QyNDY1ICgpIHsgfQorICB2b2lkIG1ldGhvZDI0NjYgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjQ2NyAoKSB7IH0KKyAgdm9pZCBtZXRob2QyNDY4ICgpIHsgfQorICB2b2lkIG1ldGhvZDI0NjkgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjQ3MCAoKSB7IH0KKyAgdm9pZCBtZXRob2QyNDcxICgpIHsgfQorICB2b2lkIG1ldGhvZDI0NzIgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjQ3MyAoKSB7IH0KKyAgdm9pZCBtZXRob2QyNDc0ICgpIHsgfQorICB2b2lkIG1ldGhvZDI0NzUgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjQ3NiAoKSB7IH0KKyAgdm9pZCBtZXRob2QyNDc3ICgpIHsgfQorICB2b2lkIG1ldGhvZDI0NzggKCkgeyB9CisgIHZvaWQgbWV0aG9kMjQ3OSAoKSB7IH0KKyAgdm9pZCBtZXRob2QyNDgwICgpIHsgfQorICB2b2lkIG1ldGhvZDI0ODEgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjQ4MiAoKSB7IH0KKyAgdm9pZCBtZXRob2QyNDgzICgpIHsgfQorICB2b2lkIG1ldGhvZDI0ODQgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjQ4NSAoKSB7IH0KKyAgdm9pZCBtZXRob2QyNDg2ICgpIHsgfQorICB2b2lkIG1ldGhvZDI0ODcgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjQ4OCAoKSB7IH0KKyAgdm9pZCBtZXRob2QyNDg5ICgpIHsgfQorICB2b2lkIG1ldGhvZDI0OTAgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjQ5MSAoKSB7IH0KKyAgdm9pZCBtZXRob2QyNDkyICgpIHsgfQorICB2b2lkIG1ldGhvZDI0OTMgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjQ5NCAoKSB7IH0KKyAgdm9pZCBtZXRob2QyNDk1ICgpIHsgfQorICB2b2lkIG1ldGhvZDI0OTYgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjQ5NyAoKSB7IH0KKyAgdm9pZCBtZXRob2QyNDk4ICgpIHsgfQorICB2b2lkIG1ldGhvZDI0OTkgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjUwMCAoKSB7IH0KKyAgdm9pZCBtZXRob2QyNTAxICgpIHsgfQorICB2b2lkIG1ldGhvZDI1MDIgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjUwMyAoKSB7IH0KKyAgdm9pZCBtZXRob2QyNTA0ICgpIHsgfQorICB2b2lkIG1ldGhvZDI1MDUgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjUwNiAoKSB7IH0KKyAgdm9pZCBtZXRob2QyNTA3ICgpIHsgfQorICB2b2lkIG1ldGhvZDI1MDggKCkgeyB9CisgIHZvaWQgbWV0aG9kMjUwOSAoKSB7IH0KKyAgdm9pZCBtZXRob2QyNTEwICgpIHsgfQorICB2b2lkIG1ldGhvZDI1MTEgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjUxMiAoKSB7IH0KKyAgdm9pZCBtZXRob2QyNTEzICgpIHsgfQorICB2b2lkIG1ldGhvZDI1MTQgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjUxNSAoKSB7IH0KKyAgdm9pZCBtZXRob2QyNTE2ICgpIHsgfQorICB2b2lkIG1ldGhvZDI1MTcgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjUxOCAoKSB7IH0KKyAgdm9pZCBtZXRob2QyNTE5ICgpIHsgfQorICB2b2lkIG1ldGhvZDI1MjAgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjUyMSAoKSB7IH0KKyAgdm9pZCBtZXRob2QyNTIyICgpIHsgfQorICB2b2lkIG1ldGhvZDI1MjMgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjUyNCAoKSB7IH0KKyAgdm9pZCBtZXRob2QyNTI1ICgpIHsgfQorICB2b2lkIG1ldGhvZDI1MjYgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjUyNyAoKSB7IH0KKyAgdm9pZCBtZXRob2QyNTI4ICgpIHsgfQorICB2b2lkIG1ldGhvZDI1MjkgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjUzMCAoKSB7IH0KKyAgdm9pZCBtZXRob2QyNTMxICgpIHsgfQorICB2b2lkIG1ldGhvZDI1MzIgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjUzMyAoKSB7IH0KKyAgdm9pZCBtZXRob2QyNTM0ICgpIHsgfQorICB2b2lkIG1ldGhvZDI1MzUgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjUzNiAoKSB7IH0KKyAgdm9pZCBtZXRob2QyNTM3ICgpIHsgfQorICB2b2lkIG1ldGhvZDI1MzggKCkgeyB9CisgIHZvaWQgbWV0aG9kMjUzOSAoKSB7IH0KKyAgdm9pZCBtZXRob2QyNTQwICgpIHsgfQorICB2b2lkIG1ldGhvZDI1NDEgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjU0MiAoKSB7IH0KKyAgdm9pZCBtZXRob2QyNTQzICgpIHsgfQorICB2b2lkIG1ldGhvZDI1NDQgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjU0NSAoKSB7IH0KKyAgdm9pZCBtZXRob2QyNTQ2ICgpIHsgfQorICB2b2lkIG1ldGhvZDI1NDcgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjU0OCAoKSB7IH0KKyAgdm9pZCBtZXRob2QyNTQ5ICgpIHsgfQorICB2b2lkIG1ldGhvZDI1NTAgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjU1MSAoKSB7IH0KKyAgdm9pZCBtZXRob2QyNTUyICgpIHsgfQorICB2b2lkIG1ldGhvZDI1NTMgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjU1NCAoKSB7IH0KKyAgdm9pZCBtZXRob2QyNTU1ICgpIHsgfQorICB2b2lkIG1ldGhvZDI1NTYgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjU1NyAoKSB7IH0KKyAgdm9pZCBtZXRob2QyNTU4ICgpIHsgfQorICB2b2lkIG1ldGhvZDI1NTkgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjU2MCAoKSB7IH0KKyAgdm9pZCBtZXRob2QyNTYxICgpIHsgfQorICB2b2lkIG1ldGhvZDI1NjIgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjU2MyAoKSB7IH0KKyAgdm9pZCBtZXRob2QyNTY0ICgpIHsgfQorICB2b2lkIG1ldGhvZDI1NjUgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjU2NiAoKSB7IH0KKyAgdm9pZCBtZXRob2QyNTY3ICgpIHsgfQorICB2b2lkIG1ldGhvZDI1NjggKCkgeyB9CisgIHZvaWQgbWV0aG9kMjU2OSAoKSB7IH0KKyAgdm9pZCBtZXRob2QyNTcwICgpIHsgfQorICB2b2lkIG1ldGhvZDI1NzEgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjU3MiAoKSB7IH0KKyAgdm9pZCBtZXRob2QyNTczICgpIHsgfQorICB2b2lkIG1ldGhvZDI1NzQgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjU3NSAoKSB7IH0KKyAgdm9pZCBtZXRob2QyNTc2ICgpIHsgfQorICB2b2lkIG1ldGhvZDI1NzcgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjU3OCAoKSB7IH0KKyAgdm9pZCBtZXRob2QyNTc5ICgpIHsgfQorICB2b2lkIG1ldGhvZDI1ODAgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjU4MSAoKSB7IH0KKyAgdm9pZCBtZXRob2QyNTgyICgpIHsgfQorICB2b2lkIG1ldGhvZDI1ODMgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjU4NCAoKSB7IH0KKyAgdm9pZCBtZXRob2QyNTg1ICgpIHsgfQorICB2b2lkIG1ldGhvZDI1ODYgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjU4NyAoKSB7IH0KKyAgdm9pZCBtZXRob2QyNTg4ICgpIHsgfQorICB2b2lkIG1ldGhvZDI1ODkgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjU5MCAoKSB7IH0KKyAgdm9pZCBtZXRob2QyNTkxICgpIHsgfQorICB2b2lkIG1ldGhvZDI1OTIgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjU5MyAoKSB7IH0KKyAgdm9pZCBtZXRob2QyNTk0ICgpIHsgfQorICB2b2lkIG1ldGhvZDI1OTUgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjU5NiAoKSB7IH0KKyAgdm9pZCBtZXRob2QyNTk3ICgpIHsgfQorICB2b2lkIG1ldGhvZDI1OTggKCkgeyB9CisgIHZvaWQgbWV0aG9kMjU5OSAoKSB7IH0KKyAgdm9pZCBtZXRob2QyNjAwICgpIHsgfQorICB2b2lkIG1ldGhvZDI2MDEgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjYwMiAoKSB7IH0KKyAgdm9pZCBtZXRob2QyNjAzICgpIHsgfQorICB2b2lkIG1ldGhvZDI2MDQgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjYwNSAoKSB7IH0KKyAgdm9pZCBtZXRob2QyNjA2ICgpIHsgfQorICB2b2lkIG1ldGhvZDI2MDcgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjYwOCAoKSB7IH0KKyAgdm9pZCBtZXRob2QyNjA5ICgpIHsgfQorICB2b2lkIG1ldGhvZDI2MTAgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjYxMSAoKSB7IH0KKyAgdm9pZCBtZXRob2QyNjEyICgpIHsgfQorICB2b2lkIG1ldGhvZDI2MTMgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjYxNCAoKSB7IH0KKyAgdm9pZCBtZXRob2QyNjE1ICgpIHsgfQorICB2b2lkIG1ldGhvZDI2MTYgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjYxNyAoKSB7IH0KKyAgdm9pZCBtZXRob2QyNjE4ICgpIHsgfQorICB2b2lkIG1ldGhvZDI2MTkgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjYyMCAoKSB7IH0KKyAgdm9pZCBtZXRob2QyNjIxICgpIHsgfQorICB2b2lkIG1ldGhvZDI2MjIgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjYyMyAoKSB7IH0KKyAgdm9pZCBtZXRob2QyNjI0ICgpIHsgfQorICB2b2lkIG1ldGhvZDI2MjUgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjYyNiAoKSB7IH0KKyAgdm9pZCBtZXRob2QyNjI3ICgpIHsgfQorICB2b2lkIG1ldGhvZDI2MjggKCkgeyB9CisgIHZvaWQgbWV0aG9kMjYyOSAoKSB7IH0KKyAgdm9pZCBtZXRob2QyNjMwICgpIHsgfQorICB2b2lkIG1ldGhvZDI2MzEgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjYzMiAoKSB7IH0KKyAgdm9pZCBtZXRob2QyNjMzICgpIHsgfQorICB2b2lkIG1ldGhvZDI2MzQgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjYzNSAoKSB7IH0KKyAgdm9pZCBtZXRob2QyNjM2ICgpIHsgfQorICB2b2lkIG1ldGhvZDI2MzcgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjYzOCAoKSB7IH0KKyAgdm9pZCBtZXRob2QyNjM5ICgpIHsgfQorICB2b2lkIG1ldGhvZDI2NDAgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjY0MSAoKSB7IH0KKyAgdm9pZCBtZXRob2QyNjQyICgpIHsgfQorICB2b2lkIG1ldGhvZDI2NDMgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjY0NCAoKSB7IH0KKyAgdm9pZCBtZXRob2QyNjQ1ICgpIHsgfQorICB2b2lkIG1ldGhvZDI2NDYgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjY0NyAoKSB7IH0KKyAgdm9pZCBtZXRob2QyNjQ4ICgpIHsgfQorICB2b2lkIG1ldGhvZDI2NDkgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjY1MCAoKSB7IH0KKyAgdm9pZCBtZXRob2QyNjUxICgpIHsgfQorICB2b2lkIG1ldGhvZDI2NTIgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjY1MyAoKSB7IH0KKyAgdm9pZCBtZXRob2QyNjU0ICgpIHsgfQorICB2b2lkIG1ldGhvZDI2NTUgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjY1NiAoKSB7IH0KKyAgdm9pZCBtZXRob2QyNjU3ICgpIHsgfQorICB2b2lkIG1ldGhvZDI2NTggKCkgeyB9CisgIHZvaWQgbWV0aG9kMjY1OSAoKSB7IH0KKyAgdm9pZCBtZXRob2QyNjYwICgpIHsgfQorICB2b2lkIG1ldGhvZDI2NjEgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjY2MiAoKSB7IH0KKyAgdm9pZCBtZXRob2QyNjYzICgpIHsgfQorICB2b2lkIG1ldGhvZDI2NjQgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjY2NSAoKSB7IH0KKyAgdm9pZCBtZXRob2QyNjY2ICgpIHsgfQorICB2b2lkIG1ldGhvZDI2NjcgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjY2OCAoKSB7IH0KKyAgdm9pZCBtZXRob2QyNjY5ICgpIHsgfQorICB2b2lkIG1ldGhvZDI2NzAgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjY3MSAoKSB7IH0KKyAgdm9pZCBtZXRob2QyNjcyICgpIHsgfQorICB2b2lkIG1ldGhvZDI2NzMgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjY3NCAoKSB7IH0KKyAgdm9pZCBtZXRob2QyNjc1ICgpIHsgfQorICB2b2lkIG1ldGhvZDI2NzYgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjY3NyAoKSB7IH0KKyAgdm9pZCBtZXRob2QyNjc4ICgpIHsgfQorICB2b2lkIG1ldGhvZDI2NzkgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjY4MCAoKSB7IH0KKyAgdm9pZCBtZXRob2QyNjgxICgpIHsgfQorICB2b2lkIG1ldGhvZDI2ODIgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjY4MyAoKSB7IH0KKyAgdm9pZCBtZXRob2QyNjg0ICgpIHsgfQorICB2b2lkIG1ldGhvZDI2ODUgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjY4NiAoKSB7IH0KKyAgdm9pZCBtZXRob2QyNjg3ICgpIHsgfQorICB2b2lkIG1ldGhvZDI2ODggKCkgeyB9CisgIHZvaWQgbWV0aG9kMjY4OSAoKSB7IH0KKyAgdm9pZCBtZXRob2QyNjkwICgpIHsgfQorICB2b2lkIG1ldGhvZDI2OTEgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjY5MiAoKSB7IH0KKyAgdm9pZCBtZXRob2QyNjkzICgpIHsgfQorICB2b2lkIG1ldGhvZDI2OTQgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjY5NSAoKSB7IH0KKyAgdm9pZCBtZXRob2QyNjk2ICgpIHsgfQorICB2b2lkIG1ldGhvZDI2OTcgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjY5OCAoKSB7IH0KKyAgdm9pZCBtZXRob2QyNjk5ICgpIHsgfQorICB2b2lkIG1ldGhvZDI3MDAgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjcwMSAoKSB7IH0KKyAgdm9pZCBtZXRob2QyNzAyICgpIHsgfQorICB2b2lkIG1ldGhvZDI3MDMgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjcwNCAoKSB7IH0KKyAgdm9pZCBtZXRob2QyNzA1ICgpIHsgfQorICB2b2lkIG1ldGhvZDI3MDYgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjcwNyAoKSB7IH0KKyAgdm9pZCBtZXRob2QyNzA4ICgpIHsgfQorICB2b2lkIG1ldGhvZDI3MDkgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjcxMCAoKSB7IH0KKyAgdm9pZCBtZXRob2QyNzExICgpIHsgfQorICB2b2lkIG1ldGhvZDI3MTIgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjcxMyAoKSB7IH0KKyAgdm9pZCBtZXRob2QyNzE0ICgpIHsgfQorICB2b2lkIG1ldGhvZDI3MTUgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjcxNiAoKSB7IH0KKyAgdm9pZCBtZXRob2QyNzE3ICgpIHsgfQorICB2b2lkIG1ldGhvZDI3MTggKCkgeyB9CisgIHZvaWQgbWV0aG9kMjcxOSAoKSB7IH0KKyAgdm9pZCBtZXRob2QyNzIwICgpIHsgfQorICB2b2lkIG1ldGhvZDI3MjEgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjcyMiAoKSB7IH0KKyAgdm9pZCBtZXRob2QyNzIzICgpIHsgfQorICB2b2lkIG1ldGhvZDI3MjQgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjcyNSAoKSB7IH0KKyAgdm9pZCBtZXRob2QyNzI2ICgpIHsgfQorICB2b2lkIG1ldGhvZDI3MjcgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjcyOCAoKSB7IH0KKyAgdm9pZCBtZXRob2QyNzI5ICgpIHsgfQorICB2b2lkIG1ldGhvZDI3MzAgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjczMSAoKSB7IH0KKyAgdm9pZCBtZXRob2QyNzMyICgpIHsgfQorICB2b2lkIG1ldGhvZDI3MzMgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjczNCAoKSB7IH0KKyAgdm9pZCBtZXRob2QyNzM1ICgpIHsgfQorICB2b2lkIG1ldGhvZDI3MzYgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjczNyAoKSB7IH0KKyAgdm9pZCBtZXRob2QyNzM4ICgpIHsgfQorICB2b2lkIG1ldGhvZDI3MzkgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjc0MCAoKSB7IH0KKyAgdm9pZCBtZXRob2QyNzQxICgpIHsgfQorICB2b2lkIG1ldGhvZDI3NDIgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjc0MyAoKSB7IH0KKyAgdm9pZCBtZXRob2QyNzQ0ICgpIHsgfQorICB2b2lkIG1ldGhvZDI3NDUgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjc0NiAoKSB7IH0KKyAgdm9pZCBtZXRob2QyNzQ3ICgpIHsgfQorICB2b2lkIG1ldGhvZDI3NDggKCkgeyB9CisgIHZvaWQgbWV0aG9kMjc0OSAoKSB7IH0KKyAgdm9pZCBtZXRob2QyNzUwICgpIHsgfQorICB2b2lkIG1ldGhvZDI3NTEgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjc1MiAoKSB7IH0KKyAgdm9pZCBtZXRob2QyNzUzICgpIHsgfQorICB2b2lkIG1ldGhvZDI3NTQgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjc1NSAoKSB7IH0KKyAgdm9pZCBtZXRob2QyNzU2ICgpIHsgfQorICB2b2lkIG1ldGhvZDI3NTcgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjc1OCAoKSB7IH0KKyAgdm9pZCBtZXRob2QyNzU5ICgpIHsgfQorICB2b2lkIG1ldGhvZDI3NjAgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjc2MSAoKSB7IH0KKyAgdm9pZCBtZXRob2QyNzYyICgpIHsgfQorICB2b2lkIG1ldGhvZDI3NjMgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjc2NCAoKSB7IH0KKyAgdm9pZCBtZXRob2QyNzY1ICgpIHsgfQorICB2b2lkIG1ldGhvZDI3NjYgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjc2NyAoKSB7IH0KKyAgdm9pZCBtZXRob2QyNzY4ICgpIHsgfQorICB2b2lkIG1ldGhvZDI3NjkgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjc3MCAoKSB7IH0KKyAgdm9pZCBtZXRob2QyNzcxICgpIHsgfQorICB2b2lkIG1ldGhvZDI3NzIgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjc3MyAoKSB7IH0KKyAgdm9pZCBtZXRob2QyNzc0ICgpIHsgfQorICB2b2lkIG1ldGhvZDI3NzUgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjc3NiAoKSB7IH0KKyAgdm9pZCBtZXRob2QyNzc3ICgpIHsgfQorICB2b2lkIG1ldGhvZDI3NzggKCkgeyB9CisgIHZvaWQgbWV0aG9kMjc3OSAoKSB7IH0KKyAgdm9pZCBtZXRob2QyNzgwICgpIHsgfQorICB2b2lkIG1ldGhvZDI3ODEgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjc4MiAoKSB7IH0KKyAgdm9pZCBtZXRob2QyNzgzICgpIHsgfQorICB2b2lkIG1ldGhvZDI3ODQgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjc4NSAoKSB7IH0KKyAgdm9pZCBtZXRob2QyNzg2ICgpIHsgfQorICB2b2lkIG1ldGhvZDI3ODcgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjc4OCAoKSB7IH0KKyAgdm9pZCBtZXRob2QyNzg5ICgpIHsgfQorICB2b2lkIG1ldGhvZDI3OTAgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjc5MSAoKSB7IH0KKyAgdm9pZCBtZXRob2QyNzkyICgpIHsgfQorICB2b2lkIG1ldGhvZDI3OTMgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjc5NCAoKSB7IH0KKyAgdm9pZCBtZXRob2QyNzk1ICgpIHsgfQorICB2b2lkIG1ldGhvZDI3OTYgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjc5NyAoKSB7IH0KKyAgdm9pZCBtZXRob2QyNzk4ICgpIHsgfQorICB2b2lkIG1ldGhvZDI3OTkgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjgwMCAoKSB7IH0KKyAgdm9pZCBtZXRob2QyODAxICgpIHsgfQorICB2b2lkIG1ldGhvZDI4MDIgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjgwMyAoKSB7IH0KKyAgdm9pZCBtZXRob2QyODA0ICgpIHsgfQorICB2b2lkIG1ldGhvZDI4MDUgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjgwNiAoKSB7IH0KKyAgdm9pZCBtZXRob2QyODA3ICgpIHsgfQorICB2b2lkIG1ldGhvZDI4MDggKCkgeyB9CisgIHZvaWQgbWV0aG9kMjgwOSAoKSB7IH0KKyAgdm9pZCBtZXRob2QyODEwICgpIHsgfQorICB2b2lkIG1ldGhvZDI4MTEgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjgxMiAoKSB7IH0KKyAgdm9pZCBtZXRob2QyODEzICgpIHsgfQorICB2b2lkIG1ldGhvZDI4MTQgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjgxNSAoKSB7IH0KKyAgdm9pZCBtZXRob2QyODE2ICgpIHsgfQorICB2b2lkIG1ldGhvZDI4MTcgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjgxOCAoKSB7IH0KKyAgdm9pZCBtZXRob2QyODE5ICgpIHsgfQorICB2b2lkIG1ldGhvZDI4MjAgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjgyMSAoKSB7IH0KKyAgdm9pZCBtZXRob2QyODIyICgpIHsgfQorICB2b2lkIG1ldGhvZDI4MjMgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjgyNCAoKSB7IH0KKyAgdm9pZCBtZXRob2QyODI1ICgpIHsgfQorICB2b2lkIG1ldGhvZDI4MjYgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjgyNyAoKSB7IH0KKyAgdm9pZCBtZXRob2QyODI4ICgpIHsgfQorICB2b2lkIG1ldGhvZDI4MjkgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjgzMCAoKSB7IH0KKyAgdm9pZCBtZXRob2QyODMxICgpIHsgfQorICB2b2lkIG1ldGhvZDI4MzIgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjgzMyAoKSB7IH0KKyAgdm9pZCBtZXRob2QyODM0ICgpIHsgfQorICB2b2lkIG1ldGhvZDI4MzUgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjgzNiAoKSB7IH0KKyAgdm9pZCBtZXRob2QyODM3ICgpIHsgfQorICB2b2lkIG1ldGhvZDI4MzggKCkgeyB9CisgIHZvaWQgbWV0aG9kMjgzOSAoKSB7IH0KKyAgdm9pZCBtZXRob2QyODQwICgpIHsgfQorICB2b2lkIG1ldGhvZDI4NDEgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjg0MiAoKSB7IH0KKyAgdm9pZCBtZXRob2QyODQzICgpIHsgfQorICB2b2lkIG1ldGhvZDI4NDQgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjg0NSAoKSB7IH0KKyAgdm9pZCBtZXRob2QyODQ2ICgpIHsgfQorICB2b2lkIG1ldGhvZDI4NDcgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjg0OCAoKSB7IH0KKyAgdm9pZCBtZXRob2QyODQ5ICgpIHsgfQorICB2b2lkIG1ldGhvZDI4NTAgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjg1MSAoKSB7IH0KKyAgdm9pZCBtZXRob2QyODUyICgpIHsgfQorICB2b2lkIG1ldGhvZDI4NTMgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjg1NCAoKSB7IH0KKyAgdm9pZCBtZXRob2QyODU1ICgpIHsgfQorICB2b2lkIG1ldGhvZDI4NTYgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjg1NyAoKSB7IH0KKyAgdm9pZCBtZXRob2QyODU4ICgpIHsgfQorICB2b2lkIG1ldGhvZDI4NTkgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjg2MCAoKSB7IH0KKyAgdm9pZCBtZXRob2QyODYxICgpIHsgfQorICB2b2lkIG1ldGhvZDI4NjIgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjg2MyAoKSB7IH0KKyAgdm9pZCBtZXRob2QyODY0ICgpIHsgfQorICB2b2lkIG1ldGhvZDI4NjUgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjg2NiAoKSB7IH0KKyAgdm9pZCBtZXRob2QyODY3ICgpIHsgfQorICB2b2lkIG1ldGhvZDI4NjggKCkgeyB9CisgIHZvaWQgbWV0aG9kMjg2OSAoKSB7IH0KKyAgdm9pZCBtZXRob2QyODcwICgpIHsgfQorICB2b2lkIG1ldGhvZDI4NzEgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjg3MiAoKSB7IH0KKyAgdm9pZCBtZXRob2QyODczICgpIHsgfQorICB2b2lkIG1ldGhvZDI4NzQgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjg3NSAoKSB7IH0KKyAgdm9pZCBtZXRob2QyODc2ICgpIHsgfQorICB2b2lkIG1ldGhvZDI4NzcgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjg3OCAoKSB7IH0KKyAgdm9pZCBtZXRob2QyODc5ICgpIHsgfQorICB2b2lkIG1ldGhvZDI4ODAgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjg4MSAoKSB7IH0KKyAgdm9pZCBtZXRob2QyODgyICgpIHsgfQorICB2b2lkIG1ldGhvZDI4ODMgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjg4NCAoKSB7IH0KKyAgdm9pZCBtZXRob2QyODg1ICgpIHsgfQorICB2b2lkIG1ldGhvZDI4ODYgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjg4NyAoKSB7IH0KKyAgdm9pZCBtZXRob2QyODg4ICgpIHsgfQorICB2b2lkIG1ldGhvZDI4ODkgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjg5MCAoKSB7IH0KKyAgdm9pZCBtZXRob2QyODkxICgpIHsgfQorICB2b2lkIG1ldGhvZDI4OTIgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjg5MyAoKSB7IH0KKyAgdm9pZCBtZXRob2QyODk0ICgpIHsgfQorICB2b2lkIG1ldGhvZDI4OTUgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjg5NiAoKSB7IH0KKyAgdm9pZCBtZXRob2QyODk3ICgpIHsgfQorICB2b2lkIG1ldGhvZDI4OTggKCkgeyB9CisgIHZvaWQgbWV0aG9kMjg5OSAoKSB7IH0KKyAgdm9pZCBtZXRob2QyOTAwICgpIHsgfQorICB2b2lkIG1ldGhvZDI5MDEgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjkwMiAoKSB7IH0KKyAgdm9pZCBtZXRob2QyOTAzICgpIHsgfQorICB2b2lkIG1ldGhvZDI5MDQgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjkwNSAoKSB7IH0KKyAgdm9pZCBtZXRob2QyOTA2ICgpIHsgfQorICB2b2lkIG1ldGhvZDI5MDcgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjkwOCAoKSB7IH0KKyAgdm9pZCBtZXRob2QyOTA5ICgpIHsgfQorICB2b2lkIG1ldGhvZDI5MTAgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjkxMSAoKSB7IH0KKyAgdm9pZCBtZXRob2QyOTEyICgpIHsgfQorICB2b2lkIG1ldGhvZDI5MTMgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjkxNCAoKSB7IH0KKyAgdm9pZCBtZXRob2QyOTE1ICgpIHsgfQorICB2b2lkIG1ldGhvZDI5MTYgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjkxNyAoKSB7IH0KKyAgdm9pZCBtZXRob2QyOTE4ICgpIHsgfQorICB2b2lkIG1ldGhvZDI5MTkgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjkyMCAoKSB7IH0KKyAgdm9pZCBtZXRob2QyOTIxICgpIHsgfQorICB2b2lkIG1ldGhvZDI5MjIgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjkyMyAoKSB7IH0KKyAgdm9pZCBtZXRob2QyOTI0ICgpIHsgfQorICB2b2lkIG1ldGhvZDI5MjUgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjkyNiAoKSB7IH0KKyAgdm9pZCBtZXRob2QyOTI3ICgpIHsgfQorICB2b2lkIG1ldGhvZDI5MjggKCkgeyB9CisgIHZvaWQgbWV0aG9kMjkyOSAoKSB7IH0KKyAgdm9pZCBtZXRob2QyOTMwICgpIHsgfQorICB2b2lkIG1ldGhvZDI5MzEgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjkzMiAoKSB7IH0KKyAgdm9pZCBtZXRob2QyOTMzICgpIHsgfQorICB2b2lkIG1ldGhvZDI5MzQgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjkzNSAoKSB7IH0KKyAgdm9pZCBtZXRob2QyOTM2ICgpIHsgfQorICB2b2lkIG1ldGhvZDI5MzcgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjkzOCAoKSB7IH0KKyAgdm9pZCBtZXRob2QyOTM5ICgpIHsgfQorICB2b2lkIG1ldGhvZDI5NDAgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjk0MSAoKSB7IH0KKyAgdm9pZCBtZXRob2QyOTQyICgpIHsgfQorICB2b2lkIG1ldGhvZDI5NDMgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjk0NCAoKSB7IH0KKyAgdm9pZCBtZXRob2QyOTQ1ICgpIHsgfQorICB2b2lkIG1ldGhvZDI5NDYgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjk0NyAoKSB7IH0KKyAgdm9pZCBtZXRob2QyOTQ4ICgpIHsgfQorICB2b2lkIG1ldGhvZDI5NDkgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjk1MCAoKSB7IH0KKyAgdm9pZCBtZXRob2QyOTUxICgpIHsgfQorICB2b2lkIG1ldGhvZDI5NTIgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjk1MyAoKSB7IH0KKyAgdm9pZCBtZXRob2QyOTU0ICgpIHsgfQorICB2b2lkIG1ldGhvZDI5NTUgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjk1NiAoKSB7IH0KKyAgdm9pZCBtZXRob2QyOTU3ICgpIHsgfQorICB2b2lkIG1ldGhvZDI5NTggKCkgeyB9CisgIHZvaWQgbWV0aG9kMjk1OSAoKSB7IH0KKyAgdm9pZCBtZXRob2QyOTYwICgpIHsgfQorICB2b2lkIG1ldGhvZDI5NjEgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjk2MiAoKSB7IH0KKyAgdm9pZCBtZXRob2QyOTYzICgpIHsgfQorICB2b2lkIG1ldGhvZDI5NjQgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjk2NSAoKSB7IH0KKyAgdm9pZCBtZXRob2QyOTY2ICgpIHsgfQorICB2b2lkIG1ldGhvZDI5NjcgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjk2OCAoKSB7IH0KKyAgdm9pZCBtZXRob2QyOTY5ICgpIHsgfQorICB2b2lkIG1ldGhvZDI5NzAgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjk3MSAoKSB7IH0KKyAgdm9pZCBtZXRob2QyOTcyICgpIHsgfQorICB2b2lkIG1ldGhvZDI5NzMgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjk3NCAoKSB7IH0KKyAgdm9pZCBtZXRob2QyOTc1ICgpIHsgfQorICB2b2lkIG1ldGhvZDI5NzYgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjk3NyAoKSB7IH0KKyAgdm9pZCBtZXRob2QyOTc4ICgpIHsgfQorICB2b2lkIG1ldGhvZDI5NzkgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjk4MCAoKSB7IH0KKyAgdm9pZCBtZXRob2QyOTgxICgpIHsgfQorICB2b2lkIG1ldGhvZDI5ODIgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjk4MyAoKSB7IH0KKyAgdm9pZCBtZXRob2QyOTg0ICgpIHsgfQorICB2b2lkIG1ldGhvZDI5ODUgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjk4NiAoKSB7IH0KKyAgdm9pZCBtZXRob2QyOTg3ICgpIHsgfQorICB2b2lkIG1ldGhvZDI5ODggKCkgeyB9CisgIHZvaWQgbWV0aG9kMjk4OSAoKSB7IH0KKyAgdm9pZCBtZXRob2QyOTkwICgpIHsgfQorICB2b2lkIG1ldGhvZDI5OTEgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjk5MiAoKSB7IH0KKyAgdm9pZCBtZXRob2QyOTkzICgpIHsgfQorICB2b2lkIG1ldGhvZDI5OTQgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjk5NSAoKSB7IH0KKyAgdm9pZCBtZXRob2QyOTk2ICgpIHsgfQorICB2b2lkIG1ldGhvZDI5OTcgKCkgeyB9CisgIHZvaWQgbWV0aG9kMjk5OCAoKSB7IH0KKyAgdm9pZCBtZXRob2QyOTk5ICgpIHsgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmcvYVRoaW5sZXQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nL2FUaGlubGV0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmEwZTc3MwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nL2FUaGlubGV0LmphdmEKQEAgLTAsMCArMSw1MzkzIEBACisvKgorCVRoaW5sZXQgR1VJIHRvb2xraXQgLSB3d3cudGhpbmxldC5jb20KKwlDb3B5cmlnaHQgKEMpIDIwMDIgUm9iZXJ0IEJhanphdCAocm9iZXJ0LmJhanphdEB0aGlubGV0LmNvbSkKKwkKKwlUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisJbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworCUxpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorCXZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCQorCVRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorCWJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisJTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKwlMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCQorCVlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKwlMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisJRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorKi8KKworLy9wYWNrYWdlIHRoaW5sZXQ7IC8vamF2YQorLy9taWRwIHBhY2thZ2UgdGhpbmxldC5taWRwOworCitpbXBvcnQgamF2YS5hcHBsZXQuKjsgLy9qYXZhCitpbXBvcnQgamF2YS5hd3QuKjsgLy9qYXZhCitpbXBvcnQgamF2YS5hd3QuZGF0YXRyYW5zZmVyLio7IC8vamF2YQoraW1wb3J0IGphdmEuYXd0LmltYWdlLio7IC8vamF2YQoraW1wb3J0IGphdmEuYXd0LmV2ZW50Lio7IC8vamF2YQoraW1wb3J0IGphdmEubGFuZy5yZWZsZWN0Lio7IC8vamF2YQoraW1wb3J0IGphdmEuaW8uKjsKK2ltcG9ydCBqYXZhLm5ldC4qOyAvL2phdmEKK2ltcG9ydCBqYXZhLnV0aWwuKjsKKy8vbWlkcCBpbXBvcnQgamF2YXgubWljcm9lZGl0aW9uLmxjZHVpLio7CisvL21pZHAgaW1wb3J0IGphdmF4Lm1pY3JvZWRpdGlvbi5taWRsZXQuKjsKKworLyoqCisgKgorICovCitwdWJsaWMgY2xhc3MgVGhpbmxldCBleHRlbmRzIENvbnRhaW5lciAvL2phdmEKKwlpbXBsZW1lbnRzIFJ1bm5hYmxlLCBTZXJpYWxpemFibGUgeyAvL2phdmEKKy8vbWlkcCBwdWJsaWMgY2xhc3MgVGhpbmxldCBleHRlbmRzIENhbnZhcyBpbXBsZW1lbnRzIENvbW1hbmRMaXN0ZW5lciB7CisKKwkvL21pZHAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgQm9vbGVhbiBUUlVFID0gbmV3IEJvb2xlYW4odHJ1ZSk7CisJLy9taWRwIHByaXZhdGUgc3RhdGljIGZpbmFsIEJvb2xlYW4gRkFMU0UgPSBuZXcgQm9vbGVhbihmYWxzZSk7CisKKwkvL21pZHAgcHJpdmF0ZSB0cmFuc2llbnQgRm9udCBmb250OworCXByaXZhdGUgdHJhbnNpZW50IENvbG9yIGNfYmc7CisJcHJpdmF0ZSB0cmFuc2llbnQgQ29sb3IgY190ZXh0OworCXByaXZhdGUgdHJhbnNpZW50IENvbG9yIGNfdGV4dGJnOworCXByaXZhdGUgdHJhbnNpZW50IENvbG9yIGNfYm9yZGVyOworCXByaXZhdGUgdHJhbnNpZW50IENvbG9yIGNfZGlzYWJsZTsKKwlwcml2YXRlIHRyYW5zaWVudCBDb2xvciBjX2hvdmVyOworCXByaXZhdGUgdHJhbnNpZW50IENvbG9yIGNfcHJlc3M7CisJcHJpdmF0ZSB0cmFuc2llbnQgQ29sb3IgY19mb2N1czsKKwlwcml2YXRlIHRyYW5zaWVudCBDb2xvciBjX3NlbGVjdDsKKwlwcml2YXRlIHRyYW5zaWVudCBDb2xvciBjX2N0cmwgPSBudWxsOyAvL2phdmEKKwkvL21pZHAgcHJpdmF0ZSB0cmFuc2llbnQgQ29sb3IgY19jdHJsOworCXByaXZhdGUgdHJhbnNpZW50IGludCBibG9jazsKKwlwcml2YXRlIHRyYW5zaWVudCBJbWFnZSBncmFkaWVudDsgLy9qYXZhCisJeworCQlzZXRGb250KG5ldyBGb250KCJTYW5zU2VyaWYiLCBGb250LlBMQUlOLCAxMikpOyAvL2phdmEKKwkJLy9taWRwIHNldEZvbnQoRm9udC5nZXREZWZhdWx0Rm9udCgpKTsKKwkJc2V0Q29sb3JzKDB4ZTZlNmU2LCAweDAwMDAwMCwgMHhmZmZmZmYsCisJCQkweDkwOTA5MCwgMHhiMGIwYjAsIDB4ZWRlZGVkLCAweGI5YjliOSwgMHg4OTg5OWEsIDB4YzVjNWRkKTsgLy8gZjk5MjM3IGVhYzE2YSAvLyBlNjhiMmMgZmZjNzNjCisJfQorCisJcHJpdmF0ZSB0cmFuc2llbnQgVGhyZWFkIHRpbWVyOworCXByaXZhdGUgdHJhbnNpZW50IGxvbmcgd2F0Y2hkZWxheTsKKwlwcml2YXRlIHRyYW5zaWVudCBsb25nIHdhdGNoOworCXByaXZhdGUgdHJhbnNpZW50IFN0cmluZyBjbGlwYm9hcmQ7CisKKwlwcml2YXRlIE9iamVjdCBjb250ZW50ID0gY3JlYXRlSW1wbCgiZGVza3RvcCIpOworCXByaXZhdGUgdHJhbnNpZW50IE9iamVjdCBtb3VzZWluc2lkZTsKKwlwcml2YXRlIHRyYW5zaWVudCBPYmplY3QgaW5zaWRlcGFydDsKKwlwcml2YXRlIHRyYW5zaWVudCBPYmplY3QgbW91c2VwcmVzc2VkOworCXByaXZhdGUgdHJhbnNpZW50IE9iamVjdCBwcmVzc2VkcGFydDsKKwlwcml2YXRlIHRyYW5zaWVudCBpbnQgcmVmZXJlbmNleCwgcmVmZXJlbmNleTsKKwlwcml2YXRlIHRyYW5zaWVudCBpbnQgbW91c2V4LCBtb3VzZXk7CisJcHJpdmF0ZSB0cmFuc2llbnQgT2JqZWN0IGZvY3Vzb3duZXI7CisJcHJpdmF0ZSB0cmFuc2llbnQgYm9vbGVhbiBmb2N1c2luc2lkZTsgLy9taWRwIHsgZm9jdXNpbnNpZGUgPSB0cnVlOyB9CisJcHJpdmF0ZSB0cmFuc2llbnQgT2JqZWN0IHBvcHVwb3duZXI7CisJcHJpdmF0ZSB0cmFuc2llbnQgT2JqZWN0IHRvb2x0aXBvd25lcjsKKwkvL3ByaXZhdGUgdHJhbnNpZW50IGludCBwcmVzc2Vka2V5OworCisJLy9qYXZhPgkKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgRFJBR19FTlRFUkVEID0gQVdURXZlbnQuUkVTRVJWRURfSURfTUFYICsgMTsKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgRFJBR19FWElURUQgPSBBV1RFdmVudC5SRVNFUlZFRF9JRF9NQVggKyAyOworCQorCXByaXZhdGUgc3RhdGljIGxvbmcgV0hFRUxfTUFTSyA9IDA7CisJcHJpdmF0ZSBzdGF0aWMgaW50IE1PVVNFX1dIRUVMID0gMDsKKwlwcml2YXRlIHN0YXRpYyBNZXRob2Qgd2hlZWxyb3RhdGlvbiA9IG51bGw7CisJc3RhdGljIHsKKwkJdHJ5IHsKKwkJCVdIRUVMX01BU0sgPSBBV1RFdmVudC5jbGFzcy5nZXRGaWVsZCgiTU9VU0VfV0hFRUxfRVZFTlRfTUFTSyIpLmdldExvbmcobnVsbCk7CisJCQlNT1VTRV9XSEVFTCA9IE1vdXNlRXZlbnQuY2xhc3MuZ2V0RmllbGQoIk1PVVNFX1dIRUVMIikuZ2V0SW50KG51bGwpOworCQl9IGNhdGNoIChFeGNlcHRpb24gZXhjKSB7IC8qIG5vdCAxLjQgKi8gfQorCX0KKwl7CisJCWlmIChNT1VTRV9XSEVFTCAhPSAwKSB7IC8vIGRpc2FibGUgZ2xvYmFsIGZvY3VzLW1hbmFnZXIgZm9yIHRoaXMgY29tcG9uZW50IGluIDEuNAorCQkJdHJ5IHsKKwkJCQlnZXRDbGFzcygpLmdldE1ldGhvZCgic2V0Rm9jdXNUcmF2ZXJzYWxLZXlzRW5hYmxlZCIsIG5ldyBDbGFzc1tdIHsgQm9vbGVhbi5UWVBFIH0pLgorCQkJCQlpbnZva2UodGhpcywgbmV3IE9iamVjdFtdIHsgQm9vbGVhbi5GQUxTRSB9KTsKKwkJCX0gY2F0Y2ggKEV4Y2VwdGlvbiBleGMpIHsgLyogbmV2ZXIgKi8gfQorCQl9CisJCWVuYWJsZUV2ZW50cyhBV1RFdmVudC5DT01QT05FTlRfRVZFTlRfTUFTSyB8CisJCQlBV1RFdmVudC5GT0NVU19FVkVOVF9NQVNLIHwgQVdURXZlbnQuS0VZX0VWRU5UX01BU0sgfAorCQkJQVdURXZlbnQuTU9VU0VfRVZFTlRfTUFTSyB8IEFXVEV2ZW50Lk1PVVNFX01PVElPTl9FVkVOVF9NQVNLIHwgV0hFRUxfTUFTSyk7CisJfQorCS8vPGphdmEKKworCS8qKgorCSAqCisJICovCisJcHVibGljIHZvaWQgc2V0Q29sb3JzKGludCBiYWNrZ3JvdW5kLCBpbnQgdGV4dCwgaW50IHRleHRiYWNrZ3JvdW5kLAorCQkJaW50IGJvcmRlciwgaW50IGRpc2FibGUsIGludCBob3ZlciwgaW50IHByZXNzLAorCQkJaW50IGZvY3VzLCBpbnQgc2VsZWN0KSB7CisJCWNfYmcgPSBuZXcgQ29sb3IoYmFja2dyb3VuZCk7IGNfdGV4dCA9IG5ldyBDb2xvcih0ZXh0KTsKKwkJY190ZXh0YmcgPSBuZXcgQ29sb3IodGV4dGJhY2tncm91bmQpOyBjX2JvcmRlciA9IG5ldyBDb2xvcihib3JkZXIpOworCQljX2Rpc2FibGUgPSBuZXcgQ29sb3IoZGlzYWJsZSk7IGNfaG92ZXIgPSBuZXcgQ29sb3IoaG92ZXIpOworCQljX3ByZXNzID0gbmV3IENvbG9yKHByZXNzKTsgY19mb2N1cyA9IG5ldyBDb2xvcihmb2N1cyk7CisJCWNfc2VsZWN0ID0gbmV3IENvbG9yKHNlbGVjdCk7CisJCS8vbWlkcCBjX2N0cmwgPSBjX2hvdmVyOworCQkvL2phdmE+CisJCWludFtdIHBpeCA9IG5ldyBpbnRbYmxvY2sgKiBibG9ja107CisJCWludCByMSA9IGNfYmcuZ2V0UmVkKCk7IGludCByMiA9IGNfcHJlc3MuZ2V0UmVkKCk7CisJCWludCBnMSA9IGNfYmcuZ2V0R3JlZW4oKTsgaW50IGcyID0gY19wcmVzcy5nZXRHcmVlbigpOworCQlpbnQgYjEgPSBjX2JnLmdldEJsdWUoKTsgaW50IGIyID0gY19wcmVzcy5nZXRCbHVlKCk7CisJCWZvciAoaW50IGkgPSAwOyBpIDwgYmxvY2s7IGkrKykgeworCQkJaW50IHIgPSByMSAtIChyMSAtIHIyKSAqIGkgLyBibG9jazsKKwkJCWludCBnID0gZzEgLSAoZzEgLSBnMikgKiBpIC8gYmxvY2s7CisJCQlpbnQgYiA9IGIxIC0gKGIxIC0gYjIpICogaSAvIGJsb2NrOworCQkJaW50IGNvbG9yID0gKDI1NSA8PCAyNCkgfCAociA8PCAxNikgfCAoZyA8PCA4KSB8IGI7CisJCQlmb3IgKGludCBqID0gMDsgaiA8IGJsb2NrOyBqKyspIHsKKwkJCQlwaXhbaSAqIGJsb2NrICsgal0gPSBjb2xvcjsKKwkJCQkvL3BpeFtqICogYmxvY2sgKyBpXSA9IGNvbG9yOworCQkJfQorCQl9CisJCWdyYWRpZW50ID0gY3JlYXRlSW1hZ2UobmV3IE1lbW9yeUltYWdlU291cmNlKGJsb2NrLCBibG9jaywgcGl4LCAwLCBibG9jaykpOworCQkvLzxqYXZhCisJfQorCisJLyoqCisJICoKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRGb250KEZvbnQgZm9udCkgeworCQlibG9jayA9IGdldEZvbnRNZXRyaWNzKGZvbnQpLmdldEhlaWdodCgpOyAvL2phdmEKKwkJc3VwZXIuc2V0Rm9udChmb250KTsgLy9qYXZhCisJCS8vbWlkcCBibG9jayA9IGZvbnQuZ2V0SGVpZ2h0KCk7CisJCS8vbWlkcCB0aGlzLmZvbnQgPSBmb250OworCX0KKworCS8qKgorCSAqCisJICovCisJcHJpdmF0ZSB2b2lkIGRvTGF5b3V0KE9iamVjdCBjb21wb25lbnQpIHsKKwkJU3RyaW5nIGNsYXNzbmFtZSA9IGdldENsYXNzKGNvbXBvbmVudCk7CisJCWlmICgiY29tYm9ib3giID09IGNsYXNzbmFtZSkgeworCQkJaWYgKGdldEJvb2xlYW4oY29tcG9uZW50LCAiZWRpdGFibGUiLCB0cnVlKSkgeworCQkJCUltYWdlIGljb24gPSBnZXRJY29uKGNvbXBvbmVudCwgImljb24iLCBudWxsKTsKKwkJCQlsYXlvdXRGaWVsZChjb21wb25lbnQsIGJsb2NrLCBmYWxzZSwKKwkJCQkJKGljb24gIT0gbnVsbCkgPyBpY29uLmdldFdpZHRoKHRoaXMpIDogMCk7CisJCQl9IC8vIHNldCBlZGl0YWJsZSAtPiB2YWxpZGF0ZSAob3ZlcndyaXRlIHRleHRmaWVsZCByZXBhaW50KQorCQkJZWxzZSB7CisJCQkJaW50IHNlbGVjdGVkID0gZ2V0SW50ZWdlcihjb21wb25lbnQsICJzZWxlY3RlZCIsIC0xKTsKKwkJCQlpZiAoc2VsZWN0ZWQgIT0gLTEpIHsKKwkJCQkJT2JqZWN0IGNob2ljZSA9IGdldEl0ZW0oY29tcG9uZW50LCAiY2hvaWNlIiwgc2VsZWN0ZWQpOworCQkJCQlzZXQoY29tcG9uZW50LCAidGV4dCIsIGdldChjaG9pY2UsICJ0ZXh0IikpOworCQkJCQlzZXQoY29tcG9uZW50LCAiaWNvbiIsIGdldChjaG9pY2UsICJpY29uIikpOworCQkJCX0KKwkJCX0KKwkJfQorCQllbHNlIGlmICgoInRleHRmaWVsZCIgPT0gY2xhc3NuYW1lKSB8fCAoInBhc3N3b3JkZmllbGQiID09IGNsYXNzbmFtZSkpIHsKKwkJCWxheW91dEZpZWxkKGNvbXBvbmVudCwgMCwgKCJwYXNzd29yZGZpZWxkIiA9PSBjbGFzc25hbWUpLCAwKTsKKwkJfQorCQllbHNlIGlmICgidGV4dGFyZWEiID09IGNsYXNzbmFtZSkgeworCQkJU3RyaW5nIHRleHQgPSBnZXRTdHJpbmcoY29tcG9uZW50LCAidGV4dCIsICIiKTsKKwkJCWludCBzdGFydCA9IGdldEludGVnZXIoY29tcG9uZW50LCAic3RhcnQiLCAwKTsKKwkJCWlmIChzdGFydCA+IHRleHQubGVuZ3RoKCkpIHsgc2V0SW50ZWdlcihjb21wb25lbnQsICJzdGFydCIsIHN0YXJ0ID0gdGV4dC5sZW5ndGgoKSwgMCk7IH0KKwkJCWludCBlbmQgPSBnZXRJbnRlZ2VyKGNvbXBvbmVudCwgImVuZCIsIDApOworCQkJaWYgKGVuZCA+IHRleHQubGVuZ3RoKCkpIHsgc2V0SW50ZWdlcihjb21wb25lbnQsICJlbmQiLCBlbmQgPSB0ZXh0Lmxlbmd0aCgpLCAwKTsgfQorCQkJaW50IGNhcmV0eCA9IDA7IGludCBjYXJldHkgPSAwOworCQkJRm9udE1ldHJpY3MgZm0gPSBnZXRGb250TWV0cmljcyhnZXRGb250KCkpOyAvL2phdmEKKwkJCWludCB3aWR0aCA9IDAsIGhlaWdodCA9IDA7CisJCQlmb3IgKGludCBpID0gMCwgaiA9IDA7IGogIT0gLTE7IGkgPSBqICsgMSkgeworCQkJCWogPSB0ZXh0LmluZGV4T2YoJ1xuJywgaSk7CisJCQkJaWYgKGkgIT0gaikgeyAvLyAmJiBpICE9IHRleHQubGVuZ3RoKCkKKwkJCQkJU3RyaW5nIGxpbmUgPSAoaiAhPSAtMSkgPyB0ZXh0LnN1YnN0cmluZyhpLCBqKSA6IHRleHQuc3Vic3RyaW5nKGkpOyAvL2phdmEKKwkJCQkJd2lkdGggPSBNYXRoLm1heCh3aWR0aCwgZm0uc3RyaW5nV2lkdGgobGluZSkpOyAvL2phdmEKKwkJCQkJLy9taWRwIHdpZHRoID0gZm9udC5zdWJzdHJpbmdXaWR0aCh0ZXh0LCBpLCAoKGogIT0gLTEpID8gaiA6IHRleHQubGVuZ3RoKCkpIC0gaSk7CisJCQkJfQorCQkJCWlmICgoZW5kID49IGkpICYmICgoaiA9PSAtMSkgfHwgKGVuZCA8PSBqKSkpIHsKKwkJCQkJY2FyZXR4ID0gZm0uc3RyaW5nV2lkdGgodGV4dC5zdWJzdHJpbmcoaSwgZW5kKSk7IC8vamF2YQorCQkJCQkvL21pZHAgY2FyZXR4ID0gZm9udC5zdWJzdHJpbmdXaWR0aCh0ZXh0LCBpLCBlbmQgLSBpKTsKKwkJCQkJY2FyZXR5ID0gaGVpZ2h0OworCQkJCX0KKwkJCQloZWlnaHQgKz0gZm0uZ2V0SGVpZ2h0KCk7CisJCQl9CisJCQlsYXlvdXRTY3JvbGxQYW5lKGNvbXBvbmVudCwgd2lkdGggKyAyLAorCQkJCWhlaWdodCAtIGZtLmdldExlYWRpbmcoKSArIDIsIDAsIDApOworCQkJc2Nyb2xsVG9WaXNpYmxlKGNvbXBvbmVudCwgY2FyZXR4LCBjYXJldHksCisJCQkJMiwgZm0uZ2V0QXNjZW50KCkgKyBmbS5nZXREZXNjZW50KCkgKyAyKTsKKwkJfSAKKwkJZWxzZSBpZiAoInRhYmJlZHBhbmUiID09IGNsYXNzbmFtZSkgeworCQkJUmVjdGFuZ2xlIGJvdW5kcyA9IGdldFJlY3RhbmdsZShjb21wb25lbnQsICJib3VuZHMiKTsKKwkJCVN0cmluZyBwbGFjZW1lbnQgPSBnZXRTdHJpbmcoY29tcG9uZW50LCAicGxhY2VtZW50IiwgInRvcCIpOworCQkJYm9vbGVhbiBob3Jpem9udGFsID0gKChwbGFjZW1lbnQgPT0gInRvcCIpIHx8IChwbGFjZW1lbnQgPT0gImJvdHRvbSIpKTsKKwkJCWludCB0YWJkID0gMDsKKwkJCWludCB0YWJzaXplID0gMDsKKwkJCWZvciAoT2JqZWN0IGNvbXAgPSBnZXQoY29tcG9uZW50LCAidGFiIik7CisJCQkJCWNvbXAgIT0gbnVsbDsgY29tcCA9IGdldChjb21wLCAiOm5leHQiKSkgeworCQkJCURpbWVuc2lvbiBkID0gZ2V0U2l6ZShjb21wLCA4LCA0LCAibGVmdCIpOworCQkJCXNldFJlY3RhbmdsZShjb21wLCAiYm91bmRzIiwKKwkJCQkJaG9yaXpvbnRhbCA/IHRhYmQgOiAwLCBob3Jpem9udGFsID8gMCA6IHRhYmQsIGQud2lkdGgsIGQuaGVpZ2h0KTsKKwkJCQl0YWJkICs9IGhvcml6b250YWwgPyBkLndpZHRoIDogZC5oZWlnaHQ7CisJCQkJdGFic2l6ZSA9IE1hdGgubWF4KHRhYnNpemUsIGhvcml6b250YWwgPyBkLmhlaWdodCA6IGQud2lkdGgpOworCQkJfQorCQkJZm9yIChPYmplY3QgY29tcCA9IGdldChjb21wb25lbnQsICJ0YWIiKTsKKwkJCQkJY29tcCAhPSBudWxsOyBjb21wID0gZ2V0KGNvbXAsICI6bmV4dCIpKSB7CisJCQkJUmVjdGFuZ2xlIHIgPSBnZXRSZWN0YW5nbGUoY29tcCwgImJvdW5kcyIpOworCQkJCWlmIChob3Jpem9udGFsKSB7CisJCQkJCWlmIChwbGFjZW1lbnQgPT0gImJvdHRvbSIpIHsgci55ID0gYm91bmRzLmhlaWdodCAtIHRhYnNpemU7IH0KKwkJCQkJci5oZWlnaHQgPSB0YWJzaXplOworCQkJCX0gZWxzZSB7CisJCQkJCWlmIChwbGFjZW1lbnQgPT0gInJpZ2h0IikgeyByLnggPSBib3VuZHMud2lkdGggLSB0YWJzaXplOyB9CisJCQkJCXIud2lkdGggPSB0YWJzaXplOworCQkJCX0KKwkJCX0KKwkJCWludCBjeCA9IChwbGFjZW1lbnQgPT0gImxlZnQiKSA/ICh0YWJzaXplICsgMSkgOiAyOworCQkJaW50IGN5ID0gKHBsYWNlbWVudCA9PSAidG9wIikgPyAodGFic2l6ZSArIDEpIDogMjsKKwkJCWludCBjd2lkdGggPSBib3VuZHMud2lkdGggLSAoaG9yaXpvbnRhbCA/IDQgOiAodGFic2l6ZSArIDMpKTsKKwkJCWludCBjaGVpZ2h0ID0gYm91bmRzLmhlaWdodCAtIChob3Jpem9udGFsID8gKHRhYnNpemUgKyAzKSA6IDQpOworCQkJZm9yIChPYmplY3QgY29tcCA9IGdldChjb21wb25lbnQsICJjb21wb25lbnQiKTsKKwkJCQkJY29tcCAhPSBudWxsOyBjb21wID0gZ2V0KGNvbXAsICI6bmV4dCIpKSB7CisJCQkJaWYgKCFnZXRCb29sZWFuKGNvbXAsICJ2aXNpYmxlIiwgdHJ1ZSkpIHsgY29udGludWU7IH0KKwkJCQlzZXRSZWN0YW5nbGUoY29tcCwgImJvdW5kcyIsIGN4LCBjeSwgY3dpZHRoLCBjaGVpZ2h0KTsKKwkJCQlkb0xheW91dChjb21wKTsKKwkJCX0KKwkJfQorCQllbHNlIGlmICgoInBhbmVsIiA9PSBjbGFzc25hbWUpIHx8IChjbGFzc25hbWUgPT0gImRpYWxvZyIpKSB7CisJCQlpbnQgZ2FwID0gZ2V0SW50ZWdlcihjb21wb25lbnQsICJnYXAiLCAwKTsKKwkJCWludFtdW10gZ3JpZCA9IGdldEdyaWQoY29tcG9uZW50LCBnYXApOworCQkJaWYgKGdyaWQgIT0gbnVsbCkgeworCQkJCWludCB0b3AgPSBnZXRJbnRlZ2VyKGNvbXBvbmVudCwgInRvcCIsIDApOworCQkJCWludCBsZWZ0ID0gZ2V0SW50ZWdlcihjb21wb25lbnQsICJsZWZ0IiwgMCk7CisJCQkJaW50IGJvdHRvbSA9IGdldEludGVnZXIoY29tcG9uZW50LCAiYm90dG9tIiwgMCk7CisJCQkJaW50IHJpZ2h0ID0gZ2V0SW50ZWdlcihjb21wb25lbnQsICJyaWdodCIsIDApOworCQkJCWlmIChjbGFzc25hbWUgPT0gImRpYWxvZyIpIHsKKwkJCQkJaW50IHRpdGxlaGVpZ2h0ID0gZ2V0SW50ZWdlcihjb21wb25lbnQsICJ0aXRsZWhlaWdodCIsIDApOworCQkJCQl0b3AgKz0gNCArIHRpdGxlaGVpZ2h0OyBsZWZ0ICs9IDQ7IGJvdHRvbSArPSA0OyByaWdodCArPSA0OworCQkJCX0KKworCQkJCVJlY3RhbmdsZSBib3VuZHMgPSBnZXRSZWN0YW5nbGUoY29tcG9uZW50LCAiYm91bmRzIik7CisJCQkJZm9yIChpbnQgaSA9IDA7IGkgPCAyOyBpKyspIHsKKwkJCQkJaW50IGQgPSAoKGkgPT0gMCkgPyAoYm91bmRzLndpZHRoIC0gbGVmdCAtIHJpZ2h0KSA6CisJCQkJCQkoYm91bmRzLmhlaWdodCAtIHRvcCAtIGJvdHRvbSkpIC0KKwkJCQkJCWdldFN1bShncmlkW2ldLCAwLCBncmlkW2ldLmxlbmd0aCwgZ2FwLCBmYWxzZSk7CisJCQkJCWlmIChkICE9IDApIHsKKwkJCQkJCWludCB3ID0gZ2V0U3VtKGdyaWRbMiArIGldLCAwLCBncmlkWzIgKyBpXS5sZW5ndGgsIDAsIGZhbHNlKTsKKwkJCQkJCWlmICh3ID4gMCkgeworCQkJCQkJCWZvciAoaW50IGogPSAwOyBqIDwgZ3JpZFtpXS5sZW5ndGg7IGorKykgeworCQkJCQkJCQlpZiAoZ3JpZFsyICsgaV1bal0gIT0gMCkgeworCQkJCQkJCQkJZ3JpZFtpXVtqXSArPSBkICogZ3JpZFsyICsgaV1bal0gLyB3OworCQkJCQkJCQl9CisJCQkJCQkJfQorCQkJCQkJfQorCQkJCQl9CisJCQkJfQorCisJCQkJaW50IGkgPSAwOworCQkJCWZvciAoT2JqZWN0IGNvbXAgPSBnZXQoY29tcG9uZW50LCAiY29tcG9uZW50Iik7CisJCQkJCQljb21wICE9IG51bGw7IGNvbXAgPSBnZXQoY29tcCwgIjpuZXh0IikpIHsKKwkJCQkJaWYgKCFnZXRCb29sZWFuKGNvbXAsICJ2aXNpYmxlIiwgdHJ1ZSkpIHsgY29udGludWU7IH0KKwkJCQkJaW50IGl4ID0gbGVmdCArIGdldFN1bShncmlkWzBdLCAwLCBncmlkWzRdW2ldLCBnYXAsIHRydWUpOworCQkJCQlpbnQgaXkgPSB0b3AgKyBnZXRTdW0oZ3JpZFsxXSwgMCwgZ3JpZFs1XVtpXSwgZ2FwLCB0cnVlKTsKKwkJCQkJaW50IGl3aWR0aCA9IGdldFN1bShncmlkWzBdLCBncmlkWzRdW2ldLCBncmlkWzZdW2ldLCBnYXAsIGZhbHNlKTsKKwkJCQkJaW50IGloZWlnaHQgPSBnZXRTdW0oZ3JpZFsxXSwgZ3JpZFs1XVtpXSwgZ3JpZFs3XVtpXSwgZ2FwLCBmYWxzZSk7CisJCQkJCVN0cmluZyBoYWxpZ24gPSBnZXRTdHJpbmcoY29tcCwgImhhbGlnbiIsICJmaWxsIik7CisJCQkJCVN0cmluZyB2YWxpZ24gPSBnZXRTdHJpbmcoY29tcCwgInZhbGlnbiIsICJmaWxsIik7CisJCQkJCWlmICgoaGFsaWduICE9ICJmaWxsIikgfHwgKHZhbGlnbiAhPSAiZmlsbCIpKSB7CisJCQkJCQlEaW1lbnNpb24gZCA9IGdldFByZWZlcnJlZFNpemUoY29tcCk7CisJCQkJCQlpZiAoaGFsaWduICE9ICJmaWxsIikgeworCQkJCQkJCWludCBkdyA9IE1hdGgubWF4KDAsIGl3aWR0aCAtIGQud2lkdGgpOworCQkJCQkJCWlmIChoYWxpZ24gPT0gImNlbnRlciIpIHsgaXggKz0gZHcgLyAyOyB9CisJCQkJCQkJCWVsc2UgaWYgKGhhbGlnbiA9PSAicmlnaHQiKSB7IGl4ICs9IGR3OyB9CisJCQkJCQkJaXdpZHRoIC09IGR3OworCQkJCQkJfQorCQkJCQkJaWYgKHZhbGlnbiAhPSAiZmlsbCIpIHsKKwkJCQkJCQlpbnQgZGggPSBNYXRoLm1heCgwLCBpaGVpZ2h0IC0gZC5oZWlnaHQpOworCQkJCQkJCWlmICh2YWxpZ24gPT0gImNlbnRlciIpIHsgaXkgKz0gZGggLyAyOyB9CisJCQkJCQkJCWVsc2UgaWYgKHZhbGlnbiA9PSAiYm90dG9tIikgeyBpeSArPSBkaDsgfQorCQkJCQkJCWloZWlnaHQgLT0gZGg7CisJCQkJCQl9CisJCQkJCX0KKwkJCQkJc2V0UmVjdGFuZ2xlKGNvbXAsICJib3VuZHMiLCBpeCwgaXksIGl3aWR0aCwgaWhlaWdodCk7CisJCQkJCWRvTGF5b3V0KGNvbXApOworCQkJCQlpKys7CisJCQkJfQorCQkJfQorCQl9CisJCWVsc2UgaWYgKCJkZXNrdG9wIiA9PSBjbGFzc25hbWUpIHsKKwkJCVJlY3RhbmdsZSBib3VuZHMgPSBnZXRSZWN0YW5nbGUoY29tcG9uZW50LCAiYm91bmRzIik7CisJCQlmb3IgKE9iamVjdCBjb21wID0gZ2V0KGNvbXBvbmVudCwgImNvbXBvbmVudCIpOworCQkJCQljb21wICE9IG51bGw7IGNvbXAgPSBnZXQoY29tcCwgIjpuZXh0IikpIHsKKwkJCQlTdHJpbmcgaWNsYXNzID0gZ2V0Q2xhc3MoY29tcCk7CisJCQkJaWYgKGljbGFzcyA9PSAiZGlhbG9nIikgeworCQkJCQlEaW1lbnNpb24gZCA9IGdldFByZWZlcnJlZFNpemUoY29tcCk7CisJCQkJCWlmIChnZXQoY29tcCwgImJvdW5kcyIpID09IG51bGwpCisJCQkJCXNldFJlY3RhbmdsZShjb21wLCAiYm91bmRzIiwKKwkJCQkJCU1hdGgubWF4KDAsIChib3VuZHMud2lkdGggLSBkLndpZHRoKSAvIDIpLAorCQkJCQkJTWF0aC5tYXgoMCwgKGJvdW5kcy5oZWlnaHQgLSBkLmhlaWdodCkgLyAyKSwKKwkJCQkJCU1hdGgubWluKGQud2lkdGgsIGJvdW5kcy53aWR0aCksIE1hdGgubWluKGQuaGVpZ2h0LCBib3VuZHMuaGVpZ2h0KSk7CisJCQkJfSBlbHNlIGlmICgoaWNsYXNzID09ICJjb21ib2xpc3QiKSB8fCAoaWNsYXNzID09ICJwb3B1cG1lbnUiKSkgeworCQkJCQkJaWNsYXNzID0gaWNsYXNzOyAvL2NvbXBpbGVyIGJ1ZworCQkJCX0gZWxzZSB7CisJCQkJCXNldFJlY3RhbmdsZShjb21wLCAiYm91bmRzIiwgMCwgMCwgYm91bmRzLndpZHRoLCBib3VuZHMuaGVpZ2h0KTsKKwkJCQl9CisJCQkJZG9MYXlvdXQoY29tcCk7CisJCQl9CisJCX0KKwkJZWxzZSBpZiAoInNwaW5ib3giID09IGNsYXNzbmFtZSkgeworCQkJbGF5b3V0RmllbGQoY29tcG9uZW50LCBibG9jaywgZmFsc2UsIDApOworCQl9CisJCWVsc2UgaWYgKCJzcGxpdHBhbmUiID09IGNsYXNzbmFtZSkgeworCQkJUmVjdGFuZ2xlIGJvdW5kcyA9IGdldFJlY3RhbmdsZShjb21wb25lbnQsICJib3VuZHMiKTsKKwkJCWJvb2xlYW4gaG9yaXpvbnRhbCA9ICgidmVydGljYWwiICE9IGdldChjb21wb25lbnQsICJvcmllbnRhdGlvbiIpKTsKKwkJCWludCBkaXZpZGVyID0gZ2V0SW50ZWdlcihjb21wb25lbnQsICJkaXZpZGVyIiwgLTEpOworCQkJaW50IG1heGRpdiA9IChob3Jpem9udGFsID8gYm91bmRzLndpZHRoIDogYm91bmRzLmhlaWdodCkgLSA1OworCisJCQlPYmplY3QgY29tcDEgPSBnZXQoY29tcG9uZW50LCAiY29tcG9uZW50Iik7CisJCQlib29sZWFuIHZpc2libGUxID0gKGNvbXAxICE9IG51bGwpICYmIGdldEJvb2xlYW4oY29tcDEsICJ2aXNpYmxlIiwgdHJ1ZSk7CisJCQlpZiAoZGl2aWRlciA9PSAtMSkgeworCQkJCWludCBkMSA9IDA7CisJCQkJaWYgKHZpc2libGUxKSB7CisJCQkJCURpbWVuc2lvbiBkID0gZ2V0UHJlZmVycmVkU2l6ZShjb21wMSk7CisJCQkJCWQxID0gaG9yaXpvbnRhbCA/IGQud2lkdGggOiBkLmhlaWdodDsKKwkJCQl9CisJCQkJZGl2aWRlciA9IE1hdGgubWluKGQxLCBtYXhkaXYpOworCQkJCXNldEludGVnZXIoY29tcG9uZW50LCAiZGl2aWRlciIsIGRpdmlkZXIsIC0xKTsKKwkJCX0KKwkJCWVsc2UgaWYgKGRpdmlkZXIgPiBtYXhkaXYpIHsKKwkJCQlzZXRJbnRlZ2VyKGNvbXBvbmVudCwgImRpdmlkZXIiLCBkaXZpZGVyID0gbWF4ZGl2LCAtMSk7CisJCQl9CisKKwkJCWlmICh2aXNpYmxlMSkgeworCQkJCXNldFJlY3RhbmdsZShjb21wMSwgImJvdW5kcyIsIDAsIDAsIGhvcml6b250YWwgPyBkaXZpZGVyIDogYm91bmRzLndpZHRoLAorCQkJCQlob3Jpem9udGFsID8gYm91bmRzLmhlaWdodCA6IGRpdmlkZXIpOworCQkJCWRvTGF5b3V0KGNvbXAxKTsKKwkJCX0KKwkJCU9iamVjdCBjb21wMiA9IChjb21wMSAhPSBudWxsKSA/IGdldChjb21wMSwgIjpuZXh0IikgOiBudWxsOworCQkJaWYgKChjb21wMiAhPSBudWxsKSAmJiBnZXRCb29sZWFuKGNvbXAyLCAidmlzaWJsZSIsIHRydWUpKSB7CisJCQkJc2V0UmVjdGFuZ2xlKGNvbXAyLCAiYm91bmRzIiwgaG9yaXpvbnRhbCA/IChkaXZpZGVyICsgNSkgOiAwLAorCQkJCQlob3Jpem9udGFsID8gMCA6IChkaXZpZGVyICsgNSksCisJCQkJCWhvcml6b250YWwgPyAoYm91bmRzLndpZHRoIC0gNSAtIGRpdmlkZXIpIDogYm91bmRzLndpZHRoLAorCQkJCQlob3Jpem9udGFsID8gYm91bmRzLmhlaWdodCA6IChib3VuZHMuaGVpZ2h0IC0gNSAtIGRpdmlkZXIpKTsKKwkJCQlkb0xheW91dChjb21wMik7CisJCQl9CisJCX0gCisJCWVsc2UgaWYgKCgibGlzdCIgPT0gY2xhc3NuYW1lKSB8fAorCQkJCSgidGFibGUiID09IGNsYXNzbmFtZSkgfHwgKCJ0cmVlIiA9PSBjbGFzc25hbWUpKSB7CisJCQlpbnQgd2lkdGggPSAwOworCQkJaW50IGNvbHVtbmhlaWdodCA9IDA7CisJCQlpZiAoInRhYmxlIiA9PSBjbGFzc25hbWUpIHsKKwkJCQlmb3IgKE9iamVjdCBjb2x1bW4gPSBnZXQoY29tcG9uZW50LCAiY29sdW1uIik7CisJCQkJCQljb2x1bW4gIT0gbnVsbDsgY29sdW1uID0gZ2V0KGNvbHVtbiwgIjpuZXh0IikpIHsKKwkJCQkJd2lkdGggKz0gZ2V0SW50ZWdlcihjb2x1bW4sICJ3aWR0aCIsIDgwKTsKKwkJCQkJRGltZW5zaW9uIGQgPSBnZXRTaXplKGNvbHVtbiwgMiwgMiwgImxlZnQiKTsKKwkJCQkJY29sdW1uaGVpZ2h0ID0gTWF0aC5tYXgoY29sdW1uaGVpZ2h0LCBkLmhlaWdodCk7CisJCQkJfQorCQkJfQorCQkJU3RyaW5nIGl0ZW1uYW1lID0gKCJsaXN0IiA9PSBjbGFzc25hbWUpID8gIml0ZW0iIDoKKwkJCQkoKCJ0YWJsZSIgPT0gY2xhc3NuYW1lKSA/ICJyb3ciIDogIm5vZGUiKTsKKwkJCWludCB5ID0gMDsKKwkJCWludCBsZXZlbCA9IDA7CisJCQlmb3IgKE9iamVjdCBpdGVtID0gZ2V0KGNvbXBvbmVudCwgaXRlbW5hbWUpOyBpdGVtICE9IG51bGw7KSB7CisJCQkJaW50IHggPSAwOworCQkJCWludCBpd2lkdGggPSAwOyBpbnQgaWhlaWdodCA9IDA7CisJCQkJaWYgKCJ0YWJsZSIgPT0gY2xhc3NuYW1lKSB7CisJCQkJCWl3aWR0aCA9IHdpZHRoOworCQkJCQlmb3IgKE9iamVjdCBjZWxsID0gZ2V0KGl0ZW0sICJjZWxsIik7CisJCQkJCQkJY2VsbCAhPSBudWxsOyBjZWxsID0gZ2V0KGNlbGwsICI6bmV4dCIpKSB7CisJCQkJCQlEaW1lbnNpb24gZCA9IGdldFNpemUoY2VsbCwgMiwgMywgImxlZnQiKTsKKwkJCQkJCWloZWlnaHQgPSBNYXRoLm1heChpaGVpZ2h0LCBkLmhlaWdodCk7CisJCQkJCX0KKwkJCQl9CisJCQkJZWxzZSB7CisJCQkJCWlmICgidHJlZSIgPT0gY2xhc3NuYW1lKSB7CisJCQkJCQl4ID0gKGxldmVsICsgMSkgKiBibG9jazsKKwkJCQkJfQorCQkJCQlEaW1lbnNpb24gZCA9IGdldFNpemUoaXRlbSwgMiwgMywgImxlZnQiKTsKKwkJCQkJaXdpZHRoID0gZC53aWR0aDsgaWhlaWdodCA9IGQuaGVpZ2h0OworCQkJCQl3aWR0aCA9IE1hdGgubWF4KHdpZHRoLCB4ICsgZC53aWR0aCk7CisJCQkJfQorCQkJCXNldFJlY3RhbmdsZShpdGVtLCAiYm91bmRzIiwgeCwgeSwgaXdpZHRoLCBpaGVpZ2h0KTsKKwkJCQl5ICs9IGloZWlnaHQ7CisJCQkJaWYgKCJ0cmVlIiA9PSBjbGFzc25hbWUpIHsKKwkJCQkJT2JqZWN0IG5leHQgPSBnZXQoaXRlbSwgIm5vZGUiKTsKKwkJCQkJaWYgKChuZXh0ICE9IG51bGwpICYmIGdldEJvb2xlYW4oaXRlbSwgImV4cGFuZGVkIiwgdHJ1ZSkpIHsKKwkJCQkJCWxldmVsKys7CisJCQkJCX0gZWxzZSB7CisJCQkJCQl3aGlsZSAoKChuZXh0ID0gZ2V0KGl0ZW0sICI6bmV4dCIpKSA9PSBudWxsKSAmJiAobGV2ZWwgPiAwKSkgeworCQkJCQkJCWl0ZW0gPSBnZXRQYXJlbnQoaXRlbSk7CisJCQkJCQkJbGV2ZWwtLTsKKwkJCQkJCX0KKwkJCQkJfQorCQkJCQlpdGVtID0gbmV4dDsKKwkJCQl9IGVsc2UgeworCQkJCQlpdGVtID0gZ2V0KGl0ZW0sICI6bmV4dCIpOworCQkJCX0KKwkJCX0KKwkJCWxheW91dFNjcm9sbFBhbmUoY29tcG9uZW50LCB3aWR0aCwgeSAtIDEsIDAsIGNvbHVtbmhlaWdodCk7CisJCX0KKwkJZWxzZSBpZiAoIm1lbnViYXIiID09IGNsYXNzbmFtZSkgeyAKKwkJCVJlY3RhbmdsZSBib3VuZHMgPSBnZXRSZWN0YW5nbGUoY29tcG9uZW50LCAiYm91bmRzIik7CisJCQlpbnQgeCA9IDA7CisJCQlmb3IgKE9iamVjdCBtZW51ID0gZ2V0KGNvbXBvbmVudCwgIm1lbnUiKTsKKwkJCQkJbWVudSAhPSBudWxsOyBtZW51ID0gZ2V0KG1lbnUsICI6bmV4dCIpKSB7CisJCQkJRGltZW5zaW9uIGQgPSBnZXRTaXplKG1lbnUsIDgsIDQsICJsZWZ0Iik7CisJCQkJc2V0UmVjdGFuZ2xlKG1lbnUsICJib3VuZHMiLCB4LCAwLCBkLndpZHRoLCBib3VuZHMuaGVpZ2h0KTsKKwkJCQl4ICs9IGQud2lkdGg7CisJCQl9CisJCX0KKwkJZWxzZSBpZiAoKCJjb21ib2xpc3QiID09IGNsYXNzbmFtZSkgfHwgKCJwb3B1cG1lbnUiID09IGNsYXNzbmFtZSkpIHsKKwkJCWJvb2xlYW4gY29tYm8gPSAoImNvbWJvbGlzdCIgPT0gY2xhc3NuYW1lKTsKKwkJCWludCBwdyA9IDA7IGludCBwaCA9IDA7IGludCBweHkgPSBjb21ibyA/IDAgOiAxOworCQkJZm9yIChPYmplY3QgaXRlbSA9IGdldChnZXQoY29tcG9uZW50LCBjb21ibyA/ICJjb21ib2JveCIgOiAibWVudSIpLAorCQkJCQljb21ibyA/ICJjaG9pY2UiIDogIm1lbnUiKTsgaXRlbSAhPSBudWxsOyBpdGVtID0gZ2V0KGl0ZW0sICI6bmV4dCIpKSB7CisJCQkJU3RyaW5nIGl0ZW1jbGFzcyA9IGNvbWJvID8gbnVsbCA6IGdldENsYXNzKGl0ZW0pOworCQkJCURpbWVuc2lvbiBkID0gKGl0ZW1jbGFzcyA9PSAic2VwYXJhdG9yIikgPyBuZXcgRGltZW5zaW9uKDEsIDEpIDoKKwkJCQkJZ2V0U2l6ZShpdGVtLCA4ICwgNCwgImxlZnQiKTsKKwkJCQlpZiAoaXRlbWNsYXNzID09ICJjaGVja2JveG1lbnVpdGVtIikgeworCQkJCQlkLndpZHRoID0gZC53aWR0aCArIGJsb2NrICsgMzsKKwkJCQkJZC5oZWlnaHQgPSBNYXRoLm1heChibG9jaywgZC5oZWlnaHQpOworCQkJCX0KKwkJCQllbHNlIGlmIChpdGVtY2xhc3MgPT0gIm1lbnUiKSB7CisJCQkJCWQud2lkdGggKz0gYmxvY2s7CisJCQkJfQorCQkJCXNldFJlY3RhbmdsZShpdGVtLCAiYm91bmRzIiwgcHh5LCBweHkgKyBwaCwgZC53aWR0aCwgZC5oZWlnaHQpOworCQkJCXB3ID0gTWF0aC5tYXgocHcsIGQud2lkdGgpOworCQkJCXBoICs9IGQuaGVpZ2h0OworCQkJfQorCQkJUmVjdGFuZ2xlIHIgPSBnZXRSZWN0YW5nbGUoY29tcG9uZW50LCAiYm91bmRzIik7CisJCQlyLndpZHRoID0gcHcgKyAyOyByLmhlaWdodCA9IHBoICsgMjsKKwkJCWlmIChjb21ibykgeworCQkJCVJlY3RhbmdsZSBkYiA9IGdldFJlY3RhbmdsZShjb250ZW50LCAiYm91bmRzIik7CisJCQkJaWYgKHIueSArIHBoICsgMiA+IGRiLmhlaWdodCkgeworCQkJCQlyLndpZHRoID0gcHcgKyAyICsgYmxvY2s7CisJCQkJCXIuaGVpZ2h0ID0gZGIuaGVpZ2h0IC0gci55OworCQkJCX0KKwkJCQllbHNlIHsKKwkJCQkJci5oZWlnaHQgPSBNYXRoLm1pbihyLmhlaWdodCwgZGIuaGVpZ2h0IC0gci55KTsKKwkJCQl9CisJCQkJci53aWR0aCA9IE1hdGgubWluKHIud2lkdGgsIGRiLndpZHRoIC0gci54KTsKKwkJCQlsYXlvdXRTY3JvbGxQYW5lKGNvbXBvbmVudCwgcHcsIHBoLCAwLCAwKTsvL34KKwkJCX0KKwkJfQorCQkvL2phdmE+CisJCWVsc2UgaWYgKCJiZWFuIiA9PSBjbGFzc25hbWUpIHsKKwkJCQlSZWN0YW5nbGUgciA9IGdldFJlY3RhbmdsZShjb21wb25lbnQsICJib3VuZHMiKTsKKwkJCQkoKENvbXBvbmVudCkgZ2V0KGNvbXBvbmVudCwgImJlYW4iKSkuc2V0Qm91bmRzKHIpOworCQl9CisJCS8vPGphdmEKKwl9CisKKwkvKioKKwkgKgorCSAqLworCXByaXZhdGUgT2JqZWN0IHBvcHVwKE9iamVjdCBjb21wb25lbnQsIE9iamVjdCBjbGFzc25hbWUpIHsKKwkJT2JqZWN0IHBvcHVwID0gbnVsbDsKKwkJaW50IHB4ID0gMDsgaW50IHB5ID0gMDsKKwkJaWYgKCgibWVudWJhciIgPT0gY2xhc3NuYW1lKSB8fCAoInBvcHVwbWVudSIgPT0gY2xhc3NuYW1lKSkgeworCQkJT2JqZWN0IHBvcHVwbWVudSA9IGdldChjb21wb25lbnQsICJwb3B1cG1lbnUiKTsKKwkJCU9iamVjdCBzZWxlY3RlZCA9IGdldChjb21wb25lbnQsICJzZWxlY3RlZCIpOworCQkJaWYgKHBvcHVwbWVudSAhPSBudWxsKSB7CisJCQkJaWYgKGdldChwb3B1cG1lbnUsICJtZW51IikgPT0gc2VsZWN0ZWQpIHsgcmV0dXJuIG51bGw7IH0KKwkJCQlzZXQocG9wdXBtZW51LCAic2VsZWN0ZWQiLCBudWxsKTsKKwkJCQlzZXQocG9wdXBtZW51LCAibWVudSIsIG51bGwpOworCQkJCXJlbW92ZUl0ZW1JbXBsKGNvbnRlbnQsICJjb21wb25lbnQiLCBwb3B1cG1lbnUpOworCQkJCXJlcGFpbnQocG9wdXBtZW51KTsKKwkJCQlzZXQocG9wdXBtZW51LCAiOnBhcmVudCIsIG51bGwpOworCQkJCXNldChjb21wb25lbnQsICJwb3B1cG1lbnUiLCBudWxsKTsKKwkJCQlpZiAobW91c2VpbnNpZGUgPT0gcG9wdXBtZW51KSB7CisJCQkJCWZpbmRDb21wb25lbnQoY29udGVudCwgbW91c2V4LCBtb3VzZXkpOworCQkJCQloYW5kbGVNb3VzZUV2ZW50KG1vdXNleCwgbW91c2V4LCAxLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCAvL2phdmEKKwkJCQkJCU1vdXNlRXZlbnQuTU9VU0VfRU5URVJFRCwgbW91c2VpbnNpZGUsIGluc2lkZXBhcnQpOyAvL2phdmEKKwkJCQl9CisJCQkJcG9wdXAocG9wdXBtZW51LCAicG9wdXBtZW51Iik7CisJCQl9CisJCQlpZiAoKHNlbGVjdGVkID09IG51bGwpIHx8IChnZXRDbGFzcyhzZWxlY3RlZCkgIT0gIm1lbnUiKSkgeyByZXR1cm4gbnVsbDsgfQorCQkJcG9wdXAgPSBjcmVhdGVJbXBsKCJwb3B1cG1lbnUiKTsKKwkJCXNldChwb3B1cCwgIm1lbnUiLCBzZWxlY3RlZCk7CisJCQlzZXQoY29tcG9uZW50LCAicG9wdXBtZW51IiwgcG9wdXApOworCisJCQlSZWN0YW5nbGUgYm91bmRzID0gZ2V0UmVjdGFuZ2xlKHNlbGVjdGVkLCAiYm91bmRzIik7CisJCQlpZiAoIm1lbnViYXIiID09IGNsYXNzbmFtZSkgeworCQkJCXB4ID0gYm91bmRzLng7IHB5ID0gYm91bmRzLnkgKyBib3VuZHMuaGVpZ2h0IC0gMTsKKwkJCX0gZWxzZSB7CisJCQkJcHggPSBib3VuZHMueCArIGdldFJlY3RhbmdsZShjb21wb25lbnQsICJib3VuZHMiKS53aWR0aCAtIDQ7CisJCQkJcHkgPSBib3VuZHMueTsKKwkJCX0KKwkJfQorCQllbHNlIHsgLy9pZiAoImNvbWJvYm94IiA9PSBjbGFzc25hbWUpIHsKKwkJCXBvcHVwID0gY3JlYXRlSW1wbCgiY29tYm9saXN0Iik7CisJCQlzZXQocG9wdXAsICJjb21ib2JveCIsIGNvbXBvbmVudCk7CisJCQlzZXQoY29tcG9uZW50LCAiY29tYm9saXN0IiwgcG9wdXApOworCisJCQlweSA9IGdldFJlY3RhbmdsZShjb21wb25lbnQsICJib3VuZHMiKS5oZWlnaHQgKyAxOworCQl9CisJCWlmICgoIm1lbnViYXIiID09IGNsYXNzbmFtZSkgfHwgKCJjb21ib2JveCIgPT0gY2xhc3NuYW1lKSkgeworCQkJcG9wdXBvd25lciA9IGNvbXBvbmVudDsKKwkJfQorCQlpbnNlcnRJdGVtKGNvbnRlbnQsICJjb21wb25lbnQiLCBwb3B1cCwgMCk7CisJCXNldChwb3B1cCwgIjpwYXJlbnQiLCBjb250ZW50KTsKKwkJd2hpbGUgKGNvbXBvbmVudCAhPSBjb250ZW50KSB7CisJCQlSZWN0YW5nbGUgciA9IGdldFJlY3RhbmdsZShjb21wb25lbnQsICJib3VuZHMiKTsKKwkJCXB4ICs9IHIueDsgcHkgKz0gci55OworCQkJY29tcG9uZW50ID0gZ2V0UGFyZW50KGNvbXBvbmVudCk7CisJCX0KKwkJc2V0UmVjdGFuZ2xlKHBvcHVwLCAiYm91bmRzIiwgcHgsIHB5LCAwLCAwKTsKKwkJZG9MYXlvdXQocG9wdXApOyByZXBhaW50KHBvcHVwKTsKKwkJcmV0dXJuIHBvcHVwOworCX0KKworCS8qKgorCSAqCisJICovCisJcHJpdmF0ZSB2b2lkIGNsb3NldXAoT2JqZWN0IGNvbWJvYm94LCBPYmplY3QgY29tYm9saXN0LCBPYmplY3QgaXRlbSkgeworCQlpZiAoKGl0ZW0gIT0gbnVsbCkgJiYgZ2V0Qm9vbGVhbihpdGVtLCAiZW5hYmxlZCIsIHRydWUpKSB7CisJCQlTdHJpbmcgdGV4dCA9IGdldFN0cmluZyhpdGVtLCAidGV4dCIsICIiKTsKKwkJCXNldChjb21ib2JveCwgInRleHQiLCB0ZXh0KTsgLy8gaWYgZWRpdGFibGUKKwkJCXNldEludGVnZXIoY29tYm9ib3gsICJzdGFydCIsIHRleHQubGVuZ3RoKCksIDApOworCQkJc2V0SW50ZWdlcihjb21ib2JveCwgImVuZCIsIDAsIDApOworCQkJc2V0KGNvbWJvYm94LCAiaWNvbiIsIGdldChpdGVtLCAiaWNvbiIpKTsKKwkJCXZhbGlkYXRlKGNvbWJvYm94KTsKKwkJCXNldEludGVnZXIoY29tYm9ib3gsICJzZWxlY3RlZCIsIGdldEluZGV4KGNvbWJvYm94LCAiY2hvaWNlIiwgaXRlbSksIC0xKTsKKwkJCWludm9rZShjb21ib2JveCwgImFjdGlvbiIpOworCQl9CisJCXNldChjb21ib2xpc3QsICJjb21ib2JveCIsIG51bGwpOworCQlzZXQoY29tYm9ib3gsICJjb21ib2xpc3QiLCBudWxsKTsKKwkJcmVtb3ZlSXRlbUltcGwoY29udGVudCwgImNvbXBvbmVudCIsIGNvbWJvbGlzdCk7CisJCXJlcGFpbnQoY29tYm9saXN0KTsKKwkJc2V0KGNvbWJvbGlzdCwgIjpwYXJlbnQiLCBudWxsKTsKKwkJcG9wdXBvd25lciA9IG51bGw7CisJCWlmIChtb3VzZWluc2lkZSA9PSBjb21ib2xpc3QpIHsKKwkJCWZpbmRDb21wb25lbnQoY29udGVudCwgbW91c2V4LCBtb3VzZXkpOworCQkJaGFuZGxlTW91c2VFdmVudChtb3VzZXgsIG1vdXNleCwgMSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgLy9qYXZhCisJCQkJTW91c2VFdmVudC5NT1VTRV9FTlRFUkVELCBtb3VzZWluc2lkZSwgaW5zaWRlcGFydCk7IC8vamF2YQorCQl9CisJfQorCisJLyoqCisJICoKKwkgKi8KKwlwcml2YXRlIHZvaWQgY2xvc2V1cChPYmplY3QgbWVudWJhcikgeworCQlzZXQobWVudWJhciwgInNlbGVjdGVkIiwgbnVsbCk7CisJCXBvcHVwKG1lbnViYXIsICJtZW51YmFyIik7CisJCXJlcGFpbnQobWVudWJhcik7IC8vICwgc2VsZWN0ZWQKKwkJcG9wdXBvd25lciA9IG51bGw7CisJfQorCisJLyoqCisJICoKKwkgKi8KKwlwcml2YXRlIHZvaWQgY2xvc2V1cCgpIHsKKwkJaWYgKHBvcHVwb3duZXIgIT0gbnVsbCkgeworCQkJU3RyaW5nIGNsYXNzbmFtZSA9IGdldENsYXNzKHBvcHVwb3duZXIpOworCQkJaWYgKCJtZW51YmFyIiA9PSBjbGFzc25hbWUpIHsKKwkJCQljbG9zZXVwKHBvcHVwb3duZXIpOworCQkJfQorCQkJZWxzZSBpZiAoImNvbWJvYm94IiA9PSBjbGFzc25hbWUpIHsKKwkJCQljbG9zZXVwKHBvcHVwb3duZXIsIGdldChwb3B1cG93bmVyLCAiY29tYm9saXN0IiksIG51bGwpOworCQkJfQorCQl9CisJfQorCisJLyoqCisJICoKKwkgKi8KKwlwcml2YXRlIHZvaWQgc2hvd1RpcCgpIHsKKwkJU3RyaW5nIHRleHQgPSBudWxsOworCQl0b29sdGlwb3duZXIgPSBudWxsOworCQlTdHJpbmcgY2xhc3NuYW1lID0gZ2V0Q2xhc3MobW91c2VpbnNpZGUpOworCQlpZiAoKGNsYXNzbmFtZSA9PSAidGFiYmVkcGFuZSIpIHx8IChjbGFzc25hbWUgPT0gIm1lbnViYXIiKSB8fCAoY2xhc3NuYW1lID09ICJwb3B1cG1lbnUiKSkgeworCQkJaWYgKGluc2lkZXBhcnQgIT0gbnVsbCkgeworCQkJCXRleHQgPSBnZXRTdHJpbmcoaW5zaWRlcGFydCwgInRvb2x0aXAiLCBudWxsKTsKKwkJCX0KKwkJfQorCQllbHNlIGlmIChjbGFzc25hbWUgPT0gImNvbWJvbGlzdCIpIHsKKwkJCWlmIChpbnNpZGVwYXJ0IGluc3RhbmNlb2YgT2JqZWN0W10pIHsKKwkJCQl0ZXh0ID0gZ2V0U3RyaW5nKGluc2lkZXBhcnQsICJ0b29sdGlwIiwgbnVsbCk7CisJCQl9CisJCX0KKwkJLy9saXN0IHRhYmxlIHRyZWUKKwkJaWYgKHRleHQgPT0gbnVsbCkgeyB0ZXh0ID0gZ2V0U3RyaW5nKG1vdXNlaW5zaWRlLCAidG9vbHRpcCIsIG51bGwpOyB9CisJCQllbHNlIHsgdG9vbHRpcG93bmVyID0gaW5zaWRlcGFydDsgfQorCQlpZiAodGV4dCAhPSBudWxsKSB7CisJCQlGb250TWV0cmljcyBmbSA9IGdldEZvbnRNZXRyaWNzKGdldEZvbnQoKSk7CisJCQlpbnQgd2lkdGggPSBmbS5zdHJpbmdXaWR0aCh0ZXh0KSArIDQ7CisJCQlpbnQgaGVpZ2h0ID0gZm0uZ2V0QXNjZW50KCkgKyBmbS5nZXREZXNjZW50KCkgKyA0OworCQkJaWYgKHRvb2x0aXBvd25lciA9PSBudWxsKSB7IHRvb2x0aXBvd25lciA9IG1vdXNlaW5zaWRlOyB9CisJCQlzZXRSZWN0YW5nbGUodG9vbHRpcG93bmVyLCAidG9vbHRpcGJvdW5kcyIsIG1vdXNleCArIDEwLCBtb3VzZXkgKyAxMCwgd2lkdGgsIGhlaWdodCk7CisJCQlyZXBhaW50KG1vdXNleCArIDEwLCBtb3VzZXkgKyAxMCwgd2lkdGgsIGhlaWdodCk7CisJCX0KKwl9CisKKwkvKioKKwkgKgorCSAqLworCXByaXZhdGUgdm9pZCBoaWRlVGlwKCkgeworCQlpZiAodG9vbHRpcG93bmVyICE9IG51bGwpIHsKKwkJCVJlY3RhbmdsZSBib3VuZHMgPSBnZXRSZWN0YW5nbGUodG9vbHRpcG93bmVyLCAidG9vbHRpcGJvdW5kcyIpOworCQkJc2V0KHRvb2x0aXBvd25lciwgInRvb2x0aXBib3VuZHMiLCBudWxsKTsKKwkJCXRvb2x0aXBvd25lciA9IG51bGw7CisJCQlyZXBhaW50KGJvdW5kcy54LCBib3VuZHMueSwgYm91bmRzLndpZHRoLCBib3VuZHMuaGVpZ2h0KTsKKwkJfQorCX0KKworCS8qKgorCSAqCisJICovCisJcHJpdmF0ZSB2b2lkIGxheW91dEZpZWxkKE9iamVjdCBjb21wb25lbnQsIGludCBkdywgYm9vbGVhbiBoaWRkZW4sIGludCBsZWZ0KSB7CisJCWludCB3aWR0aCA9IGdldFJlY3RhbmdsZShjb21wb25lbnQsICJib3VuZHMiKS53aWR0aCAtIGxlZnQgLWR3OworCQlTdHJpbmcgdGV4dCA9IGdldFN0cmluZyhjb21wb25lbnQsICJ0ZXh0IiwgIiIpOworCQlpbnQgc3RhcnQgPSBnZXRJbnRlZ2VyKGNvbXBvbmVudCwgInN0YXJ0IiwgMCk7CisJCWlmIChzdGFydCA+IHRleHQubGVuZ3RoKCkpIHsgc2V0SW50ZWdlcihjb21wb25lbnQsICJzdGFydCIsIHN0YXJ0ID0gdGV4dC5sZW5ndGgoKSwgMCk7IH0KKwkJaW50IGVuZCA9IGdldEludGVnZXIoY29tcG9uZW50LCAiZW5kIiwgMCk7CisJCWlmIChlbmQgPiB0ZXh0Lmxlbmd0aCgpKSB7IHNldEludGVnZXIoY29tcG9uZW50LCAiZW5kIiwgZW5kID0gdGV4dC5sZW5ndGgoKSwgMCk7IH0KKwkJaW50IG9mZnNldCA9IGdldEludGVnZXIoY29tcG9uZW50LCAib2Zmc2V0IiwgMCk7CisJCWludCBvZmYgPSBvZmZzZXQ7CisJCUZvbnRNZXRyaWNzIGZtID0gZ2V0Rm9udE1ldHJpY3MoZ2V0Rm9udCgpKTsKKwkJaW50IGNhcmV0ID0gaGlkZGVuID8gKGZtLmNoYXJXaWR0aCgnKicpICogZW5kKSA6CisJCQlmbS5zdHJpbmdXaWR0aCh0ZXh0LnN1YnN0cmluZygwLCBlbmQpKTsgLy9qYXZhCisJCQkvL21pZHAgZm9udC5zdWJzdHJpbmdXaWR0aCh0ZXh0LCAwLCBlbmQpOworCQlpZiAob2ZmID4gY2FyZXQpIHsKKwkJCW9mZiA9IGNhcmV0OworCQl9CisJCWVsc2UgaWYgKG9mZiA8IGNhcmV0IC0gd2lkdGggKyA0KSB7CisJCQlvZmYgPSBjYXJldCAtIHdpZHRoICsgNDsKKwkJfQorCQlvZmYgPSBNYXRoLm1heCgwLCBNYXRoLm1pbihvZmYsIChoaWRkZW4gPyAoZm0uY2hhcldpZHRoKCcqJykgKgorCQkJdGV4dC5sZW5ndGgoKSkgOiBmbS5zdHJpbmdXaWR0aCh0ZXh0KSkgLSB3aWR0aCArIDQpKTsgCisJCWlmIChvZmYgIT0gb2Zmc2V0KSB7CisJCQlzZXRJbnRlZ2VyKGNvbXBvbmVudCwgIm9mZnNldCIsIG9mZiwgMCk7CisJCX0KKwl9CisKKwkvKioKKwkgKgorCSAqLworCXByaXZhdGUgdm9pZCBsYXlvdXRTY3JvbGxQYW5lKE9iamVjdCBjb21wb25lbnQsCisJCQlpbnQgY29udGVudHdpZHRoLCBpbnQgY29udGVudGhlaWdodCwgaW50IHJvd3dpZHRoLCBpbnQgY29sdW1uaGVpZ2h0KSB7CisJCVJlY3RhbmdsZSBib3VuZHMgPSBnZXRSZWN0YW5nbGUoY29tcG9uZW50LCAiYm91bmRzIik7CisJCWJvb2xlYW4gaG5lZWQgPSBmYWxzZTsgYm9vbGVhbiB2bmVlZCA9IGZhbHNlOworCQlpZiAoY29udGVudHdpZHRoID4gYm91bmRzLndpZHRoIC0gcm93d2lkdGggLSAyKSB7CisJCQlobmVlZCA9IHRydWU7CisJCQl2bmVlZCA9IChjb250ZW50aGVpZ2h0ID4gYm91bmRzLmhlaWdodCAtIGNvbHVtbmhlaWdodCAtIDIgLSBibG9jayk7CisJCX0KKwkJaWYgKHZuZWVkIHx8IChjb250ZW50aGVpZ2h0ID4gYm91bmRzLmhlaWdodCAtIGNvbHVtbmhlaWdodCAtIDIpKSB7CisJCQl2bmVlZCA9IHRydWU7CisJCQlobmVlZCA9IGhuZWVkIHx8IChjb250ZW50d2lkdGggPiBib3VuZHMud2lkdGggLSByb3d3aWR0aCAtIDIgLSBibG9jayk7CisJCX0KKwkJaW50IHZpZXdwb3J0d2lkdGggPSBib3VuZHMud2lkdGggLSByb3d3aWR0aCAtICh2bmVlZCA/IGJsb2NrIDogMCk7CisJCWludCB2aWV3cG9ydGhlaWdodCA9IGJvdW5kcy5oZWlnaHQgLSBjb2x1bW5oZWlnaHQgLSAoaG5lZWQgPyBibG9jayA6IDApOworCQlzZXRSZWN0YW5nbGUoY29tcG9uZW50LCAiOnBvcnQiLAorCQkJcm93d2lkdGgsIGNvbHVtbmhlaWdodCwgdmlld3BvcnR3aWR0aCwgdmlld3BvcnRoZWlnaHQpOyAvLz9yb3d3aWR0aAorCisJCVJlY3RhbmdsZSB2aWV3ID0gZ2V0UmVjdGFuZ2xlKGNvbXBvbmVudCwgIjp2aWV3Iik7CisJCXNldFJlY3RhbmdsZShjb21wb25lbnQsICI6dmlldyIsCisJCQkodmlldyAhPSBudWxsKSA/IE1hdGgubWF4KDAsCisJCQkJTWF0aC5taW4odmlldy54LCBjb250ZW50d2lkdGggLSB2aWV3cG9ydHdpZHRoICsgMikpIDogMCwKKwkJCSh2aWV3ICE9IG51bGwpID8gTWF0aC5tYXgoMCwKKwkJCQlNYXRoLm1pbih2aWV3LnksIGNvbnRlbnRoZWlnaHQgLSB2aWV3cG9ydGhlaWdodCArIDIpKSA6IDAsCisJCQlNYXRoLm1heCh2aWV3cG9ydHdpZHRoIC0gMiwgY29udGVudHdpZHRoKSwKKwkJCU1hdGgubWF4KHZpZXdwb3J0aGVpZ2h0IC0gMiwgY29udGVudGhlaWdodCkpOworCX0KKworCS8qKgorCSAqCisJICovCisJcHJpdmF0ZSB2b2lkIHNjcm9sbFRvVmlzaWJsZShPYmplY3QgY29tcG9uZW50LAorCQkJaW50IHgsIGludCB5LCBpbnQgd2lkdGgsIGludCBoZWlnaHQpIHsKKwkJUmVjdGFuZ2xlIHZpZXcgPSBnZXRSZWN0YW5nbGUoY29tcG9uZW50LCAiOnZpZXciKTsKKwkJUmVjdGFuZ2xlIHBvcnQgPSBnZXRSZWN0YW5nbGUoY29tcG9uZW50LCAiOnBvcnQiKTsKKwkJaW50IHZ4ID0gTWF0aC5tYXgoeCArIHdpZHRoIC0gcG9ydC53aWR0aCArIDIsIE1hdGgubWluKHZpZXcueCwgeCkpOworCQlpbnQgdnkgPSBNYXRoLm1heCh5ICsgaGVpZ2h0IC0gcG9ydC5oZWlnaHQgKyAyLCBNYXRoLm1pbih2aWV3LnksIHkpKTsKKwkJaWYgKCh2aWV3LnggIT0gdngpIHx8ICh2aWV3LnkgIT0gdnkpKSB7CisJCQlyZXBhaW50KGNvbXBvbmVudCk7IC8vIGhvcml6b250YWwgfCB2ZXJ0aWNhbAorCQkJdmlldy54ID0gdng7IHZpZXcueSA9IHZ5OworCQl9CisJfQorCQorCS8qKgorCSAqCisJICovCisJcHVibGljIERpbWVuc2lvbiBnZXRQcmVmZXJyZWRTaXplKCkgeworCQlyZXR1cm4gZ2V0UHJlZmVycmVkU2l6ZShjb250ZW50KTsKKwl9CisKKwkvKioKKwkgKgorCSAqLworCXByaXZhdGUgRGltZW5zaW9uIGdldFByZWZlcnJlZFNpemUoT2JqZWN0IGNvbXBvbmVudCkgeworCQlpbnQgd2lkdGggPSBnZXRJbnRlZ2VyKGNvbXBvbmVudCwgIndpZHRoIiwgMCk7CisJCWludCBoZWlnaHQgPSBnZXRJbnRlZ2VyKGNvbXBvbmVudCwgImhlaWdodCIsIDApOworCQlpZiAoKHdpZHRoID4gMCkgJiYgKGhlaWdodCA+IDApKSB7CisJCQlyZXR1cm4gbmV3IERpbWVuc2lvbih3aWR0aCwgaGVpZ2h0KTsKKwkJfQorCQlTdHJpbmcgY2xhc3NuYW1lID0gZ2V0Q2xhc3MoY29tcG9uZW50KTsKKwkJLy9TeXN0ZW0ub3V0LnByaW50bG4oImNsYXNzbmFtZTogIiArIGNsYXNzbmFtZSk7CisJCWlmICgibGFiZWwiID09IGNsYXNzbmFtZSkgeworCQkJcmV0dXJuIGdldFNpemUoY29tcG9uZW50LCAwLCAwLCAibGVmdCIpOworCQl9IAorCQlpZiAoImJ1dHRvbiIgPT0gY2xhc3NuYW1lKSB7CisJCQlyZXR1cm4gZ2V0U2l6ZShjb21wb25lbnQsIDEyLCA2LCAiY2VudGVyIik7CisJCX0gCisJCWlmICgiY2hlY2tib3giID09IGNsYXNzbmFtZSkgeworCQkJRGltZW5zaW9uIGQgPSBnZXRTaXplKGNvbXBvbmVudCwgMCwgMCwgImxlZnQiKTsKKwkJCWQud2lkdGggPSBkLndpZHRoICsgYmxvY2sgKyAzOworCQkJZC5oZWlnaHQgPSBNYXRoLm1heChibG9jaywgZC5oZWlnaHQpOworCQkJcmV0dXJuIGQ7CisJCX0KKwkJaWYgKCJjb21ib2JveCIgPT0gY2xhc3NuYW1lKSB7CisJCQlpZiAoZ2V0Qm9vbGVhbihjb21wb25lbnQsICJlZGl0YWJsZSIsIHRydWUpKSB7CisJCQkJRGltZW5zaW9uIHNpemUgPSBnZXRGaWVsZFNpemUoY29tcG9uZW50KTsKKwkJCQlJbWFnZSBpY29uID0gZ2V0SWNvbihjb21wb25lbnQsICJpY29uIiwgbnVsbCk7CisJCQkJaWYgKGljb24gIT0gbnVsbCkgeworCQkJCQlzaXplLndpZHRoICs9IGljb24uZ2V0V2lkdGgodGhpcyk7CisJCQkJCXNpemUuaGVpZ2h0ID0gTWF0aC5tYXgoc2l6ZS5oZWlnaHQsIGljb24uZ2V0SGVpZ2h0KHRoaXMpICsgMik7CisJCQkJfQorCQkJCXNpemUud2lkdGggKz0gYmxvY2s7CisJCQkJcmV0dXJuIHNpemU7CisJCQl9IGVsc2UgeworCQkJCWludCBzZWxlY3RlZCA9IGdldEludGVnZXIoY29tcG9uZW50LCAic2VsZWN0ZWQiLCAtMSk7CisJCQkJcmV0dXJuIGdldFNpemUoKHNlbGVjdGVkICE9IC0xKSA/CisJCQkJCWdldEl0ZW1JbXBsKGNvbXBvbmVudCwgImNob2ljZSIsIHNlbGVjdGVkKSA6CisJCQkJCWdldChjb21wb25lbnQsICJjaG9pY2UiKSwgNCArIGJsb2NrLCA0LCAibGVmdCIpOworCQkJfQorCQl9CisJCWlmICgoInRleHRmaWVsZCIgPT0gY2xhc3NuYW1lKSB8fCAoInBhc3N3b3JkZmllbGQiID09IGNsYXNzbmFtZSkpIHsKKwkJCXJldHVybiBnZXRGaWVsZFNpemUoY29tcG9uZW50KTsKKwkJfQorCQlpZiAoInRleHRhcmVhIiA9PSBjbGFzc25hbWUpIHsKKwkJCWludCBjb2x1bW5zID0gZ2V0SW50ZWdlcihjb21wb25lbnQsICJjb2x1bW5zIiwgMCk7CisJCQlpbnQgcm93cyA9IGdldEludGVnZXIoY29tcG9uZW50LCAicm93cyIsIDApOyAvLyAnZScgLT4gJ20nID8KKwkJCUZvbnRNZXRyaWNzIGZtID0gZ2V0Rm9udE1ldHJpY3MoZ2V0Rm9udCgpKTsgLy9qYXZhCisJCQlyZXR1cm4gbmV3IERpbWVuc2lvbigKKwkJCQkoKGNvbHVtbnMgPiAwKSA/IChjb2x1bW5zICogZm0uY2hhcldpZHRoKCdlJykgKyAyKSA6IDc2KSArIDIgKyBibG9jaywKKwkJCQkoKHJvd3MgPiAwKSA/IChyb3dzICogZm0uZ2V0SGVpZ2h0KCkgLSBmbS5nZXRMZWFkaW5nKCkgKyAyKSA6IDc2KSArIDIgKyBibG9jayk7CisJCX0KKwkJaWYgKCJ0YWJiZWRwYW5lIiA9PSBjbGFzc25hbWUpIHsKKwkJCVN0cmluZyBwbGFjZW1lbnQgPSBnZXRTdHJpbmcoY29tcG9uZW50LCAicGxhY2VtZW50IiwgInRvcCIpOworCQkJYm9vbGVhbiBob3Jpem9udGFsID0gKChwbGFjZW1lbnQgPT0gInRvcCIpIHx8IChwbGFjZW1lbnQgPT0gImJvdHRvbSIpKTsKKwkJCWludCB0YWJzaXplID0gMDsJCisJCQlpbnQgY29udGVudHdpZHRoID0gMDsgaW50IGNvbnRlbnRoZWlnaHQgPSAwOworCQkJZm9yIChPYmplY3QgY29tcCA9IGdldChjb21wb25lbnQsICJ0YWIiKTsKKwkJCQkJY29tcCAhPSBudWxsOyBjb21wID0gZ2V0KGNvbXAsICI6bmV4dCIpKSB7CisJCQkJRGltZW5zaW9uIGQgPSBnZXRTaXplKGNvbXAsIDgsIDQsICJsZWZ0Iik7CisJCQkJdGFic2l6ZSA9IE1hdGgubWF4KHRhYnNpemUsIGhvcml6b250YWwgPyBkLmhlaWdodCA6IGQud2lkdGgpOworCQkJfQorCQkJZm9yIChPYmplY3QgY29tcCA9IGdldChjb21wb25lbnQsICJjb21wb25lbnQiKTsKKwkJCQkJY29tcCAhPSBudWxsOyBjb21wID0gZ2V0KGNvbXAsICI6bmV4dCIpKSB7CisJCQkJaWYgKCFnZXRCb29sZWFuKGNvbXAsICJ2aXNpYmxlIiwgdHJ1ZSkpIHsgY29udGludWU7IH0KKwkJCQlEaW1lbnNpb24gZCA9IGdldFByZWZlcnJlZFNpemUoY29tcCk7CisJCQkJY29udGVudHdpZHRoID0gTWF0aC5tYXgoY29udGVudHdpZHRoLCBkLndpZHRoKTsKKwkJCQljb250ZW50aGVpZ2h0ID0gTWF0aC5tYXgoY29udGVudGhlaWdodCwgZC5oZWlnaHQpOworCQkJfQorCQkJcmV0dXJuIG5ldyBEaW1lbnNpb24oY29udGVudHdpZHRoICsgKGhvcml6b250YWwgPyA0IDogKHRhYnNpemUgKyAzKSksCisJCQkJY29udGVudGhlaWdodCArIChob3Jpem9udGFsID8gKHRhYnNpemUgKyAzKSA6IDQpKTsKKwkJfQorCQlpZiAoKCJwYW5lbCIgPT0gY2xhc3NuYW1lKSB8fCAoY2xhc3NuYW1lID09ICJkaWFsb2ciKSkgeworCQkJRGltZW5zaW9uIHNpemUgPSBuZXcgRGltZW5zaW9uKAorCQkJCWdldEludGVnZXIoY29tcG9uZW50LCAibGVmdCIsIDApICsgZ2V0SW50ZWdlcihjb21wb25lbnQsICJyaWdodCIsIDApLAorCQkJCWdldEludGVnZXIoY29tcG9uZW50LCAidG9wIiwgMCkgKyBnZXRJbnRlZ2VyKGNvbXBvbmVudCwgImJvdHRvbSIsIDApKTsKKwkJCWlmIChjbGFzc25hbWUgPT0gImRpYWxvZyIpIHsKKwkJCQlpbnQgdGl0bGVoZWlnaHQgPSBnZXRTaXplKGNvbXBvbmVudCwgMCwgMCwgImxlZnQiKS5oZWlnaHQ7CisJCQkJc2V0SW50ZWdlcihjb21wb25lbnQsICJ0aXRsZWhlaWdodCIsIHRpdGxlaGVpZ2h0LCAwKTsKKwkJCQlzaXplLndpZHRoICs9IDg7IHNpemUuaGVpZ2h0ICs9IDggKyB0aXRsZWhlaWdodDsKKwkJCX0KKwkJCWludCBnYXAgPSBnZXRJbnRlZ2VyKGNvbXBvbmVudCwgImdhcCIsIDApOworCQkJaW50W11bXSBncmlkID0gZ2V0R3JpZChjb21wb25lbnQsIGdhcCk7CisJCQlpZiAoZ3JpZCAhPSBudWxsKSB7CisJCQkJc2l6ZS53aWR0aCArPSBnZXRTdW0oZ3JpZFswXSwgMCwgZ3JpZFswXS5sZW5ndGgsIGdhcCwgZmFsc2UpOworCQkJCXNpemUuaGVpZ2h0ICs9IGdldFN1bShncmlkWzFdLCAwLCBncmlkWzFdLmxlbmd0aCwgZ2FwLCBmYWxzZSk7CisJCQl9CisJCQlyZXR1cm4gc2l6ZTsKKwkJfQorCQllbHNlIGlmICgiZGVza3RvcCIgPT0gY2xhc3NuYW1lKSB7CisJCQlEaW1lbnNpb24gc2l6ZSA9IG5ldyBEaW1lbnNpb24oKTsKKwkJCWZvciAoT2JqZWN0IGNvbXAgPSBnZXQoY29tcG9uZW50LCAiY29tcG9uZW50Iik7CisJCQkJCWNvbXAgIT0gbnVsbDsgY29tcCA9IGdldChjb21wLCAiOm5leHQiKSkgeworCQkJCVN0cmluZyBpY2xhc3MgPSBnZXRDbGFzcyhjb21wKTsKKwkJCQlpZiAoKGljbGFzcyAhPSAiZGlhbG9nIikgJiYgKGljbGFzcyAhPSAicG9wdXBtZW51IikgJiYKKwkJCQkJCShpY2xhc3MgIT0gImNvbWJvbGlzdCIpKSB7CisJCQkJCURpbWVuc2lvbiBkID0gZ2V0UHJlZmVycmVkU2l6ZShjb21wKTsKKwkJCQkJc2l6ZS53aWR0aCA9IE1hdGgubWF4KGQud2lkdGgsIHNpemUud2lkdGgpOworCQkJCQlzaXplLmhlaWdodCA9IE1hdGgubWF4KGQuaGVpZ2h0LCBzaXplLmhlaWdodCk7CisJCQkJfQorCQkJfQorCQkJcmV0dXJuIHNpemU7CisJCX0KKwkJaWYgKCJzcGluYm94IiA9PSBjbGFzc25hbWUpIHsKKwkJCURpbWVuc2lvbiBzaXplID0gZ2V0RmllbGRTaXplKGNvbXBvbmVudCk7CisJCQlzaXplLndpZHRoICs9IGJsb2NrOworCQkJcmV0dXJuIHNpemU7CisJCX0KKwkJaWYgKCJwcm9ncmVzc2JhciIgPT0gY2xhc3NuYW1lKSB7CisJCQlib29sZWFuIGhvcml6b250YWwgPSAoInZlcnRpY2FsIiAhPSBnZXQoY29tcG9uZW50LCAib3JpZW50YXRpb24iKSk7CisJCQlyZXR1cm4gbmV3IERpbWVuc2lvbihob3Jpem9udGFsID8gNzYgOiA2LCBob3Jpem9udGFsID8gNiA6IDc2KTsKKwkJfQorCQlpZiAoInNsaWRlciIgPT0gY2xhc3NuYW1lKSB7CisJCQlib29sZWFuIGhvcml6b250YWwgPSAoInZlcnRpY2FsIiAhPSBnZXQoY29tcG9uZW50LCAib3JpZW50YXRpb24iKSk7CisJCQlyZXR1cm4gbmV3IERpbWVuc2lvbihob3Jpem9udGFsID8gNzYgOiAxMCwgaG9yaXpvbnRhbCA/IDEwIDogNzYpOworCQl9CisJCWlmICgic3BsaXRwYW5lIiA9PSBjbGFzc25hbWUpIHsKKwkJCWJvb2xlYW4gaG9yaXpvbnRhbCA9ICgidmVydGljYWwiICE9IGdldChjb21wb25lbnQsICJvcmllbnRhdGlvbiIpKTsKKwkJCU9iamVjdCBjb21wMSA9IGdldChjb21wb25lbnQsICJjb21wb25lbnQiKTsKKwkJCURpbWVuc2lvbiBzaXplID0gKChjb21wMSA9PSBudWxsKSB8fCAhZ2V0Qm9vbGVhbihjb21wMSwgInZpc2libGUiLCB0cnVlKSkgPworCQkJCW5ldyBEaW1lbnNpb24oKSA6IGdldFByZWZlcnJlZFNpemUoY29tcDEpOworCQkJT2JqZWN0IGNvbXAyID0gZ2V0KGNvbXAxLCAiOm5leHQiKTsKKwkJCWlmICgoY29tcDIgIT0gbnVsbCkgJiYgZ2V0Qm9vbGVhbihjb21wMiwgInZpc2libGUiLCB0cnVlKSkgeworCQkJCURpbWVuc2lvbiBkID0gZ2V0UHJlZmVycmVkU2l6ZShjb21wMik7CisJCQkJc2l6ZS53aWR0aCA9IGhvcml6b250YWwgPyAoc2l6ZS53aWR0aCArIGQud2lkdGgpIDoKKwkJCQkJTWF0aC5tYXgoc2l6ZS53aWR0aCwgZC53aWR0aCk7CisJCQkJc2l6ZS5oZWlnaHQgPSBob3Jpem9udGFsID8gTWF0aC5tYXgoc2l6ZS5oZWlnaHQsIGQuaGVpZ2h0KSA6CisJCQkJCShzaXplLmhlaWdodCArIGQuaGVpZ2h0KTsKKwkJCX0KKwkJCWlmIChob3Jpem9udGFsKSB7IHNpemUud2lkdGggKz0gNTsgfSBlbHNlIHsgc2l6ZS5oZWlnaHQgKz0gNTsgfQorCQkJcmV0dXJuIHNpemU7CisJCX0KKwkJaWYgKCgibGlzdCIgPT0gY2xhc3NuYW1lKSB8fAorCQkJCSgidGFibGUiID09IGNsYXNzbmFtZSkgfHwgKCJ0cmVlIiA9PSBjbGFzc25hbWUpKSB7CisJCQlyZXR1cm4gbmV3IERpbWVuc2lvbig3NiArIDIgKyBibG9jaywgNzYgKyAyICsgYmxvY2spOworCQl9CisJCWlmICgic2VwYXJhdG9yIiA9PSBjbGFzc25hbWUpIHsKKwkJCXJldHVybiBuZXcgRGltZW5zaW9uKDEsIDEpOworCQl9CisJCWlmICgibWVudWJhciIgPT0gY2xhc3NuYW1lKSB7IAorCQkJRGltZW5zaW9uIHNpemUgPSBuZXcgRGltZW5zaW9uKDAsIDApOworCQkJZm9yIChPYmplY3QgbWVudSA9IGdldChjb21wb25lbnQsICJtZW51Iik7CisJCQkJCW1lbnUgIT0gbnVsbDsgbWVudSA9IGdldChtZW51LCAiOm5leHQiKSkgeworCQkJCURpbWVuc2lvbiBkID0gZ2V0U2l6ZShtZW51LCA4LCA0LCAibGVmdCIpOworCQkJCXNpemUud2lkdGggKz0gZC53aWR0aDsKKwkJCQlzaXplLmhlaWdodCA9IE1hdGgubWF4KHNpemUuaGVpZ2h0LCBkLmhlaWdodCk7CisJCQl9CisJCQlyZXR1cm4gc2l6ZTsKKwkJfQorCQkvL2phdmE+CisJCWlmICgiYmVhbiIgPT0gY2xhc3NuYW1lKSB7CisJCQkJcmV0dXJuICgoQ29tcG9uZW50KSBnZXQoY29tcG9uZW50LCAiYmVhbiIpKS5nZXRQcmVmZXJyZWRTaXplKCk7CisJCX0KKwkJLy88amF2YQorCQl0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKChTdHJpbmcpIGNsYXNzbmFtZSk7CisJfQorCisJLyoqCisJICoKKwkgKi8KKwlwcml2YXRlIGludFtdW10gZ2V0R3JpZChPYmplY3QgY29tcG9uZW50LCBpbnQgZ2FwKSB7CisJCWludCBjb3VudCA9IDA7CisJCWZvciAoT2JqZWN0IGNvbXAgPSBnZXQoY29tcG9uZW50LCAiY29tcG9uZW50Iik7IGNvbXAgIT0gbnVsbDsKKwkJCQljb21wID0gZ2V0KGNvbXAsICI6bmV4dCIpKSB7CisJCQlpZiAoZ2V0Qm9vbGVhbihjb21wLCAidmlzaWJsZSIsIHRydWUpKSB7IGNvdW50Kys7IH0KKwkJfQorCQlpZiAoY291bnQgPT0gMCkgeyByZXR1cm4gbnVsbDsgfQorCQlpbnQgY29sdW1ucyA9IGdldEludGVnZXIoY29tcG9uZW50LCAiY29sdW1ucyIsIDApOworCQlpbnQgaWNvbHMgPSAoY29sdW1ucyAhPSAwKSA/IGNvbHVtbnMgOiBjb3VudDsKKwkJaW50IGlyb3dzID0gKGNvbHVtbnMgIT0gMCkgPyAoKGNvdW50ICsgY29sdW1ucyAtIDEpIC8gY29sdW1ucykgOiAxOworCQlpbnRbXVtdIGdyaWQgPSB7CisJCQluZXcgaW50W2ljb2xzXSwgbmV3IGludFtpcm93c10sIC8vIGNvbHVtbndpZHRocywgcm93aGVpZ2h0cworCQkJbmV3IGludFtpY29sc10sIG5ldyBpbnRbaXJvd3NdLCAvLyBjb2x1bW53ZWlnaHRzLCByb3d3ZWlnaHRzCisJCQluZXcgaW50W2NvdW50XSwgbmV3IGludFtjb3VudF0sIC8vIGdyaWR4LCBncmlkeQorCQkJbmV3IGludFtjb3VudF0sIG5ldyBpbnRbY291bnRdIH07IC8vIGdyaWR3aWR0aCwgZ3JpZGhlaWdodAorCQlpbnRbXSBjb2x1bW5oZWlnaHQgPSBuZXcgaW50W2ljb2xzXTsKKwkJaW50W11bXSBjYWNoZSA9IG51bGw7IC8vIHByZWZlcnJlZHdpZHRoLCBoZWlnaHQsIGNvbHVtbndlaWdodCwgcm93d2VpZ2h0CisKKwkJaW50IGkgPSAwOyBpbnQgeCA9IDA7IGludCB5ID0gMDsKKwkJaW50IG5leHRzaXplID0gMDsKKwkJZm9yIChPYmplY3QgY29tcCA9IGdldChjb21wb25lbnQsICJjb21wb25lbnQiKTsKKwkJCQljb21wICE9IG51bGw7IGNvbXAgPSBnZXQoY29tcCwgIjpuZXh0IikpIHsKKwkJCWlmICghZ2V0Qm9vbGVhbihjb21wLCAidmlzaWJsZSIsIHRydWUpKSB7IGNvbnRpbnVlOyB9CisJCQlpbnQgY29sc3BhbiA9ICgoY29sdW1ucyAhPSAwKSAmJiAoY29sdW1ucyA8IGNvdW50KSkgPworCQkJCU1hdGgubWluKGdldEludGVnZXIoY29tcCwgImNvbHNwYW4iLCAxKSwgY29sdW1ucykgOiAxOworCQkJaW50IHJvd3NwYW4gPSAoY29sdW1ucyAhPSAxKSA/IGdldEludGVnZXIoY29tcCwgInJvd3NwYW4iLCAxKSA6IDE7CisJCQkKKwkJCWZvciAoaW50IGogPSAwOyBqIDwgY29sc3BhbjsgaisrKSB7CisJCQkJaWYgKChjb2x1bW5zICE9IDApICYmICh4ICsgY29sc3BhbiA+IGNvbHVtbnMpKSB7CisJCQkJCXggPSAwOyB5Kys7IGogPSAtMTsKKwkJCQl9CisJCQkJZWxzZSBpZiAoY29sdW1uaGVpZ2h0W3ggKyBqXSA+IHkpIHsKKwkJCQkJeCArPSAoaiArIDEpOyBqID0gLTE7CisJCQkJfQorCQkJfQorCQkJaWYgKHkgKyByb3dzcGFuID4gZ3JpZFsxXS5sZW5ndGgpIHsKKwkJCQlpbnRbXSByb3doZWlnaHRzID0gbmV3IGludFt5ICsgcm93c3Bhbl07CisJCQkJU3lzdGVtLmFycmF5Y29weShncmlkWzFdLCAwLCByb3doZWlnaHRzLCAwLCBncmlkWzFdLmxlbmd0aCk7CisJCQkJZ3JpZFsxXSA9IHJvd2hlaWdodHM7CisJCQkJaW50W10gcm93d2VpZ2h0cyA9IG5ldyBpbnRbeSArIHJvd3NwYW5dOworCQkJCVN5c3RlbS5hcnJheWNvcHkoZ3JpZFszXSwgMCwgcm93d2VpZ2h0cywgMCwgZ3JpZFszXS5sZW5ndGgpOworCQkJCWdyaWRbM10gPSByb3d3ZWlnaHRzOworCQkJfQorCQkJZm9yIChpbnQgaiA9IDA7IGogPCBjb2xzcGFuOyBqKyspIHsKKwkJCQljb2x1bW5oZWlnaHRbeCArIGpdID0geSArIHJvd3NwYW47CisJCQl9CisKKwkJCWludCB3ZWlnaHR4ID0gZ2V0SW50ZWdlcihjb21wLCAid2VpZ2h0eCIsIDApOworCQkJaW50IHdlaWdodHkgPSBnZXRJbnRlZ2VyKGNvbXAsICJ3ZWlnaHR5IiwgMCk7CisJCQlEaW1lbnNpb24gZCA9IGdldFByZWZlcnJlZFNpemUoY29tcCk7CisKKwkJCWlmIChjb2xzcGFuID09IDEpIHsKKwkJCQlncmlkWzBdW3hdID0gTWF0aC5tYXgoZ3JpZFswXVt4XSwgZC53aWR0aCk7IC8vIGNvbHVtbndpZHRocworCQkJCWdyaWRbMl1beF0gPSBNYXRoLm1heChncmlkWzJdW3hdLCB3ZWlnaHR4KTsgLy8gY29sdW1ud2VpZ2h0cworCQkJfQorCQkJZWxzZSB7CisJCQkJaWYgKGNhY2hlID09IG51bGwpIHsgY2FjaGUgPSBuZXcgaW50WzRdW2NvdW50XTsgfQorCQkJCWNhY2hlWzBdW2ldID0gZC53aWR0aDsKKwkJCQljYWNoZVsyXVtpXSA9IHdlaWdodHg7CisJCQkJaWYgKChuZXh0c2l6ZSA9PSAwKSB8fCAoY29sc3BhbiA8IG5leHRzaXplKSkgeyBuZXh0c2l6ZSA9IGNvbHNwYW47IH0KKwkJCX0KKwkJCWlmIChyb3dzcGFuID09IDEpIHsKKwkJCQlncmlkWzFdW3ldID0gTWF0aC5tYXgoZ3JpZFsxXVt5XSwgZC5oZWlnaHQpOyAvLyByb3doZWlnaHRzIAorCQkJCWdyaWRbM11beV0gPSBNYXRoLm1heChncmlkWzNdW3ldLCB3ZWlnaHR5KTsgLy8gcm93d2VpZ2h0cworCQkJfQorCQkJZWxzZSB7CisJCQkJaWYgKGNhY2hlID09IG51bGwpIHsgY2FjaGUgPSBuZXcgaW50WzRdW2NvdW50XTsgfQorCQkJCWNhY2hlWzFdW2ldID0gZC5oZWlnaHQ7CisJCQkJY2FjaGVbM11baV0gPSB3ZWlnaHR5OworCQkJCWlmICgobmV4dHNpemUgPT0gMCkgfHwgKHJvd3NwYW4gPCBuZXh0c2l6ZSkpIHsgbmV4dHNpemUgPSByb3dzcGFuOyB9CisJCQl9CisJCQlncmlkWzRdW2ldID0geDsgLy9ncmlkeAorCQkJZ3JpZFs1XVtpXSA9IHk7IC8vZ3JpZHkKKwkJCWdyaWRbNl1baV0gPSBjb2xzcGFuOyAvL2dyaWR3aWR0aAorCQkJZ3JpZFs3XVtpXSA9IHJvd3NwYW47IC8vZ3JpZGhlaWdodAorCQkJCisJCQl4ICs9IGNvbHNwYW47CisJCQlpKys7CisJCX0KKworCQl3aGlsZSAobmV4dHNpemUgIT0gMCkgeworCQkJaW50IHNpemUgPSBuZXh0c2l6ZTsgbmV4dHNpemUgPSAwOworCQkJZm9yIChpbnQgaiA9IDA7IGogPCAyOyBqKyspIHsgLy8gaG9yaXpvbnRhbCwgdmVydGljYWwKKwkJCQlmb3IgKGludCBrID0gMDsgayA8IGNvdW50OyBrKyspIHsKKwkJCQkJaWYgKGdyaWRbNiArIGpdW2tdID09IHNpemUpIHsgLy8gZ3JpZHdpZHRoLCBncmlkaGVpZ2h0CisJCQkJCQlpbnQgZ3JpZHBvaW50ID0gZ3JpZFs0ICsgal1ba107IC8vIGdyaWR4LCBncmlkeQorCisJCQkJCQlpbnQgd2VpZ2h0ZGlmZiA9IGNhY2hlWzIgKyBqXVtrXTsKKwkJCQkJCWZvciAoaW50IG0gPSAwOyAod2VpZ2h0ZGlmZiA+IDApICYmIChtIDwgc2l6ZSk7IG0rKykgeworCQkJCQkJCXdlaWdodGRpZmYgLT0gZ3JpZFsyICsgal1bZ3JpZHBvaW50ICsgbV07CisJCQkJCQl9CisJCQkJCQlpZiAod2VpZ2h0ZGlmZiA+IDApIHsKKwkJCQkJCQlpbnQgd2VpZ2h0c3VtID0gY2FjaGVbMiArIGpdW2tdIC0gd2VpZ2h0ZGlmZjsKKwkJCQkJCQlmb3IgKGludCBtID0gMDsgKHdlaWdodHN1bSA+IDApICYmIChtIDwgc2l6ZSk7IG0rKykgeworCQkJCQkJCQlpbnQgd2VpZ2h0ID0gZ3JpZFsyICsgal1bZ3JpZHBvaW50ICsgbV07CisJCQkJCQkJCWlmICh3ZWlnaHQgPiAwKSB7CisJCQkJCQkJCQlpbnQgd2VpZ2h0aW5jID0gd2VpZ2h0ICogd2VpZ2h0ZGlmZiAvIHdlaWdodHN1bTsKKwkJCQkJCQkJCWdyaWRbMiArIGpdW2dyaWRwb2ludCArIG1dICs9IHdlaWdodGluYzsKKwkJCQkJCQkJCXdlaWdodGRpZmYgLT0gd2VpZ2h0aW5jOworCQkJCQkJCQkJd2VpZ2h0c3VtIC09IHdlaWdodGluYzsKKwkJCQkJCQkJfQorCQkJCQkJCX0KKwkJCQkJCQlncmlkWzIgKyBqXVtncmlkcG9pbnQgKyBzaXplIC0gMV0gKz0gd2VpZ2h0ZGlmZjsKKwkJCQkJCX0KKworCQkJCQkJaW50IHNpemVkaWZmID0gY2FjaGVbal1ba107CisJCQkJCQlpbnQgd2VpZ2h0c3VtID0gMDsKKwkJCQkJCWZvciAoaW50IG0gPSAwOyAoc2l6ZWRpZmYgPiAwKSAmJiAobSA8IHNpemUpOyBtKyspIHsKKwkJCQkJCQlzaXplZGlmZiAtPSBncmlkW2pdW2dyaWRwb2ludCArIG1dOworCQkJCQkJCXdlaWdodHN1bSArPSBncmlkWzIgKyBqXVtncmlkcG9pbnQgKyBtXTsKKwkJCQkJCX0KKwkJCQkJCWlmIChzaXplZGlmZiA+IDApIHsKKwkJCQkJCQlmb3IgKGludCBtID0gMDsgKHdlaWdodHN1bSA+IDApICYmIChtIDwgc2l6ZSk7IG0rKykgeworCQkJCQkJCQlpbnQgd2VpZ2h0ID0gZ3JpZFsyICsgal1bZ3JpZHBvaW50ICsgbV07CisJCQkJCQkJCWlmICh3ZWlnaHQgPiAwKSB7CisJCQkJCQkJCQlpbnQgc2l6ZWluYyA9IHdlaWdodCAqIHNpemVkaWZmIC8gd2VpZ2h0c3VtOworCQkJCQkJCQkJZ3JpZFtqXVtncmlkcG9pbnQgKyBtXSArPSBzaXplaW5jOworCQkJCQkJCQkJc2l6ZWRpZmYgLT0gc2l6ZWluYzsKKwkJCQkJCQkJCXdlaWdodHN1bSAtPSB3ZWlnaHQ7CisJCQkJCQkJCX0KKwkJCQkJCQl9CisJCQkJCQkJZ3JpZFtqXVtncmlkcG9pbnQgKyBzaXplIC0gMV0gKz0gc2l6ZWRpZmY7CisJCQkJCQl9CisJCQkJCX0KKwkJCQkJZWxzZSBpZiAoKGdyaWRbNiArIGpdW2tdID4gc2l6ZSkgJiYKKwkJCQkJCQkoKG5leHRzaXplID09IDApIHx8IChncmlkWzYgKyBqXVtrXSA8IG5leHRzaXplKSkpIHsKKwkJCQkJCW5leHRzaXplID0gZ3JpZFs2ICsgal1ba107CisJCQkJCX0KKwkJCQl9CisJCQl9CisJCX0KKwkJcmV0dXJuIGdyaWQ7CisJfQorCisJLyoqCisJICoKKwkgKi8KKwlwcml2YXRlIGludCBnZXRTdW0oaW50W10gdmFsdWVzLAorCQkJaW50IGZyb20sIGludCBsZW5ndGgsIGludCBnYXAsIGJvb2xlYW4gbGFzdCkgeworCQlpZiAobGVuZ3RoIDw9IDApIHsgcmV0dXJuIDA7IH0KKwkJaW50IHZhbHVlID0gMDsKKwkJZm9yIChpbnQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgeworCQkJdmFsdWUgKz0gdmFsdWVzW2Zyb20gKyBpXTsKKwkJfQorCQlyZXR1cm4gdmFsdWUgKyAobGVuZ3RoIC0gKGxhc3QgPyAwIDogMSkpICogZ2FwOworCX0KKworCS8qKgorCSAqCisJICovCisJcHJpdmF0ZSBEaW1lbnNpb24gZ2V0RmllbGRTaXplKE9iamVjdCBjb21wb25lbnQpIHsKKwkJU3RyaW5nIHRleHQgPSBnZXRTdHJpbmcoY29tcG9uZW50LCAidGV4dCIsICIiKTsKKwkJaW50IGNvbHVtbnMgPSBnZXRJbnRlZ2VyKGNvbXBvbmVudCwgImNvbHVtbnMiLCAwKTsKKwkJRm9udE1ldHJpY3MgZm0gPSBnZXRGb250TWV0cmljcyhnZXRGb250KCkpOworCQlyZXR1cm4gbmV3IERpbWVuc2lvbigoKGNvbHVtbnMgPiAwKSA/CisJCQkoY29sdW1ucyAqIGZtLmNoYXJXaWR0aCgnZScpKSA6IDc2KSArIDQsCisJCQlmbS5nZXRBc2NlbnQoKSArIGZtLmdldERlc2NlbnQoKSArIDQpOyAvLyBmbS5zdHJpbmdXaWR0aCh0ZXh0KQorCX0KKworCS8qKgorCSAqCisJICovCisJcHJpdmF0ZSBEaW1lbnNpb24gZ2V0U2l6ZShPYmplY3QgY29tcG9uZW50LAorCQkJaW50IGR4LCBpbnQgZHksIFN0cmluZyBkZWZhdWx0YWxpZ25tZW50KSB7CisJCVN0cmluZyB0ZXh0ID0gZ2V0U3RyaW5nKGNvbXBvbmVudCwgInRleHQiLCBudWxsKTsKKwkJaW50IHR3ID0gMDsgaW50IHRoID0gMDsKKwkJaWYgKHRleHQgIT0gbnVsbCkgeworCQkJRm9udE1ldHJpY3MgZm0gPSBnZXRGb250TWV0cmljcyhnZXRGb250KCkpOworCQkJdHcgPSBmbS5zdHJpbmdXaWR0aCh0ZXh0KTsKKwkJCXRoID0gZm0uZ2V0QXNjZW50KCkgKyBmbS5nZXREZXNjZW50KCk7CisJCX0KKwkJSW1hZ2UgaWNvbiA9IGdldEljb24oY29tcG9uZW50LCAiaWNvbiIsIG51bGwpOworCQlpbnQgaXcgPSAwOyBpbnQgaWggPSAwOworCQlpZiAoaWNvbiAhPSBudWxsKSB7CisJCQlpdyA9IGljb24uZ2V0V2lkdGgodGhpcyk7CisJCQlpaCA9IGljb24uZ2V0SGVpZ2h0KHRoaXMpOworCQl9CisJCXJldHVybiBuZXcgRGltZW5zaW9uKHR3ICsgaXcgKyBkeCwgTWF0aC5tYXgodGgsIGloKSArIGR5KTsKKwl9CisJLy9qYXZhPgorCisJLyoqCisJICoKKwkgKi8KKwlwdWJsaWMgdm9pZCB1cGRhdGUoR3JhcGhpY3MgZykgeworCQlwYWludChnKTsKKwl9CisKKwkvKioKKwkgKn4KKwkgKi8KKwlwdWJsaWMgYm9vbGVhbiBpbWFnZVVwZGF0ZShJbWFnZSBpbWcsIGludCBpbmZvZmxhZ3MsIGludCB4LCBpbnQgeSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KSB7CisJCWlmIChpbmZvZmxhZ3MgPT0gSW1hZ2VPYnNlcnZlci5BTExCSVRTKSB7CisJCQl2YWxpZGF0ZShjb250ZW50KTsKKwkJCXJldHVybiBzdXBlci5pbWFnZVVwZGF0ZShpbWcsIGluZm9mbGFncywgeCwgeSwgd2lkdGgsIGhlaWdodCk7CisJCX0KKwkJcmV0dXJuIHRydWU7CisJfQorCisJLyoqCisJICoKKwkgKi8KKwlwdWJsaWMgdm9pZCBwYWludChHcmFwaGljcyBnKSB7IAorCQkvL2cuc2V0Q29sb3IoQ29sb3Iub3JhbmdlKTsKKwkJLy9nLmZpbGxSZWN0KDAsIDAsIGdldFNpemUoKS53aWR0aCwgZ2V0U2l6ZSgpLmhlaWdodCk7CisJCS8vbG9uZyB0aW1lID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7CisJCVJlY3RhbmdsZSBjbGlwID0gZy5nZXRDbGlwQm91bmRzKCk7CisJCS8vL2RnLnNldENsaXAoci54LCByLnksIHIud2lkdGgsIHIuaGVpZ2h0KTsKKwkJcGFpbnQoZywgY2xpcC54LCBjbGlwLnksIGNsaXAud2lkdGgsIGNsaXAuaGVpZ2h0LCBjb250ZW50LCBpc0VuYWJsZWQoKSk7CisJCS8vU3lzdGVtLm91dC5wcmludGxuKFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpIC0gdGltZSk7CisJCS8vL2cuc2V0Q2xpcCgwLCAwLCBnZXRTaXplKCkud2lkdGgsIGdldFNpemUoKS5oZWlnaHQpOworCQkvL2cuc2V0Q29sb3IoQ29sb3IucmVkKTsgZy5kcmF3UmVjdChjbGlwLngsIGNsaXAueSwgY2xpcC53aWR0aCAtIDEsIGNsaXAuaGVpZ2h0IC0gMSk7CisJfQorCisJLy88amF2YQorCS8qbWlkcAorCXByb3RlY3RlZCB2b2lkIHBhaW50KEdyYXBoaWNzIGcpIHsKKwkJcGFpbnQoZywgZy5nZXRDbGlwWCgpLCBnLmdldENsaXBZKCksCisJCQlnLmdldENsaXBXaWR0aCgpLCBnLmdldENsaXBIZWlnaHQoKSwgY29udGVudCwgdHJ1ZSk7CisJfQorCisJcHJvdGVjdGVkIHZvaWQgc2hvd05vdGlmeSgpIHsKKwkJc2V0UmVjdGFuZ2xlKGNvbnRlbnQsICJib3VuZHMiLCAwLCAwLCBnZXRXaWR0aCgpLCBnZXRIZWlnaHQoKSk7CisJCWRvTGF5b3V0KGNvbnRlbnQpOworCX0KKwltaWRwKi8KKworCS8qKgorCSAqCisJICovCisJcHJpdmF0ZSB2b2lkIHBhaW50KEdyYXBoaWNzIGcsCisJCQlpbnQgY2xpcHgsIGludCBjbGlweSwgaW50IGNsaXB3aWR0aCwgaW50IGNsaXBoZWlnaHQsCisJCQlPYmplY3QgY29tcG9uZW50LCBib29sZWFuIGVuYWJsZWQpIHsKKwkJaWYgKCFnZXRCb29sZWFuKGNvbXBvbmVudCwgInZpc2libGUiLCB0cnVlKSkgeyByZXR1cm47IH0KKwkJUmVjdGFuZ2xlIGJvdW5kcyA9IGdldFJlY3RhbmdsZShjb21wb25lbnQsICJib3VuZHMiKTsKKwkJaWYgKGJvdW5kcyA9PSBudWxsKSB7IHJldHVybjsgfQorCQlpZiAoYm91bmRzLndpZHRoIDwgMCkgeworCQkJYm91bmRzLndpZHRoID0gTWF0aC5hYnMoYm91bmRzLndpZHRoKTsKKwkJCWRvTGF5b3V0KGNvbXBvbmVudCk7CisJCX0KKwkJaWYgKChjbGlweCArIGNsaXB3aWR0aCA8IGJvdW5kcy54KSB8fAorCQkJCShjbGlweCA+IGJvdW5kcy54ICsgYm91bmRzLndpZHRoKSB8fAorCQkJCShjbGlweSArIGNsaXBoZWlnaHQgPCBib3VuZHMueSkgfHwKKwkJCQkoY2xpcHkgPiBib3VuZHMueSArIGJvdW5kcy5oZWlnaHQpKSB7CisJCQlyZXR1cm47CisJCX0KKwkJY2xpcHggLT0gYm91bmRzLng7IGNsaXB5IC09IGJvdW5kcy55OworCQlTdHJpbmcgY2xhc3NuYW1lID0gZ2V0Q2xhc3MoY29tcG9uZW50KTsKKwkJYm9vbGVhbiBwcmVzc2VkID0gKG1vdXNlcHJlc3NlZCA9PSBjb21wb25lbnQpOworCQlib29sZWFuIGluc2lkZSA9IChtb3VzZWluc2lkZSA9PSBjb21wb25lbnQpICYmCisJCQkoKG1vdXNlcHJlc3NlZCA9PSBudWxsKSB8fCBwcmVzc2VkKTsKKwkJYm9vbGVhbiBmb2N1cyA9IGZvY3VzaW5zaWRlICYmIChmb2N1c293bmVyID09IGNvbXBvbmVudCk7CisJCWVuYWJsZWQgPSBnZXRCb29sZWFuKGNvbXBvbmVudCwgImVuYWJsZWQiLCB0cnVlKTsgLy9lbmFibGVkICYmCisJCWcudHJhbnNsYXRlKGJvdW5kcy54LCBib3VuZHMueSk7IAorCQkvL2cuc2V0Q2xpcCgwLCAwLCBib3VuZHMud2lkdGgsIGJvdW5kcy5oZWlnaHQpOworCisJCWlmICgibGFiZWwiID09IGNsYXNzbmFtZSkgeworCQkJcGFpbnRDb250ZW50KGNvbXBvbmVudCwgZywgY2xpcHgsIGNsaXB5LCBjbGlwd2lkdGgsIGNsaXBoZWlnaHQsCisJCQkJMCwgMCwgYm91bmRzLndpZHRoLCBib3VuZHMuaGVpZ2h0LAorCQkJCWVuYWJsZWQgPyBjX3RleHQgOiBjX2Rpc2FibGUsICJsZWZ0IiwgdHJ1ZSk7CisJCX0KKwkJZWxzZSBpZiAoImJ1dHRvbiIgPT0gY2xhc3NuYW1lKSB7CisJCQlwYWludFJlY3QoZywgMCwgMCwgYm91bmRzLndpZHRoLCBib3VuZHMuaGVpZ2h0LAorCQkJCWVuYWJsZWQgPyBjX2JvcmRlciA6IGNfZGlzYWJsZSwKKwkJCQllbmFibGVkID8gKChpbnNpZGUgIT0gcHJlc3NlZCkgPyBjX2hvdmVyIDoKKwkJCQkJKHByZXNzZWQgPyBjX3ByZXNzIDogY19jdHJsKSkgOiBjX2JnLCB0cnVlLCB0cnVlLCB0cnVlLCB0cnVlKTsKKwkJCWlmIChmb2N1cykgeworCQkJCWcuc2V0Q29sb3IoY19mb2N1cyk7CisJCQkJZy5kcmF3UmVjdCgyLCAyLCBib3VuZHMud2lkdGggLSA1LCBib3VuZHMuaGVpZ2h0IC0gNSk7CisJCQl9CisJCQlwYWludENvbnRlbnQoY29tcG9uZW50LCBnLCBjbGlweCwgY2xpcHksIGNsaXB3aWR0aCwgY2xpcGhlaWdodCwKKwkJCQk2LCAzLCBib3VuZHMud2lkdGggLSAxMiwgYm91bmRzLmhlaWdodCAtIDYsCisJCQkJZW5hYmxlZCA/IGNfdGV4dCA6IGNfZGlzYWJsZSwgImNlbnRlciIsIHRydWUpOworCQl9CisJCWVsc2UgaWYgKCJjaGVja2JveCIgPT0gY2xhc3NuYW1lKSB7CisJCQlib29sZWFuIHNlbGVjdGVkID0gZ2V0Qm9vbGVhbihjb21wb25lbnQsICJzZWxlY3RlZCIsIGZhbHNlKTsKKwkJCVN0cmluZyBncm91cCA9IGdldFN0cmluZyhjb21wb25lbnQsICJncm91cCIsIG51bGwpOworCQkJQ29sb3IgYm9yZGVyID0gZW5hYmxlZCA/IGNfYm9yZGVyIDogY19kaXNhYmxlOworCQkJQ29sb3IgZm9yZWdyb3VuZCA9IGVuYWJsZWQgPyAoKGluc2lkZSAhPSBwcmVzc2VkKSA/IGNfaG92ZXIgOgorCQkJCShwcmVzc2VkID8gY19wcmVzcyA6IGNfY3RybCkpIDogY19iZzsKKwkJCWludCBkeSA9IChib3VuZHMuaGVpZ2h0IC0gYmxvY2sgKyAyKSAvIDI7CisJCQlpZiAoZ3JvdXAgPT0gbnVsbCkgeworCQkJCXBhaW50UmVjdChnLCAxLCBkeSArIDEsIGJsb2NrIC0gMiwgYmxvY2sgLSAyLAorCQkJCQlib3JkZXIsIGZvcmVncm91bmQsIHRydWUsIHRydWUsIHRydWUsIHRydWUpOworCQkJfSBlbHNlIHsKKwkJCQlnLnNldENvbG9yKChmb3JlZ3JvdW5kICE9IGNfY3RybCkgPyBmb3JlZ3JvdW5kIDogY19iZyk7CisJCQkJZy5maWxsT3ZhbCgxLCBkeSArIDEsIGJsb2NrIC0gMywgYmxvY2sgLSAzKTsgLy9qYXZhCisJCQkJZy5zZXRDb2xvcihib3JkZXIpOworCQkJCWcuZHJhd092YWwoMSwgZHkgKyAxLCBibG9jayAtIDMsIGJsb2NrIC0gMyk7IC8vamF2YQorCQkJfQorCQkJaWYgKGZvY3VzKSB7CisJCQkJZy5zZXRDb2xvcihjX2ZvY3VzKTsKKwkJCQlpZiAoZ3JvdXAgPT0gbnVsbCkgeworCQkJCQlnLmRyYXdSZWN0KDMsIGR5ICsgMywgYmxvY2sgLSA3LCBibG9jayAtIDcpOworCQkJCX0gZWxzZSB7CisJCQkJCWcuZHJhd092YWwoMywgZHkgKyAzLCBibG9jayAtIDcsIGJsb2NrIC0gNyk7IC8vamF2YQorCQkJCX0KKwkJCX0KKwkJCWlmKCghc2VsZWN0ZWQgJiYgaW5zaWRlICYmIHByZXNzZWQpIHx8CisJCQkJCShzZWxlY3RlZCAmJiAoIWluc2lkZSB8fCAhcHJlc3NlZCkpKSB7CisJCQkJZy5zZXRDb2xvcihlbmFibGVkID8gY190ZXh0IDogY19kaXNhYmxlKTsKKwkJCQlpZiAoZ3JvdXAgPT0gbnVsbCkgeworCQkJCQlnLmZpbGxSZWN0KDMsIGR5ICsgYmxvY2sgLSA5LCAyLCA2KTsKKwkJCQkJZy5kcmF3TGluZSgzLCBkeSArIGJsb2NrIC0gNCwgYmxvY2sgLSA0LCBkeSArIDMpOworCQkJCQlnLmRyYXdMaW5lKDQsIGR5ICsgYmxvY2sgLSA0LCBibG9jayAtIDQsIGR5ICsgNCk7CisJCQkJfSBlbHNlIHsKKwkJCQkJZy5maWxsT3ZhbCg1LCBkeSArIDUsIGJsb2NrIC0gMTAsIGJsb2NrIC0gMTApOyAvL2phdmEKKwkJCQkJZy5kcmF3T3ZhbCg0LCBkeSArIDQsIGJsb2NrIC0gOSwgYmxvY2sgLSA5KTsgLy9qYXZhCisJCQkJfQorCQkJfQorCQkJcGFpbnRDb250ZW50KGNvbXBvbmVudCwgZywgY2xpcHgsIGNsaXB5LCBjbGlwd2lkdGgsIGNsaXBoZWlnaHQsCisJCQkJYmxvY2sgKyAzLCAwLCBib3VuZHMud2lkdGggLSBibG9jayAtIDMsIGJvdW5kcy5oZWlnaHQsCisJCQkJZW5hYmxlZCA/IGNfdGV4dCA6IGNfZGlzYWJsZSwgImxlZnQiLCB0cnVlKTsKKwkJfQorCQllbHNlIGlmICgiY29tYm9ib3giID09IGNsYXNzbmFtZSkgeworCQkJaWYgKGdldEJvb2xlYW4oY29tcG9uZW50LCAiZWRpdGFibGUiLCB0cnVlKSkgeworCQkJCUltYWdlIGljb24gPSBnZXRJY29uKGNvbXBvbmVudCwgImljb24iLCBudWxsKTsKKwkJCQlpbnQgbGVmdCA9IChpY29uICE9IG51bGwpID8gaWNvbi5nZXRXaWR0aCh0aGlzKSA6IDA7CisJCQkJcGFpbnRGaWVsZChnLCBjbGlweCwgY2xpcHksIGNsaXB3aWR0aCwgY2xpcGhlaWdodCwgY29tcG9uZW50LAorCQkJCQlib3VuZHMud2lkdGggLSBibG9jaywgYm91bmRzLmhlaWdodCwKKwkJCQkJaW5zaWRlLCBwcmVzc2VkLCBmb2N1cywgZW5hYmxlZCwgZmFsc2UsIGxlZnQpOworCQkJCWlmIChpY29uICE9IG51bGwpIHsKKwkJCQkJZy5kcmF3SW1hZ2UoaWNvbiwgMiwgKGJvdW5kcy5oZWlnaHQgLSBpY29uLmdldEhlaWdodCh0aGlzKSkgLyAyLCB0aGlzKTsgLy9qYXZhCisJCQkJCS8vbWlkcCBnLmRyYXdJbWFnZShpY29uLCAyLCBib3VuZHMuaGVpZ2h0IC8gMiwgR3JhcGhpY3MuTEVGVCB8IEdyYXBoaWNzLlZDRU5URVIpOworCQkJCX0KKwkJCQlwYWludEFycm93KGcsIGJvdW5kcy53aWR0aCAtIGJsb2NrLCAwLCBibG9jaywgYm91bmRzLmhlaWdodCwKKwkJCQkJJ1MnLCBlbmFibGVkLCBpbnNpZGUsIHByZXNzZWQsICJkb3duIiwgdHJ1ZSwgZmFsc2UsIHRydWUsIHRydWUpOworCQkJfSBlbHNlIHsKKwkJCQlwYWludFJlY3QoZywgMCwgMCwgYm91bmRzLndpZHRoLCBib3VuZHMuaGVpZ2h0LAorCQkJCQllbmFibGVkID8gY19ib3JkZXIgOiBjX2Rpc2FibGUsCisJCQkJCWVuYWJsZWQgPyAoKGluc2lkZSAhPSBwcmVzc2VkKSA/IGNfaG92ZXIgOgorCQkJCQkJKHByZXNzZWQgPyBjX3ByZXNzIDogY19jdHJsKSkgOiBjX2JnLCB0cnVlLCB0cnVlLCB0cnVlLCB0cnVlKTsKKwkJCQlwYWludENvbnRlbnQoY29tcG9uZW50LCBnLCBjbGlweCwgY2xpcHksIGNsaXB3aWR0aCwgY2xpcGhlaWdodCwKKwkJCQkJMiwgMiwgYm91bmRzLndpZHRoIC0gYmxvY2sgLSA0LCBib3VuZHMuaGVpZ2h0IC0gNCwKKwkJCQkJZW5hYmxlZCA/IGNfdGV4dCA6IGNfZGlzYWJsZSwgImxlZnQiLCBmYWxzZSk7CisJCQkJcGFpbnRBcnJvdyhnLCBib3VuZHMud2lkdGggLSBibG9jaywgMCwgYmxvY2ssIGJvdW5kcy5oZWlnaHQsICdTJyk7CisJCQkJaWYgKGZvY3VzKSB7CisJCQkJCWcuc2V0Q29sb3IoY19mb2N1cyk7CisJCQkJCWcuZHJhd1JlY3QoMiwgMiwgYm91bmRzLndpZHRoIC0gYmxvY2sgLSA1LCBib3VuZHMuaGVpZ2h0IC0gNSk7CisJCQkJfQorCQkJfQorCQl9CisJCWVsc2UgaWYgKCJjb21ib2xpc3QiID09IGNsYXNzbmFtZSkgeworCQkJUmVjdGFuZ2xlIHZpZXcgPSBnZXRSZWN0YW5nbGUoY29tcG9uZW50LCAiOnZpZXciKTsKKwkJCVJlY3RhbmdsZSB2aWV3cG9ydCA9IGdldFJlY3RhbmdsZShjb21wb25lbnQsICI6cG9ydCIpOworCQkJZy5zZXRDb2xvcihjX2JvcmRlcik7CisJCQlnLmRyYXdSZWN0KHZpZXdwb3J0LngsIHZpZXdwb3J0LnksIHZpZXdwb3J0LndpZHRoIC0gMSwgdmlld3BvcnQuaGVpZ2h0IC0gMSk7CisJCQlpZiAocGFpbnRTY3JvbGxQYW5lKGcsIGNsaXB4LCBjbGlweSwgY2xpcHdpZHRoLCBjbGlwaGVpZ2h0LAorCQkJCQlib3VuZHMsIHZpZXcsIHZpZXdwb3J0LCBlbmFibGVkLCBpbnNpZGUsIHByZXNzZWQpKSB7CisJCQkJT2JqZWN0IHNlbGVjdGVkID0gZ2V0KGNvbXBvbmVudCwgImluc2lkZSIpOworCQkJCWludCBseSA9IGNsaXB5IC0gdmlld3BvcnQueSAtIDE7CisJCQkJaW50IHlmcm9tID0gdmlldy55ICsgTWF0aC5tYXgoMCwgbHkpOworCQkJCWludCB5dG8gPSB2aWV3LnkgKyBNYXRoLm1pbih2aWV3cG9ydC5oZWlnaHQgLSAyLCBseSArIGNsaXBoZWlnaHQpOworCQkJCWZvciAoT2JqZWN0IGNob2ljZSA9IGdldChnZXQoY29tcG9uZW50LCAiY29tYm9ib3giKSwgImNob2ljZSIpOworCQkJCQkJY2hvaWNlICE9IG51bGw7IGNob2ljZSA9IGdldChjaG9pY2UsICI6bmV4dCIpKSB7CisJCQkJCVJlY3RhbmdsZSByID0gZ2V0UmVjdGFuZ2xlKGNob2ljZSwgImJvdW5kcyIpOworCQkJCQlpZiAoeXRvIDw9IHIueSkgeyBicmVhazsgfQorCQkJCQlpZiAoeWZyb20gPj0gci55ICsgci5oZWlnaHQpIHsgY29udGludWU7IH0KKwkJCQkJYm9vbGVhbiBhcm1lZCA9IChzZWxlY3RlZCA9PSBjaG9pY2UpOworCQkJCQlwYWludFJlY3QoZywgci54LCByLnksIGJvdW5kcy53aWR0aCAtIDIsIHIuaGVpZ2h0LCBjX2JvcmRlciwKKwkJCQkJCWFybWVkID8gY19zZWxlY3QgOiBjX2JnLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSk7CisJCQkJCXBhaW50Q29udGVudChjaG9pY2UsIGcsIGNsaXB4LCB5ZnJvbSwgY2xpcHdpZHRoLCB5dG8gLSB5ZnJvbSwKKwkJCQkJCXIueCArIDQsIHIueSArIDIsIGJvdW5kcy53aWR0aCAtIDEwLCByLmhlaWdodCAtIDQsCisJCQkJCQlnZXRCb29sZWFuKGNob2ljZSwgImVuYWJsZWQiLCB0cnVlKSA/IGNfdGV4dCA6IGNfZGlzYWJsZSwgImxlZnQiLCBmYWxzZSk7CisJCQkJfQorCQkJCXJlc2V0U2Nyb2xsUGFuZShnLCBjbGlweCwgY2xpcHksIGNsaXB3aWR0aCwgY2xpcGhlaWdodCwgdmlldywgdmlld3BvcnQpOworCQkJfQorCQkJLy9wYWludFJlY3QoZywgMCwgMCwgYm91bmRzLndpZHRoLCBib3VuZHMuaGVpZ2h0LAorCQkJLy8Jc2Vjb25kYXJ5MSwgY19jdHJsLCB0cnVlLCB0cnVlLCB0cnVlLCB0cnVlKTsKKwkJfQorCQllbHNlIGlmICgoInRleHRmaWVsZCIgPT0gY2xhc3NuYW1lKSB8fCAoInBhc3N3b3JkZmllbGQiID09IGNsYXNzbmFtZSkpIHsKKwkJCXBhaW50RmllbGQoZywgY2xpcHgsIGNsaXB5LCBjbGlwd2lkdGgsIGNsaXBoZWlnaHQsIGNvbXBvbmVudCwKKwkJCQlib3VuZHMud2lkdGgsIGJvdW5kcy5oZWlnaHQsCisJCQkJaW5zaWRlLCBwcmVzc2VkLCBmb2N1cywgZW5hYmxlZCwgKCJwYXNzd29yZGZpZWxkIiA9PSBjbGFzc25hbWUpLCAwKTsKKwkJfQorCQllbHNlIGlmICgidGV4dGFyZWEiID09IGNsYXNzbmFtZSkgeworCQkJUmVjdGFuZ2xlIHZpZXcgPSBnZXRSZWN0YW5nbGUoY29tcG9uZW50LCAiOnZpZXciKTsKKwkJCVJlY3RhbmdsZSB2aWV3cG9ydCA9IGdldFJlY3RhbmdsZShjb21wb25lbnQsICI6cG9ydCIpOworCQkJYm9vbGVhbiBlZGl0YWJsZSA9IGdldEJvb2xlYW4oY29tcG9uZW50LCAiZWRpdGFibGUiLCB0cnVlKTsKKwkJCXBhaW50UmVjdChnLCB2aWV3cG9ydC54LCB2aWV3cG9ydC55LCB2aWV3cG9ydC53aWR0aCwgdmlld3BvcnQuaGVpZ2h0LAorCQkJCWVuYWJsZWQgPyBjX2JvcmRlciA6IGNfZGlzYWJsZSwgZWRpdGFibGUgPyBjX3RleHRiZyA6IGNfYmcsCisJCQkJdHJ1ZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSk7CisJCQlpZiAocGFpbnRTY3JvbGxQYW5lKGcsIGNsaXB4LCBjbGlweSwgY2xpcHdpZHRoLCBjbGlwaGVpZ2h0LAorCQkJCQlib3VuZHMsIHZpZXcsIHZpZXdwb3J0LCBlbmFibGVkLCBpbnNpZGUsIHByZXNzZWQpKSB7CisJCQkJU3RyaW5nIHRleHQgPSBnZXRTdHJpbmcoY29tcG9uZW50LCAidGV4dCIsICIiKTsKKwkJCQlpbnQgc3RhcnQgPSBmb2N1cyA/IGdldEludGVnZXIoY29tcG9uZW50LCAic3RhcnQiLCAwKSA6IDA7CisJCQkJaW50IGVuZCA9IGZvY3VzID8gZ2V0SW50ZWdlcihjb21wb25lbnQsICJlbmQiLCAwKSA6IDA7CisJCQkJaW50IGlzID0gTWF0aC5taW4oc3RhcnQsIGVuZCk7IGludCBpZSA9IE1hdGgubWF4KHN0YXJ0LCBlbmQpOworCQkJCWJvb2xlYW4gd3JhcCA9IGdldEJvb2xlYW4oY29tcG9uZW50LCAid3JhcCIsIGZhbHNlKTsKKwkJCQlGb250TWV0cmljcyBmbSA9IGcuZ2V0Rm9udE1ldHJpY3MoKTsgLy9qYXZhCisJCQkJaW50IGZvbnRhc2NlbnQgPSBmbS5nZXRBc2NlbnQoKTsgaW50IGZvbnRoZWlnaHQgPSBmbS5nZXRIZWlnaHQoKTsgLy9qYXZhCisJCQkJLy9taWRwIGludCBmb250aGVpZ2h0ID0gZm0uZ2V0SGVpZ2h0KCk7CisJCQkJaW50IGFzY2VudCA9IDE7CisJCQkJaW50IGx5ID0gY2xpcHkgLSB2aWV3cG9ydC55IC0gMTsKKwkJCQlpbnQgeWZyb20gPSB2aWV3LnkgKyBNYXRoLm1heCgwLCBseSk7CisJCQkJaW50IHl0byA9IHZpZXcueSArIE1hdGgubWluKHZpZXdwb3J0LmhlaWdodCAtIDIsIGx5ICsgY2xpcGhlaWdodCk7CisJCQkJLy9nLnNldENvbG9yKENvbG9yLnBpbmspOyBnLmZpbGxSZWN0KDAsIHlmcm9tIC0gMSwgNzUsIDIpOyBnLmZpbGxSZWN0KDAsIHl0byAtIDEsIDc1LCAyKTsKKworCQkJCWJvb2xlYW4gcHJldmxldHRlciA9IGZhbHNlOyBpbnQgbiA9IHRleHQubGVuZ3RoKCk7IGNoYXIgYyA9IDA7CisJCQkJZm9yIChpbnQgaSA9IDAsIGogPSAtMSwgayA9IDA7IGsgPD0gbjsgaysrKSB7IC8vIGogaXMgdGhlIGxhc3Qgc3BhY2UgaW5kZXggKGJlZm9yZSBrKQorCQkJCQlpZiAoeXRvIDw9IGFzY2VudCkgeyBicmVhazsgfQorCQkJCQlpZiAod3JhcCkgeworCQkJCQkJaWYgKCgoayA9PSBuKSB8fCAoKGMgPSB0ZXh0LmNoYXJBdChrKSkgPT0gJ1xuJykgfHwgKGMgPT0gJyAnKSkgJiYKKwkJCQkJCQkJKGogID4gaSkgJiYgKGZtLnN0cmluZ1dpZHRoKHRleHQuc3Vic3RyaW5nKGksIGspKSA+IHZpZXdwb3J0LndpZHRoIC0gNCkpIHsKKwkJCQkJCQlrLS07IC8vIGRyYXcgbGluZSB0byB0aGUgYmVnaW4gb2YgdGhlIGN1cnJlbnQgd29yZCAoKyBzcGFjZXMpIGlmIGl0IGlzIG91dCBvZiB3aWR0aAorCQkJCQkJfQorCQkJCQkJZWxzZSBpZiAoKGsgPT0gbikgfHwgKGMgPT0gJ1xuJykpIHsgLy8gZHJhdyBsaW5lIHRvIHRoZSB0ZXh0L2xpbmUgZW5kCisJCQkJCQkJaiA9IGs7IHByZXZsZXR0ZXIgPSBmYWxzZTsKKwkJCQkJCX0KKwkJCQkJCWVsc2UgeworCQkJCQkJCWlmICgoYyA9PSAnICcpICYmIChwcmV2bGV0dGVyIHx8IChqID4gaSkpKSB7IGogPSBrOyB9IC8vIGtlZXAgc3BhY2VzIHN0YXJ0aW5nIHRoZSBsaW5lCisJCQkJCQkJcHJldmxldHRlciA9IChjICE9ICcgJyk7CisJCQkJCQkJY29udGludWU7CisJCQkJCQl9CisJCQkJCX0KKwkJCQkJZWxzZSB7CisJCQkJCQlpZiAoKGsgPT0gbikgfHwgKChjID0gdGV4dC5jaGFyQXQoaykpID09ICdcbicpKSB7IGogPSBrOyB9IGVsc2UgeyBjb250aW51ZTsgfQorCQkJCQl9CisJCQkJCWlmICh5ZnJvbSA8IGFzY2VudCArIGZvbnRoZWlnaHQpIHsKKwkJCQkJCVN0cmluZyBsaW5lID0gKGogIT0gLTEpID8gdGV4dC5zdWJzdHJpbmcoaSwgaikgOiB0ZXh0LnN1YnN0cmluZyhpKTsgLy9qYXZhCisJCQkJCQlpZiAoZm9jdXMgJiYgKGlzICE9IGllKSAmJiAoaWUgPj0gaSkgJiYgKChqID09IC0xKSB8fCAoaXMgPD0gaikpKSB7CisJCQkJCQkJaW50IHhzID0gKGlzIDwgaSkgPyAtMSA6ICgoKGogIT0gLTEpICYmIChpcyA+IGopKSA/ICh2aWV3LndpZHRoIC0gMSkgOgorCQkJCQkJCQlmbS5zdHJpbmdXaWR0aCh0ZXh0LnN1YnN0cmluZyhpLCBpcykpKTsgLy9qYXZhCisJCQkJCQkJCS8vbWlkcCBmb250LnN1YnN0cmluZ1dpZHRoKHRleHQsIGksIGlzIC0gaSkpOworCQkJCQkJCWludCB4ZSA9ICgoaiAhPSAtMSkgJiYgKGllID4gaikpID8gKHZpZXcud2lkdGggLSAxKSA6CisJCQkJCQkJCWZtLnN0cmluZ1dpZHRoKHRleHQuc3Vic3RyaW5nKGksIGllKSk7IC8vamF2YQorCQkJCQkJCQkvL21pZHAgZm9udC5zdWJzdHJpbmdXaWR0aCh0ZXh0LCBpLCBpZSAtIGkpOworCQkJCQkJCWcuc2V0Q29sb3IoY19zZWxlY3QpOworCQkJCQkJCWcuZmlsbFJlY3QoMSArIHhzLCBhc2NlbnQsIHhlIC0geHMsIGZvbnRoZWlnaHQpOworCQkJCQkJfQorCQkJCQkJZy5zZXRDb2xvcihlbmFibGVkID8gY190ZXh0IDogY19kaXNhYmxlKTsKKwkJCQkJCWcuZHJhd1N0cmluZyhsaW5lLCAxLCBhc2NlbnQgKyBmb250YXNjZW50KTsgLy9qYXZhCisJCQkJCQkvL21pZHAgZy5kcmF3U3Vic3RyaW5nKHRleHQsIGksICgoaiAhPSAtMSkgPyBqIDogdGV4dC5sZW5ndGgoKSkgLSBpLCAxLCBhc2NlbnQsIEdyYXBoaWNzLkxFRlQgfCBHcmFwaGljcy5UT1ApOworCQkJCQkJaWYgKGZvY3VzICYmIChlbmQgPj0gaSkgJiYgKChqID09IC0xKSB8fCAoZW5kIDw9IGopKSkgeworCQkJCQkJCWludCBjYXJldCA9IGZtLnN0cmluZ1dpZHRoKHRleHQuc3Vic3RyaW5nKGksIGVuZCkpOyAvL2phdmEKKwkJCQkJCQkvL21pZHAgaW50IGNhcmV0ID0gZm9udC5zdWJzdHJpbmdXaWR0aCh0ZXh0LCBpLCBlbmQgLSBpKTsKKwkJCQkJCQlnLnNldENvbG9yKGNfZm9jdXMpOworCQkJCQkJCWcuZmlsbFJlY3QoY2FyZXQsIGFzY2VudCwgMSwgZm9udGhlaWdodCk7CisJCQkJCQl9CisJCQkJCX0KKwkJCQkJYXNjZW50ICs9IGZvbnRoZWlnaHQ7CisJCQkJCWkgPSBqICsgMTsKKwkJCQl9CisJCQkJcmVzZXRTY3JvbGxQYW5lKGcsIGNsaXB4LCBjbGlweSwgY2xpcHdpZHRoLCBjbGlwaGVpZ2h0LCB2aWV3LCB2aWV3cG9ydCk7CisJCQl9CisJCX0KKwkJZWxzZSBpZiAoInRhYmJlZHBhbmUiID09IGNsYXNzbmFtZSkgeworCQkJaW50IGkgPSAwOyBSZWN0YW5nbGUgbGFzdCA9IG51bGw7CisJCQlpbnQgc2VsZWN0ZWQgPSBnZXRJbnRlZ2VyKGNvbXBvbmVudCwgInNlbGVjdGVkIiwgMCk7CisJCQlTdHJpbmcgcGxhY2VtZW50ID0gZ2V0U3RyaW5nKGNvbXBvbmVudCwgInBsYWNlbWVudCIsICJ0b3AiKTsKKwkJCWZvciAoT2JqZWN0IGNvbXAgPSBnZXQoY29tcG9uZW50LCAidGFiIik7CisJCQkJCWNvbXAgIT0gbnVsbDsgY29tcCA9IGdldChjb21wLCAiOm5leHQiKSkgeworCQkJCVJlY3RhbmdsZSByID0gZ2V0UmVjdGFuZ2xlKGNvbXAsICJib3VuZHMiKTsKKwkJCQlib29sZWFuIGhvdmVyID0gIShzZWxlY3RlZCA9PSBpKSAmJiBpbnNpZGUgJiYKKwkJCQkJKG1vdXNlcHJlc3NlZCA9PSBudWxsKSAmJiAoaW5zaWRlcGFydCA9PSBjb21wKTsKKwkJCQlib29sZWFuIHNlbCA9IChzZWxlY3RlZCA9PSBpKTsKKwkJCQlib29sZWFuIHRhYmVuYWJsZWQgPSBlbmFibGVkICYmIGdldEJvb2xlYW4oY29tcCwgImVuYWJsZWQiLCB0cnVlKTsKKwkJCQlwYWludFJlY3QoZywgci54LCByLnksIHIud2lkdGgsIHIuaGVpZ2h0LAorCQkJCQllbmFibGVkID8gY19ib3JkZXIgOiBjX2Rpc2FibGUsCisJCQkJCXRhYmVuYWJsZWQgPyAoc2VsID8gY19iZyA6IChob3ZlciA/IGNfaG92ZXIgOiBjX2N0cmwpKSA6IGNfY3RybCwKKwkJCQkJKHBsYWNlbWVudCAhPSAiYm90dG9tIikgfHwgIXNlbCwgKHBsYWNlbWVudCAhPSAicmlnaHQiKSB8fCAhc2VsLAorCQkJCQkocGxhY2VtZW50ID09ICJib3R0b20iKSB8fCAoKHBsYWNlbWVudCA9PSAidG9wIikgJiYgIXNlbCksCisJCQkJCShwbGFjZW1lbnQgPT0gInJpZ2h0IikgfHwgKChwbGFjZW1lbnQgPT0gImxlZnQiKSAmJiAhc2VsKSk7CisJCQkJaWYgKGZvY3VzICYmIHNlbCkgeworCQkJCQlnLnNldENvbG9yKGNfZm9jdXMpOworCQkJCQlnLmRyYXdSZWN0KHIueCArIDIsIHIueSArIDIsIHIud2lkdGggLSA0LCByLmhlaWdodCAtIDQpOworCQkJCX0KKwkJCQlwYWludENvbnRlbnQoY29tcCwgZywgY2xpcHgsIGNsaXB5LCBjbGlwd2lkdGgsIGNsaXBoZWlnaHQsCisJCQkJCXIueCArIDQsIHIueSArIDIsIHIud2lkdGggLSA4LCByLmhlaWdodCAtIDQsCisJCQkJCXRhYmVuYWJsZWQgPyBjX3RleHQgOiBjX2Rpc2FibGUsICJsZWZ0IiwgdHJ1ZSk7CisJCQkJaSsrOyBsYXN0ID0gcjsKKwkJCX0KKwkJCWlmIChsYXN0ICE9IG51bGwpIHsKKwkJCQlib29sZWFuIGhvcml6b250YWwgPSAoKHBsYWNlbWVudCA9PSAidG9wIikgfHwgKHBsYWNlbWVudCA9PSAiYm90dG9tIikpOworCQkJCXBhaW50UmVjdChnLCBob3Jpem9udGFsID8gKGxhc3QueCArIGxhc3Qud2lkdGgpIDogbGFzdC54LAorCQkJCQlob3Jpem9udGFsID8gbGFzdC55IDogKGxhc3QueSArIGxhc3QuaGVpZ2h0KSwKKwkJCQkJaG9yaXpvbnRhbCA/IChib3VuZHMud2lkdGggLSBsYXN0LnggLSBsYXN0LndpZHRoKSA6IGxhc3Qud2lkdGgsCisJCQkJCWhvcml6b250YWwgPyBsYXN0LmhlaWdodCA6IChib3VuZHMuaGVpZ2h0IC0gbGFzdC55IC0gbGFzdC5oZWlnaHQpLAorCQkJCQllbmFibGVkID8gY19ib3JkZXIgOiBjX2Rpc2FibGUsIGNfYmcsCisJCQkJCShwbGFjZW1lbnQgIT0gInRvcCIpLCAocGxhY2VtZW50ICE9ICJsZWZ0IiksCisJCQkJCShwbGFjZW1lbnQgPT0gInRvcCIpLCAocGxhY2VtZW50ID09ICJsZWZ0IikpOworCQkJCXBhaW50UmVjdChnLCAocGxhY2VtZW50ID09ICJsZWZ0IikgPyBsYXN0LndpZHRoIDogMCwKKwkJCQkJKHBsYWNlbWVudCA9PSAidG9wIikgPyBsYXN0LmhlaWdodCA6IDAsCisJCQkJCWhvcml6b250YWwgPyBib3VuZHMud2lkdGggOiAoYm91bmRzLndpZHRoIC0gbGFzdC53aWR0aCksCisJCQkJCWhvcml6b250YWwgPyAoYm91bmRzLmhlaWdodCAtIGxhc3QuaGVpZ2h0KSA6IGJvdW5kcy5oZWlnaHQsCisJCQkJCWVuYWJsZWQgPyBjX2JvcmRlciA6IGNfZGlzYWJsZSwgY19iZywKKwkJCQkJKHBsYWNlbWVudCAhPSAidG9wIiksIChwbGFjZW1lbnQgIT0gImxlZnQiKSwKKwkJCQkJKHBsYWNlbWVudCAhPSAiYm90dG9tIiksIChwbGFjZW1lbnQgIT0gInJpZ2h0IikpOwkJCQkJCisJCQl9CisJCQlPYmplY3QgdGFiY29udGVudCA9IGdldEl0ZW1JbXBsKGNvbXBvbmVudCwgImNvbXBvbmVudCIsIHNlbGVjdGVkKTsKKwkJCWlmICh0YWJjb250ZW50ICE9IG51bGwpIHsKKwkJCQlwYWludChnLCBjbGlweCwgY2xpcHksIGNsaXB3aWR0aCwgY2xpcGhlaWdodCwgdGFiY29udGVudCwgZW5hYmxlZCk7CisJCQl9CisJCX0KKwkJZWxzZSBpZiAoKCJwYW5lbCIgPT0gY2xhc3NuYW1lKSB8fCAoImRpYWxvZyIgPT0gY2xhc3NuYW1lKSkgeworCQkJaWYgKCJkaWFsb2ciID09IGNsYXNzbmFtZSkgeworCQkJCWludCB0aXRsZWhlaWdodCA9IGdldEludGVnZXIoY29tcG9uZW50LCAidGl0bGVoZWlnaHQiLCAwKTsKKwkJCQlwYWludFJlY3QoZywgMCwgMCwgYm91bmRzLndpZHRoLCAzICsgdGl0bGVoZWlnaHQsCisJCQkJCWNfYm9yZGVyLCBjX2N0cmwsIHRydWUsIHRydWUsIGZhbHNlLCB0cnVlKTsKKwkJCQlwYWludFJlY3QoZywgMCwgMyArIHRpdGxlaGVpZ2h0LCBib3VuZHMud2lkdGgsIGJvdW5kcy5oZWlnaHQgLSAzIC0gdGl0bGVoZWlnaHQsCisJCQkJCWNfYm9yZGVyLCBjX3ByZXNzLCBmYWxzZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSk7CisJCQkJcGFpbnRDb250ZW50KGNvbXBvbmVudCwgZywgY2xpcHgsIGNsaXB5LCBjbGlwd2lkdGgsIGNsaXBoZWlnaHQsCisJCQkJCTMsIDIsIGJvdW5kcy53aWR0aCAtIDYsIHRpdGxlaGVpZ2h0LCBjX3RleHQsICJsZWZ0IiwgZmFsc2UpOworCQkJCXBhaW50UmVjdChnLCAzLCAzICsgdGl0bGVoZWlnaHQsIGJvdW5kcy53aWR0aCAtIDYsIGJvdW5kcy5oZWlnaHQgLSA2IC0gdGl0bGVoZWlnaHQsCisJCQkJCWNfYm9yZGVyLCBjX2JnLCB0cnVlLCB0cnVlLCB0cnVlLCB0cnVlKTsKKwkJCX0gZWxzZSB7CisJCQkJcGFpbnRSZWN0KGcsIDAsIDAsIGJvdW5kcy53aWR0aCwgYm91bmRzLmhlaWdodCwKKwkJCQkJY19ib3JkZXIsIGNfYmcsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlKTsKKwkJCX0KKwkJCWZvciAoT2JqZWN0IGNvbXAgPSBnZXQoY29tcG9uZW50LCAiY29tcG9uZW50Iik7CisJCQkJCWNvbXAgIT0gbnVsbDsgY29tcCA9IGdldChjb21wLCAiOm5leHQiKSkgeworCQkJCXBhaW50KGcsIGNsaXB4LCBjbGlweSwgY2xpcHdpZHRoLCBjbGlwaGVpZ2h0LCBjb21wLCBlbmFibGVkKTsKKwkJCX0KKwkJfQorCQllbHNlIGlmICgiZGVza3RvcCIgPT0gY2xhc3NuYW1lKSB7CisJCQlwYWludFJldmVyc2UoZywgY2xpcHgsIGNsaXB5LCBjbGlwd2lkdGgsIGNsaXBoZWlnaHQsCisJCQkJZ2V0KGNvbXBvbmVudCwgImNvbXBvbmVudCIpLCBlbmFibGVkKTsKKwkJCS8vZy5zZXRDb2xvcihDb2xvci5yZWQpOyBpZiAoY2xpcCAhPSBudWxsKSBnLmRyYXdSZWN0KGNsaXB4LCBjbGlweSwgY2xpcHdpZHRoLCBjbGlwaGVpZ2h0KTsKKwkJCWlmICh0b29sdGlwb3duZXIgIT0gbnVsbCkgeworCQkJCVJlY3RhbmdsZSByID0gZ2V0UmVjdGFuZ2xlKHRvb2x0aXBvd25lciwgInRvb2x0aXBib3VuZHMiKTsKKwkJCQlwYWludFJlY3QoZywgci54LCByLnksIHIud2lkdGgsIHIuaGVpZ2h0LAorCQkJCQljX2JvcmRlciwgY19iZywgdHJ1ZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSk7CisJCQkJU3RyaW5nIHRleHQgPSBnZXRTdHJpbmcodG9vbHRpcG93bmVyLCAidG9vbHRpcCIsIG51bGwpOworCQkJCWcuc2V0Q29sb3IoY190ZXh0KTsKKwkJCQlnLmRyYXdTdHJpbmcodGV4dCwgci54ICsgMiwgci55ICsgZy5nZXRGb250TWV0cmljcygpLmdldEFzY2VudCgpICsgMik7IC8vamF2YQorCQkJCS8vbWlkcCBnLmRyYXdTdHJpbmcodGV4dCwgci54ICsgMiwgci55ICsgKHIuaGVpZ2h0IC0gZm9udC5nZXRIZWlnaHQoKSkgLyAyLCBHcmFwaGljcy5MRUZUIHwgR3JhcGhpY3MuVE9QKTsKKwkJCX0JCQkKKwkJfQorCQllbHNlIGlmICgic3BpbmJveCIgPT0gY2xhc3NuYW1lKSB7CisJCQlwYWludEZpZWxkKGcsIGNsaXB4LCBjbGlweSwgY2xpcHdpZHRoLCBjbGlwaGVpZ2h0LCBjb21wb25lbnQsCisJCQkJYm91bmRzLndpZHRoIC0gYmxvY2ssIGJvdW5kcy5oZWlnaHQsCisJCQkJaW5zaWRlLCBwcmVzc2VkLCBmb2N1cywgZW5hYmxlZCwgZmFsc2UsIDApOworCQkJcGFpbnRBcnJvdyhnLCBib3VuZHMud2lkdGggLSBibG9jaywgMCwgYmxvY2ssIGJvdW5kcy5oZWlnaHQgLyAyLAorCQkJCQknTicsIGVuYWJsZWQsIGluc2lkZSwgcHJlc3NlZCwgInVwIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCB0cnVlKTsKKwkJCXBhaW50QXJyb3coZywgYm91bmRzLndpZHRoIC0gYmxvY2ssIGJvdW5kcy5oZWlnaHQgLyAyLAorCQkJCWJsb2NrLCBib3VuZHMuaGVpZ2h0IC0gKGJvdW5kcy5oZWlnaHQgLyAyKSwKKwkJCQknUycsIGVuYWJsZWQsIGluc2lkZSwgcHJlc3NlZCwgImRvd24iLCB0cnVlLCBmYWxzZSwgdHJ1ZSwgdHJ1ZSk7CisJCX0KKwkJZWxzZSBpZiAoInByb2dyZXNzYmFyIiA9PSBjbGFzc25hbWUpIHsKKwkJCWludCBtaW5pbXVtID0gZ2V0SW50ZWdlcihjb21wb25lbnQsICJtaW5pbXVtIiwgMCk7CisJCQlpbnQgbWF4aW11bSA9IGdldEludGVnZXIoY29tcG9uZW50LCAibWF4aW11bSIsIDEwMCk7CisJCQlpbnQgdmFsdWUgPSBnZXRJbnRlZ2VyKGNvbXBvbmVudCwgInZhbHVlIiwgMCk7CisJCQlib29sZWFuIGhvcml6b250YWwgPSAoInZlcnRpY2FsIiAhPSBnZXQoY29tcG9uZW50LCAib3JpZW50YXRpb24iKSk7CisJCQlpbnQgbGVuZ3RoID0gKHZhbHVlIC0gbWluaW11bSkgKgorCQkJCSgoaG9yaXpvbnRhbCA/IGJvdW5kcy53aWR0aCA6IGJvdW5kcy5oZWlnaHQpIC0gMSkgLyAobWF4aW11bSAtIG1pbmltdW0pOworCQkJcGFpbnRSZWN0KGcsIDAsIDAsIGhvcml6b250YWwgPyBsZW5ndGggOiBib3VuZHMud2lkdGgsCisJCQkJaG9yaXpvbnRhbCA/IGJvdW5kcy5oZWlnaHQgOiBsZW5ndGgsIGVuYWJsZWQgPyBjX2JvcmRlciA6IGNfZGlzYWJsZSwKKwkJCQljX3NlbGVjdCwgdHJ1ZSwgdHJ1ZSwgaG9yaXpvbnRhbCwgIWhvcml6b250YWwpOworCQkJcGFpbnRSZWN0KGcsIGhvcml6b250YWwgPyBsZW5ndGggOiAwLCBob3Jpem9udGFsID8gMCA6IGxlbmd0aCwKKwkJCQlob3Jpem9udGFsID8gKGJvdW5kcy53aWR0aCAtIGxlbmd0aCkgOiBib3VuZHMud2lkdGgJLAorCQkJCWhvcml6b250YWwgPyBib3VuZHMuaGVpZ2h0IDogKGJvdW5kcy5oZWlnaHQgLSBsZW5ndGgpLAorCQkJCWVuYWJsZWQgPyBjX2JvcmRlciA6IGNfZGlzYWJsZSwgY19iZywgdHJ1ZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSk7CisJCX0KKwkJZWxzZSBpZiAoInNsaWRlciIgPT0gY2xhc3NuYW1lKSB7CisJCQlpbnQgbWluaW11bSA9IGdldEludGVnZXIoY29tcG9uZW50LCAibWluaW11bSIsIDApOworCQkJaW50IG1heGltdW0gPSBnZXRJbnRlZ2VyKGNvbXBvbmVudCwgIm1heGltdW0iLCAxMDApOworCQkJaW50IHZhbHVlID0gZ2V0SW50ZWdlcihjb21wb25lbnQsICJ2YWx1ZSIsIDApOworCQkJYm9vbGVhbiBob3Jpem9udGFsID0gKCJ2ZXJ0aWNhbCIgIT0gZ2V0KGNvbXBvbmVudCwgIm9yaWVudGF0aW9uIikpOworCQkJaW50IGxlbmd0aCA9ICh2YWx1ZSAtIG1pbmltdW0pICoKKwkJCQkoKGhvcml6b250YWwgPyBib3VuZHMud2lkdGggOiBib3VuZHMuaGVpZ2h0KSAtIGJsb2NrKSAvCisJCQkJKG1heGltdW0gLSBtaW5pbXVtKTsKKwkJCXBhaW50UmVjdChnLCBob3Jpem9udGFsID8gMCA6IDMsIGhvcml6b250YWwgPyAzIDogMCwKKwkJCQlob3Jpem9udGFsID8gbGVuZ3RoIDogKGJvdW5kcy53aWR0aCAtIDYpLAorCQkJCWhvcml6b250YWwgPyAoYm91bmRzLmhlaWdodCAtIDYpIDogbGVuZ3RoLAorCQkJCWVuYWJsZWQgPyBjX2JvcmRlciA6IGNfZGlzYWJsZSwKKwkJCQljX2JnLCB0cnVlLCB0cnVlLCBob3Jpem9udGFsLCAhaG9yaXpvbnRhbCk7CisJCQlwYWludFJlY3QoZywgaG9yaXpvbnRhbCA/IGxlbmd0aCA6IDAsIGhvcml6b250YWwgPyAwIDogbGVuZ3RoLAorCQkJCWhvcml6b250YWwgPyBibG9jayA6IGJvdW5kcy53aWR0aCwgaG9yaXpvbnRhbCA/IGJvdW5kcy5oZWlnaHQgOiBibG9jaywKKwkJCQllbmFibGVkID8gY19ib3JkZXIgOiBjX2Rpc2FibGUsCisJCQkJZW5hYmxlZCA/IGNfY3RybCA6IGNfYmcsIHRydWUsIHRydWUsIHRydWUsIHRydWUpOworCQkJaWYgKGZvY3VzKSB7CisJCQkJZy5zZXRDb2xvcihjX2ZvY3VzKTsKKwkJCQlnLmRyYXdSZWN0KGhvcml6b250YWwgPyAobGVuZ3RoICsgMikgOiAyLCBob3Jpem9udGFsID8gMiA6IChsZW5ndGggKyAyKSwKKwkJCQkJKGhvcml6b250YWwgPyBibG9jayA6IGJvdW5kcy53aWR0aCkgLSA1LAorCQkJCQkoaG9yaXpvbnRhbCA/IGJvdW5kcy5oZWlnaHQgOiBibG9jaykgLSA1KTsKKwkJCQkvL2cuZHJhd1JlY3QobGVuZ3RoICsgMSwgMSwgYmxvY2sgLSAzLCBib3VuZHMuaGVpZ2h0IC0gMyk7CisJCQl9CisJCQlwYWludFJlY3QoZywgaG9yaXpvbnRhbCA/IChibG9jayArIGxlbmd0aCkgOiAzLAorCQkJCWhvcml6b250YWwgPyAzIDogKGJsb2NrICsgbGVuZ3RoKSwKKwkJCQlib3VuZHMud2lkdGggLSAoaG9yaXpvbnRhbCA/IChibG9jayArIGxlbmd0aCkgOiA2KSwKKwkJCQlib3VuZHMuaGVpZ2h0IC0gKGhvcml6b250YWwgPyA2IDogKGJsb2NrICsgbGVuZ3RoKSksCisJCQkJZW5hYmxlZCA/IGNfYm9yZGVyIDogY19kaXNhYmxlLAorCQkJCWNfYmcsIGhvcml6b250YWwsICFob3Jpem9udGFsLCB0cnVlLCB0cnVlKTsKKwkJfQorCQllbHNlIGlmICgic3BsaXRwYW5lIiA9PSBjbGFzc25hbWUpIHsKKwkJCWJvb2xlYW4gaG9yaXpvbnRhbCA9ICgidmVydGljYWwiICE9IGdldChjb21wb25lbnQsICJvcmllbnRhdGlvbiIpKTsKKwkJCWludCBkaXZpZGVyID0gZ2V0SW50ZWdlcihjb21wb25lbnQsICJkaXZpZGVyIiwgLTEpOworCQkJcGFpbnRSZWN0KGcsIGhvcml6b250YWwgPyBkaXZpZGVyIDogMCwgaG9yaXpvbnRhbCA/IDAgOiBkaXZpZGVyLAorCQkJCWhvcml6b250YWwgPyA1IDogYm91bmRzLndpZHRoLCBob3Jpem9udGFsID8gYm91bmRzLmhlaWdodCA6IDUsCisJCQkJY19ib3JkZXIsIGNfYmcsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlKTsKKwkJCWcuc2V0Q29sb3IoZW5hYmxlZCA/IChmb2N1cyA/IGNfZm9jdXMgOiBjX2JvcmRlcikgOiBjX2Rpc2FibGUpOworCQkJaW50IHh5ID0gaG9yaXpvbnRhbCA/IGJvdW5kcy5oZWlnaHQgOiBib3VuZHMud2lkdGg7CisJCQlpbnQgeHkxID0gTWF0aC5tYXgoMCwgeHkgLyAyIC0gMTIpOworCQkJaW50IHh5MiA9IE1hdGgubWluKHh5IC8gMiArIDEyLCB4eSAtIDEpOworCQkJZm9yIChpbnQgaSA9IGRpdmlkZXIgKyAxOyBpIDwgZGl2aWRlciArIDQ7IGkgKz0gMikgeworCQkJCWlmIChob3Jpem9udGFsKSB7IGcuZHJhd0xpbmUoaSwgeHkxLCBpLCB4eTIpOyB9CisJCQkJCWVsc2UgeyBnLmRyYXdMaW5lKHh5MSwgaSwgeHkyLCBpKTsgfQorCQkJfQorCQkJT2JqZWN0IGNvbXAxID0gZ2V0KGNvbXBvbmVudCwgImNvbXBvbmVudCIpOworCQkJaWYgKGNvbXAxICE9IG51bGwpIHsKKwkJCQlwYWludChnLCBjbGlweCwgY2xpcHksIGNsaXB3aWR0aCwgY2xpcGhlaWdodCwgY29tcDEsIGVuYWJsZWQpOworCQkJCU9iamVjdCBjb21wMiA9IGdldChjb21wMSwgIjpuZXh0Iik7CisJCQkJaWYgKGNvbXAyICE9IG51bGwpIHsKKwkJCQkJcGFpbnQoZywgY2xpcHgsIGNsaXB5LCBjbGlwd2lkdGgsIGNsaXBoZWlnaHQsIGNvbXAyLCBlbmFibGVkKTsKKwkJCQl9CisJCQl9CisJCX0KKwkJZWxzZSBpZiAoKCJsaXN0IiA9PSBjbGFzc25hbWUpIHx8CisJCQkJKCJ0YWJsZSIgPT0gY2xhc3NuYW1lKSB8fCAoInRyZWUiID09IGNsYXNzbmFtZSkpIHsKKwkJCVJlY3RhbmdsZSB2aWV3ID0gZ2V0UmVjdGFuZ2xlKGNvbXBvbmVudCwgIjp2aWV3Iik7CisJCQlSZWN0YW5nbGUgdmlld3BvcnQgPSBnZXRSZWN0YW5nbGUoY29tcG9uZW50LCAiOnBvcnQiKTsKKwkJCWludFtdIGNvbHVtbndpZHRocyA9IG51bGw7CisJCQlpbnQgbHggPSBjbGlweCAtIHZpZXdwb3J0LnggLSAxOworCQkJaW50IHhmcm9tID0gdmlldy54ICsgTWF0aC5tYXgoMCwgbHgpOworCQkJaW50IHh0byA9IHZpZXcueCArIE1hdGgubWluKHZpZXdwb3J0LndpZHRoIC0gMiwgbHggKyBjbGlwd2lkdGgpOworCQkJaWYgKCJ0YWJsZSIgPT0gY2xhc3NuYW1lKSB7CisJCQkJY29sdW1ud2lkdGhzID0gbmV3IGludFtnZXRJdGVtQ291bnRJbXBsKGNvbXBvbmVudCwgImNvbHVtbiIpXTsKKwkJCQlpbnQgaSA9IDA7IGludCB4ID0gMDsgYm9vbGVhbiBkcmF3aGVhZGVyID0gKGNsaXB5IDwgdmlld3BvcnQueSk7CisJCQkJaWYgKGRyYXdoZWFkZXIpIHsgZy5zZXRDbGlwKHZpZXdwb3J0LngsIDAsIHZpZXdwb3J0LndpZHRoLCB2aWV3cG9ydC55KTsgfQorCQkJCWZvciAoT2JqZWN0IGNvbHVtbiA9IGdldChjb21wb25lbnQsICJjb2x1bW4iKTsKKwkJCQkJCWNvbHVtbiAhPSBudWxsOyBjb2x1bW4gPSBnZXQoY29sdW1uLCAiOm5leHQiKSkgeworCQkJCQlib29sZWFuIGxhc3Rjb2x1bW4gPSAoaSA9PSBjb2x1bW53aWR0aHMubGVuZ3RoIC0gMSk7CisJCQkJCWludCB3aWR0aCA9IGdldEludGVnZXIoY29sdW1uLCAid2lkdGgiLCA4MCk7CisJCQkJCWlmIChsYXN0Y29sdW1uKSB7IHdpZHRoID0gTWF0aC5tYXgod2lkdGgsIHZpZXdwb3J0LndpZHRoIC0geCk7IH0KKwkJCQkJY29sdW1ud2lkdGhzW2ldID0gd2lkdGg7CisJCQkJCWlmIChkcmF3aGVhZGVyICYmICh4ZnJvbSA8IHggKyB3aWR0aCkgJiYgKHh0byA+IHgpKSB7CisJCQkJCQlwYWludFJlY3QoZywgeCAtIHZpZXcueCwgMCwgd2lkdGgsIHZpZXdwb3J0LnksCisJCQkJCQkJZW5hYmxlZCA/IGNfYm9yZGVyIDogY19kaXNhYmxlLCBlbmFibGVkID8gY19jdHJsIDogY19iZywKKwkJCQkJCQl0cnVlLCB0cnVlLCBmYWxzZSwgbGFzdGNvbHVtbik7CisJCQkJCQlwYWludENvbnRlbnQoY29sdW1uLCBnLCBjbGlweCwgY2xpcHksIGNsaXB3aWR0aCwgY2xpcGhlaWdodCwKKwkJCQkJCQl4ICsgMiAtIHZpZXcueCwgMSwgd2lkdGggLSAyLAorCQkJCQkJCXZpZXdwb3J0LnkgLSAyLCBlbmFibGVkID8gY190ZXh0IDogY19kaXNhYmxlLCAibGVmdCIsIGZhbHNlKTsKKwkJCQkJfQorCQkJCQlpKys7IHggKz0gd2lkdGg7CisJCQkJfQorCQkJCWlmIChkcmF3aGVhZGVyKSB7IGcuc2V0Q2xpcChjbGlweCwgY2xpcHksIGNsaXB3aWR0aCwgY2xpcGhlaWdodCk7IH0KKwkJCX0KKwkJCXBhaW50UmVjdChnLCB2aWV3cG9ydC54LCB2aWV3cG9ydC55LCB2aWV3cG9ydC53aWR0aCwgdmlld3BvcnQuaGVpZ2h0LAorCQkJCWVuYWJsZWQgPyBjX2JvcmRlciA6IGNfZGlzYWJsZSwgY190ZXh0YmcsIHRydWUsIHRydWUsIHRydWUsIHRydWUpOworCQkJaWYgKHBhaW50U2Nyb2xsUGFuZShnLCBjbGlweCwgY2xpcHksIGNsaXB3aWR0aCwgY2xpcGhlaWdodCwgYm91bmRzLAorCQkJCQl2aWV3LCB2aWV3cG9ydCwgZW5hYmxlZCwgaW5zaWRlLCBwcmVzc2VkKSkgeworCQkJCU9iamVjdCBsZWFkID0gZ2V0KGNvbXBvbmVudCwgImxlYWQiKTsKKwkJCQlpbnQgbHkgPSBjbGlweSAtIHZpZXdwb3J0LnkgLSAxOworCQkJCWludCB5ZnJvbSA9IHZpZXcueSArIE1hdGgubWF4KDAsIGx5KTsKKwkJCQlpbnQgeXRvID0gdmlldy55ICsgTWF0aC5taW4odmlld3BvcnQuaGVpZ2h0IC0gMiwgbHkgKyBjbGlwaGVpZ2h0KTsKKwkJCQlmb3IgKE9iamVjdCBpdGVtID0gZ2V0KGNvbXBvbmVudCwgKCJsaXN0IiA9PSBjbGFzc25hbWUpID8gIml0ZW0iIDoKKwkJCQkJCSgoInRhYmxlIiA9PSBjbGFzc25hbWUpID8gInJvdyIgOiAibm9kZSIpKTsgaXRlbSAhPSBudWxsOykgeworCQkJCQlSZWN0YW5nbGUgciA9IGdldFJlY3RhbmdsZShpdGVtLCAiYm91bmRzIik7CisJCQkJCWlmIChsZWFkID09IG51bGwpIHsKKwkJCQkJCXNldChjb21wb25lbnQsICJsZWFkIiwgbGVhZCA9IGl0ZW0pOyAvLyBkcmF3IGZpcnN0IGl0ZW0gZm9jdXNlZCB3aGVuIGxlYWQgaXMgbnVsbAorCQkJCQl9CisJCQkJCWlmICh5dG8gPD0gci55KSB7IGJyZWFrOyB9IC8vIHRoZSBjbGlwIGJvdW5kcyBhcmUgYWJvdmUKKworCQkJCQlPYmplY3QgbmV4dCA9ICgidHJlZSIgPT0gY2xhc3NuYW1lKSA/IGdldChpdGVtLCAibm9kZSIpIDogbnVsbDsKKwkJCQkJYm9vbGVhbiBleHBhbmRlZCA9IChuZXh0ICE9IG51bGwpICYmCisJCQkJCQkJZ2V0Qm9vbGVhbihpdGVtLCAiZXhwYW5kZWQiLCB0cnVlKTsKKwkJCQkJaWYgKHlmcm9tIDwgci55ICsgci5oZWlnaHQpIHsgLy8gdGhlIGNsaXAgcmVjdGFuZ2xlIGlzIG5vdCBiZWxsb3cgdGhlIGN1cnJlbnQgaXRlbQorCQkJCQkJYm9vbGVhbiBzZWxlY3RlZCA9IGdldEJvb2xlYW4oaXRlbSwgInNlbGVjdGVkIiwgZmFsc2UpOworCQkJCQkJcGFpbnRSZWN0KGcsIDAsIHIueSwgdmlldy53aWR0aCwgci5oZWlnaHQsCisJCQkJCQkJY19iZywgc2VsZWN0ZWQgPyBjX3NlbGVjdCA6IGNfdGV4dGJnLCBmYWxzZSwgZmFsc2UsIHRydWUsIGZhbHNlKTsKKwkJCQkJCWlmIChmb2N1cyAmJiAobGVhZCA9PSBpdGVtKSkgeworCQkJCQkJCWcuc2V0Q29sb3IoY19mb2N1cyk7CisJCQkJCQkJZy5kcmF3UmVjdCgwLCByLnksIHZpZXcud2lkdGggLSAxLCByLmhlaWdodCAtIDIpOworCQkJCQkJfQorCQkJCQkJaWYgKCJ0YWJsZSIgPT0gY2xhc3NuYW1lKSB7CisJCQkJCQkJaW50IHggPSAwOyBpbnQgaSA9IDA7CisJCQkJCQkJZm9yIChPYmplY3QgY2VsbCA9IGdldChpdGVtLCAiY2VsbCIpOworCQkJCQkJCQkJY2VsbCAhPSBudWxsOyBjZWxsID0gZ2V0KGNlbGwsICI6bmV4dCIpKSB7CisJCQkJCQkJCWlmICh4dG8gPD0geCkgeyBicmVhazsgfQorCQkJCQkJCQlpbnQgaXdpZHRoID0gKGkgPCBjb2x1bW53aWR0aHMubGVuZ3RoKSA/IGNvbHVtbndpZHRoc1tpXSA6IDgwOworCQkJCQkJCQlpZiAoeGZyb20gPCB4ICsgaXdpZHRoKSB7CisJCQkJCQkJCQlib29sZWFuIGNlbGxlbmFibGVkID0gZW5hYmxlZCAmJiBnZXRCb29sZWFuKGNlbGwsICJlbmFibGVkIiwgdHJ1ZSk7CisJCQkJCQkJCQlwYWludENvbnRlbnQoY2VsbCwgZywgeGZyb20sIHlmcm9tLCB4dG8gLSB4ZnJvbSwgeXRvIC0geWZyb20sCisJCQkJCQkJCQkJci54ICsgeCArIDEsIHIueSArIDEsIGl3aWR0aCAtIDIsIHIuaGVpZ2h0IC0gMywKKwkJCQkJCQkJCQljZWxsZW5hYmxlZCA/IGNfdGV4dCA6IGNfZGlzYWJsZSwgImxlZnQiLCBmYWxzZSk7CisJCQkJCQkJCX0KKwkJCQkJCQkJeCArPSBpd2lkdGg7IGkrKzsKKwkJCQkJCQl9CisJCQkJCQl9IGVsc2UgeworCQkJCQkJCWJvb2xlYW4gaXRlbWVuYWJsZWQgPSBlbmFibGVkICYmIGdldEJvb2xlYW4oaXRlbSwgImVuYWJsZWQiLCB0cnVlKTsKKwkJCQkJCQlwYWludENvbnRlbnQoaXRlbSwgZywgeGZyb20sIHlmcm9tLCB4dG8gLSB4ZnJvbSwgeXRvIC0geWZyb20sCisJCQkJCQkJCXIueCArIDEsIHIueSArIDEsIHZpZXcud2lkdGggLSByLnggLSAyLAorCQkJCQkJCQlyLmhlaWdodCAtIDMsIGl0ZW1lbmFibGVkID8gY190ZXh0IDogY19kaXNhYmxlLCAibGVmdCIsIGZhbHNlKTsKKworCQkJCQkJCWlmIChuZXh0ICE9IG51bGwpIHsKKwkJCQkJCQkJaW50IHggPSByLnggLSBibG9jayAvIDI7CisJCQkJCQkJCWludCB5ID0gci55ICsgKHIuaGVpZ2h0IC0gMSkgLyAyOworCQkJCQkJCQkvL2cuZHJhd1JlY3QoeCAtIDQsIHkgLSA0LCA4LCA4KTsKKwkJCQkJCQkJcGFpbnRSZWN0KGcsIHggLSA0LCB5IC0gNCwgOSwgOSwgaXRlbWVuYWJsZWQgPyBjX2JvcmRlciA6IGNfZGlzYWJsZSwKKwkJCQkJCQkJCWl0ZW1lbmFibGVkID8gY19jdHJsIDogY19iZywgdHJ1ZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSk7CisJCQkJCQkJCWcuc2V0Q29sb3IoaXRlbWVuYWJsZWQgPyBjX3RleHQgOiBjX2Rpc2FibGUpOworCQkJCQkJCQlnLmRyYXdMaW5lKHggLSAyLCB5LCB4ICsgMiwgeSk7CisJCQkJCQkJCWlmICghZXhwYW5kZWQpIHsKKwkJCQkJCQkJCWcuZHJhd0xpbmUoeCwgeSAtIDIsIHgsIHkgKyAyKTsKKwkJCQkJCQkJfQorCQkJCQkJCX0KKwkJCQkJCX0KKwkJCQkJfQorCQkJCQlpZiAoInRyZWUiID09IGNsYXNzbmFtZSkgeworCQkJCQkJaWYgKChuZXh0ID09IG51bGwpIHx8ICFleHBhbmRlZCkgeworCQkJCQkJCXdoaWxlICgoaXRlbSAhPSBjb21wb25lbnQpICYmICgobmV4dCA9IGdldChpdGVtLCAiOm5leHQiKSkgPT0gbnVsbCkpIHsKKwkJCQkJCQkJaXRlbSA9IGdldFBhcmVudChpdGVtKTsKKwkJCQkJCQl9CisJCQkJCQl9CisJCQkJCQlpdGVtID0gbmV4dDsKKwkJCQkJfSBlbHNlIHsKKwkJCQkJCWl0ZW0gPSBnZXQoaXRlbSwgIjpuZXh0Iik7CisJCQkJCX0KKwkJCQl9CisJCQkJLyppZiAoY29sdW1ud2lkdGhzICE9IG51bGwpIHsKKwkJCQkJZy5zZXRDb2xvcihjX2JnKTsKKwkJCQkJZm9yIChpbnQgaSA9IDAsIGN4ID0gLTE7IGkgPCBjb2x1bW53aWR0aHMubGVuZ3RoIC0gMTsgaSsrKSB7CisJCQkJCQljeCArPSBjb2x1bW53aWR0aHNbaV07CisJCQkJCQlnLmRyYXdMaW5lKGN4LCAwLCBjeCwgdmlldy5oZWlnaHQpOworCQkJCQl9CisJCQkJfSovCisJCQkJcmVzZXRTY3JvbGxQYW5lKGcsIGNsaXB4LCBjbGlweSwgY2xpcHdpZHRoLCBjbGlwaGVpZ2h0LCB2aWV3LCB2aWV3cG9ydCk7CisJCQl9CisJCX0KKwkJZWxzZSBpZiAoInNlcGFyYXRvciIgPT0gY2xhc3NuYW1lKSB7CisJCQlnLnNldENvbG9yKGVuYWJsZWQgPyBjX2JvcmRlciA6IGNfZGlzYWJsZSk7CisJCQlnLmZpbGxSZWN0KDAsIDAsIGJvdW5kcy53aWR0aCwgYm91bmRzLmhlaWdodCk7CisJCX0KKwkJZWxzZSBpZiAoIm1lbnViYXIiID09IGNsYXNzbmFtZSkgeworCQkJT2JqZWN0IHNlbGVjdGVkID0gZ2V0KGNvbXBvbmVudCwgInNlbGVjdGVkIik7CisJCQlpbnQgbGFzdHggPSAwOworCQkJZm9yIChPYmplY3QgbWVudSA9IGdldChjb21wb25lbnQsICJtZW51Iik7CisJCQkJCW1lbnUgIT0gbnVsbDsgbWVudSA9IGdldChtZW51LCAiOm5leHQiKSkgeworCQkJCVJlY3RhbmdsZSBtYiA9IGdldFJlY3RhbmdsZShtZW51LCAiYm91bmRzIik7CisJCQkJaWYgKGNsaXB4ICsgY2xpcHdpZHRoIDw9IG1iLngpIHsgYnJlYWs7IH0KKwkJCQlpZiAoY2xpcHggPj0gbWIueCArIG1iLndpZHRoKSB7IGNvbnRpbnVlOyB9CisJCQkJYm9vbGVhbiBhcm1lZCA9IChzZWxlY3RlZCA9PSBtZW51KTsKKwkJCQlib29sZWFuIGhvb3ZlciA9IChzZWxlY3RlZCA9PSBudWxsKSAmJiAoaW5zaWRlcGFydCA9PSBtZW51KTsKKwkJCQlwYWludFJlY3QoZywgbWIueCwgMCwgbWIud2lkdGgsIGJvdW5kcy5oZWlnaHQsIGVuYWJsZWQgPyBjX2JvcmRlciA6IGNfZGlzYWJsZSwKKwkJCQkJZW5hYmxlZCA/IChhcm1lZCA/IGNfc2VsZWN0IDogKGhvb3ZlciA/IGNfaG92ZXIgOiBjX2N0cmwpKSA6IGNfYmcsCisJCQkJCWFybWVkLCBhcm1lZCwgdHJ1ZSwgYXJtZWQpOworCQkJCXBhaW50Q29udGVudChtZW51LCBnLCBjbGlweCwgY2xpcHksIGNsaXB3aWR0aCwgY2xpcGhlaWdodCwKKwkJCQkJbWIueCArIDQsIDEsIG1iLndpZHRoLCBib3VuZHMuaGVpZ2h0LAorCQkJCQkoZW5hYmxlZCAmJiBnZXRCb29sZWFuKG1lbnUsICJlbmFibGVkIiwgdHJ1ZSkpID8gY190ZXh0IDogY19kaXNhYmxlLAorCQkJCQkibGVmdCIsIHRydWUpOworCQkJCWxhc3R4ID0gbWIueCArIG1iLndpZHRoOworCQkJfQorCQkJcGFpbnRSZWN0KGcsIGxhc3R4LCAwLCBib3VuZHMud2lkdGggLSBsYXN0eCwgYm91bmRzLmhlaWdodCwKKwkJCQllbmFibGVkID8gY19ib3JkZXIgOiBjX2Rpc2FibGUsIGVuYWJsZWQgPyBjX2N0cmwgOiBjX2JnLAorCQkJCWZhbHNlLCBmYWxzZSwgdHJ1ZSwgZmFsc2UpOworCQl9CisJCWVsc2UgaWYgKCJwb3B1cG1lbnUiID09IGNsYXNzbmFtZSkgeworCQkJcGFpbnRSZWN0KGcsIDAsIDAsIGJvdW5kcy53aWR0aCwgYm91bmRzLmhlaWdodCwKKwkJCQljX2JvcmRlciwgY19iZywgdHJ1ZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSk7CisJCQlPYmplY3Qgc2VsZWN0ZWQgPSBnZXQoY29tcG9uZW50LCAic2VsZWN0ZWQiKTsKKwkJCWZvciAoT2JqZWN0IG1lbnUgPSBnZXQoZ2V0KGNvbXBvbmVudCwgIm1lbnUiKSwgIm1lbnUiKTsKKwkJCQkJbWVudSAhPSBudWxsOyBtZW51ID0gZ2V0KG1lbnUsICI6bmV4dCIpKSB7CisJCQkJUmVjdGFuZ2xlIHIgPSBnZXRSZWN0YW5nbGUobWVudSwgImJvdW5kcyIpOworCQkJCWlmIChjbGlweSArIGNsaXBoZWlnaHQgPD0gci55KSB7IGJyZWFrOyB9CisJCQkJaWYgKGNsaXB5ID49IHIueSArIHIuaGVpZ2h0KSB7IGNvbnRpbnVlOyB9CisJCQkJU3RyaW5nIGl0ZW1jbGFzcyA9IGdldENsYXNzKG1lbnUpOworCQkJCWlmIChpdGVtY2xhc3MgPT0gInNlcGFyYXRvciIpIHsKKwkJCQkJZy5zZXRDb2xvcihjX2JvcmRlcik7CisJCQkJCWcuZmlsbFJlY3Qoci54LCByLnksIGJvdW5kcy53aWR0aCAtIDIsIHIuaGVpZ2h0KTsKKwkJCQl9IGVsc2UgeworCQkJCQlib29sZWFuIGFybWVkID0gKHNlbGVjdGVkID09IG1lbnUpOworCQkJCQlib29sZWFuIG1lbnVlbmFibGVkID0gZ2V0Qm9vbGVhbihtZW51LCAiZW5hYmxlZCIsIHRydWUpOworCQkJCQlwYWludFJlY3QoZywgci54LCByLnksIGJvdW5kcy53aWR0aCAtIDIsIHIuaGVpZ2h0LCBjX2JvcmRlciwKKwkJCQkJCWFybWVkID8gY19zZWxlY3QgOiBjX2JnLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSk7CisJCQkJCWludCB0eCA9IHIueDsKKwkJCQkJaWYgKGl0ZW1jbGFzcyA9PSAiY2hlY2tib3htZW51aXRlbSIpIHsKKwkJCQkJCXR4ICs9IGJsb2NrICsgMzsKKwkJCQkJCWJvb2xlYW4gY2hlY2tlZCA9IGdldEJvb2xlYW4obWVudSwgInNlbGVjdGVkIiwgZmFsc2UpOworCQkJCQkJU3RyaW5nIGdyb3VwID0gZ2V0U3RyaW5nKG1lbnUsICJncm91cCIsIG51bGwpOworCQkJCQkJZy50cmFuc2xhdGUoci54ICsgNCwgci55ICsgMik7CisJCQkJCQlnLnNldENvbG9yKG1lbnVlbmFibGVkID8gY19ib3JkZXIgOiBjX2Rpc2FibGUpOworCQkJCQkJaWYgKGdyb3VwID09IG51bGwpIHsKKwkJCQkJCQlnLmRyYXdSZWN0KDEsIDEsIGJsb2NrIC0gMywgYmxvY2sgLSAzKTsKKwkJCQkJCX0gZWxzZSB7CisJCQkJCQkJZy5kcmF3T3ZhbCgxLCAxLCBibG9jayAtIDMsIGJsb2NrIC0gMyk7IC8vamF2YQorCQkJCQkJfQorCQkJCQkJaWYgKGNoZWNrZWQpIHsKKwkJCQkJCQlnLnNldENvbG9yKG1lbnVlbmFibGVkID8gY190ZXh0IDogY19kaXNhYmxlKTsKKwkJCQkJCQlpZiAoZ3JvdXAgPT0gbnVsbCkgeworCQkJCQkJCQlnLmZpbGxSZWN0KDMsIGJsb2NrIC0gOSwgMiwgNik7CisJCQkJCQkJCWcuZHJhd0xpbmUoMywgYmxvY2sgLSA0LCBibG9jayAtIDQsIDMpOworCQkJCQkJCQlnLmRyYXdMaW5lKDQsIGJsb2NrIC0gNCwgYmxvY2sgLSA0LCA0KTsKKwkJCQkJCQl9IGVsc2UgeworCQkJCQkJCQlnLmZpbGxPdmFsKDUsIDUsIGJsb2NrIC0gMTAsIGJsb2NrIC0gMTApOyAvL2phdmEKKwkJCQkJCQkJZy5kcmF3T3ZhbCg0LCA0LCBibG9jayAtIDksIGJsb2NrIC0gOSk7IC8vamF2YQorCQkJCQkJCX0KKwkJCQkJCX0KKwkJCQkJCWcudHJhbnNsYXRlKC1yLnggLSA0LCAtci55IC0gMik7CisJCQkJCX0KKwkJCQkJcGFpbnRDb250ZW50KG1lbnUsIGcsIGNsaXB4LCBjbGlweSwgY2xpcHdpZHRoLCBjbGlwaGVpZ2h0LAorCQkJCQkJdHggKyA0LCByLnkgKyAyLCBib3VuZHMud2lkdGggLSAxMCwKKwkJCQkJCXIuaGVpZ2h0IC0gNCwgbWVudWVuYWJsZWQgPyBjX3RleHQgOiBjX2Rpc2FibGUsICJsZWZ0IiwgdHJ1ZSk7CisJCQkJCWlmIChpdGVtY2xhc3MgPT0gIm1lbnUiKSB7CisJCQkJCQlwYWludEFycm93KGcsIHIueCArIGJvdW5kcy53aWR0aCAtIGJsb2NrLCByLnksIGJsb2NrLCByLmhlaWdodCwgJ0UnKTsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJfQorCQkvL2phdmE+CisJCWVsc2UgaWYgKCJiZWFuIiA9PSBjbGFzc25hbWUpIHsKKwkJCQlnLmNsaXBSZWN0KDAsIDAsIGJvdW5kcy53aWR0aCwgYm91bmRzLmhlaWdodCk7CisJCQkJKChDb21wb25lbnQpIGdldChjb21wb25lbnQsICJiZWFuIikpLnBhaW50KGcpOworCQkJCWcuc2V0Q2xpcChjbGlweCwgY2xpcHksIGNsaXB3aWR0aCwgY2xpcGhlaWdodCk7CisJCX0KKwkJLy88amF2YQorCQllbHNlIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oKFN0cmluZykgY2xhc3NuYW1lKTsKKwkJZy50cmFuc2xhdGUoLWJvdW5kcy54LCAtYm91bmRzLnkpOworCQljbGlweCArPSBib3VuZHMueDsgY2xpcHkgKz0gYm91bmRzLnk7CisJfQorCisJLyoqCisJICoKKwkgKi8KKwlwcml2YXRlIHZvaWQgcGFpbnRSZXZlcnNlKEdyYXBoaWNzIGcsCisJCQlpbnQgY2xpcHgsIGludCBjbGlweSwgaW50IGNsaXB3aWR0aCwgaW50IGNsaXBoZWlnaHQsCisJCQlPYmplY3QgY29tcG9uZW50LCBib29sZWFuIGVuYWJsZWQpIHsKKwkJaWYgKGNvbXBvbmVudCAhPSBudWxsKSB7CisJCQlSZWN0YW5nbGUgYm91bmRzID0gZ2V0UmVjdGFuZ2xlKGNvbXBvbmVudCwgImJvdW5kcyIpOworCQkJaWYgKChjbGlweCA8IGJvdW5kcy54KSB8fAorCQkJCQkoY2xpcHggKyBjbGlwd2lkdGggPiBib3VuZHMueCArIGJvdW5kcy53aWR0aCkgfHwKKwkJCQkJKGNsaXB5IDwgYm91bmRzLnkpIHx8CisJCQkJCShjbGlweSArIGNsaXBoZWlnaHQgPiBib3VuZHMueSArIGJvdW5kcy5oZWlnaHQpKSB7CisJCQkJcGFpbnRSZXZlcnNlKGcsIGNsaXB4LCBjbGlweSwgY2xpcHdpZHRoLCBjbGlwaGVpZ2h0LAorCQkJCQlnZXQoY29tcG9uZW50LCAiOm5leHQiKSwgZW5hYmxlZCk7CisJCQl9CisJCQlwYWludChnLCBjbGlweCwgY2xpcHksIGNsaXB3aWR0aCwgY2xpcGhlaWdodCwgY29tcG9uZW50LCBlbmFibGVkKTsKKwkJfQorCX0KKworCS8qKgorCSAqCisJICovCisJcHJpdmF0ZSB2b2lkIHBhaW50RmllbGQoR3JhcGhpY3MgZywKKwkJCWludCBjbGlweCwgaW50IGNsaXB5LCBpbnQgY2xpcHdpZHRoLCBpbnQgY2xpcGhlaWdodCwgT2JqZWN0IGNvbXBvbmVudCwKKwkJCWludCB3aWR0aCwgaW50IGhlaWdodCwgYm9vbGVhbiBpbnNpZGUsIGJvb2xlYW4gcHJlc3NlZCwKKwkJCWJvb2xlYW4gZm9jdXMsIGJvb2xlYW4gZW5hYmxlZCwgYm9vbGVhbiBoaWRkZW4sIGludCBsZWZ0KSB7CisJCWJvb2xlYW4gZWRpdGFibGUgPSBnZXRCb29sZWFuKGNvbXBvbmVudCwgImVkaXRhYmxlIiwgdHJ1ZSk7CisJCXBhaW50UmVjdChnLCAwLCAwLCB3aWR0aCwgaGVpZ2h0LCBlbmFibGVkID8gY19ib3JkZXIgOiBjX2Rpc2FibGUsCisJCQllZGl0YWJsZSA/IGNfdGV4dGJnIDogY19iZywgdHJ1ZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSk7CisJCWcuY2xpcFJlY3QoMSArIGxlZnQsIDEsIHdpZHRoIC0gbGVmdCAtIDIsIGhlaWdodCAtIDIpOworCisJCVN0cmluZyB0ZXh0ID0gZ2V0U3RyaW5nKGNvbXBvbmVudCwgInRleHQiLCAiIik7CisJCWludCBvZmZzZXQgPSBnZXRJbnRlZ2VyKGNvbXBvbmVudCwgIm9mZnNldCIsIDApOworCQlGb250TWV0cmljcyBmbSA9IGcuZ2V0Rm9udE1ldHJpY3MoKTsgLy9qYXZhCisKKwkJaW50IGNhcmV0ID0gMDsKKwkJaWYgKGZvY3VzKSB7IAorCQkJaW50IHN0YXJ0ID0gZ2V0SW50ZWdlcihjb21wb25lbnQsICJzdGFydCIsIDApOyAKKwkJCWludCBlbmQgPSBnZXRJbnRlZ2VyKGNvbXBvbmVudCwgImVuZCIsIDApOworCQkJY2FyZXQgPSBoaWRkZW4gPyAoZm0uY2hhcldpZHRoKCcqJykgKiBlbmQpIDoKKwkJCQlmbS5zdHJpbmdXaWR0aCh0ZXh0LnN1YnN0cmluZygwLCBlbmQpKTsgLy9qYXZhCisJCQkJLy9taWRwIGZvbnQuc3Vic3RyaW5nV2lkdGgodGV4dCwgMCwgZW5kKTsKKwkJCWlmIChzdGFydCAhPSBlbmQpIHsKKwkJCQlpbnQgaXMgPSBoaWRkZW4gPyAoZm0uY2hhcldpZHRoKCcqJykgKiBzdGFydCkgOgorCQkJCQlmbS5zdHJpbmdXaWR0aCh0ZXh0LnN1YnN0cmluZygwLCBzdGFydCkpOyAvL2phdmEKKwkJCQkJLy9taWRwIGZvbnQuc3Vic3RyaW5nV2lkdGgodGV4dCwgMCwgc3RhcnQpOworCQkJCWcuc2V0Q29sb3IoY19zZWxlY3QpOworCQkJCWcuZmlsbFJlY3QoMiArIGxlZnQgLSBvZmZzZXQgKyBNYXRoLm1pbihpcywgY2FyZXQpLCAxLAorCQkJCQlNYXRoLmFicyhjYXJldCAtIGlzKSwgaGVpZ2h0IC0gMik7CisJCQl9CisJCX0KKworCQlpZiAoZm9jdXMpIHsKKwkJCWcuc2V0Q29sb3IoY19mb2N1cyk7CisJCQlnLmZpbGxSZWN0KDEgKyBsZWZ0IC0gb2Zmc2V0ICsgY2FyZXQsIDEsIDEsIGhlaWdodCAtIDIpOworCQl9CisKKwkJZy5zZXRDb2xvcihlbmFibGVkID8gY190ZXh0IDogY19kaXNhYmxlKTsKKwkJaW50IGZ4ID0gMiArIGxlZnQgLSBvZmZzZXQ7CisJCWludCBmeSA9IChoZWlnaHQgKyBmbS5nZXRBc2NlbnQoKSAtIGZtLmdldERlc2NlbnQoKSkgLyAyOyAvL2phdmEKKwkJLy9taWRwIGludCBmeSA9IChoZWlnaHQgLSBmb250LmdldEhlaWdodCgpKSAvIDI7CisJCWlmIChoaWRkZW4pIHsKKwkJCWludCBmaCA9IGZtLmNoYXJXaWR0aCgnKicpOworCQkJZm9yIChpbnQgaSA9IHRleHQubGVuZ3RoKCk7IGkgPiAwOyBpLS0pIHsKKwkJCQlnLmRyYXdTdHJpbmcoIioiLCBmeCwgZnkpOyAvL2phdmEKKwkJCQkvL21pZHAgZy5kcmF3Q2hhcignKicsIGZ4LCBmeSwgR3JhcGhpY3MuTEVGVCB8IEdyYXBoaWNzLlRPUCk7CisJCQkJZnggKz0gZmg7CisJCQl9CisJCX0gZWxzZSB7CisJCQlnLmRyYXdTdHJpbmcodGV4dCwgZngsIGZ5KTsgLy9qYXZhCisJCQkvL21pZHAgZy5kcmF3U3RyaW5nKHRleHQsIGZ4LCBmeSwgR3JhcGhpY3MuTEVGVCB8IEdyYXBoaWNzLlRPUCk7CisJCX0KKwkJZy5zZXRDbGlwKGNsaXB4LCBjbGlweSwgY2xpcHdpZHRoLCBjbGlwaGVpZ2h0KTsKKwl9CisKKwkvKioKKwkgKgorCSAqLworCXByaXZhdGUgYm9vbGVhbiBwYWludFNjcm9sbFBhbmUoR3JhcGhpY3MgZywKKwkJCWludCBjbGlweCwgaW50IGNsaXB5LCBpbnQgY2xpcHdpZHRoLCBpbnQgY2xpcGhlaWdodCwgUmVjdGFuZ2xlIGJvdW5kcywKKwkJCVJlY3RhbmdsZSB2aWV3LCBSZWN0YW5nbGUgdmlld3BvcnQsCisJCQlib29sZWFuIGVuYWJsZWQsIGJvb2xlYW4gaW5zaWRlLCBib29sZWFuIHByZXNzZWQpIHsKKwkJaWYgKCh2aWV3cG9ydC55ICsgdmlld3BvcnQuaGVpZ2h0IDwgYm91bmRzLmhlaWdodCkgJiYKKwkJCQkoY2xpcHkgKyBjbGlwaGVpZ2h0ID4gdmlld3BvcnQueSArIHZpZXdwb3J0LmhlaWdodCkpIHsgLy8gbmVlZCBob3Jpem9udGFsCisJCQlpbnQgeCA9IHZpZXdwb3J0Lng7CisJCQlpbnQgeSA9IHZpZXdwb3J0LnkgKyB2aWV3cG9ydC5oZWlnaHQ7CisJCQlpbnQgaGVpZ2h0ID0gYm91bmRzLmhlaWdodCAtIHk7CisJCQlpbnQgYnV0dG9uID0gTWF0aC5taW4oYmxvY2ssIHZpZXdwb3J0LndpZHRoIC8gMik7CisJCQlpbnQgdHJhY2sgPSB2aWV3cG9ydC53aWR0aCAtICgyICogYnV0dG9uKTsgLy9tYXggMTAKKwkJCWludCBrbm9iID0gTWF0aC5taW4odHJhY2ssIE1hdGgubWF4KHRyYWNrICogKHZpZXdwb3J0LndpZHRoIC0gMikgLyB2aWV3LndpZHRoLCA2KSk7CisJCQlpbnQgZGVjcmVhc2UgPSB2aWV3LnggKiAodHJhY2sgLSBrbm9iKSAvCisJCQkJKHZpZXcud2lkdGggLSB2aWV3cG9ydC53aWR0aCArIDIpOworCQkJaW50IGluY3JlYXNlID0gdHJhY2sgLSBkZWNyZWFzZSAtIGtub2I7CisJCQlwYWludEFycm93KGcsIHgsIHksIGJ1dHRvbiwgaGVpZ2h0LAorCQkJCSdXJywgZW5hYmxlZCwgaW5zaWRlLCBwcmVzc2VkLCAibGVmdCIsIGZhbHNlLCB0cnVlLCB0cnVlLCBmYWxzZSk7CisJCQlwYWludFJlY3QoZywgeCArIGJ1dHRvbiwgeSwgZGVjcmVhc2UsIGhlaWdodCwKKwkJCQllbmFibGVkID8gY19ib3JkZXIgOiBjX2Rpc2FibGUsIGNfYmcsIGZhbHNlLCB0cnVlLCB0cnVlLCBmYWxzZSk7CisJCQlwYWludFJlY3QoZywgeCArIGJ1dHRvbiArIGRlY3JlYXNlLCB5LCBrbm9iLCBoZWlnaHQsCisJCQkJZW5hYmxlZCA/IGNfYm9yZGVyIDogY19kaXNhYmxlLCBlbmFibGVkID8gY19jdHJsIDogY19iZywgZmFsc2UsIHRydWUsIHRydWUsIHRydWUpOworCQkJaW50IG4gPSBNYXRoLm1pbig1LCAoa25vYiAtIDQpIC8gMyk7CisJCQlnLnNldENvbG9yKGVuYWJsZWQgPyBjX2JvcmRlciA6IGNfZGlzYWJsZSk7CisJCQlpbnQgY3ggPSAoeCArIGJ1dHRvbiArIGRlY3JlYXNlKSArIChrbm9iICsgMiAtIG4gKiAzKSAvIDI7CisJCQlmb3IgKGludCBpID0gMDsgaSA8IG47IGkrKyApIHsKKwkJCQlnLmRyYXdMaW5lKGN4ICsgaSAqIDMsIHkgKyAyLCBjeCArIGkgKiAzLCB5ICsgaGVpZ2h0IC0gNCk7CisJCQl9CisJCQlwYWludFJlY3QoZywgeCArIGJ1dHRvbiArIGRlY3JlYXNlICsga25vYiwgeSwgaW5jcmVhc2UsIGhlaWdodCwKKwkJCQllbmFibGVkID8gY19ib3JkZXIgOiBjX2Rpc2FibGUsIGNfYmcsIGZhbHNlLCBmYWxzZSwgdHJ1ZSwgdHJ1ZSk7CisJCQlwYWludEFycm93KGcsIHggKyBidXR0b24gKyB0cmFjaywgeSwgYnV0dG9uLCBoZWlnaHQsCisJCQkJJ0UnLCBlbmFibGVkLCBpbnNpZGUsIHByZXNzZWQsICJyaWdodCIsIGZhbHNlLCBmYWxzZSwgdHJ1ZSwgdHJ1ZSk7CisJCX0KKwkJaWYgKCh2aWV3cG9ydC54ICsgdmlld3BvcnQud2lkdGggPCBib3VuZHMud2lkdGgpICYmCisJCQkJKGNsaXB4ICsgY2xpcHdpZHRoID4gdmlld3BvcnQueCArIHZpZXdwb3J0LndpZHRoKSkgeyAvLyBuZWVkIHZlcnRpY2FsCisJCQlpbnQgeCA9IHZpZXdwb3J0LnggKyB2aWV3cG9ydC53aWR0aDsKKwkJCWludCB5ID0gdmlld3BvcnQueTsKKwkJCWludCB3aWR0aCA9IGJvdW5kcy53aWR0aCAtIHg7CisJCQkvL2lmICh5ID4gMCkgeworCQkJLy8JcGFpbnRSZWN0KGcsIHggLSAxLCAwLCB3aWR0aCArIDEsIHksCisJCQkvLwkJZW5hYmxlZCA/IGNfYm9yZGVyIDogY19kaXNhYmxlLCBjX2JnLCBmYWxzZSwgdHJ1ZSwgZmFsc2UsIGZhbHNlKTsKKwkJCS8vfQorCQkJaW50IHRyYWNrID0gdmlld3BvcnQuaGVpZ2h0IC0gKDIgKiBibG9jayk7CisJCQlpbnQga25vYiA9IHRyYWNrICogKHZpZXdwb3J0LmhlaWdodCAtIDIpIC8gdmlldy5oZWlnaHQ7CisJCQlpbnQgZGVjcmVhc2UgPSB2aWV3LnkgKiAodHJhY2sgLSBrbm9iKSAvCisJCQkJKHZpZXcuaGVpZ2h0IC0gdmlld3BvcnQuaGVpZ2h0ICsgMik7CisJCQlpbnQgaW5jcmVhc2UgPSB0cmFjayAtIGRlY3JlYXNlIC0ga25vYjsKKwkJCXBhaW50QXJyb3coZywgeCwgeSwgd2lkdGgsIGJsb2NrLAorCQkJCSdOJywgZW5hYmxlZCwgaW5zaWRlLCBwcmVzc2VkLCAidXAiLCB0cnVlLCBmYWxzZSwgZmFsc2UsIHRydWUpOworCQkJcGFpbnRSZWN0KGcsIHgsIHkgKyBibG9jaywgd2lkdGgsIGRlY3JlYXNlLAorCQkJCWVuYWJsZWQgPyBjX2JvcmRlciA6IGNfZGlzYWJsZSwgY19iZywgdHJ1ZSwgZmFsc2UsIGZhbHNlLCB0cnVlKTsKKwkJCXBhaW50UmVjdChnLCB4LCB5ICsgYmxvY2sgKyBkZWNyZWFzZSwgd2lkdGgsIGtub2IsCisJCQkJZW5hYmxlZCA/IGNfYm9yZGVyIDogY19kaXNhYmxlLCBlbmFibGVkID8gY19jdHJsIDogY19iZywgdHJ1ZSwgZmFsc2UsIHRydWUsIHRydWUpOworCQkJaW50IG4gPSBNYXRoLm1pbig1LCAoa25vYiAtIDQpIC8gMyk7CisJCQlnLnNldENvbG9yKGVuYWJsZWQgPyBjX2JvcmRlciA6IGNfZGlzYWJsZSk7CisJCQlpbnQgY3kgPSAoeSArIGJsb2NrICsgZGVjcmVhc2UpICsgKGtub2IgKyAyIC0gbiAqIDMpIC8gMjsKKwkJCWZvciAoaW50IGkgPSAwOyBpIDwgbjsgaSsrICkgeworCQkJCWcuZHJhd0xpbmUoeCArIDIsIGN5ICsgaSAqIDMsIHggKyB3aWR0aCAtIDQsIGN5ICsgaSAqIDMpOworCQkJfQorCQkJcGFpbnRSZWN0KGcsIHgsIHkgKyBibG9jayArIGRlY3JlYXNlICsga25vYiwgd2lkdGgsIGluY3JlYXNlLAorCQkJCWVuYWJsZWQgPyBjX2JvcmRlciA6IGNfZGlzYWJsZSwgY19iZywgZmFsc2UsIGZhbHNlLCB0cnVlLCB0cnVlKTsKKwkJCXBhaW50QXJyb3coZywgeCwgeSArIGJsb2NrICsgdHJhY2ssIHdpZHRoLCBibG9jaywKKwkJCSdTJywgZW5hYmxlZCwgaW5zaWRlLCBwcmVzc2VkLCAiZG93biIsIGZhbHNlLCBmYWxzZSwgdHJ1ZSwgdHJ1ZSk7CisJCX0KKwkJaWYgKChjbGlweCArIGNsaXB3aWR0aCA+IHZpZXdwb3J0LngpICYmIChjbGlweSArIGNsaXBoZWlnaHQgPiB2aWV3cG9ydC55KSAmJgorCQkJCShjbGlweCA8IHZpZXdwb3J0LnggKyB2aWV3cG9ydC53aWR0aCkgJiYgKGNsaXB5IDwgdmlld3BvcnQueSArIHZpZXdwb3J0LmhlaWdodCkpIHsKKwkJCWcuY2xpcFJlY3Qodmlld3BvcnQueCArIDEsIHZpZXdwb3J0LnkgKyAxLCB2aWV3cG9ydC53aWR0aCAtIDIsIHZpZXdwb3J0LmhlaWdodCAtIDIpOworCQkJZy50cmFuc2xhdGUodmlld3BvcnQueCArIDEgLSB2aWV3LngsIHZpZXdwb3J0LnkgKyAxIC0gdmlldy55KTsKKwkgCQlyZXR1cm4gdHJ1ZTsKKwkJfQorCQlyZXR1cm4gZmFsc2U7CisJfQorCQkKKwkvKioKKwkgKgorCSAqLworCXByaXZhdGUgdm9pZCByZXNldFNjcm9sbFBhbmUoR3JhcGhpY3MgZywKKwkJCWludCBjbGlweCwgaW50IGNsaXB5LCBpbnQgY2xpcHdpZHRoLCBpbnQgY2xpcGhlaWdodCwKKwkJCVJlY3RhbmdsZSB2aWV3LCBSZWN0YW5nbGUgdmlld3BvcnQpIHsKKwkJZy50cmFuc2xhdGUodmlldy54IC0gdmlld3BvcnQueCAtIDEsIHZpZXcueSAtIHZpZXdwb3J0LnkgLSAxKTsKKwkJZy5zZXRDbGlwKGNsaXB4LCBjbGlweSwgY2xpcHdpZHRoLCBjbGlwaGVpZ2h0KTsKKwl9CisKKwkvKioKKwkgKgorCSAqLworCXByaXZhdGUgdm9pZCBwYWludFJlY3QoR3JhcGhpY3MgZywgaW50IHgsIGludCB5LCBpbnQgd2lkdGgsIGludCBoZWlnaHQsCisJCQlDb2xvciBib3JkZXIsIENvbG9yIGJnLAorCQkJYm9vbGVhbiB0b3AsIGJvb2xlYW4gbGVmdCwgYm9vbGVhbiBib3R0b20sIGJvb2xlYW4gcmlnaHQpIHsKKwkJaWYgKCh3aWR0aCA8PSAwKSB8fCAoaGVpZ2h0IDw9IDApKSByZXR1cm47CisJCWcuc2V0Q29sb3IoYm9yZGVyKTsKKwkJaWYgKHRvcCkgeworCQkJZy5kcmF3TGluZSh4ICsgd2lkdGggLSAxLCB5LCB4LCB5KTsKKwkJCXkrKzsgaGVpZ2h0LS07IGlmIChoZWlnaHQgPD0gMCkgcmV0dXJuOworCQl9CisJCWlmIChsZWZ0KSB7CisJCQlnLmRyYXdMaW5lKHgsIHksIHgsIHkgKyBoZWlnaHQgLSAxKTsKKwkJCXgrKzsgd2lkdGgtLTsgaWYgKHdpZHRoIDw9IDApIHJldHVybjsKKwkJfQorCQlpZiAoYm90dG9tKSB7CisJCQlnLmRyYXdMaW5lKHgsIHkgKyBoZWlnaHQgLSAxLCB4ICsgd2lkdGggLSAxLCB5ICsgaGVpZ2h0IC0gMSk7CisJCQloZWlnaHQtLTsgaWYgKGhlaWdodCA8PSAwKSByZXR1cm47CisJCX0KKwkJaWYgKHJpZ2h0KSB7CisJCQlnLmRyYXdMaW5lKHggKyB3aWR0aCAtIDEsIHkgKyBoZWlnaHQgLSAxLCB4ICsgd2lkdGggLSAxLCB5KTsKKwkJCXdpZHRoLS07IGlmICh3aWR0aCA8PSAwKSByZXR1cm47CisJCX0KKworCQkvL2phdmE+CisJCWlmIChiZyA9PSBjX2N0cmwpIHsKKwkJCWlmIChoZWlnaHQgPiBibG9jaykgeworCQkJCWcuc2V0Q29sb3IoY19iZyk7CisJCQkJZy5maWxsUmVjdCh4LCB5LCB3aWR0aCwgaGVpZ2h0IC0gYmxvY2spOworCQkJfQorCQkJZm9yIChpbnQgaSA9IDA7IGkgPCB3aWR0aDsgaSArPSBibG9jaykgeworCQkJCWcuZHJhd0ltYWdlKGdyYWRpZW50LCB4ICsgaSwgKGhlaWdodCA+IGJsb2NrKSA/ICh5ICsgaGVpZ2h0IC0gYmxvY2spIDogeSwKKwkJCQkJeCArIE1hdGgubWluKGkgKyBibG9jaywgd2lkdGgpLCB5ICsgaGVpZ2h0LAorCQkJCQkwLCAwLCBNYXRoLm1pbihibG9jaywgd2lkdGggLSBpKSwgTWF0aC5taW4oYmxvY2ssIGhlaWdodCksIG51bGwpOworCQkJfQorCQkJLyppZiAod2lkdGggPiBibG9jaykgeworCQkJCWcuc2V0Q29sb3IoY19iZyk7CisJCQkJZy5maWxsUmVjdCh4LCB5LCB3aWR0aCAtIGJsb2NrLCBoZWlnaHQpOworCQkJfQorCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBoZWlnaHQ7IGkgKz0gYmxvY2spIHsKKwkJCQlnLmRyYXdJbWFnZShncmFkaWVudCwgKHdpZHRoID4gYmxvY2spID8gKHggKyB3aWR0aCAtIGJsb2NrKSA6IHgsIHkgKyBpLAorCQkJCQl4ICsgd2lkdGgsIHkgKyBNYXRoLm1pbihpICsgYmxvY2ssIGhlaWdodCksCisJCQkJCTAsIDAsIE1hdGgubWluKGJsb2NrLCB3aWR0aCksIE1hdGgubWluKGJsb2NrLCBoZWlnaHQgLSBpKSwgbnVsbCk7CisJCQl9Ki8KKwkJfQorCQllbHNlIHsKKwkJCWcuc2V0Q29sb3IoYmcpOworCQkJZy5maWxsUmVjdCh4LCB5LCB3aWR0aCwgaGVpZ2h0KTsKKwkJfQorCQkvLzxqYXZhCisJCS8vbWlkcCBnLnNldENvbG9yKGJnKTsKKwkJLy9taWRwIGcuZmlsbFJlY3QoeCwgeSwgd2lkdGgsIGhlaWdodCk7CisJfQorCisJLyoqCisJICoKKwkgKi8KKwlwcml2YXRlIHZvaWQgcGFpbnRBcnJvdyhHcmFwaGljcyBnLCBpbnQgeCwgaW50IHksIGludCB3aWR0aCwgaW50IGhlaWdodCwKKwkJCWNoYXIgZGlyLCBib29sZWFuIGVuYWJsZWQsIGJvb2xlYW4gaW5zaWRlLCBib29sZWFuIHByZXNzZWQsIFN0cmluZyBwYXJ0LAorCQkJYm9vbGVhbiB0b3AsIGJvb2xlYW4gbGVmdCwgYm9vbGVhbiBib3R0b20sIGJvb2xlYW4gcmlnaHQpIHsKKwkJaW5zaWRlID0gaW5zaWRlICYmIChpbnNpZGVwYXJ0ID09IHBhcnQpOworCQlwcmVzc2VkID0gcHJlc3NlZCAmJiAocHJlc3NlZHBhcnQgPT0gcGFydCk7CisJCXBhaW50UmVjdChnLCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCBlbmFibGVkID8gY19ib3JkZXIgOiBjX2Rpc2FibGUsCisJCQllbmFibGVkID8gKChpbnNpZGUgIT0gcHJlc3NlZCkgPyBjX2hvdmVyIDoKKwkJCQkocHJlc3NlZCA/IGNfcHJlc3MgOiBjX2N0cmwpKSA6IGNfYmcsCisJCQl0b3AsIGxlZnQsIGJvdHRvbSwgcmlnaHQpOworCQlnLnNldENvbG9yKGVuYWJsZWQgPyBjX3RleHQgOiBjX2Rpc2FibGUpOworCQlwYWludEFycm93KGcsIHgsIHksIHdpZHRoLCBoZWlnaHQsIGRpcik7CisJfQorCisJLyoqCisJICoKKwkgKi8KKwlwcml2YXRlIHZvaWQgcGFpbnRBcnJvdyhHcmFwaGljcyBnLAorCQkJaW50IHgsIGludCB5LCBpbnQgd2lkdGgsIGludCBoZWlnaHQsIGNoYXIgZGlyKSB7CisJCWludCBjeCA9IHggKyB3aWR0aCAvIDIgLSAyOworCQlpbnQgY3kgPSB5ICsgaGVpZ2h0IC8gMiAtIDI7CisJCWZvciAoaW50IGkgPSAwOyBpIDwgNDsgaSsrKSB7CisJCQlpZiAoZGlyID09ICdOJykgeyAvLyBub3J0aAorCQkJCWcuZHJhd0xpbmUoY3ggKyAxIC0gaSwgY3kgKyBpLCBjeCArIDEvKjIqLyArIGksIGN5ICsgaSk7CisJCQl9CisJCQllbHNlIGlmIChkaXIgPT0gJ1cnKSB7IC8vIHdlc3QKKwkJCQlnLmRyYXdMaW5lKGN4ICsgaSwgY3kgKyAxIC0gaSwgY3ggKyBpLCBjeSArIDEvKjIqLyArIGkpOworCQkJfQorCQkJZWxzZSBpZiAoZGlyID09ICdTJykgeyAvLyBzb3V0aAorCQkJCWcuZHJhd0xpbmUoY3ggKyAxIC0gaSwgY3kgKyA0IC0gaSwgY3ggKyAxLyoyKi8gKyBpLCBjeSArIDQgLSBpKTsKKwkJCX0KKwkJCWVsc2UgeyAvLyBlYXN0CisJCQkJZy5kcmF3TGluZShjeCArIDQgLSBpLCBjeSArIDEgLSBpLCBjeCArIDQgLSBpLCBjeSArIDEvKjIqLyArIGkpOworCQkJfQorCQl9CisJfQorCisJLyoqCisJICoKKwkgKi8KKwlwcml2YXRlIHZvaWQgcGFpbnRDb250ZW50KE9iamVjdCBjb21wb25lbnQsIEdyYXBoaWNzIGcsCisJCQlpbnQgY2xpcHgsIGludCBjbGlweSwgaW50IGNsaXB3aWR0aCwgaW50IGNsaXBoZWlnaHQsCisJCQlpbnQgeCwgaW50IHksIGludCB3aWR0aCwgaW50IGhlaWdodCwgQ29sb3IgZmcsIFN0cmluZyBkZWZhdWx0YWxpZ25tZW50LAorCQkJYm9vbGVhbiBjaGVja21uZW1vbmljKSB7CisJCVN0cmluZyB0ZXh0ID0gZ2V0U3RyaW5nKGNvbXBvbmVudCwgInRleHQiLCBudWxsKTsKKwkJSW1hZ2UgaWNvbiA9IGdldEljb24oY29tcG9uZW50LCAiaWNvbiIsIG51bGwpOworCQlpZiAoKHRleHQgPT0gbnVsbCkgJiYgKGljb24gPT0gbnVsbCkpIHsgcmV0dXJuOyB9CisJCVN0cmluZyBhbGlnbm1lbnQgPSBnZXRTdHJpbmcoY29tcG9uZW50LCAiYWxpZ25tZW50IiwgZGVmYXVsdGFsaWdubWVudCk7CisKKwkJRm9udE1ldHJpY3MgZm0gPSBudWxsOyAvL2phdmEKKwkJaW50IHR3ID0gMCwgdGggPSAwOworCQlpbnQgdGEgPSAwOyAvL2phdmEKKwkJaWYgKHRleHQgIT0gbnVsbCkgeworCQkJZm0gPSBnLmdldEZvbnRNZXRyaWNzKCk7IC8vamF2YQorCQkJdHcgPSBmbS5zdHJpbmdXaWR0aCh0ZXh0KTsKKwkJCXRhID0gZm0uZ2V0QXNjZW50KCk7IC8vamF2YQorCQkJdGggPSBmbS5nZXREZXNjZW50KCkgKyB0YTsgLy9qYXZhCisJCQkvL21pZHAgdGggPSBmb250LmdldEhlaWdodCgpOworCQkJZy5zZXRDb2xvcihmZyk7CisJCX0KKwkJaW50IGl3ID0gMCwgaWggPSAwOworCQlpZiAoaWNvbiAhPSBudWxsKSB7CisJCQlpdyA9IGljb24uZ2V0V2lkdGgodGhpcyk7CisJCQlpaCA9IGljb24uZ2V0SGVpZ2h0KHRoaXMpOyAvL2phdmEKKwkJfQorCisJCWJvb2xlYW4gY2xpcHBlZCA9ICh0dyArIGl3ID4gd2lkdGgpIHx8ICh0aCA+IGhlaWdodCkgfHwgKGloID4gaGVpZ2h0KTsKKwkJaW50IGN4ID0geDsKKwkJaWYgKCJjZW50ZXIiID09IGFsaWdubWVudCkgeyBjeCArPSAod2lkdGggLSB0dyAtIGl3KSAvIDI7IH0KKwkJCWVsc2UgaWYgKCJyaWdodCIgPT0gYWxpZ25tZW50KSB7IGN4ICs9IHdpZHRoIC0gdHcgLSBpdzsgfQorCisJCWlmIChjbGlwcGVkKSB7IGcuY2xpcFJlY3QoeCwgeSwgd2lkdGgsIGhlaWdodCk7IH0KKwkJaWYgKGljb24gIT0gbnVsbCkgeworCQkJZy5kcmF3SW1hZ2UoaWNvbiwgY3gsIHkgKyAoaGVpZ2h0IC0gaWgpIC8gMiwgdGhpcyk7IC8vamF2YQorCQkJLy9taWRwIGcuZHJhd0ltYWdlKGljb24sIGN4LCB5ICsgaGVpZ2h0IC8gMiwgR3JhcGhpY3MuTEVGVCB8IEdyYXBoaWNzLlZDRU5URVIpOworCQkJY3ggKz0gaXc7CisJCX0KKwkJaWYgKHRleHQgIT0gbnVsbCkgeworCQkJaW50IHR5ID0geSArIChoZWlnaHQgLSB0aCkgLyAyICsgdGE7IC8vamF2YQorCQkJZy5kcmF3U3RyaW5nKHRleHQsIGN4LCB0eSk7IC8vamF2YQorCQkJLy9taWRwIGcuZHJhd1N0cmluZyh0ZXh0LCBjeCwgeSArIChoZWlnaHQgLSB0aCkgLyAyLCBHcmFwaGljcy5MRUZUIHwgR3JhcGhpY3MuVE9QKTsKKwkJCWlmIChjaGVja21uZW1vbmljKSB7CisJCQkJaW50IG1uZW1vbmljID0gZ2V0SW50ZWdlcihjb21wb25lbnQsICJtbmVtb25pYyIsIC0xKTsKKwkJCQlpZiAoKG1uZW1vbmljICE9IC0xKSAmJiAobW5lbW9uaWMgPCB0ZXh0Lmxlbmd0aCgpKSkgeworCQkJCQlpbnQgbXggPSBjeCArIGZtLnN0cmluZ1dpZHRoKHRleHQuc3Vic3RyaW5nKDAsIG1uZW1vbmljKSk7IC8vamF2YQorCQkJCQkvL21pZHAgaW50IG14ID0gY3ggKyBmb250LnN1YnN0cmluZ1dpZHRoKHRleHQsIDAsIG1uZW1vbmljKTsKKwkJCQkJLy9taWRwIGludCB0eSA9IChoZWlnaHQgKyB0aCkgLyAyOworCQkJCQlnLmRyYXdMaW5lKG14LCB0eSArIDEsIG14ICsgZm0uY2hhcldpZHRoKHRleHQuY2hhckF0KG1uZW1vbmljKSksIHR5ICsgMSk7CisJCQkJfQorCQkJfQorCQl9CisJCWlmIChjbGlwcGVkKSB7IGcuc2V0Q2xpcChjbGlweCwgY2xpcHksIGNsaXB3aWR0aCwgY2xpcGhlaWdodCk7IH0KKwl9CisJLy9taWRwIHByaXZhdGUgdm9pZCBzZXRUaW1lcihsb25nIGRlbGF5KSB7fQorCS8vamF2YT4KKworCS8qKgorCSAqCisJICovCisJcHVibGljIHN5bmNocm9uaXplZCB2b2lkIHJ1bigpIHsKKwkJd2hpbGUgKHRpbWVyID09IFRocmVhZC5jdXJyZW50VGhyZWFkKCkpIHsKKwkJCXRyeSB7CisJCQkJaWYgKHdhdGNoID09IDApIHsKKwkJCQkJd2FpdCgwKTsKKwkJCQl9IGVsc2UgeworCQkJCQlsb25nIGN1cnJlbnQgPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKKwkJCQkJaWYgKHdhdGNoID4gY3VycmVudCkgeworCQkJCQkJd2FpdCh3YXRjaCAtIGN1cnJlbnQpOworCQkJCQl9IGVsc2UgeworCQkJCQkJd2F0Y2ggPSAwOworCQkJCQkJaWYgKCh3YXRjaGRlbGF5ID09IDMwMEwpIHx8ICh3YXRjaGRlbGF5ID09IDYwTCkpIHsKKwkJCQkJCQlpZiAocHJvY2Vzc1Njcm9sbChtb3VzZXByZXNzZWQsIHByZXNzZWRwYXJ0KSkgeyBzZXRUaW1lcig2MEwpOyB9CisJCQkJCQl9IGVsc2UgaWYgKCh3YXRjaGRlbGF5ID09IDM3NUwpIHx8ICh3YXRjaGRlbGF5ID09IDc1TCkpIHsKKwkJCQkJCQlpZiAocHJvY2Vzc1NwaW4obW91c2VwcmVzc2VkLCBwcmVzc2VkcGFydCkpIHsgc2V0VGltZXIoNzVMKTsgfQorCQkJCQkJfSBlbHNlIGlmICh3YXRjaGRlbGF5ID09IDc1MEwpIHsKKwkJCQkJCQkvL1N5c3RlbS5vdXQucHJpbnRsbigiPiB0aXA6ICIgKyBnZXRDbGFzcyhtb3VzZWluc2lkZSkgKyAiIDogIiArICgoaW5zaWRlcGFydCBpbnN0YW5jZW9mIE9iamVjdFtdKSA/IGdldENsYXNzKGluc2lkZXBhcnQpIDogaW5zaWRlcGFydCkpOworCQkJCQkJCXNob3dUaXAoKTsKKwkJCQkJCX0KKwkJCQkJfQorCQkJCX0KKwkJCX0gY2F0Y2ggKEludGVycnVwdGVkRXhjZXB0aW9uIGllKSB7fSAvL2llLnByaW50U3RhY2tUcmFjZSgpOworCQl9CisJfQorCisJLyoqCisJICoKKwkgKi8KKwlwcml2YXRlIHZvaWQgc2V0VGltZXIobG9uZyBkZWxheSkgeworCQl3YXRjaGRlbGF5ID0gZGVsYXk7CisJCWlmIChkZWxheSA9PSAwKSB7CisJCQl3YXRjaCA9IDA7CisJCX0gZWxzZSB7CisJCQlsb25nIHByZXYgPSB3YXRjaDsKKwkJCXdhdGNoID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCkgKyBkZWxheTsKKwkJCWlmICh0aW1lciA9PSBudWxsKSB7CisJCQkJdGltZXIgPSBuZXcgVGhyZWFkKHRoaXMpOworCQkJCXRpbWVyLnNldFByaW9yaXR5KFRocmVhZC5NSU5fUFJJT1JJVFkpOworCQkJCXRpbWVyLnNldERhZW1vbih0cnVlKTsKKwkJCQl0aW1lci5zdGFydCgpOworCQkJfQorCQkJaWYgKChwcmV2ID09IDApIHx8ICh3YXRjaCA8IHByZXYpKSB7CisJCQkJc3luY2hyb25pemVkICh0aGlzKSB7IG5vdGlmeSgpOyB9IC8vdHJ5IHt9Y2F0Y2ggKElsbGVnYWxNb25pdG9yU3RhdGVFeGNlcHRpb24gaW1zZSkge30KKwkJCX0KKwkJfQorCX0KKworCS8qKgorCSAqCisJICovCisJcHVibGljIGJvb2xlYW4gaXNGb2N1c1RyYXZlcnNhYmxlKCkgeworCQlyZXR1cm4gdHJ1ZTsKKwl9CisKKwkvLzxqYXZhCisJLyptaWRwCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IE1PVVNFX0VOVEVSRUQgPSAxOworCXByaXZhdGUgc3RhdGljIGZpbmFsIGludCBNT1VTRV9FWElURUQgPSAyOyAvLworCXByaXZhdGUgc3RhdGljIGZpbmFsIGludCBNT1VTRV9QUkVTU0VEID0gMzsKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgTU9VU0VfRFJBR0dFRCA9IDQ7CisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IE1PVVNFX1JFTEVBU0VEID0gNTsKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgRFJBR19FTlRFUkVEID0gNjsKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgRFJBR19FWElURUQgPSA3OworCisJcHJvdGVjdGVkIHZvaWQgcG9pbnRlclByZXNzZWQoaW50IHgsIGludCB5KSB7CisJCWZpbmRDb21wb25lbnQoY29udGVudCwgeCwgeSk7CisJCWlmIChwb3B1cG93bmVyICE9IG51bGwpIHsKKwkJCVN0cmluZyBjbGFzc25hbWUgPSBnZXRDbGFzcyhtb3VzZWluc2lkZSk7CisJCQlpZiAoKHBvcHVwb3duZXIgIT0gbW91c2VpbnNpZGUpICYmCisJCQkJCShjbGFzc25hbWUgIT0gInBvcHVwbWVudSIpICYmIChjbGFzc25hbWUgIT0gImNvbWJvbGlzdCIpKSB7CisJCQkJY2xvc2V1cCgpOworCQkJfQorCQl9CisJCWhhbmRsZU1vdXNlRXZlbnQoeCwgeSwgMSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwKKwkJCU1vdXNlRXZlbnQuTU9VU0VfRU5URVJFRCwgbW91c2VpbnNpZGUsIGluc2lkZXBhcnQpOworCQltb3VzZXByZXNzZWQgPSBtb3VzZWluc2lkZTsKKwkJcHJlc3NlZHBhcnQgPSBpbnNpZGVwYXJ0OworCQloYW5kbGVNb3VzZUV2ZW50KHgsIHksIDEsIGZhbHNlLCBmYWxzZSwgZmFsc2UsCisJCQlNb3VzZUV2ZW50Lk1PVVNFX1BSRVNTRUQsIG1vdXNlcHJlc3NlZCwgcHJlc3NlZHBhcnQpOworCX0KKworCXByb3RlY3RlZCB2b2lkIHBvaW50ZXJSZWxlYXNlZChpbnQgeCwgaW50IHkpIHsKKwkJT2JqZWN0IG1vdXNlcmVsZWFzZSA9IG1vdXNlcHJlc3NlZDsKKwkJT2JqZWN0IHJlbGVhc2VwYXJ0ID0gcHJlc3NlZHBhcnQ7CisJCW1vdXNlcHJlc3NlZCA9IHByZXNzZWRwYXJ0ID0gbnVsbDsKKwkJaGFuZGxlTW91c2VFdmVudCh4LCB5LCAxLCBmYWxzZSwgZmFsc2UsIGZhbHNlLAorCQkJTW91c2VFdmVudC5NT1VTRV9SRUxFQVNFRCwgbW91c2VyZWxlYXNlLCByZWxlYXNlcGFydCk7CisJfQorCisJcHJvdGVjdGVkIHZvaWQgcG9pbnRlckRyYWdnZWQoaW50IHgsIGludCB5KSB7CisJCU9iamVjdCBwcmV2aW5zaWRlID0gbW91c2VpbnNpZGU7CisJCU9iamVjdCBwcmV2cGFydCA9IGluc2lkZXBhcnQ7CisJCWZpbmRDb21wb25lbnQoY29udGVudCwgeCwgeSk7CisJCWJvb2xlYW4gc2FtZSA9IChwcmV2aW5zaWRlID09IG1vdXNlaW5zaWRlKSAmJiAocHJldnBhcnQgPT0gaW5zaWRlcGFydCk7CisJCWJvb2xlYW4gaXNpbiA9IChtb3VzZXByZXNzZWQgPT0gbW91c2VpbnNpZGUpICYmIChwcmVzc2VkcGFydCA9PSBpbnNpZGVwYXJ0KTsKKwkJYm9vbGVhbiB3YXNpbiA9IChtb3VzZXByZXNzZWQgPT0gcHJldmluc2lkZSkgJiYgKHByZXNzZWRwYXJ0ID09IHByZXZwYXJ0KTsKKwkJCisJCWlmICh3YXNpbiAmJiAhaXNpbikgeworCQkJaGFuZGxlTW91c2VFdmVudCh4LCB5LCAxLCBmYWxzZSwgZmFsc2UsIGZhbHNlLAorCQkJCU1vdXNlRXZlbnQuTU9VU0VfRVhJVEVELCBtb3VzZXByZXNzZWQsIHByZXNzZWRwYXJ0KTsKKwkJfQorCQllbHNlIGlmICghc2FtZSAmJiAocG9wdXBvd25lciAhPSBudWxsKSAmJiAhd2FzaW4pIHsKKwkJCWhhbmRsZU1vdXNlRXZlbnQoeCwgeSwgMSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwKKwkJCQlEUkFHX0VYSVRFRCwgcHJldmluc2lkZSwgcHJldnBhcnQpOworCQl9CisJCWlmIChpc2luICYmICF3YXNpbikgeworCQkJaGFuZGxlTW91c2VFdmVudCh4LCB5LCAxLCBmYWxzZSwgZmFsc2UsIGZhbHNlLAorCQkJCU1vdXNlRXZlbnQuTU9VU0VfRU5URVJFRCwgbW91c2VwcmVzc2VkLCBwcmVzc2VkcGFydCk7CisJCX0KKwkJZWxzZSBpZiAoIXNhbWUgJiYgKHBvcHVwb3duZXIgIT0gbnVsbCkgJiYgIWlzaW4pIHsKKwkJCWhhbmRsZU1vdXNlRXZlbnQoeCwgeSwgMSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwKKwkJCQlEUkFHX0VOVEVSRUQsIG1vdXNlaW5zaWRlLCBpbnNpZGVwYXJ0KTsKKwkJfQorCQlpZiAoaXNpbiA9PSB3YXNpbikgeworCQkJaGFuZGxlTW91c2VFdmVudCh4LCB5LCAxLCBmYWxzZSwgZmFsc2UsIGZhbHNlLAorCQkJCU1vdXNlRXZlbnQuTU9VU0VfRFJBR0dFRCwgbW91c2VwcmVzc2VkLCBwcmVzc2VkcGFydCk7CisJCX0KKwl9CisKKwlwcm90ZWN0ZWQgdm9pZCBrZXlQcmVzc2VkKGludCBrZXlDb2RlKSB7CisJCWlmICgocG9wdXBvd25lciAhPSBudWxsKSB8fCAoZm9jdXNvd25lciAhPSBudWxsKSkgeworCQkJaGlkZVRpcCgpOworCQkJaWYgKGtleUNvZGUgPiAwKSB7CisJCQkJcHJvY2Vzc0tleVByZXNzKChwb3B1cG93bmVyICE9IG51bGwpID8gcG9wdXBvd25lciA6IGZvY3Vzb3duZXIsCisJCQkJCWZhbHNlLCBmYWxzZSwgMSwga2V5Q29kZSwgMCk7CisJCQl9CisJCQllbHNlIHsKKwkJCQlpbnQga2V5Y2hhciA9IDAsIGtleSA9IDA7CisJCQkJc3dpdGNoIChnZXRHYW1lQWN0aW9uKGtleUNvZGUpKSB7CisJCQkJCWNhc2UgVVA6IGtleSA9IEtleUV2ZW50LlZLX1VQOyBicmVhazsKKwkJCQkJY2FzZSBMRUZUOiBrZXkgPSBLZXlFdmVudC5WS19MRUZUOyBicmVhazsKKwkJCQkJY2FzZSBET1dOOiBrZXkgPSBLZXlFdmVudC5WS19ET1dOOyBicmVhazsKKwkJCQkJY2FzZSBSSUdIVDoga2V5ID0gS2V5RXZlbnQuVktfUklHSFQ7IGJyZWFrOworCQkJCQljYXNlIEZJUkU6IGtleSA9IEtleUV2ZW50LlZLX0VOVEVSOyBrZXljaGFyID0gS2V5RXZlbnQuVktfU1BBQ0U7IGJyZWFrOworCQkJCQljYXNlIEdBTUVfQToga2V5ID0gS2V5RXZlbnQuVktfRVNDQVBFOyBicmVhazsKKwkJCQl9CisJCQkJaWYgKGtleSAhPSAwKSB7CisJCQkJCXByb2Nlc3NLZXlQcmVzcygocG9wdXBvd25lciAhPSBudWxsKSA/IHBvcHVwb3duZXIgOiBmb2N1c293bmVyLAorCQkJCQkJZmFsc2UsIGZhbHNlLCAxLCBrZXljaGFyLCBrZXkpOworCQkJCX0KKwkJCQkvL2lmIChrZXlDb2RlID09IGdldEtleUNvZGUoTEVGVCkpIHsKKwkJCX0KKwkJfQorCX0KKworCXByb3RlY3RlZCB2b2lkIGtleVJlcGVhdGVkKGludCBrZXlDb2RlKSB7CisJCWtleVByZXNzZWQoa2V5Q29kZSk7CisJfQorCQorCXByaXZhdGUgc3RhdGljIGZpbmFsIENvbW1hbmQgbmV4dGNvbW1hbmQgPSBuZXcgQ29tbWFuZCgiTmV4dCIsIENvbW1hbmQuU0NSRUVOLCAwKTsKKwkvL3ByaXZhdGUgc3RhdGljIGZpbmFsIENvbW1hbmQgcHJldmNvbW1hbmQgPSBuZXcgQ29tbWFuZCgiUHJldmlvdXMiLCBDb21tYW5kLlNDUkVFTiwgMCk7CisJeworCQlhZGRDb21tYW5kKG5leHRjb21tYW5kKTsKKwkJLy9hZGRDb21tYW5kKHByZXZjb21tYW5kKTsKKwkJc2V0Q29tbWFuZExpc3RlbmVyKHRoaXMpOworCX0KKwkKKwlwdWJsaWMgdm9pZCBjb21tYW5kQWN0aW9uKENvbW1hbmQgY29tbWFuZCwgRGlzcGxheWFibGUgZGlzcGxheWFibGUpIHsKKwkJaWYgKGNvbW1hbmQgPT0gbmV4dGNvbW1hbmQpIHsKKwkJCXNldE5leHRGb2N1c2FibGUoZm9jdXNvd25lciwgZmFsc2UpOworCQkJcmVwYWludChmb2N1c293bmVyKTsKKwkJCWNsb3NldXAoKTsKKwkJfQorCQkvL2Vsc2UgaWYgKGNvbW1hbmQgPT0gcHJldmNvbW1hbmQpIHsKKwkJCS8vc2V0UHJldmlvdXNGb2N1c2FibGUoZm9jdXNvd25lciwgbnVsbCwgdHJ1ZSwgdHJ1ZSwgZmFsc2UpOworCQkJLy9yZXBhaW50KGZvY3Vzb3duZXIpOworCQkJLy9jbG9zZXVwKCk7CisJCS8vfQorCX0KKwltaWRwKi8KKwkvL2phdmE+CisKKwkvKioKKwkgKgorCSAqLworCXByb3RlY3RlZCB2b2lkIHByb2Nlc3NFdmVudChBV1RFdmVudCBlKSB7CisJCWludCBpZCA9IGUuZ2V0SUQoKTsKKwkJaWYgKChpZCA+PSBNb3VzZUV2ZW50Lk1PVVNFX0ZJUlNUKSAmJiAoaWQgPD0gTW91c2VFdmVudC5NT1VTRV9MQVNUKSkgeworCQkJTW91c2VFdmVudCBtZSA9IChNb3VzZUV2ZW50KSBlOworCQkJaW50IHggPSBtZS5nZXRYKCk7CisJCQlpbnQgeSA9IG1lLmdldFkoKTsKKwkJCWludCBjbGlja2NvdW50ID0gbWUuZ2V0Q2xpY2tDb3VudCgpOworCQkJYm9vbGVhbiBzaGlmdGRvd24gPSBtZS5pc1NoaWZ0RG93bigpOworCQkJYm9vbGVhbiBjb250cm9sZG93biA9IG1lLmlzQ29udHJvbERvd24oKTsKKwkJCWJvb2xlYW4gcG9wdXB0cmlnZ2VyID0gbWUuaXNQb3B1cFRyaWdnZXIoKTsKKwkJCWlmIChpZCA9PSBNb3VzZUV2ZW50Lk1PVVNFX0VOVEVSRUQpIHsKKwkJCQlpZiAobW91c2VwcmVzc2VkID09IG51bGwpIHsKKwkJCQkJZmluZENvbXBvbmVudChjb250ZW50LCB4LCB5KTsKKwkJCQkJaGFuZGxlTW91c2VFdmVudCh4LCB5LCBjbGlja2NvdW50LCBzaGlmdGRvd24sIGNvbnRyb2xkb3duLCBwb3B1cHRyaWdnZXIsCisJCQkJCQlNb3VzZUV2ZW50Lk1PVVNFX0VOVEVSRUQsIG1vdXNlaW5zaWRlLCBpbnNpZGVwYXJ0KTsKKwkJCQl9CisJCQl9CisJCQllbHNlIGlmIChpZCA9PSBNb3VzZUV2ZW50Lk1PVVNFX01PVkVEKSB7CisJCQkJT2JqZWN0IHByZXZpbnNpZGUgPSBtb3VzZWluc2lkZTsKKwkJCQlPYmplY3QgcHJldnBhcnQgPSBpbnNpZGVwYXJ0OworCQkJCWZpbmRDb21wb25lbnQoY29udGVudCwgeCwgeSk7CisJCQkJaWYgKChwcmV2aW5zaWRlID09IG1vdXNlaW5zaWRlKSAmJiAocHJldnBhcnQgPT0gaW5zaWRlcGFydCkpIHsKKwkJCQkJaGFuZGxlTW91c2VFdmVudCh4LCB5LCBjbGlja2NvdW50LCBzaGlmdGRvd24sIGNvbnRyb2xkb3duLCBwb3B1cHRyaWdnZXIsCisJCQkJCQlNb3VzZUV2ZW50Lk1PVVNFX01PVkVELCBtb3VzZWluc2lkZSwgaW5zaWRlcGFydCk7CisJCQkJfQorCQkJCWVsc2UgeworCQkJCQloYW5kbGVNb3VzZUV2ZW50KHgsIHksIGNsaWNrY291bnQsIHNoaWZ0ZG93biwgY29udHJvbGRvd24sIHBvcHVwdHJpZ2dlciwKKwkJCQkJCU1vdXNlRXZlbnQuTU9VU0VfRVhJVEVELCBwcmV2aW5zaWRlLCBwcmV2cGFydCk7CisJCQkJCWhhbmRsZU1vdXNlRXZlbnQoeCwgeSwgY2xpY2tjb3VudCwgc2hpZnRkb3duLCBjb250cm9sZG93biwgcG9wdXB0cmlnZ2VyLAorCQkJCQkJTW91c2VFdmVudC5NT1VTRV9FTlRFUkVELCBtb3VzZWluc2lkZSwgaW5zaWRlcGFydCk7CisJCQkJfQorCQkJfQorCQkJZWxzZSBpZiAoaWQgPT0gTW91c2VFdmVudC5NT1VTRV9FWElURUQpIHsKKwkJCQlpZiAobW91c2VwcmVzc2VkID09IG51bGwpIHsKKwkJCQkJT2JqZWN0IG1vdXNlZXhpdCA9IG1vdXNlaW5zaWRlOworCQkJCQlPYmplY3QgZXhpdHBhcnQgPSBpbnNpZGVwYXJ0OworCQkJCQltb3VzZWluc2lkZSA9IGluc2lkZXBhcnQgPSBudWxsOworCQkJCQloYW5kbGVNb3VzZUV2ZW50KHgsIHksIGNsaWNrY291bnQsIHNoaWZ0ZG93biwgY29udHJvbGRvd24sIHBvcHVwdHJpZ2dlciwKKwkJCQkJCU1vdXNlRXZlbnQuTU9VU0VfRVhJVEVELCBtb3VzZWV4aXQsIGV4aXRwYXJ0KTsKKwkJCQl9CisJCQl9CisJCQllbHNlIGlmIChpZCA9PSBNb3VzZUV2ZW50Lk1PVVNFX1BSRVNTRUQpIHsKKwkJCQlpZiAocG9wdXBvd25lciAhPSBudWxsKSB7CisJCQkJCVN0cmluZyBjbGFzc25hbWUgPSBnZXRDbGFzcyhtb3VzZWluc2lkZSk7CisJCQkJCWlmICgocG9wdXBvd25lciAhPSBtb3VzZWluc2lkZSkgJiYKKwkJCQkJCQkoY2xhc3NuYW1lICE9ICJwb3B1cG1lbnUiKSAmJiAoY2xhc3NuYW1lICE9ICJjb21ib2xpc3QiKSkgeworCQkJCQkJY2xvc2V1cCgpOworCQkJCQl9CisJCQkJfQorCQkJCW1vdXNlcHJlc3NlZCA9IG1vdXNlaW5zaWRlOworCQkJCXByZXNzZWRwYXJ0ID0gaW5zaWRlcGFydDsKKwkJCQloYW5kbGVNb3VzZUV2ZW50KHgsIHksIGNsaWNrY291bnQsIHNoaWZ0ZG93biwgY29udHJvbGRvd24sIHBvcHVwdHJpZ2dlciwKKwkJCQkJTW91c2VFdmVudC5NT1VTRV9QUkVTU0VELCBtb3VzZXByZXNzZWQsIHByZXNzZWRwYXJ0KTsKKwkJCX0KKwkJCWVsc2UgaWYgKGlkID09IE1vdXNlRXZlbnQuTU9VU0VfRFJBR0dFRCkgeworCQkJCU9iamVjdCBwcmV2aW5zaWRlID0gbW91c2VpbnNpZGU7CisJCQkJT2JqZWN0IHByZXZwYXJ0ID0gaW5zaWRlcGFydDsKKwkJCQlmaW5kQ29tcG9uZW50KGNvbnRlbnQsIHgsIHkpOworCQkJCWJvb2xlYW4gc2FtZSA9IChwcmV2aW5zaWRlID09IG1vdXNlaW5zaWRlKSAmJiAocHJldnBhcnQgPT0gaW5zaWRlcGFydCk7CisJCQkJYm9vbGVhbiBpc2luID0gKG1vdXNlcHJlc3NlZCA9PSBtb3VzZWluc2lkZSkgJiYgKHByZXNzZWRwYXJ0ID09IGluc2lkZXBhcnQpOworCQkJCWJvb2xlYW4gd2FzaW4gPSAobW91c2VwcmVzc2VkID09IHByZXZpbnNpZGUpICYmIChwcmVzc2VkcGFydCA9PSBwcmV2cGFydCk7CisJCQkJCisJCQkJaWYgKHdhc2luICYmICFpc2luKSB7CisJCQkJCWhhbmRsZU1vdXNlRXZlbnQoeCwgeSwgY2xpY2tjb3VudCwgc2hpZnRkb3duLCBjb250cm9sZG93biwgcG9wdXB0cmlnZ2VyLAorCQkJCQkJTW91c2VFdmVudC5NT1VTRV9FWElURUQsIG1vdXNlcHJlc3NlZCwgcHJlc3NlZHBhcnQpOworCQkJCX0KKwkJCQllbHNlIGlmICghc2FtZSAmJiAocG9wdXBvd25lciAhPSBudWxsKSAmJiAhd2FzaW4pIHsKKwkJCQkJaGFuZGxlTW91c2VFdmVudCh4LCB5LCBjbGlja2NvdW50LCBzaGlmdGRvd24sIGNvbnRyb2xkb3duLCBwb3B1cHRyaWdnZXIsCisJCQkJCQlEUkFHX0VYSVRFRCwgcHJldmluc2lkZSwgcHJldnBhcnQpOworCQkJCX0KKwkJCQlpZiAoaXNpbiAmJiAhd2FzaW4pIHsKKwkJCQkJaGFuZGxlTW91c2VFdmVudCh4LCB5LCBjbGlja2NvdW50LCBzaGlmdGRvd24sIGNvbnRyb2xkb3duLCBwb3B1cHRyaWdnZXIsCisJCQkJCQlNb3VzZUV2ZW50Lk1PVVNFX0VOVEVSRUQsIG1vdXNlcHJlc3NlZCwgcHJlc3NlZHBhcnQpOworCQkJCX0KKwkJCQllbHNlIGlmICghc2FtZSAmJiAocG9wdXBvd25lciAhPSBudWxsKSAmJiAhaXNpbikgeworCQkJCQloYW5kbGVNb3VzZUV2ZW50KHgsIHksIGNsaWNrY291bnQsIHNoaWZ0ZG93biwgY29udHJvbGRvd24sIHBvcHVwdHJpZ2dlciwKKwkJCQkJCURSQUdfRU5URVJFRCwgbW91c2VpbnNpZGUsIGluc2lkZXBhcnQpOworCQkJCX0KKwkJCQlpZiAoaXNpbiA9PSB3YXNpbikgeworCQkJCQloYW5kbGVNb3VzZUV2ZW50KHgsIHksIGNsaWNrY291bnQsIHNoaWZ0ZG93biwgY29udHJvbGRvd24sIHBvcHVwdHJpZ2dlciwKKwkJCQkJCU1vdXNlRXZlbnQuTU9VU0VfRFJBR0dFRCwgbW91c2VwcmVzc2VkLCBwcmVzc2VkcGFydCk7CisJCQkJfQorCQkJfQorCQkJZWxzZSBpZiAoaWQgPT0gTW91c2VFdmVudC5NT1VTRV9SRUxFQVNFRCkgeworCQkJCU9iamVjdCBtb3VzZXJlbGVhc2UgPSBtb3VzZXByZXNzZWQ7CisJCQkJT2JqZWN0IHJlbGVhc2VwYXJ0ID0gcHJlc3NlZHBhcnQ7CisJCQkJbW91c2VwcmVzc2VkID0gcHJlc3NlZHBhcnQgPSBudWxsOworCQkJCWhhbmRsZU1vdXNlRXZlbnQoeCwgeSwgY2xpY2tjb3VudCwgc2hpZnRkb3duLCBjb250cm9sZG93biwgcG9wdXB0cmlnZ2VyLAorCQkJCQlNb3VzZUV2ZW50Lk1PVVNFX1JFTEVBU0VELCBtb3VzZXJlbGVhc2UsIHJlbGVhc2VwYXJ0KTsKKwkJCQlpZiAoKG1vdXNlaW5zaWRlICE9IG51bGwpICYmCisJCQkJCQkoKG1vdXNlcmVsZWFzZSAhPSBtb3VzZWluc2lkZSkgfHwgKHJlbGVhc2VwYXJ0ICE9IGluc2lkZXBhcnQpKSkgeworCQkJCQloYW5kbGVNb3VzZUV2ZW50KHgsIHksIGNsaWNrY291bnQsIHNoaWZ0ZG93biwgY29udHJvbGRvd24sIHBvcHVwdHJpZ2dlciwKKwkJCQkJCU1vdXNlRXZlbnQuTU9VU0VfRU5URVJFRCwgbW91c2VpbnNpZGUsIGluc2lkZXBhcnQpOworCQkJCX0KKwkJCX0KKwkJfQorCQllbHNlIGlmIChpZCA9PSBNT1VTRV9XSEVFTCkgeworCQkJUmVjdGFuZ2xlIHBvcnQgPSBnZXRSZWN0YW5nbGUobW91c2VpbnNpZGUsICI6cG9ydCIpOworCQkJaWYgKHBvcnQgIT0gbnVsbCkgeyAvLyBpcyBzY3JvbGxhYmxlCisJCQkJUmVjdGFuZ2xlIGJvdW5kcyA9IGdldFJlY3RhbmdsZShtb3VzZWluc2lkZSwgImJvdW5kcyIpOwkKKwkJCQl0cnkgeyAvLyBtb3VzZSB3aGVlbCBpcyBzdXBwb3J0ZWQgc2luY2UgMS40IHRodXMgaXQgdXNlIHJlZmxlY3Rpb24KKwkJCQkJaWYgKHdoZWVscm90YXRpb24gPT0gbnVsbCkgeworCQkJCQkJd2hlZWxyb3RhdGlvbiA9IGUuZ2V0Q2xhc3MoKS5nZXRNZXRob2QoImdldFdoZWVsUm90YXRpb24iLCBudWxsKTsKKwkJCQkJfQorCQkJCQlpbnQgcm90YXRpb24gPSAoKEludGVnZXIpIHdoZWVscm90YXRpb24uaW52b2tlKGUsIG51bGwpKS5pbnRWYWx1ZSgpOworCQkJCQkKKwkJCQkJaWYgKHBvcnQueCArIHBvcnQud2lkdGggPCBib3VuZHMud2lkdGgpIHsgLy8gaGFzIHZlcnRpY2FsIHNjcm9sbGJhcgorCQkJCQkJcHJvY2Vzc1Njcm9sbChtb3VzZWluc2lkZSwgKHJvdGF0aW9uID4gMCkgPyAiZG93biIgOiAidXAiKTsKKwkJCQkJfQorCQkJCQllbHNlIGlmIChwb3J0LnkgKyBwb3J0LmhlaWdodCA8IGJvdW5kcy5oZWlnaHQpIHsgLy8gaGFzIGhvcml6b250YWwgc2Nyb2xsYmFyCisJCQkJCQlwcm9jZXNzU2Nyb2xsKG1vdXNlaW5zaWRlLCAocm90YXRpb24gPiAwKSA/ICJyaWdodCIgOiAibGVmdCIpOworCQkJCQl9CisJCQkJfSBjYXRjaCAoRXhjZXB0aW9uIGV4YykgeyAvKiBuZXZlciAqLyB9CisJCQl9CisJCX0KKwkJZWxzZSBpZiAoKGlkID09IEtleUV2ZW50LktFWV9QUkVTU0VEKSB8fCAoaWQgPT0gS2V5RXZlbnQuS0VZX1RZUEVEKSkgeworCQkJaWYgKGZvY3VzaW5zaWRlICYmICgocG9wdXBvd25lciAhPSBudWxsKSB8fCAoZm9jdXNvd25lciAhPSBudWxsKSkpIHsKKwkJCQloaWRlVGlwKCk7CisJCQkJS2V5RXZlbnQga2UgPSAoS2V5RXZlbnQpIGU7CisJCQkJaW50IGtleWNoYXIgPSBrZS5nZXRLZXlDaGFyKCk7CisJCQkJYm9vbGVhbiBjb250cm9sID0gKGtleWNoYXIgPD0gMHgxZikgfHwKKwkJCQkJKChrZXljaGFyID49IDB4N2YpICYmIChrZXljaGFyIDw9IDB4OWYpKSB8fAorCQkJCQkoa2V5Y2hhciA+PSAweGZmZmYpIHx8IGtlLmlzQ29udHJvbERvd24oKTsKKwkJCQlpZiAoY29udHJvbCA9PSAoaWQgPT0gS2V5RXZlbnQuS0VZX1BSRVNTRUQpKSB7CisJCQkJCWludCBrZXljb2RlID0gY29udHJvbCA/IGtlLmdldEtleUNvZGUoKSA6IDA7CisJCQkJCWlmICghcHJvY2Vzc0tleVByZXNzKChwb3B1cG93bmVyICE9IG51bGwpID8gcG9wdXBvd25lciA6IGZvY3Vzb3duZXIsCisJCQkJCQkJa2UuaXNTaGlmdERvd24oKSwga2UuaXNDb250cm9sRG93bigpLCBrZS5nZXRNb2RpZmllcnMoKSwKKwkJCQkJCQljb250cm9sID8gMCA6IGtleWNoYXIsIGtleWNvZGUpKSB7CisJCQkJCQlpZiAoKGtleWNvZGUgPT0gS2V5RXZlbnQuVktfVEFCKSB8fAorCQkJCQkJCQkoKGtleWNvZGUgPT0gS2V5RXZlbnQuVktfRjYpICYmIChrZS5pc0FsdERvd24oKSB8fCBrZS5pc0NvbnRyb2xEb3duKCkpKSkgeworCQkJCQkJCWJvb2xlYW4gb3V0Z28gPSAoa2V5Y29kZSA9PSBLZXlFdmVudC5WS19GNik7CisJCQkJCQkJaWYgKCFrZS5pc1NoaWZ0RG93bigpID8gc2V0TmV4dEZvY3VzYWJsZShmb2N1c293bmVyLCBvdXRnbykgOgorCQkJCQkJCQkJc2V0UHJldmlvdXNGb2N1c2FibGUoZm9jdXNvd25lciwgb3V0Z28pKSB7CisJCQkJCQkJCWtlLmNvbnN1bWUoKTsKKwkJCQkJCQl9IGVsc2UgaWYgKE1PVVNFX1dIRUVMICE9IDApIHsgLy8gMS40CisJCQkJCQkJCWlmICgha2UuaXNTaGlmdERvd24oKSkgeworCQkJCQkJCQkJdHJhbnNmZXJGb2N1cygpOworCQkJCQkJCQl9CisJCQkJCQkJCWVsc2UgeyB0cnkgeworCQkJCQkJCQkJCWdldENsYXNzKCkuZ2V0TWV0aG9kKCJ0cmFuc2ZlckZvY3VzQmFja3dhcmQiLCBudWxsKS4gaW52b2tlKHRoaXMsIG51bGwpOworCQkJCQkJCQl9IGNhdGNoIChFeGNlcHRpb24gZXhjKSB7IC8qIG5ldmVyICovIH0gfQorCQkJCQkJCX0KKwkJCQkJCQlyZXBhaW50KGZvY3Vzb3duZXIpOworCQkJCQkJCWNsb3NldXAoKTsKKwkJCQkJCX0KKwkJCQkJCWVsc2UgaWYgKGtleWNvZGUgPT0gS2V5RXZlbnQuVktfRjgpIHsKKwkJCQkJCQlmb3IgKE9iamVjdCBzcGxpdHBhbmUgPSBmb2N1c293bmVyOworCQkJCQkJCQkJc3BsaXRwYW5lICE9IG51bGw7IHNwbGl0cGFuZSA9IGdldFBhcmVudChzcGxpdHBhbmUpKSB7CisJCQkJCQkJCWlmIChnZXRDbGFzcyhzcGxpdHBhbmUpID09ICJzcGxpdHBhbmUiKSB7CisJCQkJCQkJCQlzZXRGb2N1cyhzcGxpdHBhbmUpOyByZXBhaW50KHNwbGl0cGFuZSk7IGJyZWFrOyAvL21pZGRsZQorCQkJCQkJCQl9CisJCQkJCQkJfQorCQkJCQkJfQorCQkJCQl9CisJCQkJCWVsc2Uga2UuY29uc3VtZSgpOworCQkJCQkvKmVsc2UgaWYgKGtleWNvZGUgPT0gS2V5RXZlbnQuVktfRjEwKSB7CisJCQkJCQlPYmplY3QgbWVudWJhciA9IG51bGw7IC8vIGZpbmQoImNsYXNzIiwgIm1lbnViYXIiKQorCQkJCQkJaWYgKChtZW51YmFyICE9IG51bGwpICYmIChnZXQobWVudWJhciwgInNlbGVjdGVkIikgPT0gbnVsbCkpIHsKKwkJCQkJCQlzZXQobWVudWJhciwgInNlbGVjdGVkIiwgZ2V0TWVudShtZW51YmFyLCBudWxsLCB0cnVlLCBmYWxzZSkpOworCQkJCQkJCU9iamVjdCBwb3B1cCA9IHBvcHVwKG1lbnViYXIsICJtZW51YmFyIik7CisJCQkJCQkJc2V0KHBvcHVwLCAic2VsZWN0ZWQiLCBnZXRNZW51KHBvcHVwLCBudWxsLCB0cnVlLCB0cnVlKSk7CisJCQkJCQkJcmVwYWludChtZW51YmFyKTsgLy8gLCBzZWxlY3RlZAorCQkJCQkJfQorCQkJCQl9Ki8KKwkJCQl9CisJCQl9CisJCX0KKwkJLyplbHNlIGlmIChpZCA9PSBLZXlFdmVudC5LRVlfUkVMRUFTRUQpIHsKKwkJCWlmIChmb2N1c2luc2lkZSAmJiAoZm9jdXNvd25lciAhPSBudWxsKSkgeworCQkJCUtleUV2ZW50IGtlID0gKEtleUV2ZW50KSBlOworCQkJCS8vcHJlc3NlZGtleSA9IDA7CisJCQkJcHJvY2Vzc0tleVJlbGVhc2UoZm9jdXNvd25lciwga2UsIGtlLmdldEtleUNvZGUoKSk7CisJCQl9CisJCX0qLworCQllbHNlIGlmIChpZCA9PSBGb2N1c0V2ZW50LkZPQ1VTX0xPU1QpIHsKKwkJCWZvY3VzaW5zaWRlID0gZmFsc2U7CisJCQlpZiAoZm9jdXNvd25lciAhPSBudWxsKSB7IHJlcGFpbnQoZm9jdXNvd25lcik7IH0KKwkJCWNsb3NldXAoKTsKKwkJfQorCQllbHNlIGlmIChpZCA9PSBGb2N1c0V2ZW50LkZPQ1VTX0dBSU5FRCkgeworCQkJZm9jdXNpbnNpZGUgPSB0cnVlOworCQkJaWYgKGZvY3Vzb3duZXIgPT0gbnVsbCkgeyBzZXRGb2N1cyhjb250ZW50KTsgfQorCQkJCWVsc2UgeyByZXBhaW50KGZvY3Vzb3duZXIpOyB9CisJCX0KKwkJZWxzZSBpZiAoKGlkID09IENvbXBvbmVudEV2ZW50LkNPTVBPTkVOVF9SRVNJWkVEKSB8fAorCQkJCShpZCA9PSBDb21wb25lbnRFdmVudC5DT01QT05FTlRfU0hPV04pKSB7CisJCQlEaW1lbnNpb24gZCA9IGdldFNpemUoKTsKKwkJCS8vU3lzdGVtLm91dC5wcmludGxuKGlkICsgIjogIiArIGQud2lkdGggKyAiLCAiICsgZC5oZWlnaHQpOworCQkJc2V0UmVjdGFuZ2xlKGNvbnRlbnQsICJib3VuZHMiLCAwLCAwLCBkLndpZHRoLCBkLmhlaWdodCk7CisJCQl2YWxpZGF0ZShjb250ZW50KTsKKwkJCWNsb3NldXAoKTsKKwkJCWlmICghZm9jdXNpbnNpZGUpICB7IHJlcXVlc3RGb2N1cygpOyB9CisJCX0KKwl9CisKKwkvKioKKwkgKgorCSAqLworCS8qcHJpdmF0ZSBib29sZWFuIHByb2Nlc3NLZXlQcmVzcyhPYmplY3QgY29tcG9uZW50LAorCQkJS2V5RXZlbnQgZSwgaW50IGtleWNvZGUsIE9iamVjdCBpbnZva2VyKSB7CisJCWlmIChwcm9jZXNzS2V5UHJlc3MoY29tcG9uZW50LCBlLCBrZXljb2RlKSkgeyByZXR1cm4gdHJ1ZTsgfQorCQlmb3IgKE9iamVjdCBjb21wID0gZ2V0KGNvbXBvbmVudCwgImNvbXBvbmVudCIpOworCQkJCWNvbXAgIT0gbnVsbDsgY29tcCA9IGdldChjb21wLCAiOm5leHQiKSkgeworCQkJaWYgKChjb21wICE9IGludm9rZXIpICYmIHByb2Nlc3NLZXlQcmVzcyhjb21wLCBlLCBrZXljb2RlLCBudWxsKSkgeworCQkJCXJldHVybiB0cnVlOworCQkJfQorCQl9CisJCWlmICgoaW52b2tlciAhPSBudWxsKSAmJiAoY29tcG9uZW50ICE9IGNvbnRlbnQpKSB7CisJCQlPYmplY3QgcGFyZW50ID0gZ2V0UGFyZW50KGNvbXBvbmVudCk7CisJCQlpZiAocGFyZW50ICE9IG51bGwpIHsKKwkJCQlyZXR1cm4gcHJvY2Vzc0tleVByZXNzKHBhcmVudCwgZSwga2V5Y29kZSwgY29tcG9uZW50KTsKKwkJCX0KKwkJfQorCQlyZXR1cm4gZmFsc2U7CisJfSovCisJLy88amF2YQorCisJLyoqCisJICoKKwkgKi8KKwlwcml2YXRlIGJvb2xlYW4gcHJvY2Vzc0tleVByZXNzKE9iamVjdCBjb21wb25lbnQsCisJCQlib29sZWFuIHNoaWZ0ZG93biwgYm9vbGVhbiBjb250cm9sZG93biwgaW50IG1vZGlmaWVycywgaW50IGtleWNoYXIsIGludCBrZXljb2RlKSB7CisJCVN0cmluZyBjbGFzc25hbWUgPSBnZXRDbGFzcyhjb21wb25lbnQpOworCQlpZiAoImJ1dHRvbiIgPT0gY2xhc3NuYW1lKSB7CisJCQlpZiAoa2V5Y2hhciA9PSBLZXlFdmVudC5WS19TUEFDRSB8fAorCQkJCQkoKGtleWNvZGUgPT0gS2V5RXZlbnQuVktfRU5URVIpICYmCisJCQkJCQkoZ2V0U3RyaW5nKGNvbXBvbmVudCwgInR5cGUiLCBudWxsKSA9PSAiZGVmYXVsdCIpKSB8fAorCQkJCQkoKGtleWNvZGUgPT0gS2V5RXZlbnQuVktfRVNDQVBFKSAmJiAvLy4uLgorCQkJCQkJKGdldFN0cmluZyhjb21wb25lbnQsICJ0eXBlIiwgbnVsbCkgPT0gImNhbmNlbCIpKSkgeworCQkJCS8vcHJlc3NlZGtleSA9IGtleWNoYXI7CisJCQkJaW52b2tlKGNvbXBvbmVudCwgImFjdGlvbiIpOworCQkJCXJlcGFpbnQoY29tcG9uZW50KTsKKwkJCQlyZXR1cm4gdHJ1ZTsKKwkJCX0KKwkJfQorCQllbHNlIGlmICgiY2hlY2tib3giID09IGNsYXNzbmFtZSkgeworCQkJaWYgKGtleWNoYXIgPT0gS2V5RXZlbnQuVktfU1BBQ0UpIHsKKwkJCQljaGFuZ2VDaGVjayhjb21wb25lbnQsIHRydWUpOworCQkJCXJlcGFpbnQoY29tcG9uZW50KTsKKwkJCQlyZXR1cm4gdHJ1ZTsKKwkJCX0KKwkJfQorCQllbHNlIGlmICgiY29tYm9ib3giID09IGNsYXNzbmFtZSkgeworCQkJT2JqZWN0IGNvbWJvbGlzdCA9IGdldChjb21wb25lbnQsICJjb21ib2xpc3QiKTsKKwkJCWlmIChjb21ib2xpc3QgPT0gbnVsbCkgeworCQkJCWlmIChnZXRCb29sZWFuKGNvbXBvbmVudCwgImVkaXRhYmxlIiwgdHJ1ZSkgJiYKKwkJCQkJCXByb2Nlc3NGaWVsZChjb21wb25lbnQsIHNoaWZ0ZG93biwgY29udHJvbGRvd24sIG1vZGlmaWVycywKKwkJCQkJCQlrZXljaGFyLCBrZXljb2RlLCBmYWxzZSwgZmFsc2UpKSB7CisJCQkJCXNldEludGVnZXIoY29tcG9uZW50LCAic2VsZWN0ZWQiLCAtMSwgLTEpOworCQkJCQlyZXR1cm4gdHJ1ZTsKKwkJCQl9CisJCQkJaWYgKChrZXljaGFyID09IEtleUV2ZW50LlZLX1NQQUNFKSB8fCAoa2V5Y29kZSA9PSBLZXlFdmVudC5WS19ET1dOKSkgeworCQkJCQljb21ib2xpc3QgPSBwb3B1cChjb21wb25lbnQsIGNsYXNzbmFtZSk7CisJCQkJCWludCBzZWxlY3RlZCA9IGdldEludGVnZXIoY29tcG9uZW50LCAic2VsZWN0ZWQiLCAtMSk7CisJCQkJCXNldChjb21ib2xpc3QsICJpbnNpZGUiLCAoc2VsZWN0ZWQgIT0gLTEpID8KKwkJCQkJCWdldEl0ZW1JbXBsKGNvbXBvbmVudCwgImNob2ljZSIsIHNlbGVjdGVkKSA6CisJCQkJCQlnZXQoY29tcG9uZW50LCAiY2hvaWNlIikpOyAvL3Njcm9sbCB0byBpdCEKKwkJCQl9CisJCQkJZWxzZSByZXR1cm4gZmFsc2U7CisJCQl9IGVsc2UgeworCQkJCWlmICgoa2V5Y29kZSA9PSBLZXlFdmVudC5WS19VUCkgfHwKKwkJCQkJCShrZXljb2RlID09IEtleUV2ZW50LlZLX0RPV04pIHx8IChrZXljb2RlID09IEtleUV2ZW50LlZLX1BBR0VfVVApIHx8CisJCQkJCQkoa2V5Y29kZSA9PSBLZXlFdmVudC5WS19QQUdFX0RPV04pIHx8CisJCQkJCQkoa2V5Y29kZSA9PSBLZXlFdmVudC5WS19IT01FKSB8fCAoa2V5Y29kZSA9PSBLZXlFdmVudC5WS19FTkQpKSB7CisJCQkJCU9iamVjdCBzZWxlY3RlZCA9IGdldChjb21ib2xpc3QsICJpbnNpZGUiKTsKKwkJCQkJT2JqZWN0IG5leHQgPSBnZXRMaXN0SXRlbShjb21wb25lbnQsIGNvbWJvbGlzdCwKKwkJCQkJCWtleWNvZGUsIHNlbGVjdGVkLCAiY2hvaWNlIiwgbnVsbCk7CisJCQkJCWlmIChuZXh0ICE9IG51bGwpIHsKKwkJCQkJCXNldChjb21ib2xpc3QsICJpbnNpZGUiLCBuZXh0KTsKKwkJCQkJCVJlY3RhbmdsZSByID0gZ2V0UmVjdGFuZ2xlKG5leHQsICJib3VuZHMiKTsKKwkJCQkJCXNjcm9sbFRvVmlzaWJsZShjb21ib2xpc3QsIHIueCwgci55LCAwLCByLmhlaWdodCk7CisJCQkJCQlpZiAoc2VsZWN0ZWQgIT0gbnVsbCkgeyByZXBhaW50KGNvbWJvbGlzdCwgImNvbWJvbGlzdCIsIHNlbGVjdGVkKTsgfSAKKwkJCQkJCXJlcGFpbnQoY29tYm9saXN0LCAiY29tYm9saXN0IiwgbmV4dCk7CisJCQkJCX0KKwkJCQl9CisJCQkJZWxzZSBpZiAoKGtleWNvZGUgPT0gS2V5RXZlbnQuVktfRU5URVIpIHx8IChrZXljaGFyID09IEtleUV2ZW50LlZLX1NQQUNFKSkgeworCQkJCQljbG9zZXVwKGNvbXBvbmVudCwgY29tYm9saXN0LCBnZXQoY29tYm9saXN0LCAiaW5zaWRlIikpOyAvL0FsdCtVcAorCQkJCX0KKwkJCQllbHNlIGlmIChrZXljb2RlID09IEtleUV2ZW50LlZLX0VTQ0FQRSkgeworCQkJCQljbG9zZXVwKGNvbXBvbmVudCwgY29tYm9saXN0LCBudWxsKTsKKwkJCQl9CisJCQkJZWxzZSByZXR1cm4gcHJvY2Vzc0ZpZWxkKGNvbXBvbmVudCwgc2hpZnRkb3duLCBjb250cm9sZG93biwgbW9kaWZpZXJzLAorCQkJCQlrZXljaGFyLCBrZXljb2RlLCBmYWxzZSwgZmFsc2UpOworCQkJfQorCQkJcmV0dXJuIHRydWU7CisJCX0KKwkJZWxzZSBpZiAoKCJ0ZXh0ZmllbGQiID09IGNsYXNzbmFtZSkgfHwgKCJwYXNzd29yZGZpZWxkIiA9PSBjbGFzc25hbWUpKSB7CisJCQlyZXR1cm4gcHJvY2Vzc0ZpZWxkKGNvbXBvbmVudCwgc2hpZnRkb3duLCBjb250cm9sZG93biwgbW9kaWZpZXJzLAorCQkJCWtleWNoYXIsIGtleWNvZGUsIGZhbHNlLCAoInBhc3N3b3JkZmllbGQiID09IGNsYXNzbmFtZSkpOworCQl9CisJCWVsc2UgaWYgKCJ0ZXh0YXJlYSIgPT0gY2xhc3NuYW1lKSB7CisJCQlTdHJpbmcgdGV4dCA9IGdldFN0cmluZyhjb21wb25lbnQsICJ0ZXh0IiwgIiIpOyAKKwkJCWludCBzdGFydCA9IGdldEludGVnZXIoY29tcG9uZW50LCAic3RhcnQiLCAwKTsKKwkJCWludCBlbmQgPSBnZXRJbnRlZ2VyKGNvbXBvbmVudCwgImVuZCIsIDApOworCisJCQlpbnQgaXN0YXJ0ID0gc3RhcnQ7CisJCQlpbnQgaWVuZCA9IGVuZDsKKwkJCVN0cmluZyBpbnNlcnQgPSBudWxsOworCQkJaWYgKChrZXljb2RlID09IEtleUV2ZW50LlZLX0hPTUUpICYmICFjb250cm9sZG93bikgeworCQkJCXdoaWxlICgoaWVuZCA+IDApICYmICh0ZXh0LmNoYXJBdChpZW5kIC0gMSkgIT0gJ1xuJykpIHsgaWVuZC0tOyB9CisJCQkJaWYgKCFzaGlmdGRvd24pIHsgaXN0YXJ0ID0gaWVuZDsgfQorCQkJfQorCQkJZWxzZSBpZiAoKGtleWNvZGUgPT0gS2V5RXZlbnQuVktfRU5EKSAmJiAhY29udHJvbGRvd24pIHsKKwkJCQlpZW5kID0gdGV4dC5pbmRleE9mKCdcbicsIGVuZCk7CisJCQkJaWYgKGllbmQgPT0gLTEpIHsgaWVuZCA9IHRleHQubGVuZ3RoKCk7IH0KKwkJCQlpZiAoIXNoaWZ0ZG93bikgeyBpc3RhcnQgPSBpZW5kOyB9CisJCQl9CisJCQllbHNlIGlmICgoa2V5Y29kZSA9PSBLZXlFdmVudC5WS19VUCkgfHwKKwkJCQkJKGtleWNvZGUgPT0gS2V5RXZlbnQuVktfUEFHRV9VUCkpIHsKKwkJCQlpbnQgcHJldiA9IGVuZDsKKwkJCQl3aGlsZSAoKHByZXYgPiAwKSAmJiAodGV4dC5jaGFyQXQocHJldiAtIDEpICE9ICdcbicpKSB7IHByZXYtLTsgfQorCQkJCWlmIChwcmV2ICE9IDApIHsKKwkJCQkJaW50IGR4ID0gZW5kIC0gcHJldjsKKwkJCQkJaW50IGxpbmVzID0gKGtleWNvZGUgPT0gS2V5RXZlbnQuVktfUEFHRV9VUCkgPworCQkJCQkJKGdldFJlY3RhbmdsZShjb21wb25lbnQsICI6cG9ydCIpLmhlaWdodCAvCisJCQkJCQkJZ2V0Rm9udE1ldHJpY3MoZ2V0Rm9udCgpKS5nZXRIZWlnaHQoKSkgOiAxOworCQkJCQlpbnQgZmlyc3QgPSBwcmV2OworCQkJCQlkbyB7CisJCQkJCQlwcmV2ID0gZmlyc3Q7IGZpcnN0LS07IGxpbmVzLS07CisJCQkJCQl3aGlsZSAoKGZpcnN0ID4gMCkgJiYgKHRleHQuY2hhckF0KGZpcnN0IC0gMSkgIT0gJ1xuJykpIHsgZmlyc3QtLTsgfQorCQkJCQl9IHdoaWxlICgoZmlyc3QgPiAwKSAmJiAobGluZXMgPiAwKSk7CisJCQkJCWllbmQgPSBNYXRoLm1pbihmaXJzdCArIGR4LCBwcmV2IC0gMSk7CisJCQkJCWlmICghc2hpZnRkb3duKSB7IGlzdGFydCA9IGllbmQ7IH0KKwkJCQl9CisJCQl9CisJCQllbHNlIGlmICgoa2V5Y29kZSA9PSBLZXlFdmVudC5WS19ET1dOKSB8fAorCQkJCQkoa2V5Y29kZSA9PSBLZXlFdmVudC5WS19QQUdFX0RPV04pKSB7CisJCQkJaW50IG5leHQgPSB0ZXh0LmluZGV4T2YoJ1xuJywgZW5kKTsKKwkJCQlpZiAobmV4dCAhPSAtMSkgeworCQkJCQlpbnQgcHJldiA9IGVuZDsKKwkJCQkJd2hpbGUgKChwcmV2ID4gMCkgJiYgKHRleHQuY2hhckF0KHByZXYgLSAxKSAhPSAnXG4nKSkgeyBwcmV2LS07IH0KKwkJCQkJaWYgKGtleWNvZGUgPT0gS2V5RXZlbnQuVktfUEFHRV9ET1dOKSB7CisJCQkJCQlpbnQgbGluZXMgPSBnZXRSZWN0YW5nbGUoY29tcG9uZW50LCAiOnBvcnQiKS5oZWlnaHQgLworCQkJCQkJCWdldEZvbnRNZXRyaWNzKGdldEZvbnQoKSkuZ2V0SGVpZ2h0KCk7CisJCQkJCQlmb3IgKGludCBtb3JlID0gMDsgKGxpbmVzID4gMSkgJiYKKwkJCQkJCQkJKChtb3JlID0gdGV4dC5pbmRleE9mKCdcbicsIG5leHQgKyAxKSkgIT0gLTEpOyBuZXh0ID0gbW9yZSkgeworCQkJCQkJCWxpbmVzLS07CisJCQkJCQl9CisJCQkJCX0KKwkJCQkJaW50IGxhc3QgPSB0ZXh0LmluZGV4T2YoJ1xuJywgbmV4dCArIDEpOworCQkJCQlpZW5kID0gTWF0aC5taW4obmV4dCArIDEgKyBlbmQgLSBwcmV2LAorCQkJCQkJKGxhc3QgPT0gLTEpID8gKHRleHQubGVuZ3RoKCkgKyAxKSA6IGxhc3QpOworCQkJCQlpZiAoIXNoaWZ0ZG93bikgeyBpc3RhcnQgPSBpZW5kOyB9CisJCQkJfQorCQkJfQorCQkJcmV0dXJuIGNoYW5nZUZpZWxkKGNvbXBvbmVudCwgdGV4dCwgaW5zZXJ0LCBpc3RhcnQsIGllbmQsIHN0YXJ0LCBlbmQpID8KKwkJCQl0cnVlIDogcHJvY2Vzc0ZpZWxkKGNvbXBvbmVudCwgc2hpZnRkb3duLCBjb250cm9sZG93biwgbW9kaWZpZXJzLAorCQkJCQlrZXljaGFyLCBrZXljb2RlLCB0cnVlLCBmYWxzZSk7CisJCX0KKwkJZWxzZSBpZiAoInRhYmJlZHBhbmUiID09IGNsYXNzbmFtZSkgeworCQkJaWYgKChrZXljb2RlID09IEtleUV2ZW50LlZLX1JJR0hUKSB8fCAoa2V5Y29kZSA9PSBLZXlFdmVudC5WS19ET1dOKSB8fAorCQkJCQkoa2V5Y29kZSA9PSBLZXlFdmVudC5WS19MRUZUKSB8fCAoa2V5Y29kZSA9PSBLZXlFdmVudC5WS19VUCkpIHsKKwkJCQlpbnQgc2VsZWN0ZWQgPSBnZXRJbnRlZ2VyKGNvbXBvbmVudCwgInNlbGVjdGVkIiwgMCk7CisJCQkJYm9vbGVhbiBpbmNyZWFzZSA9IChrZXljb2RlID09IEtleUV2ZW50LlZLX1JJR0hUKSB8fCAoa2V5Y29kZSA9PSBLZXlFdmVudC5WS19ET1dOKTsKKwkJCQlpbnQgbmV3dmFsdWUgPSBzZWxlY3RlZDsKKwkJCQlpbnQgbiA9IGluY3JlYXNlID8gZ2V0SXRlbUNvdW50SW1wbChjb21wb25lbnQsICJ0YWIiKSA6IDA7CisJCQkJaW50IGQgPSAoaW5jcmVhc2UgPyAxIDogLTEpOwkJCQkJCQorCQkJCWZvciAoaW50IGkgPSBzZWxlY3RlZCArIGQ7IGluY3JlYXNlID8gKGkgPCBuKSAgOiAoaSA+PSAwKTsgaSArPSBkKSB7CisJCQkJCWlmIChnZXRCb29sZWFuKGdldEl0ZW1JbXBsKGNvbXBvbmVudCwgInRhYiIsIGkpLCAiZW5hYmxlZCIsIHRydWUpKSB7CisJCQkJCQluZXd2YWx1ZSA9IGk7IGJyZWFrOworCQkJCQl9CQorCQkJCX0KKwkJCQlpZiAobmV3dmFsdWUgIT0gc2VsZWN0ZWQpIHsKKwkJCQkJc2V0SW50ZWdlcihjb21wb25lbnQsICJzZWxlY3RlZCIsIG5ld3ZhbHVlLCAwKTsKKwkJCQkJcmVwYWludChjb21wb25lbnQpOworCQkJCQlpbnZva2UoY29tcG9uZW50LCAiYWN0aW9uIik7CisJCQkJfQorCQkJfQorCQl9CisJCWVsc2UgaWYgKCJzcGluYm94IiA9PSBjbGFzc25hbWUpIHsKKwkJCWlmICgoa2V5Y29kZSA9PSBLZXlFdmVudC5WS19VUCkgfHwgKGtleWNvZGUgPT0gS2V5RXZlbnQuVktfRE9XTikpIHsKKwkJCQlwcm9jZXNzU3Bpbihjb21wb25lbnQsIChrZXljb2RlID09IEtleUV2ZW50LlZLX1VQKT8gInVwIiA6ICJkb3duIik7CisJCQkJcmV0dXJuIHRydWU7CisJCQl9CisJCQlyZXR1cm4gcHJvY2Vzc0ZpZWxkKGNvbXBvbmVudCwgc2hpZnRkb3duLCBjb250cm9sZG93biwgbW9kaWZpZXJzLAorCQkJCWtleWNoYXIsIGtleWNvZGUsIGZhbHNlLCBmYWxzZSk7CisJCX0KKwkJZWxzZSBpZiAoInNsaWRlciIgPT0gY2xhc3NuYW1lKSB7CisJCQlpbnQgdmFsdWUgPSBnZXRJbnRlZ2VyKGNvbXBvbmVudCwgInZhbHVlIiwgMCk7CisJCQlpbnQgZCA9IDA7CisJCQlpZiAoKGtleWNvZGUgPT0gS2V5RXZlbnQuVktfSE9NRSkgfHwgKGtleWNvZGUgPT0gS2V5RXZlbnQuVktfTEVGVCkgfHwKKwkJCQkJKGtleWNvZGUgPT0gS2V5RXZlbnQuVktfVVApIHx8IChrZXljb2RlID09IEtleUV2ZW50LlZLX1BBR0VfVVApKSB7CisJCQkJZCA9IGdldEludGVnZXIoY29tcG9uZW50LCAibWluaW11bSIsIDApIC0gdmFsdWU7CisJCQkJaWYgKChrZXljb2RlID09IEtleUV2ZW50LlZLX0xFRlQpIHx8IChrZXljb2RlID09IEtleUV2ZW50LlZLX1VQKSkgeworCQkJCQlkID0gTWF0aC5tYXgoZCwgLWdldEludGVnZXIoY29tcG9uZW50LCAidW5pdCIsIDUpKTsKKwkJCQl9CisJCQkJZWxzZSBpZiAoa2V5Y29kZSA9PSBLZXlFdmVudC5WS19QQUdFX1VQKSB7CisJCQkJCWQgPSBNYXRoLm1heChkLCAtZ2V0SW50ZWdlcihjb21wb25lbnQsICJibG9jayIsIDI1KSk7CisJCQkJfQorCQkJfQorCQkJZWxzZSBpZiAoKGtleWNvZGUgPT0gS2V5RXZlbnQuVktfRU5EKSB8fCAoa2V5Y29kZSA9PSBLZXlFdmVudC5WS19SSUdIVCkgfHwKKwkJCQkJKGtleWNvZGUgPT0gS2V5RXZlbnQuVktfRE9XTikgfHwgKGtleWNvZGUgPT0gS2V5RXZlbnQuVktfUEFHRV9ET1dOKSkgeworCQkJCWQgPSBnZXRJbnRlZ2VyKGNvbXBvbmVudCwgIm1heGltdW0iLCAxMDApIC0gdmFsdWU7CisJCQkJaWYgKChrZXljb2RlID09IEtleUV2ZW50LlZLX1JJR0hUKSB8fCAoa2V5Y29kZSA9PSBLZXlFdmVudC5WS19ET1dOKSkgeworCQkJCQlkID0gTWF0aC5taW4oZCwgZ2V0SW50ZWdlcihjb21wb25lbnQsICJ1bml0IiwgNSkpOworCQkJCX0KKwkJCQllbHNlIGlmIChrZXljb2RlID09IEtleUV2ZW50LlZLX1BBR0VfRE9XTikgeworCQkJCQlkID0gTWF0aC5taW4oZCwgZ2V0SW50ZWdlcihjb21wb25lbnQsICJibG9jayIsIDI1KSk7CisJCQkJfQorCQkJfQorCQkJaWYgKGQgIT0gMCkgeworCQkJCXNldEludGVnZXIoY29tcG9uZW50LCAidmFsdWUiLCB2YWx1ZSArIGQsIDApOworCQkJCXJlcGFpbnQoY29tcG9uZW50KTsKKwkJCQlpbnZva2UoY29tcG9uZW50LCAiYWN0aW9uIik7CisJCQl9CisJCX0KKwkJZWxzZSBpZiAoInNwbGl0cGFuZSIgPT0gY2xhc3NuYW1lKSB7CisJCQlpbnQgZGl2aWRlciA9IGdldEludGVnZXIoY29tcG9uZW50LCAiZGl2aWRlciIsIC0xKTsKKwkJCWludCBkID0gMDsKKwkJCWlmIChrZXljb2RlID09IEtleUV2ZW50LlZLX0hPTUUpIHsKKwkJCQlkID0gLWRpdmlkZXI7CisJCQl9CisJCQllbHNlIGlmICgoa2V5Y29kZSA9PSBLZXlFdmVudC5WS19MRUZUKSB8fCAoa2V5Y29kZSA9PSBLZXlFdmVudC5WS19VUCkpIHsKKwkJCQlkID0gTWF0aC5tYXgoLTEwLCAtZGl2aWRlcik7CisJCQl9CisJCQllbHNlIGlmICgoa2V5Y29kZSA9PSBLZXlFdmVudC5WS19FTkQpIHx8CisJCQkJCShrZXljb2RlID09IEtleUV2ZW50LlZLX1JJR0hUKSB8fCAoa2V5Y29kZSA9PSBLZXlFdmVudC5WS19ET1dOKSkgeworCQkJCWJvb2xlYW4gaG9yaXpvbnRhbCA9ICgidmVydGljYWwiICE9IGdldChjb21wb25lbnQsICJvcmllbnRhdGlvbiIpKTsKKwkJCQlSZWN0YW5nbGUgYm91bmRzID0gZ2V0UmVjdGFuZ2xlKGNvbXBvbmVudCwgImJvdW5kcyIpOworCQkJCWludCBtYXggPSAoaG9yaXpvbnRhbCA/IGJvdW5kcy53aWR0aCA6IGJvdW5kcy5oZWlnaHQpIC0gNTsJCQkJCisJCQkJZCA9IG1heCAtIGRpdmlkZXI7CisJCQkJaWYgKGtleWNvZGUgIT0gS2V5RXZlbnQuVktfRU5EKSB7CisJCQkJCWQgPSBNYXRoLm1pbihkLCAxMCk7CisJCQkJfQorCQkJfQorCQkJaWYgKGQgIT0gMCkgeworCQkJCXNldEludGVnZXIoY29tcG9uZW50LCAiZGl2aWRlciIsIGRpdmlkZXIgKyBkLCAtMSk7CisJCQkJdmFsaWRhdGUoY29tcG9uZW50KTsKKwkJCX0KKwkJfQorCQllbHNlIGlmICgibGlzdCIgPT0gY2xhc3NuYW1lKSB7CisJCQlyZXR1cm4gcHJvY2Vzc0xpc3QoY29tcG9uZW50LCBzaGlmdGRvd24sIGNvbnRyb2xkb3duLCBrZXljaGFyLCBrZXljb2RlLCAiaXRlbSIsIG51bGwpOworCQl9CisJCWVsc2UgaWYgKCJ0YWJsZSIgPT0gY2xhc3NuYW1lKSB7CisJCQlyZXR1cm4gcHJvY2Vzc0xpc3QoY29tcG9uZW50LCBzaGlmdGRvd24sIGNvbnRyb2xkb3duLCBrZXljaGFyLCBrZXljb2RlLCAicm93IiwgbnVsbCk7CisJCX0KKwkJZWxzZSBpZiAoInRyZWUiID09IGNsYXNzbmFtZSkgeworCQkJLy8/IGNsZWFyIGNoaWxkcycgc2VsZWN0aW9uLCBzZWxlY3QgdGhpcyBpcyBpdHMgCXN1Ym5vZGUgd2FzIHNlbGVjdGVkCisJCQlpZiAoa2V5Y29kZSA9PSBLZXlFdmVudC5WS19MRUZUKSB7CisJCQkJT2JqZWN0IGxlYWQgPSBnZXQoY29tcG9uZW50LCAibGVhZCIpOworCQkJCWlmICgoZ2V0KGxlYWQsICJub2RlIikgIT0gbnVsbCkgJiYgZ2V0Qm9vbGVhbihsZWFkLCAiZXhwYW5kZWQiLCB0cnVlKSkgeworCQkJCQlzZXRCb29sZWFuKGxlYWQsICJleHBhbmRlZCIsIGZhbHNlLCB0cnVlKTsKKwkJCQkJc2VsZWN0SXRlbShjb21wb25lbnQsIGxlYWQsICJub2RlIiwgIm5vZGUiKTsKKwkJCQkJdmFsaWRhdGUoY29tcG9uZW50KTsKKwkJCQkJaW52b2tlKGNvbXBvbmVudCwgImNvbGxhcHNlIik7IC8vbGVhZAorCQkJCQlyZXR1cm4gdHJ1ZTsKKwkJCQl9CisJCQkJZWxzZSB7CisJCQkJCU9iamVjdCBwYXJlbnQgPSBnZXRQYXJlbnQobGVhZCk7CisJCQkJCWlmIChwYXJlbnQgIT0gY29tcG9uZW50KSB7CisJCQkJCQlzZWxlY3RJdGVtKGNvbXBvbmVudCwgcGFyZW50LCAibm9kZSIsICJub2RlIik7CisJCQkJCQlzZXRMZWFkKGNvbXBvbmVudCwgbGVhZCwgcGFyZW50KTsKKwkJCQkJCXJldHVybiB0cnVlOworCQkJCQl9CisJCQkJfQorCQkJfQorCQkJLy8/IGZvciBpbnRlcnZhbCBtb2RlIHNlbGVjdCBpdHMgYWxsIHN1Ym5vZGUgb3IgZGVzZWxlY3QgYWxsIGFmdGVyCisJCQllbHNlIGlmIChrZXljb2RlID09IEtleUV2ZW50LlZLX1JJR0hUKSB7CisJCQkJT2JqZWN0IGxlYWQgPSBnZXQoY29tcG9uZW50LCAibGVhZCIpOworCQkJCU9iamVjdCBub2RlID0gZ2V0KGxlYWQsICJub2RlIik7CisJCQkJaWYgKG5vZGUgIT0gbnVsbCkgeworCQkJCQlpZiAoZ2V0Qm9vbGVhbihsZWFkLCAiZXhwYW5kZWQiLCB0cnVlKSkgeworCQkJCQkJc2VsZWN0SXRlbShjb21wb25lbnQsIG5vZGUsICJub2RlIiwgIm5vZGUiKTsKKwkJCQkJCXNldExlYWQoY29tcG9uZW50LCBsZWFkLCBub2RlKTsKKwkJCQkJfQorCQkJCQllbHNlIHsKKwkJCQkJCXNldEJvb2xlYW4obGVhZCwgImV4cGFuZGVkIiwgdHJ1ZSwgdHJ1ZSk7CisJCQkJCQlzZWxlY3RJdGVtKGNvbXBvbmVudCwgbGVhZCwgIm5vZGUiLCAibm9kZSIpOworCQkJCQkJdmFsaWRhdGUoY29tcG9uZW50KTsKKwkJCQkJCWludm9rZShjb21wb25lbnQsICJleHBhbmQiKTsgLy9sZWFkCisJCQkJCX0KKwkJCQkJcmV0dXJuIHRydWU7CisJCQkJfQorCQkJfQorCQkJcmV0dXJuIHByb2Nlc3NMaXN0KGNvbXBvbmVudCwgc2hpZnRkb3duLCBjb250cm9sZG93biwga2V5Y2hhciwga2V5Y29kZSwgIm5vZGUiLCAibm9kZSIpOworCQl9CisJCWVsc2UgaWYgKCJtZW51YmFyIiA9PSBjbGFzc25hbWUpIHsKKwkJCU9iamVjdCBwcmV2aW91cyA9IG51bGw7IE9iamVjdCBsYXN0ID0gbnVsbDsKKwkJCWZvciAoT2JqZWN0IGkgPSBnZXQoY29tcG9uZW50LCAicG9wdXBtZW51Iik7CisJCQkJCWkgIT0gbnVsbDsgaSA9IGdldChpLCAicG9wdXBtZW51IikpIHsKKwkJCQlwcmV2aW91cyA9IGxhc3Q7IGxhc3QgPSBpOworCQkJfQorCQkJT2JqZWN0IHNlbGVjdGVkID0gZ2V0KGxhc3QsICJzZWxlY3RlZCIpOworCQkJT2JqZWN0IGhvdHBvcHVwID0gKChzZWxlY3RlZCAhPSBudWxsKSB8fCAocHJldmlvdXMgPT0gbnVsbCkpID8KKwkJCQlsYXN0IDogcHJldmlvdXM7CisJCQlpZiAoKHNlbGVjdGVkID09IG51bGwpICYmIChwcmV2aW91cyAhPSBudWxsKSkgeworCQkJCXNlbGVjdGVkID0gZ2V0KHByZXZpb3VzLCAic2VsZWN0ZWQiKTsKKwkJCX0KKworCQkJaWYgKChrZXljb2RlID09IEtleUV2ZW50LlZLX1VQKSB8fCAoa2V5Y29kZSA9PSBLZXlFdmVudC5WS19ET1dOKSkgeworCQkJCXNldChob3Rwb3B1cCwgInNlbGVjdGVkIiwgbnVsbCk7CisJCQkJcG9wdXAoaG90cG9wdXAsICJwb3B1cG1lbnUiKTsKKwkJCQlzZWxlY3RlZCA9IGdldE1lbnUoaG90cG9wdXAsCisJCQkJCXNlbGVjdGVkLCBrZXljb2RlID09IEtleUV2ZW50LlZLX0RPV04sIHRydWUpOworCQkJCXNldChob3Rwb3B1cCwgInNlbGVjdGVkIiwgc2VsZWN0ZWQpOworCQkJCXJlcGFpbnQoaG90cG9wdXApOworCQkJfQorCQkJZWxzZSBpZiAoa2V5Y29kZSA9PSBLZXlFdmVudC5WS19MRUZUKSB7CisJCQkJaWYgKHByZXZpb3VzICE9IG51bGwpIHsKKwkJCQkJc2VsZWN0ZWQgPSBnZXQocHJldmlvdXMsICJzZWxlY3RlZCIpOworCQkJCQlzZXQocHJldmlvdXMsICJzZWxlY3RlZCIsIG51bGwpOworCQkJCQlwb3B1cChwcmV2aW91cywgInBvcHVwbWVudSIpOworCQkJCQlzZXQocHJldmlvdXMsICJzZWxlY3RlZCIsIHNlbGVjdGVkKTsKKwkJCQkJcmVwYWludChwcmV2aW91cyk7IC8vICwgc2VsZWN0ZWQKKwkJCQl9CisJCQkJZWxzZSB7CisJCQkJCXNlbGVjdGVkID0gZ2V0TWVudShjb21wb25lbnQsIGdldChjb21wb25lbnQsICJzZWxlY3RlZCIpLCBmYWxzZSwgZmFsc2UpOworCQkJCQlzZXQoY29tcG9uZW50LCAic2VsZWN0ZWQiLCBzZWxlY3RlZCk7CisJCQkJCU9iamVjdCBwb3B1cCA9IHBvcHVwKGNvbXBvbmVudCwgIm1lbnViYXIiKTsKKwkJCQkJc2V0KHBvcHVwLCAic2VsZWN0ZWQiLCBnZXRNZW51KHBvcHVwLCBudWxsLCB0cnVlLCB0cnVlKSk7CisJCQkJCXJlcGFpbnQoY29tcG9uZW50KTsgLy8gLCBzZWxlY3RlZAorCQkJCX0KKwkJCX0KKwkJCWVsc2UgaWYgKGtleWNvZGUgPT0gS2V5RXZlbnQuVktfUklHSFQpIHsKKwkJCQlpZiAoKHByZXZpb3VzICE9IG51bGwpICYmIChzZWxlY3RlZCA9PSBudWxsKSkgeworCQkJCQlzZXQobGFzdCwgInNlbGVjdGVkIiwgZ2V0KGdldChsYXN0LCAibWVudSIpLCAibWVudSIpKTsKKwkJCQkJcmVwYWludChsYXN0KTsgLy8gLCBzZWxlY3RlZAorCQkJCX0KKwkJCQllbHNlIGlmICgoc2VsZWN0ZWQgIT0gbnVsbCkgJiYgKGdldENsYXNzKHNlbGVjdGVkKSA9PSAibWVudSIpKSB7CisJCQkJCU9iamVjdCBwb3B1cCA9IHBvcHVwKGxhc3QsICJwb3B1cG1lbnUiKTsKKwkJCQkJc2V0KHBvcHVwLCAic2VsZWN0ZWQiLCBnZXQoZ2V0KHBvcHVwLCAibWVudSIpLCAibWVudSIpKTsKKwkJCQl9CisJCQkJZWxzZSB7CisJCQkJCXNlbGVjdGVkID0gZ2V0TWVudShjb21wb25lbnQsIGdldChjb21wb25lbnQsICJzZWxlY3RlZCIpLCB0cnVlLCBmYWxzZSk7CisJCQkJCXNldChjb21wb25lbnQsICJzZWxlY3RlZCIsIHNlbGVjdGVkKTsKKwkJCQkJT2JqZWN0IHBvcHVwID0gcG9wdXAoY29tcG9uZW50LCAibWVudWJhciIpOworCQkJCQlzZXQocG9wdXAsICJzZWxlY3RlZCIsIGdldE1lbnUocG9wdXAsIG51bGwsIHRydWUsIHRydWUpKTsKKwkJCQkJcmVwYWludChjb21wb25lbnQpOyAvLyAsIHNlbGVjdGVkCisJCQkJfQorCQkJfQorCQkJZWxzZSBpZiAoKGtleWNvZGUgPT0gS2V5RXZlbnQuVktfRU5URVIpIHx8CisJCQkJCShrZXljaGFyID09IEtleUV2ZW50LlZLX1NQQUNFKSB8fCAoa2V5Y29kZSA9PSBLZXlFdmVudC5WS19FU0NBUEUpKSB7CisJCQkJaWYgKChrZXljb2RlICE9IEtleUV2ZW50LlZLX0VTQ0FQRSkgJiYKKwkJCQkJCWdldEJvb2xlYW4oc2VsZWN0ZWQsICJlbmFibGVkIiwgdHJ1ZSkpIHsKKwkJCQkJaWYgKChzZWxlY3RlZCAhPSBudWxsKSAmJiAoZ2V0Q2xhc3Moc2VsZWN0ZWQpID09ICJjaGVja2JveG1lbnVpdGVtIikpIHsKKwkJCQkJCWNoYW5nZUNoZWNrKHNlbGVjdGVkLCBmYWxzZSk7CisJCQkJCX0KKwkJCQkJZWxzZSBpbnZva2Uoc2VsZWN0ZWQsICJhY3Rpb24iKTsKKwkJCQl9CisJCQkJY2xvc2V1cChjb21wb25lbnQpOworCQkJfQorCQkJZWxzZSByZXR1cm4gZmFsc2U7CisJCQlyZXR1cm4gdHJ1ZTsKKwkJfQorCQlyZXR1cm4gZmFsc2U7CisJfQorCisJLyoqCisJICoKKwkgKi8KKwlwcml2YXRlIGJvb2xlYW4gY2hhbmdlQ2hlY2soT2JqZWN0IGNvbXBvbmVudCwgYm9vbGVhbiBib3gpIHsKKwkJU3RyaW5nIGdyb3VwID0gZ2V0U3RyaW5nKGNvbXBvbmVudCwgImdyb3VwIiwgbnVsbCk7CisJCWlmIChncm91cCAhPSBudWxsKSB7CisJCQlpZiAoZ2V0Qm9vbGVhbihjb21wb25lbnQsICJzZWxlY3RlZCIsIGZhbHNlKSkgeyByZXR1cm4gZmFsc2U7IH0KKwkJCWZvciAoT2JqZWN0IGNvbXAgPSBnZXQoZ2V0UGFyZW50KGNvbXBvbmVudCksCisJCQkJCWJveCA/ICJjb21wb25lbnQiIDogIm1lbnUiKTsgY29tcCAhPSBudWxsOyBjb21wID0gZ2V0KGNvbXAsICI6bmV4dCIpKSB7CisJCQkJaWYgKGNvbXAgPT0gY29tcG9uZW50KSB7CisJCQkJCXNldEJvb2xlYW4oY29tcG9uZW50LCAic2VsZWN0ZWQiLCB0cnVlKTsKKwkJCQl9CisJCQkJZWxzZSBpZiAoZ3JvdXAuZXF1YWxzKGdldChjb21wLCAiZ3JvdXAiKSkgJiYKKwkJCQkJCWdldEJvb2xlYW4oY29tcCwgInNlbGVjdGVkIiwgZmFsc2UpKSB7CisJCQkJCXNldEJvb2xlYW4oY29tcCwgInNlbGVjdGVkIiwgZmFsc2UpOworCQkJCQlpZiAoYm94KSB7IHJlcGFpbnQoY29tcCk7IH0gLy9jaGVja2JveCBvbmx5CisJCQkJfQorCQkJfQorCQl9CisJCWVsc2UgeworCQkJc2V0Qm9vbGVhbihjb21wb25lbnQsICJzZWxlY3RlZCIsCisJCQkJIWdldEJvb2xlYW4oY29tcG9uZW50LCAic2VsZWN0ZWQiLCBmYWxzZSksIGZhbHNlKTsKKwkJfQorCQlpbnZva2UoY29tcG9uZW50LCAiYWN0aW9uIik7CisJCXJldHVybiB0cnVlOworCX0KKworCS8qKgorCSAqCisJICovCisJcHJpdmF0ZSBPYmplY3QgZ2V0TWVudShPYmplY3QgY29tcG9uZW50LCBPYmplY3QgcGFydCwKKwkJCWJvb2xlYW4gZm9yd2FyZCwgYm9vbGVhbiBwb3B1cCkgeworCQlpZiAoZm9yd2FyZCkgeworCQkJaWYgKHBhcnQgIT0gbnVsbCkgeyBwYXJ0ID0gZ2V0KHBhcnQsICI6bmV4dCIpOyB9CisJCQlpZiAocGFydCA9PSBudWxsKSB7CisJCQkJcGFydCA9IGdldChwb3B1cCA/IGdldChjb21wb25lbnQsICJtZW51IikgOiBjb21wb25lbnQsICJtZW51Iik7CisJCQl9CisJCX0KKwkJZWxzZSB7CisJCQlPYmplY3QgcHJldiA9IGdldChwb3B1cCA/IGdldChjb21wb25lbnQsICJtZW51IikgOiBjb21wb25lbnQsICJtZW51Iik7CisJCQlmb3IgKE9iamVjdCBuZXh0ID0gZ2V0KHByZXYsICI6bmV4dCIpOworCQkJCQkobmV4dCAhPSBudWxsKSAmJiAobmV4dCAhPSBwYXJ0KTsgbmV4dCA9IGdldChuZXh0LCAiOm5leHQiKSkgeworCQkJCXByZXYgPSBuZXh0OworCQkJfQorCQkJcGFydCA9IHByZXY7CisJCX0KKwkJcmV0dXJuIChnZXRDbGFzcyhwYXJ0KSA9PSAic2VwYXJhdG9yIikgPworCQkJZ2V0TWVudShjb21wb25lbnQsIHBhcnQsIGZvcndhcmQsIHBvcHVwKSA6IHBhcnQ7CisJfQorCisJLyoqCisJICoKKwkgKi8KKwkvKnByaXZhdGUgYm9vbGVhbiBwcm9jZXNzS2V5UmVsZWFzZShPYmplY3QgY29tcG9uZW50LCBLZXlFdmVudCBlLCBpbnQga2V5Y29kZSkgeworCQlyZXR1cm4gdHJ1ZTsKKwl9Ki8KKworCS8qKgorCSAqCisJICovCisJcHJpdmF0ZSBib29sZWFuIHByb2Nlc3NGaWVsZChPYmplY3QgY29tcG9uZW50LAorCQkJYm9vbGVhbiBzaGlmdGRvd24sIGJvb2xlYW4gY29udHJvbGRvd24sIGludCBtb2RpZmllcnMsCisJCQlpbnQga2V5Y2hhciwgaW50IGtleWNvZGUsIGJvb2xlYW4gbXVsdGlsaW5lLCBib29sZWFuIGhpZGRlbikgeworCQlTdHJpbmcgdGV4dCA9IGdldFN0cmluZyhjb21wb25lbnQsICJ0ZXh0IiwgIiIpOyAKKwkJaW50IHN0YXJ0ID0gZ2V0SW50ZWdlcihjb21wb25lbnQsICJzdGFydCIsIDApOworCQlpbnQgZW5kID0gZ2V0SW50ZWdlcihjb21wb25lbnQsICJlbmQiLCAwKTsKKwkJYm9vbGVhbiBlZGl0YWJsZSA9IGdldEJvb2xlYW4oY29tcG9uZW50LCAiZWRpdGFibGUiLCB0cnVlKTsKKworCQlpbnQgaXN0YXJ0ID0gc3RhcnQ7CisJCWludCBpZW5kID0gZW5kOworCQlTdHJpbmcgaW5zZXJ0ID0gbnVsbDsKKwkJLy9taWRwIGlmIChlZGl0YWJsZSAmJiAoa2V5Y2hhciAhPSAwKSkgeworCQlpZiAoZWRpdGFibGUgJiYgKGtleWNoYXIgIT0gMCkgJiYgLy9qYXZhCisJCQkoKG1vZGlmaWVycyA9PSAwKSB8fCAobW9kaWZpZXJzID09IElucHV0RXZlbnQuU0hJRlRfTUFTSykpKSB7IC8vamF2YQorCQkJaW5zZXJ0ID0gU3RyaW5nLnZhbHVlT2YoKGNoYXIpIGtleWNoYXIpOworCQl9CisJCWVsc2UgaWYgKG11bHRpbGluZSAmJiBlZGl0YWJsZSAmJiAoa2V5Y29kZSA9PSBLZXlFdmVudC5WS19FTlRFUikpIHsKKwkJCWluc2VydCA9ICJcbiI7CisJCX0KKwkJZWxzZSBpZiAoZWRpdGFibGUgJiYgKGtleWNvZGUgPT0gS2V5RXZlbnQuVktfQkFDS19TUEFDRSkpIHsKKwkJCWluc2VydCA9ICIiOworCQkJaWYgKHN0YXJ0ID09IGVuZCkgeyBpc3RhcnQgLT0gMTsgfQorCQl9CisJCWVsc2UgaWYgKGtleWNvZGUgPT0gS2V5RXZlbnQuVktfRU5EKSB7CisJCQlpZW5kID0gdGV4dC5sZW5ndGgoKTsKKwkJCWlmICghc2hpZnRkb3duKSB7IGlzdGFydCA9IGllbmQ7IH0KKwkJfQorCQllbHNlIGlmIChrZXljb2RlID09IEtleUV2ZW50LlZLX0hPTUUpIHsKKwkJCWllbmQgPSAwOworCQkJaWYgKCFzaGlmdGRvd24pIHsgaXN0YXJ0ID0gaWVuZDsgfQorCQl9CisJCWVsc2UgaWYgKGtleWNvZGUgPT0gS2V5RXZlbnQuVktfTEVGVCkgeworCQkJLy9qYXZhPgorCQkJaWYgKGNvbnRyb2xkb3duKSB7CisJCQkJZm9yIChpbnQgaSA9IDA7IGkgPCAyOyBpKyspIHsKKwkJCQkJd2hpbGUgKChpZW5kID4gMCkgJiYgKChpICE9IDApID09CisJCQkJCQlDaGFyYWN0ZXIuaXNMZXR0ZXJPckRpZ2l0KHRleHQuY2hhckF0KGllbmQgLSAxKSkpKSB7IGllbmQtLTsgfQkKKwkJCQl9CisJCQl9IGVsc2UgeworCQkJCWllbmQgLT0gMTsKKwkJCX0KKwkJCS8vPGphdmEKKwkJCS8vbWlkcCBpZW5kIC09IDE7CisJCQlpZiAoIXNoaWZ0ZG93bikgeyBpc3RhcnQgPSBpZW5kOyB9CisJCX0KKwkJZWxzZSBpZiAoa2V5Y29kZSA9PSBLZXlFdmVudC5WS19SSUdIVCkgeworCQkJLy9qYXZhPgorCQkJaWYgKGNvbnRyb2xkb3duKSB7CisJCQkJZm9yIChpbnQgaSA9IDA7IGkgPCAyOyBpKyspIHsKKwkJCQkJd2hpbGUgKChpZW5kIDwgdGV4dC5sZW5ndGgoKSkgJiYgKChpID09IDApID09CisJCQkJCQlDaGFyYWN0ZXIuaXNMZXR0ZXJPckRpZ2l0KHRleHQuY2hhckF0KGllbmQpKSkpIHsgaWVuZCsrOyB9CisJCQkJfQorCQkJfSBlbHNlIHsKKwkJCQlpZW5kICs9IDE7CisJCQl9CisJCQkvLzxqYXZhCisJCQkvL21pZHAgaWVuZCArPSAxOworCQkJaWYgKCFzaGlmdGRvd24pIHsgaXN0YXJ0ID0gaWVuZDsgfQorCQl9CisJCWVsc2UgaWYgKGVkaXRhYmxlICYmIChrZXljb2RlID09IEtleUV2ZW50LlZLX0RFTEVURSkpIHsKKwkJCWluc2VydCA9ICIiOworCQkJaWYgKHN0YXJ0ID09IGVuZCkgeyBpZW5kICs9IDE7IH0KKwkJfQorCQllbHNlIGlmIChjb250cm9sZG93biAmJgorCQkJCSgoa2V5Y29kZSA9PSBLZXlFdmVudC5WS19BKSB8fCAoa2V5Y29kZSA9PSAweEJGKSkpIHsKKwkJCWlzdGFydCA9IDA7IC8vIEtleUV2ZW50LlZLX1NMQVNICisJCQlpZW5kID0gdGV4dC5sZW5ndGgoKTsKKwkJfQorCQllbHNlIGlmIChjb250cm9sZG93biAmJiAoa2V5Y29kZSA9PSAweERDKSkgeworCQkJaXN0YXJ0ID0gaWVuZCA9IHRleHQubGVuZ3RoKCk7IC8vIEtleUV2ZW50LlZLX0JBQ0tfU0xBU0gKKwkJfQorCQllbHNlIGlmICgoZWRpdGFibGUgJiYgIWhpZGRlbiAmJiBjb250cm9sZG93biAmJiAoa2V5Y29kZSA9PSBLZXlFdmVudC5WS19YKSkgfHwKKwkJCQkoIWhpZGRlbiAmJiBjb250cm9sZG93biAmJiAoa2V5Y29kZSA9PSBLZXlFdmVudC5WS19DKSkpIHsKKwkJCWlmIChzdGFydCAhPSBlbmQpIHsKKwkJCQljbGlwYm9hcmQgPSB0ZXh0LnN1YnN0cmluZygKKwkJCQkJTWF0aC5taW4oc3RhcnQsIGVuZCksIE1hdGgubWF4KHN0YXJ0LCBlbmQpKTsKKwkJCQkvL2phdmE+CisJCQkJdHJ5IHsKKwkJCQkJLyogUGVyc29uYWwgQmFzaXMgUHJvZmlsZSBkb2Vzbid0IGNvbnRhaW4gZGF0YXRyYW5zZmVyIHBhY2thZ2UKKwkJCQkJVG9vbGtpdCB0b29sa2l0ID0gZ2V0VG9vbGtpdCgpOworCQkJCQlPYmplY3Qgc3lzdGVtY2xpcGJvYXJkID0gdG9vbGtpdC5nZXRDbGFzcygpLmdldE1ldGhvZCgiZ2V0U3lzdGVtQ2xpcGJvYXJkIiwgbnVsbCkuaW52b2tlKHRvb2xraXQsIG51bGwpOworCQkJCQlDbGFzcyBzZWxlY3Rpb25jbGFzcyA9IENsYXNzLmZvck5hbWUoImphdmEuYXd0LmRhdGF0cmFuc2Zlci4iICsgIlN0cmluZ1NlbGVjdGlvbiIpOworCQkJCQlPYmplY3Qgc2VsZWN0aW9uID0gc2VsZWN0aW9uY2xhc3MuZ2V0Q29uc3RydWN0b3IobmV3IENsYXNzW10geyBTdHJpbmcuY2xhc3MgfSkuCisJCQkJCQluZXdJbnN0YW5jZShuZXcgT2JqZWN0W10geyBjbGlwYm9hcmQgfSk7CisJCQkJCXN5c3RlbWNsaXBib2FyZC5nZXRDbGFzcygpLmdldE1ldGhvZCgic2V0Q29udGVudHMiLCBuZXcgQ2xhc3NbXSB7CisJCQkJCQkJQ2xhc3MuZm9yTmFtZSgiamF2YS5hd3QuZGF0YXRyYW5zZmVyLiIgKyAiVHJhbnNmZXJhYmxlIiksCisJCQkJCQkJQ2xhc3MuZm9yTmFtZSgiamF2YS5hd3QuZGF0YXRyYW5zZmVyLiIgKyAiQ2xpcGJvYXJkT3duZXIiKSB9KS4KKwkJCQkJCWludm9rZShzeXN0ZW1jbGlwYm9hcmQsIG5ldyBPYmplY3RbXSB7IHNlbGVjdGlvbiwgbnVsbCB9KTsqLwkJCQkJCisJCQkJCWdldFRvb2xraXQoKS5nZXRTeXN0ZW1DbGlwYm9hcmQoKS5zZXRDb250ZW50cygKKwkJCQkJCW5ldyBTdHJpbmdTZWxlY3Rpb24oY2xpcGJvYXJkKSwgbnVsbCk7CisJCQkJfSBjYXRjaCAoRXhjZXB0aW9uIGV4Yykge30KKwkJCQkvLzxqYXZhCisJCQkJaWYgKGtleWNvZGUgPT0gS2V5RXZlbnQuVktfWCkgeyBpbnNlcnQgPSAiIjsgfQorCQkJfQorCQl9CisJCWVsc2UgaWYgKGVkaXRhYmxlICYmIGNvbnRyb2xkb3duICYmIChrZXljb2RlID09IEtleUV2ZW50LlZLX1YpKSB7CisJCQkvL2phdmE+CisJCQl0cnkgeworCQkJCS8qIG5vIGRhdGF0cmFuc2ZlciBwYWNrYWdlIGluIFBCUAorCQkJCVRvb2xraXQgdG9vbGtpdCA9IGdldFRvb2xraXQoKTsKKwkJCQlPYmplY3Qgc3lzdGVtY2xpcGJvYXJkID0gdG9vbGtpdC5nZXRDbGFzcygpLmdldE1ldGhvZCgiZ2V0U3lzdGVtQ2xpcGJvYXJkIiwgbnVsbCkuaW52b2tlKHRvb2xraXQsIG51bGwpOworCQkJCU9iamVjdCBjb250ZW50cyA9IHN5c3RlbWNsaXBib2FyZC5nZXRDbGFzcygpLmdldE1ldGhvZCgiZ2V0Q29udGVudHMiLCBuZXcgQ2xhc3NbXSB7IE9iamVjdC5jbGFzcyB9KS4KKwkJCQkJaW52b2tlKHN5c3RlbWNsaXBib2FyZCwgbmV3IE9iamVjdFtdIHsgdGhpcyB9KTsKKwkJCQlDbGFzcyBkYXRhZmxhdm9yID0gQ2xhc3MuZm9yTmFtZSgiamF2YS5hd3QuZGF0YXRyYW5zZmVyLiIgKyAiRGF0YUZsYXZvciIpOworCQkJCWluc2VydCA9IChTdHJpbmcpIChjb250ZW50cy5nZXRDbGFzcygpLmdldE1ldGhvZCgiZ2V0VHJhbnNmZXJEYXRhIiwgbmV3IENsYXNzW10geyBkYXRhZmxhdm9yIH0pLgorCQkJCQlpbnZva2UoY29udGVudHMsIG5ldyBPYmplY3RbXSB7IGRhdGFmbGF2b3IuZ2V0RmllbGQoInN0cmluZ0ZsYXZvciIpLmdldChudWxsKSB9KSk7Ki8KKwkJCQlpbnNlcnQgPSAoU3RyaW5nKSBnZXRUb29sa2l0KCkuZ2V0U3lzdGVtQ2xpcGJvYXJkKCkuCisJCQkJCWdldENvbnRlbnRzKHRoaXMpLmdldFRyYW5zZmVyRGF0YShEYXRhRmxhdm9yLnN0cmluZ0ZsYXZvcik7CisJCQl9IGNhdGNoIChFeGNlcHRpb24gZXhjKSB7CisJCQkJaW5zZXJ0ID0gY2xpcGJvYXJkOworCQkJfQorCQkJLy88amF2YQorCQkJLy9taWRwIGluc2VydCA9IGNsaXBib2FyZDsKKwkJCVN0cmluZ0J1ZmZlciBmaWx0ZXJlZCA9IG5ldyBTdHJpbmdCdWZmZXIoaW5zZXJ0Lmxlbmd0aCgpKTsKKwkJCWZvciAoaW50IGkgPSAwOyBpIDwgaW5zZXJ0Lmxlbmd0aCgpOyBpKyspIHsKKwkJCQljaGFyIGNrZXkgPSBpbnNlcnQuY2hhckF0KGkpOworCQkJCWlmICgoKGNrZXkgPiAweDFmKSAmJiAoY2tleSA8IDB4N2YpKSB8fAorCQkJCQkJKChja2V5ID4gMHg5ZikgJiYgKGNrZXkgPCAweGZmZmYpKSB8fAorCQkJCQkJKG11bHRpbGluZSAmJiAoY2tleSA9PSAnXG4nKSkpIHsKKwkJCQkJZmlsdGVyZWQuYXBwZW5kKGNrZXkpOworCQkJCX0KKwkJCX0KKwkJCWlmIChmaWx0ZXJlZC5sZW5ndGgoKSAhPSBpbnNlcnQubGVuZ3RoKCkpIHsKKwkJCQlpbnNlcnQgPSBmaWx0ZXJlZC50b1N0cmluZygpOworCQkJfQorCQl9CisJCXJldHVybiBjaGFuZ2VGaWVsZChjb21wb25lbnQsIHRleHQsIGluc2VydCwgaXN0YXJ0LCBpZW5kLCBzdGFydCwgZW5kKTsKKwl9CisKKwkvKioKKwkgKgorCSAqLworCXByaXZhdGUgYm9vbGVhbiBjaGFuZ2VGaWVsZChPYmplY3QgY29tcG9uZW50LCBTdHJpbmcgdGV4dCwgU3RyaW5nIGluc2VydCwKKwkJCWludCBtb3Zlc3RhcnQsIGludCBtb3ZlZW5kLCBpbnQgc3RhcnQsIGludCBlbmQpIHsKKwkJaWYgKChpbnNlcnQgPT0gbnVsbCkgJiYgKHN0YXJ0ID09IG1vdmVzdGFydCkgJiYgKGVuZCA9PSBtb3ZlZW5kKSkgeworCQkJcmV0dXJuIGZhbHNlOworCQl9CisJCW1vdmVzdGFydCA9IE1hdGgubWF4KDAsIE1hdGgubWluKG1vdmVzdGFydCwgdGV4dC5sZW5ndGgoKSkpOworCQltb3ZlZW5kID0gTWF0aC5tYXgoMCwgTWF0aC5taW4obW92ZWVuZCwgdGV4dC5sZW5ndGgoKSkpOworCQlpZiAoaW5zZXJ0ICE9IG51bGwpIHsKKwkJCWludCBtaW4gPSBNYXRoLm1pbihtb3Zlc3RhcnQsIG1vdmVlbmQpOworCQkJc2V0KGNvbXBvbmVudCwgInRleHQiLCB0ZXh0LnN1YnN0cmluZygwLCBtaW4pICsgaW5zZXJ0ICsKKwkJCQl0ZXh0LnN1YnN0cmluZyhNYXRoLm1heChtb3Zlc3RhcnQsIG1vdmVlbmQpKSk7CisJCQltb3Zlc3RhcnQgPSBtb3ZlZW5kID0gbWluICsgaW5zZXJ0Lmxlbmd0aCgpOworCQkJaW52b2tlKGNvbXBvbmVudCwgImFjdGlvbiIpOworCQl9CisJCWlmIChzdGFydCAhPSBtb3Zlc3RhcnQpIHsgc2V0SW50ZWdlcihjb21wb25lbnQsICJzdGFydCIsIG1vdmVzdGFydCwgMCk7IH0KKwkJaWYgKGVuZCAhPSBtb3ZlZW5kKSB7IHNldEludGVnZXIoY29tcG9uZW50LCAiZW5kIiwgbW92ZWVuZCwgMCk7IH0KKwkJaWYgKChpbnNlcnQgIT0gbnVsbCkgfHwgKHN0YXJ0ICE9IG1vdmVzdGFydCkgfHwgKGVuZCAhPSBtb3ZlZW5kKSkgeworCQkJdmFsaWRhdGUoY29tcG9uZW50KTsKKwkJfQorCQlyZXR1cm4gdHJ1ZTsKKwl9CisKKwkvKioKKwkgKgorCSAqLworCXByaXZhdGUgYm9vbGVhbiBwcm9jZXNzTGlzdChPYmplY3QgY29tcG9uZW50LCBib29sZWFuIHNoaWZ0ZG93biwgYm9vbGVhbiBjb250cm9sZG93biwKKwkJCWludCBrZXljaGFyLCBpbnQga2V5Y29kZSwgU3RyaW5nIGl0ZW1uYW1lLCBTdHJpbmcgbGVhZm5hbWUpIHsKKwkJaWYgKChrZXljb2RlID09IEtleUV2ZW50LlZLX1VQKSB8fAorCQkJCShrZXljb2RlID09IEtleUV2ZW50LlZLX0RPV04pIHx8IChrZXljb2RlID09IEtleUV2ZW50LlZLX1BBR0VfVVApIHx8CisJCQkJKGtleWNvZGUgPT0gS2V5RXZlbnQuVktfUEFHRV9ET1dOKSB8fAorCQkJCShrZXljb2RlID09IEtleUV2ZW50LlZLX0hPTUUpIHx8IChrZXljb2RlID09IEtleUV2ZW50LlZLX0VORCkpIHsKKwkJCU9iamVjdCBsZWFkID0gZ2V0KGNvbXBvbmVudCwgImxlYWQiKTsKKwkJCU9iamVjdCByb3cgPSBnZXRMaXN0SXRlbShjb21wb25lbnQsIGNvbXBvbmVudCwKKwkJCQlrZXljb2RlLCBsZWFkLCBpdGVtbmFtZSwgbGVhZm5hbWUpOworCQkJaWYgKHJvdyAhPSBudWxsKSB7CisJCQkJU3RyaW5nIHNlbGVjdGlvbiA9IGdldFN0cmluZyhjb21wb25lbnQsICJzZWxlY3Rpb24iLCAic2luZ2xlIik7CisJCQkJaWYgKHNoaWZ0ZG93biAmJiAoc2VsZWN0aW9uICE9ICJzaW5nbGUiKSAmJiAobGVhZCAhPSBudWxsKSkgeworCQkJCQlleHRlbmQoY29tcG9uZW50LCBsZWFkLCByb3csIGl0ZW1uYW1lLCBsZWFmbmFtZSk7CisJCQkJfQorCQkJCWVsc2UgaWYgKCFjb250cm9sZG93bikgeworCQkJCQlzZWxlY3RJdGVtKGNvbXBvbmVudCwgcm93LCBpdGVtbmFtZSwgbGVhZm5hbWUpOworCQkJCX0KKwkJCQlzZXRMZWFkKGNvbXBvbmVudCwgbGVhZCwgcm93KTsKKwkJCQlSZWN0YW5nbGUgciA9IGdldFJlY3RhbmdsZShyb3csICJib3VuZHMiKTsKKwkJCQlzY3JvbGxUb1Zpc2libGUoY29tcG9uZW50LCByLngsIHIueSwgMCwgci5oZWlnaHQgLSAxKTsKKwkJCQlyZXR1cm4gdHJ1ZTsKKwkJCX0KKwkJfQorCQllbHNlIGlmIChrZXljaGFyID09IEtleUV2ZW50LlZLX1NQQUNFKSB7CisJCQlzZWxlY3QoY29tcG9uZW50LCBnZXQoY29tcG9uZW50LCAibGVhZCIpLAorCQkJCWl0ZW1uYW1lLCBsZWFmbmFtZSwgc2hpZnRkb3duLCBjb250cm9sZG93bik7IC8vLi4uCisJCQlyZXR1cm4gdHJ1ZTsKKwkJfQorCQllbHNlIGlmIChjb250cm9sZG93bikgeworCQkJaWYgKCgoa2V5Y29kZSA9PSBLZXlFdmVudC5WS19BKSB8fCAoa2V5Y29kZSA9PSAweEJGKSkgJiYgLy9LZXlFdmVudC5WS19TTEFTSAorCQkJCQkoZ2V0U3RyaW5nKGNvbXBvbmVudCwgInNlbGVjdGlvbiIsICJzaW5nbGUiKSAhPSAic2luZ2xlIikpIHsKKwkJCQlzZWxlY3RBbGwoY29tcG9uZW50LCB0cnVlLCBpdGVtbmFtZSwgbGVhZm5hbWUpOworCQkJCXJldHVybiB0cnVlOworCQkJfQorCQkJZWxzZSBpZiAoa2V5Y29kZSA9PSAweERDKSB7IC8vS2V5RXZlbnQuVktfQkFDS19TTEFTSAorCQkJCXNlbGVjdEFsbChjb21wb25lbnQsIGZhbHNlLCBpdGVtbmFtZSwgbGVhZm5hbWUpOworCQkJCXJldHVybiB0cnVlOworCQkJfQorCQl9CisJCXJldHVybiBmYWxzZTsKKwl9CisKKwkvKioKKwkgKgorCSAqLworCXByaXZhdGUgT2JqZWN0IGdldExpc3RJdGVtKE9iamVjdCBjb21wb25lbnQsIE9iamVjdCBzY3JvbGxwYW5lLAorCQkJaW50IGtleWNvZGUsIE9iamVjdCBsZWFkLCBTdHJpbmcgaXRlbW5hbWUsIFN0cmluZyBsZWFmbmFtZSkgeworCQlPYmplY3Qgcm93ID0gbnVsbDsKKwkJaWYgKGtleWNvZGUgPT0gS2V5RXZlbnQuVktfVVApIHsKKwkJCWZvciAoT2JqZWN0IHByZXYgPSBnZXQoY29tcG9uZW50LCBpdGVtbmFtZSk7IHByZXYgIT0gbGVhZDsKKwkJCQkJcHJldiA9IGdldE5leHRJdGVtKGNvbXBvbmVudCwgcHJldiwgbGVhZm5hbWUpKSB7CisJCQkJcm93ID0gcHJldjsgLy8gY29tcG9uZW50IC0+IGdldFBhcmVudChsZWFkKQorCQkJfQorCQl9CisJCWVsc2UgaWYgKGtleWNvZGUgPT0gS2V5RXZlbnQuVktfRE9XTikgeworCQkJcm93ID0gKGxlYWQgPT0gbnVsbCkgPyBnZXQoY29tcG9uZW50LCBpdGVtbmFtZSkgOgorCQkJCWdldE5leHRJdGVtKGNvbXBvbmVudCwgbGVhZCwgbGVhZm5hbWUpOworCQl9CisJCWVsc2UgaWYgKChrZXljb2RlID09IEtleUV2ZW50LlZLX1BBR0VfVVApIHx8CisJCQkJKGtleWNvZGUgPT0gS2V5RXZlbnQuVktfUEFHRV9ET1dOKSkgeworCQkJUmVjdGFuZ2xlIHZpZXcgPSBnZXRSZWN0YW5nbGUoc2Nyb2xscGFuZSwgIjp2aWV3Iik7CisJCQlSZWN0YW5nbGUgcG9ydCA9IGdldFJlY3RhbmdsZShzY3JvbGxwYW5lLCAiOnBvcnQiKTsKKwkJCVJlY3RhbmdsZSBybCA9IChsZWFkICE9IG51bGwpID8gZ2V0UmVjdGFuZ2xlKGxlYWQsICJib3VuZHMiKSA6IG51bGw7CisJCQlpbnQgdnkgPSAoa2V5Y29kZSA9PSBLZXlFdmVudC5WS19QQUdFX1VQKSA/CisJCQkJdmlldy55IDogKHZpZXcueSArIHBvcnQuaGVpZ2h0IC0gMik7CisJCQlpZiAoKGtleWNvZGUgPT0gS2V5RXZlbnQuVktfUEFHRV9VUCkgJiYKKwkJCQkJKHJsICE9IG51bGwpICYmIChybC55IDw9IHZpZXcueSkpIHsKKwkJCQl2eSAtPSBwb3J0LmhlaWdodCAtIDI7CisJCQl9CisJCQlpZiAoKGtleWNvZGUgPT0gS2V5RXZlbnQuVktfUEFHRV9ET1dOKSAmJgorCQkJCQkocmwgIT0gbnVsbCkgJiYgKHJsLnkgKyBybC5oZWlnaHQgPj0gdmlldy55ICsgcG9ydC5oZWlnaHQgLSAyKSkgeworCQkJCXZ5ICs9IHBvcnQuaGVpZ2h0IC0gMjsKKwkJCX0KKwkJCWZvciAoT2JqZWN0IGl0ZW0gPSBnZXQoY29tcG9uZW50LCBpdGVtbmFtZSk7IGl0ZW0gIT0gbnVsbDsKKwkJCQkJaXRlbSA9IGdldE5leHRJdGVtKGNvbXBvbmVudCwgaXRlbSwgbGVhZm5hbWUpKSB7CisJCQkJUmVjdGFuZ2xlIHIgPSBnZXRSZWN0YW5nbGUoaXRlbSwgImJvdW5kcyIpOworCQkJCWlmIChrZXljb2RlID09IEtleUV2ZW50LlZLX1BBR0VfVVApIHsKKwkJCQkJcm93ID0gaXRlbTsKKwkJCQkJaWYgKHIueSArIHIuaGVpZ2h0ID4gdnkpIHsgYnJlYWs7IH0KKwkJCQl9IGVsc2UgeworCQkJCQlpZiAoci55ID4gdnkpIHsgYnJlYWs7IH0KKwkJCQkJcm93ID0gaXRlbTsKKwkJCQl9CisJCQl9CisJCX0KKwkJZWxzZSBpZiAoa2V5Y29kZSA9PSBLZXlFdmVudC5WS19IT01FKSB7CisJCQlyb3cgPSBnZXQoY29tcG9uZW50LCBpdGVtbmFtZSk7CisJCX0KKwkJZWxzZSBpZiAoa2V5Y29kZSA9PSBLZXlFdmVudC5WS19FTkQpIHsKKwkJCWZvciAoT2JqZWN0IGxhc3QgPSBsZWFkOyBsYXN0ICE9IG51bGw7CisJCQkJCWxhc3QgPSBnZXROZXh0SXRlbShjb21wb25lbnQsIGxhc3QsIGxlYWZuYW1lKSkgeworCQkJCXJvdyA9IGxhc3Q7CisJCQl9CisJCX0KKwkJcmV0dXJuIHJvdzsKKwl9CisKKwkvKioKKwkgKgorCSAqLworCXByaXZhdGUgdm9pZCBzZWxlY3RBbGwoT2JqZWN0IGNvbXBvbmVudCwKKwkJCWJvb2xlYW4gc2VsZWN0ZWQsIFN0cmluZyBpdGVtbmFtZSwgU3RyaW5nIGxlYWZuYW1lKSB7CisJCWJvb2xlYW4gY2hhbmdlZCA9IGZhbHNlOworCQlmb3IgKE9iamVjdCBpdGVtID0gZ2V0KGNvbXBvbmVudCwgaXRlbW5hbWUpOworCQkJCWl0ZW0gIT0gbnVsbDsgaXRlbSA9IGdldE5leHRJdGVtKGNvbXBvbmVudCwgaXRlbSwgbGVhZm5hbWUpKSB7CisJCQlpZiAoc2V0Qm9vbGVhbihpdGVtLCAic2VsZWN0ZWQiLCBzZWxlY3RlZCwgZmFsc2UpKSB7CisJCQkJcmVwYWludChjb21wb25lbnQsIG51bGwsIGl0ZW0pOyBjaGFuZ2VkID0gdHJ1ZTsKKwkJCX0KKwkJfQorCQlzZXQoY29tcG9uZW50LCAiYW5jaG9yIiwgbnVsbCk7CisJCWlmIChjaGFuZ2VkKSB7aW52b2tlKGNvbXBvbmVudCwgImFjdGlvbiIpOyB9CisJfQorCisJLyoqCisJICoKKwkgKi8KKwlwcml2YXRlIHZvaWQgc2VsZWN0SXRlbShPYmplY3QgY29tcG9uZW50LAorCQkJT2JqZWN0IHJvdywgU3RyaW5nIGl0ZW1uYW1lLCBTdHJpbmcgbGVhZm5hbWUpIHsKKwkJYm9vbGVhbiBjaGFuZ2VkID0gZmFsc2U7CisJCWZvciAoT2JqZWN0IGl0ZW0gPSBnZXQoY29tcG9uZW50LCBpdGVtbmFtZSk7CisJCQkJaXRlbSAhPSBudWxsOyBpdGVtID0gZ2V0TmV4dEl0ZW0oY29tcG9uZW50LCBpdGVtLCBsZWFmbmFtZSkpIHsKKwkJCWlmIChzZXRCb29sZWFuKGl0ZW0sICJzZWxlY3RlZCIsIChpdGVtID09IHJvdyksIGZhbHNlKSkgeworCQkJCXJlcGFpbnQoY29tcG9uZW50LCBudWxsLCBpdGVtKTsgY2hhbmdlZCA9IHRydWU7CisJCQl9CisJCX0KKwkJc2V0KGNvbXBvbmVudCwgImFuY2hvciIsIG51bGwpOworCQlpZiAoY2hhbmdlZCkgeyBpbnZva2UoY29tcG9uZW50LCAiYWN0aW9uIik7IH0KKwl9CisKKwkvKioKKwkgKgorCSAqLworCXByaXZhdGUgdm9pZCBleHRlbmQoT2JqZWN0IGNvbXBvbmVudCwgT2JqZWN0IGxlYWQsCisJCQlPYmplY3Qgcm93LCBTdHJpbmcgaXRlbW5hbWUsIFN0cmluZyBsZWFmbmFtZSkgeworCQlPYmplY3QgYW5jaG9yID0gZ2V0KGNvbXBvbmVudCwgImFuY2hvciIpOworCQlpZiAoYW5jaG9yID09IG51bGwpIHsgc2V0KGNvbXBvbmVudCwgImFuY2hvciIsIGFuY2hvciA9IGxlYWQpOyB9CisJCWNoYXIgc2VsZWN0ID0gJ24nOyBib29sZWFuIGNoYW5nZWQgPSBmYWxzZTsKKwkJZm9yIChPYmplY3QgaXRlbSA9IGdldChjb21wb25lbnQsIGl0ZW1uYW1lKTsgLy8gYW5jaG9yIC0gcm93CisJCQkJaXRlbSAhPSBudWxsOyBpdGVtID0gZ2V0TmV4dEl0ZW0oY29tcG9uZW50LCBpdGVtLCBsZWFmbmFtZSkpIHsKKwkJCWlmIChpdGVtID09IGFuY2hvcikgc2VsZWN0ID0gKHNlbGVjdCA9PSAnbicpID8gJ3knIDogJ3InOworCQkJaWYgKGl0ZW0gPT0gcm93KSBzZWxlY3QgPSAoc2VsZWN0ID09ICduJykgPyAneScgOiAncic7CisJCQlpZiAoc2V0Qm9vbGVhbihpdGVtLCAic2VsZWN0ZWQiLCAoc2VsZWN0ICE9ICduJyksIGZhbHNlKSkgeworCQkJCXJlcGFpbnQoY29tcG9uZW50LCBudWxsLCBpdGVtKTsgY2hhbmdlZCA9IHRydWU7CisJCQl9CisJCQlpZiAoc2VsZWN0ID09ICdyJykgc2VsZWN0ID0gJ24nOworCQl9CisJCWlmIChjaGFuZ2VkKSB7IGludm9rZShjb21wb25lbnQsICJhY3Rpb24iKTsgfQorCX0KKworCS8qKgorCSAqCisJICovCisJcHJpdmF0ZSB2b2lkIHNldExlYWQoT2JqZWN0IGNvbXBvbmVudCwgT2JqZWN0IG9sZGxlYWQsIE9iamVjdCBsZWFkKSB7CisJCWlmIChvbGRsZWFkICE9IGxlYWQpIHsgLy8/CisJCQlpZiAob2xkbGVhZCAhPSBudWxsKSB7IHJlcGFpbnQoY29tcG9uZW50LCBudWxsLCBvbGRsZWFkKTsgfQorCQkJc2V0KGNvbXBvbmVudCwgImxlYWQiLCBsZWFkKTsKKwkJCXJlcGFpbnQoY29tcG9uZW50LCBudWxsLCBsZWFkKTsKKwkJfQorCX0KKworCS8qcHVibGljIHZvaWQgcmVwYWludChpbnQgeCwgaW50IHksIGludCB3aWR0aCwgaW50IGhlaWdodCkgeworCQlTeXN0ZW0ub3V0LnByaW50bG4oInJlcGFpbnQoIiArIHggKyAiLCAiICsgeSArICIsICIgKyB3aWR0aCArICIsICIgKyBoZWlnaHQgKyAiKSIpOworCQlzdXBlci5yZXBhaW50KHgsIHksIHdpZHRoLCBoZWlnaHQpOworCX0qLworCQkJCisJLyoqCisJICoKKwkgKi8KKwlwcml2YXRlIHZvaWQgaGFuZGxlTW91c2VFdmVudChpbnQgeCwgaW50IHksIGludCBjbGlja2NvdW50LAorCQkJYm9vbGVhbiBzaGlmdGRvd24sIGJvb2xlYW4gY29udHJvbGRvd24sIGJvb2xlYW4gcG9wdXB0cmlnZ2VyLAorCQkJaW50IGlkLCBPYmplY3QgY29tcG9uZW50LCBPYmplY3QgcGFydCkgeworCQlpZiAoaWQgPT0gTW91c2VFdmVudC5NT1VTRV9FTlRFUkVEKSB7CisJCQlzZXRUaW1lcig3NTBMKTsKKwkJfQorCQllbHNlIGlmIChpZCA9PSBNb3VzZUV2ZW50Lk1PVVNFX0VYSVRFRCkgeworCQkJaGlkZVRpcCgpOworCQl9CisJCWlmICghZ2V0Qm9vbGVhbihjb21wb25lbnQsICJlbmFibGVkIiwgdHJ1ZSkpIHsgcmV0dXJuOyB9CisJCVN0cmluZyBjbGFzc25hbWUgPSBnZXRDbGFzcyhjb21wb25lbnQpOworCQlpZiAoKCJidXR0b24iID09IGNsYXNzbmFtZSkgfHwgKCJjaGVja2JveCIgPT0gY2xhc3NuYW1lKSkgeworCQkJaWYgKChpZCA9PSBNb3VzZUV2ZW50Lk1PVVNFX0VOVEVSRUQpIHx8CisJCQkJCShpZCA9PSBNb3VzZUV2ZW50Lk1PVVNFX0VYSVRFRCkgfHwKKwkJCQkJKGlkID09IE1vdXNlRXZlbnQuTU9VU0VfUFJFU1NFRCkgfHwKKwkJCQkJKGlkID09IE1vdXNlRXZlbnQuTU9VU0VfUkVMRUFTRUQpKSB7CisJCQkJaWYgKGlkID09IE1vdXNlRXZlbnQuTU9VU0VfUFJFU1NFRCkgeworCQkJCQlzZXRGb2N1cyhjb21wb25lbnQpOworCQkJCX0KKwkJCQllbHNlIGlmICgoaWQgPT0gTW91c2VFdmVudC5NT1VTRV9SRUxFQVNFRCkgJiYKKwkJCQkJCShtb3VzZWluc2lkZSA9PSBjb21wb25lbnQpKSB7CisJCQkJCWlmICgiY2hlY2tib3giID09IGNsYXNzbmFtZSkgeworCQkJCQkJY2hhbmdlQ2hlY2soY29tcG9uZW50LCB0cnVlKTsKKwkJCQkJfQorCQkJCQllbHNlIGludm9rZShjb21wb25lbnQsICJhY3Rpb24iKTsKKwkJCQl9CisJCQkJcmVwYWludChjb21wb25lbnQpOworCQkJfQorCQl9CisJCWVsc2UgaWYgKCJjb21ib2JveCIgPT0gY2xhc3NuYW1lKSB7CisJCQlib29sZWFuIGVkaXRhYmxlID0gZ2V0Qm9vbGVhbihjb21wb25lbnQsICJlZGl0YWJsZSIsIHRydWUpOworCQkJaWYgKGVkaXRhYmxlICYmIChwYXJ0ID09IG51bGwpKSB7CisJCQkJSW1hZ2UgaWNvbiA9IG51bGw7CisJCQkJaW50IGxlZnQgPSAoKGlkID09IE1vdXNlRXZlbnQuTU9VU0VfUFJFU1NFRCkgJiYKKwkJCQkJKChpY29uID0gZ2V0SWNvbihjb21wb25lbnQsICJpY29uIiwgbnVsbCkpICE9IG51bGwpKSA/CisJCQkJCQlpY29uLmdldFdpZHRoKHRoaXMpIDogMDsKKwkJCQlwcm9jZXNzRmllbGQoeCwgeSwgY2xpY2tjb3VudCwgaWQsIGNvbXBvbmVudCwgcGFydCwgZmFsc2UsIGZhbHNlLCBsZWZ0KTsKKwkJCX0KKwkJCWVsc2UgaWYgKHBhcnQgIT0gImljb24iKSB7IC8vIHBhcnQgPSAiZG93biIKKwkJCQlpZiAoKChpZCA9PSBNb3VzZUV2ZW50Lk1PVVNFX0VOVEVSRUQpIHx8CisJCQkJCQkoaWQgPT0gTW91c2VFdmVudC5NT1VTRV9FWElURUQpKSAmJiAobW91c2VwcmVzc2VkID09IG51bGwpKSB7CisJCQkJCWlmIChlZGl0YWJsZSkgeyByZXBhaW50KGNvbXBvbmVudCwgImNvbWJvYm94IiwgcGFydCk7IH0KKwkJCQkJCWVsc2UgeyByZXBhaW50KGNvbXBvbmVudCk7IH0KKwkJCQl9CisJCQkJZWxzZSBpZiAoaWQgPT0gTW91c2VFdmVudC5NT1VTRV9QUkVTU0VEKSB7CisJCQkJCU9iamVjdCBjb21ib2xpc3QgPSBnZXQoY29tcG9uZW50LCAiY29tYm9saXN0Iik7CisJCQkJCWlmIChjb21ib2xpc3QgPT0gbnVsbCkgeworCQkJCQkJc2V0Rm9jdXMoY29tcG9uZW50KTsKKwkJCQkJCXJlcGFpbnQoY29tcG9uZW50KTsKKwkJCQkJCXBvcHVwKGNvbXBvbmVudCwgY2xhc3NuYW1lKTsKKwkJCQkJfSBlbHNlIHsKKwkJCQkJCWNsb3NldXAoY29tcG9uZW50LCBjb21ib2xpc3QsIG51bGwpOworCQkJCQl9CisJCQkJfQorCQkJCWVsc2UgaWYgKGlkID09IE1vdXNlRXZlbnQuTU9VU0VfUkVMRUFTRUQpIHsKKwkJCQkJaWYgKG1vdXNlaW5zaWRlICE9IGNvbXBvbmVudCkgeworCQkJCQkJT2JqZWN0IGNvbWJvbGlzdCA9IGdldChjb21wb25lbnQsICJjb21ib2xpc3QiKTsKKwkJCQkJCWNsb3NldXAoY29tcG9uZW50LCBjb21ib2xpc3QsCisJCQkJCQkJKG1vdXNlaW5zaWRlID09IGNvbWJvbGlzdCkgPyBpbnNpZGVwYXJ0IDogbnVsbCk7CisJCQkJCX0gZWxzZSB7CisJCQkJCQlyZXBhaW50KGNvbXBvbmVudCk7CisJCQkJCX0KKwkJCQl9CisJCQl9CisJCX0KKwkJZWxzZSBpZiAoImNvbWJvbGlzdCIgPT0gY2xhc3NuYW1lKSB7CisJCQlpZiAoIXByb2Nlc3NTY3JvbGwoeCwgeSwgaWQsIGNvbXBvbmVudCwgcGFydCkpIHsKKwkJCQlpZiAoKGlkID09IE1vdXNlRXZlbnQuTU9VU0VfRU5URVJFRCkgfHwgKGlkID09IERSQUdfRU5URVJFRCkpIHsKKwkJCQkJaWYgKHBhcnQgIT0gbnVsbCkgeworCQkJCQkJLy8gcmVwYWludCBwcmV2aW91cyBpbnNpZGUKKwkJCQkJCXNldChjb21wb25lbnQsICJpbnNpZGUiLCBwYXJ0KTsKKwkJCQkJCXJlcGFpbnQoY29tcG9uZW50LCBjbGFzc25hbWUsIHBhcnQpOworCQkJCQl9CisJCQkJfQorCQkJCWVsc2UgaWYgKChpZCA9PSBNb3VzZUV2ZW50Lk1PVVNFX0VYSVRFRCkgfHwgKGlkID09IERSQUdfRVhJVEVEKSkgeworCQkJCQlpZiAocGFydCAhPSBudWxsKSB7CisJCQkJCQlzZXQoY29tcG9uZW50LCAiaW5zaWRlIiwgbnVsbCk7CisJCQkJCQlyZXBhaW50KGNvbXBvbmVudCwgY2xhc3NuYW1lLCBwYXJ0KTsKKwkJCQkJfQorCQkJCX0KKwkJCQllbHNlIGlmIChpZCA9PSBNb3VzZUV2ZW50Lk1PVVNFX1JFTEVBU0VEKSB7CisJCQkJCWNsb3NldXAoZ2V0KGNvbXBvbmVudCwgImNvbWJvYm94IiksIGNvbXBvbmVudCwgcGFydCk7CisJCQkJfQorCQkJfQorCQl9CisJCWVsc2UgaWYgKCgidGV4dGZpZWxkIiA9PSBjbGFzc25hbWUpIHx8ICgicGFzc3dvcmRmaWVsZCIgPT0gY2xhc3NuYW1lKSkgeworCQkJcHJvY2Vzc0ZpZWxkKHgsIHksIGNsaWNrY291bnQsIGlkLCBjb21wb25lbnQsIHBhcnQsCisJCQkJZmFsc2UsICgicGFzc3dvcmRmaWVsZCIgPT0gY2xhc3NuYW1lKSwgMCk7CisJCX0KKwkJZWxzZSBpZiAoInRleHRhcmVhIiA9PSBjbGFzc25hbWUpIHsKKwkJCWlmICghcHJvY2Vzc1Njcm9sbCh4LCB5LCBpZCwgY29tcG9uZW50LCBwYXJ0KSkgeworCQkJCXByb2Nlc3NGaWVsZCh4LCB5LCBjbGlja2NvdW50LCBpZCwgY29tcG9uZW50LCBwYXJ0LCB0cnVlLCBmYWxzZSwgMCk7CisJCQl9CisJCX0KKwkJLy9qYXZhPgorCQllbHNlIGlmICgiZGVza3RvcCIgPT0gY2xhc3NuYW1lKSB7CisJCQlpZiAoaWQgPT0gTW91c2VFdmVudC5NT1VTRV9FTlRFUkVEKSB7CisJCQkJc2V0Q3Vyc29yKEN1cnNvci5nZXRQcmVkZWZpbmVkQ3Vyc29yKEN1cnNvci5XQUlUX0NVUlNPUikpOworCQkJfQorCQkJZWxzZSBpZiAoaWQgPT0gTW91c2VFdmVudC5NT1VTRV9FWElURUQpIHsKKwkJCQlzZXRDdXJzb3IoQ3Vyc29yLmdldFByZWRlZmluZWRDdXJzb3IoQ3Vyc29yLkRFRkFVTFRfQ1VSU09SKSk7CisJCQl9CisJCX0KKwkJLy88amF2YQorCQllbHNlIGlmICgic3BpbmJveCIgPT0gY2xhc3NuYW1lKSB7CisJCQlpZiAocGFydCA9PSBudWxsKSB7CisJCQkJcHJvY2Vzc0ZpZWxkKHgsIHksIGNsaWNrY291bnQsIGlkLCBjb21wb25lbnQsIHBhcnQsIGZhbHNlLCBmYWxzZSwgMCk7CisJCQl9CisJCQllbHNlIHsgLy8gcGFydCA9ICJ1cCIgfHwgImRvd24iCisJCQkJaWYgKChpZCA9PSBNb3VzZUV2ZW50Lk1PVVNFX0VOVEVSRUQpIHx8CisJCQkJCQkoaWQgPT0gTW91c2VFdmVudC5NT1VTRV9FWElURUQpIHx8CisJCQkJCQkoaWQgPT0gTW91c2VFdmVudC5NT1VTRV9QUkVTU0VEKSB8fAorCQkJCQkJKGlkID09IE1vdXNlRXZlbnQuTU9VU0VfUkVMRUFTRUQpKSB7CisJCQkJCWlmIChpZCA9PSBNb3VzZUV2ZW50Lk1PVVNFX1BSRVNTRUQpIHsKKwkJCQkJCXNldEZvY3VzKGNvbXBvbmVudCk7CisJCQkJCQlpZiAocHJvY2Vzc1NwaW4oY29tcG9uZW50LCBwYXJ0KSkgeyBzZXRUaW1lcigzNzVMKTsgfQorCQkJCQkJLy9zZXR0ZXh0OiBzdGFydCBlbmQgc2VsZWN0aW9uLCBwYXJzZSBleGNlcHRpb24uLi4KKwkJCQkJfQorCQkJCQllbHNlIHsKKwkJCQkJCWlmIChpZCA9PSBNb3VzZUV2ZW50Lk1PVVNFX1JFTEVBU0VEKSB7CisJCQkJCQkJc2V0VGltZXIoMEwpOworCQkJCQkJfQorCQkJCQl9CisJCQkJCXJlcGFpbnQoY29tcG9uZW50LCBjbGFzc25hbWUsIHBhcnQpOworCQkJCX0KKwkJCX0KKwkJfQorCQllbHNlIGlmICgidGFiYmVkcGFuZSIgPT0gY2xhc3NuYW1lKSB7CisJCQlpZiAoKGlkID09IE1vdXNlRXZlbnQuTU9VU0VfRU5URVJFRCkgfHwKKwkJCQkJKGlkID09IE1vdXNlRXZlbnQuTU9VU0VfRVhJVEVEKSkgeworCQkJCWlmICgocGFydCAhPSBudWxsKSAmJiBnZXRCb29sZWFuKHBhcnQsICJlbmFibGVkIiwgdHJ1ZSkgJiYKKwkJCQkJCShnZXRJbnRlZ2VyKGNvbXBvbmVudCwgInNlbGVjdGVkIiwgMCkgIT0gZ2V0SW5kZXgoY29tcG9uZW50LCAidGFiIiwgcGFydCkpKSB7CisJCQkJCXJlcGFpbnQoY29tcG9uZW50LCAidGFiYmVkcGFuZSIsIHBhcnQpOworCQkJCX0KKwkJCX0KKwkJCWVsc2UgaWYgKChwYXJ0ICE9IG51bGwpICYmIChpZCA9PSBNb3VzZUV2ZW50Lk1PVVNFX1BSRVNTRUQpICYmCisJCQkJCWdldEJvb2xlYW4ocGFydCwgImVuYWJsZWQiLCB0cnVlKSkgeworCQkJCWludCBzZWxlY3RlZCA9IGdldEludGVnZXIoY29tcG9uZW50LCAic2VsZWN0ZWQiLCAwKTsKKwkJCQlpbnQgY3VycmVudCA9IGdldEluZGV4KGNvbXBvbmVudCwgInRhYiIsIHBhcnQpOworCQkJCWlmIChzZWxlY3RlZCA9PSBjdXJyZW50KSB7CisJCQkJCXNldEZvY3VzKGNvbXBvbmVudCk7CisJCQkJCXJlcGFpbnQoY29tcG9uZW50LCAidGFiYmVkcGFuZSIsIHBhcnQpOworCQkJCX0KKwkJCQllbHNlIHsKKwkJCQkJc2V0SW50ZWdlcihjb21wb25lbnQsICJzZWxlY3RlZCIsIGN1cnJlbnQsIDApOworCQkJCQkvL09iamVjdCB0YWJjb250ZW50ID0gZ2V0SXRlbUltcGwoY29tcG9uZW50LCAiY29tcG9uZW50IiwgY3VycmVudCk7CisJCQkJCS8vc2V0Rm9jdXMoKHRhYmNvbnRlbnQgIT0gbnVsbCkgPyB0YWJjb250ZW50IDogY29tcG9uZW50KTsKKwkJCQkJc2V0TmV4dEZvY3VzYWJsZShjb21wb25lbnQsIGZhbHNlKTsKKwkJCQkJcmVwYWludChjb21wb25lbnQpOworCQkJCQlpbnZva2UoY29tcG9uZW50LCAiYWN0aW9uIik7CisJCQkJfQorCQkJfQorCQl9CisJCWVsc2UgaWYgKCJzbGlkZXIiID09IGNsYXNzbmFtZSkgeworCQkJaWYgKChpZCA9PSBNb3VzZUV2ZW50Lk1PVVNFX1BSRVNTRUQpIHx8CisJCQkJCShpZCA9PSBNb3VzZUV2ZW50Lk1PVVNFX0RSQUdHRUQpKSB7CisJCQkJaWYgKGlkID09IE1vdXNlRXZlbnQuTU9VU0VfUFJFU1NFRCkgeworCQkJCQlzZXRSZWZlcmVuY2UoY29tcG9uZW50LCBibG9jayAvIDIsIGJsb2NrIC8gMik7CisJCQkJCXNldEZvY3VzKGNvbXBvbmVudCk7CisJCQkJfQorCQkJCWludCBtaW5pbXVtID0gZ2V0SW50ZWdlcihjb21wb25lbnQsICJtaW5pbXVtIiwgMCk7CisJCQkJaW50IG1heGltdW0gPSBnZXRJbnRlZ2VyKGNvbXBvbmVudCwgIm1heGltdW0iLCAxMDApOworCQkJCWludCB2YWx1ZSA9IGdldEludGVnZXIoY29tcG9uZW50LCAidmFsdWUiLCA1MCk7CisJCQkJUmVjdGFuZ2xlIGJvdW5kcyA9IGdldFJlY3RhbmdsZShjb21wb25lbnQsICJib3VuZHMiKTsKKwkJCQlib29sZWFuIGhvcml6b250YWwgPSAoInZlcnRpY2FsIiAhPSBnZXQoY29tcG9uZW50LCAib3JpZW50YXRpb24iKSk7CisJCQkJaW50IG5ld3ZhbHVlID0gbWluaW11bSArCisJCQkJCShob3Jpem9udGFsID8gKG1vdXNleCAtIHJlZmVyZW5jZXgpIDogKG1vdXNleSAtIHJlZmVyZW5jZXkpKSAqCisJCQkJCShtYXhpbXVtIC0gbWluaW11bSkgLworCQkJCQkoKGhvcml6b250YWwgPyBib3VuZHMud2lkdGggOiBib3VuZHMuaGVpZ2h0KSAtIGJsb2NrKTsgLy8uLi4gKzAuNQorCQkJCW5ld3ZhbHVlID0gTWF0aC5tYXgobWluaW11bSwgTWF0aC5taW4obmV3dmFsdWUsIG1heGltdW0pKTsKKwkJCQlpZiAodmFsdWUgIT0gbmV3dmFsdWUpIHsKKwkJCQkJc2V0SW50ZWdlcihjb21wb25lbnQsICJ2YWx1ZSIsIG5ld3ZhbHVlLCA1MCk7CisJCQkJCWludm9rZShjb21wb25lbnQsICJhY3Rpb24iKTsKKwkJCQl9CisJCQkJaWYgKCh2YWx1ZSAhPSBuZXd2YWx1ZSkgfHwgKGlkID09IE1vdXNlRXZlbnQuTU9VU0VfUFJFU1NFRCkpIHsKKwkJCQkJcmVwYWludChjb21wb25lbnQpOworCQkJCX0KKwkJCX0KKwkJfQorCQllbHNlIGlmICgic3BsaXRwYW5lIiA9PSBjbGFzc25hbWUpIHsKKwkJCWlmIChpZCA9PSBNb3VzZUV2ZW50Lk1PVVNFX1BSRVNTRUQpIHsKKwkJCQlzZXRSZWZlcmVuY2UoY29tcG9uZW50LCAyLCAyKTsKKwkJCX0KKwkJCWVsc2UgaWYgKGlkID09IE1vdXNlRXZlbnQuTU9VU0VfRFJBR0dFRCkgeworCQkJCWludCBkaXZpZGVyID0gZ2V0SW50ZWdlcihjb21wb25lbnQsICJkaXZpZGVyIiwgLTEpOworCQkJCWJvb2xlYW4gaG9yaXpvbnRhbCA9ICgidmVydGljYWwiICE9IGdldChjb21wb25lbnQsICJvcmllbnRhdGlvbiIpKTsKKwkJCQlpbnQgbW92ZXRvID0gaG9yaXpvbnRhbCA/IChtb3VzZXggLSByZWZlcmVuY2V4KSA6CisJCQkJCShtb3VzZXkgLSByZWZlcmVuY2V5KTsKKwkJCQlSZWN0YW5nbGUgYm91bmRzID0gZ2V0UmVjdGFuZ2xlKGNvbXBvbmVudCwgImJvdW5kcyIpOworCQkJCW1vdmV0byA9IE1hdGgubWF4KDAsIE1hdGgubWluKG1vdmV0bywKKwkJCQkJTWF0aC5hYnMoaG9yaXpvbnRhbCA/IGJvdW5kcy53aWR0aCA6IGJvdW5kcy5oZWlnaHQpIC0gNSkpOworCQkJCWlmIChkaXZpZGVyICE9IG1vdmV0bykgeworCQkJCQlzZXRJbnRlZ2VyKGNvbXBvbmVudCwgImRpdmlkZXIiLCBtb3ZldG8sIC0xKTsKKwkJCQkJdmFsaWRhdGUoY29tcG9uZW50KTsKKwkJCQl9CisJCQl9CisJCQkvL2phdmE+CisJCQllbHNlIGlmICgoaWQgPT0gTW91c2VFdmVudC5NT1VTRV9FTlRFUkVEKSAmJiAobW91c2VwcmVzc2VkID09IG51bGwpKSB7CisJCQkJYm9vbGVhbiBob3Jpem9udGFsID0gKCJ2ZXJ0aWNhbCIgIT0gZ2V0KGNvbXBvbmVudCwgIm9yaWVudGF0aW9uIikpOworCQkJCXNldEN1cnNvcihDdXJzb3IuZ2V0UHJlZGVmaW5lZEN1cnNvcihob3Jpem9udGFsID8KKwkJCQkJQ3Vyc29yLkVfUkVTSVpFX0NVUlNPUiA6IEN1cnNvci5TX1JFU0laRV9DVVJTT1IpKTsKKwkJCX0KKwkJCWVsc2UgaWYgKCgoaWQgPT0gTW91c2VFdmVudC5NT1VTRV9FWElURUQpICYmIChtb3VzZXByZXNzZWQgPT0gbnVsbCkpIHx8CisJCQkJCSgoaWQgPT0gTW91c2VFdmVudC5NT1VTRV9SRUxFQVNFRCkgJiYgKG1vdXNlaW5zaWRlICE9IGNvbXBvbmVudCkpKSB7CisJCQkJc2V0Q3Vyc29yKEN1cnNvci5nZXRQcmVkZWZpbmVkQ3Vyc29yKEN1cnNvci5ERUZBVUxUX0NVUlNPUikpOworCQkJfQorCQkJLy88amF2YQorCQl9CisJCWVsc2UgaWYgKCgibGlzdCIgPT0gY2xhc3NuYW1lKSB8fAorCQkJCSgidGFibGUiID09IGNsYXNzbmFtZSkgfHwgKCJ0cmVlIiA9PSBjbGFzc25hbWUpKSB7CisJCQlpZiAoIXByb2Nlc3NTY3JvbGwoeCwgeSwgaWQsIGNvbXBvbmVudCwgcGFydCkpIHsKKwkJCQlpZiAoKChpZCA9PSBNb3VzZUV2ZW50Lk1PVVNFX1BSRVNTRUQpfHwKKwkJCQkJCSgoaWQgPT0gTW91c2VFdmVudC5NT1VTRV9EUkFHR0VEKSAmJgorCQkJCQkJCSFzaGlmdGRvd24gJiYgIWNvbnRyb2xkb3duKSkgJiYKKwkJCQkJCSFwb3B1cHRyaWdnZXIpIHsgLy8gZS5nZXRDbGlja0NvdW50KCkgCisJCQkJCVJlY3RhbmdsZSB2aWV3ID0gZ2V0UmVjdGFuZ2xlKGNvbXBvbmVudCwgIjp2aWV3Iik7CisJCQkJCVJlY3RhbmdsZSB2aWV3cG9ydCA9IGdldFJlY3RhbmdsZShjb21wb25lbnQsICI6cG9ydCIpOworCQkJCQlpbnQgbXkgPSBtb3VzZXkgKyB2aWV3LnkgLSByZWZlcmVuY2V5OworCQkJCQlTdHJpbmcgaXRlbW5hbWUgPSAoImxpc3QiID09IGNsYXNzbmFtZSkgPyAiaXRlbSIgOgorCQkJCQkJKCgidGFibGUiID09IGNsYXNzbmFtZSkgPyAicm93IiA6ICJub2RlIik7CisJCQkJCVN0cmluZyBzdWJpdGVtID0gKCJ0cmVlIiA9PSBjbGFzc25hbWUpID8gIm5vZGUiIDogbnVsbDsKKwkJCQkJZm9yIChPYmplY3QgaXRlbSA9IGdldChjb21wb25lbnQsIGl0ZW1uYW1lKTsgaXRlbSAhPSBudWxsOykgeworCQkJCQkJUmVjdGFuZ2xlIHIgPSBnZXRSZWN0YW5nbGUoaXRlbSwgImJvdW5kcyIpOworCQkJCQkJaWYgKG15IDwgci55ICsgci5oZWlnaHQpIHsKKwkJCQkJCQlpZiAoaWQgPT0gTW91c2VFdmVudC5NT1VTRV9EUkFHR0VEKSB7IC8vISEhCisJCQkJCQkJCXNjcm9sbFRvVmlzaWJsZShjb21wb25lbnQsIHIueCwgci55LCAwLCByLmhlaWdodCAtIDEpOworCQkJCQkJCX0KKwkJCQkJCQllbHNlIGlmICgidHJlZSIgPT0gY2xhc3NuYW1lKSB7CisJCQkJCQkJCWludCBteCA9IG1vdXNleCArIHZpZXcueCAtIHJlZmVyZW5jZXg7CisJCQkJCQkJCWlmIChteCA8IHIueCkgeworCQkJCQkJCQkJaWYgKChteCA+PSByLnggLSBibG9jaykgJiYgKGdldChpdGVtLCAibm9kZSIpICE9IG51bGwpKSB7CisJCQkJCQkJCQkJYm9vbGVhbiBleHBhbmRlZCA9IGdldEJvb2xlYW4oaXRlbSwgImV4cGFuZGVkIiwgdHJ1ZSk7CisJCQkJCQkJCQkJc2V0Qm9vbGVhbihpdGVtLCAiZXhwYW5kZWQiLCAhZXhwYW5kZWQsIAl0cnVlKTsKKwkJCQkJCQkJCQlzZWxlY3RJdGVtKGNvbXBvbmVudCwgaXRlbSwgIm5vZGUiLCAibm9kZSIpOworCQkJCQkJCQkJCXNldExlYWQoY29tcG9uZW50LCBnZXQoY29tcG9uZW50LCAibGVhZCIpLCBpdGVtKTsKKwkJCQkJCQkJCQlzZXRGb2N1cyhjb21wb25lbnQpOworCQkJCQkJCQkJCXZhbGlkYXRlKGNvbXBvbmVudCk7CisJCQkJCQkJCQkJaW52b2tlKGNvbXBvbmVudCwgZXhwYW5kZWQgPyAiY29sbGFwc2UiIDogImV4cGFuZCIpOyAvL2l0ZW0KKwkJCQkJCQkJCX0KKwkJCQkJCQkJCWJyZWFrOworCQkJCQkJCQl9CisJCQkJCQkJfQorCQkJCQkJCWlmICgoaWQgIT0gTW91c2VFdmVudC5NT1VTRV9EUkFHR0VEKSB8fAorCQkJCQkJCQkJIWdldEJvb2xlYW4oaXRlbSwgInNlbGVjdGVkIiwgZmFsc2UpKSB7CisJCQkJCQkJCXNlbGVjdChjb21wb25lbnQsIGl0ZW0sIGl0ZW1uYW1lLCBzdWJpdGVtLCBzaGlmdGRvd24sIGNvbnRyb2xkb3duKTsKKwkJCQkJCQkJaWYgKGlkICE9IE1vdXNlRXZlbnQuTU9VU0VfRFJBR0dFRCkgeworCQkJCQkJCQkJaWYgKHNldEZvY3VzKGNvbXBvbmVudCkpIHsgcmVwYWludChjb21wb25lbnQsIGNsYXNzbmFtZSwgaXRlbSk7IH0gLy8/CisJCQkJCQkJCX0KKwkJCQkJCQl9CisJCQkJCQkJYnJlYWs7CisJCQkJCQl9CisJCQkJCQlpdGVtID0gZ2V0TmV4dEl0ZW0oY29tcG9uZW50LCBpdGVtLCBzdWJpdGVtKTsKKwkJCQkJfQorCQkJCX0KKwkJIAl9CisJCX0KKwkJZWxzZSBpZiAoIm1lbnViYXIiID09IGNsYXNzbmFtZSkgeworCQkJT2JqZWN0IHNlbGVjdGVkID0gZ2V0KGNvbXBvbmVudCwgInNlbGVjdGVkIik7CisJCQlpZiAoKChpZCA9PSBNb3VzZUV2ZW50Lk1PVVNFX0VOVEVSRUQpIHx8IChpZCA9PSBNb3VzZUV2ZW50Lk1PVVNFX0VYSVRFRCkpICYmCisJCQkJCShwYXJ0ICE9IG51bGwpICYmIChzZWxlY3RlZCA9PSBudWxsKSkgeworCQkJCXJlcGFpbnQoY29tcG9uZW50LCBjbGFzc25hbWUsIHBhcnQpOworCQkJfQorCQkJZWxzZSBpZiAoKHBhcnQgIT0gbnVsbCkgJiYgKChzZWxlY3RlZCA9PSBudWxsKSA/CisJCQkJKGlkID09IE1vdXNlRXZlbnQuTU9VU0VfUFJFU1NFRCkgOgorCQkJCQkoKGlkID09IE1vdXNlRXZlbnQuTU9VU0VfRU5URVJFRCkgfHwgKGlkID09IERSQUdfRU5URVJFRCkpKSkgeworCQkJCXNldChjb21wb25lbnQsICJzZWxlY3RlZCIsIHBhcnQpOworCQkJCXBvcHVwKGNvbXBvbmVudCwgY2xhc3NuYW1lKTsKKwkJCQlyZXBhaW50KGNvbXBvbmVudCwgY2xhc3NuYW1lLCBwYXJ0KTsKKwkJCX0KKwkJCWVsc2UgaWYgKChpZCA9PSBNb3VzZUV2ZW50Lk1PVVNFX1BSRVNTRUQpICYmIChzZWxlY3RlZCAhPSBudWxsKSkgeworCQkJCWNsb3NldXAoY29tcG9uZW50KTsKKwkJCX0KKwkJCWVsc2UgaWYgKGlkID09IE1vdXNlRXZlbnQuTU9VU0VfUkVMRUFTRUQpIHsKKwkJCQlpZiAoKHBhcnQgIT0gaW5zaWRlcGFydCkgJiYKKwkJCQkJCSgoaW5zaWRlcGFydCA9PSBudWxsKSB8fCAoZ2V0Q2xhc3MoaW5zaWRlcGFydCkgIT0gIm1lbnUiKSkpIHsKKwkJCQkJaWYgKChpbnNpZGVwYXJ0ICE9IG51bGwpICYmIGdldEJvb2xlYW4oaW5zaWRlcGFydCwgImVuYWJsZWQiLCB0cnVlKSkgeworCQkJCQkJaWYgKGdldENsYXNzKGluc2lkZXBhcnQpID09ICJjaGVja2JveG1lbnVpdGVtIikgeworCQkJCQkJCWNoYW5nZUNoZWNrKGluc2lkZXBhcnQsIGZhbHNlKTsKKwkJCQkJCX0KKwkJCQkJCWVsc2UgaW52b2tlKGluc2lkZXBhcnQsICJhY3Rpb24iKTsKKwkJCQkJfQorCQkJCQljbG9zZXVwKGNvbXBvbmVudCk7CisJCQkJfQorCQkJfQorCQl9CisJCWVsc2UgaWYgKCJwb3B1cG1lbnUiID09IGNsYXNzbmFtZSkgeworCQkJaWYgKHBhcnQgIT0gbnVsbCkgeworCQkJCWlmICgoaWQgPT0gTW91c2VFdmVudC5NT1VTRV9FTlRFUkVEKSB8fCAoaWQgPT0gRFJBR19FTlRFUkVEKSkgeworCQkJCQlzZXQoY29tcG9uZW50LCAic2VsZWN0ZWQiLCBwYXJ0KTsKKwkJCQkJcG9wdXAoY29tcG9uZW50LCBjbGFzc25hbWUpOworCQkJCQlyZXBhaW50KGNvbXBvbmVudCwgY2xhc3NuYW1lLCBwYXJ0KTsKKwkJCQl9CisJCQkJZWxzZSBpZiAoaWQgPT0gTW91c2VFdmVudC5NT1VTRV9SRUxFQVNFRCkgeworCQkJCQlpZiAoKGluc2lkZXBhcnQgPT0gbnVsbCkgfHwgKGdldENsYXNzKGluc2lkZXBhcnQpICE9ICJtZW51IikpIHsKKwkJCQkJCU9iamVjdCBtZW51YmFyID0gcGFydDsKKwkJCQkJCWRvIHsKKwkJCQkJCQltZW51YmFyID0gZ2V0UGFyZW50KG1lbnViYXIpOworCQkJCQkJfSB3aGlsZSAoZ2V0Q2xhc3MobWVudWJhcikgIT0gIm1lbnViYXIiKTsKKwkJCQkJCWlmICgoaW5zaWRlcGFydCAhPSBudWxsKSAmJiBnZXRCb29sZWFuKGluc2lkZXBhcnQsICJlbmFibGVkIiwgdHJ1ZSkpIHsKKwkJCQkJCQlpZiAoZ2V0Q2xhc3MoaW5zaWRlcGFydCkgPT0gImNoZWNrYm94bWVudWl0ZW0iKSB7CisJCQkJCQkJCWNoYW5nZUNoZWNrKGluc2lkZXBhcnQsIGZhbHNlKTsKKwkJCQkJCQl9CisJCQkJCQkJZWxzZSBpbnZva2UoaW5zaWRlcGFydCwgImFjdGlvbiIpOworCQkJCQkJfQorCQkJCQkJY2xvc2V1cChtZW51YmFyKTsKKwkJCQkJfQorCQkJCX0KKwkJCQllbHNlIGlmICgoaWQgPT0gTW91c2VFdmVudC5NT1VTRV9FWElURUQpIHx8IChpZCA9PSBEUkFHX0VYSVRFRCkpIHsKKwkJCQkJaWYgKGdldENsYXNzKHBhcnQpICE9ICJtZW51IikgeworCQkJCQkJc2V0KGNvbXBvbmVudCwgInNlbGVjdGVkIiwgbnVsbCk7CisJCQkJCX0KKwkJCQkJcmVwYWludChjb21wb25lbnQsIGNsYXNzbmFtZSwgcGFydCk7CisJCQkJfQorCQkJfQorCQl9CisJCWVsc2UgaWYgKCJkaWFsb2ciID09IGNsYXNzbmFtZSkgeworCQkJaWYgKHBhcnQgPT0gImhlYWRlciIpIHsKKwkJCQlpZiAoaWQgPT0gTW91c2VFdmVudC5NT1VTRV9QUkVTU0VEKSB7CisJCQkJCXJlZmVyZW5jZXggPSBtb3VzZXg7IHJlZmVyZW5jZXkgPSBtb3VzZXk7CisJCQkJCWlmICghZ2V0Qm9vbGVhbihjb21wb25lbnQsICJtb2RhbCIsIGZhbHNlKSAmJgorCQkJCQkJCShnZXQoY29udGVudCwgImNvbXBvbmVudCIpICE9IGNvbXBvbmVudCkpIHsKKwkJCQkJCXJlbW92ZUl0ZW1JbXBsKGNvbnRlbnQsICJjb21wb25lbnQiLCBjb21wb25lbnQpOworCQkJCQkJaW5zZXJ0SXRlbShjb250ZW50LCAiY29tcG9uZW50IiwgY29tcG9uZW50LCAwKTsKKwkJCQkJCXNldChjb21wb25lbnQsICI6cGFyZW50IiwgY29udGVudCk7CisJCQkJCQlyZXBhaW50KGNvbXBvbmVudCk7CisJCQkJCX0KKwkJCQl9CisJCQkJZWxzZSBpZiAoaWQgPT0gTW91c2VFdmVudC5NT1VTRV9EUkFHR0VEKSB7CisJCQkJCVJlY3RhbmdsZSBib3VuZHMgPSBnZXRSZWN0YW5nbGUoY29tcG9uZW50LCAiYm91bmRzIik7CisJCQkJCWludCBkeCA9IG1vdXNleCAtIHJlZmVyZW5jZXg7IGludCBkeSA9IG1vdXNleSAtIHJlZmVyZW5jZXk7CisJCQkJCXJlcGFpbnQoY29tcG9uZW50LAorCQkJCQkJYm91bmRzLnggKyBNYXRoLm1pbigwLCBkeCksIGJvdW5kcy55ICsgTWF0aC5taW4oMCwgZHkpLAorCQkJCQkJYm91bmRzLndpZHRoICsgTWF0aC5hYnMoZHgpLCBib3VuZHMuaGVpZ2h0ICsgTWF0aC5hYnMoZHkpKTsKKwkJCQkJYm91bmRzLnggKz0gZHg7IGJvdW5kcy55ICs9IGR5OworCQkJCQlyZWZlcmVuY2V4ID0gbW91c2V4OyByZWZlcmVuY2V5ID0gbW91c2V5OworCQkJCX0KKwkJCX0KKwkJfQorCX0KKworCS8qKgorCSAqCisJICovCisJcHJpdmF0ZSB2b2lkIHNldFJlZmVyZW5jZShPYmplY3QgY29tcG9uZW50LCBpbnQgeCwgaW50IHkpIHsKKwkJcmVmZXJlbmNleCA9IHg7IHJlZmVyZW5jZXkgPSB5OworCQlmb3IgKDsgY29tcG9uZW50ICE9IG51bGw7IGNvbXBvbmVudCA9IGdldFBhcmVudChjb21wb25lbnQpKSB7CisJCQlSZWN0YW5nbGUgYm91bmRzID0gZ2V0UmVjdGFuZ2xlKGNvbXBvbmVudCwgImJvdW5kcyIpOworCQkJcmVmZXJlbmNleCArPSBib3VuZHMueDsgcmVmZXJlbmNleSArPSBib3VuZHMueTsKKwkJfQorCX0KKworCS8qKgorCSAqCisJICovCisJcHJpdmF0ZSB2b2lkIHNlbGVjdChPYmplY3QgY29tcG9uZW50LCBPYmplY3Qgcm93LCBTdHJpbmcgZmlyc3QsCisJCQlTdHJpbmcgY2hpbGQsIGJvb2xlYW4gc2hpZnRkb3duLCBib29sZWFuIGNvbnRyb2xkb3duKSB7CisJCVN0cmluZyBzZWxlY3Rpb24gPSBnZXRTdHJpbmcoY29tcG9uZW50LCAic2VsZWN0aW9uIiwgInNpbmdsZSIpOworCQlPYmplY3QgbGVhZCA9IG51bGw7CisJCWlmIChzaGlmdGRvd24gJiYgKHNlbGVjdGlvbiAhPSAic2luZ2xlIikgJiYKKwkJCQkoKGxlYWQgPSBnZXQoY29tcG9uZW50LCAibGVhZCIpKSAhPSBudWxsKSkgeworCQkJZXh0ZW5kKGNvbXBvbmVudCwgbGVhZCwgcm93LCBmaXJzdCwgY2hpbGQpOworCQl9CisJCWVsc2UgeworCQkJaWYgKGNvbnRyb2xkb3duICYmIChzZWxlY3Rpb24gPT0gIm11bHRpcGxlIikpIHsKKwkJCQlzZXRCb29sZWFuKHJvdywgInNlbGVjdGVkIiwKKwkJCQkJIWdldEJvb2xlYW4ocm93LCAic2VsZWN0ZWQiLCBmYWxzZSksIGZhbHNlKTsKKwkJCQlyZXBhaW50KGNvbXBvbmVudCwgbnVsbCwgcm93KTsKKwkJCQlpbnZva2UoY29tcG9uZW50LCAiYWN0aW9uIik7CisJCQkJc2V0KGNvbXBvbmVudCwgImFuY2hvciIsIG51bGwpOworCQkJfQorCQkJZWxzZSBpZiAoY29udHJvbGRvd24gJiYgZ2V0Qm9vbGVhbihyb3csICJzZWxlY3RlZCIsIGZhbHNlKSkgeworCQkJCWZvciAoT2JqZWN0IGl0ZW0gPSByb3c7CisJCQkJCQlpdGVtICE9IG51bGw7IGl0ZW0gPSBnZXROZXh0SXRlbShjb21wb25lbnQsIGl0ZW0sIGNoaWxkKSkgeworCQkJCQlpZiAoc2V0Qm9vbGVhbihpdGVtLCAic2VsZWN0ZWQiLCBmYWxzZSwgZmFsc2UpKSB7CisJCQkJCQlyZXBhaW50KGNvbXBvbmVudCwgbnVsbCwgaXRlbSk7CisJCQkJCX0KKwkJCQl9CisJCQkJaW52b2tlKGNvbXBvbmVudCwgImFjdGlvbiIpOworCQkJCXNldChjb21wb25lbnQsICJhbmNob3IiLCBudWxsKTsKKwkJCX0KKwkJCWVsc2UgeworCQkJCXNlbGVjdEl0ZW0oY29tcG9uZW50LCByb3csIGZpcnN0LCBjaGlsZCk7CisJCQl9CisJCX0KKwkJc2V0TGVhZChjb21wb25lbnQsIChsZWFkICE9IG51bGwpID8gbGVhZCA6IGdldChjb21wb25lbnQsICJsZWFkIiksIHJvdyk7CisJfQorCisJLyoqCisJICoKKwkgKi8KKwlwcml2YXRlIE9iamVjdCBnZXROZXh0SXRlbShPYmplY3QgY29tcG9uZW50LAorCQkJT2JqZWN0IGl0ZW0sIFN0cmluZyBzdWJpdGVtKSB7CisJCWlmIChzdWJpdGVtID09IG51bGwpIHsgcmV0dXJuIGdldChpdGVtLCAiOm5leHQiKTsgfQorCQlPYmplY3QgbmV4dCA9IGdldChpdGVtLCBzdWJpdGVtKTsKKwkJaWYgKChuZXh0ID09IG51bGwpIHx8ICFnZXRCb29sZWFuKGl0ZW0sICJleHBhbmRlZCIsIHRydWUpKSB7CisJCQl3aGlsZSAoKGl0ZW0gIT0gY29tcG9uZW50KSAmJiAoKG5leHQgPSBnZXQoaXRlbSwgIjpuZXh0IikpID09IG51bGwpKSB7CisJCQkJaXRlbSA9IGdldFBhcmVudChpdGVtKTsKKwkJCX0KKwkJfQorCQlyZXR1cm4gbmV4dDsKKwl9CisJCisJLyoqCisJICoKKwkgKi8KKwlwcml2YXRlIHZvaWQgcHJvY2Vzc0ZpZWxkKGludCB4LCBpbnQgeSwgaW50IGNsaWNrY291bnQsCisJCQlpbnQgaWQsIE9iamVjdCBjb21wb25lbnQsCisJCQlPYmplY3QgcGFydCwgYm9vbGVhbiBtdWx0aWxpbmUsIGJvb2xlYW4gaGlkZGVuLCBpbnQgbGVmdCkgeworCQlpZiAoaWQgPT0gTW91c2VFdmVudC5NT1VTRV9QUkVTU0VEKSB7CisJCQlzZXRSZWZlcmVuY2UoY29tcG9uZW50LCAyICsgbGVmdCwgMik7CisJCQlpbnQgbXggPSB4IC0gcmVmZXJlbmNleDsKKwkJCWludCBteSA9IDA7CisJCQlpZiAoIW11bHRpbGluZSkgeworCQkJCW14ICs9IGdldEludGVnZXIoY29tcG9uZW50LCAib2Zmc2V0IiwgMCk7CisJCQl9IGVsc2UgeworCQkJCVJlY3RhbmdsZSB2aWV3ID0gZ2V0UmVjdGFuZ2xlKGNvbXBvbmVudCwgIjp2aWV3Iik7CisJCQkJbXggKz0gdmlldy54IC0gMTsKKwkJCQlteSA9IHkgLSByZWZlcmVuY2V5ICsgdmlldy55IC0gMTsKKwkJCX0KKwkJCWludCBjYXJldHN0YXJ0ID0gZ2V0Q2FyZXRMb2NhdGlvbihjb21wb25lbnQsIG14LCBteSwgaGlkZGVuKTsKKwkJCWludCBjYXJldGVuZCA9IGNhcmV0c3RhcnQ7CisJCQkvL2phdmE+CisJCQlpZiAoY2xpY2tjb3VudCA+IDEpIHsKKwkJCQlTdHJpbmcgdGV4dCA9IGdldFN0cmluZyhjb21wb25lbnQsICJ0ZXh0IiwgIiIpOworCQkJCXdoaWxlICgoY2FyZXRzdGFydCA+IDApICYmICgoY2xpY2tjb3VudCA9PSAyKSA/CisJCQkJCUNoYXJhY3Rlci5pc0xldHRlck9yRGlnaXQodGV4dC5jaGFyQXQoY2FyZXRzdGFydCAtIDEpKSA6CisJCQkJCQkodGV4dC5jaGFyQXQoY2FyZXRzdGFydCAtIDEpICE9ICdcbicpKSkgeyBjYXJldHN0YXJ0LS07IH0KKwkJCQl3aGlsZSAoKGNhcmV0ZW5kIDwgdGV4dC5sZW5ndGgoKSkgJiYgKChjbGlja2NvdW50ID09IDIpID8KKwkJCQkJQ2hhcmFjdGVyLmlzTGV0dGVyT3JEaWdpdCh0ZXh0LmNoYXJBdChjYXJldGVuZCkpIDoKKwkJCQkJCSh0ZXh0LmNoYXJBdChjYXJldGVuZCkgIT0gJ1xuJykpKSB7IGNhcmV0ZW5kKys7IH0KKwkJCX0KKwkJCS8vPGphdmEKKwkJCXNldEludGVnZXIoY29tcG9uZW50LCAic3RhcnQiLCBjYXJldHN0YXJ0LCAwKTsKKwkJCXNldEludGVnZXIoY29tcG9uZW50LCAiZW5kIiwgY2FyZXRlbmQsIDApOworCQkJc2V0Rm9jdXMoY29tcG9uZW50KTsKKwkJCXZhbGlkYXRlKGNvbXBvbmVudCk7IC8vIGNhcmV0IGNoZWNrIG9ubHkKKwkJfQorCQllbHNlIGlmIChpZCA9PSBNb3VzZUV2ZW50Lk1PVVNFX0RSQUdHRUQpIHsKKwkJCWludCBteCA9IHggLSByZWZlcmVuY2V4OworCQkJaW50IG15ID0gMDsKKwkJCWlmICghbXVsdGlsaW5lKSB7CisJCQkJbXggKz0gZ2V0SW50ZWdlcihjb21wb25lbnQsICJvZmZzZXQiLCAwKTsKKwkJCX0gZWxzZSB7CisJCQkJUmVjdGFuZ2xlIHZpZXcgPSBnZXRSZWN0YW5nbGUoY29tcG9uZW50LCAiOnZpZXciKTsKKwkJCQlteCArPSB2aWV3LnggLSAxOworCQkJCW15ID0geSAtIHJlZmVyZW5jZXkgKyB2aWV3LnkgLSAxOworCQkJfQorCQkJaW50IGRyYWdjYXJldCA9IGdldENhcmV0TG9jYXRpb24oY29tcG9uZW50LCBteCwgbXksIGhpZGRlbik7CisJCQlpZiAoZHJhZ2NhcmV0ICE9IGdldEludGVnZXIoY29tcG9uZW50LCAiZW5kIiwgMCkpIHsKKwkJCQlzZXRJbnRlZ2VyKGNvbXBvbmVudCwgImVuZCIsIGRyYWdjYXJldCwgMCk7CisJCQkJdmFsaWRhdGUoY29tcG9uZW50KTsgLy8gY2FyZXQgY2hlY2sgb25seQorCQkJfQorCQl9CisJCS8vamF2YT4KKwkJZWxzZSBpZiAoKGlkID09IE1vdXNlRXZlbnQuTU9VU0VfRU5URVJFRCkgJiYgKG1vdXNlcHJlc3NlZCA9PSBudWxsKSkgeworCQkJc2V0Q3Vyc29yKEN1cnNvci5nZXRQcmVkZWZpbmVkQ3Vyc29yKEN1cnNvci5URVhUX0NVUlNPUikpOworCQl9CisJCWVsc2UgaWYgKCgoaWQgPT0gTW91c2VFdmVudC5NT1VTRV9FWElURUQpICYmIChtb3VzZXByZXNzZWQgPT0gbnVsbCkpIHx8CisJCQkoKGlkID09IE1vdXNlRXZlbnQuTU9VU0VfUkVMRUFTRUQpICYmCisJCQkJKChtb3VzZWluc2lkZSAhPSBjb21wb25lbnQpIHx8IChpbnNpZGVwYXJ0ICE9IG51bGwpKSkpIHsKKwkJCXNldEN1cnNvcihDdXJzb3IuZ2V0UHJlZGVmaW5lZEN1cnNvcihDdXJzb3IuREVGQVVMVF9DVVJTT1IpKTsKKwkJfQorCQkvLzxqYXZhCisJfQorCisJLyoqCisJICoKKwkgKi8KKwlwcml2YXRlIGludCBnZXRDYXJldExvY2F0aW9uKE9iamVjdCBjb21wb25lbnQsIGludCB4LCBpbnQgeSwgYm9vbGVhbiBoaWRkZW4pIHsKKwkJU3RyaW5nIHRleHQgPSBnZXRTdHJpbmcoY29tcG9uZW50LCAidGV4dCIsICIiKTsKKwkJRm9udE1ldHJpY3MgZm0gPSBnZXRGb250TWV0cmljcyhnZXRGb250KCkpOworCQlmb3IgKGludCBpID0gMCwgaiA9IDA7IHRydWU7IGkgPSBqICsgMSkgeworCQkJaiA9IHRleHQuaW5kZXhPZignXG4nLCBpKTsKKwkJCWlmICgoaiA9PSAtMSkgfHwgeSA8IGZtLmdldEhlaWdodCgpKSB7CisJCQkJaWYgKGogPT0gLTEpIHsgaiA9IHRleHQubGVuZ3RoKCk7IH0KKwkJCQlmb3IgKGludCBrID0gaTsgayA8IGo7IGsrKykgeworCQkJCQlpbnQgY2hhcndpZHRoID0gZm0uY2hhcldpZHRoKGhpZGRlbiA/ICcqJyA6IHRleHQuY2hhckF0KGspKTsKKwkJCQkJaWYgKHggPD0gKGNoYXJ3aWR0aCAvIDIpKSB7CisJCQkJCQlyZXR1cm4gazsKKwkJCQkJfQorCQkJCQl4IC09IGNoYXJ3aWR0aDsKKwkJCQl9CisJCQkJcmV0dXJuIGo7CisJCQl9CisJCQl5IC09IGZtLmdldEhlaWdodCgpOworCQl9CisJfQorCQorCS8qKgorCSAqCisJICovCisJcHJpdmF0ZSBib29sZWFuIHByb2Nlc3NTY3JvbGwoaW50IHgsIGludCB5LAorCQkJaW50IGlkLCBPYmplY3QgY29tcG9uZW50LCBPYmplY3QgcGFydCkgeworCQlpZiAoKHBhcnQgPT0gInVwIikgfHwgKHBhcnQgPT0gImRvd24iKSB8fAorCQkJCShwYXJ0ID09ICJsZWZ0IikgfHwgKHBhcnQgPT0gInJpZ2h0IikpIHsKKwkJCWlmICgoaWQgPT0gTW91c2VFdmVudC5NT1VTRV9FTlRFUkVEKSB8fAorCQkJCQkoaWQgPT0gTW91c2VFdmVudC5NT1VTRV9FWElURUQpIHx8CisJCQkJCShpZCA9PSBNb3VzZUV2ZW50Lk1PVVNFX1BSRVNTRUQpIHx8CisJCQkJCShpZCA9PSBNb3VzZUV2ZW50Lk1PVVNFX1JFTEVBU0VEKSkgeworCQkJCWlmIChpZCA9PSBNb3VzZUV2ZW50Lk1PVVNFX1BSRVNTRUQpIHsKKwkJCQkJaWYgKHByb2Nlc3NTY3JvbGwoY29tcG9uZW50LCBwYXJ0KSkgeworCQkJCQkJc2V0VGltZXIoMzAwTCk7IHJldHVybiB0cnVlOworCQkJCQl9CisJCQkJfQorCQkJCWVsc2UgeworCQkJCQlpZiAoaWQgPT0gTW91c2VFdmVudC5NT1VTRV9SRUxFQVNFRCkgeyBzZXRUaW1lcigwTCk7IH0KKwkJCQkJcmVwYWludChjb21wb25lbnQsIG51bGwsIHBhcnQpOworCQkJCX0KKwkJCX0KKwkJfQorCQllbHNlIGlmICgocGFydCA9PSAidXB0cmFjayIpIHx8IChwYXJ0ID09ICJkb3dudHJhY2siKSB8fAorCQkJCShwYXJ0ID09ICJsZWZ0dHJhY2siKSB8fCAocGFydCA9PSAicmlnaHR0cmFjayIpKSB7CisJCQlpZiAoaWQgPT0gTW91c2VFdmVudC5NT1VTRV9QUkVTU0VEKSB7CisJCQkJaWYgKHByb2Nlc3NTY3JvbGwoY29tcG9uZW50LCBwYXJ0KSkgeworCQkJCQlzZXRUaW1lcigzMDBMKTsKKwkJCQl9CisJCQl9CisJCQllbHNlIGlmIChpZCA9PSBNb3VzZUV2ZW50Lk1PVVNFX1JFTEVBU0VEKSB7CisJCQkJc2V0VGltZXIoMEwpOworCQkJfQorCQl9CisJCWVsc2UgaWYgKChwYXJ0ID09ICJ2a25vYiIpIHx8IChwYXJ0ID09ICJoa25vYiIpKSB7CisJCQlpZiAoaWQgPT0gTW91c2VFdmVudC5NT1VTRV9QUkVTU0VEKSB7CisJCQkJUmVjdGFuZ2xlIHBvcnQgPSBnZXRSZWN0YW5nbGUoY29tcG9uZW50LCAiOnBvcnQiKTsKKwkJCQlSZWN0YW5nbGUgdmlldyA9IGdldFJlY3RhbmdsZShjb21wb25lbnQsICI6dmlldyIpOworCQkJCWlmIChwYXJ0ID09ICJoa25vYiIpIHsKKwkJCQkJcmVmZXJlbmNleCA9IHggLQorCQkJCQkJdmlldy54ICogKHBvcnQud2lkdGggLSAyICogYmxvY2spIC8gdmlldy53aWR0aDsKKwkJCQl9IGVsc2UgeworCQkJCQlyZWZlcmVuY2V5ID0geSAtCisJCQkJCQl2aWV3LnkgKiAocG9ydC5oZWlnaHQgLSAyICogYmxvY2spIC8gdmlldy5oZWlnaHQ7CisJCQkJfQorCQkJfQorCQkJZWxzZSBpZiAoaWQgPT0gTW91c2VFdmVudC5NT1VTRV9EUkFHR0VEKSB7CisJCQkJUmVjdGFuZ2xlIHBvcnQgPSBnZXRSZWN0YW5nbGUoY29tcG9uZW50LCAiOnBvcnQiKTsKKwkJCQlSZWN0YW5nbGUgdmlldyA9IGdldFJlY3RhbmdsZShjb21wb25lbnQsICI6dmlldyIpOworCQkJCWlmIChwYXJ0ID09ICJoa25vYiIpIHsKKwkJCQkJaW50IHZpZXd4ID0gKHggLSByZWZlcmVuY2V4KSAqCisJCQkJCQl2aWV3LndpZHRoIC8gKHBvcnQud2lkdGggLSAyICogYmxvY2spOworCQkJCQl2aWV3eCA9IE1hdGgubWF4KDAsIE1hdGgubWluKHZpZXd4LCB2aWV3LndpZHRoIC0gcG9ydC53aWR0aCArIDIpKTsKKwkJCQkJaWYgKHZpZXcueCAhPSB2aWV3eCkgeworCQkJCQkJdmlldy54ID0gdmlld3g7CisJCQkJCQlyZXBhaW50KGNvbXBvbmVudCwgbnVsbCwgImhvcml6b250YWwiKTsKKwkJCQkJfQorCQkJCX0gZWxzZSB7CisJCQkJCWludCB2aWV3eSA9ICh5IC0gcmVmZXJlbmNleSkgKgorCQkJCQkJdmlldy5oZWlnaHQgLyAocG9ydC5oZWlnaHQgLSAyICogYmxvY2spOworCQkJCQl2aWV3eSA9IE1hdGgubWF4KDAsIE1hdGgubWluKHZpZXd5LCB2aWV3LmhlaWdodCAtIHBvcnQuaGVpZ2h0ICsgMikpOworCQkJCQlpZiAodmlldy55ICE9IHZpZXd5KSB7CisJCQkJCQl2aWV3LnkgPSB2aWV3eTsKKwkJCQkJCXJlcGFpbnQoY29tcG9uZW50LCBudWxsLCAidmVydGljYWwiKTsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJfQorCQllbHNlIGlmIChwYXJ0ID09ICJjb3JuZXIiKSB7CisJCQkJcGFydCA9ICJjb3JuZXIiOyAvLyBjb21waWxlciBidWcKKwkJfQorCQllbHNlIHsKKwkJCWlmIChpZCA9PSBNb3VzZUV2ZW50Lk1PVVNFX1BSRVNTRUQpIHsKKwkJCQlSZWN0YW5nbGUgcG9ydCA9IGdldFJlY3RhbmdsZShjb21wb25lbnQsICI6cG9ydCIpOworCQkJCXNldFJlZmVyZW5jZShjb21wb25lbnQsIHBvcnQueCArIDEsIHBvcnQueSArIDEpOworCQkJfQorCQkJcmV0dXJuIGZhbHNlOworCQl9CisJCXJldHVybiB0cnVlOworCX0KKworCS8qKgorCSAqCisJICovCisJcHJpdmF0ZSBib29sZWFuIHByb2Nlc3NTY3JvbGwoT2JqZWN0IGNvbXBvbmVudCwgT2JqZWN0IHBhcnQpIHsKKwkJUmVjdGFuZ2xlIHZpZXcgPSBnZXRSZWN0YW5nbGUoY29tcG9uZW50LCAiOnZpZXciKTsKKwkJUmVjdGFuZ2xlIHBvcnQgPSAoKHBhcnQgPT0gImxlZnQiKSB8fCAocGFydCA9PSAidXAiKSkgPyBudWxsIDoKKwkJCWdldFJlY3RhbmdsZShjb21wb25lbnQsICI6cG9ydCIpOworCQlpbnQgZHggPSAwOyBpbnQgZHkgPSAwOworCQlpZiAocGFydCA9PSAibGVmdCIpIHsgZHggPSAtMTA7IH0KKwkJZWxzZSBpZiAocGFydCA9PSAibGVmdHRyYWNrIikgeyBkeCA9IC1wb3J0LndpZHRoOyB9CisJCWVsc2UgaWYgKHBhcnQgPT0gInJpZ2h0IikgeyBkeCA9IDEwOyB9CisJCWVsc2UgaWYgKHBhcnQgPT0gInJpZ2h0dHJhY2siKSB7IGR4ID0gcG9ydC53aWR0aDsgfQorCQllbHNlIGlmIChwYXJ0ID09ICJ1cCIpIHsgZHkgPSAtMTA7IH0KKwkJZWxzZSBpZiAocGFydCA9PSAidXB0cmFjayIpIHsgZHkgPSAtcG9ydC5oZWlnaHQ7IH0KKwkJZWxzZSBpZiAocGFydCA9PSAiZG93biIpIHsgZHkgPSAxMDsgfQorCQllbHNlIGlmIChwYXJ0ID09ICJkb3dudHJhY2siKSB7IGR5ID0gcG9ydC5oZWlnaHQ7IH0KKwkJaWYgKGR4ICE9IDApIHsKKwkJCWR4ID0gKGR4IDwgMCkgPyBNYXRoLm1heCgtdmlldy54LCBkeCkgOgorCQkJCU1hdGgubWluKGR4LCB2aWV3LndpZHRoIC0gcG9ydC53aWR0aCArIDIgLSB2aWV3LngpOworCQl9CisJCWVsc2UgaWYgKGR5ICE9IDApIHsKKwkJCWR5ID0gKGR5IDwgMCkgPyBNYXRoLm1heCgtdmlldy55LCBkeSkgOgorCQkJCU1hdGgubWluKGR5LCB2aWV3LmhlaWdodCAtIHBvcnQuaGVpZ2h0ICsgMiAtIHZpZXcueSk7CisJCX0KKwkJZWxzZSByZXR1cm4gZmFsc2U7CisJCXZpZXcueCArPSBkeDsgdmlldy55ICs9IGR5OworCQlyZXBhaW50KGNvbXBvbmVudCwgbnVsbCwgKGR4ICE9IDApID8gImhvcml6b250YWwiIDogInZlcnRpY2FsIik7CisJCXJldHVybiAoKChwYXJ0ID09ICJsZWZ0IikgfHwgKHBhcnQgPT0gImxlZnR0cmFjayIpKSAmJiAodmlldy54ID4gMCkpIHx8CisJCQkoKChwYXJ0ID09ICJyaWdodCIpIHx8IChwYXJ0ID09ICJyaWdodHRyYWNrIikpICYmCisJCQkJKHZpZXcueCA8IHZpZXcud2lkdGggLSBwb3J0LndpZHRoICsgMikpIHx8CisJCQkoKChwYXJ0ID09ICJ1cCIpIHx8IChwYXJ0ID09ICJ1cHRyYWNrIikpICYmICh2aWV3LnkgPiAwKSkgfHwKKwkJCSgoKHBhcnQgPT0gImRvd24iKSB8fCAocGFydCA9PSAiZG93bnRyYWNrIikpICYmCisJCQkJKHZpZXcueSA8IHZpZXcuaGVpZ2h0IC0gcG9ydC5oZWlnaHQgKyAyKSk7CisJfQorCisJLyoqCisJICoKKwkgKi8KKwlwcml2YXRlIGJvb2xlYW4gcHJvY2Vzc1NwaW4oT2JqZWN0IGNvbXBvbmVudCwgT2JqZWN0IHBhcnQpIHsKKwkJU3RyaW5nIHRleHQgPSBnZXRTdHJpbmcoY29tcG9uZW50LCAidGV4dCIsIG51bGwpOworCQlpZiAodGV4dCAhPSBudWxsKSB7CisJCQl0cnkgeworCQkJCVN0cmluZyB2YWx1ZSA9IFN0cmluZy52YWx1ZU9mKAorCQkJCQlJbnRlZ2VyLnBhcnNlSW50KHRleHQpICsgKChwYXJ0ID09ICJ1cCIpID8gMSA6IC0xKSk7CisJCQkJc2V0U3RyaW5nKGNvbXBvbmVudCwgInRleHQiLCB2YWx1ZSwgbnVsbCk7CisJCQkJc2V0SW50ZWdlcihjb21wb25lbnQsICJzdGFydCIsIHZhbHVlLmxlbmd0aCgpLCAwKTsKKwkJCQlzZXRJbnRlZ2VyKGNvbXBvbmVudCwgImVuZCIsIDAsIDApOworCQkJCXJlcGFpbnQoY29tcG9uZW50LCAic3BpbmJveCIsIG51bGwpOworCQkJCWludm9rZShjb21wb25lbnQsICJhY3Rpb24iKTsKKwkJCQlyZXR1cm4gdHJ1ZTsKKwkJCX0gY2F0Y2ggKE51bWJlckZvcm1hdEV4Y2VwdGlvbiBuZmUpIHt9CisJCX0KKwkJcmV0dXJuIGZhbHNlOworCX0KKworCS8vamF2YT4KKwkvKnB1YmxpYyB2b2lkIHNldEV2ZW50SGFuZGxlcihPYmplY3QgY29tcG9uZW50LCBPYmplY3QgZXZlbnRoYW5kbGVyKSB7CisJCXNldChjb21wb25lbnQsICI6aGFuZGxlciIsIGV2ZW50aGFuZGxlcik7CisJfSovCisJCisJLyoqCisJICoKKwkgKi8KKwlwcml2YXRlIHZvaWQgaW52b2tlKE9iamVjdCBjb21wb25lbnQsIFN0cmluZyBldmVudCkgeworCQlNZXRob2QgbWV0aG9kID0gKE1ldGhvZCkgZ2V0KGNvbXBvbmVudCwgZXZlbnQpOworCQlpZiAobWV0aG9kICE9IG51bGwpIHsKKwkJCXRyeSB7CisJCQkJbWV0aG9kLmludm9rZSh0aGlzLCBudWxsKTsKKwkJCX0gY2F0Y2ggKEludm9jYXRpb25UYXJnZXRFeGNlcHRpb24gaXRlKSB7CisJCQkJaXRlLmdldFRhcmdldEV4Y2VwdGlvbigpLnByaW50U3RhY2tUcmFjZSgpOworCQkJfSBjYXRjaCAoRXhjZXB0aW9uIGV4YykgeworCQkJCWV4Yy5wcmludFN0YWNrVHJhY2UoKTsKKwkJCX0KKwkJfQorCX0KKwkvLzxqYXZhCisJLyptaWRwCisJcHJpdmF0ZSB2b2lkIGludm9rZShPYmplY3QgY29tcG9uZW50LCBTdHJpbmcgZXZlbnQpIHsKKwkJCVN0cmluZyBhY3Rpb24gPSAoU3RyaW5nKSBnZXQoY29tcG9uZW50LCBldmVudCk7CisJCQlpZiAoYWN0aW9uICE9IG51bGwpIHsgaGFuZGxlKGNvbXBvbmVudCwgYWN0aW9uKTsgfQorCX0KKwlwcm90ZWN0ZWQgdm9pZCBoYW5kbGUoT2JqZWN0IHNvdXJjZSwgU3RyaW5nIGFjdGlvbikgeworCX0KKwltaWRwKi8KKworCS8qKgorCSAqCisJICovCisJcHJpdmF0ZSBib29sZWFuIGZpbmRDb21wb25lbnQoT2JqZWN0IGNvbXBvbmVudCwgaW50IHgsIGludCB5KSB7CisJCWlmIChjb21wb25lbnQgPT0gY29udGVudCkgeworCQkJbW91c2VpbnNpZGUgPSBpbnNpZGVwYXJ0ID0gbnVsbDsKKwkJCW1vdXNleCA9IHg7IG1vdXNleSA9IHk7CisJCX0KKwkJaWYgKCFnZXRCb29sZWFuKGNvbXBvbmVudCwgInZpc2libGUiLCB0cnVlKSkgeyByZXR1cm4gZmFsc2U7IH0KKwkJUmVjdGFuZ2xlIGJvdW5kcyA9IGdldFJlY3RhbmdsZShjb21wb25lbnQsICJib3VuZHMiKTsKKwkJaWYgKChib3VuZHMgPT0gbnVsbCkgfHwgIShib3VuZHMuY29udGFpbnMoeCwgeSkpKSB7IHJldHVybiBmYWxzZTsgfSAvL2phdmEKKwkJLy9taWRwIGlmICgoYm91bmRzID09IG51bGwpIHx8ICh4IDwgYm91bmRzLngpIHx8ICh4IC0gYm91bmRzLnggPj0gYm91bmRzLndpZHRoKSB8fAorCQkvL21pZHAgCSh5IDwgYm91bmRzLnkpIHx8ICh5IC0gYm91bmRzLnkgPj0gYm91bmRzLmhlaWdodCkpIHsgcmV0dXJuIGZhbHNlOyB9CisJCW1vdXNlaW5zaWRlID0gY29tcG9uZW50OworCQl4IC09IGJvdW5kcy54OyB5IC09IGJvdW5kcy55OworCQlTdHJpbmcgY2xhc3NuYW1lID0gZ2V0Q2xhc3MoY29tcG9uZW50KTsKKworCQlpZiAoImNvbWJvYm94IiA9PSBjbGFzc25hbWUpIHsKKwkJCWlmIChnZXRCb29sZWFuKGNvbXBvbmVudCwgImVkaXRhYmxlIiwgdHJ1ZSkgJiYgKHggPD0gYm91bmRzLndpZHRoIC0gYmxvY2spKSB7CisJCQkJSW1hZ2UgaWNvbiA9IGdldEljb24oY29tcG9uZW50LCAiaWNvbiIsIG51bGwpOworCQkJCWluc2lkZXBhcnQgPSAoKGljb24gIT0gbnVsbCkgJiYgKHggPD0gMiArIGljb24uZ2V0V2lkdGgodGhpcykpKSA/CisJCQkJCSJpY29uIiA6IG51bGw7CisJCQl9IGVsc2UgeworCQkJCWluc2lkZXBhcnQgPSAiZG93biI7CisJCQl9CisJCX0KKwkJZWxzZSBpZiAoImNvbWJvbGlzdCIgPT0gY2xhc3NuYW1lKSB7CisJCQlpZiAoIWZpbmRTY3JvbGxQYW5lKGNvbXBvbmVudCwgeCwgeSwgYm91bmRzKSkgeworCQkJCXkgKz0gZ2V0UmVjdGFuZ2xlKGNvbXBvbmVudCwgIjp2aWV3IikueTsKKwkJCQlmb3IgKE9iamVjdCBjaG9pY2UgPSBnZXQoZ2V0KGNvbXBvbmVudCwgImNvbWJvYm94IiksICJjaG9pY2UiKTsKKwkJCQkJCWNob2ljZSAhPSBudWxsOyBjaG9pY2UgPSBnZXQoY2hvaWNlLCAiOm5leHQiKSkgeworCQkJCQlSZWN0YW5nbGUgciA9IGdldFJlY3RhbmdsZShjaG9pY2UsICJib3VuZHMiKTsKKwkJCQkJaWYgKCh5ID49IHIueSkgJiYgKHkgPCByLnkgKyByLmhlaWdodCkpIHsKKwkJCQkJCWluc2lkZXBhcnQgPSBjaG9pY2U7IGJyZWFrOworCQkJCQl9CisJCQkJfQorCQkJfQorCQl9CisJCWVsc2UgaWYgKCJ0ZXh0YXJlYSIgPT0gY2xhc3NuYW1lKSB7CisJCQlmaW5kU2Nyb2xsUGFuZShjb21wb25lbnQsIHgsIHksIGJvdW5kcyk7CisJCX0KKwkJZWxzZSBpZiAoInRhYmJlZHBhbmUiID09IGNsYXNzbmFtZSkgeworCQkJT2JqZWN0IHRhYmNvbnRlbnQgPSBnZXRJdGVtSW1wbChjb21wb25lbnQsCisJCQkJImNvbXBvbmVudCIsIGdldEludGVnZXIoY29tcG9uZW50LCAic2VsZWN0ZWQiLCAwKSk7CisJCQlpZiAoKHRhYmNvbnRlbnQgPT0gbnVsbCkgfHwgIWZpbmRDb21wb25lbnQodGFiY29udGVudCwgeCwgeSkpIHsKKwkJCQlmb3IgKE9iamVjdCBjb21wID0gZ2V0KGNvbXBvbmVudCwgInRhYiIpOworCQkJCQkJY29tcCAhPSBudWxsOyBjb21wID0gZ2V0KGNvbXAsICI6bmV4dCIpKSB7CisJCQkJCVJlY3RhbmdsZSByID0gZ2V0UmVjdGFuZ2xlKGNvbXAsICJib3VuZHMiKTsKKwkJCQkJaWYgKHIuY29udGFpbnMoeCwgeSkpIHsgLy9qYXZhCisJCQkJCS8vbWlkcCBpZiAoKHggPj0gci54KSAmJiAoeCAtIHIueCA8IHIud2lkdGgpICYmICh5ID49IHIueSkgJiYgKHkgLSByLnkgPCByLmhlaWdodCkpIHsKKwkJCQkJCWluc2lkZXBhcnQgPSBjb21wOyBicmVhazsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJfQorCQllbHNlIGlmICgoInBhbmVsIiA9PSBjbGFzc25hbWUpIHx8ICgiZGVza3RvcCIgPT0gY2xhc3NuYW1lKSB8fAorCQkJCSgiZGlhbG9nIiA9PSBjbGFzc25hbWUpKSB7CisJCQlpZiAoKCJkaWFsb2ciID09IGNsYXNzbmFtZSkgJiYKKwkJCQkJKHkgPCA0ICsgZ2V0SW50ZWdlcihjb21wb25lbnQsICJ0aXRsZWhlaWdodCIsIDApKSkgeworCQkJCWluc2lkZXBhcnQgPSAiaGVhZGVyIjsKKwkJCX0gZWxzZSB7CisJCQkJZm9yIChPYmplY3QgY29tcCA9IGdldChjb21wb25lbnQsICJjb21wb25lbnQiKTsKKwkJCQkJCWNvbXAgIT0gbnVsbDsgY29tcCA9IGdldChjb21wLCAiOm5leHQiKSkgeworCQkJCQlpZiAoZmluZENvbXBvbmVudChjb21wLCB4LCB5KSkgeyBicmVhazsgfQorCQkJCQlpZiAoKCJkZXNrdG9wIiA9PSBjbGFzc25hbWUpICYmCisJCQkJCQkJZ2V0Qm9vbGVhbihjb21wLCAibW9kYWwiLCBmYWxzZSkpIHsgYnJlYWs7IH0gLy8gJiYgZGlhbG9nCisJCQkJfQorCQkJfQorCQl9CisJCWVsc2UgaWYgKCJzcGluYm94IiA9PSBjbGFzc25hbWUpIHsKKwkJCWluc2lkZXBhcnQgPSAoeCA8PSBib3VuZHMud2lkdGggLSBibG9jaykgPyBudWxsIDoKKwkJCQkoKHkgPD0gYm91bmRzLmhlaWdodCAvIDIpID8gInVwIiA6ICJkb3duIik7CisJCX0KKwkJZWxzZSBpZiAoInNwbGl0cGFuZSIgPT0gY2xhc3NuYW1lKSB7IAorCQkJT2JqZWN0IGNvbXAxID0gZ2V0KGNvbXBvbmVudCwgImNvbXBvbmVudCIpOworCQkJaWYgKGNvbXAxICE9IG51bGwpIHsKKwkJCQlpZiAoIWZpbmRDb21wb25lbnQoY29tcDEsIHgsIHkpKSB7CisJCQkJCU9iamVjdCBjb21wMiA9IGdldChjb21wMSwgIjpuZXh0Iik7CisJCQkJCWlmIChjb21wMiAhPSBudWxsKSB7CisJCQkJCQlmaW5kQ29tcG9uZW50KGNvbXAyLCB4LCB5KTsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJfQorCQllbHNlIGlmICgibGlzdCIgPT0gY2xhc3NuYW1lKSB7CisJCQlmaW5kU2Nyb2xsUGFuZShjb21wb25lbnQsIHgsIHksIGJvdW5kcyk7CisJCX0KKwkJZWxzZSBpZiAoInRhYmxlIiA9PSBjbGFzc25hbWUpIHsKKwkJCWZpbmRTY3JvbGxQYW5lKGNvbXBvbmVudCwgeCwgeSwgYm91bmRzKTsKKwkJfQorCQllbHNlIGlmICgidHJlZSIgPT0gY2xhc3NuYW1lKSB7CisJCQlmaW5kU2Nyb2xsUGFuZShjb21wb25lbnQsIHgsIHksIGJvdW5kcyk7CisJCX0KKwkJZWxzZSBpZiAoIm1lbnViYXIiID09IGNsYXNzbmFtZSkgeworCQkJZm9yIChPYmplY3QgbWVudSA9IGdldChjb21wb25lbnQsICJtZW51Iik7CisJCQkJCW1lbnUgIT0gbnVsbDsgbWVudSA9IGdldChtZW51LCAiOm5leHQiKSkgeworCQkJCVJlY3RhbmdsZSByID0gZ2V0UmVjdGFuZ2xlKG1lbnUsICJib3VuZHMiKTsKKwkJCQlpZiAoKHggPj0gci54KSAmJiAoeCA8IHIueCArIHIud2lkdGgpKSB7CisJCQkJCWluc2lkZXBhcnQgPSBtZW51OyBicmVhazsKKwkJCQl9CisJCQl9CisJCX0KKwkJZWxzZSBpZiAoInBvcHVwbWVudSIgPT0gY2xhc3NuYW1lKSB7CisJCQlmb3IgKE9iamVjdCBtZW51ID0gZ2V0KGdldChjb21wb25lbnQsICJtZW51IiksICJtZW51Iik7CisJCQkJCW1lbnUgIT0gbnVsbDsgbWVudSA9IGdldChtZW51LCAiOm5leHQiKSkgeworCQkJCVJlY3RhbmdsZSByID0gZ2V0UmVjdGFuZ2xlKG1lbnUsICJib3VuZHMiKTsKKwkJCQlpZiAoKHkgPj0gci55KSAmJiAoeSA8IHIueSArIHIuaGVpZ2h0KSkgeworCQkJCQlpbnNpZGVwYXJ0ID0gbWVudTsgYnJlYWs7CisJCQkJfQorCQkJfQorCQl9CisJCXJldHVybiB0cnVlOworCX0KKworCS8qKgorCSAqCisJICovCisJcHJpdmF0ZSBib29sZWFuIGZpbmRTY3JvbGxQYW5lKE9iamVjdCBjb21wb25lbnQsCisJCQlpbnQgeCwgaW50IHksIFJlY3RhbmdsZSBib3VuZHMpIHsKKwkJUmVjdGFuZ2xlIHBvcnQgPSBnZXRSZWN0YW5nbGUoY29tcG9uZW50LCAiOnBvcnQiKTsKKwkJaWYgKCh4IDwgcG9ydC54KSB8fCAoeSA8IHBvcnQueSkgfHwKKwkJCQkoKHggPj0gcG9ydC54ICsgcG9ydC53aWR0aCkgJiYgKHkgPj0gcG9ydC55ICsgcG9ydC5oZWlnaHQpKSkgeworCQkJaW5zaWRlcGFydCA9ICJjb3JuZXIiOworCQl9CisJCWVsc2UgaWYgKCh4ID49IHBvcnQueCArIHBvcnQud2lkdGgpIHx8ICh5ID49IHBvcnQueSArIHBvcnQuaGVpZ2h0KSkgeworCQkJYm9vbGVhbiBob3Jpem9udGFsID0gKHkgPj0gcG9ydC55ICsgcG9ydC5oZWlnaHQpOworCQkJaW50IHAgPSBob3Jpem9udGFsID8gKHggLSBwb3J0LngpIDogKHkgLSBwb3J0LnkpOworCQkJaW50IHBvcnRzaXplID0gaG9yaXpvbnRhbCA/IHBvcnQud2lkdGggOiBwb3J0LmhlaWdodDsKKwkJCWludCBidXR0b24gPSBNYXRoLm1pbihibG9jaywgcG9ydHNpemUgLyAyKTsKKwkJCWlmIChwIDwgYnV0dG9uKSB7CisJCQkJaW5zaWRlcGFydCA9IGhvcml6b250YWwgPyAibGVmdCIgOiAidXAiOworCQkJfQorCQkJZWxzZSBpZiAocCA+PSBwb3J0c2l6ZSAtIGJ1dHRvbikgeworCQkJCWluc2lkZXBhcnQgPSBob3Jpem9udGFsID8gInJpZ2h0IiA6ICJkb3duIjsKKwkJCX0KKwkJCWVsc2UgeworCQkJCVJlY3RhbmdsZSB2aWV3ID0gZ2V0UmVjdGFuZ2xlKGNvbXBvbmVudCwgIjp2aWV3Iik7CisJCQkJaW50IHZpZXdwID0gaG9yaXpvbnRhbCA/IHZpZXcueCA6IHZpZXcueTsKKwkJCQlpbnQgdmlld3NpemUgPSBob3Jpem9udGFsID8gdmlldy53aWR0aCA6IHZpZXcuaGVpZ2h0OworCQkJCWludCB0cmFjayA9IHBvcnRzaXplIC0gKDIgKiBidXR0b24pOworCQkJCWludCBrbm9iID0gTWF0aC5taW4odHJhY2ssCisJCQkJCU1hdGgubWF4KHRyYWNrICogKHBvcnRzaXplIC0gMikgLyB2aWV3c2l6ZSwgNikpOworCQkJCWludCBkZWNyZWFzZSA9IHZpZXdwICogKHRyYWNrIC0ga25vYikgLyAodmlld3NpemUgLSBwb3J0c2l6ZSArIDIpOworCQkJCWlmIChwIDwgYnV0dG9uICsgZGVjcmVhc2UpIHsKKwkJCQkJaW5zaWRlcGFydCA9IGhvcml6b250YWwgPyAibGVmdHRyYWNrIiA6ICJ1cHRyYWNrIjsKKwkJCQl9CisJCQkJZWxzZSBpZiAocCA8IGJ1dHRvbiArIGRlY3JlYXNlICsga25vYikgeworCQkJCQlpbnNpZGVwYXJ0ID0gaG9yaXpvbnRhbCA/ICJoa25vYiIgOiAidmtub2IiOworCQkJCX0KKwkJCQllbHNlIHsKKwkJCQkJaW5zaWRlcGFydCA9IGhvcml6b250YWwgPyAicmlnaHR0cmFjayIgOiAiZG93bnRyYWNrIjsKKwkJCQl9CisJCQl9CisJCX0KKwkJZWxzZSB7IHJldHVybiBmYWxzZTsgfQorCQlyZXR1cm4gdHJ1ZTsKKwl9CisKKwkvKioKKwkgKgorCSAqLworCXByaXZhdGUgdm9pZCByZXBhaW50KE9iamVjdCBjb21wb25lbnQsIE9iamVjdCBjbGFzc25hbWUsIE9iamVjdCBwYXJ0KSB7CisJCVJlY3RhbmdsZSBiID0gZ2V0UmVjdGFuZ2xlKGNvbXBvbmVudCwgImJvdW5kcyIpOworCQlpZiAoKGNsYXNzbmFtZSA9PSAiY29tYm9ib3giKSB8fCAoY2xhc3NuYW1lID09ICJzcGluYm94IikpIHsKKwkJCWJvb2xlYW4gZG93biA9IChwYXJ0ID09ICJ1cCIpIHx8IChwYXJ0ID09ICJkb3duIik7IC8vIGVsc2UgdGV4dAorCQkJcmVwYWludChjb21wb25lbnQsIGRvd24gPyAoYi54ICsgYi53aWR0aCAtIGJsb2NrKSA6IGIueCwgYi55LAorCQkJCWRvd24gPyBibG9jayA6IChiLndpZHRoIC0gYmxvY2spLCBiLmhlaWdodCk7CisJCX0KKwkJLy9lbHNlIGlmIChjbGFzc25hbWUgPT0gImRpYWxvZyIpIHt9CisJCQkvL2ludCB0aXRsZWhlaWdodCA9IGdldEludGVnZXIoY29tcG9uZW50LCAidGl0bGVoZWlnaHQiLCAwKTsKKwkJLy9lbHNlIGlmIChjbGFzc25hbWUgPT0gInNwbGl0cGFuZSIpIHt9CisJCWVsc2UgaWYgKChjbGFzc25hbWUgPT0gInRhYmJlZHBhbmUiKSB8fAorCQkJCShjbGFzc25hbWUgPT0gIm1lbnViYXIiKSB8fCAoY2xhc3NuYW1lID09ICJwb3B1cG1lbnUiKSkgeworCQkJUmVjdGFuZ2xlIHIgPSBnZXRSZWN0YW5nbGUocGFydCwgImJvdW5kcyIpOworCQkJcmVwYWludChjb21wb25lbnQsIGIueCArIHIueCwgYi55ICsgci55LAorCQkJCShjbGFzc25hbWUgPT0gInBvcHVwbWVudSIpID8gYi53aWR0aCA6IHIud2lkdGgsIHIuaGVpZ2h0KTsKKwkJfQorCQllbHNlIC8vaWYgKChjbGFzc25hbWUgPT0gImNvbWJvbGlzdCIpIHx8IChjbGFzc25hbWUgPT0gInRleHRhcmVhIikgfHwKKwkJCQl7Ly8oY2xhc3NuYW1lID09ICJsaXN0IikgfHwgKGNsYXNzbmFtZSA9PSAidGFibGUiKSB8fCAoY2xhc3NuYW1lID09ICJ0cmVlIikpIHsKKwkJCVJlY3RhbmdsZSBwb3J0ID0gZ2V0UmVjdGFuZ2xlKGNvbXBvbmVudCwgIjpwb3J0Iik7CisJCQlpZiAocGFydCA9PSAibGVmdCIpIHsKKwkJCQlyZXBhaW50KGNvbXBvbmVudCwgYi54ICsgcG9ydC54LCBiLnkgKyBiLmhlaWdodCAtIGJsb2NrLCBibG9jaywgYmxvY2spOworCQkJfQorCQkJZWxzZSBpZiAocGFydCA9PSAicmlnaHQiKSB7CisJCQkJcmVwYWludChjb21wb25lbnQsIGIueCArIHBvcnQueCArIHBvcnQud2lkdGggLSBibG9jaywgYi55ICsgYi5oZWlnaHQgLSBibG9jaywgYmxvY2ssIGJsb2NrKTsKKwkJCX0KKwkJCWVsc2UgaWYgKHBhcnQgPT0gInVwIikgeworCQkJCXJlcGFpbnQoY29tcG9uZW50LCBiLnggKyBiLndpZHRoIC0gYmxvY2ssIGIueSArIHBvcnQueSwgYmxvY2ssIGJsb2NrKTsKKwkJCX0KKwkJCWVsc2UgaWYgKHBhcnQgPT0gImRvd24iKSB7CisJCQkJcmVwYWludChjb21wb25lbnQsIGIueCArIGIud2lkdGggLSBibG9jaywgYi55ICsgcG9ydC55ICsgcG9ydC5oZWlnaHQgLSBibG9jaywgYmxvY2ssIGJsb2NrKTsKKwkJCX0KKwkJCWVsc2UgaWYgKHBhcnQgPT0gImhvcml6b250YWwiKSB7IC8vIGhvcml6b250YWx5IGNlbnRlciBwYXJ0CisJCQkJcmVwYWludChjb21wb25lbnQsIGIueCArIHBvcnQueCwgYi55LCBwb3J0LndpZHRoLCBiLmhlaWdodCk7CisJCQl9CisJCQllbHNlIGlmIChwYXJ0ID09ICJ2ZXJ0aWNhbCIpIHsKKwkJCQlyZXBhaW50KGNvbXBvbmVudCwgYi54LCBiLnkgKyBwb3J0LnksIGIud2lkdGgsIHBvcnQuaGVpZ2h0KTsKKwkJCX0KKwkJCWVsc2UgaWYgKHBhcnQgPT0gInRleHQiKSB7IC8vdGV4dGFyZWEKKwkJCQlyZXBhaW50KGNvbXBvbmVudCwgYi54ICsgcG9ydC54LCBiLnkgKyBwb3J0LnksIHBvcnQud2lkdGgsIHBvcnQuaGVpZ2h0KTsKKwkJCX0KKwkJCWVsc2UgeworCQkJCVJlY3RhbmdsZSB2aWV3ID0gZ2V0UmVjdGFuZ2xlKGNvbXBvbmVudCwgIjp2aWV3Iik7CisJCQkJUmVjdGFuZ2xlIHIgPSBnZXRSZWN0YW5nbGUocGFydCwgImJvdW5kcyIpOworCQkJCWlmICgoci55ICsgci5oZWlnaHQgPj0gdmlldy55KSAmJiAoci55IDw9IHZpZXcueSArIHBvcnQuaGVpZ2h0KSkgeworCQkJCQlyZXBhaW50KGNvbXBvbmVudCwgYi54ICsgcG9ydC54LCBiLnkgKyBwb3J0LnkgLSB2aWV3LnkgKyAxICsgci55LAorCQkJCQkJcG9ydC53aWR0aCwgci5oZWlnaHQpOworCQkJCQkvLz8gbmVlZCBjdXQgaXRlbSByZWN0YW5nbGUgYWJvdmUvYmVsbG93IHZpZXdwb3J0CisJCQkJfQorCQkJfQorCQl9CisJfQorCQorCS8qKgorCSAqCisJICovCisJcHJpdmF0ZSB2b2lkIHZhbGlkYXRlKE9iamVjdCBjb21wb25lbnQpIHsKKwkJcmVwYWludChjb21wb25lbnQpOworCQlSZWN0YW5nbGUgYm91bmRzID0gZ2V0UmVjdGFuZ2xlKGNvbXBvbmVudCwgImJvdW5kcyIpOworCQlib3VuZHMud2lkdGggPSAtMSAqIE1hdGguYWJzKGJvdW5kcy53aWR0aCk7CisJfQorCQorCS8qKgorCSAqCisJICovCisJcHJpdmF0ZSB2b2lkIHJlcGFpbnQoT2JqZWN0IGNvbXBvbmVudCkgeworCQlSZWN0YW5nbGUgYm91bmRzID0gZ2V0UmVjdGFuZ2xlKGNvbXBvbmVudCwgImJvdW5kcyIpOworCQlpZiAoYm91bmRzICE9IG51bGwpIHsKKwkJCXJlcGFpbnQoY29tcG9uZW50LCBib3VuZHMueCwgYm91bmRzLnksIGJvdW5kcy53aWR0aCwgYm91bmRzLmhlaWdodCk7CisJCX0KKwl9CisKKwkvKioKKwkgKgorCSAqLworCXByaXZhdGUgdm9pZCByZXBhaW50KE9iamVjdCBjb21wb25lbnQsIGludCB4LCBpbnQgeSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KSB7CisJCXdoaWxlICgoY29tcG9uZW50ID0gZ2V0UGFyZW50KGNvbXBvbmVudCkpICE9IG51bGwpIHsKKwkJCVJlY3RhbmdsZSBib3VuZHMgPSBnZXRSZWN0YW5nbGUoY29tcG9uZW50LCAiYm91bmRzIik7CisJCQl4ICs9IGJvdW5kcy54OworCQkJeSArPSBib3VuZHMueTsKKwkJfQorCQlyZXBhaW50KHgsIHksIHdpZHRoLCBoZWlnaHQpOworCX0KKworCS8qcHJpdmF0ZSB2b2lkIGNsaXAoR3JhcGhpY3MgZywKKwkJCVJlY3RhbmdsZSBjbGlwLCBpbnQgeCwgaW50IHksIGludCB3aWR0aCwgaW50IGhlaWdodCkgeworCQlpbnQgeDEgPSBNYXRoLm1heChjbGlwLngsIHgpOyAKKwkJaW50IHkxID0gTWF0aC5tYXgoY2xpcC55LCB5KTsKKwkJaW50IHgyID0gTWF0aC5taW4oY2xpcC54ICsgY2xpcC53aWR0aCwgeCArIHdpZHRoKTsKKwkJaW50IHkyID0gTWF0aC5taW4oY2xpcC55ICsgY2xpcC5oZWlnaHQsIHkgKyBoZWlnaHQpOworCQlnLnNldENsaXAoeDEsIHkxLCB4MiAtIHgxLCB5MiAtIHkxKTsKKwl9Ki8KKworCS8qKgorCSAqCisJICovCisJcHVibGljIGJvb2xlYW4gcmVxdWVzdEZvY3VzKE9iamVjdCBjb21wb25lbnQpIHsKKwkJaWYgKGNoZWNrRm9jdXNhYmxlKGNvbXBvbmVudCwgdHJ1ZSkpIHsKKwkJCXNldEZvY3VzKGNvbXBvbmVudCk7IHJldHVybiB0cnVlOworCQl9CisJCXJldHVybiBmYWxzZTsKKwl9CisKKwkvKioKKwkgKgorCSAqLworCXByaXZhdGUgYm9vbGVhbiBzZXRGb2N1cyhPYmplY3QgY29tcG9uZW50KSB7CisJCWlmICghZm9jdXNpbnNpZGUpIHsgLy9qYXZhCisJCQlyZXF1ZXN0Rm9jdXMoKTsgLy9qYXZhCisJCX0gLy9qYXZhCisJCWlmIChmb2N1c293bmVyICE9IGNvbXBvbmVudCkgeworCQkJT2JqZWN0IGZvY3VzZWQgPSBmb2N1c293bmVyOworCQkJZm9jdXNvd25lciA9IGNvbXBvbmVudDsKKwkJCWlmIChmb2N1c2VkICE9IG51bGwpIHsKKwkJCQkvL21vdXNlRXZlbnQobnVsbCwgRm9jdXNFdmVudC5GT0NVU19MT1NULCBmb2N1c2VkLCBudWxsLCBudWxsKTsKKwkJCQlyZXBhaW50KGZvY3VzZWQpOworCQkJCS8vZm9jdXNHYWluZWQoY29tcG9uZW50KTsKKwkJCX0KKwkJCXJldHVybiB0cnVlOworCQl9CisJCXJldHVybiBmYWxzZTsKKwl9CisJCisJLyoqCisJICogQHJldHVybiBuZXh0IGZvY3VzYWJsZSBjb21wb25lbnQgaXMgZm91bmQgKG5vdCB0aGUgZmlyc3Qgb2YgdGhlIGRlc2t0b3AvZGlhbG9nKQorCSAqLworCXByaXZhdGUgYm9vbGVhbiBzZXROZXh0Rm9jdXNhYmxlKE9iamVjdCBjdXJyZW50LCBib29sZWFuIG91dGdvKSB7CisJCWJvb2xlYW4gY29uc3VtZWQgPSB0cnVlOworCQlmb3IgKE9iamVjdCBuZXh0ID0gbnVsbCwgY29tcG9uZW50ID0gY3VycmVudDsgdHJ1ZTsgY29tcG9uZW50ID0gbmV4dCkgeworCQkJbmV4dCA9IGdldChjb21wb25lbnQsICJjb21wb25lbnQiKTsgLy8gY2hlY2sgZmlyc3Qgc3ViY29tcG9uZW50CisJCQlpZiAobmV4dCA9PSBudWxsKSB7IG5leHQgPSBnZXQoY29tcG9uZW50LCAiOm5leHQiKTsgfSAvLyBjaGVjayBuZXh0IGNvbXBvbmVudAorCQkJd2hpbGUgKG5leHQgPT0gbnVsbCkgeyAvLyBmaW5kIHRoZSBuZXh0IG9mIHRoZSBwYXJlbnRzLCBvciB0aGUgdG9wbW9zdAorCQkJCWNvbXBvbmVudCA9IGdldFBhcmVudChjb21wb25lbnQpOyAvLyBjdXJyZW50IGlzIG5vdCBvbiB0aGUgZGVza3RvcAorCQkJCWlmIChjb21wb25lbnQgPT0gbnVsbCkgeyByZXR1cm4gZmFsc2U7IH0KKwkJCQlpZiAoKGNvbXBvbmVudCA9PSBjb250ZW50KSB8fCAoKGdldENsYXNzKGNvbXBvbmVudCkgPT0gImRpYWxvZyIpICYmCisJCQkJCQkoIW91dGdvICB8fCBnZXRCb29sZWFuKGNvbXBvbmVudCwgIm1vZGFsIiwgZmFsc2UpKSkpIHsKKwkJCQkJY29uc3VtZWQgPSBmYWxzZTsgLy8gZmluZCBuZXh0IGZvY3VzYWJsZSBidXQgZG9lcyBub3QgY29uc3VtZSBldmVudAorCQkJCQluZXh0ID0gY29tcG9uZW50OyAvLyB0aGUgdG9wbW9zdCAoZGVza3RvcCBvciBtb2RhbCBkaWFsb2cpCisJCQkJfQorCQkJCWVsc2UgeworCQkJCQluZXh0ID0gZ2V0KGNvbXBvbmVudCwgIjpuZXh0Iik7CisJCQkJfQorCQkJfQorCQkJaWYgKG5leHQgPT0gY3VycmVudCkgeyByZXR1cm4gZmFsc2U7IH0gLy8gb25lIGZ1Y3VzYWJsZSwgbm8gbG9vcAorCQkJaWYgKGNoZWNrRm9jdXNhYmxlKG5leHQsIGZhbHNlKSkgeworCQkJCXNldEZvY3VzKG5leHQpOworCQkJCXJldHVybiBjb25zdW1lZDsKKwkJCX0KKwkJfQorCX0KKworCS8vamF2YT4KKwkvKioKKwkgKiBAcmV0dXJuIHByZXZpb3VzIGZvY3VzYWJsZSBjb21wb25lbnQgaXMgZm91bmQgKG5vdCB0aGUgbGFzdCBvZiB0aGUgZGVza3RvcC9kaWFsb2cpCisJICovCisJcHJpdmF0ZSBib29sZWFuIHNldFByZXZpb3VzRm9jdXNhYmxlKE9iamVjdCBjb21wb25lbnQsIGJvb2xlYW4gb3V0Z28pIHsKKwkJZm9yIChpbnQgaSA9IDA7IGkgPCAyOyBpKyspIHsgLy8gMCBpcyBiYWNrd2FyZCBkaXJlY3Rpb24KKwkJCU9iamVjdCBwcmV2aW91cyA9IGdldFByZXZpb3VzRm9jdXNhYmxlKGNvbXBvbmVudCwgbnVsbCwgdHJ1ZSwgZmFsc2UsIChpID09IDApLCBvdXRnbyk7CisJCQlpZiAocHJldmlvdXMgIT0gbnVsbCkgeworCQkJCXNldEZvY3VzKHByZXZpb3VzKTsKKwkJCQlyZXR1cm4gKGkgPT0gMCk7CisJCQl9CisJCX0KKwkJcmV0dXJuIGZhbHNlOworCX0KKwkKKwkvKioKKwkgKiBGb3IgdGhlIHN0YXJ0aW5nIGNvbXBvbmVudCBzZWFyY2ggaXRzIHBhcmVudCBkaXJlY3Rpb24gZm9yIGEgZm9jdXNhYmxlIGNvbXBvbmVudCwgYW5kIHRoZW4KKwkgKiBpdHMgbmV4dCBjb21wb25lbnQgKGlmIG5vdCBzZWFyY2ggYmFja3dhcmQgZnJvbSB0aGUgY29tcG9uZW50KS48YnI+CisJICogRm9yIGl0cyBwYXJlbnQgY29tcG9uZW50cyBjaGVjayBpdHMgZmlyc3QgY29tcG9uZW50LCB0aGUgY3VycmVudCBvbmUsIGFuZCBpdHMgcGFyZW50IGRpcmVjdGlvbgorCSAqIChiYWNrd2FyZCBzZWFyY2gpLCBvciBpdHMgcGFyZW50LCB0aGVuIG5leHQgY29tcG9uZW50IChmb3J3YXJkIGRpcmVjdGlvbikuPGJyPgorCSAqIEZvciB0aGUgcmVzdCBjb21wb25lbnRzIGNoZWNrIHRoZSBuZXh0LCB0aGVuIHRoZSBmaXJzdCBzdWJjb21wb25lbnQgZGlyZWN0aW9uLCBhbmQgZmluYWxseQorCSAqIGNoZWNrIHdoZXRoZXIgdGhlIGNvbXBvbmVudCBpcyBmb2N1c2FibGUuCisJICovCisJcHJpdmF0ZSBPYmplY3QgZ2V0UHJldmlvdXNGb2N1c2FibGUoT2JqZWN0IGNvbXBvbmVudCwKKwkJCU9iamVjdCBibG9jaywgYm9vbGVhbiBzdGFydCwgYm9vbGVhbiB1cHdhcmQsIGJvb2xlYW4gYmFja3dhcmQsIGJvb2xlYW4gb3V0Z28pIHsKKwkJT2JqZWN0IHByZXZpb3VzID0gbnVsbDsKKwkJaWYgKChjb21wb25lbnQgIT0gbnVsbCkgJiYgKGNvbXBvbmVudCAhPSBibG9jaykpIHsKKwkJCWJvb2xlYW4gZ28gPSAoKGdldENsYXNzKGNvbXBvbmVudCkgIT0gImRpYWxvZyIpIHx8CisJCQkJKG91dGdvICYmICFnZXRCb29sZWFuKGNvbXBvbmVudCwgIm1vZGFsIiwgZmFsc2UpKSk7CisJCQlpZiAoIXN0YXJ0ICYmICF1cHdhcmQgJiYgZ28pIHsKKwkJCQlwcmV2aW91cyA9IGdldFByZXZpb3VzRm9jdXNhYmxlKGdldChjb21wb25lbnQsICI6bmV4dCIpLCBibG9jaywgZmFsc2UsIGZhbHNlLCBiYWNrd2FyZCwgb3V0Z28pOworCQkJfQorCQkJaWYgKChwcmV2aW91cyA9PSBudWxsKSAmJiAoKHVwd2FyZCAmJiBiYWNrd2FyZCkgfHwgKCFzdGFydCAmJiAhdXB3YXJkKSkpIHsKKwkJCQlwcmV2aW91cyA9IGdldFByZXZpb3VzRm9jdXNhYmxlKGdldChjb21wb25lbnQsICJjb21wb25lbnQiKSwgYmxvY2ssIGZhbHNlLCBmYWxzZSwgYmFja3dhcmQsIG91dGdvKTsKKwkJCQlpZiAoKHByZXZpb3VzID09IG51bGwpICYmIGNoZWNrRm9jdXNhYmxlKGNvbXBvbmVudCwgZmFsc2UpKSB7CisJCQkJCXByZXZpb3VzID0gY29tcG9uZW50OworCQkJCX0KKwkJCX0KKwkJCWlmICgocHJldmlvdXMgPT0gbnVsbCkgJiYgKHN0YXJ0IHx8IHVwd2FyZCkgJiYgZ28pIHsKKwkJCQlwcmV2aW91cyA9IGdldFByZXZpb3VzRm9jdXNhYmxlKGdldFBhcmVudChjb21wb25lbnQpLCBjb21wb25lbnQsIGZhbHNlLCB0cnVlLCBiYWNrd2FyZCwgb3V0Z28pOworCQkJfQorCQkJaWYgKChwcmV2aW91cyA9PSBudWxsKSAmJiAoc3RhcnQgfHwgdXB3YXJkKSAmJiAhYmFja3dhcmQgJiYgZ28pIHsKKwkJCQlwcmV2aW91cyA9IGdldFByZXZpb3VzRm9jdXNhYmxlKGdldChjb21wb25lbnQsICI6bmV4dCIpLCBibG9jaywgZmFsc2UsIGZhbHNlLCBiYWNrd2FyZCwgb3V0Z28pOworCQkJfQorCQl9CisJCXJldHVybiBwcmV2aW91czsKKwl9CisJLy88amF2YQorCQorCS8qKgorCSAqCisJICovCisJcHJpdmF0ZSBib29sZWFuIGNoZWNrRm9jdXNhYmxlKE9iamVjdCBjb21wb25lbnQsIGJvb2xlYW4gZm9yY2VkKSB7CisJCVN0cmluZyBjbGFzc25hbWUgPSBnZXRDbGFzcyhjb21wb25lbnQpOworCQkvL21pZHAgZm9yY2VkPXRydWU7CisJCWlmICgoY2xhc3NuYW1lID09ICJidXR0b24iKSB8fCAoY2xhc3NuYW1lID09ICJjaGVja2JveCIpIHx8CisJCQkJKGNsYXNzbmFtZSA9PSAiY29tYm9ib3giKSB8fCAoY2xhc3NuYW1lID09ICJ0ZXh0ZmllbGQiKSB8fAorCQkJCShjbGFzc25hbWUgPT0gInBhc3N3b3JkZmllbGQiKSB8fCAoY2xhc3NuYW1lID09ICJ0ZXh0YXJlYSIpIHx8CisJCQkJKGNsYXNzbmFtZSA9PSAic3BpbmJveCIpIHx8IChjbGFzc25hbWUgPT0gInNsaWRlciIpIHx8CisJCQkJKGNsYXNzbmFtZSA9PSAibGlzdCIpIHx8IChjbGFzc25hbWUgPT0gInRhYmxlIikgfHwgKGNsYXNzbmFtZSA9PSAidHJlZSIpIHx8CisJCQkJKGNsYXNzbmFtZSA9PSAidGFiYmVkcGFuZSIpIHx8IChmb3JjZWQgJiYgKGNsYXNzbmFtZSA9PSAic3BsaXRwYW5lIikpKSB7CisJCQlmb3IgKE9iamVjdCBjb21wID0gY29tcG9uZW50OyBjb21wICE9IG51bGw7KSB7CisJCQkJaWYgKCFnZXRCb29sZWFuKGNvbXAsICJlbmFibGVkIiwgdHJ1ZSkgfHwgIWdldEJvb2xlYW4oY29tcCwgInZpc2libGUiLCB0cnVlKSkgeworCQkJCQlyZXR1cm4gZmFsc2U7CisJCQkJfQorCQkJCU9iamVjdCBwYXJlbnQgPSBnZXRQYXJlbnQoY29tcCk7CisJCQkJaWYgKChnZXRDbGFzcyhwYXJlbnQpID09ICJ0YWJiZWRwYW5lIikgJiYgKGdldEl0ZW1JbXBsKHBhcmVudCwKKwkJCQkJImNvbXBvbmVudCIsIGdldEludGVnZXIocGFyZW50LCAic2VsZWN0ZWQiLCAwKSkgIT0gY29tcCkpIHsgcmV0dXJuIGZhbHNlOyB9CisJCQkJY29tcCA9IHBhcmVudDsKKwkJCX0KKwkJCXJldHVybiB0cnVlOworCQl9CisJCXJldHVybiBmYWxzZTsKKwl9CisKKwkvKmlmIChjbGlwYXJlYSA9PSBudWxsKSB7IGFkZChjbGlwYXJlYSA9IG5ldyBUZXh0QXJlYSgpKTsgfQorCWNsaXBhcmVhLnNldFRleHQoY29udGVudCk7CisJY2xpcGFyZWEuc2VsZWN0QWxsKCk7CisJY2xpcGFyZWEuZGlzcGF0Y2hFdmVudChuZXcgS2V5RXZlbnQodGhpcywgS2V5RXZlbnQuS0VZX1RZUEVELCAwTCwgS2V5RXZlbnQuQ1RSTF9NQVNLLCAwLCAoY2hhcikgMykpOworCWNsaXBhcmVhLnNlbGVjdEFsbCgpOworCisJaWYgKGNsaXBhcmVhID09IG51bGwpIHsgYWRkKGNsaXBhcmVhID0gbmV3IFRleHRBcmVhKCkpOyB9CisJY2xpcGFyZWEuZGlzcGF0Y2hFdmVudChuZXcgS2V5RXZlbnQodGhpcywgS2V5RXZlbnQuS0VZX1RZUEVELCAwTCwgS2V5RXZlbnQuQ1RSTF9NQVNLLCAwLCAoY2hhcikgMjIpKTsKKwljbGlwYXJlYS5nZXRUZXh0KCk7IHJldHVybiBjbGlwYXJlYS5nZXRUZXh0KCk7Ki8KKworCS8vIC0tLS0tIC0tLS0tIC0tLS0tIC0tLS0tIC0tLS0tIC0tLS0tIC0tLS0tIC0tLS0tIC0tLS0tIC0tLS0tIC0tLS0tIC0tLS0tCisKKwkvKioKKwkgKgorCSAqLworCXB1YmxpYyBPYmplY3QgY3JlYXRlKFN0cmluZyBjbGFzc25hbWUpIHsKKwkJZm9yIChpbnQgaSA9IDA7IGkgPCBkdGQubGVuZ3RoOyBpICs9IDMpIHsKKwkJCWlmIChkdGRbaV0uZXF1YWxzKGNsYXNzbmFtZSkpIHsKKwkJCQlyZXR1cm4gY3JlYXRlSW1wbCgoU3RyaW5nKSBkdGRbaV0pOworCQkJfQorCQl9CisJCXRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oInVua25vd24gIiArIGNsYXNzbmFtZSk7CisJfQorCQorCS8qKgorCSAqIEByZXR1cm4gY2xhc3NuYW1lCisJICovCisJcHVibGljIFN0cmluZyBnZXRDbGFzcyhPYmplY3QgY29tcG9uZW50KSB7CisJCXJldHVybiAoU3RyaW5nKSBnZXQoY29tcG9uZW50LCAiOmNsYXNzIik7CisJfQorCisJLyoqCisJICoKKwkgKi8KKwlwdWJsaWMgT2JqZWN0IGdldERlc2t0b3AoKSB7CisJCXJldHVybiBjb250ZW50OworCX0KKworCS8qKgorCSAqCisJICovCisJcHJpdmF0ZSBPYmplY3QgY3JlYXRlSW1wbChTdHJpbmcgY2xhc3NuYW1lKSB7CisJCXJldHVybiBuZXcgT2JqZWN0W10geyAiOmNsYXNzIiwgY2xhc3NuYW1lLCBudWxsIH07CisJfQorCQorCS8qKgorCSAqCisJICovCisJcHJpdmF0ZSBib29sZWFuIHNldChPYmplY3QgY29tcG9uZW50LCBPYmplY3Qga2V5LCBPYmplY3QgdmFsdWUpIHsKKwkJT2JqZWN0W10gcHJldmlvdXMgPSAoT2JqZWN0W10pIGNvbXBvbmVudDsKKwkJZm9yIChPYmplY3RbXSBlbnRyeSA9IHByZXZpb3VzOyBlbnRyeSAhPSBudWxsOworCQkJCWVudHJ5ID0gKE9iamVjdFtdKSBlbnRyeVsyXSkgeworCQkJaWYgKGVudHJ5WzBdID09IGtleSkgeworCQkJCWlmICh2YWx1ZSAhPSBudWxsKSB7IC8vIHNldCB0aGUgcm93J3MgdmFsdWUKKwkJCQkJT2JqZWN0IG9sZHZhbHVlID0gZW50cnlbMV07CisJCQkJCWVudHJ5WzFdID0gdmFsdWU7CisJCQkJCXJldHVybiAhdmFsdWUuZXF1YWxzKG9sZHZhbHVlKTsKKwkJCQl9CisJCQkJZWxzZSB7IC8vIHJlbW92ZSB0aGUgcm93CisJCQkJCXByZXZpb3VzWzJdID0gZW50cnlbMl07CisJCQkJCWVudHJ5WzJdID0gbnVsbDsKKwkJCQkJcmV0dXJuIHRydWU7CisJCQkJfQorCQkJfQorCQkJcHJldmlvdXMgPSBlbnRyeTsKKwkJfQorCQlpZiAodmFsdWUgIT0gbnVsbCkgeyAvLyBhcHBlbmQgYSBuZXcgcm93CisJCQlwcmV2aW91c1syXSA9IG5ldyBPYmplY3RbXSB7IGtleSwgdmFsdWUsIG51bGwgfTsKKwkJCXJldHVybiB0cnVlOworCQl9CisJCXJldHVybiBmYWxzZTsKKwl9CisKKwkvKioKKwkgKgorCSAqLworCXByaXZhdGUgT2JqZWN0IGdldChPYmplY3QgY29tcG9uZW50LCBPYmplY3Qga2V5KSB7CisJCWZvciAoT2JqZWN0W10gZW50cnkgPSAoT2JqZWN0W10pIGNvbXBvbmVudDsgZW50cnkgIT0gbnVsbDsKKwkJCQllbnRyeSA9IChPYmplY3RbXSkgZW50cnlbMl0pIHsKKwkJCWlmIChlbnRyeVswXSA9PSBrZXkpIHsKKwkJCQlyZXR1cm4gZW50cnlbMV07CisJCQl9CisJCX0KKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICoKKwkgKi8KKwlwdWJsaWMgaW50IGdldENvdW50KE9iamVjdCBjb21wb25lbnQpIHsKKwkJcmV0dXJuIGdldENvdW50KGNvbXBvbmVudCwgbnVsbCk7CisJfQorCisJLyoqCisJICoKKwkgKi8KKwlwdWJsaWMgaW50IGdldENvdW50KE9iamVjdCBjb21wb25lbnQsIFN0cmluZyBrZXkpIHsKKwkJcmV0dXJuIGdldEl0ZW1Db3VudEltcGwoY29tcG9uZW50LCBnZXRDb21wb25lbnROYW1lKGNvbXBvbmVudCwga2V5KSk7CisJfQorCQorCS8qKgorCSAqCisJICovCisJcHVibGljIE9iamVjdCBnZXRQYXJlbnQoT2JqZWN0IGNvbXBvbmVudCkgeworCQlyZXR1cm4gZ2V0KGNvbXBvbmVudCwgIjpwYXJlbnQiKTsKKwl9CisKKwkvKioKKwkgKiBAcmV0dXJuIHRoZSBmaXJzdCBzZWxlY3RlZCBpbmRleCBvciAtMQorCSAqLworCXB1YmxpYyBpbnQgZ2V0U2VsZWN0ZWRJbmRleChPYmplY3QgY29tcG9uZW50KSB7CisJCWludCBpID0gMDsKKwkJZm9yIChPYmplY3QgaXRlbSA9IGdldChjb21wb25lbnQsIGdldENvbXBvbmVudE5hbWUoY29tcG9uZW50LCBudWxsKSk7CisJCQkJaXRlbSAhPSBudWxsOyBpdGVtID0gZ2V0KGl0ZW0sICI6bmV4dCIpKSB7CisJCQlpZiAoZ2V0Qm9vbGVhbihpdGVtLCAic2VsZWN0ZWQiLCBmYWxzZSkpIHsgcmV0dXJuIGk7IH0KKwkJCWkrKzsKKwkJfQorCQlyZXR1cm4gLTE7CisJfQorCisJLyoqCisJICoKKwkgKi8KKwlwdWJsaWMgdm9pZCByZW1vdmVBbGwoT2JqZWN0IGNvbXBvbmVudCkgeworCQlyZW1vdmVBbGwoY29tcG9uZW50LCBudWxsKTsKKwl9CisKKwkvKioKKwkgKgorCSAqLworCXB1YmxpYyB2b2lkIHJlbW92ZUFsbChPYmplY3QgY29tcG9uZW50LCBTdHJpbmcga2V5KSB7CisJCVN0cmluZyBsaXN0ID0gZ2V0Q29tcG9uZW50TmFtZShjb21wb25lbnQsIGtleSk7CisJCWlmIChnZXQoY29tcG9uZW50LCBsaXN0KSAhPSBudWxsKSB7CisJCQlzZXQoY29tcG9uZW50LCBsaXN0LCBudWxsKTsKKwkJCXVwZGF0ZShjb21wb25lbnQsICJ2YWxpZGF0ZSIpOworCQl9CisJfQorCisJLyoqCisJICoKKwkgKi8KKwlwcml2YXRlIGludCBnZXRJdGVtQ291bnRJbXBsKE9iamVjdCBjb21wb25lbnQsIE9iamVjdCBrZXkpIHsKKwkJaW50IGkgPSAwOworCQlmb3IgKGNvbXBvbmVudCA9IGdldChjb21wb25lbnQsIGtleSk7IGNvbXBvbmVudCAhPSBudWxsOworCQkJCWNvbXBvbmVudCA9IGdldChjb21wb25lbnQsICI6bmV4dCIpKSB7CisJCQlpKys7CisJCX0KKwkJcmV0dXJuIGk7CisJfQorCisJLyoqCisJICoKKwkgKi8KKwlwdWJsaWMgT2JqZWN0IGdldEl0ZW0oT2JqZWN0IGNvbXBvbmVudCwgaW50IGluZGV4KSB7CisJCXJldHVybiBnZXRJdGVtKGNvbXBvbmVudCwgbnVsbCwgaW5kZXgpOworCX0KKwkKKwkvKioKKwkgKgorCSAqLworCXB1YmxpYyBPYmplY3RbXSBnZXRJdGVtcyhPYmplY3QgY29tcG9uZW50KSB7CisJCXJldHVybiBnZXRJdGVtcyhjb21wb25lbnQsIG51bGwpOworCX0KKworCS8qKgorCSAqCisJICovCisJcHVibGljIE9iamVjdCBnZXRJdGVtKE9iamVjdCBjb21wb25lbnQsIFN0cmluZyBrZXksIGludCBpbmRleCkgeworCQlyZXR1cm4gZ2V0SXRlbUltcGwoY29tcG9uZW50LCBnZXRDb21wb25lbnROYW1lKGNvbXBvbmVudCwga2V5KSwgaW5kZXgpOworCX0KKworCS8qKgorCSAqCisJICovCisJcHVibGljIE9iamVjdFtdIGdldEl0ZW1zKE9iamVjdCBjb21wb25lbnQsIFN0cmluZyBrZXkpIHsKKwkJa2V5ID0gZ2V0Q29tcG9uZW50TmFtZShjb21wb25lbnQsIGtleSk7CisJCU9iamVjdFtdIGl0ZW1zID0gbmV3IE9iamVjdFtnZXRJdGVtQ291bnRJbXBsKGNvbXBvbmVudCwga2V5KV07CisJCWNvbXBvbmVudCA9IGdldChjb21wb25lbnQsIGtleSk7CisJCWZvciAoaW50IGkgPSAwOyBpIDwgaXRlbXMubGVuZ3RoOyBpKyspIHsKKwkJCWl0ZW1zW2ldID0gY29tcG9uZW50OworCQkJY29tcG9uZW50ID0gZ2V0KGNvbXBvbmVudCwgIjpuZXh0Iik7CisJCX0KKwkJcmV0dXJuIGl0ZW1zOworCX0KKworCS8qKgorCSAqCisJICovCisJcHJpdmF0ZSBPYmplY3QgZ2V0SXRlbUltcGwoT2JqZWN0IGNvbXBvbmVudCwgT2JqZWN0IGtleSwgaW50IGluZGV4KSB7CisJCWludCBpID0gMDsKKwkJZm9yIChPYmplY3QgaXRlbSA9IGdldChjb21wb25lbnQsIGtleSk7CisJCQkJaXRlbSAhPSBudWxsOyBpdGVtID0gZ2V0KGl0ZW0sICI6bmV4dCIpKSB7CisJCQlpZiAoaSA9PSBpbmRleCkgeyByZXR1cm4gaXRlbTsgfQorCQkJaSsrOworCQl9CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqCisJICovCisJcHJpdmF0ZSBpbnQgZ2V0SW5kZXgoT2JqZWN0IGNvbXBvbmVudCwgT2JqZWN0IGtleSwgT2JqZWN0IHZhbHVlKSB7CisJCWludCBpbmRleCA9IDA7CisJCWZvciAoT2JqZWN0IGl0ZW0gPSBnZXQoY29tcG9uZW50LCBrZXkpOworCQkJCWl0ZW0gIT0gbnVsbDsgaXRlbSA9IGdldChpdGVtLCAiOm5leHQiKSkgeworCQkJaWYgKHZhbHVlID09IGl0ZW0pIHsgcmV0dXJuIGluZGV4OyB9CisJCQlpbmRleCsrOworCQl9CisJCXJldHVybiAtMTsKKwl9CisKKwkvKioKKwkgKgorCSAqLworCXB1YmxpYyB2b2lkIGFkZChPYmplY3QgY29tcG9uZW50KSB7CisJCWFkZChjb250ZW50LCBjb21wb25lbnQsIDApOworCX0KKworCS8qKgorCSAqCisJICovCisJcHVibGljIHZvaWQgYWRkKE9iamVjdCBwYXJlbnQsIE9iamVjdCBjb21wb25lbnQpIHsKKwkJYWRkKHBhcmVudCwgY29tcG9uZW50LCAtMSk7CisJfQorCisJLyoqCisJICoKKwkgKi8KKwlwdWJsaWMgdm9pZCBhZGQoT2JqZWN0IHBhcmVudCwgT2JqZWN0IGNvbXBvbmVudCwgaW50IGluZGV4KSB7CisJCWFkZEltcGwocGFyZW50LCBjb21wb25lbnQsIGluZGV4KTsKKwkJdXBkYXRlKGNvbXBvbmVudCwgInZhbGlkYXRlIik7CisJCWlmIChwYXJlbnQgPT0gY29udGVudCkgeworCQkJc2V0TmV4dEZvY3VzYWJsZShjb21wb25lbnQsIGZhbHNlKTsKKwkJfQorCX0KKworCS8qKgorCSAqCisJICovCisJcHJpdmF0ZSB2b2lkIGFkZEl0ZW0oT2JqZWN0IHBhcmVudCwgT2JqZWN0IGtleSwgT2JqZWN0IGNvbXBvbmVudCkgeworCQlpbnNlcnRJdGVtKHBhcmVudCwga2V5LCBjb21wb25lbnQsIC0xKTsKKwl9CisKKwkvKioKKwkgKgorCSAqLworCXByaXZhdGUgdm9pZCBpbnNlcnRJdGVtKE9iamVjdCBwYXJlbnQsCisJCQlPYmplY3Qga2V5LCBPYmplY3QgY29tcG9uZW50LCBpbnQgaW5kZXgpIHsKKwkJT2JqZWN0IHRhcmdldCA9IGdldChwYXJlbnQsIGtleSk7CisJCWlmIChpbmRleCA9PSAtMSkgeworCQkJd2hpbGUgKHRhcmdldCAhPSBudWxsKSB7CisJCQkJdGFyZ2V0ID0gZ2V0KHBhcmVudCA9IHRhcmdldCwga2V5ID0gIjpuZXh0Iik7CisJCQl9CisJCX0KKwkJZWxzZSB7CisJCQlmb3IgKGludCBpID0gMDsgaSA8IGluZGV4OyBpKyspIHsKKwkJCQl0YXJnZXQgPSBnZXQocGFyZW50ID0gdGFyZ2V0LCBrZXkgPSAiOm5leHQiKTsKKwkJCX0KKwkJCXNldChjb21wb25lbnQsICI6bmV4dCIsIGdldChwYXJlbnQsIGtleSkpOworCQl9CisJCXNldChwYXJlbnQsIGtleSwgY29tcG9uZW50KTsKKwl9CisKKwkvKioKKwkgKgorCSAqLworCXB1YmxpYyB2b2lkIHJlbW92ZShPYmplY3QgY29tcG9uZW50KSB7CisJCU9iamVjdCBwYXJlbnQgPSBnZXRQYXJlbnQoY29tcG9uZW50KTsKKwkJU3RyaW5nIHBhcmVudGNsYXNzID0gZ2V0Q2xhc3MocGFyZW50KTsKKwkJU3RyaW5nIGNsYXNzbmFtZSA9IGdldENsYXNzKGNvbXBvbmVudCk7CisJCVN0cmluZyBsaXN0a2V5ID0gKCJjb21ib2JveCIgPT0gcGFyZW50Y2xhc3MpID8gImNob2ljZSIgOgorCQkJKCgidGFiYmVkcGFuZSIgPT0gcGFyZW50Y2xhc3MpICYmICgidGFiIiA9PSBjbGFzc25hbWUpKSA/ICJ0YWIiIDoKKwkJCSgibGlzdCIgPT0gcGFyZW50Y2xhc3MpID8gIml0ZW0iIDoKKwkJCSgoInRhYmxlIiA9PSBwYXJlbnRjbGFzcykgJiYgKCJjb2x1bW4iID09IGNsYXNzbmFtZSkpID8gImNvbHVtbiIgOgorCQkJKCgidGFibGUiID09IHBhcmVudGNsYXNzKSAmJiAoInJvdyIgPT0gY2xhc3NuYW1lKSkgPyAicm93IiA6CisJCQkoInJvdyIgPT0gcGFyZW50Y2xhc3MpID8gImNlbGwiIDoKKwkJCSgoInRyZWUiID09IHBhcmVudGNsYXNzKSB8fCAoIm5vZGUiID09IHBhcmVudGNsYXNzKSkgPyAibm9kZSIgOgorCQkJKCgibWVudWJhciIgPT0gcGFyZW50Y2xhc3MpIHx8ICgibWVudSIgPT0gcGFyZW50Y2xhc3MpKSA/ICJtZW51IiA6CisJCQkoKCJwYW5lbCIgPT0gcGFyZW50Y2xhc3MpIHx8ICgiZGVza3RvcCIgPT0gcGFyZW50Y2xhc3MpIHx8CisJCQkJKCJzcGxpdHBhbmUiID09IHBhcmVudGNsYXNzKSB8fCAoImRpYWxvZyIgPT0gcGFyZW50Y2xhc3MpIHx8CisJCQkJKCJ0YWJiZWRwYW5lIiA9PSBwYXJlbnRjbGFzcykpID8gImNvbXBvbmVudCIgOiBudWxsOworCQlpZiAobGlzdGtleSA9PSBudWxsKSB7IHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oInVua25vd24gIiArIGNsYXNzbmFtZSk7IH0KKwkJdXBkYXRlKGNvbXBvbmVudCwgInZhbGlkYXRlIik7CisJCXJlbW92ZUl0ZW1JbXBsKHBhcmVudCwgbGlzdGtleSwgY29tcG9uZW50KTsKKwkJLy8gcmV1ZXN0IGZvY3VzIGZvciBpdHMgcGFyZW50IGlmIHRoZSBjb21wb25lbnQgKG9yIHN1YmNvbXBvbmVudCkgaXMgY3VycmVudGx5IGZvY3VzZWQKKwkJZm9yIChPYmplY3QgY29tcCA9IGZvY3Vzb3duZXI7IGNvbXAgIT0gbnVsbDsgY29tcCA9IGdldFBhcmVudChjb21wKSkgeworCQkJaWYgKGNvbXAgPT0gY29tcG9uZW50KSB7CisJCQkJc2V0TmV4dEZvY3VzYWJsZShwYXJlbnQsIGZhbHNlKTsgYnJlYWs7CisJCQl9CisJCX0KKwl9CisKKwkvKioKKwkgKgorCSAqLworCXByaXZhdGUgdm9pZCByZW1vdmVJdGVtSW1wbChPYmplY3QgcGFyZW50LCBPYmplY3Qga2V5LCBPYmplY3QgY29tcG9uZW50KSB7CisJCU9iamVjdCB0YXJnZXQgPSBnZXQocGFyZW50LCBrZXkpOworCQl3aGlsZSAodGFyZ2V0ICE9IGNvbXBvbmVudCkgeworCQkJdGFyZ2V0ID0gZ2V0KHBhcmVudCA9IHRhcmdldCwga2V5ID0gIjpuZXh0Iik7IC8vICh0YXJnZXQgIT0gbnVsbCkKKwkJfQorCQlzZXQocGFyZW50LCBrZXksIGdldCh0YXJnZXQsICI6bmV4dCIpKTsKKwkJc2V0KHRhcmdldCwgIjpuZXh0IiwgbnVsbCk7CisJCXNldCh0YXJnZXQsICI6cGFyZW50IiwgbnVsbCk7CisJfQorCisJLyoKKwlwcml2YXRlIHZvaWQgcmVtb3ZlSXRlbUltcGwoT2JqZWN0IHBhcmVudCwgU3RyaW5nIGtleSwgaW50IGluZGV4KSB7CisJCU9iamVjdCB0YXJnZXQgPSBnZXQocGFyZW50LCBrZXkpOworCQlmb3IgKGludCBpID0gMDsgaSA8IGluZGV4OyBpKyspIHsKKwkJCXRhcmdldCA9IGdldChwYXJlbnQgPSB0YXJnZXQsIGtleSA9ICI6bmV4dCIpOworCQl9CisJCXNldChwYXJlbnQsIGtleSwgZ2V0KHRhcmdldCwgIjpuZXh0IikpOworCQlzZXQodGFyZ2V0LCAiOm5leHQiLCBudWxsKTsKKwl9Ki8KKworCS8qKgorCSAqCisJICovCisJcHJpdmF0ZSBTdHJpbmcgZ2V0Q29tcG9uZW50TmFtZShPYmplY3QgcGFyZW50LCBPYmplY3QgY2xhc3NuYW1lKSB7CisJCVN0cmluZyBwYXJlbnRjbGFzcyA9IGdldENsYXNzKHBhcmVudCk7CisJCVN0cmluZyBjb21wbmFtZSA9ICgiY29tYm9ib3giID09IHBhcmVudGNsYXNzKSA/ICJjaG9pY2UiIDoKKwkJCSgibGlzdCIgPT0gcGFyZW50Y2xhc3MpID8gIml0ZW0iIDoKKwkJCSgicm93IiA9PSBwYXJlbnRjbGFzcykgPyAiY2VsbCIgOgorCQkJKCgidHJlZSIgPT0gcGFyZW50Y2xhc3MpIHx8ICgibm9kZSIgPT0gcGFyZW50Y2xhc3MpKSA/ICJub2RlIiA6CisJCQkoKCJtZW51YmFyIiA9PSBwYXJlbnRjbGFzcykgfHwgKCJtZW51IiA9PSBwYXJlbnRjbGFzcykpID8gIm1lbnUiIDoKKwkJCSgoInBhbmVsIiA9PSBwYXJlbnRjbGFzcykgfHwgKCJkZXNrdG9wIiA9PSBwYXJlbnRjbGFzcykgfHwKKwkJCQkoInNwbGl0cGFuZSIgPT0gcGFyZW50Y2xhc3MpIHx8ICgiZGlhbG9nIiA9PSBwYXJlbnRjbGFzcykpID8KKwkJCQkiY29tcG9uZW50IiA6IG51bGw7CisJCWlmICgoY29tcG5hbWUgIT0gbnVsbCkgJiYgKChjbGFzc25hbWUgPT0gbnVsbCkgfHwKKwkJCQljb21wbmFtZS5lcXVhbHMoY2xhc3NuYW1lKSkpIHsgcmV0dXJuIGNvbXBuYW1lOyB9CisJCWlmICgidGFiYmVkcGFuZSIgPT0gcGFyZW50Y2xhc3MpIHsKKwkJCWlmICgidGFiIi5lcXVhbHMoY2xhc3NuYW1lKSkgeyByZXR1cm4gInRhYiI7IH0KKwkJCWlmICgoY2xhc3NuYW1lID09IG51bGwpIHx8ICJjb21wb25lbnQiLmVxdWFscyhjbGFzc25hbWUpKSB7IHJldHVybiAiY29tcG9uZW50IjsgfQorCQl9CisJCWVsc2UgaWYgKCJ0YWJsZSIgPT0gcGFyZW50Y2xhc3MpIHsKKwkJCWlmICgiY29sdW1uIi5lcXVhbHMoY2xhc3NuYW1lKSkgeyByZXR1cm4gImNvbHVtbiI7IH0KKwkJCWlmICgoY2xhc3NuYW1lID09IG51bGwpIHx8ICJyb3ciLmVxdWFscyhjbGFzc25hbWUpKSB7IHJldHVybiAicm93IjsgfQorCQl9CisJCXRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oInVua25vd24gIiArIGNsYXNzbmFtZSk7CisJfQorCisJLyoqCisJICoKKwkgKi8KKwlwdWJsaWMgT2JqZWN0IGZpbmQoU3RyaW5nIG5hbWUpIHsKKwkJcmV0dXJuIGZpbmQoY29udGVudCwgbmFtZSk7CisJfQorCisJLyoqCisJICoKKwkgKi8KKwlwdWJsaWMgT2JqZWN0IGZpbmQoT2JqZWN0IGNvbXBvbmVudCwgU3RyaW5nIG5hbWUpIHsKKwkJaWYgKG5hbWUuZXF1YWxzKGdldChjb21wb25lbnQsICJuYW1lIikpKSB7IHJldHVybiBjb21wb25lbnQ7IH0KKwkJU3RyaW5nIGNsYXNzbmFtZSA9IGdldENsYXNzKGNvbXBvbmVudCk7CisJCVN0cmluZyBjaGlsZG5hbWUgPSBudWxsOyBTdHJpbmcgY2hpbGRuYW1lMiA9IG51bGw7CisJCWlmICgoInBhbmVsIiA9PSBjbGFzc25hbWUpIHx8ICgiZGVza3RvcCIgPT0gY2xhc3NuYW1lKSB8fAorCQkJCSgic3BsaXRwYW5lIiA9PSBjbGFzc25hbWUpIHx8ICgiZGlhbG9nIiA9PSBjbGFzc25hbWUpKSB7IGNoaWxkbmFtZSA9ICJjb21wb25lbnQiOyB9CisJCWVsc2UgaWYgKCJjb21ib2JveCIgPT0gY2xhc3NuYW1lKSB7IGNoaWxkbmFtZSA9ICJjaG9pY2UiOyB9CisJCWVsc2UgaWYgKCJ0YWJiZWRwYW5lIiA9PSBjbGFzc25hbWUpIHsgY2hpbGRuYW1lID0gInRhYiI7IGNoaWxkbmFtZTIgPSAiY29tcG9uZW50IjsgfQorCQllbHNlIGlmICgibGlzdCIgPT0gY2xhc3NuYW1lKSB7IGNoaWxkbmFtZSA9ICJpdGVtIjsgfQorCQllbHNlIGlmICgidGFibGUiID09IGNsYXNzbmFtZSkgeyBjaGlsZG5hbWUgPSAiY29sdW1uIjsgY2hpbGRuYW1lMiA9ICJyb3ciOyB9CisJCWVsc2UgaWYgKCJyb3ciID09IGNsYXNzbmFtZSkgeyBjaGlsZG5hbWUgPSAiY2VsbCI7IH0KKwkJZWxzZSBpZiAoKCJ0cmVlIiA9PSBjbGFzc25hbWUpIHx8ICgibm9kZSIgPT0gY2xhc3NuYW1lKSkgeyBjaGlsZG5hbWUgPSAibm9kZSI7IH0KKwkJZWxzZSBpZiAoKCJtZW51YmFyIiA9PSBjbGFzc25hbWUpIHx8ICgibWVudSIgPT0gY2xhc3NuYW1lKSkgeyBjaGlsZG5hbWUgPSAibWVudSI7IH0KKwkJd2hpbGUgKGNoaWxkbmFtZSAhPSBudWxsKSB7CisJCQlmb3IgKE9iamVjdCBjb21wID0gZ2V0KGNvbXBvbmVudCwgY2hpbGRuYW1lKTsKKwkJCQkJY29tcCAhPSBudWxsOyBjb21wID0gZ2V0KGNvbXAsICI6bmV4dCIpKSB7CisJCQkJT2JqZWN0IGZvdW5kID0gZmluZChjb21wLCBuYW1lKTsKKwkJCQlpZiAoZm91bmQgIT0gbnVsbCkgeyByZXR1cm4gZm91bmQ7IH0KKwkJCX0KKwkJCWNoaWxkbmFtZSA9IGNoaWxkbmFtZTI7IGNoaWxkbmFtZTIgPSBudWxsOworCQl9CisJCXJldHVybiBudWxsOworCX0KKworCS8vIC0tLS0tIC0tLS0tIC0tLS0tIC0tLS0tIC0tLS0tIC0tLS0tIC0tLS0tIC0tLS0tIC0tLS0tIC0tLS0tIC0tLS0tIC0tLS0tCisKKwkvKnB1YmxpYyBTdHJpbmcgdG9YTUwoT2JqZWN0IGNvbXBvbmVudCkgeworCQlTdHJpbmdCdWZmZXIgeG1sID0gbmV3IFN0cmluZ0J1ZmZlcigpOworCQlPYmplY3RbXSBlbnRyeSA9IChPYmplY3RbXSkgY29tcG9uZW50OworCQlTdHJpbmcgY2xhc3NuYW1lID0gKFN0cmluZykgZW50cnlbMV07CisJCXdoaWxlICgoZW50cnkgPSAoT2JqZWN0W10pIGVudHJ5WzJdKSAhPSBudWxsKSB7CisJCQl0cnkgeworCQkJCU9iamVjdFtdIGRlZmluaXRpb24gPSBnZXREZWZpbml0aW9uKGNvbXBvbmVudCwgKFN0cmluZykgZW50cnlbMF0sIG51bGwpOworCQkJCWlmIChkZWZpbml0aW9uICE9IG51bGwpIHsKKwkJCQkJeG1sLmFwcGVuZCgiICIgKyBlbnRyeVswXSArICI9XCIiICsgZW50cnlbMV0gKyAiXCIiKTsKKwkJCQl9CisJCQl9IGNhdGNoIChJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gZXhjKSB7fQorCQl9CisJCXJldHVybiB4bWwudG9TdHJpbmcoKTsKKwl9Ki8JCisKKwkvKioKKwkgKgorCSAqLworCXB1YmxpYyBPYmplY3QgcGFyc2UoU3RyaW5nIHBhdGgpIHRocm93cyBFeGNlcHRpb24geworCQlJbnB1dFN0cmVhbSBpbnB1dHN0cmVhbSA9IG51bGw7CisJCXRyeSB7IC8vamF2YQorCQkJLy9taWRwIGlucHV0c3RyZWFtID0gZ2V0Q2xhc3MoKS5nZXRSZXNvdXJjZUFzU3RyZWFtKHBhdGgpOworCQkJaW5wdXRzdHJlYW0gPSBnZXRDbGFzcygpLmdldFJlc291cmNlQXNTdHJlYW0ocGF0aCk7IC8vamF2YQorCQkJLy9TeXN0ZW0ub3V0LnByaW50bG4oIj4gIiArIHBhdGggKyAiICIgKyBpbnB1dHN0cmVhbSk7CisJCX0gY2F0Y2ggKFRocm93YWJsZSBlKSB7fSAvL2phdmEKKwkJLy9pZiAoaW5wdXRzdHJlYW0gPT0gbnVsbCkgeyAvLyBhcHBsZXQgY29kZQorCQkvLwlpbnB1dHN0cmVhbSA9IG5ldyBVUkwoZ2V0Q29kZUJhc2UoKSwgcGF0aCkub3BlblN0cmVhbSgpOworCQkvL30KKwkJcmV0dXJuIHBhcnNlKGlucHV0c3RyZWFtKTsgLy8sIE9iamVjdCBoYW5kbGVyCisJfQorCisJLyoqCisJICoKKwkgKi8KKwlwdWJsaWMgT2JqZWN0IHBhcnNlKElucHV0U3RyZWFtIGlucHV0c3RyZWFtKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJcmV0dXJuIHBhcnNlKGlucHV0c3RyZWFtLCB0cnVlKTsKKwl9CisKKwkvKioKKwkgKgorCSAqLworCXByb3RlY3RlZCB2b2lkIHBhcnNlWE1MKElucHV0U3RyZWFtIGlucHV0c3RyZWFtKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJcGFyc2UoaW5wdXRzdHJlYW0sIGZhbHNlKTsKKwl9CisKKwkvKioKKwkgKgorCSAqLworCXByb3RlY3RlZCB2b2lkIHN0YXJ0RWxlbWVudChTdHJpbmcgbmFtZSwgSGFzaHRhYmxlIGF0dHJpYnV0ZWxpc3QpIHt9CisKKwkvKioKKwkgKgorCSAqLworCXByb3RlY3RlZCB2b2lkIGNoYXJhY3RlcnMoU3RyaW5nIHRleHQpIHt9CisKKwkvKioKKwkgKgorCSAqLworCXByb3RlY3RlZCB2b2lkIGVuZEVsZW1lbnQoKSB7fQorCisJLyoqCisJICoKKwkgKi8KKwlwcml2YXRlIE9iamVjdCBwYXJzZShJbnB1dFN0cmVhbSBpbnB1dHN0cmVhbSwgYm9vbGVhbiB2YWxpZGF0ZSkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCUJ1ZmZlcmVkUmVhZGVyIHJlYWRlciA9IG5ldyBCdWZmZXJlZFJlYWRlcihuZXcgSW5wdXRTdHJlYW1SZWFkZXIoaW5wdXRzdHJlYW0pKTsgLy9qYXZhCisJCS8vbWlkcCBJbnB1dFN0cmVhbVJlYWRlciByZWFkZXIgPSBuZXcgSW5wdXRTdHJlYW1SZWFkZXIoaW5wdXRzdHJlYW0pOworCQlPYmplY3RbXSBwYXJlbnRsaXN0ID0gbnVsbDsKKwkJT2JqZWN0IGN1cnJlbnQgPSBudWxsOworCQlIYXNodGFibGUgYXR0cmlidXRlbGlzdCA9IG51bGw7CisJCVN0cmluZ0J1ZmZlciB0ZXh0ID0gbmV3IFN0cmluZ0J1ZmZlcigpOworCQlmb3IgKGludCBjID0gcmVhZGVyLnJlYWQoKTsgYyAhPSAtMTspIHsKKwkJCWlmIChjID09ICc8JykgeworCQkJCWlmICgoYyA9IHJlYWRlci5yZWFkKCkpID09ICcvJykgeyAvL2VuZHRhZworCQkJCQlpZiAodGV4dC5sZW5ndGgoKSA+IDApIHsKKwkJCQkJCWlmICh0ZXh0LmNoYXJBdCh0ZXh0Lmxlbmd0aCgpIC0gMSkgPT0gJyAnKSB7CisJCQkJCQkJdGV4dC5zZXRMZW5ndGgodGV4dC5sZW5ndGgoKSAtIDEpOworCQkJCQkJfQorCQkJCQkJaWYgKCF2YWxpZGF0ZSkgeworCQkJCQkJCWNoYXJhY3RlcnModGV4dC50b1N0cmluZygpKTsKKwkJCQkJCX0vLyBlbHNlIHsKKwkJCQkJCQkvL2FkZENvbnRlbnQoY3VycmVudCwgdGV4dC50b1N0cmluZygpKTsKKwkJCQkJCS8vfQorCQkJCQkJdGV4dC5zZXRMZW5ndGgoMCk7CisJCQkJCX0KKwkJCQkJU3RyaW5nIHRhZ25hbWUgPSAoU3RyaW5nKSBwYXJlbnRsaXN0WzJdOyAvL2dldENsYXNzKGN1cnJlbnQpOworCQkJCQlmb3IgKGludCBpID0gMDsgaSA8IHRhZ25hbWUubGVuZ3RoKCk7IGkrKykgeyAvLyBjdXJyZW50LXRhZworCQkJCQkJaWYgKChjID0gcmVhZGVyLnJlYWQoKSkgIT0gdGFnbmFtZS5jaGFyQXQoaSkpIHsKKwkJCQkJCQl0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKHRhZ25hbWUpOworCQkJCQkJfQorCQkJCQl9CisJCQkJCXdoaWxlICgiIFx0XG5cciIuaW5kZXhPZihjID0gcmVhZGVyLnJlYWQoKSkgIT0gLTEpOyAvLyB3aGl0ZXNwYWNlCisJCQkJCWlmIChjICE9ICc+JykgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigpOyAvLyAnPicKKwkJCQkJYyA9IHJlYWRlci5yZWFkKCk7CisJCQkJCWlmICghdmFsaWRhdGUpIHsgZW5kRWxlbWVudCgpOyB9CisJCQkJCWlmIChwYXJlbnRsaXN0WzBdID09IG51bGwpIHsKKwkJCQkJCXJlYWRlci5jbG9zZSgpOworCQkJCQkJcmV0dXJuIGN1cnJlbnQ7CisJCQkJCX0KKwkJCQkJY3VycmVudCA9IHBhcmVudGxpc3RbMF07CisJCQkJCXBhcmVudGxpc3QgPSAoT2JqZWN0W10pIHBhcmVudGxpc3RbMV07CisJCQkJfQorCQkJCWVsc2UgeyAvL3N0YXJ0IG9yIHN0YW5kYWxvbmUgdGFnCisJCQkJCWJvb2xlYW4gaW5zdHJ1Y3Rpb24gPSAoYyA9PSAnPycpOyAvLyBQcm9jZXNzaW5nIEluc3RydWN0aW9ucworCQkJCQlpZiAoYyA9PSAnIScpIHsgd2hpbGUgKChjID0gcmVhZGVyLnJlYWQoKSkgIT0gJz4nKTsgY29udGludWU7IH0gLy8gRE9DVFlQRQorCQkJCQlpZiAoaW5zdHJ1Y3Rpb24pIHsgYyA9IHJlYWRlci5yZWFkKCk7IH0KKwkJCQkJdGV4dC5zZXRMZW5ndGgoMCk7CisJCQkJCWJvb2xlYW4gaXNjb21tZW50ID0gZmFsc2U7CisJCQkJCXdoaWxlICgiPi8gXHRcblxyIi5pbmRleE9mKGMpID09IC0xKSB7CisJCQkJCQl0ZXh0LmFwcGVuZCgoY2hhcikgYyk7CisJCQkJCQlpZiAoKHRleHQubGVuZ3RoKCkgPT0gMykgJiYgKHRleHQuY2hhckF0KDApID09ICchJykgJiYKKwkJCQkJCQkJKHRleHQuY2hhckF0KDEpID09ICctJykgJiYgKHRleHQuY2hhckF0KDIpID09ICctJykpIHsKKwkJCQkJCQlpbnQgbSA9IDA7CisJCQkJCQkJd2hpbGUgKHRydWUpIHsKKwkJCQkJCQkJYyA9IHJlYWRlci5yZWFkKCk7CisJCQkJCQkJCWlmIChjID09ICctJykgeyBtKys7IH0KKwkJCQkJCQkJZWxzZSBpZiAoKGMgPT0gJz4nKSAmJiAobSA+PSAyKSkgeyBicmVhazsgfQorCQkJCQkJCQllbHNlIHsgbSA9IDA7IH0KKwkJCQkJCQl9CisJCQkJCQkJaXNjb21tZW50ID0gdHJ1ZTsKKwkJCQkJCX0KKwkJCQkJCWMgPSByZWFkZXIucmVhZCgpOworCQkJCQl9CisJCQkJCWlmIChpc2NvbW1lbnQpIHsgY29udGludWU7IH0KKwkJCQkJaWYgKCFpbnN0cnVjdGlvbikgeworCQkJCQkJU3RyaW5nIHRhZ25hbWUgPSB0ZXh0LnRvU3RyaW5nKCk7CisJCQkJCQlwYXJlbnRsaXN0ID0gbmV3IE9iamVjdFtdIHsgY3VycmVudCwgcGFyZW50bGlzdCwgdGFnbmFtZSB9OworCQkJCQkJaWYgKHZhbGlkYXRlKSB7CisJCQkJCQkJY3VycmVudCA9IChjdXJyZW50ICE9IG51bGwpID8KKwkJCQkJCQkJYWRkRWxlbWVudChjdXJyZW50LCB0YWduYW1lKSA6IGNyZWF0ZSh0YWduYW1lKTsKKwkJCQkJCX0gZWxzZSB7CisJCQkJCQkJY3VycmVudCA9IHRhZ25hbWU7CisJCQkJCQl9CisJCQkJCX0KKwkJCQkJdGV4dC5zZXRMZW5ndGgoMCk7CisJCQkJCXdoaWxlICh0cnVlKSB7CisJCQkJCQlib29sZWFuIHdoaXRlc3BhY2UgPSBmYWxzZTsKKwkJCQkJCXdoaWxlICgiIFx0XG5cciIuaW5kZXhPZihjKSAhPSAtMSkgeworCQkJCQkJCWMgPSByZWFkZXIucmVhZCgpOworCQkJCQkJCXdoaXRlc3BhY2UgPSB0cnVlOworCQkJCQkJfQorCQkJCQkJaWYgKGMgPT0gJz4nKSB7CisJCQkJCQkJaWYgKGluc3RydWN0aW9uKSB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCk7IC8vICc/PicKKwkJCQkJCQlpZiAoIXZhbGlkYXRlKSB7CisJCQkJCQkJCXN0YXJ0RWxlbWVudCgoU3RyaW5nKSBjdXJyZW50LCBhdHRyaWJ1dGVsaXN0KTsgYXR0cmlidXRlbGlzdCA9IG51bGw7CisJCQkJCQkJfQorCQkJCQkJCWMgPSByZWFkZXIucmVhZCgpOworCQkJCQkJCWJyZWFrOworCQkJCQkJfQorCQkJCQkJZWxzZSBpZiAoYyA9PSAnLycpIHsKKwkJCQkJCQlpZiAoaW5zdHJ1Y3Rpb24pIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oKTsgLy8gJz8+JworCQkJCQkJCWlmICgoYyA9IHJlYWRlci5yZWFkKCkpICE9ICc+JykgeworCQkJCQkJCQl0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCk7IC8vICc+JworCQkJCQkJCX0KKwkJCQkJCQlpZiAoIXZhbGlkYXRlKSB7CisJCQkJCQkJCXN0YXJ0RWxlbWVudCgoU3RyaW5nKSBjdXJyZW50LCBhdHRyaWJ1dGVsaXN0KTsgYXR0cmlidXRlbGlzdCA9IG51bGw7CisJCQkJCQkJCWVuZEVsZW1lbnQoKTsKKwkJCQkJCQl9CisJCQkJCQkJaWYgKHBhcmVudGxpc3RbMF0gPT0gbnVsbCkgeworCQkJCQkJCQlyZWFkZXIuY2xvc2UoKTsKKwkJCQkJCQkJcmV0dXJuIGN1cnJlbnQ7CisJCQkJCQkJfQorCQkJCQkJCWN1cnJlbnQgPSBwYXJlbnRsaXN0WzBdOworCQkJCQkJCXBhcmVudGxpc3QgPSAoT2JqZWN0W10pIHBhcmVudGxpc3RbMV07CisJCQkJCQkJYyA9IHJlYWRlci5yZWFkKCk7CisJCQkJCQkJYnJlYWs7CisJCQkJCQl9CisJCQkJCQllbHNlIGlmIChpbnN0cnVjdGlvbiAmJiAoYyA9PSAnPycpKSB7CisJCQkJCQkJaWYgKChjID0gcmVhZGVyLnJlYWQoKSkgIT0gJz4nKSB7CisJCQkJCQkJCXRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oKTsgLy8gJz4nCisJCQkJCQkJfQorCQkJCQkJCWMgPSByZWFkZXIucmVhZCgpOworCQkJCQkJCWJyZWFrOworCQkJCQkJfQorCQkJCQkJZWxzZSBpZiAod2hpdGVzcGFjZSkgeworCQkJCQkJCXdoaWxlICgiPSBcdFxuXHIiLmluZGV4T2YoYykgPT0gLTEpIHsKKwkJCQkJCQkJdGV4dC5hcHBlbmQoKGNoYXIpIGMpOworCQkJCQkJCQljID0gcmVhZGVyLnJlYWQoKTsKKwkJCQkJCQl9CisJCQkJCQkJU3RyaW5nIGtleSA9IHRleHQudG9TdHJpbmcoKTsKKwkJCQkJCQl0ZXh0LnNldExlbmd0aCgwKTsKKwkJCQkJCQl3aGlsZSAoIiBcdFxuXHIiLmluZGV4T2YoYykgIT0gLTEpIGMgPSByZWFkZXIucmVhZCgpOworCQkJCQkJCWlmIChjICE9ICc9JykgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigpOworCQkJCQkJCXdoaWxlICgiIFx0XG5cciIuaW5kZXhPZihjID0gcmVhZGVyLnJlYWQoKSkgIT0gLTEpOworCQkJCQkJCWNoYXIgcXVvdGUgPSAoY2hhcikgYzsKKwkJCQkJCQlpZiAoKGMgIT0gJ1wiJykgJiYgKGMgIT0gJ1wnJykpIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oKTsKKwkJCQkJCQl3aGlsZSAocXVvdGUgIT0gKGMgPSByZWFkZXIucmVhZCgpKSkgeworCQkJCQkJCQlpZiAoYyA9PSAnJicpIHsKKwkJCQkJCQkJCVN0cmluZ0J1ZmZlciBlYiA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKKwkJCQkJCQkJCXdoaWxlICgnOycgIT0gKGMgPSByZWFkZXIucmVhZCgpKSkgeyBlYi5hcHBlbmQoKGNoYXIpIGMpOyB9CisJCQkJCQkJCQlTdHJpbmcgZW50aXR5ID0gZWIudG9TdHJpbmcoKTsKKwkJCQkJCQkJCWlmICgibHQiLmVxdWFscyhlbnRpdHkpKSB7IHRleHQuYXBwZW5kKCc8Jyk7IH0KKwkJCQkJCQkJCWVsc2UgaWYgKCJndCIuZXF1YWxzKGVudGl0eSkpIHsgdGV4dC5hcHBlbmQoJz4nKTsgfQorCQkJCQkJCQkJZWxzZSBpZiAoImFtcCIuZXF1YWxzKGVudGl0eSkpIHsgdGV4dC5hcHBlbmQoJyYnKTsgfQorCQkJCQkJCQkJZWxzZSBpZiAoInF1b3QiLmVxdWFscyhlbnRpdHkpKSB7IHRleHQuYXBwZW5kKCciJyk7IH0KKwkJCQkJCQkJCWVsc2UgaWYgKCJhcG9zIi5lcXVhbHMoZW50aXR5KSkgeyB0ZXh0LmFwcGVuZCgnXCcnKTsgfQorCQkJCQkJCQkJZWxzZSBpZiAoZW50aXR5LnN0YXJ0c1dpdGgoIiMiKSkgeworCQkJCQkJCQkJCXRleHQuYXBwZW5kKChjaGFyKSBJbnRlZ2VyLnBhcnNlSW50KGVudGl0eS5zdWJzdHJpbmcoMSkpKTsKKwkJCQkJCQkJCX0KKwkJCQkJCQkJCWVsc2UgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigidW5rbm93biAiICsgImVudGl0eSAiICsgZW50aXR5KTsKKwkJCQkJCQkJfQorCQkJCQkJCQllbHNlIHRleHQuYXBwZW5kKChjaGFyKSBjKTsKKwkJCQkJCQl9CisJCQkJCQkJaWYgKCFpbnN0cnVjdGlvbikgeworCQkJCQkJCQlpZiAodmFsaWRhdGUpIHsKKwkJCQkJCQkJCWFkZEF0dHJpYnV0ZShjdXJyZW50LCBrZXksIHRleHQudG9TdHJpbmcoKSk7CisJCQkJCQkJCX0gZWxzZSB7CisJCQkJCQkJCQlpZiAoYXR0cmlidXRlbGlzdCA9PSBudWxsKSB7IGF0dHJpYnV0ZWxpc3QgPSBuZXcgSGFzaHRhYmxlKCk7IH0KKwkJCQkJCQkJCWF0dHJpYnV0ZWxpc3QucHV0KGtleSwgdGV4dC50b1N0cmluZygpKTsKKwkJCQkJCQkJfQorCQkJCQkJCX0KKwkJCQkJCQl0ZXh0LnNldExlbmd0aCgwKTsKKwkJCQkJCQljID0gcmVhZGVyLnJlYWQoKTsKKwkJCQkJCX0KKwkJCQkJCWVsc2UgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigpOworCQkJCQl9CisJCQkJfQorCQkJfQorCQkJZWxzZSB7CisJCQkJaWYgKCIgXHRcblxyIi5pbmRleE9mKGMpICE9IC0xKSB7CisJCQkJCWlmICgodGV4dC5sZW5ndGgoKSA+IDApICYmICh0ZXh0LmNoYXJBdCh0ZXh0Lmxlbmd0aCgpIC0gMSkgIT0gJyAnKSkgeworCQkJCQkJdGV4dC5hcHBlbmQoJyAnKTsKKwkJCQkJfQorCQkJCX0KKwkJCQllbHNlIHsKKwkJCQkJdGV4dC5hcHBlbmQoKGNoYXIpIGMpOworCQkJCX0KKwkJCQljID0gcmVhZGVyLnJlYWQoKTsKKwkJCX0gCisJCX0KKwkJdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigpOworCX0KKwkKKwkvKioKKwkgKiBDb252ZXJ0IGVudGl0aWVzLgorCSAqLworCXByaXZhdGUgc3RhdGljIFN0cmluZyBjb252ZXJ0KFN0cmluZ0J1ZmZlciB0ZXh0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qcHJpdmF0ZSBJbnB1dFN0cmVhbSBpbnB1dHJlYWRlcjsKKwlwcml2YXRlIGJ5dGVbXSBkYXRhOworCXByaXZhdGUgaW50IGlucHV0ZnJvbSA9IDAsIGlucHV0dG8gPSAwOworCXByaXZhdGUgaW50IHJlYWQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJaWYgKGRhdGEgPT0gbnVsbCkgeyBkYXRhID0gbmV3IGJ5dGVbMTAyNF07IH0KKwkJaWYgKGlucHV0ZnJvbSA+PSBpbnB1dHRvKSB7CisJCQlpbnB1dGZyb20gPSAwOworCQkJaW5wdXR0byA9IGlucHV0cmVhZGVyLnJlYWQoZGF0YSk7CisJCX0KKwkJaW5wdXRmcm9tKys7CisJCXJldHVybiBkYXRhW2lucHV0ZnJvbSAtIDFdOworCX0qLworCisJLyoqCisJICoKKwkgKi8KKwlwcml2YXRlIHZvaWQgYWRkSW1wbChPYmplY3QgcGFyZW50LCBPYmplY3QgY29tcG9uZW50LCBpbnQgaW5kZXgpIHsKKwkJU3RyaW5nIHBhcmVudGNsYXNzID0gZ2V0Q2xhc3MocGFyZW50KTsKKwkJU3RyaW5nIGNsYXNzbmFtZSA9IGdldENsYXNzKGNvbXBvbmVudCk7CisJCS8vU3lzdGVtLm91dC5wcmludGxuKCJhZGQgIiArIGNsYXNzbmFtZSArICIgLT4gIiArIHBhcmVudGNsYXNzKTsKKwkJaWYgKCgoImNvbWJvYm94IiA9PSBwYXJlbnRjbGFzcykgJiYgKCJjaG9pY2UiID09IGNsYXNzbmFtZSkpIHx8CisJCQkJCSgoInRhYmJlZHBhbmUiID09IHBhcmVudGNsYXNzKSAmJiAoInRhYiIgPT0gY2xhc3NuYW1lKSkgfHwKKwkJCQkJKCgibGlzdCIgPT0gcGFyZW50Y2xhc3MpICYmICgiaXRlbSIgPT0gY2xhc3NuYW1lKSkgfHwKKwkJCQkJKCgidGFibGUiID09IHBhcmVudGNsYXNzKSAmJiAoKCJjb2x1bW4iID09IGNsYXNzbmFtZSkgfHwgKCJyb3ciID09IGNsYXNzbmFtZSkpKSB8fAorCQkJCQkoKCJyb3ciID09IHBhcmVudGNsYXNzKSAmJiAoImNlbGwiID09IGNsYXNzbmFtZSkpIHx8CisJCQkJCSgoKCJ0cmVlIiA9PSBwYXJlbnRjbGFzcykgfHwgKCJub2RlIiA9PSBwYXJlbnRjbGFzcykpICYmICgibm9kZSIgPT0gY2xhc3NuYW1lKSkgfHwKKwkJCQkJKCgibWVudWJhciIgPT0gcGFyZW50Y2xhc3MpICYmICgibWVudSIgPT0gY2xhc3NuYW1lKSkpIHsKKwkJCQljbGFzc25hbWUgPSBjbGFzc25hbWU7IC8vIGNvbXBpbGVyIGJ1ZworCQl9CisJCWVsc2UgaWYgKCgibWVudSIgPT0gcGFyZW50Y2xhc3MpICYmICgoIm1lbnUiID09IGNsYXNzbmFtZSkgfHwgKCJtZW51aXRlbSIgPT0gY2xhc3NuYW1lKSB8fAorCQkJCSgiY2hlY2tib3htZW51aXRlbSIgPT0gY2xhc3NuYW1lKSB8fCAoInNlcGFyYXRvciIgPT0gY2xhc3NuYW1lKSkpIHsKKwkJCWNsYXNzbmFtZSA9ICJtZW51IjsKKwkJfQorCQllbHNlIGlmICgoInBhbmVsIiA9PSBwYXJlbnRjbGFzcykgfHwgKCJkZXNrdG9wIiA9PSBwYXJlbnRjbGFzcykgfHwKKwkJCQkoInNwbGl0cGFuZSIgPT0gcGFyZW50Y2xhc3MpIHx8ICgiZGlhbG9nIiA9PSBwYXJlbnRjbGFzcykgfHwKKwkJCQkoInRhYmJlZHBhbmUiID09IHBhcmVudGNsYXNzKSkgeworCQkJd2hpbGUgKCJjb21wb25lbnQiICE9IGNsYXNzbmFtZSkgeworCQkJCVN0cmluZyBleHRlbmRjbGFzcyA9IG51bGw7CisJCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBkdGQubGVuZ3RoOyBpICs9IDMpIHsKKwkJCQkJaWYgKGNsYXNzbmFtZSA9PSBkdGRbaV0pIHsKKwkJCQkJCWV4dGVuZGNsYXNzID0gKFN0cmluZykgZHRkW2kgKyAxXTsgYnJlYWs7CisJCQkJCX0KKwkJCQl9CisJCQkJaWYgKGV4dGVuZGNsYXNzID09IG51bGwpIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oY2xhc3NuYW1lICsgIiBub3QgY29tcG9uZW50Iik7CisJCQkJY2xhc3NuYW1lID0gZXh0ZW5kY2xhc3M7CisJCQl9CisJCX0KKwkJZWxzZSB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKGNsYXNzbmFtZSArICIgYWRkICIgKyBwYXJlbnRjbGFzcyk7CisJCWluc2VydEl0ZW0ocGFyZW50LCAoU3RyaW5nKSBjbGFzc25hbWUsIGNvbXBvbmVudCwgaW5kZXgpOworCQlzZXQoY29tcG9uZW50LCAiOnBhcmVudCIsIHBhcmVudCk7CisJCS8vaWYgKHBhcmVudCA9PSBjb250ZW50KSBTeXN0ZW0ub3V0LnByaW50bG4oZ2V0Q2xhc3MocGFyZW50KSArICIuYWRkKCIgKyBnZXRDbGFzcyhjb21wb25lbnQpICsgIikgOiAiICsgY2xhc3NuYW1lKTsKKwl9CisKKwkvKioKKwkgKgorCSAqLworCXByaXZhdGUgT2JqZWN0IGFkZEVsZW1lbnQoT2JqZWN0IHBhcmVudCwgU3RyaW5nIG5hbWUpIHsKKwkJLy9TeXN0ZW0ub3V0LnByaW50bG4oImNyZWF0ZSAnIiArIG5hbWUgKyAiJyIpOworCQlPYmplY3QgY29tcG9uZW50ID0gY3JlYXRlKG5hbWUpOworCQlhZGRJbXBsKHBhcmVudCwgY29tcG9uZW50LCAtMSk7CisJCXJldHVybiBjb21wb25lbnQ7CisJfQorCisJLyoqCisJICoKKwkgKi8KKwlwcml2YXRlIHZvaWQgYWRkQXR0cmlidXRlKE9iamVjdCBjb21wb25lbnQsIFN0cmluZyBrZXksIFN0cmluZyB2YWx1ZSkgeworCQkvL1N5c3RlbS5vdXQucHJpbnRsbigiYXR0cmlidXRlICciICsga2V5ICsgIic9JyIgKyB2YWx1ZSArICInIik7CisJCU9iamVjdFtdIGRlZmluaXRpb24gPSBnZXREZWZpbml0aW9uKGNvbXBvbmVudCwga2V5LCBudWxsKTsKKwkJa2V5ID0gKFN0cmluZykgZGVmaW5pdGlvblsxXTsKKwkJaWYgKCJzdHJpbmciID09IGRlZmluaXRpb25bMF0pIHsKKwkJCXNldFN0cmluZyhjb21wb25lbnQsIGtleSwgdmFsdWUsIChTdHJpbmcpIGRlZmluaXRpb25bM10pOworCQl9CisJCWVsc2UgaWYgKCJjaG9pY2UiID09IGRlZmluaXRpb25bMF0pIHsKKwkJCVN0cmluZ1tdIHZhbHVlcyA9IChTdHJpbmdbXSkgZGVmaW5pdGlvblszXTsKKwkJCXNldENob2ljZShjb21wb25lbnQsIGtleSwgdmFsdWUsIHZhbHVlcywgdmFsdWVzWzBdKTsKKwkJfQorCQllbHNlIGlmICgiYm9vbGVhbiIgPT0gZGVmaW5pdGlvblswXSkgeworCQkJaWYgKCJ0cnVlIi5lcXVhbHModmFsdWUpKSB7CisJCQkJaWYgKGRlZmluaXRpb25bM10gPT0gQm9vbGVhbi5GQUxTRSkgeworCQkJCQlzZXQoY29tcG9uZW50LCBrZXksIEJvb2xlYW4uVFJVRSk7CisJCQkgCX0KKwkJCX0KKwkJCWVsc2UgaWYgKCJmYWxzZSIuZXF1YWxzKHZhbHVlKSkgeworCQkJCWlmIChkZWZpbml0aW9uWzNdID09IEJvb2xlYW4uVFJVRSkgeworCQkJCQlzZXQoY29tcG9uZW50LCBrZXksIEJvb2xlYW4uRkFMU0UpOworCQkJIAl9CisJCQl9CisJCQllbHNlIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24odmFsdWUpOworCQl9CisJCWVsc2UgaWYgKCJpbnRlZ2VyIiA9PSBkZWZpbml0aW9uWzBdKSB7CisJCQlzZXQoY29tcG9uZW50LCBrZXksIEludGVnZXIudmFsdWVPZih2YWx1ZSkpOworCQl9CisJCWVsc2UgaWYgKCJpY29uIiA9PSBkZWZpbml0aW9uWzBdKSB7CisJCQlzZXQoY29tcG9uZW50LCBrZXksIGdldEljb24odmFsdWUpKTsKKwkJfQorCQllbHNlIGlmICgibWV0aG9kIiA9PSBkZWZpbml0aW9uWzBdKSB7CisJCQl0cnkgeyAvL2phdmEKKwkJCQlzZXQoY29tcG9uZW50LCBrZXksIGdldENsYXNzKCkuZ2V0TWV0aG9kKHZhbHVlLCBudWxsKSk7IC8vamF2YQorCQkJfSBjYXRjaCAoRXhjZXB0aW9uIGV4YykgeyBTeXN0ZW0uZXJyLnByaW50bG4odmFsdWUpOyBleGMucHJpbnRTdGFja1RyYWNlKCk7IH0gLy9qYXZhCisJCQkvL21pZHAgc2V0TWV0aG9kKGNvbXBvbmVudCwga2V5LCB2YWx1ZSk7CisJCX0KKwkJLy9qYXZhPgorCQllbHNlIGlmICgiYmVhbiIgPT0gZGVmaW5pdGlvblswXSkgeworCQkJdHJ5IHsKKwkJCQlzZXQoY29tcG9uZW50LCBrZXksIChDb21wb25lbnQpIENsYXNzLmZvck5hbWUodmFsdWUpLm5ld0luc3RhbmNlKCkpOworCQkJfSBjYXRjaCAoRXhjZXB0aW9uIGV4YykgeyBTeXN0ZW0uZXJyLnByaW50bG4odmFsdWUpOyBleGMucHJpbnRTdGFja1RyYWNlKCk7IH0KKwkJfQorCQkvLzxqYXZhCisJCWVsc2UgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigoU3RyaW5nKSBkZWZpbml0aW9uWzBdKTsKKwl9CisKKwkvKioKKwkgKgorCSAqLworCXByaXZhdGUgT2JqZWN0W10gZ2V0RGVmaW5pdGlvbihPYmplY3QgY29tcG9uZW50LCBTdHJpbmcga2V5LCBTdHJpbmcgdHlwZSkgeworCQlPYmplY3QgY2xhc3NuYW1lID0gZ2V0Q2xhc3MoY29tcG9uZW50KTsKKwkJT2JqZWN0IGN1cnJlbnRuYW1lID0gY2xhc3NuYW1lOworCQl3aGlsZSAoY2xhc3NuYW1lICE9IG51bGwpIHsKKwkJCWZvciAoaW50IGkgPSAwOyBpIDwgZHRkLmxlbmd0aDsgaSArPSAzKSB7CisJCQkJaWYgKGR0ZFtpXSA9PSBjbGFzc25hbWUpIHsKKwkJCQkJT2JqZWN0W11bXSBhdHRyaWJ1dGVzID0gKE9iamVjdFtdW10pIGR0ZFtpICsgMl07CisJCQkJCWZvciAoaW50IGogPSAwOyBqIDwgYXR0cmlidXRlcy5sZW5ndGg7IGorKykgeworCQkJCQkJaWYgKGF0dHJpYnV0ZXNbal1bMV0uZXF1YWxzKGtleSkpIHsKKwkJCQkJCQlpZiAoKHR5cGUgIT0gbnVsbCkgJiYgKHR5cGUgIT0gYXR0cmlidXRlc1tqXVswXSkpIHsKKwkJCQkJCQkJdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbihhdHRyaWJ1dGVzW2pdWzBdLnRvU3RyaW5nKCkpOworCQkJCQkJCX0KKwkJCQkJCQlyZXR1cm4gYXR0cmlidXRlc1tqXTsKKwkJCQkJCX0KKwkJCQkJfQorCQkJCQljbGFzc25hbWUgPSBkdGRbaSArIDFdOworCQkJCQlicmVhazsKKwkJCQl9CisJCQl9CisJCX0KKwkJdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigidW5rbm93biAiICsga2V5ICsgIiAiICsgdHlwZSArCisJCQkiIGZvciAiICsgY3VycmVudG5hbWUpOworCX0KKworCS8qKgorCSAqCisJICovCisJLy9wcml2YXRlIHZvaWQgYWRkQ29udGVudChPYmplY3QgY29tcG9uZW50LCBTdHJpbmcgY29udGVudCkgeworCQkvL3NldChjb21wb25lbnQsICJjb250ZW50IiwgY29udGVudCk7CisJLy99CisKKwkvLyAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLQorCisJLyoqCisJICoKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRTdHJpbmcoT2JqZWN0IGNvbXBvbmVudCwgU3RyaW5nIGtleSwgU3RyaW5nIHZhbHVlKSB7CisJCU9iamVjdFtdIGRlZmluaXRpb24gPSBnZXREZWZpbml0aW9uKGNvbXBvbmVudCwga2V5LCAic3RyaW5nIik7CisJCWlmIChzZXRTdHJpbmcoY29tcG9uZW50LCAoU3RyaW5nKSBkZWZpbml0aW9uWzFdLAorCQkJCXZhbHVlLCAoU3RyaW5nKSBkZWZpbml0aW9uWzNdKSkgeworCQkJdXBkYXRlKGNvbXBvbmVudCwgZGVmaW5pdGlvblsyXSk7CisJCX0KKwl9CisKKwkvKioKKwkgKgorCSAqLworCXB1YmxpYyBTdHJpbmcgZ2V0U3RyaW5nKE9iamVjdCBjb21wb25lbnQsIFN0cmluZyBrZXkpIHsKKwkJT2JqZWN0W10gZGVmaW5pdGlvbiA9IGdldERlZmluaXRpb24oY29tcG9uZW50LCBrZXksICJzdHJpbmciKTsKKwkJcmV0dXJuIGdldFN0cmluZyhjb21wb25lbnQsIChTdHJpbmcpIGRlZmluaXRpb25bMV0sCisJCQkoU3RyaW5nKSBkZWZpbml0aW9uWzNdKTsKKwl9CisKKwkvKioKKwkgKgorCSAqLworCXB1YmxpYyB2b2lkIHNldENob2ljZShPYmplY3QgY29tcG9uZW50LCBTdHJpbmcga2V5LCBTdHJpbmcgdmFsdWUpIHsKKwkJT2JqZWN0W10gZGVmaW5pdGlvbiA9IGdldERlZmluaXRpb24oY29tcG9uZW50LCBrZXksICJjaG9pY2UiKTsKKwkJU3RyaW5nW10gdmFsdWVzID0gKFN0cmluZ1tdKSBkZWZpbml0aW9uWzNdOworCQlpZiAoc2V0Q2hvaWNlKGNvbXBvbmVudCwgKFN0cmluZykgZGVmaW5pdGlvblsxXSwKKwkJCQl2YWx1ZSwgdmFsdWVzLCB2YWx1ZXNbMF0pKSB7CisJCQl1cGRhdGUoY29tcG9uZW50LCBkZWZpbml0aW9uWzJdKTsKKwkJfQorCX0KKworCS8qKgorCSAqCisJICovCisJcHVibGljIFN0cmluZyBnZXRDaG9pY2UoT2JqZWN0IGNvbXBvbmVudCwgU3RyaW5nIGtleSkgeworCQlPYmplY3RbXSBkZWZpbml0aW9uID0gZ2V0RGVmaW5pdGlvbihjb21wb25lbnQsIGtleSwgImNob2ljZSIpOworCQlyZXR1cm4gZ2V0U3RyaW5nKGNvbXBvbmVudCwgKFN0cmluZykgZGVmaW5pdGlvblsxXSwKKwkJCSgoU3RyaW5nW10pIGRlZmluaXRpb25bM10pWzBdKTsKKwl9CisKKwkvKioKKwkgKgorCSAqLworCXB1YmxpYyB2b2lkIHNldEJvb2xlYW4oT2JqZWN0IGNvbXBvbmVudCwgU3RyaW5nIGtleSwgYm9vbGVhbiB2YWx1ZSkgeworCQlPYmplY3RbXSBkZWZpbml0aW9uID0gZ2V0RGVmaW5pdGlvbihjb21wb25lbnQsIGtleSwgImJvb2xlYW4iKTsKKwkJaWYgKHNldEJvb2xlYW4oY29tcG9uZW50LCAoU3RyaW5nKSBkZWZpbml0aW9uWzFdLAorCQkJCXZhbHVlLCAoZGVmaW5pdGlvblszXSA9PSBCb29sZWFuLlRSVUUpKSkgeworCQkJdXBkYXRlKGNvbXBvbmVudCwgZGVmaW5pdGlvblsyXSk7CisJCX0KKwl9CisKKwkvKioKKwkgKgorCSAqLworCXB1YmxpYyBib29sZWFuIGdldEJvb2xlYW4oT2JqZWN0IGNvbXBvbmVudCwgU3RyaW5nIGtleSkgeworCQlPYmplY3RbXSBkZWZpbml0aW9uID0gZ2V0RGVmaW5pdGlvbihjb21wb25lbnQsIGtleSwgImJvb2xlYW4iKTsKKwkJcmV0dXJuIGdldEJvb2xlYW4oY29tcG9uZW50LCAoU3RyaW5nKSBkZWZpbml0aW9uWzFdLAorCQkJKGRlZmluaXRpb25bM10gPT0gQm9vbGVhbi5UUlVFKSk7CisJfQorCisJLyoqCisJICoKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRJbnRlZ2VyKE9iamVjdCBjb21wb25lbnQsIFN0cmluZyBrZXksIGludCB2YWx1ZSkgeworCQlPYmplY3RbXSBkZWZpbml0aW9uID0gZ2V0RGVmaW5pdGlvbihjb21wb25lbnQsIGtleSwgImludGVnZXIiKTsKKwkJaWYgKHNldEludGVnZXIoY29tcG9uZW50LCAoU3RyaW5nKSBkZWZpbml0aW9uWzFdLAorCQkJCXZhbHVlLCAoKEludGVnZXIpIGRlZmluaXRpb25bM10pLmludFZhbHVlKCkpKSB7CisJCQl1cGRhdGUoY29tcG9uZW50LCBkZWZpbml0aW9uWzJdKTsKKwkJfQorCX0KKworCS8qKgorCSAqCisJICovCisJcHVibGljIGludCBnZXRJbnRlZ2VyKE9iamVjdCBjb21wb25lbnQsIFN0cmluZyBrZXkpIHsKKwkJT2JqZWN0W10gZGVmaW5pdGlvbiA9IGdldERlZmluaXRpb24oY29tcG9uZW50LCBrZXksICJpbnRlZ2VyIik7CisJCXJldHVybiBnZXRJbnRlZ2VyKGNvbXBvbmVudCwgKFN0cmluZykgZGVmaW5pdGlvblsxXSwKKwkJCSgoSW50ZWdlcikgZGVmaW5pdGlvblszXSkuaW50VmFsdWUoKSk7CisJfQorCisJLyoqCisJICoKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRJY29uKE9iamVjdCBjb21wb25lbnQsIFN0cmluZyBrZXksIEltYWdlIGljb24pIHsKKwkJT2JqZWN0W10gZGVmaW5pdGlvbiA9IGdldERlZmluaXRpb24oY29tcG9uZW50LCBrZXksICJpY29uIik7CisJCWlmIChzZXQoY29tcG9uZW50LCAoU3RyaW5nKSBkZWZpbml0aW9uWzFdLCBpY29uKSkgeworCQkJdXBkYXRlKGNvbXBvbmVudCwgZGVmaW5pdGlvblsyXSk7CisJCX0KKwl9CisKKwkvKioKKwkgKgorCSAqLworCXB1YmxpYyBJbWFnZSBnZXRJY29uKE9iamVjdCBjb21wb25lbnQsIFN0cmluZyBrZXkpIHsKKwkJT2JqZWN0W10gZGVmaW5pdGlvbiA9IGdldERlZmluaXRpb24oY29tcG9uZW50LCBrZXksICJpY29uIik7CisJCXJldHVybiBnZXRJY29uKGNvbXBvbmVudCwgKFN0cmluZykgZGVmaW5pdGlvblsxXSwgKEltYWdlKSBkZWZpbml0aW9uWzNdKTsKKwl9CisKKwkvKioKKwkgKgorCSAqLworCXB1YmxpYyB2b2lkIHNldE1ldGhvZChPYmplY3QgY29tcG9uZW50LCBTdHJpbmcga2V5LCBNZXRob2QgbWV0aG9kKSB7IC8vamF2YQorCS8vbWlkcCBwdWJsaWMgdm9pZCBzZXRNZXRob2QoT2JqZWN0IGNvbXBvbmVudCwgU3RyaW5nIGtleSwgU3RyaW5nIG1ldGhvZCkgeworCQlPYmplY3RbXSBkZWZpbml0aW9uID0gZ2V0RGVmaW5pdGlvbihjb21wb25lbnQsIGtleSwgIm1ldGhvZCIpOworCQlpZiAoc2V0KGNvbXBvbmVudCwgKFN0cmluZykgZGVmaW5pdGlvblsxXSwgbWV0aG9kKSkgeworCQkJdXBkYXRlKGNvbXBvbmVudCwgZGVmaW5pdGlvblsyXSk7CisJCX0KKwl9CisKKwkvKioKKwkgKgorCSAqLworCXB1YmxpYyBNZXRob2QgZ2V0TWV0aG9kKE9iamVjdCBjb21wb25lbnQsIFN0cmluZyBrZXkpIHsgLy9qYXZhCisJLy9taWRwIHB1YmxpYyBTdHJpbmcgZ2V0TWV0aG9kKE9iamVjdCBjb21wb25lbnQsIFN0cmluZyBrZXkpIHsKKwkJT2JqZWN0W10gZGVmaW5pdGlvbiA9IGdldERlZmluaXRpb24oY29tcG9uZW50LCBrZXksICJtZXRob2QiKTsKKwkJcmV0dXJuIChNZXRob2QpIGdldChjb21wb25lbnQsIChTdHJpbmcpIGRlZmluaXRpb25bMV0pOyAvL2phdmEKKwkJLy9taWRwIHJldHVybiAoU3RyaW5nKSBnZXQoY29tcG9uZW50LCAoU3RyaW5nKSBkZWZpbml0aW9uWzFdKTsKKwl9CisKKwkvKioKKwkgKgorCSAqLworCXByaXZhdGUgdm9pZCB1cGRhdGUoT2JqZWN0IGNvbXBvbmVudCwgT2JqZWN0IG1vZGUpIHsKKwkJaWYgKCJwYXJlbnQiID09IG1vZGUpIHsKKwkJCWNvbXBvbmVudCA9IGdldFBhcmVudChjb21wb25lbnQpOworCQkJbW9kZSA9ICJ2YWxpZGF0ZSI7CisJCX0KKwkJYm9vbGVhbiBmaXJzdHBhaW50ID0gdHJ1ZTsKKwkJaW50IHggPSAwOyBpbnQgeSA9IDA7IGludCB3aWR0aCA9IDA7IGludCBoZWlnaHQgPSAwOworCQl3aGlsZSAoY29tcG9uZW50ICE9IG51bGwpIHsKKwkJCWlmICghZ2V0Qm9vbGVhbihjb21wb25lbnQsICJ2aXNpYmxlIiwgdHJ1ZSkpIHsgYnJlYWs7IH0KKwkJCWlmICgicGFpbnQiID09IG1vZGUpIHsvL3x8IChmaXJzdHBhaW50ICYmIChjb21wb25lbnQgPT0gY29udGVudCkpCisJCQkJUmVjdGFuZ2xlIGJvdW5kcyA9IGdldFJlY3RhbmdsZShjb21wb25lbnQsICJib3VuZHMiKTsKKwkJCQlpZiAoYm91bmRzID09IG51bGwpIHsgcmV0dXJuOyB9CisJCQkJaWYgKGZpcnN0cGFpbnQpIHsKKwkJCQkJeCA9IGJvdW5kcy54OyB5ID0gYm91bmRzLnk7CisJCQkJCXdpZHRoID0gTWF0aC5hYnMoYm91bmRzLndpZHRoKTsgaGVpZ2h0ID0gYm91bmRzLmhlaWdodDsKKwkJCQkJZmlyc3RwYWludCA9IGZhbHNlOworCQkJCX0gZWxzZSB7CisJCQkJCXggKz0gYm91bmRzLng7IHkgKz0gYm91bmRzLnk7CisJCQkJfQorCQkJCWlmIChjb21wb25lbnQgPT0gY29udGVudCkgeworCQkJCQlyZXBhaW50KHgsIHksIHdpZHRoLCBoZWlnaHQpOworCQkJCX0KKwkJCX0KKwkJCU9iamVjdCBwYXJlbnQgPSBnZXRQYXJlbnQoY29tcG9uZW50KTsKKwkJCVN0cmluZyBjbGFzc25hbWUgPSBnZXRDbGFzcyhwYXJlbnQpOworCQkJaWYgKCJjb21ib2JveCIgPT0gY2xhc3NuYW1lKSB7CisJCQkJcGFyZW50ID0gZ2V0KHBhcmVudCwgImNvbWJvbGlzdCIpOworCQkJfQorCQkJZWxzZSBpZiAoIm1lbnUiID09IGNsYXNzbmFtZSkgeworCQkJCXBhcmVudCA9IGdldChwYXJlbnQsICJwb3B1cG1lbnUiKTsKKwkJCX0KKwkJCWVsc2UgaWYgKCgicGFpbnQiID09IG1vZGUpICYmICgidGFiYmVkcGFuZSIgPT0gY2xhc3NuYW1lKSkgeworCQkJCWlmIChnZXRJdGVtSW1wbChwYXJlbnQsICJjb21wb25lbnQiLAorCQkJCQkJZ2V0SW50ZWdlcihwYXJlbnQsICJzZWxlY3RlZCIsIDApKSAhPSBjb21wb25lbnQpIHsgYnJlYWs7IH0KKwkJCX0KKwkJCWlmICgoImxheW91dCIgPT0gbW9kZSkgfHwgKCgidmFsaWRhdGUiID09IG1vZGUpICYmCisJCQkJCSgoImxpc3QiID09IGNsYXNzbmFtZSkgfHwgKCJ0YWJsZSIgPT0gY2xhc3NuYW1lKSB8fAorCQkJCQkoInRyZWUiID09IGNsYXNzbmFtZSkgfHwgKCJkaWFsb2ciID09IGNsYXNzbmFtZSkgfHwgKHBhcmVudCA9PSBjb250ZW50KSkpKSB7CisJCQkJUmVjdGFuZ2xlIGJvdW5kcyA9IGdldFJlY3RhbmdsZShwYXJlbnQsICJib3VuZHMiKTsKKwkJCQlpZiAoYm91bmRzID09IG51bGwpIHsgcmV0dXJuOyB9CisJCQkJYm91bmRzLndpZHRoID0gLTEgKiBNYXRoLmFicyhib3VuZHMud2lkdGgpOworCQkJCW1vZGUgPSAicGFpbnQiOworCQkJfQorCQkJY29tcG9uZW50ID0gcGFyZW50OworCQl9CisJfQorCisJLy8gLS0tLS0gLS0tLS0gLS0tLS0gLS0tLS0gLS0tLS0gLS0tLS0gLS0tLS0gLS0tLS0gLS0tLS0gLS0tLS0gLS0tLS0gLS0tLS0KKworCS8qKgorCSAqCisJICovCisJcHJpdmF0ZSBib29sZWFuIHNldFN0cmluZyhPYmplY3QgY29tcG9uZW50LAorCQkJU3RyaW5nIGtleSwgU3RyaW5nIHZhbHVlLCBTdHJpbmcgZGVmYXVsdHZhbHVlKSB7CisJCS8qYm9vbGVhbiBjaGFuZ2VkID0gc2V0KGNvbXBvbmVudCwga2V5LCB2YWx1ZSk7CisJCWlmIChjaGFuZ2VkICYmICgibmFtZSIgPT0ga2V5KSkgeworCQkJLy9mb3IgKENsYXNzIGNscyA9IGdldENsYXNzKCk7IGNscyAhPSBudWxsOyBjbHMgPSBjbHMuZ2V0U3VwZXJjbGFzcygpKSB7CisJCQlGaWVsZFtdIGZpZWxkcyA9IGdldENsYXNzKCkuZ2V0RGVjbGFyZWRGaWVsZHMoKTsKKwkJCWZvciAoaW50IGkgPSAwOyBpIDwgZmllbGRzLmxlbmd0aDsgaSsrKSB7CisJCQkJaWYgKChmaWVsZHNbaV0uZ2V0VHlwZSgpID09IE9iamVjdC5jbGFzcykgJiYKKwkJCQkJCWZpZWxkc1tpXS5nZXROYW1lKCkuZXF1YWxzKHZhbHVlKSkgeworCQkJCQl0cnkgeworCQkJCQkJZmllbGRzW2ldLnNldCh0aGlzLCBjb21wb25lbnQpOworCQkJCQkJcmV0dXJuIHRydWU7CisJCQkJCX0gY2F0Y2ggKElsbGVnYWxBY2Nlc3NFeGNlcHRpb24gaWFlKSB7fQorCQkJCX0KKwkJCX0KKwkJCS8vfQorCQkJdHJ5IHsKKwkJCQlnZXRDbGFzcygpLmdldEZpZWxkKHZhbHVlKS5zZXQodGhpcywgY29tcG9uZW50KTsKKwkJCX0gY2F0Y2ggKEV4Y2VwdGlvbiBleGMpIHt9CisJCX0KKwkJcmV0dXJuIGNoYW5nZWQ7Ki8KKwkJcmV0dXJuIHNldChjb21wb25lbnQsIGtleSwgdmFsdWUpOworCX0KKworCS8qKgorCSAqCisJICovCisJcHJpdmF0ZSBTdHJpbmcgZ2V0U3RyaW5nKE9iamVjdCBjb21wb25lbnQsCisJCQlTdHJpbmcga2V5LCBTdHJpbmcgZGVmYXVsdHZhbHVlKSB7CisJCU9iamVjdCB2YWx1ZSA9IGdldChjb21wb25lbnQsIGtleSk7CisJCXJldHVybiAodmFsdWUgPT0gbnVsbCkgPyBkZWZhdWx0dmFsdWUgOiAoU3RyaW5nKSB2YWx1ZTsKKwl9CisKKwkvKioKKwkgKgorCSAqLworCXByaXZhdGUgYm9vbGVhbiBzZXRDaG9pY2UoT2JqZWN0IGNvbXBvbmVudCwKKwkJCVN0cmluZyBrZXksIFN0cmluZyB2YWx1ZSwgU3RyaW5nW10gdmFsdWVzLCBTdHJpbmcgZGVmYXVsdHZhbHVlKSB7CisJCWlmICh2YWx1ZSA9PSBudWxsKSB7CisJCQlyZXR1cm4gc2V0KGNvbXBvbmVudCwga2V5LCBkZWZhdWx0dmFsdWUpOworCQl9CisJCWZvciAoaW50IGkgPSAwOyBpIDwgdmFsdWVzLmxlbmd0aDsgaSsrKSB7CisJCQlpZiAodmFsdWUuZXF1YWxzKHZhbHVlc1tpXSkpIHsKKwkJCQlyZXR1cm4gc2V0KGNvbXBvbmVudCwga2V5LCB2YWx1ZXNbaV0pOworCQkJfQorCQl9CisJCXRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oInVua25vd24gIiArIHZhbHVlICsgIiBmb3IgIiArIGtleSk7CisJfQorCisJLyoqCisJICoKKwkgKi8KKwlwcml2YXRlIGJvb2xlYW4gc2V0SWNvbihPYmplY3QgY29tcG9uZW50LAorCQkJU3RyaW5nIGtleSwgU3RyaW5nIHBhdGgsIEltYWdlIGRlZmF1bHR2YWx1ZSkgeworCQlyZXR1cm4gc2V0KGNvbXBvbmVudCwga2V5LCAocGF0aCAhPSBudWxsKSA/IGdldEljb24ocGF0aCkgOiBkZWZhdWx0dmFsdWUpOworCX0KKworCS8qKgorCSAqCisJICovCisJcHJpdmF0ZSBJbWFnZSBnZXRJY29uKE9iamVjdCBjb21wb25lbnQsIFN0cmluZyBrZXksIEltYWdlIGRlZmF1bHR2YWx1ZSkgeworCQlPYmplY3QgdmFsdWUgPSBnZXQoY29tcG9uZW50LCBrZXkpOworCQlyZXR1cm4gKHZhbHVlID09IG51bGwpID8gZGVmYXVsdHZhbHVlIDogKEltYWdlKSB2YWx1ZTsKKwl9CisKKwkvKioKKwkgKgorCSAqLworCXByaXZhdGUgYm9vbGVhbiBzZXRCb29sZWFuKE9iamVjdCBjb21wb25lbnQsCisJCQlTdHJpbmcga2V5LCBib29sZWFuIHZhbHVlLCBib29sZWFuIGRlZmF1bHR2YWx1ZSkgeworCQlyZXR1cm4gc2V0KGNvbXBvbmVudCwga2V5LCAodmFsdWUgPT0gZGVmYXVsdHZhbHVlKSA/IG51bGwgOgorCQkJKHZhbHVlID8gQm9vbGVhbi5UUlVFIDogQm9vbGVhbi5GQUxTRSkpOworCX0KKworCS8qKgorCSAqCisJICovCisJcHJpdmF0ZSBib29sZWFuIGdldEJvb2xlYW4oT2JqZWN0IGNvbXBvbmVudCwgCisJCQlTdHJpbmcga2V5LCBib29sZWFuIGRlZmF1bHR2YWx1ZSkgeworCQlPYmplY3QgdmFsdWUgPSBnZXQoY29tcG9uZW50LCBrZXkpOworCQlyZXR1cm4gKHZhbHVlID09IG51bGwpID8gZGVmYXVsdHZhbHVlIDogKChCb29sZWFuKSB2YWx1ZSkuYm9vbGVhblZhbHVlKCk7CisJfQorCisJLyoqCisJICoKKwkgKi8KKwlwcml2YXRlIGJvb2xlYW4gc2V0SW50ZWdlcihPYmplY3QgY29tcG9uZW50LAorCQkJU3RyaW5nIGtleSwgaW50IHZhbHVlLCBpbnQgZGVmYXVsdHZhbHVlKSB7CisJCXJldHVybiBzZXQoY29tcG9uZW50LCBrZXksICh2YWx1ZSA9PSBkZWZhdWx0dmFsdWUpID8gbnVsbCA6IG5ldyBJbnRlZ2VyKHZhbHVlKSk7CisJfQorCisJLyoqCisJICoKKwkgKi8KKwlwcml2YXRlIGludCBnZXRJbnRlZ2VyKE9iamVjdCBjb21wb25lbnQsIFN0cmluZyBrZXksIGludCBkZWZhdWx0dmFsdWUpIHsKKwkJT2JqZWN0IHZhbHVlID0gZ2V0KGNvbXBvbmVudCwga2V5KTsKKwkJcmV0dXJuICh2YWx1ZSA9PSBudWxsKSA/IGRlZmF1bHR2YWx1ZSA6ICgoSW50ZWdlcikgdmFsdWUpLmludFZhbHVlKCk7CisJfQorCisJLyoqCisJICoKKwkgKi8KKwlwcml2YXRlIHZvaWQgc2V0UmVjdGFuZ2xlKE9iamVjdCBjb21wb25lbnQsCisJCQlTdHJpbmcga2V5LCBpbnQgeCwgaW50IHksIGludCB3aWR0aCwgaW50IGhlaWdodCkgeworCQlSZWN0YW5nbGUgcmVjdGFuZ2xlID0gZ2V0UmVjdGFuZ2xlKGNvbXBvbmVudCwga2V5KTsKKwkJaWYgKHJlY3RhbmdsZSAhPSBudWxsKSB7CisJCQlyZWN0YW5nbGUueCA9IHg7IHJlY3RhbmdsZS55ID0geTsKKwkJCXJlY3RhbmdsZS53aWR0aCA9IHdpZHRoOyByZWN0YW5nbGUuaGVpZ2h0ID0gaGVpZ2h0OworCQl9CisJCWVsc2UgeworCQkJc2V0KGNvbXBvbmVudCwga2V5LCBuZXcgUmVjdGFuZ2xlKHgsIHksIHdpZHRoLCBoZWlnaHQpKTsgLy9qYXZhCisJCQkvL21pZHAgc2V0KGNvbXBvbmVudCwga2V5LCBuZXcgaW50W10geyB3aWR0aCwgaGVpZ2h0LCB4LCB5IH0pOworCQl9CisJfQorCisJLyoqCisJICoKKwkgKi8KKwlwcml2YXRlIFJlY3RhbmdsZSBnZXRSZWN0YW5nbGUoT2JqZWN0IGNvbXBvbmVudCwgU3RyaW5nIGtleSkgeworCQlyZXR1cm4gKFJlY3RhbmdsZSkgZ2V0KGNvbXBvbmVudCwga2V5KTsgLy9qYXZhCisJCS8vbWlkcCByZXR1cm4gKGludFtdKSBnZXQoY29tcG9uZW50LCBrZXkpOworCX0KKworCS8vIC0tLS0tIC0tLS0tIC0tLS0tIC0tLS0tIC0tLS0tIC0tLS0tIC0tLS0tIC0tLS0tIC0tLS0tIC0tLS0tIC0tLS0tIC0tLS0tCisKKwkvKioKKwkgKgorCSAqLworCXB1YmxpYyBJbWFnZSBnZXRJY29uKFN0cmluZyBwYXRoKSB7CisJCXJldHVybiBnZXRJY29uKHBhdGgsIHRydWUpOworCX0KKworCS8qKgorCSAqCisJICovCisJcHVibGljIEltYWdlIGdldEljb24oU3RyaW5nIHBhdGgsIGJvb2xlYW4gcHJlbG9hZCkgeworCQlpZiAoKHBhdGggPT0gbnVsbCkgfHwgKHBhdGgubGVuZ3RoKCkgPT0gMCkpIHsKKwkJCXJldHVybiBudWxsOworCQl9CisJCUltYWdlIGltYWdlID0gbnVsbDsgLy8oSW1hZ2UpIGltYWdlcG9vbC5nZXQocGF0aCk7CisJCS8vbWlkcCB0cnkgeworCQkvL21pZHAgCWltYWdlID0gSW1hZ2UuY3JlYXRlSW1hZ2UocGF0aCk7CisJCS8vbWlkcCB9IGNhdGNoIChJT0V4Y2VwdGlvbiBpb2UpIHt9CisJCS8vamF2YT4KKwkJdHJ5IHsKKwkJCWltYWdlID0gVG9vbGtpdC5nZXREZWZhdWx0VG9vbGtpdCgpLmdldEltYWdlKGdldENsYXNzKCkuZ2V0UmVzb3VyY2UocGF0aCkpOworCQkJLy9pbWFnZSA9IFRvb2xraXQuZ2V0RGVmYXVsdFRvb2xraXQoKS5nZXRJbWFnZShDbGFzc0xvYWRlci5nZXRTeXN0ZW1SZXNvdXJjZShwYXRoKSk7CisJCX0gY2F0Y2ggKFRocm93YWJsZSBlKSB7fQorCQlpZiAoaW1hZ2UgPT0gbnVsbCkgeworCQkJdHJ5IHsKKwkJCQlJbnB1dFN0cmVhbSBpcyA9IGdldENsYXNzKCkuZ2V0UmVzb3VyY2VBc1N0cmVhbShwYXRoKTsKKwkJCQkvL0lucHV0U3RyZWFtIGlzID0gQ2xhc3NMb2FkZXIuZ2V0U3lzdGVtUmVzb3VyY2VBc1N0cmVhbShwYXRoKTsKKwkJCQlpZiAoaXMgIT0gbnVsbCkgeworCQkJCQlieXRlW10gZGF0YSA9IG5ldyBieXRlW2lzLmF2YWlsYWJsZSgpXTsKKwkJCQkJaXMucmVhZChkYXRhLCAwLCBkYXRhLmxlbmd0aCk7CisJCQkJCWltYWdlID0gZ2V0VG9vbGtpdCgpLmNyZWF0ZUltYWdlKGRhdGEpOworCQkJCQlpcy5jbG9zZSgpOworCQkJCX0KKwkJCX0gY2F0Y2ggKFRocm93YWJsZSBlKSB7fQorCQl9CisJCS8vaWYgKGltYWdlID09IG51bGwpIHsgLy8gYXBwbGV0IGNvZGUKKwkJLy8JdHJ5IHsKKwkJLy8JCWltYWdlID0gZ2V0SW1hZ2UoZ2V0Q29kZUJhc2UoKSwgcGF0aCk7CisJCS8vCX0gY2F0Y2ggKFRocm93YWJsZSBlKSB7fQorCQkvL30KKwkJaWYgKHByZWxvYWQgJiYgKGltYWdlICE9IG51bGwpKSB7CisJCQlNZWRpYVRyYWNrZXIgbWVkaWF0cmFja2VyID0gbmV3IE1lZGlhVHJhY2tlcih0aGlzKTsKKwkJCW1lZGlhdHJhY2tlci5hZGRJbWFnZShpbWFnZSwgMSk7CisJCQl0cnkgeworCQkJCW1lZGlhdHJhY2tlci53YWl0Rm9ySUQoMSwgNTApOworCQkJfSBjYXRjaCAoSW50ZXJydXB0ZWRFeGNlcHRpb24gaWUpIHsgfQorCQkJLy9pbWFnZXBvb2wucHV0KHBhdGgsIGltYWdlKTsKKwkJfSAKKwkJLy88amF2YQorCQlyZXR1cm4gaW1hZ2U7CisJfQorCisJLyoqCisJICoKKwkgKi8KKwlwdWJsaWMgYm9vbGVhbiBkZXN0cm95KCkgeworCQlyZXR1cm4gdHJ1ZTsKKwl9CisKKwlwcml2YXRlIHN0YXRpYyBPYmplY3RbXSBkdGQ7CisJc3RhdGljIHsKKwkJSW50ZWdlciBpbnRlZ2VyXzEgPSBuZXcgSW50ZWdlcigtMSk7CisJCUludGVnZXIgaW50ZWdlcjAgPSBuZXcgSW50ZWdlcigwKTsKKwkJSW50ZWdlciBpbnRlZ2VyMSA9IG5ldyBJbnRlZ2VyKDEpOworCQlTdHJpbmdbXSBvcmllbnRhdGlvbiA9IHsgImhvcml6b250YWwiLCAidmVydGljYWwiIH07CisJCVN0cmluZ1tdIGxlZnRjZW50ZXJyaWdodCA9IHsgImxlZnQiLCAiY2VudGVyIiwgInJpZ2h0IiB9OworCQlTdHJpbmdbXSBzZWxlY3Rpb25zID0geyAic2luZ2xlIiwgImludGVydmFsIiwgIm11bHRpcGxlIiB9OworCQlkdGQgPSBuZXcgT2JqZWN0W10geworCQkJImNvbXBvbmVudCIsIG51bGwsIG5ldyBPYmplY3RbXVtdIHsKKwkJCQl7ICJzdHJpbmciLCAibmFtZSIsICIiLCBudWxsIH0sCisJCQkJeyAiYm9vbGVhbiIsICJlbmFibGVkIiwgInBhaW50IiwgQm9vbGVhbi5UUlVFIH0sCisJCQkJeyAiYm9vbGVhbiIsICJ2aXNpYmxlIiwgInBhcmVudCIsIEJvb2xlYW4uVFJVRSB9LAorCQkJCXsgInN0cmluZyIsICJ0b29sdGlwIiwgIiIsIG51bGwgfSwKKwkJCQl7ICJpbnRlZ2VyIiwgIndpZHRoIiwgInZhbGlkYXRlIiwgaW50ZWdlcjAgfSwKKwkJCQl7ICJpbnRlZ2VyIiwgImhlaWdodCIsICJ2YWxpZGF0ZSIsIGludGVnZXIwIH0sCisJCQkJeyAiaW50ZWdlciIsICJjb2xzcGFuIiwgInZhbGlkYXRlIiwgaW50ZWdlcjEgfSwKKwkJCQl7ICJpbnRlZ2VyIiwgInJvd3NwYW4iLCAidmFsaWRhdGUiLCBpbnRlZ2VyMSB9LAorCQkJCXsgImludGVnZXIiLCAid2VpZ2h0eCIsICJ2YWxpZGF0ZSIsIGludGVnZXIwIH0sCisJCQkJeyAiaW50ZWdlciIsICJ3ZWlnaHR5IiwgInZhbGlkYXRlIiwgaW50ZWdlcjAgfSwKKwkJCQl7ICJjaG9pY2UiLCAiaGFsaWduIiwgInZhbGlkYXRlIiwKKwkJCQkJbmV3IFN0cmluZ1tdIHsgImZpbGwiLCAiY2VudGVyIiwgImxlZnQiLCAicmlnaHQiIH0gfSwKKwkJCQl7ICJjaG9pY2UiLCAidmFsaWduIiwgInZhbGlkYXRlIiwKKwkJCQkJbmV3IFN0cmluZ1tdIHsgImZpbGwiLCAiY2VudGVyIiwgInRvcCIsICJib3R0b20iIH0gfQorCQkJCS8vIGNvbXBvbmVudCBjbGFzcyBTdHJpbmcgbnVsbCoKKwkJCQkvLyBwYXJlbnQgT2JqZWN0IG51bGwKKwkJCQkvLyAoYm91bmRzKSBSZWN0YW5nbGUgMCAwIDAgMAorCQkJfSwKKwkJCSJsYWJlbCIsICJjb21wb25lbnQiLCBuZXcgT2JqZWN0W11bXSB7CisJCQkJeyAic3RyaW5nIiwgInRleHQiLCAidmFsaWRhdGUiLCBudWxsIH0sCisJCQkJeyAiaWNvbiIsICJpY29uIiwgInZhbGlkYXRlIiwgbnVsbCB9LAorCQkJIAl7ICJjaG9pY2UiLCAiYWxpZ25tZW50IiwgInZhbGlkYXRlIiwgbGVmdGNlbnRlcnJpZ2h0IH0sCisJCQkgCXsgImludGVnZXIiLCAibW5lbW9uaWMiLCAicGFpbnQiLCBpbnRlZ2VyXzEgfSB9LAorCQkJImJ1dHRvbiIsICJsYWJlbCIsIG5ldyBPYmplY3RbXVtdIHsKKwkJCSAJeyAiY2hvaWNlIiwgImFsaWdubWVudCIsICJ2YWxpZGF0ZSIsIG5ldyBTdHJpbmdbXSB7ICJjZW50ZXIiLCAibGVmdCIsICJyaWdodCIgfSB9LAorCQkJCXsgIm1ldGhvZCIsICJhY3Rpb24iLCAiIiwgbnVsbCB9LAorCQkJCS8veyAiY2hvaWNlIiwgInR5cGUiLCAiIiwgbmV3IFN0cmluZ1tdIHsgIm5vcm1hbCIsICJkZWZhdWx0IiwgImNhbmNlbCIgfSB9CisJCQkJfSwvLy4uLgorCQkJImNoZWNrYm94IiwgImxhYmVsIiwgbmV3IE9iamVjdFtdW10geworCQkJCXsgImJvb2xlYW4iLCAic2VsZWN0ZWQiLCAicGFpbnQiLCBCb29sZWFuLkZBTFNFIH0sIC8vLi4uZ3JvdXAKKwkJCQl7ICJzdHJpbmciLCAiZ3JvdXAiLCAicGFpbnQiLCBudWxsIH0sIC8vLi4uZ3JvdXAKKwkJCQl7ICJtZXRob2QiLCAiYWN0aW9uIiwgIiIsIG51bGwgfSB9LAorCQkJImNvbWJvYm94IiwgInRleHRmaWVsZCIsIG5ldyBPYmplY3RbXVtdIHsKKwkJCQl7ICJpY29uIiwgImljb24iLCAidmFsaWRhdGUiLCBudWxsIH0sCisJCQkJeyAiaW50ZWdlciIsICJzZWxlY3RlZCIsICJsYXlvdXQiLCBpbnRlZ2VyXzEgfSB9LAorCQkJImNob2ljZSIsIG51bGwsIG5ldyBPYmplY3RbXVtdIHsKKwkJCQl7ICJzdHJpbmciLCAibmFtZSIsICIiLCBudWxsIH0sCisJCQkJeyAiYm9vbGVhbiIsICJlbmFibGVkIiwgInBhaW50IiwgQm9vbGVhbi5UUlVFIH0sCisJCQkJeyAic3RyaW5nIiwgInRleHQiLCAiIiwgbnVsbCB9LAorCQkJCXsgImljb24iLCAiaWNvbiIsICIiLCBudWxsIH0sCisJCQkJeyAiY2hvaWNlIiwgImFsaWdubWVudCIsICIiLCBsZWZ0Y2VudGVycmlnaHQgfSwKKwkJCQl7ICJzdHJpbmciLCAidG9vbHRpcCIsICIiLCBudWxsIH0gfSwKKwkJCSJ0ZXh0ZmllbGQiLCAiY29tcG9uZW50IiwgbmV3IE9iamVjdFtdW10geworCQkJCXsgInN0cmluZyIsICJ0ZXh0IiwgImxheW91dCIsICIiIH0sCisJCQkJeyAiaW50ZWdlciIsICJjb2x1bW5zIiwgInZhbGlkYXRlIiwgaW50ZWdlcjAgfSwKKwkJCQl7ICJib29sZWFuIiwgImVkaXRhYmxlIiwgInBhaW50IiwgQm9vbGVhbi5UUlVFIH0sCisJCQkJeyAiaW50ZWdlciIsICJzdGFydCIsICJsYXlvdXQiLCBpbnRlZ2VyMCB9LAorCQkJCXsgImludGVnZXIiLCAiZW5kIiwgImxheW91dCIsIGludGVnZXIwIH0sCisJCQkJeyAibWV0aG9kIiwgImFjdGlvbiIsICIiLCBudWxsIH0gfSwKKwkJCSJwYXNzd29yZGZpZWxkIiwgInRleHRmaWVsZCIsIG5ldyBPYmplY3RbXVtdIHt9LAorCQkJInRleHRhcmVhIiwgInRleHRmaWVsZCIsIG5ldyBPYmplY3RbXVtdIHsKKwkJCQl7ICJpbnRlZ2VyIiwgInJvd3MiLCAidmFsaWRhdGUiLCBpbnRlZ2VyMCB9LAorCQkJCXsgImJvb2xlYW4iLCAid3JhcCIsICJsYXlvdXQiLCBCb29sZWFuLkZBTFNFIH0gfSwKKwkJCSJ0YWJiZWRwYW5lIiwgImNvbXBvbmVudCIsIG5ldyBPYmplY3RbXVtdIHsKKwkJCQl7ICJjaG9pY2UiLCAicGxhY2VtZW50IiwgInZhbGlkYXRlIiwKKwkJCQkJbmV3IFN0cmluZ1tdIHsgInRvcCIsICJsZWZ0IiwgImJvdHRvbSIsICJyaWdodCIgfSB9LAorCQkJCXsgImludGVnZXIiLCAic2VsZWN0ZWQiLCAicGFpbnQiLCBpbnRlZ2VyMCB9LAorCQkJCXsgIm1ldGhvZCIsICJhY3Rpb24iLCAiIiwgbnVsbCB9IH0sIC8vLi4uZm9jdXMKKwkJCSJ0YWIiLCAiY2hvaWNlIiwgbmV3IE9iamVjdFtdW10geworCQkJCXsgImludGVnZXIiLCAibW5lbW9uaWMiLCAicGFpbnQiLCBpbnRlZ2VyXzEgfSB9LAorCQkJInBhbmVsIiwgImNvbXBvbmVudCIsIG5ldyBPYmplY3RbXVtdIHsKKwkJCQl7ICJpbnRlZ2VyIiwgImNvbHVtbnMiLCAidmFsaWRhdGUiLCBpbnRlZ2VyMCB9LAorCQkJCXsgImludGVnZXIiLCAidG9wIiwgInZhbGlkYXRlIiwgaW50ZWdlcjAgfSwKKwkJCQl7ICJpbnRlZ2VyIiwgImxlZnQiLCAidmFsaWRhdGUiLCBpbnRlZ2VyMCB9LAorCQkJCXsgImludGVnZXIiLCAiYm90dG9tIiwgInZhbGlkYXRlIiwgaW50ZWdlcjAgfSwKKwkJCQl7ICJpbnRlZ2VyIiwgInJpZ2h0IiwgInZhbGlkYXRlIiwgaW50ZWdlcjAgfSwKKwkJCQl7ICJpbnRlZ2VyIiwgImdhcCIsICJ2YWxpZGF0ZSIsIGludGVnZXIwIH0gfSwKKwkJCSJkZXNrdG9wIiwgImNvbXBvbmVudCIsIG5ldyBPYmplY3RbXVtdIHt9LAorCQkJImRpYWxvZyIsICJwYW5lbCIsIG5ldyBPYmplY3RbXVtdIHsKKwkJCQl7ICJzdHJpbmciLCAidGV4dCIsICIiLCBudWxsIH0sCisJCQkJeyAiaWNvbiIsICJpY29uIiwgIiIsIG51bGwgfSwKKwkJCQl7ICJib29sZWFuIiwgIm1vZGFsIiwgIiIsIEJvb2xlYW4uRkFMU0UgfSB9LAorCQkJInNwaW5ib3giLCAidGV4dGZpZWxkIiwgbmV3IE9iamVjdFtdW10ge30sIC8vLi4uCisJCQkicHJvZ3Jlc3NiYXIiLCAiY29tcG9uZW50IiwgbmV3IE9iamVjdFtdW10geworCQkJCXsgImNob2ljZSIsICJvcmllbnRhdGlvbiIsICJ2YWxpZGF0ZSIsIG9yaWVudGF0aW9uIH0sCisJCQkJeyAiaW50ZWdlciIsICJtaW5pbXVtIiwgInBhaW50IiwgaW50ZWdlcjAgfSwgLy8uLi5jaGVja3ZhbHVlCisJCQkJeyAiaW50ZWdlciIsICJtYXhpbXVtIiwgInBhaW50IiwgbmV3IEludGVnZXIoMTAwKSB9LAorCQkJCXsgImludGVnZXIiLCAidmFsdWUiLCAicGFpbnQiLCBpbnRlZ2VyMCB9IH0sCisJCQkJLy8gY2hhbmdlIHN0cmluZ3BhaW50ZWQKKwkJCSJzbGlkZXIiLCAicHJvZ3Jlc3NiYXIiLCBuZXcgT2JqZWN0W11bXSB7CisJCQkJeyAiaW50ZWdlciIsICJ1bml0IiwgIiIsIG5ldyBJbnRlZ2VyKDUpIH0sCisJCQkJeyAiaW50ZWdlciIsICJibG9jayIsICIiLCBuZXcgSW50ZWdlcigyNSkgfSwKKwkJCQl7ICJtZXRob2QiLCAiYWN0aW9uIiwgIiIsIG51bGwgfSB9LAorCQkJCS8vIG1pbm9yL21ham9ydGlja3NwYWNpbmcKKwkJCQkvLyBpbnZlcnRlZAorCQkJCS8vIGxhYmVsaW5jcmVtZW50IGxhYmVsc3RhcnQKKwkJCSJzcGxpdHBhbmUiLCAiY29tcG9uZW50IiwgbmV3IE9iamVjdFtdW10geworCQkJCXsgImNob2ljZSIsICJvcmllbnRhdGlvbiIsICJ2YWxpZGF0ZSIsIG9yaWVudGF0aW9uIH0sCisJCQkJeyAiaW50ZWdlciIsICJkaXZpZGVyIiwgImxheW91dCIsIGludGVnZXJfMSB9IH0sCisJCQkibGlzdCIsICJjb21wb25lbnQiLCBuZXcgT2JqZWN0W11bXSB7CisJCQkJeyAiY2hvaWNlIiwgInNlbGVjdGlvbiIsICJwYWludCIsIHNlbGVjdGlvbnMgfSwKKwkJCQl7ICJtZXRob2QiLCAiYWN0aW9uIiwgIiIsIG51bGwgfSB9LCAvLy4uLj8KKwkJCSJpdGVtIiwgImNob2ljZSIsIG5ldyBPYmplY3RbXVtdIHsKKwkJCQl7ICJib29sZWFuIiwgInNlbGVjdGVkIiwgIiIsIEJvb2xlYW4uRkFMU0UgfSB9LAorCQkJInRhYmxlIiwgImNvbXBvbmVudCIsIG5ldyBPYmplY3RbXVtdIHsKKwkJCQl7ICJjaG9pY2UiLCAic2VsZWN0aW9uIiwgInBhaW50Iiwgc2VsZWN0aW9ucyB9LAorCQkJCXsgIm1ldGhvZCIsICJhY3Rpb24iLCAiIiwgbnVsbCB9CisJCQkJLyp7ICJjaG9pY2UiLCAic2VsZWN0aW9uIiwKKwkJCQkJbmV3IFN0cmluZ1tdIHsgInNpbmdsZXJvdyIsICJyb3dpbnRlcnZhbCIsICJtdWx0aXBsZXJvdyIsCisJCQkJCQkiY2VsbCIsICJjZWxsaW50ZXJ2YWwiLAorCQkJCQkJInNpbmdsZWNvbHVtbiIsICJjb2x1bW5pbnRlcnZhbCIsICJtdWx0aXBsZWNvbHVtbiIgfSB9Ki8gfSwKKwkJCSJjb2x1bW4iLCAiY2hvaWNlIiwgbmV3IE9iamVjdFtdW10geworCQkJCXsgImludGVnZXIiLCAid2lkdGgiLCAiIiwgbmV3IEludGVnZXIoODApIH19LAorCQkJInJvdyIsIG51bGwsIG5ldyBPYmplY3RbXVtdIHsKKwkJCQl7ICJib29sZWFuIiwgInNlbGVjdGVkIiwgIiIsIEJvb2xlYW4uRkFMU0UgfSB9LAorCQkJImNlbGwiLCAiY2hvaWNlIiwgbmV3IE9iamVjdFtdW10ge30sCisJCQkidHJlZSIsICJjb21wb25lbnQiLCBuZXcgT2JqZWN0W11bXSB7CisJCQkJeyAiY2hvaWNlIiwgInNlbGVjdGlvbiIsICJwYWludCIsIHNlbGVjdGlvbnMgfSwKKwkJCQl7ICJtZXRob2QiLCAiYWN0aW9uIiwgIiIsIG51bGwgfSwKKwkJCQl7ICJtZXRob2QiLCAiZXhwYW5kIiwgIiIsIG51bGwgfSwKKwkJCQl7ICJtZXRob2QiLCAiY29sbGFwc2UiLCAiIiwgbnVsbCB9IH0sCisJCQkibm9kZSIsICJjaG9pY2UiLCBuZXcgT2JqZWN0W11bXSB7CisJCQkJeyAiYm9vbGVhbiIsICJzZWxlY3RlZCIsICIiLCBCb29sZWFuLkZBTFNFIH0sCisJCQkJeyAiYm9vbGVhbiIsICJleHBhbmRlZCIsICIiLCBCb29sZWFuLlRSVUUgfSB9LAorCQkJInNlcGFyYXRvciIsICJjb21wb25lbnQiLCBuZXcgT2JqZWN0W11bXSB7fSwKKwkJCSJtZW51YmFyIiwgImNvbXBvbmVudCIsIG5ldyBPYmplY3RbXVtdIHt9LAorCQkJIm1lbnUiLCAiY2hvaWNlIiwgbmV3IE9iamVjdFtdW10geworCQkJCXsgImludGVnZXIiLCAibW5lbW9uaWMiLCAicGFpbnQiLCBpbnRlZ2VyXzEgfSB9LAorCQkJIm1lbnVpdGVtIiwgImNob2ljZSIsIG5ldyBPYmplY3RbXVtdIHsKKwkJCQl7ICJzdHJpbmciLCAiYWNjZWxlcmF0b3IiLCAiIiwgbnVsbCB9LAorCQkJCXsgIm1ldGhvZCIsICJhY3Rpb24iLCAiIiwgbnVsbCB9LAorCQkJCXsgImludGVnZXIiLCAibW5lbW9uaWMiLCAicGFpbnQiLCBpbnRlZ2VyXzEgfQorCQkJCS8vLi4uIEtleVN0cm9rZT1rZXlDb2RlK21vZGlmaWVycyhTSElGVCBDVFJMIE1FVEEgQUxUX01BU0spCisJCQl9LAorCQkJImNoZWNrYm94bWVudWl0ZW0iLCAibWVudWl0ZW0iLCBuZXcgT2JqZWN0W11bXSB7CisJCQkJeyAiYm9vbGVhbiIsICJzZWxlY3RlZCIsICJwYWludCIsIEJvb2xlYW4uRkFMU0UgfSwgLy8uLi5ncm91cAorCQkJCXsgInN0cmluZyIsICJncm91cCIsICJwYWludCIsIG51bGwgfSB9LCAvLy4uLmdyb3VwCisJCQkiYmVhbiIsICJjb21wb25lbnQiLCBuZXcgT2JqZWN0W11bXSB7CisJCQkJeyAiYmVhbiIsICJiZWFuIiwgIiIsIG51bGwgfQorCQkJfQorCQl9OworCX0JCit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZy9hVGhpbmxldF9obC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmcvYVRoaW5sZXRfaGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YWNhMDVhCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmcvYVRoaW5sZXRfaGwuamF2YQpAQCAtMCwwICsxLDUzOTMgQEAKKy8qCisJVGhpbmxldCBHVUkgdG9vbGtpdCAtIHd3dy50aGlubGV0LmNvbQorCUNvcHlyaWdodCAoQykgMjAwMiBSb2JlcnQgQmFqemF0IChyb2JlcnQuYmFqemF0QHRoaW5sZXQuY29tKQorCisJVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorCW1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKwlMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKwl2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworCVRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorCWJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisJTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKwlMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisJWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworCUxpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKwlGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisqLworCisvL3BhY2thZ2UgdGhpbmxldDsgLy9qYXZhCisvL21pZHAgcGFja2FnZSB0aGlubGV0Lm1pZHA7CisKK2ltcG9ydCBqYXZhLjxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICdhcHBsZXQnIj5hcHBsZXQ8L2Vycm9yPi4qOyAvL2phdmEKK2ltcG9ydCBqYXZhLmF3dC4qOyAvL2phdmEKK2ltcG9ydCBqYXZhLmF3dC48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAnZGF0YXRyYW5zZmVyJyI+ZGF0YXRyYW5zZmVyPC9lcnJvcj4uKjsgLy9qYXZhCitpbXBvcnQgamF2YS5hd3QuPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ2ltYWdlJyI+aW1hZ2U8L2Vycm9yPi4qOyAvL2phdmEKK2ltcG9ydCBqYXZhLmF3dC5ldmVudC4qOyAvL2phdmEKK2ltcG9ydCBqYXZhLmxhbmcucmVmbGVjdC4qOyAvL2phdmEKK2ltcG9ydCBqYXZhLmlvLio7CitpbXBvcnQgamF2YS5uZXQuKjsgLy9qYXZhCitpbXBvcnQgamF2YS51dGlsLio7CisvL21pZHAgaW1wb3J0IGphdmF4Lm1pY3JvZWRpdGlvbi5sY2R1aS4qOworLy9taWRwIGltcG9ydCBqYXZheC5taWNyb2VkaXRpb24ubWlkbGV0Lio7CisKKy8qKgorICoKKyAqLworcHVibGljIGNsYXNzIFRoaW5sZXQgZXh0ZW5kcyBDb250YWluZXIgLy9qYXZhCisJaW1wbGVtZW50cyBSdW5uYWJsZSwgU2VyaWFsaXphYmxlIHsgLy9qYXZhCisvL21pZHAgcHVibGljIGNsYXNzIFRoaW5sZXQgZXh0ZW5kcyBDYW52YXMgaW1wbGVtZW50cyBDb21tYW5kTGlzdGVuZXIgeworCisJLy9taWRwIHByaXZhdGUgc3RhdGljIGZpbmFsIEJvb2xlYW4gVFJVRSA9IG5ldyBCb29sZWFuKHRydWUpOworCS8vbWlkcCBwcml2YXRlIHN0YXRpYyBmaW5hbCBCb29sZWFuIEZBTFNFID0gbmV3IEJvb2xlYW4oZmFsc2UpOworCisJLy9taWRwIHByaXZhdGUgdHJhbnNpZW50IEZvbnQgZm9udDsKKwlwcml2YXRlIHRyYW5zaWVudCA8ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAnQ29sb3InIj5Db2xvcjwvZXJyb3I+IGNfYmc7CisJcHJpdmF0ZSB0cmFuc2llbnQgPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ0NvbG9yJyI+Q29sb3I8L2Vycm9yPiBjX3RleHQ7CisJcHJpdmF0ZSB0cmFuc2llbnQgPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ0NvbG9yJyI+Q29sb3I8L2Vycm9yPiBjX3RleHRiZzsKKwlwcml2YXRlIHRyYW5zaWVudCA8ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAnQ29sb3InIj5Db2xvcjwvZXJyb3I+IGNfYm9yZGVyOworCXByaXZhdGUgdHJhbnNpZW50IDxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICdDb2xvciciPkNvbG9yPC9lcnJvcj4gY19kaXNhYmxlOworCXByaXZhdGUgdHJhbnNpZW50IDxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICdDb2xvciciPkNvbG9yPC9lcnJvcj4gY19ob3ZlcjsKKwlwcml2YXRlIHRyYW5zaWVudCA8ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAnQ29sb3InIj5Db2xvcjwvZXJyb3I+IGNfcHJlc3M7CisJcHJpdmF0ZSB0cmFuc2llbnQgPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ0NvbG9yJyI+Q29sb3I8L2Vycm9yPiBjX2ZvY3VzOworCXByaXZhdGUgdHJhbnNpZW50IDxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICdDb2xvciciPkNvbG9yPC9lcnJvcj4gY19zZWxlY3Q7CisJcHJpdmF0ZSB0cmFuc2llbnQgPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ0NvbG9yJyI+Q29sb3I8L2Vycm9yPiBjX2N0cmwgPSBudWxsOyAvL2phdmEKKwkvL21pZHAgcHJpdmF0ZSB0cmFuc2llbnQgQ29sb3IgY19jdHJsOworCXByaXZhdGUgdHJhbnNpZW50IGludCBibG9jazsKKwlwcml2YXRlIHRyYW5zaWVudCA8ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAnSW1hZ2UnIj5JbWFnZTwvZXJyb3I+IGdyYWRpZW50OyAvL2phdmEKKwl7CisJCXNldEZvbnQobmV3IDxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICdGb250JyI+Rm9udDwvZXJyb3I+KCJTYW5zU2VyaWYiLCA8ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAnRm9udCciPkZvbnQ8L2Vycm9yPi5QTEFJTiwgMTIpKTsgLy9qYXZhCisJCS8vbWlkcCBzZXRGb250KEZvbnQuZ2V0RGVmYXVsdEZvbnQoKSk7CisJCXNldENvbG9ycygweGU2ZTZlNiwgMHgwMDAwMDAsIDB4ZmZmZmZmLAorCQkJMHg5MDkwOTAsIDB4YjBiMGIwLCAweGVkZWRlZCwgMHhiOWI5YjksIDB4ODk4OTlhLCAweGM1YzVkZCk7IC8vIGY5OTIzNyBlYWMxNmEgLy8gZTY4YjJjIGZmYzczYworCX0KKworCXByaXZhdGUgdHJhbnNpZW50IFRocmVhZCB0aW1lcjsKKwlwcml2YXRlIHRyYW5zaWVudCBsb25nIHdhdGNoZGVsYXk7CisJcHJpdmF0ZSB0cmFuc2llbnQgbG9uZyB3YXRjaDsKKwlwcml2YXRlIHRyYW5zaWVudCBTdHJpbmcgY2xpcGJvYXJkOworCisJcHJpdmF0ZSBPYmplY3QgY29udGVudCA9IGNyZWF0ZUltcGwoImRlc2t0b3AiKTsKKwlwcml2YXRlIHRyYW5zaWVudCBPYmplY3QgbW91c2VpbnNpZGU7CisJcHJpdmF0ZSB0cmFuc2llbnQgT2JqZWN0IGluc2lkZXBhcnQ7CisJcHJpdmF0ZSB0cmFuc2llbnQgT2JqZWN0IG1vdXNlcHJlc3NlZDsKKwlwcml2YXRlIHRyYW5zaWVudCBPYmplY3QgcHJlc3NlZHBhcnQ7CisJcHJpdmF0ZSB0cmFuc2llbnQgaW50IHJlZmVyZW5jZXgsIHJlZmVyZW5jZXk7CisJcHJpdmF0ZSB0cmFuc2llbnQgaW50IG1vdXNleCwgbW91c2V5OworCXByaXZhdGUgdHJhbnNpZW50IE9iamVjdCBmb2N1c293bmVyOworCXByaXZhdGUgdHJhbnNpZW50IGJvb2xlYW4gZm9jdXNpbnNpZGU7IC8vbWlkcCB7IGZvY3VzaW5zaWRlID0gdHJ1ZTsgfQorCXByaXZhdGUgdHJhbnNpZW50IE9iamVjdCBwb3B1cG93bmVyOworCXByaXZhdGUgdHJhbnNpZW50IE9iamVjdCB0b29sdGlwb3duZXI7CisJLy9wcml2YXRlIHRyYW5zaWVudCBpbnQgcHJlc3NlZGtleTsKKworCS8vamF2YT4KKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgRFJBR19FTlRFUkVEID0gPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ0FXVEV2ZW50JyI+QVdURXZlbnQ8L2Vycm9yPi5SRVNFUlZFRF9JRF9NQVggKyAxOworCXByaXZhdGUgc3RhdGljIGZpbmFsIGludCBEUkFHX0VYSVRFRCA9IDxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICdBV1RFdmVudCciPkFXVEV2ZW50PC9lcnJvcj4uUkVTRVJWRURfSURfTUFYICsgMjsKKworCXByaXZhdGUgc3RhdGljIGxvbmcgV0hFRUxfTUFTSyA9IDA7CisJcHJpdmF0ZSBzdGF0aWMgaW50IE1PVVNFX1dIRUVMID0gMDsKKwlwcml2YXRlIHN0YXRpYyA8ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAnTWV0aG9kJyI+TWV0aG9kPC9lcnJvcj4gd2hlZWxyb3RhdGlvbiA9IG51bGw7CisJc3RhdGljIHsKKwkJdHJ5IHsKKwkJCVdIRUVMX01BU0sgPSA8ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAnQVdURXZlbnQnIj5BV1RFdmVudDwvZXJyb3I+LmNsYXNzLmdldEZpZWxkKCJNT1VTRV9XSEVFTF9FVkVOVF9NQVNLIikuZ2V0TG9uZyhudWxsKTsKKwkJCU1PVVNFX1dIRUVMID0gPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ01vdXNlRXZlbnQnIj5Nb3VzZUV2ZW50PC9lcnJvcj4uY2xhc3MuZ2V0RmllbGQoIk1PVVNFX1dIRUVMIikuZ2V0SW50KG51bGwpOworCQl9IGNhdGNoIChFeGNlcHRpb24gZXhjKSB7IC8qIG5vdCAxLjQgKi8gfQorCX0KKwl7CisJCWlmIChNT1VTRV9XSEVFTCAhPSAwKSB7IC8vIGRpc2FibGUgZ2xvYmFsIGZvY3VzLW1hbmFnZXIgZm9yIHRoaXMgY29tcG9uZW50IGluIDEuNAorCQkJdHJ5IHsKKwkJCQlnZXRDbGFzcygpLmdldE1ldGhvZCgic2V0Rm9jdXNUcmF2ZXJzYWxLZXlzRW5hYmxlZCIsIG5ldyBDbGFzc1tdIHsgQm9vbGVhbi5UWVBFIH0pLgorCQkJCQk8ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIG1ldGhvZCAnaW52b2tlKFRoaW5sZXQsIGphdmEubGFuZy5PYmplY3RbXSknIj5pbnZva2U8L2Vycm9yPih0aGlzLCBuZXcgT2JqZWN0W10geyBCb29sZWFuLkZBTFNFIH0pOworCQkJfSBjYXRjaCAoRXhjZXB0aW9uIGV4YykgeyAvKiBuZXZlciAqLyB9CisJCX0KKwkJZW5hYmxlRXZlbnRzKDxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICdBV1RFdmVudCciPkFXVEV2ZW50PC9lcnJvcj4uQ09NUE9ORU5UX0VWRU5UX01BU0sgfAorCQkJPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ0FXVEV2ZW50JyI+QVdURXZlbnQ8L2Vycm9yPi5GT0NVU19FVkVOVF9NQVNLIHwgPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ0FXVEV2ZW50JyI+QVdURXZlbnQ8L2Vycm9yPi5LRVlfRVZFTlRfTUFTSyB8CisJCQk8ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAnQVdURXZlbnQnIj5BV1RFdmVudDwvZXJyb3I+Lk1PVVNFX0VWRU5UX01BU0sgfCA8ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAnQVdURXZlbnQnIj5BV1RFdmVudDwvZXJyb3I+Lk1PVVNFX01PVElPTl9FVkVOVF9NQVNLIHwgV0hFRUxfTUFTSyk7CisJfQorCS8vPGphdmEKKworCS8qKgorCSAqCisJICovCisJcHVibGljIHZvaWQgc2V0Q29sb3JzKGludCBiYWNrZ3JvdW5kLCBpbnQgdGV4dCwgaW50IHRleHRiYWNrZ3JvdW5kLAorCQkJaW50IGJvcmRlciwgaW50IGRpc2FibGUsIGludCBob3ZlciwgaW50IHByZXNzLAorCQkJaW50IGZvY3VzLCBpbnQgc2VsZWN0KSB7CisJCWNfYmcgPSBuZXcgPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ0NvbG9yJyI+Q29sb3I8L2Vycm9yPihiYWNrZ3JvdW5kKTsgY190ZXh0ID0gbmV3IDxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICdDb2xvciciPkNvbG9yPC9lcnJvcj4odGV4dCk7CisJCWNfdGV4dGJnID0gbmV3IDxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICdDb2xvciciPkNvbG9yPC9lcnJvcj4odGV4dGJhY2tncm91bmQpOyBjX2JvcmRlciA9IG5ldyA8ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAnQ29sb3InIj5Db2xvcjwvZXJyb3I+KGJvcmRlcik7CisJCWNfZGlzYWJsZSA9IG5ldyA8ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAnQ29sb3InIj5Db2xvcjwvZXJyb3I+KGRpc2FibGUpOyBjX2hvdmVyID0gbmV3IDxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICdDb2xvciciPkNvbG9yPC9lcnJvcj4oaG92ZXIpOworCQljX3ByZXNzID0gbmV3IDxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICdDb2xvciciPkNvbG9yPC9lcnJvcj4ocHJlc3MpOyBjX2ZvY3VzID0gbmV3IDxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICdDb2xvciciPkNvbG9yPC9lcnJvcj4oZm9jdXMpOworCQljX3NlbGVjdCA9IG5ldyA8ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAnQ29sb3InIj5Db2xvcjwvZXJyb3I+KHNlbGVjdCk7CisJCS8vbWlkcCBjX2N0cmwgPSBjX2hvdmVyOworCQkvL2phdmE+CisJCWludFtdIHBpeCA9IG5ldyBpbnRbYmxvY2sgKiBibG9ja107CisJCWludCByMSA9IGNfYmcuPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBtZXRob2QgJ2dldFJlZCgpJyI+Z2V0UmVkPC9lcnJvcj4oKTsgaW50IHIyID0gY19wcmVzcy48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIG1ldGhvZCAnZ2V0UmVkKCknIj5nZXRSZWQ8L2Vycm9yPigpOworCQlpbnQgZzEgPSBjX2JnLjxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgbWV0aG9kICdnZXRHcmVlbigpJyI+Z2V0R3JlZW48L2Vycm9yPigpOyBpbnQgZzIgPSBjX3ByZXNzLjxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgbWV0aG9kICdnZXRHcmVlbigpJyI+Z2V0R3JlZW48L2Vycm9yPigpOworCQlpbnQgYjEgPSBjX2JnLjxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgbWV0aG9kICdnZXRCbHVlKCknIj5nZXRCbHVlPC9lcnJvcj4oKTsgaW50IGIyID0gY19wcmVzcy48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIG1ldGhvZCAnZ2V0Qmx1ZSgpJyI+Z2V0Qmx1ZTwvZXJyb3I+KCk7CisJCWZvciAoaW50IGkgPSAwOyBpIDwgYmxvY2s7IGkrKykgeworCQkJaW50IHIgPSByMSAtIChyMSAtIHIyKSAqIGkgLyBibG9jazsKKwkJCWludCBnID0gZzEgLSAoZzEgLSBnMikgKiBpIC8gYmxvY2s7CisJCQlpbnQgYiA9IGIxIC0gKGIxIC0gYjIpICogaSAvIGJsb2NrOworCQkJaW50IGNvbG9yID0gKDI1NSA8PCAyNCkgfCAociA8PCAxNikgfCAoZyA8PCA4KSB8IGI7CisJCQlmb3IgKGludCBqID0gMDsgaiA8IGJsb2NrOyBqKyspIHsKKwkJCQlwaXhbaSAqIGJsb2NrICsgal0gPSBjb2xvcjsKKwkJCQkvL3BpeFtqICogYmxvY2sgKyBpXSA9IGNvbG9yOworCQkJfQorCQl9CisJCWdyYWRpZW50ID0gY3JlYXRlSW1hZ2UobmV3IDxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICdNZW1vcnlJbWFnZVNvdXJjZSciPk1lbW9yeUltYWdlU291cmNlPC9lcnJvcj4oYmxvY2ssIGJsb2NrLCBwaXgsIDAsIGJsb2NrKSk7CisJCS8vPGphdmEKKwl9CisKKwkvKioKKwkgKgorCSAqLworCXB1YmxpYyB2b2lkIHNldEZvbnQoPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ0ZvbnQnIj5Gb250PC9lcnJvcj4gZm9udCkgeworCQlibG9jayA9IGdldEZvbnRNZXRyaWNzKGZvbnQpLjxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgbWV0aG9kICdnZXRIZWlnaHQoKSciPmdldEhlaWdodDwvZXJyb3I+KCk7IC8vamF2YQorCQlzdXBlci5zZXRGb250KGZvbnQpOyAvL2phdmEKKwkJLy9taWRwIGJsb2NrID0gZm9udC5nZXRIZWlnaHQoKTsKKwkJLy9taWRwIHRoaXMuZm9udCA9IGZvbnQ7CisJfQorCisJLyoqCisJICoKKwkgKi8KKwlwcml2YXRlIHZvaWQgZG9MYXlvdXQoT2JqZWN0IGNvbXBvbmVudCkgeworCQlTdHJpbmcgY2xhc3NuYW1lID0gZ2V0Q2xhc3MoY29tcG9uZW50KTsKKwkJaWYgKCJjb21ib2JveCIgPT0gY2xhc3NuYW1lKSB7CisJCQlpZiAoZ2V0Qm9vbGVhbihjb21wb25lbnQsICJlZGl0YWJsZSIsIHRydWUpKSB7CisJCQkJPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ0ltYWdlJyI+SW1hZ2U8L2Vycm9yPiBpY29uID0gZ2V0SWNvbihjb21wb25lbnQsICJpY29uIiwgbnVsbCk7CisJCQkJbGF5b3V0RmllbGQoY29tcG9uZW50LCBibG9jaywgZmFsc2UsCisJCQkJCShpY29uICE9IG51bGwpID8gaWNvbi48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIG1ldGhvZCAnZ2V0V2lkdGgoVGhpbmxldCknIj5nZXRXaWR0aDwvZXJyb3I+KHRoaXMpIDogMCk7CisJCQl9IC8vIHNldCBlZGl0YWJsZSAtPiB2YWxpZGF0ZSAob3ZlcndyaXRlIHRleHRmaWVsZCByZXBhaW50KQorCQkJZWxzZSB7CisJCQkJaW50IHNlbGVjdGVkID0gZ2V0SW50ZWdlcihjb21wb25lbnQsICJzZWxlY3RlZCIsIC0xKTsKKwkJCQlpZiAoc2VsZWN0ZWQgIT0gLTEpIHsKKwkJCQkJT2JqZWN0IGNob2ljZSA9IGdldEl0ZW0oY29tcG9uZW50LCAiY2hvaWNlIiwgc2VsZWN0ZWQpOworCQkJCQlzZXQoY29tcG9uZW50LCAidGV4dCIsIGdldChjaG9pY2UsICJ0ZXh0IikpOworCQkJCQlzZXQoY29tcG9uZW50LCAiaWNvbiIsIGdldChjaG9pY2UsICJpY29uIikpOworCQkJCX0KKwkJCX0KKwkJfQorCQllbHNlIGlmICgoInRleHRmaWVsZCIgPT0gY2xhc3NuYW1lKSB8fCAoInBhc3N3b3JkZmllbGQiID09IGNsYXNzbmFtZSkpIHsKKwkJCWxheW91dEZpZWxkKGNvbXBvbmVudCwgMCwgKCJwYXNzd29yZGZpZWxkIiA9PSBjbGFzc25hbWUpLCAwKTsKKwkJfQorCQllbHNlIGlmICgidGV4dGFyZWEiID09IGNsYXNzbmFtZSkgeworCQkJU3RyaW5nIHRleHQgPSBnZXRTdHJpbmcoY29tcG9uZW50LCAidGV4dCIsICIiKTsKKwkJCWludCBzdGFydCA9IGdldEludGVnZXIoY29tcG9uZW50LCAic3RhcnQiLCAwKTsKKwkJCWlmIChzdGFydCA+IHRleHQubGVuZ3RoKCkpIHsgc2V0SW50ZWdlcihjb21wb25lbnQsICJzdGFydCIsIHN0YXJ0ID0gdGV4dC5sZW5ndGgoKSwgMCk7IH0KKwkJCWludCBlbmQgPSBnZXRJbnRlZ2VyKGNvbXBvbmVudCwgImVuZCIsIDApOworCQkJaWYgKGVuZCA+IHRleHQubGVuZ3RoKCkpIHsgc2V0SW50ZWdlcihjb21wb25lbnQsICJlbmQiLCBlbmQgPSB0ZXh0Lmxlbmd0aCgpLCAwKTsgfQorCQkJaW50IGNhcmV0eCA9IDA7IGludCBjYXJldHkgPSAwOworCQkJPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ0ZvbnRNZXRyaWNzJyI+Rm9udE1ldHJpY3M8L2Vycm9yPiBmbSA9IGdldEZvbnRNZXRyaWNzKGdldEZvbnQoKSk7IC8vamF2YQorCQkJaW50IHdpZHRoID0gMCwgaGVpZ2h0ID0gMDsKKwkJCWZvciAoaW50IGkgPSAwLCBqID0gMDsgaiAhPSAtMTsgaSA9IGogKyAxKSB7CisJCQkJaiA9IHRleHQuaW5kZXhPZignXG4nLCBpKTsKKwkJCQlpZiAoaSAhPSBqKSB7IC8vICYmIGkgIT0gdGV4dC5sZW5ndGgoKQorCQkJCQlTdHJpbmcgbGluZSA9IChqICE9IC0xKSA/IHRleHQuc3Vic3RyaW5nKGksIGopIDogdGV4dC5zdWJzdHJpbmcoaSk7IC8vamF2YQorCQkJCQl3aWR0aCA9IE1hdGgubWF4PGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBtZXRob2QgJ21heChpbnQsID8pJyI+KHdpZHRoLCBmbS48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIG1ldGhvZCAnc3RyaW5nV2lkdGgoamF2YS5sYW5nLlN0cmluZyknIj5zdHJpbmdXaWR0aDwvZXJyb3I+KGxpbmUpKTwvZXJyb3I+OyAvL2phdmEKKwkJCQkJLy9taWRwIHdpZHRoID0gZm9udC5zdWJzdHJpbmdXaWR0aCh0ZXh0LCBpLCAoKGogIT0gLTEpID8gaiA6IHRleHQubGVuZ3RoKCkpIC0gaSk7CisJCQkJfQorCQkJCWlmICgoZW5kID49IGkpICYmICgoaiA9PSAtMSkgfHwgKGVuZCA8PSBqKSkpIHsKKwkJCQkJY2FyZXR4ID0gZm0uPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBtZXRob2QgJ3N0cmluZ1dpZHRoKGphdmEubGFuZy5TdHJpbmcpJyI+c3RyaW5nV2lkdGg8L2Vycm9yPih0ZXh0LnN1YnN0cmluZyhpLCBlbmQpKTsgLy9qYXZhCisJCQkJCS8vbWlkcCBjYXJldHggPSBmb250LnN1YnN0cmluZ1dpZHRoKHRleHQsIGksIGVuZCAtIGkpOworCQkJCQljYXJldHkgPSBoZWlnaHQ7CisJCQkJfQorCQkJCWhlaWdodCArPSBmbS48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIG1ldGhvZCAnZ2V0SGVpZ2h0KCknIj5nZXRIZWlnaHQ8L2Vycm9yPigpOworCQkJfQorCQkJbGF5b3V0U2Nyb2xsUGFuZShjb21wb25lbnQsIHdpZHRoICsgMiwKKwkJCQloZWlnaHQgLSBmbS48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIG1ldGhvZCAnZ2V0TGVhZGluZygpJyI+Z2V0TGVhZGluZzwvZXJyb3I+KCkgKyAyLCAwLCAwKTsKKwkJCXNjcm9sbFRvVmlzaWJsZShjb21wb25lbnQsIGNhcmV0eCwgY2FyZXR5LAorCQkJCTIsIGZtLjxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgbWV0aG9kICdnZXRBc2NlbnQoKSciPmdldEFzY2VudDwvZXJyb3I+KCkgKyBmbS48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIG1ldGhvZCAnZ2V0RGVzY2VudCgpJyI+Z2V0RGVzY2VudDwvZXJyb3I+KCkgKyAyKTsKKwkJfQorCQllbHNlIGlmICgidGFiYmVkcGFuZSIgPT0gY2xhc3NuYW1lKSB7CisJCQk8ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAnUmVjdGFuZ2xlJyI+UmVjdGFuZ2xlPC9lcnJvcj4gYm91bmRzID0gZ2V0UmVjdGFuZ2xlKGNvbXBvbmVudCwgImJvdW5kcyIpOworCQkJU3RyaW5nIHBsYWNlbWVudCA9IGdldFN0cmluZyhjb21wb25lbnQsICJwbGFjZW1lbnQiLCAidG9wIik7CisJCQlib29sZWFuIGhvcml6b250YWwgPSAoKHBsYWNlbWVudCA9PSAidG9wIikgfHwgKHBsYWNlbWVudCA9PSAiYm90dG9tIikpOworCQkJaW50IHRhYmQgPSAwOworCQkJaW50IHRhYnNpemUgPSAwOworCQkJZm9yIChPYmplY3QgY29tcCA9IGdldChjb21wb25lbnQsICJ0YWIiKTsKKwkJCQkJY29tcCAhPSBudWxsOyBjb21wID0gZ2V0KGNvbXAsICI6bmV4dCIpKSB7CisJCQkJRGltZW5zaW9uIGQgPSBnZXRTaXplKGNvbXAsIDgsIDQsICJsZWZ0Iik7CisJCQkJc2V0UmVjdGFuZ2xlKGNvbXAsICJib3VuZHMiLAorCQkJCQlob3Jpem9udGFsID8gdGFiZCA6IDAsIGhvcml6b250YWwgPyAwIDogdGFiZCwgZC53aWR0aCwgZC5oZWlnaHQpOworCQkJCXRhYmQgKz0gaG9yaXpvbnRhbCA/IGQud2lkdGggOiBkLmhlaWdodDsKKwkJCQl0YWJzaXplID0gTWF0aC5tYXgodGFic2l6ZSwgaG9yaXpvbnRhbCA/IGQuaGVpZ2h0IDogZC53aWR0aCk7CisJCQl9CisJCQlmb3IgKE9iamVjdCBjb21wID0gZ2V0KGNvbXBvbmVudCwgInRhYiIpOworCQkJCQljb21wICE9IG51bGw7IGNvbXAgPSBnZXQoY29tcCwgIjpuZXh0IikpIHsKKwkJCQk8ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAnUmVjdGFuZ2xlJyI+UmVjdGFuZ2xlPC9lcnJvcj4gciA9IGdldFJlY3RhbmdsZShjb21wLCAiYm91bmRzIik7CisJCQkJaWYgKGhvcml6b250YWwpIHsKKwkJCQkJaWYgKHBsYWNlbWVudCA9PSAiYm90dG9tIikgeyByLjxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICd5JyI+eTwvZXJyb3I+ID0gYm91bmRzLjxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICdoZWlnaHQnIj5oZWlnaHQ8L2Vycm9yPiAtIHRhYnNpemU7IH0KKwkJCQkJci48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAnaGVpZ2h0JyI+aGVpZ2h0PC9lcnJvcj4gPSB0YWJzaXplOworCQkJCX0gZWxzZSB7CisJCQkJCWlmIChwbGFjZW1lbnQgPT0gInJpZ2h0IikgeyByLjxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICd4JyI+eDwvZXJyb3I+ID0gYm91bmRzLjxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICd3aWR0aCciPndpZHRoPC9lcnJvcj4gLSB0YWJzaXplOyB9CisJCQkJCXIuPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ3dpZHRoJyI+d2lkdGg8L2Vycm9yPiA9IHRhYnNpemU7CisJCQkJfQorCQkJfQorCQkJaW50IGN4ID0gKHBsYWNlbWVudCA9PSAibGVmdCIpID8gKHRhYnNpemUgKyAxKSA6IDI7CisJCQlpbnQgY3kgPSAocGxhY2VtZW50ID09ICJ0b3AiKSA/ICh0YWJzaXplICsgMSkgOiAyOworCQkJaW50IGN3aWR0aCA9IGJvdW5kcy48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAnd2lkdGgnIj53aWR0aDwvZXJyb3I+IC0gKGhvcml6b250YWwgPyA0IDogKHRhYnNpemUgKyAzKSk7CisJCQlpbnQgY2hlaWdodCA9IGJvdW5kcy48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAnaGVpZ2h0JyI+aGVpZ2h0PC9lcnJvcj4gLSAoaG9yaXpvbnRhbCA/ICh0YWJzaXplICsgMykgOiA0KTsKKwkJCWZvciAoT2JqZWN0IGNvbXAgPSBnZXQoY29tcG9uZW50LCAiY29tcG9uZW50Iik7CisJCQkJCWNvbXAgIT0gbnVsbDsgY29tcCA9IGdldChjb21wLCAiOm5leHQiKSkgeworCQkJCWlmICghZ2V0Qm9vbGVhbihjb21wLCAidmlzaWJsZSIsIHRydWUpKSB7IGNvbnRpbnVlOyB9CisJCQkJc2V0UmVjdGFuZ2xlKGNvbXAsICJib3VuZHMiLCBjeCwgY3ksIGN3aWR0aCwgY2hlaWdodCk7CisJCQkJZG9MYXlvdXQoY29tcCk7CisJCQl9CisJCX0KKwkJZWxzZSBpZiAoKCJwYW5lbCIgPT0gY2xhc3NuYW1lKSB8fCAoY2xhc3NuYW1lID09ICJkaWFsb2ciKSkgeworCQkJaW50IGdhcCA9IGdldEludGVnZXIoY29tcG9uZW50LCAiZ2FwIiwgMCk7CisJCQlpbnRbXVtdIGdyaWQgPSBnZXRHcmlkKGNvbXBvbmVudCwgZ2FwKTsKKwkJCWlmIChncmlkICE9IG51bGwpIHsKKwkJCQlpbnQgdG9wID0gZ2V0SW50ZWdlcihjb21wb25lbnQsICJ0b3AiLCAwKTsKKwkJCQlpbnQgbGVmdCA9IGdldEludGVnZXIoY29tcG9uZW50LCAibGVmdCIsIDApOworCQkJCWludCBib3R0b20gPSBnZXRJbnRlZ2VyKGNvbXBvbmVudCwgImJvdHRvbSIsIDApOworCQkJCWludCByaWdodCA9IGdldEludGVnZXIoY29tcG9uZW50LCAicmlnaHQiLCAwKTsKKwkJCQlpZiAoY2xhc3NuYW1lID09ICJkaWFsb2ciKSB7CisJCQkJCWludCB0aXRsZWhlaWdodCA9IGdldEludGVnZXIoY29tcG9uZW50LCAidGl0bGVoZWlnaHQiLCAwKTsKKwkJCQkJdG9wICs9IDQgKyB0aXRsZWhlaWdodDsgbGVmdCArPSA0OyBib3R0b20gKz0gNDsgcmlnaHQgKz0gNDsKKwkJCQl9CisKKwkJCQk8ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAnUmVjdGFuZ2xlJyI+UmVjdGFuZ2xlPC9lcnJvcj4gYm91bmRzID0gZ2V0UmVjdGFuZ2xlKGNvbXBvbmVudCwgImJvdW5kcyIpOworCQkJCWZvciAoaW50IGkgPSAwOyBpIDwgMjsgaSsrKSB7CisJCQkJCWludCBkID0gKChpID09IDApID8gKGJvdW5kcy48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAnd2lkdGgnIj53aWR0aDwvZXJyb3I+IC0gbGVmdCAtIHJpZ2h0KSA6CisJCQkJCQkoYm91bmRzLjxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICdoZWlnaHQnIj5oZWlnaHQ8L2Vycm9yPiAtIHRvcCAtIGJvdHRvbSkpIC0KKwkJCQkJCWdldFN1bShncmlkW2ldLCAwLCBncmlkW2ldLmxlbmd0aCwgZ2FwLCBmYWxzZSk7CisJCQkJCWlmIChkICE9IDApIHsKKwkJCQkJCWludCB3ID0gZ2V0U3VtKGdyaWRbMiArIGldLCAwLCBncmlkWzIgKyBpXS5sZW5ndGgsIDAsIGZhbHNlKTsKKwkJCQkJCWlmICh3ID4gMCkgeworCQkJCQkJCWZvciAoaW50IGogPSAwOyBqIDwgZ3JpZFtpXS5sZW5ndGg7IGorKykgeworCQkJCQkJCQlpZiAoZ3JpZFsyICsgaV1bal0gIT0gMCkgeworCQkJCQkJCQkJZ3JpZFtpXVtqXSArPSBkICogZ3JpZFsyICsgaV1bal0gLyB3OworCQkJCQkJCQl9CisJCQkJCQkJfQorCQkJCQkJfQorCQkJCQl9CisJCQkJfQorCisJCQkJaW50IGkgPSAwOworCQkJCWZvciAoT2JqZWN0IGNvbXAgPSBnZXQoY29tcG9uZW50LCAiY29tcG9uZW50Iik7CisJCQkJCQljb21wICE9IG51bGw7IGNvbXAgPSBnZXQoY29tcCwgIjpuZXh0IikpIHsKKwkJCQkJaWYgKCFnZXRCb29sZWFuKGNvbXAsICJ2aXNpYmxlIiwgdHJ1ZSkpIHsgY29udGludWU7IH0KKwkJCQkJaW50IGl4ID0gbGVmdCArIGdldFN1bShncmlkWzBdLCAwLCBncmlkWzRdW2ldLCBnYXAsIHRydWUpOworCQkJCQlpbnQgaXkgPSB0b3AgKyBnZXRTdW0oZ3JpZFsxXSwgMCwgZ3JpZFs1XVtpXSwgZ2FwLCB0cnVlKTsKKwkJCQkJaW50IGl3aWR0aCA9IGdldFN1bShncmlkWzBdLCBncmlkWzRdW2ldLCBncmlkWzZdW2ldLCBnYXAsIGZhbHNlKTsKKwkJCQkJaW50IGloZWlnaHQgPSBnZXRTdW0oZ3JpZFsxXSwgZ3JpZFs1XVtpXSwgZ3JpZFs3XVtpXSwgZ2FwLCBmYWxzZSk7CisJCQkJCVN0cmluZyBoYWxpZ24gPSBnZXRTdHJpbmcoY29tcCwgImhhbGlnbiIsICJmaWxsIik7CisJCQkJCVN0cmluZyB2YWxpZ24gPSBnZXRTdHJpbmcoY29tcCwgInZhbGlnbiIsICJmaWxsIik7CisJCQkJCWlmICgoaGFsaWduICE9ICJmaWxsIikgfHwgKHZhbGlnbiAhPSAiZmlsbCIpKSB7CisJCQkJCQlEaW1lbnNpb24gZCA9IGdldFByZWZlcnJlZFNpemUoY29tcCk7CisJCQkJCQlpZiAoaGFsaWduICE9ICJmaWxsIikgeworCQkJCQkJCWludCBkdyA9IE1hdGgubWF4KDAsIGl3aWR0aCAtIGQud2lkdGgpOworCQkJCQkJCWlmIChoYWxpZ24gPT0gImNlbnRlciIpIHsgaXggKz0gZHcgLyAyOyB9CisJCQkJCQkJCWVsc2UgaWYgKGhhbGlnbiA9PSAicmlnaHQiKSB7IGl4ICs9IGR3OyB9CisJCQkJCQkJaXdpZHRoIC09IGR3OworCQkJCQkJfQorCQkJCQkJaWYgKHZhbGlnbiAhPSAiZmlsbCIpIHsKKwkJCQkJCQlpbnQgZGggPSBNYXRoLm1heCgwLCBpaGVpZ2h0IC0gZC5oZWlnaHQpOworCQkJCQkJCWlmICh2YWxpZ24gPT0gImNlbnRlciIpIHsgaXkgKz0gZGggLyAyOyB9CisJCQkJCQkJCWVsc2UgaWYgKHZhbGlnbiA9PSAiYm90dG9tIikgeyBpeSArPSBkaDsgfQorCQkJCQkJCWloZWlnaHQgLT0gZGg7CisJCQkJCQl9CisJCQkJCX0KKwkJCQkJc2V0UmVjdGFuZ2xlKGNvbXAsICJib3VuZHMiLCBpeCwgaXksIGl3aWR0aCwgaWhlaWdodCk7CisJCQkJCWRvTGF5b3V0KGNvbXApOworCQkJCQlpKys7CisJCQkJfQorCQkJfQorCQl9CisJCWVsc2UgaWYgKCJkZXNrdG9wIiA9PSBjbGFzc25hbWUpIHsKKwkJCTxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICdSZWN0YW5nbGUnIj5SZWN0YW5nbGU8L2Vycm9yPiBib3VuZHMgPSBnZXRSZWN0YW5nbGUoY29tcG9uZW50LCAiYm91bmRzIik7CisJCQlmb3IgKE9iamVjdCBjb21wID0gZ2V0KGNvbXBvbmVudCwgImNvbXBvbmVudCIpOworCQkJCQljb21wICE9IG51bGw7IGNvbXAgPSBnZXQoY29tcCwgIjpuZXh0IikpIHsKKwkJCQlTdHJpbmcgaWNsYXNzID0gZ2V0Q2xhc3MoY29tcCk7CisJCQkJaWYgKGljbGFzcyA9PSAiZGlhbG9nIikgeworCQkJCQlEaW1lbnNpb24gZCA9IGdldFByZWZlcnJlZFNpemUoY29tcCk7CisJCQkJCWlmIChnZXQoY29tcCwgImJvdW5kcyIpID09IG51bGwpCisJCQkJCXNldFJlY3RhbmdsZShjb21wLCAiYm91bmRzIiwKKwkJCQkJCU1hdGgubWF4PGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBtZXRob2QgJ21heChpbnQsID8pJyI+KDAsIChib3VuZHMuPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ3dpZHRoJyI+d2lkdGg8L2Vycm9yPiAtIGQud2lkdGgpIC8gMik8L2Vycm9yPiwKKwkJCQkJCU1hdGgubWF4PGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBtZXRob2QgJ21heChpbnQsID8pJyI+KDAsIChib3VuZHMuPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ2hlaWdodCciPmhlaWdodDwvZXJyb3I+IC0gZC5oZWlnaHQpIC8gMik8L2Vycm9yPiwKKwkJCQkJCU1hdGgubWluPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBtZXRob2QgJ21pbihpbnQsID8pJyI+KGQud2lkdGgsIGJvdW5kcy48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAnd2lkdGgnIj53aWR0aDwvZXJyb3I+KTwvZXJyb3I+LCBNYXRoLm1pbjxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgbWV0aG9kICdtaW4oaW50LCA/KSciPihkLmhlaWdodCwgYm91bmRzLjxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICdoZWlnaHQnIj5oZWlnaHQ8L2Vycm9yPik8L2Vycm9yPik7CisJCQkJfSBlbHNlIGlmICgoaWNsYXNzID09ICJjb21ib2xpc3QiKSB8fCAoaWNsYXNzID09ICJwb3B1cG1lbnUiKSkgeworCQkJCQkJaWNsYXNzID0gaWNsYXNzOyAvL2NvbXBpbGVyIGJ1ZworCQkJCX0gZWxzZSB7CisJCQkJCXNldFJlY3RhbmdsZShjb21wLCAiYm91bmRzIiwgMCwgMCwgYm91bmRzLjxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICd3aWR0aCciPndpZHRoPC9lcnJvcj4sIGJvdW5kcy48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAnaGVpZ2h0JyI+aGVpZ2h0PC9lcnJvcj4pOworCQkJCX0KKwkJCQlkb0xheW91dChjb21wKTsKKwkJCX0KKwkJfQorCQllbHNlIGlmICgic3BpbmJveCIgPT0gY2xhc3NuYW1lKSB7CisJCQlsYXlvdXRGaWVsZChjb21wb25lbnQsIGJsb2NrLCBmYWxzZSwgMCk7CisJCX0KKwkJZWxzZSBpZiAoInNwbGl0cGFuZSIgPT0gY2xhc3NuYW1lKSB7CisJCQk8ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAnUmVjdGFuZ2xlJyI+UmVjdGFuZ2xlPC9lcnJvcj4gYm91bmRzID0gZ2V0UmVjdGFuZ2xlKGNvbXBvbmVudCwgImJvdW5kcyIpOworCQkJYm9vbGVhbiBob3Jpem9udGFsID0gKCJ2ZXJ0aWNhbCIgIT0gZ2V0KGNvbXBvbmVudCwgIm9yaWVudGF0aW9uIikpOworCQkJaW50IGRpdmlkZXIgPSBnZXRJbnRlZ2VyKGNvbXBvbmVudCwgImRpdmlkZXIiLCAtMSk7CisJCQlpbnQgbWF4ZGl2ID0gKGhvcml6b250YWwgPyBib3VuZHMuPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ3dpZHRoJyI+d2lkdGg8L2Vycm9yPiA6IGJvdW5kcy48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAnaGVpZ2h0JyI+aGVpZ2h0PC9lcnJvcj4pIC0gNTsKKworCQkJT2JqZWN0IGNvbXAxID0gZ2V0KGNvbXBvbmVudCwgImNvbXBvbmVudCIpOworCQkJYm9vbGVhbiB2aXNpYmxlMSA9IChjb21wMSAhPSBudWxsKSAmJiBnZXRCb29sZWFuKGNvbXAxLCAidmlzaWJsZSIsIHRydWUpOworCQkJaWYgKGRpdmlkZXIgPT0gLTEpIHsKKwkJCQlpbnQgZDEgPSAwOworCQkJCWlmICh2aXNpYmxlMSkgeworCQkJCQlEaW1lbnNpb24gZCA9IGdldFByZWZlcnJlZFNpemUoY29tcDEpOworCQkJCQlkMSA9IGhvcml6b250YWwgPyBkLndpZHRoIDogZC5oZWlnaHQ7CisJCQkJfQorCQkJCWRpdmlkZXIgPSBNYXRoLm1pbihkMSwgbWF4ZGl2KTsKKwkJCQlzZXRJbnRlZ2VyKGNvbXBvbmVudCwgImRpdmlkZXIiLCBkaXZpZGVyLCAtMSk7CisJCQl9CisJCQllbHNlIGlmIChkaXZpZGVyID4gbWF4ZGl2KSB7CisJCQkJc2V0SW50ZWdlcihjb21wb25lbnQsICJkaXZpZGVyIiwgZGl2aWRlciA9IG1heGRpdiwgLTEpOworCQkJfQorCisJCQlpZiAodmlzaWJsZTEpIHsKKwkJCQlzZXRSZWN0YW5nbGUoY29tcDEsICJib3VuZHMiLCAwLCAwLCBob3Jpem9udGFsID8gZGl2aWRlciA6IGJvdW5kcy48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAnd2lkdGgnIj53aWR0aDwvZXJyb3I+LAorCQkJCQlob3Jpem9udGFsID8gYm91bmRzLjxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICdoZWlnaHQnIj5oZWlnaHQ8L2Vycm9yPiA6IGRpdmlkZXIpOworCQkJCWRvTGF5b3V0KGNvbXAxKTsKKwkJCX0KKwkJCU9iamVjdCBjb21wMiA9IChjb21wMSAhPSBudWxsKSA/IGdldChjb21wMSwgIjpuZXh0IikgOiBudWxsOworCQkJaWYgKChjb21wMiAhPSBudWxsKSAmJiBnZXRCb29sZWFuKGNvbXAyLCAidmlzaWJsZSIsIHRydWUpKSB7CisJCQkJc2V0UmVjdGFuZ2xlKGNvbXAyLCAiYm91bmRzIiwgaG9yaXpvbnRhbCA/IChkaXZpZGVyICsgNSkgOiAwLAorCQkJCQlob3Jpem9udGFsID8gMCA6IChkaXZpZGVyICsgNSksCisJCQkJCWhvcml6b250YWwgPyAoYm91bmRzLjxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICd3aWR0aCciPndpZHRoPC9lcnJvcj4gLSA1IC0gZGl2aWRlcikgOiBib3VuZHMuPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ3dpZHRoJyI+d2lkdGg8L2Vycm9yPiwKKwkJCQkJaG9yaXpvbnRhbCA/IGJvdW5kcy48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAnaGVpZ2h0JyI+aGVpZ2h0PC9lcnJvcj4gOiAoYm91bmRzLjxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICdoZWlnaHQnIj5oZWlnaHQ8L2Vycm9yPiAtIDUgLSBkaXZpZGVyKSk7CisJCQkJZG9MYXlvdXQoY29tcDIpOworCQkJfQorCQl9CisJCWVsc2UgaWYgKCgibGlzdCIgPT0gY2xhc3NuYW1lKSB8fAorCQkJCSgidGFibGUiID09IGNsYXNzbmFtZSkgfHwgKCJ0cmVlIiA9PSBjbGFzc25hbWUpKSB7CisJCQlpbnQgd2lkdGggPSAwOworCQkJaW50IGNvbHVtbmhlaWdodCA9IDA7CisJCQlpZiAoInRhYmxlIiA9PSBjbGFzc25hbWUpIHsKKwkJCQlmb3IgKE9iamVjdCBjb2x1bW4gPSBnZXQoY29tcG9uZW50LCAiY29sdW1uIik7CisJCQkJCQljb2x1bW4gIT0gbnVsbDsgY29sdW1uID0gZ2V0KGNvbHVtbiwgIjpuZXh0IikpIHsKKwkJCQkJd2lkdGggKz0gZ2V0SW50ZWdlcihjb2x1bW4sICJ3aWR0aCIsIDgwKTsKKwkJCQkJRGltZW5zaW9uIGQgPSBnZXRTaXplKGNvbHVtbiwgMiwgMiwgImxlZnQiKTsKKwkJCQkJY29sdW1uaGVpZ2h0ID0gTWF0aC5tYXgoY29sdW1uaGVpZ2h0LCBkLmhlaWdodCk7CisJCQkJfQorCQkJfQorCQkJU3RyaW5nIGl0ZW1uYW1lID0gKCJsaXN0IiA9PSBjbGFzc25hbWUpID8gIml0ZW0iIDoKKwkJCQkoKCJ0YWJsZSIgPT0gY2xhc3NuYW1lKSA/ICJyb3ciIDogIm5vZGUiKTsKKwkJCWludCB5ID0gMDsKKwkJCWludCBsZXZlbCA9IDA7CisJCQlmb3IgKE9iamVjdCBpdGVtID0gZ2V0KGNvbXBvbmVudCwgaXRlbW5hbWUpOyBpdGVtICE9IG51bGw7KSB7CisJCQkJaW50IHggPSAwOworCQkJCWludCBpd2lkdGggPSAwOyBpbnQgaWhlaWdodCA9IDA7CisJCQkJaWYgKCJ0YWJsZSIgPT0gY2xhc3NuYW1lKSB7CisJCQkJCWl3aWR0aCA9IHdpZHRoOworCQkJCQlmb3IgKE9iamVjdCBjZWxsID0gZ2V0KGl0ZW0sICJjZWxsIik7CisJCQkJCQkJY2VsbCAhPSBudWxsOyBjZWxsID0gZ2V0KGNlbGwsICI6bmV4dCIpKSB7CisJCQkJCQlEaW1lbnNpb24gZCA9IGdldFNpemUoY2VsbCwgMiwgMywgImxlZnQiKTsKKwkJCQkJCWloZWlnaHQgPSBNYXRoLm1heChpaGVpZ2h0LCBkLmhlaWdodCk7CisJCQkJCX0KKwkJCQl9CisJCQkJZWxzZSB7CisJCQkJCWlmICgidHJlZSIgPT0gY2xhc3NuYW1lKSB7CisJCQkJCQl4ID0gKGxldmVsICsgMSkgKiBibG9jazsKKwkJCQkJfQorCQkJCQlEaW1lbnNpb24gZCA9IGdldFNpemUoaXRlbSwgMiwgMywgImxlZnQiKTsKKwkJCQkJaXdpZHRoID0gZC53aWR0aDsgaWhlaWdodCA9IGQuaGVpZ2h0OworCQkJCQl3aWR0aCA9IE1hdGgubWF4KHdpZHRoLCB4ICsgZC53aWR0aCk7CisJCQkJfQorCQkJCXNldFJlY3RhbmdsZShpdGVtLCAiYm91bmRzIiwgeCwgeSwgaXdpZHRoLCBpaGVpZ2h0KTsKKwkJCQl5ICs9IGloZWlnaHQ7CisJCQkJaWYgKCJ0cmVlIiA9PSBjbGFzc25hbWUpIHsKKwkJCQkJT2JqZWN0IG5leHQgPSBnZXQoaXRlbSwgIm5vZGUiKTsKKwkJCQkJaWYgKChuZXh0ICE9IG51bGwpICYmIGdldEJvb2xlYW4oaXRlbSwgImV4cGFuZGVkIiwgdHJ1ZSkpIHsKKwkJCQkJCWxldmVsKys7CisJCQkJCX0gZWxzZSB7CisJCQkJCQl3aGlsZSAoKChuZXh0ID0gZ2V0KGl0ZW0sICI6bmV4dCIpKSA9PSBudWxsKSAmJiAobGV2ZWwgPiAwKSkgeworCQkJCQkJCWl0ZW0gPSBnZXRQYXJlbnQoaXRlbSk7CisJCQkJCQkJbGV2ZWwtLTsKKwkJCQkJCX0KKwkJCQkJfQorCQkJCQlpdGVtID0gbmV4dDsKKwkJCQl9IGVsc2UgeworCQkJCQlpdGVtID0gZ2V0KGl0ZW0sICI6bmV4dCIpOworCQkJCX0KKwkJCX0KKwkJCWxheW91dFNjcm9sbFBhbmUoY29tcG9uZW50LCB3aWR0aCwgeSAtIDEsIDAsIGNvbHVtbmhlaWdodCk7CisJCX0KKwkJZWxzZSBpZiAoIm1lbnViYXIiID09IGNsYXNzbmFtZSkgeworCQkJPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ1JlY3RhbmdsZSciPlJlY3RhbmdsZTwvZXJyb3I+IGJvdW5kcyA9IGdldFJlY3RhbmdsZShjb21wb25lbnQsICJib3VuZHMiKTsKKwkJCWludCB4ID0gMDsKKwkJCWZvciAoT2JqZWN0IG1lbnUgPSBnZXQoY29tcG9uZW50LCAibWVudSIpOworCQkJCQltZW51ICE9IG51bGw7IG1lbnUgPSBnZXQobWVudSwgIjpuZXh0IikpIHsKKwkJCQlEaW1lbnNpb24gZCA9IGdldFNpemUobWVudSwgOCwgNCwgImxlZnQiKTsKKwkJCQlzZXRSZWN0YW5nbGUobWVudSwgImJvdW5kcyIsIHgsIDAsIGQud2lkdGgsIGJvdW5kcy48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAnaGVpZ2h0JyI+aGVpZ2h0PC9lcnJvcj4pOworCQkJCXggKz0gZC53aWR0aDsKKwkJCX0KKwkJfQorCQllbHNlIGlmICgoImNvbWJvbGlzdCIgPT0gY2xhc3NuYW1lKSB8fCAoInBvcHVwbWVudSIgPT0gY2xhc3NuYW1lKSkgeworCQkJYm9vbGVhbiBjb21ibyA9ICgiY29tYm9saXN0IiA9PSBjbGFzc25hbWUpOworCQkJaW50IHB3ID0gMDsgaW50IHBoID0gMDsgaW50IHB4eSA9IGNvbWJvID8gMCA6IDE7CisJCQlmb3IgKE9iamVjdCBpdGVtID0gZ2V0KGdldChjb21wb25lbnQsIGNvbWJvID8gImNvbWJvYm94IiA6ICJtZW51IiksCisJCQkJCWNvbWJvID8gImNob2ljZSIgOiAibWVudSIpOyBpdGVtICE9IG51bGw7IGl0ZW0gPSBnZXQoaXRlbSwgIjpuZXh0IikpIHsKKwkJCQlTdHJpbmcgaXRlbWNsYXNzID0gY29tYm8gPyBudWxsIDogZ2V0Q2xhc3MoaXRlbSk7CisJCQkJRGltZW5zaW9uIGQgPSAoaXRlbWNsYXNzID09ICJzZXBhcmF0b3IiKSA/IG5ldyBEaW1lbnNpb24oMSwgMSkgOgorCQkJCQlnZXRTaXplKGl0ZW0sIDggLCA0LCAibGVmdCIpOworCQkJCWlmIChpdGVtY2xhc3MgPT0gImNoZWNrYm94bWVudWl0ZW0iKSB7CisJCQkJCWQud2lkdGggPSBkLndpZHRoICsgYmxvY2sgKyAzOworCQkJCQlkLmhlaWdodCA9IE1hdGgubWF4KGJsb2NrLCBkLmhlaWdodCk7CisJCQkJfQorCQkJCWVsc2UgaWYgKGl0ZW1jbGFzcyA9PSAibWVudSIpIHsKKwkJCQkJZC53aWR0aCArPSBibG9jazsKKwkJCQl9CisJCQkJc2V0UmVjdGFuZ2xlKGl0ZW0sICJib3VuZHMiLCBweHksIHB4eSArIHBoLCBkLndpZHRoLCBkLmhlaWdodCk7CisJCQkJcHcgPSBNYXRoLm1heChwdywgZC53aWR0aCk7CisJCQkJcGggKz0gZC5oZWlnaHQ7CisJCQl9CisJCQk8ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAnUmVjdGFuZ2xlJyI+UmVjdGFuZ2xlPC9lcnJvcj4gciA9IGdldFJlY3RhbmdsZShjb21wb25lbnQsICJib3VuZHMiKTsKKwkJCXIuPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ3dpZHRoJyI+d2lkdGg8L2Vycm9yPiA9IHB3ICsgMjsgci48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAnaGVpZ2h0JyI+aGVpZ2h0PC9lcnJvcj4gPSBwaCArIDI7CisJCQlpZiAoY29tYm8pIHsKKwkJCQk8ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAnUmVjdGFuZ2xlJyI+UmVjdGFuZ2xlPC9lcnJvcj4gZGIgPSBnZXRSZWN0YW5nbGUoY29udGVudCwgImJvdW5kcyIpOworCQkJCWlmIChyLjxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICd5JyI+eTwvZXJyb3I+ICsgcGggKyAyID4gZGIuPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ2hlaWdodCciPmhlaWdodDwvZXJyb3I+KSB7CisJCQkJCXIuPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ3dpZHRoJyI+d2lkdGg8L2Vycm9yPiA9IHB3ICsgMiArIGJsb2NrOworCQkJCQlyLjxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICdoZWlnaHQnIj5oZWlnaHQ8L2Vycm9yPiA9IGRiLjxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICdoZWlnaHQnIj5oZWlnaHQ8L2Vycm9yPiAtIHIuPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ3knIj55PC9lcnJvcj47CisJCQkJfQorCQkJCWVsc2UgeworCQkJCQlyLjxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICdoZWlnaHQnIj5oZWlnaHQ8L2Vycm9yPiA9IE1hdGgubWluPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBtZXRob2QgJ21pbig/LCA/KSciPihyLjxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICdoZWlnaHQnIj5oZWlnaHQ8L2Vycm9yPiwgZGIuPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ2hlaWdodCciPmhlaWdodDwvZXJyb3I+IC0gci48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAneSciPnk8L2Vycm9yPik8L2Vycm9yPjsKKwkJCQl9CisJCQkJci48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAnd2lkdGgnIj53aWR0aDwvZXJyb3I+ID0gTWF0aC5taW48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIG1ldGhvZCAnbWluKD8sID8pJyI+KHIuPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ3dpZHRoJyI+d2lkdGg8L2Vycm9yPiwgZGIuPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ3dpZHRoJyI+d2lkdGg8L2Vycm9yPiAtIHIuPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ3gnIj54PC9lcnJvcj4pPC9lcnJvcj47CisJCQkJbGF5b3V0U2Nyb2xsUGFuZShjb21wb25lbnQsIHB3LCBwaCwgMCwgMCk7Ly9+CisJCQl9CisJCX0KKwkJLy9qYXZhPgorCQllbHNlIGlmICgiYmVhbiIgPT0gY2xhc3NuYW1lKSB7CisJCQkJPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ1JlY3RhbmdsZSciPlJlY3RhbmdsZTwvZXJyb3I+IHIgPSBnZXRSZWN0YW5nbGUoY29tcG9uZW50LCAiYm91bmRzIik7CisJCQkJKChDb21wb25lbnQpIGdldChjb21wb25lbnQsICJiZWFuIikpLnNldEJvdW5kcyhyKTsKKwkJfQorCQkvLzxqYXZhCisJfQorCisJLyoqCisJICoKKwkgKi8KKwlwcml2YXRlIE9iamVjdCBwb3B1cChPYmplY3QgY29tcG9uZW50LCBPYmplY3QgY2xhc3NuYW1lKSB7CisJCU9iamVjdCBwb3B1cCA9IG51bGw7CisJCWludCBweCA9IDA7IGludCBweSA9IDA7CisJCWlmICgoIm1lbnViYXIiID09IGNsYXNzbmFtZSkgfHwgKCJwb3B1cG1lbnUiID09IGNsYXNzbmFtZSkpIHsKKwkJCU9iamVjdCBwb3B1cG1lbnUgPSBnZXQoY29tcG9uZW50LCAicG9wdXBtZW51Iik7CisJCQlPYmplY3Qgc2VsZWN0ZWQgPSBnZXQoY29tcG9uZW50LCAic2VsZWN0ZWQiKTsKKwkJCWlmIChwb3B1cG1lbnUgIT0gbnVsbCkgeworCQkJCWlmIChnZXQocG9wdXBtZW51LCAibWVudSIpID09IHNlbGVjdGVkKSB7IHJldHVybiBudWxsOyB9CisJCQkJc2V0KHBvcHVwbWVudSwgInNlbGVjdGVkIiwgbnVsbCk7CisJCQkJc2V0KHBvcHVwbWVudSwgIm1lbnUiLCBudWxsKTsKKwkJCQlyZW1vdmVJdGVtSW1wbChjb250ZW50LCAiY29tcG9uZW50IiwgcG9wdXBtZW51KTsKKwkJCQlyZXBhaW50KHBvcHVwbWVudSk7CisJCQkJc2V0KHBvcHVwbWVudSwgIjpwYXJlbnQiLCBudWxsKTsKKwkJCQlzZXQoY29tcG9uZW50LCAicG9wdXBtZW51IiwgbnVsbCk7CisJCQkJaWYgKG1vdXNlaW5zaWRlID09IHBvcHVwbWVudSkgeworCQkJCQlmaW5kQ29tcG9uZW50KGNvbnRlbnQsIG1vdXNleCwgbW91c2V5KTsKKwkJCQkJaGFuZGxlTW91c2VFdmVudChtb3VzZXgsIG1vdXNleCwgMSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgLy9qYXZhCisJCQkJCQk8ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAnTW91c2VFdmVudCciPk1vdXNlRXZlbnQ8L2Vycm9yPi5NT1VTRV9FTlRFUkVELCBtb3VzZWluc2lkZSwgaW5zaWRlcGFydCk7IC8vamF2YQorCQkJCX0KKwkJCQlwb3B1cChwb3B1cG1lbnUsICJwb3B1cG1lbnUiKTsKKwkJCX0KKwkJCWlmICgoc2VsZWN0ZWQgPT0gbnVsbCkgfHwgKGdldENsYXNzKHNlbGVjdGVkKSAhPSAibWVudSIpKSB7IHJldHVybiBudWxsOyB9CisJCQlwb3B1cCA9IGNyZWF0ZUltcGwoInBvcHVwbWVudSIpOworCQkJc2V0KHBvcHVwLCAibWVudSIsIHNlbGVjdGVkKTsKKwkJCXNldChjb21wb25lbnQsICJwb3B1cG1lbnUiLCBwb3B1cCk7CisKKwkJCTxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICdSZWN0YW5nbGUnIj5SZWN0YW5nbGU8L2Vycm9yPiBib3VuZHMgPSBnZXRSZWN0YW5nbGUoc2VsZWN0ZWQsICJib3VuZHMiKTsKKwkJCWlmICgibWVudWJhciIgPT0gY2xhc3NuYW1lKSB7CisJCQkJcHggPSBib3VuZHMuPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ3gnIj54PC9lcnJvcj47IHB5ID0gYm91bmRzLjxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICd5JyI+eTwvZXJyb3I+ICsgYm91bmRzLjxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICdoZWlnaHQnIj5oZWlnaHQ8L2Vycm9yPiAtIDE7CisJCQl9IGVsc2UgeworCQkJCXB4ID0gYm91bmRzLjxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICd4JyI+eDwvZXJyb3I+ICsgZ2V0UmVjdGFuZ2xlKGNvbXBvbmVudCwgImJvdW5kcyIpLjxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICd3aWR0aCciPndpZHRoPC9lcnJvcj4gLSA0OworCQkJCXB5ID0gYm91bmRzLjxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICd5JyI+eTwvZXJyb3I+OworCQkJfQorCQl9CisJCWVsc2UgeyAvL2lmICgiY29tYm9ib3giID09IGNsYXNzbmFtZSkgeworCQkJcG9wdXAgPSBjcmVhdGVJbXBsKCJjb21ib2xpc3QiKTsKKwkJCXNldChwb3B1cCwgImNvbWJvYm94IiwgY29tcG9uZW50KTsKKwkJCXNldChjb21wb25lbnQsICJjb21ib2xpc3QiLCBwb3B1cCk7CisKKwkJCXB5ID0gZ2V0UmVjdGFuZ2xlKGNvbXBvbmVudCwgImJvdW5kcyIpLjxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICdoZWlnaHQnIj5oZWlnaHQ8L2Vycm9yPiArIDE7CisJCX0KKwkJaWYgKCgibWVudWJhciIgPT0gY2xhc3NuYW1lKSB8fCAoImNvbWJvYm94IiA9PSBjbGFzc25hbWUpKSB7CisJCQlwb3B1cG93bmVyID0gY29tcG9uZW50OworCQl9CisJCWluc2VydEl0ZW0oY29udGVudCwgImNvbXBvbmVudCIsIHBvcHVwLCAwKTsKKwkJc2V0KHBvcHVwLCAiOnBhcmVudCIsIGNvbnRlbnQpOworCQl3aGlsZSAoY29tcG9uZW50ICE9IGNvbnRlbnQpIHsKKwkJCTxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICdSZWN0YW5nbGUnIj5SZWN0YW5nbGU8L2Vycm9yPiByID0gZ2V0UmVjdGFuZ2xlKGNvbXBvbmVudCwgImJvdW5kcyIpOworCQkJcHggKz0gci48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAneCciPng8L2Vycm9yPjsgcHkgKz0gci48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAneSciPnk8L2Vycm9yPjsKKwkJCWNvbXBvbmVudCA9IGdldFBhcmVudChjb21wb25lbnQpOworCQl9CisJCXNldFJlY3RhbmdsZShwb3B1cCwgImJvdW5kcyIsIHB4LCBweSwgMCwgMCk7CisJCWRvTGF5b3V0KHBvcHVwKTsgcmVwYWludChwb3B1cCk7CisJCXJldHVybiBwb3B1cDsKKwl9CisKKwkvKioKKwkgKgorCSAqLworCXByaXZhdGUgdm9pZCBjbG9zZXVwKE9iamVjdCBjb21ib2JveCwgT2JqZWN0IGNvbWJvbGlzdCwgT2JqZWN0IGl0ZW0pIHsKKwkJaWYgKChpdGVtICE9IG51bGwpICYmIGdldEJvb2xlYW4oaXRlbSwgImVuYWJsZWQiLCB0cnVlKSkgeworCQkJU3RyaW5nIHRleHQgPSBnZXRTdHJpbmcoaXRlbSwgInRleHQiLCAiIik7CisJCQlzZXQoY29tYm9ib3gsICJ0ZXh0IiwgdGV4dCk7IC8vIGlmIGVkaXRhYmxlCisJCQlzZXRJbnRlZ2VyKGNvbWJvYm94LCAic3RhcnQiLCB0ZXh0Lmxlbmd0aCgpLCAwKTsKKwkJCXNldEludGVnZXIoY29tYm9ib3gsICJlbmQiLCAwLCAwKTsKKwkJCXNldChjb21ib2JveCwgImljb24iLCBnZXQoaXRlbSwgImljb24iKSk7CisJCQl2YWxpZGF0ZShjb21ib2JveCk7CisJCQlzZXRJbnRlZ2VyKGNvbWJvYm94LCAic2VsZWN0ZWQiLCBnZXRJbmRleChjb21ib2JveCwgImNob2ljZSIsIGl0ZW0pLCAtMSk7CisJCQlpbnZva2UoY29tYm9ib3gsICJhY3Rpb24iKTsKKwkJfQorCQlzZXQoY29tYm9saXN0LCAiY29tYm9ib3giLCBudWxsKTsKKwkJc2V0KGNvbWJvYm94LCAiY29tYm9saXN0IiwgbnVsbCk7CisJCXJlbW92ZUl0ZW1JbXBsKGNvbnRlbnQsICJjb21wb25lbnQiLCBjb21ib2xpc3QpOworCQlyZXBhaW50KGNvbWJvbGlzdCk7CisJCXNldChjb21ib2xpc3QsICI6cGFyZW50IiwgbnVsbCk7CisJCXBvcHVwb3duZXIgPSBudWxsOworCQlpZiAobW91c2VpbnNpZGUgPT0gY29tYm9saXN0KSB7CisJCQlmaW5kQ29tcG9uZW50KGNvbnRlbnQsIG1vdXNleCwgbW91c2V5KTsKKwkJCWhhbmRsZU1vdXNlRXZlbnQobW91c2V4LCBtb3VzZXgsIDEsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIC8vamF2YQorCQkJCTxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICdNb3VzZUV2ZW50JyI+TW91c2VFdmVudDwvZXJyb3I+Lk1PVVNFX0VOVEVSRUQsIG1vdXNlaW5zaWRlLCBpbnNpZGVwYXJ0KTsgLy9qYXZhCisJCX0KKwl9CisKKwkvKioKKwkgKgorCSAqLworCXByaXZhdGUgdm9pZCBjbG9zZXVwKE9iamVjdCBtZW51YmFyKSB7CisJCXNldChtZW51YmFyLCAic2VsZWN0ZWQiLCBudWxsKTsKKwkJcG9wdXAobWVudWJhciwgIm1lbnViYXIiKTsKKwkJcmVwYWludChtZW51YmFyKTsgLy8gLCBzZWxlY3RlZAorCQlwb3B1cG93bmVyID0gbnVsbDsKKwl9CisKKwkvKioKKwkgKgorCSAqLworCXByaXZhdGUgdm9pZCBjbG9zZXVwKCkgeworCQlpZiAocG9wdXBvd25lciAhPSBudWxsKSB7CisJCQlTdHJpbmcgY2xhc3NuYW1lID0gZ2V0Q2xhc3MocG9wdXBvd25lcik7CisJCQlpZiAoIm1lbnViYXIiID09IGNsYXNzbmFtZSkgeworCQkJCWNsb3NldXAocG9wdXBvd25lcik7CisJCQl9CisJCQllbHNlIGlmICgiY29tYm9ib3giID09IGNsYXNzbmFtZSkgeworCQkJCWNsb3NldXAocG9wdXBvd25lciwgZ2V0KHBvcHVwb3duZXIsICJjb21ib2xpc3QiKSwgbnVsbCk7CisJCQl9CisJCX0KKwl9CisKKwkvKioKKwkgKgorCSAqLworCXByaXZhdGUgdm9pZCBzaG93VGlwKCkgeworCQlTdHJpbmcgdGV4dCA9IG51bGw7CisJCXRvb2x0aXBvd25lciA9IG51bGw7CisJCVN0cmluZyBjbGFzc25hbWUgPSBnZXRDbGFzcyhtb3VzZWluc2lkZSk7CisJCWlmICgoY2xhc3NuYW1lID09ICJ0YWJiZWRwYW5lIikgfHwgKGNsYXNzbmFtZSA9PSAibWVudWJhciIpIHx8IChjbGFzc25hbWUgPT0gInBvcHVwbWVudSIpKSB7CisJCQlpZiAoaW5zaWRlcGFydCAhPSBudWxsKSB7CisJCQkJdGV4dCA9IGdldFN0cmluZyhpbnNpZGVwYXJ0LCAidG9vbHRpcCIsIG51bGwpOworCQkJfQorCQl9CisJCWVsc2UgaWYgKGNsYXNzbmFtZSA9PSAiY29tYm9saXN0IikgeworCQkJaWYgKGluc2lkZXBhcnQgaW5zdGFuY2VvZiBPYmplY3RbXSkgeworCQkJCXRleHQgPSBnZXRTdHJpbmcoaW5zaWRlcGFydCwgInRvb2x0aXAiLCBudWxsKTsKKwkJCX0KKwkJfQorCQkvL2xpc3QgdGFibGUgdHJlZQorCQlpZiAodGV4dCA9PSBudWxsKSB7IHRleHQgPSBnZXRTdHJpbmcobW91c2VpbnNpZGUsICJ0b29sdGlwIiwgbnVsbCk7IH0KKwkJCWVsc2UgeyB0b29sdGlwb3duZXIgPSBpbnNpZGVwYXJ0OyB9CisJCWlmICh0ZXh0ICE9IG51bGwpIHsKKwkJCTxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICdGb250TWV0cmljcyciPkZvbnRNZXRyaWNzPC9lcnJvcj4gZm0gPSBnZXRGb250TWV0cmljcyhnZXRGb250KCkpOworCQkJaW50IHdpZHRoID0gZm0uPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBtZXRob2QgJ3N0cmluZ1dpZHRoKGphdmEubGFuZy5TdHJpbmcpJyI+c3RyaW5nV2lkdGg8L2Vycm9yPih0ZXh0KSArIDQ7CisJCQlpbnQgaGVpZ2h0ID0gZm0uPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBtZXRob2QgJ2dldEFzY2VudCgpJyI+Z2V0QXNjZW50PC9lcnJvcj4oKSArIGZtLjxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgbWV0aG9kICdnZXREZXNjZW50KCknIj5nZXREZXNjZW50PC9lcnJvcj4oKSArIDQ7CisJCQlpZiAodG9vbHRpcG93bmVyID09IG51bGwpIHsgdG9vbHRpcG93bmVyID0gbW91c2VpbnNpZGU7IH0KKwkJCXNldFJlY3RhbmdsZSh0b29sdGlwb3duZXIsICJ0b29sdGlwYm91bmRzIiwgbW91c2V4ICsgMTAsIG1vdXNleSArIDEwLCB3aWR0aCwgaGVpZ2h0KTsKKwkJCXJlcGFpbnQobW91c2V4ICsgMTAsIG1vdXNleSArIDEwLCB3aWR0aCwgaGVpZ2h0KTsKKwkJfQorCX0KKworCS8qKgorCSAqCisJICovCisJcHJpdmF0ZSB2b2lkIGhpZGVUaXAoKSB7CisJCWlmICh0b29sdGlwb3duZXIgIT0gbnVsbCkgeworCQkJPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ1JlY3RhbmdsZSciPlJlY3RhbmdsZTwvZXJyb3I+IGJvdW5kcyA9IGdldFJlY3RhbmdsZSh0b29sdGlwb3duZXIsICJ0b29sdGlwYm91bmRzIik7CisJCQlzZXQodG9vbHRpcG93bmVyLCAidG9vbHRpcGJvdW5kcyIsIG51bGwpOworCQkJdG9vbHRpcG93bmVyID0gbnVsbDsKKwkJCXJlcGFpbnQoYm91bmRzLjxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICd4JyI+eDwvZXJyb3I+LCBib3VuZHMuPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ3knIj55PC9lcnJvcj4sIGJvdW5kcy48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAnd2lkdGgnIj53aWR0aDwvZXJyb3I+LCBib3VuZHMuPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ2hlaWdodCciPmhlaWdodDwvZXJyb3I+KTsKKwkJfQorCX0KKworCS8qKgorCSAqCisJICovCisJcHJpdmF0ZSB2b2lkIGxheW91dEZpZWxkKE9iamVjdCBjb21wb25lbnQsIGludCBkdywgYm9vbGVhbiBoaWRkZW4sIGludCBsZWZ0KSB7CisJCWludCB3aWR0aCA9IGdldFJlY3RhbmdsZShjb21wb25lbnQsICJib3VuZHMiKS48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAnd2lkdGgnIj53aWR0aDwvZXJyb3I+IC0gbGVmdCAtZHc7CisJCVN0cmluZyB0ZXh0ID0gZ2V0U3RyaW5nKGNvbXBvbmVudCwgInRleHQiLCAiIik7CisJCWludCBzdGFydCA9IGdldEludGVnZXIoY29tcG9uZW50LCAic3RhcnQiLCAwKTsKKwkJaWYgKHN0YXJ0ID4gdGV4dC5sZW5ndGgoKSkgeyBzZXRJbnRlZ2VyKGNvbXBvbmVudCwgInN0YXJ0Iiwgc3RhcnQgPSB0ZXh0Lmxlbmd0aCgpLCAwKTsgfQorCQlpbnQgZW5kID0gZ2V0SW50ZWdlcihjb21wb25lbnQsICJlbmQiLCAwKTsKKwkJaWYgKGVuZCA+IHRleHQubGVuZ3RoKCkpIHsgc2V0SW50ZWdlcihjb21wb25lbnQsICJlbmQiLCBlbmQgPSB0ZXh0Lmxlbmd0aCgpLCAwKTsgfQorCQlpbnQgb2Zmc2V0ID0gZ2V0SW50ZWdlcihjb21wb25lbnQsICJvZmZzZXQiLCAwKTsKKwkJaW50IG9mZiA9IG9mZnNldDsKKwkJPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ0ZvbnRNZXRyaWNzJyI+Rm9udE1ldHJpY3M8L2Vycm9yPiBmbSA9IGdldEZvbnRNZXRyaWNzKGdldEZvbnQoKSk7CisJCWludCBjYXJldCA9IGhpZGRlbiA/IChmbS48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIG1ldGhvZCAnY2hhcldpZHRoKGNoYXIpJyI+Y2hhcldpZHRoPC9lcnJvcj4oJyonKSAqIGVuZCkgOgorCQkJZm0uPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBtZXRob2QgJ3N0cmluZ1dpZHRoKGphdmEubGFuZy5TdHJpbmcpJyI+c3RyaW5nV2lkdGg8L2Vycm9yPih0ZXh0LnN1YnN0cmluZygwLCBlbmQpKTsgLy9qYXZhCisJCQkvL21pZHAgZm9udC5zdWJzdHJpbmdXaWR0aCh0ZXh0LCAwLCBlbmQpOworCQlpZiAob2ZmID4gY2FyZXQpIHsKKwkJCW9mZiA9IGNhcmV0OworCQl9CisJCWVsc2UgaWYgKG9mZiA8IGNhcmV0IC0gd2lkdGggKyA0KSB7CisJCQlvZmYgPSBjYXJldCAtIHdpZHRoICsgNDsKKwkJfQorCQlvZmYgPSBNYXRoLm1heDxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgbWV0aG9kICdtYXgoaW50LCA/KSciPigwLCBNYXRoLm1pbjxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgbWV0aG9kICdtaW4oaW50LCA/KSciPihvZmYsIChoaWRkZW4gPyAoZm0uPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBtZXRob2QgJ2NoYXJXaWR0aChjaGFyKSciPmNoYXJXaWR0aDwvZXJyb3I+KCcqJykgKgorCQkJdGV4dC5sZW5ndGgoKSkgOiBmbS48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIG1ldGhvZCAnc3RyaW5nV2lkdGgoamF2YS5sYW5nLlN0cmluZyknIj5zdHJpbmdXaWR0aDwvZXJyb3I+KHRleHQpKSAtIHdpZHRoICsgNCk8L2Vycm9yPik8L2Vycm9yPjsKKwkJaWYgKG9mZiAhPSBvZmZzZXQpIHsKKwkJCXNldEludGVnZXIoY29tcG9uZW50LCAib2Zmc2V0Iiwgb2ZmLCAwKTsKKwkJfQorCX0KKworCS8qKgorCSAqCisJICovCisJcHJpdmF0ZSB2b2lkIGxheW91dFNjcm9sbFBhbmUoT2JqZWN0IGNvbXBvbmVudCwKKwkJCWludCBjb250ZW50d2lkdGgsIGludCBjb250ZW50aGVpZ2h0LCBpbnQgcm93d2lkdGgsIGludCBjb2x1bW5oZWlnaHQpIHsKKwkJPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ1JlY3RhbmdsZSciPlJlY3RhbmdsZTwvZXJyb3I+IGJvdW5kcyA9IGdldFJlY3RhbmdsZShjb21wb25lbnQsICJib3VuZHMiKTsKKwkJYm9vbGVhbiBobmVlZCA9IGZhbHNlOyBib29sZWFuIHZuZWVkID0gZmFsc2U7CisJCWlmIChjb250ZW50d2lkdGggPiBib3VuZHMuPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ3dpZHRoJyI+d2lkdGg8L2Vycm9yPiAtIHJvd3dpZHRoIC0gMikgeworCQkJaG5lZWQgPSB0cnVlOworCQkJdm5lZWQgPSAoY29udGVudGhlaWdodCA+IGJvdW5kcy48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAnaGVpZ2h0JyI+aGVpZ2h0PC9lcnJvcj4gLSBjb2x1bW5oZWlnaHQgLSAyIC0gYmxvY2spOworCQl9CisJCWlmICh2bmVlZCB8fCAoY29udGVudGhlaWdodCA+IGJvdW5kcy48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAnaGVpZ2h0JyI+aGVpZ2h0PC9lcnJvcj4gLSBjb2x1bW5oZWlnaHQgLSAyKSkgeworCQkJdm5lZWQgPSB0cnVlOworCQkJaG5lZWQgPSBobmVlZCB8fCAoY29udGVudHdpZHRoID4gYm91bmRzLjxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICd3aWR0aCciPndpZHRoPC9lcnJvcj4gLSByb3d3aWR0aCAtIDIgLSBibG9jayk7CisJCX0KKwkJaW50IHZpZXdwb3J0d2lkdGggPSBib3VuZHMuPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ3dpZHRoJyI+d2lkdGg8L2Vycm9yPiAtIHJvd3dpZHRoIC0gKHZuZWVkID8gYmxvY2sgOiAwKTsKKwkJaW50IHZpZXdwb3J0aGVpZ2h0ID0gYm91bmRzLjxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICdoZWlnaHQnIj5oZWlnaHQ8L2Vycm9yPiAtIGNvbHVtbmhlaWdodCAtIChobmVlZCA/IGJsb2NrIDogMCk7CisJCXNldFJlY3RhbmdsZShjb21wb25lbnQsICI6cG9ydCIsCisJCQlyb3d3aWR0aCwgY29sdW1uaGVpZ2h0LCB2aWV3cG9ydHdpZHRoLCB2aWV3cG9ydGhlaWdodCk7IC8vP3Jvd3dpZHRoCisKKwkJPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ1JlY3RhbmdsZSciPlJlY3RhbmdsZTwvZXJyb3I+IHZpZXcgPSBnZXRSZWN0YW5nbGUoY29tcG9uZW50LCAiOnZpZXciKTsKKwkJc2V0UmVjdGFuZ2xlKGNvbXBvbmVudCwgIjp2aWV3IiwKKwkJCSh2aWV3ICE9IG51bGwpID8gTWF0aC5tYXg8ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIG1ldGhvZCAnbWF4KGludCwgPyknIj4oMCwKKwkJCQlNYXRoLm1pbjxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgbWV0aG9kICdtaW4oPywgaW50KSciPih2aWV3LjxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICd4JyI+eDwvZXJyb3I+LCBjb250ZW50d2lkdGggLSB2aWV3cG9ydHdpZHRoICsgMik8L2Vycm9yPik8L2Vycm9yPiA6IDAsCisJCQkodmlldyAhPSBudWxsKSA/IE1hdGgubWF4PGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBtZXRob2QgJ21heChpbnQsID8pJyI+KDAsCisJCQkJTWF0aC5taW48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIG1ldGhvZCAnbWluKD8sIGludCknIj4odmlldy48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAneSciPnk8L2Vycm9yPiwgY29udGVudGhlaWdodCAtIHZpZXdwb3J0aGVpZ2h0ICsgMik8L2Vycm9yPik8L2Vycm9yPiA6IDAsCisJCQlNYXRoLm1heCh2aWV3cG9ydHdpZHRoIC0gMiwgY29udGVudHdpZHRoKSwKKwkJCU1hdGgubWF4KHZpZXdwb3J0aGVpZ2h0IC0gMiwgY29udGVudGhlaWdodCkpOworCX0KKworCS8qKgorCSAqCisJICovCisJcHJpdmF0ZSB2b2lkIHNjcm9sbFRvVmlzaWJsZShPYmplY3QgY29tcG9uZW50LAorCQkJaW50IHgsIGludCB5LCBpbnQgd2lkdGgsIGludCBoZWlnaHQpIHsKKwkJPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ1JlY3RhbmdsZSciPlJlY3RhbmdsZTwvZXJyb3I+IHZpZXcgPSBnZXRSZWN0YW5nbGUoY29tcG9uZW50LCAiOnZpZXciKTsKKwkJPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ1JlY3RhbmdsZSciPlJlY3RhbmdsZTwvZXJyb3I+IHBvcnQgPSBnZXRSZWN0YW5nbGUoY29tcG9uZW50LCAiOnBvcnQiKTsKKwkJaW50IHZ4ID0gTWF0aC5tYXg8ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIG1ldGhvZCAnbWF4KD8sID8pJyI+KHggKyB3aWR0aCAtIHBvcnQuPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ3dpZHRoJyI+d2lkdGg8L2Vycm9yPiArIDIsIE1hdGgubWluPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBtZXRob2QgJ21pbig/LCBpbnQpJyI+KHZpZXcuPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ3gnIj54PC9lcnJvcj4sIHgpPC9lcnJvcj4pPC9lcnJvcj47CisJCWludCB2eSA9IE1hdGgubWF4PGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBtZXRob2QgJ21heCg/LCA/KSciPih5ICsgaGVpZ2h0IC0gcG9ydC48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAnaGVpZ2h0JyI+aGVpZ2h0PC9lcnJvcj4gKyAyLCBNYXRoLm1pbjxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgbWV0aG9kICdtaW4oPywgaW50KSciPih2aWV3LjxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICd5JyI+eTwvZXJyb3I+LCB5KTwvZXJyb3I+KTwvZXJyb3I+OworCQlpZiAoKHZpZXcuPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ3gnIj54PC9lcnJvcj4gIT0gdngpIHx8ICh2aWV3LjxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICd5JyI+eTwvZXJyb3I+ICE9IHZ5KSkgeworCQkJcmVwYWludChjb21wb25lbnQpOyAvLyBob3Jpem9udGFsIHwgdmVydGljYWwKKwkJCXZpZXcuPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ3gnIj54PC9lcnJvcj4gPSB2eDsgdmlldy48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAneSciPnk8L2Vycm9yPiA9IHZ5OworCQl9CisJfQorCisJLyoqCisJICoKKwkgKi8KKwlwdWJsaWMgRGltZW5zaW9uIGdldFByZWZlcnJlZFNpemUoKSB7CisJCXJldHVybiBnZXRQcmVmZXJyZWRTaXplKGNvbnRlbnQpOworCX0KKworCS8qKgorCSAqCisJICovCisJcHJpdmF0ZSBEaW1lbnNpb24gZ2V0UHJlZmVycmVkU2l6ZShPYmplY3QgY29tcG9uZW50KSB7CisJCWludCB3aWR0aCA9IGdldEludGVnZXIoY29tcG9uZW50LCAid2lkdGgiLCAwKTsKKwkJaW50IGhlaWdodCA9IGdldEludGVnZXIoY29tcG9uZW50LCAiaGVpZ2h0IiwgMCk7CisJCWlmICgod2lkdGggPiAwKSAmJiAoaGVpZ2h0ID4gMCkpIHsKKwkJCXJldHVybiBuZXcgRGltZW5zaW9uKHdpZHRoLCBoZWlnaHQpOworCQl9CisJCVN0cmluZyBjbGFzc25hbWUgPSBnZXRDbGFzcyhjb21wb25lbnQpOworCQkvL1N5c3RlbS5vdXQucHJpbnRsbigiY2xhc3NuYW1lOiAiICsgY2xhc3NuYW1lKTsKKwkJaWYgKCJsYWJlbCIgPT0gY2xhc3NuYW1lKSB7CisJCQlyZXR1cm4gZ2V0U2l6ZShjb21wb25lbnQsIDAsIDAsICJsZWZ0Iik7CisJCX0KKwkJaWYgKCJidXR0b24iID09IGNsYXNzbmFtZSkgeworCQkJcmV0dXJuIGdldFNpemUoY29tcG9uZW50LCAxMiwgNiwgImNlbnRlciIpOworCQl9CisJCWlmICgiY2hlY2tib3giID09IGNsYXNzbmFtZSkgeworCQkJRGltZW5zaW9uIGQgPSBnZXRTaXplKGNvbXBvbmVudCwgMCwgMCwgImxlZnQiKTsKKwkJCWQud2lkdGggPSBkLndpZHRoICsgYmxvY2sgKyAzOworCQkJZC5oZWlnaHQgPSBNYXRoLm1heChibG9jaywgZC5oZWlnaHQpOworCQkJcmV0dXJuIGQ7CisJCX0KKwkJaWYgKCJjb21ib2JveCIgPT0gY2xhc3NuYW1lKSB7CisJCQlpZiAoZ2V0Qm9vbGVhbihjb21wb25lbnQsICJlZGl0YWJsZSIsIHRydWUpKSB7CisJCQkJRGltZW5zaW9uIHNpemUgPSBnZXRGaWVsZFNpemUoY29tcG9uZW50KTsKKwkJCQk8ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAnSW1hZ2UnIj5JbWFnZTwvZXJyb3I+IGljb24gPSBnZXRJY29uKGNvbXBvbmVudCwgImljb24iLCBudWxsKTsKKwkJCQlpZiAoaWNvbiAhPSBudWxsKSB7CisJCQkJCXNpemUud2lkdGggKz0gaWNvbi48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIG1ldGhvZCAnZ2V0V2lkdGgoVGhpbmxldCknIj5nZXRXaWR0aDwvZXJyb3I+KHRoaXMpOworCQkJCQlzaXplLmhlaWdodCA9IE1hdGgubWF4PGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBtZXRob2QgJ21heChpbnQsID8pJyI+KHNpemUuaGVpZ2h0LCBpY29uLjxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgbWV0aG9kICdnZXRIZWlnaHQoVGhpbmxldCknIj5nZXRIZWlnaHQ8L2Vycm9yPih0aGlzKSArIDIpPC9lcnJvcj47CisJCQkJfQorCQkJCXNpemUud2lkdGggKz0gYmxvY2s7CisJCQkJcmV0dXJuIHNpemU7CisJCQl9IGVsc2UgeworCQkJCWludCBzZWxlY3RlZCA9IGdldEludGVnZXIoY29tcG9uZW50LCAic2VsZWN0ZWQiLCAtMSk7CisJCQkJcmV0dXJuIGdldFNpemUoKHNlbGVjdGVkICE9IC0xKSA/CisJCQkJCWdldEl0ZW1JbXBsKGNvbXBvbmVudCwgImNob2ljZSIsIHNlbGVjdGVkKSA6CisJCQkJCWdldChjb21wb25lbnQsICJjaG9pY2UiKSwgNCArIGJsb2NrLCA0LCAibGVmdCIpOworCQkJfQorCQl9CisJCWlmICgoInRleHRmaWVsZCIgPT0gY2xhc3NuYW1lKSB8fCAoInBhc3N3b3JkZmllbGQiID09IGNsYXNzbmFtZSkpIHsKKwkJCXJldHVybiBnZXRGaWVsZFNpemUoY29tcG9uZW50KTsKKwkJfQorCQlpZiAoInRleHRhcmVhIiA9PSBjbGFzc25hbWUpIHsKKwkJCWludCBjb2x1bW5zID0gZ2V0SW50ZWdlcihjb21wb25lbnQsICJjb2x1bW5zIiwgMCk7CisJCQlpbnQgcm93cyA9IGdldEludGVnZXIoY29tcG9uZW50LCAicm93cyIsIDApOyAvLyAnZScgLT4gJ20nID8KKwkJCTxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICdGb250TWV0cmljcyciPkZvbnRNZXRyaWNzPC9lcnJvcj4gZm0gPSBnZXRGb250TWV0cmljcyhnZXRGb250KCkpOyAvL2phdmEKKwkJCXJldHVybiBuZXcgRGltZW5zaW9uKAorCQkJCSgoY29sdW1ucyA+IDApID8gKGNvbHVtbnMgKiBmbS48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIG1ldGhvZCAnY2hhcldpZHRoKGNoYXIpJyI+Y2hhcldpZHRoPC9lcnJvcj4oJ2UnKSArIDIpIDogNzYpICsgMiArIGJsb2NrLAorCQkJCSgocm93cyA+IDApID8gKHJvd3MgKiBmbS48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIG1ldGhvZCAnZ2V0SGVpZ2h0KCknIj5nZXRIZWlnaHQ8L2Vycm9yPigpIC0gZm0uPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBtZXRob2QgJ2dldExlYWRpbmcoKSciPmdldExlYWRpbmc8L2Vycm9yPigpICsgMikgOiA3NikgKyAyICsgYmxvY2spOworCQl9CisJCWlmICgidGFiYmVkcGFuZSIgPT0gY2xhc3NuYW1lKSB7CisJCQlTdHJpbmcgcGxhY2VtZW50ID0gZ2V0U3RyaW5nKGNvbXBvbmVudCwgInBsYWNlbWVudCIsICJ0b3AiKTsKKwkJCWJvb2xlYW4gaG9yaXpvbnRhbCA9ICgocGxhY2VtZW50ID09ICJ0b3AiKSB8fCAocGxhY2VtZW50ID09ICJib3R0b20iKSk7CisJCQlpbnQgdGFic2l6ZSA9IDA7CisJCQlpbnQgY29udGVudHdpZHRoID0gMDsgaW50IGNvbnRlbnRoZWlnaHQgPSAwOworCQkJZm9yIChPYmplY3QgY29tcCA9IGdldChjb21wb25lbnQsICJ0YWIiKTsKKwkJCQkJY29tcCAhPSBudWxsOyBjb21wID0gZ2V0KGNvbXAsICI6bmV4dCIpKSB7CisJCQkJRGltZW5zaW9uIGQgPSBnZXRTaXplKGNvbXAsIDgsIDQsICJsZWZ0Iik7CisJCQkJdGFic2l6ZSA9IE1hdGgubWF4KHRhYnNpemUsIGhvcml6b250YWwgPyBkLmhlaWdodCA6IGQud2lkdGgpOworCQkJfQorCQkJZm9yIChPYmplY3QgY29tcCA9IGdldChjb21wb25lbnQsICJjb21wb25lbnQiKTsKKwkJCQkJY29tcCAhPSBudWxsOyBjb21wID0gZ2V0KGNvbXAsICI6bmV4dCIpKSB7CisJCQkJaWYgKCFnZXRCb29sZWFuKGNvbXAsICJ2aXNpYmxlIiwgdHJ1ZSkpIHsgY29udGludWU7IH0KKwkJCQlEaW1lbnNpb24gZCA9IGdldFByZWZlcnJlZFNpemUoY29tcCk7CisJCQkJY29udGVudHdpZHRoID0gTWF0aC5tYXgoY29udGVudHdpZHRoLCBkLndpZHRoKTsKKwkJCQljb250ZW50aGVpZ2h0ID0gTWF0aC5tYXgoY29udGVudGhlaWdodCwgZC5oZWlnaHQpOworCQkJfQorCQkJcmV0dXJuIG5ldyBEaW1lbnNpb24oY29udGVudHdpZHRoICsgKGhvcml6b250YWwgPyA0IDogKHRhYnNpemUgKyAzKSksCisJCQkJY29udGVudGhlaWdodCArIChob3Jpem9udGFsID8gKHRhYnNpemUgKyAzKSA6IDQpKTsKKwkJfQorCQlpZiAoKCJwYW5lbCIgPT0gY2xhc3NuYW1lKSB8fCAoY2xhc3NuYW1lID09ICJkaWFsb2ciKSkgeworCQkJRGltZW5zaW9uIHNpemUgPSBuZXcgRGltZW5zaW9uKAorCQkJCWdldEludGVnZXIoY29tcG9uZW50LCAibGVmdCIsIDApICsgZ2V0SW50ZWdlcihjb21wb25lbnQsICJyaWdodCIsIDApLAorCQkJCWdldEludGVnZXIoY29tcG9uZW50LCAidG9wIiwgMCkgKyBnZXRJbnRlZ2VyKGNvbXBvbmVudCwgImJvdHRvbSIsIDApKTsKKwkJCWlmIChjbGFzc25hbWUgPT0gImRpYWxvZyIpIHsKKwkJCQlpbnQgdGl0bGVoZWlnaHQgPSBnZXRTaXplKGNvbXBvbmVudCwgMCwgMCwgImxlZnQiKS5oZWlnaHQ7CisJCQkJc2V0SW50ZWdlcihjb21wb25lbnQsICJ0aXRsZWhlaWdodCIsIHRpdGxlaGVpZ2h0LCAwKTsKKwkJCQlzaXplLndpZHRoICs9IDg7IHNpemUuaGVpZ2h0ICs9IDggKyB0aXRsZWhlaWdodDsKKwkJCX0KKwkJCWludCBnYXAgPSBnZXRJbnRlZ2VyKGNvbXBvbmVudCwgImdhcCIsIDApOworCQkJaW50W11bXSBncmlkID0gZ2V0R3JpZChjb21wb25lbnQsIGdhcCk7CisJCQlpZiAoZ3JpZCAhPSBudWxsKSB7CisJCQkJc2l6ZS53aWR0aCArPSBnZXRTdW0oZ3JpZFswXSwgMCwgZ3JpZFswXS5sZW5ndGgsIGdhcCwgZmFsc2UpOworCQkJCXNpemUuaGVpZ2h0ICs9IGdldFN1bShncmlkWzFdLCAwLCBncmlkWzFdLmxlbmd0aCwgZ2FwLCBmYWxzZSk7CisJCQl9CisJCQlyZXR1cm4gc2l6ZTsKKwkJfQorCQllbHNlIGlmICgiZGVza3RvcCIgPT0gY2xhc3NuYW1lKSB7CisJCQlEaW1lbnNpb24gc2l6ZSA9IG5ldyBEaW1lbnNpb24oKTsKKwkJCWZvciAoT2JqZWN0IGNvbXAgPSBnZXQoY29tcG9uZW50LCAiY29tcG9uZW50Iik7CisJCQkJCWNvbXAgIT0gbnVsbDsgY29tcCA9IGdldChjb21wLCAiOm5leHQiKSkgeworCQkJCVN0cmluZyBpY2xhc3MgPSBnZXRDbGFzcyhjb21wKTsKKwkJCQlpZiAoKGljbGFzcyAhPSAiZGlhbG9nIikgJiYgKGljbGFzcyAhPSAicG9wdXBtZW51IikgJiYKKwkJCQkJCShpY2xhc3MgIT0gImNvbWJvbGlzdCIpKSB7CisJCQkJCURpbWVuc2lvbiBkID0gZ2V0UHJlZmVycmVkU2l6ZShjb21wKTsKKwkJCQkJc2l6ZS53aWR0aCA9IE1hdGgubWF4KGQud2lkdGgsIHNpemUud2lkdGgpOworCQkJCQlzaXplLmhlaWdodCA9IE1hdGgubWF4KGQuaGVpZ2h0LCBzaXplLmhlaWdodCk7CisJCQkJfQorCQkJfQorCQkJcmV0dXJuIHNpemU7CisJCX0KKwkJaWYgKCJzcGluYm94IiA9PSBjbGFzc25hbWUpIHsKKwkJCURpbWVuc2lvbiBzaXplID0gZ2V0RmllbGRTaXplKGNvbXBvbmVudCk7CisJCQlzaXplLndpZHRoICs9IGJsb2NrOworCQkJcmV0dXJuIHNpemU7CisJCX0KKwkJaWYgKCJwcm9ncmVzc2JhciIgPT0gY2xhc3NuYW1lKSB7CisJCQlib29sZWFuIGhvcml6b250YWwgPSAoInZlcnRpY2FsIiAhPSBnZXQoY29tcG9uZW50LCAib3JpZW50YXRpb24iKSk7CisJCQlyZXR1cm4gbmV3IERpbWVuc2lvbihob3Jpem9udGFsID8gNzYgOiA2LCBob3Jpem9udGFsID8gNiA6IDc2KTsKKwkJfQorCQlpZiAoInNsaWRlciIgPT0gY2xhc3NuYW1lKSB7CisJCQlib29sZWFuIGhvcml6b250YWwgPSAoInZlcnRpY2FsIiAhPSBnZXQoY29tcG9uZW50LCAib3JpZW50YXRpb24iKSk7CisJCQlyZXR1cm4gbmV3IERpbWVuc2lvbihob3Jpem9udGFsID8gNzYgOiAxMCwgaG9yaXpvbnRhbCA/IDEwIDogNzYpOworCQl9CisJCWlmICgic3BsaXRwYW5lIiA9PSBjbGFzc25hbWUpIHsKKwkJCWJvb2xlYW4gaG9yaXpvbnRhbCA9ICgidmVydGljYWwiICE9IGdldChjb21wb25lbnQsICJvcmllbnRhdGlvbiIpKTsKKwkJCU9iamVjdCBjb21wMSA9IGdldChjb21wb25lbnQsICJjb21wb25lbnQiKTsKKwkJCURpbWVuc2lvbiBzaXplID0gKChjb21wMSA9PSBudWxsKSB8fCAhZ2V0Qm9vbGVhbihjb21wMSwgInZpc2libGUiLCB0cnVlKSkgPworCQkJCW5ldyBEaW1lbnNpb24oKSA6IGdldFByZWZlcnJlZFNpemUoY29tcDEpOworCQkJT2JqZWN0IGNvbXAyID0gZ2V0KGNvbXAxLCAiOm5leHQiKTsKKwkJCWlmICgoY29tcDIgIT0gbnVsbCkgJiYgZ2V0Qm9vbGVhbihjb21wMiwgInZpc2libGUiLCB0cnVlKSkgeworCQkJCURpbWVuc2lvbiBkID0gZ2V0UHJlZmVycmVkU2l6ZShjb21wMik7CisJCQkJc2l6ZS53aWR0aCA9IGhvcml6b250YWwgPyAoc2l6ZS53aWR0aCArIGQud2lkdGgpIDoKKwkJCQkJTWF0aC5tYXgoc2l6ZS53aWR0aCwgZC53aWR0aCk7CisJCQkJc2l6ZS5oZWlnaHQgPSBob3Jpem9udGFsID8gTWF0aC5tYXgoc2l6ZS5oZWlnaHQsIGQuaGVpZ2h0KSA6CisJCQkJCShzaXplLmhlaWdodCArIGQuaGVpZ2h0KTsKKwkJCX0KKwkJCWlmIChob3Jpem9udGFsKSB7IHNpemUud2lkdGggKz0gNTsgfSBlbHNlIHsgc2l6ZS5oZWlnaHQgKz0gNTsgfQorCQkJcmV0dXJuIHNpemU7CisJCX0KKwkJaWYgKCgibGlzdCIgPT0gY2xhc3NuYW1lKSB8fAorCQkJCSgidGFibGUiID09IGNsYXNzbmFtZSkgfHwgKCJ0cmVlIiA9PSBjbGFzc25hbWUpKSB7CisJCQlyZXR1cm4gbmV3IERpbWVuc2lvbig3NiArIDIgKyBibG9jaywgNzYgKyAyICsgYmxvY2spOworCQl9CisJCWlmICgic2VwYXJhdG9yIiA9PSBjbGFzc25hbWUpIHsKKwkJCXJldHVybiBuZXcgRGltZW5zaW9uKDEsIDEpOworCQl9CisJCWlmICgibWVudWJhciIgPT0gY2xhc3NuYW1lKSB7CisJCQlEaW1lbnNpb24gc2l6ZSA9IG5ldyBEaW1lbnNpb24oMCwgMCk7CisJCQlmb3IgKE9iamVjdCBtZW51ID0gZ2V0KGNvbXBvbmVudCwgIm1lbnUiKTsKKwkJCQkJbWVudSAhPSBudWxsOyBtZW51ID0gZ2V0KG1lbnUsICI6bmV4dCIpKSB7CisJCQkJRGltZW5zaW9uIGQgPSBnZXRTaXplKG1lbnUsIDgsIDQsICJsZWZ0Iik7CisJCQkJc2l6ZS53aWR0aCArPSBkLndpZHRoOworCQkJCXNpemUuaGVpZ2h0ID0gTWF0aC5tYXgoc2l6ZS5oZWlnaHQsIGQuaGVpZ2h0KTsKKwkJCX0KKwkJCXJldHVybiBzaXplOworCQl9CisJCS8vamF2YT4KKwkJaWYgKCJiZWFuIiA9PSBjbGFzc25hbWUpIHsKKwkJCQlyZXR1cm4gKChDb21wb25lbnQpIGdldChjb21wb25lbnQsICJiZWFuIikpLmdldFByZWZlcnJlZFNpemUoKTsKKwkJfQorCQkvLzxqYXZhCisJCXRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oKFN0cmluZykgY2xhc3NuYW1lKTsKKwl9CisKKwkvKioKKwkgKgorCSAqLworCXByaXZhdGUgaW50W11bXSBnZXRHcmlkKE9iamVjdCBjb21wb25lbnQsIGludCBnYXApIHsKKwkJaW50IGNvdW50ID0gMDsKKwkJZm9yIChPYmplY3QgY29tcCA9IGdldChjb21wb25lbnQsICJjb21wb25lbnQiKTsgY29tcCAhPSBudWxsOworCQkJCWNvbXAgPSBnZXQoY29tcCwgIjpuZXh0IikpIHsKKwkJCWlmIChnZXRCb29sZWFuKGNvbXAsICJ2aXNpYmxlIiwgdHJ1ZSkpIHsgY291bnQrKzsgfQorCQl9CisJCWlmIChjb3VudCA9PSAwKSB7IHJldHVybiBudWxsOyB9CisJCWludCBjb2x1bW5zID0gZ2V0SW50ZWdlcihjb21wb25lbnQsICJjb2x1bW5zIiwgMCk7CisJCWludCBpY29scyA9IChjb2x1bW5zICE9IDApID8gY29sdW1ucyA6IGNvdW50OworCQlpbnQgaXJvd3MgPSAoY29sdW1ucyAhPSAwKSA/ICgoY291bnQgKyBjb2x1bW5zIC0gMSkgLyBjb2x1bW5zKSA6IDE7CisJCWludFtdW10gZ3JpZCA9IHsKKwkJCW5ldyBpbnRbaWNvbHNdLCBuZXcgaW50W2lyb3dzXSwgLy8gY29sdW1ud2lkdGhzLCByb3doZWlnaHRzCisJCQluZXcgaW50W2ljb2xzXSwgbmV3IGludFtpcm93c10sIC8vIGNvbHVtbndlaWdodHMsIHJvd3dlaWdodHMKKwkJCW5ldyBpbnRbY291bnRdLCBuZXcgaW50W2NvdW50XSwgLy8gZ3JpZHgsIGdyaWR5CisJCQluZXcgaW50W2NvdW50XSwgbmV3IGludFtjb3VudF0gfTsgLy8gZ3JpZHdpZHRoLCBncmlkaGVpZ2h0CisJCWludFtdIGNvbHVtbmhlaWdodCA9IG5ldyBpbnRbaWNvbHNdOworCQlpbnRbXVtdIGNhY2hlID0gbnVsbDsgLy8gcHJlZmVycmVkd2lkdGgsIGhlaWdodCwgY29sdW1ud2VpZ2h0LCByb3d3ZWlnaHQKKworCQlpbnQgaSA9IDA7IGludCB4ID0gMDsgaW50IHkgPSAwOworCQlpbnQgbmV4dHNpemUgPSAwOworCQlmb3IgKE9iamVjdCBjb21wID0gZ2V0KGNvbXBvbmVudCwgImNvbXBvbmVudCIpOworCQkJCWNvbXAgIT0gbnVsbDsgY29tcCA9IGdldChjb21wLCAiOm5leHQiKSkgeworCQkJaWYgKCFnZXRCb29sZWFuKGNvbXAsICJ2aXNpYmxlIiwgdHJ1ZSkpIHsgY29udGludWU7IH0KKwkJCWludCBjb2xzcGFuID0gKChjb2x1bW5zICE9IDApICYmIChjb2x1bW5zIDwgY291bnQpKSA/CisJCQkJTWF0aC5taW4oZ2V0SW50ZWdlcihjb21wLCAiY29sc3BhbiIsIDEpLCBjb2x1bW5zKSA6IDE7CisJCQlpbnQgcm93c3BhbiA9IChjb2x1bW5zICE9IDEpID8gZ2V0SW50ZWdlcihjb21wLCAicm93c3BhbiIsIDEpIDogMTsKKworCQkJZm9yIChpbnQgaiA9IDA7IGogPCBjb2xzcGFuOyBqKyspIHsKKwkJCQlpZiAoKGNvbHVtbnMgIT0gMCkgJiYgKHggKyBjb2xzcGFuID4gY29sdW1ucykpIHsKKwkJCQkJeCA9IDA7IHkrKzsgaiA9IC0xOworCQkJCX0KKwkJCQllbHNlIGlmIChjb2x1bW5oZWlnaHRbeCArIGpdID4geSkgeworCQkJCQl4ICs9IChqICsgMSk7IGogPSAtMTsKKwkJCQl9CisJCQl9CisJCQlpZiAoeSArIHJvd3NwYW4gPiBncmlkWzFdLmxlbmd0aCkgeworCQkJCWludFtdIHJvd2hlaWdodHMgPSBuZXcgaW50W3kgKyByb3dzcGFuXTsKKwkJCQlTeXN0ZW0uYXJyYXljb3B5KGdyaWRbMV0sIDAsIHJvd2hlaWdodHMsIDAsIGdyaWRbMV0ubGVuZ3RoKTsKKwkJCQlncmlkWzFdID0gcm93aGVpZ2h0czsKKwkJCQlpbnRbXSByb3d3ZWlnaHRzID0gbmV3IGludFt5ICsgcm93c3Bhbl07CisJCQkJU3lzdGVtLmFycmF5Y29weShncmlkWzNdLCAwLCByb3d3ZWlnaHRzLCAwLCBncmlkWzNdLmxlbmd0aCk7CisJCQkJZ3JpZFszXSA9IHJvd3dlaWdodHM7CisJCQl9CisJCQlmb3IgKGludCBqID0gMDsgaiA8IGNvbHNwYW47IGorKykgeworCQkJCWNvbHVtbmhlaWdodFt4ICsgal0gPSB5ICsgcm93c3BhbjsKKwkJCX0KKworCQkJaW50IHdlaWdodHggPSBnZXRJbnRlZ2VyKGNvbXAsICJ3ZWlnaHR4IiwgMCk7CisJCQlpbnQgd2VpZ2h0eSA9IGdldEludGVnZXIoY29tcCwgIndlaWdodHkiLCAwKTsKKwkJCURpbWVuc2lvbiBkID0gZ2V0UHJlZmVycmVkU2l6ZShjb21wKTsKKworCQkJaWYgKGNvbHNwYW4gPT0gMSkgeworCQkJCWdyaWRbMF1beF0gPSBNYXRoLm1heChncmlkWzBdW3hdLCBkLndpZHRoKTsgLy8gY29sdW1ud2lkdGhzCisJCQkJZ3JpZFsyXVt4XSA9IE1hdGgubWF4KGdyaWRbMl1beF0sIHdlaWdodHgpOyAvLyBjb2x1bW53ZWlnaHRzCisJCQl9CisJCQllbHNlIHsKKwkJCQlpZiAoY2FjaGUgPT0gbnVsbCkgeyBjYWNoZSA9IG5ldyBpbnRbNF1bY291bnRdOyB9CisJCQkJY2FjaGVbMF1baV0gPSBkLndpZHRoOworCQkJCWNhY2hlWzJdW2ldID0gd2VpZ2h0eDsKKwkJCQlpZiAoKG5leHRzaXplID09IDApIHx8IChjb2xzcGFuIDwgbmV4dHNpemUpKSB7IG5leHRzaXplID0gY29sc3BhbjsgfQorCQkJfQorCQkJaWYgKHJvd3NwYW4gPT0gMSkgeworCQkJCWdyaWRbMV1beV0gPSBNYXRoLm1heChncmlkWzFdW3ldLCBkLmhlaWdodCk7IC8vIHJvd2hlaWdodHMKKwkJCQlncmlkWzNdW3ldID0gTWF0aC5tYXgoZ3JpZFszXVt5XSwgd2VpZ2h0eSk7IC8vIHJvd3dlaWdodHMKKwkJCX0KKwkJCWVsc2UgeworCQkJCWlmIChjYWNoZSA9PSBudWxsKSB7IGNhY2hlID0gbmV3IGludFs0XVtjb3VudF07IH0KKwkJCQljYWNoZVsxXVtpXSA9IGQuaGVpZ2h0OworCQkJCWNhY2hlWzNdW2ldID0gd2VpZ2h0eTsKKwkJCQlpZiAoKG5leHRzaXplID09IDApIHx8IChyb3dzcGFuIDwgbmV4dHNpemUpKSB7IG5leHRzaXplID0gcm93c3BhbjsgfQorCQkJfQorCQkJZ3JpZFs0XVtpXSA9IHg7IC8vZ3JpZHgKKwkJCWdyaWRbNV1baV0gPSB5OyAvL2dyaWR5CisJCQlncmlkWzZdW2ldID0gY29sc3BhbjsgLy9ncmlkd2lkdGgKKwkJCWdyaWRbN11baV0gPSByb3dzcGFuOyAvL2dyaWRoZWlnaHQKKworCQkJeCArPSBjb2xzcGFuOworCQkJaSsrOworCQl9CisKKwkJd2hpbGUgKG5leHRzaXplICE9IDApIHsKKwkJCWludCBzaXplID0gbmV4dHNpemU7IG5leHRzaXplID0gMDsKKwkJCWZvciAoaW50IGogPSAwOyBqIDwgMjsgaisrKSB7IC8vIGhvcml6b250YWwsIHZlcnRpY2FsCisJCQkJZm9yIChpbnQgayA9IDA7IGsgPCBjb3VudDsgaysrKSB7CisJCQkJCWlmIChncmlkWzYgKyBqXVtrXSA9PSBzaXplKSB7IC8vIGdyaWR3aWR0aCwgZ3JpZGhlaWdodAorCQkJCQkJaW50IGdyaWRwb2ludCA9IGdyaWRbNCArIGpdW2tdOyAvLyBncmlkeCwgZ3JpZHkKKworCQkJCQkJaW50IHdlaWdodGRpZmYgPSBjYWNoZVsyICsgal1ba107CisJCQkJCQlmb3IgKGludCBtID0gMDsgKHdlaWdodGRpZmYgPiAwKSAmJiAobSA8IHNpemUpOyBtKyspIHsKKwkJCQkJCQl3ZWlnaHRkaWZmIC09IGdyaWRbMiArIGpdW2dyaWRwb2ludCArIG1dOworCQkJCQkJfQorCQkJCQkJaWYgKHdlaWdodGRpZmYgPiAwKSB7CisJCQkJCQkJaW50IHdlaWdodHN1bSA9IGNhY2hlWzIgKyBqXVtrXSAtIHdlaWdodGRpZmY7CisJCQkJCQkJZm9yIChpbnQgbSA9IDA7ICh3ZWlnaHRzdW0gPiAwKSAmJiAobSA8IHNpemUpOyBtKyspIHsKKwkJCQkJCQkJaW50IHdlaWdodCA9IGdyaWRbMiArIGpdW2dyaWRwb2ludCArIG1dOworCQkJCQkJCQlpZiAod2VpZ2h0ID4gMCkgeworCQkJCQkJCQkJaW50IHdlaWdodGluYyA9IHdlaWdodCAqIHdlaWdodGRpZmYgLyB3ZWlnaHRzdW07CisJCQkJCQkJCQlncmlkWzIgKyBqXVtncmlkcG9pbnQgKyBtXSArPSB3ZWlnaHRpbmM7CisJCQkJCQkJCQl3ZWlnaHRkaWZmIC09IHdlaWdodGluYzsKKwkJCQkJCQkJCXdlaWdodHN1bSAtPSB3ZWlnaHRpbmM7CisJCQkJCQkJCX0KKwkJCQkJCQl9CisJCQkJCQkJZ3JpZFsyICsgal1bZ3JpZHBvaW50ICsgc2l6ZSAtIDFdICs9IHdlaWdodGRpZmY7CisJCQkJCQl9CisKKwkJCQkJCWludCBzaXplZGlmZiA9IGNhY2hlW2pdW2tdOworCQkJCQkJaW50IHdlaWdodHN1bSA9IDA7CisJCQkJCQlmb3IgKGludCBtID0gMDsgKHNpemVkaWZmID4gMCkgJiYgKG0gPCBzaXplKTsgbSsrKSB7CisJCQkJCQkJc2l6ZWRpZmYgLT0gZ3JpZFtqXVtncmlkcG9pbnQgKyBtXTsKKwkJCQkJCQl3ZWlnaHRzdW0gKz0gZ3JpZFsyICsgal1bZ3JpZHBvaW50ICsgbV07CisJCQkJCQl9CisJCQkJCQlpZiAoc2l6ZWRpZmYgPiAwKSB7CisJCQkJCQkJZm9yIChpbnQgbSA9IDA7ICh3ZWlnaHRzdW0gPiAwKSAmJiAobSA8IHNpemUpOyBtKyspIHsKKwkJCQkJCQkJaW50IHdlaWdodCA9IGdyaWRbMiArIGpdW2dyaWRwb2ludCArIG1dOworCQkJCQkJCQlpZiAod2VpZ2h0ID4gMCkgeworCQkJCQkJCQkJaW50IHNpemVpbmMgPSB3ZWlnaHQgKiBzaXplZGlmZiAvIHdlaWdodHN1bTsKKwkJCQkJCQkJCWdyaWRbal1bZ3JpZHBvaW50ICsgbV0gKz0gc2l6ZWluYzsKKwkJCQkJCQkJCXNpemVkaWZmIC09IHNpemVpbmM7CisJCQkJCQkJCQl3ZWlnaHRzdW0gLT0gd2VpZ2h0OworCQkJCQkJCQl9CisJCQkJCQkJfQorCQkJCQkJCWdyaWRbal1bZ3JpZHBvaW50ICsgc2l6ZSAtIDFdICs9IHNpemVkaWZmOworCQkJCQkJfQorCQkJCQl9CisJCQkJCWVsc2UgaWYgKChncmlkWzYgKyBqXVtrXSA+IHNpemUpICYmCisJCQkJCQkJKChuZXh0c2l6ZSA9PSAwKSB8fCAoZ3JpZFs2ICsgal1ba10gPCBuZXh0c2l6ZSkpKSB7CisJCQkJCQluZXh0c2l6ZSA9IGdyaWRbNiArIGpdW2tdOworCQkJCQl9CisJCQkJfQorCQkJfQorCQl9CisJCXJldHVybiBncmlkOworCX0KKworCS8qKgorCSAqCisJICovCisJcHJpdmF0ZSBpbnQgZ2V0U3VtKGludFtdIHZhbHVlcywKKwkJCWludCBmcm9tLCBpbnQgbGVuZ3RoLCBpbnQgZ2FwLCBib29sZWFuIGxhc3QpIHsKKwkJaWYgKGxlbmd0aCA8PSAwKSB7IHJldHVybiAwOyB9CisJCWludCB2YWx1ZSA9IDA7CisJCWZvciAoaW50IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKKwkJCXZhbHVlICs9IHZhbHVlc1tmcm9tICsgaV07CisJCX0KKwkJcmV0dXJuIHZhbHVlICsgKGxlbmd0aCAtIChsYXN0ID8gMCA6IDEpKSAqIGdhcDsKKwl9CisKKwkvKioKKwkgKgorCSAqLworCXByaXZhdGUgRGltZW5zaW9uIGdldEZpZWxkU2l6ZShPYmplY3QgY29tcG9uZW50KSB7CisJCVN0cmluZyB0ZXh0ID0gZ2V0U3RyaW5nKGNvbXBvbmVudCwgInRleHQiLCAiIik7CisJCWludCBjb2x1bW5zID0gZ2V0SW50ZWdlcihjb21wb25lbnQsICJjb2x1bW5zIiwgMCk7CisJCTxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICdGb250TWV0cmljcyciPkZvbnRNZXRyaWNzPC9lcnJvcj4gZm0gPSBnZXRGb250TWV0cmljcyhnZXRGb250KCkpOworCQlyZXR1cm4gbmV3IERpbWVuc2lvbigoKGNvbHVtbnMgPiAwKSA/CisJCQkoY29sdW1ucyAqIGZtLjxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgbWV0aG9kICdjaGFyV2lkdGgoY2hhciknIj5jaGFyV2lkdGg8L2Vycm9yPignZScpKSA6IDc2KSArIDQsCisJCQlmbS48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIG1ldGhvZCAnZ2V0QXNjZW50KCknIj5nZXRBc2NlbnQ8L2Vycm9yPigpICsgZm0uPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBtZXRob2QgJ2dldERlc2NlbnQoKSciPmdldERlc2NlbnQ8L2Vycm9yPigpICsgNCk7IC8vIGZtLnN0cmluZ1dpZHRoKHRleHQpCisJfQorCisJLyoqCisJICoKKwkgKi8KKwlwcml2YXRlIERpbWVuc2lvbiBnZXRTaXplKE9iamVjdCBjb21wb25lbnQsCisJCQlpbnQgZHgsIGludCBkeSwgU3RyaW5nIGRlZmF1bHRhbGlnbm1lbnQpIHsKKwkJU3RyaW5nIHRleHQgPSBnZXRTdHJpbmcoY29tcG9uZW50LCAidGV4dCIsIG51bGwpOworCQlpbnQgdHcgPSAwOyBpbnQgdGggPSAwOworCQlpZiAodGV4dCAhPSBudWxsKSB7CisJCQk8ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAnRm9udE1ldHJpY3MnIj5Gb250TWV0cmljczwvZXJyb3I+IGZtID0gZ2V0Rm9udE1ldHJpY3MoZ2V0Rm9udCgpKTsKKwkJCXR3ID0gZm0uPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBtZXRob2QgJ3N0cmluZ1dpZHRoKGphdmEubGFuZy5TdHJpbmcpJyI+c3RyaW5nV2lkdGg8L2Vycm9yPih0ZXh0KTsKKwkJCXRoID0gZm0uPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBtZXRob2QgJ2dldEFzY2VudCgpJyI+Z2V0QXNjZW50PC9lcnJvcj4oKSArIGZtLjxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgbWV0aG9kICdnZXREZXNjZW50KCknIj5nZXREZXNjZW50PC9lcnJvcj4oKTsKKwkJfQorCQk8ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAnSW1hZ2UnIj5JbWFnZTwvZXJyb3I+IGljb24gPSBnZXRJY29uKGNvbXBvbmVudCwgImljb24iLCBudWxsKTsKKwkJaW50IGl3ID0gMDsgaW50IGloID0gMDsKKwkJaWYgKGljb24gIT0gbnVsbCkgeworCQkJaXcgPSBpY29uLjxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgbWV0aG9kICdnZXRXaWR0aChUaGlubGV0KSciPmdldFdpZHRoPC9lcnJvcj4odGhpcyk7CisJCQlpaCA9IGljb24uPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBtZXRob2QgJ2dldEhlaWdodChUaGlubGV0KSciPmdldEhlaWdodDwvZXJyb3I+KHRoaXMpOworCQl9CisJCXJldHVybiBuZXcgRGltZW5zaW9uKHR3ICsgaXcgKyBkeCwgTWF0aC5tYXgodGgsIGloKSArIGR5KTsKKwl9CisJLy9qYXZhPgorCisJLyoqCisJICoKKwkgKi8KKwlwdWJsaWMgdm9pZCB1cGRhdGUoPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ0dyYXBoaWNzJyI+R3JhcGhpY3M8L2Vycm9yPiBnKSB7CisJCXBhaW50KGcpOworCX0KKworCS8qKgorCSAqfgorCSAqLworCXB1YmxpYyBib29sZWFuIGltYWdlVXBkYXRlKDxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICdJbWFnZSciPkltYWdlPC9lcnJvcj4gaW1nLCBpbnQgaW5mb2ZsYWdzLCBpbnQgeCwgaW50IHksIGludCB3aWR0aCwgaW50IGhlaWdodCkgeworCQlpZiAoaW5mb2ZsYWdzID09IDxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICdJbWFnZU9ic2VydmVyJyI+SW1hZ2VPYnNlcnZlcjwvZXJyb3I+LkFMTEJJVFMpIHsKKwkJCXZhbGlkYXRlKGNvbnRlbnQpOworCQkJcmV0dXJuIHN1cGVyLmltYWdlVXBkYXRlKGltZywgaW5mb2ZsYWdzLCB4LCB5LCB3aWR0aCwgaGVpZ2h0KTsKKwkJfQorCQlyZXR1cm4gdHJ1ZTsKKwl9CisKKwkvKioKKwkgKgorCSAqLworCXB1YmxpYyB2b2lkIHBhaW50KDxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICdHcmFwaGljcyciPkdyYXBoaWNzPC9lcnJvcj4gZykgeworCQkvL2cuc2V0Q29sb3IoQ29sb3Iub3JhbmdlKTsKKwkJLy9nLmZpbGxSZWN0KDAsIDAsIGdldFNpemUoKS53aWR0aCwgZ2V0U2l6ZSgpLmhlaWdodCk7CisJCS8vbG9uZyB0aW1lID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7CisJCTxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICdSZWN0YW5nbGUnIj5SZWN0YW5nbGU8L2Vycm9yPiBjbGlwID0gZy48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIG1ldGhvZCAnZ2V0Q2xpcEJvdW5kcygpJyI+Z2V0Q2xpcEJvdW5kczwvZXJyb3I+KCk7CisJCS8vL2RnLnNldENsaXAoci54LCByLnksIHIud2lkdGgsIHIuaGVpZ2h0KTsKKwkJcGFpbnQoZywgY2xpcC48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAneCciPng8L2Vycm9yPiwgY2xpcC48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAneSciPnk8L2Vycm9yPiwgY2xpcC48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAnd2lkdGgnIj53aWR0aDwvZXJyb3I+LCBjbGlwLjxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICdoZWlnaHQnIj5oZWlnaHQ8L2Vycm9yPiwgY29udGVudCwgaXNFbmFibGVkKCkpOworCQkvL1N5c3RlbS5vdXQucHJpbnRsbihTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKSAtIHRpbWUpOworCQkvLy9nLnNldENsaXAoMCwgMCwgZ2V0U2l6ZSgpLndpZHRoLCBnZXRTaXplKCkuaGVpZ2h0KTsKKwkJLy9nLnNldENvbG9yKENvbG9yLnJlZCk7IGcuZHJhd1JlY3QoY2xpcC54LCBjbGlwLnksIGNsaXAud2lkdGggLSAxLCBjbGlwLmhlaWdodCAtIDEpOworCX0KKworCS8vPGphdmEKKwkvKm1pZHAKKwlwcm90ZWN0ZWQgdm9pZCBwYWludChHcmFwaGljcyBnKSB7CisJCXBhaW50KGcsIGcuZ2V0Q2xpcFgoKSwgZy5nZXRDbGlwWSgpLAorCQkJZy5nZXRDbGlwV2lkdGgoKSwgZy5nZXRDbGlwSGVpZ2h0KCksIGNvbnRlbnQsIHRydWUpOworCX0KKworCXByb3RlY3RlZCB2b2lkIHNob3dOb3RpZnkoKSB7CisJCXNldFJlY3RhbmdsZShjb250ZW50LCAiYm91bmRzIiwgMCwgMCwgZ2V0V2lkdGgoKSwgZ2V0SGVpZ2h0KCkpOworCQlkb0xheW91dChjb250ZW50KTsKKwl9CisJbWlkcCovCisKKwkvKioKKwkgKgorCSAqLworCXByaXZhdGUgdm9pZCBwYWludCg8ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAnR3JhcGhpY3MnIj5HcmFwaGljczwvZXJyb3I+IGcsCisJCQlpbnQgY2xpcHgsIGludCBjbGlweSwgaW50IGNsaXB3aWR0aCwgaW50IGNsaXBoZWlnaHQsCisJCQlPYmplY3QgY29tcG9uZW50LCBib29sZWFuIGVuYWJsZWQpIHsKKwkJaWYgKCFnZXRCb29sZWFuKGNvbXBvbmVudCwgInZpc2libGUiLCB0cnVlKSkgeyByZXR1cm47IH0KKwkJPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ1JlY3RhbmdsZSciPlJlY3RhbmdsZTwvZXJyb3I+IGJvdW5kcyA9IGdldFJlY3RhbmdsZShjb21wb25lbnQsICJib3VuZHMiKTsKKwkJaWYgKGJvdW5kcyA9PSBudWxsKSB7IHJldHVybjsgfQorCQlpZiAoYm91bmRzLjxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICd3aWR0aCciPndpZHRoPC9lcnJvcj4gPCAwKSB7CisJCQlib3VuZHMuPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ3dpZHRoJyI+d2lkdGg8L2Vycm9yPiA9IE1hdGguYWJzPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBtZXRob2QgJ2Ficyg/KSciPihib3VuZHMuPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ3dpZHRoJyI+d2lkdGg8L2Vycm9yPik8L2Vycm9yPjsKKwkJCWRvTGF5b3V0KGNvbXBvbmVudCk7CisJCX0KKwkJaWYgKChjbGlweCArIGNsaXB3aWR0aCA8IGJvdW5kcy48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAneCciPng8L2Vycm9yPikgfHwKKwkJCQkoY2xpcHggPiBib3VuZHMuPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ3gnIj54PC9lcnJvcj4gKyBib3VuZHMuPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ3dpZHRoJyI+d2lkdGg8L2Vycm9yPikgfHwKKwkJCQkoY2xpcHkgKyBjbGlwaGVpZ2h0IDwgYm91bmRzLjxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICd5JyI+eTwvZXJyb3I+KSB8fAorCQkJCShjbGlweSA+IGJvdW5kcy48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAneSciPnk8L2Vycm9yPiArIGJvdW5kcy48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAnaGVpZ2h0JyI+aGVpZ2h0PC9lcnJvcj4pKSB7CisJCQlyZXR1cm47CisJCX0KKwkJY2xpcHggLT0gYm91bmRzLjxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICd4JyI+eDwvZXJyb3I+OyBjbGlweSAtPSBib3VuZHMuPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ3knIj55PC9lcnJvcj47CisJCVN0cmluZyBjbGFzc25hbWUgPSBnZXRDbGFzcyhjb21wb25lbnQpOworCQlib29sZWFuIHByZXNzZWQgPSAobW91c2VwcmVzc2VkID09IGNvbXBvbmVudCk7CisJCWJvb2xlYW4gaW5zaWRlID0gKG1vdXNlaW5zaWRlID09IGNvbXBvbmVudCkgJiYKKwkJCSgobW91c2VwcmVzc2VkID09IG51bGwpIHx8IHByZXNzZWQpOworCQlib29sZWFuIGZvY3VzID0gZm9jdXNpbnNpZGUgJiYgKGZvY3Vzb3duZXIgPT0gY29tcG9uZW50KTsKKwkJZW5hYmxlZCA9IGdldEJvb2xlYW4oY29tcG9uZW50LCAiZW5hYmxlZCIsIHRydWUpOyAvL2VuYWJsZWQgJiYKKwkJZy48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIG1ldGhvZCAndHJhbnNsYXRlKD8sID8pJyI+dHJhbnNsYXRlPC9lcnJvcj4oYm91bmRzLjxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICd4JyI+eDwvZXJyb3I+LCBib3VuZHMuPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ3knIj55PC9lcnJvcj4pOworCQkvL2cuc2V0Q2xpcCgwLCAwLCBib3VuZHMud2lkdGgsIGJvdW5kcy5oZWlnaHQpOworCisJCWlmICgibGFiZWwiID09IGNsYXNzbmFtZSkgeworCQkJcGFpbnRDb250ZW50KGNvbXBvbmVudCwgZywgY2xpcHgsIGNsaXB5LCBjbGlwd2lkdGgsIGNsaXBoZWlnaHQsCisJCQkJMCwgMCwgYm91bmRzLjxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICd3aWR0aCciPndpZHRoPC9lcnJvcj4sIGJvdW5kcy48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAnaGVpZ2h0JyI+aGVpZ2h0PC9lcnJvcj4sCisJCQkJZW5hYmxlZCA/IGNfdGV4dCA6IGNfZGlzYWJsZSwgImxlZnQiLCB0cnVlKTsKKwkJfQorCQllbHNlIGlmICgiYnV0dG9uIiA9PSBjbGFzc25hbWUpIHsKKwkJCXBhaW50UmVjdChnLCAwLCAwLCBib3VuZHMuPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ3dpZHRoJyI+d2lkdGg8L2Vycm9yPiwgYm91bmRzLjxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICdoZWlnaHQnIj5oZWlnaHQ8L2Vycm9yPiwKKwkJCQllbmFibGVkID8gY19ib3JkZXIgOiBjX2Rpc2FibGUsCisJCQkJZW5hYmxlZCA/ICgoaW5zaWRlICE9IHByZXNzZWQpID8gY19ob3ZlciA6CisJCQkJCShwcmVzc2VkID8gY19wcmVzcyA6IGNfY3RybCkpIDogY19iZywgdHJ1ZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSk7CisJCQlpZiAoZm9jdXMpIHsKKwkJCQlnLjxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgbWV0aG9kICdzZXRDb2xvcihDb2xvciknIj5zZXRDb2xvcjwvZXJyb3I+KGNfZm9jdXMpOworCQkJCWcuPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBtZXRob2QgJ2RyYXdSZWN0KGludCwgaW50LCA/LCA/KSciPmRyYXdSZWN0PC9lcnJvcj4oMiwgMiwgYm91bmRzLjxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICd3aWR0aCciPndpZHRoPC9lcnJvcj4gLSA1LCBib3VuZHMuPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ2hlaWdodCciPmhlaWdodDwvZXJyb3I+IC0gNSk7CisJCQl9CisJCQlwYWludENvbnRlbnQoY29tcG9uZW50LCBnLCBjbGlweCwgY2xpcHksIGNsaXB3aWR0aCwgY2xpcGhlaWdodCwKKwkJCQk2LCAzLCBib3VuZHMuPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ3dpZHRoJyI+d2lkdGg8L2Vycm9yPiAtIDEyLCBib3VuZHMuPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ2hlaWdodCciPmhlaWdodDwvZXJyb3I+IC0gNiwKKwkJCQllbmFibGVkID8gY190ZXh0IDogY19kaXNhYmxlLCAiY2VudGVyIiwgdHJ1ZSk7CisJCX0KKwkJZWxzZSBpZiAoImNoZWNrYm94IiA9PSBjbGFzc25hbWUpIHsKKwkJCWJvb2xlYW4gc2VsZWN0ZWQgPSBnZXRCb29sZWFuKGNvbXBvbmVudCwgInNlbGVjdGVkIiwgZmFsc2UpOworCQkJU3RyaW5nIGdyb3VwID0gZ2V0U3RyaW5nKGNvbXBvbmVudCwgImdyb3VwIiwgbnVsbCk7CisJCQk8ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAnQ29sb3InIj5Db2xvcjwvZXJyb3I+IGJvcmRlciA9IGVuYWJsZWQgPyBjX2JvcmRlciA6IGNfZGlzYWJsZTsKKwkJCTxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICdDb2xvciciPkNvbG9yPC9lcnJvcj4gZm9yZWdyb3VuZCA9IGVuYWJsZWQgPyAoKGluc2lkZSAhPSBwcmVzc2VkKSA/IGNfaG92ZXIgOgorCQkJCShwcmVzc2VkID8gY19wcmVzcyA6IGNfY3RybCkpIDogY19iZzsKKwkJCWludCBkeSA9IChib3VuZHMuPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ2hlaWdodCciPmhlaWdodDwvZXJyb3I+IC0gYmxvY2sgKyAyKSAvIDI7CisJCQlpZiAoZ3JvdXAgPT0gbnVsbCkgeworCQkJCXBhaW50UmVjdChnLCAxLCBkeSArIDEsIGJsb2NrIC0gMiwgYmxvY2sgLSAyLAorCQkJCQlib3JkZXIsIGZvcmVncm91bmQsIHRydWUsIHRydWUsIHRydWUsIHRydWUpOworCQkJfSBlbHNlIHsKKwkJCQlnLjxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgbWV0aG9kICdzZXRDb2xvcihDb2xvciknIj5zZXRDb2xvcjwvZXJyb3I+KChmb3JlZ3JvdW5kICE9IGNfY3RybCkgPyBmb3JlZ3JvdW5kIDogY19iZyk7CisJCQkJZy48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIG1ldGhvZCAnZmlsbE92YWwoaW50LCBpbnQsIGludCwgaW50KSciPmZpbGxPdmFsPC9lcnJvcj4oMSwgZHkgKyAxLCBibG9jayAtIDMsIGJsb2NrIC0gMyk7IC8vamF2YQorCQkJCWcuPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBtZXRob2QgJ3NldENvbG9yKENvbG9yKSciPnNldENvbG9yPC9lcnJvcj4oYm9yZGVyKTsKKwkJCQlnLjxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgbWV0aG9kICdkcmF3T3ZhbChpbnQsIGludCwgaW50LCBpbnQpJyI+ZHJhd092YWw8L2Vycm9yPigxLCBkeSArIDEsIGJsb2NrIC0gMywgYmxvY2sgLSAzKTsgLy9qYXZhCisJCQl9CisJCQlpZiAoZm9jdXMpIHsKKwkJCQlnLjxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgbWV0aG9kICdzZXRDb2xvcihDb2xvciknIj5zZXRDb2xvcjwvZXJyb3I+KGNfZm9jdXMpOworCQkJCWlmIChncm91cCA9PSBudWxsKSB7CisJCQkJCWcuPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBtZXRob2QgJ2RyYXdSZWN0KGludCwgaW50LCBpbnQsIGludCknIj5kcmF3UmVjdDwvZXJyb3I+KDMsIGR5ICsgMywgYmxvY2sgLSA3LCBibG9jayAtIDcpOworCQkJCX0gZWxzZSB7CisJCQkJCWcuPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBtZXRob2QgJ2RyYXdPdmFsKGludCwgaW50LCBpbnQsIGludCknIj5kcmF3T3ZhbDwvZXJyb3I+KDMsIGR5ICsgMywgYmxvY2sgLSA3LCBibG9jayAtIDcpOyAvL2phdmEKKwkJCQl9CisJCQl9CisJCQlpZigoIXNlbGVjdGVkICYmIGluc2lkZSAmJiBwcmVzc2VkKSB8fAorCQkJCQkoc2VsZWN0ZWQgJiYgKCFpbnNpZGUgfHwgIXByZXNzZWQpKSkgeworCQkJCWcuPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBtZXRob2QgJ3NldENvbG9yKENvbG9yKSciPnNldENvbG9yPC9lcnJvcj4oZW5hYmxlZCA/IGNfdGV4dCA6IGNfZGlzYWJsZSk7CisJCQkJaWYgKGdyb3VwID09IG51bGwpIHsKKwkJCQkJZy48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIG1ldGhvZCAnZmlsbFJlY3QoaW50LCBpbnQsIGludCwgaW50KSciPmZpbGxSZWN0PC9lcnJvcj4oMywgZHkgKyBibG9jayAtIDksIDIsIDYpOworCQkJCQlnLjxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgbWV0aG9kICdkcmF3TGluZShpbnQsIGludCwgaW50LCBpbnQpJyI+ZHJhd0xpbmU8L2Vycm9yPigzLCBkeSArIGJsb2NrIC0gNCwgYmxvY2sgLSA0LCBkeSArIDMpOworCQkJCQlnLjxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgbWV0aG9kICdkcmF3TGluZShpbnQsIGludCwgaW50LCBpbnQpJyI+ZHJhd0xpbmU8L2Vycm9yPig0LCBkeSArIGJsb2NrIC0gNCwgYmxvY2sgLSA0LCBkeSArIDQpOworCQkJCX0gZWxzZSB7CisJCQkJCWcuPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBtZXRob2QgJ2ZpbGxPdmFsKGludCwgaW50LCBpbnQsIGludCknIj5maWxsT3ZhbDwvZXJyb3I+KDUsIGR5ICsgNSwgYmxvY2sgLSAxMCwgYmxvY2sgLSAxMCk7IC8vamF2YQorCQkJCQlnLjxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgbWV0aG9kICdkcmF3T3ZhbChpbnQsIGludCwgaW50LCBpbnQpJyI+ZHJhd092YWw8L2Vycm9yPig0LCBkeSArIDQsIGJsb2NrIC0gOSwgYmxvY2sgLSA5KTsgLy9qYXZhCisJCQkJfQorCQkJfQorCQkJcGFpbnRDb250ZW50KGNvbXBvbmVudCwgZywgY2xpcHgsIGNsaXB5LCBjbGlwd2lkdGgsIGNsaXBoZWlnaHQsCisJCQkJYmxvY2sgKyAzLCAwLCBib3VuZHMuPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ3dpZHRoJyI+d2lkdGg8L2Vycm9yPiAtIGJsb2NrIC0gMywgYm91bmRzLjxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICdoZWlnaHQnIj5oZWlnaHQ8L2Vycm9yPiwKKwkJCQllbmFibGVkID8gY190ZXh0IDogY19kaXNhYmxlLCAibGVmdCIsIHRydWUpOworCQl9CisJCWVsc2UgaWYgKCJjb21ib2JveCIgPT0gY2xhc3NuYW1lKSB7CisJCQlpZiAoZ2V0Qm9vbGVhbihjb21wb25lbnQsICJlZGl0YWJsZSIsIHRydWUpKSB7CisJCQkJPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ0ltYWdlJyI+SW1hZ2U8L2Vycm9yPiBpY29uID0gZ2V0SWNvbihjb21wb25lbnQsICJpY29uIiwgbnVsbCk7CisJCQkJaW50IGxlZnQgPSAoaWNvbiAhPSBudWxsKSA/IGljb24uPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBtZXRob2QgJ2dldFdpZHRoKFRoaW5sZXQpJyI+Z2V0V2lkdGg8L2Vycm9yPih0aGlzKSA6IDA7CisJCQkJcGFpbnRGaWVsZChnLCBjbGlweCwgY2xpcHksIGNsaXB3aWR0aCwgY2xpcGhlaWdodCwgY29tcG9uZW50LAorCQkJCQlib3VuZHMuPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ3dpZHRoJyI+d2lkdGg8L2Vycm9yPiAtIGJsb2NrLCBib3VuZHMuPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ2hlaWdodCciPmhlaWdodDwvZXJyb3I+LAorCQkJCQlpbnNpZGUsIHByZXNzZWQsIGZvY3VzLCBlbmFibGVkLCBmYWxzZSwgbGVmdCk7CisJCQkJaWYgKGljb24gIT0gbnVsbCkgeworCQkJCQlnLjxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgbWV0aG9kICdkcmF3SW1hZ2UoSW1hZ2UsIGludCwgPywgVGhpbmxldCknIj5kcmF3SW1hZ2U8L2Vycm9yPihpY29uLCAyLCAoYm91bmRzLjxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICdoZWlnaHQnIj5oZWlnaHQ8L2Vycm9yPiAtIGljb24uPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBtZXRob2QgJ2dldEhlaWdodChUaGlubGV0KSciPmdldEhlaWdodDwvZXJyb3I+KHRoaXMpKSAvIDIsIHRoaXMpOyAvL2phdmEKKwkJCQkJLy9taWRwIGcuZHJhd0ltYWdlKGljb24sIDIsIGJvdW5kcy5oZWlnaHQgLyAyLCBHcmFwaGljcy5MRUZUIHwgR3JhcGhpY3MuVkNFTlRFUik7CisJCQkJfQorCQkJCXBhaW50QXJyb3coZywgYm91bmRzLjxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICd3aWR0aCciPndpZHRoPC9lcnJvcj4gLSBibG9jaywgMCwgYmxvY2ssIGJvdW5kcy48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAnaGVpZ2h0JyI+aGVpZ2h0PC9lcnJvcj4sCisJCQkJCSdTJywgZW5hYmxlZCwgaW5zaWRlLCBwcmVzc2VkLCAiZG93biIsIHRydWUsIGZhbHNlLCB0cnVlLCB0cnVlKTsKKwkJCX0gZWxzZSB7CisJCQkJcGFpbnRSZWN0KGcsIDAsIDAsIGJvdW5kcy48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAnd2lkdGgnIj53aWR0aDwvZXJyb3I+LCBib3VuZHMuPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ2hlaWdodCciPmhlaWdodDwvZXJyb3I+LAorCQkJCQllbmFibGVkID8gY19ib3JkZXIgOiBjX2Rpc2FibGUsCisJCQkJCWVuYWJsZWQgPyAoKGluc2lkZSAhPSBwcmVzc2VkKSA/IGNfaG92ZXIgOgorCQkJCQkJKHByZXNzZWQgPyBjX3ByZXNzIDogY19jdHJsKSkgOiBjX2JnLCB0cnVlLCB0cnVlLCB0cnVlLCB0cnVlKTsKKwkJCQlwYWludENvbnRlbnQoY29tcG9uZW50LCBnLCBjbGlweCwgY2xpcHksIGNsaXB3aWR0aCwgY2xpcGhlaWdodCwKKwkJCQkJMiwgMiwgYm91bmRzLjxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICd3aWR0aCciPndpZHRoPC9lcnJvcj4gLSBibG9jayAtIDQsIGJvdW5kcy48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAnaGVpZ2h0JyI+aGVpZ2h0PC9lcnJvcj4gLSA0LAorCQkJCQllbmFibGVkID8gY190ZXh0IDogY19kaXNhYmxlLCAibGVmdCIsIGZhbHNlKTsKKwkJCQlwYWludEFycm93KGcsIGJvdW5kcy48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAnd2lkdGgnIj53aWR0aDwvZXJyb3I+IC0gYmxvY2ssIDAsIGJsb2NrLCBib3VuZHMuPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ2hlaWdodCciPmhlaWdodDwvZXJyb3I+LCAnUycpOworCQkJCWlmIChmb2N1cykgeworCQkJCQlnLjxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgbWV0aG9kICdzZXRDb2xvcihDb2xvciknIj5zZXRDb2xvcjwvZXJyb3I+KGNfZm9jdXMpOworCQkJCQlnLjxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgbWV0aG9kICdkcmF3UmVjdChpbnQsIGludCwgPywgPyknIj5kcmF3UmVjdDwvZXJyb3I+KDIsIDIsIGJvdW5kcy48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAnd2lkdGgnIj53aWR0aDwvZXJyb3I+IC0gYmxvY2sgLSA1LCBib3VuZHMuPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ2hlaWdodCciPmhlaWdodDwvZXJyb3I+IC0gNSk7CisJCQkJfQorCQkJfQorCQl9CisJCWVsc2UgaWYgKCJjb21ib2xpc3QiID09IGNsYXNzbmFtZSkgeworCQkJPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ1JlY3RhbmdsZSciPlJlY3RhbmdsZTwvZXJyb3I+IHZpZXcgPSBnZXRSZWN0YW5nbGUoY29tcG9uZW50LCAiOnZpZXciKTsKKwkJCTxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICdSZWN0YW5nbGUnIj5SZWN0YW5nbGU8L2Vycm9yPiB2aWV3cG9ydCA9IGdldFJlY3RhbmdsZShjb21wb25lbnQsICI6cG9ydCIpOworCQkJZy48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIG1ldGhvZCAnc2V0Q29sb3IoQ29sb3IpJyI+c2V0Q29sb3I8L2Vycm9yPihjX2JvcmRlcik7CisJCQlnLjxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgbWV0aG9kICdkcmF3UmVjdCg/LCA/LCA/LCA/KSciPmRyYXdSZWN0PC9lcnJvcj4odmlld3BvcnQuPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ3gnIj54PC9lcnJvcj4sIHZpZXdwb3J0LjxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICd5JyI+eTwvZXJyb3I+LCB2aWV3cG9ydC48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAnd2lkdGgnIj53aWR0aDwvZXJyb3I+IC0gMSwgdmlld3BvcnQuPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ2hlaWdodCciPmhlaWdodDwvZXJyb3I+IC0gMSk7CisJCQlpZiAocGFpbnRTY3JvbGxQYW5lKGcsIGNsaXB4LCBjbGlweSwgY2xpcHdpZHRoLCBjbGlwaGVpZ2h0LAorCQkJCQlib3VuZHMsIHZpZXcsIHZpZXdwb3J0LCBlbmFibGVkLCBpbnNpZGUsIHByZXNzZWQpKSB7CisJCQkJT2JqZWN0IHNlbGVjdGVkID0gZ2V0KGNvbXBvbmVudCwgImluc2lkZSIpOworCQkJCWludCBseSA9IGNsaXB5IC0gdmlld3BvcnQuPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ3knIj55PC9lcnJvcj4gLSAxOworCQkJCWludCB5ZnJvbSA9IHZpZXcuPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ3knIj55PC9lcnJvcj4gKyBNYXRoLm1heCgwLCBseSk7CisJCQkJaW50IHl0byA9IHZpZXcuPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ3knIj55PC9lcnJvcj4gKyBNYXRoLm1pbjxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgbWV0aG9kICdtaW4oPywgaW50KSciPih2aWV3cG9ydC48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAnaGVpZ2h0JyI+aGVpZ2h0PC9lcnJvcj4gLSAyLCBseSArIGNsaXBoZWlnaHQpPC9lcnJvcj47CisJCQkJZm9yIChPYmplY3QgY2hvaWNlID0gZ2V0KGdldChjb21wb25lbnQsICJjb21ib2JveCIpLCAiY2hvaWNlIik7CisJCQkJCQljaG9pY2UgIT0gbnVsbDsgY2hvaWNlID0gZ2V0KGNob2ljZSwgIjpuZXh0IikpIHsKKwkJCQkJPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ1JlY3RhbmdsZSciPlJlY3RhbmdsZTwvZXJyb3I+IHIgPSBnZXRSZWN0YW5nbGUoY2hvaWNlLCAiYm91bmRzIik7CisJCQkJCWlmICh5dG8gPD0gci48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAneSciPnk8L2Vycm9yPikgeyBicmVhazsgfQorCQkJCQlpZiAoeWZyb20gPj0gci48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAneSciPnk8L2Vycm9yPiArIHIuPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ2hlaWdodCciPmhlaWdodDwvZXJyb3I+KSB7IGNvbnRpbnVlOyB9CisJCQkJCWJvb2xlYW4gYXJtZWQgPSAoc2VsZWN0ZWQgPT0gY2hvaWNlKTsKKwkJCQkJcGFpbnRSZWN0KGcsIHIuPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ3gnIj54PC9lcnJvcj4sIHIuPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ3knIj55PC9lcnJvcj4sIGJvdW5kcy48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAnd2lkdGgnIj53aWR0aDwvZXJyb3I+IC0gMiwgci48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAnaGVpZ2h0JyI+aGVpZ2h0PC9lcnJvcj4sIGNfYm9yZGVyLAorCQkJCQkJYXJtZWQgPyBjX3NlbGVjdCA6IGNfYmcsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlKTsKKwkJCQkJcGFpbnRDb250ZW50KGNob2ljZSwgZywgY2xpcHgsIHlmcm9tLCBjbGlwd2lkdGgsIHl0byAtIHlmcm9tLAorCQkJCQkJci48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAneCciPng8L2Vycm9yPiArIDQsIHIuPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ3knIj55PC9lcnJvcj4gKyAyLCBib3VuZHMuPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ3dpZHRoJyI+d2lkdGg8L2Vycm9yPiAtIDEwLCByLjxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICdoZWlnaHQnIj5oZWlnaHQ8L2Vycm9yPiAtIDQsCisJCQkJCQlnZXRCb29sZWFuKGNob2ljZSwgImVuYWJsZWQiLCB0cnVlKSA/IGNfdGV4dCA6IGNfZGlzYWJsZSwgImxlZnQiLCBmYWxzZSk7CisJCQkJfQorCQkJCXJlc2V0U2Nyb2xsUGFuZShnLCBjbGlweCwgY2xpcHksIGNsaXB3aWR0aCwgY2xpcGhlaWdodCwgdmlldywgdmlld3BvcnQpOworCQkJfQorCQkJLy9wYWludFJlY3QoZywgMCwgMCwgYm91bmRzLndpZHRoLCBib3VuZHMuaGVpZ2h0LAorCQkJLy8Jc2Vjb25kYXJ5MSwgY19jdHJsLCB0cnVlLCB0cnVlLCB0cnVlLCB0cnVlKTsKKwkJfQorCQllbHNlIGlmICgoInRleHRmaWVsZCIgPT0gY2xhc3NuYW1lKSB8fCAoInBhc3N3b3JkZmllbGQiID09IGNsYXNzbmFtZSkpIHsKKwkJCXBhaW50RmllbGQoZywgY2xpcHgsIGNsaXB5LCBjbGlwd2lkdGgsIGNsaXBoZWlnaHQsIGNvbXBvbmVudCwKKwkJCQlib3VuZHMuPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ3dpZHRoJyI+d2lkdGg8L2Vycm9yPiwgYm91bmRzLjxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICdoZWlnaHQnIj5oZWlnaHQ8L2Vycm9yPiwKKwkJCQlpbnNpZGUsIHByZXNzZWQsIGZvY3VzLCBlbmFibGVkLCAoInBhc3N3b3JkZmllbGQiID09IGNsYXNzbmFtZSksIDApOworCQl9CisJCWVsc2UgaWYgKCJ0ZXh0YXJlYSIgPT0gY2xhc3NuYW1lKSB7CisJCQk8ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAnUmVjdGFuZ2xlJyI+UmVjdGFuZ2xlPC9lcnJvcj4gdmlldyA9IGdldFJlY3RhbmdsZShjb21wb25lbnQsICI6dmlldyIpOworCQkJPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ1JlY3RhbmdsZSciPlJlY3RhbmdsZTwvZXJyb3I+IHZpZXdwb3J0ID0gZ2V0UmVjdGFuZ2xlKGNvbXBvbmVudCwgIjpwb3J0Iik7CisJCQlib29sZWFuIGVkaXRhYmxlID0gZ2V0Qm9vbGVhbihjb21wb25lbnQsICJlZGl0YWJsZSIsIHRydWUpOworCQkJcGFpbnRSZWN0KGcsIHZpZXdwb3J0LjxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICd4JyI+eDwvZXJyb3I+LCB2aWV3cG9ydC48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAneSciPnk8L2Vycm9yPiwgdmlld3BvcnQuPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ3dpZHRoJyI+d2lkdGg8L2Vycm9yPiwgdmlld3BvcnQuPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ2hlaWdodCciPmhlaWdodDwvZXJyb3I+LAorCQkJCWVuYWJsZWQgPyBjX2JvcmRlciA6IGNfZGlzYWJsZSwgZWRpdGFibGUgPyBjX3RleHRiZyA6IGNfYmcsCisJCQkJdHJ1ZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSk7CisJCQlpZiAocGFpbnRTY3JvbGxQYW5lKGcsIGNsaXB4LCBjbGlweSwgY2xpcHdpZHRoLCBjbGlwaGVpZ2h0LAorCQkJCQlib3VuZHMsIHZpZXcsIHZpZXdwb3J0LCBlbmFibGVkLCBpbnNpZGUsIHByZXNzZWQpKSB7CisJCQkJU3RyaW5nIHRleHQgPSBnZXRTdHJpbmcoY29tcG9uZW50LCAidGV4dCIsICIiKTsKKwkJCQlpbnQgc3RhcnQgPSBmb2N1cyA/IGdldEludGVnZXIoY29tcG9uZW50LCAic3RhcnQiLCAwKSA6IDA7CisJCQkJaW50IGVuZCA9IGZvY3VzID8gZ2V0SW50ZWdlcihjb21wb25lbnQsICJlbmQiLCAwKSA6IDA7CisJCQkJaW50IGlzID0gTWF0aC5taW4oc3RhcnQsIGVuZCk7IGludCBpZSA9IE1hdGgubWF4KHN0YXJ0LCBlbmQpOworCQkJCWJvb2xlYW4gd3JhcCA9IGdldEJvb2xlYW4oY29tcG9uZW50LCAid3JhcCIsIGZhbHNlKTsKKwkJCQk8ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAnRm9udE1ldHJpY3MnIj5Gb250TWV0cmljczwvZXJyb3I+IGZtID0gZy48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIG1ldGhvZCAnZ2V0Rm9udE1ldHJpY3MoKSciPmdldEZvbnRNZXRyaWNzPC9lcnJvcj4oKTsgLy9qYXZhCisJCQkJaW50IGZvbnRhc2NlbnQgPSBmbS48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIG1ldGhvZCAnZ2V0QXNjZW50KCknIj5nZXRBc2NlbnQ8L2Vycm9yPigpOyBpbnQgZm9udGhlaWdodCA9IGZtLjxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgbWV0aG9kICdnZXRIZWlnaHQoKSciPmdldEhlaWdodDwvZXJyb3I+KCk7IC8vamF2YQorCQkJCS8vbWlkcCBpbnQgZm9udGhlaWdodCA9IGZtLmdldEhlaWdodCgpOworCQkJCWludCBhc2NlbnQgPSAxOworCQkJCWludCBseSA9IGNsaXB5IC0gdmlld3BvcnQuPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ3knIj55PC9lcnJvcj4gLSAxOworCQkJCWludCB5ZnJvbSA9IHZpZXcuPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ3knIj55PC9lcnJvcj4gKyBNYXRoLm1heCgwLCBseSk7CisJCQkJaW50IHl0byA9IHZpZXcuPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ3knIj55PC9lcnJvcj4gKyBNYXRoLm1pbjxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgbWV0aG9kICdtaW4oPywgaW50KSciPih2aWV3cG9ydC48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAnaGVpZ2h0JyI+aGVpZ2h0PC9lcnJvcj4gLSAyLCBseSArIGNsaXBoZWlnaHQpPC9lcnJvcj47CisJCQkJLy9nLnNldENvbG9yKENvbG9yLnBpbmspOyBnLmZpbGxSZWN0KDAsIHlmcm9tIC0gMSwgNzUsIDIpOyBnLmZpbGxSZWN0KDAsIHl0byAtIDEsIDc1LCAyKTsKKworCQkJCWJvb2xlYW4gcHJldmxldHRlciA9IGZhbHNlOyBpbnQgbiA9IHRleHQubGVuZ3RoKCk7IGNoYXIgYyA9IDA7CisJCQkJZm9yIChpbnQgaSA9IDAsIGogPSAtMSwgayA9IDA7IGsgPD0gbjsgaysrKSB7IC8vIGogaXMgdGhlIGxhc3Qgc3BhY2UgaW5kZXggKGJlZm9yZSBrKQorCQkJCQlpZiAoeXRvIDw9IGFzY2VudCkgeyBicmVhazsgfQorCQkJCQlpZiAod3JhcCkgeworCQkJCQkJaWYgKCgoayA9PSBuKSB8fCAoKGMgPSB0ZXh0LmNoYXJBdChrKSkgPT0gJ1xuJykgfHwgKGMgPT0gJyAnKSkgJiYKKwkJCQkJCQkJKGogID4gaSkgJiYgKGZtLjxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgbWV0aG9kICdzdHJpbmdXaWR0aChqYXZhLmxhbmcuU3RyaW5nKSciPnN0cmluZ1dpZHRoPC9lcnJvcj4odGV4dC5zdWJzdHJpbmcoaSwgaykpID4gdmlld3BvcnQuPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ3dpZHRoJyI+d2lkdGg8L2Vycm9yPiAtIDQpKSB7CisJCQkJCQkJay0tOyAvLyBkcmF3IGxpbmUgdG8gdGhlIGJlZ2luIG9mIHRoZSBjdXJyZW50IHdvcmQgKCsgc3BhY2VzKSBpZiBpdCBpcyBvdXQgb2Ygd2lkdGgKKwkJCQkJCX0KKwkJCQkJCWVsc2UgaWYgKChrID09IG4pIHx8IChjID09ICdcbicpKSB7IC8vIGRyYXcgbGluZSB0byB0aGUgdGV4dC9saW5lIGVuZAorCQkJCQkJCWogPSBrOyBwcmV2bGV0dGVyID0gZmFsc2U7CisJCQkJCQl9CisJCQkJCQllbHNlIHsKKwkJCQkJCQlpZiAoKGMgPT0gJyAnKSAmJiAocHJldmxldHRlciB8fCAoaiA+IGkpKSkgeyBqID0gazsgfSAvLyBrZWVwIHNwYWNlcyBzdGFydGluZyB0aGUgbGluZQorCQkJCQkJCXByZXZsZXR0ZXIgPSAoYyAhPSAnICcpOworCQkJCQkJCWNvbnRpbnVlOworCQkJCQkJfQorCQkJCQl9CisJCQkJCWVsc2UgeworCQkJCQkJaWYgKChrID09IG4pIHx8ICgoYyA9IHRleHQuY2hhckF0KGspKSA9PSAnXG4nKSkgeyBqID0gazsgfSBlbHNlIHsgY29udGludWU7IH0KKwkJCQkJfQorCQkJCQlpZiAoeWZyb20gPCBhc2NlbnQgKyBmb250aGVpZ2h0KSB7CisJCQkJCQlTdHJpbmcgbGluZSA9IChqICE9IC0xKSA/IHRleHQuc3Vic3RyaW5nKGksIGopIDogdGV4dC5zdWJzdHJpbmcoaSk7IC8vamF2YQorCQkJCQkJaWYgKGZvY3VzICYmIChpcyAhPSBpZSkgJiYgKGllID49IGkpICYmICgoaiA9PSAtMSkgfHwgKGlzIDw9IGopKSkgeworCQkJCQkJCWludCB4cyA9IChpcyA8IGkpID8gLTEgOiAoKChqICE9IC0xKSAmJiAoaXMgPiBqKSkgPyAodmlldy48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAnd2lkdGgnIj53aWR0aDwvZXJyb3I+IC0gMSkgOgorCQkJCQkJCQlmbS48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIG1ldGhvZCAnc3RyaW5nV2lkdGgoamF2YS5sYW5nLlN0cmluZyknIj5zdHJpbmdXaWR0aDwvZXJyb3I+KHRleHQuc3Vic3RyaW5nKGksIGlzKSkpOyAvL2phdmEKKwkJCQkJCQkJLy9taWRwIGZvbnQuc3Vic3RyaW5nV2lkdGgodGV4dCwgaSwgaXMgLSBpKSk7CisJCQkJCQkJaW50IHhlID0gKChqICE9IC0xKSAmJiAoaWUgPiBqKSkgPyAodmlldy48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAnd2lkdGgnIj53aWR0aDwvZXJyb3I+IC0gMSkgOgorCQkJCQkJCQlmbS48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIG1ldGhvZCAnc3RyaW5nV2lkdGgoamF2YS5sYW5nLlN0cmluZyknIj5zdHJpbmdXaWR0aDwvZXJyb3I+KHRleHQuc3Vic3RyaW5nKGksIGllKSk7IC8vamF2YQorCQkJCQkJCQkvL21pZHAgZm9udC5zdWJzdHJpbmdXaWR0aCh0ZXh0LCBpLCBpZSAtIGkpOworCQkJCQkJCWcuPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBtZXRob2QgJ3NldENvbG9yKENvbG9yKSciPnNldENvbG9yPC9lcnJvcj4oY19zZWxlY3QpOworCQkJCQkJCWcuPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBtZXRob2QgJ2ZpbGxSZWN0KGludCwgaW50LCBpbnQsIGludCknIj5maWxsUmVjdDwvZXJyb3I+KDEgKyB4cywgYXNjZW50LCB4ZSAtIHhzLCBmb250aGVpZ2h0KTsKKwkJCQkJCX0KKwkJCQkJCWcuPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBtZXRob2QgJ3NldENvbG9yKENvbG9yKSciPnNldENvbG9yPC9lcnJvcj4oZW5hYmxlZCA/IGNfdGV4dCA6IGNfZGlzYWJsZSk7CisJCQkJCQlnLjxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgbWV0aG9kICdkcmF3U3RyaW5nKGphdmEubGFuZy5TdHJpbmcsIGludCwgaW50KSciPmRyYXdTdHJpbmc8L2Vycm9yPihsaW5lLCAxLCBhc2NlbnQgKyBmb250YXNjZW50KTsgLy9qYXZhCisJCQkJCQkvL21pZHAgZy5kcmF3U3Vic3RyaW5nKHRleHQsIGksICgoaiAhPSAtMSkgPyBqIDogdGV4dC5sZW5ndGgoKSkgLSBpLCAxLCBhc2NlbnQsIEdyYXBoaWNzLkxFRlQgfCBHcmFwaGljcy5UT1ApOworCQkJCQkJaWYgKGZvY3VzICYmIChlbmQgPj0gaSkgJiYgKChqID09IC0xKSB8fCAoZW5kIDw9IGopKSkgeworCQkJCQkJCWludCBjYXJldCA9IGZtLjxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgbWV0aG9kICdzdHJpbmdXaWR0aChqYXZhLmxhbmcuU3RyaW5nKSciPnN0cmluZ1dpZHRoPC9lcnJvcj4odGV4dC5zdWJzdHJpbmcoaSwgZW5kKSk7IC8vamF2YQorCQkJCQkJCS8vbWlkcCBpbnQgY2FyZXQgPSBmb250LnN1YnN0cmluZ1dpZHRoKHRleHQsIGksIGVuZCAtIGkpOworCQkJCQkJCWcuPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBtZXRob2QgJ3NldENvbG9yKENvbG9yKSciPnNldENvbG9yPC9lcnJvcj4oY19mb2N1cyk7CisJCQkJCQkJZy48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIG1ldGhvZCAnZmlsbFJlY3QoaW50LCBpbnQsIGludCwgaW50KSciPmZpbGxSZWN0PC9lcnJvcj4oY2FyZXQsIGFzY2VudCwgMSwgZm9udGhlaWdodCk7CisJCQkJCQl9CisJCQkJCX0KKwkJCQkJYXNjZW50ICs9IGZvbnRoZWlnaHQ7CisJCQkJCWkgPSBqICsgMTsKKwkJCQl9CisJCQkJcmVzZXRTY3JvbGxQYW5lKGcsIGNsaXB4LCBjbGlweSwgY2xpcHdpZHRoLCBjbGlwaGVpZ2h0LCB2aWV3LCB2aWV3cG9ydCk7CisJCQl9CisJCX0KKwkJZWxzZSBpZiAoInRhYmJlZHBhbmUiID09IGNsYXNzbmFtZSkgeworCQkJaW50IGkgPSAwOyA8ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAnUmVjdGFuZ2xlJyI+UmVjdGFuZ2xlPC9lcnJvcj4gbGFzdCA9IG51bGw7CisJCQlpbnQgc2VsZWN0ZWQgPSBnZXRJbnRlZ2VyKGNvbXBvbmVudCwgInNlbGVjdGVkIiwgMCk7CisJCQlTdHJpbmcgcGxhY2VtZW50ID0gZ2V0U3RyaW5nKGNvbXBvbmVudCwgInBsYWNlbWVudCIsICJ0b3AiKTsKKwkJCWZvciAoT2JqZWN0IGNvbXAgPSBnZXQoY29tcG9uZW50LCAidGFiIik7CisJCQkJCWNvbXAgIT0gbnVsbDsgY29tcCA9IGdldChjb21wLCAiOm5leHQiKSkgeworCQkJCTxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICdSZWN0YW5nbGUnIj5SZWN0YW5nbGU8L2Vycm9yPiByID0gZ2V0UmVjdGFuZ2xlKGNvbXAsICJib3VuZHMiKTsKKwkJCQlib29sZWFuIGhvdmVyID0gIShzZWxlY3RlZCA9PSBpKSAmJiBpbnNpZGUgJiYKKwkJCQkJKG1vdXNlcHJlc3NlZCA9PSBudWxsKSAmJiAoaW5zaWRlcGFydCA9PSBjb21wKTsKKwkJCQlib29sZWFuIHNlbCA9IChzZWxlY3RlZCA9PSBpKTsKKwkJCQlib29sZWFuIHRhYmVuYWJsZWQgPSBlbmFibGVkICYmIGdldEJvb2xlYW4oY29tcCwgImVuYWJsZWQiLCB0cnVlKTsKKwkJCQlwYWludFJlY3QoZywgci48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAneCciPng8L2Vycm9yPiwgci48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAneSciPnk8L2Vycm9yPiwgci48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAnd2lkdGgnIj53aWR0aDwvZXJyb3I+LCByLjxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICdoZWlnaHQnIj5oZWlnaHQ8L2Vycm9yPiwKKwkJCQkJZW5hYmxlZCA/IGNfYm9yZGVyIDogY19kaXNhYmxlLAorCQkJCQl0YWJlbmFibGVkID8gKHNlbCA/IGNfYmcgOiAoaG92ZXIgPyBjX2hvdmVyIDogY19jdHJsKSkgOiBjX2N0cmwsCisJCQkJCShwbGFjZW1lbnQgIT0gImJvdHRvbSIpIHx8ICFzZWwsIChwbGFjZW1lbnQgIT0gInJpZ2h0IikgfHwgIXNlbCwKKwkJCQkJKHBsYWNlbWVudCA9PSAiYm90dG9tIikgfHwgKChwbGFjZW1lbnQgPT0gInRvcCIpICYmICFzZWwpLAorCQkJCQkocGxhY2VtZW50ID09ICJyaWdodCIpIHx8ICgocGxhY2VtZW50ID09ICJsZWZ0IikgJiYgIXNlbCkpOworCQkJCWlmIChmb2N1cyAmJiBzZWwpIHsKKwkJCQkJZy48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIG1ldGhvZCAnc2V0Q29sb3IoQ29sb3IpJyI+c2V0Q29sb3I8L2Vycm9yPihjX2ZvY3VzKTsKKwkJCQkJZy48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIG1ldGhvZCAnZHJhd1JlY3QoPywgPywgPywgPyknIj5kcmF3UmVjdDwvZXJyb3I+KHIuPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ3gnIj54PC9lcnJvcj4gKyAyLCByLjxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICd5JyI+eTwvZXJyb3I+ICsgMiwgci48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAnd2lkdGgnIj53aWR0aDwvZXJyb3I+IC0gNCwgci48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAnaGVpZ2h0JyI+aGVpZ2h0PC9lcnJvcj4gLSA0KTsKKwkJCQl9CisJCQkJcGFpbnRDb250ZW50KGNvbXAsIGcsIGNsaXB4LCBjbGlweSwgY2xpcHdpZHRoLCBjbGlwaGVpZ2h0LAorCQkJCQlyLjxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICd4JyI+eDwvZXJyb3I+ICsgNCwgci48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAneSciPnk8L2Vycm9yPiArIDIsIHIuPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ3dpZHRoJyI+d2lkdGg8L2Vycm9yPiAtIDgsIHIuPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ2hlaWdodCciPmhlaWdodDwvZXJyb3I+IC0gNCwKKwkJCQkJdGFiZW5hYmxlZCA/IGNfdGV4dCA6IGNfZGlzYWJsZSwgImxlZnQiLCB0cnVlKTsKKwkJCQlpKys7IGxhc3QgPSByOworCQkJfQorCQkJaWYgKGxhc3QgIT0gbnVsbCkgeworCQkJCWJvb2xlYW4gaG9yaXpvbnRhbCA9ICgocGxhY2VtZW50ID09ICJ0b3AiKSB8fCAocGxhY2VtZW50ID09ICJib3R0b20iKSk7CisJCQkJcGFpbnRSZWN0KGcsIGhvcml6b250YWwgPyAobGFzdC48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAneCciPng8L2Vycm9yPiArIGxhc3QuPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ3dpZHRoJyI+d2lkdGg8L2Vycm9yPikgOiBsYXN0LjxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICd4JyI+eDwvZXJyb3I+LAorCQkJCQlob3Jpem9udGFsID8gbGFzdC48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAneSciPnk8L2Vycm9yPiA6IChsYXN0LjxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICd5JyI+eTwvZXJyb3I+ICsgbGFzdC48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAnaGVpZ2h0JyI+aGVpZ2h0PC9lcnJvcj4pLAorCQkJCQlob3Jpem9udGFsID8gKGJvdW5kcy48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAnd2lkdGgnIj53aWR0aDwvZXJyb3I+IC0gbGFzdC48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAneCciPng8L2Vycm9yPiAtIGxhc3QuPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ3dpZHRoJyI+d2lkdGg8L2Vycm9yPikgOiBsYXN0LjxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICd3aWR0aCciPndpZHRoPC9lcnJvcj4sCisJCQkJCWhvcml6b250YWwgPyBsYXN0LjxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICdoZWlnaHQnIj5oZWlnaHQ8L2Vycm9yPiA6IChib3VuZHMuPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ2hlaWdodCciPmhlaWdodDwvZXJyb3I+IC0gbGFzdC48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAneSciPnk8L2Vycm9yPiAtIGxhc3QuPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ2hlaWdodCciPmhlaWdodDwvZXJyb3I+KSwKKwkJCQkJZW5hYmxlZCA/IGNfYm9yZGVyIDogY19kaXNhYmxlLCBjX2JnLAorCQkJCQkocGxhY2VtZW50ICE9ICJ0b3AiKSwgKHBsYWNlbWVudCAhPSAibGVmdCIpLAorCQkJCQkocGxhY2VtZW50ID09ICJ0b3AiKSwgKHBsYWNlbWVudCA9PSAibGVmdCIpKTsKKwkJCQlwYWludFJlY3QoZywgKHBsYWNlbWVudCA9PSAibGVmdCIpID8gbGFzdC48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAnd2lkdGgnIj53aWR0aDwvZXJyb3I+IDogMCwKKwkJCQkJKHBsYWNlbWVudCA9PSAidG9wIikgPyBsYXN0LjxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICdoZWlnaHQnIj5oZWlnaHQ8L2Vycm9yPiA6IDAsCisJCQkJCWhvcml6b250YWwgPyBib3VuZHMuPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ3dpZHRoJyI+d2lkdGg8L2Vycm9yPiA6IChib3VuZHMuPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ3dpZHRoJyI+d2lkdGg8L2Vycm9yPiAtIGxhc3QuPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ3dpZHRoJyI+d2lkdGg8L2Vycm9yPiksCisJCQkJCWhvcml6b250YWwgPyAoYm91bmRzLjxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICdoZWlnaHQnIj5oZWlnaHQ8L2Vycm9yPiAtIGxhc3QuPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ2hlaWdodCciPmhlaWdodDwvZXJyb3I+KSA6IGJvdW5kcy48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAnaGVpZ2h0JyI+aGVpZ2h0PC9lcnJvcj4sCisJCQkJCWVuYWJsZWQgPyBjX2JvcmRlciA6IGNfZGlzYWJsZSwgY19iZywKKwkJCQkJKHBsYWNlbWVudCAhPSAidG9wIiksIChwbGFjZW1lbnQgIT0gImxlZnQiKSwKKwkJCQkJKHBsYWNlbWVudCAhPSAiYm90dG9tIiksIChwbGFjZW1lbnQgIT0gInJpZ2h0IikpOworCQkJfQorCQkJT2JqZWN0IHRhYmNvbnRlbnQgPSBnZXRJdGVtSW1wbChjb21wb25lbnQsICJjb21wb25lbnQiLCBzZWxlY3RlZCk7CisJCQlpZiAodGFiY29udGVudCAhPSBudWxsKSB7CisJCQkJcGFpbnQoZywgY2xpcHgsIGNsaXB5LCBjbGlwd2lkdGgsIGNsaXBoZWlnaHQsIHRhYmNvbnRlbnQsIGVuYWJsZWQpOworCQkJfQorCQl9CisJCWVsc2UgaWYgKCgicGFuZWwiID09IGNsYXNzbmFtZSkgfHwgKCJkaWFsb2ciID09IGNsYXNzbmFtZSkpIHsKKwkJCWlmICgiZGlhbG9nIiA9PSBjbGFzc25hbWUpIHsKKwkJCQlpbnQgdGl0bGVoZWlnaHQgPSBnZXRJbnRlZ2VyKGNvbXBvbmVudCwgInRpdGxlaGVpZ2h0IiwgMCk7CisJCQkJcGFpbnRSZWN0KGcsIDAsIDAsIGJvdW5kcy48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAnd2lkdGgnIj53aWR0aDwvZXJyb3I+LCAzICsgdGl0bGVoZWlnaHQsCisJCQkJCWNfYm9yZGVyLCBjX2N0cmwsIHRydWUsIHRydWUsIGZhbHNlLCB0cnVlKTsKKwkJCQlwYWludFJlY3QoZywgMCwgMyArIHRpdGxlaGVpZ2h0LCBib3VuZHMuPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ3dpZHRoJyI+d2lkdGg8L2Vycm9yPiwgYm91bmRzLjxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICdoZWlnaHQnIj5oZWlnaHQ8L2Vycm9yPiAtIDMgLSB0aXRsZWhlaWdodCwKKwkJCQkJY19ib3JkZXIsIGNfcHJlc3MsIGZhbHNlLCB0cnVlLCB0cnVlLCB0cnVlKTsKKwkJCQlwYWludENvbnRlbnQoY29tcG9uZW50LCBnLCBjbGlweCwgY2xpcHksIGNsaXB3aWR0aCwgY2xpcGhlaWdodCwKKwkJCQkJMywgMiwgYm91bmRzLjxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICd3aWR0aCciPndpZHRoPC9lcnJvcj4gLSA2LCB0aXRsZWhlaWdodCwgY190ZXh0LCAibGVmdCIsIGZhbHNlKTsKKwkJCQlwYWludFJlY3QoZywgMywgMyArIHRpdGxlaGVpZ2h0LCBib3VuZHMuPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ3dpZHRoJyI+d2lkdGg8L2Vycm9yPiAtIDYsIGJvdW5kcy48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAnaGVpZ2h0JyI+aGVpZ2h0PC9lcnJvcj4gLSA2IC0gdGl0bGVoZWlnaHQsCisJCQkJCWNfYm9yZGVyLCBjX2JnLCB0cnVlLCB0cnVlLCB0cnVlLCB0cnVlKTsKKwkJCX0gZWxzZSB7CisJCQkJcGFpbnRSZWN0KGcsIDAsIDAsIGJvdW5kcy48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAnd2lkdGgnIj53aWR0aDwvZXJyb3I+LCBib3VuZHMuPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ2hlaWdodCciPmhlaWdodDwvZXJyb3I+LAorCQkJCQljX2JvcmRlciwgY19iZywgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UpOworCQkJfQorCQkJZm9yIChPYmplY3QgY29tcCA9IGdldChjb21wb25lbnQsICJjb21wb25lbnQiKTsKKwkJCQkJY29tcCAhPSBudWxsOyBjb21wID0gZ2V0KGNvbXAsICI6bmV4dCIpKSB7CisJCQkJcGFpbnQoZywgY2xpcHgsIGNsaXB5LCBjbGlwd2lkdGgsIGNsaXBoZWlnaHQsIGNvbXAsIGVuYWJsZWQpOworCQkJfQorCQl9CisJCWVsc2UgaWYgKCJkZXNrdG9wIiA9PSBjbGFzc25hbWUpIHsKKwkJCXBhaW50UmV2ZXJzZShnLCBjbGlweCwgY2xpcHksIGNsaXB3aWR0aCwgY2xpcGhlaWdodCwKKwkJCQlnZXQoY29tcG9uZW50LCAiY29tcG9uZW50IiksIGVuYWJsZWQpOworCQkJLy9nLnNldENvbG9yKENvbG9yLnJlZCk7IGlmIChjbGlwICE9IG51bGwpIGcuZHJhd1JlY3QoY2xpcHgsIGNsaXB5LCBjbGlwd2lkdGgsIGNsaXBoZWlnaHQpOworCQkJaWYgKHRvb2x0aXBvd25lciAhPSBudWxsKSB7CisJCQkJPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ1JlY3RhbmdsZSciPlJlY3RhbmdsZTwvZXJyb3I+IHIgPSBnZXRSZWN0YW5nbGUodG9vbHRpcG93bmVyLCAidG9vbHRpcGJvdW5kcyIpOworCQkJCXBhaW50UmVjdChnLCByLjxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICd4JyI+eDwvZXJyb3I+LCByLjxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICd5JyI+eTwvZXJyb3I+LCByLjxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICd3aWR0aCciPndpZHRoPC9lcnJvcj4sIHIuPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ2hlaWdodCciPmhlaWdodDwvZXJyb3I+LAorCQkJCQljX2JvcmRlciwgY19iZywgdHJ1ZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSk7CisJCQkJU3RyaW5nIHRleHQgPSBnZXRTdHJpbmcodG9vbHRpcG93bmVyLCAidG9vbHRpcCIsIG51bGwpOworCQkJCWcuPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBtZXRob2QgJ3NldENvbG9yKENvbG9yKSciPnNldENvbG9yPC9lcnJvcj4oY190ZXh0KTsKKwkJCQlnLjxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgbWV0aG9kICdkcmF3U3RyaW5nKGphdmEubGFuZy5TdHJpbmcsID8sID8pJyI+ZHJhd1N0cmluZzwvZXJyb3I+KHRleHQsIHIuPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ3gnIj54PC9lcnJvcj4gKyAyLCByLjxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICd5JyI+eTwvZXJyb3I+ICsgZy48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIG1ldGhvZCAnZ2V0Rm9udE1ldHJpY3MoKSciPmdldEZvbnRNZXRyaWNzPC9lcnJvcj4oKS5nZXRBc2NlbnQoKSArIDIpOyAvL2phdmEKKwkJCQkvL21pZHAgZy5kcmF3U3RyaW5nKHRleHQsIHIueCArIDIsIHIueSArIChyLmhlaWdodCAtIGZvbnQuZ2V0SGVpZ2h0KCkpIC8gMiwgR3JhcGhpY3MuTEVGVCB8IEdyYXBoaWNzLlRPUCk7CisJCQl9CisJCX0KKwkJZWxzZSBpZiAoInNwaW5ib3giID09IGNsYXNzbmFtZSkgeworCQkJcGFpbnRGaWVsZChnLCBjbGlweCwgY2xpcHksIGNsaXB3aWR0aCwgY2xpcGhlaWdodCwgY29tcG9uZW50LAorCQkJCWJvdW5kcy48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAnd2lkdGgnIj53aWR0aDwvZXJyb3I+IC0gYmxvY2ssIGJvdW5kcy48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAnaGVpZ2h0JyI+aGVpZ2h0PC9lcnJvcj4sCisJCQkJaW5zaWRlLCBwcmVzc2VkLCBmb2N1cywgZW5hYmxlZCwgZmFsc2UsIDApOworCQkJcGFpbnRBcnJvdyhnLCBib3VuZHMuPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ3dpZHRoJyI+d2lkdGg8L2Vycm9yPiAtIGJsb2NrLCAwLCBibG9jaywgYm91bmRzLjxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICdoZWlnaHQnIj5oZWlnaHQ8L2Vycm9yPiAvIDIsCisJCQkJCSdOJywgZW5hYmxlZCwgaW5zaWRlLCBwcmVzc2VkLCAidXAiLCB0cnVlLCBmYWxzZSwgZmFsc2UsIHRydWUpOworCQkJcGFpbnRBcnJvdyhnLCBib3VuZHMuPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ3dpZHRoJyI+d2lkdGg8L2Vycm9yPiAtIGJsb2NrLCBib3VuZHMuPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ2hlaWdodCciPmhlaWdodDwvZXJyb3I+IC8gMiwKKwkJCQlibG9jaywgYm91bmRzLjxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICdoZWlnaHQnIj5oZWlnaHQ8L2Vycm9yPiAtIChib3VuZHMuPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ2hlaWdodCciPmhlaWdodDwvZXJyb3I+IC8gMiksCisJCQkJJ1MnLCBlbmFibGVkLCBpbnNpZGUsIHByZXNzZWQsICJkb3duIiwgdHJ1ZSwgZmFsc2UsIHRydWUsIHRydWUpOworCQl9CisJCWVsc2UgaWYgKCJwcm9ncmVzc2JhciIgPT0gY2xhc3NuYW1lKSB7CisJCQlpbnQgbWluaW11bSA9IGdldEludGVnZXIoY29tcG9uZW50LCAibWluaW11bSIsIDApOworCQkJaW50IG1heGltdW0gPSBnZXRJbnRlZ2VyKGNvbXBvbmVudCwgIm1heGltdW0iLCAxMDApOworCQkJaW50IHZhbHVlID0gZ2V0SW50ZWdlcihjb21wb25lbnQsICJ2YWx1ZSIsIDApOworCQkJYm9vbGVhbiBob3Jpem9udGFsID0gKCJ2ZXJ0aWNhbCIgIT0gZ2V0KGNvbXBvbmVudCwgIm9yaWVudGF0aW9uIikpOworCQkJaW50IGxlbmd0aCA9ICh2YWx1ZSAtIG1pbmltdW0pICoKKwkJCQkoKGhvcml6b250YWwgPyBib3VuZHMuPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ3dpZHRoJyI+d2lkdGg8L2Vycm9yPiA6IGJvdW5kcy48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAnaGVpZ2h0JyI+aGVpZ2h0PC9lcnJvcj4pIC0gMSkgLyAobWF4aW11bSAtIG1pbmltdW0pOworCQkJcGFpbnRSZWN0KGcsIDAsIDAsIGhvcml6b250YWwgPyBsZW5ndGggOiBib3VuZHMuPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ3dpZHRoJyI+d2lkdGg8L2Vycm9yPiwKKwkJCQlob3Jpem9udGFsID8gYm91bmRzLjxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICdoZWlnaHQnIj5oZWlnaHQ8L2Vycm9yPiA6IGxlbmd0aCwgZW5hYmxlZCA/IGNfYm9yZGVyIDogY19kaXNhYmxlLAorCQkJCWNfc2VsZWN0LCB0cnVlLCB0cnVlLCBob3Jpem9udGFsLCAhaG9yaXpvbnRhbCk7CisJCQlwYWludFJlY3QoZywgaG9yaXpvbnRhbCA/IGxlbmd0aCA6IDAsIGhvcml6b250YWwgPyAwIDogbGVuZ3RoLAorCQkJCWhvcml6b250YWwgPyAoYm91bmRzLjxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICd3aWR0aCciPndpZHRoPC9lcnJvcj4gLSBsZW5ndGgpIDogYm91bmRzLjxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICd3aWR0aCciPndpZHRoPC9lcnJvcj4JLAorCQkJCWhvcml6b250YWwgPyBib3VuZHMuPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ2hlaWdodCciPmhlaWdodDwvZXJyb3I+IDogKGJvdW5kcy48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAnaGVpZ2h0JyI+aGVpZ2h0PC9lcnJvcj4gLSBsZW5ndGgpLAorCQkJCWVuYWJsZWQgPyBjX2JvcmRlciA6IGNfZGlzYWJsZSwgY19iZywgdHJ1ZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSk7CisJCX0KKwkJZWxzZSBpZiAoInNsaWRlciIgPT0gY2xhc3NuYW1lKSB7CisJCQlpbnQgbWluaW11bSA9IGdldEludGVnZXIoY29tcG9uZW50LCAibWluaW11bSIsIDApOworCQkJaW50IG1heGltdW0gPSBnZXRJbnRlZ2VyKGNvbXBvbmVudCwgIm1heGltdW0iLCAxMDApOworCQkJaW50IHZhbHVlID0gZ2V0SW50ZWdlcihjb21wb25lbnQsICJ2YWx1ZSIsIDApOworCQkJYm9vbGVhbiBob3Jpem9udGFsID0gKCJ2ZXJ0aWNhbCIgIT0gZ2V0KGNvbXBvbmVudCwgIm9yaWVudGF0aW9uIikpOworCQkJaW50IGxlbmd0aCA9ICh2YWx1ZSAtIG1pbmltdW0pICoKKwkJCQkoKGhvcml6b250YWwgPyBib3VuZHMuPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ3dpZHRoJyI+d2lkdGg8L2Vycm9yPiA6IGJvdW5kcy48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAnaGVpZ2h0JyI+aGVpZ2h0PC9lcnJvcj4pIC0gYmxvY2spIC8KKwkJCQkobWF4aW11bSAtIG1pbmltdW0pOworCQkJcGFpbnRSZWN0KGcsIGhvcml6b250YWwgPyAwIDogMywgaG9yaXpvbnRhbCA/IDMgOiAwLAorCQkJCWhvcml6b250YWwgPyBsZW5ndGggOiAoYm91bmRzLjxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICd3aWR0aCciPndpZHRoPC9lcnJvcj4gLSA2KSwKKwkJCQlob3Jpem9udGFsID8gKGJvdW5kcy48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAnaGVpZ2h0JyI+aGVpZ2h0PC9lcnJvcj4gLSA2KSA6IGxlbmd0aCwKKwkJCQllbmFibGVkID8gY19ib3JkZXIgOiBjX2Rpc2FibGUsCisJCQkJY19iZywgdHJ1ZSwgdHJ1ZSwgaG9yaXpvbnRhbCwgIWhvcml6b250YWwpOworCQkJcGFpbnRSZWN0KGcsIGhvcml6b250YWwgPyBsZW5ndGggOiAwLCBob3Jpem9udGFsID8gMCA6IGxlbmd0aCwKKwkJCQlob3Jpem9udGFsID8gYmxvY2sgOiBib3VuZHMuPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ3dpZHRoJyI+d2lkdGg8L2Vycm9yPiwgaG9yaXpvbnRhbCA/IGJvdW5kcy48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAnaGVpZ2h0JyI+aGVpZ2h0PC9lcnJvcj4gOiBibG9jaywKKwkJCQllbmFibGVkID8gY19ib3JkZXIgOiBjX2Rpc2FibGUsCisJCQkJZW5hYmxlZCA/IGNfY3RybCA6IGNfYmcsIHRydWUsIHRydWUsIHRydWUsIHRydWUpOworCQkJaWYgKGZvY3VzKSB7CisJCQkJZy48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIG1ldGhvZCAnc2V0Q29sb3IoQ29sb3IpJyI+c2V0Q29sb3I8L2Vycm9yPihjX2ZvY3VzKTsKKwkJCQlnLjxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgbWV0aG9kICdkcmF3UmVjdChpbnQsIGludCwgaW50LCBpbnQpJyI+ZHJhd1JlY3Q8L2Vycm9yPihob3Jpem9udGFsID8gKGxlbmd0aCArIDIpIDogMiwgaG9yaXpvbnRhbCA/IDIgOiAobGVuZ3RoICsgMiksCisJCQkJCShob3Jpem9udGFsID8gYmxvY2sgOiBib3VuZHMuPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ3dpZHRoJyI+d2lkdGg8L2Vycm9yPikgLSA1LAorCQkJCQkoaG9yaXpvbnRhbCA/IGJvdW5kcy48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAnaGVpZ2h0JyI+aGVpZ2h0PC9lcnJvcj4gOiBibG9jaykgLSA1KTsKKwkJCQkvL2cuZHJhd1JlY3QobGVuZ3RoICsgMSwgMSwgYmxvY2sgLSAzLCBib3VuZHMuaGVpZ2h0IC0gMyk7CisJCQl9CisJCQlwYWludFJlY3QoZywgaG9yaXpvbnRhbCA/IChibG9jayArIGxlbmd0aCkgOiAzLAorCQkJCWhvcml6b250YWwgPyAzIDogKGJsb2NrICsgbGVuZ3RoKSwKKwkJCQlib3VuZHMuPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ3dpZHRoJyI+d2lkdGg8L2Vycm9yPiAtIChob3Jpem9udGFsID8gKGJsb2NrICsgbGVuZ3RoKSA6IDYpLAorCQkJCWJvdW5kcy48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAnaGVpZ2h0JyI+aGVpZ2h0PC9lcnJvcj4gLSAoaG9yaXpvbnRhbCA/IDYgOiAoYmxvY2sgKyBsZW5ndGgpKSwKKwkJCQllbmFibGVkID8gY19ib3JkZXIgOiBjX2Rpc2FibGUsCisJCQkJY19iZywgaG9yaXpvbnRhbCwgIWhvcml6b250YWwsIHRydWUsIHRydWUpOworCQl9CisJCWVsc2UgaWYgKCJzcGxpdHBhbmUiID09IGNsYXNzbmFtZSkgeworCQkJYm9vbGVhbiBob3Jpem9udGFsID0gKCJ2ZXJ0aWNhbCIgIT0gZ2V0KGNvbXBvbmVudCwgIm9yaWVudGF0aW9uIikpOworCQkJaW50IGRpdmlkZXIgPSBnZXRJbnRlZ2VyKGNvbXBvbmVudCwgImRpdmlkZXIiLCAtMSk7CisJCQlwYWludFJlY3QoZywgaG9yaXpvbnRhbCA/IGRpdmlkZXIgOiAwLCBob3Jpem9udGFsID8gMCA6IGRpdmlkZXIsCisJCQkJaG9yaXpvbnRhbCA/IDUgOiBib3VuZHMuPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ3dpZHRoJyI+d2lkdGg8L2Vycm9yPiwgaG9yaXpvbnRhbCA/IGJvdW5kcy48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAnaGVpZ2h0JyI+aGVpZ2h0PC9lcnJvcj4gOiA1LAorCQkJCWNfYm9yZGVyLCBjX2JnLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSk7CisJCQlnLjxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgbWV0aG9kICdzZXRDb2xvcihDb2xvciknIj5zZXRDb2xvcjwvZXJyb3I+KGVuYWJsZWQgPyAoZm9jdXMgPyBjX2ZvY3VzIDogY19ib3JkZXIpIDogY19kaXNhYmxlKTsKKwkJCWludCB4eSA9IGhvcml6b250YWwgPyBib3VuZHMuPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ2hlaWdodCciPmhlaWdodDwvZXJyb3I+IDogYm91bmRzLjxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICd3aWR0aCciPndpZHRoPC9lcnJvcj47CisJCQlpbnQgeHkxID0gTWF0aC5tYXgoMCwgeHkgLyAyIC0gMTIpOworCQkJaW50IHh5MiA9IE1hdGgubWluKHh5IC8gMiArIDEyLCB4eSAtIDEpOworCQkJZm9yIChpbnQgaSA9IGRpdmlkZXIgKyAxOyBpIDwgZGl2aWRlciArIDQ7IGkgKz0gMikgeworCQkJCWlmIChob3Jpem9udGFsKSB7IGcuPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBtZXRob2QgJ2RyYXdMaW5lKGludCwgaW50LCBpbnQsIGludCknIj5kcmF3TGluZTwvZXJyb3I+KGksIHh5MSwgaSwgeHkyKTsgfQorCQkJCQllbHNlIHsgZy48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIG1ldGhvZCAnZHJhd0xpbmUoaW50LCBpbnQsIGludCwgaW50KSciPmRyYXdMaW5lPC9lcnJvcj4oeHkxLCBpLCB4eTIsIGkpOyB9CisJCQl9CisJCQlPYmplY3QgY29tcDEgPSBnZXQoY29tcG9uZW50LCAiY29tcG9uZW50Iik7CisJCQlpZiAoY29tcDEgIT0gbnVsbCkgeworCQkJCXBhaW50KGcsIGNsaXB4LCBjbGlweSwgY2xpcHdpZHRoLCBjbGlwaGVpZ2h0LCBjb21wMSwgZW5hYmxlZCk7CisJCQkJT2JqZWN0IGNvbXAyID0gZ2V0KGNvbXAxLCAiOm5leHQiKTsKKwkJCQlpZiAoY29tcDIgIT0gbnVsbCkgeworCQkJCQlwYWludChnLCBjbGlweCwgY2xpcHksIGNsaXB3aWR0aCwgY2xpcGhlaWdodCwgY29tcDIsIGVuYWJsZWQpOworCQkJCX0KKwkJCX0KKwkJfQorCQllbHNlIGlmICgoImxpc3QiID09IGNsYXNzbmFtZSkgfHwKKwkJCQkoInRhYmxlIiA9PSBjbGFzc25hbWUpIHx8ICgidHJlZSIgPT0gY2xhc3NuYW1lKSkgeworCQkJPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ1JlY3RhbmdsZSciPlJlY3RhbmdsZTwvZXJyb3I+IHZpZXcgPSBnZXRSZWN0YW5nbGUoY29tcG9uZW50LCAiOnZpZXciKTsKKwkJCTxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICdSZWN0YW5nbGUnIj5SZWN0YW5nbGU8L2Vycm9yPiB2aWV3cG9ydCA9IGdldFJlY3RhbmdsZShjb21wb25lbnQsICI6cG9ydCIpOworCQkJaW50W10gY29sdW1ud2lkdGhzID0gbnVsbDsKKwkJCWludCBseCA9IGNsaXB4IC0gdmlld3BvcnQuPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ3gnIj54PC9lcnJvcj4gLSAxOworCQkJaW50IHhmcm9tID0gdmlldy48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAneCciPng8L2Vycm9yPiArIE1hdGgubWF4KDAsIGx4KTsKKwkJCWludCB4dG8gPSB2aWV3LjxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICd4JyI+eDwvZXJyb3I+ICsgTWF0aC5taW48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIG1ldGhvZCAnbWluKD8sIGludCknIj4odmlld3BvcnQuPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ3dpZHRoJyI+d2lkdGg8L2Vycm9yPiAtIDIsIGx4ICsgY2xpcHdpZHRoKTwvZXJyb3I+OworCQkJaWYgKCJ0YWJsZSIgPT0gY2xhc3NuYW1lKSB7CisJCQkJY29sdW1ud2lkdGhzID0gbmV3IGludFtnZXRJdGVtQ291bnRJbXBsKGNvbXBvbmVudCwgImNvbHVtbiIpXTsKKwkJCQlpbnQgaSA9IDA7IGludCB4ID0gMDsgYm9vbGVhbiBkcmF3aGVhZGVyID0gKGNsaXB5IDwgdmlld3BvcnQuPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ3knIj55PC9lcnJvcj4pOworCQkJCWlmIChkcmF3aGVhZGVyKSB7IGcuPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBtZXRob2QgJ3NldENsaXAoPywgaW50LCA/LCA/KSciPnNldENsaXA8L2Vycm9yPih2aWV3cG9ydC48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAneCciPng8L2Vycm9yPiwgMCwgdmlld3BvcnQuPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ3dpZHRoJyI+d2lkdGg8L2Vycm9yPiwgdmlld3BvcnQuPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ3knIj55PC9lcnJvcj4pOyB9CisJCQkJZm9yIChPYmplY3QgY29sdW1uID0gZ2V0KGNvbXBvbmVudCwgImNvbHVtbiIpOworCQkJCQkJY29sdW1uICE9IG51bGw7IGNvbHVtbiA9IGdldChjb2x1bW4sICI6bmV4dCIpKSB7CisJCQkJCWJvb2xlYW4gbGFzdGNvbHVtbiA9IChpID09IGNvbHVtbndpZHRocy5sZW5ndGggLSAxKTsKKwkJCQkJaW50IHdpZHRoID0gZ2V0SW50ZWdlcihjb2x1bW4sICJ3aWR0aCIsIDgwKTsKKwkJCQkJaWYgKGxhc3Rjb2x1bW4pIHsgd2lkdGggPSBNYXRoLm1heDxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgbWV0aG9kICdtYXgoaW50LCA/KSciPih3aWR0aCwgdmlld3BvcnQuPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ3dpZHRoJyI+d2lkdGg8L2Vycm9yPiAtIHgpPC9lcnJvcj47IH0KKwkJCQkJY29sdW1ud2lkdGhzW2ldID0gd2lkdGg7CisJCQkJCWlmIChkcmF3aGVhZGVyICYmICh4ZnJvbSA8IHggKyB3aWR0aCkgJiYgKHh0byA+IHgpKSB7CisJCQkJCQlwYWludFJlY3QoZywgeCAtIHZpZXcuPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ3gnIj54PC9lcnJvcj4sIDAsIHdpZHRoLCB2aWV3cG9ydC48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAneSciPnk8L2Vycm9yPiwKKwkJCQkJCQllbmFibGVkID8gY19ib3JkZXIgOiBjX2Rpc2FibGUsIGVuYWJsZWQgPyBjX2N0cmwgOiBjX2JnLAorCQkJCQkJCXRydWUsIHRydWUsIGZhbHNlLCBsYXN0Y29sdW1uKTsKKwkJCQkJCXBhaW50Q29udGVudChjb2x1bW4sIGcsIGNsaXB4LCBjbGlweSwgY2xpcHdpZHRoLCBjbGlwaGVpZ2h0LAorCQkJCQkJCXggKyAyIC0gdmlldy48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAneCciPng8L2Vycm9yPiwgMSwgd2lkdGggLSAyLAorCQkJCQkJCXZpZXdwb3J0LjxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICd5JyI+eTwvZXJyb3I+IC0gMiwgZW5hYmxlZCA/IGNfdGV4dCA6IGNfZGlzYWJsZSwgImxlZnQiLCBmYWxzZSk7CisJCQkJCX0KKwkJCQkJaSsrOyB4ICs9IHdpZHRoOworCQkJCX0KKwkJCQlpZiAoZHJhd2hlYWRlcikgeyBnLjxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgbWV0aG9kICdzZXRDbGlwKGludCwgaW50LCBpbnQsIGludCknIj5zZXRDbGlwPC9lcnJvcj4oY2xpcHgsIGNsaXB5LCBjbGlwd2lkdGgsIGNsaXBoZWlnaHQpOyB9CisJCQl9CisJCQlwYWludFJlY3QoZywgdmlld3BvcnQuPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ3gnIj54PC9lcnJvcj4sIHZpZXdwb3J0LjxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICd5JyI+eTwvZXJyb3I+LCB2aWV3cG9ydC48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAnd2lkdGgnIj53aWR0aDwvZXJyb3I+LCB2aWV3cG9ydC48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAnaGVpZ2h0JyI+aGVpZ2h0PC9lcnJvcj4sCisJCQkJZW5hYmxlZCA/IGNfYm9yZGVyIDogY19kaXNhYmxlLCBjX3RleHRiZywgdHJ1ZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSk7CisJCQlpZiAocGFpbnRTY3JvbGxQYW5lKGcsIGNsaXB4LCBjbGlweSwgY2xpcHdpZHRoLCBjbGlwaGVpZ2h0LCBib3VuZHMsCisJCQkJCXZpZXcsIHZpZXdwb3J0LCBlbmFibGVkLCBpbnNpZGUsIHByZXNzZWQpKSB7CisJCQkJT2JqZWN0IGxlYWQgPSBnZXQoY29tcG9uZW50LCAibGVhZCIpOworCQkJCWludCBseSA9IGNsaXB5IC0gdmlld3BvcnQuPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ3knIj55PC9lcnJvcj4gLSAxOworCQkJCWludCB5ZnJvbSA9IHZpZXcuPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ3knIj55PC9lcnJvcj4gKyBNYXRoLm1heCgwLCBseSk7CisJCQkJaW50IHl0byA9IHZpZXcuPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ3knIj55PC9lcnJvcj4gKyBNYXRoLm1pbjxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgbWV0aG9kICdtaW4oPywgaW50KSciPih2aWV3cG9ydC48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAnaGVpZ2h0JyI+aGVpZ2h0PC9lcnJvcj4gLSAyLCBseSArIGNsaXBoZWlnaHQpPC9lcnJvcj47CisJCQkJZm9yIChPYmplY3QgaXRlbSA9IGdldChjb21wb25lbnQsICgibGlzdCIgPT0gY2xhc3NuYW1lKSA/ICJpdGVtIiA6CisJCQkJCQkoKCJ0YWJsZSIgPT0gY2xhc3NuYW1lKSA/ICJyb3ciIDogIm5vZGUiKSk7IGl0ZW0gIT0gbnVsbDspIHsKKwkJCQkJPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ1JlY3RhbmdsZSciPlJlY3RhbmdsZTwvZXJyb3I+IHIgPSBnZXRSZWN0YW5nbGUoaXRlbSwgImJvdW5kcyIpOworCQkJCQlpZiAobGVhZCA9PSBudWxsKSB7CisJCQkJCQlzZXQoY29tcG9uZW50LCAibGVhZCIsIGxlYWQgPSBpdGVtKTsgLy8gZHJhdyBmaXJzdCBpdGVtIGZvY3VzZWQgd2hlbiBsZWFkIGlzIG51bGwKKwkJCQkJfQorCQkJCQlpZiAoeXRvIDw9IHIuPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ3knIj55PC9lcnJvcj4pIHsgYnJlYWs7IH0gLy8gdGhlIGNsaXAgYm91bmRzIGFyZSBhYm92ZQorCisJCQkJCU9iamVjdCBuZXh0ID0gKCJ0cmVlIiA9PSBjbGFzc25hbWUpID8gZ2V0KGl0ZW0sICJub2RlIikgOiBudWxsOworCQkJCQlib29sZWFuIGV4cGFuZGVkID0gKG5leHQgIT0gbnVsbCkgJiYKKwkJCQkJCQlnZXRCb29sZWFuKGl0ZW0sICJleHBhbmRlZCIsIHRydWUpOworCQkJCQlpZiAoeWZyb20gPCByLjxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICd5JyI+eTwvZXJyb3I+ICsgci48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAnaGVpZ2h0JyI+aGVpZ2h0PC9lcnJvcj4pIHsgLy8gdGhlIGNsaXAgcmVjdGFuZ2xlIGlzIG5vdCBiZWxsb3cgdGhlIGN1cnJlbnQgaXRlbQorCQkJCQkJYm9vbGVhbiBzZWxlY3RlZCA9IGdldEJvb2xlYW4oaXRlbSwgInNlbGVjdGVkIiwgZmFsc2UpOworCQkJCQkJcGFpbnRSZWN0KGcsIDAsIHIuPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ3knIj55PC9lcnJvcj4sIHZpZXcuPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ3dpZHRoJyI+d2lkdGg8L2Vycm9yPiwgci48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAnaGVpZ2h0JyI+aGVpZ2h0PC9lcnJvcj4sCisJCQkJCQkJY19iZywgc2VsZWN0ZWQgPyBjX3NlbGVjdCA6IGNfdGV4dGJnLCBmYWxzZSwgZmFsc2UsIHRydWUsIGZhbHNlKTsKKwkJCQkJCWlmIChmb2N1cyAmJiAobGVhZCA9PSBpdGVtKSkgeworCQkJCQkJCWcuPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBtZXRob2QgJ3NldENvbG9yKENvbG9yKSciPnNldENvbG9yPC9lcnJvcj4oY19mb2N1cyk7CisJCQkJCQkJZy48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIG1ldGhvZCAnZHJhd1JlY3QoaW50LCA/LCA/LCA/KSciPmRyYXdSZWN0PC9lcnJvcj4oMCwgci48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAneSciPnk8L2Vycm9yPiwgdmlldy48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAnd2lkdGgnIj53aWR0aDwvZXJyb3I+IC0gMSwgci48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAnaGVpZ2h0JyI+aGVpZ2h0PC9lcnJvcj4gLSAyKTsKKwkJCQkJCX0KKwkJCQkJCWlmICgidGFibGUiID09IGNsYXNzbmFtZSkgeworCQkJCQkJCWludCB4ID0gMDsgaW50IGkgPSAwOworCQkJCQkJCWZvciAoT2JqZWN0IGNlbGwgPSBnZXQoaXRlbSwgImNlbGwiKTsKKwkJCQkJCQkJCWNlbGwgIT0gbnVsbDsgY2VsbCA9IGdldChjZWxsLCAiOm5leHQiKSkgeworCQkJCQkJCQlpZiAoeHRvIDw9IHgpIHsgYnJlYWs7IH0KKwkJCQkJCQkJaW50IGl3aWR0aCA9IChpIDwgY29sdW1ud2lkdGhzLmxlbmd0aCkgPyBjb2x1bW53aWR0aHNbaV0gOiA4MDsKKwkJCQkJCQkJaWYgKHhmcm9tIDwgeCArIGl3aWR0aCkgeworCQkJCQkJCQkJYm9vbGVhbiBjZWxsZW5hYmxlZCA9IGVuYWJsZWQgJiYgZ2V0Qm9vbGVhbihjZWxsLCAiZW5hYmxlZCIsIHRydWUpOworCQkJCQkJCQkJcGFpbnRDb250ZW50KGNlbGwsIGcsIHhmcm9tLCB5ZnJvbSwgeHRvIC0geGZyb20sIHl0byAtIHlmcm9tLAorCQkJCQkJCQkJCXIuPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ3gnIj54PC9lcnJvcj4gKyB4ICsgMSwgci48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAneSciPnk8L2Vycm9yPiArIDEsIGl3aWR0aCAtIDIsIHIuPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ2hlaWdodCciPmhlaWdodDwvZXJyb3I+IC0gMywKKwkJCQkJCQkJCQljZWxsZW5hYmxlZCA/IGNfdGV4dCA6IGNfZGlzYWJsZSwgImxlZnQiLCBmYWxzZSk7CisJCQkJCQkJCX0KKwkJCQkJCQkJeCArPSBpd2lkdGg7IGkrKzsKKwkJCQkJCQl9CisJCQkJCQl9IGVsc2UgeworCQkJCQkJCWJvb2xlYW4gaXRlbWVuYWJsZWQgPSBlbmFibGVkICYmIGdldEJvb2xlYW4oaXRlbSwgImVuYWJsZWQiLCB0cnVlKTsKKwkJCQkJCQlwYWludENvbnRlbnQoaXRlbSwgZywgeGZyb20sIHlmcm9tLCB4dG8gLSB4ZnJvbSwgeXRvIC0geWZyb20sCisJCQkJCQkJCXIuPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ3gnIj54PC9lcnJvcj4gKyAxLCByLjxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICd5JyI+eTwvZXJyb3I+ICsgMSwgdmlldy48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAnd2lkdGgnIj53aWR0aDwvZXJyb3I+IC0gci48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAneCciPng8L2Vycm9yPiAtIDIsCisJCQkJCQkJCXIuPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ2hlaWdodCciPmhlaWdodDwvZXJyb3I+IC0gMywgaXRlbWVuYWJsZWQgPyBjX3RleHQgOiBjX2Rpc2FibGUsICJsZWZ0IiwgZmFsc2UpOworCisJCQkJCQkJaWYgKG5leHQgIT0gbnVsbCkgeworCQkJCQkJCQlpbnQgeCA9IHIuPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ3gnIj54PC9lcnJvcj4gLSBibG9jayAvIDI7CisJCQkJCQkJCWludCB5ID0gci48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAneSciPnk8L2Vycm9yPiArIChyLjxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICdoZWlnaHQnIj5oZWlnaHQ8L2Vycm9yPiAtIDEpIC8gMjsKKwkJCQkJCQkJLy9nLmRyYXdSZWN0KHggLSA0LCB5IC0gNCwgOCwgOCk7CisJCQkJCQkJCXBhaW50UmVjdChnLCB4IC0gNCwgeSAtIDQsIDksIDksIGl0ZW1lbmFibGVkID8gY19ib3JkZXIgOiBjX2Rpc2FibGUsCisJCQkJCQkJCQlpdGVtZW5hYmxlZCA/IGNfY3RybCA6IGNfYmcsIHRydWUsIHRydWUsIHRydWUsIHRydWUpOworCQkJCQkJCQlnLjxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgbWV0aG9kICdzZXRDb2xvcihDb2xvciknIj5zZXRDb2xvcjwvZXJyb3I+KGl0ZW1lbmFibGVkID8gY190ZXh0IDogY19kaXNhYmxlKTsKKwkJCQkJCQkJZy48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIG1ldGhvZCAnZHJhd0xpbmUoaW50LCBpbnQsIGludCwgaW50KSciPmRyYXdMaW5lPC9lcnJvcj4oeCAtIDIsIHksIHggKyAyLCB5KTsKKwkJCQkJCQkJaWYgKCFleHBhbmRlZCkgeworCQkJCQkJCQkJZy48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIG1ldGhvZCAnZHJhd0xpbmUoaW50LCBpbnQsIGludCwgaW50KSciPmRyYXdMaW5lPC9lcnJvcj4oeCwgeSAtIDIsIHgsIHkgKyAyKTsKKwkJCQkJCQkJfQorCQkJCQkJCX0KKwkJCQkJCX0KKwkJCQkJfQorCQkJCQlpZiAoInRyZWUiID09IGNsYXNzbmFtZSkgeworCQkJCQkJaWYgKChuZXh0ID09IG51bGwpIHx8ICFleHBhbmRlZCkgeworCQkJCQkJCXdoaWxlICgoaXRlbSAhPSBjb21wb25lbnQpICYmICgobmV4dCA9IGdldChpdGVtLCAiOm5leHQiKSkgPT0gbnVsbCkpIHsKKwkJCQkJCQkJaXRlbSA9IGdldFBhcmVudChpdGVtKTsKKwkJCQkJCQl9CisJCQkJCQl9CisJCQkJCQlpdGVtID0gbmV4dDsKKwkJCQkJfSBlbHNlIHsKKwkJCQkJCWl0ZW0gPSBnZXQoaXRlbSwgIjpuZXh0Iik7CisJCQkJCX0KKwkJCQl9CisJCQkJLyppZiAoY29sdW1ud2lkdGhzICE9IG51bGwpIHsKKwkJCQkJZy5zZXRDb2xvcihjX2JnKTsKKwkJCQkJZm9yIChpbnQgaSA9IDAsIGN4ID0gLTE7IGkgPCBjb2x1bW53aWR0aHMubGVuZ3RoIC0gMTsgaSsrKSB7CisJCQkJCQljeCArPSBjb2x1bW53aWR0aHNbaV07CisJCQkJCQlnLmRyYXdMaW5lKGN4LCAwLCBjeCwgdmlldy5oZWlnaHQpOworCQkJCQl9CisJCQkJfSovCisJCQkJcmVzZXRTY3JvbGxQYW5lKGcsIGNsaXB4LCBjbGlweSwgY2xpcHdpZHRoLCBjbGlwaGVpZ2h0LCB2aWV3LCB2aWV3cG9ydCk7CisJCQl9CisJCX0KKwkJZWxzZSBpZiAoInNlcGFyYXRvciIgPT0gY2xhc3NuYW1lKSB7CisJCQlnLjxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgbWV0aG9kICdzZXRDb2xvcihDb2xvciknIj5zZXRDb2xvcjwvZXJyb3I+KGVuYWJsZWQgPyBjX2JvcmRlciA6IGNfZGlzYWJsZSk7CisJCQlnLjxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgbWV0aG9kICdmaWxsUmVjdChpbnQsIGludCwgPywgPyknIj5maWxsUmVjdDwvZXJyb3I+KDAsIDAsIGJvdW5kcy48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAnd2lkdGgnIj53aWR0aDwvZXJyb3I+LCBib3VuZHMuPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ2hlaWdodCciPmhlaWdodDwvZXJyb3I+KTsKKwkJfQorCQllbHNlIGlmICgibWVudWJhciIgPT0gY2xhc3NuYW1lKSB7CisJCQlPYmplY3Qgc2VsZWN0ZWQgPSBnZXQoY29tcG9uZW50LCAic2VsZWN0ZWQiKTsKKwkJCWludCBsYXN0eCA9IDA7CisJCQlmb3IgKE9iamVjdCBtZW51ID0gZ2V0KGNvbXBvbmVudCwgIm1lbnUiKTsKKwkJCQkJbWVudSAhPSBudWxsOyBtZW51ID0gZ2V0KG1lbnUsICI6bmV4dCIpKSB7CisJCQkJPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ1JlY3RhbmdsZSciPlJlY3RhbmdsZTwvZXJyb3I+IG1iID0gZ2V0UmVjdGFuZ2xlKG1lbnUsICJib3VuZHMiKTsKKwkJCQlpZiAoY2xpcHggKyBjbGlwd2lkdGggPD0gbWIuPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ3gnIj54PC9lcnJvcj4pIHsgYnJlYWs7IH0KKwkJCQlpZiAoY2xpcHggPj0gbWIuPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ3gnIj54PC9lcnJvcj4gKyBtYi48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAnd2lkdGgnIj53aWR0aDwvZXJyb3I+KSB7IGNvbnRpbnVlOyB9CisJCQkJYm9vbGVhbiBhcm1lZCA9IChzZWxlY3RlZCA9PSBtZW51KTsKKwkJCQlib29sZWFuIGhvb3ZlciA9IChzZWxlY3RlZCA9PSBudWxsKSAmJiAoaW5zaWRlcGFydCA9PSBtZW51KTsKKwkJCQlwYWludFJlY3QoZywgbWIuPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ3gnIj54PC9lcnJvcj4sIDAsIG1iLjxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICd3aWR0aCciPndpZHRoPC9lcnJvcj4sIGJvdW5kcy48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAnaGVpZ2h0JyI+aGVpZ2h0PC9lcnJvcj4sIGVuYWJsZWQgPyBjX2JvcmRlciA6IGNfZGlzYWJsZSwKKwkJCQkJZW5hYmxlZCA/IChhcm1lZCA/IGNfc2VsZWN0IDogKGhvb3ZlciA/IGNfaG92ZXIgOiBjX2N0cmwpKSA6IGNfYmcsCisJCQkJCWFybWVkLCBhcm1lZCwgdHJ1ZSwgYXJtZWQpOworCQkJCXBhaW50Q29udGVudChtZW51LCBnLCBjbGlweCwgY2xpcHksIGNsaXB3aWR0aCwgY2xpcGhlaWdodCwKKwkJCQkJbWIuPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ3gnIj54PC9lcnJvcj4gKyA0LCAxLCBtYi48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAnd2lkdGgnIj53aWR0aDwvZXJyb3I+LCBib3VuZHMuPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ2hlaWdodCciPmhlaWdodDwvZXJyb3I+LAorCQkJCQkoZW5hYmxlZCAmJiBnZXRCb29sZWFuKG1lbnUsICJlbmFibGVkIiwgdHJ1ZSkpID8gY190ZXh0IDogY19kaXNhYmxlLAorCQkJCQkibGVmdCIsIHRydWUpOworCQkJCWxhc3R4ID0gbWIuPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ3gnIj54PC9lcnJvcj4gKyBtYi48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAnd2lkdGgnIj53aWR0aDwvZXJyb3I+OworCQkJfQorCQkJcGFpbnRSZWN0KGcsIGxhc3R4LCAwLCBib3VuZHMuPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ3dpZHRoJyI+d2lkdGg8L2Vycm9yPiAtIGxhc3R4LCBib3VuZHMuPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ2hlaWdodCciPmhlaWdodDwvZXJyb3I+LAorCQkJCWVuYWJsZWQgPyBjX2JvcmRlciA6IGNfZGlzYWJsZSwgZW5hYmxlZCA/IGNfY3RybCA6IGNfYmcsCisJCQkJZmFsc2UsIGZhbHNlLCB0cnVlLCBmYWxzZSk7CisJCX0KKwkJZWxzZSBpZiAoInBvcHVwbWVudSIgPT0gY2xhc3NuYW1lKSB7CisJCQlwYWludFJlY3QoZywgMCwgMCwgYm91bmRzLjxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICd3aWR0aCciPndpZHRoPC9lcnJvcj4sIGJvdW5kcy48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAnaGVpZ2h0JyI+aGVpZ2h0PC9lcnJvcj4sCisJCQkJY19ib3JkZXIsIGNfYmcsIHRydWUsIHRydWUsIHRydWUsIHRydWUpOworCQkJT2JqZWN0IHNlbGVjdGVkID0gZ2V0KGNvbXBvbmVudCwgInNlbGVjdGVkIik7CisJCQlmb3IgKE9iamVjdCBtZW51ID0gZ2V0KGdldChjb21wb25lbnQsICJtZW51IiksICJtZW51Iik7CisJCQkJCW1lbnUgIT0gbnVsbDsgbWVudSA9IGdldChtZW51LCAiOm5leHQiKSkgeworCQkJCTxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICdSZWN0YW5nbGUnIj5SZWN0YW5nbGU8L2Vycm9yPiByID0gZ2V0UmVjdGFuZ2xlKG1lbnUsICJib3VuZHMiKTsKKwkJCQlpZiAoY2xpcHkgKyBjbGlwaGVpZ2h0IDw9IHIuPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ3knIj55PC9lcnJvcj4pIHsgYnJlYWs7IH0KKwkJCQlpZiAoY2xpcHkgPj0gci48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAneSciPnk8L2Vycm9yPiArIHIuPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ2hlaWdodCciPmhlaWdodDwvZXJyb3I+KSB7IGNvbnRpbnVlOyB9CisJCQkJU3RyaW5nIGl0ZW1jbGFzcyA9IGdldENsYXNzKG1lbnUpOworCQkJCWlmIChpdGVtY2xhc3MgPT0gInNlcGFyYXRvciIpIHsKKwkJCQkJZy48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIG1ldGhvZCAnc2V0Q29sb3IoQ29sb3IpJyI+c2V0Q29sb3I8L2Vycm9yPihjX2JvcmRlcik7CisJCQkJCWcuPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBtZXRob2QgJ2ZpbGxSZWN0KD8sID8sID8sID8pJyI+ZmlsbFJlY3Q8L2Vycm9yPihyLjxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICd4JyI+eDwvZXJyb3I+LCByLjxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICd5JyI+eTwvZXJyb3I+LCBib3VuZHMuPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ3dpZHRoJyI+d2lkdGg8L2Vycm9yPiAtIDIsIHIuPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ2hlaWdodCciPmhlaWdodDwvZXJyb3I+KTsKKwkJCQl9IGVsc2UgeworCQkJCQlib29sZWFuIGFybWVkID0gKHNlbGVjdGVkID09IG1lbnUpOworCQkJCQlib29sZWFuIG1lbnVlbmFibGVkID0gZ2V0Qm9vbGVhbihtZW51LCAiZW5hYmxlZCIsIHRydWUpOworCQkJCQlwYWludFJlY3QoZywgci48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAneCciPng8L2Vycm9yPiwgci48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAneSciPnk8L2Vycm9yPiwgYm91bmRzLjxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICd3aWR0aCciPndpZHRoPC9lcnJvcj4gLSAyLCByLjxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICdoZWlnaHQnIj5oZWlnaHQ8L2Vycm9yPiwgY19ib3JkZXIsCisJCQkJCQlhcm1lZCA/IGNfc2VsZWN0IDogY19iZywgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UpOworCQkJCQlpbnQgdHggPSByLjxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICd4JyI+eDwvZXJyb3I+OworCQkJCQlpZiAoaXRlbWNsYXNzID09ICJjaGVja2JveG1lbnVpdGVtIikgeworCQkJCQkJdHggKz0gYmxvY2sgKyAzOworCQkJCQkJYm9vbGVhbiBjaGVja2VkID0gZ2V0Qm9vbGVhbihtZW51LCAic2VsZWN0ZWQiLCBmYWxzZSk7CisJCQkJCQlTdHJpbmcgZ3JvdXAgPSBnZXRTdHJpbmcobWVudSwgImdyb3VwIiwgbnVsbCk7CisJCQkJCQlnLjxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgbWV0aG9kICd0cmFuc2xhdGUoPywgPyknIj50cmFuc2xhdGU8L2Vycm9yPihyLjxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICd4JyI+eDwvZXJyb3I+ICsgNCwgci48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAneSciPnk8L2Vycm9yPiArIDIpOworCQkJCQkJZy48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIG1ldGhvZCAnc2V0Q29sb3IoQ29sb3IpJyI+c2V0Q29sb3I8L2Vycm9yPihtZW51ZW5hYmxlZCA/IGNfYm9yZGVyIDogY19kaXNhYmxlKTsKKwkJCQkJCWlmIChncm91cCA9PSBudWxsKSB7CisJCQkJCQkJZy48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIG1ldGhvZCAnZHJhd1JlY3QoaW50LCBpbnQsIGludCwgaW50KSciPmRyYXdSZWN0PC9lcnJvcj4oMSwgMSwgYmxvY2sgLSAzLCBibG9jayAtIDMpOworCQkJCQkJfSBlbHNlIHsKKwkJCQkJCQlnLjxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgbWV0aG9kICdkcmF3T3ZhbChpbnQsIGludCwgaW50LCBpbnQpJyI+ZHJhd092YWw8L2Vycm9yPigxLCAxLCBibG9jayAtIDMsIGJsb2NrIC0gMyk7IC8vamF2YQorCQkJCQkJfQorCQkJCQkJaWYgKGNoZWNrZWQpIHsKKwkJCQkJCQlnLjxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgbWV0aG9kICdzZXRDb2xvcihDb2xvciknIj5zZXRDb2xvcjwvZXJyb3I+KG1lbnVlbmFibGVkID8gY190ZXh0IDogY19kaXNhYmxlKTsKKwkJCQkJCQlpZiAoZ3JvdXAgPT0gbnVsbCkgeworCQkJCQkJCQlnLjxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgbWV0aG9kICdmaWxsUmVjdChpbnQsIGludCwgaW50LCBpbnQpJyI+ZmlsbFJlY3Q8L2Vycm9yPigzLCBibG9jayAtIDksIDIsIDYpOworCQkJCQkJCQlnLjxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgbWV0aG9kICdkcmF3TGluZShpbnQsIGludCwgaW50LCBpbnQpJyI+ZHJhd0xpbmU8L2Vycm9yPigzLCBibG9jayAtIDQsIGJsb2NrIC0gNCwgMyk7CisJCQkJCQkJCWcuPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBtZXRob2QgJ2RyYXdMaW5lKGludCwgaW50LCBpbnQsIGludCknIj5kcmF3TGluZTwvZXJyb3I+KDQsIGJsb2NrIC0gNCwgYmxvY2sgLSA0LCA0KTsKKwkJCQkJCQl9IGVsc2UgeworCQkJCQkJCQlnLjxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgbWV0aG9kICdmaWxsT3ZhbChpbnQsIGludCwgaW50LCBpbnQpJyI+ZmlsbE92YWw8L2Vycm9yPig1LCA1LCBibG9jayAtIDEwLCBibG9jayAtIDEwKTsgLy9qYXZhCisJCQkJCQkJCWcuPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBtZXRob2QgJ2RyYXdPdmFsKGludCwgaW50LCBpbnQsIGludCknIj5kcmF3T3ZhbDwvZXJyb3I+KDQsIDQsIGJsb2NrIC0gOSwgYmxvY2sgLSA5KTsgLy9qYXZhCisJCQkJCQkJfQorCQkJCQkJfQorCQkJCQkJZy48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIG1ldGhvZCAndHJhbnNsYXRlKD8sID8pJyI+dHJhbnNsYXRlPC9lcnJvcj4oLXIuPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ3gnIj54PC9lcnJvcj4gLSA0LCAtci48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAneSciPnk8L2Vycm9yPiAtIDIpOworCQkJCQl9CisJCQkJCXBhaW50Q29udGVudChtZW51LCBnLCBjbGlweCwgY2xpcHksIGNsaXB3aWR0aCwgY2xpcGhlaWdodCwKKwkJCQkJCXR4ICsgNCwgci48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAneSciPnk8L2Vycm9yPiArIDIsIGJvdW5kcy48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAnd2lkdGgnIj53aWR0aDwvZXJyb3I+IC0gMTAsCisJCQkJCQlyLjxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICdoZWlnaHQnIj5oZWlnaHQ8L2Vycm9yPiAtIDQsIG1lbnVlbmFibGVkID8gY190ZXh0IDogY19kaXNhYmxlLCAibGVmdCIsIHRydWUpOworCQkJCQlpZiAoaXRlbWNsYXNzID09ICJtZW51IikgeworCQkJCQkJcGFpbnRBcnJvdyhnLCByLjxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICd4JyI+eDwvZXJyb3I+ICsgYm91bmRzLjxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICd3aWR0aCciPndpZHRoPC9lcnJvcj4gLSBibG9jaywgci48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAneSciPnk8L2Vycm9yPiwgYmxvY2ssIHIuPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ2hlaWdodCciPmhlaWdodDwvZXJyb3I+LCAnRScpOworCQkJCQl9CisJCQkJfQorCQkJfQorCQl9CisJCS8vamF2YT4KKwkJZWxzZSBpZiAoImJlYW4iID09IGNsYXNzbmFtZSkgeworCQkJCWcuPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBtZXRob2QgJ2NsaXBSZWN0KGludCwgaW50LCA/LCA/KSciPmNsaXBSZWN0PC9lcnJvcj4oMCwgMCwgYm91bmRzLjxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICd3aWR0aCciPndpZHRoPC9lcnJvcj4sIGJvdW5kcy48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAnaGVpZ2h0JyI+aGVpZ2h0PC9lcnJvcj4pOworCQkJCSgoQ29tcG9uZW50KSBnZXQoY29tcG9uZW50LCAiYmVhbiIpKS5wYWludChnKTsKKwkJCQlnLjxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgbWV0aG9kICdzZXRDbGlwKGludCwgaW50LCBpbnQsIGludCknIj5zZXRDbGlwPC9lcnJvcj4oY2xpcHgsIGNsaXB5LCBjbGlwd2lkdGgsIGNsaXBoZWlnaHQpOworCQl9CisJCS8vPGphdmEKKwkJZWxzZSB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKChTdHJpbmcpIGNsYXNzbmFtZSk7CisJCWcuPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBtZXRob2QgJ3RyYW5zbGF0ZSg/LCA/KSciPnRyYW5zbGF0ZTwvZXJyb3I+KC1ib3VuZHMuPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ3gnIj54PC9lcnJvcj4sIC1ib3VuZHMuPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ3knIj55PC9lcnJvcj4pOworCQljbGlweCArPSBib3VuZHMuPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ3gnIj54PC9lcnJvcj47IGNsaXB5ICs9IGJvdW5kcy48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAneSciPnk8L2Vycm9yPjsKKwl9CisKKwkvKioKKwkgKgorCSAqLworCXByaXZhdGUgdm9pZCBwYWludFJldmVyc2UoPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ0dyYXBoaWNzJyI+R3JhcGhpY3M8L2Vycm9yPiBnLAorCQkJaW50IGNsaXB4LCBpbnQgY2xpcHksIGludCBjbGlwd2lkdGgsIGludCBjbGlwaGVpZ2h0LAorCQkJT2JqZWN0IGNvbXBvbmVudCwgYm9vbGVhbiBlbmFibGVkKSB7CisJCWlmIChjb21wb25lbnQgIT0gbnVsbCkgeworCQkJPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ1JlY3RhbmdsZSciPlJlY3RhbmdsZTwvZXJyb3I+IGJvdW5kcyA9IGdldFJlY3RhbmdsZShjb21wb25lbnQsICJib3VuZHMiKTsKKwkJCWlmICgoY2xpcHggPCBib3VuZHMuPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ3gnIj54PC9lcnJvcj4pIHx8CisJCQkJCShjbGlweCArIGNsaXB3aWR0aCA+IGJvdW5kcy48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAneCciPng8L2Vycm9yPiArIGJvdW5kcy48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAnd2lkdGgnIj53aWR0aDwvZXJyb3I+KSB8fAorCQkJCQkoY2xpcHkgPCBib3VuZHMuPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ3knIj55PC9lcnJvcj4pIHx8CisJCQkJCShjbGlweSArIGNsaXBoZWlnaHQgPiBib3VuZHMuPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ3knIj55PC9lcnJvcj4gKyBib3VuZHMuPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ2hlaWdodCciPmhlaWdodDwvZXJyb3I+KSkgeworCQkJCXBhaW50UmV2ZXJzZShnLCBjbGlweCwgY2xpcHksIGNsaXB3aWR0aCwgY2xpcGhlaWdodCwKKwkJCQkJZ2V0KGNvbXBvbmVudCwgIjpuZXh0IiksIGVuYWJsZWQpOworCQkJfQorCQkJcGFpbnQoZywgY2xpcHgsIGNsaXB5LCBjbGlwd2lkdGgsIGNsaXBoZWlnaHQsIGNvbXBvbmVudCwgZW5hYmxlZCk7CisJCX0KKwl9CisKKwkvKioKKwkgKgorCSAqLworCXByaXZhdGUgdm9pZCBwYWludEZpZWxkKDxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICdHcmFwaGljcyciPkdyYXBoaWNzPC9lcnJvcj4gZywKKwkJCWludCBjbGlweCwgaW50IGNsaXB5LCBpbnQgY2xpcHdpZHRoLCBpbnQgY2xpcGhlaWdodCwgT2JqZWN0IGNvbXBvbmVudCwKKwkJCWludCB3aWR0aCwgaW50IGhlaWdodCwgYm9vbGVhbiBpbnNpZGUsIGJvb2xlYW4gcHJlc3NlZCwKKwkJCWJvb2xlYW4gZm9jdXMsIGJvb2xlYW4gZW5hYmxlZCwgYm9vbGVhbiBoaWRkZW4sIGludCBsZWZ0KSB7CisJCWJvb2xlYW4gZWRpdGFibGUgPSBnZXRCb29sZWFuKGNvbXBvbmVudCwgImVkaXRhYmxlIiwgdHJ1ZSk7CisJCXBhaW50UmVjdChnLCAwLCAwLCB3aWR0aCwgaGVpZ2h0LCBlbmFibGVkID8gY19ib3JkZXIgOiBjX2Rpc2FibGUsCisJCQllZGl0YWJsZSA/IGNfdGV4dGJnIDogY19iZywgdHJ1ZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSk7CisJCWcuPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBtZXRob2QgJ2NsaXBSZWN0KGludCwgaW50LCBpbnQsIGludCknIj5jbGlwUmVjdDwvZXJyb3I+KDEgKyBsZWZ0LCAxLCB3aWR0aCAtIGxlZnQgLSAyLCBoZWlnaHQgLSAyKTsKKworCQlTdHJpbmcgdGV4dCA9IGdldFN0cmluZyhjb21wb25lbnQsICJ0ZXh0IiwgIiIpOworCQlpbnQgb2Zmc2V0ID0gZ2V0SW50ZWdlcihjb21wb25lbnQsICJvZmZzZXQiLCAwKTsKKwkJPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ0ZvbnRNZXRyaWNzJyI+Rm9udE1ldHJpY3M8L2Vycm9yPiBmbSA9IGcuPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBtZXRob2QgJ2dldEZvbnRNZXRyaWNzKCknIj5nZXRGb250TWV0cmljczwvZXJyb3I+KCk7IC8vamF2YQorCisJCWludCBjYXJldCA9IDA7CisJCWlmIChmb2N1cykgeworCQkJaW50IHN0YXJ0ID0gZ2V0SW50ZWdlcihjb21wb25lbnQsICJzdGFydCIsIDApOworCQkJaW50IGVuZCA9IGdldEludGVnZXIoY29tcG9uZW50LCAiZW5kIiwgMCk7CisJCQljYXJldCA9IGhpZGRlbiA/IChmbS48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIG1ldGhvZCAnY2hhcldpZHRoKGNoYXIpJyI+Y2hhcldpZHRoPC9lcnJvcj4oJyonKSAqIGVuZCkgOgorCQkJCWZtLjxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgbWV0aG9kICdzdHJpbmdXaWR0aChqYXZhLmxhbmcuU3RyaW5nKSciPnN0cmluZ1dpZHRoPC9lcnJvcj4odGV4dC5zdWJzdHJpbmcoMCwgZW5kKSk7IC8vamF2YQorCQkJCS8vbWlkcCBmb250LnN1YnN0cmluZ1dpZHRoKHRleHQsIDAsIGVuZCk7CisJCQlpZiAoc3RhcnQgIT0gZW5kKSB7CisJCQkJaW50IGlzID0gaGlkZGVuID8gKGZtLjxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgbWV0aG9kICdjaGFyV2lkdGgoY2hhciknIj5jaGFyV2lkdGg8L2Vycm9yPignKicpICogc3RhcnQpIDoKKwkJCQkJZm0uPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBtZXRob2QgJ3N0cmluZ1dpZHRoKGphdmEubGFuZy5TdHJpbmcpJyI+c3RyaW5nV2lkdGg8L2Vycm9yPih0ZXh0LnN1YnN0cmluZygwLCBzdGFydCkpOyAvL2phdmEKKwkJCQkJLy9taWRwIGZvbnQuc3Vic3RyaW5nV2lkdGgodGV4dCwgMCwgc3RhcnQpOworCQkJCWcuPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBtZXRob2QgJ3NldENvbG9yKENvbG9yKSciPnNldENvbG9yPC9lcnJvcj4oY19zZWxlY3QpOworCQkJCWcuPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBtZXRob2QgJ2ZpbGxSZWN0KGludCwgaW50LCBpbnQsIGludCknIj5maWxsUmVjdDwvZXJyb3I+KDIgKyBsZWZ0IC0gb2Zmc2V0ICsgTWF0aC5taW4oaXMsIGNhcmV0KSwgMSwKKwkJCQkJTWF0aC5hYnMoY2FyZXQgLSBpcyksIGhlaWdodCAtIDIpOworCQkJfQorCQl9CisKKwkJaWYgKGZvY3VzKSB7CisJCQlnLjxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgbWV0aG9kICdzZXRDb2xvcihDb2xvciknIj5zZXRDb2xvcjwvZXJyb3I+KGNfZm9jdXMpOworCQkJZy48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIG1ldGhvZCAnZmlsbFJlY3QoaW50LCBpbnQsIGludCwgaW50KSciPmZpbGxSZWN0PC9lcnJvcj4oMSArIGxlZnQgLSBvZmZzZXQgKyBjYXJldCwgMSwgMSwgaGVpZ2h0IC0gMik7CisJCX0KKworCQlnLjxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgbWV0aG9kICdzZXRDb2xvcihDb2xvciknIj5zZXRDb2xvcjwvZXJyb3I+KGVuYWJsZWQgPyBjX3RleHQgOiBjX2Rpc2FibGUpOworCQlpbnQgZnggPSAyICsgbGVmdCAtIG9mZnNldDsKKwkJaW50IGZ5ID0gKGhlaWdodCArIGZtLjxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgbWV0aG9kICdnZXRBc2NlbnQoKSciPmdldEFzY2VudDwvZXJyb3I+KCkgLSBmbS48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIG1ldGhvZCAnZ2V0RGVzY2VudCgpJyI+Z2V0RGVzY2VudDwvZXJyb3I+KCkpIC8gMjsgLy9qYXZhCisJCS8vbWlkcCBpbnQgZnkgPSAoaGVpZ2h0IC0gZm9udC5nZXRIZWlnaHQoKSkgLyAyOworCQlpZiAoaGlkZGVuKSB7CisJCQlpbnQgZmggPSBmbS48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIG1ldGhvZCAnY2hhcldpZHRoKGNoYXIpJyI+Y2hhcldpZHRoPC9lcnJvcj4oJyonKTsKKwkJCWZvciAoaW50IGkgPSB0ZXh0Lmxlbmd0aCgpOyBpID4gMDsgaS0tKSB7CisJCQkJZy48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIG1ldGhvZCAnZHJhd1N0cmluZyhqYXZhLmxhbmcuU3RyaW5nLCBpbnQsIGludCknIj5kcmF3U3RyaW5nPC9lcnJvcj4oIioiLCBmeCwgZnkpOyAvL2phdmEKKwkJCQkvL21pZHAgZy5kcmF3Q2hhcignKicsIGZ4LCBmeSwgR3JhcGhpY3MuTEVGVCB8IEdyYXBoaWNzLlRPUCk7CisJCQkJZnggKz0gZmg7CisJCQl9CisJCX0gZWxzZSB7CisJCQlnLjxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgbWV0aG9kICdkcmF3U3RyaW5nKGphdmEubGFuZy5TdHJpbmcsIGludCwgaW50KSciPmRyYXdTdHJpbmc8L2Vycm9yPih0ZXh0LCBmeCwgZnkpOyAvL2phdmEKKwkJCS8vbWlkcCBnLmRyYXdTdHJpbmcodGV4dCwgZngsIGZ5LCBHcmFwaGljcy5MRUZUIHwgR3JhcGhpY3MuVE9QKTsKKwkJfQorCQlnLjxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgbWV0aG9kICdzZXRDbGlwKGludCwgaW50LCBpbnQsIGludCknIj5zZXRDbGlwPC9lcnJvcj4oY2xpcHgsIGNsaXB5LCBjbGlwd2lkdGgsIGNsaXBoZWlnaHQpOworCX0KKworCS8qKgorCSAqCisJICovCisJcHJpdmF0ZSBib29sZWFuIHBhaW50U2Nyb2xsUGFuZSg8ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAnR3JhcGhpY3MnIj5HcmFwaGljczwvZXJyb3I+IGcsCisJCQlpbnQgY2xpcHgsIGludCBjbGlweSwgaW50IGNsaXB3aWR0aCwgaW50IGNsaXBoZWlnaHQsIDxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICdSZWN0YW5nbGUnIj5SZWN0YW5nbGU8L2Vycm9yPiBib3VuZHMsCisJCQk8ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAnUmVjdGFuZ2xlJyI+UmVjdGFuZ2xlPC9lcnJvcj4gdmlldywgPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ1JlY3RhbmdsZSciPlJlY3RhbmdsZTwvZXJyb3I+IHZpZXdwb3J0LAorCQkJYm9vbGVhbiBlbmFibGVkLCBib29sZWFuIGluc2lkZSwgYm9vbGVhbiBwcmVzc2VkKSB7CisJCWlmICgodmlld3BvcnQuPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ3knIj55PC9lcnJvcj4gKyB2aWV3cG9ydC48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAnaGVpZ2h0JyI+aGVpZ2h0PC9lcnJvcj4gPCBib3VuZHMuPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ2hlaWdodCciPmhlaWdodDwvZXJyb3I+KSAmJgorCQkJCShjbGlweSArIGNsaXBoZWlnaHQgPiB2aWV3cG9ydC48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAneSciPnk8L2Vycm9yPiArIHZpZXdwb3J0LjxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICdoZWlnaHQnIj5oZWlnaHQ8L2Vycm9yPikpIHsgLy8gbmVlZCBob3Jpem9udGFsCisJCQlpbnQgeCA9IHZpZXdwb3J0LjxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICd4JyI+eDwvZXJyb3I+OworCQkJaW50IHkgPSB2aWV3cG9ydC48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAneSciPnk8L2Vycm9yPiArIHZpZXdwb3J0LjxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICdoZWlnaHQnIj5oZWlnaHQ8L2Vycm9yPjsKKwkJCWludCBoZWlnaHQgPSBib3VuZHMuPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ2hlaWdodCciPmhlaWdodDwvZXJyb3I+IC0geTsKKwkJCWludCBidXR0b24gPSBNYXRoLm1pbjxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgbWV0aG9kICdtaW4oaW50LCA/KSciPihibG9jaywgdmlld3BvcnQuPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ3dpZHRoJyI+d2lkdGg8L2Vycm9yPiAvIDIpPC9lcnJvcj47CisJCQlpbnQgdHJhY2sgPSB2aWV3cG9ydC48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAnd2lkdGgnIj53aWR0aDwvZXJyb3I+IC0gKDIgKiBidXR0b24pOyAvL21heCAxMAorCQkJaW50IGtub2IgPSBNYXRoLm1pbjxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgbWV0aG9kICdtaW4oaW50LCA/KSciPih0cmFjaywgTWF0aC5tYXg8ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIG1ldGhvZCAnbWF4KD8sIGludCknIj4odHJhY2sgKiAodmlld3BvcnQuPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ3dpZHRoJyI+d2lkdGg8L2Vycm9yPiAtIDIpIC8gdmlldy48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAnd2lkdGgnIj53aWR0aDwvZXJyb3I+LCA2KTwvZXJyb3I+KTwvZXJyb3I+OworCQkJaW50IGRlY3JlYXNlID0gdmlldy48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAneCciPng8L2Vycm9yPiAqICh0cmFjayAtIGtub2IpIC8KKwkJCQkodmlldy48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAnd2lkdGgnIj53aWR0aDwvZXJyb3I+IC0gdmlld3BvcnQuPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ3dpZHRoJyI+d2lkdGg8L2Vycm9yPiArIDIpOworCQkJaW50IGluY3JlYXNlID0gdHJhY2sgLSBkZWNyZWFzZSAtIGtub2I7CisJCQlwYWludEFycm93KGcsIHgsIHksIGJ1dHRvbiwgaGVpZ2h0LAorCQkJCSdXJywgZW5hYmxlZCwgaW5zaWRlLCBwcmVzc2VkLCAibGVmdCIsIGZhbHNlLCB0cnVlLCB0cnVlLCBmYWxzZSk7CisJCQlwYWludFJlY3QoZywgeCArIGJ1dHRvbiwgeSwgZGVjcmVhc2UsIGhlaWdodCwKKwkJCQllbmFibGVkID8gY19ib3JkZXIgOiBjX2Rpc2FibGUsIGNfYmcsIGZhbHNlLCB0cnVlLCB0cnVlLCBmYWxzZSk7CisJCQlwYWludFJlY3QoZywgeCArIGJ1dHRvbiArIGRlY3JlYXNlLCB5LCBrbm9iLCBoZWlnaHQsCisJCQkJZW5hYmxlZCA/IGNfYm9yZGVyIDogY19kaXNhYmxlLCBlbmFibGVkID8gY19jdHJsIDogY19iZywgZmFsc2UsIHRydWUsIHRydWUsIHRydWUpOworCQkJaW50IG4gPSBNYXRoLm1pbig1LCAoa25vYiAtIDQpIC8gMyk7CisJCQlnLjxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgbWV0aG9kICdzZXRDb2xvcihDb2xvciknIj5zZXRDb2xvcjwvZXJyb3I+KGVuYWJsZWQgPyBjX2JvcmRlciA6IGNfZGlzYWJsZSk7CisJCQlpbnQgY3ggPSAoeCArIGJ1dHRvbiArIGRlY3JlYXNlKSArIChrbm9iICsgMiAtIG4gKiAzKSAvIDI7CisJCQlmb3IgKGludCBpID0gMDsgaSA8IG47IGkrKyApIHsKKwkJCQlnLjxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgbWV0aG9kICdkcmF3TGluZShpbnQsIGludCwgaW50LCBpbnQpJyI+ZHJhd0xpbmU8L2Vycm9yPihjeCArIGkgKiAzLCB5ICsgMiwgY3ggKyBpICogMywgeSArIGhlaWdodCAtIDQpOworCQkJfQorCQkJcGFpbnRSZWN0KGcsIHggKyBidXR0b24gKyBkZWNyZWFzZSArIGtub2IsIHksIGluY3JlYXNlLCBoZWlnaHQsCisJCQkJZW5hYmxlZCA/IGNfYm9yZGVyIDogY19kaXNhYmxlLCBjX2JnLCBmYWxzZSwgZmFsc2UsIHRydWUsIHRydWUpOworCQkJcGFpbnRBcnJvdyhnLCB4ICsgYnV0dG9uICsgdHJhY2ssIHksIGJ1dHRvbiwgaGVpZ2h0LAorCQkJCSdFJywgZW5hYmxlZCwgaW5zaWRlLCBwcmVzc2VkLCAicmlnaHQiLCBmYWxzZSwgZmFsc2UsIHRydWUsIHRydWUpOworCQl9CisJCWlmICgodmlld3BvcnQuPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ3gnIj54PC9lcnJvcj4gKyB2aWV3cG9ydC48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAnd2lkdGgnIj53aWR0aDwvZXJyb3I+IDwgYm91bmRzLjxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICd3aWR0aCciPndpZHRoPC9lcnJvcj4pICYmCisJCQkJKGNsaXB4ICsgY2xpcHdpZHRoID4gdmlld3BvcnQuPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ3gnIj54PC9lcnJvcj4gKyB2aWV3cG9ydC48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAnd2lkdGgnIj53aWR0aDwvZXJyb3I+KSkgeyAvLyBuZWVkIHZlcnRpY2FsCisJCQlpbnQgeCA9IHZpZXdwb3J0LjxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICd4JyI+eDwvZXJyb3I+ICsgdmlld3BvcnQuPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ3dpZHRoJyI+d2lkdGg8L2Vycm9yPjsKKwkJCWludCB5ID0gdmlld3BvcnQuPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ3knIj55PC9lcnJvcj47CisJCQlpbnQgd2lkdGggPSBib3VuZHMuPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ3dpZHRoJyI+d2lkdGg8L2Vycm9yPiAtIHg7CisJCQkvL2lmICh5ID4gMCkgeworCQkJLy8JcGFpbnRSZWN0KGcsIHggLSAxLCAwLCB3aWR0aCArIDEsIHksCisJCQkvLwkJZW5hYmxlZCA/IGNfYm9yZGVyIDogY19kaXNhYmxlLCBjX2JnLCBmYWxzZSwgdHJ1ZSwgZmFsc2UsIGZhbHNlKTsKKwkJCS8vfQorCQkJaW50IHRyYWNrID0gdmlld3BvcnQuPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ2hlaWdodCciPmhlaWdodDwvZXJyb3I+IC0gKDIgKiBibG9jayk7CisJCQlpbnQga25vYiA9IHRyYWNrICogKHZpZXdwb3J0LjxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICdoZWlnaHQnIj5oZWlnaHQ8L2Vycm9yPiAtIDIpIC8gdmlldy48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAnaGVpZ2h0JyI+aGVpZ2h0PC9lcnJvcj47CisJCQlpbnQgZGVjcmVhc2UgPSB2aWV3LjxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICd5JyI+eTwvZXJyb3I+ICogKHRyYWNrIC0ga25vYikgLworCQkJCSh2aWV3LjxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICdoZWlnaHQnIj5oZWlnaHQ8L2Vycm9yPiAtIHZpZXdwb3J0LjxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICdoZWlnaHQnIj5oZWlnaHQ8L2Vycm9yPiArIDIpOworCQkJaW50IGluY3JlYXNlID0gdHJhY2sgLSBkZWNyZWFzZSAtIGtub2I7CisJCQlwYWludEFycm93KGcsIHgsIHksIHdpZHRoLCBibG9jaywKKwkJCQknTicsIGVuYWJsZWQsIGluc2lkZSwgcHJlc3NlZCwgInVwIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCB0cnVlKTsKKwkJCXBhaW50UmVjdChnLCB4LCB5ICsgYmxvY2ssIHdpZHRoLCBkZWNyZWFzZSwKKwkJCQllbmFibGVkID8gY19ib3JkZXIgOiBjX2Rpc2FibGUsIGNfYmcsIHRydWUsIGZhbHNlLCBmYWxzZSwgdHJ1ZSk7CisJCQlwYWludFJlY3QoZywgeCwgeSArIGJsb2NrICsgZGVjcmVhc2UsIHdpZHRoLCBrbm9iLAorCQkJCWVuYWJsZWQgPyBjX2JvcmRlciA6IGNfZGlzYWJsZSwgZW5hYmxlZCA/IGNfY3RybCA6IGNfYmcsIHRydWUsIGZhbHNlLCB0cnVlLCB0cnVlKTsKKwkJCWludCBuID0gTWF0aC5taW4oNSwgKGtub2IgLSA0KSAvIDMpOworCQkJZy48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIG1ldGhvZCAnc2V0Q29sb3IoQ29sb3IpJyI+c2V0Q29sb3I8L2Vycm9yPihlbmFibGVkID8gY19ib3JkZXIgOiBjX2Rpc2FibGUpOworCQkJaW50IGN5ID0gKHkgKyBibG9jayArIGRlY3JlYXNlKSArIChrbm9iICsgMiAtIG4gKiAzKSAvIDI7CisJCQlmb3IgKGludCBpID0gMDsgaSA8IG47IGkrKyApIHsKKwkJCQlnLjxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgbWV0aG9kICdkcmF3TGluZShpbnQsIGludCwgaW50LCBpbnQpJyI+ZHJhd0xpbmU8L2Vycm9yPih4ICsgMiwgY3kgKyBpICogMywgeCArIHdpZHRoIC0gNCwgY3kgKyBpICogMyk7CisJCQl9CisJCQlwYWludFJlY3QoZywgeCwgeSArIGJsb2NrICsgZGVjcmVhc2UgKyBrbm9iLCB3aWR0aCwgaW5jcmVhc2UsCisJCQkJZW5hYmxlZCA/IGNfYm9yZGVyIDogY19kaXNhYmxlLCBjX2JnLCBmYWxzZSwgZmFsc2UsIHRydWUsIHRydWUpOworCQkJcGFpbnRBcnJvdyhnLCB4LCB5ICsgYmxvY2sgKyB0cmFjaywgd2lkdGgsIGJsb2NrLAorCQkJJ1MnLCBlbmFibGVkLCBpbnNpZGUsIHByZXNzZWQsICJkb3duIiwgZmFsc2UsIGZhbHNlLCB0cnVlLCB0cnVlKTsKKwkJfQorCQlpZiAoKGNsaXB4ICsgY2xpcHdpZHRoID4gdmlld3BvcnQuPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ3gnIj54PC9lcnJvcj4pICYmIChjbGlweSArIGNsaXBoZWlnaHQgPiB2aWV3cG9ydC48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAneSciPnk8L2Vycm9yPikgJiYKKwkJCQkoY2xpcHggPCB2aWV3cG9ydC48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAneCciPng8L2Vycm9yPiArIHZpZXdwb3J0LjxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICd3aWR0aCciPndpZHRoPC9lcnJvcj4pICYmIChjbGlweSA8IHZpZXdwb3J0LjxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICd5JyI+eTwvZXJyb3I+ICsgdmlld3BvcnQuPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ2hlaWdodCciPmhlaWdodDwvZXJyb3I+KSkgeworCQkJZy48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIG1ldGhvZCAnY2xpcFJlY3QoPywgPywgPywgPyknIj5jbGlwUmVjdDwvZXJyb3I+KHZpZXdwb3J0LjxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICd4JyI+eDwvZXJyb3I+ICsgMSwgdmlld3BvcnQuPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ3knIj55PC9lcnJvcj4gKyAxLCB2aWV3cG9ydC48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAnd2lkdGgnIj53aWR0aDwvZXJyb3I+IC0gMiwgdmlld3BvcnQuPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ2hlaWdodCciPmhlaWdodDwvZXJyb3I+IC0gMik7CisJCQlnLjxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgbWV0aG9kICd0cmFuc2xhdGUoPywgPyknIj50cmFuc2xhdGU8L2Vycm9yPih2aWV3cG9ydC48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAneCciPng8L2Vycm9yPiArIDEgLSB2aWV3LjxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICd4JyI+eDwvZXJyb3I+LCB2aWV3cG9ydC48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAneSciPnk8L2Vycm9yPiArIDEgLSB2aWV3LjxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICd5JyI+eTwvZXJyb3I+KTsKKwkgCQlyZXR1cm4gdHJ1ZTsKKwkJfQorCQlyZXR1cm4gZmFsc2U7CisJfQorCisJLyoqCisJICoKKwkgKi8KKwlwcml2YXRlIHZvaWQgcmVzZXRTY3JvbGxQYW5lKDxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICdHcmFwaGljcyciPkdyYXBoaWNzPC9lcnJvcj4gZywKKwkJCWludCBjbGlweCwgaW50IGNsaXB5LCBpbnQgY2xpcHdpZHRoLCBpbnQgY2xpcGhlaWdodCwKKwkJCTxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICdSZWN0YW5nbGUnIj5SZWN0YW5nbGU8L2Vycm9yPiB2aWV3LCA8ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAnUmVjdGFuZ2xlJyI+UmVjdGFuZ2xlPC9lcnJvcj4gdmlld3BvcnQpIHsKKwkJZy48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIG1ldGhvZCAndHJhbnNsYXRlKD8sID8pJyI+dHJhbnNsYXRlPC9lcnJvcj4odmlldy48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAneCciPng8L2Vycm9yPiAtIHZpZXdwb3J0LjxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICd4JyI+eDwvZXJyb3I+IC0gMSwgdmlldy48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAneSciPnk8L2Vycm9yPiAtIHZpZXdwb3J0LjxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICd5JyI+eTwvZXJyb3I+IC0gMSk7CisJCWcuPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBtZXRob2QgJ3NldENsaXAoaW50LCBpbnQsIGludCwgaW50KSciPnNldENsaXA8L2Vycm9yPihjbGlweCwgY2xpcHksIGNsaXB3aWR0aCwgY2xpcGhlaWdodCk7CisJfQorCisJLyoqCisJICoKKwkgKi8KKwlwcml2YXRlIHZvaWQgcGFpbnRSZWN0KDxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICdHcmFwaGljcyciPkdyYXBoaWNzPC9lcnJvcj4gZywgaW50IHgsIGludCB5LCBpbnQgd2lkdGgsIGludCBoZWlnaHQsCisJCQk8ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAnQ29sb3InIj5Db2xvcjwvZXJyb3I+IGJvcmRlciwgPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ0NvbG9yJyI+Q29sb3I8L2Vycm9yPiBiZywKKwkJCWJvb2xlYW4gdG9wLCBib29sZWFuIGxlZnQsIGJvb2xlYW4gYm90dG9tLCBib29sZWFuIHJpZ2h0KSB7CisJCWlmICgod2lkdGggPD0gMCkgfHwgKGhlaWdodCA8PSAwKSkgcmV0dXJuOworCQlnLjxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgbWV0aG9kICdzZXRDb2xvcihDb2xvciknIj5zZXRDb2xvcjwvZXJyb3I+KGJvcmRlcik7CisJCWlmICh0b3ApIHsKKwkJCWcuPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBtZXRob2QgJ2RyYXdMaW5lKGludCwgaW50LCBpbnQsIGludCknIj5kcmF3TGluZTwvZXJyb3I+KHggKyB3aWR0aCAtIDEsIHksIHgsIHkpOworCQkJeSsrOyBoZWlnaHQtLTsgaWYgKGhlaWdodCA8PSAwKSByZXR1cm47CisJCX0KKwkJaWYgKGxlZnQpIHsKKwkJCWcuPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBtZXRob2QgJ2RyYXdMaW5lKGludCwgaW50LCBpbnQsIGludCknIj5kcmF3TGluZTwvZXJyb3I+KHgsIHksIHgsIHkgKyBoZWlnaHQgLSAxKTsKKwkJCXgrKzsgd2lkdGgtLTsgaWYgKHdpZHRoIDw9IDApIHJldHVybjsKKwkJfQorCQlpZiAoYm90dG9tKSB7CisJCQlnLjxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgbWV0aG9kICdkcmF3TGluZShpbnQsIGludCwgaW50LCBpbnQpJyI+ZHJhd0xpbmU8L2Vycm9yPih4LCB5ICsgaGVpZ2h0IC0gMSwgeCArIHdpZHRoIC0gMSwgeSArIGhlaWdodCAtIDEpOworCQkJaGVpZ2h0LS07IGlmIChoZWlnaHQgPD0gMCkgcmV0dXJuOworCQl9CisJCWlmIChyaWdodCkgeworCQkJZy48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIG1ldGhvZCAnZHJhd0xpbmUoaW50LCBpbnQsIGludCwgaW50KSciPmRyYXdMaW5lPC9lcnJvcj4oeCArIHdpZHRoIC0gMSwgeSArIGhlaWdodCAtIDEsIHggKyB3aWR0aCAtIDEsIHkpOworCQkJd2lkdGgtLTsgaWYgKHdpZHRoIDw9IDApIHJldHVybjsKKwkJfQorCisJCS8vamF2YT4KKwkJaWYgKGJnID09IGNfY3RybCkgeworCQkJaWYgKGhlaWdodCA+IGJsb2NrKSB7CisJCQkJZy48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIG1ldGhvZCAnc2V0Q29sb3IoQ29sb3IpJyI+c2V0Q29sb3I8L2Vycm9yPihjX2JnKTsKKwkJCQlnLjxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgbWV0aG9kICdmaWxsUmVjdChpbnQsIGludCwgaW50LCBpbnQpJyI+ZmlsbFJlY3Q8L2Vycm9yPih4LCB5LCB3aWR0aCwgaGVpZ2h0IC0gYmxvY2spOworCQkJfQorCQkJZm9yIChpbnQgaSA9IDA7IGkgPCB3aWR0aDsgaSArPSBibG9jaykgeworCQkJCWcuPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBtZXRob2QgJ2RyYXdJbWFnZShJbWFnZSwgaW50LCBpbnQsIGludCwgaW50LCBpbnQsIGludCwgaW50LCBpbnQsIG51bGwpJyI+ZHJhd0ltYWdlPC9lcnJvcj4oZ3JhZGllbnQsIHggKyBpLCAoaGVpZ2h0ID4gYmxvY2spID8gKHkgKyBoZWlnaHQgLSBibG9jaykgOiB5LAorCQkJCQl4ICsgTWF0aC5taW4oaSArIGJsb2NrLCB3aWR0aCksIHkgKyBoZWlnaHQsCisJCQkJCTAsIDAsIE1hdGgubWluKGJsb2NrLCB3aWR0aCAtIGkpLCBNYXRoLm1pbihibG9jaywgaGVpZ2h0KSwgbnVsbCk7CisJCQl9CisJCQkvKmlmICh3aWR0aCA+IGJsb2NrKSB7CisJCQkJZy5zZXRDb2xvcihjX2JnKTsKKwkJCQlnLmZpbGxSZWN0KHgsIHksIHdpZHRoIC0gYmxvY2ssIGhlaWdodCk7CisJCQl9CisJCQlmb3IgKGludCBpID0gMDsgaSA8IGhlaWdodDsgaSArPSBibG9jaykgeworCQkJCWcuZHJhd0ltYWdlKGdyYWRpZW50LCAod2lkdGggPiBibG9jaykgPyAoeCArIHdpZHRoIC0gYmxvY2spIDogeCwgeSArIGksCisJCQkJCXggKyB3aWR0aCwgeSArIE1hdGgubWluKGkgKyBibG9jaywgaGVpZ2h0KSwKKwkJCQkJMCwgMCwgTWF0aC5taW4oYmxvY2ssIHdpZHRoKSwgTWF0aC5taW4oYmxvY2ssIGhlaWdodCAtIGkpLCBudWxsKTsKKwkJCX0qLworCQl9CisJCWVsc2UgeworCQkJZy48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIG1ldGhvZCAnc2V0Q29sb3IoQ29sb3IpJyI+c2V0Q29sb3I8L2Vycm9yPihiZyk7CisJCQlnLjxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgbWV0aG9kICdmaWxsUmVjdChpbnQsIGludCwgaW50LCBpbnQpJyI+ZmlsbFJlY3Q8L2Vycm9yPih4LCB5LCB3aWR0aCwgaGVpZ2h0KTsKKwkJfQorCQkvLzxqYXZhCisJCS8vbWlkcCBnLnNldENvbG9yKGJnKTsKKwkJLy9taWRwIGcuZmlsbFJlY3QoeCwgeSwgd2lkdGgsIGhlaWdodCk7CisJfQorCisJLyoqCisJICoKKwkgKi8KKwlwcml2YXRlIHZvaWQgcGFpbnRBcnJvdyg8ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAnR3JhcGhpY3MnIj5HcmFwaGljczwvZXJyb3I+IGcsIGludCB4LCBpbnQgeSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LAorCQkJY2hhciBkaXIsIGJvb2xlYW4gZW5hYmxlZCwgYm9vbGVhbiBpbnNpZGUsIGJvb2xlYW4gcHJlc3NlZCwgU3RyaW5nIHBhcnQsCisJCQlib29sZWFuIHRvcCwgYm9vbGVhbiBsZWZ0LCBib29sZWFuIGJvdHRvbSwgYm9vbGVhbiByaWdodCkgeworCQlpbnNpZGUgPSBpbnNpZGUgJiYgKGluc2lkZXBhcnQgPT0gcGFydCk7CisJCXByZXNzZWQgPSBwcmVzc2VkICYmIChwcmVzc2VkcGFydCA9PSBwYXJ0KTsKKwkJcGFpbnRSZWN0KGcsIHgsIHksIHdpZHRoLCBoZWlnaHQsIGVuYWJsZWQgPyBjX2JvcmRlciA6IGNfZGlzYWJsZSwKKwkJCWVuYWJsZWQgPyAoKGluc2lkZSAhPSBwcmVzc2VkKSA/IGNfaG92ZXIgOgorCQkJCShwcmVzc2VkID8gY19wcmVzcyA6IGNfY3RybCkpIDogY19iZywKKwkJCXRvcCwgbGVmdCwgYm90dG9tLCByaWdodCk7CisJCWcuPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBtZXRob2QgJ3NldENvbG9yKENvbG9yKSciPnNldENvbG9yPC9lcnJvcj4oZW5hYmxlZCA/IGNfdGV4dCA6IGNfZGlzYWJsZSk7CisJCXBhaW50QXJyb3coZywgeCwgeSwgd2lkdGgsIGhlaWdodCwgZGlyKTsKKwl9CisKKwkvKioKKwkgKgorCSAqLworCXByaXZhdGUgdm9pZCBwYWludEFycm93KDxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICdHcmFwaGljcyciPkdyYXBoaWNzPC9lcnJvcj4gZywKKwkJCWludCB4LCBpbnQgeSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBjaGFyIGRpcikgeworCQlpbnQgY3ggPSB4ICsgd2lkdGggLyAyIC0gMjsKKwkJaW50IGN5ID0geSArIGhlaWdodCAvIDIgLSAyOworCQlmb3IgKGludCBpID0gMDsgaSA8IDQ7IGkrKykgeworCQkJaWYgKGRpciA9PSAnTicpIHsgLy8gbm9ydGgKKwkJCQlnLjxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgbWV0aG9kICdkcmF3TGluZShpbnQsIGludCwgaW50LCBpbnQpJyI+ZHJhd0xpbmU8L2Vycm9yPihjeCArIDEgLSBpLCBjeSArIGksIGN4ICsgMS8qMiovICsgaSwgY3kgKyBpKTsKKwkJCX0KKwkJCWVsc2UgaWYgKGRpciA9PSAnVycpIHsgLy8gd2VzdAorCQkJCWcuPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBtZXRob2QgJ2RyYXdMaW5lKGludCwgaW50LCBpbnQsIGludCknIj5kcmF3TGluZTwvZXJyb3I+KGN4ICsgaSwgY3kgKyAxIC0gaSwgY3ggKyBpLCBjeSArIDEvKjIqLyArIGkpOworCQkJfQorCQkJZWxzZSBpZiAoZGlyID09ICdTJykgeyAvLyBzb3V0aAorCQkJCWcuPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBtZXRob2QgJ2RyYXdMaW5lKGludCwgaW50LCBpbnQsIGludCknIj5kcmF3TGluZTwvZXJyb3I+KGN4ICsgMSAtIGksIGN5ICsgNCAtIGksIGN4ICsgMS8qMiovICsgaSwgY3kgKyA0IC0gaSk7CisJCQl9CisJCQllbHNlIHsgLy8gZWFzdAorCQkJCWcuPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBtZXRob2QgJ2RyYXdMaW5lKGludCwgaW50LCBpbnQsIGludCknIj5kcmF3TGluZTwvZXJyb3I+KGN4ICsgNCAtIGksIGN5ICsgMSAtIGksIGN4ICsgNCAtIGksIGN5ICsgMS8qMiovICsgaSk7CisJCQl9CisJCX0KKwl9CisKKwkvKioKKwkgKgorCSAqLworCXByaXZhdGUgdm9pZCBwYWludENvbnRlbnQoT2JqZWN0IGNvbXBvbmVudCwgPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ0dyYXBoaWNzJyI+R3JhcGhpY3M8L2Vycm9yPiBnLAorCQkJaW50IGNsaXB4LCBpbnQgY2xpcHksIGludCBjbGlwd2lkdGgsIGludCBjbGlwaGVpZ2h0LAorCQkJaW50IHgsIGludCB5LCBpbnQgd2lkdGgsIGludCBoZWlnaHQsIDxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICdDb2xvciciPkNvbG9yPC9lcnJvcj4gZmcsIFN0cmluZyBkZWZhdWx0YWxpZ25tZW50LAorCQkJYm9vbGVhbiBjaGVja21uZW1vbmljKSB7CisJCVN0cmluZyB0ZXh0ID0gZ2V0U3RyaW5nKGNvbXBvbmVudCwgInRleHQiLCBudWxsKTsKKwkJPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ0ltYWdlJyI+SW1hZ2U8L2Vycm9yPiBpY29uID0gZ2V0SWNvbihjb21wb25lbnQsICJpY29uIiwgbnVsbCk7CisJCWlmICgodGV4dCA9PSBudWxsKSAmJiAoaWNvbiA9PSBudWxsKSkgeyByZXR1cm47IH0KKwkJU3RyaW5nIGFsaWdubWVudCA9IGdldFN0cmluZyhjb21wb25lbnQsICJhbGlnbm1lbnQiLCBkZWZhdWx0YWxpZ25tZW50KTsKKworCQk8ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAnRm9udE1ldHJpY3MnIj5Gb250TWV0cmljczwvZXJyb3I+IGZtID0gbnVsbDsgLy9qYXZhCisJCWludCB0dyA9IDAsIHRoID0gMDsKKwkJaW50IHRhID0gMDsgLy9qYXZhCisJCWlmICh0ZXh0ICE9IG51bGwpIHsKKwkJCWZtID0gZy48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIG1ldGhvZCAnZ2V0Rm9udE1ldHJpY3MoKSciPmdldEZvbnRNZXRyaWNzPC9lcnJvcj4oKTsgLy9qYXZhCisJCQl0dyA9IGZtLjxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgbWV0aG9kICdzdHJpbmdXaWR0aChqYXZhLmxhbmcuU3RyaW5nKSciPnN0cmluZ1dpZHRoPC9lcnJvcj4odGV4dCk7CisJCQl0YSA9IGZtLjxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgbWV0aG9kICdnZXRBc2NlbnQoKSciPmdldEFzY2VudDwvZXJyb3I+KCk7IC8vamF2YQorCQkJdGggPSBmbS48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIG1ldGhvZCAnZ2V0RGVzY2VudCgpJyI+Z2V0RGVzY2VudDwvZXJyb3I+KCkgKyB0YTsgLy9qYXZhCisJCQkvL21pZHAgdGggPSBmb250LmdldEhlaWdodCgpOworCQkJZy48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIG1ldGhvZCAnc2V0Q29sb3IoQ29sb3IpJyI+c2V0Q29sb3I8L2Vycm9yPihmZyk7CisJCX0KKwkJaW50IGl3ID0gMCwgaWggPSAwOworCQlpZiAoaWNvbiAhPSBudWxsKSB7CisJCQlpdyA9IGljb24uPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBtZXRob2QgJ2dldFdpZHRoKFRoaW5sZXQpJyI+Z2V0V2lkdGg8L2Vycm9yPih0aGlzKTsKKwkJCWloID0gaWNvbi48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIG1ldGhvZCAnZ2V0SGVpZ2h0KFRoaW5sZXQpJyI+Z2V0SGVpZ2h0PC9lcnJvcj4odGhpcyk7IC8vamF2YQorCQl9CisKKwkJYm9vbGVhbiBjbGlwcGVkID0gKHR3ICsgaXcgPiB3aWR0aCkgfHwgKHRoID4gaGVpZ2h0KSB8fCAoaWggPiBoZWlnaHQpOworCQlpbnQgY3ggPSB4OworCQlpZiAoImNlbnRlciIgPT0gYWxpZ25tZW50KSB7IGN4ICs9ICh3aWR0aCAtIHR3IC0gaXcpIC8gMjsgfQorCQkJZWxzZSBpZiAoInJpZ2h0IiA9PSBhbGlnbm1lbnQpIHsgY3ggKz0gd2lkdGggLSB0dyAtIGl3OyB9CisKKwkJaWYgKGNsaXBwZWQpIHsgZy48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIG1ldGhvZCAnY2xpcFJlY3QoaW50LCBpbnQsIGludCwgaW50KSciPmNsaXBSZWN0PC9lcnJvcj4oeCwgeSwgd2lkdGgsIGhlaWdodCk7IH0KKwkJaWYgKGljb24gIT0gbnVsbCkgeworCQkJZy48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIG1ldGhvZCAnZHJhd0ltYWdlKEltYWdlLCBpbnQsIGludCwgVGhpbmxldCknIj5kcmF3SW1hZ2U8L2Vycm9yPihpY29uLCBjeCwgeSArIChoZWlnaHQgLSBpaCkgLyAyLCB0aGlzKTsgLy9qYXZhCisJCQkvL21pZHAgZy5kcmF3SW1hZ2UoaWNvbiwgY3gsIHkgKyBoZWlnaHQgLyAyLCBHcmFwaGljcy5MRUZUIHwgR3JhcGhpY3MuVkNFTlRFUik7CisJCQljeCArPSBpdzsKKwkJfQorCQlpZiAodGV4dCAhPSBudWxsKSB7CisJCQlpbnQgdHkgPSB5ICsgKGhlaWdodCAtIHRoKSAvIDIgKyB0YTsgLy9qYXZhCisJCQlnLjxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgbWV0aG9kICdkcmF3U3RyaW5nKGphdmEubGFuZy5TdHJpbmcsIGludCwgaW50KSciPmRyYXdTdHJpbmc8L2Vycm9yPih0ZXh0LCBjeCwgdHkpOyAvL2phdmEKKwkJCS8vbWlkcCBnLmRyYXdTdHJpbmcodGV4dCwgY3gsIHkgKyAoaGVpZ2h0IC0gdGgpIC8gMiwgR3JhcGhpY3MuTEVGVCB8IEdyYXBoaWNzLlRPUCk7CisJCQlpZiAoY2hlY2ttbmVtb25pYykgeworCQkJCWludCBtbmVtb25pYyA9IGdldEludGVnZXIoY29tcG9uZW50LCAibW5lbW9uaWMiLCAtMSk7CisJCQkJaWYgKChtbmVtb25pYyAhPSAtMSkgJiYgKG1uZW1vbmljIDwgdGV4dC5sZW5ndGgoKSkpIHsKKwkJCQkJaW50IG14ID0gY3ggKyBmbS48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIG1ldGhvZCAnc3RyaW5nV2lkdGgoamF2YS5sYW5nLlN0cmluZyknIj5zdHJpbmdXaWR0aDwvZXJyb3I+KHRleHQuc3Vic3RyaW5nKDAsIG1uZW1vbmljKSk7IC8vamF2YQorCQkJCQkvL21pZHAgaW50IG14ID0gY3ggKyBmb250LnN1YnN0cmluZ1dpZHRoKHRleHQsIDAsIG1uZW1vbmljKTsKKwkJCQkJLy9taWRwIGludCB0eSA9IChoZWlnaHQgKyB0aCkgLyAyOworCQkJCQlnLjxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgbWV0aG9kICdkcmF3TGluZShpbnQsIGludCwgPywgaW50KSciPmRyYXdMaW5lPC9lcnJvcj4obXgsIHR5ICsgMSwgbXggKyBmbS48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIG1ldGhvZCAnY2hhcldpZHRoKGNoYXIpJyI+Y2hhcldpZHRoPC9lcnJvcj4odGV4dC5jaGFyQXQobW5lbW9uaWMpKSwgdHkgKyAxKTsKKwkJCQl9CisJCQl9CisJCX0KKwkJaWYgKGNsaXBwZWQpIHsgZy48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIG1ldGhvZCAnc2V0Q2xpcChpbnQsIGludCwgaW50LCBpbnQpJyI+c2V0Q2xpcDwvZXJyb3I+KGNsaXB4LCBjbGlweSwgY2xpcHdpZHRoLCBjbGlwaGVpZ2h0KTsgfQorCX0KKwkvL21pZHAgcHJpdmF0ZSB2b2lkIHNldFRpbWVyKGxvbmcgZGVsYXkpIHt9CisJLy9qYXZhPgorCisJLyoqCisJICoKKwkgKi8KKwlwdWJsaWMgc3luY2hyb25pemVkIHZvaWQgcnVuKCkgeworCQl3aGlsZSAodGltZXIgPT0gVGhyZWFkLmN1cnJlbnRUaHJlYWQoKSkgeworCQkJdHJ5IHsKKwkJCQlpZiAod2F0Y2ggPT0gMCkgeworCQkJCQl3YWl0KDApOworCQkJCX0gZWxzZSB7CisJCQkJCWxvbmcgY3VycmVudCA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpOworCQkJCQlpZiAod2F0Y2ggPiBjdXJyZW50KSB7CisJCQkJCQl3YWl0KHdhdGNoIC0gY3VycmVudCk7CisJCQkJCX0gZWxzZSB7CisJCQkJCQl3YXRjaCA9IDA7CisJCQkJCQlpZiAoKHdhdGNoZGVsYXkgPT0gMzAwTCkgfHwgKHdhdGNoZGVsYXkgPT0gNjBMKSkgeworCQkJCQkJCWlmIChwcm9jZXNzU2Nyb2xsKG1vdXNlcHJlc3NlZCwgcHJlc3NlZHBhcnQpKSB7IHNldFRpbWVyKDYwTCk7IH0KKwkJCQkJCX0gZWxzZSBpZiAoKHdhdGNoZGVsYXkgPT0gMzc1TCkgfHwgKHdhdGNoZGVsYXkgPT0gNzVMKSkgeworCQkJCQkJCWlmIChwcm9jZXNzU3Bpbihtb3VzZXByZXNzZWQsIHByZXNzZWRwYXJ0KSkgeyBzZXRUaW1lcig3NUwpOyB9CisJCQkJCQl9IGVsc2UgaWYgKHdhdGNoZGVsYXkgPT0gNzUwTCkgeworCQkJCQkJCS8vU3lzdGVtLm91dC5wcmludGxuKCI+IHRpcDogIiArIGdldENsYXNzKG1vdXNlaW5zaWRlKSArICIgOiAiICsgKChpbnNpZGVwYXJ0IGluc3RhbmNlb2YgT2JqZWN0W10pID8gZ2V0Q2xhc3MoaW5zaWRlcGFydCkgOiBpbnNpZGVwYXJ0KSk7CisJCQkJCQkJc2hvd1RpcCgpOworCQkJCQkJfQorCQkJCQl9CisJCQkJfQorCQkJfSBjYXRjaCAoPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ0ludGVycnVwdGVkRXhjZXB0aW9uJyI+SW50ZXJydXB0ZWRFeGNlcHRpb248L2Vycm9yPiBpZSkge30gLy9pZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJfQorCX0KKworCS8qKgorCSAqCisJICovCisJcHJpdmF0ZSB2b2lkIHNldFRpbWVyKGxvbmcgZGVsYXkpIHsKKwkJd2F0Y2hkZWxheSA9IGRlbGF5OworCQlpZiAoZGVsYXkgPT0gMCkgeworCQkJd2F0Y2ggPSAwOworCQl9IGVsc2UgeworCQkJbG9uZyBwcmV2ID0gd2F0Y2g7CisJCQl3YXRjaCA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpICsgZGVsYXk7CisJCQlpZiAodGltZXIgPT0gbnVsbCkgeworCQkJCXRpbWVyID0gbmV3IFRocmVhZCh0aGlzKTsKKwkJCQl0aW1lci5zZXRQcmlvcml0eShUaHJlYWQuTUlOX1BSSU9SSVRZKTsKKwkJCQl0aW1lci5zZXREYWVtb24odHJ1ZSk7CisJCQkJdGltZXIuc3RhcnQoKTsKKwkJCX0KKwkJCWlmICgocHJldiA9PSAwKSB8fCAod2F0Y2ggPCBwcmV2KSkgeworCQkJCXN5bmNocm9uaXplZCAodGhpcykgeyBub3RpZnkoKTsgfSAvL3RyeSB7fWNhdGNoIChJbGxlZ2FsTW9uaXRvclN0YXRlRXhjZXB0aW9uIGltc2UpIHt9CisJCQl9CisJCX0KKwl9CisKKwkvKioKKwkgKgorCSAqLworCXB1YmxpYyBib29sZWFuIGlzRm9jdXNUcmF2ZXJzYWJsZSgpIHsKKwkJcmV0dXJuIHRydWU7CisJfQorCisJLy88amF2YQorCS8qbWlkcAorCXByaXZhdGUgc3RhdGljIGZpbmFsIGludCBNT1VTRV9FTlRFUkVEID0gMTsKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgTU9VU0VfRVhJVEVEID0gMjsgLy8KKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgTU9VU0VfUFJFU1NFRCA9IDM7CisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IE1PVVNFX0RSQUdHRUQgPSA0OworCXByaXZhdGUgc3RhdGljIGZpbmFsIGludCBNT1VTRV9SRUxFQVNFRCA9IDU7CisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IERSQUdfRU5URVJFRCA9IDY7CisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IERSQUdfRVhJVEVEID0gNzsKKworCXByb3RlY3RlZCB2b2lkIHBvaW50ZXJQcmVzc2VkKGludCB4LCBpbnQgeSkgeworCQlmaW5kQ29tcG9uZW50KGNvbnRlbnQsIHgsIHkpOworCQlpZiAocG9wdXBvd25lciAhPSBudWxsKSB7CisJCQlTdHJpbmcgY2xhc3NuYW1lID0gZ2V0Q2xhc3MobW91c2VpbnNpZGUpOworCQkJaWYgKChwb3B1cG93bmVyICE9IG1vdXNlaW5zaWRlKSAmJgorCQkJCQkoY2xhc3NuYW1lICE9ICJwb3B1cG1lbnUiKSAmJiAoY2xhc3NuYW1lICE9ICJjb21ib2xpc3QiKSkgeworCQkJCWNsb3NldXAoKTsKKwkJCX0KKwkJfQorCQloYW5kbGVNb3VzZUV2ZW50KHgsIHksIDEsIGZhbHNlLCBmYWxzZSwgZmFsc2UsCisJCQlNb3VzZUV2ZW50Lk1PVVNFX0VOVEVSRUQsIG1vdXNlaW5zaWRlLCBpbnNpZGVwYXJ0KTsKKwkJbW91c2VwcmVzc2VkID0gbW91c2VpbnNpZGU7CisJCXByZXNzZWRwYXJ0ID0gaW5zaWRlcGFydDsKKwkJaGFuZGxlTW91c2VFdmVudCh4LCB5LCAxLCBmYWxzZSwgZmFsc2UsIGZhbHNlLAorCQkJTW91c2VFdmVudC5NT1VTRV9QUkVTU0VELCBtb3VzZXByZXNzZWQsIHByZXNzZWRwYXJ0KTsKKwl9CisKKwlwcm90ZWN0ZWQgdm9pZCBwb2ludGVyUmVsZWFzZWQoaW50IHgsIGludCB5KSB7CisJCU9iamVjdCBtb3VzZXJlbGVhc2UgPSBtb3VzZXByZXNzZWQ7CisJCU9iamVjdCByZWxlYXNlcGFydCA9IHByZXNzZWRwYXJ0OworCQltb3VzZXByZXNzZWQgPSBwcmVzc2VkcGFydCA9IG51bGw7CisJCWhhbmRsZU1vdXNlRXZlbnQoeCwgeSwgMSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwKKwkJCU1vdXNlRXZlbnQuTU9VU0VfUkVMRUFTRUQsIG1vdXNlcmVsZWFzZSwgcmVsZWFzZXBhcnQpOworCX0KKworCXByb3RlY3RlZCB2b2lkIHBvaW50ZXJEcmFnZ2VkKGludCB4LCBpbnQgeSkgeworCQlPYmplY3QgcHJldmluc2lkZSA9IG1vdXNlaW5zaWRlOworCQlPYmplY3QgcHJldnBhcnQgPSBpbnNpZGVwYXJ0OworCQlmaW5kQ29tcG9uZW50KGNvbnRlbnQsIHgsIHkpOworCQlib29sZWFuIHNhbWUgPSAocHJldmluc2lkZSA9PSBtb3VzZWluc2lkZSkgJiYgKHByZXZwYXJ0ID09IGluc2lkZXBhcnQpOworCQlib29sZWFuIGlzaW4gPSAobW91c2VwcmVzc2VkID09IG1vdXNlaW5zaWRlKSAmJiAocHJlc3NlZHBhcnQgPT0gaW5zaWRlcGFydCk7CisJCWJvb2xlYW4gd2FzaW4gPSAobW91c2VwcmVzc2VkID09IHByZXZpbnNpZGUpICYmIChwcmVzc2VkcGFydCA9PSBwcmV2cGFydCk7CisKKwkJaWYgKHdhc2luICYmICFpc2luKSB7CisJCQloYW5kbGVNb3VzZUV2ZW50KHgsIHksIDEsIGZhbHNlLCBmYWxzZSwgZmFsc2UsCisJCQkJTW91c2VFdmVudC5NT1VTRV9FWElURUQsIG1vdXNlcHJlc3NlZCwgcHJlc3NlZHBhcnQpOworCQl9CisJCWVsc2UgaWYgKCFzYW1lICYmIChwb3B1cG93bmVyICE9IG51bGwpICYmICF3YXNpbikgeworCQkJaGFuZGxlTW91c2VFdmVudCh4LCB5LCAxLCBmYWxzZSwgZmFsc2UsIGZhbHNlLAorCQkJCURSQUdfRVhJVEVELCBwcmV2aW5zaWRlLCBwcmV2cGFydCk7CisJCX0KKwkJaWYgKGlzaW4gJiYgIXdhc2luKSB7CisJCQloYW5kbGVNb3VzZUV2ZW50KHgsIHksIDEsIGZhbHNlLCBmYWxzZSwgZmFsc2UsCisJCQkJTW91c2VFdmVudC5NT1VTRV9FTlRFUkVELCBtb3VzZXByZXNzZWQsIHByZXNzZWRwYXJ0KTsKKwkJfQorCQllbHNlIGlmICghc2FtZSAmJiAocG9wdXBvd25lciAhPSBudWxsKSAmJiAhaXNpbikgeworCQkJaGFuZGxlTW91c2VFdmVudCh4LCB5LCAxLCBmYWxzZSwgZmFsc2UsIGZhbHNlLAorCQkJCURSQUdfRU5URVJFRCwgbW91c2VpbnNpZGUsIGluc2lkZXBhcnQpOworCQl9CisJCWlmIChpc2luID09IHdhc2luKSB7CisJCQloYW5kbGVNb3VzZUV2ZW50KHgsIHksIDEsIGZhbHNlLCBmYWxzZSwgZmFsc2UsCisJCQkJTW91c2VFdmVudC5NT1VTRV9EUkFHR0VELCBtb3VzZXByZXNzZWQsIHByZXNzZWRwYXJ0KTsKKwkJfQorCX0KKworCXByb3RlY3RlZCB2b2lkIGtleVByZXNzZWQoaW50IGtleUNvZGUpIHsKKwkJaWYgKChwb3B1cG93bmVyICE9IG51bGwpIHx8IChmb2N1c293bmVyICE9IG51bGwpKSB7CisJCQloaWRlVGlwKCk7CisJCQlpZiAoa2V5Q29kZSA+IDApIHsKKwkJCQlwcm9jZXNzS2V5UHJlc3MoKHBvcHVwb3duZXIgIT0gbnVsbCkgPyBwb3B1cG93bmVyIDogZm9jdXNvd25lciwKKwkJCQkJZmFsc2UsIGZhbHNlLCAxLCBrZXlDb2RlLCAwKTsKKwkJCX0KKwkJCWVsc2UgeworCQkJCWludCBrZXljaGFyID0gMCwga2V5ID0gMDsKKwkJCQlzd2l0Y2ggKGdldEdhbWVBY3Rpb24oa2V5Q29kZSkpIHsKKwkJCQkJY2FzZSBVUDoga2V5ID0gS2V5RXZlbnQuVktfVVA7IGJyZWFrOworCQkJCQljYXNlIExFRlQ6IGtleSA9IEtleUV2ZW50LlZLX0xFRlQ7IGJyZWFrOworCQkJCQljYXNlIERPV046IGtleSA9IEtleUV2ZW50LlZLX0RPV047IGJyZWFrOworCQkJCQljYXNlIFJJR0hUOiBrZXkgPSBLZXlFdmVudC5WS19SSUdIVDsgYnJlYWs7CisJCQkJCWNhc2UgRklSRToga2V5ID0gS2V5RXZlbnQuVktfRU5URVI7IGtleWNoYXIgPSBLZXlFdmVudC5WS19TUEFDRTsgYnJlYWs7CisJCQkJCWNhc2UgR0FNRV9BOiBrZXkgPSBLZXlFdmVudC5WS19FU0NBUEU7IGJyZWFrOworCQkJCX0KKwkJCQlpZiAoa2V5ICE9IDApIHsKKwkJCQkJcHJvY2Vzc0tleVByZXNzKChwb3B1cG93bmVyICE9IG51bGwpID8gcG9wdXBvd25lciA6IGZvY3Vzb3duZXIsCisJCQkJCQlmYWxzZSwgZmFsc2UsIDEsIGtleWNoYXIsIGtleSk7CisJCQkJfQorCQkJCS8vaWYgKGtleUNvZGUgPT0gZ2V0S2V5Q29kZShMRUZUKSkgeworCQkJfQorCQl9CisJfQorCisJcHJvdGVjdGVkIHZvaWQga2V5UmVwZWF0ZWQoaW50IGtleUNvZGUpIHsKKwkJa2V5UHJlc3NlZChrZXlDb2RlKTsKKwl9CisKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBDb21tYW5kIG5leHRjb21tYW5kID0gbmV3IENvbW1hbmQoIk5leHQiLCBDb21tYW5kLlNDUkVFTiwgMCk7CisJLy9wcml2YXRlIHN0YXRpYyBmaW5hbCBDb21tYW5kIHByZXZjb21tYW5kID0gbmV3IENvbW1hbmQoIlByZXZpb3VzIiwgQ29tbWFuZC5TQ1JFRU4sIDApOworCXsKKwkJYWRkQ29tbWFuZChuZXh0Y29tbWFuZCk7CisJCS8vYWRkQ29tbWFuZChwcmV2Y29tbWFuZCk7CisJCXNldENvbW1hbmRMaXN0ZW5lcih0aGlzKTsKKwl9CisKKwlwdWJsaWMgdm9pZCBjb21tYW5kQWN0aW9uKENvbW1hbmQgY29tbWFuZCwgRGlzcGxheWFibGUgZGlzcGxheWFibGUpIHsKKwkJaWYgKGNvbW1hbmQgPT0gbmV4dGNvbW1hbmQpIHsKKwkJCXNldE5leHRGb2N1c2FibGUoZm9jdXNvd25lciwgZmFsc2UpOworCQkJcmVwYWludChmb2N1c293bmVyKTsKKwkJCWNsb3NldXAoKTsKKwkJfQorCQkvL2Vsc2UgaWYgKGNvbW1hbmQgPT0gcHJldmNvbW1hbmQpIHsKKwkJCS8vc2V0UHJldmlvdXNGb2N1c2FibGUoZm9jdXNvd25lciwgbnVsbCwgdHJ1ZSwgdHJ1ZSwgZmFsc2UpOworCQkJLy9yZXBhaW50KGZvY3Vzb3duZXIpOworCQkJLy9jbG9zZXVwKCk7CisJCS8vfQorCX0KKwltaWRwKi8KKwkvL2phdmE+CisKKwkvKioKKwkgKgorCSAqLworCXByb3RlY3RlZCB2b2lkIHByb2Nlc3NFdmVudCg8ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAnQVdURXZlbnQnIj5BV1RFdmVudDwvZXJyb3I+IGUpIHsKKwkJaW50IGlkID0gZS48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIG1ldGhvZCAnZ2V0SUQoKSciPmdldElEPC9lcnJvcj4oKTsKKwkJaWYgKChpZCA+PSA8ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAnTW91c2VFdmVudCciPk1vdXNlRXZlbnQ8L2Vycm9yPi5NT1VTRV9GSVJTVCkgJiYgKGlkIDw9IDxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICdNb3VzZUV2ZW50JyI+TW91c2VFdmVudDwvZXJyb3I+Lk1PVVNFX0xBU1QpKSB7CisJCQk8ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAnTW91c2VFdmVudCciPk1vdXNlRXZlbnQ8L2Vycm9yPiBtZSA9ICg8ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAnTW91c2VFdmVudCciPk1vdXNlRXZlbnQ8L2Vycm9yPikgZTsKKwkJCWludCB4ID0gbWUuPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBtZXRob2QgJ2dldFgoKSciPmdldFg8L2Vycm9yPigpOworCQkJaW50IHkgPSBtZS48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIG1ldGhvZCAnZ2V0WSgpJyI+Z2V0WTwvZXJyb3I+KCk7CisJCQlpbnQgY2xpY2tjb3VudCA9IG1lLjxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgbWV0aG9kICdnZXRDbGlja0NvdW50KCknIj5nZXRDbGlja0NvdW50PC9lcnJvcj4oKTsKKwkJCWJvb2xlYW4gc2hpZnRkb3duID0gbWUuPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBtZXRob2QgJ2lzU2hpZnREb3duKCknIj5pc1NoaWZ0RG93bjwvZXJyb3I+KCk7CisJCQlib29sZWFuIGNvbnRyb2xkb3duID0gbWUuPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBtZXRob2QgJ2lzQ29udHJvbERvd24oKSciPmlzQ29udHJvbERvd248L2Vycm9yPigpOworCQkJYm9vbGVhbiBwb3B1cHRyaWdnZXIgPSBtZS48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIG1ldGhvZCAnaXNQb3B1cFRyaWdnZXIoKSciPmlzUG9wdXBUcmlnZ2VyPC9lcnJvcj4oKTsKKwkJCWlmIChpZCA9PSA8ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAnTW91c2VFdmVudCciPk1vdXNlRXZlbnQ8L2Vycm9yPi5NT1VTRV9FTlRFUkVEKSB7CisJCQkJaWYgKG1vdXNlcHJlc3NlZCA9PSBudWxsKSB7CisJCQkJCWZpbmRDb21wb25lbnQoY29udGVudCwgeCwgeSk7CisJCQkJCWhhbmRsZU1vdXNlRXZlbnQoeCwgeSwgY2xpY2tjb3VudCwgc2hpZnRkb3duLCBjb250cm9sZG93biwgcG9wdXB0cmlnZ2VyLAorCQkJCQkJPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ01vdXNlRXZlbnQnIj5Nb3VzZUV2ZW50PC9lcnJvcj4uTU9VU0VfRU5URVJFRCwgbW91c2VpbnNpZGUsIGluc2lkZXBhcnQpOworCQkJCX0KKwkJCX0KKwkJCWVsc2UgaWYgKGlkID09IDxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICdNb3VzZUV2ZW50JyI+TW91c2VFdmVudDwvZXJyb3I+Lk1PVVNFX01PVkVEKSB7CisJCQkJT2JqZWN0IHByZXZpbnNpZGUgPSBtb3VzZWluc2lkZTsKKwkJCQlPYmplY3QgcHJldnBhcnQgPSBpbnNpZGVwYXJ0OworCQkJCWZpbmRDb21wb25lbnQoY29udGVudCwgeCwgeSk7CisJCQkJaWYgKChwcmV2aW5zaWRlID09IG1vdXNlaW5zaWRlKSAmJiAocHJldnBhcnQgPT0gaW5zaWRlcGFydCkpIHsKKwkJCQkJaGFuZGxlTW91c2VFdmVudCh4LCB5LCBjbGlja2NvdW50LCBzaGlmdGRvd24sIGNvbnRyb2xkb3duLCBwb3B1cHRyaWdnZXIsCisJCQkJCQk8ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAnTW91c2VFdmVudCciPk1vdXNlRXZlbnQ8L2Vycm9yPi5NT1VTRV9NT1ZFRCwgbW91c2VpbnNpZGUsIGluc2lkZXBhcnQpOworCQkJCX0KKwkJCQllbHNlIHsKKwkJCQkJaGFuZGxlTW91c2VFdmVudCh4LCB5LCBjbGlja2NvdW50LCBzaGlmdGRvd24sIGNvbnRyb2xkb3duLCBwb3B1cHRyaWdnZXIsCisJCQkJCQk8ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAnTW91c2VFdmVudCciPk1vdXNlRXZlbnQ8L2Vycm9yPi5NT1VTRV9FWElURUQsIHByZXZpbnNpZGUsIHByZXZwYXJ0KTsKKwkJCQkJaGFuZGxlTW91c2VFdmVudCh4LCB5LCBjbGlja2NvdW50LCBzaGlmdGRvd24sIGNvbnRyb2xkb3duLCBwb3B1cHRyaWdnZXIsCisJCQkJCQk8ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAnTW91c2VFdmVudCciPk1vdXNlRXZlbnQ8L2Vycm9yPi5NT1VTRV9FTlRFUkVELCBtb3VzZWluc2lkZSwgaW5zaWRlcGFydCk7CisJCQkJfQorCQkJfQorCQkJZWxzZSBpZiAoaWQgPT0gPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ01vdXNlRXZlbnQnIj5Nb3VzZUV2ZW50PC9lcnJvcj4uTU9VU0VfRVhJVEVEKSB7CisJCQkJaWYgKG1vdXNlcHJlc3NlZCA9PSBudWxsKSB7CisJCQkJCU9iamVjdCBtb3VzZWV4aXQgPSBtb3VzZWluc2lkZTsKKwkJCQkJT2JqZWN0IGV4aXRwYXJ0ID0gaW5zaWRlcGFydDsKKwkJCQkJbW91c2VpbnNpZGUgPSBpbnNpZGVwYXJ0ID0gbnVsbDsKKwkJCQkJaGFuZGxlTW91c2VFdmVudCh4LCB5LCBjbGlja2NvdW50LCBzaGlmdGRvd24sIGNvbnRyb2xkb3duLCBwb3B1cHRyaWdnZXIsCisJCQkJCQk8ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAnTW91c2VFdmVudCciPk1vdXNlRXZlbnQ8L2Vycm9yPi5NT1VTRV9FWElURUQsIG1vdXNlZXhpdCwgZXhpdHBhcnQpOworCQkJCX0KKwkJCX0KKwkJCWVsc2UgaWYgKGlkID09IDxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICdNb3VzZUV2ZW50JyI+TW91c2VFdmVudDwvZXJyb3I+Lk1PVVNFX1BSRVNTRUQpIHsKKwkJCQlpZiAocG9wdXBvd25lciAhPSBudWxsKSB7CisJCQkJCVN0cmluZyBjbGFzc25hbWUgPSBnZXRDbGFzcyhtb3VzZWluc2lkZSk7CisJCQkJCWlmICgocG9wdXBvd25lciAhPSBtb3VzZWluc2lkZSkgJiYKKwkJCQkJCQkoY2xhc3NuYW1lICE9ICJwb3B1cG1lbnUiKSAmJiAoY2xhc3NuYW1lICE9ICJjb21ib2xpc3QiKSkgeworCQkJCQkJY2xvc2V1cCgpOworCQkJCQl9CisJCQkJfQorCQkJCW1vdXNlcHJlc3NlZCA9IG1vdXNlaW5zaWRlOworCQkJCXByZXNzZWRwYXJ0ID0gaW5zaWRlcGFydDsKKwkJCQloYW5kbGVNb3VzZUV2ZW50KHgsIHksIGNsaWNrY291bnQsIHNoaWZ0ZG93biwgY29udHJvbGRvd24sIHBvcHVwdHJpZ2dlciwKKwkJCQkJPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ01vdXNlRXZlbnQnIj5Nb3VzZUV2ZW50PC9lcnJvcj4uTU9VU0VfUFJFU1NFRCwgbW91c2VwcmVzc2VkLCBwcmVzc2VkcGFydCk7CisJCQl9CisJCQllbHNlIGlmIChpZCA9PSA8ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAnTW91c2VFdmVudCciPk1vdXNlRXZlbnQ8L2Vycm9yPi5NT1VTRV9EUkFHR0VEKSB7CisJCQkJT2JqZWN0IHByZXZpbnNpZGUgPSBtb3VzZWluc2lkZTsKKwkJCQlPYmplY3QgcHJldnBhcnQgPSBpbnNpZGVwYXJ0OworCQkJCWZpbmRDb21wb25lbnQoY29udGVudCwgeCwgeSk7CisJCQkJYm9vbGVhbiBzYW1lID0gKHByZXZpbnNpZGUgPT0gbW91c2VpbnNpZGUpICYmIChwcmV2cGFydCA9PSBpbnNpZGVwYXJ0KTsKKwkJCQlib29sZWFuIGlzaW4gPSAobW91c2VwcmVzc2VkID09IG1vdXNlaW5zaWRlKSAmJiAocHJlc3NlZHBhcnQgPT0gaW5zaWRlcGFydCk7CisJCQkJYm9vbGVhbiB3YXNpbiA9IChtb3VzZXByZXNzZWQgPT0gcHJldmluc2lkZSkgJiYgKHByZXNzZWRwYXJ0ID09IHByZXZwYXJ0KTsKKworCQkJCWlmICh3YXNpbiAmJiAhaXNpbikgeworCQkJCQloYW5kbGVNb3VzZUV2ZW50KHgsIHksIGNsaWNrY291bnQsIHNoaWZ0ZG93biwgY29udHJvbGRvd24sIHBvcHVwdHJpZ2dlciwKKwkJCQkJCTxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICdNb3VzZUV2ZW50JyI+TW91c2VFdmVudDwvZXJyb3I+Lk1PVVNFX0VYSVRFRCwgbW91c2VwcmVzc2VkLCBwcmVzc2VkcGFydCk7CisJCQkJfQorCQkJCWVsc2UgaWYgKCFzYW1lICYmIChwb3B1cG93bmVyICE9IG51bGwpICYmICF3YXNpbikgeworCQkJCQloYW5kbGVNb3VzZUV2ZW50KHgsIHksIGNsaWNrY291bnQsIHNoaWZ0ZG93biwgY29udHJvbGRvd24sIHBvcHVwdHJpZ2dlciwKKwkJCQkJCURSQUdfRVhJVEVELCBwcmV2aW5zaWRlLCBwcmV2cGFydCk7CisJCQkJfQorCQkJCWlmIChpc2luICYmICF3YXNpbikgeworCQkJCQloYW5kbGVNb3VzZUV2ZW50KHgsIHksIGNsaWNrY291bnQsIHNoaWZ0ZG93biwgY29udHJvbGRvd24sIHBvcHVwdHJpZ2dlciwKKwkJCQkJCTxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICdNb3VzZUV2ZW50JyI+TW91c2VFdmVudDwvZXJyb3I+Lk1PVVNFX0VOVEVSRUQsIG1vdXNlcHJlc3NlZCwgcHJlc3NlZHBhcnQpOworCQkJCX0KKwkJCQllbHNlIGlmICghc2FtZSAmJiAocG9wdXBvd25lciAhPSBudWxsKSAmJiAhaXNpbikgeworCQkJCQloYW5kbGVNb3VzZUV2ZW50KHgsIHksIGNsaWNrY291bnQsIHNoaWZ0ZG93biwgY29udHJvbGRvd24sIHBvcHVwdHJpZ2dlciwKKwkJCQkJCURSQUdfRU5URVJFRCwgbW91c2VpbnNpZGUsIGluc2lkZXBhcnQpOworCQkJCX0KKwkJCQlpZiAoaXNpbiA9PSB3YXNpbikgeworCQkJCQloYW5kbGVNb3VzZUV2ZW50KHgsIHksIGNsaWNrY291bnQsIHNoaWZ0ZG93biwgY29udHJvbGRvd24sIHBvcHVwdHJpZ2dlciwKKwkJCQkJCTxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICdNb3VzZUV2ZW50JyI+TW91c2VFdmVudDwvZXJyb3I+Lk1PVVNFX0RSQUdHRUQsIG1vdXNlcHJlc3NlZCwgcHJlc3NlZHBhcnQpOworCQkJCX0KKwkJCX0KKwkJCWVsc2UgaWYgKGlkID09IDxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICdNb3VzZUV2ZW50JyI+TW91c2VFdmVudDwvZXJyb3I+Lk1PVVNFX1JFTEVBU0VEKSB7CisJCQkJT2JqZWN0IG1vdXNlcmVsZWFzZSA9IG1vdXNlcHJlc3NlZDsKKwkJCQlPYmplY3QgcmVsZWFzZXBhcnQgPSBwcmVzc2VkcGFydDsKKwkJCQltb3VzZXByZXNzZWQgPSBwcmVzc2VkcGFydCA9IG51bGw7CisJCQkJaGFuZGxlTW91c2VFdmVudCh4LCB5LCBjbGlja2NvdW50LCBzaGlmdGRvd24sIGNvbnRyb2xkb3duLCBwb3B1cHRyaWdnZXIsCisJCQkJCTxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICdNb3VzZUV2ZW50JyI+TW91c2VFdmVudDwvZXJyb3I+Lk1PVVNFX1JFTEVBU0VELCBtb3VzZXJlbGVhc2UsIHJlbGVhc2VwYXJ0KTsKKwkJCQlpZiAoKG1vdXNlaW5zaWRlICE9IG51bGwpICYmCisJCQkJCQkoKG1vdXNlcmVsZWFzZSAhPSBtb3VzZWluc2lkZSkgfHwgKHJlbGVhc2VwYXJ0ICE9IGluc2lkZXBhcnQpKSkgeworCQkJCQloYW5kbGVNb3VzZUV2ZW50KHgsIHksIGNsaWNrY291bnQsIHNoaWZ0ZG93biwgY29udHJvbGRvd24sIHBvcHVwdHJpZ2dlciwKKwkJCQkJCTxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICdNb3VzZUV2ZW50JyI+TW91c2VFdmVudDwvZXJyb3I+Lk1PVVNFX0VOVEVSRUQsIG1vdXNlaW5zaWRlLCBpbnNpZGVwYXJ0KTsKKwkJCQl9CisJCQl9CisJCX0KKwkJZWxzZSBpZiAoaWQgPT0gTU9VU0VfV0hFRUwpIHsKKwkJCTxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICdSZWN0YW5nbGUnIj5SZWN0YW5nbGU8L2Vycm9yPiBwb3J0ID0gZ2V0UmVjdGFuZ2xlKG1vdXNlaW5zaWRlLCAiOnBvcnQiKTsKKwkJCWlmIChwb3J0ICE9IG51bGwpIHsgLy8gaXMgc2Nyb2xsYWJsZQorCQkJCTxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICdSZWN0YW5nbGUnIj5SZWN0YW5nbGU8L2Vycm9yPiBib3VuZHMgPSBnZXRSZWN0YW5nbGUobW91c2VpbnNpZGUsICJib3VuZHMiKTsKKwkJCQl0cnkgeyAvLyBtb3VzZSB3aGVlbCBpcyBzdXBwb3J0ZWQgc2luY2UgMS40IHRodXMgaXQgdXNlIHJlZmxlY3Rpb24KKwkJCQkJaWYgKHdoZWVscm90YXRpb24gPT0gbnVsbCkgeworCQkJCQkJd2hlZWxyb3RhdGlvbiA9IGUuPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBtZXRob2QgJ2dldENsYXNzKCknIj5nZXRDbGFzczwvZXJyb3I+KCkuZ2V0TWV0aG9kKCJnZXRXaGVlbFJvdGF0aW9uIiwgbnVsbCk7CisJCQkJCX0KKwkJCQkJaW50IHJvdGF0aW9uID0gKChJbnRlZ2VyKSB3aGVlbHJvdGF0aW9uLjxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgbWV0aG9kICdpbnZva2UoQVdURXZlbnQsIG51bGwpJyI+aW52b2tlPC9lcnJvcj4oZSwgbnVsbCkpLmludFZhbHVlKCk7CisKKwkJCQkJaWYgKHBvcnQuPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ3gnIj54PC9lcnJvcj4gKyBwb3J0LjxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICd3aWR0aCciPndpZHRoPC9lcnJvcj4gPCBib3VuZHMuPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ3dpZHRoJyI+d2lkdGg8L2Vycm9yPikgeyAvLyBoYXMgdmVydGljYWwgc2Nyb2xsYmFyCisJCQkJCQlwcm9jZXNzU2Nyb2xsKG1vdXNlaW5zaWRlLCAocm90YXRpb24gPiAwKSA/ICJkb3duIiA6ICJ1cCIpOworCQkJCQl9CisJCQkJCWVsc2UgaWYgKHBvcnQuPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ3knIj55PC9lcnJvcj4gKyBwb3J0LjxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICdoZWlnaHQnIj5oZWlnaHQ8L2Vycm9yPiA8IGJvdW5kcy48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAnaGVpZ2h0JyI+aGVpZ2h0PC9lcnJvcj4pIHsgLy8gaGFzIGhvcml6b250YWwgc2Nyb2xsYmFyCisJCQkJCQlwcm9jZXNzU2Nyb2xsKG1vdXNlaW5zaWRlLCAocm90YXRpb24gPiAwKSA/ICJyaWdodCIgOiAibGVmdCIpOworCQkJCQl9CisJCQkJfSBjYXRjaCAoRXhjZXB0aW9uIGV4YykgeyAvKiBuZXZlciAqLyB9CisJCQl9CisJCX0KKwkJZWxzZSBpZiAoKGlkID09IDxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICdLZXlFdmVudCciPktleUV2ZW50PC9lcnJvcj4uS0VZX1BSRVNTRUQpIHx8IChpZCA9PSA8ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAnS2V5RXZlbnQnIj5LZXlFdmVudDwvZXJyb3I+LktFWV9UWVBFRCkpIHsKKwkJCWlmIChmb2N1c2luc2lkZSAmJiAoKHBvcHVwb3duZXIgIT0gbnVsbCkgfHwgKGZvY3Vzb3duZXIgIT0gbnVsbCkpKSB7CisJCQkJaGlkZVRpcCgpOworCQkJCTxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICdLZXlFdmVudCciPktleUV2ZW50PC9lcnJvcj4ga2UgPSAoPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ0tleUV2ZW50JyI+S2V5RXZlbnQ8L2Vycm9yPikgZTsKKwkJCQlpbnQga2V5Y2hhciA9IGtlLjxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgbWV0aG9kICdnZXRLZXlDaGFyKCknIj5nZXRLZXlDaGFyPC9lcnJvcj4oKTsKKwkJCQlib29sZWFuIGNvbnRyb2wgPSAoa2V5Y2hhciA8PSAweDFmKSB8fAorCQkJCQkoKGtleWNoYXIgPj0gMHg3ZikgJiYgKGtleWNoYXIgPD0gMHg5ZikpIHx8CisJCQkJCShrZXljaGFyID49IDB4ZmZmZikgfHwga2UuPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBtZXRob2QgJ2lzQ29udHJvbERvd24oKSciPmlzQ29udHJvbERvd248L2Vycm9yPigpOworCQkJCWlmIChjb250cm9sID09IChpZCA9PSA8ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAnS2V5RXZlbnQnIj5LZXlFdmVudDwvZXJyb3I+LktFWV9QUkVTU0VEKSkgeworCQkJCQlpbnQga2V5Y29kZSA9IGNvbnRyb2wgPyBrZS48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIG1ldGhvZCAnZ2V0S2V5Q29kZSgpJyI+Z2V0S2V5Q29kZTwvZXJyb3I+KCkgOiAwOworCQkJCQlpZiAoIXByb2Nlc3NLZXlQcmVzcygocG9wdXBvd25lciAhPSBudWxsKSA/IHBvcHVwb3duZXIgOiBmb2N1c293bmVyLAorCQkJCQkJCWtlLjxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgbWV0aG9kICdpc1NoaWZ0RG93bigpJyI+aXNTaGlmdERvd248L2Vycm9yPigpLCBrZS48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIG1ldGhvZCAnaXNDb250cm9sRG93bigpJyI+aXNDb250cm9sRG93bjwvZXJyb3I+KCksIGtlLjxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgbWV0aG9kICdnZXRNb2RpZmllcnMoKSciPmdldE1vZGlmaWVyczwvZXJyb3I+KCksCisJCQkJCQkJY29udHJvbCA/IDAgOiBrZXljaGFyLCBrZXljb2RlKSkgeworCQkJCQkJaWYgKChrZXljb2RlID09IDxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICdLZXlFdmVudCciPktleUV2ZW50PC9lcnJvcj4uVktfVEFCKSB8fAorCQkJCQkJCQkoKGtleWNvZGUgPT0gPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ0tleUV2ZW50JyI+S2V5RXZlbnQ8L2Vycm9yPi5WS19GNikgJiYgKGtlLjxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgbWV0aG9kICdpc0FsdERvd24oKSciPmlzQWx0RG93bjwvZXJyb3I+KCkgfHwga2UuPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBtZXRob2QgJ2lzQ29udHJvbERvd24oKSciPmlzQ29udHJvbERvd248L2Vycm9yPigpKSkpIHsKKwkJCQkJCQlib29sZWFuIG91dGdvID0gKGtleWNvZGUgPT0gPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ0tleUV2ZW50JyI+S2V5RXZlbnQ8L2Vycm9yPi5WS19GNik7CisJCQkJCQkJaWYgKCFrZS48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIG1ldGhvZCAnaXNTaGlmdERvd24oKSciPmlzU2hpZnREb3duPC9lcnJvcj4oKSA/IHNldE5leHRGb2N1c2FibGUoZm9jdXNvd25lciwgb3V0Z28pIDoKKwkJCQkJCQkJCXNldFByZXZpb3VzRm9jdXNhYmxlKGZvY3Vzb3duZXIsIG91dGdvKSkgeworCQkJCQkJCQlrZS48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIG1ldGhvZCAnY29uc3VtZSgpJyI+Y29uc3VtZTwvZXJyb3I+KCk7CisJCQkJCQkJfSBlbHNlIGlmIChNT1VTRV9XSEVFTCAhPSAwKSB7IC8vIDEuNAorCQkJCQkJCQlpZiAoIWtlLjxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgbWV0aG9kICdpc1NoaWZ0RG93bigpJyI+aXNTaGlmdERvd248L2Vycm9yPigpKSB7CisJCQkJCQkJCQl0cmFuc2ZlckZvY3VzKCk7CisJCQkJCQkJCX0KKwkJCQkJCQkJZWxzZSB7IHRyeSB7CisJCQkJCQkJCQkJZ2V0Q2xhc3MoKS5nZXRNZXRob2QoInRyYW5zZmVyRm9jdXNCYWNrd2FyZCIsIG51bGwpLiA8ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIG1ldGhvZCAnaW52b2tlKFRoaW5sZXQsIG51bGwpJyI+aW52b2tlPC9lcnJvcj4odGhpcywgbnVsbCk7CisJCQkJCQkJCX0gY2F0Y2ggKEV4Y2VwdGlvbiBleGMpIHsgLyogbmV2ZXIgKi8gfSB9CisJCQkJCQkJfQorCQkJCQkJCXJlcGFpbnQoZm9jdXNvd25lcik7CisJCQkJCQkJY2xvc2V1cCgpOworCQkJCQkJfQorCQkJCQkJZWxzZSBpZiAoa2V5Y29kZSA9PSA8ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAnS2V5RXZlbnQnIj5LZXlFdmVudDwvZXJyb3I+LlZLX0Y4KSB7CisJCQkJCQkJZm9yIChPYmplY3Qgc3BsaXRwYW5lID0gZm9jdXNvd25lcjsKKwkJCQkJCQkJCXNwbGl0cGFuZSAhPSBudWxsOyBzcGxpdHBhbmUgPSBnZXRQYXJlbnQoc3BsaXRwYW5lKSkgeworCQkJCQkJCQlpZiAoZ2V0Q2xhc3Moc3BsaXRwYW5lKSA9PSAic3BsaXRwYW5lIikgeworCQkJCQkJCQkJc2V0Rm9jdXMoc3BsaXRwYW5lKTsgcmVwYWludChzcGxpdHBhbmUpOyBicmVhazsgLy9taWRkbGUKKwkJCQkJCQkJfQorCQkJCQkJCX0KKwkJCQkJCX0KKwkJCQkJfQorCQkJCQllbHNlIGtlLjxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgbWV0aG9kICdjb25zdW1lKCknIj5jb25zdW1lPC9lcnJvcj4oKTsKKwkJCQkJLyplbHNlIGlmIChrZXljb2RlID09IEtleUV2ZW50LlZLX0YxMCkgeworCQkJCQkJT2JqZWN0IG1lbnViYXIgPSBudWxsOyAvLyBmaW5kKCJjbGFzcyIsICJtZW51YmFyIikKKwkJCQkJCWlmICgobWVudWJhciAhPSBudWxsKSAmJiAoZ2V0KG1lbnViYXIsICJzZWxlY3RlZCIpID09IG51bGwpKSB7CisJCQkJCQkJc2V0KG1lbnViYXIsICJzZWxlY3RlZCIsIGdldE1lbnUobWVudWJhciwgbnVsbCwgdHJ1ZSwgZmFsc2UpKTsKKwkJCQkJCQlPYmplY3QgcG9wdXAgPSBwb3B1cChtZW51YmFyLCAibWVudWJhciIpOworCQkJCQkJCXNldChwb3B1cCwgInNlbGVjdGVkIiwgZ2V0TWVudShwb3B1cCwgbnVsbCwgdHJ1ZSwgdHJ1ZSkpOworCQkJCQkJCXJlcGFpbnQobWVudWJhcik7IC8vICwgc2VsZWN0ZWQKKwkJCQkJCX0KKwkJCQkJfSovCisJCQkJfQorCQkJfQorCQl9CisJCS8qZWxzZSBpZiAoaWQgPT0gS2V5RXZlbnQuS0VZX1JFTEVBU0VEKSB7CisJCQlpZiAoZm9jdXNpbnNpZGUgJiYgKGZvY3Vzb3duZXIgIT0gbnVsbCkpIHsKKwkJCQlLZXlFdmVudCBrZSA9IChLZXlFdmVudCkgZTsKKwkJCQkvL3ByZXNzZWRrZXkgPSAwOworCQkJCXByb2Nlc3NLZXlSZWxlYXNlKGZvY3Vzb3duZXIsIGtlLCBrZS5nZXRLZXlDb2RlKCkpOworCQkJfQorCQl9Ki8KKwkJZWxzZSBpZiAoaWQgPT0gPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ0ZvY3VzRXZlbnQnIj5Gb2N1c0V2ZW50PC9lcnJvcj4uRk9DVVNfTE9TVCkgeworCQkJZm9jdXNpbnNpZGUgPSBmYWxzZTsKKwkJCWlmIChmb2N1c293bmVyICE9IG51bGwpIHsgcmVwYWludChmb2N1c293bmVyKTsgfQorCQkJY2xvc2V1cCgpOworCQl9CisJCWVsc2UgaWYgKGlkID09IDxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICdGb2N1c0V2ZW50JyI+Rm9jdXNFdmVudDwvZXJyb3I+LkZPQ1VTX0dBSU5FRCkgeworCQkJZm9jdXNpbnNpZGUgPSB0cnVlOworCQkJaWYgKGZvY3Vzb3duZXIgPT0gbnVsbCkgeyBzZXRGb2N1cyhjb250ZW50KTsgfQorCQkJCWVsc2UgeyByZXBhaW50KGZvY3Vzb3duZXIpOyB9CisJCX0KKwkJZWxzZSBpZiAoKGlkID09IDxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICdDb21wb25lbnRFdmVudCciPkNvbXBvbmVudEV2ZW50PC9lcnJvcj4uQ09NUE9ORU5UX1JFU0laRUQpIHx8CisJCQkJKGlkID09IDxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICdDb21wb25lbnRFdmVudCciPkNvbXBvbmVudEV2ZW50PC9lcnJvcj4uQ09NUE9ORU5UX1NIT1dOKSkgeworCQkJRGltZW5zaW9uIGQgPSBnZXRTaXplKCk7CisJCQkvL1N5c3RlbS5vdXQucHJpbnRsbihpZCArICI6ICIgKyBkLndpZHRoICsgIiwgIiArIGQuaGVpZ2h0KTsKKwkJCXNldFJlY3RhbmdsZShjb250ZW50LCAiYm91bmRzIiwgMCwgMCwgZC53aWR0aCwgZC5oZWlnaHQpOworCQkJdmFsaWRhdGUoY29udGVudCk7CisJCQljbG9zZXVwKCk7CisJCQlpZiAoIWZvY3VzaW5zaWRlKSAgeyByZXF1ZXN0Rm9jdXMoKTsgfQorCQl9CisJfQorCisJLyoqCisJICoKKwkgKi8KKwkvKnByaXZhdGUgYm9vbGVhbiBwcm9jZXNzS2V5UHJlc3MoT2JqZWN0IGNvbXBvbmVudCwKKwkJCUtleUV2ZW50IGUsIGludCBrZXljb2RlLCBPYmplY3QgaW52b2tlcikgeworCQlpZiAocHJvY2Vzc0tleVByZXNzKGNvbXBvbmVudCwgZSwga2V5Y29kZSkpIHsgcmV0dXJuIHRydWU7IH0KKwkJZm9yIChPYmplY3QgY29tcCA9IGdldChjb21wb25lbnQsICJjb21wb25lbnQiKTsKKwkJCQljb21wICE9IG51bGw7IGNvbXAgPSBnZXQoY29tcCwgIjpuZXh0IikpIHsKKwkJCWlmICgoY29tcCAhPSBpbnZva2VyKSAmJiBwcm9jZXNzS2V5UHJlc3MoY29tcCwgZSwga2V5Y29kZSwgbnVsbCkpIHsKKwkJCQlyZXR1cm4gdHJ1ZTsKKwkJCX0KKwkJfQorCQlpZiAoKGludm9rZXIgIT0gbnVsbCkgJiYgKGNvbXBvbmVudCAhPSBjb250ZW50KSkgeworCQkJT2JqZWN0IHBhcmVudCA9IGdldFBhcmVudChjb21wb25lbnQpOworCQkJaWYgKHBhcmVudCAhPSBudWxsKSB7CisJCQkJcmV0dXJuIHByb2Nlc3NLZXlQcmVzcyhwYXJlbnQsIGUsIGtleWNvZGUsIGNvbXBvbmVudCk7CisJCQl9CisJCX0KKwkJcmV0dXJuIGZhbHNlOworCX0qLworCS8vPGphdmEKKworCS8qKgorCSAqCisJICovCisJcHJpdmF0ZSBib29sZWFuIHByb2Nlc3NLZXlQcmVzcyhPYmplY3QgY29tcG9uZW50LAorCQkJYm9vbGVhbiBzaGlmdGRvd24sIGJvb2xlYW4gY29udHJvbGRvd24sIGludCBtb2RpZmllcnMsIGludCBrZXljaGFyLCBpbnQga2V5Y29kZSkgeworCQlTdHJpbmcgY2xhc3NuYW1lID0gZ2V0Q2xhc3MoY29tcG9uZW50KTsKKwkJaWYgKCJidXR0b24iID09IGNsYXNzbmFtZSkgeworCQkJaWYgKGtleWNoYXIgPT0gPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ0tleUV2ZW50JyI+S2V5RXZlbnQ8L2Vycm9yPi5WS19TUEFDRSB8fAorCQkJCQkoKGtleWNvZGUgPT0gPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ0tleUV2ZW50JyI+S2V5RXZlbnQ8L2Vycm9yPi5WS19FTlRFUikgJiYKKwkJCQkJCShnZXRTdHJpbmcoY29tcG9uZW50LCAidHlwZSIsIG51bGwpID09ICJkZWZhdWx0IikpIHx8CisJCQkJCSgoa2V5Y29kZSA9PSA8ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAnS2V5RXZlbnQnIj5LZXlFdmVudDwvZXJyb3I+LlZLX0VTQ0FQRSkgJiYgLy8uLi4KKwkJCQkJCShnZXRTdHJpbmcoY29tcG9uZW50LCAidHlwZSIsIG51bGwpID09ICJjYW5jZWwiKSkpIHsKKwkJCQkvL3ByZXNzZWRrZXkgPSBrZXljaGFyOworCQkJCWludm9rZShjb21wb25lbnQsICJhY3Rpb24iKTsKKwkJCQlyZXBhaW50KGNvbXBvbmVudCk7CisJCQkJcmV0dXJuIHRydWU7CisJCQl9CisJCX0KKwkJZWxzZSBpZiAoImNoZWNrYm94IiA9PSBjbGFzc25hbWUpIHsKKwkJCWlmIChrZXljaGFyID09IDxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICdLZXlFdmVudCciPktleUV2ZW50PC9lcnJvcj4uVktfU1BBQ0UpIHsKKwkJCQljaGFuZ2VDaGVjayhjb21wb25lbnQsIHRydWUpOworCQkJCXJlcGFpbnQoY29tcG9uZW50KTsKKwkJCQlyZXR1cm4gdHJ1ZTsKKwkJCX0KKwkJfQorCQllbHNlIGlmICgiY29tYm9ib3giID09IGNsYXNzbmFtZSkgeworCQkJT2JqZWN0IGNvbWJvbGlzdCA9IGdldChjb21wb25lbnQsICJjb21ib2xpc3QiKTsKKwkJCWlmIChjb21ib2xpc3QgPT0gbnVsbCkgeworCQkJCWlmIChnZXRCb29sZWFuKGNvbXBvbmVudCwgImVkaXRhYmxlIiwgdHJ1ZSkgJiYKKwkJCQkJCXByb2Nlc3NGaWVsZChjb21wb25lbnQsIHNoaWZ0ZG93biwgY29udHJvbGRvd24sIG1vZGlmaWVycywKKwkJCQkJCQlrZXljaGFyLCBrZXljb2RlLCBmYWxzZSwgZmFsc2UpKSB7CisJCQkJCXNldEludGVnZXIoY29tcG9uZW50LCAic2VsZWN0ZWQiLCAtMSwgLTEpOworCQkJCQlyZXR1cm4gdHJ1ZTsKKwkJCQl9CisJCQkJaWYgKChrZXljaGFyID09IDxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICdLZXlFdmVudCciPktleUV2ZW50PC9lcnJvcj4uVktfU1BBQ0UpIHx8IChrZXljb2RlID09IDxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICdLZXlFdmVudCciPktleUV2ZW50PC9lcnJvcj4uVktfRE9XTikpIHsKKwkJCQkJY29tYm9saXN0ID0gcG9wdXAoY29tcG9uZW50LCBjbGFzc25hbWUpOworCQkJCQlpbnQgc2VsZWN0ZWQgPSBnZXRJbnRlZ2VyKGNvbXBvbmVudCwgInNlbGVjdGVkIiwgLTEpOworCQkJCQlzZXQoY29tYm9saXN0LCAiaW5zaWRlIiwgKHNlbGVjdGVkICE9IC0xKSA/CisJCQkJCQlnZXRJdGVtSW1wbChjb21wb25lbnQsICJjaG9pY2UiLCBzZWxlY3RlZCkgOgorCQkJCQkJZ2V0KGNvbXBvbmVudCwgImNob2ljZSIpKTsgLy9zY3JvbGwgdG8gaXQhCisJCQkJfQorCQkJCWVsc2UgcmV0dXJuIGZhbHNlOworCQkJfSBlbHNlIHsKKwkJCQlpZiAoKGtleWNvZGUgPT0gPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ0tleUV2ZW50JyI+S2V5RXZlbnQ8L2Vycm9yPi5WS19VUCkgfHwKKwkJCQkJCShrZXljb2RlID09IDxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICdLZXlFdmVudCciPktleUV2ZW50PC9lcnJvcj4uVktfRE9XTikgfHwgKGtleWNvZGUgPT0gPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ0tleUV2ZW50JyI+S2V5RXZlbnQ8L2Vycm9yPi5WS19QQUdFX1VQKSB8fAorCQkJCQkJKGtleWNvZGUgPT0gPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ0tleUV2ZW50JyI+S2V5RXZlbnQ8L2Vycm9yPi5WS19QQUdFX0RPV04pIHx8CisJCQkJCQkoa2V5Y29kZSA9PSA8ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAnS2V5RXZlbnQnIj5LZXlFdmVudDwvZXJyb3I+LlZLX0hPTUUpIHx8IChrZXljb2RlID09IDxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICdLZXlFdmVudCciPktleUV2ZW50PC9lcnJvcj4uVktfRU5EKSkgeworCQkJCQlPYmplY3Qgc2VsZWN0ZWQgPSBnZXQoY29tYm9saXN0LCAiaW5zaWRlIik7CisJCQkJCU9iamVjdCBuZXh0ID0gZ2V0TGlzdEl0ZW0oY29tcG9uZW50LCBjb21ib2xpc3QsCisJCQkJCQlrZXljb2RlLCBzZWxlY3RlZCwgImNob2ljZSIsIG51bGwpOworCQkJCQlpZiAobmV4dCAhPSBudWxsKSB7CisJCQkJCQlzZXQoY29tYm9saXN0LCAiaW5zaWRlIiwgbmV4dCk7CisJCQkJCQk8ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAnUmVjdGFuZ2xlJyI+UmVjdGFuZ2xlPC9lcnJvcj4gciA9IGdldFJlY3RhbmdsZShuZXh0LCAiYm91bmRzIik7CisJCQkJCQlzY3JvbGxUb1Zpc2libGUoY29tYm9saXN0LCByLjxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICd4JyI+eDwvZXJyb3I+LCByLjxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICd5JyI+eTwvZXJyb3I+LCAwLCByLjxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICdoZWlnaHQnIj5oZWlnaHQ8L2Vycm9yPik7CisJCQkJCQlpZiAoc2VsZWN0ZWQgIT0gbnVsbCkgeyByZXBhaW50KGNvbWJvbGlzdCwgImNvbWJvbGlzdCIsIHNlbGVjdGVkKTsgfQorCQkJCQkJcmVwYWludChjb21ib2xpc3QsICJjb21ib2xpc3QiLCBuZXh0KTsKKwkJCQkJfQorCQkJCX0KKwkJCQllbHNlIGlmICgoa2V5Y29kZSA9PSA8ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAnS2V5RXZlbnQnIj5LZXlFdmVudDwvZXJyb3I+LlZLX0VOVEVSKSB8fCAoa2V5Y2hhciA9PSA8ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAnS2V5RXZlbnQnIj5LZXlFdmVudDwvZXJyb3I+LlZLX1NQQUNFKSkgeworCQkJCQljbG9zZXVwKGNvbXBvbmVudCwgY29tYm9saXN0LCBnZXQoY29tYm9saXN0LCAiaW5zaWRlIikpOyAvL0FsdCtVcAorCQkJCX0KKwkJCQllbHNlIGlmIChrZXljb2RlID09IDxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICdLZXlFdmVudCciPktleUV2ZW50PC9lcnJvcj4uVktfRVNDQVBFKSB7CisJCQkJCWNsb3NldXAoY29tcG9uZW50LCBjb21ib2xpc3QsIG51bGwpOworCQkJCX0KKwkJCQllbHNlIHJldHVybiBwcm9jZXNzRmllbGQoY29tcG9uZW50LCBzaGlmdGRvd24sIGNvbnRyb2xkb3duLCBtb2RpZmllcnMsCisJCQkJCWtleWNoYXIsIGtleWNvZGUsIGZhbHNlLCBmYWxzZSk7CisJCQl9CisJCQlyZXR1cm4gdHJ1ZTsKKwkJfQorCQllbHNlIGlmICgoInRleHRmaWVsZCIgPT0gY2xhc3NuYW1lKSB8fCAoInBhc3N3b3JkZmllbGQiID09IGNsYXNzbmFtZSkpIHsKKwkJCXJldHVybiBwcm9jZXNzRmllbGQoY29tcG9uZW50LCBzaGlmdGRvd24sIGNvbnRyb2xkb3duLCBtb2RpZmllcnMsCisJCQkJa2V5Y2hhciwga2V5Y29kZSwgZmFsc2UsICgicGFzc3dvcmRmaWVsZCIgPT0gY2xhc3NuYW1lKSk7CisJCX0KKwkJZWxzZSBpZiAoInRleHRhcmVhIiA9PSBjbGFzc25hbWUpIHsKKwkJCVN0cmluZyB0ZXh0ID0gZ2V0U3RyaW5nKGNvbXBvbmVudCwgInRleHQiLCAiIik7CisJCQlpbnQgc3RhcnQgPSBnZXRJbnRlZ2VyKGNvbXBvbmVudCwgInN0YXJ0IiwgMCk7CisJCQlpbnQgZW5kID0gZ2V0SW50ZWdlcihjb21wb25lbnQsICJlbmQiLCAwKTsKKworCQkJaW50IGlzdGFydCA9IHN0YXJ0OworCQkJaW50IGllbmQgPSBlbmQ7CisJCQlTdHJpbmcgaW5zZXJ0ID0gbnVsbDsKKwkJCWlmICgoa2V5Y29kZSA9PSA8ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAnS2V5RXZlbnQnIj5LZXlFdmVudDwvZXJyb3I+LlZLX0hPTUUpICYmICFjb250cm9sZG93bikgeworCQkJCXdoaWxlICgoaWVuZCA+IDApICYmICh0ZXh0LmNoYXJBdChpZW5kIC0gMSkgIT0gJ1xuJykpIHsgaWVuZC0tOyB9CisJCQkJaWYgKCFzaGlmdGRvd24pIHsgaXN0YXJ0ID0gaWVuZDsgfQorCQkJfQorCQkJZWxzZSBpZiAoKGtleWNvZGUgPT0gPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ0tleUV2ZW50JyI+S2V5RXZlbnQ8L2Vycm9yPi5WS19FTkQpICYmICFjb250cm9sZG93bikgeworCQkJCWllbmQgPSB0ZXh0LmluZGV4T2YoJ1xuJywgZW5kKTsKKwkJCQlpZiAoaWVuZCA9PSAtMSkgeyBpZW5kID0gdGV4dC5sZW5ndGgoKTsgfQorCQkJCWlmICghc2hpZnRkb3duKSB7IGlzdGFydCA9IGllbmQ7IH0KKwkJCX0KKwkJCWVsc2UgaWYgKChrZXljb2RlID09IDxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICdLZXlFdmVudCciPktleUV2ZW50PC9lcnJvcj4uVktfVVApIHx8CisJCQkJCShrZXljb2RlID09IDxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICdLZXlFdmVudCciPktleUV2ZW50PC9lcnJvcj4uVktfUEFHRV9VUCkpIHsKKwkJCQlpbnQgcHJldiA9IGVuZDsKKwkJCQl3aGlsZSAoKHByZXYgPiAwKSAmJiAodGV4dC5jaGFyQXQocHJldiAtIDEpICE9ICdcbicpKSB7IHByZXYtLTsgfQorCQkJCWlmIChwcmV2ICE9IDApIHsKKwkJCQkJaW50IGR4ID0gZW5kIC0gcHJldjsKKwkJCQkJaW50IGxpbmVzID0gKGtleWNvZGUgPT0gPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ0tleUV2ZW50JyI+S2V5RXZlbnQ8L2Vycm9yPi5WS19QQUdFX1VQKSA/CisJCQkJCQkoZ2V0UmVjdGFuZ2xlKGNvbXBvbmVudCwgIjpwb3J0IikuPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ2hlaWdodCciPmhlaWdodDwvZXJyb3I+IC8KKwkJCQkJCQlnZXRGb250TWV0cmljcyhnZXRGb250KCkpLjxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgbWV0aG9kICdnZXRIZWlnaHQoKSciPmdldEhlaWdodDwvZXJyb3I+KCkpIDogMTsKKwkJCQkJaW50IGZpcnN0ID0gcHJldjsKKwkJCQkJZG8geworCQkJCQkJcHJldiA9IGZpcnN0OyBmaXJzdC0tOyBsaW5lcy0tOworCQkJCQkJd2hpbGUgKChmaXJzdCA+IDApICYmICh0ZXh0LmNoYXJBdChmaXJzdCAtIDEpICE9ICdcbicpKSB7IGZpcnN0LS07IH0KKwkJCQkJfSB3aGlsZSAoKGZpcnN0ID4gMCkgJiYgKGxpbmVzID4gMCkpOworCQkJCQlpZW5kID0gTWF0aC5taW4oZmlyc3QgKyBkeCwgcHJldiAtIDEpOworCQkJCQlpZiAoIXNoaWZ0ZG93bikgeyBpc3RhcnQgPSBpZW5kOyB9CisJCQkJfQorCQkJfQorCQkJZWxzZSBpZiAoKGtleWNvZGUgPT0gPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ0tleUV2ZW50JyI+S2V5RXZlbnQ8L2Vycm9yPi5WS19ET1dOKSB8fAorCQkJCQkoa2V5Y29kZSA9PSA8ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAnS2V5RXZlbnQnIj5LZXlFdmVudDwvZXJyb3I+LlZLX1BBR0VfRE9XTikpIHsKKwkJCQlpbnQgbmV4dCA9IHRleHQuaW5kZXhPZignXG4nLCBlbmQpOworCQkJCWlmIChuZXh0ICE9IC0xKSB7CisJCQkJCWludCBwcmV2ID0gZW5kOworCQkJCQl3aGlsZSAoKHByZXYgPiAwKSAmJiAodGV4dC5jaGFyQXQocHJldiAtIDEpICE9ICdcbicpKSB7IHByZXYtLTsgfQorCQkJCQlpZiAoa2V5Y29kZSA9PSA8ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAnS2V5RXZlbnQnIj5LZXlFdmVudDwvZXJyb3I+LlZLX1BBR0VfRE9XTikgeworCQkJCQkJaW50IGxpbmVzID0gZ2V0UmVjdGFuZ2xlKGNvbXBvbmVudCwgIjpwb3J0IikuPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ2hlaWdodCciPmhlaWdodDwvZXJyb3I+IC8KKwkJCQkJCQlnZXRGb250TWV0cmljcyhnZXRGb250KCkpLjxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgbWV0aG9kICdnZXRIZWlnaHQoKSciPmdldEhlaWdodDwvZXJyb3I+KCk7CisJCQkJCQlmb3IgKGludCBtb3JlID0gMDsgKGxpbmVzID4gMSkgJiYKKwkJCQkJCQkJKChtb3JlID0gdGV4dC5pbmRleE9mKCdcbicsIG5leHQgKyAxKSkgIT0gLTEpOyBuZXh0ID0gbW9yZSkgeworCQkJCQkJCWxpbmVzLS07CisJCQkJCQl9CisJCQkJCX0KKwkJCQkJaW50IGxhc3QgPSB0ZXh0LmluZGV4T2YoJ1xuJywgbmV4dCArIDEpOworCQkJCQlpZW5kID0gTWF0aC5taW4obmV4dCArIDEgKyBlbmQgLSBwcmV2LAorCQkJCQkJKGxhc3QgPT0gLTEpID8gKHRleHQubGVuZ3RoKCkgKyAxKSA6IGxhc3QpOworCQkJCQlpZiAoIXNoaWZ0ZG93bikgeyBpc3RhcnQgPSBpZW5kOyB9CisJCQkJfQorCQkJfQorCQkJcmV0dXJuIGNoYW5nZUZpZWxkKGNvbXBvbmVudCwgdGV4dCwgaW5zZXJ0LCBpc3RhcnQsIGllbmQsIHN0YXJ0LCBlbmQpID8KKwkJCQl0cnVlIDogcHJvY2Vzc0ZpZWxkKGNvbXBvbmVudCwgc2hpZnRkb3duLCBjb250cm9sZG93biwgbW9kaWZpZXJzLAorCQkJCQlrZXljaGFyLCBrZXljb2RlLCB0cnVlLCBmYWxzZSk7CisJCX0KKwkJZWxzZSBpZiAoInRhYmJlZHBhbmUiID09IGNsYXNzbmFtZSkgeworCQkJaWYgKChrZXljb2RlID09IDxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICdLZXlFdmVudCciPktleUV2ZW50PC9lcnJvcj4uVktfUklHSFQpIHx8IChrZXljb2RlID09IDxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICdLZXlFdmVudCciPktleUV2ZW50PC9lcnJvcj4uVktfRE9XTikgfHwKKwkJCQkJKGtleWNvZGUgPT0gPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ0tleUV2ZW50JyI+S2V5RXZlbnQ8L2Vycm9yPi5WS19MRUZUKSB8fCAoa2V5Y29kZSA9PSA8ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAnS2V5RXZlbnQnIj5LZXlFdmVudDwvZXJyb3I+LlZLX1VQKSkgeworCQkJCWludCBzZWxlY3RlZCA9IGdldEludGVnZXIoY29tcG9uZW50LCAic2VsZWN0ZWQiLCAwKTsKKwkJCQlib29sZWFuIGluY3JlYXNlID0gKGtleWNvZGUgPT0gPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ0tleUV2ZW50JyI+S2V5RXZlbnQ8L2Vycm9yPi5WS19SSUdIVCkgfHwgKGtleWNvZGUgPT0gPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ0tleUV2ZW50JyI+S2V5RXZlbnQ8L2Vycm9yPi5WS19ET1dOKTsKKwkJCQlpbnQgbmV3dmFsdWUgPSBzZWxlY3RlZDsKKwkJCQlpbnQgbiA9IGluY3JlYXNlID8gZ2V0SXRlbUNvdW50SW1wbChjb21wb25lbnQsICJ0YWIiKSA6IDA7CisJCQkJaW50IGQgPSAoaW5jcmVhc2UgPyAxIDogLTEpOworCQkJCWZvciAoaW50IGkgPSBzZWxlY3RlZCArIGQ7IGluY3JlYXNlID8gKGkgPCBuKSAgOiAoaSA+PSAwKTsgaSArPSBkKSB7CisJCQkJCWlmIChnZXRCb29sZWFuKGdldEl0ZW1JbXBsKGNvbXBvbmVudCwgInRhYiIsIGkpLCAiZW5hYmxlZCIsIHRydWUpKSB7CisJCQkJCQluZXd2YWx1ZSA9IGk7IGJyZWFrOworCQkJCQl9CisJCQkJfQorCQkJCWlmIChuZXd2YWx1ZSAhPSBzZWxlY3RlZCkgeworCQkJCQlzZXRJbnRlZ2VyKGNvbXBvbmVudCwgInNlbGVjdGVkIiwgbmV3dmFsdWUsIDApOworCQkJCQlyZXBhaW50KGNvbXBvbmVudCk7CisJCQkJCWludm9rZShjb21wb25lbnQsICJhY3Rpb24iKTsKKwkJCQl9CisJCQl9CisJCX0KKwkJZWxzZSBpZiAoInNwaW5ib3giID09IGNsYXNzbmFtZSkgeworCQkJaWYgKChrZXljb2RlID09IDxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICdLZXlFdmVudCciPktleUV2ZW50PC9lcnJvcj4uVktfVVApIHx8IChrZXljb2RlID09IDxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICdLZXlFdmVudCciPktleUV2ZW50PC9lcnJvcj4uVktfRE9XTikpIHsKKwkJCQlwcm9jZXNzU3Bpbihjb21wb25lbnQsIChrZXljb2RlID09IDxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICdLZXlFdmVudCciPktleUV2ZW50PC9lcnJvcj4uVktfVVApPyAidXAiIDogImRvd24iKTsKKwkJCQlyZXR1cm4gdHJ1ZTsKKwkJCX0KKwkJCXJldHVybiBwcm9jZXNzRmllbGQoY29tcG9uZW50LCBzaGlmdGRvd24sIGNvbnRyb2xkb3duLCBtb2RpZmllcnMsCisJCQkJa2V5Y2hhciwga2V5Y29kZSwgZmFsc2UsIGZhbHNlKTsKKwkJfQorCQllbHNlIGlmICgic2xpZGVyIiA9PSBjbGFzc25hbWUpIHsKKwkJCWludCB2YWx1ZSA9IGdldEludGVnZXIoY29tcG9uZW50LCAidmFsdWUiLCAwKTsKKwkJCWludCBkID0gMDsKKwkJCWlmICgoa2V5Y29kZSA9PSA8ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAnS2V5RXZlbnQnIj5LZXlFdmVudDwvZXJyb3I+LlZLX0hPTUUpIHx8IChrZXljb2RlID09IDxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICdLZXlFdmVudCciPktleUV2ZW50PC9lcnJvcj4uVktfTEVGVCkgfHwKKwkJCQkJKGtleWNvZGUgPT0gPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ0tleUV2ZW50JyI+S2V5RXZlbnQ8L2Vycm9yPi5WS19VUCkgfHwgKGtleWNvZGUgPT0gPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ0tleUV2ZW50JyI+S2V5RXZlbnQ8L2Vycm9yPi5WS19QQUdFX1VQKSkgeworCQkJCWQgPSBnZXRJbnRlZ2VyKGNvbXBvbmVudCwgIm1pbmltdW0iLCAwKSAtIHZhbHVlOworCQkJCWlmICgoa2V5Y29kZSA9PSA8ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAnS2V5RXZlbnQnIj5LZXlFdmVudDwvZXJyb3I+LlZLX0xFRlQpIHx8IChrZXljb2RlID09IDxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICdLZXlFdmVudCciPktleUV2ZW50PC9lcnJvcj4uVktfVVApKSB7CisJCQkJCWQgPSBNYXRoLm1heChkLCAtZ2V0SW50ZWdlcihjb21wb25lbnQsICJ1bml0IiwgNSkpOworCQkJCX0KKwkJCQllbHNlIGlmIChrZXljb2RlID09IDxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICdLZXlFdmVudCciPktleUV2ZW50PC9lcnJvcj4uVktfUEFHRV9VUCkgeworCQkJCQlkID0gTWF0aC5tYXgoZCwgLWdldEludGVnZXIoY29tcG9uZW50LCAiYmxvY2siLCAyNSkpOworCQkJCX0KKwkJCX0KKwkJCWVsc2UgaWYgKChrZXljb2RlID09IDxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICdLZXlFdmVudCciPktleUV2ZW50PC9lcnJvcj4uVktfRU5EKSB8fCAoa2V5Y29kZSA9PSA8ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAnS2V5RXZlbnQnIj5LZXlFdmVudDwvZXJyb3I+LlZLX1JJR0hUKSB8fAorCQkJCQkoa2V5Y29kZSA9PSA8ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAnS2V5RXZlbnQnIj5LZXlFdmVudDwvZXJyb3I+LlZLX0RPV04pIHx8IChrZXljb2RlID09IDxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICdLZXlFdmVudCciPktleUV2ZW50PC9lcnJvcj4uVktfUEFHRV9ET1dOKSkgeworCQkJCWQgPSBnZXRJbnRlZ2VyKGNvbXBvbmVudCwgIm1heGltdW0iLCAxMDApIC0gdmFsdWU7CisJCQkJaWYgKChrZXljb2RlID09IDxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICdLZXlFdmVudCciPktleUV2ZW50PC9lcnJvcj4uVktfUklHSFQpIHx8IChrZXljb2RlID09IDxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICdLZXlFdmVudCciPktleUV2ZW50PC9lcnJvcj4uVktfRE9XTikpIHsKKwkJCQkJZCA9IE1hdGgubWluKGQsIGdldEludGVnZXIoY29tcG9uZW50LCAidW5pdCIsIDUpKTsKKwkJCQl9CisJCQkJZWxzZSBpZiAoa2V5Y29kZSA9PSA8ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAnS2V5RXZlbnQnIj5LZXlFdmVudDwvZXJyb3I+LlZLX1BBR0VfRE9XTikgeworCQkJCQlkID0gTWF0aC5taW4oZCwgZ2V0SW50ZWdlcihjb21wb25lbnQsICJibG9jayIsIDI1KSk7CisJCQkJfQorCQkJfQorCQkJaWYgKGQgIT0gMCkgeworCQkJCXNldEludGVnZXIoY29tcG9uZW50LCAidmFsdWUiLCB2YWx1ZSArIGQsIDApOworCQkJCXJlcGFpbnQoY29tcG9uZW50KTsKKwkJCQlpbnZva2UoY29tcG9uZW50LCAiYWN0aW9uIik7CisJCQl9CisJCX0KKwkJZWxzZSBpZiAoInNwbGl0cGFuZSIgPT0gY2xhc3NuYW1lKSB7CisJCQlpbnQgZGl2aWRlciA9IGdldEludGVnZXIoY29tcG9uZW50LCAiZGl2aWRlciIsIC0xKTsKKwkJCWludCBkID0gMDsKKwkJCWlmIChrZXljb2RlID09IDxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICdLZXlFdmVudCciPktleUV2ZW50PC9lcnJvcj4uVktfSE9NRSkgeworCQkJCWQgPSAtZGl2aWRlcjsKKwkJCX0KKwkJCWVsc2UgaWYgKChrZXljb2RlID09IDxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICdLZXlFdmVudCciPktleUV2ZW50PC9lcnJvcj4uVktfTEVGVCkgfHwgKGtleWNvZGUgPT0gPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ0tleUV2ZW50JyI+S2V5RXZlbnQ8L2Vycm9yPi5WS19VUCkpIHsKKwkJCQlkID0gTWF0aC5tYXgoLTEwLCAtZGl2aWRlcik7CisJCQl9CisJCQllbHNlIGlmICgoa2V5Y29kZSA9PSA8ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAnS2V5RXZlbnQnIj5LZXlFdmVudDwvZXJyb3I+LlZLX0VORCkgfHwKKwkJCQkJKGtleWNvZGUgPT0gPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ0tleUV2ZW50JyI+S2V5RXZlbnQ8L2Vycm9yPi5WS19SSUdIVCkgfHwgKGtleWNvZGUgPT0gPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ0tleUV2ZW50JyI+S2V5RXZlbnQ8L2Vycm9yPi5WS19ET1dOKSkgeworCQkJCWJvb2xlYW4gaG9yaXpvbnRhbCA9ICgidmVydGljYWwiICE9IGdldChjb21wb25lbnQsICJvcmllbnRhdGlvbiIpKTsKKwkJCQk8ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAnUmVjdGFuZ2xlJyI+UmVjdGFuZ2xlPC9lcnJvcj4gYm91bmRzID0gZ2V0UmVjdGFuZ2xlKGNvbXBvbmVudCwgImJvdW5kcyIpOworCQkJCWludCBtYXggPSAoaG9yaXpvbnRhbCA/IGJvdW5kcy48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAnd2lkdGgnIj53aWR0aDwvZXJyb3I+IDogYm91bmRzLjxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICdoZWlnaHQnIj5oZWlnaHQ8L2Vycm9yPikgLSA1OworCQkJCWQgPSBtYXggLSBkaXZpZGVyOworCQkJCWlmIChrZXljb2RlICE9IDxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICdLZXlFdmVudCciPktleUV2ZW50PC9lcnJvcj4uVktfRU5EKSB7CisJCQkJCWQgPSBNYXRoLm1pbihkLCAxMCk7CisJCQkJfQorCQkJfQorCQkJaWYgKGQgIT0gMCkgeworCQkJCXNldEludGVnZXIoY29tcG9uZW50LCAiZGl2aWRlciIsIGRpdmlkZXIgKyBkLCAtMSk7CisJCQkJdmFsaWRhdGUoY29tcG9uZW50KTsKKwkJCX0KKwkJfQorCQllbHNlIGlmICgibGlzdCIgPT0gY2xhc3NuYW1lKSB7CisJCQlyZXR1cm4gcHJvY2Vzc0xpc3QoY29tcG9uZW50LCBzaGlmdGRvd24sIGNvbnRyb2xkb3duLCBrZXljaGFyLCBrZXljb2RlLCAiaXRlbSIsIG51bGwpOworCQl9CisJCWVsc2UgaWYgKCJ0YWJsZSIgPT0gY2xhc3NuYW1lKSB7CisJCQlyZXR1cm4gcHJvY2Vzc0xpc3QoY29tcG9uZW50LCBzaGlmdGRvd24sIGNvbnRyb2xkb3duLCBrZXljaGFyLCBrZXljb2RlLCAicm93IiwgbnVsbCk7CisJCX0KKwkJZWxzZSBpZiAoInRyZWUiID09IGNsYXNzbmFtZSkgeworCQkJLy8/IGNsZWFyIGNoaWxkcycgc2VsZWN0aW9uLCBzZWxlY3QgdGhpcyBpcyBpdHMgCXN1Ym5vZGUgd2FzIHNlbGVjdGVkCisJCQlpZiAoa2V5Y29kZSA9PSA8ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAnS2V5RXZlbnQnIj5LZXlFdmVudDwvZXJyb3I+LlZLX0xFRlQpIHsKKwkJCQlPYmplY3QgbGVhZCA9IGdldChjb21wb25lbnQsICJsZWFkIik7CisJCQkJaWYgKChnZXQobGVhZCwgIm5vZGUiKSAhPSBudWxsKSAmJiBnZXRCb29sZWFuKGxlYWQsICJleHBhbmRlZCIsIHRydWUpKSB7CisJCQkJCXNldEJvb2xlYW4obGVhZCwgImV4cGFuZGVkIiwgZmFsc2UsIHRydWUpOworCQkJCQlzZWxlY3RJdGVtKGNvbXBvbmVudCwgbGVhZCwgIm5vZGUiLCAibm9kZSIpOworCQkJCQl2YWxpZGF0ZShjb21wb25lbnQpOworCQkJCQlpbnZva2UoY29tcG9uZW50LCAiY29sbGFwc2UiKTsgLy9sZWFkCisJCQkJCXJldHVybiB0cnVlOworCQkJCX0KKwkJCQllbHNlIHsKKwkJCQkJT2JqZWN0IHBhcmVudCA9IGdldFBhcmVudChsZWFkKTsKKwkJCQkJaWYgKHBhcmVudCAhPSBjb21wb25lbnQpIHsKKwkJCQkJCXNlbGVjdEl0ZW0oY29tcG9uZW50LCBwYXJlbnQsICJub2RlIiwgIm5vZGUiKTsKKwkJCQkJCXNldExlYWQoY29tcG9uZW50LCBsZWFkLCBwYXJlbnQpOworCQkJCQkJcmV0dXJuIHRydWU7CisJCQkJCX0KKwkJCQl9CisJCQl9CisJCQkvLz8gZm9yIGludGVydmFsIG1vZGUgc2VsZWN0IGl0cyBhbGwgc3Vibm9kZSBvciBkZXNlbGVjdCBhbGwgYWZ0ZXIKKwkJCWVsc2UgaWYgKGtleWNvZGUgPT0gPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ0tleUV2ZW50JyI+S2V5RXZlbnQ8L2Vycm9yPi5WS19SSUdIVCkgeworCQkJCU9iamVjdCBsZWFkID0gZ2V0KGNvbXBvbmVudCwgImxlYWQiKTsKKwkJCQlPYmplY3Qgbm9kZSA9IGdldChsZWFkLCAibm9kZSIpOworCQkJCWlmIChub2RlICE9IG51bGwpIHsKKwkJCQkJaWYgKGdldEJvb2xlYW4obGVhZCwgImV4cGFuZGVkIiwgdHJ1ZSkpIHsKKwkJCQkJCXNlbGVjdEl0ZW0oY29tcG9uZW50LCBub2RlLCAibm9kZSIsICJub2RlIik7CisJCQkJCQlzZXRMZWFkKGNvbXBvbmVudCwgbGVhZCwgbm9kZSk7CisJCQkJCX0KKwkJCQkJZWxzZSB7CisJCQkJCQlzZXRCb29sZWFuKGxlYWQsICJleHBhbmRlZCIsIHRydWUsIHRydWUpOworCQkJCQkJc2VsZWN0SXRlbShjb21wb25lbnQsIGxlYWQsICJub2RlIiwgIm5vZGUiKTsKKwkJCQkJCXZhbGlkYXRlKGNvbXBvbmVudCk7CisJCQkJCQlpbnZva2UoY29tcG9uZW50LCAiZXhwYW5kIik7IC8vbGVhZAorCQkJCQl9CisJCQkJCXJldHVybiB0cnVlOworCQkJCX0KKwkJCX0KKwkJCXJldHVybiBwcm9jZXNzTGlzdChjb21wb25lbnQsIHNoaWZ0ZG93biwgY29udHJvbGRvd24sIGtleWNoYXIsIGtleWNvZGUsICJub2RlIiwgIm5vZGUiKTsKKwkJfQorCQllbHNlIGlmICgibWVudWJhciIgPT0gY2xhc3NuYW1lKSB7CisJCQlPYmplY3QgcHJldmlvdXMgPSBudWxsOyBPYmplY3QgbGFzdCA9IG51bGw7CisJCQlmb3IgKE9iamVjdCBpID0gZ2V0KGNvbXBvbmVudCwgInBvcHVwbWVudSIpOworCQkJCQlpICE9IG51bGw7IGkgPSBnZXQoaSwgInBvcHVwbWVudSIpKSB7CisJCQkJcHJldmlvdXMgPSBsYXN0OyBsYXN0ID0gaTsKKwkJCX0KKwkJCU9iamVjdCBzZWxlY3RlZCA9IGdldChsYXN0LCAic2VsZWN0ZWQiKTsKKwkJCU9iamVjdCBob3Rwb3B1cCA9ICgoc2VsZWN0ZWQgIT0gbnVsbCkgfHwgKHByZXZpb3VzID09IG51bGwpKSA/CisJCQkJbGFzdCA6IHByZXZpb3VzOworCQkJaWYgKChzZWxlY3RlZCA9PSBudWxsKSAmJiAocHJldmlvdXMgIT0gbnVsbCkpIHsKKwkJCQlzZWxlY3RlZCA9IGdldChwcmV2aW91cywgInNlbGVjdGVkIik7CisJCQl9CisKKwkJCWlmICgoa2V5Y29kZSA9PSA8ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAnS2V5RXZlbnQnIj5LZXlFdmVudDwvZXJyb3I+LlZLX1VQKSB8fCAoa2V5Y29kZSA9PSA8ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAnS2V5RXZlbnQnIj5LZXlFdmVudDwvZXJyb3I+LlZLX0RPV04pKSB7CisJCQkJc2V0KGhvdHBvcHVwLCAic2VsZWN0ZWQiLCBudWxsKTsKKwkJCQlwb3B1cChob3Rwb3B1cCwgInBvcHVwbWVudSIpOworCQkJCXNlbGVjdGVkID0gZ2V0TWVudShob3Rwb3B1cCwKKwkJCQkJc2VsZWN0ZWQsIGtleWNvZGUgPT0gPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ0tleUV2ZW50JyI+S2V5RXZlbnQ8L2Vycm9yPi5WS19ET1dOLCB0cnVlKTsKKwkJCQlzZXQoaG90cG9wdXAsICJzZWxlY3RlZCIsIHNlbGVjdGVkKTsKKwkJCQlyZXBhaW50KGhvdHBvcHVwKTsKKwkJCX0KKwkJCWVsc2UgaWYgKGtleWNvZGUgPT0gPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ0tleUV2ZW50JyI+S2V5RXZlbnQ8L2Vycm9yPi5WS19MRUZUKSB7CisJCQkJaWYgKHByZXZpb3VzICE9IG51bGwpIHsKKwkJCQkJc2VsZWN0ZWQgPSBnZXQocHJldmlvdXMsICJzZWxlY3RlZCIpOworCQkJCQlzZXQocHJldmlvdXMsICJzZWxlY3RlZCIsIG51bGwpOworCQkJCQlwb3B1cChwcmV2aW91cywgInBvcHVwbWVudSIpOworCQkJCQlzZXQocHJldmlvdXMsICJzZWxlY3RlZCIsIHNlbGVjdGVkKTsKKwkJCQkJcmVwYWludChwcmV2aW91cyk7IC8vICwgc2VsZWN0ZWQKKwkJCQl9CisJCQkJZWxzZSB7CisJCQkJCXNlbGVjdGVkID0gZ2V0TWVudShjb21wb25lbnQsIGdldChjb21wb25lbnQsICJzZWxlY3RlZCIpLCBmYWxzZSwgZmFsc2UpOworCQkJCQlzZXQoY29tcG9uZW50LCAic2VsZWN0ZWQiLCBzZWxlY3RlZCk7CisJCQkJCU9iamVjdCBwb3B1cCA9IHBvcHVwKGNvbXBvbmVudCwgIm1lbnViYXIiKTsKKwkJCQkJc2V0KHBvcHVwLCAic2VsZWN0ZWQiLCBnZXRNZW51KHBvcHVwLCBudWxsLCB0cnVlLCB0cnVlKSk7CisJCQkJCXJlcGFpbnQoY29tcG9uZW50KTsgLy8gLCBzZWxlY3RlZAorCQkJCX0KKwkJCX0KKwkJCWVsc2UgaWYgKGtleWNvZGUgPT0gPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ0tleUV2ZW50JyI+S2V5RXZlbnQ8L2Vycm9yPi5WS19SSUdIVCkgeworCQkJCWlmICgocHJldmlvdXMgIT0gbnVsbCkgJiYgKHNlbGVjdGVkID09IG51bGwpKSB7CisJCQkJCXNldChsYXN0LCAic2VsZWN0ZWQiLCBnZXQoZ2V0KGxhc3QsICJtZW51IiksICJtZW51IikpOworCQkJCQlyZXBhaW50KGxhc3QpOyAvLyAsIHNlbGVjdGVkCisJCQkJfQorCQkJCWVsc2UgaWYgKChzZWxlY3RlZCAhPSBudWxsKSAmJiAoZ2V0Q2xhc3Moc2VsZWN0ZWQpID09ICJtZW51IikpIHsKKwkJCQkJT2JqZWN0IHBvcHVwID0gcG9wdXAobGFzdCwgInBvcHVwbWVudSIpOworCQkJCQlzZXQocG9wdXAsICJzZWxlY3RlZCIsIGdldChnZXQocG9wdXAsICJtZW51IiksICJtZW51IikpOworCQkJCX0KKwkJCQllbHNlIHsKKwkJCQkJc2VsZWN0ZWQgPSBnZXRNZW51KGNvbXBvbmVudCwgZ2V0KGNvbXBvbmVudCwgInNlbGVjdGVkIiksIHRydWUsIGZhbHNlKTsKKwkJCQkJc2V0KGNvbXBvbmVudCwgInNlbGVjdGVkIiwgc2VsZWN0ZWQpOworCQkJCQlPYmplY3QgcG9wdXAgPSBwb3B1cChjb21wb25lbnQsICJtZW51YmFyIik7CisJCQkJCXNldChwb3B1cCwgInNlbGVjdGVkIiwgZ2V0TWVudShwb3B1cCwgbnVsbCwgdHJ1ZSwgdHJ1ZSkpOworCQkJCQlyZXBhaW50KGNvbXBvbmVudCk7IC8vICwgc2VsZWN0ZWQKKwkJCQl9CisJCQl9CisJCQllbHNlIGlmICgoa2V5Y29kZSA9PSA8ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAnS2V5RXZlbnQnIj5LZXlFdmVudDwvZXJyb3I+LlZLX0VOVEVSKSB8fAorCQkJCQkoa2V5Y2hhciA9PSA8ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAnS2V5RXZlbnQnIj5LZXlFdmVudDwvZXJyb3I+LlZLX1NQQUNFKSB8fCAoa2V5Y29kZSA9PSA8ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAnS2V5RXZlbnQnIj5LZXlFdmVudDwvZXJyb3I+LlZLX0VTQ0FQRSkpIHsKKwkJCQlpZiAoKGtleWNvZGUgIT0gPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ0tleUV2ZW50JyI+S2V5RXZlbnQ8L2Vycm9yPi5WS19FU0NBUEUpICYmCisJCQkJCQlnZXRCb29sZWFuKHNlbGVjdGVkLCAiZW5hYmxlZCIsIHRydWUpKSB7CisJCQkJCWlmICgoc2VsZWN0ZWQgIT0gbnVsbCkgJiYgKGdldENsYXNzKHNlbGVjdGVkKSA9PSAiY2hlY2tib3htZW51aXRlbSIpKSB7CisJCQkJCQljaGFuZ2VDaGVjayhzZWxlY3RlZCwgZmFsc2UpOworCQkJCQl9CisJCQkJCWVsc2UgaW52b2tlKHNlbGVjdGVkLCAiYWN0aW9uIik7CisJCQkJfQorCQkJCWNsb3NldXAoY29tcG9uZW50KTsKKwkJCX0KKwkJCWVsc2UgcmV0dXJuIGZhbHNlOworCQkJcmV0dXJuIHRydWU7CisJCX0KKwkJcmV0dXJuIGZhbHNlOworCX0KKworCS8qKgorCSAqCisJICovCisJcHJpdmF0ZSBib29sZWFuIGNoYW5nZUNoZWNrKE9iamVjdCBjb21wb25lbnQsIGJvb2xlYW4gYm94KSB7CisJCVN0cmluZyBncm91cCA9IGdldFN0cmluZyhjb21wb25lbnQsICJncm91cCIsIG51bGwpOworCQlpZiAoZ3JvdXAgIT0gbnVsbCkgeworCQkJaWYgKGdldEJvb2xlYW4oY29tcG9uZW50LCAic2VsZWN0ZWQiLCBmYWxzZSkpIHsgcmV0dXJuIGZhbHNlOyB9CisJCQlmb3IgKE9iamVjdCBjb21wID0gZ2V0KGdldFBhcmVudChjb21wb25lbnQpLAorCQkJCQlib3ggPyAiY29tcG9uZW50IiA6ICJtZW51Iik7IGNvbXAgIT0gbnVsbDsgY29tcCA9IGdldChjb21wLCAiOm5leHQiKSkgeworCQkJCWlmIChjb21wID09IGNvbXBvbmVudCkgeworCQkJCQlzZXRCb29sZWFuKGNvbXBvbmVudCwgInNlbGVjdGVkIiwgdHJ1ZSk7CisJCQkJfQorCQkJCWVsc2UgaWYgKGdyb3VwLmVxdWFscyhnZXQoY29tcCwgImdyb3VwIikpICYmCisJCQkJCQlnZXRCb29sZWFuKGNvbXAsICJzZWxlY3RlZCIsIGZhbHNlKSkgeworCQkJCQlzZXRCb29sZWFuKGNvbXAsICJzZWxlY3RlZCIsIGZhbHNlKTsKKwkJCQkJaWYgKGJveCkgeyByZXBhaW50KGNvbXApOyB9IC8vY2hlY2tib3ggb25seQorCQkJCX0KKwkJCX0KKwkJfQorCQllbHNlIHsKKwkJCXNldEJvb2xlYW4oY29tcG9uZW50LCAic2VsZWN0ZWQiLAorCQkJCSFnZXRCb29sZWFuKGNvbXBvbmVudCwgInNlbGVjdGVkIiwgZmFsc2UpLCBmYWxzZSk7CisJCX0KKwkJaW52b2tlKGNvbXBvbmVudCwgImFjdGlvbiIpOworCQlyZXR1cm4gdHJ1ZTsKKwl9CisKKwkvKioKKwkgKgorCSAqLworCXByaXZhdGUgT2JqZWN0IGdldE1lbnUoT2JqZWN0IGNvbXBvbmVudCwgT2JqZWN0IHBhcnQsCisJCQlib29sZWFuIGZvcndhcmQsIGJvb2xlYW4gcG9wdXApIHsKKwkJaWYgKGZvcndhcmQpIHsKKwkJCWlmIChwYXJ0ICE9IG51bGwpIHsgcGFydCA9IGdldChwYXJ0LCAiOm5leHQiKTsgfQorCQkJaWYgKHBhcnQgPT0gbnVsbCkgeworCQkJCXBhcnQgPSBnZXQocG9wdXAgPyBnZXQoY29tcG9uZW50LCAibWVudSIpIDogY29tcG9uZW50LCAibWVudSIpOworCQkJfQorCQl9CisJCWVsc2UgeworCQkJT2JqZWN0IHByZXYgPSBnZXQocG9wdXAgPyBnZXQoY29tcG9uZW50LCAibWVudSIpIDogY29tcG9uZW50LCAibWVudSIpOworCQkJZm9yIChPYmplY3QgbmV4dCA9IGdldChwcmV2LCAiOm5leHQiKTsKKwkJCQkJKG5leHQgIT0gbnVsbCkgJiYgKG5leHQgIT0gcGFydCk7IG5leHQgPSBnZXQobmV4dCwgIjpuZXh0IikpIHsKKwkJCQlwcmV2ID0gbmV4dDsKKwkJCX0KKwkJCXBhcnQgPSBwcmV2OworCQl9CisJCXJldHVybiAoZ2V0Q2xhc3MocGFydCkgPT0gInNlcGFyYXRvciIpID8KKwkJCWdldE1lbnUoY29tcG9uZW50LCBwYXJ0LCBmb3J3YXJkLCBwb3B1cCkgOiBwYXJ0OworCX0KKworCS8qKgorCSAqCisJICovCisJLypwcml2YXRlIGJvb2xlYW4gcHJvY2Vzc0tleVJlbGVhc2UoT2JqZWN0IGNvbXBvbmVudCwgS2V5RXZlbnQgZSwgaW50IGtleWNvZGUpIHsKKwkJcmV0dXJuIHRydWU7CisJfSovCisKKwkvKioKKwkgKgorCSAqLworCXByaXZhdGUgYm9vbGVhbiBwcm9jZXNzRmllbGQoT2JqZWN0IGNvbXBvbmVudCwKKwkJCWJvb2xlYW4gc2hpZnRkb3duLCBib29sZWFuIGNvbnRyb2xkb3duLCBpbnQgbW9kaWZpZXJzLAorCQkJaW50IGtleWNoYXIsIGludCBrZXljb2RlLCBib29sZWFuIG11bHRpbGluZSwgYm9vbGVhbiBoaWRkZW4pIHsKKwkJU3RyaW5nIHRleHQgPSBnZXRTdHJpbmcoY29tcG9uZW50LCAidGV4dCIsICIiKTsKKwkJaW50IHN0YXJ0ID0gZ2V0SW50ZWdlcihjb21wb25lbnQsICJzdGFydCIsIDApOworCQlpbnQgZW5kID0gZ2V0SW50ZWdlcihjb21wb25lbnQsICJlbmQiLCAwKTsKKwkJYm9vbGVhbiBlZGl0YWJsZSA9IGdldEJvb2xlYW4oY29tcG9uZW50LCAiZWRpdGFibGUiLCB0cnVlKTsKKworCQlpbnQgaXN0YXJ0ID0gc3RhcnQ7CisJCWludCBpZW5kID0gZW5kOworCQlTdHJpbmcgaW5zZXJ0ID0gbnVsbDsKKwkJLy9taWRwIGlmIChlZGl0YWJsZSAmJiAoa2V5Y2hhciAhPSAwKSkgeworCQlpZiAoZWRpdGFibGUgJiYgKGtleWNoYXIgIT0gMCkgJiYgLy9qYXZhCisJCQkoKG1vZGlmaWVycyA9PSAwKSB8fCAobW9kaWZpZXJzID09IDxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICdJbnB1dEV2ZW50JyI+SW5wdXRFdmVudDwvZXJyb3I+LlNISUZUX01BU0spKSkgeyAvL2phdmEKKwkJCWluc2VydCA9IFN0cmluZy52YWx1ZU9mKChjaGFyKSBrZXljaGFyKTsKKwkJfQorCQllbHNlIGlmIChtdWx0aWxpbmUgJiYgZWRpdGFibGUgJiYgKGtleWNvZGUgPT0gPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ0tleUV2ZW50JyI+S2V5RXZlbnQ8L2Vycm9yPi5WS19FTlRFUikpIHsKKwkJCWluc2VydCA9ICJcbiI7CisJCX0KKwkJZWxzZSBpZiAoZWRpdGFibGUgJiYgKGtleWNvZGUgPT0gPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ0tleUV2ZW50JyI+S2V5RXZlbnQ8L2Vycm9yPi5WS19CQUNLX1NQQUNFKSkgeworCQkJaW5zZXJ0ID0gIiI7CisJCQlpZiAoc3RhcnQgPT0gZW5kKSB7IGlzdGFydCAtPSAxOyB9CisJCX0KKwkJZWxzZSBpZiAoa2V5Y29kZSA9PSA8ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAnS2V5RXZlbnQnIj5LZXlFdmVudDwvZXJyb3I+LlZLX0VORCkgeworCQkJaWVuZCA9IHRleHQubGVuZ3RoKCk7CisJCQlpZiAoIXNoaWZ0ZG93bikgeyBpc3RhcnQgPSBpZW5kOyB9CisJCX0KKwkJZWxzZSBpZiAoa2V5Y29kZSA9PSA8ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAnS2V5RXZlbnQnIj5LZXlFdmVudDwvZXJyb3I+LlZLX0hPTUUpIHsKKwkJCWllbmQgPSAwOworCQkJaWYgKCFzaGlmdGRvd24pIHsgaXN0YXJ0ID0gaWVuZDsgfQorCQl9CisJCWVsc2UgaWYgKGtleWNvZGUgPT0gPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ0tleUV2ZW50JyI+S2V5RXZlbnQ8L2Vycm9yPi5WS19MRUZUKSB7CisJCQkvL2phdmE+CisJCQlpZiAoY29udHJvbGRvd24pIHsKKwkJCQlmb3IgKGludCBpID0gMDsgaSA8IDI7IGkrKykgeworCQkJCQl3aGlsZSAoKGllbmQgPiAwKSAmJiAoKGkgIT0gMCkgPT0KKwkJCQkJCUNoYXJhY3Rlci5pc0xldHRlck9yRGlnaXQodGV4dC5jaGFyQXQoaWVuZCAtIDEpKSkpIHsgaWVuZC0tOyB9CisJCQkJfQorCQkJfSBlbHNlIHsKKwkJCQlpZW5kIC09IDE7CisJCQl9CisJCQkvLzxqYXZhCisJCQkvL21pZHAgaWVuZCAtPSAxOworCQkJaWYgKCFzaGlmdGRvd24pIHsgaXN0YXJ0ID0gaWVuZDsgfQorCQl9CisJCWVsc2UgaWYgKGtleWNvZGUgPT0gPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ0tleUV2ZW50JyI+S2V5RXZlbnQ8L2Vycm9yPi5WS19SSUdIVCkgeworCQkJLy9qYXZhPgorCQkJaWYgKGNvbnRyb2xkb3duKSB7CisJCQkJZm9yIChpbnQgaSA9IDA7IGkgPCAyOyBpKyspIHsKKwkJCQkJd2hpbGUgKChpZW5kIDwgdGV4dC5sZW5ndGgoKSkgJiYgKChpID09IDApID09CisJCQkJCQlDaGFyYWN0ZXIuaXNMZXR0ZXJPckRpZ2l0KHRleHQuY2hhckF0KGllbmQpKSkpIHsgaWVuZCsrOyB9CisJCQkJfQorCQkJfSBlbHNlIHsKKwkJCQlpZW5kICs9IDE7CisJCQl9CisJCQkvLzxqYXZhCisJCQkvL21pZHAgaWVuZCArPSAxOworCQkJaWYgKCFzaGlmdGRvd24pIHsgaXN0YXJ0ID0gaWVuZDsgfQorCQl9CisJCWVsc2UgaWYgKGVkaXRhYmxlICYmIChrZXljb2RlID09IDxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICdLZXlFdmVudCciPktleUV2ZW50PC9lcnJvcj4uVktfREVMRVRFKSkgeworCQkJaW5zZXJ0ID0gIiI7CisJCQlpZiAoc3RhcnQgPT0gZW5kKSB7IGllbmQgKz0gMTsgfQorCQl9CisJCWVsc2UgaWYgKGNvbnRyb2xkb3duICYmCisJCQkJKChrZXljb2RlID09IDxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICdLZXlFdmVudCciPktleUV2ZW50PC9lcnJvcj4uVktfQSkgfHwgKGtleWNvZGUgPT0gMHhCRikpKSB7CisJCQlpc3RhcnQgPSAwOyAvLyBLZXlFdmVudC5WS19TTEFTSAorCQkJaWVuZCA9IHRleHQubGVuZ3RoKCk7CisJCX0KKwkJZWxzZSBpZiAoY29udHJvbGRvd24gJiYgKGtleWNvZGUgPT0gMHhEQykpIHsKKwkJCWlzdGFydCA9IGllbmQgPSB0ZXh0Lmxlbmd0aCgpOyAvLyBLZXlFdmVudC5WS19CQUNLX1NMQVNICisJCX0KKwkJZWxzZSBpZiAoKGVkaXRhYmxlICYmICFoaWRkZW4gJiYgY29udHJvbGRvd24gJiYgKGtleWNvZGUgPT0gPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ0tleUV2ZW50JyI+S2V5RXZlbnQ8L2Vycm9yPi5WS19YKSkgfHwKKwkJCQkoIWhpZGRlbiAmJiBjb250cm9sZG93biAmJiAoa2V5Y29kZSA9PSA8ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAnS2V5RXZlbnQnIj5LZXlFdmVudDwvZXJyb3I+LlZLX0MpKSkgeworCQkJaWYgKHN0YXJ0ICE9IGVuZCkgeworCQkJCWNsaXBib2FyZCA9IHRleHQuc3Vic3RyaW5nKAorCQkJCQlNYXRoLm1pbihzdGFydCwgZW5kKSwgTWF0aC5tYXgoc3RhcnQsIGVuZCkpOworCQkJCS8vamF2YT4KKwkJCQl0cnkgeworCQkJCQkvKiBQZXJzb25hbCBCYXNpcyBQcm9maWxlIGRvZXNuJ3QgY29udGFpbiBkYXRhdHJhbnNmZXIgcGFja2FnZQorCQkJCQlUb29sa2l0IHRvb2xraXQgPSBnZXRUb29sa2l0KCk7CisJCQkJCU9iamVjdCBzeXN0ZW1jbGlwYm9hcmQgPSB0b29sa2l0LmdldENsYXNzKCkuZ2V0TWV0aG9kKCJnZXRTeXN0ZW1DbGlwYm9hcmQiLCBudWxsKS5pbnZva2UodG9vbGtpdCwgbnVsbCk7CisJCQkJCUNsYXNzIHNlbGVjdGlvbmNsYXNzID0gQ2xhc3MuZm9yTmFtZSgiamF2YS5hd3QuZGF0YXRyYW5zZmVyLiIgKyAiU3RyaW5nU2VsZWN0aW9uIik7CisJCQkJCU9iamVjdCBzZWxlY3Rpb24gPSBzZWxlY3Rpb25jbGFzcy5nZXRDb25zdHJ1Y3RvcihuZXcgQ2xhc3NbXSB7IFN0cmluZy5jbGFzcyB9KS4KKwkJCQkJCW5ld0luc3RhbmNlKG5ldyBPYmplY3RbXSB7IGNsaXBib2FyZCB9KTsKKwkJCQkJc3lzdGVtY2xpcGJvYXJkLmdldENsYXNzKCkuZ2V0TWV0aG9kKCJzZXRDb250ZW50cyIsIG5ldyBDbGFzc1tdIHsKKwkJCQkJCQlDbGFzcy5mb3JOYW1lKCJqYXZhLmF3dC5kYXRhdHJhbnNmZXIuIiArICJUcmFuc2ZlcmFibGUiKSwKKwkJCQkJCQlDbGFzcy5mb3JOYW1lKCJqYXZhLmF3dC5kYXRhdHJhbnNmZXIuIiArICJDbGlwYm9hcmRPd25lciIpIH0pLgorCQkJCQkJaW52b2tlKHN5c3RlbWNsaXBib2FyZCwgbmV3IE9iamVjdFtdIHsgc2VsZWN0aW9uLCBudWxsIH0pOyovCisJCQkJCWdldFRvb2xraXQoKS48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIG1ldGhvZCAnZ2V0U3lzdGVtQ2xpcGJvYXJkKCknIj5nZXRTeXN0ZW1DbGlwYm9hcmQ8L2Vycm9yPigpLnNldENvbnRlbnRzKAorCQkJCQkJbmV3IDxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICdTdHJpbmdTZWxlY3Rpb24nIj5TdHJpbmdTZWxlY3Rpb248L2Vycm9yPihjbGlwYm9hcmQpLCBudWxsKTsKKwkJCQl9IGNhdGNoIChFeGNlcHRpb24gZXhjKSB7fQorCQkJCS8vPGphdmEKKwkJCQlpZiAoa2V5Y29kZSA9PSA8ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAnS2V5RXZlbnQnIj5LZXlFdmVudDwvZXJyb3I+LlZLX1gpIHsgaW5zZXJ0ID0gIiI7IH0KKwkJCX0KKwkJfQorCQllbHNlIGlmIChlZGl0YWJsZSAmJiBjb250cm9sZG93biAmJiAoa2V5Y29kZSA9PSA8ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAnS2V5RXZlbnQnIj5LZXlFdmVudDwvZXJyb3I+LlZLX1YpKSB7CisJCQkvL2phdmE+CisJCQl0cnkgeworCQkJCS8qIG5vIGRhdGF0cmFuc2ZlciBwYWNrYWdlIGluIFBCUAorCQkJCVRvb2xraXQgdG9vbGtpdCA9IGdldFRvb2xraXQoKTsKKwkJCQlPYmplY3Qgc3lzdGVtY2xpcGJvYXJkID0gdG9vbGtpdC5nZXRDbGFzcygpLmdldE1ldGhvZCgiZ2V0U3lzdGVtQ2xpcGJvYXJkIiwgbnVsbCkuaW52b2tlKHRvb2xraXQsIG51bGwpOworCQkJCU9iamVjdCBjb250ZW50cyA9IHN5c3RlbWNsaXBib2FyZC5nZXRDbGFzcygpLmdldE1ldGhvZCgiZ2V0Q29udGVudHMiLCBuZXcgQ2xhc3NbXSB7IE9iamVjdC5jbGFzcyB9KS4KKwkJCQkJaW52b2tlKHN5c3RlbWNsaXBib2FyZCwgbmV3IE9iamVjdFtdIHsgdGhpcyB9KTsKKwkJCQlDbGFzcyBkYXRhZmxhdm9yID0gQ2xhc3MuZm9yTmFtZSgiamF2YS5hd3QuZGF0YXRyYW5zZmVyLiIgKyAiRGF0YUZsYXZvciIpOworCQkJCWluc2VydCA9IChTdHJpbmcpIChjb250ZW50cy5nZXRDbGFzcygpLmdldE1ldGhvZCgiZ2V0VHJhbnNmZXJEYXRhIiwgbmV3IENsYXNzW10geyBkYXRhZmxhdm9yIH0pLgorCQkJCQlpbnZva2UoY29udGVudHMsIG5ldyBPYmplY3RbXSB7IGRhdGFmbGF2b3IuZ2V0RmllbGQoInN0cmluZ0ZsYXZvciIpLmdldChudWxsKSB9KSk7Ki8KKwkJCQlpbnNlcnQgPSAoU3RyaW5nKSBnZXRUb29sa2l0KCkuPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBtZXRob2QgJ2dldFN5c3RlbUNsaXBib2FyZCgpJyI+Z2V0U3lzdGVtQ2xpcGJvYXJkPC9lcnJvcj4oKS4KKwkJCQkJZ2V0Q29udGVudHModGhpcykuZ2V0VHJhbnNmZXJEYXRhKDxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICdEYXRhRmxhdm9yJyI+RGF0YUZsYXZvcjwvZXJyb3I+LnN0cmluZ0ZsYXZvcik7CisJCQl9IGNhdGNoIChFeGNlcHRpb24gZXhjKSB7CisJCQkJaW5zZXJ0ID0gY2xpcGJvYXJkOworCQkJfQorCQkJLy88amF2YQorCQkJLy9taWRwIGluc2VydCA9IGNsaXBib2FyZDsKKwkJCVN0cmluZ0J1ZmZlciBmaWx0ZXJlZCA9IG5ldyBTdHJpbmdCdWZmZXIoaW5zZXJ0Lmxlbmd0aCgpKTsKKwkJCWZvciAoaW50IGkgPSAwOyBpIDwgaW5zZXJ0Lmxlbmd0aCgpOyBpKyspIHsKKwkJCQljaGFyIGNrZXkgPSBpbnNlcnQuY2hhckF0KGkpOworCQkJCWlmICgoKGNrZXkgPiAweDFmKSAmJiAoY2tleSA8IDB4N2YpKSB8fAorCQkJCQkJKChja2V5ID4gMHg5ZikgJiYgKGNrZXkgPCAweGZmZmYpKSB8fAorCQkJCQkJKG11bHRpbGluZSAmJiAoY2tleSA9PSAnXG4nKSkpIHsKKwkJCQkJZmlsdGVyZWQuYXBwZW5kKGNrZXkpOworCQkJCX0KKwkJCX0KKwkJCWlmIChmaWx0ZXJlZC5sZW5ndGgoKSAhPSBpbnNlcnQubGVuZ3RoKCkpIHsKKwkJCQlpbnNlcnQgPSBmaWx0ZXJlZC50b1N0cmluZygpOworCQkJfQorCQl9CisJCXJldHVybiBjaGFuZ2VGaWVsZChjb21wb25lbnQsIHRleHQsIGluc2VydCwgaXN0YXJ0LCBpZW5kLCBzdGFydCwgZW5kKTsKKwl9CisKKwkvKioKKwkgKgorCSAqLworCXByaXZhdGUgYm9vbGVhbiBjaGFuZ2VGaWVsZChPYmplY3QgY29tcG9uZW50LCBTdHJpbmcgdGV4dCwgU3RyaW5nIGluc2VydCwKKwkJCWludCBtb3Zlc3RhcnQsIGludCBtb3ZlZW5kLCBpbnQgc3RhcnQsIGludCBlbmQpIHsKKwkJaWYgKChpbnNlcnQgPT0gbnVsbCkgJiYgKHN0YXJ0ID09IG1vdmVzdGFydCkgJiYgKGVuZCA9PSBtb3ZlZW5kKSkgeworCQkJcmV0dXJuIGZhbHNlOworCQl9CisJCW1vdmVzdGFydCA9IE1hdGgubWF4KDAsIE1hdGgubWluKG1vdmVzdGFydCwgdGV4dC5sZW5ndGgoKSkpOworCQltb3ZlZW5kID0gTWF0aC5tYXgoMCwgTWF0aC5taW4obW92ZWVuZCwgdGV4dC5sZW5ndGgoKSkpOworCQlpZiAoaW5zZXJ0ICE9IG51bGwpIHsKKwkJCWludCBtaW4gPSBNYXRoLm1pbihtb3Zlc3RhcnQsIG1vdmVlbmQpOworCQkJc2V0KGNvbXBvbmVudCwgInRleHQiLCB0ZXh0LnN1YnN0cmluZygwLCBtaW4pICsgaW5zZXJ0ICsKKwkJCQl0ZXh0LnN1YnN0cmluZyhNYXRoLm1heChtb3Zlc3RhcnQsIG1vdmVlbmQpKSk7CisJCQltb3Zlc3RhcnQgPSBtb3ZlZW5kID0gbWluICsgaW5zZXJ0Lmxlbmd0aCgpOworCQkJaW52b2tlKGNvbXBvbmVudCwgImFjdGlvbiIpOworCQl9CisJCWlmIChzdGFydCAhPSBtb3Zlc3RhcnQpIHsgc2V0SW50ZWdlcihjb21wb25lbnQsICJzdGFydCIsIG1vdmVzdGFydCwgMCk7IH0KKwkJaWYgKGVuZCAhPSBtb3ZlZW5kKSB7IHNldEludGVnZXIoY29tcG9uZW50LCAiZW5kIiwgbW92ZWVuZCwgMCk7IH0KKwkJaWYgKChpbnNlcnQgIT0gbnVsbCkgfHwgKHN0YXJ0ICE9IG1vdmVzdGFydCkgfHwgKGVuZCAhPSBtb3ZlZW5kKSkgeworCQkJdmFsaWRhdGUoY29tcG9uZW50KTsKKwkJfQorCQlyZXR1cm4gdHJ1ZTsKKwl9CisKKwkvKioKKwkgKgorCSAqLworCXByaXZhdGUgYm9vbGVhbiBwcm9jZXNzTGlzdChPYmplY3QgY29tcG9uZW50LCBib29sZWFuIHNoaWZ0ZG93biwgYm9vbGVhbiBjb250cm9sZG93biwKKwkJCWludCBrZXljaGFyLCBpbnQga2V5Y29kZSwgU3RyaW5nIGl0ZW1uYW1lLCBTdHJpbmcgbGVhZm5hbWUpIHsKKwkJaWYgKChrZXljb2RlID09IDxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICdLZXlFdmVudCciPktleUV2ZW50PC9lcnJvcj4uVktfVVApIHx8CisJCQkJKGtleWNvZGUgPT0gPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ0tleUV2ZW50JyI+S2V5RXZlbnQ8L2Vycm9yPi5WS19ET1dOKSB8fCAoa2V5Y29kZSA9PSA8ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAnS2V5RXZlbnQnIj5LZXlFdmVudDwvZXJyb3I+LlZLX1BBR0VfVVApIHx8CisJCQkJKGtleWNvZGUgPT0gPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ0tleUV2ZW50JyI+S2V5RXZlbnQ8L2Vycm9yPi5WS19QQUdFX0RPV04pIHx8CisJCQkJKGtleWNvZGUgPT0gPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ0tleUV2ZW50JyI+S2V5RXZlbnQ8L2Vycm9yPi5WS19IT01FKSB8fCAoa2V5Y29kZSA9PSA8ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAnS2V5RXZlbnQnIj5LZXlFdmVudDwvZXJyb3I+LlZLX0VORCkpIHsKKwkJCU9iamVjdCBsZWFkID0gZ2V0KGNvbXBvbmVudCwgImxlYWQiKTsKKwkJCU9iamVjdCByb3cgPSBnZXRMaXN0SXRlbShjb21wb25lbnQsIGNvbXBvbmVudCwKKwkJCQlrZXljb2RlLCBsZWFkLCBpdGVtbmFtZSwgbGVhZm5hbWUpOworCQkJaWYgKHJvdyAhPSBudWxsKSB7CisJCQkJU3RyaW5nIHNlbGVjdGlvbiA9IGdldFN0cmluZyhjb21wb25lbnQsICJzZWxlY3Rpb24iLCAic2luZ2xlIik7CisJCQkJaWYgKHNoaWZ0ZG93biAmJiAoc2VsZWN0aW9uICE9ICJzaW5nbGUiKSAmJiAobGVhZCAhPSBudWxsKSkgeworCQkJCQlleHRlbmQoY29tcG9uZW50LCBsZWFkLCByb3csIGl0ZW1uYW1lLCBsZWFmbmFtZSk7CisJCQkJfQorCQkJCWVsc2UgaWYgKCFjb250cm9sZG93bikgeworCQkJCQlzZWxlY3RJdGVtKGNvbXBvbmVudCwgcm93LCBpdGVtbmFtZSwgbGVhZm5hbWUpOworCQkJCX0KKwkJCQlzZXRMZWFkKGNvbXBvbmVudCwgbGVhZCwgcm93KTsKKwkJCQk8ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAnUmVjdGFuZ2xlJyI+UmVjdGFuZ2xlPC9lcnJvcj4gciA9IGdldFJlY3RhbmdsZShyb3csICJib3VuZHMiKTsKKwkJCQlzY3JvbGxUb1Zpc2libGUoY29tcG9uZW50LCByLjxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICd4JyI+eDwvZXJyb3I+LCByLjxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICd5JyI+eTwvZXJyb3I+LCAwLCByLjxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICdoZWlnaHQnIj5oZWlnaHQ8L2Vycm9yPiAtIDEpOworCQkJCXJldHVybiB0cnVlOworCQkJfQorCQl9CisJCWVsc2UgaWYgKGtleWNoYXIgPT0gPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ0tleUV2ZW50JyI+S2V5RXZlbnQ8L2Vycm9yPi5WS19TUEFDRSkgeworCQkJc2VsZWN0KGNvbXBvbmVudCwgZ2V0KGNvbXBvbmVudCwgImxlYWQiKSwKKwkJCQlpdGVtbmFtZSwgbGVhZm5hbWUsIHNoaWZ0ZG93biwgY29udHJvbGRvd24pOyAvLy4uLgorCQkJcmV0dXJuIHRydWU7CisJCX0KKwkJZWxzZSBpZiAoY29udHJvbGRvd24pIHsKKwkJCWlmICgoKGtleWNvZGUgPT0gPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ0tleUV2ZW50JyI+S2V5RXZlbnQ8L2Vycm9yPi5WS19BKSB8fCAoa2V5Y29kZSA9PSAweEJGKSkgJiYgLy9LZXlFdmVudC5WS19TTEFTSAorCQkJCQkoZ2V0U3RyaW5nKGNvbXBvbmVudCwgInNlbGVjdGlvbiIsICJzaW5nbGUiKSAhPSAic2luZ2xlIikpIHsKKwkJCQlzZWxlY3RBbGwoY29tcG9uZW50LCB0cnVlLCBpdGVtbmFtZSwgbGVhZm5hbWUpOworCQkJCXJldHVybiB0cnVlOworCQkJfQorCQkJZWxzZSBpZiAoa2V5Y29kZSA9PSAweERDKSB7IC8vS2V5RXZlbnQuVktfQkFDS19TTEFTSAorCQkJCXNlbGVjdEFsbChjb21wb25lbnQsIGZhbHNlLCBpdGVtbmFtZSwgbGVhZm5hbWUpOworCQkJCXJldHVybiB0cnVlOworCQkJfQorCQl9CisJCXJldHVybiBmYWxzZTsKKwl9CisKKwkvKioKKwkgKgorCSAqLworCXByaXZhdGUgT2JqZWN0IGdldExpc3RJdGVtKE9iamVjdCBjb21wb25lbnQsIE9iamVjdCBzY3JvbGxwYW5lLAorCQkJaW50IGtleWNvZGUsIE9iamVjdCBsZWFkLCBTdHJpbmcgaXRlbW5hbWUsIFN0cmluZyBsZWFmbmFtZSkgeworCQlPYmplY3Qgcm93ID0gbnVsbDsKKwkJaWYgKGtleWNvZGUgPT0gPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ0tleUV2ZW50JyI+S2V5RXZlbnQ8L2Vycm9yPi5WS19VUCkgeworCQkJZm9yIChPYmplY3QgcHJldiA9IGdldChjb21wb25lbnQsIGl0ZW1uYW1lKTsgcHJldiAhPSBsZWFkOworCQkJCQlwcmV2ID0gZ2V0TmV4dEl0ZW0oY29tcG9uZW50LCBwcmV2LCBsZWFmbmFtZSkpIHsKKwkJCQlyb3cgPSBwcmV2OyAvLyBjb21wb25lbnQgLT4gZ2V0UGFyZW50KGxlYWQpCisJCQl9CisJCX0KKwkJZWxzZSBpZiAoa2V5Y29kZSA9PSA8ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAnS2V5RXZlbnQnIj5LZXlFdmVudDwvZXJyb3I+LlZLX0RPV04pIHsKKwkJCXJvdyA9IChsZWFkID09IG51bGwpID8gZ2V0KGNvbXBvbmVudCwgaXRlbW5hbWUpIDoKKwkJCQlnZXROZXh0SXRlbShjb21wb25lbnQsIGxlYWQsIGxlYWZuYW1lKTsKKwkJfQorCQllbHNlIGlmICgoa2V5Y29kZSA9PSA8ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAnS2V5RXZlbnQnIj5LZXlFdmVudDwvZXJyb3I+LlZLX1BBR0VfVVApIHx8CisJCQkJKGtleWNvZGUgPT0gPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ0tleUV2ZW50JyI+S2V5RXZlbnQ8L2Vycm9yPi5WS19QQUdFX0RPV04pKSB7CisJCQk8ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAnUmVjdGFuZ2xlJyI+UmVjdGFuZ2xlPC9lcnJvcj4gdmlldyA9IGdldFJlY3RhbmdsZShzY3JvbGxwYW5lLCAiOnZpZXciKTsKKwkJCTxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICdSZWN0YW5nbGUnIj5SZWN0YW5nbGU8L2Vycm9yPiBwb3J0ID0gZ2V0UmVjdGFuZ2xlKHNjcm9sbHBhbmUsICI6cG9ydCIpOworCQkJPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ1JlY3RhbmdsZSciPlJlY3RhbmdsZTwvZXJyb3I+IHJsID0gKGxlYWQgIT0gbnVsbCkgPyBnZXRSZWN0YW5nbGUobGVhZCwgImJvdW5kcyIpIDogbnVsbDsKKwkJCWludCB2eSA9IChrZXljb2RlID09IDxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICdLZXlFdmVudCciPktleUV2ZW50PC9lcnJvcj4uVktfUEFHRV9VUCkgPworCQkJCXZpZXcuPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ3knIj55PC9lcnJvcj4gOiAodmlldy48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAneSciPnk8L2Vycm9yPiArIHBvcnQuPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ2hlaWdodCciPmhlaWdodDwvZXJyb3I+IC0gMik7CisJCQlpZiAoKGtleWNvZGUgPT0gPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ0tleUV2ZW50JyI+S2V5RXZlbnQ8L2Vycm9yPi5WS19QQUdFX1VQKSAmJgorCQkJCQkocmwgIT0gbnVsbCkgJiYgKHJsLjxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICd5JyI+eTwvZXJyb3I+IDw9IHZpZXcuPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ3knIj55PC9lcnJvcj4pKSB7CisJCQkJdnkgLT0gcG9ydC48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAnaGVpZ2h0JyI+aGVpZ2h0PC9lcnJvcj4gLSAyOworCQkJfQorCQkJaWYgKChrZXljb2RlID09IDxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICdLZXlFdmVudCciPktleUV2ZW50PC9lcnJvcj4uVktfUEFHRV9ET1dOKSAmJgorCQkJCQkocmwgIT0gbnVsbCkgJiYgKHJsLjxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICd5JyI+eTwvZXJyb3I+ICsgcmwuPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ2hlaWdodCciPmhlaWdodDwvZXJyb3I+ID49IHZpZXcuPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ3knIj55PC9lcnJvcj4gKyBwb3J0LjxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICdoZWlnaHQnIj5oZWlnaHQ8L2Vycm9yPiAtIDIpKSB7CisJCQkJdnkgKz0gcG9ydC48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAnaGVpZ2h0JyI+aGVpZ2h0PC9lcnJvcj4gLSAyOworCQkJfQorCQkJZm9yIChPYmplY3QgaXRlbSA9IGdldChjb21wb25lbnQsIGl0ZW1uYW1lKTsgaXRlbSAhPSBudWxsOworCQkJCQlpdGVtID0gZ2V0TmV4dEl0ZW0oY29tcG9uZW50LCBpdGVtLCBsZWFmbmFtZSkpIHsKKwkJCQk8ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAnUmVjdGFuZ2xlJyI+UmVjdGFuZ2xlPC9lcnJvcj4gciA9IGdldFJlY3RhbmdsZShpdGVtLCAiYm91bmRzIik7CisJCQkJaWYgKGtleWNvZGUgPT0gPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ0tleUV2ZW50JyI+S2V5RXZlbnQ8L2Vycm9yPi5WS19QQUdFX1VQKSB7CisJCQkJCXJvdyA9IGl0ZW07CisJCQkJCWlmIChyLjxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICd5JyI+eTwvZXJyb3I+ICsgci48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAnaGVpZ2h0JyI+aGVpZ2h0PC9lcnJvcj4gPiB2eSkgeyBicmVhazsgfQorCQkJCX0gZWxzZSB7CisJCQkJCWlmIChyLjxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICd5JyI+eTwvZXJyb3I+ID4gdnkpIHsgYnJlYWs7IH0KKwkJCQkJcm93ID0gaXRlbTsKKwkJCQl9CisJCQl9CisJCX0KKwkJZWxzZSBpZiAoa2V5Y29kZSA9PSA8ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAnS2V5RXZlbnQnIj5LZXlFdmVudDwvZXJyb3I+LlZLX0hPTUUpIHsKKwkJCXJvdyA9IGdldChjb21wb25lbnQsIGl0ZW1uYW1lKTsKKwkJfQorCQllbHNlIGlmIChrZXljb2RlID09IDxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICdLZXlFdmVudCciPktleUV2ZW50PC9lcnJvcj4uVktfRU5EKSB7CisJCQlmb3IgKE9iamVjdCBsYXN0ID0gbGVhZDsgbGFzdCAhPSBudWxsOworCQkJCQlsYXN0ID0gZ2V0TmV4dEl0ZW0oY29tcG9uZW50LCBsYXN0LCBsZWFmbmFtZSkpIHsKKwkJCQlyb3cgPSBsYXN0OworCQkJfQorCQl9CisJCXJldHVybiByb3c7CisJfQorCisJLyoqCisJICoKKwkgKi8KKwlwcml2YXRlIHZvaWQgc2VsZWN0QWxsKE9iamVjdCBjb21wb25lbnQsCisJCQlib29sZWFuIHNlbGVjdGVkLCBTdHJpbmcgaXRlbW5hbWUsIFN0cmluZyBsZWFmbmFtZSkgeworCQlib29sZWFuIGNoYW5nZWQgPSBmYWxzZTsKKwkJZm9yIChPYmplY3QgaXRlbSA9IGdldChjb21wb25lbnQsIGl0ZW1uYW1lKTsKKwkJCQlpdGVtICE9IG51bGw7IGl0ZW0gPSBnZXROZXh0SXRlbShjb21wb25lbnQsIGl0ZW0sIGxlYWZuYW1lKSkgeworCQkJaWYgKHNldEJvb2xlYW4oaXRlbSwgInNlbGVjdGVkIiwgc2VsZWN0ZWQsIGZhbHNlKSkgeworCQkJCXJlcGFpbnQoY29tcG9uZW50LCBudWxsLCBpdGVtKTsgY2hhbmdlZCA9IHRydWU7CisJCQl9CisJCX0KKwkJc2V0KGNvbXBvbmVudCwgImFuY2hvciIsIG51bGwpOworCQlpZiAoY2hhbmdlZCkge2ludm9rZShjb21wb25lbnQsICJhY3Rpb24iKTsgfQorCX0KKworCS8qKgorCSAqCisJICovCisJcHJpdmF0ZSB2b2lkIHNlbGVjdEl0ZW0oT2JqZWN0IGNvbXBvbmVudCwKKwkJCU9iamVjdCByb3csIFN0cmluZyBpdGVtbmFtZSwgU3RyaW5nIGxlYWZuYW1lKSB7CisJCWJvb2xlYW4gY2hhbmdlZCA9IGZhbHNlOworCQlmb3IgKE9iamVjdCBpdGVtID0gZ2V0KGNvbXBvbmVudCwgaXRlbW5hbWUpOworCQkJCWl0ZW0gIT0gbnVsbDsgaXRlbSA9IGdldE5leHRJdGVtKGNvbXBvbmVudCwgaXRlbSwgbGVhZm5hbWUpKSB7CisJCQlpZiAoc2V0Qm9vbGVhbihpdGVtLCAic2VsZWN0ZWQiLCAoaXRlbSA9PSByb3cpLCBmYWxzZSkpIHsKKwkJCQlyZXBhaW50KGNvbXBvbmVudCwgbnVsbCwgaXRlbSk7IGNoYW5nZWQgPSB0cnVlOworCQkJfQorCQl9CisJCXNldChjb21wb25lbnQsICJhbmNob3IiLCBudWxsKTsKKwkJaWYgKGNoYW5nZWQpIHsgaW52b2tlKGNvbXBvbmVudCwgImFjdGlvbiIpOyB9CisJfQorCisJLyoqCisJICoKKwkgKi8KKwlwcml2YXRlIHZvaWQgZXh0ZW5kKE9iamVjdCBjb21wb25lbnQsIE9iamVjdCBsZWFkLAorCQkJT2JqZWN0IHJvdywgU3RyaW5nIGl0ZW1uYW1lLCBTdHJpbmcgbGVhZm5hbWUpIHsKKwkJT2JqZWN0IGFuY2hvciA9IGdldChjb21wb25lbnQsICJhbmNob3IiKTsKKwkJaWYgKGFuY2hvciA9PSBudWxsKSB7IHNldChjb21wb25lbnQsICJhbmNob3IiLCBhbmNob3IgPSBsZWFkKTsgfQorCQljaGFyIHNlbGVjdCA9ICduJzsgYm9vbGVhbiBjaGFuZ2VkID0gZmFsc2U7CisJCWZvciAoT2JqZWN0IGl0ZW0gPSBnZXQoY29tcG9uZW50LCBpdGVtbmFtZSk7IC8vIGFuY2hvciAtIHJvdworCQkJCWl0ZW0gIT0gbnVsbDsgaXRlbSA9IGdldE5leHRJdGVtKGNvbXBvbmVudCwgaXRlbSwgbGVhZm5hbWUpKSB7CisJCQlpZiAoaXRlbSA9PSBhbmNob3IpIHNlbGVjdCA9IChzZWxlY3QgPT0gJ24nKSA/ICd5JyA6ICdyJzsKKwkJCWlmIChpdGVtID09IHJvdykgc2VsZWN0ID0gKHNlbGVjdCA9PSAnbicpID8gJ3knIDogJ3InOworCQkJaWYgKHNldEJvb2xlYW4oaXRlbSwgInNlbGVjdGVkIiwgKHNlbGVjdCAhPSAnbicpLCBmYWxzZSkpIHsKKwkJCQlyZXBhaW50KGNvbXBvbmVudCwgbnVsbCwgaXRlbSk7IGNoYW5nZWQgPSB0cnVlOworCQkJfQorCQkJaWYgKHNlbGVjdCA9PSAncicpIHNlbGVjdCA9ICduJzsKKwkJfQorCQlpZiAoY2hhbmdlZCkgeyBpbnZva2UoY29tcG9uZW50LCAiYWN0aW9uIik7IH0KKwl9CisKKwkvKioKKwkgKgorCSAqLworCXByaXZhdGUgdm9pZCBzZXRMZWFkKE9iamVjdCBjb21wb25lbnQsIE9iamVjdCBvbGRsZWFkLCBPYmplY3QgbGVhZCkgeworCQlpZiAob2xkbGVhZCAhPSBsZWFkKSB7IC8vPworCQkJaWYgKG9sZGxlYWQgIT0gbnVsbCkgeyByZXBhaW50KGNvbXBvbmVudCwgbnVsbCwgb2xkbGVhZCk7IH0KKwkJCXNldChjb21wb25lbnQsICJsZWFkIiwgbGVhZCk7CisJCQlyZXBhaW50KGNvbXBvbmVudCwgbnVsbCwgbGVhZCk7CisJCX0KKwl9CisKKwkvKnB1YmxpYyB2b2lkIHJlcGFpbnQoaW50IHgsIGludCB5LCBpbnQgd2lkdGgsIGludCBoZWlnaHQpIHsKKwkJU3lzdGVtLm91dC5wcmludGxuKCJyZXBhaW50KCIgKyB4ICsgIiwgIiArIHkgKyAiLCAiICsgd2lkdGggKyAiLCAiICsgaGVpZ2h0ICsgIikiKTsKKwkJc3VwZXIucmVwYWludCh4LCB5LCB3aWR0aCwgaGVpZ2h0KTsKKwl9Ki8KKworCS8qKgorCSAqCisJICovCisJcHJpdmF0ZSB2b2lkIGhhbmRsZU1vdXNlRXZlbnQoaW50IHgsIGludCB5LCBpbnQgY2xpY2tjb3VudCwKKwkJCWJvb2xlYW4gc2hpZnRkb3duLCBib29sZWFuIGNvbnRyb2xkb3duLCBib29sZWFuIHBvcHVwdHJpZ2dlciwKKwkJCWludCBpZCwgT2JqZWN0IGNvbXBvbmVudCwgT2JqZWN0IHBhcnQpIHsKKwkJaWYgKGlkID09IDxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICdNb3VzZUV2ZW50JyI+TW91c2VFdmVudDwvZXJyb3I+Lk1PVVNFX0VOVEVSRUQpIHsKKwkJCXNldFRpbWVyKDc1MEwpOworCQl9CisJCWVsc2UgaWYgKGlkID09IDxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICdNb3VzZUV2ZW50JyI+TW91c2VFdmVudDwvZXJyb3I+Lk1PVVNFX0VYSVRFRCkgeworCQkJaGlkZVRpcCgpOworCQl9CisJCWlmICghZ2V0Qm9vbGVhbihjb21wb25lbnQsICJlbmFibGVkIiwgdHJ1ZSkpIHsgcmV0dXJuOyB9CisJCVN0cmluZyBjbGFzc25hbWUgPSBnZXRDbGFzcyhjb21wb25lbnQpOworCQlpZiAoKCJidXR0b24iID09IGNsYXNzbmFtZSkgfHwgKCJjaGVja2JveCIgPT0gY2xhc3NuYW1lKSkgeworCQkJaWYgKChpZCA9PSA8ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAnTW91c2VFdmVudCciPk1vdXNlRXZlbnQ8L2Vycm9yPi5NT1VTRV9FTlRFUkVEKSB8fAorCQkJCQkoaWQgPT0gPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ01vdXNlRXZlbnQnIj5Nb3VzZUV2ZW50PC9lcnJvcj4uTU9VU0VfRVhJVEVEKSB8fAorCQkJCQkoaWQgPT0gPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ01vdXNlRXZlbnQnIj5Nb3VzZUV2ZW50PC9lcnJvcj4uTU9VU0VfUFJFU1NFRCkgfHwKKwkJCQkJKGlkID09IDxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICdNb3VzZUV2ZW50JyI+TW91c2VFdmVudDwvZXJyb3I+Lk1PVVNFX1JFTEVBU0VEKSkgeworCQkJCWlmIChpZCA9PSA8ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAnTW91c2VFdmVudCciPk1vdXNlRXZlbnQ8L2Vycm9yPi5NT1VTRV9QUkVTU0VEKSB7CisJCQkJCXNldEZvY3VzKGNvbXBvbmVudCk7CisJCQkJfQorCQkJCWVsc2UgaWYgKChpZCA9PSA8ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAnTW91c2VFdmVudCciPk1vdXNlRXZlbnQ8L2Vycm9yPi5NT1VTRV9SRUxFQVNFRCkgJiYKKwkJCQkJCShtb3VzZWluc2lkZSA9PSBjb21wb25lbnQpKSB7CisJCQkJCWlmICgiY2hlY2tib3giID09IGNsYXNzbmFtZSkgeworCQkJCQkJY2hhbmdlQ2hlY2soY29tcG9uZW50LCB0cnVlKTsKKwkJCQkJfQorCQkJCQllbHNlIGludm9rZShjb21wb25lbnQsICJhY3Rpb24iKTsKKwkJCQl9CisJCQkJcmVwYWludChjb21wb25lbnQpOworCQkJfQorCQl9CisJCWVsc2UgaWYgKCJjb21ib2JveCIgPT0gY2xhc3NuYW1lKSB7CisJCQlib29sZWFuIGVkaXRhYmxlID0gZ2V0Qm9vbGVhbihjb21wb25lbnQsICJlZGl0YWJsZSIsIHRydWUpOworCQkJaWYgKGVkaXRhYmxlICYmIChwYXJ0ID09IG51bGwpKSB7CisJCQkJPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ0ltYWdlJyI+SW1hZ2U8L2Vycm9yPiBpY29uID0gbnVsbDsKKwkJCQlpbnQgbGVmdCA9ICgoaWQgPT0gPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ01vdXNlRXZlbnQnIj5Nb3VzZUV2ZW50PC9lcnJvcj4uTU9VU0VfUFJFU1NFRCkgJiYKKwkJCQkJKChpY29uID0gZ2V0SWNvbihjb21wb25lbnQsICJpY29uIiwgbnVsbCkpICE9IG51bGwpKSA/CisJCQkJCQlpY29uLjxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgbWV0aG9kICdnZXRXaWR0aChUaGlubGV0KSciPmdldFdpZHRoPC9lcnJvcj4odGhpcykgOiAwOworCQkJCXByb2Nlc3NGaWVsZCh4LCB5LCBjbGlja2NvdW50LCBpZCwgY29tcG9uZW50LCBwYXJ0LCBmYWxzZSwgZmFsc2UsIGxlZnQpOworCQkJfQorCQkJZWxzZSBpZiAocGFydCAhPSAiaWNvbiIpIHsgLy8gcGFydCA9ICJkb3duIgorCQkJCWlmICgoKGlkID09IDxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICdNb3VzZUV2ZW50JyI+TW91c2VFdmVudDwvZXJyb3I+Lk1PVVNFX0VOVEVSRUQpIHx8CisJCQkJCQkoaWQgPT0gPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ01vdXNlRXZlbnQnIj5Nb3VzZUV2ZW50PC9lcnJvcj4uTU9VU0VfRVhJVEVEKSkgJiYgKG1vdXNlcHJlc3NlZCA9PSBudWxsKSkgeworCQkJCQlpZiAoZWRpdGFibGUpIHsgcmVwYWludChjb21wb25lbnQsICJjb21ib2JveCIsIHBhcnQpOyB9CisJCQkJCQllbHNlIHsgcmVwYWludChjb21wb25lbnQpOyB9CisJCQkJfQorCQkJCWVsc2UgaWYgKGlkID09IDxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICdNb3VzZUV2ZW50JyI+TW91c2VFdmVudDwvZXJyb3I+Lk1PVVNFX1BSRVNTRUQpIHsKKwkJCQkJT2JqZWN0IGNvbWJvbGlzdCA9IGdldChjb21wb25lbnQsICJjb21ib2xpc3QiKTsKKwkJCQkJaWYgKGNvbWJvbGlzdCA9PSBudWxsKSB7CisJCQkJCQlzZXRGb2N1cyhjb21wb25lbnQpOworCQkJCQkJcmVwYWludChjb21wb25lbnQpOworCQkJCQkJcG9wdXAoY29tcG9uZW50LCBjbGFzc25hbWUpOworCQkJCQl9IGVsc2UgeworCQkJCQkJY2xvc2V1cChjb21wb25lbnQsIGNvbWJvbGlzdCwgbnVsbCk7CisJCQkJCX0KKwkJCQl9CisJCQkJZWxzZSBpZiAoaWQgPT0gPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ01vdXNlRXZlbnQnIj5Nb3VzZUV2ZW50PC9lcnJvcj4uTU9VU0VfUkVMRUFTRUQpIHsKKwkJCQkJaWYgKG1vdXNlaW5zaWRlICE9IGNvbXBvbmVudCkgeworCQkJCQkJT2JqZWN0IGNvbWJvbGlzdCA9IGdldChjb21wb25lbnQsICJjb21ib2xpc3QiKTsKKwkJCQkJCWNsb3NldXAoY29tcG9uZW50LCBjb21ib2xpc3QsCisJCQkJCQkJKG1vdXNlaW5zaWRlID09IGNvbWJvbGlzdCkgPyBpbnNpZGVwYXJ0IDogbnVsbCk7CisJCQkJCX0gZWxzZSB7CisJCQkJCQlyZXBhaW50KGNvbXBvbmVudCk7CisJCQkJCX0KKwkJCQl9CisJCQl9CisJCX0KKwkJZWxzZSBpZiAoImNvbWJvbGlzdCIgPT0gY2xhc3NuYW1lKSB7CisJCQlpZiAoIXByb2Nlc3NTY3JvbGwoeCwgeSwgaWQsIGNvbXBvbmVudCwgcGFydCkpIHsKKwkJCQlpZiAoKGlkID09IDxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICdNb3VzZUV2ZW50JyI+TW91c2VFdmVudDwvZXJyb3I+Lk1PVVNFX0VOVEVSRUQpIHx8IChpZCA9PSBEUkFHX0VOVEVSRUQpKSB7CisJCQkJCWlmIChwYXJ0ICE9IG51bGwpIHsKKwkJCQkJCS8vIHJlcGFpbnQgcHJldmlvdXMgaW5zaWRlCisJCQkJCQlzZXQoY29tcG9uZW50LCAiaW5zaWRlIiwgcGFydCk7CisJCQkJCQlyZXBhaW50KGNvbXBvbmVudCwgY2xhc3NuYW1lLCBwYXJ0KTsKKwkJCQkJfQorCQkJCX0KKwkJCQllbHNlIGlmICgoaWQgPT0gPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ01vdXNlRXZlbnQnIj5Nb3VzZUV2ZW50PC9lcnJvcj4uTU9VU0VfRVhJVEVEKSB8fCAoaWQgPT0gRFJBR19FWElURUQpKSB7CisJCQkJCWlmIChwYXJ0ICE9IG51bGwpIHsKKwkJCQkJCXNldChjb21wb25lbnQsICJpbnNpZGUiLCBudWxsKTsKKwkJCQkJCXJlcGFpbnQoY29tcG9uZW50LCBjbGFzc25hbWUsIHBhcnQpOworCQkJCQl9CisJCQkJfQorCQkJCWVsc2UgaWYgKGlkID09IDxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICdNb3VzZUV2ZW50JyI+TW91c2VFdmVudDwvZXJyb3I+Lk1PVVNFX1JFTEVBU0VEKSB7CisJCQkJCWNsb3NldXAoZ2V0KGNvbXBvbmVudCwgImNvbWJvYm94IiksIGNvbXBvbmVudCwgcGFydCk7CisJCQkJfQorCQkJfQorCQl9CisJCWVsc2UgaWYgKCgidGV4dGZpZWxkIiA9PSBjbGFzc25hbWUpIHx8ICgicGFzc3dvcmRmaWVsZCIgPT0gY2xhc3NuYW1lKSkgeworCQkJcHJvY2Vzc0ZpZWxkKHgsIHksIGNsaWNrY291bnQsIGlkLCBjb21wb25lbnQsIHBhcnQsCisJCQkJZmFsc2UsICgicGFzc3dvcmRmaWVsZCIgPT0gY2xhc3NuYW1lKSwgMCk7CisJCX0KKwkJZWxzZSBpZiAoInRleHRhcmVhIiA9PSBjbGFzc25hbWUpIHsKKwkJCWlmICghcHJvY2Vzc1Njcm9sbCh4LCB5LCBpZCwgY29tcG9uZW50LCBwYXJ0KSkgeworCQkJCXByb2Nlc3NGaWVsZCh4LCB5LCBjbGlja2NvdW50LCBpZCwgY29tcG9uZW50LCBwYXJ0LCB0cnVlLCBmYWxzZSwgMCk7CisJCQl9CisJCX0KKwkJLy9qYXZhPgorCQllbHNlIGlmICgiZGVza3RvcCIgPT0gY2xhc3NuYW1lKSB7CisJCQlpZiAoaWQgPT0gPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ01vdXNlRXZlbnQnIj5Nb3VzZUV2ZW50PC9lcnJvcj4uTU9VU0VfRU5URVJFRCkgeworCQkJCXNldEN1cnNvcig8ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAnQ3Vyc29yJyI+Q3Vyc29yPC9lcnJvcj4uZ2V0UHJlZGVmaW5lZEN1cnNvcig8ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAnQ3Vyc29yJyI+Q3Vyc29yPC9lcnJvcj4uV0FJVF9DVVJTT1IpKTsKKwkJCX0KKwkJCWVsc2UgaWYgKGlkID09IDxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICdNb3VzZUV2ZW50JyI+TW91c2VFdmVudDwvZXJyb3I+Lk1PVVNFX0VYSVRFRCkgeworCQkJCXNldEN1cnNvcig8ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAnQ3Vyc29yJyI+Q3Vyc29yPC9lcnJvcj4uZ2V0UHJlZGVmaW5lZEN1cnNvcig8ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAnQ3Vyc29yJyI+Q3Vyc29yPC9lcnJvcj4uREVGQVVMVF9DVVJTT1IpKTsKKwkJCX0KKwkJfQorCQkvLzxqYXZhCisJCWVsc2UgaWYgKCJzcGluYm94IiA9PSBjbGFzc25hbWUpIHsKKwkJCWlmIChwYXJ0ID09IG51bGwpIHsKKwkJCQlwcm9jZXNzRmllbGQoeCwgeSwgY2xpY2tjb3VudCwgaWQsIGNvbXBvbmVudCwgcGFydCwgZmFsc2UsIGZhbHNlLCAwKTsKKwkJCX0KKwkJCWVsc2UgeyAvLyBwYXJ0ID0gInVwIiB8fCAiZG93biIKKwkJCQlpZiAoKGlkID09IDxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICdNb3VzZUV2ZW50JyI+TW91c2VFdmVudDwvZXJyb3I+Lk1PVVNFX0VOVEVSRUQpIHx8CisJCQkJCQkoaWQgPT0gPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ01vdXNlRXZlbnQnIj5Nb3VzZUV2ZW50PC9lcnJvcj4uTU9VU0VfRVhJVEVEKSB8fAorCQkJCQkJKGlkID09IDxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICdNb3VzZUV2ZW50JyI+TW91c2VFdmVudDwvZXJyb3I+Lk1PVVNFX1BSRVNTRUQpIHx8CisJCQkJCQkoaWQgPT0gPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ01vdXNlRXZlbnQnIj5Nb3VzZUV2ZW50PC9lcnJvcj4uTU9VU0VfUkVMRUFTRUQpKSB7CisJCQkJCWlmIChpZCA9PSA8ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAnTW91c2VFdmVudCciPk1vdXNlRXZlbnQ8L2Vycm9yPi5NT1VTRV9QUkVTU0VEKSB7CisJCQkJCQlzZXRGb2N1cyhjb21wb25lbnQpOworCQkJCQkJaWYgKHByb2Nlc3NTcGluKGNvbXBvbmVudCwgcGFydCkpIHsgc2V0VGltZXIoMzc1TCk7IH0KKwkJCQkJCS8vc2V0dGV4dDogc3RhcnQgZW5kIHNlbGVjdGlvbiwgcGFyc2UgZXhjZXB0aW9uLi4uCisJCQkJCX0KKwkJCQkJZWxzZSB7CisJCQkJCQlpZiAoaWQgPT0gPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ01vdXNlRXZlbnQnIj5Nb3VzZUV2ZW50PC9lcnJvcj4uTU9VU0VfUkVMRUFTRUQpIHsKKwkJCQkJCQlzZXRUaW1lcigwTCk7CisJCQkJCQl9CisJCQkJCX0KKwkJCQkJcmVwYWludChjb21wb25lbnQsIGNsYXNzbmFtZSwgcGFydCk7CisJCQkJfQorCQkJfQorCQl9CisJCWVsc2UgaWYgKCJ0YWJiZWRwYW5lIiA9PSBjbGFzc25hbWUpIHsKKwkJCWlmICgoaWQgPT0gPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ01vdXNlRXZlbnQnIj5Nb3VzZUV2ZW50PC9lcnJvcj4uTU9VU0VfRU5URVJFRCkgfHwKKwkJCQkJKGlkID09IDxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICdNb3VzZUV2ZW50JyI+TW91c2VFdmVudDwvZXJyb3I+Lk1PVVNFX0VYSVRFRCkpIHsKKwkJCQlpZiAoKHBhcnQgIT0gbnVsbCkgJiYgZ2V0Qm9vbGVhbihwYXJ0LCAiZW5hYmxlZCIsIHRydWUpICYmCisJCQkJCQkoZ2V0SW50ZWdlcihjb21wb25lbnQsICJzZWxlY3RlZCIsIDApICE9IGdldEluZGV4KGNvbXBvbmVudCwgInRhYiIsIHBhcnQpKSkgeworCQkJCQlyZXBhaW50KGNvbXBvbmVudCwgInRhYmJlZHBhbmUiLCBwYXJ0KTsKKwkJCQl9CisJCQl9CisJCQllbHNlIGlmICgocGFydCAhPSBudWxsKSAmJiAoaWQgPT0gPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ01vdXNlRXZlbnQnIj5Nb3VzZUV2ZW50PC9lcnJvcj4uTU9VU0VfUFJFU1NFRCkgJiYKKwkJCQkJZ2V0Qm9vbGVhbihwYXJ0LCAiZW5hYmxlZCIsIHRydWUpKSB7CisJCQkJaW50IHNlbGVjdGVkID0gZ2V0SW50ZWdlcihjb21wb25lbnQsICJzZWxlY3RlZCIsIDApOworCQkJCWludCBjdXJyZW50ID0gZ2V0SW5kZXgoY29tcG9uZW50LCAidGFiIiwgcGFydCk7CisJCQkJaWYgKHNlbGVjdGVkID09IGN1cnJlbnQpIHsKKwkJCQkJc2V0Rm9jdXMoY29tcG9uZW50KTsKKwkJCQkJcmVwYWludChjb21wb25lbnQsICJ0YWJiZWRwYW5lIiwgcGFydCk7CisJCQkJfQorCQkJCWVsc2UgeworCQkJCQlzZXRJbnRlZ2VyKGNvbXBvbmVudCwgInNlbGVjdGVkIiwgY3VycmVudCwgMCk7CisJCQkJCS8vT2JqZWN0IHRhYmNvbnRlbnQgPSBnZXRJdGVtSW1wbChjb21wb25lbnQsICJjb21wb25lbnQiLCBjdXJyZW50KTsKKwkJCQkJLy9zZXRGb2N1cygodGFiY29udGVudCAhPSBudWxsKSA/IHRhYmNvbnRlbnQgOiBjb21wb25lbnQpOworCQkJCQlzZXROZXh0Rm9jdXNhYmxlKGNvbXBvbmVudCwgZmFsc2UpOworCQkJCQlyZXBhaW50KGNvbXBvbmVudCk7CisJCQkJCWludm9rZShjb21wb25lbnQsICJhY3Rpb24iKTsKKwkJCQl9CisJCQl9CisJCX0KKwkJZWxzZSBpZiAoInNsaWRlciIgPT0gY2xhc3NuYW1lKSB7CisJCQlpZiAoKGlkID09IDxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICdNb3VzZUV2ZW50JyI+TW91c2VFdmVudDwvZXJyb3I+Lk1PVVNFX1BSRVNTRUQpIHx8CisJCQkJCShpZCA9PSA8ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAnTW91c2VFdmVudCciPk1vdXNlRXZlbnQ8L2Vycm9yPi5NT1VTRV9EUkFHR0VEKSkgeworCQkJCWlmIChpZCA9PSA8ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAnTW91c2VFdmVudCciPk1vdXNlRXZlbnQ8L2Vycm9yPi5NT1VTRV9QUkVTU0VEKSB7CisJCQkJCXNldFJlZmVyZW5jZShjb21wb25lbnQsIGJsb2NrIC8gMiwgYmxvY2sgLyAyKTsKKwkJCQkJc2V0Rm9jdXMoY29tcG9uZW50KTsKKwkJCQl9CisJCQkJaW50IG1pbmltdW0gPSBnZXRJbnRlZ2VyKGNvbXBvbmVudCwgIm1pbmltdW0iLCAwKTsKKwkJCQlpbnQgbWF4aW11bSA9IGdldEludGVnZXIoY29tcG9uZW50LCAibWF4aW11bSIsIDEwMCk7CisJCQkJaW50IHZhbHVlID0gZ2V0SW50ZWdlcihjb21wb25lbnQsICJ2YWx1ZSIsIDUwKTsKKwkJCQk8ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAnUmVjdGFuZ2xlJyI+UmVjdGFuZ2xlPC9lcnJvcj4gYm91bmRzID0gZ2V0UmVjdGFuZ2xlKGNvbXBvbmVudCwgImJvdW5kcyIpOworCQkJCWJvb2xlYW4gaG9yaXpvbnRhbCA9ICgidmVydGljYWwiICE9IGdldChjb21wb25lbnQsICJvcmllbnRhdGlvbiIpKTsKKwkJCQlpbnQgbmV3dmFsdWUgPSBtaW5pbXVtICsKKwkJCQkJKGhvcml6b250YWwgPyAobW91c2V4IC0gcmVmZXJlbmNleCkgOiAobW91c2V5IC0gcmVmZXJlbmNleSkpICoKKwkJCQkJKG1heGltdW0gLSBtaW5pbXVtKSAvCisJCQkJCSgoaG9yaXpvbnRhbCA/IGJvdW5kcy48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAnd2lkdGgnIj53aWR0aDwvZXJyb3I+IDogYm91bmRzLjxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICdoZWlnaHQnIj5oZWlnaHQ8L2Vycm9yPikgLSBibG9jayk7IC8vLi4uICswLjUKKwkJCQluZXd2YWx1ZSA9IE1hdGgubWF4KG1pbmltdW0sIE1hdGgubWluKG5ld3ZhbHVlLCBtYXhpbXVtKSk7CisJCQkJaWYgKHZhbHVlICE9IG5ld3ZhbHVlKSB7CisJCQkJCXNldEludGVnZXIoY29tcG9uZW50LCAidmFsdWUiLCBuZXd2YWx1ZSwgNTApOworCQkJCQlpbnZva2UoY29tcG9uZW50LCAiYWN0aW9uIik7CisJCQkJfQorCQkJCWlmICgodmFsdWUgIT0gbmV3dmFsdWUpIHx8IChpZCA9PSA8ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAnTW91c2VFdmVudCciPk1vdXNlRXZlbnQ8L2Vycm9yPi5NT1VTRV9QUkVTU0VEKSkgeworCQkJCQlyZXBhaW50KGNvbXBvbmVudCk7CisJCQkJfQorCQkJfQorCQl9CisJCWVsc2UgaWYgKCJzcGxpdHBhbmUiID09IGNsYXNzbmFtZSkgeworCQkJaWYgKGlkID09IDxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICdNb3VzZUV2ZW50JyI+TW91c2VFdmVudDwvZXJyb3I+Lk1PVVNFX1BSRVNTRUQpIHsKKwkJCQlzZXRSZWZlcmVuY2UoY29tcG9uZW50LCAyLCAyKTsKKwkJCX0KKwkJCWVsc2UgaWYgKGlkID09IDxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICdNb3VzZUV2ZW50JyI+TW91c2VFdmVudDwvZXJyb3I+Lk1PVVNFX0RSQUdHRUQpIHsKKwkJCQlpbnQgZGl2aWRlciA9IGdldEludGVnZXIoY29tcG9uZW50LCAiZGl2aWRlciIsIC0xKTsKKwkJCQlib29sZWFuIGhvcml6b250YWwgPSAoInZlcnRpY2FsIiAhPSBnZXQoY29tcG9uZW50LCAib3JpZW50YXRpb24iKSk7CisJCQkJaW50IG1vdmV0byA9IGhvcml6b250YWwgPyAobW91c2V4IC0gcmVmZXJlbmNleCkgOgorCQkJCQkobW91c2V5IC0gcmVmZXJlbmNleSk7CisJCQkJPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ1JlY3RhbmdsZSciPlJlY3RhbmdsZTwvZXJyb3I+IGJvdW5kcyA9IGdldFJlY3RhbmdsZShjb21wb25lbnQsICJib3VuZHMiKTsKKwkJCQltb3ZldG8gPSBNYXRoLm1heDxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgbWV0aG9kICdtYXgoaW50LCA/KSciPigwLCBNYXRoLm1pbjxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgbWV0aG9kICdtaW4oaW50LCA/KSciPihtb3ZldG8sCisJCQkJCU1hdGguYWJzPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBtZXRob2QgJ2Ficyg/KSciPihob3Jpem9udGFsID8gYm91bmRzLjxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICd3aWR0aCciPndpZHRoPC9lcnJvcj4gOiBib3VuZHMuPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ2hlaWdodCciPmhlaWdodDwvZXJyb3I+KTwvZXJyb3I+IC0gNSk8L2Vycm9yPik8L2Vycm9yPjsKKwkJCQlpZiAoZGl2aWRlciAhPSBtb3ZldG8pIHsKKwkJCQkJc2V0SW50ZWdlcihjb21wb25lbnQsICJkaXZpZGVyIiwgbW92ZXRvLCAtMSk7CisJCQkJCXZhbGlkYXRlKGNvbXBvbmVudCk7CisJCQkJfQorCQkJfQorCQkJLy9qYXZhPgorCQkJZWxzZSBpZiAoKGlkID09IDxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICdNb3VzZUV2ZW50JyI+TW91c2VFdmVudDwvZXJyb3I+Lk1PVVNFX0VOVEVSRUQpICYmIChtb3VzZXByZXNzZWQgPT0gbnVsbCkpIHsKKwkJCQlib29sZWFuIGhvcml6b250YWwgPSAoInZlcnRpY2FsIiAhPSBnZXQoY29tcG9uZW50LCAib3JpZW50YXRpb24iKSk7CisJCQkJc2V0Q3Vyc29yKDxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICdDdXJzb3InIj5DdXJzb3I8L2Vycm9yPi5nZXRQcmVkZWZpbmVkQ3Vyc29yKGhvcml6b250YWwgPworCQkJCQk8ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAnQ3Vyc29yJyI+Q3Vyc29yPC9lcnJvcj4uRV9SRVNJWkVfQ1VSU09SIDogPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ0N1cnNvciciPkN1cnNvcjwvZXJyb3I+LlNfUkVTSVpFX0NVUlNPUikpOworCQkJfQorCQkJZWxzZSBpZiAoKChpZCA9PSA8ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAnTW91c2VFdmVudCciPk1vdXNlRXZlbnQ8L2Vycm9yPi5NT1VTRV9FWElURUQpICYmIChtb3VzZXByZXNzZWQgPT0gbnVsbCkpIHx8CisJCQkJCSgoaWQgPT0gPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ01vdXNlRXZlbnQnIj5Nb3VzZUV2ZW50PC9lcnJvcj4uTU9VU0VfUkVMRUFTRUQpICYmIChtb3VzZWluc2lkZSAhPSBjb21wb25lbnQpKSkgeworCQkJCXNldEN1cnNvcig8ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAnQ3Vyc29yJyI+Q3Vyc29yPC9lcnJvcj4uZ2V0UHJlZGVmaW5lZEN1cnNvcig8ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAnQ3Vyc29yJyI+Q3Vyc29yPC9lcnJvcj4uREVGQVVMVF9DVVJTT1IpKTsKKwkJCX0KKwkJCS8vPGphdmEKKwkJfQorCQllbHNlIGlmICgoImxpc3QiID09IGNsYXNzbmFtZSkgfHwKKwkJCQkoInRhYmxlIiA9PSBjbGFzc25hbWUpIHx8ICgidHJlZSIgPT0gY2xhc3NuYW1lKSkgeworCQkJaWYgKCFwcm9jZXNzU2Nyb2xsKHgsIHksIGlkLCBjb21wb25lbnQsIHBhcnQpKSB7CisJCQkJaWYgKCgoaWQgPT0gPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ01vdXNlRXZlbnQnIj5Nb3VzZUV2ZW50PC9lcnJvcj4uTU9VU0VfUFJFU1NFRCl8fAorCQkJCQkJKChpZCA9PSA8ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAnTW91c2VFdmVudCciPk1vdXNlRXZlbnQ8L2Vycm9yPi5NT1VTRV9EUkFHR0VEKSAmJgorCQkJCQkJCSFzaGlmdGRvd24gJiYgIWNvbnRyb2xkb3duKSkgJiYKKwkJCQkJCSFwb3B1cHRyaWdnZXIpIHsgLy8gZS5nZXRDbGlja0NvdW50KCkKKwkJCQkJPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ1JlY3RhbmdsZSciPlJlY3RhbmdsZTwvZXJyb3I+IHZpZXcgPSBnZXRSZWN0YW5nbGUoY29tcG9uZW50LCAiOnZpZXciKTsKKwkJCQkJPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ1JlY3RhbmdsZSciPlJlY3RhbmdsZTwvZXJyb3I+IHZpZXdwb3J0ID0gZ2V0UmVjdGFuZ2xlKGNvbXBvbmVudCwgIjpwb3J0Iik7CisJCQkJCWludCBteSA9IG1vdXNleSArIHZpZXcuPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ3knIj55PC9lcnJvcj4gLSByZWZlcmVuY2V5OworCQkJCQlTdHJpbmcgaXRlbW5hbWUgPSAoImxpc3QiID09IGNsYXNzbmFtZSkgPyAiaXRlbSIgOgorCQkJCQkJKCgidGFibGUiID09IGNsYXNzbmFtZSkgPyAicm93IiA6ICJub2RlIik7CisJCQkJCVN0cmluZyBzdWJpdGVtID0gKCJ0cmVlIiA9PSBjbGFzc25hbWUpID8gIm5vZGUiIDogbnVsbDsKKwkJCQkJZm9yIChPYmplY3QgaXRlbSA9IGdldChjb21wb25lbnQsIGl0ZW1uYW1lKTsgaXRlbSAhPSBudWxsOykgeworCQkJCQkJPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ1JlY3RhbmdsZSciPlJlY3RhbmdsZTwvZXJyb3I+IHIgPSBnZXRSZWN0YW5nbGUoaXRlbSwgImJvdW5kcyIpOworCQkJCQkJaWYgKG15IDwgci48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAneSciPnk8L2Vycm9yPiArIHIuPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ2hlaWdodCciPmhlaWdodDwvZXJyb3I+KSB7CisJCQkJCQkJaWYgKGlkID09IDxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICdNb3VzZUV2ZW50JyI+TW91c2VFdmVudDwvZXJyb3I+Lk1PVVNFX0RSQUdHRUQpIHsgLy8hISEKKwkJCQkJCQkJc2Nyb2xsVG9WaXNpYmxlKGNvbXBvbmVudCwgci48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAneCciPng8L2Vycm9yPiwgci48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAneSciPnk8L2Vycm9yPiwgMCwgci48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAnaGVpZ2h0JyI+aGVpZ2h0PC9lcnJvcj4gLSAxKTsKKwkJCQkJCQl9CisJCQkJCQkJZWxzZSBpZiAoInRyZWUiID09IGNsYXNzbmFtZSkgeworCQkJCQkJCQlpbnQgbXggPSBtb3VzZXggKyB2aWV3LjxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICd4JyI+eDwvZXJyb3I+IC0gcmVmZXJlbmNleDsKKwkJCQkJCQkJaWYgKG14IDwgci48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAneCciPng8L2Vycm9yPikgeworCQkJCQkJCQkJaWYgKChteCA+PSByLjxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICd4JyI+eDwvZXJyb3I+IC0gYmxvY2spICYmIChnZXQoaXRlbSwgIm5vZGUiKSAhPSBudWxsKSkgeworCQkJCQkJCQkJCWJvb2xlYW4gZXhwYW5kZWQgPSBnZXRCb29sZWFuKGl0ZW0sICJleHBhbmRlZCIsIHRydWUpOworCQkJCQkJCQkJCXNldEJvb2xlYW4oaXRlbSwgImV4cGFuZGVkIiwgIWV4cGFuZGVkLCAJdHJ1ZSk7CisJCQkJCQkJCQkJc2VsZWN0SXRlbShjb21wb25lbnQsIGl0ZW0sICJub2RlIiwgIm5vZGUiKTsKKwkJCQkJCQkJCQlzZXRMZWFkKGNvbXBvbmVudCwgZ2V0KGNvbXBvbmVudCwgImxlYWQiKSwgaXRlbSk7CisJCQkJCQkJCQkJc2V0Rm9jdXMoY29tcG9uZW50KTsKKwkJCQkJCQkJCQl2YWxpZGF0ZShjb21wb25lbnQpOworCQkJCQkJCQkJCWludm9rZShjb21wb25lbnQsIGV4cGFuZGVkID8gImNvbGxhcHNlIiA6ICJleHBhbmQiKTsgLy9pdGVtCisJCQkJCQkJCQl9CisJCQkJCQkJCQlicmVhazsKKwkJCQkJCQkJfQorCQkJCQkJCX0KKwkJCQkJCQlpZiAoKGlkICE9IDxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICdNb3VzZUV2ZW50JyI+TW91c2VFdmVudDwvZXJyb3I+Lk1PVVNFX0RSQUdHRUQpIHx8CisJCQkJCQkJCQkhZ2V0Qm9vbGVhbihpdGVtLCAic2VsZWN0ZWQiLCBmYWxzZSkpIHsKKwkJCQkJCQkJc2VsZWN0KGNvbXBvbmVudCwgaXRlbSwgaXRlbW5hbWUsIHN1Yml0ZW0sIHNoaWZ0ZG93biwgY29udHJvbGRvd24pOworCQkJCQkJCQlpZiAoaWQgIT0gPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ01vdXNlRXZlbnQnIj5Nb3VzZUV2ZW50PC9lcnJvcj4uTU9VU0VfRFJBR0dFRCkgeworCQkJCQkJCQkJaWYgKHNldEZvY3VzKGNvbXBvbmVudCkpIHsgcmVwYWludChjb21wb25lbnQsIGNsYXNzbmFtZSwgaXRlbSk7IH0gLy8/CisJCQkJCQkJCX0KKwkJCQkJCQl9CisJCQkJCQkJYnJlYWs7CisJCQkJCQl9CisJCQkJCQlpdGVtID0gZ2V0TmV4dEl0ZW0oY29tcG9uZW50LCBpdGVtLCBzdWJpdGVtKTsKKwkJCQkJfQorCQkJCX0KKwkJIAl9CisJCX0KKwkJZWxzZSBpZiAoIm1lbnViYXIiID09IGNsYXNzbmFtZSkgeworCQkJT2JqZWN0IHNlbGVjdGVkID0gZ2V0KGNvbXBvbmVudCwgInNlbGVjdGVkIik7CisJCQlpZiAoKChpZCA9PSA8ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAnTW91c2VFdmVudCciPk1vdXNlRXZlbnQ8L2Vycm9yPi5NT1VTRV9FTlRFUkVEKSB8fCAoaWQgPT0gPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ01vdXNlRXZlbnQnIj5Nb3VzZUV2ZW50PC9lcnJvcj4uTU9VU0VfRVhJVEVEKSkgJiYKKwkJCQkJKHBhcnQgIT0gbnVsbCkgJiYgKHNlbGVjdGVkID09IG51bGwpKSB7CisJCQkJcmVwYWludChjb21wb25lbnQsIGNsYXNzbmFtZSwgcGFydCk7CisJCQl9CisJCQllbHNlIGlmICgocGFydCAhPSBudWxsKSAmJiAoKHNlbGVjdGVkID09IG51bGwpID8KKwkJCQkoaWQgPT0gPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ01vdXNlRXZlbnQnIj5Nb3VzZUV2ZW50PC9lcnJvcj4uTU9VU0VfUFJFU1NFRCkgOgorCQkJCQkoKGlkID09IDxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICdNb3VzZUV2ZW50JyI+TW91c2VFdmVudDwvZXJyb3I+Lk1PVVNFX0VOVEVSRUQpIHx8IChpZCA9PSBEUkFHX0VOVEVSRUQpKSkpIHsKKwkJCQlzZXQoY29tcG9uZW50LCAic2VsZWN0ZWQiLCBwYXJ0KTsKKwkJCQlwb3B1cChjb21wb25lbnQsIGNsYXNzbmFtZSk7CisJCQkJcmVwYWludChjb21wb25lbnQsIGNsYXNzbmFtZSwgcGFydCk7CisJCQl9CisJCQllbHNlIGlmICgoaWQgPT0gPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ01vdXNlRXZlbnQnIj5Nb3VzZUV2ZW50PC9lcnJvcj4uTU9VU0VfUFJFU1NFRCkgJiYgKHNlbGVjdGVkICE9IG51bGwpKSB7CisJCQkJY2xvc2V1cChjb21wb25lbnQpOworCQkJfQorCQkJZWxzZSBpZiAoaWQgPT0gPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ01vdXNlRXZlbnQnIj5Nb3VzZUV2ZW50PC9lcnJvcj4uTU9VU0VfUkVMRUFTRUQpIHsKKwkJCQlpZiAoKHBhcnQgIT0gaW5zaWRlcGFydCkgJiYKKwkJCQkJCSgoaW5zaWRlcGFydCA9PSBudWxsKSB8fCAoZ2V0Q2xhc3MoaW5zaWRlcGFydCkgIT0gIm1lbnUiKSkpIHsKKwkJCQkJaWYgKChpbnNpZGVwYXJ0ICE9IG51bGwpICYmIGdldEJvb2xlYW4oaW5zaWRlcGFydCwgImVuYWJsZWQiLCB0cnVlKSkgeworCQkJCQkJaWYgKGdldENsYXNzKGluc2lkZXBhcnQpID09ICJjaGVja2JveG1lbnVpdGVtIikgeworCQkJCQkJCWNoYW5nZUNoZWNrKGluc2lkZXBhcnQsIGZhbHNlKTsKKwkJCQkJCX0KKwkJCQkJCWVsc2UgaW52b2tlKGluc2lkZXBhcnQsICJhY3Rpb24iKTsKKwkJCQkJfQorCQkJCQljbG9zZXVwKGNvbXBvbmVudCk7CisJCQkJfQorCQkJfQorCQl9CisJCWVsc2UgaWYgKCJwb3B1cG1lbnUiID09IGNsYXNzbmFtZSkgeworCQkJaWYgKHBhcnQgIT0gbnVsbCkgeworCQkJCWlmICgoaWQgPT0gPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ01vdXNlRXZlbnQnIj5Nb3VzZUV2ZW50PC9lcnJvcj4uTU9VU0VfRU5URVJFRCkgfHwgKGlkID09IERSQUdfRU5URVJFRCkpIHsKKwkJCQkJc2V0KGNvbXBvbmVudCwgInNlbGVjdGVkIiwgcGFydCk7CisJCQkJCXBvcHVwKGNvbXBvbmVudCwgY2xhc3NuYW1lKTsKKwkJCQkJcmVwYWludChjb21wb25lbnQsIGNsYXNzbmFtZSwgcGFydCk7CisJCQkJfQorCQkJCWVsc2UgaWYgKGlkID09IDxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICdNb3VzZUV2ZW50JyI+TW91c2VFdmVudDwvZXJyb3I+Lk1PVVNFX1JFTEVBU0VEKSB7CisJCQkJCWlmICgoaW5zaWRlcGFydCA9PSBudWxsKSB8fCAoZ2V0Q2xhc3MoaW5zaWRlcGFydCkgIT0gIm1lbnUiKSkgeworCQkJCQkJT2JqZWN0IG1lbnViYXIgPSBwYXJ0OworCQkJCQkJZG8geworCQkJCQkJCW1lbnViYXIgPSBnZXRQYXJlbnQobWVudWJhcik7CisJCQkJCQl9IHdoaWxlIChnZXRDbGFzcyhtZW51YmFyKSAhPSAibWVudWJhciIpOworCQkJCQkJaWYgKChpbnNpZGVwYXJ0ICE9IG51bGwpICYmIGdldEJvb2xlYW4oaW5zaWRlcGFydCwgImVuYWJsZWQiLCB0cnVlKSkgeworCQkJCQkJCWlmIChnZXRDbGFzcyhpbnNpZGVwYXJ0KSA9PSAiY2hlY2tib3htZW51aXRlbSIpIHsKKwkJCQkJCQkJY2hhbmdlQ2hlY2soaW5zaWRlcGFydCwgZmFsc2UpOworCQkJCQkJCX0KKwkJCQkJCQllbHNlIGludm9rZShpbnNpZGVwYXJ0LCAiYWN0aW9uIik7CisJCQkJCQl9CisJCQkJCQljbG9zZXVwKG1lbnViYXIpOworCQkJCQl9CisJCQkJfQorCQkJCWVsc2UgaWYgKChpZCA9PSA8ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAnTW91c2VFdmVudCciPk1vdXNlRXZlbnQ8L2Vycm9yPi5NT1VTRV9FWElURUQpIHx8IChpZCA9PSBEUkFHX0VYSVRFRCkpIHsKKwkJCQkJaWYgKGdldENsYXNzKHBhcnQpICE9ICJtZW51IikgeworCQkJCQkJc2V0KGNvbXBvbmVudCwgInNlbGVjdGVkIiwgbnVsbCk7CisJCQkJCX0KKwkJCQkJcmVwYWludChjb21wb25lbnQsIGNsYXNzbmFtZSwgcGFydCk7CisJCQkJfQorCQkJfQorCQl9CisJCWVsc2UgaWYgKCJkaWFsb2ciID09IGNsYXNzbmFtZSkgeworCQkJaWYgKHBhcnQgPT0gImhlYWRlciIpIHsKKwkJCQlpZiAoaWQgPT0gPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ01vdXNlRXZlbnQnIj5Nb3VzZUV2ZW50PC9lcnJvcj4uTU9VU0VfUFJFU1NFRCkgeworCQkJCQlyZWZlcmVuY2V4ID0gbW91c2V4OyByZWZlcmVuY2V5ID0gbW91c2V5OworCQkJCQlpZiAoIWdldEJvb2xlYW4oY29tcG9uZW50LCAibW9kYWwiLCBmYWxzZSkgJiYKKwkJCQkJCQkoZ2V0KGNvbnRlbnQsICJjb21wb25lbnQiKSAhPSBjb21wb25lbnQpKSB7CisJCQkJCQlyZW1vdmVJdGVtSW1wbChjb250ZW50LCAiY29tcG9uZW50IiwgY29tcG9uZW50KTsKKwkJCQkJCWluc2VydEl0ZW0oY29udGVudCwgImNvbXBvbmVudCIsIGNvbXBvbmVudCwgMCk7CisJCQkJCQlzZXQoY29tcG9uZW50LCAiOnBhcmVudCIsIGNvbnRlbnQpOworCQkJCQkJcmVwYWludChjb21wb25lbnQpOworCQkJCQl9CisJCQkJfQorCQkJCWVsc2UgaWYgKGlkID09IDxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICdNb3VzZUV2ZW50JyI+TW91c2VFdmVudDwvZXJyb3I+Lk1PVVNFX0RSQUdHRUQpIHsKKwkJCQkJPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ1JlY3RhbmdsZSciPlJlY3RhbmdsZTwvZXJyb3I+IGJvdW5kcyA9IGdldFJlY3RhbmdsZShjb21wb25lbnQsICJib3VuZHMiKTsKKwkJCQkJaW50IGR4ID0gbW91c2V4IC0gcmVmZXJlbmNleDsgaW50IGR5ID0gbW91c2V5IC0gcmVmZXJlbmNleTsKKwkJCQkJcmVwYWludDxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgbWV0aG9kICdyZXBhaW50KGphdmEubGFuZy5PYmplY3QsID8sID8sID8sID8pJyI+KGNvbXBvbmVudCwKKwkJCQkJCWJvdW5kcy48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAneCciPng8L2Vycm9yPiArIE1hdGgubWluKDAsIGR4KSwgYm91bmRzLjxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICd5JyI+eTwvZXJyb3I+ICsgTWF0aC5taW4oMCwgZHkpLAorCQkJCQkJYm91bmRzLjxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICd3aWR0aCciPndpZHRoPC9lcnJvcj4gKyBNYXRoLmFicyhkeCksIGJvdW5kcy48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAnaGVpZ2h0JyI+aGVpZ2h0PC9lcnJvcj4gKyBNYXRoLmFicyhkeSkpPC9lcnJvcj47CisJCQkJCWJvdW5kcy48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAneCciPng8L2Vycm9yPiArPSBkeDsgYm91bmRzLjxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICd5JyI+eTwvZXJyb3I+ICs9IGR5OworCQkJCQlyZWZlcmVuY2V4ID0gbW91c2V4OyByZWZlcmVuY2V5ID0gbW91c2V5OworCQkJCX0KKwkJCX0KKwkJfQorCX0KKworCS8qKgorCSAqCisJICovCisJcHJpdmF0ZSB2b2lkIHNldFJlZmVyZW5jZShPYmplY3QgY29tcG9uZW50LCBpbnQgeCwgaW50IHkpIHsKKwkJcmVmZXJlbmNleCA9IHg7IHJlZmVyZW5jZXkgPSB5OworCQlmb3IgKDsgY29tcG9uZW50ICE9IG51bGw7IGNvbXBvbmVudCA9IGdldFBhcmVudChjb21wb25lbnQpKSB7CisJCQk8ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAnUmVjdGFuZ2xlJyI+UmVjdGFuZ2xlPC9lcnJvcj4gYm91bmRzID0gZ2V0UmVjdGFuZ2xlKGNvbXBvbmVudCwgImJvdW5kcyIpOworCQkJcmVmZXJlbmNleCArPSBib3VuZHMuPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ3gnIj54PC9lcnJvcj47IHJlZmVyZW5jZXkgKz0gYm91bmRzLjxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICd5JyI+eTwvZXJyb3I+OworCQl9CisJfQorCisJLyoqCisJICoKKwkgKi8KKwlwcml2YXRlIHZvaWQgc2VsZWN0KE9iamVjdCBjb21wb25lbnQsIE9iamVjdCByb3csIFN0cmluZyBmaXJzdCwKKwkJCVN0cmluZyBjaGlsZCwgYm9vbGVhbiBzaGlmdGRvd24sIGJvb2xlYW4gY29udHJvbGRvd24pIHsKKwkJU3RyaW5nIHNlbGVjdGlvbiA9IGdldFN0cmluZyhjb21wb25lbnQsICJzZWxlY3Rpb24iLCAic2luZ2xlIik7CisJCU9iamVjdCBsZWFkID0gbnVsbDsKKwkJaWYgKHNoaWZ0ZG93biAmJiAoc2VsZWN0aW9uICE9ICJzaW5nbGUiKSAmJgorCQkJCSgobGVhZCA9IGdldChjb21wb25lbnQsICJsZWFkIikpICE9IG51bGwpKSB7CisJCQlleHRlbmQoY29tcG9uZW50LCBsZWFkLCByb3csIGZpcnN0LCBjaGlsZCk7CisJCX0KKwkJZWxzZSB7CisJCQlpZiAoY29udHJvbGRvd24gJiYgKHNlbGVjdGlvbiA9PSAibXVsdGlwbGUiKSkgeworCQkJCXNldEJvb2xlYW4ocm93LCAic2VsZWN0ZWQiLAorCQkJCQkhZ2V0Qm9vbGVhbihyb3csICJzZWxlY3RlZCIsIGZhbHNlKSwgZmFsc2UpOworCQkJCXJlcGFpbnQoY29tcG9uZW50LCBudWxsLCByb3cpOworCQkJCWludm9rZShjb21wb25lbnQsICJhY3Rpb24iKTsKKwkJCQlzZXQoY29tcG9uZW50LCAiYW5jaG9yIiwgbnVsbCk7CisJCQl9CisJCQllbHNlIGlmIChjb250cm9sZG93biAmJiBnZXRCb29sZWFuKHJvdywgInNlbGVjdGVkIiwgZmFsc2UpKSB7CisJCQkJZm9yIChPYmplY3QgaXRlbSA9IHJvdzsKKwkJCQkJCWl0ZW0gIT0gbnVsbDsgaXRlbSA9IGdldE5leHRJdGVtKGNvbXBvbmVudCwgaXRlbSwgY2hpbGQpKSB7CisJCQkJCWlmIChzZXRCb29sZWFuKGl0ZW0sICJzZWxlY3RlZCIsIGZhbHNlLCBmYWxzZSkpIHsKKwkJCQkJCXJlcGFpbnQoY29tcG9uZW50LCBudWxsLCBpdGVtKTsKKwkJCQkJfQorCQkJCX0KKwkJCQlpbnZva2UoY29tcG9uZW50LCAiYWN0aW9uIik7CisJCQkJc2V0KGNvbXBvbmVudCwgImFuY2hvciIsIG51bGwpOworCQkJfQorCQkJZWxzZSB7CisJCQkJc2VsZWN0SXRlbShjb21wb25lbnQsIHJvdywgZmlyc3QsIGNoaWxkKTsKKwkJCX0KKwkJfQorCQlzZXRMZWFkKGNvbXBvbmVudCwgKGxlYWQgIT0gbnVsbCkgPyBsZWFkIDogZ2V0KGNvbXBvbmVudCwgImxlYWQiKSwgcm93KTsKKwl9CisKKwkvKioKKwkgKgorCSAqLworCXByaXZhdGUgT2JqZWN0IGdldE5leHRJdGVtKE9iamVjdCBjb21wb25lbnQsCisJCQlPYmplY3QgaXRlbSwgU3RyaW5nIHN1Yml0ZW0pIHsKKwkJaWYgKHN1Yml0ZW0gPT0gbnVsbCkgeyByZXR1cm4gZ2V0KGl0ZW0sICI6bmV4dCIpOyB9CisJCU9iamVjdCBuZXh0ID0gZ2V0KGl0ZW0sIHN1Yml0ZW0pOworCQlpZiAoKG5leHQgPT0gbnVsbCkgfHwgIWdldEJvb2xlYW4oaXRlbSwgImV4cGFuZGVkIiwgdHJ1ZSkpIHsKKwkJCXdoaWxlICgoaXRlbSAhPSBjb21wb25lbnQpICYmICgobmV4dCA9IGdldChpdGVtLCAiOm5leHQiKSkgPT0gbnVsbCkpIHsKKwkJCQlpdGVtID0gZ2V0UGFyZW50KGl0ZW0pOworCQkJfQorCQl9CisJCXJldHVybiBuZXh0OworCX0KKworCS8qKgorCSAqCisJICovCisJcHJpdmF0ZSB2b2lkIHByb2Nlc3NGaWVsZChpbnQgeCwgaW50IHksIGludCBjbGlja2NvdW50LAorCQkJaW50IGlkLCBPYmplY3QgY29tcG9uZW50LAorCQkJT2JqZWN0IHBhcnQsIGJvb2xlYW4gbXVsdGlsaW5lLCBib29sZWFuIGhpZGRlbiwgaW50IGxlZnQpIHsKKwkJaWYgKGlkID09IDxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICdNb3VzZUV2ZW50JyI+TW91c2VFdmVudDwvZXJyb3I+Lk1PVVNFX1BSRVNTRUQpIHsKKwkJCXNldFJlZmVyZW5jZShjb21wb25lbnQsIDIgKyBsZWZ0LCAyKTsKKwkJCWludCBteCA9IHggLSByZWZlcmVuY2V4OworCQkJaW50IG15ID0gMDsKKwkJCWlmICghbXVsdGlsaW5lKSB7CisJCQkJbXggKz0gZ2V0SW50ZWdlcihjb21wb25lbnQsICJvZmZzZXQiLCAwKTsKKwkJCX0gZWxzZSB7CisJCQkJPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ1JlY3RhbmdsZSciPlJlY3RhbmdsZTwvZXJyb3I+IHZpZXcgPSBnZXRSZWN0YW5nbGUoY29tcG9uZW50LCAiOnZpZXciKTsKKwkJCQlteCArPSB2aWV3LjxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICd4JyI+eDwvZXJyb3I+IC0gMTsKKwkJCQlteSA9IHkgLSByZWZlcmVuY2V5ICsgdmlldy48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAneSciPnk8L2Vycm9yPiAtIDE7CisJCQl9CisJCQlpbnQgY2FyZXRzdGFydCA9IGdldENhcmV0TG9jYXRpb24oY29tcG9uZW50LCBteCwgbXksIGhpZGRlbik7CisJCQlpbnQgY2FyZXRlbmQgPSBjYXJldHN0YXJ0OworCQkJLy9qYXZhPgorCQkJaWYgKGNsaWNrY291bnQgPiAxKSB7CisJCQkJU3RyaW5nIHRleHQgPSBnZXRTdHJpbmcoY29tcG9uZW50LCAidGV4dCIsICIiKTsKKwkJCQl3aGlsZSAoKGNhcmV0c3RhcnQgPiAwKSAmJiAoKGNsaWNrY291bnQgPT0gMikgPworCQkJCQlDaGFyYWN0ZXIuaXNMZXR0ZXJPckRpZ2l0KHRleHQuY2hhckF0KGNhcmV0c3RhcnQgLSAxKSkgOgorCQkJCQkJKHRleHQuY2hhckF0KGNhcmV0c3RhcnQgLSAxKSAhPSAnXG4nKSkpIHsgY2FyZXRzdGFydC0tOyB9CisJCQkJd2hpbGUgKChjYXJldGVuZCA8IHRleHQubGVuZ3RoKCkpICYmICgoY2xpY2tjb3VudCA9PSAyKSA/CisJCQkJCUNoYXJhY3Rlci5pc0xldHRlck9yRGlnaXQodGV4dC5jaGFyQXQoY2FyZXRlbmQpKSA6CisJCQkJCQkodGV4dC5jaGFyQXQoY2FyZXRlbmQpICE9ICdcbicpKSkgeyBjYXJldGVuZCsrOyB9CisJCQl9CisJCQkvLzxqYXZhCisJCQlzZXRJbnRlZ2VyKGNvbXBvbmVudCwgInN0YXJ0IiwgY2FyZXRzdGFydCwgMCk7CisJCQlzZXRJbnRlZ2VyKGNvbXBvbmVudCwgImVuZCIsIGNhcmV0ZW5kLCAwKTsKKwkJCXNldEZvY3VzKGNvbXBvbmVudCk7CisJCQl2YWxpZGF0ZShjb21wb25lbnQpOyAvLyBjYXJldCBjaGVjayBvbmx5CisJCX0KKwkJZWxzZSBpZiAoaWQgPT0gPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ01vdXNlRXZlbnQnIj5Nb3VzZUV2ZW50PC9lcnJvcj4uTU9VU0VfRFJBR0dFRCkgeworCQkJaW50IG14ID0geCAtIHJlZmVyZW5jZXg7CisJCQlpbnQgbXkgPSAwOworCQkJaWYgKCFtdWx0aWxpbmUpIHsKKwkJCQlteCArPSBnZXRJbnRlZ2VyKGNvbXBvbmVudCwgIm9mZnNldCIsIDApOworCQkJfSBlbHNlIHsKKwkJCQk8ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAnUmVjdGFuZ2xlJyI+UmVjdGFuZ2xlPC9lcnJvcj4gdmlldyA9IGdldFJlY3RhbmdsZShjb21wb25lbnQsICI6dmlldyIpOworCQkJCW14ICs9IHZpZXcuPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ3gnIj54PC9lcnJvcj4gLSAxOworCQkJCW15ID0geSAtIHJlZmVyZW5jZXkgKyB2aWV3LjxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICd5JyI+eTwvZXJyb3I+IC0gMTsKKwkJCX0KKwkJCWludCBkcmFnY2FyZXQgPSBnZXRDYXJldExvY2F0aW9uKGNvbXBvbmVudCwgbXgsIG15LCBoaWRkZW4pOworCQkJaWYgKGRyYWdjYXJldCAhPSBnZXRJbnRlZ2VyKGNvbXBvbmVudCwgImVuZCIsIDApKSB7CisJCQkJc2V0SW50ZWdlcihjb21wb25lbnQsICJlbmQiLCBkcmFnY2FyZXQsIDApOworCQkJCXZhbGlkYXRlKGNvbXBvbmVudCk7IC8vIGNhcmV0IGNoZWNrIG9ubHkKKwkJCX0KKwkJfQorCQkvL2phdmE+CisJCWVsc2UgaWYgKChpZCA9PSA8ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAnTW91c2VFdmVudCciPk1vdXNlRXZlbnQ8L2Vycm9yPi5NT1VTRV9FTlRFUkVEKSAmJiAobW91c2VwcmVzc2VkID09IG51bGwpKSB7CisJCQlzZXRDdXJzb3IoPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ0N1cnNvciciPkN1cnNvcjwvZXJyb3I+LmdldFByZWRlZmluZWRDdXJzb3IoPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ0N1cnNvciciPkN1cnNvcjwvZXJyb3I+LlRFWFRfQ1VSU09SKSk7CisJCX0KKwkJZWxzZSBpZiAoKChpZCA9PSA8ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAnTW91c2VFdmVudCciPk1vdXNlRXZlbnQ8L2Vycm9yPi5NT1VTRV9FWElURUQpICYmIChtb3VzZXByZXNzZWQgPT0gbnVsbCkpIHx8CisJCQkoKGlkID09IDxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICdNb3VzZUV2ZW50JyI+TW91c2VFdmVudDwvZXJyb3I+Lk1PVVNFX1JFTEVBU0VEKSAmJgorCQkJCSgobW91c2VpbnNpZGUgIT0gY29tcG9uZW50KSB8fCAoaW5zaWRlcGFydCAhPSBudWxsKSkpKSB7CisJCQlzZXRDdXJzb3IoPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ0N1cnNvciciPkN1cnNvcjwvZXJyb3I+LmdldFByZWRlZmluZWRDdXJzb3IoPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ0N1cnNvciciPkN1cnNvcjwvZXJyb3I+LkRFRkFVTFRfQ1VSU09SKSk7CisJCX0KKwkJLy88amF2YQorCX0KKworCS8qKgorCSAqCisJICovCisJcHJpdmF0ZSBpbnQgZ2V0Q2FyZXRMb2NhdGlvbihPYmplY3QgY29tcG9uZW50LCBpbnQgeCwgaW50IHksIGJvb2xlYW4gaGlkZGVuKSB7CisJCVN0cmluZyB0ZXh0ID0gZ2V0U3RyaW5nKGNvbXBvbmVudCwgInRleHQiLCAiIik7CisJCTxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICdGb250TWV0cmljcyciPkZvbnRNZXRyaWNzPC9lcnJvcj4gZm0gPSBnZXRGb250TWV0cmljcyhnZXRGb250KCkpOworCQlmb3IgKGludCBpID0gMCwgaiA9IDA7IHRydWU7IGkgPSBqICsgMSkgeworCQkJaiA9IHRleHQuaW5kZXhPZignXG4nLCBpKTsKKwkJCWlmICgoaiA9PSAtMSkgfHwgeSA8IGZtLjxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgbWV0aG9kICdnZXRIZWlnaHQoKSciPmdldEhlaWdodDwvZXJyb3I+KCkpIHsKKwkJCQlpZiAoaiA9PSAtMSkgeyBqID0gdGV4dC5sZW5ndGgoKTsgfQorCQkJCWZvciAoaW50IGsgPSBpOyBrIDwgajsgaysrKSB7CisJCQkJCWludCBjaGFyd2lkdGggPSBmbS48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIG1ldGhvZCAnY2hhcldpZHRoKGNoYXIpJyI+Y2hhcldpZHRoPC9lcnJvcj4oaGlkZGVuID8gJyonIDogdGV4dC5jaGFyQXQoaykpOworCQkJCQlpZiAoeCA8PSAoY2hhcndpZHRoIC8gMikpIHsKKwkJCQkJCXJldHVybiBrOworCQkJCQl9CisJCQkJCXggLT0gY2hhcndpZHRoOworCQkJCX0KKwkJCQlyZXR1cm4gajsKKwkJCX0KKwkJCXkgLT0gZm0uPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBtZXRob2QgJ2dldEhlaWdodCgpJyI+Z2V0SGVpZ2h0PC9lcnJvcj4oKTsKKwkJfQorCX0KKworCS8qKgorCSAqCisJICovCisJcHJpdmF0ZSBib29sZWFuIHByb2Nlc3NTY3JvbGwoaW50IHgsIGludCB5LAorCQkJaW50IGlkLCBPYmplY3QgY29tcG9uZW50LCBPYmplY3QgcGFydCkgeworCQlpZiAoKHBhcnQgPT0gInVwIikgfHwgKHBhcnQgPT0gImRvd24iKSB8fAorCQkJCShwYXJ0ID09ICJsZWZ0IikgfHwgKHBhcnQgPT0gInJpZ2h0IikpIHsKKwkJCWlmICgoaWQgPT0gPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ01vdXNlRXZlbnQnIj5Nb3VzZUV2ZW50PC9lcnJvcj4uTU9VU0VfRU5URVJFRCkgfHwKKwkJCQkJKGlkID09IDxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICdNb3VzZUV2ZW50JyI+TW91c2VFdmVudDwvZXJyb3I+Lk1PVVNFX0VYSVRFRCkgfHwKKwkJCQkJKGlkID09IDxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICdNb3VzZUV2ZW50JyI+TW91c2VFdmVudDwvZXJyb3I+Lk1PVVNFX1BSRVNTRUQpIHx8CisJCQkJCShpZCA9PSA8ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAnTW91c2VFdmVudCciPk1vdXNlRXZlbnQ8L2Vycm9yPi5NT1VTRV9SRUxFQVNFRCkpIHsKKwkJCQlpZiAoaWQgPT0gPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ01vdXNlRXZlbnQnIj5Nb3VzZUV2ZW50PC9lcnJvcj4uTU9VU0VfUFJFU1NFRCkgeworCQkJCQlpZiAocHJvY2Vzc1Njcm9sbChjb21wb25lbnQsIHBhcnQpKSB7CisJCQkJCQlzZXRUaW1lcigzMDBMKTsgcmV0dXJuIHRydWU7CisJCQkJCX0KKwkJCQl9CisJCQkJZWxzZSB7CisJCQkJCWlmIChpZCA9PSA8ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAnTW91c2VFdmVudCciPk1vdXNlRXZlbnQ8L2Vycm9yPi5NT1VTRV9SRUxFQVNFRCkgeyBzZXRUaW1lcigwTCk7IH0KKwkJCQkJcmVwYWludChjb21wb25lbnQsIG51bGwsIHBhcnQpOworCQkJCX0KKwkJCX0KKwkJfQorCQllbHNlIGlmICgocGFydCA9PSAidXB0cmFjayIpIHx8IChwYXJ0ID09ICJkb3dudHJhY2siKSB8fAorCQkJCShwYXJ0ID09ICJsZWZ0dHJhY2siKSB8fCAocGFydCA9PSAicmlnaHR0cmFjayIpKSB7CisJCQlpZiAoaWQgPT0gPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ01vdXNlRXZlbnQnIj5Nb3VzZUV2ZW50PC9lcnJvcj4uTU9VU0VfUFJFU1NFRCkgeworCQkJCWlmIChwcm9jZXNzU2Nyb2xsKGNvbXBvbmVudCwgcGFydCkpIHsKKwkJCQkJc2V0VGltZXIoMzAwTCk7CisJCQkJfQorCQkJfQorCQkJZWxzZSBpZiAoaWQgPT0gPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ01vdXNlRXZlbnQnIj5Nb3VzZUV2ZW50PC9lcnJvcj4uTU9VU0VfUkVMRUFTRUQpIHsKKwkJCQlzZXRUaW1lcigwTCk7CisJCQl9CisJCX0KKwkJZWxzZSBpZiAoKHBhcnQgPT0gInZrbm9iIikgfHwgKHBhcnQgPT0gImhrbm9iIikpIHsKKwkJCWlmIChpZCA9PSA8ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAnTW91c2VFdmVudCciPk1vdXNlRXZlbnQ8L2Vycm9yPi5NT1VTRV9QUkVTU0VEKSB7CisJCQkJPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ1JlY3RhbmdsZSciPlJlY3RhbmdsZTwvZXJyb3I+IHBvcnQgPSBnZXRSZWN0YW5nbGUoY29tcG9uZW50LCAiOnBvcnQiKTsKKwkJCQk8ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAnUmVjdGFuZ2xlJyI+UmVjdGFuZ2xlPC9lcnJvcj4gdmlldyA9IGdldFJlY3RhbmdsZShjb21wb25lbnQsICI6dmlldyIpOworCQkJCWlmIChwYXJ0ID09ICJoa25vYiIpIHsKKwkJCQkJcmVmZXJlbmNleCA9IHggLQorCQkJCQkJdmlldy48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAneCciPng8L2Vycm9yPiAqIChwb3J0LjxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICd3aWR0aCciPndpZHRoPC9lcnJvcj4gLSAyICogYmxvY2spIC8gdmlldy48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAnd2lkdGgnIj53aWR0aDwvZXJyb3I+OworCQkJCX0gZWxzZSB7CisJCQkJCXJlZmVyZW5jZXkgPSB5IC0KKwkJCQkJCXZpZXcuPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ3knIj55PC9lcnJvcj4gKiAocG9ydC48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAnaGVpZ2h0JyI+aGVpZ2h0PC9lcnJvcj4gLSAyICogYmxvY2spIC8gdmlldy48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAnaGVpZ2h0JyI+aGVpZ2h0PC9lcnJvcj47CisJCQkJfQorCQkJfQorCQkJZWxzZSBpZiAoaWQgPT0gPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ01vdXNlRXZlbnQnIj5Nb3VzZUV2ZW50PC9lcnJvcj4uTU9VU0VfRFJBR0dFRCkgeworCQkJCTxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICdSZWN0YW5nbGUnIj5SZWN0YW5nbGU8L2Vycm9yPiBwb3J0ID0gZ2V0UmVjdGFuZ2xlKGNvbXBvbmVudCwgIjpwb3J0Iik7CisJCQkJPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ1JlY3RhbmdsZSciPlJlY3RhbmdsZTwvZXJyb3I+IHZpZXcgPSBnZXRSZWN0YW5nbGUoY29tcG9uZW50LCAiOnZpZXciKTsKKwkJCQlpZiAocGFydCA9PSAiaGtub2IiKSB7CisJCQkJCWludCB2aWV3eCA9ICh4IC0gcmVmZXJlbmNleCkgKgorCQkJCQkJdmlldy48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAnd2lkdGgnIj53aWR0aDwvZXJyb3I+IC8gKHBvcnQuPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ3dpZHRoJyI+d2lkdGg8L2Vycm9yPiAtIDIgKiBibG9jayk7CisJCQkJCXZpZXd4ID0gTWF0aC5tYXg8ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIG1ldGhvZCAnbWF4KGludCwgPyknIj4oMCwgTWF0aC5taW48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIG1ldGhvZCAnbWluKGludCwgPyknIj4odmlld3gsIHZpZXcuPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ3dpZHRoJyI+d2lkdGg8L2Vycm9yPiAtIHBvcnQuPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ3dpZHRoJyI+d2lkdGg8L2Vycm9yPiArIDIpPC9lcnJvcj4pPC9lcnJvcj47CisJCQkJCWlmICh2aWV3LjxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICd4JyI+eDwvZXJyb3I+ICE9IHZpZXd4KSB7CisJCQkJCQl2aWV3LjxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICd4JyI+eDwvZXJyb3I+ID0gdmlld3g7CisJCQkJCQlyZXBhaW50KGNvbXBvbmVudCwgbnVsbCwgImhvcml6b250YWwiKTsKKwkJCQkJfQorCQkJCX0gZWxzZSB7CisJCQkJCWludCB2aWV3eSA9ICh5IC0gcmVmZXJlbmNleSkgKgorCQkJCQkJdmlldy48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAnaGVpZ2h0JyI+aGVpZ2h0PC9lcnJvcj4gLyAocG9ydC48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAnaGVpZ2h0JyI+aGVpZ2h0PC9lcnJvcj4gLSAyICogYmxvY2spOworCQkJCQl2aWV3eSA9IE1hdGgubWF4PGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBtZXRob2QgJ21heChpbnQsID8pJyI+KDAsIE1hdGgubWluPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBtZXRob2QgJ21pbihpbnQsID8pJyI+KHZpZXd5LCB2aWV3LjxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICdoZWlnaHQnIj5oZWlnaHQ8L2Vycm9yPiAtIHBvcnQuPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ2hlaWdodCciPmhlaWdodDwvZXJyb3I+ICsgMik8L2Vycm9yPik8L2Vycm9yPjsKKwkJCQkJaWYgKHZpZXcuPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ3knIj55PC9lcnJvcj4gIT0gdmlld3kpIHsKKwkJCQkJCXZpZXcuPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ3knIj55PC9lcnJvcj4gPSB2aWV3eTsKKwkJCQkJCXJlcGFpbnQoY29tcG9uZW50LCBudWxsLCAidmVydGljYWwiKTsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJfQorCQllbHNlIGlmIChwYXJ0ID09ICJjb3JuZXIiKSB7CisJCQkJcGFydCA9ICJjb3JuZXIiOyAvLyBjb21waWxlciBidWcKKwkJfQorCQllbHNlIHsKKwkJCWlmIChpZCA9PSA8ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAnTW91c2VFdmVudCciPk1vdXNlRXZlbnQ8L2Vycm9yPi5NT1VTRV9QUkVTU0VEKSB7CisJCQkJPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ1JlY3RhbmdsZSciPlJlY3RhbmdsZTwvZXJyb3I+IHBvcnQgPSBnZXRSZWN0YW5nbGUoY29tcG9uZW50LCAiOnBvcnQiKTsKKwkJCQlzZXRSZWZlcmVuY2UoY29tcG9uZW50LCBwb3J0LjxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICd4JyI+eDwvZXJyb3I+ICsgMSwgcG9ydC48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAneSciPnk8L2Vycm9yPiArIDEpOworCQkJfQorCQkJcmV0dXJuIGZhbHNlOworCQl9CisJCXJldHVybiB0cnVlOworCX0KKworCS8qKgorCSAqCisJICovCisJcHJpdmF0ZSBib29sZWFuIHByb2Nlc3NTY3JvbGwoT2JqZWN0IGNvbXBvbmVudCwgT2JqZWN0IHBhcnQpIHsKKwkJPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ1JlY3RhbmdsZSciPlJlY3RhbmdsZTwvZXJyb3I+IHZpZXcgPSBnZXRSZWN0YW5nbGUoY29tcG9uZW50LCAiOnZpZXciKTsKKwkJPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ1JlY3RhbmdsZSciPlJlY3RhbmdsZTwvZXJyb3I+IHBvcnQgPSAoKHBhcnQgPT0gImxlZnQiKSB8fCAocGFydCA9PSAidXAiKSkgPyBudWxsIDoKKwkJCWdldFJlY3RhbmdsZShjb21wb25lbnQsICI6cG9ydCIpOworCQlpbnQgZHggPSAwOyBpbnQgZHkgPSAwOworCQlpZiAocGFydCA9PSAibGVmdCIpIHsgZHggPSAtMTA7IH0KKwkJZWxzZSBpZiAocGFydCA9PSAibGVmdHRyYWNrIikgeyBkeCA9IC1wb3J0LjxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICd3aWR0aCciPndpZHRoPC9lcnJvcj47IH0KKwkJZWxzZSBpZiAocGFydCA9PSAicmlnaHQiKSB7IGR4ID0gMTA7IH0KKwkJZWxzZSBpZiAocGFydCA9PSAicmlnaHR0cmFjayIpIHsgZHggPSBwb3J0LjxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICd3aWR0aCciPndpZHRoPC9lcnJvcj47IH0KKwkJZWxzZSBpZiAocGFydCA9PSAidXAiKSB7IGR5ID0gLTEwOyB9CisJCWVsc2UgaWYgKHBhcnQgPT0gInVwdHJhY2siKSB7IGR5ID0gLXBvcnQuPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ2hlaWdodCciPmhlaWdodDwvZXJyb3I+OyB9CisJCWVsc2UgaWYgKHBhcnQgPT0gImRvd24iKSB7IGR5ID0gMTA7IH0KKwkJZWxzZSBpZiAocGFydCA9PSAiZG93bnRyYWNrIikgeyBkeSA9IHBvcnQuPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ2hlaWdodCciPmhlaWdodDwvZXJyb3I+OyB9CisJCWlmIChkeCAhPSAwKSB7CisJCQlkeCA9IChkeCA8IDApID8gTWF0aC5tYXg8ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIG1ldGhvZCAnbWF4KD8sIGludCknIj4oLXZpZXcuPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ3gnIj54PC9lcnJvcj4sIGR4KTwvZXJyb3I+IDoKKwkJCQlNYXRoLm1pbjxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgbWV0aG9kICdtaW4oaW50LCA/KSciPihkeCwgdmlldy48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAnd2lkdGgnIj53aWR0aDwvZXJyb3I+IC0gcG9ydC48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAnd2lkdGgnIj53aWR0aDwvZXJyb3I+ICsgMiAtIHZpZXcuPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ3gnIj54PC9lcnJvcj4pPC9lcnJvcj47CisJCX0KKwkJZWxzZSBpZiAoZHkgIT0gMCkgeworCQkJZHkgPSAoZHkgPCAwKSA/IE1hdGgubWF4PGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBtZXRob2QgJ21heCg/LCBpbnQpJyI+KC12aWV3LjxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICd5JyI+eTwvZXJyb3I+LCBkeSk8L2Vycm9yPiA6CisJCQkJTWF0aC5taW48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIG1ldGhvZCAnbWluKGludCwgPyknIj4oZHksIHZpZXcuPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ2hlaWdodCciPmhlaWdodDwvZXJyb3I+IC0gcG9ydC48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAnaGVpZ2h0JyI+aGVpZ2h0PC9lcnJvcj4gKyAyIC0gdmlldy48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAneSciPnk8L2Vycm9yPik8L2Vycm9yPjsKKwkJfQorCQllbHNlIHJldHVybiBmYWxzZTsKKwkJdmlldy48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAneCciPng8L2Vycm9yPiArPSBkeDsgdmlldy48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAneSciPnk8L2Vycm9yPiArPSBkeTsKKwkJcmVwYWludChjb21wb25lbnQsIG51bGwsIChkeCAhPSAwKSA/ICJob3Jpem9udGFsIiA6ICJ2ZXJ0aWNhbCIpOworCQlyZXR1cm4gKCgocGFydCA9PSAibGVmdCIpIHx8IChwYXJ0ID09ICJsZWZ0dHJhY2siKSkgJiYgKHZpZXcuPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ3gnIj54PC9lcnJvcj4gPiAwKSkgfHwKKwkJCSgoKHBhcnQgPT0gInJpZ2h0IikgfHwgKHBhcnQgPT0gInJpZ2h0dHJhY2siKSkgJiYKKwkJCQkodmlldy48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAneCciPng8L2Vycm9yPiA8IHZpZXcuPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ3dpZHRoJyI+d2lkdGg8L2Vycm9yPiAtIHBvcnQuPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ3dpZHRoJyI+d2lkdGg8L2Vycm9yPiArIDIpKSB8fAorCQkJKCgocGFydCA9PSAidXAiKSB8fCAocGFydCA9PSAidXB0cmFjayIpKSAmJiAodmlldy48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAneSciPnk8L2Vycm9yPiA+IDApKSB8fAorCQkJKCgocGFydCA9PSAiZG93biIpIHx8IChwYXJ0ID09ICJkb3dudHJhY2siKSkgJiYKKwkJCQkodmlldy48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAneSciPnk8L2Vycm9yPiA8IHZpZXcuPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ2hlaWdodCciPmhlaWdodDwvZXJyb3I+IC0gcG9ydC48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAnaGVpZ2h0JyI+aGVpZ2h0PC9lcnJvcj4gKyAyKSk7CisJfQorCisJLyoqCisJICoKKwkgKi8KKwlwcml2YXRlIGJvb2xlYW4gcHJvY2Vzc1NwaW4oT2JqZWN0IGNvbXBvbmVudCwgT2JqZWN0IHBhcnQpIHsKKwkJU3RyaW5nIHRleHQgPSBnZXRTdHJpbmcoY29tcG9uZW50LCAidGV4dCIsIG51bGwpOworCQlpZiAodGV4dCAhPSBudWxsKSB7CisJCQl0cnkgeworCQkJCVN0cmluZyB2YWx1ZSA9IFN0cmluZy52YWx1ZU9mKAorCQkJCQlJbnRlZ2VyLnBhcnNlSW50KHRleHQpICsgKChwYXJ0ID09ICJ1cCIpID8gMSA6IC0xKSk7CisJCQkJc2V0U3RyaW5nKGNvbXBvbmVudCwgInRleHQiLCB2YWx1ZSwgbnVsbCk7CisJCQkJc2V0SW50ZWdlcihjb21wb25lbnQsICJzdGFydCIsIHZhbHVlLmxlbmd0aCgpLCAwKTsKKwkJCQlzZXRJbnRlZ2VyKGNvbXBvbmVudCwgImVuZCIsIDAsIDApOworCQkJCXJlcGFpbnQoY29tcG9uZW50LCAic3BpbmJveCIsIG51bGwpOworCQkJCWludm9rZShjb21wb25lbnQsICJhY3Rpb24iKTsKKwkJCQlyZXR1cm4gdHJ1ZTsKKwkJCX0gY2F0Y2ggKE51bWJlckZvcm1hdEV4Y2VwdGlvbiBuZmUpIHt9CisJCX0KKwkJcmV0dXJuIGZhbHNlOworCX0KKworCS8vamF2YT4KKwkvKnB1YmxpYyB2b2lkIHNldEV2ZW50SGFuZGxlcihPYmplY3QgY29tcG9uZW50LCBPYmplY3QgZXZlbnRoYW5kbGVyKSB7CisJCXNldChjb21wb25lbnQsICI6aGFuZGxlciIsIGV2ZW50aGFuZGxlcik7CisJfSovCisKKwkvKioKKwkgKgorCSAqLworCXByaXZhdGUgdm9pZCBpbnZva2UoT2JqZWN0IGNvbXBvbmVudCwgU3RyaW5nIGV2ZW50KSB7CisJCTxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICdNZXRob2QnIj5NZXRob2Q8L2Vycm9yPiBtZXRob2QgPSAoPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ01ldGhvZCciPk1ldGhvZDwvZXJyb3I+KSBnZXQoY29tcG9uZW50LCBldmVudCk7CisJCWlmIChtZXRob2QgIT0gbnVsbCkgeworCQkJdHJ5IHsKKwkJCQltZXRob2QuPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBtZXRob2QgJ2ludm9rZShUaGlubGV0LCBudWxsKSciPmludm9rZTwvZXJyb3I+KHRoaXMsIG51bGwpOworCQkJfSBjYXRjaCAoPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ0ludm9jYXRpb25UYXJnZXRFeGNlcHRpb24nIj5JbnZvY2F0aW9uVGFyZ2V0RXhjZXB0aW9uPC9lcnJvcj4gaXRlKSB7CisJCQkJaXRlLjxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgbWV0aG9kICdnZXRUYXJnZXRFeGNlcHRpb24oKSciPmdldFRhcmdldEV4Y2VwdGlvbjwvZXJyb3I+KCkucHJpbnRTdGFja1RyYWNlKCk7CisJCQl9IGNhdGNoIChFeGNlcHRpb24gZXhjKSB7CisJCQkJZXhjLnByaW50U3RhY2tUcmFjZSgpOworCQkJfQorCQl9CisJfQorCS8vPGphdmEKKwkvKm1pZHAKKwlwcml2YXRlIHZvaWQgaW52b2tlKE9iamVjdCBjb21wb25lbnQsIFN0cmluZyBldmVudCkgeworCQkJU3RyaW5nIGFjdGlvbiA9IChTdHJpbmcpIGdldChjb21wb25lbnQsIGV2ZW50KTsKKwkJCWlmIChhY3Rpb24gIT0gbnVsbCkgeyBoYW5kbGUoY29tcG9uZW50LCBhY3Rpb24pOyB9CisJfQorCXByb3RlY3RlZCB2b2lkIGhhbmRsZShPYmplY3Qgc291cmNlLCBTdHJpbmcgYWN0aW9uKSB7CisJfQorCW1pZHAqLworCisJLyoqCisJICoKKwkgKi8KKwlwcml2YXRlIGJvb2xlYW4gZmluZENvbXBvbmVudChPYmplY3QgY29tcG9uZW50LCBpbnQgeCwgaW50IHkpIHsKKwkJaWYgKGNvbXBvbmVudCA9PSBjb250ZW50KSB7CisJCQltb3VzZWluc2lkZSA9IGluc2lkZXBhcnQgPSBudWxsOworCQkJbW91c2V4ID0geDsgbW91c2V5ID0geTsKKwkJfQorCQlpZiAoIWdldEJvb2xlYW4oY29tcG9uZW50LCAidmlzaWJsZSIsIHRydWUpKSB7IHJldHVybiBmYWxzZTsgfQorCQk8ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAnUmVjdGFuZ2xlJyI+UmVjdGFuZ2xlPC9lcnJvcj4gYm91bmRzID0gZ2V0UmVjdGFuZ2xlKGNvbXBvbmVudCwgImJvdW5kcyIpOworCQlpZiAoKGJvdW5kcyA9PSBudWxsKSB8fCAhKGJvdW5kcy48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIG1ldGhvZCAnY29udGFpbnMoaW50LCBpbnQpJyI+Y29udGFpbnM8L2Vycm9yPih4LCB5KSkpIHsgcmV0dXJuIGZhbHNlOyB9IC8vamF2YQorCQkvL21pZHAgaWYgKChib3VuZHMgPT0gbnVsbCkgfHwgKHggPCBib3VuZHMueCkgfHwgKHggLSBib3VuZHMueCA+PSBib3VuZHMud2lkdGgpIHx8CisJCS8vbWlkcCAJKHkgPCBib3VuZHMueSkgfHwgKHkgLSBib3VuZHMueSA+PSBib3VuZHMuaGVpZ2h0KSkgeyByZXR1cm4gZmFsc2U7IH0KKwkJbW91c2VpbnNpZGUgPSBjb21wb25lbnQ7CisJCXggLT0gYm91bmRzLjxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICd4JyI+eDwvZXJyb3I+OyB5IC09IGJvdW5kcy48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAneSciPnk8L2Vycm9yPjsKKwkJU3RyaW5nIGNsYXNzbmFtZSA9IGdldENsYXNzKGNvbXBvbmVudCk7CisKKwkJaWYgKCJjb21ib2JveCIgPT0gY2xhc3NuYW1lKSB7CisJCQlpZiAoZ2V0Qm9vbGVhbihjb21wb25lbnQsICJlZGl0YWJsZSIsIHRydWUpICYmICh4IDw9IGJvdW5kcy48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAnd2lkdGgnIj53aWR0aDwvZXJyb3I+IC0gYmxvY2spKSB7CisJCQkJPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ0ltYWdlJyI+SW1hZ2U8L2Vycm9yPiBpY29uID0gZ2V0SWNvbihjb21wb25lbnQsICJpY29uIiwgbnVsbCk7CisJCQkJaW5zaWRlcGFydCA9ICgoaWNvbiAhPSBudWxsKSAmJiAoeCA8PSAyICsgaWNvbi48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIG1ldGhvZCAnZ2V0V2lkdGgoVGhpbmxldCknIj5nZXRXaWR0aDwvZXJyb3I+KHRoaXMpKSkgPworCQkJCQkiaWNvbiIgOiBudWxsOworCQkJfSBlbHNlIHsKKwkJCQlpbnNpZGVwYXJ0ID0gImRvd24iOworCQkJfQorCQl9CisJCWVsc2UgaWYgKCJjb21ib2xpc3QiID09IGNsYXNzbmFtZSkgeworCQkJaWYgKCFmaW5kU2Nyb2xsUGFuZShjb21wb25lbnQsIHgsIHksIGJvdW5kcykpIHsKKwkJCQl5ICs9IGdldFJlY3RhbmdsZShjb21wb25lbnQsICI6dmlldyIpLjxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICd5JyI+eTwvZXJyb3I+OworCQkJCWZvciAoT2JqZWN0IGNob2ljZSA9IGdldChnZXQoY29tcG9uZW50LCAiY29tYm9ib3giKSwgImNob2ljZSIpOworCQkJCQkJY2hvaWNlICE9IG51bGw7IGNob2ljZSA9IGdldChjaG9pY2UsICI6bmV4dCIpKSB7CisJCQkJCTxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICdSZWN0YW5nbGUnIj5SZWN0YW5nbGU8L2Vycm9yPiByID0gZ2V0UmVjdGFuZ2xlKGNob2ljZSwgImJvdW5kcyIpOworCQkJCQlpZiAoKHkgPj0gci48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAneSciPnk8L2Vycm9yPikgJiYgKHkgPCByLjxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICd5JyI+eTwvZXJyb3I+ICsgci48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAnaGVpZ2h0JyI+aGVpZ2h0PC9lcnJvcj4pKSB7CisJCQkJCQlpbnNpZGVwYXJ0ID0gY2hvaWNlOyBicmVhazsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJfQorCQllbHNlIGlmICgidGV4dGFyZWEiID09IGNsYXNzbmFtZSkgeworCQkJZmluZFNjcm9sbFBhbmUoY29tcG9uZW50LCB4LCB5LCBib3VuZHMpOworCQl9CisJCWVsc2UgaWYgKCJ0YWJiZWRwYW5lIiA9PSBjbGFzc25hbWUpIHsKKwkJCU9iamVjdCB0YWJjb250ZW50ID0gZ2V0SXRlbUltcGwoY29tcG9uZW50LAorCQkJCSJjb21wb25lbnQiLCBnZXRJbnRlZ2VyKGNvbXBvbmVudCwgInNlbGVjdGVkIiwgMCkpOworCQkJaWYgKCh0YWJjb250ZW50ID09IG51bGwpIHx8ICFmaW5kQ29tcG9uZW50KHRhYmNvbnRlbnQsIHgsIHkpKSB7CisJCQkJZm9yIChPYmplY3QgY29tcCA9IGdldChjb21wb25lbnQsICJ0YWIiKTsKKwkJCQkJCWNvbXAgIT0gbnVsbDsgY29tcCA9IGdldChjb21wLCAiOm5leHQiKSkgeworCQkJCQk8ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAnUmVjdGFuZ2xlJyI+UmVjdGFuZ2xlPC9lcnJvcj4gciA9IGdldFJlY3RhbmdsZShjb21wLCAiYm91bmRzIik7CisJCQkJCWlmIChyLjxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgbWV0aG9kICdjb250YWlucyhpbnQsIGludCknIj5jb250YWluczwvZXJyb3I+KHgsIHkpKSB7IC8vamF2YQorCQkJCQkvL21pZHAgaWYgKCh4ID49IHIueCkgJiYgKHggLSByLnggPCByLndpZHRoKSAmJiAoeSA+PSByLnkpICYmICh5IC0gci55IDwgci5oZWlnaHQpKSB7CisJCQkJCQlpbnNpZGVwYXJ0ID0gY29tcDsgYnJlYWs7CisJCQkJCX0KKwkJCQl9CisJCQl9CisJCX0KKwkJZWxzZSBpZiAoKCJwYW5lbCIgPT0gY2xhc3NuYW1lKSB8fCAoImRlc2t0b3AiID09IGNsYXNzbmFtZSkgfHwKKwkJCQkoImRpYWxvZyIgPT0gY2xhc3NuYW1lKSkgeworCQkJaWYgKCgiZGlhbG9nIiA9PSBjbGFzc25hbWUpICYmCisJCQkJCSh5IDwgNCArIGdldEludGVnZXIoY29tcG9uZW50LCAidGl0bGVoZWlnaHQiLCAwKSkpIHsKKwkJCQlpbnNpZGVwYXJ0ID0gImhlYWRlciI7CisJCQl9IGVsc2UgeworCQkJCWZvciAoT2JqZWN0IGNvbXAgPSBnZXQoY29tcG9uZW50LCAiY29tcG9uZW50Iik7CisJCQkJCQljb21wICE9IG51bGw7IGNvbXAgPSBnZXQoY29tcCwgIjpuZXh0IikpIHsKKwkJCQkJaWYgKGZpbmRDb21wb25lbnQoY29tcCwgeCwgeSkpIHsgYnJlYWs7IH0KKwkJCQkJaWYgKCgiZGVza3RvcCIgPT0gY2xhc3NuYW1lKSAmJgorCQkJCQkJCWdldEJvb2xlYW4oY29tcCwgIm1vZGFsIiwgZmFsc2UpKSB7IGJyZWFrOyB9IC8vICYmIGRpYWxvZworCQkJCX0KKwkJCX0KKwkJfQorCQllbHNlIGlmICgic3BpbmJveCIgPT0gY2xhc3NuYW1lKSB7CisJCQlpbnNpZGVwYXJ0ID0gKHggPD0gYm91bmRzLjxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICd3aWR0aCciPndpZHRoPC9lcnJvcj4gLSBibG9jaykgPyBudWxsIDoKKwkJCQkoKHkgPD0gYm91bmRzLjxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICdoZWlnaHQnIj5oZWlnaHQ8L2Vycm9yPiAvIDIpID8gInVwIiA6ICJkb3duIik7CisJCX0KKwkJZWxzZSBpZiAoInNwbGl0cGFuZSIgPT0gY2xhc3NuYW1lKSB7CisJCQlPYmplY3QgY29tcDEgPSBnZXQoY29tcG9uZW50LCAiY29tcG9uZW50Iik7CisJCQlpZiAoY29tcDEgIT0gbnVsbCkgeworCQkJCWlmICghZmluZENvbXBvbmVudChjb21wMSwgeCwgeSkpIHsKKwkJCQkJT2JqZWN0IGNvbXAyID0gZ2V0KGNvbXAxLCAiOm5leHQiKTsKKwkJCQkJaWYgKGNvbXAyICE9IG51bGwpIHsKKwkJCQkJCWZpbmRDb21wb25lbnQoY29tcDIsIHgsIHkpOworCQkJCQl9CisJCQkJfQorCQkJfQorCQl9CisJCWVsc2UgaWYgKCJsaXN0IiA9PSBjbGFzc25hbWUpIHsKKwkJCWZpbmRTY3JvbGxQYW5lKGNvbXBvbmVudCwgeCwgeSwgYm91bmRzKTsKKwkJfQorCQllbHNlIGlmICgidGFibGUiID09IGNsYXNzbmFtZSkgeworCQkJZmluZFNjcm9sbFBhbmUoY29tcG9uZW50LCB4LCB5LCBib3VuZHMpOworCQl9CisJCWVsc2UgaWYgKCJ0cmVlIiA9PSBjbGFzc25hbWUpIHsKKwkJCWZpbmRTY3JvbGxQYW5lKGNvbXBvbmVudCwgeCwgeSwgYm91bmRzKTsKKwkJfQorCQllbHNlIGlmICgibWVudWJhciIgPT0gY2xhc3NuYW1lKSB7CisJCQlmb3IgKE9iamVjdCBtZW51ID0gZ2V0KGNvbXBvbmVudCwgIm1lbnUiKTsKKwkJCQkJbWVudSAhPSBudWxsOyBtZW51ID0gZ2V0KG1lbnUsICI6bmV4dCIpKSB7CisJCQkJPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ1JlY3RhbmdsZSciPlJlY3RhbmdsZTwvZXJyb3I+IHIgPSBnZXRSZWN0YW5nbGUobWVudSwgImJvdW5kcyIpOworCQkJCWlmICgoeCA+PSByLjxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICd4JyI+eDwvZXJyb3I+KSAmJiAoeCA8IHIuPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ3gnIj54PC9lcnJvcj4gKyByLjxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICd3aWR0aCciPndpZHRoPC9lcnJvcj4pKSB7CisJCQkJCWluc2lkZXBhcnQgPSBtZW51OyBicmVhazsKKwkJCQl9CisJCQl9CisJCX0KKwkJZWxzZSBpZiAoInBvcHVwbWVudSIgPT0gY2xhc3NuYW1lKSB7CisJCQlmb3IgKE9iamVjdCBtZW51ID0gZ2V0KGdldChjb21wb25lbnQsICJtZW51IiksICJtZW51Iik7CisJCQkJCW1lbnUgIT0gbnVsbDsgbWVudSA9IGdldChtZW51LCAiOm5leHQiKSkgeworCQkJCTxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICdSZWN0YW5nbGUnIj5SZWN0YW5nbGU8L2Vycm9yPiByID0gZ2V0UmVjdGFuZ2xlKG1lbnUsICJib3VuZHMiKTsKKwkJCQlpZiAoKHkgPj0gci48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAneSciPnk8L2Vycm9yPikgJiYgKHkgPCByLjxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICd5JyI+eTwvZXJyb3I+ICsgci48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAnaGVpZ2h0JyI+aGVpZ2h0PC9lcnJvcj4pKSB7CisJCQkJCWluc2lkZXBhcnQgPSBtZW51OyBicmVhazsKKwkJCQl9CisJCQl9CisJCX0KKwkJcmV0dXJuIHRydWU7CisJfQorCisJLyoqCisJICoKKwkgKi8KKwlwcml2YXRlIGJvb2xlYW4gZmluZFNjcm9sbFBhbmUoT2JqZWN0IGNvbXBvbmVudCwKKwkJCWludCB4LCBpbnQgeSwgPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ1JlY3RhbmdsZSciPlJlY3RhbmdsZTwvZXJyb3I+IGJvdW5kcykgeworCQk8ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAnUmVjdGFuZ2xlJyI+UmVjdGFuZ2xlPC9lcnJvcj4gcG9ydCA9IGdldFJlY3RhbmdsZShjb21wb25lbnQsICI6cG9ydCIpOworCQlpZiAoKHggPCBwb3J0LjxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICd4JyI+eDwvZXJyb3I+KSB8fCAoeSA8IHBvcnQuPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ3knIj55PC9lcnJvcj4pIHx8CisJCQkJKCh4ID49IHBvcnQuPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ3gnIj54PC9lcnJvcj4gKyBwb3J0LjxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICd3aWR0aCciPndpZHRoPC9lcnJvcj4pICYmICh5ID49IHBvcnQuPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ3knIj55PC9lcnJvcj4gKyBwb3J0LjxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICdoZWlnaHQnIj5oZWlnaHQ8L2Vycm9yPikpKSB7CisJCQlpbnNpZGVwYXJ0ID0gImNvcm5lciI7CisJCX0KKwkJZWxzZSBpZiAoKHggPj0gcG9ydC48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAneCciPng8L2Vycm9yPiArIHBvcnQuPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ3dpZHRoJyI+d2lkdGg8L2Vycm9yPikgfHwgKHkgPj0gcG9ydC48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAneSciPnk8L2Vycm9yPiArIHBvcnQuPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ2hlaWdodCciPmhlaWdodDwvZXJyb3I+KSkgeworCQkJYm9vbGVhbiBob3Jpem9udGFsID0gKHkgPj0gcG9ydC48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAneSciPnk8L2Vycm9yPiArIHBvcnQuPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ2hlaWdodCciPmhlaWdodDwvZXJyb3I+KTsKKwkJCWludCBwID0gaG9yaXpvbnRhbCA/ICh4IC0gcG9ydC48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAneCciPng8L2Vycm9yPikgOiAoeSAtIHBvcnQuPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ3knIj55PC9lcnJvcj4pOworCQkJaW50IHBvcnRzaXplID0gaG9yaXpvbnRhbCA/IHBvcnQuPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ3dpZHRoJyI+d2lkdGg8L2Vycm9yPiA6IHBvcnQuPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ2hlaWdodCciPmhlaWdodDwvZXJyb3I+OworCQkJaW50IGJ1dHRvbiA9IE1hdGgubWluKGJsb2NrLCBwb3J0c2l6ZSAvIDIpOworCQkJaWYgKHAgPCBidXR0b24pIHsKKwkJCQlpbnNpZGVwYXJ0ID0gaG9yaXpvbnRhbCA/ICJsZWZ0IiA6ICJ1cCI7CisJCQl9CisJCQllbHNlIGlmIChwID49IHBvcnRzaXplIC0gYnV0dG9uKSB7CisJCQkJaW5zaWRlcGFydCA9IGhvcml6b250YWwgPyAicmlnaHQiIDogImRvd24iOworCQkJfQorCQkJZWxzZSB7CisJCQkJPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ1JlY3RhbmdsZSciPlJlY3RhbmdsZTwvZXJyb3I+IHZpZXcgPSBnZXRSZWN0YW5nbGUoY29tcG9uZW50LCAiOnZpZXciKTsKKwkJCQlpbnQgdmlld3AgPSBob3Jpem9udGFsID8gdmlldy48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAneCciPng8L2Vycm9yPiA6IHZpZXcuPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ3knIj55PC9lcnJvcj47CisJCQkJaW50IHZpZXdzaXplID0gaG9yaXpvbnRhbCA/IHZpZXcuPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ3dpZHRoJyI+d2lkdGg8L2Vycm9yPiA6IHZpZXcuPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ2hlaWdodCciPmhlaWdodDwvZXJyb3I+OworCQkJCWludCB0cmFjayA9IHBvcnRzaXplIC0gKDIgKiBidXR0b24pOworCQkJCWludCBrbm9iID0gTWF0aC5taW4odHJhY2ssCisJCQkJCU1hdGgubWF4KHRyYWNrICogKHBvcnRzaXplIC0gMikgLyB2aWV3c2l6ZSwgNikpOworCQkJCWludCBkZWNyZWFzZSA9IHZpZXdwICogKHRyYWNrIC0ga25vYikgLyAodmlld3NpemUgLSBwb3J0c2l6ZSArIDIpOworCQkJCWlmIChwIDwgYnV0dG9uICsgZGVjcmVhc2UpIHsKKwkJCQkJaW5zaWRlcGFydCA9IGhvcml6b250YWwgPyAibGVmdHRyYWNrIiA6ICJ1cHRyYWNrIjsKKwkJCQl9CisJCQkJZWxzZSBpZiAocCA8IGJ1dHRvbiArIGRlY3JlYXNlICsga25vYikgeworCQkJCQlpbnNpZGVwYXJ0ID0gaG9yaXpvbnRhbCA/ICJoa25vYiIgOiAidmtub2IiOworCQkJCX0KKwkJCQllbHNlIHsKKwkJCQkJaW5zaWRlcGFydCA9IGhvcml6b250YWwgPyAicmlnaHR0cmFjayIgOiAiZG93bnRyYWNrIjsKKwkJCQl9CisJCQl9CisJCX0KKwkJZWxzZSB7IHJldHVybiBmYWxzZTsgfQorCQlyZXR1cm4gdHJ1ZTsKKwl9CisKKwkvKioKKwkgKgorCSAqLworCXByaXZhdGUgdm9pZCByZXBhaW50KE9iamVjdCBjb21wb25lbnQsIE9iamVjdCBjbGFzc25hbWUsIE9iamVjdCBwYXJ0KSB7CisJCTxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICdSZWN0YW5nbGUnIj5SZWN0YW5nbGU8L2Vycm9yPiBiID0gZ2V0UmVjdGFuZ2xlKGNvbXBvbmVudCwgImJvdW5kcyIpOworCQlpZiAoKGNsYXNzbmFtZSA9PSAiY29tYm9ib3giKSB8fCAoY2xhc3NuYW1lID09ICJzcGluYm94IikpIHsKKwkJCWJvb2xlYW4gZG93biA9IChwYXJ0ID09ICJ1cCIpIHx8IChwYXJ0ID09ICJkb3duIik7IC8vIGVsc2UgdGV4dAorCQkJcmVwYWludDxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgbWV0aG9kICdyZXBhaW50KGphdmEubGFuZy5PYmplY3QsID8sID8sIGludCwgPyknIj4oY29tcG9uZW50LCBkb3duID8gKGIuPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ3gnIj54PC9lcnJvcj4gKyBiLjxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICd3aWR0aCciPndpZHRoPC9lcnJvcj4gLSBibG9jaykgOiBiLjxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICd4JyI+eDwvZXJyb3I+LCBiLjxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICd5JyI+eTwvZXJyb3I+LAorCQkJCWRvd24gPyBibG9jayA6IChiLjxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICd3aWR0aCciPndpZHRoPC9lcnJvcj4gLSBibG9jayksIGIuPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ2hlaWdodCciPmhlaWdodDwvZXJyb3I+KTwvZXJyb3I+OworCQl9CisJCS8vZWxzZSBpZiAoY2xhc3NuYW1lID09ICJkaWFsb2ciKSB7fQorCQkJLy9pbnQgdGl0bGVoZWlnaHQgPSBnZXRJbnRlZ2VyKGNvbXBvbmVudCwgInRpdGxlaGVpZ2h0IiwgMCk7CisJCS8vZWxzZSBpZiAoY2xhc3NuYW1lID09ICJzcGxpdHBhbmUiKSB7fQorCQllbHNlIGlmICgoY2xhc3NuYW1lID09ICJ0YWJiZWRwYW5lIikgfHwKKwkJCQkoY2xhc3NuYW1lID09ICJtZW51YmFyIikgfHwgKGNsYXNzbmFtZSA9PSAicG9wdXBtZW51IikpIHsKKwkJCTxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICdSZWN0YW5nbGUnIj5SZWN0YW5nbGU8L2Vycm9yPiByID0gZ2V0UmVjdGFuZ2xlKHBhcnQsICJib3VuZHMiKTsKKwkJCXJlcGFpbnQ8ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIG1ldGhvZCAncmVwYWludChqYXZhLmxhbmcuT2JqZWN0LCA/LCA/LCA/LCA/KSciPihjb21wb25lbnQsIGIuPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ3gnIj54PC9lcnJvcj4gKyByLjxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICd4JyI+eDwvZXJyb3I+LCBiLjxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICd5JyI+eTwvZXJyb3I+ICsgci48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAneSciPnk8L2Vycm9yPiwKKwkJCQkoY2xhc3NuYW1lID09ICJwb3B1cG1lbnUiKSA/IGIuPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ3dpZHRoJyI+d2lkdGg8L2Vycm9yPiA6IHIuPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ3dpZHRoJyI+d2lkdGg8L2Vycm9yPiwgci48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAnaGVpZ2h0JyI+aGVpZ2h0PC9lcnJvcj4pPC9lcnJvcj47CisJCX0KKwkJZWxzZSAvL2lmICgoY2xhc3NuYW1lID09ICJjb21ib2xpc3QiKSB8fCAoY2xhc3NuYW1lID09ICJ0ZXh0YXJlYSIpIHx8CisJCQkJey8vKGNsYXNzbmFtZSA9PSAibGlzdCIpIHx8IChjbGFzc25hbWUgPT0gInRhYmxlIikgfHwgKGNsYXNzbmFtZSA9PSAidHJlZSIpKSB7CisJCQk8ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAnUmVjdGFuZ2xlJyI+UmVjdGFuZ2xlPC9lcnJvcj4gcG9ydCA9IGdldFJlY3RhbmdsZShjb21wb25lbnQsICI6cG9ydCIpOworCQkJaWYgKHBhcnQgPT0gImxlZnQiKSB7CisJCQkJcmVwYWludDxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgbWV0aG9kICdyZXBhaW50KGphdmEubGFuZy5PYmplY3QsID8sID8sIGludCwgaW50KSciPihjb21wb25lbnQsIGIuPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ3gnIj54PC9lcnJvcj4gKyBwb3J0LjxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICd4JyI+eDwvZXJyb3I+LCBiLjxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICd5JyI+eTwvZXJyb3I+ICsgYi48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAnaGVpZ2h0JyI+aGVpZ2h0PC9lcnJvcj4gLSBibG9jaywgYmxvY2ssIGJsb2NrKTwvZXJyb3I+OworCQkJfQorCQkJZWxzZSBpZiAocGFydCA9PSAicmlnaHQiKSB7CisJCQkJcmVwYWludDxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgbWV0aG9kICdyZXBhaW50KGphdmEubGFuZy5PYmplY3QsID8sID8sIGludCwgaW50KSciPihjb21wb25lbnQsIGIuPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ3gnIj54PC9lcnJvcj4gKyBwb3J0LjxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICd4JyI+eDwvZXJyb3I+ICsgcG9ydC48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAnd2lkdGgnIj53aWR0aDwvZXJyb3I+IC0gYmxvY2ssIGIuPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ3knIj55PC9lcnJvcj4gKyBiLjxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICdoZWlnaHQnIj5oZWlnaHQ8L2Vycm9yPiAtIGJsb2NrLCBibG9jaywgYmxvY2spPC9lcnJvcj47CisJCQl9CisJCQllbHNlIGlmIChwYXJ0ID09ICJ1cCIpIHsKKwkJCQlyZXBhaW50PGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBtZXRob2QgJ3JlcGFpbnQoamF2YS5sYW5nLk9iamVjdCwgPywgPywgaW50LCBpbnQpJyI+KGNvbXBvbmVudCwgYi48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAneCciPng8L2Vycm9yPiArIGIuPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ3dpZHRoJyI+d2lkdGg8L2Vycm9yPiAtIGJsb2NrLCBiLjxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICd5JyI+eTwvZXJyb3I+ICsgcG9ydC48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAneSciPnk8L2Vycm9yPiwgYmxvY2ssIGJsb2NrKTwvZXJyb3I+OworCQkJfQorCQkJZWxzZSBpZiAocGFydCA9PSAiZG93biIpIHsKKwkJCQlyZXBhaW50PGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBtZXRob2QgJ3JlcGFpbnQoamF2YS5sYW5nLk9iamVjdCwgPywgPywgaW50LCBpbnQpJyI+KGNvbXBvbmVudCwgYi48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAneCciPng8L2Vycm9yPiArIGIuPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ3dpZHRoJyI+d2lkdGg8L2Vycm9yPiAtIGJsb2NrLCBiLjxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICd5JyI+eTwvZXJyb3I+ICsgcG9ydC48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAneSciPnk8L2Vycm9yPiArIHBvcnQuPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ2hlaWdodCciPmhlaWdodDwvZXJyb3I+IC0gYmxvY2ssIGJsb2NrLCBibG9jayk8L2Vycm9yPjsKKwkJCX0KKwkJCWVsc2UgaWYgKHBhcnQgPT0gImhvcml6b250YWwiKSB7IC8vIGhvcml6b250YWx5IGNlbnRlciBwYXJ0CisJCQkJcmVwYWludDxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgbWV0aG9kICdyZXBhaW50KGphdmEubGFuZy5PYmplY3QsID8sID8sID8sID8pJyI+KGNvbXBvbmVudCwgYi48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAneCciPng8L2Vycm9yPiArIHBvcnQuPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ3gnIj54PC9lcnJvcj4sIGIuPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ3knIj55PC9lcnJvcj4sIHBvcnQuPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ3dpZHRoJyI+d2lkdGg8L2Vycm9yPiwgYi48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAnaGVpZ2h0JyI+aGVpZ2h0PC9lcnJvcj4pPC9lcnJvcj47CisJCQl9CisJCQllbHNlIGlmIChwYXJ0ID09ICJ2ZXJ0aWNhbCIpIHsKKwkJCQlyZXBhaW50PGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBtZXRob2QgJ3JlcGFpbnQoamF2YS5sYW5nLk9iamVjdCwgPywgPywgPywgPyknIj4oY29tcG9uZW50LCBiLjxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICd4JyI+eDwvZXJyb3I+LCBiLjxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICd5JyI+eTwvZXJyb3I+ICsgcG9ydC48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAneSciPnk8L2Vycm9yPiwgYi48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAnd2lkdGgnIj53aWR0aDwvZXJyb3I+LCBwb3J0LjxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICdoZWlnaHQnIj5oZWlnaHQ8L2Vycm9yPik8L2Vycm9yPjsKKwkJCX0KKwkJCWVsc2UgaWYgKHBhcnQgPT0gInRleHQiKSB7IC8vdGV4dGFyZWEKKwkJCQlyZXBhaW50PGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBtZXRob2QgJ3JlcGFpbnQoamF2YS5sYW5nLk9iamVjdCwgPywgPywgPywgPyknIj4oY29tcG9uZW50LCBiLjxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICd4JyI+eDwvZXJyb3I+ICsgcG9ydC48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAneCciPng8L2Vycm9yPiwgYi48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAneSciPnk8L2Vycm9yPiArIHBvcnQuPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ3knIj55PC9lcnJvcj4sIHBvcnQuPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ3dpZHRoJyI+d2lkdGg8L2Vycm9yPiwgcG9ydC48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAnaGVpZ2h0JyI+aGVpZ2h0PC9lcnJvcj4pPC9lcnJvcj47CisJCQl9CisJCQllbHNlIHsKKwkJCQk8ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAnUmVjdGFuZ2xlJyI+UmVjdGFuZ2xlPC9lcnJvcj4gdmlldyA9IGdldFJlY3RhbmdsZShjb21wb25lbnQsICI6dmlldyIpOworCQkJCTxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICdSZWN0YW5nbGUnIj5SZWN0YW5nbGU8L2Vycm9yPiByID0gZ2V0UmVjdGFuZ2xlKHBhcnQsICJib3VuZHMiKTsKKwkJCQlpZiAoKHIuPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ3knIj55PC9lcnJvcj4gKyByLjxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICdoZWlnaHQnIj5oZWlnaHQ8L2Vycm9yPiA+PSB2aWV3LjxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICd5JyI+eTwvZXJyb3I+KSAmJiAoci48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAneSciPnk8L2Vycm9yPiA8PSB2aWV3LjxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICd5JyI+eTwvZXJyb3I+ICsgcG9ydC48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAnaGVpZ2h0JyI+aGVpZ2h0PC9lcnJvcj4pKSB7CisJCQkJCXJlcGFpbnQ8ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIG1ldGhvZCAncmVwYWludChqYXZhLmxhbmcuT2JqZWN0LCA/LCA/LCA/LCA/KSciPihjb21wb25lbnQsIGIuPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ3gnIj54PC9lcnJvcj4gKyBwb3J0LjxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICd4JyI+eDwvZXJyb3I+LCBiLjxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICd5JyI+eTwvZXJyb3I+ICsgcG9ydC48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAneSciPnk8L2Vycm9yPiAtIHZpZXcuPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ3knIj55PC9lcnJvcj4gKyAxICsgci48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAneSciPnk8L2Vycm9yPiwKKwkJCQkJCXBvcnQuPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ3dpZHRoJyI+d2lkdGg8L2Vycm9yPiwgci48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAnaGVpZ2h0JyI+aGVpZ2h0PC9lcnJvcj4pPC9lcnJvcj47CisJCQkJCS8vPyBuZWVkIGN1dCBpdGVtIHJlY3RhbmdsZSBhYm92ZS9iZWxsb3cgdmlld3BvcnQKKwkJCQl9CisJCQl9CisJCX0KKwl9CisKKwkvKioKKwkgKgorCSAqLworCXByaXZhdGUgdm9pZCB2YWxpZGF0ZShPYmplY3QgY29tcG9uZW50KSB7CisJCXJlcGFpbnQoY29tcG9uZW50KTsKKwkJPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ1JlY3RhbmdsZSciPlJlY3RhbmdsZTwvZXJyb3I+IGJvdW5kcyA9IGdldFJlY3RhbmdsZShjb21wb25lbnQsICJib3VuZHMiKTsKKwkJYm91bmRzLjxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICd3aWR0aCciPndpZHRoPC9lcnJvcj4gPSAtMSAqIE1hdGguYWJzPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBtZXRob2QgJ2Ficyg/KSciPihib3VuZHMuPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ3dpZHRoJyI+d2lkdGg8L2Vycm9yPik8L2Vycm9yPjsKKwl9CisKKwkvKioKKwkgKgorCSAqLworCXByaXZhdGUgdm9pZCByZXBhaW50KE9iamVjdCBjb21wb25lbnQpIHsKKwkJPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ1JlY3RhbmdsZSciPlJlY3RhbmdsZTwvZXJyb3I+IGJvdW5kcyA9IGdldFJlY3RhbmdsZShjb21wb25lbnQsICJib3VuZHMiKTsKKwkJaWYgKGJvdW5kcyAhPSBudWxsKSB7CisJCQlyZXBhaW50PGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBtZXRob2QgJ3JlcGFpbnQoamF2YS5sYW5nLk9iamVjdCwgPywgPywgPywgPyknIj4oY29tcG9uZW50LCBib3VuZHMuPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ3gnIj54PC9lcnJvcj4sIGJvdW5kcy48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAneSciPnk8L2Vycm9yPiwgYm91bmRzLjxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICd3aWR0aCciPndpZHRoPC9lcnJvcj4sIGJvdW5kcy48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAnaGVpZ2h0JyI+aGVpZ2h0PC9lcnJvcj4pPC9lcnJvcj47CisJCX0KKwl9CisKKwkvKioKKwkgKgorCSAqLworCXByaXZhdGUgdm9pZCByZXBhaW50KE9iamVjdCBjb21wb25lbnQsIGludCB4LCBpbnQgeSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KSB7CisJCXdoaWxlICgoY29tcG9uZW50ID0gZ2V0UGFyZW50KGNvbXBvbmVudCkpICE9IG51bGwpIHsKKwkJCTxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICdSZWN0YW5nbGUnIj5SZWN0YW5nbGU8L2Vycm9yPiBib3VuZHMgPSBnZXRSZWN0YW5nbGUoY29tcG9uZW50LCAiYm91bmRzIik7CisJCQl4ICs9IGJvdW5kcy48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAneCciPng8L2Vycm9yPjsKKwkJCXkgKz0gYm91bmRzLjxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICd5JyI+eTwvZXJyb3I+OworCQl9CisJCXJlcGFpbnQoeCwgeSwgd2lkdGgsIGhlaWdodCk7CisJfQorCisJLypwcml2YXRlIHZvaWQgY2xpcChHcmFwaGljcyBnLAorCQkJUmVjdGFuZ2xlIGNsaXAsIGludCB4LCBpbnQgeSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KSB7CisJCWludCB4MSA9IE1hdGgubWF4KGNsaXAueCwgeCk7CisJCWludCB5MSA9IE1hdGgubWF4KGNsaXAueSwgeSk7CisJCWludCB4MiA9IE1hdGgubWluKGNsaXAueCArIGNsaXAud2lkdGgsIHggKyB3aWR0aCk7CisJCWludCB5MiA9IE1hdGgubWluKGNsaXAueSArIGNsaXAuaGVpZ2h0LCB5ICsgaGVpZ2h0KTsKKwkJZy5zZXRDbGlwKHgxLCB5MSwgeDIgLSB4MSwgeTIgLSB5MSk7CisJfSovCisKKwkvKioKKwkgKgorCSAqLworCXB1YmxpYyBib29sZWFuIHJlcXVlc3RGb2N1cyhPYmplY3QgY29tcG9uZW50KSB7CisJCWlmIChjaGVja0ZvY3VzYWJsZShjb21wb25lbnQsIHRydWUpKSB7CisJCQlzZXRGb2N1cyhjb21wb25lbnQpOyByZXR1cm4gdHJ1ZTsKKwkJfQorCQlyZXR1cm4gZmFsc2U7CisJfQorCisJLyoqCisJICoKKwkgKi8KKwlwcml2YXRlIGJvb2xlYW4gc2V0Rm9jdXMoT2JqZWN0IGNvbXBvbmVudCkgeworCQlpZiAoIWZvY3VzaW5zaWRlKSB7IC8vamF2YQorCQkJcmVxdWVzdEZvY3VzKCk7IC8vamF2YQorCQl9IC8vamF2YQorCQlpZiAoZm9jdXNvd25lciAhPSBjb21wb25lbnQpIHsKKwkJCU9iamVjdCBmb2N1c2VkID0gZm9jdXNvd25lcjsKKwkJCWZvY3Vzb3duZXIgPSBjb21wb25lbnQ7CisJCQlpZiAoZm9jdXNlZCAhPSBudWxsKSB7CisJCQkJLy9tb3VzZUV2ZW50KG51bGwsIEZvY3VzRXZlbnQuRk9DVVNfTE9TVCwgZm9jdXNlZCwgbnVsbCwgbnVsbCk7CisJCQkJcmVwYWludChmb2N1c2VkKTsKKwkJCQkvL2ZvY3VzR2FpbmVkKGNvbXBvbmVudCk7CisJCQl9CisJCQlyZXR1cm4gdHJ1ZTsKKwkJfQorCQlyZXR1cm4gZmFsc2U7CisJfQorCisJLyoqCisJICogQHJldHVybiBuZXh0IGZvY3VzYWJsZSBjb21wb25lbnQgaXMgZm91bmQgKG5vdCB0aGUgZmlyc3Qgb2YgdGhlIGRlc2t0b3AvZGlhbG9nKQorCSAqLworCXByaXZhdGUgYm9vbGVhbiBzZXROZXh0Rm9jdXNhYmxlKE9iamVjdCBjdXJyZW50LCBib29sZWFuIG91dGdvKSB7CisJCWJvb2xlYW4gY29uc3VtZWQgPSB0cnVlOworCQlmb3IgKE9iamVjdCBuZXh0ID0gbnVsbCwgY29tcG9uZW50ID0gY3VycmVudDsgdHJ1ZTsgY29tcG9uZW50ID0gbmV4dCkgeworCQkJbmV4dCA9IGdldChjb21wb25lbnQsICJjb21wb25lbnQiKTsgLy8gY2hlY2sgZmlyc3Qgc3ViY29tcG9uZW50CisJCQlpZiAobmV4dCA9PSBudWxsKSB7IG5leHQgPSBnZXQoY29tcG9uZW50LCAiOm5leHQiKTsgfSAvLyBjaGVjayBuZXh0IGNvbXBvbmVudAorCQkJd2hpbGUgKG5leHQgPT0gbnVsbCkgeyAvLyBmaW5kIHRoZSBuZXh0IG9mIHRoZSBwYXJlbnRzLCBvciB0aGUgdG9wbW9zdAorCQkJCWNvbXBvbmVudCA9IGdldFBhcmVudChjb21wb25lbnQpOyAvLyBjdXJyZW50IGlzIG5vdCBvbiB0aGUgZGVza3RvcAorCQkJCWlmIChjb21wb25lbnQgPT0gbnVsbCkgeyByZXR1cm4gZmFsc2U7IH0KKwkJCQlpZiAoKGNvbXBvbmVudCA9PSBjb250ZW50KSB8fCAoKGdldENsYXNzKGNvbXBvbmVudCkgPT0gImRpYWxvZyIpICYmCisJCQkJCQkoIW91dGdvICB8fCBnZXRCb29sZWFuKGNvbXBvbmVudCwgIm1vZGFsIiwgZmFsc2UpKSkpIHsKKwkJCQkJY29uc3VtZWQgPSBmYWxzZTsgLy8gZmluZCBuZXh0IGZvY3VzYWJsZSBidXQgZG9lcyBub3QgY29uc3VtZSBldmVudAorCQkJCQluZXh0ID0gY29tcG9uZW50OyAvLyB0aGUgdG9wbW9zdCAoZGVza3RvcCBvciBtb2RhbCBkaWFsb2cpCisJCQkJfQorCQkJCWVsc2UgeworCQkJCQluZXh0ID0gZ2V0KGNvbXBvbmVudCwgIjpuZXh0Iik7CisJCQkJfQorCQkJfQorCQkJaWYgKG5leHQgPT0gY3VycmVudCkgeyByZXR1cm4gZmFsc2U7IH0gLy8gb25lIGZ1Y3VzYWJsZSwgbm8gbG9vcAorCQkJaWYgKGNoZWNrRm9jdXNhYmxlKG5leHQsIGZhbHNlKSkgeworCQkJCXNldEZvY3VzKG5leHQpOworCQkJCXJldHVybiBjb25zdW1lZDsKKwkJCX0KKwkJfQorCX0KKworCS8vamF2YT4KKwkvKioKKwkgKiBAcmV0dXJuIHByZXZpb3VzIGZvY3VzYWJsZSBjb21wb25lbnQgaXMgZm91bmQgKG5vdCB0aGUgbGFzdCBvZiB0aGUgZGVza3RvcC9kaWFsb2cpCisJICovCisJcHJpdmF0ZSBib29sZWFuIHNldFByZXZpb3VzRm9jdXNhYmxlKE9iamVjdCBjb21wb25lbnQsIGJvb2xlYW4gb3V0Z28pIHsKKwkJZm9yIChpbnQgaSA9IDA7IGkgPCAyOyBpKyspIHsgLy8gMCBpcyBiYWNrd2FyZCBkaXJlY3Rpb24KKwkJCU9iamVjdCBwcmV2aW91cyA9IGdldFByZXZpb3VzRm9jdXNhYmxlKGNvbXBvbmVudCwgbnVsbCwgdHJ1ZSwgZmFsc2UsIChpID09IDApLCBvdXRnbyk7CisJCQlpZiAocHJldmlvdXMgIT0gbnVsbCkgeworCQkJCXNldEZvY3VzKHByZXZpb3VzKTsKKwkJCQlyZXR1cm4gKGkgPT0gMCk7CisJCQl9CisJCX0KKwkJcmV0dXJuIGZhbHNlOworCX0KKworCS8qKgorCSAqIEZvciB0aGUgc3RhcnRpbmcgY29tcG9uZW50IHNlYXJjaCBpdHMgcGFyZW50IGRpcmVjdGlvbiBmb3IgYSBmb2N1c2FibGUgY29tcG9uZW50LCBhbmQgdGhlbgorCSAqIGl0cyBuZXh0IGNvbXBvbmVudCAoaWYgbm90IHNlYXJjaCBiYWNrd2FyZCBmcm9tIHRoZSBjb21wb25lbnQpLjxicj4KKwkgKiBGb3IgaXRzIHBhcmVudCBjb21wb25lbnRzIGNoZWNrIGl0cyBmaXJzdCBjb21wb25lbnQsIHRoZSBjdXJyZW50IG9uZSwgYW5kIGl0cyBwYXJlbnQgZGlyZWN0aW9uCisJICogKGJhY2t3YXJkIHNlYXJjaCksIG9yIGl0cyBwYXJlbnQsIHRoZW4gbmV4dCBjb21wb25lbnQgKGZvcndhcmQgZGlyZWN0aW9uKS48YnI+CisJICogRm9yIHRoZSByZXN0IGNvbXBvbmVudHMgY2hlY2sgdGhlIG5leHQsIHRoZW4gdGhlIGZpcnN0IHN1YmNvbXBvbmVudCBkaXJlY3Rpb24sIGFuZCBmaW5hbGx5CisJICogY2hlY2sgd2hldGhlciB0aGUgY29tcG9uZW50IGlzIGZvY3VzYWJsZS4KKwkgKi8KKwlwcml2YXRlIE9iamVjdCBnZXRQcmV2aW91c0ZvY3VzYWJsZShPYmplY3QgY29tcG9uZW50LAorCQkJT2JqZWN0IGJsb2NrLCBib29sZWFuIHN0YXJ0LCBib29sZWFuIHVwd2FyZCwgYm9vbGVhbiBiYWNrd2FyZCwgYm9vbGVhbiBvdXRnbykgeworCQlPYmplY3QgcHJldmlvdXMgPSBudWxsOworCQlpZiAoKGNvbXBvbmVudCAhPSBudWxsKSAmJiAoY29tcG9uZW50ICE9IGJsb2NrKSkgeworCQkJYm9vbGVhbiBnbyA9ICgoZ2V0Q2xhc3MoY29tcG9uZW50KSAhPSAiZGlhbG9nIikgfHwKKwkJCQkob3V0Z28gJiYgIWdldEJvb2xlYW4oY29tcG9uZW50LCAibW9kYWwiLCBmYWxzZSkpKTsKKwkJCWlmICghc3RhcnQgJiYgIXVwd2FyZCAmJiBnbykgeworCQkJCXByZXZpb3VzID0gZ2V0UHJldmlvdXNGb2N1c2FibGUoZ2V0KGNvbXBvbmVudCwgIjpuZXh0IiksIGJsb2NrLCBmYWxzZSwgZmFsc2UsIGJhY2t3YXJkLCBvdXRnbyk7CisJCQl9CisJCQlpZiAoKHByZXZpb3VzID09IG51bGwpICYmICgodXB3YXJkICYmIGJhY2t3YXJkKSB8fCAoIXN0YXJ0ICYmICF1cHdhcmQpKSkgeworCQkJCXByZXZpb3VzID0gZ2V0UHJldmlvdXNGb2N1c2FibGUoZ2V0KGNvbXBvbmVudCwgImNvbXBvbmVudCIpLCBibG9jaywgZmFsc2UsIGZhbHNlLCBiYWNrd2FyZCwgb3V0Z28pOworCQkJCWlmICgocHJldmlvdXMgPT0gbnVsbCkgJiYgY2hlY2tGb2N1c2FibGUoY29tcG9uZW50LCBmYWxzZSkpIHsKKwkJCQkJcHJldmlvdXMgPSBjb21wb25lbnQ7CisJCQkJfQorCQkJfQorCQkJaWYgKChwcmV2aW91cyA9PSBudWxsKSAmJiAoc3RhcnQgfHwgdXB3YXJkKSAmJiBnbykgeworCQkJCXByZXZpb3VzID0gZ2V0UHJldmlvdXNGb2N1c2FibGUoZ2V0UGFyZW50KGNvbXBvbmVudCksIGNvbXBvbmVudCwgZmFsc2UsIHRydWUsIGJhY2t3YXJkLCBvdXRnbyk7CisJCQl9CisJCQlpZiAoKHByZXZpb3VzID09IG51bGwpICYmIChzdGFydCB8fCB1cHdhcmQpICYmICFiYWNrd2FyZCAmJiBnbykgeworCQkJCXByZXZpb3VzID0gZ2V0UHJldmlvdXNGb2N1c2FibGUoZ2V0KGNvbXBvbmVudCwgIjpuZXh0IiksIGJsb2NrLCBmYWxzZSwgZmFsc2UsIGJhY2t3YXJkLCBvdXRnbyk7CisJCQl9CisJCX0KKwkJcmV0dXJuIHByZXZpb3VzOworCX0KKwkvLzxqYXZhCisKKwkvKioKKwkgKgorCSAqLworCXByaXZhdGUgYm9vbGVhbiBjaGVja0ZvY3VzYWJsZShPYmplY3QgY29tcG9uZW50LCBib29sZWFuIGZvcmNlZCkgeworCQlTdHJpbmcgY2xhc3NuYW1lID0gZ2V0Q2xhc3MoY29tcG9uZW50KTsKKwkJLy9taWRwIGZvcmNlZD10cnVlOworCQlpZiAoKGNsYXNzbmFtZSA9PSAiYnV0dG9uIikgfHwgKGNsYXNzbmFtZSA9PSAiY2hlY2tib3giKSB8fAorCQkJCShjbGFzc25hbWUgPT0gImNvbWJvYm94IikgfHwgKGNsYXNzbmFtZSA9PSAidGV4dGZpZWxkIikgfHwKKwkJCQkoY2xhc3NuYW1lID09ICJwYXNzd29yZGZpZWxkIikgfHwgKGNsYXNzbmFtZSA9PSAidGV4dGFyZWEiKSB8fAorCQkJCShjbGFzc25hbWUgPT0gInNwaW5ib3giKSB8fCAoY2xhc3NuYW1lID09ICJzbGlkZXIiKSB8fAorCQkJCShjbGFzc25hbWUgPT0gImxpc3QiKSB8fCAoY2xhc3NuYW1lID09ICJ0YWJsZSIpIHx8IChjbGFzc25hbWUgPT0gInRyZWUiKSB8fAorCQkJCShjbGFzc25hbWUgPT0gInRhYmJlZHBhbmUiKSB8fCAoZm9yY2VkICYmIChjbGFzc25hbWUgPT0gInNwbGl0cGFuZSIpKSkgeworCQkJZm9yIChPYmplY3QgY29tcCA9IGNvbXBvbmVudDsgY29tcCAhPSBudWxsOykgeworCQkJCWlmICghZ2V0Qm9vbGVhbihjb21wLCAiZW5hYmxlZCIsIHRydWUpIHx8ICFnZXRCb29sZWFuKGNvbXAsICJ2aXNpYmxlIiwgdHJ1ZSkpIHsKKwkJCQkJcmV0dXJuIGZhbHNlOworCQkJCX0KKwkJCQlPYmplY3QgcGFyZW50ID0gZ2V0UGFyZW50KGNvbXApOworCQkJCWlmICgoZ2V0Q2xhc3MocGFyZW50KSA9PSAidGFiYmVkcGFuZSIpICYmIChnZXRJdGVtSW1wbChwYXJlbnQsCisJCQkJCSJjb21wb25lbnQiLCBnZXRJbnRlZ2VyKHBhcmVudCwgInNlbGVjdGVkIiwgMCkpICE9IGNvbXApKSB7IHJldHVybiBmYWxzZTsgfQorCQkJCWNvbXAgPSBwYXJlbnQ7CisJCQl9CisJCQlyZXR1cm4gdHJ1ZTsKKwkJfQorCQlyZXR1cm4gZmFsc2U7CisJfQorCisJLyppZiAoY2xpcGFyZWEgPT0gbnVsbCkgeyBhZGQoY2xpcGFyZWEgPSBuZXcgVGV4dEFyZWEoKSk7IH0KKwljbGlwYXJlYS5zZXRUZXh0KGNvbnRlbnQpOworCWNsaXBhcmVhLnNlbGVjdEFsbCgpOworCWNsaXBhcmVhLmRpc3BhdGNoRXZlbnQobmV3IEtleUV2ZW50KHRoaXMsIEtleUV2ZW50LktFWV9UWVBFRCwgMEwsIEtleUV2ZW50LkNUUkxfTUFTSywgMCwgKGNoYXIpIDMpKTsKKwljbGlwYXJlYS5zZWxlY3RBbGwoKTsKKworCWlmIChjbGlwYXJlYSA9PSBudWxsKSB7IGFkZChjbGlwYXJlYSA9IG5ldyBUZXh0QXJlYSgpKTsgfQorCWNsaXBhcmVhLmRpc3BhdGNoRXZlbnQobmV3IEtleUV2ZW50KHRoaXMsIEtleUV2ZW50LktFWV9UWVBFRCwgMEwsIEtleUV2ZW50LkNUUkxfTUFTSywgMCwgKGNoYXIpIDIyKSk7CisJY2xpcGFyZWEuZ2V0VGV4dCgpOyByZXR1cm4gY2xpcGFyZWEuZ2V0VGV4dCgpOyovCisKKwkvLyAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLQorCisJLyoqCisJICoKKwkgKi8KKwlwdWJsaWMgT2JqZWN0IGNyZWF0ZShTdHJpbmcgY2xhc3NuYW1lKSB7CisJCWZvciAoaW50IGkgPSAwOyBpIDwgZHRkLmxlbmd0aDsgaSArPSAzKSB7CisJCQlpZiAoZHRkW2ldLmVxdWFscyhjbGFzc25hbWUpKSB7CisJCQkJcmV0dXJuIGNyZWF0ZUltcGwoKFN0cmluZykgZHRkW2ldKTsKKwkJCX0KKwkJfQorCQl0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJ1bmtub3duICIgKyBjbGFzc25hbWUpOworCX0KKworCS8qKgorCSAqIEByZXR1cm4gY2xhc3NuYW1lCisJICovCisJcHVibGljIFN0cmluZyBnZXRDbGFzcyhPYmplY3QgY29tcG9uZW50KSB7CisJCXJldHVybiAoU3RyaW5nKSBnZXQoY29tcG9uZW50LCAiOmNsYXNzIik7CisJfQorCisJLyoqCisJICoKKwkgKi8KKwlwdWJsaWMgT2JqZWN0IGdldERlc2t0b3AoKSB7CisJCXJldHVybiBjb250ZW50OworCX0KKworCS8qKgorCSAqCisJICovCisJcHJpdmF0ZSBPYmplY3QgY3JlYXRlSW1wbChTdHJpbmcgY2xhc3NuYW1lKSB7CisJCXJldHVybiBuZXcgT2JqZWN0W10geyAiOmNsYXNzIiwgY2xhc3NuYW1lLCBudWxsIH07CisJfQorCisJLyoqCisJICoKKwkgKi8KKwlwcml2YXRlIGJvb2xlYW4gc2V0KE9iamVjdCBjb21wb25lbnQsIE9iamVjdCBrZXksIE9iamVjdCB2YWx1ZSkgeworCQlPYmplY3RbXSBwcmV2aW91cyA9IChPYmplY3RbXSkgY29tcG9uZW50OworCQlmb3IgKE9iamVjdFtdIGVudHJ5ID0gcHJldmlvdXM7IGVudHJ5ICE9IG51bGw7CisJCQkJZW50cnkgPSAoT2JqZWN0W10pIGVudHJ5WzJdKSB7CisJCQlpZiAoZW50cnlbMF0gPT0ga2V5KSB7CisJCQkJaWYgKHZhbHVlICE9IG51bGwpIHsgLy8gc2V0IHRoZSByb3cncyB2YWx1ZQorCQkJCQlPYmplY3Qgb2xkdmFsdWUgPSBlbnRyeVsxXTsKKwkJCQkJZW50cnlbMV0gPSB2YWx1ZTsKKwkJCQkJcmV0dXJuICF2YWx1ZS5lcXVhbHMob2xkdmFsdWUpOworCQkJCX0KKwkJCQllbHNlIHsgLy8gcmVtb3ZlIHRoZSByb3cKKwkJCQkJcHJldmlvdXNbMl0gPSBlbnRyeVsyXTsKKwkJCQkJZW50cnlbMl0gPSBudWxsOworCQkJCQlyZXR1cm4gdHJ1ZTsKKwkJCQl9CisJCQl9CisJCQlwcmV2aW91cyA9IGVudHJ5OworCQl9CisJCWlmICh2YWx1ZSAhPSBudWxsKSB7IC8vIGFwcGVuZCBhIG5ldyByb3cKKwkJCXByZXZpb3VzWzJdID0gbmV3IE9iamVjdFtdIHsga2V5LCB2YWx1ZSwgbnVsbCB9OworCQkJcmV0dXJuIHRydWU7CisJCX0KKwkJcmV0dXJuIGZhbHNlOworCX0KKworCS8qKgorCSAqCisJICovCisJcHJpdmF0ZSBPYmplY3QgZ2V0KE9iamVjdCBjb21wb25lbnQsIE9iamVjdCBrZXkpIHsKKwkJZm9yIChPYmplY3RbXSBlbnRyeSA9IChPYmplY3RbXSkgY29tcG9uZW50OyBlbnRyeSAhPSBudWxsOworCQkJCWVudHJ5ID0gKE9iamVjdFtdKSBlbnRyeVsyXSkgeworCQkJaWYgKGVudHJ5WzBdID09IGtleSkgeworCQkJCXJldHVybiBlbnRyeVsxXTsKKwkJCX0KKwkJfQorCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKgorCSAqLworCXB1YmxpYyBpbnQgZ2V0Q291bnQoT2JqZWN0IGNvbXBvbmVudCkgeworCQlyZXR1cm4gZ2V0Q291bnQoY29tcG9uZW50LCBudWxsKTsKKwl9CisKKwkvKioKKwkgKgorCSAqLworCXB1YmxpYyBpbnQgZ2V0Q291bnQoT2JqZWN0IGNvbXBvbmVudCwgU3RyaW5nIGtleSkgeworCQlyZXR1cm4gZ2V0SXRlbUNvdW50SW1wbChjb21wb25lbnQsIGdldENvbXBvbmVudE5hbWUoY29tcG9uZW50LCBrZXkpKTsKKwl9CisKKwkvKioKKwkgKgorCSAqLworCXB1YmxpYyBPYmplY3QgZ2V0UGFyZW50KE9iamVjdCBjb21wb25lbnQpIHsKKwkJcmV0dXJuIGdldChjb21wb25lbnQsICI6cGFyZW50Iik7CisJfQorCisJLyoqCisJICogQHJldHVybiB0aGUgZmlyc3Qgc2VsZWN0ZWQgaW5kZXggb3IgLTEKKwkgKi8KKwlwdWJsaWMgaW50IGdldFNlbGVjdGVkSW5kZXgoT2JqZWN0IGNvbXBvbmVudCkgeworCQlpbnQgaSA9IDA7CisJCWZvciAoT2JqZWN0IGl0ZW0gPSBnZXQoY29tcG9uZW50LCBnZXRDb21wb25lbnROYW1lKGNvbXBvbmVudCwgbnVsbCkpOworCQkJCWl0ZW0gIT0gbnVsbDsgaXRlbSA9IGdldChpdGVtLCAiOm5leHQiKSkgeworCQkJaWYgKGdldEJvb2xlYW4oaXRlbSwgInNlbGVjdGVkIiwgZmFsc2UpKSB7IHJldHVybiBpOyB9CisJCQlpKys7CisJCX0KKwkJcmV0dXJuIC0xOworCX0KKworCS8qKgorCSAqCisJICovCisJcHVibGljIHZvaWQgcmVtb3ZlQWxsKE9iamVjdCBjb21wb25lbnQpIHsKKwkJcmVtb3ZlQWxsKGNvbXBvbmVudCwgbnVsbCk7CisJfQorCisJLyoqCisJICoKKwkgKi8KKwlwdWJsaWMgdm9pZCByZW1vdmVBbGwoT2JqZWN0IGNvbXBvbmVudCwgU3RyaW5nIGtleSkgeworCQlTdHJpbmcgbGlzdCA9IGdldENvbXBvbmVudE5hbWUoY29tcG9uZW50LCBrZXkpOworCQlpZiAoZ2V0KGNvbXBvbmVudCwgbGlzdCkgIT0gbnVsbCkgeworCQkJc2V0KGNvbXBvbmVudCwgbGlzdCwgbnVsbCk7CisJCQl1cGRhdGUoY29tcG9uZW50LCAidmFsaWRhdGUiKTsKKwkJfQorCX0KKworCS8qKgorCSAqCisJICovCisJcHJpdmF0ZSBpbnQgZ2V0SXRlbUNvdW50SW1wbChPYmplY3QgY29tcG9uZW50LCBPYmplY3Qga2V5KSB7CisJCWludCBpID0gMDsKKwkJZm9yIChjb21wb25lbnQgPSBnZXQoY29tcG9uZW50LCBrZXkpOyBjb21wb25lbnQgIT0gbnVsbDsKKwkJCQljb21wb25lbnQgPSBnZXQoY29tcG9uZW50LCAiOm5leHQiKSkgeworCQkJaSsrOworCQl9CisJCXJldHVybiBpOworCX0KKworCS8qKgorCSAqCisJICovCisJcHVibGljIE9iamVjdCBnZXRJdGVtKE9iamVjdCBjb21wb25lbnQsIGludCBpbmRleCkgeworCQlyZXR1cm4gZ2V0SXRlbShjb21wb25lbnQsIG51bGwsIGluZGV4KTsKKwl9CisKKwkvKioKKwkgKgorCSAqLworCXB1YmxpYyBPYmplY3RbXSBnZXRJdGVtcyhPYmplY3QgY29tcG9uZW50KSB7CisJCXJldHVybiBnZXRJdGVtcyhjb21wb25lbnQsIG51bGwpOworCX0KKworCS8qKgorCSAqCisJICovCisJcHVibGljIE9iamVjdCBnZXRJdGVtKE9iamVjdCBjb21wb25lbnQsIFN0cmluZyBrZXksIGludCBpbmRleCkgeworCQlyZXR1cm4gZ2V0SXRlbUltcGwoY29tcG9uZW50LCBnZXRDb21wb25lbnROYW1lKGNvbXBvbmVudCwga2V5KSwgaW5kZXgpOworCX0KKworCS8qKgorCSAqCisJICovCisJcHVibGljIE9iamVjdFtdIGdldEl0ZW1zKE9iamVjdCBjb21wb25lbnQsIFN0cmluZyBrZXkpIHsKKwkJa2V5ID0gZ2V0Q29tcG9uZW50TmFtZShjb21wb25lbnQsIGtleSk7CisJCU9iamVjdFtdIGl0ZW1zID0gbmV3IE9iamVjdFtnZXRJdGVtQ291bnRJbXBsKGNvbXBvbmVudCwga2V5KV07CisJCWNvbXBvbmVudCA9IGdldChjb21wb25lbnQsIGtleSk7CisJCWZvciAoaW50IGkgPSAwOyBpIDwgaXRlbXMubGVuZ3RoOyBpKyspIHsKKwkJCWl0ZW1zW2ldID0gY29tcG9uZW50OworCQkJY29tcG9uZW50ID0gZ2V0KGNvbXBvbmVudCwgIjpuZXh0Iik7CisJCX0KKwkJcmV0dXJuIGl0ZW1zOworCX0KKworCS8qKgorCSAqCisJICovCisJcHJpdmF0ZSBPYmplY3QgZ2V0SXRlbUltcGwoT2JqZWN0IGNvbXBvbmVudCwgT2JqZWN0IGtleSwgaW50IGluZGV4KSB7CisJCWludCBpID0gMDsKKwkJZm9yIChPYmplY3QgaXRlbSA9IGdldChjb21wb25lbnQsIGtleSk7CisJCQkJaXRlbSAhPSBudWxsOyBpdGVtID0gZ2V0KGl0ZW0sICI6bmV4dCIpKSB7CisJCQlpZiAoaSA9PSBpbmRleCkgeyByZXR1cm4gaXRlbTsgfQorCQkJaSsrOworCQl9CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqCisJICovCisJcHJpdmF0ZSBpbnQgZ2V0SW5kZXgoT2JqZWN0IGNvbXBvbmVudCwgT2JqZWN0IGtleSwgT2JqZWN0IHZhbHVlKSB7CisJCWludCBpbmRleCA9IDA7CisJCWZvciAoT2JqZWN0IGl0ZW0gPSBnZXQoY29tcG9uZW50LCBrZXkpOworCQkJCWl0ZW0gIT0gbnVsbDsgaXRlbSA9IGdldChpdGVtLCAiOm5leHQiKSkgeworCQkJaWYgKHZhbHVlID09IGl0ZW0pIHsgcmV0dXJuIGluZGV4OyB9CisJCQlpbmRleCsrOworCQl9CisJCXJldHVybiAtMTsKKwl9CisKKwkvKioKKwkgKgorCSAqLworCXB1YmxpYyB2b2lkIGFkZChPYmplY3QgY29tcG9uZW50KSB7CisJCWFkZChjb250ZW50LCBjb21wb25lbnQsIDApOworCX0KKworCS8qKgorCSAqCisJICovCisJcHVibGljIHZvaWQgYWRkKE9iamVjdCBwYXJlbnQsIE9iamVjdCBjb21wb25lbnQpIHsKKwkJYWRkKHBhcmVudCwgY29tcG9uZW50LCAtMSk7CisJfQorCisJLyoqCisJICoKKwkgKi8KKwlwdWJsaWMgdm9pZCBhZGQoT2JqZWN0IHBhcmVudCwgT2JqZWN0IGNvbXBvbmVudCwgaW50IGluZGV4KSB7CisJCWFkZEltcGwocGFyZW50LCBjb21wb25lbnQsIGluZGV4KTsKKwkJdXBkYXRlKGNvbXBvbmVudCwgInZhbGlkYXRlIik7CisJCWlmIChwYXJlbnQgPT0gY29udGVudCkgeworCQkJc2V0TmV4dEZvY3VzYWJsZShjb21wb25lbnQsIGZhbHNlKTsKKwkJfQorCX0KKworCS8qKgorCSAqCisJICovCisJcHJpdmF0ZSB2b2lkIGFkZEl0ZW0oT2JqZWN0IHBhcmVudCwgT2JqZWN0IGtleSwgT2JqZWN0IGNvbXBvbmVudCkgeworCQlpbnNlcnRJdGVtKHBhcmVudCwga2V5LCBjb21wb25lbnQsIC0xKTsKKwl9CisKKwkvKioKKwkgKgorCSAqLworCXByaXZhdGUgdm9pZCBpbnNlcnRJdGVtKE9iamVjdCBwYXJlbnQsCisJCQlPYmplY3Qga2V5LCBPYmplY3QgY29tcG9uZW50LCBpbnQgaW5kZXgpIHsKKwkJT2JqZWN0IHRhcmdldCA9IGdldChwYXJlbnQsIGtleSk7CisJCWlmIChpbmRleCA9PSAtMSkgeworCQkJd2hpbGUgKHRhcmdldCAhPSBudWxsKSB7CisJCQkJdGFyZ2V0ID0gZ2V0KHBhcmVudCA9IHRhcmdldCwga2V5ID0gIjpuZXh0Iik7CisJCQl9CisJCX0KKwkJZWxzZSB7CisJCQlmb3IgKGludCBpID0gMDsgaSA8IGluZGV4OyBpKyspIHsKKwkJCQl0YXJnZXQgPSBnZXQocGFyZW50ID0gdGFyZ2V0LCBrZXkgPSAiOm5leHQiKTsKKwkJCX0KKwkJCXNldChjb21wb25lbnQsICI6bmV4dCIsIGdldChwYXJlbnQsIGtleSkpOworCQl9CisJCXNldChwYXJlbnQsIGtleSwgY29tcG9uZW50KTsKKwl9CisKKwkvKioKKwkgKgorCSAqLworCXB1YmxpYyB2b2lkIHJlbW92ZShPYmplY3QgY29tcG9uZW50KSB7CisJCU9iamVjdCBwYXJlbnQgPSBnZXRQYXJlbnQoY29tcG9uZW50KTsKKwkJU3RyaW5nIHBhcmVudGNsYXNzID0gZ2V0Q2xhc3MocGFyZW50KTsKKwkJU3RyaW5nIGNsYXNzbmFtZSA9IGdldENsYXNzKGNvbXBvbmVudCk7CisJCVN0cmluZyBsaXN0a2V5ID0gKCJjb21ib2JveCIgPT0gcGFyZW50Y2xhc3MpID8gImNob2ljZSIgOgorCQkJKCgidGFiYmVkcGFuZSIgPT0gcGFyZW50Y2xhc3MpICYmICgidGFiIiA9PSBjbGFzc25hbWUpKSA/ICJ0YWIiIDoKKwkJCSgibGlzdCIgPT0gcGFyZW50Y2xhc3MpID8gIml0ZW0iIDoKKwkJCSgoInRhYmxlIiA9PSBwYXJlbnRjbGFzcykgJiYgKCJjb2x1bW4iID09IGNsYXNzbmFtZSkpID8gImNvbHVtbiIgOgorCQkJKCgidGFibGUiID09IHBhcmVudGNsYXNzKSAmJiAoInJvdyIgPT0gY2xhc3NuYW1lKSkgPyAicm93IiA6CisJCQkoInJvdyIgPT0gcGFyZW50Y2xhc3MpID8gImNlbGwiIDoKKwkJCSgoInRyZWUiID09IHBhcmVudGNsYXNzKSB8fCAoIm5vZGUiID09IHBhcmVudGNsYXNzKSkgPyAibm9kZSIgOgorCQkJKCgibWVudWJhciIgPT0gcGFyZW50Y2xhc3MpIHx8ICgibWVudSIgPT0gcGFyZW50Y2xhc3MpKSA/ICJtZW51IiA6CisJCQkoKCJwYW5lbCIgPT0gcGFyZW50Y2xhc3MpIHx8ICgiZGVza3RvcCIgPT0gcGFyZW50Y2xhc3MpIHx8CisJCQkJKCJzcGxpdHBhbmUiID09IHBhcmVudGNsYXNzKSB8fCAoImRpYWxvZyIgPT0gcGFyZW50Y2xhc3MpIHx8CisJCQkJKCJ0YWJiZWRwYW5lIiA9PSBwYXJlbnRjbGFzcykpID8gImNvbXBvbmVudCIgOiBudWxsOworCQlpZiAobGlzdGtleSA9PSBudWxsKSB7IHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oInVua25vd24gIiArIGNsYXNzbmFtZSk7IH0KKwkJdXBkYXRlKGNvbXBvbmVudCwgInZhbGlkYXRlIik7CisJCXJlbW92ZUl0ZW1JbXBsKHBhcmVudCwgbGlzdGtleSwgY29tcG9uZW50KTsKKwkJLy8gcmV1ZXN0IGZvY3VzIGZvciBpdHMgcGFyZW50IGlmIHRoZSBjb21wb25lbnQgKG9yIHN1YmNvbXBvbmVudCkgaXMgY3VycmVudGx5IGZvY3VzZWQKKwkJZm9yIChPYmplY3QgY29tcCA9IGZvY3Vzb3duZXI7IGNvbXAgIT0gbnVsbDsgY29tcCA9IGdldFBhcmVudChjb21wKSkgeworCQkJaWYgKGNvbXAgPT0gY29tcG9uZW50KSB7CisJCQkJc2V0TmV4dEZvY3VzYWJsZShwYXJlbnQsIGZhbHNlKTsgYnJlYWs7CisJCQl9CisJCX0KKwl9CisKKwkvKioKKwkgKgorCSAqLworCXByaXZhdGUgdm9pZCByZW1vdmVJdGVtSW1wbChPYmplY3QgcGFyZW50LCBPYmplY3Qga2V5LCBPYmplY3QgY29tcG9uZW50KSB7CisJCU9iamVjdCB0YXJnZXQgPSBnZXQocGFyZW50LCBrZXkpOworCQl3aGlsZSAodGFyZ2V0ICE9IGNvbXBvbmVudCkgeworCQkJdGFyZ2V0ID0gZ2V0KHBhcmVudCA9IHRhcmdldCwga2V5ID0gIjpuZXh0Iik7IC8vICh0YXJnZXQgIT0gbnVsbCkKKwkJfQorCQlzZXQocGFyZW50LCBrZXksIGdldCh0YXJnZXQsICI6bmV4dCIpKTsKKwkJc2V0KHRhcmdldCwgIjpuZXh0IiwgbnVsbCk7CisJCXNldCh0YXJnZXQsICI6cGFyZW50IiwgbnVsbCk7CisJfQorCisJLyoKKwlwcml2YXRlIHZvaWQgcmVtb3ZlSXRlbUltcGwoT2JqZWN0IHBhcmVudCwgU3RyaW5nIGtleSwgaW50IGluZGV4KSB7CisJCU9iamVjdCB0YXJnZXQgPSBnZXQocGFyZW50LCBrZXkpOworCQlmb3IgKGludCBpID0gMDsgaSA8IGluZGV4OyBpKyspIHsKKwkJCXRhcmdldCA9IGdldChwYXJlbnQgPSB0YXJnZXQsIGtleSA9ICI6bmV4dCIpOworCQl9CisJCXNldChwYXJlbnQsIGtleSwgZ2V0KHRhcmdldCwgIjpuZXh0IikpOworCQlzZXQodGFyZ2V0LCAiOm5leHQiLCBudWxsKTsKKwl9Ki8KKworCS8qKgorCSAqCisJICovCisJcHJpdmF0ZSBTdHJpbmcgZ2V0Q29tcG9uZW50TmFtZShPYmplY3QgcGFyZW50LCBPYmplY3QgY2xhc3NuYW1lKSB7CisJCVN0cmluZyBwYXJlbnRjbGFzcyA9IGdldENsYXNzKHBhcmVudCk7CisJCVN0cmluZyBjb21wbmFtZSA9ICgiY29tYm9ib3giID09IHBhcmVudGNsYXNzKSA/ICJjaG9pY2UiIDoKKwkJCSgibGlzdCIgPT0gcGFyZW50Y2xhc3MpID8gIml0ZW0iIDoKKwkJCSgicm93IiA9PSBwYXJlbnRjbGFzcykgPyAiY2VsbCIgOgorCQkJKCgidHJlZSIgPT0gcGFyZW50Y2xhc3MpIHx8ICgibm9kZSIgPT0gcGFyZW50Y2xhc3MpKSA/ICJub2RlIiA6CisJCQkoKCJtZW51YmFyIiA9PSBwYXJlbnRjbGFzcykgfHwgKCJtZW51IiA9PSBwYXJlbnRjbGFzcykpID8gIm1lbnUiIDoKKwkJCSgoInBhbmVsIiA9PSBwYXJlbnRjbGFzcykgfHwgKCJkZXNrdG9wIiA9PSBwYXJlbnRjbGFzcykgfHwKKwkJCQkoInNwbGl0cGFuZSIgPT0gcGFyZW50Y2xhc3MpIHx8ICgiZGlhbG9nIiA9PSBwYXJlbnRjbGFzcykpID8KKwkJCQkiY29tcG9uZW50IiA6IG51bGw7CisJCWlmICgoY29tcG5hbWUgIT0gbnVsbCkgJiYgKChjbGFzc25hbWUgPT0gbnVsbCkgfHwKKwkJCQljb21wbmFtZS5lcXVhbHMoY2xhc3NuYW1lKSkpIHsgcmV0dXJuIGNvbXBuYW1lOyB9CisJCWlmICgidGFiYmVkcGFuZSIgPT0gcGFyZW50Y2xhc3MpIHsKKwkJCWlmICgidGFiIi5lcXVhbHMoY2xhc3NuYW1lKSkgeyByZXR1cm4gInRhYiI7IH0KKwkJCWlmICgoY2xhc3NuYW1lID09IG51bGwpIHx8ICJjb21wb25lbnQiLmVxdWFscyhjbGFzc25hbWUpKSB7IHJldHVybiAiY29tcG9uZW50IjsgfQorCQl9CisJCWVsc2UgaWYgKCJ0YWJsZSIgPT0gcGFyZW50Y2xhc3MpIHsKKwkJCWlmICgiY29sdW1uIi5lcXVhbHMoY2xhc3NuYW1lKSkgeyByZXR1cm4gImNvbHVtbiI7IH0KKwkJCWlmICgoY2xhc3NuYW1lID09IG51bGwpIHx8ICJyb3ciLmVxdWFscyhjbGFzc25hbWUpKSB7IHJldHVybiAicm93IjsgfQorCQl9CisJCXRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oInVua25vd24gIiArIGNsYXNzbmFtZSk7CisJfQorCisJLyoqCisJICoKKwkgKi8KKwlwdWJsaWMgT2JqZWN0IGZpbmQoU3RyaW5nIG5hbWUpIHsKKwkJcmV0dXJuIGZpbmQoY29udGVudCwgbmFtZSk7CisJfQorCisJLyoqCisJICoKKwkgKi8KKwlwdWJsaWMgT2JqZWN0IGZpbmQoT2JqZWN0IGNvbXBvbmVudCwgU3RyaW5nIG5hbWUpIHsKKwkJaWYgKG5hbWUuZXF1YWxzKGdldChjb21wb25lbnQsICJuYW1lIikpKSB7IHJldHVybiBjb21wb25lbnQ7IH0KKwkJU3RyaW5nIGNsYXNzbmFtZSA9IGdldENsYXNzKGNvbXBvbmVudCk7CisJCVN0cmluZyBjaGlsZG5hbWUgPSBudWxsOyBTdHJpbmcgY2hpbGRuYW1lMiA9IG51bGw7CisJCWlmICgoInBhbmVsIiA9PSBjbGFzc25hbWUpIHx8ICgiZGVza3RvcCIgPT0gY2xhc3NuYW1lKSB8fAorCQkJCSgic3BsaXRwYW5lIiA9PSBjbGFzc25hbWUpIHx8ICgiZGlhbG9nIiA9PSBjbGFzc25hbWUpKSB7IGNoaWxkbmFtZSA9ICJjb21wb25lbnQiOyB9CisJCWVsc2UgaWYgKCJjb21ib2JveCIgPT0gY2xhc3NuYW1lKSB7IGNoaWxkbmFtZSA9ICJjaG9pY2UiOyB9CisJCWVsc2UgaWYgKCJ0YWJiZWRwYW5lIiA9PSBjbGFzc25hbWUpIHsgY2hpbGRuYW1lID0gInRhYiI7IGNoaWxkbmFtZTIgPSAiY29tcG9uZW50IjsgfQorCQllbHNlIGlmICgibGlzdCIgPT0gY2xhc3NuYW1lKSB7IGNoaWxkbmFtZSA9ICJpdGVtIjsgfQorCQllbHNlIGlmICgidGFibGUiID09IGNsYXNzbmFtZSkgeyBjaGlsZG5hbWUgPSAiY29sdW1uIjsgY2hpbGRuYW1lMiA9ICJyb3ciOyB9CisJCWVsc2UgaWYgKCJyb3ciID09IGNsYXNzbmFtZSkgeyBjaGlsZG5hbWUgPSAiY2VsbCI7IH0KKwkJZWxzZSBpZiAoKCJ0cmVlIiA9PSBjbGFzc25hbWUpIHx8ICgibm9kZSIgPT0gY2xhc3NuYW1lKSkgeyBjaGlsZG5hbWUgPSAibm9kZSI7IH0KKwkJZWxzZSBpZiAoKCJtZW51YmFyIiA9PSBjbGFzc25hbWUpIHx8ICgibWVudSIgPT0gY2xhc3NuYW1lKSkgeyBjaGlsZG5hbWUgPSAibWVudSI7IH0KKwkJd2hpbGUgKGNoaWxkbmFtZSAhPSBudWxsKSB7CisJCQlmb3IgKE9iamVjdCBjb21wID0gZ2V0KGNvbXBvbmVudCwgY2hpbGRuYW1lKTsKKwkJCQkJY29tcCAhPSBudWxsOyBjb21wID0gZ2V0KGNvbXAsICI6bmV4dCIpKSB7CisJCQkJT2JqZWN0IGZvdW5kID0gZmluZChjb21wLCBuYW1lKTsKKwkJCQlpZiAoZm91bmQgIT0gbnVsbCkgeyByZXR1cm4gZm91bmQ7IH0KKwkJCX0KKwkJCWNoaWxkbmFtZSA9IGNoaWxkbmFtZTI7IGNoaWxkbmFtZTIgPSBudWxsOworCQl9CisJCXJldHVybiBudWxsOworCX0KKworCS8vIC0tLS0tIC0tLS0tIC0tLS0tIC0tLS0tIC0tLS0tIC0tLS0tIC0tLS0tIC0tLS0tIC0tLS0tIC0tLS0tIC0tLS0tIC0tLS0tCisKKwkvKnB1YmxpYyBTdHJpbmcgdG9YTUwoT2JqZWN0IGNvbXBvbmVudCkgeworCQlTdHJpbmdCdWZmZXIgeG1sID0gbmV3IFN0cmluZ0J1ZmZlcigpOworCQlPYmplY3RbXSBlbnRyeSA9IChPYmplY3RbXSkgY29tcG9uZW50OworCQlTdHJpbmcgY2xhc3NuYW1lID0gKFN0cmluZykgZW50cnlbMV07CisJCXdoaWxlICgoZW50cnkgPSAoT2JqZWN0W10pIGVudHJ5WzJdKSAhPSBudWxsKSB7CisJCQl0cnkgeworCQkJCU9iamVjdFtdIGRlZmluaXRpb24gPSBnZXREZWZpbml0aW9uKGNvbXBvbmVudCwgKFN0cmluZykgZW50cnlbMF0sIG51bGwpOworCQkJCWlmIChkZWZpbml0aW9uICE9IG51bGwpIHsKKwkJCQkJeG1sLmFwcGVuZCgiICIgKyBlbnRyeVswXSArICI9XCIiICsgZW50cnlbMV0gKyAiXCIiKTsKKwkJCQl9CisJCQl9IGNhdGNoIChJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gZXhjKSB7fQorCQl9CisJCXJldHVybiB4bWwudG9TdHJpbmcoKTsKKwl9Ki8KKworCS8qKgorCSAqCisJICovCisJcHVibGljIE9iamVjdCBwYXJzZShTdHJpbmcgcGF0aCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCUlucHV0U3RyZWFtIGlucHV0c3RyZWFtID0gbnVsbDsKKwkJdHJ5IHsgLy9qYXZhCisJCQkvL21pZHAgaW5wdXRzdHJlYW0gPSBnZXRDbGFzcygpLmdldFJlc291cmNlQXNTdHJlYW0ocGF0aCk7CisJCQlpbnB1dHN0cmVhbSA9IGdldENsYXNzKCkuZ2V0UmVzb3VyY2VBc1N0cmVhbShwYXRoKTsgLy9qYXZhCisJCQkvL1N5c3RlbS5vdXQucHJpbnRsbigiPiAiICsgcGF0aCArICIgIiArIGlucHV0c3RyZWFtKTsKKwkJfSBjYXRjaCAoVGhyb3dhYmxlIGUpIHt9IC8vamF2YQorCQkvL2lmIChpbnB1dHN0cmVhbSA9PSBudWxsKSB7IC8vIGFwcGxldCBjb2RlCisJCS8vCWlucHV0c3RyZWFtID0gbmV3IFVSTChnZXRDb2RlQmFzZSgpLCBwYXRoKS5vcGVuU3RyZWFtKCk7CisJCS8vfQorCQlyZXR1cm4gcGFyc2UoaW5wdXRzdHJlYW0pOyAvLywgT2JqZWN0IGhhbmRsZXIKKwl9CisKKwkvKioKKwkgKgorCSAqLworCXB1YmxpYyBPYmplY3QgcGFyc2UoSW5wdXRTdHJlYW0gaW5wdXRzdHJlYW0pIHRocm93cyBFeGNlcHRpb24geworCQlyZXR1cm4gcGFyc2UoaW5wdXRzdHJlYW0sIHRydWUpOworCX0KKworCS8qKgorCSAqCisJICovCisJcHJvdGVjdGVkIHZvaWQgcGFyc2VYTUwoSW5wdXRTdHJlYW0gaW5wdXRzdHJlYW0pIHRocm93cyBFeGNlcHRpb24geworCQlwYXJzZShpbnB1dHN0cmVhbSwgZmFsc2UpOworCX0KKworCS8qKgorCSAqCisJICovCisJcHJvdGVjdGVkIHZvaWQgc3RhcnRFbGVtZW50KFN0cmluZyBuYW1lLCBIYXNodGFibGUgYXR0cmlidXRlbGlzdCkge30KKworCS8qKgorCSAqCisJICovCisJcHJvdGVjdGVkIHZvaWQgY2hhcmFjdGVycyhTdHJpbmcgdGV4dCkge30KKworCS8qKgorCSAqCisJICovCisJcHJvdGVjdGVkIHZvaWQgZW5kRWxlbWVudCgpIHt9CisKKwkvKioKKwkgKgorCSAqLworCXByaXZhdGUgT2JqZWN0IHBhcnNlKElucHV0U3RyZWFtIGlucHV0c3RyZWFtLCBib29sZWFuIHZhbGlkYXRlKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJQnVmZmVyZWRSZWFkZXIgcmVhZGVyID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKG5ldyBJbnB1dFN0cmVhbVJlYWRlcihpbnB1dHN0cmVhbSkpOyAvL2phdmEKKwkJLy9taWRwIElucHV0U3RyZWFtUmVhZGVyIHJlYWRlciA9IG5ldyBJbnB1dFN0cmVhbVJlYWRlcihpbnB1dHN0cmVhbSk7CisJCU9iamVjdFtdIHBhcmVudGxpc3QgPSBudWxsOworCQlPYmplY3QgY3VycmVudCA9IG51bGw7CisJCUhhc2h0YWJsZSBhdHRyaWJ1dGVsaXN0ID0gbnVsbDsKKwkJU3RyaW5nQnVmZmVyIHRleHQgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CisJCWZvciAoaW50IGMgPSByZWFkZXIucmVhZCgpOyBjICE9IC0xOykgeworCQkJaWYgKGMgPT0gJzwnKSB7CisJCQkJaWYgKChjID0gcmVhZGVyLnJlYWQoKSkgPT0gJy8nKSB7IC8vZW5kdGFnCisJCQkJCWlmICh0ZXh0Lmxlbmd0aCgpID4gMCkgeworCQkJCQkJaWYgKHRleHQuY2hhckF0KHRleHQubGVuZ3RoKCkgLSAxKSA9PSAnICcpIHsKKwkJCQkJCQl0ZXh0LnNldExlbmd0aCh0ZXh0Lmxlbmd0aCgpIC0gMSk7CisJCQkJCQl9CisJCQkJCQlpZiAoIXZhbGlkYXRlKSB7CisJCQkJCQkJY2hhcmFjdGVycyh0ZXh0LnRvU3RyaW5nKCkpOworCQkJCQkJfS8vIGVsc2UgeworCQkJCQkJCS8vYWRkQ29udGVudChjdXJyZW50LCB0ZXh0LnRvU3RyaW5nKCkpOworCQkJCQkJLy99CisJCQkJCQl0ZXh0LnNldExlbmd0aCgwKTsKKwkJCQkJfQorCQkJCQlTdHJpbmcgdGFnbmFtZSA9IChTdHJpbmcpIHBhcmVudGxpc3RbMl07IC8vZ2V0Q2xhc3MoY3VycmVudCk7CisJCQkJCWZvciAoaW50IGkgPSAwOyBpIDwgdGFnbmFtZS5sZW5ndGgoKTsgaSsrKSB7IC8vIGN1cnJlbnQtdGFnCisJCQkJCQlpZiAoKGMgPSByZWFkZXIucmVhZCgpKSAhPSB0YWduYW1lLmNoYXJBdChpKSkgeworCQkJCQkJCXRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24odGFnbmFtZSk7CisJCQkJCQl9CisJCQkJCX0KKwkJCQkJd2hpbGUgKCIgXHRcblxyIi5pbmRleE9mKGMgPSByZWFkZXIucmVhZCgpKSAhPSAtMSk7IC8vIHdoaXRlc3BhY2UKKwkJCQkJaWYgKGMgIT0gJz4nKSB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCk7IC8vICc+JworCQkJCQljID0gcmVhZGVyLnJlYWQoKTsKKwkJCQkJaWYgKCF2YWxpZGF0ZSkgeyBlbmRFbGVtZW50KCk7IH0KKwkJCQkJaWYgKHBhcmVudGxpc3RbMF0gPT0gbnVsbCkgeworCQkJCQkJcmVhZGVyLmNsb3NlKCk7CisJCQkJCQlyZXR1cm4gY3VycmVudDsKKwkJCQkJfQorCQkJCQljdXJyZW50ID0gcGFyZW50bGlzdFswXTsKKwkJCQkJcGFyZW50bGlzdCA9IChPYmplY3RbXSkgcGFyZW50bGlzdFsxXTsKKwkJCQl9CisJCQkJZWxzZSB7IC8vc3RhcnQgb3Igc3RhbmRhbG9uZSB0YWcKKwkJCQkJYm9vbGVhbiBpbnN0cnVjdGlvbiA9IChjID09ICc/Jyk7IC8vIFByb2Nlc3NpbmcgSW5zdHJ1Y3Rpb25zCisJCQkJCWlmIChjID09ICchJykgeyB3aGlsZSAoKGMgPSByZWFkZXIucmVhZCgpKSAhPSAnPicpOyBjb250aW51ZTsgfSAvLyBET0NUWVBFCisJCQkJCWlmIChpbnN0cnVjdGlvbikgeyBjID0gcmVhZGVyLnJlYWQoKTsgfQorCQkJCQl0ZXh0LnNldExlbmd0aCgwKTsKKwkJCQkJYm9vbGVhbiBpc2NvbW1lbnQgPSBmYWxzZTsKKwkJCQkJd2hpbGUgKCI+LyBcdFxuXHIiLmluZGV4T2YoYykgPT0gLTEpIHsKKwkJCQkJCXRleHQuYXBwZW5kKChjaGFyKSBjKTsKKwkJCQkJCWlmICgodGV4dC5sZW5ndGgoKSA9PSAzKSAmJiAodGV4dC5jaGFyQXQoMCkgPT0gJyEnKSAmJgorCQkJCQkJCQkodGV4dC5jaGFyQXQoMSkgPT0gJy0nKSAmJiAodGV4dC5jaGFyQXQoMikgPT0gJy0nKSkgeworCQkJCQkJCWludCBtID0gMDsKKwkJCQkJCQl3aGlsZSAodHJ1ZSkgeworCQkJCQkJCQljID0gcmVhZGVyLnJlYWQoKTsKKwkJCQkJCQkJaWYgKGMgPT0gJy0nKSB7IG0rKzsgfQorCQkJCQkJCQllbHNlIGlmICgoYyA9PSAnPicpICYmIChtID49IDIpKSB7IGJyZWFrOyB9CisJCQkJCQkJCWVsc2UgeyBtID0gMDsgfQorCQkJCQkJCX0KKwkJCQkJCQlpc2NvbW1lbnQgPSB0cnVlOworCQkJCQkJfQorCQkJCQkJYyA9IHJlYWRlci5yZWFkKCk7CisJCQkJCX0KKwkJCQkJaWYgKGlzY29tbWVudCkgeyBjb250aW51ZTsgfQorCQkJCQlpZiAoIWluc3RydWN0aW9uKSB7CisJCQkJCQlTdHJpbmcgdGFnbmFtZSA9IHRleHQudG9TdHJpbmcoKTsKKwkJCQkJCXBhcmVudGxpc3QgPSBuZXcgT2JqZWN0W10geyBjdXJyZW50LCBwYXJlbnRsaXN0LCB0YWduYW1lIH07CisJCQkJCQlpZiAodmFsaWRhdGUpIHsKKwkJCQkJCQljdXJyZW50ID0gKGN1cnJlbnQgIT0gbnVsbCkgPworCQkJCQkJCQlhZGRFbGVtZW50KGN1cnJlbnQsIHRhZ25hbWUpIDogY3JlYXRlKHRhZ25hbWUpOworCQkJCQkJfSBlbHNlIHsKKwkJCQkJCQljdXJyZW50ID0gdGFnbmFtZTsKKwkJCQkJCX0KKwkJCQkJfQorCQkJCQl0ZXh0LnNldExlbmd0aCgwKTsKKwkJCQkJd2hpbGUgKHRydWUpIHsKKwkJCQkJCWJvb2xlYW4gd2hpdGVzcGFjZSA9IGZhbHNlOworCQkJCQkJd2hpbGUgKCIgXHRcblxyIi5pbmRleE9mKGMpICE9IC0xKSB7CisJCQkJCQkJYyA9IHJlYWRlci5yZWFkKCk7CisJCQkJCQkJd2hpdGVzcGFjZSA9IHRydWU7CisJCQkJCQl9CisJCQkJCQlpZiAoYyA9PSAnPicpIHsKKwkJCQkJCQlpZiAoaW5zdHJ1Y3Rpb24pIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oKTsgLy8gJz8+JworCQkJCQkJCWlmICghdmFsaWRhdGUpIHsKKwkJCQkJCQkJc3RhcnRFbGVtZW50KChTdHJpbmcpIGN1cnJlbnQsIGF0dHJpYnV0ZWxpc3QpOyBhdHRyaWJ1dGVsaXN0ID0gbnVsbDsKKwkJCQkJCQl9CisJCQkJCQkJYyA9IHJlYWRlci5yZWFkKCk7CisJCQkJCQkJYnJlYWs7CisJCQkJCQl9CisJCQkJCQllbHNlIGlmIChjID09ICcvJykgeworCQkJCQkJCWlmIChpbnN0cnVjdGlvbikgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigpOyAvLyAnPz4nCisJCQkJCQkJaWYgKChjID0gcmVhZGVyLnJlYWQoKSkgIT0gJz4nKSB7CisJCQkJCQkJCXRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oKTsgLy8gJz4nCisJCQkJCQkJfQorCQkJCQkJCWlmICghdmFsaWRhdGUpIHsKKwkJCQkJCQkJc3RhcnRFbGVtZW50KChTdHJpbmcpIGN1cnJlbnQsIGF0dHJpYnV0ZWxpc3QpOyBhdHRyaWJ1dGVsaXN0ID0gbnVsbDsKKwkJCQkJCQkJZW5kRWxlbWVudCgpOworCQkJCQkJCX0KKwkJCQkJCQlpZiAocGFyZW50bGlzdFswXSA9PSBudWxsKSB7CisJCQkJCQkJCXJlYWRlci5jbG9zZSgpOworCQkJCQkJCQlyZXR1cm4gY3VycmVudDsKKwkJCQkJCQl9CisJCQkJCQkJY3VycmVudCA9IHBhcmVudGxpc3RbMF07CisJCQkJCQkJcGFyZW50bGlzdCA9IChPYmplY3RbXSkgcGFyZW50bGlzdFsxXTsKKwkJCQkJCQljID0gcmVhZGVyLnJlYWQoKTsKKwkJCQkJCQlicmVhazsKKwkJCQkJCX0KKwkJCQkJCWVsc2UgaWYgKGluc3RydWN0aW9uICYmIChjID09ICc/JykpIHsKKwkJCQkJCQlpZiAoKGMgPSByZWFkZXIucmVhZCgpKSAhPSAnPicpIHsKKwkJCQkJCQkJdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigpOyAvLyAnPicKKwkJCQkJCQl9CisJCQkJCQkJYyA9IHJlYWRlci5yZWFkKCk7CisJCQkJCQkJYnJlYWs7CisJCQkJCQl9CisJCQkJCQllbHNlIGlmICh3aGl0ZXNwYWNlKSB7CisJCQkJCQkJd2hpbGUgKCI9IFx0XG5cciIuaW5kZXhPZihjKSA9PSAtMSkgeworCQkJCQkJCQl0ZXh0LmFwcGVuZCgoY2hhcikgYyk7CisJCQkJCQkJCWMgPSByZWFkZXIucmVhZCgpOworCQkJCQkJCX0KKwkJCQkJCQlTdHJpbmcga2V5ID0gdGV4dC50b1N0cmluZygpOworCQkJCQkJCXRleHQuc2V0TGVuZ3RoKDApOworCQkJCQkJCXdoaWxlICgiIFx0XG5cciIuaW5kZXhPZihjKSAhPSAtMSkgYyA9IHJlYWRlci5yZWFkKCk7CisJCQkJCQkJaWYgKGMgIT0gJz0nKSB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCk7CisJCQkJCQkJd2hpbGUgKCIgXHRcblxyIi5pbmRleE9mKGMgPSByZWFkZXIucmVhZCgpKSAhPSAtMSk7CisJCQkJCQkJY2hhciBxdW90ZSA9IChjaGFyKSBjOworCQkJCQkJCWlmICgoYyAhPSAnXCInKSAmJiAoYyAhPSAnXCcnKSkgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigpOworCQkJCQkJCXdoaWxlIChxdW90ZSAhPSAoYyA9IHJlYWRlci5yZWFkKCkpKSB7CisJCQkJCQkJCWlmIChjID09ICcmJykgeworCQkJCQkJCQkJU3RyaW5nQnVmZmVyIGViID0gbmV3IFN0cmluZ0J1ZmZlcigpOworCQkJCQkJCQkJd2hpbGUgKCc7JyAhPSAoYyA9IHJlYWRlci5yZWFkKCkpKSB7IGViLmFwcGVuZCgoY2hhcikgYyk7IH0KKwkJCQkJCQkJCVN0cmluZyBlbnRpdHkgPSBlYi50b1N0cmluZygpOworCQkJCQkJCQkJaWYgKCJsdCIuZXF1YWxzKGVudGl0eSkpIHsgdGV4dC5hcHBlbmQoJzwnKTsgfQorCQkJCQkJCQkJZWxzZSBpZiAoImd0Ii5lcXVhbHMoZW50aXR5KSkgeyB0ZXh0LmFwcGVuZCgnPicpOyB9CisJCQkJCQkJCQllbHNlIGlmICgiYW1wIi5lcXVhbHMoZW50aXR5KSkgeyB0ZXh0LmFwcGVuZCgnJicpOyB9CisJCQkJCQkJCQllbHNlIGlmICgicXVvdCIuZXF1YWxzKGVudGl0eSkpIHsgdGV4dC5hcHBlbmQoJyInKTsgfQorCQkJCQkJCQkJZWxzZSBpZiAoImFwb3MiLmVxdWFscyhlbnRpdHkpKSB7IHRleHQuYXBwZW5kKCdcJycpOyB9CisJCQkJCQkJCQllbHNlIGlmIChlbnRpdHkuc3RhcnRzV2l0aCgiIyIpKSB7CisJCQkJCQkJCQkJdGV4dC5hcHBlbmQoKGNoYXIpIEludGVnZXIucGFyc2VJbnQoZW50aXR5LnN1YnN0cmluZygxKSkpOworCQkJCQkJCQkJfQorCQkJCQkJCQkJZWxzZSB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJ1bmtub3duICIgKyAiZW50aXR5ICIgKyBlbnRpdHkpOworCQkJCQkJCQl9CisJCQkJCQkJCWVsc2UgdGV4dC5hcHBlbmQoKGNoYXIpIGMpOworCQkJCQkJCX0KKwkJCQkJCQlpZiAoIWluc3RydWN0aW9uKSB7CisJCQkJCQkJCWlmICh2YWxpZGF0ZSkgeworCQkJCQkJCQkJYWRkQXR0cmlidXRlKGN1cnJlbnQsIGtleSwgdGV4dC50b1N0cmluZygpKTsKKwkJCQkJCQkJfSBlbHNlIHsKKwkJCQkJCQkJCWlmIChhdHRyaWJ1dGVsaXN0ID09IG51bGwpIHsgYXR0cmlidXRlbGlzdCA9IG5ldyBIYXNodGFibGUoKTsgfQorCQkJCQkJCQkJYXR0cmlidXRlbGlzdC5wdXQoa2V5LCB0ZXh0LnRvU3RyaW5nKCkpOworCQkJCQkJCQl9CisJCQkJCQkJfQorCQkJCQkJCXRleHQuc2V0TGVuZ3RoKDApOworCQkJCQkJCWMgPSByZWFkZXIucmVhZCgpOworCQkJCQkJfQorCQkJCQkJZWxzZSB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCk7CisJCQkJCX0KKwkJCQl9CisJCQl9CisJCQllbHNlIHsKKwkJCQlpZiAoIiBcdFxuXHIiLmluZGV4T2YoYykgIT0gLTEpIHsKKwkJCQkJaWYgKCh0ZXh0Lmxlbmd0aCgpID4gMCkgJiYgKHRleHQuY2hhckF0KHRleHQubGVuZ3RoKCkgLSAxKSAhPSAnICcpKSB7CisJCQkJCQl0ZXh0LmFwcGVuZCgnICcpOworCQkJCQl9CisJCQkJfQorCQkJCWVsc2UgeworCQkJCQl0ZXh0LmFwcGVuZCgoY2hhcikgYyk7CisJCQkJfQorCQkJCWMgPSByZWFkZXIucmVhZCgpOworCQkJfQorCQl9CisJCXRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oKTsKKwl9CisKKwkvKioKKwkgKiBDb252ZXJ0IGVudGl0aWVzLgorCSAqLworCXByaXZhdGUgc3RhdGljIFN0cmluZyBjb252ZXJ0KFN0cmluZ0J1ZmZlciB0ZXh0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qcHJpdmF0ZSBJbnB1dFN0cmVhbSBpbnB1dHJlYWRlcjsKKwlwcml2YXRlIGJ5dGVbXSBkYXRhOworCXByaXZhdGUgaW50IGlucHV0ZnJvbSA9IDAsIGlucHV0dG8gPSAwOworCXByaXZhdGUgaW50IHJlYWQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJaWYgKGRhdGEgPT0gbnVsbCkgeyBkYXRhID0gbmV3IGJ5dGVbMTAyNF07IH0KKwkJaWYgKGlucHV0ZnJvbSA+PSBpbnB1dHRvKSB7CisJCQlpbnB1dGZyb20gPSAwOworCQkJaW5wdXR0byA9IGlucHV0cmVhZGVyLnJlYWQoZGF0YSk7CisJCX0KKwkJaW5wdXRmcm9tKys7CisJCXJldHVybiBkYXRhW2lucHV0ZnJvbSAtIDFdOworCX0qLworCisJLyoqCisJICoKKwkgKi8KKwlwcml2YXRlIHZvaWQgYWRkSW1wbChPYmplY3QgcGFyZW50LCBPYmplY3QgY29tcG9uZW50LCBpbnQgaW5kZXgpIHsKKwkJU3RyaW5nIHBhcmVudGNsYXNzID0gZ2V0Q2xhc3MocGFyZW50KTsKKwkJU3RyaW5nIGNsYXNzbmFtZSA9IGdldENsYXNzKGNvbXBvbmVudCk7CisJCS8vU3lzdGVtLm91dC5wcmludGxuKCJhZGQgIiArIGNsYXNzbmFtZSArICIgLT4gIiArIHBhcmVudGNsYXNzKTsKKwkJaWYgKCgoImNvbWJvYm94IiA9PSBwYXJlbnRjbGFzcykgJiYgKCJjaG9pY2UiID09IGNsYXNzbmFtZSkpIHx8CisJCQkJCSgoInRhYmJlZHBhbmUiID09IHBhcmVudGNsYXNzKSAmJiAoInRhYiIgPT0gY2xhc3NuYW1lKSkgfHwKKwkJCQkJKCgibGlzdCIgPT0gcGFyZW50Y2xhc3MpICYmICgiaXRlbSIgPT0gY2xhc3NuYW1lKSkgfHwKKwkJCQkJKCgidGFibGUiID09IHBhcmVudGNsYXNzKSAmJiAoKCJjb2x1bW4iID09IGNsYXNzbmFtZSkgfHwgKCJyb3ciID09IGNsYXNzbmFtZSkpKSB8fAorCQkJCQkoKCJyb3ciID09IHBhcmVudGNsYXNzKSAmJiAoImNlbGwiID09IGNsYXNzbmFtZSkpIHx8CisJCQkJCSgoKCJ0cmVlIiA9PSBwYXJlbnRjbGFzcykgfHwgKCJub2RlIiA9PSBwYXJlbnRjbGFzcykpICYmICgibm9kZSIgPT0gY2xhc3NuYW1lKSkgfHwKKwkJCQkJKCgibWVudWJhciIgPT0gcGFyZW50Y2xhc3MpICYmICgibWVudSIgPT0gY2xhc3NuYW1lKSkpIHsKKwkJCQljbGFzc25hbWUgPSBjbGFzc25hbWU7IC8vIGNvbXBpbGVyIGJ1ZworCQl9CisJCWVsc2UgaWYgKCgibWVudSIgPT0gcGFyZW50Y2xhc3MpICYmICgoIm1lbnUiID09IGNsYXNzbmFtZSkgfHwgKCJtZW51aXRlbSIgPT0gY2xhc3NuYW1lKSB8fAorCQkJCSgiY2hlY2tib3htZW51aXRlbSIgPT0gY2xhc3NuYW1lKSB8fCAoInNlcGFyYXRvciIgPT0gY2xhc3NuYW1lKSkpIHsKKwkJCWNsYXNzbmFtZSA9ICJtZW51IjsKKwkJfQorCQllbHNlIGlmICgoInBhbmVsIiA9PSBwYXJlbnRjbGFzcykgfHwgKCJkZXNrdG9wIiA9PSBwYXJlbnRjbGFzcykgfHwKKwkJCQkoInNwbGl0cGFuZSIgPT0gcGFyZW50Y2xhc3MpIHx8ICgiZGlhbG9nIiA9PSBwYXJlbnRjbGFzcykgfHwKKwkJCQkoInRhYmJlZHBhbmUiID09IHBhcmVudGNsYXNzKSkgeworCQkJd2hpbGUgKCJjb21wb25lbnQiICE9IGNsYXNzbmFtZSkgeworCQkJCVN0cmluZyBleHRlbmRjbGFzcyA9IG51bGw7CisJCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBkdGQubGVuZ3RoOyBpICs9IDMpIHsKKwkJCQkJaWYgKGNsYXNzbmFtZSA9PSBkdGRbaV0pIHsKKwkJCQkJCWV4dGVuZGNsYXNzID0gKFN0cmluZykgZHRkW2kgKyAxXTsgYnJlYWs7CisJCQkJCX0KKwkJCQl9CisJCQkJaWYgKGV4dGVuZGNsYXNzID09IG51bGwpIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oY2xhc3NuYW1lICsgIiBub3QgY29tcG9uZW50Iik7CisJCQkJY2xhc3NuYW1lID0gZXh0ZW5kY2xhc3M7CisJCQl9CisJCX0KKwkJZWxzZSB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKGNsYXNzbmFtZSArICIgYWRkICIgKyBwYXJlbnRjbGFzcyk7CisJCWluc2VydEl0ZW0ocGFyZW50LCAoU3RyaW5nKSBjbGFzc25hbWUsIGNvbXBvbmVudCwgaW5kZXgpOworCQlzZXQoY29tcG9uZW50LCAiOnBhcmVudCIsIHBhcmVudCk7CisJCS8vaWYgKHBhcmVudCA9PSBjb250ZW50KSBTeXN0ZW0ub3V0LnByaW50bG4oZ2V0Q2xhc3MocGFyZW50KSArICIuYWRkKCIgKyBnZXRDbGFzcyhjb21wb25lbnQpICsgIikgOiAiICsgY2xhc3NuYW1lKTsKKwl9CisKKwkvKioKKwkgKgorCSAqLworCXByaXZhdGUgT2JqZWN0IGFkZEVsZW1lbnQoT2JqZWN0IHBhcmVudCwgU3RyaW5nIG5hbWUpIHsKKwkJLy9TeXN0ZW0ub3V0LnByaW50bG4oImNyZWF0ZSAnIiArIG5hbWUgKyAiJyIpOworCQlPYmplY3QgY29tcG9uZW50ID0gY3JlYXRlKG5hbWUpOworCQlhZGRJbXBsKHBhcmVudCwgY29tcG9uZW50LCAtMSk7CisJCXJldHVybiBjb21wb25lbnQ7CisJfQorCisJLyoqCisJICoKKwkgKi8KKwlwcml2YXRlIHZvaWQgYWRkQXR0cmlidXRlKE9iamVjdCBjb21wb25lbnQsIFN0cmluZyBrZXksIFN0cmluZyB2YWx1ZSkgeworCQkvL1N5c3RlbS5vdXQucHJpbnRsbigiYXR0cmlidXRlICciICsga2V5ICsgIic9JyIgKyB2YWx1ZSArICInIik7CisJCU9iamVjdFtdIGRlZmluaXRpb24gPSBnZXREZWZpbml0aW9uKGNvbXBvbmVudCwga2V5LCBudWxsKTsKKwkJa2V5ID0gKFN0cmluZykgZGVmaW5pdGlvblsxXTsKKwkJaWYgKCJzdHJpbmciID09IGRlZmluaXRpb25bMF0pIHsKKwkJCXNldFN0cmluZyhjb21wb25lbnQsIGtleSwgdmFsdWUsIChTdHJpbmcpIGRlZmluaXRpb25bM10pOworCQl9CisJCWVsc2UgaWYgKCJjaG9pY2UiID09IGRlZmluaXRpb25bMF0pIHsKKwkJCVN0cmluZ1tdIHZhbHVlcyA9IChTdHJpbmdbXSkgZGVmaW5pdGlvblszXTsKKwkJCXNldENob2ljZShjb21wb25lbnQsIGtleSwgdmFsdWUsIHZhbHVlcywgdmFsdWVzWzBdKTsKKwkJfQorCQllbHNlIGlmICgiYm9vbGVhbiIgPT0gZGVmaW5pdGlvblswXSkgeworCQkJaWYgKCJ0cnVlIi5lcXVhbHModmFsdWUpKSB7CisJCQkJaWYgKGRlZmluaXRpb25bM10gPT0gQm9vbGVhbi5GQUxTRSkgeworCQkJCQlzZXQoY29tcG9uZW50LCBrZXksIEJvb2xlYW4uVFJVRSk7CisJCQkgCX0KKwkJCX0KKwkJCWVsc2UgaWYgKCJmYWxzZSIuZXF1YWxzKHZhbHVlKSkgeworCQkJCWlmIChkZWZpbml0aW9uWzNdID09IEJvb2xlYW4uVFJVRSkgeworCQkJCQlzZXQoY29tcG9uZW50LCBrZXksIEJvb2xlYW4uRkFMU0UpOworCQkJIAl9CisJCQl9CisJCQllbHNlIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24odmFsdWUpOworCQl9CisJCWVsc2UgaWYgKCJpbnRlZ2VyIiA9PSBkZWZpbml0aW9uWzBdKSB7CisJCQlzZXQoY29tcG9uZW50LCBrZXksIEludGVnZXIudmFsdWVPZih2YWx1ZSkpOworCQl9CisJCWVsc2UgaWYgKCJpY29uIiA9PSBkZWZpbml0aW9uWzBdKSB7CisJCQlzZXQ8ZXJyb3IgZGVzY3I9IidzZXQoamF2YS5sYW5nLk9iamVjdCwgamF2YS5sYW5nLk9iamVjdCwgamF2YS5sYW5nLk9iamVjdCknIGluICdUaGlubGV0JyBjYW5ub3QgYmUgYXBwbGllZCB0byAnKGphdmEubGFuZy5PYmplY3QsIGphdmEubGFuZy5TdHJpbmcsIEltYWdlKSciPihjb21wb25lbnQsIGtleSwgZ2V0SWNvbih2YWx1ZSkpPC9lcnJvcj47CisJCX0KKwkJZWxzZSBpZiAoIm1ldGhvZCIgPT0gZGVmaW5pdGlvblswXSkgeworCQkJdHJ5IHsgLy9qYXZhCisJCQkJc2V0PGVycm9yIGRlc2NyPSInc2V0KGphdmEubGFuZy5PYmplY3QsIGphdmEubGFuZy5PYmplY3QsIGphdmEubGFuZy5PYmplY3QpJyBpbiAnVGhpbmxldCcgY2Fubm90IGJlIGFwcGxpZWQgdG8gJyhqYXZhLmxhbmcuT2JqZWN0LCBqYXZhLmxhbmcuU3RyaW5nLCBqYXZhLmxhbmcucmVmbGVjdC5NZXRob2QpJyI+KGNvbXBvbmVudCwga2V5LCBnZXRDbGFzcygpLmdldE1ldGhvZCh2YWx1ZSwgbnVsbCkpPC9lcnJvcj47IC8vamF2YQorCQkJfSBjYXRjaCAoRXhjZXB0aW9uIGV4YykgeyBTeXN0ZW0uZXJyLnByaW50bG4odmFsdWUpOyBleGMucHJpbnRTdGFja1RyYWNlKCk7IH0gLy9qYXZhCisJCQkvL21pZHAgc2V0TWV0aG9kKGNvbXBvbmVudCwga2V5LCB2YWx1ZSk7CisJCX0KKwkJLy9qYXZhPgorCQllbHNlIGlmICgiYmVhbiIgPT0gZGVmaW5pdGlvblswXSkgeworCQkJdHJ5IHsKKwkJCQlzZXQoY29tcG9uZW50LCBrZXksIChDb21wb25lbnQpIENsYXNzLmZvck5hbWUodmFsdWUpLm5ld0luc3RhbmNlKCkpOworCQkJfSBjYXRjaCAoRXhjZXB0aW9uIGV4YykgeyBTeXN0ZW0uZXJyLnByaW50bG4odmFsdWUpOyBleGMucHJpbnRTdGFja1RyYWNlKCk7IH0KKwkJfQorCQkvLzxqYXZhCisJCWVsc2UgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigoU3RyaW5nKSBkZWZpbml0aW9uWzBdKTsKKwl9CisKKwkvKioKKwkgKgorCSAqLworCXByaXZhdGUgT2JqZWN0W10gZ2V0RGVmaW5pdGlvbihPYmplY3QgY29tcG9uZW50LCBTdHJpbmcga2V5LCBTdHJpbmcgdHlwZSkgeworCQlPYmplY3QgY2xhc3NuYW1lID0gZ2V0Q2xhc3MoY29tcG9uZW50KTsKKwkJT2JqZWN0IGN1cnJlbnRuYW1lID0gY2xhc3NuYW1lOworCQl3aGlsZSAoY2xhc3NuYW1lICE9IG51bGwpIHsKKwkJCWZvciAoaW50IGkgPSAwOyBpIDwgZHRkLmxlbmd0aDsgaSArPSAzKSB7CisJCQkJaWYgKGR0ZFtpXSA9PSBjbGFzc25hbWUpIHsKKwkJCQkJT2JqZWN0W11bXSBhdHRyaWJ1dGVzID0gKE9iamVjdFtdW10pIGR0ZFtpICsgMl07CisJCQkJCWZvciAoaW50IGogPSAwOyBqIDwgYXR0cmlidXRlcy5sZW5ndGg7IGorKykgeworCQkJCQkJaWYgKGF0dHJpYnV0ZXNbal1bMV0uZXF1YWxzKGtleSkpIHsKKwkJCQkJCQlpZiAoKHR5cGUgIT0gbnVsbCkgJiYgKHR5cGUgIT0gYXR0cmlidXRlc1tqXVswXSkpIHsKKwkJCQkJCQkJdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbihhdHRyaWJ1dGVzW2pdWzBdLnRvU3RyaW5nKCkpOworCQkJCQkJCX0KKwkJCQkJCQlyZXR1cm4gYXR0cmlidXRlc1tqXTsKKwkJCQkJCX0KKwkJCQkJfQorCQkJCQljbGFzc25hbWUgPSBkdGRbaSArIDFdOworCQkJCQlicmVhazsKKwkJCQl9CisJCQl9CisJCX0KKwkJdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigidW5rbm93biAiICsga2V5ICsgIiAiICsgdHlwZSArCisJCQkiIGZvciAiICsgY3VycmVudG5hbWUpOworCX0KKworCS8qKgorCSAqCisJICovCisJLy9wcml2YXRlIHZvaWQgYWRkQ29udGVudChPYmplY3QgY29tcG9uZW50LCBTdHJpbmcgY29udGVudCkgeworCQkvL3NldChjb21wb25lbnQsICJjb250ZW50IiwgY29udGVudCk7CisJLy99CisKKwkvLyAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLQorCisJLyoqCisJICoKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRTdHJpbmcoT2JqZWN0IGNvbXBvbmVudCwgU3RyaW5nIGtleSwgU3RyaW5nIHZhbHVlKSB7CisJCU9iamVjdFtdIGRlZmluaXRpb24gPSBnZXREZWZpbml0aW9uKGNvbXBvbmVudCwga2V5LCAic3RyaW5nIik7CisJCWlmIChzZXRTdHJpbmcoY29tcG9uZW50LCAoU3RyaW5nKSBkZWZpbml0aW9uWzFdLAorCQkJCXZhbHVlLCAoU3RyaW5nKSBkZWZpbml0aW9uWzNdKSkgeworCQkJdXBkYXRlKGNvbXBvbmVudCwgZGVmaW5pdGlvblsyXSk7CisJCX0KKwl9CisKKwkvKioKKwkgKgorCSAqLworCXB1YmxpYyBTdHJpbmcgZ2V0U3RyaW5nKE9iamVjdCBjb21wb25lbnQsIFN0cmluZyBrZXkpIHsKKwkJT2JqZWN0W10gZGVmaW5pdGlvbiA9IGdldERlZmluaXRpb24oY29tcG9uZW50LCBrZXksICJzdHJpbmciKTsKKwkJcmV0dXJuIGdldFN0cmluZyhjb21wb25lbnQsIChTdHJpbmcpIGRlZmluaXRpb25bMV0sCisJCQkoU3RyaW5nKSBkZWZpbml0aW9uWzNdKTsKKwl9CisKKwkvKioKKwkgKgorCSAqLworCXB1YmxpYyB2b2lkIHNldENob2ljZShPYmplY3QgY29tcG9uZW50LCBTdHJpbmcga2V5LCBTdHJpbmcgdmFsdWUpIHsKKwkJT2JqZWN0W10gZGVmaW5pdGlvbiA9IGdldERlZmluaXRpb24oY29tcG9uZW50LCBrZXksICJjaG9pY2UiKTsKKwkJU3RyaW5nW10gdmFsdWVzID0gKFN0cmluZ1tdKSBkZWZpbml0aW9uWzNdOworCQlpZiAoc2V0Q2hvaWNlKGNvbXBvbmVudCwgKFN0cmluZykgZGVmaW5pdGlvblsxXSwKKwkJCQl2YWx1ZSwgdmFsdWVzLCB2YWx1ZXNbMF0pKSB7CisJCQl1cGRhdGUoY29tcG9uZW50LCBkZWZpbml0aW9uWzJdKTsKKwkJfQorCX0KKworCS8qKgorCSAqCisJICovCisJcHVibGljIFN0cmluZyBnZXRDaG9pY2UoT2JqZWN0IGNvbXBvbmVudCwgU3RyaW5nIGtleSkgeworCQlPYmplY3RbXSBkZWZpbml0aW9uID0gZ2V0RGVmaW5pdGlvbihjb21wb25lbnQsIGtleSwgImNob2ljZSIpOworCQlyZXR1cm4gZ2V0U3RyaW5nKGNvbXBvbmVudCwgKFN0cmluZykgZGVmaW5pdGlvblsxXSwKKwkJCSgoU3RyaW5nW10pIGRlZmluaXRpb25bM10pWzBdKTsKKwl9CisKKwkvKioKKwkgKgorCSAqLworCXB1YmxpYyB2b2lkIHNldEJvb2xlYW4oT2JqZWN0IGNvbXBvbmVudCwgU3RyaW5nIGtleSwgYm9vbGVhbiB2YWx1ZSkgeworCQlPYmplY3RbXSBkZWZpbml0aW9uID0gZ2V0RGVmaW5pdGlvbihjb21wb25lbnQsIGtleSwgImJvb2xlYW4iKTsKKwkJaWYgKHNldEJvb2xlYW4oY29tcG9uZW50LCAoU3RyaW5nKSBkZWZpbml0aW9uWzFdLAorCQkJCXZhbHVlLCAoZGVmaW5pdGlvblszXSA9PSBCb29sZWFuLlRSVUUpKSkgeworCQkJdXBkYXRlKGNvbXBvbmVudCwgZGVmaW5pdGlvblsyXSk7CisJCX0KKwl9CisKKwkvKioKKwkgKgorCSAqLworCXB1YmxpYyBib29sZWFuIGdldEJvb2xlYW4oT2JqZWN0IGNvbXBvbmVudCwgU3RyaW5nIGtleSkgeworCQlPYmplY3RbXSBkZWZpbml0aW9uID0gZ2V0RGVmaW5pdGlvbihjb21wb25lbnQsIGtleSwgImJvb2xlYW4iKTsKKwkJcmV0dXJuIGdldEJvb2xlYW4oY29tcG9uZW50LCAoU3RyaW5nKSBkZWZpbml0aW9uWzFdLAorCQkJKGRlZmluaXRpb25bM10gPT0gQm9vbGVhbi5UUlVFKSk7CisJfQorCisJLyoqCisJICoKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRJbnRlZ2VyKE9iamVjdCBjb21wb25lbnQsIFN0cmluZyBrZXksIGludCB2YWx1ZSkgeworCQlPYmplY3RbXSBkZWZpbml0aW9uID0gZ2V0RGVmaW5pdGlvbihjb21wb25lbnQsIGtleSwgImludGVnZXIiKTsKKwkJaWYgKHNldEludGVnZXIoY29tcG9uZW50LCAoU3RyaW5nKSBkZWZpbml0aW9uWzFdLAorCQkJCXZhbHVlLCAoKEludGVnZXIpIGRlZmluaXRpb25bM10pLmludFZhbHVlKCkpKSB7CisJCQl1cGRhdGUoY29tcG9uZW50LCBkZWZpbml0aW9uWzJdKTsKKwkJfQorCX0KKworCS8qKgorCSAqCisJICovCisJcHVibGljIGludCBnZXRJbnRlZ2VyKE9iamVjdCBjb21wb25lbnQsIFN0cmluZyBrZXkpIHsKKwkJT2JqZWN0W10gZGVmaW5pdGlvbiA9IGdldERlZmluaXRpb24oY29tcG9uZW50LCBrZXksICJpbnRlZ2VyIik7CisJCXJldHVybiBnZXRJbnRlZ2VyKGNvbXBvbmVudCwgKFN0cmluZykgZGVmaW5pdGlvblsxXSwKKwkJCSgoSW50ZWdlcikgZGVmaW5pdGlvblszXSkuaW50VmFsdWUoKSk7CisJfQorCisJLyoqCisJICoKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRJY29uKE9iamVjdCBjb21wb25lbnQsIFN0cmluZyBrZXksIDxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICdJbWFnZSciPkltYWdlPC9lcnJvcj4gaWNvbikgeworCQlPYmplY3RbXSBkZWZpbml0aW9uID0gZ2V0RGVmaW5pdGlvbihjb21wb25lbnQsIGtleSwgImljb24iKTsKKwkJaWYgKHNldDxlcnJvciBkZXNjcj0iJ3NldChqYXZhLmxhbmcuT2JqZWN0LCBqYXZhLmxhbmcuT2JqZWN0LCBqYXZhLmxhbmcuT2JqZWN0KScgaW4gJ1RoaW5sZXQnIGNhbm5vdCBiZSBhcHBsaWVkIHRvICcoamF2YS5sYW5nLk9iamVjdCwgamF2YS5sYW5nLlN0cmluZywgSW1hZ2UpJyI+KGNvbXBvbmVudCwgKFN0cmluZykgZGVmaW5pdGlvblsxXSwgaWNvbik8L2Vycm9yPikgeworCQkJdXBkYXRlKGNvbXBvbmVudCwgZGVmaW5pdGlvblsyXSk7CisJCX0KKwl9CisKKwkvKioKKwkgKgorCSAqLworCXB1YmxpYyA8ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAnSW1hZ2UnIj5JbWFnZTwvZXJyb3I+IGdldEljb24oT2JqZWN0IGNvbXBvbmVudCwgU3RyaW5nIGtleSkgeworCQlPYmplY3RbXSBkZWZpbml0aW9uID0gZ2V0RGVmaW5pdGlvbihjb21wb25lbnQsIGtleSwgImljb24iKTsKKwkJcmV0dXJuIGdldEljb24oY29tcG9uZW50LCAoU3RyaW5nKSBkZWZpbml0aW9uWzFdLCAoPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ0ltYWdlJyI+SW1hZ2U8L2Vycm9yPikgZGVmaW5pdGlvblszXSk7CisJfQorCisJLyoqCisJICoKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRNZXRob2QoT2JqZWN0IGNvbXBvbmVudCwgU3RyaW5nIGtleSwgPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ01ldGhvZCciPk1ldGhvZDwvZXJyb3I+IG1ldGhvZCkgeyAvL2phdmEKKwkvL21pZHAgcHVibGljIHZvaWQgc2V0TWV0aG9kKE9iamVjdCBjb21wb25lbnQsIFN0cmluZyBrZXksIFN0cmluZyBtZXRob2QpIHsKKwkJT2JqZWN0W10gZGVmaW5pdGlvbiA9IGdldERlZmluaXRpb24oY29tcG9uZW50LCBrZXksICJtZXRob2QiKTsKKwkJaWYgKHNldDxlcnJvciBkZXNjcj0iJ3NldChqYXZhLmxhbmcuT2JqZWN0LCBqYXZhLmxhbmcuT2JqZWN0LCBqYXZhLmxhbmcuT2JqZWN0KScgaW4gJ1RoaW5sZXQnIGNhbm5vdCBiZSBhcHBsaWVkIHRvICcoamF2YS5sYW5nLk9iamVjdCwgamF2YS5sYW5nLlN0cmluZywgTWV0aG9kKSciPihjb21wb25lbnQsIChTdHJpbmcpIGRlZmluaXRpb25bMV0sIG1ldGhvZCk8L2Vycm9yPikgeworCQkJdXBkYXRlKGNvbXBvbmVudCwgZGVmaW5pdGlvblsyXSk7CisJCX0KKwl9CisKKwkvKioKKwkgKgorCSAqLworCXB1YmxpYyA8ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAnTWV0aG9kJyI+TWV0aG9kPC9lcnJvcj4gZ2V0TWV0aG9kKE9iamVjdCBjb21wb25lbnQsIFN0cmluZyBrZXkpIHsgLy9qYXZhCisJLy9taWRwIHB1YmxpYyBTdHJpbmcgZ2V0TWV0aG9kKE9iamVjdCBjb21wb25lbnQsIFN0cmluZyBrZXkpIHsKKwkJT2JqZWN0W10gZGVmaW5pdGlvbiA9IGdldERlZmluaXRpb24oY29tcG9uZW50LCBrZXksICJtZXRob2QiKTsKKwkJcmV0dXJuICg8ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAnTWV0aG9kJyI+TWV0aG9kPC9lcnJvcj4pIGdldChjb21wb25lbnQsIChTdHJpbmcpIGRlZmluaXRpb25bMV0pOyAvL2phdmEKKwkJLy9taWRwIHJldHVybiAoU3RyaW5nKSBnZXQoY29tcG9uZW50LCAoU3RyaW5nKSBkZWZpbml0aW9uWzFdKTsKKwl9CisKKwkvKioKKwkgKgorCSAqLworCXByaXZhdGUgdm9pZCB1cGRhdGUoT2JqZWN0IGNvbXBvbmVudCwgT2JqZWN0IG1vZGUpIHsKKwkJaWYgKCJwYXJlbnQiID09IG1vZGUpIHsKKwkJCWNvbXBvbmVudCA9IGdldFBhcmVudChjb21wb25lbnQpOworCQkJbW9kZSA9ICJ2YWxpZGF0ZSI7CisJCX0KKwkJYm9vbGVhbiBmaXJzdHBhaW50ID0gdHJ1ZTsKKwkJaW50IHggPSAwOyBpbnQgeSA9IDA7IGludCB3aWR0aCA9IDA7IGludCBoZWlnaHQgPSAwOworCQl3aGlsZSAoY29tcG9uZW50ICE9IG51bGwpIHsKKwkJCWlmICghZ2V0Qm9vbGVhbihjb21wb25lbnQsICJ2aXNpYmxlIiwgdHJ1ZSkpIHsgYnJlYWs7IH0KKwkJCWlmICgicGFpbnQiID09IG1vZGUpIHsvL3x8IChmaXJzdHBhaW50ICYmIChjb21wb25lbnQgPT0gY29udGVudCkpCisJCQkJPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ1JlY3RhbmdsZSciPlJlY3RhbmdsZTwvZXJyb3I+IGJvdW5kcyA9IGdldFJlY3RhbmdsZShjb21wb25lbnQsICJib3VuZHMiKTsKKwkJCQlpZiAoYm91bmRzID09IG51bGwpIHsgcmV0dXJuOyB9CisJCQkJaWYgKGZpcnN0cGFpbnQpIHsKKwkJCQkJeCA9IGJvdW5kcy48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAneCciPng8L2Vycm9yPjsgeSA9IGJvdW5kcy48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAneSciPnk8L2Vycm9yPjsKKwkJCQkJd2lkdGggPSBNYXRoLmFiczxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgbWV0aG9kICdhYnMoPyknIj4oYm91bmRzLjxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICd3aWR0aCciPndpZHRoPC9lcnJvcj4pPC9lcnJvcj47IGhlaWdodCA9IGJvdW5kcy48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAnaGVpZ2h0JyI+aGVpZ2h0PC9lcnJvcj47CisJCQkJCWZpcnN0cGFpbnQgPSBmYWxzZTsKKwkJCQl9IGVsc2UgeworCQkJCQl4ICs9IGJvdW5kcy48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAneCciPng8L2Vycm9yPjsgeSArPSBib3VuZHMuPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ3knIj55PC9lcnJvcj47CisJCQkJfQorCQkJCWlmIChjb21wb25lbnQgPT0gY29udGVudCkgeworCQkJCQlyZXBhaW50KHgsIHksIHdpZHRoLCBoZWlnaHQpOworCQkJCX0KKwkJCX0KKwkJCU9iamVjdCBwYXJlbnQgPSBnZXRQYXJlbnQoY29tcG9uZW50KTsKKwkJCVN0cmluZyBjbGFzc25hbWUgPSBnZXRDbGFzcyhwYXJlbnQpOworCQkJaWYgKCJjb21ib2JveCIgPT0gY2xhc3NuYW1lKSB7CisJCQkJcGFyZW50ID0gZ2V0KHBhcmVudCwgImNvbWJvbGlzdCIpOworCQkJfQorCQkJZWxzZSBpZiAoIm1lbnUiID09IGNsYXNzbmFtZSkgeworCQkJCXBhcmVudCA9IGdldChwYXJlbnQsICJwb3B1cG1lbnUiKTsKKwkJCX0KKwkJCWVsc2UgaWYgKCgicGFpbnQiID09IG1vZGUpICYmICgidGFiYmVkcGFuZSIgPT0gY2xhc3NuYW1lKSkgeworCQkJCWlmIChnZXRJdGVtSW1wbChwYXJlbnQsICJjb21wb25lbnQiLAorCQkJCQkJZ2V0SW50ZWdlcihwYXJlbnQsICJzZWxlY3RlZCIsIDApKSAhPSBjb21wb25lbnQpIHsgYnJlYWs7IH0KKwkJCX0KKwkJCWlmICgoImxheW91dCIgPT0gbW9kZSkgfHwgKCgidmFsaWRhdGUiID09IG1vZGUpICYmCisJCQkJCSgoImxpc3QiID09IGNsYXNzbmFtZSkgfHwgKCJ0YWJsZSIgPT0gY2xhc3NuYW1lKSB8fAorCQkJCQkoInRyZWUiID09IGNsYXNzbmFtZSkgfHwgKCJkaWFsb2ciID09IGNsYXNzbmFtZSkgfHwgKHBhcmVudCA9PSBjb250ZW50KSkpKSB7CisJCQkJPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ1JlY3RhbmdsZSciPlJlY3RhbmdsZTwvZXJyb3I+IGJvdW5kcyA9IGdldFJlY3RhbmdsZShwYXJlbnQsICJib3VuZHMiKTsKKwkJCQlpZiAoYm91bmRzID09IG51bGwpIHsgcmV0dXJuOyB9CisJCQkJYm91bmRzLjxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICd3aWR0aCciPndpZHRoPC9lcnJvcj4gPSAtMSAqIE1hdGguYWJzPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBtZXRob2QgJ2Ficyg/KSciPihib3VuZHMuPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ3dpZHRoJyI+d2lkdGg8L2Vycm9yPik8L2Vycm9yPjsKKwkJCQltb2RlID0gInBhaW50IjsKKwkJCX0KKwkJCWNvbXBvbmVudCA9IHBhcmVudDsKKwkJfQorCX0KKworCS8vIC0tLS0tIC0tLS0tIC0tLS0tIC0tLS0tIC0tLS0tIC0tLS0tIC0tLS0tIC0tLS0tIC0tLS0tIC0tLS0tIC0tLS0tIC0tLS0tCisKKwkvKioKKwkgKgorCSAqLworCXByaXZhdGUgYm9vbGVhbiBzZXRTdHJpbmcoT2JqZWN0IGNvbXBvbmVudCwKKwkJCVN0cmluZyBrZXksIFN0cmluZyB2YWx1ZSwgU3RyaW5nIGRlZmF1bHR2YWx1ZSkgeworCQkvKmJvb2xlYW4gY2hhbmdlZCA9IHNldChjb21wb25lbnQsIGtleSwgdmFsdWUpOworCQlpZiAoY2hhbmdlZCAmJiAoIm5hbWUiID09IGtleSkpIHsKKwkJCS8vZm9yIChDbGFzcyBjbHMgPSBnZXRDbGFzcygpOyBjbHMgIT0gbnVsbDsgY2xzID0gY2xzLmdldFN1cGVyY2xhc3MoKSkgeworCQkJRmllbGRbXSBmaWVsZHMgPSBnZXRDbGFzcygpLmdldERlY2xhcmVkRmllbGRzKCk7CisJCQlmb3IgKGludCBpID0gMDsgaSA8IGZpZWxkcy5sZW5ndGg7IGkrKykgeworCQkJCWlmICgoZmllbGRzW2ldLmdldFR5cGUoKSA9PSBPYmplY3QuY2xhc3MpICYmCisJCQkJCQlmaWVsZHNbaV0uZ2V0TmFtZSgpLmVxdWFscyh2YWx1ZSkpIHsKKwkJCQkJdHJ5IHsKKwkJCQkJCWZpZWxkc1tpXS5zZXQodGhpcywgY29tcG9uZW50KTsKKwkJCQkJCXJldHVybiB0cnVlOworCQkJCQl9IGNhdGNoIChJbGxlZ2FsQWNjZXNzRXhjZXB0aW9uIGlhZSkge30KKwkJCQl9CisJCQl9CisJCQkvL30KKwkJCXRyeSB7CisJCQkJZ2V0Q2xhc3MoKS5nZXRGaWVsZCh2YWx1ZSkuc2V0KHRoaXMsIGNvbXBvbmVudCk7CisJCQl9IGNhdGNoIChFeGNlcHRpb24gZXhjKSB7fQorCQl9CisJCXJldHVybiBjaGFuZ2VkOyovCisJCXJldHVybiBzZXQoY29tcG9uZW50LCBrZXksIHZhbHVlKTsKKwl9CisKKwkvKioKKwkgKgorCSAqLworCXByaXZhdGUgU3RyaW5nIGdldFN0cmluZyhPYmplY3QgY29tcG9uZW50LAorCQkJU3RyaW5nIGtleSwgU3RyaW5nIGRlZmF1bHR2YWx1ZSkgeworCQlPYmplY3QgdmFsdWUgPSBnZXQoY29tcG9uZW50LCBrZXkpOworCQlyZXR1cm4gKHZhbHVlID09IG51bGwpID8gZGVmYXVsdHZhbHVlIDogKFN0cmluZykgdmFsdWU7CisJfQorCisJLyoqCisJICoKKwkgKi8KKwlwcml2YXRlIGJvb2xlYW4gc2V0Q2hvaWNlKE9iamVjdCBjb21wb25lbnQsCisJCQlTdHJpbmcga2V5LCBTdHJpbmcgdmFsdWUsIFN0cmluZ1tdIHZhbHVlcywgU3RyaW5nIGRlZmF1bHR2YWx1ZSkgeworCQlpZiAodmFsdWUgPT0gbnVsbCkgeworCQkJcmV0dXJuIHNldChjb21wb25lbnQsIGtleSwgZGVmYXVsdHZhbHVlKTsKKwkJfQorCQlmb3IgKGludCBpID0gMDsgaSA8IHZhbHVlcy5sZW5ndGg7IGkrKykgeworCQkJaWYgKHZhbHVlLmVxdWFscyh2YWx1ZXNbaV0pKSB7CisJCQkJcmV0dXJuIHNldChjb21wb25lbnQsIGtleSwgdmFsdWVzW2ldKTsKKwkJCX0KKwkJfQorCQl0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJ1bmtub3duICIgKyB2YWx1ZSArICIgZm9yICIgKyBrZXkpOworCX0KKworCS8qKgorCSAqCisJICovCisJcHJpdmF0ZSBib29sZWFuIHNldEljb24oT2JqZWN0IGNvbXBvbmVudCwKKwkJCVN0cmluZyBrZXksIFN0cmluZyBwYXRoLCA8ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAnSW1hZ2UnIj5JbWFnZTwvZXJyb3I+IGRlZmF1bHR2YWx1ZSkgeworCQlyZXR1cm4gc2V0PGVycm9yIGRlc2NyPSInc2V0KGphdmEubGFuZy5PYmplY3QsIGphdmEubGFuZy5PYmplY3QsIGphdmEubGFuZy5PYmplY3QpJyBpbiAnVGhpbmxldCcgY2Fubm90IGJlIGFwcGxpZWQgdG8gJyhqYXZhLmxhbmcuT2JqZWN0LCBqYXZhLmxhbmcuU3RyaW5nLCBJbWFnZSknIj4oY29tcG9uZW50LCBrZXksIChwYXRoICE9IG51bGwpID8gZ2V0SWNvbihwYXRoKSA6IGRlZmF1bHR2YWx1ZSk8L2Vycm9yPjsKKwl9CisKKwkvKioKKwkgKgorCSAqLworCXByaXZhdGUgPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ0ltYWdlJyI+SW1hZ2U8L2Vycm9yPiBnZXRJY29uKE9iamVjdCBjb21wb25lbnQsIFN0cmluZyBrZXksIDxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICdJbWFnZSciPkltYWdlPC9lcnJvcj4gZGVmYXVsdHZhbHVlKSB7CisJCU9iamVjdCB2YWx1ZSA9IGdldChjb21wb25lbnQsIGtleSk7CisJCXJldHVybiAodmFsdWUgPT0gbnVsbCkgPyBkZWZhdWx0dmFsdWUgOiAoPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ0ltYWdlJyI+SW1hZ2U8L2Vycm9yPikgdmFsdWU7CisJfQorCisJLyoqCisJICoKKwkgKi8KKwlwcml2YXRlIGJvb2xlYW4gc2V0Qm9vbGVhbihPYmplY3QgY29tcG9uZW50LAorCQkJU3RyaW5nIGtleSwgYm9vbGVhbiB2YWx1ZSwgYm9vbGVhbiBkZWZhdWx0dmFsdWUpIHsKKwkJcmV0dXJuIHNldChjb21wb25lbnQsIGtleSwgKHZhbHVlID09IGRlZmF1bHR2YWx1ZSkgPyBudWxsIDoKKwkJCSh2YWx1ZSA/IEJvb2xlYW4uVFJVRSA6IEJvb2xlYW4uRkFMU0UpKTsKKwl9CisKKwkvKioKKwkgKgorCSAqLworCXByaXZhdGUgYm9vbGVhbiBnZXRCb29sZWFuKE9iamVjdCBjb21wb25lbnQsCisJCQlTdHJpbmcga2V5LCBib29sZWFuIGRlZmF1bHR2YWx1ZSkgeworCQlPYmplY3QgdmFsdWUgPSBnZXQoY29tcG9uZW50LCBrZXkpOworCQlyZXR1cm4gKHZhbHVlID09IG51bGwpID8gZGVmYXVsdHZhbHVlIDogKChCb29sZWFuKSB2YWx1ZSkuYm9vbGVhblZhbHVlKCk7CisJfQorCisJLyoqCisJICoKKwkgKi8KKwlwcml2YXRlIGJvb2xlYW4gc2V0SW50ZWdlcihPYmplY3QgY29tcG9uZW50LAorCQkJU3RyaW5nIGtleSwgaW50IHZhbHVlLCBpbnQgZGVmYXVsdHZhbHVlKSB7CisJCXJldHVybiBzZXQoY29tcG9uZW50LCBrZXksICh2YWx1ZSA9PSBkZWZhdWx0dmFsdWUpID8gbnVsbCA6IG5ldyBJbnRlZ2VyKHZhbHVlKSk7CisJfQorCisJLyoqCisJICoKKwkgKi8KKwlwcml2YXRlIGludCBnZXRJbnRlZ2VyKE9iamVjdCBjb21wb25lbnQsIFN0cmluZyBrZXksIGludCBkZWZhdWx0dmFsdWUpIHsKKwkJT2JqZWN0IHZhbHVlID0gZ2V0KGNvbXBvbmVudCwga2V5KTsKKwkJcmV0dXJuICh2YWx1ZSA9PSBudWxsKSA/IGRlZmF1bHR2YWx1ZSA6ICgoSW50ZWdlcikgdmFsdWUpLmludFZhbHVlKCk7CisJfQorCisJLyoqCisJICoKKwkgKi8KKwlwcml2YXRlIHZvaWQgc2V0UmVjdGFuZ2xlKE9iamVjdCBjb21wb25lbnQsCisJCQlTdHJpbmcga2V5LCBpbnQgeCwgaW50IHksIGludCB3aWR0aCwgaW50IGhlaWdodCkgeworCQk8ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAnUmVjdGFuZ2xlJyI+UmVjdGFuZ2xlPC9lcnJvcj4gcmVjdGFuZ2xlID0gZ2V0UmVjdGFuZ2xlKGNvbXBvbmVudCwga2V5KTsKKwkJaWYgKHJlY3RhbmdsZSAhPSBudWxsKSB7CisJCQlyZWN0YW5nbGUuPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ3gnIj54PC9lcnJvcj4gPSB4OyByZWN0YW5nbGUuPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ3knIj55PC9lcnJvcj4gPSB5OworCQkJcmVjdGFuZ2xlLjxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICd3aWR0aCciPndpZHRoPC9lcnJvcj4gPSB3aWR0aDsgcmVjdGFuZ2xlLjxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICdoZWlnaHQnIj5oZWlnaHQ8L2Vycm9yPiA9IGhlaWdodDsKKwkJfQorCQllbHNlIHsKKwkJCXNldChjb21wb25lbnQsIGtleSwgbmV3IDxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICdSZWN0YW5nbGUnIj5SZWN0YW5nbGU8L2Vycm9yPih4LCB5LCB3aWR0aCwgaGVpZ2h0KSk7IC8vamF2YQorCQkJLy9taWRwIHNldChjb21wb25lbnQsIGtleSwgbmV3IGludFtdIHsgd2lkdGgsIGhlaWdodCwgeCwgeSB9KTsKKwkJfQorCX0KKworCS8qKgorCSAqCisJICovCisJcHJpdmF0ZSA8ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAnUmVjdGFuZ2xlJyI+UmVjdGFuZ2xlPC9lcnJvcj4gZ2V0UmVjdGFuZ2xlKE9iamVjdCBjb21wb25lbnQsIFN0cmluZyBrZXkpIHsKKwkJcmV0dXJuICg8ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAnUmVjdGFuZ2xlJyI+UmVjdGFuZ2xlPC9lcnJvcj4pIGdldChjb21wb25lbnQsIGtleSk7IC8vamF2YQorCQkvL21pZHAgcmV0dXJuIChpbnRbXSkgZ2V0KGNvbXBvbmVudCwga2V5KTsKKwl9CisKKwkvLyAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLQorCisJLyoqCisJICoKKwkgKi8KKwlwdWJsaWMgPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ0ltYWdlJyI+SW1hZ2U8L2Vycm9yPiBnZXRJY29uKFN0cmluZyBwYXRoKSB7CisJCXJldHVybiBnZXRJY29uKHBhdGgsIHRydWUpOworCX0KKworCS8qKgorCSAqCisJICovCisJcHVibGljIDxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICdJbWFnZSciPkltYWdlPC9lcnJvcj4gZ2V0SWNvbihTdHJpbmcgcGF0aCwgYm9vbGVhbiBwcmVsb2FkKSB7CisJCWlmICgocGF0aCA9PSBudWxsKSB8fCAocGF0aC5sZW5ndGgoKSA9PSAwKSkgeworCQkJcmV0dXJuIG51bGw7CisJCX0KKwkJPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ0ltYWdlJyI+SW1hZ2U8L2Vycm9yPiBpbWFnZSA9IG51bGw7IC8vKEltYWdlKSBpbWFnZXBvb2wuZ2V0KHBhdGgpOworCQkvL21pZHAgdHJ5IHsKKwkJLy9taWRwIAlpbWFnZSA9IEltYWdlLmNyZWF0ZUltYWdlKHBhdGgpOworCQkvL21pZHAgfSBjYXRjaCAoSU9FeGNlcHRpb24gaW9lKSB7fQorCQkvL2phdmE+CisJCXRyeSB7CisJCQlpbWFnZSA9IDxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICdUb29sa2l0JyI+VG9vbGtpdDwvZXJyb3I+LmdldERlZmF1bHRUb29sa2l0KCkuZ2V0SW1hZ2UoZ2V0Q2xhc3MoKS5nZXRSZXNvdXJjZShwYXRoKSk7CisJCQkvL2ltYWdlID0gVG9vbGtpdC5nZXREZWZhdWx0VG9vbGtpdCgpLmdldEltYWdlKENsYXNzTG9hZGVyLmdldFN5c3RlbVJlc291cmNlKHBhdGgpKTsKKwkJfSBjYXRjaCAoVGhyb3dhYmxlIGUpIHt9CisJCWlmIChpbWFnZSA9PSBudWxsKSB7CisJCQl0cnkgeworCQkJCUlucHV0U3RyZWFtIGlzID0gZ2V0Q2xhc3MoKS5nZXRSZXNvdXJjZUFzU3RyZWFtKHBhdGgpOworCQkJCS8vSW5wdXRTdHJlYW0gaXMgPSBDbGFzc0xvYWRlci5nZXRTeXN0ZW1SZXNvdXJjZUFzU3RyZWFtKHBhdGgpOworCQkJCWlmIChpcyAhPSBudWxsKSB7CisJCQkJCWJ5dGVbXSBkYXRhID0gbmV3IGJ5dGVbaXMuYXZhaWxhYmxlKCldOworCQkJCQlpcy5yZWFkKGRhdGEsIDAsIGRhdGEubGVuZ3RoKTsKKwkJCQkJaW1hZ2UgPSBnZXRUb29sa2l0KCkuPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBtZXRob2QgJ2NyZWF0ZUltYWdlKGJ5dGVbXSknIj5jcmVhdGVJbWFnZTwvZXJyb3I+KGRhdGEpOworCQkJCQlpcy5jbG9zZSgpOworCQkJCX0KKwkJCX0gY2F0Y2ggKFRocm93YWJsZSBlKSB7fQorCQl9CisJCS8vaWYgKGltYWdlID09IG51bGwpIHsgLy8gYXBwbGV0IGNvZGUKKwkJLy8JdHJ5IHsKKwkJLy8JCWltYWdlID0gZ2V0SW1hZ2UoZ2V0Q29kZUJhc2UoKSwgcGF0aCk7CisJCS8vCX0gY2F0Y2ggKFRocm93YWJsZSBlKSB7fQorCQkvL30KKwkJaWYgKHByZWxvYWQgJiYgKGltYWdlICE9IG51bGwpKSB7CisJCQk8ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAnTWVkaWFUcmFja2VyJyI+TWVkaWFUcmFja2VyPC9lcnJvcj4gbWVkaWF0cmFja2VyID0gbmV3IDxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICdNZWRpYVRyYWNrZXInIj5NZWRpYVRyYWNrZXI8L2Vycm9yPih0aGlzKTsKKwkJCW1lZGlhdHJhY2tlci48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIG1ldGhvZCAnYWRkSW1hZ2UoSW1hZ2UsIGludCknIj5hZGRJbWFnZTwvZXJyb3I+KGltYWdlLCAxKTsKKwkJCXRyeSB7CisJCQkJbWVkaWF0cmFja2VyLjxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgbWV0aG9kICd3YWl0Rm9ySUQoaW50LCBpbnQpJyI+d2FpdEZvcklEPC9lcnJvcj4oMSwgNTApOworCQkJfSBjYXRjaCAoPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ0ludGVycnVwdGVkRXhjZXB0aW9uJyI+SW50ZXJydXB0ZWRFeGNlcHRpb248L2Vycm9yPiBpZSkgeyB9CisJCQkvL2ltYWdlcG9vbC5wdXQocGF0aCwgaW1hZ2UpOworCQl9CisJCS8vPGphdmEKKwkJcmV0dXJuIGltYWdlOworCX0KKworCS8qKgorCSAqCisJICovCisJcHVibGljIGJvb2xlYW4gZGVzdHJveSgpIHsKKwkJcmV0dXJuIHRydWU7CisJfQorCisJcHJpdmF0ZSBzdGF0aWMgT2JqZWN0W10gZHRkOworCXN0YXRpYyB7CisJCUludGVnZXIgaW50ZWdlcl8xID0gbmV3IEludGVnZXIoLTEpOworCQlJbnRlZ2VyIGludGVnZXIwID0gbmV3IEludGVnZXIoMCk7CisJCUludGVnZXIgaW50ZWdlcjEgPSBuZXcgSW50ZWdlcigxKTsKKwkJU3RyaW5nW10gb3JpZW50YXRpb24gPSB7ICJob3Jpem9udGFsIiwgInZlcnRpY2FsIiB9OworCQlTdHJpbmdbXSBsZWZ0Y2VudGVycmlnaHQgPSB7ICJsZWZ0IiwgImNlbnRlciIsICJyaWdodCIgfTsKKwkJU3RyaW5nW10gc2VsZWN0aW9ucyA9IHsgInNpbmdsZSIsICJpbnRlcnZhbCIsICJtdWx0aXBsZSIgfTsKKwkJZHRkID0gbmV3IE9iamVjdFtdIHsKKwkJCSJjb21wb25lbnQiLCBudWxsLCBuZXcgT2JqZWN0W11bXSB7CisJCQkJeyAic3RyaW5nIiwgIm5hbWUiLCAiIiwgbnVsbCB9LAorCQkJCXsgImJvb2xlYW4iLCAiZW5hYmxlZCIsICJwYWludCIsIEJvb2xlYW4uVFJVRSB9LAorCQkJCXsgImJvb2xlYW4iLCAidmlzaWJsZSIsICJwYXJlbnQiLCBCb29sZWFuLlRSVUUgfSwKKwkJCQl7ICJzdHJpbmciLCAidG9vbHRpcCIsICIiLCBudWxsIH0sCisJCQkJeyAiaW50ZWdlciIsICJ3aWR0aCIsICJ2YWxpZGF0ZSIsIGludGVnZXIwIH0sCisJCQkJeyAiaW50ZWdlciIsICJoZWlnaHQiLCAidmFsaWRhdGUiLCBpbnRlZ2VyMCB9LAorCQkJCXsgImludGVnZXIiLCAiY29sc3BhbiIsICJ2YWxpZGF0ZSIsIGludGVnZXIxIH0sCisJCQkJeyAiaW50ZWdlciIsICJyb3dzcGFuIiwgInZhbGlkYXRlIiwgaW50ZWdlcjEgfSwKKwkJCQl7ICJpbnRlZ2VyIiwgIndlaWdodHgiLCAidmFsaWRhdGUiLCBpbnRlZ2VyMCB9LAorCQkJCXsgImludGVnZXIiLCAid2VpZ2h0eSIsICJ2YWxpZGF0ZSIsIGludGVnZXIwIH0sCisJCQkJeyAiY2hvaWNlIiwgImhhbGlnbiIsICJ2YWxpZGF0ZSIsCisJCQkJCW5ldyBTdHJpbmdbXSB7ICJmaWxsIiwgImNlbnRlciIsICJsZWZ0IiwgInJpZ2h0IiB9IH0sCisJCQkJeyAiY2hvaWNlIiwgInZhbGlnbiIsICJ2YWxpZGF0ZSIsCisJCQkJCW5ldyBTdHJpbmdbXSB7ICJmaWxsIiwgImNlbnRlciIsICJ0b3AiLCAiYm90dG9tIiB9IH0KKwkJCQkvLyBjb21wb25lbnQgY2xhc3MgU3RyaW5nIG51bGwqCisJCQkJLy8gcGFyZW50IE9iamVjdCBudWxsCisJCQkJLy8gKGJvdW5kcykgUmVjdGFuZ2xlIDAgMCAwIDAKKwkJCX0sCisJCQkibGFiZWwiLCAiY29tcG9uZW50IiwgbmV3IE9iamVjdFtdW10geworCQkJCXsgInN0cmluZyIsICJ0ZXh0IiwgInZhbGlkYXRlIiwgbnVsbCB9LAorCQkJCXsgImljb24iLCAiaWNvbiIsICJ2YWxpZGF0ZSIsIG51bGwgfSwKKwkJCSAJeyAiY2hvaWNlIiwgImFsaWdubWVudCIsICJ2YWxpZGF0ZSIsIGxlZnRjZW50ZXJyaWdodCB9LAorCQkJIAl7ICJpbnRlZ2VyIiwgIm1uZW1vbmljIiwgInBhaW50IiwgaW50ZWdlcl8xIH0gfSwKKwkJCSJidXR0b24iLCAibGFiZWwiLCBuZXcgT2JqZWN0W11bXSB7CisJCQkgCXsgImNob2ljZSIsICJhbGlnbm1lbnQiLCAidmFsaWRhdGUiLCBuZXcgU3RyaW5nW10geyAiY2VudGVyIiwgImxlZnQiLCAicmlnaHQiIH0gfSwKKwkJCQl7ICJtZXRob2QiLCAiYWN0aW9uIiwgIiIsIG51bGwgfSwKKwkJCQkvL3sgImNob2ljZSIsICJ0eXBlIiwgIiIsIG5ldyBTdHJpbmdbXSB7ICJub3JtYWwiLCAiZGVmYXVsdCIsICJjYW5jZWwiIH0gfQorCQkJCX0sLy8uLi4KKwkJCSJjaGVja2JveCIsICJsYWJlbCIsIG5ldyBPYmplY3RbXVtdIHsKKwkJCQl7ICJib29sZWFuIiwgInNlbGVjdGVkIiwgInBhaW50IiwgQm9vbGVhbi5GQUxTRSB9LCAvLy4uLmdyb3VwCisJCQkJeyAic3RyaW5nIiwgImdyb3VwIiwgInBhaW50IiwgbnVsbCB9LCAvLy4uLmdyb3VwCisJCQkJeyAibWV0aG9kIiwgImFjdGlvbiIsICIiLCBudWxsIH0gfSwKKwkJCSJjb21ib2JveCIsICJ0ZXh0ZmllbGQiLCBuZXcgT2JqZWN0W11bXSB7CisJCQkJeyAiaWNvbiIsICJpY29uIiwgInZhbGlkYXRlIiwgbnVsbCB9LAorCQkJCXsgImludGVnZXIiLCAic2VsZWN0ZWQiLCAibGF5b3V0IiwgaW50ZWdlcl8xIH0gfSwKKwkJCSJjaG9pY2UiLCBudWxsLCBuZXcgT2JqZWN0W11bXSB7CisJCQkJeyAic3RyaW5nIiwgIm5hbWUiLCAiIiwgbnVsbCB9LAorCQkJCXsgImJvb2xlYW4iLCAiZW5hYmxlZCIsICJwYWludCIsIEJvb2xlYW4uVFJVRSB9LAorCQkJCXsgInN0cmluZyIsICJ0ZXh0IiwgIiIsIG51bGwgfSwKKwkJCQl7ICJpY29uIiwgImljb24iLCAiIiwgbnVsbCB9LAorCQkJCXsgImNob2ljZSIsICJhbGlnbm1lbnQiLCAiIiwgbGVmdGNlbnRlcnJpZ2h0IH0sCisJCQkJeyAic3RyaW5nIiwgInRvb2x0aXAiLCAiIiwgbnVsbCB9IH0sCisJCQkidGV4dGZpZWxkIiwgImNvbXBvbmVudCIsIG5ldyBPYmplY3RbXVtdIHsKKwkJCQl7ICJzdHJpbmciLCAidGV4dCIsICJsYXlvdXQiLCAiIiB9LAorCQkJCXsgImludGVnZXIiLCAiY29sdW1ucyIsICJ2YWxpZGF0ZSIsIGludGVnZXIwIH0sCisJCQkJeyAiYm9vbGVhbiIsICJlZGl0YWJsZSIsICJwYWludCIsIEJvb2xlYW4uVFJVRSB9LAorCQkJCXsgImludGVnZXIiLCAic3RhcnQiLCAibGF5b3V0IiwgaW50ZWdlcjAgfSwKKwkJCQl7ICJpbnRlZ2VyIiwgImVuZCIsICJsYXlvdXQiLCBpbnRlZ2VyMCB9LAorCQkJCXsgIm1ldGhvZCIsICJhY3Rpb24iLCAiIiwgbnVsbCB9IH0sCisJCQkicGFzc3dvcmRmaWVsZCIsICJ0ZXh0ZmllbGQiLCBuZXcgT2JqZWN0W11bXSB7fSwKKwkJCSJ0ZXh0YXJlYSIsICJ0ZXh0ZmllbGQiLCBuZXcgT2JqZWN0W11bXSB7CisJCQkJeyAiaW50ZWdlciIsICJyb3dzIiwgInZhbGlkYXRlIiwgaW50ZWdlcjAgfSwKKwkJCQl7ICJib29sZWFuIiwgIndyYXAiLCAibGF5b3V0IiwgQm9vbGVhbi5GQUxTRSB9IH0sCisJCQkidGFiYmVkcGFuZSIsICJjb21wb25lbnQiLCBuZXcgT2JqZWN0W11bXSB7CisJCQkJeyAiY2hvaWNlIiwgInBsYWNlbWVudCIsICJ2YWxpZGF0ZSIsCisJCQkJCW5ldyBTdHJpbmdbXSB7ICJ0b3AiLCAibGVmdCIsICJib3R0b20iLCAicmlnaHQiIH0gfSwKKwkJCQl7ICJpbnRlZ2VyIiwgInNlbGVjdGVkIiwgInBhaW50IiwgaW50ZWdlcjAgfSwKKwkJCQl7ICJtZXRob2QiLCAiYWN0aW9uIiwgIiIsIG51bGwgfSB9LCAvLy4uLmZvY3VzCisJCQkidGFiIiwgImNob2ljZSIsIG5ldyBPYmplY3RbXVtdIHsKKwkJCQl7ICJpbnRlZ2VyIiwgIm1uZW1vbmljIiwgInBhaW50IiwgaW50ZWdlcl8xIH0gfSwKKwkJCSJwYW5lbCIsICJjb21wb25lbnQiLCBuZXcgT2JqZWN0W11bXSB7CisJCQkJeyAiaW50ZWdlciIsICJjb2x1bW5zIiwgInZhbGlkYXRlIiwgaW50ZWdlcjAgfSwKKwkJCQl7ICJpbnRlZ2VyIiwgInRvcCIsICJ2YWxpZGF0ZSIsIGludGVnZXIwIH0sCisJCQkJeyAiaW50ZWdlciIsICJsZWZ0IiwgInZhbGlkYXRlIiwgaW50ZWdlcjAgfSwKKwkJCQl7ICJpbnRlZ2VyIiwgImJvdHRvbSIsICJ2YWxpZGF0ZSIsIGludGVnZXIwIH0sCisJCQkJeyAiaW50ZWdlciIsICJyaWdodCIsICJ2YWxpZGF0ZSIsIGludGVnZXIwIH0sCisJCQkJeyAiaW50ZWdlciIsICJnYXAiLCAidmFsaWRhdGUiLCBpbnRlZ2VyMCB9IH0sCisJCQkiZGVza3RvcCIsICJjb21wb25lbnQiLCBuZXcgT2JqZWN0W11bXSB7fSwKKwkJCSJkaWFsb2ciLCAicGFuZWwiLCBuZXcgT2JqZWN0W11bXSB7CisJCQkJeyAic3RyaW5nIiwgInRleHQiLCAiIiwgbnVsbCB9LAorCQkJCXsgImljb24iLCAiaWNvbiIsICIiLCBudWxsIH0sCisJCQkJeyAiYm9vbGVhbiIsICJtb2RhbCIsICIiLCBCb29sZWFuLkZBTFNFIH0gfSwKKwkJCSJzcGluYm94IiwgInRleHRmaWVsZCIsIG5ldyBPYmplY3RbXVtdIHt9LCAvLy4uLgorCQkJInByb2dyZXNzYmFyIiwgImNvbXBvbmVudCIsIG5ldyBPYmplY3RbXVtdIHsKKwkJCQl7ICJjaG9pY2UiLCAib3JpZW50YXRpb24iLCAidmFsaWRhdGUiLCBvcmllbnRhdGlvbiB9LAorCQkJCXsgImludGVnZXIiLCAibWluaW11bSIsICJwYWludCIsIGludGVnZXIwIH0sIC8vLi4uY2hlY2t2YWx1ZQorCQkJCXsgImludGVnZXIiLCAibWF4aW11bSIsICJwYWludCIsIG5ldyBJbnRlZ2VyKDEwMCkgfSwKKwkJCQl7ICJpbnRlZ2VyIiwgInZhbHVlIiwgInBhaW50IiwgaW50ZWdlcjAgfSB9LAorCQkJCS8vIGNoYW5nZSBzdHJpbmdwYWludGVkCisJCQkic2xpZGVyIiwgInByb2dyZXNzYmFyIiwgbmV3IE9iamVjdFtdW10geworCQkJCXsgImludGVnZXIiLCAidW5pdCIsICIiLCBuZXcgSW50ZWdlcig1KSB9LAorCQkJCXsgImludGVnZXIiLCAiYmxvY2siLCAiIiwgbmV3IEludGVnZXIoMjUpIH0sCisJCQkJeyAibWV0aG9kIiwgImFjdGlvbiIsICIiLCBudWxsIH0gfSwKKwkJCQkvLyBtaW5vci9tYWpvcnRpY2tzcGFjaW5nCisJCQkJLy8gaW52ZXJ0ZWQKKwkJCQkvLyBsYWJlbGluY3JlbWVudCBsYWJlbHN0YXJ0CisJCQkic3BsaXRwYW5lIiwgImNvbXBvbmVudCIsIG5ldyBPYmplY3RbXVtdIHsKKwkJCQl7ICJjaG9pY2UiLCAib3JpZW50YXRpb24iLCAidmFsaWRhdGUiLCBvcmllbnRhdGlvbiB9LAorCQkJCXsgImludGVnZXIiLCAiZGl2aWRlciIsICJsYXlvdXQiLCBpbnRlZ2VyXzEgfSB9LAorCQkJImxpc3QiLCAiY29tcG9uZW50IiwgbmV3IE9iamVjdFtdW10geworCQkJCXsgImNob2ljZSIsICJzZWxlY3Rpb24iLCAicGFpbnQiLCBzZWxlY3Rpb25zIH0sCisJCQkJeyAibWV0aG9kIiwgImFjdGlvbiIsICIiLCBudWxsIH0gfSwgLy8uLi4/CisJCQkiaXRlbSIsICJjaG9pY2UiLCBuZXcgT2JqZWN0W11bXSB7CisJCQkJeyAiYm9vbGVhbiIsICJzZWxlY3RlZCIsICIiLCBCb29sZWFuLkZBTFNFIH0gfSwKKwkJCSJ0YWJsZSIsICJjb21wb25lbnQiLCBuZXcgT2JqZWN0W11bXSB7CisJCQkJeyAiY2hvaWNlIiwgInNlbGVjdGlvbiIsICJwYWludCIsIHNlbGVjdGlvbnMgfSwKKwkJCQl7ICJtZXRob2QiLCAiYWN0aW9uIiwgIiIsIG51bGwgfQorCQkJCS8qeyAiY2hvaWNlIiwgInNlbGVjdGlvbiIsCisJCQkJCW5ldyBTdHJpbmdbXSB7ICJzaW5nbGVyb3ciLCAicm93aW50ZXJ2YWwiLCAibXVsdGlwbGVyb3ciLAorCQkJCQkJImNlbGwiLCAiY2VsbGludGVydmFsIiwKKwkJCQkJCSJzaW5nbGVjb2x1bW4iLCAiY29sdW1uaW50ZXJ2YWwiLCAibXVsdGlwbGVjb2x1bW4iIH0gfSovIH0sCisJCQkiY29sdW1uIiwgImNob2ljZSIsIG5ldyBPYmplY3RbXVtdIHsKKwkJCQl7ICJpbnRlZ2VyIiwgIndpZHRoIiwgIiIsIG5ldyBJbnRlZ2VyKDgwKSB9fSwKKwkJCSJyb3ciLCBudWxsLCBuZXcgT2JqZWN0W11bXSB7CisJCQkJeyAiYm9vbGVhbiIsICJzZWxlY3RlZCIsICIiLCBCb29sZWFuLkZBTFNFIH0gfSwKKwkJCSJjZWxsIiwgImNob2ljZSIsIG5ldyBPYmplY3RbXVtdIHt9LAorCQkJInRyZWUiLCAiY29tcG9uZW50IiwgbmV3IE9iamVjdFtdW10geworCQkJCXsgImNob2ljZSIsICJzZWxlY3Rpb24iLCAicGFpbnQiLCBzZWxlY3Rpb25zIH0sCisJCQkJeyAibWV0aG9kIiwgImFjdGlvbiIsICIiLCBudWxsIH0sCisJCQkJeyAibWV0aG9kIiwgImV4cGFuZCIsICIiLCBudWxsIH0sCisJCQkJeyAibWV0aG9kIiwgImNvbGxhcHNlIiwgIiIsIG51bGwgfSB9LAorCQkJIm5vZGUiLCAiY2hvaWNlIiwgbmV3IE9iamVjdFtdW10geworCQkJCXsgImJvb2xlYW4iLCAic2VsZWN0ZWQiLCAiIiwgQm9vbGVhbi5GQUxTRSB9LAorCQkJCXsgImJvb2xlYW4iLCAiZXhwYW5kZWQiLCAiIiwgQm9vbGVhbi5UUlVFIH0gfSwKKwkJCSJzZXBhcmF0b3IiLCAiY29tcG9uZW50IiwgbmV3IE9iamVjdFtdW10ge30sCisJCQkibWVudWJhciIsICJjb21wb25lbnQiLCBuZXcgT2JqZWN0W11bXSB7fSwKKwkJCSJtZW51IiwgImNob2ljZSIsIG5ldyBPYmplY3RbXVtdIHsKKwkJCQl7ICJpbnRlZ2VyIiwgIm1uZW1vbmljIiwgInBhaW50IiwgaW50ZWdlcl8xIH0gfSwKKwkJCSJtZW51aXRlbSIsICJjaG9pY2UiLCBuZXcgT2JqZWN0W11bXSB7CisJCQkJeyAic3RyaW5nIiwgImFjY2VsZXJhdG9yIiwgIiIsIG51bGwgfSwKKwkJCQl7ICJtZXRob2QiLCAiYWN0aW9uIiwgIiIsIG51bGwgfSwKKwkJCQl7ICJpbnRlZ2VyIiwgIm1uZW1vbmljIiwgInBhaW50IiwgaW50ZWdlcl8xIH0KKwkJCQkvLy4uLiBLZXlTdHJva2U9a2V5Q29kZSttb2RpZmllcnMoU0hJRlQgQ1RSTCBNRVRBIEFMVF9NQVNLKQorCQkJfSwKKwkJCSJjaGVja2JveG1lbnVpdGVtIiwgIm1lbnVpdGVtIiwgbmV3IE9iamVjdFtdW10geworCQkJCXsgImJvb2xlYW4iLCAic2VsZWN0ZWQiLCAicGFpbnQiLCBCb29sZWFuLkZBTFNFIH0sIC8vLi4uZ3JvdXAKKwkJCQl7ICJzdHJpbmciLCAiZ3JvdXAiLCAicGFpbnQiLCBudWxsIH0gfSwgLy8uLi5ncm91cAorCQkJImJlYW4iLCAiY29tcG9uZW50IiwgbmV3IE9iamVjdFtdW10geworCQkJCXsgImJlYW4iLCAiYmVhbiIsICIiLCBudWxsIH0KKwkJCX0KKwkJfTsKKwl9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZy9hY2Nlc3NMZXZlbC9lZmZlY3RpdmVBY2Nlc3MvcDIvcDIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nL2FjY2Vzc0xldmVsL2VmZmVjdGl2ZUFjY2Vzcy9wMi9wMi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjViZjExMTMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZy9hY2Nlc3NMZXZlbC9lZmZlY3RpdmVBY2Nlc3MvcDIvcDIuamF2YQpAQCAtMCwwICsxLDE1IEBACitwYWNrYWdlIGVmZmVjdGl2ZUFjY2Vzcy5wMjsKKworaW1wb3J0IGVmZmVjdGl2ZUFjY2Vzcy5wcHA7CisKKy8qKgorICogQ3JlYXRlZCBieSBJbnRlbGxpSiBJREVBLgorICogVXNlcjogY2RyCisgKiBEYXRlOiBKYW4gMjQsIDIwMDMKKyAqIFRpbWU6IDM6MTM6NDkgUE0KKyAqIFRvIGNoYW5nZSB0aGlzIHRlbXBsYXRlIHVzZSBPcHRpb25zIHwgRmlsZSBUZW1wbGF0ZXMuCisgKi8KK3B1YmxpYyBjbGFzcyBwMiBleHRlbmRzIHBwcCB7CisgIHByb3RlY3RlZCB2b2lkIGYoKSB7CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nL2FjY2Vzc0xldmVsL2VmZmVjdGl2ZUFjY2Vzcy9wMi9wMy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmcvYWNjZXNzTGV2ZWwvZWZmZWN0aXZlQWNjZXNzL3AyL3AzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWI3NDI0OQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nL2FjY2Vzc0xldmVsL2VmZmVjdGl2ZUFjY2Vzcy9wMi9wMy5qYXZhCkBAIC0wLDAgKzEsMTcgQEAKK3BhY2thZ2UgZWZmZWN0aXZlQWNjZXNzLnAyOworCitwdWJsaWMgY2xhc3MgcDMgZXh0ZW5kcyBwMiB7Cit9CisKKzxlcnJvciBkZXNjcj0iQ2xhc3MgJ3A0JyBtdXN0IGVpdGhlciBiZSBkZWNsYXJlZCBhYnN0cmFjdCBvciBpbXBsZW1lbnQgYWJzdHJhY3QgbWV0aG9kICdmKCknIGluICdwcCciPmNsYXNzIHA0IGV4dGVuZHMgZWZmZWN0aXZlQWNjZXNzLnBwPC9lcnJvcj4geworICBwdWJsaWMgdm9pZCBmKCkge30KK30KKworY2xhc3MgcGRlcml2ZWQgZXh0ZW5kcyBwMiB7CisgIHByb3RlY3RlZCB2b2lkIGYoKSB7CisgICAgc3VwZXIuZigpOworICB9CisgIHByb3RlY3RlZCB2b2lkIHYoKSB7CisgICAgc3VwZXIudigpOworICB9Cit9IApkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmcvYWNjZXNzTGV2ZWwvZWZmZWN0aXZlQWNjZXNzL3BwLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZy9hY2Nlc3NMZXZlbC9lZmZlY3RpdmVBY2Nlc3MvcHAuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NjA3MmYyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmcvYWNjZXNzTGV2ZWwvZWZmZWN0aXZlQWNjZXNzL3BwLmphdmEKQEAgLTAsMCArMSwxMiBAQAorcGFja2FnZSBlZmZlY3RpdmVBY2Nlc3M7CisKKy8qKgorICogQ3JlYXRlZCBieSBJbnRlbGxpSiBJREVBLgorICogVXNlcjogY2RyCisgKiBEYXRlOiBKYW4gMjQsIDIwMDMKKyAqIFRpbWU6IDM6MTI6MDkgUE0KKyAqIFRvIGNoYW5nZSB0aGlzIHRlbXBsYXRlIHVzZSBPcHRpb25zIHwgRmlsZSBUZW1wbGF0ZXMuCisgKi8KK3B1YmxpYyBhYnN0cmFjdCBjbGFzcyBwcCB7CisgIGFic3RyYWN0IHZvaWQgZigpOworfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmcvYWNjZXNzTGV2ZWwvZWZmZWN0aXZlQWNjZXNzL3BwcC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmcvYWNjZXNzTGV2ZWwvZWZmZWN0aXZlQWNjZXNzL3BwcC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZjOTNlNzYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZy9hY2Nlc3NMZXZlbC9lZmZlY3RpdmVBY2Nlc3MvcHBwLmphdmEKQEAgLTAsMCArMSwxMyBAQAorcGFja2FnZSBlZmZlY3RpdmVBY2Nlc3M7CisKKy8qKgorICogQ3JlYXRlZCBieSBJbnRlbGxpSiBJREVBLgorICogVXNlcjogY2RyCisgKiBEYXRlOiBKYW4gMjQsIDIwMDMKKyAqIFRpbWU6IDM6MTM6MDkgUE0KKyAqIFRvIGNoYW5nZSB0aGlzIHRlbXBsYXRlIHVzZSBPcHRpb25zIHwgRmlsZSBUZW1wbGF0ZXMuCisgKi8KK3B1YmxpYyBhYnN0cmFjdCBjbGFzcyBwcHAgZXh0ZW5kcyBwcCB7CisgIGFic3RyYWN0IHByb3RlY3RlZCB2b2lkIGYoKTsKKyAgcHJvdGVjdGVkIHZvaWQgdigpIHt9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZy9hY2Nlc3NpYmxlTWVtYmVyL2NvbS9ibHVlL0Jhc2UuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nL2FjY2Vzc2libGVNZW1iZXIvY29tL2JsdWUvQmFzZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNiOWI0NjcKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZy9hY2Nlc3NpYmxlTWVtYmVyL2NvbS9ibHVlL0Jhc2UuamF2YQpAQCAtMCwwICsxLDUgQEAKK3BhY2thZ2UgY29tLmJsdWU7CisKK3B1YmxpYyBjbGFzcyBCYXNlIHsKKyAgcHVibGljIHZvaWQgZm9vKCkge30KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZy9hY2Nlc3NpYmxlTWVtYmVyL2NvbS9ibHVlL0Jhc2VDb21wb25lbnQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nL2FjY2Vzc2libGVNZW1iZXIvY29tL2JsdWUvQmFzZUNvbXBvbmVudC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFmNWRhMTYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZy9hY2Nlc3NpYmxlTWVtYmVyL2NvbS9ibHVlL0Jhc2VDb21wb25lbnQuamF2YQpAQCAtMCwwICsxLDggQEAKK3BhY2thZ2UgY29tLmJsdWU7CisKK3B1YmxpYyBjbGFzcyBCYXNlQ29tcG9uZW50IHsKKworICAgIHByb3RlY3RlZCBjbGFzcyBIZWFkZXIgZXh0ZW5kcyBCYXNlIHsKKyAgICB9CisKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nL2FjY2Vzc2libGVNZW1iZXIvY29tL3JlZC9CLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZy9hY2Nlc3NpYmxlTWVtYmVyL2NvbS9yZWQvQi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ4ZDY0MzEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZy9hY2Nlc3NpYmxlTWVtYmVyL2NvbS9yZWQvQi5qYXZhCkBAIC0wLDAgKzEsMTEgQEAKK3BhY2thZ2UgY29tLnJlZDsKKworaW1wb3J0IGNvbS5ibHVlLkJhc2VDb21wb25lbnQ7CisKK3B1YmxpYyBjbGFzcyBCIGV4dGVuZHMgQmFzZUNvbXBvbmVudCB7CisKKyAgICBwdWJsaWMgSGVhZGVyIGdldEhlYWRlcigpIHsKKyAgICAgICAgcmV0dXJuIG51bGw7CisgICAgfQorCit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZy9hY2Nlc3NpYmxlTWVtYmVyL2NvbS9yZWQvQy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmcvYWNjZXNzaWJsZU1lbWJlci9jb20vcmVkL0MuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OTYyZGY4Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmcvYWNjZXNzaWJsZU1lbWJlci9jb20vcmVkL0MuamF2YQpAQCAtMCwwICsxLDcgQEAKK3BhY2thZ2UgY29tLnJlZDsKKworcHVibGljIGNsYXNzIEMgZXh0ZW5kcyBCIHsKKyAgICBwcm90ZWN0ZWQgdm9pZCBhZGQoQiBub2RlR3JpZCkgeworICAgICAgICBub2RlR3JpZC5nZXRIZWFkZXIoKS5mb28oKTsgLy8gbm8gZXJyb3IgaGVyZSBzaW5jZSB3ZSBhcmUgY2hlY2tpbmcgZ2V0SGVhZGVyKCkgbWV0aG9kIGFjY2Vzc2liaWxpdHkgcmF0aGVyIHRoYW4gSGVhZGVyIGNsYXNzCisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmcvYWxyZWFkeUltcG9ydGVkQ2xhc3MvcGFjay9BbHJlYWR5SW1wb3J0ZWRDbGFzcy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmcvYWxyZWFkeUltcG9ydGVkQ2xhc3MvcGFjay9BbHJlYWR5SW1wb3J0ZWRDbGFzcy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhlM2IyZmQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZy9hbHJlYWR5SW1wb3J0ZWRDbGFzcy9wYWNrL0FscmVhZHlJbXBvcnRlZENsYXNzLmphdmEKQEAgLTAsMCArMSwxMiBAQAorcGFja2FnZSBwYWNrOworCitpbXBvcnQgamF2YS51dGlsLkRhdGU7CitpbXBvcnQgcGFjay5teTsKKworY2xhc3MgPGVycm9yIGRlc2NyPSInRGF0ZScgaXMgYWxyZWFkeSBkZWZpbmVkIGluIHRoaXMgY29tcGlsYXRpb24gdW5pdCI+RGF0ZTwvZXJyb3I+IHsKK30KKworY2xhc3MgbXkgeworICBjbGFzcyBEYXRlIGV4dGVuZHMgamF2YS51dGlsLkRhdGUgeworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmcvYXJyYXlMZW5ndGgvcC9UZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZy9hcnJheUxlbmd0aC9wL1Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNjRjYzM5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmcvYXJyYXlMZW5ndGgvcC9UZXN0LmphdmEKQEAgLTAsMCArMSw2IEBACitwYWNrYWdlIHA7CitwdWJsaWMgY2xhc3MgVGVzdCB7CisgICAgcHJvdGVjdGVkIGNsYXNzIElubmVyIHt9CisKKyAgICBwcm90ZWN0ZWQgSW5uZXJbXSBzdHJpbmdzID0gbmV3IElubmVyWzEwXTsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZy9hcnJheUxlbmd0aC9wMi9TdWJUZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZy9hcnJheUxlbmd0aC9wMi9TdWJUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGI3ZjAxMAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nL2FycmF5TGVuZ3RoL3AyL1N1YlRlc3QuamF2YQpAQCAtMCwwICsxLDEwIEBACitwYWNrYWdlIHAyOworCitpbXBvcnQgcC5UZXN0OworCitwdWJsaWMgY2xhc3MgU3ViVGVzdCBleHRlbmRzIFRlc3Qgewordm9pZCBmb28oKSB7CitTeXN0ZW0ub3V0LnByaW50bG4oc3RyaW5ncy5sZW5ndGgpOworLy8gIkNhbm5vdCBhY2Nlc3MgJ2xlbmd0aCcgaW4gJ19EdW1teV8uX19BcnJheV9fJyIgd2FybmluZyBoZXJlCit9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZy9kdXBsaWNhdGVDbGFzcy9BLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZy9kdXBsaWNhdGVDbGFzcy9BLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2M2YTlkYQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nL2R1cGxpY2F0ZUNsYXNzL0EuamF2YQpAQCAtMCwwICsxLDYgQEAKK3BhY2thZ2UgZHVwbGljYXRlQ2xhc3M7CisKKy8vIGFjdHVhbCBlcnJvciB0ZXh0IGRlcGVuZHMgb24gdGVtcG9yYXJ5IGRpciBsb2NhdGlvbgorCis8ZXJyb3I+Y2xhc3MgRm9vPC9lcnJvcj4geworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nL2R1cGxpY2F0ZUNsYXNzL0IuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nL2R1cGxpY2F0ZUNsYXNzL0IuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZDU5NjAwCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmcvZHVwbGljYXRlQ2xhc3MvQi5qYXZhCkBAIC0wLDAgKzEsNCBAQAorcGFja2FnZSBkdXBsaWNhdGVDbGFzczsKKworY2xhc3MgRm9vIHsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZy9kdXBsaWNhdGVDbGFzcy9qYXZhL2xhbmcvUnVubmFibGUuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nL2R1cGxpY2F0ZUNsYXNzL2phdmEvbGFuZy9SdW5uYWJsZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIzNDhiMTcKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZy9kdXBsaWNhdGVDbGFzcy9qYXZhL2xhbmcvUnVubmFibGUuamF2YQpAQCAtMCwwICsxLDcgQEAKKworLy8gc2hvdWxkIG5vdCBjb250ZW5kIHdpdGggUnVubmFibGUgZnJvbSBydC5qYXIKKworcGFja2FnZSBqYXZhLmxhbmc7CisKK3B1YmxpYyBjbGFzcyBSdW5uYWJsZSB7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmcvZm9yZWlnblBhY2thZ2VJbkJldHdlZW4vYS9BMS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmcvZm9yZWlnblBhY2thZ2VJbkJldHdlZW4vYS9BMS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjNTgxOWUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZy9mb3JlaWduUGFja2FnZUluQmV0d2Vlbi9hL0ExLmphdmEKQEAgLTAsMCArMSwxMSBAQAorcGFja2FnZSBhOworCitpbXBvcnQgYi5COworCitjbGFzcyBBMSB7CisKKyAgeworICAgIG5ldyBCKCkuPGVycm9yIGRlc2NyPSInZigpJyBpcyBub3QgcHVibGljIGluICdhLkEyJy4gQ2Fubm90IGJlIGFjY2Vzc2VkIGZyb20gb3V0c2lkZSBwYWNrYWdlIj5mPC9lcnJvcj4oKTsKKyAgfQorCit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmcvZm9yZWlnblBhY2thZ2VJbkJldHdlZW4vYS9BMi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmcvZm9yZWlnblBhY2thZ2VJbkJldHdlZW4vYS9BMi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFmNDFlNzgKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZy9mb3JlaWduUGFja2FnZUluQmV0d2Vlbi9hL0EyLmphdmEKQEAgLTAsMCArMSw4IEBACitwYWNrYWdlIGE7CisKK3B1YmxpYyBjbGFzcyBBMiB7CisKKyAgdm9pZCBmKCkgeworICB9CisKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZy9mb3JlaWduUGFja2FnZUluQmV0d2Vlbi9iL0IuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nL2ZvcmVpZ25QYWNrYWdlSW5CZXR3ZWVuL2IvQi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI4OTllOTUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZy9mb3JlaWduUGFja2FnZUluQmV0d2Vlbi9iL0IuamF2YQpAQCAtMCwwICsxLDcgQEAKK3BhY2thZ2UgYjsKKworaW1wb3J0IGEuQTI7CisKK3B1YmxpYyBjbGFzcyBCIGV4dGVuZHMgQTIgeworCit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmcvaW1wb3J0RGVmYXVsdFBhY2thZ2UvVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmcvaW1wb3J0RGVmYXVsdFBhY2thZ2UvVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY0ZjE3YjMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZy9pbXBvcnREZWZhdWx0UGFja2FnZS9UZXN0LmphdmEKQEAgLTAsMCArMSw0IEBACitwdWJsaWMgY2xhc3MgVGVzdCB7CisgIHB1YmxpYyBUZXN0KGludCBpKSB7CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nL2ltcG9ydERlZmF1bHRQYWNrYWdlL3gvSW1wb3J0T25EZW1hbmRVc2FnZS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmcvaW1wb3J0RGVmYXVsdFBhY2thZ2UveC9JbXBvcnRPbkRlbWFuZFVzYWdlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGUyNjk1MQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nL2ltcG9ydERlZmF1bHRQYWNrYWdlL3gvSW1wb3J0T25EZW1hbmRVc2FnZS5qYXZhCkBAIC0wLDAgKzEsNyBAQAorcGFja2FnZSB4OworCitpbXBvcnQgeC5uLio7CisKK2NsYXNzIEZvb3MyIHsKKyAgVGVzdCB0ID0gbmV3IFRlc3QoKTsKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nL2ltcG9ydERlZmF1bHRQYWNrYWdlL3gvSW52YWxpZFVzZS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmcvaW1wb3J0RGVmYXVsdFBhY2thZ2UveC9JbnZhbGlkVXNlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjAyMDI1OQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nL2ltcG9ydERlZmF1bHRQYWNrYWdlL3gvSW52YWxpZFVzZS5qYXZhCkBAIC0wLDAgKzEsNSBAQAorcGFja2FnZSB4OworCitjbGFzcyBJbnZhbGlkVXNlIHsKKyAgPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ1Rlc3QnIj5UZXN0PC9lcnJvcj4gdCA9IG51bGw7Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZy9pbXBvcnREZWZhdWx0UGFja2FnZS94L1VzYWdlLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZy9pbXBvcnREZWZhdWx0UGFja2FnZS94L1VzYWdlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2ZmMjY5YgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nL2ltcG9ydERlZmF1bHRQYWNrYWdlL3gvVXNhZ2UuamF2YQpAQCAtMCwwICsxLDcgQEAKK3BhY2thZ2UgeDsKKworaW1wb3J0IHgubi5UZXN0OworCitjbGFzcyBGb29zIHsKKyAgVGVzdCB0ID0gbmV3IFRlc3QoKTsKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nL2ltcG9ydERlZmF1bHRQYWNrYWdlL3gvbi9UZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZy9pbXBvcnREZWZhdWx0UGFja2FnZS94L24vVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkwMGZlNTkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZy9pbXBvcnREZWZhdWx0UGFja2FnZS94L24vVGVzdC5qYXZhCkBAIC0wLDAgKzEsMiBAQAorcGFja2FnZSB4Lm47CitwdWJsaWMgY2xhc3MgVGVzdCB7fQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmcvaW1wb3J0T25EZW1hbmQveDEvWDEuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nL2ltcG9ydE9uRGVtYW5kL3gxL1gxLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDM2ZjFmYwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nL2ltcG9ydE9uRGVtYW5kL3gxL1gxLmphdmEKQEAgLTAsMCArMSwyIEBACitwYWNrYWdlIHgxOworcHVibGljIGNsYXNzIFgxIHt9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmcvaW1wb3J0T25EZW1hbmQveDIvWDEuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nL2ltcG9ydE9uRGVtYW5kL3gyL1gxLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2ZhZmNiOQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nL2ltcG9ydE9uRGVtYW5kL3gyL1gxLmphdmEKQEAgLTAsMCArMSwyIEBACitwYWNrYWdlIHgyOworcHVibGljIGNsYXNzIFgxIHt9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmcvaW1wb3J0T25EZW1hbmQveS9ZLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZy9pbXBvcnRPbkRlbWFuZC95L1kuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNThhZDZlCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmcvaW1wb3J0T25EZW1hbmQveS9ZLmphdmEKQEAgLTAsMCArMSw2IEBACitpbXBvcnQgeDEuKjsKK2ltcG9ydCB4Mi4qOworCitjbGFzcyBZIHsKKyAgPGVycm9yIGRlc2NyPSJSZWZlcmVuY2UgdG8gJ1gxJyBpcyBhbWJpZ3VvdXMsIGJvdGggJ3gxLlgxJyBhbmQgJ3gyLlgxJyBtYXRjaCI+WDE8L2Vycm9yPiB4MTsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZy9pbXBvcnRPbkRlbWFuZFZzSW5oZXJpdGVkL1Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nL2ltcG9ydE9uRGVtYW5kVnNJbmhlcml0ZWQvVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQxYTBmMmYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZy9pbXBvcnRPbkRlbWFuZFZzSW5oZXJpdGVkL1Rlc3QuamF2YQpAQCAtMCwwICsxLDkgQEAKK2ltcG9ydCBwLkJhc2UuKjsKK2ltcG9ydCBwLkJhc2VJbXBsOworCitjbGFzcyBUZXN0IGV4dGVuZHMgQmFzZUltcGwgeworICB2b2lkIG0oKSB7CisgICAgSW5uZXIgaW5uZXIgPSBuZXcgSW5uZXIoKSB7IH07ICAvLyBpbXBvcnRlZCBwdWJsaWMgQmFzZS5Jbm5lciBzaG91bGQgc2hhZG93IGluaGVyaXRlZCBwYWNrYWdlLXByaXZhdGUgQmFzZUltcGwuSW5uZXIKKyAgICBCYXNlSW1wbC48ZXJyb3IgZGVzY3I9IidwLkJhc2VJbXBsLklubmVyJyBpcyBub3QgcHVibGljIGluICdwLkJhc2VJbXBsJy4gQ2Fubm90IGJlIGFjY2Vzc2VkIGZyb20gb3V0c2lkZSBwYWNrYWdlIj5Jbm5lcjwvZXJyb3I+IGkyID0gbnVsbDsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmcvaW1wb3J0T25EZW1hbmRWc0luaGVyaXRlZC9wL0Jhc2UuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nL2ltcG9ydE9uRGVtYW5kVnNJbmhlcml0ZWQvcC9CYXNlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGExMzk0MzAKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZy9pbXBvcnRPbkRlbWFuZFZzSW5oZXJpdGVkL3AvQmFzZS5qYXZhCkBAIC0wLDAgKzEsNSBAQAorcGFja2FnZSBwOworCitwdWJsaWMgaW50ZXJmYWNlIEJhc2UgeworICBpbnRlcmZhY2UgSW5uZXIgeyB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmcvaW1wb3J0T25EZW1hbmRWc0luaGVyaXRlZC9wL0Jhc2VJbXBsLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZy9pbXBvcnRPbkRlbWFuZFZzSW5oZXJpdGVkL3AvQmFzZUltcGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lODljZWE4Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmcvaW1wb3J0T25EZW1hbmRWc0luaGVyaXRlZC9wL0Jhc2VJbXBsLmphdmEKQEAgLTAsMCArMSw1IEBACitwYWNrYWdlIHA7CisKK3B1YmxpYyBjbGFzcyBCYXNlSW1wbCBpbXBsZW1lbnRzIEJhc2UgeworICBzdGF0aWMgY2xhc3MgSW5uZXIgaW1wbGVtZW50cyBJbm5lciB7IH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZy9pbXBvcnRPbkRlbWFuZFZzU2luZ2xlL3gxL0NsYXNzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZy9pbXBvcnRPbkRlbWFuZFZzU2luZ2xlL3gxL0NsYXNzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2NkMWQ5YgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nL2ltcG9ydE9uRGVtYW5kVnNTaW5nbGUveDEvQ2xhc3MuamF2YQpAQCAtMCwwICsxLDIgQEAKK3BhY2thZ2UgeDE7CitwdWJsaWMgY2xhc3MgQ2xhc3N7fQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nL2ltcG9ydE9uRGVtYW5kVnNTaW5nbGUveS9ZLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZy9pbXBvcnRPbkRlbWFuZFZzU2luZ2xlL3kvWS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY2NzRkOGEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZy9pbXBvcnRPbkRlbWFuZFZzU2luZ2xlL3kvWS5qYXZhCkBAIC0wLDAgKzEsNiBAQAoraW1wb3J0IHgxLio7CitpbXBvcnQgamF2YS5sYW5nLkNsYXNzOworCitjbGFzcyBZIHsKKyAgQ2xhc3MgYUNsYXNzOworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nL2ltcG9ydFNpbmdsZVZzSW5oZXJpdGVkL1Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nL2ltcG9ydFNpbmdsZVZzSW5oZXJpdGVkL1Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZjJlNjUyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmcvaW1wb3J0U2luZ2xlVnNJbmhlcml0ZWQvVGVzdC5qYXZhCkBAIC0wLDAgKzEsOSBAQAoraW1wb3J0IHAuQmFzZS5Jbm5lcjsKK2ltcG9ydCBwLkJhc2VJbXBsOworCitjbGFzcyBUZXN0IGV4dGVuZHMgQmFzZUltcGwgeworICB2b2lkIG0oKSB7CisgICAgSW5uZXIgaW5uZXIgPSBuZXcgSW5uZXIoKSB7IH07ICAvLyBpbXBvcnRlZCBwdWJsaWMgQmFzZS5Jbm5lciBzaG91bGQgc2hhZG93IGluaGVyaXRlZCBwYWNrYWdlLXByaXZhdGUgQmFzZUltcGwuSW5uZXIKKyAgICBCYXNlSW1wbC48ZXJyb3IgZGVzY3I9IidwLkJhc2VJbXBsLklubmVyJyBpcyBub3QgcHVibGljIGluICdwLkJhc2VJbXBsJy4gQ2Fubm90IGJlIGFjY2Vzc2VkIGZyb20gb3V0c2lkZSBwYWNrYWdlIj5Jbm5lcjwvZXJyb3I+IGkyID0gbnVsbDsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmcvaW1wb3J0U2luZ2xlVnNJbmhlcml0ZWQvcC9CYXNlLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZy9pbXBvcnRTaW5nbGVWc0luaGVyaXRlZC9wL0Jhc2UuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YTEzOTQzMAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nL2ltcG9ydFNpbmdsZVZzSW5oZXJpdGVkL3AvQmFzZS5qYXZhCkBAIC0wLDAgKzEsNSBAQAorcGFja2FnZSBwOworCitwdWJsaWMgaW50ZXJmYWNlIEJhc2UgeworICBpbnRlcmZhY2UgSW5uZXIgeyB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmcvaW1wb3J0U2luZ2xlVnNJbmhlcml0ZWQvcC9CYXNlSW1wbC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmcvaW1wb3J0U2luZ2xlVnNJbmhlcml0ZWQvcC9CYXNlSW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZjYjQ4N2IKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZy9pbXBvcnRTaW5nbGVWc0luaGVyaXRlZC9wL0Jhc2VJbXBsLmphdmEKQEAgLTAsMCArMSw1IEBACitwYWNrYWdlIHA7CisKK3B1YmxpYyBjbGFzcyBCYXNlSW1wbCBpbXBsZW1lbnRzIEJhc2UgeworICBzdGF0aWMgY2xhc3MgSW5uZXIgaW1wbGVtZW50cyBCYXNlSW1wbC5Jbm5lciB7IH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZy9pbXBvcnRTaW5nbGVWc1NhbWVQYWNrYWdlL3gxL0MuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nL2ltcG9ydFNpbmdsZVZzU2FtZVBhY2thZ2UveDEvQy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBkYWQ2NTIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZy9pbXBvcnRTaW5nbGVWc1NhbWVQYWNrYWdlL3gxL0MuamF2YQpAQCAtMCwwICsxLDQgQEAKK3BhY2thZ2UgeDE7CitwdWJsaWMgY2xhc3MgQyB7CisgIHB1YmxpYyBDKFN0cmluZyBzKXt9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmcvaW1wb3J0U2luZ2xlVnNTYW1lUGFja2FnZS95L0MuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nL2ltcG9ydFNpbmdsZVZzU2FtZVBhY2thZ2UveS9DLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGVhMjMxMQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nL2ltcG9ydFNpbmdsZVZzU2FtZVBhY2thZ2UveS9DLmphdmEKQEAgLTAsMCArMSw0IEBACitwYWNrYWdlIHk7CitwdWJsaWMgY2xhc3MgQyB7CisKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZy9pbXBvcnRTaW5nbGVWc1NhbWVQYWNrYWdlL3kvWS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmcvaW1wb3J0U2luZ2xlVnNTYW1lUGFja2FnZS95L1kuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ODc2NzAzCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmcvaW1wb3J0U2luZ2xlVnNTYW1lUGFja2FnZS95L1kuamF2YQpAQCAtMCwwICsxLDYgQEAKK3BhY2thZ2UgeTsKK2ltcG9ydCB4MS5DOworCitjbGFzcyBZIHsKKyAgQyBhQ2xhc3MgPSBuZXcgQygiIik7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmcvbXVsdGlKREtDb25mbGljdC9tb2R1bGVKYXZhNC9jb20vSmF2YTQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nL211bHRpSkRLQ29uZmxpY3QvbW9kdWxlSmF2YTQvY29tL0phdmE0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmU0YzJkNAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nL211bHRpSkRLQ29uZmxpY3QvbW9kdWxlSmF2YTQvY29tL0phdmE0LmphdmEKQEAgLTAsMCArMSw5IEBACitwYWNrYWdlIGNvbTsKKworaW1wb3J0IGphdmEudXRpbC4qOworCitwdWJsaWMgY2xhc3MgSmF2YTQgeworICAgIHB1YmxpYyBMaXN0IGdldExpc3QoKSB7CisgICAgICAgIHJldHVybiBudWxsOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZy9tdWx0aUpES0NvbmZsaWN0L21vZHVsZUphdmE0L2phdmE0LmltbCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nL211bHRpSkRLQ29uZmxpY3QvbW9kdWxlSmF2YTQvamF2YTQuaW1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUyYTFlNzUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZy9tdWx0aUpES0NvbmZsaWN0L21vZHVsZUphdmE0L2phdmE0LmltbApAQCAtMCwwICsxLDE0IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPG1vZHVsZSByZWxhdGl2ZVBhdGhzPSJ0cnVlIiB0eXBlPSJKQVZBX01PRFVMRSIgdmVyc2lvbj0iNSI+CisgIDxjb21wb25lbnQgbmFtZT0iTmV3TW9kdWxlUm9vdE1hbmFnZXIiIExBTkdVQUdFX0xFVkVMPSJKREtfMV80IiBpbmhlcml0LWNvbXBpbGVyLW91dHB1dD0iZmFsc2UiPgorICAgIDxvdXRwdXQgdXJsPSJmaWxlOi8vJE1PRFVMRV9ESVIkL2NsYXNzZXMiIC8+CisgICAgPGV4Y2x1ZGUtb3V0cHV0IC8+CisgICAgPGNvbnRlbnQgdXJsPSJmaWxlOi8vJE1PRFVMRV9ESVIkIj4KKyAgICAgIDxzb3VyY2VGb2xkZXIgdXJsPSJmaWxlOi8vJE1PRFVMRV9ESVIkIiBpc1Rlc3RTb3VyY2U9ImZhbHNlIiAvPgorICAgIDwvY29udGVudD4KKyAgICA8b3JkZXJFbnRyeSB0eXBlPSJqZGsiIGpka05hbWU9IjEuMyIgamRrVHlwZT0iSmF2YVNESyIgLz4KKyAgICA8b3JkZXJFbnRyeSB0eXBlPSJzb3VyY2VGb2xkZXIiIGZvclRlc3RzPSJmYWxzZSIgLz4KKyAgICA8b3JkZXJFbnRyeVByb3BlcnRpZXMgLz4KKyAgPC9jb21wb25lbnQ+Cis8L21vZHVsZT4KKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmcvbXVsdGlKREtDb25mbGljdC9tb2R1bGVKYXZhNS9jb20vSmF2YTUuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nL211bHRpSkRLQ29uZmxpY3QvbW9kdWxlSmF2YTUvY29tL0phdmE1LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmI3OWEyMwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nL211bHRpSkRLQ29uZmxpY3QvbW9kdWxlSmF2YTUvY29tL0phdmE1LmphdmEKQEAgLTAsMCArMSwxMiBAQAorcGFja2FnZSBjb207CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK3B1YmxpYyBjbGFzcyBKYXZhNSB7CisgICAgdm9pZCB0ZXN0KEphdmE0IGZvbykgeworICAgICAgICBMaXN0IGxpc3QgPSBmb28uZ2V0TGlzdCgpOworICAgICAgICBmb3IgKE9iamVjdCBvIDogbGlzdCkgeworICAgICAgICB9CisgICAgICAgIGZvciAoT2JqZWN0IG8gOiBmb28uZ2V0TGlzdCgpKSB7CisgICAgICAgIH0KKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZy9tdWx0aUpES0NvbmZsaWN0L21vZHVsZUphdmE1L2phdmE1LmltbCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nL211bHRpSkRLQ29uZmxpY3QvbW9kdWxlSmF2YTUvamF2YTUuaW1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA0NzllZjYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZy9tdWx0aUpES0NvbmZsaWN0L21vZHVsZUphdmE1L2phdmE1LmltbApAQCAtMCwwICsxLDE2IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPG1vZHVsZSByZWxhdGl2ZVBhdGhzPSJ0cnVlIiB0eXBlPSJKQVZBX01PRFVMRSIgdmVyc2lvbj0iNSI+CisgIDxjb21wb25lbnQgbmFtZT0iTmV3TW9kdWxlUm9vdE1hbmFnZXIiIExBTkdVQUdFX0xFVkVMPSJKREtfMV81IiBpbmhlcml0LWNvbXBpbGVyLW91dHB1dD0iZmFsc2UiPgorICAgIDxvdXRwdXQgdXJsPSJmaWxlOi8vJE1PRFVMRV9ESVIkL2NsYXNzZXMiIC8+CisgICAgPGV4Y2x1ZGUtb3V0cHV0IC8+CisgICAgPGNvbnRlbnQgdXJsPSJmaWxlOi8vJE1PRFVMRV9ESVIkIj4KKyAgICAgIDxzb3VyY2VGb2xkZXIgdXJsPSJmaWxlOi8vJE1PRFVMRV9ESVIkIiBpc1Rlc3RTb3VyY2U9ImZhbHNlIiAvPgorICAgIDwvY29udGVudD4KKyAgICA8b3JkZXJFbnRyeSB0eXBlPSJqZGsiIGpka05hbWU9IjEuMyIgamRrVHlwZT0iSmF2YVNESyIgLz4KKyAgICA8b3JkZXJFbnRyeSB0eXBlPSJzb3VyY2VGb2xkZXIiIGZvclRlc3RzPSJmYWxzZSIgLz4KKyAgICA8b3JkZXJFbnRyeSB0eXBlPSJtb2R1bGUiIG1vZHVsZS1uYW1lPSJqYXZhNCIgLz4KKworICAgIDxvcmRlckVudHJ5UHJvcGVydGllcyAvPgorICA8L2NvbXBvbmVudD4KKzwvbW9kdWxlPgorCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZy9ub3RBS2V5d29yZHMvVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmcvbm90QUtleXdvcmRzL1Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNDIzMDk5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmcvbm90QUtleXdvcmRzL1Rlc3QuamF2YQpAQCAtMCwwICsxLDkgQEAKK2ltcG9ydCBwa2cuQmFyOworaW1wb3J0IHBrZy5lbnVtLkZvbzsKKworY2xhc3MgVGVzdCB7CisgIHZvaWQgbSgpIHsKKyAgICBCYXIgYiA9IG5ldyBCYXIoKTsKKyAgICBiLmRvU29tZXRoaW5nKEZvby5GT08pOyAgLy8gd2l0aCBsYW5ndWFnZSBsZXZlbCBKREsgMS40ICdlbnVtJyBzaG91bGRuJ3QgYmUgYSBrZXl3b3JkIChzZWUgSURFQS02NzU1NikKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nL25vdEFLZXl3b3Jkcy9wa2cvQmFyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZy9ub3RBS2V5d29yZHMvcGtnL0Jhci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRkMjM2MDcKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZy9ub3RBS2V5d29yZHMvcGtnL0Jhci5qYXZhCkBAIC0wLDAgKzEsOSBAQAorcGFja2FnZSBwa2c7CisKK2ltcG9ydCBwa2cuZW51bS5Gb287CisKK3B1YmxpYyBjbGFzcyBCYXIgeworICBwdWJsaWMgdm9pZCBkb1NvbWV0aGluZyhGb28gZm9vKSB7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJmb289IiArIGZvbyk7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZy9ub3RBS2V5d29yZHMvcGtnL2VudW0vRm9vLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZy9ub3RBS2V5d29yZHMvcGtnL2VudW0vRm9vLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDE3M2IxMgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nL25vdEFLZXl3b3Jkcy9wa2cvZW51bS9Gb28uamF2YQpAQCAtMCwwICsxLDUgQEAKK3BhY2thZ2UgcGtnLmVudW07CisKK3B1YmxpYyBjbGFzcyBGb28geworICBwdWJsaWMgc3RhdGljIEZvbyBGT08gPSBuZXcgRm9vKCk7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmcvb25EZW1hbmRJbXBvcnRDb25mbGljdC9PdXRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmcvb25EZW1hbmRJbXBvcnRDb25mbGljdC9PdXRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQxNTY1ZTMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZy9vbkRlbWFuZEltcG9ydENvbmZsaWN0L091dGVyLmphdmEKQEAgLTAsMCArMSw1IEBACitpbXBvcnQgeC4qOworaW1wb3J0IHkuKjsKK3B1YmxpYyBjbGFzcyBPdXRlciB7CisgICAgVFRUIHR0dCA9IG5ldyBUVFQoKTsKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nL29uRGVtYW5kSW1wb3J0Q29uZmxpY3QveC9UVFQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nL29uRGVtYW5kSW1wb3J0Q29uZmxpY3QveC9UVFQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYTYyOTg5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmcvb25EZW1hbmRJbXBvcnRDb25mbGljdC94L1RUVC5qYXZhCkBAIC0wLDAgKzEsMyBAQAorcGFja2FnZSB4OworCitwdWJsaWMgY2xhc3MgVFRUIHt9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmcvb25EZW1hbmRJbXBvcnRDb25mbGljdC95L1RUVC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmcvb25EZW1hbmRJbXBvcnRDb25mbGljdC95L1RUVC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFjMzcxYjAKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZy9vbkRlbWFuZEltcG9ydENvbmZsaWN0L3kvVFRULmphdmEKQEAgLTAsMCArMSwzIEBACitwYWNrYWdlIHk7CisKK2NsYXNzIFRUVCB7fQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nL292ZXJyaWRlUGFja2FnZUxvY2FsL3gvQmFzZS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmcvb3ZlcnJpZGVQYWNrYWdlTG9jYWwveC9CYXNlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2NkYzczZDcKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZy9vdmVycmlkZVBhY2thZ2VMb2NhbC94L0Jhc2UuamF2YQpAQCAtMCwwICsxLDQgQEAKK3BhY2thZ2UgeDsKK3B1YmxpYyBjbGFzcyBCYXNlIHsKKyAgdm9pZCBmKCkge30KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZy9vdmVycmlkZVBhY2thZ2VMb2NhbC94L3kvRGVyaXZlZC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmcvb3ZlcnJpZGVQYWNrYWdlTG9jYWwveC95L0Rlcml2ZWQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMjZhNjE3Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmcvb3ZlcnJpZGVQYWNrYWdlTG9jYWwveC95L0Rlcml2ZWQuamF2YQpAQCAtMCwwICsxLDUgQEAKK3BhY2thZ2UgeC55OworCitwdWJsaWMgY2xhc3MgRGVyaXZlZCBleHRlbmRzIHguQmFzZSB7CisgIHByaXZhdGUgdm9pZCBmKCkge30KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZy9wYWNrYWdlTG9jYWxPdmVycmlkZS94L0EuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nL3BhY2thZ2VMb2NhbE92ZXJyaWRlL3gvQS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU1MzQyOTQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZy9wYWNrYWdlTG9jYWxPdmVycmlkZS94L0EuamF2YQpAQCAtMCwwICsxLDYgQEAKK3BhY2thZ2UgeDsKKworcHVibGljIGNsYXNzIEEgeworICAgIGludCBtZXRob2QoKSB7IHJldHVybiAwOyB9CisKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nL3BhY2thZ2VMb2NhbE92ZXJyaWRlL3kvQi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmcvcGFja2FnZUxvY2FsT3ZlcnJpZGUveS9CLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDI1MzBlNgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nL3BhY2thZ2VMb2NhbE92ZXJyaWRlL3kvQi5qYXZhCkBAIC0wLDAgKzEsOCBAQAorcGFja2FnZSB5OworCitpbXBvcnQgeC5BOworCitwdWJsaWMgY2xhc3MgQiBleHRlbmRzIEEgeworICAgIHB1YmxpYyBkb3VibGUgbWV0aG9kKCkgeyByZXR1cm4gMC4wOyB9Cit9CisKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nL3BhY2thZ2VMb2NhbE92ZXJyaWRlL3kvQy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmcvcGFja2FnZUxvY2FsT3ZlcnJpZGUveS9DLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGQ0MDEwNAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nL3BhY2thZ2VMb2NhbE92ZXJyaWRlL3kvQy5qYXZhCkBAIC0wLDAgKzEsNSBAQAorcGFja2FnZSB5OworCitwdWJsaWMgY2xhc3MgQyBleHRlbmRzIEIgeworICAgIHB1YmxpYyBkb3VibGUgbWV0aG9kKCkgeyByZXR1cm4gMDsgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmcvcGFja2FnZUxvY2Fscy94L0EuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nL3BhY2thZ2VMb2NhbHMveC9BLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2JiYmQxYTUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZy9wYWNrYWdlTG9jYWxzL3gvQS5qYXZhCkBAIC0wLDAgKzEsMTUgQEAKK3BhY2thZ2UgeDsKK3B1YmxpYyBjbGFzcyBBIGV4dGVuZHMgRHsKKyAgICBpbnQgazsKKyAgICBzdGF0aWMgdm9pZCBzdGF0aWNGKCkge30KK30KK2NsYXNzIEMgZXh0ZW5kcyB4LnN1Yi5CIHsKKyAgICBpbnQgbj08ZXJyb3IgZGVzY3I9IidrJyBpcyBub3QgcHVibGljIGluICd4LkEnLiBDYW5ub3QgYmUgYWNjZXNzZWQgZnJvbSBvdXRzaWRlIHBhY2thZ2UiPms8L2Vycm9yPjsKKworICAgIC8vIGNhbiBjYWxsIGRlc3BpdGUgaW5oZXJpdGVkIHRocm91Z2ggcGFja2FnZSBsb2NhbCBmcm9tIG90aGVyIHBhY2thZ2UKKyAgICB2b2lkIGYoKSB7IEEuc3RhdGljRigpOyB9Cit9CisKK2NsYXNzIER7CisgICAgcHVibGljIHZvaWQgZm9vKCl7fQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmcvcGFja2FnZUxvY2Fscy94L0NvbnRhaW5lckNsYXNzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZy9wYWNrYWdlTG9jYWxzL3gvQ29udGFpbmVyQ2xhc3MuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NWZlOGNlCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmcvcGFja2FnZUxvY2Fscy94L0NvbnRhaW5lckNsYXNzLmphdmEKQEAgLTAsMCArMSw5IEBACisvLyBwYWNrYWdlIGxvY2FsIGNsYXNzIGluIHRoZSBtaWRkbGUKKworcGFja2FnZSB4OworY2xhc3MgQ29tcG9uZW50Q2xhc3MgeworICAgIHB1YmxpYyBpbnQgc2l6ZTsKK30KK3B1YmxpYyBjbGFzcyBDb250YWluZXJDbGFzcyB7CisgICAgcHVibGljIENvbXBvbmVudENsYXNzIGNjID0gbmV3IENvbXBvbmVudENsYXNzKCk7Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZy9wYWNrYWdlTG9jYWxzL3gvc3ViL0IuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nL3BhY2thZ2VMb2NhbHMveC9zdWIvQi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA5NWM4NzIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZy9wYWNrYWdlTG9jYWxzL3gvc3ViL0IuamF2YQpAQCAtMCwwICsxLDYgQEAKK3BhY2thZ2UgeC5zdWI7CisKK3B1YmxpYyBjbGFzcyBCIGV4dGVuZHMgeC5BIHsKK30KKworCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZy9wYWNrYWdlTG9jYWxzL3gvc3ViL1VzaW5nTWFpbi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmcvcGFja2FnZUxvY2Fscy94L3N1Yi9Vc2luZ01haW4uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NjIxNGVhCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmcvcGFja2FnZUxvY2Fscy94L3N1Yi9Vc2luZ01haW4uamF2YQpAQCAtMCwwICsxLDEyIEBACitwYWNrYWdlIHguc3ViOworCitpbXBvcnQgeC5Db250YWluZXJDbGFzczsKK2ltcG9ydCB4LkE7CisKK3B1YmxpYyBjbGFzcyBVc2luZ01haW4geworICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKyAgICAgICAgZmluYWwgQ29udGFpbmVyQ2xhc3MgY29udCA9IG5ldyBDb250YWluZXJDbGFzcygpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oY29udC5jYy48ZXJyb3IgZGVzY3I9Iid4LkNvbXBvbmVudENsYXNzJyBpcyBub3QgcHVibGljIGluICd4Jy4gQ2Fubm90IGJlIGFjY2Vzc2VkIGZyb20gb3V0c2lkZSBwYWNrYWdlIj5zaXplPC9lcnJvcj4pOy8vLy8KKyAgICAgICAgbmV3IEEoKS5mb28oKTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZy9wcm90ZWN0ZWRBY2Nlc3NGcm9tT3RoZXJQYWNrYWdlL2EvQS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmcvcHJvdGVjdGVkQWNjZXNzRnJvbU90aGVyUGFja2FnZS9hL0EuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNmUxZTZmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmcvcHJvdGVjdGVkQWNjZXNzRnJvbU90aGVyUGFja2FnZS9hL0EuamF2YQpAQCAtMCwwICsxLDYgQEAKK3BhY2thZ2UgYTsKK2ltcG9ydCBiLkI7CisKK3B1YmxpYyBjbGFzcyBBIGV4dGVuZHMgQiB7CisgIGludCBmID0gc3VwZXIuYmJiOworfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmcvcHJvdGVjdGVkQWNjZXNzRnJvbU90aGVyUGFja2FnZS9hL0ZhdGhlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmcvcHJvdGVjdGVkQWNjZXNzRnJvbU90aGVyUGFja2FnZS9hL0ZhdGhlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZkNWMwMzkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZy9wcm90ZWN0ZWRBY2Nlc3NGcm9tT3RoZXJQYWNrYWdlL2EvRmF0aGVyLmphdmEKQEAgLTAsMCArMSw3IEBACitwYWNrYWdlIGE7CisKK3B1YmxpYyBjbGFzcyBGYXRoZXIgeworICAgIHByb3RlY3RlZCB2b2lkIGZ1bmMoKSB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRmF0aGVyLmZ1bmMiKTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZy9wcm90ZWN0ZWRBY2Nlc3NGcm9tT3RoZXJQYWNrYWdlL2EvTWFpbi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmcvcHJvdGVjdGVkQWNjZXNzRnJvbU90aGVyUGFja2FnZS9hL01haW4uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOWVmNWVkCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmcvcHJvdGVjdGVkQWNjZXNzRnJvbU90aGVyUGFja2FnZS9hL01haW4uamF2YQpAQCAtMCwwICsxLDEyIEBACitwYWNrYWdlIGE7CisKK2ltcG9ydCBiLlNvbjsKKworcHVibGljIGNsYXNzIE1haW4geworICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKworICAgICAgICBTb24gYmFkID0gbmV3IFNvbigpOworICAgICAgICBiYWQuPGVycm9yIGRlc2NyPSInZnVuYygpJyBoYXMgcHJvdGVjdGVkIGFjY2VzcyBpbiAnYi5Tb24nIj5mdW5jPC9lcnJvcj4oKTsKKworICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nL3Byb3RlY3RlZEFjY2Vzc0Zyb21PdGhlclBhY2thZ2UvYi9CLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZy9wcm90ZWN0ZWRBY2Nlc3NGcm9tT3RoZXJQYWNrYWdlL2IvQi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFjNzc4YmQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZy9wcm90ZWN0ZWRBY2Nlc3NGcm9tT3RoZXJQYWNrYWdlL2IvQi5qYXZhCkBAIC0wLDAgKzEsNSBAQAorcGFja2FnZSBiOworCitwdWJsaWMgY2xhc3MgQiB7CisgIHByb3RlY3RlZCBpbnQgYmJiOworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nL3Byb3RlY3RlZEFjY2Vzc0Zyb21PdGhlclBhY2thZ2UvYi9Tb24uamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nL3Byb3RlY3RlZEFjY2Vzc0Zyb21PdGhlclBhY2thZ2UvYi9Tb24uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YWQ3MTI4Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmcvcHJvdGVjdGVkQWNjZXNzRnJvbU90aGVyUGFja2FnZS9iL1Nvbi5qYXZhCkBAIC0wLDAgKzEsOSBAQAorcGFja2FnZSBiOworCitpbXBvcnQgYS5GYXRoZXI7CisKK3B1YmxpYyBjbGFzcyBTb24gZXh0ZW5kcyBGYXRoZXIgeworICAgIHByb3RlY3RlZCB2b2lkIGZ1bmMoKSB7CisgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlNvbi5mdW5jIik7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmcvcHJvdGVjdGVkQ29uc3RydWN0b3IvcDEvQzEuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nL3Byb3RlY3RlZENvbnN0cnVjdG9yL3AxL0MxLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGFlMTU3ZAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nL3Byb3RlY3RlZENvbnN0cnVjdG9yL3AxL0MxLmphdmEKQEAgLTAsMCArMSw1IEBACitwYWNrYWdlIHAxOworCitwdWJsaWMgY2xhc3MgQzEgeworICAgIHByb3RlY3RlZCBDMShpbnQgaSkgeyB9IC8vcHJvdGVjdGVkIGNvbnN0cnVjdG9yCit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZy9wcm90ZWN0ZWRDb25zdHJ1Y3Rvci9wMi9DMi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmcvcHJvdGVjdGVkQ29uc3RydWN0b3IvcDIvQzIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNTY5ODAzCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmcvcHJvdGVjdGVkQ29uc3RydWN0b3IvcDIvQzIuamF2YQpAQCAtMCwwICsxLDE4IEBACitwYWNrYWdlIHAyOworCitpbXBvcnQgcDEuQzE7CisKK3B1YmxpYyBjbGFzcyBDMiBleHRlbmRzIEMxIHsKKyAgICBwdWJsaWMgQzIoKSB7CisgICAgICAgIHN1cGVyKDkpOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIGFtZXRob2QoKSB7CisgICAgICAgIG5ldyA8ZXJyb3IgZGVzY3I9IidDMShpbnQpJyBoYXMgcHJvdGVjdGVkIGFjY2VzcyBpbiAncDEuQzEnIj5DMTwvZXJyb3I+KDkpOyAKKyAgICB9CisKKyAgICBPYmplY3QgZ2coKSB7CisgICAgICAgIC8vIGFub255bW91cyBpcyBvaz8hCisgICAgICAgIHJldHVybiBuZXcgQzEoMSl7fTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZy9wcm90ZWN0ZWRDb25zdHJ1Y3Rvci9zYW1lUGFja2FnZS9DMS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmcvcHJvdGVjdGVkQ29uc3RydWN0b3Ivc2FtZVBhY2thZ2UvQzEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YmRjZGI4Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmcvcHJvdGVjdGVkQ29uc3RydWN0b3Ivc2FtZVBhY2thZ2UvQzEuamF2YQpAQCAtMCwwICsxLDE0IEBACitwYWNrYWdlIHNhbWVQYWNrYWdlOworCitwdWJsaWMgY2xhc3MgQzEgeworICAgIHByb3RlY3RlZCBDMShpbnQgaSkgeyB9IC8vcHJvdGVjdGVkIGNvbnN0cnVjdG9yCit9CitjbGFzcyBDYyBleHRlbmRzIEMxIHsKKyAgICBwdWJsaWMgQ2MoKSB7CisgICAgICAgIHN1cGVyKDkpOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIGFtZXRob2QoKSB7CisgICAgICAgIG5ldyBDMSg5KTsgLy8gPDw8PC0tLS0tLS0tLS0gVGhpcyBpcyBhbiBlcnJvcgorICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nL3Byb3RlY3RlZENvbnN0cnVjdG9yL3NhbWVQYWNrYWdlL0MyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZy9wcm90ZWN0ZWRDb25zdHJ1Y3Rvci9zYW1lUGFja2FnZS9DMi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdjMjFhN2IKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZy9wcm90ZWN0ZWRDb25zdHJ1Y3Rvci9zYW1lUGFja2FnZS9DMi5qYXZhCkBAIC0wLDAgKzEsMTMgQEAKK3BhY2thZ2Ugc2FtZVBhY2thZ2U7CisKK2ltcG9ydCBzYW1lUGFja2FnZS5DMTsKKworcHVibGljIGNsYXNzIEMyIGV4dGVuZHMgQzEgeworICAgIHB1YmxpYyBDMigpIHsKKyAgICAgICAgc3VwZXIoOSk7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgYW1ldGhvZCgpIHsKKyAgICAgICAgbmV3IEMxKDkpOyAvLyA8PDw8LS0tLS0tLS0tLSBUaGlzIGlzIGFuIGVycm9yCisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmcvcHJvdGVjdGVkQ29uc3RydWN0b3JJbklubmVyL3AxL0MxLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZy9wcm90ZWN0ZWRDb25zdHJ1Y3RvckluSW5uZXIvcDEvQzEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNjc0ODFiCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmcvcHJvdGVjdGVkQ29uc3RydWN0b3JJbklubmVyL3AxL0MxLmphdmEKQEAgLTAsMCArMSw3IEBACitwYWNrYWdlIHAxOworCitwdWJsaWMgY2xhc3MgQzEgeworICAgICAgICBwcm90ZWN0ZWQgc3RhdGljIGNsYXNzIElubmVyQ2xhc3NJbkJhc2UKKyAgICAgICAgeworICAgICAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZy9wcm90ZWN0ZWRDb25zdHJ1Y3RvckluSW5uZXIvcDIvQzIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nL3Byb3RlY3RlZENvbnN0cnVjdG9ySW5Jbm5lci9wMi9DMi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM5ZDVkMTkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZy9wcm90ZWN0ZWRDb25zdHJ1Y3RvckluSW5uZXIvcDIvQzIuamF2YQpAQCAtMCwwICsxLDEwIEBACitwYWNrYWdlIHAyOworCitpbXBvcnQgcDEuQzE7CisKK3B1YmxpYyBjbGFzcyBDMiBleHRlbmRzIEMxIHsKKyAgICBwdWJsaWMgdm9pZCBhbWV0aG9kKCkgeworICAgICAgICBJbm5lckNsYXNzSW5CYXNlIGlubmVyOworICAgICAgICBpbm5lciA9IG5ldyA8ZXJyb3IgZGVzY3I9IidwMS5DMS5Jbm5lckNsYXNzSW5CYXNlJyBoYXMgcHJvdGVjdGVkIGFjY2VzcyBpbiAncDEuQzEnIj5Jbm5lckNsYXNzSW5CYXNlPC9lcnJvcj4oKTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZy9yZWltcG9ydENvbmZsaWN0aW5nQ2xhc3Nlcy94L1VzYWdlLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZy9yZWltcG9ydENvbmZsaWN0aW5nQ2xhc3Nlcy94L1VzYWdlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTZlMjZjZgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nL3JlaW1wb3J0Q29uZmxpY3RpbmdDbGFzc2VzL3gvVXNhZ2UuamF2YQpAQCAtMCwwICsxLDE0IEBACitwYWNrYWdlIHg7CisKK2ltcG9ydCB4Lm4uWDE7CitpbXBvcnQgeC5uLlgyOworaW1wb3J0IHgubi5YMzsKKworQERlcHJlY2F0ZWQKK3B1YmxpYyBjbGFzcyBZIHsKKyAgICBYMSB4MTsKKyAgICB4Lm4uQ2xhc3MgczsKKyAgICBYMiB4MjsKKyAgICBDbGFzcyBhY2xhc3M7CisgICAgWDMgY2MzOworfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmcvcmVpbXBvcnRDb25mbGljdGluZ0NsYXNzZXMveC9Vc2FnZV9hZnRlck9wdGltaXplLnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nL3JlaW1wb3J0Q29uZmxpY3RpbmdDbGFzc2VzL3gvVXNhZ2VfYWZ0ZXJPcHRpbWl6ZS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTVmMTZiMmIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZy9yZWltcG9ydENvbmZsaWN0aW5nQ2xhc3Nlcy94L1VzYWdlX2FmdGVyT3B0aW1pemUudHh0CkBAIC0wLDAgKzEsMTQgQEAKK3BhY2thZ2UgeDsKKworaW1wb3J0IHgubi4qOworCitpbXBvcnQgamF2YS5sYW5nLkNsYXNzOworCitARGVwcmVjYXRlZAorcHVibGljIGNsYXNzIFkgeworICAgIFgxIHgxOworICAgIHgubi5DbGFzcyBzOworICAgIFgyIHgyOworICAgIENsYXNzIGFjbGFzczsKKyAgICBYMyBjYzM7Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZy9yZWltcG9ydENvbmZsaWN0aW5nQ2xhc3Nlcy94L24vQ2xhc3MuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nL3JlaW1wb3J0Q29uZmxpY3RpbmdDbGFzc2VzL3gvbi9DbGFzcy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg5MDg1NWIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZy9yZWltcG9ydENvbmZsaWN0aW5nQ2xhc3Nlcy94L24vQ2xhc3MuamF2YQpAQCAtMCwwICsxLDIgQEAKK3BhY2thZ2UgeC5uOworcHVibGljIGNsYXNzIENsYXNze30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZy9yZWltcG9ydENvbmZsaWN0aW5nQ2xhc3Nlcy94L24vWDEuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nL3JlaW1wb3J0Q29uZmxpY3RpbmdDbGFzc2VzL3gvbi9YMS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY2MDFkODYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZy9yZWltcG9ydENvbmZsaWN0aW5nQ2xhc3Nlcy94L24vWDEuamF2YQpAQCAtMCwwICsxLDQgQEAKK3BhY2thZ2UgeC5uOworCitwdWJsaWMgY2xhc3MgWDEgeworfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmcvcmVpbXBvcnRDb25mbGljdGluZ0NsYXNzZXMveC9uL1gyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZy9yZWltcG9ydENvbmZsaWN0aW5nQ2xhc3Nlcy94L24vWDIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMjJiYjRjCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmcvcmVpbXBvcnRDb25mbGljdGluZ0NsYXNzZXMveC9uL1gyLmphdmEKQEAgLTAsMCArMSw0IEBACitwYWNrYWdlIHgubjsKKworcHVibGljIGNsYXNzIFgyIHsKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nL3JlaW1wb3J0Q29uZmxpY3RpbmdDbGFzc2VzL3gvbi9YMy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmcvcmVpbXBvcnRDb25mbGljdGluZ0NsYXNzZXMveC9uL1gzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZThhZmQ2YwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nL3JlaW1wb3J0Q29uZmxpY3RpbmdDbGFzc2VzL3gvbi9YMy5qYXZhCkBAIC0wLDAgKzEsNCBAQAorcGFja2FnZSB4Lm47CisKK3B1YmxpYyBjbGFzcyBYMyB7Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZy9zYW1lQ2xhc3Nlc0luU291cmNlQW5kTGliL2xpYi9saWIuamFyIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmcvc2FtZUNsYXNzZXNJblNvdXJjZUFuZExpYi9saWIvbGliLmphcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MGU0NDVkCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmcvc2FtZUNsYXNzZXNJblNvdXJjZUFuZExpYi9saWIvbGliLmphcgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZy9zYW1lQ2xhc3Nlc0luU291cmNlQW5kTGliL2xpYi9saWJzcmMuemlwIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmcvc2FtZUNsYXNzZXNJblNvdXJjZUFuZExpYi9saWIvbGlic3JjLnppcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZWFmODc0Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmcvc2FtZUNsYXNzZXNJblNvdXJjZUFuZExpYi9saWIvbGlic3JjLnppcApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZy9zYW1lQ2xhc3Nlc0luU291cmNlQW5kTGliL3NldmVyYWxJbnN0YW5jZXMuaW1sIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmcvc2FtZUNsYXNzZXNJblNvdXJjZUFuZExpYi9zZXZlcmFsSW5zdGFuY2VzLmltbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43Y2QzMzllNAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nL3NhbWVDbGFzc2VzSW5Tb3VyY2VBbmRMaWIvc2V2ZXJhbEluc3RhbmNlcy5pbWwKQEAgLTAsMCArMSwyMyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxtb2R1bGUgcmVsYXRpdmVQYXRocz0idHJ1ZSIgdHlwZT0iSkFWQV9NT0RVTEUiIHZlcnNpb249IjQiPgorICA8Y29tcG9uZW50IG5hbWU9Ik5ld01vZHVsZVJvb3RNYW5hZ2VyIiBpbmhlcml0LWNvbXBpbGVyLW91dHB1dD0idHJ1ZSI+CisgICAgPGV4Y2x1ZGUtb3V0cHV0IC8+CisgICAgPGNvbnRlbnQgdXJsPSJmaWxlOi8vJE1PRFVMRV9ESVIkIj4KKyAgICAgIDxzb3VyY2VGb2xkZXIgdXJsPSJmaWxlOi8vJE1PRFVMRV9ESVIkL3NyYyIgaXNUZXN0U291cmNlPSJmYWxzZSIgLz4KKyAgICA8L2NvbnRlbnQ+CisgICAgPG9yZGVyRW50cnkgdHlwZT0iaW5oZXJpdGVkSmRrIiAvPgorICAgIDxvcmRlckVudHJ5IHR5cGU9InNvdXJjZUZvbGRlciIgZm9yVGVzdHM9ImZhbHNlIiAvPgorICAgIDxvcmRlckVudHJ5IHR5cGU9Im1vZHVsZS1saWJyYXJ5Ij4KKyAgICAgIDxsaWJyYXJ5PgorICAgICAgICA8Q0xBU1NFUz4KKyAgICAgICAgICA8cm9vdCB1cmw9ImphcjovLyRNT0RVTEVfRElSJC9saWIvbGliLmphciEvIiAvPgorICAgICAgICA8L0NMQVNTRVM+CisgICAgICAgIDxKQVZBRE9DIC8+CisgICAgICAgIDxTT1VSQ0VTPgorICAgICAgICAgIDxyb290IHVybD0iamFyOi8vJE1PRFVMRV9ESVIkL2xpYi9saWJzcmMuemlwIS8iIC8+CisgICAgICAgIDwvU09VUkNFUz4KKyAgICAgIDwvbGlicmFyeT4KKyAgICA8L29yZGVyRW50cnk+CisgIDwvY29tcG9uZW50PgorPC9tb2R1bGU+CisKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nL3NhbWVDbGFzc2VzSW5Tb3VyY2VBbmRMaWIvc2V2ZXJhbEluc3RhbmNlcy5pcHIgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZy9zYW1lQ2xhc3Nlc0luU291cmNlQW5kTGliL3NldmVyYWxJbnN0YW5jZXMuaXByCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMyNWNiZjEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZy9zYW1lQ2xhc3Nlc0luU291cmNlQW5kTGliL3NldmVyYWxJbnN0YW5jZXMuaXByCkBAIC0wLDAgKzEsMjY1IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHByb2plY3QgcmVsYXRpdmVQYXRocz0iZmFsc2UiIHZlcnNpb249IjQiPgorICA8Y29tcG9uZW50IG5hbWU9IkFudENvbmZpZ3VyYXRpb24iPgorICAgIDxkZWZhdWx0QW50IGJ1bmRsZWRBbnQ9InRydWUiIC8+CisgIDwvY29tcG9uZW50PgorICA8Y29tcG9uZW50IG5hbWU9IkJ1aWxkSmFyUHJvamVjdFNldHRpbmdzIj4KKyAgICA8b3B0aW9uIG5hbWU9IkJVSUxEX0pBUlNfT05fTUFLRSIgdmFsdWU9ImZhbHNlIiAvPgorICA8L2NvbXBvbmVudD4KKyAgPGNvbXBvbmVudCBuYW1lPSJDb2RlU3R5bGVTZXR0aW5nc01hbmFnZXIiPgorICAgIDxvcHRpb24gbmFtZT0iUEVSX1BST0pFQ1RfU0VUVElOR1MiIC8+CisgICAgPG9wdGlvbiBuYW1lPSJVU0VfUEVSX1BST0pFQ1RfU0VUVElOR1MiIHZhbHVlPSJmYWxzZSIgLz4KKyAgPC9jb21wb25lbnQ+CisgIDxjb21wb25lbnQgbmFtZT0iQ29tcGlsZXJDb25maWd1cmF0aW9uIj4KKyAgICA8b3B0aW9uIG5hbWU9IkRFRkFVTFRfQ09NUElMRVIiIHZhbHVlPSJKYXZhYyIgLz4KKyAgICA8b3B0aW9uIG5hbWU9IkRFUExPWV9BRlRFUl9NQUtFIiB2YWx1ZT0iMCIgLz4KKyAgICA8cmVzb3VyY2VFeHRlbnNpb25zPgorICAgICAgPGVudHJ5IG5hbWU9Ii4rXC4ocHJvcGVydGllc3x4bWx8aHRtbHxkdGR8dGxkKSIgLz4KKyAgICAgIDxlbnRyeSBuYW1lPSIuK1wuKGdpZnxwbmd8anBlZ3xqcGcpIiAvPgorICAgIDwvcmVzb3VyY2VFeHRlbnNpb25zPgorICAgIDx3aWxkY2FyZFJlc291cmNlUGF0dGVybnM+CisgICAgICA8ZW50cnkgbmFtZT0iPyoucHJvcGVydGllcyIgLz4KKyAgICAgIDxlbnRyeSBuYW1lPSI/Ki54bWwiIC8+CisgICAgICA8ZW50cnkgbmFtZT0iPyouZ2lmIiAvPgorICAgICAgPGVudHJ5IG5hbWU9Ij8qLnBuZyIgLz4KKyAgICAgIDxlbnRyeSBuYW1lPSI/Ki5qcGVnIiAvPgorICAgICAgPGVudHJ5IG5hbWU9Ij8qLmpwZyIgLz4KKyAgICAgIDxlbnRyeSBuYW1lPSI/Ki5odG1sIiAvPgorICAgICAgPGVudHJ5IG5hbWU9Ij8qLmR0ZCIgLz4KKyAgICAgIDxlbnRyeSBuYW1lPSI/Ki50bGQiIC8+CisgICAgICA8ZW50cnkgbmFtZT0iPyouZnRsIiAvPgorICAgIDwvd2lsZGNhcmRSZXNvdXJjZVBhdHRlcm5zPgorICA8L2NvbXBvbmVudD4KKyAgPGNvbXBvbmVudCBuYW1lPSJDb3B5cmlnaHRNYW5hZ2VyIiBkZWZhdWx0PSIiPgorICAgIDxtb2R1bGUyY29weXJpZ2h0IC8+CisgIDwvY29tcG9uZW50PgorICA8Y29tcG9uZW50IG5hbWU9IkRlcGVuZGVuY2llc0FuYWx5emVNYW5hZ2VyIj4KKyAgICA8b3B0aW9uIG5hbWU9Im15Rm9yd2FyZERpcmVjdGlvbiIgdmFsdWU9ImZhbHNlIiAvPgorICA8L2NvbXBvbmVudD4KKyAgPGNvbXBvbmVudCBuYW1lPSJEZXBlbmRlbmN5VmFsaWRhdGlvbk1hbmFnZXIiPgorICAgIDxvcHRpb24gbmFtZT0iU0tJUF9JTVBPUlRfU1RBVEVNRU5UUyIgdmFsdWU9ImZhbHNlIiAvPgorICA8L2NvbXBvbmVudD4KKyAgPGNvbXBvbmVudCBuYW1lPSJFY2xpcHNlQ29tcGlsZXJTZXR0aW5ncyI+CisgICAgPG9wdGlvbiBuYW1lPSJERUJVR0dJTkdfSU5GTyIgdmFsdWU9InRydWUiIC8+CisgICAgPG9wdGlvbiBuYW1lPSJHRU5FUkFURV9OT19XQVJOSU5HUyIgdmFsdWU9InRydWUiIC8+CisgICAgPG9wdGlvbiBuYW1lPSJERVBSRUNBVElPTiIgdmFsdWU9ImZhbHNlIiAvPgorICAgIDxvcHRpb24gbmFtZT0iQURESVRJT05BTF9PUFRJT05TX1NUUklORyIgdmFsdWU9IiIgLz4KKyAgICA8b3B0aW9uIG5hbWU9Ik1BWElNVU1fSEVBUF9TSVpFIiB2YWx1ZT0iMTI4IiAvPgorICA8L2NvbXBvbmVudD4KKyAgPGNvbXBvbmVudCBuYW1lPSJFY2xpcHNlRW1iZWRkZWRDb21waWxlclNldHRpbmdzIj4KKyAgICA8b3B0aW9uIG5hbWU9IkRFQlVHR0lOR19JTkZPIiB2YWx1ZT0idHJ1ZSIgLz4KKyAgICA8b3B0aW9uIG5hbWU9IkdFTkVSQVRFX05PX1dBUk5JTkdTIiB2YWx1ZT0idHJ1ZSIgLz4KKyAgICA8b3B0aW9uIG5hbWU9IkRFUFJFQ0FUSU9OIiB2YWx1ZT0iZmFsc2UiIC8+CisgICAgPG9wdGlvbiBuYW1lPSJBRERJVElPTkFMX09QVElPTlNfU1RSSU5HIiB2YWx1ZT0iIiAvPgorICAgIDxvcHRpb24gbmFtZT0iTUFYSU1VTV9IRUFQX1NJWkUiIHZhbHVlPSIxMjgiIC8+CisgIDwvY29tcG9uZW50PgorICA8Y29tcG9uZW50IG5hbWU9IkVuY29kaW5nIiB1c2VVVEZHdWVzc2luZz0idHJ1ZSIgbmF0aXZlMkFzY2lpRm9yUHJvcGVydGllc0ZpbGVzPSJmYWxzZSIgLz4KKyAgPGNvbXBvbmVudCBuYW1lPSJFbnRyeVBvaW50c01hbmFnZXIiPgorICAgIDxlbnRyeV9wb2ludHMgdmVyc2lvbj0iMi4wIiAvPgorICA8L2NvbXBvbmVudD4KKyAgPGNvbXBvbmVudCBuYW1lPSJIaWVyYXJjaHlCcm93c2VyTWFuYWdlciI+CisgICAgPG9wdGlvbiBuYW1lPSJJU19BVVRPU0NST0xMX1RPX1NPVVJDRSIgdmFsdWU9ImZhbHNlIiAvPgorICAgIDxvcHRpb24gbmFtZT0iU09SVF9BTFBIQUJFVElDQUxMWSIgdmFsdWU9ImZhbHNlIiAvPgorICAgIDxvcHRpb24gbmFtZT0iSElERV9DTEFTU0VTX1dIRVJFX01FVEhPRF9OT1RfSU1QTEVNRU5URUQiIHZhbHVlPSJmYWxzZSIgLz4KKyAgPC9jb21wb25lbnQ+CisgIDxjb21wb25lbnQgbmFtZT0iSW5zcGVjdGlvblByb2plY3RQcm9maWxlTWFuYWdlciI+CisgICAgPG9wdGlvbiBuYW1lPSJQUk9KRUNUX1BST0ZJTEUiIHZhbHVlPSJQcm9qZWN0IERlZmF1bHQiIC8+CisgICAgPG9wdGlvbiBuYW1lPSJVU0VfUFJPSkVDVF9MRVZFTF9TRVRUSU5HUyIgdmFsdWU9ImZhbHNlIiAvPgorICAgIDxzY29wZXMgLz4KKyAgICA8cHJvZmlsZXM+CisgICAgICA8cHJvZmlsZSB2ZXJzaW9uPSIxLjAiIGlzX2xvY2tlZD0iZmFsc2UiPgorICAgICAgICA8b3B0aW9uIG5hbWU9Im15TmFtZSIgdmFsdWU9IlByb2plY3QgRGVmYXVsdCIgLz4KKyAgICAgICAgPG9wdGlvbiBuYW1lPSJteUxvY2FsIiB2YWx1ZT0iZmFsc2UiIC8+CisgICAgICA8L3Byb2ZpbGU+CisgICAgPC9wcm9maWxlcz4KKyAgICA8bGlzdCBzaXplPSIwIiAvPgorICA8L2NvbXBvbmVudD4KKyAgPGNvbXBvbmVudCBuYW1lPSJKYXZhY1NldHRpbmdzIj4KKyAgICA8b3B0aW9uIG5hbWU9IkRFQlVHR0lOR19JTkZPIiB2YWx1ZT0idHJ1ZSIgLz4KKyAgICA8b3B0aW9uIG5hbWU9IkdFTkVSQVRFX05PX1dBUk5JTkdTIiB2YWx1ZT0iZmFsc2UiIC8+CisgICAgPG9wdGlvbiBuYW1lPSJERVBSRUNBVElPTiIgdmFsdWU9InRydWUiIC8+CisgICAgPG9wdGlvbiBuYW1lPSJBRERJVElPTkFMX09QVElPTlNfU1RSSU5HIiB2YWx1ZT0iIiAvPgorICAgIDxvcHRpb24gbmFtZT0iTUFYSU1VTV9IRUFQX1NJWkUiIHZhbHVlPSIxMjgiIC8+CisgIDwvY29tcG9uZW50PgorICA8Y29tcG9uZW50IG5hbWU9IkphdmFkb2NHZW5lcmF0aW9uTWFuYWdlciI+CisgICAgPG9wdGlvbiBuYW1lPSJPVVRQVVRfRElSRUNUT1JZIiAvPgorICAgIDxvcHRpb24gbmFtZT0iT1BUSU9OX1NDT1BFIiB2YWx1ZT0icHJvdGVjdGVkIiAvPgorICAgIDxvcHRpb24gbmFtZT0iT1BUSU9OX0hJRVJBUkNIWSIgdmFsdWU9InRydWUiIC8+CisgICAgPG9wdGlvbiBuYW1lPSJPUFRJT05fTkFWSUdBVE9SIiB2YWx1ZT0idHJ1ZSIgLz4KKyAgICA8b3B0aW9uIG5hbWU9Ik9QVElPTl9JTkRFWCIgdmFsdWU9InRydWUiIC8+CisgICAgPG9wdGlvbiBuYW1lPSJPUFRJT05fU0VQQVJBVEVfSU5ERVgiIHZhbHVlPSJ0cnVlIiAvPgorICAgIDxvcHRpb24gbmFtZT0iT1BUSU9OX0RPQ1VNRU5UX1RBR19VU0UiIHZhbHVlPSJmYWxzZSIgLz4KKyAgICA8b3B0aW9uIG5hbWU9Ik9QVElPTl9ET0NVTUVOVF9UQUdfQVVUSE9SIiB2YWx1ZT0iZmFsc2UiIC8+CisgICAgPG9wdGlvbiBuYW1lPSJPUFRJT05fRE9DVU1FTlRfVEFHX1ZFUlNJT04iIHZhbHVlPSJmYWxzZSIgLz4KKyAgICA8b3B0aW9uIG5hbWU9Ik9QVElPTl9ET0NVTUVOVF9UQUdfREVQUkVDQVRFRCIgdmFsdWU9InRydWUiIC8+CisgICAgPG9wdGlvbiBuYW1lPSJPUFRJT05fREVQUkVDQVRFRF9MSVNUIiB2YWx1ZT0idHJ1ZSIgLz4KKyAgICA8b3B0aW9uIG5hbWU9Ik9USEVSX09QVElPTlMiIHZhbHVlPSIiIC8+CisgICAgPG9wdGlvbiBuYW1lPSJIRUFQX1NJWkUiIC8+CisgICAgPG9wdGlvbiBuYW1lPSJMT0NBTEUiIC8+CisgICAgPG9wdGlvbiBuYW1lPSJPUEVOX0lOX0JST1dTRVIiIHZhbHVlPSJ0cnVlIiAvPgorICA8L2NvbXBvbmVudD4KKyAgPGNvbXBvbmVudCBuYW1lPSJKaWtlc1NldHRpbmdzIj4KKyAgICA8b3B0aW9uIG5hbWU9IkpJS0VTX1BBVEgiIHZhbHVlPSIiIC8+CisgICAgPG9wdGlvbiBuYW1lPSJERUJVR0dJTkdfSU5GTyIgdmFsdWU9InRydWUiIC8+CisgICAgPG9wdGlvbiBuYW1lPSJERVBSRUNBVElPTiIgdmFsdWU9InRydWUiIC8+CisgICAgPG9wdGlvbiBuYW1lPSJHRU5FUkFURV9OT19XQVJOSU5HUyIgdmFsdWU9ImZhbHNlIiAvPgorICAgIDxvcHRpb24gbmFtZT0iSVNfRU1BQ1NfRVJST1JTX01PREUiIHZhbHVlPSJ0cnVlIiAvPgorICAgIDxvcHRpb24gbmFtZT0iQURESVRJT05BTF9PUFRJT05TX1NUUklORyIgdmFsdWU9IiIgLz4KKyAgPC9jb21wb25lbnQ+CisgIDxjb21wb25lbnQgbmFtZT0iUGFsZXR0ZTIiPgorICAgIDxncm91cCBuYW1lPSJTd2luZyI+CisgICAgICA8aXRlbSBjbGFzcz0iY29tLmludGVsbGlqLnVpRGVzaWduZXIuSFNwYWNlciIgdG9vbHRpcC10ZXh0PSJIb3Jpem9udGFsIFNwYWNlciIgaWNvbj0iL2NvbS9pbnRlbGxpai91aURlc2lnbmVyL2ljb25zL2hzcGFjZXIucG5nIiByZW1vdmFibGU9ImZhbHNlIiBhdXRvLWNyZWF0ZS1iaW5kaW5nPSJmYWxzZSIgY2FuLWF0dGFjaC1sYWJlbD0iZmFsc2UiPgorICAgICAgICA8ZGVmYXVsdC1jb25zdHJhaW50cyB2c2l6ZS1wb2xpY3k9IjEiIGhzaXplLXBvbGljeT0iNiIgYW5jaG9yPSIwIiBmaWxsPSIxIiAvPgorICAgICAgPC9pdGVtPgorICAgICAgPGl0ZW0gY2xhc3M9ImNvbS5pbnRlbGxpai51aURlc2lnbmVyLlZTcGFjZXIiIHRvb2x0aXAtdGV4dD0iVmVydGljYWwgU3BhY2VyIiBpY29uPSIvY29tL2ludGVsbGlqL3VpRGVzaWduZXIvaWNvbnMvdnNwYWNlci5wbmciIHJlbW92YWJsZT0iZmFsc2UiIGF1dG8tY3JlYXRlLWJpbmRpbmc9ImZhbHNlIiBjYW4tYXR0YWNoLWxhYmVsPSJmYWxzZSI+CisgICAgICAgIDxkZWZhdWx0LWNvbnN0cmFpbnRzIHZzaXplLXBvbGljeT0iNiIgaHNpemUtcG9saWN5PSIxIiBhbmNob3I9IjAiIGZpbGw9IjIiIC8+CisgICAgICA8L2l0ZW0+CisgICAgICA8aXRlbSBjbGFzcz0iamF2YXguc3dpbmcuSlBhbmVsIiBpY29uPSIvY29tL2ludGVsbGlqL3VpRGVzaWduZXIvaWNvbnMvcGFuZWwucG5nIiByZW1vdmFibGU9ImZhbHNlIiBhdXRvLWNyZWF0ZS1iaW5kaW5nPSJmYWxzZSIgY2FuLWF0dGFjaC1sYWJlbD0iZmFsc2UiPgorICAgICAgICA8ZGVmYXVsdC1jb25zdHJhaW50cyB2c2l6ZS1wb2xpY3k9IjMiIGhzaXplLXBvbGljeT0iMyIgYW5jaG9yPSIwIiBmaWxsPSIzIiAvPgorICAgICAgPC9pdGVtPgorICAgICAgPGl0ZW0gY2xhc3M9ImphdmF4LnN3aW5nLkpTY3JvbGxQYW5lIiBpY29uPSIvY29tL2ludGVsbGlqL3VpRGVzaWduZXIvaWNvbnMvc2Nyb2xsUGFuZS5wbmciIHJlbW92YWJsZT0iZmFsc2UiIGF1dG8tY3JlYXRlLWJpbmRpbmc9ImZhbHNlIiBjYW4tYXR0YWNoLWxhYmVsPSJ0cnVlIj4KKyAgICAgICAgPGRlZmF1bHQtY29uc3RyYWludHMgdnNpemUtcG9saWN5PSI3IiBoc2l6ZS1wb2xpY3k9IjciIGFuY2hvcj0iMCIgZmlsbD0iMyIgLz4KKyAgICAgIDwvaXRlbT4KKyAgICAgIDxpdGVtIGNsYXNzPSJqYXZheC5zd2luZy5KQnV0dG9uIiBpY29uPSIvY29tL2ludGVsbGlqL3VpRGVzaWduZXIvaWNvbnMvYnV0dG9uLnBuZyIgcmVtb3ZhYmxlPSJmYWxzZSIgYXV0by1jcmVhdGUtYmluZGluZz0idHJ1ZSIgY2FuLWF0dGFjaC1sYWJlbD0iZmFsc2UiPgorICAgICAgICA8ZGVmYXVsdC1jb25zdHJhaW50cyB2c2l6ZS1wb2xpY3k9IjAiIGhzaXplLXBvbGljeT0iMyIgYW5jaG9yPSIwIiBmaWxsPSIxIiAvPgorICAgICAgICA8aW5pdGlhbC12YWx1ZXM+CisgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InRleHQiIHZhbHVlPSJCdXR0b24iIC8+CisgICAgICAgIDwvaW5pdGlhbC12YWx1ZXM+CisgICAgICA8L2l0ZW0+CisgICAgICA8aXRlbSBjbGFzcz0iamF2YXguc3dpbmcuSlJhZGlvQnV0dG9uIiBpY29uPSIvY29tL2ludGVsbGlqL3VpRGVzaWduZXIvaWNvbnMvcmFkaW9CdXR0b24ucG5nIiByZW1vdmFibGU9ImZhbHNlIiBhdXRvLWNyZWF0ZS1iaW5kaW5nPSJ0cnVlIiBjYW4tYXR0YWNoLWxhYmVsPSJmYWxzZSI+CisgICAgICAgIDxkZWZhdWx0LWNvbnN0cmFpbnRzIHZzaXplLXBvbGljeT0iMCIgaHNpemUtcG9saWN5PSIzIiBhbmNob3I9IjgiIGZpbGw9IjAiIC8+CisgICAgICAgIDxpbml0aWFsLXZhbHVlcz4KKyAgICAgICAgICA8cHJvcGVydHkgbmFtZT0idGV4dCIgdmFsdWU9IlJhZGlvQnV0dG9uIiAvPgorICAgICAgICA8L2luaXRpYWwtdmFsdWVzPgorICAgICAgPC9pdGVtPgorICAgICAgPGl0ZW0gY2xhc3M9ImphdmF4LnN3aW5nLkpDaGVja0JveCIgaWNvbj0iL2NvbS9pbnRlbGxpai91aURlc2lnbmVyL2ljb25zL2NoZWNrQm94LnBuZyIgcmVtb3ZhYmxlPSJmYWxzZSIgYXV0by1jcmVhdGUtYmluZGluZz0idHJ1ZSIgY2FuLWF0dGFjaC1sYWJlbD0iZmFsc2UiPgorICAgICAgICA8ZGVmYXVsdC1jb25zdHJhaW50cyB2c2l6ZS1wb2xpY3k9IjAiIGhzaXplLXBvbGljeT0iMyIgYW5jaG9yPSI4IiBmaWxsPSIwIiAvPgorICAgICAgICA8aW5pdGlhbC12YWx1ZXM+CisgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InRleHQiIHZhbHVlPSJDaGVja0JveCIgLz4KKyAgICAgICAgPC9pbml0aWFsLXZhbHVlcz4KKyAgICAgIDwvaXRlbT4KKyAgICAgIDxpdGVtIGNsYXNzPSJqYXZheC5zd2luZy5KTGFiZWwiIGljb249Ii9jb20vaW50ZWxsaWovdWlEZXNpZ25lci9pY29ucy9sYWJlbC5wbmciIHJlbW92YWJsZT0iZmFsc2UiIGF1dG8tY3JlYXRlLWJpbmRpbmc9ImZhbHNlIiBjYW4tYXR0YWNoLWxhYmVsPSJmYWxzZSI+CisgICAgICAgIDxkZWZhdWx0LWNvbnN0cmFpbnRzIHZzaXplLXBvbGljeT0iMCIgaHNpemUtcG9saWN5PSIwIiBhbmNob3I9IjgiIGZpbGw9IjAiIC8+CisgICAgICAgIDxpbml0aWFsLXZhbHVlcz4KKyAgICAgICAgICA8cHJvcGVydHkgbmFtZT0idGV4dCIgdmFsdWU9IkxhYmVsIiAvPgorICAgICAgICA8L2luaXRpYWwtdmFsdWVzPgorICAgICAgPC9pdGVtPgorICAgICAgPGl0ZW0gY2xhc3M9ImphdmF4LnN3aW5nLkpUZXh0RmllbGQiIGljb249Ii9jb20vaW50ZWxsaWovdWlEZXNpZ25lci9pY29ucy90ZXh0RmllbGQucG5nIiByZW1vdmFibGU9ImZhbHNlIiBhdXRvLWNyZWF0ZS1iaW5kaW5nPSJ0cnVlIiBjYW4tYXR0YWNoLWxhYmVsPSJ0cnVlIj4KKyAgICAgICAgPGRlZmF1bHQtY29uc3RyYWludHMgdnNpemUtcG9saWN5PSIwIiBoc2l6ZS1wb2xpY3k9IjYiIGFuY2hvcj0iOCIgZmlsbD0iMSI+CisgICAgICAgICAgPHByZWZlcnJlZC1zaXplIHdpZHRoPSIxNTAiIGhlaWdodD0iLTEiIC8+CisgICAgICAgIDwvZGVmYXVsdC1jb25zdHJhaW50cz4KKyAgICAgIDwvaXRlbT4KKyAgICAgIDxpdGVtIGNsYXNzPSJqYXZheC5zd2luZy5KUGFzc3dvcmRGaWVsZCIgaWNvbj0iL2NvbS9pbnRlbGxpai91aURlc2lnbmVyL2ljb25zL3Bhc3N3b3JkRmllbGQucG5nIiByZW1vdmFibGU9ImZhbHNlIiBhdXRvLWNyZWF0ZS1iaW5kaW5nPSJ0cnVlIiBjYW4tYXR0YWNoLWxhYmVsPSJ0cnVlIj4KKyAgICAgICAgPGRlZmF1bHQtY29uc3RyYWludHMgdnNpemUtcG9saWN5PSIwIiBoc2l6ZS1wb2xpY3k9IjYiIGFuY2hvcj0iOCIgZmlsbD0iMSI+CisgICAgICAgICAgPHByZWZlcnJlZC1zaXplIHdpZHRoPSIxNTAiIGhlaWdodD0iLTEiIC8+CisgICAgICAgIDwvZGVmYXVsdC1jb25zdHJhaW50cz4KKyAgICAgIDwvaXRlbT4KKyAgICAgIDxpdGVtIGNsYXNzPSJqYXZheC5zd2luZy5KRm9ybWF0dGVkVGV4dEZpZWxkIiBpY29uPSIvY29tL2ludGVsbGlqL3VpRGVzaWduZXIvaWNvbnMvZm9ybWF0dGVkVGV4dEZpZWxkLnBuZyIgcmVtb3ZhYmxlPSJmYWxzZSIgYXV0by1jcmVhdGUtYmluZGluZz0idHJ1ZSIgY2FuLWF0dGFjaC1sYWJlbD0idHJ1ZSI+CisgICAgICAgIDxkZWZhdWx0LWNvbnN0cmFpbnRzIHZzaXplLXBvbGljeT0iMCIgaHNpemUtcG9saWN5PSI2IiBhbmNob3I9IjgiIGZpbGw9IjEiPgorICAgICAgICAgIDxwcmVmZXJyZWQtc2l6ZSB3aWR0aD0iMTUwIiBoZWlnaHQ9Ii0xIiAvPgorICAgICAgICA8L2RlZmF1bHQtY29uc3RyYWludHM+CisgICAgICA8L2l0ZW0+CisgICAgICA8aXRlbSBjbGFzcz0iamF2YXguc3dpbmcuSlRleHRBcmVhIiBpY29uPSIvY29tL2ludGVsbGlqL3VpRGVzaWduZXIvaWNvbnMvdGV4dEFyZWEucG5nIiByZW1vdmFibGU9ImZhbHNlIiBhdXRvLWNyZWF0ZS1iaW5kaW5nPSJ0cnVlIiBjYW4tYXR0YWNoLWxhYmVsPSJ0cnVlIj4KKyAgICAgICAgPGRlZmF1bHQtY29uc3RyYWludHMgdnNpemUtcG9saWN5PSI2IiBoc2l6ZS1wb2xpY3k9IjYiIGFuY2hvcj0iMCIgZmlsbD0iMyI+CisgICAgICAgICAgPHByZWZlcnJlZC1zaXplIHdpZHRoPSIxNTAiIGhlaWdodD0iNTAiIC8+CisgICAgICAgIDwvZGVmYXVsdC1jb25zdHJhaW50cz4KKyAgICAgIDwvaXRlbT4KKyAgICAgIDxpdGVtIGNsYXNzPSJqYXZheC5zd2luZy5KVGV4dFBhbmUiIGljb249Ii9jb20vaW50ZWxsaWovdWlEZXNpZ25lci9pY29ucy90ZXh0UGFuZS5wbmciIHJlbW92YWJsZT0iZmFsc2UiIGF1dG8tY3JlYXRlLWJpbmRpbmc9InRydWUiIGNhbi1hdHRhY2gtbGFiZWw9InRydWUiPgorICAgICAgICA8ZGVmYXVsdC1jb25zdHJhaW50cyB2c2l6ZS1wb2xpY3k9IjYiIGhzaXplLXBvbGljeT0iNiIgYW5jaG9yPSIwIiBmaWxsPSIzIj4KKyAgICAgICAgICA8cHJlZmVycmVkLXNpemUgd2lkdGg9IjE1MCIgaGVpZ2h0PSI1MCIgLz4KKyAgICAgICAgPC9kZWZhdWx0LWNvbnN0cmFpbnRzPgorICAgICAgPC9pdGVtPgorICAgICAgPGl0ZW0gY2xhc3M9ImphdmF4LnN3aW5nLkpFZGl0b3JQYW5lIiBpY29uPSIvY29tL2ludGVsbGlqL3VpRGVzaWduZXIvaWNvbnMvZWRpdG9yUGFuZS5wbmciIHJlbW92YWJsZT0iZmFsc2UiIGF1dG8tY3JlYXRlLWJpbmRpbmc9InRydWUiIGNhbi1hdHRhY2gtbGFiZWw9InRydWUiPgorICAgICAgICA8ZGVmYXVsdC1jb25zdHJhaW50cyB2c2l6ZS1wb2xpY3k9IjYiIGhzaXplLXBvbGljeT0iNiIgYW5jaG9yPSIwIiBmaWxsPSIzIj4KKyAgICAgICAgICA8cHJlZmVycmVkLXNpemUgd2lkdGg9IjE1MCIgaGVpZ2h0PSI1MCIgLz4KKyAgICAgICAgPC9kZWZhdWx0LWNvbnN0cmFpbnRzPgorICAgICAgPC9pdGVtPgorICAgICAgPGl0ZW0gY2xhc3M9ImphdmF4LnN3aW5nLkpDb21ib0JveCIgaWNvbj0iL2NvbS9pbnRlbGxpai91aURlc2lnbmVyL2ljb25zL2NvbWJvQm94LnBuZyIgcmVtb3ZhYmxlPSJmYWxzZSIgYXV0by1jcmVhdGUtYmluZGluZz0idHJ1ZSIgY2FuLWF0dGFjaC1sYWJlbD0idHJ1ZSI+CisgICAgICAgIDxkZWZhdWx0LWNvbnN0cmFpbnRzIHZzaXplLXBvbGljeT0iMCIgaHNpemUtcG9saWN5PSIyIiBhbmNob3I9IjgiIGZpbGw9IjEiIC8+CisgICAgICA8L2l0ZW0+CisgICAgICA8aXRlbSBjbGFzcz0iamF2YXguc3dpbmcuSlRhYmxlIiBpY29uPSIvY29tL2ludGVsbGlqL3VpRGVzaWduZXIvaWNvbnMvdGFibGUucG5nIiByZW1vdmFibGU9ImZhbHNlIiBhdXRvLWNyZWF0ZS1iaW5kaW5nPSJ0cnVlIiBjYW4tYXR0YWNoLWxhYmVsPSJmYWxzZSI+CisgICAgICAgIDxkZWZhdWx0LWNvbnN0cmFpbnRzIHZzaXplLXBvbGljeT0iNiIgaHNpemUtcG9saWN5PSI2IiBhbmNob3I9IjAiIGZpbGw9IjMiPgorICAgICAgICAgIDxwcmVmZXJyZWQtc2l6ZSB3aWR0aD0iMTUwIiBoZWlnaHQ9IjUwIiAvPgorICAgICAgICA8L2RlZmF1bHQtY29uc3RyYWludHM+CisgICAgICA8L2l0ZW0+CisgICAgICA8aXRlbSBjbGFzcz0iamF2YXguc3dpbmcuSkxpc3QiIGljb249Ii9jb20vaW50ZWxsaWovdWlEZXNpZ25lci9pY29ucy9saXN0LnBuZyIgcmVtb3ZhYmxlPSJmYWxzZSIgYXV0by1jcmVhdGUtYmluZGluZz0idHJ1ZSIgY2FuLWF0dGFjaC1sYWJlbD0iZmFsc2UiPgorICAgICAgICA8ZGVmYXVsdC1jb25zdHJhaW50cyB2c2l6ZS1wb2xpY3k9IjYiIGhzaXplLXBvbGljeT0iMiIgYW5jaG9yPSIwIiBmaWxsPSIzIj4KKyAgICAgICAgICA8cHJlZmVycmVkLXNpemUgd2lkdGg9IjE1MCIgaGVpZ2h0PSI1MCIgLz4KKyAgICAgICAgPC9kZWZhdWx0LWNvbnN0cmFpbnRzPgorICAgICAgPC9pdGVtPgorICAgICAgPGl0ZW0gY2xhc3M9ImphdmF4LnN3aW5nLkpUcmVlIiBpY29uPSIvY29tL2ludGVsbGlqL3VpRGVzaWduZXIvaWNvbnMvdHJlZS5wbmciIHJlbW92YWJsZT0iZmFsc2UiIGF1dG8tY3JlYXRlLWJpbmRpbmc9InRydWUiIGNhbi1hdHRhY2gtbGFiZWw9ImZhbHNlIj4KKyAgICAgICAgPGRlZmF1bHQtY29uc3RyYWludHMgdnNpemUtcG9saWN5PSI2IiBoc2l6ZS1wb2xpY3k9IjYiIGFuY2hvcj0iMCIgZmlsbD0iMyI+CisgICAgICAgICAgPHByZWZlcnJlZC1zaXplIHdpZHRoPSIxNTAiIGhlaWdodD0iNTAiIC8+CisgICAgICAgIDwvZGVmYXVsdC1jb25zdHJhaW50cz4KKyAgICAgIDwvaXRlbT4KKyAgICAgIDxpdGVtIGNsYXNzPSJqYXZheC5zd2luZy5KVGFiYmVkUGFuZSIgaWNvbj0iL2NvbS9pbnRlbGxpai91aURlc2lnbmVyL2ljb25zL3RhYmJlZFBhbmUucG5nIiByZW1vdmFibGU9ImZhbHNlIiBhdXRvLWNyZWF0ZS1iaW5kaW5nPSJ0cnVlIiBjYW4tYXR0YWNoLWxhYmVsPSJmYWxzZSI+CisgICAgICAgIDxkZWZhdWx0LWNvbnN0cmFpbnRzIHZzaXplLXBvbGljeT0iMyIgaHNpemUtcG9saWN5PSIzIiBhbmNob3I9IjAiIGZpbGw9IjMiPgorICAgICAgICAgIDxwcmVmZXJyZWQtc2l6ZSB3aWR0aD0iMjAwIiBoZWlnaHQ9IjIwMCIgLz4KKyAgICAgICAgPC9kZWZhdWx0LWNvbnN0cmFpbnRzPgorICAgICAgPC9pdGVtPgorICAgICAgPGl0ZW0gY2xhc3M9ImphdmF4LnN3aW5nLkpTcGxpdFBhbmUiIGljb249Ii9jb20vaW50ZWxsaWovdWlEZXNpZ25lci9pY29ucy9zcGxpdFBhbmUucG5nIiByZW1vdmFibGU9ImZhbHNlIiBhdXRvLWNyZWF0ZS1iaW5kaW5nPSJmYWxzZSIgY2FuLWF0dGFjaC1sYWJlbD0iZmFsc2UiPgorICAgICAgICA8ZGVmYXVsdC1jb25zdHJhaW50cyB2c2l6ZS1wb2xpY3k9IjMiIGhzaXplLXBvbGljeT0iMyIgYW5jaG9yPSIwIiBmaWxsPSIzIj4KKyAgICAgICAgICA8cHJlZmVycmVkLXNpemUgd2lkdGg9IjIwMCIgaGVpZ2h0PSIyMDAiIC8+CisgICAgICAgIDwvZGVmYXVsdC1jb25zdHJhaW50cz4KKyAgICAgIDwvaXRlbT4KKyAgICAgIDxpdGVtIGNsYXNzPSJqYXZheC5zd2luZy5KU3Bpbm5lciIgaWNvbj0iL2NvbS9pbnRlbGxpai91aURlc2lnbmVyL2ljb25zL3NwaW5uZXIucG5nIiByZW1vdmFibGU9ImZhbHNlIiBhdXRvLWNyZWF0ZS1iaW5kaW5nPSJ0cnVlIiBjYW4tYXR0YWNoLWxhYmVsPSJ0cnVlIj4KKyAgICAgICAgPGRlZmF1bHQtY29uc3RyYWludHMgdnNpemUtcG9saWN5PSIwIiBoc2l6ZS1wb2xpY3k9IjYiIGFuY2hvcj0iOCIgZmlsbD0iMSIgLz4KKyAgICAgIDwvaXRlbT4KKyAgICAgIDxpdGVtIGNsYXNzPSJqYXZheC5zd2luZy5KU2xpZGVyIiBpY29uPSIvY29tL2ludGVsbGlqL3VpRGVzaWduZXIvaWNvbnMvc2xpZGVyLnBuZyIgcmVtb3ZhYmxlPSJmYWxzZSIgYXV0by1jcmVhdGUtYmluZGluZz0idHJ1ZSIgY2FuLWF0dGFjaC1sYWJlbD0iZmFsc2UiPgorICAgICAgICA8ZGVmYXVsdC1jb25zdHJhaW50cyB2c2l6ZS1wb2xpY3k9IjAiIGhzaXplLXBvbGljeT0iNiIgYW5jaG9yPSI4IiBmaWxsPSIxIiAvPgorICAgICAgPC9pdGVtPgorICAgICAgPGl0ZW0gY2xhc3M9ImphdmF4LnN3aW5nLkpTZXBhcmF0b3IiIGljb249Ii9jb20vaW50ZWxsaWovdWlEZXNpZ25lci9pY29ucy9zZXBhcmF0b3IucG5nIiByZW1vdmFibGU9ImZhbHNlIiBhdXRvLWNyZWF0ZS1iaW5kaW5nPSJmYWxzZSIgY2FuLWF0dGFjaC1sYWJlbD0iZmFsc2UiPgorICAgICAgICA8ZGVmYXVsdC1jb25zdHJhaW50cyB2c2l6ZS1wb2xpY3k9IjYiIGhzaXplLXBvbGljeT0iNiIgYW5jaG9yPSIwIiBmaWxsPSIzIiAvPgorICAgICAgPC9pdGVtPgorICAgICAgPGl0ZW0gY2xhc3M9ImphdmF4LnN3aW5nLkpQcm9ncmVzc0JhciIgaWNvbj0iL2NvbS9pbnRlbGxpai91aURlc2lnbmVyL2ljb25zL3Byb2dyZXNzYmFyLnBuZyIgcmVtb3ZhYmxlPSJmYWxzZSIgYXV0by1jcmVhdGUtYmluZGluZz0idHJ1ZSIgY2FuLWF0dGFjaC1sYWJlbD0iZmFsc2UiPgorICAgICAgICA8ZGVmYXVsdC1jb25zdHJhaW50cyB2c2l6ZS1wb2xpY3k9IjAiIGhzaXplLXBvbGljeT0iNiIgYW5jaG9yPSIwIiBmaWxsPSIxIiAvPgorICAgICAgPC9pdGVtPgorICAgICAgPGl0ZW0gY2xhc3M9ImphdmF4LnN3aW5nLkpUb29sQmFyIiBpY29uPSIvY29tL2ludGVsbGlqL3VpRGVzaWduZXIvaWNvbnMvdG9vbGJhci5wbmciIHJlbW92YWJsZT0iZmFsc2UiIGF1dG8tY3JlYXRlLWJpbmRpbmc9ImZhbHNlIiBjYW4tYXR0YWNoLWxhYmVsPSJmYWxzZSI+CisgICAgICAgIDxkZWZhdWx0LWNvbnN0cmFpbnRzIHZzaXplLXBvbGljeT0iMCIgaHNpemUtcG9saWN5PSI2IiBhbmNob3I9IjAiIGZpbGw9IjEiPgorICAgICAgICAgIDxwcmVmZXJyZWQtc2l6ZSB3aWR0aD0iLTEiIGhlaWdodD0iMjAiIC8+CisgICAgICAgIDwvZGVmYXVsdC1jb25zdHJhaW50cz4KKyAgICAgIDwvaXRlbT4KKyAgICAgIDxpdGVtIGNsYXNzPSJqYXZheC5zd2luZy5KVG9vbEJhciRTZXBhcmF0b3IiIGljb249Ii9jb20vaW50ZWxsaWovdWlEZXNpZ25lci9pY29ucy90b29sYmFyU2VwYXJhdG9yLnBuZyIgcmVtb3ZhYmxlPSJmYWxzZSIgYXV0by1jcmVhdGUtYmluZGluZz0iZmFsc2UiIGNhbi1hdHRhY2gtbGFiZWw9ImZhbHNlIj4KKyAgICAgICAgPGRlZmF1bHQtY29uc3RyYWludHMgdnNpemUtcG9saWN5PSIwIiBoc2l6ZS1wb2xpY3k9IjAiIGFuY2hvcj0iMCIgZmlsbD0iMSIgLz4KKyAgICAgIDwvaXRlbT4KKyAgICAgIDxpdGVtIGNsYXNzPSJqYXZheC5zd2luZy5KU2Nyb2xsQmFyIiBpY29uPSIvY29tL2ludGVsbGlqL3VpRGVzaWduZXIvaWNvbnMvc2Nyb2xsYmFyLnBuZyIgcmVtb3ZhYmxlPSJmYWxzZSIgYXV0by1jcmVhdGUtYmluZGluZz0idHJ1ZSIgY2FuLWF0dGFjaC1sYWJlbD0iZmFsc2UiPgorICAgICAgICA8ZGVmYXVsdC1jb25zdHJhaW50cyB2c2l6ZS1wb2xpY3k9IjYiIGhzaXplLXBvbGljeT0iMCIgYW5jaG9yPSIwIiBmaWxsPSIyIiAvPgorICAgICAgPC9pdGVtPgorICAgIDwvZ3JvdXA+CisgIDwvY29tcG9uZW50PgorICA8Y29tcG9uZW50IG5hbWU9IlByb2plY3REZXRhaWxzIj4KKyAgICA8b3B0aW9uIG5hbWU9InByb2plY3ROYW1lIiB2YWx1ZT0ic2V2ZXJhbEluc3RhbmNlcyIgLz4KKyAgPC9jb21wb25lbnQ+CisgIDxjb21wb25lbnQgbmFtZT0iUHJvamVjdEZpbGVWZXJzaW9uIiBjb252ZXJ0ZWQ9InRydWUiPgorICAgIDxjb252ZXJ0ZXIgaWQ9ImphdmFlZS1tb2R1bGVzIiAvPgorICAgIDxjb252ZXJ0ZXIgaWQ9InJvci1tb2R1bGVzIiAvPgorICAgIDxjb252ZXJ0ZXIgaWQ9IlNlbGVuYVJ1bkNvbmZUb0RpYW5hIiAvPgorICA8L2NvbXBvbmVudD4KKyAgPGNvbXBvbmVudCBuYW1lPSJQcm9qZWN0TW9kdWxlTWFuYWdlciI+CisgICAgPG1vZHVsZXM+CisgICAgICA8bW9kdWxlIGZpbGV1cmw9ImZpbGU6Ly8kUFJPSkVDVF9ESVIkL3NldmVyYWxJbnN0YW5jZXMuaW1sIiBmaWxlcGF0aD0iJFBST0pFQ1RfRElSJC9zZXZlcmFsSW5zdGFuY2VzLmltbCIgLz4KKyAgICA8L21vZHVsZXM+CisgIDwvY29tcG9uZW50PgorICA8Y29tcG9uZW50IG5hbWU9IlByb2plY3RSb290TWFuYWdlciIgdmVyc2lvbj0iMiIgbGFuZ3VhZ2VMZXZlbD0iSkRLXzFfNSIgYXNzZXJ0LWtleXdvcmQ9InRydWUiIGpkay0xNT0idHJ1ZSIgcHJvamVjdC1qZGstbmFtZT0iMS42IiBwcm9qZWN0LWpkay10eXBlPSJKYXZhU0RLIj4KKyAgICA8b3V0cHV0IHVybD0iZmlsZTovLyRQUk9KRUNUX0RJUiQvb3V0IiAvPgorICA8L2NvbXBvbmVudD4KKyAgPGNvbXBvbmVudCBuYW1lPSJSZXNvdXJjZU1hbmFnZXJDb250YWluZXIiPgorICAgIDxvcHRpb24gbmFtZT0ibXlSZXNvdXJjZUJ1bmRsZXMiPgorICAgICAgPHZhbHVlPgorICAgICAgICA8bGlzdCBzaXplPSIwIiAvPgorICAgICAgPC92YWx1ZT4KKyAgICA8L29wdGlvbj4KKyAgPC9jb21wb25lbnQ+CisgIDxjb21wb25lbnQgbmFtZT0iUm1pY1NldHRpbmdzIj4KKyAgICA8b3B0aW9uIG5hbWU9IklTX0VBTkFCTEVEIiB2YWx1ZT0iZmFsc2UiIC8+CisgICAgPG9wdGlvbiBuYW1lPSJERUJVR0dJTkdfSU5GTyIgdmFsdWU9InRydWUiIC8+CisgICAgPG9wdGlvbiBuYW1lPSJHRU5FUkFURV9OT19XQVJOSU5HUyIgdmFsdWU9ImZhbHNlIiAvPgorICAgIDxvcHRpb24gbmFtZT0iR0VORVJBVEVfSUlPUF9TVFVCUyIgdmFsdWU9ImZhbHNlIiAvPgorICAgIDxvcHRpb24gbmFtZT0iQURESVRJT05BTF9PUFRJT05TX1NUUklORyIgdmFsdWU9IiIgLz4KKyAgPC9jb21wb25lbnQ+CisgIDxjb21wb25lbnQgbmFtZT0iV2ViU2VydmljZXNQbHVnaW4iIGFkZFJlcXVpcmVkTGlicmFyaWVzPSJ0cnVlIiAvPgorICA8VXNlZFBhdGhNYWNyb3M+CisgICAgPG1hY3JvIG5hbWU9IkNWU19CQVNFIiAvPgorICA8L1VzZWRQYXRoTWFjcm9zPgorPC9wcm9qZWN0PgorCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZy9zYW1lQ2xhc3Nlc0luU291cmNlQW5kTGliL3NldmVyYWxJbnN0YW5jZXMuaXdzIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmcvc2FtZUNsYXNzZXNJblNvdXJjZUFuZExpYi9zZXZlcmFsSW5zdGFuY2VzLml3cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNTE4Yjg5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmcvc2FtZUNsYXNzZXNJblNvdXJjZUFuZExpYi9zZXZlcmFsSW5zdGFuY2VzLml3cwpAQCAtMCwwICsxLDUyOSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxwcm9qZWN0IHJlbGF0aXZlUGF0aHM9ImZhbHNlIiB2ZXJzaW9uPSI0Ij4KKyAgPGNvbXBvbmVudCBuYW1lPSJDQ2FzZUNvbmZpZyI+CisgICAgPG9wdGlvbiBuYW1lPSJjaGVja291dFJlc2VydmVkIiB2YWx1ZT0iZmFsc2UiIC8+CisgICAgPG9wdGlvbiBuYW1lPSJtYXJrRXh0ZXJuYWxDaGFuZ2VBc1VwVG9EYXRlIiB2YWx1ZT0idHJ1ZSIgLz4KKyAgICA8b3B0aW9uIG5hbWU9ImNoZWNrSW5Vc2VIaWphY2siIHZhbHVlPSJ0cnVlIiAvPgorICAgIDxvcHRpb24gbmFtZT0idXNlVWNtTW9kZWwiIHZhbHVlPSJ0cnVlIiAvPgorICAgIDxvcHRpb24gbmFtZT0iaXNPZmZsaW5lIiB2YWx1ZT0iZmFsc2UiIC8+CisgICAgPG9wdGlvbiBuYW1lPSJzeW5jaE91dHNpZGUiIHZhbHVlPSJmYWxzZSIgLz4KKyAgICA8b3B0aW9uIG5hbWU9ImlzSGlzdG9yeVJlc3RpY3RlZCIgdmFsdWU9InRydWUiIC8+CisgICAgPG9wdGlvbiBuYW1lPSJ1c2VJZGVudGljYWxTd2l0Y2giIHZhbHVlPSJ0cnVlIiAvPgorICAgIDxvcHRpb24gbmFtZT0ic3luY2hBY3Rpdml0aWVzT25SZWZyZXNoIiB2YWx1ZT0idHJ1ZSIgLz4KKyAgICA8b3B0aW9uIG5hbWU9Imxhc3RTY3IiIHZhbHVlPSIiIC8+CisgICAgPG9wdGlvbiBuYW1lPSJzY3JUZXh0RmlsZU5hbWUiIHZhbHVlPSIiIC8+CisgICAgPG9wdGlvbiBuYW1lPSJoaXN0b3J5UmV2aXNpb25zTnVtYmVyIiB2YWx1ZT0iNCIgLz4KKyAgPC9jb21wb25lbnQ+CisgIDxjb21wb25lbnQgbmFtZT0iQ2hhbmdlTGlzdE1hbmFnZXIiPgorICAgIDxsaXN0IGRlZmF1bHQ9InRydWUiIHJlYWRvbmx5PSJ0cnVlIiBuYW1lPSJEZWZhdWx0IiBjb21tZW50PSIiIC8+CisgICAgPGlnbm9yZWQgcGF0aD0ic2V2ZXJhbEluc3RhbmNlcy5pd3MiIC8+CisgICAgPGlnbm9yZWQgcGF0aD0iLmlkZWEvd29ya3NwYWNlLnhtbCIgLz4KKyAgPC9jb21wb25lbnQ+CisgIDxjb21wb25lbnQgbmFtZT0iQ2hhbmdlc1ZpZXdNYW5hZ2VyIiBmbGF0dGVuZWRfdmlldz0idHJ1ZSIgc2hvd19pZ25vcmVkPSJmYWxzZSIgLz4KKyAgPGNvbXBvbmVudCBuYW1lPSJDb21tYW5kZXIiPgorICAgIDxsZWZ0UGFuZWwgLz4KKyAgICA8cmlnaHRQYW5lbCAvPgorICAgIDxzcGxpdHRlciBwcm9wb3J0aW9uPSIwLjUiIC8+CisgIDwvY29tcG9uZW50PgorICA8Y29tcG9uZW50IG5hbWU9IkNyZWF0ZVBhdGNoQ29tbWl0RXhlY3V0b3IiPgorICAgIDxvcHRpb24gbmFtZT0iUEFUQ0hfUEFUSCIgdmFsdWU9IiIgLz4KKyAgICA8b3B0aW9uIG5hbWU9IlJFVkVSU0VfUEFUQ0giIHZhbHVlPSJmYWxzZSIgLz4KKyAgPC9jb21wb25lbnQ+CisgIDxjb21wb25lbnQgbmFtZT0iRGFlbW9uQ29kZUFuYWx5emVyIj4KKyAgICA8ZGlzYWJsZV9oaW50cyAvPgorICA8L2NvbXBvbmVudD4KKyAgPGNvbXBvbmVudCBuYW1lPSJEZWJ1Z2dlck1hbmFnZXIiPgorICAgIDxicmVha3BvaW50X2FueT4KKyAgICAgIDxicmVha3BvaW50PgorICAgICAgICA8b3B0aW9uIG5hbWU9Ik5PVElGWV9DQVVHSFQiIHZhbHVlPSJ0cnVlIiAvPgorICAgICAgICA8b3B0aW9uIG5hbWU9Ik5PVElGWV9VTkNBVUdIVCIgdmFsdWU9InRydWUiIC8+CisgICAgICAgIDxvcHRpb24gbmFtZT0iRU5BQkxFRCIgdmFsdWU9ImZhbHNlIiAvPgorICAgICAgICA8b3B0aW9uIG5hbWU9IkxPR19FTkFCTEVEIiB2YWx1ZT0iZmFsc2UiIC8+CisgICAgICAgIDxvcHRpb24gbmFtZT0iTE9HX0VYUFJFU1NJT05fRU5BQkxFRCIgdmFsdWU9ImZhbHNlIiAvPgorICAgICAgICA8b3B0aW9uIG5hbWU9IlNVU1BFTkRfUE9MSUNZIiB2YWx1ZT0iU3VzcGVuZEFsbCIgLz4KKyAgICAgICAgPG9wdGlvbiBuYW1lPSJDT1VOVF9GSUxURVJfRU5BQkxFRCIgdmFsdWU9ImZhbHNlIiAvPgorICAgICAgICA8b3B0aW9uIG5hbWU9IkNPVU5UX0ZJTFRFUiIgdmFsdWU9IjAiIC8+CisgICAgICAgIDxvcHRpb24gbmFtZT0iQ09ORElUSU9OX0VOQUJMRUQiIHZhbHVlPSJmYWxzZSIgLz4KKyAgICAgICAgPG9wdGlvbiBuYW1lPSJDTEFTU19GSUxURVJTX0VOQUJMRUQiIHZhbHVlPSJmYWxzZSIgLz4KKyAgICAgICAgPG9wdGlvbiBuYW1lPSJJTlNUQU5DRV9GSUxURVJTX0VOQUJMRUQiIHZhbHVlPSJmYWxzZSIgLz4KKyAgICAgICAgPG9wdGlvbiBuYW1lPSJDT05ESVRJT04iIHZhbHVlPSIiIC8+CisgICAgICAgIDxvcHRpb24gbmFtZT0iTE9HX01FU1NBR0UiIHZhbHVlPSIiIC8+CisgICAgICA8L2JyZWFrcG9pbnQ+CisgICAgICA8YnJlYWtwb2ludD4KKyAgICAgICAgPG9wdGlvbiBuYW1lPSJOT1RJRllfQ0FVR0hUIiB2YWx1ZT0idHJ1ZSIgLz4KKyAgICAgICAgPG9wdGlvbiBuYW1lPSJOT1RJRllfVU5DQVVHSFQiIHZhbHVlPSJ0cnVlIiAvPgorICAgICAgICA8b3B0aW9uIG5hbWU9IkVOQUJMRUQiIHZhbHVlPSJmYWxzZSIgLz4KKyAgICAgICAgPG9wdGlvbiBuYW1lPSJMT0dfRU5BQkxFRCIgdmFsdWU9ImZhbHNlIiAvPgorICAgICAgICA8b3B0aW9uIG5hbWU9IkxPR19FWFBSRVNTSU9OX0VOQUJMRUQiIHZhbHVlPSJmYWxzZSIgLz4KKyAgICAgICAgPG9wdGlvbiBuYW1lPSJTVVNQRU5EX1BPTElDWSIgdmFsdWU9IlN1c3BlbmRBbGwiIC8+CisgICAgICAgIDxvcHRpb24gbmFtZT0iQ09VTlRfRklMVEVSX0VOQUJMRUQiIHZhbHVlPSJmYWxzZSIgLz4KKyAgICAgICAgPG9wdGlvbiBuYW1lPSJDT1VOVF9GSUxURVIiIHZhbHVlPSIwIiAvPgorICAgICAgICA8b3B0aW9uIG5hbWU9IkNPTkRJVElPTl9FTkFCTEVEIiB2YWx1ZT0iZmFsc2UiIC8+CisgICAgICAgIDxvcHRpb24gbmFtZT0iQ0xBU1NfRklMVEVSU19FTkFCTEVEIiB2YWx1ZT0iZmFsc2UiIC8+CisgICAgICAgIDxvcHRpb24gbmFtZT0iSU5TVEFOQ0VfRklMVEVSU19FTkFCTEVEIiB2YWx1ZT0iZmFsc2UiIC8+CisgICAgICAgIDxvcHRpb24gbmFtZT0iQ09ORElUSU9OIiB2YWx1ZT0iIiAvPgorICAgICAgICA8b3B0aW9uIG5hbWU9IkxPR19NRVNTQUdFIiB2YWx1ZT0iIiAvPgorICAgICAgPC9icmVha3BvaW50PgorICAgIDwvYnJlYWtwb2ludF9hbnk+CisgICAgPGJyZWFrcG9pbnRfcnVsZXMgLz4KKyAgICA8dWlfcHJvcGVydGllcyAvPgorICA8L2NvbXBvbmVudD4KKyAgPGNvbXBvbmVudCBuYW1lPSJGYXZvcml0ZXNNYW5hZ2VyIj4KKyAgICA8ZmF2b3JpdGVzX2xpc3QgbmFtZT0ic2V2ZXJhbEluc3RhbmNlcyIgLz4KKyAgPC9jb21wb25lbnQ+CisgIDxjb21wb25lbnQgbmFtZT0iRmlsZUVkaXRvck1hbmFnZXIiPgorICAgIDxsZWFmPgorICAgICAgPGZpbGUgbGVhZi1maWxlLW5hbWU9IlNvbWVDbGFzcy5qYXZhIiBwaW5uZWQ9ImZhbHNlIiBjdXJyZW50PSJ0cnVlIiBjdXJyZW50LWluLXRhYj0idHJ1ZSI+CisgICAgICAgIDxlbnRyeSBmaWxlPSJmaWxlOi8vJFBST0pFQ1RfRElSJC9zcmMvcHBwL1NvbWVDbGFzcy5qYXZhIj4KKyAgICAgICAgICA8cHJvdmlkZXIgc2VsZWN0ZWQ9InRydWUiIGVkaXRvci10eXBlLWlkPSJ0ZXh0LWVkaXRvciI+CisgICAgICAgICAgICA8c3RhdGUgbGluZT0iMyIgY29sdW1uPSI5IiBzZWxlY3Rpb24tc3RhcnQ9IjQ4IiBzZWxlY3Rpb24tZW5kPSI0OCIgdmVydGljYWwtc2Nyb2xsLXByb3BvcnRpb249IjAuMDU3ODg4NzYiPgorICAgICAgICAgICAgICA8Zm9sZGluZyAvPgorICAgICAgICAgICAgPC9zdGF0ZT4KKyAgICAgICAgICA8L3Byb3ZpZGVyPgorICAgICAgICA8L2VudHJ5PgorICAgICAgPC9maWxlPgorICAgICAgPGZpbGUgbGVhZi1maWxlLW5hbWU9IkJhZENsYXNzLmphdmEiIHBpbm5lZD0iZmFsc2UiIGN1cnJlbnQ9ImZhbHNlIiBjdXJyZW50LWluLXRhYj0iZmFsc2UiPgorICAgICAgICA8ZW50cnkgZmlsZT0iZmlsZTovLyRQUk9KRUNUX0RJUiQvc3JjL3BwcC9CYWRDbGFzcy5qYXZhIj4KKyAgICAgICAgICA8cHJvdmlkZXIgc2VsZWN0ZWQ9InRydWUiIGVkaXRvci10eXBlLWlkPSJ0ZXh0LWVkaXRvciI+CisgICAgICAgICAgICA8c3RhdGUgbGluZT0iOSIgY29sdW1uPSIxMyIgc2VsZWN0aW9uLXN0YXJ0PSIxODUiIHNlbGVjdGlvbi1lbmQ9IjE4NSIgdmVydGljYWwtc2Nyb2xsLXByb3BvcnRpb249IjAuMCI+CisgICAgICAgICAgICAgIDxmb2xkaW5nIC8+CisgICAgICAgICAgICA8L3N0YXRlPgorICAgICAgICAgIDwvcHJvdmlkZXI+CisgICAgICAgIDwvZW50cnk+CisgICAgICA8L2ZpbGU+CisgICAgICA8ZmlsZSBsZWFmLWZpbGUtbmFtZT0iQmFkQ2xhc3MuamF2YSIgcGlubmVkPSJmYWxzZSIgY3VycmVudD0iZmFsc2UiIGN1cnJlbnQtaW4tdGFiPSJmYWxzZSI+CisgICAgICAgIDxlbnRyeSBmaWxlPSJqYXI6Ly8kUFJPSkVDVF9ESVIkL2xpYi9saWJzcmMuemlwIS9wcHAvQmFkQ2xhc3MuamF2YSI+CisgICAgICAgICAgPHByb3ZpZGVyIHNlbGVjdGVkPSJ0cnVlIiBlZGl0b3ItdHlwZS1pZD0idGV4dC1lZGl0b3IiPgorICAgICAgICAgICAgPHN0YXRlIGxpbmU9IjkiIGNvbHVtbj0iMTMiIHNlbGVjdGlvbi1zdGFydD0iMTg1IiBzZWxlY3Rpb24tZW5kPSIxODUiIHZlcnRpY2FsLXNjcm9sbC1wcm9wb3J0aW9uPSIwLjAiPgorICAgICAgICAgICAgICA8Zm9sZGluZyAvPgorICAgICAgICAgICAgPC9zdGF0ZT4KKyAgICAgICAgICA8L3Byb3ZpZGVyPgorICAgICAgICA8L2VudHJ5PgorICAgICAgPC9maWxlPgorICAgIDwvbGVhZj4KKyAgPC9jb21wb25lbnQ+CisgIDxjb21wb25lbnQgbmFtZT0iRmluZE1hbmFnZXIiPgorICAgIDxGaW5kVXNhZ2VzTWFuYWdlcj4KKyAgICAgIDxzZXR0aW5nIG5hbWU9Ik9QRU5fTkVXX1RBQiIgdmFsdWU9ImZhbHNlIiAvPgorICAgIDwvRmluZFVzYWdlc01hbmFnZXI+CisgIDwvY29tcG9uZW50PgorICA8Y29tcG9uZW50IG5hbWU9Ik1vZHVsZUVkaXRvclN0YXRlIj4KKyAgICA8b3B0aW9uIG5hbWU9IkxBU1RfRURJVEVEX01PRFVMRV9OQU1FIiAvPgorICAgIDxvcHRpb24gbmFtZT0iTEFTVF9FRElURURfVEFCX05BTUUiIC8+CisgIDwvY29tcG9uZW50PgorICA8Y29tcG9uZW50IG5hbWU9IlByb2plY3RMZXZlbFZjc01hbmFnZXIiPgorICAgIDxPcHRpb25zU2V0dGluZyB2YWx1ZT0idHJ1ZSIgaWQ9IkFkZCIgLz4KKyAgICA8T3B0aW9uc1NldHRpbmcgdmFsdWU9InRydWUiIGlkPSJSZW1vdmUiIC8+CisgICAgPE9wdGlvbnNTZXR0aW5nIHZhbHVlPSJ0cnVlIiBpZD0iQ2hlY2tvdXQiIC8+CisgICAgPE9wdGlvbnNTZXR0aW5nIHZhbHVlPSJ0cnVlIiBpZD0iVXBkYXRlIiAvPgorICAgIDxPcHRpb25zU2V0dGluZyB2YWx1ZT0idHJ1ZSIgaWQ9IlN0YXR1cyIgLz4KKyAgICA8T3B0aW9uc1NldHRpbmcgdmFsdWU9InRydWUiIGlkPSJFZGl0IiAvPgorICAgIDxPcHRpb25zU2V0dGluZyB2YWx1ZT0idHJ1ZSIgaWQ9IlVuZG8gQ2hlY2sgT3V0IiAvPgorICAgIDxPcHRpb25zU2V0dGluZyB2YWx1ZT0idHJ1ZSIgaWQ9IkdldCBMYXRlc3QgVmVyc2lvbiIgLz4KKyAgICA8Q29uZmlybWF0aW9uc1NldHRpbmcgdmFsdWU9IjAiIGlkPSJBZGQiIC8+CisgICAgPENvbmZpcm1hdGlvbnNTZXR0aW5nIHZhbHVlPSIwIiBpZD0iUmVtb3ZlIiAvPgorICA8L2NvbXBvbmVudD4KKyAgPGNvbXBvbmVudCBuYW1lPSJQcm9qZWN0UGFuZSI+CisgICAgPHN1YlBhbmU+CisgICAgICA8UEFUSD4KKyAgICAgICAgPFBBVEhfRUxFTUVOVD4KKyAgICAgICAgICA8b3B0aW9uIG5hbWU9Im15SXRlbUlkIiB2YWx1ZT0ic2V2ZXJhbEluc3RhbmNlcyIgLz4KKyAgICAgICAgICA8b3B0aW9uIG5hbWU9Im15SXRlbVR5cGUiIHZhbHVlPSJjb20uaW50ZWxsaWouaWRlLnByb2plY3RWaWV3LmltcGwubm9kZXMuUHJvamVjdFZpZXdQcm9qZWN0Tm9kZSIgLz4KKyAgICAgICAgPC9QQVRIX0VMRU1FTlQ+CisgICAgICAgIDxQQVRIX0VMRU1FTlQ+CisgICAgICAgICAgPG9wdGlvbiBuYW1lPSJteUl0ZW1JZCIgdmFsdWU9InNldmVyYWxJbnN0YW5jZXMiIC8+CisgICAgICAgICAgPG9wdGlvbiBuYW1lPSJteUl0ZW1UeXBlIiB2YWx1ZT0iY29tLmludGVsbGlqLmlkZS5wcm9qZWN0Vmlldy5pbXBsLm5vZGVzLlByb2plY3RWaWV3TW9kdWxlTm9kZSIgLz4KKyAgICAgICAgPC9QQVRIX0VMRU1FTlQ+CisgICAgICA8L1BBVEg+CisgICAgICA8UEFUSD4KKyAgICAgICAgPFBBVEhfRUxFTUVOVD4KKyAgICAgICAgICA8b3B0aW9uIG5hbWU9Im15SXRlbUlkIiB2YWx1ZT0ic2V2ZXJhbEluc3RhbmNlcyIgLz4KKyAgICAgICAgICA8b3B0aW9uIG5hbWU9Im15SXRlbVR5cGUiIHZhbHVlPSJjb20uaW50ZWxsaWouaWRlLnByb2plY3RWaWV3LmltcGwubm9kZXMuUHJvamVjdFZpZXdQcm9qZWN0Tm9kZSIgLz4KKyAgICAgICAgPC9QQVRIX0VMRU1FTlQ+CisgICAgICAgIDxQQVRIX0VMRU1FTlQ+CisgICAgICAgICAgPG9wdGlvbiBuYW1lPSJteUl0ZW1JZCIgdmFsdWU9InNldmVyYWxJbnN0YW5jZXMiIC8+CisgICAgICAgICAgPG9wdGlvbiBuYW1lPSJteUl0ZW1UeXBlIiB2YWx1ZT0iY29tLmludGVsbGlqLmlkZS5wcm9qZWN0Vmlldy5pbXBsLm5vZGVzLlByb2plY3RWaWV3TW9kdWxlTm9kZSIgLz4KKyAgICAgICAgPC9QQVRIX0VMRU1FTlQ+CisgICAgICAgIDxQQVRIX0VMRU1FTlQ+CisgICAgICAgICAgPG9wdGlvbiBuYW1lPSJteUl0ZW1JZCIgdmFsdWU9InNldmVyYWxJbnN0YW5jZXMiIC8+CisgICAgICAgICAgPG9wdGlvbiBuYW1lPSJteUl0ZW1UeXBlIiB2YWx1ZT0iY29tLmludGVsbGlqLmlkZS5wcm9qZWN0Vmlldy5pbXBsLm5vZGVzLlBzaURpcmVjdG9yeU5vZGUiIC8+CisgICAgICAgIDwvUEFUSF9FTEVNRU5UPgorICAgICAgPC9QQVRIPgorICAgICAgPFBBVEg+CisgICAgICAgIDxQQVRIX0VMRU1FTlQ+CisgICAgICAgICAgPG9wdGlvbiBuYW1lPSJteUl0ZW1JZCIgdmFsdWU9InNldmVyYWxJbnN0YW5jZXMiIC8+CisgICAgICAgICAgPG9wdGlvbiBuYW1lPSJteUl0ZW1UeXBlIiB2YWx1ZT0iY29tLmludGVsbGlqLmlkZS5wcm9qZWN0Vmlldy5pbXBsLm5vZGVzLlByb2plY3RWaWV3UHJvamVjdE5vZGUiIC8+CisgICAgICAgIDwvUEFUSF9FTEVNRU5UPgorICAgICAgICA8UEFUSF9FTEVNRU5UPgorICAgICAgICAgIDxvcHRpb24gbmFtZT0ibXlJdGVtSWQiIHZhbHVlPSJzZXZlcmFsSW5zdGFuY2VzIiAvPgorICAgICAgICAgIDxvcHRpb24gbmFtZT0ibXlJdGVtVHlwZSIgdmFsdWU9ImNvbS5pbnRlbGxpai5pZGUucHJvamVjdFZpZXcuaW1wbC5ub2Rlcy5Qcm9qZWN0Vmlld01vZHVsZU5vZGUiIC8+CisgICAgICAgIDwvUEFUSF9FTEVNRU5UPgorICAgICAgICA8UEFUSF9FTEVNRU5UPgorICAgICAgICAgIDxvcHRpb24gbmFtZT0ibXlJdGVtSWQiIHZhbHVlPSJzZXZlcmFsSW5zdGFuY2VzIiAvPgorICAgICAgICAgIDxvcHRpb24gbmFtZT0ibXlJdGVtVHlwZSIgdmFsdWU9ImNvbS5pbnRlbGxpai5pZGUucHJvamVjdFZpZXcuaW1wbC5ub2Rlcy5Qc2lEaXJlY3RvcnlOb2RlIiAvPgorICAgICAgICA8L1BBVEhfRUxFTUVOVD4KKyAgICAgICAgPFBBVEhfRUxFTUVOVD4KKyAgICAgICAgICA8b3B0aW9uIG5hbWU9Im15SXRlbUlkIiB2YWx1ZT0ic3JjIiAvPgorICAgICAgICAgIDxvcHRpb24gbmFtZT0ibXlJdGVtVHlwZSIgdmFsdWU9ImNvbS5pbnRlbGxpai5pZGUucHJvamVjdFZpZXcuaW1wbC5ub2Rlcy5Qc2lEaXJlY3RvcnlOb2RlIiAvPgorICAgICAgICA8L1BBVEhfRUxFTUVOVD4KKyAgICAgICAgPFBBVEhfRUxFTUVOVD4KKyAgICAgICAgICA8b3B0aW9uIG5hbWU9Im15SXRlbUlkIiB2YWx1ZT0icHBwIiAvPgorICAgICAgICAgIDxvcHRpb24gbmFtZT0ibXlJdGVtVHlwZSIgdmFsdWU9ImNvbS5pbnRlbGxpai5pZGUucHJvamVjdFZpZXcuaW1wbC5ub2Rlcy5Qc2lEaXJlY3RvcnlOb2RlIiAvPgorICAgICAgICA8L1BBVEhfRUxFTUVOVD4KKyAgICAgIDwvUEFUSD4KKyAgICA8L3N1YlBhbmU+CisgIDwvY29tcG9uZW50PgorICA8Y29tcG9uZW50IG5hbWU9IlByb2plY3RSZWxvYWRTdGF0ZSI+CisgICAgPG9wdGlvbiBuYW1lPSJTVEFURSIgdmFsdWU9IjAiIC8+CisgIDwvY29tcG9uZW50PgorICA8Y29tcG9uZW50IG5hbWU9IlByb2plY3RWaWV3Ij4KKyAgICA8bmF2aWdhdG9yIGN1cnJlbnRWaWV3PSJQcm9qZWN0UGFuZSIgcHJvcG9ydGlvbnM9IjAuNSIgdmVyc2lvbj0iMSIgc3BsaXR0ZXJQcm9wb3J0aW9uPSIwLjUiPgorICAgICAgPGZsYXR0ZW5QYWNrYWdlcyAvPgorICAgICAgPHNob3dNZW1iZXJzIC8+CisgICAgICA8c2hvd01vZHVsZXMgLz4KKyAgICAgIDxzaG93TGlicmFyeUNvbnRlbnRzIC8+CisgICAgICA8aGlkZUVtcHR5UGFja2FnZXMgLz4KKyAgICAgIDxhYmJyZXZpYXRlUGFja2FnZU5hbWVzIC8+CisgICAgICA8c2hvd1N0cnVjdHVyZSBQcm9qZWN0UGFuZT0iZmFsc2UiIC8+CisgICAgICA8YXV0b3Njcm9sbFRvU291cmNlIC8+CisgICAgICA8YXV0b3Njcm9sbEZyb21Tb3VyY2UgLz4KKyAgICAgIDxzb3J0QnlUeXBlIC8+CisgICAgPC9uYXZpZ2F0b3I+CisgIDwvY29tcG9uZW50PgorICA8Y29tcG9uZW50IG5hbWU9IlByb3BlcnRpZXNDb21wb25lbnQiPgorICAgIDxwcm9wZXJ0eSBuYW1lPSJwcm9qZWN0LnN0cnVjdHVyZS5sYXN0LmVkaXRlZCIgdmFsdWU9Ik1vZHVsZXMiIC8+CisgICAgPHByb3BlcnR5IG5hbWU9IkdvVG9GaWxlLmluY2x1ZGVKYXZhRmlsZXMiIHZhbHVlPSJmYWxzZSIgLz4KKyAgICA8cHJvcGVydHkgbmFtZT0icHJvamVjdC5zdHJ1Y3R1cmUucHJvcG9ydGlvbiIgdmFsdWU9IjAuMTUiIC8+CisgICAgPHByb3BlcnR5IG5hbWU9IkdvVG9DbGFzcy50b1NhdmVJbmNsdWRlTGlicmFyaWVzIiB2YWx1ZT0iZmFsc2UiIC8+CisgICAgPHByb3BlcnR5IG5hbWU9IlJ1bk1hbmFnZXJDb25maWcuc2hvd1NldHRpbmdzQmVmb3JlUnVubmlnIiB2YWx1ZT0iZmFsc2UiIC8+CisgICAgPHByb3BlcnR5IG5hbWU9Ik1lbWJlckNob29zZXIuc29ydGVkIiB2YWx1ZT0iZmFsc2UiIC8+CisgICAgPHByb3BlcnR5IG5hbWU9Ik1lbWJlckNob29zZXIuc2hvd0NsYXNzZXMiIHZhbHVlPSJ0cnVlIiAvPgorICAgIDxwcm9wZXJ0eSBuYW1lPSJwcm9qZWN0LnN0cnVjdHVyZS5zaWRlLnByb3BvcnRpb24iIHZhbHVlPSIwLjIiIC8+CisgICAgPHByb3BlcnR5IG5hbWU9IkdvVG9DbGFzcy5pbmNsdWRlTGlicmFyaWVzIiB2YWx1ZT0iZmFsc2UiIC8+CisgICAgPHByb3BlcnR5IG5hbWU9Ik1lbWJlckNob29zZXIuY29weUphdmFkb2MiIHZhbHVlPSJmYWxzZSIgLz4KKyAgPC9jb21wb25lbnQ+CisgIDxjb21wb25lbnQgbmFtZT0iUnVuTWFuYWdlciIgc2VsZWN0ZWQ9IkFwcGxpY2F0aW9uLlNvbWVDbGFzcyI+CisgICAgPGNvbmZpZ3VyYXRpb24gZGVmYXVsdD0idHJ1ZSIgdHlwZT0iUmVtb3RlIiBmYWN0b3J5TmFtZT0iUmVtb3RlIj4KKyAgICAgIDxvcHRpb24gbmFtZT0iVVNFX1NPQ0tFVF9UUkFOU1BPUlQiIHZhbHVlPSJ0cnVlIiAvPgorICAgICAgPG9wdGlvbiBuYW1lPSJTRVJWRVJfTU9ERSIgdmFsdWU9ImZhbHNlIiAvPgorICAgICAgPG9wdGlvbiBuYW1lPSJTSE1FTV9BRERSRVNTIiB2YWx1ZT0iamF2YWRlYnVnIiAvPgorICAgICAgPG9wdGlvbiBuYW1lPSJIT1NUIiB2YWx1ZT0ibG9jYWxob3N0IiAvPgorICAgICAgPG9wdGlvbiBuYW1lPSJQT1JUIiB2YWx1ZT0iNTAwNSIgLz4KKyAgICA8L2NvbmZpZ3VyYXRpb24+CisgICAgPGNvbmZpZ3VyYXRpb24gZGVmYXVsdD0idHJ1ZSIgdHlwZT0iQXBwbGV0IiBmYWN0b3J5TmFtZT0iQXBwbGV0Ij4KKyAgICAgIDxtb2R1bGUgbmFtZT0iIiAvPgorICAgICAgPG9wdGlvbiBuYW1lPSJNQUlOX0NMQVNTX05BTUUiIC8+CisgICAgICA8b3B0aW9uIG5hbWU9IkhUTUxfRklMRV9OQU1FIiAvPgorICAgICAgPG9wdGlvbiBuYW1lPSJIVE1MX1VTRUQiIHZhbHVlPSJmYWxzZSIgLz4KKyAgICAgIDxvcHRpb24gbmFtZT0iV0lEVEgiIHZhbHVlPSI0MDAiIC8+CisgICAgICA8b3B0aW9uIG5hbWU9IkhFSUdIVCIgdmFsdWU9IjMwMCIgLz4KKyAgICAgIDxvcHRpb24gbmFtZT0iUE9MSUNZX0ZJTEUiIHZhbHVlPSIkQ1ZTX0JBU0UkL2FwcGxldHZpZXdlci5wb2xpY3kiIC8+CisgICAgICA8b3B0aW9uIG5hbWU9IlZNX1BBUkFNRVRFUlMiIC8+CisgICAgICA8b3B0aW9uIG5hbWU9IkFMVEVSTkFUSVZFX0pSRV9QQVRIX0VOQUJMRUQiIHZhbHVlPSJmYWxzZSIgLz4KKyAgICAgIDxvcHRpb24gbmFtZT0iQUxURVJOQVRJVkVfSlJFX1BBVEgiIC8+CisgICAgPC9jb25maWd1cmF0aW9uPgorICAgIDxjb25maWd1cmF0aW9uIGRlZmF1bHQ9InRydWUiIHR5cGU9IkFwcGxpY2F0aW9uIiBmYWN0b3J5TmFtZT0iQXBwbGljYXRpb24iIGVuYWJsZWQ9ImZhbHNlIiBtZXJnZT0iZmFsc2UiIHJ1bm5lcj0iZW1tYSI+CisgICAgICA8b3B0aW9uIG5hbWU9Ik1BSU5fQ0xBU1NfTkFNRSIgLz4KKyAgICAgIDxvcHRpb24gbmFtZT0iVk1fUEFSQU1FVEVSUyIgLz4KKyAgICAgIDxvcHRpb24gbmFtZT0iUFJPR1JBTV9QQVJBTUVURVJTIiAvPgorICAgICAgPG9wdGlvbiBuYW1lPSJXT1JLSU5HX0RJUkVDVE9SWSIgdmFsdWU9IiRQUk9KRUNUX0RJUiQiIC8+CisgICAgICA8b3B0aW9uIG5hbWU9IkFMVEVSTkFUSVZFX0pSRV9QQVRIX0VOQUJMRUQiIHZhbHVlPSJmYWxzZSIgLz4KKyAgICAgIDxvcHRpb24gbmFtZT0iQUxURVJOQVRJVkVfSlJFX1BBVEgiIC8+CisgICAgICA8b3B0aW9uIG5hbWU9IkVOQUJMRV9TV0lOR19JTlNQRUNUT1IiIHZhbHVlPSJmYWxzZSIgLz4KKyAgICAgIDxvcHRpb24gbmFtZT0iRU5WX1ZBUklBQkxFUyIgLz4KKyAgICAgIDxvcHRpb24gbmFtZT0iUEFTU19QQVJFTlRfRU5WUyIgdmFsdWU9InRydWUiIC8+CisgICAgICA8bW9kdWxlIG5hbWU9IiIgLz4KKyAgICAgIDxlbnZzIC8+CisgICAgPC9jb25maWd1cmF0aW9uPgorICAgIDxjb25maWd1cmF0aW9uIGRlZmF1bHQ9InRydWUiIHR5cGU9IkpVbml0IiBmYWN0b3J5TmFtZT0iSlVuaXQiIGVuYWJsZWQ9ImZhbHNlIiBtZXJnZT0iZmFsc2UiIHJ1bm5lcj0iZW1tYSI+CisgICAgICA8bW9kdWxlIG5hbWU9IiIgLz4KKyAgICAgIDxvcHRpb24gbmFtZT0iQUxURVJOQVRJVkVfSlJFX1BBVEhfRU5BQkxFRCIgdmFsdWU9ImZhbHNlIiAvPgorICAgICAgPG9wdGlvbiBuYW1lPSJBTFRFUk5BVElWRV9KUkVfUEFUSCIgLz4KKyAgICAgIDxvcHRpb24gbmFtZT0iUEFDS0FHRV9OQU1FIiAvPgorICAgICAgPG9wdGlvbiBuYW1lPSJNQUlOX0NMQVNTX05BTUUiIC8+CisgICAgICA8b3B0aW9uIG5hbWU9Ik1FVEhPRF9OQU1FIiAvPgorICAgICAgPG9wdGlvbiBuYW1lPSJURVNUX09CSkVDVCIgdmFsdWU9ImNsYXNzIiAvPgorICAgICAgPG9wdGlvbiBuYW1lPSJWTV9QQVJBTUVURVJTIiAvPgorICAgICAgPG9wdGlvbiBuYW1lPSJQQVJBTUVURVJTIiAvPgorICAgICAgPG9wdGlvbiBuYW1lPSJXT1JLSU5HX0RJUkVDVE9SWSIgdmFsdWU9IiRQUk9KRUNUX0RJUiQiIC8+CisgICAgICA8b3B0aW9uIG5hbWU9IkVOVl9WQVJJQUJMRVMiIC8+CisgICAgICA8b3B0aW9uIG5hbWU9IlBBU1NfUEFSRU5UX0VOVlMiIHZhbHVlPSJ0cnVlIiAvPgorICAgICAgPG9wdGlvbiBuYW1lPSJBRERJVElPTkFMX0NMQVNTX1BBVEgiIC8+CisgICAgICA8b3B0aW9uIG5hbWU9IlRFU1RfU0VBUkNIX1NDT1BFIj4KKyAgICAgICAgPHZhbHVlIGRlZmF1bHROYW1lPSJtb2R1bGVXaXRoRGVwZW5kZW5jaWVzIiAvPgorICAgICAgPC9vcHRpb24+CisgICAgICA8ZW52cyAvPgorICAgIDwvY29uZmlndXJhdGlvbj4KKyAgICA8Y29uZmlndXJhdGlvbiBkZWZhdWx0PSJmYWxzZSIgbmFtZT0iU29tZUNsYXNzIiB0eXBlPSJBcHBsaWNhdGlvbiIgZmFjdG9yeU5hbWU9IkFwcGxpY2F0aW9uIiBlbmFibGVkPSJmYWxzZSIgbWVyZ2U9ImZhbHNlIiBzYW1wbGVfY292ZXJhZ2U9InRydWUiIHJ1bm5lcj0iZW1tYSI+CisgICAgICA8b3B0aW9uIG5hbWU9Ik1BSU5fQ0xBU1NfTkFNRSIgdmFsdWU9InBwcC5Tb21lQ2xhc3MiIC8+CisgICAgICA8b3B0aW9uIG5hbWU9IlZNX1BBUkFNRVRFUlMiIHZhbHVlPSIiIC8+CisgICAgICA8b3B0aW9uIG5hbWU9IlBST0dSQU1fUEFSQU1FVEVSUyIgdmFsdWU9IiIgLz4KKyAgICAgIDxvcHRpb24gbmFtZT0iV09SS0lOR19ESVJFQ1RPUlkiIHZhbHVlPSJmaWxlOi8vJFBST0pFQ1RfRElSJCIgLz4KKyAgICAgIDxvcHRpb24gbmFtZT0iQUxURVJOQVRJVkVfSlJFX1BBVEhfRU5BQkxFRCIgdmFsdWU9ImZhbHNlIiAvPgorICAgICAgPG9wdGlvbiBuYW1lPSJBTFRFUk5BVElWRV9KUkVfUEFUSCIgdmFsdWU9IiIgLz4KKyAgICAgIDxvcHRpb24gbmFtZT0iRU5BQkxFX1NXSU5HX0lOU1BFQ1RPUiIgdmFsdWU9ImZhbHNlIiAvPgorICAgICAgPG9wdGlvbiBuYW1lPSJFTlZfVkFSSUFCTEVTIiAvPgorICAgICAgPG9wdGlvbiBuYW1lPSJQQVNTX1BBUkVOVF9FTlZTIiB2YWx1ZT0idHJ1ZSIgLz4KKyAgICAgIDxtb2R1bGUgbmFtZT0ic2V2ZXJhbEluc3RhbmNlcyIgLz4KKyAgICAgIDxlbnZzIC8+CisgICAgICA8UnVubmVyU2V0dGluZ3MgUnVubmVySWQ9IlJ1biIgLz4KKyAgICAgIDxDb25maWd1cmF0aW9uV3JhcHBlciBSdW5uZXJJZD0iUnVuIiAvPgorICAgICAgPG1ldGhvZD4KKyAgICAgICAgPG9wdGlvbiBuYW1lPSJNYWtlIiB2YWx1ZT0idHJ1ZSIgLz4KKyAgICAgIDwvbWV0aG9kPgorICAgIDwvY29uZmlndXJhdGlvbj4KKyAgICA8bGlzdCBzaXplPSIxIj4KKyAgICAgIDxpdGVtIGluZGV4PSIwIiBjbGFzcz0iamF2YS5sYW5nLlN0cmluZyIgaXRlbXZhbHVlPSJBcHBsaWNhdGlvbi5Tb21lQ2xhc3MiIC8+CisgICAgPC9saXN0PgorICAgIDxjb25maWd1cmF0aW9uIG5hbWU9IiZsdDt0ZW1wbGF0ZSZndDsiIHR5cGU9IldlYkFwcCIgZGVmYXVsdD0idHJ1ZSIgc2VsZWN0ZWQ9ImZhbHNlIj4KKyAgICAgIDxIb3N0PmxvY2FsaG9zdDwvSG9zdD4KKyAgICAgIDxQb3J0PjUwNTA8L1BvcnQ+CisgICAgPC9jb25maWd1cmF0aW9uPgorICA8L2NvbXBvbmVudD4KKyAgPGNvbXBvbmVudCBuYW1lPSJTaGVsdmVDaGFuZ2VzTWFuYWdlciIgc2hvd19yZWN5Y2xlZD0iZmFsc2UiIC8+CisgIDxjb21wb25lbnQgbmFtZT0iU3RhcnRlYW1Db25maWd1cmF0aW9uIj4KKyAgICA8b3B0aW9uIG5hbWU9IlNFUlZFUiIgdmFsdWU9IiIgLz4KKyAgICA8b3B0aW9uIG5hbWU9IlBPUlQiIHZhbHVlPSI0OTIwMSIgLz4KKyAgICA8b3B0aW9uIG5hbWU9IlVTRVIiIHZhbHVlPSIiIC8+CisgICAgPG9wdGlvbiBuYW1lPSJQQVNTV09SRCIgdmFsdWU9IiIgLz4KKyAgICA8b3B0aW9uIG5hbWU9IlBST0pFQ1QiIHZhbHVlPSIiIC8+CisgICAgPG9wdGlvbiBuYW1lPSJWSUVXIiB2YWx1ZT0iIiAvPgorICAgIDxvcHRpb24gbmFtZT0iQUxURVJOQVRJVkVfV09SS0lOR19QQVRIIiB2YWx1ZT0iIiAvPgorICAgIDxvcHRpb24gbmFtZT0iTE9DS19PTl9DSEVDS09VVCIgdmFsdWU9ImZhbHNlIiAvPgorICAgIDxvcHRpb24gbmFtZT0iVU5MT0NLX09OX0NIRUNLSU4iIHZhbHVlPSJmYWxzZSIgLz4KKyAgPC9jb21wb25lbnQ+CisgIDxjb21wb25lbnQgbmFtZT0iU3RydWN0dXJlVmlld0ZhY3RvcnkiPgorICAgIDxvcHRpb24gbmFtZT0iQVVUT1NDUk9MTF9NT0RFIiB2YWx1ZT0idHJ1ZSIgLz4KKyAgICA8b3B0aW9uIG5hbWU9IkFVVE9TQ1JPTExfRlJPTV9TT1VSQ0UiIHZhbHVlPSJmYWxzZSIgLz4KKyAgICA8b3B0aW9uIG5hbWU9IkFDVElWRV9BQ1RJT05TIiB2YWx1ZT0iIiAvPgorICA8L2NvbXBvbmVudD4KKyAgPGNvbXBvbmVudCBuYW1lPSJTdm5Db25maWd1cmF0aW9uIj4KKyAgICA8b3B0aW9uIG5hbWU9IlVTRVIiIHZhbHVlPSIiIC8+CisgICAgPG9wdGlvbiBuYW1lPSJQQVNTV09SRCIgdmFsdWU9IiIgLz4KKyAgICA8b3B0aW9uIG5hbWU9IkxBU1RfTUVSR0VEX1JFVklTSU9OIiAvPgorICAgIDxvcHRpb24gbmFtZT0iVVBEQVRFX1JVTl9TVEFUVVMiIHZhbHVlPSJmYWxzZSIgLz4KKyAgICA8b3B0aW9uIG5hbWU9Ik1FUkdFX0RSWV9SVU4iIHZhbHVlPSJmYWxzZSIgLz4KKyAgICA8b3B0aW9uIG5hbWU9Ik1FUkdFX0RJRkZfVVNFX0FOQ0VTVFJZIiB2YWx1ZT0idHJ1ZSIgLz4KKyAgICA8b3B0aW9uIG5hbWU9IlVQREFURV9MT0NLX09OX0RFTUFORCIgdmFsdWU9ImZhbHNlIiAvPgorICAgIDxjb25maWd1cmF0aW9uIHVzZURlZmF1bHQ9InRydWUiPkM6XERvY3VtZW50cyBhbmQgU2V0dGluZ3NcamVrYVxBcHBsaWNhdGlvbiBEYXRhXFN1YnZlcnNpb248L2NvbmZpZ3VyYXRpb24+CisgICAgPG15SXNVc2VEZWZhdWx0UHJveHk+ZmFsc2U8L215SXNVc2VEZWZhdWx0UHJveHk+CisgIDwvY29tcG9uZW50PgorICA8Y29tcG9uZW50IG5hbWU9IlRvZG9WaWV3IiBzZWxlY3RlZC1pbmRleD0iMCI+CisgICAgPHRvZG8tcGFuZWwgaWQ9InNlbGVjdGVkLWZpbGUiPgorICAgICAgPGFyZS1wYWNrYWdlcy1zaG93biB2YWx1ZT0iZmFsc2UiIC8+CisgICAgICA8YXJlLW1vZHVsZXMtc2hvd24gdmFsdWU9ImZhbHNlIiAvPgorICAgICAgPGZsYXR0ZW4tcGFja2FnZXMgdmFsdWU9ImZhbHNlIiAvPgorICAgICAgPGlzLWF1dG9zY3JvbGwtdG8tc291cmNlIHZhbHVlPSJ0cnVlIiAvPgorICAgIDwvdG9kby1wYW5lbD4KKyAgICA8dG9kby1wYW5lbCBpZD0iYWxsIj4KKyAgICAgIDxhcmUtcGFja2FnZXMtc2hvd24gdmFsdWU9InRydWUiIC8+CisgICAgICA8YXJlLW1vZHVsZXMtc2hvd24gdmFsdWU9ImZhbHNlIiAvPgorICAgICAgPGZsYXR0ZW4tcGFja2FnZXMgdmFsdWU9ImZhbHNlIiAvPgorICAgICAgPGlzLWF1dG9zY3JvbGwtdG8tc291cmNlIHZhbHVlPSJ0cnVlIiAvPgorICAgIDwvdG9kby1wYW5lbD4KKyAgICA8dG9kby1wYW5lbCBpZD0iZGVmYXVsdC1jaGFuZ2VsaXN0Ij4KKyAgICAgIDxhcmUtcGFja2FnZXMtc2hvd24gdmFsdWU9ImZhbHNlIiAvPgorICAgICAgPGFyZS1tb2R1bGVzLXNob3duIHZhbHVlPSJmYWxzZSIgLz4KKyAgICAgIDxmbGF0dGVuLXBhY2thZ2VzIHZhbHVlPSJmYWxzZSIgLz4KKyAgICAgIDxpcy1hdXRvc2Nyb2xsLXRvLXNvdXJjZSB2YWx1ZT0iZmFsc2UiIC8+CisgICAgPC90b2RvLXBhbmVsPgorICA8L2NvbXBvbmVudD4KKyAgPGNvbXBvbmVudCBuYW1lPSJUb29sV2luZG93TWFuYWdlciI+CisgICAgPGZyYW1lIHg9IjEyNzYiIHk9Ii00IiB3aWR0aD0iMTI4OCIgaGVpZ2h0PSIxMDMyIiBleHRlbmRlZC1zdGF0ZT0iMCIgLz4KKyAgICA8ZWRpdG9yIGFjdGl2ZT0idHJ1ZSIgLz4KKyAgICA8bGF5b3V0PgorICAgICAgPHdpbmRvd19pbmZvIGlkPSJDaGFuZ2VzIiBhY3RpdmU9ImZhbHNlIiBhbmNob3I9ImJvdHRvbSIgYXV0b19oaWRlPSJmYWxzZSIgaW50ZXJuYWxfdHlwZT0iRE9DS0VEIiB0eXBlPSJET0NLRUQiIHZpc2libGU9ImZhbHNlIiB3ZWlnaHQ9IjAuMzMiIHNpZGVXZWlnaHQ9IjAuNSIgb3JkZXI9IjciIHNpZGVfdG9vbD0iZmFsc2UiIC8+CisgICAgICA8d2luZG93X2luZm8gaWQ9IlBhbGV0dGUiIGFjdGl2ZT0iZmFsc2UiIGFuY2hvcj0icmlnaHQiIGF1dG9faGlkZT0iZmFsc2UiIGludGVybmFsX3R5cGU9IkRPQ0tFRCIgdHlwZT0iRE9DS0VEIiB2aXNpYmxlPSJmYWxzZSIgd2VpZ2h0PSIwLjMzIiBzaWRlV2VpZ2h0PSIwLjUiIG9yZGVyPSIzIiBzaWRlX3Rvb2w9ImZhbHNlIiAvPgorICAgICAgPHdpbmRvd19pbmZvIGlkPSJEYXRhYmFzZSIgYWN0aXZlPSJmYWxzZSIgYW5jaG9yPSJyaWdodCIgYXV0b19oaWRlPSJmYWxzZSIgaW50ZXJuYWxfdHlwZT0iRE9DS0VEIiB0eXBlPSJET0NLRUQiIHZpc2libGU9ImZhbHNlIiB3ZWlnaHQ9IjAuMzMiIHNpZGVXZWlnaHQ9IjAuNSIgb3JkZXI9IjMiIHNpZGVfdG9vbD0iZmFsc2UiIC8+CisgICAgICA8d2luZG93X2luZm8gaWQ9IkFudCBCdWlsZCIgYWN0aXZlPSJmYWxzZSIgYW5jaG9yPSJyaWdodCIgYXV0b19oaWRlPSJmYWxzZSIgaW50ZXJuYWxfdHlwZT0iRE9DS0VEIiB0eXBlPSJET0NLRUQiIHZpc2libGU9ImZhbHNlIiB3ZWlnaHQ9IjAuMjUiIHNpZGVXZWlnaHQ9IjAuNSIgb3JkZXI9IjEiIHNpZGVfdG9vbD0iZmFsc2UiIC8+CisgICAgICA8d2luZG93X2luZm8gaWQ9IkZpbmQiIGFjdGl2ZT0iZmFsc2UiIGFuY2hvcj0iYm90dG9tIiBhdXRvX2hpZGU9ImZhbHNlIiBpbnRlcm5hbF90eXBlPSJET0NLRUQiIHR5cGU9IkRPQ0tFRCIgdmlzaWJsZT0iZmFsc2UiIHdlaWdodD0iMC4zMyIgc2lkZVdlaWdodD0iMC41IiBvcmRlcj0iMSIgc2lkZV90b29sPSJmYWxzZSIgLz4KKyAgICAgIDx3aW5kb3dfaW5mbyBpZD0iRGVidWciIGFjdGl2ZT0iZmFsc2UiIGFuY2hvcj0iYm90dG9tIiBhdXRvX2hpZGU9ImZhbHNlIiBpbnRlcm5hbF90eXBlPSJET0NLRUQiIHR5cGU9IkRPQ0tFRCIgdmlzaWJsZT0iZmFsc2UiIHdlaWdodD0iMC40IiBzaWRlV2VpZ2h0PSIwLjUiIG9yZGVyPSIzIiBzaWRlX3Rvb2w9ImZhbHNlIiAvPgorICAgICAgPHdpbmRvd19pbmZvIGlkPSJWZXJzaW9uIENvbnRyb2wiIGFjdGl2ZT0iZmFsc2UiIGFuY2hvcj0iYm90dG9tIiBhdXRvX2hpZGU9ImZhbHNlIiBpbnRlcm5hbF90eXBlPSJET0NLRUQiIHR5cGU9IkRPQ0tFRCIgdmlzaWJsZT0iZmFsc2UiIHdlaWdodD0iMC4zMyIgc2lkZVdlaWdodD0iMC41IiBvcmRlcj0iNyIgc2lkZV90b29sPSJmYWxzZSIgLz4KKyAgICAgIDx3aW5kb3dfaW5mbyBpZD0iU2xpY2UiIGFjdGl2ZT0iZmFsc2UiIGFuY2hvcj0iYm90dG9tIiBhdXRvX2hpZGU9ImZhbHNlIiBpbnRlcm5hbF90eXBlPSJET0NLRUQiIHR5cGU9IkRPQ0tFRCIgdmlzaWJsZT0iZmFsc2UiIHdlaWdodD0iMC4zMyIgc2lkZVdlaWdodD0iMC41IiBvcmRlcj0iNyIgc2lkZV90b29sPSJmYWxzZSIgLz4KKyAgICAgIDx3aW5kb3dfaW5mbyBpZD0iTWVzc2FnZXMiIGFjdGl2ZT0iZmFsc2UiIGFuY2hvcj0iYm90dG9tIiBhdXRvX2hpZGU9ImZhbHNlIiBpbnRlcm5hbF90eXBlPSJET0NLRUQiIHR5cGU9IkRPQ0tFRCIgdmlzaWJsZT0iZmFsc2UiIHdlaWdodD0iMC4zMyIgc2lkZVdlaWdodD0iMC41IiBvcmRlcj0iNyIgc2lkZV90b29sPSJmYWxzZSIgLz4KKyAgICAgIDx3aW5kb3dfaW5mbyBpZD0iVE9ETyIgYWN0aXZlPSJmYWxzZSIgYW5jaG9yPSJib3R0b20iIGF1dG9faGlkZT0iZmFsc2UiIGludGVybmFsX3R5cGU9IkRPQ0tFRCIgdHlwZT0iRE9DS0VEIiB2aXNpYmxlPSJmYWxzZSIgd2VpZ2h0PSIwLjMzIiBzaWRlV2VpZ2h0PSIwLjUiIG9yZGVyPSI2IiBzaWRlX3Rvb2w9ImZhbHNlIiAvPgorICAgICAgPHdpbmRvd19pbmZvIGlkPSJTdHJ1Y3R1cmUiIGFjdGl2ZT0iZmFsc2UiIGFuY2hvcj0ibGVmdCIgYXV0b19oaWRlPSJmYWxzZSIgaW50ZXJuYWxfdHlwZT0iRE9DS0VEIiB0eXBlPSJET0NLRUQiIHZpc2libGU9ImZhbHNlIiB3ZWlnaHQ9IjAuMjUiIHNpZGVXZWlnaHQ9IjAuNSIgb3JkZXI9IjEiIHNpZGVfdG9vbD0iZmFsc2UiIC8+CisgICAgICA8d2luZG93X2luZm8gaWQ9IkNvbW1hbmRlciIgYWN0aXZlPSJmYWxzZSIgYW5jaG9yPSJyaWdodCIgYXV0b19oaWRlPSJmYWxzZSIgaW50ZXJuYWxfdHlwZT0iRE9DS0VEIiB0eXBlPSJET0NLRUQiIHZpc2libGU9ImZhbHNlIiB3ZWlnaHQ9IjAuNCIgc2lkZVdlaWdodD0iMC41IiBvcmRlcj0iMCIgc2lkZV90b29sPSJmYWxzZSIgLz4KKyAgICAgIDx3aW5kb3dfaW5mbyBpZD0iTWF2ZW4gUHJvamVjdHMiIGFjdGl2ZT0iZmFsc2UiIGFuY2hvcj0icmlnaHQiIGF1dG9faGlkZT0iZmFsc2UiIGludGVybmFsX3R5cGU9IkRPQ0tFRCIgdHlwZT0iRE9DS0VEIiB2aXNpYmxlPSJmYWxzZSIgd2VpZ2h0PSIwLjMzIiBzaWRlV2VpZ2h0PSIwLjUiIG9yZGVyPSIzIiBzaWRlX3Rvb2w9ImZhbHNlIiAvPgorICAgICAgPHdpbmRvd19pbmZvIGlkPSJNb2R1bGUgRGVwZW5kZW5jaWVzIiBhY3RpdmU9ImZhbHNlIiBhbmNob3I9InJpZ2h0IiBhdXRvX2hpZGU9ImZhbHNlIiBpbnRlcm5hbF90eXBlPSJET0NLRUQiIHR5cGU9IkRPQ0tFRCIgdmlzaWJsZT0iZmFsc2UiIHdlaWdodD0iMC4zMyIgc2lkZVdlaWdodD0iMC41IiBvcmRlcj0iMyIgc2lkZV90b29sPSJmYWxzZSIgLz4KKyAgICAgIDx3aW5kb3dfaW5mbyBpZD0iUHJvamVjdCIgYWN0aXZlPSJmYWxzZSIgYW5jaG9yPSJsZWZ0IiBhdXRvX2hpZGU9ImZhbHNlIiBpbnRlcm5hbF90eXBlPSJET0NLRUQiIHR5cGU9IkRPQ0tFRCIgdmlzaWJsZT0idHJ1ZSIgd2VpZ2h0PSIwLjI1IiBzaWRlV2VpZ2h0PSIwLjY2MDk0OTkiIG9yZGVyPSIwIiBzaWRlX3Rvb2w9ImZhbHNlIiAvPgorICAgICAgPHdpbmRvd19pbmZvIGlkPSJEZXBlbmRlbmN5IFZpZXdlciIgYWN0aXZlPSJmYWxzZSIgYW5jaG9yPSJib3R0b20iIGF1dG9faGlkZT0iZmFsc2UiIGludGVybmFsX3R5cGU9IkRPQ0tFRCIgdHlwZT0iRE9DS0VEIiB2aXNpYmxlPSJmYWxzZSIgd2VpZ2h0PSIwLjMzIiBzaWRlV2VpZ2h0PSIwLjUiIG9yZGVyPSI3IiBzaWRlX3Rvb2w9ImZhbHNlIiAvPgorICAgICAgPHdpbmRvd19pbmZvIGlkPSJJbnNwZWN0aW9uIiBhY3RpdmU9ImZhbHNlIiBhbmNob3I9ImJvdHRvbSIgYXV0b19oaWRlPSJmYWxzZSIgaW50ZXJuYWxfdHlwZT0iRE9DS0VEIiB0eXBlPSJET0NLRUQiIHZpc2libGU9ImZhbHNlIiB3ZWlnaHQ9IjAuNCIgc2lkZVdlaWdodD0iMC41IiBvcmRlcj0iNSIgc2lkZV90b29sPSJmYWxzZSIgLz4KKyAgICAgIDx3aW5kb3dfaW5mbyBpZD0iRHVwbGljYXRlcyIgYWN0aXZlPSJmYWxzZSIgYW5jaG9yPSJib3R0b20iIGF1dG9faGlkZT0iZmFsc2UiIGludGVybmFsX3R5cGU9IkRPQ0tFRCIgdHlwZT0iRE9DS0VEIiB2aXNpYmxlPSJmYWxzZSIgd2VpZ2h0PSIwLjMzIiBzaWRlV2VpZ2h0PSIwLjUiIG9yZGVyPSI3IiBzaWRlX3Rvb2w9ImZhbHNlIiAvPgorICAgICAgPHdpbmRvd19pbmZvIGlkPSJSdW4iIGFjdGl2ZT0iZmFsc2UiIGFuY2hvcj0iYm90dG9tIiBhdXRvX2hpZGU9ImZhbHNlIiBpbnRlcm5hbF90eXBlPSJET0NLRUQiIHR5cGU9IkRPQ0tFRCIgdmlzaWJsZT0iZmFsc2UiIHdlaWdodD0iMC4zMjk4MTUzIiBzaWRlV2VpZ2h0PSIwLjUiIG9yZGVyPSIyIiBzaWRlX3Rvb2w9ImZhbHNlIiAvPgorICAgICAgPHdpbmRvd19pbmZvIGlkPSJDdnMiIGFjdGl2ZT0iZmFsc2UiIGFuY2hvcj0iYm90dG9tIiBhdXRvX2hpZGU9ImZhbHNlIiBpbnRlcm5hbF90eXBlPSJET0NLRUQiIHR5cGU9IkRPQ0tFRCIgdmlzaWJsZT0iZmFsc2UiIHdlaWdodD0iMC4yNSIgc2lkZVdlaWdodD0iMC41IiBvcmRlcj0iNCIgc2lkZV90b29sPSJmYWxzZSIgLz4KKyAgICAgIDx3aW5kb3dfaW5mbyBpZD0iTWVzc2FnZSIgYWN0aXZlPSJmYWxzZSIgYW5jaG9yPSJib3R0b20iIGF1dG9faGlkZT0iZmFsc2UiIGludGVybmFsX3R5cGU9IkRPQ0tFRCIgdHlwZT0iRE9DS0VEIiB2aXNpYmxlPSJmYWxzZSIgd2VpZ2h0PSIwLjMzIiBzaWRlV2VpZ2h0PSIwLjUiIG9yZGVyPSIwIiBzaWRlX3Rvb2w9ImZhbHNlIiAvPgorICAgICAgPHdpbmRvd19pbmZvIGlkPSJXZWIiIGFjdGl2ZT0iZmFsc2UiIGFuY2hvcj0ibGVmdCIgYXV0b19oaWRlPSJmYWxzZSIgaW50ZXJuYWxfdHlwZT0iRE9DS0VEIiB0eXBlPSJET0NLRUQiIHZpc2libGU9ImZhbHNlIiB3ZWlnaHQ9IjAuMjUiIHNpZGVXZWlnaHQ9IjAuNSIgb3JkZXI9IjIiIHNpZGVfdG9vbD0iZmFsc2UiIC8+CisgICAgICA8d2luZG93X2luZm8gaWQ9IkVKQiIgYWN0aXZlPSJmYWxzZSIgYW5jaG9yPSJib3R0b20iIGF1dG9faGlkZT0iZmFsc2UiIGludGVybmFsX3R5cGU9IkRPQ0tFRCIgdHlwZT0iRE9DS0VEIiB2aXNpYmxlPSJmYWxzZSIgd2VpZ2h0PSIwLjI1IiBzaWRlV2VpZ2h0PSIwLjUiIG9yZGVyPSI0IiBzaWRlX3Rvb2w9ImZhbHNlIiAvPgorICAgICAgPHdpbmRvd19pbmZvIGlkPSJIaWVyYXJjaHkiIGFjdGl2ZT0iZmFsc2UiIGFuY2hvcj0icmlnaHQiIGF1dG9faGlkZT0iZmFsc2UiIGludGVybmFsX3R5cGU9IkRPQ0tFRCIgdHlwZT0iRE9DS0VEIiB2aXNpYmxlPSJmYWxzZSIgd2VpZ2h0PSIwLjI1IiBzaWRlV2VpZ2h0PSIwLjUiIG9yZGVyPSIyIiBzaWRlX3Rvb2w9ImZhbHNlIiAvPgorICAgIDwvbGF5b3V0PgorICA8L2NvbXBvbmVudD4KKyAgPGNvbXBvbmVudCBuYW1lPSJWY3NNYW5hZ2VyQ29uZmlndXJhdGlvbiI+CisgICAgPG9wdGlvbiBuYW1lPSJPRkZFUl9NT1ZFX1RPX0FOT1RIRVJfQ0hBTkdFTElTVF9PTl9QQVJUSUFMX0NPTU1JVCIgdmFsdWU9InRydWUiIC8+CisgICAgPG9wdGlvbiBuYW1lPSJDSEVDS19DT0RFX1NNRUxMU19CRUZPUkVfUFJPSkVDVF9DT01NSVQiIHZhbHVlPSJ0cnVlIiAvPgorICAgIDxvcHRpb24gbmFtZT0iUEVSRk9STV9VUERBVEVfSU5fQkFDS0dST1VORCIgdmFsdWU9ImZhbHNlIiAvPgorICAgIDxvcHRpb24gbmFtZT0iUEVSRk9STV9DT01NSVRfSU5fQkFDS0dST1VORCIgdmFsdWU9ImZhbHNlIiAvPgorICAgIDxvcHRpb24gbmFtZT0iUEVSRk9STV9FRElUX0lOX0JBQ0tHUk9VTkQiIHZhbHVlPSJ0cnVlIiAvPgorICAgIDxvcHRpb24gbmFtZT0iUEVSRk9STV9DSEVDS09VVF9JTl9CQUNLR1JPVU5EIiB2YWx1ZT0idHJ1ZSIgLz4KKyAgICA8b3B0aW9uIG5hbWU9IlBFUkZPUk1fQUREX1JFTU9WRV9JTl9CQUNLR1JPVU5EIiB2YWx1ZT0idHJ1ZSIgLz4KKyAgICA8b3B0aW9uIG5hbWU9IkZPUkNFX05PTl9FTVBUWV9DT01NRU5UIiB2YWx1ZT0iZmFsc2UiIC8+CisgICAgPG9wdGlvbiBuYW1lPSJMQVNUX0NPTU1JVF9NRVNTQUdFIiAvPgorICAgIDxvcHRpb24gbmFtZT0iT1BUSU1JWkVfSU1QT1JUU19CRUZPUkVfUFJPSkVDVF9DT01NSVQiIHZhbHVlPSJmYWxzZSIgLz4KKyAgICA8b3B0aW9uIG5hbWU9IlJFRk9STUFUX0JFRk9SRV9QUk9KRUNUX0NPTU1JVCIgdmFsdWU9ImZhbHNlIiAvPgorICAgIDxvcHRpb24gbmFtZT0iUkVGT1JNQVRfQkVGT1JFX0ZJTEVfQ09NTUlUIiB2YWx1ZT0iZmFsc2UiIC8+CisgICAgPG9wdGlvbiBuYW1lPSJGSUxFX0hJU1RPUllfRElBTE9HX0NPTU1FTlRTX1NQTElUVEVSX1BST1BPUlRJT04iIHZhbHVlPSIwLjgiIC8+CisgICAgPG9wdGlvbiBuYW1lPSJGSUxFX0hJU1RPUllfRElBTE9HX1NQTElUVEVSX1BST1BPUlRJT04iIHZhbHVlPSIwLjUiIC8+CisgICAgPG9wdGlvbiBuYW1lPSJBQ1RJVkVfVkNTX05BTUUiIC8+CisgICAgPG9wdGlvbiBuYW1lPSJVUERBVEVfR1JPVVBfQllfUEFDS0FHRVMiIHZhbHVlPSJmYWxzZSIgLz4KKyAgICA8b3B0aW9uIG5hbWU9IlVQREFURV9HUk9VUF9CWV9DSEFOR0VMSVNUIiB2YWx1ZT0iZmFsc2UiIC8+CisgICAgPG9wdGlvbiBuYW1lPSJTSE9XX0ZJTEVfSElTVE9SWV9BU19UUkVFIiB2YWx1ZT0iZmFsc2UiIC8+CisgICAgPG9wdGlvbiBuYW1lPSJGSUxFX0hJU1RPUllfU1BMSVRURVJfUFJPUE9SVElPTiIgdmFsdWU9IjAuNiIgLz4KKyAgPC9jb21wb25lbnQ+CisgIDxjb21wb25lbnQgbmFtZT0iVnNzQ29uZmlndXJhdGlvbiI+CisgICAgPG9wdGlvbiBuYW1lPSJDTElFTlRfUEFUSCIgdmFsdWU9IiIgLz4KKyAgICA8b3B0aW9uIG5hbWU9IlNSQ1NBRkVJTklfUEFUSCIgdmFsdWU9IiIgLz4KKyAgICA8b3B0aW9uIG5hbWU9IlVTRVJfTkFNRSIgdmFsdWU9IiIgLz4KKyAgICA8b3B0aW9uIG5hbWU9IlBXRCIgdmFsdWU9IiIgLz4KKyAgICA8Q2hlY2tvdXRPcHRpb25zPgorICAgICAgPG9wdGlvbiBuYW1lPSJDT01NRU5UIiB2YWx1ZT0iIiAvPgorICAgICAgPG9wdGlvbiBuYW1lPSJET19OT1RfR0VUX0xBVEVTVF9WRVJTSU9OIiB2YWx1ZT0iZmFsc2UiIC8+CisgICAgICA8b3B0aW9uIG5hbWU9IlJFUExBQ0VfV1JJVEFCTEUiIHZhbHVlPSJmYWxzZSIgLz4KKyAgICAgIDxvcHRpb24gbmFtZT0iUkVDVVJTSVZFIiB2YWx1ZT0iZmFsc2UiIC8+CisgICAgPC9DaGVja291dE9wdGlvbnM+CisgICAgPENoZWNraW5PcHRpb25zPgorICAgICAgPG9wdGlvbiBuYW1lPSJDT01NRU5UIiB2YWx1ZT0iIiAvPgorICAgICAgPG9wdGlvbiBuYW1lPSJLRUVQX0NIRUNLRURfT1VUIiB2YWx1ZT0iZmFsc2UiIC8+CisgICAgICA8b3B0aW9uIG5hbWU9IlJFQ1VSU0lWRSIgdmFsdWU9ImZhbHNlIiAvPgorICAgIDwvQ2hlY2tpbk9wdGlvbnM+CisgICAgPEFkZE9wdGlvbnM+CisgICAgICA8b3B0aW9uIG5hbWU9IlNUT1JFX09OTFlfTEFURVNUX1ZFUlNJT04iIHZhbHVlPSJmYWxzZSIgLz4KKyAgICAgIDxvcHRpb24gbmFtZT0iQ0hFQ0tfT1VUX0lNTUVESUFURUxZIiB2YWx1ZT0iZmFsc2UiIC8+CisgICAgPC9BZGRPcHRpb25zPgorICAgIDxVbmRvY2hlY2tvdXRPcHRpb25zPgorICAgICAgPG9wdGlvbiBuYW1lPSJNQUtFX1dSSVRBQkxFIiB2YWx1ZT0iZmFsc2UiIC8+CisgICAgICA8b3B0aW9uIG5hbWU9IlJFUExBQ0VfTE9DQUxfQ09QWSIgdmFsdWU9IjIiIC8+CisgICAgICA8b3B0aW9uIG5hbWU9IlJFQ1VSU0lWRSIgdmFsdWU9ImZhbHNlIiAvPgorICAgIDwvVW5kb2NoZWNrb3V0T3B0aW9ucz4KKyAgICA8R2V0T3B0aW9ucz4KKyAgICAgIDxvcHRpb24gbmFtZT0iUkVQTEFDRV9XUklUQUJMRSIgdmFsdWU9IjAiIC8+CisgICAgICA8b3B0aW9uIG5hbWU9Ik1BS0VfV1JJVEFCTEUiIHZhbHVlPSJmYWxzZSIgLz4KKyAgICAgIDxvcHRpb24gbmFtZT0iQU5TV0VSX05FR0FUSVZFTFkiIHZhbHVlPSJmYWxzZSIgLz4KKyAgICAgIDxvcHRpb24gbmFtZT0iQU5TV0VSX1BPU0lUSVZFTFkiIHZhbHVlPSJmYWxzZSIgLz4KKyAgICAgIDxvcHRpb24gbmFtZT0iUkVDVVJTSVZFIiB2YWx1ZT0iZmFsc2UiIC8+CisgICAgICA8b3B0aW9uIG5hbWU9IlZFUlNJT04iIC8+CisgICAgPC9HZXRPcHRpb25zPgorICA8L2NvbXBvbmVudD4KKyAgPGNvbXBvbmVudCBuYW1lPSJYRGVidWdnZXJNYW5hZ2VyIj4KKyAgICA8YnJlYWtwb2ludC1tYW5hZ2VyIC8+CisgIDwvY29tcG9uZW50PgorICA8Y29tcG9uZW50IG5hbWU9IlhQYXRoVmlldy5YUGF0aFByb2plY3RDb21wb25lbnQiPgorICAgIDxoaXN0b3J5IC8+CisgICAgPGZpbmQtaGlzdG9yeSAvPgorICA8L2NvbXBvbmVudD4KKyAgPGNvbXBvbmVudCBuYW1lPSJhbnRXb3Jrc3BhY2VDb25maWd1cmF0aW9uIj4KKyAgICA8b3B0aW9uIG5hbWU9IklTX0FVVE9TQ1JPTExfVE9fU09VUkNFIiB2YWx1ZT0iZmFsc2UiIC8+CisgICAgPG9wdGlvbiBuYW1lPSJGSUxURVJfVEFSR0VUUyIgdmFsdWU9ImZhbHNlIiAvPgorICA8L2NvbXBvbmVudD4KKyAgPGNvbXBvbmVudCBuYW1lPSJlZGl0b3JIaXN0b3J5TWFuYWdlciI+CisgICAgPGVudHJ5IGZpbGU9ImphcjovLyRQUk9KRUNUX0RJUiQvbGliL2xpYnNyYy56aXAhL3BwcC9CYWRDbGFzcy5qYXZhIj4KKyAgICAgIDxwcm92aWRlciBzZWxlY3RlZD0idHJ1ZSIgZWRpdG9yLXR5cGUtaWQ9InRleHQtZWRpdG9yIj4KKyAgICAgICAgPHN0YXRlIGxpbmU9IjkiIGNvbHVtbj0iMTMiIHNlbGVjdGlvbi1zdGFydD0iMTg1IiBzZWxlY3Rpb24tZW5kPSIxODUiIHZlcnRpY2FsLXNjcm9sbC1wcm9wb3J0aW9uPSIwLjAiPgorICAgICAgICAgIDxmb2xkaW5nIC8+CisgICAgICAgIDwvc3RhdGU+CisgICAgICA8L3Byb3ZpZGVyPgorICAgIDwvZW50cnk+CisgICAgPGVudHJ5IGZpbGU9ImZpbGU6Ly8kUFJPSkVDVF9ESVIkL3NyYy9wcHAvQmFkQ2xhc3MuamF2YSI+CisgICAgICA8cHJvdmlkZXIgc2VsZWN0ZWQ9InRydWUiIGVkaXRvci10eXBlLWlkPSJ0ZXh0LWVkaXRvciI+CisgICAgICAgIDxzdGF0ZSBsaW5lPSI5IiBjb2x1bW49IjEzIiBzZWxlY3Rpb24tc3RhcnQ9IjE4NSIgc2VsZWN0aW9uLWVuZD0iMTg1IiB2ZXJ0aWNhbC1zY3JvbGwtcHJvcG9ydGlvbj0iMC4wIj4KKyAgICAgICAgICA8Zm9sZGluZyAvPgorICAgICAgICA8L3N0YXRlPgorICAgICAgPC9wcm92aWRlcj4KKyAgICA8L2VudHJ5PgorICAgIDxlbnRyeSBmaWxlPSJmaWxlOi8vJFBST0pFQ1RfRElSJC9zcmMvcHBwL1NvbWVDbGFzcy5qYXZhIj4KKyAgICAgIDxwcm92aWRlciBzZWxlY3RlZD0idHJ1ZSIgZWRpdG9yLXR5cGUtaWQ9InRleHQtZWRpdG9yIj4KKyAgICAgICAgPHN0YXRlIGxpbmU9IjMiIGNvbHVtbj0iOSIgc2VsZWN0aW9uLXN0YXJ0PSI0OCIgc2VsZWN0aW9uLWVuZD0iNDgiIHZlcnRpY2FsLXNjcm9sbC1wcm9wb3J0aW9uPSIwLjA1Nzg4ODc2Ij4KKyAgICAgICAgICA8Zm9sZGluZyAvPgorICAgICAgICA8L3N0YXRlPgorICAgICAgPC9wcm92aWRlcj4KKyAgICA8L2VudHJ5PgorICA8L2NvbXBvbmVudD4KKyAgPGNvbXBvbmVudCBuYW1lPSJtYXN0ZXJEZXRhaWxzIj4KKyAgICA8b3B0aW9uIG5hbWU9InN0YXRlcyI+CisgICAgICA8bWFwPgorICAgICAgICA8ZW50cnkga2V5PSJFcnJvcnMuVUkiPgorICAgICAgICAgIDx2YWx1ZT4KKyAgICAgICAgICAgIDxVSVN0YXRlPgorICAgICAgICAgICAgICA8b3B0aW9uIG5hbWU9InByb3BvcnRpb25zIj4KKyAgICAgICAgICAgICAgICA8U3BsaXR0ZXJQcm9wb3J0aW9uc0RhdGFJbXBsIC8+CisgICAgICAgICAgICAgIDwvb3B0aW9uPgorICAgICAgICAgICAgPC9VSVN0YXRlPgorICAgICAgICAgIDwvdmFsdWU+CisgICAgICAgIDwvZW50cnk+CisgICAgICAgIDxlbnRyeSBrZXk9IlByb2plY3RKREtzLlVJIj4KKyAgICAgICAgICA8dmFsdWU+CisgICAgICAgICAgICA8VUlTdGF0ZT4KKyAgICAgICAgICAgICAgPG9wdGlvbiBuYW1lPSJwcm9wb3J0aW9ucyI+CisgICAgICAgICAgICAgICAgPFNwbGl0dGVyUHJvcG9ydGlvbnNEYXRhSW1wbD4KKyAgICAgICAgICAgICAgICAgIDxvcHRpb24gbmFtZT0icHJvcG9ydGlvbnMiPgorICAgICAgICAgICAgICAgICAgICA8bGlzdD4KKyAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSIwLjUiIC8+CisgICAgICAgICAgICAgICAgICAgIDwvbGlzdD4KKyAgICAgICAgICAgICAgICAgIDwvb3B0aW9uPgorICAgICAgICAgICAgICAgIDwvU3BsaXR0ZXJQcm9wb3J0aW9uc0RhdGFJbXBsPgorICAgICAgICAgICAgICA8L29wdGlvbj4KKyAgICAgICAgICAgICAgPG9wdGlvbiBuYW1lPSJsYXN0RWRpdGVkQ29uZmlndXJhYmxlIiB2YWx1ZT0iMS4zIiAvPgorICAgICAgICAgICAgPC9VSVN0YXRlPgorICAgICAgICAgIDwvdmFsdWU+CisgICAgICAgIDwvZW50cnk+CisgICAgICAgIDxlbnRyeSBrZXk9IlNjb3BlQ2hvb3NlckNvbmZpZ3VyYWJsZS5VSSI+CisgICAgICAgICAgPHZhbHVlPgorICAgICAgICAgICAgPFVJU3RhdGU+CisgICAgICAgICAgICAgIDxvcHRpb24gbmFtZT0icHJvcG9ydGlvbnMiPgorICAgICAgICAgICAgICAgIDxTcGxpdHRlclByb3BvcnRpb25zRGF0YUltcGwgLz4KKyAgICAgICAgICAgICAgPC9vcHRpb24+CisgICAgICAgICAgICA8L1VJU3RhdGU+CisgICAgICAgICAgPC92YWx1ZT4KKyAgICAgICAgPC9lbnRyeT4KKyAgICAgIDwvbWFwPgorICAgIDwvb3B0aW9uPgorICAgIDxvcHRpb24gbmFtZT0ibXlTdGF0ZXMiPgorICAgICAgPG1hcD4KKyAgICAgICAgPGVudHJ5IGtleT0iRXJyb3JzLlVJIj4KKyAgICAgICAgICA8dmFsdWU+CisgICAgICAgICAgICA8VUlTdGF0ZT4KKyAgICAgICAgICAgICAgPG9wdGlvbiBuYW1lPSJwcm9wb3J0aW9ucyI+CisgICAgICAgICAgICAgICAgPFNwbGl0dGVyUHJvcG9ydGlvbnNEYXRhSW1wbCAvPgorICAgICAgICAgICAgICA8L29wdGlvbj4KKyAgICAgICAgICAgIDwvVUlTdGF0ZT4KKyAgICAgICAgICA8L3ZhbHVlPgorICAgICAgICA8L2VudHJ5PgorICAgICAgICA8ZW50cnkga2V5PSJQcm9qZWN0SkRLcy5VSSI+CisgICAgICAgICAgPHZhbHVlPgorICAgICAgICAgICAgPFVJU3RhdGU+CisgICAgICAgICAgICAgIDxvcHRpb24gbmFtZT0icHJvcG9ydGlvbnMiPgorICAgICAgICAgICAgICAgIDxTcGxpdHRlclByb3BvcnRpb25zRGF0YUltcGw+CisgICAgICAgICAgICAgICAgICA8b3B0aW9uIG5hbWU9InByb3BvcnRpb25zIj4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3Q+CisgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iMC41IiAvPgorICAgICAgICAgICAgICAgICAgICA8L2xpc3Q+CisgICAgICAgICAgICAgICAgICA8L29wdGlvbj4KKyAgICAgICAgICAgICAgICA8L1NwbGl0dGVyUHJvcG9ydGlvbnNEYXRhSW1wbD4KKyAgICAgICAgICAgICAgPC9vcHRpb24+CisgICAgICAgICAgICAgIDxvcHRpb24gbmFtZT0ibGFzdEVkaXRlZENvbmZpZ3VyYWJsZSIgdmFsdWU9IjEuMyIgLz4KKyAgICAgICAgICAgIDwvVUlTdGF0ZT4KKyAgICAgICAgICA8L3ZhbHVlPgorICAgICAgICA8L2VudHJ5PgorICAgICAgICA8ZW50cnkga2V5PSJTY29wZUNob29zZXJDb25maWd1cmFibGUuVUkiPgorICAgICAgICAgIDx2YWx1ZT4KKyAgICAgICAgICAgIDxVSVN0YXRlPgorICAgICAgICAgICAgICA8b3B0aW9uIG5hbWU9InByb3BvcnRpb25zIj4KKyAgICAgICAgICAgICAgICA8U3BsaXR0ZXJQcm9wb3J0aW9uc0RhdGFJbXBsIC8+CisgICAgICAgICAgICAgIDwvb3B0aW9uPgorICAgICAgICAgICAgPC9VSVN0YXRlPgorICAgICAgICAgIDwvdmFsdWU+CisgICAgICAgIDwvZW50cnk+CisgICAgICA8L21hcD4KKyAgICA8L29wdGlvbj4KKyAgPC9jb21wb25lbnQ+Cis8L3Byb2plY3Q+CisKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nL3NhbWVDbGFzc2VzSW5Tb3VyY2VBbmRMaWIvc3JjL3BwcC9CYWRDbGFzcy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmcvc2FtZUNsYXNzZXNJblNvdXJjZUFuZExpYi9zcmMvcHBwL0JhZENsYXNzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjNhYzlmNQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nL3NhbWVDbGFzc2VzSW5Tb3VyY2VBbmRMaWIvc3JjL3BwcC9CYWRDbGFzcy5qYXZhCkBAIC0wLDAgKzEsMTcgQEAKK3BhY2thZ2UgcHBwOworCisvKioKKyAqIENyZWF0ZWQgYnkgSW50ZWxsaUogSURFQS4KKyAqIFVzZXI6IEpFS0EKKyAqIERhdGU6IFNlcCAxMSwgMjAwOAorICogVGltZTogNDowMTozOCBQTQorICogVG8gY2hhbmdlIHRoaXMgdGVtcGxhdGUgdXNlIEZpbGUgfCBTZXR0aW5ncyB8IEZpbGUgVGVtcGxhdGVzLgorICovCitwdWJsaWMgY2xhc3MgQmFkQ2xhc3MgeworICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtZXRob2QoKSB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSGVsbG8iKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJIZWxsbyIpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkhlbGxvIik7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSGVsbG8iKTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZy9zYW1lQ2xhc3Nlc0luU291cmNlQW5kTGliL3NyYy9wcHAvU29tZUNsYXNzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZy9zYW1lQ2xhc3Nlc0luU291cmNlQW5kTGliL3NyYy9wcHAvU29tZUNsYXNzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTc4MjU0ZAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nL3NhbWVDbGFzc2VzSW5Tb3VyY2VBbmRMaWIvc3JjL3BwcC9Tb21lQ2xhc3MuamF2YQpAQCAtMCwwICsxLDUgQEAKK3BhY2thZ2UgcHBwOworCitwdWJsaWMgY2xhc3MgU29tZUNsYXNzIHsKKyAgICBCYWRDbGFzcyBmOworfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmcvc2FtZUZRTkNsYXNzZXMvYmFzZS9CYXNlLmltbCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nL3NhbWVGUU5DbGFzc2VzL2Jhc2UvQmFzZS5pbWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWVjNDNlZgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nL3NhbWVGUU5DbGFzc2VzL2Jhc2UvQmFzZS5pbWwKQEAgLTAsMCArMSwxMyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxtb2R1bGUgcmVsYXRpdmVQYXRocz0idHJ1ZSIgdHlwZT0iSkFWQV9NT0RVTEUiIHZlcnNpb249IjQiPgorICA8Y29tcG9uZW50IG5hbWU9Ik5ld01vZHVsZVJvb3RNYW5hZ2VyIiBpbmhlcml0LWNvbXBpbGVyLW91dHB1dD0idHJ1ZSI+CisgICAgPGV4Y2x1ZGUtb3V0cHV0IC8+CisgICAgPGNvbnRlbnQgdXJsPSJmaWxlOi8vJE1PRFVMRV9ESVIkIj4KKyAgICAgIDxzb3VyY2VGb2xkZXIgdXJsPSJmaWxlOi8vJE1PRFVMRV9ESVIkL3NyYyIgaXNUZXN0U291cmNlPSJmYWxzZSIgLz4KKyAgICA8L2NvbnRlbnQ+CisgICAgPG9yZGVyRW50cnkgdHlwZT0iaW5oZXJpdGVkSmRrIiAvPgorICAgIDxvcmRlckVudHJ5IHR5cGU9InNvdXJjZUZvbGRlciIgZm9yVGVzdHM9ImZhbHNlIiAvPgorICAgIDxvcmRlckVudHJ5UHJvcGVydGllcyAvPgorICA8L2NvbXBvbmVudD4KKzwvbW9kdWxlPgorCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZy9zYW1lRlFOQ2xhc3Nlcy9iYXNlL3NyYy9idWcvdGVzdC9CYXNlQ2xhc3MuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nL3NhbWVGUU5DbGFzc2VzL2Jhc2Uvc3JjL2J1Zy90ZXN0L0Jhc2VDbGFzcy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM0NjEyYzYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZy9zYW1lRlFOQ2xhc3Nlcy9iYXNlL3NyYy9idWcvdGVzdC9CYXNlQ2xhc3MuamF2YQpAQCAtMCwwICsxLDE1IEBACitwYWNrYWdlIGJ1Zy50ZXN0OworCisvKioKKyAqIENyZWF0ZWQgYnkgSW50ZWxsaUogSURFQS4KKyAqIERhdGU6IERlYyAxMywgMjAwNworICogVGltZTogNDoxMjo1MCBQTQorICogVG8gY2hhbmdlIHRoaXMgdGVtcGxhdGUgdXNlIEZpbGUgfCBTZXR0aW5ncyB8IEZpbGUgVGVtcGxhdGVzLgorICovCitwdWJsaWMgY2xhc3MgQmFzZUNsYXNzIHsKKworICAgIHB1YmxpYyB2b2lkIGRvU29tZXRoaW5nKFN0cmluZyBhcmcxKXsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBCYXNlQ2xhc3M6OmRvU29tZXRoaW5nKGludCBhcmcxKSIpOworICAgIH0KKworfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmcvc2FtZUZRTkNsYXNzZXMvY2xpZW50L0NsaWVudC5pbWwgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZy9zYW1lRlFOQ2xhc3Nlcy9jbGllbnQvQ2xpZW50LmltbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMzNlMTcxCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmcvc2FtZUZRTkNsYXNzZXMvY2xpZW50L0NsaWVudC5pbWwKQEAgLTAsMCArMSwxNCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxtb2R1bGUgcmVsYXRpdmVQYXRocz0idHJ1ZSIgdHlwZT0iSkFWQV9NT0RVTEUiIHZlcnNpb249IjQiPgorICA8Y29tcG9uZW50IG5hbWU9Ik5ld01vZHVsZVJvb3RNYW5hZ2VyIiBpbmhlcml0LWNvbXBpbGVyLW91dHB1dD0idHJ1ZSI+CisgICAgPGV4Y2x1ZGUtb3V0cHV0IC8+CisgICAgPGNvbnRlbnQgdXJsPSJmaWxlOi8vJE1PRFVMRV9ESVIkIj4KKyAgICAgIDxzb3VyY2VGb2xkZXIgdXJsPSJmaWxlOi8vJE1PRFVMRV9ESVIkL3NyYyIgaXNUZXN0U291cmNlPSJmYWxzZSIgLz4KKyAgICA8L2NvbnRlbnQ+CisgICAgPG9yZGVyRW50cnkgdHlwZT0iaW5oZXJpdGVkSmRrIiAvPgorICAgIDxvcmRlckVudHJ5IHR5cGU9InNvdXJjZUZvbGRlciIgZm9yVGVzdHM9ImZhbHNlIiAvPgorICAgIDxvcmRlckVudHJ5IHR5cGU9Im1vZHVsZSIgbW9kdWxlLW5hbWU9Ik92ZXJyaWRlIiAvPgorICAgIDxvcmRlckVudHJ5UHJvcGVydGllcyAvPgorICA8L2NvbXBvbmVudD4KKzwvbW9kdWxlPgorCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZy9zYW1lRlFOQ2xhc3Nlcy9jbGllbnQvc3JjL0J1Z1Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nL3NhbWVGUU5DbGFzc2VzL2NsaWVudC9zcmMvQnVnVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI2OThhNjYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZy9zYW1lRlFOQ2xhc3Nlcy9jbGllbnQvc3JjL0J1Z1Rlc3QuamF2YQpAQCAtMCwwICsxLDE3IEBACitpbXBvcnQgYnVnLnRlc3QuQmFzZUNsYXNzOyAKKworLyoqCisgKiBDcmVhdGVkIGJ5IEludGVsbGlKIElERUEuCisgKiBEYXRlOiBEZWMgMTMsIDIwMDcKKyAqIFRpbWU6IDQ6MTU6NDggUE0KKyAqIFRvIGNoYW5nZSB0aGlzIHRlbXBsYXRlIHVzZSBGaWxlIHwgU2V0dGluZ3MgfCBGaWxlIFRlbXBsYXRlcy4KKyAqLworcHVibGljIGNsYXNzIEJ1Z1Rlc3QgeworICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKCl7CisgICAgICAgIEJhc2VDbGFzcyB0ZXN0Q2xhc3MgPSBuZXcgQmFzZUNsYXNzKCk7CisKKyAgICAgICAgdGVzdENsYXNzLmRvU29tZXRoaW5nKDUpOworCisgICAgICAgIHRlc3RDbGFzcy5kb1NvbWV0aGluZ0Vsc2UoNSk7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmcvc2FtZUZRTkNsYXNzZXMvb3ZlcnJpZGUvT3ZlcnJpZGUuaW1sIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmcvc2FtZUZRTkNsYXNzZXMvb3ZlcnJpZGUvT3ZlcnJpZGUuaW1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYxYTRjOTAKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZy9zYW1lRlFOQ2xhc3Nlcy9vdmVycmlkZS9PdmVycmlkZS5pbWwKQEAgLTAsMCArMSwxNCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxtb2R1bGUgcmVsYXRpdmVQYXRocz0idHJ1ZSIgdHlwZT0iSkFWQV9NT0RVTEUiIHZlcnNpb249IjQiPgorICA8Y29tcG9uZW50IG5hbWU9Ik5ld01vZHVsZVJvb3RNYW5hZ2VyIiBpbmhlcml0LWNvbXBpbGVyLW91dHB1dD0idHJ1ZSI+CisgICAgPGV4Y2x1ZGUtb3V0cHV0IC8+CisgICAgPGNvbnRlbnQgdXJsPSJmaWxlOi8vJE1PRFVMRV9ESVIkIj4KKyAgICAgIDxzb3VyY2VGb2xkZXIgdXJsPSJmaWxlOi8vJE1PRFVMRV9ESVIkL3NyYyIgaXNUZXN0U291cmNlPSJmYWxzZSIgLz4KKyAgICA8L2NvbnRlbnQ+CisgICAgPG9yZGVyRW50cnkgdHlwZT0iaW5oZXJpdGVkSmRrIiAvPgorICAgIDxvcmRlckVudHJ5IHR5cGU9InNvdXJjZUZvbGRlciIgZm9yVGVzdHM9ImZhbHNlIiAvPgorICAgIDxvcmRlckVudHJ5IHR5cGU9Im1vZHVsZSIgbW9kdWxlLW5hbWU9IkJhc2UiIGV4cG9ydGVkPSIiIC8+CisgICAgPG9yZGVyRW50cnlQcm9wZXJ0aWVzIC8+CisgIDwvY29tcG9uZW50PgorPC9tb2R1bGU+CisKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nL3NhbWVGUU5DbGFzc2VzL292ZXJyaWRlL3NyYy9idWcvdGVzdC9CYXNlQ2xhc3MuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nL3NhbWVGUU5DbGFzc2VzL292ZXJyaWRlL3NyYy9idWcvdGVzdC9CYXNlQ2xhc3MuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZTEzY2NkCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmcvc2FtZUZRTkNsYXNzZXMvb3ZlcnJpZGUvc3JjL2J1Zy90ZXN0L0Jhc2VDbGFzcy5qYXZhCkBAIC0wLDAgKzEsMTggQEAKK3BhY2thZ2UgYnVnLnRlc3Q7CisKKy8qKgorICogQ3JlYXRlZCBieSBJbnRlbGxpSiBJREVBLgorICogRGF0ZTogRGVjIDEzLCAyMDA3CisgKiBUaW1lOiA0OjE0OjQ5IFBNCisgKi8KK3B1YmxpYyBjbGFzcyBCYXNlQ2xhc3MgeworCisgICAgcHVibGljIHZvaWQgZG9Tb21ldGhpbmcoaW50IGFyZzEpIHsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBPVkVSUklEREVOIEJhc2VDbGFzczo6ZG9Tb21ldGhpbmcoaW50IGFyZzEpIik7CisgICAgfQorCisKKyAgICBwdWJsaWMgdm9pZCBkb1NvbWV0aGluZ0Vsc2UoaW50IGFyZzEpIHsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBPVkVSUklEREVOIEJhc2VDbGFzczo6ZG9Tb21ldGhpbmdFbHNlKGludCBhcmcxKSIpOworICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nL3Njb3BlQmFzZWQveC9TaGFyZWQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nL3Njb3BlQmFzZWQveC9TaGFyZWQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZmM3NWU3Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmcvc2NvcGVCYXNlZC94L1NoYXJlZC5qYXZhCkBAIC0wLDAgKzEsMTAgQEAKK3BhY2thZ2UgeDsKK2NsYXNzIDxzeW1ib2xOYW1lIGRlc2NyPSJudWxsIiB0eXBlPSJDTEFTU19OQU1FIiBmb3JlZ3JvdW5kPSIweDAwZmZmZiIgYmFja2dyb3VuZD0iMHg0MDQwNDAiIGVmZmVjdGNvbG9yPSIweDAwMDBmZiIgZWZmZWN0dHlwZT0iQk9YRUQiIGZvbnR0eXBlPSIyIj5TaGFyZWQ8L3N5bWJvbE5hbWU+IHsKKyAgPHN5bWJvbE5hbWUgZGVzY3I9Im51bGwiIHR5cGU9IkNMQVNTX05BTUUiIGZvcmVncm91bmQ9IjB4MDBmZmZmIiBiYWNrZ3JvdW5kPSIweDQwNDA0MCIgZWZmZWN0Y29sb3I9IjB4MDAwMGZmIiBlZmZlY3R0eXBlPSJCT1hFRCIgZm9udHR5cGU9IjIiPlNoYXJlZDwvc3ltYm9sTmFtZT4gPHN5bWJvbE5hbWUgZGVzY3I9Im51bGwiIHR5cGU9IklOU1RBTkNFX0ZJRUxEIj54PC9zeW1ib2xOYW1lPiA9IG5ldyA8c3ltYm9sTmFtZSBkZXNjcj0ibnVsbCIgdHlwZT0iQ0xBU1NfTkFNRSIgZm9yZWdyb3VuZD0iMHgwMGZmZmYiIGJhY2tncm91bmQ9IjB4NDA0MDQwIiBlZmZlY3Rjb2xvcj0iMHgwMDAwZmYiIGVmZmVjdHR5cGU9IkJPWEVEIiBmb250dHlwZT0iMiI+U2hhcmVkPC9zeW1ib2xOYW1lPigpOworICA8c3ltYm9sTmFtZSBkZXNjcj0ibnVsbCIgdHlwZT0iSU5URVJGQUNFX05BTUUiIGZvcmVncm91bmQ9IjB4ODA4MDgwIiBiYWNrZ3JvdW5kPSIweGZmMDBmZiIgZWZmZWN0Y29sb3I9IjB4ZmZjODAwIiBlZmZlY3R0eXBlPSJTVFJJS0VPVVQiIGZvbnR0eXBlPSIxIj5qYXZhLnV0aWwuTGlzdDwvc3ltYm9sTmFtZT4KKyAgPHN5bWJvbE5hbWUgZGVzY3I9Im51bGwiIHR5cGU9Ik1FVEhPRF9ERUNMQVJBVElPTiI+bGlzdDwvc3ltYm9sTmFtZT4oCisgICAgPHN5bWJvbE5hbWUgZGVzY3I9Im51bGwiIHR5cGU9IklOVEVSRkFDRV9OQU1FIiBmb3JlZ3JvdW5kPSIweDgwODA4MCIgYmFja2dyb3VuZD0iMHhmZjAwZmYiIGVmZmVjdGNvbG9yPSIweGZmYzgwMCIgZWZmZWN0dHlwZT0iU1RSSUtFT1VUIiBmb250dHlwZT0iMSI+amF2YS51dGlsLk1hcDwvc3ltYm9sTmFtZT4gPHN5bWJvbE5hbWUgZGVzY3I9Im51bGwiIHR5cGU9IlBBUkFNRVRFUiI+bWFwPC9zeW1ib2xOYW1lPgorICApIHsKKyAgIHJldHVybiBudWxsOworICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZy9zY29wZUJhc2VkL3gvWC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmcvc2NvcGVCYXNlZC94L1guamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMTZhOGNkCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmcvc2NvcGVCYXNlZC94L1guamF2YQpAQCAtMCwwICsxLDEwIEBACitwYWNrYWdlIHg7CitjbGFzcyA8c3ltYm9sTmFtZSBkZXNjcj0ibnVsbCIgdHlwZT0iQ0xBU1NfTkFNRSIgZm9yZWdyb3VuZD0iMHgwMGZmZmYiIGJhY2tncm91bmQ9IjB4NDA0MDQwIiBlZmZlY3Rjb2xvcj0iMHgwMDAwZmYiIGVmZmVjdHR5cGU9IkJPWEVEIiBmb250dHlwZT0iMiI+WDwvc3ltYm9sTmFtZT4geworICA8c3ltYm9sTmFtZSBkZXNjcj0ibnVsbCIgdHlwZT0iQ0xBU1NfTkFNRSIgZm9yZWdyb3VuZD0iMHgwMGZmZmYiIGJhY2tncm91bmQ9IjB4NDA0MDQwIiBlZmZlY3Rjb2xvcj0iMHgwMDAwZmYiIGVmZmVjdHR5cGU9IkJPWEVEIiBmb250dHlwZT0iMiI+WDwvc3ltYm9sTmFtZT4gPHN5bWJvbE5hbWUgZGVzY3I9Im51bGwiIHR5cGU9IklOU1RBTkNFX0ZJRUxEIj54PC9zeW1ib2xOYW1lPiA9IG5ldyA8c3ltYm9sTmFtZSBkZXNjcj0ibnVsbCIgdHlwZT0iQ0xBU1NfTkFNRSIgZm9yZWdyb3VuZD0iMHgwMGZmZmYiIGJhY2tncm91bmQ9IjB4NDA0MDQwIiBlZmZlY3Rjb2xvcj0iMHgwMDAwZmYiIGVmZmVjdHR5cGU9IkJPWEVEIiBmb250dHlwZT0iMiI+WDwvc3ltYm9sTmFtZT4oKTsKKyAgPHN5bWJvbE5hbWUgZGVzY3I9Im51bGwiIHR5cGU9IklOVEVSRkFDRV9OQU1FIiBmb3JlZ3JvdW5kPSIweDgwODA4MCIgYmFja2dyb3VuZD0iMHhmZjAwZmYiIGVmZmVjdGNvbG9yPSIweGZmYzgwMCIgZWZmZWN0dHlwZT0iU1RSSUtFT1VUIiBmb250dHlwZT0iMSI+amF2YS51dGlsLkxpc3Q8L3N5bWJvbE5hbWU+CisgIDxzeW1ib2xOYW1lIGRlc2NyPSJudWxsIiB0eXBlPSJNRVRIT0RfREVDTEFSQVRJT04iPmxpc3Q8L3N5bWJvbE5hbWU+KAorICAgIDxzeW1ib2xOYW1lIGRlc2NyPSJudWxsIiB0eXBlPSJJTlRFUkZBQ0VfTkFNRSIgZm9yZWdyb3VuZD0iMHg4MDgwODAiIGJhY2tncm91bmQ9IjB4ZmYwMGZmIiBlZmZlY3Rjb2xvcj0iMHhmZmM4MDAiIGVmZmVjdHR5cGU9IlNUUklLRU9VVCIgZm9udHR5cGU9IjEiPmphdmEudXRpbC5NYXA8L3N5bWJvbE5hbWU+IDxzeW1ib2xOYW1lIGRlc2NyPSJudWxsIiB0eXBlPSJQQVJBTUVURVIiPm1hcDwvc3ltYm9sTmFtZT4KKyAgKSB7CisgICByZXR1cm4gbnVsbDsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmcvc2luZ2xlSW1wb3J0L2QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nL3NpbmdsZUltcG9ydC9kLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTNkZWE0NgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nL3NpbmdsZUltcG9ydC9kLmphdmEKQEAgLTAsMCArMSw3IEBACitpbXBvcnQgcC5jOworaW1wb3J0IHAuYy4qOworCitjbGFzcyBkIHsKKyBjIGMgPSBudWxsOworIGlubiBpbm4gPSBudWxsOworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nL3NpbmdsZUltcG9ydC9wL2MuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nL3NpbmdsZUltcG9ydC9wL2MuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNWMzYjMzCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmcvc2luZ2xlSW1wb3J0L3AvYy5qYXZhCkBAIC0wLDAgKzEsNCBAQAorcGFja2FnZSBwOworcHVibGljIGNsYXNzIGMgeworIHB1YmxpYyBzdGF0aWMgY2xhc3MgaW5uIHt9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZzcvQWxsSmF2YTE1RmVhdHVyZXMuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nNy9BbGxKYXZhMTVGZWF0dXJlcy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU0YmQwYTgKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZzcvQWxsSmF2YTE1RmVhdHVyZXMuamF2YQpAQCAtMCwwICsxLDM3IEBACisvKgorICogQ29weXJpZ2h0IDIwMDAtMjAxMiBKZXRCcmFpbnMgcy5yLm8uCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworaW1wb3J0IGphdmEudXRpbC5MaXN0OworaW1wb3J0IHN0YXRpYyBqYXZhLmxhbmcuTWF0aC5taW47CisKK2NsYXNzIGEgeworICAgTGlzdDxTdHJpbmc+IGw7CisKKyAgIHByaXZhdGUgdm9pZCBhc0xpc3QoT2JqZWN0Li4uIG9iamVjdHMpIHt9CisKKyAgIHZvaWQgZm9vKCkgeworICAgICBmb3IgKFN0cmluZyBzIDogbCkge30KKworICAgICBmb3IgKE9iamVjdCBvIDogbCkge30KKworICAgICBhc0xpc3QoIiIpOworCisgICAgIEJvb2xlYW4gYiA9IHRydWU7CisKKyAgICAgYm9vbGVhbiBiMSA9IEJvb2xlYW4uVFJVRTsKKyAgIH0KKworICAgZW51bSBlIHt9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZzcvQW1iaWd1b3VzTWV0aG9kQ2FsbElERUE5Nzk4My5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmc3L0FtYmlndW91c01ldGhvZENhbGxJREVBOTc5ODMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MjYyNzhkCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmc3L0FtYmlndW91c01ldGhvZENhbGxJREVBOTc5ODMuamF2YQpAQCAtMCwwICsxLDI0IEBACitjbGFzcyBUZXN0IHsKKyAgcHVibGljIHN0YXRpYyB2b2lkIGZvbyhpbnRbXSBpMSwgaW50W10gaTIpIHsKKyAgfQorCisgIHB1YmxpYyBzdGF0aWMgPFQ+IHZvaWQgZm9vKFQgaTEsIFQgaTIpIHsKKyAgfQorCisgIHB1YmxpYyBzdGF0aWMgZmluYWwgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHRocm93cyBFeGNlcHRpb24geworICAgIGludFtdIGkgPSBudWxsOworICAgIGZvbyhpLCBpKTsKKyAgfQorfQorY2xhc3MgVGVzdDEgeworICBwdWJsaWMgc3RhdGljIHZvaWQgZm9vKGludCBpMSwgaW50IGkyKSB7CisgIH0KKworICBwdWJsaWMgc3RhdGljIDxUPiB2b2lkIGZvbyhUIGkxLCBUIGkyKSB7CisgIH0KKworICBwdWJsaWMgc3RhdGljIGZpbmFsIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBpbnRbXSBpID0gbnVsbDsKKyAgICBmb28oaSwgaSk7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZzcvQ2xhc3NMaXRlcmFsLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZzcvQ2xhc3NMaXRlcmFsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTc2NzNhNQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nNy9DbGFzc0xpdGVyYWwuamF2YQpAQCAtMCwwICsxLDEzIEBACitpbXBvcnQgamF2YS5sYW5nLnJlZmxlY3QuKjsKKworY2xhc3MgRXhhbXBsZSB7CisgICAgcHJpdmF0ZSB2b2lkIGRlbW8oKSB7CisgICAgICAgIDxlcnJvciBkZXNjcj0iSW5jb21wYXRpYmxlIHR5cGVzLiBGb3VuZDogJ2phdmEubGFuZy5yZWZsZWN0LlR5cGVWYXJpYWJsZTxqYXZhLmxhbmcuQ2xhc3M8Y2FwdHVyZTw/IGV4dGVuZHMgRXhhbXBsZT4+PltdJywgcmVxdWlyZWQ6ICdqYXZhLmxhbmcucmVmbGVjdC5UeXBlVmFyaWFibGU8amF2YS5sYW5nLkNsYXNzPD8gZXh0ZW5kcyBFeGFtcGxlPj5bXSciPlR5cGVWYXJpYWJsZTxDbGFzczw/IGV4dGVuZHMgRXhhbXBsZT4+W10gIHR5cGVQYXJhbWV0ZXJzICA9ICBnZXRDbGFzcygpLmdldFR5cGVQYXJhbWV0ZXJzKCk7PC9lcnJvcj4KKyAgICAgICAgT2JqZWN0IHR5cGVQYXJhbWV0ZXJzMSAgPSAgPGVycm9yIGRlc2NyPSJJbmNvbnZlcnRpYmxlIHR5cGVzOyBjYW5ub3QgY2FzdCAnamF2YS5sYW5nLnJlZmxlY3QuVHlwZVZhcmlhYmxlPGphdmEubGFuZy5DbGFzczxjYXB0dXJlPD8gZXh0ZW5kcyBFeGFtcGxlPj4+W10nIHRvICdqYXZhLmxhbmcucmVmbGVjdC5UeXBlVmFyaWFibGU8amF2YS5sYW5nLkNsYXNzPD8gZXh0ZW5kcyBFeGFtcGxlPj5bXSciPihUeXBlVmFyaWFibGU8Q2xhc3M8PyBleHRlbmRzIEV4YW1wbGU+PltdKSBnZXRDbGFzcygpLmdldFR5cGVQYXJhbWV0ZXJzKCk8L2Vycm9yPjsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgYm9vbGVhbiBlcXVhbHMoT2JqZWN0IG9iaikgeworICAgICAgcmV0dXJuIGdldENsYXNzKCkgPT0gb2JqLmdldENsYXNzKCk7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmc3L0RlZmF1bHRNZXRob2RWaXNpYmlsaXR5LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZzcvRGVmYXVsdE1ldGhvZFZpc2liaWxpdHkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YTJjMGVlCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmc3L0RlZmF1bHRNZXRob2RWaXNpYmlsaXR5LmphdmEKQEAgLTAsMCArMSwxNCBAQAoraW50ZXJmYWNlIE9mSW50IGV4dGVuZHMgU2luazxJbnRlZ2VyPiB7CisgIGRlZmF1bHQgdm9pZCBhY2NlcHQoSW50ZWdlciBpKSB7fQorfQoraW50ZXJmYWNlIFNpbms8VD4gZXh0ZW5kcyBCbG9jazxUPiB7Cit9CisKK2ludGVyZmFjZSBCbG9jazxUPiB7CisgIHB1YmxpYyB2b2lkIGFjY2VwdChUIHQpOworfQorCisKK2NsYXNzIEhlbGxvMSBpbXBsZW1lbnRzIFNpbms8SW50ZWdlcj4sIE9mSW50IHt9CitjbGFzcyBIZWxsbzIgaW1wbGVtZW50cyBPZkludCwgU2luazxJbnRlZ2VyPnt9CisKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nNy9EaWFtb25kTWlzYy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmc3L0RpYW1vbmRNaXNjLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjUxNjQ3YQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nNy9EaWFtb25kTWlzYy5qYXZhCkBAIC0wLDAgKzEsMjI1IEBACitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworY2xhc3MgVGVzdCB7CisgIExpc3Q8U3RyaW5nPiBxdWV1ZSA9IG5ldyBBcnJheUxpc3Q8PigpOworICBBcnJheUxpc3QgbCA9IG5ldyBBcnJheUxpc3Q8Pig4KTsKK30KKworY2xhc3MgSE1Db3B5PEssIFY+IHsKKyAgcHJpdmF0ZSBFbnRyeVtdIHRhYmxlOworCisgIGNsYXNzIEVudHJ5PEssIFY+IHsKKyAgICBFbnRyeShpbnQgaCwgSyBrLCBWIHYsIEVudHJ5PEssIFY+IG4pIHsKKyAgICB9CisgIH0KKworICB2b2lkIGFkZEVudHJ5KGludCBoYXNoLCBLIGtleSwgViB2YWx1ZSwgaW50IGJ1Y2tldEluZGV4KSB7CisgICAgRW50cnk8SywgVj4gZSA9IHRhYmxlW2J1Y2tldEluZGV4XTsKKyAgICB0YWJsZVtidWNrZXRJbmRleF0gPSBuZXcgRW50cnk8PihoYXNoLCBrZXksIHZhbHVlLCBlKTsKKyAgfQorfQorCitjbGFzcyBERCB7CisgICAgUDE8UDxTdHJpbmc+PiBsID0gbmV3IEw8U3RyaW5nPigpIHsKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHZvaWQgZigpIHsKKyAgICAgICAgfQorICAgIH07CisKKyAgICBQMTxQPFN0cmluZz4+IGwxID0gbmV3IEw8PigpOworCisgICAgUDE8UDxTdHJpbmc+PiBmb28oKSB7CisgICAgICAgIHJldHVybiBuZXcgTDw+KCk7CisgICAgfQorCisgICAgU3RyaW5nIHMgPSAiIjsKK30KKworY2xhc3MgTDxLPiBleHRlbmRzIFAxPFA8Sz4+IHsKKyAgICB2b2lkIGYoKSB7CisgICAgfQorfQorCitjbGFzcyBQMTxQMVQ+IGV4dGVuZHMgUDxQMVQ+IHsKK30KKworY2xhc3MgUDxQVD4geworfQorCisKK2NsYXNzIFRlc3QxIHsKKyAgdm9pZCBiYXIoKSB7CisgICAgZm9vPGVycm9yIGRlc2NyPSInZm9vKEY8RjxqYXZhLmxhbmcuU3RyaW5nPj4pJyBpbiAnVGVzdDEnIGNhbm5vdCBiZSBhcHBsaWVkIHRvICcoRkY8amF2YS5sYW5nLk9iamVjdD4pJyI+KG5ldyBGRjw+KCkpPC9lcnJvcj47CisgIH0KKworICB2b2lkIGZvbyhGPEY8U3RyaW5nPj4gcCkge30KK30KKworY2xhc3MgRkY8WD4gZXh0ZW5kcyBGPFg+e30KK2NsYXNzIEY8VD4ge30KKworY2xhc3MgTXlUZXN0IHsKKyAgICAgc3RhdGljIGNsYXNzIEZvbzxYPiB7CisgICAgICAgIEZvbyhYIHgpIHt9CisgICAgIH0KKworICAgICBzdGF0aWMgaW50ZXJmYWNlIEJhc2U8WT4ge30KKyAgICAgc3RhdGljIGNsYXNzIEEgZXh0ZW5kcyBFeGNlcHRpb24gaW1wbGVtZW50cyBCYXNlPFN0cmluZz4ge30KKyAgICAgc3RhdGljIGNsYXNzIEIgZXh0ZW5kcyBFeGNlcHRpb24gaW1wbGVtZW50cyBCYXNlPEludGVnZXI+IHt9CisKKyAgICAgdm9pZCBtKCkgdGhyb3dzIEIgeworICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICBpZiAodHJ1ZSkgeworICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgQSgpOworICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEIoKTsKKyAgICAgICAgICAgICB9CisgICAgICAgICB9IGNhdGNoIChBIGV4KSB7CisgICAgICAgICAgICAgRm9vPD8gZXh0ZW5kcyBCYXNlPFN0cmluZz4+IGZvbzEgPSBuZXcgRm9vPD4oZXgpOyAgLy8gb2sKKyAgICAgICAgICAgICA8ZXJyb3IgZGVzY3I9IkluY29tcGF0aWJsZSB0eXBlcy4gRm91bmQ6ICdNeVRlc3QuRm9vPE15VGVzdC5BPicsIHJlcXVpcmVkOiAnTXlUZXN0LkZvbzxNeVRlc3QuQmFzZTxqYXZhLmxhbmcuU3RyaW5nPj4nIj5Gb288QmFzZTxTdHJpbmc+PiBmb28yID0gbmV3IEZvbzw+KGV4KTs8L2Vycm9yPiAgLy8gc2hvdWxkIGJlIGVycm9yCisgICAgICAgICB9CisgICAgIH0KK30KKworY2xhc3MgTm9uUGFyYW1ldGVyaXplZCB7CisgIHZvaWQgZm9vKCkgeworICAgIG5ldyBOb25QYXJhbWV0ZXJpemVkPDxlcnJvciBkZXNjcj0iRGlhbW9uZCBvcGVyYXRvciBpcyBub3QgYXBwbGljYWJsZSBmb3Igbm9uLXBhcmFtZXRlcml6ZWQgdHlwZXMiPjwvZXJyb3I+PigpOworICB9Cit9CisKKworaW50ZXJmYWNlIEk8VD4geworICBUIG0oKTsKK30KKworY2xhc3MgRkkxIHsKKyAgSTw/IGV4dGVuZHMgU3RyaW5nPiBpMSA9IG5ldyBJPDxlcnJvciBkZXNjcj0iQ2Fubm90IHVzZSAnJzw+Jycgd2l0aCBhbm9ueW1vdXMgaW5uZXIgY2xhc3NlcyI+PC9lcnJvcj4+KCkgeworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyA8ZXJyb3IgZGVzY3I9IidtKCknIGluICdBbm9ueW1vdXMgY2xhc3MgZGVyaXZlZCBmcm9tIEknIGNsYXNoZXMgd2l0aCAnbSgpJyBpbiAnSSc7IGF0dGVtcHRpbmcgdG8gdXNlIGluY29tcGF0aWJsZSByZXR1cm4gdHlwZSI+U3RyaW5nPC9lcnJvcj4gbSgpIHsKKyAgICAgIHJldHVybiBudWxsOworICAgIH0KKyAgfTsKKworICBJPD8+IGkyID0gbmV3IEk8PGVycm9yIGRlc2NyPSJDYW5ub3QgdXNlICcnPD4nJyB3aXRoIGFub255bW91cyBpbm5lciBjbGFzc2VzIj48L2Vycm9yPj4oKSB7CisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIDxlcnJvciBkZXNjcj0iJ20oKScgaW4gJ0Fub255bW91cyBjbGFzcyBkZXJpdmVkIGZyb20gSScgY2xhc2hlcyB3aXRoICdtKCknIGluICdJJzsgYXR0ZW1wdGluZyB0byB1c2UgaW5jb21wYXRpYmxlIHJldHVybiB0eXBlIj5PYmplY3Q8L2Vycm9yPiBtKCkgeworICAgICAgcmV0dXJuIG51bGw7CisgICAgfQorICB9OworfQorCitjbGFzcyBTdXBlcjxYLFk+IHsKKyAgICBwcml2YXRlIFN1cGVyKEludGVnZXIgaSwgWSB5LCBYIHgpIHt9CisgICAgcHVibGljIFN1cGVyKE51bWJlciBuLCBYIHgsIFkgeSkge30KK30KKworY2xhc3MgVGVzdE15U3VwZXIgeworICAgIFN1cGVyPFN0cmluZyxJbnRlZ2VyPiBzc2kxID0gbmV3IFN1cGVyPD4oMSwgIiIsIDIpOworfQorCitjbGFzcyBUZXN0TG9jYWw8WD4geworICAgIGNsYXNzIE1lbWJlciB7IH0KKyAgICBzdGF0aWMgY2xhc3MgTmVzdGVkIHt9CisKKyAgICB2b2lkIHRlc3QoKSB7CisgICAgICAgIGNsYXNzIExvY2FsIHt9CisKKyAgICAgICAgTWVtYmVyIG0gPSBuZXcgTWVtYmVyPDxlcnJvciBkZXNjcj0iRGlhbW9uZCBvcGVyYXRvciBpcyBub3QgYXBwbGljYWJsZSBmb3Igbm9uLXBhcmFtZXRlcml6ZWQgdHlwZXMiPjwvZXJyb3I+PigpOworICAgICAgICBOZXN0ZWQgbiA9IG5ldyBOZXN0ZWQ8PGVycm9yIGRlc2NyPSJEaWFtb25kIG9wZXJhdG9yIGlzIG5vdCBhcHBsaWNhYmxlIGZvciBub24tcGFyYW1ldGVyaXplZCB0eXBlcyI+PC9lcnJvcj4+KCk7CisgICAgICAgIExvY2FsIGwgPSBuZXcgTG9jYWw8PGVycm9yIGRlc2NyPSJEaWFtb25kIG9wZXJhdG9yIGlzIG5vdCBhcHBsaWNhYmxlIGZvciBub24tcGFyYW1ldGVyaXplZCB0eXBlcyI+PC9lcnJvcj4+KCk7CisgICAgfQorfQorCitjbGFzcyBRdWFsaWZpZWRUZXN0IHsKKyAgamF2YS51dGlsLk1hcDxTdHJpbmcsIFN0cmluZz4gcyA9IG5ldyBqYXZhLnV0aWwuSGFzaE1hcDw+KCk7Cit9CisKKworY2xhc3MgVFogeworCit9CisKK2NsYXNzIFBhcmVudGhUZXN0PFQgZXh0ZW5kcyBUWj4geworICAgIHB1YmxpYyBQYXJlbnRoVGVzdChUIHgpIHsKKworICAgIH0KKworICAgIHB1YmxpYyBUIHogPSBudWxsOworCisgICAgcHVibGljIGludCBhKCkgeworICAgICAgICBQYXJlbnRoVGVzdDxUPiB4ID0gKG5ldyBQYXJlbnRoVGVzdDw+KG51bGwpKTsgLy9yZWQgY29kZSBpcyBoZXJlCisgICAgICAgIHJldHVybiAxOworICAgIH0KK30KKworY2xhc3MgVGVzdFdpbGRjYXJkSW5mZXJlbmNlIHsKKyAgaW50ZXJmYWNlIEE8VD4geworICB9CisgIAorICBjbGFzcyBCPFY+IGltcGxlbWVudHMgQTxWPiB7CisgICAgQihDPFY+IHYpIHsKKyAgICB9CisgIH0KKyAgCisgIGNsYXNzIEM8RT4ge30KKyAgCisgIGNsYXNzIFUgeworICAgIHZvaWQgZm9vKCkgeworICAgICAgQzw/IGV4dGVuZHMgTnVtYmVyPiB4ID0gbnVsbDsKKyAgICAgIEE8PyBleHRlbmRzIE51bWJlcj4geSA9IG5ldyBCPD4oeCk7CisgICAgfQorICB9Cit9CisKK2NsYXNzIFByZWRlZmluZWRFcnJvcnNPdmVyUmF3PFQ+IHsKKyAgPFU+IFByZWRlZmluZWRFcnJvcnNPdmVyUmF3KFQgdCkgeworICB9CisKKyAgdm9pZCB0ZXN0KCkgeworICAgIFByZWRlZmluZWRFcnJvcnNPdmVyUmF3IG1jID0gbmV3IDxCb29sZWFuPlByZWRlZmluZWRFcnJvcnNPdmVyUmF3PDxlcnJvciBkZXNjcj0iQ2Fubm90IHVzZSBkaWFtb25kcyB3aXRoIGV4cGxpY2l0IHR5cGUgcGFyYW1ldGVycyBmb3IgY29uc3RydWN0b3IiPjwvZXJyb3I+PigiIik7CisgIH0KK30KKworY2xhc3MgT3V0ZXIgeworICAgIGNsYXNzIElubmVyPFQ+IHt9Cit9CitjbGFzcyBPdXRlcjEge30KKworY2xhc3MgT3V0ZXIyPEs+IHsKKyAgICBjbGFzcyBJbm5lcjI8VD4ge30KK30KKworY2xhc3MgQW5vdGhlciB7CisgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworICAgICAgICBPdXRlciBvID0gbmV3IE91dGVyKCk7CisgICAgICAgIE91dGVyLklubmVyPFN0cmluZz4gaSA9IG8ubmV3IElubmVyPD4oKTsKKyAgICAgICAgT3V0ZXIuSW5uZXI8U3RyaW5nPiBpMSA9IG0oKS5uZXcgSW5uZXI8PigpOworICAgICAgICBPdXRlci5Jbm5lcjxTdHJpbmc+IGkyID0gbTEoKS5uZXcgSW5uZXI8PigpOworCisgICAgICAgIE91dGVyLklubmVyPFN0cmluZz4gaTMgPSBtMigpLm5ldyA8ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAnSW5uZXInIj5Jbm5lcjwvZXJyb3I+PD4oKTsKKworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oaSk7CisKKyAgICAgICAgPGVycm9yIGRlc2NyPSJJbmNvbXBhdGlibGUgdHlwZXMuIEZvdW5kOiAnT3V0ZXIyLklubmVyMjxqYXZhLmxhbmcuU3RyaW5nPicsIHJlcXVpcmVkOiAnT3V0ZXIyLklubmVyMjxqYXZhLmxhbmcuU3RyaW5nPiciPk91dGVyMjxJbnRlZ2VyPi5Jbm5lcjI8U3RyaW5nPiBpNSA9IG5ldyBPdXRlcjI8PigpLm5ldyBJbm5lcjI8PigpOzwvZXJyb3I+CisgICAgfQorCisgIHN0YXRpYyBPdXRlciBtKCkge3JldHVybiBudWxsO30KKyAgc3RhdGljIDxUIGV4dGVuZHMgT3V0ZXI+IFQgbTEoKSB7cmV0dXJuIG51bGw7fQorICBzdGF0aWMgPFQ+IFQgbTIoKSB7cmV0dXJuIG51bGw7fQorICAKK30KKworY2xhc3MgVHlwZVBhcmFtc0V4dGVuZHNMaXN0IHsKKworICAgICAgICB7CisgICAgICAgICAgICAgICBuZXcgVHlwZVdpdGhHZW5lcmljPD4oKTsKKyAgICAgICAgfQorCisgICAgICAgIHByaXZhdGUgc3RhdGljIGNsYXNzIEEge30KKworICAgICAgICBwcml2YXRlIHN0YXRpYyBjbGFzcyBUeXBlV2l0aEdlbmVyaWM8VCBleHRlbmRzIEE+IGV4dGVuZHMgQXJyYXlMaXN0PFQ+IHsKKworICAgICAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZzcvRGlhbW9uZE5lZzEuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nNy9EaWFtb25kTmVnMS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNkOWM3ZTEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZzcvRGlhbW9uZE5lZzEuamF2YQpAQCAtMCwwICsxLDE4IEBACitjbGFzcyBOZWcwMTxYIGV4dGVuZHMgTnVtYmVyPiB7CisKKyAgICBOZWcwMShYIHgpIHt9CisKKyAgICA8Wj4gTmVnMDEoWCB4LCBaIHopIHt9CisKKyAgICB2b2lkIHRlc3QoKSB7CisgICAgICAgIE5lZzAxPDxlcnJvciBkZXNjcj0iVHlwZSBwYXJhbWV0ZXIgJ2phdmEubGFuZy5TdHJpbmcnIGlzIG5vdCB3aXRoaW4gaXRzIGJvdW5kOyBzaG91bGQgZXh0ZW5kICdqYXZhLmxhbmcuTnVtYmVyJyI+U3RyaW5nPC9lcnJvcj4+IG4xID0gbmV3IE5lZzAxPD48ZXJyb3IgZGVzY3I9IidOZWcwMShqYXZhLmxhbmcuU3RyaW5nICYgamF2YS5sYW5nLk51bWJlciknIGluICdOZWcwMScgY2Fubm90IGJlIGFwcGxpZWQgdG8gJyhqYXZhLmxhbmcuU3RyaW5nKSciPigiIik8L2Vycm9yPjsKKyAgICAgICAgTmVnMDE8PGVycm9yIGRlc2NyPSJUeXBlIHBhcmFtZXRlciAnPyBleHRlbmRzIFN0cmluZycgaXMgbm90IHdpdGhpbiBpdHMgYm91bmQ7IHNob3VsZCBleHRlbmQgJ2phdmEubGFuZy5OdW1iZXInIj4/IGV4dGVuZHMgU3RyaW5nPC9lcnJvcj4+IG4yID0gbmV3IE5lZzAxPD48ZXJyb3IgZGVzY3I9IidOZWcwMShqYXZhLmxhbmcuU3RyaW5nICYgamF2YS5sYW5nLk51bWJlciknIGluICdOZWcwMScgY2Fubm90IGJlIGFwcGxpZWQgdG8gJyhqYXZhLmxhbmcuU3RyaW5nKSciPigiIik8L2Vycm9yPjsKKyAgICAgICAgTmVnMDE8Pz4gbjMgPSBuZXcgTmVnMDE8PjxlcnJvciBkZXNjcj0iJ05lZzAxKGphdmEubGFuZy5TdHJpbmcgJiBqYXZhLmxhbmcuTnVtYmVyKScgaW4gJ05lZzAxJyBjYW5ub3QgYmUgYXBwbGllZCB0byAnKGphdmEubGFuZy5TdHJpbmcpJyI+KCIiKTwvZXJyb3I+OworICAgICAgICBOZWcwMTw8ZXJyb3IgZGVzY3I9IlR5cGUgcGFyYW1ldGVyICc/IHN1cGVyIFN0cmluZycgaXMgbm90IHdpdGhpbiBpdHMgYm91bmQ7IHNob3VsZCBleHRlbmQgJ2phdmEubGFuZy5OdW1iZXInIj4/IHN1cGVyIFN0cmluZzwvZXJyb3I+PiBuNCA9IG5ldyBOZWcwMTw+PGVycm9yIGRlc2NyPSInTmVnMDEoamF2YS5sYW5nLlN0cmluZyAmIGphdmEubGFuZy5OdW1iZXIpJyBpbiAnTmVnMDEnIGNhbm5vdCBiZSBhcHBsaWVkIHRvICcoamF2YS5sYW5nLlN0cmluZyknIj4oIiIpPC9lcnJvcj47CisKKyAgICAgICAgTmVnMDE8PGVycm9yIGRlc2NyPSJUeXBlIHBhcmFtZXRlciAnamF2YS5sYW5nLlN0cmluZycgaXMgbm90IHdpdGhpbiBpdHMgYm91bmQ7IHNob3VsZCBleHRlbmQgJ2phdmEubGFuZy5OdW1iZXInIj5TdHJpbmc8L2Vycm9yPj4gbjUgPSBuZXcgTmVnMDE8PjxlcnJvciBkZXNjcj0iJ05lZzAxKGphdmEubGFuZy5TdHJpbmcgJiBqYXZhLmxhbmcuTnVtYmVyLCBqYXZhLmxhbmcuU3RyaW5nKScgaW4gJ05lZzAxJyBjYW5ub3QgYmUgYXBwbGllZCB0byAnKGphdmEubGFuZy5TdHJpbmcsIGphdmEubGFuZy5TdHJpbmcpJyI+KCIiLCAiIik8L2Vycm9yPjsKKyAgICAgICAgTmVnMDE8PGVycm9yIGRlc2NyPSJUeXBlIHBhcmFtZXRlciAnPyBleHRlbmRzIFN0cmluZycgaXMgbm90IHdpdGhpbiBpdHMgYm91bmQ7IHNob3VsZCBleHRlbmQgJ2phdmEubGFuZy5OdW1iZXInIj4/IGV4dGVuZHMgU3RyaW5nPC9lcnJvcj4+IG42ID0gbmV3IE5lZzAxPD48ZXJyb3IgZGVzY3I9IidOZWcwMShqYXZhLmxhbmcuU3RyaW5nICYgamF2YS5sYW5nLk51bWJlciwgamF2YS5sYW5nLlN0cmluZyknIGluICdOZWcwMScgY2Fubm90IGJlIGFwcGxpZWQgdG8gJyhqYXZhLmxhbmcuU3RyaW5nLCBqYXZhLmxhbmcuU3RyaW5nKSciPigiIiwgIiIpPC9lcnJvcj47CisgICAgICAgIE5lZzAxPD8+IG43ID0gbmV3IE5lZzAxPD48ZXJyb3IgZGVzY3I9IidOZWcwMShqYXZhLmxhbmcuU3RyaW5nICYgamF2YS5sYW5nLk51bWJlciwgamF2YS5sYW5nLlN0cmluZyknIGluICdOZWcwMScgY2Fubm90IGJlIGFwcGxpZWQgdG8gJyhqYXZhLmxhbmcuU3RyaW5nLCBqYXZhLmxhbmcuU3RyaW5nKSciPigiIiwgIiIpPC9lcnJvcj47CisgICAgICAgIDxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICdGb28nIj5Gb288L2Vycm9yPjw/IHN1cGVyIFN0cmluZz4gbjggPSBuZXcgTmVnMDE8PjxlcnJvciBkZXNjcj0iJ05lZzAxKGphdmEubGFuZy5TdHJpbmcgJiBqYXZhLmxhbmcuTnVtYmVyLCBqYXZhLmxhbmcuU3RyaW5nKScgaW4gJ05lZzAxJyBjYW5ub3QgYmUgYXBwbGllZCB0byAnKGphdmEubGFuZy5TdHJpbmcsIGphdmEubGFuZy5TdHJpbmcpJyI+KCIiLCAiIik8L2Vycm9yPjsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmc3L0RpYW1vbmROZWcxMC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmc3L0RpYW1vbmROZWcxMC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg2YjczYTkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZzcvRGlhbW9uZE5lZzEwLmphdmEKQEAgLTAsMCArMSw3IEBACitjbGFzcyBOZWcxMCB7CisgICAgc3RhdGljIGNsYXNzIEZvbzxYPiB7CisgICAgICAgIEZvbyhYIHgpIHt9CisgICAgfQorCisgICAgPGVycm9yIGRlc2NyPSJJbmNvbXBhdGlibGUgdHlwZXMuIEZvdW5kOiAnTmVnMTAuRm9vPGphdmEubGFuZy5JbnRlZ2VyPicsIHJlcXVpcmVkOiAnTmVnMTAuRm9vPGphdmEubGFuZy5OdW1iZXI+JyI+Rm9vPE51bWJlcj4gZncgPSBuZXcgRm9vPD4oMSk7PC9lcnJvcj4KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZzcvRGlhbW9uZE5lZzExLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZzcvRGlhbW9uZE5lZzExLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2UzMmUxYQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nNy9EaWFtb25kTmVnMTEuamF2YQpAQCAtMCwwICsxLDggQEAKK2NsYXNzIE5lZzExIHsKKworICAgIHZvaWQgdGVzdCgpIHsKKyAgICAgICAgY2xhc3MgRm9vPFggZXh0ZW5kcyBOdW1iZXI+IHsgfQorICAgICAgICBGb288Pz4gZjEgPSBuZXcgPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ1VuZGVjbGFyZWROYW1lJyI+VW5kZWNsYXJlZE5hbWU8L2Vycm9yPjw+KCk7IC8vdGhpcyBpcyBkZWxpYmVyYXRlOiBhaW0gaXMgdG8gdGVzdCBlcnJvbmVvdXMgcGF0aAorICAgICAgICBGb288Pz4gZjIgPSBuZXcgPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ1VuZGVjbGFyZWROYW1lJyI+VW5kZWNsYXJlZE5hbWU8L2Vycm9yPjw+KCkge307IC8vdGhpcyBpcyBkZWxpYmVyYXRlOiBhaW0gaXMgdG8gdGVzdCBlcnJvbmVvdXMgcGF0aAorICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nNy9EaWFtb25kTmVnMTIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nNy9EaWFtb25kTmVnMTIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iM2M1ZWUyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmc3L0RpYW1vbmROZWcxMi5qYXZhCkBAIC0wLDAgKzEsMTAgQEAKK2NsYXNzIE5lZzEyIHsKKworICAgIHN0YXRpYyBjbGFzcyBGb288WD4geworICAgICAgICA8VD4gRm9vKFQgdCkge30KKyAgICB9CisKKyAgICBGb288SW50ZWdlcj4gZmkxID0gbmV3IDxTdHJpbmc+IEZvbzw8ZXJyb3IgZGVzY3I9IkNhbm5vdCB1c2UgZGlhbW9uZHMgd2l0aCBleHBsaWNpdCB0eXBlIHBhcmFtZXRlcnMgZm9yIGNvbnN0cnVjdG9yIj48L2Vycm9yPj4oMSk7CisgICAgRm9vPEludGVnZXI+IGZpMiA9IG5ldyA8PGVycm9yIGRlc2NyPSJBY3R1YWwgdHlwZSBhcmd1bWVudCBhbmQgaW5mZXJyZWQgdHlwZSBjb250cmFkaWN0IGVhY2ggb3RoZXIiPlN0cmluZzwvZXJyb3I+PiBGb288SW50ZWdlcj4oMSk7CisgICAgRm9vPEludGVnZXI+IGZpMyA9IG5ldyBGb288SW50ZWdlcj4oMSk7Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZzcvRGlhbW9uZE5lZzEzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZzcvRGlhbW9uZE5lZzEzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2RkODY1OQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nNy9EaWFtb25kTmVnMTMuamF2YQpAQCAtMCwwICsxLDkgQEAKK2NsYXNzIE5lZzEzIHsKKworICAgIHN0YXRpYyBjbGFzcyBGb288WD4geworICAgICAgICA8VD4gRm9vKFQgdCkge30KKyAgICB9CisKKyAgICBGb288SW50ZWdlcj4gZmkxID0gbmV3IDxTdHJpbmcsIEludGVnZXI+IEZvbzw8ZXJyb3IgZGVzY3I9IkNhbm5vdCB1c2UgZGlhbW9uZHMgd2l0aCBleHBsaWNpdCB0eXBlIHBhcmFtZXRlcnMgZm9yIGNvbnN0cnVjdG9yIj48L2Vycm9yPj4oIiIpOworICAgIEZvbzxJbnRlZ2VyPiBmaTIgPSBuZXcgPGVycm9yIGRlc2NyPSJXcm9uZyBudW1iZXIgb2YgdHlwZSBhcmd1bWVudHM6IDI7IHJlcXVpcmVkOiAxIj48U3RyaW5nLCBJbnRlZ2VyPjwvZXJyb3I+IEZvbzxJbnRlZ2VyPigiIik7Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZzcvRGlhbW9uZE5lZzE0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZzcvRGlhbW9uZE5lZzE0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjk1ODU2OQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nNy9EaWFtb25kTmVnMTQuamF2YQpAQCAtMCwwICsxLDkgQEAKK2NsYXNzIE5lZzE0IHsKKworICAgIHN0YXRpYyBjbGFzcyBGb288WD4geworICAgICAgICA8VCBleHRlbmRzIEludGVnZXI+IEZvbyhUIHQpIHt9CisgICAgfQorCisgICAgRm9vPEludGVnZXI+IGZpMSA9IG5ldyA8U3RyaW5nPiBGb288PGVycm9yIGRlc2NyPSJDYW5ub3QgdXNlIGRpYW1vbmRzIHdpdGggZXhwbGljaXQgdHlwZSBwYXJhbWV0ZXJzIGZvciBjb25zdHJ1Y3RvciI+PC9lcnJvcj4+KDEpOworICAgIEZvbzxJbnRlZ2VyPiBmaTIgPSBuZXcgPDxlcnJvciBkZXNjcj0iQWN0dWFsIHR5cGUgYXJndW1lbnQgYW5kIGluZmVycmVkIHR5cGUgY29udHJhZGljdCBlYWNoIG90aGVyIj5TdHJpbmc8L2Vycm9yPj4gRm9vPEludGVnZXI+KDEpOworfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmc3L0RpYW1vbmROZWcxNS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmc3L0RpYW1vbmROZWcxNS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk3ZWVlNDYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZzcvRGlhbW9uZE5lZzE1LmphdmEKQEAgLTAsMCArMSwxMyBAQAorY2xhc3MgUG9zOCB7CisKKyAgICBzdGF0aWMgY2xhc3MgRm9vPFg+IHsKKyAgICAgICAgRm9vKFggdCkge30KKyAgICB9CisKKyAgICBGb288SW50ZWdlcj4gZmkxID0gbmV3IEZvbzw+KDEpOworICAgIEZvbzxJbnRlZ2VyPiBmaTIgPSBuZXcgRm9vPEludGVnZXI+KDEpOworICAgIEZvbzxJbnRlZ2VyPiBmaTMgPSBuZXcgPFN0cmluZz4gRm9vPDxlcnJvciBkZXNjcj0iQ2Fubm90IHVzZSBkaWFtb25kcyB3aXRoIGV4cGxpY2l0IHR5cGUgcGFyYW1ldGVycyBmb3IgY29uc3RydWN0b3IiPjwvZXJyb3I+PigxKTsKKyAgICBGb288SW50ZWdlcj4gZmk0ID0gbmV3IDxTdHJpbmc+IEZvbzxJbnRlZ2VyPigxKTsKKyAgICBGb288SW50ZWdlcj4gZmk1ID0gbmV3IDxTdHJpbmcsIFN0cmluZz4gRm9vPDxlcnJvciBkZXNjcj0iQ2Fubm90IHVzZSBkaWFtb25kcyB3aXRoIGV4cGxpY2l0IHR5cGUgcGFyYW1ldGVycyBmb3IgY29uc3RydWN0b3IiPjwvZXJyb3I+PigxKTsKKyAgICBGb288SW50ZWdlcj4gZmk2ID0gbmV3IDxTdHJpbmcsIFN0cmluZz4gRm9vPEludGVnZXI+KDEpOworfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmc3L0RpYW1vbmROZWcyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZzcvRGlhbW9uZE5lZzIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMWEyZjc1Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmc3L0RpYW1vbmROZWcyLmphdmEKQEAgLTAsMCArMSwzMSBAQAorY2xhc3MgTmVnMDIgeworCisgICAgc3RhdGljIGNsYXNzIEZvbzxYIGV4dGVuZHMgTnVtYmVyPiB7CisgICAgICAgIEZvbyhYIHgpIHt9CisgICAgICAgIDxaPiBGb28oWCB4LCBaIHopIHt9CisgICAgfQorCisgICAgdm9pZCB0ZXN0U2ltcGxlKCkgeworICAgICAgICBGb288PGVycm9yIGRlc2NyPSJUeXBlIHBhcmFtZXRlciAnamF2YS5sYW5nLlN0cmluZycgaXMgbm90IHdpdGhpbiBpdHMgYm91bmQ7IHNob3VsZCBleHRlbmQgJ2phdmEubGFuZy5OdW1iZXInIj5TdHJpbmc8L2Vycm9yPj4gZjEgPSBuZXcgRm9vPD48ZXJyb3IgZGVzY3I9IidGb28oamF2YS5sYW5nLlN0cmluZyAmIGphdmEubGFuZy5OdW1iZXIpJyBpbiAnTmVnMDIuRm9vJyBjYW5ub3QgYmUgYXBwbGllZCB0byAnKGphdmEubGFuZy5TdHJpbmcpJyI+KCIiKTwvZXJyb3I+OworICAgICAgICBGb288PGVycm9yIGRlc2NyPSJUeXBlIHBhcmFtZXRlciAnPyBleHRlbmRzIFN0cmluZycgaXMgbm90IHdpdGhpbiBpdHMgYm91bmQ7IHNob3VsZCBleHRlbmQgJ2phdmEubGFuZy5OdW1iZXInIj4/IGV4dGVuZHMgU3RyaW5nPC9lcnJvcj4+IGYyID0gbmV3IEZvbzw+PGVycm9yIGRlc2NyPSInRm9vKGphdmEubGFuZy5TdHJpbmcgJiBqYXZhLmxhbmcuTnVtYmVyKScgaW4gJ05lZzAyLkZvbycgY2Fubm90IGJlIGFwcGxpZWQgdG8gJyhqYXZhLmxhbmcuU3RyaW5nKSciPigiIik8L2Vycm9yPjsKKyAgICAgICAgRm9vPD8+IGYzID0gbmV3IEZvbzw+PGVycm9yIGRlc2NyPSInRm9vKGphdmEubGFuZy5TdHJpbmcgJiBqYXZhLmxhbmcuTnVtYmVyKScgaW4gJ05lZzAyLkZvbycgY2Fubm90IGJlIGFwcGxpZWQgdG8gJyhqYXZhLmxhbmcuU3RyaW5nKSciPigiIik8L2Vycm9yPjsKKyAgICAgICAgRm9vPDxlcnJvciBkZXNjcj0iVHlwZSBwYXJhbWV0ZXIgJz8gc3VwZXIgU3RyaW5nJyBpcyBub3Qgd2l0aGluIGl0cyBib3VuZDsgc2hvdWxkIGV4dGVuZCAnamF2YS5sYW5nLk51bWJlciciPj8gc3VwZXIgU3RyaW5nPC9lcnJvcj4+IGY0ID0gbmV3IEZvbzw+PGVycm9yIGRlc2NyPSInRm9vKGphdmEubGFuZy5TdHJpbmcgJiBqYXZhLmxhbmcuTnVtYmVyKScgaW4gJ05lZzAyLkZvbycgY2Fubm90IGJlIGFwcGxpZWQgdG8gJyhqYXZhLmxhbmcuU3RyaW5nKSciPigiIik8L2Vycm9yPjsKKworICAgICAgICBGb288PGVycm9yIGRlc2NyPSJUeXBlIHBhcmFtZXRlciAnamF2YS5sYW5nLlN0cmluZycgaXMgbm90IHdpdGhpbiBpdHMgYm91bmQ7IHNob3VsZCBleHRlbmQgJ2phdmEubGFuZy5OdW1iZXInIj5TdHJpbmc8L2Vycm9yPj4gZjUgPSBuZXcgRm9vPD48ZXJyb3IgZGVzY3I9IidGb28oamF2YS5sYW5nLlN0cmluZyAmIGphdmEubGFuZy5OdW1iZXIsIGphdmEubGFuZy5TdHJpbmcpJyBpbiAnTmVnMDIuRm9vJyBjYW5ub3QgYmUgYXBwbGllZCB0byAnKGphdmEubGFuZy5TdHJpbmcsIGphdmEubGFuZy5TdHJpbmcpJyI+KCIiLCAiIik8L2Vycm9yPjsKKyAgICAgICAgRm9vPDxlcnJvciBkZXNjcj0iVHlwZSBwYXJhbWV0ZXIgJz8gZXh0ZW5kcyBTdHJpbmcnIGlzIG5vdCB3aXRoaW4gaXRzIGJvdW5kOyBzaG91bGQgZXh0ZW5kICdqYXZhLmxhbmcuTnVtYmVyJyI+PyBleHRlbmRzIFN0cmluZzwvZXJyb3I+PiBmNiA9IG5ldyBGb288PjxlcnJvciBkZXNjcj0iJ0ZvbyhqYXZhLmxhbmcuU3RyaW5nICYgamF2YS5sYW5nLk51bWJlciwgamF2YS5sYW5nLlN0cmluZyknIGluICdOZWcwMi5Gb28nIGNhbm5vdCBiZSBhcHBsaWVkIHRvICcoamF2YS5sYW5nLlN0cmluZywgamF2YS5sYW5nLlN0cmluZyknIj4oIiIsICIiKTwvZXJyb3I+OworICAgICAgICBGb288Pz4gZjcgPSBuZXcgRm9vPD48ZXJyb3IgZGVzY3I9IidGb28oamF2YS5sYW5nLlN0cmluZyAmIGphdmEubGFuZy5OdW1iZXIsIGphdmEubGFuZy5TdHJpbmcpJyBpbiAnTmVnMDIuRm9vJyBjYW5ub3QgYmUgYXBwbGllZCB0byAnKGphdmEubGFuZy5TdHJpbmcsIGphdmEubGFuZy5TdHJpbmcpJyI+KCIiLCAiIik8L2Vycm9yPjsKKyAgICAgICAgRm9vPDxlcnJvciBkZXNjcj0iVHlwZSBwYXJhbWV0ZXIgJz8gc3VwZXIgU3RyaW5nJyBpcyBub3Qgd2l0aGluIGl0cyBib3VuZDsgc2hvdWxkIGV4dGVuZCAnamF2YS5sYW5nLk51bWJlciciPj8gc3VwZXIgU3RyaW5nPC9lcnJvcj4+IGY4ID0gbmV3IEZvbzw+PGVycm9yIGRlc2NyPSInRm9vKGphdmEubGFuZy5TdHJpbmcgJiBqYXZhLmxhbmcuTnVtYmVyLCBqYXZhLmxhbmcuU3RyaW5nKScgaW4gJ05lZzAyLkZvbycgY2Fubm90IGJlIGFwcGxpZWQgdG8gJyhqYXZhLmxhbmcuU3RyaW5nLCBqYXZhLmxhbmcuU3RyaW5nKSciPigiIiwgIiIpPC9lcnJvcj47CisgICAgfQorCisgICAgdm9pZCB0ZXN0UXVhbGlmaWVkKCkgeworICAgICAgICBGb288PGVycm9yIGRlc2NyPSJUeXBlIHBhcmFtZXRlciAnamF2YS5sYW5nLlN0cmluZycgaXMgbm90IHdpdGhpbiBpdHMgYm91bmQ7IHNob3VsZCBleHRlbmQgJ2phdmEubGFuZy5OdW1iZXInIj5TdHJpbmc8L2Vycm9yPj4gZjEgPSBuZXcgTmVnMDIuRm9vPD48ZXJyb3IgZGVzY3I9IidGb28oamF2YS5sYW5nLlN0cmluZyAmIGphdmEubGFuZy5OdW1iZXIpJyBpbiAnTmVnMDIuRm9vJyBjYW5ub3QgYmUgYXBwbGllZCB0byAnKGphdmEubGFuZy5TdHJpbmcpJyI+KCIiKTwvZXJyb3I+OworICAgICAgICBGb288PGVycm9yIGRlc2NyPSJUeXBlIHBhcmFtZXRlciAnPyBleHRlbmRzIFN0cmluZycgaXMgbm90IHdpdGhpbiBpdHMgYm91bmQ7IHNob3VsZCBleHRlbmQgJ2phdmEubGFuZy5OdW1iZXInIj4/IGV4dGVuZHMgU3RyaW5nPC9lcnJvcj4+IGYyID0gbmV3IE5lZzAyLkZvbzw+PGVycm9yIGRlc2NyPSInRm9vKGphdmEubGFuZy5TdHJpbmcgJiBqYXZhLmxhbmcuTnVtYmVyKScgaW4gJ05lZzAyLkZvbycgY2Fubm90IGJlIGFwcGxpZWQgdG8gJyhqYXZhLmxhbmcuU3RyaW5nKSciPigiIik8L2Vycm9yPjsKKyAgICAgICAgRm9vPD8+IGYzID0gbmV3IE5lZzAyLkZvbzw+PGVycm9yIGRlc2NyPSInRm9vKGphdmEubGFuZy5TdHJpbmcgJiBqYXZhLmxhbmcuTnVtYmVyKScgaW4gJ05lZzAyLkZvbycgY2Fubm90IGJlIGFwcGxpZWQgdG8gJyhqYXZhLmxhbmcuU3RyaW5nKSciPigiIik8L2Vycm9yPjsKKyAgICAgICAgRm9vPDxlcnJvciBkZXNjcj0iVHlwZSBwYXJhbWV0ZXIgJz8gc3VwZXIgU3RyaW5nJyBpcyBub3Qgd2l0aGluIGl0cyBib3VuZDsgc2hvdWxkIGV4dGVuZCAnamF2YS5sYW5nLk51bWJlciciPj8gc3VwZXIgU3RyaW5nPC9lcnJvcj4+IGY0ID0gbmV3IE5lZzAyLkZvbzw+PGVycm9yIGRlc2NyPSInRm9vKGphdmEubGFuZy5TdHJpbmcgJiBqYXZhLmxhbmcuTnVtYmVyKScgaW4gJ05lZzAyLkZvbycgY2Fubm90IGJlIGFwcGxpZWQgdG8gJyhqYXZhLmxhbmcuU3RyaW5nKSciPigiIik8L2Vycm9yPjsKKworICAgICAgICBGb288PGVycm9yIGRlc2NyPSJUeXBlIHBhcmFtZXRlciAnamF2YS5sYW5nLlN0cmluZycgaXMgbm90IHdpdGhpbiBpdHMgYm91bmQ7IHNob3VsZCBleHRlbmQgJ2phdmEubGFuZy5OdW1iZXInIj5TdHJpbmc8L2Vycm9yPj4gZjUgPSBuZXcgTmVnMDIuRm9vPD48ZXJyb3IgZGVzY3I9IidGb28oamF2YS5sYW5nLlN0cmluZyAmIGphdmEubGFuZy5OdW1iZXIsIGphdmEubGFuZy5TdHJpbmcpJyBpbiAnTmVnMDIuRm9vJyBjYW5ub3QgYmUgYXBwbGllZCB0byAnKGphdmEubGFuZy5TdHJpbmcsIGphdmEubGFuZy5TdHJpbmcpJyI+KCIiLCAiIik8L2Vycm9yPjsKKyAgICAgICAgRm9vPDxlcnJvciBkZXNjcj0iVHlwZSBwYXJhbWV0ZXIgJz8gZXh0ZW5kcyBTdHJpbmcnIGlzIG5vdCB3aXRoaW4gaXRzIGJvdW5kOyBzaG91bGQgZXh0ZW5kICdqYXZhLmxhbmcuTnVtYmVyJyI+PyBleHRlbmRzIFN0cmluZzwvZXJyb3I+PiBmNiA9IG5ldyBOZWcwMi5Gb288PjxlcnJvciBkZXNjcj0iJ0ZvbyhqYXZhLmxhbmcuU3RyaW5nICYgamF2YS5sYW5nLk51bWJlciwgamF2YS5sYW5nLlN0cmluZyknIGluICdOZWcwMi5Gb28nIGNhbm5vdCBiZSBhcHBsaWVkIHRvICcoamF2YS5sYW5nLlN0cmluZywgamF2YS5sYW5nLlN0cmluZyknIj4oIiIsICIiKTwvZXJyb3I+OworICAgICAgICBGb288Pz4gZjcgPSBuZXcgTmVnMDIuRm9vPD48ZXJyb3IgZGVzY3I9IidGb28oamF2YS5sYW5nLlN0cmluZyAmIGphdmEubGFuZy5OdW1iZXIsIGphdmEubGFuZy5TdHJpbmcpJyBpbiAnTmVnMDIuRm9vJyBjYW5ub3QgYmUgYXBwbGllZCB0byAnKGphdmEubGFuZy5TdHJpbmcsIGphdmEubGFuZy5TdHJpbmcpJyI+KCIiLCAiIik8L2Vycm9yPjsKKyAgICAgICAgRm9vPDxlcnJvciBkZXNjcj0iVHlwZSBwYXJhbWV0ZXIgJz8gc3VwZXIgU3RyaW5nJyBpcyBub3Qgd2l0aGluIGl0cyBib3VuZDsgc2hvdWxkIGV4dGVuZCAnamF2YS5sYW5nLk51bWJlciciPj8gc3VwZXIgU3RyaW5nPC9lcnJvcj4+IGY4ID0gbmV3IE5lZzAyLkZvbzw+PGVycm9yIGRlc2NyPSInRm9vKGphdmEubGFuZy5TdHJpbmcgJiBqYXZhLmxhbmcuTnVtYmVyLCBqYXZhLmxhbmcuU3RyaW5nKScgaW4gJ05lZzAyLkZvbycgY2Fubm90IGJlIGFwcGxpZWQgdG8gJyhqYXZhLmxhbmcuU3RyaW5nLCBqYXZhLmxhbmcuU3RyaW5nKSciPigiIiwgIiIpPC9lcnJvcj47CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmc3L0RpYW1vbmROZWczLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZzcvRGlhbW9uZE5lZzMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYzY2ZDJhCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmc3L0RpYW1vbmROZWczLmphdmEKQEAgLTAsMCArMSw0MyBAQAorY2xhc3MgTmVnMDM8VT4geworCisgICAgY2xhc3MgRm9vPFYgZXh0ZW5kcyBOdW1iZXI+IHsKKyAgICAgICAgRm9vKFYgeCkge30KKyAgICAgICAgPFo+IEZvbyhWIHgsIFogeikge30KKyAgICB9CisKKyAgICB2b2lkIHRlc3RTaW1wbGUoKSB7CisgICAgICAgIEZvbzw8ZXJyb3IgZGVzY3I9IlR5cGUgcGFyYW1ldGVyICdqYXZhLmxhbmcuU3RyaW5nJyBpcyBub3Qgd2l0aGluIGl0cyBib3VuZDsgc2hvdWxkIGV4dGVuZCAnamF2YS5sYW5nLk51bWJlciciPlN0cmluZzwvZXJyb3I+PiBmMSA9IG5ldyBGb288PjxlcnJvciBkZXNjcj0iJ0ZvbyhqYXZhLmxhbmcuU3RyaW5nICYgamF2YS5sYW5nLk51bWJlciknIGluICdOZWcwMy5Gb28nIGNhbm5vdCBiZSBhcHBsaWVkIHRvICcoamF2YS5sYW5nLlN0cmluZyknIj4oIiIpPC9lcnJvcj47CisgICAgICAgIEZvbzw8ZXJyb3IgZGVzY3I9IlR5cGUgcGFyYW1ldGVyICc/IGV4dGVuZHMgU3RyaW5nJyBpcyBub3Qgd2l0aGluIGl0cyBib3VuZDsgc2hvdWxkIGV4dGVuZCAnamF2YS5sYW5nLk51bWJlciciPj8gZXh0ZW5kcyBTdHJpbmc8L2Vycm9yPj4gZjIgPSBuZXcgRm9vPD48ZXJyb3IgZGVzY3I9IidGb28oamF2YS5sYW5nLlN0cmluZyAmIGphdmEubGFuZy5OdW1iZXIpJyBpbiAnTmVnMDMuRm9vJyBjYW5ub3QgYmUgYXBwbGllZCB0byAnKGphdmEubGFuZy5TdHJpbmcpJyI+KCIiKTwvZXJyb3I+OworICAgICAgICBGb288Pz4gZjMgPSBuZXcgRm9vPD48ZXJyb3IgZGVzY3I9IidGb28oamF2YS5sYW5nLlN0cmluZyAmIGphdmEubGFuZy5OdW1iZXIpJyBpbiAnTmVnMDMuRm9vJyBjYW5ub3QgYmUgYXBwbGllZCB0byAnKGphdmEubGFuZy5TdHJpbmcpJyI+KCIiKTwvZXJyb3I+OworICAgICAgICBGb288PGVycm9yIGRlc2NyPSJUeXBlIHBhcmFtZXRlciAnPyBzdXBlciBTdHJpbmcnIGlzIG5vdCB3aXRoaW4gaXRzIGJvdW5kOyBzaG91bGQgZXh0ZW5kICdqYXZhLmxhbmcuTnVtYmVyJyI+PyBzdXBlciBTdHJpbmc8L2Vycm9yPj4gZjQgPSBuZXcgRm9vPD48ZXJyb3IgZGVzY3I9IidGb28oamF2YS5sYW5nLlN0cmluZyAmIGphdmEubGFuZy5OdW1iZXIpJyBpbiAnTmVnMDMuRm9vJyBjYW5ub3QgYmUgYXBwbGllZCB0byAnKGphdmEubGFuZy5TdHJpbmcpJyI+KCIiKTwvZXJyb3I+OworCisgICAgICAgIEZvbzw8ZXJyb3IgZGVzY3I9IlR5cGUgcGFyYW1ldGVyICdqYXZhLmxhbmcuU3RyaW5nJyBpcyBub3Qgd2l0aGluIGl0cyBib3VuZDsgc2hvdWxkIGV4dGVuZCAnamF2YS5sYW5nLk51bWJlciciPlN0cmluZzwvZXJyb3I+PiBmNSA9IG5ldyBGb288PjxlcnJvciBkZXNjcj0iJ0ZvbyhqYXZhLmxhbmcuU3RyaW5nICYgamF2YS5sYW5nLk51bWJlciwgamF2YS5sYW5nLlN0cmluZyknIGluICdOZWcwMy5Gb28nIGNhbm5vdCBiZSBhcHBsaWVkIHRvICcoamF2YS5sYW5nLlN0cmluZywgamF2YS5sYW5nLlN0cmluZyknIj4oIiIsICIiKTwvZXJyb3I+OworICAgICAgICBGb288PGVycm9yIGRlc2NyPSJUeXBlIHBhcmFtZXRlciAnPyBleHRlbmRzIFN0cmluZycgaXMgbm90IHdpdGhpbiBpdHMgYm91bmQ7IHNob3VsZCBleHRlbmQgJ2phdmEubGFuZy5OdW1iZXInIj4/IGV4dGVuZHMgU3RyaW5nPC9lcnJvcj4+IGY2ID0gbmV3IEZvbzw+PGVycm9yIGRlc2NyPSInRm9vKGphdmEubGFuZy5TdHJpbmcgJiBqYXZhLmxhbmcuTnVtYmVyLCBqYXZhLmxhbmcuU3RyaW5nKScgaW4gJ05lZzAzLkZvbycgY2Fubm90IGJlIGFwcGxpZWQgdG8gJyhqYXZhLmxhbmcuU3RyaW5nLCBqYXZhLmxhbmcuU3RyaW5nKSciPigiIiwgIiIpPC9lcnJvcj47CisgICAgICAgIEZvbzw/PiBmNyA9IG5ldyBGb288PjxlcnJvciBkZXNjcj0iJ0ZvbyhqYXZhLmxhbmcuU3RyaW5nICYgamF2YS5sYW5nLk51bWJlciwgamF2YS5sYW5nLlN0cmluZyknIGluICdOZWcwMy5Gb28nIGNhbm5vdCBiZSBhcHBsaWVkIHRvICcoamF2YS5sYW5nLlN0cmluZywgamF2YS5sYW5nLlN0cmluZyknIj4oIiIsICIiKTwvZXJyb3I+OworICAgICAgICBGb288PGVycm9yIGRlc2NyPSJUeXBlIHBhcmFtZXRlciAnPyBzdXBlciBTdHJpbmcnIGlzIG5vdCB3aXRoaW4gaXRzIGJvdW5kOyBzaG91bGQgZXh0ZW5kICdqYXZhLmxhbmcuTnVtYmVyJyI+PyBzdXBlciBTdHJpbmc8L2Vycm9yPj4gZjggPSBuZXcgRm9vPD48ZXJyb3IgZGVzY3I9IidGb28oamF2YS5sYW5nLlN0cmluZyAmIGphdmEubGFuZy5OdW1iZXIsIGphdmEubGFuZy5TdHJpbmcpJyBpbiAnTmVnMDMuRm9vJyBjYW5ub3QgYmUgYXBwbGllZCB0byAnKGphdmEubGFuZy5TdHJpbmcsIGphdmEubGFuZy5TdHJpbmcpJyI+KCIiLCAiIik8L2Vycm9yPjsKKyAgICB9CisKKyAgICB2b2lkIHRlc3RRdWFsaWZpZWRfMSgpIHsKKyAgICAgICAgRm9vPDxlcnJvciBkZXNjcj0iVHlwZSBwYXJhbWV0ZXIgJ2phdmEubGFuZy5TdHJpbmcnIGlzIG5vdCB3aXRoaW4gaXRzIGJvdW5kOyBzaG91bGQgZXh0ZW5kICdqYXZhLmxhbmcuTnVtYmVyJyI+U3RyaW5nPC9lcnJvcj4+IGYxID0gbmV3IE5lZzAzPFU+LkZvbzw+PGVycm9yIGRlc2NyPSInRm9vKGphdmEubGFuZy5TdHJpbmcgJiBqYXZhLmxhbmcuTnVtYmVyKScgaW4gJ05lZzAzLkZvbycgY2Fubm90IGJlIGFwcGxpZWQgdG8gJyhqYXZhLmxhbmcuU3RyaW5nKSciPigiIik8L2Vycm9yPjsKKyAgICAgICAgRm9vPDxlcnJvciBkZXNjcj0iVHlwZSBwYXJhbWV0ZXIgJz8gZXh0ZW5kcyBTdHJpbmcnIGlzIG5vdCB3aXRoaW4gaXRzIGJvdW5kOyBzaG91bGQgZXh0ZW5kICdqYXZhLmxhbmcuTnVtYmVyJyI+PyBleHRlbmRzIFN0cmluZzwvZXJyb3I+PiBmMiA9IG5ldyBOZWcwMzxVPi5Gb288PjxlcnJvciBkZXNjcj0iJ0ZvbyhqYXZhLmxhbmcuU3RyaW5nICYgamF2YS5sYW5nLk51bWJlciknIGluICdOZWcwMy5Gb28nIGNhbm5vdCBiZSBhcHBsaWVkIHRvICcoamF2YS5sYW5nLlN0cmluZyknIj4oIiIpPC9lcnJvcj47CisgICAgICAgIEZvbzw/PiBmMyA9IG5ldyBOZWcwMzxVPi5Gb288PjxlcnJvciBkZXNjcj0iJ0ZvbyhqYXZhLmxhbmcuU3RyaW5nICYgamF2YS5sYW5nLk51bWJlciknIGluICdOZWcwMy5Gb28nIGNhbm5vdCBiZSBhcHBsaWVkIHRvICcoamF2YS5sYW5nLlN0cmluZyknIj4oIiIpPC9lcnJvcj47CisgICAgICAgIEZvbzw8ZXJyb3IgZGVzY3I9IlR5cGUgcGFyYW1ldGVyICc/IHN1cGVyIFN0cmluZycgaXMgbm90IHdpdGhpbiBpdHMgYm91bmQ7IHNob3VsZCBleHRlbmQgJ2phdmEubGFuZy5OdW1iZXInIj4/IHN1cGVyIFN0cmluZzwvZXJyb3I+PiBmNCA9IG5ldyBOZWcwMzxVPi5Gb288PjxlcnJvciBkZXNjcj0iJ0ZvbyhqYXZhLmxhbmcuU3RyaW5nICYgamF2YS5sYW5nLk51bWJlciknIGluICdOZWcwMy5Gb28nIGNhbm5vdCBiZSBhcHBsaWVkIHRvICcoamF2YS5sYW5nLlN0cmluZyknIj4oIiIpPC9lcnJvcj47CisKKyAgICAgICAgRm9vPDxlcnJvciBkZXNjcj0iVHlwZSBwYXJhbWV0ZXIgJ2phdmEubGFuZy5TdHJpbmcnIGlzIG5vdCB3aXRoaW4gaXRzIGJvdW5kOyBzaG91bGQgZXh0ZW5kICdqYXZhLmxhbmcuTnVtYmVyJyI+U3RyaW5nPC9lcnJvcj4+IGY1ID0gbmV3IE5lZzAzPFU+LkZvbzw+PGVycm9yIGRlc2NyPSInRm9vKGphdmEubGFuZy5TdHJpbmcgJiBqYXZhLmxhbmcuTnVtYmVyLCBqYXZhLmxhbmcuU3RyaW5nKScgaW4gJ05lZzAzLkZvbycgY2Fubm90IGJlIGFwcGxpZWQgdG8gJyhqYXZhLmxhbmcuU3RyaW5nLCBqYXZhLmxhbmcuU3RyaW5nKSciPigiIiwgIiIpPC9lcnJvcj47CisgICAgICAgIEZvbzw8ZXJyb3IgZGVzY3I9IlR5cGUgcGFyYW1ldGVyICc/IGV4dGVuZHMgU3RyaW5nJyBpcyBub3Qgd2l0aGluIGl0cyBib3VuZDsgc2hvdWxkIGV4dGVuZCAnamF2YS5sYW5nLk51bWJlciciPj8gZXh0ZW5kcyBTdHJpbmc8L2Vycm9yPj4gZjYgPSBuZXcgTmVnMDM8VT4uRm9vPD48ZXJyb3IgZGVzY3I9IidGb28oamF2YS5sYW5nLlN0cmluZyAmIGphdmEubGFuZy5OdW1iZXIsIGphdmEubGFuZy5TdHJpbmcpJyBpbiAnTmVnMDMuRm9vJyBjYW5ub3QgYmUgYXBwbGllZCB0byAnKGphdmEubGFuZy5TdHJpbmcsIGphdmEubGFuZy5TdHJpbmcpJyI+KCIiLCAiIik8L2Vycm9yPjsKKyAgICAgICAgRm9vPD8+IGY3ID0gbmV3IE5lZzAzPFU+LkZvbzw+PGVycm9yIGRlc2NyPSInRm9vKGphdmEubGFuZy5TdHJpbmcgJiBqYXZhLmxhbmcuTnVtYmVyLCBqYXZhLmxhbmcuU3RyaW5nKScgaW4gJ05lZzAzLkZvbycgY2Fubm90IGJlIGFwcGxpZWQgdG8gJyhqYXZhLmxhbmcuU3RyaW5nLCBqYXZhLmxhbmcuU3RyaW5nKSciPigiIiwgIiIpPC9lcnJvcj47CisgICAgICAgIEZvbzw8ZXJyb3IgZGVzY3I9IlR5cGUgcGFyYW1ldGVyICc/IHN1cGVyIFN0cmluZycgaXMgbm90IHdpdGhpbiBpdHMgYm91bmQ7IHNob3VsZCBleHRlbmQgJ2phdmEubGFuZy5OdW1iZXInIj4/IHN1cGVyIFN0cmluZzwvZXJyb3I+PiBmOCA9IG5ldyBOZWcwMzxVPi5Gb288PjxlcnJvciBkZXNjcj0iJ0ZvbyhqYXZhLmxhbmcuU3RyaW5nICYgamF2YS5sYW5nLk51bWJlciwgamF2YS5sYW5nLlN0cmluZyknIGluICdOZWcwMy5Gb28nIGNhbm5vdCBiZSBhcHBsaWVkIHRvICcoamF2YS5sYW5nLlN0cmluZywgamF2YS5sYW5nLlN0cmluZyknIj4oIiIsICIiKTwvZXJyb3I+OworICAgIH0KKworICAgIHZvaWQgdGVzdFF1YWxpZmllZF8yKE5lZzAzPFU+IG4pIHsKKyAgICAgICAgRm9vPDxlcnJvciBkZXNjcj0iVHlwZSBwYXJhbWV0ZXIgJ2phdmEubGFuZy5TdHJpbmcnIGlzIG5vdCB3aXRoaW4gaXRzIGJvdW5kOyBzaG91bGQgZXh0ZW5kICdqYXZhLmxhbmcuTnVtYmVyJyI+U3RyaW5nPC9lcnJvcj4+IGYxID0gbi5uZXcgRm9vPD48ZXJyb3IgZGVzY3I9IidGb28oamF2YS5sYW5nLlN0cmluZyAmIGphdmEubGFuZy5OdW1iZXIpJyBpbiAnTmVnMDMuRm9vJyBjYW5ub3QgYmUgYXBwbGllZCB0byAnKGphdmEubGFuZy5TdHJpbmcpJyI+KCIiKTwvZXJyb3I+OworICAgICAgICBGb288PGVycm9yIGRlc2NyPSJUeXBlIHBhcmFtZXRlciAnPyBleHRlbmRzIFN0cmluZycgaXMgbm90IHdpdGhpbiBpdHMgYm91bmQ7IHNob3VsZCBleHRlbmQgJ2phdmEubGFuZy5OdW1iZXInIj4/IGV4dGVuZHMgU3RyaW5nPC9lcnJvcj4+IGYyID0gbi5uZXcgRm9vPD48ZXJyb3IgZGVzY3I9IidGb28oamF2YS5sYW5nLlN0cmluZyAmIGphdmEubGFuZy5OdW1iZXIpJyBpbiAnTmVnMDMuRm9vJyBjYW5ub3QgYmUgYXBwbGllZCB0byAnKGphdmEubGFuZy5TdHJpbmcpJyI+KCIiKTwvZXJyb3I+OworICAgICAgICBGb288Pz4gZjMgPSBuLm5ldyBGb288PjxlcnJvciBkZXNjcj0iJ0ZvbyhqYXZhLmxhbmcuU3RyaW5nICYgamF2YS5sYW5nLk51bWJlciknIGluICdOZWcwMy5Gb28nIGNhbm5vdCBiZSBhcHBsaWVkIHRvICcoamF2YS5sYW5nLlN0cmluZyknIj4oIiIpPC9lcnJvcj47CisgICAgICAgIEZvbzw8ZXJyb3IgZGVzY3I9IlR5cGUgcGFyYW1ldGVyICc/IHN1cGVyIFN0cmluZycgaXMgbm90IHdpdGhpbiBpdHMgYm91bmQ7IHNob3VsZCBleHRlbmQgJ2phdmEubGFuZy5OdW1iZXInIj4/IHN1cGVyIFN0cmluZzwvZXJyb3I+PiBmNCA9IG4ubmV3IEZvbzw+PGVycm9yIGRlc2NyPSInRm9vKGphdmEubGFuZy5TdHJpbmcgJiBqYXZhLmxhbmcuTnVtYmVyKScgaW4gJ05lZzAzLkZvbycgY2Fubm90IGJlIGFwcGxpZWQgdG8gJyhqYXZhLmxhbmcuU3RyaW5nKSciPigiIik8L2Vycm9yPjsKKworICAgICAgICBGb288PGVycm9yIGRlc2NyPSJUeXBlIHBhcmFtZXRlciAnamF2YS5sYW5nLlN0cmluZycgaXMgbm90IHdpdGhpbiBpdHMgYm91bmQ7IHNob3VsZCBleHRlbmQgJ2phdmEubGFuZy5OdW1iZXInIj5TdHJpbmc8L2Vycm9yPj4gZjUgPSBuLm5ldyBGb288PjxlcnJvciBkZXNjcj0iJ0ZvbyhqYXZhLmxhbmcuU3RyaW5nICYgamF2YS5sYW5nLk51bWJlciwgamF2YS5sYW5nLlN0cmluZyknIGluICdOZWcwMy5Gb28nIGNhbm5vdCBiZSBhcHBsaWVkIHRvICcoamF2YS5sYW5nLlN0cmluZywgamF2YS5sYW5nLlN0cmluZyknIj4oIiIsICIiKTwvZXJyb3I+OworICAgICAgICBGb288PGVycm9yIGRlc2NyPSJUeXBlIHBhcmFtZXRlciAnPyBleHRlbmRzIFN0cmluZycgaXMgbm90IHdpdGhpbiBpdHMgYm91bmQ7IHNob3VsZCBleHRlbmQgJ2phdmEubGFuZy5OdW1iZXInIj4/IGV4dGVuZHMgU3RyaW5nPC9lcnJvcj4+IGY2ID0gbi5uZXcgRm9vPD48ZXJyb3IgZGVzY3I9IidGb28oamF2YS5sYW5nLlN0cmluZyAmIGphdmEubGFuZy5OdW1iZXIsIGphdmEubGFuZy5TdHJpbmcpJyBpbiAnTmVnMDMuRm9vJyBjYW5ub3QgYmUgYXBwbGllZCB0byAnKGphdmEubGFuZy5TdHJpbmcsIGphdmEubGFuZy5TdHJpbmcpJyI+KCIiLCAiIik8L2Vycm9yPjsKKyAgICAgICAgRm9vPD8+IGY3ID0gbi5uZXcgRm9vPD48ZXJyb3IgZGVzY3I9IidGb28oamF2YS5sYW5nLlN0cmluZyAmIGphdmEubGFuZy5OdW1iZXIsIGphdmEubGFuZy5TdHJpbmcpJyBpbiAnTmVnMDMuRm9vJyBjYW5ub3QgYmUgYXBwbGllZCB0byAnKGphdmEubGFuZy5TdHJpbmcsIGphdmEubGFuZy5TdHJpbmcpJyI+KCIiLCAiIik8L2Vycm9yPjsKKyAgICAgICAgRm9vPDxlcnJvciBkZXNjcj0iVHlwZSBwYXJhbWV0ZXIgJz8gc3VwZXIgU3RyaW5nJyBpcyBub3Qgd2l0aGluIGl0cyBib3VuZDsgc2hvdWxkIGV4dGVuZCAnamF2YS5sYW5nLk51bWJlciciPj8gc3VwZXIgU3RyaW5nPC9lcnJvcj4+IGY4ID0gbi5uZXcgRm9vPD48ZXJyb3IgZGVzY3I9IidGb28oamF2YS5sYW5nLlN0cmluZyAmIGphdmEubGFuZy5OdW1iZXIsIGphdmEubGFuZy5TdHJpbmcpJyBpbiAnTmVnMDMuRm9vJyBjYW5ub3QgYmUgYXBwbGllZCB0byAnKGphdmEubGFuZy5TdHJpbmcsIGphdmEubGFuZy5TdHJpbmcpJyI+KCIiLCAiIik8L2Vycm9yPjsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZzcvRGlhbW9uZE5lZzQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nNy9EaWFtb25kTmVnNC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU1YjUwYzUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZzcvRGlhbW9uZE5lZzQuamF2YQpAQCAtMCwwICsxLDE4IEBACitjbGFzcyBOZWcwNCB7CisKKyAgICB2b2lkIHRlc3QoKSB7CisgICAgICAgIGNsYXNzIEZvbzxWIGV4dGVuZHMgTnVtYmVyPiB7CisgICAgICAgICAgICBGb28oViB4KSB7fQorICAgICAgICAgICAgPFo+IEZvbyhWIHgsIFogeikge30KKyAgICAgICAgfQorICAgICAgICBGb288PGVycm9yIGRlc2NyPSJUeXBlIHBhcmFtZXRlciAnamF2YS5sYW5nLlN0cmluZycgaXMgbm90IHdpdGhpbiBpdHMgYm91bmQ7IHNob3VsZCBleHRlbmQgJ2phdmEubGFuZy5OdW1iZXInIj5TdHJpbmc8L2Vycm9yPj4gbjEgPSBuZXcgRm9vPD48ZXJyb3IgZGVzY3I9IidGb28oamF2YS5sYW5nLlN0cmluZyAmIGphdmEubGFuZy5OdW1iZXIpJyBpbiAnRm9vJyBjYW5ub3QgYmUgYXBwbGllZCB0byAnKGphdmEubGFuZy5TdHJpbmcpJyI+KCIiKTwvZXJyb3I+OworICAgICAgICBGb288PGVycm9yIGRlc2NyPSJUeXBlIHBhcmFtZXRlciAnPyBleHRlbmRzIFN0cmluZycgaXMgbm90IHdpdGhpbiBpdHMgYm91bmQ7IHNob3VsZCBleHRlbmQgJ2phdmEubGFuZy5OdW1iZXInIj4/IGV4dGVuZHMgU3RyaW5nPC9lcnJvcj4+IG4yID0gbmV3IEZvbzw+PGVycm9yIGRlc2NyPSInRm9vKGphdmEubGFuZy5TdHJpbmcgJiBqYXZhLmxhbmcuTnVtYmVyKScgaW4gJ0ZvbycgY2Fubm90IGJlIGFwcGxpZWQgdG8gJyhqYXZhLmxhbmcuU3RyaW5nKSciPigiIik8L2Vycm9yPjsKKyAgICAgICAgRm9vPD8+IG4zID0gbmV3IEZvbzw+PGVycm9yIGRlc2NyPSInRm9vKGphdmEubGFuZy5TdHJpbmcgJiBqYXZhLmxhbmcuTnVtYmVyKScgaW4gJ0ZvbycgY2Fubm90IGJlIGFwcGxpZWQgdG8gJyhqYXZhLmxhbmcuU3RyaW5nKSciPigiIik8L2Vycm9yPjsKKyAgICAgICAgRm9vPDxlcnJvciBkZXNjcj0iVHlwZSBwYXJhbWV0ZXIgJz8gc3VwZXIgU3RyaW5nJyBpcyBub3Qgd2l0aGluIGl0cyBib3VuZDsgc2hvdWxkIGV4dGVuZCAnamF2YS5sYW5nLk51bWJlciciPj8gc3VwZXIgU3RyaW5nPC9lcnJvcj4+IG40ID0gbmV3IEZvbzw+PGVycm9yIGRlc2NyPSInRm9vKGphdmEubGFuZy5TdHJpbmcgJiBqYXZhLmxhbmcuTnVtYmVyKScgaW4gJ0ZvbycgY2Fubm90IGJlIGFwcGxpZWQgdG8gJyhqYXZhLmxhbmcuU3RyaW5nKSciPigiIik8L2Vycm9yPjsKKworICAgICAgICBGb288PGVycm9yIGRlc2NyPSJUeXBlIHBhcmFtZXRlciAnamF2YS5sYW5nLlN0cmluZycgaXMgbm90IHdpdGhpbiBpdHMgYm91bmQ7IHNob3VsZCBleHRlbmQgJ2phdmEubGFuZy5OdW1iZXInIj5TdHJpbmc8L2Vycm9yPj4gbjUgPSBuZXcgRm9vPD48ZXJyb3IgZGVzY3I9IidGb28oamF2YS5sYW5nLlN0cmluZyAmIGphdmEubGFuZy5OdW1iZXIsIGphdmEubGFuZy5TdHJpbmcpJyBpbiAnRm9vJyBjYW5ub3QgYmUgYXBwbGllZCB0byAnKGphdmEubGFuZy5TdHJpbmcsIGphdmEubGFuZy5TdHJpbmcpJyI+KCIiLCAiIik8L2Vycm9yPjsKKyAgICAgICAgRm9vPDxlcnJvciBkZXNjcj0iVHlwZSBwYXJhbWV0ZXIgJz8gZXh0ZW5kcyBTdHJpbmcnIGlzIG5vdCB3aXRoaW4gaXRzIGJvdW5kOyBzaG91bGQgZXh0ZW5kICdqYXZhLmxhbmcuTnVtYmVyJyI+PyBleHRlbmRzIFN0cmluZzwvZXJyb3I+PiBuNiA9IG5ldyBGb288PjxlcnJvciBkZXNjcj0iJ0ZvbyhqYXZhLmxhbmcuU3RyaW5nICYgamF2YS5sYW5nLk51bWJlciwgamF2YS5sYW5nLlN0cmluZyknIGluICdGb28nIGNhbm5vdCBiZSBhcHBsaWVkIHRvICcoamF2YS5sYW5nLlN0cmluZywgamF2YS5sYW5nLlN0cmluZyknIj4oIiIsICIiKTwvZXJyb3I+OworICAgICAgICBGb288Pz4gbjcgPSBuZXcgRm9vPD48ZXJyb3IgZGVzY3I9IidGb28oamF2YS5sYW5nLlN0cmluZyAmIGphdmEubGFuZy5OdW1iZXIsIGphdmEubGFuZy5TdHJpbmcpJyBpbiAnRm9vJyBjYW5ub3QgYmUgYXBwbGllZCB0byAnKGphdmEubGFuZy5TdHJpbmcsIGphdmEubGFuZy5TdHJpbmcpJyI+KCIiLCAiIik8L2Vycm9yPjsKKyAgICAgICAgRm9vPDxlcnJvciBkZXNjcj0iVHlwZSBwYXJhbWV0ZXIgJz8gc3VwZXIgU3RyaW5nJyBpcyBub3Qgd2l0aGluIGl0cyBib3VuZDsgc2hvdWxkIGV4dGVuZCAnamF2YS5sYW5nLk51bWJlciciPj8gc3VwZXIgU3RyaW5nPC9lcnJvcj4+IG44ID0gbmV3IEZvbzw+PGVycm9yIGRlc2NyPSInRm9vKGphdmEubGFuZy5TdHJpbmcgJiBqYXZhLmxhbmcuTnVtYmVyLCBqYXZhLmxhbmcuU3RyaW5nKScgaW4gJ0ZvbycgY2Fubm90IGJlIGFwcGxpZWQgdG8gJyhqYXZhLmxhbmcuU3RyaW5nLCBqYXZhLmxhbmcuU3RyaW5nKSciPigiIiwgIiIpPC9lcnJvcj47CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmc3L0RpYW1vbmROZWc1LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZzcvRGlhbW9uZE5lZzUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MWQ2NDQxCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmc3L0RpYW1vbmROZWc1LmphdmEKQEAgLTAsMCArMSwzMSBAQAorY2xhc3MgTmVnMDU8VT4geworCisgICAgY2xhc3MgRm9vPFY+IHsKKyAgICAgICAgRm9vKFYgeCkge30KKyAgICAgICAgPFo+IEZvbyhWIHgsIFogeikge30KKyAgICB9CisKKyAgICB2b2lkIHRlc3RSYXJlXzEoKSB7CisgICAgICAgIE5lZzA1PD8+LkZvbzxTdHJpbmc+IGYxID0gbmV3IE5lZzA1LkZvbzxlcnJvciBkZXNjcj0iVHlwZSBhcmd1bWVudHMgZ2l2ZW4gb24gYSByYXcgdHlwZSI+PD48L2Vycm9yPigiIik7CisgICAgICAgIE5lZzA1PD8+LkZvbzw/IGV4dGVuZHMgU3RyaW5nPiBmMiA9IG5ldyBOZWcwNS5Gb288ZXJyb3IgZGVzY3I9IlR5cGUgYXJndW1lbnRzIGdpdmVuIG9uIGEgcmF3IHR5cGUiPjw+PC9lcnJvcj4oIiIpOworICAgICAgICBOZWcwNTw/Pi5Gb288Pz4gZjMgPSBuZXcgTmVnMDUuRm9vPGVycm9yIGRlc2NyPSJUeXBlIGFyZ3VtZW50cyBnaXZlbiBvbiBhIHJhdyB0eXBlIj48PjwvZXJyb3I+KCIiKTsKKyAgICAgICAgTmVnMDU8Pz4uRm9vPD8gc3VwZXIgU3RyaW5nPiBmNCA9IG5ldyBOZWcwNS5Gb288ZXJyb3IgZGVzY3I9IlR5cGUgYXJndW1lbnRzIGdpdmVuIG9uIGEgcmF3IHR5cGUiPjw+PC9lcnJvcj4oIiIpOworCisgICAgICAgIE5lZzA1PD8+LkZvbzxTdHJpbmc+IGY1ID0gbmV3IE5lZzA1LkZvbzxlcnJvciBkZXNjcj0iVHlwZSBhcmd1bWVudHMgZ2l2ZW4gb24gYSByYXcgdHlwZSI+PD48L2Vycm9yPigiIiwgIiIpOworICAgICAgICBOZWcwNTw/Pi5Gb288PyBleHRlbmRzIFN0cmluZz4gZjYgPSBuZXcgTmVnMDUuRm9vPGVycm9yIGRlc2NyPSJUeXBlIGFyZ3VtZW50cyBnaXZlbiBvbiBhIHJhdyB0eXBlIj48PjwvZXJyb3I+KCIiLCAiIik7CisgICAgICAgIE5lZzA1PD8+LkZvbzw/PiBmNyA9IG5ldyBOZWcwNS5Gb288ZXJyb3IgZGVzY3I9IlR5cGUgYXJndW1lbnRzIGdpdmVuIG9uIGEgcmF3IHR5cGUiPjw+PC9lcnJvcj4oIiIsICIiKTsKKyAgICAgICAgTmVnMDU8Pz4uRm9vPD8gc3VwZXIgU3RyaW5nPiBmOCA9IG5ldyBOZWcwNS5Gb288ZXJyb3IgZGVzY3I9IlR5cGUgYXJndW1lbnRzIGdpdmVuIG9uIGEgcmF3IHR5cGUiPjw+PC9lcnJvcj4oIiIsICIiKTsKKyAgICB9CisKKyAgICB2b2lkIHRlc3RSYXJlXzIoTmVnMDUgbikgeworICAgICAgICBOZWcwNTw/Pi5Gb288U3RyaW5nPiBmMSA9IG4ubmV3IEZvbzxlcnJvciBkZXNjcj0iVHlwZSBhcmd1bWVudHMgZ2l2ZW4gb24gYSByYXcgdHlwZSI+PD48L2Vycm9yPigiIik7CisgICAgICAgIE5lZzA1PD8+LkZvbzw/IGV4dGVuZHMgU3RyaW5nPiBmMiA9IG4ubmV3IEZvbzxlcnJvciBkZXNjcj0iVHlwZSBhcmd1bWVudHMgZ2l2ZW4gb24gYSByYXcgdHlwZSI+PD48L2Vycm9yPigiIik7CisgICAgICAgIE5lZzA1PD8+LkZvbzw/PiBmMyA9IG4ubmV3IEZvbzxlcnJvciBkZXNjcj0iVHlwZSBhcmd1bWVudHMgZ2l2ZW4gb24gYSByYXcgdHlwZSI+PD48L2Vycm9yPigiIik7CisgICAgICAgIE5lZzA1PD8+LkZvbzw/IHN1cGVyIFN0cmluZz4gZjQgPSBuLm5ldyBGb288ZXJyb3IgZGVzY3I9IlR5cGUgYXJndW1lbnRzIGdpdmVuIG9uIGEgcmF3IHR5cGUiPjw+PC9lcnJvcj4oIiIpOworCisgICAgICAgIE5lZzA1PD8+LkZvbzxTdHJpbmc+IGY1ID0gbi5uZXcgRm9vPGVycm9yIGRlc2NyPSJUeXBlIGFyZ3VtZW50cyBnaXZlbiBvbiBhIHJhdyB0eXBlIj48PjwvZXJyb3I+KCIiLCAiIik7CisgICAgICAgIE5lZzA1PD8+LkZvbzw/IGV4dGVuZHMgU3RyaW5nPiBmNiA9IG4ubmV3IEZvbzxlcnJvciBkZXNjcj0iVHlwZSBhcmd1bWVudHMgZ2l2ZW4gb24gYSByYXcgdHlwZSI+PD48L2Vycm9yPigiIiwgIiIpOworICAgICAgICBOZWcwNTw/Pi5Gb288Pz4gZjcgPSBuLm5ldyBGb288ZXJyb3IgZGVzY3I9IlR5cGUgYXJndW1lbnRzIGdpdmVuIG9uIGEgcmF3IHR5cGUiPjw+PC9lcnJvcj4oIiIsICIiKTsKKyAgICAgICAgTmVnMDU8Pz4uRm9vPD8gc3VwZXIgU3RyaW5nPiBmOCA9IG4ubmV3IEZvbzxlcnJvciBkZXNjcj0iVHlwZSBhcmd1bWVudHMgZ2l2ZW4gb24gYSByYXcgdHlwZSI+PD48L2Vycm9yPigiIiwgIiIpOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZzcvRGlhbW9uZE5lZzYuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nNy9EaWFtb25kTmVnNi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEyMzNlZDIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZzcvRGlhbW9uZE5lZzYuamF2YQpAQCAtMCwwICsxLDcgQEAKK2NsYXNzIE5lZzA2IHsKKworICAgc3RhdGljIGNsYXNzIENTdXBlckZvbzxYPiB7fQorICAgc3RhdGljIGNsYXNzIENGb288WCBleHRlbmRzIE51bWJlcj4gZXh0ZW5kcyBDU3VwZXJGb288WD4ge30KKworICAgQ1N1cGVyRm9vPFN0cmluZz4gY3NmMSA9IG5ldyBDRm9vPDxlcnJvciBkZXNjcj0iVHlwZSBwYXJhbWV0ZXIgJ2phdmEubGFuZy5TdHJpbmcnIGlzIG5vdCB3aXRoaW4gaXRzIGJvdW5kOyBzaG91bGQgZXh0ZW5kICdqYXZhLmxhbmcuTnVtYmVyJyI+PC9lcnJvcj4+KCk7Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZzcvRGlhbW9uZE5lZzcuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nNy9EaWFtb25kTmVnNy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg0NzcxYTYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZzcvRGlhbW9uZE5lZzcuamF2YQpAQCAtMCwwICsxLDggQEAKK2NsYXNzIE5lZzA3IHsKKyAgIHN0YXRpYyBjbGFzcyBTdXBlckZvbzxYPiB7fQorICAgc3RhdGljIGNsYXNzIEZvbzxYIGV4dGVuZHMgTnVtYmVyPiBleHRlbmRzIFN1cGVyRm9vPFg+IHsKKyAgICAgICBGb28oWCB4KSB7fQorICAgfQorCisgICBTdXBlckZvbzxTdHJpbmc+IHNmMSA9IG5ldyBGb288PjxlcnJvciBkZXNjcj0iJ0ZvbyhqYXZhLmxhbmcuU3RyaW5nICYgamF2YS5sYW5nLk51bWJlciknIGluICdOZWcwNy5Gb28nIGNhbm5vdCBiZSBhcHBsaWVkIHRvICcoamF2YS5sYW5nLlN0cmluZyknIj4oIiIpPC9lcnJvcj47Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZzcvRGlhbW9uZE5lZzguamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nNy9EaWFtb25kTmVnOC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMwYTk3MzA4MgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nNy9EaWFtb25kTmVnOC5qYXZhCkBAIC0wLDAgKzEsNSBAQAorY2xhc3MgTmVnMDggeworICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworICAgICBTdHJpbmcgcyA9IG5ldyBTdHJpbmc8PGVycm9yIGRlc2NyPSJEaWFtb25kIG9wZXJhdG9yIGlzIG5vdCBhcHBsaWNhYmxlIGZvciBub24tcGFyYW1ldGVyaXplZCB0eXBlcyI+PC9lcnJvcj4+KCJmb28iKTsKKyAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nNy9EaWFtb25kTmVnOS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmc3L0RpYW1vbmROZWc5LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzRjMjdiMAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nNy9EaWFtb25kTmVnOS5qYXZhCkBAIC0wLDAgKzEsMTUgQEAKK2NsYXNzIE5lZzA5IHsKKyAgICBjbGFzcyBNZW1iZXI8WD4ge30KKworICAgIHN0YXRpYyBjbGFzcyBOZXN0ZWQ8WD4ge30KKworICAgIHZvaWQgdGVzdFNpbXBsZSgpIHsKKyAgICAgICAgTWVtYmVyPD8+IG0xID0gbmV3IE1lbWJlcjw8ZXJyb3IgZGVzY3I9IkNhbm5vdCB1c2UgJyc8PicnIHdpdGggYW5vbnltb3VzIGlubmVyIGNsYXNzZXMiPjwvZXJyb3I+PigpIHt9OworICAgICAgICBOZXN0ZWQ8Pz4gbTIgPSBuZXcgTmVzdGVkPDxlcnJvciBkZXNjcj0iQ2Fubm90IHVzZSAnJzw+Jycgd2l0aCBhbm9ueW1vdXMgaW5uZXIgY2xhc3NlcyI+PC9lcnJvcj4+KCkge307CisgICAgfQorCisgICAgdm9pZCB0ZXN0UXVhbGlmaWVkKCkgeworICAgICAgICBNZW1iZXI8Pz4gbTEgPSB0aGlzLm5ldyBNZW1iZXI8PGVycm9yIGRlc2NyPSJDYW5ub3QgdXNlICcnPD4nJyB3aXRoIGFub255bW91cyBpbm5lciBjbGFzc2VzIj48L2Vycm9yPj4oKSB7fTsKKyAgICAgICAgTmVzdGVkPD8+IG0yID0gbmV3IE5lZzA5Lk5lc3RlZDw8ZXJyb3IgZGVzY3I9IkNhbm5vdCB1c2UgJyc8PicnIHdpdGggYW5vbnltb3VzIGlubmVyIGNsYXNzZXMiPjwvZXJyb3I+PigpIHt9OworICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nNy9EaWFtb25kUG9zMS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmc3L0RpYW1vbmRQb3MxLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTI3ZGYxZAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nNy9EaWFtb25kUG9zMS5qYXZhCkBAIC0wLDAgKzEsMjMgQEAKK3B1YmxpYyBjbGFzcyBQb3MwMTxYPiB7CisKKyAgICBQb3MwMShYIHgpIHt9CisKKyAgICA8Wj4gUG9zMDEoWCB4LCBaIHopIHt9CisKKyAgICB2b2lkIHRlc3QoKSB7CisgICAgICAgIFBvczAxPEludGVnZXI+IHAxID0gbmV3IFBvczAxPD4oMSk7CisgICAgICAgIFBvczAxPD8gZXh0ZW5kcyBJbnRlZ2VyPiBwMiA9IG5ldyBQb3MwMTw+KDEpOworICAgICAgICBQb3MwMTw/PiBwMyA9IG5ldyBQb3MwMTw+KDEpOworICAgICAgICBQb3MwMTw/IHN1cGVyIEludGVnZXI+IHA0ID0gbmV3IFBvczAxPD4oMSk7CisKKyAgICAgICAgUG9zMDE8SW50ZWdlcj4gcDUgPSBuZXcgUG9zMDE8PigxLCAiIik7CisgICAgICAgIFBvczAxPD8gZXh0ZW5kcyBJbnRlZ2VyPiBwNiA9IG5ldyBQb3MwMTw+KDEsICIiKTsKKyAgICAgICAgUG9zMDE8Pz4gcDcgPSBuZXcgUG9zMDE8PigxLCAiIik7CisgICAgICAgIFBvczAxPD8gc3VwZXIgSW50ZWdlcj4gcDggPSBuZXcgUG9zMDE8PigxLCAiIik7CisgICAgfQorCisgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworICAgICAgICBQb3MwMTxTdHJpbmc+IHAxID0gbmV3IFBvczAxPD4oIiIpOworICAgICAgICBwMS50ZXN0KCk7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nNy9EaWFtb25kUG9zMi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmc3L0RpYW1vbmRQb3MyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGY3YTUwOAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nNy9EaWFtb25kUG9zMi5qYXZhCkBAIC0wLDAgKzEsMzcgQEAKK3B1YmxpYyBjbGFzcyBQb3MwMiB7CisKKyAgICBzdGF0aWMgY2xhc3MgRm9vPFg+IHsKKyAgICAgICAgRm9vKFggeCkge30KKyAgICAgICAgPFo+IEZvbyhYIHgsIFogeikge30KKyAgICB9CisKKyAgICB2b2lkIHRlc3RTaW1wbGUoKSB7CisgICAgICAgIEZvbzxJbnRlZ2VyPiBmMSA9IG5ldyBGb288PigxKTsKKyAgICAgICAgRm9vPD8gZXh0ZW5kcyBJbnRlZ2VyPiBmMiA9IG5ldyBGb288PigxKTsKKyAgICAgICAgRm9vPD8+IGYzID0gbmV3IEZvbzw+KDEpOworICAgICAgICBGb288PyBzdXBlciBJbnRlZ2VyPiBmNCA9IG5ldyBGb288PigxKTsKKworICAgICAgICBGb288SW50ZWdlcj4gZjUgPSBuZXcgRm9vPD4oMSwgIiIpOworICAgICAgICBGb288PyBleHRlbmRzIEludGVnZXI+IGY2ID0gbmV3IEZvbzw+KDEsICIiKTsKKyAgICAgICAgRm9vPD8+IGY3ID0gbmV3IEZvbzw+KDEsICIiKTsKKyAgICAgICAgRm9vPD8gc3VwZXIgSW50ZWdlcj4gZjggPSBuZXcgRm9vPD4oMSwgIiIpOworICAgIH0KKworICAgIHZvaWQgdGVzdFF1YWxpZmllZCgpIHsKKyAgICAgICAgRm9vPEludGVnZXI+IGYxID0gbmV3IFBvczAyLkZvbzw+KDEpOworICAgICAgICBGb288PyBleHRlbmRzIEludGVnZXI+IGYyID0gbmV3IFBvczAyLkZvbzw+KDEpOworICAgICAgICBGb288Pz4gZjMgPSBuZXcgUG9zMDIuRm9vPD4oMSk7CisgICAgICAgIEZvbzw/IHN1cGVyIEludGVnZXI+IGY0ID0gbmV3IFBvczAyLkZvbzw+KDEpOworCisgICAgICAgIEZvbzxJbnRlZ2VyPiBmNSA9IG5ldyBQb3MwMi5Gb288PigxLCAiIik7CisgICAgICAgIEZvbzw/IGV4dGVuZHMgSW50ZWdlcj4gZjYgPSBuZXcgUG9zMDIuRm9vPD4oMSwgIiIpOworICAgICAgICBGb288Pz4gZjcgPSBuZXcgUG9zMDIuRm9vPD4oMSwgIiIpOworICAgICAgICBGb288PyBzdXBlciBJbnRlZ2VyPiBmOCA9IG5ldyBQb3MwMi5Gb288PigxLCAiIik7CisgICAgfQorCisgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworICAgICAgICBQb3MwMiBwMiA9IG5ldyBQb3MwMigpOworICAgICAgICBwMi50ZXN0U2ltcGxlKCk7CisgICAgICAgIHAyLnRlc3RRdWFsaWZpZWQoKTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmc3L0RpYW1vbmRQb3MzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZzcvRGlhbW9uZFBvczMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43Y2IwMTc4Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmc3L0RpYW1vbmRQb3MzLmphdmEKQEAgLTAsMCArMSw1MCBAQAorcHVibGljIGNsYXNzIFBvczAzPFU+IHsKKworICAgIGNsYXNzIEZvbzxWPiB7CisgICAgICAgIEZvbyhWIHgpIHt9CisgICAgICAgIDxaPiBGb28oViB4LCBaIHopIHt9CisgICAgfQorCisgICAgdm9pZCB0ZXN0U2ltcGxlKCkgeworICAgICAgICBGb288SW50ZWdlcj4gZjEgPSBuZXcgRm9vPD4oMSk7CisgICAgICAgIEZvbzw/IGV4dGVuZHMgSW50ZWdlcj4gZjIgPSBuZXcgRm9vPD4oMSk7CisgICAgICAgIEZvbzw/PiBmMyA9IG5ldyBGb288PigxKTsKKyAgICAgICAgRm9vPD8gc3VwZXIgSW50ZWdlcj4gZjQgPSBuZXcgRm9vPD4oMSk7CisKKyAgICAgICAgRm9vPEludGVnZXI+IGY1ID0gbmV3IEZvbzw+KDEsICIiKTsKKyAgICAgICAgRm9vPD8gZXh0ZW5kcyBJbnRlZ2VyPiBmNiA9IG5ldyBGb288PigxLCAiIik7CisgICAgICAgIEZvbzw/PiBmNyA9IG5ldyBGb288PigxLCAiIik7CisgICAgICAgIEZvbzw/IHN1cGVyIEludGVnZXI+IGY4ID0gbmV3IEZvbzw+KDEsICIiKTsKKyAgICB9CisKKyAgICB2b2lkIHRlc3RRdWFsaWZpZWRfMSgpIHsKKyAgICAgICAgRm9vPEludGVnZXI+IGYxID0gbmV3IFBvczAzPFU+LkZvbzw+KDEpOworICAgICAgICBGb288PyBleHRlbmRzIEludGVnZXI+IGYyID0gbmV3IFBvczAzPFU+LkZvbzw+KDEpOworICAgICAgICBGb288Pz4gZjMgPSBuZXcgUG9zMDM8VT4uRm9vPD4oMSk7CisgICAgICAgIEZvbzw/IHN1cGVyIEludGVnZXI+IGY0ID0gbmV3IFBvczAzPFU+LkZvbzw+KDEpOworCisgICAgICAgIEZvbzxJbnRlZ2VyPiBmNSA9IG5ldyBQb3MwMzxVPi5Gb288PigxLCAiIik7CisgICAgICAgIEZvbzw/IGV4dGVuZHMgSW50ZWdlcj4gZjYgPSBuZXcgUG9zMDM8VT4uRm9vPD4oMSwgIiIpOworICAgICAgICBGb288Pz4gZjcgPSBuZXcgUG9zMDM8VT4uRm9vPD4oMSwgIiIpOworICAgICAgICBGb288PyBzdXBlciBJbnRlZ2VyPiBmOCA9IG5ldyBQb3MwMzxVPi5Gb288PigxLCAiIik7CisgICAgfQorCisgICAgdm9pZCB0ZXN0UXVhbGlmaWVkXzIoUG9zMDM8VT4gcCkgeworICAgICAgICBGb288SW50ZWdlcj4gZjEgPSBwLm5ldyBGb288PigxKTsKKyAgICAgICAgRm9vPD8gZXh0ZW5kcyBJbnRlZ2VyPiBmMiA9IHAubmV3IEZvbzw+KDEpOworICAgICAgICBGb288Pz4gZjMgPSBwLm5ldyBGb288PigxKTsKKyAgICAgICAgRm9vPD8gc3VwZXIgSW50ZWdlcj4gZjQgPSBwLm5ldyBGb288PigxKTsKKworICAgICAgICBGb288SW50ZWdlcj4gZjUgPSBwLm5ldyBGb288PigxLCAiIik7CisgICAgICAgIEZvbzw/IGV4dGVuZHMgSW50ZWdlcj4gZjYgPSBwLm5ldyBGb288PigxLCAiIik7CisgICAgICAgIEZvbzw/PiBmNyA9IHAubmV3IEZvbzw+KDEsICIiKTsKKyAgICAgICAgRm9vPD8gc3VwZXIgSW50ZWdlcj4gZjggPSBwLm5ldyBGb288PigxLCAiIik7CisgICAgfQorCisgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworICAgICAgICBQb3MwMzxTdHJpbmc+IHAzID0gbmV3IFBvczAzPD4oKTsKKyAgICAgICAgcDMudGVzdFNpbXBsZSgpOworICAgICAgICBwMy50ZXN0UXVhbGlmaWVkXzEoKTsKKyAgICAgICAgcDMudGVzdFF1YWxpZmllZF8yKHAzKTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZzcvRGlhbW9uZFBvczQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nNy9EaWFtb25kUG9zNC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY2NmFjYjgKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZzcvRGlhbW9uZFBvczQuamF2YQpAQCAtMCwwICsxLDIzIEBACitwdWJsaWMgY2xhc3MgUG9zNDxVPiB7CisKKyAgICB2b2lkIHRlc3QoKSB7CisgICAgICAgIGNsYXNzIEZvbzxWPiB7CisgICAgICAgICAgICBGb28oViB4KSB7fQorICAgICAgICAgICAgPFo+IEZvbyhWIHgsIFogeikge30KKyAgICAgICAgfQorICAgICAgICBGb288SW50ZWdlcj4gcDEgPSBuZXcgRm9vPD4oMSk7CisgICAgICAgIEZvbzw/IGV4dGVuZHMgSW50ZWdlcj4gcDIgPSBuZXcgRm9vPD4oMSk7CisgICAgICAgIEZvbzw/PiBwMyA9IG5ldyBGb288PigxKTsKKyAgICAgICAgRm9vPD8gc3VwZXIgSW50ZWdlcj4gcDQgPSBuZXcgRm9vPD4oMSk7CisKKyAgICAgICAgRm9vPEludGVnZXI+IHA1ID0gbmV3IEZvbzw+KDEsICIiKTsKKyAgICAgICAgRm9vPD8gZXh0ZW5kcyBJbnRlZ2VyPiBwNiA9IG5ldyBGb288PigxLCAiIik7CisgICAgICAgIEZvbzw/PiBwNyA9IG5ldyBGb288PigxLCAiIik7CisgICAgICAgIEZvbzw/IHN1cGVyIEludGVnZXI+IHA4ID0gbmV3IEZvbzw+KDEsICIiKTsKKyAgICB9CisKKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisgICAgICAgIFBvczQ8U3RyaW5nPiBwNCA9IG5ldyBQb3M0PD4oKTsKKyAgICAgICAgcDQudGVzdCgpOworICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nNy9EaWFtb25kUG9zNS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmc3L0RpYW1vbmRQb3M1LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWY2MDQ1MQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nNy9EaWFtb25kUG9zNS5qYXZhCkBAIC0wLDAgKzEsMTIgQEAKK3B1YmxpYyBjbGFzcyBQb3MwNSB7CisKKyAgICBzdGF0aWMgY2xhc3MgRm9vPFg+IHsKKyAgICAgICAgRm9vKFggeCkge30KKyAgICB9CisKKyAgICB2b2lkIG0oRm9vPEludGVnZXI+IGZpKSB7fQorCisgICAgdm9pZCB0ZXN0KCkgeworICAgICAgICBtKG5ldyBGb288PigxKSk7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmc3L0RpYW1vbmRQb3M2LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZzcvRGlhbW9uZFBvczYuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNWZjNjkyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmc3L0RpYW1vbmRQb3M2LmphdmEKQEAgLTAsMCArMSwyMCBAQAorY2xhc3MgUG9zMDYgeworICAgIHN0YXRpYyBjbGFzcyBGb288WD4geworICAgICAgICBGb28oWCB4KSB7ICB9CisgICAgfQorCisgICAgc3RhdGljIGNsYXNzIERvdWJsZUZvbzxYLFk+IHsKKyAgICAgICAgRG91YmxlRm9vKFggeCxZIHkpIHsgIH0KKyAgICB9CisKKyAgICBzdGF0aWMgY2xhc3MgVHJpcGxlRm9vPFgsWSxaPiB7CisgICAgICAgIFRyaXBsZUZvbyhYIHgsWSB5LFogeikgeyAgfQorICAgIH0KKworICAgIEZvbzw/IGV4dGVuZHMgSW50ZWdlcj4gZmkgPSBuZXcgRm9vPD4oMSk7CisgICAgRm9vPD8+IGZ3ID0gbmV3IEZvbzw+KGZpKTsKKyAgICBGb288PyBleHRlbmRzIERvdWJsZT4gZmQgPSBuZXcgRm9vPD4oMy4wKTsKKyAgICBEb3VibGVGb288Pyw/PiBkdyA9IG5ldyBEb3VibGVGb288PihmaSxmZCk7CisgICAgRm9vPFN0cmluZz4gZnMgPSBuZXcgRm9vPD4oIm9uZSIpOworICAgIFRyaXBsZUZvbzw/LD8sPz4gdHcgPSBuZXcgVHJpcGxlRm9vPD4oZmksZmQsZnMpOworfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmc3L0RpYW1vbmRQb3M3LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZzcvRGlhbW9uZFBvczcuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NTg0NDNlCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmc3L0RpYW1vbmRQb3M3LmphdmEKQEAgLTAsMCArMSwxMiBAQAorY2xhc3MgUG9zMDcgeworICAgIHN0YXRpYyBjbGFzcyBGb288WCBleHRlbmRzIE51bWJlciAmIENvbXBhcmFibGU8TnVtYmVyPj4ge30KKyAgICBzdGF0aWMgY2xhc3MgRG91YmxlRm9vPFggZXh0ZW5kcyBOdW1iZXIgJiBDb21wYXJhYmxlPE51bWJlcj4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICBZIGV4dGVuZHMgTnVtYmVyICYgQ29tcGFyYWJsZTxOdW1iZXI+PiB7fQorICAgIHN0YXRpYyBjbGFzcyBUcmlwbGVGb288WCBleHRlbmRzIE51bWJlciAmIENvbXBhcmFibGU8TnVtYmVyPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFkgZXh0ZW5kcyBOdW1iZXIgJiBDb21wYXJhYmxlPE51bWJlcj4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICBaPiB7fQorCisgICAgRm9vPD8+IGZ3ID0gbmV3IEZvbzw+KCk7CisgICAgRG91YmxlRm9vPD8sPz4gZHcgPSBuZXcgRG91YmxlRm9vPD4oKTsKKyAgICBUcmlwbGVGb288Pyw/LD8+IHR3ID0gbmV3IFRyaXBsZUZvbzw+KCk7Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZzcvRGlhbW9uZFBvczkuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nNy9EaWFtb25kUG9zOS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNkMzA4NjEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZzcvRGlhbW9uZFBvczkuamF2YQpAQCAtMCwwICsxLDEwIEBACitjbGFzcyBQb3M5PFg+IHsKKworICAgIFBvczkoWCB4KSB7fQorCisKKyAgICBQb3M5PFg+IHRlc3QoWCB4KSB7CisgICAgICAgIHJldHVybiBuZXcgUG9zOTw+KHgpOworICAgIH0KK30KKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmc3L0R1cGxpY2F0ZUFubm90YXRpb25zLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZzcvRHVwbGljYXRlQW5ub3RhdGlvbnMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYjU0YWZmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmc3L0R1cGxpY2F0ZUFubm90YXRpb25zLmphdmEKQEAgLTAsMCArMSw0IEBACitjbGFzcyBDeworICAgIEA8ZXJyb3IgZGVzY3I9IkR1cGxpY2F0ZSBhbm5vdGF0aW9uIj5EZXByZWNhdGVkPC9lcnJvcj4gQDxlcnJvciBkZXNjcj0iRHVwbGljYXRlIGFubm90YXRpb24iPkRlcHJlY2F0ZWQ8L2Vycm9yPgorICAgIHZvaWQgZm9vKEA8ZXJyb3IgZGVzY3I9IkR1cGxpY2F0ZSBhbm5vdGF0aW9uIj5EZXByZWNhdGVkPC9lcnJvcj4gQDxlcnJvciBkZXNjcj0iRHVwbGljYXRlIGFubm90YXRpb24iPkRlcHJlY2F0ZWQ8L2Vycm9yPiBpbnQgeCl7fQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmc3L0R5bmFtaWNhbGx5QWRkSWdub3JlZEFubm90YXRpb25zLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZzcvRHluYW1pY2FsbHlBZGRJZ25vcmVkQW5ub3RhdGlvbnMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45N2Q0MDVkCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmc3L0R5bmFtaWNhbGx5QWRkSWdub3JlZEFubm90YXRpb25zLmphdmEKQEAgLTAsMCArMSw5IEBACisKK3B1YmxpYyBjbGFzcyA8d2FybmluZyBkZXNjcj0iQ2xhc3MgJ1dpdGhNYWluJyBpcyBuZXZlciB1c2VkIj5XaXRoTWFpbjwvd2FybmluZz4geworICBATXlBbm5vCisgIHB1YmxpYyB2b2lkIDx3YXJuaW5nIGRlc2NyPSJNZXRob2QgJ215VGVzdE1ldGhvZCgpJyBpcyBuZXZlciB1c2VkIj5teVRlc3RNZXRob2Q8L3dhcm5pbmc+KCl7fQorfQorCitAaW50ZXJmYWNlIE15QW5ubyB7CisKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZzcvRW5jbG9zaW5nSW5zdGFuY2UuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nNy9FbmNsb3NpbmdJbnN0YW5jZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ5MDZmNTQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZzcvRW5jbG9zaW5nSW5zdGFuY2UuamF2YQpAQCAtMCwwICsxLDIyIEBACitjbGFzcyBPdGhlckNsYXNzIHsKKyAgICBwdWJsaWMgY2xhc3MgSW5uZXJDbGFzcyB7fQorfQorCitjbGFzcyBNYWluPEIgZXh0ZW5kcyBPdGhlckNsYXNzLklubmVyQ2xhc3M+IHsgfQorY2xhc3MgTWFpbjEgZXh0ZW5kcyA8ZXJyb3IgZGVzY3I9Ik5vIGVuY2xvc2luZyBpbnN0YW5jZSBvZiB0eXBlICdPdGhlckNsYXNzJyBpcyBpbiBzY29wZSI+T3RoZXJDbGFzcy5Jbm5lckNsYXNzPC9lcnJvcj4geyB9CisKK2NsYXNzIE5vbkRlZmF1bHRDb25zdHJ1Y3RvckNvbnRhaW5lciB7CisgICAgcHVibGljIGNsYXNzIElubmVyIHsKKyAgICAgICAgcHVibGljIElubmVyKFN0cmluZyBzKSB7fQorICAgIH0KK30KKworY2xhc3MgVXNhZ2VXaXRoUGFyZW50aGVzaXMgZXh0ZW5kcyBOb25EZWZhdWx0Q29uc3RydWN0b3JDb250YWluZXIuSW5uZXIgeworICAgIHB1YmxpYyBVc2FnZVdpdGhQYXJlbnRoZXNpcygpIHsKKyAgICAgICAobmV3IE5vbkRlZmF1bHRDb25zdHJ1Y3RvckNvbnRhaW5lcigpKS5zdXBlcigiIik7CisgICAgfQorCisgICAgcHVibGljIFVzYWdlV2l0aFBhcmVudGhlc2lzKE5vbkRlZmF1bHRDb25zdHJ1Y3RvckNvbnRhaW5lciBlKSB7CisgICAgICAgKGUpLnN1cGVyKCIiKTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZzcvRW51bVN5bnRoZXRpY01ldGhvZHMuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nNy9FbnVtU3ludGhldGljTWV0aG9kcy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNjZmU1MzcKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZzcvRW51bVN5bnRoZXRpY01ldGhvZHMuamF2YQpAQCAtMCwwICsxLDI1IEBACisvKgorICogQ29weXJpZ2h0IDIwMDAtMjAxMSBKZXRCcmFpbnMgcy5yLm8uCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworZW51bSBDb2xvciB7CisgIFJFRCwgR1JFRU4sIEJMVUU7CisKKyAgdm9pZCBmb28gKCkgeworICAgIGZvciAoQ29sb3IgYyA6IHZhbHVlcyAoKSkgeworICAgIH0KKworICAgIENvbG9yIHJlZCA9IHZhbHVlT2YoIlJFRCIpOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmc3L0VyYXN1cmVDbGFzaENvbmZ1c2lvbi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmc3L0VyYXN1cmVDbGFzaENvbmZ1c2lvbi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUzNDNiZjgKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZzcvRXJhc3VyZUNsYXNoQ29uZnVzaW9uLmphdmEKQEAgLTAsMCArMSwzOSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDAwLTIwMTEgSmV0QnJhaW5zIHMuci5vLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KK2ltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuTWFwOworCisvLyBJREVBLTY5NjI5CitjbGFzcyBDIHsKKyAgcHVibGljIHN0YXRpYyBpbnRlcmZhY2UgR2VuZXJpY0Fnbm9zdGljUHJvY2Vzc29yIHsKKyAgICB2b2lkIDx3YXJuaW5nIGRlc2NyPSJNZXRob2QgJ3Byb2Nlc3NNYXAoamF2YS51dGlsLk1hcCknIGlzIG5ldmVyIHVzZWQiPnByb2Nlc3NNYXA8L3dhcm5pbmc+KE1hcCBtYXApOworICAgIC8vICAgXl5eIHRvIGNkcjogc2hvdWxkIG5vdCBiZSBtYXJrZWQgYXMgdW51c2VkCisgIH0KKworICBwdWJsaWMgc3RhdGljIGludGVyZmFjZSBHZW5lcmljQXdhcmVQcm9jZXNzb3IgeworICAgIHZvaWQgPHdhcm5pbmcgZGVzY3I9Ik1ldGhvZCAncHJvY2Vzc01hcChqYXZhLnV0aWwuTWFwPGphdmEubGFuZy5TdHJpbmcsamF2YS5sYW5nLlN0cmluZz4pJyBpcyBuZXZlciB1c2VkIj5wcm9jZXNzTWFwPC93YXJuaW5nPihNYXA8U3RyaW5nLCBTdHJpbmc+IG1hcCk7CisgICAgLy8gICBeXl4gdG8gY2RyOiBzaG91bGQgbm90IGJlIG1hcmtlZCBhcyB1bnVzZWQKKyAgfQorCisgIHB1YmxpYyBzdGF0aWMgY2xhc3MgVGVzdFByb2Nlc3NvciBpbXBsZW1lbnRzIEdlbmVyaWNBd2FyZVByb2Nlc3NvciwgR2VuZXJpY0Fnbm9zdGljUHJvY2Vzc29yIHsKKyAgICBAT3ZlcnJpZGUgcHVibGljIHZvaWQgcHJvY2Vzc01hcChNYXAgbWFwKSB7IH0KKyAgfQorCisgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKyAgICBmaW5hbCBUZXN0UHJvY2Vzc29yIHRlc3RQcm9jZXNzb3IgPSBuZXcgVGVzdFByb2Nlc3NvcigpOworICAgIHRlc3RQcm9jZXNzb3IucHJvY2Vzc01hcChuZXcgSGFzaE1hcCgpKTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmc3L0V4dGVuZHNCb3VuZC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmc3L0V4dGVuZHNCb3VuZC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZiNDg2MmIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZzcvRXh0ZW5kc0JvdW5kLmphdmEKQEAgLTAsMCArMSwzMiBAQAorLyoKKyAqIENvcHlyaWdodCAyMDAwLTIwMTEgSmV0QnJhaW5zIHMuci5vLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KK2NsYXNzIEV4dGVuZHNCb3VuZCB7CisgIHN0YXRpYyBjbGFzcyBFbnRpdHk8VCwgUD4geyB9CisgIHN0YXRpYyBjbGFzcyBXcmFwcGVyPEUgZXh0ZW5kcyBFbnRpdHk8VCwgPz4sIFQ+IHsgfQorCisgIHN0YXRpYyA8VCwgRSBleHRlbmRzIEVudGl0eTxULCA/Pj4gV3JhcHBlcjxFLCBUPiBjcmVhdGUxKFQgdCkgeworICAgIHJldHVybiBuZXcgV3JhcHBlcjxFLCBUPigpOworICB9CisKKyAgc3RhdGljIDxFIGV4dGVuZHMgRW50aXR5PFQsID8+LCBUPiBXcmFwcGVyPEUsIFQ+IGNyZWF0ZTIoVCB0KSB7CisgICAgcmV0dXJuIG5ldyBXcmFwcGVyPEUsIFQ+KCk7CisgIH0KKworICBzdGF0aWMgdm9pZCB0ZXN0KE9iamVjdCBvKSB7CisgICAgY3JlYXRlMShvKTsKKyAgICBjcmVhdGUyKG8pOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmc3L0V4dGVuc2lvbk1ldGhvZFN5bnRheC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmc3L0V4dGVuc2lvbk1ldGhvZFN5bnRheC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE1ZTA5MTcKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZzcvRXh0ZW5zaW9uTWV0aG9kU3ludGF4LmphdmEKQEAgLTAsMCArMSw4IEBACitpbnRlcmZhY2UgSSB7CisgIHZvaWQgbTEoKSA8ZXJyb3IgZGVzY3I9IkRlcHJlY2F0ZWQgZXh0ZW5zaW9uIG1ldGhvZCBzeW50YXgiPmRlZmF1bHQ8L2Vycm9yPiB7IH0KKworICBkZWZhdWx0IHZvaWQgbTIoKSA8ZXJyb3IgZGVzY3I9IkRlcHJlY2F0ZWQgZXh0ZW5zaW9uIG1ldGhvZCBzeW50YXgiPmRlZmF1bHQ8L2Vycm9yPiB7IH0KKworICBAU3VwcHJlc3NXYXJuaW5ncygiZXh0ZW5zaW9uU3ludGF4IikKKyAgdm9pZCBtMygpIGRlZmF1bHQgeyB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmc3L0V4dGVuc2lvbk1ldGhvZHMuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nNy9FeHRlbnNpb25NZXRob2RzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTdmY2I5OQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nNy9FeHRlbnNpb25NZXRob2RzLmphdmEKQEAgLTAsMCArMSw2NCBAQAorLyoKKyAqIENvcHlyaWdodCAyMDAwLTIwMTIgSmV0QnJhaW5zIHMuci5vLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworY2xhc3MgQyB7CisgIGludGVyZmFjZSBJIHsKKyAgICBpbnQgaSA9IDQyOworICAgIHZvaWQgbSgpIGRlZmF1bHQgeyB9CisgIH0KKworICBpbnRlcmZhY2UgSUkgZXh0ZW5kcyBJIHsKKyAgICB2b2lkIG0oKSBkZWZhdWx0IHsKKyAgICAgIEkuc3VwZXIubSgpOworICAgICAgPGVycm9yIGRlc2NyPSJVbnF1YWxpZmllZCBzdXBlciByZWZlcmVuY2UgaXMgbm90IGFsbG93ZWQgaW4gZXh0ZW5zaW9uIG1ldGhvZCI+c3VwZXIubTwvZXJyb3I+KCk7CisKKyAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihJLnN1cGVyLmkpOworICAgICAgU3lzdGVtLm91dC5wcmludGxuPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBtZXRob2QgJ3ByaW50bG4oPyknIj4oPGVycm9yIGRlc2NyPSJVbnF1YWxpZmllZCBzdXBlciByZWZlcmVuY2UgaXMgbm90IGFsbG93ZWQgaW4gZXh0ZW5zaW9uIG1ldGhvZCI+c3VwZXIuaTwvZXJyb3I+KTwvZXJyb3I+OworICAgIH0KKworICAgIHZvaWQgbWEoKTsKKyAgfQorCisgIHZvaWQgdGVzdCgpIHsKKyAgICBuZXcgSSgpe30ubSgpOworCisgICAgbmV3IElJKCkgeworICAgICAgcHVibGljIHZvaWQgbWEoKSB7CisgICAgICAgIDxlcnJvciBkZXNjcj0iJ0MuSScgaXMgbm90IGFuIGVuY2xvc2luZyBjbGFzcyI+SS5zdXBlcjwvZXJyb3I+Lm0oKTsKKyAgICAgICAgSUkuc3VwZXIubSgpOworICAgICAgICA8ZXJyb3IgZGVzY3I9IkFic3RyYWN0IG1ldGhvZCAnbWEoKScgY2Fubm90IGJlIGFjY2Vzc2VkIGRpcmVjdGx5Ij5JSS5zdXBlci5tYSgpPC9lcnJvcj47CisgICAgICB9CisgICAgfS5tKCk7CisgIH0KK30KKworY2xhc3MgRCB7CisgIDxlcnJvciBkZXNjcj0iRXh0ZW5zaW9uIG1ldGhvZHMgY2FuIG9ubHkgYmUgdXNlZCB3aXRoaW4gYW4gaW50ZXJmYWNlIj52b2lkIG0oKTwvZXJyb3I+IGRlZmF1bHQgeyB9Cit9CisKK2ludGVyZmFjZSBJbGxlZ2FsTW9kcyB7CisgIDxlcnJvciBkZXNjcj0iSWxsZWdhbCBjb21iaW5hdGlvbiBvZiBtb2RpZmllcnM6ICdzdGF0aWMnIGFuZCAnYWJzdHJhY3QnIj5zdGF0aWM8L2Vycm9yPiB2b2lkIG0xKCk7CisgIDxlcnJvciBkZXNjcj0iSWxsZWdhbCBjb21iaW5hdGlvbiBvZiBtb2RpZmllcnM6ICdzdGF0aWMnIGFuZCAnZGVmYXVsdCciPnN0YXRpYzwvZXJyb3I+IHZvaWQgbTIoKSBkZWZhdWx0IHsgfQorICA8ZXJyb3IgZGVzY3I9IklsbGVnYWwgY29tYmluYXRpb24gb2YgbW9kaWZpZXJzOiAnc3RhdGljJyBhbmQgJ2RlZmF1bHQnIj5zdGF0aWM8L2Vycm9yPiA8ZXJyb3IgZGVzY3I9IklsbGVnYWwgY29tYmluYXRpb24gb2YgbW9kaWZpZXJzOiAnZGVmYXVsdCcgYW5kICdzdGF0aWMnIj5kZWZhdWx0PC9lcnJvcj4gdm9pZCBtMygpIHsgfQorCisgIDxlcnJvciBkZXNjcj0iSWxsZWdhbCBjb21iaW5hdGlvbiBvZiBtb2RpZmllcnM6ICdhYnN0cmFjdCcgYW5kICdkZWZhdWx0JyI+YWJzdHJhY3Q8L2Vycm9yPiB2b2lkIG00KCkgZGVmYXVsdCB7IH0KKyAgPGVycm9yIGRlc2NyPSJJbGxlZ2FsIGNvbWJpbmF0aW9uIG9mIG1vZGlmaWVyczogJ2Fic3RyYWN0JyBhbmQgJ2RlZmF1bHQnIj5hYnN0cmFjdDwvZXJyb3I+IDxlcnJvciBkZXNjcj0iSWxsZWdhbCBjb21iaW5hdGlvbiBvZiBtb2RpZmllcnM6ICdkZWZhdWx0JyBhbmQgJ2Fic3RyYWN0JyI+ZGVmYXVsdDwvZXJyb3I+IHZvaWQgbTUoKSB7IH0KKworICA8ZXJyb3IgZGVzY3I9IkV4dGVuc2lvbiBtZXRob2Qgc2hvdWxkIGhhdmUgYSBib2R5Ij5kZWZhdWx0IHZvaWQgbTYoKTwvZXJyb3I+OworCisgIDxlcnJvciBkZXNjcj0iTW9kaWZpZXIgJ2RlZmF1bHQnIG5vdCBhbGxvd2VkIGhlcmUiPmRlZmF1bHQ8L2Vycm9yPiBpbnQgaTsKKyAgPGVycm9yIGRlc2NyPSJNb2RpZmllciAnZGVmYXVsdCcgbm90IGFsbG93ZWQgaGVyZSI+ZGVmYXVsdDwvZXJyb3I+IGludGVyZmFjZSBYIHsgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nNy9HZW5lcmljc0FycmF5Q3JlYXRpb24uamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nNy9HZW5lcmljc0FycmF5Q3JlYXRpb24uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYWU4MGUwCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmc3L0dlbmVyaWNzQXJyYXlDcmVhdGlvbi5qYXZhCkBAIC0wLDAgKzEsOCBAQAorY2xhc3MgQTxUPiB7CisgICAgY2xhc3MgQnt9Cit9CitjbGFzcyBDPFQ+IGV4dGVuZHMgQTxUPiB7CisgICAgeworICAgICAgICBCW10gbyA9IDxlcnJvciBkZXNjcj0iR2VuZXJpYyBhcnJheSBjcmVhdGlvbiI+e308L2Vycm9yPjsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmc3L0hpZ2hsaWdodEluYWNjZXNzaWJsZUZyb21DbGFzc01vZGlmaWVyTGlzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmc3L0hpZ2hsaWdodEluYWNjZXNzaWJsZUZyb21DbGFzc01vZGlmaWVyTGlzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUwMmRiOGYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZzcvSGlnaGxpZ2h0SW5hY2Nlc3NpYmxlRnJvbUNsYXNzTW9kaWZpZXJMaXN0LmphdmEKQEAgLTAsMCArMSw0IEBACitAU3VwcHJlc3NXYXJuaW5ncyg8ZXJyb3IgZGVzY3I9IidUaGlzQ2xhc3MuRk9PJyBoYXMgcHJpdmF0ZSBhY2Nlc3MgaW4gJ1RoaXNDbGFzcyciPlRoaXNDbGFzcy5GT088L2Vycm9yPikKK3B1YmxpYyBjbGFzcyBUaGlzQ2xhc3MgeworICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgRk9PID0gImZvbyI7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmc3L0lERUE4NDUzMy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmc3L0lERUE4NDUzMy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIzYzI3ZWUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZzcvSURFQTg0NTMzLmphdmEKQEAgLTAsMCArMSwxOSBAQAorcHVibGljIGNsYXNzIE1haW4geworICAgIHN0YXRpYyBjbGFzcyBBIHt9CisgICAgc3RhdGljIGNsYXNzIEIgZXh0ZW5kcyBBIHt9CisgICAgc3RhdGljIGNsYXNzIFg8VD4geyB9CisgICAgc3RhdGljIGNsYXNzIFk8VD4gZXh0ZW5kcyBYPFQ+IHsgfQorCisgICAgcHJpdmF0ZSB2b2lkIHRlc3QxKFg8Qj4geCkgeworICAgICAgICBZPEE+IHkgPSA8ZXJyb3IgZGVzY3I9IkluY29udmVydGlibGUgdHlwZXM7IGNhbm5vdCBjYXN0ICdNYWluLlg8TWFpbi5CPicgdG8gJ01haW4uWTxNYWluLkE+JyI+KFk8QT4pIHg8L2Vycm9yPjsKKyAgICB9CisKKyAgICBwcml2YXRlIHZvaWQgdGVzdDIoWDxBPiB4KSB7CisgICAgICAgIFk8QT4geSA9IChZPEE+KSB4OworICAgIH0KKworICAgIHByaXZhdGUgdm9pZCB0ZXN0MyhZPEI+IHkxKSB7CisgICAgICAgIEBTdXBwcmVzc1dhcm5pbmdzKCJ1bmNoZWNrZWQiKQorICAgICAgICBZPEE+IHkyID0gPGVycm9yIGRlc2NyPSJJbmNvbnZlcnRpYmxlIHR5cGVzOyBjYW5ub3QgY2FzdCAnTWFpbi5ZPE1haW4uQj4nIHRvICdNYWluLlk8TWFpbi5BPiciPihZPEE+KSB5MTwvZXJyb3I+OworICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nNy9JbXByb3ZlZENhdGNoQW5hbHlzaXMuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nNy9JbXByb3ZlZENhdGNoQW5hbHlzaXMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NTkzNTMxCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmc3L0ltcHJvdmVkQ2F0Y2hBbmFseXNpcy5qYXZhCkBAIC0wLDAgKzEsMjQxIEBACisvKgorICogQ29weXJpZ2h0IDIwMDAtMjAxMSBKZXRCcmFpbnMgcy5yLm8uCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworaW1wb3J0IGphdmEuaW8uKjsKKworY2xhc3MgQyB7CisgIHN0YXRpYyBjbGFzcyBFIGV4dGVuZHMgRXhjZXB0aW9uIHsgfQorICBzdGF0aWMgY2xhc3MgUkUgZXh0ZW5kcyBSdW50aW1lRXhjZXB0aW9uIHsgfQorCisgIHZvaWQgZigpIHsgfQorICB2b2lkIGcoKSB0aHJvd3MgRSB7IH0KKyAgdm9pZCBoKCkgdGhyb3dzIFJFIHsgfQorCisgIHZvaWQgbTAoKSB7CisgICAgdHJ5IHsgdGhyb3cgbmV3IEZpbGVOb3RGb3VuZEV4Y2VwdGlvbigpOyB9CisgICAgY2F0Y2ggKEZpbGVOb3RGb3VuZEV4Y2VwdGlvbiBlKSB7IH0KKyAgICA8d2FybmluZyBkZXNjcj0iVW5yZWFjaGFibGUgc2VjdGlvbjogZXhjZXB0aW9uICdqYXZhLmlvLkZpbGVOb3RGb3VuZEV4Y2VwdGlvbicgaGFzIGFscmVhZHkgYmVlbiBjYXVnaHQiPmNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7IH08L3dhcm5pbmc+CisgIH0KKworICB2b2lkIG0xKCkgeworICAgIHRyeSB7IHRocm93IG5ldyBJT0V4Y2VwdGlvbigpOyB9CisgICAgY2F0Y2ggKEZpbGVOb3RGb3VuZEV4Y2VwdGlvbiBlKSB7IH0KKyAgICBjYXRjaCAoSU9FeGNlcHRpb24gZSkgeyB9CisgIH0KKworICB2b2lkIG0yKCkgeworICAgIHRyeSB7IGYoKTsgfQorICAgIGNhdGNoIChFeGNlcHRpb24gZSkgeyB9CisgIH0KKworICB2b2lkIG0zKCkgeworICAgIHRyeSB7IGcoKTsgfQorICAgIGNhdGNoIChFeGNlcHRpb24gZSkgeyB9CisgIH0KKworICB2b2lkIG00KCkgeworICAgIHRyeSB7IGgoKTsgfQorICAgIGNhdGNoIChFeGNlcHRpb24gZSkgeyB9CisgIH0KKworICB2b2lkIG01KCkgeworICAgIHRyeSB7IGYoKTsgfQorICAgIGNhdGNoIChUaHJvd2FibGUgdCkgeyB9CisgIH0KKworICB2b2lkIG02KCkgeworICAgIHRyeSB7IGcoKTsgfQorICAgIGNhdGNoIChUaHJvd2FibGUgdCkgeyB9CisgIH0KKworICB2b2lkIG03KCkgeworICAgIHRyeSB7IGgoKTsgfQorICAgIGNhdGNoIChUaHJvd2FibGUgdCkgeyB9CisgIH0KKworICB2b2lkIG05KCkgeworICAgIHRyeSB7IGYoKTsgfQorICAgIGNhdGNoIChFcnJvciBlKSB7IH0KKyAgICBjYXRjaCAoVGhyb3dhYmxlIHQpIHsgfQorICB9CisKKyAgdm9pZCBtMTAoKSB7CisgICAgdHJ5IHsgZygpOyB9CisgICAgY2F0Y2ggKEVycm9yIGUpIHsgfQorICAgIGNhdGNoIChUaHJvd2FibGUgdCkgeyB9CisgIH0KKworICB2b2lkIG0xMSgpIHsKKyAgICB0cnkgeyBoKCk7IH0KKyAgICBjYXRjaCAoRXJyb3IgZSkgeyB9CisgICAgY2F0Y2ggKFRocm93YWJsZSB0KSB7IH0KKyAgfQorCisgIHZvaWQgbTEyKCkgeworICAgIHRyeSB7IGYoKTsgfQorICAgIGNhdGNoIChSdW50aW1lRXhjZXB0aW9uIGUpIHsgfQorICAgIGNhdGNoIChUaHJvd2FibGUgdCkgeyB9CisgIH0KKworICB2b2lkIG0xMygpIHsKKyAgICB0cnkgeyBnKCk7IH0KKyAgICBjYXRjaCAoUnVudGltZUV4Y2VwdGlvbiBlKSB7IH0KKyAgICBjYXRjaCAoVGhyb3dhYmxlIHQpIHsgfQorICB9CisKKyAgdm9pZCBtMTQoKSB7CisgICAgdHJ5IHsgaCgpOyB9CisgICAgY2F0Y2ggKFJ1bnRpbWVFeGNlcHRpb24gZSkgeyB9CisgICAgY2F0Y2ggKFRocm93YWJsZSB0KSB7IH0KKyAgfQorCisgIHZvaWQgbTE1KCkgeworICAgIHRyeSB7IGYoKTsgfQorICAgIGNhdGNoIChSdW50aW1lRXhjZXB0aW9uIGUpIHsgfQorICAgIGNhdGNoIChFeGNlcHRpb24gZSkgeyB9CisgIH0KKworICB2b2lkIG0xNigpIHsKKyAgICB0cnkgeyBnKCk7IH0KKyAgICBjYXRjaCAoUnVudGltZUV4Y2VwdGlvbiBlKSB7IH0KKyAgICBjYXRjaCAoRXhjZXB0aW9uIGUpIHsgfQorICB9CisKKyAgdm9pZCBtMTcoKSB7CisgICAgdHJ5IHsgaCgpOyB9CisgICAgY2F0Y2ggKFJ1bnRpbWVFeGNlcHRpb24gZSkgeyB9CisgICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7IH0KKyAgfQorCisgIHZvaWQgbTE4KCkgeworICAgIHRyeSB7IGYoKTsgfQorICAgIGNhdGNoIChSdW50aW1lRXhjZXB0aW9uIGUpIHsgfQorICAgIGNhdGNoICg8ZXJyb3IgZGVzY3I9IkV4Y2VwdGlvbiAnQy5FJyBpcyBuZXZlciB0aHJvd24gaW4gdGhlIGNvcnJlc3BvbmRpbmcgdHJ5IGJsb2NrIj5FIGU8L2Vycm9yPikgeyB9CisgICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7IH0KKyAgfQorCisgIHZvaWQgbTE5KCkgeworICAgIHRyeSB7IGcoKTsgfQorICAgIGNhdGNoIChSdW50aW1lRXhjZXB0aW9uIGUpIHsgfQorICAgIGNhdGNoIChFIGUpIHsgfQorICAgIGNhdGNoIChFeGNlcHRpb24gZSkgeyB9CisgIH0KKworICB2b2lkIG0yMCgpIHsKKyAgICB0cnkgeyBoKCk7IH0KKyAgICBjYXRjaCAoUnVudGltZUV4Y2VwdGlvbiBlKSB7IH0KKyAgICBjYXRjaCAoPGVycm9yIGRlc2NyPSJFeGNlcHRpb24gJ0MuRScgaXMgbmV2ZXIgdGhyb3duIGluIHRoZSBjb3JyZXNwb25kaW5nIHRyeSBibG9jayI+RSBlPC9lcnJvcj4pIHsgfQorICAgIGNhdGNoIChFeGNlcHRpb24gZSkgeyB9CisgIH0KKworICB2b2lkIG0yMSgpIHsKKyAgICB0cnkgeyBmKCk7IH0KKyAgICBjYXRjaCAoUnVudGltZUV4Y2VwdGlvbiBlKSB7IH0KKyAgICBjYXRjaCAoRXhjZXB0aW9uIGUpIHsgfQorICB9CisKKyAgdm9pZCBtMjIoKSB7CisgICAgdHJ5IHsgZygpOyB9CisgICAgY2F0Y2ggKFJ1bnRpbWVFeGNlcHRpb24gZSkgeyB9CisgICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7IH0KKyAgfQorCisgIHZvaWQgbTIzKCkgeworICAgIHRyeSB7IGgoKTsgfQorICAgIGNhdGNoIChSdW50aW1lRXhjZXB0aW9uIGUpIHsgfQorICAgIGNhdGNoIChFeGNlcHRpb24gZSkgeyB9CisgIH0KKworICB2b2lkIG0yNCgpIHsKKyAgICB0cnkgeyBmKCk7IH0KKyAgICBjYXRjaCAoUnVudGltZUV4Y2VwdGlvbiBlKSB7IH0KKyAgICBjYXRjaCAoRXJyb3IgZSkgeyB9CisgICAgY2F0Y2ggKFRocm93YWJsZSB0KSB7IH0KKyAgfQorCisgIHZvaWQgbTI1KCkgeworICAgIHRyeSB7IGcoKTsgfQorICAgIGNhdGNoIChSdW50aW1lRXhjZXB0aW9uIGUpIHsgfQorICAgIGNhdGNoIChFcnJvciBlKSB7IH0KKyAgICBjYXRjaCAoVGhyb3dhYmxlIHQpIHsgfQorICB9CisKKyAgdm9pZCBtMjYoKSB7CisgICAgdHJ5IHsgaCgpOyB9CisgICAgY2F0Y2ggKFJ1bnRpbWVFeGNlcHRpb24gZSkgeyB9CisgICAgY2F0Y2ggKEVycm9yIGUpIHsgfQorICAgIGNhdGNoIChUaHJvd2FibGUgdCkgeyB9CisgIH0KKworICB2b2lkIG0yNygpIHsKKyAgICB0cnkgeyBmKCk7IH0KKyAgICBjYXRjaCAoUnVudGltZUV4Y2VwdGlvbiBlKSB7IH0KKyAgICBjYXRjaCAoRXJyb3IgZSkgeyB9CisgICAgY2F0Y2ggKDxlcnJvciBkZXNjcj0iRXhjZXB0aW9uICdDLkUnIGlzIG5ldmVyIHRocm93biBpbiB0aGUgY29ycmVzcG9uZGluZyB0cnkgYmxvY2siPkUgZTwvZXJyb3I+KSB7IH0KKyAgICBjYXRjaCAoVGhyb3dhYmxlIHQpIHsgfQorICB9CisKKyAgdm9pZCBtMjgoKSB7CisgICAgdHJ5IHsgZygpOyB9CisgICAgY2F0Y2ggKFJ1bnRpbWVFeGNlcHRpb24gZSkgeyB9CisgICAgY2F0Y2ggKEVycm9yIGUpIHsgfQorICAgIGNhdGNoIChFIGUpIHsgfQorICAgIGNhdGNoIChUaHJvd2FibGUgdCkgeyB9CisgIH0KKworICB2b2lkIG0yOSgpIHsKKyAgICB0cnkgeyBoKCk7IH0KKyAgICBjYXRjaCAoUnVudGltZUV4Y2VwdGlvbiBlKSB7IH0KKyAgICBjYXRjaCAoRXJyb3IgZSkgeyB9CisgICAgY2F0Y2ggKDxlcnJvciBkZXNjcj0iRXhjZXB0aW9uICdDLkUnIGlzIG5ldmVyIHRocm93biBpbiB0aGUgY29ycmVzcG9uZGluZyB0cnkgYmxvY2siPkUgZTwvZXJyb3I+KSB7IH0KKyAgICBjYXRjaCAoVGhyb3dhYmxlIHQpIHsgfQorICB9CisKKyAgdm9pZCBtMzAoKSB7CisgICAgdHJ5IHsgZigpOyB9CisgICAgY2F0Y2ggKFJ1bnRpbWVFeGNlcHRpb24gZSkgeyB9CisgICAgY2F0Y2ggKEVycm9yIGUpIHsgfQorICAgIGNhdGNoIChUaHJvd2FibGUgdCkgeyB9CisgIH0KKworICB2b2lkIG0zMSgpIHsKKyAgICB0cnkgeyBnKCk7IH0KKyAgICBjYXRjaCAoUnVudGltZUV4Y2VwdGlvbiBlKSB7IH0KKyAgICBjYXRjaCAoRXJyb3IgZSkgeyB9CisgICAgY2F0Y2ggKFRocm93YWJsZSB0KSB7IH0KKyAgfQorCisgIHZvaWQgbTMyKCkgeworICAgIHRyeSB7IGgoKTsgfQorICAgIGNhdGNoIChSdW50aW1lRXhjZXB0aW9uIGUpIHsgfQorICAgIGNhdGNoIChFcnJvciBlKSB7IH0KKyAgICBjYXRjaCAoVGhyb3dhYmxlIHQpIHsgfQorICB9CisKKyAgdm9pZCBtMzMoKSB7CisgICAgdHJ5IHsgZygpOyB9CisgICAgY2F0Y2ggKEUgZSkgeyB9CisgIH0KKworICB2b2lkIG0zNCgpIHsKKyAgICB0cnkgeyBoKCk7IH0KKyAgICBjYXRjaCAoPGVycm9yIGRlc2NyPSJFeGNlcHRpb24gJ0MuRScgaXMgbmV2ZXIgdGhyb3duIGluIHRoZSBjb3JyZXNwb25kaW5nIHRyeSBibG9jayI+RSBlPC9lcnJvcj4pIHsgfQorICB9CisKKyAgdm9pZCBtMzUoKSB7CisgICAgdHJ5IHsgZigpOyB9CisgICAgY2F0Y2ggKDxlcnJvciBkZXNjcj0iRXhjZXB0aW9uICdDLkUnIGlzIG5ldmVyIHRocm93biBpbiB0aGUgY29ycmVzcG9uZGluZyB0cnkgYmxvY2siPkUgZTwvZXJyb3I+KSB7IH0KKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nNy9Jbm5lckluVHlwZUFyZ3VtZW50cy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmc3L0lubmVySW5UeXBlQXJndW1lbnRzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTk0ZmVlMgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nNy9Jbm5lckluVHlwZUFyZ3VtZW50cy5qYXZhCkBAIC0wLDAgKzEsMyBAQAorY2xhc3MgQTxUIGV4dGVuZHMgPGVycm9yIGRlc2NyPSInQS5CJyBoYXMgcHJpdmF0ZSBhY2Nlc3MgaW4gJ0EnIj5BPFQ+LkI8L2Vycm9yPj4geworICAgIHByaXZhdGUgY2xhc3MgQiB7fQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmc3L0phdmE3Q2FzdENvbnZlbnRpb25zLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZzcvSmF2YTdDYXN0Q29udmVudGlvbnMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNzAzNzE1Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmc3L0phdmE3Q2FzdENvbnZlbnRpb25zLmphdmEKQEAgLTAsMCArMSw3IEBACitjbGFzcyBUZXN0IHsKKyAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworICAgIE9iamVjdCBvID0gbnVsbDsKKyAgICBpZiAobyA9PSAxKSB7fQorICAgIGlmICgxID09IG8pIHt9CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZzcvSmF2YWNRdWlya3MuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nNy9KYXZhY1F1aXJrcy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU5NTUyOWMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZzcvSmF2YWNRdWlya3MuamF2YQpAQCAtMCwwICsxLDM4IEBACisvKgorICogQ29weXJpZ2h0IDIwMDAtMjAxMSBKZXRCcmFpbnMgcy5yLm8uCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworaW1wb3J0IGphdmEubGFuZy5PYmplY3Q7CisKK2NsYXNzIEMgeworICBAaW50ZXJmYWNlIFRlc3RBbm5vdGF0aW9uIHsKKyAgICBpbnRbXSB2YWx1ZSgpOworICB9CisKKyAgQFRlc3RBbm5vdGF0aW9uKHswLCAxPHdhcm5pbmcgZGVzY3I9IlRyYWlsaW5nIGNvbW1hIGluIGFubm90YXRpb24gYXJyYXkgaW5pdGlhbGl6ZXIgbWF5IGNhdXNlIGNvbXBpbGF0aW9uIGVycm9yIGluIHNvbWUgSmF2YWMgdmVyc2lvbnMgKGUuZy4gSkRLIDUgYW5kIEpESyA2KS4iPiw8L3dhcm5pbmc+fSkKKyAgdm9pZCBtKCkgeyB9CisKKyAgY2xhc3MgQTxUPiB7CisgICAgY2xhc3MgQjxWPiB7CisgICAgICB2b2lkIG0oVCB0LCBWIHYpIHsgU3lzdGVtLm91dC5wcmludGxuKHQgKyAiLCAiICsgdik7IH0KKyAgICB9CisgIH0KKworICB2b2lkIG0oT2JqZWN0IG8pIHsKKyAgICBpZiAobyBpbnN0YW5jZW9mIEE8Pz4uQjw/PikgeworICAgICAgZmluYWwgQTw/Pi5CPD8+IGIgPSAoQTx3YXJuaW5nIGRlc2NyPSJHZW5lcmljcyBpbiBxdWFsaWZpZXIgcmVmZXJlbmNlIG1heSBjYXVzZSBjb21waWxhdGlvbiBlcnJvciBpbiBzb21lIEphdmFjIHZlcnNpb25zIChlLmcuIEpESyA1IGFuZCBKREsgNikuIj48Pz48L3dhcm5pbmc+LkI8Pz4pbzsKKyAgICAgIGIubShudWxsLCBudWxsKTsKKyAgICB9CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZzcvTGFtYmRhRXhwcmVzc2lvbnMuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nNy9MYW1iZGFFeHByZXNzaW9ucy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJhYjk0ZTEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZzcvTGFtYmRhRXhwcmVzc2lvbnMuamF2YQpAQCAtMCwwICsxLDM5IEBACisvKgorICogQ29weXJpZ2h0IDIwMDAtMjAxMiBKZXRCcmFpbnMgcy5yLm8uCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCitpbXBvcnQgamF2YS51dGlsLio7CisKK2NsYXNzIEMgeworICBpbnRlcmZhY2UgU2ltcGxlc3QgeworICAgIHZvaWQgbSgpOworICB9CisgIHZvaWQgdXNlKFNpbXBsZXN0IHMpIHsgfQorCisgIGludGVyZmFjZSBJbnRQYXJzZXIgeworICAgIGludCBwYXJzZShTdHJpbmcgcyk7CisgIH0KKworICB2b2lkIHRlc3QoKSB7CisgICAgU2ltcGxlc3Qgc2ltcGxlc3QgPSAoKSAtPiB7IH07CisgICAgdXNlKCgpIC0+IHsgfSk7CisKKyAgICBJbnRQYXJzZXIgaW50UGFyc2VyID0gKFN0cmluZyBzKSAtPiBJbnRlZ2VyLnBhcnNlSW50KHMpOworICB9CisKKyAgUnVubmFibGUgZm9vKCkgeworICAgIHJldHVybiAoKSAtPiB7IFN5c3RlbS5vdXQucHJpbnRsbigiZm9vIik7IH07CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZzcvTWV0aG9kUmVmZXJlbmNlcy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmc3L01ldGhvZFJlZmVyZW5jZXMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjliZmJkCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmc3L01ldGhvZFJlZmVyZW5jZXMuamF2YQpAQCAtMCwwICsxLDI4IEBACisvKgorICogQ29weXJpZ2h0IDIwMDAtMjAxMiBKZXRCcmFpbnMgcy5yLm8uCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCitjbGFzcyBDIHsKKyAgaW50ZXJmYWNlIFNpbXBsZXN0IHsKKyAgICB2b2lkIG0oKTsKKyAgfQorICB2b2lkIHNpbXBsZXN0KCkgeyB9CisgIHZvaWQgdXNlKFNpbXBsZXN0IHMpIHsgfQorCisgIHZvaWQgdGVzdCgpIHsKKyAgICBTaW1wbGVzdCBzaW1wbGVzdCA9IHRoaXM6OnNpbXBsZXN0OworICAgIHVzZSh0aGlzOjpzaW1wbGVzdCk7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZzcvTXVsdGlDYXRjaC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmc3L011bHRpQ2F0Y2guamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NGU5NDQ4Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmc3L011bHRpQ2F0Y2guamF2YQpAQCAtMCwwICsxLDg4IEBACisvKgorICogQ29weXJpZ2h0IDIwMDAtMjAxMiBKZXRCcmFpbnMgcy5yLm8uCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworYWJzdHJhY3QgY2xhc3MgQyB7CisgIHByaXZhdGUgc3RhdGljIGNsYXNzIE5FIHsgfQorICBwcml2YXRlIHN0YXRpYyBjbGFzcyBFIGV4dGVuZHMgRXhjZXB0aW9uIHsgcHVibGljIFN0cmluZyBzOyB9CisgIHByaXZhdGUgc3RhdGljIGNsYXNzIEUxIGV4dGVuZHMgRSB7IH0KKyAgcHJpdmF0ZSBzdGF0aWMgY2xhc3MgRTIgZXh0ZW5kcyBFIHsgfQorICBwcml2YXRlIHN0YXRpYyBjbGFzcyBFMyBleHRlbmRzIEUgeyB9CisgIHByaXZhdGUgc3RhdGljIGNsYXNzIEU0IGV4dGVuZHMgRSB7IH0KKyAgcHJpdmF0ZSBzdGF0aWMgY2xhc3MgUkUgZXh0ZW5kcyBSdW50aW1lRXhjZXB0aW9uIHsgfQorICBwcml2YXRlIGludGVyZmFjZSBJPFQ+IHsgdm9pZCBpKCk7IH0KKyAgcHJpdmF0ZSBzdGF0aWMgY2xhc3MgSUUxIGV4dGVuZHMgRSBpbXBsZW1lbnRzIEk8SW50ZWdlcj4geyBwdWJsaWMgdm9pZCBpKCkgeyB9IH0KKyAgcHJpdmF0ZSBzdGF0aWMgY2xhc3MgSUUyIGV4dGVuZHMgRSBpbXBsZW1lbnRzIEk8TG9uZz4geyBwdWJsaWMgdm9pZCBpKCkgeyB9IH0KKyAgcHJpdmF0ZSBzdGF0aWMgY2xhc3MgRjxYPiB7IEYoWCB4KSB7IH0gfQorCisgIGFic3RyYWN0IHZvaWQgZigpIHRocm93cyBFMSwgRTI7CisgIGFic3RyYWN0IHZvaWQgZygpIHRocm93cyBJRTEsIElFMjsKKworICA8VCBleHRlbmRzIFRocm93YWJsZT4gdm9pZCBtKCkgeworICAgIHRyeSB7IGYoKTsgfSBjYXRjaCAoRTEgfCBFMiBlKSB7IH0KKyAgICB0cnkgeyBmKCk7IH0gY2F0Y2ggKEUyIHwgRTEgZSkgeyBlLnByaW50U3RhY2tUcmFjZSgpOyBTeXN0ZW0ub3V0LnByaW50bG4oZS5zKTsgfQorICAgIHRyeSB7IGYoKTsgfSBjYXRjaCAoRTIgfCBFMSBlKSB7IH0gY2F0Y2ggKEUgZSkgeyB9IGNhdGNoIChSRSBlKSB7IH0KKyAgICB0cnkgeyBnKCk7IH0gY2F0Y2ggKElFMSB8IElFMiBlKSB7IEUgZWUgPSBlOyBJIGlpID0gZTsgZS5pKCk7IH0KKyAgICB0cnkgeyBnKCk7IH0gY2F0Y2ggKElFMSB8IElFMiBlKSB7IEY8Pz4gZiA9IG5ldyBGPD4oZSk7IH0KKyAgICB0cnkgeyBnKCk7IH0gY2F0Y2ggKElFMSB8IElFMiBlKSB7IG5ldyBGPEk8PyBleHRlbmRzIE51bWJlcj4+KGUpOyB9CisKKyAgICB0cnkgeyB9IGNhdGNoICg8ZXJyb3IgZGVzY3I9IkluY29tcGF0aWJsZSB0eXBlcy4gRm91bmQ6ICdDLlJFIHwgQy5ORScsIHJlcXVpcmVkOiAnamF2YS5sYW5nLlRocm93YWJsZSciPlJFIHwgTkUgZTwvZXJyb3I+KSB7IH0KKyAgICB0cnkgeyB9IGNhdGNoICg8ZXJyb3IgZGVzY3I9IkluY29tcGF0aWJsZSB0eXBlcy4gRm91bmQ6ICdDLlJFIHwgQy5ORVtdJywgcmVxdWlyZWQ6ICdqYXZhLmxhbmcuVGhyb3dhYmxlJyI+UkUgfCBORSBlW108L2Vycm9yPikgeyB9CisgICAgdHJ5IHsgZigpOyB9IGNhdGNoICg8ZXJyb3IgZGVzY3I9IkluY29tcGF0aWJsZSB0eXBlcy4gRm91bmQ6ICdDLkUgfCBUW10nLCByZXF1aXJlZDogJ2phdmEubGFuZy5UaHJvd2FibGUnIj5FIHwgVCBlW108L2Vycm9yPikgeyB9IGNhdGNoKEUgZSkgeyB9CisgICAgdHJ5IHsgZigpOyB9IGNhdGNoIChFIHwgPGVycm9yIGRlc2NyPSJDYW5ub3QgY2F0Y2ggdHlwZSBwYXJhbWV0ZXJzIj5UPC9lcnJvcj4gZSkgeyB9CisKKyAgICB0cnkgeyBmKCk7IH0gY2F0Y2ggKDxlcnJvciBkZXNjcj0iVHlwZXMgaW4gbXVsdGktY2F0Y2ggbXVzdCBiZSBkaXNqb2ludDogJ0MuRTEnIGlzIGEgc3ViY2xhc3Mgb2YgJ0MuRSciPkUxPC9lcnJvcj4gfCBFIGlnbm9yZSkgeyB9CisgICAgdHJ5IHsgZigpOyB9IGNhdGNoIChFIHwgPGVycm9yIGRlc2NyPSJUeXBlcyBpbiBtdWx0aS1jYXRjaCBtdXN0IGJlIGRpc2pvaW50OiAnQy5FMScgaXMgYSBzdWJjbGFzcyBvZiAnQy5FJyI+RTE8L2Vycm9yPiBpZ25vcmUpIHsgfQorICAgIHRyeSB7IGYoKTsgfSBjYXRjaCAoPGVycm9yIGRlc2NyPSJUeXBlcyBpbiBtdWx0aS1jYXRjaCBtdXN0IGJlIGRpc2pvaW50OiAnQy5FJyBpcyBhIHN1YmNsYXNzIG9mICdDLkUnIj5FPC9lcnJvcj4gfCBFIGlnbm9yZSkgeyB9CisKKyAgICB0cnkgeyBmKCk7IH0gY2F0Y2ggKEUxIHwgRTIgfCA8ZXJyb3IgZGVzY3I9IkV4Y2VwdGlvbiAnQy5FMycgaXMgbmV2ZXIgdGhyb3duIGluIHRoZSBjb3JyZXNwb25kaW5nIHRyeSBibG9jayI+RTM8L2Vycm9yPiBlKSB7IH0KKyAgICB0cnkgeyBmKCk7IH0gY2F0Y2ggKDxlcnJvciBkZXNjcj0iRXhjZXB0aW9uICdDLkUzJyBpcyBuZXZlciB0aHJvd24gaW4gdGhlIGNvcnJlc3BvbmRpbmcgdHJ5IGJsb2NrIj5FMzwvZXJyb3I+IHwgPGVycm9yIGRlc2NyPSJFeGNlcHRpb24gJ0MuRTQnIGlzIG5ldmVyIHRocm93biBpbiB0aGUgY29ycmVzcG9uZGluZyB0cnkgYmxvY2siPkU0PC9lcnJvcj4gfCBSRSBlKSB7IH0gY2F0Y2ggKEUgZSkgeyB9CisgICAgdHJ5IHsgPGVycm9yIGRlc2NyPSJVbmhhbmRsZWQgZXhjZXB0aW9uczogQy5FMSwgQy5FMiI+ZigpOzwvZXJyb3I+IH0gY2F0Y2ggKEUzIHwgRTQgfCBSRSBlKSB7IH0KKworICAgIHRyeSB7IGYoKTsgfSBjYXRjaCAoRSBlKSB7IH0gY2F0Y2ggKDxlcnJvciBkZXNjcj0iRXhjZXB0aW9uICdDLkUxJyBoYXMgYWxyZWFkeSBiZWVuIGNhdWdodCI+RTE8L2Vycm9yPiB8IDxlcnJvciBkZXNjcj0iRXhjZXB0aW9uICdDLkUzJyBoYXMgYWxyZWFkeSBiZWVuIGNhdWdodCI+RTM8L2Vycm9yPiBlKSB7IH0KKyAgICB0cnkgeyBmKCk7IH0gY2F0Y2ggKEUxIHwgRTIgZSkgeyB9IGNhdGNoICg8ZXJyb3IgZGVzY3I9IkV4Y2VwdGlvbiAnQy5FMicgaGFzIGFscmVhZHkgYmVlbiBjYXVnaHQiPkUyPC9lcnJvcj4gZSkgeyB9CisKKyAgICB0cnkgeyBmKCk7IH0gY2F0Y2ggKEUxIHwgRTIgZSkgeyA8ZXJyb3IgZGVzY3I9IkluY29tcGF0aWJsZSB0eXBlcy4gRm91bmQ6ICdDLkUxIHwgQy5FMicsIHJlcXVpcmVkOiAnQy5FMiciPkUyIGVlID0gZTs8L2Vycm9yPiB9CisgICAgdHJ5IHsgZigpOyB9IGNhdGNoIChFMSB8IEUyIGUpIHsgPGVycm9yIGRlc2NyPSJDYW5ub3QgYXNzaWduIGEgdmFsdWUgdG8gZmluYWwgdmFyaWFibGUgJ2UnIj5lID0gbmV3IEUxKCk8L2Vycm9yPjsgfQorICAgIHRyeSB7IGYoKTsgfSBjYXRjaCAoRTEgfCBFMiBlKSB7IDxlcnJvciBkZXNjcj0iSW5jb21wYXRpYmxlIHR5cGVzLiBGb3VuZDogJ0MuRScsIHJlcXVpcmVkOiAnQy5FMSB8IEMuRTInIj5lID0gbmV3IEUoKTwvZXJyb3I+OyB9CisKKyAgICB0cnkgeyBnKCk7IH0KKyAgICBjYXRjaCAoSUUxIHwgSUUyIGUpIHsKKyAgICAgIENsYXNzPD8gZXh0ZW5kcyBFPiBjbGF6ejEgPSBlLmdldENsYXNzKCk7CisgICAgICA8ZXJyb3IgZGVzY3I9IkluY29tcGF0aWJsZSB0eXBlcy4gRm91bmQ6ICdqYXZhLmxhbmcuQ2xhc3M8PyBleHRlbmRzIEMuRT4nLCByZXF1aXJlZDogJ2phdmEubGFuZy5DbGFzczw/IGV4dGVuZHMgQy5JRTE+JyI+Q2xhc3M8PyBleHRlbmRzIElFMT4gY2xhenoyID0gZS5nZXRDbGFzcygpOzwvZXJyb3I+CisgICAgICA8ZXJyb3IgZGVzY3I9IkluY29tcGF0aWJsZSB0eXBlcy4gRm91bmQ6ICdqYXZhLmxhbmcuQ2xhc3M8PyBleHRlbmRzIEMuRT4nLCByZXF1aXJlZDogJ2phdmEubGFuZy5DbGFzczw/IGV4dGVuZHMgQy5JPiciPkNsYXNzPD8gZXh0ZW5kcyBJPiBjbGF6ejMgPSBlLmdldENsYXNzKCk7PC9lcnJvcj4KKyAgICB9CisKKyAgICB0cnkgeyBmKCk7IH0KKyAgICBjYXRjaCAoPGVycm9yIGRlc2NyPSJJbmNvbXBhdGlibGUgdHlwZXMuIEZvdW5kOiAnaW50IHwgQy5FJywgcmVxdWlyZWQ6ICdqYXZhLmxhbmcuVGhyb3dhYmxlJyI+aW50IHwgRSBlPC9lcnJvcj4pIHsgfQorICB9Cit9CisKK2NsYXNzIEQgeworICBzdGF0aWMgY2xhc3MgRSBleHRlbmRzIEV4Y2VwdGlvbiB7IH0KKyAgc3RhdGljIGludGVyZmFjZSBJIHsgdm9pZCBpKCk7IH0KKyAgc3RhdGljIGNsYXNzIEUxIGV4dGVuZHMgRSBpbXBsZW1lbnRzIEkgeyBwdWJsaWMgdm9pZCBpKCkgeyB9IH0KKyAgc3RhdGljIGNsYXNzIEUyIGV4dGVuZHMgRSBpbXBsZW1lbnRzIEkgeyBwdWJsaWMgdm9pZCBpKCkgeyB9IH0KKworICB2b2lkIG0oYm9vbGVhbiBmKSB7CisgICAgdHJ5IHsKKyAgICAgIGlmIChmKQorICAgICAgICB0aHJvdyBuZXcgRTEoKTsKKyAgICAgIGVsc2UKKyAgICAgICAgdGhyb3cgbmV3IEUyKCk7CisgICAgfSBjYXRjaCAoRTF8RTIgZSkgeworICAgICAgU3lzdGVtLm91dC5wcmludGxuKGUpOworICAgIH0KKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nNy9OdW1lcmljTGl0ZXJhbHMuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nNy9OdW1lcmljTGl0ZXJhbHMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZjlmOTZmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmc3L051bWVyaWNMaXRlcmFscy5qYXZhCkBAIC0wLDAgKzEsNDUgQEAKK3B1YmxpYyBjbGFzcyBOdW1lcmljTGl0ZXJhbHMgeworICB2b2lkIGYoKSB7CisgICAgaW50IGkxID0gMV8yOworICAgIGludCBpMiA9IDAxMl9fMzQ7CisgICAgaW50IGkzID0gMHgxXzJfM180OworICAgIGludCBpNCA9IDBCMDsKKyAgICBpbnQgaTUgPSAwYjAwMDFfMDAxMF8wMTAwXzEwMDA7CisgICAgaW50IGk2ID0gPGVycm9yIGRlc2NyPSJCaW5hcnkgbnVtYmVycyBtdXN0IGNvbnRhaW4gYXQgbGVhc3Qgb25lIGJpbmFyeSBkaWdpdCI+MGI8L2Vycm9yPjsKKyAgICBpbnQgaTcgPSA8ZXJyb3IgZGVzY3I9IkludGVnZXIgbnVtYmVyIHRvbyBsYXJnZSI+MGIxXzExMTFfMTExMV8xMTExXzExMTFfMTExMV8xMTExXzExMTFfMTExMTwvZXJyb3I+OworCisgICAgbG9uZyBsMSA9IDFfMkw7CisgICAgbG9uZyBsMiA9IDAxMl9fMzRsOworICAgIGxvbmcgbDMgPSAweDFfMl8zXzRMOworICAgIGxvbmcgbDQgPSAwQjBMOworICAgIGxvbmcgbDUgPSAwYjAwMDFfMDAxMF8wMTAwXzEwMDBsOworICAgIGxvbmcgbDYgPSA8ZXJyb3IgZGVzY3I9IkJpbmFyeSBudW1iZXJzIG11c3QgY29udGFpbiBhdCBsZWFzdCBvbmUgYmluYXJ5IGRpZ2l0Ij4wQmw8L2Vycm9yPjsKKyAgICBsb25nIGw3ID0gPGVycm9yIGRlc2NyPSJMb25nIG51bWJlciB0b28gbGFyZ2UiPjBCMV8xMTExXzExMTFfMTExMV8xMTExXzExMTFfMTExMV8xMTExXzExMTFfMTExMV8xMTExXzExMTFfMTExMV8xMTExXzExMTFfMTExMV8xMTExTDwvZXJyb3I+OworCisgICAgZmxvYXQgZjEgPSAxXzBmOworICAgIGZsb2F0IGYyID0gMWUxXzJmOworICAgIGZsb2F0IGYzID0gMl8yLmY7CisgICAgZmxvYXQgZjQgPSAuM18zZjsKKyAgICBmbG9hdCBmNSA9IDMuMTRfMTZmOworICAgIGZsb2F0IGY2ID0gNi4wMjJfX18xMzdlKzJfM2Y7CisgICAgZmxvYXQgZjcgPSAweGFfYXAxXzBmOworICAgIGZsb2F0IGY4ID0gMHhhX2IucDIyRjsKKyAgICBmbG9hdCBmOSA9IDB4LmFiX19jUDBmOworICAgIGZsb2F0IGYxMCA9IDB4YV9iYy5kX2VmUDBGOworICAgIGZsb2F0IGYxMT0gPGVycm9yIGRlc2NyPSJGbG9hdGluZyBwb2ludCBudW1iZXIgdG9vIHNtYWxsIj4xZS00X182ZjwvZXJyb3I+OworICAgIGZsb2F0IGYxMiA9IDxlcnJvciBkZXNjcj0iRmxvYXRpbmcgcG9pbnQgbnVtYmVyIHRvbyBsYXJnZSI+MWUzXzlmPC9lcnJvcj47CisKKyAgICBkb3VibGUgZDEgPSAwXzBkOworICAgIGRvdWJsZSBkMiA9IDFlMV8xOworICAgIGRvdWJsZSBkMyA9IDJfMi47CisgICAgZG91YmxlIGQ0ID0gLjNfMzsKKyAgICBkb3VibGUgZDUgPSAzLjE0MV81OTI7CisgICAgZG91YmxlIGQ2ID0gMWUtOV85ZDsKKyAgICBkb3VibGUgZDcgPSAxZTFfXzNfNzsKKyAgICBkb3VibGUgZDggPSAweGFfYXAxOworICAgIGRvdWJsZSBkOSA9IDB4YV9iLlAxXzI7CisgICAgZG91YmxlIGQxMCA9IDB4LmFfYmNQMV9fXzIzZDsKKyAgICBkb3VibGUgZDExID0gPGVycm9yIGRlc2NyPSJGbG9hdGluZyBwb2ludCBudW1iZXIgdG9vIHNtYWxsIj4xZS0zXzJfNDwvZXJyb3I+OworICAgIGRvdWJsZSBkMTIgPSA8ZXJyb3IgZGVzY3I9IkZsb2F0aW5nIHBvaW50IG51bWJlciB0b28gbGFyZ2UiPjB4YV9iYy5kZV9mUDFfMjM0RDwvZXJyb3I+OworICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZzcvUG9seW1vcnBoaWNUeXBlQ2FzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmc3L1BvbHltb3JwaGljVHlwZUNhc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YmUxNmZjCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmc3L1BvbHltb3JwaGljVHlwZUNhc3QuamF2YQpAQCAtMCwwICsxLDk3IEBACisvKgorICogQ29weXJpZ2h0IDIwMDAtMjAxMSBKZXRCcmFpbnMgcy5yLm8uCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCitpbXBvcnQgamF2YS5sYW5nLmludm9rZS5NZXRob2RIYW5kbGU7CitpbXBvcnQgamF2YS5sYW5nLmludm9rZS5NZXRob2RIYW5kbGVzOworaW1wb3J0IGphdmEubGFuZy5pbnZva2UuTWV0aG9kVHlwZTsKKworQFN1cHByZXNzV2FybmluZ3MoeyJVbnVzZWREZWNsYXJhdGlvbiJ9KQorY2xhc3MgQyB7CisgIC8vIGZyb20gaHR0cDovL2Rvd25sb2FkLmphdmEubmV0L2pkazcvZG9jcy9hcGkvamF2YS9sYW5nL2ludm9rZS9NZXRob2RIYW5kbGUuaHRtbCwgIlVzYWdlIGV4YW1wbGVzIgorICB2b2lkIG0oKSB0aHJvd3MgVGhyb3dhYmxlIHsKKyAgICBPYmplY3QgeCwgeTsgU3RyaW5nIHM7IGludCBpOworICAgIE1ldGhvZFR5cGUgbXQ7IE1ldGhvZEhhbmRsZSBtaDsKKyAgICBNZXRob2RIYW5kbGVzLkxvb2t1cCBsb29rdXAgPSBNZXRob2RIYW5kbGVzLmxvb2t1cCgpOworCisvLyBtdCBpcyAoY2hhcixjaGFyKVN0cmluZworICAgIG10ID0gTWV0aG9kVHlwZS5tZXRob2RUeXBlKFN0cmluZy5jbGFzcywgY2hhci5jbGFzcywgY2hhci5jbGFzcyk7CisgICAgbWggPSBsb29rdXAuZmluZFZpcnR1YWwoU3RyaW5nLmNsYXNzLCAicmVwbGFjZSIsIG10KTsKKyAgICBzID0gKFN0cmluZykgbWguaW52b2tlRXhhY3QoImRhZGR5IiwnZCcsJ24nKTsKKworLy8gaW52b2tlRXhhY3QoTGphdmEvbGFuZy9TdHJpbmc7Q0MpTGphdmEvbGFuZy9TdHJpbmc7CisgICAgYXNzZXJ0KHMuZXF1YWxzKCJuYW5ueSIpKTsKKworLy8gd2Vha2x5IHR5cGVkIGludm9jYXRpb24gKHVzaW5nIE1Icy5pbnZva2UpCisgICAgcyA9IChTdHJpbmcpIG1oLmludm9rZVdpdGhBcmd1bWVudHMoInNhcHB5IiwgJ3AnLCAndicpOworICAgIGFzc2VydChzLmVxdWFscygic2F2dnkiKSk7CisKKy8vIG10IGlzIChPYmplY3RbXSlMaXN0CisgICAgbXQgPSBNZXRob2RUeXBlLm1ldGhvZFR5cGUoamF2YS51dGlsLkxpc3QuY2xhc3MsIE9iamVjdFtdLmNsYXNzKTsKKyAgICBtaCA9IGxvb2t1cC5maW5kU3RhdGljKGphdmEudXRpbC5BcnJheXMuY2xhc3MsICJhc0xpc3QiLCBtdCk7CisgICAgYXNzZXJ0KG1oLmlzVmFyYXJnc0NvbGxlY3RvcigpKTsKKyAgICB4ID0gbWguaW52b2tlR2VuZXJpYygib25lIiwgInR3byIpOworCisvLyBpbnZva2VHZW5lcmljKExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nOylMamF2YS9sYW5nL09iamVjdDsKKyAgICBhc3NlcnQoeC5lcXVhbHMoamF2YS51dGlsLkFycmF5cy5hc0xpc3QoIm9uZSIsInR3byIpKSk7CisKKy8vIG10IGlzIChPYmplY3QsT2JqZWN0LE9iamVjdClPYmplY3QKKyAgICBtdCA9IE1ldGhvZFR5cGUuZ2VuZXJpY01ldGhvZFR5cGUoMyk7CisgICAgbWggPSBtaC5hc1R5cGUobXQpOworICAgIHggPSBtaC5pbnZva2VFeGFjdCgoT2JqZWN0KTEsIChPYmplY3QpMiwgKE9iamVjdCkzKTsKKworLy8gaW52b2tlRXhhY3QoTGphdmEvbGFuZy9PYmplY3Q7TGphdmEvbGFuZy9PYmplY3Q7TGphdmEvbGFuZy9PYmplY3Q7KUxqYXZhL2xhbmcvT2JqZWN0OworICAgIGFzc2VydCh4LmVxdWFscyhqYXZhLnV0aWwuQXJyYXlzLmFzTGlzdCgxLDIsMykpKTsKKworLy8gbXQgaXMgaW50KCkKKyAgICBtdCA9IE1ldGhvZFR5cGUubWV0aG9kVHlwZShpbnQuY2xhc3MpOworICAgIG1oID0gbG9va3VwLmZpbmRWaXJ0dWFsKGphdmEudXRpbC5MaXN0LmNsYXNzLCAic2l6ZSIsIG10KTsKKyAgICBpID0gKGludCkgbWguaW52b2tlRXhhY3QoamF2YS51dGlsLkFycmF5cy5hc0xpc3QoMSwyLDMpKTsKKworLy8gaW52b2tlRXhhY3QoTGphdmEvdXRpbC9MaXN0OylJCisgICAgYXNzZXJ0KGkgPT0gMyk7CisgICAgbXQgPSBNZXRob2RUeXBlLm1ldGhvZFR5cGUodm9pZC5jbGFzcywgU3RyaW5nLmNsYXNzKTsKKyAgICBtaCA9IGxvb2t1cC5maW5kVmlydHVhbChqYXZhLmlvLlByaW50U3RyZWFtLmNsYXNzLCAicHJpbnRsbiIsIG10KTsKKyAgICBtaC5pbnZva2VFeGFjdChTeXN0ZW0ub3V0LCAiSGVsbG8sIHdvcmxkLiIpOworLy8gaW52b2tlRXhhY3QoTGphdmEvaW8vUHJpbnRTdHJlYW07TGphdmEvbGFuZy9TdHJpbmc7KVYKKworICAgIE1ldGhvZEhhbmRsZSBtaDAgPSBsb29rdXAuZmluZFZpcnR1YWwoU3RyaW5nLmNsYXNzLCAibGVuZ3RoIiwgTWV0aG9kVHlwZS5tZXRob2RUeXBlKGludC5jbGFzcykpOworICAgIE1ldGhvZEhhbmRsZSBtaDEgPSBNZXRob2RIYW5kbGVzLmNvbnZlcnRBcmd1bWVudHMobWgwLCBNZXRob2RUeXBlLm1ldGhvZFR5cGUoSW50ZWdlci5jbGFzcywgU3RyaW5nLmNsYXNzKSk7CisgICAgU3lzdGVtLm91dC5wcmludGxuKChJbnRlZ2VyKSBtaDEuaW52b2tlRXhhY3QoImRhZGR5IikpOworICB9CisgIAorICB2b2lkIHN1cHBvcnRlZCgpIHsKKyAgICBPYmplY3QgbyA9IDQyOworICAgIGludCBpID0gKGludCkgbzsKKyAgICBTdHJpbmcgcyA9ICIiOworICAgIGludCBpMSA9IDxlcnJvciBkZXNjcj0iSW5jb252ZXJ0aWJsZSB0eXBlczsgY2Fubm90IGNhc3QgJ2phdmEubGFuZy5TdHJpbmcnIHRvICdpbnQnIj4oaW50KSBzPC9lcnJvcj47CisgICAgU3lzdGVtLm91dC5wcmludGxuKGkpOworICAgIG0oKGludCkgbyk7CisgIH0KKworICB2b2lkIHVuc3VwcG9ydGVkKCkgeworICAgIE9iamVjdCBvID0gNDI7CisgICAgaWYgKDxlcnJvciBkZXNjcj0iSW5jb252ZXJ0aWJsZSB0eXBlczsgY2Fubm90IGNhc3QgJ2phdmEubGFuZy5PYmplY3QnIHRvICdpbnQnIj5vIGluc3RhbmNlb2YgaW50PC9lcnJvcj4pIHsKKyAgICAgIGludCBpID0gKEludGVnZXIpIG87CisgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oaSk7CisgICAgfQorICB9CisKKyAgdm9pZCBtKGludCBpKSB7IH0KKyAgCisgIHZvaWQgYXNMb25ncyhJbnRlZ2VyIGkpIHsKKyAgICAgIGxvbmcgbCA9IChsb25nKSBpOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmc3L1ByZWNpc2VSZXRocm93LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZzcvUHJlY2lzZVJldGhyb3cuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZDQxNGZjNgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nNy9QcmVjaXNlUmV0aHJvdy5qYXZhCkBAIC0wLDAgKzEsMjMwIEBACitjbGFzcyBDIHsKKyAgc3RhdGljIGNsYXNzIEUgZXh0ZW5kcyBFeGNlcHRpb24geyB9CisgIHN0YXRpYyBjbGFzcyBFMSBleHRlbmRzIEUgeyB9CisgIHN0YXRpYyBjbGFzcyBFMiBleHRlbmRzIEUgeyB9CisgIHN0YXRpYyBjbGFzcyBFcnIgZXh0ZW5kcyBFcnJvciB7IH0KKworICB2b2lkIG0wKCkgeworICAgIHRyeSB7CisgICAgICB0aHJvdyBuZXcgRTEoKTsKKyAgICB9CisgICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgICB0cnkgeworICAgICAgICAvLyB0aHJvd3MgRTEgaW4gSkRLNworICAgICAgICA8ZXJyb3IgZGVzY3I9IlVuaGFuZGxlZCBleGNlcHRpb246IEMuRTEiPnRocm93IGU7PC9lcnJvcj4KKyAgICAgIH0gY2F0Y2ggKEUyIGUyKSB7IH0KKyAgICB9CisgIH0KKworICB2b2lkIG0xKCkgdGhyb3dzIEUxIHsKKyAgICB0cnkgeworICAgICAgdGhyb3cgbmV3IEUxKCk7CisgICAgfQorICAgIGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgICAgdHJ5IHsKKyAgICAgICAgLy8gdGhyb3dzIEUxIGluIEpESzcKKyAgICAgICAgdGhyb3cgZTsKKyAgICAgIH0gY2F0Y2ggKDxlcnJvciBkZXNjcj0iRXhjZXB0aW9uICdDLkUyJyBpcyBuZXZlciB0aHJvd24gaW4gdGhlIGNvcnJlc3BvbmRpbmcgdHJ5IGJsb2NrIj5FMiBlMjwvZXJyb3I+KSB7IH0KKyAgICB9CisgIH0KKworICB2b2lkIG0yKCkgeworICAgIHRyeSB7CisgICAgICB0aHJvdyBuZXcgRTEoKTsKKyAgICB9CisgICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgICB0cnkgeworICAgICAgICBpZiAodHJ1ZSkgeworICAgICAgICAgIDxlcnJvciBkZXNjcj0iVW5oYW5kbGVkIGV4Y2VwdGlvbjogamF2YS5sYW5nLkV4Y2VwdGlvbiI+dGhyb3cgZTs8L2Vycm9yPgorICAgICAgICB9CisgICAgICAgIGUgPSBuZXcgRTEoKTsgLy8gYW5hbHlzaXMgZGlzYWJsZWQsIGV2ZW4gYnkgbGF0ZSBhc3NpZ25tZW50CisgICAgICB9CisgICAgICBjYXRjaCAoRTIgZTIpIHsgfQorICAgIH0KKyAgfQorCisgIHZvaWQgbTMoYm9vbGVhbiBmKSB0aHJvd3MgRTEsIEUyIHsKKyAgICB0cnkgeworICAgICAgaWYgKGYpCisgICAgICAgIHRocm93IG5ldyBFMSgpOworICAgICAgZWxzZQorICAgICAgICB0aHJvdyBuZXcgRTIoKTsKKyAgICB9CisgICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgICAvLyByZWFkIGFjY2VzcyBkb2Vzbid0IGRpc2FibGVzIGFuIGFuYWx5c2lzCisgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oZSk7CisgICAgICAvLyB0aHJvd3MgRTEsIEUyIGluIEpESzcKKyAgICAgIHRocm93IGU7CisgICAgfQorICB9CisKKyAgdm9pZCBtNChib29sZWFuIGYpIHRocm93cyBFMSwgRTIgeworICAgIHRyeSB7CisgICAgICBpZiAoZikKKyAgICAgICAgdGhyb3cgbmV3IEUxKCk7CisgICAgICBlbHNlCisgICAgICAgIHRocm93IG5ldyBFMigpOworICAgIH0KKyAgICBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICAgIGUgPSBuZXcgRTIoKTsgLy8gYW5hbHlzaXMgZGlzYWJsZWQKKyAgICAgIDxlcnJvciBkZXNjcj0iVW5oYW5kbGVkIGV4Y2VwdGlvbjogamF2YS5sYW5nLkV4Y2VwdGlvbiI+dGhyb3cgZTs8L2Vycm9yPgorICAgIH0KKyAgfQorCisgIHZvaWQgbTUoYm9vbGVhbiBmKSB0aHJvd3MgRSB7CisgICAgdHJ5IHsKKyAgICAgIGlmIChmKQorICAgICAgICB0aHJvdyBuZXcgRTEoKTsKKyAgICAgIGVsc2UgaWYgKCFmKQorICAgICAgICB0aHJvdyBuZXcgRTIoKTsKKyAgICAgIGVsc2UKKyAgICAgICAgdGhyb3cgKFRocm93YWJsZSluZXcgRSgpOworICAgIH0KKyAgICBjYXRjaCAoRTEgZTEpIHsgfQorICAgIGNhdGNoIChmaW5hbCBFeGNlcHRpb24gZSkgeworICAgICAgLy8gVGhyb3dhYmxlIGlzbid0IGEgc3VidHlwZSBvZiBFeGNlcHRpb24KKyAgICAgIDxlcnJvciBkZXNjcj0iVW5oYW5kbGVkIGV4Y2VwdGlvbjogamF2YS5sYW5nLkV4Y2VwdGlvbiI+dGhyb3cgZTs8L2Vycm9yPgorICAgIH0KKyAgICBjYXRjaCAoVGhyb3dhYmxlIHQpIHsgfQorICB9CisKKyAgdm9pZCBtNihib29sZWFuIGYpIHRocm93cyBFMiB7CisgICAgdHJ5IHsKKyAgICAgIGlmIChmKQorICAgICAgICB0aHJvdyBuZXcgRTEoKTsKKyAgICAgIGVsc2UgaWYgKCFmKQorICAgICAgICB0aHJvdyBuZXcgRTIoKTsKKyAgICB9CisgICAgY2F0Y2ggKEUxIGUxKSB7IH0KKyAgICBjYXRjaCAoZmluYWwgRXhjZXB0aW9uIGUpIHsKKyAgICAgIHRocm93IGU7CisgICAgfQorICB9CisKKyAgdm9pZCBtNygpIHsKKyAgICB0cnkgeworICAgICAgaWYgKHRydWUpCisgICAgICAgIHRocm93IG5ldyBFMSgpOworICAgICAgZWxzZSBpZiAoZmFsc2UpCisgICAgICAgIHRocm93IG5ldyBFMigpOworICAgIH0KKyAgICBjYXRjaCAoRSBlKSB7CisgICAgICAvLyB0aHJvd3MgRTEsIEUyIGluIEpESzcKKyAgICAgIDxlcnJvciBkZXNjcj0iVW5oYW5kbGVkIGV4Y2VwdGlvbnM6IEMuRTEsIEMuRTIiPnRocm93IGU7PC9lcnJvcj4KKyAgICB9CisgIH0KKworICB2b2lkIG04KCkgdGhyb3dzIEUxIHsKKyAgICB0cnkgeworICAgICAgaWYgKHRydWUpCisgICAgICAgIHRocm93IG5ldyBFMSgpOworICAgICAgZWxzZSBpZiAoZmFsc2UpCisgICAgICAgIHRocm93IG5ldyBFMigpOworICAgIH0KKyAgICBjYXRjaCAoRTEgfCBFMiBlKSB7CisgICAgICA8ZXJyb3IgZGVzY3I9IlVuaGFuZGxlZCBleGNlcHRpb246IEMuRTIiPnRocm93IGU7PC9lcnJvcj4KKyAgICB9CisgIH0KKworICB2b2lkIG05KCkgeworICAgIHRyeSB7CisgICAgICB0aHJvdyBuZXcgRTEoKTsKKyAgICB9CisgICAgY2F0Y2ggKEUgeCkgeworICAgICAgdHJ5IHsKKyAgICAgICAgdGhyb3cgeDsKKyAgICAgIH0KKyAgICAgIGNhdGNoIChFIHkpIHsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICB0aHJvdyB5OworICAgICAgICB9CisgICAgICAgIGNhdGNoIChFIHopIHsKKyAgICAgICAgICAvLyBjaGFpbmVkIGV4Y2VwdGlvbiB0eXBlIGV2YWx1YXRpb24KKyAgICAgICAgICA8ZXJyb3IgZGVzY3I9IlVuaGFuZGxlZCBleGNlcHRpb246IEMuRTEiPnRocm93IHo7PC9lcnJvcj4KKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKyAgfQorCisgIHZvaWQgbTEwKCkgeworICAgIHRyeSB7CisgICAgICB0aHJvdyBuZXcgRTEoKTsKKyAgICB9CisgICAgY2F0Y2ggKEUgZSkgeworICAgICAgRSB4ID0gZTsKKyAgICAgIC8vIG5vIGNoYWluZWQgZXhjZXB0aW9uIHR5cGUgZXZhbHVhdGlvbgorICAgICAgPGVycm9yIGRlc2NyPSJVbmhhbmRsZWQgZXhjZXB0aW9uOiBDLkUiPnRocm93IHg7PC9lcnJvcj4KKyAgICB9CisgIH0KKworICB2b2lkIG0xMV8xKCkgeworICAgIHRyeSB7CisgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oKTsKKyAgICB9CisgICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgICB0aHJvdyBlOworICAgIH0KKyAgfQorCisgIHZvaWQgbTExXzIoKSB7CisgICAgdHJ5IHsKKyAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigpOworICAgIH0KKyAgICBjYXRjaCAoRXJyb3IgZSkgeworICAgICAgdGhyb3cgZTsKKyAgICB9CisgIH0KKworICB2b2lkIG0xMV8zKCkgeworICAgIHRyeSB7CisgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oKTsKKyAgICB9CisgICAgY2F0Y2ggKEVyciBlKSB7CisgICAgICB0aHJvdyBlOworICAgIH0KKyAgfQorCisgIHZvaWQgbTExXzQoKSB7CisgICAgdHJ5IHsKKyAgICAgIGlmIChmYWxzZSkgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oKTsKKyAgICB9CisgICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgICB0aHJvdyBlOworICAgIH0KKyAgfQorCisgIHN0YXRpYyBjbGFzcyBNeVJlc291cmNlIGltcGxlbWVudHMgQXV0b0Nsb3NlYWJsZSB7CisgICAgcHVibGljIHZvaWQgY2xvc2UoKSB0aHJvd3MgRTEgeyB9CisgIH0KKworICBNeVJlc291cmNlIGdldFJlc291cmNlKCkgdGhyb3dzIEUyIHsKKyAgICByZXR1cm4gbnVsbDsKKyAgfQorCisgIHZvaWQgbTEyKCkgeworICAgIHRyeSAoTXlSZXNvdXJjZSByID0gZ2V0UmVzb3VyY2UoKSkgeworICAgICAgU3lzdGVtLm91dC5wcmludGxuKHIpOworICAgIH0KKyAgICBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICAgIC8vIHRlc3QgZm9yIGFub3RoZXIgcHJlY2lzZSB0eXBlcyBjYWxjdWxhdGlvbiBmaXgKKyAgICAgIDxlcnJvciBkZXNjcj0iVW5oYW5kbGVkIGV4Y2VwdGlvbnM6IEMuRTEsIEMuRTIiPnRocm93IGU7PC9lcnJvcj4KKyAgICB9CisgIH0KKworICB2b2lkIG0xMygpIHRocm93cyBFMSB7CisgICAgdHJ5IHsKKyAgICAgIHRyeSB7CisgICAgICAgIGlmICh0cnVlKQorICAgICAgICAgIHRocm93IG5ldyBFMSgpOworICAgICAgICBlbHNlIGlmIChmYWxzZSkKKyAgICAgICAgICB0aHJvdyBuZXcgRTIoKTsKKyAgICAgIH0KKyAgICAgIGNhdGNoIChFMSB8IEUyIGUpIHsKKyAgICAgICAgdGhyb3cgZTsKKyAgICAgIH0KKyAgICB9CisgICAgY2F0Y2ggKEUyIGUpIHsKKyAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKGUpOworICAgIH0KKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nNy9TYWZlVmFyYXJnc0FwcGxpY2FiaWxpdHkuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nNy9TYWZlVmFyYXJnc0FwcGxpY2FiaWxpdHkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NTMwZGU3Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmc3L1NhZmVWYXJhcmdzQXBwbGljYWJpbGl0eS5qYXZhCkBAIC0wLDAgKzEsNjEgQEAKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworQDxlcnJvciBkZXNjcj0iJ0BTYWZlVmFyYXJncycgbm90IGFwcGxpY2FibGUgdG8gdHlwZSI+U2FmZVZhcmFyZ3M8L2Vycm9yPgorcHVibGljIGNsYXNzIFNhZmVWYXJhcmdzVGVzdHMgeworICAgIC8vZml4ZWQgYXJpdHkKKyAgICA8ZXJyb3IgZGVzY3I9IkBTYWZlVmFyYXJncyBpcyBub3QgYWxsb3dlZCBvbiBtZXRob2RzIHdpdGggZml4ZWQgYXJpdHkiPkBTYWZlVmFyYXJnczwvZXJyb3I+CisgICAgcHVibGljIHZvaWQgdGVzdE5vblZhcmFyZ3MxKCl7fQorCisgICAgPGVycm9yIGRlc2NyPSJAU2FmZVZhcmFyZ3MgaXMgbm90IGFsbG93ZWQgb24gbWV0aG9kcyB3aXRoIGZpeGVkIGFyaXR5Ij5AU2FmZVZhcmFyZ3M8L2Vycm9yPgorICAgIHB1YmxpYyB2b2lkIHRlc3ROb25WYXJhcmdzMihpbnQgPHdhcm5pbmcgZGVzY3I9IlBhcmFtZXRlciAnaScgaXMgbmV2ZXIgdXNlZCI+aTwvd2FybmluZz4pe30KKworICAgIDxlcnJvciBkZXNjcj0iQFNhZmVWYXJhcmdzIGlzIG5vdCBhbGxvd2VkIG9uIG1ldGhvZHMgd2l0aCBmaXhlZCBhcml0eSI+QFNhZmVWYXJhcmdzPC9lcnJvcj4KKyAgICBwdWJsaWMgPFQ+IHZvaWQgdGVzdE5vblZhcmFyZ3MzKFQgPHdhcm5pbmcgZGVzY3I9IlBhcmFtZXRlciAndCcgaXMgbmV2ZXIgdXNlZCI+dDwvd2FybmluZz4pe30KKworICAgIC8vbm9uIHN0YXRpYy9ub24gZmluYWwKKyAgICA8ZXJyb3IgZGVzY3I9IkBTYWZlVmFyYXJncyBpcyBub3QgYWxsb3dlZCBvbiBub24tZmluYWwgaW5zdGFuY2UgbWV0aG9kcyI+QFNhZmVWYXJhcmdzPC9lcnJvcj4KKyAgICBwdWJsaWMgdm9pZCB0ZXN0Tm9uVmFyYXJnczQoaW50Li4uIDx3YXJuaW5nIGRlc2NyPSJQYXJhbWV0ZXIgJ2knIGlzIG5ldmVyIHVzZWQiPmk8L3dhcm5pbmc+KXt9CisKKyAgICAvL3JlYXNzaWduZWQKKyAgICBAU2FmZVZhcmFyZ3MKKyAgICBwdWJsaWMgZmluYWwgPFQ+IHZvaWQgdGVzdFQoVFtdIHR0LCBULi4uIHQpIHsKKyAgICAgICAgPHdhcm5pbmcgZGVzY3I9IkBTYWZlVmFyYXJncyBkbyBub3Qgc3VwcHJlc3MgcG90ZW50aWFsbHkgdW5zYWZlIG9wZXJhdGlvbnMiPnQ8L3dhcm5pbmc+ID0gdHQ7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbih0WzBdKTsKKyAgICB9CisKKyAgICAvL2luY29ycmVjdCB0eXBlcworICAgIEBTYWZlVmFyYXJncworICAgIHB1YmxpYyBmaW5hbCB2b2lkIHRlc3RTdHJpbmcoPHdhcm5pbmcgZGVzY3I9IkBTYWZlVmFyYXJncyBpcyBub3QgYXBwbGljYWJsZSBmb3IgcmVpZmlhYmxlIHR5cGVzIj5TdHJpbmcuLi48L3dhcm5pbmc+IDx3YXJuaW5nIGRlc2NyPSJQYXJhbWV0ZXIgJ3N0cicgaXMgbmV2ZXIgdXNlZCI+c3RyPC93YXJuaW5nPil7CisgICAgfQorCisgICAgQFNhZmVWYXJhcmdzCisgICAgcHVibGljIGZpbmFsIHZvaWQgdGVzdFN0cmluZ0FycmF5KDx3YXJuaW5nIGRlc2NyPSJAU2FmZVZhcmFyZ3MgaXMgbm90IGFwcGxpY2FibGUgZm9yIHJlaWZpYWJsZSB0eXBlcyI+U3RyaW5nW10uLi48L3dhcm5pbmc+IDx3YXJuaW5nIGRlc2NyPSJQYXJhbWV0ZXIgJ3N0cicgaXMgbmV2ZXIgdXNlZCI+c3RyPC93YXJuaW5nPil7CisgICAgfQorCisgICAgQFNhZmVWYXJhcmdzCisgICAgcHVibGljIHN0YXRpYyB2b2lkIHRlc3RVbmJvdW5kKDx3YXJuaW5nIGRlc2NyPSJAU2FmZVZhcmFyZ3MgaXMgbm90IGFwcGxpY2FibGUgZm9yIHJlaWZpYWJsZSB0eXBlcyI+TGlzdDw/Pi4uLjwvd2FybmluZz4gPHdhcm5pbmcgZGVzY3I9IlBhcmFtZXRlciAndCcgaXMgbmV2ZXIgdXNlZCI+dDwvd2FybmluZz4pe30KKworCisgICAgLy9jb3JyZWN0IHVzYWdlcworICAgIEBTYWZlVmFyYXJncworICAgIHB1YmxpYyBzdGF0aWMgPFQ+IHZvaWQgZm9vKFQuLi4gPHdhcm5pbmcgZGVzY3I9IlBhcmFtZXRlciAndCcgaXMgbmV2ZXIgdXNlZCI+dDwvd2FybmluZz4pe30KKyAgICBAU2FmZVZhcmFyZ3MKKyAgICBwdWJsaWMgc3RhdGljIDxUPiB2b2lkIGZvbzEoTGlzdDxUPi4uLiA8d2FybmluZyBkZXNjcj0iUGFyYW1ldGVyICd0JyBpcyBuZXZlciB1c2VkIj50PC93YXJuaW5nPil7fQorICAgIEBTYWZlVmFyYXJncworICAgIHB1YmxpYyBzdGF0aWMgPFQ+IHZvaWQgZm9vMihMaXN0PD8gZXh0ZW5kcyBUPi4uLiA8d2FybmluZyBkZXNjcj0iUGFyYW1ldGVyICd0JyBpcyBuZXZlciB1c2VkIj50PC93YXJuaW5nPil7fQorCit9CisKK2Fic3RyYWN0IGNsYXNzIEFDbGFzcyB7CisgICAgQFNhZmVWYXJhcmdzCisgICAgPFQ+IEFDbGFzcyhULi4uIGQpeworICAgICAgU3lzdGVtLm91dC5wcmludGxuKGQpOworICAgIH0KK30KKworY2xhc3MgQUJDbGFzcyBleHRlbmRzIEFDbGFzcyB7CisgICAgQFNhZmVWYXJhcmdzCisgICAgPFQ+IEFCQ2xhc3MoVC4uLiBkKXsKKyAgICAgICAgc3VwZXIoZCk7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nNy9TdXBlckJvdW5kLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZzcvU3VwZXJCb3VuZC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNjZWI0MjkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZzcvU3VwZXJCb3VuZC5qYXZhCkBAIC0wLDAgKzEsNTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwMC0yMDExIEpldEJyYWlucyBzLnIuby4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCitpbXBvcnQgamF2YS5sYW5nLk92ZXJyaWRlOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworcHVibGljIGNsYXNzIFRlc3QKK3sKKyAgICBwdWJsaWMgaW50ZXJmYWNlIE15TGlzdDxOIGV4dGVuZHMgTnVtYmVyPiBleHRlbmRzIExpc3Q8Tj4KKyAgICB7CisgICAgfQorCisgICAgdm9pZCB0ZXN0KE15TGlzdDw/IHN1cGVyIEludGVnZXI+IGxpc3QpCisgICAgeworICAgICAgICBOdW1iZXIgbiA9IGxpc3QuZ2V0KDApOworICAgIH0KK30KKworY2xhc3MgVGVzdDEKK3sKKyAgICBwdWJsaWMgaW50ZXJmYWNlIE15TGlzdDxOIGV4dGVuZHMgTnVtYmVyPiBleHRlbmRzIExpc3Q8Tj4geworICAgICAgQE92ZXJyaWRlCisgICAgICBOIGdldChpbnQgaW5kZXgpOworICAgIH0KKworICAgIHZvaWQgdGVzdChNeUxpc3Q8PyBzdXBlciBJbnRlZ2VyPiBsaXN0KQorICAgIHsKKyAgICAgICAgTnVtYmVyIG4gPSBsaXN0LmdldCgwKTsKKyAgICB9Cit9CisKK2NsYXNzIFRlc3QyCit7CisgICAgcHVibGljIGludGVyZmFjZSBNeUxpc3Q8TiBleHRlbmRzIE51bWJlcj57CisgICAgICBOIGdldChpbnQgaW5kZXgpOworICAgIH0KKworICAgIHZvaWQgdGVzdChNeUxpc3Q8PyBzdXBlciBJbnRlZ2VyPiBsaXN0KQorICAgIHsKKyAgICAgICAgTnVtYmVyIG4gPSBsaXN0LmdldCgwKTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZzcvU3dpdGNoQnlJbmFjY2Vzc2libGVFbnVtLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZzcvU3dpdGNoQnlJbmFjY2Vzc2libGVFbnVtLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2NkZDkwZgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nNy9Td2l0Y2hCeUluYWNjZXNzaWJsZUVudW0uamF2YQpAQCAtMCwwICsxLDIzIEBACitpbnRlcmZhY2UgQSB7CisgICAgQiBnZXRCKCk7CisKKyAgICBjbGFzcyBCIHsKKyAgICAgICAgcHVibGljIEMgYzsKKworICAgICAgICBwcml2YXRlIGVudW0gQyB7CisgICAgICAgICAgICBTT01FCisgICAgICAgIH0KKyAgICB9Cit9CisKK2NsYXNzIEQgeworICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBmKEEgYSkgeworICAgICAgICBBLkIgYiA9IGEuZ2V0QigpOworICAgICAgICBzd2l0Y2ggKDxlcnJvciBkZXNjcj0iQS5CLkMgaXMgaW5hY2Nlc3NpYmxlIGhlcmUiPmIuYzwvZXJyb3I+KSB7CisgICAgICAgICAgICBjYXNlIFNPTUU6CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nNy9Td2l0Y2hCeVN0cmluZy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmc3L1N3aXRjaEJ5U3RyaW5nLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWY3MjUzZgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nNy9Td2l0Y2hCeVN0cmluZy5qYXZhCkBAIC0wLDAgKzEsNDEgQEAKK3B1YmxpYyBjbGFzcyBUZXN0IHsKKyAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEJBWiA9ICJiYXoiOworCisgIHByaXZhdGUgdm9pZCBzdHJpbmdTd2l0Y2goKSB7CisgICAgZmluYWwgU3RyaW5nIGJhciA9ICJiYXIiOworICAgIFN0cmluZyBrZXkgPSAia2V5IjsKKyAgICBzd2l0Y2ggKGtleSkgeworICAgICAgY2FzZSAiIjogeworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIk5vdGhpbmciKTsKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgICBjYXNlICJmb28iOiAvLyBmYWxsdGhyb3VnaCB3b3JrcyBhcyBiZWZvcmUKKyAgICAgIGNhc2UgYmFyOiAgIC8vIGxvY2FsIGZpbmFsIHZhcmlhYmxlcyBhcmUgb2sKKyAgICAgIGNhc2UgQkFaOiB7IC8vIGNvbnN0YW50cyBhcmUgb2sKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJNYXRjaGVkIGtleSIpOworICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgfQorCisgIHByaXZhdGUgdm9pZCBpbGxlZ2FsU3RyaW5nU3dpdGNoKCkgeworICAgIFN0cmluZyBmb28gPSAiZm9vIjsKKyAgICBTdHJpbmcga2V5ID0gImtleSI7CisgICAgc3dpdGNoIChrZXkpIHsKKyAgICAgIGNhc2UgPGVycm9yPmZvbzwvZXJyb3I+OgorICAgICAgY2FzZSA8ZXJyb3I+Z2V0U3RyaW5nVmFsdWUoKTwvZXJyb3I+OiB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiaWxsZWdhbCIpOworICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgfQorCisgIHByaXZhdGUgU3RyaW5nIGdldFN0cmluZ1ZhbHVlKCkgeworICAgIHJldHVybiAiIjsKKyAgfQorCit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmc3L1RyeVdpdGhSZXNvdXJjZXMuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nNy9UcnlXaXRoUmVzb3VyY2VzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzBmOGViNwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nNy9UcnlXaXRoUmVzb3VyY2VzLmphdmEKQEAgLTAsMCArMSw5MyBAQAorLyoKKyAqIENvcHlyaWdodCAyMDAwLTIwMTIgSmV0QnJhaW5zIHMuci5vLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KK2NsYXNzIEMgeworICBzdGF0aWMgY2xhc3MgRSBleHRlbmRzIEV4Y2VwdGlvbiB7IH0KKyAgc3RhdGljIGNsYXNzIEUxIGV4dGVuZHMgRSB7IH0KKyAgc3RhdGljIGNsYXNzIEUyIGV4dGVuZHMgRSB7IH0KKyAgc3RhdGljIGNsYXNzIEUzIGV4dGVuZHMgRSB7IH0KKworICBzdGF0aWMgY2xhc3MgTXlSZXNvdXJjZSBpbXBsZW1lbnRzIEF1dG9DbG9zZWFibGUgeworICAgIHB1YmxpYyBNeVJlc291cmNlKCkgdGhyb3dzIEUxIHsgfQorICAgIHB1YmxpYyB2b2lkIGRvU29tZXRoaW5nKCkgdGhyb3dzIEUyIHsgfQorICAgIEBPdmVycmlkZSBwdWJsaWMgdm9pZCBjbG9zZSgpIHRocm93cyBFMyB7IH0KKyAgfQorCisgIHN0YXRpYyBpbnRlcmZhY2UgSSBleHRlbmRzIEF1dG9DbG9zZWFibGUgeyB9CisKKyAgdm9pZCBtMSgpIHsKKyAgICB0cnkgKE15UmVzb3VyY2UgciA9IG5ldyBNeVJlc291cmNlKCkpIHsgci5kb1NvbWV0aGluZygpOyB9CisgICAgY2F0Y2ggKEUxIHwgRTIgfCBFMyBpZ25vcmUpIHsgfQorCisgICAgdHJ5IChNeVJlc291cmNlIHIgPSBuZXcgTXlSZXNvdXJjZSgpKSB7IH0KKyAgICBjYXRjaCAoRTEgfCBFMyBpZ25vcmUpIHsgfQorCisgICAgdHJ5ICg8ZXJyb3IgZGVzY3I9IlVuaGFuZGxlZCBleGNlcHRpb24gZnJvbSBhdXRvLWNsb3NlYWJsZSByZXNvdXJjZTogQy5FMyI+TXlSZXNvdXJjZSByID0gbmV3IE15UmVzb3VyY2UoKTwvZXJyb3I+KSB7IH0KKyAgICBjYXRjaCAoRTEgZSkgeyB9CisKKyAgICB0cnkgKE15UmVzb3VyY2UgciA9IDxlcnJvciBkZXNjcj0iVW5oYW5kbGVkIGV4Y2VwdGlvbjogQy5FMSI+bmV3IE15UmVzb3VyY2UoKTwvZXJyb3I+KSB7IH0KKyAgICBjYXRjaCAoRTMgZSkgeyB9CisKKyAgICB0cnkgKE15UmVzb3VyY2UgciA9IDxlcnJvciBkZXNjcj0iVW5oYW5kbGVkIGV4Y2VwdGlvbjogQy5FMSI+bmV3IE15UmVzb3VyY2UoKTwvZXJyb3I+KSB7IH0KKworICAgIHRyeSAoPGVycm9yIGRlc2NyPSJVbmhhbmRsZWQgZXhjZXB0aW9uIGZyb20gYXV0by1jbG9zZWFibGUgcmVzb3VyY2U6IGphdmEubGFuZy5FeGNlcHRpb24iPkkgciA9IG51bGw8L2Vycm9yPikgeyBTeXN0ZW0ub3V0LnByaW50bG4ocik7IH0KKyAgfQorCisgIHZvaWQgbTIoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICB0cnkgKDxlcnJvciBkZXNjcj0iSW5jb21wYXRpYmxlIHR5cGVzLiBGb3VuZDogJ2phdmEubGFuZy5PYmplY3QnLCByZXF1aXJlZDogJ2phdmEubGFuZy5BdXRvQ2xvc2VhYmxlJyI+T2JqZWN0IHIgPSBuZXcgTXlSZXNvdXJjZSgpPC9lcnJvcj4pIHsgfQorCisgICAgdHJ5ICg8ZXJyb3IgZGVzY3I9IkluY29tcGF0aWJsZSB0eXBlcy4gRm91bmQ6ICdqYXZhLmxhbmcuU3RyaW5nJywgcmVxdWlyZWQ6ICdqYXZhLmxhbmcuQXV0b0Nsb3NlYWJsZSciPkF1dG9DbG9zZWFibGUgciA9ICJyZXNvdXJjZSI8L2Vycm9yPikgeyB9CisgIH0KKworICB2b2lkIG0zKGludCBwKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICB0cnkgKE15UmVzb3VyY2UgciA9IG5ldyBNeVJlc291cmNlKCkpIHsKKyAgICAgIHIuZG9Tb21ldGhpbmcoKTsKKyAgICAgIDxlcnJvciBkZXNjcj0iQ2Fubm90IGFzc2lnbiBhIHZhbHVlIHRvIGZpbmFsIHZhcmlhYmxlICdyJyI+ciA9IG51bGw8L2Vycm9yPjsKKyAgICAgIGludCA8ZXJyb3IgZGVzY3I9IlZhcmlhYmxlICdyJyBpcyBhbHJlYWR5IGRlZmluZWQgaW4gdGhlIHNjb3BlIj5yPC9lcnJvcj4gPSAwOworICAgIH0KKyAgICBjYXRjaCAoRSBlKSB7CisgICAgICA8ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAnciciPnI8L2Vycm9yPiA9IG51bGw7CisgICAgfQorICAgIGZpbmFsbHkgeworICAgICAgPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ3InIj5yPC9lcnJvcj4gPSBudWxsOworICAgIH0KKyAgICA8ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAnciciPnI8L2Vycm9yPiA9IG51bGw7CisKKyAgICB0cnkgKE15UmVzb3VyY2UgciA9IG5ldyBNeVJlc291cmNlKCk7IE15UmVzb3VyY2UgPGVycm9yIGRlc2NyPSJWYXJpYWJsZSAncicgaXMgYWxyZWFkeSBkZWZpbmVkIGluIHRoZSBzY29wZSI+cjwvZXJyb3I+ID0gbmV3IE15UmVzb3VyY2UoKSkgeyB9CisKKyAgICB0cnkgKE15UmVzb3VyY2UgcjEgPSBuZXcgTXlSZXNvdXJjZSgpOyBNeVJlc291cmNlIHIyID0gcjEpIHsgfQorCisgICAgdHJ5IChNeVJlc291cmNlIHIxID0gPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ3IyJyI+cjI8L2Vycm9yPjsgTXlSZXNvdXJjZSByMiA9IHIxKSB7IH0KKworICAgIE15UmVzb3VyY2UgciA9IG51bGw7CisgICAgdHJ5IChNeVJlc291cmNlIDxlcnJvciBkZXNjcj0iVmFyaWFibGUgJ3InIGlzIGFscmVhZHkgZGVmaW5lZCBpbiB0aGUgc2NvcGUiPnI8L2Vycm9yPiA9IG5ldyBNeVJlc291cmNlKCkpIHsgfQorICAgIHRyeSAoTXlSZXNvdXJjZSByciA9IHIpIHsgfQorCisgICAgdHJ5IChNeVJlc291cmNlIDxlcnJvciBkZXNjcj0iVmFyaWFibGUgJ3AnIGlzIGFscmVhZHkgZGVmaW5lZCBpbiB0aGUgc2NvcGUiPnA8L2Vycm9yPiA9IG5ldyBNeVJlc291cmNlKCkpIHsgfQorICAgIG5ldyBSdW5uYWJsZSgpIHsKKyAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKKyAgICAgICAgdHJ5IChNeVJlc291cmNlIHAgPSBuZXcgTXlSZXNvdXJjZSgpKSB7IH0KKyAgICAgICAgY2F0Y2ggKEUgZSkgeyB9CisgICAgICB9CisgICAgfS5ydW4oKTsKKyAgfQorCisgIHZvaWQgbTQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICB0cnkgKE15UmVzb3VyY2UgciA9IDxlcnJvciBkZXNjcj0iVmFyaWFibGUgJ3InIG1pZ2h0IG5vdCBoYXZlIGJlZW4gaW5pdGlhbGl6ZWQiPnI8L2Vycm9yPikgeyB9CisKKyAgICBNeVJlc291cmNlIHI7CisgICAgdHJ5IChNeVJlc291cmNlIHIxID0gPGVycm9yIGRlc2NyPSJWYXJpYWJsZSAncicgbWlnaHQgbm90IGhhdmUgYmVlbiBpbml0aWFsaXplZCI+cjwvZXJyb3I+KSB7IH0KKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nNy9UcnlXaXRoUmVzb3VyY2VzV2Fybi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmc3L1RyeVdpdGhSZXNvdXJjZXNXYXJuLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjUwYTI2ZQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nNy9UcnlXaXRoUmVzb3VyY2VzV2Fybi5qYXZhCkBAIC0wLDAgKzEsMjYgQEAKK2NsYXNzIEMgeworICBzdGF0aWMgY2xhc3MgTXlSZXNvdXJjZSBpbXBsZW1lbnRzIEF1dG9DbG9zZWFibGUgeworICAgIEBPdmVycmlkZSBwdWJsaWMgdm9pZCBjbG9zZSgpIHsgfQorICB9CisKKyAgdm9pZCBtMSgpIHRocm93cyBFeGNlcHRpb24geworICAgIHRyeSAoTXlSZXNvdXJjZSByMSA9IG5ldyBNeVJlc291cmNlKCkpIHsKKyAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihyMSk7CisgICAgfQorCisgICAgTXlSZXNvdXJjZSByMiA9IG5ldyBNeVJlc291cmNlKCk7CisgICAgdHJ5IChNeVJlc291cmNlIHIgPSByMikgeworICAgICAgU3lzdGVtLm91dC5wcmludGxuKHIpOworICAgICAgU3lzdGVtLm91dC5wcmludGxuKHIyKTsKKyAgICB9CisgIH0KKworICB2b2lkIG0yKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgdHJ5IChNeVJlc291cmNlIDx3YXJuaW5nIGRlc2NyPSJWYXJpYWJsZSAncjInIGlzIG5ldmVyIHVzZWQiPnIyPC93YXJuaW5nPiA9IG5ldyBNeVJlc291cmNlKCkpIHsgfQorCisgICAgTXlSZXNvdXJjZSA8d2FybmluZyBkZXNjcj0iVmFyaWFibGUgJ3IzJyBpcyBuZXZlciBhc3NpZ25lZCI+cjM8L3dhcm5pbmc+OworICAgIHRyeSAoTXlSZXNvdXJjZSByID0gPGVycm9yIGRlc2NyPSJWYXJpYWJsZSAncjMnIG1pZ2h0IG5vdCBoYXZlIGJlZW4gaW5pdGlhbGl6ZWQiPnIzPC9lcnJvcj4pIHsKKyAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihyKTsKKyAgICB9CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZzcvVW5jaGVja2VkR2VuZXJpY3NBcnJheUNyZWF0aW9uLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZzcvVW5jaGVja2VkR2VuZXJpY3NBcnJheUNyZWF0aW9uLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODkwMjg4NwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nNy9VbmNoZWNrZWRHZW5lcmljc0FycmF5Q3JlYXRpb24uamF2YQpAQCAtMCwwICsxLDEzMSBAQAoraW1wb3J0IGphdmEudXRpbC4qOworCitwdWJsaWMgY2xhc3MgVGVzdCB7CisgIHN0YXRpYyA8VD4gTGlzdDxUPiBhc0xpc3QoVC4uLiB0dCkgeworICAgIFN5c3RlbS5vdXQucHJpbnRsbih0dCk7CisgICAgcmV0dXJuIG51bGw7CisgIH0KKworICBAU2FmZVZhcmFyZ3MKKyAgc3RhdGljIDxUPiBMaXN0PFQ+IGFzTGlzdFN1cHByZXNzZWQoVC4uLiB0dCkgeworICAgIFN5c3RlbS5vdXQucHJpbnRsbih0dCk7CisgICAgcmV0dXJuIG51bGw7CisgIH0KKworICBzdGF0aWMgTGlzdDxTdHJpbmc+IGFzU3RyaW5nTGlzdChMaXN0PFN0cmluZz4uLi4gdHQpIHsKKyAgICByZXR1cm4gdHRbMF07CisgIH0KKworICBzdGF0aWMgTGlzdDw/PiBhc1FMaXN0KExpc3Q8Pz4uLi4gdHQpIHsKKyAgICByZXR1cm4gdHRbMF07CisgIH0KKworICBzdGF0aWMgTGlzdDw/PiBhc0ludExpc3QoaW50Li4uIHR0KSB7CisgICAgU3lzdGVtLm91dC5wcmludGxuKHR0KTsKKyAgICByZXR1cm4gbnVsbDsKKyAgfQorCisKKyAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworICAgIDx3YXJuaW5nIGRlc2NyPSJVbmNoZWNrZWQgZ2VuZXJpY3MgYXJyYXkgY3JlYXRpb24gZm9yIHZhcmFyZ3MgcGFyYW1ldGVyIj5hc0xpc3Q8L3dhcm5pbmc+KG5ldyBBcnJheUxpc3Q8U3RyaW5nPigpKTsKKworICAgIGFzTGlzdFN1cHByZXNzZWQobmV3IEFycmF5TGlzdDxTdHJpbmc+KCkpOworCisgICAgLy9ub2luc3BlY3Rpb24gdW5jaGVja2VkCisgICAgYXNMaXN0KG5ldyBBcnJheUxpc3Q8U3RyaW5nPigpKTsKKworICAgIDx3YXJuaW5nIGRlc2NyPSJVbmNoZWNrZWQgZ2VuZXJpY3MgYXJyYXkgY3JlYXRpb24gZm9yIHZhcmFyZ3MgcGFyYW1ldGVyIj5hc1N0cmluZ0xpc3Q8L3dhcm5pbmc+KG5ldyBBcnJheUxpc3Q8U3RyaW5nPigpKTsKKworICAgIGFzUUxpc3QobmV3IEFycmF5TGlzdDxTdHJpbmc+KCkpOworICAgIGFzSW50TGlzdCgxKTsKKworICAgIGZpbmFsIEFycmF5TGlzdDxTdHJpbmc+IGxpc3QgPSBuZXcgQXJyYXlMaXN0PFN0cmluZz4oKTsKKyAgICA8d2FybmluZyBkZXNjcj0iVW5jaGVja2VkIGdlbmVyaWNzIGFycmF5IGNyZWF0aW9uIGZvciB2YXJhcmdzIHBhcmFtZXRlciI+YXNMaXN0PC93YXJuaW5nPihsaXN0KTsKKyAgfQorCisgIHB1YmxpYyBzdGF0aWMgPFY+IHZvaWQgam9pbihWW10gbGlzdCkgeworICAgIEFycmF5cy5hc0xpc3QobGlzdCk7CisgIH0KK30KKworY2xhc3MgTm9XYXJuZ3MgeworICAgIHN0YXRpYyBmaW5hbCBTZW1LZXk8U3RyaW5nPiBGSUxFX0RFU0NSSVBUSU9OX0tFWSA9IDx3YXJuaW5nIGRlc2NyPSJVbmNoZWNrZWQgZ2VuZXJpY3MgYXJyYXkgY3JlYXRpb24gZm9yIHZhcmFyZ3MgcGFyYW1ldGVyIj5TZW1LZXkuY3JlYXRlS2V5PC93YXJuaW5nPigiRklMRV9ERVNDUklQVElPTl9LRVkiKTsKKworICAgIHZvaWQgZigpIHsKKyAgICAgICAgT0NNPFN0cmluZz4gbyA9CisgICAgICAgICAgICAgICAgbmV3IDx3YXJuaW5nIGRlc2NyPSJVbmNoZWNrZWQgZ2VuZXJpY3MgYXJyYXkgY3JlYXRpb24gZm9yIHZhcmFyZ3MgcGFyYW1ldGVyIj5PQ008Pjwvd2FybmluZz4oIiIsIHRydWUsIG5ldyBDb25kaXRpb248U3RyaW5nPigpeworICAgICAgICAgICAgQE92ZXJyaWRlCisgICAgICAgICAgICBwdWJsaWMgYm9vbGVhbiB2YWwoU3RyaW5nIHMpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgIH0sIENvbmRpdGlvbi5UUlVFKTsKKyAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihvKTsKKyAgICB9Cit9CisKK2NsYXNzIFNlbUtleTxUIGV4dGVuZHMgU3RyaW5nPiB7CisgIHByaXZhdGUgZmluYWwgU3RyaW5nIG15RGVidWdOYW1lOworICBwcml2YXRlIGZpbmFsIFNlbUtleTw/IHN1cGVyIFQ+W10gbXlTdXBlcnM7CisKKyAgcHJpdmF0ZSBTZW1LZXkoU3RyaW5nIGRlYnVnTmFtZSwgU2VtS2V5PD8gc3VwZXIgVD4uLi4gc3VwZXJzKSB7CisgICAgbXlEZWJ1Z05hbWUgPSBkZWJ1Z05hbWU7CisgICAgU3lzdGVtLm91dC5wcmludGxuKG15RGVidWdOYW1lKTsKKyAgICBteVN1cGVycyA9IHN1cGVyczsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4obXlTdXBlcnMpOworICB9CisKKyAgcHVibGljIHN0YXRpYyA8VCBleHRlbmRzIFN0cmluZz4gU2VtS2V5PFQ+IGNyZWF0ZUtleShTdHJpbmcgZGVidWdOYW1lLCBTZW1LZXk8PyBzdXBlciBUPi4uLiBzdXBlcnMpIHsKKyAgICByZXR1cm4gbmV3IFNlbUtleTxUPihkZWJ1Z05hbWUsIHN1cGVycyk7CisgIH0KKworICBwdWJsaWMgPEsgZXh0ZW5kcyBUPiBTZW1LZXk8Sz4gc3ViS2V5KFN0cmluZyBkZWJ1Z05hbWUsIFNlbUtleTw/IHN1cGVyIFQ+Li4uIG90aGVyU3VwZXJzKSB7CisgICAgaWYgKG90aGVyU3VwZXJzLmxlbmd0aCA9PSAwKSB7CisgICAgICByZXR1cm4gbmV3IDx3YXJuaW5nIGRlc2NyPSJVbmNoZWNrZWQgZ2VuZXJpY3MgYXJyYXkgY3JlYXRpb24gZm9yIHZhcmFyZ3MgcGFyYW1ldGVyIj5TZW1LZXk8Sz48L3dhcm5pbmc+KGRlYnVnTmFtZSwgdGhpcyk7CisgICAgfQorICAgIHJldHVybiBuZXcgU2VtS2V5PEs+KGRlYnVnTmFtZSwgYXBwZW5kKG90aGVyU3VwZXJzLCB0aGlzKSk7CisgIH0KKworICBwdWJsaWMgc3RhdGljIDxUPiBUW10gYXBwZW5kKGZpbmFsIFRbXSBzcmMsIGZpbmFsIFQgZWxlbWVudCkgeworICAgIHJldHVybiBhcHBlbmQoc3JjLCBlbGVtZW50LCA8d2FybmluZyBkZXNjcj0iVW5jaGVja2VkIGNhc3Q6ICdqYXZhLmxhbmcuQ2xhc3M8Y2FwdHVyZTw/Pj4nIHRvICdqYXZhLmxhbmcuQ2xhc3M8VD4nIj4oQ2xhc3M8VD4pc3JjLmdldENsYXNzKCkuZ2V0Q29tcG9uZW50VHlwZSgpPC93YXJuaW5nPik7CisgIH0KKworICAgcHVibGljIHN0YXRpYyA8VD4gVFtdIGFwcGVuZChUW10gc3JjLCBmaW5hbCBUIGVsZW1lbnQsIENsYXNzPFQ+IGNvbXBvbmVudFR5cGUpIHsKKyAgICBpbnQgbGVuZ3RoID0gc3JjLmxlbmd0aDsKKyAgICBUW10gcmVzdWx0ID0gPHdhcm5pbmcgZGVzY3I9IlVuY2hlY2tlZCBjYXN0OiAnamF2YS5sYW5nLk9iamVjdCcgdG8gJ1RbXSciPihUW10pamF2YS5sYW5nLnJlZmxlY3QuQXJyYXkubmV3SW5zdGFuY2UoY29tcG9uZW50VHlwZSwgbGVuZ3RoICsgMSk8L3dhcm5pbmc+OworICAgIFN5c3RlbS5hcnJheWNvcHkoc3JjLCAwLCByZXN1bHQsIDAsIGxlbmd0aCk7CisgICAgcmVzdWx0W2xlbmd0aF0gPSBlbGVtZW50OworICAgIHJldHVybiByZXN1bHQ7CisgIH0KK30KKworaW50ZXJmYWNlIENvbmRpdGlvbjxUPiB7CisgICBib29sZWFuIHZhbChUIHQpOworCisgICBDb25kaXRpb24gVFJVRSA9IG5ldyBDb25kaXRpb24oKSB7CisgICAgICAgQE92ZXJyaWRlCisgICAgICAgcHVibGljIGJvb2xlYW4gdmFsKE9iamVjdCBvKSB7CisgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgIH0KKyAgIH07Cit9CitjbGFzcyBPQ008VD4geworICAgIE9DTShUIHMsIGJvb2xlYW4gYiwgQ29uZGl0aW9uPFQ+Li4uIGMpIHsKKyAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihzKTsKKyAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihiKTsKKyAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihjKTsKKyAgICB9CisKKyAgICBPQ00oVCBzLCBDb25kaXRpb248VD4uLi4gYykgeworICAgICAgdGhpcyhzLCBmYWxzZSwgYyk7CisgICAgfQorfQorCitjbGFzcyBUUFN1YnN0aXR1dGlvbjxUPiB7CisgICAgcHVibGljIHZvaWQgZihULi4uIGFyZ3MpIHsKKyAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihhcmdzKTsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBnKCkgeworICAgICAgICBuZXcgVFBTdWJzdGl0dXRpb248U3RyaW5nPigpLmYoKTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmc3L1VuY2hlY2tlZFdhcm5pbmcuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nNy9VbmNoZWNrZWRXYXJuaW5nLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmZmMTE1NAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nNy9VbmNoZWNrZWRXYXJuaW5nLmphdmEKQEAgLTAsMCArMSw2IEBACitjbGFzcyBUZXN0IHsKKyAgeworICAgIENsYXNzIGZvbyA9IE9iamVjdC5jbGFzczsKKyAgICA8d2FybmluZyBkZXNjcj0iVW5jaGVja2VkIGNhbGwgdG8gJ2lzQXNzaWduYWJsZUZyb20oQ2xhc3M8Pz4pJyBhcyBhIG1lbWJlciBvZiByYXcgdHlwZSAnamF2YS5sYW5nLkNsYXNzJyI+Zm9vLmlzQXNzaWduYWJsZUZyb208L3dhcm5pbmc+KE9iamVjdC5jbGFzcyk7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZzcvVW5jaGVja2VkV2FybmluZ0lERUEyMTQzMi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmc3L1VuY2hlY2tlZFdhcm5pbmdJREVBMjE0MzIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43Y2I2NmM0Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmc3L1VuY2hlY2tlZFdhcm5pbmdJREVBMjE0MzIuamF2YQpAQCAtMCwwICsxLDIzIEBACisKK2ltcG9ydCBqYXZhLnV0aWwuTWFwOworCitwdWJsaWMgY2xhc3MgTWlzc2luZ1dhcm5pbmcgeworCisgIHN0YXRpYyBmaW5hbCBNYXA8U3RyaW5nLCBTdHJpbmc+IFZBTElEX1ZBTFVFU19CWV9LRVkgPSA8d2FybmluZyBkZXNjcj0iVW5jaGVja2VkIGdlbmVyaWNzIGFycmF5IGNyZWF0aW9uIGZvciB2YXJhcmdzIHBhcmFtZXRlciI+bmV3RXhjZXB0aW9uT25OdWxsSGFzaE1hcDwvd2FybmluZz4oCisgICAgIkludmFsaWQga2V5IiwKKyAgICBuZXdFbnRyeSgia2V5MSIsICJ2YWxBIiksIC8vIDw8LS0tIGNvbXBpbGVyIHdhcm5pbmcgb24gdGhpcyBsaW5lCisgICAgbmV3RW50cnkoImtleTIiLCAidmFsQiIpLAorICAgIG5ld0VudHJ5KCJrZXkzIiwgInZhbEMiKSwKKyAgICBuZXdFbnRyeSgia2V5NCIsICJ2YWxEIikKKyAgKTsKKworICBwdWJsaWMgc3RhdGljIDxLLCBWPiBNYXA8SywgVj4gbmV3RXhjZXB0aW9uT25OdWxsSGFzaE1hcChmaW5hbCBTdHJpbmcgPHdhcm5pbmcgZGVzY3I9IlBhcmFtZXRlciAnZXhjZXB0aW9uTWVzc2FnZScgaXMgbmV2ZXIgdXNlZCI+ZXhjZXB0aW9uTWVzc2FnZTwvd2FybmluZz4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1hcC5FbnRyeTxLLCBWPi4uLiA8d2FybmluZyBkZXNjcj0iUGFyYW1ldGVyICdlbnRyaWVzJyBpcyBuZXZlciB1c2VkIj5lbnRyaWVzPC93YXJuaW5nPikKKyAgeworICAgIHJldHVybiBudWxsOworICB9CisKKyAgcHVibGljIHN0YXRpYyA8SywgVj4gTWFwLkVudHJ5PEssIFY+IG5ld0VudHJ5KEsgPHdhcm5pbmcgZGVzY3I9IlBhcmFtZXRlciAna2V5JyBpcyBuZXZlciB1c2VkIj5rZXk8L3dhcm5pbmc+LCBWIDx3YXJuaW5nIGRlc2NyPSJQYXJhbWV0ZXIgJ3ZhbHVlJyBpcyBuZXZlciB1c2VkIj52YWx1ZTwvd2FybmluZz4pIHsKKyAgICByZXR1cm4gbnVsbDsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nNy9VbmNoZWNrZWRXYXJuaW5nSURFQTI2NzM4LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZzcvVW5jaGVja2VkV2FybmluZ0lERUEyNjczOC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgyNDk4MmMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZzcvVW5jaGVja2VkV2FybmluZ0lERUEyNjczOC5qYXZhCkBAIC0wLDAgKzEsMTkgQEAKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKKworCitjbGFzcyBVbmNoZWNrZWRCdWcKK3sKKworICB2b2lkIGZvbyhDb2xsZWN0aW9uPFN0cmluZz4gc3RyaW5ncykgeworICAgIGFzc2VydFRoYXQoc3RyaW5ncywgaGFzU2l6ZSgwKSk7CisgIH0KKworICBwdWJsaWMgc3RhdGljIDxFPiBNYXRjaGVyPENvbGxlY3Rpb248PyBleHRlbmRzIEU+PiBoYXNTaXplKGludCA8d2FybmluZyBkZXNjcj0iUGFyYW1ldGVyICdzaXplJyBpcyBuZXZlciB1c2VkIj5zaXplPC93YXJuaW5nPikgeworICAgIHJldHVybiBudWxsOworICB9CisKKyAgcHVibGljIHN0YXRpYyA8VD4gdm9pZCBhc3NlcnRUaGF0KFQgPHdhcm5pbmcgZGVzY3I9IlBhcmFtZXRlciAnYWN0dWFsJyBpcyBuZXZlciB1c2VkIj5hY3R1YWw8L3dhcm5pbmc+LCBNYXRjaGVyPD8gc3VwZXIgVD4gPHdhcm5pbmcgZGVzY3I9IlBhcmFtZXRlciAnbWF0Y2hlcicgaXMgbmV2ZXIgdXNlZCI+bWF0Y2hlcjwvd2FybmluZz4pIHsKKyAgfQorCisgIGludGVyZmFjZSBNYXRjaGVyPDx3YXJuaW5nIGRlc2NyPSJUeXBlIHBhcmFtZXRlciAnVCcgaXMgbmV2ZXIgdXNlZCI+VDwvd2FybmluZz4+IHt9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmc3L1VuY2hlY2tlZFdhcm5pbmdJREVBNTkyOTAuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nNy9VbmNoZWNrZWRXYXJuaW5nSURFQTU5MjkwLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGUzMTAzYwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nNy9VbmNoZWNrZWRXYXJuaW5nSURFQTU5MjkwLmphdmEKQEAgLTAsMCArMSwxMiBAQAoraW1wb3J0IGphdmEudXRpbC4qOworY2xhc3MgVGVzdCB7CisgIHsgCisgICAgTGlzdDw/IHN1cGVyIENoYXJTZXF1ZW5jZT4gbGlzdCA9IG5ldyBBcnJheUxpc3Q8Q2hhclNlcXVlbmNlPigpOworICAgIExpc3Q8PyBzdXBlciBTdHJpbmc+IGZvbyA9IGxpc3Q7CisgICAgU3lzdGVtLm91dC5wcmludGxuKGZvbyk7CisKKyAgICBMaXN0PD8gZXh0ZW5kcyBTdHJpbmc+IGxpc3QxID0gbmV3IEFycmF5TGlzdDxTdHJpbmc+KCk7CisgICAgTGlzdDw/IGV4dGVuZHMgQ2hhclNlcXVlbmNlPiBmb28xID0gbGlzdDE7CisgICAgU3lzdGVtLm91dC5wcmludGxuKGZvbzEpOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmc3L1VuY2hlY2tlZFdhcm5pbmdJREVBNjAxNjYuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nNy9VbmNoZWNrZWRXYXJuaW5nSURFQTYwMTY2LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjA2OTBiNgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nNy9VbmNoZWNrZWRXYXJuaW5nSURFQTYwMTY2LmphdmEKQEAgLTAsMCArMSwxNSBAQAorY2xhc3MgTm9kZTxFPiB7CisgIHB1YmxpYyBjbGFzcyBEZXRhaWxzIHsKKyAgICBwdWJsaWMgRSBkYXRhOworICB9CisgIHB1YmxpYyBEZXRhaWxzIGFkZE5vZGUoTm9kZTxFPiA8d2FybmluZyBkZXNjcj0iUGFyYW1ldGVyICdjaGlsZCcgaXMgbmV2ZXIgdXNlZCI+Y2hpbGQ8L3dhcm5pbmc+KSB7CisgICAgcmV0dXJuIG5ldyBEZXRhaWxzKCk7CisgIH0KK30KK2NsYXNzIFRlc3Q1XzEgeworICBzdGF0aWMgTm9kZTxTdHJpbmc+LkRldGFpbHMgZGV0YWlsczsKKyAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworICAgIE5vZGU8U3RyaW5nPiBzdHJpbmdOb2RlID0gbmV3IE5vZGU8U3RyaW5nPigpOworICAgIGRldGFpbHMgPSA8d2FybmluZyBkZXNjcj0iVW5jaGVja2VkIGFzc2lnbm1lbnQ6ICdOb2RlLkRldGFpbHMnIHRvICdOb2RlPGphdmEubGFuZy5TdHJpbmc+LkRldGFpbHMnIj4oTm9kZS5EZXRhaWxzKXN0cmluZ05vZGUuYWRkTm9kZShuZXcgTm9kZTxTdHJpbmc+KCkpPC93YXJuaW5nPjsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nNy9VbmNoZWNrZWRXYXJuaW5nSURFQTcwNjIwLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZzcvVW5jaGVja2VkV2FybmluZ0lERUE3MDYyMC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRmODU2YWUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZzcvVW5jaGVja2VkV2FybmluZ0lERUE3MDYyMC5qYXZhCkBAIC0wLDAgKzEsMjkgQEAKK2NsYXNzIFVuY2hlY2tlZENhc3RGYWxzZVBvc2l0aXZlPFQ+IHsKKworICBwcml2YXRlIHZvaWQgPHdhcm5pbmcgZGVzY3I9IlByaXZhdGUgbWV0aG9kICd0ZXN0KGphdmEubGFuZy5PYmplY3QsIGphdmEubGFuZy5PYmplY3QpJyBpcyBuZXZlciB1c2VkIj50ZXN0PC93YXJuaW5nPiggT2JqZWN0IG9uZSwgT2JqZWN0IHR3byApIHsKKyAgICBAU3VwcHJlc3NXYXJuaW5ncyggInVuY2hlY2tlZCIgKQorICAgIFVuY2hlY2tlZENhc3RGYWxzZVBvc2l0aXZlPFQ+IG91dGVyID0gKCBVbmNoZWNrZWRDYXN0RmFsc2VQb3NpdGl2ZTxUPiApIG9uZTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4ob3V0ZXIpOworCisgICAgSW5uZXJDbGFzcyBpbm5lciA9IDx3YXJuaW5nIGRlc2NyPSJVbmNoZWNrZWQgY2FzdDogJ2phdmEubGFuZy5PYmplY3QnIHRvICdVbmNoZWNrZWRDYXN0RmFsc2VQb3NpdGl2ZS5Jbm5lckNsYXNzJyI+KCBJbm5lckNsYXNzICkgdHdvPC93YXJuaW5nPjsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oaW5uZXIpOworICB9CisKKyAgcHJpdmF0ZSBjbGFzcyBJbm5lckNsYXNzIHt9Cit9CisKKworY2xhc3MgVW5jaGVja2VkQ2FzdEZhbHNlUG9zaXRpdmUxPFQ+IHsKKworICBwcml2YXRlIHZvaWQgPHdhcm5pbmcgZGVzY3I9IlByaXZhdGUgbWV0aG9kICd0ZXN0KGphdmEubGFuZy5PYmplY3QsIGphdmEubGFuZy5PYmplY3QpJyBpcyBuZXZlciB1c2VkIj50ZXN0PC93YXJuaW5nPiggT2JqZWN0IG9uZSwgT2JqZWN0IHR3byApIHsKKyAgICBAU3VwcHJlc3NXYXJuaW5ncyggInVuY2hlY2tlZCIgKQorICAgIFVuY2hlY2tlZENhc3RGYWxzZVBvc2l0aXZlMTxUPiBvdXRlciA9ICggVW5jaGVja2VkQ2FzdEZhbHNlUG9zaXRpdmUxPFQ+ICkgb25lOworICAgIFN5c3RlbS5vdXQucHJpbnRsbihvdXRlcik7CisKKyAgICBVbmNoZWNrZWRDYXN0RmFsc2VQb3NpdGl2ZTE8VD4uSW5uZXJDbGFzcyBpbm5lciA9IDx3YXJuaW5nIGRlc2NyPSJVbmNoZWNrZWQgY2FzdDogJ2phdmEubGFuZy5PYmplY3QnIHRvICdVbmNoZWNrZWRDYXN0RmFsc2VQb3NpdGl2ZTE8VD4uSW5uZXJDbGFzcyciPiggVW5jaGVja2VkQ2FzdEZhbHNlUG9zaXRpdmUxPFQ+LklubmVyQ2xhc3MgKSB0d288L3dhcm5pbmc+OworICAgIFN5c3RlbS5vdXQucHJpbnRsbihpbm5lcik7CisgIH0KKworICBwcml2YXRlIGNsYXNzIElubmVyQ2xhc3Mge30KKworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nNy9VbnVzZWQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nNy9VbnVzZWQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYzMwNTA0Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmc3L1VudXNlZC5qYXZhCkBAIC0wLDAgKzEsNjcgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwMC0yMDEyIEpldEJyYWlucyBzLnIuby4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCitpbXBvcnQgamF2YS5pby4qOworaW1wb3J0IGphdmEubmV0Lio7CisKK2NsYXNzIFVudXNlZERlY2xCdWcgeworICAgIHB1YmxpYyBzdGF0aWMgZW51bSBDb25jZXJuIHsKKyAgICAgICAgLy8gVGhlc2UgZmllbGRzIGFyZSB1c2VkISAgSnVzdCBiZWNhdXNlIEkgZG9uJ3QgbWVudGlvbiB0aGVtIGJ5IG5hbWUKKyAgICAgICAgLy8gZG9lc24ndCBtZWFuIHRoZXkgYXJlbid0IHVzZWQhCisgICAgICAgIC8vIElERUEgdGVsbHMgbWUgSSBuZWVkOiBAU3VwcHJlc3NXYXJuaW5ncyh7IlVudXNlZERlY2xhcmF0aW9uIn0pCisgICAgICAgIExPVywKKyAgICAgICAgTUVESVVNLAorICAgICAgICBISUdIOworICAgIH07CisKKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ29uY2VybnMgYXJlOiIpOworCisgICAgICAgIC8vIEludm9raW5nIENvbmNlcm4udmFsdWVzKCkgc2hvdWxkIGNvdW50IGFzIHVzaW5nIGFsbCB0aGUgZmllbGRzIGluIHRoZQorICAgICAgICAvLyBlbnVtLgorICAgICAgICBmb3IgKENvbmNlcm4gY29uY2VybiA6IENvbmNlcm4udmFsdWVzKCkpIHsKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnQoIlx0Iik7CisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oY29uY2Vybik7CisgICAgICAgIH0gLy8gZW5kIGZvcgorICAgIH0KK30KKworY2xhc3MgRm9yRWFjaFRlc3QgeworICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisgICAgaW50IGNvdW50ID0gMDsKKyAgICBmb3IgKFN0cmluZyBpZ25vcmUgOiBhcmdzKSB7CisgICAgICBjb3VudCsrOworICAgIH0KKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oY291bnQpOworICB9Cit9CisKK2NsYXNzIFRyeVdpdGhSZXNvdXJjZXNUZXN0IHsKKyAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworICAgIFN5c3RlbS5vdXQucHJpbnRsbihjaGVja1VybCgiYmFkIHVybCIpKTsKKyAgfQorCisgIHByaXZhdGUgc3RhdGljIFN0cmluZyBjaGVja1VybChTdHJpbmcgdXJsKSB7CisgICAgdHJ5IHsKKyAgICAgIFVSTENvbm5lY3Rpb24gY29ubmVjdGlvbiA9IG5ldyBVUkwodXJsKS5vcGVuQ29ubmVjdGlvbigpOworICAgICAgdHJ5IChJbnB1dFN0cmVhbSBpZ25vcmVkID0gY29ubmVjdGlvbi5nZXRJbnB1dFN0cmVhbSgpKSB7CisgICAgICAgIHJldHVybiBjb25uZWN0aW9uLmdldFVSTCgpLnRvU3RyaW5nKCk7CisgICAgICB9CisgICAgfQorICAgIGNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CisgICAgICByZXR1cm4gbnVsbDsKKyAgICB9CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZzcvVXNlZE1ldGhvZHNCeU1ldGhvZFJlZmVyZW5jZXMuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nNy9Vc2VkTWV0aG9kc0J5TWV0aG9kUmVmZXJlbmNlcy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM1ZDA5MDAKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZzcvVXNlZE1ldGhvZHNCeU1ldGhvZFJlZmVyZW5jZXMuamF2YQpAQCAtMCwwICsxLDEyIEBACitjbGFzcyBDIHsKKyAgaW50ZXJmYWNlIFNpbXBsZXN0IHsKKyAgICB2b2lkIG0oKTsKKyAgfQorICBwcml2YXRlIHN0YXRpYyB2b2lkIHNpbXBsZXN0MSgpIHsgfQorICBwcml2YXRlIHN0YXRpYyB2b2lkIDx3YXJuaW5nIGRlc2NyPSJQcml2YXRlIG1ldGhvZCAnc2ltcGxlc3QoKScgaXMgbmV2ZXIgdXNlZCI+c2ltcGxlc3Q8L3dhcm5pbmc+KCkgeyB9CisKKyAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworICAgIFNpbXBsZXN0IG8gPSBDOjpzaW1wbGVzdDE7CisgICAgU3lzdGVtLm91dC5wcmludGxuKG8pOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmc3L1dyb25nQXJnc0FuZFVua25vd25UeXBlUGFyYW1zLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZzcvV3JvbmdBcmdzQW5kVW5rbm93blR5cGVQYXJhbXMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YmZlMTdjCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmc3L1dyb25nQXJnc0FuZFVua25vd25UeXBlUGFyYW1zLmphdmEKQEAgLTAsMCArMSwxMSBAQAorY2xhc3MgVGNwQ29ubmVjdGlvbiBleHRlbmRzIENsaWVudENvbm5lY3Rpb24geworICAgIENvbm5lY3Rpb25FdmVudERlbGVnYXRlPD8gZXh0ZW5kcyBDbGllbnRDb25uZWN0aW9uPiBldmVudERlbGVnYXRlOworICAgIHsKKyAgICAgICAgZXZlbnREZWxlZ2F0ZS48Q2xpZW50Q29ubmVjdGlvbj4gb25EaXNjb25uZWN0PGVycm9yIGRlc2NyPSInb25EaXNjb25uZWN0KGNhcHR1cmU8PyBleHRlbmRzIENsaWVudENvbm5lY3Rpb24+KScgaW4gJ0Nvbm5lY3Rpb25FdmVudERlbGVnYXRlJyBjYW5ub3QgYmUgYXBwbGllZCB0byAnKFRjcENvbm5lY3Rpb24pJyI+KHRoaXMpPC9lcnJvcj47CisgICAgfQorfQorCitjbGFzcyBDbGllbnRDb25uZWN0aW9uIHt9CitpbnRlcmZhY2UgQ29ubmVjdGlvbkV2ZW50RGVsZWdhdGU8VCBleHRlbmRzIENsaWVudENvbm5lY3Rpb24+IHsKKyAgICB2b2lkIG9uRGlzY29ubmVjdChUIHQpOworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nNy9hbWJpZ3VvdXMvcGNrL0FtYmlndW91c01ldGhvZENhbGwuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nNy9hbWJpZ3VvdXMvcGNrL0FtYmlndW91c01ldGhvZENhbGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYWRhZWNkCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmc3L2FtYmlndW91cy9wY2svQW1iaWd1b3VzTWV0aG9kQ2FsbC5qYXZhCkBAIC0wLDAgKzEsMjEgQEAKK3BhY2thZ2UgcGNrOworCitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK2ltcG9ydCBzdGF0aWMgcGNrLkMuZm9vOworaW1wb3J0IHN0YXRpYyBwY2suRC5mb287CisKK2NsYXNzIEMgeworICAgIHN0YXRpYyA8VD4gdm9pZCBmb28oTGlzdDw/IGV4dGVuZHMgTGlzdDxUPj4geCkgeyB9Cit9CisKK2NsYXNzIEQgeworICAgIHN0YXRpYyA8VD4gU3RyaW5nIGZvbyhMaXN0PExpc3Q8VD4+IHgpIHsgcmV0dXJuIG51bGw7IH0KK30KKworcHVibGljIGNsYXNzIE1haW4geworICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpeworICAgICAgICBMaXN0PExpc3Q8U3RyaW5nPj4geCA9IG51bGw7CisgICAgICAgIGZvbyh4KS50b0xvd2VyQ2FzZSgpOworICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nNy9hbWJpZ3VvdXNBcnJheUluU3Vic3QvcGNrL0FtYmlndW91c01ldGhvZENhbGwuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nNy9hbWJpZ3VvdXNBcnJheUluU3Vic3QvcGNrL0FtYmlndW91c01ldGhvZENhbGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYTgzMzQyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmc3L2FtYmlndW91c0FycmF5SW5TdWJzdC9wY2svQW1iaWd1b3VzTWV0aG9kQ2FsbC5qYXZhCkBAIC0wLDAgKzEsMjEgQEAKK3BhY2thZ2UgcGNrOworCitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK2ltcG9ydCBzdGF0aWMgcGNrLkMuZm9vOworaW1wb3J0IHN0YXRpYyBwY2suRC5mb287CisKK2NsYXNzIEMgeworICAgIHN0YXRpYyA8VD4gdm9pZCBmb28oTGlzdDxUPiB4KSB7IH0KK30KKworY2xhc3MgRCB7CisgICAgc3RhdGljIDxUPiBTdHJpbmcgZm9vKExpc3Q8VFtdPiB4KSB7IHJldHVybiBudWxsOyB9Cit9CisKK3B1YmxpYyBjbGFzcyBNYWluIHsKKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKXsKKyAgICAgICAgTGlzdDxTdHJpbmdbXT4geCA9IG51bGw7CisgICAgICAgIGZvbyh4KS50b0xvd2VyQ2FzZSgpOworICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nNy9hbWJpZ3VvdXNJREVBMjE2NjAvcGNrL0FtYmlndW91c01ldGhvZENhbGwuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nNy9hbWJpZ3VvdXNJREVBMjE2NjAvcGNrL0FtYmlndW91c01ldGhvZENhbGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZDczMTVkCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmc3L2FtYmlndW91c0lERUEyMTY2MC9wY2svQW1iaWd1b3VzTWV0aG9kQ2FsbC5qYXZhCkBAIC0wLDAgKzEsMTUgQEAKK3BhY2thZ2UgcGNrOworCitjbGFzcyBUZXN0Q2FzZSB7CisgIHZvaWQgYXNzZXJ0RXF1YWxzKE9iamVjdCBvMSwgT2JqZWN0IG8yKSB7fQorCisgIHZvaWQgYXNzZXJ0RXF1YWxzKGludCBpMSwgaW50IGkyKSB7fQorfQorCitjbGFzcyBUZXN0IGV4dGVuZHMgVGVzdENhc2UgeworICB2b2lkIHRlc3QoKSB7CisgICAgaW50IGV4cGVjdGVkID0gMTsKKyAgICBJbnRlZ2VyIGFjdHVhbCA9IDI7CisgICAgYXNzZXJ0RXF1YWxzPGVycm9yIGRlc2NyPSJBbWJpZ3VvdXMgbWV0aG9kIGNhbGw6IGJvdGggJ1Rlc3RDYXNlLmFzc2VydEVxdWFscyhPYmplY3QsIE9iamVjdCknIGFuZCAnVGVzdENhc2UuYXNzZXJ0RXF1YWxzKGludCwgaW50KScgbWF0Y2giPihleHBlY3RlZCwgYWN0dWFsKTwvZXJyb3I+OworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmc3L2FtYmlndW91c0lERUEyMjU0Ny9wY2svQW1iaWd1b3VzTWV0aG9kQ2FsbC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmc3L2FtYmlndW91c0lERUEyMjU0Ny9wY2svQW1iaWd1b3VzTWV0aG9kQ2FsbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU5MWZhYzUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZzcvYW1iaWd1b3VzSURFQTIyNTQ3L3Bjay9BbWJpZ3VvdXNNZXRob2RDYWxsLmphdmEKQEAgLTAsMCArMSwzMCBAQAorLyoKKyAqIENvcHlyaWdodCAyMDAwLTIwMTIgSmV0QnJhaW5zIHMuci5vLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KK3BhY2thZ2UgcGNrOworCitpbXBvcnQgc3RhdGljIHBjay5Bc3NlcnQuYXNzZXJ0RXF1YWxzOworCitjbGFzcyBBc3NlcnQgeworICBzdGF0aWMgdm9pZCBhc3NlcnRFcXVhbHMoT2JqZWN0IG8xLCBPYmplY3QgbzIpIHt9CisKKyAgc3RhdGljIHZvaWQgYXNzZXJ0RXF1YWxzKGxvbmcgbDEsIGxvbmcgbDIpIHt9Cit9CisKK2NsYXNzIFRlc3QgeworICB2b2lkIHRlc3QoKSB7CisgICAgYXNzZXJ0RXF1YWxzPGVycm9yIGRlc2NyPSJBbWJpZ3VvdXMgbWV0aG9kIGNhbGw6IGJvdGggJ0Fzc2VydC5hc3NlcnRFcXVhbHMoT2JqZWN0LCBPYmplY3QpJyBhbmQgJ0Fzc2VydC5hc3NlcnRFcXVhbHMobG9uZywgbG9uZyknIG1hdGNoIj4oMTAwTCwgTG9uZy52YWx1ZU9mKDEwMEwpKTwvZXJyb3I+OworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmc3L2FtYmlndW91c0lERUEyNDc2OC9wY2svQW1iaWd1b3VzTWV0aG9kQ2FsbC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmc3L2FtYmlndW91c0lERUEyNDc2OC9wY2svQW1iaWd1b3VzTWV0aG9kQ2FsbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM4ZTk4MzIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZzcvYW1iaWd1b3VzSURFQTI0NzY4L3Bjay9BbWJpZ3VvdXNNZXRob2RDYWxsLmphdmEKQEAgLTAsMCArMSw0MyBAQAorLyoKKyAqIENvcHlyaWdodCAyMDAwLTIwMTIgSmV0QnJhaW5zIHMuci5vLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KK3BhY2thZ2UgcGNrOworCitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworY2xhc3MgSWRlYUJ1ZyB7CisKKyAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworICAgIENsYXNzQS5jb3B5T2YobmV3IEFycmF5TGlzdDxTdHJpbmc+KCkpOworICB9CisKKyAgcHJpdmF0ZSBzdGF0aWMgY2xhc3MgQ2xhc3NBPEU+IGV4dGVuZHMgQ2xhc3NCPEU+IHsKKworICAgIDxlcnJvciBkZXNjcj0iJ2NvcHlPZihJdGVyYWJsZTw/IGV4dGVuZHMgRT4pJyBpbiAncGNrLklkZWFCdWcuQ2xhc3NBJyBjbGFzaGVzIHdpdGggJ2NvcHlPZihJdGVyYWJsZTw/IGV4dGVuZHMgRT4pJyBpbiAncGNrLklkZWFCdWcuQ2xhc3NCJzsgYm90aCBtZXRob2RzIGhhdmUgc2FtZSBlcmFzdXJlLCB5ZXQgbmVpdGhlciBoaWRlcyB0aGUgb3RoZXIiPnB1YmxpYyBzdGF0aWMgPEUgZXh0ZW5kcyBDb21wYXJhYmxlPD8gc3VwZXIgRT4+IENsYXNzQTxFPiBjb3B5T2YoCisgICAgICAgIEl0ZXJhYmxlPD8gZXh0ZW5kcyBFPiBlbGVtZW50cyk8L2Vycm9yPiB7CisgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkhlbGxvIGZyb20gQ2xhc3NBIik7CisgICAgICByZXR1cm4gbnVsbDsKKyAgICB9CisgIH0KKworICBwcml2YXRlIHN0YXRpYyBjbGFzcyBDbGFzc0I8RT4geworCisgICAgcHVibGljIHN0YXRpYyA8RT4gQ2xhc3NBPEU+IGNvcHlPZihJdGVyYWJsZTw/IGV4dGVuZHMgRT4gZWxlbWVudHMpIHsKKyAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSGVsbG8gZnJvbSBDbGFzc0IiKTsKKyAgICAgIHJldHVybiBudWxsOworICAgIH0KKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nNy9hbWJpZ3VvdXNJREVBMjUwOTcvcGNrL0FtYmlndW91c01ldGhvZENhbGwuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nNy9hbWJpZ3VvdXNJREVBMjUwOTcvcGNrL0FtYmlndW91c01ldGhvZENhbGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ODViYTdlCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmc3L2FtYmlndW91c0lERUEyNTA5Ny9wY2svQW1iaWd1b3VzTWV0aG9kQ2FsbC5qYXZhCkBAIC0wLDAgKzEsMjkgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwMC0yMDEyIEpldEJyYWlucyBzLnIuby4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCitwYWNrYWdlIHBjazsKK2NsYXNzIEdlbmVyaWNzPFQ+IHsKKyAgcHVibGljIHZvaWQgcmVuZGVyKFQgdCkgeworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiZ2VuZXJpYyIpOworICB9CisKKyAgcHVibGljIHZvaWQgcmVuZGVyKEludGVnZXIgdCkgeworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiaW50Iik7CisgIH0KKworICBzdGF0aWMgeworICAgIG5ldyBHZW5lcmljczxJbnRlZ2VyPigpLnJlbmRlcjxlcnJvciBkZXNjcj0iQW1iaWd1b3VzIG1ldGhvZCBjYWxsOiBib3RoICdHZW5lcmljcy5yZW5kZXIoSW50ZWdlciknIGFuZCAnR2VuZXJpY3MucmVuZGVyKEludGVnZXIpJyBtYXRjaCI+KDUpPC9lcnJvcj47CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZzcvYW1iaWd1b3VzSURFQTU3MjY5L3Bjay9BbWJpZ3VvdXNNZXRob2RDYWxsLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZzcvYW1iaWd1b3VzSURFQTU3MjY5L3Bjay9BbWJpZ3VvdXNNZXRob2RDYWxsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzhhZjA2OQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nNy9hbWJpZ3VvdXNJREVBNTcyNjkvcGNrL0FtYmlndW91c01ldGhvZENhbGwuamF2YQpAQCAtMCwwICsxLDE5IEBACitwYWNrYWdlIHBjazsKKworY2xhc3MgQSB7CisgIDxUPiB2b2lkIGZvbyhUIHgpIHsKKyAgICBmb28oMSk7CisKKyAgICBsb25nIHgxID0gMUw7CisgICAgZm9vKHgxKTsKKyAgICAKKyAgICBMb25nIHgyID0gMUw7CisgICAgZm9vKHgyKTsKKyAgICAKKyAgICBJbnRlZ2VyIHgzID0gMTsKKyAgICBmb28oeDMpOworICB9CisKKyAgdm9pZCBmb28obG9uZyB4KSB7CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nNy9hbWJpZ3VvdXNJREVBNTcyNzgvcGNrL0FtYmlndW91c01ldGhvZENhbGwuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nNy9hbWJpZ3VvdXNJREVBNTcyNzgvcGNrL0FtYmlndW91c01ldGhvZENhbGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YWI4MjVhCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmc3L2FtYmlndW91c0lERUE1NzI3OC9wY2svQW1iaWd1b3VzTWV0aG9kQ2FsbC5qYXZhCkBAIC0wLDAgKzEsMTIgQEAKK3BhY2thZ2UgcGNrOworCitpbnRlcmZhY2UgSXsKKyAgICA8VCBleHRlbmRzIEl0ZXJhYmxlPFN0cmluZz4gJiBDbG9uZWFibGU+IHZvaWQgZm9vKCk7Cit9CisKK2Fic3RyYWN0IGNsYXNzIEEgeworICAgIGFic3RyYWN0IDxUIGV4dGVuZHMgSXRlcmFibGU8U3RyaW5nPj4gdm9pZCBmb28oKTsKKyAgICA8VCBleHRlbmRzIEEgJiBJPiB2b2lkIGJhcihUIHgpeworICAgICAgICB4LmZvbzxlcnJvciBkZXNjcj0iQW1iaWd1b3VzIG1ldGhvZCBjYWxsOiBib3RoICdBLmZvbygpJyBhbmQgJ0kuZm9vKCknIG1hdGNoIj4oKTwvZXJyb3I+OworICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nNy9hbWJpZ3VvdXNJREVBNTczMDYvcGNrL0FtYmlndW91c01ldGhvZENhbGwuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nNy9hbWJpZ3VvdXNJREVBNTczMDYvcGNrL0FtYmlndW91c01ldGhvZENhbGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZTc4MDdkCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmc3L2FtYmlndW91c0lERUE1NzMwNi9wY2svQW1iaWd1b3VzTWV0aG9kQ2FsbC5qYXZhCkBAIC0wLDAgKzEsMTUgQEAKK3BhY2thZ2UgcGNrOworCitjbGFzcyBBPFQ+IHt9CisKK2ludGVyZmFjZSBJQXsKKyAgICA8VD4gdm9pZCBmb28oQTxUPiB4KTsKK30KK2ludGVyZmFjZSBJQnsKKyAgICA8VCBleHRlbmRzIEV4Y2VwdGlvbj4gdm9pZCBmb28oQTxUPiB4KTsKK30KK2NsYXNzIEMgeworICAgIDw8ZXJyb3IgZGVzY3I9Iidmb28oQTxUPiknIGluICdwY2suSUInIGNsYXNoZXMgd2l0aCAnZm9vKEE8VD4pJyBpbiAncGNrLklBJzsgYm90aCBtZXRob2RzIGhhdmUgc2FtZSBlcmFzdXJlLCB5ZXQgbmVpdGhlciBvdmVycmlkZXMgdGhlIG90aGVyIj48L2Vycm9yPlQgZXh0ZW5kcyBJQSAmIElCPiB2b2lkIGJhcihUIHgsIEE8RXhjZXB0aW9uPiB5KXsKKyAgICAgICAgeC5mb28oeSk7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmc3L2FtYmlndW91c0lERUE1NzMxNy9wY2svQW1iaWd1b3VzTWV0aG9kQ2FsbC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmc3L2FtYmlndW91c0lERUE1NzMxNy9wY2svQW1iaWd1b3VzTWV0aG9kQ2FsbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEyOGZiZTEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZzcvYW1iaWd1b3VzSURFQTU3MzE3L3Bjay9BbWJpZ3VvdXNNZXRob2RDYWxsLmphdmEKQEAgLTAsMCArMSwxMSBAQAorcGFja2FnZSBwY2s7CisKK2NsYXNzIEI8Sz4ge30KK2NsYXNzIEE8Sz4gZXh0ZW5kcyBCPEs+IHsKKyAgICB2b2lkIGZvbyhBPEE8U3RyaW5nPj4gYil7CisgICAgICAgIGJhcjxlcnJvciBkZXNjcj0iQW1iaWd1b3VzIG1ldGhvZCBjYWxsOiBib3RoICdBLmJhcihCPD8gZXh0ZW5kcyBBPFN0cmluZz4+KScgYW5kICdBLmJhcihBPD8gZXh0ZW5kcyBCPFN0cmluZz4+KScgbWF0Y2giPihiKTwvZXJyb3I+OworICAgIH0KKworICAgIDxUPiB2b2lkIGJhcihCPD8gZXh0ZW5kcyBBPFQ+PiBhKXt9CisgICAgPFQ+IHZvaWQgYmFyKEE8PyBleHRlbmRzIEI8VD4+IGEpe30KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nNy9hbWJpZ3VvdXNJREVBNTc1MzUvcGNrL0FtYmlndW91c01ldGhvZENhbGwuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nNy9hbWJpZ3VvdXNJREVBNTc1MzUvcGNrL0FtYmlndW91c01ldGhvZENhbGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOTQ5YTJkCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmc3L2FtYmlndW91c0lERUE1NzUzNS9wY2svQW1iaWd1b3VzTWV0aG9kQ2FsbC5qYXZhCkBAIC0wLDAgKzEsOSBAQAorcGFja2FnZSBwY2s7CisKK2Fic3RyYWN0IGNsYXNzIEN7CisgICAgYWJzdHJhY3QgPFQgZXh0ZW5kcyBDb21wYXJhYmxlPD8+PiB2b2lkIGZvbyhUIHgpOworICAgIGFic3RyYWN0IDxUIGV4dGVuZHMgTnVtYmVyICYgQ29tcGFyYWJsZTw/Pj4gdm9pZCBmb28oVCB4KTsKKyAgICB2b2lkIGJhcihJbnRlZ2VyIHgpeworICAgICAgICBmb28oeCk7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmc3L2FtYmlndW91c0lERUE2NzU3My9wY2svQW1iaWd1b3VzTWV0aG9kQ2FsbC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmc3L2FtYmlndW91c0lERUE2NzU3My9wY2svQW1iaWd1b3VzTWV0aG9kQ2FsbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI2M2I2YWEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZzcvYW1iaWd1b3VzSURFQTY3NTczL3Bjay9BbWJpZ3VvdXNNZXRob2RDYWxsLmphdmEKQEAgLTAsMCArMSwxNyBAQAoraW50ZXJmYWNlIEEKK3sKKyAgICBhYnN0cmFjdCB2b2lkIGZvbyhTdHJpbmdbXSAuLi4gcyk7Cit9CisKK2ludGVyZmFjZSBCCit7CisgICAgYWJzdHJhY3Qgdm9pZCBmb28oU3RyaW5nW10gcyk7Cit9CisKK2NsYXNzIEM8VCBleHRlbmRzIEEgJiBCPgoreworICAgIHZvaWQgYmFyKFQgeCkKKyAgICB7CisgICAgICAgIHguZm9vKG51bGwpOworICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nNy9hbWJpZ3VvdXNJREVBNjc4MzIvcGNrL0FtYmlndW91c01ldGhvZENhbGwuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nNy9hbWJpZ3VvdXNJREVBNjc4MzIvcGNrL0FtYmlndW91c01ldGhvZENhbGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NTkxMGQxCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmc3L2FtYmlndW91c0lERUE2NzgzMi9wY2svQW1iaWd1b3VzTWV0aG9kQ2FsbC5qYXZhCkBAIC0wLDAgKzEsMTcgQEAKK3BhY2thZ2UgcGNrOworaW1wb3J0IHN0YXRpYyBwY2suRC5mb287CitpbXBvcnQgc3RhdGljIHBjay5DLmZvbzsKKworcHVibGljIGNsYXNzIEMgeworICAgICBwdWJsaWMgc3RhdGljIDxUIGV4dGVuZHMgQ29tcGFyYWJsZTxTPiwgUz4gdm9pZCBmb28oVCB4KXt9Cit9CisKK2NsYXNzIEQgeworICAgICBwdWJsaWMgc3RhdGljIDxUIGV4dGVuZHMgQ29tcGFyYWJsZTw/Pj4gdm9pZCBmb28oVCB4KXt9Cit9CisKK2NsYXNzIEJ7CisgICAgeworICAgICAgIGZvbzxlcnJvciBkZXNjcj0iQW1iaWd1b3VzIG1ldGhvZCBjYWxsOiBib3RoICdELmZvbyhJbnRlZ2VyKScgYW5kICdDLmZvbyhJbnRlZ2VyKScgbWF0Y2giPigxKTwvZXJyb3I+OworICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nNy9hbWJpZ3VvdXNJREVBNjc4MzcvcGNrL0FtYmlndW91c01ldGhvZENhbGwuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nNy9hbWJpZ3VvdXNJREVBNjc4MzcvcGNrL0FtYmlndW91c01ldGhvZENhbGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZmJjNWJjCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmc3L2FtYmlndW91c0lERUE2NzgzNy9wY2svQW1iaWd1b3VzTWV0aG9kQ2FsbC5qYXZhCkBAIC0wLDAgKzEsMTggQEAKK3BhY2thZ2UgcGNrOworCitpbXBvcnQgc3RhdGljIHBjay5ELmZvbzsKK2ltcG9ydCBzdGF0aWMgcGNrLkMuZm9vOworCitwdWJsaWMgY2xhc3MgQyB7CisgICAgIHB1YmxpYyBzdGF0aWMgPFQ+IHZvaWQgZm9vKENvbXBhcmFibGU8PyBleHRlbmRzIENvbXBhcmFibGU8VD4+IHgpe30KK30KKworY2xhc3MgRCB7CisgICAgcHVibGljIHN0YXRpYyB2b2lkIGZvbyhDb21wYXJhYmxlPD8gZXh0ZW5kcyBOdW1iZXI+IHgpe30KK30KKworY2xhc3MgQnsKKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgYmFyKCl7CisgICAgICAgIGZvbzxlcnJvciBkZXNjcj0iQW1iaWd1b3VzIG1ldGhvZCBjYWxsOiBib3RoICdELmZvbyhDb21wYXJhYmxlPD8gZXh0ZW5kcyBOdW1iZXI+KScgYW5kICdDLmZvbyhDb21wYXJhYmxlPD8gZXh0ZW5kcyBDb21wYXJhYmxlPEludGVnZXI+PiknIG1hdGNoIj4oMSk8L2Vycm9yPjsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZzcvYW1iaWd1b3VzSURFQTc4MDI3L3Bjay9BbWJpZ3VvdXNNZXRob2RDYWxsLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZzcvYW1iaWd1b3VzSURFQTc4MDI3L3Bjay9BbWJpZ3VvdXNNZXRob2RDYWxsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDAwMTZhMgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nNy9hbWJpZ3VvdXNJREVBNzgwMjcvcGNrL0FtYmlndW91c01ldGhvZENhbGwuamF2YQpAQCAtMCwwICsxLDE3IEBACitwYWNrYWdlIHBjazsKK2NsYXNzIFRlc3QgeworICAgdm9pZCB0ZXN0KCkgeworICAgICAgIEIubWV0aG9kKG5ldyBBcmd1bWVudEIoKSk7CisgICB9Cit9CisKK2NsYXNzIEEgeworICAgc3RhdGljIHZvaWQgbWV0aG9kKEFyZ3VtZW50QSBhKSB7IH0KK30KKworY2xhc3MgQiBleHRlbmRzIEEgeworICAgc3RhdGljIHZvaWQgbWV0aG9kKEFyZ3VtZW50QiBiKSB7IH0KK30KKworY2xhc3MgQXJndW1lbnRBPFQ+IHt9CitjbGFzcyBBcmd1bWVudEIgZXh0ZW5kcyBBcmd1bWVudEE8T2JqZWN0PiB7fQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nNy9hbWJpZ3VvdXNJREVBODc2NzIvcGNrL0FtYmlndW91c01ldGhvZENhbGwuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nNy9hbWJpZ3VvdXNJREVBODc2NzIvcGNrL0FtYmlndW91c01ldGhvZENhbGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MmJiZjAwCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmc3L2FtYmlndW91c0lERUE4NzY3Mi9wY2svQW1iaWd1b3VzTWV0aG9kQ2FsbC5qYXZhCkBAIC0wLDAgKzEsMjMgQEAKK3BhY2thZ2UgcGNrOworY2xhc3MgQmFzZU1hdGNoZXI8VD4geworfQorCitjbGFzcyBNeU1hdGNoZXIgZXh0ZW5kcyBCYXNlTWF0Y2hlcjxTdHJpbmc+IHsKK30KKworY2xhc3MgRXhwZWN0YXRpb25zIHsKKyAgICBwdWJsaWMgPFQ+IFQgd2l0aChUIHQpIHsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJUIik7CisgICAgICAgIHJldHVybiBudWxsOworICAgIH0KKworICAgIHB1YmxpYyA8VD4gVCB3aXRoKEJhc2VNYXRjaGVyPFQ+IG0pIHsKKyAgICAgICAgcmV0dXJuIG51bGw7CisgICAgfQorCisgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworICAgICAgICBNeU1hdGNoZXIgdCA9IG5ldyBNeU1hdGNoZXIoKTsKKyAgICAgICAgU3RyaW5nIHcgPSBuZXcgRXhwZWN0YXRpb25zKCkud2l0aCggdCk7CisgICAgfQorfQorCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZzcvYW1iaWd1b3VzSW5mZXJlbmNlT3JkZXIvcGNrL0FtYmlndW91c01ldGhvZENhbGwuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nNy9hbWJpZ3VvdXNJbmZlcmVuY2VPcmRlci9wY2svQW1iaWd1b3VzTWV0aG9kQ2FsbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZjMmViZDkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZzcvYW1iaWd1b3VzSW5mZXJlbmNlT3JkZXIvcGNrL0FtYmlndW91c01ldGhvZENhbGwuamF2YQpAQCAtMCwwICsxLDM3IEBACisvKgorICogQ29weXJpZ2h0IDIwMDAtMjAxMiBKZXRCcmFpbnMgcy5yLm8uCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworcGFja2FnZSBwY2s7CisKK2NsYXNzIEtleTxLPnt9CisKK3B1YmxpYyBjbGFzcyBDIHsKKyAgICAgcHVibGljIDxUPiB2b2lkIHB1dENvcHlhYmxlVXNlckRhdGEoS2V5PFQ+IGtleSwgVCB2YWx1ZSkgeworICAgICB9Cit9CisKK2ludGVyZmFjZSBEIHsKKyAgPFQ+IHZvaWQgcHV0Q29weWFibGVVc2VyRGF0YShLZXk8VD4ga2V5LCBUIHZhbHVlKTsKK30KKworY2xhc3MgQiBleHRlbmRzIEMgaW1wbGVtZW50cyBEIHt9CisKK2NsYXNzIEEgeworICBwcml2YXRlIHN0YXRpYyBmaW5hbCBLZXk8SW50ZWdlcj4gSU5ERU5UX0lORk8gPSBuZXcgS2V5PEludGVnZXI+KCk7CisgIAorICBwdWJsaWMgc3RhdGljIHZvaWQgZm9vKEIgYiwgaW50IG9sZEluZGVudGF0aW9uKSB7CisgICAgYi5wdXRDb3B5YWJsZVVzZXJEYXRhKElOREVOVF9JTkZPLCBvbGRJbmRlbnRhdGlvbiA+PSAwID8gb2xkSW5kZW50YXRpb24gOiBudWxsKTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmc3L2FtYmlndW91c0luaGVyaXRhbmNlL3Bjay9BbWJpZ3VvdXNNZXRob2RDYWxsLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZzcvYW1iaWd1b3VzSW5oZXJpdGFuY2UvcGNrL0FtYmlndW91c01ldGhvZENhbGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ODBhMzBhCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmc3L2FtYmlndW91c0luaGVyaXRhbmNlL3Bjay9BbWJpZ3VvdXNNZXRob2RDYWxsLmphdmEKQEAgLTAsMCArMSwxNiBAQAorcGFja2FnZSBwY2s7CisKK2ludGVyZmFjZSBBPFQ+Cit7CisgICAgVCBmb28oKTsKK30KKworaW50ZXJmYWNlIEI8VD4gZXh0ZW5kcyBBPFRbXT4geyB9CisKK2NsYXNzIEM8VCBleHRlbmRzIEE8T2JqZWN0W10+ICYgQjw/Pj4KK3sKKyAgICB2b2lkIGZvbyhUIHgpCisgICAgeworICAgICAgICBPYmplY3RbXSBmb28gPSB4LmZvbygpOworICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nNy9hbWJpZ3VvdXNJbmhlcml0YW5jZTEvcGNrL0FtYmlndW91c01ldGhvZENhbGwuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nNy9hbWJpZ3VvdXNJbmhlcml0YW5jZTEvcGNrL0FtYmlndW91c01ldGhvZENhbGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NmQ5MzlmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmc3L2FtYmlndW91c0luaGVyaXRhbmNlMS9wY2svQW1iaWd1b3VzTWV0aG9kQ2FsbC5qYXZhCkBAIC0wLDAgKzEsMzEgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwMC0yMDEyIEpldEJyYWlucyBzLnIuby4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCitwYWNrYWdlIHBjazsKKworaW50ZXJmYWNlIEE8VD4gCit7CisgICAgVCBmb28oKTsKK30KKworaW50ZXJmYWNlIEI8VCBleHRlbmRzIENsb25lYWJsZT4gZXh0ZW5kcyBBPFQ+IHsgfQorCitjbGFzcyBDPFQgZXh0ZW5kcyBBPD8+ICYgQjw/Pj4KK3sKKyAgICB2b2lkIGJhcihUIHgpCisgICAgeworICAgICAgICB4LmZvbygpOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZzcvYW1iaWd1b3VzTXVsdGlJbnRJbmhlcml0YW5jZS9wY2svQW1iaWd1b3VzTWV0aG9kQ2FsbC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmc3L2FtYmlndW91c011bHRpSW50SW5oZXJpdGFuY2UvcGNrL0FtYmlndW91c01ldGhvZENhbGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZjRmZjNhCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmc3L2FtYmlndW91c011bHRpSW50SW5oZXJpdGFuY2UvcGNrL0FtYmlndW91c01ldGhvZENhbGwuamF2YQpAQCAtMCwwICsxLDI4IEBACitwYWNrYWdlIHBjazsKKworaW50ZXJmYWNlIElBPFQ+IHsKKyAgICBUIGEoKTsKK30KKworaW50ZXJmYWNlIElCIHsKKyAgICBTdHJpbmcgYSgpOworfQorCithYnN0cmFjdCBjbGFzcyBDIGltcGxlbWVudHMgSUE8U3RyaW5nPiwgSUIgeworCisgICAgeworICAgICAgICBhKCk7CisgICAgfQorfQorCisKK2ludGVyZmFjZSBJQU8geworICAgIE9iamVjdCBhKCk7Cit9CisKK2Fic3RyYWN0IGNsYXNzIENPIGltcGxlbWVudHMgSUFPLCBJQiB7CisKKyAgICB7CisgICAgICAgIGEoKTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmc3L2FtYmlndW91c011bHRpcGxlVHlwZVBhcmFtRXh0ZW5kcy9wY2svQW1iaWd1b3VzTWV0aG9kQ2FsbC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmc3L2FtYmlndW91c011bHRpcGxlVHlwZVBhcmFtRXh0ZW5kcy9wY2svQW1iaWd1b3VzTWV0aG9kQ2FsbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIyMzU3OWUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZzcvYW1iaWd1b3VzTXVsdGlwbGVUeXBlUGFyYW1FeHRlbmRzL3Bjay9BbWJpZ3VvdXNNZXRob2RDYWxsLmphdmEKQEAgLTAsMCArMSw0MyBAQAorLyoKKyAqIENvcHlyaWdodCAyMDAwLTIwMTIgSmV0QnJhaW5zIHMuci5vLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KK3BhY2thZ2UgcGNrOworCitpbnRlcmZhY2UgSUE8VD4geworICAgIFQgYSgpOworfQorCitpbnRlcmZhY2UgSUIgeworICAgIFN0cmluZyBhKCk7Cit9CisKK2Fic3RyYWN0IGNsYXNzIEMgaW1wbGVtZW50cyBJQTxTdHJpbmc+LCBJQiB7CisKKyAgICB7CisgICAgICAgIGEoKTsKKyAgICB9Cit9CisKKworaW50ZXJmYWNlIElBTyB7CisgICAgT2JqZWN0IGEoKTsKK30KKworYWJzdHJhY3QgY2xhc3MgQ08gaW1wbGVtZW50cyBJQU8sIElCIHsKKworICAgIHsKKyAgICAgICAgYSgpOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZzcvYW1iaWd1b3VzTXVsdGlwbGVUeXBlUGFyYW1FeHRlbmRzMS9wY2svQW1iaWd1b3VzTWV0aG9kQ2FsbC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmc3L2FtYmlndW91c011bHRpcGxlVHlwZVBhcmFtRXh0ZW5kczEvcGNrL0FtYmlndW91c01ldGhvZENhbGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44Y2ZiYzdkCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmc3L2FtYmlndW91c011bHRpcGxlVHlwZVBhcmFtRXh0ZW5kczEvcGNrL0FtYmlndW91c01ldGhvZENhbGwuamF2YQpAQCAtMCwwICsxLDE1IEBACitwYWNrYWdlIHBjazsKKworY2xhc3MgQTxUPiB7fQorCitpbnRlcmZhY2UgSUF7CisgICAgdm9pZCBmb28oQTw/PiB4KTsKK30KK2ludGVyZmFjZSBJQnsKKyAgICA8VD4gdm9pZCBmb28oQTxUPiB4KTsKK30KK2NsYXNzIEMgeworICAgIDw8ZXJyb3IgZGVzY3I9Iidmb28oQTxUPiknIGluICdwY2suSUInIGNsYXNoZXMgd2l0aCAnZm9vKEE8Pz4pJyBpbiAncGNrLklBJzsgYm90aCBtZXRob2RzIGhhdmUgc2FtZSBlcmFzdXJlLCB5ZXQgbmVpdGhlciBvdmVycmlkZXMgdGhlIG90aGVyIj48L2Vycm9yPlQgZXh0ZW5kcyBJQSAmIElCPiB2b2lkIGJhcihUIHgsIEE8U3RyaW5nPiB5KXsKKyAgICAgICAgeC5mb288ZXJyb3IgZGVzY3I9IkFtYmlndW91cyBtZXRob2QgY2FsbDogYm90aCAnSUEuZm9vKEE8Pz4pJyBhbmQgJ0lCLmZvbyhBPFN0cmluZz4pJyBtYXRjaCI+KHkpPC9lcnJvcj47CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nNy9hbWJpZ3VvdXNNdWx0aXBsZVR5cGVQYXJhbUV4dGVuZHMyL3Bjay9BbWJpZ3VvdXNNZXRob2RDYWxsLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZzcvYW1iaWd1b3VzTXVsdGlwbGVUeXBlUGFyYW1FeHRlbmRzMi9wY2svQW1iaWd1b3VzTWV0aG9kQ2FsbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM4YzNiYTEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZzcvYW1iaWd1b3VzTXVsdGlwbGVUeXBlUGFyYW1FeHRlbmRzMi9wY2svQW1iaWd1b3VzTWV0aG9kQ2FsbC5qYXZhCkBAIC0wLDAgKzEsMTUgQEAKK3BhY2thZ2UgcGNrOworCitjbGFzcyBBPFQ+IHt9CisKK2ludGVyZmFjZSBJQXsKKyAgICA8VD4gdm9pZCBmb28oQTxBPFQ+PiB4KTsKK30KK2ludGVyZmFjZSBJQnsKKyAgICA8VD4gdm9pZCBmb28oQTw/IHN1cGVyIEE8VD4+IHgpOworfQorY2xhc3MgQyB7CisgICAgPDxlcnJvciBkZXNjcj0iJ2ZvbyhBPEE8VD4+KScgaW4gJ3Bjay5JQScgY2xhc2hlcyB3aXRoICdmb28oQTw/IHN1cGVyIEE8VD4+KScgaW4gJ3Bjay5JQic7IGJvdGggbWV0aG9kcyBoYXZlIHNhbWUgZXJhc3VyZSwgeWV0IG5laXRoZXIgb3ZlcnJpZGVzIHRoZSBvdGhlciI+PC9lcnJvcj5UIGV4dGVuZHMgSUIgJiBJQT4gdm9pZCBiYXIoVCB4LCBBPEE8U3RyaW5nPj4geSl7CisgICAgICAgIHguZm9vKHkpOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZzcvYW1iaWd1b3VzTXVsdGlwbGVUeXBlUGFyYW1FeHRlbmRzMy9wY2svQW1iaWd1b3VzTWV0aG9kQ2FsbC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmc3L2FtYmlndW91c011bHRpcGxlVHlwZVBhcmFtRXh0ZW5kczMvcGNrL0FtYmlndW91c01ldGhvZENhbGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOWI3MjliCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmc3L2FtYmlndW91c011bHRpcGxlVHlwZVBhcmFtRXh0ZW5kczMvcGNrL0FtYmlndW91c01ldGhvZENhbGwuamF2YQpAQCAtMCwwICsxLDExIEBACitwYWNrYWdlIHBjazsKKworY2xhc3MgQjxLPiB7fQorY2xhc3MgQTxLPiBleHRlbmRzIEI8Sz4geworICAgIHZvaWQgZm9vKEE8QTxTdHJpbmc+PiBiKXsKKyAgICAgICAgYmFyKGIpOworICAgIH0KKworICAgIDxUPiB2b2lkIGJhcihCPD8gZXh0ZW5kcyBBPD8+PiBhKXt9CisgICAgPFQ+IHZvaWQgYmFyKEE8PyBleHRlbmRzIEE8VD4+IGEpe30KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZzcvYW1iaWd1b3VzVHlwZVBhcmFtRXh0ZW5kcy9wY2svQW1iaWd1b3VzTWV0aG9kQ2FsbC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmc3L2FtYmlndW91c1R5cGVQYXJhbUV4dGVuZHMvcGNrL0FtYmlndW91c01ldGhvZENhbGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44Njg5NjkzCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmc3L2FtYmlndW91c1R5cGVQYXJhbUV4dGVuZHMvcGNrL0FtYmlndW91c01ldGhvZENhbGwuamF2YQpAQCAtMCwwICsxLDIxIEBACitwYWNrYWdlIHBjazsKKworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitpbXBvcnQgc3RhdGljIHBjay5DLmZvbzsKK2ltcG9ydCBzdGF0aWMgcGNrLkQuZm9vOworCitjbGFzcyBDIHsKKyAgICBzdGF0aWMgPFQ+IHZvaWQgZm9vKExpc3Q8VD4geCkgeyB9Cit9CisKK2NsYXNzIEQgeworICAgIHN0YXRpYyA8VCBleHRlbmRzIExpc3Q8Pz4+IFN0cmluZyBmb28oTGlzdDxUPiB4KSB7IHJldHVybiBudWxsOyB9Cit9CisKK3B1YmxpYyBjbGFzcyBNYWluIHsKKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKXsKKyAgICAgICAgTGlzdDxMaXN0PFN0cmluZz4+IHggPSBudWxsOworICAgICAgICBmb28oeCkudG9DaGFyQXJyYXkoKTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZzcvYW1iaWd1b3VzVHlwZVBhcmFtTm1iL3Bjay9BbWJpZ3VvdXNNZXRob2RDYWxsLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZzcvYW1iaWd1b3VzVHlwZVBhcmFtTm1iL3Bjay9BbWJpZ3VvdXNNZXRob2RDYWxsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGIyOTFhZAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nNy9hbWJpZ3VvdXNUeXBlUGFyYW1ObWIvcGNrL0FtYmlndW91c01ldGhvZENhbGwuamF2YQpAQCAtMCwwICsxLDE2IEBACitwYWNrYWdlIHBjazsKK2ltcG9ydCBzdGF0aWMgcGNrLkMuZm9vOworaW1wb3J0IHN0YXRpYyBwY2suRC5mb287CisKK3B1YmxpYyBjbGFzcyBDIHsKKyAgICAgcHVibGljIHN0YXRpYyB2b2lkIGZvbygpe30KK30KK2NsYXNzIEQgeworICAgICBwdWJsaWMgc3RhdGljIDxUPiB2b2lkIGZvbygpe30KK30KKworY2xhc3MgQiB7CisgICAgeworICAgICAgICBmb288ZXJyb3IgZGVzY3I9IkFtYmlndW91cyBtZXRob2QgY2FsbDogYm90aCAnQy5mb28oKScgYW5kICdELmZvbygpJyBtYXRjaCI+KCk8L2Vycm9yPjsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmc3L2FtYmlndW91c1R5cGVQYXJhbU5tYjEvcGNrL0FtYmlndW91c01ldGhvZENhbGwuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nNy9hbWJpZ3VvdXNUeXBlUGFyYW1ObWIxL3Bjay9BbWJpZ3VvdXNNZXRob2RDYWxsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDAzMGRkMwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nNy9hbWJpZ3VvdXNUeXBlUGFyYW1ObWIxL3Bjay9BbWJpZ3VvdXNNZXRob2RDYWxsLmphdmEKQEAgLTAsMCArMSwxNyBAQAorcGFja2FnZSBwY2s7CitpbXBvcnQgc3RhdGljIHBjay5ELmZvbzsKK2ltcG9ydCBzdGF0aWMgcGNrLkMuZm9vOworCitwdWJsaWMgY2xhc3MgQyB7CisgICAgIHB1YmxpYyBzdGF0aWMgPFQ+IHZvaWQgZm9vKENvbXBhcmFibGU8VD4geCl7fQorfQorCitjbGFzcyBEIHsKKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgZm9vKENvbXBhcmFibGU8Pz4geCl7fQorfQorCitjbGFzcyBCeworICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBiYXIoQ29tcGFyYWJsZTw/PiB4KXsKKyAgICAgICAgZm9vPGVycm9yIGRlc2NyPSJBbWJpZ3VvdXMgbWV0aG9kIGNhbGw6IGJvdGggJ0QuZm9vKENvbXBhcmFibGU8Pz4pJyBhbmQgJ0MuZm9vKENvbXBhcmFibGU8Pz4pJyBtYXRjaCI+KHgpPC9lcnJvcj47CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nNy9hbWJpZ3VvdXNWYXJhcmdzL3Bjay9BbWJpZ3VvdXNNZXRob2RDYWxsLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZzcvYW1iaWd1b3VzVmFyYXJncy9wY2svQW1iaWd1b3VzTWV0aG9kQ2FsbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQxYjEyMDIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZzcvYW1iaWd1b3VzVmFyYXJncy9wY2svQW1iaWd1b3VzTWV0aG9kQ2FsbC5qYXZhCkBAIC0wLDAgKzEsMzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwMC0yMDEyIEpldEJyYWlucyBzLnIuby4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCitwYWNrYWdlIHBjazsKK2Fic3RyYWN0IGNsYXNzIEEgeworICAgIGFic3RyYWN0IHZvaWQgZm9vKE9iamVjdC4uLiB4KTsKKyAgICBhYnN0cmFjdCB2b2lkIGZvbyhpbnQuLi4geCk7CisKKyAgICB7CisgICAgICAgIGZvbzxlcnJvciBkZXNjcj0iQW1iaWd1b3VzIG1ldGhvZCBjYWxsOiBib3RoICdBLmZvbyhPYmplY3QuLi4pJyBhbmQgJ0EuZm9vKGludC4uLiknIG1hdGNoIj4oMSk8L2Vycm9yPjsKKyAgICB9Cit9CithYnN0cmFjdCBjbGFzcyBBMSB7CisgICAgYWJzdHJhY3Qgdm9pZCBmb28oZG91YmxlIC4uLiB4KTsKKyAgICBhYnN0cmFjdCB2b2lkIGZvbyhpbnQuLi4geCk7CisKKyAgICB7CisgICAgICAgIGZvbygxKTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZzcvYW1iaWd1b3VzVmFyYXJnczEvcGNrL0FtYmlndW91c01ldGhvZENhbGwuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nNy9hbWJpZ3VvdXNWYXJhcmdzMS9wY2svQW1iaWd1b3VzTWV0aG9kQ2FsbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIxMjI5OGUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZzcvYW1iaWd1b3VzVmFyYXJnczEvcGNrL0FtYmlndW91c01ldGhvZENhbGwuamF2YQpAQCAtMCwwICsxLDkgQEAKK3BhY2thZ2UgcGNrOworCithYnN0cmFjdCBjbGFzcyBBIHsKKyAgICBhYnN0cmFjdCA8VD4gdm9pZCBmb28oVC4uLiB5KTsKKyAgICBhYnN0cmFjdCA8VD4gdm9pZCBmb28oVFtdLi4uIHkpOworICAgIHZvaWQgYmFyKCl7CisgICAgICAgIGZvbygpOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZzcvc3RhdGljSW1wb3J0Q29uZmxpY3QvVXNhZ2UuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nNy9zdGF0aWNJbXBvcnRDb25mbGljdC9Vc2FnZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRjYmM4Y2MKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZzcvc3RhdGljSW1wb3J0Q29uZmxpY3QvVXNhZ2UuamF2YQpAQCAtMCwwICsxLDI5IEBACisvKgorICogQ29weXJpZ2h0IDIwMDAtMjAxMSBKZXRCcmFpbnMgcy5yLm8uCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworaW1wb3J0IHguQmFzZTE7CitpbXBvcnQgc3RhdGljIHguQmFzZTIuRjsKK2ltcG9ydCBzdGF0aWMgeC5CYXNlMS5tOworaW1wb3J0IHN0YXRpYyB4LkJhc2UyLm07CitpbXBvcnQgc3RhdGljIDxlcnJvciBkZXNjcj0iRmllbGQgJ0lGJyBpcyBhbWJpZ3VvdXMgaW4gYSBzaW5nbGUgc3RhdGljIGltcG9ydCI+eC5CYXNlMi5JSS5JRjwvZXJyb3I+OworCitjbGFzcyBVc2FnZSB7CisgIHZvaWQgdXNlKCkgeworICAgIG0oQmFzZTEuRik7IC8vQmFzZTEubShpbnQpCisgICAgbShGKTsgLy9CYXNlMi5tKGZsb2F0KSwgZmxvYXQgQmFzZTIuRgorICAgIEYuY2xhc3MuZ2V0TmFtZSgpOyAvLyBjbGFzcyBCYXNlMi5GCisgICAgbTxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgbWV0aG9kICdtKD8pJyI+KDxlcnJvciBkZXNjcj0iUmVmZXJlbmNlIHRvICdJRicgaXMgYW1iaWd1b3VzLCBib3RoICdJMS5JRicgYW5kICdJMi5JRicgbWF0Y2giPklGPC9lcnJvcj4pPC9lcnJvcj47CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZzcvc3RhdGljSW1wb3J0Q29uZmxpY3QvVXNhZ2VNaXhlZC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmc3L3N0YXRpY0ltcG9ydENvbmZsaWN0L1VzYWdlTWl4ZWQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YjVhY2QzCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmc3L3N0YXRpY0ltcG9ydENvbmZsaWN0L1VzYWdlTWl4ZWQuamF2YQpAQCAtMCwwICsxLDIzIEBACisvKgorICogQ29weXJpZ2h0IDIwMDAtMjAxMSBKZXRCcmFpbnMgcy5yLm8uCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworaW1wb3J0IHguQmFzZTEuRDsKK2ltcG9ydCBzdGF0aWMgPGVycm9yIGRlc2NyPSInRCcgaXMgYWxyZWFkeSBkZWZpbmVkIGluIGEgc2luZ2xlLXR5cGUgaW1wb3J0Ij54LkJhc2UyLkQ8L2Vycm9yPjsKKworY2xhc3MgVXNhZ2VNaXhlZCB7CisgIHZvaWQgdXNlKCkgeworICAgIDxlcnJvciBkZXNjcj0iUmVmZXJlbmNlIHRvICdEJyBpcyBhbWJpZ3VvdXMsIGJvdGggJ3guQmFzZTEuRCcgYW5kICd4LkJhc2UyLkQnIG1hdGNoIj5EPC9lcnJvcj4uY2xhc3MuZ2V0TmFtZSgpOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmc3L3N0YXRpY0ltcG9ydENvbmZsaWN0L1VzYWdlT25EZW1hbmQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nNy9zdGF0aWNJbXBvcnRDb25mbGljdC9Vc2FnZU9uRGVtYW5kLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjQxM2M4OQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nNy9zdGF0aWNJbXBvcnRDb25mbGljdC9Vc2FnZU9uRGVtYW5kLmphdmEKQEAgLTAsMCArMSwyNiBAQAorLyoKKyAqIENvcHlyaWdodCAyMDAwLTIwMTEgSmV0QnJhaW5zIHMuci5vLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KK2ltcG9ydCB4LkU7CitpbXBvcnQgc3RhdGljIHguQmFzZTEuKjsKK2ltcG9ydCBzdGF0aWMgeC5CYXNlMi4qOworCitjbGFzcyBVc2FnZU9uRGVtYW5kIHsKKyAgdm9pZCB1c2UoKSB7CisgICAgbSgxKTsgLy9CYXNlMS5tKGludCkKKyAgICBtKDEuMGYpOyAvL0Jhc2UyLm0oZmxvYXQpCisgICAgRS5jbGFzcy5nZXROYW1lKCk7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZzcvc3RhdGljSW1wb3J0Q29uZmxpY3QveC9CYXNlMS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmc3L3N0YXRpY0ltcG9ydENvbmZsaWN0L3gvQmFzZTEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZGM5YmI4Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmc3L3N0YXRpY0ltcG9ydENvbmZsaWN0L3gvQmFzZTEuamF2YQpAQCAtMCwwICsxLDI5IEBACisvKgorICogQ29weXJpZ2h0IDIwMDAtMjAxMSBKZXRCcmFpbnMgcy5yLm8uCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworcGFja2FnZSB4OworCitwdWJsaWMgY2xhc3MgQmFzZTEgeworICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBGID0gMTsKKyAgcHVibGljIHN0YXRpYyB2b2lkIG0oaW50IGkpIHsgfQorICBwdWJsaWMgc3RhdGljIGNsYXNzIEYgeyB9CisgIHB1YmxpYyBzdGF0aWMgY2xhc3MgRCB7IH0KKyAgcHVibGljIGludGVyZmFjZSBJMSB7CisgICAgaW50IElGID0gMTsKKyAgfQorICBwdWJsaWMgaW50ZXJmYWNlIEkyIHsKKyAgICBmbG9hdCBJRiA9IDIuMGY7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZzcvc3RhdGljSW1wb3J0Q29uZmxpY3QveC9CYXNlMi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmc3L3N0YXRpY0ltcG9ydENvbmZsaWN0L3gvQmFzZTIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMjdmMzA3Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmc3L3N0YXRpY0ltcG9ydENvbmZsaWN0L3gvQmFzZTIuamF2YQpAQCAtMCwwICsxLDI1IEBACisvKgorICogQ29weXJpZ2h0IDIwMDAtMjAxMSBKZXRCcmFpbnMgcy5yLm8uCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworcGFja2FnZSB4OworCitwdWJsaWMgY2xhc3MgQmFzZTIgZXh0ZW5kcyBCYXNlMSB7CisgIHB1YmxpYyBzdGF0aWMgZmluYWwgZmxvYXQgRiA9IDIuMGY7CisgIHB1YmxpYyBzdGF0aWMgdm9pZCBtKGZsb2F0IGYpIHsgfQorICBwdWJsaWMgc3RhdGljIGNsYXNzIEYgeyB9CisgIHB1YmxpYyBzdGF0aWMgY2xhc3MgRCB7IH0KKyAgcHVibGljIGludGVyZmFjZSBJSSBleHRlbmRzIEkxLCBJMiB7IH0KKyAgcHVibGljIGVudW0gRSB7IH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZzcvc3RhdGljSW1wb3J0Q29uZmxpY3QveC9FLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZzcvc3RhdGljSW1wb3J0Q29uZmxpY3QveC9FLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWQ5MDFmOAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nNy9zdGF0aWNJbXBvcnRDb25mbGljdC94L0UuamF2YQpAQCAtMCwwICsxLDE4IEBACisvKgorICogQ29weXJpZ2h0IDIwMDAtMjAxMSBKZXRCcmFpbnMgcy5yLm8uCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworcGFja2FnZSB4OworCitwdWJsaWMgY2xhc3MgRSB7IH0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZzcvc3RhdGljSW1wb3J0cy9QMS9DMS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmc3L3N0YXRpY0ltcG9ydHMvUDEvQzEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOGEwNWM1Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmc3L3N0YXRpY0ltcG9ydHMvUDEvQzEuamF2YQpAQCAtMCwwICsxLDIwIEBACisvKgorICogQ29weXJpZ2h0IDIwMDAtMjAxMSBKZXRCcmFpbnMgcy5yLm8uCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworcGFja2FnZSBQMTsKKworcHVibGljIGNsYXNzIEMxIHsKKyAgICBwdWJsaWMgc3RhdGljIGludCBGb287Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZzcvc3RhdGljSW1wb3J0cy9QMS9DMi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmc3L3N0YXRpY0ltcG9ydHMvUDEvQzIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YWVjNGI1Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmc3L3N0YXRpY0ltcG9ydHMvUDEvQzIuamF2YQpAQCAtMCwwICsxLDIwIEBACisvKgorICogQ29weXJpZ2h0IDIwMDAtMjAxMSBKZXRCcmFpbnMgcy5yLm8uCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworcGFja2FnZSBQMTsKKworcHVibGljIGNsYXNzIEMyIHsKKyAgICBwdWJsaWMgc3RhdGljIGludCBGb287Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZzcvc3RhdGljSW1wb3J0cy9QMS9NZXRob2RTaGFkb3dpbmcuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nNy9zdGF0aWNJbXBvcnRzL1AxL01ldGhvZFNoYWRvd2luZy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY5NGNlZGEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZzcvc3RhdGljSW1wb3J0cy9QMS9NZXRob2RTaGFkb3dpbmcuamF2YQpAQCAtMCwwICsxLDMxIEBACisvKgorICogQ29weXJpZ2h0IDIwMDAtMjAxMSBKZXRCcmFpbnMgcy5yLm8uCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworcGFja2FnZSBQMTsKKworaW1wb3J0IHN0YXRpYyBQMS5PdXRzaWRlLmdldE9iamVjdDsKKworY2xhc3MgT3V0c2lkZSB7CisgIHN0YXRpYyBPYmplY3QgZ2V0T2JqZWN0KE9iamVjdCBkdW1teSkgeyByZXR1cm4gIlN0YXRpYyI7IH0KK30KKworY2xhc3MgQmFzZSB7CisgIE9iamVjdCBnZXRPYmplY3QoKSB7IHJldHVybiAiSW5zdGFuY2UiOyB9Cit9CisKK2NsYXNzIERlcml2ZWQgZXh0ZW5kcyBCYXNlIHsKKyAgZmluYWwgc3RhdGljIE9iamVjdCBvMSA9IDxlcnJvciBkZXNjcj0iTm9uLXN0YXRpYyBtZXRob2QgJ2dldE9iamVjdCgpJyBjYW5ub3QgYmUgcmVmZXJlbmNlZCBmcm9tIGEgc3RhdGljIGNvbnRleHQiPmdldE9iamVjdDwvZXJyb3I+KG51bGwpOworICBmaW5hbCBPYmplY3QgbzIgPSBnZXRPYmplY3Q8ZXJyb3IgZGVzY3I9IidnZXRPYmplY3QoKScgaW4gJ1AxLkJhc2UnIGNhbm5vdCBiZSBhcHBsaWVkIHRvICcobnVsbCknIj4obnVsbCk8L2Vycm9yPjsKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nNy9zdGF0aWNJbXBvcnRzL3N0YXRpY0ltcG9ydHMuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nNy9zdGF0aWNJbXBvcnRzL3N0YXRpY0ltcG9ydHMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNjJjNzBjCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmc3L3N0YXRpY0ltcG9ydHMvc3RhdGljSW1wb3J0cy5qYXZhCkBAIC0wLDAgKzEsMjMgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwMC0yMDExIEpldEJyYWlucyBzLnIuby4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCitpbXBvcnQgc3RhdGljIFAxLkMxLjxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICdCYXInIj5CYXI8L2Vycm9yPjsKK2ltcG9ydCBzdGF0aWMgUDEuQzEuRm9vOworaW1wb3J0IHN0YXRpYyA8ZXJyb3IgZGVzY3I9IkZpZWxkICdGb28nIGlzIGFscmVhZHkgZGVmaW5lZCBpbiBhIHNpbmdsZSBzdGF0aWMgaW1wb3J0Ij5QMS5DMi5Gb288L2Vycm9yPjsKKworaW1wb3J0IHN0YXRpYyBqYXZhLmxhbmcuQnl0ZS52YWx1ZU9mOworaW1wb3J0IHN0YXRpYyBqYXZhLmxhbmcuSW50ZWdlci52YWx1ZU9mOworCitjbGFzcyBDIHt9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FtYmlndW91c0NhbGxzL0JveGluZ0FuZFN0YXRpY01ldGhvZHMuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYW1iaWd1b3VzQ2FsbHMvQm94aW5nQW5kU3RhdGljTWV0aG9kcy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ4N2JjZDIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FtYmlndW91c0NhbGxzL0JveGluZ0FuZFN0YXRpY01ldGhvZHMuamF2YQpAQCAtMCwwICsxLDQ3IEBACitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb25zOworaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKKworcHVibGljIGNsYXNzIEFtYmlndW91c1Rlc3QgZXh0ZW5kcyBBYnN0cmFjdFRlc3QgeworICBwdWJsaWMgdm9pZCB0ZXN0Rm9vKCkgeworICAgIEl0ZXJhdG9yPEludGVnZXI+IGxpc3QgPSBDb2xsZWN0aW9ucy5zaW5nbGV0b24oMSkuaXRlcmF0b3IoKTsKKyAgICBhc3NlcnRFcXVhbHM8ZXJyb3IgZGVzY3I9IkFtYmlndW91cyBtZXRob2QgY2FsbDogYm90aCAnQXNzZXJ0LmFzc2VydEVxdWFscyhPYmplY3QsIE9iamVjdCknIGFuZCAnQXNzZXJ0LmFzc2VydEVxdWFscyhsb25nLCBsb25nKScgbWF0Y2giPigxLCBsaXN0Lm5leHQoKSk8L2Vycm9yPjsKKyAgfQorfQorCithYnN0cmFjdCBjbGFzcyBBYnN0cmFjdFRlc3QgZXh0ZW5kcyBBc3NlcnQgeworICBwdWJsaWMgc3RhdGljIHZvaWQgYXNzZXJ0RXF1YWxzKGZsb2F0IGV4cGVjdGVkLCBmbG9hdCBhY3R1YWwpIHsKKyAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKGV4cGVjdGVkLCBhY3R1YWwsIDAuMDAwMDEpOworICB9Cit9CitjbGFzcyBBc3NlcnQgIHsKKyAgICBwcm90ZWN0ZWQgQXNzZXJ0KCkgeyAvKiBjb21waWxlZCBjb2RlICovIH0KKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgYXNzZXJ0RXF1YWxzKGphdmEubGFuZy5TdHJpbmcgbWVzc2FnZSwgamF2YS5sYW5nLk9iamVjdCBleHBlY3RlZCwgamF2YS5sYW5nLk9iamVjdCBhY3R1YWwpIHsgLyogY29tcGlsZWQgY29kZSAqLyB9CisgICAgcHVibGljIHN0YXRpYyB2b2lkIGFzc2VydEVxdWFscyhqYXZhLmxhbmcuT2JqZWN0IGV4cGVjdGVkLCBqYXZhLmxhbmcuT2JqZWN0IGFjdHVhbCkgeyAvKiBjb21waWxlZCBjb2RlICovIH0KKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgYXNzZXJ0RXF1YWxzKGphdmEubGFuZy5TdHJpbmcgbWVzc2FnZSwgZG91YmxlIGV4cGVjdGVkLCBkb3VibGUgYWN0dWFsLCBkb3VibGUgZGVsdGEpIHsgLyogY29tcGlsZWQgY29kZSAqLyB9CisgICAgcHVibGljIHN0YXRpYyB2b2lkIGFzc2VydEVxdWFscyhsb25nIGV4cGVjdGVkLCBsb25nIGFjdHVhbCkgeyAvKiBjb21waWxlZCBjb2RlICovIH0KKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgYXNzZXJ0RXF1YWxzKGphdmEubGFuZy5TdHJpbmcgbWVzc2FnZSwgbG9uZyBleHBlY3RlZCwgbG9uZyBhY3R1YWwpIHsgLyogY29tcGlsZWQgY29kZSAqLyB9CisgICAgLyoqCisgICAgICogQGRlcHJlY2F0ZWQKKyAgICAgKi8KKyAgICBAamF2YS5sYW5nLkRlcHJlY2F0ZWQKKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgYXNzZXJ0RXF1YWxzKGRvdWJsZSBleHBlY3RlZCwgZG91YmxlIGFjdHVhbCkgeyAvKiBjb21waWxlZCBjb2RlICovIH0KKyAgICAKKyAgICAvKioKKyAgICAgKiBAZGVwcmVjYXRlZAorICAgICAqLworICAgIEBqYXZhLmxhbmcuRGVwcmVjYXRlZAorICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBhc3NlcnRFcXVhbHMoamF2YS5sYW5nLlN0cmluZyBtZXNzYWdlLCBkb3VibGUgZXhwZWN0ZWQsIGRvdWJsZSBhY3R1YWwpIHsgLyogY29tcGlsZWQgY29kZSAqLyB9CisgICAgCisgICAgcHVibGljIHN0YXRpYyB2b2lkIGFzc2VydEVxdWFscyhkb3VibGUgZXhwZWN0ZWQsIGRvdWJsZSBhY3R1YWwsIGRvdWJsZSBkZWx0YSkgeyAvKiBjb21waWxlZCBjb2RlICovIH0KKyAgICAvKioKKyAgICAgKiBAZGVwcmVjYXRlZAorICAgICAqLworICAgIEBqYXZhLmxhbmcuRGVwcmVjYXRlZAorICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBhc3NlcnRFcXVhbHMoamF2YS5sYW5nLlN0cmluZyBtZXNzYWdlLCBqYXZhLmxhbmcuT2JqZWN0W10gZXhwZWN0ZWRzLCBqYXZhLmxhbmcuT2JqZWN0W10gYWN0dWFscykgeyAvKiBjb21waWxlZCBjb2RlICovIH0KKyAgICAKKyAgICAvKioKKyAgICAgKiBAZGVwcmVjYXRlZAorICAgICAqLworICAgIEBqYXZhLmxhbmcuRGVwcmVjYXRlZAorICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBhc3NlcnRFcXVhbHMoamF2YS5sYW5nLk9iamVjdFtdIGV4cGVjdGVkcywgamF2YS5sYW5nLk9iamVjdFtdIGFjdHVhbHMpIHsgLyogY29tcGlsZWQgY29kZSAqLyB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hbWJpZ3VvdXNDYWxscy9NdWx0aXBsZUluaGVyaXRhbmNlLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FtYmlndW91c0NhbGxzL011bHRpcGxlSW5oZXJpdGFuY2UuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NWU2YzMyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hbWJpZ3VvdXNDYWxscy9NdWx0aXBsZUluaGVyaXRhbmNlLmphdmEKQEAgLTAsMCArMSwyOCBAQAorY2xhc3MgQTxUPnt9CisKKyAgICBpbnRlcmZhY2UgSTxRIGV4dGVuZHMgSTxRPj4geworICAgICAgICBRIGZyb20oQTw/Pi4uLiBwYXRocyk7CisgICAgfQorCisgICAgaW50ZXJmYWNlIElJIGV4dGVuZHMgSTxJST4ge30KKyAgICBjbGFzcyBDPFEgZXh0ZW5kcyBDPFE+PiB7CisgICAgICAgIHB1YmxpYyBRIGZyb20oQTw/Pi4uLiBhcmdzKSB7cmV0dXJuIG51bGw7fQorICAgIH0KKyAgICBjbGFzcyBBQzxRIGV4dGVuZHMgQUM8UT4+ICBleHRlbmRzIEM8UT4ge30KKyAgICBjbGFzcyBDQyBleHRlbmRzIEFDPENDPiBpbXBsZW1lbnRzIElJIHsKKyAgICAgIHZvaWQgYmFyKCkgeworICAgICAgICBmcm9tKG51bGwpOworICAgICAgfQorICAgICAgCisgICAgICBzdGF0aWMgdm9pZCBiYXJTdGF0aWMoKSB7CisgICAgICAgIDxlcnJvciBkZXNjcj0iTm9uLXN0YXRpYyBtZXRob2QgJ2Zyb20oQTw/Pi4uLiknIGNhbm5vdCBiZSByZWZlcmVuY2VkIGZyb20gYSBzdGF0aWMgY29udGV4dCI+ZnJvbTwvZXJyb3I+KG51bGwpOworICAgICAgfQorICAgIH0KKworY2xhc3MgVGVzdCB7CisgCisgICAgdm9pZCBmb28oQ0MgYSl7CisgICAgICAgIGEuZnJvbShudWxsKTsKKyAgICB9CisKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2Fubm90YXRpb25zL2Nhbm5vdEZpbmRNZXRob2QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYW5ub3RhdGlvbnMvY2Fubm90RmluZE1ldGhvZC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU3NzM2ZTYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2Fubm90YXRpb25zL2Nhbm5vdEZpbmRNZXRob2QuamF2YQpAQCAtMCwwICsxLDYgQEAKK0BpbnRlcmZhY2UgQW5uIHsKKyAgICBpbnQgdSAoKSBkZWZhdWx0IDA7Cit9CisKK0BBbm4oPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBtZXRob2QgJ3YnIj52PC9lcnJvcj49MCkgY2xhc3MgRCB7Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2Fubm90YXRpb25zL2R1cGxpY2F0ZUFubm90YXRpb24uamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYW5ub3RhdGlvbnMvZHVwbGljYXRlQW5ub3RhdGlvbi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkxNTNkYTcKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2Fubm90YXRpb25zL2R1cGxpY2F0ZUFubm90YXRpb24uamF2YQpAQCAtMCwwICsxLDEwIEBACitAaW50ZXJmYWNlIEFubiB7Cit9CisKK0A8ZXJyb3IgZGVzY3I9IkR1cGxpY2F0ZSBhbm5vdGF0aW9uIj5Bbm48L2Vycm9yPiBAPGVycm9yIGRlc2NyPSJEdXBsaWNhdGUgYW5ub3RhdGlvbiI+QW5uPC9lcnJvcj4gY2xhc3MgRCB7Cit9CisKK0BTdXBwcmVzc1dhcm5pbmdzKHt9KQorQDxlcnJvciBkZXNjcj0iQW5ub3RhdGlvbiB0eXBlIGV4cGVjdGVkIj5qYXZhLmxhbmc8L2Vycm9yPgorY2xhc3MgUHNpRGEgeworfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hbm5vdGF0aW9ucy9kdXBsaWNhdGVBdHRyaWJ1dGUuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYW5ub3RhdGlvbnMvZHVwbGljYXRlQXR0cmlidXRlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGUyMTU0NgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYW5ub3RhdGlvbnMvZHVwbGljYXRlQXR0cmlidXRlLmphdmEKQEAgLTAsMCArMSw1IEBACitAaW50ZXJmYWNlIEEgeworICBpbnQgdmFsdWUoKTsKK30KKworQEEodmFsdWUgPSAwLCA8ZXJyb3IgZGVzY3I9IkR1cGxpY2F0ZSBhdHRyaWJ1dGUgJ3ZhbHVlJyI+dmFsdWUgPSAxPC9lcnJvcj4pIGNsYXNzIEMge30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2Fubm90YXRpb25zL2R1cGxpY2F0ZVRhcmdldC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hbm5vdGF0aW9ucy9kdXBsaWNhdGVUYXJnZXQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZmMyOWY3Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hbm5vdGF0aW9ucy9kdXBsaWNhdGVUYXJnZXQuamF2YQpAQCAtMCwwICsxLDUgQEAKK2ltcG9ydCBqYXZhLmxhbmcuYW5ub3RhdGlvbi5UYXJnZXQ7CitpbXBvcnQgamF2YS5sYW5nLmFubm90YXRpb24uRWxlbWVudFR5cGU7CisKK0BUYXJnZXQoe0VsZW1lbnRUeXBlLkFOTk9UQVRJT05fVFlQRSwgRWxlbWVudFR5cGUuTUVUSE9ELCBFbGVtZW50VHlwZS5UWVBFLCA8ZXJyb3IgZGVzY3I9IlJlcGVhdGVkIGFubm90YXRpb24gdGFyZ2V0Ij5FbGVtZW50VHlwZS5BTk5PVEFUSU9OX1RZUEU8L2Vycm9yPn0pCitAaW50ZXJmYWNlIEEge30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYW5ub3RhdGlvbnMvaW5hcHBsaWNhYmxlLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2Fubm90YXRpb25zL2luYXBwbGljYWJsZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjllODkyMWMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2Fubm90YXRpb25zL2luYXBwbGljYWJsZS5qYXZhCkBAIC0wLDAgKzEsOCBAQAoraW1wb3J0IGphdmEubGFuZy5hbm5vdGF0aW9uLio7CisKKy8vT0sKK0BUYXJnZXQoe0VsZW1lbnRUeXBlLlRZUEV9KQorQEV4cG9zZSBAaW50ZXJmYWNlIEV4cG9zZSB7fQorCitAVGFyZ2V0KHtFbGVtZW50VHlwZS5GSUVMRH0pCitAPGVycm9yIGRlc2NyPSInQEV4cG9zZTEnIG5vdCBhcHBsaWNhYmxlIHRvIGFubm90YXRpb24gdHlwZSI+RXhwb3NlMTwvZXJyb3I+QGludGVyZmFjZSBFeHBvc2UxIHt9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hbm5vdGF0aW9ucy9pbmNvbXBhdGlibGVUeXBlMS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hbm5vdGF0aW9ucy9pbmNvbXBhdGlibGVUeXBlMS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEyNWMwMmEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2Fubm90YXRpb25zL2luY29tcGF0aWJsZVR5cGUxLmphdmEKQEAgLTAsMCArMSw2IEBACitAaW50ZXJmYWNlIEFubiB7CisgICAgaW50IHUgKCkgZGVmYXVsdCAwOworfQorCitAQW5uKHU9PGVycm9yIGRlc2NyPSJJbmNvbXBhdGlibGUgdHlwZXMuIEZvdW5kOiAnZG91YmxlJywgcmVxdWlyZWQ6ICdpbnQnIj4wLjA8L2Vycm9yPikgY2xhc3MgRCB7Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2Fubm90YXRpb25zL2luY29tcGF0aWJsZVR5cGUyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2Fubm90YXRpb25zL2luY29tcGF0aWJsZVR5cGUyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDNiNzUzZAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYW5ub3RhdGlvbnMvaW5jb21wYXRpYmxlVHlwZTIuamF2YQpAQCAtMCwwICsxLDYgQEAKK0BpbnRlcmZhY2UgQW5uIHsKKyAgICBpbnRbXSB1ICgpIGRlZmF1bHQgMDsKK30KKworQEFubih1PTApIGNsYXNzIEQgeworfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hbm5vdGF0aW9ucy9pbmNvbXBhdGlibGVUeXBlMy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hbm5vdGF0aW9ucy9pbmNvbXBhdGlibGVUeXBlMy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhlOTQxMmEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2Fubm90YXRpb25zL2luY29tcGF0aWJsZVR5cGUzLmphdmEKQEAgLTAsMCArMSw2IEBACitAaW50ZXJmYWNlIEFubiB7CisgICAgc2hvcnRbXSB1ICgpIGRlZmF1bHQgMDsKK30KKworQEFubih1PXs8ZXJyb3IgZGVzY3I9IkluY29tcGF0aWJsZSB0eXBlcy4gRm91bmQ6ICdpbnQnLCByZXF1aXJlZDogJ3Nob3J0JyI+MjIyMjIyMjwvZXJyb3I+fSkgY2xhc3MgRCB7Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2Fubm90YXRpb25zL2luY29tcGF0aWJsZVR5cGU0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2Fubm90YXRpb25zL2luY29tcGF0aWJsZVR5cGU0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWQ1YmI0OAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYW5ub3RhdGlvbnMvaW5jb21wYXRpYmxlVHlwZTQuamF2YQpAQCAtMCwwICsxLDE1IEBACitAaW50ZXJmYWNlIEFubiB7CisgICAgSW5uZXIxIGlubmVyICgpOworfQorCitAaW50ZXJmYWNlIElubmVyMSB7CisgIGludCBpICgpOworfQorCitAaW50ZXJmYWNlIElubmVyMiB7CisgIGludCBpICgpOworfQorCisKK0BBbm4oaW5uZXI9PGVycm9yIGRlc2NyPSJJbmNvbXBhdGlibGUgdHlwZXMuIEZvdW5kOiAnSW5uZXIyJywgcmVxdWlyZWQ6ICdJbm5lcjEnIj5ASW5uZXIyKGk9MCk8L2Vycm9yPikgY2xhc3MgRCB7Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2Fubm90YXRpb25zL2luY29tcGF0aWJsZVR5cGU1LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2Fubm90YXRpb25zL2luY29tcGF0aWJsZVR5cGU1LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzM5NjdjNQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYW5ub3RhdGlvbnMvaW5jb21wYXRpYmxlVHlwZTUuamF2YQpAQCAtMCwwICsxLDEzIEBACitAaW50ZXJmYWNlIEFubiB7CisgICAgQ2xhc3MgdHlwZSgpOworfQorCitjbGFzcyBDIHsKKyAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgQ2xhc3M8Qz4gVEhJU19UWVBFID0gQy5jbGFzczsKKworICBAQW5uKHR5cGUgPSA8ZXJyb3IgZGVzY3I9IkF0dHJpYnV0ZSB2YWx1ZSBtdXN0IGJlIGEgY2xhc3MgbGl0ZXJhbCI+VEhJU19UWVBFPC9lcnJvcj4pCisgIHZvaWQgYmFkKCkgeyB9CisKKyAgQEFubih0eXBlID0gQy5jbGFzcykKKyAgdm9pZCBnb29kKCkgeyB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2Fubm90YXRpb25zL2ludmFsaWRQYWNrYWdlQW5ub3RhdGlvblRhcmdldC9wYWNrYWdlLWluZm8uamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYW5ub3RhdGlvbnMvaW52YWxpZFBhY2thZ2VBbm5vdGF0aW9uVGFyZ2V0L3BhY2thZ2UtaW5mby5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU5YmEzZjcKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2Fubm90YXRpb25zL2ludmFsaWRQYWNrYWdlQW5ub3RhdGlvblRhcmdldC9wYWNrYWdlLWluZm8uamF2YQpAQCAtMCwwICsxIEBACitAPGVycm9yIGRlc2NyPSInQFN1cHByZXNzV2FybmluZ3MnIG5vdCBhcHBsaWNhYmxlIHRvIHBhY2thZ2UiPlN1cHByZXNzV2FybmluZ3M8L2Vycm9yPigiYWxsIikgcGFja2FnZSBhbm5vdGF0aW9ucy5pbnZhbGlkUGFja2FnZUFubm90YXRpb25UYXJnZXQ7CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2Fubm90YXRpb25zL2ludmFsaWRUeXBlLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2Fubm90YXRpb25zL2ludmFsaWRUeXBlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzM5MTVjNgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYW5ub3RhdGlvbnMvaW52YWxpZFR5cGUuamF2YQpAQCAtMCwwICsxLDggQEAKK2NsYXNzIENsYXp6IHt9CisKK0BpbnRlcmZhY2UgQW5uIHsKKyAgICA8ZXJyb3IgZGVzY3I9IkludmFsaWQgdHlwZSBmb3IgYW5ub3RhdGlvbiBtZW1iZXIiPkNsYXp6PC9lcnJvcj4gaSAoKTsKKyAgICA8ZXJyb3IgZGVzY3I9IkN5Y2xpYyBhbm5vdGF0aW9uIGVsZW1lbnQgdHlwZSI+QW5uPC9lcnJvcj4gaiAoKTsKKworICAgIDxlcnJvciBkZXNjcj0iSW52YWxpZCB0eXBlIGZvciBhbm5vdGF0aW9uIG1lbWJlciI+dm9pZDwvZXJyb3I+IGYoKTsgCit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2Fubm90YXRpb25zL21pc3NpbmdBdHRyaWJ1dGUuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYW5ub3RhdGlvbnMvbWlzc2luZ0F0dHJpYnV0ZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgzODA3NTAKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2Fubm90YXRpb25zL21pc3NpbmdBdHRyaWJ1dGUuamF2YQpAQCAtMCwwICsxLDYgQEAKK0BpbnRlcmZhY2UgQW5uIHsKKyAgICBpbnQgaSAoKTsKK30KKworQDxlcnJvciBkZXNjcj0iJ2knIG1pc3NpbmcgdGhvdWdoIHJlcXVpcmVkIj5Bbm48L2Vycm9yPigpIGNsYXNzIEQgeworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYW5ub3RhdGlvbnMvbm9uQ29uc3RhbnRJbml0aWFsaXplci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hbm5vdGF0aW9ucy9ub25Db25zdGFudEluaXRpYWxpemVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzg5OThiMgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYW5ub3RhdGlvbnMvbm9uQ29uc3RhbnRJbml0aWFsaXplci5qYXZhCkBAIC0wLDAgKzEsMTggQEAKK0BpbnRlcmZhY2UgQW5uIHsKKyAgICBpbnQgaSAoKTsKKworICAgIFN0cmluZ1tdIGooKTsKK30KKworY2xhc3MgRCB7CisgICAgaW50IGZpZWxkOworICAgIEBBbm4oaT08ZXJyb3IgZGVzY3I9IkF0dHJpYnV0ZSB2YWx1ZSBtdXN0IGJlIGNvbnN0YW50Ij5maWVsZDwvZXJyb3I+KSB2b2lkIGZvbyAoKSB7fQorCisgICAgQEFubihqPXs8ZXJyb3IgZGVzY3I9IkF0dHJpYnV0ZSB2YWx1ZSBtdXN0IGJlIGNvbnN0YW50Ij5udWxsPC9lcnJvcj59KSB2b2lkIGJhcigpIHt9Cit9CisKK0BpbnRlcmZhY2UgTWFuaXN0YURvdWJsZQoreworICAgIHB1YmxpYyBhYnN0cmFjdCBkb3VibGUgZGVmYXVsdFZhbHVlKCkgZGVmYXVsdCBEb3VibGUuTmFOOyAKK30KKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hbm5vdGF0aW9ucy9ub3RWYWx1ZU5hbWVPbWl0dGVkLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2Fubm90YXRpb25zL25vdFZhbHVlTmFtZU9taXR0ZWQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYzA0YTZmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hbm5vdGF0aW9ucy9ub3RWYWx1ZU5hbWVPbWl0dGVkLmphdmEKQEAgLTAsMCArMSwxNCBAQAorQGludGVyZmFjZSBBbm4geworICAgIGludCB1ICgpIGRlZmF1bHQgMDsKK30KKworQEFubig8ZXJyb3IgZGVzY3I9IkNhbm5vdCBmaW5kIG1ldGhvZCAndmFsdWUnIj4wPC9lcnJvcj4pIGNsYXNzIEQgeworfQorCitASW4oIiI8ZXJyb3IgZGVzY3I9IkFubm90YXRpb24gYXR0cmlidXRlIG11c3QgYmUgb2YgdGhlIGZvcm0gJ25hbWU9dmFsdWUnIj4sPC9lcnJvcj4gY3JlYXRlID0gIiIpIAorY2xhc3MgWlpaIHsKK30KK0BpbnRlcmZhY2UgSW4geworICAgIFN0cmluZyB2YWx1ZSgpOworICAgIFN0cmluZyBjcmVhdGUoKTsKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYW5ub3RhdGlvbnMvcGFja2FnZUFubm90YXRpb25Ob3RJblBhY2thZ2VJbmZvL25vdFBhY2thZ2VJbmZvLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2Fubm90YXRpb25zL3BhY2thZ2VBbm5vdGF0aW9uTm90SW5QYWNrYWdlSW5mby9ub3RQYWNrYWdlSW5mby5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQzZjlhODcKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2Fubm90YXRpb25zL3BhY2thZ2VBbm5vdGF0aW9uTm90SW5QYWNrYWdlSW5mby9ub3RQYWNrYWdlSW5mby5qYXZhCkBAIC0wLDAgKzEgQEAKKzxlcnJvciBkZXNjcj0iUGFja2FnZSBhbm5vdGF0aW9ucyBzaG91bGQgYmUgaW4gZmlsZSBwYWNrYWdlLWluZm8uamF2YSI+QERlcHJlY2F0ZWQ8L2Vycm9yPiBwYWNrYWdlIGFubm90YXRpb25zLnBhY2thZ2VBbm5vdGF0aW9uTm90SW5QYWNrYWdlSW5mbzsgClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hbm5vdGF0aW9ucy90eXBlQW5ub3RhdGlvbnMuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYW5ub3RhdGlvbnMvdHlwZUFubm90YXRpb25zLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGYwZjZmNgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYW5ub3RhdGlvbnMvdHlwZUFubm90YXRpb25zLmphdmEKQEAgLTAsMCArMSwzMyBAQAoraW1wb3J0IGphdmEubGFuZy5hbm5vdGF0aW9uLlRhcmdldDsKK2ltcG9ydCBqYXZhLmxhbmcuYW5ub3RhdGlvbi5FbGVtZW50VHlwZTsKK2ltcG9ydCBqYXZhLnV0aWwuKjsKKworQFRhcmdldCh7RWxlbWVudFR5cGUuVFlQRV9VU0UvKiwgRWxlbWVudFR5cGUuVFlQRSovfSkKK0BpbnRlcmZhY2UgVEEgeworfQorCitAPGVycm9yIGRlc2NyPSInQFRBJyBub3QgYXBwbGljYWJsZSB0byB0eXBlIj5UQTwvZXJyb3I+CitjbGFzcyBYMDxAPGVycm9yIGRlc2NyPSInQFRBJyBub3QgYXBwbGljYWJsZSB0byB0eXBlIHBhcmFtZXRlciI+VEE8L2Vycm9yPiBUPiB7CisgICAgQFRBCisgICAgcHJvdGVjdGVkCisgICAgdm9pZCBmKCkgQDxlcnJvciBkZXNjcj0iJ0BUQScgbm90IGFwcGxpY2FibGUgdG8gcGFyYW1ldGVyIj5UQTwvZXJyb3I+ICB7CisgICAgICAgIEBUQSBTdHJpbmcgcD1uZXcgQFRBIFN0cmluZygpOworCisgICAgICAgIGlmICh0aGlzIGluc3RhbmNlb2YgQFRBIE9iamVjdCkgcmV0dXJuOworICAgICAgICBTdHJpbmcgbyA9IHA7CisgICAgICAgIExpc3Q8QFRBIFN0cmluZz4gbDsKKyAgICAgICAgQ2xhc3MgYyA9IEBUQSBTdHJpbmcuY2xhc3M7CisgICAgfQorCisgICAgQFRBIGludCBAVEFbXSBtZXRob2RmKCkgdGhyb3dzIEBUQSBFeGNlcHRpb24geworICAgICAgICBib29sZWFuIGEgPSB0aGlzIGluc3RhbmNlb2YgQFRBIFgwOworICAgICAgICBYMDxAPGVycm9yIGRlc2NyPSJEdXBsaWNhdGUgYW5ub3RhdGlvbiI+VEE8L2Vycm9yPiBAPGVycm9yIGRlc2NyPSJEdXBsaWNhdGUgYW5ub3RhdGlvbiI+VEE8L2Vycm9yPiBYMD4gYyA9IG5ldyBAVEEgWDA8QFRBIFgwPigpOworICAgICAgICBPYmplY3QgbyA9IChAVEEgT2JqZWN0KSBjOworICAgICAgICBAVEEgWDAuZmllbGQgPSBudWxsOworICAgICAgICByZXR1cm4gbnVsbDsKKyAgICB9CisKKyAgICBAVEEoKSBpbnQgQFRBW10gcDsKKyAgICBzdGF0aWMgQFRBIE9iamVjdCBmaWVsZDsKKyAgICBAVEEgTGlzdDxTdHJpbmc+IGRpc2FtYmlndWF0ZUJldHdlZW5CaW5hcnlFeHByOworfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hbm5vdGF0aW9ucy93cm9uZ1BsYWNlLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2Fubm90YXRpb25zL3dyb25nUGxhY2UuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMTJkMDc0Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hbm5vdGF0aW9ucy93cm9uZ1BsYWNlLmphdmEKQEAgLTAsMCArMSwzMCBAQAoraW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOworCitAaW50ZXJmYWNlIEFubm8geworICBBbm5vW10gbmVzdGVkKCkgZGVmYXVsdCB7fTsKK30KKworYWJzdHJhY3QgY2xhc3MgQyB7CisgIGFic3RyYWN0IHZvaWQgZigpOworCisgIHZvaWQgd3JvbmcoKSB7CisgICAgPGVycm9yIGRlc2NyPSJBbm5vdGF0aW9ucyBhcmUgbm90IGFsbG93ZWQgaGVyZSI+QEFubm88L2Vycm9yPiBmKCk7CisgIH0KKworICBAQW5ubyhuZXN0ZWQgPSB7QEFubm8sIEBBbm5vfSkKKyAgdm9pZCBub3RXcm9uZygpIHsgfQorfQorCitjbGFzcyBCIGV4dGVuZHMgPGVycm9yIGRlc2NyPSJBbm5vdGF0aW9ucyBhcmUgbm90IGFsbG93ZWQgaGVyZSI+QERlcHJlY2F0ZWQ8L2Vycm9yPiBPYmplY3QgeyB9CisKK2VudW0gRSB7CisgIEBBbm5vIEUxCit9CisKK2ludGVyZmFjZSBJIHsKKyAgQDxlcnJvciBkZXNjcj0iRHVwbGljYXRlIGFubm90YXRpb24iPkFubm88L2Vycm9yPiBwdWJsaWMgQDxlcnJvciBkZXNjcj0iRHVwbGljYXRlIGFubm90YXRpb24iPkFubm88L2Vycm9yPiBDb2xsZWN0aW9uPDxlcnJvciBkZXNjcj0iQW5ub3RhdGlvbnMgYXJlIG5vdCBhbGxvd2VkIGhlcmUiPkBBbm5vPC9lcnJvcj4gU3RyaW5nPiBtZXRob2QoQDxlcnJvciBkZXNjcj0iRHVwbGljYXRlIGFubm90YXRpb24iPkFubm88L2Vycm9yPiBAPGVycm9yIGRlc2NyPSJEdXBsaWNhdGUgYW5ub3RhdGlvbiI+QW5ubzwvZXJyb3I+IE9iamVjdCBvKTsKK30KKworQGludGVyZmFjZSBDYWxsZXIgeworICBBbm5vIGFubm8oKSBkZWZhdWx0IEBBbm5vOworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvZ2VuZXJpY3NIaWdobGlnaHRpbmcvQW5ub3RhdGlvbnNBc1BhcnRPZk1vZGlmaWVyTGlzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9nZW5lcmljc0hpZ2hsaWdodGluZy9Bbm5vdGF0aW9uc0FzUGFydE9mTW9kaWZpZXJMaXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2ZjYTBjMAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvZ2VuZXJpY3NIaWdobGlnaHRpbmcvQW5ub3RhdGlvbnNBc1BhcnRPZk1vZGlmaWVyTGlzdC5qYXZhCkBAIC0wLDAgKzEsOSBAQAorQERlcHJlY2F0ZWQgQFN1cHByZXNzV2FybmluZ3MoIiIpCis8ZXJyb3IgZGVzY3I9IkNsYXNzICdGb28nIG11c3QgZWl0aGVyIGJlIGRlY2xhcmVkIGFic3RyYWN0IG9yIGltcGxlbWVudCBhYnN0cmFjdCBtZXRob2QgJ3J1bigpJyBpbiAnUnVubmFibGUnIj5wdWJsaWMgY2xhc3MgRm9vIGltcGxlbWVudHMgUnVubmFibGU8L2Vycm9yPiB7CisKK30KKworY2xhc3MgRiB7CisgIEBEZXByZWNhdGVkIEBTdXBwcmVzc1dhcm5pbmdzKCIiKSA8ZXJyb3IgZGVzY3I9IidmKCknIGlzIGFscmVhZHkgZGVmaW5lZCBpbiAnRiciPnZvaWQgZigpPC9lcnJvcj4ge30KKyAgQERlcHJlY2F0ZWQgQFN1cHByZXNzV2FybmluZ3MoIiIpIDxlcnJvciBkZXNjcj0iJ2YoKScgaXMgYWxyZWFkeSBkZWZpbmVkIGluICdGJyI+dm9pZCBmKCk8L2Vycm9yPiB7fQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9nZW5lcmljc0hpZ2hsaWdodGluZy9BdXRvYm94aW5nLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2dlbmVyaWNzSGlnaGxpZ2h0aW5nL0F1dG9ib3hpbmcuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZWNjODY0Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9nZW5lcmljc0hpZ2hsaWdodGluZy9BdXRvYm94aW5nLmphdmEKQEAgLTAsMCArMSw2OSBAQAorcHVibGljIGNsYXNzIEF1dG9ib3hpbmcgeworICAgIHB1YmxpYyBib29sZWFuIGNvbXBhcmUoc2hvcnQgcywgSW50ZWdlciBpKSB7CisgICAgICAgICByZXR1cm4gaSA9PSBzOyAvL09LLCBpIGlzIHVuYm94ZWQKKyAgICB9CisKKyAgICBwdWJsaWMgYm9vbGVhbiBjb21wYXJlKFNob3J0IHMsIEludGVnZXIgaSkgeworICAgICAgICAgcmV0dXJuIDxlcnJvciBkZXNjcj0iT3BlcmF0b3IgJz09JyBjYW5ub3QgYmUgYXBwbGllZCB0byAnamF2YS5sYW5nLkludGVnZXInLCAnamF2YS5sYW5nLlNob3J0JyI+aSA9PSBzPC9lcnJvcj47IC8vY29tcGFyaW5nIGFzIHJlZmVyZW5jZXMKKyAgICB9CisKKyAgICB2b2lkIGYoSW50ZWdlciBpKSB7CisgICAgICBzd2l0Y2goaSkgeworICAgICAgIGRlZmF1bHQ6CisgICAgICB9CisgICAgfQorCisgICAgeworICAgICAgT2JqZWN0IGRhdGEgPSAxOworICAgICAgYm9vbGVhbiBpczEgPSA8ZXJyb3IgZGVzY3I9Ik9wZXJhdG9yICc9PScgY2Fubm90IGJlIGFwcGxpZWQgdG8gJ2phdmEubGFuZy5PYmplY3QnLCAnaW50JyI+ZGF0YSA9PSAxPC9lcnJvcj47CisgICAgfQorCisgICAgLy9JREVBREVWLTU1NDk6IFNob3J0IGFuZCBkb3VibGUgYXJlIGNvbnZlcnRpYmxlCisgICAgcHVibGljIHN0YXRpYyBkb3VibGUgZiAoKSB7CisgICAgICBTaG9ydCBzID0gMDsKKyAgICAgIHJldHVybiAoZG91YmxlKXM7CisgICAgfQorCisgICAgLy9JREVBREVWLTU2MTMKKyAgICBjbGFzcyBEdW1iVGVzdCB7CisgICAgICBwcml2YXRlIGxvbmcgZXZlbnRJZDsKKworICAgICAgcHVibGljIGludCBoYXNoQ29kZSgpIHsKKyAgICAgICAgcmV0dXJuICgoTG9uZykgZXZlbnRJZCkuaGFzaENvZGUoKTsKKyAgICAgIH0KKyAgICB9CisKKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisgICAgICAgIExvbmcgbCA9IDBMOworICAgICAgICBTaG9ydCBzID0gMDsKKworICAgICAgICBpbnQgZCA9IDxlcnJvciBkZXNjcj0iSW5jb252ZXJ0aWJsZSB0eXBlczsgY2Fubm90IGNhc3QgJ2phdmEubGFuZy5Mb25nJyB0byAnaW50JyI+KGludClsPC9lcnJvcj47CisgICAgICAgIGQgPSAoaW50KXM7CisKKyAgICAgICAgc2hvcnQgdCA9IDA7CisgICAgICAgIEludGVnZXIgZDEgPSA8ZXJyb3IgZGVzY3I9IkluY29udmVydGlibGUgdHlwZXM7IGNhbm5vdCBjYXN0ICdzaG9ydCcgdG8gJ2phdmEubGFuZy5JbnRlZ2VyJyI+KEludGVnZXIpIHQ8L2Vycm9yPjsKKyAgICAgICAgQnl0ZSBiID0gPGVycm9yIGRlc2NyPSJJbmNvbnZlcnRpYmxlIHR5cGVzOyBjYW5ub3QgY2FzdCAnc2hvcnQnIHRvICdqYXZhLmxhbmcuQnl0ZSciPihCeXRlKSB0PC9lcnJvcj47CisKKyAgICB9CisKKyAgeworICAgIHsKKyAgICAgIGJvb2xlYW4gY29uZCA9IHRydWU7CisgICAgICAvLyB0ZXN0IGZvciBKTFMzIGJ1Zywgc2VlIGh0dHA6Ly9idWdzLnN1bi5jb20vYnVnZGF0YWJhc2Uvdmlld19idWcuZG8/YnVnX2lkPTY4ODg3NzAKKyAgICAgIEJ5dGUgQiA9IDA7CisgICAgICBieXRlIGIgPSAwOworICAgICAgYnl0ZSB2YWx1ZSA9IGNvbmQgPyBCIDogYjsgIC8vLy8vLy8vLworCisgICAgICBzaG9ydCBzID0gMDsKKyAgICAgIFNob3J0IFMgPSAwOworICAgICAgc2hvcnQgcnMgPSBjb25kID8gUyA6IHM7CisKKyAgICAgIGNoYXIgYyA9IDA7CisgICAgICBDaGFyYWN0ZXIgQyA9IDA7CisgICAgICBjaGFyIHJjID0gY29uZCA/IEMgOiBjOworCisgICAgICBib29sZWFuIGJiID0gY29uZCA/IEJvb2xlYW4uRkFMU0UgOiB0cnVlOworICAgIH0KKyAgICAKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvZ2VuZXJpY3NIaWdobGlnaHRpbmcvQXV0b2JveGluZ0NvbnN0cnVjdG9ycy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9nZW5lcmljc0hpZ2hsaWdodGluZy9BdXRvYm94aW5nQ29uc3RydWN0b3JzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTJjNTMzMgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvZ2VuZXJpY3NIaWdobGlnaHRpbmcvQXV0b2JveGluZ0NvbnN0cnVjdG9ycy5qYXZhCkBAIC0wLDAgKzEsMTMgQEAKK3B1YmxpYyBjbGFzcyBUZXN0IHsKKworICAgIHB1YmxpYyBUZXN0KE9iamVjdCBhKSB7CisgICAgfQorCisgICAgcHVibGljIFRlc3QoaW50IGkpIHsKKyAgICAgICAgdGhpcyhuZXcgSW50ZWdlcihpKSk7CisgICAgfQorCisgICAgcHVibGljIFRlc3QobG9uZyBsKSB7CisgICAgICAgIHRoaXMobmV3IExvbmcobCkpOworICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvZ2VuZXJpY3NIaWdobGlnaHRpbmcvQXV0b2JveGluZ01ldGhvZHMuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvZ2VuZXJpY3NIaWdobGlnaHRpbmcvQXV0b2JveGluZ01ldGhvZHMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMDIwOTk3Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9nZW5lcmljc0hpZ2hsaWdodGluZy9BdXRvYm94aW5nTWV0aG9kcy5qYXZhCkBAIC0wLDAgKzEsNDQgQEAKK3B1YmxpYyBjbGFzcyBBdXRvYm94aW5nIHsKKyAgICB2b2lkIG1ldGhvZChpbnQgaSkgeworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImkgPSAiICsgaSk7CisgICAgfQorCisgICAgdm9pZCBtZXRob2QoSW50ZWdlciBpbnRlZ2VyKSB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiaW50ZWdlciA9ICIgKyBpbnRlZ2VyKTsKKyAgICB9CisKKyAgICB2b2lkIG0xKEludGVnZXIgaW50ZWdlcikgeyB9CisgICAgdm9pZCBtMihpbnQgaSkgeyB9CisKKyAgICB7CisgICAgICAgIG1ldGhvZCgxMCk7CisgICAgICAgIG1ldGhvZChuZXcgSW50ZWdlcigxMCkpOworICAgICAgICBtMSgxMCk7CisgICAgICAgIG0xKG5ldyBJbnRlZ2VyKDEwKSk7CisgICAgICAgIG0yKDEwKTsKKyAgICAgICAgbTIobmV3IEludGVnZXIoMTApKTsKKyAgICB9Cit9CitwdWJsaWMgY2xhc3MgQXV0b2JveGluZzEgeworICAgIHZvaWQgbWV0aG9kKFN0cmluZyBzLCBpbnQgaSkgeworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImkgPSAiICsgaSk7CisgICAgfQorCisgICAgdm9pZCBtZXRob2QoU3RyaW5nIHMsIE9iamVjdCBvKSB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiaW50ZWdlciA9ICIgKyBvKTsKKyAgICB9CisKKyAgICB7CisgICAgICAgIG1ldGhvZCgiYWJjIiwgbmV3IEludGVnZXIoMTApKTsKKyAgICAgICAgbWV0aG9kKCJhYmMiLCAxMCk7CisgICAgfQorfQorCitjbGFzcyBCb3hpbmdDb25mbGljdCB7CisgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworICAgICAgICBhZGQ8ZXJyb3IgZGVzY3I9IkFtYmlndW91cyBtZXRob2QgY2FsbDogYm90aCAnQm94aW5nQ29uZmxpY3QuYWRkKGxvbmcsIExvbmcpJyBhbmQgJ0JveGluZ0NvbmZsaWN0LmFkZChMb25nLCBMb25nKScgbWF0Y2giPigwTCwgMEwpPC9lcnJvcj47CisgICAgfQorCisgICAgcHVibGljIHN0YXRpYyB2b2lkIGFkZChsb25nIGssIExvbmcgdikgeyB9CisgICAgcHVibGljIHN0YXRpYyB2b2lkIGFkZChMb25nIGssIExvbmcgdikgeyB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2dlbmVyaWNzSGlnaGxpZ2h0aW5nL0NhcHR1cmVkV2lsZGNhcmRBc3NpZ25tZW50cy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9nZW5lcmljc0hpZ2hsaWdodGluZy9DYXB0dXJlZFdpbGRjYXJkQXNzaWdubWVudHMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNzUwY2QyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9nZW5lcmljc0hpZ2hsaWdodGluZy9DYXB0dXJlZFdpbGRjYXJkQXNzaWdubWVudHMuamF2YQpAQCAtMCwwICsxLDM5IEBACisvKgorICogQ29weXJpZ2h0IDIwMDAtMjAxMiBKZXRCcmFpbnMgcy5yLm8uCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCitpbXBvcnQgamF2YS51dGlsLio7CisKK3B1YmxpYyBjbGFzcyBUZXN0IHsKKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgYmFyKCkgeworICAgICAgPGVycm9yIGRlc2NyPSJJbmNvbXBhdGlibGUgdHlwZXMuIEZvdW5kOiAnamF2YS5sYW5nLkNsYXNzPGNhcHR1cmU8PyBleHRlbmRzIGphdmEudXRpbC5JdGVyYXRvcj4+JywgcmVxdWlyZWQ6ICdqYXZhLmxhbmcuQ2xhc3M8PyBleHRlbmRzIGphdmEudXRpbC5JdGVyYXRvcjw/Pj4nIj5DbGFzczw/IGV4dGVuZHMgSXRlcmF0b3I8Pz4+IGMgPSBmb28oKTs8L2Vycm9yPgorICAgIH0KKyAgCisgICAgcHVibGljIHN0YXRpYyBDbGFzczw/IGV4dGVuZHMgSXRlcmF0b3I+IGZvbygpIHsKKyAgICAgIHJldHVybiBudWxsOworICAgIH0KK30KKworY2xhc3MgRXhhbXBsZSB7CisgICAgc3RhdGljIExpc3Q8PyBleHRlbmRzIEFic3RyYWN0VHJlZU5vZGU+IHRyZWVOb2RlcyA9IG51bGw7CisKKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisgICAgICAgIGZvciAoQWJzdHJhY3RUcmVlTm9kZTxTdHJpbmc+IHRyZWVOb2RlIDogdHJlZU5vZGVzKSB7CisKKyAgICAgICAgfQorICAgIH0KKworfQorY2xhc3MgQWJzdHJhY3RUcmVlTm9kZTxUPiB7fQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvZ2VuZXJpY3NIaWdobGlnaHRpbmcvQ2xhc3NJbmhlcml0YW5jZS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9nZW5lcmljc0hpZ2hsaWdodGluZy9DbGFzc0luaGVyaXRhbmNlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWE0ZTgwZgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvZ2VuZXJpY3NIaWdobGlnaHRpbmcvQ2xhc3NJbmhlcml0YW5jZS5qYXZhCkBAIC0wLDAgKzEsMTIyIEBACitjbGFzcyBEIGltcGxlbWVudHMgSTxJPnsKK30KK2NsYXNzIERUPFQ+IGltcGxlbWVudHMgSTxUPnsKK30KKworaW50ZXJmYWNlIEkgPFQ+IHsKK30KKworPGVycm9yIGRlc2NyPSInSScgY2Fubm90IGJlIGluaGVyaXRlZCB3aXRoIGRpZmZlcmVudCB0eXBlIGFyZ3VtZW50czogJ0knIGFuZCAnRCciPmNsYXNzIENDQyBleHRlbmRzIEQgaW1wbGVtZW50cyBJPEQ+PC9lcnJvcj4geworfQorYWJzdHJhY3QgY2xhc3MgQ0NDMjxUPiBleHRlbmRzIERUPFQ+IGltcGxlbWVudHMgSTxUPiB7Cit9CisKK2NsYXNzIGEgZXh0ZW5kcyBiPGQsIGM+IGltcGxlbWVudHMgYzxkLCBjPGMsYz4+LCBkPGI8YzxjLGM+LGQ+PiB7fQorcHVibGljIGNsYXNzIGI8SyxWPiBpbXBsZW1lbnRzIGM8SywgYzxWLFY+PiB7IH0KK2ludGVyZmFjZSBjPEssVj4gZXh0ZW5kcyBkPGI8VixLPj4ge30KK2ludGVyZmFjZSBkPEs+IHt9CisKKy8vIGV4dGVuZGluZyBmaW5hbCBjbGFzc2VzIGluIGJvdW5kcworY2xhc3MgQzxUIGV4dGVuZHMgU3RyaW5nPiB7CisgPEUgZXh0ZW5kcyBJbnRlZ2VyPiB2b2lkIGYoKSB7fQorfQorCitjbGFzcyBHZW5lcmljRXh0ZW5kSXRzZWxmPFQsIFUgZXh0ZW5kcyBUPgoreworICAgIEdlbmVyaWNFeHRlbmRJdHNlbGY8T2JqZWN0LE9iamVjdD4gZm9vOworfQorCisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vCitwdWJsaWMgYWJzdHJhY3QgY2xhc3MgWlpaWjxFPiB7CisgICAgcHVibGljIGFic3RyYWN0IEUgZ2V0RWxlbWVudCgpOworfQorYWJzdHJhY3QgY2xhc3MgWjxFPiBleHRlbmRzIFpaWlo8RT4ge30KK2NsYXNzIFoyIGV4dGVuZHMgWjxJbnRlZ2VyPiB7CisgICAgcHVibGljIEludGVnZXIgZ2V0RWxlbWVudCgpIHsKKyAgICAgICAgcmV0dXJuIG51bGw7ICAKKyAgICB9Cit9CisvLy8vLy8vLy8vLy8vLy8vLworY2xhc3MgQmFzZUMgPEU+IHsKKyAgICBFIHJlbW92ZSgpeworICAgICAgICByZXR1cm4gbnVsbDsKKyAgICB9Cit9CisKK2NsYXNzIERlcml2ZWRDIGV4dGVuZHMgQmFzZUM8U3RyaW5nPiB7CisgICAgcHVibGljIFN0cmluZyByZW1vdmUoKSB7CisgICAgICAgIFN0cmluZyBzID0gc3VwZXIucmVtb3ZlKCk7CisgICAgICAgIHJldHVybiBudWxsOworICAgIH0KK30KKworLy8vIHJhdyBpbiB0aGUgbXVsdGlwbGUgc3VwZXJzCitpbnRlcmZhY2UgSW50PFQ+IHsKKyAgICBBQ2xhc3M8VD4gZigpOworfQorYWJzdHJhY3QgY2xhc3MgQUNsYXNzPFQ+IGltcGxlbWVudHMgSW50PFQ+IHsKKyAgICBwdWJsaWMgYWJzdHJhY3QgQUNsYXNzPFQ+IGYoKTsKK30KKworY2xhc3MgTXlDbGFzcyBleHRlbmRzIEFDbGFzcyBpbXBsZW1lbnRzIEludHsKKyAgICBwdWJsaWMgQUNsYXNzIGYoKSB7CisgICAgICAgIHJldHVybiBudWxsOworICAgIH0KK30KKworY2xhc3MgQTxUPnsKKyAgQSgpe30KKyAgQShUIHQpe30KKworICB7CisgICBuZXcgQTxBPihuZXcgQSgpKXt9OworICB9Cit9CisKKy8vSURFQURFVi00NzMzOiB0aGlzIG92ZXJyaWRpbmcgaXMgT0sKK2NsYXNzIE91dGVyPFQ+Cit7CisgICAgcHVibGljIGNsYXNzIElubmVyCisgICAgeworICAgICAgICBwcml2YXRlIGZpbmFsIFQgdDsKKworICAgICAgICBwdWJsaWMgSW5uZXIoVCB0KSB7IHRoaXMudCA9IHQ7IH0KKworICAgICAgICBwdWJsaWMgVCBnZXRUKCkgeyByZXR1cm4gdDsgfQorCisgICAgICAgIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7IHJldHVybiB0LnRvU3RyaW5nKCk7IH0KKyAgICB9Cit9CisKK2NsYXNzIE90aGVyIGV4dGVuZHMgT3V0ZXI8U3RyaW5nPgoreworICAgIHB1YmxpYyBjbGFzcyBJdGhlciBleHRlbmRzIE91dGVyPFN0cmluZz4uSW5uZXIKKyAgICB7CisgICAgICAgIHB1YmxpYyBJdGhlcigpCisgICAgICAgIHsKKyAgICAgICAgICAgIHN1cGVyKCJoZWxsbyIpOyAvL3ZhbGlkIHN1cGVyIGNvbnN0cnVjdG9yIGNhbGwKKyAgICAgICAgfQorICAgIH0KK30KKworLy9lbmQgb2YgLy9JREVBREVWLTQ3MzMKK2ludGVyZmFjZSBBSSB7Cit9CitpbnRlcmZhY2UgQkkgeworfQorYWJzdHJhY3QgY2xhc3MgQWJzdHJhY3RDbGFzczxUPiB7CisgICAgQWJzdHJhY3RDbGFzcyhDbGFzczxUPiBjbGF6eikgeworICAgIH0KK30KK2NsYXNzIENvbmNyZXRlQ2xhc3MgZXh0ZW5kcyBBYnN0cmFjdENsYXNzPEFJPiB7CisgICAgQ29uY3JldGVDbGFzcygpIHsKKyAgICAgICAgc3VwZXIoQUkuY2xhc3MpOworICAgIH0KKyAgICBjbGFzcyBJbm5lckNsYXNzIGV4dGVuZHMgQWJzdHJhY3RDbGFzczxCST4geworICAgICAgICBJbm5lckNsYXNzKCkgeworICAgICAgICAgICAgc3VwZXIoQkkuY2xhc3MpOyAvLworICAgICAgICB9CisgICAgfQorfQorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvZ2VuZXJpY3NIaWdobGlnaHRpbmcvQ29uZGl0aW9uYWxFeHByZXNzaW9uLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2dlbmVyaWNzSGlnaGxpZ2h0aW5nL0NvbmRpdGlvbmFsRXhwcmVzc2lvbi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY0ZDZhYzEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2dlbmVyaWNzSGlnaGxpZ2h0aW5nL0NvbmRpdGlvbmFsRXhwcmVzc2lvbi5qYXZhCkBAIC0wLDAgKzEsMjEgQEAKK2ltcG9ydCBqYXZhLnV0aWwuVHJlZU1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuTWFwOworCitjbGFzcyBUZXN0IHsKKyAgYm9vbGVhbiBmICgpIHsKKyAgICByZXR1cm4gZmFsc2U7CisgIH0KKworICBCb29sZWFuIGcgKGludCBpKSB7CisgICAgLy9UaGlzIGlzIE9LIHRoYW5rcyB0byBib3hpbmcgZigpCisgICAgcmV0dXJuIGkgPiAwID8gZiAoKSA6IG51bGw7CisgIH0KKworICB7CisgICAgT2JqZWN0IHZhbHVlcyA9IG5ldyBPYmplY3QoKTsKKyAgICAvL0lERUFERVYtMTc1NjogdGhpcyBzaG91bGQgYmUgT0sKKyAgICBmaW5hbCBNYXA8T2JqZWN0LE9iamVjdD4gbmV3VmFsdWVzID0gdHJ1ZSA/IG5ldyBUcmVlTWFwPE9iamVjdCxPYmplY3Q+KCkgOiBuZXcgSGFzaE1hcDxPYmplY3QsT2JqZWN0PigpOworICAgIG5ld1ZhbHVlcy5nZXQodmFsdWVzKTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvZ2VuZXJpY3NIaWdobGlnaHRpbmcvQ29udGludWVJbmZlcmVuY2VBZnRlckZpcnN0UmF3UmVzdWx0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2dlbmVyaWNzSGlnaGxpZ2h0aW5nL0NvbnRpbnVlSW5mZXJlbmNlQWZ0ZXJGaXJzdFJhd1Jlc3VsdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNmMmUxZDAKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2dlbmVyaWNzSGlnaGxpZ2h0aW5nL0NvbnRpbnVlSW5mZXJlbmNlQWZ0ZXJGaXJzdFJhd1Jlc3VsdC5qYXZhCkBAIC0wLDAgKzEsMjMgQEAKK2ltcG9ydCBqYXZhLnV0aWwuKjsKKworY2xhc3MgVGVzdCB7CisKKyAgTGlzdDxTdHJpbmc+IGdldExpc3QoRnVuY3Rpb248T2JqZWN0LCBTdHJpbmc+IGZ1bmN0aW9uKSB7CisgICAgICAgIC8qCisgICAgICAgICAqIFdoZW4gdGhlIGZpcnN0IGFyZ3VtZW50IGJlbG93IGlzIGEgcmF3IHR5cGUgaXQgdHVybnMgcmVkIGJlY2F1c2UgSURFQSB0aGlua3MgdGhlIHJldHVybgorICAgICAgICAgKiB0eXBlIGlzIENvbGxlY3Rpb248Pi4gIGphdmFjIGFuZCBFY2xpcHNlIGRvbid0IGNhcmUKKyAgICAgICAgICovCisgICAgcmV0dXJuICB0cmFuc2Zvcm0obmV3IEFycmF5TGlzdCgpLCBuZXcgQXJyYXlMaXN0PFN0cmluZz4oKSwgZnVuY3Rpb24pOworICB9CisKKyAgPFIsIFMsIFQgZXh0ZW5kcyBDb2xsZWN0aW9uPFM+PiBUIHRyYW5zZm9ybShJdGVyYWJsZTw/IGV4dGVuZHMgUj4gb2xkQ29sbGVjdGlvbiwgVCBuZXdDb2xsZWN0aW9uLCBGdW5jdGlvbjxSLCBTPiBmdW5jdGlvbikgeworICAgIGZvciAoUiByIDogb2xkQ29sbGVjdGlvbikgeworICAgICAgbmV3Q29sbGVjdGlvbi5hZGQoZnVuY3Rpb24uYXBwbHkocikpOworICAgIH0KKyAgICByZXR1cm4gbmV3Q29sbGVjdGlvbjsKKyAgfQorCisgIGludGVyZmFjZSBGdW5jdGlvbjxYLCBZPiB7CisgICAgWSBhcHBseShYIGlucHV0KTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvZ2VuZXJpY3NIaWdobGlnaHRpbmcvQ29udmVydGlibGVUeXBlcy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9nZW5lcmljc0hpZ2hsaWdodGluZy9Db252ZXJ0aWJsZVR5cGVzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjAyZTMwYwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvZ2VuZXJpY3NIaWdobGlnaHRpbmcvQ29udmVydGlibGVUeXBlcy5qYXZhCkBAIC0wLDAgKzEsOTAgQEAKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworCitpbnRlcmZhY2UgWU88PHdhcm5pbmcgZGVzY3I9IlR5cGUgcGFyYW1ldGVyICdUJyBpcyBuZXZlciB1c2VkIj5UPC93YXJuaW5nPj4ge30KK2ludGVyZmFjZSBZTzEgZXh0ZW5kcyBZTzxTdHJpbmc+IHt9CitpbnRlcmZhY2UgWU8yIGV4dGVuZHMgWU88SW50ZWdlcj4ge30KKworcHVibGljIGNsYXNzIENvbnZlcnRpYmxlVGVzdCB7CisKKyAgICBZTzIgYmFyIChZTzEgcykgeworICAgICAgICAgIHJldHVybiA8ZXJyb3IgZGVzY3I9IkluY29udmVydGlibGUgdHlwZXM7IGNhbm5vdCBjYXN0ICdZTzEnIHRvICdZTzInIj4oWU8yKSBzPC9lcnJvcj47CisgICAgfQorfQorCisKKy8vSURFQS0xMDk3CitpbnRlcmZhY2UgSW50ZXJmYWNlMSB7fQoraW50ZXJmYWNlIEludGVyZmFjZTIge30KKworY2xhc3MgSW1wbGVtZW50YXRpb24gaW1wbGVtZW50cyBJbnRlcmZhY2UxIHt9CisKK3B1YmxpYyBjbGFzcyBJbmNvbnZlcnRpYmxlVHlwZXNUZXN0IDxFIGV4dGVuZHMgSW50ZXJmYWNlMj4KK3sKKyAgICBFIHRoaW5nOworCisgICAgcHVibGljIEUgZ2V0VGhpbmcoKSB7CisgICAgICAgICByZXR1cm4gdGhpbmc7CisgICAgfQorCisgICAgSW1wbGVtZW50YXRpb24gZm9vKEluY29udmVydGlibGVUeXBlc1Rlc3Q8PyBleHRlbmRzIEludGVyZmFjZTE+IGkyKSB7CisgICAgICAgLy9UaGlzIGlzIGEgdmFsaWQgY2FzdCBmcm9tIGludGVyc2VjdGlvbiB0eXBlCisgICAgICAgcmV0dXJuIChJbXBsZW1lbnRhdGlvbikgaTIuZ2V0VGhpbmcoKTsKKyAgICB9Cit9CisKK2NsYXNzIE15Q29sbGVjdGlvbiBleHRlbmRzIEFycmF5TGlzdDxJbnRlZ2VyPiB7fQorY2xhc3MgVGVzdGVyIHsKKyAgICBDb2xsZWN0aW9uPFN0cmluZz4geChNeUNvbGxlY3Rpb24gbCkgeworICAgICAgICByZXR1cm4gPGVycm9yIGRlc2NyPSJJbmNvbnZlcnRpYmxlIHR5cGVzOyBjYW5ub3QgY2FzdCAnTXlDb2xsZWN0aW9uJyB0byAnamF2YS51dGlsLkNvbGxlY3Rpb248amF2YS5sYW5nLlN0cmluZz4nIj4oQ29sbGVjdGlvbjxTdHJpbmc+KSBsPC9lcnJvcj47CisgICAgfQorfQorCisKK2NsYXNzIElERUFERVYzOTc4IHsKKyAgICBjbGFzcyBDb25zdHJ1Y3RvcjxUPiB7CisgICAgICAgIENsYXNzPFQ+IGdldERlY2xhcmluZ0NsYXNzKCkgeworICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgIH0KKyAgICB9CisgICAgcHVibGljIHN0YXRpYyB2b2lkIGZvbyhDb25zdHJ1Y3Rvcjw/PiBjb25zdHJ1Y3RvcikgeworICAgICAgICBpZihjb25zdHJ1Y3Rvci5nZXREZWNsYXJpbmdDbGFzcygpID09IFN0cmluZy5jbGFzcykgeyAvL2NhcHR1cmVkIHdpbGRjYXJkIGlzIGNvbnZlcnRpYmxlCisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oInllcCIpOworICAgICAgICB9CisgICAgfQorfQorCitjbGFzcyBDMjxUPiB7CisgICB2b2lkIGYoVCB0KSB7CisgICAgIGlmICh0IGluc3RhbmNlb2YgT2JqZWN0W10pIHJldHVybjsKKyAgIH0KK30KKworY2xhc3MgQ2FzdGluZyB7Cisgdm9pZCBmKE9iamVjdCBvKQorIHsKKyAgICAgICAgIGlmIChvIGluc3RhbmNlb2YgaW50W10pIHJldHVybjsKKworICAgICAgICAgT2JqZWN0IG9iajEgPSAoT2JqZWN0KXRydWU7ICAgZihvYmoxKTsKKyAgICAgICAgIE9iamVjdCBvYiA9IChOdW1iZXIpMTsgICAgICAgIGYob2IpOworICAgICAgICAgT2JqZWN0IG9iMiA9IChPYmplY3QpMTsgICAgICAgZihvYjIpOworCisgfQorCisgcHVibGljIHN0YXRpYyA8VD4gVCBjb252ZXJ0KENsYXNzPFQ+IGNsYXp6LCBPYmplY3Qgb2JqKSB7CisgICAgIGlmIChvYmogPT0gbnVsbCkgcmV0dXJuIG51bGw7CisgICAgIGlmIChTdHJpbmdbXS5jbGFzcyA9PSBjbGF6eikKKyAgICAgICAgcmV0dXJuIDx3YXJuaW5nIGRlc2NyPSJVbmNoZWNrZWQgY2FzdDogJ2phdmEubGFuZy5TdHJpbmdbXScgdG8gJ1QnIj4oVCkgcGFyc2VBcnJheShvYmopPC93YXJuaW5nPjsKKyAgICAgcmV0dXJuIG51bGw7CisgfQorCisgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nW10gcGFyc2VBcnJheShPYmplY3Qgb2JqKSB7CisgICAgcmV0dXJuIG9iai50b1N0cmluZygpLnNwbGl0KCIsIik7CisgfQorfQorCitjbGFzcyBDYXN0UHJpbWl0aXZlVG9UeXBlUGFyYW08VD4geworICBUIGZvbygpIHsKKyAgICByZXR1cm4gPGVycm9yIGRlc2NyPSJJbmNvbnZlcnRpYmxlIHR5cGVzOyBjYW5ub3QgY2FzdCAnaW50JyB0byAnVCciPihUKTE8L2Vycm9yPjsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvZ2VuZXJpY3NIaWdobGlnaHRpbmcvRGVlcENvbmZsaWN0aW5nUmV0dXJuVHlwZXMuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvZ2VuZXJpY3NIaWdobGlnaHRpbmcvRGVlcENvbmZsaWN0aW5nUmV0dXJuVHlwZXMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNDc3YWVlCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9nZW5lcmljc0hpZ2hsaWdodGluZy9EZWVwQ29uZmxpY3RpbmdSZXR1cm5UeXBlcy5qYXZhCkBAIC0wLDAgKzEsMjEgQEAKK2NsYXNzIFcgeworICAgIE9iamVjdCBmKCkgeworICAgICAgICByZXR1cm4gMDsKKyAgICB9Cit9CisKK2NsYXNzIFdXIGV4dGVuZHMgVyB7CisgICAgU3RyaW5nIGYoKSB7CisgICAgICAgIHJldHVybiBudWxsOworICAgIH0KK30KKworaW50ZXJmYWNlIElRIHsKKyAgICB2b2lkIGYoKTsKK30KKworCis8ZXJyb3IgZGVzY3I9IidmKCknIGluICdXVycgY2xhc2hlcyB3aXRoICdmKCknIGluICdJUSc7IGF0dGVtcHRpbmcgdG8gdXNlIGluY29tcGF0aWJsZSByZXR1cm4gdHlwZSI+Y2xhc3MgV1dXIGV4dGVuZHMgV1cgaW1wbGVtZW50cyBJUTwvZXJyb3I+IHsKKworfQorCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2dlbmVyaWNzSGlnaGxpZ2h0aW5nL0RpZmZlcmVudFR5cGVQYXJhbXNJbk92ZXJsb2FkZWRNZXRob2RzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2dlbmVyaWNzSGlnaGxpZ2h0aW5nL0RpZmZlcmVudFR5cGVQYXJhbXNJbk92ZXJsb2FkZWRNZXRob2RzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzQ0ZTU1NQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvZ2VuZXJpY3NIaWdobGlnaHRpbmcvRGlmZmVyZW50VHlwZVBhcmFtc0luT3ZlcmxvYWRlZE1ldGhvZHMuamF2YQpAQCAtMCwwICsxLDI4IEBACitpbXBvcnQgamF2YS51dGlsLio7CitjbGFzcyBOYXYgeworICAgIGludGVyZmFjZSBTaXplZCB7fQorICAgIGludGVyZmFjZSBTdHJlYW08PHdhcm5pbmcgZGVzY3I9IlR5cGUgcGFyYW1ldGVyICdUJyBpcyBuZXZlciB1c2VkIj5UPC93YXJuaW5nPj4geyB9CisKKyAgICBwcml2YXRlIHN0YXRpYzxVLCBUIGV4dGVuZHMgU2l6ZWQgJiBJdGVyYWJsZTxVPj4gU3RyZWFtPFU+IHN0cmVhbShUIGVudGl0eSwgaW50IGZsYWdzKSB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihlbnRpdHkpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oZmxhZ3MpOworICAgICAgICByZXR1cm4gbnVsbDsKKyAgICB9CisKKyAgICBwcml2YXRlIHN0YXRpYzxVLCBUIGV4dGVuZHMgSXRlcmFibGU8VT4+IFN0cmVhbTxVPiA8d2FybmluZyBkZXNjcj0iUHJpdmF0ZSBtZXRob2QgJ3N0cmVhbShULCBpbnQpJyBpcyBuZXZlciB1c2VkIj5zdHJlYW08L3dhcm5pbmc+KFQgZW50aXR5LCBpbnQgZmxhZ3MpIHsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKGVudGl0eSk7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihmbGFncyk7CisgICAgICAgIHJldHVybiBudWxsOworICAgIH0KKworICAgIHN0YXRpYyBjbGFzcyBBPFQ+IGltcGxlbWVudHMgSXRlcmFibGU8VD4sIFNpemVkIHsKKyAgICAgICAgcHVibGljIEl0ZXJhdG9yPFQ+IGl0ZXJhdG9yKCkgeworICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisgICAgICAgIFN0cmVhbTxTdHJpbmc+IGFTdHJlYW0gPSBzdHJlYW0obmV3IEE8U3RyaW5nPigpLCAwKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKGFTdHJlYW0pOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2dlbmVyaWNzSGlnaGxpZ2h0aW5nL0RvTm90QWNjZXB0TG93ZXJCb3VuZElmUmF3LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2dlbmVyaWNzSGlnaGxpZ2h0aW5nL0RvTm90QWNjZXB0TG93ZXJCb3VuZElmUmF3LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjliYmNiZQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvZ2VuZXJpY3NIaWdobGlnaHRpbmcvRG9Ob3RBY2NlcHRMb3dlckJvdW5kSWZSYXcuamF2YQpAQCAtMCwwICsxLDE3IEBACitpbXBvcnQgamF2YS51dGlsLio7CisKK2NsYXNzIFRlc3QgeworICBpbnRlcmZhY2UgQ29uZGl0aW9uPEs+IHt9CisgIGNsYXNzIElPQzxNPiBpbXBsZW1lbnRzIENvbmRpdGlvbiB7fQorCisgIHN0YXRpYyA8VD4gTGlzdDxUPiBmaWx0ZXIoVFtdIGMsIENvbmRpdGlvbjw/IHN1cGVyIFQ+IGNvbikgeworICAgIHJldHVybiBudWxsOworICB9CisKKyAgaW50ZXJmYWNlIE9FIHt9CisgIGludGVyZmFjZSBMT0UgZXh0ZW5kcyBPRSB7fQorCisgIHZvaWQgZm9vKE9FW10gZXMsIElPQzxMT0U+IGNvbikgeworICAgIExpc3Q8TE9FPiBsID0gZmlsdGVyKGVzLCBjb24pOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9nZW5lcmljc0hpZ2hsaWdodGluZy9FbnVtLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2dlbmVyaWNzSGlnaGxpZ2h0aW5nL0VudW0uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMTEzMTU3Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9nZW5lcmljc0hpZ2hsaWdodGluZy9FbnVtLmphdmEKQEAgLTAsMCArMSwxODkgQEAKK2VudW0gT3BlcmF0aW9uIHsKKyAgWDsKKyAgc3RhdGljIGludCBzID0gMDsKKyAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgY29uc3RTID0gIiI7CisgIE9wZXJhdGlvbigpIHsKKyAgICBpbnQgaSA9IDxlcnJvciBkZXNjcj0iSXQgaXMgaWxsZWdhbCB0byBhY2Nlc3Mgc3RhdGljIG1lbWJlciAncycgZnJvbSBlbnVtIGNvbnN0cnVjdG9yIG9yIGluc3RhbmNlIGluaXRpYWxpemVyIj5PcGVyYXRpb24uczwvZXJyb3I+OworICAgIGkgPSA8ZXJyb3IgZGVzY3I9Ikl0IGlzIGlsbGVnYWwgdG8gYWNjZXNzIHN0YXRpYyBtZW1iZXIgJ3MnIGZyb20gZW51bSBjb25zdHJ1Y3RvciBvciBpbnN0YW5jZSBpbml0aWFsaXplciI+czwvZXJyb3I+OworICAgIDxlcnJvciBkZXNjcj0iSXQgaXMgaWxsZWdhbCB0byBhY2Nlc3Mgc3RhdGljIG1lbWJlciAncycgZnJvbSBlbnVtIGNvbnN0cnVjdG9yIG9yIGluc3RhbmNlIGluaXRpYWxpemVyIj5zPC9lcnJvcj4gPSAwOworICAgIGZpbmFsIGludCB4ID0gSW50ZWdlci5NQVhfVkFMVUU7CisgICAgU3RyaW5nIGNvID0gY29uc3RTOworICAgIC8vIFRPRE86IHVuY2xlYXIKKyAgICAvL09wZXJhdGlvbiBvID0gWDsKKyAgfQorICBzdGF0aWMgeworICAgIGludCBpID0gT3BlcmF0aW9uLnM7CisgICAgaSA9IHM7CisgICAgcyA9IDA7CisgICAgZmluYWwgaW50IHggPSBJbnRlZ2VyLk1BWF9WQUxVRTsKKyAgICBTdHJpbmcgY28gPSBjb25zdFM7CisgICAgLy8gVE9ETzogdW5jbGVhcgorICAgIC8vT3BlcmF0aW9uIG8gPSBYOworICB9CisgIHsKKyAgICBpbnQgaSA9IDxlcnJvciBkZXNjcj0iSXQgaXMgaWxsZWdhbCB0byBhY2Nlc3Mgc3RhdGljIG1lbWJlciAncycgZnJvbSBlbnVtIGNvbnN0cnVjdG9yIG9yIGluc3RhbmNlIGluaXRpYWxpemVyIj5PcGVyYXRpb24uczwvZXJyb3I+OworICAgIGkgPSA8ZXJyb3IgZGVzY3I9Ikl0IGlzIGlsbGVnYWwgdG8gYWNjZXNzIHN0YXRpYyBtZW1iZXIgJ3MnIGZyb20gZW51bSBjb25zdHJ1Y3RvciBvciBpbnN0YW5jZSBpbml0aWFsaXplciI+czwvZXJyb3I+OworICAgIDxlcnJvciBkZXNjcj0iSXQgaXMgaWxsZWdhbCB0byBhY2Nlc3Mgc3RhdGljIG1lbWJlciAncycgZnJvbSBlbnVtIGNvbnN0cnVjdG9yIG9yIGluc3RhbmNlIGluaXRpYWxpemVyIj5zPC9lcnJvcj4gPSAwOworICAgIGZpbmFsIGludCB4ID0gSW50ZWdlci5NQVhfVkFMVUU7CisgICAgU3RyaW5nIGNvID0gY29uc3RTOworICAgIC8vIFRPRE86IHVuY2xlYXIKKyAgICAvL09wZXJhdGlvbiBvID0gWDsKKworICAgIE9wZXJhdGlvbiBvb28gPSA8ZXJyb3IgZGVzY3I9IkVudW0gdHlwZXMgY2Fubm90IGJlIGluc3RhbnRpYXRlZCI+bmV3IE9wZXJhdGlvbigpPC9lcnJvcj47CisgIH0KKworICA8ZXJyb3IgZGVzY3I9Iid2YWx1ZXMoKScgaXMgYWxyZWFkeSBkZWZpbmVkIGluICdPcGVyYXRpb24nIj52b2lkIHZhbHVlcygpPC9lcnJvcj4ge30KKyAgdm9pZCB2YWx1ZXMoaW50IGkpIHt9CisgIHZvaWQgdmFsdWVPZigpIHt9CisgIDxlcnJvciBkZXNjcj0iJ3ZhbHVlT2YoU3RyaW5nKScgaXMgYWxyZWFkeSBkZWZpbmVkIGluICdPcGVyYXRpb24nIj52b2lkIHZhbHVlT2YoU3RyaW5nIHMpPC9lcnJvcj4ge30KK30KKworY2xhc3MgZXh0ZSBleHRlbmRzIDxlcnJvciBkZXNjcj0iQ2Fubm90IGluaGVyaXQgZnJvbSBmaW5hbCAnT3BlcmF0aW9uJyI+T3BlcmF0aW9uPC9lcnJvcj4geworfQorCitjbGFzcyB1c2UgeworICB2b2lkIGYoT3BlcmF0aW9uIG9wKSB7CisgICBzd2l0Y2gob3ApIHsKKyAgICBjYXNlIDxlcnJvciBkZXNjcj0iQW4gZW51bSBzd2l0Y2ggY2FzZSBsYWJlbCBtdXN0IGJlIHRoZSB1bnF1YWxpZmllZCBuYW1lIG9mIGFuIGVudW1lcmF0aW9uIGNvbnN0YW50Ij5PcGVyYXRpb24uWDwvZXJyb3I+OiBicmVhazsKKyAgIH0KKyAgIHN3aXRjaChvcCkgeworICAgIGNhc2UgWDogYnJlYWs7CisgICB9CisgICBzd2l0Y2gob3ApIHsKKyAgICBjYXNlIDxlcnJvciBkZXNjcj0iRHVwbGljYXRlIGxhYmVsICdYJyI+WDwvZXJyb3I+OiBicmVhazsKKyAgICBjYXNlIDxlcnJvciBkZXNjcj0iRHVwbGljYXRlIGxhYmVsICdYJyI+WDwvZXJyb3I+OiBicmVhazsKKyAgIH0KKyAgfQorfQorCitlbnVtIHB1YkN0ciB7CisgIFgoMSk7CisgIDxlcnJvciBkZXNjcj0iTW9kaWZpZXIgJ3B1YmxpYycgbm90IGFsbG93ZWQgaGVyZSI+cHVibGljPC9lcnJvcj4gcHViQ3RyKGludCBpKSB7fQorfQorZW51bSBwcm90Q3RyIHsKKyAgWCgxKTsKKyAgPGVycm9yIGRlc2NyPSJNb2RpZmllciAncHJvdGVjdGVkJyBub3QgYWxsb3dlZCBoZXJlIj5wcm90ZWN0ZWQ8L2Vycm9yPiBwcm90Q3RyKGludCBpKSB7fQorfQorPGVycm9yIGRlc2NyPSJNb2RpZmllciAnZmluYWwnIG5vdCBhbGxvd2VkIGhlcmUiPmZpbmFsPC9lcnJvcj4gZW51bSBGaW4geyBZIH0KKzxlcnJvciBkZXNjcj0iTW9kaWZpZXIgJ2Fic3RyYWN0JyBub3QgYWxsb3dlZCBoZXJlIj5hYnN0cmFjdDwvZXJyb3I+IGVudW0gQWJzdHIgeyAgfQorCitlbnVtIHBhcmFtczxlcnJvciBkZXNjcj0iRW51bSBtYXkgbm90IGhhdmUgdHlwZSBwYXJhbWV0ZXJzIj48VD48L2Vycm9yPiB7Cit9CisKK2VudW0gT3VyRW51bSB7CisgIEEsIEIsIEM7CisKKyAgT3VyRW51bSgpIHsKKyAgfQorCisgIHsKKyAgICBFbnVtPE91ckVudW0+IGEgPSBBOworICAgIE91ckVudW0gZW51bVZhbHVlID0gQjsKKyAgICBzd2l0Y2ggKGVudW1WYWx1ZSkgeworICAgIH0KKworICAgIHN3aXRjaCAoZW51bVZhbHVlKSB7CisgICAgICBjYXNlIEE6CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgfQorfQorCitlbnVtIFRlc3RFbnVtCit7CisgICAgQSg8ZXJyb3IgZGVzY3I9IklsbGVnYWwgZm9yd2FyZCByZWZlcmVuY2UiPkI8L2Vycm9yPiksIEIoQSk7IAorICAgIFRlc3RFbnVtKFRlc3RFbnVtIG90aGVyKSB7CisgICAgICA8ZXJyb3IgZGVzY3I9IkNhbGwgdG8gc3VwZXIgaXMgbm90IGFsbG93ZWQgaW4gZW51bSBjb25zdHJ1Y3RvciI+c3VwZXIobnVsbCwgMCk8L2Vycm9yPjsKKyAgICB9Cit9CisKKzxlcnJvciBkZXNjcj0iQ2xhc3MgJ2Fic3RyJyBtdXN0IGVpdGhlciBiZSBkZWNsYXJlZCBhYnN0cmFjdCBvciBpbXBsZW1lbnQgYWJzdHJhY3QgbWV0aG9kICdydW4oKScgaW4gJ1J1bm5hYmxlJyI+ZW51bSBhYnN0ciBpbXBsZW1lbnRzIFJ1bm5hYmxlPC9lcnJvcj4geworfQorCisvL3RoaXMgb25lIGlzIE9LLCBlbnVtIGNvbnN0YW50cyBhcmUgY2hlY2tlZCBpbnN0ZWFkIG9mIGVudW0gaXRzZWxmCitlbnVtIGFic3RyMSBpbXBsZW1lbnRzIFJ1bm5hYmxlIHsKKyAgICBBIHsKKyAgICAgICAgcHVibGljIHZvaWQgcnVuKCkge30KKyAgICB9OworfQorCitjbGFzcyBYIGV4dGVuZHMgPGVycm9yIGRlc2NyPSJDbGFzc2VzIGNhbm5vdCBkaXJlY3RseSBleHRlbmQgJ2phdmEubGFuZy5FbnVtJyI+RW51bTwvZXJyb3I+IHsKKyAgICBwdWJsaWMgWChTdHJpbmcgbmFtZSwgaW50IG9yZGluYWwpIHsKKyAgICAgICAgc3VwZXIobmFtZSwgb3JkaW5hbCk7CisgICAgfQorfQorCitlbnVtIFN0YXRpY0luRW51bUNvbnN0YW50SW5pdGlhbGl6ZXIgeworICAgIEFOIHsKKyAgICAgICAgPGVycm9yIGRlc2NyPSJNb2RpZmllciAnc3RhdGljJyBub3QgYWxsb3dlZCBoZXJlIj5zdGF0aWM8L2Vycm9yPiBjbGFzcyBzIHsKKyAgICAgICAgfQorICAgICAgICBwcml2YXRlIDxlcnJvciBkZXNjcj0iSW5uZXIgY2xhc3NlcyBjYW5ub3QgaGF2ZSBzdGF0aWMgZGVjbGFyYXRpb25zIj5zdGF0aWM8L2Vycm9yPiBmaW5hbCBTdHJpbmcgdCA9IFN0cmluZy52YWx1ZU9mKDEpOworICAgIH07Cit9CisKK2ludGVyZmFjZSBCYXJ6IHsKKyAgICB2b2lkIGJheigpOworfQorCitlbnVtIEZvb3ogaW1wbGVtZW50cyBCYXJ6IHsKKyAgICA8ZXJyb3IgZGVzY3I9IkNsYXNzICdGb296JyBtdXN0IGVpdGhlciBiZSBkZWNsYXJlZCBhYnN0cmFjdCBvciBpbXBsZW1lbnQgYWJzdHJhY3QgbWV0aG9kICdiYXooKScgaW4gJ0JhcnonIj5GT088L2Vycm9yPjsKK30KKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KK2NsYXNzIHNzcyB7Cisgdm9pZCBmKCkgeworICAgPGVycm9yIGRlc2NyPSJFbnVtIG11c3Qgbm90IGJlIGxvY2FsIj5lbnVtIEVFRUU8L2Vycm9yPiB7IEVFLCBZWSB9OworIH0KK30KKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy9UaGlzIGNvZGUgaXMgT0sKK2VudW0gUG93ZXJPZlRlbiB7CisgICAgT05FKDEpLFRFTigxMCksCisgICAgSFVORFJFRCgxMDApIHsKKyAgICAgICAgcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKKyAgICAgICAgICAgIHJldHVybiBJbnRlZ2VyLnRvU3RyaW5nKHN1cGVyLnZhbCk7CisgICAgICAgIH0KKyAgICB9OworCisgICAgcHJpdmF0ZSBmaW5hbCBpbnQgdmFsOworCisgICAgUG93ZXJPZlRlbihpbnQgdmFsKSB7CisgICAgICAgIHRoaXMudmFsID0gdmFsOworICAgIH0KKworICAgIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7CisgICAgICAgIHJldHVybiBuYW1lKCkudG9Mb3dlckNhc2UoKTsKKyAgICB9CisKKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihPTkUgKyAiICIgKyBURU4gKyAiICIgKyBIVU5EUkVEKTsKKyAgICB9Cit9CisKKy8vSURFQURFVi04MTkyCitlbnVtIE15RW51bSB7CisgICAgWDEsIFgyOworCisgICAgcHJpdmF0ZSBzdGF0aWMgTXlFbnVtW10gdmFsdWVzID0gdmFsdWVzKCk7CisKKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgdGVzdCgpIHsKKworICAgICAgICBmb3IgKE15RW51bSBlIDogdmFsdWVzKSB7IC8vIHZhbHVlcyBpcyBjb2xvcmVkIHJlZAorICAgICAgICAgICAgZS50b1N0cmluZygpOworICAgICAgICB9CisgICAgfQorfQorLy9lbmQgb2YgSURFQURFVi04MTkyCisKKworY2xhc3MgRW51bUJ1Z0lERUFERVYxNTMzMyAgeworICBwdWJsaWMgZW51bSBUeXBlIHsgb25lLCB0byB9CisgIFR5cGUgdHlwZSA9IFR5cGUub25lOworICBwdWJsaWMgdm9pZCBtYWluKCkgeworICAgIHN3aXRjaCh0eXBlKXsKKyAgICAgIGNhc2Ugb25lOgorICAgICAgT2JqZWN0IG9uZSA9IG5ldyBPYmplY3QoKTsKKyAgICB9CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvZ2VuZXJpY3NIaWdobGlnaHRpbmcvRW51bVdpdGhBYnN0cmFjdE1ldGhvZHMuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvZ2VuZXJpY3NIaWdobGlnaHRpbmcvRW51bVdpdGhBYnN0cmFjdE1ldGhvZHMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYWJhZTZiCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9nZW5lcmljc0hpZ2hsaWdodGluZy9FbnVtV2l0aEFic3RyYWN0TWV0aG9kcy5qYXZhCkBAIC0wLDAgKzEsMjQgQEAKKzxlcnJvciBkZXNjcj0iTW9kaWZpZXIgJ2Fic3RyYWN0JyBub3QgYWxsb3dlZCBoZXJlIj5hYnN0cmFjdDwvZXJyb3I+IGVudW0gT3VyRW51bSB7CisgIDxlcnJvciBkZXNjcj0iQ2xhc3MgJ0Fub255bW91cyBjbGFzcyBkZXJpdmVkIGZyb20gT3VyRW51bScgbXVzdCBpbXBsZW1lbnQgYWJzdHJhY3QgbWV0aG9kICdmb28oKScgaW4gJ091ckVudW0nIj5BPC9lcnJvcj4geworICB9LAorICA8ZXJyb3IgZGVzY3I9IidPdXJFbnVtJyBpcyBhYnN0cmFjdDsgY2Fubm90IGJlIGluc3RhbnRpYXRlZCI+QjwvZXJyb3I+LAorICBDIHsKKyAgICB2b2lkIGZvbygpIHt9CisgIH0KKyAgOworCisgIGFic3RyYWN0IHZvaWQgZm9vKCk7Cit9CisKK2VudW0geHh4IHsKKyAgPGVycm9yIGRlc2NyPSIneHh4JyBpcyBhYnN0cmFjdDsgY2Fubm90IGJlIGluc3RhbnRpYXRlZCI+WDwvZXJyb3I+LAorICA8ZXJyb3IgZGVzY3I9IkNsYXNzICdBbm9ueW1vdXMgY2xhc3MgZGVyaXZlZCBmcm9tIHh4eCcgbXVzdCBpbXBsZW1lbnQgYWJzdHJhY3QgbWV0aG9kICdmKCknIGluICd4eHgnIj5ZPC9lcnJvcj4geworICB9OworCisgIGFic3RyYWN0IHZvaWQgZigpOworfQorCitlbnVtIG9rIHsKKyAgWCB7IHZvaWQgZigpIHt9IH07CisgIGFic3RyYWN0IHZvaWQgZigpOworfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9nZW5lcmljc0hpZ2hsaWdodGluZy9FcmFzdXJlVHlwZVBhcmFtZXRlckJvdW5kLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2dlbmVyaWNzSGlnaGxpZ2h0aW5nL0VyYXN1cmVUeXBlUGFyYW1ldGVyQm91bmQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZTJhMWVhCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9nZW5lcmljc0hpZ2hsaWdodGluZy9FcmFzdXJlVHlwZVBhcmFtZXRlckJvdW5kLmphdmEKQEAgLTAsMCArMSw5IEBACitpbnRlcmZhY2UgRm9vPFQ+IHsKKyAgICBwdWJsaWMgPEEgZXh0ZW5kcyBULCBCIGV4dGVuZHMgQT4gdm9pZCBiYXIoQ2xhc3M8QT4ga2V5LCBCIHZhbHVlKTsKK30KKworY2xhc3MgRm9vSW1wbCBpbXBsZW1lbnRzIEZvbzxTdHJpbmc+eworICAgICBwdWJsaWMgPEEgZXh0ZW5kcyBTdHJpbmcsICBCIGV4dGVuZHMgQT4gdm9pZCBiYXIoQ2xhc3M8QT4ga2V5LCBCIHZhbHVlKSB7CisKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9nZW5lcmljc0hpZ2hsaWdodGluZy9FeGNlcHRpb25zLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2dlbmVyaWNzSGlnaGxpZ2h0aW5nL0V4Y2VwdGlvbnMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMzljZmU2Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9nZW5lcmljc0hpZ2hsaWdodGluZy9FeGNlcHRpb25zLmphdmEKQEAgLTAsMCArMSwyMyBAQAorY2xhc3MgQyA8VCBleHRlbmRzIEV4Y2VwdGlvbj4geworICAgIHZvaWQgZm9vICgpIHRocm93cyBUIHt9CisgICAgdm9pZCBiYXIgKCkgeworICAgICAgICA8ZXJyb3IgZGVzY3I9IlVuaGFuZGxlZCBleGNlcHRpb246IFQiPmZvbyAoKTs8L2Vycm9yPgorICAgIH0KKworICAgIDxUIGV4dGVuZHMgRXJyb3I+IHZvaWQgZ29vKCkgeworICAgICAgICB0cnkgeworICAgICAgICAgICAgaW50IGkgPSAxMjsKKyAgICAgICAgfSBjYXRjaCAoPGVycm9yIGRlc2NyPSJDYW5ub3QgY2F0Y2ggdHlwZSBwYXJhbWV0ZXJzIj5UPC9lcnJvcj4gZXgpIHsKKyAgICAgICAgfQorICAgIH0KK30KKworLy9JREVBREVWLTQxNjk6IG5vIHByb2JsZW0gaGVyZQoraW50ZXJmYWNlIEJsdWIgeworICAgIHB1YmxpYyA8RSBleHRlbmRzIFRocm93YWJsZT4gdm9pZCBTd2l0Y2goKSB0aHJvd3MgRTsKK30KKworY2xhc3MgQmxpYiBpbXBsZW1lbnRzIEJsdWIgeworICAgIHB1YmxpYyA8RSBleHRlbmRzIFRocm93YWJsZT4gdm9pZCBTd2l0Y2goKSB0aHJvd3MgRSB7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9nZW5lcmljc0hpZ2hsaWdodGluZy9FeHBsaWNpdE1ldGhvZFBhcmFtZXRlcnMuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvZ2VuZXJpY3NIaWdobGlnaHRpbmcvRXhwbGljaXRNZXRob2RQYXJhbWV0ZXJzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOThmYjg4YgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvZ2VuZXJpY3NIaWdobGlnaHRpbmcvRXhwbGljaXRNZXRob2RQYXJhbWV0ZXJzLmphdmEKQEAgLTAsMCArMSwyMCBAQAoraW1wb3J0IGphdmEudXRpbC4qOworCitjbGFzcyBGb28geworICA8VD4gdm9pZCBmb28oKSB7fQorICA8VDEgZXh0ZW5kcyBMaXN0LCBUMj4gdm9pZCBmb28xKCkge30KKyAgdm9pZCBiYXIoKSB7fQorICA8VD4gdm9pZCB4eXooVCBsKSB7fQorCisgIHsKKyAgICBmb28oKTsKKyAgICB0aGlzLjxTdHJpbmc+Zm9vKCk7CisgICAgdGhpcy48ZXJyb3IgZGVzY3I9Ildyb25nIG51bWJlciBvZiB0eXBlIGFyZ3VtZW50czogMjsgcmVxdWlyZWQ6IDEiPjxTdHJpbmcsIEludGVnZXI+PC9lcnJvcj5mb28oKTsKKyAgICB0aGlzLjxlcnJvciBkZXNjcj0iTWV0aG9kICdiYXIoKScgZG9lcyBub3QgaGF2ZSB0eXBlIHBhcmFtZXRlcnMiPjxTdHJpbmc+PC9lcnJvcj5iYXIoKTsKKyAgICB0aGlzLjxlcnJvciBkZXNjcj0iTWV0aG9kICdiYXIoKScgZG9lcyBub3QgaGF2ZSB0eXBlIHBhcmFtZXRlcnMiPjxTdHJpbmcsIEludGVnZXI+PC9lcnJvcj5iYXIoKTsKKyAgICB0aGlzLjw8ZXJyb3IgZGVzY3I9IlR5cGUgcGFyYW1ldGVyICdqYXZhLmxhbmcuU3RyaW5nJyBpcyBub3Qgd2l0aGluIGl0cyBib3VuZDsgc2hvdWxkIGltcGxlbWVudCAnamF2YS51dGlsLkxpc3QnIj5TdHJpbmc8L2Vycm9yPiwgSW50ZWdlcj5mb28xKCk7CisgICAgdGhpcy48U3RyaW5nPnh5ejxlcnJvciBkZXNjcj0iJ3h5eihqYXZhLmxhbmcuU3RyaW5nKScgaW4gJ0ZvbycgY2Fubm90IGJlIGFwcGxpZWQgdG8gJyhqYXZhLmxhbmcuSW50ZWdlciknIj4oSW50ZWdlci52YWx1ZU9mKCIyNyIpKTwvZXJyb3I+OworICAgIEFycmF5TGlzdCBsaXN0ID0gbmV3IDxlcnJvciBkZXNjcj0iTWV0aG9kICdBcnJheUxpc3QoKScgZG9lcyBub3QgaGF2ZSB0eXBlIHBhcmFtZXRlcnMiPjxTdHJpbmc+PC9lcnJvcj5BcnJheUxpc3Q8U3RyaW5nPigpOworICB9Cit9CisKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvZ2VuZXJpY3NIaWdobGlnaHRpbmcvRXhwbGljaXRNZXRob2RQYXJhbWV0ZXJzMS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9nZW5lcmljc0hpZ2hsaWdodGluZy9FeHBsaWNpdE1ldGhvZFBhcmFtZXRlcnMxLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2MzZDgzZQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvZ2VuZXJpY3NIaWdobGlnaHRpbmcvRXhwbGljaXRNZXRob2RQYXJhbWV0ZXJzMS5qYXZhCkBAIC0wLDAgKzEsMTUgQEAKK2ltcG9ydCBqYXZhLnV0aWwuKjsKKworY2xhc3MgRm9vIHsKKyAgaW50ZXJmYWNlIENvbXBhcmFibGU8VD4geyB9CisgIHN0YXRpYyA8VCBleHRlbmRzIENvbXBhcmFibGU8VD4+IHZvaWQgc29ydChUIHQpIHt9CisKKyAgY2xhc3MgQyBpbXBsZW1lbnRzIENvbXBhcmFibGU8Qz4ge30KKyAgY2xhc3MgRCBpbXBsZW1lbnRzIENvbXBhcmFibGU8U3RyaW5nPiB7fQorCisgIHsKKyAgICBGb28uPEM+c29ydChuZXcgQygpKTsKKyAgICBGb28uPDxlcnJvciBkZXNjcj0iVHlwZSBwYXJhbWV0ZXIgJ0Zvby5EJyBpcyBub3Qgd2l0aGluIGl0cyBib3VuZDsgc2hvdWxkIGltcGxlbWVudCAnRm9vLkNvbXBhcmFibGU8Rm9vLkQ+JyI+RDwvZXJyb3I+PnNvcnQobmV3IEQoKSk7CisgIH0KK30KKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9nZW5lcmljc0hpZ2hsaWdodGluZy9GYWlsZWRJbmZlcmVuY2VXaXRoQm94aW5nLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2dlbmVyaWNzSGlnaGxpZ2h0aW5nL0ZhaWxlZEluZmVyZW5jZVdpdGhCb3hpbmcuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMjhiYzZiCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9nZW5lcmljc0hpZ2hsaWdodGluZy9GYWlsZWRJbmZlcmVuY2VXaXRoQm94aW5nLmphdmEKQEAgLTAsMCArMSwxMiBAQAorY2xhc3MgVGVzdCB7CisgICAgICAgIHB1YmxpYyA8VD4gVCBkb1N0dWZmKCkgeworICAgICAgICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICB9CisgICAgICAgIHB1YmxpYyBib29sZWFuIHRlc3QoKSB7CisgICAgICAgICAgICAgICAgPGVycm9yIGRlc2NyPSJJbmNvbXBhdGlibGUgdHlwZXMuIEZvdW5kOiAnamF2YS5sYW5nLk9iamVjdCcsIHJlcXVpcmVkOiAnYm9vbGVhbiciPnJldHVybiBkb1N0dWZmKCk7PC9lcnJvcj4KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgcHVibGljIEJvb2xlYW4gdGVzdDEoKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGRvU3R1ZmYoKTsKKyAgICAgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvZ2VuZXJpY3NIaWdobGlnaHRpbmcvRmllbGRzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2dlbmVyaWNzSGlnaGxpZ2h0aW5nL0ZpZWxkcy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE2OGU0ZTcKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2dlbmVyaWNzSGlnaGxpZ2h0aW5nL0ZpZWxkcy5qYXZhCkBAIC0wLDAgKzEsMTAgQEAKK2ltcG9ydCBqYXZhLnV0aWwuKjsKKworY2xhc3MgQyB7CisgIHN0YXRpYyBmaW5hbCBMaXN0IEVNUFRZID0gbmV3IEFycmF5TGlzdCgwKTsKKworICB2b2lkIG0oKSB7CisgICAgTGlzdDxTdHJpbmc+IGxpc3QgPSBDLjxlcnJvciBkZXNjcj0iUmVmZXJlbmNlIHBhcmFtZXRlcnMgYXJlIG5vdCBhbGxvd2VkIGhlcmUiPjxTdHJpbmc+PC9lcnJvcj5FTVBUWTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4obGlzdCk7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2dlbmVyaWNzSGlnaGxpZ2h0aW5nL0ZpeGVkRmFpbGVkSW5mZXJlbmNlV2l0aEJveGluZy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9nZW5lcmljc0hpZ2hsaWdodGluZy9GaXhlZEZhaWxlZEluZmVyZW5jZVdpdGhCb3hpbmcuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNjdhYzUxCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9nZW5lcmljc0hpZ2hsaWdodGluZy9GaXhlZEZhaWxlZEluZmVyZW5jZVdpdGhCb3hpbmcuamF2YQpAQCAtMCwwICsxLDEyIEBACitjbGFzcyBUZXN0IHsKKyAgICAgICAgcHVibGljIDxUPiBUIGRvU3R1ZmYoKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgIH0KKyAgICAgICAgcHVibGljIGJvb2xlYW4gdGVzdCgpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZG9TdHVmZigpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBwdWJsaWMgQm9vbGVhbiB0ZXN0MSgpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZG9TdHVmZigpOworICAgICAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9nZW5lcmljc0hpZ2hsaWdodGluZy9GbGF0dGVuSW50ZXJzZWN0aW9uVHlwZS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9nZW5lcmljc0hpZ2hsaWdodGluZy9GbGF0dGVuSW50ZXJzZWN0aW9uVHlwZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRmZjg1YTIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2dlbmVyaWNzSGlnaGxpZ2h0aW5nL0ZsYXR0ZW5JbnRlcnNlY3Rpb25UeXBlLmphdmEKQEAgLTAsMCArMSwxNiBAQAoraW50ZXJmYWNlIEJ1c2luZXNzRW50aXR5PEUgZXh0ZW5kcyBCdXNpbmVzc0VudGl0eTxFPj4geworfQorCitpbnRlcmZhY2UgRW50aXR5SWQ8RSBleHRlbmRzIEJ1c2luZXNzRW50aXR5PiB7CisgICAgRSBnZXRFbnRpdHkoKTsKK30KKworcHVibGljIGNsYXNzIE15VGVzdCB7CisgICAgPFQgZXh0ZW5kcyBCdXNpbmVzc0VudGl0eTxUPj4gVCBnZXRFbnRpdHkoRW50aXR5SWQ8VD4gZGVmYXVsdFZhbHVlKSB7CisgICAgICAgIHJldHVybiBnZXRFbnRpdHlJRChkZWZhdWx0VmFsdWUpLmdldEVudGl0eSgpOworICAgIH0KKworICAgIHB1YmxpYyA8UCBleHRlbmRzIEVudGl0eUlkPD8+PiBQIGdldEVudGl0eUlEKFAgZGVmYXVsdFZhbHVlKSB7CisgICAgICAgIHJldHVybiBudWxsOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2dlbmVyaWNzSGlnaGxpZ2h0aW5nL0ZvcmVhY2hUeXBlcy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9nZW5lcmljc0hpZ2hsaWdodGluZy9Gb3JlYWNoVHlwZXMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOWZjODIxCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9nZW5lcmljc0hpZ2hsaWdodGluZy9Gb3JlYWNoVHlwZXMuamF2YQpAQCAtMCwwICsxLDI5IEBACitjbGFzcyBhIHsKKyAgdm9pZCBmKGludFtdIGMpIHsKKyAgICBmb3IgKGludCBpOmMpIHt9CisgICAgZm9yICg8ZXJyb3IgZGVzY3I9IkluY29tcGF0aWJsZSB0eXBlcy4gRm91bmQ6ICdpbnQnLCByZXF1aXJlZDogJ2NoYXInIj5jaGFyIGk6YzwvZXJyb3I+KSB7fQorICAgIGZvciAoZG91YmxlIGk6Yykge30KKyAgICBkb3VibGVbXSBkYiA9IG51bGw7CisgICAgZm9yICg8ZXJyb3IgZGVzY3I9IkluY29tcGF0aWJsZSB0eXBlcy4gRm91bmQ6ICdkb3VibGUnLCByZXF1aXJlZDogJ2ludCciPmludCBpOmRiPC9lcnJvcj4pIHt9CisgICAgZm9yIChkb3VibGUgaTpkYikge30KKworICAgIGphdmEudXRpbC5MaXN0IGxpc3QgPSBudWxsOworICAgIGZvciAoPGVycm9yIGRlc2NyPSJJbmNvbXBhdGlibGUgdHlwZXMuIEZvdW5kOiAnamF2YS5sYW5nLk9iamVjdCcsIHJlcXVpcmVkOiAnamF2YS5sYW5nLlN0cmluZyciPlN0cmluZyBpOmxpc3Q8L2Vycm9yPikge30KKyAgICBmb3IgKE9iamVjdCBvOmxpc3QpIHt9CisKKyAgICBqYXZhLnV0aWwuTGlzdDxJbnRlZ2VyPiBjdCA9IG51bGw7CisgICAgZm9yIChOdW1iZXIgbjpjdCkge30KKyAgICBmb3IgKE9iamVjdCBuOmN0KSB7fQorICAgIGZvciAoSW50ZWdlciBuOmN0KSB7fQorICAgIGZvciAoPGVycm9yIGRlc2NyPSJJbmNvbXBhdGlibGUgdHlwZXMuIEZvdW5kOiAnamF2YS5sYW5nLkludGVnZXInLCByZXF1aXJlZDogJ2phdmEubGFuZy5TdHJpbmcnIj5TdHJpbmcgaTpjdDwvZXJyb3I+KSB7fQorICAgIGZvciAoPGVycm9yIGRlc2NyPSJJbmNvbXBhdGlibGUgdHlwZXMuIEZvdW5kOiAnamF2YS5sYW5nLkludGVnZXInLCByZXF1aXJlZDogJ2phdmEudXRpbC5MaXN0PGphdmEubGFuZy5JbnRlZ2VyPiciPmphdmEudXRpbC5MaXN0PEludGVnZXI+IGk6Y3Q8L2Vycm9yPikge30KKworICAgIE9iamVjdCBvID0gbnVsbDsKKyAgICBmb3IgKE9iamVjdCBvaTogKEl0ZXJhYmxlKW8pIHt9CisKKworICAgIGZvciAoPGVycm9yIGRlc2NyPSJJbmNvbXBhdGlibGUgdHlwZXMuIEZvdW5kOiAnZG91YmxlJywgcmVxdWlyZWQ6ICdpbnQnIj5pbnQgaTpkYjwvZXJyb3I+KSB7CisgICAgICBmb3IgKDxlcnJvciBkZXNjcj0iSW5jb21wYXRpYmxlIHR5cGVzLiBGb3VuZDogJ2phdmEubGFuZy5PYmplY3QnLCByZXF1aXJlZDogJ2ludCciPmludCBwOiBsaXN0PC9lcnJvcj4pIHt9CisgICAgfQorICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9nZW5lcmljc0hpZ2hsaWdodGluZy9HZW5lcmljRXh0ZW5kRXhjZXB0aW9uLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2dlbmVyaWNzSGlnaGxpZ2h0aW5nL0dlbmVyaWNFeHRlbmRFeGNlcHRpb24uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYmVmY2NiCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9nZW5lcmljc0hpZ2hsaWdodGluZy9HZW5lcmljRXh0ZW5kRXhjZXB0aW9uLmphdmEKQEAgLTAsMCArMSw0IEBACitjbGFzcyBUIGV4dGVuZHMgRXhjZXB0aW9uIHt9CitjbGFzcyBFPFQ+IGV4dGVuZHMgPGVycm9yIGRlc2NyPSJHZW5lcmljIGNsYXNzIG1heSBub3QgZXh0ZW5kICdqYXZhLmxhbmcuVGhyb3dhYmxlJyI+RXJyb3I8L2Vycm9yPiB7fQorY2xhc3MgTTxUMiBleHRlbmRzIEV4Y2VwdGlvbj4gZXh0ZW5kcyA8ZXJyb3IgZGVzY3I9IkdlbmVyaWMgY2xhc3MgbWF5IG5vdCBleHRlbmQgJ2phdmEubGFuZy5UaHJvd2FibGUnIj5UPC9lcnJvcj4ge30KK2NsYXNzIEV4PFgsWT4gZXh0ZW5kcyA8ZXJyb3IgZGVzY3I9IkdlbmVyaWMgY2xhc3MgbWF5IG5vdCBleHRlbmQgJ2phdmEubGFuZy5UaHJvd2FibGUnIj5UaHJvd2FibGU8L2Vycm9yPiB7fQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvZ2VuZXJpY3NIaWdobGlnaHRpbmcvSURFQTU3MjY0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2dlbmVyaWNzSGlnaGxpZ2h0aW5nL0lERUE1NzI2NC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkxMjAxMjcKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2dlbmVyaWNzSGlnaGxpZ2h0aW5nL0lERUE1NzI2NC5qYXZhCkBAIC0wLDAgKzEsMTcgQEAKK2NsYXNzIEExPFQ+IHt9CitjbGFzcyBCMTxUIGV4dGVuZHMgQTE8PyBzdXBlciBBMTw/IHN1cGVyIFQ+Pj57CisgICAgeworICAgICAgICBUIGEgPSBudWxsOworICAgICAgICA8ZXJyb3IgZGVzY3I9IkluY29tcGF0aWJsZSB0eXBlcy4gRm91bmQ6ICdUJywgcmVxdWlyZWQ6ICdBMTw/IHN1cGVyIFQ+JyI+QTE8PyBzdXBlciBUPiBiID0gYTs8L2Vycm9yPgorICAgIH0KK30KKworY2xhc3MgQTxUPiB7fQorY2xhc3MgQjxUIGV4dGVuZHMgQTw/IHN1cGVyIEE8PyBzdXBlciBUPj4+IHsKKworICAgIHZvaWQgYmFyKFQgeCl7CisgICAgICAgIGZvbyh4KTsKKyAgICB9CisgICAgdm9pZCBmb28oQTw/IHN1cGVyIFQ+IHgpe30KKyAgICB2b2lkIGZvbyhPYmplY3QgeCl7fQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvZ2VuZXJpY3NIaWdobGlnaHRpbmcvSURFQTU3Mjc1LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2dlbmVyaWNzSGlnaGxpZ2h0aW5nL0lERUE1NzI3NS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcxMTFiOGQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2dlbmVyaWNzSGlnaGxpZ2h0aW5nL0lERUE1NzI3NS5qYXZhCkBAIC0wLDAgKzEsMTMgQEAKK2Fic3RyYWN0IGNsYXNzIEEgeworICAgIGFic3RyYWN0IDxTLCBUIGV4dGVuZHMgSXRlcmFibGU8Uz4+IHZvaWQgZm9vKCk7CisKKyAgICB7CisgICAgICAgIGZvbygpOworICAgIH0KK30KKworY2xhc3MgWHsKKyAgICA8VCBleHRlbmRzIEVudW08VD4+IHZvaWQgZm9vKCl7CisgICAgICAgIGZvbygpOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2dlbmVyaWNzSGlnaGxpZ2h0aW5nL0lERUE1NzI4NC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9nZW5lcmljc0hpZ2hsaWdodGluZy9JREVBNTcyODQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMTdlMmYzCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9nZW5lcmljc0hpZ2hsaWdodGluZy9JREVBNTcyODQuamF2YQpAQCAtMCwwICsxLDYgQEAKK2Fic3RyYWN0IGNsYXNzIEE8Uz4geworICAgIGFic3RyYWN0IDxUIGV4dGVuZHMgUz4gdm9pZCBmb28oKTsKKyAgICB2b2lkIGJhcihBPD8gc3VwZXIgRXhjZXB0aW9uPiB4KXsKKyAgICAgICAgeC48PGVycm9yIGRlc2NyPSJUeXBlIHBhcmFtZXRlciAnU3RyaW5nW10nIGlzIG5vdCB3aXRoaW4gaXRzIGJvdW5kOyBzaG91bGQgZXh0ZW5kICdjYXB0dXJlPD8gc3VwZXIgamF2YS5sYW5nLkV4Y2VwdGlvbj4nIj5TdHJpbmdbXTwvZXJyb3I+PmZvbygpOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2dlbmVyaWNzSGlnaGxpZ2h0aW5nL0lERUE1NzI4Ni5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9nZW5lcmljc0hpZ2hsaWdodGluZy9JREVBNTcyODYuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMjZjNzg0Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9nZW5lcmljc0hpZ2hsaWdodGluZy9JREVBNTcyODYuamF2YQpAQCAtMCwwICsxLDYgQEAKK2NsYXNzIEE8VD4geworICAgIDxTIGV4dGVuZHMgQTw/IGV4dGVuZHMgVD4+IHZvaWQgZm9vKCl7fQorICAgIHZvaWQgYmFyKEE8Pz4gYSl7CisgICAgICAgIGEuPDxlcnJvciBkZXNjcj0iVHlwZSBwYXJhbWV0ZXIgJ0EnIGlzIG5vdCB3aXRoaW4gaXRzIGJvdW5kOyBzaG91bGQgZXh0ZW5kICdBPGNhcHR1cmU8Pz4+JyI+QTw/PjwvZXJyb3I+PmZvbygpOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2dlbmVyaWNzSGlnaGxpZ2h0aW5nL0lERUE1NzMwNy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9nZW5lcmljc0hpZ2hsaWdodGluZy9JREVBNTczMDcuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMWNhNDgyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9nZW5lcmljc0hpZ2hsaWdodGluZy9JREVBNTczMDcuamF2YQpAQCAtMCwwICsxLDEwIEBACitjbGFzcyBDPDx3YXJuaW5nIGRlc2NyPSJUeXBlIHBhcmFtZXRlciAnVCcgaXMgbmV2ZXIgdXNlZCI+VDwvd2FybmluZz4+e30KK2NsYXNzIEE8PHdhcm5pbmcgZGVzY3I9IlR5cGUgcGFyYW1ldGVyICdTJyBpcyBuZXZlciB1c2VkIj5TPC93YXJuaW5nPiw8d2FybmluZyBkZXNjcj0iVHlwZSBwYXJhbWV0ZXIgJ1QnIGlzIG5ldmVyIHVzZWQiPlQ8L3dhcm5pbmc+PiB7fQorY2xhc3MgQjxTLFQgZXh0ZW5kcyBDPFM+PiBleHRlbmRzIEE8UyxUPiB7CisgICAgdm9pZCBmb28oQjw/LD8+IHgpeworICAgICAgICBiYXIoeCk7CisgICAgfQorICAgIDxTLCBUPiB2b2lkIGJhcihBPFMsVD4geCl7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbih4KTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9nZW5lcmljc0hpZ2hsaWdodGluZy9JREVBNTczMDguamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvZ2VuZXJpY3NIaWdobGlnaHRpbmcvSURFQTU3MzA4LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWE0OWQyMQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvZ2VuZXJpY3NIaWdobGlnaHRpbmcvSURFQTU3MzA4LmphdmEKQEAgLTAsMCArMSwxMyBAQAorY2xhc3MgQTxUPiB7fQorCitpbnRlcmZhY2UgSUF7CisgICAgPFQ+IHZvaWQgZm9vKEE8PyBleHRlbmRzIFRbXT4geCk7Cit9CitpbnRlcmZhY2UgSUJ7CisgICAgPFQ+IGludCBmb28oQTw/IGV4dGVuZHMgVD4geCk7Cit9CitjbGFzcyBDIHsKKyAgICA8VCBleHRlbmRzIElBICYgSUI+IHZvaWQgYmFyKFQgeCwgQTxTdHJpbmdbXT4geSl7CisgICAgICAgIDxlcnJvciBkZXNjcj0iSW5jb21wYXRpYmxlIHR5cGVzLiBGb3VuZDogJ3ZvaWQnLCByZXF1aXJlZDogJ2ludCciPmludCB6ID0geC5mb28oeSk7PC9lcnJvcj4KKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9nZW5lcmljc0hpZ2hsaWdodGluZy9JREVBNTczMDkuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvZ2VuZXJpY3NIaWdobGlnaHRpbmcvSURFQTU3MzA5LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmZiNDMxNwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvZ2VuZXJpY3NIaWdobGlnaHRpbmcvSURFQTU3MzA5LmphdmEKQEAgLTAsMCArMSw5IEBACitjbGFzcyBBPFM+IHsKKyAgICB2b2lkIGJhcihBPD8gc3VwZXIgRXhjZXB0aW9uPiB4LCBBPD8gc3VwZXIgVGhyb3dhYmxlPiB5KXsKKyAgICAgICAgZm9vKHgsIHkpOworICAgIH0KKworICAgIDxUPiBUIGZvbyhBPD8gc3VwZXIgVD4geCwgQTw/IHN1cGVyIFQ+IHkpeworICAgICAgICByZXR1cm4gbnVsbDsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2dlbmVyaWNzSGlnaGxpZ2h0aW5nL0lERUE1NzMxMC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9nZW5lcmljc0hpZ2hsaWdodGluZy9JREVBNTczMTAuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MDQ1OTcyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9nZW5lcmljc0hpZ2hsaWdodGluZy9JREVBNTczMTAuamF2YQpAQCAtMCwwICsxLDkgQEAKK2NsYXNzIEE8VD4geworICAgIEV4Y2VwdGlvbltdIGJhcihBPD8gc3VwZXIgRXhjZXB0aW9uW10+IHgsIEE8PyBzdXBlciBUaHJvd2FibGVbXT4geSl7CisgICAgICAgIHJldHVybiB0aGlzLmZvbyh4LCB5KTsKKyAgICB9CisKKyAgICA8VD4gVCBmb28oQTw/IHN1cGVyIFQ+IHgsIEE8PyBzdXBlciBUPiB5KXsKKyAgICAgICAgcmV0dXJuIG51bGw7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvZ2VuZXJpY3NIaWdobGlnaHRpbmcvSURFQTU3MzExLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2dlbmVyaWNzSGlnaGxpZ2h0aW5nL0lERUE1NzMxMS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJiZTlhNGYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2dlbmVyaWNzSGlnaGxpZ2h0aW5nL0lERUE1NzMxMS5qYXZhCkBAIC0wLDAgKzEsMTEgQEAKK2NsYXNzIEE8VD4geworICAgIEE8QTw/IGV4dGVuZHMgVD4+IGZvbygpeworICAgICAgICByZXR1cm4gbnVsbDsKKyAgICB9CisKKyAgICB2b2lkIGJhcihBPD8+IHgpeworICAgICAgICBiYXo8ZXJyb3IgZGVzY3I9IidiYXooQTxBPD8+PiknIGluICdBJyBjYW5ub3QgYmUgYXBwbGllZCB0byAnKEE8QTxjYXB0dXJlPD8+Pj4pJyI+KHguZm9vKCkpPC9lcnJvcj47CisgICAgfQorCisgICAgPFM+IHZvaWQgYmF6KEE8QTw/IGV4dGVuZHMgUz4+IHgpe30KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2dlbmVyaWNzSGlnaGxpZ2h0aW5nL0lERUE1NzMxNS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9nZW5lcmljc0hpZ2hsaWdodGluZy9JREVBNTczMTUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZGFjOWZlCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9nZW5lcmljc0hpZ2hsaWdodGluZy9JREVBNTczMTUuamF2YQpAQCAtMCwwICsxLDQgQEAKK2NsYXNzIEE8Sz57CisgICAgdm9pZCBmb28oQTxBPEE8U3RyaW5nPj4+IGIpeyA8ZXJyb3IgZGVzY3I9IkluZmVycmVkIHR5cGUgJ0E8amF2YS5sYW5nLlN0cmluZz4nIGZvciB0eXBlIHBhcmFtZXRlciAnUycgaXMgbm90IHdpdGhpbiBpdHMgYm91bmQ7IHNob3VsZCBleHRlbmQgJ0E8amF2YS5sYW5nLk9iamVjdD4nIj5iYXIoYik8L2Vycm9yPjsgfQorICAgIDxVLCBTIGV4dGVuZHMgQTxVPiwgVCBleHRlbmRzIEE8Uz4+IHZvaWQgYmFyKEE8VD4gYSl7fQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvZ2VuZXJpY3NIaWdobGlnaHRpbmcvSURFQTU3MzM5LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2dlbmVyaWNzSGlnaGxpZ2h0aW5nL0lERUE1NzMzOS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM5NjQxNzcKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2dlbmVyaWNzSGlnaGxpZ2h0aW5nL0lERUE1NzMzOS5qYXZhCkBAIC0wLDAgKzEsNyBAQAorYWJzdHJhY3QgY2xhc3MgQSB7CisgICAgYWJzdHJhY3QgPFQgZXh0ZW5kcyBJdGVyYWJsZSAmIENsb25lYWJsZT4gdm9pZCBmb28oKTsKK30KKworYWJzdHJhY3QgY2xhc3MgQiBleHRlbmRzIEF7CisgICAgYWJzdHJhY3QgPFQgZXh0ZW5kcyBDbG9uZWFibGUgJiBJdGVyYWJsZT4gdm9pZCBmb28oKTsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2dlbmVyaWNzSGlnaGxpZ2h0aW5nL0lERUE1NzM0MC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9nZW5lcmljc0hpZ2hsaWdodGluZy9JREVBNTczNDAuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YmJiYTdiCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9nZW5lcmljc0hpZ2hsaWdodGluZy9JREVBNTczNDAuamF2YQpAQCAtMCwwICsxLDI2IEBACitjbGFzcyBBPFQsIFM+IHsKK30KKworY2xhc3MgQjxMPiB7CisgICAgQTxMLCBMPiBmb28oKSB7CisgICAgICAgIHJldHVybiBudWxsOworICAgIH0KKworICAgIHZvaWQgYmFyKEI8Pz4gYiwgQTw/LCA/PiBmb28xKSB7CisgICAgICAgIGJheihiLmZvbygpKTsKKyAgICAgICAgQTw/LCA/PiBmb28gPSBiLmZvbygpOworICAgICAgICBiYXo8ZXJyb3IgZGVzY3I9IidiYXooQTxLLEs+KScgaW4gJ0InIGNhbm5vdCBiZSBhcHBsaWVkIHRvICcoQTxjYXB0dXJlPD8+LGNhcHR1cmU8Pz4+KSciPihmb28pPC9lcnJvcj47CisgICAgICAgIGJhejxlcnJvciBkZXNjcj0iJ2JheihBPEssSz4pJyBpbiAnQicgY2Fubm90IGJlIGFwcGxpZWQgdG8gJyhBPGNhcHR1cmU8Pz4sY2FwdHVyZTw/Pj4pJyI+KGZvbzEpPC9lcnJvcj47CisgICAgfQorCisgICAgPEs+IHZvaWQgYmF6KEE8SywgSz4gYSkgeworICAgIH0KK30KKworCisKK2NsYXNzIEM8VCxTPnt9CitjbGFzcyBEPFQ+IGV4dGVuZHMgQzxULFQ+IHsKKyAgICB2b2lkIGZvbyhEPD8+IHgpeyBiYXIoeCk7IH0KKyAgICA8VD4gdm9pZCBiYXIoQzxULFQ+IHgpe30KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvZ2VuZXJpY3NIaWdobGlnaHRpbmcvSURFQTU3MzQ2LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2dlbmVyaWNzSGlnaGxpZ2h0aW5nL0lERUE1NzM0Ni5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBkODVkNzIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2dlbmVyaWNzSGlnaGxpZ2h0aW5nL0lERUE1NzM0Ni5qYXZhCkBAIC0wLDAgKzEsNSBAQAorCitjbGFzcyBEPFQ+ICB7CisgICAgdm9pZCBmb28oRDxEPD8+PiB4KXsgdGhpcy5iYXIoeCk7IH0KKyAgICA8VCBleHRlbmRzIFRocm93YWJsZT4gdm9pZCBiYXIoRDw/IHN1cGVyIEQ8VD4+IHgpe30KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2dlbmVyaWNzSGlnaGxpZ2h0aW5nL0lERUE1NzM3OC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9nZW5lcmljc0hpZ2hsaWdodGluZy9JREVBNTczNzguamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NDEwNzllCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9nZW5lcmljc0hpZ2hsaWdodGluZy9JREVBNTczNzguamF2YQpAQCAtMCwwICsxLDkgQEAKK2ludGVyZmFjZSBJQSB7CisgICAgPFQgZXh0ZW5kcyBDbG9uZWFibGUgJiBJdGVyYWJsZT4gdm9pZCBmb28oVCB4KTsKKyAgICA8VCBleHRlbmRzIEl0ZXJhYmxlICYgQ2xvbmVhYmxlPiB2b2lkIGZvbyhUIHgpOworfQorCithYnN0cmFjdCBjbGFzcyBBPFQgZXh0ZW5kcyBUaHJvd2FibGU+IHsKKyAgICBhYnN0cmFjdCA8VCBleHRlbmRzIENvbXBhcmFibGU8Pz4gJiBJdGVyYWJsZT4gdm9pZCBmb28oVCB4LCBBPD8+IHkpOworICAgIGFic3RyYWN0IDxUIGV4dGVuZHMgSXRlcmFibGUgJiBDb21wYXJhYmxlPD8+PiB2b2lkIGZvbyhUIHgsIEE8PyBleHRlbmRzIFRocm93YWJsZT4geSk7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9nZW5lcmljc0hpZ2hsaWdodGluZy9JREVBNTc0MTAuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvZ2VuZXJpY3NIaWdobGlnaHRpbmcvSURFQTU3NDEwLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTNlZmVhNQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvZ2VuZXJpY3NIaWdobGlnaHRpbmcvSURFQTU3NDEwLmphdmEKQEAgLTAsMCArMSwxMCBAQAorCitpbnRlcmZhY2UgSUEgeworICAgIDxUPiB2b2lkIGEoSXRlcmFibGU8U3RyaW5nPiB4KTsKK30KKworaW50ZXJmYWNlIElCIHsKKyAgICA8VD4gdm9pZCBhKEl0ZXJhYmxlIHgpOworfQorCis8ZXJyb3IgZGVzY3I9IidhKEl0ZXJhYmxlKScgaW4gJ0lCJyBjbGFzaGVzIHdpdGggJ2EoSXRlcmFibGU8U3RyaW5nPiknIGluICdJQSc7IGJvdGggbWV0aG9kcyBoYXZlIHNhbWUgZXJhc3VyZSwgeWV0IG5laXRoZXIgb3ZlcnJpZGVzIHRoZSBvdGhlciI+YWJzdHJhY3QgY2xhc3MgQyBpbXBsZW1lbnRzIElBLCBJQjwvZXJyb3I+IHt9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9nZW5lcmljc0hpZ2hsaWdodGluZy9JREVBNTc0MTEuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvZ2VuZXJpY3NIaWdobGlnaHRpbmcvSURFQTU3NDExLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGNhNmY2ZQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvZ2VuZXJpY3NIaWdobGlnaHRpbmcvSURFQTU3NDExLmphdmEKQEAgLTAsMCArMSwxOCBAQAorY2xhc3MgQTxTPiB7CisgICAgPFQ+IFQgZm9vKFQgeCwgUyB5KXsKKyAgICAgICAgcmV0dXJuIHg7CisgICAgfQorfQorCitjbGFzcyBCPFM+IGV4dGVuZHMgQTxTPiB7CisgICAgT2JqZWN0IGZvbyhPYmplY3QgeCwgT2JqZWN0IHkpeworICAgICAgICByZXR1cm4geDsKKyAgICB9Cit9CisKKzxlcnJvciBkZXNjcj0iJ2ZvbyhULCBTKScgaW4gJ0EnIGNsYXNoZXMgd2l0aCAnZm9vKE9iamVjdCwgT2JqZWN0KScgaW4gJ0InOyBib3RoIG1ldGhvZHMgaGF2ZSBzYW1lIGVyYXN1cmUsIHlldCBuZWl0aGVyIG92ZXJyaWRlcyB0aGUgb3RoZXIiPmNsYXNzIEMgZXh0ZW5kcyBCPFN0cmluZz48L2Vycm9yPiB7CisgICAgQE92ZXJyaWRlCisgICAgPFQ+IFQgZm9vKFQgeCwgU3RyaW5nIHkpIHsKKyAgICAgICAgPGVycm9yIGRlc2NyPSJJbmNvbXBhdGlibGUgdHlwZXMuIEZvdW5kOiAnamF2YS5sYW5nLk9iamVjdCcsIHJlcXVpcmVkOiAnVCciPnJldHVybiBzdXBlci5mb28oeCwgeSk7PC9lcnJvcj4KKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9nZW5lcmljc0hpZ2hsaWdodGluZy9JREVBNTc0ODQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvZ2VuZXJpY3NIaWdobGlnaHRpbmcvSURFQTU3NDg0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODM3OWVlNQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvZ2VuZXJpY3NIaWdobGlnaHRpbmcvSURFQTU3NDg0LmphdmEKQEAgLTAsMCArMSw3IEBACithYnN0cmFjdCBjbGFzcyBDeworICAgIGFic3RyYWN0IDxUPiBUIGZvbyhUIHgsIFQgeSk7CisKKyAgICB7CisgICAgICAgIExvbmcgcyA9IChMb25nKSBmb28oMSwxTCk7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvZ2VuZXJpY3NIaWdobGlnaHRpbmcvSURFQTU3NDg1LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2dlbmVyaWNzSGlnaGxpZ2h0aW5nL0lERUE1NzQ4NS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBmY2ViNjkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2dlbmVyaWNzSGlnaGxpZ2h0aW5nL0lERUE1NzQ4NS5qYXZhCkBAIC0wLDAgKzEsOSBAQAorYWJzdHJhY3QgY2xhc3MgQXsKKyAgICBhYnN0cmFjdCA8UyBleHRlbmRzIE51bWJlciAmIENvbXBhcmFibGU8Pz4sIFQgZXh0ZW5kcyBOdW1iZXIgJiBDb21wYXJhYmxlPD8gZXh0ZW5kcyBTPj4gVCBmb28oCisgICAgICAgICAgICBDb21wYXJhYmxlPD8gZXh0ZW5kcyBUPiB4LAorICAgICAgICAgICAgQ29tcGFyYWJsZTw/IGV4dGVuZHMgVD4geSk7CisKKyAgICB7CisgICAgICAgIGZvbygxLCAxTCk7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvZ2VuZXJpY3NIaWdobGlnaHRpbmcvSURFQTU3NDg2LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2dlbmVyaWNzSGlnaGxpZ2h0aW5nL0lERUE1NzQ4Ni5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ5NDJlZGYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2dlbmVyaWNzSGlnaGxpZ2h0aW5nL0lERUE1NzQ4Ni5qYXZhCkBAIC0wLDAgKzEsOCBAQAorY2xhc3MgQjxULFM+e30KK2Fic3RyYWN0IGNsYXNzIEE8VD4geworICAgIGFic3RyYWN0IEI8VCxUPiBmb28oKTsKKyAgICA8VD4gdm9pZCBiYXooQjxULFQ+IGIpe30KKyAgICB2b2lkIGJhcihBPD8+IGEpeworICAgICAgICBiYXooYS5mb28oKSk7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvZ2VuZXJpY3NIaWdobGlnaHRpbmcvSURFQTU3NDkyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2dlbmVyaWNzSGlnaGxpZ2h0aW5nL0lERUE1NzQ5Mi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVjZDQwMmEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2dlbmVyaWNzSGlnaGxpZ2h0aW5nL0lERUE1NzQ5Mi5qYXZhCkBAIC0wLDAgKzEsMTcgQEAKK2Fic3RyYWN0IGNsYXNzIEE8VD57CisgICAgYWJzdHJhY3QgPFM+IFMgZm9vKFMgeCwgUyB5KTsKKyAgICA8UyBleHRlbmRzIE51bWJlciAmIENvbXBhcmFibGU8PyBleHRlbmRzIE51bWJlcj4+IHZvaWQgYmF6KEE8Uz4gYSl7fQorCisgICAgdm9pZCBiYXIoQTxMb25nPiB4LCBBPEludGVnZXI+IHkpeworICAgICAgICBiYXooZm9vKHgsIHkpKTsKKyAgICB9Cit9CisKK2Fic3RyYWN0IGNsYXNzIEExPFQ+eworICAgIGFic3RyYWN0IDxTPiBTIGZvbyhTIHgsIFMgeSk7CisgICAgPFQgZXh0ZW5kcyBOdW1iZXIgJiBDb21wYXJhYmxlPD8+LCBTIGV4dGVuZHMgTnVtYmVyICYgQ29tcGFyYWJsZTw/IGV4dGVuZHMgVD4+IHZvaWQgYmF6KEExPFM+IGEpe30KKworICAgIHZvaWQgYmFyKEExPExvbmc+IHgsIEExPEludGVnZXI+IHkpeworICAgICAgICBiYXooZm9vKHgsIHkpKTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9nZW5lcmljc0hpZ2hsaWdodGluZy9JREVBNTc0OTMuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvZ2VuZXJpY3NIaWdobGlnaHRpbmcvSURFQTU3NDkzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjg3MjBiOAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvZ2VuZXJpY3NIaWdobGlnaHRpbmcvSURFQTU3NDkzLmphdmEKQEAgLTAsMCArMSw4IEBACithYnN0cmFjdCBjbGFzcyBBPFQ+eworICAgIGFic3RyYWN0IDxTPiBTIGZvbyhTIHgsIFMgeSk7CisgICAgPFMgZXh0ZW5kcyBOdW1iZXIgJiBDb21wYXJhYmxlPD8+PiB2b2lkIGJheihBPFM+IGEpe30KKworICAgIHZvaWQgYmFyKEE8TG9uZz4geCwgQTxJbnRlZ2VyPiB5KXsKKyAgICAgICAgYmF6KGZvbyh4LCB5KSk7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvZ2VuZXJpY3NIaWdobGlnaHRpbmcvSURFQTU3NDk0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2dlbmVyaWNzSGlnaGxpZ2h0aW5nL0lERUE1NzQ5NC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM3MDE4MmYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2dlbmVyaWNzSGlnaGxpZ2h0aW5nL0lERUE1NzQ5NC5qYXZhCkBAIC0wLDAgKzEsMTYgQEAKK2ltcG9ydCBqYXZhLnV0aWwuKjsKK2Fic3RyYWN0IGNsYXNzIEEgeworICAgIGFic3RyYWN0IDxUPiBUIGJheihMaXN0PD8gc3VwZXIgTGlzdDw/IHN1cGVyIFQ+PiBhKTsKKworICAgIHZvaWQgYmFyKExpc3Q8TGlzdDw/Pj4geCl7CisgICAgICAgIFN0cmluZyBzID0gYmF6KHgpOworICAgIH0KK30KKworYWJzdHJhY3QgY2xhc3MgQTF7CisgICAgYWJzdHJhY3QgPFQ+IFQgYmF6KExpc3Q8PyBzdXBlciBUPiBhKTsKKworICAgIHZvaWQgYmFyKExpc3Q8Pz4geCl7CisgICAgICAgIFN0cmluZyBvID0gYmF6PGVycm9yIGRlc2NyPSInYmF6KGphdmEudXRpbC5MaXN0PD8gc3VwZXIgamF2YS5sYW5nLlN0cmluZz4pJyBpbiAnQTEnIGNhbm5vdCBiZSBhcHBsaWVkIHRvICcoamF2YS51dGlsLkxpc3Q8Y2FwdHVyZTw/Pj4pJyI+KHgpPC9lcnJvcj47CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvZ2VuZXJpY3NIaWdobGlnaHRpbmcvSURFQTU3NDk1LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2dlbmVyaWNzSGlnaGxpZ2h0aW5nL0lERUE1NzQ5NS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY5MWQ0MDQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2dlbmVyaWNzSGlnaGxpZ2h0aW5nL0lERUE1NzQ5NS5qYXZhCkBAIC0wLDAgKzEsOSBAQAoraW1wb3J0IGphdmEudXRpbC4qOworaW50ZXJmYWNlIEM8VD4gZXh0ZW5kcyBMaXN0PExpc3Q8VD4+e30KK2Fic3RyYWN0IGNsYXNzIEEgeworICAgIGFic3RyYWN0IDxUPiBUIGJheihMaXN0PD8gc3VwZXIgTGlzdDw/IHN1cGVyIFQ+PiBhKTsKKworICAgIHZvaWQgYmFyKEM8Pz4geCl7CisgICAgICAgIGJhejxlcnJvciBkZXNjcj0iJ2JheihqYXZhLnV0aWwuTGlzdDw/IHN1cGVyIGphdmEudXRpbC5MaXN0PD8gc3VwZXIgamF2YS5sYW5nLk9iamVjdD4+KScgaW4gJ0EnIGNhbm5vdCBiZSBhcHBsaWVkIHRvICcoQzxjYXB0dXJlPD8+PiknIj4oeCk8L2Vycm9yPjsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9nZW5lcmljc0hpZ2hsaWdodGluZy9JREVBNTc0OTYuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvZ2VuZXJpY3NIaWdobGlnaHRpbmcvSURFQTU3NDk2LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjUwYjhmYzEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2dlbmVyaWNzSGlnaGxpZ2h0aW5nL0lERUE1NzQ5Ni5qYXZhCkBAIC0wLDAgKzEsMTEgQEAKK2ludGVyZmFjZSBJPFQ+e30KK2ludGVyZmFjZSBBIGV4dGVuZHMgSTxBW10+e30KK2ludGVyZmFjZSBCIGV4dGVuZHMgSTxCW10+e30KKworYWJzdHJhY3QgY2xhc3MgY3sKKyAgICBhYnN0cmFjdCA8VD4gVCBiYXooVCB4LCBUIHkpOworCisgICAgdm9pZCBiYXIoQSB4LCBCIHkpeworICAgICAgICBiYXooeCwgeSk7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvZ2VuZXJpY3NIaWdobGlnaHRpbmcvSURFQTU3NTA5LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2dlbmVyaWNzSGlnaGxpZ2h0aW5nL0lERUE1NzUwOS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgwMTVmYjUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2dlbmVyaWNzSGlnaGxpZ2h0aW5nL0lERUE1NzUwOS5qYXZhCkBAIC0wLDAgKzEsOSBAQAoraW1wb3J0IGphdmEudXRpbC5MaXN0OworCithYnN0cmFjdCBjbGFzcyBYIHsKKyAgICBhYnN0cmFjdCA8VD4gdm9pZCBjb3B5KExpc3Q8VD4gZGVzdCwgTGlzdDw/IGV4dGVuZHMgVD4gc3JjKTsKKworICAgIHZvaWQgZm9vKExpc3Q8PyBzdXBlciBUaHJvd2FibGU+IHgsIExpc3Q8PyBleHRlbmRzIEV4Y2VwdGlvbj4geSl7CisgICAgICAgIGNvcHkoeCwgeSk7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvZ2VuZXJpY3NIaWdobGlnaHRpbmcvSURFQTU3NTMzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2dlbmVyaWNzSGlnaGxpZ2h0aW5nL0lERUE1NzUzMy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjViZjg2NzQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2dlbmVyaWNzSGlnaGxpZ2h0aW5nL0lERUE1NzUzMy5qYXZhCkBAIC0wLDAgKzEsNiBAQAorY2xhc3MgQzxUIGV4dGVuZHMgQzw/IGV4dGVuZHMgQzw/IGV4dGVuZHMgVD4+PnsKKyAgICB2b2lkIGZvbyhDPD8+IHgpeworICAgICAgICA8ZXJyb3IgZGVzY3I9IkluZmVycmVkIHR5cGUgJz8gZXh0ZW5kcyBDPD8gZXh0ZW5kcyBDPGNhcHR1cmU8Pz4+PicgZm9yIHR5cGUgcGFyYW1ldGVyICdUJyBpcyBub3Qgd2l0aGluIGl0cyBib3VuZDsgc2hvdWxkIGV4dGVuZCAnQzw/IGV4dGVuZHMgQzw/IGV4dGVuZHMgQzxjYXB0dXJlPD8+Pj4+JyI+YmFyKHgpPC9lcnJvcj47CisgICAgfQorICAgIDxUIGV4dGVuZHMgQzw/IGV4dGVuZHMgVD4+IHZvaWQgYmFyKEM8VD4geCl7fQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvZ2VuZXJpY3NIaWdobGlnaHRpbmcvSURFQTU3NTM5LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2dlbmVyaWNzSGlnaGxpZ2h0aW5nL0lERUE1NzUzOS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNmYWFmNTkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2dlbmVyaWNzSGlnaGxpZ2h0aW5nL0lERUE1NzUzOS5qYXZhCkBAIC0wLDAgKzEsMTMgQEAKK2NsYXNzIEU8VD4geworICAgIENsYXNzPFRbXT4gbyA9IDxlcnJvciBkZXNjcj0iQ2Fubm90IHNlbGVjdCBmcm9tIGEgdHlwZSB2YXJpYWJsZSI+VFtdPC9lcnJvcj4uY2xhc3M7Cit9CisKK2NsYXNzIE15Q2xhc3M8VD4geworICAgIENsYXNzPFRbXT4gZ2V0VHMoKSB7CisgICAgICAgIHJldHVybiA8ZXJyb3IgZGVzY3I9IkNhbm5vdCBzZWxlY3QgZnJvbSBhIHR5cGUgdmFyaWFibGUiPlRbXTwvZXJyb3I+LmNsYXNzOworICAgIH0KKworICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKyAgICAgICAgbmV3IE15Q2xhc3M8U3RyaW5nPigpLmdldFRzKCk7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvZ2VuZXJpY3NIaWdobGlnaHRpbmcvSURFQTU3NTU3LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2dlbmVyaWNzSGlnaGxpZ2h0aW5nL0lERUE1NzU1Ny5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU2ZWZlYzEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2dlbmVyaWNzSGlnaGxpZ2h0aW5nL0lERUE1NzU1Ny5qYXZhCkBAIC0wLDAgKzEsNyBAQAorYWJzdHJhY3QgY2xhc3MgQSB7CisgICAgYWJzdHJhY3Qgdm9pZCBmb28oRW51bTw/PiB4KTsKK30KKworY2xhc3MgQiBleHRlbmRzIEEgeworICAgIHZvaWQgZm9vKEVudW08PyBleHRlbmRzIEVudW08Pz4+IHgpIHsgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvZ2VuZXJpY3NIaWdobGlnaHRpbmcvSURFQTU3NTYzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2dlbmVyaWNzSGlnaGxpZ2h0aW5nL0lERUE1NzU2My5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE4Y2IyMzkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2dlbmVyaWNzSGlnaGxpZ2h0aW5nL0lERUE1NzU2My5qYXZhCkBAIC0wLDAgKzEsNyBAQAorY2xhc3MgQyB7CisgICAgdm9pZCBmb28oKXt9Cit9CisKK2NsYXNzIEQgZXh0ZW5kcyBDeworICAgIHN0YXRpYyA8VD4gdm9pZCBmb28oKXt9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9nZW5lcmljc0hpZ2hsaWdodGluZy9JREVBNTc2NTAuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvZ2VuZXJpY3NIaWdobGlnaHRpbmcvSURFQTU3NjUwLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGY1YmI3MwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvZ2VuZXJpY3NIaWdobGlnaHRpbmcvSURFQTU3NjUwLmphdmEKQEAgLTAsMCArMSw3IEBACithYnN0cmFjdCBjbGFzcyBBIHsKKyAgICBhYnN0cmFjdCA8VD4gVCBmb28oKTsKKworICAgIHsKKyAgICAgICAgaW50IHggPSBmb28oKTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9nZW5lcmljc0hpZ2hsaWdodGluZy9JREVBNTc2NjcuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvZ2VuZXJpY3NIaWdobGlnaHRpbmcvSURFQTU3NjY3LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWYyN2ZhMAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvZ2VuZXJpY3NIaWdobGlnaHRpbmcvSURFQTU3NjY3LmphdmEKQEAgLTAsMCArMSw3IEBACitjbGFzcyBBIHsKKyAgICA8VD4gQShUIHgpIHt9CisKKyAgICB7CisgICAgICAgIG5ldyA8PGVycm9yIGRlc2NyPSJBY3R1YWwgdHlwZSBhcmd1bWVudCBhbmQgaW5mZXJyZWQgdHlwZSBjb250cmFkaWN0IGVhY2ggb3RoZXIiPlN0cmluZzwvZXJyb3I+PkEoMSk7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvZ2VuZXJpY3NIaWdobGlnaHRpbmcvSURFQTU3NjY4LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2dlbmVyaWNzSGlnaGxpZ2h0aW5nL0lERUE1NzY2OC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNjNDkxNjIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2dlbmVyaWNzSGlnaGxpZ2h0aW5nL0lERUE1NzY2OC5qYXZhCkBAIC0wLDAgKzEsMTcgQEAKK2NsYXNzIEEgeworICAgIDxUPiBBKCkge30KKworICAgIHsKKyAgICAgICAgbmV3IDw8ZXJyb3IgZGVzY3I9IlR5cGUgYXJndW1lbnQgY2Fubm90IGJlIG9mIHByaW1pdGl2ZSB0eXBlIj5pbnQ8L2Vycm9yPj5BKCk7CisgICAgfQorfQorCitjbGFzcyBCPFQ+IHsKKyAgICB7CisgICAgICAgIG5ldyBCPDxlcnJvciBkZXNjcj0iVHlwZSBhcmd1bWVudCBjYW5ub3QgYmUgb2YgcHJpbWl0aXZlIHR5cGUiPmludDwvZXJyb3I+PigpOworICAgICAgICBCLjw8ZXJyb3IgZGVzY3I9IlR5cGUgYXJndW1lbnQgY2Fubm90IGJlIG9mIHByaW1pdGl2ZSB0eXBlIj5pbnQ8L2Vycm9yPj5tKCk7CisgICAgfQorCisgICAgPFM+IHZvaWQgbSgpe30KKworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvZ2VuZXJpY3NIaWdobGlnaHRpbmcvSURFQTYzMjkxLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2dlbmVyaWNzSGlnaGxpZ2h0aW5nL0lERUE2MzI5MS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMzNDNkYjcKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2dlbmVyaWNzSGlnaGxpZ2h0aW5nL0lERUE2MzI5MS5qYXZhCkBAIC0wLDAgKzEsNTcgQEAKK2ltcG9ydCBqYXZhLnV0aWwuQ29tcGFyYXRvcjsKK2ltcG9ydCBqYXZhLnV0aWwuU2V0OworCitwdWJsaWMgY2xhc3MgQ2FzdEVycm9yIHsKKyAgICBwdWJsaWMgdm9pZCBmb28oQ29tcGFyYXRvcjw/IHN1cGVyIGJ5dGVbXT4gY29tcGFyYXRvcikgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIE15Q29tcGFyYXRvciBjb21wYXJhdG9yMSA9IChNeUNvbXBhcmF0b3IpIGNvbXBhcmF0b3I7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgZm9vMShDb21wYXJhdG9yPGJ5dGVbXT4gY29tcGFyYXRvcikgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIE15Q29tcGFyYXRvciBjb21wYXJhdG9yMSA9IChNeUNvbXBhcmF0b3IpIGNvbXBhcmF0b3I7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgZm9vMihDb21wYXJhdG9yPD8gZXh0ZW5kcyBieXRlW10+IGNvbXBhcmF0b3IpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICBNeUNvbXBhcmF0b3IgY29tcGFyYXRvcjEgPSAoTXlDb21wYXJhdG9yKSBjb21wYXJhdG9yOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIGZvbzMoQ29tcGFyYXRvcjw/IHN1cGVyIFN0cmluZ1tdPiBjb21wYXJhdG9yKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgTXlDb21wYXJhdG9yIGNvbXBhcmF0b3IxID0gPGVycm9yIGRlc2NyPSJJbmNvbnZlcnRpYmxlIHR5cGVzOyBjYW5ub3QgY2FzdCAnamF2YS51dGlsLkNvbXBhcmF0b3I8Y2FwdHVyZTw/IHN1cGVyIGphdmEubGFuZy5TdHJpbmdbXT4+JyB0byAnTXlDb21wYXJhdG9yJyI+KE15Q29tcGFyYXRvcikgY29tcGFyYXRvcjwvZXJyb3I+OworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIGZvbzQoQ29tcGFyYXRvcjw/IGV4dGVuZHMgU3RyaW5nW10+IGNvbXBhcmF0b3IpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICBNeUNvbXBhcmF0b3IgY29tcGFyYXRvcjEgPSA8ZXJyb3IgZGVzY3I9IkluY29udmVydGlibGUgdHlwZXM7IGNhbm5vdCBjYXN0ICdqYXZhLnV0aWwuQ29tcGFyYXRvcjxjYXB0dXJlPD8gZXh0ZW5kcyBqYXZhLmxhbmcuU3RyaW5nW10+PicgdG8gJ015Q29tcGFyYXRvciciPihNeUNvbXBhcmF0b3IpIGNvbXBhcmF0b3I8L2Vycm9yPjsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBmb281KENvbXBhcmF0b3I8Pz4gY29tcGFyYXRvcikgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIE15Q29tcGFyYXRvciBjb21wYXJhdG9yMSA9IChNeUNvbXBhcmF0b3IpIGNvbXBhcmF0b3I7CisgICAgfQorCisgICAgLy8tLXx8LS18fC0tfHwtLXx8LS18fC0tfHwtLXx8LS18fC0tfHwtLXx8LS18fC0tfHwtLXx8LS18fC0tfHwtLXx8LS18fC0tfHwtLQorCisgICAgcHVibGljIHZvaWQgc2ZvbyhTZXQ8Q29tcGFyYXRvcjw/IHN1cGVyIGJ5dGVbXT4+IGNvbXBhcmF0b3IpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICBTZXQ8TXlDb21wYXJhdG9yPiBjb21wYXJhdG9yMSA9IDxlcnJvciBkZXNjcj0iSW5jb252ZXJ0aWJsZSB0eXBlczsgY2Fubm90IGNhc3QgJ2phdmEudXRpbC5TZXQ8amF2YS51dGlsLkNvbXBhcmF0b3I8PyBzdXBlciBieXRlW10+PicgdG8gJ2phdmEudXRpbC5TZXQ8TXlDb21wYXJhdG9yPiciPihTZXQ8TXlDb21wYXJhdG9yPikgY29tcGFyYXRvcjwvZXJyb3I+OworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIHNmb28xKFNldDxDb21wYXJhdG9yPGJ5dGVbXT4+IGNvbXBhcmF0b3IpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICBTZXQ8TXlDb21wYXJhdG9yPiBjb21wYXJhdG9yMSA9IDxlcnJvciBkZXNjcj0iSW5jb252ZXJ0aWJsZSB0eXBlczsgY2Fubm90IGNhc3QgJ2phdmEudXRpbC5TZXQ8amF2YS51dGlsLkNvbXBhcmF0b3I8Ynl0ZVtdPj4nIHRvICdqYXZhLnV0aWwuU2V0PE15Q29tcGFyYXRvcj4nIj4oU2V0PE15Q29tcGFyYXRvcj4pIGNvbXBhcmF0b3I8L2Vycm9yPjsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBzZm9vMihTZXQ8Q29tcGFyYXRvcjw/IGV4dGVuZHMgYnl0ZVtdPj4gY29tcGFyYXRvcikgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIFNldDxNeUNvbXBhcmF0b3I+IGNvbXBhcmF0b3IxID0gPGVycm9yIGRlc2NyPSJJbmNvbnZlcnRpYmxlIHR5cGVzOyBjYW5ub3QgY2FzdCAnamF2YS51dGlsLlNldDxqYXZhLnV0aWwuQ29tcGFyYXRvcjw/IGV4dGVuZHMgYnl0ZVtdPj4nIHRvICdqYXZhLnV0aWwuU2V0PE15Q29tcGFyYXRvcj4nIj4oU2V0PE15Q29tcGFyYXRvcj4pIGNvbXBhcmF0b3I8L2Vycm9yPjsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBzZm9vMyhTZXQ8Q29tcGFyYXRvcjw/IHN1cGVyIFN0cmluZ1tdPj4gY29tcGFyYXRvcikgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIFNldDxNeUNvbXBhcmF0b3I+IGNvbXBhcmF0b3IxID0gPGVycm9yIGRlc2NyPSJJbmNvbnZlcnRpYmxlIHR5cGVzOyBjYW5ub3QgY2FzdCAnamF2YS51dGlsLlNldDxqYXZhLnV0aWwuQ29tcGFyYXRvcjw/IHN1cGVyIGphdmEubGFuZy5TdHJpbmdbXT4+JyB0byAnamF2YS51dGlsLlNldDxNeUNvbXBhcmF0b3I+JyI+KFNldDxNeUNvbXBhcmF0b3I+KSBjb21wYXJhdG9yPC9lcnJvcj47CisgICAgfQorCisgICAgcHVibGljIHZvaWQgc2ZvbzQoU2V0PENvbXBhcmF0b3I8PyBleHRlbmRzIFN0cmluZ1tdPj4gY29tcGFyYXRvcikgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIFNldDxNeUNvbXBhcmF0b3I+IGNvbXBhcmF0b3IxID0gPGVycm9yIGRlc2NyPSJJbmNvbnZlcnRpYmxlIHR5cGVzOyBjYW5ub3QgY2FzdCAnamF2YS51dGlsLlNldDxqYXZhLnV0aWwuQ29tcGFyYXRvcjw/IGV4dGVuZHMgamF2YS5sYW5nLlN0cmluZ1tdPj4nIHRvICdqYXZhLnV0aWwuU2V0PE15Q29tcGFyYXRvcj4nIj4oU2V0PE15Q29tcGFyYXRvcj4pIGNvbXBhcmF0b3I8L2Vycm9yPjsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBzZm9vNShTZXQ8Q29tcGFyYXRvcjw/Pj4gY29tcGFyYXRvcikgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIFNldDxNeUNvbXBhcmF0b3I+IGNvbXBhcmF0b3IxID0gPGVycm9yIGRlc2NyPSJJbmNvbnZlcnRpYmxlIHR5cGVzOyBjYW5ub3QgY2FzdCAnamF2YS51dGlsLlNldDxqYXZhLnV0aWwuQ29tcGFyYXRvcjw/Pj4nIHRvICdqYXZhLnV0aWwuU2V0PE15Q29tcGFyYXRvcj4nIj4oU2V0PE15Q29tcGFyYXRvcj4pIGNvbXBhcmF0b3I8L2Vycm9yPjsKKyAgICB9Cit9CisKK2Fic3RyYWN0IGNsYXNzIE15Q29tcGFyYXRvciBpbXBsZW1lbnRzIENvbXBhcmF0b3I8Ynl0ZVtdPiB7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9nZW5lcmljc0hpZ2hsaWdodGluZy9JREVBNjYzMTEuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvZ2VuZXJpY3NIaWdobGlnaHRpbmcvSURFQTY2MzExLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDY3YWM2NQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvZ2VuZXJpY3NIaWdobGlnaHRpbmcvSURFQTY2MzExLmphdmEKQEAgLTAsMCArMSwyMSBAQAoraW1wb3J0IGphdmEudXRpbC4qOworCitjbGFzcyBFcmFzdXJlVGVzdCB7CisgIDxlcnJvciBkZXNjcj0iJ3RvQXJyYXlEb3VibGUoTGlzdDw/IGV4dGVuZHMgTnVtYmVyPiknIGNsYXNoZXMgd2l0aCAndG9BcnJheURvdWJsZShMaXN0PGRvdWJsZVtdPiknOyBib3RoIG1ldGhvZHMgaGF2ZSBzYW1lIGVyYXN1cmUiPnB1YmxpYyBzdGF0aWMgZG91YmxlW10gdG9BcnJheURvdWJsZShMaXN0PD8gZXh0ZW5kcyBOdW1iZXI+IHYpPC9lcnJvcj4geworICAgIHJldHVybiBudWxsOworICB9CisKKyAgcHVibGljIHN0YXRpYyBkb3VibGVbXVtdIHRvQXJyYXlEb3VibGUoTGlzdDxkb3VibGVbXT4gdikgeworICAgIHJldHVybiBudWxsOworICB9Cit9CisKK2NsYXNzIEVyYXN1cmVUZXN0MSB7CisgIDxlcnJvciBkZXNjcj0iJ3RvQXJyYXlEb3VibGUoTGlzdDw/IGV4dGVuZHMgTnVtYmVyPiknIGNsYXNoZXMgd2l0aCAndG9BcnJheURvdWJsZShMaXN0KSc7IGJvdGggbWV0aG9kcyBoYXZlIHNhbWUgZXJhc3VyZSI+cHVibGljIHN0YXRpYyBkb3VibGVbXSB0b0FycmF5RG91YmxlKExpc3Q8PyBleHRlbmRzIE51bWJlcj4gdik8L2Vycm9yPiB7CisgICAgcmV0dXJuIG51bGw7CisgIH0KKworICBwdWJsaWMgc3RhdGljIGRvdWJsZVtdW10gdG9BcnJheURvdWJsZShMaXN0IHYpIHsKKyAgICByZXR1cm4gbnVsbDsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvZ2VuZXJpY3NIaWdobGlnaHRpbmcvSURFQTY2MzExXzE2LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2dlbmVyaWNzSGlnaGxpZ2h0aW5nL0lERUE2NjMxMV8xNi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRiN2FiZGMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2dlbmVyaWNzSGlnaGxpZ2h0aW5nL0lERUE2NjMxMV8xNi5qYXZhCkBAIC0wLDAgKzEsMzEgQEAKK2ltcG9ydCBqYXZhLnV0aWwuKjsKKworY2xhc3MgRXJhc3VyZVRlc3QgeworICBwdWJsaWMgc3RhdGljIGRvdWJsZVtdIHRvQXJyYXlEb3VibGUoTGlzdDw/IGV4dGVuZHMgTnVtYmVyPiB2KSB7CisgICAgcmV0dXJuIG51bGw7CisgIH0KKworICBwdWJsaWMgc3RhdGljIGRvdWJsZVtdW10gdG9BcnJheURvdWJsZShMaXN0PGRvdWJsZVtdPiB2KSB7CisgICAgcmV0dXJuIG51bGw7CisgIH0KK30KKworY2xhc3MgRXJhc3VyZVRlc3QxIHsKKyAgPGVycm9yIGRlc2NyPSIndG9BcnJheURvdWJsZShMaXN0PD8gZXh0ZW5kcyBOdW1iZXI+KScgY2xhc2hlcyB3aXRoICd0b0FycmF5RG91YmxlKExpc3QpJzsgYm90aCBtZXRob2RzIGhhdmUgc2FtZSBlcmFzdXJlIj5wdWJsaWMgc3RhdGljIGRvdWJsZVtdIHRvQXJyYXlEb3VibGUoTGlzdDw/IGV4dGVuZHMgTnVtYmVyPiB2KTwvZXJyb3I+IHsKKyAgICByZXR1cm4gbnVsbDsKKyAgfQorCisgIHB1YmxpYyBzdGF0aWMgZG91YmxlW11bXSB0b0FycmF5RG91YmxlKExpc3QgdikgeworICAgIHJldHVybiBudWxsOworICB9Cit9CisKK2NsYXNzIEVyYXN1cmVUZXN0MiB7CisgIDxlcnJvciBkZXNjcj0iJ3RvQXJyYXlEb3VibGUoTGlzdDw/IGV4dGVuZHMgTnVtYmVyPiknIGNsYXNoZXMgd2l0aCAndG9BcnJheURvdWJsZShMaXN0PFN0cmluZz4pJzsgYm90aCBtZXRob2RzIGhhdmUgc2FtZSBlcmFzdXJlIj5wdWJsaWMgc3RhdGljIGRvdWJsZVtdIHRvQXJyYXlEb3VibGUoTGlzdDw/IGV4dGVuZHMgTnVtYmVyPiB2KTwvZXJyb3I+IHsKKyAgICByZXR1cm4gbnVsbDsKKyAgfQorCisgIHB1YmxpYyBzdGF0aWMgZG91YmxlW10gdG9BcnJheURvdWJsZShMaXN0PFN0cmluZz4gdikgeworICAgIHJldHVybiBudWxsOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9nZW5lcmljc0hpZ2hsaWdodGluZy9JREVBNjc1NzAuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvZ2VuZXJpY3NIaWdobGlnaHRpbmcvSURFQTY3NTcwLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGJhMjYyMAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvZ2VuZXJpY3NIaWdobGlnaHRpbmcvSURFQTY3NTcwLmphdmEKQEAgLTAsMCArMSwyMSBAQAoraW50ZXJmYWNlIEExCit7CisgICAgU3RyaW5nIGZvbygpOworfQorCitpbnRlcmZhY2UgQjEKK3sKKyAgICBPYmplY3QgZm9vKCk7Cit9CisKK2NsYXNzIEMxPFQgZXh0ZW5kcyBCMSAmIEExPiB7CisgICAgdm9pZCBiYXIoVCB4KSB7CisgICAgICAgIFN0cmluZyBmb28gPSB4LmZvbygpOworICAgIH0KK30KKworY2xhc3MgQzI8VCBleHRlbmRzIEExICYgQjE+IHsKKyAgICB2b2lkIGJhcihUIHgpIHsKKyAgICAgICAgU3RyaW5nIGZvbyA9IHguZm9vKCk7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvZ2VuZXJpY3NIaWdobGlnaHRpbmcvSURFQTY3NTk3LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2dlbmVyaWNzSGlnaGxpZ2h0aW5nL0lERUE2NzU5Ny5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIwZDJkMjcKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2dlbmVyaWNzSGlnaGxpZ2h0aW5nL0lERUE2NzU5Ny5qYXZhCkBAIC0wLDAgKzEsNCBAQAorY2xhc3MgQTxUPgoreworICAgIFQgeCA9IDxlcnJvciBkZXNjcj0iSW5jb252ZXJ0aWJsZSB0eXBlczsgY2Fubm90IGNhc3QgJ2ludCcgdG8gJ1QnIj4oVCkgMTwvZXJyb3I+OworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvZ2VuZXJpY3NIaWdobGlnaHRpbmcvSURFQTY3NTk5LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2dlbmVyaWNzSGlnaGxpZ2h0aW5nL0lERUE2NzU5OS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZkNmM2YjQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2dlbmVyaWNzSGlnaGxpZ2h0aW5nL0lERUE2NzU5OS5qYXZhCkBAIC0wLDAgKzEsOCBAQAorYWJzdHJhY3QgY2xhc3MgQTxULCBTIGV4dGVuZHMgVD4KK3sKKyAgICAgIGFic3RyYWN0IFMgYmFyKCk7CisgICAgICB2b2lkIGZvbyhBPENsb25lYWJsZVtdLCA/IGV4dGVuZHMgVGhyb3dhYmxlW10+IGEpCisgICAgICB7CisgICAgICAgICAgaW50IHggPSBhLmJhcigpLmxlbmd0aDsKKyAgICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2dlbmVyaWNzSGlnaGxpZ2h0aW5nL0lERUE2NzY2Ny5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9nZW5lcmljc0hpZ2hsaWdodGluZy9JREVBNjc2NjcuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NWY0NmEwCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9nZW5lcmljc0hpZ2hsaWdodGluZy9JREVBNjc2NjcuamF2YQpAQCAtMCwwICsxLDggQEAKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworaW50ZXJmYWNlIEEKK3sKKyAgICA8UyBleHRlbmRzIENsb25lYWJsZSAmIENvbXBhcmFibGU8Pz4+IHZvaWQgZm9vKFMgeCk7CisgICAgPFMgZXh0ZW5kcyBDb21wYXJhYmxlPD8+ICYgQ2xvbmVhYmxlPiB2b2lkIGZvbyhTIHgpOworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvZ2VuZXJpY3NIaWdobGlnaHRpbmcvSURFQTY3NjcyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2dlbmVyaWNzSGlnaGxpZ2h0aW5nL0lERUE2NzY3Mi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkzOWNlM2YKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2dlbmVyaWNzSGlnaGxpZ2h0aW5nL0lERUE2NzY3Mi5qYXZhCkBAIC0wLDAgKzEsNyBAQAoraW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitpbnRlcmZhY2UgQQoreworICAgIDw8ZXJyb3IgZGVzY3I9IidhZGRBbGwoQ29sbGVjdGlvbjw/IGV4dGVuZHMgRT4pJyBpbiAnamF2YS51dGlsLkNvbGxlY3Rpb24nIGNsYXNoZXMgd2l0aCAnYWRkQWxsKENvbGxlY3Rpb248PyBleHRlbmRzIEU+KScgaW4gJ2phdmEudXRpbC5MaXN0JzsgYm90aCBtZXRob2RzIGhhdmUgc2FtZSBlcmFzdXJlLCB5ZXQgbmVpdGhlciBvdmVycmlkZXMgdGhlIG90aGVyIj48L2Vycm9yPlQgZXh0ZW5kcyBMaXN0PD8+ICYgQ29sbGVjdGlvbjw/IGV4dGVuZHMgQ2xvbmVhYmxlPj4gdm9pZCBmb28oVCB4KTsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2dlbmVyaWNzSGlnaGxpZ2h0aW5nL0lERUE2NzY4MS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9nZW5lcmljc0hpZ2hsaWdodGluZy9JREVBNjc2ODEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMWEzYjEyMgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvZ2VuZXJpY3NIaWdobGlnaHRpbmcvSURFQTY3NjgxLmphdmEKQEAgLTAsMCArMSwzMyBAQAorCitpbnRlcmZhY2UgQTxUPiB7IH0KKworY2xhc3MgQjxUPiBpbXBsZW1lbnRzIEE8VD4ge30KKworY2xhc3MgQyB7CisgICAgdm9pZCBiYXIoQTxBPD8+PiB4KXsKKyAgICAgICAgQjxBPFN0cmluZz4+IHkgPSA8ZXJyb3IgZGVzY3I9IkluY29udmVydGlibGUgdHlwZXM7IGNhbm5vdCBjYXN0ICdBPEE8Pz4+JyB0byAnQjxBPGphdmEubGFuZy5TdHJpbmc+PiciPihCPEE8U3RyaW5nPj4pIHg8L2Vycm9yPjsKKyAgICB9Cit9CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2ludGVyZmFjZSBBMjxUPiB7IH0KKworY2xhc3MgQjI8VD4gaW1wbGVtZW50cyBBMjxUPiB7fQorCitjbGFzcyBDMiB7CisgICAgdm9pZCBiYXIoQTI8QTI+IHgpeworICAgICAgICBCMjxBMjw/Pj4geSA9IDxlcnJvciBkZXNjcj0iSW5jb252ZXJ0aWJsZSB0eXBlczsgY2Fubm90IGNhc3QgJ0EyPEEyPicgdG8gJ0IyPEEyPD8+PiciPihCMjxBMjw/Pj4pIHg8L2Vycm9yPjsKKyAgICB9Cit9CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2ludGVyZmFjZSBBMzxUPiB7IH0KKworY2xhc3MgQjM8VD4gaW1wbGVtZW50cyBBMzxUPiB7fQorCitjbGFzcyBDMyB7CisgICAgPFQ+IHZvaWQgYmFyKEEzPEEzPFQ+PiB4KXsKKyAgICAgICAgQTM8QTM8Pz4+IHkgPSA8ZXJyb3IgZGVzY3I9IkluY29udmVydGlibGUgdHlwZXM7IGNhbm5vdCBjYXN0ICdBMzxBMzxUPj4nIHRvICdBMzxBMzw/Pj4nIj4oQTM8QTM8Pz4+KSB4PC9lcnJvcj47CisKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9nZW5lcmljc0hpZ2hsaWdodGluZy9JREVBNjc4NjEuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvZ2VuZXJpY3NIaWdobGlnaHRpbmcvSURFQTY3ODYxLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjdkNjU0ZAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvZ2VuZXJpY3NIaWdobGlnaHRpbmcvSURFQTY3ODYxLmphdmEKQEAgLTAsMCArMSw4IEBACithYnN0cmFjdCBjbGFzcyBDIHsKKyAgICAgICAgPFQ+IHZvaWQgZm9vKE9iamVjdCBzKXsgfQorICAgICAgICBhYnN0cmFjdCBTdHJpbmcgZm9vKFN0cmluZyBzKTsKKworICAgIHsKKyAgICAgICAgdGhpcy48U3RyaW5nPmZvbygiIikudG9Mb3dlckNhc2UoKTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9nZW5lcmljc0hpZ2hsaWdodGluZy9JREVBNzAzNzAuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvZ2VuZXJpY3NIaWdobGlnaHRpbmcvSURFQTcwMzcwLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTFjOTMzMQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvZ2VuZXJpY3NIaWdobGlnaHRpbmcvSURFQTcwMzcwLmphdmEKQEAgLTAsMCArMSwxMyBAQAorY2xhc3MgRGV2azEgeworICBwdWJsaWMgdm9pZCBtYWluKFN0cmluZyBhcmdzW10pIHsKKyAgICBmb28oKTsKKyAgfQorCisgIHByaXZhdGUgdm9pZCA8d2FybmluZyBkZXNjcj0iUHJpdmF0ZSBtZXRob2QgJ2ZvbyhqYXZhLmxhbmcuT2JqZWN0Li4uKScgaXMgbmV2ZXIgdXNlZCI+Zm9vPC93YXJuaW5nPihPYmplY3QuLi4gb2JqZWN0cykgeworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiT0JKRUNUUyIgKyBvYmplY3RzKTsKKyAgfQorCisgIHByaXZhdGUgdm9pZCBmb28oaW50Li4uIGludHMpIHsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIklOVFMiICsgaW50cyk7CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvZ2VuZXJpY3NIaWdobGlnaHRpbmcvSURFQTcyOTEyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2dlbmVyaWNzSGlnaGxpZ2h0aW5nL0lERUE3MjkxMi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM1N2JiYjUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2dlbmVyaWNzSGlnaGxpZ2h0aW5nL0lERUE3MjkxMi5qYXZhCkBAIC0wLDAgKzEsMTYgQEAKK2ltcG9ydCBqYXZhLnV0aWwuKjsKKworcHVibGljIGNsYXNzIFRlc3Q8VD4KK3sKKyAgICAgICAgTGlzdDxDb2xsZWN0aW9uPFQ+PiBnZXRMaXN0ICgpCisgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEFycmF5TGlzdDxDb2xsZWN0aW9uPFQ+PiAoKTsKKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyB2b2lkIHRlc3QxIChUZXN0PFQ+IGFyZykKKyAgICAgICAgeworICAgICAgICAgICAgICAgIExpc3Q8Q29sbGVjdGlvbjxUPj4gcmVzdWx0ID0gYXJnLmdldExpc3QgKCk7CisgICAgICAgICAgICAgICAgcmVzdWx0LmFkZCA8ZXJyb3IgZGVzY3I9IidhZGQoamF2YS51dGlsLkNvbGxlY3Rpb248VD4pJyBpbiAnamF2YS51dGlsLkxpc3QnIGNhbm5vdCBiZSBhcHBsaWVkIHRvICcoamF2YS51dGlsLkhhc2hNYXA8amF2YS5sYW5nLkludGVnZXIsamF2YS5sYW5nLkludGVnZXI+KSciPihuZXcgSGFzaE1hcDxJbnRlZ2VyLCBJbnRlZ2VyPiAoKSk8L2Vycm9yPjsKKyAgICAgICAgfQorCit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2dlbmVyaWNzSGlnaGxpZ2h0aW5nL0lERUE3NDg5OS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9nZW5lcmljc0hpZ2hsaWdodGluZy9JREVBNzQ4OTkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NzIzODI5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9nZW5lcmljc0hpZ2hsaWdodGluZy9JREVBNzQ4OTkuamF2YQpAQCAtMCwwICsxLDExIEBACitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb25zOworaW1wb3J0IGphdmEudXRpbC5NYXA7CisKK3B1YmxpYyBjbGFzcyBJREVBNzQ4OTkgeworICAgIHZvaWQgZm9vKCkgeworICAgICAgICBNYXA8U3RyaW5nLCBTdHJpbmc+IG0gPSBDb2xsZWN0aW9ucy5lbXB0eU1hcCgpOworICAgICAgICBpZiAoPGVycm9yIGRlc2NyPSJPcGVyYXRvciAnPT0nIGNhbm5vdCBiZSBhcHBsaWVkIHRvICdqYXZhLnV0aWwuTWFwPGphdmEubGFuZy5TdHJpbmcsamF2YS5sYW5nLlN0cmluZz4nLCAnamF2YS51dGlsLk1hcDxqYXZhLmxhbmcuT2JqZWN0LGphdmEubGFuZy5PYmplY3Q+JyI+bSA9PSBDb2xsZWN0aW9ucy5lbXB0eU1hcCgpPC9lcnJvcj4pIHsKKyAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9nZW5lcmljc0hpZ2hsaWdodGluZy9JREVBNzYyODMuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvZ2VuZXJpY3NIaWdobGlnaHRpbmcvSURFQTc2MjgzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTIyMWQxYgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvZ2VuZXJpY3NIaWdobGlnaHRpbmcvSURFQTc2MjgzLmphdmEKQEAgLTAsMCArMSw0OSBAQAoraW1wb3J0IGphdmEudXRpbC4qOworcHVibGljIGNsYXNzIElERUE3NjI4MyB7Cit9CisKK2ludGVyZmFjZSBQYXJhbWV0cml6ZWQ8VCBleHRlbmRzIE51bWJlcj4geworfQorCitjbGFzcyBCdWcxPFQgZXh0ZW5kcyBOdW1iZXI+IHsKKyAgICA8SSBleHRlbmRzIE51bWJlcj4gUGFyYW1ldHJpemVkPEk+IGZvbyhQYXJhbWV0cml6ZWQ8ST4gcGFyYW0pIHsKKyAgICAgICAgcmV0dXJuIG51bGw7CisgICAgfQorCisgICAgdm9pZCBidWcxKFBhcmFtZXRyaXplZDw/IHN1cGVyIFQ+IHBhcmFtKSB7CisgICAgICAgIGZvbyhwYXJhbSk7CisgICAgfQorCisgICAgdm9pZCBidWcyKFNldDxQYXJhbWV0cml6ZWQ8PyBleHRlbmRzIE51bWJlcj4+IHBhcmFtZXRyaXplZHMpIHsKKyAgICAgICAgU2V0PFBhcmFtZXRyaXplZDw/Pj4gaXRlbXMgPSBwYXJhbWV0cml6ZWRzOworICAgIH0KKworICAgIHZvaWQgYnVnMyhTZXQ8UGFyYW1ldHJpemVkPD8+PiBwYXJhbWV0cml6ZWRzKSB7CisgICAgICAgIFNldDxQYXJhbWV0cml6ZWQ8Pz4+IGl0ZW1zID0gcGFyYW1ldHJpemVkczsKKyAgICB9CisKKyAgICB2b2lkIGJ1ZzQoU2V0PFBhcmFtZXRyaXplZDw8ZXJyb3IgZGVzY3I9IlR5cGUgcGFyYW1ldGVyICc/IGV4dGVuZHMgU3RyaW5nJyBpcyBub3Qgd2l0aGluIGl0cyBib3VuZDsgc2hvdWxkIGV4dGVuZCAnamF2YS5sYW5nLk51bWJlciciPj8gZXh0ZW5kcyBTdHJpbmc8L2Vycm9yPj4+IHBhcmFtZXRyaXplZHMpIHsKKyAgICAgICAgPGVycm9yIGRlc2NyPSJJbmNvbXBhdGlibGUgdHlwZXMuIEZvdW5kOiAnamF2YS51dGlsLlNldDxQYXJhbWV0cml6ZWQ8PyBleHRlbmRzIGphdmEubGFuZy5TdHJpbmc+PicsIHJlcXVpcmVkOiAnamF2YS51dGlsLlNldDxQYXJhbWV0cml6ZWQ8Pz4+JyI+U2V0PFBhcmFtZXRyaXplZDw/Pj4gaXRlbXMgPSBwYXJhbWV0cml6ZWRzOzwvZXJyb3I+CisgICAgfQorCisgICAgdm9pZCBidWc1KFNldDxQYXJhbWV0cml6ZWQ8PyBleHRlbmRzIEludGVnZXI+PiBwYXJhbWV0cml6ZWRzKSB7CisgICAgICAgIDxlcnJvciBkZXNjcj0iSW5jb21wYXRpYmxlIHR5cGVzLiBGb3VuZDogJ2phdmEudXRpbC5TZXQ8UGFyYW1ldHJpemVkPD8gZXh0ZW5kcyBqYXZhLmxhbmcuSW50ZWdlcj4+JywgcmVxdWlyZWQ6ICdqYXZhLnV0aWwuU2V0PFBhcmFtZXRyaXplZDw/Pj4nIj5TZXQ8UGFyYW1ldHJpemVkPD8+PiBpdGVtcyA9IHBhcmFtZXRyaXplZHM7PC9lcnJvcj4KKyAgICB9CisKKyAgICB2b2lkIGJ1ZzYoU2V0PFBhcmFtZXRyaXplZDw/IHN1cGVyIE51bWJlcj4+IHBhcmFtZXRyaXplZHMpIHsKKyAgICAgICAgPGVycm9yIGRlc2NyPSJJbmNvbXBhdGlibGUgdHlwZXMuIEZvdW5kOiAnamF2YS51dGlsLlNldDxQYXJhbWV0cml6ZWQ8PyBzdXBlciBqYXZhLmxhbmcuTnVtYmVyPj4nLCByZXF1aXJlZDogJ2phdmEudXRpbC5TZXQ8UGFyYW1ldHJpemVkPD8+PiciPlNldDxQYXJhbWV0cml6ZWQ8Pz4+IGl0ZW1zID0gcGFyYW1ldHJpemVkczs8L2Vycm9yPgorICAgIH0KKworICAgIHZvaWQgYnVnNyhTZXQ8UGFyYW1ldHJpemVkPD8gc3VwZXIgSW50ZWdlcj4+IHBhcmFtZXRyaXplZHMpIHsKKyAgICAgICAgPGVycm9yIGRlc2NyPSJJbmNvbXBhdGlibGUgdHlwZXMuIEZvdW5kOiAnamF2YS51dGlsLlNldDxQYXJhbWV0cml6ZWQ8PyBzdXBlciBqYXZhLmxhbmcuSW50ZWdlcj4+JywgcmVxdWlyZWQ6ICdqYXZhLnV0aWwuU2V0PFBhcmFtZXRyaXplZDw/Pj4nIj5TZXQ8UGFyYW1ldHJpemVkPD8+PiBpdGVtcyA9IHBhcmFtZXRyaXplZHM7PC9lcnJvcj4KKyAgICB9CisKKyAgICB2b2lkIGJ1ZzgoU2V0PFBhcmFtZXRyaXplZDw8ZXJyb3IgZGVzY3I9IlR5cGUgcGFyYW1ldGVyICc/IHN1cGVyIFN0cmluZycgaXMgbm90IHdpdGhpbiBpdHMgYm91bmQ7IHNob3VsZCBleHRlbmQgJ2phdmEubGFuZy5OdW1iZXInIj4/IHN1cGVyIFN0cmluZzwvZXJyb3I+Pj4gcGFyYW1ldHJpemVkcykgeworICAgICAgICA8ZXJyb3IgZGVzY3I9IkluY29tcGF0aWJsZSB0eXBlcy4gRm91bmQ6ICdqYXZhLnV0aWwuU2V0PFBhcmFtZXRyaXplZDw/IHN1cGVyIGphdmEubGFuZy5TdHJpbmc+PicsIHJlcXVpcmVkOiAnamF2YS51dGlsLlNldDxQYXJhbWV0cml6ZWQ8Pz4+JyI+U2V0PFBhcmFtZXRyaXplZDw/Pj4gaXRlbXMgPSBwYXJhbWV0cml6ZWRzOzwvZXJyb3I+CisgICAgfQorCisgICAgdm9pZCBidWc5KFNldDxQYXJhbWV0cml6ZWQ8PGVycm9yIGRlc2NyPSJUeXBlIHBhcmFtZXRlciAnPyBzdXBlciBPYmplY3QnIGlzIG5vdCB3aXRoaW4gaXRzIGJvdW5kOyBzaG91bGQgZXh0ZW5kICdqYXZhLmxhbmcuTnVtYmVyJyI+PyBzdXBlciBPYmplY3Q8L2Vycm9yPj4+IHBhcmFtZXRyaXplZHMpIHsKKyAgICAgICAgPGVycm9yIGRlc2NyPSJJbmNvbXBhdGlibGUgdHlwZXMuIEZvdW5kOiAnamF2YS51dGlsLlNldDxQYXJhbWV0cml6ZWQ8PyBzdXBlciBqYXZhLmxhbmcuT2JqZWN0Pj4nLCByZXF1aXJlZDogJ2phdmEudXRpbC5TZXQ8UGFyYW1ldHJpemVkPD8+PiciPlNldDxQYXJhbWV0cml6ZWQ8Pz4+IGl0ZW1zID0gcGFyYW1ldHJpemVkczs8L2Vycm9yPgorICAgIH0KK30KKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9nZW5lcmljc0hpZ2hsaWdodGluZy9JREVBNzc5OTEuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvZ2VuZXJpY3NIaWdobGlnaHRpbmcvSURFQTc3OTkxLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2NkNDkzYgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvZ2VuZXJpY3NIaWdobGlnaHRpbmcvSURFQTc3OTkxLmphdmEKQEAgLTAsMCArMSwyNiBAQAorY2xhc3MgVGVzdCB7CisgICAgc3RhdGljIHsKKyAgICAgICAgQ2xhc3M8VGVzdD4gdGVzdENsYXNzID0gZ2V0KFRlc3QuY2xhc3MpOworICAgICAgICBmb28odGVzdENsYXNzKTsKKyAgICAgICAgVGVzdCBmID0gZm9vKHRlc3RDbGFzcyk7CisgICAgfQorCisgICAgc3RhdGljIDxFPiBDbGFzczxFPiBnZXQoQ2xhc3M8PyBzdXBlciBFPiB2YWx1ZSkgeworICAgICAgICByZXR1cm4gbnVsbDsKKyAgICB9CisKKyAgICBzdGF0aWMgPEU+IEUgZm9vKENsYXNzPD8gc3VwZXIgRT4gdmFsdWUpIHsKKyAgICAgICAgcmV0dXJuIG51bGw7CisgICAgfQorfQorCitjbGFzcyBDb21wIHsKKyAgcHVibGljIHN0YXRpYyA8VD4gYm9vbGVhbiBlcXVhbChUIGFyZzEsIFQgYXJnMikgeworICAgIHJldHVybiBmYWxzZTsKKyAgfQorCisgIHZvaWQgZm9vKFN0cmluZyBzLCBPYmplY3QgbykgeworICAgIGlmIChlcXVhbChzLCBvKSkgeworICAgIH0KKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvZ2VuZXJpY3NIaWdobGlnaHRpbmcvSURFQTgwMzg2LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2dlbmVyaWNzSGlnaGxpZ2h0aW5nL0lERUE4MDM4Ni5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM1ODdmNGYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2dlbmVyaWNzSGlnaGxpZ2h0aW5nL0lERUE4MDM4Ni5qYXZhCkBAIC0wLDAgKzEsMzMgQEAKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworcHVibGljIGNsYXNzIElERUE4MDM4NiB7CisgIHZvaWQgZm9vKENsYXNzPExpc3Q+IGxpc3RDbGFzcykgeworICAgIDxlcnJvciBkZXNjcj0iSW5jb21wYXRpYmxlIHR5cGVzLiBGb3VuZDogJ2phdmEubGFuZy5DbGFzczxqYXZhLnV0aWwuTGlzdD4nLCByZXF1aXJlZDogJ2phdmEubGFuZy5DbGFzczw/IGV4dGVuZHMgamF2YS51dGlsLkxpc3Q8Pz4+JyI+Q2xhc3M8PyBleHRlbmRzIExpc3Q8Pz4+IGNscyA9IGxpc3RDbGFzczs8L2Vycm9yPgorICAgIENsYXNzIDwgP2V4dGVuZHMgTGlzdCA+IGNsczEgPSBsaXN0Q2xhc3M7CisgICAgPGVycm9yIGRlc2NyPSJJbmNvbXBhdGlibGUgdHlwZXMuIEZvdW5kOiAnamF2YS5sYW5nLkNsYXNzPGphdmEudXRpbC5MaXN0PicsIHJlcXVpcmVkOiAnamF2YS5sYW5nLkNsYXNzPD8gZXh0ZW5kcyBqYXZhLnV0aWwuTGlzdDw/IGV4dGVuZHMgamF2YS51dGlsLkxpc3Q8Pz4+PiciPkNsYXNzPD8gZXh0ZW5kcyBMaXN0PD8gZXh0ZW5kcyBMaXN0PD8+Pj4gY2xzMiA9IGxpc3RDbGFzczs8L2Vycm9yPgorICAgIENsYXNzPD8gc3VwZXIgTGlzdDw/Pj4gY2xzUyA9IGxpc3RDbGFzczsKKyAgICBDbGFzczw/IHN1cGVyIExpc3Q+IGNsc1MxID0gbGlzdENsYXNzOworICB9CisKKyAgdm9pZCBmb29FKENsYXNzPD8gZXh0ZW5kcyBMaXN0PiBsaXN0Q2xhc3MpIHsKKyAgICA8ZXJyb3IgZGVzY3I9IkluY29tcGF0aWJsZSB0eXBlcy4gRm91bmQ6ICdqYXZhLmxhbmcuQ2xhc3M8Y2FwdHVyZTw/IGV4dGVuZHMgamF2YS51dGlsLkxpc3Q+PicsIHJlcXVpcmVkOiAnamF2YS5sYW5nLkNsYXNzPD8gZXh0ZW5kcyBqYXZhLnV0aWwuTGlzdDw/Pj4nIj5DbGFzczw/IGV4dGVuZHMgTGlzdDw/Pj4gY2xzID0gbGlzdENsYXNzOzwvZXJyb3I+CisgICAgQ2xhc3M8PyBleHRlbmRzIExpc3Q+IGNsczEgPSBsaXN0Q2xhc3M7CisgICAgPGVycm9yIGRlc2NyPSJJbmNvbXBhdGlibGUgdHlwZXMuIEZvdW5kOiAnamF2YS5sYW5nLkNsYXNzPGNhcHR1cmU8PyBleHRlbmRzIGphdmEudXRpbC5MaXN0Pj4nLCByZXF1aXJlZDogJ2phdmEubGFuZy5DbGFzczw/IGV4dGVuZHMgamF2YS51dGlsLkxpc3Q8PyBleHRlbmRzIGphdmEudXRpbC5MaXN0PD8+Pj4nIj5DbGFzczw/IGV4dGVuZHMgTGlzdDw/IGV4dGVuZHMgTGlzdDw/Pj4+IGNsczIgPSBsaXN0Q2xhc3M7PC9lcnJvcj4KKyAgICA8ZXJyb3IgZGVzY3I9IkluY29tcGF0aWJsZSB0eXBlcy4gRm91bmQ6ICdqYXZhLmxhbmcuQ2xhc3M8Y2FwdHVyZTw/IGV4dGVuZHMgamF2YS51dGlsLkxpc3Q+PicsIHJlcXVpcmVkOiAnamF2YS5sYW5nLkNsYXNzPD8gc3VwZXIgamF2YS51dGlsLkxpc3Q8Pz4+JyI+Q2xhc3M8PyBzdXBlciBMaXN0PD8+PiBjbHNTID0gbGlzdENsYXNzOzwvZXJyb3I+CisgICAgPGVycm9yIGRlc2NyPSJJbmNvbXBhdGlibGUgdHlwZXMuIEZvdW5kOiAnamF2YS5sYW5nLkNsYXNzPGNhcHR1cmU8PyBleHRlbmRzIGphdmEudXRpbC5MaXN0Pj4nLCByZXF1aXJlZDogJ2phdmEubGFuZy5DbGFzczw/IHN1cGVyIGphdmEudXRpbC5MaXN0PiciPkNsYXNzPD8gc3VwZXIgTGlzdD4gY2xzUzEgPSBsaXN0Q2xhc3M7PC9lcnJvcj4KKyAgfQorCisgIHZvaWQgZm9vUyhDbGFzczw/IHN1cGVyIExpc3Q+IGxpc3RDbGFzcykgeworICAgIDxlcnJvciBkZXNjcj0iSW5jb21wYXRpYmxlIHR5cGVzLiBGb3VuZDogJ2phdmEubGFuZy5DbGFzczxjYXB0dXJlPD8gc3VwZXIgamF2YS51dGlsLkxpc3Q+PicsIHJlcXVpcmVkOiAnamF2YS5sYW5nLkNsYXNzPD8gZXh0ZW5kcyBqYXZhLnV0aWwuTGlzdDw/Pj4nIj5DbGFzczw/IGV4dGVuZHMgTGlzdDw/Pj4gY2xzMSA9IGxpc3RDbGFzczs8L2Vycm9yPgorICAgIDxlcnJvciBkZXNjcj0iSW5jb21wYXRpYmxlIHR5cGVzLiBGb3VuZDogJ2phdmEubGFuZy5DbGFzczxjYXB0dXJlPD8gc3VwZXIgamF2YS51dGlsLkxpc3Q+PicsIHJlcXVpcmVkOiAnamF2YS5sYW5nLkNsYXNzPD8gZXh0ZW5kcyBqYXZhLnV0aWwuTGlzdDw/IGV4dGVuZHMgamF2YS51dGlsLkxpc3Q8Pz4+PiciPkNsYXNzPD8gZXh0ZW5kcyBMaXN0PD8gZXh0ZW5kcyBMaXN0PD8+Pj4gY2xzMiA9IGxpc3RDbGFzczs8L2Vycm9yPgorICAgIENsYXNzPD8gc3VwZXIgTGlzdDw/Pj4gY2xzUyA9IGxpc3RDbGFzczsKKyAgICBDbGFzczw/IHN1cGVyIExpc3Q+IGNsc1MxID0gbGlzdENsYXNzOworICB9CisKKyAgdm9pZCBmb29VKENsYXNzPD8+IGxpc3RDbGFzcykgeworICAgIDxlcnJvciBkZXNjcj0iSW5jb21wYXRpYmxlIHR5cGVzLiBGb3VuZDogJ2phdmEubGFuZy5DbGFzczxjYXB0dXJlPD8+PicsIHJlcXVpcmVkOiAnamF2YS5sYW5nLkNsYXNzPD8gZXh0ZW5kcyBqYXZhLnV0aWwuTGlzdDw/Pj4nIj5DbGFzczw/IGV4dGVuZHMgTGlzdDw/Pj4gY2xzMSA9IGxpc3RDbGFzczs8L2Vycm9yPgorICAgIDxlcnJvciBkZXNjcj0iSW5jb21wYXRpYmxlIHR5cGVzLiBGb3VuZDogJ2phdmEubGFuZy5DbGFzczxjYXB0dXJlPD8+PicsIHJlcXVpcmVkOiAnamF2YS5sYW5nLkNsYXNzPD8gZXh0ZW5kcyBqYXZhLnV0aWwuTGlzdDw/IGV4dGVuZHMgamF2YS51dGlsLkxpc3Q8Pz4+PiciPkNsYXNzPD8gZXh0ZW5kcyBMaXN0PD8gZXh0ZW5kcyBMaXN0PD8+Pj4gY2xzMiA9IGxpc3RDbGFzczs8L2Vycm9yPgorICAgIDxlcnJvciBkZXNjcj0iSW5jb21wYXRpYmxlIHR5cGVzLiBGb3VuZDogJ2phdmEubGFuZy5DbGFzczxjYXB0dXJlPD8+PicsIHJlcXVpcmVkOiAnamF2YS5sYW5nLkNsYXNzPD8gc3VwZXIgamF2YS51dGlsLkxpc3Q8Pz4+JyI+Q2xhc3M8PyBzdXBlciBMaXN0PD8+PiBjbHNTID0gbGlzdENsYXNzOzwvZXJyb3I+CisgICAgPGVycm9yIGRlc2NyPSJJbmNvbXBhdGlibGUgdHlwZXMuIEZvdW5kOiAnamF2YS5sYW5nLkNsYXNzPGNhcHR1cmU8Pz4+JywgcmVxdWlyZWQ6ICdqYXZhLmxhbmcuQ2xhc3M8PyBzdXBlciBqYXZhLnV0aWwuTGlzdD4nIj5DbGFzczw/IHN1cGVyIExpc3Q+IGNsc1MxID0gbGlzdENsYXNzOzwvZXJyb3I+CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvZ2VuZXJpY3NIaWdobGlnaHRpbmcvSURFQTg4ODk1LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2dlbmVyaWNzSGlnaGxpZ2h0aW5nL0lERUE4ODg5NS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUzNDgyZDcKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2dlbmVyaWNzSGlnaGxpZ2h0aW5nL0lERUE4ODg5NS5qYXZhCkBAIC0wLDAgKzEsMjYgQEAKK2ltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7CisKK3B1YmxpYyBjbGFzcyBXaWxkY2FyZEdlbmVyaWNBbmRQcml2YXRlRmllbGQgeworCisgICAgcHJpdmF0ZSBPYmplY3QgZmllbGQ7CisKKyAgICBwdWJsaWMgSXRlcmF0b3I8PyBleHRlbmRzIFdpbGRjYXJkR2VuZXJpY0FuZFByaXZhdGVGaWVsZD4gaXRlcmF0b3IoKSB7CisgICAgICAgIHJldHVybiBudWxsOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIG1ldGhvZERvZXNOb3RDb21waWxlKCkgeworICAgICAgICBJdGVyYXRvcjw/IGV4dGVuZHMgV2lsZGNhcmRHZW5lcmljQW5kUHJpdmF0ZUZpZWxkPiBpdGVyYXRvciA9IGl0ZXJhdG9yKCk7CisgICAgICAgIHdoaWxlICggaXRlcmF0b3IuaGFzTmV4dCgpICkgeworICAgICAgICAgICAgT2JqZWN0IG8gPSBpdGVyYXRvci5uZXh0KCkuPGVycm9yIGRlc2NyPSInZmllbGQnIGhhcyBwcml2YXRlIGFjY2VzcyBpbiAnV2lsZGNhcmRHZW5lcmljQW5kUHJpdmF0ZUZpZWxkJyI+ZmllbGQ8L2Vycm9yPjsKKyAgICAgICAgfQorICAgIH0KKworICAgIHB1YmxpYyB2b2lkIG1ldGhvZENvbXBpbGVzKCkgeworICAgICAgICBJdGVyYXRvcjw/IGV4dGVuZHMgV2lsZGNhcmRHZW5lcmljQW5kUHJpdmF0ZUZpZWxkPiBpdGVyYXRvciA9IGl0ZXJhdG9yKCk7CisgICAgICAgIHdoaWxlICggaXRlcmF0b3IuaGFzTmV4dCgpICkgeworICAgICAgICAgICAgV2lsZGNhcmRHZW5lcmljQW5kUHJpdmF0ZUZpZWxkIG5leHQgPSBpdGVyYXRvci5uZXh0KCk7CisgICAgICAgICAgICBPYmplY3QgbyA9IG5leHQuZmllbGQ7CisgICAgICAgIH0KKyAgICB9CisKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2dlbmVyaWNzSGlnaGxpZ2h0aW5nL0lERUE4OTc3MS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9nZW5lcmljc0hpZ2hsaWdodGluZy9JREVBODk3NzEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mM2EwNGRlCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9nZW5lcmljc0hpZ2hsaWdodGluZy9JREVBODk3NzEuamF2YQpAQCAtMCwwICsxLDMgQEAKK3B1YmxpYyBAaW50ZXJmYWNlIE15QW5ub3RhdGlvbiB7CisgICAgQ2xhc3M8PyBleHRlbmRzIEVudW08Pz4+IGVudW1DbGFzcygpIGRlZmF1bHQgPGVycm9yIGRlc2NyPSJJbmNvbXBhdGlibGUgdHlwZXMuIEZvdW5kOiAnamF2YS5sYW5nLkNsYXNzPGphdmEubGFuZy5FbnVtPicsIHJlcXVpcmVkOiAnamF2YS5sYW5nLkNsYXNzPD8gZXh0ZW5kcyBqYXZhLmxhbmcuRW51bTw/Pj4nIj5FbnVtLmNsYXNzPC9lcnJvcj47Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2dlbmVyaWNzSGlnaGxpZ2h0aW5nL0lERUE4OTgwMS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9nZW5lcmljc0hpZ2hsaWdodGluZy9JREVBODk4MDEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOGQ5NzA3Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9nZW5lcmljc0hpZ2hsaWdodGluZy9JREVBODk4MDEuamF2YQpAQCAtMCwwICsxLDcgQEAKK2ltcG9ydCBqYXZhLnV0aWwuKjsKK2NsYXNzIFRlc3QgeworICB7CisgICAgTWFwPE51bWJlciwgU3RyaW5nPiBtYXAxID0gbnVsbDsKKyAgICBNYXA8SW50ZWdlciwgU3RyaW5nPiBtYXAyID0gPGVycm9yIGRlc2NyPSJJbmNvbnZlcnRpYmxlIHR5cGVzOyBjYW5ub3QgY2FzdCAnamF2YS51dGlsLk1hcDxqYXZhLmxhbmcuTnVtYmVyLGphdmEubGFuZy5TdHJpbmc+JyB0byAnamF2YS51dGlsLk1hcDxqYXZhLmxhbmcuSW50ZWdlcixqYXZhLmxhbmcuU3RyaW5nPiciPihNYXA8SW50ZWdlciwgU3RyaW5nPikgbWFwMTwvZXJyb3I+OworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9nZW5lcmljc0hpZ2hsaWdodGluZy9JREVBOTA4MDIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvZ2VuZXJpY3NIaWdobGlnaHRpbmcvSURFQTkwODAyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTQzMzNjYwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvZ2VuZXJpY3NIaWdobGlnaHRpbmcvSURFQTkwODAyLmphdmEKQEAgLTAsMCArMSwyNCBAQAoraW1wb3J0IGphdmEudXRpbC4qOworCitpbnRlcmZhY2UgVmNzUm9vdCB7Cit9CisKK2ludGVyZmFjZSBTVmNzUm9vdCBleHRlbmRzIFZjc1Jvb3QgeworfQorCitpbnRlcmZhY2UgQSB7CisgICAgTGlzdDw/IGV4dGVuZHMgVmNzUm9vdD4gZ2V0VmNzUm9vdHMoKTsKK30KKworaW50ZXJmYWNlIEIgeworICAgIExpc3Q8U1Zjc1Jvb3Q+IGdldFZjc1Jvb3RzKCk7Cit9CisKK2ludGVyZmFjZSBGMSBleHRlbmRzIEEsIEIgeworfQorCitjbGFzcyBHIHsKKyAgICB2b2lkIGYoRjEgbykgeworICAgICAgICBTVmNzUm9vdCByID0gby5nZXRWY3NSb290cygpLmdldCgwKTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9nZW5lcmljc0hpZ2hsaWdodGluZy9JREVBOTE2MjYuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvZ2VuZXJpY3NIaWdobGlnaHRpbmcvSURFQTkxNjI2LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmYyOTcyOQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvZ2VuZXJpY3NIaWdobGlnaHRpbmcvSURFQTkxNjI2LmphdmEKQEAgLTAsMCArMSwyNSBAQAorY2xhc3MgVGVzdCB7CisgICAgaW50ZXJmYWNlIEE8VD4geworICAgICAgICB2b2lkIF8oVC4uLiB0KTsKKyAgICB9CisKKyAgICBzdGF0aWMgdm9pZCBmb28oZmluYWwgQTw/PiBiYXIpIHsKKyAgICAgICAgYmFyLl8oIiIpOworICAgIH0KKyAgICBzdGF0aWMgdm9pZCBmb28xKGZpbmFsIEE8PyBleHRlbmRzIFN0cmluZz4gYmFyKSB7CisgICAgICAgIGJhci5fKCIiKTsKKyAgICB9CisKKyAgICBzdGF0aWMgdm9pZCBmb28yKGZpbmFsIEE8PyBleHRlbmRzIEludGVnZXI+IGJhcikgeworICAgICAgICBiYXIuXzxlcnJvciBkZXNjcj0iJ18oY2FwdHVyZTw/IGV4dGVuZHMgamF2YS5sYW5nLkludGVnZXI+Li4uKScgaW4gJ1Rlc3QuQScgY2Fubm90IGJlIGFwcGxpZWQgdG8gJyhqYXZhLmxhbmcuU3RyaW5nKSciPigiIik8L2Vycm9yPjsKKyAgICB9CisKKworICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKyAgICAgICAgZm9vKG5ldyBBPEludGVnZXI+KCkgeworICAgICAgICAgICAgcHVibGljIHZvaWQgXyhmaW5hbCBJbnRlZ2VyLi4uIHQpIHsKKworICAgICAgICAgICAgfQorICAgICAgICB9KTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2dlbmVyaWNzSGlnaGxpZ2h0aW5nL0lERUE5MjAyMi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9nZW5lcmljc0hpZ2hsaWdodGluZy9JREVBOTIwMjIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YTliYjk1Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9nZW5lcmljc0hpZ2hsaWdodGluZy9JREVBOTIwMjIuamF2YQpAQCAtMCwwICsxLDIzIEBACitjbGFzcyBHZXRDbGFzc0NsaWVudCB7CisgICAgICAgIHB1YmxpYyB2b2lkIHVzZSgpIHsKKyAgICAgICAgICAgICAgICBDbGFzczw/IGV4dGVuZHMgTG9jYWxHZW5lcmljPiB2MSA9IG51bGw7CisgICAgICAgICAgICAgICAgQ2xhc3M8PyBleHRlbmRzIExvY2FsR2VuZXJpYzxPYmplY3Q+PiB2MiA9IG51bGw7CisgICAgICAgICAgICAgICAgdjEgPSB2MjsKKyAgICAgICAgICAgICAgPGVycm9yIGRlc2NyPSJJbmNvbXBhdGlibGUgdHlwZXMuIEZvdW5kOiAnamF2YS5sYW5nLkNsYXNzPGNhcHR1cmU8PyBleHRlbmRzIEdldENsYXNzQ2xpZW50LkxvY2FsR2VuZXJpYz4+JywgcmVxdWlyZWQ6ICdqYXZhLmxhbmcuQ2xhc3M8PyBleHRlbmRzIEdldENsYXNzQ2xpZW50LkxvY2FsR2VuZXJpYzxqYXZhLmxhbmcuT2JqZWN0Pj4nIj52MiA9IHYxPC9lcnJvcj47CisgICAgICAgIH0KKworICAgICAgICBwdWJsaWMgc3RhdGljIGNsYXNzIExvY2FsR2VuZXJpYzxUPiB7CisgICAgICAgIH0KK30KKworCitpbnRlcmZhY2UgQ29tcGFyYWJsZTxUIGV4dGVuZHMgQ29tcGFyYWJsZTxUPj4ge30KK2NsYXNzIExpc3Q8VD4ge30KKworY2xhc3MgRm9vIGltcGxlbWVudHMgQ29tcGFyYWJsZTxGb28+IHsKKyAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncyl7CisgICAgTGlzdDw/IGV4dGVuZHMgRm9vPiBsaXN0ID0gbnVsbDsKKyAgICBMaXN0PD8gZXh0ZW5kcyBDb21wYXJhYmxlPiBjID0gbnVsbDsKKyAgICBjID0gbGlzdDsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvZ2VuZXJpY3NIaWdobGlnaHRpbmcvSURFQTk0MDExLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2dlbmVyaWNzSGlnaGxpZ2h0aW5nL0lERUE5NDAxMS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc2YmViM2MKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2dlbmVyaWNzSGlnaGxpZ2h0aW5nL0lERUE5NDAxMS5qYXZhCkBAIC0wLDAgKzEsMjEgQEAKK2ltcG9ydCBqYXZhLnV0aWwuKjsKK2NsYXNzIFRlc3QgeworCisgICAgY2xhc3MgUGFyZW50IHsgfQorCisgICAgaW50ZXJmYWNlIENvbnN1bWVyPFQ+IHsgfQorCisgICAgaW50ZXJmYWNlIE15Q29uc3VtZXI8VCBleHRlbmRzIFBhcmVudD4gZXh0ZW5kcyBDb25zdW1lcjxUPiB7IH0KKworCisgICAgcHVibGljIHZvaWQgdGVzdChTZXQ8TXlDb25zdW1lcj4gc2V0KSB7CisgICAgICAgIEBTdXBwcmVzc1dhcm5pbmdzKCJ1bmNoZWNrZWQiKQorICAgICAgICBNYXA8UGFyZW50LCBNeUNvbnN1bWVyPFBhcmVudD4+IG1hcCA9IGNyZWF0ZShzZXQpOworCisgICAgfQorCisgICAgcHVibGljIDxTLCBUIGV4dGVuZHMgQ29uc3VtZXI8Uz4+IE1hcDxTLCBUPiBjcmVhdGUoU2V0PFQ+IGNvbnN1bWVycykgeworICAgICAgICByZXR1cm4gbnVsbDsKKyAgICB9CisKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvZ2VuZXJpY3NIaWdobGlnaHRpbmcvSURFQTk3Mjc2LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2dlbmVyaWNzSGlnaGxpZ2h0aW5nL0lERUE5NzI3Ni5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMwNTllODMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2dlbmVyaWNzSGlnaGxpZ2h0aW5nL0lERUE5NzI3Ni5qYXZhCkBAIC0wLDAgKzEsNCBAQAoraW50ZXJmYWNlIEludGVyZjxYIGV4dGVuZHMgSW50ZXJmPiB7fQorY2xhc3MgU29tZUNsYXNzIHsKKyAgICBzdGF0aWMgPEkgZXh0ZW5kcyBJbnRlcmY8PyBzdXBlciBJPj4gQ2xhc3M8ST4gc29tZU1ldGhvZChJIGkpIHsgcmV0dXJuIG51bGw7IH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvZ2VuZXJpY3NIaWdobGlnaHRpbmcvSURFQTk3ODg4LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2dlbmVyaWNzSGlnaGxpZ2h0aW5nL0lERUE5Nzg4OC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVhODI2NzgKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2dlbmVyaWNzSGlnaGxpZ2h0aW5nL0lERUE5Nzg4OC5qYXZhCkBAIC0wLDAgKzEsMjMgQEAKK2ltcG9ydCBqYXZhLnV0aWwuKjsKK2ltcG9ydCBqYXZhLmlvLkZpbGU7CitjbGFzcyBGb28geworICAgIHB1YmxpYyBDb2xsZWN0aW9uPEJ1aWxkVGFyZ2V0PD8+PiBnZXREZXBlbmRlbmNpZXMoTGF5b3V0RWxlbWVudEJ1aWxkZXJTZXJ2aWNlIGJ1aWxkZXIsIEpwc1BhY2thZ2luZ0VsZW1lbnQgZWxlbWVudCwgVGFyZ2V0T3V0cHV0SW5kZXggb3V0cHV0SW5kZXgpIHsKKyAgICAgICAgcmV0dXJuIGJ1aWxkZXIuZ2V0RGVwZW5kZW5jaWVzKGVsZW1lbnQsIG91dHB1dEluZGV4KTsKKyAgICB9Cit9CisKK2NsYXNzIEJ1aWxkVGFyZ2V0PFIgZXh0ZW5kcyBCdWlsZFJvb3REZXNjcmlwdG9yPiB7fQorCitpbnRlcmZhY2UgVGFyZ2V0T3V0cHV0SW5kZXggeworICAgIENvbGxlY3Rpb248QnVpbGRUYXJnZXQ8Pz4+IGdldFRhcmdldHNCeU91dHB1dEZpbGUoRmlsZSBmaWxlKTsKK30KKworY2xhc3MgQnVpbGRSb290RGVzY3JpcHRvciB7fQorCitjbGFzcyBMYXlvdXRFbGVtZW50QnVpbGRlclNlcnZpY2U8RSBleHRlbmRzIEpwc1BhY2thZ2luZ0VsZW1lbnQ+IHsKKyAgICBwdWJsaWMgQ29sbGVjdGlvbjw/IGV4dGVuZHMgQnVpbGRUYXJnZXQ8Pz4+IGdldERlcGVuZGVuY2llcyhFIGVsZW1lbnQsIFRhcmdldE91dHB1dEluZGV4IG91dHB1dEluZGV4KSB7CisgICAgICAgIHJldHVybiBDb2xsZWN0aW9ucy5lbXB0eUxpc3QoKTsKKyAgICB9Cit9CisKK2NsYXNzIEpwc1BhY2thZ2luZ0VsZW1lbnQge30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2dlbmVyaWNzSGlnaGxpZ2h0aW5nL0lERUE5ODQyMS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9nZW5lcmljc0hpZ2hsaWdodGluZy9JREVBOTg0MjEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOGFjODZiCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9nZW5lcmljc0hpZ2hsaWdodGluZy9JREVBOTg0MjEuamF2YQpAQCAtMCwwICsxLDExIEBACitjbGFzcyBPdXRlciB7CisgIGNsYXNzIElubmVyIHsKKyAgICBwdWJsaWMgPFQ+IElubmVyKFQgdCkgeyB9CisgIH0KKworICBjbGFzcyBPdGhlciBleHRlbmRzIE91dGVyLklubmVyIHsKKyAgICBwdWJsaWMgT3RoZXIoKSB7CisgICAgICBuZXcgT3V0ZXIoKS48T2JqZWN0PnN1cGVyKCJIaSIpOworICAgIH0KKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9nZW5lcmljc0hpZ2hsaWdodGluZy9JREVBREVWMTA0NTkuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvZ2VuZXJpY3NIaWdobGlnaHRpbmcvSURFQURFVjEwNDU5LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmU1MjY1OQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvZ2VuZXJpY3NIaWdobGlnaHRpbmcvSURFQURFVjEwNDU5LmphdmEKQEAgLTAsMCArMSwzMSBAQAoraW1wb3J0IGphdmEuaW8uU2VyaWFsaXphYmxlOworaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKKy8qKiBAbm9pbnNwZWN0aW9uIFVudXNlZERlY2xhcmF0aW9uKi8KK3B1YmxpYyBjbGFzcyBHZW5lcmljc1Rlc3Q5OCB7CisgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgdGhyb3dzIEV4Y2VwdGlvbnsKKyAgICAgICAgTGlzdDxNb3ZhYmxlPD8gZXh0ZW5kcyBTZXJpYWxpemFibGU+PiBsaXN0ID0gbmV3IEFycmF5TGlzdDxNb3ZhYmxlPD8gZXh0ZW5kcyBTZXJpYWxpemFibGU+PiAoKTsKKyAgICAgICAgRmFjdG9yeSBmYWN0b3J5ID0gRmFjdG9yeS5uZXdJbnN0YW5jZSgpOworICAgICAgICAvLyBEb2Vzbid0IGNvbXBpbGUsIGJ1dCBJZGVhIGRvZXNuJ3QgY29tcGxhaW4KKyAgICAgICAgTW92ZXI8PyBleHRlbmRzIFNlcmlhbGl6YWJsZT4gbW92ZXIgID0gZmFjdG9yeS5nZXROZXc8ZXJyb3IgZGVzY3I9IidnZXROZXcoamF2YS51dGlsLkxpc3Q8PyBleHRlbmRzIE1vdmFibGU8VD4+KScgaW4gJ0ZhY3RvcnknIGNhbm5vdCBiZSBhcHBsaWVkIHRvICcoamF2YS51dGlsLkxpc3Q8TW92YWJsZTw/IGV4dGVuZHMgamF2YS5pby5TZXJpYWxpemFibGU+PiknIj4obGlzdCk8L2Vycm9yPjsKKyAgICB9Cit9CisKK2Fic3RyYWN0IGNsYXNzIEZhY3RvcnkgeworICAgIHB1YmxpYyBzdGF0aWMgRmFjdG9yeSBuZXdJbnN0YW5jZSgpeworICAgICAgICByZXR1cm4gbnVsbDsKKyAgICB9CisKKyAgICAvLyBUaGlzIHNob3VsZCBhY3R1YWxseSBiZQorICAgIC8vIHB1YmxpYyBhYnN0cmFjdCA8VCBleHRlbmRzIFNlcmlhbGl6YWJsZT4gTW92ZXI8VD4gZ2V0TmV3IChMaXN0PD8gZXh0ZW5kcyBNb3ZhYmxlPD8gZXh0ZW5kcyBUPj4gc291cmNlKTsKKyAgICBwdWJsaWMgYWJzdHJhY3QgPFQgZXh0ZW5kcyBTZXJpYWxpemFibGU+IE1vdmVyPFQ+IGdldE5ldyAoTGlzdDw/IGV4dGVuZHMgTW92YWJsZTxUPj4gc291cmNlKTsKK30KKworLyoqIEBub2luc3BlY3Rpb24gVW51c2VkRGVjbGFyYXRpb24qLworaW50ZXJmYWNlIE1vdmFibGU8VCBleHRlbmRzIFNlcmlhbGl6YWJsZT4gZXh0ZW5kcyBTZXJpYWxpemFibGUgeworfQorCisvKiogQG5vaW5zcGVjdGlvbiBVbnVzZWREZWNsYXJhdGlvbiovCitpbnRlcmZhY2UgTW92ZXI8VCBleHRlbmRzIFNlcmlhbGl6YWJsZT4geworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvZ2VuZXJpY3NIaWdobGlnaHRpbmcvSURFQURFVjEyOTUxLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2dlbmVyaWNzSGlnaGxpZ2h0aW5nL0lERUFERVYxMjk1MS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAzY2Q0YjYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2dlbmVyaWNzSGlnaGxpZ2h0aW5nL0lERUFERVYxMjk1MS5qYXZhCkBAIC0wLDAgKzEsMjkgQEAKK2NsYXNzIENsYXNzRXh0IHsKKworICAgIC8qKiBAbm9pbnNwZWN0aW9uIFVudXNlZERlY2xhcmF0aW9uKi8KKyAgICBwdWJsaWMgc3RhdGljIDxULCBQMSwgUDI+IFQgbmV3SW5zdGFuY2UoQ2xhc3M8VD4gY2xhenosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENsYXNzPD8gc3VwZXIgUDE+IHQxLCBQMSBwMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2xhc3M8PyBzdXBlciBQMj4gdDIsIFAyIHAyKSB7CisgICAgICAgIHJldHVybiBudWxsOworICAgIH0KKworCit9CisKK2Fic3RyYWN0IGNsYXNzIFRLZXk8VD4geworCisgICAgcHJvdGVjdGVkIGFic3RyYWN0IENsYXNzPFQ+IGdldFR5cGUoKTsKK30KKworCitjbGFzcyBHb29kSXNSZWQ2IHsKKworCisgICAgcHVibGljIHN0YXRpYyA8VEsgZXh0ZW5kcyBUS2V5PD8+PiBUSyBjcmVhdGVDbG9uZShUSyB0a2V5LCBTdHJpbmcga2V5KSB7CisKKworICAgICAgICBDbGFzczxUSz4gY2xhenogPSBudWxsOworCisgICAgICAgIHJldHVybiBDbGFzc0V4dC5uZXdJbnN0YW5jZShjbGF6eiwgU3RyaW5nLmNsYXNzLCBrZXksIENsYXNzLmNsYXNzLCB0a2V5LmdldFR5cGUoKSk7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9nZW5lcmljc0hpZ2hsaWdodGluZy9JREVBREVWMTMwMTEuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvZ2VuZXJpY3NIaWdobGlnaHRpbmcvSURFQURFVjEzMDExLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjRlNWM1MwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvZ2VuZXJpY3NIaWdobGlnaHRpbmcvSURFQURFVjEzMDExLmphdmEKQEAgLTAsMCArMSwyOSBAQAorLyoqIEBub2luc3BlY3Rpb24gVW51c2VkRGVjbGFyYXRpb24qLworY2xhc3MgTGltaXRlZFBvb2w8VD4geworICBwcml2YXRlIGludCBjYXBhY2l0eTsKKyAgcHJpdmF0ZSBmaW5hbCBPYmplY3RGYWN0b3J5PFQ+IGZhY3Rvcnk7CisgIHByaXZhdGUgT2JqZWN0W10gc3RvcmFnZTsKKyAgcHJpdmF0ZSBpbnQgaW5kZXggPSAwOworCisgIHB1YmxpYyBMaW1pdGVkUG9vbChmaW5hbCBpbnQgY2FwYWNpdHksIE9iamVjdEZhY3Rvcnk8VD4gZmFjdG9yeSkgeworICAgIHRoaXMuY2FwYWNpdHkgPSBjYXBhY2l0eTsKKyAgICB0aGlzLmZhY3RvcnkgPSBmYWN0b3J5OworICAgIHN0b3JhZ2UgPSBuZXcgT2JqZWN0W2NhcGFjaXR5XTsKKyAgfQorCisgIGludGVyZmFjZSBPYmplY3RGYWN0b3J5PFQ+IHsKKyAgICBUIGNyZWF0ZSgpOworICAgIHZvaWQgY2xlYW51cChUIHQpOworICB9CisKKyAgcHVibGljIFQgYWxsb2MoKSB7CisgICAgaWYgKGluZGV4ID49IGNhcGFjaXR5KSByZXR1cm4gZmFjdG9yeS5jcmVhdGUoKTsKKworICAgIGlmIChzdG9yYWdlW2luZGV4XSA9PSBudWxsKSB7CisgICAgICBzdG9yYWdlW2luZGV4XSA9IGZhY3RvcnkuY3JlYXRlKCk7CisgICAgfQorCisgICAgPGVycm9yIGRlc2NyPSJJbmNvbXBhdGlibGUgdHlwZXMuIEZvdW5kOiAnamF2YS5sYW5nLk9iamVjdFtdJywgcmVxdWlyZWQ6ICdUJyI+cmV0dXJuIHN0b3JhZ2U7PC9lcnJvcj4KKyAgfQorCit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9nZW5lcmljc0hpZ2hsaWdodGluZy9JREVBREVWMTQwMDYuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvZ2VuZXJpY3NIaWdobGlnaHRpbmcvSURFQURFVjE0MDA2LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjczMjA2YgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvZ2VuZXJpY3NIaWdobGlnaHRpbmcvSURFQURFVjE0MDA2LmphdmEKQEAgLTAsMCArMSwxOCBAQAorLyoqIEBub2luc3BlY3Rpb24gVW51c2VkRGVjbGFyYXRpb24qLworaW50ZXJmYWNlIFRlc3RJRjI8VD4gZXh0ZW5kcyBUZXN0SUYzPFQ+IHt9CisKKy8qKiBAbm9pbnNwZWN0aW9uIFVudXNlZERlY2xhcmF0aW9uKi8KK2ludGVyZmFjZSBUZXN0SUY8VCBleHRlbmRzIFRlc3RJRjI8PyBleHRlbmRzIFRlc3QyPj4geworICAgIHZvaWQgcnVuKFQgbzEpOworfQorCisvKiogQG5vaW5zcGVjdGlvbiBVbnVzZWREZWNsYXJhdGlvbiovCitpbnRlcmZhY2UgVGVzdElGMzxUPiB7fQorCitjbGFzcyBUZXN0MiB7fQorCitjbGFzcyBUZXN0IHsKKyAgICBwdWJsaWMgdm9pZCB0ZXN0KFRlc3RJRjw/PiB0ZXN0SUYpIHsKKyAgICAgICAgdGVzdElGLnJ1bjxlcnJvciBkZXNjcj0iJ3J1bihjYXB0dXJlPD8gZXh0ZW5kcyBUZXN0SUYyPD8gZXh0ZW5kcyBUZXN0Mj4+KScgaW4gJ1Rlc3RJRicgY2Fubm90IGJlIGFwcGxpZWQgdG8gJygpJyI+KCk8L2Vycm9yPjsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9nZW5lcmljc0hpZ2hsaWdodGluZy9JREVBREVWMTQxMDMuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvZ2VuZXJpY3NIaWdobGlnaHRpbmcvSURFQURFVjE0MTAzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzdlNmJiMAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvZ2VuZXJpY3NIaWdobGlnaHRpbmcvSURFQURFVjE0MTAzLmphdmEKQEAgLTAsMCArMSw1MiBAQAorY2xhc3MgVGVzdEdlbmVyaWNzIHsKKworICAgIHN0YXRpYyBpbnRlcmZhY2UgRW51bUludGVyZmFjZSB7CisgICAgICAgIHB1YmxpYyBTdHJpbmcgZ2V0U29tZXRoaW5nKCk7CisgICAgfQorCisgICAgc3RhdGljIGVudW0gRW51bTEgaW1wbGVtZW50cyBFbnVtSW50ZXJmYWNlIHsKKyAgICAgICAgQSgiYWxwaGEiKSwKKyAgICAgICAgQigiYmV0YSIpLAorICAgICAgICBHKCJnYW1tZSIpLAorICAgICAgICA7CisgICAgICAgIHByaXZhdGUgU3RyaW5nIHRleHQ7CisKKyAgICAgICAgRW51bTEoU3RyaW5nIHRleHQpIHsKKyAgICAgICAgICAgIHRoaXMudGV4dCA9IHRleHQ7CisgICAgICAgIH0KKworICAgICAgICBwdWJsaWMgU3RyaW5nIGdldFNvbWV0aGluZygpIHsKKyAgICAgICAgICAgIHJldHVybiB0ZXh0OworICAgICAgICB9CisgICAgfQorCisgICAgc3RhdGljIGNsYXNzIFRlc3RCYXNlPEkgZXh0ZW5kcyBFbnVtPEk+ICYgRW51bUludGVyZmFjZT4geworCisgICAgICAgIHByb3RlY3RlZCBmaW5hbCB2b2lkIGFkZChFdmFsIGV2YWwpIHsKKyAgICAgICAgICAgIGV2YWwuaGFzaENvZGUoKTsKKyAgICAgICAgfQorCisgICAgICAgIGFic3RyYWN0IGNsYXNzIEV2YWwgeworICAgICAgICAgICAgcHJpdmF0ZSBJIGVudW1JOworCisgICAgICAgICAgICBwdWJsaWMgRXZhbChJIGVudW1JKSB7CisgICAgICAgICAgICAgICAgdGhpcy5lbnVtSSA9IGVudW1JOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBwdWJsaWMgZmluYWwgdm9pZCBkb1NvbWV0aGluZygpIHsKKyAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oZW51bUkuZ2V0U29tZXRoaW5nKCkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICB9CisKKworCisKKyAgICBjbGFzcyBUZXN0MSBleHRlbmRzIFRlc3RCYXNlPEVudW0xPiB7CisKKyAgICAgICAgcHVibGljIFRlc3QxKCkgeworICAgICAgICAgICAgYWRkKG5ldyBFdmFsKEVudW0xLkEpIHt9KTsKKyAgICAgICAgfQorICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvZ2VuZXJpY3NIaWdobGlnaHRpbmcvSURFQURFVjE1NTM0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2dlbmVyaWNzSGlnaGxpZ2h0aW5nL0lERUFERVYxNTUzNC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ0MDQyYTUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2dlbmVyaWNzSGlnaGxpZ2h0aW5nL0lERUFERVYxNTUzNC5qYXZhCkBAIC0wLDAgKzEsMjkgQEAKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uczsKKworY2xhc3MgU29ydFRlc3Q8UiBleHRlbmRzIENvbXBhcmFibGU8Uj4+IGltcGxlbWVudHMgQ29tcGFyYWJsZTxTb3J0VGVzdDxSPj4geworICAgIFIgcjsKKworICAgIHB1YmxpYyBTb3J0VGVzdChSIHIpIHsKKyAgICAgICAgdGhpcy5yID0gcjsKKyAgICB9CisKKyAgICBwdWJsaWMgaW50IGNvbXBhcmVUbyhTb3J0VGVzdDxSPiBvKSB7CisgICAgICAgIHJldHVybiByLmNvbXBhcmVUbyhvLnIpOworICAgIH0KKworICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKyAgICAgICAgQXJyYXlMaXN0PFNvcnRUZXN0PD8+PiBsaXN0ID0gbmV3IEFycmF5TGlzdDxTb3J0VGVzdDw/Pj4oKTsKKyAgICAgICAgU29ydFRlc3Q8Pz4gdDEgPSBuZXcgU29ydFRlc3Q8U3RyaW5nPigiIik7CisgICAgICAgIGxpc3QuYWRkKHQxKTsKKyAgICAgICAgU29ydFRlc3Q8Pz4gdDIgPSBuZXcgU29ydFRlc3Q8SW50ZWdlcj4oMCk7CisgICAgICAgIGxpc3QuYWRkKHQyKTsKKyAgICAgICAgPGVycm9yIGRlc2NyPSJJbmZlcnJlZCB0eXBlICdTb3J0VGVzdDxjYXB0dXJlPD8+PicgZm9yIHR5cGUgcGFyYW1ldGVyICdUJyBpcyBub3Qgd2l0aGluIGl0cyBib3VuZDsgc2hvdWxkIGltcGxlbWVudCAnamF2YS5sYW5nLkNvbXBhcmFibGU8PyBzdXBlciBTb3J0VGVzdDw/Pj4nIj5Db2xsZWN0aW9ucy5zb3J0KGxpc3QpPC9lcnJvcj47CisgICAgICAgIHQxLmNvbXBhcmVUbzxlcnJvciBkZXNjcj0iJ2NvbXBhcmVUbyhTb3J0VGVzdDxjYXB0dXJlPD8gZXh0ZW5kcyBqYXZhLmxhbmcuQ29tcGFyYWJsZTxjYXB0dXJlPD8+Pj4+KScgaW4gJ1NvcnRUZXN0JyBjYW5ub3QgYmUgYXBwbGllZCB0byAnKFNvcnRUZXN0PGNhcHR1cmU8Pz4+KSciPih0Mik8L2Vycm9yPjsKKworICAgICAgICAvL3RoaXMgc2hvdWxkIGJlIE9LCisgICAgICAgIFNvcnRUZXN0PD8+W10gYXJyID0gbmV3IFNvcnRUZXN0PD8+WzBdOworICAgICAgICBhcnJbMF0gPSBuZXcgU29ydFRlc3Q8U3RyaW5nPigiIik7CisgICAgfQorCit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9nZW5lcmljc0hpZ2hsaWdodGluZy9JREVBREVWMjMxNTcuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvZ2VuZXJpY3NIaWdobGlnaHRpbmcvSURFQURFVjIzMTU3LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzBjMmI3MAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvZ2VuZXJpY3NIaWdobGlnaHRpbmcvSURFQURFVjIzMTU3LmphdmEKQEAgLTAsMCArMSwxMCBAQAoraW1wb3J0IGphdmEudXRpbC5MaXN0OworaW1wb3J0IGphdmEudXRpbC5BcnJheXM7CisKK3B1YmxpYyBjbGFzcyBaWlogeworCisgICAgTGlzdDxDbGFzczw/Pj4gZihDbGFzczw/PltdIGV4Y2VwdGlvblR5cGVzKSB7CisgICAgICAgTGlzdDxDbGFzczw/Pj4gbmQgPSBBcnJheXMuYXNMaXN0KGV4Y2VwdGlvblR5cGVzKTsKKyAgICAgICByZXR1cm4gbmQ7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvZ2VuZXJpY3NIaWdobGlnaHRpbmcvSURFQURFVjI0MTY2LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2dlbmVyaWNzSGlnaGxpZ2h0aW5nL0lERUFERVYyNDE2Ni5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMxOTUyZDEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2dlbmVyaWNzSGlnaGxpZ2h0aW5nL0lERUFERVYyNDE2Ni5qYXZhCkBAIC0wLDAgKzEsNDkgQEAKK2ltcG9ydCBqYXZhLnV0aWwuKjsKKworaW50ZXJmYWNlIFR5cGVzYWZlTWFwPEJBU0U+IHsKKworICBAU3VwcHJlc3NXYXJuaW5ncyh7IlVudXNlZERlY2xhcmF0aW9uIn0pCisgIHB1YmxpYyBpbnRlcmZhY2UgS2V5PEJBU0UsVkFMVUU+IHsgfQorCisgIHB1YmxpYyA8VkFMVUUsIEtFWSBleHRlbmRzIEtleTxCQVNFLFZBTFVFPj4KKyAgICBib29sZWFuIGhhcyhDbGFzczxLRVk+IGtleSk7CisKKyAgcHVibGljIDxWQUxVRSwgS0VZIGV4dGVuZHMgS2V5PEJBU0UsVkFMVUU+PgorICAgIFZBTFVFIGdldChDbGFzczxLRVk+IGtleSk7CisKKyAgcHVibGljIDxWQUxVRUJBU0UsIFZBTFVFIGV4dGVuZHMgVkFMVUVCQVNFLCBLRVkgZXh0ZW5kcyBLZXk8QkFTRSxWQUxVRUJBU0U+PgorICAgIFZBTFVFIHNldChDbGFzczxLRVk+IGtleSwgVkFMVUUgdmFsdWUpOworCisgIHB1YmxpYyA8VkFMVUUsIEtFWSBleHRlbmRzIEtleTxCQVNFLFZBTFVFPj4KKyAgICBWQUxVRSByZW1vdmUoQ2xhc3M8S0VZPiBrZXkpOworCisgIHB1YmxpYyBTZXQ8Q2xhc3M8Pz4+IGtleVNldCgpOworCisgIHB1YmxpYyA8VkFMVUUsIEtFWSBleHRlbmRzIEtleTxDb3JlTWFwLCBWQUxVRT4+CisgICAgYm9vbGVhbiBjb250YWluc0tleShDbGFzczxLRVk+IGtleSk7Cit9CisKKworaW50ZXJmYWNlIENvcmVNYXAgZXh0ZW5kcyBUeXBlc2FmZU1hcDxDb3JlTWFwPiB7IH0KKworaW50ZXJmYWNlIENvcmVBbm5vdGF0aW9uPFY+CisgIGV4dGVuZHMgVHlwZXNhZmVNYXAuS2V5PENvcmVNYXAsIFY+IHsKKworICBwdWJsaWMgQ2xhc3M8Vj4gZ2V0VHlwZSgpOworfQorCisKK2NsYXNzIENvcmVNYXBzIHsKKworICBwdWJsaWMgc3RhdGljIDxLLFY+IE1hcDxLLFY+IHRvTWFwKENvbGxlY3Rpb248Q29yZU1hcD4gY29yZW1hcHMsCisgICAgICBDbGFzczxDb3JlQW5ub3RhdGlvbjxLPj4ga2V5S2V5LCBDbGFzczxDb3JlQW5ub3RhdGlvbjxWPj4gdmFsdWVLZXkpIHsKKworICAgIE1hcDxLLFY+IG1hcCA9IG5ldyBIYXNoTWFwPEssVj4oKTsKKyAgICBmb3IgKENvcmVNYXAgY20gOiBjb3JlbWFwcykgeworICAgICAgbWFwLnB1dChjbS5nZXQoa2V5S2V5KSwgY20uZ2V0KHZhbHVlS2V5KSk7CisgICAgfQorCisgICAgcmV0dXJuIG1hcDsKKyAgfQorfQorCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2dlbmVyaWNzSGlnaGxpZ2h0aW5nL0lERUFERVYyNTc3OC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9nZW5lcmljc0hpZ2hsaWdodGluZy9JREVBREVWMjU3NzguamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNDZhNGE4Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9nZW5lcmljc0hpZ2hsaWdodGluZy9JREVBREVWMjU3NzguamF2YQpAQCAtMCwwICsxLDE3IEBACitjbGFzcyBQcmljZSB7CisgICAgcHVibGljIDxQVCBleHRlbmRzIFByaWNlPiBQVCBjbG9uZSgpIHsKKyAgICAgICAgcmV0dXJuIG51bGw7CisgICAgfQorfQorCitjbGFzcyBCb25kUHJpY2UgZXh0ZW5kcyBQcmljZSB7CisgICAgcHVibGljIDxQVCBleHRlbmRzIEJvbmRQcmljZT4gUFQgY2xvbmUoKSB7CisgICAgICAgIHJldHVybiBudWxsOworICAgIH0KK30KKworY2xhc3MgVXNlciB7CisgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworICAgICAgICBuZXcgQm9uZFByaWNlKCkuY2xvbmU8ZXJyb3IgZGVzY3I9IkFtYmlndW91cyBtZXRob2QgY2FsbDogYm90aCAnQm9uZFByaWNlLmNsb25lKCknIGFuZCAnUHJpY2UuY2xvbmUoKScgbWF0Y2giPigpPC9lcnJvcj47CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvZ2VuZXJpY3NIaWdobGlnaHRpbmcvSURFQURFVjU3MzQzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2dlbmVyaWNzSGlnaGxpZ2h0aW5nL0lERUFERVY1NzM0My5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMwNDU2MjEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2dlbmVyaWNzSGlnaGxpZ2h0aW5nL0lERUFERVY1NzM0My5qYXZhCkBAIC0wLDAgKzEsNiBAQAorY2xhc3MgRDxUPiAgeworICAgIHZvaWQgZm9vKEQ8Pz4geCl7CisgICAgICAgIGJhcjxlcnJvciBkZXNjcj0iJ2JhcihEPD8+LCBEPD8gc3VwZXIgamF2YS5sYW5nLk9iamVjdD4pJyBpbiAnRCcgY2Fubm90IGJlIGFwcGxpZWQgdG8gJyhEPGNhcHR1cmU8Pz4+LCBEPGNhcHR1cmU8Pz4+KSciPih4LHgpPC9lcnJvcj47CisgICAgfQorICAgIDxUPiB2b2lkIGJhcihEPD8gZXh0ZW5kcyBUPiB4LCBEPD8gc3VwZXIgVD4geSl7fQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvZ2VuZXJpY3NIaWdobGlnaHRpbmcvSURFQURFVjczMzcuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvZ2VuZXJpY3NIaWdobGlnaHRpbmcvSURFQURFVjczMzcuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YWJjN2Y1Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9nZW5lcmljc0hpZ2hsaWdodGluZy9JREVBREVWNzMzNy5qYXZhCkBAIC0wLDAgKzEsNzQgQEAKK2ltcG9ydCBqYXZhLmlvLlNlcmlhbGl6YWJsZTsKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworaW1wb3J0IGphdmEudXRpbC5MaXN0OworaW1wb3J0IGphdmEudXRpbC5Db21wYXJhdG9yOworCisKK2NsYXNzIFRlc3RJREVBCit7CisKKyAgcHVibGljIHN0YXRpYyBjbGFzcyBUZXN0MTxUeXBlIGV4dGVuZHMgTGlzdCAmIFNlcmlhbGl6YWJsZT4KKyAgeworICAgIHB1YmxpYyB2b2lkIHByb2Nlc3MoU2VyaWFsaXphYmxlIHMpCisgICAgeworICAgIH0KKyAgICBwdWJsaWMgdm9pZCBwcm9jZXNzKFR5cGUgdCkKKyAgICB7CisgICAgfQorICB9CisKKyAgcHVibGljIHN0YXRpYyBjbGFzcyBUZXN0MiBleHRlbmRzIFRlc3QxPEFycmF5TGlzdD4KKyAgeworICAgIHB1YmxpYyB2b2lkIHByb2Nlc3MoU2VyaWFsaXphYmxlIHMpCisgICAgeworICAgICAgc3VwZXIucHJvY2VzcyhzKTsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBwcm9jZXNzKEFycmF5TGlzdCB0KQorICAgIHsKKyAgICAgIHN1cGVyLnByb2Nlc3ModCk7ICAgLy8gdGhpcyBjYWxsIGlzIE9LIHJlc29sdmluZyB0byBwYXJhbWV0ZXJpemVkIG1ldGhvZCBpbiBzdXBlcgorICAgIH0KKyAgfQorCisgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpCisgIHsKKyAgICBUZXN0MiB0ZXN0PW5ldyBUZXN0MigpOworICAgIEFycmF5TGlzdCBsaXN0PW5ldyBBcnJheUxpc3QoKTsKKyAgICB0ZXN0LnByb2Nlc3MobGlzdCk7CisgICAgdGVzdC5wcm9jZXNzKChTZXJpYWxpemFibGUpbGlzdCk7CisgIH0KK30KKworY2xhc3MgS2V5PFQ+IHsKKyAgICBPYmplY3QgYWRkKFQgdikgeworICAgICAgICByZXR1cm4gdjsKKyAgICB9Cit9CisKK2NsYXNzIFdLZXk8VywgVD4gZXh0ZW5kcyBLZXk8VD4geworCisgICAgVyBhZGQoVCB2KSB7CisgICAgICAgIHJldHVybiBudWxsOworICAgIH0KK30KKworY2xhc3MgSUJ1ZyB7CisKKyAgICBwdWJsaWMgc3RhdGljIDxXLCBUPiB2b2lkIGFkZEl0ZW0oV0tleTxXLCBUPiBrZXksIFQgdikgeworICAgICAgICBrZXkuYWRkKHYpOyAvLyAtLT4gZGVtZXRyYSBkcmF3IHRoaXMgaW4gcmVkLCBzZWUgYXR0YWNobWVudAorICAgIH0KK30KKworLy9JREVBREVWLTc2OTgKK2Fic3RyYWN0IGNsYXNzIENvbGxhdG9yIGltcGxlbWVudHMgQ29tcGFyYXRvcjxPYmplY3Q+IHsKKyAgcHVibGljIGFic3RyYWN0IGludCBjb21wYXJlKFN0cmluZyBzb3VyY2UsIFN0cmluZyB0YXJnZXQpOworCisgIHB1YmxpYyBpbnQgY29tcGFyZShPYmplY3QgbzEsIE9iamVjdCBvMikgeworICAgIHJldHVybiBjb21wYXJlKChTdHJpbmcpbzEsIChTdHJpbmcpbzIpOworICB9CisKKyAgcHVibGljIHZvaWQgZm9vKENvbGxhdG9yIGMpIHsKKyAgICBjLmNvbXBhcmUoImZvbyIsICJiYXIiKTsKKyAgfQorfQorLy9lbmQgb2YgLy9JREVBREVWLTc2OTgKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2dlbmVyaWNzSGlnaGxpZ2h0aW5nL0lsbGVnYWxHZW5lcmljVHlwZUluSW5zdGFuY2VvZi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9nZW5lcmljc0hpZ2hsaWdodGluZy9JbGxlZ2FsR2VuZXJpY1R5cGVJbkluc3RhbmNlb2YuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41Mjg3MWU4Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9nZW5lcmljc0hpZ2hsaWdodGluZy9JbGxlZ2FsR2VuZXJpY1R5cGVJbkluc3RhbmNlb2YuamF2YQpAQCAtMCwwICsxLDUzIEBACitjbGFzcyBBPFQ+IHsKKyAgcHVibGljIHZvaWQgZm9vKE9iamVjdCBvYmplY3QpIHsKKyAgICBpZiAob2JqZWN0IGluc3RhbmNlb2YgPGVycm9yIGRlc2NyPSJJbGxlZ2FsIGdlbmVyaWMgdHlwZSBmb3IgaW5zdGFuY2VvZiI+QjwvZXJyb3I+KSB7fQorICAgIGlmIChvYmplY3QgaW5zdGFuY2VvZiBBLkIpIHt9CisgICAgaWYgKG9iamVjdCBpbnN0YW5jZW9mIEE8Pz4uQikge30KKyAgICBpZiAob2JqZWN0IGluc3RhbmNlb2YgQTw/Pikge30KKyAgICBpZiAob2JqZWN0IGluc3RhbmNlb2YgPGVycm9yIGRlc2NyPSJJbGxlZ2FsIGdlbmVyaWMgdHlwZSBmb3IgaW5zdGFuY2VvZiI+QTxTdHJpbmc+PC9lcnJvcj4pIHt9CisgICAgaWYgKG9iamVjdCBpbnN0YW5jZW9mIEEpIHt9CisgICAgaWYgKG9iamVjdCBpbnN0YW5jZW9mIEFbXSkge30KKyAgICBpZiAob2JqZWN0IGluc3RhbmNlb2YgPGVycm9yIGRlc2NyPSJJbGxlZ2FsIGdlbmVyaWMgdHlwZSBmb3IgaW5zdGFuY2VvZiI+QltdPC9lcnJvcj4pIHt9CisgICAgaWYgKG9iamVjdCBpbnN0YW5jZW9mIEEuQltdKSB7fQorICB9CisKKyAgcHJpdmF0ZSBjbGFzcyBCIHsKKyAgfQorfQorCitjbGFzcyBBMSB7CisgIHB1YmxpYyB2b2lkIGZvbyhPYmplY3Qgb2JqZWN0KSB7CisgICAgaWYgKG9iamVjdCBpbnN0YW5jZW9mIEIxKSB7fQorICAgIGlmIChvYmplY3QgaW5zdGFuY2VvZiBBMS5CMSkge30KKyAgICBpZiAob2JqZWN0IGluc3RhbmNlb2YgQjFbXSkge30KKyAgfQorCisgIHByaXZhdGUgY2xhc3MgQjEgeworICB9Cit9CisKK2NsYXNzIEJyZWFrcG9pbnRUcmVlPFRQPiB7CisgICAgdm9pZCBmb28oTm9kZSBub2RlKSB7CisgICAgICAgIGlmIChub2RlIGluc3RhbmNlb2YgQk5vZGU8Pz4pIHsKKworICAgICAgICB9CisgICAgfQorCisgICAgc3RhdGljIGNsYXNzIEJOb2RlPEIgZXh0ZW5kcyBYQnJlYWtwb2ludDw/Pj4gZXh0ZW5kcyBOb2Rle30KK30KK2NsYXNzIE5vZGUge30KK2NsYXNzIFhCcmVha3BvaW50PFNSPnt9CisKK3B1YmxpYyBjbGFzcyBHZW5lcmljSW5uZXJDbGFzczxFPiB7CisgICAgcHJpdmF0ZSB2b2lkIHByb2JsZW0oIEJhc2UgYmFzZSApIHsKKyAgICAgICAgaWYgKCBiYXNlIGluc3RhbmNlb2YgRmlyc3QpIHt9CisgICAgfQorCisgICAgcHJpdmF0ZSBjbGFzcyBCYXNlIHsKKyAgICB9CisKKyAgICBwcml2YXRlIGNsYXNzIEZpcnN0PFQ+IGV4dGVuZHMgQmFzZSB7CisgICAgfQorCit9CisKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvZ2VuZXJpY3NIaWdobGlnaHRpbmcvSW1wbGVtZW50QW5ub3RhdGlvbi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9nZW5lcmljc0hpZ2hsaWdodGluZy9JbXBsZW1lbnRBbm5vdGF0aW9uLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmJlMWUzMAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvZ2VuZXJpY3NIaWdobGlnaHRpbmcvSW1wbGVtZW50QW5ub3RhdGlvbi5qYXZhCkBAIC0wLDAgKzEsMTUgQEAKK2ltcG9ydCBqYXZhLmxhbmcuYW5ub3RhdGlvbi5Bbm5vdGF0aW9uOworCitwdWJsaWMgQGludGVyZmFjZSBGb28geworICAgIFN0cmluZyBpZCgpOworfQorCitjbGFzcyBCYXIgaW1wbGVtZW50cyBGb28geworICAgIHB1YmxpYyBTdHJpbmcgaWQoKSB7CisgICAgICAgIHJldHVybiBudWxsOworICAgIH0KKworICAgIHB1YmxpYyBDbGFzczw/IGV4dGVuZHMgQW5ub3RhdGlvbj4gYW5ub3RhdGlvblR5cGUoKSB7CisgICAgICAgIHJldHVybiBudWxsOworICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvZ2VuZXJpY3NIaWdobGlnaHRpbmcvSW5hY2Nlc3NpYmxlVGhyb3VnaFdpbGRjYXJkLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2dlbmVyaWNzSGlnaGxpZ2h0aW5nL0luYWNjZXNzaWJsZVRocm91Z2hXaWxkY2FyZC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg0ZWE1NjEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2dlbmVyaWNzSGlnaGxpZ2h0aW5nL0luYWNjZXNzaWJsZVRocm91Z2hXaWxkY2FyZC5qYXZhCkBAIC0wLDAgKzEsMTMgQEAKK2NsYXNzIEphdmFjQ29uZmlndXJhdGlvbiB7CisgIHByaXZhdGUgZmluYWwgU3RyaW5nIG15U2V0dGluZ3MgPSAiIjsKKworICBwdWJsaWMgc3RhdGljIHZvaWQgZm9vKENsYXNzPD8gZXh0ZW5kcyBKYXZhY0NvbmZpZ3VyYXRpb24+IGFDbGFzcykgeworICAgIE9iamVjdCBvID0gZ2V0U2VydmljZShhQ2xhc3MpLjxlcnJvciBkZXNjcj0iJ215U2V0dGluZ3MnIGhhcyBwcml2YXRlIGFjY2VzcyBpbiAnSmF2YWNDb25maWd1cmF0aW9uJyI+bXlTZXR0aW5nczwvZXJyb3I+OworICAgIEphdmFjQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uID0gZ2V0U2VydmljZShhQ2xhc3MpOworICAgIFN0cmluZyBzdHJpbmcgPSBjb25maWd1cmF0aW9uLm15U2V0dGluZ3M7CisgIH0KKworICAgIHB1YmxpYyBzdGF0aWMgPFQ+IFQgZ2V0U2VydmljZShDbGFzczxUPiBzZXJ2aWNlQ2xhc3MpIHsKKyAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvZ2VuZXJpY3NIaWdobGlnaHRpbmcvSW5jb21wYXRpYmxlUmV0dXJuVHlwZS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9nZW5lcmljc0hpZ2hsaWdodGluZy9JbmNvbXBhdGlibGVSZXR1cm5UeXBlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzZjYzc2MQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvZ2VuZXJpY3NIaWdobGlnaHRpbmcvSW5jb21wYXRpYmxlUmV0dXJuVHlwZS5qYXZhCkBAIC0wLDAgKzEsMjAgQEAKK2Fic3RyYWN0IGNsYXNzIEY8QSwgQj4geworICBwdWJsaWMgYWJzdHJhY3QgQiBmKEEgYSk7CisKKyAgcHVibGljIGZpbmFsIEY8QSwgUDE8Qj4+IGxhenkoKSB7CisgICAgcmV0dXJuIG5ldyBGPEEsIFAxPEI+PigpIHsKKyAgICAgIHB1YmxpYyBQMTxCPiBmKGZpbmFsIEEgYSkgeworICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgIH0KKyAgICB9OworICB9CisKKyAgcHJpdmF0ZSBjbGFzcyBUZXN0Q2xpZW50PEEsIEI+IGV4dGVuZHMgRjxBLCBQMTxCPj4geworICAgIHB1YmxpYyBQMTxCPiBmKGZpbmFsIEEgYSkgeworICAgICAgcmV0dXJuIG51bGw7CisgICAgfQorICB9Cit9CisKK2NsYXNzIFAxPFQ+IHsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2dlbmVyaWNzSGlnaGxpZ2h0aW5nL0luY29udmVydGlibGVUeXBlcy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9nZW5lcmljc0hpZ2hsaWdodGluZy9JbmNvbnZlcnRpYmxlVHlwZXMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMDYzODlmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9nZW5lcmljc0hpZ2hsaWdodGluZy9JbmNvbnZlcnRpYmxlVHlwZXMuamF2YQpAQCAtMCwwICsxLDggQEAKK2ltcG9ydCBqYXZhLnV0aWwuKjsKKworY2xhc3MgVGVzdCB7CisgIHZvaWQgZm9vKCl7CisgICAgUHJvcGVydGllcyBwcm9wZXJ0aWVzID0gU3lzdGVtLmdldFByb3BlcnRpZXMoKTsKKyAgICBmaW5hbCBNYXA8U3RyaW5nLCBTdHJpbmc+IHN5c3RlbVByb3BlcnRpZXMgPSA8ZXJyb3IgZGVzY3I9IkluY29udmVydGlibGUgdHlwZXM7IGNhbm5vdCBjYXN0ICdqYXZhLnV0aWwuUHJvcGVydGllcycgdG8gJ2phdmEudXRpbC5NYXA8amF2YS5sYW5nLlN0cmluZyxqYXZhLmxhbmcuU3RyaW5nPiciPihNYXA8U3RyaW5nLCBTdHJpbmc+KSBwcm9wZXJ0aWVzPC9lcnJvcj47CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2dlbmVyaWNzSGlnaGxpZ2h0aW5nL0luZmVyZW5jZVdpdGhCb3VuZHMuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvZ2VuZXJpY3NIaWdobGlnaHRpbmcvSW5mZXJlbmNlV2l0aEJvdW5kcy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJmZGI4YzUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2dlbmVyaWNzSGlnaGxpZ2h0aW5nL0luZmVyZW5jZVdpdGhCb3VuZHMuamF2YQpAQCAtMCwwICsxLDYxIEBACitpbXBvcnQgamF2YS51dGlsLio7CisKK2NsYXNzIENMUyB7CisgICAgc3RhdGljIDxWIGV4dGVuZHMgU3RyaW5nPiAgdm9pZCBiYXIgKFYgdikge30KKworICAgIHN0YXRpYyB2b2lkIGZvbyAoKSB7CisgICAgICAgIGJhcjxlcnJvciBkZXNjcj0iJ2JhcihqYXZhLmxhbmcuU3RyaW5nKScgaW4gJ0NMUycgY2Fubm90IGJlIGFwcGxpZWQgdG8gJyhqYXZhLmxhbmcuT2JqZWN0KSciPihuZXcgT2JqZWN0KCkpPC9lcnJvcj47CisgICAgfQorfQorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCitwdWJsaWMgYWJzdHJhY3QgY2xhc3MgWlpaPEs+IHsKKyAgcHVibGljIGFic3RyYWN0IDxUIGV4dGVuZHMgU3RyaW5nPiBaWlo8VD4gZ2V0KCk7Cit9CitjbGFzcyBaMjxLPiBleHRlbmRzIFpaWjxLPiB7CisgICAgcHVibGljIDxUIGV4dGVuZHMgU3RyaW5nPiBaMjxUPiBnZXQoKSB7CisgICAgICAgIHJldHVybiBudWxsOworICAgIH0KKyAgICB2b2lkIGYoKSB7CisgICAgICAgIFoyIHoyID0gZ2V0KCk7CisgICAgfQorfQorLy8vLy8vLy8vLy8vLy8vLy8KK2Fic3RyYWN0IGNsYXNzIExlYXN0UmVjZW50bHlVc2VkQ2FjaGUgeworaW50ZXJmYWNlIENhbGxhYmxlPFY+IHsKKyAgICBWIGNhbGwoKSB0aHJvd3MgRXhjZXB0aW9uOworfQorCisgICAgPEUgZXh0ZW5kcyBBPiBDYWxsYWJsZTxFPiBlKEUgZSkgeworICAgICAgICByZXR1cm4gbnVsbDsKKyAgICB9CisgICAgPFQgZXh0ZW5kcyBCPiBDYWxsYWJsZTxUPiBmKGJvb2xlYW4gYiwgZmluYWwgVCB0KSB7CisgICAgICAgIHJldHVybiBiID8gZSh0KSA6IG5ldyBDYWxsYWJsZTxUPigpIHsKKyAgICAgICAgICAgIHB1YmxpYyBUIGNhbGwoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gdDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfTsKKyAgICB9CisKKyAgICB2b2lkIGZmKCkgeworCisgICAgfQorCisgICAgY2xhc3MgQSB7fQorICAgIGNsYXNzIEIgZXh0ZW5kcyBBIHt9Cit9CisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworcHVibGljIGNsYXNzIEJhZENvZGVHcmVlbjxULCBDIGV4dGVuZHMgQ29sbGVjdGlvbjw/IGV4dGVuZHMgVD4+IHsKKyAgICBwdWJsaWMgQmFkQ29kZUdyZWVuKEMgYywgVCB0KSB7CisgICAgICAgIGMuYWRkPGVycm9yIGRlc2NyPSInYWRkKGNhcHR1cmU8PyBleHRlbmRzIFQ+KScgaW4gJ2phdmEudXRpbC5Db2xsZWN0aW9uJyBjYW5ub3QgYmUgYXBwbGllZCB0byAnKFQpJyI+KHQpPC9lcnJvcj47CisgICAgfQorfQorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworYWJzdHJhY3QgY2xhc3MgQSB7CisgICAgcHVibGljIGFic3RyYWN0IDxUIGV4dGVuZHMgTGlzdDw/Pj4gVCBjcmVhdGUoKTsKK30KK2NsYXNzIEIgZXh0ZW5kcyBBIHsKKyAgICBwdWJsaWMgPFQgZXh0ZW5kcyBMaXN0PD8+PiBUIGNyZWF0ZSgpIHsKKyAgICAgICAgcmV0dXJuIG51bGw7CisgICAgfQorfQorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9nZW5lcmljc0hpZ2hsaWdodGluZy9JbmZlcmVuY2VXaXRoQm94aW5nQ292YXJpYW50LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2dlbmVyaWNzSGlnaGxpZ2h0aW5nL0luZmVyZW5jZVdpdGhCb3hpbmdDb3ZhcmlhbnQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNzhmODkzNAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvZ2VuZXJpY3NIaWdobGlnaHRpbmcvSW5mZXJlbmNlV2l0aEJveGluZ0NvdmFyaWFudC5qYXZhCkBAIC0wLDAgKzEsMTYgQEAKK2ltcG9ydCBqYXZhLnV0aWwuKjsKKworY2xhc3MgVGVzdCB7CisgIHN0YXRpYyBjbGFzcyBQYWlyPEEsIEI+IHsKKyAgICBQYWlyKEEgYSwgQiBiKSB7CisgICAgfQorCisgICAgc3RhdGljIDxBLCBCPiBQYWlyPEEsIEI+IGNyZWF0ZShBIGEsIEIgYikgeworICAgICAgcmV0dXJuIG5ldyBQYWlyPEEsIEI+KGEsIGIpOworICAgIH0KKyAgfQorCisgIHB1YmxpYyBzdGF0aWMgdm9pZCBnZXRXb3Jkc1dpdGhPZmZzZXQoU3RyaW5nIHMsIGludCBzdGFydEluZCwgZmluYWwgTGlzdDxQYWlyPFN0cmluZywgSW50ZWdlcj4+IHJlcykgeworICAgIHJlcy5hZGQoUGFpci5jcmVhdGUocywgc3RhcnRJbmQpKTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvZ2VuZXJpY3NIaWdobGlnaHRpbmcvSW5mZXJlbmNlV2l0aFN1cGVyQm91bmRzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2dlbmVyaWNzSGlnaGxpZ2h0aW5nL0luZmVyZW5jZVdpdGhTdXBlckJvdW5kcy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ2OGY5MDcKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2dlbmVyaWNzSGlnaGxpZ2h0aW5nL0luZmVyZW5jZVdpdGhTdXBlckJvdW5kcy5qYXZhCkBAIC0wLDAgKzEsMTYgQEAKK3B1YmxpYyBjbGFzcyBFeGFtcGxlUHJvYmxlbSB7CisgICAgPFQ+IHZvaWQgYXNzZXJ0aW5nKFQgdCwgU2ltcGxlPFQ+IGwpeworICAgIH0KKworICAgIDxLPiBTaW1wbGU8PyBzdXBlciBLPiBjb21wKEsgayl7CisgICAgICAgIHJldHVybiBudWxsOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworICAgICAgICBhc3NlcnRpbmcoMCwgY29tcCgwKSk7CisgICAgfQorfQorCitjbGFzcyBTaW1wbGU8U1NUPnsKKworfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9nZW5lcmljc0hpZ2hsaWdodGluZy9JbmZlcmVuY2VXaXRoVXBwZXJCb3VuZFByb21vdGlvbi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9nZW5lcmljc0hpZ2hsaWdodGluZy9JbmZlcmVuY2VXaXRoVXBwZXJCb3VuZFByb21vdGlvbi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgyYTJhNjgKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2dlbmVyaWNzSGlnaGxpZ2h0aW5nL0luZmVyZW5jZVdpdGhVcHBlckJvdW5kUHJvbW90aW9uLmphdmEKQEAgLTAsMCArMSwzMCBAQAorCitwdWJsaWMgY2xhc3MgTmVzdGVkR2VuZXJpY0dvb2RDb2RlSXNSZWQgeworCisgICAgcHVibGljIHZvaWQgbWFpbiggU3RyaW5nW10gYXJncyApIHsKKyAgICAgICAgc2F0aXNmaWVzQWxsT2YoaXNQb3NpdGl2ZSgpLCBpc0VxdWFsVG8oMTAuOSkpOworICAgICAgICBzYXRpc2ZpZXNBbGxPZihpc1Bvc2l0aXZlKCksIGlzRXF1YWxUbygxMCkpOworCisgICAgICAgIE51bWJlciBudW0gPSBudWxsOworICAgICAgICBzYXRpc2ZpZXNBbGxPZihpc1Bvc2l0aXZlKCksIGlzRXF1YWxUbyhudW0pKTsKKworICAgICAgICB0aGlzLjxOdW1iZXI+c2F0aXNmaWVzQWxsT2Y8ZXJyb3IgZGVzY3I9IidzYXRpc2ZpZXNBbGxPZihOZXN0ZWRHZW5lcmljR29vZENvZGVJc1JlZC5QcmVkaWNhdGU8PyBzdXBlciBqYXZhLmxhbmcuTnVtYmVyPiwgTmVzdGVkR2VuZXJpY0dvb2RDb2RlSXNSZWQuUHJlZGljYXRlPD8gc3VwZXIgamF2YS5sYW5nLk51bWJlcj4pJyBpbiAnTmVzdGVkR2VuZXJpY0dvb2RDb2RlSXNSZWQnIGNhbm5vdCBiZSBhcHBsaWVkIHRvICcoTmVzdGVkR2VuZXJpY0dvb2RDb2RlSXNSZWQuUHJlZGljYXRlPGphdmEubGFuZy5OdW1iZXI+LCBOZXN0ZWRHZW5lcmljR29vZENvZGVJc1JlZC5QcmVkaWNhdGU8amF2YS5sYW5nLkludGVnZXI+KSciPihpc1Bvc2l0aXZlKCksIGlzRXF1YWxUbygxMCkpPC9lcnJvcj47CisgICAgfQorCisKKyAgICBwdWJsaWMgaW50ZXJmYWNlIFByZWRpY2F0ZTxUPiB7CisKKyAgICB9CisKKyAgICBwdWJsaWMgIDxBTEw+IHZvaWQgc2F0aXNmaWVzQWxsT2YoIFByZWRpY2F0ZTw/IHN1cGVyIEFMTD4gZmlyc3QsIFByZWRpY2F0ZTw/IHN1cGVyIEFMTD4gc2Vjb25kICkgeworICAgIH0KKworICAgIHB1YmxpYyAgPFBPU0lUSVZFIGV4dGVuZHMgTnVtYmVyPiBQcmVkaWNhdGU8UE9TSVRJVkU+IGlzUG9zaXRpdmUoKSB7CisgICAgICAgIHJldHVybiBudWxsOworICAgIH0KKworICAgIHB1YmxpYyA8RVFVQUxUTyBleHRlbmRzIE51bWJlcj4gUHJlZGljYXRlPEVRVUFMVE8+IGlzRXF1YWxUbyggRVFVQUxUTyB0YXJnZXQgKSB7CisgICAgICAgIHJldHVybiBudWxsOworICAgIH0KKworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvZ2VuZXJpY3NIaWdobGlnaHRpbmcvSW5oZXJpdEZyb21UeXBlUGFyYW1ldGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2dlbmVyaWNzSGlnaGxpZ2h0aW5nL0luaGVyaXRGcm9tVHlwZVBhcmFtZXRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNmOWMyNmMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2dlbmVyaWNzSGlnaGxpZ2h0aW5nL0luaGVyaXRGcm9tVHlwZVBhcmFtZXRlci5qYXZhCkBAIC0wLDAgKzEsMiBAQAorY2xhc3MgQzxUPiBleHRlbmRzIDxlcnJvciBkZXNjcj0iQ2xhc3MgY2Fubm90IGluaGVyaXQgZnJvbSBpdHMgdHlwZSBwYXJhbWV0ZXIiPlQ8L2Vycm9yPgore30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2dlbmVyaWNzSGlnaGxpZ2h0aW5nL0lubmVyQ2xhc3NSZWYuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvZ2VuZXJpY3NIaWdobGlnaHRpbmcvSW5uZXJDbGFzc1JlZi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI3ZWZiODMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2dlbmVyaWNzSGlnaGxpZ2h0aW5nL0lubmVyQ2xhc3NSZWYuamF2YQpAQCAtMCwwICsxLDE5IEBACitpbXBvcnQgamF2YS51dGlsLio7CitpbXBvcnQgTm9kZS5EZXRhaWxzOworCitwdWJsaWMgY2xhc3MgTm9kZTxFPiB7CisgICAgcHVibGljIGNsYXNzIERldGFpbHMgeworICAgICAgICBwdWJsaWMgRSBkYXRhOworICAgIH0KKyAgICBwdWJsaWMgRGV0YWlscyBhZGROb2RlKE5vZGU8RT4gY2hpbGQpIHsKKyAgICAgICAgcmV0dXJuIG5ldyBEZXRhaWxzKCk7CisgICAgfQorfQorCitjbGFzcyBUZXN0IHsKKyAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworICAgICBNYXA8U3RyaW5nLCBEZXRhaWxzPiBtID0gbnVsbDsKKyAgICAgTWFwPFN0cmluZywgTm9kZS5EZXRhaWxzPiBzb3J0ZWQxOworICAgICBzb3J0ZWQxID0gbTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvZ2VuZXJpY3NIaWdobGlnaHRpbmcvSW5zdGFuY2VDbGFzc0luU3RhdGljQ29udGV4dEFjY2Vzcy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9nZW5lcmljc0hpZ2hsaWdodGluZy9JbnN0YW5jZUNsYXNzSW5TdGF0aWNDb250ZXh0QWNjZXNzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGNmYWQ1NmIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2dlbmVyaWNzSGlnaGxpZ2h0aW5nL0luc3RhbmNlQ2xhc3NJblN0YXRpY0NvbnRleHRBY2Nlc3MuamF2YQpAQCAtMCwwICsxLDYyIEBACitjbGFzcyBNeVRlc3Q8Sz4geworCisgICAgY2xhc3MgQTxUPiB7CisgICAgfQorCisgICAgLy9ub3QgYW4gZXJyb3IgaW4gamF2YSA4PyEKKyAgICBzdGF0aWMgY2xhc3MgQzxUIGV4dGVuZHMgPGVycm9yIGRlc2NyPSInTXlUZXN0LnRoaXMnIGNhbm5vdCBiZSByZWZlcmVuY2VkIGZyb20gYSBzdGF0aWMgY29udGV4dCI+QTxTdHJpbmc+PC9lcnJvcj4+IHsKKyAgICB9CisKKyAgICBzdGF0aWMgPFQgZXh0ZW5kcyA8ZXJyb3IgZGVzY3I9IidNeVRlc3QudGhpcycgY2Fubm90IGJlIHJlZmVyZW5jZWQgZnJvbSBhIHN0YXRpYyBjb250ZXh0Ij5BPFN0cmluZz48L2Vycm9yPj4gdm9pZCBiYXIoKSB7CisgICAgfQorCisgICAgc3RhdGljIGNsYXNzIEIgeworICAgICAgICB7CisgICAgICAgICAgICBCLjw8ZXJyb3IgZGVzY3I9IidNeVRlc3QudGhpcycgY2Fubm90IGJlIHJlZmVyZW5jZWQgZnJvbSBhIHN0YXRpYyBjb250ZXh0Ij5BPC9lcnJvcj4+YmFyKCk7CisgICAgICAgICAgICA8ZXJyb3IgZGVzY3I9IidNeVRlc3QudGhpcycgY2Fubm90IGJlIHJlZmVyZW5jZWQgZnJvbSBhIHN0YXRpYyBjb250ZXh0Ij5BPC9lcnJvcj4gYTsKKyAgICAgICAgfQorCisgICAgICAgIHN0YXRpYyA8VCBleHRlbmRzIDxlcnJvciBkZXNjcj0iJ015VGVzdC50aGlzJyBjYW5ub3QgYmUgcmVmZXJlbmNlZCBmcm9tIGEgc3RhdGljIGNvbnRleHQiPkE8U3RyaW5nPjwvZXJyb3I+PiB2b2lkIGJhcigpIHsKKyAgICAgICAgfQorCisgICAgICAgIHZvaWQgdihDPDxlcnJvciBkZXNjcj0iJ015VGVzdC50aGlzJyBjYW5ub3QgYmUgcmVmZXJlbmNlZCBmcm9tIGEgc3RhdGljIGNvbnRleHQiPkE8U3RyaW5nPjwvZXJyb3I+PiBjKSB7CisgICAgICAgIH0KKyAgICB9Cit9CisKK2NsYXNzIE15VGVzdDEgeworCisgICAgY2xhc3MgQTxUPiB7CisgICAgfQorCisgICAgc3RhdGljIGNsYXNzIEM8VCBleHRlbmRzIEE8U3RyaW5nPj4geworICAgIH0KKworICAgIHN0YXRpYyA8VCBleHRlbmRzIEE8U3RyaW5nPj4gdm9pZCBiYXIoKSB7CisgICAgfQorCisgICAgc3RhdGljIGNsYXNzIEIgeworICAgICAgICB7CisgICAgICAgICAgICBCLjxBPmJhcigpOworICAgICAgICAgICAgQSBhID0gPGVycm9yIGRlc2NyPSInTXlUZXN0MS50aGlzJyBjYW5ub3QgYmUgcmVmZXJlbmNlZCBmcm9tIGEgc3RhdGljIGNvbnRleHQiPm5ldyBBKCk8L2Vycm9yPjsKKyAgICAgICAgfQorCisgICAgICAgIHN0YXRpYyA8VCBleHRlbmRzIEE8U3RyaW5nPj4gdm9pZCBiYXIoKSB7CisgICAgICAgIH0KKworICAgICAgICB2b2lkIHYoQzxBPFN0cmluZz4+IGMpIHsKKyAgICAgICAgfQorICAgIH0KK30KKworY2xhc3MgTXlUZXN0MjxUPiB7CisgICAgc3RhdGljIGNsYXNzIEEgeworICAgICAgcHJpdmF0ZSBNeVRlc3QyIG15VGVzdDsKKyAgCisgICAgICBwdWJsaWMgT2JqZWN0IGZvbygpIHsKKyAgICAgICAgcmV0dXJuIG15VGVzdC5uZXcgQmFyKCk7CisgICAgICB9CisgICAgfQorCisgICAgY2xhc3MgQmFyIHt9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2dlbmVyaWNzSGlnaGxpZ2h0aW5nL0ludGVyc2VjdGlvblR5cGVzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2dlbmVyaWNzSGlnaGxpZ2h0aW5nL0ludGVyc2VjdGlvblR5cGVzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTE5N2JmMAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvZ2VuZXJpY3NIaWdobGlnaHRpbmcvSW50ZXJzZWN0aW9uVHlwZXMuamF2YQpAQCAtMCwwICsxLDE4MSBAQAoraW1wb3J0IGphdmEuaW8uKjsKK2ltcG9ydCBqYXZhLnV0aWwuKjsKKworY2xhc3MgVGVzdCB7CisgICAgPFQ+IExpc3Q8VD4gYXNMaXN0IChULi4uIHRzKSB7CisgICAgICB0cy5oYXNoQ29kZSgpOworICAgICAgcmV0dXJuIG51bGw7CisgICAgfQorCisgICAgdm9pZCBmb28oKSB7CisgICAgICAgIDxlcnJvciBkZXNjcj0iSW5jb21wYXRpYmxlIHR5cGVzLiBGb3VuZDogJ2phdmEudXRpbC5MaXN0PGphdmEubGFuZy5DbGFzczw/IGV4dGVuZHMgamF2YS5pby5TZXJpYWxpemFibGUgJiBqYXZhLmxhbmcuQ29tcGFyYWJsZTw/Pj4+JywgcmVxdWlyZWQ6ICdqYXZhLnV0aWwuTGlzdDxqYXZhLmxhbmcuQ2xhc3M8PyBleHRlbmRzIGphdmEuaW8uU2VyaWFsaXphYmxlPj4nIj5MaXN0PENsYXNzPD8gZXh0ZW5kcyBTZXJpYWxpemFibGU+PiBsID0gPHdhcm5pbmcgZGVzY3I9IlVuY2hlY2tlZCBnZW5lcmljcyBhcnJheSBjcmVhdGlvbiBmb3IgdmFyYXJncyBwYXJhbWV0ZXIiPnRoaXMuYXNMaXN0PC93YXJuaW5nPihTdHJpbmcuY2xhc3MsIEludGVnZXIuY2xhc3MpOzwvZXJyb3I+CisgICAgICAgIGwuc2l6ZSgpOworICAgICAgICBMaXN0PD8gZXh0ZW5kcyBPYmplY3Q+IG9iamVjdHMgPSB0aGlzLmFzTGlzdChuZXcgU3RyaW5nKCksIG5ldyBJbnRlZ2VyKDApKTsKKyAgICAgICAgb2JqZWN0cy5zaXplKCk7CisgICAgfQorfQorCisvL1NVTiBCVUcgSUQgNTAzNDU3MQoraW50ZXJmYWNlIEkxIHsKKyAgICB2b2lkIGkxKCk7Cit9CisKK2NsYXNzIEcxIDxUIGV4dGVuZHMgSTE+IHsKKyAgICBUIGdldCgpIHsgcmV0dXJuIG51bGw7IH0KK30KKworaW50ZXJmYWNlIEkyIHsKKyAgICB2b2lkIGkyKCk7Cit9CisKK2NsYXNzIE1haW4geworICAgIHZvaWQgZjIoRzE8PyBleHRlbmRzIEkyPiBnMSkgeworICAgICAgICBnMS5nZXQoKS5pMSgpOyAvLyB0aGlzIHNob3VsZCBiZSBPSworICAgICAgICBnMS5nZXQoKS5pMigpOyAvLyB0aGlzIHNob3VsZCBhbHNvIGJlIE9LCisgICAgfQorfQorCisvL0lERUFERVY0MjAwOiB0aGlzIGNvZGUgaXMgT0sKK2ludGVyZmFjZSBJMTEgeworICAgIFN0cmluZyBpMSgpOworfQorCitpbnRlcmZhY2UgSTIxIHsKKyAgICBTdHJpbmcgaTIoKTsKK30KKworaW50ZXJmYWNlIEE8VD4geworICAgIFQgc29tZSgpOworfQorCitpbnRlcmZhY2UgQjxUIGV4dGVuZHMgSTExICYgSTIxPiBleHRlbmRzIEE8VD4geworCit9CisKK2NsYXNzIFVzZXIgeworCisgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oQjw/PiB0ZXN0KSB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbih0ZXN0LnNvbWUoKS5pMSgpKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKHRlc3Quc29tZSgpLmkyKCkpOworICAgIH0KK30KKy8qCisgKiBDb3B5cmlnaHQgMjAwMC0yMDExIEpldEJyYWlucyBzLnIuby4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKy8vZW5kIG9mIElERUFERVY0MjAwCisKKy8vSURFQURFVi00MjE0CitpbnRlcmZhY2UgS2V5YWJsZTxLPiB7CisgICAgLyoqCisgICAgICogQHJldHVybiB0aGUga2V5IGZvciB0aGUgaW5zdGFuY2UuCisgICAgICovCisgICAgcHVibGljIEsgZ2V0S2V5KCk7Cit9CisKK2Fic3RyYWN0IGNsYXNzIERhdGUgaW1wbGVtZW50cyBqYXZhLmlvLlNlcmlhbGl6YWJsZSwgQ2xvbmVhYmxlLCBDb21wYXJhYmxlPERhdGU+IHsKKworfQorCitjbGFzcyBNYXBzIHsKKyAgICBwdWJsaWMgc3RhdGljIGNsYXNzIE1hcEVudHJ5PEssIFY+IGltcGxlbWVudHMgTWFwLkVudHJ5PEssIFY+IHsKKyAgICAgICAgSyBrOworICAgICAgICBWIHY7CisKKyAgICAgICAgcHVibGljIEsgZ2V0S2V5KCkgeworICAgICAgICAgICAgcmV0dXJuIGs7CisgICAgICAgIH0KKworICAgICAgICBwdWJsaWMgViBnZXRWYWx1ZSgpIHsKKyAgICAgICAgICAgIHJldHVybiB2OworICAgICAgICB9CisKKyAgICAgICAgcHVibGljIFYgc2V0VmFsdWUoViB2YWx1ZSkgeworICAgICAgICAgICAgcmV0dXJuIHYgPSB2YWx1ZTsKKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyBNYXBFbnRyeShLIGssIFYgdikgeworICAgICAgICAgICAgdGhpcy5rID0gazsKKyAgICAgICAgICAgIHRoaXMudiA9IHY7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwdWJsaWMgc3RhdGljIDxLLCBWPiBNYXAuRW50cnk8SywgVj4gZW50cnkoSyBrZXksIFYgdmFsdWUpIHsKKyAgICAgICAgcmV0dXJuIG5ldyBNYXBFbnRyeTxLLCBWPihrZXksIHZhbHVlKTsKKyAgICB9CisKKyAgICBwdWJsaWMgc3RhdGljIDxLLCBWPiBNYXA8SywgVj4gYXNNYXAoTWFwLkVudHJ5PD8gZXh0ZW5kcyBLLCA/IGV4dGVuZHMgVj4gLi4uIDx3YXJuaW5nIGRlc2NyPSJQYXJhbWV0ZXIgJ2VudHJpZXMnIGlzIG5ldmVyIHVzZWQiPmVudHJpZXM8L3dhcm5pbmc+KSB7CisgICAgICAgIHJldHVybiBudWxsOworICAgIH0KKworICAgIHB1YmxpYyBzdGF0aWMgPEssIFYgZXh0ZW5kcyBLZXlhYmxlPEs+PiBNYXA8SywgVj4gYXNNYXAoViAuLi4gPHdhcm5pbmcgZGVzY3I9IlBhcmFtZXRlciAnZW50cmllcycgaXMgbmV2ZXIgdXNlZCI+ZW50cmllczwvd2FybmluZz4pIHsKKyAgICAgICAgcmV0dXJuIG51bGw7CisgICAgfQorfQorCitjbGFzcyBDbGllbnQgeworICAgIHZvaWQgZihEYXRlIGQpIHsKKyAgICAgICAgLy90aGlzIGNhbGwgc2hvdWxkIGJlIE9LCisgICAgICAgIDx3YXJuaW5nIGRlc2NyPSJVbmNoZWNrZWQgZ2VuZXJpY3MgYXJyYXkgY3JlYXRpb24gZm9yIHZhcmFyZ3MgcGFyYW1ldGVyIj5NYXBzLmFzTWFwPC93YXJuaW5nPihNYXBzLmVudHJ5KGZpZWxkTmFtZSgpLCAiVGVzdCIpLAorICAgICAgICAgICAgICAgICAgIE1hcHMuZW50cnkoZmllbGROYW1lKCksIDEpLAorICAgICAgICAgICAgICAgICAgIE1hcHMuZW50cnkoZmllbGROYW1lKCksIGQpKTsKKyAgICB9CisKKyAgICBTdHJpbmcgZmllbGROYW1lKCkgeworICAgICAgICByZXR1cm4gbnVsbDsKKyAgICB9Cit9CisvL2VuZCBvZiBJREVBREVWLTQyMTQKKworY2xhc3MgSURFQURFVjI1NTE1IHsKKyAgICBzdGF0aWMgPFQ+IExpc3Q8VD4gYXNMaXN0IChULi4uIHRzKSB7CisgICAgICB0cy5oYXNoQ29kZSgpOworICAgICAgcmV0dXJuIG51bGw7CisgICAgfQorCisgICAgcHVibGljIHN0YXRpYyBmaW5hbAorICAgIDxlcnJvciBkZXNjcj0iSW5jb21wYXRpYmxlIHR5cGVzLiBGb3VuZDogJ2phdmEudXRpbC5MaXN0PGphdmEubGFuZy5DbGFzczw/IGV4dGVuZHMgamF2YS5pby5TZXJpYWxpemFibGUgJiBqYXZhLmxhbmcuQ29tcGFyYWJsZTw/Pj4+JywgcmVxdWlyZWQ6ICdqYXZhLnV0aWwuTGlzdDxqYXZhLmxhbmcuQ2xhc3M8PyBleHRlbmRzIGphdmEuaW8uU2VyaWFsaXphYmxlPj4nIj5MaXN0PENsYXNzPD8gZXh0ZW5kcyBTZXJpYWxpemFibGU+PiBTSU1QTEVfVFlQRVMgPQorPHdhcm5pbmcgZGVzY3I9IlVuY2hlY2tlZCBnZW5lcmljcyBhcnJheSBjcmVhdGlvbiBmb3IgdmFyYXJncyBwYXJhbWV0ZXIiPmFzTGlzdDwvd2FybmluZz4oU3RyaW5nLmNsYXNzLCBJbnRlZ2VyLmNsYXNzICxMb25nLmNsYXNzLCBEb3VibGUuY2xhc3MsIC8qRGF0ZS5jbGFzcywqLworQm9vbGVhbi5jbGFzcywgQm9vbGVhbi5UWVBFIC8qLFN0cmluZ1tdLmNsYXNzICovIC8qLEJpZ0RlY2ltYWwuY2xhc3MqLyk7PC9lcnJvcj4KKworCisgICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIExpc3Q8Q2xhc3M8PyBleHRlbmRzIFNlcmlhbGl6YWJsZT4+IFNJTVBMRV9UWVBFU19JTkZFUlJFRCA9CisgIDx3YXJuaW5nIGRlc2NyPSJVbmNoZWNrZWQgZ2VuZXJpY3MgYXJyYXkgY3JlYXRpb24gZm9yIHZhcmFyZ3MgcGFyYW1ldGVyIj5hc0xpc3Q8L3dhcm5pbmc+KFN0cmluZy5jbGFzcywgSW50ZWdlci5jbGFzcyAsTG9uZy5jbGFzcywgRG91YmxlLmNsYXNzLCAvKkRhdGUuY2xhc3MsKi8KKyAgQm9vbGVhbi5jbGFzcywgQm9vbGVhbi5UWVBFICxTdHJpbmdbXS5jbGFzcyAgLyosQmlnRGVjaW1hbC5jbGFzcyovKTsKKworCit9CisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworY2xhc3MgQXh4IHsKKyAgPFQgZXh0ZW5kcyBSdW5uYWJsZT4gVCBhKCkgeworICAgIDxlcnJvciBkZXNjcj0iSW5jb21wYXRpYmxlIHR5cGVzLiBGb3VuZDogJ2phdmEubGFuZy5SdW5uYWJsZScsIHJlcXVpcmVkOiAnamF2YS5sYW5nLlN0cmluZyciPlN0cmluZyBzID0gYSgpOzwvZXJyb3I+CisgICAgcy5oYXNoQ29kZSgpOworICAgIHJldHVybiBudWxsOworICB9Cit9CisvLy8vLy8vLy8vLy8vLy8KK2ludGVyZmFjZSBMIHt9CitwdWJsaWMgY2xhc3MgTWF4aW1hbFR5cGUgIHsKKyAgICBwdWJsaWMgc3RhdGljIDxUPiBUIGdldFBhcmVudE9mVHlwZShDbGFzczw/IGV4dGVuZHMgVD4uLi4gY2xhc3NlcykgeworICAgICAgIGNsYXNzZXMuaGFzaENvZGUoKTsKKyAgICAgICByZXR1cm4gbnVsbDsKKyAgICB9CisgICAgeworICAgICAgICA8d2FybmluZyBkZXNjcj0iVW5jaGVja2VkIGdlbmVyaWNzIGFycmF5IGNyZWF0aW9uIGZvciB2YXJhcmdzIHBhcmFtZXRlciI+Z2V0UGFyZW50T2ZUeXBlPC93YXJuaW5nPihNMi5jbGFzcywgTS5jbGFzcyk7CisgICAgfQorfQorY2xhc3MgTSBleHRlbmRzIE1heGltYWxUeXBlIGltcGxlbWVudHMgTHt9CitjbGFzcyBNMiBleHRlbmRzIE1heGltYWxUeXBlIGltcGxlbWVudHMgTHt9CisvLy8vLy8vLy8vLy8vCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2dlbmVyaWNzSGlnaGxpZ2h0aW5nL01ldGhvZENhbGxQYXJhbXNPblJhd1R5cGUuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvZ2VuZXJpY3NIaWdobGlnaHRpbmcvTWV0aG9kQ2FsbFBhcmFtc09uUmF3VHlwZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUzOTllNWEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2dlbmVyaWNzSGlnaGxpZ2h0aW5nL01ldGhvZENhbGxQYXJhbXNPblJhd1R5cGUuamF2YQpAQCAtMCwwICsxLDMyIEBACitjbGFzcyBUZXN0T25SYXdUeXBlIHsKKyAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworICAgIG5ldyBGb29HZW5lcmF0b3IoKS5wcm9jZXNzKFRlc3RPblJhd1R5cGUuY2xhc3MpOworICAgIG5ldyBGb29HZW5lcmF0b3IoKS5wcm9jZXNzKEFGb28uY2xhc3MpOworICAgIG5ldyBGb29HZW5lcmF0b3IoKS5wcm9jZXNzKE1Gb28uY2xhc3MpOworICAgIG5ldyBGb29HZW5lcmF0b3I8U3RyaW5nPigpLnByb2Nlc3M8ZXJyb3IgZGVzY3I9Iidwcm9jZXNzKGphdmEubGFuZy5DbGFzczxUZXN0T25SYXdUeXBlLkFGb28+KScgaW4gJ1Rlc3RPblJhd1R5cGUuRm9vR2VuZXJhdG9yJyBjYW5ub3QgYmUgYXBwbGllZCB0byAnKGphdmEubGFuZy5DbGFzczxUZXN0T25SYXdUeXBlPiknIj4oVGVzdE9uUmF3VHlwZS5jbGFzcyk8L2Vycm9yPjsKKyAgICBuZXcgRm9vR2VuZXJhdG9yPFN0cmluZz4oKS5wcm9jZXNzKEFGb28uY2xhc3MpOworICAgIG5ldyBGb29HZW5lcmF0b3I8U3RyaW5nPigpLnByb2Nlc3M8ZXJyb3IgZGVzY3I9Iidwcm9jZXNzKGphdmEubGFuZy5DbGFzczxUZXN0T25SYXdUeXBlLkFGb28+KScgaW4gJ1Rlc3RPblJhd1R5cGUuRm9vR2VuZXJhdG9yJyBjYW5ub3QgYmUgYXBwbGllZCB0byAnKGphdmEubGFuZy5DbGFzczxUZXN0T25SYXdUeXBlLk1Gb28+KSciPihNRm9vLmNsYXNzKTwvZXJyb3I+OworICB9CisKKyAgc3RhdGljIGNsYXNzIEFGb28ge30KKyAgc3RhdGljIGNsYXNzIE1Gb28gZXh0ZW5kcyBBRm9vIHt9CisgIHN0YXRpYyBjbGFzcyBGb29HZW5lcmF0b3I8VD4geworICAgIHB1YmxpYyB2b2lkIHByb2Nlc3MoQ2xhc3M8QUZvbz4gY2xzKSB7CisgICAgfQorICB9Cit9CisKK2NsYXNzIFRlc3ROb25HZW5lcmljVHlwZSB7CisgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKyAgICBuZXcgRm9vR2VuZXJhdG9yKCkucHJvY2VzczxlcnJvciBkZXNjcj0iJ3Byb2Nlc3MoamF2YS5sYW5nLkNsYXNzPFRlc3ROb25HZW5lcmljVHlwZS5BRm9vPiknIGluICdUZXN0Tm9uR2VuZXJpY1R5cGUuRm9vR2VuZXJhdG9yJyBjYW5ub3QgYmUgYXBwbGllZCB0byAnKGphdmEubGFuZy5DbGFzczxUZXN0Tm9uR2VuZXJpY1R5cGU+KSciPihUZXN0Tm9uR2VuZXJpY1R5cGUuY2xhc3MpPC9lcnJvcj47CisgICAgbmV3IEZvb0dlbmVyYXRvcigpLnByb2Nlc3MoQUZvby5jbGFzcyk7CisgICAgbmV3IEZvb0dlbmVyYXRvcigpLnByb2Nlc3M8ZXJyb3IgZGVzY3I9Iidwcm9jZXNzKGphdmEubGFuZy5DbGFzczxUZXN0Tm9uR2VuZXJpY1R5cGUuQUZvbz4pJyBpbiAnVGVzdE5vbkdlbmVyaWNUeXBlLkZvb0dlbmVyYXRvcicgY2Fubm90IGJlIGFwcGxpZWQgdG8gJyhqYXZhLmxhbmcuQ2xhc3M8VGVzdE5vbkdlbmVyaWNUeXBlLk1Gb28+KSciPihNRm9vLmNsYXNzKTwvZXJyb3I+OworICB9CisKKyAgc3RhdGljIGNsYXNzIEFGb28ge30KKyAgc3RhdGljIGNsYXNzIE1Gb28gZXh0ZW5kcyBBRm9vIHt9CisgIHN0YXRpYyBjbGFzcyBGb29HZW5lcmF0b3IgeworICAgIHB1YmxpYyB2b2lkIHByb2Nlc3MoQ2xhc3M8QUZvbz4gY2xzKSB7CisgICAgfQorICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2dlbmVyaWNzSGlnaGxpZ2h0aW5nL01ldGhvZFNpZ25hdHVyZUVxdWFsaXR5LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2dlbmVyaWNzSGlnaGxpZ2h0aW5nL01ldGhvZFNpZ25hdHVyZUVxdWFsaXR5LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTQxYjQ3MQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvZ2VuZXJpY3NIaWdobGlnaHRpbmcvTWV0aG9kU2lnbmF0dXJlRXF1YWxpdHkuamF2YQpAQCAtMCwwICsxLDk0IEBACisvKgorICogQ29weXJpZ2h0IDIwMDAtMjAxMCBKZXRCcmFpbnMgcy5yLm8uCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworaW1wb3J0IGphdmEuaW8uKjsKK2NsYXNzIFRlc3QgeworICBpbnRlcmZhY2UgSW50ZXJmQSB7CisgICAgPFQgZXh0ZW5kcyBDbG9uZWFibGUgJiBJdGVyYWJsZT4gdm9pZCBmb28oVCB4KTsKKworICAgIDxUIGV4dGVuZHMgSXRlcmFibGUgJiBDbG9uZWFibGU+IHZvaWQgZm9vKFQgeCk7CisgIH0KKworICBjbGFzcyBBTm90U2FtZSB7CisgICAgPFQgZXh0ZW5kcyBDbG9uZWFibGUgJiBJdGVyYWJsZT4gdm9pZCBmb28oVCB4KXt9CisKKyAgICA8VCBleHRlbmRzIEl0ZXJhYmxlICYgQ2xvbmVhYmxlPiB2b2lkIGZvbyhUIHgpe30KKyAgfQorCisgIGNsYXNzIEJOb3RTYW1lIGV4dGVuZHMgQU5vdFNhbWUgeworICAgICAgQE92ZXJyaWRlCisgICAgICA8VCBleHRlbmRzIENsb25lYWJsZSAmIEl0ZXJhYmxlPiB2b2lkIGZvbyhUIHgpe30KKyAgfQorCisgIGFic3RyYWN0IGNsYXNzIEE8VCBleHRlbmRzIFRocm93YWJsZT4geworICAgIGFic3RyYWN0IDxUIGV4dGVuZHMgQ29tcGFyYWJsZTw/PiAmIFNlcmlhbGl6YWJsZT4gdm9pZCBmb28oVCB4LCBBPD8+IHkpOworCisgICAgYWJzdHJhY3QgPFQgZXh0ZW5kcyBTZXJpYWxpemFibGUgJiBDb21wYXJhYmxlPD8+PiB2b2lkIGZvbyhUIHgsIEE8PyBleHRlbmRzIENsb25lYWJsZT4geSk7CisgIH0KKworIC8qIGFic3RyYWN0IGNsYXNzIEI8VCBleHRlbmRzIFRocm93YWJsZT4geworICAgIGFic3RyYWN0IDxUIGV4dGVuZHMgQ29tcGFyYWJsZTw/PiAmIFNlcmlhbGl6YWJsZT4gdm9pZCBmb28oVCB4LCBCPD8+IHkpOworCisgICAgYWJzdHJhY3QgPFQgZXh0ZW5kcyBTZXJpYWxpemFibGUgJiBDb21wYXJhYmxlPD8+PiB2b2lkIGZvbyhUIHgsIEI8PyBleHRlbmRzIFRocm93YWJsZT4geSk7CisgIH0KKworCisgIGFic3RyYWN0IGNsYXNzIEM8VCBleHRlbmRzIFRocm93YWJsZSAmIFNlcmlhbGl6YWJsZT4geworICAgIGFic3RyYWN0IDxUIGV4dGVuZHMgQ29tcGFyYWJsZTw/PiAmIFNlcmlhbGl6YWJsZT4gdm9pZCBmb28oVCB4LCBDPD8gZXh0ZW5kcyBTZXJpYWxpemFibGU+IHkpOworCisgICAgYWJzdHJhY3QgPFQgZXh0ZW5kcyBTZXJpYWxpemFibGUgJiBDb21wYXJhYmxlPD8+PiB2b2lkIGZvbyhUIHgsIEM8PyBleHRlbmRzIFRocm93YWJsZT4geSk7CisgIH0qLworCisgIGFic3RyYWN0IGNsYXNzIEQ8VCBleHRlbmRzIFRocm93YWJsZSAmIFJ1bm5hYmxlPiB7CisgICAgPGVycm9yIGRlc2NyPSInZm9vKFQsIEQ8PyBleHRlbmRzIFJ1bm5hYmxlPiknIGNsYXNoZXMgd2l0aCAnZm9vKFQsIEQ8PyBleHRlbmRzIFRocm93YWJsZT4pJzsgYm90aCBtZXRob2RzIGhhdmUgc2FtZSBlcmFzdXJlIj5hYnN0cmFjdCA8VCBleHRlbmRzIFNlcmlhbGl6YWJsZSAmIENvbXBhcmFibGU8Pz4+IHZvaWQgZm9vKFQgeCwgRDw/IGV4dGVuZHMgUnVubmFibGU+IHkpPC9lcnJvcj47CisKKyAgICBhYnN0cmFjdCA8VCBleHRlbmRzIFNlcmlhbGl6YWJsZSAmIENvbXBhcmFibGU8Pz4+IHZvaWQgZm9vKFQgeCwgRDw/IGV4dGVuZHMgVGhyb3dhYmxlPiB5KTsKKyAgfQorCisKKyAgaW50ZXJmYWNlIElBIHt9CisgIGludGVyZmFjZSBJQiB7fQorICB2b2lkIHRlc3RFeHRlbmRzT3JkZXIoKSB7CisgICAgY2xhc3MgRTxUIGV4dGVuZHMgSUEgJiBJQj4geworICAgICAgPGVycm9yIGRlc2NyPSInZm9vKEU8PyBleHRlbmRzIElBPiknIGNsYXNoZXMgd2l0aCAnZm9vKEU8PyBleHRlbmRzIElCPiknOyBib3RoIG1ldGhvZHMgaGF2ZSBzYW1lIGVyYXN1cmUiPnZvaWQgZm9vKEU8PyBleHRlbmRzIElBPiB4KTwvZXJyb3I+IHt9CisgICAgICB2b2lkIGZvbyhFPD8gZXh0ZW5kcyBJQj4geCkge30KKyAgICB9CisgIH0KKworICBhYnN0cmFjdCBjbGFzcyBGPFQgZXh0ZW5kcyBUaHJvd2FibGU+IHsKKyAgICA8ZXJyb3IgZGVzY3I9Iidmb28oRjw/PiknIGlzIGFscmVhZHkgZGVmaW5lZCBpbiAnVGVzdC5GJyI+YWJzdHJhY3Qgdm9pZCBmb28oRjw/PiB5KTwvZXJyb3I+OworCisgICAgYWJzdHJhY3Qgdm9pZCBmb28oRjw/IGV4dGVuZHMgVGhyb3dhYmxlPiB5KTsKKyAgfQorfQorCitjbGFzcyBBbyB7fQorCitjbGFzcyBCbyBleHRlbmRzIEFvIHt9CisKK2NsYXNzIFNldHRpbmdzRWRpdG9yPFQ+IHsKK30KKworYWJzdHJhY3QgY2xhc3MgUnVuQ29uZmlndXJhdGlvbkV4dGVuc2lvbjxUIGV4dGVuZHMgQW8+IHsKKyAgICBwcm90ZWN0ZWQgYWJzdHJhY3QgPFAgZXh0ZW5kcyBUPiBTZXR0aW5nc0VkaXRvcjxQPiBjcmVhdGVFZGl0b3IoZmluYWwgUCBjb25maWd1cmF0aW9uKTsKK30KKworY2xhc3MgRiBleHRlbmRzIFJ1bkNvbmZpZ3VyYXRpb25FeHRlbnNpb248Qm8+IHsKKworICAgIEBPdmVycmlkZQorICAgIHByb3RlY3RlZCA8UCBleHRlbmRzIEJvPiBTZXR0aW5nc0VkaXRvcjxQPiBjcmVhdGVFZGl0b3IoUCBjb25maWd1cmF0aW9uKSB7CisgICAgICAgIHJldHVybiBudWxsOworICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvZ2VuZXJpY3NIaWdobGlnaHRpbmcvTWV0aG9kcy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9nZW5lcmljc0hpZ2hsaWdodGluZy9NZXRob2RzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDBmOTk0ZQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvZ2VuZXJpY3NIaWdobGlnaHRpbmcvTWV0aG9kcy5qYXZhCkBAIC0wLDAgKzEsMzggQEAKK2ltcG9ydCBqYXZhLnV0aWwuKjsKKworaW50ZXJmYWNlIEJhc2UgeworfQorCitjbGFzcyBEZXJpdmVkIGltcGxlbWVudHMgQmFzZSB7Cit9CisKK2NsYXNzIFggeworICAgIHZvaWQgbWV0aG9kKGludCBpLCBCYXNlIGIpIHsgfQorICAgIHZvaWQgbWV0aG9kKGludCBpLCBEZXJpdmVkIGIpIHsgfQorCisgICAgeworICAgICAgICBEZXJpdmVkIGQgPSBuZXcgRGVyaXZlZCgpOworICAgICAgICBtZXRob2QoMTAsIGQpOworICAgIH0KK30KKworY2xhc3MgVGVtcDxUPiB7fQorCitjbGFzcyBBIHsKKyAgIDxlcnJvciBkZXNjcj0iJ0EoVCknIGNsYXNoZXMgd2l0aCAnQShUKSc7IGJvdGggbWV0aG9kcyBoYXZlIHNhbWUgZXJhc3VyZSI+cHVibGljIDxUIGV4dGVuZHMgVGVtcDxTdHJpbmc+PiBBKFQgbGlzdCk8L2Vycm9yPiB7fQorICAgcHVibGljIDxUIGV4dGVuZHMgVGVtcDxJbnRlZ2VyPj4gQShUIGxpc3QpIHt9Cit9CitjbGFzcyBCIHsKKyAgIHB1YmxpYyA8VCBleHRlbmRzIEE+IEIoVCBsaXN0KSB7fQorICAgcHVibGljIDxUIGV4dGVuZHMgVGVtcDxJbnRlZ2VyPj4gQihUIGxpc3QpIHt9Cit9CisKKworCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KK2NsYXNzIElkZWFCdWcgeworCisgICAgc3RhdGljIDxUPiBUIGNsb25lTWUoVCBhcmcpIHRocm93cyBDbG9uZU5vdFN1cHBvcnRlZEV4Y2VwdGlvbiB7CisgICAgICAgIHJldHVybiAoVCkgYXJnLjxlcnJvciBkZXNjcj0iJ2Nsb25lKCknIGhhcyBwcm90ZWN0ZWQgYWNjZXNzIGluICdqYXZhLmxhbmcuT2JqZWN0JyI+Y2xvbmU8L2Vycm9yPigpOworICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvZ2VuZXJpY3NIaWdobGlnaHRpbmcvT3ZlcnJpZGVBdExhbmd1YWdlTGV2ZWw1LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2dlbmVyaWNzSGlnaGxpZ2h0aW5nL092ZXJyaWRlQXRMYW5ndWFnZUxldmVsNS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg2MzQ2NzcKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2dlbmVyaWNzSGlnaGxpZ2h0aW5nL092ZXJyaWRlQXRMYW5ndWFnZUxldmVsNS5qYXZhCkBAIC0wLDAgKzEsMTYgQEAKK2ludGVyZmFjZSBJIHsKKwl2b2lkIGYoKTsKK30KK2ludGVyZmFjZSBJSSBleHRlbmRzIEkgeworICAgIDxlcnJvciBkZXNjcj0iQE92ZXJyaWRlIGlzIG5vdCBhbGxvd2VkIHdoZW4gaW1wbGVtZW50aW5nIGludGVyZmFjZSBtZXRob2QiPkBPdmVycmlkZTwvZXJyb3I+CisgICAgdm9pZCBmKCk7Cit9CitjbGFzcyBDIGltcGxlbWVudHMgSSB7CisgICAgPGVycm9yIGRlc2NyPSJAT3ZlcnJpZGUgaXMgbm90IGFsbG93ZWQgd2hlbiBpbXBsZW1lbnRpbmcgaW50ZXJmYWNlIG1ldGhvZCI+QE92ZXJyaWRlPC9lcnJvcj4KKyAgICBwdWJsaWMgdm9pZCBmKCkgeworICAgIH0KKworICAgIDxlcnJvciBkZXNjcj0iTWV0aG9kIGRvZXMgbm90IG92ZXJyaWRlIG1ldGhvZCBmcm9tIGl0cyBzdXBlcmNsYXNzIj5AT3ZlcnJpZGU8L2Vycm9yPgorICAgIHB1YmxpYyB2b2lkIG5vdG92ZXJyaWRlKCkgeworICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvZ2VuZXJpY3NIaWdobGlnaHRpbmcvT3ZlcnJpZGVBdExhbmd1YWdlTGV2ZWw2LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2dlbmVyaWNzSGlnaGxpZ2h0aW5nL092ZXJyaWRlQXRMYW5ndWFnZUxldmVsNi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ4M2NmNjUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2dlbmVyaWNzSGlnaGxpZ2h0aW5nL092ZXJyaWRlQXRMYW5ndWFnZUxldmVsNi5qYXZhCkBAIC0wLDAgKzEsMTMgQEAKK2ludGVyZmFjZSBJIHsKKwl2b2lkIGYoKTsKK30KK2ludGVyZmFjZSBJSSBleHRlbmRzIEkgeworICAgIEBPdmVycmlkZQorICAgIHZvaWQgZigpOworfQorY2xhc3MgQyBpbXBsZW1lbnRzIEkgeworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyB2b2lkIGYoKSB7CisKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2dlbmVyaWNzSGlnaGxpZ2h0aW5nL092ZXJyaWRlV2l0aE1vcmVTcGVjaWZpY1JldHVybi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9nZW5lcmljc0hpZ2hsaWdodGluZy9PdmVycmlkZVdpdGhNb3JlU3BlY2lmaWNSZXR1cm4uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMmY2ODc3Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9nZW5lcmljc0hpZ2hsaWdodGluZy9PdmVycmlkZVdpdGhNb3JlU3BlY2lmaWNSZXR1cm4uamF2YQpAQCAtMCwwICsxLDE1IEBACitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK2ludGVyZmFjZSBFeGFtcGxlSW50ZXJmYWNlIHsKKyAgICBwdWJsaWMgTGlzdCBleGFtcGxlTWV0aG9kKCk7Cit9CisKK2NsYXNzIEV4YW1wbGVTdXBlckNsYXNzIHsKKyAgICBwdWJsaWMgTGlzdDxTdHJpbmc+IGV4YW1wbGVNZXRob2QoKSB7CisgICAgICAgIHJldHVybiBudWxsOworICAgIH0KK30KKworCitwdWJsaWMgY2xhc3MgIEV4YW1wbGVTdWJDbGFzcyBleHRlbmRzIEV4YW1wbGVTdXBlckNsYXNzIGltcGxlbWVudHMgRXhhbXBsZUludGVyZmFjZSB7Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2dlbmVyaWNzSGlnaGxpZ2h0aW5nL092ZXJyaWRpbmdNZXRob2RzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2dlbmVyaWNzSGlnaGxpZ2h0aW5nL092ZXJyaWRpbmdNZXRob2RzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDRkMmZlMgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvZ2VuZXJpY3NIaWdobGlnaHRpbmcvT3ZlcnJpZGluZ01ldGhvZHMuamF2YQpAQCAtMCwwICsxLDUxNyBAQAoraW1wb3J0IGphdmEudXRpbC4qOworCithYnN0cmFjdCBjbGFzcyBDPFQ+IHsKKyAgICBhYnN0cmFjdCBUIGYoaW50IHQpOworICAgIHZvaWQgZmYoVCB0KSB7fQorCisgICAgQyBjb3ZhcmlhbnQxKCkgeyByZXR1cm4gbnVsbDsgfQorICAgIEMgY292YXJpYW50MigpIHsgcmV0dXJuIG51bGw7IH0KKyAgICA8QT4gQSBnZXQoKSB7IHJldHVybiBudWxsOyB9Cit9CithYnN0cmFjdCBjbGFzcyBEPFU+IGV4dGVuZHMgQzxDPFU+PiB7CisgICAgYWJzdHJhY3QgPGVycm9yIGRlc2NyPSInZihpbnQpJyBpbiAnRCcgY2xhc2hlcyB3aXRoICdmKGludCknIGluICdDJzsgYXR0ZW1wdGluZyB0byB1c2UgaW5jb21wYXRpYmxlIHJldHVybiB0eXBlIj5VPC9lcnJvcj4gZihpbnQgdCk7CisKKyAgICAvLyBvdmVybG9hZGVkLCBub3Qgb3ZlcnJyaWRkZW4KKyAgICBpbnQgZmYoaW50IHUpIHsgcmV0dXJuIDA7IH0KKworICAgIDxlcnJvciBkZXNjcj0iJ2ZmKEM8VT4pJyBpbiAnRCcgY2xhc2hlcyB3aXRoICdmZihUKScgaW4gJ0MnOyBhdHRlbXB0aW5nIHRvIHVzZSBpbmNvbXBhdGlibGUgcmV0dXJuIHR5cGUiPmludDwvZXJyb3I+IGZmKEM8VT4gdSkgeworICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgPGVycm9yIGRlc2NyPSInY292YXJpYW50MSgpJyBpbiAnRCcgY2xhc2hlcyB3aXRoICdjb3ZhcmlhbnQxKCknIGluICdDJzsgYXR0ZW1wdGluZyB0byB1c2UgaW5jb21wYXRpYmxlIHJldHVybiB0eXBlIj5PYmplY3Q8L2Vycm9yPiBjb3ZhcmlhbnQxKCkgeyByZXR1cm4gbnVsbDsgfQorICAgIEQgY292YXJpYW50MigpIHsgcmV0dXJuIG51bGw7IH0KKworICAgIDxBPiBBIGdldCgpIHsgcmV0dXJuIG51bGw7IH0KK30KKworCithYnN0cmFjdCBjbGFzcyBDMTxUPiB7CisgICAgYWJzdHJhY3QgVCBmKGludCB0KTsKK30KK2Fic3RyYWN0IGNsYXNzIEQxPFU+IGV4dGVuZHMgQzE8QzE8VT4+IHsKKyAgICBhYnN0cmFjdCBDMTxVPiBmKGludCBpKTsKK30KKworCitjbGFzcyBDQzxUPiB7CisgQ0M8SW50ZWdlcj4gZigpIHsgcmV0dXJuIG51bGw7IH0KKyBDQzxJbnRlZ2VyPiBmMigpIHsgcmV0dXJuIG51bGw7IH0KKyBDQzxJbnRlZ2VyPiBmMygpIHsgcmV0dXJuIG51bGw7IH0KKworCisgPEssVj4gSyBmKFYgdikgeyByZXR1cm4gbnVsbDsgfQorIGludCBmUHJpbWl0aXZlKCkgeyByZXR1cm4gMDsgfQorfQorY2xhc3MgREQ8VD4gZXh0ZW5kcyBDQzxUPiB7CisgPGVycm9yIGRlc2NyPSInZigpJyBpbiAnREQnIGNsYXNoZXMgd2l0aCAnZigpJyBpbiAnQ0MnOyBhdHRlbXB0aW5nIHRvIHVzZSBpbmNvbXBhdGlibGUgcmV0dXJuIHR5cGUiPkREPFN0cmluZz48L2Vycm9yPiBmKCkgeyByZXR1cm4gbnVsbDsgfQorCisgREQ8SW50ZWdlcj4gZjIoKSB7IHJldHVybiBudWxsOyB9CisgQ0MgZjMoKSB7IHJldHVybiBudWxsOyB9CisKKyA8UCxPPiA8ZXJyb3IgZGVzY3I9IidmKE8pJyBpbiAnREQnIGNsYXNoZXMgd2l0aCAnZihWKScgaW4gJ0NDJzsgYXR0ZW1wdGluZyB0byB1c2UgaW5jb21wYXRpYmxlIHJldHVybiB0eXBlIj5PPC9lcnJvcj4gZihPIG8pIHsgcmV0dXJuIG51bGw7IH0KKworIC8vIGluY29tcGF0aWJsZSBhbHRob3VnaCBhc3NpZ25hYmxlCisgPGVycm9yIGRlc2NyPSInZlByaW1pdGl2ZSgpJyBpbiAnREQnIGNsYXNoZXMgd2l0aCAnZlByaW1pdGl2ZSgpJyBpbiAnQ0MnOyBhdHRlbXB0aW5nIHRvIHVzZSBpbmNvbXBhdGlibGUgcmV0dXJuIHR5cGUiPmRvdWJsZTwvZXJyb3I+IGZQcmltaXRpdmUoKSB7IHJldHVybiAwOyB9Cit9CisKK2ludGVyZmFjZSBHZW48VD4geworIDxLMSBleHRlbmRzIFQ+IHZvaWQgZihHZW48SzE+IGNjKTsKK30KK2NsYXNzIFJhdyBpbXBsZW1lbnRzIEdlbiB7CisgcHVibGljIHZvaWQgZihHZW4gbykgeworICAgYWJzdHJhY3QgY2xhc3MgTXlDb21wYXJhdG9yPFQ+IHsKKyAgICAgIGFic3RyYWN0IGludCBjb21wYXJlKFQgdCwgVCB0MSk7CisgICB9CisgICAvLyByYXcgdHlwZSBpbXBsZW1ldGF0aW9uCisgICBuZXcgTXlDb21wYXJhdG9yKCkgeworICAgICAgIHB1YmxpYyBpbnQgY29tcGFyZShPYmplY3QgdCwgT2JqZWN0IHQxKSB7CisgICAgICAgICAgIHJldHVybiAwOworICAgICAgIH0KKyAgIH07CisgfQorfQorCitjbGFzcyBHZW4yPEdUPiBpbXBsZW1lbnRzIEdlbjxHVD4geworIHB1YmxpYyA8SzIgZXh0ZW5kcyBHVD4gdm9pZCBmKEdlbjxLMj4gbykge30KK30KKworLy8vLy8vLy8vLy8vLy8gRVJBU1VSRSBDT05GTElDVAorY2xhc3MgQTEgPFQ+IHsKKyAgICBUIGlkKFQgdCkgeworICAgICAgICByZXR1cm4gdDsKKyAgICB9Cit9CitpbnRlcmZhY2UgSTEgPFQ+IHsKKyAgICBUIGlkKFQgdCk7Cit9CitjbGFzcyBBMiA8VD4gZXh0ZW5kcyBBMTxTdHJpbmc+IHsKKyAgICA8ZXJyb3IgZGVzY3I9IidpZChUKScgaW4gJ0EyJyBjbGFzaGVzIHdpdGggJ2lkKFQpJyBpbiAnQTEnOyBib3RoIG1ldGhvZHMgaGF2ZSBzYW1lIGVyYXN1cmUsIHlldCBuZWl0aGVyIG92ZXJyaWRlcyB0aGUgb3RoZXIiPlQgaWQoVCB0KTwvZXJyb3I+IHsKKyAgICAgICAgcmV0dXJuIHQ7CisgICAgfQorfQorY2xhc3MgQTMgPFQ+IGV4dGVuZHMgQTE8U3RyaW5nPiB7CisgICAgPGVycm9yIGRlc2NyPSInaWQoT2JqZWN0KScgaW4gJ0EzJyBjbGFzaGVzIHdpdGggJ2lkKFQpJyBpbiAnQTEnOyBib3RoIG1ldGhvZHMgaGF2ZSBzYW1lIGVyYXN1cmUsIHlldCBuZWl0aGVyIG92ZXJyaWRlcyB0aGUgb3RoZXIiPk9iamVjdCBpZChPYmplY3Qgbyk8L2Vycm9yPiB7CisgICAgICAgIHJldHVybiBvOworICAgIH0KK30KKzxlcnJvciBkZXNjcj0iJ2lkKFQpJyBpbiAnQTEnIGNsYXNoZXMgd2l0aCAnaWQoVCknIGluICdJMSc7IGJvdGggbWV0aG9kcyBoYXZlIHNhbWUgZXJhc3VyZSwgeWV0IG5laXRoZXIgb3ZlcnJpZGVzIHRoZSBvdGhlciI+Y2xhc3MgQTQgZXh0ZW5kcyBBMTxTdHJpbmc+IGltcGxlbWVudHMgSTE8SW50ZWdlcj48L2Vycm9yPiB7CisgIFN0cmluZyBpZChTdHJpbmcgdCkKKyAgICB7IHJldHVybiBudWxsO30KKyAgcHVibGljIEludGVnZXIgaWQoSW50ZWdlciBpKQorICAgIHsgcmV0dXJuIG51bGw7IH0KK30KKworaW50ZXJmYWNlIElJMSA8VD4geworICAgIFQgaWQoaW50IHQpOworfQoraW50ZXJmYWNlIElJMiA8VD4geworICAgIFQgaWQoaW50IHQpOworfQorYWJzdHJhY3QgY2xhc3MgQTUgaW1wbGVtZW50cyBJSTE8SW50ZWdlcj4sIElJMjxJbnRlZ2VyPiB7fQorPGVycm9yIGRlc2NyPSInaWQoaW50KScgaW4gJ0lJMicgY2xhc2hlcyB3aXRoICdpZChpbnQpJyBpbiAnSUkxJzsgbWV0aG9kcyBoYXZlIHVucmVsYXRlZCByZXR1cm4gdHlwZXMiPmFic3RyYWN0IGNsYXNzIEE2IGltcGxlbWVudHMgSUkxPEludGVnZXI+LCBJSTI8U3RyaW5nPjwvZXJyb3I+IHt9CithYnN0cmFjdCBjbGFzcyBBNyBpbXBsZW1lbnRzIElJMTxOdW1iZXI+LCBJSTI8SW50ZWdlcj57fQorYWJzdHJhY3QgY2xhc3MgQTggaW1wbGVtZW50cyBJSTE8SW50ZWdlcj4sIElJMjxOdW1iZXI+e30KKworCithYnN0cmFjdCBjbGFzcyBIYXNHZW5lcmljTWV0aG9kczxUPiB7CisgICAgYWJzdHJhY3QgPFA+IHZvaWQgdG9BcnJheShQW10gcCk7Cit9CitwdWJsaWMgY2xhc3MgUmF3T3ZlcnJpZGVzR2VuZXJpY01ldGhvZHMgZXh0ZW5kcyBIYXNHZW5lcmljTWV0aG9kc3sKKyAgICBwdWJsaWMgdm9pZCB0b0FycmF5KE9iamVjdFtdIHBzKSB7CisgICAgfQorfQorCitjbGFzcyBDbG9uZVRlc3QgeworICAgIGludGVyZmFjZSBBIHsKKyAgICAgICAgQSBkdXAoKTsKKyAgICB9CisgICAgaW50ZXJmYWNlIEIgZXh0ZW5kcyBBIHsKKyAgICAgICAgQiBkdXAoKTsKKyAgICB9CisgICAgaW50ZXJmYWNlIEMgZXh0ZW5kcyBBIHsKKyAgICAgICAgQyBkdXAoKTsKKyAgICB9CisgICAgaW50ZXJmYWNlIEQgZXh0ZW5kcyBCLCBDIHsKKyAgICAgICAgRCBkdXAoKTsKKyAgICB9CisgICAgaW50ZXJmYWNlIFggZXh0ZW5kcyBDLCBCIHsKKyAgICAgICAgWCBkdXAoKTsKKyAgICB9CisgICAgaW50ZXJmYWNlIEUgZXh0ZW5kcyBDLEEgeworICAgICAgRSBkdXAoKTsKKyAgICB9Cit9CisvLy8vLy8vLy8vLy8vLy8KK2NsYXNzIEFyckJhc2UgeworICAgIEM8U3RyaW5nPiBnZXRDKCkgeyByZXR1cm4gbnVsbDsgfQorICAgIE9iamVjdFtdIGdldE8oKSB7IHJldHVybiBudWxsOyB9Cit9CitjbGFzcyBBcnJUZXN0IGV4dGVuZHMgQXJyQmFzZSB7CisgICAgQyBnZXRDKCkgeyByZXR1cm4gbnVsbDsgfQorICAgIFN0cmluZ1tdIGdldE8oKSB7IHJldHVybiBudWxsOyB9Cit9CisKKy8vLy8vLy8vLy8vCitjbGFzcyBCYXJJVSB7CisgICAgcHVibGljIDxCPiBCW10gdG9BcnJheShCW10gdHMpIHsKKyAgICAgICAgcmV0dXJuIG51bGw7CisgICAgfQorfQoraW50ZXJmYWNlIElVIHsKKyAgICBwdWJsaWMgPEk+IElbXSB0b0FycmF5KElbXSB0cyk7Cit9CitwdWJsaWMgY2xhc3MgQmFySVVCYXJJVSBleHRlbmRzIEJhcklVIGltcGxlbWVudHMgSVV7CisgICAgcHVibGljIDxUPiBUW10gdG9BcnJheShUW10gdHMpIHsKKyAgICAgICAgcmV0dXJuIG51bGw7CisgICAgfQorfQorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworY2xhc3MgTXlJdGVyYXRvcjxUPiB7Cit9CitjbGFzcyBBQUEgPEE+IHsKKyAgICBwdWJsaWMgTXlJdGVyYXRvcjxBPiBpdGVyYXRvcigpIHsKKyAgICAgICAgcmV0dXJuIG51bGw7CisgICAgfQorfQorCitpbnRlcmZhY2UgSUlJIDxJPiB7CisgICAgTXlJdGVyYXRvcjxJPiBpdGVyYXRvcigpOworfQorCitjbGFzcyBDQ0MgPFQ+IGV4dGVuZHMgQUFBPFQ+IGltcGxlbWVudHMgSUlJPFQ+IHsKKyAgICBwdWJsaWMgTXlJdGVyYXRvcjxUPiBpdGVyYXRvcigpIHsKKyAgICAgICAgcmV0dXJuIG51bGw7CisgICAgfQorfQorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworaW50ZXJmYWNlIENsb25lQ292YXJpYW50IHsKKyAgICBDbG9uZUNvdmFyaWFudCBjbG9uZSgpOworfQorCitpbnRlcmZhY2UgSUNsb25lQ292YXJpYW50IGV4dGVuZHMgQ2xvbmVDb3ZhcmlhbnQgeworfQorCitpbnRlcmZhY2UgQ21wPFQ+IHsKKyAgICBpbnQgY29tcGFyZVRvIChUIHQpOworfQorPGVycm9yIGRlc2NyPSJDbGFzcyAnU2luZ2xldG9uJyBtdXN0IGVpdGhlciBiZSBkZWNsYXJlZCBhYnN0cmFjdCBvciBpbXBsZW1lbnQgYWJzdHJhY3QgbWV0aG9kICdjb21wYXJlVG8oVCknIGluICdDbXAnIj5jbGFzcyBTaW5nbGV0b248VDE+IGltcGxlbWVudHMgQ21wPFNpbmdsZXRvbjxUMT4+PC9lcnJvcj4geworICBwdWJsaWMgPFQyPiBpbnQgY29tcGFyZVRvKFNpbmdsZXRvbjxUMT4gdDEpIHsKKyAgICByZXR1cm4gMDsKKyAgfQorfQorCitjbGFzcyBlPFY+ICB7CisgICAgPFQ+IHZvaWQgdSAoVCB0KSB7fQorfQorCitjbGFzcyBmIGV4dGVuZHMgZTxTdHJpbmc+IHsKKyAgICAvL0lmIHdlIGluaGVyaXQgYnkgZXJhc3VyZSwgdGhlbiBubyB0eXBlIHBhcmFtZXRlcnMgbXVzdCBiZSBwcmVzZW50CisgICAgPGVycm9yIGRlc2NyPSIndShPYmplY3QpJyBpbiAnZicgY2xhc2hlcyB3aXRoICd1KFQpJyBpbiAnZSc7IGJvdGggbWV0aG9kcyBoYXZlIHNhbWUgZXJhc3VyZSwgeWV0IG5laXRoZXIgb3ZlcnJpZGVzIHRoZSBvdGhlciI+PFQ+IHZvaWQgdSAoT2JqZWN0IG8pPC9lcnJvcj4ge30KK30KKworLy9TQ1IgNDE1OTMsIHRoZSBmb2xsb3dpbmcgb3ZlcnJpZGluZyBpcyB2YWxpZAoraW50ZXJmYWNlIHEgeworICAgIHEgZm9vKCk7Cit9CisKK2ludGVyZmFjZSBwIHsKKyAgICBwIGZvbygpOworfQorCitjbGFzcyByIGltcGxlbWVudHMgcSwgcCB7CisgICAgcHVibGljICByIGZvbygpIHsKKyAgICAgICAgcmV0dXJuIG51bGw7CisgICAgfQorfQorCisvL0lERUFERVYtMjI1NTogdGhpcyBvdmVycmlkaW5nIGlzIE9LCitjbGFzcyBFeGFtcGxlIHsKKyAgICBpbnRlcmZhY2UgUHJvcGVydHk8VD4geworICAgICAgICBUIHQoKTsKKyAgICB9CisKKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisgICAgICAgIG5ldyBWYWx1ZUNoYW5nZUxpc3RlbmVyPE51bWJlcj4oKSB7CisgICAgICAgICAgICBwdWJsaWMgPEUgZXh0ZW5kcyBOdW1iZXI+IHZvaWQgdmFsdWVDaGFuZ2VkKFByb3BlcnR5PEU+IHBhcmVudCwgRSBvbGRWYWx1ZSwgRSBuZXdWYWx1ZSkgeworICAgICAgICAgICAgfQorICAgICAgICB9OworICAgIH0KKworICAgIGludGVyZmFjZSBWYWx1ZUNoYW5nZUxpc3RlbmVyPFQ+IHsKKyAgICAgICAgPEUgZXh0ZW5kcyBUPiB2b2lkIHZhbHVlQ2hhbmdlZChQcm9wZXJ0eTxFPiBwcm9wZXJ0eSwgRSBvbGRWYWx1ZSwgRSBuZXdWYWx1ZSk7CisgICAgfQorfQorCisvL0lERUFERVYtMzMxMDogdGhlcmUgaXMgbm8gaGlkaW5nKCJzdGF0aWMgb3ZlcnJpZGluZyIpIGluIHRoaXMgY29kZSB0aHVzIG5vIHJldHVybi10eXBlLXN1YnN0aXR1dGFiaWxpdHkgc2hvdWxkIGJlIGNoZWNrZWQKK2NsYXNzIEJhc2VDbGFzcyB7fQorCitjbGFzcyBTdWJDbGFzcyBleHRlbmRzIEJhc2VDbGFzcyB7fQorCitjbGFzcyBCYXNlQnVnUmVwb3J0IHsKKworICAgIHB1YmxpYyBzdGF0aWMgPFQgZXh0ZW5kcyBCYXNlQ2xhc3M+CisgICAgamF2YS51dGlsLlNldDxUPiBkb1NvbWV0aGluZygpIHsKKyAgICAgICAgcmV0dXJuIG51bGw7CisgICAgfQorfQorCitjbGFzcyBTdWJCdWdSZXBvcnQgZXh0ZW5kcyBCYXNlQnVnUmVwb3J0IHsKKworICAgIHB1YmxpYyBzdGF0aWMgPFQgZXh0ZW5kcyBTdWJDbGFzcz4KKyAgICBqYXZhLnV0aWwuU2V0PFQ+IGRvU29tZXRoaW5nKCkgeworICAgICAgICByZXR1cm4gbnVsbDsKKyAgICB9Cit9CisKK2NsYXNzIEZpcnN0PFQgZXh0ZW5kcyBOdW1iZXI+IHsKKyAgICB2b2lkIG0oVCB0KSB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQTogIiArIHQpOworICAgIH0KK30KKworY2xhc3MgU2Vjb25kPFMgZXh0ZW5kcyBJbnRlZ2VyPiBleHRlbmRzIEZpcnN0PFM+IHsKKyAgICAvL0BPdmVycmlkZQorICAgIHZvaWQgbShTIHQpIHsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJCOiAiICsgdCk7CisgICAgfQorfQorCitjbGFzcyBUaGlyZCBleHRlbmRzIFNlY29uZDxJbnRlZ2VyPiB7CisgICAgPGVycm9yIGRlc2NyPSInbShOdW1iZXIpJyBpbiAnVGhpcmQnIGNsYXNoZXMgd2l0aCAnbShUKScgaW4gJ0ZpcnN0JzsgYm90aCBtZXRob2RzIGhhdmUgc2FtZSBlcmFzdXJlLCB5ZXQgbmVpdGhlciBvdmVycmlkZXMgdGhlIG90aGVyIj52b2lkIG0oTnVtYmVyIHQpPC9lcnJvcj4geworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkQjbShOdW1iZXIpOiAiICsgdCk7CisgICAgfQorCisgICAgLy9AT3ZlcnJpZGUKKyAgICB2b2lkIG0oSW50ZWdlciB0KSB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRCNtKEludGVnZXIpOiAiICsgdCk7CisgICAgfQorfQorCisvL0lERUFERVYtNDU4NzogdGhpcyBjb2RlIGlzIE9LCitpbnRlcmZhY2UgU3VwZXJBPFQsIEUgZXh0ZW5kcyBUaHJvd2FibGU+IHsKKyAgICBUIG1ldGhvZCgpIHRocm93cyBFOworfQorCitpbnRlcmZhY2UgU3VwZXJCPFQsIEUgZXh0ZW5kcyBUaHJvd2FibGU+IHsKKyAgICBUIG1ldGhvZCgpIHRocm93cyBFOworfQorCitpbnRlcmZhY2UgTXlJbnRlcmZhY2U8VCwgRSBleHRlbmRzIFRocm93YWJsZT4gZXh0ZW5kcyBTdXBlckE8VCwgRT4sIFN1cGVyQjxULCBFPiB7Cit9CisKKy8vSURFQURFVi0yODMyCitjbGFzcyBJREVBREVWMjgzMlRlc3QgeworICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKyAgICAgICAgTGlzdGVuZXI8U3RyaW5nPiBkbCA9IG5ldyA8ZXJyb3IgZGVzY3I9IidsaXN0ZW4oVCknIGluICdMaXN0ZW5lcicgY2xhc2hlcyB3aXRoICdsaXN0ZW4oT2JqZWN0KScgaW4gJ0Fub255bW91cyBjbGFzcyBkZXJpdmVkIGZyb20gTGlzdGVuZXInOyBib3RoIG1ldGhvZHMgaGF2ZSBzYW1lIGVyYXN1cmUsIHlldCBuZWl0aGVyIG92ZXJyaWRlcyB0aGUgb3RoZXIiPkxpc3RlbmVyPFN0cmluZz48L2Vycm9yPigpIHsKKyAgICAgICAgICAgIHB1YmxpYyB2b2lkIGxpc3RlbihTdHJpbmcgb2JqKSB7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHB1YmxpYyB2b2lkIGxpc3RlbihPYmplY3Qgb2JqKSB7CisgICAgICAgICAgICB9CisgICAgICAgIH07CisgICAgfQorfQorCitpbnRlcmZhY2UgTGlzdGVuZXI8VD4geworICAgIHZvaWQgbGlzdGVuKFQgb2JqKTsKK30KKworLy9lbmQgb2YgSURFQURFVi0yODMyCisKKy8vSURFQURFVi04MzkzCitjbGFzcyBTdXBlcjxBIGV4dGVuZHMgQ29sbGVjdGlvbj4geworICAgIHB1YmxpYyBTdHJpbmcgc2FtZUVyYXN1cmUoZmluYWwgTGlzdDw/PiBhcmcpCisgICAgeworICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbnQgbGlzdCIpOworICAgICAgcmV0dXJuIG51bGw7CisgICAgfQorCit9CisKKworZmluYWwgY2xhc3MgTWFuaXN0YSBleHRlbmRzIFN1cGVyPENvbGxlY3Rpb24+IHsKKworICAgIHB1YmxpYyAgQ29sbGVjdGlvbiBzYW1lRXJhc3VyZShmaW5hbCBMaXN0PFN0cmluZz4gYXJnKSB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU3RyaW5nIGxpc3QiKTsKKyAgICAgICAgcmV0dXJuIG51bGw7CisgICAgfQorfQorLy9lbmQgb2YgSURFQURFVi04MzkzCisKKy8vLy8vLy8vLy8vLy8vLy8vLy8KK3B1YmxpYyBjbGFzcyBQcmltIHsKKyAgICBPYmplY3QgZygpIHsKKyAgICAgICAgcmV0dXJuIG51bGw7CisgICAgfQorfQorY2xhc3MgU1ByaW0gZXh0ZW5kcyBQcmltIHsKKyAgICBieXRlW10gZygpIHsKKyAgICAgICAgcmV0dXJuIG51bGw7CisgICAgfQorfQorCisvL0lERUFERVYtMjE5MjEKK2ludGVyZmFjZSBUeXBlRGlzcGF0Y2hlcjxULFY+IHsKKyAgICBwdWJsaWMgPFMgZXh0ZW5kcyBUPiB2b2lkIGRpc3BhdGNoKENsYXNzPFM+IGNsYXp6LCBTIG9iaik7Cit9CitjbGFzcyBEZWZhdWx0RGlzcGF0Y2hlcjxULFY+IGltcGxlbWVudHMgVHlwZURpc3BhdGNoZXI8VCxWPiB7CisgICAgcHVibGljIDxTIGV4dGVuZHMgVD4gdm9pZCBkaXNwYXRjaChDbGFzczxTPiBjbGF6eiwgUyBvYmopIHsKKyAgICB9Cit9CitpbnRlcmZhY2UgTm9kZSB7Cit9CisKK2NsYXNzIEJ1YmJsZVR5cGVEaXNwYXRjaGVyIGV4dGVuZHMgRGVmYXVsdERpc3BhdGNoZXI8Tm9kZSwgU3RyaW5nPiB7Cit9CisvL2VuZCBvZiBJREVBREVWLTIxOTIxCisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KK3B1YmxpYyBjbGFzcyBCdWcyIGV4dGVuZHMgU21hcnRMaXN0PEJ1ZzI+IGltcGxlbWVudHMgUGxhY2VzICB7Cit9CitpbnRlcmZhY2UgUGxhY2VzIGV4dGVuZHMgamF2YS51dGlsLkxpc3Q8QnVnMj4ge30KKworY2xhc3MgU21hcnRMaXN0PEU+IGV4dGVuZHMgamF2YS51dGlsLkFic3RyYWN0TGlzdDxFPnsKKyAgICBwdWJsaWMgRSBnZXQoaW50IGluZGV4KSB7CisgICAgICAgIHJldHVybiBudWxsOworICAgIH0KKworICAgIHB1YmxpYyBpbnQgc2l6ZSgpIHsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorfQorLy8vLy8vLy8vLy8vLy8vL0lERUFERVYtMjMxNzYKK2NsYXNzIEFjdGlvbkltcGxlbWVudGF0aW9uIGV4dGVuZHMgTXlBYnN0cmFjdEFjdGlvbgoreworICBwdWJsaWMgdm9pZCBhY3Rpb25QZXJmb3JtZWQoKQorICB7CisgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oKTsKKyAgfQorfQorYWJzdHJhY3QgY2xhc3MgTXlBYnN0cmFjdEFjdGlvbiBleHRlbmRzIEFic3RyYWN0QWN0aW9uIGltcGxlbWVudHMgTXlBY3Rpb24geyB9CitpbnRlcmZhY2UgTXlBY3Rpb24gZXh0ZW5kcyBBY3Rpb24sIEJvdW5kQmVhbiB7IH0KK2ludGVyZmFjZSBCb3VuZEJlYW4geworICB2b2lkIGFkZFByb3BlcnR5Q2hhbmdlTGlzdGVuZXIoKTsKKyAgdm9pZCByZW1vdmVQcm9wZXJ0eUNoYW5nZUxpc3RlbmVyKCk7Cit9CitpbnRlcmZhY2UgQWN0aW9uIGV4dGVuZHMgQWN0aW9uTGlzdGVuZXIgeworICAgIHB1YmxpYyB2b2lkIGFkZFByb3BlcnR5Q2hhbmdlTGlzdGVuZXIoKTsKKyAgICBwdWJsaWMgdm9pZCByZW1vdmVQcm9wZXJ0eUNoYW5nZUxpc3RlbmVyKCk7Cit9CitpbnRlcmZhY2UgQWN0aW9uTGlzdGVuZXIgeworICAgIHB1YmxpYyB2b2lkIGFjdGlvblBlcmZvcm1lZCgpOworfQorYWJzdHJhY3QgY2xhc3MgQWJzdHJhY3RBY3Rpb24gaW1wbGVtZW50cyBBY3Rpb257CisgICAgcHVibGljIHN5bmNocm9uaXplZCB2b2lkIGFkZFByb3BlcnR5Q2hhbmdlTGlzdGVuZXIoKSB7CisgICAgfQorICAgIHB1YmxpYyBzeW5jaHJvbml6ZWQgdm9pZCByZW1vdmVQcm9wZXJ0eUNoYW5nZUxpc3RlbmVyKCkgeworICAgIH0KK30KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworY2xhc3MgQSBleHRlbmRzIEJhc2VCdWlsZCBpbXBsZW1lbnRzIFNSdW5uaW5nQnVpbGR7Cit9CisKK2ludGVyZmFjZSBCdWlsZCB7CisgIGJvb2xlYW4gaXNQZXJzb25hbCgpOworfQorY2xhc3MgQmFzZUJ1aWxkIGltcGxlbWVudHMgQnVpbGQgeworICAgIHB1YmxpYyBib29sZWFuIGlzUGVyc29uYWwoKSB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CitpbnRlcmZhY2UgSGlzdG9yeUJ1aWxkIHsKKyAgYm9vbGVhbiBpc1BlcnNvbmFsKCk7Cit9CitpbnRlcmZhY2UgU1J1bm5pbmdCdWlsZCBleHRlbmRzIEJ1aWxkLEhpc3RvcnlCdWlsZHsgfQorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKK2ludGVyZmFjZSBQc2lSZWZlcmVuY2VFeHByZXNzaW9uIGV4dGVuZHMgUHNpRWxlbWVudCwgUHNpSmF2YUNvZGVSZWZlcmVuY2VFbGVtZW50e30KKworaW50ZXJmYWNlIFBzaUphdmFDb2RlUmVmZXJlbmNlRWxlbWVudCBleHRlbmRzIENsb25lYWJsZSwgUHNpUXVhbGlmaWVkUmVmZXJlbmNle30KK2ludGVyZmFjZSBQc2lRdWFsaWZpZWRSZWZlcmVuY2UgZXh0ZW5kcyBQc2lFbGVtZW50IHt9CisKK2ludGVyZmFjZSBQc2lFbGVtZW50IHsKKyAgICBTdHJpbmcgdG9TdHJpbmcoKTsKK30KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vSURFQURFVi0yNDMwMCAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KK3B1YmxpYyBjbGFzcyBBY3Rpb25Db250ZXh0PEEgZXh0ZW5kcyBDb250ZXh0QWN0aW9uPiB7Cit9CitwdWJsaWMgYWJzdHJhY3QgY2xhc3MgQ29udGV4dEFjdGlvbjxBQyBleHRlbmRzIEFjdGlvbkNvbnRleHQ+IHsKKwlwcm90ZWN0ZWQgYWJzdHJhY3Qgdm9pZCBwZXJmb3JtQWN0aW9uKEFDIGNvbnRleHQpOworfQorcHVibGljIGNsYXNzIE91ckFjdGlvbiBleHRlbmRzIFRhYmxlQ29udGV4dEFjdGlvbjxPYmplY3Q+IHsKKwlwcm90ZWN0ZWQgdm9pZCBwZXJmb3JtQWN0aW9uKFRhYmxlQ29udGV4dDxPYmplY3Q+IGNvbnRleHQpIHsKKwl9Cit9CitwdWJsaWMgY2xhc3MgVGFibGVDb250ZXh0PFRDUD4gZXh0ZW5kcyBBY3Rpb25Db250ZXh0PFRhYmxlQ29udGV4dEFjdGlvbjxUQ1A+PiB7Cit9CitwdWJsaWMgYWJzdHJhY3QgY2xhc3MgVGFibGVDb250ZXh0QWN0aW9uPFJPPiBleHRlbmRzIENvbnRleHRBY3Rpb248VGFibGVDb250ZXh0PFJPPj4geworfQorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL0lERUFERVYtMjMxNzYgLy8vLy8vLy8vLy8vLy8vLy8vLy8vCitwdWJsaWMgaW50ZXJmYWNlIE15TGlzdE1vZGVsIHsgfQorcHVibGljIGludGVyZmFjZSBNeUxpc3QgeworICAgIE9iamVjdCBnZXQoaW50IGkpOworICAgIGludCBoYXNoQ29kZSgpOworfQorcHVibGljIGludGVyZmFjZSBNdXRhYmxlTGlzdE1vZGVsIGV4dGVuZHMgTXlMaXN0TW9kZWwsIE15TGlzdCB7Cit9CitwdWJsaWMgY2xhc3MgTGlzdE1vZGVsSW1wbCB7CisgICAgcHVibGljIE9iamVjdCBnZXQoaW50IGkpIHsKKyAgICAgICAgcmV0dXJuIG51bGw7CisgICAgfQorfQorcHVibGljIGNsYXNzIE11dGFibGVMaXN0TW9kZWxJbXBsIGV4dGVuZHMgTGlzdE1vZGVsSW1wbCBpbXBsZW1lbnRzIE11dGFibGVMaXN0TW9kZWwgeworfQorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKK3B1YmxpYyBjbGFzcyBJbmhlcml0YW5jZUJ1ZyB7CisgICAgaW50ZXJmYWNlIEEgeworICAgICAgICBPYmplY3QgY2xvbmUoKTsKKyAgICB9CisKKyAgICBpbnRlcmZhY2UgQiB7CisKKyAgICB9CisKKyAgICBpbnRlcmZhY2UgQyBleHRlbmRzIEEsIEIgeworCisgICAgfQorCisgICAgY2xhc3MgWCBpbXBsZW1lbnRzIEMgeworICAgICAgICBwdWJsaWMgT2JqZWN0IGNsb25lKCkgeworICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBjbGFzcyBZIGV4dGVuZHMgWCB7CisgICAgfQorfQorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCitjbGFzcyBpZGVhZGV2IHsKK2ludGVyZmFjZSBBIHsKKyAgICBBIGYoKTsKK30KKworaW50ZXJmYWNlIEIgZXh0ZW5kcyBBIHsKKyAgICBCIGYoKTsKK30KKworaW50ZXJmYWNlIEMgZXh0ZW5kcyAgQSxCIHsKKworfQorCitjbGFzcyBzIGltcGxlbWVudHMgQyB7CisgICAgcHVibGljIDxlcnJvciBkZXNjcj0iJ2YoKScgaW4gJ2lkZWFkZXYucycgY2xhc2hlcyB3aXRoICdmKCknIGluICdpZGVhZGV2LkInOyBhdHRlbXB0aW5nIHRvIHVzZSBpbmNvbXBhdGlibGUgcmV0dXJuIHR5cGUiPkE8L2Vycm9yPiBmKCkgeworICAgICAgICByZXR1cm4gbnVsbDsKKyAgICB9Cit9CitjbGFzcyBzT2sgaW1wbGVtZW50cyBDIHsKKyAgICBwdWJsaWMgIEIgZigpIHsKKyAgICAgICAgcmV0dXJuIG51bGw7CisgICAgfQorfQorCit9CisKK2ludGVyZmFjZSBPdmVycmlkZU9iamVjdCB7CisgICA8VD4gdm9pZCBub3RpZnkoKTsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2dlbmVyaWNzSGlnaGxpZ2h0aW5nL1BhcmFtZXRlcml6ZWRQYXJhbWV0ZXJCb3VuZC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9nZW5lcmljc0hpZ2hsaWdodGluZy9QYXJhbWV0ZXJpemVkUGFyYW1ldGVyQm91bmQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MGUxMTdiCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9nZW5lcmljc0hpZ2hsaWdodGluZy9QYXJhbWV0ZXJpemVkUGFyYW1ldGVyQm91bmQuamF2YQpAQCAtMCwwICsxLDYgQEAKK2ltcG9ydCBqYXZhLnV0aWwuKjsKK2NsYXNzIFBhcmFtSG9sZGVyPFQgZXh0ZW5kcyBMaXN0PFN0cmluZz4+IHt9CitjbGFzcyBIb2xkZXJVc2FnZSB7CisgICAgICAgIHB1YmxpYyB2b2lkIGZhaWwoUGFyYW1Ib2xkZXI8PGVycm9yIGRlc2NyPSJUeXBlIHBhcmFtZXRlciAnamF2YS51dGlsLkxpc3QnIGlzIG5vdCB3aXRoaW4gaXRzIGJvdW5kOyBzaG91bGQgZXh0ZW5kICdqYXZhLnV0aWwuTGlzdDxqYXZhLmxhbmcuU3RyaW5nPiciPkxpc3Q8L2Vycm9yPj4gcCkgeyB9CisgICAgICAgIHB1YmxpYyB2b2lkIHN1Y2Nlc3MoUGFyYW1Ib2xkZXI8QXJyYXlMaXN0PFN0cmluZz4+IHApIHsgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9nZW5lcmljc0hpZ2hsaWdodGluZy9Qcml2YXRlSW5uZXJDbGFzc1JlZi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9nZW5lcmljc0hpZ2hsaWdodGluZy9Qcml2YXRlSW5uZXJDbGFzc1JlZi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZmZTBlZmQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2dlbmVyaWNzSGlnaGxpZ2h0aW5nL1ByaXZhdGVJbm5lckNsYXNzUmVmLmphdmEKQEAgLTAsMCArMSwzMCBAQAoraW1wb3J0IGphdmEudXRpbC5Db21wYXJhdG9yOworCitwdWJsaWMgYWJzdHJhY3QgY2xhc3MgQSBpbXBsZW1lbnRzIDxlcnJvciBkZXNjcj0iJ0EuQicgaGFzIHByaXZhdGUgYWNjZXNzIGluICdBJyI+Q29tcGFyYXRvcjxBLkI+PC9lcnJvcj4geworCisgIHByaXZhdGUgc3RhdGljIGNsYXNzIEIgeworICB9CisKKyAgcHJpdmF0ZSBpbnRlcmZhY2UgSSBleHRlbmRzIENvbXBhcmF0b3I8ST57fQorICBwcml2YXRlIGludGVyZmFjZSBJMSBleHRlbmRzIENvbXBhcmF0b3I8ST57fQorfQorCisvL2Fic3RyYWN0IGNsYXNzIEMgaW1wbGVtZW50cyBlcnJvciBkZXNjcj0iJ0MuRCcgaGFzIHByaXZhdGUgYWNjZXNzIGluICdDJyI+Qy5EIGVycm9yIHsKKy8vICBwcml2YXRlIHN0YXRpYyBjbGFzcyBEIHt9CisvL30KKworY2xhc3MgSlNSZWZlcmVuY2VTZXQgeworICAgIHN0YXRpYyBjbGFzcyBNeVJlc29sdmVyIGltcGxlbWVudHMgSlNSZXNvbHZlVXRpbC5SZXNvbHZlcjxNPiB7fQorICAgIGNsYXNzIE0gZXh0ZW5kcyBKU1Jlc29sdmVVdGlsLkYge30KK30KK2NsYXNzIEpTUmVzb2x2ZVV0aWwgeworICAgIHN0YXRpYyBpbnRlcmZhY2UgUmVzb2x2ZXI8VCBleHRlbmRzIEY+IHt9CisgICAgc3RhdGljIGNsYXNzIEYge30KK30KKworCitjbGFzcyBUZXN0SURFQTYyNTE1IHsKKyAgcHVibGljIHN0YXRpYyBpbnRlcmZhY2UgTW9kZWw8VD4ge30KKyAgcHVibGljIGNsYXNzIElubmVyIHt9CisgIHB1YmxpYyBzdGF0aWMgY2xhc3MgRm9vIGltcGxlbWVudHMgTW9kZWw8SW5uZXI+IHt9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9nZW5lcmljc0hpZ2hsaWdodGluZy9SYXcuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvZ2VuZXJpY3NIaWdobGlnaHRpbmcvUmF3LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWIxMTAxOQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvZ2VuZXJpY3NIaWdobGlnaHRpbmcvUmF3LmphdmEKQEAgLTAsMCArMSwxNzcgQEAKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworCitjbGFzcyBSZWZlcmVuY2U8PHdhcm5pbmcgZGVzY3I9IlR5cGUgcGFyYW1ldGVyICdUJyBpcyBuZXZlciB1c2VkIj5UPC93YXJuaW5nPj4geworfQorY2xhc3MgV2Vha1JlZmVyZW5jZTxUPiBleHRlbmRzIFJlZmVyZW5jZTxUPiB7Cit9CitjbGFzcyBJdGVtPDx3YXJuaW5nIGRlc2NyPSJUeXBlIHBhcmFtZXRlciAnS2V5JyBpcyBuZXZlciB1c2VkIj5LZXk8L3dhcm5pbmc+LCBUPiBleHRlbmRzIFdlYWtSZWZlcmVuY2U8VD4geworIHsKKyAgIFJlZmVyZW5jZTxUPiByZWYgPSBudWxsOworICAgSXRlbSBpdGVtID0gKEl0ZW0pIHJlZjsKKyAgIGVxdWFscyhpdGVtKTsKKyB9Cit9CisKKy8vIGFzc2lnbiByYXcgdG8gZ2VuZXJpYyBhcmUgYWxsb3dlZAorY2xhc3MgYTxFPiB7Cisgdm9pZCBmKGE8RT4gdCl7CisgICAgdC5oYXNoQ29kZSgpOworIH0KK30KK2NsYXNzIGIgIHsKKyAgYTxiPiBmKGEgcmF3KSB7CisgICBhPD8+IHVuYm91bmQgPSByYXc7CisgICByYXcgPSB1bmJvdW5kOworCisgICBhPEludGVnZXI+IGdlbmVyaWMgPSA8d2FybmluZyBkZXNjcj0iVW5jaGVja2VkIGFzc2lnbm1lbnQ6ICdhJyB0byAnYTxqYXZhLmxhbmcuSW50ZWdlcj4nIj5yYXc8L3dhcm5pbmc+OworICAgPHdhcm5pbmcgZGVzY3I9IlVuY2hlY2tlZCBjYWxsIHRvICdmKGE8RT4pJyBhcyBhIG1lbWJlciBvZiByYXcgdHlwZSAnYSciPnJhdy5mPC93YXJuaW5nPihyYXcpOworICAgPHdhcm5pbmcgZGVzY3I9IlVuY2hlY2tlZCBjYWxsIHRvICdmKGE8RT4pJyBhcyBhIG1lbWJlciBvZiByYXcgdHlwZSAnYSciPnJhdy5mPC93YXJuaW5nPihnZW5lcmljKTsKKyAgIGdlbmVyaWMuZig8d2FybmluZyBkZXNjcj0iVW5jaGVja2VkIGFzc2lnbm1lbnQ6ICdhJyB0byAnYTxqYXZhLmxhbmcuSW50ZWdlcj4nIj5yYXc8L3dhcm5pbmc+KTsKKyAgIGdlbmVyaWMuZihnZW5lcmljKTsKKyAgIGdlbmVyaWMuZjxlcnJvciBkZXNjcj0iJ2YoYTxqYXZhLmxhbmcuSW50ZWdlcj4pJyBpbiAnYScgY2Fubm90IGJlIGFwcGxpZWQgdG8gJyhhPGphdmEubGFuZy5TdHJpbmc+KSciPihuZXcgYTxTdHJpbmc+KCkpPC9lcnJvcj47CisgICBnZW5lcmljID0gPHdhcm5pbmcgZGVzY3I9IlVuY2hlY2tlZCBhc3NpZ25tZW50OiAnYScgdG8gJ2E8amF2YS5sYW5nLkludGVnZXI+JyI+cmF3PC93YXJuaW5nPjsKKworCisgICByZXR1cm4gPHdhcm5pbmcgZGVzY3I9IlVuY2hlY2tlZCBhc3NpZ25tZW50OiAnYScgdG8gJ2E8Yj4nIj5yYXc8L3dhcm5pbmc+OworICB9Cit9CisKK2NsYXNzIExpc3Q8VD4geworICAgPFY+IFZbXSB0b0FycmF5IChWW10gdnMpIHsgcmV0dXJuIHZzOyB9CisgICB2b2lkIGFkZChUIHQpIHsKKyAgICAgdC5oYXNoQ29kZSgpOworICAgfQorfQorCitjbGFzcyBjIHsKKyAgLypTdHJpbmdbXSBmICgpIHsKKyAgICBMaXN0IGwgPSBuZXcgTGlzdCgpOworICAgIGVycm9yIGRlc2NyPSJJbmNvbXBhdGlibGUgdHlwZXMuIEZvdW5kOiAnamF2YS5sYW5nLk9iamVjdFtdJywgcmVxdWlyZWQ6ICdqYXZhLmxhbmcuU3RyaW5nW10nIj5yZXR1cm4gbC50b0FycmF5IChuZXcgU3RyaW5nWzBdKTs8L2Vycm9yCisgIH0qLworICAKKyAgU3RyaW5nW10gZyAoKSB7CisgICAgTGlzdDxTdHJpbmc+IGwgPSBuZXcgTGlzdDxTdHJpbmc+KCk7CisgICAgcmV0dXJuIGwudG9BcnJheSAobmV3IFN0cmluZ1swXSk7CisgIH0KK30KKworY2xhc3MgZCB7CisgICAgY2xhc3MgWSA8PHdhcm5pbmcgZGVzY3I9IlR5cGUgcGFyYW1ldGVyICdUJyBpcyBuZXZlciB1c2VkIj5UPC93YXJuaW5nPj4geworICAgIH0KKworICAgIGNsYXNzIFogPDx3YXJuaW5nIGRlc2NyPSJUeXBlIHBhcmFtZXRlciAnVCcgaXMgbmV2ZXIgdXNlZCI+VDwvd2FybmluZz4+IGV4dGVuZHMgWTxZPiB7CisgICAgfQorCisgICAgY2xhc3MgUGFpciA8WD4geworICAgICAgICB2b2lkIGZvbyhZPD8gZXh0ZW5kcyBYPiB5KSB7CisgICAgICAgICAgeS5oYXNoQ29kZSgpOworICAgICAgICB9CisgICAgfQorCisgICAgUGFpcjxaPiBwYWlyOworCisgICAgdm9pZCBiYXIoWTw/IGV4dGVuZHMgWT4geSkgeworICAgICAgICBwYWlyLmZvbzxlcnJvciBkZXNjcj0iJ2ZvbyhkLlk8PyBleHRlbmRzIGQuWj4pJyBpbiAnZC5QYWlyJyBjYW5ub3QgYmUgYXBwbGllZCB0byAnKGQuWTxjYXB0dXJlPD8gZXh0ZW5kcyBkLlk+PiknIj4oeSk8L2Vycm9yPjsKKyAgICB9Cit9CisKK2NsYXNzIGUgeworICAgIFN0cmluZyBmb28gKCkgeworICAgICAgICBNeUxpc3QgbXlMaXN0ID0gbmV3IE15TGlzdCgpOworICAgICAgICA8ZXJyb3IgZGVzY3I9IkluY29tcGF0aWJsZSB0eXBlcy4gRm91bmQ6ICdqYXZhLmxhbmcuT2JqZWN0JywgcmVxdWlyZWQ6ICdqYXZhLmxhbmcuU3RyaW5nJyI+cmV0dXJuIG15TGlzdC5nZXQoMCk7PC9lcnJvcj4KKyAgICB9CisKKyAgICBzdGF0aWMgY2xhc3MgTXlMaXN0PDx3YXJuaW5nIGRlc2NyPSJUeXBlIHBhcmFtZXRlciAnVCcgaXMgbmV2ZXIgdXNlZCI+VDwvd2FybmluZz4+IGV4dGVuZHMgQXJyYXlMaXN0PFN0cmluZz57CisgICAgfQorfQorCitjbGFzcyBjY2MgeworICAgIHN0YXRpYyBDb21wYXJhYmxlPD8gc3VwZXIgY2NjPiBmKCkgeworICAgICAgICByZXR1cm4gPHdhcm5pbmcgZGVzY3I9IlVuY2hlY2tlZCBhc3NpZ25tZW50OiAnamF2YS5sYW5nLkNvbXBhcmFibGUnIHRvICdqYXZhLmxhbmcuQ29tcGFyYWJsZTw/IHN1cGVyIGNjYz4nIj5uZXcgQ29tcGFyYWJsZSAoKSB7CisgICAgICAgICAgICBwdWJsaWMgaW50IGNvbXBhcmVUbyhmaW5hbCBPYmplY3QgbykgeworICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgfQorICAgICAgICB9PC93YXJuaW5nPjsKKyAgICB9Cit9CisKK2NsYXNzIGRkZDxDT01QIGV4dGVuZHMgZGRkPiB7CisgICAgQ09NUCBjb21wOworICAgIGRkZCBmb28oKSB7CisgICAgICAgIHJldHVybiBjb21wOyAvL25vIHVuY2hlY2tlZCB3YXJuaW5nIGlzIHNpZ25hbGxlZCBoZXJlCisgICAgfQorfQorCitjbGFzcyBHMTxUPiB7CisgIFQgdDsKK30KK2NsYXNzIEcyPFQ+IHsKKyAgICBUIHQ7CisgICAgCisgICAgc3RhdGljIEFycmF5TGlzdDxHMT4gZigpIHsKKyAgICAgICAgcmV0dXJuIG51bGw7CisgICAgfQorfQorCitjbGFzcyBJbnN0IHsKKyAgICBzdGF0aWMgdm9pZCBmICgpIHsKKyAgICAgICAgRzI8RzE8U3RyaW5nPj4gZzIgPSBuZXcgRzI8RzE8U3RyaW5nPj4oKTsKKyAgICAgICAgZm9yICg8d2FybmluZyBkZXNjcj0iVW5jaGVja2VkIGFzc2lnbm1lbnQ6ICdHMScgdG8gJ0cxPGphdmEubGFuZy5TdHJpbmc+JyI+RzE8U3RyaW5nPiBnMTwvd2FybmluZz4gOiBnMi5mKCkpIHsKKyAgICAgICAgICBnMS50b1N0cmluZygpOworICAgICAgICB9CisgICAgfQorfQorCitjbGFzcyBBMTExPFQ+IHsKKyAgVCB0OworICA8Vj4gViBmKFYgdikgeworICAgIHJldHVybiB2OworICB9CisKKyAgU3RyaW5nIGcoQTExMSBhKSB7CisgICAgLy9ub2luc3BlY3Rpb24gdW5jaGVja2VkCisgICAgPGVycm9yIGRlc2NyPSJJbmNvbXBhdGlibGUgdHlwZXMuIEZvdW5kOiAnamF2YS5sYW5nLk9iamVjdCcsIHJlcXVpcmVkOiAnamF2YS5sYW5nLlN0cmluZyciPnJldHVybiBhLmYoIiIpOzwvZXJyb3I+CisgIH0KK30KKworY2xhc3MgQTEgeworICA8Vj4gViBmKFYgdikgeworICAgIHJldHVybiB2OworICB9Cit9CisKK2NsYXNzIEExMTxUPiBleHRlbmRzIEExIHsKKyAgICBUIHQ7CisKKyAgICAvL3RoaXMgaXMgT0ssIHR5cGUgcGFyYW1ldGVycyBvZiBiYXNlIGNsYXNzIGFyZSBub3QgcmF3CisgICAgU3RyaW5nIHMgPSBuZXcgQTExKCkuZigiIik7Cit9CisKKy8vSURFQURFVi0yNjE2MworY2xhc3MgVGVzdDE8WD4geworICBYIHg7CisgIGphdmEudXRpbC5BcnJheUxpc3Q8TnVtYmVyPiBmb28gPSBuZXcgamF2YS51dGlsLkFycmF5TGlzdDxOdW1iZXI+KCk7CisgIHB1YmxpYyBzdGF0aWMgTnVtYmVyIGZvbygpIHsKKyAgICA8ZXJyb3IgZGVzY3I9IkluY29tcGF0aWJsZSB0eXBlcy4gRm91bmQ6ICdqYXZhLmxhbmcuT2JqZWN0JywgcmVxdWlyZWQ6ICdqYXZhLmxhbmcuTnVtYmVyJyI+cmV0dXJuIG5ldyBUZXN0MSgpLmZvby5nZXQoMCk7PC9lcnJvcj4KKyAgfQorfQorLy9lbmQgb2YgSURFQURFVi0yNjE2MworCisKKy8vLy8vLy8vLy8vLy8vLyAgc2lnbmF0dXJlcyBpbiBub24tcGFyYW1ldGVyaXplZCBjbGFzcyBhcmUgbm90IGVyYXNlZAorcHVibGljIGNsYXNzIEMzICB7CisgICAgcHVibGljIGludCBnZXQoQ2xhc3M8Pz4gYykgeworICAgICAgICByZXR1cm4gMDsKKyAgICB9Cit9CisKK2NsYXNzIENwPFQ+IGV4dGVuZHMgQzMgeworICBwdWJsaWMgVCBpOworfQorY2xhc3MgQyBleHRlbmRzIENwLyo8Qz4qLyB7CisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIGludCBnZXQoQ2xhc3M8Pz4gYykgeworICAgICAgICByZXR1cm4gMDsKKyAgICB9Cit9CisvLy8vLy8vLy8vLy8vLwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvZ2VuZXJpY3NIaWdobGlnaHRpbmcvUmF3T25QYXJhbWV0ZXJpemVkLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2dlbmVyaWNzSGlnaGxpZ2h0aW5nL1Jhd09uUGFyYW1ldGVyaXplZC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE0MDc5ZTkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2dlbmVyaWNzSGlnaGxpZ2h0aW5nL1Jhd09uUGFyYW1ldGVyaXplZC5qYXZhCkBAIC0wLDAgKzEsMjkgQEAKK2NsYXNzIEdlbmVyaWNPdXRlcjxUPiB7CisgICAgcHVibGljIGNsYXNzIEdlbmVyaWNJbm5lcjxVPiB7CisgICAgfQorCisgICAgcHVibGljIHN0YXRpYyBjbGFzcyBTdGF0aWNHZW5lcmljSW5uZXI8VT4geworICAgIH0KKworICAgIHB1YmxpYyBjbGFzcyBTaW1wbGVJbm5lciB7CisgICAgfQorfQorCitjbGFzcyBPdXRlckNsaWVudCB7CisgICAgcHVibGljIHZvaWQgY29udGV4dCgpIHsKKyAgICAgICAgPGVycm9yIGRlc2NyPSJJbXByb3BlciBmb3JtZWQgdHlwZTsgc29tZSB0eXBlIHBhcmFtZXRlcnMgYXJlIG1pc3NpbmciPkdlbmVyaWNPdXRlcjxTdHJpbmc+LkdlbmVyaWNJbm5lcjwvZXJyb3I+IHYxID0gbnVsbDsKKyAgICAgICAgR2VuZXJpY091dGVyLkdlbmVyaWNJbm5lcjxlcnJvciBkZXNjcj0iVHlwZSBhcmd1bWVudHMgZ2l2ZW4gb24gYSByYXcgdHlwZSI+PFN0cmluZz48L2Vycm9yPiB2MiA9IG51bGw7CisgICAgICAgIEdlbmVyaWNPdXRlci5HZW5lcmljSW5uZXIgdjMgPSBudWxsOyAKKyAgICAgICAgR2VuZXJpY091dGVyPFN0cmluZz4uR2VuZXJpY0lubmVyPFN0cmluZz4gdjQgPSBudWxsOworCisgICAgICAgIEdlbmVyaWNPdXRlcjxlcnJvciBkZXNjcj0iQ2Fubm90IHNlbGVjdCBzdGF0aWMgY2xhc3MgJ0dlbmVyaWNPdXRlci5TdGF0aWNHZW5lcmljSW5uZXInIGZyb20gcGFyYW1ldGVyaXplZCB0eXBlIj48U3RyaW5nPjwvZXJyb3I+LlN0YXRpY0dlbmVyaWNJbm5lciBzdjEgPSBudWxsOworICAgICAgICBHZW5lcmljT3V0ZXIuU3RhdGljR2VuZXJpY0lubmVyPFN0cmluZz4gc3YyID0gbnVsbDsKKyAgICAgICAgR2VuZXJpY091dGVyLlN0YXRpY0dlbmVyaWNJbm5lciBzdjMgPSBudWxsOworICAgICAgICBHZW5lcmljT3V0ZXI8ZXJyb3IgZGVzY3I9IkNhbm5vdCBzZWxlY3Qgc3RhdGljIGNsYXNzICdHZW5lcmljT3V0ZXIuU3RhdGljR2VuZXJpY0lubmVyJyBmcm9tIHBhcmFtZXRlcml6ZWQgdHlwZSI+PFN0cmluZz48L2Vycm9yPi5TdGF0aWNHZW5lcmljSW5uZXI8U3RyaW5nPiBzdjQgPSBudWxsOworCisgICAgICAgIEdlbmVyaWNPdXRlcjxTdHJpbmc+LlNpbXBsZUlubmVyIGl2MSA9IG51bGw7CisgICAgICAgIEdlbmVyaWNPdXRlci5TaW1wbGVJbm5lcjxlcnJvciBkZXNjcj0iVHlwZSBhcmd1bWVudHMgZ2l2ZW4gb24gYSByYXcgdHlwZSI+PFN0cmluZz48L2Vycm9yPiBpdjIgPSBudWxsOworICAgICAgICBHZW5lcmljT3V0ZXIuU2ltcGxlSW5uZXIgaXYzID0gbnVsbDsKKyAgICAgICAgR2VuZXJpY091dGVyPFN0cmluZz4uU2ltcGxlSW5uZXI8ZXJyb3IgZGVzY3I9IlR5cGUgJ0dlbmVyaWNPdXRlci5TaW1wbGVJbm5lcicgZG9lcyBub3QgaGF2ZSB0eXBlIHBhcmFtZXRlcnMiPjxTdHJpbmc+PC9lcnJvcj4gaXY0ID0gbnVsbDsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9nZW5lcmljc0hpZ2hsaWdodGluZy9SYXdPdmVycmlkaW5nTWV0aG9kcy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9nZW5lcmljc0hpZ2hsaWdodGluZy9SYXdPdmVycmlkaW5nTWV0aG9kcy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE5MzQwMTIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2dlbmVyaWNzSGlnaGxpZ2h0aW5nL1Jhd092ZXJyaWRpbmdNZXRob2RzLmphdmEKQEAgLTAsMCArMSwyNzEgQEAKK2ltcG9ydCBqYXZhLnV0aWwuKjsKKworY2xhc3MgQmFzZTxUPiB7CisgICAgcHVibGljIHZvaWQgbWV0aG9kKEJhc2U8Pz4gYmFzZSkgeyB9CisgICAgcHVibGljIHZvaWQgbWV0aG9kMShCYXNlPEJhc2U8Pz4+IGJhc2UpIHsgfQorICAgIHB1YmxpYyA8Vj4gQmFzZTxWPiBmb28oKSB7IHJldHVybiBudWxsOyB9CisgICAgcHVibGljIEJhc2U8Pz4gYmFyKCkgeyByZXR1cm4gbnVsbDsgfQorICAgIHB1YmxpYyBCYXNlPEJhc2U8Pz4+IGZhcigpIHsgcmV0dXJuIG51bGw7IH0KK30KKworY2xhc3MgRGVyaXZlZCBleHRlbmRzIEJhc2UgeworICAgIHB1YmxpYyB2b2lkIG1ldGhvZChCYXNlIGJhc2UpIHsgfQorICAgIHB1YmxpYyBCYXNlIGZvbygpIHsgcmV0dXJuIG51bGw7IH0KKyAgICBwdWJsaWMgQmFzZSBiYXIoKSB7IHJldHVybiBudWxsOyB9Cit9CisKK2NsYXNzIERlcml2ZWQxIGV4dGVuZHMgQmFzZSB7CisgICAgPGVycm9yIGRlc2NyPSInbWV0aG9kMShCYXNlPFN0cmluZz4pJyBpbiAnRGVyaXZlZDEnIGNsYXNoZXMgd2l0aCAnbWV0aG9kMShCYXNlPEJhc2U8Pz4+KScgaW4gJ0Jhc2UnOyBib3RoIG1ldGhvZHMgaGF2ZSBzYW1lIGVyYXN1cmUsIHlldCBuZWl0aGVyIG92ZXJyaWRlcyB0aGUgb3RoZXIiPnB1YmxpYyB2b2lkIG1ldGhvZDEoQmFzZTxTdHJpbmc+IGJhc2UpPC9lcnJvcj4geyB9CisgICAgcHVibGljIEJhc2U8U3RyaW5nPiBmYXIoKSB7IHJldHVybiBudWxsOyB9IC8vIEFjY2VwdGFibGUgY29uc3RydWN0IGFzIG9mIEpESyAxLjUgYmV0YSAyIG1heSAyMDA0Cit9CisKK2NsYXNzIFggPFQ+IHsKKyAgICBwdWJsaWMgPFY+IHZvaWQgZm9vICgpIHt9Cit9CisKK2NsYXNzIFlZIGV4dGVuZHMgWCB7CisgICAgPGVycm9yIGRlc2NyPSInZm9vKCknIGluICdZWScgY2xhc2hlcyB3aXRoICdmb28oKScgaW4gJ1gnOyBib3RoIG1ldGhvZHMgaGF2ZSBzYW1lIGVyYXN1cmUsIHlldCBuZWl0aGVyIG92ZXJyaWRlcyB0aGUgb3RoZXIiPnB1YmxpYyA8Vj4gdm9pZCBmb28oKTwvZXJyb3I+IHt9Cit9CisKK2ludGVyZmFjZSBMaXN0PFk+IHsKKyAgICBwdWJsaWMgPFQ+IFRbXSB0b0FycmF5KFRbXSB0cyk7Cit9CitjbGFzcyBBYnN0cmFjdExpc3Q8WT4geworICAgIHB1YmxpYyA8VD4gVFtdIHRvQXJyYXkoVFtdIHRzKSB7cmV0dXJuIG51bGw7fQorfQorLy9TaWduYXR1cmVzIGZyb20gTGlzdCBhbmQgQWJzdHJhY3RMaXN0IGFyZSBlcXVhbAorY2xhc3MgQXJyYXlMaXN0IGV4dGVuZHMgQWJzdHJhY3RMaXN0IGltcGxlbWVudHMgTGlzdCB7fQorCisvL1NDUiAzOTQ4NTogdGhlIGZvbGxvd2luZyBvdmVycmlkaW5nIGlzIE9LCithYnN0cmFjdCBjbGFzcyBEb2VyIHsKKyAgICBhYnN0cmFjdCA8WD4gdm9pZCBnbyhYIHgpOworfQorCitjbGFzcyBNeUxpc3QgPFg+CisgICBleHRlbmRzIERvZXIgeworICAgWCB4OyAKKyAgIDxZPiB2b2lkIGdvKFkgeSkge30KK30KKworY2xhc3MgTXlMaXN0UmF3CisgICAgICAgZXh0ZW5kcyBNeUxpc3QgeworfQorCisvL1NlZSBJREVBREVWLTExMjUKKy8vVGhlIGZvbGxvd2luZyB0d28gY2xhc3NlcyBhcmUgT0sKK2NsYXNzIEExIHsKKyAgICA8VD4gdm9pZCBmb28oVCB0KSB7fQorfQorCitjbGFzcyBBMiBleHRlbmRzIEExIHsKKyAgICB2b2lkIGZvbyhPYmplY3Qgbykge30KK30KKworLy9XaGlsZSB0aGVzZSBhcmUgbm90CitjbGFzcyBBMyB7CisgICAgdm9pZCBmb28oT2JqZWN0IG8pIHt9Cit9CisKK2NsYXNzIEE0IGV4dGVuZHMgQTMgeworICAgIDxlcnJvciBkZXNjcj0iJ2ZvbyhUKScgaW4gJ0E0JyBjbGFzaGVzIHdpdGggJ2ZvbyhPYmplY3QpJyBpbiAnQTMnOyBib3RoIG1ldGhvZHMgaGF2ZSBzYW1lIGVyYXN1cmUsIHlldCBuZWl0aGVyIG92ZXJyaWRlcyB0aGUgb3RoZXIiPjxUPiB2b2lkIGZvbyhUIHQpPC9lcnJvcj4ge30KK30KKworLy9UaGlzIHNpYmxpbmcgb3ZlcnJpZGUgaXMgT0sKK2NsYXNzIEE1IHsKKyAgICBwdWJsaWMgdm9pZCBmb28oT2JqZWN0IG8pIHt9Cit9CisKK2ludGVyZmFjZSBJMSB7CisgICAgPFQ+IHZvaWQgZm9vKFQgdCk7Cit9CisKK2NsYXNzIEE2IGV4dGVuZHMgQTUgaW1wbGVtZW50cyBJMSB7fQorCisvL1doaWxlIHRoaXMgaXMgbm90CitjbGFzcyBBNyB7CisgICAgcHVibGljIDxUPiB2b2lkIGZvbyhUIHQpIHt9Cit9CisKK2ludGVyZmFjZSBJMiB7CisgICAgcHVibGljIHZvaWQgZm9vKE9iamVjdCBvKTsKK30KKworPGVycm9yIGRlc2NyPSJDbGFzcyAnQTgnIG11c3QgZWl0aGVyIGJlIGRlY2xhcmVkIGFic3RyYWN0IG9yIGltcGxlbWVudCBhYnN0cmFjdCBtZXRob2QgJ2ZvbyhPYmplY3QpJyBpbiAnSTInIj5jbGFzcyBBOCBleHRlbmRzIEE3IGltcGxlbWVudHMgSTI8L2Vycm9yPiB7fQorCisvL0lERUEtOTMyMQorYWJzdHJhY3QgY2xhc3MgTXlNYXA8SywgVj4gaW1wbGVtZW50cyBqYXZhLnV0aWwuTWFwPEssIFY+IHsKKyAgICBwdWJsaWMgIDxlcnJvciBkZXNjcj0iJ3B1dChLLCBWKScgaW4gJ015TWFwJyBjbGFzaGVzIHdpdGggJ3B1dChLLCBWKScgaW4gJ2phdmEudXRpbC5NYXAnOyBhdHRlbXB0aW5nIHRvIHVzZSBpbmNvbXBhdGlibGUgcmV0dXJuIHR5cGUiPk9iamVjdDwvZXJyb3I+IHB1dChLIGtleSwgViB2YWx1ZSkgeworICAgICAgICByZXR1cm4gbnVsbDsKKyAgICB9Cit9CisvL2VuZCBvZiBJREVBLTkzMjEKKworYWJzdHJhY3QgY2xhc3MgQUEgPFQ+IHsKKyAgICBhYnN0cmFjdCB2b2lkIGZvbyhUIHQpOworfQorCithYnN0cmFjdCBjbGFzcyBCQjxUPiBleHRlbmRzIEFBPEJCPiB7CisgICAgdm9pZCBmb28oQkIgYikge30KK30KKworY2xhc3MgQ0MgZXh0ZW5kcyBCQiB7CisgIC8vZm9vIGlzIGNvcnJlY3RseSBzZWVuIGZyb20gQkIKK30KKworY2xhc3MgUVFRIHt9CisKK2Fic3RyYWN0IGNsYXNzIEdyYW5kUGFyZW50PFQ+IHsKKyAgICBwdWJsaWMgYWJzdHJhY3Qgdm9pZCBwYWludChUIG9iamVjdCk7Cit9CisKK2NsYXNzIFBhcmVudDxUIGV4dGVuZHMgUVFRPiBleHRlbmRzIEdyYW5kUGFyZW50PFQ+IHsKKyAgICBwdWJsaWMgdm9pZCBwYWludChUIGNvbXBvbmVudCkgeworICAgIH0KK30KKworLy8gdGhpcyBvdmVycmlkaW5nIHNob3VsZCBiZSBPSworY2xhc3MgQ2hpbGQyIGV4dGVuZHMgUGFyZW50IHsKKworfQorCitjbGFzcyBJREVBMTY0OTQgIHsKKyAgICBjbGFzcyBCYXNlPEI+IHsKKyAgICAgICAgcHVibGljIExpc3Q8Qj4gZWxlbWVudHMoKSB7CisgICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgfQorICAgIH0KKworICAgIGNsYXNzIERlcml2ZWQ8VD4gZXh0ZW5kcyBCYXNlPFRbXT4geworICAgIH0KKworICAgIGNsYXNzIE1vc3REZXJpdmVkIGV4dGVuZHMgRGVyaXZlZCB7CisKKyAgICAgICAgcHVibGljIExpc3Q8TW9zdERlcml2ZWRbXT4gZWxlbWVudHMoKSB7CisgICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgfQorICAgIH0KK30KK2NsYXNzIElERUExNjQ5NE9yaWdpbmFsICB7CisgICAgY2xhc3MgQmFzZTxCPiB7CisgICAgICAgIHB1YmxpYyBMaXN0PEI+IGVsZW1lbnRzKCkgeworICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBjbGFzcyBEZXJpdmVkPFQ+IGV4dGVuZHMgQmFzZTxUPiB7CisgICAgfQorCisgICAgY2xhc3MgTW9zdERlcml2ZWQgZXh0ZW5kcyBEZXJpdmVkIHsKKworICAgICAgICBwdWJsaWMgTGlzdDxNb3N0RGVyaXZlZD4gZWxlbWVudHMoKSB7CisgICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgfQorICAgIH0KK30KK2NsYXNzIElERUFERVYyMzE3NkV4YW1wbGUgeworICBwdWJsaWMgYWJzdHJhY3QgY2xhc3MgQWJzdHJhY3RCYXNlPEU+IGV4dGVuZHMgQWJzdHJhY3RQYXJlbnQ8RT4gaW1wbGVtZW50cyBJbnRlcmZhY2U8RT4geworICB9CisgIHB1YmxpYyBhYnN0cmFjdCBjbGFzcyBBYnN0cmFjdFBhcmVudDxFPiB7CisgICAgcHVibGljIHZvaWQgSW1wbGVtZW50ZWQoQ29sbGVjdGlvbjw/PiBjKSB7CisgICAgfQorICAgIHB1YmxpYyBhYnN0cmFjdCB2b2lkIG11c3RJbXBsZW1lbnQoKTsKKyAgfQorICBwdWJsaWMgY2xhc3MgQmFzZWNsYXNzIGV4dGVuZHMgQWJzdHJhY3RCYXNlIGltcGxlbWVudHMgSW50ZXJmYWNlIHsKKyAgICBwdWJsaWMgdm9pZCBtdXN0SW1wbGVtZW50KCkgeworICAgIH0KKyAgfQorICBwdWJsaWMgaW50ZXJmYWNlIEludGVyZmFjZTxFPiB7CisgICAgdm9pZCBJbXBsZW1lbnRlZChDb2xsZWN0aW9uPD8+IGMpOworICB9Cit9CisKKy8qKiBAbm9pbnNwZWN0aW9uIFVudXNlZERlY2xhcmF0aW9uKi8KK2NsYXNzIElERUFERVYyNjE4NQoreworICAgIHB1YmxpYyBzdGF0aWMgYWJzdHJhY3QgY2xhc3MgU3VwZXJBYnN0cmFjdDxPd25lciwgVHlwZT4KKyAgICB7CisgICAgICAgIHB1YmxpYyBhYnN0cmFjdCBPYmplY3QgZm9vKFR5cGUgb3RoZXIpOworICAgIH0KKworICAgIHB1YmxpYyBzdGF0aWMgYWJzdHJhY3QgY2xhc3MgSGFsZkdlbmVyaWNTdXBlcjxPd25lcj4gZXh0ZW5kcyBTdXBlckFic3RyYWN0PE93bmVyLCBTdHJpbmc+CisgICAgeworICAgICAgICBwdWJsaWMgYWJzdHJhY3QgT2JqZWN0IGZvbyhTdHJpbmcgb3RoZXIpOworICAgIH0KKworICAgIHB1YmxpYyBzdGF0aWMgYWJzdHJhY3QgY2xhc3MgQWJzdHJhY3RJbXBsPE93bmVyPiBleHRlbmRzIEhhbGZHZW5lcmljU3VwZXI8T3duZXI+CisgICAgeworICAgICAgICBwdWJsaWMgT2JqZWN0IGZvbyhTdHJpbmcgb3RoZXIpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICB9CisgICAgfQorCisgICAgcHVibGljIHN0YXRpYyBjbGFzcyBDb25jcmV0ZSBleHRlbmRzIEFic3RyYWN0SW1wbAorICAgIHsKKyAgICB9Cit9CisKK2NsYXNzIGlkZWFkZXYzMDA5MCB7CisgIGFic3RyYWN0IGNsYXNzIE15QmVhbkNvbnRleHQKKyAgICAgICAgaW1wbGVtZW50cyBNeUxpc3RJbnRlcmZhY2UvKjxNeUxpc3RNZW1iZXI+Ki8geworICAgIHB1YmxpYyBPYmplY3QgZ2V0KGludCBpbmRleCkgeworICAgICAgICByZXR1cm4gbnVsbDsKKyAgICB9CisgIH0KKworICBpbnRlcmZhY2UgTXlMaXN0SW50ZXJmYWNlPEUgZXh0ZW5kcyBNeUxpc3RNZW1iZXI+CisgICAgICAgIGV4dGVuZHMgTGlzdDxFPiB7CisgIH0KKyAgaW50ZXJmYWNlIE15TGlzdE1lbWJlciB7CisgICAgIHZvaWQgZigpOworICB9Cit9CisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KK2NsYXNzIElERUFERVYzMjQyMSB7CisgaW50ZXJmYWNlIEludGVyZmFjZVdpdGhGb28geworICAgIENsYXNzPD8+IGZvbygpOworIH0KKworIGNsYXNzIFBhcmVudFdpdGhGb28gaW1wbGVtZW50cyBJbnRlcmZhY2VXaXRoRm9vIHsKKyAgICBwdWJsaWMgQ2xhc3MgZm9vKCkgeworICAgICAgICByZXR1cm4gbnVsbDsKKyAgICB9CisgfQorCisgY2xhc3MgVGVzdElJIGV4dGVuZHMgUGFyZW50V2l0aEZvbyBpbXBsZW1lbnRzIEludGVyZmFjZVdpdGhGb28geworIH0KK30KKworY2xhc3MgSURFQURFVjMyNDIxX1RoZU90aGVyV2F5IHsKKyBpbnRlcmZhY2UgSW50ZXJmYWNlV2l0aEZvbyB7CisgICAgQ2xhc3MgZm9vKCk7CisgfQorCisgY2xhc3MgUGFyZW50V2l0aEZvbyBpbXBsZW1lbnRzIEludGVyZmFjZVdpdGhGb28geworICAgIHB1YmxpYyBDbGFzczw/PiBmb28oKSB7CisgICAgICAgIHJldHVybiBudWxsOworICAgIH0KKyB9CisKKyBjbGFzcyBUZXN0SUkgZXh0ZW5kcyBQYXJlbnRXaXRoRm9vIGltcGxlbWVudHMgSW50ZXJmYWNlV2l0aEZvbyB7CisgfQorfQorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KK2NsYXNzIFNCQnVnIHsKKyAgYWJzdHJhY3QgY2xhc3MgQTxUPiBpbXBsZW1lbnRzIENvbXBhcmFibGU8QTxUPj4ge30KKworICBjbGFzcyBCIGV4dGVuZHMgQSB7CisgICAgICBwdWJsaWMgaW50IGNvbXBhcmVUbyhPYmplY3QgbykgeworICAgICAgICAgIHJldHVybiAwOworICAgICAgfQorICB9Cit9CitjbGFzcyBTQkJ1ZzIgeworICAgIGFic3RyYWN0IGNsYXNzIEE8VD4gaW1wbGVtZW50cyBDb21wYXJhYmxlPEE8VD4+IHt9CisKKyAgICA8ZXJyb3IgZGVzY3I9IkNsYXNzICdCJyBtdXN0IGVpdGhlciBiZSBkZWNsYXJlZCBhYnN0cmFjdCBvciBpbXBsZW1lbnQgYWJzdHJhY3QgbWV0aG9kICdjb21wYXJlVG8oVCknIGluICdDb21wYXJhYmxlJyI+Y2xhc3MgQiBleHRlbmRzIEE8L2Vycm9yPiB7CisgICAgICAgIHB1YmxpYyBpbnQgY29tcGFyZVRvKEEgbykgeworICAgICAgICAgICAgcmV0dXJuIDA7IAorICAgICAgICB9CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9nZW5lcmljc0hpZ2hsaWdodGluZy9SZWZlcmVuY2VUeXBlUGFyYW1zLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2dlbmVyaWNzSGlnaGxpZ2h0aW5nL1JlZmVyZW5jZVR5cGVQYXJhbXMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YjcwMzQwCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9nZW5lcmljc0hpZ2hsaWdodGluZy9SZWZlcmVuY2VUeXBlUGFyYW1zLmphdmEKQEAgLTAsMCArMSwxNTIgQEAKK2ltcG9ydCBqYXZhLmxhbmcuT2JqZWN0OworaW1wb3J0IGphdmEudXRpbC4qOworCitjbGFzcyBDPFQsVT4geworCisgIEMgYzEgPSBuZXcgQzxlcnJvciBkZXNjcj0iV3JvbmcgbnVtYmVyIG9mIHR5cGUgYXJndW1lbnRzOiAxOyByZXF1aXJlZDogMiI+PEludGVnZXI+PC9lcnJvcj4oKTsKKyAgQyBjMiA9IG5ldyBDPGVycm9yIGRlc2NyPSJXcm9uZyBudW1iZXIgb2YgdHlwZSBhcmd1bWVudHM6IDM7IHJlcXVpcmVkOiAyIj48SW50ZWdlciwgRmxvYXQsIE9iamVjdD48L2Vycm9yPigpOworICBPYmplY3QgbyA9IG5ldyBPYmplY3Q8ZXJyb3IgZGVzY3I9IlR5cGUgJ2phdmEubGFuZy5PYmplY3QnIGRvZXMgbm90IGhhdmUgdHlwZSBwYXJhbWV0ZXJzIj48Qz48L2Vycm9yPigpOworCisgIEMgYzMgPSBuZXcgQygpOworICBDIGM0ID0gbmV3IEM8T2JqZWN0LCBDPigpOworICBDPEludGVnZXIsIEZsb2F0PiBjNSA9IG5ldyBDPEludGVnZXIsIEZsb2F0PigpOyAKK30KKworY2xhc3MgRDxUIGV4dGVuZHMgQz4geworICB7CisgICAgbmV3IEQ8PGVycm9yIGRlc2NyPSJUeXBlIHBhcmFtZXRlciAnamF2YS5sYW5nLkludGVnZXInIGlzIG5vdCB3aXRoaW4gaXRzIGJvdW5kOyBzaG91bGQgZXh0ZW5kICdDJyI+SW50ZWdlcjwvZXJyb3I+PigpOworICAgIG5ldyBEPEM+KCk7CisgICAgY2xhc3MgQ0MgZXh0ZW5kcyBDIHt9OworICAgIG5ldyBEPENDPigpOworICAgIG5ldyBEPFQ+KCk7CisgIH0KKworICBUIGZpZWxkID0gbmV3IDxlcnJvciBkZXNjcj0iVHlwZSBwYXJhbWV0ZXIgJ1QnIGNhbm5vdCBiZSBpbnN0YW50aWF0ZWQgZGlyZWN0bHkiPlQ8L2Vycm9yPigpOworICBUIGZpZWxkMiA9IG5ldyA8ZXJyb3IgZGVzY3I9IlR5cGUgcGFyYW1ldGVyICdUJyBjYW5ub3QgYmUgaW5zdGFudGlhdGVkIGRpcmVjdGx5Ij5UPC9lcnJvcj4oKSB7IH07CisgIFRbXSBhcnJheSA9IG5ldyA8ZXJyb3IgZGVzY3I9IlR5cGUgcGFyYW1ldGVyICdUJyBjYW5ub3QgYmUgaW5zdGFudGlhdGVkIGRpcmVjdGx5Ij5UPC9lcnJvcj5bMTBdOworfQorCitjbGFzcyBQcmltaXRpdmVzPFQ+IHsKKyAgT2JqZWN0IGEgPSBuZXcgUHJpbWl0aXZlczw8ZXJyb3IgZGVzY3I9IlR5cGUgYXJndW1lbnQgY2Fubm90IGJlIG9mIHByaW1pdGl2ZSB0eXBlIj4/IGV4dGVuZHMgaW50PC9lcnJvcj4+KCk7CisgIE9iamVjdCBvID0gbmV3IFByaW1pdGl2ZXM8PGVycm9yIGRlc2NyPSJUeXBlIGFyZ3VtZW50IGNhbm5vdCBiZSBvZiBwcmltaXRpdmUgdHlwZSI+aW50PC9lcnJvcj4+KCk7CisgIHZvaWQgZihQcmltaXRpdmVzPDxlcnJvciBkZXNjcj0iVHlwZSBhcmd1bWVudCBjYW5ub3QgYmUgb2YgcHJpbWl0aXZlIHR5cGUiPmJvb2xlYW48L2Vycm9yPj4gcGFyYW0pIHsKKyAgICBpZiAodGhpcyBpbnN0YW5jZW9mIFByaW1pdGl2ZXM8PGVycm9yIGRlc2NyPSJUeXBlIGFyZ3VtZW50IGNhbm5vdCBiZSBvZiBwcmltaXRpdmUgdHlwZSI+ZG91YmxlPC9lcnJvcj4+KSB7CisgICAgICByZXR1cm47CisgICAgfQorICB9Cit9CisKKworLy8vLy8vLyBjYWxsaW5nIHN1cGVyIG9uIGdlbmVyaWMgYm91bmQgY2xhc3MKK3B1YmxpYyBjbGFzcyBHZW5lcmljPFQ+IHsKKyAgICBHZW5lcmljKFQgdCl7fQorfQorcHVibGljIGNsYXNzIEJvdW5kIGV4dGVuZHMgR2VuZXJpYzxTdHJpbmc+eworICAgIHB1YmxpYyBCb3VuZChTdHJpbmcgcykgeworICAgICAgICBzdXBlcihzKTsKKyAgICB9Cit9CisKKy8vLy8KK2NsYXNzIEdlbmVyaWMyPFQxLFQyPiB7CisgIGNsYXNzIEEge30KKyAgY2xhc3MgQiB7fQorICBwcml2YXRlIDxlcnJvciBkZXNjcj0iSW5jb21wYXRpYmxlIHR5cGVzLiBGb3VuZDogJ0dlbmVyaWMyPGphdmEubGFuZy5TdHJpbmcsR2VuZXJpYzIuQj4nLCByZXF1aXJlZDogJ0dlbmVyaWMyPGphdmEubGFuZy5TdHJpbmcsR2VuZXJpYzIuQT4nIj5HZW5lcmljMjxTdHJpbmcsIEE+IG1hcCA9IG5ldyBHZW5lcmljMjxTdHJpbmcsQj4oKTs8L2Vycm9yPgorICB7CisgICAgPGVycm9yIGRlc2NyPSJJbmNvbXBhdGlibGUgdHlwZXMuIEZvdW5kOiAnR2VuZXJpYzI8amF2YS5sYW5nLlN0cmluZyxqYXZhLmxhbmcuU3RyaW5nPicsIHJlcXVpcmVkOiAnR2VuZXJpYzI8amF2YS5sYW5nLlN0cmluZyxHZW5lcmljMi5BPiciPm1hcCA9IG5ldyBHZW5lcmljMjxTdHJpbmcsU3RyaW5nPigpPC9lcnJvcj47CisgICAgbWFwID0gbmV3IEdlbmVyaWMyPFN0cmluZyxBPigpOworICB9Cit9CisKK2NsYXNzIER1bW15TGlzdDxUPiB7fQorYWJzdHJhY3QgY2xhc3MgR2VuZXJpY1Rlc3QzIGltcGxlbWVudHMgRHVtbXlMaXN0PDxlcnJvciBkZXNjcj0iTm8gd2lsZGNhcmQgZXhwZWN0ZWQiPj8gZXh0ZW5kcyBTdHJpbmc8L2Vycm9yPj4geworICAgIER1bW15TGlzdDxEdW1teUxpc3Q8PyBleHRlbmRzIER1bW15TGlzdD4+IGw7CisgICAgPFQ+IHZvaWQgZm9vICgpIHt9CisgICAgdm9pZCBiYXIgKCkgeworICAgICAgICAgdGhpcy48RHVtbXlMaXN0PD8gZXh0ZW5kcyBEdW1teUxpc3Q+PmZvbygpOworICAgICAgICAgRHVtbXlMaXN0PER1bW15TGlzdDw/IHN1cGVyIFN0cmluZz4+W10gbCA9IDxlcnJvciBkZXNjcj0iR2VuZXJpYyBhcnJheSBjcmVhdGlvbiI+bmV3IER1bW15TGlzdDxEdW1teUxpc3Q8PyBzdXBlciBTdHJpbmc+PlswXTwvZXJyb3I+OworICAgICAgICAgRHVtbXlMaXN0PFN0cmluZz5bXSBsMSA9IDxlcnJvciBkZXNjcj0iR2VuZXJpYyBhcnJheSBjcmVhdGlvbiI+e308L2Vycm9yPjsKKyAgICB9CisKKyAgICBwdWJsaWMgPFQ+IFRbXSBnZXRDb21wb25lbnRzIChDbGFzczxUPiBiYXNlSW50ZXJmYWNlQ2xhc3MpIHsKKyAgICAgICAgVFtdIHRzID0gPGVycm9yIGRlc2NyPSJHZW5lcmljIGFycmF5IGNyZWF0aW9uIj57fTwvZXJyb3I+OworCisgICAgICAgIHJldHVybiB0czsKKyAgICB9Cit9CisKK2NsYXNzIG15bGlzdDxUPiB7fQorY2xhc3MgbXlBTGlzdDxUPiBleHRlbmRzIG15bGlzdDxUPiB7CisgIHsKKyAgICAgICAgbXlsaXN0PFN0cmluZz4gbCA9IDxlcnJvciBkZXNjcj0iSW5jb252ZXJ0aWJsZSB0eXBlczsgY2Fubm90IGNhc3QgJ215QUxpc3Q8amF2YS5sYW5nLkludGVnZXI+JyB0byAnbXlsaXN0PGphdmEubGFuZy5TdHJpbmc+JyI+KG15bGlzdDxTdHJpbmc+KSBuZXcgbXlBTGlzdDxJbnRlZ2VyPigpPC9lcnJvcj47CisgICAgICAgIGJvb2xlYW4gYiA9IDxlcnJvciBkZXNjcj0iT3BlcmF0b3IgJz09JyBjYW5ub3QgYmUgYXBwbGllZCB0byAnbXlBTGlzdDxqYXZhLmxhbmcuSW50ZWdlcj4nLCAnbXlBTGlzdDxqYXZhLmxhbmcuU3RyaW5nPiciPm5ldyBteUFMaXN0PEludGVnZXI+KCkgPT0gbmV3IG15QUxpc3Q8U3RyaW5nPigpPC9lcnJvcj47CisKKyAgICAgICAgaWYgKGwgaW5zdGFuY2VvZiA8ZXJyb3IgZGVzY3I9IklsbGVnYWwgZ2VuZXJpYyB0eXBlIGZvciBpbnN0YW5jZW9mIj5teUFMaXN0PFN0cmluZz48L2Vycm9yPik7CisgICAgICAgIE9iamVjdCBvID0gbmV3IE9iamVjdCgpOworICAgICAgICBpZiAobyBpbnN0YW5jZW9mIDxlcnJvciBkZXNjcj0iQ2xhc3Mgb3IgYXJyYXkgZXhwZWN0ZWQiPlQ8L2Vycm9yPik7CisgIH0KKworICBDbGFzczxUPiBmb28gKENsYXNzPFQ+IGNsYXp6KSB7CisgICAgICAgIENsYXNzPFN0cmluZz4gY2xhenoxID0gKENsYXNzPFN0cmluZz4pY2xheno7ICAvL1Nob3VsZCBiZSB1bmNoZWNrZWQgd2FybmluZworICAgICAgICByZXR1cm4gPGVycm9yIGRlc2NyPSJDYW5ub3Qgc2VsZWN0IGZyb20gYSB0eXBlIHZhcmlhYmxlIj5UPC9lcnJvcj4uY2xhc3M7CisgIH0KK30KKworY2xhc3MgdGVzdER1cDxULCA8ZXJyb3IgZGVzY3I9IkR1cGxpY2F0ZSB0eXBlIHBhcmFtZXRlcjogJ1QnIj5UPC9lcnJvcj4+IHsgLy8gQ0FOIElUIEJFIEhJR0hMSUdIVEVEPyBiCisgICAgcHVibGljIDxULCA8ZXJyb3IgZGVzY3I9IkR1cGxpY2F0ZSB0eXBlIHBhcmFtZXRlcjogJ1QnIj5UPC9lcnJvcj4+IHZvaWQgZm9vKCkgeyAvLyBDQU4gSVQgQkUgSElHSExJR0hURUQ/CisgICAgfQorfQorCitjbGFzcyBhYWFhIHsKKyAgICB7CisgICAgICAgIDxlcnJvciBkZXNjcj0iSW5jb21wYXRpYmxlIHR5cGVzLiBGb3VuZDogJ2phdmEubGFuZy5DbGFzczxqYXZhLmxhbmcuU3RyaW5nPicsIHJlcXVpcmVkOiAnamF2YS5sYW5nLkNsYXNzPD8gc3VwZXIgamF2YS5sYW5nLk9iamVjdD4nIj5DbGFzczw/IHN1cGVyIE9iamVjdD4gYyA9IFN0cmluZy5jbGFzczs8L2Vycm9yPgorICAgIH0KK30KKworLy9JREVBREVWLTYxMDM6IHRoaXMgY29kZSBpcyBPSworY2xhc3MgRm9vIHsKKyAgICBteWxpc3Q8VGVzdD4gZm9vOworCisgICAgcHVibGljIEZvbyhteWxpc3Q8VGVzdD4gZm9vKSB7CisgICAgICAgIHRoaXMuZm9vID0gZm9vOworICAgIH0KKworICAgIHB1YmxpYyBGb28oKSB7CisgICAgICAgICAgdGhpcyhuZXcgbXlsaXN0PFRlc3Q+KCkpOworICAgIH0KKworICAgIHByaXZhdGUgY2xhc3MgVGVzdCB7CisgICAgfQorfQorLy9lbmQgb2YgSURFQURFVi02MTAzCisKK2NsYXNzIElEb250Q29tcGlsZSB7CisgICBNYXA8ZXJyb3IgZGVzY3I9IkNhbm5vdCBzZWxlY3Qgc3RhdGljIGNsYXNzICdqYXZhLnV0aWwuTWFwLkVudHJ5JyBmcm9tIHBhcmFtZXRlcml6ZWQgdHlwZSI+PD8sID8+PC9lcnJvcj4uRW50cnkgbWFwOworfQorCithYnN0cmFjdCBjbGFzcyBHZW5lcmljVGVzdDk5PEUgZXh0ZW5kcyBFbnVtPEU+PiB7CisgICAgR2VuZXJpY1Rlc3Q5OTw8ZXJyb3IgZGVzY3I9IlR5cGUgcGFyYW1ldGVyICdqYXZhLmxhbmcuRW51bScgaXMgbm90IHdpdGhpbiBpdHMgYm91bmQ7IHNob3VsZCBleHRlbmQgJ2phdmEubGFuZy5FbnVtPGphdmEubGFuZy5FbnVtPiciPkVudW08L2Vycm9yPj4gbG9jYWw7Cit9CisKK2NsYXNzIENsYXNzTGl0ZXJhbDxUPiB7CisgIHsKKyAgICBPYmplY3QgYzEgPSA8ZXJyb3IgZGVzY3I9IkNhbm5vdCBzZWxlY3QgZnJvbSBhIHR5cGUgdmFyaWFibGUiPlQ8L2Vycm9yPi5jbGFzczsKKyAgICBPYmplY3QgYzIgPSA8ZXJyb3IgZGVzY3I9IkNhbm5vdCBzZWxlY3QgZnJvbSBhIHR5cGUgdmFyaWFibGUiPlRbXTwvZXJyb3I+LmNsYXNzOworICAgIAorICAgIE9iamVjdCBjMyA9IDxlcnJvciBkZXNjcj0iQ2Fubm90IHNlbGVjdCBmcm9tIHBhcmFtZXRlcml6ZWQgdHlwZSI+TGlzdDxTdHJpbmc+PC9lcnJvcj4uY2xhc3M7CisgICAgT2JqZWN0IGM0ID0gPGVycm9yIGRlc2NyPSJDYW5ub3Qgc2VsZWN0IGZyb20gcGFyYW1ldGVyaXplZCB0eXBlIj5MaXN0PFN0cmluZz5bXTwvZXJyb3I+LmNsYXNzOworICAgIE9iamVjdCBjNSA9IExpc3RbXS5jbGFzczsKKyAgICBPYmplY3QgYzYgPSBMaXN0LmNsYXNzOworICB9Cit9CisKK2NsYXNzIE91dGVyPEU+IHsKKyAgICBmaW5hbCBJbm5lcltdIGkgPSA8ZXJyb3IgZGVzY3I9IkdlbmVyaWMgYXJyYXkgY3JlYXRpb24iPm5ldyBJbm5lclsxMF08L2Vycm9yPjsKKyAgICBjbGFzcyBJbm5lciB7CisgICAgfQorfQorY2xhc3MgT3V0ZXIxPEU+IHsKKyAgICBmaW5hbCBJbm5lcltdIGkgPSBuZXcgSW5uZXJbMTBdOworICAgIHN0YXRpYyBjbGFzcyBJbm5lciB7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvZ2VuZXJpY3NIaWdobGlnaHRpbmcvU09FLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2dlbmVyaWNzSGlnaGxpZ2h0aW5nL1NPRS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE1ZjQzZTEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2dlbmVyaWNzSGlnaGxpZ2h0aW5nL1NPRS5qYXZhCkBAIC0wLDAgKzEsMjQgQEAKK3B1YmxpYyBjbGFzcyBTT0UgeworfQorYWJzdHJhY3QgY2xhc3MgVmVyc2lvbkVudGl0eTxWIGV4dGVuZHMgVmVyc2lvbjxWLCBSPiwgUiBleHRlbmRzIFJlZjxWLCBSPj4KKyAgICBpbXBsZW1lbnRzIFZlcnNpb248ViwgUj57fQorCitpbnRlcmZhY2UgVmVyc2lvbjxWIGV4dGVuZHMgVmVyc2lvbjxWLCBSPiwgUiBleHRlbmRzIFJlZjxWLCBSPj57fQorCithYnN0cmFjdCBjbGFzcyBSZWZFbnRpdHk8ViBleHRlbmRzIFZlcnNpb248ViwgUj4sIFIgZXh0ZW5kcyBSZWY8ViwgUj4+CisgICAgaW1wbGVtZW50cyBSZWY8ViwgUj4ge30KKworaW50ZXJmYWNlIFJlZjxWIGV4dGVuZHMgVmVyc2lvbjxWLCBSPiwgUiBleHRlbmRzIFJlZjxWLCBSPj57fQorCisKK2Fic3RyYWN0IGNsYXNzIE5vZGU8RyBleHRlbmRzIE5vZGU8RywgR1I+LAorICAgICAgICAgICAgICAgR1IgZXh0ZW5kcyBOb2RlUmVmPEcsIEdSPj4gZXh0ZW5kcyBWZXJzaW9uRW50aXR5PEcsIEdSPiB7fQorCithYnN0cmFjdCBjbGFzcyBOb2RlUmVmPEcgZXh0ZW5kcyBOb2RlPEcsIEdSPiwgR1IgZXh0ZW5kcyBOb2RlUmVmPEcsIEdSPj4gZXh0ZW5kcyBSZWZFbnRpdHk8RywgR1I+IHt9CisKKworY2xhc3MgRCB7CisgICAgdm9pZCBmKCkgeworICAgICAgICBWZXJzaW9uIHYgPSBuZXcgTm9kZTw8ZXJyb3IgZGVzY3I9IldpbGRjYXJkIHR5cGUgJz8nIGNhbm5vdCBiZSBpbnN0YW50aWF0ZWQgZGlyZWN0bHkiPj88L2Vycm9yPiwgPGVycm9yIGRlc2NyPSJXaWxkY2FyZCB0eXBlICc/JyBjYW5ub3QgYmUgaW5zdGFudGlhdGVkIGRpcmVjdGx5Ij4/PC9lcnJvcj4+KCl7fTxFT0xFcnJvciBkZXNjcj0iJzsnIGV4cGVjdGVkIj48L0VPTEVycm9yPgorICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2dlbmVyaWNzSGlnaGxpZ2h0aW5nL1NhbWVFcmFzdXJlLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2dlbmVyaWNzSGlnaGxpZ2h0aW5nL1NhbWVFcmFzdXJlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWJiNDliMgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvZ2VuZXJpY3NIaWdobGlnaHRpbmcvU2FtZUVyYXN1cmUuamF2YQpAQCAtMCwwICsxLDM0IEBACitpbXBvcnQgamF2YS51dGlsLio7CisKK2NsYXNzIFNhbWVTaWduYXR1cmVUZXN0IHsKKyAgICA8ZXJyb3IgZGVzY3I9IidzYW1lRXJhc3VyZShMaXN0PFN0cmluZz4pJyBjbGFzaGVzIHdpdGggJ3NhbWVFcmFzdXJlKExpc3Q8SW50ZWdlcj4pJzsgYm90aCBtZXRob2RzIGhhdmUgc2FtZSBlcmFzdXJlIj5wdWJsaWMgc3RhdGljIHZvaWQgc2FtZUVyYXN1cmUoTGlzdDxTdHJpbmc+IHN0cmluZ3MpPC9lcnJvcj4geworICAgIH0KKworICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBzYW1lRXJhc3VyZShMaXN0PEludGVnZXI+IGludGVnZXJzKSB7CisgICAgfQorfQorCisgY2xhc3MgQ0NDIHsKKyAgICA8ZXJyb3IgZGVzY3I9IidmKE9iamVjdCknIGNsYXNoZXMgd2l0aCAnZihPYmplY3QpJzsgYm90aCBtZXRob2RzIGhhdmUgc2FtZSBlcmFzdXJlIj48VD4gdm9pZCBmKE9iamVjdCBvKTwvZXJyb3I+IHt9CisKKyAgICB2b2lkIGYoT2JqZWN0IG8pIHt9Cit9CisKK3B1YmxpYyBjbGFzcyBUZXN0MSB7CisgICAgPGVycm9yIGRlc2NyPSInYnVnKFN0cmluZyknIGNsYXNoZXMgd2l0aCAnYnVnKFN0cmluZyknOyBib3RoIG1ldGhvZHMgaGF2ZSBzYW1lIGVyYXN1cmUiPnB1YmxpYyB2b2lkIGJ1ZyhTdHJpbmcgcyk8L2Vycm9yPiB7CisgICAgfQorCisgICAgcHVibGljIHN0YXRpYyA8VD4gVCBidWcoU3RyaW5nIHMpIHsKKyAgICAgICAgcmV0dXJuIG51bGw7CisgICAgfQorfQorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KK2NsYXNzIFRlc3QgeworICAgIDxlcnJvciBkZXNjcj0iJ3Rlc3QoKScgY2xhc2hlcyB3aXRoICd0ZXN0KCknOyBib3RoIG1ldGhvZHMgaGF2ZSBzYW1lIGVyYXN1cmUiPnB1YmxpYyBzdGF0aWMgPEssIFY+IEhhc2hNYXA8SywgVj4gdGVzdCgpPC9lcnJvcj4geworICAgICAgICByZXR1cm4gbmV3IEhhc2hNYXA8SywgVj4oKTsKKyAgICB9CisKKyAgICBwdWJsaWMgc3RhdGljIFN0cmluZyB0ZXN0KCkgeworICAgICAgICByZXR1cm4gIiI7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9nZW5lcmljc0hpZ2hsaWdodGluZy9TYW1lRXJhc3VyZURpZmZlcmVudFJldHVyblR5cGVzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2dlbmVyaWNzSGlnaGxpZ2h0aW5nL1NhbWVFcmFzdXJlRGlmZmVyZW50UmV0dXJuVHlwZXMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YmJkN2I2Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9nZW5lcmljc0hpZ2hsaWdodGluZy9TYW1lRXJhc3VyZURpZmZlcmVudFJldHVyblR5cGVzLmphdmEKQEAgLTAsMCArMSw1MyBAQAorLyoqIEBub2luc3BlY3Rpb24gVW51c2VkRGVjbGFyYXRpb24qLworaW50ZXJmYWNlIE1hdGNoZXI8VD4geworCisgICAgYm9vbGVhbiBtYXRjaGVzKGphdmEubGFuZy5PYmplY3Qgb2JqZWN0KTsKKworICAgIHZvaWQgX2RvbnRfaW1wbGVtZW50X01hdGNoZXJfX19pbnN0ZWFkX2V4dGVuZF9CYXNlTWF0Y2hlcl8oKTsKK30KKworaW50ZXJmYWNlIEFyZ3VtZW50Q29uc3RyYWludFBocmFzZXMgeworICAgIDxlcnJvciBkZXNjcj0iJ3dpdGgoTWF0Y2hlcjxUPiknIGNsYXNoZXMgd2l0aCAnd2l0aChNYXRjaGVyPEJvb2xlYW4+KSc7IGJvdGggbWV0aG9kcyBoYXZlIHNhbWUgZXJhc3VyZSI+PFQ+IFQgd2l0aChNYXRjaGVyPFQ+IG1hdGNoZXIpPC9lcnJvcj47CisgICAgYm9vbGVhbiB3aXRoKE1hdGNoZXI8Qm9vbGVhbj4gbWF0Y2hlcik7CisgICAgYnl0ZSB3aXRoKE1hdGNoZXI8Qnl0ZT4gbWF0Y2hlcik7CisgICAgc2hvcnQgd2l0aChNYXRjaGVyPFNob3J0PiBtYXRjaGVyKTsKKyAgICBpbnQgd2l0aChNYXRjaGVyPEludGVnZXI+IG1hdGNoZXIpOworICAgIGxvbmcgd2l0aChNYXRjaGVyPExvbmc+IG1hdGNoZXIpOworICAgIGZsb2F0IHdpdGgoTWF0Y2hlcjxGbG9hdD4gbWF0Y2hlcik7CisgICAgZG91YmxlIHdpdGgoTWF0Y2hlcjxEb3VibGU+IG1hdGNoZXIpOworfQorCitjbGFzcyBFeHBlY3RhdGlvbkdyb3VwQnVpbGRlciBpbXBsZW1lbnRzIEFyZ3VtZW50Q29uc3RyYWludFBocmFzZXMgeworCisgICAgPGVycm9yIGRlc2NyPSInd2l0aChNYXRjaGVyPFQ+KScgY2xhc2hlcyB3aXRoICd3aXRoKE1hdGNoZXI8Qm9vbGVhbj4pJzsgYm90aCBtZXRob2RzIGhhdmUgc2FtZSBlcmFzdXJlIj5wdWJsaWMgPFQ+IFQgd2l0aChmaW5hbCBNYXRjaGVyPFQ+IG1hdGNoZXIpPC9lcnJvcj4geworICAgICAgICByZXR1cm4gbnVsbDsKKyAgICB9CisKKyAgICBwdWJsaWMgYm9vbGVhbiB3aXRoKGZpbmFsIE1hdGNoZXI8Qm9vbGVhbj4gbWF0Y2hlcikgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgcHVibGljIGJ5dGUgd2l0aChmaW5hbCBNYXRjaGVyPEJ5dGU+IG1hdGNoZXIpIHsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgcHVibGljIHNob3J0IHdpdGgoZmluYWwgTWF0Y2hlcjxTaG9ydD4gbWF0Y2hlcikgeworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBwdWJsaWMgaW50IHdpdGgoZmluYWwgTWF0Y2hlcjxJbnRlZ2VyPiBtYXRjaGVyKSB7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIHB1YmxpYyBsb25nIHdpdGgoZmluYWwgTWF0Y2hlcjxMb25nPiBtYXRjaGVyKSB7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIHB1YmxpYyBmbG9hdCB3aXRoKGZpbmFsIE1hdGNoZXI8RmxvYXQ+IG1hdGNoZXIpIHsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgcHVibGljIGRvdWJsZSB3aXRoKGZpbmFsIE1hdGNoZXI8RG91YmxlPiBtYXRjaGVyKSB7CisgICAgICAgIHJldHVybiAwOworICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvZ2VuZXJpY3NIaWdobGlnaHRpbmcvU2FtZUVyYXN1cmVEaWZmZXJlbnRSZXR1cm5UeXBlc0pkazE0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2dlbmVyaWNzSGlnaGxpZ2h0aW5nL1NhbWVFcmFzdXJlRGlmZmVyZW50UmV0dXJuVHlwZXNKZGsxNC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIwNDYwNjkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2dlbmVyaWNzSGlnaGxpZ2h0aW5nL1NhbWVFcmFzdXJlRGlmZmVyZW50UmV0dXJuVHlwZXNKZGsxNC5qYXZhCkBAIC0wLDAgKzEsNDggQEAKKy8qKiBAbm9pbnNwZWN0aW9uIFVudXNlZERlY2xhcmF0aW9uKi8KK2ludGVyZmFjZSBNYXRjaGVyPFQ+IHsKKworICAgIGJvb2xlYW4gbWF0Y2hlcyhPYmplY3Qgb2JqZWN0KTsKKworICAgIHZvaWQgX2RvbnRfaW1wbGVtZW50X01hdGNoZXJfX19pbnN0ZWFkX2V4dGVuZF9CYXNlTWF0Y2hlcl8oKTsKK30KKworaW50ZXJmYWNlIEFyZ3VtZW50Q29uc3RyYWludFBocmFzZXMgeworICAgIDxUPiBUIHdpdGgoTWF0Y2hlcjxUPiBtYXRjaGVyKTsKKyAgICBib29sZWFuIHdpdGgoTWF0Y2hlcjxCb29sZWFuPiBtYXRjaGVyKTsKKyAgICBieXRlIHdpdGgoTWF0Y2hlcjxCeXRlPiBtYXRjaGVyKTsKKyAgICBpbnQgd2l0aChNYXRjaGVyPEludGVnZXI+IG1hdGNoZXIpOworICAgIGxvbmcgd2l0aChNYXRjaGVyPExvbmc+IG1hdGNoZXIpOworICAgIGZsb2F0IHdpdGgoTWF0Y2hlcjxGbG9hdD4gbWF0Y2hlcik7CisgICAgZG91YmxlIHdpdGgoTWF0Y2hlcjxEb3VibGU+IG1hdGNoZXIpOworfQorCitjbGFzcyBFeHBlY3RhdGlvbkdyb3VwQnVpbGRlciBpbXBsZW1lbnRzIEFyZ3VtZW50Q29uc3RyYWludFBocmFzZXMgeworCisgICAgcHVibGljIDxUPiBUIHdpdGgoZmluYWwgTWF0Y2hlcjxUPiBtYXRjaGVyKSB7CisgICAgICAgIHJldHVybiBudWxsOworICAgIH0KKworICAgIHB1YmxpYyBib29sZWFuIHdpdGgoZmluYWwgTWF0Y2hlcjxCb29sZWFuPiBtYXRjaGVyKSB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBwdWJsaWMgYnl0ZSB3aXRoKGZpbmFsIE1hdGNoZXI8Qnl0ZT4gbWF0Y2hlcikgeworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBwdWJsaWMgaW50IHdpdGgoZmluYWwgTWF0Y2hlcjxJbnRlZ2VyPiBtYXRjaGVyKSB7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIHB1YmxpYyBsb25nIHdpdGgoZmluYWwgTWF0Y2hlcjxMb25nPiBtYXRjaGVyKSB7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIHB1YmxpYyBmbG9hdCB3aXRoKGZpbmFsIE1hdGNoZXI8RmxvYXQ+IG1hdGNoZXIpIHsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgcHVibGljIGRvdWJsZSB3aXRoKGZpbmFsIE1hdGNoZXI8RG91YmxlPiBtYXRjaGVyKSB7CisgICAgICAgIHJldHVybiAwOworICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvZ2VuZXJpY3NIaWdobGlnaHRpbmcvU3BlY2lmaWNSZXR1cm5UeXBlLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2dlbmVyaWNzSGlnaGxpZ2h0aW5nL1NwZWNpZmljUmV0dXJuVHlwZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRmYjg5MGIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2dlbmVyaWNzSGlnaGxpZ2h0aW5nL1NwZWNpZmljUmV0dXJuVHlwZS5qYXZhCkBAIC0wLDAgKzEsMTMgQEAKK2Fic3RyYWN0IGNsYXNzIEZpZWxkPEQ+IHsKKyAgICBwdWJsaWMgRCBnZXRWYWx1ZSgpe3JldHVybiBudWxsO30KK30KKworY2xhc3MgTGFiZWxGaWVsZCBleHRlbmRzIEZpZWxkPE9iamVjdD4geworICAgIHB1YmxpYyBPYmplY3QgZ2V0VmFsdWUoKSB7IHJldHVybiBudWxsOyB9Cit9CitpbnRlcmZhY2UgTXlJbnRlcmZhY2U8RD4geworICAgIEQgZ2V0VmFsdWUoKTsKK30KKworY2xhc3MgTXlMYWJlbEZpZWxkIGV4dGVuZHMgTGFiZWxGaWVsZCBpbXBsZW1lbnRzIE15SW50ZXJmYWNlPE9iamVjdD4geworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvZ2VuZXJpY3NIaWdobGlnaHRpbmcvU3RhdGljSW1wb3J0cy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9nZW5lcmljc0hpZ2hsaWdodGluZy9TdGF0aWNJbXBvcnRzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDQ3MzkxZAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvZ2VuZXJpY3NIaWdobGlnaHRpbmcvU3RhdGljSW1wb3J0cy5qYXZhCkBAIC0wLDAgKzEsMTYgQEAKKworaW1wb3J0IHN0YXRpYyBqYXZhLnV0aWwuQXJyYXlzLmFzTGlzdDsKK2ltcG9ydCBzdGF0aWMgamF2YS51dGlsLkFycmF5cy5zb3J0OworPHdhcm5pbmcgZGVzY3I9IlVudXNlZCBpbXBvcnQgc3RhdGVtZW50Ij5pbXBvcnQgc3RhdGljIGphdmEudXRpbC5BcnJheXMuYmluYXJ5U2VhcmNoOzwvd2FybmluZz4KKworcHVibGljIGNsYXNzIFN0YXRpY0ltcG9ydHMgeworICAgIHsKKyAgICAgICAgYXNMaXN0KG5ldyBPYmplY3RbXXt9KTsKKyAgICB9CisKKyAgICB2b2lkIG1ldGhvZCgpIHsKKyAgICAgICAgc29ydChuZXcgbG9uZ1swXSk7CisvLyAgICAgICAgc29ydDwgZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIG1ldGhvZCAnc29ydCgpJyI+KCk8IC9lcnJvcj47CisgICAgfQorCit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2dlbmVyaWNzSGlnaGxpZ2h0aW5nL1N0YXRpY092ZXJyaWRlLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2dlbmVyaWNzSGlnaGxpZ2h0aW5nL1N0YXRpY092ZXJyaWRlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTQwNDIzZWMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2dlbmVyaWNzSGlnaGxpZ2h0aW5nL1N0YXRpY092ZXJyaWRlLmphdmEKQEAgLTAsMCArMSw4IEBACitpbXBvcnQgamF2YS51dGlsLio7CisKK3B1YmxpYyBjbGFzcyBNeUNsYXNzIGltcGxlbWVudHMgQ29tcGFyYXRvcjxTdHJpbmc+IHsKKworICAgIDxlcnJvciBkZXNjcj0iU3RhdGljIG1ldGhvZCAnY29tcGFyZShTdHJpbmcsIFN0cmluZyknIGluICdNeUNsYXNzJyBjYW5ub3Qgb3ZlcnJpZGUgaW5zdGFuY2UgbWV0aG9kICdjb21wYXJlKFQsIFQpJyBpbiAnamF2YS51dGlsLkNvbXBhcmF0b3InIj5wdWJsaWMgc3RhdGljIGludCBjb21wYXJlKFN0cmluZyBhLCBTdHJpbmcgYik8L2Vycm9yPiB7CisgICAgICByZXR1cm4gNDI7CisgICAgfQorfSAKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2dlbmVyaWNzSGlnaGxpZ2h0aW5nL1N1cGVyTWV0aG9kQ2FsbFdpdGhFcmFzdXJlLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2dlbmVyaWNzSGlnaGxpZ2h0aW5nL1N1cGVyTWV0aG9kQ2FsbFdpdGhFcmFzdXJlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGJkNTFjMAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvZ2VuZXJpY3NIaWdobGlnaHRpbmcvU3VwZXJNZXRob2RDYWxsV2l0aEVyYXN1cmUuamF2YQpAQCAtMCwwICsxLDE4IEBACitpbXBvcnQgamF2YS51dGlsLlNldDsKKworaW50ZXJmYWNlIEludGVyZmFjZSB7CisgICAgdm9pZCBtZXRob2QoU2V0PD8+IHMpOworfQorCitjbGFzcyBTdXBlckNsYXNzIGltcGxlbWVudHMgSW50ZXJmYWNlIHsKKyAgICBwdWJsaWMgdm9pZCBtZXRob2QoU2V0IHMpIHsKKyAgICAgICAgLy8gZG8gbm90aGluZworICAgIH0KK30KKworY2xhc3MgU3ViQ2xhc3MgZXh0ZW5kcyBTdXBlckNsYXNzIHsKKyAgICBwdWJsaWMgdm9pZCBtZXRob2QoU2V0IHMpIHsKKyAgICAgICAgc3VwZXIubWV0aG9kKHMpOyAgLy9FUlJPUjogQWJzdHJhY3QgbWV0aG9kICdtZXRob2QoU2V0PD8+KScgY2Fubm90IGJlIGFjY2Vzc2VkIGRpcmVjdGx5CisgICAgfQorfQorCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2dlbmVyaWNzSGlnaGxpZ2h0aW5nL1N1cGVyV2lsZGNhcmRJc05vdFdpdGhpbkl0c0JvdW5kLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2dlbmVyaWNzSGlnaGxpZ2h0aW5nL1N1cGVyV2lsZGNhcmRJc05vdFdpdGhpbkl0c0JvdW5kLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODAzNWUzNwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvZ2VuZXJpY3NIaWdobGlnaHRpbmcvU3VwZXJXaWxkY2FyZElzTm90V2l0aGluSXRzQm91bmQuamF2YQpAQCAtMCwwICsxLDIwIEBACisKK2NsYXNzIFRvcEdlbmU8VD4geworfQorCitjbGFzcyBNaWRSYXcgZXh0ZW5kcyBUb3BHZW5lIHsKK30KKworY2xhc3MgQm90dG9tR2VuZTxUPiBleHRlbmRzIE1pZFJhdyB7Cit9CisKK2NsYXNzIEdlbmVUeXBlPFQgZXh0ZW5kcyBUb3BHZW5lPFN0cmluZz4+IHsKK30KKworY2xhc3MgR2VuZVVzZXIgeworICBwdWJsaWMgdm9pZCBzdWNjZXNzKEdlbmVUeXBlPD8gZXh0ZW5kcyBCb3R0b21HZW5lPFN0cmluZz4+IHApIHsKKyAgfQorCisgIHB1YmxpYyB2b2lkIGZhaWwoR2VuZVR5cGU8PGVycm9yIGRlc2NyPSJUeXBlIHBhcmFtZXRlciAnPyBzdXBlciBCb3R0b21HZW5lPFN0cmluZz4nIGlzIG5vdCB3aXRoaW4gaXRzIGJvdW5kOyBzaG91bGQgZXh0ZW5kICdUb3BHZW5lPGphdmEubGFuZy5TdHJpbmc+JyI+PyBzdXBlciBCb3R0b21HZW5lPFN0cmluZz48L2Vycm9yPj4gcCkgeworICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2dlbmVyaWNzSGlnaGxpZ2h0aW5nL1RoaXNBc0FjY2Vzc09iamVjdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9nZW5lcmljc0hpZ2hsaWdodGluZy9UaGlzQXNBY2Nlc3NPYmplY3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNTBmYjhhCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9nZW5lcmljc0hpZ2hsaWdodGluZy9UaGlzQXNBY2Nlc3NPYmplY3QuamF2YQpAQCAtMCwwICsxLDkgQEAKK2NsYXNzIE91dGVyIHsKKyAgICBwcml2YXRlIHZvaWQgZm9vKCkge30KKyAgICBjbGFzcyBJbm5lciBleHRlbmRzIE91dGVyIHsKKyAgICAgICAgeworICAgICAgICAgICB0aGlzLjxlcnJvciBkZXNjcj0iJ2ZvbygpJyBoYXMgcHJpdmF0ZSBhY2Nlc3MgaW4gJ091dGVyJyI+Zm9vPC9lcnJvcj4oKTsKKyAgICAgICAgICAgZm9vKCk7CisgICAgICAgIH0KKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9nZW5lcmljc0hpZ2hsaWdodGluZy9UeXBlQXJnc09uUmF3LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2dlbmVyaWNzSGlnaGxpZ2h0aW5nL1R5cGVBcmdzT25SYXcuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOGU0OGIyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9nZW5lcmljc0hpZ2hsaWdodGluZy9UeXBlQXJnc09uUmF3LmphdmEKQEAgLTAsMCArMSwyMSBAQAorY2xhc3MgR2VuZXJpY3NUZXN0IHsKKworICAgIHN0YXRpYyBjbGFzcyBTb21lQ2xhc3M8VT4geworICAgICAgICBwdWJsaWMgPFQ+IFQgZ2V0WCgpIHsKKyAgICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICB9CisgICAgICAgIHB1YmxpYyBTdHJpbmcgZigpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLjxTdHJpbmc+Z2V0WCgpOworICAgICAgICB9CisgICAgfQorCisKKworICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKworICAgICAgICBTdHJpbmcgdjEgPSBuZXcgU29tZUNsYXNzKCkuPGVycm9yIGRlc2NyPSJUeXBlIGFyZ3VtZW50cyBnaXZlbiBvbiBhIHJhdyBtZXRob2QiPjxTdHJpbmc+PC9lcnJvcj5nZXRYKCk7CisgICAgICAgIFN0cmluZyB2MiA9IG5ldyBTb21lQ2xhc3MoKS5mKCk7ICAvLworCisgICAgfQorCit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2dlbmVyaWNzSGlnaGxpZ2h0aW5nL1R5cGVBcmd1bWVudHNHaXZlbk9uQW5vbnltb3VzQ2xhc3NDcmVhdGlvbi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9nZW5lcmljc0hpZ2hsaWdodGluZy9UeXBlQXJndW1lbnRzR2l2ZW5PbkFub255bW91c0NsYXNzQ3JlYXRpb24uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMzIxNGUyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9nZW5lcmljc0hpZ2hsaWdodGluZy9UeXBlQXJndW1lbnRzR2l2ZW5PbkFub255bW91c0NsYXNzQ3JlYXRpb24uamF2YQpAQCAtMCwwICsxLDEyIEBACitjbGFzcyBDCit7CisgICAgT2JqZWN0IHggPSBuZXcgPGVycm9yIGRlc2NyPSJBbm9ueW1vdXMgY2xhc3MgaW1wbGVtZW50cyBpbnRlcmZhY2U7IGNhbm5vdCBoYXZlIHR5cGUgYXJndW1lbnRzIj48SW50ZWdlcj48L2Vycm9yPiBEKCkgeyB9OworICAgIE9iamVjdCB4MSA9IG5ldyA8SW50ZWdlcj4gUCgpIHsgfTsKKyAgICBPYmplY3QgeDIgPSBuZXcgPEludGVnZXI+IFUoKSB7IH07CisgICAgT2JqZWN0IHgzID0gbmV3IDxlcnJvciBkZXNjcj0iQW5vbnltb3VzIGNsYXNzIGltcGxlbWVudHMgaW50ZXJmYWNlOyBjYW5ub3QgaGF2ZSB0eXBlIGFyZ3VtZW50cyI+PEludGVnZXI+PC9lcnJvcj4gSSgpIHsgfTsKKyAgICBpbnRlcmZhY2UgRHt9CisgICAgYWJzdHJhY3QgY2xhc3MgUCB7fQorfQorCitpbnRlcmZhY2UgSSB7fQorY2xhc3MgVSB7fQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvZ2VuZXJpY3NIaWdobGlnaHRpbmcvVHlwZUFyZ3VtZW50c0dpdmVuT25SYXdUeXBlLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2dlbmVyaWNzSGlnaGxpZ2h0aW5nL1R5cGVBcmd1bWVudHNHaXZlbk9uUmF3VHlwZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE0N2ZkODYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2dlbmVyaWNzSGlnaGxpZ2h0aW5nL1R5cGVBcmd1bWVudHNHaXZlbk9uUmF3VHlwZS5qYXZhCkBAIC0wLDAgKzEsMzEgQEAKK2NsYXNzIEE8RD4geworICBhYnN0cmFjdCBjbGFzcyBDPFM+IHsKKyAgICA8VCBleHRlbmRzIEE+IHZvaWQgZm9vKFQuQzxJbnRlZ2VyPiB4KSB7CisgICAgICBJbnRlZ2VyIGJhciA9IHguYmFyKCk7CisgICAgfQorCisgICAgPFQgZXh0ZW5kcyBBPiB2b2lkIGZvbzEoQS5DPGVycm9yIGRlc2NyPSJUeXBlIGFyZ3VtZW50cyBnaXZlbiBvbiBhIHJhdyB0eXBlIj48SW50ZWdlcj48L2Vycm9yPiB4KSB7CisgICAgICBJbnRlZ2VyIGJhciA9IHguYmFyKCk7CisgICAgfQorCisgICAgPFQgZXh0ZW5kcyBBPiB2b2lkIGZvbzIoQTxTdHJpbmc+LkM8SW50ZWdlcj4geCkgeworICAgICAgSW50ZWdlciBiYXIgPSB4LmJhcigpOworICAgIH0KKworICAgIGFic3RyYWN0IFMgYmFyKCk7CisgIH0KK30KKworY2xhc3MgQTEgeworICBhYnN0cmFjdCBjbGFzcyBDPFM+IHsKKyAgICA8VCBleHRlbmRzIEExPiB2b2lkIGZvbyhULkM8SW50ZWdlcj4geCkgeworICAgICAgSW50ZWdlciBiYXIgPSB4LmJhcigpOworICAgIH0KKworICAgIDxUIGV4dGVuZHMgQTE+IHZvaWQgZm9vMShBMS5DPEludGVnZXI+IHgpIHsKKyAgICAgIEludGVnZXIgYmFyID0geC5iYXIoKTsKKyAgICB9CisKKyAgICBhYnN0cmFjdCBTIGJhcigpOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9nZW5lcmljc0hpZ2hsaWdodGluZy9UeXBlSW5mZXJlbmNlLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2dlbmVyaWNzSGlnaGxpZ2h0aW5nL1R5cGVJbmZlcmVuY2UuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMGQyNzQxCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9nZW5lcmljc0hpZ2hsaWdodGluZy9UeXBlSW5mZXJlbmNlLmphdmEKQEAgLTAsMCArMSw5NSBAQAoraW1wb3J0IGphdmEuaW8uRmlsZU5vdEZvdW5kRXhjZXB0aW9uOworaW1wb3J0IGphdmEudXRpbC4qOworCitpbnRlcmZhY2UgUHJpdmlsZWdlZEV4Y2VwdGlvbkFjdGlvbiA8RSBleHRlbmRzIEV4Y2VwdGlvbj4geworICAgIHZvaWQgcnVuKCkgdGhyb3dzIEU7Cit9CisKK2NsYXNzIEFjY2Vzc0NvbnRyb2xsZXIgeworICAgIHB1YmxpYyBzdGF0aWMgPEUgZXh0ZW5kcyBFeGNlcHRpb24+IE9iamVjdCBkb1ByaXZpbGVnZWQoUHJpdmlsZWdlZEV4Y2VwdGlvbkFjdGlvbjxFPiBhY3Rpb24pIHRocm93cyBFIHsKKyAgICAgICAgcmV0dXJuIG51bGw7CisgICAgfQorfQorY2xhc3MgVGVzdCB7CisgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworICAgICAgICB0cnkgeworICAgICAgICAgICAgQWNjZXNzQ29udHJvbGxlci5kb1ByaXZpbGVnZWQoCisgICAgICAgICAgICAgICAgICAgIG5ldyBQcml2aWxlZ2VkRXhjZXB0aW9uQWN0aW9uPEZpbGVOb3RGb3VuZEV4Y2VwdGlvbj4oKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBwdWJsaWMgdm9pZCBydW4oKSB0aHJvd3MgRmlsZU5vdEZvdW5kRXhjZXB0aW9uIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgIH0gY2F0Y2ggKEZpbGVOb3RGb3VuZEV4Y2VwdGlvbiBmKSB7CisgICAgICAgIH0KKyAgICB9CisKKy8vIEAjQCEgbW9jayBKREsgQ2xhc3MgZG9lcyBub3QgdGFrZSBwYXJhbXMKKy8vICAgIHN0YXRpYyA8VD4gVCBjcmVhdGUoQ2xhc3M8VD4gdCkgdGhyb3dzIEluc3RhbnRpYXRpb25FeGNlcHRpb24sIElsbGVnYWxBY2Nlc3NFeGNlcHRpb24geworLy8gICAgICAgIHJldHVybiB0Lm5ld0luc3RhbmNlKCk7CisvLyAgICB9Cit9CisKKy8vSURFQURFVi02MzkwCitjbGFzcyBQcmludGVyPFQ+IHsKKyAgICBwcml2YXRlIGZpbmFsIExpc3Q8VD4gX2VsZW1lbnRzOworCisgICAgcHJpdmF0ZSBQcmludGVyKGZpbmFsIENvbGxlY3Rpb248PyBleHRlbmRzIFQ+IGNvbCkgeworICAgICAgICBfZWxlbWVudHMgPSBuZXcgQXJyYXlMaXN0PFQ+KGNvbCk7CisgICAgfQorCisgICAgcHVibGljIHN0YXRpYyA8VD4gUHJpbnRlcjxUPiBidWlsZChmaW5hbCBDb2xsZWN0aW9uPD8gZXh0ZW5kcyBUPiBjb2wpIHsKKyAgICAgICAgcmV0dXJuIG5ldyBQcmludGVyPFQ+KGNvbCk7CisgICAgfQorCisgICAgcHVibGljIHN0YXRpYyA8VCwgUyBleHRlbmRzIFQ+IFByaW50ZXI8VD4gYnVpbGQoZmluYWwgUy4uLiBlbGVtZW50cykgeworICAgICAgICByZXR1cm4gbmV3IFByaW50ZXI8VD4oQXJyYXlzLmFzTGlzdChlbGVtZW50cykpOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIHByaW50KCkgeworICAgICAgICBmb3IgKGZpbmFsIFQgZWxlbWVudCA6IF9lbGVtZW50cykgeworICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKGVsZW1lbnQpOworICAgICAgICB9CisKKyAgICB9CisKKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihmaW5hbCBTdHJpbmdbXSBhcmdzKSB7CisgICAgICAgIGZpbmFsIFByaW50ZXI8Pz4gb2JqZWN0cyA9ICBidWlsZChJbnRlZ2VyLnZhbHVlT2YoNSksIEJvb2xlYW4uVFJVRSwgIkEgU3RyaW5nISIpOyAvL3RoaXMgaXMgT0sKKyAgICAgICAgIG9iamVjdHMucHJpbnQoKTsKKyAgICB9CisKK30KKy8vZW5kIG9mIElERUFERVYtNjM5MAorCisvL0lERUFERVYtNjczOAoraW50ZXJmYWNlIEkxPFAxIGV4dGVuZHMgSTE8UDEsUDI+LCBQMiBleHRlbmRzIEkyPFAxLFAyPj57fQoraW50ZXJmYWNlIEkyPFAxIGV4dGVuZHMgSTE8UDEsUDI+LCBQMiBleHRlbmRzIEkyPFAxLFAyPj57fQorCitjbGFzcyBDMSBpbXBsZW1lbnRzIEkxPEMxLEMyPnt9CitjbGFzcyBDMiBpbXBsZW1lbnRzIEkyPEMxLEMyPnt9CisKK2NsYXNzIFUgeworICAgIHB1YmxpYyBzdGF0aWMgPFAxIGV4dGVuZHMgSTE8UDEsUDI+LCBQMiBleHRlbmRzIEkyPFAxLFAyPj4gUDEgdGVzdChQMSBwMSkgeworICAgICAgICByZXR1cm4gbnVsbDsKKyAgICB9CisgICAgeworICAgICAgICBDMSBjID0gbmV3IEMxKCk7CisgICAgICAgIFUudGVzdChjKTsgLy90aGlzIHNob3VsZCBiZSBPSworICAgIH0KK30KKy8vZW5kIG9mIElERUFERVYtNjczOAorCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworcHVibGljIGNsYXNzIEVyciB7CisgICAgdm9pZCBmKCkgeworICAgICAgICBEZWNsW10gZXh0ZW5zaW9ucyA9IGdldEV4dGVuc2lvbnMoRGVjbC5FWFRFTlNJT05fUE9JTlRfTkFNRSk7CisgICAgfQorCisgICAgc3RhdGljIDxUPiBUW10gZ2V0RXh0ZW5zaW9ucyhMaXN0PFQ+IHRFeHRlbnNpb25Qb2ludE5hbWUpIHsKKyAgICAgICAgcmV0dXJuIG51bGw7CisgICAgfQorCisgICAgcHVibGljIHN0YXRpYyBjbGFzcyBEZWNsPEssVj4geworICAgICAgICBwdWJsaWMgc3RhdGljIExpc3Q8RGVjbD4gRVhURU5TSU9OX1BPSU5UX05BTUUgPSBudWxsOworICAgIH0KKworfQorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvZ2VuZXJpY3NIaWdobGlnaHRpbmcvVHlwZVBhcmFtZXRlckJvdW5kVmlzaWJpbGl0eS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9nZW5lcmljc0hpZ2hsaWdodGluZy9UeXBlUGFyYW1ldGVyQm91bmRWaXNpYmlsaXR5LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjFjYTEwMgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvZ2VuZXJpY3NIaWdobGlnaHRpbmcvVHlwZVBhcmFtZXRlckJvdW5kVmlzaWJpbGl0eS5qYXZhCkBAIC0wLDAgKzEsNTAgQEAKK2NsYXNzIEEgeworICAgcHJpdmF0ZSBpbnQgdmFsdWUgPSAxOworCisgICBzdGF0aWMgY2xhc3MgQjxUIGV4dGVuZHMgQT4geworICAgICAgdm9pZCBwcmludChUIHQpIHsKKyAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbih0LjxlcnJvciBkZXNjcj0iJ3ZhbHVlJyBoYXMgcHJpdmF0ZSBhY2Nlc3MgaW4gJ0EnIj52YWx1ZTwvZXJyb3I+KTsKKyAgICAgIH0KKyAgIH0KK30KKworYWJzdHJhY3QgY2xhc3MgRm9vPFQgZXh0ZW5kcyBGb288VD4+IHsKKyAgICBwcml2YXRlIGludCBmaWVsZDsKKworICAgIHB1YmxpYyBpbnQgYmFyKFQgdCl7CisgICAgICAgIHJldHVybiB0LjxlcnJvciBkZXNjcj0iJ2ZpZWxkJyBoYXMgcHJpdmF0ZSBhY2Nlc3MgaW4gJ0ZvbyciPmZpZWxkPC9lcnJvcj47CisgICAgfQorfQorCitwdWJsaWMgY2xhc3MgQnVnIHsKKyAgLy8gSWRlYSBpbmNvcnJlY3RseSBhbmFseXNlcyB0aGlzIGNvZGUgd2l0aCBKREsgNworICBwdWJsaWMgPFQgZXh0ZW5kcyBCdWc+IHZvaWQgZG9pdChUIG90aGVyKSB7CisgICAgLy8gT29wcywgd2FzIGxlZ2FsIHdpdGggSkRLIDYsIG5vIGxvbmdlciBsZWdhbCB3aXRoIEpESyA3CisgICAgb3RoZXIuPGVycm9yIGRlc2NyPSInbVByaXZhdGUoKScgaGFzIHByaXZhdGUgYWNjZXNzIGluICdCdWcnIj5tUHJpdmF0ZTwvZXJyb3I+KCk7CisgICAgLy8gUmVkdW5kYW50IHdpdGggSkRLIDYsIG5vdCBhIHJlZHVuZGFudCBjYXN0IHdpdGggSkRLIDcKKyAgICAoKEJ1ZylvdGhlcikubVByaXZhdGUoKTsKKyAgfQorCisgIC8vIElkZWEgY29ycmVjdGx5IGFuYWx5c2VzIHRoaXMgY29kZQorICBwdWJsaWMgdm9pZCBkb2l0MihTdWJDbGFzcyBvdGhlcikgeworICAgIC8vIE5vdCBsZWdhbCB3aXRoIEpESyA2IG9yIDcKKyAgICBvdGhlci48ZXJyb3IgZGVzY3I9IidtUHJpdmF0ZSgpJyBoYXMgcHJpdmF0ZSBhY2Nlc3MgaW4gJ0J1ZyciPm1Qcml2YXRlPC9lcnJvcj4oKTsKKyAgICAvLyBOb3QgcmVkdW5kYW50IHdpdGggSkRLIDYgb3IgNworICAgICgoQnVnKW90aGVyKS5tUHJpdmF0ZSgpOworICB9CisKKyAgcHJpdmF0ZSB2b2lkIG1Qcml2YXRlKCkgeworICB9Cit9CisKK2NsYXNzIFN1YkNsYXNzIGV4dGVuZHMgQnVnIHsKK30KKworY2xhc3MgQTY3Njc4Cit7CisgICAgICBwcml2YXRlIHZvaWQgZm9vKCl7fQorICAgICAgPFQgZXh0ZW5kcyBBNjc2NzggJiBDbG9uZWFibGU+IHZvaWQgYmFyKFQgeCkKKyAgICAgIHsKKyAgICAgICAgICB4LjxlcnJvciBkZXNjcj0iJ2ZvbygpJyBoYXMgcHJpdmF0ZSBhY2Nlc3MgaW4gJ0E2NzY3OCciPmZvbzwvZXJyb3I+KCk7CisgICAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9nZW5lcmljc0hpZ2hsaWdodGluZy9UeXBlUGFyYW1ldGVyQm91bmRWaXNpYmlsaXR5SmRrMTQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvZ2VuZXJpY3NIaWdobGlnaHRpbmcvVHlwZVBhcmFtZXRlckJvdW5kVmlzaWJpbGl0eUpkazE0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGYwNGVlNwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvZ2VuZXJpY3NIaWdobGlnaHRpbmcvVHlwZVBhcmFtZXRlckJvdW5kVmlzaWJpbGl0eUpkazE0LmphdmEKQEAgLTAsMCArMSwzMyBAQAorY2xhc3MgQSB7CisgICBwcml2YXRlIGludCB2YWx1ZSA9IDE7CisKKyAgIHN0YXRpYyBjbGFzcyBCPFQgZXh0ZW5kcyBBPiB7CisgICAgICB2b2lkIHByaW50KFQgdCkgeworICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKHQudmFsdWUpOworICAgICAgfQorICAgfQorfQorCitwdWJsaWMgY2xhc3MgQnVnIHsKKyAgLy8gSWRlYSBpbmNvcnJlY3RseSBhbmFseXNlcyB0aGlzIGNvZGUgd2l0aCBKREsgNworICBwdWJsaWMgPFQgZXh0ZW5kcyBCdWc+IHZvaWQgZG9pdChUIG90aGVyKSB7CisgICAgLy8gT29wcywgd2FzIGxlZ2FsIHdpdGggSkRLIDYsIG5vIGxvbmdlciBsZWdhbCB3aXRoIEpESyA3CisgICAgb3RoZXIubVByaXZhdGUoKTsKKyAgICAvLyBSZWR1bmRhbnQgd2l0aCBKREsgNiwgbm90IGEgcmVkdW5kYW50IGNhc3Qgd2l0aCBKREsgNworICAgICgoQnVnKW90aGVyKS5tUHJpdmF0ZSgpOworICB9CisKKyAgLy8gSWRlYSBjb3JyZWN0bHkgYW5hbHlzZXMgdGhpcyBjb2RlCisgIHB1YmxpYyB2b2lkIGRvaXQyKFN1YkNsYXNzIG90aGVyKSB7CisgICAgLy8gTm90IGxlZ2FsIHdpdGggSkRLIDYgb3IgNworICAgIG90aGVyLjxlcnJvciBkZXNjcj0iJ21Qcml2YXRlKCknIGhhcyBwcml2YXRlIGFjY2VzcyBpbiAnQnVnJyI+bVByaXZhdGU8L2Vycm9yPigpOworICAgIC8vIE5vdCByZWR1bmRhbnQgd2l0aCBKREsgNiBvciA3CisgICAgKChCdWcpb3RoZXIpLm1Qcml2YXRlKCk7CisgIH0KKworICBwcml2YXRlIHZvaWQgbVByaXZhdGUoKSB7CisgIH0KK30KKworY2xhc3MgU3ViQ2xhc3MgZXh0ZW5kcyBCdWcgeworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvZ2VuZXJpY3NIaWdobGlnaHRpbmcvVHlwZVBhcmFtZXRlckJvdW5kc0xpc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvZ2VuZXJpY3NIaWdobGlnaHRpbmcvVHlwZVBhcmFtZXRlckJvdW5kc0xpc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MDZhZGQwCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9nZW5lcmljc0hpZ2hsaWdodGluZy9UeXBlUGFyYW1ldGVyQm91bmRzTGlzdC5qYXZhCkBAIC0wLDAgKzEsMzMgQEAKK2NsYXNzIEM8VCBleHRlbmRzIFJ1bm5hYmxlJjxlcnJvciBkZXNjcj0iSW50ZXJmYWNlIGV4cGVjdGVkIGhlcmUiPkV4Y2VwdGlvbjwvZXJyb3I+LFU+IHsKKworfQorCitjbGFzcyBTdHVmZjxYIGV4dGVuZHMgU3R1ZmYgJiBSdW5uYWJsZT4geworICAgIDxULCBWIGV4dGVuZHMgVCAmIDxlcnJvciBkZXNjcj0iVHlwZSBwYXJhbWV0ZXIgY2Fubm90IGJlIGZvbGxvd2VkIGJ5IG90aGVyIGJvdW5kcyI+UnVubmFibGU8L2Vycm9yPj4gVCBtZXRob2QoViB2KSB7CisgICAgICAgIHJldHVybiBudWxsOworICAgIH0KKworICAgIDxUIGV4dGVuZHMgWCAmIDxlcnJvciBkZXNjcj0iVHlwZSBwYXJhbWV0ZXIgY2Fubm90IGJlIGZvbGxvd2VkIGJ5IG90aGVyIGJvdW5kcyI+UnVubmFibGU8L2Vycm9yPiAmIDxlcnJvciBkZXNjcj0iVHlwZSBwYXJhbWV0ZXIgY2Fubm90IGJlIGZvbGxvd2VkIGJ5IG90aGVyIGJvdW5kcyI+Q29tcGFyYWJsZTwvZXJyb3I+PiB2b2lkIGYoVCB0KSB7CisKKyAgICB9CisKKyAgICA8VCBleHRlbmRzIFN0dWZmICYgUnVubmFibGUgJiBDb21wYXJhYmxlPiB2b2lkIGYyKFQgdCkgeworCisgICAgfQorICAgIDxUIGV4dGVuZHMgUnVubmFibGUgJiBDb21wYXJhYmxlPiB2b2lkIGYzKFQgdCkgeworCisgICAgfQorfQorCisvLy8vLy8vLy8vLy8vLy8vCitwdWJsaWMgY2xhc3MgVHlwZVBhcmFtZXRlcnMgeworICAgIGNsYXNzIFgge30KKyAgICBzdGF0aWMgPFQgZXh0ZW5kcyBYPiB2b2lkIGYoQ2xhc3M8VD4gdCl7fQorCisgICAgc3RhdGljIHsKKyAgICAgICAgZihYLmNsYXNzKTsKKyAgICB9Cit9CitjbGFzcyBUeXByIHsKKyAgPFQgZXh0ZW5kcyBUeXBlUGFyYW1ldGVycy5YPiB2b2lkIGYoKSB7fQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9nZW5lcmljc0hpZ2hsaWdodGluZy9UeXBlV2l0aGluSXRzV2lsZGNhcmRCb3VuZC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9nZW5lcmljc0hpZ2hsaWdodGluZy9UeXBlV2l0aGluSXRzV2lsZGNhcmRCb3VuZC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ3ZWNiM2IKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2dlbmVyaWNzSGlnaGxpZ2h0aW5nL1R5cGVXaXRoaW5JdHNXaWxkY2FyZEJvdW5kLmphdmEKQEAgLTAsMCArMSwzMTcgQEAKK3B1YmxpYyBjbGFzcyBXaXRoaW5nQm91bmRzIHsKKyAgICBpbnRlcmZhY2UgSSB7CisgICAgfQorICAgIGludGVyZmFjZSBJMSB7CisgICAgfQorCisgICAgdm9pZCB0ZXN0RTEoKSB7CisgICAgICAgIGNsYXNzIEEgeworICAgICAgICB9CisgICAgICAgIGNsYXNzIEIgZXh0ZW5kcyBBIHsKKyAgICAgICAgfQorICAgICAgICBjbGFzcyBUb0NoZWNrRXh0ZW5kczxUVFQgZXh0ZW5kcyBBPiB7CisgICAgICAgIH0KKworICAgICAgICBUb0NoZWNrRXh0ZW5kczw/IGV4dGVuZHMgQj4gcHI7CisgICAgfQorCisgICAgdm9pZCB0ZXN0RVJlYzEoKSB7CisgICAgICAgIGNsYXNzIEEgeworICAgICAgICB9CisgICAgICAgIGNsYXNzIEI8Sz4gZXh0ZW5kcyBBIHsKKyAgICAgICAgfQorICAgICAgICBjbGFzcyBDPFk+e30KKyAgICAgICAgY2xhc3MgVG9DaGVja0V4dGVuZHM8VFRUIGV4dGVuZHMgQT4geworICAgICAgICB9CisKKyAgICAgICAgVG9DaGVja0V4dGVuZHM8PGVycm9yIGRlc2NyPSJUeXBlIHBhcmFtZXRlciAnPyBleHRlbmRzIEM8PyBleHRlbmRzIEM+JyBpcyBub3Qgd2l0aGluIGl0cyBib3VuZDsgc2hvdWxkIGV4dGVuZCAnQSciPj8gIGV4dGVuZHMgQzw/IGV4dGVuZHMgQz48L2Vycm9yPj4gcHI7CisgICAgICAgIFRvQ2hlY2tFeHRlbmRzPD8gZXh0ZW5kcyBCPD8gZXh0ZW5kcyBDPj4gcHIxOworICAgIH0KKworCisgICAgdm9pZCB0ZXN0RTIoKSB7CisgICAgICAgIGNsYXNzIEEgeworICAgICAgICB9CisgICAgICAgIGNsYXNzIEIgeworICAgICAgICB9CisgICAgICAgIGNsYXNzIFRvQ2hlY2tFeHRlbmRzPFRUVCBleHRlbmRzIEE+IHsKKyAgICAgICAgfQorCisgICAgICAgIFRvQ2hlY2tFeHRlbmRzPDxlcnJvciBkZXNjcj0iVHlwZSBwYXJhbWV0ZXIgJz8gZXh0ZW5kcyBCJyBpcyBub3Qgd2l0aGluIGl0cyBib3VuZDsgc2hvdWxkIGV4dGVuZCAnQSciPj8gZXh0ZW5kcyBCPC9lcnJvcj4+IHByOworICAgIH0KKworICAgIHZvaWQgdGVzdEUyMigpIHsKKyAgICAgICAgY2xhc3MgQiB7CisgICAgICAgIH0KKyAgICAgICAgY2xhc3MgQSBleHRlbmRzIEIgeworICAgICAgICB9CisgICAgICAgIGNsYXNzIFRvQ2hlY2tFeHRlbmRzPFRUVCBleHRlbmRzIEE+IHsKKyAgICAgICAgfQorCisgICAgICAgIFRvQ2hlY2tFeHRlbmRzPD8gZXh0ZW5kcyBCPiBwcjsKKyAgICB9CisKKworICAgIHZvaWQgdGVzdEUyMygpIHsKKyAgICAgICAgY2xhc3MgQSB7CisgICAgICAgIH0KKyAgICAgICAgY2xhc3MgVG9DaGVja0V4dGVuZHM8VFRUIGV4dGVuZHMgQT4geworICAgICAgICB9CisKKyAgICAgICAgVG9DaGVja0V4dGVuZHM8PyBleHRlbmRzIEk+IHByOworICAgIH0KKworICAgIHZvaWQgdGVzdEUyNCgpIHsKKyAgICAgICAgZmluYWwgY2xhc3MgQSB7CisgICAgICAgIH0KKyAgICAgICAgY2xhc3MgVG9DaGVja0V4dGVuZHM8VFRUIGV4dGVuZHMgQT4geworICAgICAgICB9CisKKyAgICAgICAgVG9DaGVja0V4dGVuZHM8PGVycm9yIGRlc2NyPSJUeXBlIHBhcmFtZXRlciAnPyBleHRlbmRzIEknIGlzIG5vdCB3aXRoaW4gaXRzIGJvdW5kOyBzaG91bGQgZXh0ZW5kICdBJyI+PyBleHRlbmRzIEk8L2Vycm9yPj4gcHI7CisgICAgfQorCisKKyAgICB2b2lkIHRlc3RFMjUoKSB7CisgICAgICBjbGFzcyBCIHsKKyAgICAgICAgdm9pZCBmb28oKSB7CisgICAgICAgICAgdGhpcy48SXRlcmFibGU+YmFyKCk7CisgICAgICAgIH0KKworICAgICAgICA8VCBleHRlbmRzIEl0ZXJhYmxlPFN0cmluZz4+IHZvaWQgYmFyKCkgeworICAgICAgICB9CisgICAgICB9CisgICAgfQorCisgICAgdm9pZCB0ZXN0RTI2KCkgeworICAgICAgY2xhc3MgQTxUPnt9CisgICAgICBjbGFzcyBCIHsKKyAgICAgICAgdm9pZCBmb28oKSB7CisgICAgICAgICAgdGhpcy48QT5iYXIoKTsKKyAgICAgICAgfQorCisgICAgICAgIDxUIGV4dGVuZHMgQTxTdHJpbmc+PiB2b2lkIGJhcigpIHsKKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKworICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgdm9pZCB0ZXN0RTMoKSB7CisgICAgICAgIGNsYXNzIEEgeworICAgICAgICB9CisgICAgICAgIGNsYXNzIFRvQ2hlY2tFeHRlbmRzPFRUVCBleHRlbmRzIEk+IHsKKyAgICAgICAgfQorCisgICAgICAgIFRvQ2hlY2tFeHRlbmRzPD8gZXh0ZW5kcyBBPiBwcjsKKyAgICB9CisKKyAgICB2b2lkIHRlc3RFNCgpIHsKKyAgICAgICAgZmluYWwgY2xhc3MgQSB7CisgICAgICAgIH0KKyAgICAgICAgY2xhc3MgVG9DaGVja0V4dGVuZHM8VFRUIGV4dGVuZHMgST4geworICAgICAgICB9CisKKyAgICAgICAgVG9DaGVja0V4dGVuZHM8PGVycm9yIGRlc2NyPSJUeXBlIHBhcmFtZXRlciAnPyBleHRlbmRzIEEnIGlzIG5vdCB3aXRoaW4gaXRzIGJvdW5kOyBzaG91bGQgZXh0ZW5kICdXaXRoaW5nQm91bmRzLkknIj4/IGV4dGVuZHMgQTwvZXJyb3I+PiBwcjsKKyAgICB9CisKKyAgICB2b2lkIHRlc3RFNSgpIHsKKyAgICAgICAgZmluYWwgY2xhc3MgQSBpbXBsZW1lbnRzIEkgeworICAgICAgICB9CisgICAgICAgIGNsYXNzIFRvQ2hlY2tFeHRlbmRzPFRUVCBleHRlbmRzIEk+IHsKKyAgICAgICAgfQorCisgICAgICAgIFRvQ2hlY2tFeHRlbmRzPD8gZXh0ZW5kcyBBPiBwcjsKKyAgICB9CisKKworICAgIGludGVyZmFjZSBBSW50ZXJmYWNlIHsKKyAgICB9CisgICAgdm9pZCB0ZXN0RTYoKSB7CisKKyAgICAgICAgY2xhc3MgVG9DaGVja0V4dGVuZHM8VFRUIGV4dGVuZHMgST4geworICAgICAgICB9CisKKyAgICAgICAgVG9DaGVja0V4dGVuZHM8PyBleHRlbmRzIEFJbnRlcmZhY2U+IHByOworICAgIH0KKworICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIHZvaWQgdGVzdFMxKCkgeworICAgICAgICBjbGFzcyBBIHsKKyAgICAgICAgfQorICAgICAgICBjbGFzcyBCIGV4dGVuZHMgQSB7CisgICAgICAgIH0KKyAgICAgICAgY2xhc3MgVG9DaGVja0V4dGVuZHM8VFRUIGV4dGVuZHMgQT4geworICAgICAgICB9CisKKyAgICAgICAgVG9DaGVja0V4dGVuZHM8PyBzdXBlciBCPiBwcjsKKyAgICB9CisKKyAgICB2b2lkIHRlc3RTMigpIHsKKyAgICAgICAgY2xhc3MgQSB7CisgICAgICAgIH0KKyAgICAgICAgY2xhc3MgQiB7CisgICAgICAgIH0KKyAgICAgICAgY2xhc3MgVG9DaGVja0V4dGVuZHM8VFRUIGV4dGVuZHMgQT4geworICAgICAgICB9CisKKyAgICAgICAgVG9DaGVja0V4dGVuZHM8PGVycm9yIGRlc2NyPSJUeXBlIHBhcmFtZXRlciAnPyBzdXBlciBCJyBpcyBub3Qgd2l0aGluIGl0cyBib3VuZDsgc2hvdWxkIGV4dGVuZCAnQSciPj8gc3VwZXIgQjwvZXJyb3I+PiBwcjsKKyAgICB9CisKKyAgICB2b2lkIHRlc3RTMygpIHsKKyAgICAgICAgY2xhc3MgQSB7CisgICAgICAgIH0KKyAgICAgICAgY2xhc3MgQiBleHRlbmRzIEEgeworICAgICAgICB9CisgICAgICAgIGNsYXNzIFRvQ2hlY2tFeHRlbmRzPFRUVCBleHRlbmRzIEI+IHsKKyAgICAgICAgfQorCisgICAgICAgIFRvQ2hlY2tFeHRlbmRzPDxlcnJvciBkZXNjcj0iVHlwZSBwYXJhbWV0ZXIgJz8gc3VwZXIgQScgaXMgbm90IHdpdGhpbiBpdHMgYm91bmQ7IHNob3VsZCBleHRlbmQgJ0InIj4/IHN1cGVyIEE8L2Vycm9yPj4gcHI7CisgICAgfQorCisgIHZvaWQgdGVzdE1pc2MoKSB7CisgICAgIGNsYXNzIEE8VCwgUyBleHRlbmRzIFQ+IHt9CisgICAgIGNsYXNzIGkge30KKyAgICAgZmluYWwgY2xhc3MgaWkgZXh0ZW5kcyBpIHt9CisKKyAgICAgQTxTdHJpbmcsIFN0cmluZz4gcHI0OworICAgICBBPEludGVnZXIsIDxlcnJvciBkZXNjcj0iVHlwZSBwYXJhbWV0ZXIgJ2phdmEubGFuZy5TdHJpbmcnIGlzIG5vdCB3aXRoaW4gaXRzIGJvdW5kOyBzaG91bGQgZXh0ZW5kICdqYXZhLmxhbmcuSW50ZWdlciciPlN0cmluZzwvZXJyb3I+PiBwcjU7CisgICAgIEE8U3RyaW5nLCA/IGV4dGVuZHMgU3RyaW5nPiBwcjUxOworICAgICBBPEludGVnZXIsIDxlcnJvciBkZXNjcj0iVHlwZSBwYXJhbWV0ZXIgJz8gZXh0ZW5kcyBTdHJpbmcnIGlzIG5vdCB3aXRoaW4gaXRzIGJvdW5kOyBzaG91bGQgZXh0ZW5kICdqYXZhLmxhbmcuSW50ZWdlciciPj8gZXh0ZW5kcyBTdHJpbmc8L2Vycm9yPj4gcHI1MjsKKyAgICAgQTxTdHJpbmcsID8gc3VwZXIgU3RyaW5nPiBwcjUzOworICAgICBBPGlpLCA8ZXJyb3IgZGVzY3I9IlR5cGUgcGFyYW1ldGVyICdpJyBpcyBub3Qgd2l0aGluIGl0cyBib3VuZDsgc2hvdWxkIGV4dGVuZCAnaWknIj5pPC9lcnJvcj4+IHByNTQ7CisgICAgIEE8aSwgaWk+IHByNTU7CisgICAgIEE8aSwgPyBleHRlbmRzIGlpPiBwcjU2OworICAgICBBPGlpLCA/IGV4dGVuZHMgaT4gcHI1NzsKKyAgICAgQTxpLCA/IHN1cGVyIGlpPiBwcjU4OworICAgICBBPGlpLCA8ZXJyb3IgZGVzY3I9IlR5cGUgcGFyYW1ldGVyICc/IHN1cGVyIGknIGlzIG5vdCB3aXRoaW4gaXRzIGJvdW5kOyBzaG91bGQgZXh0ZW5kICdpaSciPj8gc3VwZXIgaTwvZXJyb3I+PiBwcjU5OworICAgICBBPGksIDxlcnJvciBkZXNjcj0iVHlwZSBwYXJhbWV0ZXIgJz8gZXh0ZW5kcyBBPGksIGk+JyBpcyBub3Qgd2l0aGluIGl0cyBib3VuZDsgc2hvdWxkIGV4dGVuZCAnaSciPj8gZXh0ZW5kcyBBPGksIGk+PC9lcnJvcj4+IHByNTEwOworICAgICBBPGksIDxlcnJvciBkZXNjcj0iVHlwZSBwYXJhbWV0ZXIgJ2lpW10nIGlzIG5vdCB3aXRoaW4gaXRzIGJvdW5kOyBzaG91bGQgZXh0ZW5kICdpJyI+aWlbXTwvZXJyb3I+PiBwcjUxMTsKKyAgICAgQTxpLCA/PiBwcjUxMjsKKworICAgICBBPD8sID8+IHByMzA7CisgICAgIEE8PywgPGVycm9yIGRlc2NyPSJUeXBlIHBhcmFtZXRlciAnaScgaXMgbm90IHdpdGhpbiBpdHMgYm91bmQ7IHNob3VsZCBleHRlbmQgJz8nIj5pPC9lcnJvcj4+IHByMzsKKyAgICAgQTw/IGV4dGVuZHMgT2JqZWN0LCBpPiBwcjMzMDsKKyAgICAgQTw/LCA/IGV4dGVuZHMgaWk+IHByMjsKKyAgICAgQTw/LCA8ZXJyb3IgZGVzY3I9IlR5cGUgcGFyYW1ldGVyICc/IHN1cGVyIFN0cmluZycgaXMgbm90IHdpdGhpbiBpdHMgYm91bmQ7IHNob3VsZCBleHRlbmQgJz8nIj4/IHN1cGVyIFN0cmluZzwvZXJyb3I+PiBwcjEwOworICAgICBBPD8sIDxlcnJvciBkZXNjcj0iVHlwZSBwYXJhbWV0ZXIgJ0EnIGlzIG5vdCB3aXRoaW4gaXRzIGJvdW5kOyBzaG91bGQgZXh0ZW5kICc/JyI+QTw/LCA/PjwvZXJyb3I+PiBwcjMxOworICAgICBBPD8sIDxlcnJvciBkZXNjcj0iVHlwZSBwYXJhbWV0ZXIgJ2lpW10nIGlzIG5vdCB3aXRoaW4gaXRzIGJvdW5kOyBzaG91bGQgZXh0ZW5kICc/JyI+aWlbXTwvZXJyb3I+PiBwcjMyOworICAgICBBPD8sIDxlcnJvciBkZXNjcj0iVHlwZSBwYXJhbWV0ZXIgJ0EnIGlzIG5vdCB3aXRoaW4gaXRzIGJvdW5kOyBzaG91bGQgZXh0ZW5kICc/JyI+QTxpLCBpPjwvZXJyb3I+PiBwcjMzOworCisgICAgIEE8PyBleHRlbmRzIGksIGk+IHByNjsKKyAgICAgQTw/IGV4dGVuZHMgaWksIDxlcnJvciBkZXNjcj0iVHlwZSBwYXJhbWV0ZXIgJ2knIGlzIG5vdCB3aXRoaW4gaXRzIGJvdW5kOyBzaG91bGQgZXh0ZW5kICc/IGV4dGVuZHMgaWknIj5pPC9lcnJvcj4+IHByNngxOworICAgICBBPD8gZXh0ZW5kcyBpLCBpaT4gcHI2eDI7CisgICAgIEE8PyBleHRlbmRzIGlpLCBpaT4gcHI2eDM7CisgICAgIEE8PyBleHRlbmRzIGksIDxlcnJvciBkZXNjcj0iVHlwZSBwYXJhbWV0ZXIgJ2phdmEubGFuZy5JbnRlZ2VyJyBpcyBub3Qgd2l0aGluIGl0cyBib3VuZDsgc2hvdWxkIGV4dGVuZCAnPyBleHRlbmRzIGknIj5JbnRlZ2VyPC9lcnJvcj4+IHByODsKKworICAgICBBPD8gZXh0ZW5kcyBpLCA8ZXJyb3IgZGVzY3I9IlR5cGUgcGFyYW1ldGVyICc/IGV4dGVuZHMgU3RyaW5nJyBpcyBub3Qgd2l0aGluIGl0cyBib3VuZDsgc2hvdWxkIGV4dGVuZCAnPyBleHRlbmRzIGknIj4/IGV4dGVuZHMgU3RyaW5nPC9lcnJvcj4+IHByMTI7CisgICAgIEE8PyBleHRlbmRzIGksID8gZXh0ZW5kcyBpPiBwcjEzOworICAgICBBPD8gZXh0ZW5kcyBpLCA/IGV4dGVuZHMgaWk+IHByMTQ7CisgICAgIEE8PyBleHRlbmRzIGlpLCA/IGV4dGVuZHMgaT4gcHIxM3gzOworICAgICBBPD8gZXh0ZW5kcyBpaSwgPyBleHRlbmRzIGlpPiBwcjEzeDQ7CisKKworICAgICBBPD8gZXh0ZW5kcyBpLCA/IHN1cGVyIGk+IHByMTk7CisgICAgIEE8PyBleHRlbmRzIGksID8gc3VwZXIgaWk+IHByMTEwOworICAgICBBPD8gZXh0ZW5kcyBpaSwgPyBzdXBlciBpaT4gcHIxMXgwOworICAgICBBPD8gZXh0ZW5kcyBpaSwgPGVycm9yIGRlc2NyPSJUeXBlIHBhcmFtZXRlciAnPyBzdXBlciBpJyBpcyBub3Qgd2l0aGluIGl0cyBib3VuZDsgc2hvdWxkIGV4dGVuZCAnPyBleHRlbmRzIGlpJyI+PyBzdXBlciBpPC9lcnJvcj4+IHByMTExOworCisgICAgIEE8PyBleHRlbmRzIGksID8+IHByMTU7CisgICAgIEE8PyBleHRlbmRzIGksIDxlcnJvciBkZXNjcj0iVHlwZSBwYXJhbWV0ZXIgJ2lpW10nIGlzIG5vdCB3aXRoaW4gaXRzIGJvdW5kOyBzaG91bGQgZXh0ZW5kICc/IGV4dGVuZHMgaSciPmlpW108L2Vycm9yPj4gcHIxNjsKKyAgICAgQTw/IGV4dGVuZHMgaSwgPGVycm9yIGRlc2NyPSJUeXBlIHBhcmFtZXRlciAnQScgaXMgbm90IHdpdGhpbiBpdHMgYm91bmQ7IHNob3VsZCBleHRlbmQgJz8gZXh0ZW5kcyBpJyI+QTw/LCA/PjwvZXJyb3I+PiBwcjE3OworICAgICBBPD8gZXh0ZW5kcyBpLCA8ZXJyb3IgZGVzY3I9IlR5cGUgcGFyYW1ldGVyICdBJyBpcyBub3Qgd2l0aGluIGl0cyBib3VuZDsgc2hvdWxkIGV4dGVuZCAnPyBleHRlbmRzIGknIj5BPGlpLCBpaT48L2Vycm9yPj4gcHIxODsKKyAgICAgQTw/IGV4dGVuZHMgaWksIDxlcnJvciBkZXNjcj0iVHlwZSBwYXJhbWV0ZXIgJz8gc3VwZXIgU3RyaW5nJyBpcyBub3Qgd2l0aGluIGl0cyBib3VuZDsgc2hvdWxkIGV4dGVuZCAnPyBleHRlbmRzIGlpJyI+PyBzdXBlciBTdHJpbmc8L2Vycm9yPj4gcHIxMTI7CisgICAgIEE8PyBleHRlbmRzIGlpLCA8ZXJyb3IgZGVzY3I9IlR5cGUgcGFyYW1ldGVyICc/IHN1cGVyIEE8aSwgaT4nIGlzIG5vdCB3aXRoaW4gaXRzIGJvdW5kOyBzaG91bGQgZXh0ZW5kICc/IGV4dGVuZHMgaWknIj4/IHN1cGVyIEE8aSwgaT48L2Vycm9yPj4gcHIxMTM7CisKKyAgICAgQTw/IHN1cGVyIGksIGk+IHByNzAxOworICAgICBBPD8gc3VwZXIgaSwgPGVycm9yIGRlc2NyPSJUeXBlIHBhcmFtZXRlciAnamF2YS5sYW5nLlN0cmluZycgaXMgbm90IHdpdGhpbiBpdHMgYm91bmQ7IHNob3VsZCBleHRlbmQgJz8gc3VwZXIgaSciPlN0cmluZzwvZXJyb3I+PiBwcjcyOworICAgICBBPD8gc3VwZXIgaSwgPz4gcHI3MzsKKyAgICAgQTw/IHN1cGVyIGksIDxlcnJvciBkZXNjcj0iVHlwZSBwYXJhbWV0ZXIgJ2lpW10nIGlzIG5vdCB3aXRoaW4gaXRzIGJvdW5kOyBzaG91bGQgZXh0ZW5kICc/IHN1cGVyIGknIj5paVtdPC9lcnJvcj4+IHByNzQ7CisgICAgIEE8PyBzdXBlciBpLCA8ZXJyb3IgZGVzY3I9IlR5cGUgcGFyYW1ldGVyICc/IGV4dGVuZHMgU3RyaW5nJyBpcyBub3Qgd2l0aGluIGl0cyBib3VuZDsgc2hvdWxkIGV4dGVuZCAnPyBzdXBlciBpJyI+PyBleHRlbmRzIFN0cmluZzwvZXJyb3I+PiBwcjc1OworICAgICBBPD8gc3VwZXIgaSwgPyBleHRlbmRzIGk+IHByNzY7CisgICAgIEE8PyBzdXBlciBpaSwgPyBleHRlbmRzIGk+IHByNzc7CisgICAgIEE8PyBzdXBlciBpaSwgPyBleHRlbmRzIGlpPiBwcjc4OworICAgICBBPD8gc3VwZXIgaSwgPyBzdXBlciBpPiBwcjc5OworICAgICBBPD8gc3VwZXIgaSwgPyBzdXBlciBpaT4gcHI3OTE7CisgICAgIEE8PyBzdXBlciBpaSwgPyBzdXBlciBpaT4gcHI3MTM7CisgICAgIEE8PyBzdXBlciBpLCA8ZXJyb3IgZGVzY3I9IlR5cGUgcGFyYW1ldGVyICc/IHN1cGVyIFN0cmluZycgaXMgbm90IHdpdGhpbiBpdHMgYm91bmQ7IHNob3VsZCBleHRlbmQgJz8gc3VwZXIgaSciPj8gc3VwZXIgU3RyaW5nPC9lcnJvcj4+IHByNzEyOworICAgICBBPD8gc3VwZXIgaWksIDxlcnJvciBkZXNjcj0iVHlwZSBwYXJhbWV0ZXIgJz8gc3VwZXIgaScgaXMgbm90IHdpdGhpbiBpdHMgYm91bmQ7IHNob3VsZCBleHRlbmQgJz8gc3VwZXIgaWknIj4/IHN1cGVyIGk8L2Vycm9yPj4gcHI3MTA7CisgICAgIEE8PyBzdXBlciAgaWksIDxlcnJvciBkZXNjcj0iVHlwZSBwYXJhbWV0ZXIgJ2knIGlzIG5vdCB3aXRoaW4gaXRzIGJvdW5kOyBzaG91bGQgZXh0ZW5kICc/IHN1cGVyIGlpJyI+aTwvZXJyb3I+PiBwcjcwOworICAgICBBPD8gc3VwZXIgaSwgaWk+IHByNzE7CisgICAgIEE8PyBzdXBlciBpLCA/IGV4dGVuZHMgaWk+IHByNzExOworCisgICAgIEE8aVtdLCBpW10+IGExOworICAgICBBPGlbXSwgPGVycm9yIGRlc2NyPSJUeXBlIHBhcmFtZXRlciAnamF2YS5sYW5nLk9iamVjdCcgaXMgbm90IHdpdGhpbiBpdHMgYm91bmQ7IHNob3VsZCBleHRlbmQgJ2lbXSciPk9iamVjdDwvZXJyb3I+PiBhMjsKKyAgICAgQTxpW10sIGlpW10+IGEzOworICAgICBBPGlpW10sIDxlcnJvciBkZXNjcj0iVHlwZSBwYXJhbWV0ZXIgJ2lbXScgaXMgbm90IHdpdGhpbiBpdHMgYm91bmQ7IHNob3VsZCBleHRlbmQgJ2lpW10nIj5pW108L2Vycm9yPj4gYTQ7CisKKyAgICAgQTxpW10sIDxlcnJvciBkZXNjcj0iVHlwZSBwYXJhbWV0ZXIgJ2ludFtdJyBpcyBub3Qgd2l0aGluIGl0cyBib3VuZDsgc2hvdWxkIGV4dGVuZCAnaVtdJyI+aW50W108L2Vycm9yPj4gYTU7CisgICAgIEE8T2JqZWN0LCBpbnRbXT4gYTY7CisgICAgIEE8Q2xvbmVhYmxlLCBpbnRbXT4gYTc7CisgICAgIEE8amF2YS5pby5TZXJpYWxpemFibGUsIGludFtdPiBhODsKKyAgICAgQTxDbG9uZWFibGVbXSwgPGVycm9yIGRlc2NyPSJUeXBlIHBhcmFtZXRlciAnaW50W10nIGlzIG5vdCB3aXRoaW4gaXRzIGJvdW5kOyBzaG91bGQgZXh0ZW5kICdqYXZhLmxhbmcuQ2xvbmVhYmxlW10nIj5pbnRbXTwvZXJyb3I+PiBhOTsKKyAgICAgQTxDbG9uZWFibGVbXSwgaW50W11bXT4gYTEwOworICAgICBBPENsb25lYWJsZVtdW10sIGludFtdW11bXT4gYTExOworICAgICBBPENsb25lYWJsZVtdLCA8ZXJyb3IgZGVzY3I9IlR5cGUgcGFyYW1ldGVyICdpW10nIGlzIG5vdCB3aXRoaW4gaXRzIGJvdW5kOyBzaG91bGQgZXh0ZW5kICdqYXZhLmxhbmcuQ2xvbmVhYmxlW10nIj5pW108L2Vycm9yPj4gYTEyOworICAgICBBPENsb25lYWJsZVtdLCBpW11bXT4gYTEzOworCisgICAgIEE8PyBzdXBlciBpW10sIGlpW10+IGExNDsKKyAgICAgQTw/IHN1cGVyIGlbXSwgaVtdPiBhMTQwOworICAgICBBPD8gc3VwZXIgaWlbXSwgPGVycm9yIGRlc2NyPSJUeXBlIHBhcmFtZXRlciAnaVtdJyBpcyBub3Qgd2l0aGluIGl0cyBib3VuZDsgc2hvdWxkIGV4dGVuZCAnPyBzdXBlciBpaVtdJyI+aVtdPC9lcnJvcj4+IGExNDE7CisgICAgIEE8PyBzdXBlciBpW10sIDxlcnJvciBkZXNjcj0iVHlwZSBwYXJhbWV0ZXIgJ2knIGlzIG5vdCB3aXRoaW4gaXRzIGJvdW5kOyBzaG91bGQgZXh0ZW5kICc/IHN1cGVyIGlbXSciPmk8L2Vycm9yPj4gYTE0MjsKKyAgICAgQTw/IHN1cGVyIGlbXSwgPGVycm9yIGRlc2NyPSJUeXBlIHBhcmFtZXRlciAnamF2YS5sYW5nLlN0cmluZycgaXMgbm90IHdpdGhpbiBpdHMgYm91bmQ7IHNob3VsZCBleHRlbmQgJz8gc3VwZXIgaVtdJyI+U3RyaW5nPC9lcnJvcj4+IGExNDM7CisgICAgIEE8PyBzdXBlciBpW10sIDxlcnJvciBkZXNjcj0iVHlwZSBwYXJhbWV0ZXIgJ2lbXVtdJyBpcyBub3Qgd2l0aGluIGl0cyBib3VuZDsgc2hvdWxkIGV4dGVuZCAnPyBzdXBlciBpW10nIj5pW11bXTwvZXJyb3I+PiBhMTQ0OworICAgICBBPD8gc3VwZXIgaVtdLCA/IGV4dGVuZHMgaVtdPiBhMTQ1OworICAgICBBPD8gc3VwZXIgaVtdLCA/IGV4dGVuZHMgaWlbXT4gYTE0NjsKKyAgICAgQTw/IHN1cGVyIGlpW10sID8gZXh0ZW5kcyBpW10+IGExNDc7CisgICAgIEE8PyBzdXBlciBpW10sIDxlcnJvciBkZXNjcj0iVHlwZSBwYXJhbWV0ZXIgJz8gZXh0ZW5kcyBpJyBpcyBub3Qgd2l0aGluIGl0cyBib3VuZDsgc2hvdWxkIGV4dGVuZCAnPyBzdXBlciBpW10nIj4/IGV4dGVuZHMgaTwvZXJyb3I+PiBhMTQ4OworICAgICBBPD8gc3VwZXIgaVtdLCA8ZXJyb3IgZGVzY3I9IlR5cGUgcGFyYW1ldGVyICc/IGV4dGVuZHMgU3RyaW5nJyBpcyBub3Qgd2l0aGluIGl0cyBib3VuZDsgc2hvdWxkIGV4dGVuZCAnPyBzdXBlciBpW10nIj4/IGV4dGVuZHMgU3RyaW5nPC9lcnJvcj4+IGExNDk7CisgICAgIEE8PyBzdXBlciBpW10sID8+IGExNDEwOworICAgICBBPD8gc3VwZXIgaVtdLCA8ZXJyb3IgZGVzY3I9IlR5cGUgcGFyYW1ldGVyICc/IGV4dGVuZHMgaVtdW10nIGlzIG5vdCB3aXRoaW4gaXRzIGJvdW5kOyBzaG91bGQgZXh0ZW5kICc/IHN1cGVyIGlbXSciPj8gZXh0ZW5kcyBpW11bXTwvZXJyb3I+PiBhMTQxMTsKKyAgICAgQTw/IHN1cGVyIGlbXSwgPyBzdXBlciBpW10+IGExNDEyOworICAgICBBPD8gc3VwZXIgaVtdLCA/IHN1cGVyIGlpW10+IGExNDEzOworICAgICBBPD8gc3VwZXIgaWlbXSwgPGVycm9yIGRlc2NyPSJUeXBlIHBhcmFtZXRlciAnPyBzdXBlciBpW10nIGlzIG5vdCB3aXRoaW4gaXRzIGJvdW5kOyBzaG91bGQgZXh0ZW5kICc/IHN1cGVyIGlpW10nIj4/IHN1cGVyIGlbXTwvZXJyb3I+PiBhMTQxNDsKKyAgICAgQTw/IHN1cGVyIGlbXSwgPGVycm9yIGRlc2NyPSJUeXBlIHBhcmFtZXRlciAnPyBzdXBlciBpJyBpcyBub3Qgd2l0aGluIGl0cyBib3VuZDsgc2hvdWxkIGV4dGVuZCAnPyBzdXBlciBpW10nIj4/IHN1cGVyIGk8L2Vycm9yPj4gYTE0MTU7CisgICAgIEE8PyBzdXBlciBpW10sIDxlcnJvciBkZXNjcj0iVHlwZSBwYXJhbWV0ZXIgJz8gc3VwZXIgU3RyaW5nJyBpcyBub3Qgd2l0aGluIGl0cyBib3VuZDsgc2hvdWxkIGV4dGVuZCAnPyBzdXBlciBpW10nIj4/IHN1cGVyIFN0cmluZzwvZXJyb3I+PiBhMTQxNjsKKyAgICAgQTw/IHN1cGVyIGlbXSwgPGVycm9yIGRlc2NyPSJUeXBlIHBhcmFtZXRlciAnPyBzdXBlciBpW11bXScgaXMgbm90IHdpdGhpbiBpdHMgYm91bmQ7IHNob3VsZCBleHRlbmQgJz8gc3VwZXIgaVtdJyI+PyBzdXBlciBpW11bXTwvZXJyb3I+PiBhMTQxNzsKKworICAgICAgQTw/IGV4dGVuZHMgaVtdLCBpaVtdPiBhMTU7CisgICAgICBBPD8gZXh0ZW5kcyBpW10sIGlbXT4gYTE1MDsKKyAgICAgIEE8PyBleHRlbmRzIGlpW10sPGVycm9yIGRlc2NyPSJUeXBlIHBhcmFtZXRlciAnaVtdJyBpcyBub3Qgd2l0aGluIGl0cyBib3VuZDsgc2hvdWxkIGV4dGVuZCAnPyBleHRlbmRzIGlpW10nIj5pW108L2Vycm9yPj4gYTE1MTsKKyAgICAgIEE8PyBleHRlbmRzIGlbXSwgPGVycm9yIGRlc2NyPSJUeXBlIHBhcmFtZXRlciAnaScgaXMgbm90IHdpdGhpbiBpdHMgYm91bmQ7IHNob3VsZCBleHRlbmQgJz8gZXh0ZW5kcyBpW10nIj5pPC9lcnJvcj4+IGExNTI7CisgICAgICBBPD8gZXh0ZW5kcyBpW10sIDxlcnJvciBkZXNjcj0iVHlwZSBwYXJhbWV0ZXIgJ2phdmEubGFuZy5TdHJpbmcnIGlzIG5vdCB3aXRoaW4gaXRzIGJvdW5kOyBzaG91bGQgZXh0ZW5kICc/IGV4dGVuZHMgaVtdJyI+U3RyaW5nPC9lcnJvcj4+IGExNTM7CisgICAgICBBPD8gZXh0ZW5kcyBpW10sIDxlcnJvciBkZXNjcj0iVHlwZSBwYXJhbWV0ZXIgJ2lbXVtdJyBpcyBub3Qgd2l0aGluIGl0cyBib3VuZDsgc2hvdWxkIGV4dGVuZCAnPyBleHRlbmRzIGlbXSciPmlbXVtdPC9lcnJvcj4+IGExNTQ7CisgICAgICBBPD8gZXh0ZW5kcyBpW10sID8gZXh0ZW5kcyBpW10+IGExNTU7CisgICAgICBBPD8gZXh0ZW5kcyBpW10sID8gZXh0ZW5kcyBpaVtdPiBhMTU2OworICAgICAgQTw/IGV4dGVuZHMgaWlbXSwgPyBleHRlbmRzIGlbXT4gYTE1NzsKKyAgICAgIEE8PyBleHRlbmRzIGlbXSwgPGVycm9yIGRlc2NyPSJUeXBlIHBhcmFtZXRlciAnPyBleHRlbmRzIGknIGlzIG5vdCB3aXRoaW4gaXRzIGJvdW5kOyBzaG91bGQgZXh0ZW5kICc/IGV4dGVuZHMgaVtdJyI+PyBleHRlbmRzIGk8L2Vycm9yPj4gYTE1ODsKKyAgICAgIEE8PyBleHRlbmRzIGlbXSwgPGVycm9yIGRlc2NyPSJUeXBlIHBhcmFtZXRlciAnPyBleHRlbmRzIFN0cmluZycgaXMgbm90IHdpdGhpbiBpdHMgYm91bmQ7IHNob3VsZCBleHRlbmQgJz8gZXh0ZW5kcyBpW10nIj4/IGV4dGVuZHMgU3RyaW5nPC9lcnJvcj4+IGExNTk7CisgICAgICBBPD8gZXh0ZW5kcyBpW10sID8+IGExNTEwOworICAgICAgQTw/IGV4dGVuZHMgaVtdLCA8ZXJyb3IgZGVzY3I9IlR5cGUgcGFyYW1ldGVyICc/IGV4dGVuZHMgaVtdW10nIGlzIG5vdCB3aXRoaW4gaXRzIGJvdW5kOyBzaG91bGQgZXh0ZW5kICc/IGV4dGVuZHMgaVtdJyI+PyBleHRlbmRzIGlbXVtdPC9lcnJvcj4+IGExNTExOworICAgICAgQTw/IGV4dGVuZHMgaVtdLCA/IHN1cGVyIGlbXT4gYTE1MTI7CisgICAgICBBPD8gZXh0ZW5kcyBpW10sID8gc3VwZXIgaWlbXT4gYTE1MTM7CisgICAgICBBPD8gZXh0ZW5kcyBpaVtdLCA8ZXJyb3IgZGVzY3I9IlR5cGUgcGFyYW1ldGVyICc/IHN1cGVyIGlbXScgaXMgbm90IHdpdGhpbiBpdHMgYm91bmQ7IHNob3VsZCBleHRlbmQgJz8gZXh0ZW5kcyBpaVtdJyI+PyBzdXBlciBpW108L2Vycm9yPj4gYTE1MTQ7CisgICAgICBBPD8gZXh0ZW5kcyBpW10sIDxlcnJvciBkZXNjcj0iVHlwZSBwYXJhbWV0ZXIgJz8gc3VwZXIgaScgaXMgbm90IHdpdGhpbiBpdHMgYm91bmQ7IHNob3VsZCBleHRlbmQgJz8gZXh0ZW5kcyBpW10nIj4/IHN1cGVyIGk8L2Vycm9yPj4gYTE1MTU7CisgICAgICBBPD8gZXh0ZW5kcyBpW10sIDxlcnJvciBkZXNjcj0iVHlwZSBwYXJhbWV0ZXIgJz8gc3VwZXIgU3RyaW5nJyBpcyBub3Qgd2l0aGluIGl0cyBib3VuZDsgc2hvdWxkIGV4dGVuZCAnPyBleHRlbmRzIGlbXSciPj8gc3VwZXIgU3RyaW5nPC9lcnJvcj4+IGExNTE2OworICAgICAgQTw/IGV4dGVuZHMgaVtdLCA8ZXJyb3IgZGVzY3I9IlR5cGUgcGFyYW1ldGVyICc/IHN1cGVyIGlbXVtdJyBpcyBub3Qgd2l0aGluIGl0cyBib3VuZDsgc2hvdWxkIGV4dGVuZCAnPyBleHRlbmRzIGlbXSciPj8gc3VwZXIgaVtdW108L2Vycm9yPj4gYTE1MTc7CisKKyAgICBBPD8gZXh0ZW5kcyBDbG9uZWFibGUsID8gZXh0ZW5kcyBpW10+IGExNjsKKyAgICBBPD8gZXh0ZW5kcyBDbG9uZWFibGVbXSwgPyBleHRlbmRzIGlbXVtdPiBhMTYwOworICAgIEE8Q2xvbmVhYmxlLCA/IGV4dGVuZHMgaVtdPiBhMTYxOworICAgIEE8PyBzdXBlciBDbG9uZWFibGUsID8gZXh0ZW5kcyBpW10+IGExNjI7CisgICAgQTwgSTFbXSwgPyBleHRlbmRzICBJW10+IGNsOworCisgIH0KKworICB2b2lkIHRlc3RSYXdUeXBlcygpIHsKKyAgICBjbGFzcyBBPFQgZXh0ZW5kcyBBPFQ+PiB7fQorICAgIEEgYTsKKyAgICBBPDxlcnJvciBkZXNjcj0iVHlwZSBwYXJhbWV0ZXIgJ2phdmEubGFuZy5TdHJpbmcnIGlzIG5vdCB3aXRoaW4gaXRzIGJvdW5kOyBzaG91bGQgZXh0ZW5kICdBPGphdmEubGFuZy5TdHJpbmc+JyI+U3RyaW5nPC9lcnJvcj4+IGExOworICAgIEE8PGVycm9yIGRlc2NyPSJUeXBlIHBhcmFtZXRlciAnQScgaXMgbm90IHdpdGhpbiBpdHMgYm91bmQ7IHNob3VsZCBleHRlbmQgJ0E8QT4nIj5BPC9lcnJvcj4+IGEyOworICAgIEE8QTw8ZXJyb3IgZGVzY3I9IlR5cGUgcGFyYW1ldGVyICdBJyBpcyBub3Qgd2l0aGluIGl0cyBib3VuZDsgc2hvdWxkIGV4dGVuZCAnQTxBPiciPkE8L2Vycm9yPj4+IGEzOworCisgICAgQTw/IGV4dGVuZHMgQT4gYTQ7CisgICAgQTw8ZXJyb3IgZGVzY3I9IlR5cGUgcGFyYW1ldGVyICc/IHN1cGVyIEEnIGlzIG5vdCB3aXRoaW4gaXRzIGJvdW5kOyBzaG91bGQgZXh0ZW5kICdBPD8gc3VwZXIgQT4nIj4/IHN1cGVyIEE8L2Vycm9yPj4gYTU7CisgICAgQTw8ZXJyb3IgZGVzY3I9IlR5cGUgcGFyYW1ldGVyICdBW10nIGlzIG5vdCB3aXRoaW4gaXRzIGJvdW5kOyBzaG91bGQgZXh0ZW5kICdBPEFbXT4nIj5BW108L2Vycm9yPj4gYTc7CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvZ2VuZXJpY3NIaWdobGlnaHRpbmcvVW5jaGVja2VkQ2FzdHMuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvZ2VuZXJpY3NIaWdobGlnaHRpbmcvVW5jaGVja2VkQ2FzdHMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNTMyZDFmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9nZW5lcmljc0hpZ2hsaWdodGluZy9VbmNoZWNrZWRDYXN0cy5qYXZhCkBAIC0wLDAgKzEsMTA4IEBACitpbXBvcnQgamF2YS51dGlsLio7CisKK2NsYXNzIFg8PHdhcm5pbmcgZGVzY3I9IlR5cGUgcGFyYW1ldGVyICdUJyBpcyBuZXZlciB1c2VkIj5UPC93YXJuaW5nPj4geworCit9CisKK2NsYXNzIFhYPFQ+IGV4dGVuZHMgWDxUPiB7CisgIE9iamVjdCBmKFg8U3RyaW5nPiB4KSB7CisgICAgaWYgKHggIT0gbnVsbCkgeworICAgICAgWFg8U3RyaW5nPiB4eCA9IDx3YXJuaW5nIGRlc2NyPSJVbmNoZWNrZWQgY2FzdDogJ1hYJyB0byAnWFg8amF2YS5sYW5nLlN0cmluZz4nIj4oWFg8U3RyaW5nPiluZXcgWFgoKTwvd2FybmluZz47CisgICAgICByZXR1cm4geHg7CisgICAgfQorICAgIGlmICgxID09IDEpIHsKKyAgICAgIFhYPFN0cmluZz4geHggPSAoWFg8U3RyaW5nPil4OworICAgICAgcmV0dXJuIHh4OworICAgIH0KKyAgICByZXR1cm4gbnVsbDsKKyAgfQorfQorCitjbGFzcyBlZWU8Q09NUCBleHRlbmRzIGVlZT4geworICAgIENPTVAgY29tcDsKKyAgICBDT01QIGZvbygpIHsKKyAgICAgICAgcmV0dXJuIDx3YXJuaW5nIGRlc2NyPSJVbmNoZWNrZWQgY2FzdDogJ2VlZScgdG8gJ0NPTVAnIj4oQ09NUCkgbmV3IGVlZSgpPC93YXJuaW5nPjsKKyAgICB9Cit9CisKK2NsYXNzIEFsbFByZWRpY2F0ZTxUPgorICAgIHsKKyAgICBwcml2YXRlIExpc3Q8U2V0PD8gc3VwZXIgVD4+IGxpc3RzOworCisgICAgcHVibGljIHZvaWQgZShBbGxQcmVkaWNhdGUgdGhhdCkKKyAgICB7CisgICAgICAgICBsaXN0cyA9IDx3YXJuaW5nIGRlc2NyPSJVbmNoZWNrZWQgY2FzdDogJ2phdmEudXRpbC5MaXN0JyB0byAnamF2YS51dGlsLkxpc3Q8amF2YS51dGlsLlNldDw/IHN1cGVyIFQ+PiciPihMaXN0PFNldDw/IHN1cGVyIFQ+Pil0aGF0Lmxpc3RzPC93YXJuaW5nPjsKKyAgICB9CisKKyAgICBwdWJsaWMgc3RhdGljIExpc3Q8U3RyaW5nPiBmZmYoKSB7CisgICAgICAgIENvbGxlY3Rpb248U3RyaW5nPiBjID0gbmV3IEFycmF5TGlzdDxTdHJpbmc+KCk7CisgICAgICAgIHJldHVybiAoTGlzdDxTdHJpbmc+KSBjOyAvL25vdCB1bmNoZWNrZWQKKyAgICB9CisKKyAgICBwdWJsaWMgc3RhdGljIENvbXBhcmFibGU8T2JqZWN0PiBnZ2coKSB7CisgICAgICAgIE9iamVjdCB0aW1lID0gbmV3IE9iamVjdCgpOworICAgICAgICByZXR1cm4gPHdhcm5pbmcgZGVzY3I9IlVuY2hlY2tlZCBjYXN0OiAnamF2YS5sYW5nLk9iamVjdCcgdG8gJ2phdmEubGFuZy5Db21wYXJhYmxlPGphdmEubGFuZy5PYmplY3Q+JyI+KENvbXBhcmFibGU8T2JqZWN0PikgdGltZTwvd2FybmluZz47CisgICAgfQorCisgICAgcHVibGljIHN0YXRpYyB2b2lkIGZvbyhTb3J0ZWRNYXA8PywgPz4gc291cmNlU29ydGVkTWFwKSB7CisgICAgICAgIG5ldyBUcmVlTWFwPE9iamVjdCwgT2JqZWN0Pig8d2FybmluZyBkZXNjcj0iVW5jaGVja2VkIGNhc3Q6ICdqYXZhLnV0aWwuQ29tcGFyYXRvcjxjYXB0dXJlPD8+PicgdG8gJ2phdmEudXRpbC5Db21wYXJhdG9yPD8gc3VwZXIgamF2YS5sYW5nLk9iamVjdD4nIj4oQ29tcGFyYXRvcjw/IHN1cGVyIE9iamVjdD4pIHNvdXJjZVNvcnRlZE1hcC5jb21wYXJhdG9yKCk8L3dhcm5pbmc+KTsKKyAgICB9Cit9CisKK2NsYXNzIEsgeyB9CitjbGFzcyBMIGV4dGVuZHMgSyB7IH0KK2NsYXNzIE0geworICBwdWJsaWMgc3RhdGljIDxUIGV4dGVuZHMgSz4gTCBmKFQgdCkgeworICAgICByZXR1cm4gKEwpIHQ7IC8vdGhpcyBzaG91bGQgTk9UIGdlbmVyYXRlIHVuY2hlY2tlZCBjYXN0CisgIH0KK30KKworY2xhc3MgVW5jaGVja2VkQ2FzdEZhbHNlUG9zaXRpdmUgeworCisgICAgcHVibGljIHN0YXRpYyB2b2lkIG1ldGhvZChPYmplY3Qgc29tZXRoaW5nKSB7CisgICAgICAgIGlmIChzb21ldGhpbmcgaW5zdGFuY2VvZiBOdW1iZXJMaXN0KSB7CisgICAgICAgICAgICBOdW1iZXJMaXN0PD8gZXh0ZW5kcyBOdW1iZXI+IDx3YXJuaW5nIGRlc2NyPSJWYXJpYWJsZSAnbnVtYmVyTGlzdCcgaXMgbmV2ZXIgdXNlZCI+bnVtYmVyTGlzdDwvd2FybmluZz4gPSAoTnVtYmVyTGlzdDw/ICBleHRlbmRzIE51bWJlcj4pIHNvbWV0aGluZzsKKyAgICAgICAgfQorCisgICAgfQorCisgICAgcHVibGljIHN0YXRpYyBjbGFzcyBOdW1iZXJMaXN0PEUgZXh0ZW5kcyBOdW1iZXI+IGV4dGVuZHMgQXJyYXlMaXN0PEU+IHsKKyAgICB9CisKK30KKworY2xhc3MgSURFQTIxNTQ3IHsKKyAgY2xhc3MgTyB7fQorICBjbGFzcyBBPDx3YXJuaW5nIGRlc2NyPSJUeXBlIHBhcmFtZXRlciAnVCcgaXMgbmV2ZXIgdXNlZCI+VDwvd2FybmluZz4+IHt9CisgIGNsYXNzIEI8SyBleHRlbmRzIE8+IGV4dGVuZHMgQTxLPnt9CisKKyAgcHVibGljIHZvaWQgYmFyKEE8PyBleHRlbmRzIE8+IGEsIEI8Tz4gYikgeworICAgIGIgPSA8d2FybmluZyBkZXNjcj0iVW5jaGVja2VkIGNhc3Q6ICdJREVBMjE1NDcuQTxjYXB0dXJlPD8gZXh0ZW5kcyBJREVBMjE1NDcuTz4+JyB0byAnSURFQTIxNTQ3LkI8SURFQTIxNTQ3Lk8+JyI+KEI8Tz4pYTwvd2FybmluZz47CisgICAgU3lzdGVtLm91dC5wcmludGxuKGIpOworICB9CisKKyAgcHVibGljIHZvaWQgYmFyMShBPD8+IGEsIEI8Tz4gYikgeworICAgIGIgPSA8d2FybmluZyBkZXNjcj0iVW5jaGVja2VkIGNhc3Q6ICdJREVBMjE1NDcuQTxjYXB0dXJlPD8+PicgdG8gJ0lERUEyMTU0Ny5CPElERUEyMTU0Ny5PPiciPihCPE8+KWE8L3dhcm5pbmc+OworICAgIFN5c3RlbS5vdXQucHJpbnRsbihiKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIGJhcjIoQTw/PiBhLCBCPD8+IGIpIHsKKyAgICBiID0gPHdhcm5pbmcgZGVzY3I9IlVuY2hlY2tlZCBjYXN0OiAnSURFQTIxNTQ3LkE8Y2FwdHVyZTw/Pj4nIHRvICdJREVBMjE1NDcuQjxJREVBMjE1NDcuTz4nIj4oQjxPPilhPC93YXJuaW5nPjsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oYik7CisgIH0KKworICBwdWJsaWMgdm9pZCBiYXI0KEE8PyBleHRlbmRzIE8+IGEsIEI8Pz4gYikgeworICAgIGIgPSA8d2FybmluZyBkZXNjcj0iVW5jaGVja2VkIGNhc3Q6ICdJREVBMjE1NDcuQTxjYXB0dXJlPD8gZXh0ZW5kcyBJREVBMjE1NDcuTz4+JyB0byAnSURFQTIxNTQ3LkI8SURFQTIxNTQ3Lk8+JyI+KEI8Tz4pYTwvd2FybmluZz47CisgICAgU3lzdGVtLm91dC5wcmludGxuKGIpOworICB9CisKKyAgcHVibGljIHZvaWQgYmFyNShBPD8gc3VwZXIgTz4gYSwgQjw/PiBiKSB7CisgICAgYiA9IDx3YXJuaW5nIGRlc2NyPSJVbmNoZWNrZWQgY2FzdDogJ0lERUEyMTU0Ny5BPGNhcHR1cmU8PyBzdXBlciBJREVBMjE1NDcuTz4+JyB0byAnSURFQTIxNTQ3LkI8SURFQTIxNTQ3Lk8+JyI+KEI8Tz4pYTwvd2FybmluZz47CisgICAgU3lzdGVtLm91dC5wcmludGxuKGIpOworICB9CisKKyAgcHVibGljIHZvaWQgYmFyNihBIGEsIEI8Pz4gYikgeworICAgIGIgPSA8d2FybmluZyBkZXNjcj0iVW5jaGVja2VkIGNhc3Q6ICdJREVBMjE1NDcuQScgdG8gJ0lERUEyMTU0Ny5CPElERUEyMTU0Ny5PPiciPihCPE8+KWE8L3dhcm5pbmc+OworICAgIFN5c3RlbS5vdXQucHJpbnRsbihiKTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9nZW5lcmljc0hpZ2hsaWdodGluZy9VbmNoZWNrZWRPdmVycmlkaW5nLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2dlbmVyaWNzSGlnaGxpZ2h0aW5nL1VuY2hlY2tlZE92ZXJyaWRpbmcuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NGVmOWNlCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9nZW5lcmljc0hpZ2hsaWdodGluZy9VbmNoZWNrZWRPdmVycmlkaW5nLmphdmEKQEAgLTAsMCArMSw0NSBAQAorY2xhc3MgTGlzdDxUPiB7IFQgdDt9CisKK2NsYXNzIEJhc2U8VD4geworICAgIExpc3Q8VD4gZ2V0TGlzdChMaXN0PFQ+IGwpIHsKKyAgICAgICAgcmV0dXJuIG51bGw7CisgICAgfQorCisKK30KKworY2xhc3MgRGVyaXZlZCBleHRlbmRzIEJhc2UgPFN0cmluZz4geworICAgIDx3YXJuaW5nIGRlc2NyPSJVbmNoZWNrZWQgb3ZlcnJpZGluZzogcmV0dXJuIHR5cGUgcmVxdWlyZXMgdW5jaGVja2VkIGNvbnZlcnNpb24uIEZvdW5kICdMaXN0JywgcmVxdWlyZWQgJ0xpc3Q8amF2YS5sYW5nLlN0cmluZz4nIj5MaXN0PC93YXJuaW5nPiBnZXRMaXN0KExpc3Q8U3RyaW5nPiBsKSB7CisgICAgICAgIHJldHVybiBudWxsOworICAgIH0KK30KKworY2xhc3MgQTEgeworICAgIDxUPiBUIGZvbyhUIHQpIHsKKyAgICAgICAgcmV0dXJuIG51bGw7CisgICAgfQorfQorCitjbGFzcyBBMiBleHRlbmRzIEExIHsKKyAgICA8d2FybmluZyBkZXNjcj0iVW5jaGVja2VkIG92ZXJyaWRpbmc6IHJldHVybiB0eXBlIHJlcXVpcmVzIHVuY2hlY2tlZCBjb252ZXJzaW9uLiBGb3VuZCAnamF2YS5sYW5nLk9iamVjdCcsIHJlcXVpcmVkICdUJyI+T2JqZWN0PC93YXJuaW5nPiBmb28oT2JqZWN0IG8pIHsKKyAgICAgICAgcmV0dXJuIG51bGw7CisgICAgfQorfQorCisvL0lERUFERVYtMTU5MTgKK2Fic3RyYWN0IGNsYXNzIE91dGVyPFU+IHsKKyAgICBwdWJsaWMgYWJzdHJhY3QgSW5uZXIgbShVIHUpOworCisgICAgcHVibGljIGNsYXNzIElubmVyIHsKKyAgICB9Cit9CisKK2NsYXNzIE90aGVyIGV4dGVuZHMgT3V0ZXI8T3RoZXI+IHsKKyAgICBwdWJsaWMgSXRoZXIgbShPdGhlciBvdGhlcikgeworICAgICAgICByZXR1cm4gbmV3IEl0aGVyKCk7CisgICAgfQorCisgICAgcHVibGljIGNsYXNzIEl0aGVyIGV4dGVuZHMgSW5uZXIgeworICAgIH0KK30KKy8vZW5kIG9mIElERUFERVYtMTU5MTgKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2dlbmVyaWNzSGlnaGxpZ2h0aW5nL1VuY2hlY2tlZFdhcm5pbmdzTGV2ZWw2LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2dlbmVyaWNzSGlnaGxpZ2h0aW5nL1VuY2hlY2tlZFdhcm5pbmdzTGV2ZWw2LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTJiNTgxZAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvZ2VuZXJpY3NIaWdobGlnaHRpbmcvVW5jaGVja2VkV2FybmluZ3NMZXZlbDYuamF2YQpAQCAtMCwwICsxLDEyOCBAQAoraW1wb3J0IGphdmEubGFuZy5PdmVycmlkZTsKK2ltcG9ydCBqYXZhLnV0aWwuKjsKK2NsYXNzIEdlbmVyaWNzVGVzdDxUPiB7CisKKyAgICBzdGF0aWMgPFM+IFMgbmV4dChHZW5lcmljc1Rlc3Q8Uz4gdGVzdCkKKyAgICB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbih0ZXN0KTsKKyAgICAgICAgcmV0dXJuIG51bGw7CisgICAgfQorCisgICAgcHVibGljIEl0ZXJhdG9yPFQ+IGl0ZXJhdG9yKCkKKyAgICB7CisgICAgICAgIHJldHVybiBuZXcgSXRlcmF0b3I8VD4oKSB7CisgICAgICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgICAgIHB1YmxpYyBib29sZWFuIGhhc05leHQoKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgQE92ZXJyaWRlCisgICAgICAgICAgICBwdWJsaWMgVCBuZXh0KCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gR2VuZXJpY3NUZXN0Lm5leHQoR2VuZXJpY3NUZXN0LnRoaXMpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgICAgIHB1YmxpYyB2b2lkIHJlbW92ZSgpCisgICAgICAgICAgICB7CisgICAgICAgICAgICB9CisgICAgICAgIH07CisgICAgfQorfQorCitjbGFzcyBHZW5lcmljc1Rlc3QxPFQ+IHsKKworICAgIHN0YXRpYyA8Uz4gUyBuZXh0MShHZW5lcmljc1Rlc3QxPFM+IHRlc3QpCisgICAgeworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4odGVzdCk7CisgICAgICAgIHJldHVybiBudWxsOworICAgIH0KKworICAgIHB1YmxpYyBJdGVyYXRvcjxUPiBpdGVyYXRvcigpCisgICAgeworICAgICAgICByZXR1cm4gbmV3IEl0ZXJhdG9yPFQ+KCkgeworICAgICAgICAgICAgQE92ZXJyaWRlCisgICAgICAgICAgICBwdWJsaWMgYm9vbGVhbiBoYXNOZXh0KCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIEBPdmVycmlkZQorICAgICAgICAgICAgcHVibGljIFQgbmV4dCgpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIEdlbmVyaWNzVGVzdDEubmV4dDEoR2VuZXJpY3NUZXN0MS50aGlzKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgQE92ZXJyaWRlCisgICAgICAgICAgICBwdWJsaWMgdm9pZCByZW1vdmUoKQorICAgICAgICAgICAgeworICAgICAgICAgICAgfQorICAgICAgICB9OworICAgIH0KK30KKworCitjbGFzcyBHZW5lcmljc1Rlc3QyPFQ+IHsKKworICAgIHN0YXRpYyA8Uz4gUyBuZXh0MihHZW5lcmljc1Rlc3QyPFM+IHRlc3QpCisgICAgeworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4odGVzdCk7CisgICAgICAgIHJldHVybiBudWxsOworICAgIH0KKworICAgIHB1YmxpYyBJdGVyYXRvcjxUPiBpdGVyYXRvcigpCisgICAgeworICAgICAgICByZXR1cm4gbmV3IEl0ZXJhdG9yPFQ+KCkgeworICAgICAgICAgICAgQE92ZXJyaWRlCisgICAgICAgICAgICBwdWJsaWMgYm9vbGVhbiBoYXNOZXh0KCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIEBPdmVycmlkZQorICAgICAgICAgICAgcHVibGljIFQgbmV4dCgpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG5leHQyKEdlbmVyaWNzVGVzdDIudGhpcyk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIEBPdmVycmlkZQorICAgICAgICAgICAgcHVibGljIHZvaWQgcmVtb3ZlKCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfTsKKyAgICB9Cit9CitjbGFzcyBFeGFtcGxlIHsKKyAgICBwcml2YXRlIHN0YXRpYyA8VD4gdm9pZCBhc3NlcnRUaGF0KFQgYWN0dWFsLCBNYXRjaGVyPD8gc3VwZXIgVD4gbWF0Y2hlcikgeworICAgICAgYXNzZXJ0IGFjdHVhbCAhPSBudWxsOworICAgICAgYXNzZXJ0IG1hdGNoZXIgIT0gbnVsbDsKKyAgICB9CisKKyAgICBwcml2YXRlIHN0YXRpYyA8RT4gTWF0Y2hlcjw/IHN1cGVyIENvbGxlY3Rpb248PyBleHRlbmRzIEU+PiBoYXNTaXplKGludCBzaXplKSB7CisgICAgICAgIGFzc2VydCBzaXplID49MDsKKyAgICAgICAgcmV0dXJuIG5ldyBNYXRjaGVyPENvbGxlY3Rpb248PyBleHRlbmRzIEU+PigpIHsKKyAgICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgICBwdWJsaWMgdm9pZCBmb28oQ29sbGVjdGlvbjw/IGV4dGVuZHMgRT4gZXMpIHsKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihlcyk7CisgICAgICAgICAgfQorICAgICAgICB9OworICAgIH0KKworICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKyAgICAgIExpc3Q8Qm9vbGVhbj4gbGlzdCA9IDx3YXJuaW5nIGRlc2NyPSJVbmNoZWNrZWQgYXNzaWdubWVudDogJ2phdmEudXRpbC5BcnJheUxpc3QnIHRvICdqYXZhLnV0aWwuTGlzdDxqYXZhLmxhbmcuQm9vbGVhbj4nIj5uZXcgQXJyYXlMaXN0KCk8L3dhcm5pbmc+OworICAgICAgU3lzdGVtLm91dC5wcmludGxuKGxpc3QpOworICAgICAgYXNzZXJ0VGhhdChuZXcgQXJyYXlMaXN0PEJvb2xlYW4+KCksIGhhc1NpemUoMCkpOworICAgIH0KKworICAgIHByaXZhdGUgaW50ZXJmYWNlIE1hdGNoZXI8VD4geworICAgICAgdm9pZCBmb28oVCB0KTsKKyAgICB9Cit9CisKK2Fic3RyYWN0IGNsYXNzIElERUE1NzMzNzw8d2FybmluZyBkZXNjcj0iVHlwZSBwYXJhbWV0ZXIgJ1MnIGlzIG5ldmVyIHVzZWQiPlM8L3dhcm5pbmc+PiB7CisgICAgYWJzdHJhY3QgPFQ+IHZvaWQgZm9vKElERUE1NzMzNzw/IHN1cGVyIElERUE1NzMzNzxUPj4geCk7CisgICAgdm9pZCBiYXIoSURFQTU3MzM3PD8gc3VwZXIgSURFQTU3MzM3PD8+PiB4KXsKKyAgICAgICAgZm9vKHgpOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2dlbmVyaWNzSGlnaGxpZ2h0aW5nL1VudXNlZC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9nZW5lcmljc0hpZ2hsaWdodGluZy9VbnVzZWQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNmQ0MjllCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9nZW5lcmljc0hpZ2hsaWdodGluZy9VbnVzZWQuamF2YQpAQCAtMCwwICsxLDExIEBACitlbnVtIGUgeworICBBKCJ4eHgiKTsKKworICBwcml2YXRlIFN0cmluZyBzOworICBlKFN0cmluZyBzdHIpIHsKKyAgICBzID0gc3RyOworICB9CisgIHB1YmxpYyBTdHJpbmcgZ2V0UygpIHsKKyAgICByZXR1cm4gczsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvZ2VuZXJpY3NIaWdobGlnaHRpbmcvVmFyYXJncy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9nZW5lcmljc0hpZ2hsaWdodGluZy9WYXJhcmdzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzk5NTZmNgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvZ2VuZXJpY3NIaWdobGlnaHRpbmcvVmFyYXJncy5qYXZhCkBAIC0wLDAgKzEsMzMgQEAKK2NsYXNzIGNsYXp6MSB7CisgICAgY2xhenoxKGludC4uLiBhcmdzKSB7IGFyZ3MgPSBudWxsOyB9CisgICAgcHVibGljIHN0YXRpYyBjbGFzcyBNeWNsYXp6MSBleHRlbmRzIGNsYXp6MSB7fQorfQorCitjbGFzcyBBbWJpZ3VvdXNSZWZlcmVuY2UgeworICB2b2lkIHRlc3QoKSB7CisgICAgZG9Tb21ldGhpbmc8ZXJyb3IgZGVzY3I9IkFtYmlndW91cyBtZXRob2QgY2FsbDogYm90aCAnQW1iaWd1b3VzUmVmZXJlbmNlLmRvU29tZXRoaW5nKFN0cmluZywgTnVtYmVyLi4uKScgYW5kICdBbWJpZ3VvdXNSZWZlcmVuY2UuZG9Tb21ldGhpbmcoTnVtYmVyLi4uKScgbWF0Y2giPihudWxsLCAxKTwvZXJyb3I+OworICB9CisKKyAgdm9pZCBkb1NvbWV0aGluZyhTdHJpbmcgcywgTnVtYmVyLi4uIG4pIHsKKyAgICBzKz1uOworICB9CisKKyAgdm9pZCBkb1NvbWV0aGluZyhOdW1iZXIuLi4gbikgeworICAgIG4uaGFzaENvZGUoKTsKKyAgfQorfQorCitjbGFzcyBPSyB7CisgICAgcHJvdGVjdGVkIHZvaWQgZmZmKCkgeworICAgICAgICBmaW5kKCIiKTsKKyAgICB9CisgICAgcHVibGljIHZvaWQgZmluZChTdHJpbmcgcXVlcnlTdHJpbmcpICB7CisgICAgICAgcXVlcnlTdHJpbmcuaGFzaENvZGUoKTsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBmaW5kKGZpbmFsIFN0cmluZyBxdWVyeVN0cmluZywgZmluYWwgT2JqZWN0Li4uIHZhbHVlcykgIHsKKyAgICAgICBxdWVyeVN0cmluZy5oYXNoQ29kZSgpOworICAgICAgIHZhbHVlcy5oYXNoQ29kZSgpOworICAgIH0KKworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvZ2VuZXJpY3NIaWdobGlnaHRpbmcvVmFyaWFuY2UuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvZ2VuZXJpY3NIaWdobGlnaHRpbmcvVmFyaWFuY2UuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNTJmNjQ4Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9nZW5lcmljc0hpZ2hsaWdodGluZy9WYXJpYW5jZS5qYXZhCkBAIC0wLDAgKzEsMjg1IEBACitpbXBvcnQgamF2YS51dGlsLio7CitpbXBvcnQgamF2YS51dGlsLkNvbXBhcmF0b3I7CisKKworLyoqCisgKiBDcmVhdGVkIGJ5IEludGVsbGlKIElERUEuCisgKiBVc2VyOiBkc2wKKyAqIERhdGU6IE1hciAyNSwgMjAwNAorICogVGltZTogODowODo0NCBQTQorICogVG8gY2hhbmdlIHRoaXMgdGVtcGxhdGUgdXNlIEZpbGUgfCBTZXR0aW5ncyB8IEZpbGUgVGVtcGxhdGVzLgorICovCitwdWJsaWMgY2xhc3MgVmFyaWFuY2VUZXN0aW5nIHsKKyAgICB2b2lkIG1ldGhvZChMaXN0PD8gZXh0ZW5kcyBWYXJpYW5jZVRlc3Rpbmc+IGwpIHsKKy8vICAgICAgICBsLmFkZChuZXcgVmFyaWFuY2VUZXN0aW5nKCkpOworICAgICAgICBsLmFkZChudWxsKTsKKyAgICB9CisKKyAgICBzdGF0aWMgdm9pZCBzaHVmZmxlKENvbGxlY3Rpb248Pz4gYykge30KKworICAgIHN0YXRpYyBjbGFzcyBYPFQ+IHsKKyAgICAgICAgVCBmaWVsZDsKKyAgICAgICAgVFtdIGFycmF5RmllbGQ7CisgICAgICAgIFRbXSBtZXRob2QoKSB7cmV0dXJuICBhcnJheUZpZWxkO307CisgICAgICAgIHZvaWQgcHV0QWxsKENvbGxlY3Rpb248PyBzdXBlciBUPiBjKSB7fQorICAgIH0KKworICAgIHZvaWQgbWV0aG9kMShMaXN0PD8gc3VwZXIgVmFyaWFuY2VUZXN0aW5nPiBsKSB7CisgICAgICAgIExpc3Q8PyBleHRlbmRzIFZhcmlhbmNlVGVzdGluZz4gbDEgPSBuZXcgQXJyYXlMaXN0PFZhcmlhbmNlVGVzdGluZz4oKTsKKyAgICAgICAgbDEuYWRkPGVycm9yIGRlc2NyPSInYWRkKGNhcHR1cmU8PyBleHRlbmRzIFZhcmlhbmNlVGVzdGluZz4pJyBpbiAnamF2YS51dGlsLkxpc3QnIGNhbm5vdCBiZSBhcHBsaWVkIHRvICcoVmFyaWFuY2VUZXN0aW5nKSciPihuZXcgVmFyaWFuY2VUZXN0aW5nKCkpPC9lcnJvcj47CisgICAgICAgIExpc3Q8TGlzdDw/IGV4dGVuZHMgVmFyaWFuY2VUZXN0aW5nPj4gbGxsID0gbnVsbDsKKyAgICAgICAgbGxsLmFkZChsMSk7CisgICAgICAgIFg8PyBleHRlbmRzIFZhcmlhbmNlVGVzdGluZz4geCA9IG5ldyBYPFZhcmlhbmNlVGVzdGluZz4oKTsKKyAgICAgICAgVmFyaWFuY2VUZXN0aW5nIHogPSB4LmZpZWxkOworICAgICAgICBWYXJpYW5jZVRlc3RpbmdbXSB2ID0geC5hcnJheUZpZWxkOworICAgICAgICBWYXJpYW5jZVRlc3RpbmcgdjEgPSB4LmFycmF5RmllbGRbMF07CisgICAgICAgIHguYXJyYXlGaWVsZFswXSA9IG5ldyBWYXJpYW5jZVRlc3RpbmcoKTsKKyAgICAgICAgPGVycm9yIGRlc2NyPSJJbmNvbXBhdGlibGUgdHlwZXMuIEZvdW5kOiAnVmFyaWFuY2VUZXN0aW5nJywgcmVxdWlyZWQ6ICdjYXB0dXJlPD8gZXh0ZW5kcyBWYXJpYW5jZVRlc3Rpbmc+JyI+eC5maWVsZCA9IG5ldyBWYXJpYW5jZVRlc3RpbmcoKTwvZXJyb3I+OworICAgICAgICBWYXJpYW5jZVRlc3RpbmdbXSBrID0geC5tZXRob2QoKTsKKyAgICAgICAga1swXSA9IG5ldyBWYXJpYW5jZVRlc3RpbmcoKTsKKyAgICAgICAgeC5tZXRob2QoKVswXSA9IG5ldyBWYXJpYW5jZVRlc3RpbmcoKTsKKyAgICAgICAgPGVycm9yIGRlc2NyPSJJbmNvbXBhdGlibGUgdHlwZXMuIEZvdW5kOiAnVmFyaWFuY2VUZXN0aW5nW10nLCByZXF1aXJlZDogJ2NhcHR1cmU8PyBleHRlbmRzIFZhcmlhbmNlVGVzdGluZz5bXSciPnguYXJyYXlGaWVsZCA9IG5ldyBWYXJpYW5jZVRlc3RpbmdbMTBdPC9lcnJvcj47CisgICAgICAgIGwxLmFkZEFsbDxlcnJvciBkZXNjcj0iJ2FkZEFsbChqYXZhLnV0aWwuQ29sbGVjdGlvbjw/IGV4dGVuZHMgY2FwdHVyZTw/IGV4dGVuZHMgVmFyaWFuY2VUZXN0aW5nPj4pJyBpbiAnamF2YS51dGlsLkxpc3QnIGNhbm5vdCBiZSBhcHBsaWVkIHRvICcoamF2YS51dGlsLkFycmF5TGlzdDxWYXJpYW5jZVRlc3Rpbmc+KSciPihuZXcgQXJyYXlMaXN0PFZhcmlhbmNlVGVzdGluZz4oKSk8L2Vycm9yPjsKKyAgICAgICAgPGVycm9yIGRlc2NyPSJJbmNvbXBhdGlibGUgdHlwZXMuIEZvdW5kOiAnamF2YS51dGlsLkFycmF5TGlzdDxqYXZhLmxhbmcuU3RyaW5nPicsIHJlcXVpcmVkOiAnamF2YS51dGlsLkxpc3Q8PyBleHRlbmRzIFZhcmlhbmNlVGVzdGluZz4nIj5MaXN0PD8gZXh0ZW5kcyBWYXJpYW5jZVRlc3Rpbmc+IGwyID0gbmV3IEFycmF5TGlzdDxTdHJpbmc+KCk7PC9lcnJvcj4KKyAgICAgICAgTGlzdDw/IGV4dGVuZHMgVmFyaWFuY2VUZXN0aW5nPiBsMyA9IGwyOworICAgICAgICBWYXJpYW5jZVRlc3RpbmcgdCA9IGwxLmdldCgwKTsKKyAgICAgICAgbC5hZGQobmV3IFZhcmlhbmNlVGVzdGluZygpKTsKKyAgICAgICAgbC5hZGQobnVsbCk7CisgICAgICAgIDxlcnJvciBkZXNjcj0iSW5jb21wYXRpYmxlIHR5cGVzLiBGb3VuZDogJ2phdmEubGFuZy5PYmplY3QnLCByZXF1aXJlZDogJ1ZhcmlhbmNlVGVzdGluZyciPlZhcmlhbmNlVGVzdGluZyB0MSA9IGwuZ2V0KDApOzwvZXJyb3I+CisgICAgICAgIFg8PyBleHRlbmRzIFZhcmlhbmNlVGVzdGluZz4geDEgPSBudWxsOworICAgICAgICB4MS5wdXRBbGwobmV3IEFycmF5TGlzdDxWYXJpYW5jZVRlc3Rpbmc+KCkpOworICAgICAgICBMaXN0PD8+IHVua25vd25saXN0ID0gbDsKKyAgICAgICAgTGlzdDw/PiB1bmtub3dubGlzdDEgPSBuZXcgQXJyYXlMaXN0PFZhcmlhbmNlVGVzdGluZz4oKTsKKyAgICAgICAgTGlzdDw/PiB1bmtub3dubGlzdDIgPSBuZXcgQXJyYXlMaXN0PDxlcnJvciBkZXNjcj0iV2lsZGNhcmQgdHlwZSAnPycgY2Fubm90IGJlIGluc3RhbnRpYXRlZCBkaXJlY3RseSI+PzwvZXJyb3I+PigpOworICAgICAgICBzaHVmZmxlKGwpOworICAgICAgICBzaHVmZmxlKG5ldyBBcnJheUxpc3Q8VmFyaWFuY2VUZXN0aW5nPigpKTsKKyAgICAgICAgTGlzdDxWYXJpYW5jZVRlc3Rpbmc+IGxsbGxsID0gbmV3IEFycmF5TGlzdDxWYXJpYW5jZVRlc3Rpbmc+KCk7CisgICAgICAgIGxsbGxsLnJlbW92ZUFsbChuZXcgQXJyYXlMaXN0PFN0cmluZz4oKSk7CisgICAgfQorCit9CisKK2NsYXNzIFN1cGVyVGVzdGVyIDxVPiB7CisgICAgIHZvaWQgZ28oQWNjZXB0b3I8PyBzdXBlciBVPiBhY2NlcHRvciwgVSB1KSB7CisgICAgICAgICAgYWNjZXB0b3IuYWNjZXB0PGVycm9yIGRlc2NyPSInYWNjZXB0KFN1cGVyVGVzdGVyPGNhcHR1cmU8PyBzdXBlciBVPj4sIGNhcHR1cmU8PyBzdXBlciBVPiknIGluICdTdXBlclRlc3Rlci5BY2NlcHRvcicgY2Fubm90IGJlIGFwcGxpZWQgdG8gJyhTdXBlclRlc3RlcjxVPiwgVSknIj4odGhpcywgdSk8L2Vycm9yPjsKKyAgICAgfQorCisgICAgIHN0YXRpYyBjbGFzcyBBY2NlcHRvciA8Vj4geworICAgICAgICAgIHZvaWQgYWNjZXB0KFN1cGVyVGVzdGVyPFY+IHRlc3RlciwgViB2KSB7IH0KKyAgICAgfQorfQorCitjbGFzcyBTQ1I0MDIwMiB7CisgICAgdm9pZCBmb28oTWFwPD8sIFN0cmluZz4gbWFwKSB7CisgICAgICAgIGZvciAoPGVycm9yIGRlc2NyPSJJbmNvbXBhdGlibGUgdHlwZXMuIEZvdW5kOiAnamF2YS51dGlsLkl0ZXJhdG9yPGphdmEudXRpbC5NYXAuRW50cnk8Y2FwdHVyZTw/PixqYXZhLmxhbmcuU3RyaW5nPj4nLCByZXF1aXJlZDogJ2phdmEudXRpbC5JdGVyYXRvcjxqYXZhLnV0aWwuTWFwLkVudHJ5PD8samF2YS5sYW5nLlN0cmluZz4+JyI+SXRlcmF0b3I8TWFwLkVudHJ5PD8sIFN0cmluZz4+IGl0ID0gbWFwLmVudHJ5U2V0KCkuaXRlcmF0b3IoKTs8L2Vycm9yPiBpdC5oYXNOZXh0KCk7KSB7CisKKyAgICAgICAgfQorICAgIH0KK30KKworY2xhc3MgQ2FwdHVyZVRlc3QgeworICAgc3RhdGljIGNsYXNzIEVtdW08VD4geworICAgICAgVCB0OworICAgICAgcHVibGljIHN0YXRpYyA8VCBleHRlbmRzIEVtdW08VD4+IFQgdmFsdWVPZihDbGFzczxUPiBlbnVtVHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBuYW1lKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgIH0KKyAgIH0KKworICAgdm9pZCBmb28gKENsYXNzPD8gZXh0ZW5kcyBFbXVtPENhcHR1cmVUZXN0Pj4gY2xhenopIHsKKyAgICAgPGVycm9yIGRlc2NyPSJJbmZlcnJlZCB0eXBlICc/IGV4dGVuZHMgQ2FwdHVyZVRlc3QuRW11bTxDYXB0dXJlVGVzdD4nIGZvciB0eXBlIHBhcmFtZXRlciAnVCcgaXMgbm90IHdpdGhpbiBpdHMgYm91bmQ7IHNob3VsZCBleHRlbmQgJ0NhcHR1cmVUZXN0LkVtdW08PyBleHRlbmRzIENhcHR1cmVUZXN0LkVtdW08Q2FwdHVyZVRlc3Q+PiciPkVtdW0udmFsdWVPZihjbGF6eiwgIkNDQyIpPC9lcnJvcj47CisgICB9Cit9CisKK2NsYXNzIFN1cGVyVGVzdCB7CisgICAgcHVibGljIExpc3Q8TGlzdDw/IGV4dGVuZHMgU3VwZXJUZXN0Pj4gd2FpdGluZ0xpc3Q7CisKKyAgICBwdWJsaWMgQ29tcGFyYXRvcjxMaXN0PD8+PiBTSVpFX0NPTVBBUkFUT1I7CisKKyAgICB7CisgICAgICAgLy9UaGlzIGNhbGwgaGFzIGl0cyB0eXBlIGFyZ3VtZW50cyBpbmZlcnJlZCBhbHJpZ2h0OiBUIC0+IExpc3Q8Y2FwdHVyZTw/IGV4dGVuZHMgU3VwZXJUZXN0Pj4KKyAgICAgICBDb2xsZWN0aW9ucy5zb3J0KHdhaXRpbmdMaXN0LCBTSVpFX0NPTVBBUkFUT1IpOworICAgIH0KK30KKworY2xhc3MgQnVnPEE+IHsKKyAgICBzdGF0aWMgY2xhc3MgQjxDPiB7CisgICAgfQorCisgICAgc3RhdGljIGNsYXNzIEQ8RT4geworICAgICAgICBCPEU+IGYoKSB7CisgICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgfQorICAgIH0KKworICAgIDxHIGV4dGVuZHMgQT4gdm9pZCBoKEI8Rz4gYikgeworICAgIH0KKyAgICAKKyAgICB2b2lkIGZvbyhEPD8gZXh0ZW5kcyBBPiBkKSB7CisgICAgICAgIGgoZC5mKCkpOyAgIC8vVGhpcyBjYWxsIGlzIE9LIGFzIGEgcmVzdWx0IG9mIHJlb3BlbmluZyBjYXB0dXJlZCB3aWxkY2FyZCBmb3IgY2FsbGluZyAiaCIKKyAgICB9Cit9CisKKy8vSURFQS00MjE1CitjbGFzcyBDYXNlMiB7CisgICAgICAgIGNsYXNzIEEge30KKworICAgICAgICBjbGFzcyBCIGV4dGVuZHMgQSB7fQorCisgICAgICAgIENvbXBhcmF0b3I8QT4gYUNvbXBhcmF0b3I7CisgICAgICAgIENhc2UyKCkgeworCisgICAgICAgICAgICBBcnJheUxpc3Q8Qj4gYmxpc3QgPSBuZXcgQXJyYXlMaXN0PEI+KCk7CisKKyAgICAgICAgICAgIC8vIHRoaXMgY2FsbCBpcyBPSzogVCAtPiBCCisgICAgICAgICAgICBDb2xsZWN0aW9ucy5zb3J0KGJsaXN0LCBhQ29tcGFyYXRvcik7CisgICAgICAgIH0KK30KKworY2xhc3MgUzEgeworICAgIDxUPiB2b2lkIGYoTGlzdDxUPiBsMSwgVCBsMikgeworCisgICAgfQorCisgICAgdm9pZCBiYXIoTGlzdDw/IGV4dGVuZHMgUzE+IGspIHsKKyAgICAgICAgZjxlcnJvciBkZXNjcj0iJ2YoamF2YS51dGlsLkxpc3Q8UzE+LCBTMSknIGluICdTMScgY2Fubm90IGJlIGFwcGxpZWQgdG8gJyhqYXZhLnV0aWwuTGlzdDxjYXB0dXJlPD8gZXh0ZW5kcyBTMT4+LCBTMSknIj4oaywgIGsuZ2V0KDApKTwvZXJyb3I+OworICAgIH0KK30KKworY2xhc3MgUzIgeworICAgIDxUPiB2b2lkIGYoTGlzdDxUPiBsMSwgTGlzdDxUPiBsMikgeworCisgICAgfQorCisgICAgdm9pZCBiYXIoTGlzdDw/IGV4dGVuZHMgUzI+IGspIHsKKyAgICAgICAgZjxlcnJvciBkZXNjcj0iJ2YoamF2YS51dGlsLkxpc3Q8VD4sIGphdmEudXRpbC5MaXN0PFQ+KScgaW4gJ1MyJyBjYW5ub3QgYmUgYXBwbGllZCB0byAnKGphdmEudXRpbC5MaXN0PGNhcHR1cmU8PyBleHRlbmRzIFMyPj4sIGphdmEudXRpbC5MaXN0PGNhcHR1cmU8PyBleHRlbmRzIFMyPj4pJyI+KGssIGspPC9lcnJvcj47CisgICAgfQorfQorCitjbGFzcyBTMyB7CisgICAgPFQ+IHZvaWQgZihNYXA8VCxUPiBsMikgeworCisgICAgfQorCisgICAgdm9pZCBiYXIoTWFwPD8gZXh0ZW5kcyBTMywgPyBleHRlbmRzIFMzPiBrKSB7CisgICAgICAgIGY8ZXJyb3IgZGVzY3I9IidmKGphdmEudXRpbC5NYXA8VCxUPiknIGluICdTMycgY2Fubm90IGJlIGFwcGxpZWQgdG8gJyhqYXZhLnV0aWwuTWFwPGNhcHR1cmU8PyBleHRlbmRzIFMzPixjYXB0dXJlPD8gZXh0ZW5kcyBTMz4+KSciPihrKTwvZXJyb3I+OworICAgIH0KK30KKworY2xhc3MgVHlwZUJ1ZyB7CisgICAgcHJpdmF0ZSBzdGF0aWMgY2xhc3MgVmFsdWVIb2xkZXI8VD4geworICAgICAgICBwdWJsaWMgVCB2YWx1ZTsKKyAgICB9CisKKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihmaW5hbCBTdHJpbmdbXSBhcmdzKSB7CisgICAgICAgIExpc3Q8VmFsdWVIb2xkZXI8Pz4+IG11bHRpTGlzdCA9IG5ldyBBcnJheUxpc3Q8VmFsdWVIb2xkZXI8Pz4+KCk7CisKKyAgICAgICAgVmFsdWVIb2xkZXI8SW50ZWdlcj4gaW50SG9sZGVyID0gbmV3IFZhbHVlSG9sZGVyPEludGVnZXI+KCk7CisgICAgICAgIGludEhvbGRlci52YWx1ZSA9IDE7CisKKyAgICAgICAgVmFsdWVIb2xkZXI8RG91YmxlPiBkb3VibGVIb2xkZXIgPSBuZXcgVmFsdWVIb2xkZXI8RG91YmxlPigpOworICAgICAgICBkb3VibGVIb2xkZXIudmFsdWUgPSAxLjU7CisKKyAgICAgICAgbXVsdGlMaXN0LmFkZChpbnRIb2xkZXIpOworICAgICAgICBtdWx0aUxpc3QuYWRkKGRvdWJsZUhvbGRlcik7CisgICAgICAgIHN3YXBGaXJzdFR3b1ZhbHVlczxlcnJvciBkZXNjcj0iJ3N3YXBGaXJzdFR3b1ZhbHVlcyhqYXZhLnV0aWwuTGlzdDxUeXBlQnVnLlZhbHVlSG9sZGVyPFQ+PiknIGluICdUeXBlQnVnJyBjYW5ub3QgYmUgYXBwbGllZCB0byAnKGphdmEudXRpbC5MaXN0PFR5cGVCdWcuVmFsdWVIb2xkZXI8Pz4+KSciPihtdWx0aUxpc3QpPC9lcnJvcj47IC8vbmVlZCB0byBiZSBoaWdobGlnaHRlZAorCisgICAgICAgIC8vIHRoaXMgbGluZSBjYXVzZXMgYSBDbGFzc0Nhc3RFeGNlcHRpb24gd2hlbiBjaGVja2VkLgorICAgICAgICBJbnRlZ2VyIHZhbHVlID0gaW50SG9sZGVyLnZhbHVlOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4odmFsdWUpOworICAgIH0KKworICAgIHByaXZhdGUgc3RhdGljIDxUPiB2b2lkIHN3YXBGaXJzdFR3b1ZhbHVlcyhMaXN0PFZhbHVlSG9sZGVyPFQ+PiBtdWx0aUxpc3QpIHsKKyAgICAgICAgVmFsdWVIb2xkZXI8VD4gaW50SG9sZGVyID0gbXVsdGlMaXN0LmdldCgwKTsKKyAgICAgICAgVmFsdWVIb2xkZXI8VD4gZG91YmxlSG9sZGVyID0gbXVsdGlMaXN0LmdldCgxKTsKKworICAgICAgICBpbnRIb2xkZXIudmFsdWUgPSBkb3VibGVIb2xkZXIudmFsdWU7CisgICAgfQorfQorCitjbGFzcyBPdGhlckJ1ZyB7CitwdWJsaWMgc3RhdGljIHZvaWQgZm9vKExpc3Q8PyBleHRlbmRzIEZvbz4gZm9vcykgeworICAgIGZpbmFsIENvbXBhcmF0b3I8Rm9vPiBjb21wYXJhdG9yID0gY3JlYXRlQ29tcGFyYXRvcigpOworICAgIENvbGxlY3Rpb25zLnNvcnQoZm9vcywgY29tcGFyYXRvcik7ICAvL3RoaXMgY2FsbCBpcyBPSworICB9CisKKyAgcHJpdmF0ZSBzdGF0aWMgQ29tcGFyYXRvcjxGb28+IGNyZWF0ZUNvbXBhcmF0b3IoKSB7CisgICAgcmV0dXJuIG51bGw7CisgIH0KKworICBwdWJsaWMgaW50ZXJmYWNlIEZvbyB7CisgIH0KK30KKworY2xhc3MgT3RoZXJCdWcxIHsKKyAgcHVibGljIHN0YXRpYyB2b2lkIGZvbyhMaXN0PD8gc3VwZXIgRm9vPiBmb29zKSB7CisgICAgZmluYWwgQ29tcGFyYXRvcjxGb28+IGNvbXBhcmF0b3IgPSBjcmVhdGVDb21wYXJhdG9yKCk7CisgICAgQ29sbGVjdGlvbnMuc29ydDxlcnJvciBkZXNjcj0iJ3NvcnQoamF2YS51dGlsLkxpc3Q8VD4sIGphdmEudXRpbC5Db21wYXJhdG9yPD8gc3VwZXIgVD4pJyBpbiAnamF2YS51dGlsLkNvbGxlY3Rpb25zJyBjYW5ub3QgYmUgYXBwbGllZCB0byAnKGphdmEudXRpbC5MaXN0PGNhcHR1cmU8PyBzdXBlciBPdGhlckJ1ZzEuRm9vPj4sIGphdmEudXRpbC5Db21wYXJhdG9yPE90aGVyQnVnMS5Gb28+KSciPihmb29zLCBjb21wYXJhdG9yKTwvZXJyb3I+OworICB9CisKKyAgcHJpdmF0ZSBzdGF0aWMgQ29tcGFyYXRvcjxGb28+IGNyZWF0ZUNvbXBhcmF0b3IoKSB7CisgICAgcmV0dXJuIG51bGw7CisgIH0KKworICBwdWJsaWMgaW50ZXJmYWNlIEZvbyB7CisgIH0KK30KKworLy9JREVBREVWLTcxODcKK2NsYXNzIEFBIDxCIGV4dGVuZHMgQUE8QixDPiwgQyBleHRlbmRzIEFBPEMsID8+Pnt9CisvL2VuZCBvZiBJREVBREVWLTcxODcKKworLy9JREVBREVWLTg2OTcKK2NsYXNzIEdlbmVyaWNUZXN0OTk8RSBleHRlbmRzIEdlbmVyaWNUZXN0OTk8RSwgRj4sRj4geworfQorY2xhc3MgR2VuZXJpY1Rlc3Q5OUQ8RSBleHRlbmRzIEdlbmVyaWNUZXN0OTlEPEU+PiBleHRlbmRzIEdlbmVyaWNUZXN0OTk8RSxEb3VibGU+IHsKK30KK2NsYXNzIFVzZTk5PFUgZXh0ZW5kcyBHZW5lcmljVGVzdDk5PD8sRj4sRj4geworfQorY2xhc3MgVXNlOTluIGV4dGVuZHMgVXNlOTk8R2VuZXJpY1Rlc3Q5OUQ8Pz4sRG91YmxlPiB7Cit9CisvL2VuZCBvZiBJREVBREVWLTg2OTcKKworY2xhc3MgSURFQTc5MzYwIHsKKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihNYXA8PywgPz4gbWFwLCBNYXA8T2JqZWN0LCBPYmplY3Q+IHRlc3QpIHsKKyAgICAgICAgbWFwLnB1dEFsbDxlcnJvciBkZXNjcj0iJ3B1dEFsbChqYXZhLnV0aWwuTWFwPGNhcHR1cmU8Pz4sY2FwdHVyZTw/Pj4pJyBpbiAnamF2YS51dGlsLk1hcCcgY2Fubm90IGJlIGFwcGxpZWQgdG8gJyhqYXZhLnV0aWwuTWFwPGphdmEubGFuZy5PYmplY3QsamF2YS5sYW5nLk9iamVjdD4pJyI+KHRlc3QpPC9lcnJvcj47CisgICAgICAgIG1hcC5wdXQ8ZXJyb3IgZGVzY3I9IidwdXQoY2FwdHVyZTw/PiwgY2FwdHVyZTw/PiknIGluICdqYXZhLnV0aWwuTWFwJyBjYW5ub3QgYmUgYXBwbGllZCB0byAnKGphdmEubGFuZy5TdHJpbmcsIGphdmEubGFuZy5TdHJpbmcpJyI+KCIiLCAiIik8L2Vycm9yPjsKKyAgICAgICAgbWFwLnB1dDxlcnJvciBkZXNjcj0iJ3B1dChjYXB0dXJlPD8+LCBjYXB0dXJlPD8+KScgaW4gJ2phdmEudXRpbC5NYXAnIGNhbm5vdCBiZSBhcHBsaWVkIHRvICcoamF2YS5sYW5nLk9iamVjdCwgamF2YS5sYW5nLk9iamVjdCknIj4obmV3IE9iamVjdCgpLCBuZXcgT2JqZWN0KCkpPC9lcnJvcj47CisgICAgICAgIG1hcCA9IG5ldyBIYXNoTWFwPE9iamVjdCwgT2JqZWN0Pih0ZXN0KTsKKyAgICB9Cit9CisKK2NsYXNzIEdlbmVyaWNGYWlsdXJlRXhhbXBsZSB7CisKKyBpbnRlcmZhY2UgRGVzY3JpcHRvcjxUIGV4dGVuZHMgQ29tcGFyYWJsZTxUPj4geworICAgQ2xhc3M8VD4gZ2V0VHlwZSgpOworIH0KKworIHZvaWQgaXNNYXJrZWRGYXVsdHlCdXRDb21waWxlc0NsZWFuKERlc2NyaXB0b3I8Pz4gbikgeworICAgYmFyKG4uZ2V0VHlwZSgpKTsKKyB9CisKKyA8VCBleHRlbmRzIENvbXBhcmFibGU8VD4+IHZvaWQgYnV0VGhpc1dvcmtzKERlc2NyaXB0b3I8VD4gbikgeworICAgYmFyKG4uZ2V0VHlwZSgpKTsKKyB9CisKKyA8VCBleHRlbmRzIENvbXBhcmFibGU8VD4+IENvbXBhcmF0b3I8VD4gYmFyKENsYXNzPFQ+IHR5cGUpIHsKKyAgIHJldHVybiBudWxsOworIH0KK30KKworLy9JREVBLTY3Njc1CithYnN0cmFjdCBjbGFzcyBBNjc2NzU8VD4KK3sKKyAgICBhYnN0cmFjdCBUIGZvbygpOworfQorCithYnN0cmFjdCBjbGFzcyBCNjc2NzU8VD4gZXh0ZW5kcyBBNjc2NzU8VFtdPiB7IH0KKworY2xhc3MgQzY3Njc1PFQgZXh0ZW5kcyBCNjc2NzU8Pz4+Cit7CisgICAgdm9pZCBmb28oVCB4KQorICAgIHsKKyAgICAgICAgeC5mb28oKVswXSA9ICIiOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2dlbmVyaWNzSGlnaGxpZ2h0aW5nL1dpZGVuaW5nQ2FzdFRvVHlwZVBhcmFtLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2dlbmVyaWNzSGlnaGxpZ2h0aW5nL1dpZGVuaW5nQ2FzdFRvVHlwZVBhcmFtLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzYxNWQ3MgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvZ2VuZXJpY3NIaWdobGlnaHRpbmcvV2lkZW5pbmdDYXN0VG9UeXBlUGFyYW0uamF2YQpAQCAtMCwwICsxLDUxIEBACitpbXBvcnQgamF2YS5sYW5nLkRvdWJsZTsKKworaW50ZXJmYWNlIElDb252ZXJ0ZXI8Qz4geworfQorCithYnN0cmFjdCBjbGFzcyBBYnN0cmFjdE51bWJlckNvbnZlcnRlcjxOIGV4dGVuZHMgTnVtYmVyPiBpbXBsZW1lbnRzIElDb252ZXJ0ZXI8Tj4geworfQorCitjbGFzcyBEb3VibGVDb252ZXJ0ZXIgZXh0ZW5kcyBBYnN0cmFjdE51bWJlckNvbnZlcnRlcjxEb3VibGU+IHsKK30KKworcHVibGljIGNsYXNzIFRlc3QgeworICBwdWJsaWMgc3RhdGljIDxDPiBJQ29udmVydGVyPEM+IGdldENvbnZlcnRlcihDbGFzczxDPiB0eXBlKSB7CisgICAgcmV0dXJuIChJQ29udmVydGVyPEM+KW5ldyBEb3VibGVDb252ZXJ0ZXIoKSB7CisgICAgfTsKKyAgfQorCisgIHB1YmxpYyBzdGF0aWMgPEMgZXh0ZW5kcyBTdHJpbmc+IElDb252ZXJ0ZXI8Qz4gZ2V0Q29udmVydGVyMShDbGFzczxDPiB0eXBlKSB7CisgICAgcmV0dXJuIDxlcnJvciBkZXNjcj0iSW5jb252ZXJ0aWJsZSB0eXBlczsgY2Fubm90IGNhc3QgJ0RvdWJsZUNvbnZlcnRlcicgdG8gJ0lDb252ZXJ0ZXI8Qz4nIj4oSUNvbnZlcnRlcjxDPiluZXcgRG91YmxlQ29udmVydGVyKCkgeworICAgIH08L2Vycm9yPjsKKyAgfQorCisgIHB1YmxpYyBzdGF0aWMgPEMgZXh0ZW5kcyBEb3VibGU+IElDb252ZXJ0ZXI8Qz4gZ2V0Q29udmVydGVyMihDbGFzczxDPiB0eXBlKSB7CisgICAgcmV0dXJuIChJQ29udmVydGVyPEM+KW5ldyBEb3VibGVDb252ZXJ0ZXIoKSB7CisgICAgfTsKKyAgfQorCisgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKyAgICBJQ29udmVydGVyPFN0cmluZz4gY29udmVydGVyID0gZ2V0Q29udmVydGVyKFN0cmluZy5jbGFzcyk7CisgICAgSUNvbnZlcnRlcjxTdHJpbmc+IGNvbnZlcnRlcjEgPSBnZXRDb252ZXJ0ZXIxKFN0cmluZy5jbGFzcyk7CisgICAgSUNvbnZlcnRlcjxTdHJpbmc+IGNvbnZlcnRlcjIgPSA8ZXJyb3IgZGVzY3I9IkluZmVycmVkIHR5cGUgJ2phdmEubGFuZy5TdHJpbmcnIGZvciB0eXBlIHBhcmFtZXRlciAnQycgaXMgbm90IHdpdGhpbiBpdHMgYm91bmQ7IHNob3VsZCBleHRlbmQgJ2phdmEubGFuZy5Eb3VibGUnIj5nZXRDb252ZXJ0ZXIyKFN0cmluZy5jbGFzcyk8L2Vycm9yPjsKKyAgfQorfQorCisKK2NsYXNzIFogeworCit9CisKK2NsYXNzIFRlc3ROb25OYXJyb3dpbmdDb252ZXJzaW9uPFQgZXh0ZW5kcyBaPiB7CisgICAgcHVibGljIFRlc3ROb25OYXJyb3dpbmdDb252ZXJzaW9uKFQgdSkgeworCisgICAgfQorCisgICAgcHVibGljIFQgeiA9IG51bGw7CisKKyAgICBwdWJsaWMgaW50IGEoKSB7CisgICAgICAgIDxlcnJvciBkZXNjcj0iSW5jb21wYXRpYmxlIHR5cGVzLiBGb3VuZDogJ1Rlc3ROb25OYXJyb3dpbmdDb252ZXJzaW9uPFo+JywgcmVxdWlyZWQ6ICdUZXN0Tm9uTmFycm93aW5nQ29udmVyc2lvbjxUPiciPlRlc3ROb25OYXJyb3dpbmdDb252ZXJzaW9uPFQ+IHggPSBuZXcgVGVzdE5vbk5hcnJvd2luZ0NvbnZlcnNpb248Wj4obmV3IFooKSk7PC9lcnJvcj4KKyAgICAgICAgcmV0dXJuIDE7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9nZW5lcmljc0hpZ2hsaWdodGluZy9XaWxkY2FyZENhc3RDb252ZXJzaW9uLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2dlbmVyaWNzSGlnaGxpZ2h0aW5nL1dpbGRjYXJkQ2FzdENvbnZlcnNpb24uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYzhkNTNiCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9nZW5lcmljc0hpZ2hsaWdodGluZy9XaWxkY2FyZENhc3RDb252ZXJzaW9uLmphdmEKQEAgLTAsMCArMSw1MzIgQEAKK3B1YmxpYyBjbGFzcyBUZXN0IHsKKyAgaW50ZXJmYWNlIEEge30KKyAgaW50ZXJmYWNlIEIge30KKworIC8vPyBleHRlbmRzIEEsID8gZXh0ZW5kcyBCIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgdm9pZCB0ZXN0RUUxKCkgeworICAgICAgICBjbGFzcyBBIHt9CisgICAgICAgIGNsYXNzIEIge30KKworICAgICAgICBXPD8gZXh0ZW5kcyBBPiB4eCA9IG51bGw7CisgICAgICAgIFc8PyBleHRlbmRzIEI+IHkgPSA8ZXJyb3IgZGVzY3I9IkluY29udmVydGlibGUgdHlwZXM7IGNhbm5vdCBjYXN0ICdXPGNhcHR1cmU8PyBleHRlbmRzIEE+PicgdG8gJ1c8PyBleHRlbmRzIEI+JyI+KFc8PyBleHRlbmRzIEI+KSB4eDwvZXJyb3I+OworICAgIH0KKworICAgIHZvaWQgdGVzdEVFMigpIHsKKyAgICAgICAgY2xhc3MgQSB7fQorICAgICAgICBjbGFzcyBCIGV4dGVuZHMgQSB7fQorCisgICAgICAgIFc8PyBleHRlbmRzIEE+IHh4ID0gbnVsbDsKKyAgICAgICAgVzw/IGV4dGVuZHMgQj4geSA9IChXPD8gZXh0ZW5kcyBCPikgeHg7CisgICAgfQorCisgICAgdm9pZCB0ZXN0RUUyMSgpIHsKKyAgICAgICAgY2xhc3MgQSB7fQorICAgICAgICBjbGFzcyBCIGV4dGVuZHMgQSB7fQorCisgICAgICAgIFc8PyBleHRlbmRzIEI+IHh4ID0gbnVsbDsKKyAgICAgICAgVzw/IGV4dGVuZHMgQT4geSA9IChXPD8gZXh0ZW5kcyBBPikgeHg7CisgICAgfQorCisgICAgdm9pZCB0ZXN0RUUyMTEoKSB7CisgICAgICAgIGNsYXNzIEEge30KKyAgICAgICAgZmluYWwgY2xhc3MgQiBleHRlbmRzIEEge30KKworICAgICAgICBXPD8gZXh0ZW5kcyBBPiB4eCA9IG51bGw7CisgICAgICAgIFc8PyBleHRlbmRzIEI+IHkgPSAoVzw/IGV4dGVuZHMgQj4pIHh4OworICAgIH0KKworICAgIHZvaWQgdGVzdDNFRSgpIHsKKyAgICAgICAgVzw/IGV4dGVuZHMgQT4geHggPSBudWxsOworICAgICAgICBXPD8gZXh0ZW5kcyBCPiB5ID0gKFc8PyBleHRlbmRzIEI+KSB4eDsKKyAgICB9CisKKyAgICB2b2lkIHRlc3Q0RUUoKSB7CisgICAgICAgIGNsYXNzIEEge30KKyAgICAgICAgVzw/IGV4dGVuZHMgQT4geHggPSBudWxsOworICAgICAgICBXPD8gZXh0ZW5kcyBCPiB5ID0gKFc8PyBleHRlbmRzIEI+KSB4eDsKKyAgICB9CisKKyAgICB2b2lkIHRlc3Q0MUVFKCkgeworICAgICAgICBjbGFzcyBBIHt9CisgICAgICAgIFc8PyBleHRlbmRzIEI+IHh4ID0gbnVsbDsKKyAgICAgICAgVzw/IGV4dGVuZHMgQT4geSA9IChXPD8gZXh0ZW5kcyBBPikgeHg7CisgICAgfQorCisgICAgdm9pZCB0ZXN0NDExRUUoKSB7CisgICAgICAgIGZpbmFsIGNsYXNzIEEge30KKyAgICAgICAgVzw/IGV4dGVuZHMgQj4geHggPSBudWxsOworICAgICAgICBXPD8gZXh0ZW5kcyBBPiB5ID0gPGVycm9yIGRlc2NyPSJJbmNvbnZlcnRpYmxlIHR5cGVzOyBjYW5ub3QgY2FzdCAnVzxjYXB0dXJlPD8gZXh0ZW5kcyBUZXN0LkI+PicgdG8gJ1c8PyBleHRlbmRzIEE+JyI+KFc8PyBleHRlbmRzIEE+KSB4eDwvZXJyb3I+OworICAgIH0KKworICAgIHZvaWQgdGVzdDQxMkVFKCkgeworICAgICAgICBmaW5hbCBjbGFzcyBBIGltcGxlbWVudHMgQiB7fQorICAgICAgICBXPD8gZXh0ZW5kcyBCPiB4eCA9IG51bGw7CisgICAgICAgIFc8PyBleHRlbmRzIEE+IHkgPSAoVzw/IGV4dGVuZHMgQT4pIHh4OworICAgIH0KKworICAgIHZvaWQgdGVzdDEoKSB7CisgICAgICAgIGNsYXNzIEEge30KKyAgICAgICAgY2xhc3MgQiB7fQorCisgICAgICAgIFc8PyBzdXBlciBBPiB4eCA9IG51bGw7CisgICAgICAgIFc8PyBzdXBlciBCPiB5ID0gKFc8PyBzdXBlciBCPikgeHg7CisgICAgfQorCisgICAgdm9pZCB0ZXN0MigpIHsKKyAgICAgICAgZmluYWwgY2xhc3MgQSB7fQorICAgICAgICBmaW5hbCBjbGFzcyBCIHt9CisKKyAgICAgICAgVzw/IHN1cGVyIEE+IHh4ID0gbnVsbDsKKyAgICAgICAgVzw/IHN1cGVyIEI+IHkgPSAoVzw/IHN1cGVyIEI+KSB4eDsKKyAgICB9CisKKyAgIC8vPyBzdXBlciBBLCA/IHN1cGVyIEIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIHZvaWQgdGVzdDNTUygpIHsKKyAgICAgICAgVzw/IHN1cGVyIEE+IHh4ID0gbnVsbDsKKyAgICAgICAgVzw/IHN1cGVyIEI+IHkgPSAoVzw/IHN1cGVyIEI+KSB4eDsKKyAgICB9CisKKyAgLy8/IGV4dGVuZHMgQSwgPyBzdXBlciBCIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICB2b2lkIHRlc3QxRVMoKSB7CisgICAgICAgIGNsYXNzIEEge30KKyAgICAgICAgY2xhc3MgQiB7fQorCisgICAgICAgIFc8PyBleHRlbmRzIEE+IHggPSBudWxsOworICAgICAgICBXPD8gc3VwZXIgQj4geSA9IDxlcnJvciBkZXNjcj0iSW5jb252ZXJ0aWJsZSB0eXBlczsgY2Fubm90IGNhc3QgJ1c8Y2FwdHVyZTw/IGV4dGVuZHMgQT4+JyB0byAnVzw/IHN1cGVyIEI+JyI+KFc8PyBzdXBlciBCPikgeDwvZXJyb3I+OworICAgIH0KKworICAgIHZvaWQgdGVzdDJFUygpIHsKKyAgICAgICAgY2xhc3MgQSB7fQorICAgICAgICBjbGFzcyBCIGV4dGVuZHMgQSB7fQorCisgICAgICAgIFc8PyBleHRlbmRzIEE+IHggPSBudWxsOworICAgICAgICBXPD8gc3VwZXIgQj4geSA9IChXPD8gc3VwZXIgQj4pIHg7CisgICAgfQorCisgICAgdm9pZCB0ZXN0M0VTKCkgeworICAgICAgICBjbGFzcyBBIHt9CisgICAgICAgIGNsYXNzIEIgZXh0ZW5kcyBBIHt9CisKKyAgICAgICAgVzw/IGV4dGVuZHMgQj4geCA9IG51bGw7CisgICAgICAgIFc8PyBzdXBlciBBPiB5ID0gPGVycm9yIGRlc2NyPSJJbmNvbnZlcnRpYmxlIHR5cGVzOyBjYW5ub3QgY2FzdCAnVzxjYXB0dXJlPD8gZXh0ZW5kcyBCPj4nIHRvICdXPD8gc3VwZXIgQT4nIj4oVzw/IHN1cGVyIEE+KSB4PC9lcnJvcj47CisgICAgfQorCisKKyAgICB2b2lkIHRlc3Q0RVMoKSB7CisgICAgICAgIFc8PyBleHRlbmRzIEI+IHggPSBudWxsOworICAgICAgICBXPD8gc3VwZXIgQT4geSA9IDxlcnJvciBkZXNjcj0iSW5jb252ZXJ0aWJsZSB0eXBlczsgY2Fubm90IGNhc3QgJ1c8Y2FwdHVyZTw/IGV4dGVuZHMgVGVzdC5CPj4nIHRvICdXPD8gc3VwZXIgVGVzdC5BPiciPihXPD8gc3VwZXIgQT4pIHg8L2Vycm9yPjsKKyAgICB9CisKKyAgICB2b2lkIHRlc3Q1RVMoKSB7CisgICAgICAgIGZpbmFsIGNsYXNzIEIgaW1wbGVtZW50cyBBIHt9CisKKyAgICAgICAgVzw/IGV4dGVuZHMgQT4geCA9IG51bGw7CisgICAgICAgIFc8PyBzdXBlciBCPiB5ID0gKFc8PyBzdXBlciBCPikgeDsKKyAgICB9CisKKyAgICB2b2lkIHRlc3Q2RVMoKSB7CisgICAgICAgIGZpbmFsIGNsYXNzIEIgaW1wbGVtZW50cyBBIHt9CisKKyAgICAgICAgVzw/IGV4dGVuZHMgQj4geCA9IG51bGw7CisgICAgICAgIFc8PyBzdXBlciBBPiB5ID0gPGVycm9yIGRlc2NyPSJJbmNvbnZlcnRpYmxlIHR5cGVzOyBjYW5ub3QgY2FzdCAnVzxjYXB0dXJlPD8gZXh0ZW5kcyBCPj4nIHRvICdXPD8gc3VwZXIgVGVzdC5BPiciPihXPD8gc3VwZXIgQT4pIHg8L2Vycm9yPjsKKyAgICB9CisKKyAgLy8gPyBleHRlbmRzIEEsIEIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICB2b2lkIHRlc3QxRVdDKCkgeworICAgICAgICBjbGFzcyBBIHsKKyAgICAgICAgfQorICAgICAgICBjbGFzcyBCIHsKKyAgICAgICAgfQorCisgICAgICAgIFc8PyBleHRlbmRzIEE+IHh4ID0gbnVsbDsKKyAgICAgICAgVzxCPiB5ID0gPGVycm9yIGRlc2NyPSJJbmNvbnZlcnRpYmxlIHR5cGVzOyBjYW5ub3QgY2FzdCAnVzxjYXB0dXJlPD8gZXh0ZW5kcyBBPj4nIHRvICdXPEI+JyI+KFc8Qj4pIHh4PC9lcnJvcj47CisgICAgfQorCisgICAgdm9pZCB0ZXN0MkVXQygpIHsKKyAgICAgICAgY2xhc3MgQSB7CisgICAgICAgIH0KKworICAgICAgICBXPD8gZXh0ZW5kcyBBPiB4eCA9IG51bGw7CisgICAgICAgIFc8Pz4geSA9IChXPD8+KSB4eDsKKyAgICB9CisKKyAgICB2b2lkIHRlc3QzRVdDKCkgeworICAgICAgICBjbGFzcyBBIHsKKyAgICAgICAgfQorICAgICAgICBjbGFzcyBCIGV4dGVuZHMgQSB7CisgICAgICAgIH0KKworICAgICAgICBXPD8gZXh0ZW5kcyBBPiB4eCA9IG51bGw7CisgICAgICAgIFc8Qj4geSA9IChXPEI+KSB4eDsKKyAgICB9CisKKyAgLy8gPyBzdXBlciBBLCBCIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgdm9pZCB0ZXN0MVNXQygpIHsKKyAgICAgICAgY2xhc3MgQSB7CisgICAgICAgIH0KKyAgICAgICAgY2xhc3MgQiB7CisgICAgICAgIH0KKworICAgICAgICBXPD8gc3VwZXIgQT4geHggPSBudWxsOworICAgICAgICBXPEI+IHkgPSA8ZXJyb3IgZGVzY3I9IkluY29udmVydGlibGUgdHlwZXM7IGNhbm5vdCBjYXN0ICdXPGNhcHR1cmU8PyBzdXBlciBBPj4nIHRvICdXPEI+JyI+KFc8Qj4pIHh4PC9lcnJvcj47CisgICAgfQorCisgICAgdm9pZCB0ZXN0MlNXQygpIHsKKyAgICAgICAgY2xhc3MgQSB7CisgICAgICAgIH0KKworICAgICAgICBXPD8gc3VwZXIgQT4geHggPSBudWxsOworICAgICAgICBXPD8+IHkgPSAoVzw/PikgeHg7CisgICAgfQorCisgICAgdm9pZCB0ZXN0M1NXQygpIHsKKyAgICAgICAgY2xhc3MgQSB7CisgICAgICAgIH0KKyAgICAgICAgY2xhc3MgQiBleHRlbmRzIEEgeworICAgICAgICB9CisKKyAgICAgICAgVzw/IHN1cGVyIEI+IHh4ID0gbnVsbDsKKyAgICAgICAgVzxBPiB5ID0gKFc8QT4pIHh4OworICAgIH0KKworICAvLyA/LCA/IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICB2b2lkIHRlc3QxV1dXKCkgeworICAgIFc8Pz4geHggPSBudWxsOworICAgIFc8Pz4geSA9IHh4OworICB9CisKKyAgLy8/IGV4dGVuZHMgUDw/IGV4dGVuZHMgQT4sIEIgLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIHZvaWQgdGVzdDFFRVdDKCkgeworICAgICAgICBjbGFzcyBBIHsKKyAgICAgICAgfQorICAgICAgICBjbGFzcyBCIHsKKyAgICAgICAgfQorCisgICAgICAgIFc8PyBleHRlbmRzIFA8PyBleHRlbmRzIEE+PiB4eCA9IG51bGw7CisgICAgICAgIFc8PyBleHRlbmRzIEI+IHkgPSA8ZXJyb3IgZGVzY3I9IkluY29udmVydGlibGUgdHlwZXM7IGNhbm5vdCBjYXN0ICdXPGNhcHR1cmU8PyBleHRlbmRzIFA8PyBleHRlbmRzIEE+Pj4nIHRvICdXPD8gZXh0ZW5kcyBCPiciPihXPD8gZXh0ZW5kcyBCPikgeHg8L2Vycm9yPjsKKyAgICB9CisKKyAgICB2b2lkIHRlc3QyRUVXQygpIHsKKyAgICAgICAgY2xhc3MgQSB7CisgICAgICAgIH0KKyAgICAgICAgY2xhc3MgQiBleHRlbmRzIFAgeworICAgICAgICB9CisKKyAgICAgICAgVzw/IGV4dGVuZHMgUDw/IGV4dGVuZHMgQT4+IHh4ID0gbnVsbDsKKyAgICAgICAgVzw/IGV4dGVuZHMgQj4geSA9IChXPD8gZXh0ZW5kcyBCPikgeHg7CisgICAgfQorCisgICAgIHZvaWQgdGVzdDNFRVdDKCkgeworICAgICAgICBjbGFzcyBBIHsKKyAgICAgICAgfQorICAgICAgICBjbGFzcyBCPFRCPiBleHRlbmRzIFA8VEI+IHsKKyAgICAgICAgfQorCisgICAgICAgIFc8PyBleHRlbmRzIFA8PyBleHRlbmRzIEE+PiB4eCA9IG51bGw7CisgICAgICAgIFc8PyBleHRlbmRzIEI8PyBzdXBlciBBPj4geSA9IChXPD8gZXh0ZW5kcyBCPD8gc3VwZXIgQT4+KSB4eDsKKyAgICB9CisKKworICAgICB2b2lkIHRlc3Q0RUVXQygpIHsKKyAgICAgICAgY2xhc3MgQSB7CisgICAgICAgIH0KKyAgICAgICAgY2xhc3MgQjxUQj4gZXh0ZW5kcyBQPFRCPiB7CisgICAgICAgIH0KKworICAgICAgICBXPD8gZXh0ZW5kcyBQPD8gZXh0ZW5kcyBBPj4geHggPSBudWxsOworICAgICAgICBXPD8gZXh0ZW5kcyBCPD8+PiB5ID0gKFc8PyBleHRlbmRzIEI8Pz4+KSB4eDsKKyAgICB9CisKKyAgICB2b2lkIHRlc3Q1RUVXQygpIHsKKyAgICAgICAgY2xhc3MgQSB7CisgICAgICAgIH0KKyAgICAgICAgY2xhc3MgQjxUQj4gZXh0ZW5kcyBQPFRCPiB7CisgICAgICAgIH0KKyAgICAgICAgY2xhc3MgQyB7fQorCisgICAgICAgIFc8PyBleHRlbmRzIFA8PyBleHRlbmRzIEE+PiB4eCA9IG51bGw7CisgICAgICAgIFc8PyBleHRlbmRzIEI8PyBleHRlbmRzIEM+PiB5ID0gKFc8PyBleHRlbmRzIEI8PyBleHRlbmRzIEM+PikgeHg7CisgICAgfQorCisgIC8vQXJyYXkgVHlwZXMgaW5zaWRlIHdpbGRjYXJkcworICB2b2lkIHRlc3QxQUUoKSB7CisgICAgICAgIGNsYXNzIEEge30KKyAgICAgICAgY2xhc3MgQiB7fQorCisgICAgICAgIFc8PyBleHRlbmRzIEFbXT4geHggPSBudWxsOworICAgICAgICBXPD8gZXh0ZW5kcyBCW10+IHkgPSA8ZXJyb3IgZGVzY3I9IkluY29udmVydGlibGUgdHlwZXM7IGNhbm5vdCBjYXN0ICdXPGNhcHR1cmU8PyBleHRlbmRzIEFbXT4+JyB0byAnVzw/IGV4dGVuZHMgQltdPiciPihXPD8gZXh0ZW5kcyBCW10+KSB4eDwvZXJyb3I+OworICAgIH0KKworICAgIHZvaWQgdGVzdDExQUUoKSB7CisgICAgICAgIGNsYXNzIEEge30KKyAgICAgICAgY2xhc3MgQiB7fQorCisgICAgICAgIFc8PyBleHRlbmRzIEFbXT4geHggPSBudWxsOworICAgICAgICBXPD8gZXh0ZW5kcyBCPiB5ID0gPGVycm9yIGRlc2NyPSJJbmNvbnZlcnRpYmxlIHR5cGVzOyBjYW5ub3QgY2FzdCAnVzxjYXB0dXJlPD8gZXh0ZW5kcyBBW10+PicgdG8gJ1c8PyBleHRlbmRzIEI+JyI+KFc8PyBleHRlbmRzIEI+KSB4eDwvZXJyb3I+OworICAgIH0KKworICAgICB2b2lkIHRlc3QyQUUoKSB7CisgICAgICAgIGNsYXNzIEEge30KKyAgICAgICAgY2xhc3MgQiBleHRlbmRzIEEge30KKworICAgICAgICBXPD8gZXh0ZW5kcyBBW10+IHh4ID0gbnVsbDsKKyAgICAgICAgVzw/IGV4dGVuZHMgQltdPiB5ID0gKFc8PyBleHRlbmRzIEJbXT4pIHh4OworICAgIH0KKworICAgIHZvaWQgdGVzdDIxQUUoKSB7CisgICAgICAgIGNsYXNzIEEge30KKyAgICAgICAgY2xhc3MgQiBleHRlbmRzIEEge30KKworICAgICAgICBXPD8gZXh0ZW5kcyBBW10+IHh4ID0gbnVsbDsKKyAgICAgICAgVzw/IGV4dGVuZHMgQj4geSA9IDxlcnJvciBkZXNjcj0iSW5jb252ZXJ0aWJsZSB0eXBlczsgY2Fubm90IGNhc3QgJ1c8Y2FwdHVyZTw/IGV4dGVuZHMgQVtdPj4nIHRvICdXPD8gZXh0ZW5kcyBCPiciPihXPD8gZXh0ZW5kcyBCPikgeHg8L2Vycm9yPjsKKyAgICB9CisKKworCisgICAgdm9pZCB0ZXN0SW50QUUoKSB7CisKKyAgICAgICAgVzw/IGV4dGVuZHMgQVtdPiB4eCA9IG51bGw7CisgICAgICAgIFc8PyBleHRlbmRzIEJbXT4geSA9IChXPD8gZXh0ZW5kcyBCW10+KSB4eDsKKyAgICB9CisKKyAgICB2b2lkIHRlc3RJbnQxQUUoKSB7CisKKyAgICAgICAgVzw/IGV4dGVuZHMgQVtdPiB4eCA9IG51bGw7CisgICAgICAgIFc8PyBleHRlbmRzIEJbXVtdPiB5ID0gPGVycm9yIGRlc2NyPSJJbmNvbnZlcnRpYmxlIHR5cGVzOyBjYW5ub3QgY2FzdCAnVzxjYXB0dXJlPD8gZXh0ZW5kcyBUZXN0LkFbXT4+JyB0byAnVzw/IGV4dGVuZHMgVGVzdC5CW11bXT4nIj4oVzw/IGV4dGVuZHMgQltdW10+KSB4eDwvZXJyb3I+OworICAgIH0KKworICAgIHZvaWQgdGVzdEFTUygpIHsKKyAgICAgICAgY2xhc3MgQSB7fQorICAgICAgICBjbGFzcyBCIHt9CisKKyAgICAgICAgVzw/IHN1cGVyIEFbXT4geHggPSBudWxsOworICAgICAgICBXPD8gc3VwZXIgQltdPiB5ID0gKFc8PyBzdXBlciBCW10+KSB4eDsKKyAgICB9CisKKyAgICB2b2lkIHRlc3QxQUVTKCkgeworICAgICAgICBjbGFzcyBBIHt9CisgICAgICAgIGNsYXNzIEIge30KKworICAgICAgICBXPD8gZXh0ZW5kcyBBW10+IHggPSBudWxsOworICAgICAgICBXPD8gc3VwZXIgQltdPiB5ID0gPGVycm9yIGRlc2NyPSJJbmNvbnZlcnRpYmxlIHR5cGVzOyBjYW5ub3QgY2FzdCAnVzxjYXB0dXJlPD8gZXh0ZW5kcyBBW10+PicgdG8gJ1c8PyBzdXBlciBCW10+JyI+KFc8PyBzdXBlciBCW10+KSB4PC9lcnJvcj47CisgICAgfQorCisgICAgdm9pZCB0ZXN0MkFFUygpIHsKKyAgICAgICAgY2xhc3MgQSB7fQorICAgICAgICBjbGFzcyBCIGV4dGVuZHMgQSB7fQorCisgICAgICAgIFc8PyBleHRlbmRzIEFbXT4geCA9IG51bGw7CisgICAgICAgIFc8PyBzdXBlciBCW10+IHkgPSAoVzw/IHN1cGVyIEJbXT4pIHg7CisgICAgfQorCisgICAgdm9pZCB0ZXN0M0FFUygpIHsKKyAgICAgICAgY2xhc3MgQSB7fQorICAgICAgICBjbGFzcyBCIGV4dGVuZHMgQSB7fQorCisgICAgICAgIFc8PyBleHRlbmRzIEJbXT4geCA9IG51bGw7CisgICAgICAgIFc8PyBzdXBlciBBW10+IHkgPSA8ZXJyb3IgZGVzY3I9IkluY29udmVydGlibGUgdHlwZXM7IGNhbm5vdCBjYXN0ICdXPGNhcHR1cmU8PyBleHRlbmRzIEJbXT4+JyB0byAnVzw/IHN1cGVyIEFbXT4nIj4oVzw/IHN1cGVyIEFbXT4pIHg8L2Vycm9yPjsKKyAgICB9CisKKworCisgICAgdm9pZCB0ZXN0NEFFUygpIHsKKyAgICAgICAgVzw/IGV4dGVuZHMgQltdPiB4ID0gbnVsbDsKKyAgICAgICAgVzw/IHN1cGVyIEFbXT4geSA9IDxlcnJvciBkZXNjcj0iSW5jb252ZXJ0aWJsZSB0eXBlczsgY2Fubm90IGNhc3QgJ1c8Y2FwdHVyZTw/IGV4dGVuZHMgVGVzdC5CW10+PicgdG8gJ1c8PyBzdXBlciBUZXN0LkFbXT4nIj4oVzw/IHN1cGVyIEFbXT4pIHg8L2Vycm9yPjsKKyAgICB9CisKKyAgICB2b2lkIHRlc3Q1QUVTKCkgeworICAgICAgICBmaW5hbCBjbGFzcyBCIGltcGxlbWVudHMgQSB7fQorCisgICAgICAgIFc8PyBleHRlbmRzIEFbXT4geCA9IG51bGw7CisgICAgICAgIFc8PyBzdXBlciBCW10+IHkgPSAoVzw/IHN1cGVyIEJbXT4pIHg7CisgICAgfQorCisgICAgdm9pZCB0ZXN0NkFFUygpIHsKKyAgICAgICAgZmluYWwgY2xhc3MgQiBpbXBsZW1lbnRzIEEge30KKworICAgICAgICBXPD8gZXh0ZW5kcyBCW10+IHggPSBudWxsOworICAgICAgICBXPD8gc3VwZXIgQVtdPiB5ID0gPGVycm9yIGRlc2NyPSJJbmNvbnZlcnRpYmxlIHR5cGVzOyBjYW5ub3QgY2FzdCAnVzxjYXB0dXJlPD8gZXh0ZW5kcyBCW10+PicgdG8gJ1c8PyBzdXBlciBUZXN0LkFbXT4nIj4oVzw/IHN1cGVyIEFbXT4pIHg8L2Vycm9yPjsKKyAgICB9CisKKyAgLy8gdHlwZSBwYXJhbWV0ZXJzIGV4dGVuc2lvbnM6IEQ8VCBleHRlbmRzIEE+CisgIHZvaWQgdGVzdFQzKCkgeworICAgICAgICBjbGFzcyBBIHsKKyAgICAgICAgfQorICAgICAgICBjbGFzcyBEPFQgZXh0ZW5kcyBBID4geworICAgICAgICAgICAgY2xhc3MgQiBleHRlbmRzIEEgeworICAgICAgICAgICAgfQorCisgICAgICAgICAgICB2b2lkIGZvbygpIHsKKyAgICAgICAgICAgICAgICBEPD8gZXh0ZW5kcyBUPiB4ID0gbnVsbDsKKyAgICAgICAgICAgICAgICBEPD8gZXh0ZW5kcyBCPiB5ID0gKEQ8PyBleHRlbmRzIEI+KSB4OworICAgICAgICAgICAgfQorCisgICAgICAgIH0KKworICAgIH0KKworICAgIHZvaWQgdGVzdFQ0KCkgeworICAgICAgICBjbGFzcyBBIHsKKyAgICAgICAgfQorICAgICAgICBjbGFzcyBEPFQgZXh0ZW5kcyBBPiB7CisgICAgICAgICAgICBjbGFzcyBCIHsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgdm9pZCBmb28oKSB7CisgICAgICAgICAgICAgICAgRDw/IGV4dGVuZHMgVD4geCA9IG51bGw7CisgICAgICAgICAgICAgICAgRDw8ZXJyb3IgZGVzY3I9IlR5cGUgcGFyYW1ldGVyICc/IGV4dGVuZHMgQicgaXMgbm90IHdpdGhpbiBpdHMgYm91bmQ7IHNob3VsZCBleHRlbmQgJ0EnIj4/IGV4dGVuZHMgQjwvZXJyb3I+PiB5ID0gKEQ8PGVycm9yIGRlc2NyPSJUeXBlIHBhcmFtZXRlciAnPyBleHRlbmRzIEInIGlzIG5vdCB3aXRoaW4gaXRzIGJvdW5kOyBzaG91bGQgZXh0ZW5kICdBJyI+PyBleHRlbmRzIEI8L2Vycm9yPj4pIHg7CisgICAgICAgICAgICB9CisKKyAgICAgICAgfQorCisgICAgfQorCisKKyAgICB2b2lkIHRlc3RUNSgpIHsKKyAgICAgICAgICAgY2xhc3MgRDxUPiB7CisgICAgICAgICAgICAgICBjbGFzcyBCIHsKKyAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgdm9pZCBmb28oKSB7CisgICAgICAgICAgICAgICAgICAgRDw/IGV4dGVuZHMgVD4geCA9IG51bGw7CisgICAgICAgICAgICAgICAgICAgRDw/IGV4dGVuZHMgQj4geSA9IChEPD8gZXh0ZW5kcyBCPikgeDsKKyAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICB9CisKKyAgICAgICB9CisKKyAgICB2b2lkIHRlc3RUNigpIHsKKyAgICAgICAgY2xhc3MgQSB7CisgICAgICAgIH0KKyAgICAgICAgY2xhc3MgRDxUIGV4dGVuZHMgQT4geworICAgICAgICAgICAgY2xhc3MgQiBleHRlbmRzIEEgeworICAgICAgICAgICAgfQorCisgICAgICAgICAgICB2b2lkIGZvbygpIHsKKyAgICAgICAgICAgICAgICBEPD8gc3VwZXIgVD4geCA9IG51bGw7CisgICAgICAgICAgICAgICAgRDw/IHN1cGVyIEI+IHkgPSAoRDw/ICBzdXBlciBCPikgeDsKKyAgICAgICAgICAgIH0KKworICAgICAgICB9CisKKyAgICB9CisKKyAgICAgdm9pZCB0ZXN0VDcoKSB7CisgICAgICAgIGNsYXNzIEEgeworICAgICAgICB9CisgICAgICAgIGNsYXNzIEQ8VCBleHRlbmRzIEE+IHsKKyAgICAgICAgICAgIGNsYXNzIEIgZXh0ZW5kcyBBIHsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgdm9pZCBmb28oKSB7CisgICAgICAgICAgICAgICAgRDw/IGV4dGVuZHMgVD4geCA9IG51bGw7CisgICAgICAgICAgICAgICAgRDw/IHN1cGVyIEI+IHkgPSAoRDw/ICBzdXBlciBCPikgeDsKKyAgICAgICAgICAgIH0KKworICAgICAgICB9CisKKyAgICB9CisKKyAgICAgdm9pZCB0ZXN0VDgoKSB7CisgICAgICAgIGNsYXNzIEEgeworICAgICAgICB9CisgICAgICAgIGNsYXNzIEQ8VCBleHRlbmRzIEE+IHsKKyAgICAgICAgICAgIGNsYXNzIEIgZXh0ZW5kcyBBIHsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgdm9pZCBmb28oKSB7CisgICAgICAgICAgICAgICAgRDw/IHN1cGVyIFQ+IHggPSBudWxsOworICAgICAgICAgICAgICAgIEQ8PyBleHRlbmRzIEI+IHkgPSAoRDw/IGV4dGVuZHMgQj4pIHg7CisgICAgICAgICAgICB9CisKKyAgICAgICAgfQorCisgICAgfQorCisgICAgIHZvaWQgdGVzdFQ5KCkgeworICAgICAgICBjbGFzcyBBIHsKKyAgICAgICAgfQorICAgICAgICBjbGFzcyBEPFQ+IHsKKyAgICAgICAgICAgIGNsYXNzIEIgZXh0ZW5kcyBBIHsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgdm9pZCBmb28oKSB7CisgICAgICAgICAgICAgICAgRDw/IHN1cGVyIFQ+IHggPSBudWxsOworICAgICAgICAgICAgICAgIEQ8PyBleHRlbmRzIEE+IHkgPSAoRDw/IGV4dGVuZHMgQj4pIHg7CisgICAgICAgICAgICB9CisKKyAgICAgICAgfQorCisgICAgfQorCisgICAgdm9pZCB0ZXN0VW5ib3VuZGVkKCkgeworICAgICAgVzw/PiB4ID0gbnVsbDsKKyAgICAgIFc8PyBleHRlbmRzIEE+IHkgPSAoIFc8PyBleHRlbmRzIEE+KSB4OworICAgICAgVzw/PiB5MSA9IChXPD8+KXg7CisgICAgfQorCisgICAgdm9pZCB0ZXN0VHlwZVBhcmFtcygpIHsKKyAgICAgIGNsYXNzIE15Q2xhc3M8SywgVj4geworICAgICAgICBNeUNsYXNzPEssIFY+IGNvbnZlcnQoTXlDbGFzczw/IHN1cGVyIEssID8gc3VwZXIgVj4gYXJnKSB7CisgICAgICAgICAgTXlDbGFzczxLLCBWPiByZXN1bHQgPSAoTXlDbGFzczxLLCBWPilhcmc7CisgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKworICAgIC8vSURFQS02MzQ0NworICAgIHZvaWQgdGVzdFVuYm91bmRXaWxkY2FyZFdpdGhBcnJheVR5cGVzKCkgeworICAgICAgICBjbGFzcyBJVVdXQVR7CisgICAgICAgICAgICBwcml2YXRlIDxUPiB2b2lkIG1ldGhvZDEoVFtdW10gbWF0cml4KSB7CisgICAgICAgICAgICAgICAgZmluYWwgQ2xhc3M8VFtdPiB0eXBlID0gKENsYXNzPFRbXT4pIG1hdHJpeC5nZXRDbGFzcygpLmdldENvbXBvbmVudFR5cGUoKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcHJpdmF0ZSA8VD4gdm9pZCBtZXRob2QyKFRbXVtdIG1hdHJpeCkgeworICAgICAgICAgICAgICAgIGZpbmFsIENsYXNzPE9iamVjdD4gdHlwZSA9IChDbGFzczxPYmplY3Q+KSBtYXRyaXguZ2V0Q2xhc3MoKS5nZXRDb21wb25lbnRUeXBlKCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHByaXZhdGUgPFQ+IHZvaWQgbWV0aG9kMyhUW11bXSBtYXRyaXgpIHsKKyAgICAgICAgICAgICAgICBmaW5hbCBDbGFzczxPYmplY3RbXT4gdHlwZSA9IChDbGFzczxPYmplY3RbXT4pIG1hdHJpeC5nZXRDbGFzcygpLmdldENvbXBvbmVudFR5cGUoKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcHJpdmF0ZSA8VD4gdm9pZCBtZXRob2Q0KFRbXVtdIG1hdHJpeCkgeworICAgICAgICAgICAgICAgIGZpbmFsIENsYXNzPE9iamVjdFtdW10+IHR5cGUgPSAoQ2xhc3M8T2JqZWN0W11bXT4pIG1hdHJpeC5nZXRDbGFzcygpLmdldENvbXBvbmVudFR5cGUoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK30KKworY2xhc3MgVzxUPiB7fQorY2xhc3MgUDxMPiB7fQorCisvLyBJREVBLTYyNTI5CitjbGFzcyBSZWZ4PFQ+IHsKKyAgICBDbGFzczw/IHN1cGVyIFQ+IGdldCgpIHsgcmV0dXJuIG51bGw7IH0KKyAgICBib29sZWFuIGYoKSB7CisgICAgICBpZiAoZ2V0KCkgPT0gRW51bS5jbGFzcykgcmV0dXJuIGZhbHNlOworICAgICAgcmV0dXJuIChDbGFzczxFbnVtPilnZXQoKSA9PSBFbnVtLmNsYXNzOworICAgIH0KK30KKworCisvL2hpZXJhcmNoeSBvZiB0eXBlIHBhcmFtIGJvdW5kCithYnN0cmFjdCBjbGFzcyBEb21JbnZvY2F0aW9uSGFuZGxlcjxUIGV4dGVuZHMgQWJzdHJhY3REb21DaGlsZERlc2NyaXB0aW9uSW1wbD4geworICAgIHZvaWQgZigpIHsKKyAgICAgICAgaWYgKHRoaXMgIGluc3RhbmNlb2YgSW5kZXhlZEVsZW1lbnRJbnZvY2F0aW9uSGFuZGxlcikgeworICAgICAgICB9CisgICAgfQorfQorCitpbnRlcmZhY2UgQWJzdHJhY3REb21DaGlsZHJlbkRlc2NyaXB0aW9uIHsKK30KKworY2xhc3MgQWJzdHJhY3REb21DaGlsZERlc2NyaXB0aW9uSW1wbCBpbXBsZW1lbnRzIEFic3RyYWN0RG9tQ2hpbGRyZW5EZXNjcmlwdGlvbiB7Cit9CisKK2NsYXNzIEluZGV4ZWRFbGVtZW50SW52b2NhdGlvbkhhbmRsZXIgZXh0ZW5kcyBEb21JbnZvY2F0aW9uSGFuZGxlcjxGaXhlZENoaWxkRGVzY3JpcHRpb25JbXBsPiB7Cit9CisKK2NsYXNzIEZpeGVkQ2hpbGREZXNjcmlwdGlvbkltcGwgZXh0ZW5kcyBBYnN0cmFjdERvbUNoaWxkRGVzY3JpcHRpb25JbXBsIHsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2dlbmVyaWNzSGlnaGxpZ2h0aW5nL1dpbGRjYXJkVHlwZXMuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvZ2VuZXJpY3NIaWdobGlnaHRpbmcvV2lsZGNhcmRUeXBlcy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIyMzA1OTEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2dlbmVyaWNzSGlnaGxpZ2h0aW5nL1dpbGRjYXJkVHlwZXMuamF2YQpAQCAtMCwwICsxLDI0NiBAQAoraW1wb3J0IGphdmEudXRpbC4qOworCitjbGFzcyBhIHsKKyAgICBwdWJsaWMgdm9pZCBwcmludExpc3QoTGlzdDw/PiBsaXN0KSB7CisgICAgICAgIGZvciAoSXRlcmF0b3I8Pz4gaSA9IGxpc3QuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7KSB7CisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oaS5uZXh0KCkudG9TdHJpbmcoKSk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK2NsYXNzIGI8PHdhcm5pbmcgZGVzY3I9IlR5cGUgcGFyYW1ldGVyICdUJyBpcyBuZXZlciB1c2VkIj5UPC93YXJuaW5nPj4geworICAgIHB1YmxpYyBpbnRlcmZhY2UgTHN0IDxFLCBTZWxmIGV4dGVuZHMgTHN0PEUsIFNlbGY+PiB7CisgICAgICAgIFNlbGYgc3ViTGlzdChpbnQgZnJvbUluZGV4LCBpbnQgdG9JbmRleCk7CisgICAgfQorCisgICAgcHVibGljIHN0YXRpYyBMc3Q8PywgPz4gZm9vKExzdDw/LCA/PiBsc3QpIHsKKyAgICAgICBMc3Q8PywgPz4gbXlsID0gbHN0LnN1Ykxpc3QoMCwgMik7CisgICAgICAgcmV0dXJuIG15bDsKKyAgICB9Cit9CisKK2NsYXNzIFRoaW5nVXNlciA8Vj4geworICAgIFYgdjsKKyAgICB7CisgICAgICAgIG5ldyBUaGluZ1VzZXI8PGVycm9yIGRlc2NyPSJXaWxkY2FyZCB0eXBlICc/JyBjYW5ub3QgYmUgaW5zdGFudGlhdGVkIGRpcmVjdGx5Ij4/PC9lcnJvcj4+KCkgeworICAgICAgICB9OworICAgIH0KK30KKworY2xhc3MgU3VwZXJXaWxkY2FyZFRlc3QgeworICAgIHN0YXRpYyB2b2lkIG1ldGhvZChMaXN0PD8+IGxpc3QpIHsKKyAgICAgICAgPGVycm9yIGRlc2NyPSJJbmNvbXBhdGlibGUgdHlwZXMuIEZvdW5kOiAnamF2YS51dGlsLkxpc3Q8Y2FwdHVyZTw/Pj4nLCByZXF1aXJlZDogJ2phdmEudXRpbC5MaXN0PD8gc3VwZXIgamF2YS5sYW5nLlN0cmluZz4nIj5MaXN0PD8gc3VwZXIgU3RyaW5nPiAgbCA9IGxpc3Q7PC9lcnJvcj4KKyAgICAgICAgbC5zaXplKCk7CisgICAgfQorfQorCitjbGFzcyBJZGVhRGV2NDE2NiB7CisgICAgTWFwPFN0cmluZywgT2JqZWN0PiBmKCBNYXA8U3RyaW5nLCA/PiBmaWVsZHNUZW1wbGF0ZSkgeworICAgICAgICByZXR1cm4gbmV3IEhhc2hNYXA8U3RyaW5nLCBPYmplY3Q+KCBmaWVsZHNUZW1wbGF0ZSk7CisgICAgfQorfQorCisvL0lERUFERVYtNTgxNgorY2xhc3MgVHdvRCB7CisgIGludCB4LCB5OworICBUd29EKGludCBhLCBpbnQgYikgeworICAgIHggPSBhOworICAgIHkgPSBiOworICB9Cit9CisvLyBUaHJlZS1kaW1lbnNpb25hbCBjb29yZGluYXRlcy4KK2NsYXNzIFRocmVlRCBleHRlbmRzIFR3b0QgeworICBpbnQgejsKKyAgVGhyZWVEKGludCBhLCBpbnQgYiwgaW50IGMpIHsKKyAgICBzdXBlcihhLCBiKTsKKyAgICB6ID0gYzsKKyAgfQorfQorLy8gRm91ci1kaW1lbnNpb25hbCBjb29yZGluYXRlcy4KK2NsYXNzIEZvdXJEIGV4dGVuZHMgVGhyZWVEIHsKKyAgaW50IHQ7CisgIEZvdXJEKGludCBhLCBpbnQgYiwgaW50IGMsIGludCBkKSB7CisgICAgc3VwZXIoYSwgYiwgYyk7CisgICAgdCA9IGQ7CisgIH0KK30KKy8vIFRoaXMgY2xhc3MgaG9sZHMgYW4gYXJyYXkgb2YgY29vcmRpbmF0ZSBvYmplY3RzLgorY2xhc3MgQ29vcmRzPFQgZXh0ZW5kcyBUd29EPiB7CisgIFRbXSBjb29yZHM7CisgIENvb3JkcyhUW10gbykgeyBjb29yZHMgPSBvOyB9Cit9CisKKy8vIERlbW9uc3RyYXRlIGEgYm91bmRlZCB3aWxkY2FyZC4KK2NsYXNzIEJvdW5kZWRXaWxkY2FyZCB7CisKKyAgc3RhdGljIHZvaWQgc2hvd1hZKENvb3Jkczw/IGV4dGVuZHMgVHdvRD4gYykgeworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiWCBZIENvb3JkaW5hdGVzOiIpOworICAgIGZvcihpbnQgaT0wOyBpIDwgYy5jb29yZHMubGVuZ3RoOyBpKyspIHsKKyAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihjLmNvb3Jkc1tpXS54ICsgIiAiICsgYy5jb29yZHNbaV0ueSk7CisgICAgfQorICAgIFN5c3RlbS5vdXQucHJpbnRsbigpOworICB9CisKKyAgc3RhdGljIHZvaWQgc2hvd1hZWihDb29yZHM8PyBleHRlbmRzIFRocmVlRD4gYykgeworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiWCBZIFogQ29vcmRpbmF0ZXM6Iik7CisgICAgZm9yKGludCBpPTA7IGkgPCBjLmNvb3Jkcy5sZW5ndGg7IGkrKykKKyAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihjLmNvb3Jkc1tpXS54ICsgIiAiICsKKyAgICAgICAgICAgICAgICAgICAgICAgICBjLmNvb3Jkc1tpXS55ICsgIiAiICsKKyAgICAgICAgICAgICAgICAgICAgICAgICBjLmNvb3Jkc1tpXS56KTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oKTsKKyAgfQorCisgIHN0YXRpYyB2b2lkIHNob3dBbGwoQ29vcmRzPD8gZXh0ZW5kcyBGb3VyRD4gYykgeworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiWCBZIFogVCBDb29yZGluYXRlczoiKTsKKyAgICBmb3IoaW50IGk9MDsgaSA8IGMuY29vcmRzLmxlbmd0aDsgaSsrKQorICAgICAgU3lzdGVtLm91dC5wcmludGxuKGMuY29vcmRzW2ldLnggKyAiICIgKworICAgICAgICAgICAgICAgICAgICAgICAgIGMuY29vcmRzW2ldLnkgKyAiICIgKworICAgICAgICAgICAgICAgICAgICAgICAgIGMuY29vcmRzW2ldLnogKyAiICIgKworICAgICAgICAgICAgICAgICAgICAgICAgIGMuY29vcmRzW2ldLnQpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigpOworICB9CisKKyAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nIGFyZ3NbXSkgeworICAgIFR3b0QgdGRbXSA9IHsKKyAgICAgIG5ldyBUd29EKDAsIDApLAorICAgICAgbmV3IFR3b0QoNywgOSksCisgICAgICBuZXcgVHdvRCgxOCwgNCksCisgICAgICBuZXcgVHdvRCgtMSwgLTIzKQorICAgIH07CisgICAgQ29vcmRzPFR3b0Q+IHRkbG9jcyA9IG5ldyBDb29yZHM8VHdvRD4odGQpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ29udGVudHMgb2YgdGRsb2NzLiIpOworICAgIHNob3dYWSh0ZGxvY3MpOyAvLyBPSywgaXMgYSBUd29ECisgICAgc2hvd1hZWjxlcnJvciBkZXNjcj0iJ3Nob3dYWVooQ29vcmRzPD8gZXh0ZW5kcyBUaHJlZUQ+KScgaW4gJ0JvdW5kZWRXaWxkY2FyZCcgY2Fubm90IGJlIGFwcGxpZWQgdG8gJyhDb29yZHM8VHdvRD4pJyI+KHRkbG9jcyk8L2Vycm9yPjsKKyAgICBzaG93QWxsPGVycm9yIGRlc2NyPSInc2hvd0FsbChDb29yZHM8PyBleHRlbmRzIEZvdXJEPiknIGluICdCb3VuZGVkV2lsZGNhcmQnIGNhbm5vdCBiZSBhcHBsaWVkIHRvICcoQ29vcmRzPFR3b0Q+KSciPih0ZGxvY3MpPC9lcnJvcj47CisgICAgLy8gTm93LCBjcmVhdGUgc29tZSBGb3VyRCBvYmplY3RzLgorICAgIEZvdXJEIGZkW10gPSB7CisgICAgICBuZXcgRm91ckQoMSwgMiwgMywgNCksCisgICAgICBuZXcgRm91ckQoNiwgOCwgMTQsIDgpLAorICAgICAgbmV3IEZvdXJEKDIyLCA5LCA0LCA5KSwKKyAgICAgIG5ldyBGb3VyRCgzLCAtMiwgLTIzLCAxNykKKyAgICB9OworICAgIENvb3JkczxGb3VyRD4gZmRsb2NzID0gbmV3IENvb3JkczxGb3VyRD4oZmQpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ29udGVudHMgb2YgZmRsb2NzLiIpOworICAgIC8vIFRoZXNlIGFyZSBhbGwgT0suCisgICAgc2hvd1hZKGZkbG9jcyk7CisgICAgc2hvd1hZWihmZGxvY3MpOworICAgIHNob3dBbGwoZmRsb2NzKTsKKyAgfQorfQorLy9lbmQgb2YgSURFQURFVi01ODE2CisKK2ludGVyZmFjZSBJMzMge30KK3B1YmxpYyBjbGFzcyBRPFQgZXh0ZW5kcyBJMzM+IHsKKyAgICBUIHQ7CisgICAgPFYgZXh0ZW5kcyBJMzM+IExpc3Q8Vj4gZm9vKFE8Vj4gdikgeworICAgICAgdi5oYXNoQ29kZSgpOworICAgICAgcmV0dXJuIG51bGw7CisgICAgfQorCisgICAgTGlzdDw/IGV4dGVuZHMgSTMzPiAgZyAoUTw/PiBxKSB7CisgICAgICByZXR1cm4gZm9vKHEpOworICAgIH0KK30KKworLy9JREVBREVWLTE2NjI4IAorY2xhc3MgQ29sbGVjdGlvbkhlbHBlciB7CisgIHB1YmxpYyBzdGF0aWMgPEE+IENvbGxlY3Rpb248QT4gY29udmVydERvd24oQ29sbGVjdGlvbjw/IHN1cGVyIEE+IGNvbGxlY3Rpb24pIHsKKyAgICByZXR1cm4gY29sbGVjdGlvbiA9PSBudWxsID8gbnVsbCA6IG51bGw7CisgIH0KKyAgcHVibGljIHN0YXRpYyA8QT4gQ29sbGVjdGlvbjxBPiBjb252ZXJ0VXAoQ29sbGVjdGlvbjw/IGV4dGVuZHMgQT4gY29sbGVjdGlvbikgeworICAgIHJldHVybiBjb2xsZWN0aW9uID09IG51bGwgPyBudWxsIDogbnVsbDsKKyAgfQorCisgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKyAgICAvLyBEb3duY2FzdCBleGFtcGxlcworICAgIGZpbmFsIENvbGxlY3Rpb248TnVtYmVyPiBudW1iZXJzMSA9IG5ldyBBcnJheUxpc3Q8TnVtYmVyPigxKTsKKyAgICBDb2xsZWN0aW9uPEludGVnZXI+IGludGVnZXJzMSA9ICBDb2xsZWN0aW9uSGVscGVyLmNvbnZlcnREb3duKG51bWJlcnMxKTsKKyAgICBpbnRlZ2VyczEuaGFzaENvZGUoKTsKKyAgICAvLyBVcGNhc3QgZXhhbXBsZQorICAgIGZpbmFsIENvbGxlY3Rpb248SW50ZWdlcj4gaW50ZWdlcnM0ID0gbmV3IEFycmF5TGlzdDxJbnRlZ2VyPigxKTsKKyAgICBmaW5hbCBDb2xsZWN0aW9uPE51bWJlcj4gbnVtYmVyczQgPSBDb2xsZWN0aW9uSGVscGVyLjxOdW1iZXI+Y29udmVydFVwKGludGVnZXJzNCk7CisgICAgbnVtYmVyczQuaGFzaENvZGUoKTsKKyAgfQorfQorCisvL0lERUEtNjI1MjkKK2NsYXNzIE15PFQ+IHsKKyAgICBwcml2YXRlICBDbGFzczw/IHN1cGVyIFQ+IGdldFN1cGVyY2xhc3MoKXsKKyAgICAgICAgcmV0dXJuIG51bGw7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgdGVzdCgpIHsKKyAgICAgICAgaWYgKGdldFN1cGVyY2xhc3MoKSA9PSBMaXN0LmNsYXNzKTsKKyAgICB9Cit9CisKK2NsYXNzIElERUE3NTE3OCB7CisgICAgdm9pZCB0ZXN0KFNldDxTdHJpbmc+IGxhYmVscykgeworICAgICAgICBmaW5hbCBNYXRjaGVyPD8gc3VwZXIgT2JqZWN0PiBlbXB0eSA9IGlzRW1wdHkoKTsKKyAgICAgICAgYXNzZXJ0VGhhdChsYWJlbHMsIGVtcHR5KTsKKyAgICAgICAgYXNzZXJ0QWxzb1RoYXQoZW1wdHksIGxhYmVscyk7CisgICAgfQorCisgICAgcHVibGljIHN0YXRpYyA8VD4gdm9pZCBhc3NlcnRUaGF0KFQgYWN0dWFsLCBNYXRjaGVyPFQ+IG1hdGNoZXIpIHsgdGhyb3cgbmV3IEFzc2VydGlvbkVycm9yKGFjdHVhbC50b1N0cmluZygpICsgbWF0Y2hlci50b1N0cmluZygpKTt9CisgICAgcHVibGljIHN0YXRpYyA8VD4gdm9pZCBhc3NlcnRBbHNvVGhhdChNYXRjaGVyPFQ+IG1hdGNoZXIsIFQgYWN0dWFsKSB7IHRocm93IG5ldyBBc3NlcnRpb25FcnJvcihhY3R1YWwudG9TdHJpbmcoKSArIG1hdGNoZXIudG9TdHJpbmcoKSk7fQorCisgICAgcHVibGljIHN0YXRpYyA8VD4gTWF0Y2hlcjw/IHN1cGVyIFQ+IGlzRW1wdHkoKSB7CisgICAgICAgIHJldHVybiBudWxsOworICAgIH0KKworICAgIHN0YXRpYyBjbGFzcyBNYXRjaGVyPDx3YXJuaW5nIGRlc2NyPSJUeXBlIHBhcmFtZXRlciAnVCcgaXMgbmV2ZXIgdXNlZCI+VDwvd2FybmluZz4+e30KKyAgCisgIGNsYXNzIEZvbyB7fQorICB2b2lkIHRlc3RDb21tZW50KCkgeworICAgICAgU2V0PEZvbz4gZm9vcyA9IENvbGxlY3Rpb25zLmVtcHR5U2V0KCk7CisgICAgICBhc3NlcnRUaGF0Q29tbWVudChmb29zLCBoYXNTaXplKDApKTsKKyAgfQorCisgIDxFPiBNYXRjaGVyPD8gc3VwZXIgQ29sbGVjdGlvbjw/IGV4dGVuZHMgRT4+IGhhc1NpemUoaW50IHNpemUpIHtyZXR1cm4gc2l6ZSA9PSAwID8gbnVsbCA6IG51bGw7fQorICA8VD4gdm9pZCBhc3NlcnRUaGF0Q29tbWVudChUIGFjdHVhbCwgTWF0Y2hlcjw/IHN1cGVyIFQ+IG1hdGNoZXIpeyB0aHJvdyBuZXcgQXNzZXJ0aW9uRXJyb3IoYWN0dWFsLnRvU3RyaW5nKCkgKyBtYXRjaGVyLnRvU3RyaW5nKCkpO30KK30KKworY2xhc3MgSURFQTY2NzUwIHsKKyAgcHVibGljIHZvaWQgdGVzdCgpIHsKKyAgICBMaXN0PExpc3Q8U3RyaW5nPj4gZGF0YSA9IG5ldyBBcnJheUxpc3Q8TGlzdDxTdHJpbmc+PigpOworICAgIExpc3Q8TGlzdDw/Pj4geSA9IDxlcnJvciBkZXNjcj0iSW5jb252ZXJ0aWJsZSB0eXBlczsgY2Fubm90IGNhc3QgJ2phdmEudXRpbC5MaXN0PGphdmEudXRpbC5MaXN0PGphdmEubGFuZy5TdHJpbmc+PicgdG8gJ2phdmEudXRpbC5MaXN0PGphdmEudXRpbC5MaXN0PD8+PiciPihMaXN0PExpc3Q8Pz4+KWRhdGE8L2Vycm9yPjsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oeSk7CisKKyAgICBBcnJheUxpc3Q8TnVtYmVyPiBhbCA9IDxlcnJvciBkZXNjcj0iSW5jb252ZXJ0aWJsZSB0eXBlczsgY2Fubm90IGNhc3QgJ2phdmEudXRpbC5BcnJheUxpc3Q8amF2YS5sYW5nLkludGVnZXI+JyB0byAnamF2YS51dGlsLkFycmF5TGlzdDxqYXZhLmxhbmcuTnVtYmVyPiciPihBcnJheUxpc3Q8TnVtYmVyPikgbmV3IEFycmF5TGlzdDxJbnRlZ2VyPigxKTwvZXJyb3I+OworICAgIFN5c3RlbS5vdXQucHJpbnRsbihhbCk7CisgIH0KK30KKworY2xhc3MgSURFQTczMzc3IHsKKyAgcHVibGljIEl0ZXJhdG9yPE1hcC5FbnRyeTxNYXAuRW50cnk8PywgPz4sID8+PiBpdGVyYXRvcihNYXA8PywgPz4gbWFwKSB7CisgICAgLy9ub2luc3BlY3Rpb24gdW5jaGVja2VkCisgICAgcmV0dXJuIDxlcnJvciBkZXNjcj0iSW5jb252ZXJ0aWJsZSB0eXBlczsgY2Fubm90IGNhc3QgJ2phdmEudXRpbC5JdGVyYXRvcjxqYXZhLnV0aWwuTWFwLkVudHJ5PGNhcHR1cmU8Pz4sY2FwdHVyZTw/Pj4+JyB0byAnamF2YS51dGlsLkl0ZXJhdG9yPGphdmEudXRpbC5NYXAuRW50cnk8amF2YS51dGlsLk1hcC5FbnRyeTw/LD8+LD8+PiciPihJdGVyYXRvcjxNYXAuRW50cnk8TWFwLkVudHJ5PD8sID8+LCA/Pj4pbWFwLmVudHJ5U2V0KCkuaXRlcmF0b3IoKTwvZXJyb3I+OworICB9Cit9CisKK2NsYXNzIElERUE5MTQ4MSB7CisgIHZvaWQgYmFyKCl7CisgICAgQmVhbkJ1aWxkZXI8PyBleHRlbmRzIERpcmVjdEJlYW4+IGJ1aWxkZXIgPSA8d2FybmluZyBkZXNjcj0iVW5jaGVja2VkIGNhc3Q6ICdJREVBOTE0ODEuQmVhbkJ1aWxkZXI8Y2FwdHVyZTw/IGV4dGVuZHMgSURFQTkxNDgxLkJlYW4+PicgdG8gJ0lERUE5MTQ4MS5CZWFuQnVpbGRlcjw/IGV4dGVuZHMgSURFQTkxNDgxLkRpcmVjdEJlYW4+JyI+KEJlYW5CdWlsZGVyPD8gIGV4dGVuZHMgRGlyZWN0QmVhbj4pIGJ1aWxkZXIoKTwvd2FybmluZz47CisgICAgU3lzdGVtLm91dC5wcmludGxuKGJ1aWxkZXIpOworICB9CisKKyAgQmVhbkJ1aWxkZXI8PyBleHRlbmRzIEJlYW4+IGJ1aWxkZXIoKSB7CisgICAgcmV0dXJuIG51bGw7CisgIH0KKworICBjbGFzcyBCZWFuQnVpbGRlcjw8d2FybmluZyBkZXNjcj0iVHlwZSBwYXJhbWV0ZXIgJ1QnIGlzIG5ldmVyIHVzZWQiPlQ8L3dhcm5pbmc+PiB7fQorICBjbGFzcyBCZWFuIHt9CisgIGNsYXNzIERpcmVjdEJlYW4gZXh0ZW5kcyBCZWFuIHt9Cit9CisKK2NsYXNzIElERUE4OTY0MCB7CisgIGludGVyZmFjZSBYIHt9CisgIGNsYXNzIFk8PHdhcm5pbmcgZGVzY3I9IlR5cGUgcGFyYW1ldGVyICdUJyBpcyBuZXZlciB1c2VkIj5UPC93YXJuaW5nPiBleHRlbmRzIFg+IHt9CisKKyAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworICAgIFk8PyBleHRlbmRzIFg+IGEgPSBudWxsOworICAgIFk8PyBleHRlbmRzIFg+IGIgPSBudWxsOworICAgIGJvb2xlYW4gZmxhZyA9IGEgICE9IGI7IAorICAgIFN5c3RlbS5vdXQucHJpbnRsbihmbGFnKTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvZ2VuZXJpY3NIaWdobGlnaHRpbmcvV2lsZGNhcmRzQm91bmRzSW50ZXJzZWN0aW9uLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2dlbmVyaWNzSGlnaGxpZ2h0aW5nL1dpbGRjYXJkc0JvdW5kc0ludGVyc2VjdGlvbi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM4NGM1ODkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2dlbmVyaWNzSGlnaGxpZ2h0aW5nL1dpbGRjYXJkc0JvdW5kc0ludGVyc2VjdGlvbi5qYXZhCkBAIC0wLDAgKzEsMTUgQEAKK2NsYXNzIE5vZGVQcm9wZXJ0eTxBLCBCPiB7fQorCitjbGFzcyBOb2RlVHlwZSB7fQorY2xhc3MgTnVtYmVyRXhwcmVzc2lvbiBleHRlbmRzIE5vZGVUeXBlIHt9CitjbGFzcyBOb2RlPE5vZGVUeXBlVCBleHRlbmRzIE5vZGVUeXBlPiB7CisgICAgcHVibGljIDxWYWx1ZVQ+IFZhbHVlVCBnZXQoTm9kZVByb3BlcnR5PD8gc3VwZXIgTm9kZVR5cGVULCBWYWx1ZVQ+IHByb3ApIHsKKyAgICAgICAgcmV0dXJuIG51bGw7CisgICAgfQorfQorCitjbGFzcyBNYWluIHsKKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihOb2RlUHJvcGVydHk8TnVtYmVyRXhwcmVzc2lvbiwgSW50ZWdlcj4gbnZhbCwgIE5vZGU8PyBleHRlbmRzIE5vZGVUeXBlPiBleHByKSB7CisgICAgICAgIGludCB2YWwgPSBleHByLmdldDxlcnJvciBkZXNjcj0iJ2dldChOb2RlUHJvcGVydHk8PyBzdXBlciBjYXB0dXJlPD8gZXh0ZW5kcyBOb2RlVHlwZT4samF2YS5sYW5nLkludGVnZXI+KScgaW4gJ05vZGUnIGNhbm5vdCBiZSBhcHBsaWVkIHRvICcoTm9kZVByb3BlcnR5PE51bWJlckV4cHJlc3Npb24samF2YS5sYW5nLkludGVnZXI+KSciPihudmFsKTwvZXJyb3I+OworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2hpZ2hsaWdodFNldmVyaXR5L0Vycm9yTGlrZVVudXNlZFN5bWJvbC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9oaWdobGlnaHRTZXZlcml0eS9FcnJvckxpa2VVbnVzZWRTeW1ib2wuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MDYzOWI2Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9oaWdobGlnaHRTZXZlcml0eS9FcnJvckxpa2VVbnVzZWRTeW1ib2wuamF2YQpAQCAtMCwwICsxLDUgQEAKK3B1YmxpYyBjbGFzcyBUZXN0IHsKKyAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworICAgIGludCA8ZXJyb3IgZGVzY3I9IlZhcmlhYmxlICdrJyBpcyBuZXZlciB1c2VkIj5rPC9lcnJvcj4gPSAwOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9qYXZhRG9jL0JhZENoYXJhY3RlcnMuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvamF2YURvYy9CYWRDaGFyYWN0ZXJzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWJmZDg4OQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvamF2YURvYy9CYWRDaGFyYWN0ZXJzLmphdmEKQEAgLTAsMCArMSwxMCBAQAoraW1wb3J0IGphdmEudXRpbC4qOworY2xhc3MgVGVzdDxUPiB7CisKKyAgIHB1YmxpYyB2b2lkIHJlYWQoTGlzdDxUPiBsaXN0KXt9CisKKyAgLyoqCisgICAqIEBzZWUgI3JlYWQoamF2YS51dGlsLkxpc3Q8d2FybmluZz48PC93YXJuaW5nPlQ8d2FybmluZz4+PC93YXJuaW5nPikgCisgICAqLworICAgcHVibGljIHZvaWQgd3JpdGUoKXt9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9qYXZhRG9jL0JhZFJlZmVyZW5jZS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9qYXZhRG9jL0JhZFJlZmVyZW5jZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM2YzJjODUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2phdmFEb2MvQmFkUmVmZXJlbmNlLmphdmEKQEAgLTAsMCArMSw4IEBACitjbGFzcyBUZXN0IHsKKyAgICAvKioKKyAgICogVGhpcyBlbGVtZW50IHdhcyB3cml0dGVuIGJ5IHtAbGluayBUZXN0I3dyaXRlKE9iamVjdCwgPGVycm9yPlhtbFdyaXRlcjwvZXJyb3I+KX0KKyAgICogbWV0aG9kLiBTbyA8Y29kZT5yZWFkPC9jb2RlPiBhbmQgPGNvZGU+d3JpdGU8L2NvZGU+IG1ldGhvZHMgc2hvdWxkIGJlIGNvbnNpc3RlbnQuCisgICAqLworICAgcHVibGljIHZvaWQgcmVhZCgpe30KKyAgIHB1YmxpYyB2b2lkIHdyaXRlKE9iamVjdCBvLCA8ZXJyb3I+WG1sV3JpdGVyPC9lcnJvcj4gd3JpdGVyKXt9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9qYXZhRG9jL0V4Y2VwdGlvbjAuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvamF2YURvYy9FeGNlcHRpb24wLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjYyODFlYQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvamF2YURvYy9FeGNlcHRpb24wLmphdmEKQEAgLTAsMCArMSw4IEBACitjbGFzcyBUZXN0IHsKKyAgICAvKioKKyAgICAgKiAgQHRocm93cyA8d2FybmluZz5Tb21lQ2xhc3M8L3dhcm5pbmc+IGFzZGZhc2QKKyAgICAgKi8KKyAgICAgcHVibGljIHZvaWQgZm9vKCkge30KKyAgICAgCisgICAgIGNsYXNzIFNvbWVDbGFzcyAgICAge30KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2phdmFEb2MvRXhjZXB0aW9uMS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9qYXZhRG9jL0V4Y2VwdGlvbjEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OWVlOWY2Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9qYXZhRG9jL0V4Y2VwdGlvbjEuamF2YQpAQCAtMCwwICsxLDggQEAKK2NsYXNzIFRlc3QgeworICAgIC8qKgorICAgICAqICBAdGhyb3dzPEVPTFdhcm5pbmcvPgorICAgICAqLworICAgICBwdWJsaWMgdm9pZCBmb28oKSB7fQorICAgICAKKyAgICAgY2xhc3MgU29tZUNsYXNzIHt9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9qYXZhRG9jL0V4Y2VwdGlvbjIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvamF2YURvYy9FeGNlcHRpb24yLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDI2YmNjNgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvamF2YURvYy9FeGNlcHRpb24yLmphdmEKQEAgLTAsMCArMSw2IEBACitjbGFzcyBUZXN0IHsKKyAgICAvKioKKyAgICAgKiAgQHRocm93cyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gc29tZXRpbWVzCisgICAgICovCisgICAgIHB1YmxpYyB2b2lkIGZvbygpIHt9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9qYXZhRG9jL0V4Y2VwdGlvbjMuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvamF2YURvYy9FeGNlcHRpb24zLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTZkMmNhMQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvamF2YURvYy9FeGNlcHRpb24zLmphdmEKQEAgLTAsMCArMSw2IEBACitjbGFzcyBUZXN0IHsKKyAgICAvKioKKyAgICAgKiAgQHRocm93cyBqYXZhLmlvLkVPRkV4Y2VwdGlvbiBzb21ldGltZXMKKyAgICAgKi8KKyAgICAgcHVibGljIHZvaWQgZm9vKCkgdGhyb3dzIGphdmEuaW8uSU9FeGNlcHRpb24ge30KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2phdmFEb2MvRXhjZXB0aW9uNC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9qYXZhRG9jL0V4Y2VwdGlvbjQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ODJjZDJjCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9qYXZhRG9jL0V4Y2VwdGlvbjQuamF2YQpAQCAtMCwwICsxLDYgQEAKK2NsYXNzIFRlc3QgeworICAgIC8qKgorICAgICAqICBAdGhyb3dzIDx3YXJuaW5nPkludGVnZXI8L3dhcm5pbmc+IHNvbWV0aW1lcworICAgICAqLworICAgICBwdWJsaWMgdm9pZCA8d2FybmluZz5mb288L3dhcm5pbmc+KCkgdGhyb3dzIEV4Y2VwdGlvbiB7fQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvamF2YURvYy9Jbmhlcml0SmF2YURvYy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9qYXZhRG9jL0luaGVyaXRKYXZhRG9jLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzVhYmJkOQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvamF2YURvYy9Jbmhlcml0SmF2YURvYy5qYXZhCkBAIC0wLDAgKzEsNyBAQAorY2xhc3MgVGVzdCB7CisgIC8qKgorICAqIDx3YXJuaW5nPkBpbmhlcml0RG9jPC93YXJuaW5nPgorICAqLworICB2b2lkIGEoKSB7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2phdmFEb2MvSW5saW5lVGFnQXNEZXNjcmlwdGlvbi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9qYXZhRG9jL0lubGluZVRhZ0FzRGVzY3JpcHRpb24uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZTFjMzMwCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9qYXZhRG9jL0lubGluZVRhZ0FzRGVzY3JpcHRpb24uamF2YQpAQCAtMCwwICsxLDE4IEBACitjbGFzcyBBIHsKKyAgLyoqCisgICogQHJldHVybgorICAqICB7QGluaGVyaXREb2N9CisgICoqLworICBpbnQgZm9vKCl7CisgICAgcmV0dXJuIDA7CisgIH0KK30KKworY2xhc3MgQiB7CisgIC8qKgorICAqIEByZXR1cm4gYmFyCisgICoqLworICBpbnQgZm9vKCl7CisgICByZXR1cm4gMDsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvamF2YURvYy9Jbm5lckNsYXNzUmVmZXJlbmNlSW5TaWduYXR1cmUuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvamF2YURvYy9Jbm5lckNsYXNzUmVmZXJlbmNlSW5TaWduYXR1cmUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MzAzMDcxCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9qYXZhRG9jL0lubmVyQ2xhc3NSZWZlcmVuY2VJblNpZ25hdHVyZS5qYXZhCkBAIC0wLDAgKzEsMTMgQEAKK2NsYXNzIENTUyB7CisgIHN0YXRpYyBjbGFzcyBJT3t9Cit9CisKK2NsYXNzIFREIHsKKyAgdm9pZCBjYWxjdWxhdGVTbXRoKENTUy5JTyBpbyl7fQorfQorCisvKioKKyAqIEBzZWUgVEQjY2FsY3VsYXRlU210aChDU1MuSU8pCisgKi8KK2NsYXNzIFRlc3QgeworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvamF2YURvYy9KYXZhZG9jUGVyaW9kLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2phdmFEb2MvSmF2YWRvY1BlcmlvZC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY3ZWYxYzEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2phdmFEb2MvSmF2YWRvY1BlcmlvZC5qYXZhCkBAIC0wLDAgKzEsNiBAQAorPHdhcm5pbmc+LyoqPC93YXJuaW5nPgorICogTWlzc2luZyBkb3QKKyAqLworY2xhc3MgVGVzdCB7CisKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2phdmFEb2MvSmF2YWRvY1BlcmlvZDEuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvamF2YURvYy9KYXZhZG9jUGVyaW9kMS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk2YTg2M2VlCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9qYXZhRG9jL0phdmFkb2NQZXJpb2QxLmphdmEKQEAgLTAsMCArMSw2IEBACisvKioKKyogRG8gc210aCBAbGlua3BsYWluICNsaW5rfS4KKyovCitwdWJsaWMgY2xhc3MgVGVzdCB7CisgIHByaXZhdGUgdm9pZCBsaW5rKCl7fQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvamF2YURvYy9KYXZhZG9jUGVyaW9kMi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9qYXZhRG9jL0phdmFkb2NQZXJpb2QyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzMxZTUwODgKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2phdmFEb2MvSmF2YWRvY1BlcmlvZDIuamF2YQpAQCAtMCwwICsxLDcgQEAKKzx3YXJuaW5nPi8qKjwvd2FybmluZz4KKyogRG8gc210aAorKiBAYXV0aG9yIG1lLgorKi8KK3B1YmxpYyBjbGFzcyBUZXN0IHsKKworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvamF2YURvYy9MaW5rMC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9qYXZhRG9jL0xpbmswLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzMzY2VjMgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvamF2YURvYy9MaW5rMC5qYXZhCkBAIC0wLDAgKzEsOCBAQAorY2xhc3MgVGVzdCB7CisgICAgLyoqCisgICAgICogIEBwYXJhbSBwcHAgc2VlIHtAbGluayAjPGVycm9yPlRlc3Q8L2Vycm9yPn0KKyAgICAgKi8KKyAgICAgcHVibGljIHZvaWQgaShpbnQgcHBwKSB7fQorICAgICAKKyAgICAgY2xhc3MgQXsgcHVibGljIHZvaWQgZm9vKCkge319Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9qYXZhRG9jL0xpbmtGcm9tSW5uZXJDbGFzc1RvU2VsZk1ldGhvZC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9qYXZhRG9jL0xpbmtGcm9tSW5uZXJDbGFzc1RvU2VsZk1ldGhvZC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUwNzFjMDEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2phdmFEb2MvTGlua0Zyb21Jbm5lckNsYXNzVG9TZWxmTWV0aG9kLmphdmEKQEAgLTAsMCArMSwxMyBAQAorY2xhc3MgVGVzdCB7CisKKyAgICAgcHVibGljIHZvaWQgaShpbnQgcHBwKSB7fQorICAgICAvKioKKyAgICAgICoge0BsaW5rICM8ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAnZm9vKGludCknIj5mb288L2Vycm9yPihpbnQpfQorICAgICAgKiB7QGxpbmsgI2ZvbygpfQorICAgICAgKiB7QGxpbmsgI2koaW50KX0KKyAgICAgKi8KKyAgICAgY2xhc3MgQXsKKyAgICAgICBwdWJsaWMgdm9pZCBmb28oKSB7fQorICAgICB9CisKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2phdmFEb2MvTWlzc2luZ1JldHVybkRlc2NyaXB0aW9uLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2phdmFEb2MvTWlzc2luZ1JldHVybkRlc2NyaXB0aW9uLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjU0MmUwZAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvamF2YURvYy9NaXNzaW5nUmV0dXJuRGVzY3JpcHRpb24uamF2YQpAQCAtMCwwICsxLDkgQEAKK2NsYXNzIE1pc3NpbmdSZXR1bkRlc2NyaXB0aW9uIHsKKyAgLyoqCisgICogPHdhcm5pbmc+QHJldHVybjwvd2FybmluZz4KKyAgKiBAdGhyb3dzIEV4Y2VwdGlvbiBpbiBzb21lIGNhc2UKKyAgKi8KKyAgcHVibGljIGJvb2xlYW4gZm9vKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgcmV0dXJuIGZhbHNlOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9qYXZhRG9jL011bHRpcGxlVGhyb3dzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2phdmFEb2MvTXVsdGlwbGVUaHJvd3MuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZmM2OTEwCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9qYXZhRG9jL011bHRpcGxlVGhyb3dzLmphdmEKQEAgLTAsMCArMSwxMCBAQAoraW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CitjbGFzcyBUZXN0IHsKKyAgLyoqCisgICogQHRocm93cyBJT0V4Y2VwdGlvbiBpbiBzb21lIGNhc2UKKyAgKiA8d2FybmluZz5AdGhyb3dzPC93YXJuaW5nPiBJT0V4Y2VwdGlvbgorICAqLworICB2b2lkIGEoKSB0aHJvd3MgSU9FeGNlcHRpb257CisgICAgdGhyb3cgbmV3IElPRXhjZXB0aW9uKCk7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2phdmFEb2MvUGFyYW0wLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2phdmFEb2MvUGFyYW0wLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDg1YWU0NQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvamF2YURvYy9QYXJhbTAuamF2YQpAQCAtMCwwICsxLDUgQEAKKy8qKgorICogIEBwYXJhbSA8ZXJyb3I+bXlQYXJhbTwvZXJyb3I+IHBhcmFtRGVzY3JpcHRpb24KKyAqLworY2xhc3MgVGVzdCB7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9qYXZhRG9jL1BhcmFtMS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9qYXZhRG9jL1BhcmFtMS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY2MTY1OTQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2phdmFEb2MvUGFyYW0xLmphdmEKQEAgLTAsMCArMSw3IEBACitjbGFzcyBUZXN0IHsKKyAgICAvKioKKyAgICAgKiAgQHBhcmFtPEVPTFdhcm5pbmcvPgorICAgICAqLworICAgIHB1YmxpYyB2b2lkIGZvbygpIHsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9qYXZhRG9jL1BhcmFtMi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9qYXZhRG9jL1BhcmFtMi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI4MTc4MGQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2phdmFEb2MvUGFyYW0yLmphdmEKQEAgLTAsMCArMSw3IEBACitjbGFzcyBUZXN0IHsKKyAgICAvKioKKyAgICAgKiAgQHBhcmFtIDxlcnJvcj5wYXJhbTwvZXJyb3I+IHNvbWUgcGFyYW0KKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBmb28oKSB7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvamF2YURvYy9QYXJhbTMuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvamF2YURvYy9QYXJhbTMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42Y2E0MDkzCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9qYXZhRG9jL1BhcmFtMy5qYXZhCkBAIC0wLDAgKzEsNyBAQAorY2xhc3MgVGVzdCB7CisgICAgLyoqCisgICAgICogIEBwYXJhbSBwYXJhbSBzb21lIHBhcmFtCisgICAgICovCisgICAgcHVibGljIHZvaWQgZm9vKGludCBwYXJhbSkgeworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2phdmFEb2MvUGFyYW00LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2phdmFEb2MvUGFyYW00LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGUyMjk0YQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvamF2YURvYy9QYXJhbTQuamF2YQpAQCAtMCwwICsxLDggQEAKK2NsYXNzIFRlc3QgeworCisgICAgLyoqCisgICAgICogQHBhcmFtIDxlcnJvcj5pPC9lcnJvcj4gaGVyZSBkZXNjcmlwdGlvbiBnb2VzCisgICAgICogPHdhcm5pbmc+QHJldHVybjwvd2FybmluZz4KKyAgICAgKi8KKyAgICBpbnQgZCgpe3JldHVybiAxO30KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvamF2YURvYy9SZXR1cm4wLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2phdmFEb2MvUmV0dXJuMC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA4NjE0ZTEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2phdmFEb2MvUmV0dXJuMC5qYXZhCkBAIC0wLDAgKzEsNiBAQAorY2xhc3MgVGVzdCB7CisgICAgLyoqCisgICAgICogIDx3YXJuaW5nPkByZXR1cm48L3dhcm5pbmc+IHJldHVybnMKKyAgICAgKi8KKyAgICAgcHVibGljIHZvaWQgZm9vKCkge30KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2phdmFEb2MvU2VlMC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9qYXZhRG9jL1NlZTAuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYjE2YWM5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9qYXZhRG9jL1NlZTAuamF2YQpAQCAtMCwwICsxLDggQEAKK2NsYXNzIFRlc3QgeworICAgIC8qKgorICAgICAqICBAc2VlIEEjPGVycm9yPnNvbWVGaWVsZDwvZXJyb3I+CisgICAgICovCisgICAgIHB1YmxpYyB2b2lkIGkoKSB7fQorCisgICAgIGNsYXNzIEF7IHB1YmxpYyB2b2lkIGZvbygpIHt9fQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvamF2YURvYy9TZWUxLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2phdmFEb2MvU2VlMS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM3MDM0NzMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2phdmFEb2MvU2VlMS5qYXZhCkBAIC0wLDAgKzEsOCBAQAorY2xhc3MgVGVzdCB7CisgICAgLyoqCisgICAgICogIEBzZWUgQSNmb28KKyAgICAgKi8KKyAgICAgcHVibGljIHZvaWQgaSgpIHt9CisKKyAgICAgY2xhc3MgQXsgcHVibGljIHZvaWQgZm9vKCkge319Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9qYXZhRG9jL1NlZTIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvamF2YURvYy9TZWUyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2I4NDI0MgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvamF2YURvYy9TZWUyLmphdmEKQEAgLTAsMCArMSw4IEBACitjbGFzcyBUZXN0IHsKKyAgICAvKioKKyAgICAgKiAgQHNlZSBBIzxFT0xXYXJuaW5nLz4KKyAgICAgKi8KKyAgICAgcHVibGljIHZvaWQgaSgpIHt9CisKKyAgICAgY2xhc3MgQXsgcHVibGljIHZvaWQgZm9vKCkge319Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9qYXZhRG9jL1NlZTMuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvamF2YURvYy9TZWUzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTIxYjZiZgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvamF2YURvYy9TZWUzLmphdmEKQEAgLTAsMCArMSw4IEBACitjbGFzcyBUZXN0IHsKKyAgICAvKioKKyAgICAgKiAgQHNlZSAjPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ3BlcmZvcm0oaW50KSciPnBlcmZvcm08L2Vycm9yPihpbnQpCisgICAgICovCisgICAgcHVibGljIHZvaWQgaSgpIHt9CisgICAgIAorICAgIHB1YmxpYyB2b2lkIHBlcmZvcm0oKSB7fQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvamF2YURvYy9TZWU0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2phdmFEb2MvU2VlNC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRkMjYxNGIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2phdmFEb2MvU2VlNC5qYXZhCkBAIC0wLDAgKzEsOCBAQAorY2xhc3MgVGVzdCB7CisgICAgLyoqCisgICAgICogIEBzZWUgI3BlcmZvcm0oaW50KQorICAgICAqLworICAgICBwdWJsaWMgdm9pZCBpKCkge30KKyAgICAgCisgICAgcHVibGljIHZvaWQgcGVyZm9ybShpbnQgYSkge30KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2phdmFEb2MvU2VlNS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9qYXZhRG9jL1NlZTUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYTUzMTYwCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9qYXZhRG9jL1NlZTUuamF2YQpAQCAtMCwwICsxLDggQEAKK2NsYXNzIFRlc3QgeworICAgIC8qKgorICAgICAqICBAc2VlICNwZXJmb3JtKFN0cmluZywgaW50KQorICAgICAqLworICAgICBwdWJsaWMgdm9pZCBpKCkge30KKyAgICAgCisgICAgcHVibGljIHZvaWQgcGVyZm9ybShTdHJpbmcgcywgaW50IGEpIHt9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9qYXZhRG9jL1NlZTYuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvamF2YURvYy9TZWU2LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTFiOGM0OAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvamF2YURvYy9TZWU2LmphdmEKQEAgLTAsMCArMSw2IEBACitjbGFzcyBGb28geworICAvKioKKyAgICogezx3YXJuaW5nPkBsaW5rPC93YXJuaW5nPiAjZm9vKCl9CisgICAqLworICB2b2lkIGZvbygpe30KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2phdmFEb2MvU2VlQ29uc3RhbnRzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2phdmFEb2MvU2VlQ29uc3RhbnRzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTQzN2YxYwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvamF2YURvYy9TZWVDb25zdGFudHMuamF2YQpAQCAtMCwwICsxLDEyIEBACitwdWJsaWMgY2xhc3MgU2VlQ29uc3RhbnRzIHsKKyAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSUlJID0gIiI7CisgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFVVVT0iIjsKKworICAvKioKKyAgICogQHNlZSBTZWVDb25zdGFudHMuPGVycm9yPklJSTwvZXJyb3I+CisgICAqIEBzZWUgU2VlQ29uc3RhbnRzI1VVVQorICAgKiBAcGFyYW0gYXJncyBibGFoLWJsYWgKKyAgICovCisgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2phdmFEb2MvVW5rbm93bklubGluZVRhZy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9qYXZhRG9jL1Vua25vd25JbmxpbmVUYWcuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZDYyY2QwCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9qYXZhRG9jL1Vua25vd25JbmxpbmVUYWcuamF2YQpAQCAtMCwwICsxLDE0IEBACisvKioKKyAqIHs8d2FybmluZz5AbGlua2VkPC93YXJuaW5nPn0KKyAqLworcHVibGljIGNsYXNzIEZvbyB7CisgIC8qKgorICAgKiBAcGFyYW0gaSBzb21lIHBhcmFtIHs8d2FybmluZz5AdmFhYWx1ZTwvd2FybmluZz4gI2ZpZWxkfQorICAgKi8KKyAgdm9pZCBmb28oaW50IGkpIHt9CisKKyAgLyoqCisgICogezx3YXJuaW5nPkBsaW5rZTwvd2FybmluZz59CisgICovCisgIGludCBmaWVsZDsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2phdmFEb2MvVW5rbm93blRhZ3MuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvamF2YURvYy9Vbmtub3duVGFncy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNjMmU0NzQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2phdmFEb2MvVW5rbm93blRhZ3MuamF2YQpAQCAtMCwwICsxLDE0IEBACisvKioKKyAqIDx3YXJuaW5nPkBmb288L3dhcm5pbmc+CisgKi8KK3B1YmxpYyBjbGFzcyBGb28geworICAvKioKKyAgICogPHdhcm5pbmc+QGZvbzwvd2FybmluZz4KKyAgICovCisgIHZvaWQgZm9vKCkge30KKworICAvKioKKyAgKiA8d2FybmluZz5AZm9vPC93YXJuaW5nPgorICAqLworICBpbnQgZmllbGQ7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9qYXZhRG9jL1ZhbHVlQmFkUmVmZXJlbmNlLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2phdmFEb2MvVmFsdWVCYWRSZWZlcmVuY2UuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYTViMTgxCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9qYXZhRG9jL1ZhbHVlQmFkUmVmZXJlbmNlLmphdmEKQEAgLTAsMCArMSw3IEBACitjbGFzcyBUZXN0IHsKKyAgICAvKioKKyAgICAgKiBWYWx1ZSBpcyB7QHZhbHVlICM8ZXJyb3I+YmFkUmVmZXJlbmNlPC9lcnJvcj59CisgICAgICogQHBhcmFtIHBwcCAuCisgICAgICovCisgICAgIHB1YmxpYyB2b2lkIGkoaW50IHBwcCkge30KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2phdmFEb2MvVmFsdWVFbXB0eS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9qYXZhRG9jL1ZhbHVlRW1wdHkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYTRjYTFjCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9qYXZhRG9jL1ZhbHVlRW1wdHkuamF2YQpAQCAtMCwwICsxLDYgQEAKK2NsYXNzIFRlc3QgeworICAgIC8qKgorICAgICAqIFZhbHVlIGlzIHtAdmFsdWUgfQorICAgICAqLworICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBBID0gMTsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2phdmFEb2MvVmFsdWVHb29kUmVmZXJlbmNlLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2phdmFEb2MvVmFsdWVHb29kUmVmZXJlbmNlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWExZTQ0NAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvamF2YURvYy9WYWx1ZUdvb2RSZWZlcmVuY2UuamF2YQpAQCAtMCwwICsxLDkgQEAKK2NsYXNzIFRlc3QgeworICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBBID0gMTsKKworICAgIC8qKgorICAgICAqIFZhbHVlIGlzIHtAdmFsdWUgI0F9CisgICAgICogQHBhcmFtIHBwcCAuCisgICAgICovCisgICAgIHB1YmxpYyB2b2lkIGkoaW50IHBwcCkge30KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2phdmFEb2MvVmFsdWVOb3RPbkZpZWxkLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2phdmFEb2MvVmFsdWVOb3RPbkZpZWxkLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjljYzMwNQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvamF2YURvYy9WYWx1ZU5vdE9uRmllbGQuamF2YQpAQCAtMCwwICsxLDggQEAKK2NsYXNzIFRlc3QgeworICAgIC8qKgorICAgICAqIFZhbHVlIGlzIHtAdmFsdWUgPGVycm9yPiNnPC9lcnJvcj59CisgICAgICovCisgICAgIHB1YmxpYyB2b2lkIGkoKSB7fQorCisgICAgIHB1YmxpYyB2b2lkIGcoKSB7fQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvamF2YURvYy9WYWx1ZU5vdE9uU3RhdGljRmllbGQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvamF2YURvYy9WYWx1ZU5vdE9uU3RhdGljRmllbGQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NDg5YjgyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9qYXZhRG9jL1ZhbHVlTm90T25TdGF0aWNGaWVsZC5qYXZhCkBAIC0wLDAgKzEsOCBAQAorY2xhc3MgVGVzdCB7CisgICAgIHB1YmxpYyBpbnQgQSA9IDE7CisKKyAgICAvKioKKyAgICAgKiBWYWx1ZSBpcyB7QHZhbHVlIDxlcnJvcj4jQTwvZXJyb3I+fQorICAgICAqLworICAgICBwdWJsaWMgdm9pZCBpKCkge30KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2phdmFEb2MvVmFsdWVPbk5vdEluaXRpYWxpemVkRmllbGQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvamF2YURvYy9WYWx1ZU9uTm90SW5pdGlhbGl6ZWRGaWVsZC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEzODY3ODQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2phdmFEb2MvVmFsdWVPbk5vdEluaXRpYWxpemVkRmllbGQuamF2YQpAQCAtMCwwICsxLDggQEAKK2NsYXNzIFRlc3QgeworICAgICBwdWJsaWMgc3RhdGljIGludCBBOworCisgICAgLyoqCisgICAgICogVmFsdWUgaXMge0B2YWx1ZSA8ZXJyb3I+I0E8L2Vycm9yPn0KKyAgICAgKi8KKyAgICAgcHVibGljIHZvaWQgaSgpIHt9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9qYXZhRG9jL1ZhbHVlUmVmZXJlbmNlMTQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvamF2YURvYy9WYWx1ZVJlZmVyZW5jZTE0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzUzNDgyNgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvamF2YURvYy9WYWx1ZVJlZmVyZW5jZTE0LmphdmEKQEAgLTAsMCArMSw5IEBACitjbGFzcyBUZXN0IHsKKyAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQSA9IDE7CisKKyAgICAvKioKKyAgICAgKiBWYWx1ZSBpcyB7QHZhbHVlIDxlcnJvcj4jQTwvZXJyb3I+fQorICAgICAqIEBwYXJhbSBwcHAgLgorICAgICAqLworICAgICBwdWJsaWMgdm9pZCBpKGludCBwcHApIHt9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9qYXZhRG9jL1ZhcmFyZy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9qYXZhRG9jL1ZhcmFyZy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUxOTI3NDUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2phdmFEb2MvVmFyYXJnLmphdmEKQEAgLTAsMCArMSw5IEBACitwdWJsaWMgY2xhc3MgVGVzdCB7CisgICAvKioKKyAgICAgKiBAc2VlIFRlc3QjdGVzdChTdHJpbmcsIGludC4uLikKKyAgICAgKiBAc2VlIFRlc3QjPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ3Rlc3QoU3RyaW5nLCBsb25nLi4uKSciPnRlc3Q8L2Vycm9yPihTdHJpbmcsIGxvbmcuLi4pCisgICAqKi8KKyAgICB2b2lkIGZvbygpIHt9CisKKyAgICB2b2lkIHRlc3QgKFN0cmluZyB1LCBpbnQgLi4uIGkpIHt9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2phdmFEb2MvcmVzb2x2ZS9wa2cvU2VlMC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9qYXZhRG9jL3Jlc29sdmUvcGtnL1NlZTAuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YjdlZGM5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9qYXZhRG9jL3Jlc29sdmUvcGtnL1NlZTAuamF2YQpAQCAtMCwwICsxLDE1IEBACitwYWNrYWdlIHBrZzsKKworLyoqCisgKiBAc2VlICNtZXRob2QocGtnLkIwLkNbXSkKKyAqIEBzZWUgI21ldGhvZChCMC5DW10pCisgKiBAc2VlICNtZXRob2QoQjAuQy4uLikKKyAqLworY2xhc3MgQTAgeworICBwdWJsaWMgdm9pZCBtZXRob2QoQjAuQ1tdIGMpIHsgfQorfQorCitjbGFzcyBCMCB7CisgIGNsYXNzIEMgeworICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2phdmFEb2MvcmVzb2x2ZS9wa2cvU2VlMS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9qYXZhRG9jL3Jlc29sdmUvcGtnL1NlZTEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mY2Q1OGZjCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9qYXZhRG9jL3Jlc29sdmUvcGtnL1NlZTEuamF2YQpAQCAtMCwwICsxLDE2IEBACitwYWNrYWdlIHBrZzsKKworLyoqCisgKiBAc2VlICM8ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAnbWV0aG9kKEIxLkMpJyI+bWV0aG9kPC9lcnJvcj4oQjEuQykKKyAqIEBzZWUgIzxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICdtZXRob2QoQjEuQ1tdW10pJyI+bWV0aG9kPC9lcnJvcj4oQjEuQ1tdW10pCisgKiBAc2VlICM8ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAnbWV0aG9kKEIxLkMuLiknIj5tZXRob2Q8L2Vycm9yPig8ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAnQjEuQy4nIj5CMS5DLjwvZXJyb3I+LikKKyAqIEBzZWUgIzxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICdtZXRob2QoQjEuQ1spJyI+bWV0aG9kPC9lcnJvcj4oQjEuQ1spCisgKi8KK2NsYXNzIEExIHsKKyAgcHVibGljIHZvaWQgbWV0aG9kKEIxLkNbXSBjKSB7IH0KK30KKworY2xhc3MgQjEgeworICBjbGFzcyBDIHsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9qYXZhRG9jL3Jlc29sdmUvcGtnL1NlZTIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvamF2YURvYy9yZXNvbHZlL3BrZy9TZWUyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTNkNjA3ZQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvamF2YURvYy9yZXNvbHZlL3BrZy9TZWUyLmphdmEKQEAgLTAsMCArMSwxMyBAQAorcGFja2FnZSBwa2c7CisKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworLyoqCisgKiBAc2VlICNtZXRob2QoamF2YS51dGlsLkxpc3QpCisgKiBAc2VlICNtZXRob2QoamF2YS51dGlsLkxpc3Q8U3RyaW5nPikKKyAqIEBzZWUgI21ldGhvZChqYXZhLnV0aWwuTGlzdDxUPikKKyAqIEBzZWUgI21ldGhvZChqYXZhLnV0aWwuTGlzdDxOdW1iZXI+KQorICovCitjbGFzcyBBMjxUPiB7CisgIHB1YmxpYyB2b2lkIG1ldGhvZChMaXN0PFN0cmluZz4gbGlzdCkgeyB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2phdmFEb2MvcmVzb2x2ZS9wa2cvU2VlMy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9qYXZhRG9jL3Jlc29sdmUvcGtnL1NlZTMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZDdiZjkzCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9qYXZhRG9jL3Jlc29sdmUvcGtnL1NlZTMuamF2YQpAQCAtMCwwICsxLDI4IEBACitwYWNrYWdlIHBrZzsKKworLyoqCisgKiBAc2VlICNlcXVhbHMoT2JqZWN0KQorCisgKiBAc2VlIEEzI2VxdWFscyhPYmplY3QpCisgKiBAc2VlIHBrZy5BMyNlcXVhbHMoT2JqZWN0KQorCisgKiBAc2VlIE9iamVjdCNlcXVhbHMoT2JqZWN0KQorICogQHNlZSBqYXZhLmxhbmcuT2JqZWN0I2VxdWFscyhPYmplY3QpCisgKi8KK2NsYXNzIEEzIHsKKyAgcHVibGljIGJvb2xlYW4gZXF1YWxzKE9iamVjdCBvYmopIHsKKyAgICByZXR1cm4gc3VwZXIuZXF1YWxzKG9iaik7CisgIH0KK30KKworLyoqCisgKiBAc2VlICNlcXVhbHMoT2JqZWN0KQorCisgKiBAc2VlIEIzI2VxdWFscyhPYmplY3QpCisgKiBAc2VlIHBrZy5CMyNlcXVhbHMoT2JqZWN0KQorCisgKiBAc2VlIE9iamVjdCNlcXVhbHMoT2JqZWN0KQorICogQHNlZSBqYXZhLmxhbmcuT2JqZWN0I2VxdWFscyhPYmplY3QpCisgKi8KK2NsYXNzIEIzIHsKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvbGFtYmRhL2RpYW1vbmQvSURFQTk3Mjk0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2xhbWJkYS9kaWFtb25kL0lERUE5NzI5NC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA0ZmQ5NjkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2xhbWJkYS9kaWFtb25kL0lERUE5NzI5NC5qYXZhCkBAIC0wLDAgKzEsMjQgQEAKK2ltcG9ydCBqYXZhLnV0aWwuQ29tcGFyYXRvcjsKKworaW50ZXJmYWNlIEJhc2VTdHJlYW08VD4ge30KK2ludGVyZmFjZSBTdHJlYW08VD4gZXh0ZW5kcyBCYXNlU3RyZWFtPFQ+IHt9CitpbnRlcmZhY2UgSW50ZXJtZWRpYXRlT3A8RV9JTiwgRV9PVVQ+IGV4dGVuZHMgU3RyZWFtT3A8RV9JTiwgTm9kZTxFX09VVD4+IHt9CitpbnRlcmZhY2UgU3RyZWFtT3A8RV9JTiwgUj4ge30KK2ludGVyZmFjZSBTdGF0ZWZ1bE9wPEVfSU4sIEVfT1VUPiBleHRlbmRzIEludGVybWVkaWF0ZU9wPEVfSU4sIEVfT1VUPiB7fQoraW50ZXJmYWNlIFRlcm1pbmFsT3A8RV9JTiwgUj4gZXh0ZW5kcyBTdHJlYW1PcDxFX0lOLCBSPiB7fQorCitpbnRlcmZhY2UgTm9kZTxUPiBleHRlbmRzIEl0ZXJhYmxlPFQ+IHt9CitjbGFzcyBTb3J0ZWRPcDxUPiBpbXBsZW1lbnRzIFN0YXRlZnVsT3A8VCwgVD4geworICAgIHB1YmxpYyBTb3J0ZWRPcChDb21wYXJhdG9yPD8gc3VwZXIgVD4gY29tcGFyYXRvcikgeworICAgIH0KK30KKworY2xhc3MgVXNhZ2U8VD4geworICAgIHB1YmxpYyA8RSwgUyBleHRlbmRzIEJhc2VTdHJlYW08RT4+IFMgcGlwZWxpbmUoSW50ZXJtZWRpYXRlT3A8VCwgRT4gbmV3T3ApIHsgcmV0dXJuIG51bGw7IH0KKyAgICBwdWJsaWMgPFI+IFIgcGlwZWxpbmUoVGVybWluYWxPcDxULCBSPiB0ZXJtaW5hbCkgeyByZXR1cm4gbnVsbDt9CisKKworICAgIHB1YmxpYyBTdHJlYW08VD4gc29ydGVkKENvbXBhcmF0b3I8PyBzdXBlciBUPiBjb21wYXJhdG9yKSB7CisgICAgICAgIHJldHVybiBwaXBlbGluZShuZXcgU29ydGVkT3A8Pihjb21wYXJhdG9yKSk7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9sYW1iZGEvZnVuY3Rpb25hbEludGVyZmFjZS9BYnN0cmFjdENsYXNzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2xhbWJkYS9mdW5jdGlvbmFsSW50ZXJmYWNlL0Fic3RyYWN0Q2xhc3MuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYjNjODAzCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9sYW1iZGEvZnVuY3Rpb25hbEludGVyZmFjZS9BYnN0cmFjdENsYXNzLmphdmEKQEAgLTAsMCArMSBAQAorYWJzdHJhY3QgY2xhc3MgRm9vIHsgcHVibGljIGFic3RyYWN0IHZvaWQgcnVuKCk7IH0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2xhbWJkYS9mdW5jdGlvbmFsSW50ZXJmYWNlL0Nsb25lLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2xhbWJkYS9mdW5jdGlvbmFsSW50ZXJmYWNlL0Nsb25lLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDIwYmYwYwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvbGFtYmRhL2Z1bmN0aW9uYWxJbnRlcmZhY2UvQ2xvbmUuamF2YQpAQCAtMCwwICsxLDQgQEAKK2ludGVyZmFjZSBGb28geworICBpbnQgbSgpOworICBPYmplY3QgY2xvbmUoKTsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2xhbWJkYS9mdW5jdGlvbmFsSW50ZXJmYWNlL01ldGhvZFdpdGhUeXBlUGFyYW0uamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvbGFtYmRhL2Z1bmN0aW9uYWxJbnRlcmZhY2UvTWV0aG9kV2l0aFR5cGVQYXJhbS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgyYTMzMDMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2xhbWJkYS9mdW5jdGlvbmFsSW50ZXJmYWNlL01ldGhvZFdpdGhUeXBlUGFyYW0uamF2YQpAQCAtMCwwICsxLDMgQEAKK2ludGVyZmFjZSBGb28geyA8VD4gVCBleGVjdXRlKEFjdGlvbjxUPiBhKTsgfQoraW50ZXJmYWNlIEFjdGlvbjxBPnt9CisgIC8vIEZ1bmN0aW9uYWwKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2xhbWJkYS9mdW5jdGlvbmFsSW50ZXJmYWNlL011bHRpcGxlTWV0aG9kcy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9sYW1iZGEvZnVuY3Rpb25hbEludGVyZmFjZS9NdWx0aXBsZU1ldGhvZHMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41Mjc3Yzg0Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9sYW1iZGEvZnVuY3Rpb25hbEludGVyZmFjZS9NdWx0aXBsZU1ldGhvZHMuamF2YQpAQCAtMCwwICsxLDMgQEAKK2ludGVyZmFjZSBCYXIgeyBib29sZWFuIGVxdWFscyhPYmplY3Qgb2JqKTsgfQorCitpbnRlcmZhY2UgRm9vIGV4dGVuZHMgQmFyIHsgaW50IGNvbXBhcmUoU3RyaW5nIG8xLCBTdHJpbmcgbzIpOyB9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2xhbWJkYS9mdW5jdGlvbmFsSW50ZXJmYWNlL011bHRpcGxlTWV0aG9kc0luT25lLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2xhbWJkYS9mdW5jdGlvbmFsSW50ZXJmYWNlL011bHRpcGxlTWV0aG9kc0luT25lLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTc5MmY0YgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvbGFtYmRhL2Z1bmN0aW9uYWxJbnRlcmZhY2UvTXVsdGlwbGVNZXRob2RzSW5PbmUuamF2YQpAQCAtMCwwICsxLDQgQEAKK2ludGVyZmFjZSBGb288VD4geworIGJvb2xlYW4gZXF1YWxzKE9iamVjdCBvYmopOworIGludCBjb21wYXJlKFQgbzEsIFQgbzIpOworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvbGFtYmRhL2Z1bmN0aW9uYWxJbnRlcmZhY2UvTm9NZXRob2RzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2xhbWJkYS9mdW5jdGlvbmFsSW50ZXJmYWNlL05vTWV0aG9kcy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQwOTQ3ZDIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2xhbWJkYS9mdW5jdGlvbmFsSW50ZXJmYWNlL05vTWV0aG9kcy5qYXZhCkBAIC0wLDAgKzEgQEAKK2ludGVyZmFjZSBGb28geyBib29sZWFuIGVxdWFscyhPYmplY3Qgb2JqKTsgfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvbGFtYmRhL2Z1bmN0aW9uYWxJbnRlcmZhY2UvU2ltcGxlLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2xhbWJkYS9mdW5jdGlvbmFsSW50ZXJmYWNlL1NpbXBsZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU3ZDQyOWZkCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9sYW1iZGEvZnVuY3Rpb25hbEludGVyZmFjZS9TaW1wbGUuamF2YQpAQCAtMCwwICsxIEBACitpbnRlcmZhY2UgRm9vIHsgdm9pZCBydW4oKTsgfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvbGFtYmRhL2Z1bmN0aW9uYWxJbnRlcmZhY2UvVHdvTWV0aG9kc05vU3ViU2lnbmF0dXJlLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2xhbWJkYS9mdW5jdGlvbmFsSW50ZXJmYWNlL1R3b01ldGhvZHNOb1N1YlNpZ25hdHVyZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNiNzhhMDMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2xhbWJkYS9mdW5jdGlvbmFsSW50ZXJmYWNlL1R3b01ldGhvZHNOb1N1YlNpZ25hdHVyZS5qYXZhCkBAIC0wLDAgKzEsNCBAQAoraW50ZXJmYWNlIFggeyBpbnQgbShJdGVyYWJsZTxTdHJpbmc+IGFyZyk7IH0KK2ludGVyZmFjZSBZIHsgaW50IG0oSXRlcmFibGU8SW50ZWdlcj4gYXJnKTsgfQoraW50ZXJmYWNlIEZvbyBleHRlbmRzIFgsIFkge30KKyAgLy8gTm90IGZ1bmN0aW9uYWw6IE5vIG1ldGhvZCBoYXMgYSBzdWJzaWduYXR1cmUgb2YgYWxsIGFic3RyYWN0IG1ldGhvZHMKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2xhbWJkYS9mdW5jdGlvbmFsSW50ZXJmYWNlL1R3b01ldGhvZHNOb1N1YlNpZ25hdHVyZTEuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvbGFtYmRhL2Z1bmN0aW9uYWxJbnRlcmZhY2UvVHdvTWV0aG9kc05vU3ViU2lnbmF0dXJlMS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ2NTU5ZmYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2xhbWJkYS9mdW5jdGlvbmFsSW50ZXJmYWNlL1R3b01ldGhvZHNOb1N1YlNpZ25hdHVyZTEuamF2YQpAQCAtMCwwICsxLDQgQEAKK2ludGVyZmFjZSBYIHsgaW50IG0oSXRlcmFibGU8U3RyaW5nPiBhcmcsIENsYXNzIGMpOyB9CitpbnRlcmZhY2UgWSB7IGludCBtKEl0ZXJhYmxlIGFyZywgQ2xhc3M8Pz4gYyk7IH0KK2ludGVyZmFjZSBGb28gZXh0ZW5kcyBYLCBZIHt9CisgIC8vIE5vdCBmdW5jdGlvbmFsOiBObyBtZXRob2QgaGFzIGEgc3Vic2lnbmF0dXJlIG9mIGFsbCBhYnN0cmFjdCBtZXRob2RzClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9sYW1iZGEvZnVuY3Rpb25hbEludGVyZmFjZS9Ud29NZXRob2RzU2FtZVNpZ25hdHVyZS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9sYW1iZGEvZnVuY3Rpb25hbEludGVyZmFjZS9Ud29NZXRob2RzU2FtZVNpZ25hdHVyZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRlOTVkZmYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2xhbWJkYS9mdW5jdGlvbmFsSW50ZXJmYWNlL1R3b01ldGhvZHNTYW1lU2lnbmF0dXJlLmphdmEKQEAgLTAsMCArMSw0IEBACitpbXBvcnQgamF2YS51dGlsLio7CitpbnRlcmZhY2UgWCB7IGludCBtKEl0ZXJhYmxlPFN0cmluZz4gYXJnKTsgfQoraW50ZXJmYWNlIFkgeyBpbnQgbShJdGVyYWJsZTxTdHJpbmc+IGFyZyk7IH0KK2ludGVyZmFjZSBGb28gZXh0ZW5kcyBYLCBZIHt9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9sYW1iZGEvZnVuY3Rpb25hbEludGVyZmFjZS9Ud29NZXRob2RzU2FtZVNpZ25hdHVyZVR5cGVQYXJhbXMuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvbGFtYmRhL2Z1bmN0aW9uYWxJbnRlcmZhY2UvVHdvTWV0aG9kc1NhbWVTaWduYXR1cmVUeXBlUGFyYW1zLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTZmZGRlOAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvbGFtYmRhL2Z1bmN0aW9uYWxJbnRlcmZhY2UvVHdvTWV0aG9kc1NhbWVTaWduYXR1cmVUeXBlUGFyYW1zLmphdmEKQEAgLTAsMCArMSw1IEBACitpbnRlcmZhY2UgQWN0aW9uPEE+e30KK2ludGVyZmFjZSBYIHsgPFQ+IFQgZXhlY3V0ZShBY3Rpb248VD4gYSk7IH0KK2ludGVyZmFjZSBZIHsgPFM+IFMgZXhlY3V0ZShBY3Rpb248Uz4gYSk7IH0KK2ludGVyZmFjZSBGb28gZXh0ZW5kcyBYLCBZIHt9CisgIC8vIEZ1bmN0aW9uYWw6IHNpZ25hdHVyZXMgYXJlICJ0aGUgc2FtZSIKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2xhbWJkYS9mdW5jdGlvbmFsSW50ZXJmYWNlL1R3b01ldGhvZHNTYW1lU3Vic3RTaWduYXR1cmUuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvbGFtYmRhL2Z1bmN0aW9uYWxJbnRlcmZhY2UvVHdvTWV0aG9kc1NhbWVTdWJzdFNpZ25hdHVyZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNmNDMzZmIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2xhbWJkYS9mdW5jdGlvbmFsSW50ZXJmYWNlL1R3b01ldGhvZHNTYW1lU3Vic3RTaWduYXR1cmUuamF2YQpAQCAtMCwwICsxLDUgQEAKK2ludGVyZmFjZSBGb28xPFQsIE4gZXh0ZW5kcyBOdW1iZXI+IHsKKyAgdm9pZCBtKFQgYXJnKTsKKyAgdm9pZCBtKE4gYXJnKTsKK30KK2ludGVyZmFjZSBGb28gZXh0ZW5kcyBGb28xPEludGVnZXIsIEludGVnZXI+IHt9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9sYW1iZGEvZnVuY3Rpb25hbEludGVyZmFjZS9Ud29NZXRob2RzU3ViU2lnbmF0dXJlLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2xhbWJkYS9mdW5jdGlvbmFsSW50ZXJmYWNlL1R3b01ldGhvZHNTdWJTaWduYXR1cmUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOTAzZDA0Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9sYW1iZGEvZnVuY3Rpb25hbEludGVyZmFjZS9Ud29NZXRob2RzU3ViU2lnbmF0dXJlLmphdmEKQEAgLTAsMCArMSw0IEBACitpbXBvcnQgamF2YS51dGlsLio7CitpbnRlcmZhY2UgWCB7IEl0ZXJhYmxlIG0oSXRlcmFibGU8U3RyaW5nPiBhcmcpOyB9CitpbnRlcmZhY2UgWSB7IEl0ZXJhYmxlPFN0cmluZz4gbShJdGVyYWJsZSBhcmcpOyB9CitpbnRlcmZhY2UgRm9vIGV4dGVuZHMgWCwgWSB7fQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvbGFtYmRhL2hpZ2hsaWdodGluZy9BbHJlYWR5VXNlZFBhcmFtTmFtZS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9sYW1iZGEvaGlnaGxpZ2h0aW5nL0FscmVhZHlVc2VkUGFyYW1OYW1lLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjA5YmFkY2IKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2xhbWJkYS9oaWdobGlnaHRpbmcvQWxyZWFkeVVzZWRQYXJhbU5hbWUuamF2YQpAQCAtMCwwICsxLDYgQEAKK2NsYXNzIFRlc3QgeworICB7CisgICAgT2JqZWN0IG8gPSBudWxsOworICAgIENvbXBhcmFibGU8U3RyaW5nPiBjID0gPGVycm9yIGRlc2NyPSJWYXJpYWJsZSAnbycgaXMgYWxyZWFkeSBkZWZpbmVkIGluIHRoZSBzY29wZSI+bzwvZXJyb3I+IC0+IDQyOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9sYW1iZGEvaGlnaGxpZ2h0aW5nL0FtYmlndWl0eTEuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvbGFtYmRhL2hpZ2hsaWdodGluZy9BbWJpZ3VpdHkxLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY2NjMwMQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvbGFtYmRhL2hpZ2hsaWdodGluZy9BbWJpZ3VpdHkxLmphdmEKQEAgLTAsMCArMSwyMiBAQAoraW50ZXJmYWNlIEkxIHsKKyAgdm9pZCBtKCk7Cit9CisKK2ludGVyZmFjZSBJMjxYPiB7CisgIFggbSgpOworfQorCitjbGFzcyBBbWJpZ3VpdHkxIHsKKworICBzdGF0aWMgdm9pZCBtKEkxIGkxKSB7fQorICBzdGF0aWMgPFQ+IHZvaWQgbShJMjxUPiBpMikge30KKworICB7CisgICAgbTxlcnJvciBkZXNjcj0iQW1iaWd1b3VzIG1ldGhvZCBjYWxsOiBib3RoICdBbWJpZ3VpdHkxLm0oSTEpJyBhbmQgJ0FtYmlndWl0eTEubShJMjxPYmplY3Q+KScgbWF0Y2giPigoKS0+e3Rocm93IG5ldyBBc3NlcnRpb25FcnJvcigpO30pPC9lcnJvcj47CisgICAgbSgoKSAtPiB7fSk7CisgICAgbSgoKSAtPiB7CisgICAgICAgIGlmIChmYWxzZSkgcmV0dXJuOworICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigpOworICAgIH0pOworICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2xhbWJkYS9oaWdobGlnaHRpbmcvQW1iaWd1aXR5Mi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9sYW1iZGEvaGlnaGxpZ2h0aW5nL0FtYmlndWl0eTIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZTQxYzViYQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvbGFtYmRhL2hpZ2hsaWdodGluZy9BbWJpZ3VpdHkyLmphdmEKQEAgLTAsMCArMSwyMDcgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwMC0yMDEyIEpldEJyYWlucyBzLnIuby4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKK2ltcG9ydCBqYXZhLnV0aWwuKjsKKworY2xhc3MgVGVzdCB7CisgICAgaW50ZXJmYWNlIEZvbzxUPiB7CisgICAgICAgIHZvaWQgZm9vKFQgdCk7CisgICAgfQorCisgICAgaW50ZXJmYWNlIEludEZvbyB7CisgICAgICAgIHZvaWQgZm9vKGludCBpKTsKKyAgICB9CisgICAgCisgICAgaW50ZXJmYWNlIE9iamVjdEZvbzxUPiB7CisgICAgICAgIHZvaWQgZm9vKGludCBpKTsKKyAgICB9CisgICAgCisgICAgaW50ZXJmYWNlIEZvb0xpc3Q8VD4geworICAgICAgICB2b2lkIGZvbyhMaXN0PFQ+IHRMaXN0KTsKKyAgICB9CisKKyAgICA8VD4gdm9pZCBmKEZvbzxUPiBmb28pIHsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJGb288VD4iKTsKKyAgICB9CisgICAgCisgICAgPFQ+IHZvaWQgZihGb29MaXN0PFQ+IGZvbykgeworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkZvb0xpc3Q8VD4iKTsKKyAgICB9CisgICAgLyp2b2lkIGYoSW50Rm9vIGZvbykgeworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkludEZvbyIpOworICAgIH0qLworICAgIAorICAgIC8qdm9pZCBmKE9iamVjdEZvbyBmb28pIHsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJPYmplY3RGb28iKTsKKyAgICB9Ki8KKworICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKyAgICAgICAgbmV3IFRlc3QoKS5mPGVycm9yIGRlc2NyPSJBbWJpZ3VvdXMgbWV0aG9kIGNhbGw6IGJvdGggJ1Rlc3QuZihGb288T2JqZWN0PiknIGFuZCAnVGVzdC5mKEZvb0xpc3Q8T2JqZWN0PiknIG1hdGNoIj4obnVsbCk8L2Vycm9yPjsKKyAgICAgICAgbmV3IFRlc3QoKS48ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIG1ldGhvZCAnZig8bGFtYmRhIGV4cHJlc3Npb24+KSciPmY8L2Vycm9yPih4IC0+IHt9KTsKKyAgICB9Cit9CisKK2NsYXNzIFRlc3QxIHsKKyAgICBpbnRlcmZhY2UgRm9vPFQ+IHsKKyAgICAgICAgdm9pZCBmb28oVCB0KTsKKyAgICB9CisKKyAgICBpbnRlcmZhY2UgSW50Rm9vIHsKKyAgICAgICAgdm9pZCBmb28oaW50IGkpOworICAgIH0KKyAgICAKKyAgICBpbnRlcmZhY2UgT2JqZWN0Rm9vPFQ+IHsKKyAgICAgICAgdm9pZCBmb28oaW50IGkpOworICAgIH0KKyAgICAKKyAgICBpbnRlcmZhY2UgRm9vTGlzdDxUPiB7CisgICAgICAgIHZvaWQgZm9vKExpc3Q8VD4gdExpc3QpOworICAgIH0KKworICAgIDxUPiB2b2lkIGYoRm9vPFQ+IGZvbykgeworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkZvbzxUPiIpOworICAgIH0KKyAgICAKKyAgICA8VD4gdm9pZCBmKEZvb0xpc3Q8VD4gZm9vKSB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRm9vTGlzdDxUPiIpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGYoSW50Rm9vIGZvbykgeworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkludEZvbyIpOworICAgIH0KKyAgICAKKyAgICAvKnZvaWQgZihPYmplY3RGb28gZm9vKSB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiT2JqZWN0Rm9vIik7CisgICAgfSovCisKKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisgICAgICAgIG5ldyBUZXN0MSgpLmY8ZXJyb3IgZGVzY3I9IkFtYmlndW91cyBtZXRob2QgY2FsbDogYm90aCAnVGVzdDEuZihGb288T2JqZWN0PiknIGFuZCAnVGVzdDEuZihGb29MaXN0PE9iamVjdD4pJyBtYXRjaCI+KG51bGwpPC9lcnJvcj47CisgICAgICAgIG5ldyBUZXN0MSgpLmYoeCAtPiB7fSk7CisgICAgfQorfQorCitjbGFzcyBUZXN0MiB7CisgICAgaW50ZXJmYWNlIEZvbzxUPiB7CisgICAgICAgIHZvaWQgZm9vKFQgdCk7CisgICAgfQorCisgICAgaW50ZXJmYWNlIEludEZvbyB7CisgICAgICAgIHZvaWQgZm9vKGludCBpKTsKKyAgICB9CisgICAgCisgICAgaW50ZXJmYWNlIE9iamVjdEZvbzxUPiB7CisgICAgICAgIHZvaWQgZm9vKGludCBpKTsKKyAgICB9CisgICAgCisgICAgaW50ZXJmYWNlIEZvb0xpc3Q8VD4geworICAgICAgICB2b2lkIGZvbyhMaXN0PFQ+IHRMaXN0KTsKKyAgICB9CisKKyAgICA8VD4gdm9pZCBmKEZvbzxUPiBmb28pIHsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJGb288VD4iKTsKKyAgICB9CisgICAgCisgICAgPFQ+IHZvaWQgZihGb29MaXN0PFQ+IGZvbykgeworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkZvb0xpc3Q8VD4iKTsKKyAgICB9CisgICAgdm9pZCBmKEludEZvbyBmb28pIHsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbnRGb28iKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBmKE9iamVjdEZvbyBmb28pIHsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJPYmplY3RGb28iKTsKKyAgICB9CisKKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisgICAgICAgIG5ldyBUZXN0MigpLmY8ZXJyb3IgZGVzY3I9IkFtYmlndW91cyBtZXRob2QgY2FsbDogYm90aCAnVGVzdDIuZihGb288T2JqZWN0PiknIGFuZCAnVGVzdDIuZihGb29MaXN0PE9iamVjdD4pJyBtYXRjaCI+KG51bGwpPC9lcnJvcj47CisgICAgICAgIG5ldyBUZXN0MigpLmY8ZXJyb3IgZGVzY3I9IkFtYmlndW91cyBtZXRob2QgY2FsbDogYm90aCAnVGVzdDIuZihJbnRGb28pJyBhbmQgJ1Rlc3QyLmYoT2JqZWN0Rm9vKScgbWF0Y2giPih4IC0+IHt9KTwvZXJyb3I+OworICAgIH0KK30KKworCitjbGFzcyBUZXN0MyB7CisgICAgaW50ZXJmYWNlIEZvbzxUPiB7CisgICAgICAgIHZvaWQgZm9vKFQgdCk7CisgICAgfQorCisgICAgaW50ZXJmYWNlIEludEZvbyB7CisgICAgICAgIHZvaWQgZm9vKGludCBpKTsKKyAgICB9CisgICAgCisgICAgaW50ZXJmYWNlIE9iamVjdEZvbzxUPiB7CisgICAgICAgIHZvaWQgZm9vKGludCBpKTsKKyAgICB9CisgICAgCisgICAgaW50ZXJmYWNlIEZvb0xpc3Q8VD4geworICAgICAgICB2b2lkIGZvbyhMaXN0PFQ+IHRMaXN0KTsKKyAgICB9CisKKyAgICA8VD4gdm9pZCBmKEZvbzxUPiBmb28pIHsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJGb288VD4iKTsKKyAgICB9CisgICAgCisgICAgPFQ+IHZvaWQgZihGb29MaXN0PFQ+IGZvbykgeworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkZvb0xpc3Q8VD4iKTsKKyAgICB9CisgICAgLyp2b2lkIGYoSW50Rm9vIGZvbykgeworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkludEZvbyIpOworICAgIH0qLworICAgIAorICAgIHZvaWQgZihPYmplY3RGb28gZm9vKSB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiT2JqZWN0Rm9vIik7CisgICAgfQorCisgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworICAgICAgICBuZXcgVGVzdDMoKS5mPGVycm9yIGRlc2NyPSJBbWJpZ3VvdXMgbWV0aG9kIGNhbGw6IGJvdGggJ1Rlc3QzLmYoRm9vPE9iamVjdD4pJyBhbmQgJ1Rlc3QzLmYoRm9vTGlzdDxPYmplY3Q+KScgbWF0Y2giPihudWxsKTwvZXJyb3I+OworICAgICAgICBuZXcgVGVzdDMoKS5mKHggLT4ge30pOworICAgIH0KK30KKworCitjbGFzcyBUZXN0IHsKKyAgICBpbnRlcmZhY2UgRm9vPFQ+IHsKKyAgICAgICAgdm9pZCBmb28oVCB0LCBUIHQxKTsKKyAgICB9CisgICAgaW50ZXJmYWNlIEZvbzE8VD4geworICAgICAgICB2b2lkIGZvbyhUIHQsIFN0cmluZyB0MSk7CisgICAgfQorICAgIGludGVyZmFjZSBGb28yPFQ+IHsKKyAgICAgICAgdm9pZCBmb28oU3RyaW5nIHQsIFN0cmluZyB0MSk7CisgICAgfQorCisgICAgPFQ+IHZvaWQgZihGb288VD4gZm9vKSB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRm9vPFQ+Iik7CisgICAgfQorICAgIAorICAgIDxUPiB2b2lkIGYoRm9vMTxUPiBmb28pIHsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJGb29MaXN0PFQ+Iik7CisgICAgfQorICAgIDxUPiB2b2lkIGYoRm9vMjxUPiBmb28pIHsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJGb29MaXN0PFQ+Iik7CisgICAgfQorICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKyAgICAgICAgbmV3IFRlc3QoKS5mKChTdHJpbmcgeCwgU3RyaW5nIHkpIC0+IHt9KTsKKyAgICB9Cit9CisKKworCisKKworCisKKworCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2xhbWJkYS9oaWdobGlnaHRpbmcvQW1iaWd1aXR5UmF3R2VuZXJpY3MuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvbGFtYmRhL2hpZ2hsaWdodGluZy9BbWJpZ3VpdHlSYXdHZW5lcmljcy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU5NTc4NzcKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2xhbWJkYS9oaWdobGlnaHRpbmcvQW1iaWd1aXR5UmF3R2VuZXJpY3MuamF2YQpAQCAtMCwwICsxLDI3IEBACitpbnRlcmZhY2UgSSB7CisgICAgdm9pZCBtKCk7Cit9CisKK2ludGVyZmFjZSBJMSB7CisgICAgaW50IG0oKTsKK30KKworaW50ZXJmYWNlIEkyIHsKKyAgICBTdHJpbmcgbSgpOworfQorCitpbnRlcmZhY2UgSTM8QT4geworICAgIEEgbSgpOworfQorCitjbGFzcyBBbWJpZ3VpdHlSYXdHZW5lcmljcyB7CisKKyAgICB2b2lkIGZvbyhJIHMpIHsgfQorICAgIHZvaWQgZm9vKEkxIHMpIHsgfQorICAgIHZvaWQgZm9vKEkyIHMpIHsgfQorICAgIDxaPiB2b2lkIGZvbyhJMzxaPiBzKSB7IH0KKworICAgIHZvaWQgYmFyKCkgeworICAgICAgICBmb288ZXJyb3IgZGVzY3I9IkFtYmlndW91cyBtZXRob2QgY2FsbDogYm90aCAnQW1iaWd1aXR5UmF3R2VuZXJpY3MuZm9vKEkpJyBhbmQgJ0FtYmlndWl0eVJhd0dlbmVyaWNzLmZvbyhJMSknIG1hdGNoIj4oKCktPiB7IHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCk7IH0pPC9lcnJvcj47CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvbGFtYmRhL2hpZ2hsaWdodGluZy9BbWJpZ3VpdHlWYXJhcmdzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2xhbWJkYS9oaWdobGlnaHRpbmcvQW1iaWd1aXR5VmFyYXJncy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQxMmNiZTUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2xhbWJkYS9oaWdobGlnaHRpbmcvQW1iaWd1aXR5VmFyYXJncy5qYXZhCkBAIC0wLDAgKzEsMjggQEAKK2ludGVyZmFjZSBJIHsKKyAgICB2b2lkIG0oKTsKK30KKworaW50ZXJmYWNlIEkxPEE+IHsKKyAgICB2b2lkIG0oQSBhKTsKK30KKworaW50ZXJmYWNlIEkyPEE+IHsKKyAgICB2b2lkIG0oQSBhMSwgQSBhMik7Cit9CisKK2ludGVyZmFjZSBJVjxBPiB7CisgICAgdm9pZCBtKEEuLi4gYXMpOworfQorCitjbGFzcyBBbWJpZ3VpdHlWYXJhcmdzIHsKKyAgICB2b2lkIGZvbyhJIHMpIHsgfQorICAgIHZvaWQgZm9vKEkxPFN0cmluZz4gcykgeyB9CisgICAgdm9pZCBmb28oSTI8U3RyaW5nPiBzKSB7IH0KKyAgICB2b2lkIGZvbyhJVjxTdHJpbmc+IHMpIHsgfQorCisgICAgdm9pZCB0ZXN0KCkgeworICAgICAgICBmb28oKCktPnt9KTsKKyAgICAgICAgZm9vPGVycm9yIGRlc2NyPSJBbWJpZ3VvdXMgbWV0aG9kIGNhbGw6IGJvdGggJ0FtYmlndWl0eVZhcmFyZ3MuZm9vKEkxPFN0cmluZz4pJyBhbmQgJ0FtYmlndWl0eVZhcmFyZ3MuZm9vKElWPFN0cmluZz4pJyBtYXRjaCI+KChhMSkgLT4ge30pPC9lcnJvcj47CisgICAgICAgIGZvbygoYTEsIGEyKS0+e30pOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2xhbWJkYS9oaWdobGlnaHRpbmcvQ2FzdEluQ29udGV4dHMuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvbGFtYmRhL2hpZ2hsaWdodGluZy9DYXN0SW5Db250ZXh0cy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFmNTc3ZjgKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2xhbWJkYS9oaWdobGlnaHRpbmcvQ2FzdEluQ29udGV4dHMuamF2YQpAQCAtMCwwICsxLDI3IEBACitpbnRlcmZhY2UgSSB7CisgICAgdm9pZCBtKGludCB4KTsKK30KKworaW50ZXJmYWNlIEkxIHsKKyAgICBpbnQgbSgpOworfQorY2xhc3MgQ2FzdEluQ29udGV4dHMgeworICAgIHZvaWQgbShJIHMpIHsgfQorCisgICAgdm9pZCBhc3NpZ25tZW50KCkgeworICAgICAgICBJIGkxID0gKEkpKHgtPiB7IFN5c3RlbS5vdXQucHJpbnRsbigpOyB9KTsKKyAgICAgICAgSSBpMiA9IChJKSgoeC0+IHsgU3lzdGVtLm91dC5wcmludGxuKCk7IH0pKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBtZXRob2QoKSB7CisgICAgICAgIG0oKEkpKHgtPiB7IFN5c3RlbS5vdXQucHJpbnRsbigpOyB9KSk7CisgICAgfQorCisgICAgSSByZXR1cm5Db250ZXh0KCkgeworICAgICAgICByZXR1cm4gKEkpKHggLT4geyBTeXN0ZW0ub3V0LnByaW50bG4oKTsgfSk7CisgICAgfQorCisgICAgeworICAgICAgaW50IGkgPSA8ZXJyb3IgZGVzY3I9IkluY29udmVydGlibGUgdHlwZXM7IGNhbm5vdCBjYXN0ICc8bGFtYmRhIGV4cHJlc3Npb24+JyB0byAnaW50JyI+KGludCkgKCktPiAxPC9lcnJvcj47CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvbGFtYmRhL2hpZ2hsaWdodGluZy9Db25kaXRpb25hbEV4cHIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvbGFtYmRhL2hpZ2hsaWdodGluZy9Db25kaXRpb25hbEV4cHIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNDRmMGRlCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9sYW1iZGEvaGlnaGxpZ2h0aW5nL0NvbmRpdGlvbmFsRXhwci5qYXZhCkBAIC0wLDAgKzEsNTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwMC0yMDEyIEpldEJyYWlucyBzLnIuby4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCitjbGFzcyBUZXN0IHsKKyAgcHVibGljIGludGVyZmFjZSBJIHsKKyAgICBpbnQgbSgpOworICB9CisKKyAgcHVibGljIGludGVyZmFjZSBJMSB7CisgICAgaW50IG0oaW50IHkpOworICB9CisKKyAgeworICAgIGJvb2xlYW4gZmxhZyA9IHRydWU7CisgICAgSSBpID0gIGZsYWcgPyAoKCkgLT4gMTIzKSAgIDogKCgpIC0+IDIyMik7CisgICAgSSBpMSA9ICBmbGFnID8gKCgpIC0+IHs8ZXJyb3IgZGVzY3I9Ik1pc3NpbmcgcmV0dXJuIHN0YXRlbWVudCI+fTwvZXJyb3I+KSAgIDogKCgpIC0+IDIyMik7CisgICAgT2JqZWN0IGkyID0gIGZsYWcgPyAoPGVycm9yIGRlc2NyPSJUYXJnZXQgdHlwZSBvZiBhIGxhbWJkYSBjb252ZXJzaW9uIG11c3QgYmUgYW4gaW50ZXJmYWNlIj4oKSAtPiA0MjwvZXJyb3I+KSAgIDogKDxlcnJvciBkZXNjcj0iVGFyZ2V0IHR5cGUgb2YgYSBsYW1iZGEgY29udmVyc2lvbiBtdXN0IGJlIGFuIGludGVyZmFjZSI+KCkgLT4gMjIyPC9lcnJvcj4pOworICAgIEkgaTMgPSAgZmxhZyA/ICg8ZXJyb3IgZGVzY3I9IkluY29tcGF0aWJsZSBwYXJhbWV0ZXIgdHlwZXMgaW4gbGFtYmRhIGV4cHJlc3Npb24iPih4KSAtPiA0MjwvZXJyb3I+KSAgIDogKCgpIC0+IDIyMik7CisgICAgSSBpNCA9ICBmbGFnID8gKCgpIC0+IDQyKSA6IG5ldyBJKCkgeworICAgICAgQE92ZXJyaWRlCisgICAgICBwdWJsaWMgaW50IG0oKSB7CisgICAgICAgIHJldHVybiAwOyAgLy9UbyBjaGFuZ2UgYm9keSBvZiBpbXBsZW1lbnRlZCBtZXRob2RzIHVzZSBGaWxlIHwgU2V0dGluZ3MgfCBGaWxlIFRlbXBsYXRlcy4KKyAgICAgIH0KKyAgICB9OworICB9Cit9CisKK2NsYXNzIFRlc3QxIHsKKyAgaW50ZXJmYWNlIEk8VCwgVj4geworICAgIFYgXyhUIHQpOworICB9CisKKyAgc3RhdGljIDxWPiB2b2lkIGJhcihJPFN0cmluZywgVj4gaWksIEk8ViwgU3RyaW5nPiBpayl7fQorCisgIHsKKyAgICBiYXIocyAtPiBzLmVxdWFscygiIikgPyAwIDogMSwgaSAtPiAiIik7CisgIH0KK30KKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9sYW1iZGEvaGlnaGxpZ2h0aW5nL0RlZmF1bHRNZXRob2QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvbGFtYmRhL2hpZ2hsaWdodGluZy9EZWZhdWx0TWV0aG9kLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmY4ODZmZgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvbGFtYmRhL2hpZ2hsaWdodGluZy9EZWZhdWx0TWV0aG9kLmphdmEKQEAgLTAsMCArMSwxNyBAQAorY2xhc3MgVGVzdCB7CisgIHB1YmxpYyBzdGF0aWMgZmluYWwgQmluYXJ5T3BlcmF0b3I8SW50ZWdlcj4gclBsdXMgPSAoeCwgeSkgLT4geCArIHk7CisgIGludGVyZmFjZSBCaW5hcnlPcGVyYXRvcjxUPiBleHRlbmRzIENvbWJpbmVyPFQsVCxUPiB7CisgICAgcHVibGljIFQgb3BlcmF0ZShUIGxlZnQsIFQgcmlnaHQpOworCisgICAgQE92ZXJyaWRlCisgICAgVCBjb21iaW5lKFQgdDEsIFQgdDIpIGRlZmF1bHQgeworICAgICAgcmV0dXJuIG9wZXJhdGUodDEsIHQyKTsKKyAgICB9CisgIH0KKworICBpbnRlcmZhY2UgQ29tYmluZXI8VCwgVSwgVj4geworICAgIFYgY29tYmluZShUIHQsIFUgdSk7CisgIH0KK30KKworCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2xhbWJkYS9oaWdobGlnaHRpbmcvRWZmZWN0aXZlRmluYWwuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvbGFtYmRhL2hpZ2hsaWdodGluZy9FZmZlY3RpdmVGaW5hbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA3YjRkMTUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2xhbWJkYS9oaWdobGlnaHRpbmcvRWZmZWN0aXZlRmluYWwuamF2YQpAQCAtMCwwICsxLDExNyBAQAoraW50ZXJmYWNlIEkgeworICBpbnQgbShpbnQgaSk7Cit9CitpbnRlcmZhY2UgSiB7CisgIGludCBtKCk7Cit9CisKK3B1YmxpYyBjbGFzcyBYWFggeworCisgICAgc3RhdGljIHZvaWQgZm9vKCkgeworICAgICAgICBpbnQgbCA9IDA7CisgICAgICAgIGludCBqID0gMDsKKyAgICAgICAgaiA9IDI7CisgICAgICAgIGZpbmFsIGludCBMID0gMDsKKyAgICAgICAgSSBpID0gKGludCBoKSAtPiB7IGludCBrID0gMDsgcmV0dXJuIGggKyA8ZXJyb3IgZGVzY3I9IlZhcmlhYmxlIHVzZWQgaW4gbGFtYmRhIGV4cHJlc3Npb24gc2hvdWxkIGJlIGVmZmVjdGl2ZWx5IGZpbmFsIj5qPC9lcnJvcj4gKyBsICsgTDsgfTsKKyAgICB9CisKKyAgICB2b2lkIGJhcigpIHsKKyAgICAgICAgaW50IGwgPSAwOworICAgICAgICBpbnQgaiA9IDA7CisgICAgICAgIGogPSAyOworICAgICAgICBmaW5hbCBpbnQgTCA9IDA7CisgICAgICAgIEkgaSA9IChpbnQgaCkgLT4geyBpbnQgayA9IDA7IHJldHVybiBoICsgayArIDxlcnJvciBkZXNjcj0iVmFyaWFibGUgdXNlZCBpbiBsYW1iZGEgZXhwcmVzc2lvbiBzaG91bGQgYmUgZWZmZWN0aXZlbHkgZmluYWwiPmo8L2Vycm9yPiArIGwgKyBMOyB9OworICAgIH0KKyAgICAKKyAgICAgdm9pZCBmb28oSiBpKSB7IH0KKyAKKyAgICAgdm9pZCBtMShpbnQgeCkgeworICAgICAgICAgaW50IHkgPSAxOworICAgICAgICAgZm9vKCgpIC0+IHgreSk7CisgICAgIH0KKyAKKyAgICAgdm9pZCBtMihpbnQgeCkgeworICAgICAgICAgaW50IHk7CisgICAgICAgICB5ID0gMTsKKyAgICAgICAgIGZvbygoKSAtPiB4K3kpOworICAgICB9CisgCisgICAgIHZvaWQgbTMoaW50IHgsIGJvb2xlYW4gY29uZCkgeworICAgICAgICAgaW50IHk7CisgICAgICAgICBpZiAoY29uZCkgeSA9IDE7CisgICAgICAgICBmb28oKCkgLT4geCs8ZXJyb3IgZGVzY3I9IlZhcmlhYmxlIHVzZWQgaW4gbGFtYmRhIGV4cHJlc3Npb24gc2hvdWxkIGJlIGVmZmVjdGl2ZWx5IGZpbmFsIj55PC9lcnJvcj4pOworICAgICB9CisgCisgICAgIHZvaWQgbTQoaW50IHgsIGJvb2xlYW4gY29uZCkgeworICAgICAgICAgaW50IHk7CisgICAgICAgICBpZiAoY29uZCkgeSA9IDE7CisgICAgICAgICBlbHNlIHkgPSAyOworICAgICAgICAgZm9vKCgpIC0+IHgreSk7CisgICAgIH0KKyAKKyAgICAgdm9pZCBtNShpbnQgeCwgYm9vbGVhbiBjb25kKSB7CisgICAgICAgICBpbnQgeTsKKyAgICAgICAgIGlmIChjb25kKSB5ID0gMTsKKyAgICAgICAgIHkgPSAyOworICAgICAgICAgZm9vKCgpIC0+IHgrPGVycm9yIGRlc2NyPSJWYXJpYWJsZSB1c2VkIGluIGxhbWJkYSBleHByZXNzaW9uIHNob3VsZCBiZSBlZmZlY3RpdmVseSBmaW5hbCI+eTwvZXJyb3I+KTsKKyAgICAgfQorIAorICAgICB2b2lkIG02KGludCB4KSB7CisgICAgICAgICBmb28oKCkgLT4gPGVycm9yIGRlc2NyPSJWYXJpYWJsZSB1c2VkIGluIGxhbWJkYSBleHByZXNzaW9uIHNob3VsZCBiZSBlZmZlY3RpdmVseSBmaW5hbCI+eDwvZXJyb3I+KzEpOworICAgICAgIHgrKzsKKyAgICAgfQorIAorICAgICB2b2lkIG03KGludCB4KSB7CisgICAgICAgICBmb28oKCkgLT4gPGVycm9yIGRlc2NyPSJWYXJpYWJsZSB1c2VkIGluIGxhbWJkYSBleHByZXNzaW9uIHNob3VsZCBiZSBlZmZlY3RpdmVseSBmaW5hbCI+eDwvZXJyb3I+PTEpOworICAgICB9CisgCisgICAgIHZvaWQgbTgoKSB7CisgICAgICAgICBpbnQgeTsKKyAgICAgICAgIGZvbygoKSAtPiA8ZXJyb3IgZGVzY3I9IlZhcmlhYmxlIHVzZWQgaW4gbGFtYmRhIGV4cHJlc3Npb24gc2hvdWxkIGJlIGVmZmVjdGl2ZWx5IGZpbmFsIj55PC9lcnJvcj49MSk7CisgICAgIH0KK30KKworY2xhc3MgU2FtcGxlIHsKKyAgICAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworICAgICAgICAgICAgICAgIFJ1bm5hYmxlIHJ1bm5hYmxlID0gKCkgLT4geworICAgICAgICAgICAgICAgICAgICAgICAgSW50ZWdlciBpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRydWUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSA9IDExMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKGkpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH07CisKKyAgICAgICAgICAgICAgICBSdW5uYWJsZSBydW5uYWJsZTIgPSAoKSAtPiB7CisgICAgICAgICAgICAgICAgICAgICAgICBJbnRlZ2VyIGkyID0gMzMzOworICAgICAgICAgICAgICAgICAgICAgICAgaTIgPSA0NDQ7CisgICAgICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oaTIpOworICAgICAgICAgICAgICAgIH07CisKKyAgICAgICAgICAgICAgICBydW5uYWJsZS5ydW4oKTsgICAgICAgICAvLyBwcmludHMgMTExCisgICAgICAgICAgICAgICAgcnVubmFibGUyLnJ1bigpOyAgICAgICAgLy8gcHJpbnRzIDQ0NAorICAgICAgICB9Cit9CisKK2NsYXNzIFBhcmFtZXRlcklzRWZmZWN0aXZlbHlGaW5hbCB7CisgIHsKKyAgICBDb21wYXJhYmxlPFN0cmluZz4gYyA9IG8tPnsKKyAgICAgIG5ldyBSdW5uYWJsZSgpIHsKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKKyAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4obyk7CisgICAgICAgIH0KKyAgICAgIH0ucnVuKCk7CisgICAgICByZXR1cm4gMDsKKyAgICB9OworICAgIENvbXBhcmFibGU8U3RyaW5nPiBjMSA9IG8tPnsKKyAgICAgIG8gPSAiIjsKKyAgICAgIG5ldyBSdW5uYWJsZSgpIHsKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKKyAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oPGVycm9yIGRlc2NyPSJWYXJpYWJsZSAnbycgaXMgYWNjZXNzZWQgZnJvbSB3aXRoaW4gaW5uZXIgY2xhc3MuIE5lZWRzIHRvIGJlIGRlY2xhcmVkIGZpbmFsLiI+bzwvZXJyb3I+KTsKKyAgICAgICAgfQorICAgICAgfS5ydW4oKTsKKyAgICAgIHJldHVybiAwOworICAgIH07CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2xhbWJkYS9oaWdobGlnaHRpbmcvRW51bUNvbnN0YW50cy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9sYW1iZGEvaGlnaGxpZ2h0aW5nL0VudW1Db25zdGFudHMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YmM3NWZmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9sYW1iZGEvaGlnaGxpZ2h0aW5nL0VudW1Db25zdGFudHMuamF2YQpAQCAtMCwwICsxLDEwIEBACitlbnVtIEJ1ZyB7CisgICAgSU5TVEFOQ0UxKChJbnRlZ2VyIHgsIEludGVnZXIgeSkgLT4geC5ieXRlVmFsdWUoKSksCisgICAgSU5TVEFOQ0UyKCh4LCB5KSAtPiB5LiBieXRlVmFsdWUoKSk7CisgICAgcHJpdmF0ZSBCdWcoRm9vIGZvbykgeworICAgIH0KKworICAgIHByaXZhdGUgaW50ZXJmYWNlIEZvbyB7CisgICAgICAgIGJ5dGUgYmFyKEludGVnZXIgeCwgSW50ZWdlciB5KTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2xhbWJkYS9oaWdobGlnaHRpbmcvSW5Db250ZXh0cy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9sYW1iZGEvaGlnaGxpZ2h0aW5nL0luQ29udGV4dHMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OGIzOTYwCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9sYW1iZGEvaGlnaGxpZ2h0aW5nL0luQ29udGV4dHMuamF2YQpAQCAtMCwwICsxLDQ5IEBACitpbnRlcmZhY2UgSSB7CisgICAgdm9pZCBtKGludCB4KTsKK30KK2NsYXNzIEluQ29udGV4dHMgeworICAgIHZvaWQgbShJIHMpIHsgfQorCisgICAgdm9pZCBhc3NpZ25tZW50KCkgeworICAgICAgICBJIHMxID0gKHgtPiB7IFN5c3RlbS5vdXQucHJpbnRsbigpOyB9KTsKKyAgICAgICAgSSBzMiA9ICgoeC0+IHsgU3lzdGVtLm91dC5wcmludGxuKCk7IH0pKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBtZXRob2QoKSB7CisgICAgICAgIG0oKHgtPiB7IFN5c3RlbS5vdXQucHJpbnRsbigpOyB9KSk7CisgICAgICAgIG0oKCh4LT4geyBTeXN0ZW0ub3V0LnByaW50bG4oKTsgfSkpKTsKKyAgICB9CisKKyAgICBJIHJldHVybkNvbnRleHQoKSB7CisgICAgICAgIHJldHVybiAoeCAtPiB7U3lzdGVtLm91dC5wcmludGxuKCk7fSk7CisgICAgfQorfQorCitpbnRlcmZhY2UgSTE8QSwgQj4geworICAgQiBmb28oQSBhKTsKK30KK2NsYXNzIFZhbHVlTGFtYmRhSW5Db250ZXh0IHsKKworICAgIDxaPiB2b2lkIG0xKEkxPFN0cmluZywgWj4gaSkgeyAgfQorICAgIDxaPiB2b2lkIG0yKEkxPFN0cmluZywgSTE8U3RyaW5nLCBaPj4gaSkgeyAgfQorCisgICAgdm9pZCBleHByTWV0aG9kKCkgeworICAgICAgICBtMShzMSAtPiAxKTsKKyAgICAgICAgbTIoczEgLT4gczIgLT4gMSk7CisgICAgfQorCisgICAgdm9pZCBleHByQXNzaWdubWVudCgpIHsKKyAgICAgICAgSTE8U3RyaW5nLCBJbnRlZ2VyPiBpbjEgPSBzMSAtPiAxOworICAgICAgICBJMTxTdHJpbmcsIEkxPFN0cmluZywgSW50ZWdlcj4+IGluMiA9IHMxIC0+IHMyIC0+IDE7CisgICAgfQorCisgICAgdm9pZCBzdGF0ZW1lbnRNZXRob2QoKSB7CisgICAgICAgIG0xKHMxIC0+IHsgcmV0dXJuIDE7IH0pOworICAgICAgICBtMihzMSAtPiB7IHJldHVybiBzMiAtPiB7IHJldHVybiAxOyB9OyB9KTsKKyAgICB9CisKKyAgICB2b2lkIHN0YXRlbWVudEFzc2lnbm1lbnQoKSB7CisgICAgICAgIEkxPFN0cmluZywgSW50ZWdlcj4gaW4xID0gczEgLT4geyByZXR1cm4gMTsgfTsKKyAgICAgICAgSTE8U3RyaW5nLCBJMTxTdHJpbmcsIEludGVnZXI+PiBpbjIgPSBzMSAtPiB7IHJldHVybiBzMiAtPiB7IHJldHVybiAxOyB9OyB9OworICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvbGFtYmRhL2hpZ2hsaWdodGluZy9JbmNvbXBhdGlibGVGb3JtYWxQYXJhbWV0ZXJUeXBlcy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9sYW1iZGEvaGlnaGxpZ2h0aW5nL0luY29tcGF0aWJsZUZvcm1hbFBhcmFtZXRlclR5cGVzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2UxMTJiYgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvbGFtYmRhL2hpZ2hsaWdodGluZy9JbmNvbXBhdGlibGVGb3JtYWxQYXJhbWV0ZXJUeXBlcy5qYXZhCkBAIC0wLDAgKzEsMTkgQEAKK2NsYXNzIExhbWJkYVRlc3QgeworCisgIHB1YmxpYyB2b2lkIGhpZ2hsaWdodHNUaGVCdWcoU3RyZWFtPFN0cmluZz4gc3RyZWFtKSB7CisgICAgc3RyZWFtLmZsYXRNYXAoKEJsb2NrPD8gc3VwZXIgU3RyaW5nPiBzaW5rLCBTdHJpbmcgZWxlbWVudCkgLT4ge30pOworICB9CisKKyAgcHVibGljIGludGVyZmFjZSBCbG9jazxCPiB7CisgICAgdm9pZCBhcHBseShCIHQpOworICB9CisKKyAgcHVibGljIGludGVyZmFjZSBTdHJlYW08Uz4geworICAgIDxSPiBTdHJlYW08Uj4gZmxhdE1hcChGbGF0TWFwcGVyPD8gc3VwZXIgUywgUj4gbWFwcGVyKTsKKworICB9CisKKyAgcHVibGljIGludGVyZmFjZSBGbGF0TWFwcGVyPEYsIFI+IHsKKyAgICB2b2lkIGZsYXRNYXBJbnRvKEJsb2NrPD8gc3VwZXIgUj4gc2luaywgRiBlbGVtZW50KTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9sYW1iZGEvaGlnaGxpZ2h0aW5nL0luY29tcGF0aWJsZVJldHVyblR5cGVzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2xhbWJkYS9oaWdobGlnaHRpbmcvSW5jb21wYXRpYmxlUmV0dXJuVHlwZXMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZjNhOWEyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9sYW1iZGEvaGlnaGxpZ2h0aW5nL0luY29tcGF0aWJsZVJldHVyblR5cGVzLmphdmEKQEAgLTAsMCArMSw1OSBAQAorY2xhc3MgVGVzdDEgeworCisgICAgaW50ZXJmYWNlIFZvaWRSZXR1cm5UeXBlIHsKKyAgICAgICAgdm9pZCBmb28oKTsKKyAgICB9CisgICAgeworICAgICAgICBWb2lkUmV0dXJuVHlwZSBhSSA9ICgpIC0+IFN5c3RlbS5vdXQucHJpbnRsbigpOworICAgICAgICBWb2lkUmV0dXJuVHlwZSBhSTEgPSAoKSAtPiB7U3lzdGVtLm91dC5wcmludGxuKCk7fTsKKyAgICAgICAgVm9pZFJldHVyblR5cGUgYUkyID0gPGVycm9yIGRlc2NyPSJVbmV4cGVjdGVkIHJldHVybiB2YWx1ZSI+KCkgLT4ge3JldHVybiAxO308L2Vycm9yPjsKKyAgICAgICAgVm9pZFJldHVyblR5cGUgYUkzID0gKCkgLT4gMTsKKyAgICAgICAgVm9pZFJldHVyblR5cGUgYUk0ID0gKCkgLT4ge3JldHVybjt9OworICAgIH0KK30KKworY2xhc3MgVGVzdDIgeworICAgIGludGVyZmFjZSBJbnRSZXR1cm5UeXBlIHsKKyAgICAgICAgaW50IGZvbygpOworICAgIH0KKyAgICB7CisgICAgICAgIEludFJldHVyblR5cGUgYUkgPSA8ZXJyb3IgZGVzY3I9IkluY29tcGF0aWJsZSByZXR1cm4gdHlwZSB2b2lkIGluIGxhbWJkYSBleHByZXNzaW9uIj4oKSAtPiBTeXN0ZW0ub3V0LnByaW50bG4oKTwvZXJyb3I+OworICAgICAgICBJbnRSZXR1cm5UeXBlIGFJMSA9ICgpIC0+IHtTeXN0ZW0ub3V0LnByaW50bG4oKTs8ZXJyb3IgZGVzY3I9Ik1pc3NpbmcgcmV0dXJuIHN0YXRlbWVudCI+fTwvZXJyb3I+OworICAgICAgICBJbnRSZXR1cm5UeXBlIGFJMiA9ICgpIC0+IHtyZXR1cm4gMTt9OworICAgICAgICBJbnRSZXR1cm5UeXBlIGFJMyA9ICgpIC0+IDE7CisgICAgfQorfQorCisKK2NsYXNzIFRlc3QzIHsKKworICAgIGludGVyZmFjZSBYUmV0dXJuVHlwZTxYPiB7CisgICAgICAgIFggZm9vKCk7CisgICAgfQorICAgIHsKKyAgICAgICAgWFJldHVyblR5cGU8T2JqZWN0PiBhSSA9IDxlcnJvciBkZXNjcj0iSW5jb21wYXRpYmxlIHJldHVybiB0eXBlIHZvaWQgaW4gbGFtYmRhIGV4cHJlc3Npb24iPigpIC0+IFN5c3RlbS5vdXQucHJpbnRsbigpPC9lcnJvcj47CisgICAgICAgIFhSZXR1cm5UeXBlPE9iamVjdD4gYUkxID0gKCkgLT4ge1N5c3RlbS5vdXQucHJpbnRsbigpOzxlcnJvciBkZXNjcj0iTWlzc2luZyByZXR1cm4gc3RhdGVtZW50Ij59PC9lcnJvcj47CisgICAgICAgIFhSZXR1cm5UeXBlPE9iamVjdD4gYUkyID0gKCkgLT4ge3JldHVybiAxO307CisgICAgICAgIFhSZXR1cm5UeXBlPE9iamVjdD4gYUkzID0gKCkgLT4gMTsKKyAgICAgICAgWFJldHVyblR5cGU8T2JqZWN0PiBhSTQgPSAoKSAtPiB7PGVycm9yIGRlc2NyPSJNaXNzaW5nIHJldHVybiBzdGF0ZW1lbnQiPn08L2Vycm9yPjsKKyAgICB9Cit9CisKK2NsYXNzIFRlc3Q0IHsKKyAgICBjbGFzcyBZPFQ+e30KKyAgICAKKyAgICBpbnRlcmZhY2UgWVhSZXR1cm5UeXBlPFg+IHsKKyAgICAgICAgWTxYPiBmb28oKTsKKyAgICB9CisKKyAgICB7CisgICAgICAgIFlYUmV0dXJuVHlwZTxPYmplY3Q+IGFJID0gPGVycm9yIGRlc2NyPSJJbmNvbXBhdGlibGUgcmV0dXJuIHR5cGUgdm9pZCBpbiBsYW1iZGEgZXhwcmVzc2lvbiI+KCkgLT4gU3lzdGVtLm91dC5wcmludGxuKCk8L2Vycm9yPjsKKyAgICAgICAgWVhSZXR1cm5UeXBlPE9iamVjdD4gYUkxID0gKCkgLT4ge1N5c3RlbS5vdXQucHJpbnRsbigpOzxlcnJvciBkZXNjcj0iTWlzc2luZyByZXR1cm4gc3RhdGVtZW50Ij59PC9lcnJvcj47CisgICAgICAgIFlYUmV0dXJuVHlwZTxPYmplY3Q+IGFJMiA9IDxlcnJvciBkZXNjcj0iSW5jb21wYXRpYmxlIHJldHVybiB0eXBlIGludCBpbiBsYW1iZGEgZXhwcmVzc2lvbiI+KCkgLT4ge3JldHVybiAxO308L2Vycm9yPjsKKyAgICAgICAgWVhSZXR1cm5UeXBlPE9iamVjdD4gYUkzID0gPGVycm9yIGRlc2NyPSJJbmNvbXBhdGlibGUgcmV0dXJuIHR5cGUgaW50IGluIGxhbWJkYSBleHByZXNzaW9uIj4oKSAtPiAxPC9lcnJvcj47CisgICAgICAgIFlYUmV0dXJuVHlwZTxPYmplY3Q+IGFJNCA9ICgpIC0+IG5ldyBZPE9iamVjdD4oKXt9OworICAgICAgICBZWFJldHVyblR5cGU8T2JqZWN0PiBhSURpYW1vbmQgPSAoKSAtPiBuZXcgWTw+KCk7CisgICAgICAgIAorICAgIH0KK30KKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9sYW1iZGEvaGlnaGxpZ2h0aW5nL0luY29tcGxldGVTdWJzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9sYW1iZGEvaGlnaGxpZ2h0aW5nL0luY29tcGxldGVTdWJzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkwODVjNjkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2xhbWJkYS9oaWdobGlnaHRpbmcvSW5jb21wbGV0ZVN1YnN0LmphdmEKQEAgLTAsMCArMSw2MyBAQAorLyoKKyAqIENvcHlyaWdodCAyMDAwLTIwMTIgSmV0QnJhaW5zIHMuci5vLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KK2ltcG9ydCBqYXZhLnV0aWwuKjsKKworY2xhc3MgTGFtYmRhVGVzdDxUVD4geworICBpbnRlcmZhY2UgQmluYXJ5T3BlcmF0b3I8VD4geworCisgICAgcHVibGljIFQgZXZhbChUIGxlZnQsIFQgcmlnaHQpOworICB9CisKKyAgaW50ZXJmYWNlIE1hcHBlcjxULCBVPiB7CisgICAgVSBtYXAoVCB0KTsKKyAgfQorCisgIHB1YmxpYyBzdGF0aWMgPFQsIFU+IExhbWJkYVRlc3Q8VT4gbWFwKGZpbmFsIEl0ZXJhYmxlPD8gZXh0ZW5kcyBUPiBpdGVyYWJsZSwgZmluYWwgTWFwcGVyPD8gc3VwZXIgVCwgPyBleHRlbmRzIFU+IG1hcHBlcikgeworICAgIHJldHVybiBudWxsOworICB9CisKKyAgVFQgcmVkdWNlKFRUIGJhc2UsIEJpbmFyeU9wZXJhdG9yPFRUPiByZWR1Y2VyKSB7CisgICAgcmV0dXJuIG51bGw7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0KCkgeworICAgIGZpbmFsIExpc3Q8U3RyaW5nPiBhU3RyaW5ncyA9IEFycmF5cy5hc0xpc3QoIjEiLCAiMiIsICIzIik7CisgICAgbWFwKGFTdHJpbmdzLCBzIC0+IHMubGVuZ3RoKCkpLnJlZHVjZSgwLCAobCwgIHIpIC0+IGwgKyByKTsKKyAgfQorfQorCitjbGFzcyBMYW1iZGFUZXN0MjxUeXBlUGFyYW0+IHsKKyAgaW50ZXJmYWNlIEJpbmFyeU9wZXJhdG9yPFQ+IHsKKyAgICBwdWJsaWMgVCBldmFsKFQgbGVmdCwgVCByaWdodCk7CisgIH0KKworICBpbnRlcmZhY2UgTWFwcGVyPFQsIFU+IHsKKyAgICBVIG1hcChUIHQpOworICB9CisKKyAgcHVibGljIDxVPiBMYW1iZGFUZXN0PFU+IG1hcChmaW5hbCBNYXBwZXI8PyBzdXBlciBUeXBlUGFyYW0sID8gZXh0ZW5kcyBVPiBtYXBwZXIpIHsKKyAgICByZXR1cm4gbnVsbDsKKyAgfQorCisgIFR5cGVQYXJhbSByZWR1Y2UoVHlwZVBhcmFtIGJhc2UsIEJpbmFyeU9wZXJhdG9yPFR5cGVQYXJhbT4gcmVkdWNlcikgeworICAgIHJldHVybiBudWxsOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdCgpIHsKKyAgICBmaW5hbCBMYW1iZGFUZXN0MjxTdHJpbmc+IGx0ID0gbmV3IExhbWJkYVRlc3QyPD4oKTsKKyAgICBsdC5tYXAocyAtPiBzLmxlbmd0aCgpKS5yZWR1Y2UoMCwgKGwsICByKSAtPiBsICsgcik7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2xhbWJkYS9oaWdobGlnaHRpbmcvSW5mZXJGcm9tVHlwZUFyZ3MuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvbGFtYmRhL2hpZ2hsaWdodGluZy9JbmZlckZyb21UeXBlQXJncy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ3Zjc5N2EKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2xhbWJkYS9oaWdobGlnaHRpbmcvSW5mZXJGcm9tVHlwZUFyZ3MuamF2YQpAQCAtMCwwICsxLDE3IEBACitpbXBvcnQgamF2YS51dGlsLio7CitwdWJsaWMgY2xhc3MgQnVnUmVwb3J0TGFtYmRhU3F1aWdnbGVzPFQ+IHsKKworICBwcml2YXRlIFQgdDsKKyAgcHVibGljIDxWPiBMaXN0PFY+IGZsYXRNYXAoTWFwcGVyPFQsIExpc3Q8Vj4+IG1hcHBlcikgeworICAgIHJldHVybiBtYXBwZXIubWFwKHQpOworICB9CisKKyAgc3RhdGljIHZvaWQgYmFyKCBCdWdSZXBvcnRMYW1iZGFTcXVpZ2dsZXM8SW50ZWdlcj4geCkgeworICAgIHguZmxhdE1hcCh0MSAtPiBuZXcgQXJyYXlMaXN0PFN0cmluZz4odDEpKTsKKyAgICB4LmZsYXRNYXAodDEgLT4gbmV3IEFycmF5TGlzdDw+KHQxKSk7CisgIH0KKworICBpbnRlcmZhY2UgTWFwcGVyPFQsIFU+IHsKKyAgICBVIG1hcChUIHQpOworICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2xhbWJkYS9oaWdobGlnaHRpbmcvSW5mZXJlbmNlRnJvbUFyZ3MuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvbGFtYmRhL2hpZ2hsaWdodGluZy9JbmZlcmVuY2VGcm9tQXJncy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkwNGM1MDQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2xhbWJkYS9oaWdobGlnaHRpbmcvSW5mZXJlbmNlRnJvbUFyZ3MuamF2YQpAQCAtMCwwICsxLDMxIEBACitpbnRlcmZhY2UgSTxLLCBWPiB7CisgICAgcHVibGljIFYgcHV0KEsgaywgViB2KTsKK30KKworaW50ZXJmYWNlIEE8VD57fQoraW50ZXJmYWNlIEI8TD4gZXh0ZW5kcyBBPEw+e30KKworaW50ZXJmYWNlIFNhbWVBcmdzSTxUPiB7CisgICAgVCBzYW1lKFQgYSwgVCBiKTsKK30KKworY2xhc3MgSW5mZXJlbmNlRnJvbUFyZ3MgeworCisgICAgcHJpdmF0ZSBzdGF0aWMgPEU+IHZvaWQgYmFyKEE8RT4gYSwgSTxFLCBJbnRlZ2VyPiBpKSB7IH0KKyAgICBwcml2YXRlIHN0YXRpYyA8RT4gdm9pZCBiYXp6KEk8PyBzdXBlciBFLCBJbnRlZ2VyPiBpKSB7IH0KKworICAgIHZvaWQgZm9vKEI8SW50ZWdlcj4gYikgeworICAgICAgICAgYmFyKG51bGwsIDxlcnJvciBkZXNjcj0iQ3ljbGljIGluZmVyZW5jZSI+KGssIHYpIC0+IHY8L2Vycm9yPik7CisgICAgICAgICBiYXIobnVsbCwgbnVsbCk7CisgICAgICAgICBiYXIoYiwgKGssIHYpIC0+ICB7cmV0dXJuIHY7fSk7CisgICAgICAgICBiYXIoYiwgKGssIHYpIC0+IHs8ZXJyb3IgZGVzY3I9IkluY29tcGF0aWJsZSB0eXBlcy4gRm91bmQ6ICdqYXZhLmxhbmcuSW50ZWdlcicsIHJlcXVpcmVkOiAnamF2YS5sYW5nLlN0cmluZyciPlN0cmluZyBpID0gazs8L2Vycm9yPiByZXR1cm4gdjt9KTsKKyAgICAgICAgIGJhcihiLCAoaywgdikgLT4ge0ludGVnZXIgIGkgPSBrOyByZXR1cm4gdjt9KTsKKworICAgICAgICAgYmF6eig8ZXJyb3IgZGVzY3I9IkN5Y2xpYyBpbmZlcmVuY2UiPihrLCB2KSAtPiB2PC9lcnJvcj4pOworICAgICAgICAgYmF6eigoaywgdikgLT4gezxlcnJvciBkZXNjcj0iSW5jb21wYXRpYmxlIHR5cGVzLiBGb3VuZDogJzxsYW1iZGEgcGFyYW1ldGVyPicsIHJlcXVpcmVkOiAnaW50JyI+aW50IGkgPSBrOzwvZXJyb3I+IHJldHVybiB2O30pOworICAgIH0KKworICAgIHB1YmxpYyBzdGF0aWMgPFQ+IFNhbWVBcmdzSTxUPiBtYXgoKSB7CisgICAgICAgIHJldHVybiAoYSwgYikgLT4gYjsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2xhbWJkYS9oaWdobGlnaHRpbmcvSW5mZXJlbmNlT25NZXRob2RDYWxsU2l0ZS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9sYW1iZGEvaGlnaGxpZ2h0aW5nL0luZmVyZW5jZU9uTWV0aG9kQ2FsbFNpdGUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYjhmOGQ3Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9sYW1iZGEvaGlnaGxpZ2h0aW5nL0luZmVyZW5jZU9uTWV0aG9kQ2FsbFNpdGUuamF2YQpAQCAtMCwwICsxLDE3IEBACitpbXBvcnQgamF2YS51dGlsLio7CitpbnRlcmZhY2UgSW48WD4geworICAgIExpc3Q8WD4gZigpOworfQorCitjbGFzcyBJbmZlcmVuY2VPbk1ldGhvZENhbGxTaXRlIHsKKyAgICA8Wj4gdm9pZCBtKEluPFo+IGksIEluPFo+IGlpKSB7IH0KKyAgICA8Wj4gdm9pZCBtKEluPFo+IHMpIHsgfQorCisgICAgeworICAgICAgICBtKCgpIC0+IENvbGxlY3Rpb25zLmVtcHR5TGlzdCgpKTsKKyAgICAgICAgbSgoSW48U3RyaW5nPikoKSAtPiBDb2xsZWN0aW9ucy5lbXB0eUxpc3QoKSwgKCkgLT4gIG5ldyBBcnJheUxpc3Q8U3RyaW5nPigpKTsKKyAgICAgICAgbSgoKSAtPkNvbGxlY3Rpb25zLjxTdHJpbmc+ZW1wdHlMaXN0KCksICgpIC0+IG5ldyBBcnJheUxpc3Q8U3RyaW5nPigpKTsKKyAgICAgICAgbSgoKSAtPiBDb2xsZWN0aW9ucy48U3RyaW5nPmVtcHR5TGlzdCgpKTsKKyAgICB9CisgICAgCit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2xhbWJkYS9oaWdobGlnaHRpbmcvTGFtYmRhQ29udGV4dC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9sYW1iZGEvaGlnaGxpZ2h0aW5nL0xhbWJkYUNvbnRleHQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZmQzNjhjCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9sYW1iZGEvaGlnaGxpZ2h0aW5nL0xhbWJkYUNvbnRleHQuamF2YQpAQCAtMCwwICsxLDI3IEBACitpbnRlcmZhY2UgSSB7CisgICAgdm9pZCBtKGludCB4KTsKK30KKworY2xhc3MgVGVzdCB7CisgICAgdm9pZCBmb28oT2JqZWN0IHgpIHt9CisKKyAgICB2b2lkIGJhcigpIHsKKyAgICAgICAgZm9vKCE8ZXJyb3IgZGVzY3I9IkxhbWJkYSBleHByZXNzaW9uIG5vdCBleHBlY3RlZCBoZXJlIj4oaW50IHgpLT4ge308L2Vycm9yPik7CisgICAgICAgIGZvbyg8ZXJyb3IgZGVzY3I9IkxhbWJkYSBleHByZXNzaW9uIG5vdCBleHBlY3RlZCBoZXJlIj4oaW50IHgpLT4geyB9PC9lcnJvcj4gaW5zdGFuY2VvZiBPYmplY3QgKTsKKyAgICB9CisKKyAgICBJIGJhenooKSB7CisgICAgICAgIGZvbygoSSkoaW50IHgpLT4geyB9KTsKKyAgICAgICAgSSBvID0gKEkpKGludCB4KS0+IHsgfTsKKyAgICAgICAgcmV0dXJuIChpbnQgeCkgLT4ge307CisgICAgfQorfQorCitpbnRlcmZhY2UgSUkgeworICBib29sZWFuIF8oU3RyaW5nIHMpOworfQorY2xhc3MgVGVzdDEgeworICB2b2lkIGJhcihib29sZWFuIGIpeworICAgIElJIGlrID0gYiA/IChzKS0+IHRydWUgOiAocyktPmZhbHNlOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9sYW1iZGEvaGlnaGxpZ2h0aW5nL0xhbWJkYU9uVmFyYXJnUGxhY2UuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvbGFtYmRhL2hpZ2hsaWdodGluZy9MYW1iZGFPblZhcmFyZ1BsYWNlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjE0MDY1YwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvbGFtYmRhL2hpZ2hsaWdodGluZy9MYW1iZGFPblZhcmFyZ1BsYWNlLmphdmEKQEAgLTAsMCArMSwyMSBAQAorY2xhc3MgVGVzdERhdGE8Sz4ge30KK2ludGVyZmFjZSBUZXJtaW5hbE9wPEwsIE0+IGV4dGVuZHMgSW50ZXJtZWRpYXRlT3A8TCwgTT4ge30KK2ludGVyZmFjZSBJbnRlcm1lZGlhdGVPcDxMMSwgTTE+IHsgYm9vbGVhbiBfKEwxIGwsIE0xIG0pO30KKworY2xhc3MgVGVzdDxULCBVPiB7CisgIHByb3RlY3RlZCBVIGV4ZXJjaXNlT3BzKFRlc3REYXRhPFQ+IGRhdGEsIFRlcm1pbmFsT3A8VCwgVT4gdGVybWluYWwsIEludGVybWVkaWF0ZU9wPFQsIFU+Li4uIG9wcykgeworICAgIHJldHVybiBleGVyY2lzZU9wcyhkYXRhLCB0ZXJtaW5hbCwgICh1LCB2KSAtPiAgdS5lcXVhbHModikpOworICB9Cit9CisKK2NsYXNzIFRlc3QxIHsKKyAgcHJvdGVjdGVkIDxULCBVPiBVIGV4ZXJjaXNlT3BzKFRlc3REYXRhPFQ+IGRhdGEsIFRlcm1pbmFsT3A8VCwgVT4gdGVybWluYWwsIEludGVybWVkaWF0ZU9wLi4uIG9wcykgeworICAgIHJldHVybiBleGVyY2lzZU9wcyhkYXRhLCB0ZXJtaW5hbCwgICh1LCB2KSAtPiB1LmVxdWFscyh2KSk7CisgIH0KK30KKworY2xhc3MgVGVzdDIgeworICBwcm90ZWN0ZWQgPFQsIFU+IFUgZXhlcmNpc2VPcHMoVGVzdERhdGE8VD4gZGF0YSwgVGVybWluYWxPcDxULCBVPiB0ZXJtaW5hbCwgSW50ZXJtZWRpYXRlT3A8VCwgVT4uLi4gb3BzKSB7CisgICAgcmV0dXJuIGV4ZXJjaXNlT3BzKGRhdGEsIHRlcm1pbmFsLCAgKHUsIHYpIC0+IHUuZXF1YWxzKHYpKTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9sYW1iZGEvaGlnaGxpZ2h0aW5nL0xhbWJkYVJhd09yTm90LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2xhbWJkYS9oaWdobGlnaHRpbmcvTGFtYmRhUmF3T3JOb3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YjliMDg1Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9sYW1iZGEvaGlnaGxpZ2h0aW5nL0xhbWJkYVJhd09yTm90LmphdmEKQEAgLTAsMCArMSw3MiBAQAoraW1wb3J0IGphdmEudXRpbC4qOworY2xhc3MgVGVzdERhdGE8Sz4ge30KK2ludGVyZmFjZSBUZXJtaW5hbE9wPEwsIE0+IGV4dGVuZHMgSW50ZXJtZWRpYXRlT3A8TCwgTT4ge30KK2ludGVyZmFjZSBJbnRlcm1lZGlhdGVPcDxMMSwgTTE+IHsgYm9vbGVhbiBfKEwxIGwsIE0xIG0pO30KKworCitjbGFzcyBUZXN0MSB7CisgIHByb3RlY3RlZCA8VCwgVT4gVSBleGVyY2lzZU9wcyhUZXN0RGF0YTxUPiBkYXRhLCBUZXJtaW5hbE9wPFQsIFU+IHRlcm1pbmFsLCBJbnRlcm1lZGlhdGVPcDxULCBVPi4uLiBvcHMpIHsKKyAgICByZXR1cm4gZXhlcmNpc2VPcHMoZGF0YSwgKHUsIHYpIC0+IHUuZXF1YWxzKHYpLCB0ZXJtaW5hbCk7CisgIH0KK30KKworY2xhc3MgVGVzdDIgeworICBwcm90ZWN0ZWQgPFQsIFU+IFUgZXhlcmNpc2VPcHMoVGVzdERhdGE8VD4gZGF0YSwgVGVybWluYWxPcDxULCBVPiB0ZXJtaW5hbCwgSW50ZXJtZWRpYXRlT3AuLi4gb3BzKSB7CisgICAgcmV0dXJuIGV4ZXJjaXNlT3BzKGRhdGEsIDxlcnJvciBkZXNjcj0iQ3ljbGljIGluZmVyZW5jZSI+KHUsIHYpIC0+IHUuZXF1YWxzKHYpPC9lcnJvcj4sIHRlcm1pbmFsKTsKKyAgfQorfQorCitjbGFzcyBUZXN0MyB7CisgIGludGVyZmFjZSBJPFk+IHsKKyAgICB2b2lkIG0oWSB5KTsKKyAgfQorCisgIHN0YXRpYyA8VD4gdm9pZCBiYXIoSTxUPiBpLCBMaXN0PFQ+IGwpeworICAgIGJhcih4IC0+IHt9LCBsKTsKKyAgICBiYXIoPGVycm9yIGRlc2NyPSJDeWNsaWMgaW5mZXJlbmNlIj54IC0+IHt9PC9lcnJvcj4sIG51bGwpOworICAgIGJhcigoSTxUPil4IC0+IHt9LCBudWxsKTsKKyAgICBiYXIoKFQgeCkgLT4ge30sIG51bGwpOworICAgIGJhcih4IC0+IHt9LCBuZXcgQXJyYXlMaXN0PFQ+KCkpOworICAgIGJhcig8ZXJyb3IgZGVzY3I9IkN5Y2xpYyBpbmZlcmVuY2UiPnggLT4ge308L2Vycm9yPiwgbmV3IEFycmF5TGlzdCgpKTsKKyAgfQorCisgIHN0YXRpYyB7CisgICAgYmFyKDxlcnJvciBkZXNjcj0iQ3ljbGljIGluZmVyZW5jZSI+eC0+e308L2Vycm9yPiwgbmV3IEFycmF5TGlzdCgpKTsKKyAgfQorfQorCisKK2NsYXNzIFRlc3Q0IHsKKyAgcHJvdGVjdGVkIDxULCBVPiBVIGV4ZXJjaXNlT3BzKFRlc3REYXRhPFQ+IGRhdGEsIFRlcm1pbmFsT3AxPFQsIFU+IHRlcm1pbmFsLCBJbnRlcm1lZGlhdGVPcDEuLi4gb3BzKSB7CisgICAgcmV0dXJuIGV4ZXJjaXNlT3BzKGRhdGEsICh1LCB2KSAtPiB1LmVxdWFscyh2KSwgdGVybWluYWwsIG9wcyk7CisgIH0KKworICBwcm90ZWN0ZWQgc3RhdGljIDxULCBVPiBVIGV4ZXJjaXNlT3BzKFRlc3REYXRhPFQ+IGRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQmlQcmVkaWNhdGUxPFUsIFU+IGVxdWFsYXRvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUZXJtaW5hbE9wMTxULCBVPiB0ZXJtaW5hbE9wLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEludGVybWVkaWF0ZU9wMVtdIG9wcykgeworICAgIHJldHVybiBudWxsOworICB9CisKKyAgcHVibGljIGludGVyZmFjZSBJbnRlcm1lZGlhdGVPcDE8VCxVPiB7CisKKyAgfQorICBwdWJsaWMgaW50ZXJmYWNlIEJpUHJlZGljYXRlMTxULCBVPiBleHRlbmRzIEludGVybWVkaWF0ZU9wMTxULCBVPnsKKyAgICBib29sZWFuIF8oVCB0LCBVIHUpOworICB9CisKKyAgcHVibGljIGludGVyZmFjZSBUZXJtaW5hbE9wMTxULCBVPiBleHRlbmRzIEludGVybWVkaWF0ZU9wMTxULCBVPiB7fQorCit9CisKK2NsYXNzIFRlc3Q1IHsKKyAgeworICAgIEJsb2NrIGVtcHR5ID0geCAtPiB7fTsKKyAgICBCbG9jazw/PiBlbXB0eTEgPSB4IC0+IHt9OworICAgIFN5c3RlbS5vdXQucHJpbnRsbigoQmxvY2spIHggLT4ge30pOworICB9CisKKyAgaW50ZXJmYWNlIEJsb2NrPFQ+IHsKKyAgICB2b2lkIGFwcGx5KFQgdCk7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2xhbWJkYS9oaWdobGlnaHRpbmcvTmVzdGVkTGFtYmRhcy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9sYW1iZGEvaGlnaGxpZ2h0aW5nL05lc3RlZExhbWJkYXMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZTcxNzQ4Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9sYW1iZGEvaGlnaGxpZ2h0aW5nL05lc3RlZExhbWJkYXMuamF2YQpAQCAtMCwwICsxLDE0IEBACitpbnRlcmZhY2UgSSB7CisgIEludGVnZXIgXygpOworfQorCitpbnRlcmZhY2UgSTEgeworICBTdHJpbmcgXygpOworfQorCitjbGFzcyBUZXN0IHsKKyAgSSBpID0gKCkgLT4geworICAgIEkxIGkxID0gKCkgLT4ge3JldHVybiAiIjt9OworICAgIHJldHVybiAxOworICB9OworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvbGFtYmRhL2hpZ2hsaWdodGluZy9Ob0luZmVyZW5jZVJlc3VsdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9sYW1iZGEvaGlnaGxpZ2h0aW5nL05vSW5mZXJlbmNlUmVzdWx0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjA2NTZmNQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvbGFtYmRhL2hpZ2hsaWdodGluZy9Ob0luZmVyZW5jZVJlc3VsdC5qYXZhCkBAIC0wLDAgKzEsMzAgQEAKK2ltcG9ydCBqYXZhLmxhbmcuU3RyaW5nOworCitpbnRlcmZhY2UgSTxBLCBCPiAgeworICBCIGZvbyhBIGEpOworfQorY2xhc3MgRm9vPFQ+IHsKKyAgcHVibGljIDxWPiBGb288Vj4gbWFwKEk8VCwgVj4gbWFwcGVyKSB7CisgICAgcmV0dXJuIG5ldyBGb288Vj4oKTsKKyAgfQorfQorCitjbGFzcyBOb0luZmVyZW5jZVJlc3VsdCB7CisKKyAgICA8QSwgQj4gSTxBLCBCPiBtKEk8QSwgQj4gIGYpIHsgcmV0dXJuIG51bGw7IH0KKyAgICA8VD4gdm9pZCBtMShUIHQpIHsgfQorCisgICAgdm9pZCB0ZXN0KCkgeworICAgICAgICBtKChTdHJpbmcgczEpIC0+ICA8ZXJyb3IgZGVzY3I9IlRhcmdldCB0eXBlIG9mIGEgbGFtYmRhIGNvbnZlcnNpb24gbXVzdCBiZSBhbiBpbnRlcmZhY2UiPihTdHJpbmcgczIpIC0+ICBzMSArIHMyPC9lcnJvcj4pOworICAgICAgICBtKDxlcnJvciBkZXNjcj0iSW5jb21wYXRpYmxlIHJldHVybiB0eXBlIDxsYW1iZGEgZXhwcmVzc2lvbj4gaW4gbGFtYmRhIGV4cHJlc3Npb24iPihTdHJpbmcgczEpIC0+ICB7cmV0dXJuIChTdHJpbmcgczIpIC0+ICBzMSArIHMyO308L2Vycm9yPik7CisKKyAgICAgICAgbSgoU3RyaW5nIHMxKSAtPiBzMS5sZW5ndGgoKSk7CisgICAgICAgIG0oKFN0cmluZyBzMSkgLT4gczEpOworCisgICAgICAgIG0xKDxlcnJvciBkZXNjcj0iQ3ljbGljIGluZmVyZW5jZSI+KCkgLT4geyB9PC9lcnJvcj4pOworCisgICAgICAgIEZvbzxTdHJpbmc+IGZvbyA9IG5ldyBGb288U3RyaW5nPigpOworICAgICAgICBmb28ubWFwKHYgLT4gbnVsbCk7CisgICAgICAgIEZvbzxTdHJpbmc+IG1hcDEgPSBmb28ubWFwKHZhbHVlIC0+IHZhbHVlICsgIiwgIiArIHZhbHVlKTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2xhbWJkYS9oaWdobGlnaHRpbmcvUmF3V2hlbk5vUGFyYW1zLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2xhbWJkYS9oaWdobGlnaHRpbmcvUmF3V2hlbk5vUGFyYW1zLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGU2ZDA0ZAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvbGFtYmRhL2hpZ2hsaWdodGluZy9SYXdXaGVuTm9QYXJhbXMuamF2YQpAQCAtMCwwICsxLDE3IEBACitwdWJsaWMgY2xhc3MgRm9vQmFyIHsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBjbGFzcyBCYXIyIHsKKyAgICAgICAgcHJpdmF0ZSBCYXIyKCkgeworICAgICAgICB9CisgICAgfQorCisgICAgcHJpdmF0ZSBpbnRlcmZhY2UgSTxUPiB7CisgICAgICAgIFQgY3JlYXRlKCk7CisgICAgfQorCisgICAgc3RhdGljIHZvaWQgZm9vKEkgaW50Zikge30KKworCisgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIGZvbygoKSAtPiBuZXcgQmFyMigpKTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9sYW1iZGEvaGlnaGxpZ2h0aW5nL1JlYXNzaWduVXNlZFZhcnMuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvbGFtYmRhL2hpZ2hsaWdodGluZy9SZWFzc2lnblVzZWRWYXJzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTIxODZlNAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvbGFtYmRhL2hpZ2hsaWdodGluZy9SZWFzc2lnblVzZWRWYXJzLmphdmEKQEAgLTAsMCArMSw5IEBACitjbGFzcyBYWFggeworICB2b2lkIGZvbygpIHsKKyAgICBpbnQgayA9IDA7CisgICAgaW50IG4gPSAyOworICAgIFJ1bm5hYmxlIHIgPSAoKS0+eworICAgICAgPGVycm9yIGRlc2NyPSJWYXJpYWJsZSB1c2VkIGluIGxhbWJkYSBleHByZXNzaW9uIHNob3VsZCBiZSBlZmZlY3RpdmVseSBmaW5hbCI+azwvZXJyb3I+ID0gbjsKKyAgICB9OworICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2xhbWJkYS9oaWdobGlnaHRpbmcvUmVjdXJzaXZlQWNjZXNzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2xhbWJkYS9oaWdobGlnaHRpbmcvUmVjdXJzaXZlQWNjZXNzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjQzMGViZAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvbGFtYmRhL2hpZ2hsaWdodGluZy9SZWN1cnNpdmVBY2Nlc3MuamF2YQpAQCAtMCwwICsxLDExIEBACitwdWJsaWMgY2xhc3MgTGFtYmRhVGVzdCB7CisgICAgT3AgbGFtYmRhX2ZpYiA9ICAobikgLT4gKG4gPCAyKSA/IDEgOiBsYW1iZGFfZmliLm9wKG4gLSAxKSArIGxhbWJkYV9maWIub3AobiAtIDIpOworCisgICAgeworICAgICAgICBPcCBsYW1iZGFfZmliID0gIChuKSAtPiAobiA8IDIpID8gMSA6IDxlcnJvciBkZXNjcj0iVmFyaWFibGUgJ2xhbWJkYV9maWInIG1pZ2h0IG5vdCBoYXZlIGJlZW4gaW5pdGlhbGl6ZWQiPmxhbWJkYV9maWI8L2Vycm9yPi5vcChuIC0gMSkgKyBsYW1iZGFfZmliLm9wKG4gLSAyKTsKKyAgICB9CisKKyAgICBpbnRlcmZhY2UgT3AgeworICAgICAgICBpbnQgb3AoaW50IG4pOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2xhbWJkYS9oaWdobGlnaHRpbmcvUmV0dXJuVHlwZUNvbXBhdGliaWxpdHkuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvbGFtYmRhL2hpZ2hsaWdodGluZy9SZXR1cm5UeXBlQ29tcGF0aWJpbGl0eS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRjYzkxNTQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2xhbWJkYS9oaWdobGlnaHRpbmcvUmV0dXJuVHlwZUNvbXBhdGliaWxpdHkuamF2YQpAQCAtMCwwICsxLDcyIEBACitjbGFzcyBSZXR1cm5UeXBlSW5jb21wYXRpYmlsaXR5IHsKKworICAgIGludGVyZmFjZSBJMTxUIGV4dGVuZHMgTnVtYmVyPiB7CisgICAgICAgIFQgbShJbnRlZ2VyIHgpOworICAgIH0KKworICAgIGludGVyZmFjZSBJMjxMIGV4dGVuZHMgU3RyaW5nPiB7CisgICAgICAgIEwgbShJbnRlZ2VyIHgpOworICAgIH0KKworICAgIGludGVyZmFjZSBJMzxLPiB7CisgICAgICAgIHZvaWQgbShJbnRlZ2VyIHgpOworICAgIH0KKworICAgIHN0YXRpYyA8UCBleHRlbmRzIE51bWJlcj4gdm9pZCBjYWxsKEkxPFA+IGkxKSB7CisgICAgICAgIGkxLm0oMSk7CisgICAgfQorCisgICAgc3RhdGljIDxQIGV4dGVuZHMgU3RyaW5nPiB2b2lkIGNhbGwoSTI8UD4gaTIpIHsKKyAgICAgICAgaTIubSgyKTsKKyAgICB9CisKKyAgICBzdGF0aWMgPFE+IHZvaWQgY2FsbChJMzxRPiBpMykgeworICAgICAgICBpMy5tKDMpOworICAgIH0KKworICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKyAgICAgICAgY2FsbChpLT4ge3JldHVybiBpO30pOworICAgIH0KK30KKworCitjbGFzcyBSZXR1cm5UeXBlQ29tcGF0aWJpbGl0eSB7CisKKyAgICBpbnRlcmZhY2UgSTE8VCBleHRlbmRzIE51bWJlcj4geworICAgICAgICBUIG0oVCB4KTsKKyAgICB9CisKKyAgICBpbnRlcmZhY2UgSTI8TCBleHRlbmRzIFN0cmluZz4geworICAgICAgICBMIG0oTCB4KTsKKyAgICB9CisKKyAgICBpbnRlcmZhY2UgSTM8Sz4geworICAgICAgICB2b2lkIG0oSyB4KTsKKyAgICB9CisKKyAgICBzdGF0aWMgPFAgZXh0ZW5kcyBOdW1iZXI+IHZvaWQgY2FsbChJMTxQPiBpMSkgeworICAgICAgICBpMS5tKG51bGwpOworICAgIH0KKworICAgIHN0YXRpYyA8UCBleHRlbmRzIFN0cmluZz4gdm9pZCBjYWxsKEkyPFA+IGkyKSB7CisgICAgICAgIGkyLm0obnVsbCk7CisgICAgfQorCisgICAgc3RhdGljIDxRPiB2b2lkIGNhbGwoSTM8UT4gaTMpIHsKKyAgICAgICAgaTMubShudWxsKTsKKyAgICB9CisKKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisgICAgICAgIDxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgbWV0aG9kICdjYWxsKDxsYW1iZGEgZXhwcmVzc2lvbj4pJyI+Y2FsbDwvZXJyb3I+KGktPiB7cmV0dXJuIGk7fSk7CisgICAgfQorfQorCitjbGFzcyBSZXR1cm5UeXBlQ2hlY2tzMSB7CisKKyAgICBpbnRlcmZhY2UgSTxLIGV4dGVuZHMgTnVtYmVyLCBWIGV4dGVuZHMgTnVtYmVyPiB7CisgICAgICAgViBtKEsgayk7CisgICAgfQorCisgICAgSTxJbnRlZ2VyLCBJbnRlZ2VyPiBhY2NlcHRlZCA9IGkgLT4geyByZXR1cm4gaTsgfTsKKyAgICBJPERvdWJsZSwgSW50ZWdlcj4gcmVqZWN0ZWQgPSA8ZXJyb3IgZGVzY3I9IkluY29tcGF0aWJsZSByZXR1cm4gdHlwZSBEb3VibGUgaW4gbGFtYmRhIGV4cHJlc3Npb24iPmkgLT4geyByZXR1cm4gaTsgfTwvZXJyb3I+OworfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9sYW1iZGEvaGlnaGxpZ2h0aW5nL1JldHVyblR5cGVDb21wYXRpYmlsaXR5MS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9sYW1iZGEvaGlnaGxpZ2h0aW5nL1JldHVyblR5cGVDb21wYXRpYmlsaXR5MS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQzNGQ2MWYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2xhbWJkYS9oaWdobGlnaHRpbmcvUmV0dXJuVHlwZUNvbXBhdGliaWxpdHkxLmphdmEKQEAgLTAsMCArMSwzMSBAQAorY2xhc3MgVGVzdCB7CisKKyAgICBpbnRlcmZhY2UgSTxBLCBCPiB7CisgICAgICAgIEIgZihBIGEpOworICAgIH0KKworICAgIGludGVyZmFjZSBJSTxBLCBCPiBleHRlbmRzIEk8QSxCPiB7IH0KKworICAgIHN0YXRpYyBjbGFzcyBGb288QT4geworICAgICAgICBib29sZWFuIGZvckFsbChmaW5hbCBJPEEsIEJvb2xlYW4+IGYpIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIFN0cmluZyBmb3JBbGwoZmluYWwgSUk8QSwgU3RyaW5nPiBmKSB7CisgICAgICAgICAgICByZXR1cm4gIiI7CisgICAgICAgIH0KKworICAgICAgICBTdHJpbmcgZm9yQWxsMihmaW5hbCBJSTxBLCBTdHJpbmc+IGYpIHsKKyAgICAgICAgICAgIHJldHVybiAiIjsKKyAgICAgICAgfQorICAgIH0KKworICAgIHZvaWQgZm9vKEZvbzxTdHJpbmc+IGFzLCBmaW5hbCBGb288Q2hhcmFjdGVyPiBhYykgeworICAgICAgICBib29sZWFuIGIxID0gYXMuZm9yQWxsKHMgLT4gYWMuZm9yQWxsKGMgLT4gZmFsc2UpKTsKKyAgICAgICAgU3RyaW5nIHMxID0gYXMuZm9yQWxsKHMgLT4gYWMuZm9yQWxsKGMgLT4gIiIpKTsKKyAgICAgICAgPGVycm9yIGRlc2NyPSJJbmNvbXBhdGlibGUgdHlwZXMuIEZvdW5kOiAnamF2YS5sYW5nLlN0cmluZycsIHJlcXVpcmVkOiAnYm9vbGVhbiciPmJvb2xlYW4gYjIgPSBhcy5mb3JBbGwocyAtPiBhYy5mb3JBbGwoYyAtPiAiIikpOzwvZXJyb3I+CisgICAgICAgIFN0cmluZyBzMiA9IGFzLmZvckFsbDIocyAtPiBhYy5mb3JBbGwyKDxlcnJvciBkZXNjcj0iSW5jb21wYXRpYmxlIHJldHVybiB0eXBlIGJvb2xlYW4gaW4gbGFtYmRhIGV4cHJlc3Npb24iPmMgLT4gZmFsc2U8L2Vycm9yPikpOworICAgICAgICBib29sZWFuIGIzID0gYXMuZm9yQWxsKChJPFN0cmluZywgQm9vbGVhbj4pcyAtPiBhYy5mb3JBbGwoKEk8Q2hhcmFjdGVyLCBCb29sZWFuPik8ZXJyb3IgZGVzY3I9IkluY29tcGF0aWJsZSByZXR1cm4gdHlwZSBTdHJpbmcgaW4gbGFtYmRhIGV4cHJlc3Npb24iPmMgLT4gIiI8L2Vycm9yPikpOworICAgICAgICBTdHJpbmcgczMgPSBhcy5mb3JBbGwoKElJPFN0cmluZywgU3RyaW5nPilzIC0+IGFjLmZvckFsbCgoSUk8Q2hhcmFjdGVyLCBTdHJpbmc+KTxlcnJvciBkZXNjcj0iSW5jb21wYXRpYmxlIHJldHVybiB0eXBlIGJvb2xlYW4gaW4gbGFtYmRhIGV4cHJlc3Npb24iPmMgLT4gZmFsc2U8L2Vycm9yPikpOworICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvbGFtYmRhL2hpZ2hsaWdodGluZy9SZXR1cm5UeXBlQ29tcGF0aWJpbGl0eUJlZm9yZVNwZWNpZmljc0NoZWNrLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2xhbWJkYS9oaWdobGlnaHRpbmcvUmV0dXJuVHlwZUNvbXBhdGliaWxpdHlCZWZvcmVTcGVjaWZpY3NDaGVjay5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcwNTgzZTkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2xhbWJkYS9oaWdobGlnaHRpbmcvUmV0dXJuVHlwZUNvbXBhdGliaWxpdHlCZWZvcmVTcGVjaWZpY3NDaGVjay5qYXZhCkBAIC0wLDAgKzEsMjUgQEAKK2NsYXNzIFggeworICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKGZpbmFsIFN0cmVhbTxTdHJpbmc+IHN0cmVhbSkgdGhyb3dzIFRocm93YWJsZSB7CisgICAgICAgIHN0cmVhbS5tYXAocyAtPiBzLnN1YnN0cmluZygiaHR0cDovLyIubGVuZ3RoKCkpKS5mb3JFYWNoKFN5c3RlbS5vdXQ6OnByaW50bG4pOworICAgIH0KK30KKworaW50ZXJmYWNlIFN0cmVhbTxUPiB7CisgICAgPFI+IFN0cmVhbTxSPiBtYXAoRnVuY3Rpb248PyBzdXBlciBULCA/IGV4dGVuZHMgUj4gbWFwcGVyKTsKKyAgICBJbnRTdHJlYW0gbWFwKEludEZ1bmN0aW9uPD8gc3VwZXIgVD4gbWFwcGVyKTsKKyAgICB2b2lkIGZvckVhY2goQmxvY2s8PyBzdXBlciBUPiBibG9jayk7Cit9CisKK2ludGVyZmFjZSBJbnRGdW5jdGlvbjxUPiBleHRlbmRzIEZ1bmN0aW9uPFQsIEludGVnZXI+IHsKKyAgICBwdWJsaWMgaW50IGFwcGx5QXNJbnQoVCB0KTsKK30KKworaW50ZXJmYWNlIEZ1bmN0aW9uPFQsIFI+IHsKKyAgICBwdWJsaWMgUiBhcHBseShUIHQpOworfQorCitpbnRlcmZhY2UgSW50U3RyZWFtIGV4dGVuZHMgQmFzZVN0cmVhbTxJbnRlZ2VyPiB7fQoraW50ZXJmYWNlIEJhc2VTdHJlYW08VD4ge30KK2ludGVyZmFjZSBCbG9jazxUPiB7CisgICAgcHVibGljIHZvaWQgYWNjZXB0KFQgdCk7Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2xhbWJkYS9oaWdobGlnaHRpbmcvUmV0dXJuVmFsdWUuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvbGFtYmRhL2hpZ2hsaWdodGluZy9SZXR1cm5WYWx1ZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM5YmE1N2YKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2xhbWJkYS9oaWdobGlnaHRpbmcvUmV0dXJuVmFsdWUuamF2YQpAQCAtMCwwICsxLDY1IEBACitjbGFzcyBUZXN0MSB7CisgIGludGVyZmFjZSBFeHRyYWN0b3I8VCwgVz4geworICAgIE9wdGlvbjxXPiB1bmFwcGx5KFQgdCk7CisgIH0KKworICBwdWJsaWMgc3RhdGljIGFic3RyYWN0IGNsYXNzIE9wdGlvbjxUPiB7CisgICAgcHJpdmF0ZSBzdGF0aWMgY2xhc3MgTm9uZTxUPiBleHRlbmRzIE9wdGlvbjxUPiB7fQorCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgT3B0aW9uIE5PTkUgPSBuZXcgTm9uZSgpOworCisgICAgcHVibGljIHN0YXRpYyA8VD4gT3B0aW9uPFQ+IG5vbmUoKSB7CisgICAgICByZXR1cm4gTk9ORTsKKyAgICB9CisKKyAgICBwdWJsaWMgc3RhdGljIDxUPiBPcHRpb248VD4gb3B0aW9uKFQgdmFsdWUpIHsKKyAgICAgIGlmICh2YWx1ZSA9PSBudWxsKSB7CisgICAgICAgIHJldHVybiBOT05FOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICB9CisgICAgfQorICB9CisKKworCisgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKyAgICBFeHRyYWN0b3I8U3RyaW5nLCBJbnRlZ2VyPiBlID0gcyAtPiB7CisgICAgICBpZiAocy5lcXVhbHMoIjEiKSkgeworICAgICAgICByZXR1cm4gT3B0aW9uLm9wdGlvbigxKTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIHJldHVybiBPcHRpb24ubm9uZSgpOworICAgICAgfQorICAgIH07CisKKyAgICBFeHRyYWN0b3I8U3RyaW5nLCBJbnRlZ2VyPiBlMSA9IDxlcnJvciBkZXNjcj0iSW5jb21wYXRpYmxlIHJldHVybiB0eXBlIE9wdGlvbjxTdHJpbmc+IGluIGxhbWJkYSBleHByZXNzaW9uIj5zIC0+IHsKKyAgICAgIGlmIChzLmVxdWFscygiMSIpKSB7CisgICAgICAgIHJldHVybiBPcHRpb24ub3B0aW9uKDEpOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgcmV0dXJuIE9wdGlvbi5vcHRpb24oIjIiKTsKKyAgICAgIH0KKyAgICB9PC9lcnJvcj47CisgIH0KK30KKworY2xhc3MgVGVzdDIgeworICBpbnRlcmZhY2UgWDxUIGV4dGVuZHMgTnVtYmVyPiB7CisgICAgVCBmb28oKTsKKyAgfQorCisgIHsKKyAgICBYPD8+IHggPSA8ZXJyb3IgZGVzY3I9Ik5vIGluc3RhbmNlIG9mIHR5cGUgWDw/PiBleGlzdHMgc28gdGhhdCBsYW1iZGEgZXhwcmVzc2lvbiBjYW4gYmUgdHlwZS1jaGVja2VkIj4oKSAtPiAxMjM8L2Vycm9yPjsKKyAgICBYPD8gZXh0ZW5kcyBOdW1iZXI+IHgxID0gKCkgLT4gMTIzOworICAgIAorICB9Cit9CisKK2NsYXNzIFRlc3QzIHsKKyAgaW50ZXJmYWNlIFg8VD4geworICAgIFQgZm9vKCk7CisgIH0KKworICB7CisgICAgWDw/PiB4ID0gKCkgLT4gMTIzOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9sYW1iZGEvaGlnaGxpZ2h0aW5nL1N0YXRpY0FjY2Vzcy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9sYW1iZGEvaGlnaGxpZ2h0aW5nL1N0YXRpY0FjY2Vzcy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE3OGNkYzQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2xhbWJkYS9oaWdobGlnaHRpbmcvU3RhdGljQWNjZXNzLmphdmEKQEAgLTAsMCArMSwxOCBAQAoraW50ZXJmYWNlIEkgeworICBpbnQgbSgpOworfQorCitjbGFzcyBYWFggeworCisgIGludCB2YXI7CisgIHN0YXRpYyBpbnQgb3VyVmFyOworCisKKyAgc3RhdGljIHZvaWQgZm9vKCkgeworICAgIEkgcyA9ICgpIC0+IDxlcnJvciBkZXNjcj0iTm9uLXN0YXRpYyBmaWVsZCAndmFyJyBjYW5ub3QgYmUgcmVmZXJlbmNlZCBmcm9tIGEgc3RhdGljIGNvbnRleHQiPnZhcjwvZXJyb3I+ICsgb3VyVmFyOworICB9CisKKyAgdm9pZCBiYXIoKSB7CisgICAgSSBzID0gKCktPnZhciArIG91clZhcjsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9sYW1iZGEvaGlnaGxpZ2h0aW5nL1R5cGVBcmdzQ29uc2lzdGVuY3kuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvbGFtYmRhL2hpZ2hsaWdodGluZy9UeXBlQXJnc0NvbnNpc3RlbmN5LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjcwZTRhYQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvbGFtYmRhL2hpZ2hsaWdodGluZy9UeXBlQXJnc0NvbnNpc3RlbmN5LmphdmEKQEAgLTAsMCArMSw3NyBAQAorY2xhc3MgVHlwZUFyZ3NDb25zaXN0ZW5jeSB7CisKKyAgICBpbnRlcmZhY2UgSTxUPiB7CisgICAgICAgIFQgbShpbnQgaSwgaW50IGopOworICAgIH0KKworICAgIHN0YXRpYyB2b2lkIGZvbyhJPEludGVnZXI+IHMpIHsgfQorCisgICAgc3RhdGljIDxYPiBJPFg+IGJhcihJPFg+IHMpIHsgcmV0dXJuIG51bGw7IH0KKworICAgIHsKKyAgICAgIEk8SW50ZWdlcj4gaTEgPSAoaSwgaikgLT4gaSArIGo7CisgICAgICBmb28oKGksIGopIC0+IGkgKyBqKTsKKyAgICAgIEk8SW50ZWdlcj4gaTIgPSBiYXIoKGksIGopIC0+IGkgKyBqKTsKKyAgICAgIDxlcnJvciBkZXNjcj0iSW5jb21wYXRpYmxlIHR5cGVzLiBGb3VuZDogJ1R5cGVBcmdzQ29uc2lzdGVuY3kuSTxqYXZhLmxhbmcuU3RyaW5nPicsIHJlcXVpcmVkOiAnVHlwZUFyZ3NDb25zaXN0ZW5jeS5JPGphdmEubGFuZy5JbnRlZ2VyPiciPkk8SW50ZWdlcj4gaTMgPSBiYXIoKGksIGopIC0+ICIiICsgaSArIGopOzwvZXJyb3I+CisgICAgfQorfQorCitjbGFzcyBUeXBlQXJnc0NvbnNpc3RlbmN5MSB7CisKKyAgICBpbnRlcmZhY2UgSTxUPiB7CisgICAgICAgIGludCBtKGludCBpLCBUIGopOworICAgIH0KKworICAgIHN0YXRpYyB2b2lkIGZvbyhJPEludGVnZXI+IHMpIHsgfQorCisgICAgc3RhdGljIDxYPiBJPFg+IGJhcihJPFg+IHMpIHsgcmV0dXJuIG51bGw7IH0KKworICAgIHsKKyAgICAgICAgSTxJbnRlZ2VyPiBpMSA9IChpLCBqKSAtPiBpICsgajsKKyAgICAgICAgZm9vKChpLCBqKSAtPiBpICsgaik7CisgICAgICAgIEk8SW50ZWdlcj4gaTIgPWJhcig8ZXJyb3IgZGVzY3I9IkN5Y2xpYyBpbmZlcmVuY2UiPihpLCBqKSAtPiBpPC9lcnJvcj4pIDsKKyAgICAgICAgSTxJbnRlZ2VyPiBpMyA9IGJhcig8ZXJyb3IgZGVzY3I9IkN5Y2xpYyBpbmZlcmVuY2UiPihpLCBqKSAtPiAiIiArIGkgKyBqPC9lcnJvcj4pOworICAgIH0KK30KKworY2xhc3MgVHlwZUFyZ3NDb25zaXN0ZW5jeTIgeworICAgIHN0YXRpYyA8VD4gSTxUPiBiYXIoSTxUPiBpKSB7cmV0dXJuIG51bGw7fQorICAgIHN0YXRpYyA8VD4gSTE8VD4gYmFyMShJMTxUPiBpKSB7cmV0dXJuIG51bGw7fQorICAgIHN0YXRpYyA8VD4gSTI8VD4gYmFyMihJMjxUPiBpKSB7cmV0dXJuIGk7fQorCisgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworICAgICAgICBJPEludGVnZXI+IGkxID0gYmFyKDxlcnJvciBkZXNjcj0iQ3ljbGljIGluZmVyZW5jZSI+eCAtPiB4PC9lcnJvcj4pOworICAgICAgICBJMTxJbnRlZ2VyPiBpMiA9IGJhcjEoPGVycm9yIGRlc2NyPSJDeWNsaWMgaW5mZXJlbmNlIj54IC0+IDE8L2Vycm9yPik7CisgICAgICAgIEkyPFN0cmluZz4gYUkyID0gYmFyMih4IC0+ICIiKTsKKyAgICAgICAgPGVycm9yIGRlc2NyPSJJbmNvbXBhdGlibGUgdHlwZXMuIEZvdW5kOiAnVHlwZUFyZ3NDb25zaXN0ZW5jeTIuSTI8amF2YS5sYW5nLlN0cmluZz4nLCByZXF1aXJlZDogJ1R5cGVBcmdzQ29uc2lzdGVuY3kyLkkyPGphdmEubGFuZy5JbnRlZ2VyPiciPkkyPEludGVnZXI+IGFJMjggPSBiYXIyKCB4LT4gIiIpOzwvZXJyb3I+CisgICAgICAgIEkyPEludGVnZXI+IGkzID0gYmFyMih4IC0+IHgpOworICAgICAgICBJMjxJbnRlZ2VyPiBpNCA9IGJhcjIoeCAtPiBmb29vSSgpKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKGk0LmZvbygyKSk7CisgICAgfQorCisgICAgc3RhdGljIDxLPiBLIGZvb28oKXtyZXR1cm4gbnVsbDt9CisgICAgc3RhdGljIGludCBmb29vSSgpe3JldHVybiAwO30KKyAgIAorICAgIGludGVyZmFjZSBJPFg+IHsKKyAgICAgICAgWCBmb28oWCB4KTsKKyAgICB9CisgICAgaW50ZXJmYWNlIEkxPFg+IHsKKworICAgICAgICBpbnQgZm9vKFggeCk7CisgICAgfQorCisgICAgaW50ZXJmYWNlIEkyPFg+IHsKKyAgICAgICAgWCBmb28oaW50IHgpOworICAgIH0KK30KKworY2xhc3MgVHlwZUFyZ3NDb25zaXN0ZW5jeTMgeworICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsgCisgICAgICAgIGRvSXQxKDEsIHggLT4gZG9JdDEoeCwgeSAtPiB4ICogeSkpOworICAgICAgICBkb0l0MSgxLCB4IC0+IHgpOworICAgICAgICBkb0l0MSgxLCB4IC0+IHggKiB4KTsKKyAgICB9CisgICAgaW50ZXJmYWNlIEYxPFJlc3VsdFR5cGUsIFAxPiB7IFJlc3VsdFR5cGUgXyhQMSBwKTsgfQorICAgIHN0YXRpYyA8VD4gVCBkb0l0MShUIGksIEYxPFQsVD4gZikgeyByZXR1cm4gZi5fKGkpO30KK30KKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9sYW1iZGEvaGlnaGxpZ2h0aW5nL1R5cGVBcmdzQ29uc2lzdGVuY3lNaXNjMS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9sYW1iZGEvaGlnaGxpZ2h0aW5nL1R5cGVBcmdzQ29uc2lzdGVuY3lNaXNjMS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYxM2JiZWIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2xhbWJkYS9oaWdobGlnaHRpbmcvVHlwZUFyZ3NDb25zaXN0ZW5jeU1pc2MxLmphdmEKQEAgLTAsMCArMSw5NCBAQAorLyoKKyAqIENvcHlyaWdodCAyMDAwLTIwMTIgSmV0QnJhaW5zIHMuci5vLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKK2NsYXNzIFRlc3QxIHsKKyAgICAKKyAgICBpbnRlcmZhY2UgSTxYPiB7CisgICAgICAgIFggZm9vKExpc3Q8U3RyaW5nPiBsaXN0KTsKKyAgICB9CisgICAgCisgICAgc3RhdGljIDxUPiBJPFQ+IGJhcihJPFQ+IGkpe3JldHVybiBpO30KKyAgICBzdGF0aWMgPFQ+IHZvaWQgYmFyMShJPFQ+IGkpe30KKyAgICBzdGF0aWMgPFQ+IHZvaWQgYmFyMihUIHQsIEk8VD4gaSl7fQorICAgIHN0YXRpYyA8VD4gdm9pZCBiYXIzKEk8VD4gaSwgVCB0KXt9CisgICAgCisgICAgeworICAgICAgICBiYXIoeCAtPiB4KTsKKyAgICAgICAgYmFyMSh4IC0+IHgpOworCisgICAgICAgIEk8T2JqZWN0PiBsTyA9ICB4LT54OworICAgICAgICBiYXIyKCIiLCBsTyk7CisKKyAgICAgICAgSTxTdHJpbmc+IGxTID0gIDxlcnJvciBkZXNjcj0iSW5jb21wYXRpYmxlIHJldHVybiB0eXBlIExpc3Q8U3RyaW5nPiBpbiBsYW1iZGEgZXhwcmVzc2lvbiI+eC0+eDwvZXJyb3I+OworICAgICAgICBiYXIyKCIiLCBsUyk7CisKKyAgICAgICAgYmFyMigiIiwgeCAtPiB4KTsKKworICAgICAgICBiYXIzKHggLT4geCwgIiIpOworCisgICAgICAgIGludCBpeGMgPSA0MjsKKyAgICAgICAgYmFyKHggLT4geworICAgICAgICAgICAgICBpZiAoaXhjID09IDIpIHJldHVybiAiYWFhIjsKKyAgICAgICAgICAgICAgcmV0dXJuIHg7CisgICAgICAgICAgIH0pOworICAgICAgICBiYXIoeCAtPiB7CisgICAgICAgICAgICAgIGlmIChpeGMgPT0gMikgcmV0dXJuIHg7CisgICAgICAgICAgICAgIHJldHVybiB4OworICAgICAgICAgICB9KTsKKyAgICB9Cit9CisKKworY2xhc3MgVGVzdDIgeworCisgICAgaW50ZXJmYWNlIEk8WD4geworICAgICAgICBYIGZvbyhMaXN0PFg+IGxpc3QpOworICAgIH0KKworICAgIHN0YXRpYyA8VD4gSTxUPiBiYXIoSTxUPiBpKXtyZXR1cm4gaTt9CisgICAgc3RhdGljIDxUPiB2b2lkIGJhcjEoSTxUPiBpKXt9CisgICAgc3RhdGljIDxUPiB2b2lkIGJhcjIoVCB0LCBJPFQ+IGkpe30KKyAgICBzdGF0aWMgPFQ+IHZvaWQgYmFyMyhJPFQ+IGksIFQgdCl7fQorCisgICAgeworICAgICAgICBiYXIoPGVycm9yIGRlc2NyPSJDeWNsaWMgaW5mZXJlbmNlIj54IC0+IHg8L2Vycm9yPik7CisgICAgICAgIGJhcjEoPGVycm9yIGRlc2NyPSJDeWNsaWMgaW5mZXJlbmNlIj54IC0+IHg8L2Vycm9yPik7CisgICAgICAgIGJhcjIoMSwgPGVycm9yIGRlc2NyPSJJbmNvbXBhdGlibGUgcmV0dXJuIHR5cGUgTGlzdDxJbnRlZ2VyPiBpbiBsYW1iZGEgZXhwcmVzc2lvbiI+eCAtPiB4PC9lcnJvcj4pOworICAgICAgICBiYXIyKCIiLCA8ZXJyb3IgZGVzY3I9IkluY29tcGF0aWJsZSByZXR1cm4gdHlwZSBMaXN0PFN0cmluZz4gaW4gbGFtYmRhIGV4cHJlc3Npb24iPnggLT4geDwvZXJyb3I+KTsKKyAgICAgICAgYmFyMyg8ZXJyb3IgZGVzY3I9IkluY29tcGF0aWJsZSByZXR1cm4gdHlwZSBMaXN0PFN0cmluZz4gaW4gbGFtYmRhIGV4cHJlc3Npb24iPnggLT4geDwvZXJyb3I+LCAiIik7CisgICAgfQorfQorCitjbGFzcyBUZXN0MyB7CisKKyAgICBpbnRlcmZhY2UgSTxYPiB7CisgICAgICAgIExpc3Q8WD4gZm9vKExpc3Q8WD4gbGlzdCk7CisgICAgfQorCisgICAgc3RhdGljIDxUPiBJPFQ+IGJhcihJPFQ+IGkpe3JldHVybiBpO30KKyAgICBzdGF0aWMgPFQ+IHZvaWQgYmFyMShJPFQ+IGkpe30KKyAgICBzdGF0aWMgPFQ+IHZvaWQgYmFyMihUIHQsIEk8VD4gaSl7fQorICAgIHN0YXRpYyA8VD4gdm9pZCBiYXIzKEk8VD4gaSwgVCB0KXt9CisKKyAgICB7CisgICAgICAgIGJhcig8ZXJyb3IgZGVzY3I9IkN5Y2xpYyBpbmZlcmVuY2UiPnggLT4geDwvZXJyb3I+KTsKKyAgICAgICAgYmFyMSg8ZXJyb3IgZGVzY3I9IkN5Y2xpYyBpbmZlcmVuY2UiPnggLT4geDwvZXJyb3I+KTsKKyAgICAgICAgYmFyMigxLCB4IC0+IHgpOworICAgICAgICBiYXIyKCIiLCB4IC0+IHgpOworCisgICAgICAgIGJhcjMoeCAtPiB4LCAiIik7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9sYW1iZGEvaGlnaGxpZ2h0aW5nL1R5cGVBcmdzQ29uc2lzdGVuY3lNaXNjMi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9sYW1iZGEvaGlnaGxpZ2h0aW5nL1R5cGVBcmdzQ29uc2lzdGVuY3lNaXNjMi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE1NDQzNDgKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2xhbWJkYS9oaWdobGlnaHRpbmcvVHlwZUFyZ3NDb25zaXN0ZW5jeU1pc2MyLmphdmEKQEAgLTAsMCArMSw1OCBAQAorLyoKKyAqIENvcHlyaWdodCAyMDAwLTIwMTIgSmV0QnJhaW5zIHMuci5vLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KK2ltcG9ydCBqYXZhLnV0aWwuKjsKK2NsYXNzIFRlc3QxIHsKKyAgeworICAgIENvbXBhcmFibGU8PyBleHRlbmRzIEludGVnZXI+IGMgPSAoSW50ZWdlciBvKS0+eworICAgICAgcmV0dXJuIDA7CisgICAgfTsKKyAgICAKKyAgICBDb21wYXJhYmxlPD8gc3VwZXIgSW50ZWdlcj4gYzEgPSAoSW50ZWdlciBvKS0+eworICAgICAgcmV0dXJuIDA7CisgICAgfTsKKyAgfQorfQorCisKK2NsYXNzIFRlc3QyPFU+IHsKKyAgaW50ZXJmYWNlIEk8VD4geworICAgIHZvaWQgbShUIHQpOworICB9CisgIHByaXZhdGUgdm9pZCBmb28oSTw/IHN1cGVyIFU+IGkxKSB7fQorCisgIHByaXZhdGUgdm9pZCBiYXIoKSB7CisgICAgZm9vKChVIHUpIC0+IHt9KTsKKyAgICBmb28odSAtPiB7fSk7CisgIH0KKworICBpbnRlcmZhY2UgSTE8VD4ge30KKyAgcHJpdmF0ZSA8QSBleHRlbmRzIEkxPD8gc3VwZXIgVT4+IEEgYmFyKEEgYSkgeworICAgIGZvbygoVSB1KS0+e30pOworICAgIGZvbyh1LT57fSk7CisgICAgcmV0dXJuIGE7CisgIH0KK30KKworY2xhc3MgVGVzdE5ld0V4cHJlc3Npb248RT4geworICAgIHB1YmxpYyBUZXN0TmV3RXhwcmVzc2lvbihDb21wYXJhdG9yPD8gc3VwZXIgRT4gY29tcGFyYXRvcikgeworICAgICAgICAvL3NvbWUgY29kZQorICAgIH0KKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisgICAgICBUZXN0TmV3RXhwcmVzc2lvbjxTdHJpbmc+IHN0cnMgPSBuZXcgVGVzdE5ld0V4cHJlc3Npb248U3RyaW5nPigobzEsIG8yKSAtPiB7CisgICAgICAgICAgICByZXR1cm4gbzIuY29tcGFyZVRvSWdub3JlQ2FzZShvMSk7CisgICAgICAgIH0pOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2xhbWJkYS9oaWdobGlnaHRpbmcvVHlwZUFyZ3NDb25zaXN0ZW5jeVdpdGhvdXRQYXJhbXMuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvbGFtYmRhL2hpZ2hsaWdodGluZy9UeXBlQXJnc0NvbnNpc3RlbmN5V2l0aG91dFBhcmFtcy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVhZTEwYmYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2xhbWJkYS9oaWdobGlnaHRpbmcvVHlwZUFyZ3NDb25zaXN0ZW5jeVdpdGhvdXRQYXJhbXMuamF2YQpAQCAtMCwwICsxLDQ5IEBACitpbXBvcnQgamF2YS5sYW5nLlN0cmluZzsKK2ltcG9ydCBqYXZhLnV0aWwuKjsKK2NsYXNzIFRlc3Q0IHsKKyAgIGludGVyZmFjZSBJPEs+IHsKKyAgICAgICBMaXN0PEs+IGZvbygpOworICAgfQorICAgIAorICAgIHN0YXRpYyA8VD4gdm9pZCBiYXIoSTxUPiBpKXt9CisgICAgCisgICAgeworICAgICAgICBiYXIoKCkgLT4gbnVsbCk7CisgICAgfQorfQorCitjbGFzcyBUZXN0NSB7CisgICAgaW50ZXJmYWNlIEk8Sz4geworICAgICAgICB2b2lkIGZvbyhLIGspOworICAgIH0KKworICAgIHN0YXRpYyA8VD4gdm9pZCBiYXIoSTxUPiBpKXt9CisKKyAgICB7CisgICAgICAgIGJhcig8ZXJyb3IgZGVzY3I9IkluY29tcGF0aWJsZSBwYXJhbWV0ZXIgdHlwZXMgaW4gbGFtYmRhIGV4cHJlc3Npb24iPigpIC0+IG51bGw8L2Vycm9yPik7CisgICAgfQorfQorY2xhc3MgVGVzdDYgeworICAgIGludGVyZmFjZSBJPEs+IHsKKyAgICAgICAgdm9pZCBmb28oKTsKKyAgICB9CisKKyAgICBzdGF0aWMgPFQ+IHZvaWQgYmFyKEk8VD4gaSl7fQorCisgICAgeworICAgICAgICBiYXIoKCkgLT4gbnVsbCk7CisgICAgICAgIGJhcigoKSAtPiB7fSk7CisgICAgfQorfQorCitjbGFzcyBUZXN0NyB7CisgIGludGVyZmFjZSBJPEs+IHsKKyAgICB2b2lkIGZvbyhTdHJpbmcgcyk7CisgIH0KKyAgCisgIHN0YXRpYyA8VD4gdm9pZCBiYXIoSTxUPiBpKXt9CisKKyAgeworICAgICBiYXIoeCAtPiB7fSk7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2xhbWJkYS9oaWdobGlnaHRpbmcvVW5oYW5kbGVkRXhjZXB0aW9uLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2xhbWJkYS9oaWdobGlnaHRpbmcvVW5oYW5kbGVkRXhjZXB0aW9uLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWZlZGYyNgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvbGFtYmRhL2hpZ2hsaWdodGluZy9VbmhhbmRsZWRFeGNlcHRpb24uamF2YQpAQCAtMCwwICsxLDEyIEBACitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKKworaW50ZXJmYWNlIENhbGxhYmxlPFY+IHsKKyAgICBWIGNhbGwoKSB0aHJvd3MgRXhjZXB0aW9uOworfQorCitjbGFzcyBUZXN0MiB7CisgICAgc3RhdGljIDxWPiB2b2lkIG0oQ2FsbGFibGU8Vj4gYyl7fQorICAgIHsKKyAgICAgICAgbSgoKSAtPiB7dGhyb3cgbmV3IElPRXhjZXB0aW9uKCk7fSk7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9sYW1iZGEvaGlnaGxpZ2h0aW5nL1VucmVhY2hhYmxlU3RhdGVtZW50LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2xhbWJkYS9oaWdobGlnaHRpbmcvVW5yZWFjaGFibGVTdGF0ZW1lbnQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44Y2U4NjQ0MAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvbGFtYmRhL2hpZ2hsaWdodGluZy9VbnJlYWNoYWJsZVN0YXRlbWVudC5qYXZhCkBAIC0wLDAgKzEsOSBAQAorY2xhc3MgVGVzdDEgeworICAgIHsKKyAgICAgIENvbXBhcmFibGU8U3RyaW5nPiBjID0gbyAtPiB7CisgICAgICAgIGlmIChvID09IG51bGwpIHJldHVybiAxOworICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIDxlcnJvciBkZXNjcj0iVW5yZWFjaGFibGUgc3RhdGVtZW50Ij5TeXN0ZW0ub3V0LnByaW50bG4oIkhlbGxvIik7PC9lcnJvcj4KKyAgICAgIH07CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvbGFtYmRhL2hpZ2hsaWdodGluZy9Vc2VJbmNvbXBsZXRlUGFyZW50U3Vic3RpdHV0b3IuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvbGFtYmRhL2hpZ2hsaWdodGluZy9Vc2VJbmNvbXBsZXRlUGFyZW50U3Vic3RpdHV0b3IuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NGFjOGFmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9sYW1iZGEvaGlnaGxpZ2h0aW5nL1VzZUluY29tcGxldGVQYXJlbnRTdWJzdGl0dXRvci5qYXZhCkBAIC0wLDAgKzEsMjUgQEAKK2ltcG9ydCBqYXZhLnV0aWwuY29uY3VycmVudC5hdG9taWMuQXRvbWljSW50ZWdlcjsKKworY2xhc3MgVGVzdCB7CisgIHN0YXRpYyBjbGFzcyBMaXN0PFQ+IHsKKyAgICBwdWJsaWMgU3RyZWFtPFQ+IHN0cmVhbSgpIHsKKyAgICAgIHJldHVybiBudWxsOworICAgIH0KKyAgfQorCisgIGludGVyZmFjZSBJbnRGdW5jdGlvbjxUPiB7CisgICAgICBwdWJsaWMgaW50IGFwcGx5QXNJbnQoVCB0KTsKKyAgfQorCisgIHN0YXRpYyBjbGFzcyBTdHJlYW08RT4geworICAgIHB1YmxpYyBTdHJlYW0gbWFwKEludEZ1bmN0aW9uPD8gc3VwZXIgRT4gbWFwcGVyKSB7CisgICAgICByZXR1cm4gbnVsbDsKKyAgICB9CisgIH0KKworICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihMaXN0PEF0b21pY0ludGVnZXI+IGxpc3QpIHsKKyAgICBsaXN0LnN0cmVhbSgpLm1hcChhdG9taWMgLT4gYXRvbWljLmdldCgpKTsKKyAgfQorfQorCisKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvbGFtYmRhL2hpZ2hsaWdodGluZy9WYXJpYWJsZUluaXRpYWxpemF0aW9uLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2xhbWJkYS9oaWdobGlnaHRpbmcvVmFyaWFibGVJbml0aWFsaXphdGlvbi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY2YTFmNmIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2xhbWJkYS9oaWdobGlnaHRpbmcvVmFyaWFibGVJbml0aWFsaXphdGlvbi5qYXZhCkBAIC0wLDAgKzEsNSBAQAorY2xhc3MgVGVzdDEgeworICAgIHsKKyAgICAgICAgUnVubmFibGUgciA9ICgpIC0+IHsgPGVycm9yIGRlc2NyPSJWYXJpYWJsZSAncicgbWlnaHQgbm90IGhhdmUgYmVlbiBpbml0aWFsaXplZCI+cjwvZXJyb3I+LnJ1bigpOyB9OworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2xhbWJkYS9oaWdobGlnaHRpbmcvV2lsZGNhcmRCb3VuZHMuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvbGFtYmRhL2hpZ2hsaWdodGluZy9XaWxkY2FyZEJvdW5kcy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIxOGRiYjMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2xhbWJkYS9oaWdobGlnaHRpbmcvV2lsZGNhcmRCb3VuZHMuamF2YQpAQCAtMCwwICsxLDIwIEBACitjbGFzcyBXaWxkY2FyZEJvdW5kcyB7CisKKyAgICBpbnRlcmZhY2UgSTxUPiB7CisgICAgICAgIFQgZm9vKFQgYSwgVCBiKTsKKyAgICB9CisKKyAgICB2b2lkIG0xKEk8PyBleHRlbmRzIFN0cmluZz4gZjEpIHt9CisgICAgdm9pZCBtMihJPD8gc3VwZXIgU3RyaW5nPiBmMikge30KKyAgICB2b2lkIG0zKEk8Pz4gZjMpIHt9CisKKyAgICBJPD8gZXh0ZW5kcyBTdHJpbmc+IGYxID0gKGEsIGIpIC0+IGE7CisgICAgSTw/IHN1cGVyIFN0cmluZz4gZjIgPSAoYSwgYikgLT4gYTsKKyAgICBJPD8+IGYzID0gKGEsIGIpIC0+IGE7CisKKyAgICB7CisgICAgICAgIG0xKChhLCBiKSAtPiBhKTsKKyAgICAgICAgbTIoKGEsIGIpIC0+IGEpOworICAgICAgICBtMygoYSwgYikgLT4gYSk7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9sYW1iZGEvaW5mZXJlbmNlL0Z1bmN0aW9uYWxJbnRlcmZhY2VTaG91bGRIYXZlRXhhY3RseU9uZU1ldGhvZC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9sYW1iZGEvaW5mZXJlbmNlL0Z1bmN0aW9uYWxJbnRlcmZhY2VTaG91bGRIYXZlRXhhY3RseU9uZU1ldGhvZC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ0MDcwMTcKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2xhbWJkYS9pbmZlcmVuY2UvRnVuY3Rpb25hbEludGVyZmFjZVNob3VsZEhhdmVFeGFjdGx5T25lTWV0aG9kLmphdmEKQEAgLTAsMCArMSw0OCBAQAorcHVibGljIGNsYXNzIE5vdEFGSVQgeworICBzdGF0aWMgY2xhc3MgRmlyc3QgeworICAgIHN0YXRpYyBpbnRlcmZhY2UgQTxUPiB7CisgICAgICB2b2lkIGZvbzEoKTsKKyAgICAgIHZvaWQgZm9vMigpOworICAgIH0KKyAgICBzdGF0aWMgPFQ+IHZvaWQgZm9vKEE8VD4gYSkgeworICAgIH0KKworICAgIHZvaWQgYmFyKCkgeworICAgICAgICBmb28oPGVycm9yIGRlc2NyPSJNdWx0aXBsZSBub24tb3ZlcnJpZGluZyBhYnN0cmFjdCBtZXRob2RzIGZvdW5kIj4oKSAtPnt9PC9lcnJvcj4pOworICAgIH0KKyAgfQorCisgIHN0YXRpYyBjbGFzcyBXaXRoSW5oZXJpdGFuY2UgeworICAgIHN0YXRpYyBpbnRlcmZhY2UgQTxUPiB7CisgICAgICB2b2lkIGZvbzEoKTsKKyAgICB9CisKKyAgICBzdGF0aWMgaW50ZXJmYWNlIEI8TT4gZXh0ZW5kcyBBPE0+IHsKKyAgICAgIHZvaWQgZm9vMigpOworICAgIH0KKworICAgIHN0YXRpYyA8VD4gdm9pZCBmb28oQjxUPiBhKSB7CisgICAgfQorCisgICAgdm9pZCBiYXIoKSB7CisgICAgICBmb28oPGVycm9yIGRlc2NyPSJNdWx0aXBsZSBub24tb3ZlcnJpZGluZyBhYnN0cmFjdCBtZXRob2RzIGZvdW5kIj4oKS0+e308L2Vycm9yPik7CisgICAgfQorICB9CisKKyAgc3RhdGljIGNsYXNzIFdpdGhJbmhlcml0YW5jZU92ZXJyaWRlU2FtZU1ldGhvZCB7CisgICAgc3RhdGljIGludGVyZmFjZSBBPFQ+IHsKKyAgICAgIHZvaWQgZm9vMSgpOworICAgIH0KKworICAgIHN0YXRpYyBpbnRlcmZhY2UgQjxNPiBleHRlbmRzIEE8TT4geworICAgICAgdm9pZCBmb28xKCk7CisgICAgfQorCisgICAgc3RhdGljIDxUPiB2b2lkIGZvbyhCPFQ+IGEpIHsKKyAgICB9CisKKyAgICB2b2lkIGJhcigpIHsKKyAgICAgIGZvbygoKS0+e30pOworICAgIH0KKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvbGFtYmRhL2luZmVyZW5jZS9TaW1wbGVDeWNsaWNJbmZlcmVuY2UuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvbGFtYmRhL2luZmVyZW5jZS9TaW1wbGVDeWNsaWNJbmZlcmVuY2UuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMzQ0NjY1Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9sYW1iZGEvaW5mZXJlbmNlL1NpbXBsZUN5Y2xpY0luZmVyZW5jZS5qYXZhCkBAIC0wLDAgKzEsMjAgQEAKK2NsYXNzIE5vTGFtYmRhIHsKKyAgICBpbnRlcmZhY2UgSTxUPiB7CisgICAgICAgIHZvaWQgZihUIHQpOworICAgIH0KKworICAgIDxaPiB2b2lkIGJhcihJPFo+IGl6KSB7CisgICAgfQorCisgICAgdm9pZCBiYXp6KCkgeworICAgICAgICBiYXIobnVsbCk7CisgICAgICAgIGJhcig8ZXJyb3IgZGVzY3I9IkN5Y2xpYyBpbmZlcmVuY2UiPih6KS0+IHtTeXN0ZW0ub3V0LnByaW50bG4oKTt9PC9lcnJvcj4pOworICAgIH0KKyAgCisgICAgc3RhdGljIDxUPiBUIGlkKFQgaTIpIHtyZXR1cm4gaTI7fQorCisgICAgeworICAgICAgIGlkKDxlcnJvciBkZXNjcj0iQ3ljbGljIGluZmVyZW5jZSI+KCkgLT4ge1N5c3RlbS5vdXQucHJpbnRsbigiaGkiKTt9PC9lcnJvcj4pOworICAgICAgIE5vTGFtYmRhLjxSdW5uYWJsZT5pZCgoKSAtPiB7U3lzdGVtLm91dC5wcmludGxuKCJoaSIpO30pOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2xhbWJkYS9tZXRob2RSZWYvQWNjZXNzTW9kaWZpZXJzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2xhbWJkYS9tZXRob2RSZWYvQWNjZXNzTW9kaWZpZXJzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDBiNjk0OAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvbGFtYmRhL21ldGhvZFJlZi9BY2Nlc3NNb2RpZmllcnMuamF2YQpAQCAtMCwwICsxLDc1IEBACitjbGFzcyBNeVRlc3QgeworICAgIAorICAgIHByaXZhdGUgc3RhdGljIGNsYXNzIEZvbyB7CisgICAgICAgIHN0YXRpYyBpbnQgZm9vKGludCBpKSB7IHJldHVybiBpOyB9CisgICAgfQorICAgIAorICAgIHN0YXRpYyBGb28gZm9vID0gbmV3IEZvbygpOworCisgICAgc3RhdGljIHZvaWQgZm9vKFN0cmluZyBzKSB7fQorICAgIAorICAgIHN0YXRpYyB2b2lkIGJhcihJbnRlZ2VyIGksIE51bWJlciBuKSB7fQorICAgIHN0YXRpYyB2b2lkIGJhcihOdW1iZXIgbiwgSW50ZWdlciBpKSB7fQorICAgIAorICAgIHZvaWQgYmF6KGludCBpKSB7fQorfQorCitjbGFzcyBBbGllblRlc3QgeworICAgIAorICAgIGludGVyZmFjZSBJSW50IHsKKyAgICAgICAgaW50IF8oaW50IGkpOworICAgIH0KKyAgICAKKyAgICBpbnRlcmZhY2UgSUludEludCB7CisgICAgICAgIGludCBfKEludGVnZXIgaTEsIEludGVnZXIgaTIpOworICAgIH0KKworICAgIHN0YXRpYyB7CisgICAgICAgIDxlcnJvciBkZXNjcj0iSW5jb21wYXRpYmxlIHR5cGVzLiBGb3VuZDogJzxtZXRob2QgcmVmZXJlbmNlPicsIHJlcXVpcmVkOiAnQWxpZW5UZXN0LklJbnQnIj5JSW50IGkxID0gTXlUZXN0OjphYnJhY2FkYWJyYTs8L2Vycm9yPgorICAgICAgICA8ZXJyb3IgZGVzY3I9IkluY29tcGF0aWJsZSB0eXBlcy4gRm91bmQ6ICc8bWV0aG9kIHJlZmVyZW5jZT4nLCByZXF1aXJlZDogJ0FsaWVuVGVzdC5JSW50JyI+SUludCBpMiA9IE15VGVzdDo6Zm9vOzwvZXJyb3I+CisgICAgICAgIDxlcnJvciBkZXNjcj0iSW5jb21wYXRpYmxlIHR5cGVzLiBGb3VuZDogJzxtZXRob2QgcmVmZXJlbmNlPicsIHJlcXVpcmVkOiAnQWxpZW5UZXN0LklJbnQnIj5JSW50IGkzID0gTXlUZXN0OjpiYXI7PC9lcnJvcj4KKyAgICAgICAgPGVycm9yIGRlc2NyPSJJbmNvbXBhdGlibGUgdHlwZXMuIEZvdW5kOiAnPG1ldGhvZCByZWZlcmVuY2U+JywgcmVxdWlyZWQ6ICdBbGllblRlc3QuSUludEludCciPklJbnRJbnQgaTQgPSBNeVRlc3Q6OmJhcjs8L2Vycm9yPgorICAgICAgICA8ZXJyb3IgZGVzY3I9IkluY29tcGF0aWJsZSB0eXBlcy4gRm91bmQ6ICc8bWV0aG9kIHJlZmVyZW5jZT4nLCByZXF1aXJlZDogJ0FsaWVuVGVzdC5JSW50JyI+SUludCBpNSA9IE15VGVzdDo6YmF6OzwvZXJyb3I+CisgICAgICAgIElJbnQgaTYgPSA8ZXJyb3IgZGVzY3I9Iidmb28oaW50KScgaXMgbm90IHB1YmxpYyBpbiAnTXlUZXN0LkZvbycuIENhbm5vdCBiZSBhY2Nlc3NlZCBmcm9tIG91dHNpZGUgcGFja2FnZSI+TXlUZXN0LmZvbzo6Zm9vPC9lcnJvcj47CisgICAgICAgIElJbnQgaTcgPSBNeVRlc3QuPGVycm9yIGRlc2NyPSInTXlUZXN0LkZvbycgaGFzIHByaXZhdGUgYWNjZXNzIGluICdNeVRlc3QnIj5Gb288L2Vycm9yPjo6Zm9vOworICAgIH0KK30KKworCitjbGFzcyBNeVRlc3QxIHsKKyAgICAKKyAgICBpbnRlcmZhY2UgSTEgeworICAgICAgICBpbnRbXSBfKCk7CisgICAgfQorICAgIAorICAgIGludGVyZmFjZSBJMiB7CisgICAgICAgIE9iamVjdCBfKCk7CisgICAgfQorICAgIAorICAgIGludGVyZmFjZSBJMyB7CisgICAgICAgIGNoYXJbXSBfKCk7CisgICAgfQorICAgIAorICAgIGludGVyZmFjZSBJNCB7CisKKyAgICAgICAgYm9vbGVhbiAgXygpOworICAgIH0KKworICAgIGludGVyZmFjZSBJNSB7CisgICAgICAgIENsYXNzPD8gZXh0ZW5kcyBNeVRlc3QxPiBfKCk7CisgICAgfQorCisgICAgaW50ZXJmYWNlIEk2IHsKKyAgICAgICAgQ2xhc3M8TXlUZXN0MT4gXygpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGZvbyhPYmplY3RbXSBhcnIpIHsKKyAgICAgICAgPGVycm9yIGRlc2NyPSJJbmNvbXBhdGlibGUgdHlwZXMuIEZvdW5kOiAnPG1ldGhvZCByZWZlcmVuY2U+JywgcmVxdWlyZWQ6ICdNeVRlc3QxLkkxJyI+STEgYzEgPSBhcnIgOjogY2xvbmU7PC9lcnJvcj4KKyAgICAgICAgSTIgYzIgPSBhcnIgOjogY2xvbmU7CisgICAgICAgIDxlcnJvciBkZXNjcj0iSW5jb21wYXRpYmxlIHR5cGVzLiBGb3VuZDogJzxtZXRob2QgcmVmZXJlbmNlPicsIHJlcXVpcmVkOiAnTXlUZXN0MS5JMyciPkkzIGMzID0gYXJyOjpjbG9uZTs8L2Vycm9yPgorICAgICAgICA8ZXJyb3IgZGVzY3I9IkluY29tcGF0aWJsZSB0eXBlcy4gRm91bmQ6ICc8bWV0aG9kIHJlZmVyZW5jZT4nLCByZXF1aXJlZDogJ015VGVzdDEuSTQnIj5JNCBjNSA9IGFycjo6Y2xvbmU7PC9lcnJvcj4KKworICAgICAgICA8ZXJyb3IgZGVzY3I9IkluY29tcGF0aWJsZSB0eXBlcy4gRm91bmQ6ICc8bWV0aG9kIHJlZmVyZW5jZT4nLCByZXF1aXJlZDogJ015VGVzdDEuSTUnIj5JNSBjNCA9IHRoaXM6OmdldENsYXNzOzwvZXJyb3I+CisgICAgICAgIDxlcnJvciBkZXNjcj0iSW5jb21wYXRpYmxlIHR5cGVzLiBGb3VuZDogJzxtZXRob2QgcmVmZXJlbmNlPicsIHJlcXVpcmVkOiAnTXlUZXN0MS5JNiciPkk2IGM2ID0gdGhpczo6Z2V0Q2xhc3M7PC9lcnJvcj4KKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2xhbWJkYS9tZXRob2RSZWYvQW1iaWd1aXR5LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2xhbWJkYS9tZXRob2RSZWYvQW1iaWd1aXR5LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2ZlMTM5NQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvbGFtYmRhL21ldGhvZFJlZi9BbWJpZ3VpdHkuamF2YQpAQCAtMCwwICsxLDE4NSBAQAorcGFja2FnZSB0b2RlbGV0ZTsKKworLyoqCisgKiBDcmVhdGVkIHdpdGggSW50ZWxsaUogSURFQS4KKyAqIFVzZXI6IEFubmEuS296bG92YQorICogRGF0ZTogOS8yNi8xMgorICogVGltZTogMToxOCBQTQorICogVG8gY2hhbmdlIHRoaXMgdGVtcGxhdGUgdXNlIEZpbGUgfCBTZXR0aW5ncyB8IEZpbGUgVGVtcGxhdGVzLgorICovCitjbGFzcyBNeVRlc3QgeworICAgIGludGVyZmFjZSBCYXIxIHsKKyAgICAgICAgaW50IF8oU3RyaW5nIHMpOworICAgIH0KKworICAgIGludGVyZmFjZSBCYXIyIHsKKyAgICAgICAgaW50IF8oaW50IHMpOworICAgIH0KKworICAgIHZvaWQgYmFyKEJhcjEgYjEpe30KKyAgICB2b2lkIGJhcihCYXIyIGIxKXt9CisKKyAgICBzdGF0aWMgaW50IGZvbyhpbnQgaSkgeworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBzdGF0aWMgaW50IGZvbyhTdHJpbmcgaSkgeworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICB7CisgICAgICAgIEJhcjEgYjEgPSBNeVRlc3QgOjogZm9vOworICAgICAgICBiYXI8ZXJyb3IgZGVzY3I9IkFtYmlndW91cyBtZXRob2QgY2FsbDogYm90aCAnTXlUZXN0LmJhcihCYXIxKScgYW5kICdNeVRlc3QuYmFyKEJhcjIpJyBtYXRjaCI+KE15VGVzdCA6OiBmb28pPC9lcnJvcj47CisgICAgfQorfQorCitjbGFzcyBNeVRlc3QxIHsKKyAgICBpbnRlcmZhY2UgQmFyMSB7CisgICAgICAgIGludCBfKFN0cmluZyBzKTsKKyAgICB9CisKKyAgICBpbnRlcmZhY2UgQmFyMiB7CisgICAgICAgIGludCBfKGludCBzKTsKKyAgICB9CisKKyAgICAvL3ZvaWQgYmFyKEJhcjEgYjEpe30KKyAgICB2b2lkIGJhcihCYXIyIGIxKXt9CisKKyAgICBzdGF0aWMgaW50IGZvbyhpbnQgaSkgeworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBzdGF0aWMgaW50IGZvbyhTdHJpbmcgaSkgeworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICB7CisgICAgICAgIDxlcnJvciBkZXNjcj0iSW5jb21wYXRpYmxlIHR5cGVzLiBGb3VuZDogJzxtZXRob2QgcmVmZXJlbmNlPicsIHJlcXVpcmVkOiAndG9kZWxldGUuTXlUZXN0MS5CYXIxJyI+QmFyMSBiMSA9IE15VGVzdDIgOjogZm9vOzwvZXJyb3I+CisgICAgICAgIGJhcihNeVRlc3QxIDo6IGZvbyk7CisgICAgfQorfQorCitjbGFzcyBNeVRlc3QyIHsKKyAgICBpbnRlcmZhY2UgQmFyMSB7CisgICAgICAgIGludCBfKFN0cmluZyBzKTsKKyAgICB9CisKKyAgICBpbnRlcmZhY2UgQmFyMiB7CisgICAgICAgIGludCBfKGludCBzKTsKKyAgICB9CisKKyAgICB2b2lkIGJhcihCYXIxIGIxKXt9CisgICAgdm9pZCBiYXIoQmFyMiBiMSl7fQorCisgICAgc3RhdGljIGludCBmb28oaW50IGkpIHsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgLypzdGF0aWMgaW50IGZvbyhTdHJpbmcgaSkgeworICAgICAgICByZXR1cm4gMDsKKyAgICB9Ki8KKworICAgIHsKKyAgICAgICAgPGVycm9yIGRlc2NyPSJJbmNvbXBhdGlibGUgdHlwZXMuIEZvdW5kOiAnPG1ldGhvZCByZWZlcmVuY2U+JywgcmVxdWlyZWQ6ICd0b2RlbGV0ZS5NeVRlc3QyLkJhcjEnIj5CYXIxIGIxID0gTXlUZXN0MiA6OiBmb287PC9lcnJvcj4KKyAgICAgICAgYmFyKE15VGVzdDIgOjogZm9vKTsKKyAgICB9Cit9CisKK2NsYXNzIE15VGVzdDMgeworICAgIGludGVyZmFjZSBCYXIxIHsKKyAgICAgICAgaW50IF8oU3RyaW5nIHMpOworICAgIH0KKworICAgIGludGVyZmFjZSBCYXIyIHsKKyAgICAgICAgaW50IF8oaW50IHMpOworICAgIH0KKworICAgIC8vdm9pZCBiYXIoQmFyMSBiMSl7fQorICAgIHZvaWQgYmFyKEJhcjIgYjEpe30KKworICAgIC8qc3RhdGljIGludCBmb28oaW50IGkpIHsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfSovCisKKyAgICBzdGF0aWMgaW50IGZvbyhTdHJpbmcgaSkgeworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICB7CisgICAgICAgIDxlcnJvciBkZXNjcj0iSW5jb21wYXRpYmxlIHR5cGVzLiBGb3VuZDogJzxtZXRob2QgcmVmZXJlbmNlPicsIHJlcXVpcmVkOiAndG9kZWxldGUuTXlUZXN0My5CYXIxJyI+QmFyMSBiMSA9IE15VGVzdDIgOjogZm9vOzwvZXJyb3I+CisgICAgICAgIGJhcjxlcnJvciBkZXNjcj0iJ2Jhcih0b2RlbGV0ZS5NeVRlc3QzLkJhcjIpJyBpbiAndG9kZWxldGUuTXlUZXN0MycgY2Fubm90IGJlIGFwcGxpZWQgdG8gJyg8bWV0aG9kIHJlZmVyZW5jZT4pJyI+KE15VGVzdDMgOjogZm9vKTwvZXJyb3I+OworICAgIH0KK30KKworCitjbGFzcyBNeVRlc3Q0IHsKKyAgICBpbnRlcmZhY2UgQmFyMTxUPiB7CisgICAgICAgIGludCBfKFQgcyk7CisgICAgfQorCisKKyAgICB2b2lkIGJhcihCYXIxIGIxKXt9CisKKyAgICBzdGF0aWMgaW50IGZvbyhpbnQgaSkgeworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBzdGF0aWMgaW50IGZvbyhTdHJpbmcgaSkgeworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICB7CisgICAgICAgICBiYXI8ZXJyb3IgZGVzY3I9IidiYXIodG9kZWxldGUuTXlUZXN0NC5CYXIxKScgaW4gJ3RvZGVsZXRlLk15VGVzdDQnIGNhbm5vdCBiZSBhcHBsaWVkIHRvICcoPG1ldGhvZCByZWZlcmVuY2U+KSciPihNeVRlc3Q0OjogZm9vKTwvZXJyb3I+OworICAgIH0KK30KKworY2xhc3MgTXlUZXN0NSB7CisgICAgaW50ZXJmYWNlIEJhcjE8VD4geworICAgICAgICBpbnQgXyhUIHMpOworICAgIH0KKworCisgICAgc3RhdGljIDxUMT4gdm9pZCBiYXIoQmFyMTxUMT4gYjEpe30KKworICAgIHN0YXRpYyA8Sz4gaW50IGZvbyhLIGspIHsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgc3RhdGljIGludCBmb28oU3RyaW5nIGkpIHsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgeworICAgICAgICAgLy90b2RvIGFtYmlndWl0eSBydWxlcyBjaGVja2VkIE15VGVzdDUuPFN0cmluZz5iYXIoTXlUZXN0NTo6Zm9vKTsKKyAgICB9Cit9CisKK3B1YmxpYyBjbGFzcyBNeVRlc3Q2IHsKKyAgICBpbnRlcmZhY2UgSSB7CisgICAgICAgdm9pZCBfKEludGVnZXIgaSk7CisgICAgfQorCisgICAgc3RhdGljIHZvaWQgZm9vKE51bWJlciBpKSB7fQorICAgIHN0YXRpYyB2b2lkIGZvbyhJbnRlZ2VyIGksIFN0cmluZyBzKSB7fQorICAgIHN0YXRpYyB2b2lkIGZvbyhJbnRlZ2VyIGQpIHt9CisKKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisgICAgICAgIEkgcyA9IE15VGVzdDY6OmZvbzsKKyAgICAgICAgcy5fKDEpOworICAgIH0KK30KKworcHVibGljIGNsYXNzIE15VGVzdDcgeworICAgIGludGVyZmFjZSBJIHsKKyAgICAgICB2b2lkIF8oTnVtYmVyIGkpOworICAgIH0KKworICAgIHN0YXRpYyB2b2lkIGZvbyhOdW1iZXIgaSkge30KKyAgICBzdGF0aWMgdm9pZCBmb28oSW50ZWdlciBpLCBTdHJpbmcgcykge30KKyAgICBzdGF0aWMgdm9pZCBmb28oSW50ZWdlciBkKSB7fQorCisgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworICAgICAgICBJIHMgPSBNeVRlc3Q3Ojpmb287CisgICAgICAgIHMuXygxKTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2xhbWJkYS9tZXRob2RSZWYvQXNzaWduYWJpbGl0eS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9sYW1iZGEvbWV0aG9kUmVmL0Fzc2lnbmFiaWxpdHkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YjhkMWZiCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9sYW1iZGEvbWV0aG9kUmVmL0Fzc2lnbmFiaWxpdHkuamF2YQpAQCAtMCwwICsxLDQyIEBACitjbGFzcyBUZXN0IHsKKyAgeworICAgICAgPGVycm9yIGRlc2NyPSJJbmNvbXBhdGlibGUgdHlwZXMuIEZvdW5kOiAnPG1ldGhvZCByZWZlcmVuY2U+JywgcmVxdWlyZWQ6ICdqYXZhLmxhbmcuUnVubmFibGUnIj5SdW5uYWJsZSBiID0gVGVzdCA6OiBsZW5ndGg7PC9lcnJvcj4KKyAgICAgIENvbXBhcmFibGU8U3RyaW5nPiBjID0gVGVzdCA6OiBsZW5ndGg7CisgICAgICA8ZXJyb3IgZGVzY3I9IkluY29tcGF0aWJsZSB0eXBlcy4gRm91bmQ6ICc8bWV0aG9kIHJlZmVyZW5jZT4nLCByZXF1aXJlZDogJ2phdmEubGFuZy5Db21wYXJhYmxlPGphdmEubGFuZy5JbnRlZ2VyPiciPkNvbXBhcmFibGU8SW50ZWdlcj4gYzEgPSAgVGVzdCA6OiBsZW5ndGg7PC9lcnJvcj4KKyAgfQorCisgIHB1YmxpYyBzdGF0aWMgSW50ZWdlciBsZW5ndGgoU3RyaW5nIHMpIHsKKyAgICByZXR1cm4gcy5sZW5ndGgoKTsKKyAgfQorCisgIGludGVyZmFjZSBCYXIgeworICAgIEludGVnZXIgXyhTdHJpbmcgcyk7CisgIH0KK30KKworY2xhc3MgVGVzdDEgeworICAgIHsKKyAgICAgICAgPGVycm9yIGRlc2NyPSJJbmNvbXBhdGlibGUgdHlwZXMuIEZvdW5kOiAnPG1ldGhvZCByZWZlcmVuY2U+JywgcmVxdWlyZWQ6ICdqYXZhLmxhbmcuUnVubmFibGUnIj5SdW5uYWJsZSBiID0gVGVzdDEgOjogbGVuZ3RoOzwvZXJyb3I+CisgICAgICAgIENvbXBhcmFibGU8U3RyaW5nPiBjID0gVGVzdDEgOjogbGVuZ3RoOworICAgICAgICBDb21wYXJhYmxlPEludGVnZXI+IGMxID0gIFRlc3QxIDo6IGxlbmd0aDsKKyAgICB9CisgIAorICAgIHB1YmxpYyBzdGF0aWMgSW50ZWdlciBsZW5ndGgoU3RyaW5nIHMpIHsKKyAgICAgIHJldHVybiBzLmxlbmd0aCgpOworICAgIH0KKworICAgIHB1YmxpYyBzdGF0aWMgSW50ZWdlciBsZW5ndGgoSW50ZWdlciBzKSB7CisgICAgICByZXR1cm4gczsKKyAgICB9CisgIAorICAgIGludGVyZmFjZSBCYXIgeworICAgICAgSW50ZWdlciBfKFN0cmluZyBzKTsKKyAgICB9Cit9CisKK2NsYXNzIFRlc3QyIHsKKworICAgIHZvaWQgZm9vKEludGVnZXIgaSkge30KKworICAgIDxlcnJvciBkZXNjcj0iSW5jb21wYXRpYmxlIHR5cGVzLiBGb3VuZDogJzxtZXRob2QgcmVmZXJlbmNlPicsIHJlcXVpcmVkOiAnamF2YS5sYW5nLk9iamVjdCciPk9iamVjdCBvID0gVGVzdDI6OmZvbzs8L2Vycm9yPgorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvbGFtYmRhL21ldGhvZFJlZi9Bc3NpZ25hYmlsaXR5MS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9sYW1iZGEvbWV0aG9kUmVmL0Fzc2lnbmFiaWxpdHkxLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTVhODMwNAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvbGFtYmRhL21ldGhvZFJlZi9Bc3NpZ25hYmlsaXR5MS5qYXZhCkBAIC0wLDAgKzEsMjMgQEAKK2NsYXNzIFRlc3QgeworICB2b2lkIGZvbyhib29sZWFuIGZsYWcpIHsKKyAgICBSdW5uYWJsZSByID0gbnVsbDsKKyAgICBSdW5uYWJsZSB4MSA9IGZsYWcgPyBTeXN0ZW0ub3V0OjpwcmludGxuIDogU3lzdGVtLm91dDo6cHJpbnRsbjsKKyAgICBSdW5uYWJsZSB4MiA9IGZsYWcgPyByIDogU3lzdGVtLm91dDo6cHJpbnRsbjsKKyAgICBSdW5uYWJsZSB4MyA9IGZsYWcgPyBTeXN0ZW0ub3V0OjpwcmludGxuIDogcjsKKyAgICBSdW5uYWJsZSB4NCA9IGZsYWcgPyBTeXN0ZW0ub3V0OjpwcmludGxuIDogbmV3IFJ1bm5hYmxlKCkgeworICAgICAgQE92ZXJyaWRlCisgICAgICBwdWJsaWMgdm9pZCBydW4oKSB7CisgICAgICB9CisgICAgfTsKKyAgICBSdW5uYWJsZSB4NSA9IGZsYWcgPyBTeXN0ZW0ub3V0OjpwcmludGxuIDogKCkgLT4geworICAgIH07CisgICAgUnVubmFibGUgeDYgPSBmbGFnID8gKCkgLT4ge30gOiBTeXN0ZW0ub3V0OjpwcmludGxuOworICAgIFJ1bm5hYmxlIHg3ID0gZmxhZyA/ICgpIC0+IHt9IDogKCkgLT4ge307CisgICAgUnVubmFibGUgeDggPSBmbGFnID8gbmV3IFJ1bm5hYmxlKCkgeworICAgICAgQE92ZXJyaWRlCisgICAgICBwdWJsaWMgdm9pZCBydW4oKSB7CisgICAgICB9CisgICAgfSA6ICgpIC0+IHt9OworICAgIFJ1bm5hYmxlIHg5ID0gZmxhZyA/ICgpIC0+IHt9IDogcjsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvbGFtYmRhL21ldGhvZFJlZi9Db25zdHJ1Y3RvckFzc2lnbmFiaWxpdHkuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvbGFtYmRhL21ldGhvZFJlZi9Db25zdHJ1Y3RvckFzc2lnbmFiaWxpdHkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iY2UwNjYxCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9sYW1iZGEvbWV0aG9kUmVmL0NvbnN0cnVjdG9yQXNzaWduYWJpbGl0eS5qYXZhCkBAIC0wLDAgKzEsNDQgQEAKK2NsYXNzIEZvbzxSPiB7CisgICAgcHVibGljIGludGVyZmFjZSBGYWN0b3J5PFU+IHsKKyAgICAgICAgVSBtYWtlKCk7CisgICAgfQorCisgICAgaW50ZXJmYWNlIEFTaW5rPFIsIEsgZXh0ZW5kcyBBU2luazxSLCBLPj4geworICAgICAgICBwdWJsaWMgdm9pZCBjb21iaW5lKEsgb3RoZXIpOworICAgIH0KKworICAgIHN0YXRpYyA8UiwgUyBleHRlbmRzIEFTaW5rPFIsIFM+PiBSIHJlZHVjZShGYWN0b3J5PFM+IGZhY3RvcnkpIHsKKyAgICAgICAgcmV0dXJuIG51bGw7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgZm9vKCkgeworICAgICAgICByZWR1Y2UoTW9vOjpuZXcpOworICAgICAgICByZWR1Y2U8ZXJyb3IgZGVzY3I9IidyZWR1Y2UoRm9vLkZhY3Rvcnk8Rm9vLkFTaW5rPiknIGluICdGb28nIGNhbm5vdCBiZSBhcHBsaWVkIHRvICcoPG1ldGhvZCByZWZlcmVuY2U+KSciPihBTW9vOjpuZXcpPC9lcnJvcj47CisgICAgICAgIHJlZHVjZShBQU1vbzo6bmV3KTsKKyAgICAgICAgcmVkdWNlKEFBQU1vbzo6bmV3KTsKKyAgICB9CisKKyAgICBwcml2YXRlIGNsYXNzIE1vbyBpbXBsZW1lbnRzIEFTaW5rPFIsIE1vbz4geworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIHZvaWQgY29tYmluZShNb28gb3RoZXIpIHsKKyAgICAgICAgfQorICAgIH0KKworICAgIHByaXZhdGUgY2xhc3MgQU1vbyB7CisgICAgfQorCisgICAgcHJpdmF0ZSBjbGFzcyBBQU1vbyBpbXBsZW1lbnRzIEFTaW5rPEFBTW9vLCBBQU1vbz4geworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIHZvaWQgY29tYmluZShBQU1vbyBvdGhlcikgeworICAgICAgICB9CisgICAgfQorCisgICAgcHJpdmF0ZSBjbGFzcyBBQUFNb28gaW1wbGVtZW50cyBBU2luazxSLCBBQUFNb28+IHsKKyAgICAgICAgcHJpdmF0ZSBBQUFNb28oKSB7CisgICAgICAgIH0KKworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIHZvaWQgY29tYmluZShBQUFNb28gb3RoZXIpIHsKKyAgICAgICAgfQorICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2xhbWJkYS9tZXRob2RSZWYvQ29uc3RydWN0b3JSZWZJbm5lckZyb21TdXBlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9sYW1iZGEvbWV0aG9kUmVmL0NvbnN0cnVjdG9yUmVmSW5uZXJGcm9tU3VwZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZjllODExCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9sYW1iZGEvbWV0aG9kUmVmL0NvbnN0cnVjdG9yUmVmSW5uZXJGcm9tU3VwZXIuamF2YQpAQCAtMCwwICsxLDE5IEBACitjbGFzcyBNeVRlc3QgeworCisgICAgc3RhdGljIGNsYXNzIFN1cGVyIHsKKyAgICAgICAgY2xhc3MgSW5uZXIgeworICAgICAgICAgICAgSW5uZXIoaW50IGkpe30KKyAgICAgICAgfQorICAgIH0KKworICAgIHN0YXRpYyBjbGFzcyBDaGlsZCBleHRlbmRzIFN1cGVyIHsKKworICAgICAgICBpbnRlcmZhY2UgSSB7IAorICAgICAgICAgIElubmVyIG0oQ2hpbGQgY2hpbGQsIGludCBpKTsgCisgICAgICAgIH0KKworICAgICAgICB2b2lkIHRlc3QoKSB7CisgICAgICAgICAgICBJIHZhciA9IENoaWxkLklubmVyOjpuZXc7CisgICAgICAgIH0KKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2xhbWJkYS9tZXRob2RSZWYvQ29uc3RydWN0b3JSZWZzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2xhbWJkYS9tZXRob2RSZWYvQ29uc3RydWN0b3JSZWZzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzljYjUzYQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvbGFtYmRhL21ldGhvZFJlZi9Db25zdHJ1Y3RvclJlZnMuamF2YQpAQCAtMCwwICsxLDEwNCBAQAorY2xhc3MgTXlUZXN0IHsKKyAgICBNeVRlc3QoKSB7CisgICAgfQorCisgICAgaW50ZXJmYWNlIEkgeworICAgICAgICBNeVRlc3QgbSgpOworICAgIH0KKworICAgIHN0YXRpYyB2b2lkIHRlc3QoSSBzKSB7CisgICAgICAgIHMubSgpOworICAgIH0KKworICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKyAgICAgICAgSSBzID0gTXlUZXN0OjpuZXc7CisgICAgICAgIHMubSgpOworICAgICAgICB0ZXN0KE15VGVzdDo6bmV3KTsKKyAgICB9Cit9CisKK2NsYXNzIE15VGVzdDEgeworCisgICAgTXlUZXN0MShPYmplY3QgbykgeworICAgIH0KKworICAgIE15VGVzdDEoTnVtYmVyIG4pIHsKKyAgICB9CisKKyAgICBpbnRlcmZhY2UgSSB7CisgICAgICAgIE15VGVzdDEgbShPYmplY3Qgbyk7CisgICAgfQorCisgICAgc3RhdGljIHZvaWQgdGVzdChJIHMsIE9iamVjdCBhcmcpIHsKKyAgICAgICAgcy5tKGFyZyk7CisgICAgfQorCisgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworICAgICAgICBJIHMgPSBNeVRlc3QxOjpuZXc7CisgICAgICAgIHMubSgiIik7CisgICAgICAgIHRlc3QoTXlUZXN0MTo6bmV3LCAiIik7CisgICAgfQorfQorCitjbGFzcyBNeVRlc3QyPFg+IHsKKyAgICBNeVRlc3QyKFggeCkgeworICAgIH0KKworICAgIGludGVyZmFjZSBJPFo+IHsKKyAgICAgICAgTXlUZXN0MjxaPiBtKFogeik7CisgICAgfQorCisgICAgc3RhdGljIDxZPiB2b2lkIHRlc3QoSTxZPiBzLCBZIGFyZykgeworICAgICAgICBzLm0oYXJnKTsKKyAgICB9CisKKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisgICAgICAgIEk8U3RyaW5nPiBzID0gTXlUZXN0MjxTdHJpbmc+OjpuZXc7CisgICAgICAgIHMubSgiIik7CisgICAgICAgIHRlc3QoTXlUZXN0MjxTdHJpbmc+OjpuZXcsICIiKTsKKyAgICB9Cit9CisKK2NsYXNzIE15VGVzdDM8WD4geworCisgICAgTXlUZXN0MyhYIHgpIHsgfQorCisgICAgaW50ZXJmYWNlIEk8Wj4geworICAgICAgICBNeVRlc3QzPFo+IG0oWiB6KTsKKyAgICB9CisKKyAgICBzdGF0aWMgdm9pZCB0ZXN0KEk8SW50ZWdlcj4gcykgeyAgIH0KKworICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKyAgICAgICAgPGVycm9yIGRlc2NyPSJJbmNvbXBhdGlibGUgdHlwZXMuIEZvdW5kOiAnPG1ldGhvZCByZWZlcmVuY2U+JywgcmVxdWlyZWQ6ICdNeVRlc3QzLkk8amF2YS5sYW5nLkludGVnZXI+JyI+STxJbnRlZ2VyPiBzID0gTXlUZXN0MzxTdHJpbmc+OjpuZXc7PC9lcnJvcj4KKyAgICAgICAgdGVzdDxlcnJvciBkZXNjcj0iJ3Rlc3QoTXlUZXN0My5JPGphdmEubGFuZy5JbnRlZ2VyPiknIGluICdNeVRlc3QzJyBjYW5ub3QgYmUgYXBwbGllZCB0byAnKDxtZXRob2QgcmVmZXJlbmNlPiknIj4oTXlUZXN0MzxTdHJpbmc+OjpuZXcpPC9lcnJvcj47CisgICAgfQorfQorCitjbGFzcyBNeVRlc3RJbnZhbGlkUSB7CisgIGNsYXNzIFN1cGVyIHt9CisgIAorICBjbGFzcyBDb25zdHJ1Y3RvclJlZnMgZXh0ZW5kcyBTdXBlciB7CisgICAgICB2b2lkIHRlc3QoKSB7CisgICAgICAgICAgQ29uc3RydWN0b3JSZWZzIHJlZnMgPSBuZXcgQ29uc3RydWN0b3JSZWZzKCk7CisgICAgICAgICAgQmxhaEJsYWggYjAgPSA8ZXJyb3IgZGVzY3I9IkNhbm5vdCBmaW5kIGNsYXNzIHJlZnMiPnJlZnM8L2Vycm9yPjo6bmV3OworICAgICAgICAgIEJsYWhCbGFoIGJsYWhCbGFoID0gPGVycm9yIGRlc2NyPSJDYW5ub3QgZmluZCBjbGFzcyB0aGlzIj50aGlzPC9lcnJvcj46Om5ldzsKKyAgICAgICAgICBCbGFoQmxhaDEgYmxhaEJsYWgxID0gPGVycm9yIGRlc2NyPSJDYW5ub3QgZmluZCBjbGFzcyBzdXBlciI+c3VwZXI8L2Vycm9yPjo6bmV3OworICAgICAgfQorICB9CisgIAorICBpbnRlcmZhY2UgQmxhaEJsYWggeworICAgICAgQ29uc3RydWN0b3JSZWZzIGZvbygpOworICB9CisKKyAgaW50ZXJmYWNlIEJsYWhCbGFoMSB7CisgICAgICBTdXBlciBmb28oKTsKKyAgfQorCisgIGFic3RyYWN0IHN0YXRpYyBjbGFzcyBBIHsKKyAgICBpbnRlcmZhY2UgSSB7CisgICAgICBBIGZvbygpOworICAgIH0KKyAgICA8ZXJyb3IgZGVzY3I9IkluY29tcGF0aWJsZSB0eXBlcy4gRm91bmQ6ICc8bWV0aG9kIHJlZmVyZW5jZT4nLCByZXF1aXJlZDogJ015VGVzdEludmFsaWRRLkEuSSciPkkgaSA9IEEgOjogbmV3OzwvZXJyb3I+CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2xhbWJkYS9tZXRob2RSZWYvQ29uc3RydWN0b3JSZWZzSW5uZXJDbGFzc2VzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2xhbWJkYS9tZXRob2RSZWYvQ29uc3RydWN0b3JSZWZzSW5uZXJDbGFzc2VzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGVkNDY0MgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvbGFtYmRhL21ldGhvZFJlZi9Db25zdHJ1Y3RvclJlZnNJbm5lckNsYXNzZXMuamF2YQpAQCAtMCwwICsxLDE1MSBAQAorY2xhc3MgTm9uU3RhdGljSW5uZXIgeworICBjbGFzcyBJbm5lciB7CisgICAgSW5uZXIoTm9uU3RhdGljSW5uZXIgb3V0ZXIpIHt9CisgICAgSW5uZXIoKSB7fQorICB9CisKKyAgaW50ZXJmYWNlIEkxIHsKKyAgICBJbm5lciBtKE5vblN0YXRpY0lubmVyIHJlYyk7CisgIH0KKworICBpbnRlcmZhY2UgSTIgeworICAgIElubmVyIG0oKTsKKyAgfQorCisgIHN0YXRpYyB2b2lkIGNhbGwxMShJMSBzKSB7fQorICBzdGF0aWMgdm9pZCBjYWxsMTIoSTIgcykge30KKworICBzdGF0aWMgeworICAgIEkxIGkxID0gTm9uU3RhdGljSW5uZXIuSW5uZXIgOjogbmV3OworICAgIGNhbGwxMShOb25TdGF0aWNJbm5lci5Jbm5lciA6OiBuZXcpOworCisgICAgPGVycm9yIGRlc2NyPSJJbmNvbXBhdGlibGUgdHlwZXMuIEZvdW5kOiAnPG1ldGhvZCByZWZlcmVuY2U+JywgcmVxdWlyZWQ6ICdOb25TdGF0aWNJbm5lci5JMiciPkkyIGkyID0gTm9uU3RhdGljSW5uZXIuSW5uZXIgOjogbmV3OzwvZXJyb3I+CisgICAgY2FsbDEyPGVycm9yIGRlc2NyPSInY2FsbDEyKE5vblN0YXRpY0lubmVyLkkyKScgaW4gJ05vblN0YXRpY0lubmVyJyBjYW5ub3QgYmUgYXBwbGllZCB0byAnKDxtZXRob2QgcmVmZXJlbmNlPiknIj4oTm9uU3RhdGljSW5uZXIuSW5uZXIgOjogbmV3KTwvZXJyb3I+OworICB9Cit9CisKK2NsYXNzIFN0YXRpY0lubmVyIHsKKworICBzdGF0aWMgY2xhc3MgSW5uZXIgeworICAgIElubmVyKFN0YXRpY0lubmVyIG91dGVyKSB7fQorICAgIElubmVyKCkge30KKyAgfQorCisKKyAgaW50ZXJmYWNlIEkxIHsKKyAgICBJbm5lciBtKFN0YXRpY0lubmVyIHJlYyk7CisgIH0KKworICBpbnRlcmZhY2UgSTIgeworICAgIElubmVyIG0oKTsKKyAgfQorCisgIHN0YXRpYyB2b2lkIGNhbGwyMShJMSBzKSB7fQorICBzdGF0aWMgdm9pZCBjYWxsMjIoSTIgcykge30KKworCisgIHN0YXRpYyB7CisgICAgICBJMSBpMSA9IFN0YXRpY0lubmVyLklubmVyIDo6IG5ldzsKKyAgICAgIGNhbGwyMShTdGF0aWNJbm5lci5Jbm5lciA6OiBuZXcpOworCisgICAgICBJMiBpMiA9IFN0YXRpY0lubmVyLklubmVyIDo6IG5ldzsKKyAgICAgIGNhbGwyMihTdGF0aWNJbm5lci5Jbm5lciA6OiBuZXcpOworICB9Cit9CisKK2NsYXNzIFN0YXRpY0lubmVyMSB7CisgICAgc3RhdGljIGNsYXNzIElubmVyIHsKKyAgICAgIElubmVyKFN0YXRpY0lubmVyMSBvdXRlcikge30KKyAgICAgIElubmVyKCkge30KKyAgICB9CisKKyAgICBpbnRlcmZhY2UgSTEgeworICAgICAgSW5uZXIgXyhTdGF0aWNJbm5lcjEgcmVjKTsKKyAgICB9CisKKyAgICBpbnRlcmZhY2UgSTIgeworICAgICAgSW5uZXIgXygpOworICAgIH0KKworICAgIHN0YXRpYyB2b2lkIGNhbGwzKEkxIHMpIHt9CisgICAgc3RhdGljIHZvaWQgY2FsbDMoSTIgcykge30KKworICAgIHN0YXRpYyB7CisgICAgICBjYWxsMzxlcnJvciBkZXNjcj0iQW1iaWd1b3VzIG1ldGhvZCBjYWxsOiBib3RoICdTdGF0aWNJbm5lcjEuY2FsbDMoSTEpJyBhbmQgJ1N0YXRpY0lubmVyMS5jYWxsMyhJMiknIG1hdGNoIj4oU3RhdGljSW5uZXIxLklubmVyIDo6IG5ldyk8L2Vycm9yPjsKKyAgICB9Cit9CisKK2NsYXNzIFN0YXRpY0lubmVyMiB7CisKKyAgc3RhdGljIGNsYXNzIElubmVyIHsKKyAgICBJbm5lcigpIHt9CisgIH0KKworCisgIGludGVyZmFjZSBJMSB7CisgICAgSW5uZXIgbShTdGF0aWNJbm5lcjIgcmVjKTsKKyAgfQorCisKKyAgc3RhdGljIHsKKyAgICAgPGVycm9yIGRlc2NyPSJJbmNvbXBhdGlibGUgdHlwZXMuIEZvdW5kOiAnPG1ldGhvZCByZWZlcmVuY2U+JywgcmVxdWlyZWQ6ICdTdGF0aWNJbm5lcjIuSTEnIj5JMSBpMSA9IFN0YXRpY0lubmVyMi5Jbm5lciA6OiBuZXc7PC9lcnJvcj4KKyAgfQorCisgIHsKKyAgICAgPGVycm9yIGRlc2NyPSJJbmNvbXBhdGlibGUgdHlwZXMuIEZvdW5kOiAnPG1ldGhvZCByZWZlcmVuY2U+JywgcmVxdWlyZWQ6ICdTdGF0aWNJbm5lcjIuSTEnIj5JMSBpMSA9IFN0YXRpY0lubmVyMi5Jbm5lciA6OiBuZXc7PC9lcnJvcj4KKyAgfQorfQorCitjbGFzcyBOb25TdGF0aWNJbm5lcjIgeworCisgIGNsYXNzIElubmVyIHsKKyAgICBJbm5lcigpIHt9CisgIH0KKworCisgIGludGVyZmFjZSBJMSB7CisgICAgSW5uZXIgbShOb25TdGF0aWNJbm5lcjIgcmVjKTsKKyAgfQorCisKKyAgc3RhdGljIHsKKyAgICAgSTEgaTEgPSBOb25TdGF0aWNJbm5lcjIuSW5uZXIgOjogbmV3OworICB9CisKKyAgeworICAgICBJMSBpMSA9IE5vblN0YXRpY0lubmVyMi5Jbm5lciA6OiBuZXc7CisgIH0KK30KKworY2xhc3MgTm9uU3RhdGljSW5uZXIzIHsKKyAgICBjbGFzcyBGb28geworICAgICAgICBGb28oSW50ZWdlciBpKSB7fQorICAgICAgICBGb28oKSB7fQorICAgIH0KKworICAgIGludGVyZmFjZSBJMTxYPiB7CisgICAgICAgIFggbShpbnQgaSk7CisgICAgfQorCisgICAgaW50ZXJmYWNlIEkyPFg+IHsKKyAgICAgICAgWCBtKCk7CisgICAgfQorICAgIAorICAgIGludGVyZmFjZSBJMzxYPiB7CisgICAgICAgIFggbShOb25TdGF0aWNJbm5lcjMgcmVjLCBpbnQgaSk7CisgICAgfQorCisgICAgaW50ZXJmYWNlIEk0PFg+IHsKKyAgICAgICAgWCBtKE5vblN0YXRpY0lubmVyMyByZWMpOworICAgIH0KKworICAgIHsKKyAgICAgICAgSTE8Rm9vPiBiMSA9IEZvbzo6bmV3OworICAgICAgICBJMjxGb28+IGIyID0gRm9vOjpuZXc7CisgICAgfQorCisgICAgeworICAgICAgICBJMzxGb28+IGIxID0gRm9vOjpuZXc7CisgICAgICAgIEk0PEZvbz4gYjIgPSBGb286Om5ldzsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2xhbWJkYS9tZXRob2RSZWYvQ29uc3RydWN0b3JXaXRob3V0UGFyYW1zLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2xhbWJkYS9tZXRob2RSZWYvQ29uc3RydWN0b3JXaXRob3V0UGFyYW1zLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTA0NDhhOAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvbGFtYmRhL21ldGhvZFJlZi9Db25zdHJ1Y3RvcldpdGhvdXRQYXJhbXMuamF2YQpAQCAtMCwwICsxLDMxIEBACitpbXBvcnQgamF2YS51dGlsLio7CisKK2ludGVyZmFjZSBGYWN0b3J5PFQ+IHsKKyAgICBUIGNyZWF0ZSgpOworfQorCitjbGFzcyBMYW1iZGFUZXN0IHsKKworICAgIHB1YmxpYyB2b2lkIHRlc3RSKCkgeworICAgICAgICBNYXA8U3RyaW5nLCBNYXA8U3RyaW5nLCBDb3VudGVyPj4gbWFwID0KKyAgICAgICAgICAgICAgICBuZXcgQ29tcHV0ZU1hcDxTdHJpbmcsIE1hcDxTdHJpbmcsIENvdW50ZXI+PigoKSAtPgorICAgICAgICAgICAgICAgICAgICAgICAgbmV3IENvbXB1dGVNYXA8PihDb3VudGVyOjpuZXcpKTsKKworICAgIH0KKworICAgIHB1YmxpYyBzdGF0aWMgY2xhc3MgQ29tcHV0ZU1hcDxLLCBWPiBleHRlbmRzIEhhc2hNYXA8SywgVj4geworICAgICAgICBwdWJsaWMgQ29tcHV0ZU1hcChGYWN0b3J5PFY+IGZhY3RvcnkpIHsKKyAgICAgICAgfQorICAgIH0KKworICAgIHB1YmxpYyBzdGF0aWMgY2xhc3MgQ291bnRlciB7CisKKyAgICAgICAgcHVibGljIENvdW50ZXIoKSB7CisgICAgICAgICAgICB0aGlzKDApOworICAgICAgICB9CisKKyAgICAgICAgcHVibGljIENvdW50ZXIoaW50IGNvdW50KSB7CisgICAgICAgIH0KKyAgICB9CisKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2xhbWJkYS9tZXRob2RSZWYvQ3ljbGljSW5mZXJlbmNlLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2xhbWJkYS9tZXRob2RSZWYvQ3ljbGljSW5mZXJlbmNlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTZkMDJiZQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvbGFtYmRhL21ldGhvZFJlZi9DeWNsaWNJbmZlcmVuY2UuamF2YQpAQCAtMCwwICsxLDMzIEBACitjbGFzcyBNeVRlc3Q8RT4geworICAgTXlUZXN0KEUgZSkgeworICAgfQorCisgICBpbnRlcmZhY2UgSTxUPiB7CisgICAgICAgTXlUZXN0PFQ+IF8oVCB0KTsKKyAgIH0KKworICAgc3RhdGljIDxZPiB2b2lkIGJhcihZIGFyZywgSTxZPiBpKSB7CisgICAgICAgaS5fKGFyZyk7CisgICB9CisKKyAgIHN0YXRpYyA8WT4gdm9pZCBiYXIoSTxZPiBpLCBZIGFyZykgeworICAgICAgIGkuXyhhcmcpOworICAgfQorCisgICBzdGF0aWMgPFk+IHZvaWQgYmFyKEk8WT4gaSkgeworICAgICAgIGkuXyhudWxsKTsKKyAgIH0KKworICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworICAgICAgIEk8U3RyaW5nPiBpID0gTXlUZXN0OjpuZXc7CisKKyAgICAgICBiYXIoIiIsIE15VGVzdDxTdHJpbmc+OjpuZXcpOworICAgICAgIGJhcigiIiwgTXlUZXN0OjpuZXcpOworCisgICAgICAgYmFyKE15VGVzdDxTdHJpbmc+OjpuZXcsICIiKTsKKyAgICAgICBiYXIoTXlUZXN0OjpuZXcsICIiKTsKKworICAgICAgIGJhcig8ZXJyb3IgZGVzY3I9IkN5Y2xpYyBpbmZlcmVuY2UiPk15VGVzdDo6bmV3PC9lcnJvcj4pOworICAgICAgIGJhcig8ZXJyb3IgZGVzY3I9IkN5Y2xpYyBpbmZlcmVuY2UiPk15VGVzdDxTdHJpbmc+OjpuZXc8L2Vycm9yPik7CisgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2xhbWJkYS9tZXRob2RSZWYvRGVmYXVsdENvbnN0cnVjdG9yLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2xhbWJkYS9tZXRob2RSZWYvRGVmYXVsdENvbnN0cnVjdG9yLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjA5OGEzNQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvbGFtYmRhL21ldGhvZFJlZi9EZWZhdWx0Q29uc3RydWN0b3IuamF2YQpAQCAtMCwwICsxLDEwNSBAQAorY2xhc3MgRGVmYXVsdENvbnN0cnVjdG9yIHsKKyAgICAKKyAgICBpbnRlcmZhY2UgSTE8Uj4geworICAgICAgICBSIGludm9rZSgpOworICAgIH0KKworICAgIGludGVyZmFjZSBJMjxSLCBBPiB7CisgICAgICAgIFIgaW52b2tlKEEgYSk7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBjbGFzcyBPdXRlciB7CisgICAgICAgIGNsYXNzIElubmVyIHsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgc3RhdGljIHZvaWQgdGVzdDEoKSB7CisgICAgICAgICAgICBJMjxJbm5lciwgT3V0ZXI+IGkyID0gSW5uZXIgOjogbmV3OworICAgICAgICAgICAgPGVycm9yIGRlc2NyPSJJbmNvbXBhdGlibGUgdHlwZXMuIEZvdW5kOiAnPG1ldGhvZCByZWZlcmVuY2U+JywgcmVxdWlyZWQ6ICdEZWZhdWx0Q29uc3RydWN0b3IuSTI8RGVmYXVsdENvbnN0cnVjdG9yLk91dGVyLklubmVyLGphdmEubGFuZy5TdHJpbmc+JyI+STI8SW5uZXIsIFN0cmluZz4gaTJzdHIgPSBJbm5lciA6OiBuZXc7PC9lcnJvcj4KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgdm9pZCB0ZXN0MigpIHsKKyAgICAgICAgICAgIEkxPElubmVyPiBpMSA9IElubmVyIDo6IG5ldzsKKyAgICAgICAgICAgIDxlcnJvciBkZXNjcj0iSW5jb21wYXRpYmxlIHR5cGVzLiBGb3VuZDogJzxtZXRob2QgcmVmZXJlbmNlPicsIHJlcXVpcmVkOiAnRGVmYXVsdENvbnN0cnVjdG9yLkkxPGphdmEubGFuZy5JbnRlZ2VyPiciPkkxPEludGVnZXI+IGkxSW50ID0gSW5uZXIgOjogbmV3OzwvZXJyb3I+CisgICAgICAgICAgICBJMjxJbm5lciwgT3V0ZXI+IGkyID0gIElubmVyIDo6IG5ldzsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBzdGF0aWMgdm9pZCB0ZXN0MSgpIHsKKyAgICAgICAgSTI8T3V0ZXIuSW5uZXIsIE91dGVyPiBpMiA9IE91dGVyLklubmVyOjpuZXc7CisgICAgICAgIDxlcnJvciBkZXNjcj0iSW5jb21wYXRpYmxlIHR5cGVzLiBGb3VuZDogJzxtZXRob2QgcmVmZXJlbmNlPicsIHJlcXVpcmVkOiAnRGVmYXVsdENvbnN0cnVjdG9yLkkyPERlZmF1bHRDb25zdHJ1Y3Rvci5PdXRlci5Jbm5lcixqYXZhLmxhbmcuU3RyaW5nPiciPkkyPE91dGVyLklubmVyLCBTdHJpbmc+IGkyc3RyID0gT3V0ZXIuSW5uZXI6Om5ldzs8L2Vycm9yPgorICAgIH0KKyAgICAKKyAgICB2b2lkIHRlc3QyKCkgeworICAgICAgICBJMjxPdXRlci5Jbm5lciwgT3V0ZXI+IGkyID0gT3V0ZXIuSW5uZXI6Om5ldzsKKyAgICAgICAgPGVycm9yIGRlc2NyPSJJbmNvbXBhdGlibGUgdHlwZXMuIEZvdW5kOiAnPG1ldGhvZCByZWZlcmVuY2U+JywgcmVxdWlyZWQ6ICdEZWZhdWx0Q29uc3RydWN0b3IuSTI8RGVmYXVsdENvbnN0cnVjdG9yLk91dGVyLklubmVyLGphdmEubGFuZy5TdHJpbmc+JyI+STI8T3V0ZXIuSW5uZXIsIFN0cmluZz4gaTJzdHIgPSBPdXRlci5Jbm5lcjo6bmV3OzwvZXJyb3I+CisgICAgfQorfQorCitjbGFzcyBEZWZhdWx0Q29uc3RydWN0b3IxIHsKKworICAgIHB1YmxpYyB2b2lkIGJhcigpIHsKKyAgICB9CisKKyAgICB7CisgICAgICAgIFJ1bm5hYmxlIGIxID0gRGVmYXVsdENvbnN0cnVjdG9yMSA6OiBuZXc7CisgICAgfQorfQorCitjbGFzcyBEZWZhdWx0Q29uc3RydWN0b3IyIHsKKyAgICBpbnRlcmZhY2UgSSB7CisgICAgICAgIHZvaWQgZm9vKERlZmF1bHRDb25zdHJ1Y3RvcjIgZSk7CisgICAgfQorCisKKyAgICB2b2lkIGYoKSB7CisgICAgICAgIDxlcnJvciBkZXNjcj0iSW5jb21wYXRpYmxlIHR5cGVzLiBGb3VuZDogJzxtZXRob2QgcmVmZXJlbmNlPicsIHJlcXVpcmVkOiAnRGVmYXVsdENvbnN0cnVjdG9yMi5JJyI+SSBpMSA9IERlZmF1bHRDb25zdHJ1Y3RvcjIgOjogbmV3OzwvZXJyb3I+CisgICAgICAgIEkgaTIgPSA8ZXJyb3IgZGVzY3I9IkNhbm5vdCBmaW5kIGNsYXNzIHRoaXMiPnRoaXM8L2Vycm9yPjo6bmV3OworICAgIH0KK30KKworY2xhc3MgRGVmYXVsdENvbnN0cnVjdG9yMyB7CisgICBwdWJsaWMgY2xhc3MgSW5uZXIge30KKyAgIHB1YmxpYyBzdGF0aWMgY2xhc3MgU3RhdGljSW5uZXIge30KKyAgIAorICAgc3RhdGljIDxlcnJvciBkZXNjcj0iSW5jb21wYXRpYmxlIHR5cGVzLiBGb3VuZDogJzxtZXRob2QgcmVmZXJlbmNlPicsIHJlcXVpcmVkOiAnRGVmYXVsdENvbnN0cnVjdG9yMy5JJyI+SSBpID0gSW5uZXI6Om5ldzs8L2Vycm9yPgorICAgc3RhdGljIEkxIGkxID0gU3RhdGljSW5uZXI6Om5ldzsKKyAgIGludGVyZmFjZSBJIHsKKyAgICAgSW5uZXIgZm9vKCk7CisgICB9CisKKyAgIGludGVyZmFjZSBJMSB7CisgICAgIFN0YXRpY0lubmVyIGZvbygpOworICAgfQorfQorCitjbGFzcyBEZWZhdWx0Q29uc3RydWN0b3I0IHsKKyAgIHB1YmxpYyBjbGFzcyBJbm5lciB7fQorICAgcHVibGljIHN0YXRpYyBjbGFzcyBTdGF0aWNJbm5lciB7fQorICAgCisgICBzdGF0aWMgSSBpID0gSW5uZXI6Om5ldzsKKyAgIHN0YXRpYyA8ZXJyb3IgZGVzY3I9IkluY29tcGF0aWJsZSB0eXBlcy4gRm91bmQ6ICc8bWV0aG9kIHJlZmVyZW5jZT4nLCByZXF1aXJlZDogJ0RlZmF1bHRDb25zdHJ1Y3RvcjQuSTEnIj5JMSBpMSA9IFN0YXRpY0lubmVyOjpuZXc7PC9lcnJvcj4KKyAgIGludGVyZmFjZSBJIHsKKyAgICAgSW5uZXIgZm9vKERlZmF1bHRDb25zdHJ1Y3RvcjQgcmVjZWl2ZXIpOworICAgfQorCisgICBpbnRlcmZhY2UgSTEgeworICAgICBTdGF0aWNJbm5lciBmb28oRGVmYXVsdENvbnN0cnVjdG9yNCByZWNlaXZlcik7CisgICB9Cit9CisKK2NsYXNzIERlZmF1bHRDb25zdHJ1Y3RvcjUgeworICAgIHB1YmxpYyBjbGFzcyBJbm5lciB7fQorCisgICAgc3RhdGljIHZvaWQgdGVzdCgpIHsKKyAgICAgICAgPGVycm9yIGRlc2NyPSJJbmNvbXBhdGlibGUgdHlwZXMuIEZvdW5kOiAnPG1ldGhvZCByZWZlcmVuY2U+JywgcmVxdWlyZWQ6ICdEZWZhdWx0Q29uc3RydWN0b3I1LkknIj5JIGkgPSBJbm5lcjo6bmV3OzwvZXJyb3I+CisgICAgfQorCisgICAgdm9pZCB0ZXN0MSgpIHsKKyAgICAgICAgSSBpID0gSW5uZXI6Om5ldzsKKyAgICB9CisKKyAgICBpbnRlcmZhY2UgSSB7CisgICAgICAgIERlZmF1bHRDb25zdHJ1Y3RvcjUuSW5uZXIgZm9vKCk7CisgICAgfQorCit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2xhbWJkYS9tZXRob2RSZWYvSW5mZXJlbmNlRnJvbU1ldGhvZFJlZmVyZW5jZS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9sYW1iZGEvbWV0aG9kUmVmL0luZmVyZW5jZUZyb21NZXRob2RSZWZlcmVuY2UuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNDJjZDc0Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9sYW1iZGEvbWV0aG9kUmVmL0luZmVyZW5jZUZyb21NZXRob2RSZWZlcmVuY2UuamF2YQpAQCAtMCwwICsxLDIxIEBACitjbGFzcyBUZXN0IHsKKyAgICBzdGF0aWMgPFU+IEl0ZXJhYmxlPFU+IG1hcChNYXBwZXI8PyBzdXBlciBTdHJpbmcsID8gZXh0ZW5kcyBVPiBtYXBwZXIpIHsKKyAgICAgICAgcmV0dXJuIG51bGw7CisgICAgfQorCisgICAgc3RhdGljIHZvaWQgdGVzdCgpIHsKKyAgICAgICAgSW50ZWdlciBuZXh0ID0gbWFwKFN0cmluZzo6bGVuZ3RoKS5pdGVyYXRvcigpLm5leHQoKTsKKyAgICAgICAgSW50ZWdlciBuZXh0MSA9IG1hcChUZXN0OjpsZW5ndGgpLml0ZXJhdG9yKCkubmV4dCgpOworICAgIH0KKworICAgIHB1YmxpYyBzdGF0aWMgPFQ+IFQgbGVuZ3RoKFQgcykgeworICAgICAgcmV0dXJuIG51bGw7CisgICAgfQorCisgICAgcHVibGljIHN0YXRpYyA8VD4gaW50IGxlbmd0aChTdHJpbmcgcykgeworICAgICAgcmV0dXJuIDA7CisgICAgfQorfQoraW50ZXJmYWNlIE1hcHBlcjxULCBVPiB7CisgICAgVSBtYXAoVCB0KTsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2xhbWJkYS9tZXRob2RSZWYvSW5mZXJlbmNlRnJvbVJldHVyblR5cGUuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvbGFtYmRhL21ldGhvZFJlZi9JbmZlcmVuY2VGcm9tUmV0dXJuVHlwZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQxNThiNzQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2xhbWJkYS9tZXRob2RSZWYvSW5mZXJlbmNlRnJvbVJldHVyblR5cGUuamF2YQpAQCAtMCwwICsxLDgzIEBACitjbGFzcyBNeVRlc3REZWZhdWx0Q29uc3RydWN0b3IgeworICAgc3RhdGljIGNsYXNzIFN1cGVyRm9vPDx3YXJuaW5nIGRlc2NyPSJUeXBlIHBhcmFtZXRlciAnWCcgaXMgbmV2ZXIgdXNlZCI+WDwvd2FybmluZz4+IHsgfQorCisgICBzdGF0aWMgY2xhc3MgRm9vPFggZXh0ZW5kcyBOdW1iZXI+IGV4dGVuZHMgU3VwZXJGb288WD4geworICAgfQorICAgCisgICBpbnRlcmZhY2UgSTEgeworICAgICAgIFN1cGVyRm9vPFN0cmluZz4gXygpOworICAgfQorCisgICBpbnRlcmZhY2UgSTIgeworICAgICAgIFN1cGVyRm9vPEludGVnZXI+IF8oKTsKKyAgIH0KKyAgIAorICAgaW50ZXJmYWNlIEkzIHsKKyAgICAgICBTdXBlckZvbzxPYmplY3Q+IF8oKTsKKyAgIH0KKyAgIAorICAgcHJpdmF0ZSBzdGF0aWMgdm9pZCA8d2FybmluZyBkZXNjcj0iUHJpdmF0ZSBtZXRob2QgJ2ZvbyhNeVRlc3REZWZhdWx0Q29uc3RydWN0b3IuSTEpJyBpcyBuZXZlciB1c2VkIj5mb288L3dhcm5pbmc+KEkxIGkpIHtTeXN0ZW0ub3V0LnByaW50bG4oaSk7fQorICAgcHJpdmF0ZSBzdGF0aWMgdm9pZCBmb28oSTIgaSkge1N5c3RlbS5vdXQucHJpbnRsbihpKTt9CisgICBwcml2YXRlIHN0YXRpYyB2b2lkIDx3YXJuaW5nIGRlc2NyPSJQcml2YXRlIG1ldGhvZCAnZm9vKE15VGVzdERlZmF1bHRDb25zdHJ1Y3Rvci5JMyknIGlzIG5ldmVyIHVzZWQiPmZvbzwvd2FybmluZz4oSTMgaSkge1N5c3RlbS5vdXQucHJpbnRsbihpKTt9CisKKyAgIHN0YXRpYyB7CisgICAgICAgZm9vKEZvbzo6bmV3KTsKKyAgIH0KK30KKworY2xhc3MgTXlUZXN0Q29uc3RydWN0b3IgeworICAgc3RhdGljIGNsYXNzIFN1cGVyRm9vPDx3YXJuaW5nIGRlc2NyPSJUeXBlIHBhcmFtZXRlciAnWCcgaXMgbmV2ZXIgdXNlZCI+WDwvd2FybmluZz4+IHsgfQorCisgICBzdGF0aWMgY2xhc3MgRm9vPFggZXh0ZW5kcyBOdW1iZXI+IGV4dGVuZHMgU3VwZXJGb288WD4geworICAgICBGb28oKXt9CisgICB9CisgICAKKyAgIGludGVyZmFjZSBJMSB7CisgICAgICAgU3VwZXJGb288U3RyaW5nPiBfKCk7CisgICB9CisKKyAgIGludGVyZmFjZSBJMiB7CisgICAgICAgU3VwZXJGb288SW50ZWdlcj4gXygpOworICAgfQorICAgCisgICBpbnRlcmZhY2UgSTMgeworICAgICAgIFN1cGVyRm9vPE9iamVjdD4gXygpOworICAgfQorICAgCisgICBwcml2YXRlIHN0YXRpYyB2b2lkIDx3YXJuaW5nIGRlc2NyPSJQcml2YXRlIG1ldGhvZCAnZm9vKE15VGVzdENvbnN0cnVjdG9yLkkxKScgaXMgbmV2ZXIgdXNlZCI+Zm9vPC93YXJuaW5nPihJMSBpKSB7U3lzdGVtLm91dC5wcmludGxuKGkpO30KKyAgIHByaXZhdGUgc3RhdGljIHZvaWQgZm9vKEkyIGkpIHtTeXN0ZW0ub3V0LnByaW50bG4oaSk7fQorICAgcHJpdmF0ZSBzdGF0aWMgdm9pZCA8d2FybmluZyBkZXNjcj0iUHJpdmF0ZSBtZXRob2QgJ2ZvbyhNeVRlc3RDb25zdHJ1Y3Rvci5JMyknIGlzIG5ldmVyIHVzZWQiPmZvbzwvd2FybmluZz4oSTMgaSkge1N5c3RlbS5vdXQucHJpbnRsbihpKTt9CisKKyAgIHN0YXRpYyB7CisgICAgICAgZm9vKEZvbzo6bmV3KTsKKyAgIH0KK30KKworY2xhc3MgTXlUZXN0TWV0aG9kIHsKKyAgICBzdGF0aWMgY2xhc3MgU3VwZXJGb288PHdhcm5pbmcgZGVzY3I9IlR5cGUgcGFyYW1ldGVyICdYJyBpcyBuZXZlciB1c2VkIj5YPC93YXJuaW5nPj4geyB9CisKKyAgICBzdGF0aWMgY2xhc3MgRm9vPFggZXh0ZW5kcyBOdW1iZXI+IGV4dGVuZHMgU3VwZXJGb288WD4geworICAgIH0KKyAgICAKKyAgICBpbnRlcmZhY2UgSTEgeworICAgICAgICBTdXBlckZvbzxTdHJpbmc+IF8oKTsKKyAgICB9CisKKyAgICBpbnRlcmZhY2UgSTIgeworICAgICAgICBTdXBlckZvbzxJbnRlZ2VyPiBfKCk7CisgICAgfQorICAgIAorICAgIGludGVyZmFjZSBJMyB7CisgICAgICAgIFN1cGVyRm9vPE9iamVjdD4gXygpOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgPFggZXh0ZW5kcyBOdW1iZXI+IEZvbzxYPiBtKCkgeyByZXR1cm4gbnVsbDsgfQorICAgIAorICAgIHByaXZhdGUgc3RhdGljIHZvaWQgPHdhcm5pbmcgZGVzY3I9IlByaXZhdGUgbWV0aG9kICdmb28oTXlUZXN0TWV0aG9kLkkxKScgaXMgbmV2ZXIgdXNlZCI+Zm9vPC93YXJuaW5nPihJMSBpKSB7U3lzdGVtLm91dC5wcmludGxuKGkpO30KKyAgICBwcml2YXRlIHN0YXRpYyB2b2lkIGZvbyhJMiBpKSB7U3lzdGVtLm91dC5wcmludGxuKGkpO30KKyAgICBwcml2YXRlIHN0YXRpYyB2b2lkIDx3YXJuaW5nIGRlc2NyPSJQcml2YXRlIG1ldGhvZCAnZm9vKE15VGVzdE1ldGhvZC5JMyknIGlzIG5ldmVyIHVzZWQiPmZvbzwvd2FybmluZz4oSTMgaSkge1N5c3RlbS5vdXQucHJpbnRsbihpKTt9CisKKyAgICBzdGF0aWMgeworICAgICAgIGZvbyhNeVRlc3RNZXRob2Q6Om0pOworICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvbGFtYmRhL21ldGhvZFJlZi9NZXRob2RSZWZNaXNjLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2xhbWJkYS9tZXRob2RSZWYvTWV0aG9kUmVmTWlzYy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjczMTg4ZjIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2xhbWJkYS9tZXRob2RSZWYvTWV0aG9kUmVmTWlzYy5qYXZhCkBAIC0wLDAgKzEsNTYgQEAKK2NsYXNzIE15VGVzdCB7CisKKyAgICBpbnRlcmZhY2UgSSB7CisgICAgICAgIHZvaWQgbTEoaW50IGkpOworICAgIH0KKworICAgIHN0YXRpYyBjbGFzcyBBIHsKKyAgICAgICAgdm9pZCBtKGludCBpKSB7fQorICAgIH0KKworICAgIHN0YXRpYyBjbGFzcyBCIGV4dGVuZHMgQSB7CisgICAgICAgIHZvaWQgbShpbnQgaSkgeworICAgICAgICAgICAgSSBtaCA9IHN1cGVyOjptOworICAgICAgICB9CisgICAgfQorCisgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworICAgICAgICBuZXcgQigpLm0oMTApOworICAgIH0KK30KKworY2xhc3MgTXlUZXN0V2l0aEJveGluZyB7CisgICAgaW50ZXJmYWNlIEkgeworICAgICAgICB2b2lkIG0xKEludGVnZXIgaSk7CisgICAgfQorCisgICAgc3RhdGljIGNsYXNzIEEgeworICAgICAgICB2b2lkIG0oaW50IGkpIHt9CisgICAgfQorCisgICAgc3RhdGljIGNsYXNzIEIgZXh0ZW5kcyBBIHsKKyAgICAgICAgeworICAgICAgICAgICAgSSBzID0gc3VwZXI6Om07CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHZvaWQgbShpbnQgaSkgeworICAgICAgICAgIHN1cGVyLm0oaSk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK2NsYXNzIE15VGVzdDEgeworCisgICAgaW50ZXJmYWNlIEkgeworICAgICAgICB2b2lkIG0oKTsKKyAgICB9CisKKyAgICB2b2lkIGNhbGwoSSBzKSB7fQorCisgICAgSSBpID0gPGVycm9yIGRlc2NyPSJDYW5ub3QgcmVzb2x2ZSBzeW1ib2wgJ05vbkV4aXN0ZW50VHlwZSciPk5vbkV4aXN0ZW50VHlwZTwvZXJyb3I+OjptOworCisgICAgeworICAgICAgICBjYWxsKDxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICdOb25FeGlzdGVudFR5cGUnIj5Ob25FeGlzdGVudFR5cGU8L2Vycm9yPjo6bSk7CisgICAgfQorfQorCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2xhbWJkYS9tZXRob2RSZWYvTWV0aG9kUmVmTWlzYzEuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvbGFtYmRhL21ldGhvZFJlZi9NZXRob2RSZWZNaXNjMS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVjZTdhNjUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2xhbWJkYS9tZXRob2RSZWYvTWV0aG9kUmVmTWlzYzEuamF2YQpAQCAtMCwwICsxLDE5NyBAQAoraW1wb3J0IGphdmEudXRpbC4qOworY2xhc3MgTXlUZXN0IHsKKworICAgc3RhdGljIHZvaWQgbShpbnQgaSkgey8vaGVyZSAKKyAgIH0KKyAgIHN0YXRpYyB2b2lkIG0oSW50ZWdlciBpKSB7fQorCisgICBpbnRlcmZhY2UgSSB7CisgICAgICAgdm9pZCBtKGludCB4KTsKKyAgIH0KKworICAgc3RhdGljIHZvaWQgY2FsbChJIHMpIHsgcy5tKDQyKTsgfQorCisgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisgICAgICAgSSBzID0gTXlUZXN0OjptOworICAgICAgIHMubSg0Mik7CisgICAgICAgY2FsbChNeVRlc3Q6Om0pOworICAgfQorfQorCitjbGFzcyBNeVRlc3QxIHsKKworICAgIHN0YXRpYyB2b2lkIG0oSW50ZWdlciBpKSB7IH0KKworICAgIGludGVyZmFjZSBJMSB7CisgICAgICAgIHZvaWQgbShpbnQgeCk7CisgICAgfQorCisgICAgaW50ZXJmYWNlIEkyIHsKKyAgICAgICAgdm9pZCBtKEludGVnZXIgeCk7CisgICAgfQorCisgICAgc3RhdGljIHZvaWQgY2FsbChpbnQgaSwgSTEgcykgeworICAgICAgCisgICAgfQorICAgIHN0YXRpYyB2b2lkIGNhbGwoaW50IGksIEkyIHMpIHsKKyAgICAgIC8vaGVyZQorICAgIH0KKworICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKyAgICAgICAgY2FsbCgxLCBNeVRlc3QxOjptKTsKKyAgICB9Cit9CisKK2NsYXNzIE15VGVzdDIgeworCisgICAgc3RhdGljIHZvaWQgbShJbnRlZ2VyIGkpIHsgfQorCisgICAgaW50ZXJmYWNlIEkgeworICAgICAgICB2b2lkIG0oaW50IHgpOworICAgIH0KKworICAgIHN0YXRpYyB2b2lkIGNhbGwoaW50IGksIEkgcykgeyAgIH0KKyAgICBzdGF0aWMgdm9pZCBjYWxsKEludGVnZXIgaSwgSSBzKSB7ICAgfQorCisgICAgc3RhdGljIHZvaWQgdGVzdCgpIHsKKyAgICAgICAgY2FsbDxlcnJvciBkZXNjcj0iQW1iaWd1b3VzIG1ldGhvZCBjYWxsOiBib3RoICdNeVRlc3QyLmNhbGwoaW50LCBJKScgYW5kICdNeVRlc3QyLmNhbGwoSW50ZWdlciwgSSknIG1hdGNoIj4oMSwgTXlUZXN0Mjo6bSk8L2Vycm9yPjsgLy9hbWJpZ3VvdXMKKyAgICB9Cit9CisKK2NsYXNzIE15VGVzdDMgeworICAgIGludGVyZmFjZSBJIHsKKyAgICAgICB2b2lkIG0oKTsKKyAgICB9CisKKyAgICBNeVRlc3QzKCkge30KKworICAgc3RhdGljIHZvaWQgbSgpIHsgfQorCisgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisgICAgICBJIHMgPSBuZXcgTXlUZXN0MygpOjptOworICAgfQorfQorCitjbGFzcyBNeVRlc3Q0IHsKKworICAgIGludGVyZmFjZSBJIHsKKyAgICAgICAgTXlUZXN0NCBtKExpc3Q8SW50ZWdlcj4gbDEsIExpc3Q8SW50ZWdlcj4gbDIpOworICAgIH0KKworICAgIE15VGVzdDQgbWV0aChMaXN0PEludGVnZXI+Li4uIGxsaSkgeyByZXR1cm4gbnVsbDsgfQorICAgIE15VGVzdDQoTGlzdDxJbnRlZ2VyPi4uLiBsbGkpIHsgfQorCisgICAgSSBzMSA9IHRoaXM6Om1ldGg7CisgICAgSSBzMiA9IE15VGVzdDQ6Om5ldzsKK30KKworY2xhc3MgTXlUZXN0NSB7CisgICAgaW50ZXJmYWNlIElfdm9pZDxYPiB7CisgICAgICAgIHZvaWQgbSgpOworICAgIH0KKyAgICAKKyAgICBpbnRlcmZhY2UgSV9Wb2lkPFg+IHsKKyAgICAgICAgdm9pZCBtKCk7CisgICAgfQorICAgIAorICAgIHN0YXRpYyB2b2lkIG1fdm9pZCgpIHt9CisgICAgCisgICAgc3RhdGljIFZvaWQgX1ZvaWQoKSB7cmV0dXJuIG51bGw7IH0KKyAgICAKKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisgICAgICAgIElfdm9pZCBzMSA9IE15VGVzdDU6Om1fdm9pZDsKKyAgICAgICAgczEubSgpOworICAgICAgICBJX1ZvaWQgczIgPSBNeVRlc3Q1OjptX3ZvaWQ7CisgICAgICAgIHMyLm0oKTsKKyAgICAgICAgSV92b2lkIHMzID0gTXlUZXN0NTo6X1ZvaWQ7CisgICAgICAgIHMzLm0oKTsKKyAgICAgICAgSV9Wb2lkIHM0ID0gTXlUZXN0NTo6X1ZvaWQ7CisgICAgICAgIHM0Lm0oKTsKKyAgICB9Cit9CitjbGFzcyBNeVRlc3Q2IHsKKyAgICBpbnRlcmZhY2UgSSB7CisgICAgICAgIE15VGVzdDYgaW52b2tlKCk7CisgICAgfQorICAgIAorICAgIE15VGVzdDYoKSB7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBNeVRlc3Q2IG0oKSB7CisgICAgICAgIHJldHVybiBudWxsOworICAgIH0KKworICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKyAgICAgICAgSSBJMSA9ICgoSSkoKSAtPiB7cmV0dXJuIG51bGw7IH0pOjppbnZva2U7CisgICAgICAgIEkxLmludm9rZSgpOworICAgICAgICBJIEkyID0gKChJKU15VGVzdDY6Om5ldyk6Omludm9rZTsKKyAgICAgICAgSTEuaW52b2tlKCk7CisgICAgICAgIEkgSTMgPSAoKEkpTXlUZXN0Njo6bSk6Omludm9rZTsKKyAgICAgICAgSTEuaW52b2tlKCk7CisgICAgfQorfQorCitjbGFzcyBNeVRlc3Q3eworICAgIAorICAgIGludGVyZmFjZSBJPFI+IHsKKyAgICAgICAgUiBpbnZva2UoKTsKKyAgICB9CisgICAgCisgICAgQGludGVyZmFjZSBBIHsgfQorCisgICAgc3RhdGljIGFic3RyYWN0IGNsYXNzIEFDIHsgfQorICAgIAorICAgIGVudW0gRSB7IH0KKyAgICAKKyAgICB2b2lkIHRlc3QoKSB7CisgICAgICAgIDxlcnJvciBkZXNjcj0iSW5jb21wYXRpYmxlIHR5cGVzLiBGb3VuZDogJzxtZXRob2QgcmVmZXJlbmNlPicsIHJlcXVpcmVkOiAnTXlUZXN0Ny5JJyI+SSBzMSA9IEE6Om5ldzs8L2Vycm9yPgorICAgICAgICA8ZXJyb3IgZGVzY3I9IkluY29tcGF0aWJsZSB0eXBlcy4gRm91bmQ6ICc8bWV0aG9kIHJlZmVyZW5jZT4nLCByZXF1aXJlZDogJ015VGVzdDcuSSciPkkgczIgPSBJOjpuZXc7PC9lcnJvcj4KKyAgICAgICAgPGVycm9yIGRlc2NyPSJJbmNvbXBhdGlibGUgdHlwZXMuIEZvdW5kOiAnPG1ldGhvZCByZWZlcmVuY2U+JywgcmVxdWlyZWQ6ICdNeVRlc3Q3LkknIj5JIHMzID0gQUM6Om5ldzs8L2Vycm9yPgorICAgICAgICA8ZXJyb3IgZGVzY3I9IkluY29tcGF0aWJsZSB0eXBlcy4gRm91bmQ6ICc8bWV0aG9kIHJlZmVyZW5jZT4nLCByZXF1aXJlZDogJ015VGVzdDcuSSciPkkgczQgPSBFOjpuZXc7PC9lcnJvcj4KKyAgICB9Cit9CisKK2NsYXNzIE15VGVzdDh7CisKKyAgICBzdGF0aWMgY2xhc3MgU3VwIHt9IAorCisKKyAgICBzdGF0aWMgY2xhc3MgU3ViIGV4dGVuZHMgU3VwIHsKKworICAgICAgICBpbnRlcmZhY2UgSSB7IFN1cCBtKFN1cCB4LCBTdHJpbmcgc3RyKTsgfQorCisgICAgICAgIGNsYXNzIElubmVyIGV4dGVuZHMgU3VwIHsKKyAgICAgICAgICAgIElubmVyKFN0cmluZyB2YWwpIHsgfQorICAgICAgICB9CisKKyAgICAgICAgdm9pZCB0ZXN0KCkgeworICAgICAgICAgICAgPGVycm9yIGRlc2NyPSJJbmNvbXBhdGlibGUgdHlwZXMuIEZvdW5kOiAnPG1ldGhvZCByZWZlcmVuY2U+JywgcmVxdWlyZWQ6ICdNeVRlc3Q4LlN1Yi5JJyI+SSB2YXIgPSBTdWIuSW5uZXI6Om5ldzs8L2Vycm9yPjsKKyAgICAgICAgfQorICAgIH0KK30KKworY2xhc3MgTXlUZXN0OSB7CisgICAgCisgICAgc3RhdGljIGNsYXNzIFN1cGVyRm9vPFg+IHsgfQorCisgICAgc3RhdGljIGNsYXNzIEZvbzxYIGV4dGVuZHMgTnVtYmVyPiBleHRlbmRzIFN1cGVyRm9vPFg+IHsgfQorICAgIAorICAgIGludGVyZmFjZSBJMSB7CisgICAgICAgIHZvaWQgbSgpOworICAgIH0KKworICAgIGludGVyZmFjZSBJMiB7CisgICAgICAgIHZvaWQgbSgpOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgPFggZXh0ZW5kcyBOdW1iZXI+IEZvbzxYPiBtKCkgeyByZXR1cm4gbnVsbDsgfQorICAgIAorICAgIHN0YXRpYyB2b2lkIGcxKEkxIHMpIHsgfQorICAgIHN0YXRpYyB2b2lkIGcyKEkxIHMpIHsgfQorICAgIHN0YXRpYyB2b2lkIGcyKEkyIHMpIHsgfQorCisgICAgdm9pZCB0ZXN0KCkgeworICAgICAgICBnMShNeVRlc3Q5OjptKTsKKyAgICAgICAgZzI8ZXJyb3IgZGVzY3I9IkFtYmlndW91cyBtZXRob2QgY2FsbDogYm90aCAnTXlUZXN0OS5nMihJMSknIGFuZCAnTXlUZXN0OS5nMihJMiknIG1hdGNoIj4oTXlUZXN0OTo6bSk8L2Vycm9yPjsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2xhbWJkYS9tZXRob2RSZWYvTWV0aG9kUmVmZXJlbmNlUmVjZWl2ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvbGFtYmRhL21ldGhvZFJlZi9NZXRob2RSZWZlcmVuY2VSZWNlaXZlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjllODUyMjQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2xhbWJkYS9tZXRob2RSZWYvTWV0aG9kUmVmZXJlbmNlUmVjZWl2ZXIuamF2YQpAQCAtMCwwICsxLDEzIEBACitjbGFzcyBNeVRlc3QgeworCisgICAgaW50ZXJmYWNlIEkgeworICAgICAgIHZvaWQgXyhNeVRlc3QgcmVjZWl2ZXIsIEludGVnZXIgaSk7CisgICAgfQorCisgICAgdm9pZCBtKEludGVnZXIgaSkge30KKworICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKyAgICAgICAgSSBpID0gTXlUZXN0IDo6IG07CisgICAgICAgIGkuXyhuZXcgTXlUZXN0KCksIDEpOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2xhbWJkYS9tZXRob2RSZWYvTWV0aG9kVHlwZVBhcmFtc0luZmVyZW5jZS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9sYW1iZGEvbWV0aG9kUmVmL01ldGhvZFR5cGVQYXJhbXNJbmZlcmVuY2UuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMWMyODRmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9sYW1iZGEvbWV0aG9kUmVmL01ldGhvZFR5cGVQYXJhbXNJbmZlcmVuY2UuamF2YQpAQCAtMCwwICsxLDUyIEBACitjbGFzcyBNeVRlc3QgeworICAgIGludGVyZmFjZSBJMSB7CisgICAgICAgdm9pZCBtKFN0cmluZyBzKTsKKyAgICB9CisKKyAgICBpbnRlcmZhY2UgSTIgeworICAgICAgIHZvaWQgbShJbnRlZ2VyIHMpOworICAgIH0KKworICAgIGludGVyZmFjZSBJMyB7CisgICAgICAgdm9pZCBtKE9iamVjdCBvKTsKKyAgICB9CisKKyAgICBzdGF0aWMgPFQgZXh0ZW5kcyBOdW1iZXI+IHZvaWQgbShUIHApIHt9CisKKyAgICBzdGF0aWMgPFQxPiB2b2lkIG0xKFQxIGZ4KSB7IH0KKyAKKyAgICBzdGF0aWMgdm9pZCBmb28oSTEgaSkge30KKyAgICBzdGF0aWMgdm9pZCBmb28oSTIgaSkge30gLy9tCisgICAgc3RhdGljIHZvaWQgZm9vKEkzIGkpIHt9CisKKyAgICBzdGF0aWMgeworICAgICAgICAgZm9vKE15VGVzdDo6bSk7CisgICAgICAgICBmb288ZXJyb3IgZGVzY3I9IkFtYmlndW91cyBtZXRob2QgY2FsbDogYm90aCAnTXlUZXN0LmZvbyhJMSknIGFuZCAnTXlUZXN0LmZvbyhJMiknIG1hdGNoIj4oTXlUZXN0OjptMSk8L2Vycm9yPjsKKyAgICB9Cit9CisKKworY2xhc3MgTXlUZXN0MSB7CisgICAgaW50ZXJmYWNlIEkxIHsKKyAgICAgICB2b2lkIG0oSW50ZWdlciBzKTsKKyAgICB9CisKKyAgICBpbnRlcmZhY2UgSTIgeworICAgICAgIHZvaWQgbShJbnRlZ2VyIHMpOworICAgIH0KKworICAgIHN0YXRpYyA8VCBleHRlbmRzIE51bWJlcj4gdm9pZCBtKFQgcCkgeyB9CisgICAgc3RhdGljIDxUPiB2b2lkIG0xKFQgcCkgeyB9CisgCisgICAgc3RhdGljIHZvaWQgZm9vMShJMSBpKSB7IH0KKyAgICBzdGF0aWMgdm9pZCBmb28yKEkxIGkpIHsgfQorICAgIHN0YXRpYyB2b2lkIGZvbzIoSTIgaSkgeyB9CisKKyAgICBzdGF0aWMgeworICAgICAgICBmb28xKE15VGVzdDE6Om0pOworICAgICAgICBmb28yPGVycm9yIGRlc2NyPSJBbWJpZ3VvdXMgbWV0aG9kIGNhbGw6IGJvdGggJ015VGVzdDEuZm9vMihJMSknIGFuZCAnTXlUZXN0MS5mb28yKEkyKScgbWF0Y2giPihNeVRlc3QxOjptKTwvZXJyb3I+OworCisgICAgICAgIGZvbzEoTXlUZXN0MTo6bTEpOworICAgICAgICBmb28yPGVycm9yIGRlc2NyPSJBbWJpZ3VvdXMgbWV0aG9kIGNhbGw6IGJvdGggJ015VGVzdDEuZm9vMihJMSknIGFuZCAnTXlUZXN0MS5mb28yKEkyKScgbWF0Y2giPihNeVRlc3QxOjptMSk8L2Vycm9yPjsgIAorICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvbGFtYmRhL21ldGhvZFJlZi9RdWFsaWZpZXJUeXBlQXJncy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9sYW1iZGEvbWV0aG9kUmVmL1F1YWxpZmllclR5cGVBcmdzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2MxZTA0ZgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvbGFtYmRhL21ldGhvZFJlZi9RdWFsaWZpZXJUeXBlQXJncy5qYXZhCkBAIC0wLDAgKzEsMzggQEAKK2ltcG9ydCBqYXZhLnV0aWwuKjsKKworY2xhc3MgTXlUZXN0IHsKKyAgaW50ZXJmYWNlIEkgeworICAgIFN0cmluZyBtKEZvbzxTdHJpbmc+IGYpOworICB9CisKKyAgY2xhc3MgRm9vPFg+IHsKKyAgICBTdHJpbmcgZm9vKCkgeworICAgICAgcmV0dXJuIG51bGw7CisgICAgfQorCisgICAgeworICAgICAgSSBpID0gRm9vPFN0cmluZz4gOjogZm9vOworICAgICAgPGVycm9yIGRlc2NyPSJJbmNvbXBhdGlibGUgdHlwZXMuIEZvdW5kOiAnPG1ldGhvZCByZWZlcmVuY2U+JywgcmVxdWlyZWQ6ICdNeVRlc3QuSSciPkkgaTEgPSBGb288SW50ZWdlcj4gOjogZm9vOzwvZXJyb3I+CisgICAgfQorICB9Cit9CisKK2NsYXNzIE15VGVzdDEgeworICAgIGludGVyZmFjZSBJIHsKKyAgICAgICBTdHJpbmcgbShGb28gZik7CisgICAgfQorCisgICAgc3RhdGljIGNsYXNzIEZvbzxYPiB7CisgICAgICAgU3RyaW5nIGZvbygpIHsgcmV0dXJuIG51bGw7IH0KKworICAgICAgIHN0YXRpYyB2b2lkIHRlc3QoKSB7CisgICAgICAgICAgSSBpID0gRm9vOjpmb287CisgICAgICAgfQorICAgIH0KK30KKworY2xhc3MgTXlUZXN0MiB7CisgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKyAgICBBcnJheXMuc29ydChuZXcgU3RyaW5nWzBdLCBTdHJpbmcuQ0FTRV9JTlNFTlNJVElWRV9PUkRFUjo6Y29tcGFyZSk7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2xhbWJkYS9tZXRob2RSZWYvUmF3UXVhbGlmaWVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2xhbWJkYS9tZXRob2RSZWYvUmF3UXVhbGlmaWVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWUxYWQ2YwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvbGFtYmRhL21ldGhvZFJlZi9SYXdRdWFsaWZpZXIuamF2YQpAQCAtMCwwICsxLDQ0IEBACitjbGFzcyBNeVRlc3QgeworICAgIAorICAgIHN0YXRpYyBjbGFzcyBGb288VD4geworICAgICAgICBUIG0oKSB7IAorICAgICAgICAgIHJldHVybiBudWxsOyAKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBpbnRlcmZhY2UgSSB7CisgICAgICAgIEludGVnZXIgbShGb288SW50ZWdlcj4gZik7CisgICAgfQorCisgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworICAgICAgICBJIGkgPSBGb286Om07CisgICAgfQorfQorCitjbGFzcyBNeVRlc3QxIHsKKyAgICAKKyAgICBpbnRlcmZhY2UgSTEgeworICAgICAgIHZvaWQgbShTdHJpbmcgcyk7CisgICAgfQorCisgICAgaW50ZXJmYWNlIEkyIHsKKyAgICAgICB2b2lkIG0oSW50ZWdlciBpKTsKKyAgICB9CisgICAgCisgICAgaW50ZXJmYWNlIEkzIHsKKyAgICAgICB2b2lkIG0oT2JqZWN0IG8pOworICAgIH0KKworICAgIHN0YXRpYyBjbGFzcyBGb288VCBleHRlbmRzIE51bWJlcj4geworICAgICAgICBGb28oVCB0KSB7fQorICAgIH0KKworIAorICAgIHN0YXRpYyB2b2lkIGZvbyhJMSBpKSB7fQorICAgIHN0YXRpYyB2b2lkIGZvbyhJMiBpKSB7fQorICAgIHN0YXRpYyB2b2lkIGZvbyhJMyBpKSB7fQorCisgICAgc3RhdGljIHsKKyAgICAgICAgZm9vKEZvbzo6bmV3KTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2xhbWJkYS9tZXRob2RSZWYvUmVmZXJlbmNlUGFyYW1ldGVycy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9sYW1iZGEvbWV0aG9kUmVmL1JlZmVyZW5jZVBhcmFtZXRlcnMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMzcwNTU3OQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvbGFtYmRhL21ldGhvZFJlZi9SZWZlcmVuY2VQYXJhbWV0ZXJzLmphdmEKQEAgLTAsMCArMSw5IEBACitjbGFzcyBNeVRlc3QgeworICAgIGludGVyZmFjZSBJPFg+IHsKKyAgICAgIFggXygpOworICAgIH0KKyAgICBzdGF0aWMgPFQ+IFQgYmFyKCkge3JldHVybiBudWxsO30KKyAgICBzdGF0aWMgeworICAgICAgSSBpID0gTXlUZXN0Ojo8U3RyaW5nPmJhcjsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2xhbWJkYS9tZXRob2RSZWYvUmVzb2x2ZUNvbmZsaWN0cy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9sYW1iZGEvbWV0aG9kUmVmL1Jlc29sdmVDb25mbGljdHMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ODFlMjA3Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9sYW1iZGEvbWV0aG9kUmVmL1Jlc29sdmVDb25mbGljdHMuamF2YQpAQCAtMCwwICsxLDEyIEBACitpbnRlcmZhY2UgRnVuYzxUSW4sIFRPdXQ+eworICAgIFRPdXQgcnVuKFRJbiBpbik7Cit9CisKKworY2xhc3MgTWFpbiB7CisKKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihmaW5hbCBTdHJpbmdbXSBhcmdzKSB7CisgICAgICAgIEZ1bmM8SW50ZWdlciwgU3RyaW5nPiBmdW5jID0gIEludGVnZXI6OnRvU3RyaW5nOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oZnVuYy5ydW4oNikpOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2xhbWJkYS9tZXRob2RSZWYvUmV0dXJuVHlwZVNwZWNpZmljLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2xhbWJkYS9tZXRob2RSZWYvUmV0dXJuVHlwZVNwZWNpZmljLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDcxNGZmZAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvbGFtYmRhL21ldGhvZFJlZi9SZXR1cm5UeXBlU3BlY2lmaWMuamF2YQpAQCAtMCwwICsxLDEwOSBAQAorY2xhc3MgTXlUZXN0IHsKKyAgICAKKyAgICBzdGF0aWMgY2xhc3MgRm9vPFQ+IHsKKyAgICAgICAgVCBtKCkgeyByZXR1cm4gbnVsbDsgfTsKKyAgICB9CisgICAgCisgICAgaW50ZXJmYWNlIEkxIHsKKyAgICAgICAgRm9vPE9iamVjdD4gbShGb288U3RyaW5nPiBmKTsKKyAgICB9CisKKyAgICBpbnRlcmZhY2UgSTIgeworICAgICAgICBJbnRlZ2VyIG0oRm9vPEludGVnZXI+IGYpOworICAgIH0KKyAgICAKKyAgICBpbnRlcmZhY2UgSTMgeworICAgICAgICBPYmplY3QgbShGb288SW50ZWdlcj4gZik7CisgICAgfQorICAgIAorICAgIHByaXZhdGUgc3RhdGljIHZvaWQgPHdhcm5pbmcgZGVzY3I9IlByaXZhdGUgbWV0aG9kICdmb28oTXlUZXN0LkkxKScgaXMgbmV2ZXIgdXNlZCI+Zm9vPC93YXJuaW5nPihJMSBpKSB7CisgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oaSk7CisgICAgfQorCisgICAgcHJpdmF0ZSBzdGF0aWMgdm9pZCBmb28oSTIgaSkgeyAgCisgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oaSk7CisgICAgfQorCisgICAgcHJpdmF0ZSBzdGF0aWMgdm9pZCA8d2FybmluZyBkZXNjcj0iUHJpdmF0ZSBtZXRob2QgJ2ZvbyhNeVRlc3QuSTMpJyBpcyBuZXZlciB1c2VkIj5mb288L3dhcm5pbmc+KEkzIGkpIHsKKyAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihpKTsKKyAgICB9CisKKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisgICAgICAgIGZvbyhGb286Om0pOworICAgIH0KK30KKworY2xhc3MgTXlUZXN0MSB7CisgICAgCisgICAgaW50ZXJmYWNlIEkxIHsKKyAgICAgICBGb288Pz4gbShTdHJpbmcgcyk7CisgICAgfQorCisKKyAgICBpbnRlcmZhY2UgSTIgeworICAgICAgICBGb288Pz4gbShJbnRlZ2VyIGkpOworICAgIH0KKyAgICAKKyAgICBpbnRlcmZhY2UgSTMgeworICAgICAgICBGb288TnVtYmVyPiBtKEludGVnZXIgaSk7CisgICAgfQorCisgICAgc3RhdGljIGNsYXNzIEZvbzxUIGV4dGVuZHMgTnVtYmVyPiB7CisgICAgICAgIEZvbyhUIHQpIHsKKyAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4odCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwcml2YXRlIHN0YXRpYyB2b2lkIDx3YXJuaW5nIGRlc2NyPSJQcml2YXRlIG1ldGhvZCAnbShNeVRlc3QxLkkxKScgaXMgbmV2ZXIgdXNlZCI+bTwvd2FybmluZz4oSTEgaSkgeworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oaSk7CisgICAgfQorCisgICAgcHJpdmF0ZSBzdGF0aWMgdm9pZCBtKEkyIGkpIHsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKGkpOworICAgIH0KKworICAgIHByaXZhdGUgc3RhdGljIHZvaWQgPHdhcm5pbmcgZGVzY3I9IlByaXZhdGUgbWV0aG9kICdtKE15VGVzdDEuSTMpJyBpcyBuZXZlciB1c2VkIj5tPC93YXJuaW5nPihJMyBpKSB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihpKTsKKyAgICB9CisKKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisgICAgICAgIG0oRm9vOjpuZXcpOworICAgIH0KK30KK2NsYXNzIE15VGVzdDIgeworICAgIAorICAgIGludGVyZmFjZSBJMSB7CisgICAgICAgRm9vPD8+IG0oU3RyaW5nIHMpOworICAgIH0KKworCisgICAgaW50ZXJmYWNlIEkyIHsKKyAgICAgICAgRm9vPEludGVnZXI+IG0oSW50ZWdlciBpKTsKKyAgICB9CisgICAgCisgICAgaW50ZXJmYWNlIEkzIHsKKyAgICAgICAgRm9vPE51bWJlcj4gbShJbnRlZ2VyIGkpOworICAgIH0KKworICAgIHN0YXRpYyBjbGFzcyBGb288VCBleHRlbmRzIE51bWJlcj4geworICAgICAgICBGb28oVCB0KSB7CisgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKHQpOworICAgICAgICB9CisgICAgfQorCisgICAgcHJpdmF0ZSBzdGF0aWMgdm9pZCA8d2FybmluZyBkZXNjcj0iUHJpdmF0ZSBtZXRob2QgJ20oTXlUZXN0Mi5JMSknIGlzIG5ldmVyIHVzZWQiPm08L3dhcm5pbmc+KEkxIGkpIHsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKGkpOworICAgIH0KKworICAgIHByaXZhdGUgc3RhdGljIHZvaWQgbShJMiBpKSB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihpKTsKKyAgICB9CisKKyAgICBwcml2YXRlIHN0YXRpYyB2b2lkIDx3YXJuaW5nIGRlc2NyPSJQcml2YXRlIG1ldGhvZCAnbShNeVRlc3QyLkkzKScgaXMgbmV2ZXIgdXNlZCI+bTwvd2FybmluZz4oSTMgaSkgeworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oaSk7CisgICAgfQorCisgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworICAgICAgICBtKEZvbzo6bmV3KTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2xhbWJkYS9tZXRob2RSZWYvU09FLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2xhbWJkYS9tZXRob2RSZWYvU09FLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzFjYjM5NAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvbGFtYmRhL21ldGhvZFJlZi9TT0UuamF2YQpAQCAtMCwwICsxLDggQEAKK2ltcG9ydCBqYXZhLnV0aWwuKjsKKworY2xhc3MgTGFtYmRhVGVzdCB7CisgICAgcHVibGljIHZvaWQgdGVzdFIoKSB7CisgICAgICAgIDxlcnJvciBkZXNjcj0iSW5jb21wYXRpYmxlIHR5cGVzLiBGb3VuZDogJ2phdmEubGFuZy5TdHJpbmcnLCByZXF1aXJlZDogJzxtZXRob2QgcmVmZXJlbmNlPiciPm5ldyBBcnJheUxpc3Q8U3RyaW5nPigpIDo6IHNpemUgPSAiIjwvZXJyb3I+OyAKKworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2xhbWJkYS9tZXRob2RSZWYvU3RhdGljUHJvYmxlbXMuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvbGFtYmRhL21ldGhvZFJlZi9TdGF0aWNQcm9ibGVtcy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFlNzczMzYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2xhbWJkYS9tZXRob2RSZWYvU3RhdGljUHJvYmxlbXMuamF2YQpAQCAtMCwwICsxLDEyNCBAQAorY2xhc3MgTXlUZXN0IHsKKyAgICBpbnRlcmZhY2UgSSB7CisgICAgICAgU3RyaW5nIG0oRm9vIGYpOworICAgIH0KKworICAgIHN0YXRpYyBjbGFzcyBGb288WD4geworICAgICAgIFN0cmluZyBmb28oKSB7IHJldHVybiBudWxsOyB9CisKKyAgICAgICBGb288WD4gZ2V0Rm9vKCkgeyByZXR1cm4gdGhpczsgfQorCisgICAgICAgc3RhdGljIHZvaWQgdGVzdCgpIHsKKyAgICAgICAgICBJIGkxID0gRm9vLjxlcnJvciBkZXNjcj0iTm9uLXN0YXRpYyBtZXRob2QgJ2dldEZvbygpJyBjYW5ub3QgYmUgcmVmZXJlbmNlZCBmcm9tIGEgc3RhdGljIGNvbnRleHQiPmdldEZvbzwvZXJyb3I+KCk6OmZvbzsKKyAgICAgICAgICBJIGkyID0gPGVycm9yIGRlc2NyPSInTXlUZXN0LkZvby50aGlzJyBjYW5ub3QgYmUgcmVmZXJlbmNlZCBmcm9tIGEgc3RhdGljIGNvbnRleHQiPnRoaXM8L2Vycm9yPjo6Zm9vOworICAgICAgICAgIEkgaTMgPSBGb28gOjogZm9vOworICAgICAgIH0KKyAgICB9Cit9CitjbGFzcyBNeVRlc3QxIHsKKyAgICB2b2lkIG0xKE15VGVzdDEgcmVjLCBTdHJpbmcgeCkgeyB9CisgICAgdm9pZCBtMShTdHJpbmcgeCkgeyB9CisKKyAgICBzdGF0aWMgdm9pZCBtMihTdHJpbmcgeCkgeyB9CisgICAgc3RhdGljIHZvaWQgbTIoTXlUZXN0MSByZWMsIFN0cmluZyB4KSB7fQorCisgICAgdm9pZCBtMyhNeVRlc3QxIHJlYywgU3RyaW5nIHgpIHsgfQorICAgIHN0YXRpYyB2b2lkIG0zKFN0cmluZyB4KSB7IH0KKworICAgIHZvaWQgbTQoU3RyaW5nIHgpIHsgfQorICAgIHN0YXRpYyB2b2lkIG00KE15VGVzdDEgcmVjLCBTdHJpbmcgeCkgeyB9CisKKyAgICBpbnRlcmZhY2UgSTEgeworICAgICAgICB2b2lkIG0oU3RyaW5nIHgpOworICAgIH0KKworICAgIGludGVyZmFjZSBJMiB7CisgICAgICAgIHZvaWQgbShNeVRlc3QxIHJlYywgU3RyaW5nIHgpOworICAgIH0KKworICAgIHN0YXRpYyB2b2lkIGNhbGwxKEkxIHMpIHsgICB9CisKKyAgICBzdGF0aWMgdm9pZCBjYWxsMihJMiBzKSB7ICAgfQorCisgICAgc3RhdGljIHZvaWQgdGVzdDEoKSB7CisgICAgICAgIDxlcnJvciBkZXNjcj0iSW5jb21wYXRpYmxlIHR5cGVzLiBGb3VuZDogJzxtZXRob2QgcmVmZXJlbmNlPicsIHJlcXVpcmVkOiAnTXlUZXN0MS5JMSciPkkxIHMxID0gTXlUZXN0MSA6Om0xOzwvZXJyb3I+CisgICAgICAgIGNhbGwxPGVycm9yIGRlc2NyPSInY2FsbDEoTXlUZXN0MS5JMSknIGluICdNeVRlc3QxJyBjYW5ub3QgYmUgYXBwbGllZCB0byAnKDxtZXRob2QgcmVmZXJlbmNlPiknIj4oTXlUZXN0MTo6bTEpPC9lcnJvcj47CisgICAgICAgIEkxIHMyID0gTXlUZXN0MSAgOjogbTI7CisgICAgICAgIGNhbGwxKE15VGVzdDE6Om0yKTsKKyAgICAgICAgSTEgczMgPSBNeVRlc3QxOjptMzsKKyAgICAgICAgY2FsbDEoTXlUZXN0MTo6bTMpOworICAgICAgICA8ZXJyb3IgZGVzY3I9IkluY29tcGF0aWJsZSB0eXBlcy4gRm91bmQ6ICc8bWV0aG9kIHJlZmVyZW5jZT4nLCByZXF1aXJlZDogJ015VGVzdDEuSTEnIj5JMSBzNCA9IE15VGVzdDE6Om00OzwvZXJyb3I+CisgICAgICAgIGNhbGwxPGVycm9yIGRlc2NyPSInY2FsbDEoTXlUZXN0MS5JMSknIGluICdNeVRlc3QxJyBjYW5ub3QgYmUgYXBwbGllZCB0byAnKDxtZXRob2QgcmVmZXJlbmNlPiknIj4oTXlUZXN0MTo6bTQpPC9lcnJvcj47CisgICAgfQorCisgICAgc3RhdGljIHZvaWQgdGVzdDIoKSB7CisgICAgICAgIEkyIHMxID0gTXlUZXN0MSA6OiBtMTsKKyAgICAgICAgY2FsbDIoTXlUZXN0MTo6bTEpOworICAgICAgICBJMiBzMiA9IE15VGVzdDEgOjogbTI7CisgICAgICAgIGNhbGwyKE15VGVzdDE6Om0yKTsKKworICAgICAgICA8ZXJyb3IgZGVzY3I9IkluY29tcGF0aWJsZSB0eXBlcy4gRm91bmQ6ICc8bWV0aG9kIHJlZmVyZW5jZT4nLCByZXF1aXJlZDogJ015VGVzdDEuSTInIj5JMiBzMyA9IE15VGVzdDEgOjogbTM7PC9lcnJvcj4KKyAgICAgICAgY2FsbDI8ZXJyb3IgZGVzY3I9IidjYWxsMihNeVRlc3QxLkkyKScgaW4gJ015VGVzdDEnIGNhbm5vdCBiZSBhcHBsaWVkIHRvICcoPG1ldGhvZCByZWZlcmVuY2U+KSciPihNeVRlc3QxOjptMyk8L2Vycm9yPjsKKyAgICAgICAgPGVycm9yIGRlc2NyPSJJbmNvbXBhdGlibGUgdHlwZXMuIEZvdW5kOiAnPG1ldGhvZCByZWZlcmVuY2U+JywgcmVxdWlyZWQ6ICdNeVRlc3QxLkkyJyI+STIgczQgPSBNeVRlc3QxIDo6bTQ7PC9lcnJvcj4KKyAgICAgICAgY2FsbDI8ZXJyb3IgZGVzY3I9IidjYWxsMihNeVRlc3QxLkkyKScgaW4gJ015VGVzdDEnIGNhbm5vdCBiZSBhcHBsaWVkIHRvICcoPG1ldGhvZCByZWZlcmVuY2U+KSciPihNeVRlc3QxOjptNCk8L2Vycm9yPjsKKyAgICB9Cit9CisKK2NsYXNzIE15VGVzdDIgeworICAgIHZvaWQgbTEoU3RyaW5nIHgpIHsgfQorICAgIHZvaWQgbTEoTXlUZXN0MiByZWMsIFN0cmluZyB4KSB7IH0KKworICAgIHN0YXRpYyB2b2lkIG0yKE15VGVzdDIgcmVjLCBTdHJpbmcgeCkge30KKyAgICBzdGF0aWMgdm9pZCBtMihTdHJpbmcgeCkgeyB9CisKKyAgICBzdGF0aWMgdm9pZCBtMyhTdHJpbmcgeCkgeyB9CisgICAgdm9pZCBtMyhNeVRlc3QyIHJlYywgU3RyaW5nIHgpIHsgfQorCisgICAgc3RhdGljIHZvaWQgbTQoTXlUZXN0MiByZWMsIFN0cmluZyB4KSB7IH0KKyAgICB2b2lkIG00KFN0cmluZyB4KSB7IH0KKworICAgIGludGVyZmFjZSBJMSB7CisgICAgICAgIHZvaWQgbShTdHJpbmcgeCk7CisgICAgfQorCisgICAgaW50ZXJmYWNlIEkyIHsKKyAgICAgICAgdm9pZCBtKE15VGVzdDIgcmVjLCBTdHJpbmcgeCk7CisgICAgfQorCisgICAgc3RhdGljIHZvaWQgY2FsbDEoSTEgcykgeyAgIH0KKworICAgIHN0YXRpYyB2b2lkIGNhbGwyKEkyIHMpIHsgICB9CisKKyAgICBzdGF0aWMgdm9pZCB0ZXN0MSgpIHsKKyAgICAgICAgPGVycm9yIGRlc2NyPSJJbmNvbXBhdGlibGUgdHlwZXMuIEZvdW5kOiAnPG1ldGhvZCByZWZlcmVuY2U+JywgcmVxdWlyZWQ6ICdNeVRlc3QyLkkxJyI+STEgczEgPSBNeVRlc3QyIDo6bTE7PC9lcnJvcj4KKyAgICAgICAgY2FsbDE8ZXJyb3IgZGVzY3I9IidjYWxsMShNeVRlc3QyLkkxKScgaW4gJ015VGVzdDInIGNhbm5vdCBiZSBhcHBsaWVkIHRvICcoPG1ldGhvZCByZWZlcmVuY2U+KSciPihNeVRlc3QyOjptMSk8L2Vycm9yPjsKKyAgICAgICAgSTEgczIgPSBNeVRlc3QyICA6OiBtMjsKKyAgICAgICAgY2FsbDEoTXlUZXN0Mjo6bTIpOworICAgICAgICBJMSBzMyA9IE15VGVzdDI6Om0zOworICAgICAgICBjYWxsMShNeVRlc3QyOjptMyk7CisgICAgICAgIDxlcnJvciBkZXNjcj0iSW5jb21wYXRpYmxlIHR5cGVzLiBGb3VuZDogJzxtZXRob2QgcmVmZXJlbmNlPicsIHJlcXVpcmVkOiAnTXlUZXN0Mi5JMSciPkkxIHM0ID0gTXlUZXN0Mjo6bTQ7PC9lcnJvcj4KKyAgICAgICAgY2FsbDE8ZXJyb3IgZGVzY3I9IidjYWxsMShNeVRlc3QyLkkxKScgaW4gJ015VGVzdDInIGNhbm5vdCBiZSBhcHBsaWVkIHRvICcoPG1ldGhvZCByZWZlcmVuY2U+KSciPihNeVRlc3QyOjptNCk8L2Vycm9yPjsKKyAgICB9CisKKyAgICBzdGF0aWMgdm9pZCB0ZXN0MigpIHsKKyAgICAgICAgSTIgczEgPSBNeVRlc3QyIDo6IG0xOworICAgICAgICBjYWxsMihNeVRlc3QyOjptMSk7CisgICAgICAgIEkyIHMyID0gTXlUZXN0MiA6OiBtMjsKKyAgICAgICAgY2FsbDIoTXlUZXN0Mjo6bTIpOworCisgICAgICAgIDxlcnJvciBkZXNjcj0iSW5jb21wYXRpYmxlIHR5cGVzLiBGb3VuZDogJzxtZXRob2QgcmVmZXJlbmNlPicsIHJlcXVpcmVkOiAnTXlUZXN0Mi5JMiciPkkyIHMzID0gTXlUZXN0MiA6OiBtMzs8L2Vycm9yPgorICAgICAgICBjYWxsMjxlcnJvciBkZXNjcj0iJ2NhbGwyKE15VGVzdDIuSTIpJyBpbiAnTXlUZXN0MicgY2Fubm90IGJlIGFwcGxpZWQgdG8gJyg8bWV0aG9kIHJlZmVyZW5jZT4pJyI+KE15VGVzdDI6Om0zKTwvZXJyb3I+OworICAgICAgICA8ZXJyb3IgZGVzY3I9IkluY29tcGF0aWJsZSB0eXBlcy4gRm91bmQ6ICc8bWV0aG9kIHJlZmVyZW5jZT4nLCByZXF1aXJlZDogJ015VGVzdDIuSTInIj5JMiBzNCA9IE15VGVzdDIgOjptNDs8L2Vycm9yPgorICAgICAgICBjYWxsMjxlcnJvciBkZXNjcj0iJ2NhbGwyKE15VGVzdDIuSTIpJyBpbiAnTXlUZXN0MicgY2Fubm90IGJlIGFwcGxpZWQgdG8gJyg8bWV0aG9kIHJlZmVyZW5jZT4pJyI+KE15VGVzdDI6Om00KTwvZXJyb3I+OworICAgIH0KKworICAgIHN0YXRpYyB2b2lkIGNhbGwzKEkxIHMpIHt9CisgICAgc3RhdGljIHZvaWQgY2FsbDMoSTIgcykge30KKyAgICBzdGF0aWMgeworICAgICAgICAgIGNhbGwzKE15VGVzdDI6Om0xKTsKKyAgICAgICAgICBjYWxsMzxlcnJvciBkZXNjcj0iQW1iaWd1b3VzIG1ldGhvZCBjYWxsOiBib3RoICdNeVRlc3QyLmNhbGwzKEkxKScgYW5kICdNeVRlc3QyLmNhbGwzKEkyKScgbWF0Y2giPihNeVRlc3QyOjptMik8L2Vycm9yPjsKKyAgICAgICAgICBjYWxsMyhNeVRlc3QyOjptMyk7CisgICAgICAgICAgY2FsbDM8ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIG1ldGhvZCAnY2FsbDMoPG1ldGhvZCByZWZlcmVuY2U+KSciPihNeVRlc3QyOjptNCk8L2Vycm9yPjsKKyAgICB9Cit9CisKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvbGFtYmRhL21ldGhvZFJlZi9UeXBlQXJndW1lbnRzT25NZXRob2RSZWZzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2xhbWJkYS9tZXRob2RSZWYvVHlwZUFyZ3VtZW50c09uTWV0aG9kUmVmcy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFmZTAwZGEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2xhbWJkYS9tZXRob2RSZWYvVHlwZUFyZ3VtZW50c09uTWV0aG9kUmVmcy5qYXZhCkBAIC0wLDAgKzEsMTcgQEAKK2NsYXNzIFRlc3Q8VD4geworICB2b2lkIGZvbyhTdHJpbmcgcCkge30KKyAgPFU+IHZvaWQgZm9vMShTdHJpbmcgcCkge30KKyAgc3RhdGljIHZvaWQgZm9vMihTdHJpbmcgcCkge30KKyAgc3RhdGljIDxVPiB2b2lkIGZvbzMoU3RyaW5nIHApIHt9CisgIHZvaWQgdGVzdCgpIHsKKyAgICBUZXN0IHRlc3QgPSBuZXcgVGVzdDxTdHJpbmc+KCk7CisgICAgQmxhaEJsYWg8U3RyaW5nPiBibGFoQmxhaCA9IHRlc3Q6OjxTdHJpbmc+Zm9vOworICAgIEJsYWhCbGFoPFN0cmluZz4gYmxhaEJsYWgxID0gdGVzdDo6PFN0cmluZz5mb28xOworICAgIEJsYWhCbGFoPFN0cmluZz4gYmxhaEJsYWgyID0gdGVzdDo6PFN0cmluZz5mb28yOworICAgIEJsYWhCbGFoPFN0cmluZz4gYmxhaEJsYWgzID0gdGVzdDo6PFN0cmluZz5mb28zOworICB9Cit9CisKK2ludGVyZmFjZSBCbGFoQmxhaDxUPiB7CisgIHZvaWQgYmFyKFQgaSk7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9sYW1iZGEvbWV0aG9kUmVmL1ZhbGlkQ29udGV4dC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9sYW1iZGEvbWV0aG9kUmVmL1ZhbGlkQ29udGV4dC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUzNmFlZmQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2xhbWJkYS9tZXRob2RSZWYvVmFsaWRDb250ZXh0LmphdmEKQEAgLTAsMCArMSwxNyBAQAorcHVibGljIGNsYXNzIFRlc3QgeworICB7CisgICAgaWYgKDxlcnJvciBkZXNjcj0iTWV0aG9kIHJlZmVyZW5jZSBleHByZXNzaW9uIGlzIG5vdCBleHBlY3RlZCBoZXJlIj5UZXN0OjpsZW5ndGggaW5zdGFuY2VvZiBTdHJpbmc8L2Vycm9yPikgeworICAgIH0KKyAgICBiYXIoVGVzdDo6bGVuZ3RoKTsKKyAgfQorCisgIHB1YmxpYyBzdGF0aWMgSW50ZWdlciBsZW5ndGgoU3RyaW5nIHMpIHsKKyAgICByZXR1cm4gcy5sZW5ndGgoKTsKKyAgfQorICAKKyAgcHVibGljIHN0YXRpYyB2b2lkIGJhcihCYXIgYmFyKSB7fQorICAKKyAgaW50ZXJmYWNlIEJhciB7CisgICAgSW50ZWdlciBfKFN0cmluZyBzKTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvbGFtYmRhL21ldGhvZFJlZi9WYXJhcmdzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2xhbWJkYS9tZXRob2RSZWYvVmFyYXJncy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI0YTUxYTIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2xhbWJkYS9tZXRob2RSZWYvVmFyYXJncy5qYXZhCkBAIC0wLDAgKzEsOTEgQEAKK2NsYXNzIE15VGVzdDEgeworICAgIGludGVyZmFjZSBJIHsKKyAgICAgICAgdm9pZCBtKGludCBpMSwgaW50IGkyKTsKKyAgICB9CisKKyAgICBzdGF0aWMgdm9pZCBtMShpbnQgaTEsIGludCBpMikgeyB9CisgICAgc3RhdGljIHZvaWQgbTEoSW50ZWdlciBpMSwgaW50IGkyKSB7IH0KKyAgICBzdGF0aWMgdm9pZCBtMShpbnQgaTEsIEludGVnZXIgaTIpIHsgfQorICAgIHN0YXRpYyB2b2lkIG0xKEludGVnZXIgaTEsIEludGVnZXIgaTIpIHt9CisgICAgc3RhdGljIHZvaWQgbTEoSW50ZWdlci4uLiBpcykgeyB9CisgICAgCisgICAgc3RhdGljIHZvaWQgbTIoaW50Li4uIGlzKSB7IH0KKyAgICBzdGF0aWMgdm9pZCBtMihkb3VibGUuLi4gZHMpIHt9CisKKyAgICBzdGF0aWMgdm9pZCBtMyhpbnQuLi4gaXMpIHsgfQorICAgIHN0YXRpYyB2b2lkIG0zKE9iamVjdC4uLiBkcykge30KKworICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKyAgICAgICAgSSBpMSA9IE15VGVzdDE6Om0xOworICAgICAgICBpMS5tKDQyLDQyKTsKKworICAgICAgICBJIGkyID0gTXlUZXN0MSA6OiBtMjsKKyAgICAgICAgaTIubSg0Miw0Mik7CisKKyAgICAgICAgPGVycm9yIGRlc2NyPSJJbmNvbXBhdGlibGUgdHlwZXMuIEZvdW5kOiAnPG1ldGhvZCByZWZlcmVuY2U+JywgcmVxdWlyZWQ6ICdNeVRlc3QxLkknIj5JIGkzID0gTXlUZXN0MSA6OiBtMzs8L2Vycm9yPiAgCisgICAgfQorfQorCitjbGFzcyBNeVRlc3QgeworCisgICAgaW50ZXJmYWNlIEkxIHsKKyAgICAgICAgdm9pZCBtKGludCBpKTsKKyAgICB9CisKKyAgICBpbnRlcmZhY2UgSTIgeworICAgICAgICB2b2lkIG0oTXlUZXN0IHQsIGludCBpKTsKKyAgICB9CisKKyAgICBzdGF0aWMgdm9pZCBzdGF0aWNfMShJbnRlZ2VyIGkpIHt9CisgICAgc3RhdGljIHZvaWQgc3RhdGljXzIoSW50ZWdlciBpMSwgSW50ZWdlciBpMikge30KKyAgICBzdGF0aWMgdm9pZCBzdGF0aWNfMyhTdHJpbmcgcykge30KKyAgICBzdGF0aWMgdm9pZCBzdGF0aWNfNChTdHJpbmcuLi4gc3MpIHt9CisKKyAgICB2b2lkIF8xKEludGVnZXIgaSkge30KKyAgICB2b2lkIF8yKEludGVnZXIgaTEsIEludGVnZXIgaTIpIHt9CisgICAgdm9pZCBfMyhTdHJpbmcgcykge30KKyAgICB2b2lkIF80KFN0cmluZy4uLiBzcykge30KKworICAgIHN0YXRpYyB7CisgICAgICAgIEkxIGkxID0gTXlUZXN0OjpzdGF0aWNfMTsKKyAgICAgICAgPGVycm9yIGRlc2NyPSJJbmNvbXBhdGlibGUgdHlwZXMuIEZvdW5kOiAnPG1ldGhvZCByZWZlcmVuY2U+JywgcmVxdWlyZWQ6ICdNeVRlc3QuSTEnIj5JMSBpMiA9IE15VGVzdDo6c3RhdGljXzI7PC9lcnJvcj4KKyAgICAgICAgPGVycm9yIGRlc2NyPSJJbmNvbXBhdGlibGUgdHlwZXMuIEZvdW5kOiAnPG1ldGhvZCByZWZlcmVuY2U+JywgcmVxdWlyZWQ6ICdNeVRlc3QuSTEnIj5JMSBpMyA9IE15VGVzdDo6c3RhdGljXzM7PC9lcnJvcj4KKyAgICAgICAgPGVycm9yIGRlc2NyPSJJbmNvbXBhdGlibGUgdHlwZXMuIEZvdW5kOiAnPG1ldGhvZCByZWZlcmVuY2U+JywgcmVxdWlyZWQ6ICdNeVRlc3QuSTEnIj5JMSBpNCA9IE15VGVzdDo6c3RhdGljXzQ7PC9lcnJvcj4KKyAgICB9CisKKworICAgIHsKKyAgICAgICAgPGVycm9yIGRlc2NyPSJJbmNvbXBhdGlibGUgdHlwZXMuIEZvdW5kOiAnPG1ldGhvZCByZWZlcmVuY2U+JywgcmVxdWlyZWQ6ICdNeVRlc3QuSTEnIj5JMSBpXzEgPSBNeVRlc3Q6Ol8xOzwvZXJyb3I+CisgICAgICAgIDxlcnJvciBkZXNjcj0iSW5jb21wYXRpYmxlIHR5cGVzLiBGb3VuZDogJzxtZXRob2QgcmVmZXJlbmNlPicsIHJlcXVpcmVkOiAnTXlUZXN0LkkxJyI+STEgaV8yID0gTXlUZXN0OjpfMjs8L2Vycm9yPgorICAgICAgICA8ZXJyb3IgZGVzY3I9IkluY29tcGF0aWJsZSB0eXBlcy4gRm91bmQ6ICc8bWV0aG9kIHJlZmVyZW5jZT4nLCByZXF1aXJlZDogJ015VGVzdC5JMSciPkkxIGlfMyA9IE15VGVzdDo6XzM7PC9lcnJvcj4KKyAgICAgICAgPGVycm9yIGRlc2NyPSJJbmNvbXBhdGlibGUgdHlwZXMuIEZvdW5kOiAnPG1ldGhvZCByZWZlcmVuY2U+JywgcmVxdWlyZWQ6ICdNeVRlc3QuSTEnIj5JMSBpXzQgPSBNeVRlc3Q6Ol80OzwvZXJyb3I+CisKKyAgICAgICAgSTEgaTEgPSB0aGlzOjpfMTsKKyAgICAgICAgPGVycm9yIGRlc2NyPSJJbmNvbXBhdGlibGUgdHlwZXMuIEZvdW5kOiAnPG1ldGhvZCByZWZlcmVuY2U+JywgcmVxdWlyZWQ6ICdNeVRlc3QuSTEnIj5JMSBpMiA9IHRoaXM6Ol8yOzwvZXJyb3I+CisgICAgICAgIDxlcnJvciBkZXNjcj0iSW5jb21wYXRpYmxlIHR5cGVzLiBGb3VuZDogJzxtZXRob2QgcmVmZXJlbmNlPicsIHJlcXVpcmVkOiAnTXlUZXN0LkkxJyI+STEgaTMgPSB0aGlzOjpfMzs8L2Vycm9yPgorICAgICAgICA8ZXJyb3IgZGVzY3I9IkluY29tcGF0aWJsZSB0eXBlcy4gRm91bmQ6ICc8bWV0aG9kIHJlZmVyZW5jZT4nLCByZXF1aXJlZDogJ015VGVzdC5JMSciPkkxIGk0ID0gdGhpczo6XzQ7PC9lcnJvcj4KKworICAgICAgICA8ZXJyb3IgZGVzY3I9IkluY29tcGF0aWJsZSB0eXBlcy4gRm91bmQ6ICc8bWV0aG9kIHJlZmVyZW5jZT4nLCByZXF1aXJlZDogJ015VGVzdC5JMiciPkkyIGkyMSA9IE15VGVzdDo6bTE7PC9lcnJvcj4KKyAgICAgICAgPGVycm9yIGRlc2NyPSJJbmNvbXBhdGlibGUgdHlwZXMuIEZvdW5kOiAnPG1ldGhvZCByZWZlcmVuY2U+JywgcmVxdWlyZWQ6ICdNeVRlc3QuSTInIj5JMiBpMjIgPSBNeVRlc3Q6Om0yOzwvZXJyb3I+CisgICAgICAgIDxlcnJvciBkZXNjcj0iSW5jb21wYXRpYmxlIHR5cGVzLiBGb3VuZDogJzxtZXRob2QgcmVmZXJlbmNlPicsIHJlcXVpcmVkOiAnTXlUZXN0LkkyJyI+STIgaTIzID0gTXlUZXN0OjptMzs8L2Vycm9yPgorICAgICAgICA8ZXJyb3IgZGVzY3I9IkluY29tcGF0aWJsZSB0eXBlcy4gRm91bmQ6ICc8bWV0aG9kIHJlZmVyZW5jZT4nLCByZXF1aXJlZDogJ015VGVzdC5JMiciPkkyIGkyNCA9IE15VGVzdDo6bTQ7PC9lcnJvcj4KKyAgICB9Cit9CisKK2NsYXNzIE15VGVzdDIgeworCisgICAgaW50ZXJmYWNlIElCb29sIHsgdm9pZCBtKGJvb2xlYW5bXSBhKTsgfQorICAgIGludGVyZmFjZSBJSW50IHsgdm9pZCBtKGludFtdIGEpOyB9CisgICAgaW50ZXJmYWNlIElEYmwgeyB2b2lkIG0oZG91YmxlW10gYSk7IH0KKyAgICBpbnRlcmZhY2UgSU9iaiB7IHZvaWQgbShPYmplY3RbXSBhKTsgfQorCisgICAgc3RhdGljIHZvaWQgZm9vKE9iamVjdC4uLiB2aSkge30KKworICAgIHN0YXRpYyB7CisgICAgICAgIElCb29sIGlCb29sID0gTXlUZXN0Mjo6Zm9vOworICAgICAgICBJSW50IGlJbnQgPSBNeVRlc3QyOjpmb287CisgICAgICAgIElEYmwgaURibCA9IE15VGVzdDI6OmZvbzsKKyAgICAgICAgSU9iaiBpT2JqID0gTXlUZXN0Mjo6Zm9vOworICAgIH0KK30KKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9sYW1iZGEvbWV0aG9kUmVmL1ZhcmFyZ3MxLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2xhbWJkYS9tZXRob2RSZWYvVmFyYXJnczEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NzI4OTliCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9sYW1iZGEvbWV0aG9kUmVmL1ZhcmFyZ3MxLmphdmEKQEAgLTAsMCArMSwyMiBAQAorY2xhc3MgVGVzdCB7CisgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nLi4uIGFyZ3MpIHt9CisgICAgdm9pZCB0ZXN0KCkgeworICAgICAgICBGb28gZm9vID0gVGVzdDo6bWFpbjsKKyAgICB9Cit9CisKK2ludGVyZmFjZSBGb28geworICAgIHZvaWQgYmFyKCk7Cit9CisKK2NsYXNzIFRlc3QxIHsKKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmcuLi4gYXJncykge30KKworICAgIHZvaWQgdGVzdCgpIHsKKyAgICAgICAgRm9vMSBmb28gPSBUZXN0MTo6bWFpbjsKKyAgICB9Cit9CisKK2ludGVyZmFjZSBGb28xIHsKKyAgICB2b2lkIGJhcihTdHJpbmcuLi4gcyk7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9sYW1iZGEvbWV0aG9kUmVmL1ZhcmFyZ3NJblJlY2VpdmVyUG9zaXRpb24uamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvbGFtYmRhL21ldGhvZFJlZi9WYXJhcmdzSW5SZWNlaXZlclBvc2l0aW9uLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjZjMWUzZgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvbGFtYmRhL21ldGhvZFJlZi9WYXJhcmdzSW5SZWNlaXZlclBvc2l0aW9uLmphdmEKQEAgLTAsMCArMSwyOCBAQAoraW1wb3J0IGphdmEudXRpbC4qOworCitjbGFzcyBUZXN0IHsKKyAgICB2b2lkIHRlc3QoKSB7CisgICAgICAgIENvbXBhcmF0b3I8VGVzdD4gcjIgPSBUZXN0Ojp5eXk7CisgICAgICAgIDxlcnJvciBkZXNjcj0iSW5jb21wYXRpYmxlIHR5cGVzLiBGb3VuZDogJzxtZXRob2QgcmVmZXJlbmNlPicsIHJlcXVpcmVkOiAnQ29tcGFyYXRvcjE8VGVzdD4nIj5Db21wYXJhdG9yMTxUZXN0PiBjMSA9IFRlc3Q6Onl5eTs8L2Vycm9yPgorICAgICAgICA8ZXJyb3IgZGVzY3I9IkluY29tcGF0aWJsZSB0eXBlcy4gRm91bmQ6ICc8bWV0aG9kIHJlZmVyZW5jZT4nLCByZXF1aXJlZDogJ0NvbXBhcmF0b3IxPFRlc3Q+JyI+Q29tcGFyYXRvcjE8VGVzdD4gYzIgPSBUZXN0Ojp4eHg7PC9lcnJvcj4KKyAgICB9CisgICAgaW50IHl5eShUZXN0Li4uIHApIHsgcmV0dXJuIDE7IH0KKyAgICBpbnQgeHh4KFRlc3QgdCkge3JldHVybiA0Mjt9Cit9CisKK2ludGVyZmFjZSBDb21wYXJhdG9yMTxUPiB7CisgICAgaW50IGNvbXBhcmUoVC4uLiBvMSk7Cit9CisKKworY2xhc3MgVGVzdDEgeworICAgIHZvaWQgdGVzdCgpIHsKKyAgICAgICAgQmFyMiBiYXIyID0gVGVzdDE6Onl5eTsKKyAgICB9CisKKyAgICB2b2lkIHl5eShUZXN0MS4uLiBwKSB7fQorCisgICAgaW50ZXJmYWNlIEJhcjIgeworICAgICAgcHVibGljIHZvaWQgeHh4KFRlc3QxIHAsIFRlc3QxLi4uIHBzKTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2xhbWJkYS9tZXRob2RSZWYvV2lsZGNhcmRzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2xhbWJkYS9tZXRob2RSZWYvV2lsZGNhcmRzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTBjMDk5ZgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvbGFtYmRhL21ldGhvZFJlZi9XaWxkY2FyZHMuamF2YQpAQCAtMCwwICsxLDIwIEBACitpbXBvcnQgamF2YS51dGlsLio7CisKK2NsYXNzIE15VGVzdDJ7CisgICAgeworICAgICAgICBDb21wYXJhdG9yPD8gc3VwZXIgU3RyaW5nPiBjb21wYXJhdG9yID0gU3RyaW5nOjpjb21wYXJlVG9JZ25vcmVDYXNlOworICAgIH0KK30KKworY2xhc3MgVGVzdCB7CisgICAgdm9pZCB0ZXN0KCkgeworICAgICAgIEZvbzI8PyBleHRlbmRzIEJhcjI+IGZvbzIgPSBCYXIyOjp4eHg7CisgICAgfQorfQorCitpbnRlcmZhY2UgRm9vMjxUPiB7CisgICAgdm9pZCBiYXIoVCBpLCBUIGopOworfQoraW50ZXJmYWNlIEJhcjIgeworICAgIHB1YmxpYyB2b2lkIHh4eChCYXIyIHApIGRlZmF1bHQge30KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvbGFtYmRhL21ldGhvZFJlZi9maW5kVXNhZ2VzL0NvbnN0cnVjdG9yVXNhZ2VzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2xhbWJkYS9tZXRob2RSZWYvZmluZFVzYWdlcy9Db25zdHJ1Y3RvclVzYWdlcy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQyZTBmMWMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2xhbWJkYS9tZXRob2RSZWYvZmluZFVzYWdlcy9Db25zdHJ1Y3RvclVzYWdlcy5qYXZhCkBAIC0wLDAgKzEsMTEgQEAKK2NsYXNzIENvbnN0cnVjdG9yVXNhZ2VzIHsKKyAgQ29uc3RydWN0b3JVc2FnZXMoKSB7CisgIH0KKworICB2b2lkIGZvbygpIHsKKyAgICBCbGFoQmxhaDxDb25zdHJ1Y3RvclVzYWdlcz4gYmxhaEJsYWggPSBDb25zdHJ1Y3RvclVzYWdlczo6bmV3OworICB9Cit9CitpbnRlcmZhY2UgQmxhaEJsYWg8VD4geworICAgICAgICBUIGZvbygpOworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvbGFtYmRhL3BhcmFtcy9Gb3JtYWxQYXJhbXMuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvbGFtYmRhL3BhcmFtcy9Gb3JtYWxQYXJhbXMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOTZmNTc1Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9sYW1iZGEvcGFyYW1zL0Zvcm1hbFBhcmFtcy5qYXZhCkBAIC0wLDAgKzEsMzcgQEAKK2ludGVyZmFjZSBJIHsKKyAgdm9pZCBtKGludCBpKTsKK30KKworY2xhc3MgRm9vIHsKKyAgSSBpaSA9IChAPGVycm9yIGRlc2NyPSInQE92ZXJyaWRlJyBub3QgYXBwbGljYWJsZSB0byB0eXBlIHVzZSI+T3ZlcnJpZGU8L2Vycm9yPiBmaW5hbCBpbnQgayktPnsKKyAgICBpbnQgaiA9IGs7CisgIH07CisgIEkgaWkxID0gKGZpbmFsIGludCBrKS0+eworICAgIDxlcnJvciBkZXNjcj0iSW5jb21wYXRpYmxlIHR5cGVzLiBGb3VuZDogJ2ludCcsIHJlcXVpcmVkOiAnamF2YS5sYW5nLlN0cmluZyciPlN0cmluZyBzID0gazs8L2Vycm9yPgorICB9OworCisgIHZvaWQgYmF6eigpIHsKKyAgICBiYXIoKDxlcnJvciBkZXNjcj0iSW5jb21wYXRpYmxlIHBhcmFtZXRlciB0eXBlcyBpbiBsYW1iZGEgZXhwcmVzc2lvbiI+U3RyaW5nIHM8L2Vycm9yPikgLT4geworICAgICAgU3lzdGVtLm91dC5wcmludGxuKHMpO30pOworICAgIGJhcigoaW50IGkpIC0+IHtTeXN0ZW0ub3V0LnByaW50bG4oaSk7fSk7CisgIH0gCisgIHZvaWQgYmFyKEkgaSl7fQorfQorCitjbGFzcyBSZXR1cm5UeXBlQ29tcGF0aWJpbGl0eSB7CisKKyAgICBpbnRlcmZhY2UgSTE8TD4geworICAgICAgICBMIG0oTCB4KTsKKyAgICB9CisKKyAgICBzdGF0aWMgPFA+IHZvaWQgY2FsbChJMTxQPiBpMikgeworICAgICAgICBpMi5tKG51bGwpOworICAgIH0KKworICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKyAgICAgICAgY2FsbCgoU3RyaW5nIGkpLT57IHJldHVybiBpO30pOworICAgICAgICBjYWxsKDxlcnJvciBkZXNjcj0iQ3ljbGljIGluZmVyZW5jZSI+aS0+eyByZXR1cm4gaTt9PC9lcnJvcj4pOworICAgICAgICBjYWxsKDxlcnJvciBkZXNjcj0iQ3ljbGljIGluZmVyZW5jZSI+aS0+IiI8L2Vycm9yPik7CisgICAgICAgIGNhbGw8ZXJyb3IgZGVzY3I9IidjYWxsKFJldHVyblR5cGVDb21wYXRpYmlsaXR5LkkxPGphdmEubGFuZy5JbnRlZ2VyPiknIGluICdSZXR1cm5UeXBlQ29tcGF0aWJpbGl0eScgY2Fubm90IGJlIGFwcGxpZWQgdG8gJyg8bGFtYmRhIGV4cHJlc3Npb24+KSciPigoaW50IGkpLT57IHJldHVybiBpO30pPC9lcnJvcj47CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvbGFtYmRhL3BhcmFtcy9JbmNvbXBhdGlibGVUeXBlcy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9sYW1iZGEvcGFyYW1zL0luY29tcGF0aWJsZVR5cGVzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjU0ZjYzMgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvbGFtYmRhL3BhcmFtcy9JbmNvbXBhdGlibGVUeXBlcy5qYXZhCkBAIC0wLDAgKzEsNyBAQAorY2xhc3MgWFhYIHsKKyAgUnVubmFibGUgYmFyKCkgeworICAgIHJldHVybiA8ZXJyb3IgZGVzY3I9IkluY29tcGF0aWJsZSBwYXJhbWV0ZXIgdHlwZXMgaW4gbGFtYmRhIGV4cHJlc3Npb24iPihvKS0+eworICAgICAgU3lzdGVtLm91dC5wcmludGxuKCk7CisgICAgfTwvZXJyb3I+OworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9sYW1iZGEvcGFyYW1zL0luZmVycmVkUGFyYW1zLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2xhbWJkYS9wYXJhbXMvSW5mZXJyZWRQYXJhbXMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYjIyY2Y5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9sYW1iZGEvcGFyYW1zL0luZmVycmVkUGFyYW1zLmphdmEKQEAgLTAsMCArMSw3NCBAQAoraW1wb3J0IGphdmEubGFuZy5JbnRlZ2VyOworCitpbnRlcmZhY2UgSSB7CisgIHZvaWQgbShpbnQgaSk7Cit9CisKK2ludGVyZmFjZSBBPEI+IHsKKyAgdm9pZCBmb28oQiBiKTsKK30KKworY2xhc3MgRm9vIHsKKyAgSSBpaSA9IChmaW5hbCA8ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAnayciPms8L2Vycm9yPjxlcnJvciBkZXNjcj0iSWRlbnRpZmllciBleHBlY3RlZCI+KTwvZXJyb3I+LT57fTsKKyAgSSBpaTEgPSAoayktPnsKKyAgICBpbnQgaSA9IGs7CisgICAgPGVycm9yIGRlc2NyPSJJbmNvbXBhdGlibGUgdHlwZXMuIEZvdW5kOiAnaW50JywgcmVxdWlyZWQ6ICdqYXZhLmxhbmcuU3RyaW5nJyI+U3RyaW5nIHMgPSBrOzwvZXJyb3I+CisgIH07CisgIAorICBBPFN0cmluZz4gYSA9IChhYikgLT4geworICAgIFN0cmluZyBzID0gYWI7CisgICAgPGVycm9yIGRlc2NyPSJJbmNvbXBhdGlibGUgdHlwZXMuIEZvdW5kOiAnamF2YS5sYW5nLlN0cmluZycsIHJlcXVpcmVkOiAnaW50JyI+aW50IGkgPSBhYjs8L2Vycm9yPgorICB9OworCisgIHsKKyAgICBBPFN0cmluZz4gYTE7CisgICAgYTEgPSAoYWIpLT57CisgICAgICBTdHJpbmcgcyA9IGFiOworICAgICAgPGVycm9yIGRlc2NyPSJJbmNvbXBhdGlibGUgdHlwZXMuIEZvdW5kOiAnamF2YS5sYW5nLlN0cmluZycsIHJlcXVpcmVkOiAnaW50JyI+aW50IGkgPSBhYjs8L2Vycm9yPgorICAgIH07CisgIH0KKyAgCisgIEE8SW50ZWdlcj4gYmF6eigpIHsKKyAgICBiYXIoKG8pIC0+IHsKKyAgICAgIFN0cmluZyBzID0gbzsKKyAgICAgIDxlcnJvciBkZXNjcj0iSW5jb21wYXRpYmxlIHR5cGVzLiBGb3VuZDogJ2phdmEubGFuZy5TdHJpbmcnLCByZXF1aXJlZDogJ2ludCciPmludCBpID0gbzs8L2Vycm9yPgorICAgIH0pOworICAgIHJldHVybiAoaSkgLT4geworICAgICAgSW50ZWdlciBrID0gaTsKKyAgICAgIGludCBuID0gaTsKKyAgICAgIDxlcnJvciBkZXNjcj0iSW5jb21wYXRpYmxlIHR5cGVzLiBGb3VuZDogJ2phdmEubGFuZy5JbnRlZ2VyJywgcmVxdWlyZWQ6ICdqYXZhLmxhbmcuU3RyaW5nJyI+U3RyaW5nIHMgPSBpOzwvZXJyb3I+CisgICAgfTsKKyAgfQorCisgIHZvaWQgYmFyKEE8U3RyaW5nPiBhKXt9Cit9CisKK2NsYXNzIENhc3RJbmZlcmVuY2UgeworICBwdWJsaWMgaW50ZXJmYWNlIEkxPFg+IHsKKyAgICBYIG0oKTsKKyAgfQorICBwdWJsaWMgaW50ZXJmYWNlIEkyPFg+IHsKKyAgICBYIG0oKTsKKyAgfQorICBwdWJsaWMgc3RhdGljIDxYPiB2b2lkIGZvbyhJMTxYPiBzKSB7fQorICBwdWJsaWMgc3RhdGljIDxYPiB2b2lkIGZvbyhJMjxYPiBzKSB7fQorCisgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKyAgICBmb28oKEkxPEludGVnZXI+KSgpIC0+IDQyKTsKKyAgICBJMTxJbnRlZ2VyPiBpMSA9IChJMTxJbnRlZ2VyPikoKSAtPiA0MjsKKyAgfQorfQorCitjbGFzcyBXaWxkY2FyZEJvdW5kc1VzYWdlIHsKKyAgaW50ZXJmYWNlIEk8WD4geworICAgIGJvb2xlYW4gZm9vKFggeCk7CisgIH0KKworICBwdWJsaWMgSTxDaGFyYWN0ZXI+IGJhcihJPD8gc3VwZXIgQ2hhcmFjdGVyPiBwcmVkaWNhdGUpIHsKKyAgICByZXR1cm4gbnVsbDsKKyAgfQorCisgIHsKKyAgICBJPENoYXJhY3Rlcj4gaSA9IGJhcihjIC0+IGMuY29tcGFyZVRvKCd4JykgPCAwKTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvbGFtYmRhL3BhcmFtcy9NZXRob2RBcHBsaWNhYmlsaXR5LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2xhbWJkYS9wYXJhbXMvTWV0aG9kQXBwbGljYWJpbGl0eS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNkODJjNzEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2xhbWJkYS9wYXJhbXMvTWV0aG9kQXBwbGljYWJpbGl0eS5qYXZhCkBAIC0wLDAgKzEsNjggQEAKK2ludGVyZmFjZSBJIHsKKyAgdm9pZCBtKGludCBpKTsKK30KK2ludGVyZmFjZSBKIHsKKyAgdm9pZCBtbShpbnQgaSwgaW50IGopOworfQoraW50ZXJmYWNlIEsgeworICB2b2lkIGsoU3RyaW5nIG0pOworfQorCitjbGFzcyBGb28geworICB2b2lkIGZvbyhJIGkpe30KKyAgdm9pZCBmb28oSiBqKXt9CisgIHZvaWQgZm9vKEsgayl7fQorCisgIHZvaWQgYmFyKCkgeworICAgIGZvbzxlcnJvciBkZXNjcj0iQW1iaWd1b3VzIG1ldGhvZCBjYWxsOiBib3RoICdGb28uZm9vKEkpJyBhbmQgJ0Zvby5mb28oSyknIG1hdGNoIj4oKHApIC0+IHsKKyAgICAgIFN5c3RlbS5vdXQucHJpbnRsbjxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgbWV0aG9kICdwcmludGxuKDxsYW1iZGEgcGFyYW1ldGVyPiknIj4ocCk8L2Vycm9yPjsKKyAgICB9KTwvZXJyb3I+OworCisgICAgZm9vKChwLCBrKSAtPiB7CisgICAgICBTeXN0ZW0ub3V0LnByaW50bG4ocCk7CisgICAgfSk7CisKKyAgICBmb28oKFN0cmluZyBzKSAtPnsKKyAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihzKTsKKyAgICB9KTsKKworICAgIDxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgbWV0aG9kICdmb28oPGxhbWJkYSBleHByZXNzaW9uPiknIj5mb288L2Vycm9yPigoU3RyaW5nIHAsIFN0cmluZyBrKSAtPiB7CisgICAgICBTeXN0ZW0ub3V0LnByaW50bG4ocCk7CisgICAgfSk7CisgIH0KK30KKworY2xhc3MgV2l0aFR5cGVQYXJhbXMgeworICBpbnRlcmZhY2UgSTxUPiB7CisgICAgdm9pZCBtKFQgdCk7CisgIH0KKworICBpbnRlcmZhY2UgSjxLLCBWPiB7CisgICAgdm9pZCBuKEsgaywgViB2KTsKKyAgfQorCisgIGNsYXNzIEZvbyB7CisgICAgdm9pZCBmb28oSTxTdHJpbmc+IGkpe30KKyAgICB2b2lkIGZvbyhKPFN0cmluZywgU3RyaW5nPiBqKXt9CisgICAgCisgICAgdm9pZCBiYXIoKSB7CisgICAgICBmb28oKHApIC0+IHsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKHApOworICAgICAgfSk7CisgIAorICAgICAgZm9vKChwLCBrKSAtPiB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihwKTsKKyAgICAgIH0pOworICAKKyAgICAgIGZvbygoU3RyaW5nIHMpIC0+eworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4ocyk7CisgICAgICB9KTsKKyAgCisgICAgICBmb28oKFN0cmluZyBwLCBTdHJpbmcgaykgLT4geworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4ocCk7CisgICAgICB9KTsKKyAgCisgICAgICA8ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIG1ldGhvZCAnZm9vKDxsYW1iZGEgZXhwcmVzc2lvbj4pJyI+Zm9vPC9lcnJvcj4oKGludCBrKSAtPiB7U3lzdGVtLm91dC5wcmludGxuKGspO30pOworICAgIH0KKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvbGFtYmRhL3BhcmFtcy9SYXcuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvbGFtYmRhL3BhcmFtcy9SYXcuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOTk3NDdmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9sYW1iZGEvcGFyYW1zL1Jhdy5qYXZhCkBAIC0wLDAgKzEsNyBAQAorY2xhc3MgVGVzdCB7CisgIHsKKyAgICA8ZXJyb3IgZGVzY3I9IkluY29tcGF0aWJsZSB0eXBlcy4gRm91bmQ6ICc8bGFtYmRhIGV4cHJlc3Npb24+JywgcmVxdWlyZWQ6ICdqYXZhLmxhbmcuQ29tcGFyYWJsZSciPkNvbXBhcmFibGUgYyA9IChTdHJpbmcgbyktPnsKKyAgICAgIHJldHVybiAwOworICAgIH07PC9lcnJvcj4KKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvbG9zc3lFbmNvZGluZy9NdWx0aXBsZVJhbmdlcy54bWwgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2xvc3N5RW5jb2RpbmcvTXVsdGlwbGVSYW5nZXMueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2YWM3ODgKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2xvc3N5RW5jb2RpbmcvTXVsdGlwbGVSYW5nZXMueG1sCkBAIC0wLDAgKzEsNSBAQAorPD94bWwgZW5jb2Rpbmc9IjxjYXJldD48c2VsZWN0aW9uPnV0Zi04PC9zZWxlY3Rpb24+IiA/PgorPHhtbD4KKyAgPHdhcm5pbmcgZGVzY3I9IlVuc3VwcG9ydGVkIGNoYXJhY3RlcnMgZm9yIHRoZSBjaGFyc2V0ICdVUy1BU0NJSSciPtCw0LHQstCzPC93YXJuaW5nPiAxMzI3MjY0MzUxMjcKKyAgPHdhcm5pbmcgZGVzY3I9IlVuc3VwcG9ydGVkIGNoYXJhY3RlcnMgZm9yIHRoZSBjaGFyc2V0ICdVUy1BU0NJSSciPtGE0LjQs9C90Y88L3dhcm5pbmc+Cis8L3htbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2xvc3N5RW5jb2RpbmcvTmF0aXZlRW5jb2RpbmcucHJvcGVydGllcyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvbG9zc3lFbmNvZGluZy9OYXRpdmVFbmNvZGluZy5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgwZWUwODAKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2xvc3N5RW5jb2RpbmcvTmF0aXZlRW5jb2RpbmcucHJvcGVydGllcwpAQCAtMCwwICsxLDE0IEBACisjIHdvcmtzIHdpdGggSURFQSA5LjAKK2Zvbz1iYXIgXCJ7MH1cIgorbG9uZ2xpbmU9YWJjIGRlZiBnaGlhYmMgZGVmIGdoaWFiYyBkZWYgZ2hpYWJjIGRlZiBnaGlhYmMgZGVmIGdoaWFiYyBcCisgIGRlZiBnaGlhYmMgZGVmIGdoaWFiYyBkZWYgZ2hpXAorICBhYmMgZGVmIGdoaQorCisjIFdhcm5pbmdzICJVbnN1cHBvcnRlZCBjaGFyYWN0ZXJzIGZvciBjaGFyc2V0ICdVUy1BU0NJSScgaW4gSURFQSA5LjAKKyMgd2l0aCBlc2NhcGVkIGFuZCB0cmFuc3BhcmVudGx5IGNvbnZlcnRlZCBub24tQVNDSUkgY2hhcmFjdGVyczoKKworIyBrZXkgd2l0aCBub24tQVNDSUkgY2hhcmFjdGVycyAoeWVzLCBub3QgYmVhdXRpZnVsIDopCitcdTAwZTRcdTAwZjZcdTAwZmM9YXNjCisKKyMgdmFsdWUgd2l0aCBub24tQVNDSUkgY2hhcmFjdGVycworYmFyPVx1MDBlNFx1MDBmNlx1MDBmYwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9sb3NzeUVuY29kaW5nL1NpbXBsZS54bWwgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2xvc3N5RW5jb2RpbmcvU2ltcGxlLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NDE5ZjA0Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9sb3NzeUVuY29kaW5nL1NpbXBsZS54bWwKQEAgLTAsMCArMSw1IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSI8c2VsZWN0aW9uPlVURi04PC9zZWxlY3Rpb24+PGNhcmV0PiI/PgorPHg+CisgICDRhdC40YXQuAorPC94PgorCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2xvc3N5RW5jb2RpbmcvVGV4dC50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2xvc3N5RW5jb2RpbmcvVGV4dC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGY3YjdjMgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvbG9zc3lFbmNvZGluZy9UZXh0LnR4dApAQCAtMCwwICsxIEBACithYmNkPGNhcmV0PgpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9hY2Nlc3NTdGF0aWNWaWFJbnN0YW5jZS9hZnRlcjEuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvYWNjZXNzU3RhdGljVmlhSW5zdGFuY2UvYWZ0ZXIxLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTFiOWY5OQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvYWNjZXNzU3RhdGljVmlhSW5zdGFuY2UvYWZ0ZXIxLmphdmEKQEAgLTAsMCArMSwxNiBAQAorLy8gIkFjY2VzcyBzdGF0aWMgJ0FDbGFzcy5mZmYnIHZpYSBjbGFzcyAnQUNsYXNzJyByZWZlcmVuY2UiICJ0cnVlIgorCitjbGFzcyBBQ2xhc3MKK3sKKyAgICBBQ2xhc3MgZ2V0QSgpIHsKKyAgICAgICAgcmV0dXJuIG51bGw7CisgICAgfQorICAgIHN0YXRpYyBpbnQgZmZmOworfQorCitjbGFzcyBhY2MgeworIGludCBmKCkgeworICAgQUNsYXNzIGEgPSBudWxsOworICAgcmV0dXJuIDxjYXJldD5BQ2xhc3MuZmZmOworIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2FjY2Vzc1N0YXRpY1ZpYUluc3RhbmNlL2FmdGVyMi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9hY2Nlc3NTdGF0aWNWaWFJbnN0YW5jZS9hZnRlcjIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMDM4YjI4Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9hY2Nlc3NTdGF0aWNWaWFJbnN0YW5jZS9hZnRlcjIuamF2YQpAQCAtMCwwICsxLDEyIEBACisvLyAiQWNjZXNzIHN0YXRpYyAnQUNsYXNzLmZmZicgdmlhIGNsYXNzICdBQ2xhc3MnIHJlZmVyZW5jZSIgInRydWUiCisKK2NsYXNzIEFDbGFzcworeworICAgIEFDbGFzcyBnZXRBKCkgeworICAgICAgICBpbnQgaSA9IDxjYXJldD5mZmY7CisgICAgICAgIHJldHVybiBudWxsOworCisgICAgfQorICAgIHN0YXRpYyBpbnQgZmZmOworfQorCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2FjY2Vzc1N0YXRpY1ZpYUluc3RhbmNlL2FmdGVyMy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9hY2Nlc3NTdGF0aWNWaWFJbnN0YW5jZS9hZnRlcjMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNjUzZDJiCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9hY2Nlc3NTdGF0aWNWaWFJbnN0YW5jZS9hZnRlcjMuamF2YQpAQCAtMCwwICsxLDE3IEBACisvLyAiQWNjZXNzIHN0YXRpYyAnQUNsYXNzLmdldEEoKScgdmlhIGNsYXNzICdBQ2xhc3MnIHJlZmVyZW5jZSIgInRydWUiCisKK2NsYXNzIEFDbGFzcworeworICAgIHN0YXRpYyBBQ2xhc3MgZ2V0QSgpIHsKKyAgICAgICAgcmV0dXJuIG51bGw7CisgICAgfQorICAgIHN0YXRpYyBpbnQgZmZmOworfQorCitjbGFzcyBhY2MgeworIGludCBmKCkgeworICAgQUNsYXNzIGEgPSBudWxsOworICAgPGNhcmV0PkFDbGFzcy5nZXRBKCk7CisgICByZXR1cm4gMDsKKyB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9hY2Nlc3NTdGF0aWNWaWFJbnN0YW5jZS9hZnRlcjUuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvYWNjZXNzU3RhdGljVmlhSW5zdGFuY2UvYWZ0ZXI1LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzIxMjc1MgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvYWNjZXNzU3RhdGljVmlhSW5zdGFuY2UvYWZ0ZXI1LmphdmEKQEAgLTAsMCArMSw4IEBACisvLyAiQWNjZXNzIHN0YXRpYyAnQUNsYXNzLnN0YXQnIHZpYSBjbGFzcyAnQUNsYXNzJyByZWZlcmVuY2UiICJ0cnVlIgorCitjbGFzcyBBQ2xhc3MgeworICAgIHN0YXRpYyBib29sZWFuIHN0YXQ7CisgICAgdm9pZCBmb28gKGJvb2xlYW4gc3RhdCkgeworICAgICAgICBBQ2xhc3Muc3RhdDxjYXJldD4gPSBzdGF0OworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2FjY2Vzc1N0YXRpY1ZpYUluc3RhbmNlL2FmdGVyNi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9hY2Nlc3NTdGF0aWNWaWFJbnN0YW5jZS9hZnRlcjYuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYWE5MmFjCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9hY2Nlc3NTdGF0aWNWaWFJbnN0YW5jZS9hZnRlcjYuamF2YQpAQCAtMCwwICsxLDE3IEBACisvLyAiQWNjZXNzIHN0YXRpYyAnQUNsYXNzLlIucnInIHZpYSBjbGFzcyAnUicgcmVmZXJlbmNlIiAidHJ1ZSIKKworY2xhc3MgQUNsYXNzCit7CisgICAgcHVibGljIHN0YXRpYyBjbGFzcyBSIHsKKyAgICAgICAgc3RhdGljIGludCByciA9IDA7CisgICAgfQorICAgIHB1YmxpYyBSIGdldFIoKSB7CisgICAgICAgIHJldHVybiBudWxsOworICAgIH0KK30KK2NsYXNzIHNzIHsKKyAgICB2b2lkIGYoQUNsYXNzIGQpeworICAgICAgICBpbnQgaSA9IDxjYXJldD5BQ2xhc3MuUi5ycjsKKyAgICB9CisKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvYWNjZXNzU3RhdGljVmlhSW5zdGFuY2UvYmVmb3JlMS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9hY2Nlc3NTdGF0aWNWaWFJbnN0YW5jZS9iZWZvcmUxLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTI1YmUyOQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvYWNjZXNzU3RhdGljVmlhSW5zdGFuY2UvYmVmb3JlMS5qYXZhCkBAIC0wLDAgKzEsMTYgQEAKKy8vICJBY2Nlc3Mgc3RhdGljICdBQ2xhc3MuZmZmJyB2aWEgY2xhc3MgJ0FDbGFzcycgcmVmZXJlbmNlIiAidHJ1ZSIKKworY2xhc3MgQUNsYXNzCit7CisgICAgQUNsYXNzIGdldEEoKSB7CisgICAgICAgIHJldHVybiBudWxsOworICAgIH0KKyAgICBzdGF0aWMgaW50IGZmZjsKK30KKworY2xhc3MgYWNjIHsKKyBpbnQgZigpIHsKKyAgIEFDbGFzcyBhID0gbnVsbDsKKyAgIHJldHVybiA8Y2FyZXQ+YS5nZXRBKCkuZmZmOworIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2FjY2Vzc1N0YXRpY1ZpYUluc3RhbmNlL2JlZm9yZTIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvYWNjZXNzU3RhdGljVmlhSW5zdGFuY2UvYmVmb3JlMi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjljNjU3ODUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2FjY2Vzc1N0YXRpY1ZpYUluc3RhbmNlL2JlZm9yZTIuamF2YQpAQCAtMCwwICsxLDEyIEBACisvLyAiQWNjZXNzIHN0YXRpYyAnQUNsYXNzLmZmZicgdmlhIGNsYXNzICdBQ2xhc3MnIHJlZmVyZW5jZSIgInRydWUiCisKK2NsYXNzIEFDbGFzcworeworICAgIEFDbGFzcyBnZXRBKCkgeworICAgICAgICBpbnQgaSA9IDxjYXJldD50aGlzLmZmZjsKKyAgICAgICAgcmV0dXJuIG51bGw7CisKKyAgICB9CisgICAgc3RhdGljIGludCBmZmY7Cit9CisKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvYWNjZXNzU3RhdGljVmlhSW5zdGFuY2UvYmVmb3JlMy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9hY2Nlc3NTdGF0aWNWaWFJbnN0YW5jZS9iZWZvcmUzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmU2Yzg5NAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvYWNjZXNzU3RhdGljVmlhSW5zdGFuY2UvYmVmb3JlMy5qYXZhCkBAIC0wLDAgKzEsMTcgQEAKKy8vICJBY2Nlc3Mgc3RhdGljICdBQ2xhc3MuZ2V0QSgpJyB2aWEgY2xhc3MgJ0FDbGFzcycgcmVmZXJlbmNlIiAidHJ1ZSIKKworY2xhc3MgQUNsYXNzCit7CisgICAgc3RhdGljIEFDbGFzcyBnZXRBKCkgeworICAgICAgICByZXR1cm4gbnVsbDsKKyAgICB9CisgICAgc3RhdGljIGludCBmZmY7Cit9CisKK2NsYXNzIGFjYyB7CisgaW50IGYoKSB7CisgICBBQ2xhc3MgYSA9IG51bGw7CisgICA8Y2FyZXQ+YS5nZXRBKCk7CisgICByZXR1cm4gMDsKKyB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9hY2Nlc3NTdGF0aWNWaWFJbnN0YW5jZS9iZWZvcmU0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2FjY2Vzc1N0YXRpY1ZpYUluc3RhbmNlL2JlZm9yZTQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNWU4ZThkYQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvYWNjZXNzU3RhdGljVmlhSW5zdGFuY2UvYmVmb3JlNC5qYXZhCkBAIC0wLDAgKzEsMTggQEAKKy8vICJBY2Nlc3Mgc3RhdGljICdBQ2xhc3MuUi5ycicgdmlhIGNsYXNzICdBQ2xhc3MuUicgcmVmZXJlbmNlIiAiZmFsc2UiCisKK2NsYXNzIEFDbGFzcworeworICAgIHByaXZhdGUgc3RhdGljIGNsYXNzIFIgeworICAgICAgICBzdGF0aWMgaW50IHJyID0gMDsKKyAgICB9CisgICAgcHVibGljIFIgZ2V0UigpIHsKKyAgICAgICAgcmV0dXJuIG51bGw7CisgICAgfQorfQorLy8gQUNsYXNzLlIgaXMgbm90IGFjY2Vzc2libGUgdGhlcmUKK2NsYXNzIHNzIHsKKyAgICB2b2lkIGYoQUNsYXNzIGQpeworICAgICAgICBpbnQgaSA9IDxjYXJldD5kLmdldFIoKS5ycjsKKyAgICB9CisKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvYWNjZXNzU3RhdGljVmlhSW5zdGFuY2UvYmVmb3JlNS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9hY2Nlc3NTdGF0aWNWaWFJbnN0YW5jZS9iZWZvcmU1LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmJhNTNkZgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvYWNjZXNzU3RhdGljVmlhSW5zdGFuY2UvYmVmb3JlNS5qYXZhCkBAIC0wLDAgKzEsOCBAQAorLy8gIkFjY2VzcyBzdGF0aWMgJ0FDbGFzcy5zdGF0JyB2aWEgY2xhc3MgJ0FDbGFzcycgcmVmZXJlbmNlIiAidHJ1ZSIKKworY2xhc3MgQUNsYXNzIHsKKyAgICBzdGF0aWMgYm9vbGVhbiBzdGF0OworICAgIHZvaWQgZm9vIChib29sZWFuIHN0YXQpIHsKKyAgICAgICAgdGhpcy5zdGF0PGNhcmV0PiA9IHN0YXQ7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvYWNjZXNzU3RhdGljVmlhSW5zdGFuY2UvYmVmb3JlNi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9hY2Nlc3NTdGF0aWNWaWFJbnN0YW5jZS9iZWZvcmU2LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzhmM2JjNDcKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2FjY2Vzc1N0YXRpY1ZpYUluc3RhbmNlL2JlZm9yZTYuamF2YQpAQCAtMCwwICsxLDE3IEBACisvLyAiQWNjZXNzIHN0YXRpYyAnQUNsYXNzLlIucnInIHZpYSBjbGFzcyAnUicgcmVmZXJlbmNlIiAidHJ1ZSIKKworY2xhc3MgQUNsYXNzCit7CisgICAgcHVibGljIHN0YXRpYyBjbGFzcyBSIHsKKyAgICAgICAgc3RhdGljIGludCByciA9IDA7CisgICAgfQorICAgIHB1YmxpYyBSIGdldFIoKSB7CisgICAgICAgIHJldHVybiBudWxsOworICAgIH0KK30KK2NsYXNzIHNzIHsKKyAgICB2b2lkIGYoQUNsYXNzIGQpeworICAgICAgICBpbnQgaSA9IDxjYXJldD5kLmdldFIoKS5ycjsKKyAgICB9CisKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvYWRkQ2F0Y2hCbG9jay9hZnRlcjEuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvYWRkQ2F0Y2hCbG9jay9hZnRlcjEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZjhlMGQzCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9hZGRDYXRjaEJsb2NrL2FmdGVyMS5qYXZhCkBAIC0wLDAgKzEsMTMgQEAKKy8vICJBZGQgQ2F0Y2ggQ2xhdXNlKHMpIiAidHJ1ZSIKK2NsYXNzIGEgeworICAgIHZvaWQgZygpIHRocm93cyBFeGNlcHRpb24geworICAgIH0KKyAgICB2b2lkIGYoKSB7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBnKCk7CisgICAgICAgIH0gY2F0Y2ggKEVycm9yIGUpIHsKKyAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIDxjYXJldD48c2VsZWN0aW9uPmUucHJpbnRTdGFja1RyYWNlKCk7ICAvL1RvIGNoYW5nZSBib2R5IG9mIGNhdGNoIHN0YXRlbWVudCB1c2UgRmlsZSB8IFNldHRpbmdzIHwgRmlsZSBUZW1wbGF0ZXMuPC9zZWxlY3Rpb24+CisgICAgICAgIH0KKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2FkZENhdGNoQmxvY2svYWZ0ZXIzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2FkZENhdGNoQmxvY2svYWZ0ZXIzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTA4NDUzYgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvYWRkQ2F0Y2hCbG9jay9hZnRlcjMuamF2YQpAQCAtMCwwICsxLDE2IEBACisvLyAiQWRkIENhdGNoIENsYXVzZShzKSIgInRydWUiCitjbGFzcyBhIHsKKyAgICB2b2lkIGcoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICB9CisKKyAgICAvLyBpbml0aWFsaXplcgorICAgIHsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIC8vIGNvbW1lbnQgYmVmb3JlCisgICAgICAgICAgICBnKCk7CisgICAgICAgICAgICAvLyBjb21tZW50IGFmdGVyCisgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICA8Y2FyZXQ+PHNlbGVjdGlvbj5lLnByaW50U3RhY2tUcmFjZSgpOyAgLy9UbyBjaGFuZ2UgYm9keSBvZiBjYXRjaCBzdGF0ZW1lbnQgdXNlIEZpbGUgfCBTZXR0aW5ncyB8IEZpbGUgVGVtcGxhdGVzLjwvc2VsZWN0aW9uPgorICAgICAgICB9CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9hZGRDYXRjaEJsb2NrL2FmdGVyNC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9hZGRDYXRjaEJsb2NrL2FmdGVyNC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY1ODY0YzQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2FkZENhdGNoQmxvY2svYWZ0ZXI0LmphdmEKQEAgLTAsMCArMSwxNiBAQAorLy8gIkFkZCBDYXRjaCBDbGF1c2UocykiICJ0cnVlIgorY2xhc3MgTXlFeGNlcHRpb24xIGV4dGVuZHMgRXhjZXB0aW9uIHt9CitjbGFzcyBNeUV4Y2VwdGlvbjIgZXh0ZW5kcyBFeGNlcHRpb24ge30KKworY2xhc3MgVGVzdCB7CisgIHZvaWQgZm9vICgpIHRocm93cyBNeUV4Y2VwdGlvbjEsIE15RXhjZXB0aW9uMiB7fQorCisgIHZvaWQgYmFyICgpIHsKKyAgICB0cnkgeworICAgICAgZm9vKCk7CisgICAgfSBjYXRjaCAoTXlFeGNlcHRpb24xIGUpIHsKKyAgICB9IGNhdGNoIChNeUV4Y2VwdGlvbjIgbXlFeGNlcHRpb24yKSB7CisgICAgICAgIDxjYXJldD48c2VsZWN0aW9uPm15RXhjZXB0aW9uMi5wcmludFN0YWNrVHJhY2UoKTsgIC8vVG8gY2hhbmdlIGJvZHkgb2YgY2F0Y2ggc3RhdGVtZW50IHVzZSBGaWxlIHwgU2V0dGluZ3MgfCBGaWxlIFRlbXBsYXRlcy48L3NlbGVjdGlvbj4KKyAgICB9CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2FkZENhdGNoQmxvY2svYWZ0ZXI1LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2FkZENhdGNoQmxvY2svYWZ0ZXI1LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzU5YWExYwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvYWRkQ2F0Y2hCbG9jay9hZnRlcjUuamF2YQpAQCAtMCwwICsxLDE1IEBACisvLyAiQWRkIENhdGNoIENsYXVzZShzKSIgInRydWUiCitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKKworY2xhc3MgVGVzdCB7CisgICAgc3RhdGljIGNsYXNzIE15UmVzb3VyY2UgaW1wbGVtZW50cyBBdXRvQ2xvc2VhYmxlIHsKKyAgICAgICAgcHVibGljIHZvaWQgY2xvc2UoKSB0aHJvd3MgSU9FeGNlcHRpb24geyB9CisgICAgfQorCisgICAgdm9pZCBtKCkgeworICAgICAgICB0cnkgKE15UmVzb3VyY2UgciA9IG5ldyBNeVJlc291cmNlKCkpIHsKKyAgICAgICAgfSBjYXRjaCAoSU9FeGNlcHRpb24gZSkgeworICAgICAgICAgICAgPHNlbGVjdGlvbj5lLnByaW50U3RhY2tUcmFjZSgpOyAgLy9UbyBjaGFuZ2UgYm9keSBvZiBjYXRjaCBzdGF0ZW1lbnQgdXNlIEZpbGUgfCBTZXR0aW5ncyB8IEZpbGUgVGVtcGxhdGVzLjwvc2VsZWN0aW9uPgorICAgICAgICB9CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvYWRkQ2F0Y2hCbG9jay9hZnRlcjYuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvYWRkQ2F0Y2hCbG9jay9hZnRlcjYuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YTRhOGFkCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9hZGRDYXRjaEJsb2NrL2FmdGVyNi5qYXZhCkBAIC0wLDAgKzEsMTkgQEAKKy8vICJBZGQgQ2F0Y2ggQ2xhdXNlKHMpIiAidHJ1ZSIKK2NsYXNzIFRlc3QgeworICAgIHN0YXRpYyBjbGFzcyBFMSBleHRlbmRzIEV4Y2VwdGlvbiB7IH0KKyAgICBzdGF0aWMgY2xhc3MgRTIgZXh0ZW5kcyBFeGNlcHRpb24geyB9CisKKyAgICBzdGF0aWMgY2xhc3MgTXlSZXNvdXJjZSBpbXBsZW1lbnRzIEF1dG9DbG9zZWFibGUgeworICAgICAgICBwdWJsaWMgdm9pZCBkb1NvbWV0aGluZygpIHRocm93cyBFMSB7IH0KKyAgICAgICAgcHVibGljIHZvaWQgY2xvc2UoKSB0aHJvd3MgRTIgeyB9CisgICAgfQorCisgICAgdm9pZCBtKCkgeworICAgICAgICB0cnkgKE15UmVzb3VyY2UgciA9IG5ldyBNeVJlc291cmNlKCkpIHsKKyAgICAgICAgICAgIHIuZG9Tb21ldGhpbmcoKTsKKyAgICAgICAgfSBjYXRjaCAoRTEgaWdub3JlKSB7CisgICAgICAgIH0gY2F0Y2ggKEUyIGUyKSB7CisgICAgICAgICAgICA8c2VsZWN0aW9uPmUyLnByaW50U3RhY2tUcmFjZSgpOyAgLy9UbyBjaGFuZ2UgYm9keSBvZiBjYXRjaCBzdGF0ZW1lbnQgdXNlIEZpbGUgfCBTZXR0aW5ncyB8IEZpbGUgVGVtcGxhdGVzLjwvc2VsZWN0aW9uPgorICAgICAgICB9CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvYWRkQ2F0Y2hCbG9jay9hZnRlcjcuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvYWRkQ2F0Y2hCbG9jay9hZnRlcjcuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMjhiYWE2Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9hZGRDYXRjaEJsb2NrL2FmdGVyNy5qYXZhCkBAIC0wLDAgKzEsMTkgQEAKKy8vICJBZGQgQ2F0Y2ggQ2xhdXNlKHMpIiAidHJ1ZSIKK2NsYXNzIFRlc3QgeworICAgIHN0YXRpYyBjbGFzcyBFMSBleHRlbmRzIEV4Y2VwdGlvbiB7IH0KKyAgICBzdGF0aWMgY2xhc3MgRTIgZXh0ZW5kcyBFeGNlcHRpb24geyB9CisKKyAgICBzdGF0aWMgY2xhc3MgTXlSZXNvdXJjZSBpbXBsZW1lbnRzIEF1dG9DbG9zZWFibGUgeworICAgICAgICBwdWJsaWMgTXlSZXNvdXJjZSgpIHRocm93cyBFMSB7IH0KKyAgICAgICAgcHVibGljIHZvaWQgY2xvc2UoKSB0aHJvd3MgRTIgeyB9CisgICAgfQorCisgICAgdm9pZCBtKCkgeworICAgICAgICB0cnkgKE15UmVzb3VyY2UgciA9IG5ldyBNeVJlc291cmNlKCkpIHsKKyAgICAgICAgfSBjYXRjaCAoRTIgZTIpIHsKKyAgICAgICAgICAgIDxzZWxlY3Rpb24+ZTIucHJpbnRTdGFja1RyYWNlKCk7ICAvL1RvIGNoYW5nZSBib2R5IG9mIGNhdGNoIHN0YXRlbWVudCB1c2UgRmlsZSB8IFNldHRpbmdzIHwgRmlsZSBUZW1wbGF0ZXMuPC9zZWxlY3Rpb24+CisgICAgICAgIH0gY2F0Y2ggKEUxIGUxKSB7CisgICAgICAgICAgICBlMS5wcmludFN0YWNrVHJhY2UoKTsgIC8vVG8gY2hhbmdlIGJvZHkgb2YgY2F0Y2ggc3RhdGVtZW50IHVzZSBGaWxlIHwgU2V0dGluZ3MgfCBGaWxlIFRlbXBsYXRlcy4KKyAgICAgICAgfQorICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2FkZENhdGNoQmxvY2svYWZ0ZXJIaWVyYXJjaHkuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvYWRkQ2F0Y2hCbG9jay9hZnRlckhpZXJhcmNoeS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjMGQ2M2UKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2FkZENhdGNoQmxvY2svYWZ0ZXJIaWVyYXJjaHkuamF2YQpAQCAtMCwwICsxLDIwIEBACitpbXBvcnQgamF2YS5pby5GaWxlTm90Rm91bmRFeGNlcHRpb247CitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKKworLy8gIkFkZCBDYXRjaCBDbGF1c2UocykiICJ0cnVlIgorY2xhc3MgQ2F0Y2hFeGNlcHRpb25zIHsKKworCXZvaWQgZm9vKCkgdGhyb3dzIGphdmEuaW8uSU9FeGNlcHRpb24sIGphdmEuaW8uRmlsZU5vdEZvdW5kRXhjZXB0aW9uIHsKKworCX0KKworCXZvaWQgYmFyKCkgeworCQl0cnkgeworCQlmb28oKTsKKwkJfSBjYXRjaCAoRmlsZU5vdEZvdW5kRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIDxzZWxlY3Rpb24+ZS5wcmludFN0YWNrVHJhY2UoKTsgIC8vVG8gY2hhbmdlIGJvZHkgb2YgY2F0Y2ggc3RhdGVtZW50IHVzZSBGaWxlIHwgU2V0dGluZ3MgfCBGaWxlIFRlbXBsYXRlcy48L3NlbGVjdGlvbj4KKyAgICAgICAgfSBjYXRjaCAoSU9FeGNlcHRpb24gZSkgeworICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsgIC8vVG8gY2hhbmdlIGJvZHkgb2YgY2F0Y2ggc3RhdGVtZW50IHVzZSBGaWxlIHwgU2V0dGluZ3MgfCBGaWxlIFRlbXBsYXRlcy4KKyAgICAgICAgfQorICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2FkZENhdGNoQmxvY2svYmVmb3JlMS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9hZGRDYXRjaEJsb2NrL2JlZm9yZTEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40Yjc2ZjNmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9hZGRDYXRjaEJsb2NrL2JlZm9yZTEuamF2YQpAQCAtMCwwICsxLDExIEBACisvLyAiQWRkIENhdGNoIENsYXVzZShzKSIgInRydWUiCitjbGFzcyBhIHsKKyAgICB2b2lkIGcoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICB9CisgICAgdm9pZCBmKCkgeworICAgICAgICB0cnkgeworICAgICAgICAgICAgPGNhcmV0PmcoKTsKKyAgICAgICAgfSBjYXRjaCAoRXJyb3IgZSkgeworICAgICAgICB9CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9hZGRDYXRjaEJsb2NrL2JlZm9yZTIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvYWRkQ2F0Y2hCbG9jay9iZWZvcmUyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmEzZjMzMAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvYWRkQ2F0Y2hCbG9jay9iZWZvcmUyLmphdmEKQEAgLTAsMCArMSwyMCBAQAorLy8gIkFkZCBDYXRjaCBDbGF1c2UocykiICJmYWxzZSIKKy8vIHNob3VsZCBub3QgdHJ5IHRvIGFkZCBjYXRjaCBjbGF1c2VzIGFjcm9zcyBtZXRob2QgYm91bmRhcmllcworY2xhc3MgcyB7CisgICAgaW50IGYoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgUnVubmFibGUgcnVubmFibGUgPSBuZXcgUnVubmFibGUoKSB7CisgICAgICAgICAgICBwdWJsaWMgdm9pZCBydW4oKSB7CisgICAgICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICAgICAgUnVubmFibGUgcnVubmFibGUgPSBuZXcgUnVubmFibGUoKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBwdWJsaWMgdm9pZCBydW4oKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNhcmV0PmludCBpID0gZigpOy8vCisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH07CisgICAgICAgIHJldHVybiAwOworICAgIH0KK30KKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9hZGRDYXRjaEJsb2NrL2JlZm9yZTMuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvYWRkQ2F0Y2hCbG9jay9iZWZvcmUzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzc4YmI3ZAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvYWRkQ2F0Y2hCbG9jay9iZWZvcmUzLmphdmEKQEAgLTAsMCArMSwxNCBAQAorLy8gIkFkZCBDYXRjaCBDbGF1c2UocykiICJ0cnVlIgorY2xhc3MgYSB7CisgICAgdm9pZCBnKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgfQorCisgICAgLy8gaW5pdGlhbGl6ZXIKKyAgICB7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICAvLyBjb21tZW50IGJlZm9yZQorICAgICAgICAgICAgPGNhcmV0PmcoKTsKKyAgICAgICAgICAgIC8vIGNvbW1lbnQgYWZ0ZXIKKyAgICAgICAgfQorICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvYWRkQ2F0Y2hCbG9jay9iZWZvcmU0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2FkZENhdGNoQmxvY2svYmVmb3JlNC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNjYjliYWI5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9hZGRDYXRjaEJsb2NrL2JlZm9yZTQuamF2YQpAQCAtMCwwICsxLDE0IEBACisvLyAiQWRkIENhdGNoIENsYXVzZShzKSIgInRydWUiCitjbGFzcyBNeUV4Y2VwdGlvbjEgZXh0ZW5kcyBFeGNlcHRpb24ge30KK2NsYXNzIE15RXhjZXB0aW9uMiBleHRlbmRzIEV4Y2VwdGlvbiB7fQorCitjbGFzcyBUZXN0IHsKKyAgdm9pZCBmb28gKCkgdGhyb3dzIE15RXhjZXB0aW9uMSwgTXlFeGNlcHRpb24yIHt9CisKKyAgdm9pZCBiYXIgKCkgeworICAgIHRyeSB7CisgICAgICA8Y2FyZXQ+Zm9vKCk7CisgICAgfSBjYXRjaCAoTXlFeGNlcHRpb24xIGUpIHsKKyAgICB9CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2FkZENhdGNoQmxvY2svYmVmb3JlNS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9hZGRDYXRjaEJsb2NrL2JlZm9yZTUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MDk1OGI2Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9hZGRDYXRjaEJsb2NrL2JlZm9yZTUuamF2YQpAQCAtMCwwICsxLDEzIEBACisvLyAiQWRkIENhdGNoIENsYXVzZShzKSIgInRydWUiCitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKKworY2xhc3MgVGVzdCB7CisgICAgc3RhdGljIGNsYXNzIE15UmVzb3VyY2UgaW1wbGVtZW50cyBBdXRvQ2xvc2VhYmxlIHsKKyAgICAgICAgcHVibGljIHZvaWQgY2xvc2UoKSB0aHJvd3MgSU9FeGNlcHRpb24geyB9CisgICAgfQorCisgICAgdm9pZCBtKCkgeworICAgICAgICB0cnkgKDxjYXJldD5NeVJlc291cmNlIHIgPSBuZXcgTXlSZXNvdXJjZSgpKSB7CisgICAgICAgIH0KKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9hZGRDYXRjaEJsb2NrL2JlZm9yZTYuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvYWRkQ2F0Y2hCbG9jay9iZWZvcmU2LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjhiMzM5YwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvYWRkQ2F0Y2hCbG9jay9iZWZvcmU2LmphdmEKQEAgLTAsMCArMSwxNyBAQAorLy8gIkFkZCBDYXRjaCBDbGF1c2UocykiICJ0cnVlIgorY2xhc3MgVGVzdCB7CisgICAgc3RhdGljIGNsYXNzIEUxIGV4dGVuZHMgRXhjZXB0aW9uIHsgfQorICAgIHN0YXRpYyBjbGFzcyBFMiBleHRlbmRzIEV4Y2VwdGlvbiB7IH0KKworICAgIHN0YXRpYyBjbGFzcyBNeVJlc291cmNlIGltcGxlbWVudHMgQXV0b0Nsb3NlYWJsZSB7CisgICAgICAgIHB1YmxpYyB2b2lkIGRvU29tZXRoaW5nKCkgdGhyb3dzIEUxIHsgfQorICAgICAgICBwdWJsaWMgdm9pZCBjbG9zZSgpIHRocm93cyBFMiB7IH0KKyAgICB9CisKKyAgICB2b2lkIG0oKSB7CisgICAgICAgIHRyeSAoPGNhcmV0Pk15UmVzb3VyY2UgciA9IG5ldyBNeVJlc291cmNlKCkpIHsKKyAgICAgICAgICAgIHIuZG9Tb21ldGhpbmcoKTsKKyAgICAgICAgfSBjYXRjaCAoRTEgaWdub3JlKSB7CisgICAgICAgIH0KKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9hZGRDYXRjaEJsb2NrL2JlZm9yZTcuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvYWRkQ2F0Y2hCbG9jay9iZWZvcmU3LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTQwNGM0NQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvYWRkQ2F0Y2hCbG9jay9iZWZvcmU3LmphdmEKQEAgLTAsMCArMSwxNCBAQAorLy8gIkFkZCBDYXRjaCBDbGF1c2UocykiICJ0cnVlIgorY2xhc3MgVGVzdCB7CisgICAgc3RhdGljIGNsYXNzIEUxIGV4dGVuZHMgRXhjZXB0aW9uIHsgfQorICAgIHN0YXRpYyBjbGFzcyBFMiBleHRlbmRzIEV4Y2VwdGlvbiB7IH0KKworICAgIHN0YXRpYyBjbGFzcyBNeVJlc291cmNlIGltcGxlbWVudHMgQXV0b0Nsb3NlYWJsZSB7CisgICAgICAgIHB1YmxpYyBNeVJlc291cmNlKCkgdGhyb3dzIEUxIHsgfQorICAgICAgICBwdWJsaWMgdm9pZCBjbG9zZSgpIHRocm93cyBFMiB7IH0KKyAgICB9CisKKyAgICB2b2lkIG0oKSB7CisgICAgICAgIHRyeSAoTXlSZXNvdXJjZSByID0gPGNhcmV0Pm5ldyBNeVJlc291cmNlKCkpCisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvYWRkQ2F0Y2hCbG9jay9iZWZvcmVIaWVyYXJjaHkuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvYWRkQ2F0Y2hCbG9jay9iZWZvcmVIaWVyYXJjaHkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NWYwNzZjCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9hZGRDYXRjaEJsb2NrL2JlZm9yZUhpZXJhcmNoeS5qYXZhCkBAIC0wLDAgKzEsMTMgQEAKKy8vICJBZGQgQ2F0Y2ggQ2xhdXNlKHMpIiAidHJ1ZSIKK2NsYXNzIENhdGNoRXhjZXB0aW9ucyB7CisKKwl2b2lkIGZvbygpIHRocm93cyBqYXZhLmlvLklPRXhjZXB0aW9uLCBqYXZhLmlvLkZpbGVOb3RGb3VuZEV4Y2VwdGlvbiB7CisKKwl9CisKKwl2b2lkIGJhcigpIHsKKwkJdHJ5IHsKKwkJZm9vKCk7PGNhcmV0PgorCQl9CisJfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvYWRkTWV0aG9kQm9keS9hZnRlcjEuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvYWRkTWV0aG9kQm9keS9hZnRlcjEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YmJkYjQ4Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9hZGRNZXRob2RCb2R5L2FmdGVyMS5qYXZhCkBAIC0wLDAgKzEsNyBAQAorLy8gIkFkZCBNZXRob2QgQm9keSIgInRydWUiCitjbGFzcyBhIHsKKyAgICB2b2lkIGYoKSB7CisgICAgICAgIDxjYXJldD48c2VsZWN0aW9uPi8vVG8gY2hhbmdlIGJvZHkgb2YgY3JlYXRlZCBtZXRob2RzIHVzZSBGaWxlIHwgU2V0dGluZ3MgfCBGaWxlIFRlbXBsYXRlcy48L3NlbGVjdGlvbj4KKyAgICB9Cit9CisKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvYWRkTWV0aG9kQm9keS9hZnRlcjIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvYWRkTWV0aG9kQm9keS9hZnRlcjIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NDRiYzNiCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9hZGRNZXRob2RCb2R5L2FmdGVyMi5qYXZhCkBAIC0wLDAgKzEsNyBAQAorLy8gIkFkZCBNZXRob2QgQm9keSIgInRydWUiCitjbGFzcyBhIHsKKyAgICBTdHJpbmcgZigpIHsKKyAgICAgICAgPGNhcmV0PjxzZWxlY3Rpb24+cmV0dXJuIG51bGw7ICAvL1RvIGNoYW5nZSBib2R5IG9mIGNyZWF0ZWQgbWV0aG9kcyB1c2UgRmlsZSB8IFNldHRpbmdzIHwgRmlsZSBUZW1wbGF0ZXMuPC9zZWxlY3Rpb24+CisgICAgfQorfQorCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2FkZE1ldGhvZEJvZHkvYWZ0ZXIzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2FkZE1ldGhvZEJvZHkvYWZ0ZXIzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmNkMmJkYwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvYWRkTWV0aG9kQm9keS9hZnRlcjMuamF2YQpAQCAtMCwwICsxLDcgQEAKKy8vICJBZGQgTWV0aG9kIEJvZHkiICJ0cnVlIgorY2xhc3MgYSB7CisgICAgYSgpIHsKKyAgICAgICAgPGNhcmV0PjxzZWxlY3Rpb24+Ly9UbyBjaGFuZ2UgYm9keSBvZiBjcmVhdGVkIG1ldGhvZHMgdXNlIEZpbGUgfCBTZXR0aW5ncyB8IEZpbGUgVGVtcGxhdGVzLjwvc2VsZWN0aW9uPgorICAgIH0KK30KKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9hZGRNZXRob2RCb2R5L2FmdGVyNC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9hZGRNZXRob2RCb2R5L2FmdGVyNC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg0NGJjM2IKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2FkZE1ldGhvZEJvZHkvYWZ0ZXI0LmphdmEKQEAgLTAsMCArMSw3IEBACisvLyAiQWRkIE1ldGhvZCBCb2R5IiAidHJ1ZSIKK2NsYXNzIGEgeworICAgIFN0cmluZyBmKCkgeworICAgICAgICA8Y2FyZXQ+PHNlbGVjdGlvbj5yZXR1cm4gbnVsbDsgIC8vVG8gY2hhbmdlIGJvZHkgb2YgY3JlYXRlZCBtZXRob2RzIHVzZSBGaWxlIHwgU2V0dGluZ3MgfCBGaWxlIFRlbXBsYXRlcy48L3NlbGVjdGlvbj4KKyAgICB9Cit9CisKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvYWRkTWV0aG9kQm9keS9iZWZvcmUxLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2FkZE1ldGhvZEJvZHkvYmVmb3JlMS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMyNzhjOTUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2FkZE1ldGhvZEJvZHkvYmVmb3JlMS5qYXZhCkBAIC0wLDAgKzEsNSBAQAorLy8gIkFkZCBNZXRob2QgQm9keSIgInRydWUiCitjbGFzcyBhIHsKKyA8Y2FyZXQ+dm9pZCBmKCk7Cit9CisKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvYWRkTWV0aG9kQm9keS9iZWZvcmUyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2FkZE1ldGhvZEJvZHkvYmVmb3JlMi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA1ZTk2OWEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2FkZE1ldGhvZEJvZHkvYmVmb3JlMi5qYXZhCkBAIC0wLDAgKzEsNSBAQAorLy8gIkFkZCBNZXRob2QgQm9keSIgInRydWUiCitjbGFzcyBhIHsKKyA8Y2FyZXQ+U3RyaW5nIGYoKTsKK30KKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9hZGRNZXRob2RCb2R5L2JlZm9yZTMuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvYWRkTWV0aG9kQm9keS9iZWZvcmUzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzM2MTU2MwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvYWRkTWV0aG9kQm9keS9iZWZvcmUzLmphdmEKQEAgLTAsMCArMSw1IEBACisvLyAiQWRkIE1ldGhvZCBCb2R5IiAidHJ1ZSIKK2NsYXNzIGEgeworIDxjYXJldD5hKCk7Cit9CisKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvYWRkTWV0aG9kQm9keS9iZWZvcmU0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2FkZE1ldGhvZEJvZHkvYmVmb3JlNC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBiMjhhYzAKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2FkZE1ldGhvZEJvZHkvYmVmb3JlNC5qYXZhCkBAIC0wLDAgKzEsNSBAQAorLy8gIkFkZCBNZXRob2QgQm9keSIgInRydWUiCitjbGFzcyBhIHsKKyA8Y2FyZXQ+YWJzdHJhY3QgU3RyaW5nIGYoKTsKK30KKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9hZGRNZXRob2RCb2R5L2JlZm9yZTUuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvYWRkTWV0aG9kQm9keS9iZWZvcmU1LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGRiYmE5MgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvYWRkTWV0aG9kQm9keS9iZWZvcmU1LmphdmEKQEAgLTAsMCArMSw1IEBACisvLyAiQWRkIE1ldGhvZCBCb2R5IiAiZmFsc2UiCitpbnRlcmZhY2UgYSB7CisgPGNhcmV0PlN0cmluZyBmKCk7Cit9CisKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvYWRkTmV3QXJyYXlFeHByZXNzaW9uL2FmdGVyMS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9hZGROZXdBcnJheUV4cHJlc3Npb24vYWZ0ZXIxLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWVmZjEyYwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvYWRkTmV3QXJyYXlFeHByZXNzaW9uL2FmdGVyMS5qYXZhCkBAIC0wLDAgKzEsNyBAQAorLy8gIkFkZCAnbmV3IGludFtdJyIgInRydWUiCitjbGFzcyBjIHsKKyB2b2lkIGYoKSB7CisgICBpbnRbXSBhOworICAgYSA9IDxjYXJldD5uZXcgaW50W117MSwgMn07CisgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvYWRkTmV3QXJyYXlFeHByZXNzaW9uL2JlZm9yZTEuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvYWRkTmV3QXJyYXlFeHByZXNzaW9uL2JlZm9yZTEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYjRlYTdlCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9hZGROZXdBcnJheUV4cHJlc3Npb24vYmVmb3JlMS5qYXZhCkBAIC0wLDAgKzEsNyBAQAorLy8gIkFkZCAnbmV3IGludFtdJyIgInRydWUiCitjbGFzcyBjIHsKKyB2b2lkIGYoKSB7CisgICBpbnRbXSBhOworICAgYSA9IDxjYXJldD57MSwgMn07CisgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvYWRkT25EZW1hbmRTdGF0aWNJbXBvcnQvYWZ0ZXJDb2xsYXBzZUlubmVyQ2xhc3MuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvYWRkT25EZW1hbmRTdGF0aWNJbXBvcnQvYWZ0ZXJDb2xsYXBzZUlubmVyQ2xhc3MuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MTAyNjc1Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9hZGRPbkRlbWFuZFN0YXRpY0ltcG9ydC9hZnRlckNvbGxhcHNlSW5uZXJDbGFzcy5qYXZhCkBAIC0wLDAgKzEsMTAgQEAKKy8vICJBZGQgb24gZGVtYW5kIHN0YXRpYyBpbXBvcnQgZm9yICdqYXZhLmxhbmcuVGhyZWFkJyIgInRydWUiCitwYWNrYWdlIHRlc3Q7CisKK2ltcG9ydCBzdGF0aWMgamF2YS5sYW5nLlRocmVhZC4qOworCitwdWJsaWMgY2xhc3MgRm9vIHsKKyAgICB7CisgICAgICAgIDxjYXJldD5TdGF0ZSBlbiA9IG5ldyBTdGF0ZSgpOworICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvYWRkT25EZW1hbmRTdGF0aWNJbXBvcnQvYWZ0ZXJDb25mbGljdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9hZGRPbkRlbWFuZFN0YXRpY0ltcG9ydC9hZnRlckNvbmZsaWN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmUxY2JiNAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvYWRkT25EZW1hbmRTdGF0aWNJbXBvcnQvYWZ0ZXJDb25mbGljdC5qYXZhCkBAIC0wLDAgKzEsMTUgQEAKKy8vICJBZGQgb24gZGVtYW5kIHN0YXRpYyBpbXBvcnQgZm9yICd0ZXN0LkJhciciICJ0cnVlIgorcGFja2FnZSB0ZXN0OworCitpbXBvcnQgc3RhdGljIHRlc3QuQmFyLio7CisKK2NsYXNzIEJhciB7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCB2b2lkIGYoKSB7fQorfQorcHVibGljIGNsYXNzIEZvbyB7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCB2b2lkIGYoaW50IGkpIHt9CisKKyAgICB7CisgICAgICAgIDxjYXJldD5CYXIuZigpOyAgIC8vIGludm9rZSAnYWRkIG9uIGRlbWFuZCBzdGF0aWMgaW1wb3J0JyBmb3IgQmFyIGNsYXNzIGhlcmUuIFRoZSBjYWxsIGlzIG5vdyBkb25lIHRvIG90aGVyIG1ldGhvZC4KKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9hZGRPbkRlbWFuZFN0YXRpY0ltcG9ydC9hZnRlckNvbmZsaWN0Mi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9hZGRPbkRlbWFuZFN0YXRpY0ltcG9ydC9hZnRlckNvbmZsaWN0Mi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM1ZjBiYzYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2FkZE9uRGVtYW5kU3RhdGljSW1wb3J0L2FmdGVyQ29uZmxpY3QyLmphdmEKQEAgLTAsMCArMSwzNiBAQAorLy8gIkFkZCBvbiBkZW1hbmQgc3RhdGljIGltcG9ydCBmb3IgJ3Rlc3QuQmFyJyIgInRydWUiCitwYWNrYWdlIHRlc3Q7CisKK2ltcG9ydCBzdGF0aWMgdGVzdC5CYXIuKjsKKworY2xhc3MgQmFyIHsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIHZvaWQgZigpIHsKKyAgICB9Cit9CisKK3B1YmxpYyBjbGFzcyBGb28geworICAgIHsKKyAgICAgICAgZigpOyAgIC8vIGludm9rZSAnYWRkIG9uIGRlbWFuZCBzdGF0aWMgaW1wb3J0JyBmb3IgQmFyIGNsYXNzIGhlcmUuIFRoZSBjYWxsIGlzIG5vdyBkb25lIHRvIG90aGVyIG1ldGhvZC4KKyAgICB9CisKKyAgICBzdGF0aWMgY2xhc3MgRCB7CisgICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgdm9pZCBmKGludCBpKSB7CisgICAgICAgIH0KKworICAgICAgICB7CisgICAgICAgICAgICBCYXIuZigpOyAgIC8vIGludm9rZSAnYWRkIG9uIGRlbWFuZCBzdGF0aWMgaW1wb3J0JyBmb3IgQmFyIGNsYXNzIGhlcmUuIFRoZSBjYWxsIGlzIG5vdyBkb25lIHRvIG90aGVyIG1ldGhvZC4KKyAgICAgICAgfQorICAgIH0KKworICAgIHsKKyAgICAgICAgZigpOyAgIC8vIGludm9rZSAnYWRkIG9uIGRlbWFuZCBzdGF0aWMgaW1wb3J0JyBmb3IgQmFyIGNsYXNzIGhlcmUuIFRoZSBjYWxsIGlzIG5vdyBkb25lIHRvIG90aGVyIG1ldGhvZC4KKyAgICB9CisKKyAgICB7CisgICAgICAgIGYoKTsgICAvLyBpbnZva2UgJ2FkZCBvbiBkZW1hbmQgc3RhdGljIGltcG9ydCcgZm9yIEJhciBjbGFzcyBoZXJlLiBUaGUgY2FsbCBpcyBub3cgZG9uZSB0byBvdGhlciBtZXRob2QuCisgICAgfQorCisgICAgeworICAgICAgICBmKCk7ICAgLy8gaW52b2tlICdhZGQgb24gZGVtYW5kIHN0YXRpYyBpbXBvcnQnIGZvciBCYXIgY2xhc3MgaGVyZS4gVGhlIGNhbGwgaXMgbm93IGRvbmUgdG8gb3RoZXIgbWV0aG9kLgorICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2FkZE9uRGVtYW5kU3RhdGljSW1wb3J0L2FmdGVyTWV0aG9kUmVmZXJlbmNlLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2FkZE9uRGVtYW5kU3RhdGljSW1wb3J0L2FmdGVyTWV0aG9kUmVmZXJlbmNlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzk3ZjMwNgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvYWRkT25EZW1hbmRTdGF0aWNJbXBvcnQvYWZ0ZXJNZXRob2RSZWZlcmVuY2UuamF2YQpAQCAtMCwwICsxLDE3IEBACisvLyAiQWRkIG9uIGRlbWFuZCBzdGF0aWMgaW1wb3J0IGZvciAnamF2YS51dGlsLkFycmF5cyciICJ0cnVlIgorcGFja2FnZSB0ZXN0OworCitpbXBvcnQgamF2YS51dGlsLio7CisKK2ltcG9ydCBzdGF0aWMgamF2YS51dGlsLkFycmF5cy4qOworCitwdWJsaWMgY2xhc3MgRm9vIHsKKyAgeworICAgIEJsb2NrPEludGVnZXJbXT4gYjIgPSBBcnJheXM6OnNvcnQ7CisgICAgc29ydCgoYnl0ZVtdKSBudWxsKTsKKyAgfQorCisgIHB1YmxpYyBpbnRlcmZhY2UgQmxvY2s8VD4geworICAgIHZvaWQgYXBwbHkoVCB0KTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvYWRkT25EZW1hbmRTdGF0aWNJbXBvcnQvYWZ0ZXJNdWx0aXBsZU1ldGhvZHMuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvYWRkT25EZW1hbmRTdGF0aWNJbXBvcnQvYWZ0ZXJNdWx0aXBsZU1ldGhvZHMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MjMzYzc0Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9hZGRPbkRlbWFuZFN0YXRpY0ltcG9ydC9hZnRlck11bHRpcGxlTWV0aG9kcy5qYXZhCkBAIC0wLDAgKzEsMTQgQEAKKy8vICJBZGQgb24gZGVtYW5kIHN0YXRpYyBpbXBvcnQgZm9yICd0ZXN0LkJhciciICJ0cnVlIgorcGFja2FnZSB0ZXN0OworCitpbXBvcnQgc3RhdGljIHRlc3QuQmFyLio7CisKK2NsYXNzIEJhciB7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCB2b2lkIGYoU3RyaW5nIHMpIHt9CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCB2b2lkIGYoaW50IGkpIHt9Cit9CitwdWJsaWMgY2xhc3MgRm9vIHsKKyAgICB7CisgICAgICAgIDxjYXJldD5mKCk7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvYWRkT25EZW1hbmRTdGF0aWNJbXBvcnQvYWZ0ZXJRdWFsaWZpZWRJbmhlcml0YW5jZS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9hZGRPbkRlbWFuZFN0YXRpY0ltcG9ydC9hZnRlclF1YWxpZmllZEluaGVyaXRhbmNlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWEwNDNiMQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvYWRkT25EZW1hbmRTdGF0aWNJbXBvcnQvYWZ0ZXJRdWFsaWZpZWRJbmhlcml0YW5jZS5qYXZhCkBAIC0wLDAgKzEsMTcgQEAKKy8vICJBZGQgb24gZGVtYW5kIHN0YXRpYyBpbXBvcnQgZm9yICd0ZXN0LkdyZWdvcmlhbkNhbGVuZGFyJyIgInRydWUiCitwYWNrYWdlIHRlc3Q7CisKK2ltcG9ydCBzdGF0aWMgdGVzdC5HcmVnb3JpYW5DYWxlbmRhci4qOworCitwdWJsaWMgY2xhc3MgRm9vIHsKKyAgICB7CisgICAgICBnZXRJbnN0YW5jZSgpOworICAgIH0KK30KKworY2xhc3MgQ2FsZW5kYXIgeworICBwdWJsaWMgc3RhdGljIGZpbmFsIHZvaWQgZ2V0SW5zdGFuY2UoKSB7fQorfQorCitjbGFzcyBHcmVnb3JpYW5DYWxlbmRhciBleHRlbmRzIENhbGVuZGFyIHsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2FkZE9uRGVtYW5kU3RhdGljSW1wb3J0L2FmdGVyU2luZ2xlQ29kZVJlZmVyZW5jZS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9hZGRPbkRlbWFuZFN0YXRpY0ltcG9ydC9hZnRlclNpbmdsZUNvZGVSZWZlcmVuY2UuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNDU0MjUzCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9hZGRPbkRlbWFuZFN0YXRpY0ltcG9ydC9hZnRlclNpbmdsZUNvZGVSZWZlcmVuY2UuamF2YQpAQCAtMCwwICsxLDEzIEBACisvLyAiQWRkIHN0YXRpYyBpbXBvcnQgZm9yICd0ZXN0LkJhci5Gb28nIiAidHJ1ZSIKK3BhY2thZ2UgdGVzdDsKKworaW1wb3J0IHN0YXRpYyB0ZXN0LkJhci5Gb287CisKK2NsYXNzIEJhciB7CisgICAgcHVibGljIHN0YXRpYyBjbGFzcyBGb28ge30KK30KK3B1YmxpYyBjbGFzcyBPT097CisgICAgeworICAgICAgICBGb28gZm9vOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2FkZE9uRGVtYW5kU3RhdGljSW1wb3J0L2FmdGVyU2luZ2xlQ29kZVJlZmVyZW5jZUluQW5ub3RhdGlvbi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9hZGRPbkRlbWFuZFN0YXRpY0ltcG9ydC9hZnRlclNpbmdsZUNvZGVSZWZlcmVuY2VJbkFubm90YXRpb24uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNTMyNzllCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9hZGRPbkRlbWFuZFN0YXRpY0ltcG9ydC9hZnRlclNpbmdsZUNvZGVSZWZlcmVuY2VJbkFubm90YXRpb24uamF2YQpAQCAtMCwwICsxLDExIEBACisvLyAiQWRkIHN0YXRpYyBpbXBvcnQgZm9yICd0ZXN0LkJhci5Gb28nIiAidHJ1ZSIKK3BhY2thZ2UgdGVzdDsKKworaW1wb3J0IHN0YXRpYyB0ZXN0LkJhci5Gb287CisKK2NsYXNzIEJhciB7CisgICAgcHVibGljIHN0YXRpYyBAaW50ZXJmYWNlIEZvbyB7fQorfQorQEZvbworcHVibGljIGNsYXNzIE9PTyB7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9hZGRPbkRlbWFuZFN0YXRpY0ltcG9ydC9hZnRlclNpbmdsZU1ldGhvZC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9hZGRPbkRlbWFuZFN0YXRpY0ltcG9ydC9hZnRlclNpbmdsZU1ldGhvZC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdhMjEyMTAKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2FkZE9uRGVtYW5kU3RhdGljSW1wb3J0L2FmdGVyU2luZ2xlTWV0aG9kLmphdmEKQEAgLTAsMCArMSwxNCBAQAorLy8gIkFkZCBzdGF0aWMgaW1wb3J0IGZvciAndGVzdC5CYXIuZiciICJ0cnVlIgorcGFja2FnZSB0ZXN0OworCitpbXBvcnQgc3RhdGljIHRlc3QuQmFyLmY7CisKK2NsYXNzIEJhciB7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCB2b2lkIGYoKSB7fQorfQorcHVibGljIGNsYXNzIEZvbyB7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCB2b2lkIGYoaW50IGkpIHt9CisgICAgeworICAgICAgICBCYXIuPGNhcmV0PmYoKTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9hZGRPbkRlbWFuZFN0YXRpY0ltcG9ydC9hZnRlclNpbmdsZVF1YWxpZmllZEluaGVyaXRhbmNlLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2FkZE9uRGVtYW5kU3RhdGljSW1wb3J0L2FmdGVyU2luZ2xlUXVhbGlmaWVkSW5oZXJpdGFuY2UuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NTYyZTUyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9hZGRPbkRlbWFuZFN0YXRpY0ltcG9ydC9hZnRlclNpbmdsZVF1YWxpZmllZEluaGVyaXRhbmNlLmphdmEKQEAgLTAsMCArMSwxNyBAQAorLy8gIkFkZCBzdGF0aWMgaW1wb3J0IGZvciAndGVzdC5DYWxlbmRhci5nZXRJbnN0YW5jZSciICJ0cnVlIgorcGFja2FnZSB0ZXN0OworCitpbXBvcnQgc3RhdGljIHRlc3QuQ2FsZW5kYXIuZ2V0SW5zdGFuY2U7CisKK3B1YmxpYyBjbGFzcyBGb28geworICAgIHsKKyAgICAgIGdldEluc3RhbmNlKCk7CisgICAgfQorfQorCitjbGFzcyBDYWxlbmRhciB7CisgIHB1YmxpYyBzdGF0aWMgZmluYWwgdm9pZCBnZXRJbnN0YW5jZSgpIHt9Cit9CisKK2NsYXNzIEdyZWdvcmlhbkNhbGVuZGFyIGV4dGVuZHMgQ2FsZW5kYXIgeworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvYWRkT25EZW1hbmRTdGF0aWNJbXBvcnQvYWZ0ZXJTaW5nbGVTdXBlck1ldGhvZC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9hZGRPbkRlbWFuZFN0YXRpY0ltcG9ydC9hZnRlclNpbmdsZVN1cGVyTWV0aG9kLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjQwOGEwNQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvYWRkT25EZW1hbmRTdGF0aWNJbXBvcnQvYWZ0ZXJTaW5nbGVTdXBlck1ldGhvZC5qYXZhCkBAIC0wLDAgKzEsMTcgQEAKKy8vICJBZGQgc3RhdGljIGltcG9ydCBmb3IgJ3Rlc3QuQmFyLmYnIiAidHJ1ZSIKK3BhY2thZ2UgdGVzdDsKKworaW1wb3J0IHN0YXRpYyB0ZXN0LkJhci5mOworCitjbGFzcyBCYXIgeworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgdm9pZCBmKCkge30KK30KK3B1YmxpYyBjbGFzcyBGb28gZXh0ZW5kcyBGb29TdXBlcnsKKyAgICB7CisgICAgICAgIEJhci48Y2FyZXQ+ZigpOworICAgIH0KK30KKworY2xhc3MgRm9vU3VwZXIgeworICBwdWJsaWMgc3RhdGljIGZpbmFsIHZvaWQgZihpbnQgaSkge30KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2FkZE9uRGVtYW5kU3RhdGljSW1wb3J0L2JlZm9yZUFscmVhZHkuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvYWRkT25EZW1hbmRTdGF0aWNJbXBvcnQvYmVmb3JlQWxyZWFkeS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgyZWExN2YKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2FkZE9uRGVtYW5kU3RhdGljSW1wb3J0L2JlZm9yZUFscmVhZHkuamF2YQpAQCAtMCwwICsxLDE0IEBACisvLyAiQWRkIG9uIGRlbWFuZCBzdGF0aWMgaW1wb3J0IGZvciAndGVzdC5CYXInIiAiZmFsc2UiCitwYWNrYWdlIHRlc3Q7CitpbXBvcnQgc3RhdGljIHRlc3QuQmFyLio7CisKK2NsYXNzIEJhciB7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCB2b2lkIGYoKSB7fQorfQorcHVibGljIGNsYXNzIEZvbyB7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCB2b2lkIGYoaW50IGkpIHt9CisKKyAgICB7CisgICAgICAgIDxjYXJldD5CYXIuZigpOyAgIC8vIGludm9rZSAnYWRkIG9uIGRlbWFuZCBzdGF0aWMgaW1wb3J0JyBmb3IgQmFyIGNsYXNzIGhlcmUuIFRoZSBjYWxsIGlzIG5vdyBkb25lIHRvIG90aGVyIG1ldGhvZC4KKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9hZGRPbkRlbWFuZFN0YXRpY0ltcG9ydC9iZWZvcmVDb2xsYXBzZUlubmVyQ2xhc3MuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvYWRkT25EZW1hbmRTdGF0aWNJbXBvcnQvYmVmb3JlQ29sbGFwc2VJbm5lckNsYXNzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTZjYWFkMAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvYWRkT25EZW1hbmRTdGF0aWNJbXBvcnQvYmVmb3JlQ29sbGFwc2VJbm5lckNsYXNzLmphdmEKQEAgLTAsMCArMSw4IEBACisvLyAiQWRkIG9uIGRlbWFuZCBzdGF0aWMgaW1wb3J0IGZvciAnamF2YS5sYW5nLlRocmVhZCciICJ0cnVlIgorcGFja2FnZSB0ZXN0OworCitwdWJsaWMgY2xhc3MgRm9vIHsKKyAgICB7CisgICAgICAgIFRocmU8Y2FyZXQ+YWQuU3RhdGUgZW4gPSBuZXcgVGhyZWFkLlN0YXRlKCk7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9hZGRPbkRlbWFuZFN0YXRpY0ltcG9ydC9iZWZvcmVDb25mbGljdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9hZGRPbkRlbWFuZFN0YXRpY0ltcG9ydC9iZWZvcmVDb25mbGljdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA5YWY5ZGMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2FkZE9uRGVtYW5kU3RhdGljSW1wb3J0L2JlZm9yZUNvbmZsaWN0LmphdmEKQEAgLTAsMCArMSwxMyBAQAorLy8gIkFkZCBvbiBkZW1hbmQgc3RhdGljIGltcG9ydCBmb3IgJ3Rlc3QuQmFyJyIgInRydWUiCitwYWNrYWdlIHRlc3Q7CisKK2NsYXNzIEJhciB7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCB2b2lkIGYoKSB7fQorfQorcHVibGljIGNsYXNzIEZvbyB7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCB2b2lkIGYoaW50IGkpIHt9CisKKyAgICB7CisgICAgICAgIDxjYXJldD5CYXIuZigpOyAgIC8vIGludm9rZSAnYWRkIG9uIGRlbWFuZCBzdGF0aWMgaW1wb3J0JyBmb3IgQmFyIGNsYXNzIGhlcmUuIFRoZSBjYWxsIGlzIG5vdyBkb25lIHRvIG90aGVyIG1ldGhvZC4KKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9hZGRPbkRlbWFuZFN0YXRpY0ltcG9ydC9iZWZvcmVDb25mbGljdDIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvYWRkT25EZW1hbmRTdGF0aWNJbXBvcnQvYmVmb3JlQ29uZmxpY3QyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWI5YWVhNgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvYWRkT25EZW1hbmRTdGF0aWNJbXBvcnQvYmVmb3JlQ29uZmxpY3QyLmphdmEKQEAgLTAsMCArMSwzNCBAQAorLy8gIkFkZCBvbiBkZW1hbmQgc3RhdGljIGltcG9ydCBmb3IgJ3Rlc3QuQmFyJyIgInRydWUiCitwYWNrYWdlIHRlc3Q7CisKK2NsYXNzIEJhciB7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCB2b2lkIGYoKSB7CisgICAgfQorfQorCitwdWJsaWMgY2xhc3MgRm9vIHsKKyAgICB7CisgICAgICAgIEJhci5mKCk7ICAgLy8gaW52b2tlICdhZGQgb24gZGVtYW5kIHN0YXRpYyBpbXBvcnQnIGZvciBCYXIgY2xhc3MgaGVyZS4gVGhlIGNhbGwgaXMgbm93IGRvbmUgdG8gb3RoZXIgbWV0aG9kLgorICAgIH0KKworICAgIHN0YXRpYyBjbGFzcyBEIHsKKyAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCB2b2lkIGYoaW50IGkpIHsKKyAgICAgICAgfQorCisgICAgICAgIHsKKyAgICAgICAgICAgIEJhci5mKCk7ICAgLy8gaW52b2tlICdhZGQgb24gZGVtYW5kIHN0YXRpYyBpbXBvcnQnIGZvciBCYXIgY2xhc3MgaGVyZS4gVGhlIGNhbGwgaXMgbm93IGRvbmUgdG8gb3RoZXIgbWV0aG9kLgorICAgICAgICB9CisgICAgfQorCisgICAgeworICAgICAgICBCYXIuZigpOyAgIC8vIGludm9rZSAnYWRkIG9uIGRlbWFuZCBzdGF0aWMgaW1wb3J0JyBmb3IgQmFyIGNsYXNzIGhlcmUuIFRoZSBjYWxsIGlzIG5vdyBkb25lIHRvIG90aGVyIG1ldGhvZC4KKyAgICB9CisKKyAgICB7CisgICAgICAgIEJhci5mKCk7ICAgLy8gaW52b2tlICdhZGQgb24gZGVtYW5kIHN0YXRpYyBpbXBvcnQnIGZvciBCYXIgY2xhc3MgaGVyZS4gVGhlIGNhbGwgaXMgbm93IGRvbmUgdG8gb3RoZXIgbWV0aG9kLgorICAgIH0KKworICAgIHsKKyAgICAgICAgPGNhcmV0PkJhci5mKCk7ICAgLy8gaW52b2tlICdhZGQgb24gZGVtYW5kIHN0YXRpYyBpbXBvcnQnIGZvciBCYXIgY2xhc3MgaGVyZS4gVGhlIGNhbGwgaXMgbm93IGRvbmUgdG8gb3RoZXIgbWV0aG9kLgorICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2FkZE9uRGVtYW5kU3RhdGljSW1wb3J0L2JlZm9yZU1ldGhvZFJlZmVyZW5jZS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9hZGRPbkRlbWFuZFN0YXRpY0ltcG9ydC9iZWZvcmVNZXRob2RSZWZlcmVuY2UuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZjQ1ZDA2Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9hZGRPbkRlbWFuZFN0YXRpY0ltcG9ydC9iZWZvcmVNZXRob2RSZWZlcmVuY2UuamF2YQpAQCAtMCwwICsxLDE1IEBACisvLyAiQWRkIG9uIGRlbWFuZCBzdGF0aWMgaW1wb3J0IGZvciAnamF2YS51dGlsLkFycmF5cyciICJ0cnVlIgorcGFja2FnZSB0ZXN0OworCitpbXBvcnQgamF2YS51dGlsLio7CisKK3B1YmxpYyBjbGFzcyBGb28geworICB7CisgICAgQmxvY2s8SW50ZWdlcltdPiBiMiA9IEFycmF5czo6c29ydDsKKyAgICBBcnJhPGNhcmV0PnlzLnNvcnQoKGJ5dGVbXSludWxsKTsKKyAgfQorCisgIHB1YmxpYyBpbnRlcmZhY2UgQmxvY2s8VD4geworICAgIHZvaWQgYXBwbHkoVCB0KTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvYWRkT25EZW1hbmRTdGF0aWNJbXBvcnQvYmVmb3JlTXVsdGlwbGVNZXRob2RzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2FkZE9uRGVtYW5kU3RhdGljSW1wb3J0L2JlZm9yZU11bHRpcGxlTWV0aG9kcy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAxZTg0NmQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2FkZE9uRGVtYW5kU3RhdGljSW1wb3J0L2JlZm9yZU11bHRpcGxlTWV0aG9kcy5qYXZhCkBAIC0wLDAgKzEsMTIgQEAKKy8vICJBZGQgb24gZGVtYW5kIHN0YXRpYyBpbXBvcnQgZm9yICd0ZXN0LkJhciciICJ0cnVlIgorcGFja2FnZSB0ZXN0OworCitjbGFzcyBCYXIgeworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgdm9pZCBmKFN0cmluZyBzKSB7fQorICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgdm9pZCBmKGludCBpKSB7fQorfQorcHVibGljIGNsYXNzIEZvbyB7CisgICAgeworICAgICAgICA8Y2FyZXQ+QmFyLmYoKTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9hZGRPbkRlbWFuZFN0YXRpY0ltcG9ydC9iZWZvcmVQcml2YXRlRW51bUluc2lkZS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9hZGRPbkRlbWFuZFN0YXRpY0ltcG9ydC9iZWZvcmVQcml2YXRlRW51bUluc2lkZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQyMzBjNjYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2FkZE9uRGVtYW5kU3RhdGljSW1wb3J0L2JlZm9yZVByaXZhdGVFbnVtSW5zaWRlLmphdmEKQEAgLTAsMCArMSw4IEBACisvLyAiQWRkIG9uIGRlbWFuZCBzdGF0aWMgaW1wb3J0IGZvciAndGVzdC5PdXRlci5TdGF0ZSciICJmYWxzZSIKK3BhY2thZ2UgdGVzdDsKKworcHVibGljIGNsYXNzIE91dGVyIHsKKyAgICBwcml2YXRlIGVudW0gU3RhdGUgeyBSRURPTkUsIFVORE9ORSB9CisKKyAgICBwcml2YXRlIFN0YXRlIHN0YXRlID0gU3RhPGNhcmV0PnRlLlJFRE9ORTsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2FkZE9uRGVtYW5kU3RhdGljSW1wb3J0L2JlZm9yZVF1YWxpZmllZEluaGVyaXRhbmNlLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2FkZE9uRGVtYW5kU3RhdGljSW1wb3J0L2JlZm9yZVF1YWxpZmllZEluaGVyaXRhbmNlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjY5NWMxYwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvYWRkT25EZW1hbmRTdGF0aWNJbXBvcnQvYmVmb3JlUXVhbGlmaWVkSW5oZXJpdGFuY2UuamF2YQpAQCAtMCwwICsxLDE1IEBACisvLyAiQWRkIG9uIGRlbWFuZCBzdGF0aWMgaW1wb3J0IGZvciAndGVzdC5HcmVnb3JpYW5DYWxlbmRhciciICJ0cnVlIgorcGFja2FnZSB0ZXN0OworCitwdWJsaWMgY2xhc3MgRm9vIHsKKyAgICB7CisgICAgICA8Y2FyZXQ+R3JlZ29yaWFuQ2FsZW5kYXIuZ2V0SW5zdGFuY2UoKTsKKyAgICB9Cit9CisKK2NsYXNzIENhbGVuZGFyIHsKKyAgcHVibGljIHN0YXRpYyBmaW5hbCB2b2lkIGdldEluc3RhbmNlKCkge30KK30KKworY2xhc3MgR3JlZ29yaWFuQ2FsZW5kYXIgZXh0ZW5kcyBDYWxlbmRhciB7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9hZGRPbkRlbWFuZFN0YXRpY0ltcG9ydC9iZWZvcmVTaW5nbGVDb2RlUmVmZXJlbmNlLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2FkZE9uRGVtYW5kU3RhdGljSW1wb3J0L2JlZm9yZVNpbmdsZUNvZGVSZWZlcmVuY2UuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYWM2YWY5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9hZGRPbkRlbWFuZFN0YXRpY0ltcG9ydC9iZWZvcmVTaW5nbGVDb2RlUmVmZXJlbmNlLmphdmEKQEAgLTAsMCArMSwxMSBAQAorLy8gIkFkZCBzdGF0aWMgaW1wb3J0IGZvciAndGVzdC5CYXIuRm9vJyIgInRydWUiCitwYWNrYWdlIHRlc3Q7CisKK2NsYXNzIEJhciB7CisgICAgcHVibGljIHN0YXRpYyBjbGFzcyBGb28ge30KK30KK3B1YmxpYyBjbGFzcyBPT097CisgICAgeworICAgICAgICBCYXIuPGNhcmV0PkZvbyBmb287CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvYWRkT25EZW1hbmRTdGF0aWNJbXBvcnQvYmVmb3JlU2luZ2xlQ29kZVJlZmVyZW5jZUluQW5ub3RhdGlvbi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9hZGRPbkRlbWFuZFN0YXRpY0ltcG9ydC9iZWZvcmVTaW5nbGVDb2RlUmVmZXJlbmNlSW5Bbm5vdGF0aW9uLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjYxOTU4OAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvYWRkT25EZW1hbmRTdGF0aWNJbXBvcnQvYmVmb3JlU2luZ2xlQ29kZVJlZmVyZW5jZUluQW5ub3RhdGlvbi5qYXZhCkBAIC0wLDAgKzEsOSBAQAorLy8gIkFkZCBzdGF0aWMgaW1wb3J0IGZvciAndGVzdC5CYXIuRm9vJyIgInRydWUiCitwYWNrYWdlIHRlc3Q7CisKK2NsYXNzIEJhciB7CisgICAgcHVibGljIHN0YXRpYyBAaW50ZXJmYWNlIEZvbyB7fQorfQorQEJhci48Y2FyZXQ+Rm9vCitwdWJsaWMgY2xhc3MgT09PIHsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2FkZE9uRGVtYW5kU3RhdGljSW1wb3J0L2JlZm9yZVNpbmdsZUltcG9ydERpc2FibGVkV2hlbk9uRGVtYW5kRXhpc3RzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2FkZE9uRGVtYW5kU3RhdGljSW1wb3J0L2JlZm9yZVNpbmdsZUltcG9ydERpc2FibGVkV2hlbk9uRGVtYW5kRXhpc3RzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTAzYTRhYwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvYWRkT25EZW1hbmRTdGF0aWNJbXBvcnQvYmVmb3JlU2luZ2xlSW1wb3J0RGlzYWJsZWRXaGVuT25EZW1hbmRFeGlzdHMuamF2YQpAQCAtMCwwICsxLDE3IEBACisvLyAiQWRkIHN0YXRpYyBpbXBvcnQgZm9yICd0ZXN0LkJhci5mJyIgImZhbHNlIgorcGFja2FnZSB0ZXN0OworCitpbXBvcnQgc3RhdGljIHRlc3QuQmFyLio7CisKK2NsYXNzIEJhciB7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCB2b2lkIGYoKSB7fQorfQorcHVibGljIGNsYXNzIEZvbyBleHRlbmRzIEZvb1N1cGVyeworICAgIHsKKyAgICAgICAgQmFyLjxjYXJldD5mKCk7CisgICAgfQorfQorCitjbGFzcyBGb29TdXBlciB7CisgIHB1YmxpYyBzdGF0aWMgZmluYWwgdm9pZCBmKGludCBpKSB7fQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvYWRkT25EZW1hbmRTdGF0aWNJbXBvcnQvYmVmb3JlU2luZ2xlTWV0aG9kLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2FkZE9uRGVtYW5kU3RhdGljSW1wb3J0L2JlZm9yZVNpbmdsZU1ldGhvZC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUxOTliODIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2FkZE9uRGVtYW5kU3RhdGljSW1wb3J0L2JlZm9yZVNpbmdsZU1ldGhvZC5qYXZhCkBAIC0wLDAgKzEsMTIgQEAKKy8vICJBZGQgc3RhdGljIGltcG9ydCBmb3IgJ3Rlc3QuQmFyLmYnIiAidHJ1ZSIKK3BhY2thZ2UgdGVzdDsKKworY2xhc3MgQmFyIHsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIHZvaWQgZigpIHt9Cit9CitwdWJsaWMgY2xhc3MgRm9vIHsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIHZvaWQgZihpbnQgaSkge30KKyAgICB7CisgICAgICAgIEJhci48Y2FyZXQ+ZigpOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2FkZE9uRGVtYW5kU3RhdGljSW1wb3J0L2JlZm9yZVNpbmdsZVF1YWxpZmllZEluaGVyaXRhbmNlLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2FkZE9uRGVtYW5kU3RhdGljSW1wb3J0L2JlZm9yZVNpbmdsZVF1YWxpZmllZEluaGVyaXRhbmNlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGQ0ZDEwZAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvYWRkT25EZW1hbmRTdGF0aWNJbXBvcnQvYmVmb3JlU2luZ2xlUXVhbGlmaWVkSW5oZXJpdGFuY2UuamF2YQpAQCAtMCwwICsxLDE1IEBACisvLyAiQWRkIHN0YXRpYyBpbXBvcnQgZm9yICd0ZXN0LkNhbGVuZGFyLmdldEluc3RhbmNlJyIgInRydWUiCitwYWNrYWdlIHRlc3Q7CisKK3B1YmxpYyBjbGFzcyBGb28geworICAgIHsKKyAgICAgIEdyZWdvcmlhbkNhbGVuZGFyLmdldDxjYXJldD5JbnN0YW5jZSgpOworICAgIH0KK30KKworY2xhc3MgQ2FsZW5kYXIgeworICBwdWJsaWMgc3RhdGljIGZpbmFsIHZvaWQgZ2V0SW5zdGFuY2UoKSB7fQorfQorCitjbGFzcyBHcmVnb3JpYW5DYWxlbmRhciBleHRlbmRzIENhbGVuZGFyIHsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2FkZE9uRGVtYW5kU3RhdGljSW1wb3J0L2JlZm9yZVNpbmdsZVN1cGVyTWV0aG9kLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2FkZE9uRGVtYW5kU3RhdGljSW1wb3J0L2JlZm9yZVNpbmdsZVN1cGVyTWV0aG9kLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTZjZGIxOQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvYWRkT25EZW1hbmRTdGF0aWNJbXBvcnQvYmVmb3JlU2luZ2xlU3VwZXJNZXRob2QuamF2YQpAQCAtMCwwICsxLDE1IEBACisvLyAiQWRkIHN0YXRpYyBpbXBvcnQgZm9yICd0ZXN0LkJhci5mJyIgInRydWUiCitwYWNrYWdlIHRlc3Q7CisKK2NsYXNzIEJhciB7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCB2b2lkIGYoKSB7fQorfQorcHVibGljIGNsYXNzIEZvbyBleHRlbmRzIEZvb1N1cGVyeworICAgIHsKKyAgICAgICAgQmFyLjxjYXJldD5mKCk7CisgICAgfQorfQorCitjbGFzcyBGb29TdXBlciB7CisgIHB1YmxpYyBzdGF0aWMgZmluYWwgdm9pZCBmKGludCBpKSB7fQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvYWRkUmV0dXJuL2FmdGVyMS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9hZGRSZXR1cm4vYWZ0ZXIxLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTI1ZWE1OQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvYWRkUmV0dXJuL2FmdGVyMS5qYXZhCkBAIC0wLDAgKzEsNyBAQAorLy8gIkFkZCBSZXR1cm4gU3RhdGVtZW50IiAidHJ1ZSIKK2NsYXNzIGEgeworIGludCBmKCkgeworICAgICByZXR1cm4gPGNhcmV0PjxzZWxlY3Rpb24+MDwvc2VsZWN0aW9uPjsKKyB9Cit9CisKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvYWRkUmV0dXJuL2FmdGVyMi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9hZGRSZXR1cm4vYWZ0ZXIyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGMwNjQ5NwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvYWRkUmV0dXJuL2FmdGVyMi5qYXZhCkBAIC0wLDAgKzEsNyBAQAorLy8gIkFkZCBSZXR1cm4gU3RhdGVtZW50IiAidHJ1ZSIKK2NsYXNzIGEgeworIFN0cmluZyBmKCkgeworICAgICByZXR1cm4gPGNhcmV0PjxzZWxlY3Rpb24+bnVsbDwvc2VsZWN0aW9uPjsKKyB9Cit9CisKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvYWRkUmV0dXJuL2FmdGVyMy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9hZGRSZXR1cm4vYWZ0ZXIzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjVlNGJkZgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvYWRkUmV0dXJuL2FmdGVyMy5qYXZhCkBAIC0wLDAgKzEsOCBAQAorLy8gIkFkZCBSZXR1cm4gU3RhdGVtZW50IiAidHJ1ZSIKK2NsYXNzIGEgeworIGludCBmKCkgeworICAgaW50IGkgPSAwOworICAgICByZXR1cm4gPGNhcmV0PjxzZWxlY3Rpb24+aTwvc2VsZWN0aW9uPjsKKyB9Cit9CisKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvYWRkUmV0dXJuL2FmdGVyNC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9hZGRSZXR1cm4vYWZ0ZXI0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzEyN2U0NAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvYWRkUmV0dXJuL2FmdGVyNC5qYXZhCkBAIC0wLDAgKzEsNyBAQAorLy8gIkFkZCBSZXR1cm4gU3RhdGVtZW50IiAidHJ1ZSIKK2NsYXNzIGEgeworIGludCBmKGludCBwKSB7CisgICAgIHJldHVybiA8Y2FyZXQ+PHNlbGVjdGlvbj5wPC9zZWxlY3Rpb24+OworIH0KK30KKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9hZGRSZXR1cm4vYWZ0ZXI1LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2FkZFJldHVybi9hZnRlcjUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ODM3NWYzCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9hZGRSZXR1cm4vYWZ0ZXI1LmphdmEKQEAgLTAsMCArMSw4IEBACisvLyAiQWRkIFJldHVybiBTdGF0ZW1lbnQiICJ0cnVlIgorY2xhc3MgYSB7CisgaW50IGYoKSB7CisgICBzaG9ydCBpID0gMDsKKyAgICAgcmV0dXJuIDxjYXJldD48c2VsZWN0aW9uPjA8L3NlbGVjdGlvbj47CisgfQorfQorCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2FkZFJldHVybi9iZWZvcmUxLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2FkZFJldHVybi9iZWZvcmUxLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmI1ZTMzYQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvYWRkUmV0dXJuL2JlZm9yZTEuamF2YQpAQCAtMCwwICsxLDYgQEAKKy8vICJBZGQgUmV0dXJuIFN0YXRlbWVudCIgInRydWUiCitjbGFzcyBhIHsKKyBpbnQgZigpIHsKKyA8Y2FyZXQ+fQorfQorCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2FkZFJldHVybi9iZWZvcmUyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2FkZFJldHVybi9iZWZvcmUyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmM1MmQzNAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvYWRkUmV0dXJuL2JlZm9yZTIuamF2YQpAQCAtMCwwICsxLDYgQEAKKy8vICJBZGQgUmV0dXJuIFN0YXRlbWVudCIgInRydWUiCitjbGFzcyBhIHsKKyBTdHJpbmcgZigpIHsKKyA8Y2FyZXQ+fQorfQorCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2FkZFJldHVybi9iZWZvcmUzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2FkZFJldHVybi9iZWZvcmUzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTAyMWYwNgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvYWRkUmV0dXJuL2JlZm9yZTMuamF2YQpAQCAtMCwwICsxLDcgQEAKKy8vICJBZGQgUmV0dXJuIFN0YXRlbWVudCIgInRydWUiCitjbGFzcyBhIHsKKyBpbnQgZigpIHsKKyAgIGludCBpID0gMDsKKyA8Y2FyZXQ+fQorfQorCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2FkZFJldHVybi9iZWZvcmU0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2FkZFJldHVybi9iZWZvcmU0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGM4OWM1MmIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2FkZFJldHVybi9iZWZvcmU0LmphdmEKQEAgLTAsMCArMSw2IEBACisvLyAiQWRkIFJldHVybiBTdGF0ZW1lbnQiICJ0cnVlIgorY2xhc3MgYSB7CisgaW50IGYoaW50IHApIHsKKyA8Y2FyZXQ+fQorfQorCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2FkZFJldHVybi9iZWZvcmU1LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2FkZFJldHVybi9iZWZvcmU1LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmFiZGVlYQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvYWRkUmV0dXJuL2JlZm9yZTUuamF2YQpAQCAtMCwwICsxLDcgQEAKKy8vICJBZGQgUmV0dXJuIFN0YXRlbWVudCIgInRydWUiCitjbGFzcyBhIHsKKyBpbnQgZigpIHsKKyAgIHNob3J0IGkgPSAwOworIDxjYXJldD59Cit9CisKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvYWRkUmV0dXJuL2JlZm9yZTYuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvYWRkUmV0dXJuL2JlZm9yZTYuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZWIzMjBkCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9hZGRSZXR1cm4vYmVmb3JlNi5qYXZhCkBAIC0wLDAgKzEsNyBAQAorLy8gIkFkZCBNZXRob2QgQm9keSIgImZhbHNlIgorY2xhc3MgYSB7CisgU3RyaW5nIGYoKSB7CisgICByZXR1cm4gbnVsbDsKKyA8Y2FyZXQ+fQorfQorCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2FkZFJ1bnRpbWVFeGNlcHRpb25Ub1Rocm93cy9hZnRlcjEuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvYWRkUnVudGltZUV4Y2VwdGlvblRvVGhyb3dzL2FmdGVyMS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYzMjE3NGYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2FkZFJ1bnRpbWVFeGNlcHRpb25Ub1Rocm93cy9hZnRlcjEuamF2YQpAQCAtMCwwICsxLDcgQEAKKy8vICJBZGQgUnVudGltZSBFeGNlcHRpb24ocykgdG8gTWV0aG9kIFNpZ25hdHVyZSIgInRydWUiCitjbGFzcyBhIHsKKyAgIGludCBmKCkgdGhyb3dzIFJ1bnRpbWVFeGNlcHRpb24geworICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigpPGNhcmV0PjsKKyAgIH0KK30KKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9hZGRSdW50aW1lRXhjZXB0aW9uVG9UaHJvd3MvYmVmb3JlMS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9hZGRSdW50aW1lRXhjZXB0aW9uVG9UaHJvd3MvYmVmb3JlMS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc4M2RkNDcKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2FkZFJ1bnRpbWVFeGNlcHRpb25Ub1Rocm93cy9iZWZvcmUxLmphdmEKQEAgLTAsMCArMSw3IEBACisvLyAiQWRkIFJ1bnRpbWUgRXhjZXB0aW9uKHMpIHRvIE1ldGhvZCBTaWduYXR1cmUiICJ0cnVlIgorY2xhc3MgYSB7CisgICBpbnQgZigpIHsKKyAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oKTxjYXJldD47CisgICB9Cit9CisKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvYWRkUnVudGltZUV4Y2VwdGlvblRvVGhyb3dzL2JlZm9yZTIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvYWRkUnVudGltZUV4Y2VwdGlvblRvVGhyb3dzL2JlZm9yZTIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYTdlYjE0Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9hZGRSdW50aW1lRXhjZXB0aW9uVG9UaHJvd3MvYmVmb3JlMi5qYXZhCkBAIC0wLDAgKzEsNyBAQAorLy8gIkFkZCBSdW50aW1lIEV4Y2VwdGlvbihzKSB0byBNZXRob2QgU2lnbmF0dXJlIiAiZmFsc2UiCitjbGFzcyBhIHsKKyAgIGludCBmKCkgdGhyb3dzIFJ1bnRpbWVFeGNlcHRpb257CisgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCk8Y2FyZXQ+OworICAgfQorfQorCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2FkZFNpbmdsZVN0YXRpY0ltcG9ydC9JbmFjY2Vzc2libGUuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvYWRkU2luZ2xlU3RhdGljSW1wb3J0L0luYWNjZXNzaWJsZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjExYzRmNTUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2FkZFNpbmdsZVN0YXRpY0ltcG9ydC9JbmFjY2Vzc2libGUuamF2YQpAQCAtMCwwICsxLDggQEAKK3BhY2thZ2UgaW1wbDsKK2ltcG9ydCBmb28uRm9vOworcHVibGljIGNsYXNzIEZvb0ltcGwgZXh0ZW5kcyBGb28ge30KK2NsYXNzIEJhciB7CisgIHZvaWQgZG9TbXRoKEZvb0ltcGwgaW0pIHsKKyAgICBpbS5mPGNhcmV0Pm9vKCk7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2FkZFNpbmdsZVN0YXRpY0ltcG9ydC9JbmFjY2Vzc2libGVfYWZ0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvYWRkU2luZ2xlU3RhdGljSW1wb3J0L0luYWNjZXNzaWJsZV9hZnRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNmODlmMGYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2FkZFNpbmdsZVN0YXRpY0ltcG9ydC9JbmFjY2Vzc2libGVfYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDExIEBACitwYWNrYWdlIGltcGw7CitpbXBvcnQgZm9vLkZvbzsKKworaW1wb3J0IHN0YXRpYyBpbXBsLkZvb0ltcGwuZm9vOworCitwdWJsaWMgY2xhc3MgRm9vSW1wbCBleHRlbmRzIEZvbyB7fQorY2xhc3MgQmFyIHsKKyAgdm9pZCBkb1NtdGgoRm9vSW1wbCBpbSkgeworICAgIGZvbygpOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9hZGRUb1Rocm93cy9hZnRlcjEuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvYWRkVG9UaHJvd3MvYWZ0ZXIxLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzZjNzJkNgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvYWRkVG9UaHJvd3MvYWZ0ZXIxLmphdmEKQEAgLTAsMCArMSwxMyBAQAorLy8gIkFkZCBFeGNlcHRpb24gdG8gTWV0aG9kIFNpZ25hdHVyZSIgInRydWUiCitjbGFzcyBDIHsKKyAgICBzdGF0aWMgY2xhc3MgRTEgZXh0ZW5kcyBFeGNlcHRpb24geyB9CisKKyAgICBzdGF0aWMgY2xhc3MgTXlSZXNvdXJjZSBpbXBsZW1lbnRzIEF1dG9DbG9zZWFibGUgeworICAgICAgICBwdWJsaWMgdm9pZCBjbG9zZSgpIHRocm93cyBFMSB7IH0KKyAgICB9CisKKyAgICB2b2lkIG0oKSB0aHJvd3MgRTEgeworICAgICAgICB0cnkgKE15UmVzb3VyY2UgciA9IG5ldyBNeVJlc291cmNlKCkpIHsKKyAgICAgICAgfQorICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2FkZFRvVGhyb3dzL2FmdGVyMi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9hZGRUb1Rocm93cy9hZnRlcjIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMWEyZTkzCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9hZGRUb1Rocm93cy9hZnRlcjIuamF2YQpAQCAtMCwwICsxLDE1IEBACisvLyAiQWRkIEV4Y2VwdGlvbiB0byBNZXRob2QgU2lnbmF0dXJlIiAidHJ1ZSIKK2NsYXNzIEMgeworICAgIHN0YXRpYyBjbGFzcyBFMSBleHRlbmRzIEV4Y2VwdGlvbiB7IH0KKyAgICBzdGF0aWMgY2xhc3MgRTIgZXh0ZW5kcyBFeGNlcHRpb24geyB9CisKKyAgICBzdGF0aWMgY2xhc3MgTXlSZXNvdXJjZSBpbXBsZW1lbnRzIEF1dG9DbG9zZWFibGUgeworICAgICAgICBwdWJsaWMgdm9pZCBkb1NvbWV0aGluZygpIHRocm93cyBFMSB7IH0KKyAgICAgICAgcHVibGljIHZvaWQgY2xvc2UoKSB0aHJvd3MgRTIgeyB9CisgICAgfQorCisgICAgdm9pZCBtKCkgdGhyb3dzIEUxLCBFMiB7CisgICAgICAgIHRyeSAoTXlSZXNvdXJjZSByID0gbmV3IE15UmVzb3VyY2UoKSkgeworICAgICAgICB9CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvYWRkVG9UaHJvd3MvYWZ0ZXJNdWx0aXBsZS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9hZGRUb1Rocm93cy9hZnRlck11bHRpcGxlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzkwMTU5ZgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvYWRkVG9UaHJvd3MvYWZ0ZXJNdWx0aXBsZS5qYXZhCkBAIC0wLDAgKzEsMTEgQEAKKy8vICJBZGQgRXhjZXB0aW9uIHRvIE1ldGhvZCBTaWduYXR1cmUiICJ0cnVlIgoraW1wb3J0IGphdmEuaW8uKjsKKworY2xhc3MgQyB7CisgIFN0cmluZyBkZXRlY3RFbmNvZGluZyhGaWxlIGlucHV0RmlsZSkgdGhyb3dzIElPRXhjZXB0aW9uIHsKKyAgICBmaW5hbCBCdWZmZXJlZFJlYWRlciByZWFkZXIgPSBuZXcgQnVmZmVyZWRSZWFkZXIobmV3IElucHV0U3RyZWFtUmVhZGVyKG5ldyBGaWxlSW5wdXRTdHJlYW0oaW5wdXRGaWxlKSwgIlVURi04IikpOworICAgIGZpbmFsIFN0cmluZyBsaW5lID0gcmVhZGVyLjxjYXJldD5yZWFkTGluZSgpOworCisgICAgcmV0dXJuICJJU08tODg1OS0xIjsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9hZGRUb1Rocm93cy9iZWZvcmUxLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2FkZFRvVGhyb3dzL2JlZm9yZTEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NTU1YzBlCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9hZGRUb1Rocm93cy9iZWZvcmUxLmphdmEKQEAgLTAsMCArMSwxMyBAQAorLy8gIkFkZCBFeGNlcHRpb24gdG8gTWV0aG9kIFNpZ25hdHVyZSIgInRydWUiCitjbGFzcyBDIHsKKyAgICBzdGF0aWMgY2xhc3MgRTEgZXh0ZW5kcyBFeGNlcHRpb24geyB9CisKKyAgICBzdGF0aWMgY2xhc3MgTXlSZXNvdXJjZSBpbXBsZW1lbnRzIEF1dG9DbG9zZWFibGUgeworICAgICAgICBwdWJsaWMgdm9pZCBjbG9zZSgpIHRocm93cyBFMSB7IH0KKyAgICB9CisKKyAgICB2b2lkIG0oKSB7CisgICAgICAgIHRyeSAoPGNhcmV0Pk15UmVzb3VyY2UgciA9IG5ldyBNeVJlc291cmNlKCkpIHsKKyAgICAgICAgfQorICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2FkZFRvVGhyb3dzL2JlZm9yZTIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvYWRkVG9UaHJvd3MvYmVmb3JlMi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMzYzMwZmUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2FkZFRvVGhyb3dzL2JlZm9yZTIuamF2YQpAQCAtMCwwICsxLDE1IEBACisvLyAiQWRkIEV4Y2VwdGlvbiB0byBNZXRob2QgU2lnbmF0dXJlIiAidHJ1ZSIKK2NsYXNzIEMgeworICAgIHN0YXRpYyBjbGFzcyBFMSBleHRlbmRzIEV4Y2VwdGlvbiB7IH0KKyAgICBzdGF0aWMgY2xhc3MgRTIgZXh0ZW5kcyBFeGNlcHRpb24geyB9CisKKyAgICBzdGF0aWMgY2xhc3MgTXlSZXNvdXJjZSBpbXBsZW1lbnRzIEF1dG9DbG9zZWFibGUgeworICAgICAgICBwdWJsaWMgdm9pZCBkb1NvbWV0aGluZygpIHRocm93cyBFMSB7IH0KKyAgICAgICAgcHVibGljIHZvaWQgY2xvc2UoKSB0aHJvd3MgRTIgeyB9CisgICAgfQorCisgICAgdm9pZCBtKCkgdGhyb3dzIEUxIHsKKyAgICAgICAgdHJ5ICg8Y2FyZXQ+TXlSZXNvdXJjZSByID0gbmV3IE15UmVzb3VyY2UoKSkgeworICAgICAgICB9CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvYWRkVG9UaHJvd3MvYmVmb3JlTXVsdGlwbGUuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvYWRkVG9UaHJvd3MvYmVmb3JlTXVsdGlwbGUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NTAyZWNiCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9hZGRUb1Rocm93cy9iZWZvcmVNdWx0aXBsZS5qYXZhCkBAIC0wLDAgKzEsMTEgQEAKKy8vICJBZGQgRXhjZXB0aW9uIHRvIE1ldGhvZCBTaWduYXR1cmUiICJ0cnVlIgoraW1wb3J0IGphdmEuaW8uKjsKKworY2xhc3MgQyB7CisgIFN0cmluZyBkZXRlY3RFbmNvZGluZyhGaWxlIGlucHV0RmlsZSkgdGhyb3dzIEZpbGVOb3RGb3VuZEV4Y2VwdGlvbiwgT2JqZWN0U3RyZWFtRXhjZXB0aW9uIHsKKyAgICBmaW5hbCBCdWZmZXJlZFJlYWRlciByZWFkZXIgPSBuZXcgQnVmZmVyZWRSZWFkZXIobmV3IElucHV0U3RyZWFtUmVhZGVyKG5ldyBGaWxlSW5wdXRTdHJlYW0oaW5wdXRGaWxlKSwgIlVURi04IikpOworICAgIGZpbmFsIFN0cmluZyBsaW5lID0gcmVhZGVyLjxjYXJldD5yZWFkTGluZSgpOworCisgICAgcmV0dXJuICJJU08tODg1OS0xIjsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9hZGRUeXBlQXJndW1lbnRzL2FmdGVyMS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9hZGRUeXBlQXJndW1lbnRzL2FmdGVyMS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFmMzJhZjMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2FkZFR5cGVBcmd1bWVudHMvYWZ0ZXIxLmphdmEKQEAgLTAsMCArMSwxMyBAQAorLy8gIkFkZCBleHBsaWNpdCB0eXBlIGFyZ3VtZW50cyIgInRydWUiCisKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbnM7CisKK2NsYXNzIEV4YW1wbGUgeworICAgIHZvaWQgZihMaXN0PFN0cmluZz4gbGlzdCkge30KKworICAgIHZvaWQgZygpIHsKKyAgICAgICAgICAgZig8Y2FyZXQ+Q29sbGVjdGlvbnMuPFN0cmluZz5lbXB0eUxpc3QoKSk7CisgICAgfQorfQorCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2FkZFR5cGVBcmd1bWVudHMvYWZ0ZXIyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2FkZFR5cGVBcmd1bWVudHMvYWZ0ZXIyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTE0OGYzMAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvYWRkVHlwZUFyZ3VtZW50cy9hZnRlcjIuamF2YQpAQCAtMCwwICsxLDEzIEBACisvLyAiQWRkIGV4cGxpY2l0IHR5cGUgYXJndW1lbnRzIiAidHJ1ZSIKKworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uczsKKworY2xhc3MgRXhhbXBsZSB7CisgICAgdm9pZCBmKENvbGxlY3Rpb248U3RyaW5nPiBsaXN0KSB7fQorCisgICAgdm9pZCBnKCkgeworICAgICAgICAgICBmKDxjYXJldD5Db2xsZWN0aW9ucy48U3RyaW5nPmVtcHR5TGlzdCgpKTsKKyAgICB9Cit9CisKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvYWRkVHlwZUFyZ3VtZW50cy9hZnRlcjMuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvYWRkVHlwZUFyZ3VtZW50cy9hZnRlcjMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZDRjYzMwCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9hZGRUeXBlQXJndW1lbnRzL2FmdGVyMy5qYXZhCkBAIC0wLDAgKzEsMTMgQEAKKy8vICJBZGQgZXhwbGljaXQgdHlwZSBhcmd1bWVudHMiICJ0cnVlIgorCitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb25zOworCitjbGFzcyBFeGFtcGxlIHsKKyAgICBFeGFtcGxlKExpc3Q8U3RyaW5nPiBsaXN0KSB7fQorCisgICAgdm9pZCBnKCkgeworICAgICAgICAgICBuZXcgRXhhbXBsZSg8Y2FyZXQ+Q29sbGVjdGlvbnMuPFN0cmluZz5lbXB0eUxpc3QoKSk7CisgICAgfQorfQorCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2FkZFR5cGVBcmd1bWVudHMvYWZ0ZXJVbnF1YWxpZmllZC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9hZGRUeXBlQXJndW1lbnRzL2FmdGVyVW5xdWFsaWZpZWQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZTdjYmRjCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9hZGRUeXBlQXJndW1lbnRzL2FmdGVyVW5xdWFsaWZpZWQuamF2YQpAQCAtMCwwICsxLDcgQEAKKy8vICJBZGQgZXhwbGljaXQgdHlwZSBhcmd1bWVudHMiICJ0cnVlIgoraW1wb3J0IGphdmEudXRpbC4qOworY2xhc3MgVGVzdCB7CisgICAgPFQ+IExpc3Q8VD4gZigpIHsgcmV0dXJuIG5ldyBBcnJheUxpc3Q8VD4oKTsgfQorICAgIHZvaWQgZyhMaXN0PEludGVnZXI+IGEpIHt9CisgICAgdm9pZCBzb21lTWV0aG9kKCkgeyBnKHRoaXMuPEludGVnZXI+ZigpKTsgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvYWRkVHlwZUFyZ3VtZW50cy9hZnRlclVucXVhbGlmaWVkU3RhdGljLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2FkZFR5cGVBcmd1bWVudHMvYWZ0ZXJVbnF1YWxpZmllZFN0YXRpYy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZjYTBhMGIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2FkZFR5cGVBcmd1bWVudHMvYWZ0ZXJVbnF1YWxpZmllZFN0YXRpYy5qYXZhCkBAIC0wLDAgKzEsNyBAQAorLy8gIkFkZCBleHBsaWNpdCB0eXBlIGFyZ3VtZW50cyIgInRydWUiCitpbXBvcnQgamF2YS51dGlsLio7CitjbGFzcyBUZXN0IHsKKyAgICBzdGF0aWMgPFQ+IExpc3Q8VD4gZigpIHsgcmV0dXJuIG5ldyBBcnJheUxpc3Q8VD4oKTsgfQorICAgIHZvaWQgZyhMaXN0PEludGVnZXI+IGEpIHt9CisgICAgdm9pZCBzb21lTWV0aG9kKCkgeyBnKFRlc3QuPEludGVnZXI+ZigpKTsgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvYWRkVHlwZUFyZ3VtZW50cy9iZWZvcmUxLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2FkZFR5cGVBcmd1bWVudHMvYmVmb3JlMS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBiNDMzZTcKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2FkZFR5cGVBcmd1bWVudHMvYmVmb3JlMS5qYXZhCkBAIC0wLDAgKzEsMTMgQEAKKy8vICJBZGQgZXhwbGljaXQgdHlwZSBhcmd1bWVudHMiICJ0cnVlIgorCitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb25zOworCitjbGFzcyBFeGFtcGxlIHsKKyAgICB2b2lkIGYoTGlzdDxTdHJpbmc+IGxpc3QpIHt9CisKKyAgICB2b2lkIGcoKSB7CisgICAgICAgICAgIGYoPGNhcmV0PkNvbGxlY3Rpb25zLmVtcHR5TGlzdCgpKTsKKyAgICB9Cit9CisKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvYWRkVHlwZUFyZ3VtZW50cy9iZWZvcmUyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2FkZFR5cGVBcmd1bWVudHMvYmVmb3JlMi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZkYTFhY2UKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2FkZFR5cGVBcmd1bWVudHMvYmVmb3JlMi5qYXZhCkBAIC0wLDAgKzEsMTMgQEAKKy8vICJBZGQgZXhwbGljaXQgdHlwZSBhcmd1bWVudHMiICJ0cnVlIgorCitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb25zOworCitjbGFzcyBFeGFtcGxlIHsKKyAgICB2b2lkIGYoQ29sbGVjdGlvbjxTdHJpbmc+IGxpc3QpIHt9CisKKyAgICB2b2lkIGcoKSB7CisgICAgICAgICAgIGYoPGNhcmV0PkNvbGxlY3Rpb25zLmVtcHR5TGlzdCgpKTsKKyAgICB9Cit9CisKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvYWRkVHlwZUFyZ3VtZW50cy9iZWZvcmUzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2FkZFR5cGVBcmd1bWVudHMvYmVmb3JlMy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQyYWZlZWUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2FkZFR5cGVBcmd1bWVudHMvYmVmb3JlMy5qYXZhCkBAIC0wLDAgKzEsMTMgQEAKKy8vICJBZGQgZXhwbGljaXQgdHlwZSBhcmd1bWVudHMiICJ0cnVlIgorCitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb25zOworCitjbGFzcyBFeGFtcGxlIHsKKyAgICBFeGFtcGxlKExpc3Q8U3RyaW5nPiBsaXN0KSB7fQorCisgICAgdm9pZCBnKCkgeworICAgICAgICAgICBuZXcgRXhhbXBsZSg8Y2FyZXQ+Q29sbGVjdGlvbnMuZW1wdHlMaXN0KCkpOworICAgIH0KK30KKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9hZGRUeXBlQXJndW1lbnRzL2JlZm9yZVVucXVhbGlmaWVkLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2FkZFR5cGVBcmd1bWVudHMvYmVmb3JlVW5xdWFsaWZpZWQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZWQ4NjI0Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9hZGRUeXBlQXJndW1lbnRzL2JlZm9yZVVucXVhbGlmaWVkLmphdmEKQEAgLTAsMCArMSw3IEBACisvLyAiQWRkIGV4cGxpY2l0IHR5cGUgYXJndW1lbnRzIiAidHJ1ZSIKK2ltcG9ydCBqYXZhLnV0aWwuKjsKK2NsYXNzIFRlc3QgeworICAgIDxUPiBMaXN0PFQ+IGYoKSB7IHJldHVybiBuZXcgQXJyYXlMaXN0PFQ+KCk7IH0KKyAgICB2b2lkIGcoTGlzdDxJbnRlZ2VyPiBhKSB7fQorICAgIHZvaWQgc29tZU1ldGhvZCgpIHsgZyhmPGNhcmV0PigpKTsgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvYWRkVHlwZUFyZ3VtZW50cy9iZWZvcmVVbnF1YWxpZmllZFN0YXRpYy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9hZGRUeXBlQXJndW1lbnRzL2JlZm9yZVVucXVhbGlmaWVkU3RhdGljLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjZiYzA1MQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvYWRkVHlwZUFyZ3VtZW50cy9iZWZvcmVVbnF1YWxpZmllZFN0YXRpYy5qYXZhCkBAIC0wLDAgKzEsNyBAQAorLy8gIkFkZCBleHBsaWNpdCB0eXBlIGFyZ3VtZW50cyIgInRydWUiCitpbXBvcnQgamF2YS51dGlsLio7CitjbGFzcyBUZXN0IHsKKyAgICBzdGF0aWMgPFQ+IExpc3Q8VD4gZigpIHsgcmV0dXJuIG5ldyBBcnJheUxpc3Q8VD4oKTsgfQorICAgIHZvaWQgZyhMaXN0PEludGVnZXI+IGEpIHt9CisgICAgdm9pZCBzb21lTWV0aG9kKCkgeyBnKDxjYXJldD5mKCkpOyB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9hZGRUeXBlQXJndW1lbnRzQ29uZGl0aW9uYWwvYWZ0ZXJCb3RoUGFydHMuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvYWRkVHlwZUFyZ3VtZW50c0NvbmRpdGlvbmFsL2FmdGVyQm90aFBhcnRzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjIyNWQ1NAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvYWRkVHlwZUFyZ3VtZW50c0NvbmRpdGlvbmFsL2FmdGVyQm90aFBhcnRzLmphdmEKQEAgLTAsMCArMSw5IEBACisvLyAiQWRkIGV4cGxpY2l0IHR5cGUgYXJndW1lbnRzIiAidHJ1ZSIKK2ltcG9ydCBqYXZhLnV0aWwuKjsKKworY2xhc3MgVGVzdCB7CisgICAgc3RhdGljIDxUPiBMaXN0PFQ+IGYoKSB7IHJldHVybiBuZXcgQXJyYXlMaXN0PFQ+KCk7IH0KKyAgICB2b2lkIHNvbWVNZXRob2QoYm9vbGVhbiBiKSB7IAorICAgICAgTGlzdDxTdHJpbmc+IHMgPSBiID8gVGVzdC48U3RyaW5nPmYoKSA6IGYoKTsgCisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvYWRkVHlwZUFyZ3VtZW50c0NvbmRpdGlvbmFsL2FmdGVySW5zdGFuY2VNZXRob2QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvYWRkVHlwZUFyZ3VtZW50c0NvbmRpdGlvbmFsL2FmdGVySW5zdGFuY2VNZXRob2QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NzgzY2VmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9hZGRUeXBlQXJndW1lbnRzQ29uZGl0aW9uYWwvYWZ0ZXJJbnN0YW5jZU1ldGhvZC5qYXZhCkBAIC0wLDAgKzEsOSBAQAorLy8gIkFkZCBleHBsaWNpdCB0eXBlIGFyZ3VtZW50cyIgInRydWUiCitpbXBvcnQgamF2YS51dGlsLio7CisKK2NsYXNzIFRlc3QgeworICAgIDxUPiBMaXN0PFQ+IGYoKSB7IHJldHVybiBuZXcgQXJyYXlMaXN0PFQ+KCk7IH0KKyAgICB2b2lkIHNvbWVNZXRob2QoYm9vbGVhbiBiKSB7IAorICAgICAgTGlzdDxTdHJpbmc+IHMgPSBiID8gdGhpcy48U3RyaW5nPmYoKSA6IG5ldyBBcnJheUxpc3Q8U3RyaW5nPigpOyAKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9hZGRUeXBlQXJndW1lbnRzQ29uZGl0aW9uYWwvYWZ0ZXJPdXRlckNsYXNzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2FkZFR5cGVBcmd1bWVudHNDb25kaXRpb25hbC9hZnRlck91dGVyQ2xhc3MuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NjVmZDlmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9hZGRUeXBlQXJndW1lbnRzQ29uZGl0aW9uYWwvYWZ0ZXJPdXRlckNsYXNzLmphdmEKQEAgLTAsMCArMSwxMyBAQAorLy8gIkFkZCBleHBsaWNpdCB0eXBlIGFyZ3VtZW50cyIgInRydWUiCitpbXBvcnQgamF2YS51dGlsLio7CisKK2NsYXNzIFRlc3QgeworICAgCisgICAgdm9pZCBzb21lTWV0aG9kKGJvb2xlYW4gYikgeyAKKyAgICAgIExpc3Q8U3RyaW5nPiBzID0gYiA/IEZvby48U3RyaW5nPmYoKSA6IG5ldyBBcnJheUxpc3Q8U3RyaW5nPigpOyAKKyAgICB9Cit9CisKK2NsYXNzIEZvb3sKKyAgc3RhdGljIDxUPiBMaXN0PFQ+IGYoKSB7IHJldHVybiBuZXcgQXJyYXlMaXN0PFQ+KCk7IH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2FkZFR5cGVBcmd1bWVudHNDb25kaXRpb25hbC9hZnRlclF1YWxpZmllZEluc3RhbmNlLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2FkZFR5cGVBcmd1bWVudHNDb25kaXRpb25hbC9hZnRlclF1YWxpZmllZEluc3RhbmNlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmRmODVjOQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvYWRkVHlwZUFyZ3VtZW50c0NvbmRpdGlvbmFsL2FmdGVyUXVhbGlmaWVkSW5zdGFuY2UuamF2YQpAQCAtMCwwICsxLDkgQEAKKy8vICJBZGQgZXhwbGljaXQgdHlwZSBhcmd1bWVudHMiICJ0cnVlIgoraW1wb3J0IGphdmEudXRpbC4qOworCitjbGFzcyBUZXN0IHsKKyAgICA8VD4gTGlzdDxUPiBmKCkgeyByZXR1cm4gbmV3IEFycmF5TGlzdDxUPigpOyB9CisgICAgdm9pZCBzb21lTWV0aG9kKFRlc3QgdCwgYm9vbGVhbiBiKSB7IAorICAgICAgTGlzdDxTdHJpbmc+IHMgPSBiID8gdC48U3RyaW5nPmYoKSA6IG5ldyBBcnJheUxpc3Q8U3RyaW5nPigpOyAKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9hZGRUeXBlQXJndW1lbnRzQ29uZGl0aW9uYWwvYWZ0ZXJRdWFsaWZpZWRTdGF0aWMuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvYWRkVHlwZUFyZ3VtZW50c0NvbmRpdGlvbmFsL2FmdGVyUXVhbGlmaWVkU3RhdGljLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmQwNjgyYQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvYWRkVHlwZUFyZ3VtZW50c0NvbmRpdGlvbmFsL2FmdGVyUXVhbGlmaWVkU3RhdGljLmphdmEKQEAgLTAsMCArMSw5IEBACisvLyAiQWRkIGV4cGxpY2l0IHR5cGUgYXJndW1lbnRzIiAidHJ1ZSIKK2ltcG9ydCBqYXZhLnV0aWwuKjsKKworY2xhc3MgVGVzdCB7CisgICAgc3RhdGljIDxUPiBMaXN0PFQ+IGYoKSB7IHJldHVybiBuZXcgQXJyYXlMaXN0PFQ+KCk7IH0KKyAgICB2b2lkIHNvbWVNZXRob2QoVGVzdCB0LCBib29sZWFuIGIpIHsgCisgICAgICBMaXN0PFN0cmluZz4gcyA9IGIgPyB0LjxTdHJpbmc+ZigpIDogbmV3IEFycmF5TGlzdDxTdHJpbmc+KCk7IAorICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2FkZFR5cGVBcmd1bWVudHNDb25kaXRpb25hbC9hZnRlclVucXVhbGlmaWVkU3RhdGljLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2FkZFR5cGVBcmd1bWVudHNDb25kaXRpb25hbC9hZnRlclVucXVhbGlmaWVkU3RhdGljLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODg1MmM3NgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvYWRkVHlwZUFyZ3VtZW50c0NvbmRpdGlvbmFsL2FmdGVyVW5xdWFsaWZpZWRTdGF0aWMuamF2YQpAQCAtMCwwICsxLDkgQEAKKy8vICJBZGQgZXhwbGljaXQgdHlwZSBhcmd1bWVudHMiICJ0cnVlIgoraW1wb3J0IGphdmEudXRpbC4qOworCitjbGFzcyBUZXN0IHsKKyAgICBzdGF0aWMgPFQ+IExpc3Q8VD4gZigpIHsgcmV0dXJuIG5ldyBBcnJheUxpc3Q8VD4oKTsgfQorICAgIHZvaWQgc29tZU1ldGhvZChib29sZWFuIGIpIHsgCisgICAgICBMaXN0PFN0cmluZz4gcyA9IGIgPyBUZXN0LjxTdHJpbmc+ZigpIDogbmV3IEFycmF5TGlzdDxTdHJpbmc+KCk7IAorICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2FkZFR5cGVBcmd1bWVudHNDb25kaXRpb25hbC9iZWZvcmVCb3RoUGFydHMuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvYWRkVHlwZUFyZ3VtZW50c0NvbmRpdGlvbmFsL2JlZm9yZUJvdGhQYXJ0cy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM4MTU4NDEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2FkZFR5cGVBcmd1bWVudHNDb25kaXRpb25hbC9iZWZvcmVCb3RoUGFydHMuamF2YQpAQCAtMCwwICsxLDkgQEAKKy8vICJBZGQgZXhwbGljaXQgdHlwZSBhcmd1bWVudHMiICJ0cnVlIgoraW1wb3J0IGphdmEudXRpbC4qOworCitjbGFzcyBUZXN0IHsKKyAgICBzdGF0aWMgPFQ+IExpc3Q8VD4gZigpIHsgcmV0dXJuIG5ldyBBcnJheUxpc3Q8VD4oKTsgfQorICAgIHZvaWQgc29tZU1ldGhvZChib29sZWFuIGIpIHsgCisgICAgICBMaXN0PFN0cmluZz4gcyA9IGIgPyBmPGNhcmV0PigpIDogZigpOyAKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9hZGRUeXBlQXJndW1lbnRzQ29uZGl0aW9uYWwvYmVmb3JlSW5zdGFuY2VNZXRob2QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvYWRkVHlwZUFyZ3VtZW50c0NvbmRpdGlvbmFsL2JlZm9yZUluc3RhbmNlTWV0aG9kLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWFiMzhmNwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvYWRkVHlwZUFyZ3VtZW50c0NvbmRpdGlvbmFsL2JlZm9yZUluc3RhbmNlTWV0aG9kLmphdmEKQEAgLTAsMCArMSw5IEBACisvLyAiQWRkIGV4cGxpY2l0IHR5cGUgYXJndW1lbnRzIiAidHJ1ZSIKK2ltcG9ydCBqYXZhLnV0aWwuKjsKKworY2xhc3MgVGVzdCB7CisgICAgPFQ+IExpc3Q8VD4gZigpIHsgcmV0dXJuIG5ldyBBcnJheUxpc3Q8VD4oKTsgfQorICAgIHZvaWQgc29tZU1ldGhvZChib29sZWFuIGIpIHsgCisgICAgICBMaXN0PFN0cmluZz4gcyA9IGIgPyBmPGNhcmV0PigpIDogbmV3IEFycmF5TGlzdDxTdHJpbmc+KCk7IAorICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2FkZFR5cGVBcmd1bWVudHNDb25kaXRpb25hbC9iZWZvcmVPdXRlckNsYXNzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2FkZFR5cGVBcmd1bWVudHNDb25kaXRpb25hbC9iZWZvcmVPdXRlckNsYXNzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjkyYzJkZQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvYWRkVHlwZUFyZ3VtZW50c0NvbmRpdGlvbmFsL2JlZm9yZU91dGVyQ2xhc3MuamF2YQpAQCAtMCwwICsxLDEzIEBACisvLyAiQWRkIGV4cGxpY2l0IHR5cGUgYXJndW1lbnRzIiAidHJ1ZSIKK2ltcG9ydCBqYXZhLnV0aWwuKjsKKworY2xhc3MgVGVzdCB7CisgICAKKyAgICB2b2lkIHNvbWVNZXRob2QoYm9vbGVhbiBiKSB7IAorICAgICAgTGlzdDxTdHJpbmc+IHMgPSBiID8gRm9vLmY8Y2FyZXQ+KCkgOiBuZXcgQXJyYXlMaXN0PFN0cmluZz4oKTsgCisgICAgfQorfQorCitjbGFzcyBGb297CisgIHN0YXRpYyA8VD4gTGlzdDxUPiBmKCkgeyByZXR1cm4gbmV3IEFycmF5TGlzdDxUPigpOyB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9hZGRUeXBlQXJndW1lbnRzQ29uZGl0aW9uYWwvYmVmb3JlUXVhbGlmaWVkSW5zdGFuY2UuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvYWRkVHlwZUFyZ3VtZW50c0NvbmRpdGlvbmFsL2JlZm9yZVF1YWxpZmllZEluc3RhbmNlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGVkNzkxOQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvYWRkVHlwZUFyZ3VtZW50c0NvbmRpdGlvbmFsL2JlZm9yZVF1YWxpZmllZEluc3RhbmNlLmphdmEKQEAgLTAsMCArMSw5IEBACisvLyAiQWRkIGV4cGxpY2l0IHR5cGUgYXJndW1lbnRzIiAidHJ1ZSIKK2ltcG9ydCBqYXZhLnV0aWwuKjsKKworY2xhc3MgVGVzdCB7CisgICAgPFQ+IExpc3Q8VD4gZigpIHsgcmV0dXJuIG5ldyBBcnJheUxpc3Q8VD4oKTsgfQorICAgIHZvaWQgc29tZU1ldGhvZChUZXN0IHQsIGJvb2xlYW4gYikgeyAKKyAgICAgIExpc3Q8U3RyaW5nPiBzID0gYiA/IHQuZjxjYXJldD4oKSA6IG5ldyBBcnJheUxpc3Q8U3RyaW5nPigpOyAKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9hZGRUeXBlQXJndW1lbnRzQ29uZGl0aW9uYWwvYmVmb3JlUXVhbGlmaWVkU3RhdGljLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2FkZFR5cGVBcmd1bWVudHNDb25kaXRpb25hbC9iZWZvcmVRdWFsaWZpZWRTdGF0aWMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZWZkMjNjCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9hZGRUeXBlQXJndW1lbnRzQ29uZGl0aW9uYWwvYmVmb3JlUXVhbGlmaWVkU3RhdGljLmphdmEKQEAgLTAsMCArMSw5IEBACisvLyAiQWRkIGV4cGxpY2l0IHR5cGUgYXJndW1lbnRzIiAidHJ1ZSIKK2ltcG9ydCBqYXZhLnV0aWwuKjsKKworY2xhc3MgVGVzdCB7CisgICAgc3RhdGljIDxUPiBMaXN0PFQ+IGYoKSB7IHJldHVybiBuZXcgQXJyYXlMaXN0PFQ+KCk7IH0KKyAgICB2b2lkIHNvbWVNZXRob2QoVGVzdCB0LCBib29sZWFuIGIpIHsgCisgICAgICBMaXN0PFN0cmluZz4gcyA9IGIgPyB0LmY8Y2FyZXQ+KCkgOiBuZXcgQXJyYXlMaXN0PFN0cmluZz4oKTsgCisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvYWRkVHlwZUFyZ3VtZW50c0NvbmRpdGlvbmFsL2JlZm9yZVVucXVhbGlmaWVkU3RhdGljLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2FkZFR5cGVBcmd1bWVudHNDb25kaXRpb25hbC9iZWZvcmVVbnF1YWxpZmllZFN0YXRpYy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRmNjJjM2EKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2FkZFR5cGVBcmd1bWVudHNDb25kaXRpb25hbC9iZWZvcmVVbnF1YWxpZmllZFN0YXRpYy5qYXZhCkBAIC0wLDAgKzEsOSBAQAorLy8gIkFkZCBleHBsaWNpdCB0eXBlIGFyZ3VtZW50cyIgInRydWUiCitpbXBvcnQgamF2YS51dGlsLio7CisKK2NsYXNzIFRlc3QgeworICAgIHN0YXRpYyA8VD4gTGlzdDxUPiBmKCkgeyByZXR1cm4gbmV3IEFycmF5TGlzdDxUPigpOyB9CisgICAgdm9pZCBzb21lTWV0aG9kKGJvb2xlYW4gYikgeyAKKyAgICAgIExpc3Q8U3RyaW5nPiBzID0gYiA/IGY8Y2FyZXQ+KCkgOiBuZXcgQXJyYXlMaXN0PFN0cmluZz4oKTsgCisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvYWRkVHlwZUNhc3QvYWZ0ZXIxLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2FkZFR5cGVDYXN0L2FmdGVyMS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcxZTYwNWUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2FkZFR5cGVDYXN0L2FmdGVyMS5qYXZhCkBAIC0wLDAgKzEsNyBAQAorLy8gIkNhc3QgdG8gJ2NoYXInIiAidHJ1ZSIKK2NsYXNzIGEgeworIHZvaWQgZihpbnQgaSkgeworICAgPGNhcmV0PmNoYXIgYyA9IChjaGFyKSBpOworIH0KK30KKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9hZGRUeXBlQ2FzdC9hZnRlcjEwLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2FkZFR5cGVDYXN0L2FmdGVyMTAuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNzc2YWUzCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9hZGRUeXBlQ2FzdC9hZnRlcjEwLmphdmEKQEAgLTAsMCArMSwxNiBAQAorLy8gIkNhc3QgdG8gJ0EuSXRlcmF0b3I8amF2YS5sYW5nLlN0cmluZz4nIiAidHJ1ZSIKK2NsYXNzIEEgeworICAgIGludGVyZmFjZSBJdGVyYXRvcjxUPiB7ICAgICAgICAKKyAgICB9CisKKyAgICBjbGFzcyBMaXN0PFQ+IHsKKyAgICAgICAgSXRlcmF0b3I8VD4gaXRlcmF0b3IoKSB7CisgICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgfQorICAgIH0KKworICAgIHZvaWQgbWV0aG9kKCkgeworICAgICAgICBMaXN0IGwgPSBuZXcgTGlzdCgpOworICAgICAgICA8Y2FyZXQ+SXRlcmF0b3I8U3RyaW5nPiBpdCA9IChJdGVyYXRvcjxTdHJpbmc+KSBsLml0ZXJhdG9yKCk7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvYWRkVHlwZUNhc3QvYWZ0ZXIyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2FkZFR5cGVDYXN0L2FmdGVyMi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNmYWM0ZTYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2FkZFR5cGVDYXN0L2FmdGVyMi5qYXZhCkBAIC0wLDAgKzEsNyBAQAorLy8gIkNhc3QgdG8gJ2InIiAidHJ1ZSIKK2NsYXNzIGEgeworIHZvaWQgZihhIGEpIHsKKyAgIDxjYXJldD5iIGIgPSAoYikgYTsKKyB9Cit9CitjbGFzcyBiIGV4dGVuZHMgYSB7fQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9hZGRUeXBlQ2FzdC9hZnRlcjMuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvYWRkVHlwZUNhc3QvYWZ0ZXIzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTFhYmExYgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvYWRkVHlwZUNhc3QvYWZ0ZXIzLmphdmEKQEAgLTAsMCArMSw2IEBACisvLyAiQ2FzdCB0byAnaW50JyIgInRydWUiCitjbGFzcyBhIHsKKyB2b2lkIGYoKSB7CisgICBpbnRbXSBpaSA9IHs8Y2FyZXQ+KGludCkgMS4zfTsKKyB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2FkZFR5cGVDYXN0L2FmdGVyNC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9hZGRUeXBlQ2FzdC9hZnRlcjQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMzQ2MDAwCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9hZGRUeXBlQ2FzdC9hZnRlcjQuamF2YQpAQCAtMCwwICsxLDcgQEAKKy8vICJDYXN0IHRvICdpbnQnIiAidHJ1ZSIKK2NsYXNzIGEgeworIHZvaWQgZigpIHsKKyAgIGludCBpOworICAgPGNhcmV0PmkgPSAoaW50KSAzLjRmOworIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvYWRkVHlwZUNhc3QvYWZ0ZXI1LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2FkZFR5cGVDYXN0L2FmdGVyNS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlhZWJiMjQyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9hZGRUeXBlQ2FzdC9hZnRlcjUuamF2YQpAQCAtMCwwICsxLDcgQEAKKy8vICJDYXN0IHRvICdmbG9hdCciICJ0cnVlIgorY2xhc3MgYSB7CisgZmxvYXQgZigpIHsKKyAgIGRvdWJsZSBkID0gNDsKKyAgIHJldHVybiA8Y2FyZXQ+KGZsb2F0KSBkOworIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvYWRkVHlwZUNhc3QvYWZ0ZXI2LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2FkZFR5cGVDYXN0L2FmdGVyNi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRjYmNmN2UKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2FkZFR5cGVDYXN0L2FmdGVyNi5qYXZhCkBAIC0wLDAgKzEsOCBAQAorLy8gIkNhc3QgdG8gJ2ludCciICJ0cnVlIgorY2xhc3MgYSB7Cisgdm9pZCBmKCkgeworICAgZG91YmxlIGQgPSA0OworICAgc3dpdGNoICg8Y2FyZXQ+KGludCkgZCkgeworICAgfQorIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvYWRkVHlwZUNhc3QvYWZ0ZXI3LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2FkZFR5cGVDYXN0L2FmdGVyNy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU3MGVlMTkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2FkZFR5cGVDYXN0L2FmdGVyNy5qYXZhCkBAIC0wLDAgKzEsOSBAQAorLy8gIkNhc3QgdG8gJ2NoYXInIiAidHJ1ZSIKK2NsYXNzIGEgeworIHZvaWQgZigpIHsKKyAgIGRvdWJsZSBkID0gNDsKKyAgIHN3aXRjaCAoJ2MnKSB7CisgICAgIGNhc2UgPGNhcmV0PihjaGFyKSAzLjM6CisgICB9CisgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9hZGRUeXBlQ2FzdC9hZnRlcjkuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvYWRkVHlwZUNhc3QvYWZ0ZXI5LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjY4NmUwMwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvYWRkVHlwZUNhc3QvYWZ0ZXI5LmphdmEKQEAgLTAsMCArMSw3IEBACisvLyAiQ2FzdCB0byAnamF2YS5sYW5nLlN0cmluZyciICJ0cnVlIgorY2xhc3MgYSB7Cisgdm9pZCBmKCkgeworICAgT2JqZWN0IHkgPSBudWxsOworICAgU3RyaW5nIHMgPSA8Y2FyZXQ+KFN0cmluZykgeTsKKyB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2FkZFR5cGVDYXN0L2FmdGVyVGVybmFyeS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9hZGRUeXBlQ2FzdC9hZnRlclRlcm5hcnkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZWQxOWI1Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9hZGRUeXBlQ2FzdC9hZnRlclRlcm5hcnkuamF2YQpAQCAtMCwwICsxLDcgQEAKKy8vICJDYXN0IHRvICdCJyIgInRydWUiCitjbGFzcyBBIHsKKyB2b2lkIGYoQiBiKSB7CisgICBCIHMgPSA8Y2FyZXQ+YiA9PSBudWxsID8gKEIpIHRoaXMgOiBiOworIH0KK30KK2NsYXNzIEIgZXh0ZW5kcyBBIHt9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9hZGRUeXBlQ2FzdC9hZnRlclRlcm5hcnkyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2FkZFR5cGVDYXN0L2FmdGVyVGVybmFyeTIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MWIzNzhjCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9hZGRUeXBlQ2FzdC9hZnRlclRlcm5hcnkyLmphdmEKQEAgLTAsMCArMSw3IEBACisvLyAiQ2FzdCB0byAnQiciICJ0cnVlIgorY2xhc3MgQSB7Cisgdm9pZCBmKEIgYikgeworICAgQiBzID0gPGNhcmV0PmIgPT0gbnVsbCA/IG51bGwgOiAoQikgdGhpczsKKyB9Cit9CitjbGFzcyBCIGV4dGVuZHMgQSB7fQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvYWRkVHlwZUNhc3QvYWZ0ZXJUZXJuYXJ5SW1wb3NzaWJsZS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9hZGRUeXBlQ2FzdC9hZnRlclRlcm5hcnlJbXBvc3NpYmxlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTZhODZkNgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvYWRkVHlwZUNhc3QvYWZ0ZXJUZXJuYXJ5SW1wb3NzaWJsZS5qYXZhCkBAIC0wLDAgKzEsNyBAQAorLy8gIkNhc3QgdG8gJ0InIiAidHJ1ZSIKK2NsYXNzIEEgeworIHZvaWQgZihCIGIpIHsKKyAgIEIgcyA9IDxjYXJldD4oQikgKGIgPT0gbnVsbCA/IHRoaXMgOiB0aGlzKTsKKyB9Cit9CitjbGFzcyBCIGV4dGVuZHMgQSB7fQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvYWRkVHlwZUNhc3QvYmVmb3JlMS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9hZGRUeXBlQ2FzdC9iZWZvcmUxLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzIzMjAyZQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvYWRkVHlwZUNhc3QvYmVmb3JlMS5qYXZhCkBAIC0wLDAgKzEsNyBAQAorLy8gIkNhc3QgdG8gJ2NoYXInIiAidHJ1ZSIKK2NsYXNzIGEgeworIHZvaWQgZihpbnQgaSkgeworICAgPGNhcmV0PmNoYXIgYyA9IGk7CisgfQorfQorCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2FkZFR5cGVDYXN0L2JlZm9yZTEwLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2FkZFR5cGVDYXN0L2JlZm9yZTEwLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDAwMjExMQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvYWRkVHlwZUNhc3QvYmVmb3JlMTAuamF2YQpAQCAtMCwwICsxLDE2IEBACisvLyAiQ2FzdCB0byAnQS5JdGVyYXRvcjxqYXZhLmxhbmcuU3RyaW5nPiciICJ0cnVlIgorY2xhc3MgQSB7CisgICAgaW50ZXJmYWNlIEl0ZXJhdG9yPFQ+IHsgICAgICAgIAorICAgIH0KKworICAgIGNsYXNzIExpc3Q8VD4geworICAgICAgICBJdGVyYXRvcjxUPiBpdGVyYXRvcigpIHsKKyAgICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICB9CisgICAgfQorCisgICAgdm9pZCBtZXRob2QoKSB7CisgICAgICAgIExpc3QgbCA9IG5ldyBMaXN0KCk7CisgICAgICAgIDxjYXJldD5JdGVyYXRvcjxTdHJpbmc+IGl0ID0gKEl0ZXJhdG9yPE9iamVjdD4pbC5pdGVyYXRvcigpOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2FkZFR5cGVDYXN0L2JlZm9yZTIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvYWRkVHlwZUNhc3QvYmVmb3JlMi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdiY2NjZGUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2FkZFR5cGVDYXN0L2JlZm9yZTIuamF2YQpAQCAtMCwwICsxLDcgQEAKKy8vICJDYXN0IHRvICdiJyIgInRydWUiCitjbGFzcyBhIHsKKyB2b2lkIGYoYSBhKSB7CisgICA8Y2FyZXQ+YiBiID0gYTsKKyB9Cit9CitjbGFzcyBiIGV4dGVuZHMgYSB7fQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9hZGRUeXBlQ2FzdC9iZWZvcmUzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2FkZFR5cGVDYXN0L2JlZm9yZTMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MzRhMzVmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9hZGRUeXBlQ2FzdC9iZWZvcmUzLmphdmEKQEAgLTAsMCArMSw2IEBACisvLyAiQ2FzdCB0byAnaW50JyIgInRydWUiCitjbGFzcyBhIHsKKyB2b2lkIGYoKSB7CisgICBpbnRbXSBpaSA9IHsgPGNhcmV0PjEuMyB9OworIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvYWRkVHlwZUNhc3QvYmVmb3JlNC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9hZGRUeXBlQ2FzdC9iZWZvcmU0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDcwODQzOQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvYWRkVHlwZUNhc3QvYmVmb3JlNC5qYXZhCkBAIC0wLDAgKzEsNyBAQAorLy8gIkNhc3QgdG8gJ2ludCciICJ0cnVlIgorY2xhc3MgYSB7Cisgdm9pZCBmKCkgeworICAgaW50IGk7CisgICA8Y2FyZXQ+aSA9IDMuNGY7CisgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9hZGRUeXBlQ2FzdC9iZWZvcmU1LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2FkZFR5cGVDYXN0L2JlZm9yZTUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OGIzNGIyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9hZGRUeXBlQ2FzdC9iZWZvcmU1LmphdmEKQEAgLTAsMCArMSw3IEBACisvLyAiQ2FzdCB0byAnZmxvYXQnIiAidHJ1ZSIKK2NsYXNzIGEgeworIGZsb2F0IGYoKSB7CisgICBkb3VibGUgZCA9IDQ7CisgICByZXR1cm4gPGNhcmV0PmQ7CisgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9hZGRUeXBlQ2FzdC9iZWZvcmU2LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2FkZFR5cGVDYXN0L2JlZm9yZTYuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYTc0NjFiCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9hZGRUeXBlQ2FzdC9iZWZvcmU2LmphdmEKQEAgLTAsMCArMSw4IEBACisvLyAiQ2FzdCB0byAnaW50JyIgInRydWUiCitjbGFzcyBhIHsKKyB2b2lkIGYoKSB7CisgICBkb3VibGUgZCA9IDQ7CisgICBzd2l0Y2ggKDxjYXJldD5kKSB7CisgICB9CisgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9hZGRUeXBlQ2FzdC9iZWZvcmU3LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2FkZFR5cGVDYXN0L2JlZm9yZTcuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMmE1MDM1Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9hZGRUeXBlQ2FzdC9iZWZvcmU3LmphdmEKQEAgLTAsMCArMSw5IEBACisvLyAiQ2FzdCB0byAnY2hhciciICJ0cnVlIgorY2xhc3MgYSB7Cisgdm9pZCBmKCkgeworICAgZG91YmxlIGQgPSA0OworICAgc3dpdGNoICgnYycpIHsKKyAgICAgY2FzZSA8Y2FyZXQ+My4zOgorICAgfQorIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvYWRkVHlwZUNhc3QvYmVmb3JlOC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9hZGRUeXBlQ2FzdC9iZWZvcmU4LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2ViYzhkMwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvYWRkVHlwZUNhc3QvYmVmb3JlOC5qYXZhCkBAIC0wLDAgKzEsNiBAQAorLy8gIkNhc3QgdG8gJ2phdmEubGFuZy5TdHJpbmcnIiAiZmFsc2UiCitjbGFzcyBhIHsKKyB2b2lkIGYoKSB7CisgICBTdHJpbmcgcyA9IDxjYXJldD4xOworIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvYWRkVHlwZUNhc3QvYmVmb3JlOS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9hZGRUeXBlQ2FzdC9iZWZvcmU5LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDI2ZWQ3NwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvYWRkVHlwZUNhc3QvYmVmb3JlOS5qYXZhCkBAIC0wLDAgKzEsNyBAQAorLy8gIkNhc3QgdG8gJ2phdmEubGFuZy5TdHJpbmcnIiAidHJ1ZSIKK2NsYXNzIGEgeworIHZvaWQgZigpIHsKKyAgIE9iamVjdCB5ID0gbnVsbDsKKyAgIFN0cmluZyBzID0gPGNhcmV0PihJbnRlZ2VyKSB5OworIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvYWRkVHlwZUNhc3QvYmVmb3JlVGVybmFyeS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9hZGRUeXBlQ2FzdC9iZWZvcmVUZXJuYXJ5LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2MwNzk5NQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvYWRkVHlwZUNhc3QvYmVmb3JlVGVybmFyeS5qYXZhCkBAIC0wLDAgKzEsNyBAQAorLy8gIkNhc3QgdG8gJ0InIiAidHJ1ZSIKK2NsYXNzIEEgeworIHZvaWQgZihCIGIpIHsKKyAgIEIgcyA9IDxjYXJldD5iID09IG51bGwgPyB0aGlzIDogYjsKKyB9Cit9CitjbGFzcyBCIGV4dGVuZHMgQSB7fQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvYWRkVHlwZUNhc3QvYmVmb3JlVGVybmFyeTIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvYWRkVHlwZUNhc3QvYmVmb3JlVGVybmFyeTIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZmI3MDMzCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9hZGRUeXBlQ2FzdC9iZWZvcmVUZXJuYXJ5Mi5qYXZhCkBAIC0wLDAgKzEsNyBAQAorLy8gIkNhc3QgdG8gJ0InIiAidHJ1ZSIKK2NsYXNzIEEgeworIHZvaWQgZihCIGIpIHsKKyAgIEIgcyA9IDxjYXJldD5iID09IG51bGwgPyBudWxsIDogdGhpczsKKyB9Cit9CitjbGFzcyBCIGV4dGVuZHMgQSB7fQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvYWRkVHlwZUNhc3QvYmVmb3JlVGVybmFyeUltcG9zc2libGUuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvYWRkVHlwZUNhc3QvYmVmb3JlVGVybmFyeUltcG9zc2libGUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNmJmOTUxCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9hZGRUeXBlQ2FzdC9iZWZvcmVUZXJuYXJ5SW1wb3NzaWJsZS5qYXZhCkBAIC0wLDAgKzEsNyBAQAorLy8gIkNhc3QgdG8gJ0InIiAidHJ1ZSIKK2NsYXNzIEEgeworIHZvaWQgZihCIGIpIHsKKyAgIEIgcyA9IDxjYXJldD5iID09IG51bGwgPyB0aGlzIDogdGhpczsKKyB9Cit9CitjbGFzcyBCIGV4dGVuZHMgQSB7fQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvYWRkVmFyaWFibGVJbml0aWFsaXplci9hZnRlcjEuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvYWRkVmFyaWFibGVJbml0aWFsaXplci9hZnRlcjEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZjFlMzAyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9hZGRWYXJpYWJsZUluaXRpYWxpemVyL2FmdGVyMS5qYXZhCkBAIC0wLDAgKzEsMTAgQEAKKy8vICJJbml0aWFsaXplIHZhcmlhYmxlICdpJyIgInRydWUiCisKK2NsYXNzIEFDbGFzcworeworICBpbnQgZigpIHsKKyAgICBpbnQgaSA9IDxjYXJldD48c2VsZWN0aW9uPjA8L3NlbGVjdGlvbj47CisgICAgcmV0dXJuIGk7CisgIH0KK30KKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9hZGRWYXJpYWJsZUluaXRpYWxpemVyL2FmdGVyMi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9hZGRWYXJpYWJsZUluaXRpYWxpemVyL2FmdGVyMi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIzYTA4ZGQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2FkZFZhcmlhYmxlSW5pdGlhbGl6ZXIvYWZ0ZXIyLmphdmEKQEAgLTAsMCArMSw3IEBACisvLyAiSW5pdGlhbGl6ZSB2YXJpYWJsZSAnZiciICJ0cnVlIgorCitjbGFzcyBBQ2xhc3MKK3sKKyAgICBmaW5hbCBBQ2xhc3MgZiA9IDxjYXJldD48c2VsZWN0aW9uPm51bGw8L3NlbGVjdGlvbj47Cit9CisKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvYWRkVmFyaWFibGVJbml0aWFsaXplci9iZWZvcmUxLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2FkZFZhcmlhYmxlSW5pdGlhbGl6ZXIvYmVmb3JlMS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQxYzJjYjYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2FkZFZhcmlhYmxlSW5pdGlhbGl6ZXIvYmVmb3JlMS5qYXZhCkBAIC0wLDAgKzEsMTAgQEAKKy8vICJJbml0aWFsaXplIHZhcmlhYmxlICdpJyIgInRydWUiCisKK2NsYXNzIEFDbGFzcworeworICBpbnQgZigpIHsKKyAgICBpbnQgaTsKKyAgICByZXR1cm4gPGNhcmV0Pmk7CisgIH0KK30KKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9hZGRWYXJpYWJsZUluaXRpYWxpemVyL2JlZm9yZTIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvYWRkVmFyaWFibGVJbml0aWFsaXplci9iZWZvcmUyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDYwOTE3NwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvYWRkVmFyaWFibGVJbml0aWFsaXplci9iZWZvcmUyLmphdmEKQEAgLTAsMCArMSw3IEBACisvLyAiSW5pdGlhbGl6ZSB2YXJpYWJsZSAnZiciICJ0cnVlIgorCitjbGFzcyBBQ2xhc3MKK3sKKyAgICBmaW5hbCBBQ2xhc3MgZjxjYXJldD47Cit9CisKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvYWRkVmFyaWFibGVJbml0aWFsaXplci9iZWZvcmVEaXNhYmxlZEZvckZvcmVhY2hQYXJhbS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9hZGRWYXJpYWJsZUluaXRpYWxpemVyL2JlZm9yZURpc2FibGVkRm9yRm9yZWFjaFBhcmFtLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGQ2YThiMQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvYWRkVmFyaWFibGVJbml0aWFsaXplci9iZWZvcmVEaXNhYmxlZEZvckZvcmVhY2hQYXJhbS5qYXZhCkBAIC0wLDAgKzEsOSBAQAorLy8gIkluaXRpYWxpemUgdmFyaWFibGUgJ2YnIiAiZmFsc2UiCisKK2NsYXNzIEFDbGFzcworeworICB7CisgICAgZm9yKFN0cmluZyBmIDogPGNhcmV0PmYpe30KKyAgfQorfQorCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2Fubm90YXRlTWV0aG9kL2FmdGVyQWJvcnQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvYW5ub3RhdGVNZXRob2QvYWZ0ZXJBYm9ydC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU1ZDYzNzMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2Fubm90YXRlTWV0aG9kL2FmdGVyQWJvcnQuamF2YQpAQCAtMCwwICsxLDE5IEBACisvLyAiQW5ub3RhdGUgbWV0aG9kIGFzICdATm90TnVsbCciICJ0cnVlIgoraW1wb3J0IG9yZy5qZXRicmFpbnMuYW5ub3RhdGlvbnMuTm90TnVsbDsKKworY2xhc3MgWCB7CisgICAgQE5vdE51bGwKKyAgICBTdHJpbmcgZm9vKCkgeworICAgICAgICByZXR1cm4gIlgiOworICAgIH0KK30KK2NsYXNzIFkgZXh0ZW5kcyBYeworICAgIFN0cmluZyBmb28oKSB7CisgICAgICAgIHJldHVybiAiWSI7CisgICAgfQorfQorY2xhc3MgWiBleHRlbmRzIFkgeworICAgIFN0cmluZyBmb288Y2FyZXQ+KCkgeyAvLyB0cmlnZ2VyIHF1aWNrIGZpeCBmb3IgaW5zcGVjdGlvbiBoZXJlCisgICAgICAgIHJldHVybiAiWiI7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9hbm5vdGF0ZU1ldGhvZC9hZnRlckFubm9BbGwuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvYW5ub3RhdGVNZXRob2QvYWZ0ZXJBbm5vQWxsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmZiYzM4OQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvYW5ub3RhdGVNZXRob2QvYWZ0ZXJBbm5vQWxsLmphdmEKQEAgLTAsMCArMSwyMSBAQAorLy8gIkFubm90YXRlIG1ldGhvZCBhcyAnQE5vdE51bGwnIiAidHJ1ZSIKK2ltcG9ydCBvcmcuamV0YnJhaW5zLmFubm90YXRpb25zLk5vdE51bGw7CisKK2NsYXNzIFggeworICAgIEBOb3ROdWxsCisgICAgU3RyaW5nIGFubm90YXRlQmFzZSgpIHsKKyAgICAgICAgcmV0dXJuICJYIjsKKyAgICB9Cit9CitjbGFzcyBZIGV4dGVuZHMgWHsKKyAgICBATm90TnVsbAorICAgIFN0cmluZyBhbm5vdGF0ZUJhc2UoKSB7CisgICAgICAgIHJldHVybiAiWSI7CisgICAgfQorfQorY2xhc3MgWiBleHRlbmRzIFkgeworICAgIEBOb3ROdWxsCisgICAgU3RyaW5nIGFubm90YXRlQmFzZTxjYXJldD4oKSB7IC8vIHRyaWdnZXIgcXVpY2sgZml4IGZvciBpbnNwZWN0aW9uIGhlcmUKKyAgICAgICAgcmV0dXJuICJaIjsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2Fubm90YXRlTWV0aG9kL2FmdGVyQ29uZmxpY3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvYW5ub3RhdGVNZXRob2QvYWZ0ZXJDb25mbGljdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFlYzViNDMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2Fubm90YXRlTWV0aG9kL2FmdGVyQ29uZmxpY3QuamF2YQpAQCAtMCwwICsxLDggQEAKKy8vICJSZW1vdmUgYW5ub3RhdGlvbiIgInRydWUiCisKK2ltcG9ydCBvcmcuamV0YnJhaW5zLmFubm90YXRpb25zLio7CisKK2NsYXNzIEZvbyB7CisgIDxjYXJldD5ATnVsbGFibGUKKyAgU3RyaW5nIGZvbygpe3JldHVybiAiIjt9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9hbm5vdGF0ZU1ldGhvZC9hZnRlckRvTm90QW5ub2wuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvYW5ub3RhdGVNZXRob2QvYWZ0ZXJEb05vdEFubm9sLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGU5OWNlMQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvYW5ub3RhdGVNZXRob2QvYWZ0ZXJEb05vdEFubm9sLmphdmEKQEAgLTAsMCArMSwyMCBAQAorLy8gIkFubm90YXRlIG1ldGhvZCBhcyAnQE5vdE51bGwnIiAidHJ1ZSIKK2ltcG9ydCBvcmcuamV0YnJhaW5zLmFubm90YXRpb25zLk5vdE51bGw7CisKK2NsYXNzIFggeworICAgIEBOb3ROdWxsCisgICAgU3RyaW5nIGRvbnRBbm5vdGF0ZUJhc2UoKSB7CisgICAgICAgIHJldHVybiAiWCI7CisgICAgfQorfQorY2xhc3MgWSBleHRlbmRzIFh7CisgICAgU3RyaW5nIGRvbnRBbm5vdGF0ZUJhc2UoKSB7CisgICAgICAgIHJldHVybiAiWSI7CisgICAgfQorfQorY2xhc3MgWiBleHRlbmRzIFkgeworICAgIEBOb3ROdWxsCisgICAgU3RyaW5nIGRvbnRBbm5vdGF0ZUJhc2U8Y2FyZXQ+KCkgeyAvLyB0cmlnZ2VyIHF1aWNrIGZpeCBmb3IgaW5zcGVjdGlvbiBoZXJlCisgICAgICAgIHJldHVybiAiWiI7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9hbm5vdGF0ZU1ldGhvZC9hZnRlck92ZXJyaWRkZW5NZXRob2RzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2Fubm90YXRlTWV0aG9kL2FmdGVyT3ZlcnJpZGRlbk1ldGhvZHMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NTQ0YmE2Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9hbm5vdGF0ZU1ldGhvZC9hZnRlck92ZXJyaWRkZW5NZXRob2RzLmphdmEKQEAgLTAsMCArMSwyMyBAQAorLy8gIkFubm90YXRlIG92ZXJyaWRkZW4gbWV0aG9kcyBhcyAnQE5vdE51bGwnIiAidHJ1ZSIKK2ltcG9ydCBvcmcuamV0YnJhaW5zLmFubm90YXRpb25zLk5vdE51bGw7CisKK2Fic3RyYWN0IGNsYXNzIFAyIHsKKyAgICBATm90TnVsbDxjYXJldD4KKyAgICBTdHJpbmcgZm9vKEBOb3ROdWxsIFAgcCkgeworICAgICAgICByZXR1cm4gIiI7CisgICAgfQorfQorCitjbGFzcyBQUFAgZXh0ZW5kcyBQMiB7CisgICAgQE5vdE51bGwKKyAgICBTdHJpbmcgZm9vKFAgcCkgeworICAgICAgICByZXR1cm4gc3VwZXIuZm9vKHApOworICAgIH0KK30KK2NsYXNzIFBQUDIgZXh0ZW5kcyBQMiB7CisKKyAgICBATm90TnVsbAorICAgIFN0cmluZyBmb28oUCBwKSB7CisgICAgICAgIHJldHVybiBzdXBlci5mb28ocCk7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvYW5ub3RhdGVNZXRob2QvYWZ0ZXJPdmVycmlkZGVuUGFyYW1ldGVycy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9hbm5vdGF0ZU1ldGhvZC9hZnRlck92ZXJyaWRkZW5QYXJhbWV0ZXJzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjRlZTMyMAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvYW5ub3RhdGVNZXRob2QvYWZ0ZXJPdmVycmlkZGVuUGFyYW1ldGVycy5qYXZhCkBAIC0wLDAgKzEsMjEgQEAKKy8vICJBbm5vdGF0ZSBvdmVycmlkZGVuIG1ldGhvZCBwYXJhbWV0ZXJzIGFzICdATm90TnVsbCciICJ0cnVlIgoraW1wb3J0IG9yZy5qZXRicmFpbnMuYW5ub3RhdGlvbnMuTm90TnVsbDsKKworYWJzdHJhY3QgY2xhc3MgUDIgeworICAgIEBOb3ROdWxsCisgICAgU3RyaW5nIGZvbyhATm90TnVsbDxjYXJldD4gUCBwKSB7CisgICAgICAgIHJldHVybiAiIjsKKyAgICB9Cit9CisKK2NsYXNzIFBQUCBleHRlbmRzIFAyIHsKKyAgICBTdHJpbmcgZm9vKEBOb3ROdWxsIFAgcCkgeworICAgICAgICByZXR1cm4gc3VwZXIuZm9vKHApOworICAgIH0KK30KK2NsYXNzIFBQUDIgZXh0ZW5kcyBQMiB7CisKKyAgICBTdHJpbmcgZm9vKEBOb3ROdWxsIFAgcCkgeworICAgICAgICByZXR1cm4gc3VwZXIuZm9vKHApOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2Fubm90YXRlTWV0aG9kL2FmdGVyUHJpbWl0aXZlLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2Fubm90YXRlTWV0aG9kL2FmdGVyUHJpbWl0aXZlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGE4NzcwMwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvYW5ub3RhdGVNZXRob2QvYWZ0ZXJQcmltaXRpdmUuamF2YQpAQCAtMCwwICsxLDcgQEAKKy8vICJSZW1vdmUgYW5ub3RhdGlvbiIgInRydWUiCisKK2ltcG9ydCBvcmcuamV0YnJhaW5zLmFubm90YXRpb25zLio7CisKK2NsYXNzIEZvbyB7CisgIDxjYXJldD5pbnQgZm9vKCl7cmV0dXJuIDA7fQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvYW5ub3RhdGVNZXRob2QvYWZ0ZXJSZW1vdmVBbnRpLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2Fubm90YXRlTWV0aG9kL2FmdGVyUmVtb3ZlQW50aS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJhMDc1ODkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2Fubm90YXRlTWV0aG9kL2FmdGVyUmVtb3ZlQW50aS5qYXZhCkBAIC0wLDAgKzEsMTYgQEAKKy8vICJBbm5vdGF0ZSBvdmVycmlkZGVuIG1ldGhvZHMgYXMgJ0BOb3ROdWxsJyIgInRydWUiCisKK2ltcG9ydCBvcmcuamV0YnJhaW5zLmFubm90YXRpb25zLio7CisKKyBwdWJsaWMgY2xhc3MgWEVNIHsKKyAgICAgPGNhcmV0PkBOb3ROdWxsCisgICAgIFN0cmluZyBmKCl7CisgICAgICAgICByZXR1cm4gIiI7CisgICAgIH0KKyB9CisgY2xhc3MgWEMgZXh0ZW5kcyBYRU0geworICAgICBATm90TnVsbAorICAgICBTdHJpbmcgZigpIHsKKyAgICAgICAgIHJldHVybiAiIjsKKyAgICAgfQorIH0KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvYW5ub3RhdGVNZXRob2QvYmVmb3JlQWJvcnQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvYW5ub3RhdGVNZXRob2QvYmVmb3JlQWJvcnQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNWQ2MzczCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9hbm5vdGF0ZU1ldGhvZC9iZWZvcmVBYm9ydC5qYXZhCkBAIC0wLDAgKzEsMTkgQEAKKy8vICJBbm5vdGF0ZSBtZXRob2QgYXMgJ0BOb3ROdWxsJyIgInRydWUiCitpbXBvcnQgb3JnLmpldGJyYWlucy5hbm5vdGF0aW9ucy5Ob3ROdWxsOworCitjbGFzcyBYIHsKKyAgICBATm90TnVsbAorICAgIFN0cmluZyBmb28oKSB7CisgICAgICAgIHJldHVybiAiWCI7CisgICAgfQorfQorY2xhc3MgWSBleHRlbmRzIFh7CisgICAgU3RyaW5nIGZvbygpIHsKKyAgICAgICAgcmV0dXJuICJZIjsKKyAgICB9Cit9CitjbGFzcyBaIGV4dGVuZHMgWSB7CisgICAgU3RyaW5nIGZvbzxjYXJldD4oKSB7IC8vIHRyaWdnZXIgcXVpY2sgZml4IGZvciBpbnNwZWN0aW9uIGhlcmUKKyAgICAgICAgcmV0dXJuICJaIjsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2Fubm90YXRlTWV0aG9kL2JlZm9yZUFubm9BbGwuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvYW5ub3RhdGVNZXRob2QvYmVmb3JlQW5ub0FsbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVmZTNhYTgKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2Fubm90YXRlTWV0aG9kL2JlZm9yZUFubm9BbGwuamF2YQpAQCAtMCwwICsxLDE5IEBACisvLyAiQW5ub3RhdGUgbWV0aG9kIGFzICdATm90TnVsbCciICJ0cnVlIgoraW1wb3J0IG9yZy5qZXRicmFpbnMuYW5ub3RhdGlvbnMuTm90TnVsbDsKKworY2xhc3MgWCB7CisgICAgQE5vdE51bGwKKyAgICBTdHJpbmcgYW5ub3RhdGVCYXNlKCkgeworICAgICAgICByZXR1cm4gIlgiOworICAgIH0KK30KK2NsYXNzIFkgZXh0ZW5kcyBYeworICAgIFN0cmluZyBhbm5vdGF0ZUJhc2UoKSB7CisgICAgICAgIHJldHVybiAiWSI7CisgICAgfQorfQorY2xhc3MgWiBleHRlbmRzIFkgeworICAgIFN0cmluZyBhbm5vdGF0ZUJhc2U8Y2FyZXQ+KCkgeyAvLyB0cmlnZ2VyIHF1aWNrIGZpeCBmb3IgaW5zcGVjdGlvbiBoZXJlCisgICAgICAgIHJldHVybiAiWiI7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9hbm5vdGF0ZU1ldGhvZC9iZWZvcmVDb25mbGljdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9hbm5vdGF0ZU1ldGhvZC9iZWZvcmVDb25mbGljdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY2MzRjZmEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2Fubm90YXRlTWV0aG9kL2JlZm9yZUNvbmZsaWN0LmphdmEKQEAgLTAsMCArMSw4IEBACisvLyAiUmVtb3ZlIGFubm90YXRpb24iICJ0cnVlIgorCitpbXBvcnQgb3JnLmpldGJyYWlucy5hbm5vdGF0aW9ucy4qOworCitjbGFzcyBGb28geworICA8Y2FyZXQ+QE5vdE51bGwgQE51bGxhYmxlCisgIFN0cmluZyBmb28oKXtyZXR1cm4gIiI7fQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvYW5ub3RhdGVNZXRob2QvYmVmb3JlRG9Ob3RBbm5vbC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9hbm5vdGF0ZU1ldGhvZC9iZWZvcmVEb05vdEFubm9sLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzJmNmU0OQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvYW5ub3RhdGVNZXRob2QvYmVmb3JlRG9Ob3RBbm5vbC5qYXZhCkBAIC0wLDAgKzEsMTkgQEAKKy8vICJBbm5vdGF0ZSBtZXRob2QgYXMgJ0BOb3ROdWxsJyIgInRydWUiCitpbXBvcnQgb3JnLmpldGJyYWlucy5hbm5vdGF0aW9ucy5Ob3ROdWxsOworCitjbGFzcyBYIHsKKyAgICBATm90TnVsbAorICAgIFN0cmluZyBkb250QW5ub3RhdGVCYXNlKCkgeworICAgICAgICByZXR1cm4gIlgiOworICAgIH0KK30KK2NsYXNzIFkgZXh0ZW5kcyBYeworICAgIFN0cmluZyBkb250QW5ub3RhdGVCYXNlKCkgeworICAgICAgICByZXR1cm4gIlkiOworICAgIH0KK30KK2NsYXNzIFogZXh0ZW5kcyBZIHsKKyAgICBTdHJpbmcgZG9udEFubm90YXRlQmFzZTxjYXJldD4oKSB7IC8vIHRyaWdnZXIgcXVpY2sgZml4IGZvciBpbnNwZWN0aW9uIGhlcmUKKyAgICAgICAgcmV0dXJuICJaIjsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2Fubm90YXRlTWV0aG9kL2JlZm9yZU92ZXJyaWRkZW5NZXRob2RzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2Fubm90YXRlTWV0aG9kL2JlZm9yZU92ZXJyaWRkZW5NZXRob2RzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTgxNzk4MAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvYW5ub3RhdGVNZXRob2QvYmVmb3JlT3ZlcnJpZGRlbk1ldGhvZHMuamF2YQpAQCAtMCwwICsxLDIxIEBACisvLyAiQW5ub3RhdGUgb3ZlcnJpZGRlbiBtZXRob2RzIGFzICdATm90TnVsbCciICJ0cnVlIgoraW1wb3J0IG9yZy5qZXRicmFpbnMuYW5ub3RhdGlvbnMuTm90TnVsbDsKKworYWJzdHJhY3QgY2xhc3MgUDIgeworICAgIEBOb3ROdWxsPGNhcmV0PgorICAgIFN0cmluZyBmb28oQE5vdE51bGwgUCBwKSB7CisgICAgICAgIHJldHVybiAiIjsKKyAgICB9Cit9CisKK2NsYXNzIFBQUCBleHRlbmRzIFAyIHsKKyAgICBTdHJpbmcgZm9vKFAgcCkgeworICAgICAgICByZXR1cm4gc3VwZXIuZm9vKHApOworICAgIH0KK30KK2NsYXNzIFBQUDIgZXh0ZW5kcyBQMiB7CisKKyAgICBTdHJpbmcgZm9vKFAgcCkgeworICAgICAgICByZXR1cm4gc3VwZXIuZm9vKHApOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2Fubm90YXRlTWV0aG9kL2JlZm9yZU92ZXJyaWRkZW5QYXJhbWV0ZXJzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2Fubm90YXRlTWV0aG9kL2JlZm9yZU92ZXJyaWRkZW5QYXJhbWV0ZXJzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGYzYTEzMQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvYW5ub3RhdGVNZXRob2QvYmVmb3JlT3ZlcnJpZGRlblBhcmFtZXRlcnMuamF2YQpAQCAtMCwwICsxLDIxIEBACisvLyAiQW5ub3RhdGUgb3ZlcnJpZGRlbiBtZXRob2QgcGFyYW1ldGVycyBhcyAnQE5vdE51bGwnIiAidHJ1ZSIKK2ltcG9ydCBvcmcuamV0YnJhaW5zLmFubm90YXRpb25zLk5vdE51bGw7CisKK2Fic3RyYWN0IGNsYXNzIFAyIHsKKyAgICBATm90TnVsbAorICAgIFN0cmluZyBmb28oQE5vdE51bGw8Y2FyZXQ+IFAgcCkgeworICAgICAgICByZXR1cm4gIiI7CisgICAgfQorfQorCitjbGFzcyBQUFAgZXh0ZW5kcyBQMiB7CisgICAgU3RyaW5nIGZvbyhQIHApIHsKKyAgICAgICAgcmV0dXJuIHN1cGVyLmZvbyhwKTsKKyAgICB9Cit9CitjbGFzcyBQUFAyIGV4dGVuZHMgUDIgeworCisgICAgU3RyaW5nIGZvbyhQIHApIHsKKyAgICAgICAgcmV0dXJuIHN1cGVyLmZvbyhwKTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9hbm5vdGF0ZU1ldGhvZC9iZWZvcmVQcmltaXRpdmUuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvYW5ub3RhdGVNZXRob2QvYmVmb3JlUHJpbWl0aXZlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmYyMTg2NgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvYW5ub3RhdGVNZXRob2QvYmVmb3JlUHJpbWl0aXZlLmphdmEKQEAgLTAsMCArMSw4IEBACisvLyAiUmVtb3ZlIGFubm90YXRpb24iICJ0cnVlIgorCitpbXBvcnQgb3JnLmpldGJyYWlucy5hbm5vdGF0aW9ucy4qOworCitjbGFzcyBGb28geworICA8Y2FyZXQ+QE5vdE51bGwKKyAgaW50IGZvbygpe3JldHVybiAwO30KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2Fubm90YXRlTWV0aG9kL2JlZm9yZVJlbW92ZUFudGkuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvYW5ub3RhdGVNZXRob2QvYmVmb3JlUmVtb3ZlQW50aS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc4Y2Y3NDMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2Fubm90YXRlTWV0aG9kL2JlZm9yZVJlbW92ZUFudGkuamF2YQpAQCAtMCwwICsxLDE2IEBACisvLyAiQW5ub3RhdGUgb3ZlcnJpZGRlbiBtZXRob2RzIGFzICdATm90TnVsbCciICJ0cnVlIgorCitpbXBvcnQgb3JnLmpldGJyYWlucy5hbm5vdGF0aW9ucy4qOworCisgcHVibGljIGNsYXNzIFhFTSB7CisgICAgIDxjYXJldD5ATm90TnVsbAorICAgICBTdHJpbmcgZigpeworICAgICAgICAgcmV0dXJuICIiOworICAgICB9CisgfQorIGNsYXNzIFhDIGV4dGVuZHMgWEVNIHsKKyAgICAgQE51bGxhYmxlCisgICAgIFN0cmluZyBmKCkgeworICAgICAgICAgcmV0dXJuICIiOworICAgICB9CisgfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9hbm9ueW1vdXMybGFtYmRhL2FmdGVyQ2xhc3NPYmplY3RBY2Nlc3MuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvYW5vbnltb3VzMmxhbWJkYS9hZnRlckNsYXNzT2JqZWN0QWNjZXNzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGE4N2JiNQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvYW5vbnltb3VzMmxhbWJkYS9hZnRlckNsYXNzT2JqZWN0QWNjZXNzLmphdmEKQEAgLTAsMCArMSw4IEBACisvLyAiUmVwbGFjZSB3aXRoIGxhbWJkYSIgInRydWUiCitjbGFzcyBUZXN0IHsKKyAgeworICAgICgoUnVubmFibGUpICgpIC0+IHsKKyAgICAgICAgLy9UbyBjaGFuZ2UgYm9keSBvZiBpbXBsZW1lbnRlZCBtZXRob2RzIHVzZSBGaWxlIHwgU2V0dGluZ3MgfCBGaWxlIFRlbXBsYXRlcy4KKyAgICB9KS5nZXRDbGFzcygpOzsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvYW5vbnltb3VzMmxhbWJkYS9hZnRlckNvbXBhcmFibGUuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvYW5vbnltb3VzMmxhbWJkYS9hZnRlckNvbXBhcmFibGUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNzg3ZjUwCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9hbm9ueW1vdXMybGFtYmRhL2FmdGVyQ29tcGFyYWJsZS5qYXZhCkBAIC0wLDAgKzEsNiBAQAorLy8gIlJlcGxhY2Ugd2l0aCBsYW1iZGEiICJ0cnVlIgorY2xhc3MgVGVzdCB7CisgIHsKKyAgICBDb21wYXJhYmxlPFN0cmluZz4gYyA9IG8gLT4gMDsgCisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2Fub255bW91czJsYW1iZGEvYWZ0ZXJDb21wYXJhYmxlTmVlZFRvQmVGaW5hbC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9hbm9ueW1vdXMybGFtYmRhL2FmdGVyQ29tcGFyYWJsZU5lZWRUb0JlRmluYWwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYjQ1MmJjCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9hbm9ueW1vdXMybGFtYmRhL2FmdGVyQ29tcGFyYWJsZU5lZWRUb0JlRmluYWwuamF2YQpAQCAtMCwwICsxLDE0IEBACisvLyAiUmVwbGFjZSB3aXRoIGxhbWJkYSIgInRydWUiCitjbGFzcyBUZXN0IHsKKyAgeworICAgIENvbXBhcmFibGU8U3RyaW5nPiBjID0gbyAtPiB7CisgICAgICBSdW5uYWJsZSByID0gbmV3IFJ1bm5hYmxlKCkgeworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIHZvaWQgcnVuKCkgeworICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihvKTsKKyAgICAgICAgfQorICAgICAgfTsgCisgICAgICByZXR1cm4gMDsKKyAgICB9OyAKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvYW5vbnltb3VzMmxhbWJkYS9hZnRlckZvcm1hbFR5cGVzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2Fub255bW91czJsYW1iZGEvYWZ0ZXJGb3JtYWxUeXBlcy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIzOWZjYTkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2Fub255bW91czJsYW1iZGEvYWZ0ZXJGb3JtYWxUeXBlcy5qYXZhCkBAIC0wLDAgKzEsMTQgQEAKKy8vICJSZXBsYWNlIHdpdGggbGFtYmRhIiAidHJ1ZSIKK2ltcG9ydCBqYXZhLnV0aWwuKjsKK2NsYXNzIFRlc3QyIHsKKworICAgIGludGVyZmFjZSBJPFg+IHsKKyAgICAgICAgWCBmb28oTGlzdDxYPiBsaXN0KTsKKyAgICB9CisKKyAgICBzdGF0aWMgPFQ+IEk8VD4gYmFyKEk8VD4gaSl7cmV0dXJuIGk7fQorIAorICAgIHsKKyAgICAgICAgYmFyKChMaXN0PFN0cmluZz4gbGlzdCkgLT4gbnVsbCk7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9hbm9ueW1vdXMybGFtYmRhL2FmdGVyTXVsdGlsaW5lQ29tcGFyYWJsZS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9hbm9ueW1vdXMybGFtYmRhL2FmdGVyTXVsdGlsaW5lQ29tcGFyYWJsZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRjNjUzZTYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2Fub255bW91czJsYW1iZGEvYWZ0ZXJNdWx0aWxpbmVDb21wYXJhYmxlLmphdmEKQEAgLTAsMCArMSw5IEBACisvLyAiUmVwbGFjZSB3aXRoIGxhbWJkYSIgInRydWUiCitjbGFzcyBUZXN0IHsKKyAgeworICAgIENvbXBhcmFibGU8U3RyaW5nPiBjID0gbyAtPiB7CisgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oKTsKKyAgICAgIHJldHVybiAwOworICAgIH07IAorICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9hbm9ueW1vdXMybGFtYmRhL2FmdGVyTmVlZFRvUXVhbGlmeUFjY2Vzcy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9hbm9ueW1vdXMybGFtYmRhL2FmdGVyTmVlZFRvUXVhbGlmeUFjY2Vzcy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA1MGMzMTAKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2Fub255bW91czJsYW1iZGEvYWZ0ZXJOZWVkVG9RdWFsaWZ5QWNjZXNzLmphdmEKQEAgLTAsMCArMSwxNiBAQAorLy8gIlJlcGxhY2Ugd2l0aCBsYW1iZGEiICJ0cnVlIgorY2xhc3MgVGVzdCB7CisgIGludGVyZmFjZSBJIHsKKworICB9CisgIGludGVyZmFjZSBCYXIgZXh0ZW5kcyBJIHsKKyAgICBpbnQgc210aCA9IDA7CisgICAgaW50IGNvbXBhcmUoU3RyaW5nIG8xLCBTdHJpbmcgbzIpOworICB9CisgIHsKKyAgICBJIGJhcjIgPSAoQmFyKSAobzEsIG8yKSAtPiB7CisgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oQmFyLnNtdGgpOworICAgICAgcmV0dXJuIDA7CisgICAgfTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvYW5vbnltb3VzMmxhbWJkYS9hZnRlclF1YWxpZmllZFRoaXMuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvYW5vbnltb3VzMmxhbWJkYS9hZnRlclF1YWxpZmllZFRoaXMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYjQwZWUwCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9hbm9ueW1vdXMybGFtYmRhL2FmdGVyUXVhbGlmaWVkVGhpcy5qYXZhCkBAIC0wLDAgKzEsMTQgQEAKKy8vICJSZXBsYWNlIHdpdGggbGFtYmRhIiAidHJ1ZSIKK2NsYXNzIFRlc3QgeworICBpbnRlcmZhY2UgRWZmPEEsIEI+IHsKKyAgICBCIGYoQSBhKTsKKyAgfQorCisgIGludGVyZmFjZSBJbk91dDxBPiB7CisgICAgQSBydW4oKSB0aHJvd3MgSU9FeGNlcHRpb247CisKKyAgICA8Qj4gSW5PdXQ8Qj4gYmluZChmaW5hbCBFZmY8QSwgSW5PdXQ8Qj4+IGYpIGRlZmF1bHQgeworICAgICAgcmV0dXJuICgpIC0+IGYuZihJbk91dC50aGlzLnJ1bigpKS5ydW4oKTsKKyAgICB9CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2Fub255bW91czJsYW1iZGEvYWZ0ZXJSdW5uYWJsZS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9hbm9ueW1vdXMybGFtYmRhL2FmdGVyUnVubmFibGUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ODYwYTdjCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9hbm9ueW1vdXMybGFtYmRhL2FmdGVyUnVubmFibGUuamF2YQpAQCAtMCwwICsxLDggQEAKKy8vICJSZXBsYWNlIHdpdGggbGFtYmRhIiAidHJ1ZSIKK2NsYXNzIFRlc3QgeworICB7CisgICAgUnVubmFibGUgciA9ICgpIC0+IHsKKyAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiIik7CisgICAgfTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvYW5vbnltb3VzMmxhbWJkYS9hZnRlclJ1bm5hYmxlSW5BcnJheUluaXRpYWxpemVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2Fub255bW91czJsYW1iZGEvYWZ0ZXJSdW5uYWJsZUluQXJyYXlJbml0aWFsaXplci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA2ODhlOGIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2Fub255bW91czJsYW1iZGEvYWZ0ZXJSdW5uYWJsZUluQXJyYXlJbml0aWFsaXplci5qYXZhCkBAIC0wLDAgKzEsOCBAQAorLy8gIlJlcGxhY2Ugd2l0aCBsYW1iZGEiICJ0cnVlIgorY2xhc3MgVGVzdCB7CisgIHsKKyAgICBSdW5uYWJsZVtdIHIgPSBuZXcgUnVubmFibGVbXSB7KCkgLT4geworICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIiKTsKKyAgICB9fTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvYW5vbnltb3VzMmxhbWJkYS9hZnRlclZhcldpdGhTdXBlclR5cGVEZWNsYXJlZC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9hbm9ueW1vdXMybGFtYmRhL2FmdGVyVmFyV2l0aFN1cGVyVHlwZURlY2xhcmVkLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGQ5YmExYwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvYW5vbnltb3VzMmxhbWJkYS9hZnRlclZhcldpdGhTdXBlclR5cGVEZWNsYXJlZC5qYXZhCkBAIC0wLDAgKzEsMTIgQEAKKy8vICJSZXBsYWNlIHdpdGggbGFtYmRhIiAidHJ1ZSIKK2NsYXNzIFRlc3QgeworICBpbnRlcmZhY2UgSSB7CisKKyAgfQorICBpbnRlcmZhY2UgQmFyIGV4dGVuZHMgSSB7CisgICAgaW50IGNvbXBhcmUoU3RyaW5nIG8xLCBTdHJpbmcgbzIpOworICB9CisgIHsKKyAgICBJIGJhcjIgPSAoQmFyKSAobzEsIG8yKSAtPiAwOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9hbm9ueW1vdXMybGFtYmRhL2JlZm9yZUNsYXNzQXNTdXBlclR5cGUuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvYW5vbnltb3VzMmxhbWJkYS9iZWZvcmVDbGFzc0FzU3VwZXJUeXBlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmU3MDRlNAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvYW5vbnltb3VzMmxhbWJkYS9iZWZvcmVDbGFzc0FzU3VwZXJUeXBlLmphdmEKQEAgLTAsMCArMSwxNiBAQAorLy8gIlJlcGxhY2Ugd2l0aCBsYW1iZGEiICJmYWxzZSIKK2NsYXNzIFRlc3QgeworICB7CisgICAgQSBhID0gbmV3IEE8Y2FyZXQ+KCJzdHIiKSB7CisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgdm9pZCBmb28oKSB7CisgICAgICAgIH0KKyAgICB9OworICB9CisgIHN0YXRpYyBjbGFzcyBBIHsKKyAgICBBKFN0cmluZyBzKSB7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgZm9vKCl7fQorICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9hbm9ueW1vdXMybGFtYmRhL2JlZm9yZUNsYXNzT2JqZWN0QWNjZXNzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2Fub255bW91czJsYW1iZGEvYmVmb3JlQ2xhc3NPYmplY3RBY2Nlc3MuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZGYxZWRkCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9hbm9ueW1vdXMybGFtYmRhL2JlZm9yZUNsYXNzT2JqZWN0QWNjZXNzLmphdmEKQEAgLTAsMCArMSwxMSBAQAorLy8gIlJlcGxhY2Ugd2l0aCBsYW1iZGEiICJ0cnVlIgorY2xhc3MgVGVzdCB7CisgIHsKKyAgICBuZXcgUnU8Y2FyZXQ+bm5hYmxlKCkgeworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIHZvaWQgcnVuKCkgeworICAgICAgICAgICAgLy9UbyBjaGFuZ2UgYm9keSBvZiBpbXBsZW1lbnRlZCBtZXRob2RzIHVzZSBGaWxlIHwgU2V0dGluZ3MgfCBGaWxlIFRlbXBsYXRlcy4KKyAgICAgICAgfQorICAgIH0uZ2V0Q2xhc3MoKTs7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2Fub255bW91czJsYW1iZGEvYmVmb3JlQ29tcGFyYWJsZS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9hbm9ueW1vdXMybGFtYmRhL2JlZm9yZUNvbXBhcmFibGUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZGFhYTM4Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9hbm9ueW1vdXMybGFtYmRhL2JlZm9yZUNvbXBhcmFibGUuamF2YQpAQCAtMCwwICsxLDExIEBACisvLyAiUmVwbGFjZSB3aXRoIGxhbWJkYSIgInRydWUiCitjbGFzcyBUZXN0IHsKKyAgeworICAgIENvbXBhcmFibGU8U3RyaW5nPiBjID0gbmV3IENvbXBhPGNhcmV0PnJhYmxlPFN0cmluZz4oKSB7CisgICAgICBAT3ZlcnJpZGUKKyAgICAgIHB1YmxpYyBpbnQgY29tcGFyZVRvKFN0cmluZyBvKSB7CisgICAgICAgIHJldHVybiAwOworICAgICAgfQorICAgIH07IAorICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9hbm9ueW1vdXMybGFtYmRhL2JlZm9yZUNvbXBhcmFibGVOZWVkVG9CZUZpbmFsLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2Fub255bW91czJsYW1iZGEvYmVmb3JlQ29tcGFyYWJsZU5lZWRUb0JlRmluYWwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41N2YxODJkCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9hbm9ueW1vdXMybGFtYmRhL2JlZm9yZUNvbXBhcmFibGVOZWVkVG9CZUZpbmFsLmphdmEKQEAgLTAsMCArMSwxNyBAQAorLy8gIlJlcGxhY2Ugd2l0aCBsYW1iZGEiICJ0cnVlIgorY2xhc3MgVGVzdCB7CisgIHsKKyAgICBDb21wYXJhYmxlPFN0cmluZz4gYyA9IG5ldyBDb21wYTxjYXJldD5yYWJsZTxTdHJpbmc+KCkgeworICAgICAgQE92ZXJyaWRlCisgICAgICBwdWJsaWMgaW50IGNvbXBhcmVUbyhmaW5hbCBTdHJpbmcgbykgeworICAgICAgICBSdW5uYWJsZSByID0gbmV3IFJ1bm5hYmxlKCkgeworICAgICAgICAgIEBPdmVycmlkZQorICAgICAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihvKTsKKyAgICAgICAgICB9CisgICAgICAgIH07IAorICAgICAgICByZXR1cm4gMDsKKyAgICAgIH0KKyAgICB9OyAKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvYW5vbnltb3VzMmxhbWJkYS9iZWZvcmVGaWVsZEluQW5vbnltb3VzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2Fub255bW91czJsYW1iZGEvYmVmb3JlRmllbGRJbkFub255bW91cy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNkYzUxOTEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2Fub255bW91czJsYW1iZGEvYmVmb3JlRmllbGRJbkFub255bW91cy5qYXZhCkBAIC0wLDAgKzEsMTggQEAKKy8vICJSZXBsYWNlIHdpdGggbGFtYmRhIiAiZmFsc2UiCitjbGFzcyBUZXN0IHsKKyAgaW50ZXJmYWNlIEkgeworCisgIH0KKyAgaW50ZXJmYWNlIEJhciBleHRlbmRzIEkgeworICAgIGludCBjb21wYXJlKFN0cmluZyBvMSwgU3RyaW5nIG8yKTsKKyAgfQorICB7CisgICAgSSBiYXIyID0gbmV3IEJhPGNhcmV0PnIoKSB7CisgICAgICBpbnQgazsKKyAgICAgIEBPdmVycmlkZQorICAgICAgcHVibGljIGludCBjb21wYXJlKFN0cmluZyBvMSwgU3RyaW5nIG8yKSB7CisgICAgICAgIHJldHVybiAwOworICAgICAgfQorICAgIH07CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2Fub255bW91czJsYW1iZGEvYmVmb3JlRm9ybWFsVHlwZXMuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvYW5vbnltb3VzMmxhbWJkYS9iZWZvcmVGb3JtYWxUeXBlcy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJiMjhhZmIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2Fub255bW91czJsYW1iZGEvYmVmb3JlRm9ybWFsVHlwZXMuamF2YQpAQCAtMCwwICsxLDE5IEBACisvLyAiUmVwbGFjZSB3aXRoIGxhbWJkYSIgInRydWUiCitpbXBvcnQgamF2YS51dGlsLio7CitjbGFzcyBUZXN0MiB7CisKKyAgICBpbnRlcmZhY2UgSTxYPiB7CisgICAgICAgIFggZm9vKExpc3Q8WD4gbGlzdCk7CisgICAgfQorCisgICAgc3RhdGljIDxUPiBJPFQ+IGJhcihJPFQ+IGkpe3JldHVybiBpO30KKyAKKyAgICB7CisgICAgICAgIGJhcihuZXcgSTxTdHJpPGNhcmV0Pm5nPigpIHsKKyAgICAgICAgICAgIEBPdmVycmlkZQorICAgICAgICAgICAgcHVibGljIFN0cmluZyBmb28oTGlzdDxTdHJpbmc+IGxpc3QpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsgIC8vVG8gY2hhbmdlIGJvZHkgb2YgaW1wbGVtZW50ZWQgbWV0aG9kcyB1c2UgRmlsZSB8IFNldHRpbmdzIHwgRmlsZSBUZW1wbGF0ZXMuCisgICAgICAgICAgICB9CisgICAgICAgIH0pOworICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvYW5vbnltb3VzMmxhbWJkYS9iZWZvcmVMb2NhbFZhcmlhYmxlQ29uZmxpY3RzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2Fub255bW91czJsYW1iZGEvYmVmb3JlTG9jYWxWYXJpYWJsZUNvbmZsaWN0cy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQzYjdjYjYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2Fub255bW91czJsYW1iZGEvYmVmb3JlTG9jYWxWYXJpYWJsZUNvbmZsaWN0cy5qYXZhCkBAIC0wLDAgKzEsMTMgQEAKKy8vICJSZXBsYWNlIHdpdGggbGFtYmRhIiAiZmFsc2UiCitjbGFzcyBGb28xMSB7CisgIFJ1bm5hYmxlIHJ1bm5hYmxlID0gbmV3IFJ1bm5hYmxlKCkgeworICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKKyAgICAgIGludCB4ID0gNTsKKyAgICAgIG5ldyBSdW5uPGNhcmV0PmFibGUoKSB7CisgICAgICAgIHB1YmxpYyB2b2lkIHJ1biAoKSB7CisgICAgICAgICAgaW50IHggPSAxMDsKKyAgICAgICAgfQorICAgICAgfSA7CisgICAgfQorICB9OworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvYW5vbnltb3VzMmxhbWJkYS9iZWZvcmVNdWx0aWxpbmVDb21wYXJhYmxlLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2Fub255bW91czJsYW1iZGEvYmVmb3JlTXVsdGlsaW5lQ29tcGFyYWJsZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhhMmVkMDMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2Fub255bW91czJsYW1iZGEvYmVmb3JlTXVsdGlsaW5lQ29tcGFyYWJsZS5qYXZhCkBAIC0wLDAgKzEsMTIgQEAKKy8vICJSZXBsYWNlIHdpdGggbGFtYmRhIiAidHJ1ZSIKK2NsYXNzIFRlc3QgeworICB7CisgICAgQ29tcGFyYWJsZTxTdHJpbmc+IGMgPSBuZXcgQ29tcGE8Y2FyZXQ+cmFibGU8U3RyaW5nPigpIHsKKyAgICAgIEBPdmVycmlkZQorICAgICAgcHVibGljIGludCBjb21wYXJlVG8oU3RyaW5nIG8pIHsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCk7CisgICAgICAgIHJldHVybiAwOworICAgICAgfQorICAgIH07IAorICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9hbm9ueW1vdXMybGFtYmRhL2JlZm9yZU5lZWRUb1F1YWxpZnlBY2Nlc3MuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvYW5vbnltb3VzMmxhbWJkYS9iZWZvcmVOZWVkVG9RdWFsaWZ5QWNjZXNzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjZkZTkxNgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvYW5vbnltb3VzMmxhbWJkYS9iZWZvcmVOZWVkVG9RdWFsaWZ5QWNjZXNzLmphdmEKQEAgLTAsMCArMSwxOSBAQAorLy8gIlJlcGxhY2Ugd2l0aCBsYW1iZGEiICJ0cnVlIgorY2xhc3MgVGVzdCB7CisgIGludGVyZmFjZSBJIHsKKworICB9CisgIGludGVyZmFjZSBCYXIgZXh0ZW5kcyBJIHsKKyAgICBpbnQgc210aCA9IDA7CisgICAgaW50IGNvbXBhcmUoU3RyaW5nIG8xLCBTdHJpbmcgbzIpOworICB9CisgIHsKKyAgICBJIGJhcjIgPSBuZXcgQmE8Y2FyZXQ+cigpIHsKKyAgICAgIEBPdmVycmlkZQorICAgICAgcHVibGljIGludCBjb21wYXJlKFN0cmluZyBvMSwgU3RyaW5nIG8yKSB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihzbXRoKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgICB9CisgICAgfTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvYW5vbnltb3VzMmxhbWJkYS9iZWZvcmVOb01ldGhvZEJvZHkuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvYW5vbnltb3VzMmxhbWJkYS9iZWZvcmVOb01ldGhvZEJvZHkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ODAzNzMyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9hbm9ueW1vdXMybGFtYmRhL2JlZm9yZU5vTWV0aG9kQm9keS5qYXZhCkBAIC0wLDAgKzEsOSBAQAorLy8gIlJlcGxhY2Ugd2l0aCBsYW1iZGEiICJmYWxzZSIKK2NsYXNzIFRlc3QgeworICB7CisgICAgUnVubmFibGUgYSA9IG5ldyBSdW48Y2FyZXQ+bmFibGUoKSB7CisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgdm9pZCBydW4oKQorICAgIH07CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2Fub255bW91czJsYW1iZGEvYmVmb3JlTm9uUUdldENsYXNzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2Fub255bW91czJsYW1iZGEvYmVmb3JlTm9uUUdldENsYXNzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGI4MTk1ZQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvYW5vbnltb3VzMmxhbWJkYS9iZWZvcmVOb25RR2V0Q2xhc3MuamF2YQpAQCAtMCwwICsxLDExIEBACisvLyAiUmVwbGFjZSB3aXRoIGxhbWJkYSIgImZhbHNlIgorY2xhc3MgVGVzdCB7CisgIHsKKyAgICBuZXcgUnU8Y2FyZXQ+bm5hYmxlKCkgeworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIHZvaWQgcnVuKCkgeworICAgICAgICAgICAgQ2xhc3MgYyA9IGdldENsYXNzKCk7CisgICAgICAgIH0KKyAgICB9OworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9hbm9ueW1vdXMybGFtYmRhL2JlZm9yZVF1YWxpZmllZFRoaXMuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvYW5vbnltb3VzMmxhbWJkYS9iZWZvcmVRdWFsaWZpZWRUaGlzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTIzYmQ0MAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvYW5vbnltb3VzMmxhbWJkYS9iZWZvcmVRdWFsaWZpZWRUaGlzLmphdmEKQEAgLTAsMCArMSwxOSBAQAorLy8gIlJlcGxhY2Ugd2l0aCBsYW1iZGEiICJ0cnVlIgorY2xhc3MgVGVzdCB7CisgIGludGVyZmFjZSBFZmY8QSwgQj4geworICAgIEIgZihBIGEpOworICB9CisKKyAgaW50ZXJmYWNlIEluT3V0PEE+IHsKKyAgICBBIHJ1bigpIHRocm93cyBJT0V4Y2VwdGlvbjsKKworICAgIDxCPiBJbk91dDxCPiBiaW5kKGZpbmFsIEVmZjxBLCBJbk91dDxCPj4gZikgZGVmYXVsdCB7CisgICAgICByZXR1cm4gbmV3IEluPGNhcmV0Pk91dDxCPigpIHsKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyBCIHJ1bigpIHRocm93cyBJT0V4Y2VwdGlvbiB7CisgICAgICAgICAgcmV0dXJuIGYuZihJbk91dC50aGlzLnJ1bigpKS5ydW4oKTsKKyAgICAgICAgfQorICAgICAgfTsKKyAgICB9CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2Fub255bW91czJsYW1iZGEvYmVmb3JlUmVjdXJzaXZlLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2Fub255bW91czJsYW1iZGEvYmVmb3JlUmVjdXJzaXZlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWVjMTdmOAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvYW5vbnltb3VzMmxhbWJkYS9iZWZvcmVSZWN1cnNpdmUuamF2YQpAQCAtMCwwICsxLDE2IEBACisvLyAiUmVwbGFjZSB3aXRoIGxhbWJkYSIgImZhbHNlIgorY2xhc3MgVGVzdCB7CisgIHB1YmxpYyBpbnRlcmZhY2UgSSB7CisgICAgaW50IG0oKTsKKyAgfQorICB7CisgICAgSSBpID0gbmV3IDxjYXJldD5JKCkgeworICAgICAgQE92ZXJyaWRlCisgICAgICBwdWJsaWMgaW50IG0oKSB7CisgICAgICAgIG0oKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgICB9CisgICAgfTsKKworICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2Fub255bW91czJsYW1iZGEvYmVmb3JlUnVubmFibGUuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvYW5vbnltb3VzMmxhbWJkYS9iZWZvcmVSdW5uYWJsZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVhMjBmMGUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2Fub255bW91czJsYW1iZGEvYmVmb3JlUnVubmFibGUuamF2YQpAQCAtMCwwICsxLDExIEBACisvLyAiUmVwbGFjZSB3aXRoIGxhbWJkYSIgInRydWUiCitjbGFzcyBUZXN0IHsKKyAgeworICAgIFJ1bm5hYmxlIHIgPSBuZXcgUnVuPGNhcmV0Pm5hYmxlKCkgeworICAgICAgQE92ZXJyaWRlCisgICAgICBwdWJsaWMgdm9pZCBydW4oKSB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiIik7CisgICAgICB9CisgICAgfTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvYW5vbnltb3VzMmxhbWJkYS9iZWZvcmVSdW5uYWJsZUluQXJyYXlJbml0aWFsaXplci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9hbm9ueW1vdXMybGFtYmRhL2JlZm9yZVJ1bm5hYmxlSW5BcnJheUluaXRpYWxpemVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGI1MjMzMwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvYW5vbnltb3VzMmxhbWJkYS9iZWZvcmVSdW5uYWJsZUluQXJyYXlJbml0aWFsaXplci5qYXZhCkBAIC0wLDAgKzEsMTEgQEAKKy8vICJSZXBsYWNlIHdpdGggbGFtYmRhIiAidHJ1ZSIKK2NsYXNzIFRlc3QgeworICB7CisgICAgUnVubmFibGVbXSByID0gbmV3IFJ1bm5hYmxlW10ge25ldyBSdW48Y2FyZXQ+bmFibGUoKSB7CisgICAgICBAT3ZlcnJpZGUKKyAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIiKTsKKyAgICAgIH0KKyAgICB9fTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvYW5vbnltb3VzMmxhbWJkYS9iZWZvcmVSdW5uYWJsZVdpdGhIZWxwTWV0aG9kLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2Fub255bW91czJsYW1iZGEvYmVmb3JlUnVubmFibGVXaXRoSGVscE1ldGhvZC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk2N2Q5MjcKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2Fub255bW91czJsYW1iZGEvYmVmb3JlUnVubmFibGVXaXRoSGVscE1ldGhvZC5qYXZhCkBAIC0wLDAgKzEsMTIgQEAKKy8vICJSZXBsYWNlIHdpdGggbGFtYmRhIiAiZmFsc2UiCitjbGFzcyBUZXN0IHsKKyAgeworICAgIFJ1bm5hYmxlIHIgPSBuZXcgUnU8Y2FyZXQ+bm5hYmxlKCkgeworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIHZvaWQgcnVuKCkgeworICAgICAgICAgICBoZWxwZXIoKTsKKyAgICAgICAgfQorICAgICAgICBwcml2YXRlIHZvaWQgaGVscGVyKCl7fQorICAgIH07CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2Fub255bW91czJsYW1iZGEvYmVmb3JlVGhpc1JlZkluc2lkZS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9hbm9ueW1vdXMybGFtYmRhL2JlZm9yZVRoaXNSZWZJbnNpZGUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YmZiODg0Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9hbm9ueW1vdXMybGFtYmRhL2JlZm9yZVRoaXNSZWZJbnNpZGUuamF2YQpAQCAtMCwwICsxLDExIEBACisvLyAiUmVwbGFjZSB3aXRoIGxhbWJkYSIgImZhbHNlIgorY2xhc3MgVGVzdCB7CisgIHsKKyAgICBSdW5uYWJsZSB4ID0gbmV3IFJ1bm48Y2FyZXQ+YWJsZSgpIHsKKyAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKKyAgICAgICAgdGhpcy50b1N0cmluZygpOworICAgICAgfQorICAgIH07CisKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvYW5vbnltb3VzMmxhbWJkYS9iZWZvcmVWYXJXaXRoU3VwZXJUeXBlRGVjbGFyZWQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvYW5vbnltb3VzMmxhbWJkYS9iZWZvcmVWYXJXaXRoU3VwZXJUeXBlRGVjbGFyZWQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOThlZTU2Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9hbm9ueW1vdXMybGFtYmRhL2JlZm9yZVZhcldpdGhTdXBlclR5cGVEZWNsYXJlZC5qYXZhCkBAIC0wLDAgKzEsMTcgQEAKKy8vICJSZXBsYWNlIHdpdGggbGFtYmRhIiAidHJ1ZSIKK2NsYXNzIFRlc3QgeworICBpbnRlcmZhY2UgSSB7CisKKyAgfQorICBpbnRlcmZhY2UgQmFyIGV4dGVuZHMgSSB7CisgICAgaW50IGNvbXBhcmUoU3RyaW5nIG8xLCBTdHJpbmcgbzIpOworICB9CisgIHsKKyAgICBJIGJhcjIgPSBuZXcgQmE8Y2FyZXQ+cigpIHsKKyAgICAgIEBPdmVycmlkZQorICAgICAgcHVibGljIGludCBjb21wYXJlKFN0cmluZyBvMSwgU3RyaW5nIG8yKSB7CisgICAgICAgIHJldHVybiAwOworICAgICAgfQorICAgIH07CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2Fub255bW91czJtZXRob2RSZWZlcmVuY2UvYWZ0ZXIxLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2Fub255bW91czJtZXRob2RSZWZlcmVuY2UvYWZ0ZXIxLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDVkNjMyMAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvYW5vbnltb3VzMm1ldGhvZFJlZmVyZW5jZS9hZnRlcjEuamF2YQpAQCAtMCwwICsxLDEzIEBACisvLyAiUmVwbGFjZSB3aXRoIG1ldGhvZCByZWZlcmVuY2UiICJ0cnVlIgorY2xhc3MgVGVzdCB7CisgIGludGVyZmFjZSBCYXIgeworICAgIGludCBjb21wYXJlKFN0cmluZyBvMSwgU3RyaW5nIG8yKTsKKyAgfQorICAgIHN0YXRpYyBpbnQgYyhTdHJpbmcgbzEsIFN0cmluZyBvMikgeworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgeworICAgIEJhciBiYXIyID0gVGVzdDo6YzsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvYW5vbnltb3VzMm1ldGhvZFJlZmVyZW5jZS9hZnRlckluc2VydENhc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvYW5vbnltb3VzMm1ldGhvZFJlZmVyZW5jZS9hZnRlckluc2VydENhc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMGRmZmVmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9hbm9ueW1vdXMybWV0aG9kUmVmZXJlbmNlL2FmdGVySW5zZXJ0Q2FzdC5qYXZhCkBAIC0wLDAgKzEsMTQgQEAKKy8vICJSZXBsYWNlIHdpdGggbWV0aG9kIHJlZmVyZW5jZSIgInRydWUiCitjbGFzcyBUZXN0IHsKKyAgaW50ZXJmYWNlIEkge30KKyAgaW50ZXJmYWNlIEJhciBleHRlbmRzIEkgeworICAgIGludCBjb21wYXJlKFN0cmluZyBvMSwgU3RyaW5nIG8yKTsKKyAgfQorICAgIHN0YXRpYyBpbnQgYyhTdHJpbmcgbzEsIFN0cmluZyBvMikgeworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgeworICAgIEkgYmFyMiA9IChCYXIpIFRlc3Q6OmM7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2Fub255bW91czJtZXRob2RSZWZlcmVuY2UvYmVmb3JlMS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9hbm9ueW1vdXMybWV0aG9kUmVmZXJlbmNlL2JlZm9yZTEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43Y2EyNGYxCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9hbm9ueW1vdXMybWV0aG9kUmVmZXJlbmNlL2JlZm9yZTEuamF2YQpAQCAtMCwwICsxLDE4IEBACisvLyAiUmVwbGFjZSB3aXRoIG1ldGhvZCByZWZlcmVuY2UiICJ0cnVlIgorY2xhc3MgVGVzdCB7CisgIGludGVyZmFjZSBCYXIgeworICAgIGludCBjb21wYXJlKFN0cmluZyBvMSwgU3RyaW5nIG8yKTsKKyAgfQorICAgIHN0YXRpYyBpbnQgYyhTdHJpbmcgbzEsIFN0cmluZyBvMikgeworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgeworICAgIEJhciBiYXIyID0gbmV3IEI8Y2FyZXQ+YXIoKSB7CisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgaW50IGNvbXBhcmUoZmluYWwgU3RyaW5nIG8xLCBmaW5hbCBTdHJpbmcgbzIpIHsKKyAgICAgICAgICAgIHJldHVybiBjKG8xLCBvMik7CisgICAgICAgIH0KKyAgICB9OworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9hbm9ueW1vdXMybWV0aG9kUmVmZXJlbmNlL2JlZm9yZUluc2VydENhc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvYW5vbnltb3VzMm1ldGhvZFJlZmVyZW5jZS9iZWZvcmVJbnNlcnRDYXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWEwY2FhMgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvYW5vbnltb3VzMm1ldGhvZFJlZmVyZW5jZS9iZWZvcmVJbnNlcnRDYXN0LmphdmEKQEAgLTAsMCArMSwxOSBAQAorLy8gIlJlcGxhY2Ugd2l0aCBtZXRob2QgcmVmZXJlbmNlIiAidHJ1ZSIKK2NsYXNzIFRlc3QgeworICBpbnRlcmZhY2UgSSB7fQorICBpbnRlcmZhY2UgQmFyIGV4dGVuZHMgSSB7CisgICAgaW50IGNvbXBhcmUoU3RyaW5nIG8xLCBTdHJpbmcgbzIpOworICB9CisgICAgc3RhdGljIGludCBjKFN0cmluZyBvMSwgU3RyaW5nIG8yKSB7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICB7CisgICAgSSBiYXIyID0gbmV3IEI8Y2FyZXQ+YXIoKSB7CisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgaW50IGNvbXBhcmUoZmluYWwgU3RyaW5nIG8xLCBmaW5hbCBTdHJpbmcgbzIpIHsKKyAgICAgICAgICAgIHJldHVybiBjKG8xLCBvMik7CisgICAgICAgIH0KKyAgICB9OworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9hbm9ueW1vdXMybWV0aG9kUmVmZXJlbmNlL2JlZm9yZVF1YWxpZmllckRvZXNudFVzZVBhcmFtcy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9hbm9ueW1vdXMybWV0aG9kUmVmZXJlbmNlL2JlZm9yZVF1YWxpZmllckRvZXNudFVzZVBhcmFtcy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc0NDlhM2IKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2Fub255bW91czJtZXRob2RSZWZlcmVuY2UvYmVmb3JlUXVhbGlmaWVyRG9lc250VXNlUGFyYW1zLmphdmEKQEAgLTAsMCArMSwxNiBAQAorLy8gIlJlcGxhY2Ugd2l0aCBtZXRob2QgcmVmZXJlbmNlIiAiZmFsc2UiCitpbnRlcmZhY2UgRm9vPEEsIEI+IHsKKyAgICBCIGYoQSBhKTsKK30KKworaW50ZXJmYWNlIERlZUJlZTxBPiB7CisgICAgQSBydW4oVm9pZCBjKSB0aHJvd3MgU1FMRXhjZXB0aW9uOworCisgICAgPEI+IERlZUJlZTxCPiBiaW5kKGZpbmFsIEZvbzxBLCBEZWVCZWU8Qj4+IGYpIGRlZmF1bHQgeworICAgICAgICByZXR1cm4gbmV3IERlZTxjYXJldD5CZWU8Qj4gKCkgeworICAgICAgICAgICAgcHVibGljIEIgcnVuKGZpbmFsIFZvaWQgYykgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7CisgICAgICAgICAgICAgICByZXR1cm4gZi5mKG51bGwpLnJ1bihjKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9hbm9ueW1vdXMybWV0aG9kUmVmZXJlbmNlL2JlZm9yZVF1YWxpZmllclVzZXNQYXJhbXMuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvYW5vbnltb3VzMm1ldGhvZFJlZmVyZW5jZS9iZWZvcmVRdWFsaWZpZXJVc2VzUGFyYW1zLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDUyNjc1MwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvYW5vbnltb3VzMm1ldGhvZFJlZmVyZW5jZS9iZWZvcmVRdWFsaWZpZXJVc2VzUGFyYW1zLmphdmEKQEAgLTAsMCArMSwxNiBAQAorLy8gIlJlcGxhY2Ugd2l0aCBtZXRob2QgcmVmZXJlbmNlIiAiZmFsc2UiCitpbnRlcmZhY2UgRm9vPEEsIEI+IHsKKyAgICBCIGYoQSBhKTsKK30KKworaW50ZXJmYWNlIERlZUJlZTxBPiB7CisgICAgQSBydW4oVm9pZCBjKSB0aHJvd3MgU1FMRXhjZXB0aW9uOworCisgICAgPEI+IERlZUJlZTxCPiBiaW5kKGZpbmFsIEZvbzxBLCBEZWVCZWU8Qj4+IGYpIGRlZmF1bHQgeworICAgICAgICByZXR1cm4gbmV3IERlZTxjYXJldD5CZWU8Qj4gKCkgeworICAgICAgICAgICAgcHVibGljIEIgcnVuKGZpbmFsIFZvaWQgYykgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7CisgICAgICAgICAgICAgICByZXR1cm4gZi5mKERlZUJlZS50aGlzLnJ1bihjKSkucnVuKGMpOworICAgICAgICAgICAgfQorICAgICAgICB9OworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2Fub255bW91czJtZXRob2RSZWZlcmVuY2UvYmVmb3JlUmVjdXJzaXZlLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2Fub255bW91czJtZXRob2RSZWZlcmVuY2UvYmVmb3JlUmVjdXJzaXZlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmI1OGQ2NgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvYW5vbnltb3VzMm1ldGhvZFJlZmVyZW5jZS9iZWZvcmVSZWN1cnNpdmUuamF2YQpAQCAtMCwwICsxLDE1IEBACisvLyAiUmVwbGFjZSB3aXRoIG1ldGhvZCByZWZlcmVuY2UiICJmYWxzZSIKK2NsYXNzIFRlc3QgeworICBwdWJsaWMgaW50ZXJmYWNlIEkgeworICAgIGludCBtKCk7CisgIH0KKyAgeworICAgIEkgaSA9IG5ldyA8Y2FyZXQ+SSgpIHsKKyAgICAgIEBPdmVycmlkZQorICAgICAgcHVibGljIGludCBtKCkgeworICAgICAgICByZXR1cm4gbSgpOworICAgICAgfQorICAgIH07CisKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9hc3NpZ25GaWVsZEZyb21QYXJhbWV0ZXIvYWZ0ZXIxLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2Fzc2lnbkZpZWxkRnJvbVBhcmFtZXRlci9hZnRlcjEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYjViZGJkCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9hc3NpZ25GaWVsZEZyb21QYXJhbWV0ZXIvYWZ0ZXIxLmphdmEKQEAgLTAsMCArMSw4IEBACisvLyAiQXNzaWduIFBhcmFtZXRlciB0byBGaWVsZCAnbXlJZCciICJ0cnVlIgorCitjbGFzcyBQZXJzb24geworICAgIGludCBteUlkOworICAgIHZvaWQgZihpbnQgaWQpIHsKKyAgICAgICAgbXlJZCA9IGlkOzxjYXJldD4KKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9hc3NpZ25GaWVsZEZyb21QYXJhbWV0ZXIvYWZ0ZXJBc3NpZ25tZW50T3JkZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvYXNzaWduRmllbGRGcm9tUGFyYW1ldGVyL2FmdGVyQXNzaWdubWVudE9yZGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGFkZjEwYgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvYXNzaWduRmllbGRGcm9tUGFyYW1ldGVyL2FmdGVyQXNzaWdubWVudE9yZGVyLmphdmEKQEAgLTAsMCArMSwxMCBAQAorLy8gIkFzc2lnbiBQYXJhbWV0ZXIgdG8gRmllbGQgJ215TmFtZSciICJ0cnVlIgorCitjbGFzcyBQZXJzb24geworICAgIGludCBteUlkOworICAgIFN0cmluZyBteU5hbWU7CisgICAgdm9pZCBmKGludCBpZCwgU3RyaW5nIG5hbWUpIHsKKyAgICAgICAgbXlJZCA9IGlkOworICAgICAgICBteU5hbWUgPSBuYW1lOzxjYXJldD4KKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9hc3NpZ25GaWVsZEZyb21QYXJhbWV0ZXIvYmVmb3JlMS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9hc3NpZ25GaWVsZEZyb21QYXJhbWV0ZXIvYmVmb3JlMS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRlODBjODIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2Fzc2lnbkZpZWxkRnJvbVBhcmFtZXRlci9iZWZvcmUxLmphdmEKQEAgLTAsMCArMSw3IEBACisvLyAiQXNzaWduIFBhcmFtZXRlciB0byBGaWVsZCAnbXlJZCciICJ0cnVlIgorCitjbGFzcyBQZXJzb24geworICAgIGludCBteUlkOworICAgIHZvaWQgZihpbnQgaWQ8Y2FyZXQ+KSB7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvYXNzaWduRmllbGRGcm9tUGFyYW1ldGVyL2JlZm9yZTIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvYXNzaWduRmllbGRGcm9tUGFyYW1ldGVyL2JlZm9yZTIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZjcyZjQ4Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9hc3NpZ25GaWVsZEZyb21QYXJhbWV0ZXIvYmVmb3JlMi5qYXZhCkBAIC0wLDAgKzEsOCBAQAorLy8gIkFzc2lnbiBQYXJhbWV0ZXIgdG8gRmllbGQgJ215SWQnIiAiZmFsc2UiCisKK2NsYXNzIFBlcnNvbiB7CisgICAgaW50IG15SWQ7CisgICAgdm9pZCBmKGludCBpZDxjYXJldD4pIHsKKyAgICAgICAgbXlJZCA9IGlkOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2Fzc2lnbkZpZWxkRnJvbVBhcmFtZXRlci9iZWZvcmUzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2Fzc2lnbkZpZWxkRnJvbVBhcmFtZXRlci9iZWZvcmUzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGQwNjg1OAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvYXNzaWduRmllbGRGcm9tUGFyYW1ldGVyL2JlZm9yZTMuamF2YQpAQCAtMCwwICsxLDcgQEAKKy8vICJBc3NpZ24gUGFyYW1ldGVyIHRvIEZpZWxkICdvdXJJZCciICJmYWxzZSIKKworY2xhc3MgUGVyc29uIHsKKyAgICBpbnQgb3VySWQ7CisgICAgc3RhdGljIHZvaWQgZihpbnQgaWQ8Y2FyZXQ+KSB7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvYXNzaWduRmllbGRGcm9tUGFyYW1ldGVyL2JlZm9yZUFzc2lnbm1lbnRPcmRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9hc3NpZ25GaWVsZEZyb21QYXJhbWV0ZXIvYmVmb3JlQXNzaWdubWVudE9yZGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjQzMDAzMgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvYXNzaWduRmllbGRGcm9tUGFyYW1ldGVyL2JlZm9yZUFzc2lnbm1lbnRPcmRlci5qYXZhCkBAIC0wLDAgKzEsOSBAQAorLy8gIkFzc2lnbiBQYXJhbWV0ZXIgdG8gRmllbGQgJ215TmFtZSciICJ0cnVlIgorCitjbGFzcyBQZXJzb24geworICAgIGludCBteUlkOworICAgIFN0cmluZyBteU5hbWU7CisgICAgdm9pZCBmKGludCBpZCwgU3RyaW5nIG5hbWU8Y2FyZXQ+KSB7CisgICAgICAgIG15SWQgPSBpZDsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9iaW5kRmllbGRzRnJvbVBhcmFtZXRlcnMvYWZ0ZXJBbHJlYWR5RXhpc3RpbmdGaWVsZHMuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvYmluZEZpZWxkc0Zyb21QYXJhbWV0ZXJzL2FmdGVyQWxyZWFkeUV4aXN0aW5nRmllbGRzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWNlZTBlMAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvYmluZEZpZWxkc0Zyb21QYXJhbWV0ZXJzL2FmdGVyQWxyZWFkeUV4aXN0aW5nRmllbGRzLmphdmEKQEAgLTAsMCArMSwxNCBAQAorLy8gIkJpbmQgTWV0aG9kIFBhcmFtZXRlcnMgdG8gRmllbGRzIiAidHJ1ZSIKKworY2xhc3MgQXsKKyAgICAgIHByaXZhdGUgZmluYWwgU3RyaW5nIG15UDsKKyAgICAgIHByaXZhdGUgZmluYWwgU3RyaW5nIG15TG9uZ1BhcmFtZXRlck5hbWU7CisgICAgICBwcml2YXRlIGZpbmFsIFN0cmluZyBteU5hbWU7CisgIAorICAgICAgdm9pZCBmKFN0cmluZyBwLCBTdHJpbmcgbG9uZ1BhcmFtZXRlck5hbWUsIFN0cmluZyBzaG9ydFBhcmFtZXRlck5hbWUpeworICAgICAgICAgIG15UCA9IHA7CisgICAgICAgICAgbXlMb25nUGFyYW1ldGVyTmFtZSA9IGxvbmdQYXJhbWV0ZXJOYW1lOworICAgICAgICAgIG15TmFtZSA9IHNob3J0UGFyYW1ldGVyTmFtZTsKKyAgICAgIH0KK30KKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9iaW5kRmllbGRzRnJvbVBhcmFtZXRlcnMvYWZ0ZXJDYXJldE9uTWV0aG9kLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2JpbmRGaWVsZHNGcm9tUGFyYW1ldGVycy9hZnRlckNhcmV0T25NZXRob2QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZjA2M2I2Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9iaW5kRmllbGRzRnJvbVBhcmFtZXRlcnMvYWZ0ZXJDYXJldE9uTWV0aG9kLmphdmEKQEAgLTAsMCArMSwxMiBAQAorLy8gIkJpbmQgTWV0aG9kIFBhcmFtZXRlcnMgdG8gRmllbGRzIiAidHJ1ZSIKKworY2xhc3MgQXsKKyAgICBwcml2YXRlIGludCBteVAxOworICAgIHByaXZhdGUgaW50IG15UDI7CisKKyAgICB2b2lkIG1ldGhvZChpbnQgcDEsIGludCBwMil7CisgICAgICAgIG15UDEgPSBwMTsKKyAgICAgICAgbXlQMiA9IHAyOworICAgIH0KK30KKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9iaW5kRmllbGRzRnJvbVBhcmFtZXRlcnMvYWZ0ZXJOb3ROdWxsLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2JpbmRGaWVsZHNGcm9tUGFyYW1ldGVycy9hZnRlck5vdE51bGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYmM4MTIyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9iaW5kRmllbGRzRnJvbVBhcmFtZXRlcnMvYWZ0ZXJOb3ROdWxsLmphdmEKQEAgLTAsMCArMSwxOCBAQAorLy8gIkJpbmQgQ29uc3RydWN0b3IgUGFyYW1ldGVycyB0byBGaWVsZHMiICJ0cnVlIgorCitpbXBvcnQgb3JnLmpldGJyYWlucy5hbm5vdGF0aW9ucy5Ob3ROdWxsOworaW1wb3J0IG9yZy5qZXRicmFpbnMuYW5ub3RhdGlvbnMuTnVsbGFibGU7CisKK3B1YmxpYyBjbGFzcyBUZXN0QmVmb3JlIHsKKworICAgIEBOb3ROdWxsCisgICAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgbXlOYW1lOworICAgIEBOb3ROdWxsCisgICAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgbXlOYW1lMjsKKworICAgIHB1YmxpYyBUZXN0QmVmb3JlKEBOb3ROdWxsIFN0cmluZyBuYW1lLCBATm90TnVsbCBTdHJpbmcgbmFtZTIpIHsKKyAgICAgICAgc3VwZXIoKTsKKyAgICAgICAgbXlOYW1lID0gbmFtZTsKKyAgICAgICAgbXlOYW1lMiA9IG5hbWUyOworICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvYmluZEZpZWxkc0Zyb21QYXJhbWV0ZXJzL2FmdGVyTnVsbGFibGUuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvYmluZEZpZWxkc0Zyb21QYXJhbWV0ZXJzL2FmdGVyTnVsbGFibGUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZDQ1N2YxCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9iaW5kRmllbGRzRnJvbVBhcmFtZXRlcnMvYWZ0ZXJOdWxsYWJsZS5qYXZhCkBAIC0wLDAgKzEsMTggQEAKKy8vICJCaW5kIENvbnN0cnVjdG9yIFBhcmFtZXRlcnMgdG8gRmllbGRzIiAidHJ1ZSIKKworaW1wb3J0IG9yZy5qZXRicmFpbnMuYW5ub3RhdGlvbnMuTm90TnVsbDsKK2ltcG9ydCBvcmcuamV0YnJhaW5zLmFubm90YXRpb25zLk51bGxhYmxlOworCitwdWJsaWMgY2xhc3MgVGVzdEJlZm9yZSB7CisKKyAgICBATnVsbGFibGUKKyAgICBwcml2YXRlIGZpbmFsIFN0cmluZyBteU5hbWU7CisgICAgQE51bGxhYmxlCisgICAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgbXlOYW1lMjsKKworICAgIHB1YmxpYyBUZXN0QmVmb3JlKEBOdWxsYWJsZSBTdHJpbmcgbmFtZSwgQE51bGxhYmxlIFN0cmluZyBuYW1lMikgeworICAgICAgICBzdXBlcigpOworICAgICAgICBteU5hbWUgPSBuYW1lOworICAgICAgICBteU5hbWUyID0gbmFtZTI7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9iaW5kRmllbGRzRnJvbVBhcmFtZXRlcnMvYWZ0ZXJTaW1wbGUuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvYmluZEZpZWxkc0Zyb21QYXJhbWV0ZXJzL2FmdGVyU2ltcGxlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjczYzE3NzMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2JpbmRGaWVsZHNGcm9tUGFyYW1ldGVycy9hZnRlclNpbXBsZS5qYXZhCkBAIC0wLDAgKzEsMTYgQEAKKy8vICJCaW5kIENvbnN0cnVjdG9yIFBhcmFtZXRlcnMgdG8gRmllbGRzIiAidHJ1ZSIKKworY2xhc3MgQmFyIHsKKworICAgIHByaXZhdGUgZmluYWwgaW50IG15STE7CisgICAgcHJpdmF0ZSBmaW5hbCBpbnQgbXlJMjsKKyAgICBwcml2YXRlIGZpbmFsIFN0cmluZyBteUkzOworICAgIHByaXZhdGUgaW50IG15aTE7CisgICAgcHJpdmF0ZSBpbnQgbXlpMjsKKworICAgIEJhcihpbnQgaTEsIGludCBpMiwgU3RyaW5nIGkzKSB7CisgICAgICAgIG15STEgPSBpMTsKKyAgICAgICAgbXlJMiA9IGkyOworICAgICAgICBteUkzID0gaTM7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvYmluZEZpZWxkc0Zyb21QYXJhbWV0ZXJzL2FmdGVyU2ltcGxlVHlwZVBhcmFtZXRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9iaW5kRmllbGRzRnJvbVBhcmFtZXRlcnMvYWZ0ZXJTaW1wbGVUeXBlUGFyYW1ldGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2U1Y2NmMQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvYmluZEZpZWxkc0Zyb21QYXJhbWV0ZXJzL2FmdGVyU2ltcGxlVHlwZVBhcmFtZXRlci5qYXZhCkBAIC0wLDAgKzEsMTIgQEAKKy8vICJCaW5kIE1ldGhvZCBQYXJhbWV0ZXJzIHRvIEZpZWxkcyIgInRydWUiCisKK2NsYXNzIEF7CisgICAgcHJpdmF0ZSBPYmplY3QgbXlQMTsKKyAgICBwcml2YXRlIE9iamVjdCBteVAyOworCisgICAgPFQ+IHZvaWQgZihUIHAxLCBUIHAyKXsKKyAgICAgICAgbXlQMSA9IHAxOworICAgICAgICBteVAyID0gcDI7CisgICAgfQorfQorCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2JpbmRGaWVsZHNGcm9tUGFyYW1ldGVycy9hZnRlclR5cGVQYXJhbWV0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvYmluZEZpZWxkc0Zyb21QYXJhbWV0ZXJzL2FmdGVyVHlwZVBhcmFtZXRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM1ZmI5NTQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2JpbmRGaWVsZHNGcm9tUGFyYW1ldGVycy9hZnRlclR5cGVQYXJhbWV0ZXIuamF2YQpAQCAtMCwwICsxLDEyIEBACisvLyAiQmluZCBNZXRob2QgUGFyYW1ldGVycyB0byBGaWVsZHMiICJ0cnVlIgorCitjbGFzcyBBeworICAgIHByaXZhdGUgU3RyaW5nIG15UDE7CisgICAgcHJpdmF0ZSBTdHJpbmcgbXlQMjsKKworICAgIDxUIGV4dGVuZHMgU3RyaW5nPiB2b2lkIGYoVCBwMSwgVCBwMil7CisgICAgICAgIG15UDEgPSBwMTsKKyAgICAgICAgbXlQMiA9IHAyOworICAgIH0KK30KKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9iaW5kRmllbGRzRnJvbVBhcmFtZXRlcnMvYmVmb3JlQWxyZWFkeUV4aXN0aW5nRmllbGRzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2JpbmRGaWVsZHNGcm9tUGFyYW1ldGVycy9iZWZvcmVBbHJlYWR5RXhpc3RpbmdGaWVsZHMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYWUyZTBiCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9iaW5kRmllbGRzRnJvbVBhcmFtZXRlcnMvYmVmb3JlQWxyZWFkeUV4aXN0aW5nRmllbGRzLmphdmEKQEAgLTAsMCArMSwxMSBAQAorLy8gIkJpbmQgTWV0aG9kIFBhcmFtZXRlcnMgdG8gRmllbGRzIiAidHJ1ZSIKKworY2xhc3MgQXsKKyAgICAgIHByaXZhdGUgZmluYWwgU3RyaW5nIG15UDsKKyAgICAgIHByaXZhdGUgZmluYWwgU3RyaW5nIG15TG9uZ1BhcmFtZXRlck5hbWU7CisgICAgICBwcml2YXRlIGZpbmFsIFN0cmluZyBteU5hbWU7CisgIAorICAgICAgdm9pZCA8Y2FyZXQ+ZihTdHJpbmcgcCwgU3RyaW5nIGxvbmdQYXJhbWV0ZXJOYW1lLCBTdHJpbmcgc2hvcnRQYXJhbWV0ZXJOYW1lKXsKKyAgICAgIH0KK30KKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9iaW5kRmllbGRzRnJvbVBhcmFtZXRlcnMvYmVmb3JlQ2FyZXRPbk1ldGhvZC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9iaW5kRmllbGRzRnJvbVBhcmFtZXRlcnMvYmVmb3JlQ2FyZXRPbk1ldGhvZC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcwYzdkMWMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2JpbmRGaWVsZHNGcm9tUGFyYW1ldGVycy9iZWZvcmVDYXJldE9uTWV0aG9kLmphdmEKQEAgLTAsMCArMSw3IEBACisvLyAiQmluZCBNZXRob2QgUGFyYW1ldGVycyB0byBGaWVsZHMiICJ0cnVlIgorCitjbGFzcyBBeworICAgIHZvaWQgPGNhcmV0Pm1ldGhvZChpbnQgcDEsIGludCBwMil7CisgICAgfQorfQorCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2JpbmRGaWVsZHNGcm9tUGFyYW1ldGVycy9iZWZvcmVDYXJldE9uTWV0aG9kV2l0aE9ubHlBc3NpZ25lZFBhcmFtcy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9iaW5kRmllbGRzRnJvbVBhcmFtZXRlcnMvYmVmb3JlQ2FyZXRPbk1ldGhvZFdpdGhPbmx5QXNzaWduZWRQYXJhbXMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42Y2IzYjVjCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9iaW5kRmllbGRzRnJvbVBhcmFtZXRlcnMvYmVmb3JlQ2FyZXRPbk1ldGhvZFdpdGhPbmx5QXNzaWduZWRQYXJhbXMuamF2YQpAQCAtMCwwICsxLDEwIEBACisvLyAiQmluZCBNZXRob2QgUGFyYW1ldGVycyB0byBGaWVsZHMiICJmYWxzZSIKKworY2xhc3MgQXsKKyAgICAgIHByaXZhdGUgZmluYWwgU3RyaW5nIG15UDE7CisgIAorICAgICAgdm9pZCA8Y2FyZXQ+ZihTdHJpbmcgcDEpeworICAgICAgICAgIG15UDEgPSBwMTsKKyAgICAgIH0KK30KKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9iaW5kRmllbGRzRnJvbVBhcmFtZXRlcnMvYmVmb3JlQ2FyZXRPbk1ldGhvZFdpdGhUd29Bc3NpZ25lZFBhcmFtcy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9iaW5kRmllbGRzRnJvbVBhcmFtZXRlcnMvYmVmb3JlQ2FyZXRPbk1ldGhvZFdpdGhUd29Bc3NpZ25lZFBhcmFtcy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEzM2E3YWEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2JpbmRGaWVsZHNGcm9tUGFyYW1ldGVycy9iZWZvcmVDYXJldE9uTWV0aG9kV2l0aFR3b0Fzc2lnbmVkUGFyYW1zLmphdmEKQEAgLTAsMCArMSwxMiBAQAorLy8gIkJpbmQgTWV0aG9kIFBhcmFtZXRlcnMgdG8gRmllbGRzIiAiZmFsc2UiCisKK2NsYXNzIEF7CisgICAgICBwcml2YXRlIGZpbmFsIFN0cmluZyBteVAxOworICAgICAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgbXlQMjsKKyAgCisgICAgICB2b2lkIDxjYXJldD5mKFN0cmluZyBwMSwgU3RyaW5nIHAyKXsKKyAgICAgICAgICBteVAxID0gcDE7CisgICAgICAgICAgbXlQMiA9IHAyOworICAgICAgfQorfQorCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2JpbmRGaWVsZHNGcm9tUGFyYW1ldGVycy9iZWZvcmVDYXJldE9uTWV0aG9kV2l0aG91dFBhcmFtcy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9iaW5kRmllbGRzRnJvbVBhcmFtZXRlcnMvYmVmb3JlQ2FyZXRPbk1ldGhvZFdpdGhvdXRQYXJhbXMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MDRiYWVlCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9iaW5kRmllbGRzRnJvbVBhcmFtZXRlcnMvYmVmb3JlQ2FyZXRPbk1ldGhvZFdpdGhvdXRQYXJhbXMuamF2YQpAQCAtMCwwICsxLDcgQEAKKy8vICJCaW5kIE1ldGhvZCBQYXJhbWV0ZXJzIHRvIEZpZWxkcyIgImZhbHNlIgorCitjbGFzcyBBeworICAgIHZvaWQgPGNhcmV0PmYoKXsKKyAgICB9Cit9CisKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvYmluZEZpZWxkc0Zyb21QYXJhbWV0ZXJzL2JlZm9yZU5vdE51bGwuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvYmluZEZpZWxkc0Zyb21QYXJhbWV0ZXJzL2JlZm9yZU5vdE51bGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMDRkYWI5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9iaW5kRmllbGRzRnJvbVBhcmFtZXRlcnMvYmVmb3JlTm90TnVsbC5qYXZhCkBAIC0wLDAgKzEsMTEgQEAKKy8vICJCaW5kIENvbnN0cnVjdG9yIFBhcmFtZXRlcnMgdG8gRmllbGRzIiAidHJ1ZSIKKworaW1wb3J0IG9yZy5qZXRicmFpbnMuYW5ub3RhdGlvbnMuTm90TnVsbDsKK2ltcG9ydCBvcmcuamV0YnJhaW5zLmFubm90YXRpb25zLk51bGxhYmxlOworCitwdWJsaWMgY2xhc3MgVGVzdEJlZm9yZSB7CisKKyAgICBwdWJsaWMgVGVzdEJlZm9yZShATm90TnVsbCBTdHJpbmcgbmFtZTxjYXJldD4sIEBOb3ROdWxsIFN0cmluZyBuYW1lMikgeworICAgICAgICBzdXBlcigpOworICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvYmluZEZpZWxkc0Zyb21QYXJhbWV0ZXJzL2JlZm9yZU51bGxhYmxlLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2JpbmRGaWVsZHNGcm9tUGFyYW1ldGVycy9iZWZvcmVOdWxsYWJsZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhmYjgzMDQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2JpbmRGaWVsZHNGcm9tUGFyYW1ldGVycy9iZWZvcmVOdWxsYWJsZS5qYXZhCkBAIC0wLDAgKzEsMTEgQEAKKy8vICJCaW5kIENvbnN0cnVjdG9yIFBhcmFtZXRlcnMgdG8gRmllbGRzIiAidHJ1ZSIKKworaW1wb3J0IG9yZy5qZXRicmFpbnMuYW5ub3RhdGlvbnMuTm90TnVsbDsKK2ltcG9ydCBvcmcuamV0YnJhaW5zLmFubm90YXRpb25zLk51bGxhYmxlOworCitwdWJsaWMgY2xhc3MgVGVzdEJlZm9yZSB7CisKKyAgICBwdWJsaWMgVGVzdEJlZm9yZShATnVsbGFibGUgU3RyaW5nIG5hbWU8Y2FyZXQ+LCBATnVsbGFibGUgU3RyaW5nIG5hbWUyKSB7CisgICAgICAgIHN1cGVyKCk7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9iaW5kRmllbGRzRnJvbVBhcmFtZXRlcnMvYmVmb3JlU2ltcGxlLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2JpbmRGaWVsZHNGcm9tUGFyYW1ldGVycy9iZWZvcmVTaW1wbGUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MDhkNjA2Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9iaW5kRmllbGRzRnJvbVBhcmFtZXRlcnMvYmVmb3JlU2ltcGxlLmphdmEKQEAgLTAsMCArMSwxMCBAQAorLy8gIkJpbmQgQ29uc3RydWN0b3IgUGFyYW1ldGVycyB0byBGaWVsZHMiICJ0cnVlIgorCitjbGFzcyBCYXIgeworCisgICAgcHJpdmF0ZSBpbnQgbXlpMTsKKyAgICBwcml2YXRlIGludCBteWkyOworCisgICAgQmFyKGludCA8Y2FyZXQ+aTEsIGludCBpMiwgU3RyaW5nIGkzKSB7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvYmluZEZpZWxkc0Zyb21QYXJhbWV0ZXJzL2JlZm9yZVNpbXBsZVR5cGVQYXJhbWV0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvYmluZEZpZWxkc0Zyb21QYXJhbWV0ZXJzL2JlZm9yZVNpbXBsZVR5cGVQYXJhbWV0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45Mzk5MDE0Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9iaW5kRmllbGRzRnJvbVBhcmFtZXRlcnMvYmVmb3JlU2ltcGxlVHlwZVBhcmFtZXRlci5qYXZhCkBAIC0wLDAgKzEsNyBAQAorLy8gIkJpbmQgTWV0aG9kIFBhcmFtZXRlcnMgdG8gRmllbGRzIiAidHJ1ZSIKKworY2xhc3MgQXsKKyAgICA8VD4gdm9pZCBmKFQgcDxjYXJldD4xLCBUIHAyKXsKKyAgICB9Cit9CisKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvYmluZEZpZWxkc0Zyb21QYXJhbWV0ZXJzL2JlZm9yZVR5cGVQYXJhbWV0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvYmluZEZpZWxkc0Zyb21QYXJhbWV0ZXJzL2JlZm9yZVR5cGVQYXJhbWV0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOGU3YjI1Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9iaW5kRmllbGRzRnJvbVBhcmFtZXRlcnMvYmVmb3JlVHlwZVBhcmFtZXRlci5qYXZhCkBAIC0wLDAgKzEsNyBAQAorLy8gIkJpbmQgTWV0aG9kIFBhcmFtZXRlcnMgdG8gRmllbGRzIiAidHJ1ZSIKKworY2xhc3MgQXsKKyAgICA8VCBleHRlbmRzIFN0cmluZz4gdm9pZCBmKFQgcDxjYXJldD4xLCBUIHAyKXsKKyAgICB9Cit9CisKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvYnJlYWtTdHJpbmdPbkxpbmVCcmVha3MvYWZ0ZXJBbGwuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvYnJlYWtTdHJpbmdPbkxpbmVCcmVha3MvYWZ0ZXJBbGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOTIxODY3Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9icmVha1N0cmluZ09uTGluZUJyZWFrcy9hZnRlckFsbC5qYXZhCkBAIC0wLDAgKzEsNyBAQAorLy8gIkJyZWFrIHN0cmluZyBvbiAnXG4nIiAidHJ1ZSIKKworY2xhc3MgQSB7CisgICAgU3RyaW5nIHMgPSAiSGVsbG8sXG5cciIgKworICAgICAgICAgICAgIndvcmxkXG4iICsKKyAgICAgICAgICAgICIhXG4iOworfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9icmVha1N0cmluZ09uTGluZUJyZWFrcy9iZWZvcmVBbGwuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvYnJlYWtTdHJpbmdPbkxpbmVCcmVha3MvYmVmb3JlQWxsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTg3OTYxYgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvYnJlYWtTdHJpbmdPbkxpbmVCcmVha3MvYmVmb3JlQWxsLmphdmEKQEAgLTAsMCArMSw1IEBACisvLyAiQnJlYWsgc3RyaW5nIG9uICdcbiciICJ0cnVlIgorCitjbGFzcyBBIHsKKyAgICBTdHJpbmcgcyA9ICJIZWxsbyxcblxyd29yPGNhcmV0PmxkXG4hXG4iOworfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9icmVha1N0cmluZ09uTGluZUJyZWFrcy9iZWZvcmVMYXN0U2xhc2hOLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2JyZWFrU3RyaW5nT25MaW5lQnJlYWtzL2JlZm9yZUxhc3RTbGFzaE4uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZGUyZjgzCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9icmVha1N0cmluZ09uTGluZUJyZWFrcy9iZWZvcmVMYXN0U2xhc2hOLmphdmEKQEAgLTAsMCArMSw1IEBACisvLyAiQnJlYWsgc3RyaW5nIG9uICdcbiciICJmYWxzZSIKKworY2xhc3MgQSB7CisgIFN0cmluZyBzID0gIkhlbGxvIVxuIjsKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvYnJlYWtTdHJpbmdPbkxpbmVCcmVha3MvYmVmb3JlTGFzdFNsYXNoTlNsYXNoUi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9icmVha1N0cmluZ09uTGluZUJyZWFrcy9iZWZvcmVMYXN0U2xhc2hOU2xhc2hSLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzE4YTU2MAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvYnJlYWtTdHJpbmdPbkxpbmVCcmVha3MvYmVmb3JlTGFzdFNsYXNoTlNsYXNoUi5qYXZhCkBAIC0wLDAgKzEsNSBAQAorLy8gIkJyZWFrIHN0cmluZyBvbiAnXG4nIiAiZmFsc2UiCisKK2NsYXNzIEEgeworICBTdHJpbmcgcyA9ICJIZWxsbyFcblxyIjsKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvYnJpbmdWYXJpYWJsZUludG9TY29wZS9hZnRlcjEuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvYnJpbmdWYXJpYWJsZUludG9TY29wZS9hZnRlcjEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYWRhYTM0Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9icmluZ1ZhcmlhYmxlSW50b1Njb3BlL2FmdGVyMS5qYXZhCkBAIC0wLDAgKzEsMTEgQEAKKy8vICJCcmluZyAnaW50IGknIGludG8gU2NvcGUiICJ0cnVlIgorY2xhc3MgYSB7CisgICAgdm9pZCBmb28gKCkgeworICAgICAgICBpbnQgaSA9IDA7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBpID0gMDsKKyAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIGludCBqID0gaTsKKyAgICAgICAgfQorICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2JyaW5nVmFyaWFibGVJbnRvU2NvcGUvYWZ0ZXIyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2JyaW5nVmFyaWFibGVJbnRvU2NvcGUvYWZ0ZXIyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmUwMmFiMQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvYnJpbmdWYXJpYWJsZUludG9TY29wZS9hZnRlcjIuamF2YQpAQCAtMCwwICsxLDE0IEBACisvLyAiQnJpbmcgJ2ludCBpJyBpbnRvIFNjb3BlIiAidHJ1ZSIKK2NsYXNzIGEgeworICAgIHZvaWQgZm9vIChpbnQgeSkgeworICAgICAgICBpbnQgaTsKKyAgICAgICAgd2hpbGUgKHkgIT0gMCkgeworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgaSA9IDA7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIDxjYXJldD5pID0gMDsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9icmluZ1ZhcmlhYmxlSW50b1Njb3BlL2FmdGVyMy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9icmluZ1ZhcmlhYmxlSW50b1Njb3BlL2FmdGVyMy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY3MmQxMDUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2JyaW5nVmFyaWFibGVJbnRvU2NvcGUvYWZ0ZXIzLmphdmEKQEAgLTAsMCArMSwxNCBAQAorLy8gIkJyaW5nICdpbnQgaScgaW50byBTY29wZSIgInRydWUiCitjbGFzcyBhIHsKKyAgICB2b2lkIGZvbyAoaW50IHkpIHsKKyAgICAgICAgaW50IGkgPSAwOworICAgICAgICB3aGlsZSAoeSAhPSAwKSB7CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBpID0gMDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaW50IGogPSBpOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2JyaW5nVmFyaWFibGVJbnRvU2NvcGUvYWZ0ZXI0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2JyaW5nVmFyaWFibGVJbnRvU2NvcGUvYWZ0ZXI0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDg1YjFmZgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvYnJpbmdWYXJpYWJsZUludG9TY29wZS9hZnRlcjQuamF2YQpAQCAtMCwwICsxLDExIEBACisvLyAiQnJpbmcgJ2ludCBpJyBpbnRvIFNjb3BlIiAidHJ1ZSIKK2NsYXNzIGEgeworICAgIHB1YmxpYyB2b2lkIGZvbygpIHsKKyAgICAgICAgaW50IGk7CisgICAgICAgIGlmICh0cnVlKSB7CisgICAgICAgICAgICBpID0gMDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGludCBqID0gaTsKKyAgICAgICAgfQorICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2JyaW5nVmFyaWFibGVJbnRvU2NvcGUvYWZ0ZXJGb3IuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvYnJpbmdWYXJpYWJsZUludG9TY29wZS9hZnRlckZvci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBlNDQ1ZDYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2JyaW5nVmFyaWFibGVJbnRvU2NvcGUvYWZ0ZXJGb3IuamF2YQpAQCAtMCwwICsxLDkgQEAKKy8vICJCcmluZyAnaW50IGknIGludG8gU2NvcGUiICJ0cnVlIgorY2xhc3MgYSB7CisgICAgcHVibGljIHZvaWQgZm9vKCkgeworICAgICAgICBpbnQgaTsKKyAgICAgICAgZm9yIChpID0gMDsgaSA8IDEwOyBpKyspIHsKKyAgICAgICAgfQorICAgICAgICBpID0gMDsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9icmluZ1ZhcmlhYmxlSW50b1Njb3BlL2FmdGVySW5pdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9icmluZ1ZhcmlhYmxlSW50b1Njb3BlL2FmdGVySW5pdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZmZmU2YTUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2JyaW5nVmFyaWFibGVJbnRvU2NvcGUvYWZ0ZXJJbml0LmphdmEKQEAgLTAsMCArMSwxMSBAQAorLy8gIkJyaW5nICdTdHJpbmcgY29uJyBpbnRvIFNjb3BlIiAidHJ1ZSIKK2NsYXNzIGEgeworICAgIHByaXZhdGUgdm9pZCBmZmZmKFN0cmluZyBjKSB7CisgICAgICAgIFN0cmluZyBjb24gPSBudWxsOworICAgICAgICB0cnkgeworICAgICAgICAgICAgY29uID0gbnVsbDsKKyAgICAgICAgfSBmaW5hbGx5IHsKKyAgICAgICAgICAgIGZmZmYoY29uKTsgLy8gVGhpcyBtZXRob2QgZG9lc24ndCBtaW5kIGNvbiA9PSBudWxsLgorICAgICAgICB9CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvYnJpbmdWYXJpYWJsZUludG9TY29wZS9hZnRlck11bHRpcGxlRGVjbGFyYXRpb25zLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2JyaW5nVmFyaWFibGVJbnRvU2NvcGUvYWZ0ZXJNdWx0aXBsZURlY2xhcmF0aW9ucy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEwYWIxZWYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2JyaW5nVmFyaWFibGVJbnRvU2NvcGUvYWZ0ZXJNdWx0aXBsZURlY2xhcmF0aW9ucy5qYXZhCkBAIC0wLDAgKzEsMTEgQEAKKy8vICJCcmluZyAnaW50IGonIGludG8gU2NvcGUiICJ0cnVlIgorY2xhc3MgYSB7CisgICAgdm9pZCBmb28oKSB7CisgICAgICAgIGludCBqOworICAgICAgICB7CisgICAgICAgICAgICBpbnQgaTsKKyAgICAgICAgICAgIGogPSAxMDsKKyAgICAgICAgfQorICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oPGNhcmV0PmopOyAvLyBpbnZva2UgImJyaW5nICdpbnQgaicgaW50byBzY29wZSIgcXVpY2tmaXggaGVyZQorICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2JyaW5nVmFyaWFibGVJbnRvU2NvcGUvYmVmb3JlMS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9icmluZ1ZhcmlhYmxlSW50b1Njb3BlL2JlZm9yZTEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZTkyOTA5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9icmluZ1ZhcmlhYmxlSW50b1Njb3BlL2JlZm9yZTEuamF2YQpAQCAtMCwwICsxLDEwIEBACisvLyAiQnJpbmcgJ2ludCBpJyBpbnRvIFNjb3BlIiAidHJ1ZSIKK2NsYXNzIGEgeworICAgIHZvaWQgZm9vICgpIHsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIGludCBpID0gMDsKKyAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIGludCBqID0gPGNhcmV0Pmk7CisgICAgICAgIH0KKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9icmluZ1ZhcmlhYmxlSW50b1Njb3BlL2JlZm9yZTIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvYnJpbmdWYXJpYWJsZUludG9TY29wZS9iZWZvcmUyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmNmN2UzMgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvYnJpbmdWYXJpYWJsZUludG9TY29wZS9iZWZvcmUyLmphdmEKQEAgLTAsMCArMSwxMyBAQAorLy8gIkJyaW5nICdpbnQgaScgaW50byBTY29wZSIgInRydWUiCitjbGFzcyBhIHsKKyAgICB2b2lkIGZvbyAoaW50IHkpIHsKKyAgICAgICAgd2hpbGUgKHkgIT0gMCkgeworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgZmluYWwgaW50IGkgPSAwOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICA8Y2FyZXQ+aSA9IDA7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvYnJpbmdWYXJpYWJsZUludG9TY29wZS9iZWZvcmUzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2JyaW5nVmFyaWFibGVJbnRvU2NvcGUvYmVmb3JlMy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc0MzA3ZWMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2JyaW5nVmFyaWFibGVJbnRvU2NvcGUvYmVmb3JlMy5qYXZhCkBAIC0wLDAgKzEsMTMgQEAKKy8vICJCcmluZyAnaW50IGknIGludG8gU2NvcGUiICJ0cnVlIgorY2xhc3MgYSB7CisgICAgdm9pZCBmb28gKGludCB5KSB7CisgICAgICAgIHdoaWxlICh5ICE9IDApIHsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGZpbmFsIGludCBpID0gMDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaW50IGogPSA8Y2FyZXQ+aTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9icmluZ1ZhcmlhYmxlSW50b1Njb3BlL2JlZm9yZTQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvYnJpbmdWYXJpYWJsZUludG9TY29wZS9iZWZvcmU0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmU4YTM3ZAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvYnJpbmdWYXJpYWJsZUludG9TY29wZS9iZWZvcmU0LmphdmEKQEAgLTAsMCArMSwxMCBAQAorLy8gIkJyaW5nICdpbnQgaScgaW50byBTY29wZSIgInRydWUiCitjbGFzcyBhIHsKKyAgICBwdWJsaWMgdm9pZCBmb28oKSB7CisgICAgICAgIGlmICh0cnVlKSB7CisgICAgICAgICAgICBpbnQgaSA9IDA7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpbnQgaiA9IDxjYXJldD5pOworICAgICAgICB9CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvYnJpbmdWYXJpYWJsZUludG9TY29wZS9iZWZvcmVGb3IuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvYnJpbmdWYXJpYWJsZUludG9TY29wZS9iZWZvcmVGb3IuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45Y2I5MTZlCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9icmluZ1ZhcmlhYmxlSW50b1Njb3BlL2JlZm9yZUZvci5qYXZhCkBAIC0wLDAgKzEsNyBAQAorLy8gIkJyaW5nICdpbnQgaScgaW50byBTY29wZSIgInRydWUiCitjbGFzcyBhIHsKKyAgICBwdWJsaWMgdm9pZCBmb28oKSB7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMTA7IGkrKykgeyAgfQorICAgICAgICA8Y2FyZXQ+aSA9IDA7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvYnJpbmdWYXJpYWJsZUludG9TY29wZS9iZWZvcmVJbml0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2JyaW5nVmFyaWFibGVJbnRvU2NvcGUvYmVmb3JlSW5pdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcwMTZmM2QKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2JyaW5nVmFyaWFibGVJbnRvU2NvcGUvYmVmb3JlSW5pdC5qYXZhCkBAIC0wLDAgKzEsOSBAQAorLy8gIkJyaW5nICdTdHJpbmcgY29uJyBpbnRvIFNjb3BlIiAidHJ1ZSIKK2NsYXNzIGEgeworICAgIHByaXZhdGUgdm9pZCBmZmZmKFN0cmluZyBjKXsKKyAgICAgICAgdHJ5IHsgU3RyaW5nIGNvbiA9IG51bGw7ICB9CisgICAgICAgIGZpbmFsbHkgeworICAgICAgICAgICAgZmZmZig8Y2FyZXQ+Y29uKTsgLy8gVGhpcyBtZXRob2QgZG9lc24ndCBtaW5kIGNvbiA9PSBudWxsLgorICAgICAgICB9CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvYnJpbmdWYXJpYWJsZUludG9TY29wZS9iZWZvcmVNdWx0aXBsZURlY2xhcmF0aW9ucy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9icmluZ1ZhcmlhYmxlSW50b1Njb3BlL2JlZm9yZU11bHRpcGxlRGVjbGFyYXRpb25zLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGFhOWU3MWYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2JyaW5nVmFyaWFibGVJbnRvU2NvcGUvYmVmb3JlTXVsdGlwbGVEZWNsYXJhdGlvbnMuamF2YQpAQCAtMCwwICsxLDkgQEAKKy8vICJCcmluZyAnaW50IGonIGludG8gU2NvcGUiICJ0cnVlIgorY2xhc3MgYSB7CisgICAgdm9pZCBmb28oKSB7CisgICAgeworICAgICAgaW50IGksIGogPSAxMDsKKyAgICB9CisgICAgU3lzdGVtLm91dC5wcmludGxuKDxjYXJldD5qKTsgLy8gaW52b2tlICJicmluZyAnaW50IGonIGludG8gc2NvcGUiIHF1aWNrZml4IGhlcmUKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY2FzdENvbnN0cnVjdG9yUGFyYW1ldGVycy9hZnRlcjEuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY2FzdENvbnN0cnVjdG9yUGFyYW1ldGVycy9hZnRlcjEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMmMzMmE5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jYXN0Q29uc3RydWN0b3JQYXJhbWV0ZXJzL2FmdGVyMS5qYXZhCkBAIC0wLDAgKzEsMTEgQEAKKy8vICJDYXN0IHBhcmFtZXRlciB0byAnYSciICJ0cnVlIgorY2xhc3MgeCB7fQorY2xhc3MgYSBleHRlbmRzIHggeworICAgIGEoYSBhKSB7fQorICAgIGEoeCB4KSB7fQorCisgICAgdm9pZCBmKFJ1bm5hYmxlIHIpIHsKKyAgICAgICAgbmV3IGEoPGNhcmV0PihhKSByKTsKKyAgICB9Cit9CisKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY2FzdENvbnN0cnVjdG9yUGFyYW1ldGVycy9hZnRlcjIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY2FzdENvbnN0cnVjdG9yUGFyYW1ldGVycy9hZnRlcjIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45Mjg0ZWFiCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jYXN0Q29uc3RydWN0b3JQYXJhbWV0ZXJzL2FmdGVyMi5qYXZhCkBAIC0wLDAgKzEsMTEgQEAKKy8vICJDYXN0IHBhcmFtZXRlciB0byAneCciICJ0cnVlIgorY2xhc3MgeCB7fQorY2xhc3MgYSBleHRlbmRzIHggeworICAgIGEoYSBhKSB7fQorICAgIGEoeCB4KSB7fQorCisgICAgdm9pZCBmKFJ1bm5hYmxlIHIpIHsKKyAgICAgICAgbmV3IGEoPGNhcmV0Pih4KSByKTsKKyAgICB9Cit9CisKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY2FzdENvbnN0cnVjdG9yUGFyYW1ldGVycy9hZnRlcjMuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY2FzdENvbnN0cnVjdG9yUGFyYW1ldGVycy9hZnRlcjMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMTYwMTk3Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jYXN0Q29uc3RydWN0b3JQYXJhbWV0ZXJzL2FmdGVyMy5qYXZhCkBAIC0wLDAgKzEsMTMgQEAKKy8vICJDYXN0IDFzdCBwYXJhbWV0ZXIgdG8gJ2RvdWJsZSciICJ0cnVlIgorY2xhc3MgeCB7fQorY2xhc3MgYSBleHRlbmRzIHggeworICAgIGEoYSBhKSB7fQorICAgIGEoeCB4KSB7fQorICAgIGEoaW50IGksIGRvdWJsZSBkKSB7fQorICAgIGEoZG91YmxlIGQsIGludCBpKSB7fQorCisgICAgdm9pZCBmKFJ1bm5hYmxlIHIpIHsKKyAgICAgICAgbmV3IGEoPGNhcmV0Pihkb3VibGUpIDEsIDEpOworICAgIH0KK30KKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jYXN0Q29uc3RydWN0b3JQYXJhbWV0ZXJzL2FmdGVyNC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jYXN0Q29uc3RydWN0b3JQYXJhbWV0ZXJzL2FmdGVyNC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcwMTMzNTcKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2Nhc3RDb25zdHJ1Y3RvclBhcmFtZXRlcnMvYWZ0ZXI0LmphdmEKQEAgLTAsMCArMSwxMyBAQAorLy8gIkNhc3QgMm5kIHBhcmFtZXRlciB0byAnZG91YmxlJyIgInRydWUiCitjbGFzcyB4IHt9CitjbGFzcyBhIGV4dGVuZHMgeCB7CisgICAgYShhIGEpIHt9CisgICAgYSh4IHgpIHt9CisgICAgYShpbnQgaSwgZG91YmxlIGQpIHt9CisgICAgYShkb3VibGUgZCwgaW50IGkpIHt9CisKKyAgICB2b2lkIGYoUnVubmFibGUgcikgeworICAgICAgICBuZXcgYSg8Y2FyZXQ+MSwgKGRvdWJsZSkgMSk7CisgICAgfQorfQorCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2Nhc3RDb25zdHJ1Y3RvclBhcmFtZXRlcnMvYWZ0ZXI1LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2Nhc3RDb25zdHJ1Y3RvclBhcmFtZXRlcnMvYWZ0ZXI1LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjI1ZWYzZAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY2FzdENvbnN0cnVjdG9yUGFyYW1ldGVycy9hZnRlcjUuamF2YQpAQCAtMCwwICsxLDE5IEBACisvLyAiQ2FzdCBwYXJhbWV0ZXIgdG8gJ0dlbmVyYWxUZXN0LkInIiAidHJ1ZSIKK2ltcG9ydCBqYXZhLnV0aWwuKjsKK2NsYXNzIEdlbmVyYWxUZXN0IHsKKyAgICBzdGF0aWMgY2xhc3MgQiB7CisKKyAgICB9CisgICAgc3RhdGljIGNsYXNzIEEgeworICAgICAgICBBKEIgYikgeworICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKGIpOworICAgICAgICB9CisgICAgfQorICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKyAgICAgICAgTGlzdCBhID0gbmV3IEFycmF5TGlzdCgpOworICAgICAgICBuZXcgQSgoQikgYS5nZXQoMCkpPGNhcmV0PiB7ICAgCisKKyAgICAgICAgfTsKKyAgICB9Cit9CisKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY2FzdENvbnN0cnVjdG9yUGFyYW1ldGVycy9iZWZvcmUxLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2Nhc3RDb25zdHJ1Y3RvclBhcmFtZXRlcnMvYmVmb3JlMS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQxYmE1MzMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2Nhc3RDb25zdHJ1Y3RvclBhcmFtZXRlcnMvYmVmb3JlMS5qYXZhCkBAIC0wLDAgKzEsMTEgQEAKKy8vICJDYXN0IHBhcmFtZXRlciB0byAnYSciICJ0cnVlIgorY2xhc3MgeCB7fQorY2xhc3MgYSBleHRlbmRzIHggeworICAgIGEoYSBhKSB7fQorICAgIGEoeCB4KSB7fQorCisgICAgdm9pZCBmKFJ1bm5hYmxlIHIpIHsKKyAgICAgICAgbmV3IGEoPGNhcmV0PnIpOworICAgIH0KK30KKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jYXN0Q29uc3RydWN0b3JQYXJhbWV0ZXJzL2JlZm9yZTIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY2FzdENvbnN0cnVjdG9yUGFyYW1ldGVycy9iZWZvcmUyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2Q4YjM5ZAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY2FzdENvbnN0cnVjdG9yUGFyYW1ldGVycy9iZWZvcmUyLmphdmEKQEAgLTAsMCArMSwxMSBAQAorLy8gIkNhc3QgcGFyYW1ldGVyIHRvICd4JyIgInRydWUiCitjbGFzcyB4IHt9CitjbGFzcyBhIGV4dGVuZHMgeCB7CisgICAgYShhIGEpIHt9CisgICAgYSh4IHgpIHt9CisKKyAgICB2b2lkIGYoUnVubmFibGUgcikgeworICAgICAgICBuZXcgYSg8Y2FyZXQ+cik7CisgICAgfQorfQorCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2Nhc3RDb25zdHJ1Y3RvclBhcmFtZXRlcnMvYmVmb3JlMy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jYXN0Q29uc3RydWN0b3JQYXJhbWV0ZXJzL2JlZm9yZTMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YTVmOTg2Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jYXN0Q29uc3RydWN0b3JQYXJhbWV0ZXJzL2JlZm9yZTMuamF2YQpAQCAtMCwwICsxLDEzIEBACisvLyAiQ2FzdCAxc3QgcGFyYW1ldGVyIHRvICdkb3VibGUnIiAidHJ1ZSIKK2NsYXNzIHgge30KK2NsYXNzIGEgZXh0ZW5kcyB4IHsKKyAgICBhKGEgYSkge30KKyAgICBhKHggeCkge30KKyAgICBhKGludCBpLCBkb3VibGUgZCkge30KKyAgICBhKGRvdWJsZSBkLCBpbnQgaSkge30KKworICAgIHZvaWQgZihSdW5uYWJsZSByKSB7CisgICAgICAgIG5ldyBhKDxjYXJldD4xLCAxKTsKKyAgICB9Cit9CisKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY2FzdENvbnN0cnVjdG9yUGFyYW1ldGVycy9iZWZvcmU0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2Nhc3RDb25zdHJ1Y3RvclBhcmFtZXRlcnMvYmVmb3JlNC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE4MGJkN2UKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2Nhc3RDb25zdHJ1Y3RvclBhcmFtZXRlcnMvYmVmb3JlNC5qYXZhCkBAIC0wLDAgKzEsMTMgQEAKKy8vICJDYXN0IDJuZCBwYXJhbWV0ZXIgdG8gJ2RvdWJsZSciICJ0cnVlIgorY2xhc3MgeCB7fQorY2xhc3MgYSBleHRlbmRzIHggeworICAgIGEoYSBhKSB7fQorICAgIGEoeCB4KSB7fQorICAgIGEoaW50IGksIGRvdWJsZSBkKSB7fQorICAgIGEoZG91YmxlIGQsIGludCBpKSB7fQorCisgICAgdm9pZCBmKFJ1bm5hYmxlIHIpIHsKKyAgICAgICAgbmV3IGEoPGNhcmV0PjEsIDEpOworICAgIH0KK30KKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jYXN0Q29uc3RydWN0b3JQYXJhbWV0ZXJzL2JlZm9yZTUuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY2FzdENvbnN0cnVjdG9yUGFyYW1ldGVycy9iZWZvcmU1LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTU2Y2ZkZgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY2FzdENvbnN0cnVjdG9yUGFyYW1ldGVycy9iZWZvcmU1LmphdmEKQEAgLTAsMCArMSwxOSBAQAorLy8gIkNhc3QgcGFyYW1ldGVyIHRvICdHZW5lcmFsVGVzdC5CJyIgInRydWUiCitpbXBvcnQgamF2YS51dGlsLio7CitjbGFzcyBHZW5lcmFsVGVzdCB7CisgICAgc3RhdGljIGNsYXNzIEIgeworCisgICAgfQorICAgIHN0YXRpYyBjbGFzcyBBIHsKKyAgICAgICAgQShCIGIpIHsKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihiKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisgICAgICAgIExpc3QgYSA9IG5ldyBBcnJheUxpc3QoKTsKKyAgICAgICAgbmV3IEEoYS5nZXQoMCkpPGNhcmV0PiB7ICAgCisKKyAgICAgICAgfTsKKyAgICB9Cit9CisKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY2FzdE1ldGhvZFBhcmFtZXRlcnMvYWZ0ZXIxLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2Nhc3RNZXRob2RQYXJhbWV0ZXJzL2FmdGVyMS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ5NjQyZmMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2Nhc3RNZXRob2RQYXJhbWV0ZXJzL2FmdGVyMS5qYXZhCkBAIC0wLDAgKzEsMTMgQEAKKy8vICJDYXN0IHBhcmFtZXRlciB0byAnaW50JyIgInRydWUiCitjbGFzcyBhIHsKKyAgICBwcml2YXRlIHZvaWQgdGVzdCgpICB7fQorICAgIHByaXZhdGUgdm9pZCB0ZXN0KGludCBpKSAge30KKyAgICBwcml2YXRlIHZvaWQgdGVzdChTdHJpbmcgcykgIHt9CisgICAgcHJpdmF0ZSB2b2lkIHRlc3QoT2JqZWN0IG8pICB7fQorICAgIHByaXZhdGUgdm9pZCB0ZXN0KGNoYXIgYyxjaGFyIGYpICB7fQorCisgICAgdm9pZCBmKCkgeworICAgICAgICB0ZXN0KDxjYXJldD4oaW50KSAyLjIpOworICAgIH0KK30KKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jYXN0TWV0aG9kUGFyYW1ldGVycy9hZnRlcjIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY2FzdE1ldGhvZFBhcmFtZXRlcnMvYWZ0ZXIyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWU3ZmY5ZAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY2FzdE1ldGhvZFBhcmFtZXRlcnMvYWZ0ZXIyLmphdmEKQEAgLTAsMCArMSwxMyBAQAorLy8gIkNhc3QgMXN0IHBhcmFtZXRlciB0byAnY2hhciciICJ0cnVlIgorY2xhc3MgYSB7CisgICAgcHJpdmF0ZSB2b2lkIHRlc3QoKSAge30KKyAgICBwcml2YXRlIHZvaWQgdGVzdChpbnQgaSkgIHt9CisgICAgcHJpdmF0ZSB2b2lkIHRlc3QoU3RyaW5nIHMpICB7fQorICAgIHByaXZhdGUgdm9pZCB0ZXN0KE9iamVjdCBvKSAge30KKyAgICBwcml2YXRlIHZvaWQgdGVzdChjaGFyIGMsY2hhciBmKSAge30KKworICAgIHZvaWQgZigpIHsKKyAgICAgICAgdGVzdCg8Y2FyZXQ+KGNoYXIpIDIuMiwgJ2QnKTsKKyAgICB9Cit9CisKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY2FzdE1ldGhvZFBhcmFtZXRlcnMvYWZ0ZXIzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2Nhc3RNZXRob2RQYXJhbWV0ZXJzL2FmdGVyMy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE1MTYzY2QKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2Nhc3RNZXRob2RQYXJhbWV0ZXJzL2FmdGVyMy5qYXZhCkBAIC0wLDAgKzEsMTMgQEAKKy8vICJDYXN0IDJuZCBwYXJhbWV0ZXIgdG8gJ2NoYXInIiAidHJ1ZSIKK2NsYXNzIGEgeworICAgIHByaXZhdGUgdm9pZCB0ZXN0KCkgIHt9CisgICAgcHJpdmF0ZSB2b2lkIHRlc3QoaW50IGkpICB7fQorICAgIHByaXZhdGUgdm9pZCB0ZXN0KFN0cmluZyBzKSAge30KKyAgICBwcml2YXRlIHZvaWQgdGVzdChPYmplY3QgbykgIHt9CisgICAgcHJpdmF0ZSB2b2lkIHRlc3QoY2hhciBjLGNoYXIgZikgIHt9CisKKyAgICB2b2lkIGYoKSB7CisgICAgICAgIHRlc3QoPGNhcmV0PidkJywgKGNoYXIpIDApOworICAgIH0KK30KKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jYXN0TWV0aG9kUGFyYW1ldGVycy9hZnRlcjUuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY2FzdE1ldGhvZFBhcmFtZXRlcnMvYWZ0ZXI1LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGVlN2M2MQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY2FzdE1ldGhvZFBhcmFtZXRlcnMvYWZ0ZXI1LmphdmEKQEAgLTAsMCArMSwxNCBAQAorLy8gIkNhc3QgMXN0IHBhcmFtZXRlciB0byAnZG91YmxlJyIgInRydWUiCitjbGFzcyBhIHsKKyAgICB2b2lkIHRlc3QoKSAge30KKyAgICB2b2lkIHRlc3QoaW50IGkpICB7fQorICAgIHZvaWQgdGVzdChTdHJpbmcgcykgIHt9CisgICAgdm9pZCB0ZXN0KE9iamVjdCBvKSAge30KKyAgICB2b2lkIHRlc3QoaW50IGksZG91YmxlIGQpICB7fQorICAgIHZvaWQgdGVzdChkb3VibGUgZCxpbnQgaSkgIHt9CisKKyAgICB2b2lkIGYoKSB7CisgICAgICAgIHRlc3QoPGNhcmV0Pihkb3VibGUpIDAsIDApOworICAgIH0KK30KKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jYXN0TWV0aG9kUGFyYW1ldGVycy9hZnRlcjYuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY2FzdE1ldGhvZFBhcmFtZXRlcnMvYWZ0ZXI2LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjc3ZWEzZAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY2FzdE1ldGhvZFBhcmFtZXRlcnMvYWZ0ZXI2LmphdmEKQEAgLTAsMCArMSwxNCBAQAorLy8gIkNhc3QgMm5kIHBhcmFtZXRlciB0byAnZG91YmxlJyIgInRydWUiCitjbGFzcyBhIHsKKyAgICB2b2lkIHRlc3QoKSAge30KKyAgICB2b2lkIHRlc3QoaW50IGkpICB7fQorICAgIHZvaWQgdGVzdChTdHJpbmcgcykgIHt9CisgICAgdm9pZCB0ZXN0KE9iamVjdCBvKSAge30KKyAgICB2b2lkIHRlc3QoaW50IGksZG91YmxlIGQpICB7fQorICAgIHZvaWQgdGVzdChkb3VibGUgZCxpbnQgaSkgIHt9CisKKyAgICB2b2lkIGYoKSB7CisgICAgICAgIHRlc3QoPGNhcmV0PjAsIChkb3VibGUpIDApOworICAgIH0KK30KKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jYXN0TWV0aG9kUGFyYW1ldGVycy9hZnRlcjcuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY2FzdE1ldGhvZFBhcmFtZXRlcnMvYWZ0ZXI3LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzU1N2FiNQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY2FzdE1ldGhvZFBhcmFtZXRlcnMvYWZ0ZXI3LmphdmEKQEAgLTAsMCArMSwxNCBAQAorLy8gIkNhc3QgcGFyYW1ldGVyIHRvICdhJyIgInRydWUiCitjbGFzcyBhIHsKKyAgICB2b2lkIHRlc3QoKSAge30KKyAgICB2b2lkIHRlc3QoaW50IGkpICB7fQorICAgIHZvaWQgdGVzdChTdHJpbmcgcykgIHt9CisgICAgdm9pZCB0ZXN0KGEgbykgIHt9CisgICAgdm9pZCB0ZXN0KGludCBpLGRvdWJsZSBkKSAge30KKyAgICB2b2lkIHRlc3QoZG91YmxlIGQsaW50IGkpICB7fQorCisgICAgdm9pZCBmKFJ1bm5hYmxlIHIpIHsKKyAgICAgICAgdGVzdCg8Y2FyZXQ+KGEpIHIpOworICAgIH0KK30KKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jYXN0TWV0aG9kUGFyYW1ldGVycy9hZnRlcjguamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY2FzdE1ldGhvZFBhcmFtZXRlcnMvYWZ0ZXI4LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWRiZjg3ZgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY2FzdE1ldGhvZFBhcmFtZXRlcnMvYWZ0ZXI4LmphdmEKQEAgLTAsMCArMSwxMCBAQAorLy8gIkNhc3QgMm5kIHBhcmFtZXRlciB0byAnamF2YS5sYW5nLlRocm93YWJsZSciICJ0cnVlIgorY2xhc3MgYSB7CisgICAgdm9pZCBmKFRocm93YWJsZSBhLCBUaHJvd2FibGUgYikge30KKyAgICB2b2lkIGcoKSB7CisgICAgICAgIEV4Y2VwdGlvbiBlPW51bGw7CisgICAgICAgIE9iamVjdCBvID0gbnVsbDsKKyAgICAgICAgZig8Y2FyZXQ+ZSwgKFRocm93YWJsZSkgbyk7CisgICAgfQorfQorCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2Nhc3RNZXRob2RQYXJhbWV0ZXJzL2JlZm9yZTEuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY2FzdE1ldGhvZFBhcmFtZXRlcnMvYmVmb3JlMS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZhMDQ5MTRiCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jYXN0TWV0aG9kUGFyYW1ldGVycy9iZWZvcmUxLmphdmEKQEAgLTAsMCArMSwxMyBAQAorLy8gIkNhc3QgcGFyYW1ldGVyIHRvICdpbnQnIiAidHJ1ZSIKK2NsYXNzIGEgeworICAgIHByaXZhdGUgdm9pZCB0ZXN0KCkgIHt9CisgICAgcHJpdmF0ZSB2b2lkIHRlc3QoaW50IGkpICB7fQorICAgIHByaXZhdGUgdm9pZCB0ZXN0KFN0cmluZyBzKSAge30KKyAgICBwcml2YXRlIHZvaWQgdGVzdChPYmplY3QgbykgIHt9CisgICAgcHJpdmF0ZSB2b2lkIHRlc3QoY2hhciBjLGNoYXIgZikgIHt9CisKKyAgICB2b2lkIGYoKSB7CisgICAgICAgIHRlc3QoPGNhcmV0PjIuMik7CisgICAgfQorfQorCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2Nhc3RNZXRob2RQYXJhbWV0ZXJzL2JlZm9yZTIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY2FzdE1ldGhvZFBhcmFtZXRlcnMvYmVmb3JlMi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc1ZGRjNWQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2Nhc3RNZXRob2RQYXJhbWV0ZXJzL2JlZm9yZTIuamF2YQpAQCAtMCwwICsxLDEzIEBACisvLyAiQ2FzdCAxc3QgcGFyYW1ldGVyIHRvICdjaGFyJyIgInRydWUiCitjbGFzcyBhIHsKKyAgICBwcml2YXRlIHZvaWQgdGVzdCgpICB7fQorICAgIHByaXZhdGUgdm9pZCB0ZXN0KGludCBpKSAge30KKyAgICBwcml2YXRlIHZvaWQgdGVzdChTdHJpbmcgcykgIHt9CisgICAgcHJpdmF0ZSB2b2lkIHRlc3QoT2JqZWN0IG8pICB7fQorICAgIHByaXZhdGUgdm9pZCB0ZXN0KGNoYXIgYyxjaGFyIGYpICB7fQorCisgICAgdm9pZCBmKCkgeworICAgICAgICB0ZXN0KDxjYXJldD4yLjIsICdkJyk7CisgICAgfQorfQorCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2Nhc3RNZXRob2RQYXJhbWV0ZXJzL2JlZm9yZTMuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY2FzdE1ldGhvZFBhcmFtZXRlcnMvYmVmb3JlMy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhmMTQxOTkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2Nhc3RNZXRob2RQYXJhbWV0ZXJzL2JlZm9yZTMuamF2YQpAQCAtMCwwICsxLDEzIEBACisvLyAiQ2FzdCAybmQgcGFyYW1ldGVyIHRvICdjaGFyJyIgInRydWUiCitjbGFzcyBhIHsKKyAgICBwcml2YXRlIHZvaWQgdGVzdCgpICB7fQorICAgIHByaXZhdGUgdm9pZCB0ZXN0KGludCBpKSAge30KKyAgICBwcml2YXRlIHZvaWQgdGVzdChTdHJpbmcgcykgIHt9CisgICAgcHJpdmF0ZSB2b2lkIHRlc3QoT2JqZWN0IG8pICB7fQorICAgIHByaXZhdGUgdm9pZCB0ZXN0KGNoYXIgYyxjaGFyIGYpICB7fQorCisgICAgdm9pZCBmKCkgeworICAgICAgICB0ZXN0KDxjYXJldD4nZCcsIDApOworICAgIH0KK30KKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jYXN0TWV0aG9kUGFyYW1ldGVycy9iZWZvcmU0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2Nhc3RNZXRob2RQYXJhbWV0ZXJzL2JlZm9yZTQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZjY5MTQ4Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jYXN0TWV0aG9kUGFyYW1ldGVycy9iZWZvcmU0LmphdmEKQEAgLTAsMCArMSwxNCBAQAorLy8gIkNhc3QgMXN0IHBhcmFtZXRlciB0byAnY2hhciciICJmYWxzZSIKK2NsYXNzIGEgeworICAgIHByaXZhdGUgdm9pZCB0ZXN0KCkgIHt9CisgICAgcHJpdmF0ZSB2b2lkIHRlc3QoaW50IGkpICB7fQorICAgIHByaXZhdGUgdm9pZCB0ZXN0KFN0cmluZyBzKSAge30KKyAgICBwcml2YXRlIHZvaWQgdGVzdChPYmplY3QgbykgIHt9CisgICAgcHJpdmF0ZSB2b2lkIHRlc3QoY2hhciBjLGNoYXIgZikgIHt9CisgICAgcHJpdmF0ZSB2b2lkIHRlc3QoaW50IGMsIGNoYXIgZikgIHt9CisKKyAgICB2b2lkIGYoKSB7CisgICAgICAgIHRlc3QoPGNhcmV0PjAsIDApOworICAgIH0KK30KKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jYXN0TWV0aG9kUGFyYW1ldGVycy9iZWZvcmU1LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2Nhc3RNZXRob2RQYXJhbWV0ZXJzL2JlZm9yZTUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZTYxZGVjCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jYXN0TWV0aG9kUGFyYW1ldGVycy9iZWZvcmU1LmphdmEKQEAgLTAsMCArMSwxNCBAQAorLy8gIkNhc3QgMXN0IHBhcmFtZXRlciB0byAnZG91YmxlJyIgInRydWUiCitjbGFzcyBhIHsKKyAgICB2b2lkIHRlc3QoKSAge30KKyAgICB2b2lkIHRlc3QoaW50IGkpICB7fQorICAgIHZvaWQgdGVzdChTdHJpbmcgcykgIHt9CisgICAgdm9pZCB0ZXN0KE9iamVjdCBvKSAge30KKyAgICB2b2lkIHRlc3QoaW50IGksZG91YmxlIGQpICB7fQorICAgIHZvaWQgdGVzdChkb3VibGUgZCxpbnQgaSkgIHt9CisKKyAgICB2b2lkIGYoKSB7CisgICAgICAgIHRlc3QoPGNhcmV0PjAsIDApOworICAgIH0KK30KKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jYXN0TWV0aG9kUGFyYW1ldGVycy9iZWZvcmU2LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2Nhc3RNZXRob2RQYXJhbWV0ZXJzL2JlZm9yZTYuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZWJmMDJkCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jYXN0TWV0aG9kUGFyYW1ldGVycy9iZWZvcmU2LmphdmEKQEAgLTAsMCArMSwxNCBAQAorLy8gIkNhc3QgMm5kIHBhcmFtZXRlciB0byAnZG91YmxlJyIgInRydWUiCitjbGFzcyBhIHsKKyAgICB2b2lkIHRlc3QoKSAge30KKyAgICB2b2lkIHRlc3QoaW50IGkpICB7fQorICAgIHZvaWQgdGVzdChTdHJpbmcgcykgIHt9CisgICAgdm9pZCB0ZXN0KE9iamVjdCBvKSAge30KKyAgICB2b2lkIHRlc3QoaW50IGksZG91YmxlIGQpICB7fQorICAgIHZvaWQgdGVzdChkb3VibGUgZCxpbnQgaSkgIHt9CisKKyAgICB2b2lkIGYoKSB7CisgICAgICAgIHRlc3QoPGNhcmV0PjAsIDApOworICAgIH0KK30KKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jYXN0TWV0aG9kUGFyYW1ldGVycy9iZWZvcmU3LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2Nhc3RNZXRob2RQYXJhbWV0ZXJzL2JlZm9yZTcuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MjIxY2FjCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jYXN0TWV0aG9kUGFyYW1ldGVycy9iZWZvcmU3LmphdmEKQEAgLTAsMCArMSwxNCBAQAorLy8gIkNhc3QgcGFyYW1ldGVyIHRvICdhJyIgInRydWUiCitjbGFzcyBhIHsKKyAgICB2b2lkIHRlc3QoKSAge30KKyAgICB2b2lkIHRlc3QoaW50IGkpICB7fQorICAgIHZvaWQgdGVzdChTdHJpbmcgcykgIHt9CisgICAgdm9pZCB0ZXN0KGEgbykgIHt9CisgICAgdm9pZCB0ZXN0KGludCBpLGRvdWJsZSBkKSAge30KKyAgICB2b2lkIHRlc3QoZG91YmxlIGQsaW50IGkpICB7fQorCisgICAgdm9pZCBmKFJ1bm5hYmxlIHIpIHsKKyAgICAgICAgdGVzdCg8Y2FyZXQ+cik7CisgICAgfQorfQorCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2Nhc3RNZXRob2RQYXJhbWV0ZXJzL2JlZm9yZTguamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY2FzdE1ldGhvZFBhcmFtZXRlcnMvYmVmb3JlOC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA1Y2YzNmQ1Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jYXN0TWV0aG9kUGFyYW1ldGVycy9iZWZvcmU4LmphdmEKQEAgLTAsMCArMSwxMCBAQAorLy8gIkNhc3QgMm5kIHBhcmFtZXRlciB0byAnamF2YS5sYW5nLlRocm93YWJsZSciICJ0cnVlIgorY2xhc3MgYSB7CisgICAgdm9pZCBmKFRocm93YWJsZSBhLCBUaHJvd2FibGUgYikge30KKyAgICB2b2lkIGcoKSB7CisgICAgICAgIEV4Y2VwdGlvbiBlPW51bGw7CisgICAgICAgIE9iamVjdCBvID0gbnVsbDsKKyAgICAgICAgZig8Y2FyZXQ+ZSxvKTsKKyAgICB9Cit9CisKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY2FzdE1ldGhvZFBhcmFtZXRlcnMvYmVmb3JlOS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jYXN0TWV0aG9kUGFyYW1ldGVycy9iZWZvcmU5LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzQxMmIzYgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY2FzdE1ldGhvZFBhcmFtZXRlcnMvYmVmb3JlOS5qYXZhCkBAIC0wLDAgKzEsMTAgQEAKKy8vICJDYXN0IDFzdCBwYXJhbWV0ZXIgdG8gJ2phdmEubGFuZy5UaHJvd2FibGUnIiAiZmFsc2UiCitjbGFzcyBhIHsKKyAgICB2b2lkIGYoVGhyb3dhYmxlIGEsIFRocm93YWJsZSBiKSB7fQorICAgIHZvaWQgZygpIHsKKyAgICAgICAgRXhjZXB0aW9uIGU9bnVsbDsKKyAgICAgICAgT2JqZWN0IG8gPSBudWxsOworICAgICAgICBmKDxjYXJldD5lLG8pOworICAgIH0KK30KKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jaGFuZ2VFeHRlbmRzVG9JbXBsZW1lbnRzL2FmdGVyMS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jaGFuZ2VFeHRlbmRzVG9JbXBsZW1lbnRzL2FmdGVyMS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE0MmJlMTIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NoYW5nZUV4dGVuZHNUb0ltcGxlbWVudHMvYWZ0ZXIxLmphdmEKQEAgLTAsMCArMSw4IEBACisvLyAiQ2hhbmdlICdleHRlbmRzIFJ1bm5hYmxlJyB0byAnaW1wbGVtZW50cyBSdW5uYWJsZSciICJ0cnVlIgoraW1wb3J0IGphdmEuaW8uKjsKKworY2xhc3MgYSA8Y2FyZXQ+aW1wbGVtZW50cyBSdW5uYWJsZSB7CisgcHVibGljIHZvaWQgcnVuKCkgeworIH0KK30KKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jaGFuZ2VFeHRlbmRzVG9JbXBsZW1lbnRzL2FmdGVyMi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jaGFuZ2VFeHRlbmRzVG9JbXBsZW1lbnRzL2FmdGVyMi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk4M2FmZTkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NoYW5nZUV4dGVuZHNUb0ltcGxlbWVudHMvYWZ0ZXIyLmphdmEKQEAgLTAsMCArMSw4IEBACisvLyAiQ2hhbmdlICdpbXBsZW1lbnRzIE9iamVjdCcgdG8gJ2V4dGVuZHMgT2JqZWN0JyIgInRydWUiCitpbXBvcnQgamF2YS5pby4qOworCitjbGFzcyBhIGV4dGVuZHMgT2JqZWN0IDxjYXJldD57CisgcHVibGljIHZvaWQgcnVuKCkgeworIH0KK30KKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jaGFuZ2VFeHRlbmRzVG9JbXBsZW1lbnRzL2FmdGVyMy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jaGFuZ2VFeHRlbmRzVG9JbXBsZW1lbnRzL2FmdGVyMy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIzNjEwZmQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NoYW5nZUV4dGVuZHNUb0ltcGxlbWVudHMvYWZ0ZXIzLmphdmEKQEAgLTAsMCArMSw4IEBACisvLyAiQ2hhbmdlICdpbXBsZW1lbnRzIE9iamVjdCcgdG8gJ2V4dGVuZHMgT2JqZWN0JyIgInRydWUiCitpbXBvcnQgamF2YS5pby4qOworCitjbGFzcyBhIGV4dGVuZHMgT2JqZWN0IGltcGxlbWVudHMgUnVubmFibGUsPGNhcmV0PiBTZXJpYWxpemFibGUgeworIHB1YmxpYyB2b2lkIHJ1bigpIHsKKyB9Cit9CisKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY2hhbmdlRXh0ZW5kc1RvSW1wbGVtZW50cy9hZnRlcjQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY2hhbmdlRXh0ZW5kc1RvSW1wbGVtZW50cy9hZnRlcjQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MDcxYWZmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jaGFuZ2VFeHRlbmRzVG9JbXBsZW1lbnRzL2FmdGVyNC5qYXZhCkBAIC0wLDAgKzEsOCBAQAorLy8gIkNoYW5nZSAnZXh0ZW5kcyBSdW5uYWJsZScgdG8gJ2ltcGxlbWVudHMgUnVubmFibGUnIiAidHJ1ZSIKK2ltcG9ydCBqYXZhLmlvLio7CisKK2NsYXNzIGEgZXh0ZW5kcyBPYmplY3Q8Y2FyZXQ+IGltcGxlbWVudHMgU2VyaWFsaXphYmxlLCBSdW5uYWJsZSB7CisgcHVibGljIHZvaWQgcnVuKCkgeworIH0KK30KKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jaGFuZ2VFeHRlbmRzVG9JbXBsZW1lbnRzL2FmdGVyNi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jaGFuZ2VFeHRlbmRzVG9JbXBsZW1lbnRzL2FmdGVyNi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgzODUwYWYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NoYW5nZUV4dGVuZHNUb0ltcGxlbWVudHMvYWZ0ZXI2LmphdmEKQEAgLTAsMCArMSw3IEBACisvLyAiQ2hhbmdlICdpbXBsZW1lbnRzIGInIHRvICdleHRlbmRzIGInIiAidHJ1ZSIKK2ltcG9ydCBqYXZhLmlvLio7CisKK2NsYXNzIGEgZXh0ZW5kcyBiPFN0cmluZz4gPGNhcmV0PnsKK30KKworY2xhc3MgYjxUPiB7fQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jaGFuZ2VFeHRlbmRzVG9JbXBsZW1lbnRzL2FmdGVyNy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jaGFuZ2VFeHRlbmRzVG9JbXBsZW1lbnRzL2FmdGVyNy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgyYzI4NDAKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NoYW5nZUV4dGVuZHNUb0ltcGxlbWVudHMvYWZ0ZXI3LmphdmEKQEAgLTAsMCArMSw5IEBACisvLyAiQ2hhbmdlICdpbXBsZW1lbnRzIGInIHRvICdleHRlbmRzIGInIiAidHJ1ZSIKK2NsYXNzIGEgZXh0ZW5kcyBiPEMuRD4geworfQorCitjbGFzcyBiPFQ+IHt9CisKK2NsYXNzIEMgeworICBzdGF0aWMgY2xhc3MgRCB7fQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jaGFuZ2VFeHRlbmRzVG9JbXBsZW1lbnRzL2FmdGVySW50ZXJmYWNlMS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jaGFuZ2VFeHRlbmRzVG9JbXBsZW1lbnRzL2FmdGVySW50ZXJmYWNlMS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg2MWE4NWEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NoYW5nZUV4dGVuZHNUb0ltcGxlbWVudHMvYWZ0ZXJJbnRlcmZhY2UxLmphdmEKQEAgLTAsMCArMSw0IEBACisvLyAiQ2hhbmdlICdpbXBsZW1lbnRzIFJ1bm5hYmxlJyB0byAnZXh0ZW5kcyBSdW5uYWJsZSciICJ0cnVlIgoraW50ZXJmYWNlIGEgZXh0ZW5kcyBSdW5uYWJsZSB7Cit9CisKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY2hhbmdlRXh0ZW5kc1RvSW1wbGVtZW50cy9iZWZvcmUxLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NoYW5nZUV4dGVuZHNUb0ltcGxlbWVudHMvYmVmb3JlMS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNmOGYyZmIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NoYW5nZUV4dGVuZHNUb0ltcGxlbWVudHMvYmVmb3JlMS5qYXZhCkBAIC0wLDAgKzEsOCBAQAorLy8gIkNoYW5nZSAnZXh0ZW5kcyBSdW5uYWJsZScgdG8gJ2ltcGxlbWVudHMgUnVubmFibGUnIiAidHJ1ZSIKK2ltcG9ydCBqYXZhLmlvLio7CisKK2NsYXNzIGEgZXh0ZW5kcyA8Y2FyZXQ+UnVubmFibGUgeworIHB1YmxpYyB2b2lkIHJ1bigpIHsKKyB9Cit9CisKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY2hhbmdlRXh0ZW5kc1RvSW1wbGVtZW50cy9iZWZvcmUyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NoYW5nZUV4dGVuZHNUb0ltcGxlbWVudHMvYmVmb3JlMi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVmYWFjMjIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NoYW5nZUV4dGVuZHNUb0ltcGxlbWVudHMvYmVmb3JlMi5qYXZhCkBAIC0wLDAgKzEsOCBAQAorLy8gIkNoYW5nZSAnaW1wbGVtZW50cyBPYmplY3QnIHRvICdleHRlbmRzIE9iamVjdCciICJ0cnVlIgoraW1wb3J0IGphdmEuaW8uKjsKKworY2xhc3MgYSBpbXBsZW1lbnRzIDxjYXJldD5PYmplY3QgeworIHB1YmxpYyB2b2lkIHJ1bigpIHsKKyB9Cit9CisKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY2hhbmdlRXh0ZW5kc1RvSW1wbGVtZW50cy9iZWZvcmUzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NoYW5nZUV4dGVuZHNUb0ltcGxlbWVudHMvYmVmb3JlMy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEwOTBlMjgKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NoYW5nZUV4dGVuZHNUb0ltcGxlbWVudHMvYmVmb3JlMy5qYXZhCkBAIC0wLDAgKzEsOCBAQAorLy8gIkNoYW5nZSAnaW1wbGVtZW50cyBPYmplY3QnIHRvICdleHRlbmRzIE9iamVjdCciICJ0cnVlIgoraW1wb3J0IGphdmEuaW8uKjsKKworY2xhc3MgYSBpbXBsZW1lbnRzIFJ1bm5hYmxlLDxjYXJldD5PYmplY3QsU2VyaWFsaXphYmxlIHsKKyBwdWJsaWMgdm9pZCBydW4oKSB7CisgfQorfQorCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NoYW5nZUV4dGVuZHNUb0ltcGxlbWVudHMvYmVmb3JlNC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jaGFuZ2VFeHRlbmRzVG9JbXBsZW1lbnRzL2JlZm9yZTQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOTg2ZWEyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jaGFuZ2VFeHRlbmRzVG9JbXBsZW1lbnRzL2JlZm9yZTQuamF2YQpAQCAtMCwwICsxLDggQEAKKy8vICJDaGFuZ2UgJ2V4dGVuZHMgUnVubmFibGUnIHRvICdpbXBsZW1lbnRzIFJ1bm5hYmxlJyIgInRydWUiCitpbXBvcnQgamF2YS5pby4qOworCitjbGFzcyBhIGV4dGVuZHMgT2JqZWN0LDxjYXJldD5SdW5uYWJsZSBpbXBsZW1lbnRzIFNlcmlhbGl6YWJsZSB7CisgcHVibGljIHZvaWQgcnVuKCkgeworIH0KK30KKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jaGFuZ2VFeHRlbmRzVG9JbXBsZW1lbnRzL2JlZm9yZTUuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY2hhbmdlRXh0ZW5kc1RvSW1wbGVtZW50cy9iZWZvcmU1LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGZkNDA1NwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY2hhbmdlRXh0ZW5kc1RvSW1wbGVtZW50cy9iZWZvcmU1LmphdmEKQEAgLTAsMCArMSw5IEBACisvLyAiQ2hhbmdlICdpbXBsZW1lbnRzIE9iamVjdCcgdG8gJ2V4dGVuZHMgT2JqZWN0JyIgImZhbHNlIgoraW1wb3J0IGphdmEuaW8uKjsKKworY2xhc3MgYSBleHRlbmRzIGIgaW1wbGVtZW50cyBSdW5uYWJsZSw8Y2FyZXQ+T2JqZWN0LFNlcmlhbGl6YWJsZSB7CisgcHVibGljIHZvaWQgcnVuKCkgeworIH0KK30KKworY2xhc3MgYiB7fQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jaGFuZ2VFeHRlbmRzVG9JbXBsZW1lbnRzL2JlZm9yZTYuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY2hhbmdlRXh0ZW5kc1RvSW1wbGVtZW50cy9iZWZvcmU2LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjRjYTRkMgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY2hhbmdlRXh0ZW5kc1RvSW1wbGVtZW50cy9iZWZvcmU2LmphdmEKQEAgLTAsMCArMSw3IEBACisvLyAiQ2hhbmdlICdpbXBsZW1lbnRzIGInIHRvICdleHRlbmRzIGInIiAidHJ1ZSIKK2ltcG9ydCBqYXZhLmlvLio7CisKK2NsYXNzIGEgaW1wbGVtZW50cyA8Y2FyZXQ+YjxTdHJpbmc+IHsKK30KKworY2xhc3MgYjxUPiB7fQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jaGFuZ2VFeHRlbmRzVG9JbXBsZW1lbnRzL2JlZm9yZTcuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY2hhbmdlRXh0ZW5kc1RvSW1wbGVtZW50cy9iZWZvcmU3LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2M3YTc1ZgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY2hhbmdlRXh0ZW5kc1RvSW1wbGVtZW50cy9iZWZvcmU3LmphdmEKQEAgLTAsMCArMSw5IEBACisvLyAiQ2hhbmdlICdpbXBsZW1lbnRzIGInIHRvICdleHRlbmRzIGInIiAidHJ1ZSIKK2NsYXNzIGEgaW1wbGVtZW50cyA8Y2FyZXQ+YjxDLkQ+IHsKK30KKworY2xhc3MgYjxUPiB7fQorCitjbGFzcyBDIHsKKyAgc3RhdGljIGNsYXNzIEQge30KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY2hhbmdlRXh0ZW5kc1RvSW1wbGVtZW50cy9iZWZvcmVJbnRlcmZhY2UxLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NoYW5nZUV4dGVuZHNUb0ltcGxlbWVudHMvYmVmb3JlSW50ZXJmYWNlMS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFiZmFmNDgKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NoYW5nZUV4dGVuZHNUb0ltcGxlbWVudHMvYmVmb3JlSW50ZXJmYWNlMS5qYXZhCkBAIC0wLDAgKzEsNCBAQAorLy8gIkNoYW5nZSAnaW1wbGVtZW50cyBSdW5uYWJsZScgdG8gJ2V4dGVuZHMgUnVubmFibGUnIiAidHJ1ZSIKK2ludGVyZmFjZSBhIGltcGxlbWVudHMgPGNhcmV0PlJ1bm5hYmxlIHsKK30KKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jaGFuZ2VNZXRob2RTaWduYXR1cmVGcm9tVXNhZ2UvYWZ0ZXIxLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NoYW5nZU1ldGhvZFNpZ25hdHVyZUZyb21Vc2FnZS9hZnRlcjEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MzYwZTAwCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jaGFuZ2VNZXRob2RTaWduYXR1cmVGcm9tVXNhZ2UvYWZ0ZXIxLmphdmEKQEAgLTAsMCArMSw3IEBACisvLyAiUmVtb3ZlIDFzdCBwYXJhbWV0ZXIgZnJvbSBtZXRob2QgJ2YnIiAidHJ1ZSIKK2NsYXNzIEEgeworICAgIHZvaWQgZigpIHt9CisgICAgcHVibGljIHZvaWQgZm9vKCkgeworICAgICAgICA8Y2FyZXQ+ZigpOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NoYW5nZU1ldGhvZFNpZ25hdHVyZUZyb21Vc2FnZS9hZnRlcjEwLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NoYW5nZU1ldGhvZFNpZ25hdHVyZUZyb21Vc2FnZS9hZnRlcjEwLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTA4YmUyOQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY2hhbmdlTWV0aG9kU2lnbmF0dXJlRnJvbVVzYWdlL2FmdGVyMTAuamF2YQpAQCAtMCwwICsxLDE1IEBACisvLyAiQWRkICdTdHJpbmcnIGFzIDJuZCBwYXJhbWV0ZXIgdG8gbWV0aG9kICdzZXQnIiAidHJ1ZSIKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworcHVibGljIGNsYXNzIFg8VD4geworICAgIHByaXZhdGUgTGlzdDxUPiBteUxpc3Q7CisKKyAgICBwdWJsaWMgdm9pZCBzZXQoTGlzdDxUPiBsaXN0LCBTdHJpbmcgYWFhKSB7CisgICAgICAgIG15TGlzdCA9IGxpc3Q7CisgICAgfQorCisgICAgcHVibGljIHN0YXRpYyB2b2lkIGFhKCkgeworICAgICAgICBYPEludGVnZXI+IHggPSBuZXcgWDxJbnRlZ2VyPigpOworICAgICAgICB4LnNldDxjYXJldD4obnVsbCwgImFhYSIpOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NoYW5nZU1ldGhvZFNpZ25hdHVyZUZyb21Vc2FnZS9hZnRlcjIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY2hhbmdlTWV0aG9kU2lnbmF0dXJlRnJvbVVzYWdlL2FmdGVyMi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgxZjU5ZTkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NoYW5nZU1ldGhvZFNpZ25hdHVyZUZyb21Vc2FnZS9hZnRlcjIuamF2YQpAQCAtMCwwICsxLDcgQEAKKy8vICI8aHRtbD4gQ2hhbmdlIHNpZ25hdHVyZSBvZiBmKDxzPmludDwvcz4sIDxzPlN0cmluZzwvcz4pPC9odG1sPiIgInRydWUiCitjbGFzcyBBIHsKKyAgICB2b2lkIGYoKSB7fQorICAgIHB1YmxpYyB2b2lkIGZvbygpIHsKKyAgICAgICAgPGNhcmV0PmYoKTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jaGFuZ2VNZXRob2RTaWduYXR1cmVGcm9tVXNhZ2UvYWZ0ZXIzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NoYW5nZU1ldGhvZFNpZ25hdHVyZUZyb21Vc2FnZS9hZnRlcjMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZDQyZTQ2Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jaGFuZ2VNZXRob2RTaWduYXR1cmVGcm9tVXNhZ2UvYWZ0ZXIzLmphdmEKQEAgLTAsMCArMSw3IEBACisvLyAiQWRkICdjaGFyJyBhcyAybmQgcGFyYW1ldGVyIHRvIG1ldGhvZCAnZiciICJ0cnVlIgorY2xhc3MgQSB7CisgICAgdm9pZCBmKGludCBpLCBjaGFyIGMsIFN0cmluZyBzKSB7fQorICAgIHB1YmxpYyB2b2lkIGZvbygpIHsKKyAgICAgICAgPGNhcmV0PmYoMSwnMicsIiIpOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NoYW5nZU1ldGhvZFNpZ25hdHVyZUZyb21Vc2FnZS9hZnRlcjQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY2hhbmdlTWV0aG9kU2lnbmF0dXJlRnJvbVVzYWdlL2FmdGVyNC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjczNTJlZDEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NoYW5nZU1ldGhvZFNpZ25hdHVyZUZyb21Vc2FnZS9hZnRlcjQuamF2YQpAQCAtMCwwICsxLDcgQEAKKy8vICI8aHRtbD4gQ2hhbmdlIHNpZ25hdHVyZSBvZiBmKGludCwgPGI+Y2hhcjwvYj4sIDxiPmludDwvYj4sIFN0cmluZywgPGI+aW50PC9iPiwgPGI+T2JqZWN0PC9iPik8L2h0bWw+IiAidHJ1ZSIKK2NsYXNzIEEgeworICAgIHZvaWQgZihpbnQgaSwgY2hhciBjLCBpbnQgaTEsIFN0cmluZyBzLCBpbnQgaTIsIE9iamVjdCBvKSB7fQorICAgIHB1YmxpYyB2b2lkIGZvbygpIHsKKyAgICAgICAgPGNhcmV0PmYoMSwnMicsNCwiIiwxLG51bGwpOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NoYW5nZU1ldGhvZFNpZ25hdHVyZUZyb21Vc2FnZS9hZnRlcjUuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY2hhbmdlTWV0aG9kU2lnbmF0dXJlRnJvbVVzYWdlL2FmdGVyNS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVhY2ZhYjUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NoYW5nZU1ldGhvZFNpZ25hdHVyZUZyb21Vc2FnZS9hZnRlcjUuamF2YQpAQCAtMCwwICsxLDcgQEAKKy8vICJSZW1vdmUgMm5kIHBhcmFtZXRlciBmcm9tIG1ldGhvZCAnZiciICJ0cnVlIgorY2xhc3MgQSB7CisgICAgdm9pZCBmKGludCBpLCBpbnQgaTIpIHt9CisgICAgcHVibGljIHZvaWQgZm9vKCkgeworICAgICAgICA8Y2FyZXQ+ZigxLDEpOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NoYW5nZU1ldGhvZFNpZ25hdHVyZUZyb21Vc2FnZS9hZnRlcjYuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY2hhbmdlTWV0aG9kU2lnbmF0dXJlRnJvbVVzYWdlL2FmdGVyNi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJmYjNlODEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NoYW5nZU1ldGhvZFNpZ25hdHVyZUZyb21Vc2FnZS9hZnRlcjYuamF2YQpAQCAtMCwwICsxLDcgQEAKKy8vICJDaGFuZ2UgMm5kIHBhcmFtZXRlciBvZiBtZXRob2QgJ2YnIGZyb20gJ1N0cmluZycgdG8gJ2ludCciICJ0cnVlIgorY2xhc3MgQSB7CisgICAgdm9pZCBmKGludCBpLCBpbnQgcywgaW50IGkyKSB7fQorICAgIHB1YmxpYyB2b2lkIGZvbygpIHsKKyAgICAgICAgPGNhcmV0PmYoMSwxLCc0Jyk7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY2hhbmdlTWV0aG9kU2lnbmF0dXJlRnJvbVVzYWdlL2FmdGVyNy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jaGFuZ2VNZXRob2RTaWduYXR1cmVGcm9tVXNhZ2UvYWZ0ZXI3LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY5ODc1NwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY2hhbmdlTWV0aG9kU2lnbmF0dXJlRnJvbVVzYWdlL2FmdGVyNy5qYXZhCkBAIC0wLDAgKzEsNyBAQAorLy8gIjxodG1sPiBDaGFuZ2Ugc2lnbmF0dXJlIG9mIGYoaW50LCA8cz5TdHJpbmc8L3M+LCBpbnQsIDxzPmludDwvcz4sIDxzPmNoYXI8L3M+LCBTdHJpbmcpPC9odG1sPiIgInRydWUiCitjbGFzcyBBIHsKKyAgICB2b2lkIGYoaW50IGksIGludCBpMiwgU3RyaW5nIHMpIHt9CisgICAgcHVibGljIHZvaWQgZm9vKCkgeworICAgICAgICA8Y2FyZXQ+ZigxLDEsIjQiKTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jaGFuZ2VNZXRob2RTaWduYXR1cmVGcm9tVXNhZ2UvYWZ0ZXI4LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NoYW5nZU1ldGhvZFNpZ25hdHVyZUZyb21Vc2FnZS9hZnRlcjguamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYzNmZmZmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jaGFuZ2VNZXRob2RTaWduYXR1cmVGcm9tVXNhZ2UvYWZ0ZXI4LmphdmEKQEAgLTAsMCArMSw2IEBACisvLyAiPGh0bWw+IENoYW5nZSBzaWduYXR1cmUgb2YgQSg8Yj5pbnQ8L2I+LCA8Yj5pbnQ8L2I+LCA8Yj5TdHJpbmc8L2I+KTwvaHRtbD4iICJ0cnVlIgorY2xhc3MgQSB7CisgICAgQShpbnQgaSwgaW50IGkxLCBTdHJpbmcgcykgeworICAgICAgICBuZXcgQTxjYXJldD4oMSwxLCI0Iik7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY2hhbmdlTWV0aG9kU2lnbmF0dXJlRnJvbVVzYWdlL2FmdGVyOS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jaGFuZ2VNZXRob2RTaWduYXR1cmVGcm9tVXNhZ2UvYWZ0ZXI5LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjdiMGM0NAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY2hhbmdlTWV0aG9kU2lnbmF0dXJlRnJvbVVzYWdlL2FmdGVyOS5qYXZhCkBAIC0wLDAgKzEsNiBAQAorLy8gIkFkZCAnaW50JyBhcyAybmQgcGFyYW1ldGVyIHRvIG1ldGhvZCAnZiciICJ0cnVlIgorIHB1YmxpYyBjbGFzcyBTIHsKKyAgICAgdm9pZCBmKGludCBrLCBpbnQgaSwgaW50Li4uIGFyZ3MpIHsKKyAgICAgZigxLDEsbnVsbCk8Y2FyZXQ+Oy8vIC0+IGYoMSwxLG51bGwpCisgICAgIH0KKyB9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NoYW5nZU1ldGhvZFNpZ25hdHVyZUZyb21Vc2FnZS9hZnRlckFzc2lnbmFibGVQYXJhbVR5cGVzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NoYW5nZU1ldGhvZFNpZ25hdHVyZUZyb21Vc2FnZS9hZnRlckFzc2lnbmFibGVQYXJhbVR5cGVzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTUyMWRlMwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY2hhbmdlTWV0aG9kU2lnbmF0dXJlRnJvbVVzYWdlL2FmdGVyQXNzaWduYWJsZVBhcmFtVHlwZXMuamF2YQpAQCAtMCwwICsxLDIyIEBACisvLyAiQWRkICdCJyBhcyAybmQgcGFyYW1ldGVyIHRvIG1ldGhvZCAnZm9vJyIgInRydWUiCitwdWJsaWMgY2xhc3MgUyB7CisKKyAgdm9pZCBmb28oQSBhLCBCIGIpIHsKKyAgfQorCisgIHZvaWQgYmFyKEIgYikgeworICAgIEEgYSA9IGdldEEoKTsKKyAgICBmb28oYSwgYik7CisgIH0KKworICBBIGdldEEoKSB7CisgICAgcmV0dXJuIG5ldyBBKCk7CisgIH0KK30KKworY2xhc3MgQSB7Cit9CisKK2NsYXNzIEIgZXh0ZW5kcyBBIHsKK30KKyAgClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jaGFuZ2VNZXRob2RTaWduYXR1cmVGcm9tVXNhZ2UvYWZ0ZXJBc3NpZ25hYmxlUGFyYW1UeXBlc0ZpcnN0TmV3LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NoYW5nZU1ldGhvZFNpZ25hdHVyZUZyb21Vc2FnZS9hZnRlckFzc2lnbmFibGVQYXJhbVR5cGVzRmlyc3ROZXcuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MGMwMjMzCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jaGFuZ2VNZXRob2RTaWduYXR1cmVGcm9tVXNhZ2UvYWZ0ZXJBc3NpZ25hYmxlUGFyYW1UeXBlc0ZpcnN0TmV3LmphdmEKQEAgLTAsMCArMSwyMiBAQAorLy8gIkFkZCAnQicgYXMgMXN0IHBhcmFtZXRlciB0byBtZXRob2QgJ2ZvbyciICJ0cnVlIgorcHVibGljIGNsYXNzIFMgeworCisgIHZvaWQgZm9vKEIgYiwgQSBhKSB7CisgIH0KKworICB2b2lkIGJhcihCIGIpIHsKKyAgICBBIGEgPSBnZXRBKCk7CisgICAgZm9vKDxjYXJldD5iLCBhKTsKKyAgfQorCisgIEEgZ2V0QSgpIHsKKyAgICByZXR1cm4gbmV3IEEoKTsKKyAgfQorfQorCitjbGFzcyBBIHsKK30KKworY2xhc3MgQiBleHRlbmRzIEEgeworfQorICAKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NoYW5nZU1ldGhvZFNpZ25hdHVyZUZyb21Vc2FnZS9hZnRlckFzc2lnbmFibGVQYXJhbVR5cGVzRmlyc3ROZXdSZXZlcnNlLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NoYW5nZU1ldGhvZFNpZ25hdHVyZUZyb21Vc2FnZS9hZnRlckFzc2lnbmFibGVQYXJhbVR5cGVzRmlyc3ROZXdSZXZlcnNlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDAwNGFhMmEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NoYW5nZU1ldGhvZFNpZ25hdHVyZUZyb21Vc2FnZS9hZnRlckFzc2lnbmFibGVQYXJhbVR5cGVzRmlyc3ROZXdSZXZlcnNlLmphdmEKQEAgLTAsMCArMSwyMiBAQAorLy8gIkFkZCAnQScgYXMgMm5kIHBhcmFtZXRlciB0byBtZXRob2QgJ2ZvbyciICJ0cnVlIgorcHVibGljIGNsYXNzIFMgeworCisgIHZvaWQgZm9vKEEgYSwgQSBhMSkgeworICB9CisKKyAgdm9pZCBiYXIoQiBiKSB7CisgICAgQSBhID0gZ2V0QSgpOworICAgIGZvbyhiLCBhKTsKKyAgfQorCisgIEEgZ2V0QSgpIHsKKyAgICByZXR1cm4gbmV3IEEoKTsKKyAgfQorfQorCitjbGFzcyBBIHsKK30KKworY2xhc3MgQiBleHRlbmRzIEEgeworfQorICAKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NoYW5nZU1ldGhvZFNpZ25hdHVyZUZyb21Vc2FnZS9hZnRlckFzc2lnbmFibGVQYXJhbVR5cGVzUmV2ZXJzZS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jaGFuZ2VNZXRob2RTaWduYXR1cmVGcm9tVXNhZ2UvYWZ0ZXJBc3NpZ25hYmxlUGFyYW1UeXBlc1JldmVyc2UuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZjllZmJjCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jaGFuZ2VNZXRob2RTaWduYXR1cmVGcm9tVXNhZ2UvYWZ0ZXJBc3NpZ25hYmxlUGFyYW1UeXBlc1JldmVyc2UuamF2YQpAQCAtMCwwICsxLDIyIEBACisvLyAiQWRkICdBJyBhcyAxc3QgcGFyYW1ldGVyIHRvIG1ldGhvZCAnZm9vJyIgInRydWUiCitwdWJsaWMgY2xhc3MgUyB7CisKKyAgdm9pZCBmb28oQSBhMSwgQSBhKSB7CisgIH0KKworICB2b2lkIGJhcihCIGIpIHsKKyAgICBBIGEgPSBnZXRBKCk7CisgICAgZm9vKGEsIGIpOworICB9CisKKyAgQSBnZXRBKCkgeworICAgIHJldHVybiBuZXcgQSgpOworICB9Cit9CisKK2NsYXNzIEEgeworfQorCitjbGFzcyBCIGV4dGVuZHMgQSB7Cit9CisgIApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY2hhbmdlTWV0aG9kU2lnbmF0dXJlRnJvbVVzYWdlL2FmdGVyQ29tbW9uQ2hhbmdlUmV2ZXJzZS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jaGFuZ2VNZXRob2RTaWduYXR1cmVGcm9tVXNhZ2UvYWZ0ZXJDb21tb25DaGFuZ2VSZXZlcnNlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTlhMGZhMmIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NoYW5nZU1ldGhvZFNpZ25hdHVyZUZyb21Vc2FnZS9hZnRlckNvbW1vbkNoYW5nZVJldmVyc2UuamF2YQpAQCAtMCwwICsxLDExIEBACisvLyAiPGh0bWw+IENoYW5nZSBzaWduYXR1cmUgb2YgZm9vKDxiPkFycmF5TGlzdCZsdDtJbnRlZ2VyJmd0OzwvYj4sIDxiPkFycmF5TGlzdCZsdDtJbnRlZ2VyJmd0OzwvYj4sIEFycmF5TGlzdCZsdDtJbnRlZ2VyJmd0OywgQXJyYXlMaXN0Jmx0O0ludGVnZXImZ3Q7KTwvaHRtbD4iICJ0cnVlIgoraW1wb3J0IGphdmEudXRpbC4qOworCitjbGFzcyBUZXN0IHsKKworICAgIHB1YmxpYyB2b2lkIGZvbyhBcnJheUxpc3Q8SW50ZWdlcj4gaW50ZWdlckFycmF5TGlzdCwgQXJyYXlMaXN0PEludGVnZXI+IGludGVnZXJzLCBBcnJheUxpc3Q8SW50ZWdlcj4gbCwgQXJyYXlMaXN0PEludGVnZXI+IGwxKSB7fQorCisgICAgeworICAgICAgZm9vKG5ldyBBcnJheUxpc3Q8SW50ZWdlcj4oKSwgbmV3IEFycmF5TGlzdDxJbnRlZ2VyPigpLCBuZXcgQXJyYXlMaXN0PEludGVnZXI+KCksIG5ldyBBcnJheUxpc3Q8SW50ZWdlcj4oKSk7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY2hhbmdlTWV0aG9kU2lnbmF0dXJlRnJvbVVzYWdlL2FmdGVyRXJhc2VUeXBlSWZTdWJzdGl0dXRpb25Ob3RGb3VuZC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jaGFuZ2VNZXRob2RTaWduYXR1cmVGcm9tVXNhZ2UvYWZ0ZXJFcmFzZVR5cGVJZlN1YnN0aXR1dGlvbk5vdEZvdW5kLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjBmMDJkMQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY2hhbmdlTWV0aG9kU2lnbmF0dXJlRnJvbVVzYWdlL2FmdGVyRXJhc2VUeXBlSWZTdWJzdGl0dXRpb25Ob3RGb3VuZC5qYXZhCkBAIC0wLDAgKzEsMTIgQEAKKy8vICJBZGQgJ0ZvbzxUeXBlUGFyYW1OYW1lPicgYXMgMXN0IHBhcmFtZXRlciB0byBtZXRob2QgJ0JhciciICJ0cnVlIgorIHB1YmxpYyBjbGFzcyBCYXIgeworICAgICBCYXIoRm9vPFR5cGVQYXJhbU5hbWU+IHR5cGVQYXJhbU5hbWVGb28sIFN0cmluZyBhcmdzKSB7CisKKyAgICAgfQorIH0KKworY2xhc3MgRm9vPFR5cGVQYXJhbU5hbWU+IHsKKyAgICB2b2lkIGJhcigpIHsKKyAgICAgIEJhciBiYXIgPSBuZXcgQmFyKHRoaXMsICIiKTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jaGFuZ2VNZXRob2RTaWduYXR1cmVGcm9tVXNhZ2UvYWZ0ZXJFcmFzZVR5cGVJZlN1YnN0aXR1dGlvbk5vdEZvdW5kTm90QUNvbnN0cnVjdG9yLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NoYW5nZU1ldGhvZFNpZ25hdHVyZUZyb21Vc2FnZS9hZnRlckVyYXNlVHlwZUlmU3Vic3RpdHV0aW9uTm90Rm91bmROb3RBQ29uc3RydWN0b3IuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OGZkNzVmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jaGFuZ2VNZXRob2RTaWduYXR1cmVGcm9tVXNhZ2UvYWZ0ZXJFcmFzZVR5cGVJZlN1YnN0aXR1dGlvbk5vdEZvdW5kTm90QUNvbnN0cnVjdG9yLmphdmEKQEAgLTAsMCArMSwxMiBAQAorLy8gIkFkZCAnRm9vPFR5cGVQYXJhbU5hbWU+JyBhcyAxc3QgcGFyYW1ldGVyIHRvIG1ldGhvZCAnYmFyJyIgInRydWUiCisgcHVibGljIGNsYXNzIEJhciB7CisgICAgIHN0YXRpYyB2b2lkIGJhcihGb288VHlwZVBhcmFtTmFtZT4gdHlwZVBhcmFtTmFtZUZvbywgU3RyaW5nIGFyZ3MpIHsKKworICAgICB9CisgfQorCitjbGFzcyBGb288VHlwZVBhcmFtTmFtZT4geworICAgIHZvaWQgYmFyKCkgeworICAgICAgQmFyLmJhcih0aGlzLCAiIik7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY2hhbmdlTWV0aG9kU2lnbmF0dXJlRnJvbVVzYWdlL2FmdGVyTmV3UGFyYW1OYW1lLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NoYW5nZU1ldGhvZFNpZ25hdHVyZUZyb21Vc2FnZS9hZnRlck5ld1BhcmFtTmFtZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMzMzk3NDEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NoYW5nZU1ldGhvZFNpZ25hdHVyZUZyb21Vc2FnZS9hZnRlck5ld1BhcmFtTmFtZS5qYXZhCkBAIC0wLDAgKzEsMTAgQEAKKy8vICJBZGQgJ2ludCcgYXMgMXN0IHBhcmFtZXRlciB0byBtZXRob2QgJ2YnIiAidHJ1ZSIKKyBwdWJsaWMgY2xhc3MgUyB7CisgICAgIHZvaWQgZihpbnQgaSwgU3RyaW5nIGFyZ3MpIHsKKworICAgICB9CisKKyAgICAgdm9pZCBiYXIoKSB7CisgICAgICAgZigxMSwgIiIpOworICAgICB9CisgfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jaGFuZ2VNZXRob2RTaWduYXR1cmVGcm9tVXNhZ2UvYWZ0ZXJOb25Bc3NpZ25hYmxlUGFyYW1UeXBlcy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jaGFuZ2VNZXRob2RTaWduYXR1cmVGcm9tVXNhZ2UvYWZ0ZXJOb25Bc3NpZ25hYmxlUGFyYW1UeXBlcy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc3NzUzNGIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NoYW5nZU1ldGhvZFNpZ25hdHVyZUZyb21Vc2FnZS9hZnRlck5vbkFzc2lnbmFibGVQYXJhbVR5cGVzLmphdmEKQEAgLTAsMCArMSwyMiBAQAorLy8gIkFkZCAnU3RyaW5nJyBhcyAybmQgcGFyYW1ldGVyIHRvIG1ldGhvZCAnZm9vJyIgInRydWUiCitwdWJsaWMgY2xhc3MgUyB7CisKKyAgdm9pZCBmb28oQSBhLCBTdHJpbmcgcykgeworICB9CisKKyAgdm9pZCBiYXIoQiBiKSB7CisgICAgQSBhID0gZ2V0QSgpOworICAgIGZvbyhhLCA8Y2FyZXQ+IiIpOworICB9CisKKyAgQSBnZXRBKCkgeworICAgIHJldHVybiBuZXcgQSgpOworICB9Cit9CisKK2NsYXNzIEEgeworfQorCitjbGFzcyBCIGV4dGVuZHMgQSB7Cit9CisgIApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY2hhbmdlTWV0aG9kU2lnbmF0dXJlRnJvbVVzYWdlL2FmdGVyUXVhbGlmaWVkVHlwZXMuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY2hhbmdlTWV0aG9kU2lnbmF0dXJlRnJvbVVzYWdlL2FmdGVyUXVhbGlmaWVkVHlwZXMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MGE1NDQwCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jaGFuZ2VNZXRob2RTaWduYXR1cmVGcm9tVXNhZ2UvYWZ0ZXJRdWFsaWZpZWRUeXBlcy5qYXZhCkBAIC0wLDAgKzEsMTIgQEAKKy8vICJBZGQgJ0lubmVyMScgYXMgMXN0IHBhcmFtZXRlciB0byBtZXRob2QgJ0lubmVyMiciICJ0cnVlIgorY2xhc3MgQ29vbFRlc3QgeworY2xhc3MgSW5uZXIxIHt9CisKK3ZvaWQgbWV0aG9kKCkgeworbmV3IElubmVyMihuZXcgSW5uZXIxKCkpOworfQorCitjbGFzcyBJbm5lcjIgeworSW5uZXIyKElubmVyMSBpbm5lcjEpIHsgfQorfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY2hhbmdlTWV0aG9kU2lnbmF0dXJlRnJvbVVzYWdlL2FmdGVyVmFyYXJnczEuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY2hhbmdlTWV0aG9kU2lnbmF0dXJlRnJvbVVzYWdlL2FmdGVyVmFyYXJnczEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kY2QzY2U2Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jaGFuZ2VNZXRob2RTaWduYXR1cmVGcm9tVXNhZ2UvYWZ0ZXJWYXJhcmdzMS5qYXZhCkBAIC0wLDAgKzEsNiBAQAorLy8gIkFkZCAnU3RyaW5nJyBhcyAxc3QgcGFyYW1ldGVyIHRvIG1ldGhvZCAnZiciICJ0cnVlIgorIHB1YmxpYyBjbGFzcyBTIHsKKyAgICAgdm9pZCBmKFN0cmluZyBzLCBpbnQuLi4gYXJncykgeworICAgICBmKCIiLDEsMSk7CisgICAgIH0KKyB9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NoYW5nZU1ldGhvZFNpZ25hdHVyZUZyb21Vc2FnZS9hZnRlclZhcmFyZ3MyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NoYW5nZU1ldGhvZFNpZ25hdHVyZUZyb21Vc2FnZS9hZnRlclZhcmFyZ3MyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTVhYjA3ZQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY2hhbmdlTWV0aG9kU2lnbmF0dXJlRnJvbVVzYWdlL2FmdGVyVmFyYXJnczIuamF2YQpAQCAtMCwwICsxLDYgQEAKKy8vICJBZGQgJ1N0cmluZycgYXMgMXN0IHBhcmFtZXRlciB0byBtZXRob2QgJ2YnIiAidHJ1ZSIKKyBwdWJsaWMgY2xhc3MgUyB7CisgICAgIHZvaWQgZihTdHJpbmcgcywgaW50Li4uIGFyZ3MpIHsKKyAgICAgZigiIixudWxsKTsKKyAgICAgfQorIH0KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY2hhbmdlTWV0aG9kU2lnbmF0dXJlRnJvbVVzYWdlL2JlZm9yZTEuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY2hhbmdlTWV0aG9kU2lnbmF0dXJlRnJvbVVzYWdlL2JlZm9yZTEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZGYyZjc2Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jaGFuZ2VNZXRob2RTaWduYXR1cmVGcm9tVXNhZ2UvYmVmb3JlMS5qYXZhCkBAIC0wLDAgKzEsNyBAQAorLy8gIlJlbW92ZSAxc3QgcGFyYW1ldGVyIGZyb20gbWV0aG9kICdmJyIgInRydWUiCitjbGFzcyBBIHsKKyAgICB2b2lkIGYoaW50IGkpIHt9CisgICAgcHVibGljIHZvaWQgZm9vKCkgeworICAgICAgICA8Y2FyZXQ+ZigpOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NoYW5nZU1ldGhvZFNpZ25hdHVyZUZyb21Vc2FnZS9iZWZvcmUxMC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jaGFuZ2VNZXRob2RTaWduYXR1cmVGcm9tVXNhZ2UvYmVmb3JlMTAuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZDk2NmQ4Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jaGFuZ2VNZXRob2RTaWduYXR1cmVGcm9tVXNhZ2UvYmVmb3JlMTAuamF2YQpAQCAtMCwwICsxLDE1IEBACisvLyAiQWRkICdTdHJpbmcnIGFzIDJuZCBwYXJhbWV0ZXIgdG8gbWV0aG9kICdzZXQnIiAidHJ1ZSIKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworcHVibGljIGNsYXNzIFg8VD4geworICAgIHByaXZhdGUgTGlzdDxUPiBteUxpc3Q7CisKKyAgICBwdWJsaWMgdm9pZCBzZXQoTGlzdDxUPiBsaXN0KSB7CisgICAgICAgIG15TGlzdCA9IGxpc3Q7CisgICAgfQorCisgICAgcHVibGljIHN0YXRpYyB2b2lkIGFhKCkgeworICAgICAgICBYPEludGVnZXI+IHggPSBuZXcgWDxJbnRlZ2VyPigpOworICAgICAgICB4LnNldDxjYXJldD4obnVsbCwgImFhYSIpOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NoYW5nZU1ldGhvZFNpZ25hdHVyZUZyb21Vc2FnZS9iZWZvcmUyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NoYW5nZU1ldGhvZFNpZ25hdHVyZUZyb21Vc2FnZS9iZWZvcmUyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzIwYjQ3MQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY2hhbmdlTWV0aG9kU2lnbmF0dXJlRnJvbVVzYWdlL2JlZm9yZTIuamF2YQpAQCAtMCwwICsxLDcgQEAKKy8vICI8aHRtbD4gQ2hhbmdlIHNpZ25hdHVyZSBvZiBmKDxzPmludDwvcz4sIDxzPlN0cmluZzwvcz4pPC9odG1sPiIgInRydWUiCitjbGFzcyBBIHsKKyAgICB2b2lkIGYoaW50IGksU3RyaW5nIHMpIHt9CisgICAgcHVibGljIHZvaWQgZm9vKCkgeworICAgICAgICA8Y2FyZXQ+ZigpOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NoYW5nZU1ldGhvZFNpZ25hdHVyZUZyb21Vc2FnZS9iZWZvcmUzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NoYW5nZU1ldGhvZFNpZ25hdHVyZUZyb21Vc2FnZS9iZWZvcmUzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGUxMDc0NAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY2hhbmdlTWV0aG9kU2lnbmF0dXJlRnJvbVVzYWdlL2JlZm9yZTMuamF2YQpAQCAtMCwwICsxLDcgQEAKKy8vICJBZGQgJ2NoYXInIGFzIDJuZCBwYXJhbWV0ZXIgdG8gbWV0aG9kICdmJyIgInRydWUiCitjbGFzcyBBIHsKKyAgICB2b2lkIGYoaW50IGksU3RyaW5nIHMpIHt9CisgICAgcHVibGljIHZvaWQgZm9vKCkgeworICAgICAgICA8Y2FyZXQ+ZigxLCcyJywiIik7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY2hhbmdlTWV0aG9kU2lnbmF0dXJlRnJvbVVzYWdlL2JlZm9yZTQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY2hhbmdlTWV0aG9kU2lnbmF0dXJlRnJvbVVzYWdlL2JlZm9yZTQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOGEwNTQ2Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jaGFuZ2VNZXRob2RTaWduYXR1cmVGcm9tVXNhZ2UvYmVmb3JlNC5qYXZhCkBAIC0wLDAgKzEsNyBAQAorLy8gIjxodG1sPiBDaGFuZ2Ugc2lnbmF0dXJlIG9mIGYoaW50LCA8Yj5jaGFyPC9iPiwgPGI+aW50PC9iPiwgU3RyaW5nLCA8Yj5pbnQ8L2I+LCA8Yj5PYmplY3Q8L2I+KTwvaHRtbD4iICJ0cnVlIgorY2xhc3MgQSB7CisgICAgdm9pZCBmKGludCBpLFN0cmluZyBzKSB7fQorICAgIHB1YmxpYyB2b2lkIGZvbygpIHsKKyAgICAgICAgPGNhcmV0PmYoMSwnMicsNCwiIiwxLG51bGwpOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NoYW5nZU1ldGhvZFNpZ25hdHVyZUZyb21Vc2FnZS9iZWZvcmU1LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NoYW5nZU1ldGhvZFNpZ25hdHVyZUZyb21Vc2FnZS9iZWZvcmU1LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTdlNjY4MgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY2hhbmdlTWV0aG9kU2lnbmF0dXJlRnJvbVVzYWdlL2JlZm9yZTUuamF2YQpAQCAtMCwwICsxLDcgQEAKKy8vICJSZW1vdmUgMm5kIHBhcmFtZXRlciBmcm9tIG1ldGhvZCAnZiciICJ0cnVlIgorY2xhc3MgQSB7CisgICAgdm9pZCBmKGludCBpLCBTdHJpbmcgcywgaW50IGkyKSB7fQorICAgIHB1YmxpYyB2b2lkIGZvbygpIHsKKyAgICAgICAgPGNhcmV0PmYoMSwxKTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jaGFuZ2VNZXRob2RTaWduYXR1cmVGcm9tVXNhZ2UvYmVmb3JlNi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jaGFuZ2VNZXRob2RTaWduYXR1cmVGcm9tVXNhZ2UvYmVmb3JlNi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYyOGE2ZWMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NoYW5nZU1ldGhvZFNpZ25hdHVyZUZyb21Vc2FnZS9iZWZvcmU2LmphdmEKQEAgLTAsMCArMSw3IEBACisvLyAiQ2hhbmdlIDJuZCBwYXJhbWV0ZXIgb2YgbWV0aG9kICdmJyBmcm9tICdTdHJpbmcnIHRvICdpbnQnIiAidHJ1ZSIKK2NsYXNzIEEgeworICAgIHZvaWQgZihpbnQgaSwgU3RyaW5nIHMsIGludCBpMikge30KKyAgICBwdWJsaWMgdm9pZCBmb28oKSB7CisgICAgICAgIDxjYXJldD5mKDEsMSwnNCcpOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NoYW5nZU1ldGhvZFNpZ25hdHVyZUZyb21Vc2FnZS9iZWZvcmU3LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NoYW5nZU1ldGhvZFNpZ25hdHVyZUZyb21Vc2FnZS9iZWZvcmU3LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTFlMjdkNgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY2hhbmdlTWV0aG9kU2lnbmF0dXJlRnJvbVVzYWdlL2JlZm9yZTcuamF2YQpAQCAtMCwwICsxLDcgQEAKKy8vICI8aHRtbD4gQ2hhbmdlIHNpZ25hdHVyZSBvZiBmKGludCwgPHM+U3RyaW5nPC9zPiwgaW50LCA8cz5pbnQ8L3M+LCA8cz5jaGFyPC9zPiwgU3RyaW5nKTwvaHRtbD4iICJ0cnVlIgorY2xhc3MgQSB7CisgICAgdm9pZCBmKGludCBpLCBTdHJpbmcgcywgaW50IGkyLCBpbnQgaTMsIGNoYXIgYywgU3RyaW5nIHMpIHt9CisgICAgcHVibGljIHZvaWQgZm9vKCkgeworICAgICAgICA8Y2FyZXQ+ZigxLDEsIjQiKTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jaGFuZ2VNZXRob2RTaWduYXR1cmVGcm9tVXNhZ2UvYmVmb3JlOC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jaGFuZ2VNZXRob2RTaWduYXR1cmVGcm9tVXNhZ2UvYmVmb3JlOC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY4Nzk3MjMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NoYW5nZU1ldGhvZFNpZ25hdHVyZUZyb21Vc2FnZS9iZWZvcmU4LmphdmEKQEAgLTAsMCArMSw2IEBACisvLyAiPGh0bWw+IENoYW5nZSBzaWduYXR1cmUgb2YgQSg8Yj5pbnQ8L2I+LCA8Yj5pbnQ8L2I+LCA8Yj5TdHJpbmc8L2I+KTwvaHRtbD4iICJ0cnVlIgorY2xhc3MgQSB7CisgICAgQSgpIHsKKyAgICAgICAgbmV3IEE8Y2FyZXQ+KDEsMSwiNCIpOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NoYW5nZU1ldGhvZFNpZ25hdHVyZUZyb21Vc2FnZS9iZWZvcmU5LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NoYW5nZU1ldGhvZFNpZ25hdHVyZUZyb21Vc2FnZS9iZWZvcmU5LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDIxMmVmYgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY2hhbmdlTWV0aG9kU2lnbmF0dXJlRnJvbVVzYWdlL2JlZm9yZTkuamF2YQpAQCAtMCwwICsxLDYgQEAKKy8vICJBZGQgJ2ludCcgYXMgMm5kIHBhcmFtZXRlciB0byBtZXRob2QgJ2YnIiAidHJ1ZSIKKyBwdWJsaWMgY2xhc3MgUyB7CisgICAgIHZvaWQgZihpbnQgaywgaW50Li4uIGFyZ3MpIHsKKyAgICAgZigxLDEsbnVsbCk8Y2FyZXQ+Oy8vIC0+IGYoMSwxLG51bGwpCisgICAgIH0KKyB9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NoYW5nZU1ldGhvZFNpZ25hdHVyZUZyb21Vc2FnZS9iZWZvcmVBc3NpZ25hYmxlUGFyYW1UeXBlcy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jaGFuZ2VNZXRob2RTaWduYXR1cmVGcm9tVXNhZ2UvYmVmb3JlQXNzaWduYWJsZVBhcmFtVHlwZXMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOGIzMjViCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jaGFuZ2VNZXRob2RTaWduYXR1cmVGcm9tVXNhZ2UvYmVmb3JlQXNzaWduYWJsZVBhcmFtVHlwZXMuamF2YQpAQCAtMCwwICsxLDIyIEBACisvLyAiQWRkICdCJyBhcyAybmQgcGFyYW1ldGVyIHRvIG1ldGhvZCAnZm9vJyIgInRydWUiCitwdWJsaWMgY2xhc3MgUyB7CisKKyAgdm9pZCBmb28oQSBhKSB7CisgIH0KKworICB2b2lkIGJhcihCIGIpIHsKKyAgICBBIGEgPSBnZXRBKCk7CisgICAgZm9vKGEsIDxjYXJldD5iKTsKKyAgfQorCisgIEEgZ2V0QSgpIHsKKyAgICByZXR1cm4gbmV3IEEoKTsKKyAgfQorfQorCitjbGFzcyBBIHsKK30KKworY2xhc3MgQiBleHRlbmRzIEEgeworfQorICAKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NoYW5nZU1ldGhvZFNpZ25hdHVyZUZyb21Vc2FnZS9iZWZvcmVBc3NpZ25hYmxlUGFyYW1UeXBlc0ZpcnN0TmV3LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NoYW5nZU1ldGhvZFNpZ25hdHVyZUZyb21Vc2FnZS9iZWZvcmVBc3NpZ25hYmxlUGFyYW1UeXBlc0ZpcnN0TmV3LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODUzMjY3YQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY2hhbmdlTWV0aG9kU2lnbmF0dXJlRnJvbVVzYWdlL2JlZm9yZUFzc2lnbmFibGVQYXJhbVR5cGVzRmlyc3ROZXcuamF2YQpAQCAtMCwwICsxLDIyIEBACisvLyAiQWRkICdCJyBhcyAxc3QgcGFyYW1ldGVyIHRvIG1ldGhvZCAnZm9vJyIgInRydWUiCitwdWJsaWMgY2xhc3MgUyB7CisKKyAgdm9pZCBmb28oQSBhKSB7CisgIH0KKworICB2b2lkIGJhcihCIGIpIHsKKyAgICBBIGEgPSBnZXRBKCk7CisgICAgZm9vKDxjYXJldD5iLCBhKTsKKyAgfQorCisgIEEgZ2V0QSgpIHsKKyAgICByZXR1cm4gbmV3IEEoKTsKKyAgfQorfQorCitjbGFzcyBBIHsKK30KKworY2xhc3MgQiBleHRlbmRzIEEgeworfQorICAKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NoYW5nZU1ldGhvZFNpZ25hdHVyZUZyb21Vc2FnZS9iZWZvcmVBc3NpZ25hYmxlUGFyYW1UeXBlc0ZpcnN0TmV3UmV2ZXJzZS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jaGFuZ2VNZXRob2RTaWduYXR1cmVGcm9tVXNhZ2UvYmVmb3JlQXNzaWduYWJsZVBhcmFtVHlwZXNGaXJzdE5ld1JldmVyc2UuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40Mjg5YmNiCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jaGFuZ2VNZXRob2RTaWduYXR1cmVGcm9tVXNhZ2UvYmVmb3JlQXNzaWduYWJsZVBhcmFtVHlwZXNGaXJzdE5ld1JldmVyc2UuamF2YQpAQCAtMCwwICsxLDIyIEBACisvLyAiQWRkICdBJyBhcyAybmQgcGFyYW1ldGVyIHRvIG1ldGhvZCAnZm9vJyIgInRydWUiCitwdWJsaWMgY2xhc3MgUyB7CisKKyAgdm9pZCBmb28oQSBhKSB7CisgIH0KKworICB2b2lkIGJhcihCIGIpIHsKKyAgICBBIGEgPSBnZXRBKCk7CisgICAgZm9vKDxjYXJldD5iLCBhKTsKKyAgfQorCisgIEEgZ2V0QSgpIHsKKyAgICByZXR1cm4gbmV3IEEoKTsKKyAgfQorfQorCitjbGFzcyBBIHsKK30KKworY2xhc3MgQiBleHRlbmRzIEEgeworfQorICAKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NoYW5nZU1ldGhvZFNpZ25hdHVyZUZyb21Vc2FnZS9iZWZvcmVBc3NpZ25hYmxlUGFyYW1UeXBlc1JldmVyc2UuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY2hhbmdlTWV0aG9kU2lnbmF0dXJlRnJvbVVzYWdlL2JlZm9yZUFzc2lnbmFibGVQYXJhbVR5cGVzUmV2ZXJzZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM2MzE4MjAKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NoYW5nZU1ldGhvZFNpZ25hdHVyZUZyb21Vc2FnZS9iZWZvcmVBc3NpZ25hYmxlUGFyYW1UeXBlc1JldmVyc2UuamF2YQpAQCAtMCwwICsxLDIyIEBACisvLyAiQWRkICdBJyBhcyAxc3QgcGFyYW1ldGVyIHRvIG1ldGhvZCAnZm9vJyIgInRydWUiCitwdWJsaWMgY2xhc3MgUyB7CisKKyAgdm9pZCBmb28oQSBhKSB7CisgIH0KKworICB2b2lkIGJhcihCIGIpIHsKKyAgICBBIGEgPSBnZXRBKCk7CisgICAgZm9vKGEsIDxjYXJldD5iKTsKKyAgfQorCisgIEEgZ2V0QSgpIHsKKyAgICByZXR1cm4gbmV3IEEoKTsKKyAgfQorfQorCitjbGFzcyBBIHsKK30KKworY2xhc3MgQiBleHRlbmRzIEEgeworfQorICAKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NoYW5nZU1ldGhvZFNpZ25hdHVyZUZyb21Vc2FnZS9iZWZvcmVDb21tb25DaGFuZ2VSZXZlcnNlLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NoYW5nZU1ldGhvZFNpZ25hdHVyZUZyb21Vc2FnZS9iZWZvcmVDb21tb25DaGFuZ2VSZXZlcnNlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjJjNTc3YwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY2hhbmdlTWV0aG9kU2lnbmF0dXJlRnJvbVVzYWdlL2JlZm9yZUNvbW1vbkNoYW5nZVJldmVyc2UuamF2YQpAQCAtMCwwICsxLDExIEBACisvLyAiPGh0bWw+IENoYW5nZSBzaWduYXR1cmUgb2YgZm9vKDxiPkFycmF5TGlzdCZsdDtJbnRlZ2VyJmd0OzwvYj4sIDxiPkFycmF5TGlzdCZsdDtJbnRlZ2VyJmd0OzwvYj4sIEFycmF5TGlzdCZsdDtJbnRlZ2VyJmd0OywgQXJyYXlMaXN0Jmx0O0ludGVnZXImZ3Q7KTwvaHRtbD4iICJ0cnVlIgoraW1wb3J0IGphdmEudXRpbC4qOworCitjbGFzcyBUZXN0IHsKKworICAgIHB1YmxpYyB2b2lkIGZvbyhBcnJheUxpc3Q8SW50ZWdlcj4gbCwgQXJyYXlMaXN0PEludGVnZXI+IGwxKSB7fQorCisgICAgeworICAgICAgZm9vKG5ldyA8Y2FyZXQ+QXJyYXlMaXN0PEludGVnZXI+KCksIG5ldyBBcnJheUxpc3Q8SW50ZWdlcj4oKSwgbmV3IEFycmF5TGlzdDxJbnRlZ2VyPigpLCBuZXcgQXJyYXlMaXN0PEludGVnZXI+KCkpOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NoYW5nZU1ldGhvZFNpZ25hdHVyZUZyb21Vc2FnZS9iZWZvcmVFcmFzZVR5cGVJZlN1YnN0aXR1dGlvbk5vdEZvdW5kLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NoYW5nZU1ldGhvZFNpZ25hdHVyZUZyb21Vc2FnZS9iZWZvcmVFcmFzZVR5cGVJZlN1YnN0aXR1dGlvbk5vdEZvdW5kLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjE5NGQwMAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY2hhbmdlTWV0aG9kU2lnbmF0dXJlRnJvbVVzYWdlL2JlZm9yZUVyYXNlVHlwZUlmU3Vic3RpdHV0aW9uTm90Rm91bmQuamF2YQpAQCAtMCwwICsxLDEyIEBACisvLyAiQWRkICdGb288VHlwZVBhcmFtTmFtZT4nIGFzIDFzdCBwYXJhbWV0ZXIgdG8gbWV0aG9kICdCYXInIiAidHJ1ZSIKKyBwdWJsaWMgY2xhc3MgQmFyIHsKKyAgICAgQmFyKFN0cmluZyBhcmdzKSB7CisKKyAgICAgfQorIH0KKworY2xhc3MgRm9vPFR5cGVQYXJhbU5hbWU+IHsKKyAgICB2b2lkIGJhcigpIHsKKyAgICAgIEJhciBiYXIgPSBuZXcgQmFyKHRoPGNhcmV0PmlzLCAiIik7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY2hhbmdlTWV0aG9kU2lnbmF0dXJlRnJvbVVzYWdlL2JlZm9yZUVyYXNlVHlwZUlmU3Vic3RpdHV0aW9uTm90Rm91bmROb3RBQ29uc3RydWN0b3IuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY2hhbmdlTWV0aG9kU2lnbmF0dXJlRnJvbVVzYWdlL2JlZm9yZUVyYXNlVHlwZUlmU3Vic3RpdHV0aW9uTm90Rm91bmROb3RBQ29uc3RydWN0b3IuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OTYyM2M0Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jaGFuZ2VNZXRob2RTaWduYXR1cmVGcm9tVXNhZ2UvYmVmb3JlRXJhc2VUeXBlSWZTdWJzdGl0dXRpb25Ob3RGb3VuZE5vdEFDb25zdHJ1Y3Rvci5qYXZhCkBAIC0wLDAgKzEsMTIgQEAKKy8vICJBZGQgJ0ZvbzxUeXBlUGFyYW1OYW1lPicgYXMgMXN0IHBhcmFtZXRlciB0byBtZXRob2QgJ2JhciciICJ0cnVlIgorIHB1YmxpYyBjbGFzcyBCYXIgeworICAgICBzdGF0aWMgdm9pZCBiYXIoU3RyaW5nIGFyZ3MpIHsKKworICAgICB9CisgfQorCitjbGFzcyBGb288VHlwZVBhcmFtTmFtZT4geworICAgIHZvaWQgYmFyKCkgeworICAgICAgQmFyLmJhcih0aDxjYXJldD5pcywgIiIpOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NoYW5nZU1ldGhvZFNpZ25hdHVyZUZyb21Vc2FnZS9iZWZvcmVFeGlzdFNpZ25hdHVyZS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jaGFuZ2VNZXRob2RTaWduYXR1cmVGcm9tVXNhZ2UvYmVmb3JlRXhpc3RTaWduYXR1cmUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZTlkYzkzCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jaGFuZ2VNZXRob2RTaWduYXR1cmVGcm9tVXNhZ2UvYmVmb3JlRXhpc3RTaWduYXR1cmUuamF2YQpAQCAtMCwwICsxLDEyIEBACisvLyAiQWRkICdpbnQnIGFzIDFzdCBwYXJhbWV0ZXIgdG8gbWV0aG9kICdmJyIgImZhbHNlIgorcHVibGljIGNsYXNzIEZvbyB7CisgICAgdm9pZCBmb28oQmFyIGYpIHsKKyAgICAgICAgZi5mPGNhcmV0PigyKTsKKyAgICB9Cit9CitjbGFzcyBCYXIgeworICAgIHByaXZhdGUgdm9pZCBmKGludCBpKXt9CisgICAgcHVibGljIHZvaWQgZihTdHJpbmcgcyl7fQorCisKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY2hhbmdlTWV0aG9kU2lnbmF0dXJlRnJvbVVzYWdlL2JlZm9yZU5ld1BhcmFtTmFtZS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jaGFuZ2VNZXRob2RTaWduYXR1cmVGcm9tVXNhZ2UvYmVmb3JlTmV3UGFyYW1OYW1lLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTQxOWJjOAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY2hhbmdlTWV0aG9kU2lnbmF0dXJlRnJvbVVzYWdlL2JlZm9yZU5ld1BhcmFtTmFtZS5qYXZhCkBAIC0wLDAgKzEsMTAgQEAKKy8vICJBZGQgJ2ludCcgYXMgMXN0IHBhcmFtZXRlciB0byBtZXRob2QgJ2YnIiAidHJ1ZSIKKyBwdWJsaWMgY2xhc3MgUyB7CisgICAgIHZvaWQgZihTdHJpbmcgYXJncykgeworCisgICAgIH0KKworICAgICB2b2lkIGJhcigpIHsKKyAgICAgICBmKDE8Y2FyZXQ+MSwgIiIpOworICAgICB9CisgfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jaGFuZ2VNZXRob2RTaWduYXR1cmVGcm9tVXNhZ2UvYmVmb3JlTm9uQXNzaWduYWJsZVBhcmFtVHlwZXMuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY2hhbmdlTWV0aG9kU2lnbmF0dXJlRnJvbVVzYWdlL2JlZm9yZU5vbkFzc2lnbmFibGVQYXJhbVR5cGVzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTIxZDQ3ZQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY2hhbmdlTWV0aG9kU2lnbmF0dXJlRnJvbVVzYWdlL2JlZm9yZU5vbkFzc2lnbmFibGVQYXJhbVR5cGVzLmphdmEKQEAgLTAsMCArMSwyMiBAQAorLy8gIkFkZCAnU3RyaW5nJyBhcyAybmQgcGFyYW1ldGVyIHRvIG1ldGhvZCAnZm9vJyIgInRydWUiCitwdWJsaWMgY2xhc3MgUyB7CisKKyAgdm9pZCBmb28oQSBhKSB7CisgIH0KKworICB2b2lkIGJhcihCIGIpIHsKKyAgICBBIGEgPSBnZXRBKCk7CisgICAgZm9vKGEsIDxjYXJldD4iIik7CisgIH0KKworICBBIGdldEEoKSB7CisgICAgcmV0dXJuIG5ldyBBKCk7CisgIH0KK30KKworY2xhc3MgQSB7Cit9CisKK2NsYXNzIEIgZXh0ZW5kcyBBIHsKK30KKyAgClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jaGFuZ2VNZXRob2RTaWduYXR1cmVGcm9tVXNhZ2UvYmVmb3JlTm90QXZhaWxhYmxlLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NoYW5nZU1ldGhvZFNpZ25hdHVyZUZyb21Vc2FnZS9iZWZvcmVOb3RBdmFpbGFibGUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMzE4NTU3Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jaGFuZ2VNZXRob2RTaWduYXR1cmVGcm9tVXNhZ2UvYmVmb3JlTm90QXZhaWxhYmxlLmphdmEKQEAgLTAsMCArMSw2IEBACisvLyAiQ2hhbmdlIDFzdCBwYXJhbWV0ZXIgb2YgbWV0aG9kICdwYXJzZUludCcgZnJvbSAnU3RyaW5nJyB0byAnaW50JyIgImZhbHNlIgorY2xhc3MgQSB7CisgICAgcHVibGljIHZvaWQgZm9vKCkgeworICAgICAgICA8Y2FyZXQ+SW50ZWdlci5wYXJzZUludCgxKTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jaGFuZ2VNZXRob2RTaWduYXR1cmVGcm9tVXNhZ2UvYmVmb3JlUXVhbGlmaWVkVHlwZXMuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY2hhbmdlTWV0aG9kU2lnbmF0dXJlRnJvbVVzYWdlL2JlZm9yZVF1YWxpZmllZFR5cGVzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY0Y2Q5NwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY2hhbmdlTWV0aG9kU2lnbmF0dXJlRnJvbVVzYWdlL2JlZm9yZVF1YWxpZmllZFR5cGVzLmphdmEKQEAgLTAsMCArMSwxMiBAQAorLy8gIkFkZCAnSW5uZXIxJyBhcyAxc3QgcGFyYW1ldGVyIHRvIG1ldGhvZCAnSW5uZXIyJyIgInRydWUiCitjbGFzcyBDb29sVGVzdCB7CitjbGFzcyBJbm5lcjEge30KKwordm9pZCBtZXRob2QoKSB7CituZXcgSW5uZXIyKG5ldyBJbjxjYXJldD5uZXIxKCkpOworfQorCitjbGFzcyBJbm5lcjIgeworSW5uZXIyKCkgeyB9Cit9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jaGFuZ2VNZXRob2RTaWduYXR1cmVGcm9tVXNhZ2UvYmVmb3JlVmFyYXJnczEuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY2hhbmdlTWV0aG9kU2lnbmF0dXJlRnJvbVVzYWdlL2JlZm9yZVZhcmFyZ3MxLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGVhMTVhZAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY2hhbmdlTWV0aG9kU2lnbmF0dXJlRnJvbVVzYWdlL2JlZm9yZVZhcmFyZ3MxLmphdmEKQEAgLTAsMCArMSw2IEBACisvLyAiQWRkICdTdHJpbmcnIGFzIDFzdCBwYXJhbWV0ZXIgdG8gbWV0aG9kICdmJyIgInRydWUiCisgcHVibGljIGNsYXNzIFMgeworICAgICB2b2lkIGYoaW50Li4uIGFyZ3MpIHsKKyAgICAgZigiIiwxLDEpPGNhcmV0PjsKKyAgICAgfQorIH0KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY2hhbmdlTWV0aG9kU2lnbmF0dXJlRnJvbVVzYWdlL2JlZm9yZVZhcmFyZ3MyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NoYW5nZU1ldGhvZFNpZ25hdHVyZUZyb21Vc2FnZS9iZWZvcmVWYXJhcmdzMi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIzMzYyZDkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NoYW5nZU1ldGhvZFNpZ25hdHVyZUZyb21Vc2FnZS9iZWZvcmVWYXJhcmdzMi5qYXZhCkBAIC0wLDAgKzEsNiBAQAorLy8gIkFkZCAnU3RyaW5nJyBhcyAxc3QgcGFyYW1ldGVyIHRvIG1ldGhvZCAnZiciICJ0cnVlIgorIHB1YmxpYyBjbGFzcyBTIHsKKyAgICAgdm9pZCBmKGludC4uLiBhcmdzKSB7CisgICAgIGYoIiIsbnVsbCk8Y2FyZXQ+OworICAgICB9CisgfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jaGFuZ2VNZXRob2RTaWduYXR1cmVGcm9tVXNhZ2UvYmVmb3JlVmFyYXJnczJBcnJheS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jaGFuZ2VNZXRob2RTaWduYXR1cmVGcm9tVXNhZ2UvYmVmb3JlVmFyYXJnczJBcnJheS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFmNDYzZWUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NoYW5nZU1ldGhvZFNpZ25hdHVyZUZyb21Vc2FnZS9iZWZvcmVWYXJhcmdzMkFycmF5LmphdmEKQEAgLTAsMCArMSw2IEBACisvLyAiQWRkICdTdHJpbmcnIGFzIDJuZCBwYXJhbWV0ZXIgdG8gbWV0aG9kICdmJyIgImZhbHNlIgorIHB1YmxpYyBjbGFzcyBTIHsKKyAgICAgdm9pZCBmKGludC4uLiBhcmdzKSB7CisgICAgIGYoMSwxLCAiIik8Y2FyZXQ+OworICAgICB9CisgfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jaGFuZ2VOZXdPcGVyYXRvclR5cGUvYWZ0ZXIxLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NoYW5nZU5ld09wZXJhdG9yVHlwZS9hZnRlcjEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOGE5MmQ4Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jaGFuZ2VOZXdPcGVyYXRvclR5cGUvYWZ0ZXIxLmphdmEKQEAgLTAsMCArMSw5IEBACisvLyAiQ2hhbmdlICduZXcgT2JqZWN0KCknIHRvICduZXcgU3RyaW5nKCknIiAidHJ1ZSIKK3B1YmxpYyBjbGFzcyBUVFQgeworICAgIHZvaWQgZigpIHsKKyAgICAgICAgU3RyaW5nIHMgPSBuZXcgU3RyaW5nKDxjYXJldD4pOworICAgICAgICBpbnRbXVtdIGkgPSBuZXcgT2JqZWN0KCk7CisgICAgICAgIGludFtdIGYgPSBuZXcgaW50WzBdW107CisKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NoYW5nZU5ld09wZXJhdG9yVHlwZS9hZnRlcjIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY2hhbmdlTmV3T3BlcmF0b3JUeXBlL2FmdGVyMi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjExOTdiMmYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NoYW5nZU5ld09wZXJhdG9yVHlwZS9hZnRlcjIuamF2YQpAQCAtMCwwICsxLDkgQEAKKy8vICJDaGFuZ2UgJ25ldyBPYmplY3QoKScgdG8gJ25ldyBpbnRbXVtdJyIgInRydWUiCitwdWJsaWMgY2xhc3MgVFRUIHsKKyAgICB2b2lkIGYoKSB7CisgICAgICAgIFN0cmluZyBzID0gbmV3IE9iamVjdCgpOworICAgICAgICBpbnRbXVtdIGkgPSBuZXcgaW50WzxjYXJldD48c2VsZWN0aW9uPjA8L3NlbGVjdGlvbj5dW107CisgICAgICAgIGludFtdIGYgPSBuZXcgaW50WzBdW107CisKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NoYW5nZU5ld09wZXJhdG9yVHlwZS9hZnRlcjMuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY2hhbmdlTmV3T3BlcmF0b3JUeXBlL2FmdGVyMy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQzYmU4MDcKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NoYW5nZU5ld09wZXJhdG9yVHlwZS9hZnRlcjMuamF2YQpAQCAtMCwwICsxLDkgQEAKKy8vICJDaGFuZ2UgJ25ldyBUVFRbMF1bXScgdG8gJ25ldyBUVFRbXSciICJ0cnVlIgorcHVibGljIGNsYXNzIFRUVCB7CisgICAgdm9pZCBmKCkgeworICAgICAgICBTdHJpbmcgcyA9IG5ldyBPYmplY3QoKTsKKyAgICAgICAgaW50W11bXSBpID0gbmV3IE9iamVjdCgpOworICAgICAgICBUVFRbXSBmID0gbmV3IFRUVFswXTxjYXJldD47CisKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NoYW5nZU5ld09wZXJhdG9yVHlwZS9hZnRlcjQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY2hhbmdlTmV3T3BlcmF0b3JUeXBlL2FmdGVyNC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI4ODUyNmEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NoYW5nZU5ld09wZXJhdG9yVHlwZS9hZnRlcjQuamF2YQpAQCAtMCwwICsxLDggQEAKKy8vICJDaGFuZ2UgJ25ldyBBcnJheUxpc3Q8SW50ZWdlcj4oKScgdG8gJ25ldyBBcnJheUxpc3Q8U3RyaW5nPigpJyIgInRydWUiCitpbXBvcnQgamF2YS51dGlsLio7CisKK2NsYXNzIFJSUiB7CisgIHZvaWQgZigpIHsKKyAgICAgTGlzdDxTdHJpbmc+IGwgPSBuZXcgQXJyYXlMaXN0PD4oPGNhcmV0Pik7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NoYW5nZU5ld09wZXJhdG9yVHlwZS9hZnRlckFub255bW91c0NsYXNzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NoYW5nZU5ld09wZXJhdG9yVHlwZS9hZnRlckFub255bW91c0NsYXNzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2E3MTIxZDQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NoYW5nZU5ld09wZXJhdG9yVHlwZS9hZnRlckFub255bW91c0NsYXNzLmphdmEKQEAgLTAsMCArMSw5IEBACisvLyAiQ2hhbmdlICduZXcgUnVubmFibGUoKSB7Li4ufScgdG8gJ25ldyBTdHJpbmdCdWZmZXIoKSciICJ0cnVlIgorCitjbGFzcyBYIHsKKyBwdWJsaWMgU3RyaW5nQnVmZmVyIGJ1ZiA9IG5ldyBTdHJpbmdCdWZmZXIoKXsKKyAgICBwdWJsaWMgdm9pZCBydW4oKXsKKyAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigic210aCIpOworICAgIH0KKyAgfTsKKyB9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NoYW5nZU5ld09wZXJhdG9yVHlwZS9hZnRlckFyZ3MuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY2hhbmdlTmV3T3BlcmF0b3JUeXBlL2FmdGVyQXJncy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQzMzliYmUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NoYW5nZU5ld09wZXJhdG9yVHlwZS9hZnRlckFyZ3MuamF2YQpAQCAtMCwwICsxLDggQEAKKy8vICJDaGFuZ2UgJ25ldyBBcnJheUxpc3Q8SW50ZWdlcj4oLi4uKScgdG8gJ25ldyBBcnJheUxpc3Q8U3RyaW5nPigpJyIgInRydWUiCitpbXBvcnQgamF2YS51dGlsLio7CisKK2NsYXNzIFJSUiB7CisgIHZvaWQgZigpIHsKKyAgICAgTGlzdDxTdHJpbmc+IGwgPSBuZXcgQXJyYXlMaXN0PD4oMjxjYXJldD4pOworICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NoYW5nZU5ld09wZXJhdG9yVHlwZS9hZnRlckNhbkNvbGxhcHNlRGlhbW9uZHMuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY2hhbmdlTmV3T3BlcmF0b3JUeXBlL2FmdGVyQ2FuQ29sbGFwc2VEaWFtb25kcy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM2YTFiZmIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NoYW5nZU5ld09wZXJhdG9yVHlwZS9hZnRlckNhbkNvbGxhcHNlRGlhbW9uZHMuamF2YQpAQCAtMCwwICsxLDEyIEBACisvLyAiQ2hhbmdlICduZXcgRm9vPEludGVnZXI+KCknIHRvICduZXcgRm9vPE51bWJlcj4oKSciICJ0cnVlIgorCitjbGFzcyBGb288VD4geworICAgICAgICBGb28oVCB0KSB7fQorICAgICAgICBGb28oKSB7fQorfQorCitjbGFzcyBDb25zdHJ1Y3RvcnMgeworICAgICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisgICAgICAgICAgICAgICAgRm9vPE51bWJlcj4gZm9vMiA9IG5ldyBGb288PigpOworICAgICAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NoYW5nZU5ld09wZXJhdG9yVHlwZS9hZnRlckNhbnRDb2xsYXBzZURpYW1vbmRzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NoYW5nZU5ld09wZXJhdG9yVHlwZS9hZnRlckNhbnRDb2xsYXBzZURpYW1vbmRzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmE3YmRlYwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY2hhbmdlTmV3T3BlcmF0b3JUeXBlL2FmdGVyQ2FudENvbGxhcHNlRGlhbW9uZHMuamF2YQpAQCAtMCwwICsxLDEyIEBACisvLyAiQ2hhbmdlICduZXcgRm9vPEludGVnZXI+KC4uLiknIHRvICduZXcgRm9vPE51bWJlcj4oKSciICJ0cnVlIgorCitjbGFzcyBGb288VD4geworICAgICAgICBGb28oVCB0KSB7fQorICAgICAgICBGb28oKSB7fQorfQorCitjbGFzcyBDb25zdHJ1Y3RvcnMgeworICAgICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisgICAgICAgICAgICAgICAgRm9vPE51bWJlcj4gZm9vMiA9IG5ldyBGb288TnVtYmVyPigxKTsKKyAgICAgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jaGFuZ2VOZXdPcGVyYXRvclR5cGUvYWZ0ZXJOb25QcmltaXRpdmVBcnJheURpbWVuc2lvbnMuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY2hhbmdlTmV3T3BlcmF0b3JUeXBlL2FmdGVyTm9uUHJpbWl0aXZlQXJyYXlEaW1lbnNpb25zLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjU4ZWRmMwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY2hhbmdlTmV3T3BlcmF0b3JUeXBlL2FmdGVyTm9uUHJpbWl0aXZlQXJyYXlEaW1lbnNpb25zLmphdmEKQEAgLTAsMCArMSw1IEBACisvLyAiQ2hhbmdlICduZXcgWFs0Ml0nIHRvICduZXcgbG9uZ1tdJyIgInRydWUiCisKKyBjbGFzcyBYIHsKKyBwdWJsaWMgbG9uZ1tdIGZvbygpIHsgcmV0dXJuIG5ldyBsb25nWzQyXTsgfQorIH0KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY2hhbmdlTmV3T3BlcmF0b3JUeXBlL2JlZm9yZTEuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY2hhbmdlTmV3T3BlcmF0b3JUeXBlL2JlZm9yZTEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMTRmY2ExCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jaGFuZ2VOZXdPcGVyYXRvclR5cGUvYmVmb3JlMS5qYXZhCkBAIC0wLDAgKzEsOSBAQAorLy8gIkNoYW5nZSAnbmV3IE9iamVjdCgpJyB0byAnbmV3IFN0cmluZygpJyIgInRydWUiCitwdWJsaWMgY2xhc3MgVFRUIHsKKyAgICB2b2lkIGYoKSB7CisgICAgICAgIDxjYXJldD5TdHJpbmcgcyA9IG5ldyBPYmplY3QoKTsKKyAgICAgICAgaW50W11bXSBpID0gbmV3IE9iamVjdCgpOworICAgICAgICBpbnRbXSBmID0gbmV3IGludFswXVtdOworCisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jaGFuZ2VOZXdPcGVyYXRvclR5cGUvYmVmb3JlMi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jaGFuZ2VOZXdPcGVyYXRvclR5cGUvYmVmb3JlMi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJlOGIxMWEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NoYW5nZU5ld09wZXJhdG9yVHlwZS9iZWZvcmUyLmphdmEKQEAgLTAsMCArMSw5IEBACisvLyAiQ2hhbmdlICduZXcgT2JqZWN0KCknIHRvICduZXcgaW50W11bXSciICJ0cnVlIgorcHVibGljIGNsYXNzIFRUVCB7CisgICAgdm9pZCBmKCkgeworICAgICAgICBTdHJpbmcgcyA9IG5ldyBPYmplY3QoKTsKKyAgICAgICAgaW50W11bXSBpID0gbmV3IE9iamVjdCgpOzxjYXJldD4KKyAgICAgICAgaW50W10gZiA9IG5ldyBpbnRbMF1bXTsKKworICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY2hhbmdlTmV3T3BlcmF0b3JUeXBlL2JlZm9yZTMuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY2hhbmdlTmV3T3BlcmF0b3JUeXBlL2JlZm9yZTMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZDk0ZTkzCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jaGFuZ2VOZXdPcGVyYXRvclR5cGUvYmVmb3JlMy5qYXZhCkBAIC0wLDAgKzEsOSBAQAorLy8gIkNoYW5nZSAnbmV3IFRUVFswXVtdJyB0byAnbmV3IFRUVFtdJyIgInRydWUiCitwdWJsaWMgY2xhc3MgVFRUIHsKKyAgICB2b2lkIGYoKSB7CisgICAgICAgIFN0cmluZyBzID0gbmV3IE9iamVjdCgpOworICAgICAgICBpbnRbXVtdIGkgPSBuZXcgT2JqZWN0KCk7CisgICAgICAgIFRUVFtdIGYgPSA8Y2FyZXQ+bmV3IFRUVFswXVtdOworCisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jaGFuZ2VOZXdPcGVyYXRvclR5cGUvYmVmb3JlNC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jaGFuZ2VOZXdPcGVyYXRvclR5cGUvYmVmb3JlNC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNiMTkwMTcKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NoYW5nZU5ld09wZXJhdG9yVHlwZS9iZWZvcmU0LmphdmEKQEAgLTAsMCArMSw4IEBACisvLyAiQ2hhbmdlICduZXcgQXJyYXlMaXN0PEludGVnZXI+KCknIHRvICduZXcgQXJyYXlMaXN0PFN0cmluZz4oKSciICJ0cnVlIgoraW1wb3J0IGphdmEudXRpbC4qOworCitjbGFzcyBSUlIgeworICB2b2lkIGYoKSB7CisgICAgIExpc3Q8U3RyaW5nPiBsID0gbmV3IDxjYXJldD5BcnJheUxpc3Q8SW50ZWdlcj4oKTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY2hhbmdlTmV3T3BlcmF0b3JUeXBlL2JlZm9yZUFub255bW91c0NsYXNzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NoYW5nZU5ld09wZXJhdG9yVHlwZS9iZWZvcmVBbm9ueW1vdXNDbGFzcy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY3NTBjNGUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NoYW5nZU5ld09wZXJhdG9yVHlwZS9iZWZvcmVBbm9ueW1vdXNDbGFzcy5qYXZhCkBAIC0wLDAgKzEsOSBAQAorLy8gIkNoYW5nZSAnbmV3IFJ1bm5hYmxlKCkgey4uLn0nIHRvICduZXcgU3RyaW5nQnVmZmVyKCknIiAidHJ1ZSIKKworY2xhc3MgWCB7CisgcHVibGljIFN0cmluZ0J1ZmZlciBidWYgPSA8Y2FyZXQ+bmV3IFJ1bm5hYmxlKCl7CisgICAgcHVibGljIHZvaWQgcnVuKCl7CisgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oInNtdGgiKTsKKyAgICB9CisgIH07CisgfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jaGFuZ2VOZXdPcGVyYXRvclR5cGUvYmVmb3JlQXJncy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jaGFuZ2VOZXdPcGVyYXRvclR5cGUvYmVmb3JlQXJncy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZmNjkzOTUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NoYW5nZU5ld09wZXJhdG9yVHlwZS9iZWZvcmVBcmdzLmphdmEKQEAgLTAsMCArMSw4IEBACisvLyAiQ2hhbmdlICduZXcgQXJyYXlMaXN0PEludGVnZXI+KC4uLiknIHRvICduZXcgQXJyYXlMaXN0PFN0cmluZz4oKSciICJ0cnVlIgoraW1wb3J0IGphdmEudXRpbC4qOworCitjbGFzcyBSUlIgeworICB2b2lkIGYoKSB7CisgICAgIExpc3Q8U3RyaW5nPiBsID0gbmV3IDxjYXJldD5BcnJheUxpc3Q8SW50ZWdlcj4oMik7CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY2hhbmdlTmV3T3BlcmF0b3JUeXBlL2JlZm9yZUNhbkNvbGxhcHNlRGlhbW9uZHMuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY2hhbmdlTmV3T3BlcmF0b3JUeXBlL2JlZm9yZUNhbkNvbGxhcHNlRGlhbW9uZHMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOWZhYjUzCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jaGFuZ2VOZXdPcGVyYXRvclR5cGUvYmVmb3JlQ2FuQ29sbGFwc2VEaWFtb25kcy5qYXZhCkBAIC0wLDAgKzEsMTIgQEAKKy8vICJDaGFuZ2UgJ25ldyBGb288SW50ZWdlcj4oKScgdG8gJ25ldyBGb288TnVtYmVyPigpJyIgInRydWUiCisKK2NsYXNzIEZvbzxUPiB7CisgICAgICAgIEZvbyhUIHQpIHt9CisgICAgICAgIEZvbygpIHt9Cit9CisKK2NsYXNzIENvbnN0cnVjdG9ycyB7CisgICAgICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKyAgICAgICAgICAgICAgICBGb288TnVtYmVyPiBmb28yID0gbmV3IEZvbzxJbnQ8Y2FyZXQ+ZWdlcj4oKTsKKyAgICAgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jaGFuZ2VOZXdPcGVyYXRvclR5cGUvYmVmb3JlQ2FudENvbGxhcHNlRGlhbW9uZHMuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY2hhbmdlTmV3T3BlcmF0b3JUeXBlL2JlZm9yZUNhbnRDb2xsYXBzZURpYW1vbmRzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDFhZTM2YwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY2hhbmdlTmV3T3BlcmF0b3JUeXBlL2JlZm9yZUNhbnRDb2xsYXBzZURpYW1vbmRzLmphdmEKQEAgLTAsMCArMSwxMiBAQAorLy8gIkNoYW5nZSAnbmV3IEZvbzxJbnRlZ2VyPiguLi4pJyB0byAnbmV3IEZvbzxOdW1iZXI+KCknIiAidHJ1ZSIKKworY2xhc3MgRm9vPFQ+IHsKKyAgICAgICAgRm9vKFQgdCkge30KKyAgICAgICAgRm9vKCkge30KK30KKworY2xhc3MgQ29uc3RydWN0b3JzIHsKKyAgICAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworICAgICAgICAgICAgICAgIEZvbzxOdW1iZXI+IGZvbzIgPSBuZXcgRm9vPEludDxjYXJldD5lZ2VyPigxKTsKKyAgICAgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jaGFuZ2VOZXdPcGVyYXRvclR5cGUvYmVmb3JlTm9uUHJpbWl0aXZlQXJyYXlEaW1lbnNpb25zLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NoYW5nZU5ld09wZXJhdG9yVHlwZS9iZWZvcmVOb25QcmltaXRpdmVBcnJheURpbWVuc2lvbnMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNjk4ZWU5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jaGFuZ2VOZXdPcGVyYXRvclR5cGUvYmVmb3JlTm9uUHJpbWl0aXZlQXJyYXlEaW1lbnNpb25zLmphdmEKQEAgLTAsMCArMSw1IEBACisvLyAiQ2hhbmdlICduZXcgWFs0Ml0nIHRvICduZXcgbG9uZ1tdJyIgInRydWUiCisKKyBjbGFzcyBYIHsKKyBwdWJsaWMgbG9uZ1tdIGZvbygpIHsgcmV0dXJuIDxjYXJldD5uZXcgWFs0Ml07IH0KKyB9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NoYW5nZU5ld09wZXJhdG9yVHlwZS9iZWZvcmVQcmltaXRpdmUuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY2hhbmdlTmV3T3BlcmF0b3JUeXBlL2JlZm9yZVByaW1pdGl2ZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI2NWIyOWYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NoYW5nZU5ld09wZXJhdG9yVHlwZS9iZWZvcmVQcmltaXRpdmUuamF2YQpAQCAtMCwwICsxLDUgQEAKKy8vICJDaGFuZ2UgJ25ldyBYKCknIHRvICduZXcgbG9uZygpJyIgImZhbHNlIgorCisgY2xhc3MgWCB7CisgcHVibGljIGxvbmcgZm9vKCkgeyByZXR1cm4gPGNhcmV0Pm5ldyBYKCk7IH0KKyB9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NoYW5nZVBhcmFtZXRlckNsYXNzL2FmdGVyMS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jaGFuZ2VQYXJhbWV0ZXJDbGFzcy9hZnRlcjEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZTU3MDNhCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jaGFuZ2VQYXJhbWV0ZXJDbGFzcy9hZnRlcjEuamF2YQpAQCAtMCwwICsxLDExIEBACisvLyAiTWFrZSAnYScgaW1wbGVtZW50ICdqYXZhLmxhbmcuUnVubmFibGUnIiAidHJ1ZSIKK2NsYXNzIGEgaW1wbGVtZW50cyBSdW5uYWJsZSB7CisgICAgdm9pZCBmKFJ1bm5hYmxlIHIpIHsKKyAgICAgICAgZih0aGlzKTsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBydW4oKSB7CisgICAgICAgIDxjYXJldD48c2VsZWN0aW9uPi8vVG8gY2hhbmdlIGJvZHkgb2YgaW1wbGVtZW50ZWQgbWV0aG9kcyB1c2UgRmlsZSB8IFNldHRpbmdzIHwgRmlsZSBUZW1wbGF0ZXMuPC9zZWxlY3Rpb24+CisgICAgfQorfQorCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NoYW5nZVBhcmFtZXRlckNsYXNzL2FmdGVyMi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jaGFuZ2VQYXJhbWV0ZXJDbGFzcy9hZnRlcjIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NWMyMjczCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jaGFuZ2VQYXJhbWV0ZXJDbGFzcy9hZnRlcjIuamF2YQpAQCAtMCwwICsxLDkgQEAKKzxjYXJldD4vLyAiTWFrZSAnYScgZXh0ZW5kICdiJyIgInRydWUiCitjbGFzcyBhIGV4dGVuZHMgYiB7CisgICAgdm9pZCBmKGIgYiwgUnVubmFibGUgcikgeworICAgICAgICBmKHRoaXMsIG51bGwpOworICAgIH0KK30KK2NsYXNzIGIgeworfQorCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NoYW5nZVBhcmFtZXRlckNsYXNzL2FmdGVyNC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jaGFuZ2VQYXJhbWV0ZXJDbGFzcy9hZnRlcjQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNzgwOGEzCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jaGFuZ2VQYXJhbWV0ZXJDbGFzcy9hZnRlcjQuamF2YQpAQCAtMCwwICsxLDEwIEBACisvLyAiTWFrZSAnYicgZXh0ZW5kICdhJyIgInRydWUiCitjbGFzcyBhIHsKKyAgICB2b2lkIGYoYSBhKSB7CisgICAgICAgIGIgYiA9IG51bGw7CisgICAgICAgIGYoYik7CisgICAgfQorfQorPGNhcmV0PmNsYXNzIGIgZXh0ZW5kcyBhIHsKK30KKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jaGFuZ2VQYXJhbWV0ZXJDbGFzcy9hZnRlcjYuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY2hhbmdlUGFyYW1ldGVyQ2xhc3MvYWZ0ZXI2LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTZkYWE3NAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY2hhbmdlUGFyYW1ldGVyQ2xhc3MvYWZ0ZXI2LmphdmEKQEAgLTAsMCArMSwxNCBAQAorLy8gIk1ha2UgJ2EnIGltcGxlbWVudCAnYiciICJ0cnVlIgorY2xhc3MgYSBpbXBsZW1lbnRzIGI8U3RyaW5nPiB7CisgICAgdm9pZCBmKGI8U3RyaW5nPiByKSB7CisgICAgICAgIHIuZyh0aGlzKTsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBnKGI8U3RyaW5nPiB0KSB7CisgICAgICAgIDxjYXJldD48c2VsZWN0aW9uPi8vVG8gY2hhbmdlIGJvZHkgb2YgaW1wbGVtZW50ZWQgbWV0aG9kcyB1c2UgRmlsZSB8IFNldHRpbmdzIHwgRmlsZSBUZW1wbGF0ZXMuPC9zZWxlY3Rpb24+CisgICAgfQorfQoraW50ZXJmYWNlIGI8VD4geworICB2b2lkIGcoYjxUPiB0KTsKK30KKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jaGFuZ2VQYXJhbWV0ZXJDbGFzcy9hZnRlckNvbnN0cnVjdG9yUGFyYW0uamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY2hhbmdlUGFyYW1ldGVyQ2xhc3MvYWZ0ZXJDb25zdHJ1Y3RvclBhcmFtLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjE5NDI3ZAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY2hhbmdlUGFyYW1ldGVyQ2xhc3MvYWZ0ZXJDb25zdHJ1Y3RvclBhcmFtLmphdmEKQEAgLTAsMCArMSw5IEBACisvLyAiTWFrZSAnQScgZXh0ZW5kICdCJyIgInRydWUiCitjbGFzcyBCIHt9CisKK2NsYXNzIEEgZXh0ZW5kcyBCIHsKKyAgICBBKEIgYikgeworICAgIH0KKworICAgIEEgYSA9IG5ldyBBKHRoaXMpOworfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jaGFuZ2VQYXJhbWV0ZXJDbGFzcy9hZnRlclJldHVybi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jaGFuZ2VQYXJhbWV0ZXJDbGFzcy9hZnRlclJldHVybi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM5ZTA5N2EKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NoYW5nZVBhcmFtZXRlckNsYXNzL2FmdGVyUmV0dXJuLmphdmEKQEAgLTAsMCArMSw5IEBACisvLyAiTWFrZSAnRm9vJyBpbXBsZW1lbnQgJ0Zvby5CYXInIiAidHJ1ZSIKK3B1YmxpYyBjbGFzcyBGb28gaW1wbGVtZW50cyBGb28uQmFyIHsKKworICBwdWJsaWMgQmFyIGdldEJhcigpIHsKKyAgICByZXR1cm4gdGhpczsKKyAgfQorCisgIHB1YmxpYyBpbnRlcmZhY2UgQmFyIHt9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jaGFuZ2VQYXJhbWV0ZXJDbGFzcy9hZnRlclZhcmlhYmxlQXNzaWdubWVudC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jaGFuZ2VQYXJhbWV0ZXJDbGFzcy9hZnRlclZhcmlhYmxlQXNzaWdubWVudC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ2YWMwMmYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NoYW5nZVBhcmFtZXRlckNsYXNzL2FmdGVyVmFyaWFibGVBc3NpZ25tZW50LmphdmEKQEAgLTAsMCArMSw5IEBACisvLyAiTWFrZSAnQScgZXh0ZW5kICdCJyIgInRydWUiCitjbGFzcyBCIHt9CisKK2NsYXNzIEEgZXh0ZW5kcyBCIHsKKyAgICBpbnQgZm9vKEIgYikgeworICAgICAgICBCIGJ6ID0gdGhpczsKKyAgICAgICAgcmV0dXJuIDE7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jaGFuZ2VQYXJhbWV0ZXJDbGFzcy9iZWZvcmUxLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NoYW5nZVBhcmFtZXRlckNsYXNzL2JlZm9yZTEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYTJjMzY4Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jaGFuZ2VQYXJhbWV0ZXJDbGFzcy9iZWZvcmUxLmphdmEKQEAgLTAsMCArMSw3IEBACisvLyAiTWFrZSAnYScgaW1wbGVtZW50ICdqYXZhLmxhbmcuUnVubmFibGUnIiAidHJ1ZSIKK2NsYXNzIGEgeworICAgIHZvaWQgZihSdW5uYWJsZSByKSB7CisgICAgICAgIGYoPGNhcmV0PnRoaXMpOworICAgIH0KK30KKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jaGFuZ2VQYXJhbWV0ZXJDbGFzcy9iZWZvcmUyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NoYW5nZVBhcmFtZXRlckNsYXNzL2JlZm9yZTIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YjgwY2E3Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jaGFuZ2VQYXJhbWV0ZXJDbGFzcy9iZWZvcmUyLmphdmEKQEAgLTAsMCArMSw5IEBACisvLyAiTWFrZSAnYScgZXh0ZW5kICdiJyIgInRydWUiCitjbGFzcyBhIHsKKyAgICB2b2lkIGYoYiBiLCBSdW5uYWJsZSByKSB7CisgICAgICAgIGYoPGNhcmV0PnRoaXMsIG51bGwpOworICAgIH0KK30KK2NsYXNzIGIgeworfQorCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NoYW5nZVBhcmFtZXRlckNsYXNzL2JlZm9yZTMuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY2hhbmdlUGFyYW1ldGVyQ2xhc3MvYmVmb3JlMy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVlZGVhYWIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NoYW5nZVBhcmFtZXRlckNsYXNzL2JlZm9yZTMuamF2YQpAQCAtMCwwICsxLDkgQEAKKy8vICJNYWtlICdhJyBleHRlbmQgJ2InIiAiZmFsc2UiCitjbGFzcyBhIGV4dGVuZHMgT2JqZWN0IHsKKyAgICB2b2lkIGYoYiBiLCBSdW5uYWJsZSByKSB7CisgICAgICAgIGYoPGNhcmV0PnRoaXMsIG51bGwpOworICAgIH0KK30KK2NsYXNzIGIgeworfQorCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NoYW5nZVBhcmFtZXRlckNsYXNzL2JlZm9yZTQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY2hhbmdlUGFyYW1ldGVyQ2xhc3MvYmVmb3JlNC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRiMjU2ZTgKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NoYW5nZVBhcmFtZXRlckNsYXNzL2JlZm9yZTQuamF2YQpAQCAtMCwwICsxLDEwIEBACisvLyAiTWFrZSAnYicgZXh0ZW5kICdhJyIgInRydWUiCitjbGFzcyBhIHsKKyAgICB2b2lkIGYoYSBhKSB7CisgICAgICAgIGIgYiA9IG51bGw7CisgICAgICAgIGYoPGNhcmV0PmIpOworICAgIH0KK30KK2NsYXNzIGIgeworfQorCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NoYW5nZVBhcmFtZXRlckNsYXNzL2JlZm9yZTUuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY2hhbmdlUGFyYW1ldGVyQ2xhc3MvYmVmb3JlNS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE4NTNjZWIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NoYW5nZVBhcmFtZXRlckNsYXNzL2JlZm9yZTUuamF2YQpAQCAtMCwwICsxLDEwIEBACisvLyAiTWFrZSAnYicgZXh0ZW5kICdhJyIgImZhbHNlIgorY2xhc3MgYSB7CisgICAgdm9pZCBmKGEgYSwgYiBiKSB7CisgICAgICAgIGIgYiA9IG51bGw7CisgICAgICAgIGYoPGNhcmV0PmIsIGIpOworICAgIH0KK30KK2ludGVyZmFjZSBiIHsKK30KKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jaGFuZ2VQYXJhbWV0ZXJDbGFzcy9iZWZvcmU2LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NoYW5nZVBhcmFtZXRlckNsYXNzL2JlZm9yZTYuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYWE3ODRkCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jaGFuZ2VQYXJhbWV0ZXJDbGFzcy9iZWZvcmU2LmphdmEKQEAgLTAsMCArMSwxMCBAQAorLy8gIk1ha2UgJ2EnIGltcGxlbWVudCAnYiciICJ0cnVlIgorY2xhc3MgYSB7CisgICAgdm9pZCBmKGI8U3RyaW5nPiByKSB7CisgICAgICAgIHIuZyg8Y2FyZXQ+dGhpcyk7CisgICAgfQorfQoraW50ZXJmYWNlIGI8VD4geworICB2b2lkIGcoYjxUPiB0KTsKK30KKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jaGFuZ2VQYXJhbWV0ZXJDbGFzcy9iZWZvcmVBbm9ueW1vdXNDbGFzc0FyZ3VtZW50LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NoYW5nZVBhcmFtZXRlckNsYXNzL2JlZm9yZUFub255bW91c0NsYXNzQXJndW1lbnQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MmE1Y2Y0Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jaGFuZ2VQYXJhbWV0ZXJDbGFzcy9iZWZvcmVBbm9ueW1vdXNDbGFzc0FyZ3VtZW50LmphdmEKQEAgLTAsMCArMSwxNCBAQAorLy8gIk1ha2UgJ251bGwnIGltcGxlbWVudCAnRm9vLklCYXInIiAiZmFsc2UiCisKK3B1YmxpYyBhYnN0cmFjdCBjbGFzcyBGb28geworICBzdGF0aWMgRm9vIGFub255bW91cyA9IG5ldyBGb28oKSB7CisgICAgQE92ZXJyaWRlCisgICAgdm9pZCBmb29NZXRob2QoKSB7CisgICAgICBmb28yTWV0aG9kKHRoPGNhcmV0PmlzKTsKKyAgICB9CisgIH07CisKKyAgcHJvdGVjdGVkIEZvbygpIHsKKyAgICBJQmFyIGJhciA9IGFub255bW91PGNhcmV0PnM7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NoYW5nZVBhcmFtZXRlckNsYXNzL2JlZm9yZUFub255bW91c0NsYXNzVmFsdWUuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY2hhbmdlUGFyYW1ldGVyQ2xhc3MvYmVmb3JlQW5vbnltb3VzQ2xhc3NWYWx1ZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ5MzdkMTEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NoYW5nZVBhcmFtZXRlckNsYXNzL2JlZm9yZUFub255bW91c0NsYXNzVmFsdWUuamF2YQpAQCAtMCwwICsxLDE5IEBACisvLyAiTWFrZSAnbnVsbCcgaW1wbGVtZW50ICdGb28uSUJhciciICJmYWxzZSIKKworcHVibGljIGFic3RyYWN0IGNsYXNzIEZvbyB7CisgIHB1YmxpYyBzdGF0aWMgaW50ZXJmYWNlIElCYXIgeworICAgIHZvaWQgYmFyTWV0aG9kKCk7CisgIH0KKworICBhYnN0cmFjdCB2b2lkIGZvb01ldGhvZCgpOworCisgIHZvaWQgZm9vMk1ldGhvZChJQmFyIGIpIHsKKyAgfQorCisgIHN0YXRpYyBGb28gYW5vbnltb3VzID0gbmV3IEZvbygpIHsKKyAgICBAT3ZlcnJpZGUKKyAgICB2b2lkIGZvb01ldGhvZCgpIHsKKyAgICAgIGZvbzJNZXRob2QodGg8Y2FyZXQ+aXMpOworICAgIH0KKyAgfTsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NoYW5nZVBhcmFtZXRlckNsYXNzL2JlZm9yZUFzc2lnbm1lbnRUb0luaGVyaXRvci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jaGFuZ2VQYXJhbWV0ZXJDbGFzcy9iZWZvcmVBc3NpZ25tZW50VG9Jbmhlcml0b3IuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MGNjNTdlCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jaGFuZ2VQYXJhbWV0ZXJDbGFzcy9iZWZvcmVBc3NpZ25tZW50VG9Jbmhlcml0b3IuamF2YQpAQCAtMCwwICsxLDEwIEBACisvLyAiTWFrZSAnRm9vJyBpbXBsZW1lbnQgJ0Zvby5CYXInIiAiZmFsc2UiCitwdWJsaWMgY2xhc3MgRm9vIHsKKworICBwdWJsaWMgdm9pZCBnZXRCYXIoKSB7CisgICAgQmFyIGYgPSBuZXcgRjxjYXJldD5vbygpOworICB9CisKKyAgcHVibGljIGNsYXNzIEJhciBleHRlbmRzIEZvbyB7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NoYW5nZVBhcmFtZXRlckNsYXNzL2JlZm9yZUNvbnN0cnVjdG9yUGFyYW0uamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY2hhbmdlUGFyYW1ldGVyQ2xhc3MvYmVmb3JlQ29uc3RydWN0b3JQYXJhbS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg0ZmMzOTAKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NoYW5nZVBhcmFtZXRlckNsYXNzL2JlZm9yZUNvbnN0cnVjdG9yUGFyYW0uamF2YQpAQCAtMCwwICsxLDkgQEAKKy8vICJNYWtlICdBJyBleHRlbmQgJ0InIiAidHJ1ZSIKK2NsYXNzIEIge30KKworY2xhc3MgQSB7CisgICAgQShCIGIpIHsKKyAgICB9CisKKyAgICBBIGEgPSBuZXcgQSh0aDxjYXJldD5pcyk7Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NoYW5nZVBhcmFtZXRlckNsYXNzL2JlZm9yZURpZmZlcmVudFR5cGVBcmdzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NoYW5nZVBhcmFtZXRlckNsYXNzL2JlZm9yZURpZmZlcmVudFR5cGVBcmdzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTk5ZDA4NwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY2hhbmdlUGFyYW1ldGVyQ2xhc3MvYmVmb3JlRGlmZmVyZW50VHlwZUFyZ3MuamF2YQpAQCAtMCwwICsxLDEwIEBACisvLyAiTWFrZSAnR2VuZXJpYycgZXh0ZW5kICdHZW5lcmljJyIgImZhbHNlIgorY2xhc3MgR2VuZXJpYzxFPiB7CisgICAgR2VuZXJpYyhFIGFyZykgeyB9Cit9CisKK2NsYXNzIFRlc3RlciB7CisgICAgdm9pZCBtZXRob2QoKSB7CisgICAgICAgIEdlbmVyaWM8SW50ZWdlcj4gYUludGVnZXJHZW5lcmljID0gbmV3IDxjYXJldD5HZW5lcmljPFN0cmluZz4oIiIpOworICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY2hhbmdlUGFyYW1ldGVyQ2xhc3MvYmVmb3JlUmV0dXJuLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NoYW5nZVBhcmFtZXRlckNsYXNzL2JlZm9yZVJldHVybi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJmZjFlYjMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NoYW5nZVBhcmFtZXRlckNsYXNzL2JlZm9yZVJldHVybi5qYXZhCkBAIC0wLDAgKzEsOSBAQAorLy8gIk1ha2UgJ0ZvbycgaW1wbGVtZW50ICdGb28uQmFyJyIgInRydWUiCitwdWJsaWMgY2xhc3MgRm9vIHsKKworICBwdWJsaWMgQmFyIGdldEJhcigpIHsKKyAgICByZXR1cm4gdDxjYXJldD5oaXM7CisgIH0KKworICBwdWJsaWMgaW50ZXJmYWNlIEJhciB7fQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY2hhbmdlUGFyYW1ldGVyQ2xhc3MvYmVmb3JlVmFyaWFibGVBc3NpZ25tZW50LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NoYW5nZVBhcmFtZXRlckNsYXNzL2JlZm9yZVZhcmlhYmxlQXNzaWdubWVudC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY1YTM1MmIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NoYW5nZVBhcmFtZXRlckNsYXNzL2JlZm9yZVZhcmlhYmxlQXNzaWdubWVudC5qYXZhCkBAIC0wLDAgKzEsOSBAQAorLy8gIk1ha2UgJ0EnIGV4dGVuZCAnQiciICJ0cnVlIgorY2xhc3MgQiB7fQorCitjbGFzcyBBIHsKKyAgICBpbnQgZm9vKEIgYikgeworICAgICAgICBCIGJ6ID0gdDxjYXJldD5oaXM7CisgICAgICAgIHJldHVybiAxOworICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY2hhbmdlVG9BcHBlbmQvYWZ0ZXIxLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NoYW5nZVRvQXBwZW5kL2FmdGVyMS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg2ZjRkNDVmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jaGFuZ2VUb0FwcGVuZC9hZnRlcjEuamF2YQpAQCAtMCwwICsxLDYgQEAKKy8vICJDaGFuZ2UgdG8gJ2FwcGVuZGFibGUuYXBwZW5kKDEpJyIgInRydWUiCitjbGFzcyBUZXN0IHsKKyAgdm9pZCBhcHBlbmRhYmxlKFN0cmluZ0J1aWxkZXIgYXBwZW5kYWJsZSkgdGhyb3dzIElPRXhjZXB0aW9uIHsKKyAgICBhcHBlbmRhYmxlLmFwcGVuZCgxKTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY2hhbmdlVG9BcHBlbmQvYWZ0ZXIyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NoYW5nZVRvQXBwZW5kL2FmdGVyMi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ3ZTViMmIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NoYW5nZVRvQXBwZW5kL2FmdGVyMi5qYXZhCkBAIC0wLDAgKzEsNyBAQAorLy8gIkNoYW5nZSB0byAnYnVpbGRlci5hcHBlbmQoMSsxKS5hcHBlbmQocykuYXBwZW5kKCIgICIpJyIgInRydWUiCitjbGFzcyBUZXN0IHsKKyAgU3RyaW5nIHM7CisgIHZvaWQgYmFyKFN0cmluZ0J1aWxkZXIgYnVpbGRlcikgeworICAgIGJ1aWxkZXIuYXBwZW5kKDEgKyAxKS5hcHBlbmQocykuYXBwZW5kKCIgICIpOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jaGFuZ2VUb0FwcGVuZC9iZWZvcmUxLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NoYW5nZVRvQXBwZW5kL2JlZm9yZTEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMTBhMmJmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jaGFuZ2VUb0FwcGVuZC9iZWZvcmUxLmphdmEKQEAgLTAsMCArMSw2IEBACisvLyAiQ2hhbmdlIHRvICdhcHBlbmRhYmxlLmFwcGVuZCgxKSciICJ0cnVlIgorY2xhc3MgVGVzdCB7CisgIHZvaWQgYXBwZW5kYWJsZShTdHJpbmdCdWlsZGVyIGFwcGVuZGFibGUpIHRocm93cyBJT0V4Y2VwdGlvbiB7CisgICAgYXBwZW5kYWI8Y2FyZXQ+bGUgKz0gMTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY2hhbmdlVG9BcHBlbmQvYmVmb3JlMi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jaGFuZ2VUb0FwcGVuZC9iZWZvcmUyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDkzMmJlNAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY2hhbmdlVG9BcHBlbmQvYmVmb3JlMi5qYXZhCkBAIC0wLDAgKzEsNyBAQAorLy8gIkNoYW5nZSB0byAnYnVpbGRlci5hcHBlbmQoMSsxKS5hcHBlbmQocykuYXBwZW5kKCIgICIpJyIgInRydWUiCitjbGFzcyBUZXN0IHsKKyAgU3RyaW5nIHM7CisgIHZvaWQgYmFyKFN0cmluZ0J1aWxkZXIgYnVpbGRlcikgeworICAgIGJ1aWw8Y2FyZXQ+ZGVyICs9IDEgKyAxICsgcyArICIgICI7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NoYW5nZVR5cGVBcmdzL2FmdGVyMS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jaGFuZ2VUeXBlQXJncy9hZnRlcjEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MzBiNjg3Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jaGFuZ2VUeXBlQXJncy9hZnRlcjEuamF2YQpAQCAtMCwwICsxLDExIEBACisvLyAiQ2hhbmdlIHR5cGUgYXJndW1lbnRzIHRvIDxTdHJpbmc+IiAidHJ1ZSIKK2NsYXNzIEdlbmVyaWM8RT4geworICBHZW5lcmljKEUgYXJnKSB7CisgIH0KK30KKworY2xhc3MgVGVzdGVyIHsKKyAgdm9pZCBtZXRob2QoKSB7CisgICAgbmV3IEdlbmVyaWM8U3RyaW5nPigiaGkiKTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY2hhbmdlVHlwZUFyZ3MvYWZ0ZXJNdWx0aXBsZVBhcmFtcy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jaGFuZ2VUeXBlQXJncy9hZnRlck11bHRpcGxlUGFyYW1zLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTVmZjdiNgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY2hhbmdlVHlwZUFyZ3MvYWZ0ZXJNdWx0aXBsZVBhcmFtcy5qYXZhCkBAIC0wLDAgKzEsMTEgQEAKKy8vICJDaGFuZ2UgdHlwZSBhcmd1bWVudHMgdG8gPFN0cmluZywgSW50ZWdlcj4iICJ0cnVlIgorY2xhc3MgR2VuZXJpYzxFLCBLPiB7CisgIEdlbmVyaWMoRSBhcmcsIEsgYXJnMSkgeworICB9Cit9CisKK2NsYXNzIFRlc3RlciB7CisgIHZvaWQgbWV0aG9kKCkgeworICAgIG5ldyBHZW5lcmljPFN0cmluZywgSW50ZWdlcj4oImhpIiwgMSk7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NoYW5nZVR5cGVBcmdzL2FmdGVyU3VwZXJUeXBlLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NoYW5nZVR5cGVBcmdzL2FmdGVyU3VwZXJUeXBlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzM3NzA4ZQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY2hhbmdlVHlwZUFyZ3MvYWZ0ZXJTdXBlclR5cGUuamF2YQpAQCAtMCwwICsxLDEzIEBACitpbXBvcnQgamF2YS5pby5TZXJpYWxpemFibGU7CisKKy8vICJDaGFuZ2UgdHlwZSBhcmd1bWVudHMgdG8gPFNlcmlhbGl6YWJsZT4iICJ0cnVlIgorY2xhc3MgR2VuZXJpYzxFPiB7CisgIEdlbmVyaWMoRSBhcmcsIEUgYXJnMSkgeworICB9Cit9CisKK2NsYXNzIFRlc3RlciB7CisgIHZvaWQgbWV0aG9kKCkgeworICAgIG5ldyBHZW5lcmljPFNlcmlhbGl6YWJsZT4oImhpIiwgMSk7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NoYW5nZVR5cGVBcmdzL2JlZm9yZTEuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY2hhbmdlVHlwZUFyZ3MvYmVmb3JlMS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRkNjYwYjgKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NoYW5nZVR5cGVBcmdzL2JlZm9yZTEuamF2YQpAQCAtMCwwICsxLDExIEBACisvLyAiQ2hhbmdlIHR5cGUgYXJndW1lbnRzIHRvIDxTdHJpbmc+IiAidHJ1ZSIKK2NsYXNzIEdlbmVyaWM8RT4geworICBHZW5lcmljKEUgYXJnKSB7CisgIH0KK30KKworY2xhc3MgVGVzdGVyIHsKKyAgdm9pZCBtZXRob2QoKSB7CisgICAgbmV3IEdlbmVyaWM8SW50ZWdlcj4oPGNhcmV0PiJoaSIpOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jaGFuZ2VUeXBlQXJncy9iZWZvcmVDb3JyZWN0VHlwZVBhcmFtLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NoYW5nZVR5cGVBcmdzL2JlZm9yZUNvcnJlY3RUeXBlUGFyYW0uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZDNjMjIzCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jaGFuZ2VUeXBlQXJncy9iZWZvcmVDb3JyZWN0VHlwZVBhcmFtLmphdmEKQEAgLTAsMCArMSwxMSBAQAorLy8gIkNoYW5nZSB0eXBlIGFyZ3VtZW50cyB0byA8U3RyaW5nPiIgImZhbHNlIgorY2xhc3MgR2VuZXJpYzxFPiB7CisgIEdlbmVyaWMoRSBhcmcsIGludCBpKSB7CisgIH0KK30KKworY2xhc3MgVGVzdGVyIHsKKyAgdm9pZCBtZXRob2QoKSB7CisgICAgbmV3IEdlbmVyaWM8U3RyaW5nPig8Y2FyZXQ+ImhpIiwgIiIpOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jaGFuZ2VUeXBlQXJncy9iZWZvcmVEaXNhYmxlZC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jaGFuZ2VUeXBlQXJncy9iZWZvcmVEaXNhYmxlZC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI4Njk0ODYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NoYW5nZVR5cGVBcmdzL2JlZm9yZURpc2FibGVkLmphdmEKQEAgLTAsMCArMSwxMyBAQAorLy8gIkNoYW5nZSB0eXBlIGFyZ3VtZW50cyB0byA8U3RyaW5nPiIgImZhbHNlIgoraW1wb3J0IGphdmEudXRpbC5MaXN0OworCitjbGFzcyBHZW5lcmljPEU+IHsKKyAgR2VuZXJpYyhFIGFyZywgTGlzdDxFPiBhcmcxKSB7CisgIH0KK30KKworY2xhc3MgVGVzdGVyIHsKKyAgdm9pZCBtZXRob2QoKSB7CisgICAgbmV3IEdlbmVyaWM8SW50ZWdlcj4oPGNhcmV0PiJoaSIsICJoaSIpOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jaGFuZ2VUeXBlQXJncy9iZWZvcmVJbmNvbXBsZXRlLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NoYW5nZVR5cGVBcmdzL2JlZm9yZUluY29tcGxldGUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNmI1YjA0Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jaGFuZ2VUeXBlQXJncy9iZWZvcmVJbmNvbXBsZXRlLmphdmEKQEAgLTAsMCArMSwxMSBAQAorLy8gIkNoYW5nZSB0eXBlIGFyZ3VtZW50cyB0byA8U3RyaW5nPiIgImZhbHNlIgorY2xhc3MgR2VuZXJpYzxFPiB7CisgIEdlbmVyaWMoRSBhcmcpIHsKKyAgfQorfQorCitjbGFzcyBUZXN0ZXIgeworICB2b2lkIG1ldGhvZCgpIHsKKyAgICBuZXcgR2VuZXJpYzxJbnRlZ2VyPig8Y2FyZXQ+ImhpIgorICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jaGFuZ2VUeXBlQXJncy9iZWZvcmVJbmNvbXBsZXRlMi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jaGFuZ2VUeXBlQXJncy9iZWZvcmVJbmNvbXBsZXRlMi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjliMWRlZjMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NoYW5nZVR5cGVBcmdzL2JlZm9yZUluY29tcGxldGUyLmphdmEKQEAgLTAsMCArMSwxMSBAQAorLy8gIkNoYW5nZSB0eXBlIGFyZ3VtZW50cyB0byA8U3RyaW5nPiIgImZhbHNlIgorY2xhc3MgR2VuZXJpYzxFPiB7CisgIEdlbmVyaWMoRSBhcmcsIGludCBpKSB7CisgIH0KK30KKworY2xhc3MgVGVzdGVyIHsKKyAgdm9pZCBtZXRob2QoKSB7CisgICAgbmV3IEdlbmVyaWM8SW50ZWdlcj4oPGNhcmV0PiJoaSIpOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jaGFuZ2VUeXBlQXJncy9iZWZvcmVNdWx0aXBsZVBhcmFtcy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jaGFuZ2VUeXBlQXJncy9iZWZvcmVNdWx0aXBsZVBhcmFtcy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg5NjY4NmIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NoYW5nZVR5cGVBcmdzL2JlZm9yZU11bHRpcGxlUGFyYW1zLmphdmEKQEAgLTAsMCArMSwxMSBAQAorLy8gIkNoYW5nZSB0eXBlIGFyZ3VtZW50cyB0byA8U3RyaW5nLCBJbnRlZ2VyPiIgInRydWUiCitjbGFzcyBHZW5lcmljPEUsIEs+IHsKKyAgR2VuZXJpYyhFIGFyZywgSyBhcmcxKSB7CisgIH0KK30KKworY2xhc3MgVGVzdGVyIHsKKyAgdm9pZCBtZXRob2QoKSB7CisgICAgbmV3IEdlbmVyaWM8SW50ZWdlciwgSW50ZWdlcj4oPGNhcmV0PiJoaSIsIDEpOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jaGFuZ2VUeXBlQXJncy9iZWZvcmVTdXBlclR5cGUuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY2hhbmdlVHlwZUFyZ3MvYmVmb3JlU3VwZXJUeXBlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWI2NTgwNwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY2hhbmdlVHlwZUFyZ3MvYmVmb3JlU3VwZXJUeXBlLmphdmEKQEAgLTAsMCArMSwxMSBAQAorLy8gIkNoYW5nZSB0eXBlIGFyZ3VtZW50cyB0byA8U2VyaWFsaXphYmxlPiIgInRydWUiCitjbGFzcyBHZW5lcmljPEU+IHsKKyAgR2VuZXJpYyhFIGFyZywgRSBhcmcxKSB7CisgIH0KK30KKworY2xhc3MgVGVzdGVyIHsKKyAgdm9pZCBtZXRob2QoKSB7CisgICAgbmV3IEdlbmVyaWM8SW50ZWdlcj4oPGNhcmV0PiJoaSIsIDEpOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jb252ZXJ0Q29sb3JSZXByZXNlbnRhdGlvbi9hZnRlcjJCeXRlcy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jb252ZXJ0Q29sb3JSZXByZXNlbnRhdGlvbi9hZnRlcjJCeXRlcy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEyNDEyZDIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NvbnZlcnRDb2xvclJlcHJlc2VudGF0aW9uL2FmdGVyMkJ5dGVzLmphdmEKQEAgLTAsMCArMSwyMSBAQAorLy8gIkNvbnZlcnQgdG8gJ25ldyBDb2xvcigweDEwMTAxKSciICJ0cnVlIgorCitwYWNrYWdlIGphdmEuYXd0OworCitjbGFzcyBBIHsKKyAgcHJpdmF0ZSBDb2xvciBjb2xvciA9IG5ldyBDb2xvcigweDEwMTAxKTsKK30KKworY2xhc3MgQ29sb3IgeworICBDb2xvcihpbnQgciwgaW50IGcsIGludCBiKSB7CisgIH0KKworICBDb2xvcihpbnQgciwgaW50IGcsIGludCBiLCBpbnQgYSkgeworICB9CisKKyAgQ29sb3IoaW50IHJnYikgeworICB9CisKKyAgQ29sb3IoaW50IHJnYmEsIGJvb2xlYW4gaGFzQWxwaGEpIHsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jb252ZXJ0Q29sb3JSZXByZXNlbnRhdGlvbi9hZnRlckhleDJSZ2IuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY29udmVydENvbG9yUmVwcmVzZW50YXRpb24vYWZ0ZXJIZXgyUmdiLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMThmNzcxNAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY29udmVydENvbG9yUmVwcmVzZW50YXRpb24vYWZ0ZXJIZXgyUmdiLmphdmEKQEAgLTAsMCArMSwyMSBAQAorLy8gIkNvbnZlcnQgdG8gJ25ldyBDb2xvcigzNywgMTAwLCAxMjApJyIgInRydWUiCisKK3BhY2thZ2UgamF2YS5hd3Q7CisKK3B1YmxpYyBjbGFzcyBBIHsKKyAgcHJpdmF0ZSBDb2xvciBjb2xvciA9IG5ldyBDb2xvcigzNywgMTAwLCAxMjApOworfQorCitjbGFzcyBDb2xvciB7CisgIENvbG9yKGludCByLCBpbnQgZywgaW50IGIpIHsKKyAgfQorCisgIENvbG9yKGludCByLCBpbnQgZywgaW50IGIsIGludCBhKSB7CisgIH0KKworICBDb2xvcihpbnQgcmdiKSB7CisgIH0KKworICBDb2xvcihpbnQgcmdiYSwgYm9vbGVhbiBoYXNBbHBoYSkgeworICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NvbnZlcnRDb2xvclJlcHJlc2VudGF0aW9uL2FmdGVySGV4QTJSZ2JhLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NvbnZlcnRDb2xvclJlcHJlc2VudGF0aW9uL2FmdGVySGV4QTJSZ2JhLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzAxNzFiOAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY29udmVydENvbG9yUmVwcmVzZW50YXRpb24vYWZ0ZXJIZXhBMlJnYmEuamF2YQpAQCAtMCwwICsxLDIxIEBACisvLyAiQ29udmVydCB0byAnbmV3IENvbG9yKDM3LCAxMDAsIDEyMCwgMTQwKSciICJ0cnVlIgorCitwYWNrYWdlIGphdmEuYXd0OworCitjbGFzcyBBIHsKKyAgcHJpdmF0ZSBDb2xvciBjb2xvciA9IG5ldyBDb2xvcigzNywgMTAwLCAxMjAsIDE0MCk7Cit9CisKK2NsYXNzIENvbG9yIHsKKyAgQ29sb3IoaW50IHIsIGludCBnLCBpbnQgYikgeworICB9CisKKyAgQ29sb3IoaW50IHIsIGludCBnLCBpbnQgYiwgaW50IGEpIHsKKyAgfQorCisgIENvbG9yKGludCByZ2IpIHsKKyAgfQorCisgIENvbG9yKGludCByZ2JhLCBib29sZWFuIGhhc0FscGhhKSB7CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY29udmVydENvbG9yUmVwcmVzZW50YXRpb24vYWZ0ZXJSZ2IySGV4LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NvbnZlcnRDb2xvclJlcHJlc2VudGF0aW9uL2FmdGVyUmdiMkhleC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM0Njk4MGEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NvbnZlcnRDb2xvclJlcHJlc2VudGF0aW9uL2FmdGVyUmdiMkhleC5qYXZhCkBAIC0wLDAgKzEsMjEgQEAKKy8vICJDb252ZXJ0IHRvICduZXcgQ29sb3IoMHgyNTY0NzgpJyIgInRydWUiCisKK3BhY2thZ2UgamF2YS5hd3Q7CisKK2NsYXNzIEEgeworICBwcml2YXRlIENvbG9yIGNvbG9yID0gbmV3IENvbG9yKDB4MjU2NDc4KTsKK30KKworY2xhc3MgQ29sb3IgeworICBDb2xvcihpbnQgciwgaW50IGcsIGludCBiKSB7CisgIH0KKworICBDb2xvcihpbnQgciwgaW50IGcsIGludCBiLCBpbnQgYSkgeworICB9CisKKyAgQ29sb3IoaW50IHJnYikgeworICB9CisKKyAgQ29sb3IoaW50IHJnYmEsIGJvb2xlYW4gaGFzQWxwaGEpIHsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jb252ZXJ0Q29sb3JSZXByZXNlbnRhdGlvbi9hZnRlclJnYmEySGV4LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NvbnZlcnRDb2xvclJlcHJlc2VudGF0aW9uL2FmdGVyUmdiYTJIZXguamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ODhmOTQwCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jb252ZXJ0Q29sb3JSZXByZXNlbnRhdGlvbi9hZnRlclJnYmEySGV4LmphdmEKQEAgLTAsMCArMSwyMSBAQAorLy8gIkNvbnZlcnQgdG8gJ25ldyBDb2xvcigweDI1NjQ3ODhjLHRydWUpJyIgInRydWUiCisKK3BhY2thZ2UgamF2YS5hd3Q7CisKK2NsYXNzIEEgeworICBwcml2YXRlIENvbG9yIGNvbG9yID0gbmV3IENvbG9yKDB4MjU2NDc4OGMsIHRydWUpOworfQorCitjbGFzcyBDb2xvciB7CisgIENvbG9yKGludCByLCBpbnQgZywgaW50IGIpIHsKKyAgfQorCisgIENvbG9yKGludCByLCBpbnQgZywgaW50IGIsIGludCBhKSB7CisgIH0KKworICBDb2xvcihpbnQgcmdiKSB7CisgIH0KKworICBDb2xvcihpbnQgcmdiYSwgYm9vbGVhbiBoYXNBbHBoYSkgeworICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NvbnZlcnRDb2xvclJlcHJlc2VudGF0aW9uL2JlZm9yZTJCeXRlcy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jb252ZXJ0Q29sb3JSZXByZXNlbnRhdGlvbi9iZWZvcmUyQnl0ZXMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44Mzk2Y2JhCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jb252ZXJ0Q29sb3JSZXByZXNlbnRhdGlvbi9iZWZvcmUyQnl0ZXMuamF2YQpAQCAtMCwwICsxLDIxIEBACisvLyAiQ29udmVydCB0byAnbmV3IENvbG9yKDB4MTAxMDEpJyIgInRydWUiCisKK3BhY2thZ2UgamF2YS5hd3Q7CisKK2NsYXNzIEEgeworICBwcml2YXRlIENvbG9yIGNvbG9yID0gbmV3IENvbG9yKDI1NywgMjU3LDxjYXJldD4gMjU3KTsKK30KKworY2xhc3MgQ29sb3IgeworICBDb2xvcihpbnQgciwgaW50IGcsIGludCBiKSB7CisgIH0KKworICBDb2xvcihpbnQgciwgaW50IGcsIGludCBiLCBpbnQgYSkgeworICB9CisKKyAgQ29sb3IoaW50IHJnYikgeworICB9CisKKyAgQ29sb3IoaW50IHJnYmEsIGJvb2xlYW4gaGFzQWxwaGEpIHsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jb252ZXJ0Q29sb3JSZXByZXNlbnRhdGlvbi9iZWZvcmVIZXgyUmdiLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NvbnZlcnRDb2xvclJlcHJlc2VudGF0aW9uL2JlZm9yZUhleDJSZ2IuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NjYzOTRlCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jb252ZXJ0Q29sb3JSZXByZXNlbnRhdGlvbi9iZWZvcmVIZXgyUmdiLmphdmEKQEAgLTAsMCArMSwyMSBAQAorLy8gIkNvbnZlcnQgdG8gJ25ldyBDb2xvcigzNywgMTAwLCAxMjApJyIgInRydWUiCisKK3BhY2thZ2UgamF2YS5hd3Q7CisKK3B1YmxpYyBjbGFzcyBBIHsKKyAgcHJpdmF0ZSBDb2xvciBjb2xvciA9IG5ldyBDb2xvcigweDI1PGNhcmV0PjY0NzgpOworfQorCitjbGFzcyBDb2xvciB7CisgIENvbG9yKGludCByLCBpbnQgZywgaW50IGIpIHsKKyAgfQorCisgIENvbG9yKGludCByLCBpbnQgZywgaW50IGIsIGludCBhKSB7CisgIH0KKworICBDb2xvcihpbnQgcmdiKSB7CisgIH0KKworICBDb2xvcihpbnQgcmdiYSwgYm9vbGVhbiBoYXNBbHBoYSkgeworICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NvbnZlcnRDb2xvclJlcHJlc2VudGF0aW9uL2JlZm9yZUhleEEyUmdiYS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jb252ZXJ0Q29sb3JSZXByZXNlbnRhdGlvbi9iZWZvcmVIZXhBMlJnYmEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOTc2MmNkCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jb252ZXJ0Q29sb3JSZXByZXNlbnRhdGlvbi9iZWZvcmVIZXhBMlJnYmEuamF2YQpAQCAtMCwwICsxLDIxIEBACisvLyAiQ29udmVydCB0byAnbmV3IENvbG9yKDM3LCAxMDAsIDEyMCwgMTQwKSciICJ0cnVlIgorCitwYWNrYWdlIGphdmEuYXd0OworCitjbGFzcyBBIHsKKyAgcHJpdmF0ZSBDb2xvciBjb2xvciA9IG5ldyBDb2xvcigweDI1NjQ3PGNhcmV0Pjg4YywgdHJ1ZSk7Cit9CisKK2NsYXNzIENvbG9yIHsKKyAgQ29sb3IoaW50IHIsIGludCBnLCBpbnQgYikgeworICB9CisKKyAgQ29sb3IoaW50IHIsIGludCBnLCBpbnQgYiwgaW50IGEpIHsKKyAgfQorCisgIENvbG9yKGludCByZ2IpIHsKKyAgfQorCisgIENvbG9yKGludCByZ2JhLCBib29sZWFuIGhhc0FscGhhKSB7CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY29udmVydENvbG9yUmVwcmVzZW50YXRpb24vYmVmb3JlUmdiMkhleC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jb252ZXJ0Q29sb3JSZXByZXNlbnRhdGlvbi9iZWZvcmVSZ2IySGV4LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTBmNmJjMQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY29udmVydENvbG9yUmVwcmVzZW50YXRpb24vYmVmb3JlUmdiMkhleC5qYXZhCkBAIC0wLDAgKzEsMjEgQEAKKy8vICJDb252ZXJ0IHRvICduZXcgQ29sb3IoMHgyNTY0NzgpJyIgInRydWUiCisKK3BhY2thZ2UgamF2YS5hd3Q7CisKK2NsYXNzIEEgeworICBwcml2YXRlIENvbG9yIGNvbG9yID0gbmV3IENvbG9yKDM3LCAxMDAsPGNhcmV0PiAxMjApOworfQorCitjbGFzcyBDb2xvciB7CisgIENvbG9yKGludCByLCBpbnQgZywgaW50IGIpIHsKKyAgfQorCisgIENvbG9yKGludCByLCBpbnQgZywgaW50IGIsIGludCBhKSB7CisgIH0KKworICBDb2xvcihpbnQgcmdiKSB7CisgIH0KKworICBDb2xvcihpbnQgcmdiYSwgYm9vbGVhbiBoYXNBbHBoYSkgeworICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NvbnZlcnRDb2xvclJlcHJlc2VudGF0aW9uL2JlZm9yZVJnYmEySGV4LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NvbnZlcnRDb2xvclJlcHJlc2VudGF0aW9uL2JlZm9yZVJnYmEySGV4LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2ZlMTI1NQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY29udmVydENvbG9yUmVwcmVzZW50YXRpb24vYmVmb3JlUmdiYTJIZXguamF2YQpAQCAtMCwwICsxLDIxIEBACisvLyAiQ29udmVydCB0byAnbmV3IENvbG9yKDB4MjU2NDc4OGMsdHJ1ZSknIiAidHJ1ZSIKKworcGFja2FnZSBqYXZhLmF3dDsKKworY2xhc3MgQSB7CisgIHByaXZhdGUgQ29sb3IgY29sb3IgPSBuZXcgQ29sb3IoMzcsIDEwMCw8Y2FyZXQ+IDEyMCwgMTQwKTsKK30KKworY2xhc3MgQ29sb3IgeworICBDb2xvcihpbnQgciwgaW50IGcsIGludCBiKSB7CisgIH0KKworICBDb2xvcihpbnQgciwgaW50IGcsIGludCBiLCBpbnQgYSkgeworICB9CisKKyAgQ29sb3IoaW50IHJnYikgeworICB9CisKKyAgQ29sb3IoaW50IHJnYmEsIGJvb2xlYW4gaGFzQWxwaGEpIHsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jb252ZXJ0RG91YmxlVG9GbG9hdC9hZnRlcjEuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY29udmVydERvdWJsZVRvRmxvYXQvYWZ0ZXIxLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTUwYmQxMgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY29udmVydERvdWJsZVRvRmxvYXQvYWZ0ZXIxLmphdmEKQEAgLTAsMCArMSw3IEBACisvLyAiQ29udmVydCAnMWUxJyB0byBmbG9hdCIgInRydWUiCitjbGFzcyBUZXN0IHsKKyAgdm9pZCBiYXIoKSB7CisgICAgZm9vKDFlMWYpOworICB9CisgIHZvaWQgZm9vKGZsb2F0IGYpe30KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY29udmVydERvdWJsZVRvRmxvYXQvYWZ0ZXIyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NvbnZlcnREb3VibGVUb0Zsb2F0L2FmdGVyMi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk5Y2RmZGYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NvbnZlcnREb3VibGVUb0Zsb2F0L2FmdGVyMi5qYXZhCkBAIC0wLDAgKzEsNyBAQAorLy8gIkNvbnZlcnQgJzIuJyB0byBmbG9hdCIgInRydWUiCitjbGFzcyBUZXN0IHsKKyAgdm9pZCBiYXIoKSB7CisgICAgZm9vKDIuZik7CisgIH0KKyAgdm9pZCBmb28oZmxvYXQgZil7fQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jb252ZXJ0RG91YmxlVG9GbG9hdC9hZnRlcjMuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY29udmVydERvdWJsZVRvRmxvYXQvYWZ0ZXIzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTI3MmY0MQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY29udmVydERvdWJsZVRvRmxvYXQvYWZ0ZXIzLmphdmEKQEAgLTAsMCArMSw3IEBACisvLyAiQ29udmVydCAnLjMnIHRvIGZsb2F0IiAidHJ1ZSIKK2NsYXNzIFRlc3QgeworICB2b2lkIGJhcigpIHsKKyAgICBmb28oLjNmKTsKKyAgfQorICB2b2lkIGZvbyhmbG9hdCBmKXt9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NvbnZlcnREb3VibGVUb0Zsb2F0L2FmdGVyNC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jb252ZXJ0RG91YmxlVG9GbG9hdC9hZnRlcjQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZDM5OTNmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jb252ZXJ0RG91YmxlVG9GbG9hdC9hZnRlcjQuamF2YQpAQCAtMCwwICsxLDcgQEAKKy8vICJDb252ZXJ0ICcwLjAnIHRvIGZsb2F0IiAidHJ1ZSIKK2NsYXNzIFRlc3QgeworICB2b2lkIGJhcigpIHsKKyAgICBmb28oMC4wZik7CisgIH0KKyAgdm9pZCBmb28oZmxvYXQgZil7fQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jb252ZXJ0RG91YmxlVG9GbG9hdC9hZnRlcjUuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY29udmVydERvdWJsZVRvRmxvYXQvYWZ0ZXI1LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2U3MGNmNAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY29udmVydERvdWJsZVRvRmxvYXQvYWZ0ZXI1LmphdmEKQEAgLTAsMCArMSw3IEBACisvLyAiQ29udmVydCAnMy4xNCcgdG8gZmxvYXQiICJ0cnVlIgorY2xhc3MgVGVzdCB7CisgIHZvaWQgYmFyKCkgeworICAgIGZvbygzLjE0Zik7CisgIH0KKyAgdm9pZCBmb28oZmxvYXQgZil7fQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jb252ZXJ0RG91YmxlVG9GbG9hdC9hZnRlcjYuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY29udmVydERvdWJsZVRvRmxvYXQvYWZ0ZXI2LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDIzMTBmYQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY29udmVydERvdWJsZVRvRmxvYXQvYWZ0ZXI2LmphdmEKQEAgLTAsMCArMSw3IEBACisvLyAiQ29udmVydCAnMWUtOWQnIHRvIGZsb2F0IiAidHJ1ZSIKK2NsYXNzIFRlc3QgeworICB2b2lkIGJhcigpIHsKKyAgICBmb28oMWUtOWYpOworICB9CisgIHZvaWQgZm9vKGZsb2F0IGYpe30KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY29udmVydERvdWJsZVRvRmxvYXQvYmVmb3JlMS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jb252ZXJ0RG91YmxlVG9GbG9hdC9iZWZvcmUxLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTQ3NmI3NwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY29udmVydERvdWJsZVRvRmxvYXQvYmVmb3JlMS5qYXZhCkBAIC0wLDAgKzEsNyBAQAorLy8gIkNvbnZlcnQgJzFlMScgdG8gZmxvYXQiICJ0cnVlIgorY2xhc3MgVGVzdCB7CisgIHZvaWQgYmFyKCkgeworICAgIGZvbygxZTxjYXJldD4xKTsKKyAgfQorICB2b2lkIGZvbyhmbG9hdCBmKXt9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NvbnZlcnREb3VibGVUb0Zsb2F0L2JlZm9yZTIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY29udmVydERvdWJsZVRvRmxvYXQvYmVmb3JlMi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZhNjdhYTgKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NvbnZlcnREb3VibGVUb0Zsb2F0L2JlZm9yZTIuamF2YQpAQCAtMCwwICsxLDcgQEAKKy8vICJDb252ZXJ0ICcyLicgdG8gZmxvYXQiICJ0cnVlIgorY2xhc3MgVGVzdCB7CisgIHZvaWQgYmFyKCkgeworICAgIGZvbygyPGNhcmV0Pi4pOworICB9CisgIHZvaWQgZm9vKGZsb2F0IGYpe30KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY29udmVydERvdWJsZVRvRmxvYXQvYmVmb3JlMy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jb252ZXJ0RG91YmxlVG9GbG9hdC9iZWZvcmUzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2Y2ZmIwNwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY29udmVydERvdWJsZVRvRmxvYXQvYmVmb3JlMy5qYXZhCkBAIC0wLDAgKzEsNyBAQAorLy8gIkNvbnZlcnQgJy4zJyB0byBmbG9hdCIgInRydWUiCitjbGFzcyBUZXN0IHsKKyAgdm9pZCBiYXIoKSB7CisgICAgZm9vKC48Y2FyZXQ+Myk7CisgIH0KKyAgdm9pZCBmb28oZmxvYXQgZil7fQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jb252ZXJ0RG91YmxlVG9GbG9hdC9iZWZvcmU0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NvbnZlcnREb3VibGVUb0Zsb2F0L2JlZm9yZTQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MmNiNTlkCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jb252ZXJ0RG91YmxlVG9GbG9hdC9iZWZvcmU0LmphdmEKQEAgLTAsMCArMSw3IEBACisvLyAiQ29udmVydCAnMC4wJyB0byBmbG9hdCIgInRydWUiCitjbGFzcyBUZXN0IHsKKyAgdm9pZCBiYXIoKSB7CisgICAgZm9vKDA8Y2FyZXQ+LjApOworICB9CisgIHZvaWQgZm9vKGZsb2F0IGYpe30KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY29udmVydERvdWJsZVRvRmxvYXQvYmVmb3JlNS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jb252ZXJ0RG91YmxlVG9GbG9hdC9iZWZvcmU1LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTU0MWVjNQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY29udmVydERvdWJsZVRvRmxvYXQvYmVmb3JlNS5qYXZhCkBAIC0wLDAgKzEsNyBAQAorLy8gIkNvbnZlcnQgJzMuMTQnIHRvIGZsb2F0IiAidHJ1ZSIKK2NsYXNzIFRlc3QgeworICB2b2lkIGJhcigpIHsKKyAgICBmb28oMzxjYXJldD4uMTQpOworICB9CisgIHZvaWQgZm9vKGZsb2F0IGYpe30KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY29udmVydERvdWJsZVRvRmxvYXQvYmVmb3JlNi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jb252ZXJ0RG91YmxlVG9GbG9hdC9iZWZvcmU2LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzRjNjA0OQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY29udmVydERvdWJsZVRvRmxvYXQvYmVmb3JlNi5qYXZhCkBAIC0wLDAgKzEsNyBAQAorLy8gIkNvbnZlcnQgJzFlLTlkJyB0byBmbG9hdCIgInRydWUiCitjbGFzcyBUZXN0IHsKKyAgdm9pZCBiYXIoKSB7CisgICAgZm9vKDFlLTk8Y2FyZXQ+ZCk7CisgIH0KKyAgdm9pZCBmb28oZmxvYXQgZil7fQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jb252ZXJ0RG91YmxlVG9GbG9hdC9iZWZvcmU3LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NvbnZlcnREb3VibGVUb0Zsb2F0L2JlZm9yZTcuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZTkzODkyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jb252ZXJ0RG91YmxlVG9GbG9hdC9iZWZvcmU3LmphdmEKQEAgLTAsMCArMSw3IEBACisvLyAiQ29udmVydCAnMWUxMzcnIHRvIGZsb2F0IiAiZmFsc2UiCitjbGFzcyBUZXN0IHsKKyAgdm9pZCBiYXIoKSB7CisgICAgZm9vKDFlMTxjYXJldD4zNyk7CisgIH0KKyAgdm9pZCBmb28oZmxvYXQgZil7fQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jb252ZXJ0U3dpdGNoVG9JZi9hZnRlcjEuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY29udmVydFN3aXRjaFRvSWYvYWZ0ZXIxLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTMyODIyMgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY29udmVydFN3aXRjaFRvSWYvYWZ0ZXIxLmphdmEKQEAgLTAsMCArMSw4IEBACisvLyAiUmVwbGFjZSAnc3dpdGNoJyB3aXRoICdpZiciICJ0cnVlIgorY2xhc3MgVGVzdCB7CisgIHZvaWQgZm9vKGZsb2F0IGYpIHsKKyAgICAgIGlmIChmID09IDApIHsKKyAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oZik7CisgICAgICB9CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NvbnZlcnRTd2l0Y2hUb0lmL2JlZm9yZTEuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY29udmVydFN3aXRjaFRvSWYvYmVmb3JlMS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU2ZDBiZTEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NvbnZlcnRTd2l0Y2hUb0lmL2JlZm9yZTEuamF2YQpAQCAtMCwwICsxLDkgQEAKKy8vICJSZXBsYWNlICdzd2l0Y2gnIHdpdGggJ2lmJyIgInRydWUiCitjbGFzcyBUZXN0IHsKKyAgdm9pZCBmb28oZmxvYXQgZikgeworICAgIHN3aXRjaCAoZjxjYXJldD4pIHsKKyAgICAgIGNhc2UgMDoKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKGYpOworICAgIH0KKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY29udmVydFN3aXRjaFRvSWYvYmVmb3JlMi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jb252ZXJ0U3dpdGNoVG9JZi9iZWZvcmUyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTk0ZTNmZAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY29udmVydFN3aXRjaFRvSWYvYmVmb3JlMi5qYXZhCkBAIC0wLDAgKzEsNyBAQAorLy8gIlJlcGxhY2UgJ3N3aXRjaCcgd2l0aCAnaWYnIiAiZmFsc2UiCitjbGFzcyBUZXN0IHsKKyAgdm9pZCBmb28oZmxvYXQgZikgeworICAgIHN3aXRjaCAoZjxjYXJldD4pIHsKKyAgICB9CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NvbnZlcnRTd2l0Y2hUb0lmL2JlZm9yZTMuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY29udmVydFN3aXRjaFRvSWYvYmVmb3JlMy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJiNzAxNDAKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NvbnZlcnRTd2l0Y2hUb0lmL2JlZm9yZTMuamF2YQpAQCAtMCwwICsxLDggQEAKKy8vICJSZXBsYWNlICdzd2l0Y2gnIHdpdGggJ2lmJyIgImZhbHNlIgorY2xhc3MgVGVzdCB7CisgIHZvaWQgZm9vKGZsb2F0IGYpIHsKKyAgICBzd2l0Y2ggKGY8Y2FyZXQ+KSB7CisgICAgICBjYXNlIAorICAgIH0KKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY29weUFic3RyYWN0TWV0aG9kSW1wbGVtZW50YXRpb24vYWZ0ZXJFbnVtQ29uc3RhbnQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY29weUFic3RyYWN0TWV0aG9kSW1wbGVtZW50YXRpb24vYWZ0ZXJFbnVtQ29uc3RhbnQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOTIyM2Y5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jb3B5QWJzdHJhY3RNZXRob2RJbXBsZW1lbnRhdGlvbi9hZnRlckVudW1Db25zdGFudC5qYXZhCkBAIC0wLDAgKzEsMTQgQEAKKy8vICJVc2UgZXhpc3RpbmcgaW1wbGVtZW50YXRpb24gb2YgJ20nIiAidHJ1ZSIKK2VudW0gSSB7CisgICAgQSB7CisgICAgICAgIHZvaWQgbSgpIHsKKyAgICAgICAgICAgIDxzZWxlY3Rpb24+U3lzdGVtLm91dC5wcmludGxuKCIiKTs8L3NlbGVjdGlvbj4KKyAgICAgICAgfQorICAgIH0sCisgICAgQiB7CisgICAgICAgIHB1YmxpYyB2b2lkIG0oKSB7CisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIiIpOworICAgICAgICB9CisgICAgfTsKKyAgICBhYnN0cmFjdCB2b2lkIG0oKTsKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY29weUFic3RyYWN0TWV0aG9kSW1wbGVtZW50YXRpb24vYWZ0ZXJFbnVtQ29uc3RhbnRXaXRoQXJncy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jb3B5QWJzdHJhY3RNZXRob2RJbXBsZW1lbnRhdGlvbi9hZnRlckVudW1Db25zdGFudFdpdGhBcmdzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmJhZGE1ZQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY29weUFic3RyYWN0TWV0aG9kSW1wbGVtZW50YXRpb24vYWZ0ZXJFbnVtQ29uc3RhbnRXaXRoQXJncy5qYXZhCkBAIC0wLDAgKzEsMTUgQEAKKy8vICJVc2UgZXhpc3RpbmcgaW1wbGVtZW50YXRpb24gb2YgJ20nIiAidHJ1ZSIKK2VudW0gSSB7CisgICAgQSgiYSIpIHsKKyAgICAgICAgdm9pZCBtKCkgeworICAgICAgICAgICAgPHNlbGVjdGlvbj48Y2FyZXQ+U3lzdGVtLm91dC5wcmludGxuKCIiKTs8L3NlbGVjdGlvbj4KKyAgICAgICAgfQorICAgIH0sCisgICAgQigiYiIpIHsKKyAgICAgICAgcHVibGljIHZvaWQgbSgpIHsKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiIik7CisgICAgICAgIH0KKyAgICB9OworICAgIGFic3RyYWN0IHZvaWQgbSgpOworICAgIEkoU3RyaW5nIHMpe30KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY29weUFic3RyYWN0TWV0aG9kSW1wbGVtZW50YXRpb24vYWZ0ZXJHZW5lcmljLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NvcHlBYnN0cmFjdE1ldGhvZEltcGxlbWVudGF0aW9uL2FmdGVyR2VuZXJpYy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBjN2YxNjAKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NvcHlBYnN0cmFjdE1ldGhvZEltcGxlbWVudGF0aW9uL2FmdGVyR2VuZXJpYy5qYXZhCkBAIC0wLDAgKzEsMTYgQEAKKy8vICJVc2UgZXhpc3RpbmcgaW1wbGVtZW50YXRpb24gb2YgJ20nIiAidHJ1ZSIKK2ludGVyZmFjZSBJPFQ+IHsKKyAgICB2b2lkIG0oVCBwYXJhbSk7Cit9CisKK2NsYXNzIEEgaW1wbGVtZW50cyBJPE9iamVjdD4geworICAgIHB1YmxpYyB2b2lkIG0oT2JqZWN0IHBhcmFtKSB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihwYXJhbS50b1N0cmluZygpKTsKKyAgICB9Cit9CisKK2NsYXNzIEIgaW1wbGVtZW50cyBJPFN0cmluZz4geworICAgIHB1YmxpYyB2b2lkIG0oU3RyaW5nIHBhcmFtKSB7CisgICAgICAgIDxzZWxlY3Rpb24+U3lzdGVtLm91dC5wcmludGxuKHBhcmFtLnRvU3RyaW5nKCkpOzwvc2VsZWN0aW9uPgorICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY29weUFic3RyYWN0TWV0aG9kSW1wbGVtZW50YXRpb24vYWZ0ZXJTaW1wbGUuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY29weUFic3RyYWN0TWV0aG9kSW1wbGVtZW50YXRpb24vYWZ0ZXJTaW1wbGUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMjJiMGIzCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jb3B5QWJzdHJhY3RNZXRob2RJbXBsZW1lbnRhdGlvbi9hZnRlclNpbXBsZS5qYXZhCkBAIC0wLDAgKzEsMTYgQEAKKy8vICJVc2UgZXhpc3RpbmcgaW1wbGVtZW50YXRpb24gb2YgJ20nIiAidHJ1ZSIKK2ludGVyZmFjZSBJIHsKKyAgICB2b2lkIG0oKTsKK30KKworY2xhc3MgQSBpbXBsZW1lbnRzIEkgeworICAgIHB1YmxpYyB2b2lkIG0oKSB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiY29kZSIpOworICAgIH0KK30KKworY2xhc3MgQiBpbXBsZW1lbnRzIEkgeworICAgIHB1YmxpYyB2b2lkIG0oKSB7CisgICAgICAgIDxzZWxlY3Rpb24+U3lzdGVtLm91dC5wcmludGxuKCJjb2RlIik7PC9zZWxlY3Rpb24+CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jb3B5QWJzdHJhY3RNZXRob2RJbXBsZW1lbnRhdGlvbi9hZnRlclNraXBDaGlsZENsYXNzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NvcHlBYnN0cmFjdE1ldGhvZEltcGxlbWVudGF0aW9uL2FmdGVyU2tpcENoaWxkQ2xhc3MuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYWFmNWI4Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jb3B5QWJzdHJhY3RNZXRob2RJbXBsZW1lbnRhdGlvbi9hZnRlclNraXBDaGlsZENsYXNzLmphdmEKQEAgLTAsMCArMSwxOSBAQAorLy8gIlVzZSBleGlzdGluZyBpbXBsZW1lbnRhdGlvbiBvZiAnbSciICJ0cnVlIgoraW50ZXJmYWNlIEk8VD4geworICAgIHZvaWQgbShUIHBhcmFtKTsKK30KKworY2xhc3MgQSBpbXBsZW1lbnRzIEk8T2JqZWN0PiB7CisgICAgcHVibGljIHZvaWQgbShPYmplY3QgcGFyYW0pIHsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKHBhcmFtLnRvU3RyaW5nKCkpOworICAgIH0KK30KKworY2xhc3MgQiBpbXBsZW1lbnRzIEk8U3RyaW5nPiB7CisgICAgcHVibGljIHZvaWQgbShTdHJpbmcgcGFyYW0pIHsKKyAgICAgICAgPHNlbGVjdGlvbj5TeXN0ZW0ub3V0LnByaW50bG4ocGFyYW0udG9TdHJpbmcoKSk7PC9zZWxlY3Rpb24+CisgICAgfQorfQorCitjbGFzcyBDIGV4dGVuZHMgQiB7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jb3B5QWJzdHJhY3RNZXRob2RJbXBsZW1lbnRhdGlvbi9hZnRlclN0YXRpY1JlZi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jb3B5QWJzdHJhY3RNZXRob2RJbXBsZW1lbnRhdGlvbi9hZnRlclN0YXRpY1JlZi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmExZGQzZWQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NvcHlBYnN0cmFjdE1ldGhvZEltcGxlbWVudGF0aW9uL2FmdGVyU3RhdGljUmVmLmphdmEKQEAgLTAsMCArMSwxOCBAQAorLy8gIlVzZSBleGlzdGluZyBpbXBsZW1lbnRhdGlvbiBvZiAnbSciICJ0cnVlIgoraW50ZXJmYWNlIEkgeworICAgIHZvaWQgbSgpOworfQorCitjbGFzcyBBIGltcGxlbWVudHMgSSB7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEVYVCA9ICJjb2RlIjsKKworICAgIHB1YmxpYyB2b2lkIG0oKSB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihURVhUKTsKKyAgICB9Cit9CisKK2NsYXNzIEIgaW1wbGVtZW50cyBJIHsKKyAgICBwdWJsaWMgdm9pZCBtKCkgeworICAgICAgICA8c2VsZWN0aW9uPlN5c3RlbS5vdXQucHJpbnRsbihBLlRFWFQpOzwvc2VsZWN0aW9uPgorICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY29weUFic3RyYWN0TWV0aG9kSW1wbGVtZW50YXRpb24vYmVmb3JlRW51bUNvbnN0YW50LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NvcHlBYnN0cmFjdE1ldGhvZEltcGxlbWVudGF0aW9uL2JlZm9yZUVudW1Db25zdGFudC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlmZTY1MmQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NvcHlBYnN0cmFjdE1ldGhvZEltcGxlbWVudGF0aW9uL2JlZm9yZUVudW1Db25zdGFudC5qYXZhCkBAIC0wLDAgKzEsMTAgQEAKKy8vICJVc2UgZXhpc3RpbmcgaW1wbGVtZW50YXRpb24gb2YgJ20nIiAidHJ1ZSIKK2VudW0gSSB7CisgICAgQSwKKyAgICBCIHsKKyAgICAgICAgcHVibGljIHZvaWQgbSgpIHsKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiIik7CisgICAgICAgIH0KKyAgICB9OworICAgIGFic3RyYWN0IHZvaWQgPGNhcmV0Pm0oKTsKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY29weUFic3RyYWN0TWV0aG9kSW1wbGVtZW50YXRpb24vYmVmb3JlRW51bUNvbnN0YW50V2l0aEFyZ3MuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY29weUFic3RyYWN0TWV0aG9kSW1wbGVtZW50YXRpb24vYmVmb3JlRW51bUNvbnN0YW50V2l0aEFyZ3MuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MDJmMWUxCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jb3B5QWJzdHJhY3RNZXRob2RJbXBsZW1lbnRhdGlvbi9iZWZvcmVFbnVtQ29uc3RhbnRXaXRoQXJncy5qYXZhCkBAIC0wLDAgKzEsMTEgQEAKKy8vICJVc2UgZXhpc3RpbmcgaW1wbGVtZW50YXRpb24gb2YgJ20nIiAidHJ1ZSIKK2VudW0gSSB7CisgICAgQSgiYSIpLAorICAgIEIoImIiKSB7CisgICAgICAgIHB1YmxpYyB2b2lkIG0oKSB7CisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIiIpOworICAgICAgICB9CisgICAgfTsKKyAgICBhYnN0cmFjdCB2b2lkIDxjYXJldD5tKCk7CisgICAgSShTdHJpbmcgcyl7fQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jb3B5QWJzdHJhY3RNZXRob2RJbXBsZW1lbnRhdGlvbi9iZWZvcmVHZW5lcmljLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NvcHlBYnN0cmFjdE1ldGhvZEltcGxlbWVudGF0aW9uL2JlZm9yZUdlbmVyaWMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNmRiNDNhCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jb3B5QWJzdHJhY3RNZXRob2RJbXBsZW1lbnRhdGlvbi9iZWZvcmVHZW5lcmljLmphdmEKQEAgLTAsMCArMSwxMyBAQAorLy8gIlVzZSBleGlzdGluZyBpbXBsZW1lbnRhdGlvbiBvZiAnbSciICJ0cnVlIgoraW50ZXJmYWNlIEk8VD4geworICAgIHZvaWQgPGNhcmV0Pm0oVCBwYXJhbSk7Cit9CisKK2NsYXNzIEEgaW1wbGVtZW50cyBJPE9iamVjdD4geworICAgIHB1YmxpYyB2b2lkIG0oT2JqZWN0IHBhcmFtKSB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihwYXJhbS50b1N0cmluZygpKTsKKyAgICB9Cit9CisKK2NsYXNzIEIgaW1wbGVtZW50cyBJPFN0cmluZz4geworfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jb3B5QWJzdHJhY3RNZXRob2RJbXBsZW1lbnRhdGlvbi9iZWZvcmVJbnRlcmZhY2VFeHRlbmRzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NvcHlBYnN0cmFjdE1ldGhvZEltcGxlbWVudGF0aW9uL2JlZm9yZUludGVyZmFjZUV4dGVuZHMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wN2QzNDdmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jb3B5QWJzdHJhY3RNZXRob2RJbXBsZW1lbnRhdGlvbi9iZWZvcmVJbnRlcmZhY2VFeHRlbmRzLmphdmEKQEAgLTAsMCArMSwxMSBAQAorLy8gIlVzZSBleGlzdGluZyBpbXBsZW1lbnRhdGlvbiBvZiAnZm9vJyIgImZhbHNlIgoraW50ZXJmYWNlIEkgeworICAgIHZvaWQgPGNhcmV0PmZvbygpOworfQorY2xhc3MgSUltcGwgaW1wbGVtZW50cyBJIHsKKyAgQE92ZXJyaWRlCisgIHB1YmxpYyB2b2lkIGZvbygpIHt9Cit9CisKK2ludGVyZmFjZSBJSSBleHRlbmRzIEkge30KK2NsYXNzIElJbXBsMiBleHRlbmRzIElJbXBsIGltcGxlbWVudHMgSUkge30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NvcHlBYnN0cmFjdE1ldGhvZEltcGxlbWVudGF0aW9uL2JlZm9yZVNpbXBsZS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jb3B5QWJzdHJhY3RNZXRob2RJbXBsZW1lbnRhdGlvbi9iZWZvcmVTaW1wbGUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NGM2ZGFiCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jb3B5QWJzdHJhY3RNZXRob2RJbXBsZW1lbnRhdGlvbi9iZWZvcmVTaW1wbGUuamF2YQpAQCAtMCwwICsxLDEzIEBACisvLyAiVXNlIGV4aXN0aW5nIGltcGxlbWVudGF0aW9uIG9mICdtJyIgInRydWUiCitpbnRlcmZhY2UgSSB7CisgICAgdm9pZCA8Y2FyZXQ+bSgpOworfQorCitjbGFzcyBBIGltcGxlbWVudHMgSSB7CisgICAgcHVibGljIHZvaWQgbSgpIHsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJjb2RlIik7CisgICAgfQorfQorCitjbGFzcyBCIGltcGxlbWVudHMgSSB7Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NvcHlBYnN0cmFjdE1ldGhvZEltcGxlbWVudGF0aW9uL2JlZm9yZVNraXBDaGlsZENsYXNzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NvcHlBYnN0cmFjdE1ldGhvZEltcGxlbWVudGF0aW9uL2JlZm9yZVNraXBDaGlsZENsYXNzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzFkMDhmOAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY29weUFic3RyYWN0TWV0aG9kSW1wbGVtZW50YXRpb24vYmVmb3JlU2tpcENoaWxkQ2xhc3MuamF2YQpAQCAtMCwwICsxLDE2IEBACisvLyAiVXNlIGV4aXN0aW5nIGltcGxlbWVudGF0aW9uIG9mICdtJyIgInRydWUiCitpbnRlcmZhY2UgSTxUPiB7CisgICAgdm9pZCA8Y2FyZXQ+bShUIHBhcmFtKTsKK30KKworY2xhc3MgQSBpbXBsZW1lbnRzIEk8T2JqZWN0PiB7CisgICAgcHVibGljIHZvaWQgbShPYmplY3QgcGFyYW0pIHsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKHBhcmFtLnRvU3RyaW5nKCkpOworICAgIH0KK30KKworY2xhc3MgQiBpbXBsZW1lbnRzIEk8U3RyaW5nPiB7Cit9CisKK2NsYXNzIEMgZXh0ZW5kcyBCIHsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NvcHlBYnN0cmFjdE1ldGhvZEltcGxlbWVudGF0aW9uL2JlZm9yZVN0YXRpY1JlZi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jb3B5QWJzdHJhY3RNZXRob2RJbXBsZW1lbnRhdGlvbi9iZWZvcmVTdGF0aWNSZWYuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMTZiYjFiCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jb3B5QWJzdHJhY3RNZXRob2RJbXBsZW1lbnRhdGlvbi9iZWZvcmVTdGF0aWNSZWYuamF2YQpAQCAtMCwwICsxLDE1IEBACisvLyAiVXNlIGV4aXN0aW5nIGltcGxlbWVudGF0aW9uIG9mICdtJyIgInRydWUiCitpbnRlcmZhY2UgSSB7CisgICAgdm9pZCA8Y2FyZXQ+bSgpOworfQorCitjbGFzcyBBIGltcGxlbWVudHMgSSB7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEVYVCA9ICJjb2RlIjsKKworICAgIHB1YmxpYyB2b2lkIG0oKSB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihURVhUKTsKKyAgICB9Cit9CisKK2NsYXNzIEIgaW1wbGVtZW50cyBJIHsKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlQW5ub3RhdGlvbk1ldGhvZEZyb21Vc2FnZS9hZnRlcjEuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlQW5ub3RhdGlvbk1ldGhvZEZyb21Vc2FnZS9hZnRlcjEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYTI0NDA2Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVBbm5vdGF0aW9uTWV0aG9kRnJvbVVzYWdlL2FmdGVyMS5qYXZhCkBAIC0wLDAgKzEsMTAgQEAKKy8vICJDcmVhdGUgTWV0aG9kICd0ZXN0JyIgInRydWUiCitwdWJsaWMgY2xhc3MgVGVzdCB7CisgICAgQEF0dHIodGVzdD0gIiIpCisgICAgcHVibGljIFRlc3QoKSB7CisgICAgfQorfQorCitAaW50ZXJmYWNlIEF0dHIgeworICAgIFN0cmluZyB0ZXN0KCk7Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUFubm90YXRpb25NZXRob2RGcm9tVXNhZ2UvYWZ0ZXIyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUFubm90YXRpb25NZXRob2RGcm9tVXNhZ2UvYWZ0ZXIyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTY2ZDNlNwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlQW5ub3RhdGlvbk1ldGhvZEZyb21Vc2FnZS9hZnRlcjIuamF2YQpAQCAtMCwwICsxLDEwIEBACisvLyAiQ3JlYXRlIE1ldGhvZCAndGVzdCciICJ0cnVlIgorcHVibGljIGNsYXNzIFRlc3QgeworICAgIEBBdHRyKHRlc3Q9IHsiIn0pCisgICAgcHVibGljIFRlc3QoKSB7CisgICAgfQorfQorCitAaW50ZXJmYWNlIEF0dHIgeworICAgIFN0cmluZ1tdIHRlc3QoKTsKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlQW5ub3RhdGlvbk1ldGhvZEZyb21Vc2FnZS9iZWZvcmUxLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUFubm90YXRpb25NZXRob2RGcm9tVXNhZ2UvYmVmb3JlMS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFhY2ZlMTAKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUFubm90YXRpb25NZXRob2RGcm9tVXNhZ2UvYmVmb3JlMS5qYXZhCkBAIC0wLDAgKzEsOSBAQAorLy8gIkNyZWF0ZSBNZXRob2QgJ3Rlc3QnIiAidHJ1ZSIKK3B1YmxpYyBjbGFzcyBUZXN0IHsKKyAgICBAQXR0cih0ZTxjYXJldD5zdD0gIiIpCisgICAgcHVibGljIFRlc3QoKSB7CisgICAgfQorfQorCitAaW50ZXJmYWNlIEF0dHIgeworfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVBbm5vdGF0aW9uTWV0aG9kRnJvbVVzYWdlL2JlZm9yZTIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlQW5ub3RhdGlvbk1ldGhvZEZyb21Vc2FnZS9iZWZvcmUyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTE2YWQ1MAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlQW5ub3RhdGlvbk1ldGhvZEZyb21Vc2FnZS9iZWZvcmUyLmphdmEKQEAgLTAsMCArMSw5IEBACisvLyAiQ3JlYXRlIE1ldGhvZCAndGVzdCciICJ0cnVlIgorcHVibGljIGNsYXNzIFRlc3QgeworICAgIEBBdHRyKHRlPGNhcmV0PnN0PSB7IiJ9KQorICAgIHB1YmxpYyBUZXN0KCkgeworICAgIH0KK30KKworQGludGVyZmFjZSBBdHRyIHsKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlQW5ub3RhdGlvbk1ldGhvZEZyb21Vc2FnZS9iZWZvcmUzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUFubm90YXRpb25NZXRob2RGcm9tVXNhZ2UvYmVmb3JlMy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY5ZTVmZjIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUFubm90YXRpb25NZXRob2RGcm9tVXNhZ2UvYmVmb3JlMy5qYXZhCkBAIC0wLDAgKzEsOSBAQAorLy8gIkNyZWF0ZSBNZXRob2QgJ3Rlc3QnIiAiZmFsc2UiCitwdWJsaWMgY2xhc3MgVGVzdCB7CisgICAgQEF0dHIodGU8Y2FyZXQ+c3Q9IHsiIiwgMX0pCisgICAgcHVibGljIFRlc3QoKSB7CisgICAgfQorfQorCitAaW50ZXJmYWNlIEF0dHIgeworfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVBbm5vdGF0aW9uTWV0aG9kRnJvbVVzYWdlL2JlZm9yZTQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlQW5ub3RhdGlvbk1ldGhvZEZyb21Vc2FnZS9iZWZvcmU0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWE2N2VjOAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlQW5ub3RhdGlvbk1ldGhvZEZyb21Vc2FnZS9iZWZvcmU0LmphdmEKQEAgLTAsMCArMSw5IEBACisvLyAiQ3JlYXRlIE1ldGhvZCAndGVzdCciICJmYWxzZSIKK3B1YmxpYyBjbGFzcyBUZXN0IHsKKyAgICBAQXR0cih0ZTxjYXJldD5zdD0ge25ldyBTdHJpbmdbXXsiIn19KQorICAgIHB1YmxpYyBUZXN0KCkgeworICAgIH0KK30KKworQGludGVyZmFjZSBBdHRyIHsKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlQW5ub3RhdGlvblR5cGVGcm9tVXNhZ2UvYWZ0ZXIxLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUFubm90YXRpb25UeXBlRnJvbVVzYWdlL2FmdGVyMS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdkNmVhZDUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUFubm90YXRpb25UeXBlRnJvbVVzYWdlL2FmdGVyMS5qYXZhCkBAIC0wLDAgKzEsNyBAQAorLy8gIkNyZWF0ZSBBbm5vdGF0aW9uICdTbXRoJyIgInRydWUiCitjbGFzcyBUZXN0IHsKKyAgdm9pZCBmb28oQFNtdGggU3RyaW5nIHMpe30KK30KKworcHVibGljIEBpbnRlcmZhY2UgU210aCB7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVBbm5vdGF0aW9uVHlwZUZyb21Vc2FnZS9iZWZvcmUxLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUFubm90YXRpb25UeXBlRnJvbVVzYWdlL2JlZm9yZTEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40Yjc5Yjc3Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVBbm5vdGF0aW9uVHlwZUZyb21Vc2FnZS9iZWZvcmUxLmphdmEKQEAgLTAsMCArMSw0IEBACisvLyAiQ3JlYXRlIEFubm90YXRpb24gJ1NtdGgnIiAidHJ1ZSIKK2NsYXNzIFRlc3QgeworICB2b2lkIGZvbyhAUzxjYXJldD5tdGggU3RyaW5nIHMpe30KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUFubm90YXRpb25UeXBlRnJvbVVzYWdlL2JlZm9yZU5vdEF2YWlsYWJsZUluTm9uQW5ub3RhdGlvblBsYWNlLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUFubm90YXRpb25UeXBlRnJvbVVzYWdlL2JlZm9yZU5vdEF2YWlsYWJsZUluTm9uQW5ub3RhdGlvblBsYWNlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTYwZjIyOQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlQW5ub3RhdGlvblR5cGVGcm9tVXNhZ2UvYmVmb3JlTm90QXZhaWxhYmxlSW5Ob25Bbm5vdGF0aW9uUGxhY2UuamF2YQpAQCAtMCwwICsxLDQgQEAKKy8vICJDcmVhdGUgQW5ub3RhdGlvbiAnU210aCciICJmYWxzZSIKK2NsYXNzIFRlc3QgeworICB2b2lkIGZvbyhTPGNhcmV0Pm10aCBzKXt9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVDYXN0RXhwcmVzc2lvbkZyb21JbnN0YW5jZW9mL2FmdGVyMS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVDYXN0RXhwcmVzc2lvbkZyb21JbnN0YW5jZW9mL2FmdGVyMS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM1M2U0NzgKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUNhc3RFeHByZXNzaW9uRnJvbUluc3RhbmNlb2YvYWZ0ZXIxLmphdmEKQEAgLTAsMCArMSw5IEBACisvLyAiQ2FzdCB0byAnUnVubmFibGUnIiAidHJ1ZSIKK2NsYXNzIEMgeworICB2b2lkIGYoKSB7CisgICAgaWYgKHRoaXMgaW5zdGFuY2VvZiBSdW5uYWJsZSkgeworICAgICAgICAoKFJ1bm5hYmxlKSB0aGlzKTxjYXJldD4KKyAgICB9CisgIH0KK30KKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVDYXN0RXhwcmVzc2lvbkZyb21JbnN0YW5jZW9mL2FmdGVyT25SZWYuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlQ2FzdEV4cHJlc3Npb25Gcm9tSW5zdGFuY2VvZi9hZnRlck9uUmVmLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzNhNmY2NgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlQ2FzdEV4cHJlc3Npb25Gcm9tSW5zdGFuY2VvZi9hZnRlck9uUmVmLmphdmEKQEAgLTAsMCArMSw5IEBACisvLyAiQ2FzdCB0byAnUnVubmFibGUnIiAidHJ1ZSIKK2NsYXNzIEMgeworICB2b2lkIGYoT2JqZWN0IG8pIHsKKyAgICBpZiAobyBpbnN0YW5jZW9mIFJ1bm5hYmxlKSB7CisgICAgICAgICgoUnVubmFibGUpIG8pPGNhcmV0PgorICAgIH0KKyAgfQorfQorCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUNhc3RFeHByZXNzaW9uRnJvbUluc3RhbmNlb2YvYWZ0ZXJTb21lU3RtdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVDYXN0RXhwcmVzc2lvbkZyb21JbnN0YW5jZW9mL2FmdGVyU29tZVN0bXQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZTEyMzA5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVDYXN0RXhwcmVzc2lvbkZyb21JbnN0YW5jZW9mL2FmdGVyU29tZVN0bXQuamF2YQpAQCAtMCwwICsxLDkgQEAKKy8vICJDYXN0IHRvICdBJyIgInRydWUiCitjbGFzcyBBIHsKKyAgIHZvaWQgZm9vKE9iamVjdCBmb28pIHsKKyAgICAgICBpZihmb28gaW5zdGFuY2VvZiBBKSB7CisgICAgICAgICAgICgoQSkgZm9vKQorICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIiIpOworICAgICAgIH0KKyAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUNhc3RFeHByZXNzaW9uRnJvbUluc3RhbmNlb2YvYmVmb3JlMS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVDYXN0RXhwcmVzc2lvbkZyb21JbnN0YW5jZW9mL2JlZm9yZTEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOTI1ODk3Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVDYXN0RXhwcmVzc2lvbkZyb21JbnN0YW5jZW9mL2JlZm9yZTEuamF2YQpAQCAtMCwwICsxLDcgQEAKKy8vICJDYXN0IHRvICdSdW5uYWJsZSciICJ0cnVlIgorY2xhc3MgQyB7CisgIHZvaWQgZigpIHsKKyAgICBpZiAodGhpcyA8Y2FyZXQ+aW5zdGFuY2VvZiBSdW5uYWJsZSkKKyAgfQorfQorCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUNhc3RFeHByZXNzaW9uRnJvbUluc3RhbmNlb2YvYmVmb3JlTmVnYXRpb25PblJlZi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVDYXN0RXhwcmVzc2lvbkZyb21JbnN0YW5jZW9mL2JlZm9yZU5lZ2F0aW9uT25SZWYuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZDAwNmI2Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVDYXN0RXhwcmVzc2lvbkZyb21JbnN0YW5jZW9mL2JlZm9yZU5lZ2F0aW9uT25SZWYuamF2YQpAQCAtMCwwICsxLDkgQEAKKy8vICJDYXN0IHRvICdSdW5uYWJsZSciICJmYWxzZSIKK2NsYXNzIEMgeworICB2b2lkIGYoT2JqZWN0IG8pIHsKKyAgICBpZiAoIShvIGluc3RhbmNlb2YgUnVubmFibGUpKSB7CisgICAgICBvPGNhcmV0PgorICAgIH0KKyAgfQorfQorCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUNhc3RFeHByZXNzaW9uRnJvbUluc3RhbmNlb2YvYmVmb3JlT25SZWYuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlQ2FzdEV4cHJlc3Npb25Gcm9tSW5zdGFuY2VvZi9iZWZvcmVPblJlZi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJhNDRlMGYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUNhc3RFeHByZXNzaW9uRnJvbUluc3RhbmNlb2YvYmVmb3JlT25SZWYuamF2YQpAQCAtMCwwICsxLDkgQEAKKy8vICJDYXN0IHRvICdSdW5uYWJsZSciICJ0cnVlIgorY2xhc3MgQyB7CisgIHZvaWQgZihPYmplY3QgbykgeworICAgIGlmIChvIGluc3RhbmNlb2YgUnVubmFibGUpIHsKKyAgICAgIG88Y2FyZXQ+CisgICAgfQorICB9Cit9CisKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlQ2FzdEV4cHJlc3Npb25Gcm9tSW5zdGFuY2VvZi9iZWZvcmVTb21lU3RtdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVDYXN0RXhwcmVzc2lvbkZyb21JbnN0YW5jZW9mL2JlZm9yZVNvbWVTdG10LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmFlOWRmYgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlQ2FzdEV4cHJlc3Npb25Gcm9tSW5zdGFuY2VvZi9iZWZvcmVTb21lU3RtdC5qYXZhCkBAIC0wLDAgKzEsOCBAQAorLy8gIkNhc3QgdG8gJ0EnIiAidHJ1ZSIKK2NsYXNzIEEgeworICAgdm9pZCBmb28oT2JqZWN0IGZvbykgeworICAgICAgIGlmKGZvbyBpbnN0YTxjYXJldD5uY2VvZiBBKSB7CisgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiIik7CisgICAgICAgfQorICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlQ2xhc3NGcm9tTmV3L2FmdGVyMS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVDbGFzc0Zyb21OZXcvYWZ0ZXIxLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDk2OTk1NQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlQ2xhc3NGcm9tTmV3L2FmdGVyMS5qYXZhCkBAIC0wLDAgKzEsMTMgQEAKKy8vICJDcmVhdGUgQ2xhc3MgJ015Q29sbGVjdGlvbiciICJ0cnVlIgoraW1wb3J0IGphdmEudXRpbC4qOworCitwdWJsaWMgY2xhc3MgVGVzdCB7CisgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oKSB7CisgICAgICAgIENvbGxlY3Rpb24gYyA9IG5ldyBNeUNvbGxlY3Rpb24oMSwgInRlc3QiKTsKKyAgICB9Cit9CisKK3B1YmxpYyBjbGFzcyBNeUNvbGxlY3Rpb24gaW1wbGVtZW50cyBDb2xsZWN0aW9uIHsKKyAgICBwdWJsaWMgTXlDb2xsZWN0aW9uKGludCBpLCBTdHJpbmcgdGVzdCkgezxjYXJldD4KKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVDbGFzc0Zyb21OZXcvYWZ0ZXIyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUNsYXNzRnJvbU5ldy9hZnRlcjIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YjE1ZDYwCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVDbGFzc0Zyb21OZXcvYWZ0ZXIyLmphdmEKQEAgLTAsMCArMSwxMyBAQAorLy8gIkNyZWF0ZSBDbGFzcyAnTXlBcnJheUxpc3QnIiAidHJ1ZSIKK2ltcG9ydCBqYXZhLnV0aWwuKjsKKworcHVibGljIGNsYXNzIFRlc3QgeworICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKCkgeworICAgICAgICBBcnJheUxpc3QgbGlzdCA9IG5ldyBNeUFycmF5TGlzdCgxLCAidGVzdCIpOworICAgIH0KK30KKworcHVibGljIGNsYXNzIE15QXJyYXlMaXN0IGV4dGVuZHMgQXJyYXlMaXN0IHsKKyAgICBwdWJsaWMgTXlBcnJheUxpc3QoaW50IGksIFN0cmluZyB0ZXN0KSB7PGNhcmV0PgorICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUNsYXNzRnJvbU5ldy9hZnRlcjMuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlQ2xhc3NGcm9tTmV3L2FmdGVyMy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ4YWEyNTQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUNsYXNzRnJvbU5ldy9hZnRlcjMuamF2YQpAQCAtMCwwICsxLDEyIEBACisvLyAiQ3JlYXRlIENsYXNzICdNeUludGVnZXInIiAidHJ1ZSIKK3B1YmxpYyBjbGFzcyBUZXN0IHsKKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbigpIHsKKyAgICAgICAgaW50IHh4eCA9IDM7CisgICAgICAgIEludGVnZXIgaSA9IG5ldyBNeUludGVnZXIoeHh4KTsKKyAgICB9Cit9CisKK3B1YmxpYyBjbGFzcyBNeUludGVnZXIgeworICAgIHB1YmxpYyBNeUludGVnZXIoaW50IHh4eCkgezxjYXJldD4KKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVDbGFzc0Zyb21OZXcvYWZ0ZXI2LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUNsYXNzRnJvbU5ldy9hZnRlcjYuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZWUyMDI0Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVDbGFzc0Zyb21OZXcvYWZ0ZXI2LmphdmEKQEAgLTAsMCArMSw5IEBACisvLyAiQ3JlYXRlIENsYXNzICdNeUNvbGxlY3Rpb24nIiAidHJ1ZSIKK3B1YmxpYyBjbGFzcyBUZXN0IHsKKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbigpIHsKKyAgICAgICAgQ29sbGVjdGlvbltdIGNjID0gbmV3IE15Q29sbGVjdGlvblsxMF07CisgICAgfQorfQorCis8Y2FyZXQ+cHVibGljIGNsYXNzIE15Q29sbGVjdGlvbiB7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVDbGFzc0Zyb21OZXcvYWZ0ZXI3LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUNsYXNzRnJvbU5ldy9hZnRlcjcuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NzRkNGRkCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVDbGFzc0Zyb21OZXcvYWZ0ZXI3LmphdmEKQEAgLTAsMCArMSwxMyBAQAorLy8gIkNyZWF0ZSBDbGFzcyAnTXlDb2xsZWN0aW9uJyIgInRydWUiCitpbXBvcnQgamF2YS51dGlsLio7CisKK3B1YmxpYyBjbGFzcyBUZXN0IHsKKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbigpIHsKKyAgICAgICAgQ29sbGVjdGlvbiBjID0gbmV3IFRlc3QuTXlDb2xsZWN0aW9uKDEpOworICAgIH0KKworICAgIHB1YmxpYyBjbGFzcyBNeUNvbGxlY3Rpb24gaW1wbGVtZW50cyBDb2xsZWN0aW9uIHsKKyAgICAgICAgcHVibGljIE15Q29sbGVjdGlvbihpbnQgaSkgezxjYXJldD4KKyAgICAgICAgfQorICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUNsYXNzRnJvbU5ldy9hZnRlcjguamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlQ2xhc3NGcm9tTmV3L2FmdGVyOC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU0NzYxZWQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUNsYXNzRnJvbU5ldy9hZnRlcjguamF2YQpAQCAtMCwwICsxLDEyIEBACisvLyAiQ3JlYXRlIENsYXNzICdNeVRhYmxlTW9kZWwnIiAidHJ1ZSIKK2ltcG9ydCBqYXZheC5zd2luZy4qOworaW1wb3J0IGphdmF4LnN3aW5nLnRhYmxlLlRhYmxlTW9kZWw7CisKK3B1YmxpYyBjbGFzcyBUZXN0IHsKKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbigpIHsKKyAgICAgICAgSlRhYmxlIHRhYmxlID0gbmV3IEpUYWJsZShuZXcgTXlUYWJsZU1vZGVsKCkpOworICAgIH0KK30KKworPGNhcmV0PnB1YmxpYyBjbGFzcyBNeVRhYmxlTW9kZWwgaW1wbGVtZW50cyBUYWJsZU1vZGVsIHsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUNsYXNzRnJvbU5ldy9hZnRlckdlbmVyaWNzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUNsYXNzRnJvbU5ldy9hZnRlckdlbmVyaWNzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2NhZTRkOAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlQ2xhc3NGcm9tTmV3L2FmdGVyR2VuZXJpY3MuamF2YQpAQCAtMCwwICsxLDkgQEAKKy8vICJDcmVhdGUgQ2xhc3MgJ0dlbmVyaWMnIiAidHJ1ZSIKK2NsYXNzIFRlc3QgeworICB2b2lkIGZvbyAoKSB7CisgICAgbmV3IEdlbmVyaWM8U3RyaW5nPiAoKTsKKyAgfQorfQorCis8Y2FyZXQ+cHVibGljIGNsYXNzIEdlbmVyaWM8VD4geworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlQ2xhc3NGcm9tTmV3L2JlZm9yZTEuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlQ2xhc3NGcm9tTmV3L2JlZm9yZTEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZWY2ZDM3Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVDbGFzc0Zyb21OZXcvYmVmb3JlMS5qYXZhCkBAIC0wLDAgKzEsOCBAQAorLy8gIkNyZWF0ZSBDbGFzcyAnTXlDb2xsZWN0aW9uJyIgInRydWUiCitpbXBvcnQgamF2YS51dGlsLio7CisKK3B1YmxpYyBjbGFzcyBUZXN0IHsKKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbigpIHsKKyAgICAgICAgQ29sbGVjdGlvbiBjID0gbmV3IDxjYXJldD5NeUNvbGxlY3Rpb24oMSwgInRlc3QiKTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVDbGFzc0Zyb21OZXcvYmVmb3JlMi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVDbGFzc0Zyb21OZXcvYmVmb3JlMi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ5NGIyMjMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUNsYXNzRnJvbU5ldy9iZWZvcmUyLmphdmEKQEAgLTAsMCArMSw4IEBACisvLyAiQ3JlYXRlIENsYXNzICdNeUFycmF5TGlzdCciICJ0cnVlIgoraW1wb3J0IGphdmEudXRpbC4qOworCitwdWJsaWMgY2xhc3MgVGVzdCB7CisgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oKSB7CisgICAgICAgIEFycmF5TGlzdCBsaXN0ID0gbmV3IDxjYXJldD5NeUFycmF5TGlzdCgxLCAidGVzdCIpOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUNsYXNzRnJvbU5ldy9iZWZvcmUzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUNsYXNzRnJvbU5ldy9iZWZvcmUzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTE4ZmQ5ZQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlQ2xhc3NGcm9tTmV3L2JlZm9yZTMuamF2YQpAQCAtMCwwICsxLDcgQEAKKy8vICJDcmVhdGUgQ2xhc3MgJ015SW50ZWdlciciICJ0cnVlIgorcHVibGljIGNsYXNzIFRlc3QgeworICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKCkgeworICAgICAgICBpbnQgeHh4ID0gMzsKKyAgICAgICAgSW50ZWdlciBpID0gbmV3IDxjYXJldD5NeUludGVnZXIoeHh4KTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVDbGFzc0Zyb21OZXcvYmVmb3JlNC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVDbGFzc0Zyb21OZXcvYmVmb3JlNC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhkY2QzNzkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUNsYXNzRnJvbU5ldy9iZWZvcmU0LmphdmEKQEAgLTAsMCArMSw4IEBACisvLyAiRG8gbm90IHRyeSB0byBjcmVhdGUgY2xhc3MgSW5uZXIiICJmYWxzZSIKK3B1YmxpYyBjbGFzcyBUZXN0IHsKKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbigpIHsKKyAgICAgICAgbmV3IFRlPGNhcmV0PnN0LklubmVyKCk7CisgICAgfQorICAgIAorICAgIHB1YmxpYyBzdGF0aWMgY2xhc3MgSW5uZXIge30KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUNsYXNzRnJvbU5ldy9iZWZvcmU1LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUNsYXNzRnJvbU5ldy9iZWZvcmU1LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTJhYmU0ZAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlQ2xhc3NGcm9tTmV3L2JlZm9yZTUuamF2YQpAQCAtMCwwICsxLDggQEAKKy8vICJEbyBub3QgdHJ5IHRvIGNyZWF0ZSBjbGFzcyBJbm5lciIgImZhbHNlIgorcHVibGljIGNsYXNzIFRlc3QgeworICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKCkgeworICAgICAgICBuZXcgSW5uZXI8Y2FyZXQ+KCk7CisgICAgfQorICAgIAorICAgIHB1YmxpYyBzdGF0aWMgY2xhc3MgSW5uZXIge30KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUNsYXNzRnJvbU5ldy9iZWZvcmU2LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUNsYXNzRnJvbU5ldy9iZWZvcmU2LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjRhZDA5ZgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlQ2xhc3NGcm9tTmV3L2JlZm9yZTYuamF2YQpAQCAtMCwwICsxLDYgQEAKKy8vICJDcmVhdGUgQ2xhc3MgJ015Q29sbGVjdGlvbiciICJ0cnVlIgorcHVibGljIGNsYXNzIFRlc3QgeworICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKCkgeworICAgICAgICBDb2xsZWN0aW9uW10gY2MgPSBuZXcgPGNhcmV0Pk15Q29sbGVjdGlvblsxMF07CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlQ2xhc3NGcm9tTmV3L2JlZm9yZTcuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlQ2xhc3NGcm9tTmV3L2JlZm9yZTcuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZmMzYTZmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVDbGFzc0Zyb21OZXcvYmVmb3JlNy5qYXZhCkBAIC0wLDAgKzEsOCBAQAorLy8gIkNyZWF0ZSBDbGFzcyAnTXlDb2xsZWN0aW9uJyIgInRydWUiCitpbXBvcnQgamF2YS51dGlsLio7CisKK3B1YmxpYyBjbGFzcyBUZXN0IHsKKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbigpIHsKKyAgICAgICAgQ29sbGVjdGlvbiBjID0gbmV3IFRlc3QuTXk8Y2FyZXQ+Q29sbGVjdGlvbigxKTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVDbGFzc0Zyb21OZXcvYmVmb3JlOC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVDbGFzc0Zyb21OZXcvYmVmb3JlOC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMzNjc0NmMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUNsYXNzRnJvbU5ldy9iZWZvcmU4LmphdmEKQEAgLTAsMCArMSw4IEBACisvLyAiQ3JlYXRlIENsYXNzICdNeVRhYmxlTW9kZWwnIiAidHJ1ZSIKK2ltcG9ydCBqYXZheC5zd2luZy4qOworCitwdWJsaWMgY2xhc3MgVGVzdCB7CisgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oKSB7CisgICAgICAgIEpUYWJsZSB0YWJsZSA9IG5ldyBKVGFibGUobmV3IE15VGFibGU8Y2FyZXQ+TW9kZWwoKSk7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlQ2xhc3NGcm9tTmV3L2JlZm9yZTkuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlQ2xhc3NGcm9tTmV3L2JlZm9yZTkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMzBjNTA3Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVDbGFzc0Zyb21OZXcvYmVmb3JlOS5qYXZhCkBAIC0wLDAgKzEsOCBAQAorLy8gIkRvIG5vdCBjcmVhdGUgYW55dGhpbmciICJmYWxzZSIKK2ltcG9ydCBqYXZheC5zd2luZy4qOworCitwdWJsaWMgY2xhc3MgVGVzdCB7CisgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oKSB7CisJCWJvb2xlYW5bXSBiZWVzID0gbmV3IGJvb2xlYW5bYXJncy5sZW5nPGNhcmV0PnRoXTsgCisJfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlQ2xhc3NGcm9tTmV3L2JlZm9yZUdlbmVyaWNzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUNsYXNzRnJvbU5ldy9iZWZvcmVHZW5lcmljcy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ3ZWQxMTcKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUNsYXNzRnJvbU5ldy9iZWZvcmVHZW5lcmljcy5qYXZhCkBAIC0wLDAgKzEsNiBAQAorLy8gIkNyZWF0ZSBDbGFzcyAnR2VuZXJpYyciICJ0cnVlIgorY2xhc3MgVGVzdCB7CisgIHZvaWQgZm9vICgpIHsKKyAgICBuZXcgPGNhcmV0PkdlbmVyaWM8U3RyaW5nPiAoKTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlQ2xhc3NGcm9tVXNhZ2UvYWZ0ZXIxLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUNsYXNzRnJvbVVzYWdlL2FmdGVyMS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ2ZDkxZWIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUNsYXNzRnJvbVVzYWdlL2FmdGVyMS5qYXZhCkBAIC0wLDAgKzEsOSBAQAorLy8gIkNyZWF0ZSBDbGFzcyAnQWJjJyIgInRydWUiCitwdWJsaWMgY2xhc3MgVGVzdCB7CisgIHB1YmxpYyBmb28oaW50IHBwcCkgeworICAgIEFiYy5mb28oKTsKKyAgfQorfQorCitwdWJsaWMgY2xhc3MgPGNhcmV0PkFiYyB7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVDbGFzc0Zyb21Vc2FnZS9hZnRlckNhc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlQ2xhc3NGcm9tVXNhZ2UvYWZ0ZXJDYXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjFiNzgwYwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlQ2xhc3NGcm9tVXNhZ2UvYWZ0ZXJDYXN0LmphdmEKQEAgLTAsMCArMSwxMSBAQAorLy8gIkNyZWF0ZSBDbGFzcyAnQ2xhc3NCJyIgInRydWUiCitwdWJsaWMgY2xhc3MgQ2xhc3NBCit7CisgIHB1YmxpYyB2b2lkIG1BKE9iamVjdCBhcmcpCisgIHsKKyAgICAoKENsYXNzQikgYXJnKS5mb28oKTsKKyAgfQorfQorCitwdWJsaWMgY2xhc3MgPGNhcmV0PkNsYXNzQiB7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVDbGFzc0Zyb21Vc2FnZS9hZnRlckNsYXNzVXNlZEluV2lsZGNhcmQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlQ2xhc3NGcm9tVXNhZ2UvYWZ0ZXJDbGFzc1VzZWRJbldpbGRjYXJkLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmM5MDAzOAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlQ2xhc3NGcm9tVXNhZ2UvYWZ0ZXJDbGFzc1VzZWRJbldpbGRjYXJkLmphdmEKQEAgLTAsMCArMSwxMCBAQAorLy8gIkNyZWF0ZSBDbGFzcyAnRm9vJyIgInRydWUiCitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CitwdWJsaWMgY2xhc3MgVGVzdCB7CisgIHB1YmxpYyBDb2xsZWN0aW9uPD8gZXh0ZW5kcyBGb28+IGdldFNvbWV0aGluZygpIHsKKyAgICByZXR1cm4gbnVsbDsKKyAgfQorfQorCitwdWJsaWMgY2xhc3MgPGNhcmV0PkZvbyB7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVDbGFzc0Zyb21Vc2FnZS9hZnRlckVudW1Vc2VkSW5DYWxsLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUNsYXNzRnJvbVVzYWdlL2FmdGVyRW51bVVzZWRJbkNhbGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMzY3MzRjCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVDbGFzc0Zyb21Vc2FnZS9hZnRlckVudW1Vc2VkSW5DYWxsLmphdmEKQEAgLTAsMCArMSwxMSBAQAorLy8gIkNyZWF0ZSBFbnVtICdGb28nIiAidHJ1ZSIKK3B1YmxpYyBjbGFzcyBUZXN0IHsKKyAgdm9pZCBmKEkgaSkge30KKyAgeworICAgIGYoRm9vLkNPTlNUKTsKKyAgfQorfQorCitpbnRlcmZhY2UgSSB7fQorCitwdWJsaWMgZW51bSBGb28gaW1wbGVtZW50cyBJIHt9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVDbGFzc0Zyb21Vc2FnZS9hZnRlckV4dGVuZHMuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlQ2xhc3NGcm9tVXNhZ2UvYWZ0ZXJFeHRlbmRzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGFhMTFhOAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlQ2xhc3NGcm9tVXNhZ2UvYWZ0ZXJFeHRlbmRzLmphdmEKQEAgLTAsMCArMSw2IEBACisvLyAiQ3JlYXRlIENsYXNzICdBYmMnIiAidHJ1ZSIKK3B1YmxpYyBjbGFzcyBUZXN0IGV4dGVuZHMgQWJjIHsKK30KKworcHVibGljIGNsYXNzIDxjYXJldD5BYmMgeworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlQ2xhc3NGcm9tVXNhZ2UvYWZ0ZXJGaWVsZFR5cGUuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlQ2xhc3NGcm9tVXNhZ2UvYWZ0ZXJGaWVsZFR5cGUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMzkxNzk0Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVDbGFzc0Zyb21Vc2FnZS9hZnRlckZpZWxkVHlwZS5qYXZhCkBAIC0wLDAgKzEsNyBAQAorLy8gIkNyZWF0ZSBDbGFzcyAnQWJjJyIgInRydWUiCitwdWJsaWMgY2xhc3MgVGVzdCB7CisgIHByaXZhdGUgQWJjIGZsZDsKK30KKworcHVibGljIGNsYXNzIDxjYXJldD5BYmMgeworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlQ2xhc3NGcm9tVXNhZ2UvYWZ0ZXJJbk5ld0FyZ3MuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlQ2xhc3NGcm9tVXNhZ2UvYWZ0ZXJJbk5ld0FyZ3MuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNzVmNjFmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVDbGFzc0Zyb21Vc2FnZS9hZnRlckluTmV3QXJncy5qYXZhCkBAIC0wLDAgKzEsOSBAQAorLy8gIkNyZWF0ZSBDbGFzcyAnRm9vJyIgInRydWUiCitwdWJsaWMgY2xhc3MgVGVzdCB7CisgIHZvaWQgZm9vKCkgeworICAgIG5ldyBUZXN0KEZvby5GSUVMRCk7CisgIH0KK30KKworcHVibGljIGNsYXNzIEZvbyB7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVDbGFzc0Zyb21Vc2FnZS9hZnRlck1ldGhvZFR5cGUuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlQ2xhc3NGcm9tVXNhZ2UvYWZ0ZXJNZXRob2RUeXBlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODc4MDlhNQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlQ2xhc3NGcm9tVXNhZ2UvYWZ0ZXJNZXRob2RUeXBlLmphdmEKQEAgLTAsMCArMSw3IEBACisvLyAiQ3JlYXRlIENsYXNzICdBYmMnIiAidHJ1ZSIKK3B1YmxpYyBjbGFzcyBUZXN0IHsKKyAgcHJpdmF0ZSBBYmMgZm9vKCkge30KK30KKworcHVibGljIGNsYXNzIDxjYXJldD5BYmMgeworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlQ2xhc3NGcm9tVXNhZ2UvYWZ0ZXJQYXJhbWV0ZXJUeXBlLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUNsYXNzRnJvbVVzYWdlL2FmdGVyUGFyYW1ldGVyVHlwZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM1MWM3YTMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUNsYXNzRnJvbVVzYWdlL2FmdGVyUGFyYW1ldGVyVHlwZS5qYXZhCkBAIC0wLDAgKzEsNyBAQAorLy8gIkNyZWF0ZSBDbGFzcyAnQWJjJyIgInRydWUiCitwdWJsaWMgY2xhc3MgVGVzdCB7CisgIHByaXZhdGUgdm9pZCBmb28oQWJjIHBhcmFtKSB7fQorfQorCitwdWJsaWMgY2xhc3MgPGNhcmV0PkFiYyB7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVDbGFzc0Zyb21Vc2FnZS9hZnRlclR5cGVQYXJhbWV0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlQ2xhc3NGcm9tVXNhZ2UvYWZ0ZXJUeXBlUGFyYW1ldGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTBjOWI2ZQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlQ2xhc3NGcm9tVXNhZ2UvYWZ0ZXJUeXBlUGFyYW1ldGVyLmphdmEKQEAgLTAsMCArMSw3IEBACisvLyAiQ3JlYXRlIENsYXNzICdGb28nIiAidHJ1ZSIKK3B1YmxpYyBjbGFzcyBUZXN0IHsKKyAgTGlzdCBsID0gbmV3IEFycmF5TGlzdDxGb28+KCk7Cit9CisKK3B1YmxpYyBjbGFzcyA8Y2FyZXQ+Rm9vIHsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUNsYXNzRnJvbVVzYWdlL2FmdGVyVHlwZVBhcmFtZXRlckNyZWF0ZWQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlQ2xhc3NGcm9tVXNhZ2UvYWZ0ZXJUeXBlUGFyYW1ldGVyQ3JlYXRlZC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY4ZDlhODUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUNsYXNzRnJvbVVzYWdlL2FmdGVyVHlwZVBhcmFtZXRlckNyZWF0ZWQuamF2YQpAQCAtMCwwICsxLDcgQEAKKy8vICJDcmVhdGUgQ2xhc3MgJ0ZvbyciICJ0cnVlIgorcHVibGljIGNsYXNzIFRlc3QgeworICA8Uj4gdm9pZCBmb28oRm9vPFIsIFN0cmluZz4gZil7fQorfQorCitwdWJsaWMgY2xhc3MgRm9vPFIsIFQ+IHsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUNsYXNzRnJvbVVzYWdlL2JlZm9yZTEuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlQ2xhc3NGcm9tVXNhZ2UvYmVmb3JlMS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY4ZjllODAKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUNsYXNzRnJvbVVzYWdlL2JlZm9yZTEuamF2YQpAQCAtMCwwICsxLDYgQEAKKy8vICJDcmVhdGUgQ2xhc3MgJ0FiYyciICJ0cnVlIgorcHVibGljIGNsYXNzIFRlc3QgeworICBwdWJsaWMgZm9vKGludCBwcHApIHsKKyAgICA8Y2FyZXQ+QWJjLmZvbygpOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVDbGFzc0Zyb21Vc2FnZS9iZWZvcmVDYXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUNsYXNzRnJvbVVzYWdlL2JlZm9yZUNhc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNWRkYWUzCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVDbGFzc0Zyb21Vc2FnZS9iZWZvcmVDYXN0LmphdmEKQEAgLTAsMCArMSw4IEBACisvLyAiQ3JlYXRlIENsYXNzICdDbGFzc0InIiAidHJ1ZSIKK3B1YmxpYyBjbGFzcyBDbGFzc0EKK3sKKyAgcHVibGljIHZvaWQgbUEoT2JqZWN0IGFyZykKKyAgeworICAgICgoPGNhcmV0PkNsYXNzQikgYXJnKS5mb28oKTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVDbGFzc0Zyb21Vc2FnZS9iZWZvcmVDbGFzc1VzZWRJbldpbGRjYXJkLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUNsYXNzRnJvbVVzYWdlL2JlZm9yZUNsYXNzVXNlZEluV2lsZGNhcmQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNDZjMDBlCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVDbGFzc0Zyb21Vc2FnZS9iZWZvcmVDbGFzc1VzZWRJbldpbGRjYXJkLmphdmEKQEAgLTAsMCArMSw3IEBACisvLyAiQ3JlYXRlIENsYXNzICdGb28nIiAidHJ1ZSIKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKK3B1YmxpYyBjbGFzcyBUZXN0IHsKKyAgcHVibGljIENvbGxlY3Rpb248PyBleHRlbmRzIEZvPGNhcmV0Pm8+IGdldFNvbWV0aGluZygpIHsKKyAgICByZXR1cm4gbnVsbDsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlQ2xhc3NGcm9tVXNhZ2UvYmVmb3JlRW51bVVzZWRJbkNhbGwuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlQ2xhc3NGcm9tVXNhZ2UvYmVmb3JlRW51bVVzZWRJbkNhbGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYjE3YTQ4Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVDbGFzc0Zyb21Vc2FnZS9iZWZvcmVFbnVtVXNlZEluQ2FsbC5qYXZhCkBAIC0wLDAgKzEsOSBAQAorLy8gIkNyZWF0ZSBFbnVtICdGb28nIiAidHJ1ZSIKK3B1YmxpYyBjbGFzcyBUZXN0IHsKKyAgdm9pZCBmKEkgaSkge30KKyAgeworICAgIGYoRm88Y2FyZXQ+by5DT05TVCk7CisgIH0KK30KKworaW50ZXJmYWNlIEkge30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUNsYXNzRnJvbVVzYWdlL2JlZm9yZUV4dGVuZHMuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlQ2xhc3NGcm9tVXNhZ2UvYmVmb3JlRXh0ZW5kcy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJmODhhMTMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUNsYXNzRnJvbVVzYWdlL2JlZm9yZUV4dGVuZHMuamF2YQpAQCAtMCwwICsxLDMgQEAKKy8vICJDcmVhdGUgQ2xhc3MgJ0FiYyciICJ0cnVlIgorcHVibGljIGNsYXNzIFRlc3QgZXh0ZW5kcyA8Y2FyZXQ+QWJjIHsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUNsYXNzRnJvbVVzYWdlL2JlZm9yZUZpZWxkVHlwZS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVDbGFzc0Zyb21Vc2FnZS9iZWZvcmVGaWVsZFR5cGUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNmQ5OTJiCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVDbGFzc0Zyb21Vc2FnZS9iZWZvcmVGaWVsZFR5cGUuamF2YQpAQCAtMCwwICsxLDQgQEAKKy8vICJDcmVhdGUgQ2xhc3MgJ0FiYyciICJ0cnVlIgorcHVibGljIGNsYXNzIFRlc3QgeworICBwcml2YXRlIDxjYXJldD5BYmMgZmxkOworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlQ2xhc3NGcm9tVXNhZ2UvYmVmb3JlSW5OZXdBcmdzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUNsYXNzRnJvbVVzYWdlL2JlZm9yZUluTmV3QXJncy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZkNTZlYTQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUNsYXNzRnJvbVVzYWdlL2JlZm9yZUluTmV3QXJncy5qYXZhCkBAIC0wLDAgKzEsNiBAQAorLy8gIkNyZWF0ZSBDbGFzcyAnRm9vJyIgInRydWUiCitwdWJsaWMgY2xhc3MgVGVzdCB7CisgIHZvaWQgZm9vKCkgeworICAgIG5ldyBUZXN0KEY8Y2FyZXQ+b28uRklFTEQpOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVDbGFzc0Zyb21Vc2FnZS9iZWZvcmVNZXRob2RUeXBlLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUNsYXNzRnJvbVVzYWdlL2JlZm9yZU1ldGhvZFR5cGUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43Njk3YTZkCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVDbGFzc0Zyb21Vc2FnZS9iZWZvcmVNZXRob2RUeXBlLmphdmEKQEAgLTAsMCArMSw0IEBACisvLyAiQ3JlYXRlIENsYXNzICdBYmMnIiAidHJ1ZSIKK3B1YmxpYyBjbGFzcyBUZXN0IHsKKyAgcHJpdmF0ZSA8Y2FyZXQ+QWJjIGZvbygpIHt9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVDbGFzc0Zyb21Vc2FnZS9iZWZvcmVOYTEuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlQ2xhc3NGcm9tVXNhZ2UvYmVmb3JlTmExLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWEyZTdiMwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlQ2xhc3NGcm9tVXNhZ2UvYmVmb3JlTmExLmphdmEKQEAgLTAsMCArMSw2IEBACisvLyAiQ3JlYXRlIENsYXNzICdhYmMnIiAiZmFsc2UiCitwdWJsaWMgY2xhc3MgVGVzdCB7CisgIHB1YmxpYyB2b2lkIGZvbyhpbnQgcHBwKSB7CisgICAgPGNhcmV0PmFiYy5mb28oKTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlQ2xhc3NGcm9tVXNhZ2UvYmVmb3JlTmEyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUNsYXNzRnJvbVVzYWdlL2JlZm9yZU5hMi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ3ODZjM2YKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUNsYXNzRnJvbVVzYWdlL2JlZm9yZU5hMi5qYXZhCkBAIC0wLDAgKzEsNiBAQAorLy8gIkNyZWF0ZSBDbGFzcyAnQWJjJyIgImZhbHNlIgorcHVibGljIGNsYXNzIFRlc3QgeworICBwdWJsaWMgdm9pZCBmb28oaW50IHBwcCkgeworICAgIGludCBsb2NhbCA9IHBwcCArIDxjYXJldD5BYmM7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUNsYXNzRnJvbVVzYWdlL2JlZm9yZVBhcmFtZXRlclR5cGUuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlQ2xhc3NGcm9tVXNhZ2UvYmVmb3JlUGFyYW1ldGVyVHlwZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE2OWFkMmIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUNsYXNzRnJvbVVzYWdlL2JlZm9yZVBhcmFtZXRlclR5cGUuamF2YQpAQCAtMCwwICsxLDQgQEAKKy8vICJDcmVhdGUgQ2xhc3MgJ0FiYyciICJ0cnVlIgorcHVibGljIGNsYXNzIFRlc3QgeworICBwcml2YXRlIHZvaWQgZm9vKDxjYXJldD5BYmMgcGFyYW0pIHt9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVDbGFzc0Zyb21Vc2FnZS9iZWZvcmVUeXBlUGFyYW1ldGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUNsYXNzRnJvbVVzYWdlL2JlZm9yZVR5cGVQYXJhbWV0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OGIwNDAyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVDbGFzc0Zyb21Vc2FnZS9iZWZvcmVUeXBlUGFyYW1ldGVyLmphdmEKQEAgLTAsMCArMSw0IEBACisvLyAiQ3JlYXRlIENsYXNzICdGb28nIiAidHJ1ZSIKK3B1YmxpYyBjbGFzcyBUZXN0IHsKKyAgTGlzdCBsID0gbmV3IEFycmF5TGlzdDw8Y2FyZXQ+Rm9vPigpOworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlQ2xhc3NGcm9tVXNhZ2UvYmVmb3JlVHlwZVBhcmFtZXRlckNyZWF0ZWQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlQ2xhc3NGcm9tVXNhZ2UvYmVmb3JlVHlwZVBhcmFtZXRlckNyZWF0ZWQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYzFhMzQ3Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVDbGFzc0Zyb21Vc2FnZS9iZWZvcmVUeXBlUGFyYW1ldGVyQ3JlYXRlZC5qYXZhCkBAIC0wLDAgKzEsNCBAQAorLy8gIkNyZWF0ZSBDbGFzcyAnRm9vJyIgInRydWUiCitwdWJsaWMgY2xhc3MgVGVzdCB7CisgIDxSPiB2b2lkIGZvbyhGbzxjYXJldD5vPFIsIFN0cmluZz4gZil7fQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlQ29uc3RydWN0b3JGcm9tQ2FsbC9hZnRlcjEuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlQ29uc3RydWN0b3JGcm9tQ2FsbC9hZnRlcjEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zM2VlYmQwCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVDb25zdHJ1Y3RvckZyb21DYWxsL2FmdGVyMS5qYXZhCkBAIC0wLDAgKzEsMTUgQEAKKy8vICJDcmVhdGUgQ29uc3RydWN0b3IiICJ0cnVlIgorcHVibGljIGNsYXNzIFRlc3QgeworICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKCkgeworICAgICAgICBuZXcgTXlDb2xsZWN0aW9uKDEwKTsKKyAgICB9Cit9CisKK2NsYXNzIE15Q29sbGVjdGlvbiB7CisgICAgcHVibGljIE15Q29sbGVjdGlvbigpIHsKKyAgICB9CisKKyAgICBwdWJsaWMgTXlDb2xsZWN0aW9uKGludCBpKSB7CisgICAgICAgIDxzZWxlY3Rpb24+Ly9UbyBjaGFuZ2UgYm9keSBvZiBjcmVhdGVkIG1ldGhvZHMgdXNlIEZpbGUgfCBTZXR0aW5ncyB8IEZpbGUgVGVtcGxhdGVzLjwvc2VsZWN0aW9uPgorICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUNvbnN0cnVjdG9yRnJvbUNhbGwvYWZ0ZXIyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUNvbnN0cnVjdG9yRnJvbUNhbGwvYWZ0ZXIyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWVmMjEzYgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlQ29uc3RydWN0b3JGcm9tQ2FsbC9hZnRlcjIuamF2YQpAQCAtMCwwICsxLDEyIEBACisvLyAiQ3JlYXRlIENvbnN0cnVjdG9yIiAidHJ1ZSIKK3B1YmxpYyBjbGFzcyBUZXN0IHsKKyAgICBwdWJsaWMgdm9pZCBtYWluMigpIHsKKyAgICAgICAgbmV3IE15Q29sbGVjdGlvbih0aGlzKTsKKyAgICB9Cit9CisKK2NsYXNzIE15Q29sbGVjdGlvbiB7CisgICAgcHVibGljIE15Q29sbGVjdGlvbihUZXN0IHRlc3QpIHsKKyAgICAgICAgPHNlbGVjdGlvbj4vL1RvIGNoYW5nZSBib2R5IG9mIGNyZWF0ZWQgbWV0aG9kcyB1c2UgRmlsZSB8IFNldHRpbmdzIHwgRmlsZSBUZW1wbGF0ZXMuPC9zZWxlY3Rpb24+CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlQ29uc3RydWN0b3JGcm9tQ2FsbC9hZnRlcjMuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlQ29uc3RydWN0b3JGcm9tQ2FsbC9hZnRlcjMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMzYyMmRiCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVDb25zdHJ1Y3RvckZyb21DYWxsL2FmdGVyMy5qYXZhCkBAIC0wLDAgKzEsMTUgQEAKKy8vICJDcmVhdGUgQ29uc3RydWN0b3IiICJ0cnVlIgorY2xhc3MgT3V0ZXIgeworICAgIHB1YmxpYyBPdXRlcihTdHJpbmcgcykgeworICAgIH0KKworICAgIHZvaWQgbWV0aG9kKE91dGVyIG90aGVyKSB7CisgICAgICAgIG90aGVyLm5ldyBDcmVhdGVDb25zdHJ1Y3RvckZyb21Vc2FnZSgicGFyYW1ldGVyIik7IC8vIGludm9rZSAiQ3JlYXRlIENvbnN0cnVjdG9yIiBxdWljayBmaXggaGVyZQorICAgIH0KKworICAgIGNsYXNzIENyZWF0ZUNvbnN0cnVjdG9yRnJvbVVzYWdlIHsKKyAgICAgICAgcHVibGljIENyZWF0ZUNvbnN0cnVjdG9yRnJvbVVzYWdlKFN0cmluZyBwYXJhbWV0ZXIpIHsKKyAgICAgICAgICAgIDxzZWxlY3Rpb24+Ly9UbyBjaGFuZ2UgYm9keSBvZiBjcmVhdGVkIG1ldGhvZHMgdXNlIEZpbGUgfCBTZXR0aW5ncyB8IEZpbGUgVGVtcGxhdGVzLjwvc2VsZWN0aW9uPgorICAgICAgICB9CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlQ29uc3RydWN0b3JGcm9tQ2FsbC9hZnRlckFub24uamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlQ29uc3RydWN0b3JGcm9tQ2FsbC9hZnRlckFub24uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MDljMDY0Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVDb25zdHJ1Y3RvckZyb21DYWxsL2FmdGVyQW5vbi5qYXZhCkBAIC0wLDAgKzEsMTMgQEAKKy8vICJDcmVhdGUgQ29uc3RydWN0b3IiICJ0cnVlIgorY2xhc3MgVGVzdCB7CisKKyAgICBwdWJsaWMgdm9pZCB0KCkgeworICAgICAgICBuZXcgSW5uZXIoImEiKXt9OworICAgIH0KKworICAgIGNsYXNzIElubmVyIHsKKyAgICAgICAgcHVibGljIElubmVyKFN0cmluZyBhKSB7CisgICAgICAgICAgICA8Y2FyZXQ+PHNlbGVjdGlvbj4vL1RvIGNoYW5nZSBib2R5IG9mIGNyZWF0ZWQgbWV0aG9kcyB1c2UgRmlsZSB8IFNldHRpbmdzIHwgRmlsZSBUZW1wbGF0ZXMuPC9zZWxlY3Rpb24+CisgICAgICAgIH0KKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVDb25zdHJ1Y3RvckZyb21DYWxsL2FmdGVyRGVmYXVsdFN1cGVyQ29uc3RydWN0b3IuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlQ29uc3RydWN0b3JGcm9tQ2FsbC9hZnRlckRlZmF1bHRTdXBlckNvbnN0cnVjdG9yLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjdhZDBjOQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlQ29uc3RydWN0b3JGcm9tQ2FsbC9hZnRlckRlZmF1bHRTdXBlckNvbnN0cnVjdG9yLmphdmEKQEAgLTAsMCArMSwxNiBAQAorLy8gIkNyZWF0ZSBDb25zdHJ1Y3RvciIgInRydWUiCitjbGFzcyBUZXN0IGV4dGVuZHMgQXsKKworICAgIHB1YmxpYyBUZXN0KFN0cmluZyBhKSB7CisgICAgICAgIDxzZWxlY3Rpb24+Ly9UbyBjaGFuZ2UgYm9keSBvZiBjcmVhdGVkIG1ldGhvZHMgdXNlIEZpbGUgfCBTZXR0aW5ncyB8IEZpbGUgVGVtcGxhdGVzLjwvc2VsZWN0aW9uPgorICAgIH0KKworICAgIHB1YmxpYyB2b2lkIHQoKSB7CisgICAgICAgIG5ldyBUZXN0KCJhIil7fTsKKyAgICB9Cit9CisKK2NsYXNzIEEgeworICBBKFN0cmluZyBzKXt9CisgIEEoKXt9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVDb25zdHJ1Y3RvckZyb21DYWxsL2FmdGVyRGlzanVuY3Rpb24uamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlQ29uc3RydWN0b3JGcm9tQ2FsbC9hZnRlckRpc2p1bmN0aW9uLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTZkNWEwNgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlQ29uc3RydWN0b3JGcm9tQ2FsbC9hZnRlckRpc2p1bmN0aW9uLmphdmEKQEAgLTAsMCArMSwyMiBAQAorLy8gIkNyZWF0ZSBDb25zdHJ1Y3RvciIgInRydWUiCitjbGFzcyBUZXN0IHsKKyAgICB2b2lkIGZvbygpIHRocm93cyBFeDEge30KKyAgICB2b2lkIGJhcigpIHRocm93cyBFeDIge30KKyAgICBwdWJsaWMgdm9pZCB0KCkgeworICAgICAgdHJ5IHsKKyAgICAgICAgZm9vKCk7CisgICAgICAgIGJhcigpOworICAgICAgfQorICAgICAgY2F0Y2ggKEV4MSB8IEV4MiBlKSB7CisgICAgICAgIG5ldyBBKGUpOworICAgICAgfQorICAgIH0KK30KKworY2xhc3MgQSB7CisgICAgcHVibGljIEEoRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgPHNlbGVjdGlvbj4vL1RvIGNoYW5nZSBib2R5IG9mIGNyZWF0ZWQgbWV0aG9kcyB1c2UgRmlsZSB8IFNldHRpbmdzIHwgRmlsZSBUZW1wbGF0ZXMuPC9zZWxlY3Rpb24+CisgICAgfQorfQorY2xhc3MgRXgxIGV4dGVuZHMgRXhjZXB0aW9uIHt9CitjbGFzcyBFeDIgZXh0ZW5kcyBFeGNlcHRpb24ge30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUNvbnN0cnVjdG9yRnJvbUNhbGwvYWZ0ZXJJbXBsaWNpdFN1cGVyQ29uc3RydWN0b3IuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlQ29uc3RydWN0b3JGcm9tQ2FsbC9hZnRlckltcGxpY2l0U3VwZXJDb25zdHJ1Y3Rvci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAyOTNlZDUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUNvbnN0cnVjdG9yRnJvbUNhbGwvYWZ0ZXJJbXBsaWNpdFN1cGVyQ29uc3RydWN0b3IuamF2YQpAQCAtMCwwICsxLDE0IEBACisvLyAiQ3JlYXRlIENvbnN0cnVjdG9yIiAidHJ1ZSIKK2NsYXNzIFRlc3QgZXh0ZW5kcyBBeworCisgICAgcHVibGljIFRlc3QoU3RyaW5nIGEpIHsKKyAgICAgICAgPHNlbGVjdGlvbj4vL1RvIGNoYW5nZSBib2R5IG9mIGNyZWF0ZWQgbWV0aG9kcyB1c2UgRmlsZSB8IFNldHRpbmdzIHwgRmlsZSBUZW1wbGF0ZXMuPC9zZWxlY3Rpb24+CisgICAgfQorCisgICAgcHVibGljIHZvaWQgdCgpIHsKKyAgICAgICAgbmV3IFRlc3QoImEiKXt9OworICAgIH0KK30KKworY2xhc3MgQSB7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVDb25zdHJ1Y3RvckZyb21DYWxsL2FmdGVySW5jb21wbGV0ZUVudW0uamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlQ29uc3RydWN0b3JGcm9tQ2FsbC9hZnRlckluY29tcGxldGVFbnVtLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDU3MzQwNwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlQ29uc3RydWN0b3JGcm9tQ2FsbC9hZnRlckluY29tcGxldGVFbnVtLmphdmEKQEAgLTAsMCArMSw4IEBACisvLyAiQ3JlYXRlIENvbnN0cnVjdG9yIiAidHJ1ZSIKK3B1YmxpYyBlbnVtIFJlcG9ydFR5cGUgeworICAgIEFHSU5HKCJBZ2luZyIpOworCisgICAgUmVwb3J0VHlwZShTdHJpbmcgYWdpbmcpIHsKKyAgICAgICAgPHNlbGVjdGlvbj4vL1RvIGNoYW5nZSBib2R5IG9mIGNyZWF0ZWQgbWV0aG9kcyB1c2UgRmlsZSB8IFNldHRpbmdzIHwgRmlsZSBUZW1wbGF0ZXMuPC9zZWxlY3Rpb24+CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlQ29uc3RydWN0b3JGcm9tQ2FsbC9hZnRlckluc2VydFN1cGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUNvbnN0cnVjdG9yRnJvbUNhbGwvYWZ0ZXJJbnNlcnRTdXBlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUyZGNhNDEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUNvbnN0cnVjdG9yRnJvbUNhbGwvYWZ0ZXJJbnNlcnRTdXBlci5qYXZhCkBAIC0wLDAgKzEsMTUgQEAKKy8vICJDcmVhdGUgQ29uc3RydWN0b3IiICJ0cnVlIgorY2xhc3MgVGVzdCBleHRlbmRzIEF7CisKKyAgICBwdWJsaWMgVGVzdChTdHJpbmcgYSkgeworICAgICAgICA8c2VsZWN0aW9uPnN1cGVyKGEpOyAgICAvL1RvIGNoYW5nZSBib2R5IG9mIG92ZXJyaWRkZW4gbWV0aG9kcyB1c2UgRmlsZSB8IFNldHRpbmdzIHwgRmlsZSBUZW1wbGF0ZXMuPC9zZWxlY3Rpb24+CisgICAgfQorCisgICAgcHVibGljIHZvaWQgdCgpIHsKKyAgICAgICAgbmV3IFRlc3QoImEiKXt9OworICAgIH0KK30KKworY2xhc3MgQSB7CisgIEEoU3RyaW5nIHMpe30KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUNvbnN0cnVjdG9yRnJvbUNhbGwvYmVmb3JlMS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVDb25zdHJ1Y3RvckZyb21DYWxsL2JlZm9yZTEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMGJjMjhiCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVDb25zdHJ1Y3RvckZyb21DYWxsL2JlZm9yZTEuamF2YQpAQCAtMCwwICsxLDExIEBACisvLyAiQ3JlYXRlIENvbnN0cnVjdG9yIiAidHJ1ZSIKK3B1YmxpYyBjbGFzcyBUZXN0IHsKKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbigpIHsKKyAgICAgICAgbmV3IE15PGNhcmV0PkNvbGxlY3Rpb24oMTApOworICAgIH0KK30KKworY2xhc3MgTXlDb2xsZWN0aW9uIHsKKyAgICBwdWJsaWMgTXlDb2xsZWN0aW9uKCkgeworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUNvbnN0cnVjdG9yRnJvbUNhbGwvYmVmb3JlMi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVDb25zdHJ1Y3RvckZyb21DYWxsL2JlZm9yZTIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZDY2OGI2Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVDb25zdHJ1Y3RvckZyb21DYWxsL2JlZm9yZTIuamF2YQpAQCAtMCwwICsxLDkgQEAKKy8vICJDcmVhdGUgQ29uc3RydWN0b3IiICJ0cnVlIgorcHVibGljIGNsYXNzIFRlc3QgeworICAgIHB1YmxpYyB2b2lkIG1haW4yKCkgeworICAgICAgICBuZXcgPGNhcmV0Pk15Q29sbGVjdGlvbih0aGlzKTsKKyAgICB9Cit9CisKK2NsYXNzIE15Q29sbGVjdGlvbiB7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVDb25zdHJ1Y3RvckZyb21DYWxsL2JlZm9yZTMuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlQ29uc3RydWN0b3JGcm9tQ2FsbC9iZWZvcmUzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmM2Zjk3MgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlQ29uc3RydWN0b3JGcm9tQ2FsbC9iZWZvcmUzLmphdmEKQEAgLTAsMCArMSwxMiBAQAorLy8gIkNyZWF0ZSBDb25zdHJ1Y3RvciIgInRydWUiCitjbGFzcyBPdXRlciB7CisgICAgcHVibGljIE91dGVyKFN0cmluZyBzKSB7CisgICAgfQorCisgICAgdm9pZCBtZXRob2QoT3V0ZXIgb3RoZXIpIHsKKyAgICAgICAgb3RoZXIubmV3IDxjYXJldD5DcmVhdGVDb25zdHJ1Y3RvckZyb21Vc2FnZSgicGFyYW1ldGVyIik7IC8vIGludm9rZSAiQ3JlYXRlIENvbnN0cnVjdG9yIiBxdWljayBmaXggaGVyZQorICAgIH0KKworICAgIGNsYXNzIENyZWF0ZUNvbnN0cnVjdG9yRnJvbVVzYWdlIHsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVDb25zdHJ1Y3RvckZyb21DYWxsL2JlZm9yZUFub24uamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlQ29uc3RydWN0b3JGcm9tQ2FsbC9iZWZvcmVBbm9uLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDlmNmRhZQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlQ29uc3RydWN0b3JGcm9tQ2FsbC9iZWZvcmVBbm9uLmphdmEKQEAgLTAsMCArMSwxMCBAQAorLy8gIkNyZWF0ZSBDb25zdHJ1Y3RvciIgInRydWUiCitjbGFzcyBUZXN0IHsKKworICAgIHB1YmxpYyB2b2lkIHQoKSB7CisgICAgICAgIG5ldyBJbm5lcig8Y2FyZXQ+ImEiKXt9OworICAgIH0KKworICAgIGNsYXNzIElubmVyIHsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVDb25zdHJ1Y3RvckZyb21DYWxsL2JlZm9yZURlZmF1bHRTdXBlckNvbnN0cnVjdG9yLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUNvbnN0cnVjdG9yRnJvbUNhbGwvYmVmb3JlRGVmYXVsdFN1cGVyQ29uc3RydWN0b3IuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MzRkMmYxCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVDb25zdHJ1Y3RvckZyb21DYWxsL2JlZm9yZURlZmF1bHRTdXBlckNvbnN0cnVjdG9yLmphdmEKQEAgLTAsMCArMSwxMiBAQAorLy8gIkNyZWF0ZSBDb25zdHJ1Y3RvciIgInRydWUiCitjbGFzcyBUZXN0IGV4dGVuZHMgQXsKKworICAgIHB1YmxpYyB2b2lkIHQoKSB7CisgICAgICAgIG5ldyBUZXN0KDxjYXJldD4iYSIpe307CisgICAgfQorfQorCitjbGFzcyBBIHsKKyAgQShTdHJpbmcgcyl7fQorICBBKCl7fQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlQ29uc3RydWN0b3JGcm9tQ2FsbC9iZWZvcmVEaXNqdW5jdGlvbi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVDb25zdHJ1Y3RvckZyb21DYWxsL2JlZm9yZURpc2p1bmN0aW9uLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWQyZTZjOQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlQ29uc3RydWN0b3JGcm9tQ2FsbC9iZWZvcmVEaXNqdW5jdGlvbi5qYXZhCkBAIC0wLDAgKzEsMTkgQEAKKy8vICJDcmVhdGUgQ29uc3RydWN0b3IiICJ0cnVlIgorY2xhc3MgVGVzdCB7CisgICAgdm9pZCBmb28oKSB0aHJvd3MgRXgxIHt9CisgICAgdm9pZCBiYXIoKSB0aHJvd3MgRXgyIHt9CisgICAgcHVibGljIHZvaWQgdCgpIHsKKyAgICAgIHRyeSB7CisgICAgICAgIGZvbygpOworICAgICAgICBiYXIoKTsKKyAgICAgIH0KKyAgICAgIGNhdGNoIChFeDEgfCBFeDIgZSkgeworICAgICAgICBuZXcgQSg8Y2FyZXQ+ZSk7CisgICAgICB9CisgICAgfQorfQorCitjbGFzcyBBIHsKK30KK2NsYXNzIEV4MSBleHRlbmRzIEV4Y2VwdGlvbiB7fQorY2xhc3MgRXgyIGV4dGVuZHMgRXhjZXB0aW9uIHt9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVDb25zdHJ1Y3RvckZyb21DYWxsL2JlZm9yZUltcGxpY2l0U3VwZXJDb25zdHJ1Y3Rvci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVDb25zdHJ1Y3RvckZyb21DYWxsL2JlZm9yZUltcGxpY2l0U3VwZXJDb25zdHJ1Y3Rvci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI5ZTMxNzIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUNvbnN0cnVjdG9yRnJvbUNhbGwvYmVmb3JlSW1wbGljaXRTdXBlckNvbnN0cnVjdG9yLmphdmEKQEAgLTAsMCArMSwxMCBAQAorLy8gIkNyZWF0ZSBDb25zdHJ1Y3RvciIgInRydWUiCitjbGFzcyBUZXN0IGV4dGVuZHMgQXsKKworICAgIHB1YmxpYyB2b2lkIHQoKSB7CisgICAgICAgIG5ldyBUZXN0KDxjYXJldD4iYSIpe307CisgICAgfQorfQorCitjbGFzcyBBIHsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUNvbnN0cnVjdG9yRnJvbUNhbGwvYmVmb3JlSW5jb21wbGV0ZUVudW0uamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlQ29uc3RydWN0b3JGcm9tQ2FsbC9iZWZvcmVJbmNvbXBsZXRlRW51bS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIxOTRkMmQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUNvbnN0cnVjdG9yRnJvbUNhbGwvYmVmb3JlSW5jb21wbGV0ZUVudW0uamF2YQpAQCAtMCwwICsxLDQgQEAKKy8vICJDcmVhdGUgQ29uc3RydWN0b3IiICJ0cnVlIgorcHVibGljIGVudW0gUmVwb3J0VHlwZSB7CisgICAgQUdJTkcoIkFnaW5nIik8Y2FyZXQ+Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVDb25zdHJ1Y3RvckZyb21DYWxsL2JlZm9yZUluc2VydFN1cGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUNvbnN0cnVjdG9yRnJvbUNhbGwvYmVmb3JlSW5zZXJ0U3VwZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMTM3ZDM4Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVDb25zdHJ1Y3RvckZyb21DYWxsL2JlZm9yZUluc2VydFN1cGVyLmphdmEKQEAgLTAsMCArMSwxMSBAQAorLy8gIkNyZWF0ZSBDb25zdHJ1Y3RvciIgInRydWUiCitjbGFzcyBUZXN0IGV4dGVuZHMgQXsKKworICAgIHB1YmxpYyB2b2lkIHQoKSB7CisgICAgICAgIG5ldyBUZXN0KDxjYXJldD4iYSIpe307CisgICAgfQorfQorCitjbGFzcyBBIHsKKyAgQShTdHJpbmcgcyl7fQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlQ29uc3RydWN0b3JGcm9tU3VwZXIvYWZ0ZXIxLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUNvbnN0cnVjdG9yRnJvbVN1cGVyL2FmdGVyMS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBjZjdmYzQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUNvbnN0cnVjdG9yRnJvbVN1cGVyL2FmdGVyMS5qYXZhCkBAIC0wLDAgKzEsMTIgQEAKKy8vICJDcmVhdGUgQ29uc3RydWN0b3IgSW4gJ0Jhc2UnIiAidHJ1ZSIKK2NsYXNzIEJhc2UgeworICAgIHB1YmxpYyBCYXNlKGludCBpLCBPYmplY3QgbykgeworICAgICAgICA8c2VsZWN0aW9uPi8vVG8gY2hhbmdlIGJvZHkgb2YgY3JlYXRlZCBtZXRob2RzIHVzZSBGaWxlIHwgU2V0dGluZ3MgfCBGaWxlIFRlbXBsYXRlcy48L3NlbGVjdGlvbj4KKyAgICB9Cit9CisKK3B1YmxpYyBjbGFzcyBEZXJpdmVkIGV4dGVuZHMgQmFzZSB7CisgIERlcml2ZWQgKCkgeworICAgIHN1cGVyICgxLCBuZXcgT2JqZWN0ICgpKTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVDb25zdHJ1Y3RvckZyb21TdXBlci9iZWZvcmUxLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUNvbnN0cnVjdG9yRnJvbVN1cGVyL2JlZm9yZTEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOWMxYTAxCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVDb25zdHJ1Y3RvckZyb21TdXBlci9iZWZvcmUxLmphdmEKQEAgLTAsMCArMSw5IEBACisvLyAiQ3JlYXRlIENvbnN0cnVjdG9yIEluICdCYXNlJyIgInRydWUiCitjbGFzcyBCYXNlIHsKK30KKworcHVibGljIGNsYXNzIERlcml2ZWQgZXh0ZW5kcyBCYXNlIHsKKyAgRGVyaXZlZCAoKSB7CisgICAgc3U8Y2FyZXQ+cGVyICgxLCBuZXcgT2JqZWN0ICgpKTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVDb25zdHJ1Y3Rvck1hdGNoaW5nU3VwZXIvYWZ0ZXJHZW5lcmljczEuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlQ29uc3RydWN0b3JNYXRjaGluZ1N1cGVyL2FmdGVyR2VuZXJpY3MxLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmJiODg2YwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlQ29uc3RydWN0b3JNYXRjaGluZ1N1cGVyL2FmdGVyR2VuZXJpY3MxLmphdmEKQEAgLTAsMCArMSwxMCBAQAorLy8gIkNyZWF0ZSBjb25zdHJ1Y3RvciBtYXRjaGluZyBzdXBlciIgInRydWUiCitwdWJsaWMgY2xhc3MgVGVzdDxUPiB7CisgICAgVGVzdCAoVCB0KSB7fQorfQorCitjbGFzcyBEZXJpdmVkIGV4dGVuZHMgVGVzdDxTdHJpbmc+IHsKKyAgICA8Y2FyZXQ+RGVyaXZlZChTdHJpbmcgcykgeworICAgICAgICBzdXBlcihzKTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVDb25zdHJ1Y3Rvck1hdGNoaW5nU3VwZXIvYWZ0ZXJXaXRob3V0QnJhY2VzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUNvbnN0cnVjdG9yTWF0Y2hpbmdTdXBlci9hZnRlcldpdGhvdXRCcmFjZXMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OTZkNzhmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVDb25zdHJ1Y3Rvck1hdGNoaW5nU3VwZXIvYWZ0ZXJXaXRob3V0QnJhY2VzLmphdmEKQEAgLTAsMCArMSwxMCBAQAorLy8gIkNyZWF0ZSBjb25zdHJ1Y3RvciBtYXRjaGluZyBzdXBlciIgInRydWUiCitwdWJsaWMgY2xhc3MgVGVzdDxUPiB7CisgICAgVGVzdCAoVCB0KSB7fQorfQorCitjbGFzcyBEZXJpdmVkIGV4dGVuZHMgVGVzdDxTdHJpbmc+IHsKKyAgICBEZXJpdmVkKFN0cmluZyBzKSB7CisgICAgICAgIHN1cGVyKHMpOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUNvbnN0cnVjdG9yTWF0Y2hpbmdTdXBlci9iZWZvcmVHZW5lcmljczEuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlQ29uc3RydWN0b3JNYXRjaGluZ1N1cGVyL2JlZm9yZUdlbmVyaWNzMS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA4MmMyMTYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUNvbnN0cnVjdG9yTWF0Y2hpbmdTdXBlci9iZWZvcmVHZW5lcmljczEuamF2YQpAQCAtMCwwICsxLDcgQEAKKy8vICJDcmVhdGUgY29uc3RydWN0b3IgbWF0Y2hpbmcgc3VwZXIiICJ0cnVlIgorcHVibGljIGNsYXNzIFRlc3Q8VD4geworICAgIFRlc3QgKFQgdCkge30KK30KKworY2xhc3MgPGNhcmV0PkRlcml2ZWQgZXh0ZW5kcyBUZXN0PFN0cmluZz4geworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlQ29uc3RydWN0b3JNYXRjaGluZ1N1cGVyL2JlZm9yZVdpdGhvdXRCcmFjZXMuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlQ29uc3RydWN0b3JNYXRjaGluZ1N1cGVyL2JlZm9yZVdpdGhvdXRCcmFjZXMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YjQ3YzkzCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVDb25zdHJ1Y3Rvck1hdGNoaW5nU3VwZXIvYmVmb3JlV2l0aG91dEJyYWNlcy5qYXZhCkBAIC0wLDAgKzEsNiBAQAorLy8gIkNyZWF0ZSBjb25zdHJ1Y3RvciBtYXRjaGluZyBzdXBlciIgInRydWUiCitwdWJsaWMgY2xhc3MgVGVzdDxUPiB7CisgICAgVGVzdCAoVCB0KSB7fQorfQorCitjbGFzcyA8Y2FyZXQ+RGVyaXZlZCBleHRlbmRzIFRlc3Q8U3RyaW5nPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlQ29uc3RydWN0b3JQYXJhbWV0ZXJGcm9tRmllbGQvYWZ0ZXIxLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUNvbnN0cnVjdG9yUGFyYW1ldGVyRnJvbUZpZWxkL2FmdGVyMS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVmZmM1NjkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUNvbnN0cnVjdG9yUGFyYW1ldGVyRnJvbUZpZWxkL2FmdGVyMS5qYXZhCkBAIC0wLDAgKzEsOCBAQAorLy8gIkFkZCBjb25zdHJ1Y3RvciBwYXJhbWV0ZXIiICJ0cnVlIgorcHVibGljIGNsYXNzIEEgeworICBwcml2YXRlIGludCBmaWVsZDsKKworICAgIHB1YmxpYyBBKGludCBmaWVsZCkgeworICAgICAgICB0aGlzLmZpZWxkID0gZmllbGQ7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlQ29uc3RydWN0b3JQYXJhbWV0ZXJGcm9tRmllbGQvYWZ0ZXIyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUNvbnN0cnVjdG9yUGFyYW1ldGVyRnJvbUZpZWxkL2FmdGVyMi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEzYzIxOTUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUNvbnN0cnVjdG9yUGFyYW1ldGVyRnJvbUZpZWxkL2FmdGVyMi5qYXZhCkBAIC0wLDAgKzEsOCBAQAorLy8gIkFkZCBjb25zdHJ1Y3RvciBwYXJhbWV0ZXIiICJ0cnVlIgorY2xhc3MgQSB7CisgICAgcHJpdmF0ZSBBIGZpZWxkOworICAgIHB1YmxpYyBBKGludCB4LCBBIGZpZWxkKSB7CisgICAgICAgIC8vdGhpcy5maWVsZCA9IGZpZWxkOworICAgICAgICB0aGlzLmZpZWxkID0gZmllbGQ7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlQ29uc3RydWN0b3JQYXJhbWV0ZXJGcm9tRmllbGQvYWZ0ZXIzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUNvbnN0cnVjdG9yUGFyYW1ldGVyRnJvbUZpZWxkL2FmdGVyMy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjViZmVhNDEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUNvbnN0cnVjdG9yUGFyYW1ldGVyRnJvbUZpZWxkL2FmdGVyMy5qYXZhCkBAIC0wLDAgKzEsMTUgQEAKKy8vICJBZGQgY29uc3RydWN0b3IgcGFyYW1ldGVyIiAidHJ1ZSIKK2NsYXNzIEEgeworICAgIHByaXZhdGUgQSBmaWVsZDsKKyAgICBwdWJsaWMgQShpbnQgeCwgQSBmaWVsZCkgeworICAgICAgICB0aGlzLmZpZWxkID0gZmllbGQ7CisgICAgICAgIGludCBnPTA7CisgICAgfQorICAgIEEoQSBmaWVsZCkgeworICAgICAgdGhpcygiIiwgZmllbGQpOworICAgIH0KKyAgICBBKFN0cmluZyBzLCBBIGZpZWxkKSB7CisgICAgICAvL2hlcmUKKyAgICAgICAgdGhpcy5maWVsZCA9IGZpZWxkOzxjYXJldD4KKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVDb25zdHJ1Y3RvclBhcmFtZXRlckZyb21GaWVsZC9hZnRlcjQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlQ29uc3RydWN0b3JQYXJhbWV0ZXJGcm9tRmllbGQvYWZ0ZXI0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzA3ZmI3YwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlQ29uc3RydWN0b3JQYXJhbWV0ZXJGcm9tRmllbGQvYWZ0ZXI0LmphdmEKQEAgLTAsMCArMSw4IEBACisvLyAiQWRkIGNvbnN0cnVjdG9yIHBhcmFtZXRlciIgInRydWUiCitjbGFzcyBBIHsKKyAgICBwcml2YXRlIGZpbmFsIEEgZmllbGQ7CisgICAgcHVibGljIEEoaW50IHgsIEEgZmllbGQpIHsKKyAgICAgICAgdGhpcy5maWVsZCA9IGZpZWxkOzxjYXJldD4KKyAgICAgICAgaW50IGc9MDsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVDb25zdHJ1Y3RvclBhcmFtZXRlckZyb21GaWVsZC9hZnRlckFic3RyYWN0Q29uc3RydWN0b3IuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlQ29uc3RydWN0b3JQYXJhbWV0ZXJGcm9tRmllbGQvYWZ0ZXJBYnN0cmFjdENvbnN0cnVjdG9yLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2QwNTA3ZgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlQ29uc3RydWN0b3JQYXJhbWV0ZXJGcm9tRmllbGQvYWZ0ZXJBYnN0cmFjdENvbnN0cnVjdG9yLmphdmEKQEAgLTAsMCArMSwxMSBAQAorLy8gIkFkZCBjb25zdHJ1Y3RvciBwYXJhbWV0ZXIiICJ0cnVlIgorcHVibGljIGVudW0gTGEgeworICAgIDsKKyAgICBwcml2YXRlIFN0cmluZyBzOworCisgICAgcHJpdmF0ZSBMYShTdHJpbmcgcykgeworICAgICAgICB0aGlzLnMgPSBzOworICAgIH0KKworICAgIHByaXZhdGUgTGEoaW50IGEsIFN0cmluZyBzKTsKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlQ29uc3RydWN0b3JQYXJhbWV0ZXJGcm9tRmllbGQvYWZ0ZXJBZnRlclNlbWkuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlQ29uc3RydWN0b3JQYXJhbWV0ZXJGcm9tRmllbGQvYWZ0ZXJBZnRlclNlbWkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYTZmMDEwCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVDb25zdHJ1Y3RvclBhcmFtZXRlckZyb21GaWVsZC9hZnRlckFmdGVyU2VtaS5qYXZhCkBAIC0wLDAgKzEsOCBAQAorLy8gIkFkZCBjb25zdHJ1Y3RvciBwYXJhbWV0ZXIiICJ0cnVlIgorcHVibGljIGNsYXNzIEEgeworICAgIHByaXZhdGUgZmluYWwgQSBmaWVsZDsKKworICAgIHB1YmxpYyBBKEEgZmllbGQpIHsKKyAgICAgICAgdGhpcy5maWVsZCA9IGZpZWxkOzxjYXJldD4KKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVDb25zdHJ1Y3RvclBhcmFtZXRlckZyb21GaWVsZC9hZnRlckFscmVhZHlBc3NpZ25lZC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVDb25zdHJ1Y3RvclBhcmFtZXRlckZyb21GaWVsZC9hZnRlckFscmVhZHlBc3NpZ25lZC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE5OTQ3ZWUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUNvbnN0cnVjdG9yUGFyYW1ldGVyRnJvbUZpZWxkL2FmdGVyQWxyZWFkeUFzc2lnbmVkLmphdmEKQEAgLTAsMCArMSwxMiBAQAorLy8gIkFkZCBjb25zdHJ1Y3RvciBwYXJhbWV0ZXIiICJ0cnVlIgorY2xhc3MgQSB7CisgIHByaXZhdGUgZmluYWwgU3RyaW5nIHRleHQ7CisKKyAgcHVibGljIEZvbyhTdHJpbmcgdGV4dCkgeworICAgIHRoaXMudGV4dCA9IHRleHQ7CisgIH0KKworICBwdWJsaWMgRm9vKGludCBpLCBTdHJpbmcgdGV4dCkgeworICAgICAgdGhpcy50ZXh0ID0gdGV4dDsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlQ29uc3RydWN0b3JQYXJhbWV0ZXJGcm9tRmllbGQvYWZ0ZXJDaGFpbmVkQ2FsbHMuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlQ29uc3RydWN0b3JQYXJhbWV0ZXJGcm9tRmllbGQvYWZ0ZXJDaGFpbmVkQ2FsbHMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ODJjNGNlCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVDb25zdHJ1Y3RvclBhcmFtZXRlckZyb21GaWVsZC9hZnRlckNoYWluZWRDYWxscy5qYXZhCkBAIC0wLDAgKzEsMTQgQEAKKy8vICJBZGQgY29uc3RydWN0b3IgcGFyYW1ldGVyIiAidHJ1ZSIKK2NsYXNzIEEgeworICBwcml2YXRlIGZpbmFsIGludCBmaWVsZDsKKyAgcHJpdmF0ZSBpbnQgajsKKworICBBKGludCBmaWVsZCkgeworICAgIHRoaXMoZmllbGQsIDApOworICB9CisKKyAgQShpbnQgZmllbGQsIGludCBqKSB7CisgICAgICB0aGlzLmZpZWxkID0gZmllbGQ7CisgICAgICB0aGlzLmogPSBqOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVDb25zdHJ1Y3RvclBhcmFtZXRlckZyb21GaWVsZC9hZnRlckNob29zZU9uZUNvbnN0cnVjdG9yLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUNvbnN0cnVjdG9yUGFyYW1ldGVyRnJvbUZpZWxkL2FmdGVyQ2hvb3NlT25lQ29uc3RydWN0b3IuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNWQyMmJjCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVDb25zdHJ1Y3RvclBhcmFtZXRlckZyb21GaWVsZC9hZnRlckNob29zZU9uZUNvbnN0cnVjdG9yLmphdmEKQEAgLTAsMCArMSwxNSBAQAorLy8gIkFkZCBjb25zdHJ1Y3RvciBwYXJhbWV0ZXIiICJ0cnVlIgorY2xhc3MgVGVzdCB7CisgICAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgczsKKyAgICBwcml2YXRlIGZpbmFsIGludCBpOworCisgICAgVGVzdChTdHJpbmcgcykgeworICAgICAgICB0aGlzLnMgPSBzOworICAgICAgICBpID0gMDsKKyAgICB9CisKKyAgICBUZXN0KGludCBpKSB7CisgICAgICAgIHRoaXMuaSA9IGk7PGNhcmV0PgorICAgICAgICBzID0gInMiOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUNvbnN0cnVjdG9yUGFyYW1ldGVyRnJvbUZpZWxkL2FmdGVyR2VuZXJhdGVFbnVtUHJpdmF0ZUNvbnN0cnVjdG9yLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUNvbnN0cnVjdG9yUGFyYW1ldGVyRnJvbUZpZWxkL2FmdGVyR2VuZXJhdGVFbnVtUHJpdmF0ZUNvbnN0cnVjdG9yLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTNlYzM3YgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlQ29uc3RydWN0b3JQYXJhbWV0ZXJGcm9tRmllbGQvYWZ0ZXJHZW5lcmF0ZUVudW1Qcml2YXRlQ29uc3RydWN0b3IuamF2YQpAQCAtMCwwICsxLDEwIEBACisvLyAiQWRkIGNvbnN0cnVjdG9yIHBhcmFtZXRlciIgInRydWUiCitwdWJsaWMgZW51bSBNeUVudW0KK3sKKyAgVkFMVUVfT05FKG15RmllbGQpOworICBwcml2YXRlIGZpbmFsIGludCBteUZpZWxkOworCisgICAgcHJpdmF0ZSBNeUVudW0oaW50IG15RmllbGQpIHsKKyAgICAgICAgdGhpcy5teUZpZWxkID0gbXlGaWVsZDsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVDb25zdHJ1Y3RvclBhcmFtZXRlckZyb21GaWVsZC9hZnRlck11bHRpcGxlRmllbGRzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUNvbnN0cnVjdG9yUGFyYW1ldGVyRnJvbUZpZWxkL2FmdGVyTXVsdGlwbGVGaWVsZHMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OWE2ZjkxCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVDb25zdHJ1Y3RvclBhcmFtZXRlckZyb21GaWVsZC9hZnRlck11bHRpcGxlRmllbGRzLmphdmEKQEAgLTAsMCArMSwxMiBAQAorLy8gIkFkZCBjb25zdHJ1Y3RvciBwYXJhbWV0ZXJzIiAidHJ1ZSIKK2NsYXNzIEEgeworICBwcml2YXRlIGZpbmFsIGludCBmaWVsZDsKKyAgcHJpdmF0ZSBmaW5hbCBPYmplY3QgbzsKKyAgcHJpdmF0ZSBmaW5hbCBSdW5uYWJsZSBydW5uYWJsZTsKKyAgQShpbnQgZmllbGQsIE9iamVjdCBvLCBSdW5uYWJsZSBydW5uYWJsZSwgU3RyaW5nLi4uIHN0cnMpIHsKKyAgICAgIHRoaXMuZmllbGQgPSBmaWVsZDsKKyAgICAgIHRoaXMubyA9IG87CisgICAgICB0aGlzLnJ1bm5hYmxlID0gcnVubmFibGU7CisgIH0KKworfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVDb25zdHJ1Y3RvclBhcmFtZXRlckZyb21GaWVsZC9hZnRlck11bHRpcGxlRmllbGRzTm9Db25zdHJ1Y3Rvck5vVXNhZ2VzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUNvbnN0cnVjdG9yUGFyYW1ldGVyRnJvbUZpZWxkL2FmdGVyTXVsdGlwbGVGaWVsZHNOb0NvbnN0cnVjdG9yTm9Vc2FnZXMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45N2IyYzMxCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVDb25zdHJ1Y3RvclBhcmFtZXRlckZyb21GaWVsZC9hZnRlck11bHRpcGxlRmllbGRzTm9Db25zdHJ1Y3Rvck5vVXNhZ2VzLmphdmEKQEAgLTAsMCArMSwxMiBAQAorLy8gIkFkZCBjb25zdHJ1Y3RvciBwYXJhbWV0ZXJzIiAidHJ1ZSIKK3B1YmxpYyBjbGFzcyBBIHsKKyAgcHJpdmF0ZSBmaW5hbCBpbnQgZmllbGQ7CisgIHByaXZhdGUgZmluYWwgT2JqZWN0IG87CisgIHByaXZhdGUgZmluYWwgUnVubmFibGUgcnVubmFibGU7CisKKyAgICBwdWJsaWMgQShpbnQgZmllbGQsIE9iamVjdCBvLCBSdW5uYWJsZSBydW5uYWJsZSkgeworICAgICAgICB0aGlzLmZpZWxkID0gZmllbGQ7CisgICAgICAgIHRoaXMubyA9IG87CisgICAgICAgIHRoaXMucnVubmFibGUgPSBydW5uYWJsZTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUNvbnN0cnVjdG9yUGFyYW1ldGVyRnJvbUZpZWxkL2FmdGVyTXVsdGlwbGVGaWVsZHNPbmVBZGRlZC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVDb25zdHJ1Y3RvclBhcmFtZXRlckZyb21GaWVsZC9hZnRlck11bHRpcGxlRmllbGRzT25lQWRkZWQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YjM4NDBlCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVDb25zdHJ1Y3RvclBhcmFtZXRlckZyb21GaWVsZC9hZnRlck11bHRpcGxlRmllbGRzT25lQWRkZWQuamF2YQpAQCAtMCwwICsxLDEzIEBACisvLyAiQWRkIGNvbnN0cnVjdG9yIHBhcmFtZXRlciIgInRydWUiCitwdWJsaWMgY2xhc3MgQ29uc3RydWN0b3JQYXJhbXMgeworICAgIHByaXZhdGUgZmluYWwgU3RyaW5nIG15VGV4dDsKKyAgICBwcml2YXRlIE9iamVjdCBteU87CisKKyAgICBwdWJsaWMgQ29uc3RydWN0b3JQYXJhbXMoU3RyaW5nIG15VGV4dCkgeworICAgICAgICB0aGlzLm15VGV4dCA9IG15VGV4dDs8Y2FyZXQ+CisgICAgfQorCisgICAgcHVibGljIENvbnN0cnVjdG9yUGFyYW1zKFN0cmluZyB0ZXh0LCBpbnQgZm9vKSB7CisgICAgICAgIG15VGV4dCA9IHRleHQ7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVDb25zdHJ1Y3RvclBhcmFtZXRlckZyb21GaWVsZC9hZnRlck11bHRpcGxlRmllbGRzT25lU3RhdGljLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUNvbnN0cnVjdG9yUGFyYW1ldGVyRnJvbUZpZWxkL2FmdGVyTXVsdGlwbGVGaWVsZHNPbmVTdGF0aWMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZjcwN2M4Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVDb25zdHJ1Y3RvclBhcmFtZXRlckZyb21GaWVsZC9hZnRlck11bHRpcGxlRmllbGRzT25lU3RhdGljLmphdmEKQEAgLTAsMCArMSw5IEBACisvLyAiQWRkIGNvbnN0cnVjdG9yIHBhcmFtZXRlciIgInRydWUiCitwdWJsaWMgY2xhc3MgQ29uc3RydWN0b3JQYXJhbXMgeworICAgIHByaXZhdGUgZmluYWwgU3RyaW5nIG15VGV4dDsKKyAgICBwcml2YXRlIGZpbmFsIHN0YXRpYyBPYmplY3Qgb3VyTzsKKworICAgIHB1YmxpYyBDb25zdHJ1Y3RvclBhcmFtcyhTdHJpbmcgbXlUZXh0KSB7CisgICAgICAgIHRoaXMubXlUZXh0ID0gbXlUZXh0OzxjYXJldD4KKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUNvbnN0cnVjdG9yUGFyYW1ldGVyRnJvbUZpZWxkL2FmdGVyTXVsdGlwbGVGaWVsZHNPbmVXaXRob3V0SW5pdGlhbGl6ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlQ29uc3RydWN0b3JQYXJhbWV0ZXJGcm9tRmllbGQvYWZ0ZXJNdWx0aXBsZUZpZWxkc09uZVdpdGhvdXRJbml0aWFsaXplci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI5ODI0MWJmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVDb25zdHJ1Y3RvclBhcmFtZXRlckZyb21GaWVsZC9hZnRlck11bHRpcGxlRmllbGRzT25lV2l0aG91dEluaXRpYWxpemVyLmphdmEKQEAgLTAsMCArMSw5IEBACisvLyAiQWRkIGNvbnN0cnVjdG9yIHBhcmFtZXRlciIgInRydWUiCitwdWJsaWMgY2xhc3MgQ29uc3RydWN0b3JQYXJhbXMgeworICAgIHByaXZhdGUgZmluYWwgU3RyaW5nIG15VGV4dDsKKyAgICBwcml2YXRlIGZpbmFsIE9iamVjdCBvdXJPID0gbnVsbDsKKworICAgIHB1YmxpYyBDb25zdHJ1Y3RvclBhcmFtcyhTdHJpbmcgbXlUZXh0KSB7CisgICAgICAgIHRoaXMubXlUZXh0ID0gbXlUZXh0OzxjYXJldD4KKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUNvbnN0cnVjdG9yUGFyYW1ldGVyRnJvbUZpZWxkL2FmdGVyTm9ubnVsbEFubm90YXRlZC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVDb25zdHJ1Y3RvclBhcmFtZXRlckZyb21GaWVsZC9hZnRlck5vbm51bGxBbm5vdGF0ZWQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MzZkNDViOQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlQ29uc3RydWN0b3JQYXJhbWV0ZXJGcm9tRmllbGQvYWZ0ZXJOb25udWxsQW5ub3RhdGVkLmphdmEKQEAgLTAsMCArMSw5IEBACisvLyAiQWRkIGNvbnN0cnVjdG9yIHBhcmFtZXRlciIgInRydWUiCitjbGFzcyBBIHsKKyAgQGphdmF4LmFubm90YXRpb24uTm9ubnVsbCBwcml2YXRlIGZpbmFsIE9iamVjdCBmaWVsZDsKKworICBBKEBqYXZheC5hbm5vdGF0aW9uLk5vbm51bGwgT2JqZWN0IGZpZWxkLCBTdHJpbmcuLi4gc3RycykgeworICAgICAgdGhpcy5maWVsZCA9IGZpZWxkOzxjYXJldD4KKyAgfQorCit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVDb25zdHJ1Y3RvclBhcmFtZXRlckZyb21GaWVsZC9hZnRlck5vdE51bGxBbm5vdGF0ZWQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlQ29uc3RydWN0b3JQYXJhbWV0ZXJGcm9tRmllbGQvYWZ0ZXJOb3ROdWxsQW5ub3RhdGVkLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWY2OWJkNAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlQ29uc3RydWN0b3JQYXJhbWV0ZXJGcm9tRmllbGQvYWZ0ZXJOb3ROdWxsQW5ub3RhdGVkLmphdmEKQEAgLTAsMCArMSwxMCBAQAorLy8gIkFkZCBjb25zdHJ1Y3RvciBwYXJhbWV0ZXIiICJ0cnVlIgoraW1wb3J0IG9yZy5qZXRicmFpbnMuYW5ub3RhdGlvbnMuKjsKK2NsYXNzIEEgeworICBATm90TnVsbCBwcml2YXRlIGZpbmFsIE9iamVjdCBmaWVsZDsKKworICBBKEBOb3ROdWxsIE9iamVjdCBmaWVsZCwgU3RyaW5nLi4uIHN0cnMpIHsKKyAgICAgIHRoaXMuZmllbGQgPSBmaWVsZDs8Y2FyZXQ+CisgIH0KKworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlQ29uc3RydWN0b3JQYXJhbWV0ZXJGcm9tRmllbGQvYWZ0ZXJTYW1lUGFyYW1ldGVyU2ltcGxlTmFtZXMuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlQ29uc3RydWN0b3JQYXJhbWV0ZXJGcm9tRmllbGQvYWZ0ZXJTYW1lUGFyYW1ldGVyU2ltcGxlTmFtZXMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZjY0YmRjCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVDb25zdHJ1Y3RvclBhcmFtZXRlckZyb21GaWVsZC9hZnRlclNhbWVQYXJhbWV0ZXJTaW1wbGVOYW1lcy5qYXZhCkBAIC0wLDAgKzEsMTAgQEAKKy8vICJBZGQgY29uc3RydWN0b3IgcGFyYW1ldGVycyIgInRydWUiCitjbGFzcyBBIHsKKyAgcHJpdmF0ZSBmaW5hbCBpbnQgX2ZpZWxkOworICBwcml2YXRlIGZpbmFsIGludCBmaWVsZDsKKyAgQShpbnQgZmllbGQsIGludCBmaWVsZDEpIHsKKyAgICAgIF9maWVsZCA9IGZpZWxkOworICAgICAgdGhpcy5maWVsZCA9IGZpZWxkMTsKKyAgfQorCit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVDb25zdHJ1Y3RvclBhcmFtZXRlckZyb21GaWVsZC9hZnRlclZhcmFyZ3MuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlQ29uc3RydWN0b3JQYXJhbWV0ZXJGcm9tRmllbGQvYWZ0ZXJWYXJhcmdzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjQyYzhlZAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlQ29uc3RydWN0b3JQYXJhbWV0ZXJGcm9tRmllbGQvYWZ0ZXJWYXJhcmdzLmphdmEKQEAgLTAsMCArMSw4IEBACisvLyAiQWRkIGNvbnN0cnVjdG9yIHBhcmFtZXRlciIgInRydWUiCitjbGFzcyBBIHsKKyAgcHJpdmF0ZSBmaW5hbCBpbnQgZmllbGQ7CisgIEEoaW50IGZpZWxkLCBTdHJpbmcuLi4gc3RycykgeworICAgICAgdGhpcy5maWVsZCA9IGZpZWxkOzxjYXJldD4KKyAgfQorCit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVDb25zdHJ1Y3RvclBhcmFtZXRlckZyb21GaWVsZC9iZWZvcmUxLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUNvbnN0cnVjdG9yUGFyYW1ldGVyRnJvbUZpZWxkL2JlZm9yZTEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NWRlMjE2Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVDb25zdHJ1Y3RvclBhcmFtZXRlckZyb21GaWVsZC9iZWZvcmUxLmphdmEKQEAgLTAsMCArMSw0IEBACisvLyAiQWRkIGNvbnN0cnVjdG9yIHBhcmFtZXRlciIgInRydWUiCitwdWJsaWMgY2xhc3MgQSB7CisgIHByaXZhdGUgaW50IDxjYXJldD5maWVsZDsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUNvbnN0cnVjdG9yUGFyYW1ldGVyRnJvbUZpZWxkL2JlZm9yZTIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlQ29uc3RydWN0b3JQYXJhbWV0ZXJGcm9tRmllbGQvYmVmb3JlMi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIwMGVkOTIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUNvbnN0cnVjdG9yUGFyYW1ldGVyRnJvbUZpZWxkL2JlZm9yZTIuamF2YQpAQCAtMCwwICsxLDcgQEAKKy8vICJBZGQgY29uc3RydWN0b3IgcGFyYW1ldGVyIiAidHJ1ZSIKK2NsYXNzIEEgeworICAgIHByaXZhdGUgQSA8Y2FyZXQ+ZmllbGQ7CisgICAgcHVibGljIEEoaW50IHgpIHsKKyAgICAgICAgLy90aGlzLmZpZWxkID0gZmllbGQ7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlQ29uc3RydWN0b3JQYXJhbWV0ZXJGcm9tRmllbGQvYmVmb3JlMy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVDb25zdHJ1Y3RvclBhcmFtZXRlckZyb21GaWVsZC9iZWZvcmUzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2ZmZjg5MQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlQ29uc3RydWN0b3JQYXJhbWV0ZXJGcm9tRmllbGQvYmVmb3JlMy5qYXZhCkBAIC0wLDAgKzEsMTMgQEAKKy8vICJBZGQgY29uc3RydWN0b3IgcGFyYW1ldGVyIiAidHJ1ZSIKK2NsYXNzIEEgeworICAgIHByaXZhdGUgQSA8Y2FyZXQ+ZmllbGQ7CisgICAgcHVibGljIEEoaW50IHgpIHsKKyAgICAgICAgaW50IGc9MDsKKyAgICB9CisgICAgQSgpIHsKKyAgICAgIHRoaXMoIiIpOworICAgIH0KKyAgICBBIChTdHJpbmcgcykgeworICAgICAgLy9oZXJlCisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlQ29uc3RydWN0b3JQYXJhbWV0ZXJGcm9tRmllbGQvYmVmb3JlNC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVDb25zdHJ1Y3RvclBhcmFtZXRlckZyb21GaWVsZC9iZWZvcmU0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNThiMmY4ZDMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUNvbnN0cnVjdG9yUGFyYW1ldGVyRnJvbUZpZWxkL2JlZm9yZTQuamF2YQpAQCAtMCwwICsxLDcgQEAKKy8vICJBZGQgY29uc3RydWN0b3IgcGFyYW1ldGVyIiAidHJ1ZSIKK2NsYXNzIEEgeworICAgIHByaXZhdGUgZmluYWwgQSA8Y2FyZXQ+ZmllbGQ7CisgICAgcHVibGljIEEoaW50IHgpIHsKKyAgICAgICAgaW50IGc9MDsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVDb25zdHJ1Y3RvclBhcmFtZXRlckZyb21GaWVsZC9iZWZvcmVBYnN0cmFjdENvbnN0cnVjdG9yLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUNvbnN0cnVjdG9yUGFyYW1ldGVyRnJvbUZpZWxkL2JlZm9yZUFic3RyYWN0Q29uc3RydWN0b3IuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MjZmN2M2Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVDb25zdHJ1Y3RvclBhcmFtZXRlckZyb21GaWVsZC9iZWZvcmVBYnN0cmFjdENvbnN0cnVjdG9yLmphdmEKQEAgLTAsMCArMSwxMCBAQAorLy8gIkFkZCBjb25zdHJ1Y3RvciBwYXJhbWV0ZXIiICJ0cnVlIgorcHVibGljIGVudW0gTGEgeworICAgIDsKKyAgICBwcml2YXRlIFN0cmluZyBzPGNhcmV0PjsKKworICAgIHByaXZhdGUgTGEoKSB7CisgICAgfQorCisgICAgcHJpdmF0ZSBMYShpbnQgYSk7Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUNvbnN0cnVjdG9yUGFyYW1ldGVyRnJvbUZpZWxkL2JlZm9yZUFmdGVyU2VtaS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVDb25zdHJ1Y3RvclBhcmFtZXRlckZyb21GaWVsZC9iZWZvcmVBZnRlclNlbWkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OTBiYWJkCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVDb25zdHJ1Y3RvclBhcmFtZXRlckZyb21GaWVsZC9iZWZvcmVBZnRlclNlbWkuamF2YQpAQCAtMCwwICsxLDQgQEAKKy8vICJBZGQgY29uc3RydWN0b3IgcGFyYW1ldGVyIiAidHJ1ZSIKK3B1YmxpYyBjbGFzcyBBIHsKKyAgICBwcml2YXRlIGZpbmFsIEEgZmllbGQ7PGNhcmV0PgorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlQ29uc3RydWN0b3JQYXJhbWV0ZXJGcm9tRmllbGQvYmVmb3JlQWxyZWFkeUFzc2lnbmVkLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUNvbnN0cnVjdG9yUGFyYW1ldGVyRnJvbUZpZWxkL2JlZm9yZUFscmVhZHlBc3NpZ25lZC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZkNjk4ZGMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUNvbnN0cnVjdG9yUGFyYW1ldGVyRnJvbUZpZWxkL2JlZm9yZUFscmVhZHlBc3NpZ25lZC5qYXZhCkBAIC0wLDAgKzEsMTEgQEAKKy8vICJBZGQgY29uc3RydWN0b3IgcGFyYW1ldGVyIiAidHJ1ZSIKK2NsYXNzIEEgeworICBwcml2YXRlIGZpbmFsIFN0cmluZyB0ZTxjYXJldD54dDsKKworICBwdWJsaWMgRm9vKFN0cmluZyB0ZXh0KSB7CisgICAgdGhpcy50ZXh0ID0gdGV4dDsKKyAgfQorCisgIHB1YmxpYyBGb28oaW50IGkpIHsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlQ29uc3RydWN0b3JQYXJhbWV0ZXJGcm9tRmllbGQvYmVmb3JlQ2hhaW5lZENhbGxzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUNvbnN0cnVjdG9yUGFyYW1ldGVyRnJvbUZpZWxkL2JlZm9yZUNoYWluZWRDYWxscy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjViMWY5MzEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUNvbnN0cnVjdG9yUGFyYW1ldGVyRnJvbUZpZWxkL2JlZm9yZUNoYWluZWRDYWxscy5qYXZhCkBAIC0wLDAgKzEsMTMgQEAKKy8vICJBZGQgY29uc3RydWN0b3IgcGFyYW1ldGVyIiAidHJ1ZSIKK2NsYXNzIEEgeworICBwcml2YXRlIGZpbmFsIGludCA8Y2FyZXQ+ZmllbGQ7CisgIHByaXZhdGUgaW50IGo7CisKKyAgQSgpIHsKKyAgICB0aGlzKDApOworICB9CisKKyAgQShpbnQgaikgeworICAgIHRoaXMuaiA9IGo7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUNvbnN0cnVjdG9yUGFyYW1ldGVyRnJvbUZpZWxkL2JlZm9yZUNob29zZU9uZUNvbnN0cnVjdG9yLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUNvbnN0cnVjdG9yUGFyYW1ldGVyRnJvbUZpZWxkL2JlZm9yZUNob29zZU9uZUNvbnN0cnVjdG9yLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTQ1Mzk2MQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlQ29uc3RydWN0b3JQYXJhbWV0ZXJGcm9tRmllbGQvYmVmb3JlQ2hvb3NlT25lQ29uc3RydWN0b3IuamF2YQpAQCAtMCwwICsxLDE0IEBACisvLyAiQWRkIGNvbnN0cnVjdG9yIHBhcmFtZXRlciIgInRydWUiCitjbGFzcyBUZXN0IHsKKyAgICBwcml2YXRlIGZpbmFsIFN0cmluZyBzOworICAgIHByaXZhdGUgZmluYWwgaW50IGk8Y2FyZXQ+OworCisgICAgVGVzdChTdHJpbmcgcykgeworICAgICAgICB0aGlzLnMgPSBzOworICAgICAgICBpID0gMDsKKyAgICB9CisKKyAgICBUZXN0KCkgeworICAgICAgICBzID0gInMiOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUNvbnN0cnVjdG9yUGFyYW1ldGVyRnJvbUZpZWxkL2JlZm9yZUdlbmVyYXRlRW51bVByaXZhdGVDb25zdHJ1Y3Rvci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVDb25zdHJ1Y3RvclBhcmFtZXRlckZyb21GaWVsZC9iZWZvcmVHZW5lcmF0ZUVudW1Qcml2YXRlQ29uc3RydWN0b3IuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41N2NhMDQzCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVDb25zdHJ1Y3RvclBhcmFtZXRlckZyb21GaWVsZC9iZWZvcmVHZW5lcmF0ZUVudW1Qcml2YXRlQ29uc3RydWN0b3IuamF2YQpAQCAtMCwwICsxLDYgQEAKKy8vICJBZGQgY29uc3RydWN0b3IgcGFyYW1ldGVyIiAidHJ1ZSIKK3B1YmxpYyBlbnVtIE15RW51bQoreworICBWQUxVRV9PTkU7CisgIHByaXZhdGUgZmluYWwgaW50IG15Rmk8Y2FyZXQ+ZWxkOworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlQ29uc3RydWN0b3JQYXJhbWV0ZXJGcm9tRmllbGQvYmVmb3JlTXVsdGlwbGVGaWVsZHMuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlQ29uc3RydWN0b3JQYXJhbWV0ZXJGcm9tRmllbGQvYmVmb3JlTXVsdGlwbGVGaWVsZHMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YWU4YTUwCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVDb25zdHJ1Y3RvclBhcmFtZXRlckZyb21GaWVsZC9iZWZvcmVNdWx0aXBsZUZpZWxkcy5qYXZhCkBAIC0wLDAgKzEsOSBAQAorLy8gIkFkZCBjb25zdHJ1Y3RvciBwYXJhbWV0ZXJzIiAidHJ1ZSIKK2NsYXNzIEEgeworICBwcml2YXRlIGZpbmFsIGludCA8Y2FyZXQ+ZmllbGQ7CisgIHByaXZhdGUgZmluYWwgT2JqZWN0IG87CisgIHByaXZhdGUgZmluYWwgUnVubmFibGUgcnVubmFibGU7CisgIEEoU3RyaW5nLi4uIHN0cnMpIHsKKyAgfQorCit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUNvbnN0cnVjdG9yUGFyYW1ldGVyRnJvbUZpZWxkL2JlZm9yZU11bHRpcGxlRmllbGRzTm9Db25zdHJ1Y3Rvck5vVXNhZ2VzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUNvbnN0cnVjdG9yUGFyYW1ldGVyRnJvbUZpZWxkL2JlZm9yZU11bHRpcGxlRmllbGRzTm9Db25zdHJ1Y3Rvck5vVXNhZ2VzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGY5NmI1NgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlQ29uc3RydWN0b3JQYXJhbWV0ZXJGcm9tRmllbGQvYmVmb3JlTXVsdGlwbGVGaWVsZHNOb0NvbnN0cnVjdG9yTm9Vc2FnZXMuamF2YQpAQCAtMCwwICsxLDYgQEAKKy8vICJBZGQgY29uc3RydWN0b3IgcGFyYW1ldGVycyIgInRydWUiCitwdWJsaWMgY2xhc3MgQSB7CisgIHByaXZhdGUgZmluYWwgaW50IDxjYXJldD5maWVsZDsKKyAgcHJpdmF0ZSBmaW5hbCBPYmplY3QgbzsKKyAgcHJpdmF0ZSBmaW5hbCBSdW5uYWJsZSBydW5uYWJsZTsKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlQ29uc3RydWN0b3JQYXJhbWV0ZXJGcm9tRmllbGQvYmVmb3JlTXVsdGlwbGVGaWVsZHNPbmVBZGRlZC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVDb25zdHJ1Y3RvclBhcmFtZXRlckZyb21GaWVsZC9iZWZvcmVNdWx0aXBsZUZpZWxkc09uZUFkZGVkLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzE0NTgxOQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlQ29uc3RydWN0b3JQYXJhbWV0ZXJGcm9tRmllbGQvYmVmb3JlTXVsdGlwbGVGaWVsZHNPbmVBZGRlZC5qYXZhCkBAIC0wLDAgKzEsMTIgQEAKKy8vICJBZGQgY29uc3RydWN0b3IgcGFyYW1ldGVyIiAidHJ1ZSIKK3B1YmxpYyBjbGFzcyBDb25zdHJ1Y3RvclBhcmFtcyB7CisgICAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgbXk8Y2FyZXQ+VGV4dDsKKyAgICBwcml2YXRlIE9iamVjdCBteU87CisKKyAgICBwdWJsaWMgQ29uc3RydWN0b3JQYXJhbXMoKSB7CisgICAgfQorCisgICAgcHVibGljIENvbnN0cnVjdG9yUGFyYW1zKFN0cmluZyB0ZXh0LCBpbnQgZm9vKSB7CisgICAgICAgIG15VGV4dCA9IHRleHQ7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVDb25zdHJ1Y3RvclBhcmFtZXRlckZyb21GaWVsZC9iZWZvcmVNdWx0aXBsZUZpZWxkc09uZVN0YXRpYy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVDb25zdHJ1Y3RvclBhcmFtZXRlckZyb21GaWVsZC9iZWZvcmVNdWx0aXBsZUZpZWxkc09uZVN0YXRpYy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI2MTQzZTgKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUNvbnN0cnVjdG9yUGFyYW1ldGVyRnJvbUZpZWxkL2JlZm9yZU11bHRpcGxlRmllbGRzT25lU3RhdGljLmphdmEKQEAgLTAsMCArMSw4IEBACisvLyAiQWRkIGNvbnN0cnVjdG9yIHBhcmFtZXRlciIgInRydWUiCitwdWJsaWMgY2xhc3MgQ29uc3RydWN0b3JQYXJhbXMgeworICAgIHByaXZhdGUgZmluYWwgU3RyaW5nIG15PGNhcmV0PlRleHQ7CisgICAgcHJpdmF0ZSBmaW5hbCBzdGF0aWMgT2JqZWN0IG91ck87CisKKyAgICBwdWJsaWMgQ29uc3RydWN0b3JQYXJhbXMoKSB7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVDb25zdHJ1Y3RvclBhcmFtZXRlckZyb21GaWVsZC9iZWZvcmVNdWx0aXBsZUZpZWxkc09uZVdpdGhvdXRJbml0aWFsaXplci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVDb25zdHJ1Y3RvclBhcmFtZXRlckZyb21GaWVsZC9iZWZvcmVNdWx0aXBsZUZpZWxkc09uZVdpdGhvdXRJbml0aWFsaXplci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRlM2RlNzMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUNvbnN0cnVjdG9yUGFyYW1ldGVyRnJvbUZpZWxkL2JlZm9yZU11bHRpcGxlRmllbGRzT25lV2l0aG91dEluaXRpYWxpemVyLmphdmEKQEAgLTAsMCArMSw4IEBACisvLyAiQWRkIGNvbnN0cnVjdG9yIHBhcmFtZXRlciIgInRydWUiCitwdWJsaWMgY2xhc3MgQ29uc3RydWN0b3JQYXJhbXMgeworICAgIHByaXZhdGUgZmluYWwgU3RyaW5nIG15PGNhcmV0PlRleHQ7CisgICAgcHJpdmF0ZSBmaW5hbCBPYmplY3Qgb3VyTyA9IG51bGw7CisKKyAgICBwdWJsaWMgQ29uc3RydWN0b3JQYXJhbXMoKSB7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVDb25zdHJ1Y3RvclBhcmFtZXRlckZyb21GaWVsZC9iZWZvcmVOb25udWxsQW5ub3RhdGVkLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUNvbnN0cnVjdG9yUGFyYW1ldGVyRnJvbUZpZWxkL2JlZm9yZU5vbm51bGxBbm5vdGF0ZWQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYTZjNGEwCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVDb25zdHJ1Y3RvclBhcmFtZXRlckZyb21GaWVsZC9iZWZvcmVOb25udWxsQW5ub3RhdGVkLmphdmEKQEAgLTAsMCArMSw4IEBACisvLyAiQWRkIGNvbnN0cnVjdG9yIHBhcmFtZXRlciIgInRydWUiCitjbGFzcyBBIHsKKyAgQGphdmF4LmFubm90YXRpb24uTm9ubnVsbCBwcml2YXRlIGZpbmFsIE9iamVjdCA8Y2FyZXQ+ZmllbGQ7CisKKyAgQShTdHJpbmcuLi4gc3RycykgeworICB9CisKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUNvbnN0cnVjdG9yUGFyYW1ldGVyRnJvbUZpZWxkL2JlZm9yZU5vdE51bGxBbm5vdGF0ZWQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlQ29uc3RydWN0b3JQYXJhbWV0ZXJGcm9tRmllbGQvYmVmb3JlTm90TnVsbEFubm90YXRlZC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYyYzQxYTgKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUNvbnN0cnVjdG9yUGFyYW1ldGVyRnJvbUZpZWxkL2JlZm9yZU5vdE51bGxBbm5vdGF0ZWQuamF2YQpAQCAtMCwwICsxLDkgQEAKKy8vICJBZGQgY29uc3RydWN0b3IgcGFyYW1ldGVyIiAidHJ1ZSIKK2ltcG9ydCBvcmcuamV0YnJhaW5zLmFubm90YXRpb25zLio7CitjbGFzcyBBIHsKKyAgQE5vdE51bGwgcHJpdmF0ZSBmaW5hbCBPYmplY3QgPGNhcmV0PmZpZWxkOworCisgIEEoU3RyaW5nLi4uIHN0cnMpIHsKKyAgfQorCit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVDb25zdHJ1Y3RvclBhcmFtZXRlckZyb21GaWVsZC9iZWZvcmVTYW1lUGFyYW1ldGVyU2ltcGxlTmFtZXMuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlQ29uc3RydWN0b3JQYXJhbWV0ZXJGcm9tRmllbGQvYmVmb3JlU2FtZVBhcmFtZXRlclNpbXBsZU5hbWVzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWNmMjRlNwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlQ29uc3RydWN0b3JQYXJhbWV0ZXJGcm9tRmllbGQvYmVmb3JlU2FtZVBhcmFtZXRlclNpbXBsZU5hbWVzLmphdmEKQEAgLTAsMCArMSw4IEBACisvLyAiQWRkIGNvbnN0cnVjdG9yIHBhcmFtZXRlcnMiICJ0cnVlIgorY2xhc3MgQSB7CisgIHByaXZhdGUgZmluYWwgaW50IDxjYXJldD5fZmllbGQ7CisgIHByaXZhdGUgZmluYWwgaW50IGZpZWxkOworICBBKCkgeworICB9CisKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUNvbnN0cnVjdG9yUGFyYW1ldGVyRnJvbUZpZWxkL2JlZm9yZVN0YXRpYy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVDb25zdHJ1Y3RvclBhcmFtZXRlckZyb21GaWVsZC9iZWZvcmVTdGF0aWMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZjQ5ZmUyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVDb25zdHJ1Y3RvclBhcmFtZXRlckZyb21GaWVsZC9iZWZvcmVTdGF0aWMuamF2YQpAQCAtMCwwICsxLDcgQEAKKy8vICJBZGQgY29uc3RydWN0b3IgcGFyYW1ldGVyIiAiZmFsc2UiCitjbGFzcyBBIHsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBBIDxjYXJldD5maWVsZDsKKyAgICBwdWJsaWMgQShpbnQgeCkgeworICAgICAgICBpbnQgZz0wOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUNvbnN0cnVjdG9yUGFyYW1ldGVyRnJvbUZpZWxkL2JlZm9yZVZhcmFyZ3MuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlQ29uc3RydWN0b3JQYXJhbWV0ZXJGcm9tRmllbGQvYmVmb3JlVmFyYXJncy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc0Yjc2ZjkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUNvbnN0cnVjdG9yUGFyYW1ldGVyRnJvbUZpZWxkL2JlZm9yZVZhcmFyZ3MuamF2YQpAQCAtMCwwICsxLDcgQEAKKy8vICJBZGQgY29uc3RydWN0b3IgcGFyYW1ldGVyIiAidHJ1ZSIKK2NsYXNzIEEgeworICBwcml2YXRlIGZpbmFsIGludCA8Y2FyZXQ+ZmllbGQ7CisgIEEoU3RyaW5nLi4uIHN0cnMpIHsKKyAgfQorCit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVFbnVtQ29uc3RhbnRGcm9tVXNhZ2UvYWZ0ZXIxLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUVudW1Db25zdGFudEZyb21Vc2FnZS9hZnRlcjEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MWFkMTE2Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVFbnVtQ29uc3RhbnRGcm9tVXNhZ2UvYWZ0ZXIxLmphdmEKQEAgLTAsMCArMSw4IEBACisvLyAiQ3JlYXRlIEVudW0gQ29uc3RhbnQgJ0VFRSciICJ0cnVlIgorCitlbnVtIEUgeworICAgIEVFRTsKKyAgICB2b2lkIHQoKSB7CisgICAgICAgIEVFRQorICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUVudW1Db25zdGFudEZyb21Vc2FnZS9hZnRlcjIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlRW51bUNvbnN0YW50RnJvbVVzYWdlL2FmdGVyMi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ2ZWE5MzkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUVudW1Db25zdGFudEZyb21Vc2FnZS9hZnRlcjIuamF2YQpAQCAtMCwwICsxLDggQEAKKy8vICJDcmVhdGUgRW51bSBDb25zdGFudCAnRUVFJyIgInRydWUiCisKK2VudW0gRSB7CisgICAgQUFBLCBFRUU7CisgICAgdm9pZCB0KCkgeworICAgICAgICBFRUUKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVFbnVtQ29uc3RhbnRGcm9tVXNhZ2UvYWZ0ZXI0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUVudW1Db25zdGFudEZyb21Vc2FnZS9hZnRlcjQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YmQ5NzQ0Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVFbnVtQ29uc3RhbnRGcm9tVXNhZ2UvYWZ0ZXI0LmphdmEKQEAgLTAsMCArMSwxMSBAQAorLy8gIkNyZWF0ZSBFbnVtIENvbnN0YW50ICdFRUUnIiAidHJ1ZSIKK2NsYXNzIE90aGVyIHsKKyAgcHVibGljIE90aGVyKCkgeworICAgIE15RW51bSBlZWUgPSAgTXlFbnVtLkVFRTsKKyAgfQorfQorCitlbnVtIE15RW51bSB7CisgICAgRUVFCisKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlRW51bUNvbnN0YW50RnJvbVVzYWdlL2FmdGVyNS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVFbnVtQ29uc3RhbnRGcm9tVXNhZ2UvYWZ0ZXI1LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTM0OTM0NgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlRW51bUNvbnN0YW50RnJvbVVzYWdlL2FmdGVyNS5qYXZhCkBAIC0wLDAgKzEsMTMgQEAKKy8vICJDcmVhdGUgRW51bSBDb25zdGFudCAnQmVhbjMnIiAidHJ1ZSIKK0BpbnRlcmZhY2UgQmVhbkF3YXJlIHsKKyAgICBCZWFuTmFtZVtdIHZhbHVlKCk7Cit9CisKK2VudW0gQmVhbk5hbWUgeworICAgIEJlYW4xLAorICAgIEJlYW4yLCBCZWFuMzsKK30KKworQEJlYW5Bd2FyZSh2YWx1ZSA9IEJlYW5OYW1lLkJlYW4zKQoraW50ZXJmYWNlIE15QmVhbkF3YXJlIHsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUVudW1Db25zdGFudEZyb21Vc2FnZS9hZnRlclBhc3NBcmdzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUVudW1Db25zdGFudEZyb21Vc2FnZS9hZnRlclBhc3NBcmdzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjQyZjVlNwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlRW51bUNvbnN0YW50RnJvbVVzYWdlL2FmdGVyUGFzc0FyZ3MuamF2YQpAQCAtMCwwICsxLDE5IEBACisvLyAiQ3JlYXRlIEVudW0gQ29uc3RhbnQgJ0QzJyIgInRydWUiCitwdWJsaWMgZW51bSBEZW1vIHsKKworICAgIEQxKCJmb28iKSwKKyAgICBEMigiYmFyIiksIEQzKCk8Y2FyZXQ+OworICAgIHByaXZhdGUgU3RyaW5nIG5hbWU7CisKKyAgICBEZW1vKFN0cmluZyBuYW1lKSB7CisKKyAgICAgICAgdGhpcy5uYW1lID0gbmFtZTsKKyAgICB9Cit9CisKK2NsYXNzIFNob3cgeworCisgICAgcHVibGljIHZvaWQgZG9Tb21ldGhpbmcoKSB7CisgICAgICAgIERlbW8uRDMKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVFbnVtQ29uc3RhbnRGcm9tVXNhZ2UvYWZ0ZXJTd2l0Y2hMYWJlbC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVFbnVtQ29uc3RhbnRGcm9tVXNhZ2UvYWZ0ZXJTd2l0Y2hMYWJlbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE2ZGI1MGIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUVudW1Db25zdGFudEZyb21Vc2FnZS9hZnRlclN3aXRjaExhYmVsLmphdmEKQEAgLTAsMCArMSwxNCBAQAorLy8gIkNyZWF0ZSBFbnVtIENvbnN0YW50ICdEMyciICJ0cnVlIgorcHVibGljIGVudW0gRGVtbyB7CisgICAgRDMKK30KKworY2xhc3MgU2hvdyB7CisKKyAgICBwdWJsaWMgdm9pZCBkb1NvbWV0aGluZyhEZW1vIGQpIHsKKyAgICAgICAgc3dpdGNoIChkKSB7CisgICAgICAgICAgY2FzZSBEMzoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlRW51bUNvbnN0YW50RnJvbVVzYWdlL2FmdGVyU3dpdGNoTGFiZWwxLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUVudW1Db25zdGFudEZyb21Vc2FnZS9hZnRlclN3aXRjaExhYmVsMS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJiMDNjMTEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUVudW1Db25zdGFudEZyb21Vc2FnZS9hZnRlclN3aXRjaExhYmVsMS5qYXZhCkBAIC0wLDAgKzEsMTQgQEAKKy8vICJDcmVhdGUgRW51bSBDb25zdGFudCAnRDMnIiAidHJ1ZSIKK3B1YmxpYyBlbnVtIERlbW8geworICAgIEQzCit9CisKK2NsYXNzIFNob3cgeworCisgICAgcHVibGljIHZvaWQgZG9Tb21ldGhpbmcoRGVtbyBkKSB7CisgICAgICAgIHN3aXRjaCAoZCkgeworICAgICAgICAgIGNhc2UgRGVtby5EMzoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlRW51bUNvbnN0YW50RnJvbVVzYWdlL2JlZm9yZTEuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlRW51bUNvbnN0YW50RnJvbVVzYWdlL2JlZm9yZTEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMDQ0YmMxCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVFbnVtQ29uc3RhbnRGcm9tVXNhZ2UvYmVmb3JlMS5qYXZhCkBAIC0wLDAgKzEsOCBAQAorLy8gIkNyZWF0ZSBFbnVtIENvbnN0YW50ICdFRUUnIiAidHJ1ZSIKKworZW51bSBFIHsKKyAgICA7CisgICAgdm9pZCB0KCkgeworICAgICAgICA8Y2FyZXQ+RUVFCisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlRW51bUNvbnN0YW50RnJvbVVzYWdlL2JlZm9yZTIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlRW51bUNvbnN0YW50RnJvbVVzYWdlL2JlZm9yZTIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MmZlMTJmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVFbnVtQ29uc3RhbnRGcm9tVXNhZ2UvYmVmb3JlMi5qYXZhCkBAIC0wLDAgKzEsOCBAQAorLy8gIkNyZWF0ZSBFbnVtIENvbnN0YW50ICdFRUUnIiAidHJ1ZSIKKworZW51bSBFIHsKKyAgICBBQUE7CisgICAgdm9pZCB0KCkgeworICAgICAgICA8Y2FyZXQ+RUVFCisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlRW51bUNvbnN0YW50RnJvbVVzYWdlL2JlZm9yZTMuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlRW51bUNvbnN0YW50RnJvbVVzYWdlL2JlZm9yZTMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YjllNjA1Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVFbnVtQ29uc3RhbnRGcm9tVXNhZ2UvYmVmb3JlMy5qYXZhCkBAIC0wLDAgKzEsOCBAQAorLy8gIkNyZWF0ZSBFbnVtIENvbnN0YW50ICdFRUUnIiAiZmFsc2UiCisKK2VudW0gRSB7CisgICAgQUFBOworICAgIHZvaWQgdCgpIHsKKyAgICAgICAgaW50IHQgPSA8Y2FyZXQ+RUVFOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUVudW1Db25zdGFudEZyb21Vc2FnZS9iZWZvcmU0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUVudW1Db25zdGFudEZyb21Vc2FnZS9iZWZvcmU0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDI4MzZmZgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlRW51bUNvbnN0YW50RnJvbVVzYWdlL2JlZm9yZTQuamF2YQpAQCAtMCwwICsxLDEwIEBACisvLyAiQ3JlYXRlIEVudW0gQ29uc3RhbnQgJ0VFRSciICJ0cnVlIgorY2xhc3MgT3RoZXIgeworICBwdWJsaWMgT3RoZXIoKSB7CisgICAgTXlFbnVtIGVlZSA9ICBNeUVudW0uPGNhcmV0PkVFRTsKKyAgfQorfQorCitlbnVtIE15RW51bSB7CisKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlRW51bUNvbnN0YW50RnJvbVVzYWdlL2JlZm9yZTUuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlRW51bUNvbnN0YW50RnJvbVVzYWdlL2JlZm9yZTUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZjA2MWQ5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVFbnVtQ29uc3RhbnRGcm9tVXNhZ2UvYmVmb3JlNS5qYXZhCkBAIC0wLDAgKzEsMTMgQEAKKy8vICJDcmVhdGUgRW51bSBDb25zdGFudCAnQmVhbjMnIiAidHJ1ZSIKK0BpbnRlcmZhY2UgQmVhbkF3YXJlIHsKKyAgICBCZWFuTmFtZVtdIHZhbHVlKCk7Cit9CisKK2VudW0gQmVhbk5hbWUgeworICAgIEJlYW4xLAorICAgIEJlYW4yOworfQorCitAQmVhbkF3YXJlKHZhbHVlID0gQmVhbk5hbWUuQmVhbjM8Y2FyZXQ+KQoraW50ZXJmYWNlIE15QmVhbkF3YXJlIHsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUVudW1Db25zdGFudEZyb21Vc2FnZS9iZWZvcmVQYXNzQXJncy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVFbnVtQ29uc3RhbnRGcm9tVXNhZ2UvYmVmb3JlUGFzc0FyZ3MuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NjFhYzdhCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVFbnVtQ29uc3RhbnRGcm9tVXNhZ2UvYmVmb3JlUGFzc0FyZ3MuamF2YQpAQCAtMCwwICsxLDE5IEBACisvLyAiQ3JlYXRlIEVudW0gQ29uc3RhbnQgJ0QzJyIgInRydWUiCitwdWJsaWMgZW51bSBEZW1vIHsKKworICAgIEQxKCJmb28iKSwKKyAgICBEMigiYmFyIik7CisgICAgcHJpdmF0ZSBTdHJpbmcgbmFtZTsKKworICAgIERlbW8oU3RyaW5nIG5hbWUpIHsKKworICAgICAgICB0aGlzLm5hbWUgPSBuYW1lOworICAgIH0KK30KKworY2xhc3MgU2hvdyB7CisKKyAgICBwdWJsaWMgdm9pZCBkb1NvbWV0aGluZygpIHsKKyAgICAgICAgRGVtby5EPGNhcmV0PjMKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVFbnVtQ29uc3RhbnRGcm9tVXNhZ2UvYmVmb3JlU3dpdGNoTGFiZWwuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlRW51bUNvbnN0YW50RnJvbVVzYWdlL2JlZm9yZVN3aXRjaExhYmVsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTExZDcxYgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlRW51bUNvbnN0YW50RnJvbVVzYWdlL2JlZm9yZVN3aXRjaExhYmVsLmphdmEKQEAgLTAsMCArMSwxMyBAQAorLy8gIkNyZWF0ZSBFbnVtIENvbnN0YW50ICdEMyciICJ0cnVlIgorcHVibGljIGVudW0gRGVtbyB7Cit9CisKK2NsYXNzIFNob3cgeworCisgICAgcHVibGljIHZvaWQgZG9Tb21ldGhpbmcoRGVtbyBkKSB7CisgICAgICAgIHN3aXRjaCAoZCkgeworICAgICAgICAgIGNhc2UgRDxjYXJldD4zOgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVFbnVtQ29uc3RhbnRGcm9tVXNhZ2UvYmVmb3JlU3dpdGNoTGFiZWwxLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUVudW1Db25zdGFudEZyb21Vc2FnZS9iZWZvcmVTd2l0Y2hMYWJlbDEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZTA5ODJiCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVFbnVtQ29uc3RhbnRGcm9tVXNhZ2UvYmVmb3JlU3dpdGNoTGFiZWwxLmphdmEKQEAgLTAsMCArMSwxMyBAQAorLy8gIkNyZWF0ZSBFbnVtIENvbnN0YW50ICdEMyciICJ0cnVlIgorcHVibGljIGVudW0gRGVtbyB7Cit9CisKK2NsYXNzIFNob3cgeworCisgICAgcHVibGljIHZvaWQgZG9Tb21ldGhpbmcoRGVtbyBkKSB7CisgICAgICAgIHN3aXRjaCAoZCkgeworICAgICAgICAgIGNhc2UgRGVtby5EPGNhcmV0PjM6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUZpZWxkRnJvbVBhcmFtZXRlci9hZnRlcjEuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlRmllbGRGcm9tUGFyYW1ldGVyL2FmdGVyMS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU3MTNjY2MKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUZpZWxkRnJvbVBhcmFtZXRlci9hZnRlcjEuamF2YQpAQCAtMCwwICsxLDI1IEBACisvLyAiQ3JlYXRlIEZpZWxkIGZvciBQYXJhbWV0ZXIgJ2lkJyIgInRydWUiCisKK2NsYXNzIFBlcnNvbiB7CisgICAgcHJpdmF0ZSBTdHJpbmcgX19mbmFtZTsKKyAgICBwcml2YXRlIGZpbmFsIGludCBteUlkOworICAgIHByaXZhdGUgU3RyaW5nIF9fbG5hbWU7CisgICAgcHJpdmF0ZSBTdHJpbmcgX19zdHJlZXQ7CisgCisgCisgICAgcHVibGljIFBlcnNvbiAoIFN0cmluZyBpX2xuYW1lLCBTdHJpbmcgaV9mbmFtZSwgU3RyaW5nIGlfc3RyZWV0KQorICAgIHsKKyAgICAgICAgX19sbmFtZSA9IGlfbG5hbWU7CisgICAgICAgIF9fZm5hbWUgPSBpX2ZuYW1lOworICAgICAgICBfX3N0cmVldCA9IGlfc3RyZWV0OworICAgIH0KKyAKKyAgICBwdWJsaWMgUGVyc29uICggaW50IGlkPGNhcmV0PiwgU3RyaW5nIGlfbG5hbWUsIFN0cmluZyBpX2ZuYW1lLCBTdHJpbmcgaV9zdHJlZXQpCisgICAgeworICAgICAgICBteUlkID0gaWQ7CisgICAgICAgIF9fbG5hbWUgPSBpX2xuYW1lOworICAgICAgICBfX2ZuYW1lID0gaV9mbmFtZTsKKyAgICAgICAgX19zdHJlZXQgPSBpX3N0cmVldDsKKyAgICB9CisKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUZpZWxkRnJvbVBhcmFtZXRlci9hZnRlcjIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlRmllbGRGcm9tUGFyYW1ldGVyL2FmdGVyMi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBmMDE1NjgKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUZpZWxkRnJvbVBhcmFtZXRlci9hZnRlcjIuamF2YQpAQCAtMCwwICsxLDE4IEBACisvLyAiQ3JlYXRlIEZpZWxkIGZvciBQYXJhbWV0ZXIgJ3Rlc3QnIiAidHJ1ZSIKKworcGFja2FnZSBjb2RlSW5zaWdodC5jcmVhdGVGaWVsZEZyb21QYXJhbWV0ZXJBY3Rpb24udGVzdDE7CisKK2ltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKKworcHVibGljIGNsYXNzIFRlc3RCZWZvcmUgeworICAgIHByaXZhdGUgU3RyaW5nIG15TmFtZTsKKyAgICBwcml2YXRlIGZpbmFsIEhhc2hNYXAgbXlUZXN0OworICAgIHByaXZhdGUgU3RyaW5nIG15UGVyc29uOworCisgICAgcHVibGljIFRlc3RCZWZvcmUoU3RyaW5nIG5hbWUsIGludCBsZW5ndGgsIEhhc2hNYXAgdGVzdDxjYXJldD4sIFN0cmluZyBwZXJzb24pIHsKKyAgICAgICAgc3VwZXIoKTsKKyAgICAgICAgbXlOYW1lID0gbmFtZTsKKyAgICAgICAgbXlUZXN0ID0gdGVzdDsKKyAgICAgICAgbXlQZXJzb24gPSBwZXJzb247CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVGaWVsZEZyb21QYXJhbWV0ZXIvYWZ0ZXIzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUZpZWxkRnJvbVBhcmFtZXRlci9hZnRlcjMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MzNhNDY4Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVGaWVsZEZyb21QYXJhbWV0ZXIvYWZ0ZXIzLmphdmEKQEAgLTAsMCArMSwyMCBAQAorLy8gIkNyZWF0ZSBGaWVsZCBmb3IgUGFyYW1ldGVyICdsZW5ndGgnIiAidHJ1ZSIKKworcGFja2FnZSBjb2RlSW5zaWdodC5jcmVhdGVGaWVsZEZyb21QYXJhbWV0ZXJBY3Rpb24udGVzdDE7CisKK2ltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKKworcHVibGljIGNsYXNzIFRlc3RCZWZvcmUgeworICAgIHByaXZhdGUgU3RyaW5nIG15TmFtZTsKKyAgICBwcml2YXRlIGZpbmFsIGludCBteUxlbmd0aDsKKyAgICBwcml2YXRlIGZpbmFsIEhhc2hNYXAgbXlUZXN0OworICAgIHByaXZhdGUgU3RyaW5nIG15UGVyc29uOworCisgICAgcHVibGljIFRlc3RCZWZvcmUoU3RyaW5nIG5hbWUsIGludCBsZW5ndGgsIEhhc2hNYXAgdGVzdCwgU3RyaW5nIHBlcnNvbikgeworICAgICAgICBzdXBlcigpOworICAgICAgICBteU5hbWUgPSBuYW1lOworICAgICAgICBteUxlbmd0aCA9IGxlbmd0aDsKKyAgICAgICAgbXlUZXN0ID0gdGVzdDsKKyAgICAgICAgbXlQZXJzb24gPSBwZXJzb247CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVGaWVsZEZyb21QYXJhbWV0ZXIvYWZ0ZXI0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUZpZWxkRnJvbVBhcmFtZXRlci9hZnRlcjQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44Y2I2NmEzCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVGaWVsZEZyb21QYXJhbWV0ZXIvYWZ0ZXI0LmphdmEKQEAgLTAsMCArMSwxMiBAQAorLy8gIkNyZWF0ZSBGaWVsZCBmb3IgUGFyYW1ldGVyICdwMSciICJ0cnVlIgorCitjbGFzcyBUZXN0eworICAgIHByaXZhdGUgZmluYWwgaW50IG15UDE7CisgICAgaW50IG15UDI7CisgCisgICAgVGVzdChpbnQgcDxjYXJldD4xLCBpbnQgcDIpeworICAgICAgICBteVAxID0gcDE7CisgICAgICAgIG15UDIgPSBwMjsKKyAgICB9Cit9CisKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlRmllbGRGcm9tUGFyYW1ldGVyL2FmdGVyNS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVGaWVsZEZyb21QYXJhbWV0ZXIvYWZ0ZXI1LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDMxMDZjZQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlRmllbGRGcm9tUGFyYW1ldGVyL2FmdGVyNS5qYXZhCkBAIC0wLDAgKzEsMTIgQEAKKy8vICJDcmVhdGUgRmllbGQgZm9yIFBhcmFtZXRlciAncDEnIiAidHJ1ZSIKKworY2xhc3MgVGVzdHsKKyAgICBpbnQgbXlQMTsKKyAgICBpbnQgbXlQMjsKKyAKKyAgICBUZXN0KGludCBwPGNhcmV0PjEsIGludCBwMil7CisgICAgICAgIG15UDEgPSBwMTsKKyAgICAgICAgbXlQMiA9IHAyOworICAgIH0KK30KKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVGaWVsZEZyb21QYXJhbWV0ZXIvYWZ0ZXI2LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUZpZWxkRnJvbVBhcmFtZXRlci9hZnRlcjYuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOWM0OTkxCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVGaWVsZEZyb21QYXJhbWV0ZXIvYWZ0ZXI2LmphdmEKQEAgLTAsMCArMSwxMyBAQAorLy8gIkNyZWF0ZSBGaWVsZCBmb3IgUGFyYW1ldGVyICdwMSciICJ0cnVlIgorCitjbGFzcyBUZXN0eworICAgIGludCBteVAxOworICAgIGludCBteVAyOworIAorICAgIHZvaWQgZihpbnQgcDEsIGludCBwMil7CisgICAgICAgIG15UDEgPSBwMTsKKyAgICAgICAgaW50IG15UDIgPSBwMTsKKyAgICAgICAgcDEgPSAwOworICAgIH0KK30KKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVGaWVsZEZyb21QYXJhbWV0ZXIvYWZ0ZXI4LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUZpZWxkRnJvbVBhcmFtZXRlci9hZnRlcjguamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kY2RiNDk2Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVGaWVsZEZyb21QYXJhbWV0ZXIvYWZ0ZXI4LmphdmEKQEAgLTAsMCArMSwxMCBAQAorLy8gIkNyZWF0ZSBGaWVsZCBmb3IgUGFyYW1ldGVyICdwMSciICJ0cnVlIgorCitjbGFzcyBUZXN0eworICAgIHByaXZhdGUgc3RhdGljIGludCBwMTsKKworICAgIHN0YXRpYyB2b2lkIGYoaW50IHAxKXsKKyAgICAgICAgVGVzdC5wMSA9IHAxOworICAgIH0KK30KKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVGaWVsZEZyb21QYXJhbWV0ZXIvYWZ0ZXJBcnJheVR5cGUuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlRmllbGRGcm9tUGFyYW1ldGVyL2FmdGVyQXJyYXlUeXBlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmFkZjYzYgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlRmllbGRGcm9tUGFyYW1ldGVyL2FmdGVyQXJyYXlUeXBlLmphdmEKQEAgLTAsMCArMSwxMCBAQAorLy8gIkNyZWF0ZSBGaWVsZCBmb3IgUGFyYW1ldGVyICdwMSciICJ0cnVlIgorCitjbGFzcyBUZXN0eworICAgIHByaXZhdGUgU3RyaW5nW10gbXlQMTsKKworICAgIHZvaWQgZihTdHJpbmdbXSBwMSl7CisgICAgICAgIG15UDEgPSBwMTsKKyAgICB9Cit9CisKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlRmllbGRGcm9tUGFyYW1ldGVyL2FmdGVyQm91bmRMaXN0VHlwZVBhcmFtZXRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVGaWVsZEZyb21QYXJhbWV0ZXIvYWZ0ZXJCb3VuZExpc3RUeXBlUGFyYW1ldGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMThiYzIwMTYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUZpZWxkRnJvbVBhcmFtZXRlci9hZnRlckJvdW5kTGlzdFR5cGVQYXJhbWV0ZXIuamF2YQpAQCAtMCwwICsxLDExIEBACisvLyAiQ3JlYXRlIEZpZWxkIGZvciBQYXJhbWV0ZXIgJ3AxJyIgInRydWUiCisKK2ltcG9ydCBqYXZhLnV0aWwuKjsKK2NsYXNzIFRlc3R7CisgICAgcHJpdmF0ZSBMaXN0PFN0cmluZz4gbXlQMTsKKworICAgIDxUIGV4dGVuZHMgU3RyaW5nPiB2b2lkIGYoTGlzdDxUPiBwMSl7CisgICAgICAgIG15UDEgPSBwMTsKKyAgICB9Cit9CisKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlRmllbGRGcm9tUGFyYW1ldGVyL2FmdGVyQ2xhc3NUeXBlUGFyYW1ldGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUZpZWxkRnJvbVBhcmFtZXRlci9hZnRlckNsYXNzVHlwZVBhcmFtZXRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJkMDhjMDAKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUZpZWxkRnJvbVBhcmFtZXRlci9hZnRlckNsYXNzVHlwZVBhcmFtZXRlci5qYXZhCkBAIC0wLDAgKzEsMTAgQEAKKy8vICJDcmVhdGUgRmllbGQgZm9yIFBhcmFtZXRlciAncDEnIiAidHJ1ZSIKKworY2xhc3MgVGVzdDxUPnsKKyAgICBwcml2YXRlIFQgbXlQMTsKKworICAgIHZvaWQgZihUIHAxKXsKKyAgICAgICAgbXlQMSA9IHAxOworICAgIH0KK30KKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVGaWVsZEZyb21QYXJhbWV0ZXIvYWZ0ZXJMaXN0Q2xhc3NUeXBlUGFyYW1ldGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUZpZWxkRnJvbVBhcmFtZXRlci9hZnRlckxpc3RDbGFzc1R5cGVQYXJhbWV0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMjRhZjE4Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVGaWVsZEZyb21QYXJhbWV0ZXIvYWZ0ZXJMaXN0Q2xhc3NUeXBlUGFyYW1ldGVyLmphdmEKQEAgLTAsMCArMSwxMSBAQAorLy8gIkNyZWF0ZSBGaWVsZCBmb3IgUGFyYW1ldGVyICdwMSciICJ0cnVlIgorCitpbXBvcnQgamF2YS51dGlsLio7CitjbGFzcyBUZXN0PFQ+eworICAgIHByaXZhdGUgTGlzdDxUPiBteVAxOworCisgICAgdm9pZCBmKExpc3Q8VD4gcDEpeworICAgICAgICBteVAxID0gcDE7CisgICAgfQorfQorCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUZpZWxkRnJvbVBhcmFtZXRlci9hZnRlckxpc3RUeXBlUGFyYW1ldGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUZpZWxkRnJvbVBhcmFtZXRlci9hZnRlckxpc3RUeXBlUGFyYW1ldGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTVmYmU5OAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlRmllbGRGcm9tUGFyYW1ldGVyL2FmdGVyTGlzdFR5cGVQYXJhbWV0ZXIuamF2YQpAQCAtMCwwICsxLDExIEBACisvLyAiQ3JlYXRlIEZpZWxkIGZvciBQYXJhbWV0ZXIgJ3AxJyIgInRydWUiCisKK2ltcG9ydCBqYXZhLnV0aWwuKjsKK2NsYXNzIFRlc3R7CisgICAgcHJpdmF0ZSBMaXN0PE9iamVjdD4gbXlQMTsKKworICAgIDxUPiB2b2lkIGYoTGlzdDxUPiBwMSl7CisgICAgICAgIG15UDEgPSBwMTsKKyAgICB9Cit9CisKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlRmllbGRGcm9tUGFyYW1ldGVyL2FmdGVyTm90TnVsbC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVGaWVsZEZyb21QYXJhbWV0ZXIvYWZ0ZXJOb3ROdWxsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmViNzEwOQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlRmllbGRGcm9tUGFyYW1ldGVyL2FmdGVyTm90TnVsbC5qYXZhCkBAIC0wLDAgKzEsMTQgQEAKKy8vICJDcmVhdGUgRmllbGQgZm9yIFBhcmFtZXRlciAnbmFtZSciICJ0cnVlIgorCitpbXBvcnQgb3JnLmpldGJyYWlucy5hbm5vdGF0aW9ucy5Ob3ROdWxsOworCitwdWJsaWMgY2xhc3MgVGVzdEJlZm9yZSB7CisKKyAgICBATm90TnVsbAorICAgIHByaXZhdGUgZmluYWwgU3RyaW5nIG15TmFtZTsKKworICAgIHB1YmxpYyBUZXN0QmVmb3JlKEBOb3ROdWxsIFN0cmluZyBuYW1lKSB7CisgICAgICAgIHN1cGVyKCk7CisgICAgICAgIG15TmFtZSA9IG5hbWU7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVGaWVsZEZyb21QYXJhbWV0ZXIvYWZ0ZXJOdWxsYWJsZS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVGaWVsZEZyb21QYXJhbWV0ZXIvYWZ0ZXJOdWxsYWJsZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU4MjllNTkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUZpZWxkRnJvbVBhcmFtZXRlci9hZnRlck51bGxhYmxlLmphdmEKQEAgLTAsMCArMSwxNyBAQAorLy8gIkNyZWF0ZSBGaWVsZCBmb3IgUGFyYW1ldGVyICduYW1lJyIgInRydWUiCisKK3BhY2thZ2UgY29kZUluc2lnaHQuY3JlYXRlRmllbGRGcm9tUGFyYW1ldGVyQWN0aW9uLnRlc3QxOworCitpbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7CitpbXBvcnQgb3JnLmpldGJyYWlucy5hbm5vdGF0aW9ucy5OdWxsYWJsZTsKKworcHVibGljIGNsYXNzIFRlc3RCZWZvcmUgeworCisgICAgQE51bGxhYmxlCisgICAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgbXlOYW1lOworCisgICAgcHVibGljIFRlc3RCZWZvcmUoQE51bGxhYmxlIFN0cmluZyBuYW1lKSB7CisgICAgICAgIHN1cGVyKCk7CisgICAgICAgIG15TmFtZSA9IG5hbWU7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVGaWVsZEZyb21QYXJhbWV0ZXIvYWZ0ZXJTaW1wbGVUeXBlUGFyYW1ldGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUZpZWxkRnJvbVBhcmFtZXRlci9hZnRlclNpbXBsZVR5cGVQYXJhbWV0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NDdkMTU4Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVGaWVsZEZyb21QYXJhbWV0ZXIvYWZ0ZXJTaW1wbGVUeXBlUGFyYW1ldGVyLmphdmEKQEAgLTAsMCArMSwxMCBAQAorLy8gIkNyZWF0ZSBGaWVsZCBmb3IgUGFyYW1ldGVyICdwMSciICJ0cnVlIgorCitjbGFzcyBUZXN0eworICAgIHByaXZhdGUgT2JqZWN0IG15UDE7CisKKyAgICA8VD4gdm9pZCBmKFQgcDEpeworICAgICAgICBteVAxID0gcDE7CisgICAgfQorfQorCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUZpZWxkRnJvbVBhcmFtZXRlci9hZnRlclR5cGVQYXJhbWV0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlRmllbGRGcm9tUGFyYW1ldGVyL2FmdGVyVHlwZVBhcmFtZXRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk5ODRiMGUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUZpZWxkRnJvbVBhcmFtZXRlci9hZnRlclR5cGVQYXJhbWV0ZXIuamF2YQpAQCAtMCwwICsxLDEwIEBACisvLyAiQ3JlYXRlIEZpZWxkIGZvciBQYXJhbWV0ZXIgJ3AxJyIgInRydWUiCisKK2NsYXNzIFRlc3R7CisgICAgcHJpdmF0ZSBTdHJpbmcgbXlQMTsKKworICAgIDxUIGV4dGVuZHMgU3RyaW5nPiB2b2lkIGYoVCBwMSl7CisgICAgICAgIG15UDEgPSBwMTsKKyAgICB9Cit9CisKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlRmllbGRGcm9tUGFyYW1ldGVyL2JlZm9yZTEuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlRmllbGRGcm9tUGFyYW1ldGVyL2JlZm9yZTEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMzM4YzZkCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVGaWVsZEZyb21QYXJhbWV0ZXIvYmVmb3JlMS5qYXZhCkBAIC0wLDAgKzEsMjEgQEAKKy8vICJDcmVhdGUgRmllbGQgZm9yIFBhcmFtZXRlciAnaWQnIiAidHJ1ZSIKKworY2xhc3MgUGVyc29uIHsKKyAgICBwcml2YXRlIFN0cmluZyBfX2ZuYW1lLCBfX2xuYW1lLCBfX3N0cmVldDsKKyAKKyAKKyAgICBwdWJsaWMgUGVyc29uICggU3RyaW5nIGlfbG5hbWUsIFN0cmluZyBpX2ZuYW1lLCBTdHJpbmcgaV9zdHJlZXQpCisgICAgeworICAgICAgICBfX2xuYW1lID0gaV9sbmFtZTsKKyAgICAgICAgX19mbmFtZSA9IGlfZm5hbWU7CisgICAgICAgIF9fc3RyZWV0ID0gaV9zdHJlZXQ7CisgICAgfQorIAorICAgIHB1YmxpYyBQZXJzb24gKCBpbnQgaWQ8Y2FyZXQ+LCBTdHJpbmcgaV9sbmFtZSwgU3RyaW5nIGlfZm5hbWUsIFN0cmluZyBpX3N0cmVldCkKKyAgICB7CisgICAgICAgIF9fbG5hbWUgPSBpX2xuYW1lOworICAgICAgICBfX2ZuYW1lID0gaV9mbmFtZTsKKyAgICAgICAgX19zdHJlZXQgPSBpX3N0cmVldDsKKyAgICB9CisKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUZpZWxkRnJvbVBhcmFtZXRlci9iZWZvcmUyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUZpZWxkRnJvbVBhcmFtZXRlci9iZWZvcmUyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzhmMTE2OQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlRmllbGRGcm9tUGFyYW1ldGVyL2JlZm9yZTIuamF2YQpAQCAtMCwwICsxLDE2IEBACisvLyAiQ3JlYXRlIEZpZWxkIGZvciBQYXJhbWV0ZXIgJ3Rlc3QnIiAidHJ1ZSIKKworcGFja2FnZSBjb2RlSW5zaWdodC5jcmVhdGVGaWVsZEZyb21QYXJhbWV0ZXJBY3Rpb24udGVzdDE7CisKK2ltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKKworcHVibGljIGNsYXNzIFRlc3RCZWZvcmUgeworICAgIHByaXZhdGUgU3RyaW5nIG15TmFtZTsKKyAgICBwcml2YXRlIFN0cmluZyBteVBlcnNvbjsKKworICAgIHB1YmxpYyBUZXN0QmVmb3JlKFN0cmluZyBuYW1lLCBpbnQgbGVuZ3RoLCBIYXNoTWFwIHRlc3Q8Y2FyZXQ+LCBTdHJpbmcgcGVyc29uKSB7CisgICAgICAgIHN1cGVyKCk7CisgICAgICAgIG15TmFtZSA9IG5hbWU7CisgICAgICAgIG15UGVyc29uID0gcGVyc29uOworICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlRmllbGRGcm9tUGFyYW1ldGVyL2JlZm9yZTMuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlRmllbGRGcm9tUGFyYW1ldGVyL2JlZm9yZTMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNTA3NzY5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVGaWVsZEZyb21QYXJhbWV0ZXIvYmVmb3JlMy5qYXZhCkBAIC0wLDAgKzEsMTggQEAKKy8vICJDcmVhdGUgRmllbGQgZm9yIFBhcmFtZXRlciAnbGVuZ3RoJyIgInRydWUiCisKK3BhY2thZ2UgY29kZUluc2lnaHQuY3JlYXRlRmllbGRGcm9tUGFyYW1ldGVyQWN0aW9uLnRlc3QxOworCitpbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7CisKK3B1YmxpYyBjbGFzcyBUZXN0QmVmb3JlIHsKKyAgICBwcml2YXRlIFN0cmluZyBteU5hbWU7CisgICAgcHJpdmF0ZSBmaW5hbCBIYXNoTWFwIG15VGVzdDsKKyAgICBwcml2YXRlIFN0cmluZyBteVBlcnNvbjsKKworICAgIHB1YmxpYyBUZXN0QmVmb3JlKFN0cmluZyBuYW1lLCBpbnQgbGVuZ3RoPGNhcmV0PiwgSGFzaE1hcCB0ZXN0LCBTdHJpbmcgcGVyc29uKSB7CisgICAgICAgIHN1cGVyKCk7CisgICAgICAgIG15TmFtZSA9IG5hbWU7CisgICAgICAgIG15VGVzdCA9IHRlc3Q7CisgICAgICAgIG15UGVyc29uID0gcGVyc29uOworICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlRmllbGRGcm9tUGFyYW1ldGVyL2JlZm9yZTQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlRmllbGRGcm9tUGFyYW1ldGVyL2JlZm9yZTQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYmE5ZTg3Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVGaWVsZEZyb21QYXJhbWV0ZXIvYmVmb3JlNC5qYXZhCkBAIC0wLDAgKzEsMTAgQEAKKy8vICJDcmVhdGUgRmllbGQgZm9yIFBhcmFtZXRlciAncDEnIiAidHJ1ZSIKKworY2xhc3MgVGVzdHsKKyAgICBpbnQgbXlQMjsKKyAKKyAgICBUZXN0KGludCBwPGNhcmV0PjEsIGludCBwMil7CisgICAgICAgIG15UDIgPSBwMjsKKyAgICB9Cit9CisKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlRmllbGRGcm9tUGFyYW1ldGVyL2JlZm9yZTUuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlRmllbGRGcm9tUGFyYW1ldGVyL2JlZm9yZTUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYTI0NzhlCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVGaWVsZEZyb21QYXJhbWV0ZXIvYmVmb3JlNS5qYXZhCkBAIC0wLDAgKzEsMTEgQEAKKy8vICJDcmVhdGUgRmllbGQgZm9yIFBhcmFtZXRlciAncDEnIiAidHJ1ZSIKKworY2xhc3MgVGVzdHsKKyAgICBpbnQgbXlQMTsKKyAgICBpbnQgbXlQMjsKKyAKKyAgICBUZXN0KGludCBwPGNhcmV0PjEsIGludCBwMil7CisgICAgICAgIG15UDIgPSBwMjsKKyAgICB9Cit9CisKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlRmllbGRGcm9tUGFyYW1ldGVyL2JlZm9yZTYuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlRmllbGRGcm9tUGFyYW1ldGVyL2JlZm9yZTYuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OTBjNzgwCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVGaWVsZEZyb21QYXJhbWV0ZXIvYmVmb3JlNi5qYXZhCkBAIC0wLDAgKzEsMTIgQEAKKy8vICJDcmVhdGUgRmllbGQgZm9yIFBhcmFtZXRlciAncDEnIiAidHJ1ZSIKKworY2xhc3MgVGVzdHsKKyAgICBpbnQgbXlQMTsKKyAgICBpbnQgbXlQMjsKKyAKKyAgICB2b2lkIGYoaW50IHA8Y2FyZXQ+MSwgaW50IHAyKXsKKyAgICAgICAgaW50IG15UDIgPSBwMTsKKyAgICAgICAgcDEgPSAwOworICAgIH0KK30KKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVGaWVsZEZyb21QYXJhbWV0ZXIvYmVmb3JlNy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVGaWVsZEZyb21QYXJhbWV0ZXIvYmVmb3JlNy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVjZTBiYzcKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUZpZWxkRnJvbVBhcmFtZXRlci9iZWZvcmU3LmphdmEKQEAgLTAsMCArMSwxMiBAQAorLy8gIkNyZWF0ZSBGaWVsZCBmb3IgUGFyYW1ldGVyICdwMSciICJmYWxzZSIKKworY2xhc3MgVGVzdHsKKyAgICBpbnQgbXlQMTsKKyAgICBpbnQgbXlQMjsKKyAKKyAgICB2b2lkIGYoaW50IHA8Y2FyZXQ+MSwgaW50IHAyKXsKKyAgICAgICAgbXlQMiA9IHAxOworICAgICAgICBwMSA9IDA7CisgICAgfQorfQorCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUZpZWxkRnJvbVBhcmFtZXRlci9iZWZvcmU4LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUZpZWxkRnJvbVBhcmFtZXRlci9iZWZvcmU4LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTExMDk1NAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlRmllbGRGcm9tUGFyYW1ldGVyL2JlZm9yZTguamF2YQpAQCAtMCwwICsxLDcgQEAKKy8vICJDcmVhdGUgRmllbGQgZm9yIFBhcmFtZXRlciAncDEnIiAidHJ1ZSIKKworY2xhc3MgVGVzdHsKKyAgICBzdGF0aWMgdm9pZCBmKGludCBwPGNhcmV0PjEpeworICAgIH0KK30KKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVGaWVsZEZyb21QYXJhbWV0ZXIvYmVmb3JlQXJyYXlUeXBlLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUZpZWxkRnJvbVBhcmFtZXRlci9iZWZvcmVBcnJheVR5cGUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYTBjMjA5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVGaWVsZEZyb21QYXJhbWV0ZXIvYmVmb3JlQXJyYXlUeXBlLmphdmEKQEAgLTAsMCArMSw3IEBACisvLyAiQ3JlYXRlIEZpZWxkIGZvciBQYXJhbWV0ZXIgJ3AxJyIgInRydWUiCisKK2NsYXNzIFRlc3R7CisgICAgdm9pZCBmKFN0cmluZ1tdIHA8Y2FyZXQ+MSl7CisgICAgfQorfQorCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUZpZWxkRnJvbVBhcmFtZXRlci9iZWZvcmVCb3VuZExpc3RUeXBlUGFyYW1ldGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUZpZWxkRnJvbVBhcmFtZXRlci9iZWZvcmVCb3VuZExpc3RUeXBlUGFyYW1ldGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTc0ZTVlNgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlRmllbGRGcm9tUGFyYW1ldGVyL2JlZm9yZUJvdW5kTGlzdFR5cGVQYXJhbWV0ZXIuamF2YQpAQCAtMCwwICsxLDggQEAKKy8vICJDcmVhdGUgRmllbGQgZm9yIFBhcmFtZXRlciAncDEnIiAidHJ1ZSIKKworaW1wb3J0IGphdmEudXRpbC4qOworY2xhc3MgVGVzdHsKKyAgICA8VCBleHRlbmRzIFN0cmluZz4gdm9pZCBmKExpc3Q8VD4gcDxjYXJldD4xKXsKKyAgICB9Cit9CisKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlRmllbGRGcm9tUGFyYW1ldGVyL2JlZm9yZUNhcmV0T25NZXRob2QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlRmllbGRGcm9tUGFyYW1ldGVyL2JlZm9yZUNhcmV0T25NZXRob2QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNzZmNGY0Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVGaWVsZEZyb21QYXJhbWV0ZXIvYmVmb3JlQ2FyZXRPbk1ldGhvZC5qYXZhCkBAIC0wLDAgKzEsNyBAQAorLy8gIkNyZWF0ZSBGaWVsZCBmb3IgUGFyYW1ldGVyICdwMSciICJmYWxzZSIKKworY2xhc3MgVGVzdHsKKyAgICA8VCBleHRlbmRzIFN0cmluZz4gdm9pZCA8Y2FyZXQ+ZihUIHAxKXsKKyAgICB9Cit9CisKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlRmllbGRGcm9tUGFyYW1ldGVyL2JlZm9yZUNhcmV0T25NZXRob2RXaXRoT25seUFzc2lnbmVkUGFyYW1zLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUZpZWxkRnJvbVBhcmFtZXRlci9iZWZvcmVDYXJldE9uTWV0aG9kV2l0aE9ubHlBc3NpZ25lZFBhcmFtcy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVjMzJmMjcKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUZpZWxkRnJvbVBhcmFtZXRlci9iZWZvcmVDYXJldE9uTWV0aG9kV2l0aE9ubHlBc3NpZ25lZFBhcmFtcy5qYXZhCkBAIC0wLDAgKzEsMTAgQEAKKy8vICJDcmVhdGUgRmllbGQgZm9yIFBhcmFtZXRlciAncDEnIiAiZmFsc2UiCisKK2NsYXNzIFRlc3R7CisgICAgICBwcml2YXRlIGZpbmFsIFN0cmluZyBteVAxOworICAKKyAgICAgIDxUIGV4dGVuZHMgU3RyaW5nPiB2b2lkIDxjYXJldD5mKFQgcDEpeworICAgICAgICAgIG15UDEgPSBwMTsKKyAgICAgIH0KK30KKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVGaWVsZEZyb21QYXJhbWV0ZXIvYmVmb3JlQ2FyZXRPbk1ldGhvZFdpdGhvdXRQYXJhbXMuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlRmllbGRGcm9tUGFyYW1ldGVyL2JlZm9yZUNhcmV0T25NZXRob2RXaXRob3V0UGFyYW1zLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzI4YmNlNQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlRmllbGRGcm9tUGFyYW1ldGVyL2JlZm9yZUNhcmV0T25NZXRob2RXaXRob3V0UGFyYW1zLmphdmEKQEAgLTAsMCArMSw3IEBACisvLyAiQ3JlYXRlIEZpZWxkIGZvciBQYXJhbWV0ZXIgJ3AxJyIgImZhbHNlIgorCitjbGFzcyBUZXN0eworICAgIDxUIGV4dGVuZHMgU3RyaW5nPiB2b2lkIDxjYXJldD5mKCl7CisgICAgfQorfQorCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUZpZWxkRnJvbVBhcmFtZXRlci9iZWZvcmVDbGFzc1R5cGVQYXJhbWV0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlRmllbGRGcm9tUGFyYW1ldGVyL2JlZm9yZUNsYXNzVHlwZVBhcmFtZXRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZjODZlNGIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUZpZWxkRnJvbVBhcmFtZXRlci9iZWZvcmVDbGFzc1R5cGVQYXJhbWV0ZXIuamF2YQpAQCAtMCwwICsxLDcgQEAKKy8vICJDcmVhdGUgRmllbGQgZm9yIFBhcmFtZXRlciAncDEnIiAidHJ1ZSIKKworY2xhc3MgVGVzdDxUPnsKKyAgICB2b2lkIGYoVCBwPGNhcmV0PjEpeworICAgIH0KK30KKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVGaWVsZEZyb21QYXJhbWV0ZXIvYmVmb3JlTGlzdENsYXNzVHlwZVBhcmFtZXRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVGaWVsZEZyb21QYXJhbWV0ZXIvYmVmb3JlTGlzdENsYXNzVHlwZVBhcmFtZXRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY3ODE1YTIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUZpZWxkRnJvbVBhcmFtZXRlci9iZWZvcmVMaXN0Q2xhc3NUeXBlUGFyYW1ldGVyLmphdmEKQEAgLTAsMCArMSw4IEBACisvLyAiQ3JlYXRlIEZpZWxkIGZvciBQYXJhbWV0ZXIgJ3AxJyIgInRydWUiCisKK2ltcG9ydCBqYXZhLnV0aWwuKjsKK2NsYXNzIFRlc3Q8VD57CisgICAgdm9pZCBmKExpc3Q8VD4gcDxjYXJldD4xKXsKKyAgICB9Cit9CisKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlRmllbGRGcm9tUGFyYW1ldGVyL2JlZm9yZUxpc3RUeXBlUGFyYW1ldGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUZpZWxkRnJvbVBhcmFtZXRlci9iZWZvcmVMaXN0VHlwZVBhcmFtZXRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNmNGU1YWYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUZpZWxkRnJvbVBhcmFtZXRlci9iZWZvcmVMaXN0VHlwZVBhcmFtZXRlci5qYXZhCkBAIC0wLDAgKzEsOCBAQAorLy8gIkNyZWF0ZSBGaWVsZCBmb3IgUGFyYW1ldGVyICdwMSciICJ0cnVlIgorCitpbXBvcnQgamF2YS51dGlsLio7CitjbGFzcyBUZXN0eworICAgIDxUPiB2b2lkIGYoTGlzdDxUPiBwPGNhcmV0PjEpeworICAgIH0KK30KKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVGaWVsZEZyb21QYXJhbWV0ZXIvYmVmb3JlTm90TnVsbC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVGaWVsZEZyb21QYXJhbWV0ZXIvYmVmb3JlTm90TnVsbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZiNjRlZjkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUZpZWxkRnJvbVBhcmFtZXRlci9iZWZvcmVOb3ROdWxsLmphdmEKQEAgLTAsMCArMSwxMCBAQAorLy8gIkNyZWF0ZSBGaWVsZCBmb3IgUGFyYW1ldGVyICduYW1lJyIgInRydWUiCisKK2ltcG9ydCBvcmcuamV0YnJhaW5zLmFubm90YXRpb25zLk5vdE51bGw7CisKK3B1YmxpYyBjbGFzcyBUZXN0QmVmb3JlIHsKKworICAgIHB1YmxpYyBUZXN0QmVmb3JlKEBOb3ROdWxsIFN0cmluZyBuYW1lPGNhcmV0PikgeworICAgICAgICBzdXBlcigpOworICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlRmllbGRGcm9tUGFyYW1ldGVyL2JlZm9yZU51bGxhYmxlLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUZpZWxkRnJvbVBhcmFtZXRlci9iZWZvcmVOdWxsYWJsZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc3NDlmY2EKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUZpZWxkRnJvbVBhcmFtZXRlci9iZWZvcmVOdWxsYWJsZS5qYXZhCkBAIC0wLDAgKzEsMTMgQEAKKy8vICJDcmVhdGUgRmllbGQgZm9yIFBhcmFtZXRlciAnbmFtZSciICJ0cnVlIgorCitwYWNrYWdlIGNvZGVJbnNpZ2h0LmNyZWF0ZUZpZWxkRnJvbVBhcmFtZXRlckFjdGlvbi50ZXN0MTsKKworaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOworaW1wb3J0IG9yZy5qZXRicmFpbnMuYW5ub3RhdGlvbnMuTnVsbGFibGU7CisKK3B1YmxpYyBjbGFzcyBUZXN0QmVmb3JlIHsKKworICAgIHB1YmxpYyBUZXN0QmVmb3JlKEBOdWxsYWJsZSBTdHJpbmcgbmFtZTxjYXJldD4pIHsKKyAgICAgICAgc3VwZXIoKTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUZpZWxkRnJvbVBhcmFtZXRlci9iZWZvcmVTaW1wbGVUeXBlUGFyYW1ldGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUZpZWxkRnJvbVBhcmFtZXRlci9iZWZvcmVTaW1wbGVUeXBlUGFyYW1ldGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmQyY2I3NwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlRmllbGRGcm9tUGFyYW1ldGVyL2JlZm9yZVNpbXBsZVR5cGVQYXJhbWV0ZXIuamF2YQpAQCAtMCwwICsxLDcgQEAKKy8vICJDcmVhdGUgRmllbGQgZm9yIFBhcmFtZXRlciAncDEnIiAidHJ1ZSIKKworY2xhc3MgVGVzdHsKKyAgICA8VD4gdm9pZCBmKFQgcDxjYXJldD4xKXsKKyAgICB9Cit9CisKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlRmllbGRGcm9tUGFyYW1ldGVyL2JlZm9yZVR5cGVQYXJhbWV0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlRmllbGRGcm9tUGFyYW1ldGVyL2JlZm9yZVR5cGVQYXJhbWV0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYzhmZWNiCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVGaWVsZEZyb21QYXJhbWV0ZXIvYmVmb3JlVHlwZVBhcmFtZXRlci5qYXZhCkBAIC0wLDAgKzEsNyBAQAorLy8gIkNyZWF0ZSBGaWVsZCBmb3IgUGFyYW1ldGVyICdwMSciICJ0cnVlIgorCitjbGFzcyBUZXN0eworICAgIDxUIGV4dGVuZHMgU3RyaW5nPiB2b2lkIGYoVCBwPGNhcmV0PjEpeworICAgIH0KK30KKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVGaWVsZEZyb21Vc2FnZS9hZnRlckFub255bW91c0NsYXNzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUZpZWxkRnJvbVVzYWdlL2FmdGVyQW5vbnltb3VzQ2xhc3MuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mODMyNTU3Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVGaWVsZEZyb21Vc2FnZS9hZnRlckFub255bW91c0NsYXNzLmphdmEKQEAgLTAsMCArMSwxMiBAQAorLy8gIkNyZWF0ZSBGaWVsZCAnZmllbGQnIiAidHJ1ZSIKK2NsYXNzIE1haW4geworICAgIHN0YXRpYyB2b2lkIGZvbygpIHsKKyAgICAgICAgbmV3IE9iamVjdCgpIHsKKyAgICAgICAgICAgIHB1YmxpYyBpbnQgZmllbGQ8Y2FyZXQ+OworCisgICAgICAgICAgICB2b2lkIGJhcigpIHsKKyAgICAgICAgICAgICAgICB0aGlzLmZpZWxkID0gMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUZpZWxkRnJvbVVzYWdlL2FmdGVyQ3JlYXRlRnJvbUVxdWFscy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVGaWVsZEZyb21Vc2FnZS9hZnRlckNyZWF0ZUZyb21FcXVhbHMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZTNlNDUzNgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlRmllbGRGcm9tVXNhZ2UvYWZ0ZXJDcmVhdGVGcm9tRXF1YWxzLmphdmEKQEAgLTAsMCArMSw4IEBACisvLyAiQ3JlYXRlIEZpZWxkICdWQVInIiAidHJ1ZSIKK2NsYXNzIEEgeworICAgIHByaXZhdGUgZmluYWwgU3RyaW5nIFZBUjxjYXJldD47CisKKyAgICBwdWJsaWMgSURFQTE2MDI3KCkgeworICAgIFZBUi5lcXVhbHMoIiIpOworICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUZpZWxkRnJvbVVzYWdlL2FmdGVyQ3JlYXRlRnJvbUVxdWFsc1RvUHJpbWl0aXZlVHlwZS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVGaWVsZEZyb21Vc2FnZS9hZnRlckNyZWF0ZUZyb21FcXVhbHNUb1ByaW1pdGl2ZVR5cGUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYzVmNjhjCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVGaWVsZEZyb21Vc2FnZS9hZnRlckNyZWF0ZUZyb21FcXVhbHNUb1ByaW1pdGl2ZVR5cGUuamF2YQpAQCAtMCwwICsxLDggQEAKKy8vICJDcmVhdGUgRmllbGQgJ1ZBUiciICJ0cnVlIgorY2xhc3MgQSB7CisgICAgcHJpdmF0ZSBmaW5hbCBJbnRlZ2VyIFZBUjxjYXJldD47CisKKyAgICBwdWJsaWMgSURFQTE2MDI3KCkgeworICAgIFZBUi5lcXVhbHMoNSk7CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlRmllbGRGcm9tVXNhZ2UvYWZ0ZXJFeHBlY3RlZFR5cGVzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUZpZWxkRnJvbVVzYWdlL2FmdGVyRXhwZWN0ZWRUeXBlcy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIxOWM5NTQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUZpZWxkRnJvbVVzYWdlL2FmdGVyRXhwZWN0ZWRUeXBlcy5qYXZhCkBAIC0wLDAgKzEsMTQgQEAKKy8vICJDcmVhdGUgRmllbGQgJ3BhbmVsJyIgInRydWUiCitpbXBvcnQgamF2YXguc3dpbmcuKjsKKworY2xhc3MgVGVzdCB7CisgICAgcHJpdmF0ZSBKUGFuZWwgcGFuZWw7CisKKyAgICB2b2lkIGZvbyhKUGFuZWwgY29udGFpbmVyKSB7CisgICAgaWYgKHBhbmVsID09IG51bGwpIHsKKyAgICAgIHBhbmVsID0gbmV3IEpQYW5lbCgpOworICAgICAgcGFuZWwuc2V0T3BhcXVlKHRydWUpOworICAgICAgY29udGFpbmVyLmFkZChwYW5lbCk7CisgICAgfQorICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVGaWVsZEZyb21Vc2FnZS9hZnRlckluc2lkZVN0YXRpY0lubmVyQ2xhc3MuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlRmllbGRGcm9tVXNhZ2UvYWZ0ZXJJbnNpZGVTdGF0aWNJbm5lckNsYXNzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODJlMTMyOQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlRmllbGRGcm9tVXNhZ2UvYWZ0ZXJJbnNpZGVTdGF0aWNJbm5lckNsYXNzLmphdmEKQEAgLTAsMCArMSwxNCBAQAorLy8gIkNyZWF0ZSBGaWVsZCAnZmllbGQnIiAidHJ1ZSIKK2NsYXNzIEEgeworICBTdHJpbmcgZmllbGQ7CisKKyAgc3RhdGljIGNsYXNzIEZvbyB7CisgICAgICBwcml2YXRlIGZpbmFsIE9iamVjdCBmaWVsZDxjYXJldD47CisKKyAgICAgIEZvbygpIHsKKyAgICAgICAgICBmaWVsZDsKKyAgICAgIH0KKyAgfQorCit9CisKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlRmllbGRGcm9tVXNhZ2UvYWZ0ZXJJbnRlcmZhY2UuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlRmllbGRGcm9tVXNhZ2UvYWZ0ZXJJbnRlcmZhY2UuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNDNhYjM3Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVGaWVsZEZyb21Vc2FnZS9hZnRlckludGVyZmFjZS5qYXZhCkBAIC0wLDAgKzEsMTAgQEAKKy8vICJDcmVhdGUgRmllbGQgJ0ZJRUxEJyIgInRydWUiCitjbGFzcyBDIHsKKyAgICBwdWJsaWMgdm9pZCBmb28oKSB7CisgICAgICAgIGludCBpID0gSVRlc3QuRklFTEQ7CisgICAgfQorICAgIAorICAgIHB1YmxpYyBzdGF0aWMgaW50ZXJmYWNlIElUZXN0IHsKKyAgICAgICAgaW50IEZJRUxEPGNhcmV0PjsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVGaWVsZEZyb21Vc2FnZS9hZnRlck11bHRpcGxlVHlwZXMuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlRmllbGRGcm9tVXNhZ2UvYWZ0ZXJNdWx0aXBsZVR5cGVzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGI5NzI3ZQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlRmllbGRGcm9tVXNhZ2UvYWZ0ZXJNdWx0aXBsZVR5cGVzLmphdmEKQEAgLTAsMCArMSw5IEBACisvLyAiQ3JlYXRlIEZpZWxkICdmbGQnIiAidHJ1ZSIKK2NsYXNzIEEgeworICAgIHByaXZhdGUgU3RyaW5nIGZsZDxjYXJldD47CisKKyAgICBwdWJsaWMgdm9pZCBmb28oKSB7CisgICAgICBPYmplY3QgeCA9IGZsZDsKKyAgICAgIGZsZCA9ICIiOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUZpZWxkRnJvbVVzYWdlL2FmdGVyTXVsdGlwbGVUeXBlczIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlRmllbGRGcm9tVXNhZ2UvYWZ0ZXJNdWx0aXBsZVR5cGVzMi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFmYzQyMjUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUZpZWxkRnJvbVVzYWdlL2FmdGVyTXVsdGlwbGVUeXBlczIuamF2YQpAQCAtMCwwICsxLDkgQEAKKy8vICJDcmVhdGUgRmllbGQgJ2ZsZCciICJ0cnVlIgorY2xhc3MgQSB7CisgICAgcHJpdmF0ZSBTdHJpbmcgZmxkPGNhcmV0PjsKKworICAgIHB1YmxpYyB2b2lkIGZvbygpIHsKKyAgICAgIE9iamVjdCB4ID0gZmxkOworICAgICAgU3RyaW5nIHMgPSBmbGQ7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlRmllbGRGcm9tVXNhZ2UvYWZ0ZXJQYXJhbWV0ZXJpY01ldGhvZC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVGaWVsZEZyb21Vc2FnZS9hZnRlclBhcmFtZXRlcmljTWV0aG9kLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2Q0MGQxNAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlRmllbGRGcm9tVXNhZ2UvYWZ0ZXJQYXJhbWV0ZXJpY01ldGhvZC5qYXZhCkBAIC0wLDAgKzEsMTUgQEAKKy8vICJDcmVhdGUgRmllbGQgJ2FycmF5JyIgInRydWUiCitjbGFzcyBTbXRoPFQ+IHsKK30KKworY2xhc3MgQ29udmVydGVyIHsKKyAgc3RhdGljIDxUPiBTbXRoPFQ+IGFzU210aCAoVFtdIHQpIHt9Cit9CisKK2NsYXNzIFRlc3QgeworICAgIHByaXZhdGUgU3RyaW5nW10gYXJyYXk8Y2FyZXQ+OworCisgICAgdm9pZCBiYXIgKCkgeworICAgICAgICBTbXRoPFN0cmluZz4gbCA9IENvbnZlcnRlci5hc1NtdGgoYXJyYXkpOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUZpZWxkRnJvbVVzYWdlL2FmdGVyUXVhbGlmeUlubmVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUZpZWxkRnJvbVVzYWdlL2FmdGVyUXVhbGlmeUlubmVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODc5ZjdiMwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlRmllbGRGcm9tVXNhZ2UvYWZ0ZXJRdWFsaWZ5SW5uZXIuamF2YQpAQCAtMCwwICsxLDE0IEBACisvLyAiQ3JlYXRlIEZpZWxkICdmaWVsZCciICJ0cnVlIgorY2xhc3MgQXsKKyAgICBwcml2YXRlIGZpbmFsIE91dGVyLklubmVyIGZpZWxkPGNhcmV0PjsKKworICAgIHsKKyAgICAgICAgT3V0ZXIuZihmaWVsZCk7CisgICAgfQorfQorCitjbGFzcyBPdXRlcnsKKyAgICBzdGF0aWMgY2xhc3MgSW5uZXJ7fQorCisgICAgc3RhdGljIHZvaWQgZihJbm5lciBpbm5lcil7fQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlRmllbGRGcm9tVXNhZ2UvYWZ0ZXJTb3J0QnlSZWxldmFuY2UuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlRmllbGRGcm9tVXNhZ2UvYWZ0ZXJTb3J0QnlSZWxldmFuY2UuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNjBhMGJkCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVGaWVsZEZyb21Vc2FnZS9hZnRlclNvcnRCeVJlbGV2YW5jZS5qYXZhCkBAIC0wLDAgKzEsMTIgQEAKK2ltcG9ydCBmb28uRm9vOworCisvLyAiQ3JlYXRlIEZpZWxkICdmaWVsZCciICJ0cnVlIgorY2xhc3MgQSB7CisKKyAgICBwcml2YXRlIEZvbyBmaWVsZDsKKworICAgIHZvaWQgYmFyKCkgeworICAgICAgICBmaWVsZC5wdXQoImEiLCAiYiIpOworICAgIH0KKworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlRmllbGRGcm9tVXNhZ2UvYWZ0ZXJUeXBlQXJnc0Zvcm1hdHRlZC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVGaWVsZEZyb21Vc2FnZS9hZnRlclR5cGVBcmdzRm9ybWF0dGVkLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjA0NzRmNwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlRmllbGRGcm9tVXNhZ2UvYWZ0ZXJUeXBlQXJnc0Zvcm1hdHRlZC5qYXZhCkBAIC0wLDAgKzEsMTMgQEAKKy8vICJDcmVhdGUgRmllbGQgJ2ZpZWxkJyIgInRydWUiCitpbXBvcnQgamF2YS51dGlsLio7CitjbGFzcyBBIHsKKyAgICBwcml2YXRlIE1hcDxTdHJpbmcsIFN0cmluZz4gZmllbGQ8Y2FyZXQ+OworCisgICAgdm9pZCBmb28oTWFwPFN0cmluZywgU3RyaW5nPiBzKXt9CisKKyAgdm9pZCBiYXIoKSB7CisgICAgZm9vKGZpZWxkKTsKKyAgfQorCit9CisKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlRmllbGRGcm9tVXNhZ2UvYWZ0ZXJXaXRoQWxpZ25tZW50LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUZpZWxkRnJvbVVzYWdlL2FmdGVyV2l0aEFsaWdubWVudC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYzZjA4N2IKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUZpZWxkRnJvbVVzYWdlL2FmdGVyV2l0aEFsaWdubWVudC5qYXZhCkBAIC0wLDAgKzEsMjMgQEAKKy8vICJDcmVhdGUgRmllbGQgJ2ZpZWxkJyIgInRydWUiCitjbGFzcyBBIHsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBOT1RJRklDQVRJT05fRU5BQkxFRCAgICAgPSAiTk9USUZJQ0FUSU9OX0VOQUJMRUQiOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIE5PVElGSUNBVElPTl9ERVZJQ0VfTkFNRSA9ICJOT1RJRklDQVRJT05fREVWSUNFX05BTUUiOworICAgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGZpZWxkOworCisgICAgcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0U3RyaW5nKFN0cmluZyBrZXkpCisgIHsKKyAgICAgIHJldHVybiBnZXRTdHJpbmcoa2V5LCAiIik7CisgIH0KKworICBwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRTdHJpbmcoU3RyaW5nIGtleSwgU3RyaW5nIGRlZmF1bHRWYWx1ZSkKKyAgeworICAgICAgcmV0dXJuIG51bGw7CisgIH0KKyAgCit9CisKK2NsYXNzIEIgeworICB7CisgICAgU3RyaW5nIHMgPSBBLmZpZWxkOworICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUZpZWxkRnJvbVVzYWdlL2JlZm9yZUFub255bW91c0NsYXNzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUZpZWxkRnJvbVVzYWdlL2JlZm9yZUFub255bW91c0NsYXNzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGMyNzVlYQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlRmllbGRGcm9tVXNhZ2UvYmVmb3JlQW5vbnltb3VzQ2xhc3MuamF2YQpAQCAtMCwwICsxLDEwIEBACisvLyAiQ3JlYXRlIEZpZWxkICdmaWVsZCciICJ0cnVlIgorY2xhc3MgTWFpbiB7CisgICAgc3RhdGljIHZvaWQgZm9vKCkgeworICAgICAgICBuZXcgT2JqZWN0KCkgeworICAgICAgICAgICAgdm9pZCBiYXIoKSB7CisgICAgICAgICAgICAgICAgdGhpcy48Y2FyZXQ+ZmllbGQgPSAwOworICAgICAgICAgICAgfQorICAgICAgICB9OworICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlRmllbGRGcm9tVXNhZ2UvYmVmb3JlQ3JlYXRlRnJvbUVxdWFscy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVGaWVsZEZyb21Vc2FnZS9iZWZvcmVDcmVhdGVGcm9tRXF1YWxzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjY2NDVkNgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlRmllbGRGcm9tVXNhZ2UvYmVmb3JlQ3JlYXRlRnJvbUVxdWFscy5qYXZhCkBAIC0wLDAgKzEsNiBAQAorLy8gIkNyZWF0ZSBGaWVsZCAnVkFSJyIgInRydWUiCitjbGFzcyBBIHsKKyAgcHVibGljIElERUExNjAyNygpIHsKKyAgICBWPGNhcmV0PkFSLmVxdWFscygiIik7CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlRmllbGRGcm9tVXNhZ2UvYmVmb3JlQ3JlYXRlRnJvbUVxdWFsc1RvUHJpbWl0aXZlVHlwZS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVGaWVsZEZyb21Vc2FnZS9iZWZvcmVDcmVhdGVGcm9tRXF1YWxzVG9QcmltaXRpdmVUeXBlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2RiZjNjNQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlRmllbGRGcm9tVXNhZ2UvYmVmb3JlQ3JlYXRlRnJvbUVxdWFsc1RvUHJpbWl0aXZlVHlwZS5qYXZhCkBAIC0wLDAgKzEsNiBAQAorLy8gIkNyZWF0ZSBGaWVsZCAnVkFSJyIgInRydWUiCitjbGFzcyBBIHsKKyAgcHVibGljIElERUExNjAyNygpIHsKKyAgICBWPGNhcmV0PkFSLmVxdWFscyg1KTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVGaWVsZEZyb21Vc2FnZS9iZWZvcmVFeHBlY3RlZFR5cGVzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUZpZWxkRnJvbVVzYWdlL2JlZm9yZUV4cGVjdGVkVHlwZXMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MWI5ZjUwCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVGaWVsZEZyb21Vc2FnZS9iZWZvcmVFeHBlY3RlZFR5cGVzLmphdmEKQEAgLTAsMCArMSwxMiBAQAorLy8gIkNyZWF0ZSBGaWVsZCAncGFuZWwnIiAidHJ1ZSIKK2ltcG9ydCBqYXZheC5zd2luZy4qOworCitjbGFzcyBUZXN0IHsKKyAgdm9pZCBmb28oSlBhbmVsIGNvbnRhaW5lcikgeworICAgIGlmIChwPGNhcmV0PmFuZWwgPT0gbnVsbCkgeworICAgICAgcGFuZWwgPSBuZXcgSlBhbmVsKCk7CisgICAgICBwYW5lbC5zZXRPcGFxdWUodHJ1ZSk7CisgICAgICBjb250YWluZXIuYWRkKHBhbmVsKTsKKyAgICB9CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUZpZWxkRnJvbVVzYWdlL2JlZm9yZUluc2lkZVN0YXRpY0lubmVyQ2xhc3MuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlRmllbGRGcm9tVXNhZ2UvYmVmb3JlSW5zaWRlU3RhdGljSW5uZXJDbGFzcy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYwN2EyYTMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUZpZWxkRnJvbVVzYWdlL2JlZm9yZUluc2lkZVN0YXRpY0lubmVyQ2xhc3MuamF2YQpAQCAtMCwwICsxLDEyIEBACisvLyAiQ3JlYXRlIEZpZWxkICdmaWVsZCciICJ0cnVlIgorY2xhc3MgQSB7CisgIFN0cmluZyBmaWVsZDsKKworICBzdGF0aWMgY2xhc3MgRm9vIHsKKyAgICAgIEZvbygpIHsKKyAgICAgICAgICBmaWU8Y2FyZXQ+bGQ7CisgICAgICB9CisgIH0KKworfQorCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUZpZWxkRnJvbVVzYWdlL2JlZm9yZUludGVyZmFjZS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVGaWVsZEZyb21Vc2FnZS9iZWZvcmVJbnRlcmZhY2UuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYjE2MzMzCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVGaWVsZEZyb21Vc2FnZS9iZWZvcmVJbnRlcmZhY2UuamF2YQpAQCAtMCwwICsxLDkgQEAKKy8vICJDcmVhdGUgRmllbGQgJ0ZJRUxEJyIgInRydWUiCitjbGFzcyBDIHsKKyAgICBwdWJsaWMgdm9pZCBmb28oKSB7CisgICAgICAgIGludCBpID0gSVRlc3QuRklFTEQ8Y2FyZXQ+OworICAgIH0KKyAgICAKKyAgICBwdWJsaWMgc3RhdGljIGludGVyZmFjZSBJVGVzdCB7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlRmllbGRGcm9tVXNhZ2UvYmVmb3JlTXVsdGlwbGVUeXBlcy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVGaWVsZEZyb21Vc2FnZS9iZWZvcmVNdWx0aXBsZVR5cGVzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzQ1MDNmNAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlRmllbGRGcm9tVXNhZ2UvYmVmb3JlTXVsdGlwbGVUeXBlcy5qYXZhCkBAIC0wLDAgKzEsNyBAQAorLy8gIkNyZWF0ZSBGaWVsZCAnZmxkJyIgInRydWUiCitjbGFzcyBBIHsKKyAgICBwdWJsaWMgdm9pZCBmb28oKSB7CisgICAgICBPYmplY3QgeCA9IDxjYXJldD5mbGQ7CisgICAgICBmbGQgPSAiIjsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVGaWVsZEZyb21Vc2FnZS9iZWZvcmVNdWx0aXBsZVR5cGVzMi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVGaWVsZEZyb21Vc2FnZS9iZWZvcmVNdWx0aXBsZVR5cGVzMi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM4OWU0NDIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUZpZWxkRnJvbVVzYWdlL2JlZm9yZU11bHRpcGxlVHlwZXMyLmphdmEKQEAgLTAsMCArMSw3IEBACisvLyAiQ3JlYXRlIEZpZWxkICdmbGQnIiAidHJ1ZSIKK2NsYXNzIEEgeworICAgIHB1YmxpYyB2b2lkIGZvbygpIHsKKyAgICAgIE9iamVjdCB4ID0gPGNhcmV0PmZsZDsKKyAgICAgIFN0cmluZyBzID0gZmxkOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUZpZWxkRnJvbVVzYWdlL2JlZm9yZU5hLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUZpZWxkRnJvbVVzYWdlL2JlZm9yZU5hLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWViNzZkMAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlRmllbGRGcm9tVXNhZ2UvYmVmb3JlTmEuamF2YQpAQCAtMCwwICsxLDYgQEAKKy8vICJGaWVsZCBub3QgY3JlYXRlZCIgImZhbHNlIgorY2xhc3MgQyB7CisgICAgdm9pZCBmb28oKSB7CisgICAgICAgIHRlPGNhcmV0PnN0KCk7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlRmllbGRGcm9tVXNhZ2UvYmVmb3JlUGFyYW1ldGVyaWNNZXRob2QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlRmllbGRGcm9tVXNhZ2UvYmVmb3JlUGFyYW1ldGVyaWNNZXRob2QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MjU5NDA2Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVGaWVsZEZyb21Vc2FnZS9iZWZvcmVQYXJhbWV0ZXJpY01ldGhvZC5qYXZhCkBAIC0wLDAgKzEsMTMgQEAKKy8vICJDcmVhdGUgRmllbGQgJ2FycmF5JyIgInRydWUiCitjbGFzcyBTbXRoPFQ+IHsKK30KKworY2xhc3MgQ29udmVydGVyIHsKKyAgc3RhdGljIDxUPiBTbXRoPFQ+IGFzU210aCAoVFtdIHQpIHt9Cit9CisKK2NsYXNzIFRlc3QgeworICAgIHZvaWQgYmFyICgpIHsKKyAgICAgICAgU210aDxTdHJpbmc+IGwgPSBDb252ZXJ0ZXIuYXNTbXRoKGE8Y2FyZXQ+cnJheSk7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlRmllbGRGcm9tVXNhZ2UvYmVmb3JlUXVhbGlmeUlubmVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUZpZWxkRnJvbVVzYWdlL2JlZm9yZVF1YWxpZnlJbm5lci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJiMTVmZDYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUZpZWxkRnJvbVVzYWdlL2JlZm9yZVF1YWxpZnlJbm5lci5qYXZhCkBAIC0wLDAgKzEsMTIgQEAKKy8vICJDcmVhdGUgRmllbGQgJ2ZpZWxkJyIgInRydWUiCitjbGFzcyBBeworICAgIHsKKyAgICAgICAgT3V0ZXIuZihmaWVsZDxjYXJldD4pOworICAgIH0KK30KKworY2xhc3MgT3V0ZXJ7CisgICAgc3RhdGljIGNsYXNzIElubmVye30KKworICAgIHN0YXRpYyB2b2lkIGYoSW5uZXIgaW5uZXIpe30KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUZpZWxkRnJvbVVzYWdlL2JlZm9yZVNvcnRCeVJlbGV2YW5jZS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVGaWVsZEZyb21Vc2FnZS9iZWZvcmVTb3J0QnlSZWxldmFuY2UuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MTM1NTczCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVGaWVsZEZyb21Vc2FnZS9iZWZvcmVTb3J0QnlSZWxldmFuY2UuamF2YQpAQCAtMCwwICsxLDggQEAKKy8vICJDcmVhdGUgRmllbGQgJ2ZpZWxkJyIgInRydWUiCitjbGFzcyBBIHsKKworICAgIHZvaWQgYmFyKCkgeworICAgICAgICBmPGNhcmV0PmllbGQucHV0KCJhIiwgImIiKTsKKyAgICB9CisKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUZpZWxkRnJvbVVzYWdlL2JlZm9yZVR5cGVBcmdzRm9ybWF0dGVkLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUZpZWxkRnJvbVVzYWdlL2JlZm9yZVR5cGVBcmdzRm9ybWF0dGVkLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGVhZDljYwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlRmllbGRGcm9tVXNhZ2UvYmVmb3JlVHlwZUFyZ3NGb3JtYXR0ZWQuamF2YQpAQCAtMCwwICsxLDExIEBACisvLyAiQ3JlYXRlIEZpZWxkICdmaWVsZCciICJ0cnVlIgoraW1wb3J0IGphdmEudXRpbC4qOworY2xhc3MgQSB7CisgIHZvaWQgZm9vKE1hcDxTdHJpbmcsIFN0cmluZz4gcyl7fQorCisgIHZvaWQgYmFyKCkgeworICAgIGZvbyhmaWU8Y2FyZXQ+bGQpOworICB9CisKK30KKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVGaWVsZEZyb21Vc2FnZS9iZWZvcmVXaXRoQWxpZ25tZW50LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUZpZWxkRnJvbVVzYWdlL2JlZm9yZVdpdGhBbGlnbm1lbnQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNmY3MTg1Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVGaWVsZEZyb21Vc2FnZS9iZWZvcmVXaXRoQWxpZ25tZW50LmphdmEKQEAgLTAsMCArMSwyMiBAQAorLy8gIkNyZWF0ZSBGaWVsZCAnZmllbGQnIiAidHJ1ZSIKK2NsYXNzIEEgeworICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBOT1RJRklDQVRJT05fRU5BQkxFRCAgICAgPSAiTk9USUZJQ0FUSU9OX0VOQUJMRUQiOworICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBOT1RJRklDQVRJT05fREVWSUNFX05BTUUgPSAiTk9USUZJQ0FUSU9OX0RFVklDRV9OQU1FIjsKKworICBwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRTdHJpbmcoU3RyaW5nIGtleSkKKyAgeworICAgICAgcmV0dXJuIGdldFN0cmluZyhrZXksICIiKTsKKyAgfQorCisgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldFN0cmluZyhTdHJpbmcga2V5LCBTdHJpbmcgZGVmYXVsdFZhbHVlKQorICB7CisgICAgICByZXR1cm4gbnVsbDsKKyAgfQorICAKK30KKworY2xhc3MgQiB7CisgIHsKKyAgICBTdHJpbmcgcyA9IEEuZmk8Y2FyZXQ+ZWxkOworICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUdldHRlck9yU2V0dGVyL2FmdGVyQ3JlYXRlR2V0dGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUdldHRlck9yU2V0dGVyL2FmdGVyQ3JlYXRlR2V0dGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTYyYjMxYwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlR2V0dGVyT3JTZXR0ZXIvYWZ0ZXJDcmVhdGVHZXR0ZXIuamF2YQpAQCAtMCwwICsxLDggQEAKKy8vICJDcmVhdGUgZ2V0dGVyIGZvciAncyciICJ0cnVlIgorY2xhc3MgQSB7CisgIHByaXZhdGUgU3RyaW5nIHM7CisKKyAgICBTdHJpbmcgZ2V0UygpIHsKKyAgICAgICAgcmV0dXJuIHM7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlR2V0dGVyT3JTZXR0ZXIvYWZ0ZXJDcmVhdGVHZXR0ZXJBbmRTZXR0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlR2V0dGVyT3JTZXR0ZXIvYWZ0ZXJDcmVhdGVHZXR0ZXJBbmRTZXR0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOWIwNzM5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVHZXR0ZXJPclNldHRlci9hZnRlckNyZWF0ZUdldHRlckFuZFNldHRlci5qYXZhCkBAIC0wLDAgKzEsMTIgQEAKKy8vICJDcmVhdGUgZ2V0dGVyIGFuZCBzZXR0ZXIgZm9yICdzJyIgInRydWUiCitjbGFzcyBBIHsKKyAgcHJpdmF0ZSBTdHJpbmcgczsKKworICAgIFN0cmluZyBnZXRTKCkgeworICAgICAgICByZXR1cm4gczsKKyAgICB9CisKKyAgICB2b2lkIHNldFMoU3RyaW5nIHMpIHsKKyAgICAgICAgdGhpcy5zID0gczsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVHZXR0ZXJPclNldHRlci9hZnRlckNyZWF0ZVNldHRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVHZXR0ZXJPclNldHRlci9hZnRlckNyZWF0ZVNldHRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhiZTJjYzYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUdldHRlck9yU2V0dGVyL2FmdGVyQ3JlYXRlU2V0dGVyLmphdmEKQEAgLTAsMCArMSw4IEBACisvLyAiQ3JlYXRlIHNldHRlciBmb3IgJ3MnIiAidHJ1ZSIKK2NsYXNzIEEgeworICBwcml2YXRlIFN0cmluZyBzOworCisgICAgdm9pZCBzZXRTKFN0cmluZyBzKSB7CisgICAgICAgIHRoaXMucyA9IHM7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlR2V0dGVyT3JTZXR0ZXIvYmVmb3JlQ3JlYXRlR2V0dGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUdldHRlck9yU2V0dGVyL2JlZm9yZUNyZWF0ZUdldHRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUxMmU0NDUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUdldHRlck9yU2V0dGVyL2JlZm9yZUNyZWF0ZUdldHRlci5qYXZhCkBAIC0wLDAgKzEsNCBAQAorLy8gIkNyZWF0ZSBnZXR0ZXIgZm9yICdzJyIgInRydWUiCitjbGFzcyBBIHsKKyAgcHJpdmF0ZSBTdHJpbmcgPGNhcmV0PnM7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVHZXR0ZXJPclNldHRlci9iZWZvcmVDcmVhdGVHZXR0ZXJBbmRTZXR0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlR2V0dGVyT3JTZXR0ZXIvYmVmb3JlQ3JlYXRlR2V0dGVyQW5kU2V0dGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzNhYWZhZQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlR2V0dGVyT3JTZXR0ZXIvYmVmb3JlQ3JlYXRlR2V0dGVyQW5kU2V0dGVyLmphdmEKQEAgLTAsMCArMSw0IEBACisvLyAiQ3JlYXRlIGdldHRlciBhbmQgc2V0dGVyIGZvciAncyciICJ0cnVlIgorY2xhc3MgQSB7CisgIHByaXZhdGUgU3RyaW5nIDxjYXJldD5zOworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlR2V0dGVyT3JTZXR0ZXIvYmVmb3JlQ3JlYXRlU2V0dGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUdldHRlck9yU2V0dGVyL2JlZm9yZUNyZWF0ZVNldHRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVlOTRlOGUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUdldHRlck9yU2V0dGVyL2JlZm9yZUNyZWF0ZVNldHRlci5qYXZhCkBAIC0wLDAgKzEsNCBAQAorLy8gIkNyZWF0ZSBzZXR0ZXIgZm9yICdzJyIgInRydWUiCitjbGFzcyBBIHsKKyAgcHJpdmF0ZSBTdHJpbmcgPGNhcmV0PnM7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVHZXR0ZXJPclNldHRlci9iZWZvcmVOb0dldHRlckFuZFNldHRlckZvckZpbmFsLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUdldHRlck9yU2V0dGVyL2JlZm9yZU5vR2V0dGVyQW5kU2V0dGVyRm9yRmluYWwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNDU4ZDNjNgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlR2V0dGVyT3JTZXR0ZXIvYmVmb3JlTm9HZXR0ZXJBbmRTZXR0ZXJGb3JGaW5hbC5qYXZhCkBAIC0wLDAgKzEsNCBAQAorLy8gIkNyZWF0ZSBnZXR0ZXIgYW5kIHNldHRlciBmb3IgJ3MnIiAiZmFsc2UiCitjbGFzcyBBIHsKKyAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgPGNhcmV0PnM7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVHZXR0ZXJPclNldHRlci9iZWZvcmVOb0dldHRlckFuZFNldHRlckZvclN0YXRpY0ZpbmFsLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUdldHRlck9yU2V0dGVyL2JlZm9yZU5vR2V0dGVyQW5kU2V0dGVyRm9yU3RhdGljRmluYWwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MzZkMzU1Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVHZXR0ZXJPclNldHRlci9iZWZvcmVOb0dldHRlckFuZFNldHRlckZvclN0YXRpY0ZpbmFsLmphdmEKQEAgLTAsMCArMSw0IEBACisvLyAiQ3JlYXRlIGdldHRlciBhbmQgc2V0dGVyIGZvciAncyciICJmYWxzZSIKK2NsYXNzIEEgeworICBwcml2YXRlIGZpbmFsIHN0YXRpYyBTdHJpbmcgPGNhcmV0PnM7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVHZXR0ZXJPclNldHRlci9iZWZvcmVOb0dldHRlckZvclN0YXRpY0ZpbmFsLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUdldHRlck9yU2V0dGVyL2JlZm9yZU5vR2V0dGVyRm9yU3RhdGljRmluYWwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMjc5OWNlCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVHZXR0ZXJPclNldHRlci9iZWZvcmVOb0dldHRlckZvclN0YXRpY0ZpbmFsLmphdmEKQEAgLTAsMCArMSw0IEBACisvLyAiQ3JlYXRlIHNldHRlciBmb3IgJ3MnIiAiZmFsc2UiCitjbGFzcyBBIHsKKyAgcHJpdmF0ZSBmaW5hbCBzdGF0aWMgU3RyaW5nIDxjYXJldD5zOworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlR2V0dGVyT3JTZXR0ZXIvYmVmb3JlTm9TZXR0ZXJGb3JGaW5hbC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVHZXR0ZXJPclNldHRlci9iZWZvcmVOb1NldHRlckZvckZpbmFsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTM5NDQ5ZAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlR2V0dGVyT3JTZXR0ZXIvYmVmb3JlTm9TZXR0ZXJGb3JGaW5hbC5qYXZhCkBAIC0wLDAgKzEsNCBAQAorLy8gIkNyZWF0ZSBzZXR0ZXIgZm9yICdzJyIgImZhbHNlIgorY2xhc3MgQSB7CisgIHByaXZhdGUgZmluYWwgU3RyaW5nIDxjYXJldD5zOworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlR2V0dGVyT3JTZXR0ZXIvYmVmb3JlTm9TZXR0ZXJGb3JTdGF0aWNGaW5hbC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVHZXR0ZXJPclNldHRlci9iZWZvcmVOb1NldHRlckZvclN0YXRpY0ZpbmFsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDI3OTljZQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlR2V0dGVyT3JTZXR0ZXIvYmVmb3JlTm9TZXR0ZXJGb3JTdGF0aWNGaW5hbC5qYXZhCkBAIC0wLDAgKzEsNCBAQAorLy8gIkNyZWF0ZSBzZXR0ZXIgZm9yICdzJyIgImZhbHNlIgorY2xhc3MgQSB7CisgIHByaXZhdGUgZmluYWwgc3RhdGljIFN0cmluZyA8Y2FyZXQ+czsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUlubmVyQ2xhc3NGcm9tTmV3L2FmdGVyMS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVJbm5lckNsYXNzRnJvbU5ldy9hZnRlcjEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMGY5Mzc5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVJbm5lckNsYXNzRnJvbU5ldy9hZnRlcjEuamF2YQpAQCAtMCwwICsxLDEzIEBACisvLyAiQ3JlYXRlIElubmVyIENsYXNzICdNeUNvbGxlY3Rpb24nIiAidHJ1ZSIKK2ltcG9ydCBqYXZhLnV0aWwuKjsKKworcHVibGljIGNsYXNzIFRlc3QgeworICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKCkgeworICAgICAgICBDb2xsZWN0aW9uIGMgPSBuZXcgTXlDb2xsZWN0aW9uKDEsICJ0ZXN0Iik7CisgICAgfQorCisgICAgcHJpdmF0ZSBzdGF0aWMgY2xhc3MgTXlDb2xsZWN0aW9uIGltcGxlbWVudHMgQ29sbGVjdGlvbiB7CisgICAgICAgIHB1YmxpYyBNeUNvbGxlY3Rpb24oaW50IGksIFN0cmluZyB0ZXN0KSB7PGNhcmV0PgorICAgICAgICB9CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlSW5uZXJDbGFzc0Zyb21OZXcvYWZ0ZXIyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUlubmVyQ2xhc3NGcm9tTmV3L2FmdGVyMi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQxNDcxNzIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUlubmVyQ2xhc3NGcm9tTmV3L2FmdGVyMi5qYXZhCkBAIC0wLDAgKzEsMTMgQEAKKy8vICJDcmVhdGUgSW5uZXIgQ2xhc3MgJ015QXJyYXlMaXN0JyIgInRydWUiCitpbXBvcnQgamF2YS51dGlsLio7CisKK3B1YmxpYyBjbGFzcyBUZXN0IHsKKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbigpIHsKKyAgICAgICAgQXJyYXlMaXN0IGxpc3QgPSBuZXcgTXlBcnJheUxpc3QoMSwgInRlc3QiKTsKKyAgICB9CisKKyAgICBwcml2YXRlIHN0YXRpYyBjbGFzcyBNeUFycmF5TGlzdCBleHRlbmRzIEFycmF5TGlzdCB7CisgICAgICAgIHB1YmxpYyBNeUFycmF5TGlzdChpbnQgaSwgU3RyaW5nIHRlc3QpIHs8Y2FyZXQ+CisgICAgICAgIH0KKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVJbm5lckNsYXNzRnJvbU5ldy9hZnRlcjMuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlSW5uZXJDbGFzc0Zyb21OZXcvYWZ0ZXIzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTg3ZGYzOAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlSW5uZXJDbGFzc0Zyb21OZXcvYWZ0ZXIzLmphdmEKQEAgLTAsMCArMSwxMiBAQAorLy8gIkNyZWF0ZSBJbm5lciBDbGFzcyAnTXlJbnRlZ2VyJyIgInRydWUiCitwdWJsaWMgY2xhc3MgVGVzdCB7CisgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oKSB7CisgICAgICAgIGludCB4eHggPSAzOworICAgICAgICBJbnRlZ2VyIGkgPSBuZXcgTXlJbnRlZ2VyKHh4eCk7CisgICAgfQorCisgICAgcHJpdmF0ZSBzdGF0aWMgY2xhc3MgTXlJbnRlZ2VyIHsKKyAgICAgICAgcHVibGljIE15SW50ZWdlcihpbnQgeHh4KSB7PGNhcmV0PgorICAgICAgICB9CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlSW5uZXJDbGFzc0Zyb21OZXcvYWZ0ZXI2LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUlubmVyQ2xhc3NGcm9tTmV3L2FmdGVyNi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlkMzI1OTcKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUlubmVyQ2xhc3NGcm9tTmV3L2FmdGVyNi5qYXZhCkBAIC0wLDAgKzEsOSBAQAorLy8gIkNyZWF0ZSBJbm5lciBDbGFzcyAnTXlDb2xsZWN0aW9uJyIgInRydWUiCitwdWJsaWMgY2xhc3MgVGVzdCB7CisgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oKSB7CisgICAgICAgIENvbGxlY3Rpb25bXSBjYyA9IG5ldyBNeUNvbGxlY3Rpb25bMTBdOworICAgIH0KKworICAgIHByaXZhdGUgc3RhdGljIGNsYXNzIE15Q29sbGVjdGlvbiB7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlSW5uZXJDbGFzc0Zyb21OZXcvYWZ0ZXI4LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUlubmVyQ2xhc3NGcm9tTmV3L2FmdGVyOC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVkYzVkMjIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUlubmVyQ2xhc3NGcm9tTmV3L2FmdGVyOC5qYXZhCkBAIC0wLDAgKzEsMTIgQEAKKy8vICJDcmVhdGUgSW5uZXIgQ2xhc3MgJ015VGFibGVNb2RlbCciICJ0cnVlIgoraW1wb3J0IGphdmF4LnN3aW5nLio7CitpbXBvcnQgamF2YXguc3dpbmcudGFibGUuVGFibGVNb2RlbDsKKworcHVibGljIGNsYXNzIFRlc3QgeworICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKCkgeworICAgICAgICBKVGFibGUgdGFibGUgPSBuZXcgSlRhYmxlKG5ldyBNeVRhYmxlTW9kZWwoKSk7CisgICAgfQorCisgICAgcHJpdmF0ZSBzdGF0aWMgY2xhc3MgTXlUYWJsZU1vZGVsIGltcGxlbWVudHMgVGFibGVNb2RlbCB7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlSW5uZXJDbGFzc0Zyb21OZXcvYWZ0ZXJBbm9ueW1vdXMuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlSW5uZXJDbGFzc0Zyb21OZXcvYWZ0ZXJBbm9ueW1vdXMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hODBkMmIzCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVJbm5lckNsYXNzRnJvbU5ldy9hZnRlckFub255bW91cy5qYXZhCkBAIC0wLDAgKzEsMTQgQEAKKy8vICJDcmVhdGUgSW5uZXIgQ2xhc3MgJ015Q29sbGVjdGlvbiciICJ0cnVlIgoraW1wb3J0IGphdmEudXRpbC4qOworCitwdWJsaWMgY2xhc3MgVGVzdCB7CisgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oKSB7CisgICAgICAgIENvbGxlY3Rpb24gYyA9IG5ldyBNeUNvbGxlY3Rpb24oMSwgInRlc3QiKSB7CisgICAgICAgIH07CisgICAgfQorCisgICAgcHJpdmF0ZSBzdGF0aWMgY2xhc3MgTXlDb2xsZWN0aW9uIGltcGxlbWVudHMgQ29sbGVjdGlvbiB7CisgICAgICAgIHB1YmxpYyBNeUNvbGxlY3Rpb24oaW50IGksIFN0cmluZyB0ZXN0KSB7PGNhcmV0PgorICAgICAgICB9CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlSW5uZXJDbGFzc0Zyb21OZXcvYWZ0ZXJHZW5lcmljcy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVJbm5lckNsYXNzRnJvbU5ldy9hZnRlckdlbmVyaWNzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDQ2MWY4OQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlSW5uZXJDbGFzc0Zyb21OZXcvYWZ0ZXJHZW5lcmljcy5qYXZhCkBAIC0wLDAgKzEsOSBAQAorLy8gIkNyZWF0ZSBJbm5lciBDbGFzcyAnR2VuZXJpYyciICJ0cnVlIgorY2xhc3MgVGVzdCB7CisgIHZvaWQgZm9vICgpIHsKKyAgICBuZXcgR2VuZXJpYzxTdHJpbmc+ICgpOworICB9CisKKyAgICBwcml2YXRlIGNsYXNzIEdlbmVyaWM8VD4geworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUlubmVyQ2xhc3NGcm9tTmV3L2FmdGVySW5TdXBlck5vbkNvbnN0cnVjdG9yLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUlubmVyQ2xhc3NGcm9tTmV3L2FmdGVySW5TdXBlck5vbkNvbnN0cnVjdG9yLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjhjZjIzMQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlSW5uZXJDbGFzc0Zyb21OZXcvYWZ0ZXJJblN1cGVyTm9uQ29uc3RydWN0b3IuamF2YQpAQCAtMCwwICsxLDEyIEBACisvLyAiQ3JlYXRlIElubmVyIENsYXNzICdHZW5lcmljJyIgInRydWUiCitjbGFzcyBCYXNlIHsKKyAgdm9pZCBmb28oKXt9Cit9CitjbGFzcyBUZXN0IGV4dGVuZHMgQmFzZSB7CisgIFRlc3QoKSB7CisgICAgc3VwZXIuZm9vKG5ldyBHZW5lcmljPFN0cmluZz4gKCkpOworICB9CisKKyAgICBwcml2YXRlIGNsYXNzIEdlbmVyaWM8VD4geworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUlubmVyQ2xhc3NGcm9tTmV3L2FmdGVySW5UaGlzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUlubmVyQ2xhc3NGcm9tTmV3L2FmdGVySW5UaGlzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODAxZTlmNgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlSW5uZXJDbGFzc0Zyb21OZXcvYWZ0ZXJJblRoaXMuamF2YQpAQCAtMCwwICsxLDExIEBACisvLyAiQ3JlYXRlIElubmVyIENsYXNzICdHZW5lcmljJyIgInRydWUiCitjbGFzcyBUZXN0IHsKKyAgVGVzdCgpIHsKKyAgICB0aGlzIChuZXcgR2VuZXJpYzxTdHJpbmc+ICgpKTsKKyAgfQorCisgIFRlc3QoU3RyaW5nIHMpe30KKworICAgIHByaXZhdGUgc3RhdGljIGNsYXNzIEdlbmVyaWM8VD4geworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUlubmVyQ2xhc3NGcm9tTmV3L2JlZm9yZTEuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlSW5uZXJDbGFzc0Zyb21OZXcvYmVmb3JlMS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM2NjRjYjkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUlubmVyQ2xhc3NGcm9tTmV3L2JlZm9yZTEuamF2YQpAQCAtMCwwICsxLDggQEAKKy8vICJDcmVhdGUgSW5uZXIgQ2xhc3MgJ015Q29sbGVjdGlvbiciICJ0cnVlIgoraW1wb3J0IGphdmEudXRpbC4qOworCitwdWJsaWMgY2xhc3MgVGVzdCB7CisgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oKSB7CisgICAgICAgIENvbGxlY3Rpb24gYyA9IG5ldyA8Y2FyZXQ+TXlDb2xsZWN0aW9uKDEsICJ0ZXN0Iik7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlSW5uZXJDbGFzc0Zyb21OZXcvYmVmb3JlMi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVJbm5lckNsYXNzRnJvbU5ldy9iZWZvcmUyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzc1Y2JmZQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlSW5uZXJDbGFzc0Zyb21OZXcvYmVmb3JlMi5qYXZhCkBAIC0wLDAgKzEsOCBAQAorLy8gIkNyZWF0ZSBJbm5lciBDbGFzcyAnTXlBcnJheUxpc3QnIiAidHJ1ZSIKK2ltcG9ydCBqYXZhLnV0aWwuKjsKKworcHVibGljIGNsYXNzIFRlc3QgeworICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKCkgeworICAgICAgICBBcnJheUxpc3QgbGlzdCA9IG5ldyA8Y2FyZXQ+TXlBcnJheUxpc3QoMSwgInRlc3QiKTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVJbm5lckNsYXNzRnJvbU5ldy9iZWZvcmUzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUlubmVyQ2xhc3NGcm9tTmV3L2JlZm9yZTMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYmM2NGI4Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVJbm5lckNsYXNzRnJvbU5ldy9iZWZvcmUzLmphdmEKQEAgLTAsMCArMSw3IEBACisvLyAiQ3JlYXRlIElubmVyIENsYXNzICdNeUludGVnZXInIiAidHJ1ZSIKK3B1YmxpYyBjbGFzcyBUZXN0IHsKKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbigpIHsKKyAgICAgICAgaW50IHh4eCA9IDM7CisgICAgICAgIEludGVnZXIgaSA9IG5ldyA8Y2FyZXQ+TXlJbnRlZ2VyKHh4eCk7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlSW5uZXJDbGFzc0Zyb21OZXcvYmVmb3JlNC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVJbm5lckNsYXNzRnJvbU5ldy9iZWZvcmU0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTJjNjMyYgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlSW5uZXJDbGFzc0Zyb21OZXcvYmVmb3JlNC5qYXZhCkBAIC0wLDAgKzEsOCBAQAorLy8gIkNyZWF0ZSBJbm5lciBDbGFzcyAnSW5uZXInIiAiZmFsc2UiCitwdWJsaWMgY2xhc3MgVGVzdCB7CisgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oKSB7CisgICAgICAgIG5ldyBUZTxjYXJldD5zdC5Jbm5lcigpOworICAgIH0KKyAgICAKKyAgICBwdWJsaWMgc3RhdGljIGNsYXNzIElubmVyIHt9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVJbm5lckNsYXNzRnJvbU5ldy9iZWZvcmU1LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUlubmVyQ2xhc3NGcm9tTmV3L2JlZm9yZTUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZTMxM2ZiCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVJbm5lckNsYXNzRnJvbU5ldy9iZWZvcmU1LmphdmEKQEAgLTAsMCArMSw4IEBACisvLyAiQ3JlYXRlIElubmVyIENsYXNzICdJbm5lciciICJmYWxzZSIKK3B1YmxpYyBjbGFzcyBUZXN0IHsKKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbigpIHsKKyAgICAgICAgbmV3IElubmVyPGNhcmV0PigpOworICAgIH0KKyAgICAKKyAgICBwdWJsaWMgc3RhdGljIGNsYXNzIElubmVyIHt9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVJbm5lckNsYXNzRnJvbU5ldy9iZWZvcmU2LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUlubmVyQ2xhc3NGcm9tTmV3L2JlZm9yZTYuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NTA5OWU4Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVJbm5lckNsYXNzRnJvbU5ldy9iZWZvcmU2LmphdmEKQEAgLTAsMCArMSw2IEBACisvLyAiQ3JlYXRlIElubmVyIENsYXNzICdNeUNvbGxlY3Rpb24nIiAidHJ1ZSIKK3B1YmxpYyBjbGFzcyBUZXN0IHsKKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbigpIHsKKyAgICAgICAgQ29sbGVjdGlvbltdIGNjID0gbmV3IDxjYXJldD5NeUNvbGxlY3Rpb25bMTBdOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUlubmVyQ2xhc3NGcm9tTmV3L2JlZm9yZTcuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlSW5uZXJDbGFzc0Zyb21OZXcvYmVmb3JlNy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU0ZWQwN2IKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUlubmVyQ2xhc3NGcm9tTmV3L2JlZm9yZTcuamF2YQpAQCAtMCwwICsxLDggQEAKKy8vICJDcmVhdGUgSW5uZXIgQ2xhc3MgJ0lubmVyJyIgImZhbHNlIgoraW1wb3J0IGphdmEudXRpbC4qOworCitwdWJsaWMgY2xhc3MgVGVzdCB7CisgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oKSB7CisgICAgICAgIENvbGxlY3Rpb24gYyA9IG5ldyBUZXN0Lk15PGNhcmV0PkNvbGxlY3Rpb24oMSk7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlSW5uZXJDbGFzc0Zyb21OZXcvYmVmb3JlOC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVJbm5lckNsYXNzRnJvbU5ldy9iZWZvcmU4LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmY4MDEyOAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlSW5uZXJDbGFzc0Zyb21OZXcvYmVmb3JlOC5qYXZhCkBAIC0wLDAgKzEsOCBAQAorLy8gIkNyZWF0ZSBJbm5lciBDbGFzcyAnTXlUYWJsZU1vZGVsJyIgInRydWUiCitpbXBvcnQgamF2YXguc3dpbmcuKjsKKworcHVibGljIGNsYXNzIFRlc3QgeworICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKCkgeworICAgICAgICBKVGFibGUgdGFibGUgPSBuZXcgSlRhYmxlKG5ldyBNeVRhYmxlPGNhcmV0Pk1vZGVsKCkpOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUlubmVyQ2xhc3NGcm9tTmV3L2JlZm9yZUFub255bW91cy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVJbm5lckNsYXNzRnJvbU5ldy9iZWZvcmVBbm9ueW1vdXMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YjdjOTk3Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVJbm5lckNsYXNzRnJvbU5ldy9iZWZvcmVBbm9ueW1vdXMuamF2YQpAQCAtMCwwICsxLDkgQEAKKy8vICJDcmVhdGUgSW5uZXIgQ2xhc3MgJ015Q29sbGVjdGlvbiciICJ0cnVlIgoraW1wb3J0IGphdmEudXRpbC4qOworCitwdWJsaWMgY2xhc3MgVGVzdCB7CisgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oKSB7CisgICAgICAgIENvbGxlY3Rpb24gYyA9IG5ldyA8Y2FyZXQ+TXlDb2xsZWN0aW9uKDEsICJ0ZXN0IikgeworICAgICAgICB9OworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUlubmVyQ2xhc3NGcm9tTmV3L2JlZm9yZUdlbmVyaWNzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUlubmVyQ2xhc3NGcm9tTmV3L2JlZm9yZUdlbmVyaWNzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWZhNTg3MwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlSW5uZXJDbGFzc0Zyb21OZXcvYmVmb3JlR2VuZXJpY3MuamF2YQpAQCAtMCwwICsxLDYgQEAKKy8vICJDcmVhdGUgSW5uZXIgQ2xhc3MgJ0dlbmVyaWMnIiAidHJ1ZSIKK2NsYXNzIFRlc3QgeworICB2b2lkIGZvbyAoKSB7CisgICAgbmV3IDxjYXJldD5HZW5lcmljPFN0cmluZz4gKCk7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUlubmVyQ2xhc3NGcm9tTmV3L2JlZm9yZUluU3VwZXJOb25Db25zdHJ1Y3Rvci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVJbm5lckNsYXNzRnJvbU5ldy9iZWZvcmVJblN1cGVyTm9uQ29uc3RydWN0b3IuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNGE5ZmYzCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVJbm5lckNsYXNzRnJvbU5ldy9iZWZvcmVJblN1cGVyTm9uQ29uc3RydWN0b3IuamF2YQpAQCAtMCwwICsxLDkgQEAKKy8vICJDcmVhdGUgSW5uZXIgQ2xhc3MgJ0dlbmVyaWMnIiAidHJ1ZSIKK2NsYXNzIEJhc2UgeworICB2b2lkIGZvbygpe30KK30KK2NsYXNzIFRlc3QgZXh0ZW5kcyBCYXNlIHsKKyAgVGVzdCgpIHsKKyAgICBzdXBlci5mb28obmV3IDxjYXJldD5HZW5lcmljPFN0cmluZz4gKCkpOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVJbm5lckNsYXNzRnJvbU5ldy9iZWZvcmVJblRoaXMuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlSW5uZXJDbGFzc0Zyb21OZXcvYmVmb3JlSW5UaGlzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODU5MTUwYwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlSW5uZXJDbGFzc0Zyb21OZXcvYmVmb3JlSW5UaGlzLmphdmEKQEAgLTAsMCArMSw4IEBACisvLyAiQ3JlYXRlIElubmVyIENsYXNzICdHZW5lcmljJyIgInRydWUiCitjbGFzcyBUZXN0IHsKKyAgVGVzdCgpIHsKKyAgICB0aGlzIChuZXcgPGNhcmV0PkdlbmVyaWM8U3RyaW5nPiAoKSk7CisgIH0KKworICBUZXN0KFN0cmluZyBzKXt9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVJbm5lckNsYXNzRnJvbVVzYWdlL2FmdGVyMS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVJbm5lckNsYXNzRnJvbVVzYWdlL2FmdGVyMS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk5NzE1MWEyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVJbm5lckNsYXNzRnJvbVVzYWdlL2FmdGVyMS5qYXZhCkBAIC0wLDAgKzEsOSBAQAorLy8gIkNyZWF0ZSBJbm5lciBDbGFzcyAnQWJjJyIgInRydWUiCitwdWJsaWMgY2xhc3MgVGVzdCB7CisgICAgcHVibGljIGZvbyhpbnQgcHBwKSB7CisgICAgICAgIDxjYXJldD5BYmMuZm9vKCk7CisgICAgfQorCisgICAgcHJpdmF0ZSBjbGFzcyBBYmMgeworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUlubmVyQ2xhc3NGcm9tVXNhZ2UvYWZ0ZXJDYXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUlubmVyQ2xhc3NGcm9tVXNhZ2UvYWZ0ZXJDYXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGFiMzg1ZgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlSW5uZXJDbGFzc0Zyb21Vc2FnZS9hZnRlckNhc3QuamF2YQpAQCAtMCwwICsxLDExIEBACisvLyAiQ3JlYXRlIElubmVyIENsYXNzICdDbGFzc0InIiAidHJ1ZSIKK3B1YmxpYyBjbGFzcyBDbGFzc0EKK3sKKyAgICBwdWJsaWMgdm9pZCBtQShPYmplY3QgYXJnKQorICAgIHsKKyAgICAgICAgKCg8Y2FyZXQ+Q2xhc3NCKSBhcmcpLmZvbygpOworICAgIH0KKworICAgIHByaXZhdGUgY2xhc3MgQ2xhc3NCIHsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUlubmVyQ2xhc3NGcm9tVXNhZ2UvYWZ0ZXJDbGFzc09iamVjdEFjY2VzczEuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlSW5uZXJDbGFzc0Zyb21Vc2FnZS9hZnRlckNsYXNzT2JqZWN0QWNjZXNzMS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjljYWQ2MDEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUlubmVyQ2xhc3NGcm9tVXNhZ2UvYWZ0ZXJDbGFzc09iamVjdEFjY2VzczEuamF2YQpAQCAtMCwwICsxLDEwIEBACisvLyAiQ3JlYXRlIElubmVyIENsYXNzICdGb28nIiAidHJ1ZSIKK3B1YmxpYyBjbGFzcyBUZXN0IHsKKyAgdm9pZCBmb28oQ2xhc3M8TnVtYmVyPiBuKXt9CisgIHZvaWQgYmFyKCkgeworICAgIGZvbyhGbzxjYXJldD5vLmNsYXNzKTsKKyAgfQorCisgICAgcHJpdmF0ZSBjbGFzcyBGb28gZXh0ZW5kcyBOdW1iZXIgeworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUlubmVyQ2xhc3NGcm9tVXNhZ2UvYWZ0ZXJDbGFzc09iamVjdEFjY2VzczIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlSW5uZXJDbGFzc0Zyb21Vc2FnZS9hZnRlckNsYXNzT2JqZWN0QWNjZXNzMi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRjMzFiMjYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUlubmVyQ2xhc3NGcm9tVXNhZ2UvYWZ0ZXJDbGFzc09iamVjdEFjY2VzczIuamF2YQpAQCAtMCwwICsxLDEwIEBACisvLyAiQ3JlYXRlIElubmVyIENsYXNzICdGb28nIiAidHJ1ZSIKK3B1YmxpYyBjbGFzcyBUZXN0IHsKKyAgdm9pZCBmb28oQ2xhc3M8PyBleHRlbmRzIE51bWJlcj4gbil7fQorICB2b2lkIGJhcigpIHsKKyAgICBmb28oRm88Y2FyZXQ+by5jbGFzcyk7CisgIH0KKworICAgIHByaXZhdGUgY2xhc3MgRm9vIGV4dGVuZHMgTnVtYmVyIHsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVJbm5lckNsYXNzRnJvbVVzYWdlL2FmdGVyQ2xhc3NPYmplY3RBY2Nlc3MzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUlubmVyQ2xhc3NGcm9tVXNhZ2UvYWZ0ZXJDbGFzc09iamVjdEFjY2VzczMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNTc3N2QwCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVJbm5lckNsYXNzRnJvbVVzYWdlL2FmdGVyQ2xhc3NPYmplY3RBY2Nlc3MzLmphdmEKQEAgLTAsMCArMSwxMCBAQAorLy8gIkNyZWF0ZSBJbm5lciBDbGFzcyAnRm9vJyIgInRydWUiCitwdWJsaWMgY2xhc3MgVGVzdCB7CisgIHZvaWQgZm9vKENsYXNzPD8gc3VwZXIgTnVtYmVyPiBuKXt9CisgIHZvaWQgYmFyKCkgeworICAgIGZvbyhGbzxjYXJldD5vLmNsYXNzKTsKKyAgfQorCisgICAgcHJpdmF0ZSBjbGFzcyBGb28geworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUlubmVyQ2xhc3NGcm9tVXNhZ2UvYWZ0ZXJDbGFzc09iamVjdEFjY2VzczQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlSW5uZXJDbGFzc0Zyb21Vc2FnZS9hZnRlckNsYXNzT2JqZWN0QWNjZXNzNC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ2MWExZmIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUlubmVyQ2xhc3NGcm9tVXNhZ2UvYWZ0ZXJDbGFzc09iamVjdEFjY2VzczQuamF2YQpAQCAtMCwwICsxLDEwIEBACisvLyAiQ3JlYXRlIElubmVyIENsYXNzICdGb28nIiAidHJ1ZSIKK3B1YmxpYyBjbGFzcyBUZXN0IHsKKyAgdm9pZCBmb28oQ2xhc3M8PyBleHRlbmRzIE51bWJlcj4gbil7fQorICB2b2lkIGJhcigpIHsKKyAgICBmb28oRm88Y2FyZXQ+byk7CisgIH0KKworICAgIHByaXZhdGUgY2xhc3MgRm9vIHsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVJbm5lckNsYXNzRnJvbVVzYWdlL2FmdGVyRmllbGRUeXBlLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUlubmVyQ2xhc3NGcm9tVXNhZ2UvYWZ0ZXJGaWVsZFR5cGUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MDk5MzdmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVJbm5lckNsYXNzRnJvbVVzYWdlL2FmdGVyRmllbGRUeXBlLmphdmEKQEAgLTAsMCArMSw3IEBACisvLyAiQ3JlYXRlIElubmVyIENsYXNzICdBYmMnIiAidHJ1ZSIKK3B1YmxpYyBjbGFzcyBUZXN0IHsKKyAgICBwcml2YXRlIDxjYXJldD5BYmMgZmxkOworCisgICAgcHJpdmF0ZSBjbGFzcyBBYmMgeworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUlubmVyQ2xhc3NGcm9tVXNhZ2UvYWZ0ZXJJbm5lckluSW50ZXJmYWNlLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUlubmVyQ2xhc3NGcm9tVXNhZ2UvYWZ0ZXJJbm5lckluSW50ZXJmYWNlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWJjNzA5MAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlSW5uZXJDbGFzc0Zyb21Vc2FnZS9hZnRlcklubmVySW5JbnRlcmZhY2UuamF2YQpAQCAtMCwwICsxLDcgQEAKKy8vICJDcmVhdGUgSW5uZXIgQ2xhc3MgJ0ZvbyciICJ0cnVlIgorcHVibGljIGludGVyZmFjZSBUZXN0IHsKKyAgdm9pZCBmb28oRm88Y2FyZXQ+byBmKXt9CisKKyAgICBjbGFzcyBGb28geworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUlubmVyQ2xhc3NGcm9tVXNhZ2UvYWZ0ZXJNZXRob2RUeXBlLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUlubmVyQ2xhc3NGcm9tVXNhZ2UvYWZ0ZXJNZXRob2RUeXBlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzBjMTAwZQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlSW5uZXJDbGFzc0Zyb21Vc2FnZS9hZnRlck1ldGhvZFR5cGUuamF2YQpAQCAtMCwwICsxLDcgQEAKKy8vICJDcmVhdGUgSW5uZXIgQ2xhc3MgJ0FiYyciICJ0cnVlIgorcHVibGljIGNsYXNzIFRlc3QgeworICAgIHByaXZhdGUgPGNhcmV0PkFiYyBmb28oKSB7fQorCisgICAgcHJpdmF0ZSBjbGFzcyBBYmMgeworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUlubmVyQ2xhc3NGcm9tVXNhZ2UvYWZ0ZXJQYXJhbWV0ZXJUeXBlLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUlubmVyQ2xhc3NGcm9tVXNhZ2UvYWZ0ZXJQYXJhbWV0ZXJUeXBlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDBmNmQzZgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlSW5uZXJDbGFzc0Zyb21Vc2FnZS9hZnRlclBhcmFtZXRlclR5cGUuamF2YQpAQCAtMCwwICsxLDcgQEAKKy8vICJDcmVhdGUgSW5uZXIgQ2xhc3MgJ0FiYyciICJ0cnVlIgorcHVibGljIGNsYXNzIFRlc3QgeworICAgIHByaXZhdGUgdm9pZCBmb28oPGNhcmV0PkFiYyBwYXJhbSkge30KKworICAgIHByaXZhdGUgY2xhc3MgQWJjIHsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVJbm5lckNsYXNzRnJvbVVzYWdlL2FmdGVyU3RhdGljTW9kaWZpZXJOZWVkZWQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlSW5uZXJDbGFzc0Zyb21Vc2FnZS9hZnRlclN0YXRpY01vZGlmaWVyTmVlZGVkLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmVmMjg3OQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlSW5uZXJDbGFzc0Zyb21Vc2FnZS9hZnRlclN0YXRpY01vZGlmaWVyTmVlZGVkLmphdmEKQEAgLTAsMCArMSw5IEBACisvLyAiQ3JlYXRlIElubmVyIENsYXNzICdGb28nIiAidHJ1ZSIKK3B1YmxpYyBjbGFzcyBUZXN0IHsKKyAgc3RhdGljIGNsYXNzIEEgZXh0ZW5kcyBGb28geworICAgIAorICB9CisKKyAgICBwcml2YXRlIHN0YXRpYyBjbGFzcyBGb28geworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUlubmVyQ2xhc3NGcm9tVXNhZ2UvYWZ0ZXJUeXBlUGFyYW1ldGVyQ3JlYXRlZC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVJbm5lckNsYXNzRnJvbVVzYWdlL2FmdGVyVHlwZVBhcmFtZXRlckNyZWF0ZWQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YzQ5YmI1Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVJbm5lckNsYXNzRnJvbVVzYWdlL2FmdGVyVHlwZVBhcmFtZXRlckNyZWF0ZWQuamF2YQpAQCAtMCwwICsxLDcgQEAKKy8vICJDcmVhdGUgSW5uZXIgQ2xhc3MgJ0ZvbyciICJ0cnVlIgorcHVibGljIGNsYXNzIFRlc3QgeworICA8Uj4gdm9pZCBmb28oRm88Y2FyZXQ+bzxSLCBTdHJpbmc+IGYpe30KKworICAgIHByaXZhdGUgY2xhc3MgRm9vPFIsIFQ+IHsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVJbm5lckNsYXNzRnJvbVVzYWdlL2JlZm9yZTEuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlSW5uZXJDbGFzc0Zyb21Vc2FnZS9iZWZvcmUxLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDhlYjcxMQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlSW5uZXJDbGFzc0Zyb21Vc2FnZS9iZWZvcmUxLmphdmEKQEAgLTAsMCArMSw2IEBACisvLyAiQ3JlYXRlIElubmVyIENsYXNzICdBYmMnIiAidHJ1ZSIKK3B1YmxpYyBjbGFzcyBUZXN0IHsKKyAgICBwdWJsaWMgZm9vKGludCBwcHApIHsKKyAgICAgICAgPGNhcmV0PkFiYy5mb28oKTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVJbm5lckNsYXNzRnJvbVVzYWdlL2JlZm9yZUNhc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlSW5uZXJDbGFzc0Zyb21Vc2FnZS9iZWZvcmVDYXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjNjMzFmMAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlSW5uZXJDbGFzc0Zyb21Vc2FnZS9iZWZvcmVDYXN0LmphdmEKQEAgLTAsMCArMSw4IEBACisvLyAiQ3JlYXRlIElubmVyIENsYXNzICdDbGFzc0InIiAidHJ1ZSIKK3B1YmxpYyBjbGFzcyBDbGFzc0EKK3sKKyAgICBwdWJsaWMgdm9pZCBtQShPYmplY3QgYXJnKQorICAgIHsKKyAgICAgICAgKCg8Y2FyZXQ+Q2xhc3NCKSBhcmcpLmZvbygpOworICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlSW5uZXJDbGFzc0Zyb21Vc2FnZS9iZWZvcmVDbGFzc09iamVjdEFjY2VzczEuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlSW5uZXJDbGFzc0Zyb21Vc2FnZS9iZWZvcmVDbGFzc09iamVjdEFjY2VzczEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MGM5YmNlCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVJbm5lckNsYXNzRnJvbVVzYWdlL2JlZm9yZUNsYXNzT2JqZWN0QWNjZXNzMS5qYXZhCkBAIC0wLDAgKzEsNyBAQAorLy8gIkNyZWF0ZSBJbm5lciBDbGFzcyAnRm9vJyIgInRydWUiCitwdWJsaWMgY2xhc3MgVGVzdCB7CisgIHZvaWQgZm9vKENsYXNzPE51bWJlcj4gbil7fQorICB2b2lkIGJhcigpIHsKKyAgICBmb28oRm88Y2FyZXQ+by5jbGFzcyk7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUlubmVyQ2xhc3NGcm9tVXNhZ2UvYmVmb3JlQ2xhc3NPYmplY3RBY2Nlc3MyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUlubmVyQ2xhc3NGcm9tVXNhZ2UvYmVmb3JlQ2xhc3NPYmplY3RBY2Nlc3MyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjg1MTcwMAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlSW5uZXJDbGFzc0Zyb21Vc2FnZS9iZWZvcmVDbGFzc09iamVjdEFjY2VzczIuamF2YQpAQCAtMCwwICsxLDcgQEAKKy8vICJDcmVhdGUgSW5uZXIgQ2xhc3MgJ0ZvbyciICJ0cnVlIgorcHVibGljIGNsYXNzIFRlc3QgeworICB2b2lkIGZvbyhDbGFzczw/IGV4dGVuZHMgTnVtYmVyPiBuKXt9CisgIHZvaWQgYmFyKCkgeworICAgIGZvbyhGbzxjYXJldD5vLmNsYXNzKTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlSW5uZXJDbGFzc0Zyb21Vc2FnZS9iZWZvcmVDbGFzc09iamVjdEFjY2VzczMuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlSW5uZXJDbGFzc0Zyb21Vc2FnZS9iZWZvcmVDbGFzc09iamVjdEFjY2VzczMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMmU5M2RhCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVJbm5lckNsYXNzRnJvbVVzYWdlL2JlZm9yZUNsYXNzT2JqZWN0QWNjZXNzMy5qYXZhCkBAIC0wLDAgKzEsNyBAQAorLy8gIkNyZWF0ZSBJbm5lciBDbGFzcyAnRm9vJyIgInRydWUiCitwdWJsaWMgY2xhc3MgVGVzdCB7CisgIHZvaWQgZm9vKENsYXNzPD8gc3VwZXIgTnVtYmVyPiBuKXt9CisgIHZvaWQgYmFyKCkgeworICAgIGZvbyhGbzxjYXJldD5vLmNsYXNzKTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlSW5uZXJDbGFzc0Zyb21Vc2FnZS9iZWZvcmVDbGFzc09iamVjdEFjY2VzczQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlSW5uZXJDbGFzc0Zyb21Vc2FnZS9iZWZvcmVDbGFzc09iamVjdEFjY2VzczQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hN2U5NzFmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVJbm5lckNsYXNzRnJvbVVzYWdlL2JlZm9yZUNsYXNzT2JqZWN0QWNjZXNzNC5qYXZhCkBAIC0wLDAgKzEsNyBAQAorLy8gIkNyZWF0ZSBJbm5lciBDbGFzcyAnRm9vJyIgInRydWUiCitwdWJsaWMgY2xhc3MgVGVzdCB7CisgIHZvaWQgZm9vKENsYXNzPD8gZXh0ZW5kcyBOdW1iZXI+IG4pe30KKyAgdm9pZCBiYXIoKSB7CisgICAgZm9vKEZvPGNhcmV0Pm8pOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVJbm5lckNsYXNzRnJvbVVzYWdlL2JlZm9yZUZpZWxkVHlwZS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVJbm5lckNsYXNzRnJvbVVzYWdlL2JlZm9yZUZpZWxkVHlwZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIzZDM4NGIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUlubmVyQ2xhc3NGcm9tVXNhZ2UvYmVmb3JlRmllbGRUeXBlLmphdmEKQEAgLTAsMCArMSw0IEBACisvLyAiQ3JlYXRlIElubmVyIENsYXNzICdBYmMnIiAidHJ1ZSIKK3B1YmxpYyBjbGFzcyBUZXN0IHsKKyAgICBwcml2YXRlIDxjYXJldD5BYmMgZmxkOworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlSW5uZXJDbGFzc0Zyb21Vc2FnZS9iZWZvcmVJbm5lckluSW50ZXJmYWNlLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUlubmVyQ2xhc3NGcm9tVXNhZ2UvYmVmb3JlSW5uZXJJbkludGVyZmFjZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYyMDk4MmYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUlubmVyQ2xhc3NGcm9tVXNhZ2UvYmVmb3JlSW5uZXJJbkludGVyZmFjZS5qYXZhCkBAIC0wLDAgKzEsNCBAQAorLy8gIkNyZWF0ZSBJbm5lciBDbGFzcyAnRm9vJyIgInRydWUiCitwdWJsaWMgaW50ZXJmYWNlIFRlc3QgeworICB2b2lkIGZvbyhGbzxjYXJldD5vIGYpe30KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUlubmVyQ2xhc3NGcm9tVXNhZ2UvYmVmb3JlTWV0aG9kVHlwZS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVJbm5lckNsYXNzRnJvbVVzYWdlL2JlZm9yZU1ldGhvZFR5cGUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYjhmZWMwCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVJbm5lckNsYXNzRnJvbVVzYWdlL2JlZm9yZU1ldGhvZFR5cGUuamF2YQpAQCAtMCwwICsxLDQgQEAKKy8vICJDcmVhdGUgSW5uZXIgQ2xhc3MgJ0FiYyciICJ0cnVlIgorcHVibGljIGNsYXNzIFRlc3QgeworICAgIHByaXZhdGUgPGNhcmV0PkFiYyBmb28oKSB7fQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlSW5uZXJDbGFzc0Zyb21Vc2FnZS9iZWZvcmVOYTEuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlSW5uZXJDbGFzc0Zyb21Vc2FnZS9iZWZvcmVOYTEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NjJiMzY0Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVJbm5lckNsYXNzRnJvbVVzYWdlL2JlZm9yZU5hMS5qYXZhCkBAIC0wLDAgKzEsNiBAQAorLy8gIkNyZWF0ZSBJbm5lciBDbGFzcyAnYWJjJyIgImZhbHNlIgorcHVibGljIGNsYXNzIFRlc3QgeworICAgIHB1YmxpYyB2b2lkIGZvbyhpbnQgcHBwKSB7CisgICAgICAgIDxjYXJldD5hYmMuZm9vKCk7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlSW5uZXJDbGFzc0Zyb21Vc2FnZS9iZWZvcmVOYTIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlSW5uZXJDbGFzc0Zyb21Vc2FnZS9iZWZvcmVOYTIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YTU1NmYxCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVJbm5lckNsYXNzRnJvbVVzYWdlL2JlZm9yZU5hMi5qYXZhCkBAIC0wLDAgKzEsNiBAQAorLy8gIkNyZWF0ZSBJbm5lciBDbGFzcyAnQWJjJyIgImZhbHNlIgorcHVibGljIGNsYXNzIFRlc3QgeworICAgIHB1YmxpYyB2b2lkIGZvbyhpbnQgcHBwKSB7CisgICAgICAgIGludCBsb2NhbCA9IHBwcCArIDxjYXJldD5BYmM7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlSW5uZXJDbGFzc0Zyb21Vc2FnZS9iZWZvcmVQYXJhbWV0ZXJUeXBlLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUlubmVyQ2xhc3NGcm9tVXNhZ2UvYmVmb3JlUGFyYW1ldGVyVHlwZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE2MTZlODQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUlubmVyQ2xhc3NGcm9tVXNhZ2UvYmVmb3JlUGFyYW1ldGVyVHlwZS5qYXZhCkBAIC0wLDAgKzEsNCBAQAorLy8gIkNyZWF0ZSBJbm5lciBDbGFzcyAnQWJjJyIgInRydWUiCitwdWJsaWMgY2xhc3MgVGVzdCB7CisgICAgcHJpdmF0ZSB2b2lkIGZvbyg8Y2FyZXQ+QWJjIHBhcmFtKSB7fQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlSW5uZXJDbGFzc0Zyb21Vc2FnZS9iZWZvcmVTdGF0aWNNb2RpZmllck5lZWRlZC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVJbm5lckNsYXNzRnJvbVVzYWdlL2JlZm9yZVN0YXRpY01vZGlmaWVyTmVlZGVkLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmNiNjlmNgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlSW5uZXJDbGFzc0Zyb21Vc2FnZS9iZWZvcmVTdGF0aWNNb2RpZmllck5lZWRlZC5qYXZhCkBAIC0wLDAgKzEsNiBAQAorLy8gIkNyZWF0ZSBJbm5lciBDbGFzcyAnRm9vJyIgInRydWUiCitwdWJsaWMgY2xhc3MgVGVzdCB7CisgIHN0YXRpYyBjbGFzcyBBIGV4dGVuZHMgRjxjYXJldD5vbyB7CisgICAgCisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUlubmVyQ2xhc3NGcm9tVXNhZ2UvYmVmb3JlVHlwZVBhcmFtZXRlckNyZWF0ZWQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlSW5uZXJDbGFzc0Zyb21Vc2FnZS9iZWZvcmVUeXBlUGFyYW1ldGVyQ3JlYXRlZC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgwMWZiYWUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUlubmVyQ2xhc3NGcm9tVXNhZ2UvYmVmb3JlVHlwZVBhcmFtZXRlckNyZWF0ZWQuamF2YQpAQCAtMCwwICsxLDQgQEAKKy8vICJDcmVhdGUgSW5uZXIgQ2xhc3MgJ0ZvbyciICJ0cnVlIgorcHVibGljIGNsYXNzIFRlc3QgeworICA8Uj4gdm9pZCBmb28oRm88Y2FyZXQ+bzxSLCBTdHJpbmc+IGYpe30KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUxvY2FsRnJvbVVzYWdlL2FmdGVyMS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVMb2NhbEZyb21Vc2FnZS9hZnRlcjEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MDM2ODRkCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVMb2NhbEZyb21Vc2FnZS9hZnRlcjEuamF2YQpAQCAtMCwwICsxLDExIEBACisvLyAiQ3JlYXRlIExvY2FsIFZhcmlhYmxlICd4JyIgInRydWUiCitjbGFzcyBvdGhlciB7CisgIHB1YmxpYyBpbnQgbWV0aG9kMSgpIHsgcmV0dXJuIDE7fQorICBwdWJsaWMgU3RyaW5nIGZpZWxkMTsKK30KK2NsYXNzIEEgeworICAgIHB1YmxpYyB2b2lkIGZvbygpIHsKKyAgICAgICAgb3RoZXIgeDxjYXJldD47CisgICAgICAgIHgubWV0aG9kMSgpOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUxvY2FsRnJvbVVzYWdlL2FmdGVyMi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVMb2NhbEZyb21Vc2FnZS9hZnRlcjIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZDUwOWFhCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVMb2NhbEZyb21Vc2FnZS9hZnRlcjIuamF2YQpAQCAtMCwwICsxLDExIEBACisvLyAiQ3JlYXRlIExvY2FsIFZhcmlhYmxlICd4JyIgInRydWUiCitjbGFzcyBvdGhlciB7CisgIHB1YmxpYyBpbnQgbWV0aG9kMSgpIHsgcmV0dXJuIDE7fQorICBwdWJsaWMgU3RyaW5nIGZpZWxkMTsKK30KK2NsYXNzIEEgeworICAgIHB1YmxpYyB2b2lkIGZvbygpIHsKKyAgICAgICAgb3RoZXIgeDxjYXJldD47CisgICAgICAgIGludCBpID0geC5maWVsZDE7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlTG9jYWxGcm9tVXNhZ2UvYWZ0ZXIzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUxvY2FsRnJvbVVzYWdlL2FmdGVyMy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIwYmJjZTUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUxvY2FsRnJvbVVzYWdlL2FmdGVyMy5qYXZhCkBAIC0wLDAgKzEsNyBAQAorLy8gIkNyZWF0ZSBMb2NhbCBWYXJpYWJsZSAnYSciICJ0cnVlIgorY2xhc3MgQyB7CisgIHZvaWQgZm9vKCkgeworICAgICAgaW50IGE8Y2FyZXQ+ID0gMTA7CisgICAgICBhKys7CisgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUxvY2FsRnJvbVVzYWdlL2FmdGVySURFQURFVjI0OTQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlTG9jYWxGcm9tVXNhZ2UvYWZ0ZXJJREVBREVWMjQ5NC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBmMzg0OGUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUxvY2FsRnJvbVVzYWdlL2FmdGVySURFQURFVjI0OTQuamF2YQpAQCAtMCwwICsxLDkgQEAKKy8vICJDcmVhdGUgTG9jYWwgVmFyaWFibGUgJ3QnIiAidHJ1ZSIKK2NsYXNzIFRlc3QgeworICAgIHByaXZhdGUgdm9pZCBmKCkgeworICAgICAgICBpbnQgdDxjYXJldD47CisgICAgICAgIGludCBpID0gdDsKKyAgICAgICAgdCA9IDA7CisgICAgfQorCit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVMb2NhbEZyb21Vc2FnZS9hZnRlck1ldGhvZFJlZi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVMb2NhbEZyb21Vc2FnZS9hZnRlck1ldGhvZFJlZi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYwNjNhOTQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUxvY2FsRnJvbVVzYWdlL2FmdGVyTWV0aG9kUmVmLmphdmEKQEAgLTAsMCArMSw4IEBACisvLyAiQ3JlYXRlIExvY2FsIFZhcmlhYmxlICd6ZWl0JyIgInRydWUiCitwdWJsaWMgY2xhc3MgQSB7CisgICAgdm9pZCBmb28oKSB7CisgICAgICAgIE9iamVjdCB6ZWl0PGNhcmV0PiA9IEE6OmZvbzsKKyAgICB9CisKKyAgICBzdGF0aWMgdm9pZCBmb28oKXt9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUxvY2FsRnJvbVVzYWdlL2FmdGVyUHJlc2VydmVDb21tZW50LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUxvY2FsRnJvbVVzYWdlL2FmdGVyUHJlc2VydmVDb21tZW50LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGNlNDkzMgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlTG9jYWxGcm9tVXNhZ2UvYWZ0ZXJQcmVzZXJ2ZUNvbW1lbnQuamF2YQpAQCAtMCwwICsxLDggQEAKKy8vICJDcmVhdGUgTG9jYWwgVmFyaWFibGUgJ3plaXQnIiAidHJ1ZSIKK3B1YmxpYyBjbGFzcyBBIHsKKyAgICB2b2lkIGZvbygpIHsKKyAgICAgICAgU3RyaW5nW10gc3BsaXQgPSBudWxsOworICAgICAgICBTdHJpbmcgemVpdCA9IHNwbGl0WzFdOyAvLyAyMDExLTA0LTEzCisgICAgfQorCit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUxvY2FsRnJvbVVzYWdlL2FmdGVyU2NvcGVzMS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVMb2NhbEZyb21Vc2FnZS9hZnRlclNjb3BlczEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zN2IyZjdmNAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlTG9jYWxGcm9tVXNhZ2UvYWZ0ZXJTY29wZXMxLmphdmEKQEAgLTAsMCArMSwxMCBAQAorLy8gIkNyZWF0ZSBMb2NhbCBWYXJpYWJsZSAnbG9jYWwnIiAidHJ1ZSIKK2NsYXNzIEEgeworICAgIHB1YmxpYyB2b2lkIGZvbygpIHsKKyAgICAgICAgU3RyaW5nIGxvY2FsPGNhcmV0PjsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKGxvY2FsKTsKKyAgICAgICAgeworICAgICAgICAgICAgbG9jYWwgPSAiIjsKKyAgICAgICAgfQorICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUxvY2FsRnJvbVVzYWdlL2FmdGVyVHlwZUFyZ3NGb3JtYXR0ZWQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlTG9jYWxGcm9tVXNhZ2UvYWZ0ZXJUeXBlQXJnc0Zvcm1hdHRlZC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM5ZWJkODUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUxvY2FsRnJvbVVzYWdlL2FmdGVyVHlwZUFyZ3NGb3JtYXR0ZWQuamF2YQpAQCAtMCwwICsxLDEyIEBACisvLyAiQ3JlYXRlIExvY2FsIFZhcmlhYmxlICdmaWVsZCciICJ0cnVlIgoraW1wb3J0IGphdmEudXRpbC4qOworY2xhc3MgQSB7CisgIHZvaWQgZm9vKE1hcDxTdHJpbmcsIFN0cmluZz4gcyl7fQorCisgIHZvaWQgYmFyKCkgeworICAgICAgTWFwPFN0cmluZywgU3RyaW5nPiBmaWVsZDxjYXJldD47CisgICAgICBmb28oZmllbGQpOworICB9CisKK30KKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVMb2NhbEZyb21Vc2FnZS9hZnRlcldpdGhvdXRTZW1pY29sb24uamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlTG9jYWxGcm9tVXNhZ2UvYWZ0ZXJXaXRob3V0U2VtaWNvbG9uLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjZmOGIyYQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlTG9jYWxGcm9tVXNhZ2UvYWZ0ZXJXaXRob3V0U2VtaWNvbG9uLmphdmEKQEAgLTAsMCArMSw4IEBACisvLyAiQ3JlYXRlIExvY2FsIFZhcmlhYmxlICd6ZWl0JyIgInRydWUiCitwdWJsaWMgY2xhc3MgQSB7CisgICAgdm9pZCBmb28oKSB7CisgICAgICAgIFN0cmluZ1tdIHNwbGl0ID0gbnVsbDsKKyAgICAgICAgU3RyaW5nIHplaXQ8Y2FyZXQ+ID0gc3BsaXRbMV07CisgICAgfQorCit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUxvY2FsRnJvbVVzYWdlL2JlZm9yZTEuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlTG9jYWxGcm9tVXNhZ2UvYmVmb3JlMS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJiOGYwMzQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUxvY2FsRnJvbVVzYWdlL2JlZm9yZTEuamF2YQpAQCAtMCwwICsxLDEwIEBACisvLyAiQ3JlYXRlIExvY2FsIFZhcmlhYmxlICd4JyIgInRydWUiCitjbGFzcyBvdGhlciB7CisgIHB1YmxpYyBpbnQgbWV0aG9kMSgpIHsgcmV0dXJuIDE7fQorICBwdWJsaWMgU3RyaW5nIGZpZWxkMTsKK30KK2NsYXNzIEEgeworICAgIHB1YmxpYyB2b2lkIGZvbygpIHsKKyAgICAgICAgPGNhcmV0PngubWV0aG9kMSgpOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUxvY2FsRnJvbVVzYWdlL2JlZm9yZTIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlTG9jYWxGcm9tVXNhZ2UvYmVmb3JlMi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA1NDEzODkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUxvY2FsRnJvbVVzYWdlL2JlZm9yZTIuamF2YQpAQCAtMCwwICsxLDEwIEBACisvLyAiQ3JlYXRlIExvY2FsIFZhcmlhYmxlICd4JyIgInRydWUiCitjbGFzcyBvdGhlciB7CisgIHB1YmxpYyBpbnQgbWV0aG9kMSgpIHsgcmV0dXJuIDE7fQorICBwdWJsaWMgU3RyaW5nIGZpZWxkMTsKK30KK2NsYXNzIEEgeworICAgIHB1YmxpYyB2b2lkIGZvbygpIHsKKyAgICAgICAgaW50IGkgPSA8Y2FyZXQ+eC5maWVsZDE7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlTG9jYWxGcm9tVXNhZ2UvYmVmb3JlMy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVMb2NhbEZyb21Vc2FnZS9iZWZvcmUzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDljYzZhNgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlTG9jYWxGcm9tVXNhZ2UvYmVmb3JlMy5qYXZhCkBAIC0wLDAgKzEsNyBAQAorLy8gIkNyZWF0ZSBMb2NhbCBWYXJpYWJsZSAnYSciICJ0cnVlIgorY2xhc3MgQyB7CisgIHZvaWQgZm9vKCkgeworICAgICAgPGNhcmV0PmEgPSAxMDsKKyAgICAgIGErKzsKKyAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlTG9jYWxGcm9tVXNhZ2UvYmVmb3JlSURFQURFVjI0OTQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlTG9jYWxGcm9tVXNhZ2UvYmVmb3JlSURFQURFVjI0OTQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMzE4MWYzCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVMb2NhbEZyb21Vc2FnZS9iZWZvcmVJREVBREVWMjQ5NC5qYXZhCkBAIC0wLDAgKzEsOCBAQAorLy8gIkNyZWF0ZSBMb2NhbCBWYXJpYWJsZSAndCciICJ0cnVlIgorY2xhc3MgVGVzdCB7CisgICAgcHJpdmF0ZSB2b2lkIGYoKSB7CisgICAgICAgIGludCBpID0gPGNhcmV0PnQ7CisgICAgICAgIHQgPSAwOworICAgIH0KKworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlTG9jYWxGcm9tVXNhZ2UvYmVmb3JlTWV0aG9kUmVmLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUxvY2FsRnJvbVVzYWdlL2JlZm9yZU1ldGhvZFJlZi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZjYWNlODgKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUxvY2FsRnJvbVVzYWdlL2JlZm9yZU1ldGhvZFJlZi5qYXZhCkBAIC0wLDAgKzEsOCBAQAorLy8gIkNyZWF0ZSBMb2NhbCBWYXJpYWJsZSAnemVpdCciICJ0cnVlIgorcHVibGljIGNsYXNzIEEgeworICAgIHZvaWQgZm9vKCkgeworICAgICAgICB6ZTxjYXJldD5pdCA9IEE6OmZvbzsKKyAgICB9CisKKyAgICBzdGF0aWMgdm9pZCBmb28oKXt9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUxvY2FsRnJvbVVzYWdlL2JlZm9yZVByZXNlcnZlQ29tbWVudC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVMb2NhbEZyb21Vc2FnZS9iZWZvcmVQcmVzZXJ2ZUNvbW1lbnQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNDIzM2EyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVMb2NhbEZyb21Vc2FnZS9iZWZvcmVQcmVzZXJ2ZUNvbW1lbnQuamF2YQpAQCAtMCwwICsxLDggQEAKKy8vICJDcmVhdGUgTG9jYWwgVmFyaWFibGUgJ3plaXQnIiAidHJ1ZSIKK3B1YmxpYyBjbGFzcyBBIHsKKyAgICB2b2lkIGZvbygpIHsKKyAgICAgICAgU3RyaW5nW10gc3BsaXQgPSBudWxsOworICAgICAgICB6ZTxjYXJldD5pdCA9IHNwbGl0WzFdOyAvLyAyMDExLTA0LTEzCisgICAgfQorCit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUxvY2FsRnJvbVVzYWdlL2JlZm9yZVNjb3BlczEuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlTG9jYWxGcm9tVXNhZ2UvYmVmb3JlU2NvcGVzMS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI3NzZjMDkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUxvY2FsRnJvbVVzYWdlL2JlZm9yZVNjb3BlczEuamF2YQpAQCAtMCwwICsxLDkgQEAKKy8vICJDcmVhdGUgTG9jYWwgVmFyaWFibGUgJ2xvY2FsJyIgInRydWUiCitjbGFzcyBBIHsKKyAgICBwdWJsaWMgdm9pZCBmb28oKSB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihsb2NhbCk7CisgICAgICAgIHsKKyAgICAgICAgICAgIDxjYXJldD5sb2NhbCA9ICIiOworICAgICAgICB9CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlTG9jYWxGcm9tVXNhZ2UvYmVmb3JlVHlwZUFyZ3NGb3JtYXR0ZWQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlTG9jYWxGcm9tVXNhZ2UvYmVmb3JlVHlwZUFyZ3NGb3JtYXR0ZWQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMDM1NWNkCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVMb2NhbEZyb21Vc2FnZS9iZWZvcmVUeXBlQXJnc0Zvcm1hdHRlZC5qYXZhCkBAIC0wLDAgKzEsMTEgQEAKKy8vICJDcmVhdGUgTG9jYWwgVmFyaWFibGUgJ2ZpZWxkJyIgInRydWUiCitpbXBvcnQgamF2YS51dGlsLio7CitjbGFzcyBBIHsKKyAgdm9pZCBmb28oTWFwPFN0cmluZywgU3RyaW5nPiBzKXt9CisKKyAgdm9pZCBiYXIoKSB7CisgICAgZm9vKGZpZTxjYXJldD5sZCk7CisgIH0KKworfQorCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUxvY2FsRnJvbVVzYWdlL2JlZm9yZVdpdGhvdXRTZW1pY29sb24uamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlTG9jYWxGcm9tVXNhZ2UvYmVmb3JlV2l0aG91dFNlbWljb2xvbi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYwZTI3ZDEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUxvY2FsRnJvbVVzYWdlL2JlZm9yZVdpdGhvdXRTZW1pY29sb24uamF2YQpAQCAtMCwwICsxLDggQEAKKy8vICJDcmVhdGUgTG9jYWwgVmFyaWFibGUgJ3plaXQnIiAidHJ1ZSIKK3B1YmxpYyBjbGFzcyBBIHsKKyAgICB2b2lkIGZvbygpIHsKKyAgICAgICAgU3RyaW5nW10gc3BsaXQgPSBudWxsOworICAgICAgICB6ZTxjYXJldD5pdCA9IHNwbGl0WzFdCisgICAgfQorCit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUxvY2FsVmFyRnJvbUluc3RhbmNlb2YvYWZ0ZXIxLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUxvY2FsVmFyRnJvbUluc3RhbmNlb2YvYWZ0ZXIxLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTI3MGQxNwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlTG9jYWxWYXJGcm9tSW5zdGFuY2VvZi9hZnRlcjEuamF2YQpAQCAtMCwwICsxLDEwIEBACisvLyAiSW5zZXJ0ICcoUnVubmFibGUpdGhpcycgZGVjbGFyYXRpb24iICJ0cnVlIgorY2xhc3MgQyB7CisgIHZvaWQgZigpIHsKKyAgICBpZiAodGhpcyBpbnN0YW5jZW9mIFJ1bm5hYmxlKSB7CisgICAgICAgIFJ1bm5hYmxlIHJ1bm5hYmxlID0gKFJ1bm5hYmxlKSB0aGlzOworICAgICAgICA8Y2FyZXQ+CisgICAgfQorICB9Cit9CisKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlTG9jYWxWYXJGcm9tSW5zdGFuY2VvZi9hZnRlcjIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlTG9jYWxWYXJGcm9tSW5zdGFuY2VvZi9hZnRlcjIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zN2EyYzMzCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVMb2NhbFZhckZyb21JbnN0YW5jZW9mL2FmdGVyMi5qYXZhCkBAIC0wLDAgKzEsMTEgQEAKKy8vICJJbnNlcnQgJyhSdW5uYWJsZSl0aGlzJyBkZWNsYXJhdGlvbiIgInRydWUiCitjbGFzcyBDIHsKKyAgdm9pZCBmKCkgeworICAgICAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIFJ1bm5hYmxlKSkgeworICAgICAgICAgIHJldHVybjsKKyAgICAgIH0KKyAgICAgIFJ1bm5hYmxlIHJ1bm5hYmxlID0gKFJ1bm5hYmxlKSB0aGlzOworICAgICAgPGNhcmV0PgorICB9Cit9CisKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlTG9jYWxWYXJGcm9tSW5zdGFuY2VvZi9hZnRlcjMuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlTG9jYWxWYXJGcm9tSW5zdGFuY2VvZi9hZnRlcjMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NjMxMWE1Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVMb2NhbFZhckZyb21JbnN0YW5jZW9mL2FmdGVyMy5qYXZhCkBAIC0wLDAgKzEsMTEgQEAKKy8vICJJbnNlcnQgJyhSdW5uYWJsZSl0aGlzJyBkZWNsYXJhdGlvbiIgInRydWUiCitjbGFzcyBDIHsKKyAgdm9pZCBmKCkgeworICAgICAgd2hpbGUgKCEodGhpcyBpbnN0YW5jZW9mIFJ1bm5hYmxlKSkgeworICAgICAgICAgIC8vcmV0dXJuOworICAgICAgfQorICAgICAgUnVubmFibGUgcnVubmFibGUgPSAoUnVubmFibGUpIHRoaXM7CisgICAgICA8Y2FyZXQ+CisgIH0KK30KKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVMb2NhbFZhckZyb21JbnN0YW5jZW9mL2FmdGVyNC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVMb2NhbFZhckZyb21JbnN0YW5jZW9mL2FmdGVyNC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRhYzRkYTEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUxvY2FsVmFyRnJvbUluc3RhbmNlb2YvYWZ0ZXI0LmphdmEKQEAgLTAsMCArMSw5IEBACisvLyAiSW5zZXJ0ICcoUnVubmFibGUpdGhpcycgZGVjbGFyYXRpb24iICJ0cnVlIgorY2xhc3MgQyB7CisgIHZvaWQgZigpIHsKKyAgICAgIHdoaWxlICh0aGlzIGluc3RhbmNlb2YgUnVubmFibGUpIHsKKyAgICAgICAgICBSdW5uYWJsZSBydW5uYWJsZSA9IChSdW5uYWJsZSkgdGhpczsKKyAgICAgICAgICA8Y2FyZXQ+CisgICAgICB9CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlTG9jYWxWYXJGcm9tSW5zdGFuY2VvZi9hZnRlcjUuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlTG9jYWxWYXJGcm9tSW5zdGFuY2VvZi9hZnRlcjUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYTgwNjlkCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVMb2NhbFZhckZyb21JbnN0YW5jZW9mL2FmdGVyNS5qYXZhCkBAIC0wLDAgKzEsOSBAQAorLy8gIkluc2VydCAnKFJ1bm5hYmxlKXRoaXMnIGRlY2xhcmF0aW9uIiAidHJ1ZSIKK2NsYXNzIEMgeworICB2b2lkIGYoKSB7CisgICAgICBpZiAodGhpcyBpbnN0YW5jZW9mIFJ1bm5hYmxlKSB7CisgICAgICAgICAgUnVubmFibGUgcnVubmFibGUgPSAoUnVubmFibGUpIHRoaXM7CisgICAgICAgICAgPGNhcmV0PgorICAgICAgfQorICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUxvY2FsVmFyRnJvbUluc3RhbmNlb2YvYWZ0ZXI3LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUxvY2FsVmFyRnJvbUluc3RhbmNlb2YvYWZ0ZXI3LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2ZmMzc4MwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlTG9jYWxWYXJGcm9tSW5zdGFuY2VvZi9hZnRlcjcuamF2YQpAQCAtMCwwICsxLDExIEBACisvLyAiSW5zZXJ0ICcoU3RyaW5nKXMnIGRlY2xhcmF0aW9uIiAidHJ1ZSIKK2NsYXNzIEMgeworICAgIHZvaWQgZigpIHsKKyAgICAgICAgU3RyaW5nIHMgPSAiIjsKKyAgICAgICAgaWYgKHMgaW5zdGFuY2VvZiBTdHJpbmcpIHsKKyAgICAgICAgICAgIFN0cmluZyBzMSA9IChTdHJpbmcpIHM7CisgICAgICAgICAgICA8Y2FyZXQ+CisKKyAgICAgICAgfQorICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlTG9jYWxWYXJGcm9tSW5zdGFuY2VvZi9hZnRlcjguamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlTG9jYWxWYXJGcm9tSW5zdGFuY2VvZi9hZnRlcjguamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jY2IzNmU3Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVMb2NhbFZhckZyb21JbnN0YW5jZW9mL2FmdGVyOC5qYXZhCkBAIC0wLDAgKzEsMTAgQEAKKy8vICJJbnNlcnQgJyhTdHJpbmcpbycgZGVjbGFyYXRpb24iICJ0cnVlIgorY2xhc3MgQyB7CisgICAgdm9pZCBmKE9iamVjdCBvKSB7CisgICAgICAgIGlmIChvIGluc3RhbmNlb2YgU3RyaW5nKSB7CisgICAgICAgICAgICBTdHJpbmcgcyA9IChTdHJpbmcpIG87CisgICAgICAgICAgICA8Y2FyZXQ+CisgICAgICAgICAgICBvID0gIiI7CisgICAgICAgIH0KKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUxvY2FsVmFyRnJvbUluc3RhbmNlb2YvYWZ0ZXJJbnRlcnNlY3Rpb24uamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlTG9jYWxWYXJGcm9tSW5zdGFuY2VvZi9hZnRlckludGVyc2VjdGlvbi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ3ODliMDgKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUxvY2FsVmFyRnJvbUluc3RhbmNlb2YvYWZ0ZXJJbnRlcnNlY3Rpb24uamF2YQpAQCAtMCwwICsxLDEwIEBACisvLyAiSW5zZXJ0ICcoU3RyaW5nKW8nIGRlY2xhcmF0aW9uIiAidHJ1ZSIKK2NsYXNzIEMgeworICAgIHZvaWQgZihPYmplY3QgbywgT2JqZWN0IGYpIHsKKyAgICAgICAgaWYgKG8gaW5zdGFuY2VvZiBTdHJpbmcgJiYgZiA9PSBudWxsKSB7CisgICAgICAgICAgICBTdHJpbmcgcyA9IChTdHJpbmcpIG87CisgICAgICAgICAgICA8Y2FyZXQ+CisKKyAgICAgICAgfQorICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUxvY2FsVmFyRnJvbUluc3RhbmNlb2YvYWZ0ZXJPblJlZi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVMb2NhbFZhckZyb21JbnN0YW5jZW9mL2FmdGVyT25SZWYuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jODA3NjRkCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVMb2NhbFZhckZyb21JbnN0YW5jZW9mL2FmdGVyT25SZWYuamF2YQpAQCAtMCwwICsxLDEwIEBACisvLyAiSW5zZXJ0ICcoUnVubmFibGUpbycgZGVjbGFyYXRpb24iICJ0cnVlIgorY2xhc3MgQyB7CisgIHZvaWQgZihPYmplY3QgbykgeworICAgIGlmIChvIGluc3RhbmNlb2YgUnVubmFibGUpIHsKKyAgICAgICAgUnVubmFibGUgcnVubmFibGUgPSAoUnVubmFibGUpIG87CisgICAgICAgIDxjYXJldD4KKyAgICB9CisgIH0KK30KKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVMb2NhbFZhckZyb21JbnN0YW5jZW9mL2JlZm9yZTEuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlTG9jYWxWYXJGcm9tSW5zdGFuY2VvZi9iZWZvcmUxLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmI4ODliMQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlTG9jYWxWYXJGcm9tSW5zdGFuY2VvZi9iZWZvcmUxLmphdmEKQEAgLTAsMCArMSw3IEBACisvLyAiSW5zZXJ0ICcoUnVubmFibGUpdGhpcycgZGVjbGFyYXRpb24iICJ0cnVlIgorY2xhc3MgQyB7CisgIHZvaWQgZigpIHsKKyAgICBpZiAodGhpcyA8Y2FyZXQ+aW5zdGFuY2VvZiBSdW5uYWJsZSkKKyAgfQorfQorCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUxvY2FsVmFyRnJvbUluc3RhbmNlb2YvYmVmb3JlMi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVMb2NhbFZhckZyb21JbnN0YW5jZW9mL2JlZm9yZTIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOGVmYjJiOAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlTG9jYWxWYXJGcm9tSW5zdGFuY2VvZi9iZWZvcmUyLmphdmEKQEAgLTAsMCArMSw5IEBACisvLyAiSW5zZXJ0ICcoUnVubmFibGUpdGhpcycgZGVjbGFyYXRpb24iICJ0cnVlIgorY2xhc3MgQyB7CisgIHZvaWQgZigpIHsKKyAgICAgIGlmICghKHRoaXMgaW5zdGFuY2VvZiA8Y2FyZXQ+UnVubmFibGUpKSB7CisgICAgICAgICAgcmV0dXJuOworICAgICAgfQorICB9Cit9CisKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlTG9jYWxWYXJGcm9tSW5zdGFuY2VvZi9iZWZvcmUzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUxvY2FsVmFyRnJvbUluc3RhbmNlb2YvYmVmb3JlMy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA3ZDg1YjkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUxvY2FsVmFyRnJvbUluc3RhbmNlb2YvYmVmb3JlMy5qYXZhCkBAIC0wLDAgKzEsOSBAQAorLy8gIkluc2VydCAnKFJ1bm5hYmxlKXRoaXMnIGRlY2xhcmF0aW9uIiAidHJ1ZSIKK2NsYXNzIEMgeworICB2b2lkIGYoKSB7CisgICAgICB3aGlsZSAoISg8Y2FyZXQ+dGhpcyBpbnN0YW5jZW9mIFJ1bm5hYmxlKSkgeworICAgICAgICAgIC8vcmV0dXJuOworICAgICAgfQorICB9Cit9CisKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlTG9jYWxWYXJGcm9tSW5zdGFuY2VvZi9iZWZvcmU0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUxvY2FsVmFyRnJvbUluc3RhbmNlb2YvYmVmb3JlNC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjNjcyOTkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUxvY2FsVmFyRnJvbUluc3RhbmNlb2YvYmVmb3JlNC5qYXZhCkBAIC0wLDAgKzEsNiBAQAorLy8gIkluc2VydCAnKFJ1bm5hYmxlKXRoaXMnIGRlY2xhcmF0aW9uIiAidHJ1ZSIKK2NsYXNzIEMgeworICB2b2lkIGYoKSB7CisgICAgICB3aGlsZSAoPGNhcmV0PnRoaXMgaW5zdGFuY2VvZiBSdW5uYWJsZQorICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUxvY2FsVmFyRnJvbUluc3RhbmNlb2YvYmVmb3JlNS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVMb2NhbFZhckZyb21JbnN0YW5jZW9mL2JlZm9yZTUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZjNhMGZhCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVMb2NhbFZhckZyb21JbnN0YW5jZW9mL2JlZm9yZTUuamF2YQpAQCAtMCwwICsxLDcgQEAKKy8vICJJbnNlcnQgJyhSdW5uYWJsZSl0aGlzJyBkZWNsYXJhdGlvbiIgInRydWUiCitjbGFzcyBDIHsKKyAgdm9pZCBmKCkgeworICAgICAgaWYgKHRoaXMgaW5zdGFuY2VvZiBSdW5uYWJsZSkgeyAgIDxjYXJldD4KKyAgICAgIH0KKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVMb2NhbFZhckZyb21JbnN0YW5jZW9mL2JlZm9yZTYuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlTG9jYWxWYXJGcm9tSW5zdGFuY2VvZi9iZWZvcmU2LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWY2MmNlNAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlTG9jYWxWYXJGcm9tSW5zdGFuY2VvZi9iZWZvcmU2LmphdmEKQEAgLTAsMCArMSw4IEBACisvLyAiSW5zZXJ0ICcoUnVubmFibGUpdGhpcycgZGVjbGFyYXRpb24iICJmYWxzZSIKK2NsYXNzIEMgeworICB2b2lkIGYoKSB7CisgICAgICBpZiAodGhpcyBpbnN0YW5jZW9mIFJ1bm5hYmxlPGNhcmV0PikgeworICAgICAgICBPYmplY3QgbyA9IChSdW5uYWJsZSl0aGlzOworICAgICAgfQorICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUxvY2FsVmFyRnJvbUluc3RhbmNlb2YvYmVmb3JlNy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVMb2NhbFZhckZyb21JbnN0YW5jZW9mL2JlZm9yZTcuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZGQyZDgwCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVMb2NhbFZhckZyb21JbnN0YW5jZW9mL2JlZm9yZTcuamF2YQpAQCAtMCwwICsxLDkgQEAKKy8vICJJbnNlcnQgJyhTdHJpbmcpcycgZGVjbGFyYXRpb24iICJ0cnVlIgorY2xhc3MgQyB7CisgICAgdm9pZCBmKCkgeworICAgICAgICBTdHJpbmcgcyA9ICIiOworICAgICAgICBpZiAocyBpbnN0YW5jZW9mIFN0cmluZykgeworICAgICAgICAgICAgPGNhcmV0PgorICAgICAgICB9CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVMb2NhbFZhckZyb21JbnN0YW5jZW9mL2JlZm9yZTguamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlTG9jYWxWYXJGcm9tSW5zdGFuY2VvZi9iZWZvcmU4LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDA5NDg3YgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlTG9jYWxWYXJGcm9tSW5zdGFuY2VvZi9iZWZvcmU4LmphdmEKQEAgLTAsMCArMSw3IEBACisvLyAiSW5zZXJ0ICcoU3RyaW5nKW8nIGRlY2xhcmF0aW9uIiAidHJ1ZSIKK2NsYXNzIEMgeworICAgIHZvaWQgZihPYmplY3QgbykgeworICAgICAgICBpZiAobyBpbnN0YW5jZW9mIFN0cmluZzxjYXJldD4pCisgICAgICAgIG8gPSAiIjsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUxvY2FsVmFyRnJvbUluc3RhbmNlb2YvYmVmb3JlQ29tcGxleEV4cHJlc3Npb24uamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlTG9jYWxWYXJGcm9tSW5zdGFuY2VvZi9iZWZvcmVDb21wbGV4RXhwcmVzc2lvbi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgwZWQxYWUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUxvY2FsVmFyRnJvbUluc3RhbmNlb2YvYmVmb3JlQ29tcGxleEV4cHJlc3Npb24uamF2YQpAQCAtMCwwICsxLDggQEAKKy8vICJJbnNlcnQgJyhTdHJpbmcpIW8nIGRlY2xhcmF0aW9uIiAiZmFsc2UiCitjbGFzcyBDIHsKKyAgICB2b2lkIGYoT2JqZWN0IG8sIE9iamVjdCBmKSB7CisgICAgICAgIGlmICghbyBpbnN0YW5jZW9mIFN0cmluZykgeworICAgICAgICAgIDxjYXJldD4KKyAgICAgICAgfQorICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUxvY2FsVmFyRnJvbUluc3RhbmNlb2YvYmVmb3JlSW50ZXJzZWN0aW9uLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUxvY2FsVmFyRnJvbUluc3RhbmNlb2YvYmVmb3JlSW50ZXJzZWN0aW9uLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzVlYzhkNgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlTG9jYWxWYXJGcm9tSW5zdGFuY2VvZi9iZWZvcmVJbnRlcnNlY3Rpb24uamF2YQpAQCAtMCwwICsxLDggQEAKKy8vICJJbnNlcnQgJyhTdHJpbmcpbycgZGVjbGFyYXRpb24iICJ0cnVlIgorY2xhc3MgQyB7CisgICAgdm9pZCBmKE9iamVjdCBvLCBPYmplY3QgZikgeworICAgICAgICBpZiAobyBpbnN0YW5jZW9mIFN0cmluZyAmJiBmID09IG51bGwpIHsKKyAgICAgICAgICA8Y2FyZXQ+CisgICAgICAgIH0KKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVMb2NhbFZhckZyb21JbnN0YW5jZW9mL2JlZm9yZUludGVyc2VjdGlvbkFuZFVuaW9uLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUxvY2FsVmFyRnJvbUluc3RhbmNlb2YvYmVmb3JlSW50ZXJzZWN0aW9uQW5kVW5pb24uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZmI3ZDEwCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVMb2NhbFZhckZyb21JbnN0YW5jZW9mL2JlZm9yZUludGVyc2VjdGlvbkFuZFVuaW9uLmphdmEKQEAgLTAsMCArMSw4IEBACisvLyAiSW5zZXJ0ICcoU3RyaW5nKW8nIGRlY2xhcmF0aW9uIiAiZmFsc2UiCitjbGFzcyBDIHsKKyAgICB2b2lkIGYoT2JqZWN0IG8sIE9iamVjdCBmKSB7CisgICAgICAgIGlmIChvIGluc3RhbmNlb2YgU3RyaW5nIHx8IGYgPT0gbnVsbCkgeworICAgICAgICAgIDxjYXJldD4KKyAgICAgICAgfQorICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUxvY2FsVmFyRnJvbUluc3RhbmNlb2YvYmVmb3JlSW50ZXJzZWN0aW9uTXVsdGlwbGUuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlTG9jYWxWYXJGcm9tSW5zdGFuY2VvZi9iZWZvcmVJbnRlcnNlY3Rpb25NdWx0aXBsZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNiNjU3YjYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUxvY2FsVmFyRnJvbUluc3RhbmNlb2YvYmVmb3JlSW50ZXJzZWN0aW9uTXVsdGlwbGUuamF2YQpAQCAtMCwwICsxLDggQEAKKy8vICJJbnNlcnQgJyhTdHJpbmcpbycgZGVjbGFyYXRpb24iICJmYWxzZSIKK2NsYXNzIEMgeworICAgIHZvaWQgZihPYmplY3QgbywgT2JqZWN0IGYpIHsKKyAgICAgICAgaWYgKG8gaW5zdGFuY2VvZiBTdHJpbmcgJiYgZiBpbnN0YW5jZW9mIFN0cmluZykgeworICAgICAgICAgIDxjYXJldD4KKyAgICAgICAgfQorICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUxvY2FsVmFyRnJvbUluc3RhbmNlb2YvYmVmb3JlTmVnYXRpb25PblJlZi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVMb2NhbFZhckZyb21JbnN0YW5jZW9mL2JlZm9yZU5lZ2F0aW9uT25SZWYuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZGQ5ZDU1Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVMb2NhbFZhckZyb21JbnN0YW5jZW9mL2JlZm9yZU5lZ2F0aW9uT25SZWYuamF2YQpAQCAtMCwwICsxLDkgQEAKKy8vICJJbnNlcnQgJyhSdW5uYWJsZSlvJyBkZWNsYXJhdGlvbiIgImZhbHNlIgorY2xhc3MgQyB7CisgIHZvaWQgZihPYmplY3QgbykgeworICAgIGlmICghKG8gaW5zdGFuY2VvZiBSdW5uYWJsZSkpIHsKKyAgICAgIG88Y2FyZXQ+CisgICAgfQorICB9Cit9CisKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlTG9jYWxWYXJGcm9tSW5zdGFuY2VvZi9iZWZvcmVPblJlZi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVMb2NhbFZhckZyb21JbnN0YW5jZW9mL2JlZm9yZU9uUmVmLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDA1Y2M4NgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlTG9jYWxWYXJGcm9tSW5zdGFuY2VvZi9iZWZvcmVPblJlZi5qYXZhCkBAIC0wLDAgKzEsOSBAQAorLy8gIkluc2VydCAnKFJ1bm5hYmxlKW8nIGRlY2xhcmF0aW9uIiAidHJ1ZSIKK2NsYXNzIEMgeworICB2b2lkIGYoT2JqZWN0IG8pIHsKKyAgICBpZiAobyBpbnN0YW5jZW9mIFJ1bm5hYmxlKSB7CisgICAgICBvPGNhcmV0PgorICAgIH0KKyAgfQorfQorCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZU1ldGhvZEZyb21Vc2FnZS9hZnRlcjEuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlTWV0aG9kRnJvbVVzYWdlL2FmdGVyMS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhhOTRlZGEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZU1ldGhvZEZyb21Vc2FnZS9hZnRlcjEuamF2YQpAQCAtMCwwICsxLDEwIEBACisvLyAiQ3JlYXRlIE1ldGhvZCAndGVzdCciICJ0cnVlIgorcHVibGljIGNsYXNzIFRlc3QgeworICAgIHB1YmxpYyBUZXN0KCkgeworICAgICAgICB0ZXN0KCk7CisgICAgfQorCisgICAgcHJpdmF0ZSB2b2lkIHRlc3QoKSB7CisgICAgICAgIDxjYXJldD48c2VsZWN0aW9uPi8vVG8gY2hhbmdlIGJvZHkgb2YgY3JlYXRlZCBtZXRob2RzIHVzZSBGaWxlIHwgU2V0dGluZ3MgfCBGaWxlIFRlbXBsYXRlcy48L3NlbGVjdGlvbj4KKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZU1ldGhvZEZyb21Vc2FnZS9hZnRlcjMuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlTWV0aG9kRnJvbVVzYWdlL2FmdGVyMy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhhOTRlZGEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZU1ldGhvZEZyb21Vc2FnZS9hZnRlcjMuamF2YQpAQCAtMCwwICsxLDEwIEBACisvLyAiQ3JlYXRlIE1ldGhvZCAndGVzdCciICJ0cnVlIgorcHVibGljIGNsYXNzIFRlc3QgeworICAgIHB1YmxpYyBUZXN0KCkgeworICAgICAgICB0ZXN0KCk7CisgICAgfQorCisgICAgcHJpdmF0ZSB2b2lkIHRlc3QoKSB7CisgICAgICAgIDxjYXJldD48c2VsZWN0aW9uPi8vVG8gY2hhbmdlIGJvZHkgb2YgY3JlYXRlZCBtZXRob2RzIHVzZSBGaWxlIHwgU2V0dGluZ3MgfCBGaWxlIFRlbXBsYXRlcy48L3NlbGVjdGlvbj4KKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZU1ldGhvZEZyb21Vc2FnZS9hZnRlcjQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlTWV0aG9kRnJvbVVzYWdlL2FmdGVyNC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhhOTRlZGEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZU1ldGhvZEZyb21Vc2FnZS9hZnRlcjQuamF2YQpAQCAtMCwwICsxLDEwIEBACisvLyAiQ3JlYXRlIE1ldGhvZCAndGVzdCciICJ0cnVlIgorcHVibGljIGNsYXNzIFRlc3QgeworICAgIHB1YmxpYyBUZXN0KCkgeworICAgICAgICB0ZXN0KCk7CisgICAgfQorCisgICAgcHJpdmF0ZSB2b2lkIHRlc3QoKSB7CisgICAgICAgIDxjYXJldD48c2VsZWN0aW9uPi8vVG8gY2hhbmdlIGJvZHkgb2YgY3JlYXRlZCBtZXRob2RzIHVzZSBGaWxlIHwgU2V0dGluZ3MgfCBGaWxlIFRlbXBsYXRlcy48L3NlbGVjdGlvbj4KKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZU1ldGhvZEZyb21Vc2FnZS9hZnRlcjUuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlTWV0aG9kRnJvbVVzYWdlL2FmdGVyNS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE2NjA3MTUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZU1ldGhvZEZyb21Vc2FnZS9hZnRlcjUuamF2YQpAQCAtMCwwICsxLDExIEBACisvLyAiQ3JlYXRlIE1ldGhvZCAndGVzdCciICJ0cnVlIgorcHVibGljIGNsYXNzIFRlc3QgeworICAgIHN0YXRpYyB2b2lkIHRlc3QoaW50IGkpIHt9CisgICAgcHVibGljIFRlc3QoKSB7CisgICAgICAgIHRlc3QoKTsKKyAgICB9CisKKyAgICBwcml2YXRlIHZvaWQgdGVzdCgpIHsKKyAgICAgICAgPGNhcmV0PjxzZWxlY3Rpb24+Ly9UbyBjaGFuZ2UgYm9keSBvZiBjcmVhdGVkIG1ldGhvZHMgdXNlIEZpbGUgfCBTZXR0aW5ncyB8IEZpbGUgVGVtcGxhdGVzLjwvc2VsZWN0aW9uPgorICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlTWV0aG9kRnJvbVVzYWdlL2FmdGVyQXJyYXlUeXBlUGFyYW0uamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlTWV0aG9kRnJvbVVzYWdlL2FmdGVyQXJyYXlUeXBlUGFyYW0uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YTQ4ZjIzCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVNZXRob2RGcm9tVXNhZ2UvYWZ0ZXJBcnJheVR5cGVQYXJhbS5qYXZhCkBAIC0wLDAgKzEsMTEgQEAKKy8vICJDcmVhdGUgTWV0aG9kICd0ZXN0JyIgInRydWUiCitwdWJsaWMgY2xhc3MgVGVzdCB7CisgICAgcHVibGljIFRlc3QoKSB7CisgICAgICAgIGJ5dGVbXSBieXRlcyA9IG5ldyBieXRlWzBdOworICAgICAgICB0ZXN0KGJ5dGVzKTsKKyAgICB9CisKKyAgICBwcml2YXRlIHZvaWQgdGVzdChieXRlW10gYnl0ZXMpIHsKKyAgICAgICAgPHNlbGVjdGlvbj4vL1RvIGNoYW5nZSBib2R5IG9mIGNyZWF0ZWQgbWV0aG9kcyB1c2UgRmlsZSB8IFNldHRpbmdzIHwgRmlsZSBUZW1wbGF0ZXMuPC9zZWxlY3Rpb24+CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVNZXRob2RGcm9tVXNhZ2UvYWZ0ZXJBc3NlcnREZXNjcmlwdGlvbi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVNZXRob2RGcm9tVXNhZ2UvYWZ0ZXJBc3NlcnREZXNjcmlwdGlvbi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM2NjMwZDMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZU1ldGhvZEZyb21Vc2FnZS9hZnRlckFzc2VydERlc2NyaXB0aW9uLmphdmEKQEAgLTAsMCArMSwxMCBAQAorLy8gIkNyZWF0ZSBNZXRob2QgJ2YnIiAidHJ1ZSIKK2NsYXNzIEEgeworICAgIHsKKyAgICAgICAgIGFzc2VydCBmYWxzZTogZigpOworICAgIH0KKworICAgIHByaXZhdGUgU3RyaW5nIGYoKSB7CisgICAgICAgIDxzZWxlY3Rpb24+cmV0dXJuIG51bGw7ICAvL1RvIGNoYW5nZSBib2R5IG9mIGNyZWF0ZWQgbWV0aG9kcyB1c2UgRmlsZSB8IFNldHRpbmdzIHwgRmlsZSBUZW1wbGF0ZXMuPC9zZWxlY3Rpb24+CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVNZXRob2RGcm9tVXNhZ2UvYWZ0ZXJDbGFzc1R5cGVQYXJhbU5vdEF2YWlsYWJsZS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVNZXRob2RGcm9tVXNhZ2UvYWZ0ZXJDbGFzc1R5cGVQYXJhbU5vdEF2YWlsYWJsZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU0MTI5ZTQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZU1ldGhvZEZyb21Vc2FnZS9hZnRlckNsYXNzVHlwZVBhcmFtTm90QXZhaWxhYmxlLmphdmEKQEAgLTAsMCArMSwyNiBAQAorLy8gIkNyZWF0ZSBNZXRob2QgJ21ha2VPcCciICJ0cnVlIgorY2xhc3MgQmFzZTxUPiB7CisgICAgQmFzZShGYWN0b3J5PFQ+IGZhY3RvcnksIE9wZXJhdG9yPFQ+IG9wZXJhdG9yKSB7CisgICAgfQorfQorCitpbnRlcmZhY2UgTWV0YU9wZXJhdG9yPFQ+IHsKK30KKworaW50ZXJmYWNlIE9wZXJhdG9yPFQ+IHsKK30KKworaW50ZXJmYWNlIEZhY3Rvcnk8VD4geworfQorCitjbGFzcyBTdXA8VD4gZXh0ZW5kcyBCYXNlPFQ+IHsKKyAgICBTdXAoTWV0YU9wZXJhdG9yPFQ+IG1vcCkgeworICAgICAgICBzdXBlcihudWxsLCBtYWtlT3AobW9wKSk7CisgICAgfQorCisgICAgcHJpdmF0ZSBzdGF0aWMgPFQ+IE9wZXJhdG9yPFQ+IG1ha2VPcChNZXRhT3BlcmF0b3I8VD4gbW9wKSB7CisgICAgICAgIDxzZWxlY3Rpb24+cmV0dXJuIG51bGw7ICAvL1RvIGNoYW5nZSBib2R5IG9mIGNyZWF0ZWQgbWV0aG9kcyB1c2UgRmlsZSB8IFNldHRpbmdzIHwgRmlsZSBUZW1wbGF0ZXMuPC9zZWxlY3Rpb24+CisgICAgfQorCisKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZU1ldGhvZEZyb21Vc2FnZS9hZnRlckV4aXN0aW5nRmllbGQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlTWV0aG9kRnJvbVVzYWdlL2FmdGVyRXhpc3RpbmdGaWVsZC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY2N2EyODgKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZU1ldGhvZEZyb21Vc2FnZS9hZnRlckV4aXN0aW5nRmllbGQuamF2YQpAQCAtMCwwICsxLDEyIEBACisvLyAiQ3JlYXRlIEdldHRlciIgInRydWUiCitwdWJsaWMgY2xhc3MgVGVzdCB7CisgICAgSW50ZWdlciBmaWVsZDsKKworICAgIHB1YmxpYyBmb28oKSB7CisgICAgICAgIGdldEZpZWxkKCk7CisgICAgfQorCisgICAgcHVibGljIEludGVnZXIgZ2V0RmllbGQoKSB7CisgICAgICAgIHJldHVybiBmaWVsZDsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZU1ldGhvZEZyb21Vc2FnZS9hZnRlckdlbmVyaWNzMS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVNZXRob2RGcm9tVXNhZ2UvYWZ0ZXJHZW5lcmljczEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZDNmNWVkCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVNZXRob2RGcm9tVXNhZ2UvYWZ0ZXJHZW5lcmljczEuamF2YQpAQCAtMCwwICsxLDEwIEBACisvLyAiQ3JlYXRlIE1ldGhvZCAnYmFyJyIgInRydWUiCitwdWJsaWMgY2xhc3MgVGVzdCB7CisgICAgPFQgZXh0ZW5kcyBTdHJpbmc+IHZvaWQgZm9vIChUIHQxLCBUIHQyKSB7CisgICAgICAgIGJhciAodDEsIHQyKTsKKyAgICB9CisKKyAgICBwcml2YXRlIDxUIGV4dGVuZHMgU3RyaW5nPiB2b2lkIGJhcihUIHQxLCBUIHQyKSB7CisgICAgICAgIDxjYXJldD48c2VsZWN0aW9uPi8vVG8gY2hhbmdlIGJvZHkgb2YgY3JlYXRlZCBtZXRob2RzIHVzZSBGaWxlIHwgU2V0dGluZ3MgfCBGaWxlIFRlbXBsYXRlcy48L3NlbGVjdGlvbj4KKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVNZXRob2RGcm9tVXNhZ2UvYWZ0ZXJJREVBMjMyNy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVNZXRob2RGcm9tVXNhZ2UvYWZ0ZXJJREVBMjMyNy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA1MDA5NDEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZU1ldGhvZEZyb21Vc2FnZS9hZnRlcklERUEyMzI3LmphdmEKQEAgLTAsMCArMSwxMCBAQAorLy8gIkNyZWF0ZSBNZXRob2QgJ3Rlc3QnIiAidHJ1ZSIKK3B1YmxpYyBjbGFzcyBUZXN0IHsKKyAgICBwdWJsaWMgVGVzdCgpIHsKKyAgICAgICAgYXNzZXJ0IHRlc3QoKTsKKyAgICB9CisKKyAgICBwcml2YXRlIGJvb2xlYW4gdGVzdCgpIHsKKyAgICAgICAgPGNhcmV0PjxzZWxlY3Rpb24+cmV0dXJuIGZhbHNlOyAgLy9UbyBjaGFuZ2UgYm9keSBvZiBjcmVhdGVkIG1ldGhvZHMgdXNlIEZpbGUgfCBTZXR0aW5ncyB8IEZpbGUgVGVtcGxhdGVzLjwvc2VsZWN0aW9uPgorICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlTWV0aG9kRnJvbVVzYWdlL2FmdGVySURFQURFVjYwNjguamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlTWV0aG9kRnJvbVVzYWdlL2FmdGVySURFQURFVjYwNjguamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MTJmNGY3Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVNZXRob2RGcm9tVXNhZ2UvYWZ0ZXJJREVBREVWNjA2OC5qYXZhCkBAIC0wLDAgKzEsMTMgQEAKKy8vICJDcmVhdGUgTWV0aG9kICd0b011bHRpJyIgInRydWUiCitpbXBvcnQgamF2YS51dGlsLk1hcDsKKworY2xhc3MgQnJva2VuQ3JlYXRlTWV0aG9kIHsKKworICAgIHB1YmxpYyB2b2lkIGZvbyhNYXA8U3RyaW5nLCBTdHJpbmc+IGJhcikgeworICAgICAgICBNYXA8U3RyaW5nLCBTdHJpbmdbXT4gbXVsdGlCYXIgPSB0b011bHRpKGJhcik7CisgICAgfQorCisgICAgcHJpdmF0ZSBNYXA8U3RyaW5nLCBTdHJpbmdbXT4gdG9NdWx0aShNYXA8U3RyaW5nLCBTdHJpbmc+IGJhcikgeworICAgICAgICA8c2VsZWN0aW9uPnJldHVybiBudWxsOyAgLy9UbyBjaGFuZ2UgYm9keSBvZiBjcmVhdGVkIG1ldGhvZHMgdXNlIEZpbGUgfCBTZXR0aW5ncyB8IEZpbGUgVGVtcGxhdGVzLjwvc2VsZWN0aW9uPgorICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlTWV0aG9kRnJvbVVzYWdlL2FmdGVySW50ZXJmYWNlLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZU1ldGhvZEZyb21Vc2FnZS9hZnRlckludGVyZmFjZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI4NWIxODkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZU1ldGhvZEZyb21Vc2FnZS9hZnRlckludGVyZmFjZS5qYXZhCkBAIC0wLDAgKzEsMTIgQEAKKy8vICJDcmVhdGUgTWV0aG9kICd0ZXN0JyIgInRydWUiCitwdWJsaWMgaW50ZXJmYWNlIFRlc3QgeworCisgICAgdm9pZCB0ZXN0KCk7Cit9CisKK2NsYXNzIEZvbyB7CisgIHZvaWQgYmFyKCkgeworICAgIFRlc3QgdGVzdCA9IG51bGw7CisgICAgdGVzdC50ZXN0KCk7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZU1ldGhvZEZyb21Vc2FnZS9hZnRlckxhbWJkYUFyZ3VtZW50LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZU1ldGhvZEZyb21Vc2FnZS9hZnRlckxhbWJkYUFyZ3VtZW50LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTY3NDRmNAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlTWV0aG9kRnJvbVVzYWdlL2FmdGVyTGFtYmRhQXJndW1lbnQuamF2YQpAQCAtMCwwICsxLDEwIEBACisvLyAiQ3JlYXRlIE1ldGhvZCAnZiciICJ0cnVlIgorY2xhc3MgQSB7CisgICAgeworICAgICAgICAgZigoKSAtPiB7fSk7CisgICAgfQorCisgICAgcHJpdmF0ZSB2b2lkIGYoT2JqZWN0IHAwKSB7CisgICAgICAgIDxjYXJldD48c2VsZWN0aW9uPi8vVG8gY2hhbmdlIGJvZHkgb2YgY3JlYXRlZCBtZXRob2RzIHVzZSBGaWxlIHwgU2V0dGluZ3MgfCBGaWxlIFRlbXBsYXRlcy48L3NlbGVjdGlvbj4KKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZU1ldGhvZEZyb21Vc2FnZS9hZnRlck1ldGhvZFJlZmVyZW5jZUFyZ3VtZW50LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZU1ldGhvZEZyb21Vc2FnZS9hZnRlck1ldGhvZFJlZmVyZW5jZUFyZ3VtZW50LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzUyNTdjMAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlTWV0aG9kRnJvbVVzYWdlL2FmdGVyTWV0aG9kUmVmZXJlbmNlQXJndW1lbnQuamF2YQpAQCAtMCwwICsxLDE0IEBACisvLyAiQ3JlYXRlIE1ldGhvZCAnZiciICJ0cnVlIgorY2xhc3MgQSB7CisgICAgeworICAgICAgICAgZihBOjpmb28pOworICAgIH0KKworICAgIHByaXZhdGUgdm9pZCBmKE9iamVjdCBmb28pIHsKKyAgICAgICAgPHNlbGVjdGlvbj4vL1RvIGNoYW5nZSBib2R5IG9mIGNyZWF0ZWQgbWV0aG9kcyB1c2UgRmlsZSB8IFNldHRpbmdzIHwgRmlsZSBUZW1wbGF0ZXMuPC9zZWxlY3Rpb24+CisgICAgfQorCisgICAgc3RhdGljIGludCBmb28oKSB7CisgICAgICByZXR1cm4gNDI7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVNZXRob2RGcm9tVXNhZ2UvYWZ0ZXJNZXRob2RUeXBlUGFyYW1CZWNvbWVDbGFzc1R5cGVQYXJhbWV0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlTWV0aG9kRnJvbVVzYWdlL2FmdGVyTWV0aG9kVHlwZVBhcmFtQmVjb21lQ2xhc3NUeXBlUGFyYW1ldGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGJmYmU2ZgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlTWV0aG9kRnJvbVVzYWdlL2FmdGVyTWV0aG9kVHlwZVBhcmFtQmVjb21lQ2xhc3NUeXBlUGFyYW1ldGVyLmphdmEKQEAgLTAsMCArMSwxNCBAQAorLy8gIkNyZWF0ZSBNZXRob2QgJ2ZvbyciICJ0cnVlIgorY2xhc3MgVGVzdCB7CisgICAgPFIsIEQ+IFIgZm9vKFQ8UiwgRD4gdCwgRCBkYXRhKSB7CisgICAgICAgIHJldHVybiB0LmZvbyh0aGlzLCBkYXRhKTsKKyAgICB9Cit9CisKK2NsYXNzIFQ8UiwgRD4geworCisKKyAgICBwdWJsaWMgUiBmb28oVGVzdCB0ZXN0LCBEIGRhdGEpIHsKKyAgICAgICAgPHNlbGVjdGlvbj5yZXR1cm4gbnVsbDsgIC8vVG8gY2hhbmdlIGJvZHkgb2YgY3JlYXRlZCBtZXRob2RzIHVzZSBGaWxlIHwgU2V0dGluZ3MgfCBGaWxlIFRlbXBsYXRlcy48L3NlbGVjdGlvbj4KKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVNZXRob2RGcm9tVXNhZ2UvYWZ0ZXJNZXRob2RUeXBlUGFyYW1Vc2VkLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZU1ldGhvZEZyb21Vc2FnZS9hZnRlck1ldGhvZFR5cGVQYXJhbVVzZWQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMjQzN2FlCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVNZXRob2RGcm9tVXNhZ2UvYWZ0ZXJNZXRob2RUeXBlUGFyYW1Vc2VkLmphdmEKQEAgLTAsMCArMSwxMiBAQAorLy8gIkNyZWF0ZSBNZXRob2QgJ2YnIiAidHJ1ZSIKK2NsYXNzIEEgeworICAgIDxUPiBUIGZvbygpeworICAgICAgIEI8VD4geCA9IGYoKTsKKyAgICB9CisKKyAgICBwcml2YXRlIDxUPiBCPFQ+IGYoKSB7CisgICAgICAgIDxzZWxlY3Rpb24+cmV0dXJuIG51bGw7ICAvL1RvIGNoYW5nZSBib2R5IG9mIGNyZWF0ZWQgbWV0aG9kcyB1c2UgRmlsZSB8IFNldHRpbmdzIHwgRmlsZSBUZW1wbGF0ZXMuPC9zZWxlY3Rpb24+CisgICAgfQorfQorCitjbGFzcyBCPEs+e30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlTWV0aG9kRnJvbVVzYWdlL2FmdGVyTWV0aG9kVHlwZVBhcmFtVXNlZDEuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlTWV0aG9kRnJvbVVzYWdlL2FmdGVyTWV0aG9kVHlwZVBhcmFtVXNlZDEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNTU2MjA1Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVNZXRob2RGcm9tVXNhZ2UvYWZ0ZXJNZXRob2RUeXBlUGFyYW1Vc2VkMS5qYXZhCkBAIC0wLDAgKzEsMTEgQEAKKy8vICJDcmVhdGUgTWV0aG9kICdmJyIgInRydWUiCitwdWJsaWMgY2xhc3MgQ3JlYXRlTWV0aG9kVGVzdCB7CisgIHB1YmxpYyA8VD4gVCBhTWV0aG9kKFQgdCkgeworICAgIFQgcmVzdWx0ID0gZih0KTsKKyAgICByZXR1cm4gcmVzdWx0OworICB9CisKKyAgICBwcml2YXRlIDxUPiBUIGYoVCB0KSB7CisgICAgICAgIDxzZWxlY3Rpb24+cmV0dXJuIG51bGw7ICAvL1RvIGNoYW5nZSBib2R5IG9mIGNyZWF0ZWQgbWV0aG9kcyB1c2UgRmlsZSB8IFNldHRpbmdzIHwgRmlsZSBUZW1wbGF0ZXMuPC9zZWxlY3Rpb24+CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlTWV0aG9kRnJvbVVzYWdlL2FmdGVyTXVsdGlwbGVUeXBlcy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVNZXRob2RGcm9tVXNhZ2UvYWZ0ZXJNdWx0aXBsZVR5cGVzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWRiYWMzNwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlTWV0aG9kRnJvbVVzYWdlL2FmdGVyTXVsdGlwbGVUeXBlcy5qYXZhCkBAIC0wLDAgKzEsMTEgQEAKKy8vICJDcmVhdGUgTWV0aG9kICdiYXInIiAidHJ1ZSIKK2NsYXNzIEEgeworICAgIHB1YmxpYyB2b2lkIGZvbygpIHsKKyAgICAgIE9iamVjdCB4ID0gYmFyKCk7CisgICAgICBTdHJpbmcgcyA9IGJhcigpOworICAgIH0KKworICAgIHByaXZhdGUgU3RyaW5nIGJhcigpIHsKKyAgICAgICAgPGNhcmV0PjxzZWxlY3Rpb24+cmV0dXJuIG51bGw7ICAvL1RvIGNoYW5nZSBib2R5IG9mIGNyZWF0ZWQgbWV0aG9kcyB1c2UgRmlsZSB8IFNldHRpbmdzIHwgRmlsZSBUZW1wbGF0ZXMuPC9zZWxlY3Rpb24+CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlTWV0aG9kRnJvbVVzYWdlL2FmdGVyTm9RdWFsaWZpY2F0aW9uLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZU1ldGhvZEZyb21Vc2FnZS9hZnRlck5vUXVhbGlmaWNhdGlvbi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBmM2U2OTgKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZU1ldGhvZEZyb21Vc2FnZS9hZnRlck5vUXVhbGlmaWNhdGlvbi5qYXZhCkBAIC0wLDAgKzEsMjAgQEAKKy8vICJDcmVhdGUgTWV0aG9kICdydW4nIiAidHJ1ZSIKK2NsYXNzIEJ1ZyB7CisKKyAgaW50ZXJmYWNlIEZvbzxYPiB7CisgICAgdm9pZCBydW4oWCB4KTsKKyAgfQorCisgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKyAgICBuZXcgRm9vPEJ1Zz4oKSB7CisgICAgICBAT3ZlcnJpZGUKKyAgICAgIHB1YmxpYyB2b2lkIHJ1bihCdWcgbykgeworICAgICAgICBvLnJ1bigpOworICAgICAgfQorICAgIH07CisgIH0KKworICAgIHByaXZhdGUgdm9pZCBydW4oKSB7CisgICAgICAgIDxzZWxlY3Rpb24+Ly9UbyBjaGFuZ2UgYm9keSBvZiBjcmVhdGVkIG1ldGhvZHMgdXNlIEZpbGUgfCBTZXR0aW5ncyB8IEZpbGUgVGVtcGxhdGVzLjwvc2VsZWN0aW9uPgorICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZU1ldGhvZEZyb21Vc2FnZS9hZnRlclNDUjY3NTguamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlTWV0aG9kRnJvbVVzYWdlL2FmdGVyU0NSNjc1OC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc4NWZhYzUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZU1ldGhvZEZyb21Vc2FnZS9hZnRlclNDUjY3NTguamF2YQpAQCAtMCwwICsxLDE1IEBACisvLyAiQ3JlYXRlIE1ldGhvZCAnc29tZU1ldGhvZCciICJ0cnVlIgorcHVibGljIGNsYXNzIFRlc3QgeworCisgICAgcHVibGljIE9iamVjdCBnZXQoKSB7CisgICAgICAgIHJldHVybiBuZXcgT2JqZWN0KCkgeworICAgICAgICAgICAgcHVibGljIGJvb2xlYW4gZXF1YWxzKE9iamVjdCBvYmopIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gc29tZU1ldGhvZCh0aGlzKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcHJpdmF0ZSBib29sZWFuIHNvbWVNZXRob2QoT2JqZWN0IG8pIHsKKyAgICAgICAgICAgICAgICA8Y2FyZXQ+PHNlbGVjdGlvbj5yZXR1cm4gZmFsc2U7ICAvL1RvIGNoYW5nZSBib2R5IG9mIGNyZWF0ZWQgbWV0aG9kcyB1c2UgRmlsZSB8IFNldHRpbmdzIHwgRmlsZSBUZW1wbGF0ZXMuPC9zZWxlY3Rpb24+CisgICAgICAgICAgICB9CisgICAgICAgIH07CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVNZXRob2RGcm9tVXNhZ2UvYWZ0ZXJTQ1I2ODI2LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZU1ldGhvZEZyb21Vc2FnZS9hZnRlclNDUjY4MjYuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MDMwMDY5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVNZXRob2RGcm9tVXNhZ2UvYWZ0ZXJTQ1I2ODI2LmphdmEKQEAgLTAsMCArMSwxNSBAQAorLy8gIkNyZWF0ZSBNZXRob2QgJ2YnIiAidHJ1ZSIKK2NsYXNzIEEgeworICAgIHsKKyAgICAgICAgbmV3IFJ1bm5hYmxlKCkgeworICAgICAgICAgICAgcHVibGljIHZvaWQgcnVuKCkgeworICAgICAgICAgICAgICAgIEIuZih0aGlzKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfTsKKyAgICB9Cit9CitjbGFzcyBCIHsKKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgZihSdW5uYWJsZSBydW5uYWJsZSkgeworICAgICAgICA8Y2FyZXQ+PHNlbGVjdGlvbj4vL1RvIGNoYW5nZSBib2R5IG9mIGNyZWF0ZWQgbWV0aG9kcyB1c2UgRmlsZSB8IFNldHRpbmdzIHwgRmlsZSBUZW1wbGF0ZXMuPC9zZWxlY3Rpb24+CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVNZXRob2RGcm9tVXNhZ2UvYWZ0ZXJTdGF0aWNNZXRob2ROb3RJbkludGVyZmFjZS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVNZXRob2RGcm9tVXNhZ2UvYWZ0ZXJTdGF0aWNNZXRob2ROb3RJbkludGVyZmFjZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE2YTRlMTMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZU1ldGhvZEZyb21Vc2FnZS9hZnRlclN0YXRpY01ldGhvZE5vdEluSW50ZXJmYWNlLmphdmEKQEAgLTAsMCArMSwxMSBAQAorLy8gIkNyZWF0ZSBNZXRob2QgJ2YnIiAidHJ1ZSIKK2ludGVyZmFjZSBJIHt9CitjbGFzcyBBIGltcGxlbWVudHMgSSB7CisgIHsKKyAgICBBLmYoKTsKKyAgfQorCisgICAgcHJpdmF0ZSBzdGF0aWMgdm9pZCBmKCkgeworICAgICAgICA8c2VsZWN0aW9uPi8vVG8gY2hhbmdlIGJvZHkgb2YgY3JlYXRlZCBtZXRob2RzIHVzZSBGaWxlIHwgU2V0dGluZ3MgfCBGaWxlIFRlbXBsYXRlcy48L3NlbGVjdGlvbj4KKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVNZXRob2RGcm9tVXNhZ2UvYWZ0ZXJUaGlzQ2FsbC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVNZXRob2RGcm9tVXNhZ2UvYWZ0ZXJUaGlzQ2FsbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc1MDIyNDgKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZU1ldGhvZEZyb21Vc2FnZS9hZnRlclRoaXNDYWxsLmphdmEKQEAgLTAsMCArMSwxMyBAQAorLy8gIkNyZWF0ZSBNZXRob2QgJ2YnIiAidHJ1ZSIKK3B1YmxpYyBjbGFzcyBBIHsKKyAgICBwdWJsaWMgQSgpIHsKKyAgICAgICAgdGhpcyhmKCkpOworICAgIH0KKworICAgIHByaXZhdGUgc3RhdGljIGludCBmKCkgeworICAgICAgICA8Y2FyZXQ+PHNlbGVjdGlvbj5yZXR1cm4gMDsgIC8vVG8gY2hhbmdlIGJvZHkgb2YgY3JlYXRlZCBtZXRob2RzIHVzZSBGaWxlIHwgU2V0dGluZ3MgfCBGaWxlIFRlbXBsYXRlcy48L3NlbGVjdGlvbj4KKyAgICB9CisKKyAgICBwdWJsaWMgQShpbnQgaSkgeworICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlTWV0aG9kRnJvbVVzYWdlL2JlZm9yZTEuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlTWV0aG9kRnJvbVVzYWdlL2JlZm9yZTEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNDI5OGM2Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVNZXRob2RGcm9tVXNhZ2UvYmVmb3JlMS5qYXZhCkBAIC0wLDAgKzEsNiBAQAorLy8gIkNyZWF0ZSBNZXRob2QgJ3Rlc3QnIiAidHJ1ZSIKK3B1YmxpYyBjbGFzcyBUZXN0IHsKKyAgICBwdWJsaWMgVGVzdCgpIHsKKyAgICAgICAgdGU8Y2FyZXQ+c3QoKTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZU1ldGhvZEZyb21Vc2FnZS9iZWZvcmUyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZU1ldGhvZEZyb21Vc2FnZS9iZWZvcmUyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDI4OTI4NAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlTWV0aG9kRnJvbVVzYWdlL2JlZm9yZTIuamF2YQpAQCAtMCwwICsxLDYgQEAKKy8vICJEbyBub3QgY3JlYXRlIG1ldGhvZCIgImZhbHNlIgorcHVibGljIGNsYXNzIFRlc3QgeworICAgIHB1YmxpYyBUZXN0KCkgeworICAgICAgICB0ZXN0KDxjYXJldD4pOworICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlTWV0aG9kRnJvbVVzYWdlL2JlZm9yZTMuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlTWV0aG9kRnJvbVVzYWdlL2JlZm9yZTMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYmVlNjIzCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVNZXRob2RGcm9tVXNhZ2UvYmVmb3JlMy5qYXZhCkBAIC0wLDAgKzEsNiBAQAorLy8gIkNyZWF0ZSBNZXRob2QgJ3Rlc3QnIiAidHJ1ZSIKK3B1YmxpYyBjbGFzcyBUZXN0IHsKKyAgICBwdWJsaWMgVGVzdCgpIHsKKyAgICAgICAgdGVzdCgpPGNhcmV0PjsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZU1ldGhvZEZyb21Vc2FnZS9iZWZvcmU0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZU1ldGhvZEZyb21Vc2FnZS9iZWZvcmU0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTZlY2IxMwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlTWV0aG9kRnJvbVVzYWdlL2JlZm9yZTQuamF2YQpAQCAtMCwwICsxLDYgQEAKKy8vICJDcmVhdGUgTWV0aG9kICd0ZXN0JyIgInRydWUiCitwdWJsaWMgY2xhc3MgVGVzdCB7CisgICAgcHVibGljIFRlc3QoKSB7CisgICAgICAgIHRlc3QoKTs8Y2FyZXQ+CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVNZXRob2RGcm9tVXNhZ2UvYmVmb3JlNS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVNZXRob2RGcm9tVXNhZ2UvYmVmb3JlNS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcwZjc2OTkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZU1ldGhvZEZyb21Vc2FnZS9iZWZvcmU1LmphdmEKQEAgLTAsMCArMSw3IEBACisvLyAiQ3JlYXRlIE1ldGhvZCAndGVzdCciICJ0cnVlIgorcHVibGljIGNsYXNzIFRlc3QgeworICAgIHN0YXRpYyB2b2lkIHRlc3QoaW50IGkpIHt9CisgICAgcHVibGljIFRlc3QoKSB7CisgICAgICAgIHRlPGNhcmV0PnN0KCk7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVNZXRob2RGcm9tVXNhZ2UvYmVmb3JlQWxyZWFkeUV4aXN0U2lnbmF0dXJlLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZU1ldGhvZEZyb21Vc2FnZS9iZWZvcmVBbHJlYWR5RXhpc3RTaWduYXR1cmUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZTVhODE0Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVNZXRob2RGcm9tVXNhZ2UvYmVmb3JlQWxyZWFkeUV4aXN0U2lnbmF0dXJlLmphdmEKQEAgLTAsMCArMSwxMCBAQAorLy8gIkNyZWF0ZSBNZXRob2QgJ2YnIiAiZmFsc2UiCitwdWJsaWMgY2xhc3MgRm9vIHsKKyAgICB2b2lkIGZvbyhCYXIgZikgeworICAgICAgICBmLjxjYXJldD5mKDIpOworICAgIH0KK30KK2NsYXNzIEJhciB7CisgICAgcHJpdmF0ZSB2b2lkIGYoaW50IGkpe30KKyAgICBwdWJsaWMgdm9pZCBmKFN0cmluZyBzKXt9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZU1ldGhvZEZyb21Vc2FnZS9iZWZvcmVBcnJheVR5cGVQYXJhbS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVNZXRob2RGcm9tVXNhZ2UvYmVmb3JlQXJyYXlUeXBlUGFyYW0uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZTUyMjAwCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVNZXRob2RGcm9tVXNhZ2UvYmVmb3JlQXJyYXlUeXBlUGFyYW0uamF2YQpAQCAtMCwwICsxLDcgQEAKKy8vICJDcmVhdGUgTWV0aG9kICd0ZXN0JyIgInRydWUiCitwdWJsaWMgY2xhc3MgVGVzdCB7CisgICAgcHVibGljIFRlc3QoKSB7CisgICAgICAgIGJ5dGVbXSBieXRlcyA9IG5ldyBieXRlWzBdOworICAgICAgICB0ZTxjYXJldD5zdChieXRlcyk7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVNZXRob2RGcm9tVXNhZ2UvYmVmb3JlQXNzZXJ0RGVzY3JpcHRpb24uamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlTWV0aG9kRnJvbVVzYWdlL2JlZm9yZUFzc2VydERlc2NyaXB0aW9uLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTg3YWNjMgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlTWV0aG9kRnJvbVVzYWdlL2JlZm9yZUFzc2VydERlc2NyaXB0aW9uLmphdmEKQEAgLTAsMCArMSw2IEBACisvLyAiQ3JlYXRlIE1ldGhvZCAnZiciICJ0cnVlIgorY2xhc3MgQSB7CisgICAgeworICAgICAgICAgYXNzZXJ0IGZhbHNlOiBmPGNhcmV0PigpOworICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlTWV0aG9kRnJvbVVzYWdlL2JlZm9yZUNsYXNzVHlwZVBhcmFtTm90QXZhaWxhYmxlLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZU1ldGhvZEZyb21Vc2FnZS9iZWZvcmVDbGFzc1R5cGVQYXJhbU5vdEF2YWlsYWJsZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUxMzExODAKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZU1ldGhvZEZyb21Vc2FnZS9iZWZvcmVDbGFzc1R5cGVQYXJhbU5vdEF2YWlsYWJsZS5qYXZhCkBAIC0wLDAgKzEsMjMgQEAKKy8vICJDcmVhdGUgTWV0aG9kICdtYWtlT3AnIiAidHJ1ZSIKK2NsYXNzIEJhc2U8VD4geworICAgIEJhc2UoRmFjdG9yeTxUPiBmYWN0b3J5LCBPcGVyYXRvcjxUPiBvcGVyYXRvcikgeworICAgIH0KK30KKworaW50ZXJmYWNlIE1ldGFPcGVyYXRvcjxUPiB7Cit9CisKK2ludGVyZmFjZSBPcGVyYXRvcjxUPiB7Cit9CisKK2ludGVyZmFjZSBGYWN0b3J5PFQ+IHsKK30KKworY2xhc3MgU3VwPFQ+IGV4dGVuZHMgQmFzZTxUPiB7CisgICAgU3VwKE1ldGFPcGVyYXRvcjxUPiBtb3ApIHsKKyAgICAgICAgc3VwZXIobnVsbCwgbWFrPGNhcmV0PmVPcChtb3ApKTsKKyAgICB9CisKKyAgIAorCit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVNZXRob2RGcm9tVXNhZ2UvYmVmb3JlRXhpc3RpbmdGaWVsZC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVNZXRob2RGcm9tVXNhZ2UvYmVmb3JlRXhpc3RpbmdGaWVsZC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmExY2E3NGUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZU1ldGhvZEZyb21Vc2FnZS9iZWZvcmVFeGlzdGluZ0ZpZWxkLmphdmEKQEAgLTAsMCArMSw3IEBACisvLyAiQ3JlYXRlIEdldHRlciIgInRydWUiCitwdWJsaWMgY2xhc3MgVGVzdCB7CisgICAgSW50ZWdlciBmaWVsZDsKKyAgICBwdWJsaWMgZm9vKCkgeworICAgICAgICBnZXQ8Y2FyZXQ+RmllbGQoKTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZU1ldGhvZEZyb21Vc2FnZS9iZWZvcmVHZW5lcmljczEuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlTWV0aG9kRnJvbVVzYWdlL2JlZm9yZUdlbmVyaWNzMS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI4OWEwMzEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZU1ldGhvZEZyb21Vc2FnZS9iZWZvcmVHZW5lcmljczEuamF2YQpAQCAtMCwwICsxLDYgQEAKKy8vICJDcmVhdGUgTWV0aG9kICdiYXInIiAidHJ1ZSIKK3B1YmxpYyBjbGFzcyBUZXN0IHsKKyAgICA8VCBleHRlbmRzIFN0cmluZz4gdm9pZCBmb28gKFQgdDEsIFQgdDIpIHsKKyAgICAgICAgPGNhcmV0PmJhciAodDEsIHQyKTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVNZXRob2RGcm9tVXNhZ2UvYmVmb3JlSURFQTIzMjcuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlTWV0aG9kRnJvbVVzYWdlL2JlZm9yZUlERUEyMzI3LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmJiZTkwNTcKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZU1ldGhvZEZyb21Vc2FnZS9iZWZvcmVJREVBMjMyNy5qYXZhCkBAIC0wLDAgKzEsNiBAQAorLy8gIkNyZWF0ZSBNZXRob2QgJ3Rlc3QnIiAidHJ1ZSIKK3B1YmxpYyBjbGFzcyBUZXN0IHsKKyAgICBwdWJsaWMgVGVzdCgpIHsKKyAgICAgICAgYXNzZXJ0IDxjYXJldD50ZXN0KCk7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVNZXRob2RGcm9tVXNhZ2UvYmVmb3JlSURFQURFVjYwNjguamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlTWV0aG9kRnJvbVVzYWdlL2JlZm9yZUlERUFERVY2MDY4LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTgxZmU2OAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlTWV0aG9kRnJvbVVzYWdlL2JlZm9yZUlERUFERVY2MDY4LmphdmEKQEAgLTAsMCArMSw5IEBACisvLyAiQ3JlYXRlIE1ldGhvZCAndG9NdWx0aSciICJ0cnVlIgoraW1wb3J0IGphdmEudXRpbC5NYXA7CisKK2NsYXNzIEJyb2tlbkNyZWF0ZU1ldGhvZCB7CisKKyAgICBwdWJsaWMgdm9pZCBmb28oTWFwPFN0cmluZywgU3RyaW5nPiBiYXIpIHsKKyAgICAgICAgTWFwPFN0cmluZywgU3RyaW5nW10+IG11bHRpQmFyID0gPGNhcmV0PnRvTXVsdGkoYmFyKTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZU1ldGhvZEZyb21Vc2FnZS9iZWZvcmVJbnRlcmZhY2UuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlTWV0aG9kRnJvbVVzYWdlL2JlZm9yZUludGVyZmFjZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdiMWYzOWIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZU1ldGhvZEZyb21Vc2FnZS9iZWZvcmVJbnRlcmZhY2UuamF2YQpAQCAtMCwwICsxLDExIEBACisvLyAiQ3JlYXRlIE1ldGhvZCAndGVzdCciICJ0cnVlIgorcHVibGljIGludGVyZmFjZSBUZXN0IHsKKworfQorCitjbGFzcyBGb28geworICB2b2lkIGJhcigpIHsKKyAgICBUZXN0IHRlc3QgPSBudWxsOworICAgIHRlc3QudGU8Y2FyZXQ+c3QoKTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlTWV0aG9kRnJvbVVzYWdlL2JlZm9yZUxhbWJkYUFyZ3VtZW50LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZU1ldGhvZEZyb21Vc2FnZS9iZWZvcmVMYW1iZGFBcmd1bWVudC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY3YTM5MDMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZU1ldGhvZEZyb21Vc2FnZS9iZWZvcmVMYW1iZGFBcmd1bWVudC5qYXZhCkBAIC0wLDAgKzEsNiBAQAorLy8gIkNyZWF0ZSBNZXRob2QgJ2YnIiAidHJ1ZSIKK2NsYXNzIEEgeworICAgIHsKKyAgICAgICAgIGY8Y2FyZXQ+KCgpIC0+IHt9KTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZU1ldGhvZEZyb21Vc2FnZS9iZWZvcmVNZXRob2RSZWZlcmVuY2VBcmd1bWVudC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVNZXRob2RGcm9tVXNhZ2UvYmVmb3JlTWV0aG9kUmVmZXJlbmNlQXJndW1lbnQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZWY2YjdiCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVNZXRob2RGcm9tVXNhZ2UvYmVmb3JlTWV0aG9kUmVmZXJlbmNlQXJndW1lbnQuamF2YQpAQCAtMCwwICsxLDkgQEAKKy8vICJDcmVhdGUgTWV0aG9kICdmJyIgInRydWUiCitjbGFzcyBBIHsKKyAgICB7CisgICAgICAgICBmPGNhcmV0PihBOjpmb28pOworICAgIH0KKyAgICBzdGF0aWMgaW50IGZvbygpIHsKKyAgICAgIHJldHVybiA0MjsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZU1ldGhvZEZyb21Vc2FnZS9iZWZvcmVNZXRob2RUeXBlUGFyYW1CZWNvbWVDbGFzc1R5cGVQYXJhbWV0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlTWV0aG9kRnJvbVVzYWdlL2JlZm9yZU1ldGhvZFR5cGVQYXJhbUJlY29tZUNsYXNzVHlwZVBhcmFtZXRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE5MWRiNDAKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZU1ldGhvZEZyb21Vc2FnZS9iZWZvcmVNZXRob2RUeXBlUGFyYW1CZWNvbWVDbGFzc1R5cGVQYXJhbWV0ZXIuamF2YQpAQCAtMCwwICsxLDExIEBACisvLyAiQ3JlYXRlIE1ldGhvZCAnZm9vJyIgInRydWUiCitjbGFzcyBUZXN0IHsKKyAgICA8UiwgRD4gUiBmb28oVDxSLCBEPiB0LCBEIGRhdGEpIHsKKyAgICAgICAgcmV0dXJuIHQuZjxjYXJldD5vbyh0aGlzLCBkYXRhKTsKKyAgICB9Cit9CisKK2NsYXNzIFQ8UiwgRD4geworCisKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZU1ldGhvZEZyb21Vc2FnZS9iZWZvcmVNZXRob2RUeXBlUGFyYW1Vc2VkLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZU1ldGhvZEZyb21Vc2FnZS9iZWZvcmVNZXRob2RUeXBlUGFyYW1Vc2VkLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzY0ZjRmYQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlTWV0aG9kRnJvbVVzYWdlL2JlZm9yZU1ldGhvZFR5cGVQYXJhbVVzZWQuamF2YQpAQCAtMCwwICsxLDggQEAKKy8vICJDcmVhdGUgTWV0aG9kICdmJyIgInRydWUiCitjbGFzcyBBIHsKKyAgICA8VD4gVCBmb28oKXsKKyAgICAgICBCPFQ+IHggPSBmPGNhcmV0PigpOworICAgIH0KK30KKworY2xhc3MgQjxLPnt9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZU1ldGhvZEZyb21Vc2FnZS9iZWZvcmVNZXRob2RUeXBlUGFyYW1Vc2VkMS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVNZXRob2RGcm9tVXNhZ2UvYmVmb3JlTWV0aG9kVHlwZVBhcmFtVXNlZDEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YWZmY2ZmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVNZXRob2RGcm9tVXNhZ2UvYmVmb3JlTWV0aG9kVHlwZVBhcmFtVXNlZDEuamF2YQpAQCAtMCwwICsxLDcgQEAKKy8vICJDcmVhdGUgTWV0aG9kICdmJyIgInRydWUiCitwdWJsaWMgY2xhc3MgQ3JlYXRlTWV0aG9kVGVzdCB7CisgIHB1YmxpYyA8VD4gVCBhTWV0aG9kKFQgdCkgeworICAgIFQgcmVzdWx0ID0gZjxjYXJldD4odCk7CisgICAgcmV0dXJuIHJlc3VsdDsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlTWV0aG9kRnJvbVVzYWdlL2JlZm9yZU11bHRpcGxlVHlwZXMuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlTWV0aG9kRnJvbVVzYWdlL2JlZm9yZU11bHRpcGxlVHlwZXMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NmIxOWIxCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVNZXRob2RGcm9tVXNhZ2UvYmVmb3JlTXVsdGlwbGVUeXBlcy5qYXZhCkBAIC0wLDAgKzEsNyBAQAorLy8gIkNyZWF0ZSBNZXRob2QgJ2JhciciICJ0cnVlIgorY2xhc3MgQSB7CisgICAgcHVibGljIHZvaWQgZm9vKCkgeworICAgICAgT2JqZWN0IHggPSA8Y2FyZXQ+YmFyKCk7CisgICAgICBTdHJpbmcgcyA9IGJhcigpOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZU1ldGhvZEZyb21Vc2FnZS9iZWZvcmVOb1F1YWxpZmljYXRpb24uamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlTWV0aG9kRnJvbVVzYWdlL2JlZm9yZU5vUXVhbGlmaWNhdGlvbi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU1NDA3ZTUyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVNZXRob2RGcm9tVXNhZ2UvYmVmb3JlTm9RdWFsaWZpY2F0aW9uLmphdmEKQEAgLTAsMCArMSwxNiBAQAorLy8gIkNyZWF0ZSBNZXRob2QgJ3J1biciICJ0cnVlIgorY2xhc3MgQnVnIHsKKworICBpbnRlcmZhY2UgRm9vPFg+IHsKKyAgICB2b2lkIHJ1bihYIHgpOworICB9CisKKyAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworICAgIG5ldyBGb288QnVnPigpIHsKKyAgICAgIEBPdmVycmlkZQorICAgICAgcHVibGljIHZvaWQgcnVuKEJ1ZyBvKSB7CisgICAgICAgIG8ucnU8Y2FyZXQ+bigpOworICAgICAgfQorICAgIH07CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZU1ldGhvZEZyb21Vc2FnZS9iZWZvcmVTQ1I2NzU4LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZU1ldGhvZEZyb21Vc2FnZS9iZWZvcmVTQ1I2NzU4LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjM0MzI2NDYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZU1ldGhvZEZyb21Vc2FnZS9iZWZvcmVTQ1I2NzU4LmphdmEKQEAgLTAsMCArMSwxMSBAQAorLy8gIkNyZWF0ZSBNZXRob2QgJ3NvbWVNZXRob2QnIiAidHJ1ZSIKK3B1YmxpYyBjbGFzcyBUZXN0IHsKKworICAgIHB1YmxpYyBPYmplY3QgZ2V0KCkgeworICAgICAgICByZXR1cm4gbmV3IE9iamVjdCgpIHsKKyAgICAgICAgICAgIHB1YmxpYyBib29sZWFuIGVxdWFscyhPYmplY3Qgb2JqKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIDxjYXJldD5zb21lTWV0aG9kKHRoaXMpOworICAgICAgICAgICAgfQorICAgICAgICB9OworICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlTWV0aG9kRnJvbVVzYWdlL2JlZm9yZVNDUjY4MjYuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlTWV0aG9kRnJvbVVzYWdlL2JlZm9yZVNDUjY4MjYuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZjkyMTllCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVNZXRob2RGcm9tVXNhZ2UvYmVmb3JlU0NSNjgyNi5qYXZhCkBAIC0wLDAgKzEsMTIgQEAKKy8vICJDcmVhdGUgTWV0aG9kICdmJyIgInRydWUiCitjbGFzcyBBIHsKKyAgICB7CisgICAgICAgIG5ldyBSdW5uYWJsZSgpIHsKKyAgICAgICAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKKyAgICAgICAgICAgICAgICBCLjxjYXJldD5mKHRoaXMpOworICAgICAgICAgICAgfQorICAgICAgICB9OworICAgIH0KK30KK2NsYXNzIEIgeworfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVNZXRob2RGcm9tVXNhZ2UvYmVmb3JlU3RhdGljTWV0aG9kTm90SW5JbnRlcmZhY2UuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlTWV0aG9kRnJvbVVzYWdlL2JlZm9yZVN0YXRpY01ldGhvZE5vdEluSW50ZXJmYWNlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmQwZjU4MgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlTWV0aG9kRnJvbVVzYWdlL2JlZm9yZVN0YXRpY01ldGhvZE5vdEluSW50ZXJmYWNlLmphdmEKQEAgLTAsMCArMSw3IEBACisvLyAiQ3JlYXRlIE1ldGhvZCAnZiciICJ0cnVlIgoraW50ZXJmYWNlIEkge30KK2NsYXNzIEEgaW1wbGVtZW50cyBJIHsKKyAgeworICAgIEEuPGNhcmV0PmYoKTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlTWV0aG9kRnJvbVVzYWdlL2JlZm9yZVRoaXNDYWxsLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZU1ldGhvZEZyb21Vc2FnZS9iZWZvcmVUaGlzQ2FsbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEwYzhkMTMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZU1ldGhvZEZyb21Vc2FnZS9iZWZvcmVUaGlzQ2FsbC5qYXZhCkBAIC0wLDAgKzEsOSBAQAorLy8gIkNyZWF0ZSBNZXRob2QgJ2YnIiAidHJ1ZSIKK3B1YmxpYyBjbGFzcyBBIHsKKyAgICBwdWJsaWMgQSgpIHsKKyAgICAgICAgdGhpcyg8Y2FyZXQ+ZigpKTsKKyAgICB9CisKKyAgICBwdWJsaWMgQShpbnQgaSkgeworICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlTWV0aG9kRnJvbVVzYWdlL2JlZm9yZVVucmVzb2x2ZWRBcmdMaXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZU1ldGhvZEZyb21Vc2FnZS9iZWZvcmVVbnJlc29sdmVkQXJnTGlzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUxNjFlNjgKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZU1ldGhvZEZyb21Vc2FnZS9iZWZvcmVVbnJlc29sdmVkQXJnTGlzdC5qYXZhCkBAIC0wLDAgKzEsNiBAQAorLy8gIkNyZWF0ZSBNZXRob2QgJ2YnIiAiZmFsc2UiCitjbGFzcyBBIHsKKyAgICB7CisgICAgICAgICBmPGNhcmV0Pih4eHgpOworICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlUGFyYW1ldGVyRnJvbVVzYWdlL2FmdGVySGllcmFyY2h5LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZVBhcmFtZXRlckZyb21Vc2FnZS9hZnRlckhpZXJhcmNoeS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRiZGMyMzYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZVBhcmFtZXRlckZyb21Vc2FnZS9hZnRlckhpZXJhcmNoeS5qYXZhCkBAIC0wLDAgKzEsMTEgQEAKKy8vICJDcmVhdGUgUGFyYW1ldGVyICdwb3BvcCciICJ0cnVlIgorY2xhc3MgQ2FsY3VsYXRvciB7CisgICAgcHVibGljIHZvaWQgcHJpbnRFcnJvcihTdHJpbmcgZGV0YWlsLCBpbnQgbGluZSwgU3RyaW5nIGZpbGUsIFN0cmluZyBwb3BvcCkgeworICAgICAgICBpbnQgaSA9IHBvcG9wOworICAgIH0KK30KK2NsYXNzIFNTUyBleHRlbmRzIENhbGN1bGF0b3IgeworICAgIHB1YmxpYyB2b2lkIHByaW50RXJyb3IoU3RyaW5nIGRldGFpbCwgaW50IGxpbmUsIFN0cmluZyBmaWxlLCBTdHJpbmcgcG9wb3ApIHsKKyAgICAgICAgU3RyaW5nIHMgPSA8Y2FyZXQ+cG9wb3A7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVQYXJhbWV0ZXJGcm9tVXNhZ2UvYWZ0ZXJTaW1wbGUuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlUGFyYW1ldGVyRnJvbVVzYWdlL2FmdGVyU2ltcGxlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGNkMzkzZQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlUGFyYW1ldGVyRnJvbVVzYWdlL2FmdGVyU2ltcGxlLmphdmEKQEAgLTAsMCArMSw2IEBACisvLyAiQ3JlYXRlIFBhcmFtZXRlciAncG9wb3AnIiAidHJ1ZSIKK2NsYXNzIENhbGN1bGF0b3IgeworICAgIHB1YmxpYyB2b2lkIHByaW50RXJyb3IoU3RyaW5nIGRldGFpbCwgaW50IGxpbmUsIFN0cmluZyBmaWxlLCBpbnQgcG9wb3ApIHsKKyAgICAgICAgaW50IGkgPSA8Y2FyZXQ+cG9wb3A7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVQYXJhbWV0ZXJGcm9tVXNhZ2UvYmVmb3JlSGllcmFyY2h5LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZVBhcmFtZXRlckZyb21Vc2FnZS9iZWZvcmVIaWVyYXJjaHkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZDFjZDk1Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVQYXJhbWV0ZXJGcm9tVXNhZ2UvYmVmb3JlSGllcmFyY2h5LmphdmEKQEAgLTAsMCArMSwxMSBAQAorLy8gIkNyZWF0ZSBQYXJhbWV0ZXIgJ3BvcG9wJyIgInRydWUiCitjbGFzcyBDYWxjdWxhdG9yIHsKKyAgICBwdWJsaWMgdm9pZCBwcmludEVycm9yKFN0cmluZyBkZXRhaWwsIGludCBsaW5lLCBTdHJpbmcgZmlsZSkgeworICAgICAgICBpbnQgaSA9IHBvcG9wOworICAgIH0KK30KK2NsYXNzIFNTUyBleHRlbmRzIENhbGN1bGF0b3IgeworICAgIHB1YmxpYyB2b2lkIHByaW50RXJyb3IoU3RyaW5nIGRldGFpbCwgaW50IGxpbmUsIFN0cmluZyBmaWxlKSB7CisgICAgICAgIFN0cmluZyBzID0gPGNhcmV0PnBvcG9wOworICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlUGFyYW1ldGVyRnJvbVVzYWdlL2JlZm9yZVNpbXBsZS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVQYXJhbWV0ZXJGcm9tVXNhZ2UvYmVmb3JlU2ltcGxlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWQ2YTY2YQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlUGFyYW1ldGVyRnJvbVVzYWdlL2JlZm9yZVNpbXBsZS5qYXZhCkBAIC0wLDAgKzEsNiBAQAorLy8gIkNyZWF0ZSBQYXJhbWV0ZXIgJ3BvcG9wJyIgInRydWUiCitjbGFzcyBDYWxjdWxhdG9yIHsKKyAgICBwdWJsaWMgdm9pZCBwcmludEVycm9yKFN0cmluZyBkZXRhaWwsIGludCBsaW5lLCBTdHJpbmcgZmlsZSkgeworICAgICAgICBpbnQgaSA9IDxjYXJldD5wb3BvcDsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZVByb3BlcnR5RnJvbVVzYWdlL2FmdGVyRmllbGRFeGlzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVQcm9wZXJ0eUZyb21Vc2FnZS9hZnRlckZpZWxkRXhpc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOWJhYWMzCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVQcm9wZXJ0eUZyb21Vc2FnZS9hZnRlckZpZWxkRXhpc3QuamF2YQpAQCAtMCwwICsxLDE2IEBACisvLyAiQ3JlYXRlIFByb3BlcnR5IiAidHJ1ZSIKK2NsYXNzIENhbGN1bGF0b3IgeworICAgIGludCBpOworCisgICAgcHVibGljIHZvaWQgcHJpbnRFcnJvcigpIHsKKyAgICAgICAgc2V0SSgwKTsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBzZXRJKGludCBpKSB7CisgICAgICAgIHRoaXMuaSA9IGk7CisgICAgfQorCisgICAgcHVibGljIGludCBnZXRJKCkgeworICAgICAgICByZXR1cm4gaTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZVByb3BlcnR5RnJvbVVzYWdlL2FmdGVyU2ltcGxlLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZVByb3BlcnR5RnJvbVVzYWdlL2FmdGVyU2ltcGxlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjI4ZDkzZAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlUHJvcGVydHlGcm9tVXNhZ2UvYWZ0ZXJTaW1wbGUuamF2YQpAQCAtMCwwICsxLDE2IEBACisvLyAiQ3JlYXRlIFByb3BlcnR5IiAidHJ1ZSIKK2NsYXNzIENhbGN1bGF0b3IgeworICAgIHByaXZhdGUgaW50IGk7CisKKyAgICBwdWJsaWMgdm9pZCBwcmludEVycm9yKCkgeworICAgICAgICBzZXRJKDApOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIHNldEkoaW50IGkpIHsKKyAgICAgICAgdGhpcy5pID0gaTsKKyAgICB9CisKKyAgICBwdWJsaWMgaW50IGdldEkoKSB7CisgICAgICAgIHJldHVybiBpOworICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlUHJvcGVydHlGcm9tVXNhZ2UvYmVmb3JlRmllbGRBbmRHZXR0ZXJFeGlzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVQcm9wZXJ0eUZyb21Vc2FnZS9iZWZvcmVGaWVsZEFuZEdldHRlckV4aXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmVjNzYwZgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlUHJvcGVydHlGcm9tVXNhZ2UvYmVmb3JlRmllbGRBbmRHZXR0ZXJFeGlzdC5qYXZhCkBAIC0wLDAgKzEsOCBAQAorLy8gIkNyZWF0ZSBQcm9wZXJ0eSIgImZhbHNlIgorY2xhc3MgQ2FsY3VsYXRvciB7CisgICAgaW50IGk7CisgICAgcHVibGljIHZvaWQgcHJpbnRFcnJvcigpIHsKKyAgICAgIHNldDxjYXJldD5JKDApOyAKKyAgICB9CisgICAgcHVibGljIGludCBnZXRJKCkge3JldHVybiBpO30KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlUHJvcGVydHlGcm9tVXNhZ2UvYmVmb3JlRmllbGRFeGlzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVQcm9wZXJ0eUZyb21Vc2FnZS9iZWZvcmVGaWVsZEV4aXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDU2NDU3YQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlUHJvcGVydHlGcm9tVXNhZ2UvYmVmb3JlRmllbGRFeGlzdC5qYXZhCkBAIC0wLDAgKzEsNyBAQAorLy8gIkNyZWF0ZSBQcm9wZXJ0eSIgInRydWUiCitjbGFzcyBDYWxjdWxhdG9yIHsKKyAgICBpbnQgaTsKKyAgICBwdWJsaWMgdm9pZCBwcmludEVycm9yKCkgeworICAgICAgc2V0PGNhcmV0PkkoMCk7IAorICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlUHJvcGVydHlGcm9tVXNhZ2UvYmVmb3JlU2ltcGxlLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZVByb3BlcnR5RnJvbVVzYWdlL2JlZm9yZVNpbXBsZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhkMjEzZWMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZVByb3BlcnR5RnJvbVVzYWdlL2JlZm9yZVNpbXBsZS5qYXZhCkBAIC0wLDAgKzEsNiBAQAorLy8gIkNyZWF0ZSBQcm9wZXJ0eSIgInRydWUiCitjbGFzcyBDYWxjdWxhdG9yIHsKKyAgICBwdWJsaWMgdm9pZCBwcmludEVycm9yKCkgeworICAgICAgc2V0PGNhcmV0PkkoMCk7IAorICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvZGVmZXJGaW5hbEFzc2lnbm1lbnQvYWZ0ZXIxLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2RlZmVyRmluYWxBc3NpZ25tZW50L2FmdGVyMS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMyMzUxNjQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2RlZmVyRmluYWxBc3NpZ25tZW50L2FmdGVyMS5qYXZhCkBAIC0wLDAgKzEsMTcgQEAKKy8vICJEZWZlciBhc3NpZ25tZW50IHRvICduJyB1c2luZyB0ZW1wIHZhcmlhYmxlIiAidHJ1ZSIKK2ltcG9ydCBqYXZhLmlvLio7CisKK2NsYXNzIGEgeworICAgIHZvaWQgZihJbnB1dFN0cmVhbSBpbikgeworICAgICAgICBmaW5hbCBpbnQgbjsKKyAgICAgICAgaW50IG4xOworICAgICAgICB0cnkgeworICAgICAgICAgICAgbjEgPSBpbi5yZWFkKCk7CisgICAgICAgIH0gY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIDxjYXJldD5uMSA9IC0xOworICAgICAgICB9CisgICAgICAgIG4gPSBuMTsKKyAgICAgICAgaW50IHkgPSA0OworICAgIH0KK30KKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9kZWZlckZpbmFsQXNzaWdubWVudC9hZnRlcjIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvZGVmZXJGaW5hbEFzc2lnbm1lbnQvYWZ0ZXIyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDAxMDgwMgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvZGVmZXJGaW5hbEFzc2lnbm1lbnQvYWZ0ZXIyLmphdmEKQEAgLTAsMCArMSwxOSBAQAorLy8gIkRlZmVyIGFzc2lnbm1lbnQgdG8gJ24nIHVzaW5nIHRlbXAgdmFyaWFibGUiICJ0cnVlIgoraW1wb3J0IGphdmEuaW8uKjsKKworY2xhc3MgYSB7CisgICAgdm9pZCBmKElucHV0U3RyZWFtIGluKSB7CisgICAgICAgIGZpbmFsIGludCBuOworICAgICAgICBpbnQgbjE7CisgICAgICAgIGlmIChpbj09bnVsbCkgeworICAgICAgICAgICAgbjEgPSAyOworICAgICAgICAgICAgPGNhcmV0Pm4xID0gMjsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIG4xID00OworICAgICAgICB9CisgICAgICAgIG4gPSBuMTsKKyAgICAgICAgaW50IHAgPSA2OworICAgIH0KK30KKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9kZWZlckZpbmFsQXNzaWdubWVudC9hZnRlcjMuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvZGVmZXJGaW5hbEFzc2lnbm1lbnQvYWZ0ZXIzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjYwZTgwMgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvZGVmZXJGaW5hbEFzc2lnbm1lbnQvYWZ0ZXIzLmphdmEKQEAgLTAsMCArMSwyMiBAQAorLy8gIkRlZmVyIGFzc2lnbm1lbnQgdG8gJ24nIHVzaW5nIHRlbXAgdmFyaWFibGUiICJ0cnVlIgoraW1wb3J0IGphdmEuaW8uKjsKKworY2xhc3MgYSB7CisgICAgdm9pZCBmKElucHV0U3RyZWFtIGluKSB7CisgICAgICAgIGZpbmFsIGludCBuOworICAgICAgICBpbnQgbjE7CisgICAgICAgIGlmIChpbj09bnVsbCkgeworICAgICAgICAgICAgbjEgPSAyOworICAgICAgICAgICAgPGNhcmV0Pm4xID0gMjsKKyAgICAgICAgICAgIGludCBoID0gbjE7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBuMSA9NDsKKyAgICAgICAgfQorICAgICAgICBuID0gbjE7CisgICAgICAgIGYobik7CisgICAgICAgIGludCBwID0gbjsKKyAgICB9CisgICAgdm9pZCBmKGludCBpKSB7fQorfQorCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2RlZmVyRmluYWxBc3NpZ25tZW50L2FmdGVyNC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9kZWZlckZpbmFsQXNzaWdubWVudC9hZnRlcjQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYTdjNzJiCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9kZWZlckZpbmFsQXNzaWdubWVudC9hZnRlcjQuamF2YQpAQCAtMCwwICsxLDIyIEBACisvLyAiRGVmZXIgYXNzaWdubWVudCB0byAnbicgdXNpbmcgdGVtcCB2YXJpYWJsZSIgInRydWUiCitpbXBvcnQgamF2YS5pby4qOworCitjbGFzcyBhIHsKKyAgICBmaW5hbCBpbnQgbjsKKyAgICBhKElucHV0U3RyZWFtIGluKSB7CisgICAgICAgIGludCBuMTsKKyAgICAgICAgaWYgKGluPT1udWxsKSB7CisgICAgICAgICAgICBuMSA9IDI7CisgICAgICAgICAgICA8Y2FyZXQ+bjEgPSAyOworICAgICAgICAgICAgaW50IGggPSBuMTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIG4xID00OworICAgICAgICB9CisgICAgICAgIG4gPSBuMTsKKyAgICAgICAgZihuKTsKKyAgICAgICAgaW50IHAgPSBuOworICAgIH0KKyAgICB2b2lkIGYoaW50IGkpIHt9Cit9CisKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvZGVmZXJGaW5hbEFzc2lnbm1lbnQvYWZ0ZXI1LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2RlZmVyRmluYWxBc3NpZ25tZW50L2FmdGVyNS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE1ZjQwYTAKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2RlZmVyRmluYWxBc3NpZ25tZW50L2FmdGVyNS5qYXZhCkBAIC0wLDAgKzEsMTQgQEAKKy8vICJEZWZlciBhc3NpZ25tZW50IHRvICdpJyB1c2luZyB0ZW1wIHZhcmlhYmxlIiAidHJ1ZSIKK2ltcG9ydCBqYXZhLmlvLio7CisKK2NsYXNzIGEgeworICAgIHZvaWQgZihpbnQgaykgeworICAgICAgICBmaW5hbCBpbnQgaTsKKyAgICAgICAgaW50IGkxOworICAgICAgICBpMSA9IDQ7CisgICAgICAgIDxjYXJldD5pMSA9IDQ7CisgICAgICAgIGkgPSBpMTsKKyAgICAgICAgZihpKTsKKyAgICB9Cit9CisKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvZGVmZXJGaW5hbEFzc2lnbm1lbnQvYWZ0ZXI2LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2RlZmVyRmluYWxBc3NpZ25tZW50L2FmdGVyNi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQxNGViNWUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2RlZmVyRmluYWxBc3NpZ25tZW50L2FmdGVyNi5qYXZhCkBAIC0wLDAgKzEsMTIgQEAKKy8vICJEZWZlciBhc3NpZ25tZW50IHRvICduJyB1c2luZyB0ZW1wIHZhcmlhYmxlIiAidHJ1ZSIKK2ltcG9ydCBqYXZhLmlvLio7CisKK2NsYXNzIGEgeworICAgIGZpbmFsIGludCBuOworICAgIHsKKyAgICAgICAgaW50IG4xOworICAgICAgICBuMSA9MzsKKyAgICAgICAgPGNhcmV0Pm4xID0zOworICAgICAgICBuID0gbjE7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9kZWZlckZpbmFsQXNzaWdubWVudC9hZnRlcjcuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvZGVmZXJGaW5hbEFzc2lnbm1lbnQvYWZ0ZXI3LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTdlOGQ4YQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvZGVmZXJGaW5hbEFzc2lnbm1lbnQvYWZ0ZXI3LmphdmEKQEAgLTAsMCArMSwxMiBAQAorLy8gIkRlZmVyIGFzc2lnbm1lbnQgdG8gJ24nIHVzaW5nIHRlbXAgdmFyaWFibGUiICJ0cnVlIgoraW1wb3J0IGphdmEuaW8uKjsKKworY2xhc3MgYSB7CisgICAgZmluYWwgaW50IG47CisgICAgYShpbnQgbikgeworICAgICAgICBpbnQgbjE7CisgICAgICAgIG4xID1uOworICAgICAgICA8Y2FyZXQ+bjEgPW47CisgICAgICAgIHRoaXMubiA9IG4xOworICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvZGVmZXJGaW5hbEFzc2lnbm1lbnQvYWZ0ZXI4LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2RlZmVyRmluYWxBc3NpZ25tZW50L2FmdGVyOC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlkY2NkM2EKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2RlZmVyRmluYWxBc3NpZ25tZW50L2FmdGVyOC5qYXZhCkBAIC0wLDAgKzEsMTggQEAKKy8vICJEZWZlciBhc3NpZ25tZW50IHRvICduJyB1c2luZyB0ZW1wIHZhcmlhYmxlIiAidHJ1ZSIKK2ltcG9ydCBqYXZhLmlvLio7CisKK2NsYXNzIGEgeworICAgIHZvaWQgZihJbnB1dFN0cmVhbSBpbikgeworICAgICAgICBmaW5hbCBpbnQgbjsKKyAgICAgICAgaW50IG4xOworICAgICAgICB0cnkgeworICAgICAgICAgICAgbjEgPSBpbi5yZWFkKCk7CisgICAgICAgIH0gY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIDxjYXJldD5uMSA9IC0xOworICAgICAgICAgICAgZihpbik7CisgICAgICAgIH0KKworICAgICAgICBuID0gbjE7CisgICAgICAgIGludCB5ID0gbjsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2RlZmVyRmluYWxBc3NpZ25tZW50L2JlZm9yZTEuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvZGVmZXJGaW5hbEFzc2lnbm1lbnQvYmVmb3JlMS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRhYzI0ODIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2RlZmVyRmluYWxBc3NpZ25tZW50L2JlZm9yZTEuamF2YQpAQCAtMCwwICsxLDE1IEBACisvLyAiRGVmZXIgYXNzaWdubWVudCB0byAnbicgdXNpbmcgdGVtcCB2YXJpYWJsZSIgInRydWUiCitpbXBvcnQgamF2YS5pby4qOworCitjbGFzcyBhIHsKKyAgICB2b2lkIGYoSW5wdXRTdHJlYW0gaW4pIHsKKyAgICAgICAgZmluYWwgaW50IG47CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBuID0gaW4ucmVhZCgpOworICAgICAgICB9IGNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICA8Y2FyZXQ+biA9IC0xOworICAgICAgICB9CisgICAgICAgIGludCB5ID0gNDsKKyAgICB9Cit9CisKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvZGVmZXJGaW5hbEFzc2lnbm1lbnQvYmVmb3JlMi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9kZWZlckZpbmFsQXNzaWdubWVudC9iZWZvcmUyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmUzYWI3ZQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvZGVmZXJGaW5hbEFzc2lnbm1lbnQvYmVmb3JlMi5qYXZhCkBAIC0wLDAgKzEsMTcgQEAKKy8vICJEZWZlciBhc3NpZ25tZW50IHRvICduJyB1c2luZyB0ZW1wIHZhcmlhYmxlIiAidHJ1ZSIKK2ltcG9ydCBqYXZhLmlvLio7CisKK2NsYXNzIGEgeworICAgIHZvaWQgZihJbnB1dFN0cmVhbSBpbikgeworICAgICAgICBmaW5hbCBpbnQgbjsKKyAgICAgICAgaWYgKGluPT1udWxsKSB7CisgICAgICAgICAgICBuPSAyOworICAgICAgICAgICAgPGNhcmV0Pm49IDI7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBuPTQ7CisgICAgICAgIH0KKyAgICAgICAgaW50IHAgPSA2OworICAgIH0KK30KKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9kZWZlckZpbmFsQXNzaWdubWVudC9iZWZvcmUzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2RlZmVyRmluYWxBc3NpZ25tZW50L2JlZm9yZTMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kODdhZjM3Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9kZWZlckZpbmFsQXNzaWdubWVudC9iZWZvcmUzLmphdmEKQEAgLTAsMCArMSwyMCBAQAorLy8gIkRlZmVyIGFzc2lnbm1lbnQgdG8gJ24nIHVzaW5nIHRlbXAgdmFyaWFibGUiICJ0cnVlIgoraW1wb3J0IGphdmEuaW8uKjsKKworY2xhc3MgYSB7CisgICAgdm9pZCBmKElucHV0U3RyZWFtIGluKSB7CisgICAgICAgIGZpbmFsIGludCBuOworICAgICAgICBpZiAoaW49PW51bGwpIHsKKyAgICAgICAgICAgIG49IDI7CisgICAgICAgICAgICA8Y2FyZXQ+bj0gMjsKKyAgICAgICAgICAgIGludCBoID0gbjsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIG49NDsKKyAgICAgICAgfQorICAgICAgICBmKG4pOworICAgICAgICBpbnQgcCA9IG47CisgICAgfQorICAgIHZvaWQgZihpbnQgaSkge30KK30KKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9kZWZlckZpbmFsQXNzaWdubWVudC9iZWZvcmU0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2RlZmVyRmluYWxBc3NpZ25tZW50L2JlZm9yZTQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMjk3YWVjCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9kZWZlckZpbmFsQXNzaWdubWVudC9iZWZvcmU0LmphdmEKQEAgLTAsMCArMSwyMCBAQAorLy8gIkRlZmVyIGFzc2lnbm1lbnQgdG8gJ24nIHVzaW5nIHRlbXAgdmFyaWFibGUiICJ0cnVlIgoraW1wb3J0IGphdmEuaW8uKjsKKworY2xhc3MgYSB7CisgICAgZmluYWwgaW50IG47CisgICAgYShJbnB1dFN0cmVhbSBpbikgeworICAgICAgICBpZiAoaW49PW51bGwpIHsKKyAgICAgICAgICAgIG49IDI7CisgICAgICAgICAgICA8Y2FyZXQ+bj0gMjsKKyAgICAgICAgICAgIGludCBoID0gbjsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIG49NDsKKyAgICAgICAgfQorICAgICAgICBmKG4pOworICAgICAgICBpbnQgcCA9IG47CisgICAgfQorICAgIHZvaWQgZihpbnQgaSkge30KK30KKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9kZWZlckZpbmFsQXNzaWdubWVudC9iZWZvcmU1LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2RlZmVyRmluYWxBc3NpZ25tZW50L2JlZm9yZTUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OGQ4ZTQ0Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9kZWZlckZpbmFsQXNzaWdubWVudC9iZWZvcmU1LmphdmEKQEAgLTAsMCArMSwxMiBAQAorLy8gIkRlZmVyIGFzc2lnbm1lbnQgdG8gJ2knIHVzaW5nIHRlbXAgdmFyaWFibGUiICJ0cnVlIgoraW1wb3J0IGphdmEuaW8uKjsKKworY2xhc3MgYSB7CisgICAgdm9pZCBmKGludCBrKSB7CisgICAgICAgIGZpbmFsIGludCBpOworICAgICAgICBpID0gNDsKKyAgICAgICAgPGNhcmV0PmkgPSA0OworICAgICAgICBmKGkpOworICAgIH0KK30KKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9kZWZlckZpbmFsQXNzaWdubWVudC9iZWZvcmU2LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2RlZmVyRmluYWxBc3NpZ25tZW50L2JlZm9yZTYuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNzNkMWE0Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9kZWZlckZpbmFsQXNzaWdubWVudC9iZWZvcmU2LmphdmEKQEAgLTAsMCArMSwxMCBAQAorLy8gIkRlZmVyIGFzc2lnbm1lbnQgdG8gJ24nIHVzaW5nIHRlbXAgdmFyaWFibGUiICJ0cnVlIgoraW1wb3J0IGphdmEuaW8uKjsKKworY2xhc3MgYSB7CisgICAgZmluYWwgaW50IG47CisgICAgeworICAgICAgICBuPTM7CisgICAgICAgIDxjYXJldD5uPTM7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9kZWZlckZpbmFsQXNzaWdubWVudC9iZWZvcmU3LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2RlZmVyRmluYWxBc3NpZ25tZW50L2JlZm9yZTcuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYTUwMjA1Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9kZWZlckZpbmFsQXNzaWdubWVudC9iZWZvcmU3LmphdmEKQEAgLTAsMCArMSwxMCBAQAorLy8gIkRlZmVyIGFzc2lnbm1lbnQgdG8gJ24nIHVzaW5nIHRlbXAgdmFyaWFibGUiICJ0cnVlIgoraW1wb3J0IGphdmEuaW8uKjsKKworY2xhc3MgYSB7CisgICAgZmluYWwgaW50IG47CisgICAgYShpbnQgbikgeworICAgICAgICB0aGlzLm49bjsKKyAgICAgICAgPGNhcmV0PnRoaXMubj1uOworICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvZGVmZXJGaW5hbEFzc2lnbm1lbnQvYmVmb3JlOC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9kZWZlckZpbmFsQXNzaWdubWVudC9iZWZvcmU4LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjk1NjYzNAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvZGVmZXJGaW5hbEFzc2lnbm1lbnQvYmVmb3JlOC5qYXZhCkBAIC0wLDAgKzEsMTYgQEAKKy8vICJEZWZlciBhc3NpZ25tZW50IHRvICduJyB1c2luZyB0ZW1wIHZhcmlhYmxlIiAidHJ1ZSIKK2ltcG9ydCBqYXZhLmlvLio7CisKK2NsYXNzIGEgeworICAgIHZvaWQgZihJbnB1dFN0cmVhbSBpbikgeworICAgICAgICBmaW5hbCBpbnQgbjsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIG4gPSBpbi5yZWFkKCk7CisgICAgICAgIH0gY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIDxjYXJldD5uID0gLTE7CisgICAgICAgICAgICBmKGluKTsKKyAgICAgICAgfQorCisgICAgICAgIGludCB5ID0gbjsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2RlbGVnYXRlV2l0aERlZmF1bHRWYWx1ZS9hZnRlcjEuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvZGVsZWdhdGVXaXRoRGVmYXVsdFZhbHVlL2FmdGVyMS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYzN2JhZTIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2RlbGVnYXRlV2l0aERlZmF1bHRWYWx1ZS9hZnRlcjEuamF2YQpAQCAtMCwwICsxLDkgQEAKKy8vICJHZW5lcmF0ZSBkZWxlZ2F0ZWQgbWV0aG9kIHdpdGggZGVmYXVsdCBwYXJhbWV0ZXIgdmFsdWUiICJ0cnVlIgorY2xhc3MgVGVzdCB7CisgICAgdm9pZCBmb28oKSB7CisgICAgICBmb28oPGNhcmV0Pik7CisgIH0KKworICAgIHZvaWQgZm9vKGludCBpaSl7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2RlbGVnYXRlV2l0aERlZmF1bHRWYWx1ZS9hZnRlckFic3RyYWN0TWV0aG9kLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2RlbGVnYXRlV2l0aERlZmF1bHRWYWx1ZS9hZnRlckFic3RyYWN0TWV0aG9kLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGVlOGYwYgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvZGVsZWdhdGVXaXRoRGVmYXVsdFZhbHVlL2FmdGVyQWJzdHJhY3RNZXRob2QuamF2YQpAQCAtMCwwICsxLDggQEAKKy8vICJHZW5lcmF0ZSBkZWxlZ2F0ZWQgbWV0aG9kIHdpdGggZGVmYXVsdCBwYXJhbWV0ZXIgdmFsdWUiICJ0cnVlIgorYWJzdHJhY3QgY2xhc3MgVGVzdCB7CisgICAgaW50IGZvbyhib29sZWFuLi4uIGFyZ3MpIHsKKyAgICAgIHJldHVybiBmb28oPGNhcmV0PiwgYXJncyk7CisgIH0KKworICAgIGFic3RyYWN0IGludCBmb28oaW50IGlpLCBib29sZWFuLi4uIGFyZ3MpOworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvZGVsZWdhdGVXaXRoRGVmYXVsdFZhbHVlL2FmdGVyQ29tbWVudHNJbkJvZHkuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvZGVsZWdhdGVXaXRoRGVmYXVsdFZhbHVlL2FmdGVyQ29tbWVudHNJbkJvZHkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOTA0NDc2Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9kZWxlZ2F0ZVdpdGhEZWZhdWx0VmFsdWUvYWZ0ZXJDb21tZW50c0luQm9keS5qYXZhCkBAIC0wLDAgKzEsMTMgQEAKKy8vICJHZW5lcmF0ZSBkZWxlZ2F0ZWQgbWV0aG9kIHdpdGggZGVmYXVsdCBwYXJhbWV0ZXIgdmFsdWUiICJ0cnVlIgorY2xhc3MgVGVzdCB7CisgICAgaW50IGZvbygpIHsKKyAgICAgIHJldHVybiBmb28oKTsKKyAgfQorCisgICAgaW50IGZvbyhpbnQgaWkpeworICAgIC8vY29tbWVudDEKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIiIpOworICAgIC8vY29tbWVudDIKKyAgICByZXR1cm4gMTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvZGVsZWdhdGVXaXRoRGVmYXVsdFZhbHVlL2FmdGVyQ29uc3RydWN0b3IuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvZGVsZWdhdGVXaXRoRGVmYXVsdFZhbHVlL2FmdGVyQ29uc3RydWN0b3IuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYmE0ZGUyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9kZWxlZ2F0ZVdpdGhEZWZhdWx0VmFsdWUvYWZ0ZXJDb25zdHJ1Y3Rvci5qYXZhCkBAIC0wLDAgKzEsOCBAQAorLy8gIkdlbmVyYXRlIGRlbGVnYXRlZCBtZXRob2Qgd2l0aCBkZWZhdWx0IHBhcmFtZXRlciB2YWx1ZSIgInRydWUiCitjbGFzcyBUZXN0IHsKKyAgICBUZXN0KCkgeworICAgICAgdGhpcyg8Y2FyZXQ+KTsKKyAgfQorCisgICAgVGVzdChpbnQgaWkpe30KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2RlbGVnYXRlV2l0aERlZmF1bHRWYWx1ZS9hZnRlckphdmFkb2MuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvZGVsZWdhdGVXaXRoRGVmYXVsdFZhbHVlL2FmdGVySmF2YWRvYy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg2MzdhYWYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2RlbGVnYXRlV2l0aERlZmF1bHRWYWx1ZS9hZnRlckphdmFkb2MuamF2YQpAQCAtMCwwICsxLDE0IEBACisvLyAiR2VuZXJhdGUgZGVsZWdhdGVkIG1ldGhvZCB3aXRoIGRlZmF1bHQgcGFyYW1ldGVyIHZhbHVlIiAidHJ1ZSIKK2NsYXNzIFRlc3QgeworICAgIC8qKiAgCisgICAqLworICB2b2lkIGZvbygpIHsKKyAgICAgIGZvbygpOworICB9CisKKyAgICAvKioKKyAgICogQHBhcmFtIGkKKyAgICovCisgIHZvaWQgZm9vKGludCBpaSl7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2RlbGVnYXRlV2l0aERlZmF1bHRWYWx1ZS9hZnRlclJldHVyblZhbHVlLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2RlbGVnYXRlV2l0aERlZmF1bHRWYWx1ZS9hZnRlclJldHVyblZhbHVlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzljODE4NgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvZGVsZWdhdGVXaXRoRGVmYXVsdFZhbHVlL2FmdGVyUmV0dXJuVmFsdWUuamF2YQpAQCAtMCwwICsxLDEwIEBACisvLyAiR2VuZXJhdGUgZGVsZWdhdGVkIG1ldGhvZCB3aXRoIGRlZmF1bHQgcGFyYW1ldGVyIHZhbHVlIiAidHJ1ZSIKK2NsYXNzIFRlc3QgeworICAgIGludCBmb28oKSB7CisgICAgICByZXR1cm4gZm9vKDxjYXJldD4pOworICB9CisKKyAgICBpbnQgZm9vKGludCBpaSl7CisgICAgcmV0dXJuIDE7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2RlbGVnYXRlV2l0aERlZmF1bHRWYWx1ZS9hZnRlclR5cGVQYXJhbXMuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvZGVsZWdhdGVXaXRoRGVmYXVsdFZhbHVlL2FmdGVyVHlwZVBhcmFtcy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc2ZDZlYmUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2RlbGVnYXRlV2l0aERlZmF1bHRWYWx1ZS9hZnRlclR5cGVQYXJhbXMuamF2YQpAQCAtMCwwICsxLDEwIEBACisvLyAiR2VuZXJhdGUgZGVsZWdhdGVkIG1ldGhvZCB3aXRoIGRlZmF1bHQgcGFyYW1ldGVyIHZhbHVlIiAidHJ1ZSIKK2NsYXNzIFRlc3QgeworICAgIDxUPiBpbnQgZm9vKGJvb2xlYW4uLi4gYXJncykgeworICAgICAgcmV0dXJuIGZvbyg8Y2FyZXQ+LCBhcmdzKTsKKyAgfQorCisgICAgPFQ+IGludCBmb28oVCBpaSwgYm9vbGVhbi4uLiBhcmdzKXsKKyAgICByZXR1cm4gMTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvZGVsZWdhdGVXaXRoRGVmYXVsdFZhbHVlL2FmdGVyVmFyYXJncy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9kZWxlZ2F0ZVdpdGhEZWZhdWx0VmFsdWUvYWZ0ZXJWYXJhcmdzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjE2NDU3OQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvZGVsZWdhdGVXaXRoRGVmYXVsdFZhbHVlL2FmdGVyVmFyYXJncy5qYXZhCkBAIC0wLDAgKzEsMTAgQEAKKy8vICJHZW5lcmF0ZSBkZWxlZ2F0ZWQgbWV0aG9kIHdpdGggZGVmYXVsdCBwYXJhbWV0ZXIgdmFsdWUiICJ0cnVlIgorY2xhc3MgVGVzdCB7CisgICAgaW50IGZvbyhib29sZWFuLi4uIGFyZ3MpIHsKKyAgICAgIHJldHVybiBmb28oPGNhcmV0PiwgYXJncyk7CisgIH0KKworICAgIGludCBmb28oaW50IGlpLCBib29sZWFuLi4uIGFyZ3MpeworICAgIHJldHVybiAxOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9kZWxlZ2F0ZVdpdGhEZWZhdWx0VmFsdWUvYmVmb3JlMS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9kZWxlZ2F0ZVdpdGhEZWZhdWx0VmFsdWUvYmVmb3JlMS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIyYjc3NjAKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2RlbGVnYXRlV2l0aERlZmF1bHRWYWx1ZS9iZWZvcmUxLmphdmEKQEAgLTAsMCArMSw1IEBACisvLyAiR2VuZXJhdGUgZGVsZWdhdGVkIG1ldGhvZCB3aXRoIGRlZmF1bHQgcGFyYW1ldGVyIHZhbHVlIiAidHJ1ZSIKK2NsYXNzIFRlc3QgeworICB2b2lkIGZvbyhpbnQgaTxjYXJldD5pKXsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvZGVsZWdhdGVXaXRoRGVmYXVsdFZhbHVlL2JlZm9yZUFic3RyYWN0TWV0aG9kLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2RlbGVnYXRlV2l0aERlZmF1bHRWYWx1ZS9iZWZvcmVBYnN0cmFjdE1ldGhvZC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUyOThiYzcKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2RlbGVnYXRlV2l0aERlZmF1bHRWYWx1ZS9iZWZvcmVBYnN0cmFjdE1ldGhvZC5qYXZhCkBAIC0wLDAgKzEsNCBAQAorLy8gIkdlbmVyYXRlIGRlbGVnYXRlZCBtZXRob2Qgd2l0aCBkZWZhdWx0IHBhcmFtZXRlciB2YWx1ZSIgInRydWUiCithYnN0cmFjdCBjbGFzcyBUZXN0IHsKKyAgYWJzdHJhY3QgaW50IGZvbyhpbnQgaTxjYXJldD5pLCBib29sZWFuLi4uIGFyZ3MpOworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvZGVsZWdhdGVXaXRoRGVmYXVsdFZhbHVlL2JlZm9yZUNvbW1lbnRzSW5Cb2R5LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2RlbGVnYXRlV2l0aERlZmF1bHRWYWx1ZS9iZWZvcmVDb21tZW50c0luQm9keS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJkZDZmYzgKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2RlbGVnYXRlV2l0aERlZmF1bHRWYWx1ZS9iZWZvcmVDb21tZW50c0luQm9keS5qYXZhCkBAIC0wLDAgKzEsOSBAQAorLy8gIkdlbmVyYXRlIGRlbGVnYXRlZCBtZXRob2Qgd2l0aCBkZWZhdWx0IHBhcmFtZXRlciB2YWx1ZSIgInRydWUiCitjbGFzcyBUZXN0IHsKKyAgaW50IGZvbyhpbnQgaTxjYXJldD5pKXsKKyAgICAvL2NvbW1lbnQxCisgICAgU3lzdGVtLm91dC5wcmludGxuKCIiKTsKKyAgICAvL2NvbW1lbnQyCisgICAgcmV0dXJuIDE7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2RlbGVnYXRlV2l0aERlZmF1bHRWYWx1ZS9iZWZvcmVDb25zdHJ1Y3Rvci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9kZWxlZ2F0ZVdpdGhEZWZhdWx0VmFsdWUvYmVmb3JlQ29uc3RydWN0b3IuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZDc1YzM5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9kZWxlZ2F0ZVdpdGhEZWZhdWx0VmFsdWUvYmVmb3JlQ29uc3RydWN0b3IuamF2YQpAQCAtMCwwICsxLDQgQEAKKy8vICJHZW5lcmF0ZSBkZWxlZ2F0ZWQgbWV0aG9kIHdpdGggZGVmYXVsdCBwYXJhbWV0ZXIgdmFsdWUiICJ0cnVlIgorY2xhc3MgVGVzdCB7CisgIFRlc3QoaW50IGk8Y2FyZXQ+aSl7fQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvZGVsZWdhdGVXaXRoRGVmYXVsdFZhbHVlL2JlZm9yZUV4aXN0aW5NZXRob2QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvZGVsZWdhdGVXaXRoRGVmYXVsdFZhbHVlL2JlZm9yZUV4aXN0aW5NZXRob2QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZDVmZjFiCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9kZWxlZ2F0ZVdpdGhEZWZhdWx0VmFsdWUvYmVmb3JlRXhpc3Rpbk1ldGhvZC5qYXZhCkBAIC0wLDAgKzEsNiBAQAorLy8gIkdlbmVyYXRlIGRlbGVnYXRlZCBtZXRob2Qgd2l0aCBkZWZhdWx0IHBhcmFtZXRlciB2YWx1ZSIgImZhbHNlIgorY2xhc3MgVGVzdCB7CisgIHZvaWQgZm9vKCl7fQorICB2b2lkIGZvbyhpbnQgaTxjYXJldD5pKXsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvZGVsZWdhdGVXaXRoRGVmYXVsdFZhbHVlL2JlZm9yZUludGVyZmFjZS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9kZWxlZ2F0ZVdpdGhEZWZhdWx0VmFsdWUvYmVmb3JlSW50ZXJmYWNlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTE4ZmRiYQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvZGVsZWdhdGVXaXRoRGVmYXVsdFZhbHVlL2JlZm9yZUludGVyZmFjZS5qYXZhCkBAIC0wLDAgKzEsNCBAQAorLy8gIkdlbmVyYXRlIGRlbGVnYXRlZCBtZXRob2Qgd2l0aCBkZWZhdWx0IHBhcmFtZXRlciB2YWx1ZSIgImZhbHNlIgoraW50ZXJmYWNlIFRlc3QgeworICB2b2lkIGZvbyhpbnQgaTxjYXJldD5pKTsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2RlbGVnYXRlV2l0aERlZmF1bHRWYWx1ZS9iZWZvcmVKYXZhZG9jLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2RlbGVnYXRlV2l0aERlZmF1bHRWYWx1ZS9iZWZvcmVKYXZhZG9jLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzZhY2MwMwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvZGVsZWdhdGVXaXRoRGVmYXVsdFZhbHVlL2JlZm9yZUphdmFkb2MuamF2YQpAQCAtMCwwICsxLDggQEAKKy8vICJHZW5lcmF0ZSBkZWxlZ2F0ZWQgbWV0aG9kIHdpdGggZGVmYXVsdCBwYXJhbWV0ZXIgdmFsdWUiICJ0cnVlIgorY2xhc3MgVGVzdCB7CisgIC8qKgorICAgKiBAcGFyYW0gaQorICAgKi8KKyAgdm9pZCBmb28oaW50IGk8Y2FyZXQ+aSl7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2RlbGVnYXRlV2l0aERlZmF1bHRWYWx1ZS9iZWZvcmVSZXR1cm5WYWx1ZS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9kZWxlZ2F0ZVdpdGhEZWZhdWx0VmFsdWUvYmVmb3JlUmV0dXJuVmFsdWUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNzdkMTc0Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9kZWxlZ2F0ZVdpdGhEZWZhdWx0VmFsdWUvYmVmb3JlUmV0dXJuVmFsdWUuamF2YQpAQCAtMCwwICsxLDYgQEAKKy8vICJHZW5lcmF0ZSBkZWxlZ2F0ZWQgbWV0aG9kIHdpdGggZGVmYXVsdCBwYXJhbWV0ZXIgdmFsdWUiICJ0cnVlIgorY2xhc3MgVGVzdCB7CisgIGludCBmb28oaW50IGk8Y2FyZXQ+aSl7CisgICAgcmV0dXJuIDE7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2RlbGVnYXRlV2l0aERlZmF1bHRWYWx1ZS9iZWZvcmVUeXBlUGFyYW1zLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2RlbGVnYXRlV2l0aERlZmF1bHRWYWx1ZS9iZWZvcmVUeXBlUGFyYW1zLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTllNzdkNAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvZGVsZWdhdGVXaXRoRGVmYXVsdFZhbHVlL2JlZm9yZVR5cGVQYXJhbXMuamF2YQpAQCAtMCwwICsxLDYgQEAKKy8vICJHZW5lcmF0ZSBkZWxlZ2F0ZWQgbWV0aG9kIHdpdGggZGVmYXVsdCBwYXJhbWV0ZXIgdmFsdWUiICJ0cnVlIgorY2xhc3MgVGVzdCB7CisgIDxUPiBpbnQgZm9vKFQgaTxjYXJldD5pLCBib29sZWFuLi4uIGFyZ3MpeworICAgIHJldHVybiAxOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9kZWxlZ2F0ZVdpdGhEZWZhdWx0VmFsdWUvYmVmb3JlVmFyYXJncy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9kZWxlZ2F0ZVdpdGhEZWZhdWx0VmFsdWUvYmVmb3JlVmFyYXJncy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg2NWU4NmQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2RlbGVnYXRlV2l0aERlZmF1bHRWYWx1ZS9iZWZvcmVWYXJhcmdzLmphdmEKQEAgLTAsMCArMSw2IEBACisvLyAiR2VuZXJhdGUgZGVsZWdhdGVkIG1ldGhvZCB3aXRoIGRlZmF1bHQgcGFyYW1ldGVyIHZhbHVlIiAidHJ1ZSIKK2NsYXNzIFRlc3QgeworICBpbnQgZm9vKGludCBpPGNhcmV0PmksIGJvb2xlYW4uLi4gYXJncyl7CisgICAgcmV0dXJuIDE7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2RlbGV0ZUNhdGNoL2FmdGVyMS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9kZWxldGVDYXRjaC9hZnRlcjEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NWM0MDZmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9kZWxldGVDYXRjaC9hZnRlcjEuamF2YQpAQCAtMCwwICsxLDEwIEBACisvLyAiRGVsZXRlIGNhdGNoIGZvciAnamF2YS5pby5JT0V4Y2VwdGlvbiciICJ0cnVlIgoraW1wb3J0IGphdmEuaW8uKjsKKworY2xhc3MgYSB7Cisgdm9pZCBmKGludCBpKSB7CisgICAgIGludCBwID0gMDs8Y2FyZXQ+CisKKyB9Cit9CisKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvZGVsZXRlQ2F0Y2gvYWZ0ZXIyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2RlbGV0ZUNhdGNoL2FmdGVyMi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ0MDQ5YTYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2RlbGV0ZUNhdGNoL2FmdGVyMi5qYXZhCkBAIC0wLDAgKzEsMTMgQEAKKy8vICJEZWxldGUgY2F0Y2ggZm9yICdqYXZhLmlvLklPRXhjZXB0aW9uJyIgInRydWUiCitpbXBvcnQgamF2YS5pby4qOworCitjbGFzcyBhIHsKKyB2b2lkIGYoaW50IGkpIHsKKyAgICAgdHJ5IHsKKyAgICAgICAgIGludCBwID0gMDsKKyAgICAgfTxjYXJldD4gY2F0Y2ggKEV4Y2VwdGlvbiBlKSAgeworICAgICB9CisKKyB9Cit9CisKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvZGVsZXRlQ2F0Y2gvYWZ0ZXI0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2RlbGV0ZUNhdGNoL2FmdGVyNC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJkMzcxYWMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2RlbGV0ZUNhdGNoL2FmdGVyNC5qYXZhCkBAIC0wLDAgKzEsMTMgQEAKKy8vICJEZWxldGUgY2F0Y2ggZm9yICdqYXZhLmlvLklPRXhjZXB0aW9uJyIgInRydWUiCitpbXBvcnQgamF2YS5pby4qOworCitjbGFzcyBjIHsKKyAgdm9pZCBmKCkgeworICAgICAgaW50IGlkID0gMDsKKyAgICAgIHRyeSB7CisKKyAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisKKyAgICAgIH08Y2FyZXQ+CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2RlbGV0ZUNhdGNoL2FmdGVyNS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9kZWxldGVDYXRjaC9hZnRlcjUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NzkyMmYwCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9kZWxldGVDYXRjaC9hZnRlcjUuamF2YQpAQCAtMCwwICsxLDEzIEBACisvLyAiRGVsZXRlIGNhdGNoIGZvciAnamF2YS5pby5JT0V4Y2VwdGlvbiciICJ0cnVlIgoraW1wb3J0IGphdmEuaW8uKjsKKworY2xhc3MgYSB7Cisgdm9pZCBmKGludCBpKSB7CisgICAgIC8vIGNvbW0xCisgICAgIGludCBwID0gMDsKKworICAgICAvLyBjb21tMgorCisgfQorfQorCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2RlbGV0ZUNhdGNoL2FmdGVyNi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9kZWxldGVDYXRjaC9hZnRlcjYuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZDVmMGNhCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9kZWxldGVDYXRjaC9hZnRlcjYuamF2YQpAQCAtMCwwICsxLDExIEBACisvLyAiRGVsZXRlIGNhdGNoIGZvciAnamF2YS5pby5JT0V4Y2VwdGlvbiciICJ0cnVlIgoraW1wb3J0IGphdmEuaW8uKjsKKworY2xhc3MgYSB7CisgICAgdm9pZCBmKGJvb2xlYW4gZikgeworICAgICAgICBpZiAoZikgeworICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCk7CisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oKTsKKyAgICAgICAgfQorICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvZGVsZXRlQ2F0Y2gvYmVmb3JlMS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9kZWxldGVDYXRjaC9iZWZvcmUxLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmY0ZjIxZgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvZGVsZXRlQ2F0Y2gvYmVmb3JlMS5qYXZhCkBAIC0wLDAgKzEsMTQgQEAKKy8vICJEZWxldGUgY2F0Y2ggZm9yICdqYXZhLmlvLklPRXhjZXB0aW9uJyIgInRydWUiCitpbXBvcnQgamF2YS5pby4qOworCitjbGFzcyBhIHsKKyB2b2lkIGYoaW50IGkpIHsKKyAgICAgdHJ5IHsKKyAgICAgICAgIGludCBwID0gMDsKKyAgICAgfQorICAgICBjYXRjaCAoPGNhcmV0PklPRXhjZXB0aW9uIGUpICB7CisgICAgIH0KKworIH0KK30KKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9kZWxldGVDYXRjaC9iZWZvcmUyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2RlbGV0ZUNhdGNoL2JlZm9yZTIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZWNlOGVlCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9kZWxldGVDYXRjaC9iZWZvcmUyLmphdmEKQEAgLTAsMCArMSwxNiBAQAorLy8gIkRlbGV0ZSBjYXRjaCBmb3IgJ2phdmEuaW8uSU9FeGNlcHRpb24nIiAidHJ1ZSIKK2ltcG9ydCBqYXZhLmlvLio7CisKK2NsYXNzIGEgeworIHZvaWQgZihpbnQgaSkgeworICAgICB0cnkgeworICAgICAgICAgaW50IHAgPSAwOworICAgICB9CisgICAgIGNhdGNoICg8Y2FyZXQ+SU9FeGNlcHRpb24gZSkgIHsKKyAgICAgfQorICAgICBjYXRjaCAoRXhjZXB0aW9uIGUpICB7CisgICAgIH0KKworIH0KK30KKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9kZWxldGVDYXRjaC9iZWZvcmUzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2RlbGV0ZUNhdGNoL2JlZm9yZTMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNjE4NjQ4Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9kZWxldGVDYXRjaC9iZWZvcmUzLmphdmEKQEAgLTAsMCArMSwxNyBAQAorLy8gIkRlbGV0ZSBjYXRjaCBmb3IgJ2phdmEuaW8uSU9FeGNlcHRpb24nIiAiZmFsc2UiCitpbXBvcnQgamF2YS5pby4qOworCitjbGFzcyBhIHsKKyB2b2lkIGYoaW50IGkpIHsKKyAgICAgdHJ5IHsKKyAgICAgICAgIGludCBwID0gMDsKKyAgICAgICAgIHRocm93IG5ldyBJT0V4Y2VwdGlvbigpOworICAgICB9CisgICAgIGNhdGNoICg8Y2FyZXQ+SU9FeGNlcHRpb24gZSkgIHsKKyAgICAgfQorICAgICBjYXRjaCAoRXhjZXB0aW9uIGUpICB7CisgICAgIH0KKworIH0KK30KKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9kZWxldGVDYXRjaC9iZWZvcmU0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2RlbGV0ZUNhdGNoL2JlZm9yZTQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NWRhOWFiCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9kZWxldGVDYXRjaC9iZWZvcmU0LmphdmEKQEAgLTAsMCArMSwxOCBAQAorLy8gIkRlbGV0ZSBjYXRjaCBmb3IgJ2phdmEuaW8uSU9FeGNlcHRpb24nIiAidHJ1ZSIKK2ltcG9ydCBqYXZhLmlvLio7CisKK2NsYXNzIGMgeworICB2b2lkIGYoKSB7CisgICAgdHJ5IHsKKyAgICAgIGludCBpZCA9IDA7CisgICAgICB0cnkgeworCisgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgeworCisgICAgICB9CisgICAgfQorICAgIGNhdGNoICg8Y2FyZXQ+SU9FeGNlcHRpb24gZSkgeworCisgICAgfQorICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9kZWxldGVDYXRjaC9iZWZvcmU1LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2RlbGV0ZUNhdGNoL2JlZm9yZTUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OTY2Nzg3Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9kZWxldGVDYXRjaC9iZWZvcmU1LmphdmEKQEAgLTAsMCArMSwxOCBAQAorLy8gIkRlbGV0ZSBjYXRjaCBmb3IgJ2phdmEuaW8uSU9FeGNlcHRpb24nIiAidHJ1ZSIKK2ltcG9ydCBqYXZhLmlvLio7CisKK2NsYXNzIGEgeworIHZvaWQgZihpbnQgaSkgeworICAgICB0cnkgeworICAgICAgICAgLy8gY29tbTEKKyAgICAgICAgIGludCBwID0gMDsKKworICAgICAgICAgLy8gY29tbTIKKworICAgICB9CisgICAgIGNhdGNoICg8Y2FyZXQ+SU9FeGNlcHRpb24gZSkgIHsKKyAgICAgfQorCisgfQorfQorCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2RlbGV0ZUNhdGNoL2JlZm9yZTYuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvZGVsZXRlQ2F0Y2gvYmVmb3JlNi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhiOTU0ZjkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2RlbGV0ZUNhdGNoL2JlZm9yZTYuamF2YQpAQCAtMCwwICsxLDEzIEBACisvLyAiRGVsZXRlIGNhdGNoIGZvciAnamF2YS5pby5JT0V4Y2VwdGlvbiciICJ0cnVlIgoraW1wb3J0IGphdmEuaW8uKjsKKworY2xhc3MgYSB7CisgICAgdm9pZCBmKGJvb2xlYW4gZikgeworICAgICAgICBpZiAoZikKKyAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCk7CisgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCk7CisgICAgICAgICAgICB9IGNhdGNoICg8Y2FyZXQ+SU9FeGNlcHRpb24gZSkgeworICAgICAgICAgICAgfQorICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvZGVsZXRlTXVsdGlDYXRjaC9hZnRlcjEuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvZGVsZXRlTXVsdGlDYXRjaC9hZnRlcjEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOTAyMDViCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9kZWxldGVNdWx0aUNhdGNoL2FmdGVyMS5qYXZhCkBAIC0wLDAgKzEsMTIgQEAKKy8vICJEZWxldGUgY2F0Y2ggZm9yICdqYXZhLmlvLklPRXhjZXB0aW9uJyIgInRydWUiCitpbXBvcnQgamF2YS5pby4qOworCitjbGFzcyBDIHsKKyAgdm9pZCBtKCkgeworICAgIHRyeSB7CisgICAgICBpbnQgcCA9IDA7CisgICAgfQorICAgIGNhdGNoICgvKnNvbWV0aGloZyovIFJ1bnRpbWVFeGNlcHRpb24gZSkgeworICAgIH0KKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9kZWxldGVNdWx0aUNhdGNoL2FmdGVyMi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9kZWxldGVNdWx0aUNhdGNoL2FmdGVyMi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZjZDI4ZDMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2RlbGV0ZU11bHRpQ2F0Y2gvYWZ0ZXIyLmphdmEKQEAgLTAsMCArMSwxMiBAQAorLy8gIkRlbGV0ZSBjYXRjaCBmb3IgJ2phdmEuaW8uRmlsZU5vdEZvdW5kRXhjZXB0aW9uJyIgInRydWUiCitpbXBvcnQgamF2YS5pby4qOworCitjbGFzcyBDIHsKKyAgdm9pZCBtKCkgeworICAgIHRyeSB7CisgICAgICBpbnQgcCA9IDA7CisgICAgfQorICAgIGNhdGNoIChFT0ZFeGNlcHRpb24gLypzb21ldGhpaGcqLyBlKSB7CisgICAgfQorICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2RlbGV0ZU11bHRpQ2F0Y2gvYWZ0ZXIzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2RlbGV0ZU11bHRpQ2F0Y2gvYWZ0ZXIzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTc2YzQ5YwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvZGVsZXRlTXVsdGlDYXRjaC9hZnRlcjMuamF2YQpAQCAtMCwwICsxLDEyIEBACisvLyAiRGVsZXRlIGNhdGNoIGZvciAnamF2YS5pby5GaWxlTm90Rm91bmRFeGNlcHRpb24nIiAidHJ1ZSIKK2ltcG9ydCBqYXZhLmlvLio7CisKK2NsYXNzIEMgeworICB2b2lkIG0oKSB7CisgICAgdHJ5IHsKKyAgICAgIGludCBwID0gMDsKKyAgICB9CisgICAgY2F0Y2ggKEVPRkV4Y2VwdGlvbiB8IFJ1bnRpbWVFeGNlcHRpb24gZSkgeworICAgIH0KKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9kZWxldGVNdWx0aUNhdGNoL2JlZm9yZTEuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvZGVsZXRlTXVsdGlDYXRjaC9iZWZvcmUxLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmIxNGFlNAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvZGVsZXRlTXVsdGlDYXRjaC9iZWZvcmUxLmphdmEKQEAgLTAsMCArMSwxMiBAQAorLy8gIkRlbGV0ZSBjYXRjaCBmb3IgJ2phdmEuaW8uSU9FeGNlcHRpb24nIiAidHJ1ZSIKK2ltcG9ydCBqYXZhLmlvLio7CisKK2NsYXNzIEMgeworICB2b2lkIG0oKSB7CisgICAgdHJ5IHsKKyAgICAgIGludCBwID0gMDsKKyAgICB9CisgICAgY2F0Y2ggKDxjYXJldD5JT0V4Y2VwdGlvbiB8IC8qc29tZXRoaWhnKi8gUnVudGltZUV4Y2VwdGlvbiBlKSB7CisgICAgfQorICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2RlbGV0ZU11bHRpQ2F0Y2gvYmVmb3JlMi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9kZWxldGVNdWx0aUNhdGNoL2JlZm9yZTIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYzZiZjUwCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9kZWxldGVNdWx0aUNhdGNoL2JlZm9yZTIuamF2YQpAQCAtMCwwICsxLDEyIEBACisvLyAiRGVsZXRlIGNhdGNoIGZvciAnamF2YS5pby5GaWxlTm90Rm91bmRFeGNlcHRpb24nIiAidHJ1ZSIKK2ltcG9ydCBqYXZhLmlvLio7CisKK2NsYXNzIEMgeworICB2b2lkIG0oKSB7CisgICAgdHJ5IHsKKyAgICAgIGludCBwID0gMDsKKyAgICB9CisgICAgY2F0Y2ggKEVPRkV4Y2VwdGlvbiB8IDxjYXJldD5GaWxlTm90Rm91bmRFeGNlcHRpb24gLypzb21ldGhpaGcqLyBlKSB7CisgICAgfQorICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2RlbGV0ZU11bHRpQ2F0Y2gvYmVmb3JlMy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9kZWxldGVNdWx0aUNhdGNoL2JlZm9yZTMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYmZiZTRjCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9kZWxldGVNdWx0aUNhdGNoL2JlZm9yZTMuamF2YQpAQCAtMCwwICsxLDEyIEBACisvLyAiRGVsZXRlIGNhdGNoIGZvciAnamF2YS5pby5GaWxlTm90Rm91bmRFeGNlcHRpb24nIiAidHJ1ZSIKK2ltcG9ydCBqYXZhLmlvLio7CisKK2NsYXNzIEMgeworICB2b2lkIG0oKSB7CisgICAgdHJ5IHsKKyAgICAgIGludCBwID0gMDsKKyAgICB9CisgICAgY2F0Y2ggKEVPRkV4Y2VwdGlvbiB8IDxjYXJldD5GaWxlTm90Rm91bmRFeGNlcHRpb24gfCBSdW50aW1lRXhjZXB0aW9uIGUpIHsKKyAgICB9CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvZW1wdHlJbnRlbnRpb24vTG93UHJpb3JpdHkuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvZW1wdHlJbnRlbnRpb24vTG93UHJpb3JpdHkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNjk2ZTZlCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9lbXB0eUludGVudGlvbi9Mb3dQcmlvcml0eS5qYXZhCkBAIC0wLDAgKzEsNiBAQAorY2xhc3MgVGVzdCB7CisgIHZvaWQgbWV0aG9kKCkgeworICAgIGZpbmFsIFN0cmluZyBpID0gIiI7CisgICAgaTxjYXJldD4gPSAiIjsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvZW1wdHlJbnRlbnRpb24vWC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9lbXB0eUludGVudGlvbi9YLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGY2ZjQ3NAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvZW1wdHlJbnRlbnRpb24vWC5qYXZhCkBAIC0wLDAgKzEsMyBAQAorY2xhc3MgWCB7CisgIFN0cmluZyBzID0gImFiPGNhcmV0PiI7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9lbmFibGVPcHRpbWl6ZUltcG9ydHNPblRoZUZseS9iZWZvcmUxLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2VuYWJsZU9wdGltaXplSW1wb3J0c09uVGhlRmx5L2JlZm9yZTEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMTVkNTI1Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9lbmFibGVPcHRpbWl6ZUltcG9ydHNPblRoZUZseS9iZWZvcmUxLmphdmEKQEAgLTAsMCArMSw0IEBACisvLyAiRW5hYmxlICdTZXR0aW5nc3xDb2RlIFN0eWxlfEltcG9ydHN8T3B0aW1pemUgaW1wb3J0cyBvbiB0aGUgZmx5JyIgInRydWUiCitpbXBvcnQgamF2YS5sYW5nLlN0cmluZzxjYXJldD47CisKK2NsYXNzIGMge30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2VuY2Fwc3VsYXRlRmllbGQvYmVmb3JlRmluYWwuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvZW5jYXBzdWxhdGVGaWVsZC9iZWZvcmVGaW5hbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUwODJiMDEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2VuY2Fwc3VsYXRlRmllbGQvYmVmb3JlRmluYWwuamF2YQpAQCAtMCwwICsxLDEzIEBACisvLyAiRW5jYXBzdWxhdGUgZmllbGQiICJmYWxzZSIKKworY2xhc3MgQSB7CisgIHB1YmxpYyBmaW5hbCBib29sZWFuIG1fYm9vbDsKK30KKworcHVibGljIGNsYXNzIEIgeworICB2b2lkIG1ldGhvZCgpIHsKKyAgICBBIGEgPSBuZXcgQSgpOworCisgICAgYS5tX2JvPGNhcmV0Pm9sID0gdHJ1ZTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9lbmNhcHN1bGF0ZUZpZWxkL2JlZm9yZVByaXZhdGUuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvZW5jYXBzdWxhdGVGaWVsZC9iZWZvcmVQcml2YXRlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDYxZDE1MgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvZW5jYXBzdWxhdGVGaWVsZC9iZWZvcmVQcml2YXRlLmphdmEKQEAgLTAsMCArMSwxMyBAQAorLy8gIkVuY2Fwc3VsYXRlIGZpZWxkIiAiZmFsc2UiCisKK2NsYXNzIEEgeworICBwcml2YXRlIGJvb2xlYW4gbV9ib29sOworfQorCitwdWJsaWMgY2xhc3MgQiB7CisgIHZvaWQgbWV0aG9kKCkgeworICAgIEEgYSA9IG5ldyBBKCk7CisKKyAgICBhLm1fYm88Y2FyZXQ+b2wgPSB0cnVlOworICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2VuY2Fwc3VsYXRlRmllbGQvYmVmb3JlVGhpc0NsYXNzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2VuY2Fwc3VsYXRlRmllbGQvYmVmb3JlVGhpc0NsYXNzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDcyMWI3NQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvZW5jYXBzdWxhdGVGaWVsZC9iZWZvcmVUaGlzQ2xhc3MuamF2YQpAQCAtMCwwICsxLDkgQEAKKy8vICJFbmNhcHN1bGF0ZSBmaWVsZCIgImZhbHNlIgorCitjbGFzcyBBIHsKKyAgcHVibGljIGZpbmFsIGJvb2xlYW4gbV9ib29sOworCisgIHZvaWQgbWV0aG9kKCkgeworICAgIG1fYm88Y2FyZXQ+b2wgPSB0cnVlOworICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2VuY2Fwc3VsYXRlRmllbGQvYmVmb3JlVGhpc0NsYXNzUXVhbGlmaWVkLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2VuY2Fwc3VsYXRlRmllbGQvYmVmb3JlVGhpc0NsYXNzUXVhbGlmaWVkLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTRhYTEwMmMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2VuY2Fwc3VsYXRlRmllbGQvYmVmb3JlVGhpc0NsYXNzUXVhbGlmaWVkLmphdmEKQEAgLTAsMCArMSw5IEBACisvLyAiRW5jYXBzdWxhdGUgZmllbGQiICJmYWxzZSIKKworY2xhc3MgQSB7CisgIHB1YmxpYyBmaW5hbCBib29sZWFuIG1fYm9vbDsKKworICB2b2lkIG1ldGhvZCgpIHsKKyAgICB0aGlzLm1fYm88Y2FyZXQ+b2wgPSB0cnVlOworICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2V4cGFuZFN0YXRpY0ltcG9ydC9hZnRlck11bHRpcGxlVmlhT25EZW1hbmQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvZXhwYW5kU3RhdGljSW1wb3J0L2FmdGVyTXVsdGlwbGVWaWFPbkRlbWFuZC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEyYTYyYjQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2V4cGFuZFN0YXRpY0ltcG9ydC9hZnRlck11bHRpcGxlVmlhT25EZW1hbmQuamF2YQpAQCAtMCwwICsxLDkgQEAKKy8vICJFeHBhbmQgc3RhdGljIGltcG9ydCB0byBBcnJheXMuc29ydCIgInRydWUiCitpbXBvcnQgamF2YS51dGlsLkFycmF5czsKKworY2xhc3MgVGVzdCB7CisgICAgcHVibGljIHZvaWQgc2VuZE1lc3NhZ2UoU3RyaW5nLi4uIGRlc3RpbmF0aW9uQWRkcmVzc05hbWVzKSB7CisgICAgICAgIEFycmF5cy5zb3J0KGRlc3RpbmF0aW9uQWRkcmVzc05hbWVzKTsKKyAgICAgICAgQXJyYXlzLmFzTGlzdChkZXN0aW5hdGlvbkFkZHJlc3NOYW1lcykKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9leHBhbmRTdGF0aWNJbXBvcnQvYWZ0ZXJTaW5nbGUuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvZXhwYW5kU3RhdGljSW1wb3J0L2FmdGVyU2luZ2xlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzI5YjM0NgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvZXhwYW5kU3RhdGljSW1wb3J0L2FmdGVyU2luZ2xlLmphdmEKQEAgLTAsMCArMSw4IEBACisvLyAiRXhwYW5kIHN0YXRpYyBpbXBvcnQgdG8gQXJyYXlzLnNvcnQiICJ0cnVlIgoraW1wb3J0IGphdmEudXRpbC5BcnJheXM7CisKK2NsYXNzIFRlc3QgeworICAgIHB1YmxpYyB2b2lkIHNlbmRNZXNzYWdlKFN0cmluZy4uLiBkZXN0aW5hdGlvbkFkZHJlc3NOYW1lcykgeworICAgICAgICBBcnJheXMuc29ydChkZXN0aW5hdGlvbkFkZHJlc3NOYW1lcyk7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvZXhwYW5kU3RhdGljSW1wb3J0L2FmdGVyU2luZ2xlVmlhT25EZW1hbmQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvZXhwYW5kU3RhdGljSW1wb3J0L2FmdGVyU2luZ2xlVmlhT25EZW1hbmQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MjliMzQ2Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9leHBhbmRTdGF0aWNJbXBvcnQvYWZ0ZXJTaW5nbGVWaWFPbkRlbWFuZC5qYXZhCkBAIC0wLDAgKzEsOCBAQAorLy8gIkV4cGFuZCBzdGF0aWMgaW1wb3J0IHRvIEFycmF5cy5zb3J0IiAidHJ1ZSIKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlzOworCitjbGFzcyBUZXN0IHsKKyAgICBwdWJsaWMgdm9pZCBzZW5kTWVzc2FnZShTdHJpbmcuLi4gZGVzdGluYXRpb25BZGRyZXNzTmFtZXMpIHsKKyAgICAgICAgQXJyYXlzLnNvcnQoZGVzdGluYXRpb25BZGRyZXNzTmFtZXMpOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2V4cGFuZFN0YXRpY0ltcG9ydC9iZWZvcmVNdWx0aXBsZVZpYU9uRGVtYW5kLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2V4cGFuZFN0YXRpY0ltcG9ydC9iZWZvcmVNdWx0aXBsZVZpYU9uRGVtYW5kLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmQxODY2OAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvZXhwYW5kU3RhdGljSW1wb3J0L2JlZm9yZU11bHRpcGxlVmlhT25EZW1hbmQuamF2YQpAQCAtMCwwICsxLDkgQEAKKy8vICJFeHBhbmQgc3RhdGljIGltcG9ydCB0byBBcnJheXMuc29ydCIgInRydWUiCitpbXBvcnQgc3RhdGljIGphdmEudXRpbC5BcnJheXMuKjsKKworY2xhc3MgVGVzdCB7CisgICAgcHVibGljIHZvaWQgc2VuZE1lc3NhZ2UoU3RyaW5nLi4uIGRlc3RpbmF0aW9uQWRkcmVzc05hbWVzKSB7CisgICAgICAgIHM8Y2FyZXQ+b3J0KGRlc3RpbmF0aW9uQWRkcmVzc05hbWVzKTsKKyAgICAgICAgYXNMaXN0KGRlc3RpbmF0aW9uQWRkcmVzc05hbWVzKQorICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2V4cGFuZFN0YXRpY0ltcG9ydC9iZWZvcmVTaW5nbGUuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvZXhwYW5kU3RhdGljSW1wb3J0L2JlZm9yZVNpbmdsZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIyZTM0MjMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2V4cGFuZFN0YXRpY0ltcG9ydC9iZWZvcmVTaW5nbGUuamF2YQpAQCAtMCwwICsxLDggQEAKKy8vICJFeHBhbmQgc3RhdGljIGltcG9ydCB0byBBcnJheXMuc29ydCIgInRydWUiCitpbXBvcnQgc3RhdGljIGphdmEudXRpbC5BcnJheXMuc29ydDsKKworY2xhc3MgVGVzdCB7CisgICAgcHVibGljIHZvaWQgc2VuZE1lc3NhZ2UoU3RyaW5nLi4uIGRlc3RpbmF0aW9uQWRkcmVzc05hbWVzKSB7CisgICAgICAgIHM8Y2FyZXQ+b3J0KGRlc3RpbmF0aW9uQWRkcmVzc05hbWVzKTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9leHBhbmRTdGF0aWNJbXBvcnQvYmVmb3JlU2luZ2xlVmlhT25EZW1hbmQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvZXhwYW5kU3RhdGljSW1wb3J0L2JlZm9yZVNpbmdsZVZpYU9uRGVtYW5kLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmM1MjQ0MgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvZXhwYW5kU3RhdGljSW1wb3J0L2JlZm9yZVNpbmdsZVZpYU9uRGVtYW5kLmphdmEKQEAgLTAsMCArMSw4IEBACisvLyAiRXhwYW5kIHN0YXRpYyBpbXBvcnQgdG8gQXJyYXlzLnNvcnQiICJ0cnVlIgoraW1wb3J0IHN0YXRpYyBqYXZhLnV0aWwuQXJyYXlzLio7CisKK2NsYXNzIFRlc3QgeworICAgIHB1YmxpYyB2b2lkIHNlbmRNZXNzYWdlKFN0cmluZy4uLiBkZXN0aW5hdGlvbkFkZHJlc3NOYW1lcykgeworICAgICAgICBzPGNhcmV0Pm9ydChkZXN0aW5hdGlvbkFkZHJlc3NOYW1lcyk7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvZXhwbGljaXQyZGlhbW9uZC9hZnRlcjEuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvZXhwbGljaXQyZGlhbW9uZC9hZnRlcjEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMjU3N2JiCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9leHBsaWNpdDJkaWFtb25kL2FmdGVyMS5qYXZhCkBAIC0wLDAgKzEsNiBAQAorLy8gIlJlcGxhY2Ugd2l0aCA8PiIgInRydWUiCitwdWJsaWMgY2xhc3MgVGVzdCB7CisgIEY8U3RyaW5nPiBmID0gbmV3IEY8PigpOworfQorCitjbGFzcyBGPFQ+IHt9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9leHBsaWNpdDJkaWFtb25kL2FmdGVyNS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9leHBsaWNpdDJkaWFtb25kL2FmdGVyNS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRjYzc0NGMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2V4cGxpY2l0MmRpYW1vbmQvYWZ0ZXI1LmphdmEKQEAgLTAsMCArMSwxNiBAQAorLy8gIlJlcGxhY2Ugd2l0aCA8PiIgInRydWUiCitjbGFzcyBUZXN0IHsKKworICAgIHZvaWQgdGVzdCgpIHsKKyAgICAgICAgY2xhc3MgRm9vPFggZXh0ZW5kcyBOdW1iZXI+IHsKKyAgICAgICAgICAgIEZvbygpIHt9CisgICAgICAgICAgICBGb28oWCB4KSB7fQorICAgICAgICB9CisgICAgICAgIEZvbzxOdW1iZXI+IGYxID0gbmV3IEZvbzxOdW1iZXI+KDEpOworICAgICAgICBGb288Pz4gZjIgPSBuZXcgRm9vPD4oKTsKKyAgICAgICAgRm9vPD8+IGYzID0gbmV3IEZvbzxJbnRlZ2VyPigpOworICAgICAgICBGb288TnVtYmVyPiBmNCA9IG5ldyBGb288TnVtYmVyPigxKSB7fTsKKyAgICAgICAgRm9vPD8+IGY1ID0gbmV3IEZvbzxOdW1iZXI+KCkge307CisgICAgICAgIEZvbzw/PiBmNiA9IG5ldyBGb288SW50ZWdlcj4oKSB7fTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2V4cGxpY2l0MmRpYW1vbmQvYWZ0ZXI2LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2V4cGxpY2l0MmRpYW1vbmQvYWZ0ZXI2LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2Y5YmYyNAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvZXhwbGljaXQyZGlhbW9uZC9hZnRlcjYuamF2YQpAQCAtMCwwICsxLDE2IEBACisvLyAiUmVwbGFjZSB3aXRoIDw+IiAidHJ1ZSIKK2NsYXNzIFRlc3QgeworCisgICAgdm9pZCB0ZXN0KCkgeworICAgICAgICBjbGFzcyBGb288WCBleHRlbmRzIE51bWJlcj4geworICAgICAgICAgICAgRm9vKCkge30KKyAgICAgICAgICAgIEZvbyhYIHgpIHt9CisgICAgICAgIH0KKyAgICAgICAgRm9vPE51bWJlcj4gZjEgPSBuZXcgRm9vPE51bWJlcj4oMSk7CisgICAgICAgIEZvbzw/PiBmMiA9IG5ldyBGb288TnVtYmVyPigpOworICAgICAgICBGb288Pz4gZjMgPSBuZXcgRm9vPD4oKTsKKyAgICAgICAgRm9vPE51bWJlcj4gZjQgPSBuZXcgRm9vPE51bWJlcj4oMSkge307CisgICAgICAgIEZvbzw/PiBmNSA9IG5ldyBGb288TnVtYmVyPigpIHt9OworICAgICAgICBGb288Pz4gZjYgPSBuZXcgRm9vPEludGVnZXI+KCkge307CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9leHBsaWNpdDJkaWFtb25kL2JlZm9yZTEuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvZXhwbGljaXQyZGlhbW9uZC9iZWZvcmUxLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDNiZDJjMgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvZXhwbGljaXQyZGlhbW9uZC9iZWZvcmUxLmphdmEKQEAgLTAsMCArMSw2IEBACisvLyAiUmVwbGFjZSB3aXRoIDw+IiAidHJ1ZSIKK3B1YmxpYyBjbGFzcyBUZXN0IHsKKyAgRjxTdHJpbmc+IGYgPSBuZXcgRjxTdHI8Y2FyZXQ+aW5nPigpOworfQorCitjbGFzcyBGPFQ+IHt9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9leHBsaWNpdDJkaWFtb25kL2JlZm9yZTIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvZXhwbGljaXQyZGlhbW9uZC9iZWZvcmUyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWI0YTJjZgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvZXhwbGljaXQyZGlhbW9uZC9iZWZvcmUyLmphdmEKQEAgLTAsMCArMSw3IEBACisvLyAiUmVwbGFjZSB3aXRoIDw+IiAiZmFsc2UiCitwdWJsaWMgY2xhc3MgVGVzdCB7CisgIEY8RjxTdHJpbmc+PiBmID0gbmV3IEZGPFN0cjxjYXJldD5pbmc+KCk7Cit9CisKK2NsYXNzIEZGPFg+IGV4dGVuZHMgRjxYPnt9CitjbGFzcyBGPFQ+IHt9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9leHBsaWNpdDJkaWFtb25kL2JlZm9yZTMuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvZXhwbGljaXQyZGlhbW9uZC9iZWZvcmUzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGEwODUzNgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvZXhwbGljaXQyZGlhbW9uZC9iZWZvcmUzLmphdmEKQEAgLTAsMCArMSwxMSBAQAorLy8gIlJlcGxhY2Ugd2l0aCA8PiIgImZhbHNlIgorcHVibGljIGNsYXNzIFRlc3QgeworICB2b2lkIGJhcigpIHsKKyAgICBmb28obmV3IEZGPFN0cjxjYXJldD5pbmc+KCkpOworICB9CisKKyAgdm9pZCBmb28oRjxGPFN0cmluZz4+IHApIHt9Cit9CisKK2NsYXNzIEZGPFg+IGV4dGVuZHMgRjxYPnt9CitjbGFzcyBGPFQ+IHt9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9leHBsaWNpdDJkaWFtb25kL2JlZm9yZTQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvZXhwbGljaXQyZGlhbW9uZC9iZWZvcmU0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzVjZjI3MwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvZXhwbGljaXQyZGlhbW9uZC9iZWZvcmU0LmphdmEKQEAgLTAsMCArMSwxNiBAQAorLy8gIlJlcGxhY2Ugd2l0aCA8PiIgImZhbHNlIgorY2xhc3MgVGVzdCB7CisKKyAgICB2b2lkIHRlc3QoKSB7CisgICAgICAgIGNsYXNzIEZvbzxYIGV4dGVuZHMgTnVtYmVyPiB7CisgICAgICAgICAgICBGb28oKSB7fQorICAgICAgICAgICAgRm9vKFggeCkge30KKyAgICAgICAgfQorICAgICAgICBGb288TnVtYmVyPiBmMSA9IG5ldyBGb288TnU8Y2FyZXQ+bWJlcj4oMSk7CisgICAgICAgIEZvbzw/PiBmMiA9IG5ldyBGb288TnVtYmVyPigpOworICAgICAgICBGb288Pz4gZjMgPSBuZXcgRm9vPEludGVnZXI+KCk7CisgICAgICAgIEZvbzxOdW1iZXI+IGY0ID0gbmV3IEZvbzxOdW1iZXI+KDEpIHt9OworICAgICAgICBGb288Pz4gZjUgPSBuZXcgRm9vPE51bWJlcj4oKSB7fTsKKyAgICAgICAgRm9vPD8+IGY2ID0gbmV3IEZvbzxJbnRlZ2VyPigpIHt9OworICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvZXhwbGljaXQyZGlhbW9uZC9iZWZvcmU1LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2V4cGxpY2l0MmRpYW1vbmQvYmVmb3JlNS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZmOGM1MDYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2V4cGxpY2l0MmRpYW1vbmQvYmVmb3JlNS5qYXZhCkBAIC0wLDAgKzEsMTYgQEAKKy8vICJSZXBsYWNlIHdpdGggPD4iICJ0cnVlIgorY2xhc3MgVGVzdCB7CisKKyAgICB2b2lkIHRlc3QoKSB7CisgICAgICAgIGNsYXNzIEZvbzxYIGV4dGVuZHMgTnVtYmVyPiB7CisgICAgICAgICAgICBGb28oKSB7fQorICAgICAgICAgICAgRm9vKFggeCkge30KKyAgICAgICAgfQorICAgICAgICBGb288TnVtYmVyPiBmMSA9IG5ldyBGb288TnVtYmVyPigxKTsKKyAgICAgICAgRm9vPD8+IGYyID0gbmV3IEZvbzxOdW08Y2FyZXQ+YmVyPigpOworICAgICAgICBGb288Pz4gZjMgPSBuZXcgRm9vPEludGVnZXI+KCk7CisgICAgICAgIEZvbzxOdW1iZXI+IGY0ID0gbmV3IEZvbzxOdW1iZXI+KDEpIHt9OworICAgICAgICBGb288Pz4gZjUgPSBuZXcgRm9vPE51bWJlcj4oKSB7fTsKKyAgICAgICAgRm9vPD8+IGY2ID0gbmV3IEZvbzxJbnRlZ2VyPigpIHt9OworICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvZXhwbGljaXQyZGlhbW9uZC9iZWZvcmU2LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2V4cGxpY2l0MmRpYW1vbmQvYmVmb3JlNi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ4NjY2ZjQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2V4cGxpY2l0MmRpYW1vbmQvYmVmb3JlNi5qYXZhCkBAIC0wLDAgKzEsMTYgQEAKKy8vICJSZXBsYWNlIHdpdGggPD4iICJ0cnVlIgorY2xhc3MgVGVzdCB7CisKKyAgICB2b2lkIHRlc3QoKSB7CisgICAgICAgIGNsYXNzIEZvbzxYIGV4dGVuZHMgTnVtYmVyPiB7CisgICAgICAgICAgICBGb28oKSB7fQorICAgICAgICAgICAgRm9vKFggeCkge30KKyAgICAgICAgfQorICAgICAgICBGb288TnVtYmVyPiBmMSA9IG5ldyBGb288TnVtYmVyPigxKTsKKyAgICAgICAgRm9vPD8+IGYyID0gbmV3IEZvbzxOdW1iZXI+KCk7CisgICAgICAgIEZvbzw/PiBmMyA9IG5ldyBGb288SW50ZTxjYXJldD5nZXI+KCk7CisgICAgICAgIEZvbzxOdW1iZXI+IGY0ID0gbmV3IEZvbzxOdW1iZXI+KDEpIHt9OworICAgICAgICBGb288Pz4gZjUgPSBuZXcgRm9vPE51bWJlcj4oKSB7fTsKKyAgICAgICAgRm9vPD8+IGY2ID0gbmV3IEZvbzxJbnRlZ2VyPigpIHt9OworICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvZXhwbGljaXQyZGlhbW9uZC9iZWZvcmU3LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2V4cGxpY2l0MmRpYW1vbmQvYmVmb3JlNy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFhMGMwZDQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2V4cGxpY2l0MmRpYW1vbmQvYmVmb3JlNy5qYXZhCkBAIC0wLDAgKzEsMTYgQEAKKy8vICJSZXBsYWNlIHdpdGggPD4iICJmYWxzZSIKK2NsYXNzIFRlc3QgeworCisgICAgdm9pZCB0ZXN0KCkgeworICAgICAgICBjbGFzcyBGb288WCBleHRlbmRzIE51bWJlcj4geworICAgICAgICAgICAgRm9vKCkge30KKyAgICAgICAgICAgIEZvbyhYIHgpIHt9CisgICAgICAgIH0KKyAgICAgICAgRm9vPE51bWJlcj4gZjEgPSBuZXcgRm9vPE51bWJlcj4oMSk7CisgICAgICAgIEZvbzw/PiBmMiA9IG5ldyBGb288TnVtYmVyPigpOworICAgICAgICBGb288Pz4gZjMgPSBuZXcgRm9vPEludGVnZXI+KCk7CisgICAgICAgIEZvbzxOdW1iZXI+IGY0ID0gbmV3IEZvbzxOdTxjYXJldD5tYmVyPigxKSB7fTsKKyAgICAgICAgRm9vPD8+IGY1ID0gbmV3IEZvbzxOdW1iZXI+KCkge307CisgICAgICAgIEZvbzw/PiBmNiA9IG5ldyBGb288SW50ZWdlcj4oKSB7fTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2V4cGxpY2l0MmRpYW1vbmQvYmVmb3JlOC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9leHBsaWNpdDJkaWFtb25kL2JlZm9yZTguamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYzZiNjAxCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9leHBsaWNpdDJkaWFtb25kL2JlZm9yZTguamF2YQpAQCAtMCwwICsxLDE2IEBACisvLyAiUmVwbGFjZSB3aXRoIDw+IiAiZmFsc2UiCitjbGFzcyBUZXN0IHsKKworICAgIHZvaWQgdGVzdCgpIHsKKyAgICAgICAgY2xhc3MgRm9vPFggZXh0ZW5kcyBOdW1iZXI+IHsKKyAgICAgICAgICAgIEZvbygpIHt9CisgICAgICAgICAgICBGb28oWCB4KSB7fQorICAgICAgICB9CisgICAgICAgIEZvbzxOdW1iZXI+IGYxID0gbmV3IEZvbzxOdW1iZXI+KDEpOworICAgICAgICBGb288Pz4gZjIgPSBuZXcgRm9vPE51bWJlcj4oKTsKKyAgICAgICAgRm9vPD8+IGYzID0gbmV3IEZvbzxJbnRlZ2VyPigpOworICAgICAgICBGb288TnVtYmVyPiBmNCA9IG5ldyBGb288TnVtYmVyPigxKSB7fTsKKyAgICAgICAgRm9vPD8+IGY1ID0gbmV3IEZvbzxOdW1iPGNhcmV0PmVyPigpIHt9OworICAgICAgICBGb288Pz4gZjYgPSBuZXcgRm9vPEludGVnZXI+KCkge307CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9leHBsaWNpdDJkaWFtb25kL2JlZm9yZTkuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvZXhwbGljaXQyZGlhbW9uZC9iZWZvcmU5LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDhiZmY2NAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvZXhwbGljaXQyZGlhbW9uZC9iZWZvcmU5LmphdmEKQEAgLTAsMCArMSwxNiBAQAorLy8gIlJlcGxhY2Ugd2l0aCA8PiIgImZhbHNlIgorY2xhc3MgVGVzdCB7CisKKyAgICB2b2lkIHRlc3QoKSB7CisgICAgICAgIGNsYXNzIEZvbzxYIGV4dGVuZHMgTnVtYmVyPiB7CisgICAgICAgICAgICBGb28oKSB7fQorICAgICAgICAgICAgRm9vKFggeCkge30KKyAgICAgICAgfQorICAgICAgICBGb288TnVtYmVyPiBmMSA9IG5ldyBGb288TnVtYmVyPigxKTsKKyAgICAgICAgRm9vPD8+IGYyID0gbmV3IEZvbzxOdW1iZXI+KCk7CisgICAgICAgIEZvbzw/PiBmMyA9IG5ldyBGb288SW50ZWdlcj4oKTsKKyAgICAgICAgRm9vPE51bWJlcj4gZjQgPSBuZXcgRm9vPE51bWJlcj4oMSkge307CisgICAgICAgIEZvbzw/PiBmNSA9IG5ldyBGb288TnVtYmVyPigpIHt9OworICAgICAgICBGb288Pz4gZjYgPSBuZXcgRm9vPEluPGNhcmV0PnRlZ2VyPigpIHt9OworICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvZXhwbGljaXQyZGlhbW9uZC9iZWZvcmVJbkFub255bW91c0lubmVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2V4cGxpY2l0MmRpYW1vbmQvYmVmb3JlSW5Bbm9ueW1vdXNJbm5lci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhmNDAyNzgKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2V4cGxpY2l0MmRpYW1vbmQvYmVmb3JlSW5Bbm9ueW1vdXNJbm5lci5qYXZhCkBAIC0wLDAgKzEsNyBAQAorLy8gIlJlcGxhY2Ugd2l0aCA8PiIgImZhbHNlIgorY2xhc3MgVGVzdCB7CisgICAgY2xhc3MgRGlhbW9uZFRlc3Q8VD4geworICAgICAgICBEaWFtb25kVGVzdDxTdHJpbmc+IHMgPSBuZXcgRGlhbW9uZFRlc3Q8U3Q8Y2FyZXQ+cmluZz4oKXsKKyAgICAgICAgfTsgLy8gYW5vbnltb3VzIGlubmVyIGNsYXNzCisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9leHBsaWNpdDJkaWFtb25kL2JlZm9yZUluQW5vbnltb3VzSW5uZXIxLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2V4cGxpY2l0MmRpYW1vbmQvYmVmb3JlSW5Bbm9ueW1vdXNJbm5lcjEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMGI4NTJkCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9leHBsaWNpdDJkaWFtb25kL2JlZm9yZUluQW5vbnltb3VzSW5uZXIxLmphdmEKQEAgLTAsMCArMSw2IEBACisvLyAiUmVwbGFjZSB3aXRoIDw+IiAiZmFsc2UiCitjbGFzcyBUZXN0PFQ+IHsKKyAgICBUZXN0PFN0cmluZz4gcyA9IG5ldyBUZXN0PFN0PGNhcmV0PnJpbmc+KCl7CisgICAgfTsgLy8gYW5vbnltb3VzIGlubmVyIGNsYXNzCisKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvZml4QWxsL2FmdGVyMS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9maXhBbGwvYWZ0ZXIxLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjkwYjNkYgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvZml4QWxsL2FmdGVyMS5qYXZhCkBAIC0wLDAgKzEsNyBAQAorLy8gIkZpeCBhbGwgJ0NvbnN0YW50IGNvbmRpdGlvbnMgJiBleGNlcHRpb25zJyBwcm9ibGVtcyIgInRydWUiCitwdWJsaWMgY2xhc3MgVGVzdCB7CisgIHZvaWQgZm9vKCkgeworICAgIGludCBrID0gMDsKKyAgICBpbnQgaSA9IDA7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2ZpeEFsbC9hZnRlcjIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvZml4QWxsL2FmdGVyMi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg3NzgxMGUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2ZpeEFsbC9hZnRlcjIuamF2YQpAQCAtMCwwICsxLDEyIEBACisvLyAiRml4IGFsbCAnQ29uc3RhbnQgY29uZGl0aW9ucyAmIGV4Y2VwdGlvbnMnIHByb2JsZW1zIiAidHJ1ZSIKK3B1YmxpYyBjbGFzcyBUZXN0IHsKKyAgdm9pZCBmb28xKCkgeworICAgIGludCBrID0gMDsKKyAgICBpbnQgaSA9IDA7CisgIH0KKworICB2b2lkIGZvbzIoKSB7CisgICAgaW50IGsgPSAwOworICAgIGludCBpID0gMDsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvZml4QWxsL2FmdGVyQXNzZXJ0RmFsc2UuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvZml4QWxsL2FmdGVyQXNzZXJ0RmFsc2UuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YWJhMmUxCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9maXhBbGwvYWZ0ZXJBc3NlcnRGYWxzZS5qYXZhCkBAIC0wLDAgKzEsOCBAQAorLy8gIkZpeCBhbGwgJ0NvbnN0YW50IGNvbmRpdGlvbnMgJiBleGNlcHRpb25zJyBwcm9ibGVtcyIgInRydWUiCitwdWJsaWMgY2xhc3MgVGVzdCB7CisgIHZvaWQgZm9vMigpIHsKKyAgICBpbnQgayA9IDA7CisgICAgaW50IGkgPSAwOworICAgIGFzc2VydCBmYWxzZTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvZml4QWxsL2FmdGVyQXNzZXJ0VHJ1ZS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9maXhBbGwvYWZ0ZXJBc3NlcnRUcnVlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjI1MWYwMwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvZml4QWxsL2FmdGVyQXNzZXJ0VHJ1ZS5qYXZhCkBAIC0wLDAgKzEsOCBAQAorLy8gIkZpeCBhbGwgJ0NvbnN0YW50IGNvbmRpdGlvbnMgJiBleGNlcHRpb25zJyBwcm9ibGVtcyIgInRydWUiCitwdWJsaWMgY2xhc3MgVGVzdCB7CisgIHZvaWQgZm9vMigpIHsKKyAgICBpbnQgayA9IDA7CisgICAgaW50IGkgPSAwOworICAgICAgU3lzdGVtLm91dC5wcmludGxuKCk7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2ZpeEFsbC9iZWZvcmUxLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2ZpeEFsbC9iZWZvcmUxLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjRmYjAxOAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvZml4QWxsL2JlZm9yZTEuamF2YQpAQCAtMCwwICsxLDEzIEBACisvLyAiRml4IGFsbCAnQ29uc3RhbnQgY29uZGl0aW9ucyAmIGV4Y2VwdGlvbnMnIHByb2JsZW1zIiAidHJ1ZSIKK3B1YmxpYyBjbGFzcyBUZXN0IHsKKyAgdm9pZCBmb28oKSB7CisgICAgaW50IGsgPSAwOworICAgIGludCBpID0gMDsKKyAgICBpZiAoPGNhcmV0PmkgPT0gaykge30KKyAgICBpZiAoaSA9PSBrKSB7fQorICAgIGlmIChpID09IGspIHt9CisgICAgaWYgKGkgPT0gaykge30KKyAgICBpZiAoaSA9PSBrKSB7fQorICAgIGlmIChpID09IGspIHt9CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2ZpeEFsbC9iZWZvcmUyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2ZpeEFsbC9iZWZvcmUyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjQxYzZiOAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvZml4QWxsL2JlZm9yZTIuamF2YQpAQCAtMCwwICsxLDI0IEBACisvLyAiRml4IGFsbCAnQ29uc3RhbnQgY29uZGl0aW9ucyAmIGV4Y2VwdGlvbnMnIHByb2JsZW1zIiAidHJ1ZSIKK3B1YmxpYyBjbGFzcyBUZXN0IHsKKyAgdm9pZCBmb28xKCkgeworICAgIGludCBrID0gMDsKKyAgICBpbnQgaSA9IDA7CisgICAgaWYgKGkgPT0gaykge30KKyAgICBpZiAoaSA9PSBrKSB7fQorICAgIGlmIChpID09IGspIHt9CisgICAgaWYgKGkgPT0gaykge30KKyAgICBpZiAoaSA9PSBrKSB7fQorICAgIGlmIChpID09IGspIHt9CisgIH0KKworICB2b2lkIGZvbzIoKSB7CisgICAgaW50IGsgPSAwOworICAgIGludCBpID0gMDsKKyAgICBpZiAoPGNhcmV0PmkgPT0gaykge30KKyAgICBpZiAoaSA9PSBrKSB7fQorICAgIGlmIChpID09IGspIHt9CisgICAgaWYgKGkgPT0gaykge30KKyAgICBpZiAoaSA9PSBrKSB7fQorICAgIGlmIChpID09IGspIHt9CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2ZpeEFsbC9iZWZvcmVBc3NlcnRGYWxzZS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9maXhBbGwvYmVmb3JlQXNzZXJ0RmFsc2UuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNmUyOWQzCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9maXhBbGwvYmVmb3JlQXNzZXJ0RmFsc2UuamF2YQpAQCAtMCwwICsxLDggQEAKKy8vICJGaXggYWxsICdDb25zdGFudCBjb25kaXRpb25zICYgZXhjZXB0aW9ucycgcHJvYmxlbXMiICJ0cnVlIgorcHVibGljIGNsYXNzIFRlc3QgeworICB2b2lkIGZvbzIoKSB7CisgICAgaW50IGsgPSAwOworICAgIGludCBpID0gMDsKKyAgICBhc3NlcnQgPGNhcmV0PmkgIT0gazsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvZml4QWxsL2JlZm9yZUFzc2VydFRydWUuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvZml4QWxsL2JlZm9yZUFzc2VydFRydWUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMDRiMDg2Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9maXhBbGwvYmVmb3JlQXNzZXJ0VHJ1ZS5qYXZhCkBAIC0wLDAgKzEsMTIgQEAKKy8vICJGaXggYWxsICdDb25zdGFudCBjb25kaXRpb25zICYgZXhjZXB0aW9ucycgcHJvYmxlbXMiICJ0cnVlIgorcHVibGljIGNsYXNzIFRlc3QgeworICB2b2lkIGZvbzIoKSB7CisgICAgaW50IGsgPSAwOworICAgIGludCBpID0gMDsKKyAgICBhc3NlcnQgPGNhcmV0PmkgPT0gazsKKyAgICBhc3NlcnQgaSA9PSBrOworICAgIGlmIChpID09IGspIHsKKyAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigpOworICAgIH0KKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvZml4QWxsQW5ub3RhdG9yL2FmdGVyMS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9maXhBbGxBbm5vdGF0b3IvYWZ0ZXIxLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWEwYWJhNQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvZml4QWxsQW5ub3RhdG9yL2FmdGVyMS5qYXZhCkBAIC0wLDAgKzEsNyBAQAorLy8gIkZpeCBhbGwgJ0Fubm90YXRvcicgcHJvYmxlbXMiICJ0cnVlIgorcHVibGljIGNsYXNzIFRlc3QgeworICB2b2lkIGZvb0YoKSB7CisgIH0KKyAgCisgIHZvaWQgYmFyRigpe30KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2ZpeEFsbEFubm90YXRvci9iZWZvcmUxLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2ZpeEFsbEFubm90YXRvci9iZWZvcmUxLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODAwNjczMQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvZml4QWxsQW5ub3RhdG9yL2JlZm9yZTEuamF2YQpAQCAtMCwwICsxLDcgQEAKKy8vICJGaXggYWxsICdBbm5vdGF0b3InIHByb2JsZW1zIiAidHJ1ZSIKK3B1YmxpYyBjbGFzcyBUZXN0IHsKKyAgdm9pZCBmPGNhcmV0Pm9vKCkgeworICB9CisgIAorICB2b2lkIGJhcigpe30KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2dlbmVyYWxpemVDYXRjaC9hZnRlcjEuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvZ2VuZXJhbGl6ZUNhdGNoL2FmdGVyMS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZlNjEzZTgKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2dlbmVyYWxpemVDYXRjaC9hZnRlcjEuamF2YQpAQCAtMCwwICsxLDE2IEBACisvLyAiR2VuZXJhbGl6ZSBjYXRjaCBmb3IgJ2phdmEuaW8uRmlsZU5vdEZvdW5kRXhjZXB0aW9uJyB0byAnamF2YS5pby5JT0V4Y2VwdGlvbiciICJ0cnVlIgoraW1wb3J0IGphdmEuaW8uKjsKKworCitwdWJsaWMgY2xhc3MgYzEgeworICAgIHZvaWQgZigpIHsKKyAgICAgICAgRmlsZUlucHV0U3RyZWFtIGZpcyA9IG51bGw7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBmaXMgPSBuZXcgRmlsZUlucHV0U3RyZWFtKCIiKTsKKyAgICAgICAgICAgIERhdGFJbnB1dFN0cmVhbSBkaXMgPSBuZXcgRGF0YUlucHV0U3RyZWFtKGZpcyk7CisgICAgICAgICAgICA8Y2FyZXQ+ZGlzLnJlYWRJbnQoKTsKKyAgICAgICAgfSBjYXRjaCAoSU9FeGNlcHRpb24gZSkgeworICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsgIAorICAgICAgICB9CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvZ2VuZXJhbGl6ZUNhdGNoL2FmdGVyMy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9nZW5lcmFsaXplQ2F0Y2gvYWZ0ZXIzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTU2YzI0NAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvZ2VuZXJhbGl6ZUNhdGNoL2FmdGVyMy5qYXZhCkBAIC0wLDAgKzEsMTcgQEAKKy8vICJHZW5lcmFsaXplIGNhdGNoIGZvciAnQy5FMScgdG8gJ0MuRSciICJ0cnVlIgorY2xhc3MgQyB7CisgICAgc3RhdGljIGNsYXNzIEUgZXh0ZW5kcyBFeGNlcHRpb24geyB9CisgICAgc3RhdGljIGNsYXNzIEUxIGV4dGVuZHMgRSB7IH0KKworICAgIHN0YXRpYyBjbGFzcyBNeVJlc291cmNlIGltcGxlbWVudHMgQXV0b0Nsb3NlYWJsZSB7CisgICAgICAgIHB1YmxpYyBNeVJlc291cmNlKCkgdGhyb3dzIEUxIHsgfQorICAgICAgICBwdWJsaWMgdm9pZCBjbG9zZSgpIHRocm93cyBFIHsgfQorICAgIH0KKworICAgIHZvaWQgZigpIHsKKyAgICAgICAgdHJ5IChNeVJlc291cmNlIHIgPSBuZXcgTXlSZXNvdXJjZSgpKSB7CisgICAgICAgIH0gY2F0Y2ggKEUgZSkgeworICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsgIAorICAgICAgICB9CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvZ2VuZXJhbGl6ZUNhdGNoL2JlZm9yZTEuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvZ2VuZXJhbGl6ZUNhdGNoL2JlZm9yZTEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNWRhOWQ3Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9nZW5lcmFsaXplQ2F0Y2gvYmVmb3JlMS5qYXZhCkBAIC0wLDAgKzEsMTYgQEAKKy8vICJHZW5lcmFsaXplIGNhdGNoIGZvciAnamF2YS5pby5GaWxlTm90Rm91bmRFeGNlcHRpb24nIHRvICdqYXZhLmlvLklPRXhjZXB0aW9uJyIgInRydWUiCitpbXBvcnQgamF2YS5pby4qOworCisKK3B1YmxpYyBjbGFzcyBjMSB7CisgICAgdm9pZCBmKCkgeworICAgICAgICBGaWxlSW5wdXRTdHJlYW0gZmlzID0gbnVsbDsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIGZpcyA9IG5ldyBGaWxlSW5wdXRTdHJlYW0oIiIpOworICAgICAgICAgICAgRGF0YUlucHV0U3RyZWFtIGRpcyA9IG5ldyBEYXRhSW5wdXRTdHJlYW0oZmlzKTsKKyAgICAgICAgICAgIDxjYXJldD5kaXMucmVhZEludCgpOworICAgICAgICB9IGNhdGNoIChGaWxlTm90Rm91bmRFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsgIAorICAgICAgICB9CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvZ2VuZXJhbGl6ZUNhdGNoL2JlZm9yZTIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvZ2VuZXJhbGl6ZUNhdGNoL2JlZm9yZTIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YzM2MTI5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9nZW5lcmFsaXplQ2F0Y2gvYmVmb3JlMi5qYXZhCkBAIC0wLDAgKzEsMTYgQEAKKy8vICJHZW5lcmFsaXplIGNhdGNoIGZvciAnamF2YS5pby5GaWxlTm90Rm91bmRFeGNlcHRpb24nIHRvICdqYXZhLmxhbmcuSWxsZWdhbEFjY2Vzc0V4Y2VwdGlvbiciICJmYWxzZSIKK2ltcG9ydCBqYXZhLmlvLio7CisKKworcHVibGljIGNsYXNzIGMxIHsKKyAgICB2b2lkIGYoKSB7CisgICAgICAgIEZpbGVJbnB1dFN0cmVhbSBmaXMgPSBudWxsOworICAgICAgICB0cnkgeworICAgICAgICAgICAgZmlzID0gbmV3IEZpbGVJbnB1dFN0cmVhbSgiIik7CisgICAgICAgICAgICBEYXRhSW5wdXRTdHJlYW0gZGlzID0gbmV3IERhdGFJbnB1dFN0cmVhbShmaXMpOworICAgICAgICAgICAgPGNhcmV0PnRocm93IG5ldyBJbGxlZ2FsQWNjZXNzRXhjZXB0aW9uKCk7CisgICAgICAgIH0gY2F0Y2ggKEZpbGVOb3RGb3VuZEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOyAgCisgICAgICAgIH0KKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9nZW5lcmFsaXplQ2F0Y2gvYmVmb3JlMy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9nZW5lcmFsaXplQ2F0Y2gvYmVmb3JlMy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIxZjAzOTUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2dlbmVyYWxpemVDYXRjaC9iZWZvcmUzLmphdmEKQEAgLTAsMCArMSwxNyBAQAorLy8gIkdlbmVyYWxpemUgY2F0Y2ggZm9yICdDLkUxJyB0byAnQy5FJyIgInRydWUiCitjbGFzcyBDIHsKKyAgICBzdGF0aWMgY2xhc3MgRSBleHRlbmRzIEV4Y2VwdGlvbiB7IH0KKyAgICBzdGF0aWMgY2xhc3MgRTEgZXh0ZW5kcyBFIHsgfQorCisgICAgc3RhdGljIGNsYXNzIE15UmVzb3VyY2UgaW1wbGVtZW50cyBBdXRvQ2xvc2VhYmxlIHsKKyAgICAgICAgcHVibGljIE15UmVzb3VyY2UoKSB0aHJvd3MgRTEgeyB9CisgICAgICAgIHB1YmxpYyB2b2lkIGNsb3NlKCkgdGhyb3dzIEUgeyB9CisgICAgfQorCisgICAgdm9pZCBmKCkgeworICAgICAgICB0cnkgKDxjYXJldD5NeVJlc291cmNlIHIgPSBuZXcgTXlSZXNvdXJjZSgpKSB7CisgICAgICAgIH0gY2F0Y2ggKEUxIGUpIHsKKyAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7ICAKKyAgICAgICAgfQorICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2dlbmVyaWNDcmVhdGVGcm9tVXNhZ2UvYWZ0ZXIxLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2dlbmVyaWNDcmVhdGVGcm9tVXNhZ2UvYWZ0ZXIxLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGI1NDQxOQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvZ2VuZXJpY0NyZWF0ZUZyb21Vc2FnZS9hZnRlcjEuamF2YQpAQCAtMCwwICsxLDEzIEBACisvLyAiQ3JlYXRlIE1ldGhvZCAnZ2V0JyIgInRydWUiCitjbGFzcyBXPFQ+IHsKKyAgICBwdWJsaWMgVCBnZXQoVCBzKSB7CisgICAgICAgIDxzZWxlY3Rpb24+cmV0dXJuIG51bGw7ICAvL1RvIGNoYW5nZSBib2R5IG9mIGNyZWF0ZWQgbWV0aG9kcyB1c2UgRmlsZSB8IFNldHRpbmdzIHwgRmlsZSBUZW1wbGF0ZXMuPC9zZWxlY3Rpb24+CisgICAgfQorfQorCitjbGFzcyBDIHsKKyAgICB2b2lkIGZvbyAoKSB7CisgICAgICAgIFc8U3RyaW5nPiB3ID0gbmV3IFc8U3RyaW5nPigpOworICAgICAgICBTdHJpbmcgcyA9IHcuZ2V0KCIiKTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9nZW5lcmljQ3JlYXRlRnJvbVVzYWdlL2FmdGVyMi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9nZW5lcmljQ3JlYXRlRnJvbVVzYWdlL2FmdGVyMi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE2MzE2MTIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2dlbmVyaWNDcmVhdGVGcm9tVXNhZ2UvYWZ0ZXIyLmphdmEKQEAgLTAsMCArMSwxMiBAQAorLy8gIkNyZWF0ZSBNZXRob2QgJ2dldCciICJ0cnVlIgorY2xhc3MgR2VuZXJpYzxUPiB7CisgICAgcHVibGljIFQgZ2V0KCkgeworICAgICAgICA8Y2FyZXQ+PHNlbGVjdGlvbj5yZXR1cm4gbnVsbDsgIC8vVG8gY2hhbmdlIGJvZHkgb2YgY3JlYXRlZCBtZXRob2RzIHVzZSBGaWxlIHwgU2V0dGluZ3MgfCBGaWxlIFRlbXBsYXRlcy48L3NlbGVjdGlvbj4KKyAgICB9Cit9CisKK2NsYXNzIFdXVyB7CisgICAgPEU+IHZvaWQgZm9vIChHZW5lcmljPEU+IHApIHsKKyAgICAgICAgRSBlID0gcC5nZXQoKTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9nZW5lcmljQ3JlYXRlRnJvbVVzYWdlL2FmdGVyMy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9nZW5lcmljQ3JlYXRlRnJvbVVzYWdlL2FmdGVyMy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEzOGIwNmEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2dlbmVyaWNDcmVhdGVGcm9tVXNhZ2UvYWZ0ZXIzLmphdmEKQEAgLTAsMCArMSwxNiBAQAorLy8gIkNyZWF0ZSBNZXRob2QgJ2ZvbyciICJ0cnVlIgoraW50ZXJmYWNlIEludDxUPiB7Cit9CisKK2NsYXNzIEExPFQ+IGltcGxlbWVudHMgSW50PFQ+IHsKKyAgICBwdWJsaWMgdm9pZCBmb28oSW50PFQ+IGMpIHsKKyAgICAgICAgPGNhcmV0PjxzZWxlY3Rpb24+Ly9UbyBjaGFuZ2UgYm9keSBvZiBjcmVhdGVkIG1ldGhvZHMgdXNlIEZpbGUgfCBTZXR0aW5ncyB8IEZpbGUgVGVtcGxhdGVzLjwvc2VsZWN0aW9uPgorICAgIH0KK30KKworY2xhc3MgQjEgeworICAgIEExPFN0cmluZz4gYTsKKyAgICB2b2lkIGZvbyAoSW50PFN0cmluZz4gYykgeworICAgICAgICBhLmZvbyhjKTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9nZW5lcmljQ3JlYXRlRnJvbVVzYWdlL2FmdGVyNC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9nZW5lcmljQ3JlYXRlRnJvbVVzYWdlL2FmdGVyNC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRkNDg5OWEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2dlbmVyaWNDcmVhdGVGcm9tVXNhZ2UvYWZ0ZXI0LmphdmEKQEAgLTAsMCArMSwyMCBAQAorLy8gIkNyZWF0ZSBNZXRob2QgJ2ZvbyciICJ0cnVlIgoraW50ZXJmYWNlIENvbXBhcmFibGU8VD4geworfQorCitjbGFzcyBSIGltcGxlbWVudHMgQ29tcGFyYWJsZTxSPiB7CisKK30KKworY2xhc3MgQTE8VD4geworICAgIHB1YmxpYyBUIGZvbygpIHsKKyAgICAgICAgPGNhcmV0PjxzZWxlY3Rpb24+cmV0dXJuIG51bGw7ICAvL1RvIGNoYW5nZSBib2R5IG9mIGNyZWF0ZWQgbWV0aG9kcyB1c2UgRmlsZSB8IFNldHRpbmdzIHwgRmlsZSBUZW1wbGF0ZXMuPC9zZWxlY3Rpb24+CisgICAgfQorfQorCitjbGFzcyBCMSB7CisgICAgQTE8Uj4gYTsKKyAgICB2b2lkIGZvbyAoQ29tcGFyYWJsZTxSPiBjKSB7CisgICAgICAgIGMgPSBhLmZvbygpOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2dlbmVyaWNDcmVhdGVGcm9tVXNhZ2UvYWZ0ZXI1LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2dlbmVyaWNDcmVhdGVGcm9tVXNhZ2UvYWZ0ZXI1LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTVkNzBjNQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvZ2VuZXJpY0NyZWF0ZUZyb21Vc2FnZS9hZnRlcjUuamF2YQpAQCAtMCwwICsxLDE2IEBACisvLyAiQ3JlYXRlIENvbnN0cnVjdG9yIiAidHJ1ZSIKK3B1YmxpYyBjbGFzcyBTZXE8VD4geworICAgIHB1YmxpYyBTZXEoKSB7fQorCisgICAgcHVibGljIFNlcShUIHgsIFNlcTxUPiB4cykgeworICAgICAgICA8c2VsZWN0aW9uPi8vVG8gY2hhbmdlIGJvZHkgb2YgY3JlYXRlZCBtZXRob2RzIHVzZSBGaWxlIHwgU2V0dGluZ3MgfCBGaWxlIFRlbXBsYXRlcy48L3NlbGVjdGlvbj4KKyAgICB9CisKKyAgICBzdGF0aWMgPFQ+IFNlcTxUPiBuaWwgKCkgeworICAgICAgICByZXR1cm4gbmV3IFNlcTxUPiAoKTsKKyAgICB9CisKKyAgICBzdGF0aWMgPFY+IFNlcTxWPiBjb25zIChWIHgsIFNlcTxWPiB4cykgeworICAgICAgICByZXR1cm4gbmV3IFNlcTxWPiAoeCwgeHMpOworICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvZ2VuZXJpY0NyZWF0ZUZyb21Vc2FnZS9iZWZvcmUxLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2dlbmVyaWNDcmVhdGVGcm9tVXNhZ2UvYmVmb3JlMS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk3YzJlYjAKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2dlbmVyaWNDcmVhdGVGcm9tVXNhZ2UvYmVmb3JlMS5qYXZhCkBAIC0wLDAgKzEsMTAgQEAKKy8vICJDcmVhdGUgTWV0aG9kICdnZXQnIiAidHJ1ZSIKK2NsYXNzIFc8VD4geworfQorCitjbGFzcyBDIHsKKyAgICB2b2lkIGZvbyAoKSB7CisgICAgICAgIFc8U3RyaW5nPiB3ID0gbmV3IFc8U3RyaW5nPigpOworICAgICAgICBTdHJpbmcgcyA9IHcuPGNhcmV0PmdldCgiIik7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvZ2VuZXJpY0NyZWF0ZUZyb21Vc2FnZS9iZWZvcmUyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2dlbmVyaWNDcmVhdGVGcm9tVXNhZ2UvYmVmb3JlMi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBkZTVmNTMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2dlbmVyaWNDcmVhdGVGcm9tVXNhZ2UvYmVmb3JlMi5qYXZhCkBAIC0wLDAgKzEsOSBAQAorLy8gIkNyZWF0ZSBNZXRob2QgJ2dldCciICJ0cnVlIgorY2xhc3MgR2VuZXJpYzxUPiB7Cit9CisKK2NsYXNzIFdXVyB7CisgICAgPEU+IHZvaWQgZm9vIChHZW5lcmljPEU+IHApIHsKKyAgICAgICAgRSBlID0gcC5nPGNhcmV0PmV0KCk7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvZ2VuZXJpY0NyZWF0ZUZyb21Vc2FnZS9iZWZvcmUzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2dlbmVyaWNDcmVhdGVGcm9tVXNhZ2UvYmVmb3JlMy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZkODlkOGIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2dlbmVyaWNDcmVhdGVGcm9tVXNhZ2UvYmVmb3JlMy5qYXZhCkBAIC0wLDAgKzEsMTMgQEAKKy8vICJDcmVhdGUgTWV0aG9kICdmb28nIiAidHJ1ZSIKK2ludGVyZmFjZSBJbnQ8VD4geworfQorCitjbGFzcyBBMTxUPiBpbXBsZW1lbnRzIEludDxUPiB7Cit9CisKK2NsYXNzIEIxIHsKKyAgICBBMTxTdHJpbmc+IGE7CisgICAgdm9pZCBmb28gKEludDxTdHJpbmc+IGMpIHsKKyAgICAgICAgYS48Y2FyZXQ+Zm9vKGMpOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2dlbmVyaWNDcmVhdGVGcm9tVXNhZ2UvYmVmb3JlNC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9nZW5lcmljQ3JlYXRlRnJvbVVzYWdlL2JlZm9yZTQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MTVlNjhkCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9nZW5lcmljQ3JlYXRlRnJvbVVzYWdlL2JlZm9yZTQuamF2YQpAQCAtMCwwICsxLDE3IEBACisvLyAiQ3JlYXRlIE1ldGhvZCAnZm9vJyIgInRydWUiCitpbnRlcmZhY2UgQ29tcGFyYWJsZTxUPiB7Cit9CisKK2NsYXNzIFIgaW1wbGVtZW50cyBDb21wYXJhYmxlPFI+IHsKKworfQorCitjbGFzcyBBMTxUPiB7Cit9CisKK2NsYXNzIEIxIHsKKyAgICBBMTxSPiBhOworICAgIHZvaWQgZm9vIChDb21wYXJhYmxlPFI+IGMpIHsKKyAgICAgICAgYyA9IGEuPGNhcmV0PmZvbygpOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2dlbmVyaWNDcmVhdGVGcm9tVXNhZ2UvYmVmb3JlNS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9nZW5lcmljQ3JlYXRlRnJvbVVzYWdlL2JlZm9yZTUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yODdmNWM3Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9nZW5lcmljQ3JlYXRlRnJvbVVzYWdlL2JlZm9yZTUuamF2YQpAQCAtMCwwICsxLDEyIEBACisvLyAiQ3JlYXRlIENvbnN0cnVjdG9yIiAidHJ1ZSIKK3B1YmxpYyBjbGFzcyBTZXE8VD4geworICAgIHB1YmxpYyBTZXEoKSB7fQorCisgICAgc3RhdGljIDxUPiBTZXE8VD4gbmlsICgpIHsKKyAgICAgICAgcmV0dXJuIG5ldyBTZXE8VD4gKCk7CisgICAgfQorCisgICAgc3RhdGljIDxWPiBTZXE8Vj4gY29ucyAoViB4LCBTZXE8Vj4geHMpIHsKKyAgICAgICAgcmV0dXJuIG5ldyBTZXE8Vj4gKHgsIHhzKTxjYXJldD47CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9nZW5lcmlmeUZpbGUvYmVmb3JlMS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9nZW5lcmlmeUZpbGUvYmVmb3JlMS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRiMTRmZTQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2dlbmVyaWZ5RmlsZS9iZWZvcmUxLmphdmEKQEAgLTAsMCArMSwxMyBAQAorLy8gIlRyeSB0byBnZW5lcmlmeSAnYmVmb3JlMS5qYXZhJyIgInRydWUiCisKK2NsYXNzIGM8VD4geworICB2b2lkIHB1dChUIHQgKSB7CisgIH0KK30KKworY2xhc3MgVXNlIHsKKyAgdm9pZCBmKCkgeworICAgIGMgYyA9IG5ldyBjKCk7CisgICAgPGNhcmV0PmMucHV0KCIiKTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvaTE4bi9hZnRlck5vbk5sc0NhbGwuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvaTE4bi9hZnRlck5vbk5sc0NhbGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNGI3ZjU0Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9pMThuL2FmdGVyTm9uTmxzQ2FsbC5qYXZhCkBAIC0wLDAgKzEsOSBAQAoraW1wb3J0IG9yZy5qZXRicmFpbnMuYW5ub3RhdGlvbnMuTm9uTmxzOworCisvLyAiQW5ub3RhdGUgdmFyaWFibGUgJ2EnIGFzIEBOb25ObHMiICJ0cnVlIgorY2xhc3MgRm9vIHsKKyAgcHVibGljIGJvb2xlYW4gZG9UZXN0KCkgeworICAgIEBOb25ObHMgU3RyaW5nIGE7CisgICAgcmV0dXJuIGEuc3RhcnRzV2l0aCgidGU8Y2FyZXQ+c3QiKTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9pMThuL2FmdGVyTm9uTmxzQ29uc3RydWN0b3IuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvaTE4bi9hZnRlck5vbk5sc0NvbnN0cnVjdG9yLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzliMDNiZQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvaTE4bi9hZnRlck5vbk5sc0NvbnN0cnVjdG9yLmphdmEKQEAgLTAsMCArMSw4IEBACitpbXBvcnQgb3JnLmpldGJyYWlucy5hbm5vdGF0aW9ucy5Ob25ObHM7CisKKy8vICJBbm5vdGF0ZSB2YXJpYWJsZSAnYScgYXMgQE5vbk5scyIgInRydWUiCitjbGFzcyBGb28geworICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7CisgICAgQE5vbk5scyBTdHJpbmcgYSA9IG5ldyBTdHJpbmcoInRlc3QiKTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9pMThuL2FmdGVyTm9uTmxzQ29uc3RydWN0b3JBc3NpZ25tZW50LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2kxOG4vYWZ0ZXJOb25ObHNDb25zdHJ1Y3RvckFzc2lnbm1lbnQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYmZhMjM4Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9pMThuL2FmdGVyTm9uTmxzQ29uc3RydWN0b3JBc3NpZ25tZW50LmphdmEKQEAgLTAsMCArMSw5IEBACitpbXBvcnQgb3JnLmpldGJyYWlucy5hbm5vdGF0aW9ucy5Ob25ObHM7CisKKy8vICJBbm5vdGF0ZSB2YXJpYWJsZSAnYScgYXMgQE5vbk5scyIgInRydWUiCitjbGFzcyBGb28geworICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7CisgICAgQE5vbk5scyBTdHJpbmcgYTsKKyAgICAgYSA9IG5ldyBTdHJpbmcoInRlc3QiKTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9pMThuL2FmdGVyTm9uTmxzRXF1YWxzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2kxOG4vYWZ0ZXJOb25ObHNFcXVhbHMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YjM1MzY3Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9pMThuL2FmdGVyTm9uTmxzRXF1YWxzLmphdmEKQEAgLTAsMCArMSw5IEBACitpbXBvcnQgb3JnLmpldGJyYWlucy5hbm5vdGF0aW9ucy5Ob25ObHM7CisKKy8vICJBbm5vdGF0ZSB2YXJpYWJsZSAnYScgYXMgQE5vbk5scyIgInRydWUiCitjbGFzcyBGb28geworICBwdWJsaWMgYm9vbGVhbiBkb1Rlc3QoKSB7CisgICAgQE5vbk5scyBTdHJpbmcgYTsKKyAgICByZXR1cm4gInRlc3QiLmVxdWFscyhhKQorICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2kxOG4vYWZ0ZXJOb25ObHNGaWVsZC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9pMThuL2FmdGVyTm9uTmxzRmllbGQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNTIwZDUyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9pMThuL2FmdGVyTm9uTmxzRmllbGQuamF2YQpAQCAtMCwwICsxLDcgQEAKK2ltcG9ydCBvcmcuamV0YnJhaW5zLmFubm90YXRpb25zLk5vbk5sczsKKworLy8gIkFubm90YXRlIGZpZWxkICdmaWVsZCcgYXMgQE5vbk5scyIgInRydWUiCitjbGFzcyBGb28geworICBATm9uTmxzCisgIFN0cmluZyBmaWVsZCA9ICJ0ZXh0IjsKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvaTE4bi9hZnRlck5vbk5sc1BhcmFtLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2kxOG4vYWZ0ZXJOb25ObHNQYXJhbS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQwYmNjMDYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2kxOG4vYWZ0ZXJOb25ObHNQYXJhbS5qYXZhCkBAIC0wLDAgKzEsMTEgQEAKK2ltcG9ydCBvcmcuamV0YnJhaW5zLmFubm90YXRpb25zLk5vbk5sczsKKworLy8gIkFubm90YXRlIHBhcmFtZXRlciAncycgYXMgQE5vbk5scyIgInRydWUiCitjbGFzcyBGb28geworICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7CisgICAgZG9TdHJpbmdUZXN0KCJ0ZXN0Iik7CisgIH0KKworICBwcml2YXRlIHZvaWQgZG9TdHJpbmdUZXN0KEBOb25ObHMgU3RyaW5nIHMpIHsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9pMThuL2FmdGVyTm9uTmxzUmV0dXJuLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2kxOG4vYWZ0ZXJOb25ObHNSZXR1cm4uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YjI1YTI3Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9pMThuL2FmdGVyTm9uTmxzUmV0dXJuLmphdmEKQEAgLTAsMCArMSw5IEBACitpbXBvcnQgb3JnLmpldGJyYWlucy5hbm5vdGF0aW9ucy5Ob25ObHM7CisKKy8vICJBbm5vdGF0ZSBtZXRob2QgJ2RvVGVzdCcgYXMgQE5vbk5scyIgInRydWUiCitjbGFzcyBGb28geworICBATm9uTmxzCisgIHB1YmxpYyBTdHJpbmcgZG9UZXN0KCkgeworICAgIHJldHVybiAidGV4dCI7CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvaTE4bi9hZnRlck5vbk5sc1ZhcmlhYmxlLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2kxOG4vYWZ0ZXJOb25ObHNWYXJpYWJsZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY0MjRjMDIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2kxOG4vYWZ0ZXJOb25ObHNWYXJpYWJsZS5qYXZhCkBAIC0wLDAgKzEsOCBAQAoraW1wb3J0IG9yZy5qZXRicmFpbnMuYW5ub3RhdGlvbnMuTm9uTmxzOworCisvLyAiQW5ub3RhdGUgdmFyaWFibGUgJ2EnIGFzIEBOb25ObHMiICJ0cnVlIgorY2xhc3MgRm9vIHsKKyAgcHVibGljIHZvaWQgZG9UZXN0KCkgeworICAgIEBOb25ObHMgU3RyaW5nIGEgPSAidGVzdCI7CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvaTE4bi9hZnRlclN5c3RlbUNhbGwuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvaTE4bi9hZnRlclN5c3RlbUNhbGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNjNjM2MxCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9pMThuL2FmdGVyU3lzdGVtQ2FsbC5qYXZhCkBAIC0wLDAgKzEsNiBAQAorLy8gIkFubm90YXRlIGZpZWxkICdvdXQnIGFzIEBOb25ObHMiICJ0cnVlIgorY2xhc3MgRm9vIHsKKyAgcHVibGljIHZvaWQgZG9UZXN0KCkgeworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVGVzdCIpOworICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2kxOG4vYmVmb3JlTm9uTmxzQ2FsbC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9pMThuL2JlZm9yZU5vbk5sc0NhbGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNzQyMzI2Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9pMThuL2JlZm9yZU5vbk5sc0NhbGwuamF2YQpAQCAtMCwwICsxLDcgQEAKKy8vICJBbm5vdGF0ZSB2YXJpYWJsZSAnYScgYXMgQE5vbk5scyIgInRydWUiCitjbGFzcyBGb28geworICBwdWJsaWMgYm9vbGVhbiBkb1Rlc3QoKSB7CisgICAgU3RyaW5nIGE7CisgICAgcmV0dXJuIGEuc3RhcnRzV2l0aCgidGU8Y2FyZXQ+c3QiKTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9pMThuL2JlZm9yZU5vbk5sc0NvbnN0cnVjdG9yLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2kxOG4vYmVmb3JlTm9uTmxzQ29uc3RydWN0b3IuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45Yzg3YTU5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9pMThuL2JlZm9yZU5vbk5sc0NvbnN0cnVjdG9yLmphdmEKQEAgLTAsMCArMSw2IEBACisvLyAiQW5ub3RhdGUgdmFyaWFibGUgJ2EnIGFzIEBOb25ObHMiICJ0cnVlIgorY2xhc3MgRm9vIHsKKyAgcHVibGljIHZvaWQgZG9UZXN0KCkgeworICAgIFN0cmluZyBhID0gbmV3IFN0cmluZygidGU8Y2FyZXQ+c3QiKTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9pMThuL2JlZm9yZU5vbk5sc0NvbnN0cnVjdG9yQXNzaWdubWVudC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9pMThuL2JlZm9yZU5vbk5sc0NvbnN0cnVjdG9yQXNzaWdubWVudC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI3ZGRiY2MKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2kxOG4vYmVmb3JlTm9uTmxzQ29uc3RydWN0b3JBc3NpZ25tZW50LmphdmEKQEAgLTAsMCArMSw3IEBACisvLyAiQW5ub3RhdGUgdmFyaWFibGUgJ2EnIGFzIEBOb25ObHMiICJ0cnVlIgorY2xhc3MgRm9vIHsKKyAgcHVibGljIHZvaWQgZG9UZXN0KCkgeworICAgIFN0cmluZyBhOworICAgICBhID0gbmV3IFN0cmluZygidGU8Y2FyZXQ+c3QiKTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9pMThuL2JlZm9yZU5vbk5sc0VxdWFscy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9pMThuL2JlZm9yZU5vbk5sc0VxdWFscy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM2NzJiNGEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2kxOG4vYmVmb3JlTm9uTmxzRXF1YWxzLmphdmEKQEAgLTAsMCArMSw3IEBACisvLyAiQW5ub3RhdGUgdmFyaWFibGUgJ2EnIGFzIEBOb25ObHMiICJ0cnVlIgorY2xhc3MgRm9vIHsKKyAgcHVibGljIGJvb2xlYW4gZG9UZXN0KCkgeworICAgIFN0cmluZyBhOworICAgIHJldHVybiAidGU8Y2FyZXQ+c3QiLmVxdWFscyhhKQorICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2kxOG4vYmVmb3JlTm9uTmxzRmllbGQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvaTE4bi9iZWZvcmVOb25ObHNGaWVsZC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA0YTAwZDYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2kxOG4vYmVmb3JlTm9uTmxzRmllbGQuamF2YQpAQCAtMCwwICsxLDQgQEAKKy8vICJBbm5vdGF0ZSBmaWVsZCAnZmllbGQnIGFzIEBOb25ObHMiICJ0cnVlIgorY2xhc3MgRm9vIHsKKyAgU3RyaW5nIGZpZWxkID0gInQ8Y2FyZXQ+ZXh0IjsKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvaTE4bi9iZWZvcmVOb25ObHNQYXJhbS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9pMThuL2JlZm9yZU5vbk5sc1BhcmFtLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGViNjBhNQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvaTE4bi9iZWZvcmVOb25ObHNQYXJhbS5qYXZhCkBAIC0wLDAgKzEsOSBAQAorLy8gIkFubm90YXRlIHBhcmFtZXRlciAncycgYXMgQE5vbk5scyIgInRydWUiCitjbGFzcyBGb28geworICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7CisgICAgZG9TdHJpbmdUZXN0KCJ0ZTxjYXJldD5zdCIpOworICB9CisKKyAgcHJpdmF0ZSB2b2lkIGRvU3RyaW5nVGVzdChTdHJpbmcgcykgeworICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2kxOG4vYmVmb3JlTm9uTmxzUmV0dXJuLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2kxOG4vYmVmb3JlTm9uTmxzUmV0dXJuLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGU0MWY5MwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvaTE4bi9iZWZvcmVOb25ObHNSZXR1cm4uamF2YQpAQCAtMCwwICsxLDYgQEAKKy8vICJBbm5vdGF0ZSBtZXRob2QgJ2RvVGVzdCcgYXMgQE5vbk5scyIgInRydWUiCitjbGFzcyBGb28geworICBwdWJsaWMgU3RyaW5nIGRvVGVzdCgpIHsKKyAgICByZXR1cm4gInQ8Y2FyZXQ+ZXh0IjsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9pMThuL2JlZm9yZU5vbk5sc1ZhcmlhYmxlLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2kxOG4vYmVmb3JlTm9uTmxzVmFyaWFibGUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MzBlZDkzCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9pMThuL2JlZm9yZU5vbk5sc1ZhcmlhYmxlLmphdmEKQEAgLTAsMCArMSw2IEBACisvLyAiQW5ub3RhdGUgdmFyaWFibGUgJ2EnIGFzIEBOb25ObHMiICJ0cnVlIgorY2xhc3MgRm9vIHsKKyAgcHVibGljIHZvaWQgZG9UZXN0KCkgeworICAgIFN0cmluZyBhID0gInQ8Y2FyZXQ+ZXN0IjsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9pMThuL2JlZm9yZVN5c3RlbUNhbGwuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvaTE4bi9iZWZvcmVTeXN0ZW1DYWxsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2E4NzYyYQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvaTE4bi9iZWZvcmVTeXN0ZW1DYWxsLmphdmEKQEAgLTAsMCArMSw2IEBACisvLyAiQW5ub3RhdGUgZmllbGQgJ291dCcgYXMgQE5vbk5scyIgInRydWUiCitjbGFzcyBGb28geworICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJUZTxjYXJldD5zdCIpOworICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2kxOG5pemUvYWZ0ZXJDYXJldEF0UGx1cy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9pMThuaXplL2FmdGVyQ2FyZXRBdFBsdXMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZTU5Y2IxCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9pMThuaXplL2FmdGVyQ2FyZXRBdFBsdXMuamF2YQpAQCAtMCwwICsxLDUgQEAKK2NsYXNzIGEgeworICAgIHZvaWQgZigpIHsKKyAgICAgIFN0cmluZyBzID0gaTE4bml6ZWRFeHByOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2kxOG5pemUvYWZ0ZXJMaXRlcmFsLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2kxOG5pemUvYWZ0ZXJMaXRlcmFsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWU1OWNiMQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvaTE4bml6ZS9hZnRlckxpdGVyYWwuamF2YQpAQCAtMCwwICsxLDUgQEAKK2NsYXNzIGEgeworICAgIHZvaWQgZigpIHsKKyAgICAgIFN0cmluZyBzID0gaTE4bml6ZWRFeHByOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2kxOG5pemUvYWZ0ZXJMaXRlcmFsUmlnaHRTdWJTZWxlY3Rpb24uamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvaTE4bml6ZS9hZnRlckxpdGVyYWxSaWdodFN1YlNlbGVjdGlvbi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjllY2JlZjQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2kxOG5pemUvYWZ0ZXJMaXRlcmFsUmlnaHRTdWJTZWxlY3Rpb24uamF2YQpAQCAtMCwwICsxLDMgQEAKK2NsYXNzIHMgeworICAgICAgICBTdHJpbmcgaSA9ICJ0ZSIgKyBpMThuaXplZEV4cHI7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9pMThuaXplL2FmdGVyTG9uZ0NvbmNhdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9pMThuaXplL2FmdGVyTG9uZ0NvbmNhdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjllNTljYjEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2kxOG5pemUvYWZ0ZXJMb25nQ29uY2F0LmphdmEKQEAgLTAsMCArMSw1IEBACitjbGFzcyBhIHsKKyAgICB2b2lkIGYoKSB7CisgICAgICBTdHJpbmcgcyA9IGkxOG5pemVkRXhwcjsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9pMThuaXplL2JlZm9yZUNhcmV0QXRQbHVzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2kxOG5pemUvYmVmb3JlQ2FyZXRBdFBsdXMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNTA3MjNlCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9pMThuaXplL2JlZm9yZUNhcmV0QXRQbHVzLmphdmEKQEAgLTAsMCArMSw1IEBACitjbGFzcyBhIHsKKyAgICB2b2lkIGYoKSB7CisgICAgICBTdHJpbmcgcyA9ICJ4eHh4eCIgKyB0aGlzIDxjYXJldD4rICJ5eXl5IjsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9pMThuaXplL2JlZm9yZUNoYXJhY3RlckxpdGVyYWwuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvaTE4bml6ZS9iZWZvcmVDaGFyYWN0ZXJMaXRlcmFsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjMxMGQyNAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvaTE4bml6ZS9iZWZvcmVDaGFyYWN0ZXJMaXRlcmFsLmphdmEKQEAgLTAsMCArMSw1IEBACitjbGFzcyBhIHsKKyAgICB2b2lkIGYoKSB7CisgICAgICBjaGFyIGMgPSAnPGNhcmV0PnknOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2kxOG5pemUvYmVmb3JlTGl0ZXJhbC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9pMThuaXplL2JlZm9yZUxpdGVyYWwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lM2Y1YmEwCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9pMThuaXplL2JlZm9yZUxpdGVyYWwuamF2YQpAQCAtMCwwICsxLDUgQEAKK2NsYXNzIGEgeworICAgIHZvaWQgZigpIHsKKyAgICAgIFN0cmluZyBzID0gIjxjYXJldD54eHh4eCI7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvaTE4bml6ZS9iZWZvcmVMaXRlcmFsUmlnaHRTdWJTZWxlY3Rpb24uamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvaTE4bml6ZS9iZWZvcmVMaXRlcmFsUmlnaHRTdWJTZWxlY3Rpb24uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNWRjMDAwCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9pMThuaXplL2JlZm9yZUxpdGVyYWxSaWdodFN1YlNlbGVjdGlvbi5qYXZhCkBAIC0wLDAgKzEsMyBAQAorY2xhc3MgcyB7CisgICAgICAgIFN0cmluZyBpID0gInRlPGNhcmV0PjxzZWxlY3Rpb24+c3Q8L3NlbGVjdGlvbj4iOworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvaTE4bml6ZS9iZWZvcmVMb25nQ29uY2F0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2kxOG5pemUvYmVmb3JlTG9uZ0NvbmNhdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUyODhjMmIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2kxOG5pemUvYmVmb3JlTG9uZ0NvbmNhdC5qYXZhCkBAIC0wLDAgKzEsNSBAQAorY2xhc3MgYSB7CisgICAgdm9pZCBmKCkgeworICAgICAgU3RyaW5nIHMgPSA8Y2FyZXQ+Inh4eHh4IiArIHRoaXMgKyAieXl5eSIgKyB0aGlzOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2kxOG5pemUvYmVmb3JlT3V0c2lkZUxpdGVyYWwuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvaTE4bml6ZS9iZWZvcmVPdXRzaWRlTGl0ZXJhbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNkOWUxMDMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2kxOG5pemUvYmVmb3JlT3V0c2lkZUxpdGVyYWwuamF2YQpAQCAtMCwwICsxLDUgQEAKK2NsYXNzIGEgeworICAgIHZvaWQgZigpIHsKKyAgICAgIDxjYXJldD5TdHJpbmcgcyA9ICJ4eHh4eCI7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvaW1wbGVtZW50QWJzdHJhY3RGcm9tTmV3L2JlZm9yZUltcGxlbWVudEludGVyZmFjZS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9pbXBsZW1lbnRBYnN0cmFjdEZyb21OZXcvYmVmb3JlSW1wbGVtZW50SW50ZXJmYWNlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTQyM2QwZQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvaW1wbGVtZW50QWJzdHJhY3RGcm9tTmV3L2JlZm9yZUltcGxlbWVudEludGVyZmFjZS5qYXZhCkBAIC0wLDAgKzEsOSBAQAorLy8gIkltcGxlbWVudCBNZXRob2RzIiAidHJ1ZSIKK2NsYXNzIGMgeworIHZvaWQgZm9vKCkgeworICAgbmV3IEk8U3RyaW5nPigpPGNhcmV0PgorIH0KK30KK2ludGVyZmFjZSBJPFQ+IHsKKyAgZm9vKFQgdCk7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9pbXBsZW1lbnRBYnN0cmFjdEZyb21OZXcvYmVmb3JlSW1wbGVtZW50SW50ZXJmYWNlSW5jb21wbGV0ZS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9pbXBsZW1lbnRBYnN0cmFjdEZyb21OZXcvYmVmb3JlSW1wbGVtZW50SW50ZXJmYWNlSW5jb21wbGV0ZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYyNzkyMzYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2ltcGxlbWVudEFic3RyYWN0RnJvbU5ldy9iZWZvcmVJbXBsZW1lbnRJbnRlcmZhY2VJbmNvbXBsZXRlLmphdmEKQEAgLTAsMCArMSw5IEBACisvLyAiSW1wbGVtZW50IE1ldGhvZHMiICJ0cnVlIgorY2xhc3MgYyB7Cisgdm9pZCBmb28oKSB7CisgICBuZXcgSTxTdHJpbmc+KDxjYXJldD4KKyB9Cit9CitpbnRlcmZhY2UgSTxUPiB7CisgIGZvbyhUIHQpOworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvaW1wbGVtZW50QWJzdHJhY3RGcm9tTmV3L2JlZm9yZUltcGxlbWVudEludGVyZmFjZUluY29tcGxldGVJbmF2YWlsYWJsZS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9pbXBsZW1lbnRBYnN0cmFjdEZyb21OZXcvYmVmb3JlSW1wbGVtZW50SW50ZXJmYWNlSW5jb21wbGV0ZUluYXZhaWxhYmxlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzJjMDVmNAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvaW1wbGVtZW50QWJzdHJhY3RGcm9tTmV3L2JlZm9yZUltcGxlbWVudEludGVyZmFjZUluY29tcGxldGVJbmF2YWlsYWJsZS5qYXZhCkBAIC0wLDAgKzEsOSBAQAorLy8gIkltcGxlbWVudCBNZXRob2RzIiAiZmFsc2UiCitjbGFzcyBjIHsKKyB2b2lkIGZvbygpIHsKKyAgIG5ldyBJPFN0cmluZz4obmV3IFN0cmluZyg8Y2FyZXQ+CisgfQorfQoraW50ZXJmYWNlIEk8VD4geworICBmb28oVCB0KTsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2ltcGxlbWVudEFic3RyYWN0RnJvbU5ldy9iZWZvcmVJbXBsZW1lbnRzUnVubmFibGUuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvaW1wbGVtZW50QWJzdHJhY3RGcm9tTmV3L2JlZm9yZUltcGxlbWVudHNSdW5uYWJsZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE1NDA5Y2UKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2ltcGxlbWVudEFic3RyYWN0RnJvbU5ldy9iZWZvcmVJbXBsZW1lbnRzUnVubmFibGUuamF2YQpAQCAtMCwwICsxLDYgQEAKKy8vICJJbXBsZW1lbnQgTWV0aG9kcyIgInRydWUiCitjbGFzcyBjIHsKKyB2b2lkIGZvbygpIHsKKyAgIG5ldyBSdW5uYWJsZSgpPGNhcmV0PgorIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2luaXRpYWxpemVGaW5hbEZpZWxkSW5Db25zdHJ1Y3Rvci9hZnRlck11bHRpcGxlSW52b2tlLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2luaXRpYWxpemVGaW5hbEZpZWxkSW5Db25zdHJ1Y3Rvci9hZnRlck11bHRpcGxlSW52b2tlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODk5YjVlNgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvaW5pdGlhbGl6ZUZpbmFsRmllbGRJbkNvbnN0cnVjdG9yL2FmdGVyTXVsdGlwbGVJbnZva2UuamF2YQpAQCAtMCwwICsxLDEyIEBACisvLyAiSW5pdGlhbGl6ZSBpbiBjb25zdHJ1Y3RvciIgInRydWUiCitjbGFzcyBBIHsKKyAgcHJpdmF0ZSBmaW5hbCBpbnQgdmFyOworCisgIHByaXZhdGUgTWFpbigpIHsKKyAgICAgIHZhciA9IDxjYXJldD48c2VsZWN0aW9uPjA8L3NlbGVjdGlvbj47CisgIH0KKworICBwcml2YXRlIE1haW4oaW50IHZhcikgeworICAgICAgdGhpcy52YXIgPSAwOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9pbml0aWFsaXplRmluYWxGaWVsZEluQ29uc3RydWN0b3IvYWZ0ZXJQYXJhbVdpdGhTYW1lTmFtZS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9pbml0aWFsaXplRmluYWxGaWVsZEluQ29uc3RydWN0b3IvYWZ0ZXJQYXJhbVdpdGhTYW1lTmFtZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI0NjcyYWQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2luaXRpYWxpemVGaW5hbEZpZWxkSW5Db25zdHJ1Y3Rvci9hZnRlclBhcmFtV2l0aFNhbWVOYW1lLmphdmEKQEAgLTAsMCArMSw4IEBACisvLyAiSW5pdGlhbGl6ZSBpbiBjb25zdHJ1Y3RvciIgInRydWUiCitjbGFzcyBBIHsKKyAgcHJpdmF0ZSBmaW5hbCBpbnQgdmFyOworCisgIHByaXZhdGUgTWFpbihpbnQgdmFyKSB7CisgICAgICB0aGlzLnZhciA9IDxjYXJldD48c2VsZWN0aW9uPjA8L3NlbGVjdGlvbj47CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2luaXRpYWxpemVGaW5hbEZpZWxkSW5Db25zdHJ1Y3Rvci9hZnRlclNpbXBsZUludm9rZS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9pbml0aWFsaXplRmluYWxGaWVsZEluQ29uc3RydWN0b3IvYWZ0ZXJTaW1wbGVJbnZva2UuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNTk0YzQzCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9pbml0aWFsaXplRmluYWxGaWVsZEluQ29uc3RydWN0b3IvYWZ0ZXJTaW1wbGVJbnZva2UuamF2YQpAQCAtMCwwICsxLDggQEAKKy8vICJJbml0aWFsaXplIGluIGNvbnN0cnVjdG9yIiAidHJ1ZSIKK2NsYXNzIEEgeworICBwcml2YXRlIGZpbmFsIGludCB2YXI7CisKKyAgcHJpdmF0ZSBNYWluKCkgeworICAgICAgdmFyID0gPGNhcmV0PjxzZWxlY3Rpb24+MDwvc2VsZWN0aW9uPjsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvaW5pdGlhbGl6ZUZpbmFsRmllbGRJbkNvbnN0cnVjdG9yL2JlZm9yZU11bHRpcGxlSW52b2tlLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2luaXRpYWxpemVGaW5hbEZpZWxkSW5Db25zdHJ1Y3Rvci9iZWZvcmVNdWx0aXBsZUludm9rZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU1M2VkYjIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2luaXRpYWxpemVGaW5hbEZpZWxkSW5Db25zdHJ1Y3Rvci9iZWZvcmVNdWx0aXBsZUludm9rZS5qYXZhCkBAIC0wLDAgKzEsMTAgQEAKKy8vICJJbml0aWFsaXplIGluIGNvbnN0cnVjdG9yIiAidHJ1ZSIKK2NsYXNzIEEgeworICBwcml2YXRlIGZpbmFsIGludCB2PGNhcmV0PmFyOworCisgIHByaXZhdGUgTWFpbigpIHsKKyAgfQorCisgIHByaXZhdGUgTWFpbihpbnQgdmFyKSB7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2luaXRpYWxpemVGaW5hbEZpZWxkSW5Db25zdHJ1Y3Rvci9iZWZvcmVQYXJhbVdpdGhTYW1lTmFtZS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9pbml0aWFsaXplRmluYWxGaWVsZEluQ29uc3RydWN0b3IvYmVmb3JlUGFyYW1XaXRoU2FtZU5hbWUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOTBhODdiCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9pbml0aWFsaXplRmluYWxGaWVsZEluQ29uc3RydWN0b3IvYmVmb3JlUGFyYW1XaXRoU2FtZU5hbWUuamF2YQpAQCAtMCwwICsxLDcgQEAKKy8vICJJbml0aWFsaXplIGluIGNvbnN0cnVjdG9yIiAidHJ1ZSIKK2NsYXNzIEEgeworICBwcml2YXRlIGZpbmFsIGludCB2PGNhcmV0PmFyOworCisgIHByaXZhdGUgTWFpbihpbnQgdmFyKSB7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2luaXRpYWxpemVGaW5hbEZpZWxkSW5Db25zdHJ1Y3Rvci9iZWZvcmVTaW1wbGVJbnZva2UuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvaW5pdGlhbGl6ZUZpbmFsRmllbGRJbkNvbnN0cnVjdG9yL2JlZm9yZVNpbXBsZUludm9rZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmExNjZmOGMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2luaXRpYWxpemVGaW5hbEZpZWxkSW5Db25zdHJ1Y3Rvci9iZWZvcmVTaW1wbGVJbnZva2UuamF2YQpAQCAtMCwwICsxLDcgQEAKKy8vICJJbml0aWFsaXplIGluIGNvbnN0cnVjdG9yIiAidHJ1ZSIKK2NsYXNzIEEgeworICBwcml2YXRlIGZpbmFsIGludCB2PGNhcmV0PmFyOworCisgIHByaXZhdGUgTWFpbigpIHsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvaW5zZXJ0TmV3L2FmdGVyMS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9pbnNlcnROZXcvYWZ0ZXIxLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGNiZDE1YQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvaW5zZXJ0TmV3L2FmdGVyMS5qYXZhCkBAIC0wLDAgKzEsNyBAQAorLy8gIkluc2VydCBuZXciICJ0cnVlIgorY2xhc3MgYSB7Cisgdm9pZCBmKCkgeworICAgICA8Y2FyZXQ+bmV3IFJ1bnRpbWVFeGNlcHRpb24oKTsKKyB9Cit9CisKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvaW5zZXJ0TmV3L2FmdGVyMi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9pbnNlcnROZXcvYWZ0ZXIyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWUxZDZmNAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvaW5zZXJ0TmV3L2FmdGVyMi5qYXZhCkBAIC0wLDAgKzEsNyBAQAorLy8gIkluc2VydCBuZXciICJ0cnVlIgorY2xhc3MgYSB7Cisgdm9pZCBmKCkgeworICAgICB0aHJvdyA8Y2FyZXQ+bmV3IFJ1bnRpbWVFeGNlcHRpb24oKTsKKyB9Cit9CisKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvaW5zZXJ0TmV3L2JlZm9yZTEuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvaW5zZXJ0TmV3L2JlZm9yZTEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xM2U4OTEwMgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvaW5zZXJ0TmV3L2JlZm9yZTEuamF2YQpAQCAtMCwwICsxLDcgQEAKKy8vICJJbnNlcnQgbmV3IiAidHJ1ZSIKK2NsYXNzIGEgeworIHZvaWQgZigpIHsKKyAgICAgPGNhcmV0PlJ1bnRpbWVFeGNlcHRpb24oKTsKKyB9Cit9CisKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvaW5zZXJ0TmV3L2JlZm9yZTIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvaW5zZXJ0TmV3L2JlZm9yZTIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOTlhNzIyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9pbnNlcnROZXcvYmVmb3JlMi5qYXZhCkBAIC0wLDAgKzEsNyBAQAorLy8gIkluc2VydCBuZXciICJ0cnVlIgorY2xhc3MgYSB7Cisgdm9pZCBmKCkgeworICAgICB0aHJvdyA8Y2FyZXQ+UnVudGltZUV4Y2VwdGlvbigpOworIH0KK30KKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9pbnNlcnRTdXBlci9hZnRlcjEuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvaW5zZXJ0U3VwZXIvYWZ0ZXIxLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmI2NGZhMAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvaW5zZXJ0U3VwZXIvYWZ0ZXIxLmphdmEKQEAgLTAsMCArMSwxNCBAQAorLy8gIkluc2VydCAnc3VwZXIoKTsnIiAidHJ1ZSIKK2ltcG9ydCBqYXZhLmlvLio7CisKK2NsYXNzIGMgeworIHB1YmxpYyBjKGludCBpKSB7CisgfQorfQorY2xhc3MgYSBleHRlbmRzIGMgeworIGEoKSB7CisgICAgIHN1cGVyKDxjYXJldD4pOworICAgICBpbnQgaSA9IDk7CisgfQorfQorCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2luc2VydFN1cGVyL2JlZm9yZTEuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvaW5zZXJ0U3VwZXIvYmVmb3JlMS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQzZjkwYWYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2luc2VydFN1cGVyL2JlZm9yZTEuamF2YQpAQCAtMCwwICsxLDEzIEBACisvLyAiSW5zZXJ0ICdzdXBlcigpOyciICJ0cnVlIgoraW1wb3J0IGphdmEuaW8uKjsKKworY2xhc3MgYyB7CisgcHVibGljIGMoaW50IGkpIHsKKyB9Cit9CitjbGFzcyBhIGV4dGVuZHMgYyB7CisgPGNhcmV0PmEoKSB7CisgICAgIGludCBpID0gOTsKKyB9Cit9CisKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvaW50cm9kdWNlVmFyaWFibGUvYmVmb3JlQXNzaWdubWVudEV4cHJlc3Npb24uamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvaW50cm9kdWNlVmFyaWFibGUvYmVmb3JlQXNzaWdubWVudEV4cHJlc3Npb24uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNWY3ZTA5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9pbnRyb2R1Y2VWYXJpYWJsZS9iZWZvcmVBc3NpZ25tZW50RXhwcmVzc2lvbi5qYXZhCkBAIC0wLDAgKzEsOSBAQAorLy8gIkludHJvZHVjZSBsb2NhbCB2YXJpYWJsZSIgImZhbHNlIgorCitjbGFzcyBhIHsKKyAgdm9pZCBhKCkgeworICAgIGludCBpOworICAgIGkgPSBJbnRlZ2VyLnBhcjxjYXJldD5zZUludCgiMTAiKTsKKyAgfQorfQorCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2ludHJvZHVjZVZhcmlhYmxlL2JlZm9yZUluaXRpYWxpemF0aW9uLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2ludHJvZHVjZVZhcmlhYmxlL2JlZm9yZUluaXRpYWxpemF0aW9uLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWY1ZjU5NAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvaW50cm9kdWNlVmFyaWFibGUvYmVmb3JlSW5pdGlhbGl6YXRpb24uamF2YQpAQCAtMCwwICsxLDggQEAKKy8vICJJbnRyb2R1Y2UgbG9jYWwgdmFyaWFibGUiICJmYWxzZSIKKworY2xhc3MgYSB7CisgIHZvaWQgYSgpIHsKKyAgICBpbnQgaSA9IEludGVnZXIucGFyPGNhcmV0PnNlSW50KCIxMCIpOworICB9Cit9CisKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvaW50cm9kdWNlVmFyaWFibGUvYmVmb3JlVm9pZC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9pbnRyb2R1Y2VWYXJpYWJsZS9iZWZvcmVWb2lkLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODM0ZjE5MgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvaW50cm9kdWNlVmFyaWFibGUvYmVmb3JlVm9pZC5qYXZhCkBAIC0wLDAgKzEsOSBAQAorLy8gIkludHJvZHVjZSBsb2NhbCB2YXJpYWJsZSIgImZhbHNlIgorCitjbGFzcyBhIHsKKyAgdm9pZCBhKCkgeworICAgIGE8Y2FyZXQ+KCk7CisgIH0KKworfQorCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2l0ZXJhdGVPdmVyL2FmdGVyMS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9pdGVyYXRlT3Zlci9hZnRlcjEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNTg3MzIyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9pdGVyYXRlT3Zlci9hZnRlcjEuamF2YQpAQCAtMCwwICsxLDExIEBACitpbXBvcnQgamF2YS5sYW5nLmFubm90YXRpb24uQW5ub3RhdGlvbjsKKworLy8gIkl0ZXJhdGUiICJ0cnVlIgorY2xhc3MgVGVzdCB7CisgIHZvaWQgZm9vKCkgeworICAgICAgZm9yIChBbm5vdGF0aW9uIGFubm90YXRpb24gOiBnZXRDbGFzcygpLmdldEFubm90YXRpb25zKCkpIHsKKyAgICAgICAgICAKKyAgICAgIH0KKworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9pdGVyYXRlT3Zlci9hZnRlcjIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvaXRlcmF0ZU92ZXIvYWZ0ZXIyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTU4NzMyMgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvaXRlcmF0ZU92ZXIvYWZ0ZXIyLmphdmEKQEAgLTAsMCArMSwxMSBAQAoraW1wb3J0IGphdmEubGFuZy5hbm5vdGF0aW9uLkFubm90YXRpb247CisKKy8vICJJdGVyYXRlIiAidHJ1ZSIKK2NsYXNzIFRlc3QgeworICB2b2lkIGZvbygpIHsKKyAgICAgIGZvciAoQW5ub3RhdGlvbiBhbm5vdGF0aW9uIDogZ2V0Q2xhc3MoKS5nZXRBbm5vdGF0aW9ucygpKSB7CisgICAgICAgICAgCisgICAgICB9CisKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvaXRlcmF0ZU92ZXIvYmVmb3JlMS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9pdGVyYXRlT3Zlci9iZWZvcmUxLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDMwOTU0OQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvaXRlcmF0ZU92ZXIvYmVmb3JlMS5qYXZhCkBAIC0wLDAgKzEsNiBAQAorLy8gIkl0ZXJhdGUiICJ0cnVlIgorY2xhc3MgVGVzdCB7CisgIHZvaWQgZm9vKCkgeworICAgIGdldENsYXNzKCkuZ2V0QW5ub3RhdGlvPGNhcmV0Pm5zKCkKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvaXRlcmF0ZU92ZXIvYmVmb3JlMi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9pdGVyYXRlT3Zlci9iZWZvcmUyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDA3ODVmYgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvaXRlcmF0ZU92ZXIvYmVmb3JlMi5qYXZhCkBAIC0wLDAgKzEsNiBAQAorLy8gIkl0ZXJhdGUiICJ0cnVlIgorY2xhc3MgVGVzdCB7CisgIHZvaWQgZm9vKCkgeworICAgIGdldENsYXNzKCkuZ2V0QW5ub3RhdGlvbnMoKTxjYXJldD4KKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvaXRlcmF0ZU92ZXIvYmVmb3JlMy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9pdGVyYXRlT3Zlci9iZWZvcmUzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjllYTkwYQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvaXRlcmF0ZU92ZXIvYmVmb3JlMy5qYXZhCkBAIC0wLDAgKzEsNiBAQAorLy8gIkl0ZXJhdGUiICJmYWxzZSIKK2NsYXNzIFRlc3QgeworICB2b2lkIGZvbygpIHsKKyAgICBmaW5hbCBBbm5vdGF0aW9uW10gYW5ub3RhdGlvbnMgPSBnZXRDbGFzcygpLmdldEFubm90YXQ8Y2FyZXQ+aW9ucygpOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9qYXZhZG9jVGFncy9hZnRlcjEuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvamF2YWRvY1RhZ3MvYWZ0ZXIxLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDE1MTdjMAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvamF2YWRvY1RhZ3MvYWZ0ZXIxLmphdmEKQEAgLTAsMCArMSw5IEBACisvLyAiQWRkIHRhZyBAdGhyb3dzIGphdmEubGFuZy5FeGNlcHRpb24iICJ0cnVlIgorY2xhc3MgYSB7CisvKioKKyAqIEB0aHJvd3MgRXhjZXB0aW9uCisgKi8KK3B1YmxpYyB2b2lkIDxjYXJldD5ydW4oKSB0aHJvd3MgRXhjZXB0aW9uIHsKKworfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvamF2YWRvY1RhZ3MvYWZ0ZXIzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2phdmFkb2NUYWdzL2FmdGVyMy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlmZDYzN2IKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2phdmFkb2NUYWdzL2FmdGVyMy5qYXZhCkBAIC0wLDAgKzEsMTEgQEAKKy8vICJBZGQgdGFnIEBwYXJhbSBmb3IgcGFyYW1ldGVyICdhJyIgInRydWUiCitjbGFzcyBhIHsKKworLyoqCisgKiBAcGFyYW0gYQorICogQHBhcmFtIGIKKyovCitwdWJsaWMgdm9pZCA8Y2FyZXQ+Zm9vKGludCBhLCBpbnQgYiwgaW4gYyl7CisKK30KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2phdmFkb2NUYWdzL2FmdGVyNC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9qYXZhZG9jVGFncy9hZnRlcjQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZWVmY2QzCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9qYXZhZG9jVGFncy9hZnRlcjQuamF2YQpAQCAtMCwwICsxLDYgQEAKKy8vICJBZGQgdGFnIEBwYXJhbSA8VD4iICJ0cnVlIgorLyoqCisgKiBAcGFyYW0gPFQ+CisgKi8KK2NsYXNzIDxjYXJldD5hPFQ+IHsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2phdmFkb2NUYWdzL2JlZm9yZTEuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvamF2YWRvY1RhZ3MvYmVmb3JlMS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI4OTY4NzUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2phdmFkb2NUYWdzL2JlZm9yZTEuamF2YQpAQCAtMCwwICsxLDggQEAKKy8vICJBZGQgdGFnIEB0aHJvd3MgamF2YS5sYW5nLkV4Y2VwdGlvbiIgInRydWUiCitjbGFzcyBhIHsKKy8qKgorKi8KK3B1YmxpYyB2b2lkIDxjYXJldD5ydW4oKSB0aHJvd3MgRXhjZXB0aW9uIHsKKworfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvamF2YWRvY1RhZ3MvYmVmb3JlMi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9qYXZhZG9jVGFncy9iZWZvcmUyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGMwNjU2ZgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvamF2YWRvY1RhZ3MvYmVmb3JlMi5qYXZhCkBAIC0wLDAgKzEsMTAgQEAKKy8vICJBZGQgdGFnIEB0aHJvd3MgamF2YS5sYW5nRXhjZXB0aW9uIiAiZmFsc2UiCitjbGFzcyBhIHsKKworLyoqCisqIEB0aHJvd3MgamF2YS5sYW5nLkV4Y2VwdGlvbgorKi8KK3B1YmxpYyB2b2lkIDxjYXJldD5ydW4oKSB0aHJvd3MgRXhjZXB0aW9ueworCit9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9qYXZhZG9jVGFncy9iZWZvcmUzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2phdmFkb2NUYWdzL2JlZm9yZTMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NzNiNzI1Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9qYXZhZG9jVGFncy9iZWZvcmUzLmphdmEKQEAgLTAsMCArMSwxMCBAQAorLy8gIkFkZCB0YWcgQHBhcmFtIGZvciBwYXJhbWV0ZXIgJ2EnIiAidHJ1ZSIKK2NsYXNzIGEgeworCisvKioKKyAqIEBwYXJhbSBiCisqLworcHVibGljIHZvaWQgPGNhcmV0PmZvbyhpbnQgYSwgaW50IGIsIGluIGMpeworCit9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9qYXZhZG9jVGFncy9iZWZvcmU0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2phdmFkb2NUYWdzL2JlZm9yZTQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZTczMjM0Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9qYXZhZG9jVGFncy9iZWZvcmU0LmphdmEKQEAgLTAsMCArMSw1IEBACisvLyAiQWRkIHRhZyBAcGFyYW0gPFQ+IiAidHJ1ZSIKKy8qKgorICovCitjbGFzcyA8Y2FyZXQ+YTxUPiB7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9sYW1iZGEybWV0aG9kUmVmZXJlbmNlL2FmdGVyQ29uc3RydWN0b3JSZWNlaXZlck5vblN0YXRpY0lubmVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2xhbWJkYTJtZXRob2RSZWZlcmVuY2UvYWZ0ZXJDb25zdHJ1Y3RvclJlY2VpdmVyTm9uU3RhdGljSW5uZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NmNjNjJiCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9sYW1iZGEybWV0aG9kUmVmZXJlbmNlL2FmdGVyQ29uc3RydWN0b3JSZWNlaXZlck5vblN0YXRpY0lubmVyLmphdmEKQEAgLTAsMCArMSwxMyBAQAorLy8gIlJlcGxhY2UgbGFtYmRhIHdpdGggbWV0aG9kIHJlZmVyZW5jZSIgInRydWUiCitjbGFzcyBOb25TdGF0aWNJbm5lciB7CisgIGNsYXNzIElubmVyIHsKKyAgICBJbm5lcigpIHt9CisgIH0KKworICBpbnRlcmZhY2UgSTEgeworICAgIElubmVyIG0oTm9uU3RhdGljSW5uZXIgcmVjKTsKKyAgfQorICBzdGF0aWMgeworICAgIEkxIGkxID0gSW5uZXI6Om5ldzsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9sYW1iZGEybWV0aG9kUmVmZXJlbmNlL2FmdGVyQ29uc3RydWN0b3JSZWNlaXZlclN0YXRpY0lubmVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2xhbWJkYTJtZXRob2RSZWZlcmVuY2UvYWZ0ZXJDb25zdHJ1Y3RvclJlY2VpdmVyU3RhdGljSW5uZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZWIwMWYxCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9sYW1iZGEybWV0aG9kUmVmZXJlbmNlL2FmdGVyQ29uc3RydWN0b3JSZWNlaXZlclN0YXRpY0lubmVyLmphdmEKQEAgLTAsMCArMSwxNyBAQAorLy8gIlJlcGxhY2UgbGFtYmRhIHdpdGggbWV0aG9kIHJlZmVyZW5jZSIgInRydWUiCitjbGFzcyBTdGF0aWNJbm5lciB7CisKKyAgc3RhdGljIGNsYXNzIElubmVyIHsKKyAgICBJbm5lcihTdGF0aWNJbm5lciBvdXRlcikge30KKyAgfQorCisKKyAgaW50ZXJmYWNlIEkxIHsKKyAgICBJbm5lciBtKFN0YXRpY0lubmVyIHJlYyk7CisgIH0KKworCisgIHN0YXRpYyB7CisgICAgSTEgaTEgPSBJbm5lcjo6bmV3OworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9sYW1iZGEybWV0aG9kUmVmZXJlbmNlL2FmdGVyQ29uc3RydWN0b3JSZWYuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvbGFtYmRhMm1ldGhvZFJlZmVyZW5jZS9hZnRlckNvbnN0cnVjdG9yUmVmLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzMzZTFjNAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvbGFtYmRhMm1ldGhvZFJlZmVyZW5jZS9hZnRlckNvbnN0cnVjdG9yUmVmLmphdmEKQEAgLTAsMCArMSwxMyBAQAorLy8gIlJlcGxhY2UgbGFtYmRhIHdpdGggbWV0aG9kIHJlZmVyZW5jZSIgInRydWUiCitjbGFzcyBNeVRlc3QyPFg+IHsKKyAgICBNeVRlc3QyKFggeCkgeworICAgIH0KKworICAgIGludGVyZmFjZSBJPFo+IHsKKyAgICAgICAgTXlUZXN0MjxaPiBtKFogeik7CisgICAgfQorCisgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworICAgICAgICBJPFN0cmluZz4gcyA9IE15VGVzdDI6Om5ldzsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2xhbWJkYTJtZXRob2RSZWZlcmVuY2UvYWZ0ZXJDb25zdHJ1Y3RvclJlZjEuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvbGFtYmRhMm1ldGhvZFJlZmVyZW5jZS9hZnRlckNvbnN0cnVjdG9yUmVmMS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU2MTI5MDIyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9sYW1iZGEybWV0aG9kUmVmZXJlbmNlL2FmdGVyQ29uc3RydWN0b3JSZWYxLmphdmEKQEAgLTAsMCArMSwzMyBAQAorLy8gIlJlcGxhY2UgbGFtYmRhIHdpdGggbWV0aG9kIHJlZmVyZW5jZSIgInRydWUiCitjbGFzcyBOb25TdGF0aWNJbm5lcjMgeworICAgIGNsYXNzIEZvbyB7CisgICAgICAgIEZvbyhJbnRlZ2VyIGkpIHt9CisgICAgICAgIEZvbygpIHt9CisgICAgfQorCisgICAgaW50ZXJmYWNlIEkxPFg+IHsKKyAgICAgICAgWCBtKGludCBpKTsKKyAgICB9CisKKyAgICBpbnRlcmZhY2UgSTI8WD4geworICAgICAgICBYIG0oKTsKKyAgICB9CisKKyAgICBpbnRlcmZhY2UgSTM8WD4geworICAgICAgICBYIG0oTm9uU3RhdGljSW5uZXIzIHJlYywgaW50IGkpOworICAgIH0KKworICAgIGludGVyZmFjZSBJNDxYPiB7CisgICAgICAgIFggbShOb25TdGF0aWNJbm5lcjMgcmVjKTsKKyAgICB9CisKKyAgICB7CisgICAgICAgIEkxPEZvbz4gYjEgPSBGb286Om5ldzsKKyAgICAgICAgSTI8Rm9vPiBiMiA9ICgpIC0+IG5ldyBGb28oKTsKKyAgICB9CisKKyAgICB7CisgICAgICAgIEkzPEZvbz4gYjEgPSAocmVjLCBpKSAtPiByZWMubmV3IEZvbyhpKTsKKyAgICAgICAgSTQ8Rm9vPiBiMiA9IChyZWMpIC0+IHJlYy5uZXcgRm9vKCk7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvbGFtYmRhMm1ldGhvZFJlZmVyZW5jZS9hZnRlckNvbnN0cnVjdG9yUmVmMi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9sYW1iZGEybWV0aG9kUmVmZXJlbmNlL2FmdGVyQ29uc3RydWN0b3JSZWYyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDgwNjFkMAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvbGFtYmRhMm1ldGhvZFJlZmVyZW5jZS9hZnRlckNvbnN0cnVjdG9yUmVmMi5qYXZhCkBAIC0wLDAgKzEsMzMgQEAKKy8vICJSZXBsYWNlIGxhbWJkYSB3aXRoIG1ldGhvZCByZWZlcmVuY2UiICJ0cnVlIgorY2xhc3MgTm9uU3RhdGljSW5uZXIzIHsKKyAgICBjbGFzcyBGb28geworICAgICAgICBGb28oSW50ZWdlciBpKSB7fQorICAgICAgICBGb28oKSB7fQorICAgIH0KKworICAgIGludGVyZmFjZSBJMTxYPiB7CisgICAgICAgIFggbShpbnQgaSk7CisgICAgfQorCisgICAgaW50ZXJmYWNlIEkyPFg+IHsKKyAgICAgICAgWCBtKCk7CisgICAgfQorCisgICAgaW50ZXJmYWNlIEkzPFg+IHsKKyAgICAgICAgWCBtKE5vblN0YXRpY0lubmVyMyByZWMsIGludCBpKTsKKyAgICB9CisKKyAgICBpbnRlcmZhY2UgSTQ8WD4geworICAgICAgICBYIG0oTm9uU3RhdGljSW5uZXIzIHJlYyk7CisgICAgfQorCisgICAgeworICAgICAgICBJMTxGb28+IGIxID0gKGkpIC0+IG5ldyBGb28oaSk7CisgICAgICAgIEkyPEZvbz4gYjIgPSBGb286Om5ldzsKKyAgICB9CisKKyAgICB7CisgICAgICAgIEkzPEZvbz4gYjEgPSAocmVjLCBpKSAtPiByZWMubmV3IEZvbyhpKTsKKyAgICAgICAgSTQ8Rm9vPiBiMiA9IChyZWMpIC0+IHJlYy5uZXcgRm9vKCk7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvbGFtYmRhMm1ldGhvZFJlZmVyZW5jZS9hZnRlckNvbnN0cnVjdG9yUmVmMy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9sYW1iZGEybWV0aG9kUmVmZXJlbmNlL2FmdGVyQ29uc3RydWN0b3JSZWYzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWUwMmZhNAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvbGFtYmRhMm1ldGhvZFJlZmVyZW5jZS9hZnRlckNvbnN0cnVjdG9yUmVmMy5qYXZhCkBAIC0wLDAgKzEsMzMgQEAKKy8vICJSZXBsYWNlIGxhbWJkYSB3aXRoIG1ldGhvZCByZWZlcmVuY2UiICJ0cnVlIgorY2xhc3MgTm9uU3RhdGljSW5uZXIzIHsKKyAgICBjbGFzcyBGb28geworICAgICAgICBGb28oSW50ZWdlciBpKSB7fQorICAgICAgICBGb28oKSB7fQorICAgIH0KKworICAgIGludGVyZmFjZSBJMTxYPiB7CisgICAgICAgIFggbShpbnQgaSk7CisgICAgfQorCisgICAgaW50ZXJmYWNlIEkyPFg+IHsKKyAgICAgICAgWCBtKCk7CisgICAgfQorCisgICAgaW50ZXJmYWNlIEkzPFg+IHsKKyAgICAgICAgWCBtKE5vblN0YXRpY0lubmVyMyByZWMsIGludCBpKTsKKyAgICB9CisKKyAgICBpbnRlcmZhY2UgSTQ8WD4geworICAgICAgICBYIG0oTm9uU3RhdGljSW5uZXIzIHJlYyk7CisgICAgfQorCisgICAgeworICAgICAgICBJMTxGb28+IGIxID0gKGkpIC0+IG5ldyBGb28oaSk7CisgICAgICAgIEkyPEZvbz4gYjIgPSAoKSAtPiBuZXcgRm9vKCk7CisgICAgfQorCisgICAgeworICAgICAgICBJMzxGb28+IGIxID0gRm9vOjpuZXc7CisgICAgICAgIEk0PEZvbz4gYjIgPSAocmVjKSAtPiByZWMubmV3IEZvbygpOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2xhbWJkYTJtZXRob2RSZWZlcmVuY2UvYWZ0ZXJDb25zdHJ1Y3RvclJlZjQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvbGFtYmRhMm1ldGhvZFJlZmVyZW5jZS9hZnRlckNvbnN0cnVjdG9yUmVmNC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE1OTY4NWUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2xhbWJkYTJtZXRob2RSZWZlcmVuY2UvYWZ0ZXJDb25zdHJ1Y3RvclJlZjQuamF2YQpAQCAtMCwwICsxLDMzIEBACisvLyAiUmVwbGFjZSBsYW1iZGEgd2l0aCBtZXRob2QgcmVmZXJlbmNlIiAidHJ1ZSIKK2NsYXNzIE5vblN0YXRpY0lubmVyMyB7CisgICAgY2xhc3MgRm9vIHsKKyAgICAgICAgRm9vKEludGVnZXIgaSkge30KKyAgICAgICAgRm9vKCkge30KKyAgICB9CisKKyAgICBpbnRlcmZhY2UgSTE8WD4geworICAgICAgICBYIG0oaW50IGkpOworICAgIH0KKworICAgIGludGVyZmFjZSBJMjxYPiB7CisgICAgICAgIFggbSgpOworICAgIH0KKworICAgIGludGVyZmFjZSBJMzxYPiB7CisgICAgICAgIFggbShOb25TdGF0aWNJbm5lcjMgcmVjLCBpbnQgaSk7CisgICAgfQorCisgICAgaW50ZXJmYWNlIEk0PFg+IHsKKyAgICAgICAgWCBtKE5vblN0YXRpY0lubmVyMyByZWMpOworICAgIH0KKworICAgIHsKKyAgICAgICAgSTE8Rm9vPiBiMSA9IChpKSAtPiBuZXcgRm9vKGkpOworICAgICAgICBJMjxGb28+IGIyID0gKCkgLT4gbmV3IEZvbygpOworICAgIH0KKworICAgIHsKKyAgICAgICAgSTM8Rm9vPiBiMSA9IChyZWMsIGkpIC0+IHJlYy5uZXcgRm9vKGkpOworICAgICAgICBJNDxGb28+IGIyID0gRm9vOjpuZXc7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvbGFtYmRhMm1ldGhvZFJlZmVyZW5jZS9hZnRlckNvbnN0cnVjdG9yUmVmNi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9sYW1iZGEybWV0aG9kUmVmZXJlbmNlL2FmdGVyQ29uc3RydWN0b3JSZWY2LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGI1NWMwZgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvbGFtYmRhMm1ldGhvZFJlZmVyZW5jZS9hZnRlckNvbnN0cnVjdG9yUmVmNi5qYXZhCkBAIC0wLDAgKzEsMTMgQEAKKy8vICJSZXBsYWNlIGxhbWJkYSB3aXRoIG1ldGhvZCByZWZlcmVuY2UiICJ0cnVlIgorY2xhc3MgTm9uU3RhdGljSW5uZXIzIHsKKyAgICBjbGFzcyBGb28geworICAgIH0KKworICAgIGludGVyZmFjZSBJMTxYPiB7CisgICAgICAgIFggbSgpOworICAgIH0KKworICAgIHsKKyAgICAgICAgSTE8Rm9vPiBiMiA9IEZvbzo6bmV3OworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2xhbWJkYTJtZXRob2RSZWZlcmVuY2UvYWZ0ZXJOb1BhcmFtcy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9sYW1iZGEybWV0aG9kUmVmZXJlbmNlL2FmdGVyTm9QYXJhbXMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lM2Q4ZWEyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9sYW1iZGEybWV0aG9kUmVmZXJlbmNlL2FmdGVyTm9QYXJhbXMuamF2YQpAQCAtMCwwICsxLDkgQEAKKy8vICJSZXBsYWNlIGxhbWJkYSB3aXRoIG1ldGhvZCByZWZlcmVuY2UiICJ0cnVlIgorY2xhc3MgRXhhbXBsZSB7CisgIHB1YmxpYyB2b2lkIG0oKSB7CisgIH0KKworICB7CisgICAgUnVubmFibGUgciA9IHRoaXM6Om07CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2xhbWJkYTJtZXRob2RSZWZlcmVuY2UvYWZ0ZXJOb1BhcmFtc1N0YXRpYy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9sYW1iZGEybWV0aG9kUmVmZXJlbmNlL2FmdGVyTm9QYXJhbXNTdGF0aWMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOWEyNWRjCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9sYW1iZGEybWV0aG9kUmVmZXJlbmNlL2FmdGVyTm9QYXJhbXNTdGF0aWMuamF2YQpAQCAtMCwwICsxLDkgQEAKKy8vICJSZXBsYWNlIGxhbWJkYSB3aXRoIG1ldGhvZCByZWZlcmVuY2UiICJ0cnVlIgorY2xhc3MgRXhhbXBsZSB7CisgIHB1YmxpYyBzdGF0aWMgdm9pZCBtKCkgeworICB9CisKKyAgeworICAgIFJ1bm5hYmxlIHIgPSBFeGFtcGxlOjptOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9sYW1iZGEybWV0aG9kUmVmZXJlbmNlL2FmdGVyUmVjZWl2ZXJUeXBlLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2xhbWJkYTJtZXRob2RSZWZlcmVuY2UvYWZ0ZXJSZWNlaXZlclR5cGUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYjEyNWYxCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9sYW1iZGEybWV0aG9kUmVmZXJlbmNlL2FmdGVyUmVjZWl2ZXJUeXBlLmphdmEKQEAgLTAsMCArMSwxMiBAQAorLy8gIlJlcGxhY2UgbGFtYmRhIHdpdGggbWV0aG9kIHJlZmVyZW5jZSIgInRydWUiCitjbGFzcyBFeGFtcGxlIHsKKyAgaW50ZXJmYWNlIEkgeworICAgIHZvaWQgZm9vKEV4YW1wbGUgZSk7CisgIH0KKworICB2b2lkIG0oKSB7fQorCisgIHsKKyAgICBJIGkgPSBFeGFtcGxlOjptOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9sYW1iZGEybWV0aG9kUmVmZXJlbmNlL2FmdGVyU2FtZVBhcmFtcy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9sYW1iZGEybWV0aG9kUmVmZXJlbmNlL2FmdGVyU2FtZVBhcmFtcy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY5NzM5ZTEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2xhbWJkYTJtZXRob2RSZWZlcmVuY2UvYWZ0ZXJTYW1lUGFyYW1zLmphdmEKQEAgLTAsMCArMSwxMiBAQAorLy8gIlJlcGxhY2UgbGFtYmRhIHdpdGggbWV0aG9kIHJlZmVyZW5jZSIgInRydWUiCitjbGFzcyBFeGFtcGxlIHsKKyAgaW50ZXJmYWNlIEkgeworICAgICAgdm9pZCBmb28oaW50IGkpOworICAgIH0KKyAgCisgICAgdm9pZCBtKGludCBpKSB7fQorICAKKyAgICB7CisgICAgICBJIGkgPSB0aGlzOjptOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2xhbWJkYTJtZXRob2RSZWZlcmVuY2UvYmVmb3JlQW5vbnltb3VzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2xhbWJkYTJtZXRob2RSZWZlcmVuY2UvYmVmb3JlQW5vbnltb3VzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTY4YWVjOQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvbGFtYmRhMm1ldGhvZFJlZmVyZW5jZS9iZWZvcmVBbm9ueW1vdXMuamF2YQpAQCAtMCwwICsxLDEzIEBACisvLyAiUmVwbGFjZSBsYW1iZGEgd2l0aCBtZXRob2QgcmVmZXJlbmNlIiAiZmFsc2UiCitjbGFzcyBOb25TdGF0aWNJbm5lcjMgeworICAgIGNsYXNzIEZvbyB7CisgICAgfQorCisgICAgaW50ZXJmYWNlIEkxPFg+IHsKKyAgICAgICAgWCBtKCk7CisgICAgfQorCisgICAgeworICAgICAgICBJMTxGb28+IGIyID0gKCkgLT4gPGNhcmV0Pm5ldyBGb28oKXt9OworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2xhbWJkYTJtZXRob2RSZWZlcmVuY2UvYmVmb3JlQ29uc3RydWN0b3JSZWNlaXZlck5vblN0YXRpY0lubmVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2xhbWJkYTJtZXRob2RSZWZlcmVuY2UvYmVmb3JlQ29uc3RydWN0b3JSZWNlaXZlck5vblN0YXRpY0lubmVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzBjMjMwMAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvbGFtYmRhMm1ldGhvZFJlZmVyZW5jZS9iZWZvcmVDb25zdHJ1Y3RvclJlY2VpdmVyTm9uU3RhdGljSW5uZXIuamF2YQpAQCAtMCwwICsxLDEzIEBACisvLyAiUmVwbGFjZSBsYW1iZGEgd2l0aCBtZXRob2QgcmVmZXJlbmNlIiAidHJ1ZSIKK2NsYXNzIE5vblN0YXRpY0lubmVyIHsKKyAgY2xhc3MgSW5uZXIgeworICAgIElubmVyKCkge30KKyAgfQorCisgIGludGVyZmFjZSBJMSB7CisgICAgSW5uZXIgbShOb25TdGF0aWNJbm5lciByZWMpOworICB9CisgIHN0YXRpYyB7CisgICAgSTEgaTEgPSAocmVjKSAtPiByPGNhcmV0PmVjLm5ldyBJbm5lcigpOworICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2xhbWJkYTJtZXRob2RSZWZlcmVuY2UvYmVmb3JlQ29uc3RydWN0b3JSZWNlaXZlclN0YXRpY0lubmVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2xhbWJkYTJtZXRob2RSZWZlcmVuY2UvYmVmb3JlQ29uc3RydWN0b3JSZWNlaXZlclN0YXRpY0lubmVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTZkMDU1YwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvbGFtYmRhMm1ldGhvZFJlZmVyZW5jZS9iZWZvcmVDb25zdHJ1Y3RvclJlY2VpdmVyU3RhdGljSW5uZXIuamF2YQpAQCAtMCwwICsxLDE3IEBACisvLyAiUmVwbGFjZSBsYW1iZGEgd2l0aCBtZXRob2QgcmVmZXJlbmNlIiAidHJ1ZSIKK2NsYXNzIFN0YXRpY0lubmVyIHsKKworICBzdGF0aWMgY2xhc3MgSW5uZXIgeworICAgIElubmVyKFN0YXRpY0lubmVyIG91dGVyKSB7fQorICB9CisKKworICBpbnRlcmZhY2UgSTEgeworICAgIElubmVyIG0oU3RhdGljSW5uZXIgcmVjKTsKKyAgfQorCisKKyAgc3RhdGljIHsKKyAgICBJMSBpMSA9IChyZWMpIC0+IDxjYXJldD5uZXcgSW5uZXIocmVjKTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvbGFtYmRhMm1ldGhvZFJlZmVyZW5jZS9iZWZvcmVDb25zdHJ1Y3RvclJlZi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9sYW1iZGEybWV0aG9kUmVmZXJlbmNlL2JlZm9yZUNvbnN0cnVjdG9yUmVmLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmJmNGE0NAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvbGFtYmRhMm1ldGhvZFJlZmVyZW5jZS9iZWZvcmVDb25zdHJ1Y3RvclJlZi5qYXZhCkBAIC0wLDAgKzEsMTMgQEAKKy8vICJSZXBsYWNlIGxhbWJkYSB3aXRoIG1ldGhvZCByZWZlcmVuY2UiICJ0cnVlIgorY2xhc3MgTXlUZXN0MjxYPiB7CisgICAgTXlUZXN0MihYIHgpIHsKKyAgICB9CisKKyAgICBpbnRlcmZhY2UgSTxaPiB7CisgICAgICAgIE15VGVzdDI8Wj4gbShaIHopOworICAgIH0KKworICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKyAgICAgICAgSTxTdHJpbmc+IHMgPSAoeikgLT4gbmV3IE15VGU8Y2FyZXQ+c3QyPFN0cmluZz4oeik7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9sYW1iZGEybWV0aG9kUmVmZXJlbmNlL2JlZm9yZUNvbnN0cnVjdG9yUmVmMS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9sYW1iZGEybWV0aG9kUmVmZXJlbmNlL2JlZm9yZUNvbnN0cnVjdG9yUmVmMS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc4OGI3NjIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2xhbWJkYTJtZXRob2RSZWZlcmVuY2UvYmVmb3JlQ29uc3RydWN0b3JSZWYxLmphdmEKQEAgLTAsMCArMSwzMyBAQAorLy8gIlJlcGxhY2UgbGFtYmRhIHdpdGggbWV0aG9kIHJlZmVyZW5jZSIgInRydWUiCitjbGFzcyBOb25TdGF0aWNJbm5lcjMgeworICAgIGNsYXNzIEZvbyB7CisgICAgICAgIEZvbyhJbnRlZ2VyIGkpIHt9CisgICAgICAgIEZvbygpIHt9CisgICAgfQorCisgICAgaW50ZXJmYWNlIEkxPFg+IHsKKyAgICAgICAgWCBtKGludCBpKTsKKyAgICB9CisKKyAgICBpbnRlcmZhY2UgSTI8WD4geworICAgICAgICBYIG0oKTsKKyAgICB9CisKKyAgICBpbnRlcmZhY2UgSTM8WD4geworICAgICAgICBYIG0oTm9uU3RhdGljSW5uZXIzIHJlYywgaW50IGkpOworICAgIH0KKworICAgIGludGVyZmFjZSBJNDxYPiB7CisgICAgICAgIFggbShOb25TdGF0aWNJbm5lcjMgcmVjKTsKKyAgICB9CisKKyAgICB7CisgICAgICAgIEkxPEZvbz4gYjEgPSAoaSkgLT4gPGNhcmV0Pm5ldyBGb28oaSk7CisgICAgICAgIEkyPEZvbz4gYjIgPSAoKSAtPiBuZXcgRm9vKCk7CisgICAgfQorCisgICAgeworICAgICAgICBJMzxGb28+IGIxID0gKHJlYywgaSkgLT4gcmVjLm5ldyBGb28oaSk7CisgICAgICAgIEk0PEZvbz4gYjIgPSAocmVjKSAtPiByZWMubmV3IEZvbygpOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2xhbWJkYTJtZXRob2RSZWZlcmVuY2UvYmVmb3JlQ29uc3RydWN0b3JSZWYyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2xhbWJkYTJtZXRob2RSZWZlcmVuY2UvYmVmb3JlQ29uc3RydWN0b3JSZWYyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWE3NzY4ZQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvbGFtYmRhMm1ldGhvZFJlZmVyZW5jZS9iZWZvcmVDb25zdHJ1Y3RvclJlZjIuamF2YQpAQCAtMCwwICsxLDMzIEBACisvLyAiUmVwbGFjZSBsYW1iZGEgd2l0aCBtZXRob2QgcmVmZXJlbmNlIiAidHJ1ZSIKK2NsYXNzIE5vblN0YXRpY0lubmVyMyB7CisgICAgY2xhc3MgRm9vIHsKKyAgICAgICAgRm9vKEludGVnZXIgaSkge30KKyAgICAgICAgRm9vKCkge30KKyAgICB9CisKKyAgICBpbnRlcmZhY2UgSTE8WD4geworICAgICAgICBYIG0oaW50IGkpOworICAgIH0KKworICAgIGludGVyZmFjZSBJMjxYPiB7CisgICAgICAgIFggbSgpOworICAgIH0KKworICAgIGludGVyZmFjZSBJMzxYPiB7CisgICAgICAgIFggbShOb25TdGF0aWNJbm5lcjMgcmVjLCBpbnQgaSk7CisgICAgfQorCisgICAgaW50ZXJmYWNlIEk0PFg+IHsKKyAgICAgICAgWCBtKE5vblN0YXRpY0lubmVyMyByZWMpOworICAgIH0KKworICAgIHsKKyAgICAgICAgSTE8Rm9vPiBiMSA9IChpKSAtPiBuZXcgRm9vKGkpOworICAgICAgICBJMjxGb28+IGIyID0gKCkgLT4gPGNhcmV0Pm5ldyBGb28oKTsKKyAgICB9CisKKyAgICB7CisgICAgICAgIEkzPEZvbz4gYjEgPSAocmVjLCBpKSAtPiByZWMubmV3IEZvbyhpKTsKKyAgICAgICAgSTQ8Rm9vPiBiMiA9IChyZWMpIC0+IHJlYy5uZXcgRm9vKCk7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvbGFtYmRhMm1ldGhvZFJlZmVyZW5jZS9iZWZvcmVDb25zdHJ1Y3RvclJlZjMuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvbGFtYmRhMm1ldGhvZFJlZmVyZW5jZS9iZWZvcmVDb25zdHJ1Y3RvclJlZjMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMWMxODFhCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9sYW1iZGEybWV0aG9kUmVmZXJlbmNlL2JlZm9yZUNvbnN0cnVjdG9yUmVmMy5qYXZhCkBAIC0wLDAgKzEsMzMgQEAKKy8vICJSZXBsYWNlIGxhbWJkYSB3aXRoIG1ldGhvZCByZWZlcmVuY2UiICJ0cnVlIgorY2xhc3MgTm9uU3RhdGljSW5uZXIzIHsKKyAgICBjbGFzcyBGb28geworICAgICAgICBGb28oSW50ZWdlciBpKSB7fQorICAgICAgICBGb28oKSB7fQorICAgIH0KKworICAgIGludGVyZmFjZSBJMTxYPiB7CisgICAgICAgIFggbShpbnQgaSk7CisgICAgfQorCisgICAgaW50ZXJmYWNlIEkyPFg+IHsKKyAgICAgICAgWCBtKCk7CisgICAgfQorCisgICAgaW50ZXJmYWNlIEkzPFg+IHsKKyAgICAgICAgWCBtKE5vblN0YXRpY0lubmVyMyByZWMsIGludCBpKTsKKyAgICB9CisKKyAgICBpbnRlcmZhY2UgSTQ8WD4geworICAgICAgICBYIG0oTm9uU3RhdGljSW5uZXIzIHJlYyk7CisgICAgfQorCisgICAgeworICAgICAgICBJMTxGb28+IGIxID0gKGkpIC0+IG5ldyBGb28oaSk7CisgICAgICAgIEkyPEZvbz4gYjIgPSAoKSAtPiBuZXcgRm9vKCk7CisgICAgfQorCisgICAgeworICAgICAgICBJMzxGb28+IGIxID0gKHJlYywgaSkgLT4gPGNhcmV0PnJlYy5uZXcgRm9vKGkpOworICAgICAgICBJNDxGb28+IGIyID0gKHJlYykgLT4gcmVjLm5ldyBGb28oKTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9sYW1iZGEybWV0aG9kUmVmZXJlbmNlL2JlZm9yZUNvbnN0cnVjdG9yUmVmNC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9sYW1iZGEybWV0aG9kUmVmZXJlbmNlL2JlZm9yZUNvbnN0cnVjdG9yUmVmNC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJlNjEzNDIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2xhbWJkYTJtZXRob2RSZWZlcmVuY2UvYmVmb3JlQ29uc3RydWN0b3JSZWY0LmphdmEKQEAgLTAsMCArMSwzMyBAQAorLy8gIlJlcGxhY2UgbGFtYmRhIHdpdGggbWV0aG9kIHJlZmVyZW5jZSIgInRydWUiCitjbGFzcyBOb25TdGF0aWNJbm5lcjMgeworICAgIGNsYXNzIEZvbyB7CisgICAgICAgIEZvbyhJbnRlZ2VyIGkpIHt9CisgICAgICAgIEZvbygpIHt9CisgICAgfQorCisgICAgaW50ZXJmYWNlIEkxPFg+IHsKKyAgICAgICAgWCBtKGludCBpKTsKKyAgICB9CisKKyAgICBpbnRlcmZhY2UgSTI8WD4geworICAgICAgICBYIG0oKTsKKyAgICB9CisKKyAgICBpbnRlcmZhY2UgSTM8WD4geworICAgICAgICBYIG0oTm9uU3RhdGljSW5uZXIzIHJlYywgaW50IGkpOworICAgIH0KKworICAgIGludGVyZmFjZSBJNDxYPiB7CisgICAgICAgIFggbShOb25TdGF0aWNJbm5lcjMgcmVjKTsKKyAgICB9CisKKyAgICB7CisgICAgICAgIEkxPEZvbz4gYjEgPSAoaSkgLT4gbmV3IEZvbyhpKTsKKyAgICAgICAgSTI8Rm9vPiBiMiA9ICgpIC0+IG5ldyBGb28oKTsKKyAgICB9CisKKyAgICB7CisgICAgICAgIEkzPEZvbz4gYjEgPSAocmVjLCBpKSAtPiByZWMubmV3IEZvbyhpKTsKKyAgICAgICAgSTQ8Rm9vPiBiMiA9IChyZWMpIC0+IDxjYXJldD5yZWMubmV3IEZvbygpOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2xhbWJkYTJtZXRob2RSZWZlcmVuY2UvYmVmb3JlQ29uc3RydWN0b3JSZWY1LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2xhbWJkYTJtZXRob2RSZWZlcmVuY2UvYmVmb3JlQ29uc3RydWN0b3JSZWY1LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjE0MmJhMAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvbGFtYmRhMm1ldGhvZFJlZmVyZW5jZS9iZWZvcmVDb25zdHJ1Y3RvclJlZjUuamF2YQpAQCAtMCwwICsxLDMzIEBACisvLyAiUmVwbGFjZSBsYW1iZGEgd2l0aCBtZXRob2QgcmVmZXJlbmNlIiAiZmFsc2UiCitjbGFzcyBOb25TdGF0aWNJbm5lcjMgeworICAgIGNsYXNzIEZvbyB7CisgICAgICAgIEZvbyhJbnRlZ2VyIGkpIHt9CisgICAgICAgIEZvbygpIHt9CisgICAgfQorCisgICAgaW50ZXJmYWNlIEkxPFg+IHsKKyAgICAgICAgWCBtKGludCBpKTsKKyAgICB9CisKKyAgICBpbnRlcmZhY2UgSTI8WD4geworICAgICAgICBYIG0oKTsKKyAgICB9CisKKyAgICBpbnRlcmZhY2UgSTM8WD4geworICAgICAgICBYIG0oTm9uU3RhdGljSW5uZXIzIHJlYywgaW50IGkpOworICAgIH0KKworICAgIGludGVyZmFjZSBJNDxYPiB7CisgICAgICAgIFggbShOb25TdGF0aWNJbm5lcjMgcmVjKTsKKyAgICB9CisKKyAgICB7CisgICAgICAgIEkxPEZvbz4gYjEgPSAoaSkgLT4gbmV3IEZvbyhpKTsKKyAgICAgICAgSTI8Rm9vPiBiMiA9ICgpIC0+IG5ldyBGb28oKTsKKyAgICB9CisKKyAgICB7CisgICAgICAgIEkzPEZvbz4gYjEgPSAocmVjLCBpKSAtPiByZWMubmV3IEZvbyhpKTsKKyAgICAgICAgSTQ8Rm9vPiBiMiA9IChyZWMpIC0+IDxjYXJldD5uZXcgRm9vKCk7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvbGFtYmRhMm1ldGhvZFJlZmVyZW5jZS9iZWZvcmVDb25zdHJ1Y3RvclJlZjYuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvbGFtYmRhMm1ldGhvZFJlZmVyZW5jZS9iZWZvcmVDb25zdHJ1Y3RvclJlZjYuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYjFiYzhhCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9sYW1iZGEybWV0aG9kUmVmZXJlbmNlL2JlZm9yZUNvbnN0cnVjdG9yUmVmNi5qYXZhCkBAIC0wLDAgKzEsMTMgQEAKKy8vICJSZXBsYWNlIGxhbWJkYSB3aXRoIG1ldGhvZCByZWZlcmVuY2UiICJ0cnVlIgorY2xhc3MgTm9uU3RhdGljSW5uZXIzIHsKKyAgICBjbGFzcyBGb28geworICAgIH0KKworICAgIGludGVyZmFjZSBJMTxYPiB7CisgICAgICAgIFggbSgpOworICAgIH0KKworICAgIHsKKyAgICAgICAgSTE8Rm9vPiBiMiA9ICgpIC0+IDxjYXJldD5uZXcgRm9vKCk7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvbGFtYmRhMm1ldGhvZFJlZmVyZW5jZS9iZWZvcmVOb1BhcmFtcy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9sYW1iZGEybWV0aG9kUmVmZXJlbmNlL2JlZm9yZU5vUGFyYW1zLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjA2YjlkOQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvbGFtYmRhMm1ldGhvZFJlZmVyZW5jZS9iZWZvcmVOb1BhcmFtcy5qYXZhCkBAIC0wLDAgKzEsOSBAQAorLy8gIlJlcGxhY2UgbGFtYmRhIHdpdGggbWV0aG9kIHJlZmVyZW5jZSIgInRydWUiCitjbGFzcyBFeGFtcGxlIHsKKyAgcHVibGljIHZvaWQgbSgpIHsKKyAgfQorCisgIHsKKyAgICBSdW5uYWJsZSByID0gKCkgLT4gPGNhcmV0Pm0oKTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvbGFtYmRhMm1ldGhvZFJlZmVyZW5jZS9iZWZvcmVOb1BhcmFtc1N0YXRpYy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9sYW1iZGEybWV0aG9kUmVmZXJlbmNlL2JlZm9yZU5vUGFyYW1zU3RhdGljLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTAxNDc0OQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvbGFtYmRhMm1ldGhvZFJlZmVyZW5jZS9iZWZvcmVOb1BhcmFtc1N0YXRpYy5qYXZhCkBAIC0wLDAgKzEsOSBAQAorLy8gIlJlcGxhY2UgbGFtYmRhIHdpdGggbWV0aG9kIHJlZmVyZW5jZSIgInRydWUiCitjbGFzcyBFeGFtcGxlIHsKKyAgcHVibGljIHN0YXRpYyB2b2lkIG0oKSB7CisgIH0KKworICB7CisgICAgUnVubmFibGUgciA9ICgpIC0+IDxjYXJldD5tKCk7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2xhbWJkYTJtZXRob2RSZWZlcmVuY2UvYmVmb3JlUmVjZWl2ZXJUeXBlLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2xhbWJkYTJtZXRob2RSZWZlcmVuY2UvYmVmb3JlUmVjZWl2ZXJUeXBlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzY0NjhkMgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvbGFtYmRhMm1ldGhvZFJlZmVyZW5jZS9iZWZvcmVSZWNlaXZlclR5cGUuamF2YQpAQCAtMCwwICsxLDEyIEBACisvLyAiUmVwbGFjZSBsYW1iZGEgd2l0aCBtZXRob2QgcmVmZXJlbmNlIiAidHJ1ZSIKK2NsYXNzIEV4YW1wbGUgeworICBpbnRlcmZhY2UgSSB7CisgICAgdm9pZCBmb28oRXhhbXBsZSBlKTsKKyAgfQorCisgIHZvaWQgbSgpIHt9CisKKyAgeworICAgIEkgaSA9IChlKSAtPiBlPGNhcmV0Pi5tKCk7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2xhbWJkYTJtZXRob2RSZWZlcmVuY2UvYmVmb3JlUmVjZWl2ZXJUeXBlV3JvbmdRdWFsaWZpZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvbGFtYmRhMm1ldGhvZFJlZmVyZW5jZS9iZWZvcmVSZWNlaXZlclR5cGVXcm9uZ1F1YWxpZmllci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZhYzI2YzEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2xhbWJkYTJtZXRob2RSZWZlcmVuY2UvYmVmb3JlUmVjZWl2ZXJUeXBlV3JvbmdRdWFsaWZpZXIuamF2YQpAQCAtMCwwICsxLDEyIEBACisvLyAiUmVwbGFjZSBsYW1iZGEgd2l0aCBtZXRob2QgcmVmZXJlbmNlIiAiZmFsc2UiCitjbGFzcyBFeGFtcGxlIHsKKyAgaW50ZXJmYWNlIEkgeworICAgIHZvaWQgZm9vKEV4YW1wbGUgZSk7CisgIH0KKworICB2b2lkIG0oKSB7fQorCisgIHsKKyAgICBJIGkgPSAoZSkgLT4gPGNhcmV0Pi5tKCk7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2xhbWJkYTJtZXRob2RSZWZlcmVuY2UvYmVmb3JlU2FtZVBhcmFtcy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9sYW1iZGEybWV0aG9kUmVmZXJlbmNlL2JlZm9yZVNhbWVQYXJhbXMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNzQ0Y2UwCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9sYW1iZGEybWV0aG9kUmVmZXJlbmNlL2JlZm9yZVNhbWVQYXJhbXMuamF2YQpAQCAtMCwwICsxLDEyIEBACisvLyAiUmVwbGFjZSBsYW1iZGEgd2l0aCBtZXRob2QgcmVmZXJlbmNlIiAidHJ1ZSIKK2NsYXNzIEV4YW1wbGUgeworICBpbnRlcmZhY2UgSSB7CisgICAgICB2b2lkIGZvbyhpbnQgaSk7CisgICAgfQorICAKKyAgICB2b2lkIG0oaW50IGkpIHt9CisgIAorICAgIHsKKyAgICAgIEkgaSA9IChpMSkgLT4gPGNhcmV0Pm0oaTEpOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2xhbWJkYTJtZXRob2RSZWZlcmVuY2UvYmVmb3JlU2FtZVBhcmFtc01vZGlmaWVkLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2xhbWJkYTJtZXRob2RSZWZlcmVuY2UvYmVmb3JlU2FtZVBhcmFtc01vZGlmaWVkLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTZmYzhhNAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvbGFtYmRhMm1ldGhvZFJlZmVyZW5jZS9iZWZvcmVTYW1lUGFyYW1zTW9kaWZpZWQuamF2YQpAQCAtMCwwICsxLDEyIEBACisvLyAiUmVwbGFjZSBsYW1iZGEgd2l0aCBtZXRob2QgcmVmZXJlbmNlIiAiZmFsc2UiCitjbGFzcyBFeGFtcGxlIHsKKyAgaW50ZXJmYWNlIEkgeworICAgICAgdm9pZCBmb28oaW50IGkpOworICAgIH0KKyAgCisgICAgdm9pZCBtKGludCBpKSB7fQorICAKKyAgICB7CisgICAgICBJIGkgPSAoaTEpIC0+IDxjYXJldD5tKGkxICsgMSk7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvbGFtYmRhQ29kZUJsb2NrMkV4cHIvYWZ0ZXJDb21wYXJhYmxlLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2xhbWJkYUNvZGVCbG9jazJFeHByL2FmdGVyQ29tcGFyYWJsZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVhMTQ2MjYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2xhbWJkYUNvZGVCbG9jazJFeHByL2FmdGVyQ29tcGFyYWJsZS5qYXZhCkBAIC0wLDAgKzEsNiBAQAorLy8gIlJlcGxhY2Ugd2l0aCBvbmUgbGluZSBleHByZXNzaW9uIiAidHJ1ZSIKK2NsYXNzIFRlc3QgeworICB7CisgICAgQ29tcGFyYWJsZTxTdHJpbmc+IGMgPSAobykgLT4gMDsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvbGFtYmRhQ29kZUJsb2NrMkV4cHIvYWZ0ZXJWb2lkLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2xhbWJkYUNvZGVCbG9jazJFeHByL2FmdGVyVm9pZC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmExYzRlMTUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2xhbWJkYUNvZGVCbG9jazJFeHByL2FmdGVyVm9pZC5qYXZhCkBAIC0wLDAgKzEsNiBAQAorLy8gIlJlcGxhY2Ugd2l0aCBvbmUgbGluZSBleHByZXNzaW9uIiAidHJ1ZSIKK2NsYXNzIFRlc3QgeworICB7CisgICAgUnVubmFibGUgYyA9ICgpIC0+IFN5c3RlbS5vdXQucHJpbnRsbigpOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9sYW1iZGFDb2RlQmxvY2syRXhwci9hZnRlclZvaWRJbkNvZGVibG9jay5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9sYW1iZGFDb2RlQmxvY2syRXhwci9hZnRlclZvaWRJbkNvZGVibG9jay5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmExYzRlMTUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2xhbWJkYUNvZGVCbG9jazJFeHByL2FmdGVyVm9pZEluQ29kZWJsb2NrLmphdmEKQEAgLTAsMCArMSw2IEBACisvLyAiUmVwbGFjZSB3aXRoIG9uZSBsaW5lIGV4cHJlc3Npb24iICJ0cnVlIgorY2xhc3MgVGVzdCB7CisgIHsKKyAgICBSdW5uYWJsZSBjID0gKCkgLT4gU3lzdGVtLm91dC5wcmludGxuKCk7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2xhbWJkYUNvZGVCbG9jazJFeHByL2JlZm9yZUNvbXBhcmFibGUuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvbGFtYmRhQ29kZUJsb2NrMkV4cHIvYmVmb3JlQ29tcGFyYWJsZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU1ODZjY2UKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2xhbWJkYUNvZGVCbG9jazJFeHByL2JlZm9yZUNvbXBhcmFibGUuamF2YQpAQCAtMCwwICsxLDYgQEAKKy8vICJSZXBsYWNlIHdpdGggb25lIGxpbmUgZXhwcmVzc2lvbiIgInRydWUiCitjbGFzcyBUZXN0IHsKKyAgeworICAgIENvbXBhcmFibGU8U3RyaW5nPiBjID0gKG8pIC0+IHtyPGNhcmV0PmV0dXJuIDA7fTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvbGFtYmRhQ29kZUJsb2NrMkV4cHIvYmVmb3JlUmV0dXJuVHlwZUluRXhwcmVzc2lvblN0YXRlbWVudC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9sYW1iZGFDb2RlQmxvY2syRXhwci9iZWZvcmVSZXR1cm5UeXBlSW5FeHByZXNzaW9uU3RhdGVtZW50LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2Q4NmJhMgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvbGFtYmRhQ29kZUJsb2NrMkV4cHIvYmVmb3JlUmV0dXJuVHlwZUluRXhwcmVzc2lvblN0YXRlbWVudC5qYXZhCkBAIC0wLDAgKzEsOCBAQAorLy8gIlJlcGxhY2Ugd2l0aCBvbmUgbGluZSBleHByZXNzaW9uIiAiZmFsc2UiCitjbGFzcyBUZXN0IHsKKyAgeworICAgIFJ1bm5hYmxlIGMgPSAoKSAtPiA8Y2FyZXQ+e2ZvbygpO307CisgIH0KKyAgCisgIGludCBmb28oKSB7cmV0dXJuIDE7fQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvbGFtYmRhQ29kZUJsb2NrMkV4cHIvYmVmb3JlVm9pZC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9sYW1iZGFDb2RlQmxvY2syRXhwci9iZWZvcmVWb2lkLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGFkYjRkYwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvbGFtYmRhQ29kZUJsb2NrMkV4cHIvYmVmb3JlVm9pZC5qYXZhCkBAIC0wLDAgKzEsNiBAQAorLy8gIlJlcGxhY2Ugd2l0aCBvbmUgbGluZSBleHByZXNzaW9uIiAidHJ1ZSIKK2NsYXNzIFRlc3QgeworICB7CisgICAgUnVubmFibGUgYyA9ICgpIC0+IDxjYXJldD57U3lzdGVtLm91dC5wcmludGxuKCk7fTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvbGFtYmRhQ29kZUJsb2NrMkV4cHIvYmVmb3JlVm9pZEluQ29kZWJsb2NrLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2xhbWJkYUNvZGVCbG9jazJFeHByL2JlZm9yZVZvaWRJbkNvZGVibG9jay5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQwZGExNzIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2xhbWJkYUNvZGVCbG9jazJFeHByL2JlZm9yZVZvaWRJbkNvZGVibG9jay5qYXZhCkBAIC0wLDAgKzEsNiBAQAorLy8gIlJlcGxhY2Ugd2l0aCBvbmUgbGluZSBleHByZXNzaW9uIiAidHJ1ZSIKK2NsYXNzIFRlc3QgeworICB7CisgICAgUnVubmFibGUgYyA9ICgpIC0+IDxjYXJldD57e1N5c3RlbS5vdXQucHJpbnRsbigpO319OworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9tYWtlVHlwZUdlbmVyaWMvYWZ0ZXIxLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L21ha2VUeXBlR2VuZXJpYy9hZnRlcjEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mM2VkZTdhCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9tYWtlVHlwZUdlbmVyaWMvYWZ0ZXIxLmphdmEKQEAgLTAsMCArMSwxMCBAQAorLy8gIkNoYW5nZSB0eXBlIG9mIFRUIHRvIGphdmEudXRpbC5Db21wYXJhdG9yPGphdmEubGFuZy5TdHJpbmc+IiAidHJ1ZSIKK2ltcG9ydCBqYXZhLnV0aWwuKjsKK2NsYXNzIENDQ0MgeworICBwcml2YXRlIGZpbmFsIHN0YXRpYyBDb21wYXJhdG9yPFN0cmluZz4gPGNhcmV0PlRUID0gbmV3IENvbXBhcmF0b3I8U3RyaW5nPigpIHsKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgaW50IGNvbXBhcmUoU3RyaW5nIG8xLCBTdHJpbmcgbzIpIHsKKyAgICAgIHJldHVybiAwOyAgLy9UbyBjaGFuZ2UgYm9keSBvZiBpbXBsZW1lbnRlZCBtZXRob2RzIHVzZSBGaWxlIHwgU2V0dGluZ3MgfCBGaWxlIFRlbXBsYXRlcy4KKyAgICB9CisgIH07CisgIH0KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvbWFrZVR5cGVHZW5lcmljL2JlZm9yZTEuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvbWFrZVR5cGVHZW5lcmljL2JlZm9yZTEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYzY1MWZmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9tYWtlVHlwZUdlbmVyaWMvYmVmb3JlMS5qYXZhCkBAIC0wLDAgKzEsMTAgQEAKKy8vICJDaGFuZ2UgdHlwZSBvZiBUVCB0byBqYXZhLnV0aWwuQ29tcGFyYXRvcjxqYXZhLmxhbmcuU3RyaW5nPiIgInRydWUiCitpbXBvcnQgamF2YS51dGlsLio7CitjbGFzcyBDQ0NDIHsKKyAgcHJpdmF0ZSBmaW5hbCBzdGF0aWMgQ29tcGFyYXRvciA8Y2FyZXQ+VFQgPSBuZXcgQ29tcGFyYXRvcjxTdHJpbmc+KCkgeworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyBpbnQgY29tcGFyZShTdHJpbmcgbzEsIFN0cmluZyBvMikgeworICAgICAgcmV0dXJuIDA7ICAvL1RvIGNoYW5nZSBib2R5IG9mIGltcGxlbWVudGVkIG1ldGhvZHMgdXNlIEZpbGUgfCBTZXR0aW5ncyB8IEZpbGUgVGVtcGxhdGVzLgorICAgIH0KKyAgfTsKKyAgfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9tYWtlVHlwZUdlbmVyaWMvYmVmb3JlSW1wbGVtZW50ZWRSYXcuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvbWFrZVR5cGVHZW5lcmljL2JlZm9yZUltcGxlbWVudGVkUmF3LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWVkMzkzNwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvbWFrZVR5cGVHZW5lcmljL2JlZm9yZUltcGxlbWVudGVkUmF3LmphdmEKQEAgLTAsMCArMSw5IEBACisvLyAiQ2hhbmdlIHR5cGUgb2YgVFRUIHRvIGphdmEudXRpbC5Db21wYXJhdG9yIiAiZmFsc2UiCitpbXBvcnQgamF2YS51dGlsLio7CitjbGFzcyBDQ0NDIGltcGxlbWVudHMgQ29tcGFyYXRvciB7CisgICAgcHJpdmF0ZSBmaW5hbCBzdGF0aWMgQ29tcGFyYXRvciA8Y2FyZXQ+VFRUID0gbmV3IENDQ0MoKTsKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgaW50IGNvbXBhcmUoT2JqZWN0IG8xLCBPYmplY3QgbzIpIHsKKyAgICAgIHJldHVybiAwOworICAgIH0KKyAgfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9tZXRob2RSZXR1cm4vYWZ0ZXIxLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L21ldGhvZFJldHVybi9hZnRlcjEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NGNkODY4Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9tZXRob2RSZXR1cm4vYWZ0ZXIxLmphdmEKQEAgLTAsMCArMSw2IEBACisvLyAiTWFrZSAnZicgcmV0dXJuICdpbnQnIiAidHJ1ZSIKK2NsYXNzIGEgeworICAgIGludCBmKCkgeworICAgICAgICByZXR1cm4gPGNhcmV0PjE7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvbWV0aG9kUmV0dXJuL2FmdGVyMTAuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvbWV0aG9kUmV0dXJuL2FmdGVyMTAuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOGE5NWU3Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9tZXRob2RSZXR1cm4vYWZ0ZXIxMC5qYXZhCkBAIC0wLDAgKzEsMTAgQEAKKy8vICJNYWtlICdjYWxsJyByZXR1cm4gJ0NhbGxhYmxlPGphdmEubGFuZy5JbnRlZ2VyPiciICJ0cnVlIgorcHVibGljIGNsYXNzIGEgZXh0ZW5kcyBDYWxsYWJsZTxJbnRlZ2VyPiB7CisgIHB1YmxpYyBDYWxsYWJsZTxJbnRlZ2VyPiBjYWxsKCkgeworICAgIHJldHVybiBuZXcgQ2FsbGFibGU8SW50ZWdlcj4oKTsKKyAgfQorfQorCitjbGFzcyBDYWxsYWJsZTxUPiB7CisgIENhbGxhYmxlPFQ+IGNhbGwoKXtyZXR1cm4gbnVsbDt9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9tZXRob2RSZXR1cm4vYWZ0ZXIxMS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9tZXRob2RSZXR1cm4vYWZ0ZXIxMS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZmN2QwNDQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L21ldGhvZFJldHVybi9hZnRlcjExLmphdmEKQEAgLTAsMCArMSwxMiBAQAorLy8gIk1ha2UgJ2NhbGwnIHJldHVybiAnQ2FsbGFibGU8amF2YS5sYW5nLkludGVnZXI+JyIgInRydWUiCitwdWJsaWMgY2xhc3MgYSBleHRlbmRzIENhbGxhYmxlRXg8SW50ZWdlcj4geworICBwdWJsaWMgQ2FsbGFibGU8SW50ZWdlcj4gY2FsbCgpIHsKKyAgICByZXR1cm4gbmV3IENhbGxhYmxlPEludGVnZXI+KCk7CisgIH0KK30KKworY2xhc3MgQ2FsbGFibGU8VD4geworICBDYWxsYWJsZTxUPiBjYWxsKCl7cmV0dXJuIG51bGw7fQorfQorCitjbGFzcyBDYWxsYWJsZUV4PFRFPiBleHRlbmRzIENhbGxhYmxlPFRFPnt9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9tZXRob2RSZXR1cm4vYWZ0ZXIyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L21ldGhvZFJldHVybi9hZnRlcjIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOTlkZWRhCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9tZXRob2RSZXR1cm4vYWZ0ZXIyLmphdmEKQEAgLTAsMCArMSw2IEBACisvLyAiTWFrZSAnZicgcmV0dXJuICdsb25nJyIgInRydWUiCitjbGFzcyBhIHsKKyAgICBsb25nIGYoKSB7CisgICAgICAgIHJldHVybiA8Y2FyZXQ+MUw7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvbWV0aG9kUmV0dXJuL2FmdGVyMy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9tZXRob2RSZXR1cm4vYWZ0ZXIzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGMyOWY0YwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvbWV0aG9kUmV0dXJuL2FmdGVyMy5qYXZhCkBAIC0wLDAgKzEsNiBAQAorLy8gIk1ha2UgJ2YnIHJldHVybiAnamF2YS5sYW5nLlN0cmluZyciICJ0cnVlIgorY2xhc3MgYSB7CisgICAgU3RyaW5nIGYoKSB7CisgICAgICAgIHJldHVybiA8Y2FyZXQ+IiI7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvbWV0aG9kUmV0dXJuL2FmdGVyNC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9tZXRob2RSZXR1cm4vYWZ0ZXI0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTRiOTNiOAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvbWV0aG9kUmV0dXJuL2FmdGVyNC5qYXZhCkBAIC0wLDAgKzEsNiBAQAorLy8gIk1ha2UgJ2YnIHJldHVybiAndm9pZCciICJ0cnVlIgorY2xhc3MgYSB7CisgICAgdm9pZCBmKCkgeworICAgICAgICByZXR1cm4gPGNhcmV0PjsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9tZXRob2RSZXR1cm4vYWZ0ZXI2LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L21ldGhvZFJldHVybi9hZnRlcjYuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ODFjYzgxCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9tZXRob2RSZXR1cm4vYWZ0ZXI2LmphdmEKQEAgLTAsMCArMSwxNCBAQAorLy8gIk1ha2UgJ2NhbGwnIHJldHVybiAnamF2YS5sYW5nLkludGVnZXInIiAidHJ1ZSIKK3B1YmxpYyBjbGFzcyBhIHsKKyBTdHJpbmcgZigpIHsKKyAgIHJldHVybiBuZXcgQ2FsbGFibGU8SW50ZWdlcj4oKSB7CisgICAgIHB1YmxpYyBJbnRlZ2VyIGNhbGwoKSB7CisgICAgICAgcmV0dXJuIG5ldyBJbnRlZ2VyKDApOworICAgICB9CisgICB9LmNhbGwoKTsKKyB9Cit9CisKK2ludGVyZmFjZSBDYWxsYWJsZTxUPiB7CisgIFQgY2FsbCgpOworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvbWV0aG9kUmV0dXJuL2FmdGVyNy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9tZXRob2RSZXR1cm4vYWZ0ZXI3LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGIwMWI5ZQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvbWV0aG9kUmV0dXJuL2FmdGVyNy5qYXZhCkBAIC0wLDAgKzEsMTAgQEAKKy8vICJNYWtlICdjYWxsJyByZXR1cm4gJ2phdmEubGFuZy5JbnRlZ2VyJyIgInRydWUiCitwdWJsaWMgY2xhc3MgYSBpbXBsZW1lbnRzIENhbGxhYmxlPEludGVnZXI+IHsKKyAgcHVibGljIEludGVnZXIgY2FsbCgpIHsKKyAgICByZXR1cm4gbmV3IEludGVnZXIoMCk7CisgIH0KK30KKworaW50ZXJmYWNlIENhbGxhYmxlPFQ+IHsKKyAgVCBjYWxsKCk7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9tZXRob2RSZXR1cm4vYWZ0ZXI4LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L21ldGhvZFJldHVybi9hZnRlcjguamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOThiYWNhCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9tZXRob2RSZXR1cm4vYWZ0ZXI4LmphdmEKQEAgLTAsMCArMSwxMCBAQAorLy8gIk1ha2UgJ2NhbGwnIHJldHVybiAnaW50JyIgInRydWUiCitwdWJsaWMgY2xhc3MgYSBpbXBsZW1lbnRzIENhbGxhYmxlPEludGVnZXI+IHsKKyAgcHVibGljIEludGVnZXIgY2FsbCgpIHsKKyAgICByZXR1cm4gNDI7CisgIH0KK30KKworaW50ZXJmYWNlIENhbGxhYmxlPFQ+IHsKKyAgVCBjYWxsKCk7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9tZXRob2RSZXR1cm4vYWZ0ZXI5LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L21ldGhvZFJldHVybi9hZnRlcjkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YzcyN2NkCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9tZXRob2RSZXR1cm4vYWZ0ZXI5LmphdmEKQEAgLTAsMCArMSw2IEBACisvLyAiTWFrZSAnZ2V0VFQnIHJldHVybiAnaW50JyIgInRydWUiCitwdWJsaWMgY2xhc3MgYSAgeworICA8VFQ+IGludCBnZXRUVCgpIHsKKyAgICByZXR1cm4gNDI7CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvbWV0aG9kUmV0dXJuL2FmdGVyQnJva2VuQ29udHJvbEZsb3cuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvbWV0aG9kUmV0dXJuL2FmdGVyQnJva2VuQ29udHJvbEZsb3cuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZjdkYWFkCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9tZXRob2RSZXR1cm4vYWZ0ZXJCcm9rZW5Db250cm9sRmxvdy5qYXZhCkBAIC0wLDAgKzEsMTYgQEAKKy8vICJNYWtlICdnZXREcmF3ZXJBcHBzTGlzdCcgcmV0dXJuICdqYXZhLnV0aWwuQXJyYXlMaXN0PFJlc29sdmVJbmZvPiciICJ0cnVlIgoraW1wb3J0IGphdmEudXRpbC4qOworY2xhc3MgVGVzdCB7CisgIAorICAgIHB1YmxpYyBzdGF0aWMgQXJyYXlMaXN0PFJlc29sdmVJbmZvPiBnZXREcmF3ZXJBcHBzTGlzdChBcnJheUxpc3Q8UmVzb2x2ZUluZm8+IGFwcHNMaXN0KSB7CisgICAgICAgIGZvciAoUmVzb2x2ZUluZm8gYXBwSW5mbyA6IGFwcHNMaXN0KSB7CisgICAgICAgICAgICBpZiAoKSB7CisKKyAgICAgICAgICAgICAgICBhcHBzTGlzdC5yZW1vdmUoYXBwSW5mbyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gIGFwcHNMaXN0OworCisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvbWV0aG9kUmV0dXJuL2FmdGVyQ2hhbmdlQ2xhc3NUeXBlUGFyYW1zLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L21ldGhvZFJldHVybi9hZnRlckNoYW5nZUNsYXNzVHlwZVBhcmFtcy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdkYWVjMmMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L21ldGhvZFJldHVybi9hZnRlckNoYW5nZUNsYXNzVHlwZVBhcmFtcy5qYXZhCkBAIC0wLDAgKzEsMTAgQEAKKy8vICJNYWtlICdkb2luJyByZXR1cm4gJ2ludCciICJ0cnVlIgorYWJzdHJhY3QgY2xhc3MgQXN5bmNUYXNrPEEsIEIsIEM+IHsKKyAgICBhYnN0cmFjdCBDIGRvaW4oQS4uLiBhKTsKK30KK2NsYXNzIEFBc3luYyBleHRlbmRzIEFzeW5jVGFzazxTdHJpbmcsSW50ZWdlcixJbnRlZ2VyPiB7CisgICAgQE92ZXJyaWRlCisgICAgSW50ZWdlciBkb2luKFN0cmluZy4uLiBhKSB7CisgICAgICAgIHJldHVybiAxOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L21ldGhvZFJldHVybi9iZWZvcmUxLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L21ldGhvZFJldHVybi9iZWZvcmUxLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzU0YmIxMQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvbWV0aG9kUmV0dXJuL2JlZm9yZTEuamF2YQpAQCAtMCwwICsxLDYgQEAKKy8vICJNYWtlICdmJyByZXR1cm4gJ2ludCciICJ0cnVlIgorY2xhc3MgYSB7CisgICAgdm9pZCBmKCkgeworICAgICAgICByZXR1cm4gPGNhcmV0PjE7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvbWV0aG9kUmV0dXJuL2JlZm9yZTEwLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L21ldGhvZFJldHVybi9iZWZvcmUxMC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMyOTdlYmEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L21ldGhvZFJldHVybi9iZWZvcmUxMC5qYXZhCkBAIC0wLDAgKzEsMTAgQEAKKy8vICJNYWtlICdjYWxsJyByZXR1cm4gJ0NhbGxhYmxlPGphdmEubGFuZy5JbnRlZ2VyPiciICJ0cnVlIgorcHVibGljIGNsYXNzIGEgZXh0ZW5kcyBDYWxsYWJsZTxTdHJpbmc+IHsKKyAgcHVibGljIENhbGxhYmxlPFN0cmluZz4gY2FsbCgpIHsKKyAgICByZXR1cm4gbmV3IENhbGxhYmxlPEludGU8Y2FyZXQ+Z2VyPigpOworICB9Cit9CisKK2NsYXNzIENhbGxhYmxlPFQ+IHsKKyAgQ2FsbGFibGU8VD4gY2FsbCgpe3JldHVybiBudWxsO30KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L21ldGhvZFJldHVybi9iZWZvcmUxMS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9tZXRob2RSZXR1cm4vYmVmb3JlMTEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NDljNmRiCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9tZXRob2RSZXR1cm4vYmVmb3JlMTEuamF2YQpAQCAtMCwwICsxLDEyIEBACisvLyAiTWFrZSAnY2FsbCcgcmV0dXJuICdDYWxsYWJsZTxqYXZhLmxhbmcuSW50ZWdlcj4nIiAidHJ1ZSIKK3B1YmxpYyBjbGFzcyBhIGV4dGVuZHMgQ2FsbGFibGVFeDxTdHJpbmc+IHsKKyAgcHVibGljIENhbGxhYmxlPFN0cmluZz4gY2FsbCgpIHsKKyAgICByZXR1cm4gbmV3IENhbGxhYmxlPEludGU8Y2FyZXQ+Z2VyPigpOworICB9Cit9CisKK2NsYXNzIENhbGxhYmxlPFQ+IHsKKyAgQ2FsbGFibGU8VD4gY2FsbCgpe3JldHVybiBudWxsO30KK30KKworY2xhc3MgQ2FsbGFibGVFeDxURT4gZXh0ZW5kcyBDYWxsYWJsZTxURT57fQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvbWV0aG9kUmV0dXJuL2JlZm9yZTIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvbWV0aG9kUmV0dXJuL2JlZm9yZTIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZTc1MzZiCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9tZXRob2RSZXR1cm4vYmVmb3JlMi5qYXZhCkBAIC0wLDAgKzEsNiBAQAorLy8gIk1ha2UgJ2YnIHJldHVybiAnbG9uZyciICJ0cnVlIgorY2xhc3MgYSB7CisgICAgaW50IGYoKSB7CisgICAgICAgIHJldHVybiA8Y2FyZXQ+MUw7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvbWV0aG9kUmV0dXJuL2JlZm9yZTMuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvbWV0aG9kUmV0dXJuL2JlZm9yZTMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NDNmYzNiCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9tZXRob2RSZXR1cm4vYmVmb3JlMy5qYXZhCkBAIC0wLDAgKzEsNiBAQAorLy8gIk1ha2UgJ2YnIHJldHVybiAnamF2YS5sYW5nLlN0cmluZyciICJ0cnVlIgorY2xhc3MgYSB7CisgICAgaW50IGYoKSB7CisgICAgICAgIHJldHVybiA8Y2FyZXQ+IiI7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvbWV0aG9kUmV0dXJuL2JlZm9yZTQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvbWV0aG9kUmV0dXJuL2JlZm9yZTQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjU0OGY3Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9tZXRob2RSZXR1cm4vYmVmb3JlNC5qYXZhCkBAIC0wLDAgKzEsNiBAQAorLy8gIk1ha2UgJ2YnIHJldHVybiAndm9pZCciICJ0cnVlIgorY2xhc3MgYSB7CisgICAgaW50IGYoKSB7CisgICAgICAgIHJldHVybiA8Y2FyZXQ+OworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L21ldGhvZFJldHVybi9iZWZvcmU1LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L21ldGhvZFJldHVybi9iZWZvcmU1LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTJhYzIwYgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvbWV0aG9kUmV0dXJuL2JlZm9yZTUuamF2YQpAQCAtMCwwICsxLDYgQEAKKy8vICJNYWtlICdmJyByZXR1cm4gJ251bGwnIiAiZmFsc2UiCitjbGFzcyBhIHsKKyBpbnQgZigpIHsKKyAgIHJldHVybiA8Y2FyZXQ+bnVsbDsKKyB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9tZXRob2RSZXR1cm4vYmVmb3JlNi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9tZXRob2RSZXR1cm4vYmVmb3JlNi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI3NmVjZmEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L21ldGhvZFJldHVybi9iZWZvcmU2LmphdmEKQEAgLTAsMCArMSwxNCBAQAorLy8gIk1ha2UgJ2NhbGwnIHJldHVybiAnamF2YS5sYW5nLkludGVnZXInIiAidHJ1ZSIKK3B1YmxpYyBjbGFzcyBhIHsKKyBTdHJpbmcgZigpIHsKKyAgIHJldHVybiBuZXcgQ2FsbGFibGU8U3RyaW5nPigpIHsKKyAgICAgcHVibGljIFN0cmluZyBjYWxsKCkgeworICAgICAgIHJldHVybiBuZXcgSW50PGNhcmV0PmVnZXIoMCk7CisgICAgIH0KKyAgIH0uY2FsbCgpOworIH0KK30KKworaW50ZXJmYWNlIENhbGxhYmxlPFQ+IHsKKyAgVCBjYWxsKCk7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9tZXRob2RSZXR1cm4vYmVmb3JlNy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9tZXRob2RSZXR1cm4vYmVmb3JlNy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM1NmMxZTQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L21ldGhvZFJldHVybi9iZWZvcmU3LmphdmEKQEAgLTAsMCArMSwxMCBAQAorLy8gIk1ha2UgJ2NhbGwnIHJldHVybiAnamF2YS5sYW5nLkludGVnZXInIiAidHJ1ZSIKK3B1YmxpYyBjbGFzcyBhIGltcGxlbWVudHMgQ2FsbGFibGU8U3RyaW5nPiB7CisgIHB1YmxpYyBTdHJpbmcgY2FsbCgpIHsKKyAgICByZXR1cm4gbmV3IEludDxjYXJldD5lZ2VyKDApOworICB9Cit9CisKK2ludGVyZmFjZSBDYWxsYWJsZTxUPiB7CisgIFQgY2FsbCgpOworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvbWV0aG9kUmV0dXJuL2JlZm9yZTguamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvbWV0aG9kUmV0dXJuL2JlZm9yZTguamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYzk3ZGUzCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9tZXRob2RSZXR1cm4vYmVmb3JlOC5qYXZhCkBAIC0wLDAgKzEsMTAgQEAKKy8vICJNYWtlICdjYWxsJyByZXR1cm4gJ2ludCciICJ0cnVlIgorcHVibGljIGNsYXNzIGEgaW1wbGVtZW50cyBDYWxsYWJsZTxTdHJpbmc+IHsKKyAgcHVibGljIFN0cmluZyBjYWxsKCkgeworICAgIHJldHVybiA0PGNhcmV0PjI7CisgIH0KK30KKworaW50ZXJmYWNlIENhbGxhYmxlPFQ+IHsKKyAgVCBjYWxsKCk7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9tZXRob2RSZXR1cm4vYmVmb3JlOS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9tZXRob2RSZXR1cm4vYmVmb3JlOS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI4NDE5ZDQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L21ldGhvZFJldHVybi9iZWZvcmU5LmphdmEKQEAgLTAsMCArMSw2IEBACisvLyAiTWFrZSAnZ2V0VFQnIHJldHVybiAnaW50JyIgInRydWUiCitwdWJsaWMgY2xhc3MgYSAgeworICA8VFQ+IFRUIGdldFRUKCkgeworICAgIHJldHVybiA0PGNhcmV0PjI7CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvbWV0aG9kUmV0dXJuL2JlZm9yZUJyb2tlbkNvbnRyb2xGbG93LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L21ldGhvZFJldHVybi9iZWZvcmVCcm9rZW5Db250cm9sRmxvdy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQzZWNjNmUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L21ldGhvZFJldHVybi9iZWZvcmVCcm9rZW5Db250cm9sRmxvdy5qYXZhCkBAIC0wLDAgKzEsMTYgQEAKKy8vICJNYWtlICdnZXREcmF3ZXJBcHBzTGlzdCcgcmV0dXJuICdqYXZhLnV0aWwuQXJyYXlMaXN0PFJlc29sdmVJbmZvPiciICJ0cnVlIgoraW1wb3J0IGphdmEudXRpbC4qOworY2xhc3MgVGVzdCB7CisgIAorICAgIHB1YmxpYyBzdGF0aWMgTGlzdDxBcHBJbmZvPiBnZXREcmF3ZXJBcHBzTGlzdChBcnJheUxpc3Q8UmVzb2x2ZUluZm8+IGFwcHNMaXN0KSB7CisgICAgICAgIGZvciAoUmVzb2x2ZUluZm8gYXBwSW5mbyA6IGFwcHNMaXN0KSB7CisgICAgICAgICAgICBpZiAoKSB7CisKKyAgICAgICAgICAgICAgICBhcHBzTGlzdC5yZW1vdmUoYXBwSW5mbyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gIDxjYXJldD5hcHBzTGlzdDsKKworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L21ldGhvZFJldHVybi9iZWZvcmVDaGFuZ2VDbGFzc1R5cGVQYXJhbXMuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvbWV0aG9kUmV0dXJuL2JlZm9yZUNoYW5nZUNsYXNzVHlwZVBhcmFtcy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMxN2E1MTMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L21ldGhvZFJldHVybi9iZWZvcmVDaGFuZ2VDbGFzc1R5cGVQYXJhbXMuamF2YQpAQCAtMCwwICsxLDEwIEBACisvLyAiTWFrZSAnZG9pbicgcmV0dXJuICdpbnQnIiAidHJ1ZSIKK2Fic3RyYWN0IGNsYXNzIEFzeW5jVGFzazxBLCBCLCBDPiB7CisgICAgYWJzdHJhY3QgQyBkb2luKEEuLi4gYSk7Cit9CitjbGFzcyBBQXN5bmMgZXh0ZW5kcyBBc3luY1Rhc2s8U3RyaW5nLCBJbnRlZ2VyLCBMb25nPiB7CisgICAgQE92ZXJyaWRlCisgICAgTG9uZyBkb2luKFN0cmluZy4uLiBhKSB7CisgICAgICAgIHJldHVybiA8Y2FyZXQ+MTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9tZXRob2RSZXR1cm5Cb29sZWFuRml4L2FmdGVyMS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9tZXRob2RSZXR1cm5Cb29sZWFuRml4L2FmdGVyMS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVhYjY3ZmYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L21ldGhvZFJldHVybkJvb2xlYW5GaXgvYWZ0ZXIxLmphdmEKQEAgLTAsMCArMSwxNiBAQAorLy8gIk1ha2UgJ3ZpY3RpbScgcmV0dXJuICdib29sZWFuJyIgInRydWUiCitjbGFzcyBUZXN0IHsKKyAgICBwdWJsaWMgdm9pZCB0cmlnZ2VyKCkgeworICAgICAgICBpZiAodmljdGltKCkpIHsKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiKioqIik7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwdWJsaWMgYm9vbGVhbiB2aWN0aW0oKSB7CisgICAgICAgIGZpbmFsIGludCBzb21ldGhpbmcgPSAxOworICAgICAgICBmaW5hbCBib29sZWFuIHZhbHVlID0gZmFsc2U7CisgICAgICAgIGludCBhbm90aGVyID0gMTA7CisgICAgICAgIGZpbmFsIGJvb2xlYW4gc2Vjb25kQm9vbGVhbiA9IGFub3RoZXIgPT0gc29tZXRoaW5nOworICAgICAgICByZXR1cm4gPGNhcmV0PjxzZWxlY3Rpb24+dmFsdWU8L3NlbGVjdGlvbj47CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvbWV0aG9kUmV0dXJuQm9vbGVhbkZpeC9hZnRlcjIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvbWV0aG9kUmV0dXJuQm9vbGVhbkZpeC9hZnRlcjIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NTY5YzdmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9tZXRob2RSZXR1cm5Cb29sZWFuRml4L2FmdGVyMi5qYXZhCkBAIC0wLDAgKzEsMTQgQEAKKy8vICJNYWtlICd2aWN0aW0nIHJldHVybiAnYm9vbGVhbiciICJ0cnVlIgorY2xhc3MgVGVzdCB7CisgICAgcHVibGljIHZvaWQgdHJpZ2dlcigpIHsKKyAgICAgICAgaWYgKHZpY3RpbSgpKSB7CisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIioqKiIpOworICAgICAgICB9CisgICAgfQorCisgICAgcHVibGljIGJvb2xlYW4gdmljdGltKCkgeworICAgICAgICBmaW5hbCBpbnQgc29tZXRoaW5nID0gMTsKKyAgICAgICAgaW50IGFub3RoZXIgPSAxMDsKKyAgICAgICAgcmV0dXJuIDxjYXJldD48c2VsZWN0aW9uPmZhbHNlPC9zZWxlY3Rpb24+OworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L21ldGhvZFJldHVybkJvb2xlYW5GaXgvYWZ0ZXIzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L21ldGhvZFJldHVybkJvb2xlYW5GaXgvYWZ0ZXIzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODc3MGQxZAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvbWV0aG9kUmV0dXJuQm9vbGVhbkZpeC9hZnRlcjMuamF2YQpAQCAtMCwwICsxLDE1IEBACisvLyAiTWFrZSAndmljdGltJyByZXR1cm4gJ2Jvb2xlYW4nIiAidHJ1ZSIKK2NsYXNzIFRlc3QgeworICAgIHB1YmxpYyB2b2lkIHRyaWdnZXIoKSB7CisgICAgICAgIGlmICh2aWN0aW0oZmFsc2UsIDAsIGZhbHNlKSkgeworICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIqKioiKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHB1YmxpYyBib29sZWFuIHZpY3RpbShmaW5hbCBib29sZWFuIHBhcmFtMSwgZmluYWwgaW50IHBhcmFtMiwgZmluYWwgYm9vbGVhbiBwYXJhbTMpIHsKKyAgICAgICAgZmluYWwgaW50IHNvbWV0aGluZyA9IDE7CisgICAgICAgIGludCBhbm90aGVyID0gMTA7CisgICAgICAgIGJvb2xlYW4gc29tZVZhbHVlID0gdHJ1ZTsKKyAgICAgICAgcmV0dXJuIDxjYXJldD48c2VsZWN0aW9uPnNvbWVWYWx1ZTwvc2VsZWN0aW9uPjsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9tZXRob2RSZXR1cm5Cb29sZWFuRml4L2FmdGVyNC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9tZXRob2RSZXR1cm5Cb29sZWFuRml4L2FmdGVyNC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ5ZjhjNWEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L21ldGhvZFJldHVybkJvb2xlYW5GaXgvYWZ0ZXI0LmphdmEKQEAgLTAsMCArMSwxNCBAQAorLy8gIk1ha2UgJ3ZpY3RpbScgcmV0dXJuICdib29sZWFuJyIgInRydWUiCitjbGFzcyBUZXN0IHsKKyAgICBwdWJsaWMgdm9pZCB0cmlnZ2VyKCkgeworICAgICAgICBpZiAodmljdGltKGZhbHNlLCAwLCBmYWxzZSkpIHsKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiKioqIik7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwdWJsaWMgYm9vbGVhbiB2aWN0aW0oZmluYWwgYm9vbGVhbiBwYXJhbTEsIGZpbmFsIGludCBwYXJhbTIsIGZpbmFsIGJvb2xlYW4gcGFyYW0zKSB7CisgICAgICAgIGZpbmFsIGludCBzb21ldGhpbmcgPSAxOworICAgICAgICBpbnQgYW5vdGhlciA9IDEwOworICAgICAgICByZXR1cm4gPGNhcmV0PjxzZWxlY3Rpb24+cGFyYW0xPC9zZWxlY3Rpb24+OworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L21ldGhvZFJldHVybkJvb2xlYW5GaXgvYWZ0ZXI1LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L21ldGhvZFJldHVybkJvb2xlYW5GaXgvYWZ0ZXI1LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTNiYzMxMwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvbWV0aG9kUmV0dXJuQm9vbGVhbkZpeC9hZnRlcjUuamF2YQpAQCAtMCwwICsxLDMxIEBACisvLyAiTWFrZSAndmljdGltJyByZXR1cm4gJ2Jvb2xlYW4nIiAidHJ1ZSIKK3B1YmxpYyBjbGFzcyBFeHRlcm5hbCB7CisgICAgdm9pZCBtMSgpIHsKKyAgICAgICAgaWYgKG5ldyBPdXQoKS52aWN0aW0obnVsbCkpIHsKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU29tZXRoaW5nIik7CisgICAgICAgIH0KKyAgICB9Cit9CisKK2NsYXNzIE91dCB7CisgICAgcHVibGljIGJvb2xlYW4gdmljdGltKGZpbmFsIENvbGxlY3Rpb24gY29sbCkgeworICAgICAgICBpZiAoU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCkgPiAyMzIxMzIxTCkgeworICAgICAgICAgICAgZmluYWwgYm9vbGVhbiB2YWx1ZTsKKworICAgICAgICAgICAgcmV0dXJuIHZhbHVlOworICAgICAgICB9CisKKyAgICAgICAgZmluYWwgYm9vbGVhbiBpblRoZU1pZGRsZSA9IGZhbHNlOworICAgICAgICBmb3IgKE9iamVjdCBvIDogY29sbCkgeworICAgICAgICAgICAgcmV0dXJuIGluVGhlTWlkZGxlOworICAgICAgICB9CisKKyAgICAgICAgZm9yIChJdGVyYXRvciBpdGVyYXRvciA9IGNvbGwuaXRlcmF0b3IoKTsgaXRlcmF0b3IuaGFzTmV4dCgpOykgeworICAgICAgICAgICAgT2JqZWN0IG8gPSAoT2JqZWN0KSBpdGVyYXRvci5uZXh0KCk7CisgICAgICAgICAgICBib29sZWFuIGluc2lkZUZvciA9IGZhbHNlOworCisgICAgICAgICAgICByZXR1cm4gaW5UaGVNaWRkbGU7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIDxjYXJldD48c2VsZWN0aW9uPmluVGhlTWlkZGxlPC9zZWxlY3Rpb24+OworICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvbWV0aG9kUmV0dXJuQm9vbGVhbkZpeC9hZnRlcjYuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvbWV0aG9kUmV0dXJuQm9vbGVhbkZpeC9hZnRlcjYuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xM2MwY2Q1Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9tZXRob2RSZXR1cm5Cb29sZWFuRml4L2FmdGVyNi5qYXZhCkBAIC0wLDAgKzEsMzEgQEAKKy8vICJNYWtlICdtMScgcmV0dXJuICdib29sZWFuJyIgInRydWUiCitpbnRlcmZhY2UgQSB7CisgICAgYm9vbGVhbiBtMSgpOworfQorCitjbGFzcyBCIHsKKyAgICBwdWJsaWMgYm9vbGVhbiBtMSgpIHsKKyAgICAgICAgYm9vbGVhbiBjYW5kaWRhdGU7CisgICAgICAgIHJldHVybiBjYW5kaWRhdGU7CisgICAgfQorfQorCitjbGFzcyBDIGV4dGVuZHMgQiBpbXBsZW1lbnRzIEEgeworICAgIHByaXZhdGUgZmluYWwgYm9vbGVhbiBteUJvb2xlYW47CisKKyAgICBwdWJsaWMgYm9vbGVhbiBtMSgpIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKworcHVibGljIGNsYXNzIEQgZXh0ZW5kcyBDIHsKKyAgICBwdWJsaWMgdm9pZCB1c2VyKCkgeworICAgICAgICB3aGlsZSAobTEoKSkgeworICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJtMSIpOworICAgICAgICB9CisgICAgfQorCisgICAgcHVibGljIGJvb2xlYW4gbTEoKSB7CisgICAgICAgIHJldHVybiA8Y2FyZXQ+PHNlbGVjdGlvbj5mYWxzZTwvc2VsZWN0aW9uPjsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9tZXRob2RSZXR1cm5Cb29sZWFuRml4L2JlZm9yZTEuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvbWV0aG9kUmV0dXJuQm9vbGVhbkZpeC9iZWZvcmUxLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWUxODE2ZAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvbWV0aG9kUmV0dXJuQm9vbGVhbkZpeC9iZWZvcmUxLmphdmEKQEAgLTAsMCArMSwxNSBAQAorLy8gIk1ha2UgJ3ZpY3RpbScgcmV0dXJuICdib29sZWFuJyIgInRydWUiCitjbGFzcyBUZXN0IHsKKyAgICBwdWJsaWMgdm9pZCB0cmlnZ2VyKCkgeworICAgICAgICBpZiAoPGNhcmV0PnZpY3RpbSgpKSB7CisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIioqKiIpOworICAgICAgICB9CisgICAgfQorCisgICAgcHVibGljIHZvaWQgdmljdGltKCkgeworICAgICAgICBmaW5hbCBpbnQgc29tZXRoaW5nID0gMTsKKyAgICAgICAgZmluYWwgYm9vbGVhbiB2YWx1ZSA9IGZhbHNlOworICAgICAgICBpbnQgYW5vdGhlciA9IDEwOworICAgICAgICBmaW5hbCBib29sZWFuIHNlY29uZEJvb2xlYW4gPSBhbm90aGVyID09IHNvbWV0aGluZzsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9tZXRob2RSZXR1cm5Cb29sZWFuRml4L2JlZm9yZTIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvbWV0aG9kUmV0dXJuQm9vbGVhbkZpeC9iZWZvcmUyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWI2MDM1ZgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvbWV0aG9kUmV0dXJuQm9vbGVhbkZpeC9iZWZvcmUyLmphdmEKQEAgLTAsMCArMSwxMyBAQAorLy8gIk1ha2UgJ3ZpY3RpbScgcmV0dXJuICdib29sZWFuJyIgInRydWUiCitjbGFzcyBUZXN0IHsKKyAgICBwdWJsaWMgdm9pZCB0cmlnZ2VyKCkgeworICAgICAgICBpZiAoPGNhcmV0PnZpY3RpbSgpKSB7CisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIioqKiIpOworICAgICAgICB9CisgICAgfQorCisgICAgcHVibGljIHZvaWQgdmljdGltKCkgeworICAgICAgICBmaW5hbCBpbnQgc29tZXRoaW5nID0gMTsKKyAgICAgICAgaW50IGFub3RoZXIgPSAxMDsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9tZXRob2RSZXR1cm5Cb29sZWFuRml4L2JlZm9yZTMuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvbWV0aG9kUmV0dXJuQm9vbGVhbkZpeC9iZWZvcmUzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDJhYTY5OQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvbWV0aG9kUmV0dXJuQm9vbGVhbkZpeC9iZWZvcmUzLmphdmEKQEAgLTAsMCArMSwxNCBAQAorLy8gIk1ha2UgJ3ZpY3RpbScgcmV0dXJuICdib29sZWFuJyIgInRydWUiCitjbGFzcyBUZXN0IHsKKyAgICBwdWJsaWMgdm9pZCB0cmlnZ2VyKCkgeworICAgICAgICBpZiAoPGNhcmV0PnZpY3RpbShmYWxzZSwgMCwgZmFsc2UpKSB7CisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIioqKiIpOworICAgICAgICB9CisgICAgfQorCisgICAgcHVibGljIHZvaWQgdmljdGltKGZpbmFsIGJvb2xlYW4gcGFyYW0xLCBmaW5hbCBpbnQgcGFyYW0yLCBmaW5hbCBib29sZWFuIHBhcmFtMykgeworICAgICAgICBmaW5hbCBpbnQgc29tZXRoaW5nID0gMTsKKyAgICAgICAgaW50IGFub3RoZXIgPSAxMDsKKyAgICAgICAgYm9vbGVhbiBzb21lVmFsdWUgPSB0cnVlOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L21ldGhvZFJldHVybkJvb2xlYW5GaXgvYmVmb3JlNC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9tZXRob2RSZXR1cm5Cb29sZWFuRml4L2JlZm9yZTQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YTE1ZTk5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9tZXRob2RSZXR1cm5Cb29sZWFuRml4L2JlZm9yZTQuamF2YQpAQCAtMCwwICsxLDEzIEBACisvLyAiTWFrZSAndmljdGltJyByZXR1cm4gJ2Jvb2xlYW4nIiAidHJ1ZSIKK2NsYXNzIFRlc3QgeworICAgIHB1YmxpYyB2b2lkIHRyaWdnZXIoKSB7CisgICAgICAgIGlmICg8Y2FyZXQ+dmljdGltKGZhbHNlLCAwLCBmYWxzZSkpIHsKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiKioqIik7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCB2aWN0aW0oZmluYWwgYm9vbGVhbiBwYXJhbTEsIGZpbmFsIGludCBwYXJhbTIsIGZpbmFsIGJvb2xlYW4gcGFyYW0zKSB7CisgICAgICAgIGZpbmFsIGludCBzb21ldGhpbmcgPSAxOworICAgICAgICBpbnQgYW5vdGhlciA9IDEwOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L21ldGhvZFJldHVybkJvb2xlYW5GaXgvYmVmb3JlNS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9tZXRob2RSZXR1cm5Cb29sZWFuRml4L2JlZm9yZTUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYzdiYzJmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9tZXRob2RSZXR1cm5Cb29sZWFuRml4L2JlZm9yZTUuamF2YQpAQCAtMCwwICsxLDMwIEBACisvLyAiTWFrZSAndmljdGltJyByZXR1cm4gJ2Jvb2xlYW4nIiAidHJ1ZSIKK3B1YmxpYyBjbGFzcyBFeHRlcm5hbCB7CisgICAgdm9pZCBtMSgpIHsKKyAgICAgICAgaWYgKG5ldyBPdXQoKS48Y2FyZXQ+dmljdGltKG51bGwpKSB7CisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlNvbWV0aGluZyIpOworICAgICAgICB9CisgICAgfQorfQorCitjbGFzcyBPdXQgeworICAgIHB1YmxpYyB2b2lkIHZpY3RpbShmaW5hbCBDb2xsZWN0aW9uIGNvbGwpIHsKKyAgICAgICAgaWYgKFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpID4gMjMyMTMyMUwpIHsKKyAgICAgICAgICAgIGZpbmFsIGJvb2xlYW4gdmFsdWU7CisKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGZpbmFsIGJvb2xlYW4gaW5UaGVNaWRkbGUgPSBmYWxzZTsKKyAgICAgICAgZm9yIChPYmplY3QgbyA6IGNvbGwpIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGZvciAoSXRlcmF0b3IgaXRlcmF0b3IgPSBjb2xsLml0ZXJhdG9yKCk7IGl0ZXJhdG9yLmhhc05leHQoKTspIHsKKyAgICAgICAgICAgIE9iamVjdCBvID0gKE9iamVjdCkgaXRlcmF0b3IubmV4dCgpOworICAgICAgICAgICAgYm9vbGVhbiBpbnNpZGVGb3IgPSBmYWxzZTsKKworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9tZXRob2RSZXR1cm5Cb29sZWFuRml4L2JlZm9yZTYuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvbWV0aG9kUmV0dXJuQm9vbGVhbkZpeC9iZWZvcmU2LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTQ2OWVkNQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvbWV0aG9kUmV0dXJuQm9vbGVhbkZpeC9iZWZvcmU2LmphdmEKQEAgLTAsMCArMSwyOCBAQAorLy8gIk1ha2UgJ20xJyByZXR1cm4gJ2Jvb2xlYW4nIiAidHJ1ZSIKK2ludGVyZmFjZSBBIHsKKyAgICB2b2lkIG0xKCk7Cit9CisKK2NsYXNzIEIgeworICAgIHB1YmxpYyB2b2lkIG0xKCkgeworICAgICAgICBib29sZWFuIGNhbmRpZGF0ZTsKKyAgICB9Cit9CisKK2NsYXNzIEMgZXh0ZW5kcyBCIGltcGxlbWVudHMgQSB7CisgICAgcHJpdmF0ZSBmaW5hbCBib29sZWFuIG15Qm9vbGVhbjsKKworICAgIHB1YmxpYyB2b2lkIG0xKCkgeworICAgIH0KK30KKworcHVibGljIGNsYXNzIEQgZXh0ZW5kcyBDIHsKKyAgICBwdWJsaWMgdm9pZCB1c2VyKCkgeworICAgICAgICB3aGlsZSAoPGNhcmV0Pm0xKCkpIHsKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigibTEiKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHB1YmxpYyB2b2lkIG0xKCkgeworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L21ldGhvZFRocm93cy9hZnRlcjEuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvbWV0aG9kVGhyb3dzL2FmdGVyMS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdiN2MxYzMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L21ldGhvZFRocm93cy9hZnRlcjEuamF2YQpAQCAtMCwwICsxLDEzIEBACisvLyAiUmVtb3ZlICdqYXZhLmlvLklPRXhjZXB0aW9uJyBmcm9tICdmJyB0aHJvd3MgbGlzdCIgInRydWUiCitpbXBvcnQgamF2YS5pby4qOworCitjbGFzcyBhIHsKKyB2b2lkIGYoKSB7CisgfQorfQorCitjbGFzcyBiIGV4dGVuZHMgYSB7Cisgdm9pZCBmKCkgPGNhcmV0PnsKKyB9Cit9CisKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvbWV0aG9kVGhyb3dzL2FmdGVyMi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9tZXRob2RUaHJvd3MvYWZ0ZXIyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2UyZDJkYwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvbWV0aG9kVGhyb3dzL2FmdGVyMi5qYXZhCkBAIC0wLDAgKzEsMTMgQEAKKy8vICJBZGQgJ2phdmEuaW8uSU9FeGNlcHRpb24nIHRvICdhLmYnIHRocm93cyBsaXN0IiAidHJ1ZSIKK2ltcG9ydCBqYXZhLmlvLio7CisKK2NsYXNzIGEgeworIHZvaWQgZigpIHRocm93cyBJT0V4Y2VwdGlvbiB7CisgfQorfQorCitjbGFzcyBiIGV4dGVuZHMgYSB7Cisgdm9pZCBmKCkgdGhyb3dzIDxjYXJldD5JT0V4Y2VwdGlvbiB7CisgfQorfQorCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L21ldGhvZFRocm93cy9hZnRlcjMuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvbWV0aG9kVGhyb3dzL2FmdGVyMy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA0ODQ1N2YKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L21ldGhvZFRocm93cy9hZnRlcjMuamF2YQpAQCAtMCwwICsxLDggQEAKKy8vICJSZW1vdmUgJ2phdmEuaW8uSU9FeGNlcHRpb24nIGZyb20gJ2YnIHRocm93cyBsaXN0IiAidHJ1ZSIKK2ltcG9ydCBqYXZhLmlvLio7CisKK2NsYXNzIGEgeworIHByaXZhdGUgdm9pZCBmKCkgPGNhcmV0PnsKKyB9Cit9CisKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvbWV0aG9kVGhyb3dzL2JlZm9yZTEuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvbWV0aG9kVGhyb3dzL2JlZm9yZTEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZTMzMGE5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9tZXRob2RUaHJvd3MvYmVmb3JlMS5qYXZhCkBAIC0wLDAgKzEsMTMgQEAKKy8vICJSZW1vdmUgJ2phdmEuaW8uSU9FeGNlcHRpb24nIGZyb20gJ2YnIHRocm93cyBsaXN0IiAidHJ1ZSIKK2ltcG9ydCBqYXZhLmlvLio7CisKK2NsYXNzIGEgeworIHZvaWQgZigpIHsKKyB9Cit9CisKK2NsYXNzIGIgZXh0ZW5kcyBhIHsKKyB2b2lkIGYoKSB0aHJvd3MgPGNhcmV0PklPRXhjZXB0aW9uIHsKKyB9Cit9CisKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvbWV0aG9kVGhyb3dzL2JlZm9yZTIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvbWV0aG9kVGhyb3dzL2JlZm9yZTIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZGZlMzg4Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9tZXRob2RUaHJvd3MvYmVmb3JlMi5qYXZhCkBAIC0wLDAgKzEsMTMgQEAKKy8vICJBZGQgJ2phdmEuaW8uSU9FeGNlcHRpb24nIHRvICdhLmYnIHRocm93cyBsaXN0IiAidHJ1ZSIKK2ltcG9ydCBqYXZhLmlvLio7CisKK2NsYXNzIGEgeworIHZvaWQgZigpIHsKKyB9Cit9CisKK2NsYXNzIGIgZXh0ZW5kcyBhIHsKKyB2b2lkIGYoKSB0aHJvd3MgPGNhcmV0PklPRXhjZXB0aW9uIHsKKyB9Cit9CisKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvbWV0aG9kVGhyb3dzL2JlZm9yZTMuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvbWV0aG9kVGhyb3dzL2JlZm9yZTMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OTlhY2VkCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9tZXRob2RUaHJvd3MvYmVmb3JlMy5qYXZhCkBAIC0wLDAgKzEsOCBAQAorLy8gIlJlbW92ZSAnamF2YS5pby5JT0V4Y2VwdGlvbicgZnJvbSAnZicgdGhyb3dzIGxpc3QiICJ0cnVlIgoraW1wb3J0IGphdmEuaW8uKjsKKworY2xhc3MgYSB7CisgcHJpdmF0ZSB2b2lkIGYoKSB0aHJvd3MgPGNhcmV0PklPRXhjZXB0aW9uIHsKKyB9Cit9CisKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvbWV0aG9kVGhyb3dzL2JlZm9yZTQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvbWV0aG9kVGhyb3dzL2JlZm9yZTQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NDRiMmRiCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9tZXRob2RUaHJvd3MvYmVmb3JlNC5qYXZhCkBAIC0wLDAgKzEsOSBAQAorLy8gIlJlbW92ZSAnamF2YS5pby5JT0V4Y2VwdGlvbicgZnJvbSAnZicgdGhyb3dzIGxpc3QiICJmYWxzZSIKK2ltcG9ydCBqYXZhLmlvLio7CisKK2NsYXNzIGEgeworIHByaXZhdGUgdm9pZCBmKCkgdGhyb3dzIDxjYXJldD5JT0V4Y2VwdGlvbiB7CisgICB0aHJvdyBuZXcgSU9FeGNlcHRpb24oKTsKKyB9Cit9CisKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvbWV0aG9kVGhyb3dzL2JlZm9yZTUuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvbWV0aG9kVGhyb3dzL2JlZm9yZTUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMGU1N2VmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9tZXRob2RUaHJvd3MvYmVmb3JlNS5qYXZhCkBAIC0wLDAgKzEsMTMgQEAKKy8vICJSZW1vdmUgJ2phdmEuaW8uSU9FeGNlcHRpb24nIGZyb20gJ2YnIHRocm93cyBsaXN0IiAiZmFsc2UiCitpbXBvcnQgamF2YS5pby4qOworCitjbGFzcyBhIHsKKyB2b2lkIGYoKSB0aHJvd3MgSU9FeGNlcHRpb24geworIH0KK30KKworY2xhc3MgYiBleHRlbmRzIGEgeworIHZvaWQgZigpIHRocm93cyA8Y2FyZXQ+SU9FeGNlcHRpb24geworIH0KK30KKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9tb2RpZmllci9hZnRlcjEuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvbW9kaWZpZXIvYWZ0ZXIxLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2FmYzRhZgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvbW9kaWZpZXIvYWZ0ZXIxLmphdmEKQEAgLTAsMCArMSw5IEBACisvLyAiTWFrZSAnYScgbm90IGFic3RyYWN0IiAidHJ1ZSIKK2ltcG9ydCBqYXZhLmlvLio7CisKK2NsYXNzIGEgeworICB2b2lkIGYoKSB7CisgICAgbmV3IDxjYXJldD5hKCk7CisgIH0KK30KKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9tb2RpZmllci9hZnRlcjEwLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L21vZGlmaWVyL2FmdGVyMTAuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOWFlNmEyOAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvbW9kaWZpZXIvYWZ0ZXIxMC5qYXZhCkBAIC0wLDAgKzEsOSBAQAorLy8gIk1ha2UgJ2lubmVyIGNsYXNzIGluaXRpYWxpemVyJyBub3Qgc3RhdGljIiAidHJ1ZSIKK2ltcG9ydCBqYXZhLmlvLio7CisKK2NsYXNzIGEgeworICBjbGFzcyBpbm5lciB7CisgICAgPGNhcmV0PnsKKyAgICB9CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvbW9kaWZpZXIvYWZ0ZXIxMF8xLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L21vZGlmaWVyL2FmdGVyMTBfMS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNkZDQ2MTMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L21vZGlmaWVyL2FmdGVyMTBfMS5qYXZhCkBAIC0wLDAgKzEsMTEgQEAKKy8vICJNYWtlICdBbm9ueW1vdXMgY2xhc3MgZGVyaXZlZCBmcm9tIGEgY2xhc3MgaW5pdGlhbGl6ZXInIG5vdCBzdGF0aWMiICJ0cnVlIgoraW1wb3J0IGphdmEuaW8uKjsKKworY2xhc3MgYSB7CisgIHZvaWQgZigpIHsKKyAgICBuZXcgYSgpIHsKKyAgICAgIDxjYXJldD57CisgICAgICB9CisgICAgfTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9tb2RpZmllci9hZnRlcjExLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L21vZGlmaWVyL2FmdGVyMTEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMDY0NDU5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9tb2RpZmllci9hZnRlcjExLmphdmEKQEAgLTAsMCArMSw5IEBACisvLyAiTWFrZSAnaW5uZXInIHN0YXRpYyIgInRydWUiCitpbXBvcnQgamF2YS5pby4qOworCitjbGFzcyBhIHsKKyAgc3RhdGljIGNsYXNzIGlubmVyIHsKKyAgICA8Y2FyZXQ+c3RhdGljIHsKKyAgICB9CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvbW9kaWZpZXIvYWZ0ZXIxMi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9tb2RpZmllci9hZnRlcjEyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjI0NzQyNAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvbW9kaWZpZXIvYWZ0ZXIxMi5qYXZhCkBAIC0wLDAgKzEsOSBAQAorLy8gIk1ha2UgJ2luaW5uZXInIG5vdCBzdGF0aWMiICJ0cnVlIgoraW1wb3J0IGphdmEuaW8uKjsKKworY2xhc3MgYSB7CisgIGNsYXNzIGlubmVyIHsKKyAgICA8Y2FyZXQ+Y2xhc3MgaW5pbm5lciB7CisgICAgfQorICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L21vZGlmaWVyL2FmdGVyMTMuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvbW9kaWZpZXIvYWZ0ZXIxMy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZlMzI4ZjUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L21vZGlmaWVyL2FmdGVyMTMuamF2YQpAQCAtMCwwICsxLDkgQEAKKy8vICJNYWtlICdpbm5lcicgc3RhdGljIiAidHJ1ZSIKK2ltcG9ydCBqYXZhLmlvLio7CisKK2NsYXNzIGEgeworICBzdGF0aWMgY2xhc3MgaW5uZXIgeworICAgIDxjYXJldD5zdGF0aWMgY2xhc3MgaW5pbm5lciB7CisgICAgfQorICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L21vZGlmaWVyL2FmdGVyMTQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvbW9kaWZpZXIvYWZ0ZXIxNC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg3YWQwZDgKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L21vZGlmaWVyL2FmdGVyMTQuamF2YQpAQCAtMCwwICsxLDcgQEAKKy8vICJNYWtlICdhJyBub3QgZmluYWwiICJ0cnVlIgoraW1wb3J0IGphdmEuaW8uKjsKKworY2xhc3MgYSB7Cit9CitjbGFzcyBiIGV4dGVuZHMgPGNhcmV0PmEgeworfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9tb2RpZmllci9hZnRlcjE1LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L21vZGlmaWVyL2FmdGVyMTUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OWY0ZWI3Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9tb2RpZmllci9hZnRlcjE1LmphdmEKQEAgLTAsMCArMSw5IEBACisvLyAiTWFrZSAnaScgbm90IGZpbmFsIiAidHJ1ZSIKK2ltcG9ydCBqYXZhLmlvLio7CisKK2ZpbmFsIGNsYXNzIGEgeworICB2b2lkIGYoKSB7CisgICAgaW50IGkgPSAwOworICAgIDxjYXJldD5pID0gODsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9tb2RpZmllci9hZnRlcjE3LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L21vZGlmaWVyL2FmdGVyMTcuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZjUwZDk1Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9tb2RpZmllci9hZnRlcjE3LmphdmEKQEAgLTAsMCArMSwxMCBAQAorLy8gIk1ha2UgJ2YnIHB1YmxpYyIgInRydWUiCitpbXBvcnQgamF2YS5pby4qOworCitjbGFzcyBhIHsKKyAgcHVibGljIHZvaWQgZigpIHsKKyAgfQorfQorY2xhc3MgYiBleHRlbmRzIGEgeworICBwdWJsaWMgdm9pZCA8Y2FyZXQ+ZigpIHt9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9tb2RpZmllci9hZnRlcjE4LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L21vZGlmaWVyL2FmdGVyMTguamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZDVkY2Y5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9tb2RpZmllci9hZnRlcjE4LmphdmEKQEAgLTAsMCArMSwxMCBAQAorLy8gIk1ha2UgJ2EuZicgbm90IGZpbmFsIiAidHJ1ZSIKK2ltcG9ydCBqYXZhLmlvLio7CisKK2NsYXNzIGEgeworICBwdWJsaWMgdm9pZCBmKCkgeworICB9Cit9CitjbGFzcyBiIGV4dGVuZHMgYSB7CisgIDxjYXJldD5wdWJsaWMgdm9pZCBmKCkge30KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L21vZGlmaWVyL2FmdGVyMTkuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvbW9kaWZpZXIvYWZ0ZXIxOS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk3OGU1ZTEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L21vZGlmaWVyL2FmdGVyMTkuamF2YQpAQCAtMCwwICsxLDYgQEAKKy8vICJNYWtlICdmJyBhYnN0cmFjdCIgInRydWUiCitpbXBvcnQgamF2YS5pby4qOworCitjbGFzcyBhIHsKKyAgPGNhcmV0PnB1YmxpYyBhYnN0cmFjdCB2b2lkIGYoKTsKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvbW9kaWZpZXIvYWZ0ZXIyMS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9tb2RpZmllci9hZnRlcjIxLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGFmMDNmZgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvbW9kaWZpZXIvYWZ0ZXIyMS5qYXZhCkBAIC0wLDAgKzEsOSBAQAorLy8gIk1ha2UgJ2YnIG5vdCBzdGF0aWMiICJ0cnVlIgoraW1wb3J0IGphdmEuaW8uKjsKKworY2xhc3MgYSB7CisgIHB1YmxpYyB2b2lkIGYoKSB7fQorfQorY2xhc3MgYiBleHRlbmRzIGEgeworICA8Y2FyZXQ+cHVibGljIHZvaWQgZigpIHt9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L21vZGlmaWVyL2FmdGVyMjIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvbW9kaWZpZXIvYWZ0ZXIyMi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJkZWE2ODQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L21vZGlmaWVyL2FmdGVyMjIuamF2YQpAQCAtMCwwICsxLDkgQEAKKy8vICJNYWtlICdhLmYnIHN0YXRpYyIgInRydWUiCitpbXBvcnQgamF2YS5pby4qOworCitjbGFzcyBhIHsKKyAgcHVibGljIHN0YXRpYyB2b2lkIGYoKSB7fQorfQorY2xhc3MgYiBleHRlbmRzIGEgeworICA8Y2FyZXQ+cHVibGljIHN0YXRpYyB2b2lkIGYoKSB7fQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9tb2RpZmllci9hZnRlcjIzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L21vZGlmaWVyL2FmdGVyMjMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZTkwOWM4ZDUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L21vZGlmaWVyL2FmdGVyMjMuamF2YQpAQCAtMCwwICsxLDExIEBACisvLyAiTWFrZSAnYS5pJyBwYWNrYWdlIGxvY2FsIiAidHJ1ZSIKK2ltcG9ydCBqYXZhLmlvLio7CisKK2NsYXNzIGEgeworICBpbnQgaTsKK30KK2NsYXNzIGIgZXh0ZW5kcyBhIHsKKyAgdm9pZCBmKCkgeworICAgIGludCBwID0gPGNhcmV0Pmk7CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvbW9kaWZpZXIvYWZ0ZXIyNC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9tb2RpZmllci9hZnRlcjI0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDFhYTBhZgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvbW9kaWZpZXIvYWZ0ZXIyNC5qYXZhCkBAIC0wLDAgKzEsMTEgQEAKKy8vICJNYWtlICdhLmknIHB1YmxpYyIgInRydWUiCitpbXBvcnQgamF2YS5pby4qOworCitjbGFzcyBhIHsKKyAgcHVibGljIGludCBpOworfQorY2xhc3MgYiBleHRlbmRzIGEgeworICB2b2lkIGYoKSB7CisgICAgaW50IHAgPSA8Y2FyZXQ+aTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9tb2RpZmllci9hZnRlcjI1LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L21vZGlmaWVyL2FmdGVyMjUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYzI1MmVhCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9tb2RpZmllci9hZnRlcjI1LmphdmEKQEAgLTAsMCArMSw2IEBACisvLyAiTWFrZSAnZicgbm90IGFic3RyYWN0IiAidHJ1ZSIKK2ltcG9ydCBqYXZhLmlvLio7CisKK2NsYXNzIGEgeworICA8Y2FyZXQ+ZmluYWwgdm9pZCBmKCkge30KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvbW9kaWZpZXIvYWZ0ZXIyNi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9tb2RpZmllci9hZnRlcjI2LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmUzMTk2NgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvbW9kaWZpZXIvYWZ0ZXIyNi5qYXZhCkBAIC0wLDAgKzEsNiBAQAorLy8gIk1ha2UgJ2knIG5vdCBhYnN0cmFjdCIgInRydWUiCitpbXBvcnQgamF2YS5pby4qOworCitjbGFzcyBhIHsKKyAgPGNhcmV0PmludCBpOworfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9tb2RpZmllci9hZnRlcjI3LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L21vZGlmaWVyL2FmdGVyMjcuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OTQxYzkzCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9tb2RpZmllci9hZnRlcjI3LmphdmEKQEAgLTAsMCArMSw5IEBACisvLyAiTWFrZSAnaScgc3RhdGljIiAidHJ1ZSIKK2ltcG9ydCBqYXZhLmlvLio7CisKK2NsYXNzIGEgeworICBzdGF0aWMgaW50IGk7CisgIHN0YXRpYyB2b2lkIGYoKSB7CisgICAgaW50IHAgPSA8Y2FyZXQ+aTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9tb2RpZmllci9hZnRlcjI5LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L21vZGlmaWVyL2FmdGVyMjkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xODQ3Y2JkCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9tb2RpZmllci9hZnRlcjI5LmphdmEKQEAgLTAsMCArMSwxMiBAQAorLy8gIk1ha2UgJ2MgY2xhc3MgaW5pdGlhbGl6ZXInIG5vdCBzdGF0aWMiICJ0cnVlIgoraW1wb3J0IGphdmEuaW8uKjsKKworY2xhc3MgYyB7CisgICAgY2xhc3MgaW5uZXIgeworICAgICAgICBjbGFzcyBpbmlubmVyIHt9CisgICAgfQorCisgICAgeworICAgICAgICA8Y2FyZXQ+bmV3IGlubmVyKCk7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9tb2RpZmllci9hZnRlcjMwLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L21vZGlmaWVyL2FmdGVyMzAuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iY2QzNGVmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9tb2RpZmllci9hZnRlcjMwLmphdmEKQEAgLTAsMCArMSwxMiBAQAorLy8gIk1ha2UgJ2lubmVyJyBzdGF0aWMiICJ0cnVlIgoraW1wb3J0IGphdmEuaW8uKjsKKworY2xhc3MgYyB7CisgICAgc3RhdGljIGNsYXNzIGlubmVyIHsKKyAgICAgICAgY2xhc3MgaW5pbm5lciB7fQorICAgIH0KKworICAgIHN0YXRpYyB7CisgICAgICAgIDxjYXJldD5uZXcgaW5uZXIoKTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L21vZGlmaWVyL2FmdGVyMzEuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvbW9kaWZpZXIvYWZ0ZXIzMS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNkNTFlMzEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L21vZGlmaWVyL2FmdGVyMzEuamF2YQpAQCAtMCwwICsxLDEwIEBACisvLyAiTWFrZSAnYyBjbGFzcyBpbml0aWFsaXplcicgbm90IHN0YXRpYyIgInRydWUiCitpbXBvcnQgamF2YS5pby4qOworCitjbGFzcyBjIHsKKyAgICB2b2lkIGYoKSB7fQorCisgICAgeworICAgICAgICA8Y2FyZXQ+ZigpOworICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvbW9kaWZpZXIvYWZ0ZXI0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L21vZGlmaWVyL2FmdGVyNC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZhMTJkOWQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L21vZGlmaWVyL2FmdGVyNC5qYXZhCkBAIC0wLDAgKzEsOCBAQAorLy8gIk1ha2UgJ2EnIGFic3RyYWN0IiAidHJ1ZSIKK2ltcG9ydCBqYXZhLmlvLio7CisKK2Fic3RyYWN0IGNsYXNzIDxjYXJldD5hIHsKKyAgdm9pZCBmKCkgeworICB9CisgIGFic3RyYWN0IHZvaWQgZjIoKTsKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvbW9kaWZpZXIvYWZ0ZXI1LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L21vZGlmaWVyL2FmdGVyNS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZjYzdiOWQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L21vZGlmaWVyL2FmdGVyNS5qYXZhCkBAIC0wLDAgKzEsOCBAQAorLy8gIk1ha2UgJ2EnIG5vdCBmaW5hbCIgInRydWUiCitpbXBvcnQgamF2YS5pby4qOworCitjbGFzcyBhIHsKKyAgdm9pZCBmKCkgeworICAgIG5ldyA8Y2FyZXQ+YSgpIHt9OworICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L21vZGlmaWVyL2FmdGVyNi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9tb2RpZmllci9hZnRlcjYuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZTBlMTY5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9tb2RpZmllci9hZnRlcjYuamF2YQpAQCAtMCwwICsxLDEwIEBACisvLyAiTWFrZSAnaScgbm90IHN0YXRpYyIgInRydWUiCitpbXBvcnQgamF2YS5pby4qOworCitjbGFzcyBhIHsKKyAgY2xhc3MgaW5uZXIgeworICAgIDxjYXJldD5pbnQgaTsKKyAgfQorICB2b2lkIGYoKSB7CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvbW9kaWZpZXIvYWZ0ZXI3LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L21vZGlmaWVyL2FmdGVyNy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU1OGYxOTgKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L21vZGlmaWVyL2FmdGVyNy5qYXZhCkBAIC0wLDAgKzEsMTAgQEAKKy8vICJNYWtlICdpbm5lcicgc3RhdGljIiAidHJ1ZSIKK2ltcG9ydCBqYXZhLmlvLio7CisKK2NsYXNzIGEgeworICBzdGF0aWMgY2xhc3MgaW5uZXIgeworICAgIDxjYXJldD5zdGF0aWMgaW50IGk7CisgIH0KKyAgdm9pZCBmKCkgeworICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L21vZGlmaWVyL2FmdGVyOC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9tb2RpZmllci9hZnRlcjguamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNzEyZDE0Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9tb2RpZmllci9hZnRlcjguamF2YQpAQCAtMCwwICsxLDggQEAKKy8vICJNYWtlICdmJyBub3Qgc3RhdGljIiAidHJ1ZSIKK2ltcG9ydCBqYXZhLmlvLio7CisKK2NsYXNzIGEgeworICBjbGFzcyBpbm5lciB7CisgICAgPGNhcmV0PnZvaWQgZigpIHt9CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvbW9kaWZpZXIvYWZ0ZXI5LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L21vZGlmaWVyL2FmdGVyOS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI2OGZhN2IKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L21vZGlmaWVyL2FmdGVyOS5qYXZhCkBAIC0wLDAgKzEsOCBAQAorLy8gIk1ha2UgJ2lubmVyJyBzdGF0aWMiICJ0cnVlIgoraW1wb3J0IGphdmEuaW8uKjsKKworY2xhc3MgYSB7CisgIHN0YXRpYyBjbGFzcyBpbm5lciB7CisgICAgPGNhcmV0PnN0YXRpYyB2b2lkIGYoKSB7fQorICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L21vZGlmaWVyL2FmdGVyRGVub3JtYWxpemVkLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L21vZGlmaWVyL2FmdGVyRGVub3JtYWxpemVkLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTRkYmVkNQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvbW9kaWZpZXIvYWZ0ZXJEZW5vcm1hbGl6ZWQuamF2YQpAQCAtMCwwICsxLDggQEAKKy8vICJNYWtlICdmJyBzdGF0aWMiICJ0cnVlIgorcHVibGljIGNsYXNzIEZvbyB7CisgICAgaW50IGc7CisgICAgc3RhdGljIGludCBmOworICAgIHN0YXRpYyB2b2lkIGZvbygpIHsKKyAgICAgICAgPGNhcmV0PmYgPSAwOworICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvbW9kaWZpZXIvYWZ0ZXJJbkFub255bW91cy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9tb2RpZmllci9hZnRlckluQW5vbnltb3VzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjZkY2Q0YwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvbW9kaWZpZXIvYWZ0ZXJJbkFub255bW91cy5qYXZhCkBAIC0wLDAgKzEsMTMgQEAKKy8vICJNYWtlICdCYXIuZicgcHJvdGVjdGVkIiAidHJ1ZSIKK3B1YmxpYyBjbGFzcyBGb28gZXh0ZW5kcyBCYXJ7CisgICAgdm9pZCBmb28oKSB7CisgICAgICAgIG5ldyBSdW5uYWJsZSgpeworICAgICAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKKyAgICAgICAgICAgIGYoKTsKKyAgICAgICAgICB9CisgICAgICAgIH07CisgICAgfQorfQorY2xhc3MgQmFyIHsKKyAgICBwcm90ZWN0ZWQgdm9pZCBmKCl7fQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9tb2RpZmllci9hZnRlclJlZk5hbWUuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvbW9kaWZpZXIvYWZ0ZXJSZWZOYW1lLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmY2NDY3ZQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvbW9kaWZpZXIvYWZ0ZXJSZWZOYW1lLmphdmEKQEAgLTAsMCArMSwxMiBAQAorLy8gIk1ha2UgJ0Jhci5mJyBwdWJsaWMiICJ0cnVlIgorcHVibGljIGNsYXNzIEZvbyB7CisgICAgdm9pZCBmb28oQmFyIGYpIHsKKyAgICAgICAgZi48Y2FyZXQ+ZigyKTsKKyAgICB9Cit9CitjbGFzcyBCYXIgeworICAgIHB1YmxpYyB2b2lkIGYoaW50IGkpe30KKyAgICBwdWJsaWMgdm9pZCBmKFN0cmluZyBzKXt9CisKKworfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9tb2RpZmllci9iZWZvcmUxLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L21vZGlmaWVyL2JlZm9yZTEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YjE5ZDAxCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9tb2RpZmllci9iZWZvcmUxLmphdmEKQEAgLTAsMCArMSw5IEBACisvLyAiTWFrZSAnYScgbm90IGFic3RyYWN0IiAidHJ1ZSIKK2ltcG9ydCBqYXZhLmlvLio7CisKK2Fic3RyYWN0IGNsYXNzIGEgeworICB2b2lkIGYoKSB7CisgICAgbmV3IDxjYXJldD5hKCk7CisgIH0KK30KKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9tb2RpZmllci9iZWZvcmUxMC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9tb2RpZmllci9iZWZvcmUxMC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdlMDNlNzUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L21vZGlmaWVyL2JlZm9yZTEwLmphdmEKQEAgLTAsMCArMSw5IEBACisvLyAiTWFrZSAnaW5uZXIgY2xhc3MgaW5pdGlhbGl6ZXInIG5vdCBzdGF0aWMiICJ0cnVlIgoraW1wb3J0IGphdmEuaW8uKjsKKworY2xhc3MgYSB7CisgIGNsYXNzIGlubmVyIHsKKyAgICA8Y2FyZXQ+c3RhdGljIHsKKyAgICB9CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvbW9kaWZpZXIvYmVmb3JlMTBfMS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9tb2RpZmllci9iZWZvcmUxMF8xLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWM5NTk0ZAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvbW9kaWZpZXIvYmVmb3JlMTBfMS5qYXZhCkBAIC0wLDAgKzEsMTEgQEAKKy8vICJNYWtlICdBbm9ueW1vdXMgY2xhc3MgZGVyaXZlZCBmcm9tIGEgY2xhc3MgaW5pdGlhbGl6ZXInIG5vdCBzdGF0aWMiICJ0cnVlIgoraW1wb3J0IGphdmEuaW8uKjsKKworY2xhc3MgYSB7CisgIHZvaWQgZigpIHsKKyAgICBuZXcgYSgpIHsKKyAgICAgIDxjYXJldD5zdGF0aWMgeworICAgICAgfQorICAgIH07CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvbW9kaWZpZXIvYmVmb3JlMTEuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvbW9kaWZpZXIvYmVmb3JlMTEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YzIwNWE1Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9tb2RpZmllci9iZWZvcmUxMS5qYXZhCkBAIC0wLDAgKzEsOSBAQAorLy8gIk1ha2UgJ2lubmVyJyBzdGF0aWMiICJ0cnVlIgoraW1wb3J0IGphdmEuaW8uKjsKKworY2xhc3MgYSB7CisgIGNsYXNzIGlubmVyIHsKKyAgICA8Y2FyZXQ+c3RhdGljIHsKKyAgICB9CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvbW9kaWZpZXIvYmVmb3JlMTIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvbW9kaWZpZXIvYmVmb3JlMTIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZDdiZWJmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9tb2RpZmllci9iZWZvcmUxMi5qYXZhCkBAIC0wLDAgKzEsOSBAQAorLy8gIk1ha2UgJ2luaW5uZXInIG5vdCBzdGF0aWMiICJ0cnVlIgoraW1wb3J0IGphdmEuaW8uKjsKKworY2xhc3MgYSB7CisgIGNsYXNzIGlubmVyIHsKKyAgICA8Y2FyZXQ+c3RhdGljIGNsYXNzIGluaW5uZXIgeworICAgIH0KKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9tb2RpZmllci9iZWZvcmUxMy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9tb2RpZmllci9iZWZvcmUxMy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQzMmU4NjcKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L21vZGlmaWVyL2JlZm9yZTEzLmphdmEKQEAgLTAsMCArMSw5IEBACisvLyAiTWFrZSAnaW5uZXInIHN0YXRpYyIgInRydWUiCitpbXBvcnQgamF2YS5pby4qOworCitjbGFzcyBhIHsKKyAgY2xhc3MgaW5uZXIgeworICAgIDxjYXJldD5zdGF0aWMgY2xhc3MgaW5pbm5lciB7CisgICAgfQorICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L21vZGlmaWVyL2JlZm9yZTE0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L21vZGlmaWVyL2JlZm9yZTE0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWI3YmFhNQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvbW9kaWZpZXIvYmVmb3JlMTQuamF2YQpAQCAtMCwwICsxLDcgQEAKKy8vICJNYWtlICdhJyBub3QgZmluYWwiICJ0cnVlIgoraW1wb3J0IGphdmEuaW8uKjsKKworZmluYWwgY2xhc3MgYSB7Cit9CitjbGFzcyBiIGV4dGVuZHMgPGNhcmV0PmEgeworfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9tb2RpZmllci9iZWZvcmUxNS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9tb2RpZmllci9iZWZvcmUxNS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdkNWY0ODQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L21vZGlmaWVyL2JlZm9yZTE1LmphdmEKQEAgLTAsMCArMSw5IEBACisvLyAiTWFrZSAnaScgbm90IGZpbmFsIiAidHJ1ZSIKK2ltcG9ydCBqYXZhLmlvLio7CisKK2ZpbmFsIGNsYXNzIGEgeworICB2b2lkIGYoKSB7CisgICAgZmluYWwgaW50IGkgPSAwOworICAgIDxjYXJldD5pID0gODsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9tb2RpZmllci9iZWZvcmUxNi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9tb2RpZmllci9iZWZvcmUxNi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM1NjRkNTcKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L21vZGlmaWVyL2JlZm9yZTE2LmphdmEKQEAgLTAsMCArMSw5IEBACisvLyAiTWFrZSAnaScgbm90IGZpbmFsIiAiZmFsc2UiCitpbXBvcnQgamF2YS5pby4qOworCitmaW5hbCBjbGFzcyBhIHsKKyAgdm9pZCBmKCkgeworICAgIGZpbmFsIGludCBpOworICAgIDxjYXJldD5pID0gODsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9tb2RpZmllci9iZWZvcmUxNy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9tb2RpZmllci9iZWZvcmUxNy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE0MjI0YTMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L21vZGlmaWVyL2JlZm9yZTE3LmphdmEKQEAgLTAsMCArMSwxMCBAQAorLy8gIk1ha2UgJ2YnIHB1YmxpYyIgInRydWUiCitpbXBvcnQgamF2YS5pby4qOworCitjbGFzcyBhIHsKKyAgcHVibGljIHZvaWQgZigpIHsKKyAgfQorfQorY2xhc3MgYiBleHRlbmRzIGEgeworICB2b2lkIDxjYXJldD5mKCkge30KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L21vZGlmaWVyL2JlZm9yZTE4LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L21vZGlmaWVyL2JlZm9yZTE4LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWNjN2NjMQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvbW9kaWZpZXIvYmVmb3JlMTguamF2YQpAQCAtMCwwICsxLDEwIEBACisvLyAiTWFrZSAnYS5mJyBub3QgZmluYWwiICJ0cnVlIgoraW1wb3J0IGphdmEuaW8uKjsKKworY2xhc3MgYSB7CisgIGZpbmFsIHB1YmxpYyB2b2lkIGYoKSB7CisgIH0KK30KK2NsYXNzIGIgZXh0ZW5kcyBhIHsKKyAgPGNhcmV0PnB1YmxpYyB2b2lkIGYoKSB7fQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvbW9kaWZpZXIvYmVmb3JlMTkuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvbW9kaWZpZXIvYmVmb3JlMTkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZTUwOTQ1Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9tb2RpZmllci9iZWZvcmUxOS5qYXZhCkBAIC0wLDAgKzEsNiBAQAorLy8gIk1ha2UgJ2YnIGFic3RyYWN0IiAidHJ1ZSIKK2ltcG9ydCBqYXZhLmlvLio7CisKK2NsYXNzIGEgeworICA8Y2FyZXQ+cHVibGljIHZvaWQgZigpOworfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9tb2RpZmllci9iZWZvcmUyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L21vZGlmaWVyL2JlZm9yZTIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMWFhOTQxCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9tb2RpZmllci9iZWZvcmUyLmphdmEKQEAgLTAsMCArMSwxMCBAQAorLy8gIk1ha2UgJ2EnIG5vdCBhYnN0cmFjdCIgImZhbHNlIgoraW1wb3J0IGphdmEuaW8uKjsKKworYWJzdHJhY3QgY2xhc3MgYSB7CisgIHZvaWQgZigpIHsKKyAgICBuZXcgPGNhcmV0PmEoKTsKKyAgfQorICBhYnN0cmFjdCB2b2lkIGYyKCk7Cit9CisKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvbW9kaWZpZXIvYmVmb3JlMjAuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvbW9kaWZpZXIvYmVmb3JlMjAuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lN2EwNjc3Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9tb2RpZmllci9iZWZvcmUyMC5qYXZhCkBAIC0wLDAgKzEsNiBAQAorLy8gIk1ha2UgJ2YnIGFic3RyYWN0IiAiZmFsc2UiCitpbXBvcnQgamF2YS5pby4qOworCitjbGFzcyBhIHsKKyAgPGNhcmV0PnB1YmxpYyBmaW5hbCB2b2lkIGYoKTsKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvbW9kaWZpZXIvYmVmb3JlMjEuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvbW9kaWZpZXIvYmVmb3JlMjEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZmMwNWUxCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9tb2RpZmllci9iZWZvcmUyMS5qYXZhCkBAIC0wLDAgKzEsOSBAQAorLy8gIk1ha2UgJ2YnIG5vdCBzdGF0aWMiICJ0cnVlIgoraW1wb3J0IGphdmEuaW8uKjsKKworY2xhc3MgYSB7CisgIHB1YmxpYyB2b2lkIGYoKSB7fQorfQorY2xhc3MgYiBleHRlbmRzIGEgeworICA8Y2FyZXQ+cHVibGljIHN0YXRpYyB2b2lkIGYoKSB7fQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9tb2RpZmllci9iZWZvcmUyMi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9tb2RpZmllci9iZWZvcmUyMi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJmYWZhMDAKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L21vZGlmaWVyL2JlZm9yZTIyLmphdmEKQEAgLTAsMCArMSw5IEBACisvLyAiTWFrZSAnYS5mJyBzdGF0aWMiICJ0cnVlIgoraW1wb3J0IGphdmEuaW8uKjsKKworY2xhc3MgYSB7CisgIHB1YmxpYyB2b2lkIGYoKSB7fQorfQorY2xhc3MgYiBleHRlbmRzIGEgeworICA8Y2FyZXQ+cHVibGljIHN0YXRpYyB2b2lkIGYoKSB7fQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9tb2RpZmllci9iZWZvcmUyMy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9tb2RpZmllci9iZWZvcmUyMy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJlNzUwY2MKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L21vZGlmaWVyL2JlZm9yZTIzLmphdmEKQEAgLTAsMCArMSwxMSBAQAorLy8gIk1ha2UgJ2EuaScgcGFja2FnZSBsb2NhbCIgInRydWUiCitpbXBvcnQgamF2YS5pby4qOworCitjbGFzcyBhIHsKKyAgcHJpdmF0ZSBpbnQgaTsKK30KK2NsYXNzIGIgZXh0ZW5kcyBhIHsKKyAgdm9pZCBmKCkgeworICAgIGludCBwID0gPGNhcmV0Pmk7CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvbW9kaWZpZXIvYmVmb3JlMjQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvbW9kaWZpZXIvYmVmb3JlMjQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OWFkMWIzCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9tb2RpZmllci9iZWZvcmUyNC5qYXZhCkBAIC0wLDAgKzEsMTEgQEAKKy8vICJNYWtlICdhLmknIHB1YmxpYyIgInRydWUiCitpbXBvcnQgamF2YS5pby4qOworCitjbGFzcyBhIHsKKyAgcHJpdmF0ZSBpbnQgaTsKK30KK2NsYXNzIGIgZXh0ZW5kcyBhIHsKKyAgdm9pZCBmKCkgeworICAgIGludCBwID0gPGNhcmV0Pmk7CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvbW9kaWZpZXIvYmVmb3JlMjUuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvbW9kaWZpZXIvYmVmb3JlMjUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMDZiZTQ2Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9tb2RpZmllci9iZWZvcmUyNS5qYXZhCkBAIC0wLDAgKzEsNiBAQAorLy8gIk1ha2UgJ2YnIG5vdCBhYnN0cmFjdCIgInRydWUiCitpbXBvcnQgamF2YS5pby4qOworCitjbGFzcyBhIHsKKyAgPGNhcmV0PmFic3RyYWN0IGZpbmFsIHZvaWQgZigpIHt9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L21vZGlmaWVyL2JlZm9yZTI2LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L21vZGlmaWVyL2JlZm9yZTI2LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTMyMjI2YgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvbW9kaWZpZXIvYmVmb3JlMjYuamF2YQpAQCAtMCwwICsxLDYgQEAKKy8vICJNYWtlICdpJyBub3QgYWJzdHJhY3QiICJ0cnVlIgoraW1wb3J0IGphdmEuaW8uKjsKKworY2xhc3MgYSB7CisgIDxjYXJldD5hYnN0cmFjdCBpbnQgaTsKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvbW9kaWZpZXIvYmVmb3JlMjcuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvbW9kaWZpZXIvYmVmb3JlMjcuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYzdjN2IwCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9tb2RpZmllci9iZWZvcmUyNy5qYXZhCkBAIC0wLDAgKzEsOSBAQAorLy8gIk1ha2UgJ2knIHN0YXRpYyIgInRydWUiCitpbXBvcnQgamF2YS5pby4qOworCitjbGFzcyBhIHsKKyAgaW50IGk7CisgIHN0YXRpYyB2b2lkIGYoKSB7CisgICAgaW50IHAgPSA8Y2FyZXQ+aTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9tb2RpZmllci9iZWZvcmUyOC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9tb2RpZmllci9iZWZvcmUyOC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA3OGY5YTcKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L21vZGlmaWVyL2JlZm9yZTI4LmphdmEKQEAgLTAsMCArMSwxMSBAQAorLy8gIk1ha2UgJ015SW50ZXJmYWNlLm15TWV0aG9kJyBzdGF0aWMiICJmYWxzZSIKK2ltcG9ydCBqYXZhLmlvLio7CisKK2ludGVyZmFjZSBNeUludGVyZmFjZQoreworICAgIHB1YmxpYyB2b2lkIG15TWV0aG9kKCk7Cit9CitjbGFzcyBNeUludGVyZmFjZUltcGwgaW1wbGVtZW50cyBNeUludGVyZmFjZSAKK3sKKyAgICA8Y2FyZXQ+cHVibGljIHN0YXRpYyB2b2lkIG15TWV0aG9kKCkgeyAvKiBpbXBsZW1lbnRhdGlvbiBnb2VzIGhlcmUgKi8gfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9tb2RpZmllci9iZWZvcmUyOS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9tb2RpZmllci9iZWZvcmUyOS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE2MTZlZTIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L21vZGlmaWVyL2JlZm9yZTI5LmphdmEKQEAgLTAsMCArMSwxMiBAQAorLy8gIk1ha2UgJ2MgY2xhc3MgaW5pdGlhbGl6ZXInIG5vdCBzdGF0aWMiICJ0cnVlIgoraW1wb3J0IGphdmEuaW8uKjsKKworY2xhc3MgYyB7CisgICAgY2xhc3MgaW5uZXIgeworICAgICAgICBjbGFzcyBpbmlubmVyIHt9CisgICAgfQorCisgICAgc3RhdGljIHsKKyAgICAgICAgPGNhcmV0Pm5ldyBpbm5lcigpOworICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvbW9kaWZpZXIvYmVmb3JlMy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9tb2RpZmllci9iZWZvcmUzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTQ0ZTFlZgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvbW9kaWZpZXIvYmVmb3JlMy5qYXZhCkBAIC0wLDAgKzEsMTAgQEAKKy8vICJNYWtlICdpJyBub3QgYWJzdHJhY3QiICJmYWxzZSIKK2ltcG9ydCBqYXZhLmlvLio7CisKK2NsYXNzIGEgeworICB2b2lkIGYoKSB7CisgICAgbmV3IDxjYXJldD5pKCk7CisgIH0KK30KK2ludGVyZmFjZSBpIHsKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvbW9kaWZpZXIvYmVmb3JlMzAuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvbW9kaWZpZXIvYmVmb3JlMzAuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YzZmNjlkCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9tb2RpZmllci9iZWZvcmUzMC5qYXZhCkBAIC0wLDAgKzEsMTIgQEAKKy8vICJNYWtlICdpbm5lcicgc3RhdGljIiAidHJ1ZSIKK2ltcG9ydCBqYXZhLmlvLio7CisKK2NsYXNzIGMgeworICAgIGNsYXNzIGlubmVyIHsKKyAgICAgICAgY2xhc3MgaW5pbm5lciB7fQorICAgIH0KKworICAgIHN0YXRpYyB7CisgICAgICAgIDxjYXJldD5uZXcgaW5uZXIoKTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L21vZGlmaWVyL2JlZm9yZTMxLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L21vZGlmaWVyL2JlZm9yZTMxLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2VlNDExMwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvbW9kaWZpZXIvYmVmb3JlMzEuamF2YQpAQCAtMCwwICsxLDEwIEBACisvLyAiTWFrZSAnYyBjbGFzcyBpbml0aWFsaXplcicgbm90IHN0YXRpYyIgInRydWUiCitpbXBvcnQgamF2YS5pby4qOworCitjbGFzcyBjIHsKKyAgICB2b2lkIGYoKSB7fQorCisgICAgc3RhdGljIHsKKyAgICAgICAgPGNhcmV0PmYoKTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L21vZGlmaWVyL2JlZm9yZTMyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L21vZGlmaWVyL2JlZm9yZTMyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmMwODNkZQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvbW9kaWZpZXIvYmVmb3JlMzIuamF2YQpAQCAtMCwwICsxLDExIEBACisvLyAiTWFrZSAnc3MucycgcHVibGljIiAiZmFsc2UiCisvLyBkbyBub3Qgc3VnZ2VzdCBpbnRlbnRpb24gYmVjYXVzZSBvZiBzdGF0aWNzIHByb2JsZW0KKworY2xhc3Mgc3MgeworICBwcml2YXRlIGludCBzOworfQorY2xhc3MgZCBleHRlbmRzIHNzIHsKKyAgc3RhdGljIHZvaWQgZigpIHsKKyAgICBpbnQgdCA9IDxjYXJldD5zOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9tb2RpZmllci9iZWZvcmUzMy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9tb2RpZmllci9iZWZvcmUzMy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEwMzJhZTYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L21vZGlmaWVyL2JlZm9yZTMzLmphdmEKQEAgLTAsMCArMSwxMiBAQAorLy8gIk1ha2UgJ2UnIG5vdCBmaW5hbCIgImZhbHNlIgorCitjbGFzcyBDIHsKKyAgc3RhdGljIHsKKyAgICB0cnkgeworICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbigpOworICAgIH0KKyAgICBjYXRjaCAoUnVudGltZUV4Y2VwdGlvbiB8IElPRXhjZXB0aW9uIGUpIHsKKyAgICAgIDxjYXJldD5lID0gbnVsbDsKKyAgICB9CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L21vZGlmaWVyL2JlZm9yZTM0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L21vZGlmaWVyL2JlZm9yZTM0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGFjYTA2OQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvbW9kaWZpZXIvYmVmb3JlMzQuamF2YQpAQCAtMCwwICsxLDkgQEAKKy8vICJNYWtlICdyJyBub3QgZmluYWwiICJmYWxzZSIKKworY2xhc3MgQyB7CisgIHZvaWQgbSgpIHRocm93cyBFeGNlcHRpb24geworICAgIHRyeSAoQXV0b0Nsb3NlYWJsZSByID0gbnVsbCkgeworICAgICAgPGNhcmV0PnIgPSBudWxsOworICAgIH0KKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvbW9kaWZpZXIvYmVmb3JlMzUuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvbW9kaWZpZXIvYmVmb3JlMzUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYmVlNmRhCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9tb2RpZmllci9iZWZvcmUzNS5qYXZhCkBAIC0wLDAgKzEsMTYgQEAKKy8vICJNYWtlICdlJyBmaW5hbCIgImZhbHNlIgorCitjbGFzcyBDIHsKKyAgc3RhdGljIHsKKyAgICB0cnkgeworICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbigpOworICAgIH0KKyAgICBjYXRjaCAoUnVudGltZUV4Y2VwdGlvbiB8IElPRXhjZXB0aW9uIGUpIHsKKyAgICAgIG5ldyBSdW5uYWJsZSgpIHsKKyAgICAgICAgcHVibGljIHZvaWQgcnVuKCkgeworICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbig8Y2FyZXQ+ZSk7CisgICAgICAgIH0KKyAgICAgIH0ucnVuKCk7CisgICAgfQorICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9tb2RpZmllci9iZWZvcmUzNi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9tb2RpZmllci9iZWZvcmUzNi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA0YzRjZGQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L21vZGlmaWVyL2JlZm9yZTM2LmphdmEKQEAgLTAsMCArMSwxMyBAQAorLy8gIk1ha2UgJ3InIGZpbmFsIiAiZmFsc2UiCisKK2NsYXNzIEMgeworICB2b2lkIG0oKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICB0cnkgKEF1dG9DbG9zZWFibGUgciA9IG51bGwpIHsKKyAgICAgIG5ldyBSdW5uYWJsZSgpIHsKKyAgICAgICAgcHVibGljIHZvaWQgcnVuKCkgeworICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbig8Y2FyZXQ+cik7CisgICAgICAgIH0KKyAgICAgIH0ucnVuKCk7CisgICAgfQorICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9tb2RpZmllci9iZWZvcmU0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L21vZGlmaWVyL2JlZm9yZTQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hN2RkZGI1Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9tb2RpZmllci9iZWZvcmU0LmphdmEKQEAgLTAsMCArMSw4IEBACisvLyAiTWFrZSAnYScgYWJzdHJhY3QiICJ0cnVlIgoraW1wb3J0IGphdmEuaW8uKjsKKworY2xhc3MgPGNhcmV0PmEgeworICB2b2lkIGYoKSB7CisgIH0KKyAgYWJzdHJhY3Qgdm9pZCBmMigpOworfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9tb2RpZmllci9iZWZvcmU1LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L21vZGlmaWVyL2JlZm9yZTUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MWMwOGYxCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9tb2RpZmllci9iZWZvcmU1LmphdmEKQEAgLTAsMCArMSw4IEBACisvLyAiTWFrZSAnYScgbm90IGZpbmFsIiAidHJ1ZSIKK2ltcG9ydCBqYXZhLmlvLio7CisKK2ZpbmFsIGNsYXNzIGEgeworICB2b2lkIGYoKSB7CisgICAgbmV3IDxjYXJldD5hKCkge307CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvbW9kaWZpZXIvYmVmb3JlNi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9tb2RpZmllci9iZWZvcmU2LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDhiZDkwNAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvbW9kaWZpZXIvYmVmb3JlNi5qYXZhCkBAIC0wLDAgKzEsMTAgQEAKKy8vICJNYWtlICdpJyBub3Qgc3RhdGljIiAidHJ1ZSIKK2ltcG9ydCBqYXZhLmlvLio7CisKK2NsYXNzIGEgeworICBjbGFzcyBpbm5lciB7CisgICAgPGNhcmV0PnN0YXRpYyBpbnQgaTsKKyAgfQorICB2b2lkIGYoKSB7CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvbW9kaWZpZXIvYmVmb3JlNy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9tb2RpZmllci9iZWZvcmU3LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWNjYzEzYwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvbW9kaWZpZXIvYmVmb3JlNy5qYXZhCkBAIC0wLDAgKzEsMTAgQEAKKy8vICJNYWtlICdpbm5lcicgc3RhdGljIiAidHJ1ZSIKK2ltcG9ydCBqYXZhLmlvLio7CisKK2NsYXNzIGEgeworICBjbGFzcyBpbm5lciB7CisgICAgPGNhcmV0PnN0YXRpYyBpbnQgaTsKKyAgfQorICB2b2lkIGYoKSB7CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvbW9kaWZpZXIvYmVmb3JlOC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9tb2RpZmllci9iZWZvcmU4LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2ZkZDk2NQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvbW9kaWZpZXIvYmVmb3JlOC5qYXZhCkBAIC0wLDAgKzEsOCBAQAorLy8gIk1ha2UgJ2YnIG5vdCBzdGF0aWMiICJ0cnVlIgoraW1wb3J0IGphdmEuaW8uKjsKKworY2xhc3MgYSB7CisgIGNsYXNzIGlubmVyIHsKKyAgICA8Y2FyZXQ+c3RhdGljIHZvaWQgZigpIHt9CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvbW9kaWZpZXIvYmVmb3JlOS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9tb2RpZmllci9iZWZvcmU5LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGYxYTcyMQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvbW9kaWZpZXIvYmVmb3JlOS5qYXZhCkBAIC0wLDAgKzEsOCBAQAorLy8gIk1ha2UgJ2lubmVyJyBzdGF0aWMiICJ0cnVlIgoraW1wb3J0IGphdmEuaW8uKjsKKworY2xhc3MgYSB7CisgIGNsYXNzIGlubmVyIHsKKyAgICA8Y2FyZXQ+c3RhdGljIHZvaWQgZigpIHt9CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvbW9kaWZpZXIvYmVmb3JlRGVub3JtYWxpemVkLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L21vZGlmaWVyL2JlZm9yZURlbm9ybWFsaXplZC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk1MzJmYWUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L21vZGlmaWVyL2JlZm9yZURlbm9ybWFsaXplZC5qYXZhCkBAIC0wLDAgKzEsNyBAQAorLy8gIk1ha2UgJ2YnIHN0YXRpYyIgInRydWUiCitwdWJsaWMgY2xhc3MgRm9vIHsKKyAgICBpbnQgZyxmOworICAgIHN0YXRpYyB2b2lkIGZvbygpIHsKKyAgICAgICAgPGNhcmV0PmYgPSAwOworICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvbW9kaWZpZXIvYmVmb3JlSW5Bbm9ueW1vdXMuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvbW9kaWZpZXIvYmVmb3JlSW5Bbm9ueW1vdXMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMGEzMjI0Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9tb2RpZmllci9iZWZvcmVJbkFub255bW91cy5qYXZhCkBAIC0wLDAgKzEsMTMgQEAKKy8vICJNYWtlICdCYXIuZicgcHJvdGVjdGVkIiAidHJ1ZSIKK3B1YmxpYyBjbGFzcyBGb28gZXh0ZW5kcyBCYXJ7CisgICAgdm9pZCBmb28oKSB7CisgICAgICAgIG5ldyBSdW5uYWJsZSgpeworICAgICAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKKyAgICAgICAgICAgIGY8Y2FyZXQ+KCk7CisgICAgICAgICAgfQorICAgICAgICB9OworICAgIH0KK30KK2NsYXNzIEJhciB7CisgICAgcHJpdmF0ZSB2b2lkIGYoKXt9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L21vZGlmaWVyL2JlZm9yZVJlZk5hbWUuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvbW9kaWZpZXIvYmVmb3JlUmVmTmFtZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVhNzBmN2IKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L21vZGlmaWVyL2JlZm9yZVJlZk5hbWUuamF2YQpAQCAtMCwwICsxLDEyIEBACisvLyAiTWFrZSAnQmFyLmYnIHB1YmxpYyIgInRydWUiCitwdWJsaWMgY2xhc3MgRm9vIHsKKyAgICB2b2lkIGZvbyhCYXIgZikgeworICAgICAgICBmLjxjYXJldD5mKDIpOworICAgIH0KK30KK2NsYXNzIEJhciB7CisgICAgcHJpdmF0ZSB2b2lkIGYoaW50IGkpe30KKyAgICBwdWJsaWMgdm9pZCBmKFN0cmluZyBzKXt9CisKKworfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9tb2RpZmllci9iZWZvcmVTZW5zZWxlc3NTdGF0aWNGaXguamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvbW9kaWZpZXIvYmVmb3JlU2Vuc2VsZXNzU3RhdGljRml4LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWRiNWNkZgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvbW9kaWZpZXIvYmVmb3JlU2Vuc2VsZXNzU3RhdGljRml4LmphdmEKQEAgLTAsMCArMSwxMCBAQAorLy8gIk1ha2UgJ21haW4nIG5vdCBzdGF0aWMiICJmYWxzZSIKK2NsYXNzIERhdGVGb3JtYXQgeworCisgIHB1YmxpYyB2b2lkIHBhcnNlKFN0cmluZyBzKXt9Cit9CitjbGFzcyBUZXN0UGFyc2UgeworICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKyAgICAgIERhdGVGb3JtYXQuPGNhcmV0PnBhcnNlKCIyMDA3MDcyNFQxNzQ4MDAiKTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L21vdmVCb3VuZENsYXNzVG9Gcm9udC9hZnRlcjEuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvbW92ZUJvdW5kQ2xhc3NUb0Zyb250L2FmdGVyMS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg4NmU3MjgKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L21vdmVCb3VuZENsYXNzVG9Gcm9udC9hZnRlcjEuamF2YQpAQCAtMCwwICsxLDQgQEAKKy8vICJNb3ZlIGJvdW5kICdqYXZhLmxhbmcuTnVtYmVyJyB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBib3VuZHMgbGlzdCBvZiB0eXBlIHBhcmFtZXRlciAnWCciICJ0cnVlIgorY2xhc3MgQyA8WCBleHRlbmRzIE51bWJlciAmIFJ1bm5hYmxlPGNhcmV0Pj4geworICAgIFggeDsKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvbW92ZUJvdW5kQ2xhc3NUb0Zyb250L2JlZm9yZTEuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvbW92ZUJvdW5kQ2xhc3NUb0Zyb250L2JlZm9yZTEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZDJhYmFiCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9tb3ZlQm91bmRDbGFzc1RvRnJvbnQvYmVmb3JlMS5qYXZhCkBAIC0wLDAgKzEsNCBAQAorLy8gIk1vdmUgYm91bmQgJ2phdmEubGFuZy5OdW1iZXInIHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGJvdW5kcyBsaXN0IG9mIHR5cGUgcGFyYW1ldGVyICdYJyIgInRydWUiCitjbGFzcyBDIDxYIGV4dGVuZHMgUnVubmFibGUgJiA8Y2FyZXQ+TnVtYmVyPiB7CisgICAgWCB4OworfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9tb3ZlQ2F0Y2hVcC9hZnRlcjEuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvbW92ZUNhdGNoVXAvYWZ0ZXIxLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjRmY2MyOAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvbW92ZUNhdGNoVXAvYWZ0ZXIxLmphdmEKQEAgLTAsMCArMSwxNiBAQAorLy8gIk1vdmUgY2F0Y2ggZm9yICdqYXZhLmlvLklPRXhjZXB0aW9uJyBiZWZvcmUgJ2phdmEubGFuZy5FeGNlcHRpb24nIiAidHJ1ZSIKK2ltcG9ydCBqYXZhLmlvLio7CisKK2NsYXNzIGEgeworIHZvaWQgZihpbnQgaSkgeworICAgICB0cnkgeworICAgICAgICAgaWYgKGk9PTApIHRocm93IG5ldyBJT0V4Y2VwdGlvbigpOworICAgICB9IGNhdGNoIChJT0V4Y2VwdGlvbiBlKSAgeworICAgICAgIGludCBpb2V4Y2VwID0gMDsKKyAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICAgICBpbnQgZXhjZXAgPSAwOworICAgICB9PGNhcmV0PgorCisgfQorfQorCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L21vdmVDYXRjaFVwL2JlZm9yZTEuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvbW92ZUNhdGNoVXAvYmVmb3JlMS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM0NDUzYjkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L21vdmVDYXRjaFVwL2JlZm9yZTEuamF2YQpAQCAtMCwwICsxLDE2IEBACisvLyAiTW92ZSBjYXRjaCBmb3IgJ2phdmEuaW8uSU9FeGNlcHRpb24nIGJlZm9yZSAnamF2YS5sYW5nLkV4Y2VwdGlvbiciICJ0cnVlIgoraW1wb3J0IGphdmEuaW8uKjsKKworY2xhc3MgYSB7Cisgdm9pZCBmKGludCBpKSB7CisgICAgIHRyeSB7CisgICAgICAgICBpZiAoaT09MCkgdGhyb3cgbmV3IElPRXhjZXB0aW9uKCk7CisgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgaW50IGV4Y2VwID0gMDsKKyAgICAgfSBjYXRjaCAoPGNhcmV0PklPRXhjZXB0aW9uIGUpICB7CisgICAgICAgaW50IGlvZXhjZXAgPSAwOworICAgICB9CisKKyB9Cit9CisKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvbW92ZUNhdGNoVXAvYmVmb3JlMi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9tb3ZlQ2F0Y2hVcC9iZWZvcmUyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmVmYmMzZgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvbW92ZUNhdGNoVXAvYmVmb3JlMi5qYXZhCkBAIC0wLDAgKzEsMTggQEAKKy8vICJNb3ZlIGNhdGNoIGZvciAnamF2YS5pby5JT0V4Y2VwdGlvbicgYmVmb3JlICdqYXZhLmlvLkZpbGVOb3RGb3VuZEV4Y2VwdGlvbiciICJmYWxzZSIKK2ltcG9ydCBqYXZhLmlvLio7CisKK2NsYXNzIGEgeworIHZvaWQgZihpbnQgaSkgeworICAgICB0cnkgeworICAgICAgICAgaW50IHAgPSAwOworICAgICB9CisgICAgIGNhdGNoIChGaWxlTm90Rm91bmRFeGNlcHRpb24gZSkgeworICAgICAgIGludCBleGNlcCA9IDA7CisgICAgIH0KKyAgICAgY2F0Y2ggKDxjYXJldD5JT0V4Y2VwdGlvbiBlKSAgeworICAgICAgIGludCBpb2V4Y2VwID0gMDsKKyAgICAgfQorCisgfQorfQorCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L21vdmVGaWVsZEFzc2lnbm1lbnRUb0luaXRpYWxpemVyL2FmdGVyMS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9tb3ZlRmllbGRBc3NpZ25tZW50VG9Jbml0aWFsaXplci9hZnRlcjEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNmVjNDVmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9tb3ZlRmllbGRBc3NpZ25tZW50VG9Jbml0aWFsaXplci9hZnRlcjEuamF2YQpAQCAtMCwwICsxLDcgQEAKKy8vICJNb3ZlIGFzc2lnbm1lbnQgdG8gZmllbGQgZGVjbGFyYXRpb24iICJ0cnVlIgorCitjbGFzcyBYIHsKKyAgaW50IGYgPSAwOworICBYKCkgeworICA8Y2FyZXQ+fQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvbW92ZUZpZWxkQXNzaWdubWVudFRvSW5pdGlhbGl6ZXIvYWZ0ZXIyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L21vdmVGaWVsZEFzc2lnbm1lbnRUb0luaXRpYWxpemVyL2FmdGVyMi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkyODEzZmIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L21vdmVGaWVsZEFzc2lnbm1lbnRUb0luaXRpYWxpemVyL2FmdGVyMi5qYXZhCkBAIC0wLDAgKzEsMTIgQEAKKy8vICJNb3ZlIGFzc2lnbm1lbnQgdG8gZmllbGQgZGVjbGFyYXRpb24iICJ0cnVlIgorCitjbGFzcyBYIHsKKyAgaW50IGYgPSAwOworICBYKCkgeworICA8Y2FyZXQ+fQorICBYKGludCBpKSB7CisgICBpZiAoMT09MSkgOworICAgZWxzZSB7CisgICB9CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L21vdmVGaWVsZEFzc2lnbm1lbnRUb0luaXRpYWxpemVyL2FmdGVyMy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9tb3ZlRmllbGRBc3NpZ25tZW50VG9Jbml0aWFsaXplci9hZnRlcjMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYzAzMzUzCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9tb3ZlRmllbGRBc3NpZ25tZW50VG9Jbml0aWFsaXplci9hZnRlcjMuamF2YQpAQCAtMCwwICsxLDE1IEBACisvLyAiTW92ZSBhc3NpZ25tZW50IHRvIGZpZWxkIGRlY2xhcmF0aW9uIiAidHJ1ZSIKKworY2xhc3MgWCB7CisgIHN0YXRpYyBpbnQgZiA9IDA7CisgIHN0YXRpYyB7CisgIDxjYXJldD59CisgIFgoaW50IGkpIHsKKyAgfQorICB2b2lkIHgoKSB7CisgICAgaW50IGkgPSBmOworICB9CisgIHZvaWQgeDIoKSB7CisgICAgZiA9IDk7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L21vdmVGaWVsZEFzc2lnbm1lbnRUb0luaXRpYWxpemVyL2FmdGVyNC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9tb3ZlRmllbGRBc3NpZ25tZW50VG9Jbml0aWFsaXplci9hZnRlcjQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjJiM2M4Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9tb3ZlRmllbGRBc3NpZ25tZW50VG9Jbml0aWFsaXplci9hZnRlcjQuamF2YQpAQCAtMCwwICsxLDI0IEBACisvLyAiTW92ZSBhc3NpZ25tZW50IHRvIGZpZWxkIGRlY2xhcmF0aW9uIiAidHJ1ZSIKKworY2xhc3MgWCB7CisgIE9iamVjdCBmID0gbmV3IFJ1bm5hYmxlKCkgeworICAgIHZvaWQgeChpbnQgcCkgeworICAgICAgaW50IGYgPSBwOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKKworICAgIH0KKyAgfTsKKyAgWCgpIHsKKyAgICAgIDxjYXJldD4vLworICB9CisKKyAgdm9pZCB4KCkgeworICAgIGludCBpID0gZjsKKyAgfQorCisgIHZvaWQgeDIoKSB7CisgICAgZiA9IDk7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L21vdmVGaWVsZEFzc2lnbm1lbnRUb0luaXRpYWxpemVyL2FmdGVyNS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9tb3ZlRmllbGRBc3NpZ25tZW50VG9Jbml0aWFsaXplci9hZnRlcjUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYWYyZmQxCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9tb3ZlRmllbGRBc3NpZ25tZW50VG9Jbml0aWFsaXplci9hZnRlcjUuamF2YQpAQCAtMCwwICsxLDEyIEBACisvLyAiTW92ZSBhc3NpZ25tZW50IHRvIGZpZWxkIGRlY2xhcmF0aW9uIiAidHJ1ZSIKKworY2xhc3MgWCB7CisgIGludCBmID0gOTsKKyAgWCgpIHsKKyAgfQorICB2b2lkIHgoKSB7CisgICAgaW50IGkgPSBmOworICB9CisgIHZvaWQgeDIoKSB7CisgIDxjYXJldD59Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9tb3ZlRmllbGRBc3NpZ25tZW50VG9Jbml0aWFsaXplci9hZnRlckNCcmFja2V0cy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9tb3ZlRmllbGRBc3NpZ25tZW50VG9Jbml0aWFsaXplci9hZnRlckNCcmFja2V0cy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY4ZDNlNGIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L21vdmVGaWVsZEFzc2lnbm1lbnRUb0luaXRpYWxpemVyL2FmdGVyQ0JyYWNrZXRzLmphdmEKQEAgLTAsMCArMSw4IEBACisvLyAiTW92ZSBhc3NpZ25tZW50IHRvIGZpZWxkIGRlY2xhcmF0aW9uIiAidHJ1ZSIKK3B1YmxpYyBjbGFzcyBGb28geworCisgICAgcHJvdGVjdGVkIGJvb2xlYW4gaXNTdHJpbmdbXSA9IG5ldyBib29sZWFuWzEyM107CisKKyAgICBwdWJsaWMgRm9vKCkgeworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L21vdmVGaWVsZEFzc2lnbm1lbnRUb0luaXRpYWxpemVyL2JlZm9yZTEuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvbW92ZUZpZWxkQXNzaWdubWVudFRvSW5pdGlhbGl6ZXIvYmVmb3JlMS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI0ZTg5MGNjCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9tb3ZlRmllbGRBc3NpZ25tZW50VG9Jbml0aWFsaXplci9iZWZvcmUxLmphdmEKQEAgLTAsMCArMSw4IEBACisvLyAiTW92ZSBhc3NpZ25tZW50IHRvIGZpZWxkIGRlY2xhcmF0aW9uIiAidHJ1ZSIKKworY2xhc3MgWCB7CisgIGludCBmOworICBYKCkgeworICAgIGYgPSA8Y2FyZXQ+MDsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvbW92ZUZpZWxkQXNzaWdubWVudFRvSW5pdGlhbGl6ZXIvYmVmb3JlMi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9tb3ZlRmllbGRBc3NpZ25tZW50VG9Jbml0aWFsaXplci9iZWZvcmUyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWUyM2E4MAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvbW92ZUZpZWxkQXNzaWdubWVudFRvSW5pdGlhbGl6ZXIvYmVmb3JlMi5qYXZhCkBAIC0wLDAgKzEsMTMgQEAKKy8vICJNb3ZlIGFzc2lnbm1lbnQgdG8gZmllbGQgZGVjbGFyYXRpb24iICJ0cnVlIgorCitjbGFzcyBYIHsKKyAgaW50IGY7CisgIFgoKSB7CisgICAgZiA9IDxjYXJldD4wOworICB9CisgIFgoaW50IGkpIHsKKyAgIGlmICgxPT0xKSBmPTA7IGVsc2UgeworICAgICAgIGYgPSAgIDA7Ly9zZHMKKyAgIH0KKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvbW92ZUZpZWxkQXNzaWdubWVudFRvSW5pdGlhbGl6ZXIvYmVmb3JlMy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9tb3ZlRmllbGRBc3NpZ25tZW50VG9Jbml0aWFsaXplci9iZWZvcmUzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWNmMjFlNgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvbW92ZUZpZWxkQXNzaWdubWVudFRvSW5pdGlhbGl6ZXIvYmVmb3JlMy5qYXZhCkBAIC0wLDAgKzEsMTYgQEAKKy8vICJNb3ZlIGFzc2lnbm1lbnQgdG8gZmllbGQgZGVjbGFyYXRpb24iICJ0cnVlIgorCitjbGFzcyBYIHsKKyAgc3RhdGljIGludCBmOworICBzdGF0aWMgeworICAgIGYgPSA8Y2FyZXQ+MDsKKyAgfQorICBYKGludCBpKSB7CisgIH0KKyAgdm9pZCB4KCkgeworICAgIGludCBpID0gZjsKKyAgfQorICB2b2lkIHgyKCkgeworICAgIGYgPSA5OworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9tb3ZlRmllbGRBc3NpZ25tZW50VG9Jbml0aWFsaXplci9iZWZvcmU0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L21vdmVGaWVsZEFzc2lnbm1lbnRUb0luaXRpYWxpemVyL2JlZm9yZTQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMGUwNWUxCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9tb3ZlRmllbGRBc3NpZ25tZW50VG9Jbml0aWFsaXplci9iZWZvcmU0LmphdmEKQEAgLTAsMCArMSwyNSBAQAorLy8gIk1vdmUgYXNzaWdubWVudCB0byBmaWVsZCBkZWNsYXJhdGlvbiIgInRydWUiCisKK2NsYXNzIFggeworICBPYmplY3QgZjsKKyAgWCgpIHsKKyAgICA8Y2FyZXQ+ZiA9IG5ldyBSdW5uYWJsZSgpIHsKKyAgICAgIHZvaWQgeChpbnQgcCkgeworICAgICAgICBpbnQgZiA9IHA7CisgICAgICB9CisKKyAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKKworICAgICAgfQorICAgIH07CisgICAgLy8KKyAgfQorCisgIHZvaWQgeCgpIHsKKyAgICBpbnQgaSA9IGY7CisgIH0KKworICB2b2lkIHgyKCkgeworICAgIGYgPSA5OworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9tb3ZlRmllbGRBc3NpZ25tZW50VG9Jbml0aWFsaXplci9iZWZvcmU1LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L21vdmVGaWVsZEFzc2lnbm1lbnRUb0luaXRpYWxpemVyL2JlZm9yZTUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MzRmMmQ3Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9tb3ZlRmllbGRBc3NpZ25tZW50VG9Jbml0aWFsaXplci9iZWZvcmU1LmphdmEKQEAgLTAsMCArMSwxMyBAQAorLy8gIk1vdmUgYXNzaWdubWVudCB0byBmaWVsZCBkZWNsYXJhdGlvbiIgInRydWUiCisKK2NsYXNzIFggeworICBpbnQgZjsKKyAgWCgpIHsKKyAgfQorICB2b2lkIHgoKSB7CisgICAgaW50IGkgPSBmOworICB9CisgIHZvaWQgeDIoKSB7CisgICAgPGNhcmV0PmYgPSA5OworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9tb3ZlRmllbGRBc3NpZ25tZW50VG9Jbml0aWFsaXplci9iZWZvcmVBbm9ueW1vdXMuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvbW92ZUZpZWxkQXNzaWdubWVudFRvSW5pdGlhbGl6ZXIvYmVmb3JlQW5vbnltb3VzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGViOWNhMgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvbW92ZUZpZWxkQXNzaWdubWVudFRvSW5pdGlhbGl6ZXIvYmVmb3JlQW5vbnltb3VzLmphdmEKQEAgLTAsMCArMSwxNiBAQAorLy8gIk1vdmUgYXNzaWdubWVudCB0byBmaWVsZCBkZWNsYXJhdGlvbiIgImZhbHNlIgorY2xhc3MgVVUgZXh0ZW5kcyBVIHsKKyAgICBSdW5uYWJsZSBmOworICAgIGludCBmMjsKKworICAgIHB1YmxpYyBVVSgpIHsKKyAgICAgICBmaW5hbCBpbnQgb3V0ZXIgPSAwOworICAgICAgIGYgPGNhcmV0Pj0gbmV3IFJ1bm5hYmxlKCkgeworICAgICAgICAgICBpbnQgdDsKKyAgICAgICAgICAgcHVibGljIHZvaWQgcnVuKCkgeworICAgICAgICAgICAgICB0PTA7CisgICAgICAgICAgICAgIHQgPSBvdXRlcjsKKyAgICAgICAgICAgfQorICAgICAgIH07CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9tb3ZlRmllbGRBc3NpZ25tZW50VG9Jbml0aWFsaXplci9iZWZvcmVDQnJhY2tldHMuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvbW92ZUZpZWxkQXNzaWdubWVudFRvSW5pdGlhbGl6ZXIvYmVmb3JlQ0JyYWNrZXRzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGViMzA2ODEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L21vdmVGaWVsZEFzc2lnbm1lbnRUb0luaXRpYWxpemVyL2JlZm9yZUNCcmFja2V0cy5qYXZhCkBAIC0wLDAgKzEsOSBAQAorLy8gIk1vdmUgYXNzaWdubWVudCB0byBmaWVsZCBkZWNsYXJhdGlvbiIgInRydWUiCitwdWJsaWMgY2xhc3MgRm9vIHsKKworICAgIHByb3RlY3RlZCBib29sZWFuIGlzU3RyaW5nW10gICAgOworCisgICAgcHVibGljIEZvbygpIHsKKyAgICAgICAgaXNTdDxjYXJldD5yaW5nID0gbmV3IGJvb2xlYW5bMTIzXTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9tb3ZlRmllbGRBc3NpZ25tZW50VG9Jbml0aWFsaXplci9iZWZvcmVJbml0aWFsaXplZC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9tb3ZlRmllbGRBc3NpZ25tZW50VG9Jbml0aWFsaXplci9iZWZvcmVJbml0aWFsaXplZC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJkODlhODYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L21vdmVGaWVsZEFzc2lnbm1lbnRUb0luaXRpYWxpemVyL2JlZm9yZUluaXRpYWxpemVkLmphdmEKQEAgLTAsMCArMSw3IEBACisvLyAiTW92ZSBhc3NpZ25tZW50IHRvIGZpZWxkIGRlY2xhcmF0aW9uIiAiZmFsc2UiCitwdWJsaWMgY2xhc3MgWCB7CisgICAgaW50IGk9NzsKKyAgICB7CisgICAgICBpPTxjYXJldD4wOworICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvbW92ZUZpZWxkQXNzaWdubWVudFRvSW5pdGlhbGl6ZXIvYmVmb3JlTG9jYWwuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvbW92ZUZpZWxkQXNzaWdubWVudFRvSW5pdGlhbGl6ZXIvYmVmb3JlTG9jYWwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42Y2VlM2U1Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9tb3ZlRmllbGRBc3NpZ25tZW50VG9Jbml0aWFsaXplci9iZWZvcmVMb2NhbC5qYXZhCkBAIC0wLDAgKzEsOCBAQAorLy8gIk1vdmUgYXNzaWdubWVudCB0byBmaWVsZCBkZWNsYXJhdGlvbiIgImZhbHNlIgorcHVibGljIGNsYXNzIFggeworICAgIGludCBpOworICAgIFgoaW50IGZyb20pCisgICAgeworICAgICAgPGNhcmV0Pmk9ZnJvbTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L21vdmVGaWVsZEFzc2lnbm1lbnRUb0luaXRpYWxpemVyL2JlZm9yZVR3aWNlQXNzaWduZWQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvbW92ZUZpZWxkQXNzaWdubWVudFRvSW5pdGlhbGl6ZXIvYmVmb3JlVHdpY2VBc3NpZ25lZC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMxYTZlOWQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L21vdmVGaWVsZEFzc2lnbm1lbnRUb0luaXRpYWxpemVyL2JlZm9yZVR3aWNlQXNzaWduZWQuamF2YQpAQCAtMCwwICsxLDggQEAKKy8vICJNb3ZlIGFzc2lnbm1lbnQgdG8gZmllbGQgZGVjbGFyYXRpb24iICJmYWxzZSIKK3B1YmxpYyBjbGFzcyBYIHsKKyAgICBpbnQgaTsKKyAgICB7CisgICAgICBpID0gMDsKKyAgICAgIGkgPSA8Y2FyZXQ+MjsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L21vdmVGaWVsZEFzc2lnbm1lbnRUb0luaXRpYWxpemVyL2JlZm9yZVdyb25nUGxhY2UuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvbW92ZUZpZWxkQXNzaWdubWVudFRvSW5pdGlhbGl6ZXIvYmVmb3JlV3JvbmdQbGFjZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJmMzU0NjEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L21vdmVGaWVsZEFzc2lnbm1lbnRUb0luaXRpYWxpemVyL2JlZm9yZVdyb25nUGxhY2UuamF2YQpAQCAtMCwwICsxLDcgQEAKKy8vICJNb3ZlIGFzc2lnbm1lbnQgdG8gZmllbGQgZGVjbGFyYXRpb24iICJmYWxzZSIKK3B1YmxpYyBjbGFzcyBYIHsKKyAgICBpbnQgPGNhcmV0Pmk9NzsKKyAgICB7CisgICAgICBpPTA7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9tb3ZlRmllbGRBc3NpZ25tZW50VG9Jbml0aWFsaXplci9iZWZvcmVXcm9uZ1BsYWNlMi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9tb3ZlRmllbGRBc3NpZ25tZW50VG9Jbml0aWFsaXplci9iZWZvcmVXcm9uZ1BsYWNlMi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI2ZTg0NWIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L21vdmVGaWVsZEFzc2lnbm1lbnRUb0luaXRpYWxpemVyL2JlZm9yZVdyb25nUGxhY2UyLmphdmEKQEAgLTAsMCArMSwxMSBAQAorLy8gIk1vdmUgYXNzaWdubWVudCB0byBmaWVsZCBkZWNsYXJhdGlvbiIgImZhbHNlIgorcHVibGljIGNsYXNzIFggeworICAgIGludCBpOworICAgIHZvaWQgZigpCisgICAgeworICAgICAgPGNhcmV0Pmk9MDsKKyAgICB9CisgICAgeworICAgICAgaT0xOworICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvbW92ZUluaXRpYWxpemVyVG9Db25zdHJ1Y3Rvci9hZnRlcjAuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvbW92ZUluaXRpYWxpemVyVG9Db25zdHJ1Y3Rvci9hZnRlcjAuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MDU1NmUxCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9tb3ZlSW5pdGlhbGl6ZXJUb0NvbnN0cnVjdG9yL2FmdGVyMC5qYXZhCkBAIC0wLDAgKzEsOCBAQAorLy8gIk1vdmUgaW5pdGlhbGl6ZXIgdG8gY29uc3RydWN0b3IiICJ0cnVlIgorcHVibGljIGNsYXNzIFggeworICAgIDxjYXJldD5pbnQgaTsKKworICAgIHB1YmxpYyBYKCkgeworICAgICAgICBpID0gNzsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L21vdmVJbml0aWFsaXplclRvQ29uc3RydWN0b3IvYWZ0ZXIxLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L21vdmVJbml0aWFsaXplclRvQ29uc3RydWN0b3IvYWZ0ZXIxLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDYwMDI4YgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvbW92ZUluaXRpYWxpemVyVG9Db25zdHJ1Y3Rvci9hZnRlcjEuamF2YQpAQCAtMCwwICsxLDE1IEBACisvLyAiTW92ZSBpbml0aWFsaXplciB0byBjb25zdHJ1Y3RvciIgInRydWUiCitwdWJsaWMgY2xhc3MgWCB7CisgICAgZmluYWwgaW50IGk8Y2FyZXQ+OworCisgICAgcHVibGljIFgoU3RyaW5nIHMpIHsKKyAgICAgICAgaSA9IDA7CisgICAgfQorICAgIHB1YmxpYyBYKCkgeworICAgICAgICB0aGlzKDApOworICAgIH0KKyAgICBwdWJsaWMgWChpbnQgaSkgeworICAgICAgICB0aGlzLmkgPSAwOworICAgIH0KKworfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9tb3ZlSW5pdGlhbGl6ZXJUb0NvbnN0cnVjdG9yL2FmdGVyMi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9tb3ZlSW5pdGlhbGl6ZXJUb0NvbnN0cnVjdG9yL2FmdGVyMi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM1Y2RhNTMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L21vdmVJbml0aWFsaXplclRvQ29uc3RydWN0b3IvYWZ0ZXIyLmphdmEKQEAgLTAsMCArMSwxNyBAQAorLy8gIk1vdmUgaW5pdGlhbGl6ZXIgdG8gY29uc3RydWN0b3IiICJ0cnVlIgorcHVibGljIGNsYXNzIFggeworICAgIGZpbmFsIGludCBzPTA7CisgICAgPGNhcmV0PmZpbmFsIGludCBpOworCisgICAgcHVibGljIFgoU3RyaW5nIHMpIHsKKyAgICAgICAgc3VwZXIoKTsKKyAgICAgICAgaSA9IHRoaXMuczsKKyAgICB9CisgICAgcHVibGljIFgoKSB7CisgICAgICAgIHRoaXMoMCk7CisgICAgfQorICAgIHB1YmxpYyBYKGludCBpKSB7CisgICAgICAgIHRoaXMuaSA9IHM7CisgICAgfQorCit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L21vdmVJbml0aWFsaXplclRvQ29uc3RydWN0b3IvYWZ0ZXIzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L21vdmVJbml0aWFsaXplclRvQ29uc3RydWN0b3IvYWZ0ZXIzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzZiOTNjZgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvbW92ZUluaXRpYWxpemVyVG9Db25zdHJ1Y3Rvci9hZnRlcjMuamF2YQpAQCAtMCwwICsxLDIyIEBACisvLyAiTW92ZSBpbml0aWFsaXplciB0byBjb25zdHJ1Y3RvciIgInRydWUiCitwdWJsaWMgY2xhc3MgWCB7CisgICAgPGNhcmV0PmZpbmFsIGludCBmaTsKKworICAgIHB1YmxpYyBYKFN0cmluZyBzKSB7CisgICAgICAgIHN1cGVyKCk7CisgICAgICAgIGZpID0gMDsKKyAgICAgICAgaW50IGsgPSBmaTsKKyAgICAgICAgaysrOworICAgIH0KKyAgICBwdWJsaWMgWCgpIHsKKyAgICAgICAgdGhpcygwKTsKKyAgICB9CisgICAgcHVibGljIFgoaW50IGkpIHsKKyAgICAgICAgLy8gZgorICAgICAgICBpbnQgZyA9IDA7CisgICAgICAgIGZpID0gMDsKKyAgICAgICAgaW50IGYgPSBmaTsKKyAgICAgICAgZyArPSBmOworICAgIH0KKworfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9tb3ZlSW5pdGlhbGl6ZXJUb0NvbnN0cnVjdG9yL2FmdGVyQXJyYXkuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvbW92ZUluaXRpYWxpemVyVG9Db25zdHJ1Y3Rvci9hZnRlckFycmF5LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODk5YmYxOAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvbW92ZUluaXRpYWxpemVyVG9Db25zdHJ1Y3Rvci9hZnRlckFycmF5LmphdmEKQEAgLTAsMCArMSw4IEBACisvLyAiTW92ZSBpbml0aWFsaXplciB0byBjb25zdHJ1Y3RvciIgInRydWUiCitwdWJsaWMgY2xhc3MgWCB7CisgICAgPGNhcmV0PlN0cmluZ1tdIGk7CisKKyAgICBwdWJsaWMgWCgpIHsKKyAgICAgICAgaSA9IG5ldyBTdHJpbmdbXXsic3MiLCAieHgifTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L21vdmVJbml0aWFsaXplclRvQ29uc3RydWN0b3IvYWZ0ZXJOb0JvZHkuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvbW92ZUluaXRpYWxpemVyVG9Db25zdHJ1Y3Rvci9hZnRlck5vQm9keS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE4NWEwYjIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L21vdmVJbml0aWFsaXplclRvQ29uc3RydWN0b3IvYWZ0ZXJOb0JvZHkuamF2YQpAQCAtMCwwICsxLDEwIEBACisvLyAiTW92ZSBpbml0aWFsaXplciB0byBjb25zdHJ1Y3RvciIgInRydWUiCitwdWJsaWMgY2xhc3MgWCB7CisgICAgPGNhcmV0PmZpbmFsIGludCBmaTsKKworICAgIHB1YmxpYyBYKFN0cmluZyBzKSB7CisgICAgICAgIC8vVG8gY2hhbmdlIGJvZHkgb2YgY3JlYXRlZCBtZXRob2RzIHVzZSBGaWxlIHwgU2V0dGluZ3MgfCBGaWxlIFRlbXBsYXRlcy4KKyAgICAgICAgZmkgPSAwOworICAgIH0KKworfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9tb3ZlSW5pdGlhbGl6ZXJUb0NvbnN0cnVjdG9yL2FmdGVyUGFyYW1ldGVycy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9tb3ZlSW5pdGlhbGl6ZXJUb0NvbnN0cnVjdG9yL2FmdGVyUGFyYW1ldGVycy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVkOTNjN2YKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L21vdmVJbml0aWFsaXplclRvQ29uc3RydWN0b3IvYWZ0ZXJQYXJhbWV0ZXJzLmphdmEKQEAgLTAsMCArMSwxNyBAQAorLy8gIk1vdmUgaW5pdGlhbGl6ZXIgdG8gY29uc3RydWN0b3IiICJ0cnVlIgoraW1wb3J0IGphdmEuYXd0LmV2ZW50LkFjdGlvbkV2ZW50OworaW1wb3J0IGphdmEuYXd0LmV2ZW50LkFjdGlvbkxpc3RlbmVyOworcHVibGljIGNsYXNzIFhYWCB7CisgICAgcHVibGljIGZpbmFsIEFjdGlvbkxpc3RlbmVyIGxpc3RlbmVyPGNhcmV0PjsKKworICAgIHB1YmxpYyBYWFgoKSB7CisgICAgICAgIGxpc3RlbmVyID0gbmV3IEFjdGlvbkxpc3RlbmVyKCkgeworICAgICAgICAgICAgICAgIHB1YmxpYyB2b2lkIGFjdGlvblBlcmZvcm1lZChBY3Rpb25FdmVudCBlKSB7CisgICAgICAgICAgICAgICAgICAgIFhYWC5kb2l0KGUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH07CisgICAgfQorCisgICAgcHJpdmF0ZSBzdGF0aWMgdm9pZCBkb2l0KEFjdGlvbkV2ZW50IGUpIHsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L21vdmVJbml0aWFsaXplclRvQ29uc3RydWN0b3IvYmVmb3JlMC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9tb3ZlSW5pdGlhbGl6ZXJUb0NvbnN0cnVjdG9yL2JlZm9yZTAuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MjU3NDEyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9tb3ZlSW5pdGlhbGl6ZXJUb0NvbnN0cnVjdG9yL2JlZm9yZTAuamF2YQpAQCAtMCwwICsxLDQgQEAKKy8vICJNb3ZlIGluaXRpYWxpemVyIHRvIGNvbnN0cnVjdG9yIiAidHJ1ZSIKK3B1YmxpYyBjbGFzcyBYIHsKKyAgICA8Y2FyZXQ+aW50IGk9NzsKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvbW92ZUluaXRpYWxpemVyVG9Db25zdHJ1Y3Rvci9iZWZvcmUxLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L21vdmVJbml0aWFsaXplclRvQ29uc3RydWN0b3IvYmVmb3JlMS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJiODBjODAKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L21vdmVJbml0aWFsaXplclRvQ29uc3RydWN0b3IvYmVmb3JlMS5qYXZhCkBAIC0wLDAgKzEsMTMgQEAKKy8vICJNb3ZlIGluaXRpYWxpemVyIHRvIGNvbnN0cnVjdG9yIiAidHJ1ZSIKK3B1YmxpYyBjbGFzcyBYIHsKKyAgICBmaW5hbCBpbnQgaSA9IDA8Y2FyZXQ+OworCisgICAgcHVibGljIFgoU3RyaW5nIHMpIHsKKyAgICB9CisgICAgcHVibGljIFgoKSB7CisgICAgICAgIHRoaXMoMCk7CisgICAgfQorICAgIHB1YmxpYyBYKGludCBpKSB7CisgICAgfQorCit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L21vdmVJbml0aWFsaXplclRvQ29uc3RydWN0b3IvYmVmb3JlMi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9tb3ZlSW5pdGlhbGl6ZXJUb0NvbnN0cnVjdG9yL2JlZm9yZTIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNTY4NThmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9tb3ZlSW5pdGlhbGl6ZXJUb0NvbnN0cnVjdG9yL2JlZm9yZTIuamF2YQpAQCAtMCwwICsxLDE1IEBACisvLyAiTW92ZSBpbml0aWFsaXplciB0byBjb25zdHJ1Y3RvciIgInRydWUiCitwdWJsaWMgY2xhc3MgWCB7CisgICAgZmluYWwgaW50IHM9MDsKKyAgICA8Y2FyZXQ+ZmluYWwgaW50IGk9czsKKworICAgIHB1YmxpYyBYKFN0cmluZyBzKSB7CisgICAgICAgIHN1cGVyKCk7CisgICAgfQorICAgIHB1YmxpYyBYKCkgeworICAgICAgICB0aGlzKDApOworICAgIH0KKyAgICBwdWJsaWMgWChpbnQgaSkgeworICAgIH0KKworfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9tb3ZlSW5pdGlhbGl6ZXJUb0NvbnN0cnVjdG9yL2JlZm9yZTMuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvbW92ZUluaXRpYWxpemVyVG9Db25zdHJ1Y3Rvci9iZWZvcmUzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDM5ODQ2MQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvbW92ZUluaXRpYWxpemVyVG9Db25zdHJ1Y3Rvci9iZWZvcmUzLmphdmEKQEAgLTAsMCArMSwyMCBAQAorLy8gIk1vdmUgaW5pdGlhbGl6ZXIgdG8gY29uc3RydWN0b3IiICJ0cnVlIgorcHVibGljIGNsYXNzIFggeworICAgIDxjYXJldD5maW5hbCBpbnQgZmk9MDsKKworICAgIHB1YmxpYyBYKFN0cmluZyBzKSB7CisgICAgICAgIHN1cGVyKCk7CisgICAgICAgIGludCBrID0gZmk7CisgICAgICAgIGsrKzsKKyAgICB9CisgICAgcHVibGljIFgoKSB7CisgICAgICAgIHRoaXMoMCk7CisgICAgfQorICAgIHB1YmxpYyBYKGludCBpKSB7CisgICAgICAgIC8vIGYKKyAgICAgICAgaW50IGcgPSAwOworICAgICAgICBpbnQgZiA9IGZpOworICAgICAgICBnICs9IGY7CisgICAgfQorCit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L21vdmVJbml0aWFsaXplclRvQ29uc3RydWN0b3IvYmVmb3JlQW5vbi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9tb3ZlSW5pdGlhbGl6ZXJUb0NvbnN0cnVjdG9yL2JlZm9yZUFub24uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NThkODY0Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9tb3ZlSW5pdGlhbGl6ZXJUb0NvbnN0cnVjdG9yL2JlZm9yZUFub24uamF2YQpAQCAtMCwwICsxLDExIEBACisvLyAiTW92ZSBpbml0aWFsaXplciB0byBjb25zdHJ1Y3RvciIgImZhbHNlIgorcHVibGljIGNsYXNzIFggeworICB7CisKK25ldyBSdW5uYWJsZSgpIHsKKyBpbnQgPGNhcmV0Pmk9MDsKKyBwdWJsaWMgdm9pZCBydW4oKSB7CisgfQorfS5ydW4oKTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9tb3ZlSW5pdGlhbGl6ZXJUb0NvbnN0cnVjdG9yL2JlZm9yZUFycmF5LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L21vdmVJbml0aWFsaXplclRvQ29uc3RydWN0b3IvYmVmb3JlQXJyYXkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YTE2N2Q5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9tb3ZlSW5pdGlhbGl6ZXJUb0NvbnN0cnVjdG9yL2JlZm9yZUFycmF5LmphdmEKQEAgLTAsMCArMSw0IEBACisvLyAiTW92ZSBpbml0aWFsaXplciB0byBjb25zdHJ1Y3RvciIgInRydWUiCitwdWJsaWMgY2xhc3MgWCB7CisgICAgPGNhcmV0PlN0cmluZ1tdIGk9eyJzcyIsICJ4eCJ9OworfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9tb3ZlSW5pdGlhbGl6ZXJUb0NvbnN0cnVjdG9yL2JlZm9yZUludGVyZmFjZS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9tb3ZlSW5pdGlhbGl6ZXJUb0NvbnN0cnVjdG9yL2JlZm9yZUludGVyZmFjZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY0MjZlYjUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L21vdmVJbml0aWFsaXplclRvQ29uc3RydWN0b3IvYmVmb3JlSW50ZXJmYWNlLmphdmEKQEAgLTAsMCArMSw0IEBACisvLyAiTW92ZSBpbml0aWFsaXplciB0byBjb25zdHJ1Y3RvciIgImZhbHNlIgorcHVibGljIGludGVyZmFjZSBYIHsKKyAgICBpbnQgPGNhcmV0Pmk9MDsKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvbW92ZUluaXRpYWxpemVyVG9Db25zdHJ1Y3Rvci9iZWZvcmVKYXZhZG9jLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L21vdmVJbml0aWFsaXplclRvQ29uc3RydWN0b3IvYmVmb3JlSmF2YWRvYy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBiMjAxY2EKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L21vdmVJbml0aWFsaXplclRvQ29uc3RydWN0b3IvYmVmb3JlSmF2YWRvYy5qYXZhCkBAIC0wLDAgKzEsNSBAQAorLy8gIk1vdmUgaW5pdGlhbGl6ZXIgdG8gY29uc3RydWN0b3IiICJmYWxzZSIKK3B1YmxpYyBjbGFzcyBYIHsKKyAgICAvKiogPGNhcmV0PiAqLworICAgIGludCBpPTc7Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L21vdmVJbml0aWFsaXplclRvQ29uc3RydWN0b3IvYmVmb3JlTm9Cb2R5LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L21vdmVJbml0aWFsaXplclRvQ29uc3RydWN0b3IvYmVmb3JlTm9Cb2R5LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjJmYzJhZAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvbW92ZUluaXRpYWxpemVyVG9Db25zdHJ1Y3Rvci9iZWZvcmVOb0JvZHkuamF2YQpAQCAtMCwwICsxLDcgQEAKKy8vICJNb3ZlIGluaXRpYWxpemVyIHRvIGNvbnN0cnVjdG9yIiAidHJ1ZSIKK3B1YmxpYyBjbGFzcyBYIHsKKyAgICA8Y2FyZXQ+ZmluYWwgaW50IGZpPTA7CisKKyAgICBwdWJsaWMgWChTdHJpbmcgcyk7CisKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvbW92ZUluaXRpYWxpemVyVG9Db25zdHJ1Y3Rvci9iZWZvcmVQYXJhbWV0ZXJzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L21vdmVJbml0aWFsaXplclRvQ29uc3RydWN0b3IvYmVmb3JlUGFyYW1ldGVycy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM5YTUyZGEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L21vdmVJbml0aWFsaXplclRvQ29uc3RydWN0b3IvYmVmb3JlUGFyYW1ldGVycy5qYXZhCkBAIC0wLDAgKzEsMTYgQEAKKy8vICJNb3ZlIGluaXRpYWxpemVyIHRvIGNvbnN0cnVjdG9yIiAidHJ1ZSIKK2ltcG9ydCBqYXZhLmF3dC5ldmVudC5BY3Rpb25FdmVudDsKK2ltcG9ydCBqYXZhLmF3dC5ldmVudC5BY3Rpb25MaXN0ZW5lcjsKK3B1YmxpYyBjbGFzcyBYWFggeworICAgIHB1YmxpYyBmaW5hbCBBY3Rpb25MaXN0ZW5lciBsaXN0ZW5lciA8Y2FyZXQ+PSBuZXcgQWN0aW9uTGlzdGVuZXIoKSB7CisgICAgICAgICAgICBwdWJsaWMgdm9pZCBhY3Rpb25QZXJmb3JtZWQoQWN0aW9uRXZlbnQgZSkgeworICAgICAgICAgICAgICAgIFhYWC5kb2l0KGUpOworICAgICAgICAgICAgfQorICAgICAgICB9OworCisgICAgcHVibGljIFhYWCgpIHsKKyAgICB9CisKKyAgICBwcml2YXRlIHN0YXRpYyB2b2lkIGRvaXQoQWN0aW9uRXZlbnQgZSkgeworICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvbW92ZUluaXRpYWxpemVyVG9Db25zdHJ1Y3Rvci9iZWZvcmVTdGF0aWMuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvbW92ZUluaXRpYWxpemVyVG9Db25zdHJ1Y3Rvci9iZWZvcmVTdGF0aWMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NDRiMzFiCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9tb3ZlSW5pdGlhbGl6ZXJUb0NvbnN0cnVjdG9yL2JlZm9yZVN0YXRpYy5qYXZhCkBAIC0wLDAgKzEsNyBAQAorLy8gIk1vdmUgaW5pdGlhbGl6ZXIgdG8gY29uc3RydWN0b3IiICJmYWxzZSIKK3B1YmxpYyBjbGFzcyBYIHsKKyAgICBmaW5hbCBzdGF0aWMgaW50IDxjYXJldD5pPTc7CisKKyAgICBYKCkgeworICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvbW92ZUluaXRpYWxpemVyVG9Db25zdHJ1Y3Rvci9iZWZvcmVXcm9uZ1BsYWNlLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L21vdmVJbml0aWFsaXplclRvQ29uc3RydWN0b3IvYmVmb3JlV3JvbmdQbGFjZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNmMjZjNjkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L21vdmVJbml0aWFsaXplclRvQ29uc3RydWN0b3IvYmVmb3JlV3JvbmdQbGFjZS5qYXZhCkBAIC0wLDAgKzEsNCBAQAorLy8gIk1vdmUgaW5pdGlhbGl6ZXIgdG8gY29uc3RydWN0b3IiICJmYWxzZSIKK3B1YmxpYyBjbGFzcyA8Y2FyZXQ+WCB7CisgICAgaW50IGk9NzsKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvbW92ZUluaXRpYWxpemVyVG9TZXRVcC9hZnRlckpVbml0My5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9tb3ZlSW5pdGlhbGl6ZXJUb1NldFVwL2FmdGVySlVuaXQzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDQ1NjkxNgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvbW92ZUluaXRpYWxpemVyVG9TZXRVcC9hZnRlckpVbml0My5qYXZhCkBAIC0wLDAgKzEsMTUgQEAKKy8vICJNb3ZlIGluaXRpYWxpemVyIHRvIHNldFVwIG1ldGhvZCIgInRydWUiCitwYWNrYWdlIGp1bml0LmZyYW1ld29yazsKKworcHVibGljIGNsYXNzIFggZXh0ZW5kcyBUZXN0Q2FzZSB7CisgIGludCBpOworCisgICAgcHVibGljIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgc3VwZXIuc2V0VXAoKTsKKyAgICAgICAgaSA9IDc7CisgICAgfQorfQorCisvL0hBQ0s6IG1ha2luZyB0ZXN0IHBvc3NpYmxlIHdpdGhvdXQgYXR0YWNoaW5nIGpVbml0CitwdWJsaWMgYWJzdHJhY3QgY2xhc3MgVGVzdENhc2UgeworfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9tb3ZlSW5pdGlhbGl6ZXJUb1NldFVwL2FmdGVyVGVzdE5HLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L21vdmVJbml0aWFsaXplclRvU2V0VXAvYWZ0ZXJUZXN0TkcuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YmZiZjU1OQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvbW92ZUluaXRpYWxpemVyVG9TZXRVcC9hZnRlclRlc3RORy5qYXZhCkBAIC0wLDAgKzEsMTMgQEAKKy8vICJNb3ZlIGluaXRpYWxpemVyIHRvIHNldFVwIG1ldGhvZCIgInRydWUiCitwdWJsaWMgY2xhc3MgWCB7CisgIDxjYXJldD5pbnQgaTsKKworICAgIEBvcmcudGVzdG5nLmFubm90YXRpb25zLkJlZm9yZU1ldGhvZAorICAgIHB1YmxpYyB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIGkgPSA3OworICAgIH0KKworICAgIEBvcmcudGVzdG5nLmFubm90YXRpb25zLlRlc3QKKyAgcHVibGljIHZvaWQgdGVzdCgpIHsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9tb3ZlSW5pdGlhbGl6ZXJUb1NldFVwL2FmdGVyalVuaXQ0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L21vdmVJbml0aWFsaXplclRvU2V0VXAvYWZ0ZXJqVW5pdDQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNTI4OGZmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9tb3ZlSW5pdGlhbGl6ZXJUb1NldFVwL2FmdGVyalVuaXQ0LmphdmEKQEAgLTAsMCArMSwxMyBAQAorLy8gIk1vdmUgaW5pdGlhbGl6ZXIgdG8gc2V0VXAgbWV0aG9kIiAidHJ1ZSIKK3B1YmxpYyBjbGFzcyBYIHsKKyAgPGNhcmV0PmludCBpOworCisgICAgQG9yZy5qdW5pdC5CZWZvcmUKKyAgICBwdWJsaWMgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICBpID0gNzsKKyAgICB9CisKKyAgICBAb3JnLmp1bml0LlRlc3QKKyAgcHVibGljIHZvaWQgdGVzdCgpIHsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9tb3ZlSW5pdGlhbGl6ZXJUb1NldFVwL2JlZm9yZUpVbml0My5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9tb3ZlSW5pdGlhbGl6ZXJUb1NldFVwL2JlZm9yZUpVbml0My5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkzMTU5OGQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L21vdmVJbml0aWFsaXplclRvU2V0VXAvYmVmb3JlSlVuaXQzLmphdmEKQEAgLTAsMCArMSwxMCBAQAorLy8gIk1vdmUgaW5pdGlhbGl6ZXIgdG8gc2V0VXAgbWV0aG9kIiAidHJ1ZSIKK3BhY2thZ2UganVuaXQuZnJhbWV3b3JrOworCitwdWJsaWMgY2xhc3MgWCBleHRlbmRzIFRlc3RDYXNlIHsKKyAgPGNhcmV0PmludCBpID0gNzsKK30KKworLy9IQUNLOiBtYWtpbmcgdGVzdCBwb3NzaWJsZSB3aXRob3V0IGF0dGFjaGluZyBqVW5pdAorcHVibGljIGFic3RyYWN0IGNsYXNzIFRlc3RDYXNlIHsKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvbW92ZUluaXRpYWxpemVyVG9TZXRVcC9iZWZvcmVOb3RUZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L21vdmVJbml0aWFsaXplclRvU2V0VXAvYmVmb3JlTm90VGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNhNzYwOTgKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L21vdmVJbml0aWFsaXplclRvU2V0VXAvYmVmb3JlTm90VGVzdC5qYXZhCkBAIC0wLDAgKzEsNCBAQAorLy8gIk1vdmUgaW5pdGlhbGl6ZXIgdG8gc2V0VXAgbWV0aG9kIiAiZmFsc2UiCitwdWJsaWMgY2xhc3MgWCB7CisgIDxjYXJldD5pbnQgaSA9IDc7Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L21vdmVJbml0aWFsaXplclRvU2V0VXAvYmVmb3JlVGVzdE5HLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L21vdmVJbml0aWFsaXplclRvU2V0VXAvYmVmb3JlVGVzdE5HLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTEwMjI4YgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvbW92ZUluaXRpYWxpemVyVG9TZXRVcC9iZWZvcmVUZXN0TkcuamF2YQpAQCAtMCwwICsxLDggQEAKKy8vICJNb3ZlIGluaXRpYWxpemVyIHRvIHNldFVwIG1ldGhvZCIgInRydWUiCitwdWJsaWMgY2xhc3MgWCB7CisgIDxjYXJldD5pbnQgaSA9IDc7CisKKyAgQG9yZy50ZXN0bmcuYW5ub3RhdGlvbnMuVGVzdAorICBwdWJsaWMgdm9pZCB0ZXN0KCkgeworICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L21vdmVJbml0aWFsaXplclRvU2V0VXAvYmVmb3JlalVuaXQ0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L21vdmVJbml0aWFsaXplclRvU2V0VXAvYmVmb3JlalVuaXQ0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzVjYTZhNwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvbW92ZUluaXRpYWxpemVyVG9TZXRVcC9iZWZvcmVqVW5pdDQuamF2YQpAQCAtMCwwICsxLDggQEAKKy8vICJNb3ZlIGluaXRpYWxpemVyIHRvIHNldFVwIG1ldGhvZCIgInRydWUiCitwdWJsaWMgY2xhc3MgWCB7CisgIDxjYXJldD5pbnQgaSA9IDc7CisKKyAgQG9yZy5qdW5pdC5UZXN0CisgIHB1YmxpYyB2b2lkIHRlc3QoKSB7CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvbXVzdEJlRmluYWwvYWZ0ZXIxLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L211c3RCZUZpbmFsL2FmdGVyMS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQwNzcyNmMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L211c3RCZUZpbmFsL2FmdGVyMS5qYXZhCkBAIC0wLDAgKzEsMTQgQEAKKy8vICJNYWtlICdpJyBmaW5hbCIgInRydWUiCitpbXBvcnQgamF2YS5pby4qOworCitjbGFzcyBhIHsKKyB2b2lkIGYoKSB7CisgICAgIGZpbmFsIGludCBpID0gMDsKKyAgICAgbmV3IFJ1bm5hYmxlKCkgeworICAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKKyAgICAgICAgIGludCBpaSA9IDxjYXJldD5pOworICAgICAgIH0KKyAgICAgfTsKKyB9Cit9CisKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvbXVzdEJlRmluYWwvYWZ0ZXIxMC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9tdXN0QmVGaW5hbC9hZnRlcjEwLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDJkOTNkNQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvbXVzdEJlRmluYWwvYWZ0ZXIxMC5qYXZhCkBAIC0wLDAgKzEsMTggQEAKKy8vICJDb3B5ICdhJyB0byB0ZW1wIGZpbmFsIHZhcmlhYmxlIiAidHJ1ZSIKK3B1YmxpYyBjbGFzcyBEb3VibGVUcm91YmxlIHsKKyAgICBwdWJsaWMgdm9pZCB0ZXN0KCkgeworICAgICAgICBpbnQgYSA9IDE7CisgICAgICAgIGEgPSAyOworICAgICAgICBmaW5hbCBpbnQgZmluYWxBID0gYTsKKyAgICAgICAgY2xhc3MgcyB7CisgICAgICAgICAgcHVibGljIHZvaWQgcnVuKCkgeworICAgICAgICAgICAgbmV3IFJ1bm5hYmxlKCkgeworICAgICAgICAgICAgICBwdWJsaWMgdm9pZCBydW4oKSB7CisgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKDxjYXJldD5maW5hbEEpOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9LnJ1bigpOworICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgfQorCit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L211c3RCZUZpbmFsL2FmdGVyMi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9tdXN0QmVGaW5hbC9hZnRlcjIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MGJhZWVjCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9tdXN0QmVGaW5hbC9hZnRlcjIuamF2YQpAQCAtMCwwICsxLDE2IEBACisvLyAiQ29weSAnaScgdG8gdGVtcCBmaW5hbCB2YXJpYWJsZSIgInRydWUiCitpbXBvcnQgamF2YS5pby4qOworCitjbGFzcyBhIHsKKyB2b2lkIGYoKSB7CisgICAgIGludCBpID0gMDsKKyAgICAgZmluYWwgaW50IGZpbmFsSSA9IGk7CisgICAgIG5ldyBSdW5uYWJsZSgpIHsKKyAgICAgICBwdWJsaWMgdm9pZCBydW4oKSB7CisgICAgICAgICBpbnQgaWkgPSA8Y2FyZXQ+ZmluYWxJOworICAgICAgIH0KKyAgICAgfTsKKyAgICAgaSsrOworIH0KK30KKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9tdXN0QmVGaW5hbC9hZnRlcjMuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvbXVzdEJlRmluYWwvYWZ0ZXIzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzcwZjlmNAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvbXVzdEJlRmluYWwvYWZ0ZXIzLmphdmEKQEAgLTAsMCArMSwxNCBAQAorLy8gIlRyYW5zZm9ybSAnaScgaW50byBmaW5hbCBvbmUgZWxlbWVudCBhcnJheSIgInRydWUiCitpbXBvcnQgamF2YS5pby4qOworCitjbGFzcyBhIHsKKyB2b2lkIGYoKSB7CisgICAgIGZpbmFsIGludFtdIGkgPSB7MH07CisgICAgIG5ldyBSdW5uYWJsZSgpIHsKKyAgICAgICBwdWJsaWMgdm9pZCBydW4oKSB7CisgICAgICAgICAgPGNhcmV0PmlbMF0gPSAwOworICAgICAgIH0KKyAgICAgfTsKKyB9Cit9CisKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvbXVzdEJlRmluYWwvYWZ0ZXI1LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L211c3RCZUZpbmFsL2FmdGVyNS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA5OTZlYmUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L211c3RCZUZpbmFsL2FmdGVyNS5qYXZhCkBAIC0wLDAgKzEsMTkgQEAKKy8vICJUcmFuc2Zvcm0gJ2knIGludG8gZmluYWwgb25lIGVsZW1lbnQgYXJyYXkiICJ0cnVlIgoraW1wb3J0IGphdmEuaW8uKjsKKworY2xhc3MgYWEgeworIHZvaWQgZigpIHsKKyAgICAgZmluYWwgaW50W10gaSA9IHs5fTsKKyAgICAgbmV3IFJ1bm5hYmxlKCkgeworICAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKKyAgICAgICAgIGludCBwID0gaVswXTsKKyAgICAgICB9CisgICAgIH07CisgICAgIG5ldyBSdW5uYWJsZSgpIHsKKyAgICAgICBwdWJsaWMgdm9pZCBydW4oKSB7CisgICAgICAgICBpWzBdID0gMDsKKyAgICAgICB9CisgICAgIH07CisgfQorfQorCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L211c3RCZUZpbmFsL2FmdGVyNi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9tdXN0QmVGaW5hbC9hZnRlcjYuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZjdkNjk0Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9tdXN0QmVGaW5hbC9hZnRlcjYuamF2YQpAQCAtMCwwICsxLDI0IEBACisvLyAiVHJhbnNmb3JtICdpJyBpbnRvIGZpbmFsIG9uZSBlbGVtZW50IGFycmF5IiAidHJ1ZSIKK2ltcG9ydCBqYXZhLmlvLio7CisKK2NsYXNzIGFhIHsKKyB2b2lkIGYoKSB7CisgICAgIGZpbmFsIGludFtdIGkgPSB7NH07CisgICAgIFJ1bm5hYmxlIHJ1bm5hYmxlID0gbmV3IFJ1bm5hYmxlKCkgeworICAgICAgICAgcHVibGljIHZvaWQgcnVuKCkgeworICAgICAgICAgICAgIG5ldyBSdW5uYWJsZSgpIHsKKyAgICAgICAgICAgICAgICAgcHVibGljIHZvaWQgcnVuKCkgeworICAgICAgICAgICAgICAgICAgICAgaW50IG89IGlbMF07CisgICAgICAgICAgICAgICAgICAgICBpWzBdID1vOworICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgICBuZXcgUnVubmFibGUoKSB7CisgICAgICAgICAgICAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKKyAgICAgICAgICAgICAgICAgICAgIGludCBvPTxjYXJldD4gaVswXTsKKyAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgIH07CisgICAgICAgICB9CisgICAgIH07CisgfQorfQorCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L211c3RCZUZpbmFsL2FmdGVyNy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9tdXN0QmVGaW5hbC9hZnRlcjcuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42Zjg5YmIwCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9tdXN0QmVGaW5hbC9hZnRlcjcuamF2YQpAQCAtMCwwICsxLDE1IEBACisvLyAiVHJhbnNmb3JtICdpJyBpbnRvIGZpbmFsIG9uZSBlbGVtZW50IGFycmF5IiAidHJ1ZSIKK2ltcG9ydCBqYXZhLmlvLio7CisKK2NsYXNzIGFhIHsKKyB2b2lkIGYoKSB7CisgICAgIGZpbmFsIGludFtdIGkgPSBuZXcgaW50WzFdOworICAgICBSdW5uYWJsZSBydW5uYWJsZSA9IG5ldyBSdW5uYWJsZSgpIHsKKyAgICAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKKyAgICAgICAgICAgICA8Y2FyZXQ+aVswXSA9IDU7CisgICAgICAgICB9CisgICAgIH07CisgICAgaW50IGYgPSBpWzBdOworIH0KK30KKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9tdXN0QmVGaW5hbC9hZnRlcjguamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvbXVzdEJlRmluYWwvYWZ0ZXI4LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmY4OWJiMAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvbXVzdEJlRmluYWwvYWZ0ZXI4LmphdmEKQEAgLTAsMCArMSwxNSBAQAorLy8gIlRyYW5zZm9ybSAnaScgaW50byBmaW5hbCBvbmUgZWxlbWVudCBhcnJheSIgInRydWUiCitpbXBvcnQgamF2YS5pby4qOworCitjbGFzcyBhYSB7Cisgdm9pZCBmKCkgeworICAgICBmaW5hbCBpbnRbXSBpID0gbmV3IGludFsxXTsKKyAgICAgUnVubmFibGUgcnVubmFibGUgPSBuZXcgUnVubmFibGUoKSB7CisgICAgICAgICBwdWJsaWMgdm9pZCBydW4oKSB7CisgICAgICAgICAgICAgPGNhcmV0PmlbMF0gPSA1OworICAgICAgICAgfQorICAgICB9OworICAgIGludCBmID0gaVswXTsKKyB9Cit9CisKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvbXVzdEJlRmluYWwvYWZ0ZXJBbGxWYXJzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L211c3RCZUZpbmFsL2FmdGVyQWxsVmFycy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdkMDQ2NTkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L211c3RCZUZpbmFsL2FmdGVyQWxsVmFycy5qYXZhCkBAIC0wLDAgKzEsMTUgQEAKKy8vICJNYWtlIHZhcmlhYmxlcyBmaW5hbCIgInRydWUiCitpbXBvcnQgamF2YS5pby4qOworCitjbGFzcyBhIHsKKyB2b2lkIGYoKSB7CisgICAgIGZpbmFsIGludCBpID0gMDsKKyAgICAgZmluYWwgaW50IGogPSAwOworICAgICBuZXcgUnVubmFibGUoKSB7CisgICAgICAgcHVibGljIHZvaWQgcnVuKCkgeworICAgICAgICAgaW50IGlpID0gPGNhcmV0PmkgKyBqOworICAgICAgIH0KKyAgICAgfTsKKyB9Cit9CisKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvbXVzdEJlRmluYWwvYWZ0ZXJDb3B5TGFtYmRhUGFyYW0uamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvbXVzdEJlRmluYWwvYWZ0ZXJDb3B5TGFtYmRhUGFyYW0uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOGY4ODk1Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9tdXN0QmVGaW5hbC9hZnRlckNvcHlMYW1iZGFQYXJhbS5qYXZhCkBAIC0wLDAgKzEsMTcgQEAKKy8vICJDb3B5ICdvJyB0byB0ZW1wIGZpbmFsIHZhcmlhYmxlIiAidHJ1ZSIKK2NsYXNzIFRlc3QxIHsKKyAgICB2b2lkIGZvbygpe30KKyAgICB7CisgICAgICAgIENvbXBhcmFibGU8U3RyaW5nPiBhID0gby0+eworICAgICAgICAgICAgbyA9ICIiOworICAgICAgICAgICAgZmluYWwgU3RyaW5nIGZpbmFsTyA9IG87CisgICAgICAgICAgICBuZXcgUnVubmFibGUoKSB7CisgICAgICAgICAgICAgICAgQE92ZXJyaWRlCisgICAgICAgICAgICAgICAgcHVibGljIHZvaWQgcnVuKCkgeworICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oZmluYWxPKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9LnJ1bigpOworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH07CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvbXVzdEJlRmluYWwvYWZ0ZXJPbmVWYXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvbXVzdEJlRmluYWwvYWZ0ZXJPbmVWYXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NGU5NTljCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9tdXN0QmVGaW5hbC9hZnRlck9uZVZhci5qYXZhCkBAIC0wLDAgKzEsMTUgQEAKKy8vICJNYWtlICdpJyBmaW5hbCIgInRydWUiCitpbXBvcnQgamF2YS5pby4qOworCitjbGFzcyBhIHsKKyB2b2lkIGYoKSB7CisgICAgIGZpbmFsIGludCBpID0gMDsKKyAgICAgaW50IGogPSAwOworICAgICBuZXcgUnVubmFibGUoKSB7CisgICAgICAgcHVibGljIHZvaWQgcnVuKCkgeworICAgICAgICAgaW50IGlpID0gPGNhcmV0Pmk7CisgICAgICAgfQorICAgICB9OworIH0KK30KKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9tdXN0QmVGaW5hbC9iZWZvcmUxLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L211c3RCZUZpbmFsL2JlZm9yZTEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZDIzMjEwCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9tdXN0QmVGaW5hbC9iZWZvcmUxLmphdmEKQEAgLTAsMCArMSwxNCBAQAorLy8gIk1ha2UgJ2knIGZpbmFsIiAidHJ1ZSIKK2ltcG9ydCBqYXZhLmlvLio7CisKK2NsYXNzIGEgeworIHZvaWQgZigpIHsKKyAgICAgaW50IGkgPSAwOworICAgICBuZXcgUnVubmFibGUoKSB7CisgICAgICAgcHVibGljIHZvaWQgcnVuKCkgeworICAgICAgICAgaW50IGlpID0gPGNhcmV0Pmk7CisgICAgICAgfQorICAgICB9OworIH0KK30KKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9tdXN0QmVGaW5hbC9iZWZvcmUxMC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9tdXN0QmVGaW5hbC9iZWZvcmUxMC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIwY2NmZTEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L211c3RCZUZpbmFsL2JlZm9yZTEwLmphdmEKQEAgLTAsMCArMSwxNyBAQAorLy8gIkNvcHkgJ2EnIHRvIHRlbXAgZmluYWwgdmFyaWFibGUiICJ0cnVlIgorcHVibGljIGNsYXNzIERvdWJsZVRyb3VibGUgeworICAgIHB1YmxpYyB2b2lkIHRlc3QoKSB7CisgICAgICAgIGludCBhID0gMTsKKyAgICAgICAgYSA9IDI7CisgICAgICAgIGNsYXNzIHMgeworICAgICAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKKyAgICAgICAgICAgIG5ldyBSdW5uYWJsZSgpIHsKKyAgICAgICAgICAgICAgcHVibGljIHZvaWQgcnVuKCkgeworICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbig8Y2FyZXQ+YSk7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0ucnVuKCk7CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICB9CisKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvbXVzdEJlRmluYWwvYmVmb3JlMi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9tdXN0QmVGaW5hbC9iZWZvcmUyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTg2ZGQ4MgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvbXVzdEJlRmluYWwvYmVmb3JlMi5qYXZhCkBAIC0wLDAgKzEsMTUgQEAKKy8vICJDb3B5ICdpJyB0byB0ZW1wIGZpbmFsIHZhcmlhYmxlIiAidHJ1ZSIKK2ltcG9ydCBqYXZhLmlvLio7CisKK2NsYXNzIGEgeworIHZvaWQgZigpIHsKKyAgICAgaW50IGkgPSAwOworICAgICBuZXcgUnVubmFibGUoKSB7CisgICAgICAgcHVibGljIHZvaWQgcnVuKCkgeworICAgICAgICAgaW50IGlpID0gPGNhcmV0Pmk7CisgICAgICAgfQorICAgICB9OworICAgICBpKys7CisgfQorfQorCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L211c3RCZUZpbmFsL2JlZm9yZTMuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvbXVzdEJlRmluYWwvYmVmb3JlMy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcyOGU5ZDQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L211c3RCZUZpbmFsL2JlZm9yZTMuamF2YQpAQCAtMCwwICsxLDE0IEBACisvLyAiVHJhbnNmb3JtICdpJyBpbnRvIGZpbmFsIG9uZSBlbGVtZW50IGFycmF5IiAidHJ1ZSIKK2ltcG9ydCBqYXZhLmlvLio7CisKK2NsYXNzIGEgeworIHZvaWQgZigpIHsKKyAgICAgaW50IGkgPSAwOworICAgICBuZXcgUnVubmFibGUoKSB7CisgICAgICAgcHVibGljIHZvaWQgcnVuKCkgeworICAgICAgICAgIDxjYXJldD5pID0gMDsKKyAgICAgICB9CisgICAgIH07CisgfQorfQorCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L211c3RCZUZpbmFsL2JlZm9yZTQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvbXVzdEJlRmluYWwvYmVmb3JlNC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ5NmI2NDgKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L211c3RCZUZpbmFsL2JlZm9yZTQuamF2YQpAQCAtMCwwICsxLDEzIEBACisvLyAiVHJhbnNmb3JtICdpJyBpbnRvIGZpbmFsIG9uZSBlbGVtZW50IGFycmF5IiAiZmFsc2UiCitpbXBvcnQgamF2YS5pby4qOworCitjbGFzcyBhYSB7Cisgdm9pZCBmKGludCBpKSB7CisgICAgIG5ldyBSdW5uYWJsZSgpIHsKKyAgICAgICBwdWJsaWMgdm9pZCBydW4oKSB7CisgICAgICAgICA8Y2FyZXQ+aSA9IDk7CisgICAgICAgfQorICAgICB9OworIH0KK30KKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9tdXN0QmVGaW5hbC9iZWZvcmU1LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L211c3RCZUZpbmFsL2JlZm9yZTUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NWU2MzAxCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9tdXN0QmVGaW5hbC9iZWZvcmU1LmphdmEKQEAgLTAsMCArMSwxOSBAQAorLy8gIlRyYW5zZm9ybSAnaScgaW50byBmaW5hbCBvbmUgZWxlbWVudCBhcnJheSIgInRydWUiCitpbXBvcnQgamF2YS5pby4qOworCitjbGFzcyBhYSB7Cisgdm9pZCBmKCkgeworICAgICBpbnQgaT05OworICAgICBuZXcgUnVubmFibGUoKSB7CisgICAgICAgcHVibGljIHZvaWQgcnVuKCkgeworICAgICAgICAgaW50IHAgPSA8Y2FyZXQ+aTsKKyAgICAgICB9CisgICAgIH07CisgICAgIG5ldyBSdW5uYWJsZSgpIHsKKyAgICAgICBwdWJsaWMgdm9pZCBydW4oKSB7CisgICAgICAgICBpID0gMDsKKyAgICAgICB9CisgICAgIH07CisgfQorfQorCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L211c3RCZUZpbmFsL2JlZm9yZTYuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvbXVzdEJlRmluYWwvYmVmb3JlNi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZjN2E4NjYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L211c3RCZUZpbmFsL2JlZm9yZTYuamF2YQpAQCAtMCwwICsxLDI0IEBACisvLyAiVHJhbnNmb3JtICdpJyBpbnRvIGZpbmFsIG9uZSBlbGVtZW50IGFycmF5IiAidHJ1ZSIKK2ltcG9ydCBqYXZhLmlvLio7CisKK2NsYXNzIGFhIHsKKyB2b2lkIGYoKSB7CisgICAgIGludCBpID0gNDsKKyAgICAgUnVubmFibGUgcnVubmFibGUgPSBuZXcgUnVubmFibGUoKSB7CisgICAgICAgICBwdWJsaWMgdm9pZCBydW4oKSB7CisgICAgICAgICAgICAgbmV3IFJ1bm5hYmxlKCkgeworICAgICAgICAgICAgICAgICBwdWJsaWMgdm9pZCBydW4oKSB7CisgICAgICAgICAgICAgICAgICAgICBpbnQgbz1pOworICAgICAgICAgICAgICAgICAgICAgaT1vOworICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgICBuZXcgUnVubmFibGUoKSB7CisgICAgICAgICAgICAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKKyAgICAgICAgICAgICAgICAgICAgIGludCBvPTxjYXJldD5pOworICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgfTsKKyAgICAgICAgIH0KKyAgICAgfTsKKyB9Cit9CisKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvbXVzdEJlRmluYWwvYmVmb3JlNy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9tdXN0QmVGaW5hbC9iZWZvcmU3LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWU2YTE0OAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvbXVzdEJlRmluYWwvYmVmb3JlNy5qYXZhCkBAIC0wLDAgKzEsMTUgQEAKKy8vICJUcmFuc2Zvcm0gJ2knIGludG8gZmluYWwgb25lIGVsZW1lbnQgYXJyYXkiICJ0cnVlIgoraW1wb3J0IGphdmEuaW8uKjsKKworY2xhc3MgYWEgeworIHZvaWQgZigpIHsKKyAgICAgaW50IGk7CisgICAgIFJ1bm5hYmxlIHJ1bm5hYmxlID0gbmV3IFJ1bm5hYmxlKCkgeworICAgICAgICAgcHVibGljIHZvaWQgcnVuKCkgeworICAgICAgICAgICAgIDxjYXJldD5pID0gNTsKKyAgICAgICAgIH0KKyAgICAgfTsKKyAgICBpbnQgZiA9IGk7CisgfQorfQorCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L211c3RCZUZpbmFsL2JlZm9yZTguamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvbXVzdEJlRmluYWwvYmVmb3JlOC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY3NmYyNDMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L211c3RCZUZpbmFsL2JlZm9yZTguamF2YQpAQCAtMCwwICsxLDE1IEBACisvLyAiVHJhbnNmb3JtICdpJyBpbnRvIGZpbmFsIG9uZSBlbGVtZW50IGFycmF5IiAidHJ1ZSIKK2ltcG9ydCBqYXZhLmlvLio7CisKK2NsYXNzIGFhIHsKKyB2b2lkIGYoKSB7CisgICAgIGZpbmFsIGludCBpOworICAgICBSdW5uYWJsZSBydW5uYWJsZSA9IG5ldyBSdW5uYWJsZSgpIHsKKyAgICAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKKyAgICAgICAgICAgICA8Y2FyZXQ+aSA9IDU7CisgICAgICAgICB9CisgICAgIH07CisgICAgaW50IGYgPSBpOworIH0KK30KKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9tdXN0QmVGaW5hbC9iZWZvcmU5LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L211c3RCZUZpbmFsL2JlZm9yZTkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOTJjZGZjCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9tdXN0QmVGaW5hbC9iZWZvcmU5LmphdmEKQEAgLTAsMCArMSwxNSBAQAorLy8gIkNvcHkgJ2knIHRvIHRlbXAgZmluYWwgdmFyaWFibGUiICJmYWxzZSIKK2ludGVyZmFjZSBJIHsKKyAgICBpbnQgZigpOworfQorCitjbGFzcyBDIHsKKyAgICB2b2lkIGZvbygpIHsKKyAgICAgICAgaW50IGkgPSBuZXcgSSgpIHsKKyAgICAgICAgICAgIHB1YmxpYyBpbnQgZigpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gPGNhcmV0Pmk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgfS5mKCk7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9tdXN0QmVGaW5hbC9iZWZvcmVBbGxWYXJzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L211c3RCZUZpbmFsL2JlZm9yZUFsbFZhcnMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MDBhZWI0Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9tdXN0QmVGaW5hbC9iZWZvcmVBbGxWYXJzLmphdmEKQEAgLTAsMCArMSwxNSBAQAorLy8gIk1ha2UgdmFyaWFibGVzIGZpbmFsIiAidHJ1ZSIKK2ltcG9ydCBqYXZhLmlvLio7CisKK2NsYXNzIGEgeworIHZvaWQgZigpIHsKKyAgICAgaW50IGkgPSAwOworICAgICBpbnQgaiA9IDA7CisgICAgIG5ldyBSdW5uYWJsZSgpIHsKKyAgICAgICBwdWJsaWMgdm9pZCBydW4oKSB7CisgICAgICAgICBpbnQgaWkgPSA8Y2FyZXQ+aSArIGo7CisgICAgICAgfQorICAgICB9OworIH0KK30KKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9tdXN0QmVGaW5hbC9iZWZvcmVDb3B5TGFtYmRhUGFyYW0uamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvbXVzdEJlRmluYWwvYmVmb3JlQ29weUxhbWJkYVBhcmFtLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTQxZDZmOQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvbXVzdEJlRmluYWwvYmVmb3JlQ29weUxhbWJkYVBhcmFtLmphdmEKQEAgLTAsMCArMSwxNiBAQAorLy8gIkNvcHkgJ28nIHRvIHRlbXAgZmluYWwgdmFyaWFibGUiICJ0cnVlIgorY2xhc3MgVGVzdDEgeworICAgIHZvaWQgZm9vKCl7fQorICAgIHsKKyAgICAgICAgQ29tcGFyYWJsZTxTdHJpbmc+IGEgPSBvLT57CisgICAgICAgICAgICBvID0gIiI7CisgICAgICAgICAgICBuZXcgUnVubmFibGUoKSB7CisgICAgICAgICAgICAgICAgQE92ZXJyaWRlCisgICAgICAgICAgICAgICAgcHVibGljIHZvaWQgcnVuKCkgeworICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oPGNhcmV0Pm8pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0ucnVuKCk7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9tdXN0QmVGaW5hbC9iZWZvcmVPbmVWYXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvbXVzdEJlRmluYWwvYmVmb3JlT25lVmFyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODUzY2ZmYgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvbXVzdEJlRmluYWwvYmVmb3JlT25lVmFyLmphdmEKQEAgLTAsMCArMSwxNSBAQAorLy8gIk1ha2UgJ2knIGZpbmFsIiAidHJ1ZSIKK2ltcG9ydCBqYXZhLmlvLio7CisKK2NsYXNzIGEgeworIHZvaWQgZigpIHsKKyAgICAgaW50IGkgPSAwOworICAgICBpbnQgaiA9IDA7CisgICAgIG5ldyBSdW5uYWJsZSgpIHsKKyAgICAgICBwdWJsaWMgdm9pZCBydW4oKSB7CisgICAgICAgICBpbnQgaWkgPSA8Y2FyZXQ+aTsKKyAgICAgICB9CisgICAgIH07CisgfQorfQorCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L211c3RCZUZpbmFsMTgvYmVmb3JlMS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9tdXN0QmVGaW5hbDE4L2JlZm9yZTEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYjRlNzgwCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9tdXN0QmVGaW5hbDE4L2JlZm9yZTEuamF2YQpAQCAtMCwwICsxLDE0IEBACisvLyAiTWFrZSAnaScgZmluYWwiICJmYWxzZSIKK2ltcG9ydCBqYXZhLmlvLio7CisKK2NsYXNzIGEgeworIHZvaWQgZigpIHsKKyAgICAgaW50IGkgPSAwOworICAgICBuZXcgUnVubmFibGUoKSB7CisgICAgICAgcHVibGljIHZvaWQgcnVuKCkgeworICAgICAgICAgaW50IGlpID0gPGNhcmV0Pmk7CisgICAgICAgfQorICAgICB9OworIH0KK30KKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9uZWdhdGlvbkJyb2FkU2NvcGUvYWZ0ZXIxLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L25lZ2F0aW9uQnJvYWRTY29wZS9hZnRlcjEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YjYxOGExCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9uZWdhdGlvbkJyb2FkU2NvcGUvYWZ0ZXIxLmphdmEKQEAgLTAsMCArMSw2IEBACisvLyAiQ2hhbmdlIHRvICchKDEgPT0gMSknIiAidHJ1ZSIKK3B1YmxpYyBjbGFzcyBGb28geworICAgIHZvaWQgdGFzaygpIHsKKyAgICAgICAgaWYgKDxjYXJldD4hKDEgPT0gICAxKSkge30KKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L25lZ2F0aW9uQnJvYWRTY29wZS9hZnRlcjIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvbmVnYXRpb25Ccm9hZFNjb3BlL2FmdGVyMi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUxODUzNjAKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L25lZ2F0aW9uQnJvYWRTY29wZS9hZnRlcjIuamF2YQpAQCAtMCwwICsxLDYgQEAKKy8vICJDaGFuZ2UgdG8gJyEodGhpcyBpbnN0YW5jZW9mIE9iamVjdCknIiAidHJ1ZSIKK3B1YmxpYyBjbGFzcyBGb28geworICAgIHZvaWQgdGFzaygpIHsKKyAgICAgICAgaWYgKDxjYXJldD4hKHRoaXMgaW5zdGFuY2VvZiBPYmplY3QpKSB7fQorICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvbmVnYXRpb25Ccm9hZFNjb3BlL2JlZm9yZTEuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvbmVnYXRpb25Ccm9hZFNjb3BlL2JlZm9yZTEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZDJkNzAwCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9uZWdhdGlvbkJyb2FkU2NvcGUvYmVmb3JlMS5qYXZhCkBAIC0wLDAgKzEsNiBAQAorLy8gIkNoYW5nZSB0byAnISgxID09IDEpJyIgInRydWUiCitwdWJsaWMgY2xhc3MgRm9vIHsKKyAgICB2b2lkIHRhc2soKSB7CisgICAgICAgIGlmICghPGNhcmV0PjEgPT0gICAxKSB7fQorICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvbmVnYXRpb25Ccm9hZFNjb3BlL2JlZm9yZTIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvbmVnYXRpb25Ccm9hZFNjb3BlL2JlZm9yZTIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OTlmNjc1Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9uZWdhdGlvbkJyb2FkU2NvcGUvYmVmb3JlMi5qYXZhCkBAIC0wLDAgKzEsNiBAQAorLy8gIkNoYW5nZSB0byAnISh0aGlzIGluc3RhbmNlb2YgT2JqZWN0KSciICJ0cnVlIgorcHVibGljIGNsYXNzIEZvbyB7CisgICAgdm9pZCB0YXNrKCkgeworICAgICAgICBpZiAoPGNhcmV0PiF0aGlzIGluc3RhbmNlb2YgT2JqZWN0KSB7fQorICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvb3JkZXJFbnRyeS9BL0EuaW1sIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9vcmRlckVudHJ5L0EvQS5pbWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWJiNGQwZQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvb3JkZXJFbnRyeS9BL0EuaW1sCkBAIC0wLDAgKzEsMTUgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8bW9kdWxlIHZlcnNpb249IjQiIHJlbGF0aXZlUGF0aHM9InRydWUiIHR5cGU9IkpBVkFfTU9EVUxFIj4KKyAgPGNvbXBvbmVudCBuYW1lPSJNb2R1bGVSb290TWFuYWdlciIgLz4KKyAgPGNvbXBvbmVudCBuYW1lPSJOZXdNb2R1bGVSb290TWFuYWdlciIgaW5oZXJpdC1jb21waWxlci1vdXRwdXQ9InRydWUiPgorICAgIDxleGNsdWRlLW91dHB1dCAvPgorICAgIDxjb250ZW50IHVybD0iZmlsZTovLyRNT0RVTEVfRElSJCI+CisgICAgICA8c291cmNlRm9sZGVyIHVybD0iZmlsZTovLyRNT0RVTEVfRElSJC9zcmMiIGlzVGVzdFNvdXJjZT0iZmFsc2UiIC8+CisgICAgPC9jb250ZW50PgorICAgIDxvcmRlckVudHJ5IHR5cGU9ImluaGVyaXRlZEpkayIgLz4KKyAgICA8b3JkZXJFbnRyeSB0eXBlPSJzb3VyY2VGb2xkZXIiIGZvclRlc3RzPSJmYWxzZSIgLz4KKyAgICA8b3JkZXJFbnRyeSB0eXBlPSJsaWJyYXJ5IiBuYW1lPSJMaWIiIGxldmVsPSJwcm9qZWN0IiAvPgorICAgIDxvcmRlckVudHJ5UHJvcGVydGllcyAvPgorICA8L2NvbXBvbmVudD4KKzwvbW9kdWxlPgorCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L29yZGVyRW50cnkvQS9zcmMveC9Eb1Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvb3JkZXJFbnRyeS9BL3NyYy94L0RvVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI0MjFhMzUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L29yZGVyRW50cnkvQS9zcmMveC9Eb1Rlc3QuamF2YQpAQCAtMCwwICsxLDUgQEAKKy8vICJBZGQgJ2p1bml0LmphcicgdG8gY2xhc3NwYXRoIiAidHJ1ZSIKK3BhY2thZ2UgeDsKK3B1YmxpYyBjbGFzcyBEb1Rlc3QgZXh0ZW5kcyBUZXN0Q2FzZTxjYXJldD57CisKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L29yZGVyRW50cnkvQS9zcmMveC9Eb1Rlc3Q0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L29yZGVyRW50cnkvQS9zcmMveC9Eb1Rlc3Q0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTg1NmIyZAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvb3JkZXJFbnRyeS9BL3NyYy94L0RvVGVzdDQuamF2YQpAQCAtMCwwICsxLDkgQEAKKy8vICJBZGQgJ2p1bml0LmphcicgdG8gY2xhc3NwYXRoIiAidHJ1ZSIKK3BhY2thZ2UgeDsKKworcHVibGljIGNsYXNzIERvVGVzdDQgeworIEBUZXN0PGNhcmV0PgorIHZvaWQgZigpIHsKKworIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L29yZGVyRW50cnkvQS9zcmMveC9Eb1Rlc3Q0anVuaXQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvb3JkZXJFbnRyeS9BL3NyYy94L0RvVGVzdDRqdW5pdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhhNzc2YTYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L29yZGVyRW50cnkvQS9zcmMveC9Eb1Rlc3Q0anVuaXQuamF2YQpAQCAtMCwwICsxLDkgQEAKKy8vICJBZGQgJ2p1bml0LmphcicgdG8gY2xhc3NwYXRoIiAidHJ1ZSIKK3BhY2thZ2UgeDsKKworcHVibGljIGNsYXNzIERvVGVzdDRqdW5pdCB7CisgQG9yZy5qdTxjYXJldD5uaXQuVGVzdAorIHZvaWQgZigpIHsKKworIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L29yZGVyRW50cnkvQS9zcmMveC9JbkEuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvb3JkZXJFbnRyeS9BL3NyYy94L0luQS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFmNDY1MWQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L29yZGVyRW50cnkvQS9zcmMveC9JbkEuamF2YQpAQCAtMCwwICsxLDExIEBACitwYWNrYWdlIHg7CisKKy8qKgorICogQ3JlYXRlZCBieSBJbnRlbGxpSiBJREVBLgorICogVXNlcjogY2RyCisgKiBEYXRlOiBBdWcgMjIsIDIwMDYKKyAqIFRpbWU6IDExOjA5OjA0IEFNCisgKiBUbyBjaGFuZ2UgdGhpcyB0ZW1wbGF0ZSB1c2UgRmlsZSB8IFNldHRpbmdzIHwgRmlsZSBUZW1wbGF0ZXMuCisgKi8KK3B1YmxpYyBjbGFzcyBJbkEgeworfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9vcmRlckVudHJ5L0IvQi5pbWwgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L29yZGVyRW50cnkvQi9CLmltbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNDE2YWE0Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9vcmRlckVudHJ5L0IvQi5pbWwKQEAgLTAsMCArMSwxNSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxtb2R1bGUgdmVyc2lvbj0iNCIgcmVsYXRpdmVQYXRocz0idHJ1ZSIgdHlwZT0iSkFWQV9NT0RVTEUiPgorICA8Y29tcG9uZW50IG5hbWU9Ik1vZHVsZVJvb3RNYW5hZ2VyIiAvPgorICA8Y29tcG9uZW50IG5hbWU9Ik5ld01vZHVsZVJvb3RNYW5hZ2VyIiBpbmhlcml0LWNvbXBpbGVyLW91dHB1dD0idHJ1ZSI+CisgICAgPGV4Y2x1ZGUtb3V0cHV0IC8+CisgICAgPGNvbnRlbnQgdXJsPSJmaWxlOi8vJE1PRFVMRV9ESVIkIj4KKyAgICAgIDxzb3VyY2VGb2xkZXIgdXJsPSJmaWxlOi8vJE1PRFVMRV9ESVIkL3NyYyIgaXNUZXN0U291cmNlPSJmYWxzZSIgLz4KKyAgICA8L2NvbnRlbnQ+CisgICAgPG9yZGVyRW50cnkgdHlwZT0iaW5oZXJpdGVkSmRrIiAvPgorICAgIDxvcmRlckVudHJ5IHR5cGU9InNvdXJjZUZvbGRlciIgZm9yVGVzdHM9ImZhbHNlIiAvPgorICAgIDxvcmRlckVudHJ5IHR5cGU9ImxpYnJhcnkiIG5hbWU9Ik1vY2tKdW5pdCIgbGV2ZWw9InByb2plY3QiIC8+CisgICAgPG9yZGVyRW50cnlQcm9wZXJ0aWVzIC8+CisgIDwvY29tcG9uZW50PgorPC9tb2R1bGU+CisKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvb3JkZXJFbnRyeS9CL3NyYy95L0FkZERlcGVuZGVuY3kuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvb3JkZXJFbnRyeS9CL3NyYy95L0FkZERlcGVuZGVuY3kuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZTA4ZmE5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9vcmRlckVudHJ5L0Ivc3JjL3kvQWRkRGVwZW5kZW5jeS5qYXZhCkBAIC0wLDAgKzEsMTMgQEAKKy8vICJBZGQgZGVwZW5kZW5jeSBvbiBtb2R1bGUgJ0EnIiAidHJ1ZSIKK3BhY2thZ2UgeTsKKworLyoqCisgKiBDcmVhdGVkIGJ5IEludGVsbGlKIElERUEuCisgKiBVc2VyOiBjZHIKKyAqIERhdGU6IEF1ZyAyMiwgMjAwNgorICogVGltZTogMTE6MDk6MjUgQU0KKyAqIFRvIGNoYW5nZSB0aGlzIHRlbXBsYXRlIHVzZSBGaWxlIHwgU2V0dGluZ3MgfCBGaWxlIFRlbXBsYXRlcy4KKyAqLworcHVibGljIGNsYXNzIEFkZERlcGVuZGVuY3kgeworICAgIEluQTxjYXJldD4gYTsKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvb3JkZXJFbnRyeS9CL3NyYy95L0FkZEV4aXN0aW5nSnVuaXQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvb3JkZXJFbnRyeS9CL3NyYy95L0FkZEV4aXN0aW5nSnVuaXQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OTk4ZDZiCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9vcmRlckVudHJ5L0Ivc3JjL3kvQWRkRXhpc3RpbmdKdW5pdC5qYXZhCkBAIC0wLDAgKzEsNSBAQAorLy8gIkFkZCAnanVuaXQuamFyJyB0byBjbGFzc3BhdGgiICJmYWxzZSIKK3BhY2thZ2UgeTsKKworcHVibGljIGNsYXNzIEFkZEV4aXN0aW5nSnVuaXQgZXh0ZW5kcyA8Y2FyZXQ+VGVzdENhc2UgeworfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9vcmRlckVudHJ5L0Ivc3JjL3kvQWRkTGlicmFyeS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9vcmRlckVudHJ5L0Ivc3JjL3kvQWRkTGlicmFyeS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM4ZWFjZGYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L29yZGVyRW50cnkvQi9zcmMveS9BZGRMaWJyYXJ5LmphdmEKQEAgLTAsMCArMSwxMyBAQAorLy8gIkFkZCBsaWJyYXJ5ICdMaWInIHRvIGNsYXNzcGF0aCIgInRydWUiCitwYWNrYWdlIHk7CisKKy8qKgorICogQ3JlYXRlZCBieSBJbnRlbGxpSiBJREVBLgorICogVXNlcjogY2RyCisgKiBEYXRlOiBBdWcgMjIsIDIwMDYKKyAqIFRpbWU6IDExOjEzOjAwIEFNCisgKiBUbyBjaGFuZ2UgdGhpcyB0ZW1wbGF0ZSB1c2UgRmlsZSB8IFNldHRpbmdzIHwgRmlsZSBUZW1wbGF0ZXMuCisgKi8KK3B1YmxpYyBjbGFzcyBBZGRMaWJyYXJ5IHsKKyAgICBJbkxpYjxjYXJldD4gbDsKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvb3JkZXJFbnRyeS9saWIvbGliLmltbCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvb3JkZXJFbnRyeS9saWIvbGliLmltbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YzNhMGE2Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9vcmRlckVudHJ5L2xpYi9saWIuaW1sCkBAIC0wLDAgKzEsMTQgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8bW9kdWxlIHZlcnNpb249IjQiIHJlbGF0aXZlUGF0aHM9InRydWUiIHR5cGU9IkpBVkFfTU9EVUxFIj4KKyAgPGNvbXBvbmVudCBuYW1lPSJNb2R1bGVSb290TWFuYWdlciIgLz4KKyAgPGNvbXBvbmVudCBuYW1lPSJOZXdNb2R1bGVSb290TWFuYWdlciIgaW5oZXJpdC1jb21waWxlci1vdXRwdXQ9InRydWUiPgorICAgIDxleGNsdWRlLW91dHB1dCAvPgorICAgIDxjb250ZW50IHVybD0iZmlsZTovLyRNT0RVTEVfRElSJCI+CisgICAgICA8c291cmNlRm9sZGVyIHVybD0iZmlsZTovLyRNT0RVTEVfRElSJC9zcmMiIGlzVGVzdFNvdXJjZT0iZmFsc2UiIC8+CisgICAgPC9jb250ZW50PgorICAgIDxvcmRlckVudHJ5IHR5cGU9ImluaGVyaXRlZEpkayIgLz4KKyAgICA8b3JkZXJFbnRyeSB0eXBlPSJzb3VyY2VGb2xkZXIiIGZvclRlc3RzPSJmYWxzZSIgLz4KKyAgICA8b3JkZXJFbnRyeVByb3BlcnRpZXMgLz4KKyAgPC9jb21wb25lbnQ+Cis8L21vZHVsZT4KKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9vcmRlckVudHJ5L2xpYi9saWIuamFyIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9vcmRlckVudHJ5L2xpYi9saWIuamFyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjViN2NhOTkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L29yZGVyRW50cnkvbGliL2xpYi5qYXIKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9vcmRlckVudHJ5L2xpYi9tb2NranVuaXQuamFyIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9vcmRlckVudHJ5L2xpYi9tb2NranVuaXQuamFyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg4YjhjZWMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L29yZGVyRW50cnkvbGliL21vY2tqdW5pdC5qYXIKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9vcmRlckVudHJ5L2xpYi9zcmMvbC9JbkxpYi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9vcmRlckVudHJ5L2xpYi9zcmMvbC9JbkxpYi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMzYmU0ZTAKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L29yZGVyRW50cnkvbGliL3NyYy9sL0luTGliLmphdmEKQEAgLTAsMCArMSwxMSBAQAorcGFja2FnZSBsOworCisvKioKKyAqIENyZWF0ZWQgYnkgSW50ZWxsaUogSURFQS4KKyAqIFVzZXI6IGNkcgorICogRGF0ZTogQXVnIDIyLCAyMDA2CisgKiBUaW1lOiAxMToxMDozNSBBTQorICogVG8gY2hhbmdlIHRoaXMgdGVtcGxhdGUgdXNlIEZpbGUgfCBTZXR0aW5ncyB8IEZpbGUgVGVtcGxhdGVzLgorICovCitwdWJsaWMgY2xhc3MgSW5MaWIgeworfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9vcmRlckVudHJ5L29yZGVyRW50cnkuaXByIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9vcmRlckVudHJ5L29yZGVyRW50cnkuaXByCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQwZDk0NDYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L29yZGVyRW50cnkvb3JkZXJFbnRyeS5pcHIKQEAgLTAsMCArMSwyNzggQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8cHJvamVjdCB2ZXJzaW9uPSI0IiByZWxhdGl2ZVBhdGhzPSJmYWxzZSI+CisgIDxjb21wb25lbnQgbmFtZT0iQW50Q29uZmlndXJhdGlvbiI+CisgICAgPGRlZmF1bHRBbnQgYnVuZGxlZEFudD0idHJ1ZSIgLz4KKyAgPC9jb21wb25lbnQ+CisgIDxjb21wb25lbnQgbmFtZT0iQnVpbGRKYXJQcm9qZWN0U2V0dGluZ3MiPgorICAgIDxvcHRpb24gbmFtZT0iQlVJTERfSkFSU19PTl9NQUtFIiB2YWx1ZT0iZmFsc2UiIC8+CisgIDwvY29tcG9uZW50PgorICA8Y29tcG9uZW50IG5hbWU9IkNvZGVTdHlsZVByb2plY3RQcm9maWxlTWFuZ2VyIj4KKyAgICA8b3B0aW9uIG5hbWU9IlBST0pFQ1RfUFJPRklMRSIgLz4KKyAgICA8b3B0aW9uIG5hbWU9IlVTRV9QUk9KRUNUX0xFVkVMX1NFVFRJTkdTIiB2YWx1ZT0iZmFsc2UiIC8+CisgICAgPHNjb3BlcyAvPgorICAgIDxwcm9maWxlcyAvPgorICA8L2NvbXBvbmVudD4KKyAgPGNvbXBvbmVudCBuYW1lPSJDb2RlU3R5bGVTZXR0aW5nc01hbmFnZXIiPgorICAgIDxvcHRpb24gbmFtZT0iUEVSX1BST0pFQ1RfU0VUVElOR1MiIC8+CisgICAgPG9wdGlvbiBuYW1lPSJVU0VfUEVSX1BST0pFQ1RfU0VUVElOR1MiIHZhbHVlPSJmYWxzZSIgLz4KKyAgPC9jb21wb25lbnQ+CisgIDxjb21wb25lbnQgbmFtZT0iQ29tcGlsZXJDb25maWd1cmF0aW9uIj4KKyAgICA8b3B0aW9uIG5hbWU9IkRFRkFVTFRfQ09NUElMRVIiIHZhbHVlPSJKYXZhYyIgLz4KKyAgICA8b3B0aW9uIG5hbWU9IkRFUExPWV9BRlRFUl9NQUtFIiB2YWx1ZT0iMCIgLz4KKyAgICA8cmVzb3VyY2VFeHRlbnNpb25zPgorICAgICAgPGVudHJ5IG5hbWU9Ii4rXC4ocHJvcGVydGllc3x4bWx8aHRtbHxkdGR8dGxkKSIgLz4KKyAgICAgIDxlbnRyeSBuYW1lPSIuK1wuKGdpZnxwbmd8anBlZ3xqcGcpIiAvPgorICAgIDwvcmVzb3VyY2VFeHRlbnNpb25zPgorICAgIDx3aWxkY2FyZFJlc291cmNlUGF0dGVybnM+CisgICAgICA8ZW50cnkgbmFtZT0iPyoucHJvcGVydGllcyIgLz4KKyAgICAgIDxlbnRyeSBuYW1lPSI/Ki54bWwiIC8+CisgICAgICA8ZW50cnkgbmFtZT0iPyouZ2lmIiAvPgorICAgICAgPGVudHJ5IG5hbWU9Ij8qLnBuZyIgLz4KKyAgICAgIDxlbnRyeSBuYW1lPSI/Ki5qcGVnIiAvPgorICAgICAgPGVudHJ5IG5hbWU9Ij8qLmpwZyIgLz4KKyAgICAgIDxlbnRyeSBuYW1lPSI/Ki5odG1sIiAvPgorICAgICAgPGVudHJ5IG5hbWU9Ij8qLmR0ZCIgLz4KKyAgICAgIDxlbnRyeSBuYW1lPSI/Ki50bGQiIC8+CisgICAgPC93aWxkY2FyZFJlc291cmNlUGF0dGVybnM+CisgIDwvY29tcG9uZW50PgorICA8Y29tcG9uZW50IG5hbWU9IkRhdGFTb3VyY2VNYW5hZ2VySW1wbCIgLz4KKyAgPGNvbXBvbmVudCBuYW1lPSJEZXBlbmRlbmNpZXNBbmFseXplTWFuYWdlciI+CisgICAgPG9wdGlvbiBuYW1lPSJteUZvcndhcmREaXJlY3Rpb24iIHZhbHVlPSJmYWxzZSIgLz4KKyAgPC9jb21wb25lbnQ+CisgIDxjb21wb25lbnQgbmFtZT0iRGVwZW5kZW5jeVZhbGlkYXRpb25NYW5hZ2VyIiAvPgorICA8Y29tcG9uZW50IG5hbWU9IkVjbGlwc2VDb21waWxlclNldHRpbmdzIj4KKyAgICA8b3B0aW9uIG5hbWU9IkRFQlVHR0lOR19JTkZPIiB2YWx1ZT0idHJ1ZSIgLz4KKyAgICA8b3B0aW9uIG5hbWU9IkdFTkVSQVRFX05PX1dBUk5JTkdTIiB2YWx1ZT0idHJ1ZSIgLz4KKyAgICA8b3B0aW9uIG5hbWU9IkRFUFJFQ0FUSU9OIiB2YWx1ZT0iZmFsc2UiIC8+CisgICAgPG9wdGlvbiBuYW1lPSJBRERJVElPTkFMX09QVElPTlNfU1RSSU5HIiB2YWx1ZT0iIiAvPgorICAgIDxvcHRpb24gbmFtZT0iTUFYSU1VTV9IRUFQX1NJWkUiIHZhbHVlPSIxMjgiIC8+CisgIDwvY29tcG9uZW50PgorICA8Y29tcG9uZW50IG5hbWU9IkVjbGlwc2VFbWJlZGRlZENvbXBpbGVyU2V0dGluZ3MiPgorICAgIDxvcHRpb24gbmFtZT0iREVCVUdHSU5HX0lORk8iIHZhbHVlPSJ0cnVlIiAvPgorICAgIDxvcHRpb24gbmFtZT0iR0VORVJBVEVfTk9fV0FSTklOR1MiIHZhbHVlPSJ0cnVlIiAvPgorICAgIDxvcHRpb24gbmFtZT0iREVQUkVDQVRJT04iIHZhbHVlPSJmYWxzZSIgLz4KKyAgICA8b3B0aW9uIG5hbWU9IkFERElUSU9OQUxfT1BUSU9OU19TVFJJTkciIHZhbHVlPSIiIC8+CisgICAgPG9wdGlvbiBuYW1lPSJNQVhJTVVNX0hFQVBfU0laRSIgdmFsdWU9IjEyOCIgLz4KKyAgPC9jb21wb25lbnQ+CisgIDxjb21wb25lbnQgbmFtZT0iRW50cnlQb2ludHNNYW5hZ2VyIj4KKyAgICA8ZW50cnlfcG9pbnRzIC8+CisgIDwvY29tcG9uZW50PgorICA8Y29tcG9uZW50IG5hbWU9IkV4cG9ydFRvSFRNTFNldHRpbmdzIj4KKyAgICA8b3B0aW9uIG5hbWU9IlBSSU5UX0xJTkVfTlVNQkVSUyIgdmFsdWU9ImZhbHNlIiAvPgorICAgIDxvcHRpb24gbmFtZT0iT1BFTl9JTl9CUk9XU0VSIiB2YWx1ZT0iZmFsc2UiIC8+CisgICAgPG9wdGlvbiBuYW1lPSJPVVRQVVRfRElSRUNUT1JZIiAvPgorICA8L2NvbXBvbmVudD4KKyAgPGNvbXBvbmVudCBuYW1lPSJHVUkgRGVzaWduZXIgY29tcG9uZW50IGxvYWRlciBmYWN0b3J5IiAvPgorICA8Y29tcG9uZW50IG5hbWU9Ikluc3BlY3Rpb25Qcm9qZWN0UHJvZmlsZU1hbmFnZXIiPgorICAgIDxvcHRpb24gbmFtZT0iUFJPSkVDVF9QUk9GSUxFIiB2YWx1ZT0iUHJvamVjdCBEZWZhdWx0IiAvPgorICAgIDxvcHRpb24gbmFtZT0iVVNFX1BST0pFQ1RfTEVWRUxfU0VUVElOR1MiIHZhbHVlPSJmYWxzZSIgLz4KKyAgICA8c2NvcGVzIC8+CisgICAgPHByb2ZpbGVzPgorICAgICAgPHByb2ZpbGUgdmVyc2lvbj0iMS4wIiBpc19sb2NrZWQ9ImZhbHNlIj4KKyAgICAgICAgPG9wdGlvbiBuYW1lPSJteU5hbWUiIHZhbHVlPSJQcm9qZWN0IERlZmF1bHQiIC8+CisgICAgICAgIDxvcHRpb24gbmFtZT0ibXlMb2NhbCIgdmFsdWU9ImZhbHNlIiAvPgorICAgICAgPC9wcm9maWxlPgorICAgIDwvcHJvZmlsZXM+CisgIDwvY29tcG9uZW50PgorICA8Y29tcG9uZW50IG5hbWU9IkphdmFjU2V0dGluZ3MiPgorICAgIDxvcHRpb24gbmFtZT0iREVCVUdHSU5HX0lORk8iIHZhbHVlPSJ0cnVlIiAvPgorICAgIDxvcHRpb24gbmFtZT0iR0VORVJBVEVfTk9fV0FSTklOR1MiIHZhbHVlPSJmYWxzZSIgLz4KKyAgICA8b3B0aW9uIG5hbWU9IkRFUFJFQ0FUSU9OIiB2YWx1ZT0idHJ1ZSIgLz4KKyAgICA8b3B0aW9uIG5hbWU9IkFERElUSU9OQUxfT1BUSU9OU19TVFJJTkciIHZhbHVlPSIiIC8+CisgICAgPG9wdGlvbiBuYW1lPSJNQVhJTVVNX0hFQVBfU0laRSIgdmFsdWU9IjEyOCIgLz4KKyAgPC9jb21wb25lbnQ+CisgIDxjb21wb25lbnQgbmFtZT0iSmF2YWRvY0dlbmVyYXRpb25NYW5hZ2VyIj4KKyAgICA8b3B0aW9uIG5hbWU9Ik9VVFBVVF9ESVJFQ1RPUlkiIC8+CisgICAgPG9wdGlvbiBuYW1lPSJPUFRJT05fU0NPUEUiIHZhbHVlPSJwcm90ZWN0ZWQiIC8+CisgICAgPG9wdGlvbiBuYW1lPSJPUFRJT05fSElFUkFSQ0hZIiB2YWx1ZT0idHJ1ZSIgLz4KKyAgICA8b3B0aW9uIG5hbWU9Ik9QVElPTl9OQVZJR0FUT1IiIHZhbHVlPSJ0cnVlIiAvPgorICAgIDxvcHRpb24gbmFtZT0iT1BUSU9OX0lOREVYIiB2YWx1ZT0idHJ1ZSIgLz4KKyAgICA8b3B0aW9uIG5hbWU9Ik9QVElPTl9TRVBBUkFURV9JTkRFWCIgdmFsdWU9InRydWUiIC8+CisgICAgPG9wdGlvbiBuYW1lPSJPUFRJT05fRE9DVU1FTlRfVEFHX1VTRSIgdmFsdWU9ImZhbHNlIiAvPgorICAgIDxvcHRpb24gbmFtZT0iT1BUSU9OX0RPQ1VNRU5UX1RBR19BVVRIT1IiIHZhbHVlPSJmYWxzZSIgLz4KKyAgICA8b3B0aW9uIG5hbWU9Ik9QVElPTl9ET0NVTUVOVF9UQUdfVkVSU0lPTiIgdmFsdWU9ImZhbHNlIiAvPgorICAgIDxvcHRpb24gbmFtZT0iT1BUSU9OX0RPQ1VNRU5UX1RBR19ERVBSRUNBVEVEIiB2YWx1ZT0idHJ1ZSIgLz4KKyAgICA8b3B0aW9uIG5hbWU9Ik9QVElPTl9ERVBSRUNBVEVEX0xJU1QiIHZhbHVlPSJ0cnVlIiAvPgorICAgIDxvcHRpb24gbmFtZT0iT1RIRVJfT1BUSU9OUyIgdmFsdWU9IiIgLz4KKyAgICA8b3B0aW9uIG5hbWU9IkhFQVBfU0laRSIgLz4KKyAgICA8b3B0aW9uIG5hbWU9IkxPQ0FMRSIgLz4KKyAgICA8b3B0aW9uIG5hbWU9Ik9QRU5fSU5fQlJPV1NFUiIgdmFsdWU9InRydWUiIC8+CisgIDwvY29tcG9uZW50PgorICA8Y29tcG9uZW50IG5hbWU9Ikppa2VzU2V0dGluZ3MiPgorICAgIDxvcHRpb24gbmFtZT0iSklLRVNfUEFUSCIgdmFsdWU9IiIgLz4KKyAgICA8b3B0aW9uIG5hbWU9IkRFQlVHR0lOR19JTkZPIiB2YWx1ZT0idHJ1ZSIgLz4KKyAgICA8b3B0aW9uIG5hbWU9IkRFUFJFQ0FUSU9OIiB2YWx1ZT0idHJ1ZSIgLz4KKyAgICA8b3B0aW9uIG5hbWU9IkdFTkVSQVRFX05PX1dBUk5JTkdTIiB2YWx1ZT0iZmFsc2UiIC8+CisgICAgPG9wdGlvbiBuYW1lPSJJU19FTUFDU19FUlJPUlNfTU9ERSIgdmFsdWU9InRydWUiIC8+CisgICAgPG9wdGlvbiBuYW1lPSJBRERJVElPTkFMX09QVElPTlNfU1RSSU5HIiB2YWx1ZT0iIiAvPgorICA8L2NvbXBvbmVudD4KKyAgPGNvbXBvbmVudCBuYW1lPSJMb2dDb25zb2xlUHJlZmVyZW5jZXMiPgorICAgIDxvcHRpb24gbmFtZT0iRklMVEVSX0VSUk9SUyIgdmFsdWU9ImZhbHNlIiAvPgorICAgIDxvcHRpb24gbmFtZT0iRklMVEVSX1dBUk5JTkdTIiB2YWx1ZT0iZmFsc2UiIC8+CisgICAgPG9wdGlvbiBuYW1lPSJGSUxURVJfSU5GTyIgdmFsdWU9InRydWUiIC8+CisgICAgPG9wdGlvbiBuYW1lPSJDVVNUT01fRklMVEVSIiAvPgorICA8L2NvbXBvbmVudD4KKyAgPGNvbXBvbmVudCBuYW1lPSJQYWxldHRlMiI+CisgICAgPGdyb3VwIG5hbWU9IlN3aW5nIj4KKyAgICAgIDxpdGVtIGNsYXNzPSJjb20uaW50ZWxsaWoudWlEZXNpZ25lci5IU3BhY2VyIiB0b29sdGlwLXRleHQ9Ikhvcml6b250YWwgU3BhY2VyIiBpY29uPSIvY29tL2ludGVsbGlqL3VpRGVzaWduZXIvaWNvbnMvaHNwYWNlci5wbmciIHJlbW92YWJsZT0iZmFsc2UiIGF1dG8tY3JlYXRlLWJpbmRpbmc9ImZhbHNlIiBjYW4tYXR0YWNoLWxhYmVsPSJmYWxzZSI+CisgICAgICAgIDxkZWZhdWx0LWNvbnN0cmFpbnRzIHZzaXplLXBvbGljeT0iMSIgaHNpemUtcG9saWN5PSI2IiBhbmNob3I9IjAiIGZpbGw9IjEiIC8+CisgICAgICA8L2l0ZW0+CisgICAgICA8aXRlbSBjbGFzcz0iY29tLmludGVsbGlqLnVpRGVzaWduZXIuVlNwYWNlciIgdG9vbHRpcC10ZXh0PSJWZXJ0aWNhbCBTcGFjZXIiIGljb249Ii9jb20vaW50ZWxsaWovdWlEZXNpZ25lci9pY29ucy92c3BhY2VyLnBuZyIgcmVtb3ZhYmxlPSJmYWxzZSIgYXV0by1jcmVhdGUtYmluZGluZz0iZmFsc2UiIGNhbi1hdHRhY2gtbGFiZWw9ImZhbHNlIj4KKyAgICAgICAgPGRlZmF1bHQtY29uc3RyYWludHMgdnNpemUtcG9saWN5PSI2IiBoc2l6ZS1wb2xpY3k9IjEiIGFuY2hvcj0iMCIgZmlsbD0iMiIgLz4KKyAgICAgIDwvaXRlbT4KKyAgICAgIDxpdGVtIGNsYXNzPSJqYXZheC5zd2luZy5KUGFuZWwiIGljb249Ii9jb20vaW50ZWxsaWovdWlEZXNpZ25lci9pY29ucy9wYW5lbC5wbmciIHJlbW92YWJsZT0iZmFsc2UiIGF1dG8tY3JlYXRlLWJpbmRpbmc9ImZhbHNlIiBjYW4tYXR0YWNoLWxhYmVsPSJmYWxzZSI+CisgICAgICAgIDxkZWZhdWx0LWNvbnN0cmFpbnRzIHZzaXplLXBvbGljeT0iMyIgaHNpemUtcG9saWN5PSIzIiBhbmNob3I9IjAiIGZpbGw9IjMiIC8+CisgICAgICA8L2l0ZW0+CisgICAgICA8aXRlbSBjbGFzcz0iamF2YXguc3dpbmcuSlNjcm9sbFBhbmUiIGljb249Ii9jb20vaW50ZWxsaWovdWlEZXNpZ25lci9pY29ucy9zY3JvbGxQYW5lLnBuZyIgcmVtb3ZhYmxlPSJmYWxzZSIgYXV0by1jcmVhdGUtYmluZGluZz0iZmFsc2UiIGNhbi1hdHRhY2gtbGFiZWw9InRydWUiPgorICAgICAgICA8ZGVmYXVsdC1jb25zdHJhaW50cyB2c2l6ZS1wb2xpY3k9IjciIGhzaXplLXBvbGljeT0iNyIgYW5jaG9yPSIwIiBmaWxsPSIzIiAvPgorICAgICAgPC9pdGVtPgorICAgICAgPGl0ZW0gY2xhc3M9ImphdmF4LnN3aW5nLkpCdXR0b24iIGljb249Ii9jb20vaW50ZWxsaWovdWlEZXNpZ25lci9pY29ucy9idXR0b24ucG5nIiByZW1vdmFibGU9ImZhbHNlIiBhdXRvLWNyZWF0ZS1iaW5kaW5nPSJ0cnVlIiBjYW4tYXR0YWNoLWxhYmVsPSJmYWxzZSI+CisgICAgICAgIDxkZWZhdWx0LWNvbnN0cmFpbnRzIHZzaXplLXBvbGljeT0iMCIgaHNpemUtcG9saWN5PSIzIiBhbmNob3I9IjAiIGZpbGw9IjEiIC8+CisgICAgICAgIDxpbml0aWFsLXZhbHVlcz4KKyAgICAgICAgICA8cHJvcGVydHkgbmFtZT0idGV4dCIgdmFsdWU9IkJ1dHRvbiIgLz4KKyAgICAgICAgPC9pbml0aWFsLXZhbHVlcz4KKyAgICAgIDwvaXRlbT4KKyAgICAgIDxpdGVtIGNsYXNzPSJqYXZheC5zd2luZy5KUmFkaW9CdXR0b24iIGljb249Ii9jb20vaW50ZWxsaWovdWlEZXNpZ25lci9pY29ucy9yYWRpb0J1dHRvbi5wbmciIHJlbW92YWJsZT0iZmFsc2UiIGF1dG8tY3JlYXRlLWJpbmRpbmc9InRydWUiIGNhbi1hdHRhY2gtbGFiZWw9ImZhbHNlIj4KKyAgICAgICAgPGRlZmF1bHQtY29uc3RyYWludHMgdnNpemUtcG9saWN5PSIwIiBoc2l6ZS1wb2xpY3k9IjMiIGFuY2hvcj0iOCIgZmlsbD0iMCIgLz4KKyAgICAgICAgPGluaXRpYWwtdmFsdWVzPgorICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ0ZXh0IiB2YWx1ZT0iUmFkaW9CdXR0b24iIC8+CisgICAgICAgIDwvaW5pdGlhbC12YWx1ZXM+CisgICAgICA8L2l0ZW0+CisgICAgICA8aXRlbSBjbGFzcz0iamF2YXguc3dpbmcuSkNoZWNrQm94IiBpY29uPSIvY29tL2ludGVsbGlqL3VpRGVzaWduZXIvaWNvbnMvY2hlY2tCb3gucG5nIiByZW1vdmFibGU9ImZhbHNlIiBhdXRvLWNyZWF0ZS1iaW5kaW5nPSJ0cnVlIiBjYW4tYXR0YWNoLWxhYmVsPSJmYWxzZSI+CisgICAgICAgIDxkZWZhdWx0LWNvbnN0cmFpbnRzIHZzaXplLXBvbGljeT0iMCIgaHNpemUtcG9saWN5PSIzIiBhbmNob3I9IjgiIGZpbGw9IjAiIC8+CisgICAgICAgIDxpbml0aWFsLXZhbHVlcz4KKyAgICAgICAgICA8cHJvcGVydHkgbmFtZT0idGV4dCIgdmFsdWU9IkNoZWNrQm94IiAvPgorICAgICAgICA8L2luaXRpYWwtdmFsdWVzPgorICAgICAgPC9pdGVtPgorICAgICAgPGl0ZW0gY2xhc3M9ImphdmF4LnN3aW5nLkpMYWJlbCIgaWNvbj0iL2NvbS9pbnRlbGxpai91aURlc2lnbmVyL2ljb25zL2xhYmVsLnBuZyIgcmVtb3ZhYmxlPSJmYWxzZSIgYXV0by1jcmVhdGUtYmluZGluZz0iZmFsc2UiIGNhbi1hdHRhY2gtbGFiZWw9ImZhbHNlIj4KKyAgICAgICAgPGRlZmF1bHQtY29uc3RyYWludHMgdnNpemUtcG9saWN5PSIwIiBoc2l6ZS1wb2xpY3k9IjAiIGFuY2hvcj0iOCIgZmlsbD0iMCIgLz4KKyAgICAgICAgPGluaXRpYWwtdmFsdWVzPgorICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ0ZXh0IiB2YWx1ZT0iTGFiZWwiIC8+CisgICAgICAgIDwvaW5pdGlhbC12YWx1ZXM+CisgICAgICA8L2l0ZW0+CisgICAgICA8aXRlbSBjbGFzcz0iamF2YXguc3dpbmcuSlRleHRGaWVsZCIgaWNvbj0iL2NvbS9pbnRlbGxpai91aURlc2lnbmVyL2ljb25zL3RleHRGaWVsZC5wbmciIHJlbW92YWJsZT0iZmFsc2UiIGF1dG8tY3JlYXRlLWJpbmRpbmc9InRydWUiIGNhbi1hdHRhY2gtbGFiZWw9InRydWUiPgorICAgICAgICA8ZGVmYXVsdC1jb25zdHJhaW50cyB2c2l6ZS1wb2xpY3k9IjAiIGhzaXplLXBvbGljeT0iNiIgYW5jaG9yPSI4IiBmaWxsPSIxIj4KKyAgICAgICAgICA8cHJlZmVycmVkLXNpemUgd2lkdGg9IjE1MCIgaGVpZ2h0PSItMSIgLz4KKyAgICAgICAgPC9kZWZhdWx0LWNvbnN0cmFpbnRzPgorICAgICAgPC9pdGVtPgorICAgICAgPGl0ZW0gY2xhc3M9ImphdmF4LnN3aW5nLkpQYXNzd29yZEZpZWxkIiBpY29uPSIvY29tL2ludGVsbGlqL3VpRGVzaWduZXIvaWNvbnMvcGFzc3dvcmRGaWVsZC5wbmciIHJlbW92YWJsZT0iZmFsc2UiIGF1dG8tY3JlYXRlLWJpbmRpbmc9InRydWUiIGNhbi1hdHRhY2gtbGFiZWw9InRydWUiPgorICAgICAgICA8ZGVmYXVsdC1jb25zdHJhaW50cyB2c2l6ZS1wb2xpY3k9IjAiIGhzaXplLXBvbGljeT0iNiIgYW5jaG9yPSI4IiBmaWxsPSIxIj4KKyAgICAgICAgICA8cHJlZmVycmVkLXNpemUgd2lkdGg9IjE1MCIgaGVpZ2h0PSItMSIgLz4KKyAgICAgICAgPC9kZWZhdWx0LWNvbnN0cmFpbnRzPgorICAgICAgPC9pdGVtPgorICAgICAgPGl0ZW0gY2xhc3M9ImphdmF4LnN3aW5nLkpGb3JtYXR0ZWRUZXh0RmllbGQiIGljb249Ii9jb20vaW50ZWxsaWovdWlEZXNpZ25lci9pY29ucy9mb3JtYXR0ZWRUZXh0RmllbGQucG5nIiByZW1vdmFibGU9ImZhbHNlIiBhdXRvLWNyZWF0ZS1iaW5kaW5nPSJ0cnVlIiBjYW4tYXR0YWNoLWxhYmVsPSJ0cnVlIj4KKyAgICAgICAgPGRlZmF1bHQtY29uc3RyYWludHMgdnNpemUtcG9saWN5PSIwIiBoc2l6ZS1wb2xpY3k9IjYiIGFuY2hvcj0iOCIgZmlsbD0iMSI+CisgICAgICAgICAgPHByZWZlcnJlZC1zaXplIHdpZHRoPSIxNTAiIGhlaWdodD0iLTEiIC8+CisgICAgICAgIDwvZGVmYXVsdC1jb25zdHJhaW50cz4KKyAgICAgIDwvaXRlbT4KKyAgICAgIDxpdGVtIGNsYXNzPSJqYXZheC5zd2luZy5KVGV4dEFyZWEiIGljb249Ii9jb20vaW50ZWxsaWovdWlEZXNpZ25lci9pY29ucy90ZXh0QXJlYS5wbmciIHJlbW92YWJsZT0iZmFsc2UiIGF1dG8tY3JlYXRlLWJpbmRpbmc9InRydWUiIGNhbi1hdHRhY2gtbGFiZWw9InRydWUiPgorICAgICAgICA8ZGVmYXVsdC1jb25zdHJhaW50cyB2c2l6ZS1wb2xpY3k9IjYiIGhzaXplLXBvbGljeT0iNiIgYW5jaG9yPSIwIiBmaWxsPSIzIj4KKyAgICAgICAgICA8cHJlZmVycmVkLXNpemUgd2lkdGg9IjE1MCIgaGVpZ2h0PSI1MCIgLz4KKyAgICAgICAgPC9kZWZhdWx0LWNvbnN0cmFpbnRzPgorICAgICAgPC9pdGVtPgorICAgICAgPGl0ZW0gY2xhc3M9ImphdmF4LnN3aW5nLkpUZXh0UGFuZSIgaWNvbj0iL2NvbS9pbnRlbGxpai91aURlc2lnbmVyL2ljb25zL3RleHRQYW5lLnBuZyIgcmVtb3ZhYmxlPSJmYWxzZSIgYXV0by1jcmVhdGUtYmluZGluZz0idHJ1ZSIgY2FuLWF0dGFjaC1sYWJlbD0idHJ1ZSI+CisgICAgICAgIDxkZWZhdWx0LWNvbnN0cmFpbnRzIHZzaXplLXBvbGljeT0iNiIgaHNpemUtcG9saWN5PSI2IiBhbmNob3I9IjAiIGZpbGw9IjMiPgorICAgICAgICAgIDxwcmVmZXJyZWQtc2l6ZSB3aWR0aD0iMTUwIiBoZWlnaHQ9IjUwIiAvPgorICAgICAgICA8L2RlZmF1bHQtY29uc3RyYWludHM+CisgICAgICA8L2l0ZW0+CisgICAgICA8aXRlbSBjbGFzcz0iamF2YXguc3dpbmcuSkVkaXRvclBhbmUiIGljb249Ii9jb20vaW50ZWxsaWovdWlEZXNpZ25lci9pY29ucy9lZGl0b3JQYW5lLnBuZyIgcmVtb3ZhYmxlPSJmYWxzZSIgYXV0by1jcmVhdGUtYmluZGluZz0idHJ1ZSIgY2FuLWF0dGFjaC1sYWJlbD0idHJ1ZSI+CisgICAgICAgIDxkZWZhdWx0LWNvbnN0cmFpbnRzIHZzaXplLXBvbGljeT0iNiIgaHNpemUtcG9saWN5PSI2IiBhbmNob3I9IjAiIGZpbGw9IjMiPgorICAgICAgICAgIDxwcmVmZXJyZWQtc2l6ZSB3aWR0aD0iMTUwIiBoZWlnaHQ9IjUwIiAvPgorICAgICAgICA8L2RlZmF1bHQtY29uc3RyYWludHM+CisgICAgICA8L2l0ZW0+CisgICAgICA8aXRlbSBjbGFzcz0iamF2YXguc3dpbmcuSkNvbWJvQm94IiBpY29uPSIvY29tL2ludGVsbGlqL3VpRGVzaWduZXIvaWNvbnMvY29tYm9Cb3gucG5nIiByZW1vdmFibGU9ImZhbHNlIiBhdXRvLWNyZWF0ZS1iaW5kaW5nPSJ0cnVlIiBjYW4tYXR0YWNoLWxhYmVsPSJ0cnVlIj4KKyAgICAgICAgPGRlZmF1bHQtY29uc3RyYWludHMgdnNpemUtcG9saWN5PSIwIiBoc2l6ZS1wb2xpY3k9IjIiIGFuY2hvcj0iOCIgZmlsbD0iMSIgLz4KKyAgICAgIDwvaXRlbT4KKyAgICAgIDxpdGVtIGNsYXNzPSJqYXZheC5zd2luZy5KVGFibGUiIGljb249Ii9jb20vaW50ZWxsaWovdWlEZXNpZ25lci9pY29ucy90YWJsZS5wbmciIHJlbW92YWJsZT0iZmFsc2UiIGF1dG8tY3JlYXRlLWJpbmRpbmc9InRydWUiIGNhbi1hdHRhY2gtbGFiZWw9ImZhbHNlIj4KKyAgICAgICAgPGRlZmF1bHQtY29uc3RyYWludHMgdnNpemUtcG9saWN5PSI2IiBoc2l6ZS1wb2xpY3k9IjYiIGFuY2hvcj0iMCIgZmlsbD0iMyI+CisgICAgICAgICAgPHByZWZlcnJlZC1zaXplIHdpZHRoPSIxNTAiIGhlaWdodD0iNTAiIC8+CisgICAgICAgIDwvZGVmYXVsdC1jb25zdHJhaW50cz4KKyAgICAgIDwvaXRlbT4KKyAgICAgIDxpdGVtIGNsYXNzPSJqYXZheC5zd2luZy5KTGlzdCIgaWNvbj0iL2NvbS9pbnRlbGxpai91aURlc2lnbmVyL2ljb25zL2xpc3QucG5nIiByZW1vdmFibGU9ImZhbHNlIiBhdXRvLWNyZWF0ZS1iaW5kaW5nPSJ0cnVlIiBjYW4tYXR0YWNoLWxhYmVsPSJmYWxzZSI+CisgICAgICAgIDxkZWZhdWx0LWNvbnN0cmFpbnRzIHZzaXplLXBvbGljeT0iNiIgaHNpemUtcG9saWN5PSIyIiBhbmNob3I9IjAiIGZpbGw9IjMiPgorICAgICAgICAgIDxwcmVmZXJyZWQtc2l6ZSB3aWR0aD0iMTUwIiBoZWlnaHQ9IjUwIiAvPgorICAgICAgICA8L2RlZmF1bHQtY29uc3RyYWludHM+CisgICAgICA8L2l0ZW0+CisgICAgICA8aXRlbSBjbGFzcz0iamF2YXguc3dpbmcuSlRyZWUiIGljb249Ii9jb20vaW50ZWxsaWovdWlEZXNpZ25lci9pY29ucy90cmVlLnBuZyIgcmVtb3ZhYmxlPSJmYWxzZSIgYXV0by1jcmVhdGUtYmluZGluZz0idHJ1ZSIgY2FuLWF0dGFjaC1sYWJlbD0iZmFsc2UiPgorICAgICAgICA8ZGVmYXVsdC1jb25zdHJhaW50cyB2c2l6ZS1wb2xpY3k9IjYiIGhzaXplLXBvbGljeT0iNiIgYW5jaG9yPSIwIiBmaWxsPSIzIj4KKyAgICAgICAgICA8cHJlZmVycmVkLXNpemUgd2lkdGg9IjE1MCIgaGVpZ2h0PSI1MCIgLz4KKyAgICAgICAgPC9kZWZhdWx0LWNvbnN0cmFpbnRzPgorICAgICAgPC9pdGVtPgorICAgICAgPGl0ZW0gY2xhc3M9ImphdmF4LnN3aW5nLkpUYWJiZWRQYW5lIiBpY29uPSIvY29tL2ludGVsbGlqL3VpRGVzaWduZXIvaWNvbnMvdGFiYmVkUGFuZS5wbmciIHJlbW92YWJsZT0iZmFsc2UiIGF1dG8tY3JlYXRlLWJpbmRpbmc9InRydWUiIGNhbi1hdHRhY2gtbGFiZWw9ImZhbHNlIj4KKyAgICAgICAgPGRlZmF1bHQtY29uc3RyYWludHMgdnNpemUtcG9saWN5PSIzIiBoc2l6ZS1wb2xpY3k9IjMiIGFuY2hvcj0iMCIgZmlsbD0iMyI+CisgICAgICAgICAgPHByZWZlcnJlZC1zaXplIHdpZHRoPSIyMDAiIGhlaWdodD0iMjAwIiAvPgorICAgICAgICA8L2RlZmF1bHQtY29uc3RyYWludHM+CisgICAgICA8L2l0ZW0+CisgICAgICA8aXRlbSBjbGFzcz0iamF2YXguc3dpbmcuSlNwbGl0UGFuZSIgaWNvbj0iL2NvbS9pbnRlbGxpai91aURlc2lnbmVyL2ljb25zL3NwbGl0UGFuZS5wbmciIHJlbW92YWJsZT0iZmFsc2UiIGF1dG8tY3JlYXRlLWJpbmRpbmc9ImZhbHNlIiBjYW4tYXR0YWNoLWxhYmVsPSJmYWxzZSI+CisgICAgICAgIDxkZWZhdWx0LWNvbnN0cmFpbnRzIHZzaXplLXBvbGljeT0iMyIgaHNpemUtcG9saWN5PSIzIiBhbmNob3I9IjAiIGZpbGw9IjMiPgorICAgICAgICAgIDxwcmVmZXJyZWQtc2l6ZSB3aWR0aD0iMjAwIiBoZWlnaHQ9IjIwMCIgLz4KKyAgICAgICAgPC9kZWZhdWx0LWNvbnN0cmFpbnRzPgorICAgICAgPC9pdGVtPgorICAgICAgPGl0ZW0gY2xhc3M9ImphdmF4LnN3aW5nLkpTcGlubmVyIiBpY29uPSIvY29tL2ludGVsbGlqL3VpRGVzaWduZXIvaWNvbnMvc3Bpbm5lci5wbmciIHJlbW92YWJsZT0iZmFsc2UiIGF1dG8tY3JlYXRlLWJpbmRpbmc9InRydWUiIGNhbi1hdHRhY2gtbGFiZWw9InRydWUiPgorICAgICAgICA8ZGVmYXVsdC1jb25zdHJhaW50cyB2c2l6ZS1wb2xpY3k9IjAiIGhzaXplLXBvbGljeT0iNiIgYW5jaG9yPSI4IiBmaWxsPSIxIiAvPgorICAgICAgPC9pdGVtPgorICAgICAgPGl0ZW0gY2xhc3M9ImphdmF4LnN3aW5nLkpTbGlkZXIiIGljb249Ii9jb20vaW50ZWxsaWovdWlEZXNpZ25lci9pY29ucy9zbGlkZXIucG5nIiByZW1vdmFibGU9ImZhbHNlIiBhdXRvLWNyZWF0ZS1iaW5kaW5nPSJ0cnVlIiBjYW4tYXR0YWNoLWxhYmVsPSJmYWxzZSI+CisgICAgICAgIDxkZWZhdWx0LWNvbnN0cmFpbnRzIHZzaXplLXBvbGljeT0iMCIgaHNpemUtcG9saWN5PSI2IiBhbmNob3I9IjgiIGZpbGw9IjEiIC8+CisgICAgICA8L2l0ZW0+CisgICAgICA8aXRlbSBjbGFzcz0iamF2YXguc3dpbmcuSlNlcGFyYXRvciIgaWNvbj0iL2NvbS9pbnRlbGxpai91aURlc2lnbmVyL2ljb25zL3NlcGFyYXRvci5wbmciIHJlbW92YWJsZT0iZmFsc2UiIGF1dG8tY3JlYXRlLWJpbmRpbmc9ImZhbHNlIiBjYW4tYXR0YWNoLWxhYmVsPSJmYWxzZSI+CisgICAgICAgIDxkZWZhdWx0LWNvbnN0cmFpbnRzIHZzaXplLXBvbGljeT0iNiIgaHNpemUtcG9saWN5PSI2IiBhbmNob3I9IjAiIGZpbGw9IjMiIC8+CisgICAgICA8L2l0ZW0+CisgICAgICA8aXRlbSBjbGFzcz0iamF2YXguc3dpbmcuSlByb2dyZXNzQmFyIiBpY29uPSIvY29tL2ludGVsbGlqL3VpRGVzaWduZXIvaWNvbnMvcHJvZ3Jlc3NiYXIucG5nIiByZW1vdmFibGU9ImZhbHNlIiBhdXRvLWNyZWF0ZS1iaW5kaW5nPSJ0cnVlIiBjYW4tYXR0YWNoLWxhYmVsPSJmYWxzZSI+CisgICAgICAgIDxkZWZhdWx0LWNvbnN0cmFpbnRzIHZzaXplLXBvbGljeT0iMCIgaHNpemUtcG9saWN5PSI2IiBhbmNob3I9IjAiIGZpbGw9IjEiIC8+CisgICAgICA8L2l0ZW0+CisgICAgICA8aXRlbSBjbGFzcz0iamF2YXguc3dpbmcuSlRvb2xCYXIiIGljb249Ii9jb20vaW50ZWxsaWovdWlEZXNpZ25lci9pY29ucy90b29sYmFyLnBuZyIgcmVtb3ZhYmxlPSJmYWxzZSIgYXV0by1jcmVhdGUtYmluZGluZz0iZmFsc2UiIGNhbi1hdHRhY2gtbGFiZWw9ImZhbHNlIj4KKyAgICAgICAgPGRlZmF1bHQtY29uc3RyYWludHMgdnNpemUtcG9saWN5PSIwIiBoc2l6ZS1wb2xpY3k9IjYiIGFuY2hvcj0iMCIgZmlsbD0iMSI+CisgICAgICAgICAgPHByZWZlcnJlZC1zaXplIHdpZHRoPSItMSIgaGVpZ2h0PSIyMCIgLz4KKyAgICAgICAgPC9kZWZhdWx0LWNvbnN0cmFpbnRzPgorICAgICAgPC9pdGVtPgorICAgICAgPGl0ZW0gY2xhc3M9ImphdmF4LnN3aW5nLkpUb29sQmFyJFNlcGFyYXRvciIgaWNvbj0iL2NvbS9pbnRlbGxpai91aURlc2lnbmVyL2ljb25zL3Rvb2xiYXJTZXBhcmF0b3IucG5nIiByZW1vdmFibGU9ImZhbHNlIiBhdXRvLWNyZWF0ZS1iaW5kaW5nPSJmYWxzZSIgY2FuLWF0dGFjaC1sYWJlbD0iZmFsc2UiPgorICAgICAgICA8ZGVmYXVsdC1jb25zdHJhaW50cyB2c2l6ZS1wb2xpY3k9IjAiIGhzaXplLXBvbGljeT0iMCIgYW5jaG9yPSIwIiBmaWxsPSIxIiAvPgorICAgICAgPC9pdGVtPgorICAgICAgPGl0ZW0gY2xhc3M9ImphdmF4LnN3aW5nLkpTY3JvbGxCYXIiIGljb249Ii9jb20vaW50ZWxsaWovdWlEZXNpZ25lci9pY29ucy9zY3JvbGxiYXIucG5nIiByZW1vdmFibGU9ImZhbHNlIiBhdXRvLWNyZWF0ZS1iaW5kaW5nPSJ0cnVlIiBjYW4tYXR0YWNoLWxhYmVsPSJmYWxzZSI+CisgICAgICAgIDxkZWZhdWx0LWNvbnN0cmFpbnRzIHZzaXplLXBvbGljeT0iNiIgaHNpemUtcG9saWN5PSIwIiBhbmNob3I9IjAiIGZpbGw9IjIiIC8+CisgICAgICA8L2l0ZW0+CisgICAgPC9ncm91cD4KKyAgPC9jb21wb25lbnQ+CisgIDxjb21wb25lbnQgbmFtZT0iUHJvamVjdE1vZHVsZU1hbmFnZXIiPgorICAgIDxtb2R1bGVzPgorICAgICAgPG1vZHVsZSBmaWxldXJsPSJmaWxlOi8vJFBST0pFQ1RfRElSJC9BL0EuaW1sIiBmaWxlcGF0aD0iJFBST0pFQ1RfRElSJC9BL0EuaW1sIiAvPgorICAgICAgPG1vZHVsZSBmaWxldXJsPSJmaWxlOi8vJFBST0pFQ1RfRElSJC9CL0IuaW1sIiBmaWxlcGF0aD0iJFBST0pFQ1RfRElSJC9CL0IuaW1sIiAvPgorICAgIDwvbW9kdWxlcz4KKyAgPC9jb21wb25lbnQ+CisgIDxjb21wb25lbnQgbmFtZT0iUHJvamVjdFJvb3RNYW5hZ2VyIiB2ZXJzaW9uPSIyIiBhc3NlcnQta2V5d29yZD0idHJ1ZSIgamRrLTE1PSJ0cnVlIiBwcm9qZWN0LWpkay1uYW1lPSIxLjUiIHByb2plY3QtamRrLXR5cGU9IkphdmFTREsiPgorICAgIDxvdXRwdXQgdXJsPSJmaWxlOi8vJFBST0pFQ1RfRElSJC9jbGFzc2VzIiAvPgorICA8L2NvbXBvbmVudD4KKyAgPGNvbXBvbmVudCBuYW1lPSJQcm9qZWN0UnVuQ29uZmlndXJhdGlvbk1hbmFnZXIiIC8+CisgIDxjb21wb25lbnQgbmFtZT0iUm1pY1NldHRpbmdzIj4KKyAgICA8b3B0aW9uIG5hbWU9IklTX0VBTkFCTEVEIiB2YWx1ZT0iZmFsc2UiIC8+CisgICAgPG9wdGlvbiBuYW1lPSJERUJVR0dJTkdfSU5GTyIgdmFsdWU9InRydWUiIC8+CisgICAgPG9wdGlvbiBuYW1lPSJHRU5FUkFURV9OT19XQVJOSU5HUyIgdmFsdWU9ImZhbHNlIiAvPgorICAgIDxvcHRpb24gbmFtZT0iR0VORVJBVEVfSUlPUF9TVFVCUyIgdmFsdWU9ImZhbHNlIiAvPgorICAgIDxvcHRpb24gbmFtZT0iQURESVRJT05BTF9PUFRJT05TX1NUUklORyIgdmFsdWU9IiIgLz4KKyAgPC9jb21wb25lbnQ+CisgIDxjb21wb25lbnQgbmFtZT0iU3RhcnRlYW1WY3NBZGFwdGVyIiAvPgorICA8Y29tcG9uZW50IG5hbWU9IlZzc1ZjcyIgLz4KKyAgPGNvbXBvbmVudCBuYW1lPSJsaWJyYXJ5VGFibGUiPgorICAgIDxsaWJyYXJ5IG5hbWU9IkxpYiI+CisgICAgICA8Q0xBU1NFUz4KKyAgICAgICAgPHJvb3QgdXJsPSJqYXI6Ly8kUFJPSkVDVF9ESVIkL2xpYi9saWIuamFyIS8iIC8+CisgICAgICA8L0NMQVNTRVM+CisgICAgICA8SkFWQURPQyAvPgorICAgICAgPFNPVVJDRVMgLz4KKyAgICA8L2xpYnJhcnk+CisgICAgPGxpYnJhcnkgbmFtZT0iTW9ja0p1bml0Ij4KKyAgICAgIDxDTEFTU0VTPgorICAgICAgICA8cm9vdCB1cmw9ImphcjovLyRQUk9KRUNUX0RJUiQvbGliL21vY2tqdW5pdC5qYXIhLyIgLz4KKyAgICAgIDwvQ0xBU1NFUz4KKyAgICAgIDxKQVZBRE9DIC8+CisgICAgICA8U09VUkNFUyAvPgorICAgIDwvbGlicmFyeT4KKyAgPC9jb21wb25lbnQ+CisgIDxjb21wb25lbnQgbmFtZT0idWlkZXNpZ25lci1jb25maWd1cmF0aW9uIj4KKyAgICA8b3B0aW9uIG5hbWU9IklOU1RSVU1FTlRfQ0xBU1NFUyIgdmFsdWU9InRydWUiIC8+CisgICAgPG9wdGlvbiBuYW1lPSJDT1BZX0ZPUk1TX1JVTlRJTUVfVE9fT1VUUFVUIiB2YWx1ZT0idHJ1ZSIgLz4KKyAgICA8b3B0aW9uIG5hbWU9IkRFRkFVTFRfTEFZT1VUX01BTkFHRVIiIHZhbHVlPSJHcmlkTGF5b3V0TWFuYWdlciIgLz4KKyAgPC9jb21wb25lbnQ+CisgIDxVc2VkUGF0aE1hY3JvcyAvPgorPC9wcm9qZWN0PgorCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L292ZXJyaWRlTWV0aG9kL2FmdGVyQWJzdHJhY3RNZXRob2QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvb3ZlcnJpZGVNZXRob2QvYWZ0ZXJBYnN0cmFjdE1ldGhvZC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM5ZGM3MmMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L292ZXJyaWRlTWV0aG9kL2FmdGVyQWJzdHJhY3RNZXRob2QuamF2YQpAQCAtMCwwICsxLDExIEBACisvLyAiSW1wbGVtZW50IG1ldGhvZCAnZm9vJyIgInRydWUiCithYnN0cmFjdCBjbGFzcyBUZXN0IHsKKyAgYWJzdHJhY3Qgdm9pZCBmb28oKTsKK30KKworY2xhc3MgVEltcGxlIGV4dGVuZHMgVGVzdCB7CisgICAgQE92ZXJyaWRlCisgICAgdm9pZCBmb28oKSB7CisgICAgICAgIDxzZWxlY3Rpb24+Ly9UbyBjaGFuZ2UgYm9keSBvZiBpbXBsZW1lbnRlZCBtZXRob2RzIHVzZSBGaWxlIHwgU2V0dGluZ3MgfCBGaWxlIFRlbXBsYXRlcy48L3NlbGVjdGlvbj4KKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9vdmVycmlkZU1ldGhvZC9hZnRlclByb3RlY3RlZE1ldGhvZC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9vdmVycmlkZU1ldGhvZC9hZnRlclByb3RlY3RlZE1ldGhvZC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ1ZjIwYTMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L292ZXJyaWRlTWV0aG9kL2FmdGVyUHJvdGVjdGVkTWV0aG9kLmphdmEKQEAgLTAsMCArMSwxMSBAQAorLy8gIk92ZXJyaWRlIG1ldGhvZCAnZm9vJyIgInRydWUiCitjbGFzcyBUZXN0IHsKKyAgcHJvdGVjdGVkIHZvaWQgZm9vKCl7fQorfQorCitjbGFzcyBUSW1wbGUgZXh0ZW5kcyBUZXN0IHsKKyAgICBAT3ZlcnJpZGUKKyAgICBwcm90ZWN0ZWQgdm9pZCBmb28oKSB7CisgICAgICAgIDxzZWxlY3Rpb24+c3VwZXIuZm9vKCk7ICAgIC8vVG8gY2hhbmdlIGJvZHkgb2Ygb3ZlcnJpZGRlbiBtZXRob2RzIHVzZSBGaWxlIHwgU2V0dGluZ3MgfCBGaWxlIFRlbXBsYXRlcy48L3NlbGVjdGlvbj4KKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9vdmVycmlkZU1ldGhvZC9hZnRlclNraXBVbnJlc29sdmVkTnVsbGFibGUuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvb3ZlcnJpZGVNZXRob2QvYWZ0ZXJTa2lwVW5yZXNvbHZlZE51bGxhYmxlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjllZjcyOAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvb3ZlcnJpZGVNZXRob2QvYWZ0ZXJTa2lwVW5yZXNvbHZlZE51bGxhYmxlLmphdmEKQEAgLTAsMCArMSwxMyBAQAoraW1wb3J0IG9yZy5qZXRicmFpbnMuYW5ub3RhdGlvbnMuTnVsbGFibGU7CisKKy8vICJJbXBsZW1lbnQgbWV0aG9kICdmb28nIiAidHJ1ZSIKK2Fic3RyYWN0IGNsYXNzIFRlc3QgeworICBwdWJsaWMgYWJzdHJhY3Qgdm9pZCBmb28oQG9yZy5qZXRicmFpbnMuYW5ub3RhdGlvbnMuTnVsbGFibGUgU3RyaW5nIGEpOworfQorCitjbGFzcyBUSW1wbGUgZXh0ZW5kcyBUZXN0IHsKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgdm9pZCBmb28oQE51bGxhYmxlIFN0cmluZyBhKSB7CisgICAgICAgIDxzZWxlY3Rpb24+Ly9UbyBjaGFuZ2UgYm9keSBvZiBpbXBsZW1lbnRlZCBtZXRob2RzIHVzZSBGaWxlIHwgU2V0dGluZ3MgfCBGaWxlIFRlbXBsYXRlcy48L3NlbGVjdGlvbj4KKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9vdmVycmlkZU1ldGhvZC9iZWZvcmVBYnN0cmFjdE1ldGhvZC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9vdmVycmlkZU1ldGhvZC9iZWZvcmVBYnN0cmFjdE1ldGhvZC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEwODA5NGUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L292ZXJyaWRlTWV0aG9kL2JlZm9yZUFic3RyYWN0TWV0aG9kLmphdmEKQEAgLTAsMCArMSw2IEBACisvLyAiSW1wbGVtZW50IG1ldGhvZCAnZm9vJyIgInRydWUiCithYnN0cmFjdCBjbGFzcyBUZXN0IHsKKyAgYWJzdHJhY3Qgdm9pZCBmPGNhcmV0Pm9vKCk7Cit9CisKK2NsYXNzIFRJbXBsZSBleHRlbmRzIFRlc3Qge30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L292ZXJyaWRlTWV0aG9kL2JlZm9yZUFic3RyYWN0TWV0aG9kMS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9vdmVycmlkZU1ldGhvZC9iZWZvcmVBYnN0cmFjdE1ldGhvZDEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MjMwZmJjCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9vdmVycmlkZU1ldGhvZC9iZWZvcmVBYnN0cmFjdE1ldGhvZDEuamF2YQpAQCAtMCwwICsxLDggQEAKKy8vICJJbXBsZW1lbnQgbWV0aG9kICdmb28nIiAiZmFsc2UiCithYnN0cmFjdCBjbGFzcyBUZXN0IHsKKyAgYWJzdHJhY3Qgdm9pZCBmPGNhcmV0Pm9vKCk7Cit9CisKK2NsYXNzIFRJbXBsZSBleHRlbmRzIFRlc3QgeworICB2b2lkIGZvbygpIHt9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9vdmVycmlkZU1ldGhvZC9iZWZvcmVBYnN0cmFjdE1ldGhvZDIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvb3ZlcnJpZGVNZXRob2QvYmVmb3JlQWJzdHJhY3RNZXRob2QyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmIzY2I2NwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvb3ZlcnJpZGVNZXRob2QvYmVmb3JlQWJzdHJhY3RNZXRob2QyLmphdmEKQEAgLTAsMCArMSw0IEBACisvLyAiSW1wbGVtZW50IG1ldGhvZCAnZm9vJyIgImZhbHNlIgorYWJzdHJhY3QgY2xhc3MgVGVzdCB7CisgIGFic3RyYWN0IHZvaWQgZjxjYXJldD5vbygpOworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvb3ZlcnJpZGVNZXRob2QvYmVmb3JlRXhpc3RCdXRQcml2YXRlLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L292ZXJyaWRlTWV0aG9kL2JlZm9yZUV4aXN0QnV0UHJpdmF0ZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ2Njg4YTAKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L292ZXJyaWRlTWV0aG9kL2JlZm9yZUV4aXN0QnV0UHJpdmF0ZS5qYXZhCkBAIC0wLDAgKzEsOCBAQAorLy8gIkltcGxlbWVudCBtZXRob2QgJ2ZvbyciICJmYWxzZSIKK2Fic3RyYWN0IGNsYXNzIFRlc3QgeworICBwdWJsaWMgYWJzdHJhY3Qgdm9pZCBmPGNhcmV0Pm9vKCk7Cit9CisKK2NsYXNzIFRJbXBsZSBleHRlbmRzIFRlc3QgeworICBwcml2YXRlIHZvaWQgZm9vKCl7fQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvb3ZlcnJpZGVNZXRob2QvYmVmb3JlUHJpdmF0ZU1ldGhvZC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9vdmVycmlkZU1ldGhvZC9iZWZvcmVQcml2YXRlTWV0aG9kLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjA2YWQzMgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvb3ZlcnJpZGVNZXRob2QvYmVmb3JlUHJpdmF0ZU1ldGhvZC5qYXZhCkBAIC0wLDAgKzEsNiBAQAorLy8gIk92ZXJyaWRlIG1ldGhvZCAnZm9vJyIgImZhbHNlIgorY2xhc3MgVGVzdCB7CisgIHByaXZhdGUgdm9pZCBmPGNhcmV0Pm9vKCl7fQorfQorCitjbGFzcyBUSW1wbGUgZXh0ZW5kcyBUZXN0IHt9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9vdmVycmlkZU1ldGhvZC9iZWZvcmVQcm90ZWN0ZWRNZXRob2QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvb3ZlcnJpZGVNZXRob2QvYmVmb3JlUHJvdGVjdGVkTWV0aG9kLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjM5ZDg1MAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvb3ZlcnJpZGVNZXRob2QvYmVmb3JlUHJvdGVjdGVkTWV0aG9kLmphdmEKQEAgLTAsMCArMSw2IEBACisvLyAiT3ZlcnJpZGUgbWV0aG9kICdmb28nIiAidHJ1ZSIKK2NsYXNzIFRlc3QgeworICBwcm90ZWN0ZWQgdm9pZCBmPGNhcmV0Pm9vKCl7fQorfQorCitjbGFzcyBUSW1wbGUgZXh0ZW5kcyBUZXN0IHt9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9vdmVycmlkZU1ldGhvZC9iZWZvcmVQcm90ZWN0ZWRNZXRob2RDYXJldEluc2lkZS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9vdmVycmlkZU1ldGhvZC9iZWZvcmVQcm90ZWN0ZWRNZXRob2RDYXJldEluc2lkZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY2MjY4OGUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L292ZXJyaWRlTWV0aG9kL2JlZm9yZVByb3RlY3RlZE1ldGhvZENhcmV0SW5zaWRlLmphdmEKQEAgLTAsMCArMSw2IEBACisvLyAiT3ZlcnJpZGUgbWV0aG9kICdmb28nIiAiZmFsc2UiCitjbGFzcyBUZXN0IHsKKyAgcHJvdGVjdGVkIHZvaWQgZm9vKCl7PGNhcmV0Pn0KK30KKworY2xhc3MgVEltcGxlIGV4dGVuZHMgVGVzdCB7fQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvb3ZlcnJpZGVNZXRob2QvYmVmb3JlU2tpcFVucmVzb2x2ZWROdWxsYWJsZS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9vdmVycmlkZU1ldGhvZC9iZWZvcmVTa2lwVW5yZXNvbHZlZE51bGxhYmxlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTJkNTE1ZQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvb3ZlcnJpZGVNZXRob2QvYmVmb3JlU2tpcFVucmVzb2x2ZWROdWxsYWJsZS5qYXZhCkBAIC0wLDAgKzEsNiBAQAorLy8gIkltcGxlbWVudCBtZXRob2QgJ2ZvbyciICJ0cnVlIgorYWJzdHJhY3QgY2xhc3MgVGVzdCB7CisgIHB1YmxpYyBhYnN0cmFjdCB2b2lkIGY8Y2FyZXQ+b28oQG9yZy5qZXRicmFpbnMuYW5ub3RhdGlvbnMuTnVsbGFibGUgU3RyaW5nIGEpOworfQorCitjbGFzcyBUSW1wbGUgZXh0ZW5kcyBUZXN0IHt9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9vdmVycmlkZU1ldGhvZC9iZWZvcmVTdGF0aWNNZXRob2QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvb3ZlcnJpZGVNZXRob2QvYmVmb3JlU3RhdGljTWV0aG9kLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGI1NTU2MAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvb3ZlcnJpZGVNZXRob2QvYmVmb3JlU3RhdGljTWV0aG9kLmphdmEKQEAgLTAsMCArMSw2IEBACisvLyAiT3ZlcnJpZGUgbWV0aG9kICdmb28nIiAiZmFsc2UiCithYnN0cmFjdCBjbGFzcyBUZXN0IHsKKyAgcHJvdGVjdGVkIHN0YXRpYyB2b2lkIGZvPGNhcmV0Pm8oKXt9Cit9CisKK2NsYXNzIFRJbXBsZSBleHRlbmRzIFRlc3Qge30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3Blcm11dGVBcmd1bWVudHMvYWZ0ZXJDdHIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvcGVybXV0ZUFyZ3VtZW50cy9hZnRlckN0ci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI3MjFiZjMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3Blcm11dGVBcmd1bWVudHMvYWZ0ZXJDdHIuamF2YQpAQCAtMCwwICsxLDcgQEAKKy8vICJQZXJtdXRlIGFyZ3VtZW50cyIgInRydWUiCitwdWJsaWMgY2xhc3MgUyB7CisgICAgcHVibGljIFMoaW50IGksIFN0cmluZyBzKXt9CisgICAgdm9pZCBmKCkgeworICAgICAgICBuZXcgUygxLCAiIik8Y2FyZXQ+OworICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvcGVybXV0ZUFyZ3VtZW50cy9hZnRlclNoaWZ0TGVmdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9wZXJtdXRlQXJndW1lbnRzL2FmdGVyU2hpZnRMZWZ0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjE3MjRkOAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvcGVybXV0ZUFyZ3VtZW50cy9hZnRlclNoaWZ0TGVmdC5qYXZhCkBAIC0wLDAgKzEsNiBAQAorLy8gIlBlcm11dGUgYXJndW1lbnRzIiAidHJ1ZSIKK3B1YmxpYyBjbGFzcyBTIHsKKyAgICB2b2lkIGYoUyBrLCBpbnQgaSwgU3RyaW5nIHMsIE9iamVjdCBvKSB7CisgICAgICAgIGYodGhpcywgMSwgIiIsIG5ldyBPYmplY3QoKSk7PGNhcmV0PgorICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvcGVybXV0ZUFyZ3VtZW50cy9hZnRlclNoaWZ0UmlnaHQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvcGVybXV0ZUFyZ3VtZW50cy9hZnRlclNoaWZ0UmlnaHQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OWZmYTczCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9wZXJtdXRlQXJndW1lbnRzL2FmdGVyU2hpZnRSaWdodC5qYXZhCkBAIC0wLDAgKzEsNyBAQAorLy8gIlBlcm11dGUgYXJndW1lbnRzIiAidHJ1ZSIKK3B1YmxpYyBjbGFzcyBTIHsKKyAgICB2b2lkIGYoUyBrLCBpbnQgaSwgU3RyaW5nIHMsIE9iamVjdCBvKSB7CisgICAgICAgIGYodGhpcywiIixuZXcgT2JqZWN0KCksMSk7CisgICAgICAgIDxjYXJldD5mKHRoaXMsIDEsICIiLCBuZXcgT2JqZWN0KCkpOworICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvcGVybXV0ZUFyZ3VtZW50cy9hZnRlclN3YXAuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvcGVybXV0ZUFyZ3VtZW50cy9hZnRlclN3YXAuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZjUyMGY0Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9wZXJtdXRlQXJndW1lbnRzL2FmdGVyU3dhcC5qYXZhCkBAIC0wLDAgKzEsNiBAQAorLy8gIlBlcm11dGUgYXJndW1lbnRzIiAidHJ1ZSIKK3B1YmxpYyBjbGFzcyBTIHsKKyAgICB2b2lkIGYoUyBrLCBpbnQgaSwgU3RyaW5nIHMsIE9iamVjdCBvKSB7CisgICAgICAgIGYodGhpcywxLCAiIixuZXcgT2JqZWN0KCkpOzxjYXJldD4KKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3Blcm11dGVBcmd1bWVudHMvYmVmb3JlQ3RyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3Blcm11dGVBcmd1bWVudHMvYmVmb3JlQ3RyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjk2MGRlYQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvcGVybXV0ZUFyZ3VtZW50cy9iZWZvcmVDdHIuamF2YQpAQCAtMCwwICsxLDcgQEAKKy8vICJQZXJtdXRlIGFyZ3VtZW50cyIgInRydWUiCitwdWJsaWMgY2xhc3MgUyB7CisgICAgcHVibGljIFMoaW50IGksIFN0cmluZyBzKXt9CisgICAgdm9pZCBmKCkgeworICAgICAgICBuZXcgUygiIiwxKTxjYXJldD47CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9wZXJtdXRlQXJndW1lbnRzL2JlZm9yZVNoaWZ0TGVmdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9wZXJtdXRlQXJndW1lbnRzL2JlZm9yZVNoaWZ0TGVmdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZhZGFkYzkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3Blcm11dGVBcmd1bWVudHMvYmVmb3JlU2hpZnRMZWZ0LmphdmEKQEAgLTAsMCArMSw2IEBACisvLyAiUGVybXV0ZSBhcmd1bWVudHMiICJ0cnVlIgorcHVibGljIGNsYXNzIFMgeworICAgIHZvaWQgZihTIGssIGludCBpLCBTdHJpbmcgcywgT2JqZWN0IG8pIHsKKyAgICAgICAgZih0aGlzLCIiLG5ldyBPYmplY3QoKSwxKTs8Y2FyZXQ+CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9wZXJtdXRlQXJndW1lbnRzL2JlZm9yZVNoaWZ0UmlnaHQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvcGVybXV0ZUFyZ3VtZW50cy9iZWZvcmVTaGlmdFJpZ2h0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWJmNzlhMgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvcGVybXV0ZUFyZ3VtZW50cy9iZWZvcmVTaGlmdFJpZ2h0LmphdmEKQEAgLTAsMCArMSw3IEBACisvLyAiUGVybXV0ZSBhcmd1bWVudHMiICJ0cnVlIgorcHVibGljIGNsYXNzIFMgeworICAgIHZvaWQgZihTIGssIGludCBpLCBTdHJpbmcgcywgT2JqZWN0IG8pIHsKKyAgICAgICAgZih0aGlzLCIiLG5ldyBPYmplY3QoKSwxKTsKKyAgICAgICAgPGNhcmV0PmYodGhpcyxuZXcgT2JqZWN0KCksMSwiIik7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9wZXJtdXRlQXJndW1lbnRzL2JlZm9yZVN3YXAuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvcGVybXV0ZUFyZ3VtZW50cy9iZWZvcmVTd2FwLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzg1MDJlNQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvcGVybXV0ZUFyZ3VtZW50cy9iZWZvcmVTd2FwLmphdmEKQEAgLTAsMCArMSw2IEBACisvLyAiUGVybXV0ZSBhcmd1bWVudHMiICJ0cnVlIgorcHVibGljIGNsYXNzIFMgeworICAgIHZvaWQgZihTIGssIGludCBpLCBTdHJpbmcgcywgT2JqZWN0IG8pIHsKKyAgICAgICAgZigiIiwxLHRoaXMsbmV3IE9iamVjdCgpKTs8Y2FyZXQ+CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9wdWxsVXAvYWZ0ZXIxLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3B1bGxVcC9hZnRlcjEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YTNhODI0Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9wdWxsVXAvYWZ0ZXIxLmphdmEKQEAgLTAsMCArMSw5IEBACisvLyAiUHVsbCBtZXRob2QgJ2ZvbycgdG8gJ0ludCciICJ0cnVlIgorcHVibGljIGNsYXNzIFRlc3QgaW1wbGVtZW50cyBJbnQgeworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyB2b2lkIGZvbygpe30KK30KKworaW50ZXJmYWNlIEludCB7CisgICAgdm9pZCBmb28oKTsKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvcHVsbFVwL2FmdGVyMy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9wdWxsVXAvYWZ0ZXIzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjZmYzNkYQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvcHVsbFVwL2FmdGVyMy5qYXZhCkBAIC0wLDAgKzEsMTUgQEAKKy8vICJQdWxsIG1ldGhvZCAnZm9vJyB1cCBhbmQgbWFrZSBpdCBhYnN0cmFjdCIgInRydWUiCitwdWJsaWMgY2xhc3MgVGVzdHsKKyAgICB2b2lkIG1haW4oKXsKKyAgICAgICAgbmV3IEludCgpeworICAgICAgICAgICAgQE92ZXJyaWRlCisgICAgICAgICAgICB2b2lkIGZvbygpeworCisgICAgICAgICAgICB9CisgICAgICAgIH07CisgICAgfQorfQorCithYnN0cmFjdCBjbGFzcyBJbnQgeworICAgIGFic3RyYWN0IHZvaWQgZm9vKCk7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9wdWxsVXAvYWZ0ZXI2LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3B1bGxVcC9hZnRlcjYuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OTM0ZmI3Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9wdWxsVXAvYWZ0ZXI2LmphdmEKQEAgLTAsMCArMSwxNCBAQAorLy8gIlB1bGwgbWV0aG9kICdmb28nIHRvICdGb28nIGFuZCBtYWtlIGl0IGFic3RyYWN0IiAidHJ1ZSIKK3B1YmxpYyBjbGFzcyBUZXN0IHsKKyAgdm9pZCBiYXIoKSB7CisgICAgYWJzdHJhY3QgY2xhc3MgRm9vIHsKKyAgICAgICAgYWJzdHJhY3Qgdm9pZCBmb28oKTsKKyAgICB9CisgICAgY2xhc3MgRm9vSW1wbCBleHRlbmRzIEZvbyB7CisgICAgICBAT3ZlcnJpZGUKKyAgICAgIHZvaWQgZm9vKCl7fQorICAgIH0KKyAgfQorfQorCisKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvcHVsbFVwL2JlZm9yZTEuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvcHVsbFVwL2JlZm9yZTEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NWNiYjkyZAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvcHVsbFVwL2JlZm9yZTEuamF2YQpAQCAtMCwwICsxLDcgQEAKKy8vICJQdWxsIG1ldGhvZCAnZm9vJyB0byAnSW50JyIgInRydWUiCitwdWJsaWMgY2xhc3MgVGVzdCBpbXBsZW1lbnRzIEludCB7CisgICAgQE92ZXJyPGNhcmV0PmlkZQorICAgIHZvaWQgZm9vKCl7fQorfQorCitpbnRlcmZhY2UgSW50IHt9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3B1bGxVcC9iZWZvcmUyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3B1bGxVcC9iZWZvcmUyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGU5NTc1MAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvcHVsbFVwL2JlZm9yZTIuamF2YQpAQCAtMCwwICsxLDcgQEAKKy8vICJQdWxsIG1ldGhvZCAnZm9vJyB0byAnTGlzdCciICJmYWxzZSIKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworcHVibGljIGFic3RyYWN0IGNsYXNzIFRlc3QgaW1wbGVtZW50cyBMaXN0eworICAgIEBPdmVycjxjYXJldD5pZGUKKyAgICB2b2lkIGZvbygpe30KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvcHVsbFVwL2JlZm9yZTMuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvcHVsbFVwL2JlZm9yZTMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNzQ4YWI5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9wdWxsVXAvYmVmb3JlMy5qYXZhCkBAIC0wLDAgKzEsMTMgQEAKKy8vICJQdWxsIG1ldGhvZCAnZm9vJyB1cCBhbmQgbWFrZSBpdCBhYnN0cmFjdCIgInRydWUiCitwdWJsaWMgY2xhc3MgVGVzdHsKKyAgICB2b2lkIG1haW4oKXsKKyAgICAgICAgbmV3IEludCgpeworICAgICAgICAgICAgQE92ZXJyPGNhcmV0PmlkZQorICAgICAgICAgICAgdm9pZCBmb28oKXsKKworICAgICAgICAgICAgfQorICAgICAgICB9OworICAgIH0KK30KKworY2xhc3MgSW50IHt9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9wdWxsVXAvYmVmb3JlNC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9wdWxsVXAvYmVmb3JlNC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRkYmQ2NmMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3B1bGxVcC9iZWZvcmU0LmphdmEKQEAgLTAsMCArMSwxMyBAQAorLy8gIkV4dHJhY3QgaW50ZXJmYWNlIiAiZmFsc2UiCitwdWJsaWMgY2xhc3MgVGVzdHsKKyAgICB2b2lkIG1haW4oKXsKKyAgICAgICAgbmV3IEludCgpeworICAgICAgICAgICAgQE92ZXJyPGNhcmV0PmlkZQorICAgICAgICAgICAgdm9pZCBmb28oKXsKKworICAgICAgICAgICAgfQorICAgICAgICB9OworICAgIH0KK30KKworY2xhc3MgSW50IHt9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9wdWxsVXAvYmVmb3JlNS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9wdWxsVXAvYmVmb3JlNS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJkZDIxOWYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3B1bGxVcC9iZWZvcmU1LmphdmEKQEAgLTAsMCArMSw3IEBACitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK3B1YmxpYyBhYnN0cmFjdCBjbGFzcyBUZXN0IGV4dGVuZHMgQXJyYXlMaXN0PFN0cmluZz4gaW1wbGVtZW50cyBJbnQgeworICAgIEBPdmVycjxjYXJldD5pZGUKKyAgICB2b2lkIGZvbygpe30KK30KKworaW50ZXJmYWNlIEludCB7fQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9wdWxsVXAvYmVmb3JlNi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9wdWxsVXAvYmVmb3JlNi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZjZWZhN2IKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3B1bGxVcC9iZWZvcmU2LmphdmEKQEAgLTAsMCArMSwxMiBAQAorLy8gIlB1bGwgbWV0aG9kICdmb28nIHRvICdGb28nIGFuZCBtYWtlIGl0IGFic3RyYWN0IiAidHJ1ZSIKK3B1YmxpYyBjbGFzcyBUZXN0IHsKKyAgdm9pZCBiYXIoKSB7CisgICAgY2xhc3MgRm9vIHt9CisgICAgY2xhc3MgRm9vSW1wbCBleHRlbmRzIEZvbyB7CisgICAgICBAT3ZlcnI8Y2FyZXQ+aWRlCisgICAgICB2b2lkIGZvbygpe30KKyAgICB9CisgIH0KK30KKworCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3B1c2hDb25kaXRpb25JbkNhbGwvYWZ0ZXIxLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3B1c2hDb25kaXRpb25JbkNhbGwvYWZ0ZXIxLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzYwZGRhMwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvcHVzaENvbmRpdGlvbkluQ2FsbC9hZnRlcjEuamF2YQpAQCAtMCwwICsxLDcgQEAKKy8vICJQdXNoIGNvbmRpdGlvbiAnYicgaW5zaWRlIG1ldGhvZCBjYWxsIiAidHJ1ZSIKK2NsYXNzIEZvbyB7CisgIHZvaWQgYmFyKGJvb2xlYW4gYil7CisgICAgU3RyaW5nIHMgPSBmb28oYiA/ICJ0cnVlIiA6ICJmYWxzZSIpOworICB9CisgIFN0cmluZyBmb28oU3RyaW5nIHApIHtyZXR1cm4gcDt9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9wdXNoQ29uZGl0aW9uSW5DYWxsL2JlZm9yZTEuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvcHVzaENvbmRpdGlvbkluQ2FsbC9iZWZvcmUxLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDI3MDVhMgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvcHVzaENvbmRpdGlvbkluQ2FsbC9iZWZvcmUxLmphdmEKQEAgLTAsMCArMSw3IEBACisvLyAiUHVzaCBjb25kaXRpb24gJ2InIGluc2lkZSBtZXRob2QgY2FsbCIgInRydWUiCitjbGFzcyBGb28geworICB2b2lkIGJhcihib29sZWFuIGIpeworICAgIFN0cmluZyBzID0gYiA8Y2FyZXQ+PyBmb28oInRydWUiKSA6IGZvbygiZmFsc2UiKTsKKyAgfQorICBTdHJpbmcgZm9vKFN0cmluZyBwKSB7cmV0dXJuIHA7fQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvcHVzaENvbmRpdGlvbkluQ2FsbC9iZWZvcmVEaWZmZXJlbnRNZXRob2RzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3B1c2hDb25kaXRpb25JbkNhbGwvYmVmb3JlRGlmZmVyZW50TWV0aG9kcy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZjZDA2ZDQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3B1c2hDb25kaXRpb25JbkNhbGwvYmVmb3JlRGlmZmVyZW50TWV0aG9kcy5qYXZhCkBAIC0wLDAgKzEsOCBAQAorLy8gIlB1c2ggY29uZGl0aW9uICdiJyBpbnNpZGUgbWV0aG9kIGNhbGwiICJmYWxzZSIKK2NsYXNzIEZvbyB7CisgIHZvaWQgYmFyKGJvb2xlYW4gYil7CisgICAgU3RyaW5nIHMgPSBiIDxjYXJldD4/IGZvbygidHJ1ZSIpIDogZm9vKGZhbHNlKTsKKyAgfQorICBTdHJpbmcgZm9vKFN0cmluZyBwKSB7cmV0dXJuIHA7fQorICBTdHJpbmcgZm9vKGJvb2xlYW4gYikge3JldHVybiAiZmFsc2UiO30KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3B1c2hDb25kaXRpb25JbkNhbGwvYmVmb3JlTXVsdGlwbGVBcmdzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3B1c2hDb25kaXRpb25JbkNhbGwvYmVmb3JlTXVsdGlwbGVBcmdzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWU5OWZiNwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvcHVzaENvbmRpdGlvbkluQ2FsbC9iZWZvcmVNdWx0aXBsZUFyZ3MuamF2YQpAQCAtMCwwICsxLDcgQEAKKy8vICJQdXNoIGNvbmRpdGlvbiAnYicgaW5zaWRlIG1ldGhvZCBjYWxsIiAiZmFsc2UiCitjbGFzcyBGb28geworICB2b2lkIGJhcihib29sZWFuIGIpeworICAgIFN0cmluZyBzID0gYiA8Y2FyZXQ+PyBmb28oInRydWUiLCB0cnVlKSA6IGZvbygiZmFsc2UiLCBmYWxzZSk7CisgIH0KKyAgU3RyaW5nIGZvbyhTdHJpbmcgcCwgYm9vbGVhbiBiKSB7cmV0dXJuIHA7fQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvcXVhbGlmeVRoaXMvYWZ0ZXIxLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3F1YWxpZnlUaGlzL2FmdGVyMS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhhNjVmODkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3F1YWxpZnlUaGlzL2FmdGVyMS5qYXZhCkBAIC0wLDAgKzEsMTAgQEAKKy8vICJRdWFsaWZ5IHRoaXMgZXhwcmVzc2lvbiB3aXRoICdUZXN0JyIgInRydWUiCitjbGFzcyBUZXN0IHsKKyAgdm9pZCBmb28oVGVzdCB0KXt9CisgIGNsYXNzIEZvbyB7CisgICAgRm9vKCkgeworICAgICAgZm9vKFRlc3QudGhpcyk7CisgICAgfQorICB9Cit9CisKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvcXVhbGlmeVRoaXMvYWZ0ZXI1LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3F1YWxpZnlUaGlzL2FmdGVyNS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMyNzBhNWUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3F1YWxpZnlUaGlzL2FmdGVyNS5qYXZhCkBAIC0wLDAgKzEsMTggQEAKKy8vICJRdWFsaWZ5IHRoaXMgZXhwcmVzc2lvbiB3aXRoICdUZXN0LkZvbyciICJ0cnVlIgorY2xhc3MgVGVzdCB7CisgIHZvaWQgZm9vKEZvbyBtKSB7CisgIH0KKworCisgIGNsYXNzIEZvbyB7CisgICAgdm9pZCBiYXIoKSB7CisgICAgICBuZXcgUnVubmFibGUoKSB7CisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgdm9pZCBydW4oKSB7CisgICAgICAgICAgZm9vKEZvby50aGlzKTsKKyAgICAgICAgfQorICAgICAgfS5ydW4oKTsKKyAgICB9CisgIH0KK30KKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9xdWFsaWZ5VGhpcy9iZWZvcmUxLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3F1YWxpZnlUaGlzL2JlZm9yZTEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNGE5ODMzCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9xdWFsaWZ5VGhpcy9iZWZvcmUxLmphdmEKQEAgLTAsMCArMSwxMCBAQAorLy8gIlF1YWxpZnkgdGhpcyBleHByZXNzaW9uIHdpdGggJ1Rlc3QnIiAidHJ1ZSIKK2NsYXNzIFRlc3QgeworICB2b2lkIGZvbyhUZXN0IHQpe30KKyAgY2xhc3MgRm9vIHsKKyAgICBGb28oKSB7CisgICAgICBmb28odGhpPGNhcmV0PnMpOworICAgIH0KKyAgfQorfQorCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3F1YWxpZnlUaGlzL2JlZm9yZTIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvcXVhbGlmeVRoaXMvYmVmb3JlMi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEzZjZhYWMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3F1YWxpZnlUaGlzL2JlZm9yZTIuamF2YQpAQCAtMCwwICsxLDEwIEBACisvLyAiUXVhbGlmeSB0aGlzIGV4cHJlc3Npb24gd2l0aCAnVGVzdCciICJmYWxzZSIKK2NsYXNzIFRlc3QgeworICB2b2lkIGZvbyhUZXN0IHQpe30KKyAgc3RhdGljIGNsYXNzIEZvbyB7CisgICAgRm9vKCkgeworICAgICAgZm9vKHRoaTxjYXJldD5zKTsKKyAgICB9CisgIH0KK30KKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9xdWFsaWZ5VGhpcy9iZWZvcmUzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3F1YWxpZnlUaGlzL2JlZm9yZTMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNzk0YjlkCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9xdWFsaWZ5VGhpcy9iZWZvcmUzLmphdmEKQEAgLTAsMCArMSwxMCBAQAorLy8gIlF1YWxpZnkgdGhpcyBleHByZXNzaW9uIHdpdGggJ1Rlc3QnIiAiZmFsc2UiCitjbGFzcyBUZXN0IHsKKyAgdm9pZCBmb28oU3RyaW5nIHQpe30KKyAgc3RhdGljIGNsYXNzIEZvbyB7CisgICAgRm9vKCkgeworICAgICAgZm9vKHRoaTxjYXJldD5zKTsKKyAgICB9CisgIH0KK30KKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9xdWFsaWZ5VGhpcy9iZWZvcmU0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3F1YWxpZnlUaGlzL2JlZm9yZTQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOTczYTM2Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9xdWFsaWZ5VGhpcy9iZWZvcmU0LmphdmEKQEAgLTAsMCArMSwyNCBAQAorLy8gIlF1YWxpZnkgdGhpcyBleHByZXNzaW9uIHdpdGggJ1Rlc3QuRm9vJyIgImZhbHNlIgorY2xhc3MgVGVzdCB7CisgIHB1YmxpYyB2b2lkIG1haW4oKSB7CisgICAgbmV3IEZvbygpIHsKKyAgICAgIHZvaWQgYmFyKCkgeworICAgICAgICBuZXcgUnVubmFibGUoKSB7CisgICAgICAgICAgQE92ZXJyaWRlCisgICAgICAgICAgcHVibGljIHZvaWQgcnVuKCkgeworICAgICAgICAgICAgZm9vKHRoPGNhcmV0PmlzKTsKKyAgICAgICAgICB9CisgICAgICAgIH0ucnVuKCk7CisgICAgICB9CisgICAgfS50b1N0cmluZygpOworICB9CisKKyAgdm9pZCBmb28oRm9vIG0pIHsKKyAgfQorCisKKyAgY2xhc3MgRm9vIHsKKworICB9Cit9CisKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvcXVhbGlmeVRoaXMvYmVmb3JlNS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9xdWFsaWZ5VGhpcy9iZWZvcmU1LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzU3MTc0ZAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvcXVhbGlmeVRoaXMvYmVmb3JlNS5qYXZhCkBAIC0wLDAgKzEsMTggQEAKKy8vICJRdWFsaWZ5IHRoaXMgZXhwcmVzc2lvbiB3aXRoICdUZXN0LkZvbyciICJ0cnVlIgorY2xhc3MgVGVzdCB7CisgIHZvaWQgZm9vKEZvbyBtKSB7CisgIH0KKworCisgIGNsYXNzIEZvbyB7CisgICAgdm9pZCBiYXIoKSB7CisgICAgICBuZXcgUnVubmFibGUoKSB7CisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgdm9pZCBydW4oKSB7CisgICAgICAgICAgZm9vKHRoPGNhcmV0PmlzKTsKKyAgICAgICAgfQorICAgICAgfS5ydW4oKTsKKyAgICB9CisgIH0KK30KKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9xdWFsaWZ5V2l0aFRoaXNJblN1cGVyQ2FsbC9hZnRlclF1YWxpZnlXaXRoVGhpcy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9xdWFsaWZ5V2l0aFRoaXNJblN1cGVyQ2FsbC9hZnRlclF1YWxpZnlXaXRoVGhpcy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNhNTE4NjIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3F1YWxpZnlXaXRoVGhpc0luU3VwZXJDYWxsL2FmdGVyUXVhbGlmeVdpdGhUaGlzLmphdmEKQEAgLTAsMCArMSwxNSBAQAorLy8gIlF1YWxpZnkgd2l0aCBUZXN0LnRoaXMiICJ0cnVlIgorY2xhc3MgVGVzdCB7CisgIFN0cmluZyBteVN0cjsKKyAgY2xhc3MgRm9vIGV4dGVuZHMgU3VwZXIgeworICAgIEZvbygpIHsKKyAgICAgIHN1cGVyKFRlc3QudGhpcy5teVN0cik7CisgICAgfQorICB9Cit9CisKK2NsYXNzIFN1cGVyIHsKKyAgcHJvdGVjdGVkIFN0cmluZyBteVN0cjsKKyAgU3VwZXIoU3RyaW5nIHMpIHsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvcXVhbGlmeVdpdGhUaGlzSW5TdXBlckNhbGwvYmVmb3JlQWxyZWFkeVF1YWxpZmllZC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9xdWFsaWZ5V2l0aFRoaXNJblN1cGVyQ2FsbC9iZWZvcmVBbHJlYWR5UXVhbGlmaWVkLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTE2YjQyOQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvcXVhbGlmeVdpdGhUaGlzSW5TdXBlckNhbGwvYmVmb3JlQWxyZWFkeVF1YWxpZmllZC5qYXZhCkBAIC0wLDAgKzEsMTUgQEAKKy8vICJRdWFsaWZ5IHdpdGggVGVzdC50aGlzIiAiZmFsc2UiCitjbGFzcyBUZXN0IHsKKyAgU3RyaW5nIG15U3RyOworICBjbGFzcyBGb28gZXh0ZW5kcyBTdXBlciB7CisgICAgRm9vKFRlc3QgdCkgeworICAgICAgc3VwZXIodC5teTxjYXJldD5TdHIpOworICAgIH0KKyAgfQorfQorCitjbGFzcyBTdXBlciB7CisgIHByb3RlY3RlZCBTdHJpbmcgbXlTdHI7CisgIFN1cGVyKFN0cmluZyBzKSB7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3F1YWxpZnlXaXRoVGhpc0luU3VwZXJDYWxsL2JlZm9yZU5vQ2FuZGlkYXRlLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3F1YWxpZnlXaXRoVGhpc0luU3VwZXJDYWxsL2JlZm9yZU5vQ2FuZGlkYXRlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGViZDA0MwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvcXVhbGlmeVdpdGhUaGlzSW5TdXBlckNhbGwvYmVmb3JlTm9DYW5kaWRhdGUuamF2YQpAQCAtMCwwICsxLDE0IEBACisvLyAiUXVhbGlmeSB3aXRoIFRlc3QudGhpcyIgImZhbHNlIgorY2xhc3MgVGVzdCB7CisgIGNsYXNzIEZvbyBleHRlbmRzIFN1cGVyIHsKKyAgICBGb28oKSB7CisgICAgICBzdXBlcihteTxjYXJldD5TdHIpOworICAgIH0KKyAgfQorfQorCitjbGFzcyBTdXBlciB7CisgIHByb3RlY3RlZCBTdHJpbmcgbXlTdHI7CisgIFN1cGVyKFN0cmluZyBzKSB7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3F1YWxpZnlXaXRoVGhpc0luU3VwZXJDYWxsL2JlZm9yZVF1YWxpZnlXaXRoVGhpcy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9xdWFsaWZ5V2l0aFRoaXNJblN1cGVyQ2FsbC9iZWZvcmVRdWFsaWZ5V2l0aFRoaXMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZDU3OWFhCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9xdWFsaWZ5V2l0aFRoaXNJblN1cGVyQ2FsbC9iZWZvcmVRdWFsaWZ5V2l0aFRoaXMuamF2YQpAQCAtMCwwICsxLDE1IEBACisvLyAiUXVhbGlmeSB3aXRoIFRlc3QudGhpcyIgInRydWUiCitjbGFzcyBUZXN0IHsKKyAgU3RyaW5nIG15U3RyOworICBjbGFzcyBGb28gZXh0ZW5kcyBTdXBlciB7CisgICAgRm9vKCkgeworICAgICAgc3VwZXIobXk8Y2FyZXQ+U3RyKTsKKyAgICB9CisgIH0KK30KKworY2xhc3MgU3VwZXIgeworICBwcm90ZWN0ZWQgU3RyaW5nIG15U3RyOworICBTdXBlcihTdHJpbmcgcykgeworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9xdWFsaWZ5V2l0aFRoaXNJblN1cGVyQ2FsbC9iZWZvcmVUaGlzSW5hY2Nlc3NpYmxlLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3F1YWxpZnlXaXRoVGhpc0luU3VwZXJDYWxsL2JlZm9yZVRoaXNJbmFjY2Vzc2libGUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYTViYTUwCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9xdWFsaWZ5V2l0aFRoaXNJblN1cGVyQ2FsbC9iZWZvcmVUaGlzSW5hY2Nlc3NpYmxlLmphdmEKQEAgLTAsMCArMSwxNSBAQAorLy8gIlF1YWxpZnkgd2l0aCBUZXN0LnRoaXMiICJmYWxzZSIKK2NsYXNzIFRlc3QgeworICBTdHJpbmcgbXlTdHI7CisgIHN0YXRpYyBjbGFzcyBGb28gZXh0ZW5kcyBTdXBlciB7CisgICAgRm9vKCkgeworICAgICAgc3VwZXIobXk8Y2FyZXQ+U3RyKTsKKyAgICB9CisgIH0KK30KKworY2xhc3MgU3VwZXIgeworICBwcm90ZWN0ZWQgU3RyaW5nIG15U3RyOworICBTdXBlcihTdHJpbmcgcykgeworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9yZWR1bmRhbnRMYW1iZGFQYXJhbWV0ZXJUeXBlL2FmdGVyQXNzaWdubWVudC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9yZWR1bmRhbnRMYW1iZGFQYXJhbWV0ZXJUeXBlL2FmdGVyQXNzaWdubWVudC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRkOTA1NWUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3JlZHVuZGFudExhbWJkYVBhcmFtZXRlclR5cGUvYWZ0ZXJBc3NpZ25tZW50LmphdmEKQEAgLTAsMCArMSw2IEBACisvLyAiUmVtb3ZlIHJlZHVuZGFudCB0eXBlcyIgInRydWUiCitjbGFzcyBUZXN0IHsKKyAgeworICAgIENvbXBhcmFibGU8U3RyaW5nPiByID0gbyAtPiAxOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9yZWR1bmRhbnRMYW1iZGFQYXJhbWV0ZXJUeXBlL2FmdGVyQ2FsbFdpdGhUeXBlQXJncy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9yZWR1bmRhbnRMYW1iZGFQYXJhbWV0ZXJUeXBlL2FmdGVyQ2FsbFdpdGhUeXBlQXJncy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUxYjYxOTUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3JlZHVuZGFudExhbWJkYVBhcmFtZXRlclR5cGUvYWZ0ZXJDYWxsV2l0aFR5cGVBcmdzLmphdmEKQEAgLTAsMCArMSwxNiBAQAorLy8gIlJlbW92ZSByZWR1bmRhbnQgdHlwZXMiICJ0cnVlIgorY2xhc3MgVGVzdDIgeworICAgIGNsYXNzIFk8VD57CisgICAgICAgIFQgdDsKKyAgICB9CisKKyAgICBpbnRlcmZhY2UgSTxYPiB7CisgICAgICAgIFggZm9vKFk8WD4gbGlzdCk7CisgICAgfQorCisgICAgc3RhdGljIDxUPiBJPFQ+IGJhcihJPFQ+IGkpe3JldHVybiBpO30KKworICAgIHsKKyAgICAgICAgVGVzdDIuPFN0cmluZz5iYXIoeSAtPiB5LnQpOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3JlZHVuZGFudExhbWJkYVBhcmFtZXRlclR5cGUvYWZ0ZXJJbmZlcnJlZEZyb21PdGhlckFyZ3MuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvcmVkdW5kYW50TGFtYmRhUGFyYW1ldGVyVHlwZS9hZnRlckluZmVycmVkRnJvbU90aGVyQXJncy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBiNGM1NmEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3JlZHVuZGFudExhbWJkYVBhcmFtZXRlclR5cGUvYWZ0ZXJJbmZlcnJlZEZyb21PdGhlckFyZ3MuamF2YQpAQCAtMCwwICsxLDE1IEBACisvLyAiUmVtb3ZlIHJlZHVuZGFudCB0eXBlcyIgInRydWUiCitjbGFzcyBSZXR1cm5UeXBlQ29tcGF0aWJpbGl0eSB7CisKKyAgICBpbnRlcmZhY2UgSTE8TD4geworICAgICAgICBMIG0oTCB4KTsKKyAgICB9CisKKyAgICBzdGF0aWMgPFA+IHZvaWQgY2FsbChQIHAsIEkxPFA+IGkyKSB7CisgICAgICAgIGkyLm0obnVsbCk7CisgICAgfQorCisgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworICAgICAgICBjYWxsKCIiLCAgaSAtPiAiIik7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvcmVkdW5kYW50TGFtYmRhUGFyYW1ldGVyVHlwZS9iZWZvcmVBc3NpZ25tZW50LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3JlZHVuZGFudExhbWJkYVBhcmFtZXRlclR5cGUvYmVmb3JlQXNzaWdubWVudC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM1ZjE2YzcKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3JlZHVuZGFudExhbWJkYVBhcmFtZXRlclR5cGUvYmVmb3JlQXNzaWdubWVudC5qYXZhCkBAIC0wLDAgKzEsNiBAQAorLy8gIlJlbW92ZSByZWR1bmRhbnQgdHlwZXMiICJ0cnVlIgorY2xhc3MgVGVzdCB7CisgIHsKKyAgICBDb21wYXJhYmxlPFN0cmluZz4gciA9IChTdDxjYXJldD5yaW5nIG8pIC0+IDE7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3JlZHVuZGFudExhbWJkYVBhcmFtZXRlclR5cGUvYmVmb3JlQXNzaWdubWVudE5vUGFyYW1zLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3JlZHVuZGFudExhbWJkYVBhcmFtZXRlclR5cGUvYmVmb3JlQXNzaWdubWVudE5vUGFyYW1zLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWFhODVlNAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvcmVkdW5kYW50TGFtYmRhUGFyYW1ldGVyVHlwZS9iZWZvcmVBc3NpZ25tZW50Tm9QYXJhbXMuamF2YQpAQCAtMCwwICsxLDYgQEAKKy8vICJSZW1vdmUgcmVkdW5kYW50IHR5cGVzIiAiZmFsc2UiCitjbGFzcyBUZXN0IHsKKyAgeworICAgIFJ1bm5hYmxlIHIgPSAoPGNhcmV0PikgLT4ge307CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3JlZHVuZGFudExhbWJkYVBhcmFtZXRlclR5cGUvYmVmb3JlQXNzaWdubWVudE5vVHlwZXMuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvcmVkdW5kYW50TGFtYmRhUGFyYW1ldGVyVHlwZS9iZWZvcmVBc3NpZ25tZW50Tm9UeXBlcy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmViZTlmMjkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3JlZHVuZGFudExhbWJkYVBhcmFtZXRlclR5cGUvYmVmb3JlQXNzaWdubWVudE5vVHlwZXMuamF2YQpAQCAtMCwwICsxLDYgQEAKKy8vICJSZW1vdmUgcmVkdW5kYW50IHR5cGVzIiAiZmFsc2UiCitjbGFzcyBUZXN0IHsKKyAgeworICAgIENvbXBhcmFibGU8U3RyaW5nPiByID0gPGNhcmV0Pm8gLT4gMTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvcmVkdW5kYW50TGFtYmRhUGFyYW1ldGVyVHlwZS9iZWZvcmVDYWxsTm9UeXBlQXJncy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9yZWR1bmRhbnRMYW1iZGFQYXJhbWV0ZXJUeXBlL2JlZm9yZUNhbGxOb1R5cGVBcmdzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDk0ZGJiZQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvcmVkdW5kYW50TGFtYmRhUGFyYW1ldGVyVHlwZS9iZWZvcmVDYWxsTm9UeXBlQXJncy5qYXZhCkBAIC0wLDAgKzEsMTYgQEAKKy8vICJSZW1vdmUgcmVkdW5kYW50IHR5cGVzIiAiZmFsc2UiCitjbGFzcyBUZXN0MiB7CisgICAgY2xhc3MgWTxUPnsKKyAgICAgICAgVCB0OworICAgIH0KKworICAgIGludGVyZmFjZSBJPFg+IHsKKyAgICAgICAgWCBmb28oWTxYPiBsaXN0KTsKKyAgICB9CisKKyAgICBzdGF0aWMgPFQ+IEk8VD4gYmFyKEk8VD4gaSl7cmV0dXJuIGk7fQorCisgICAgeworICAgICAgICBUZXN0Mi5iYXIoKFk8U3Q8Y2FyZXQ+cmluZz4geSkgLT4geS50KTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9yZWR1bmRhbnRMYW1iZGFQYXJhbWV0ZXJUeXBlL2JlZm9yZUNhbGxOb1R5cGVBcmdzMS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9yZWR1bmRhbnRMYW1iZGFQYXJhbWV0ZXJUeXBlL2JlZm9yZUNhbGxOb1R5cGVBcmdzMS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY0ZWI2ZTIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3JlZHVuZGFudExhbWJkYVBhcmFtZXRlclR5cGUvYmVmb3JlQ2FsbE5vVHlwZUFyZ3MxLmphdmEKQEAgLTAsMCArMSwxMyBAQAorLy8gIlJlbW92ZSByZWR1bmRhbnQgdHlwZXMiICJmYWxzZSIKK2NsYXNzIE5vSW5mZXJlbmNlUmVzdWx0IHsKKyAgICBpbnRlcmZhY2UgSTxBLCBCPiAgeworICAgICAgQiBmb28oQSBhKTsKKyAgICB9CisKKyAgICA8QSwgQj4gSTxBLCBCPiBtKEk8QSwgQj4gIGYpIHsgcmV0dXJuIG51bGw7IH0KKworICAgIHZvaWQgdGVzdCgpIHsKKyAgICAgICAgbSgoU3RyaTxjYXJldD5uZyBzMSkgLT4gczEubGVuZ3RoKCkpOworICAgICAgICBtKChTdHJpbmcgczEpIC0+IHMxKTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9yZWR1bmRhbnRMYW1iZGFQYXJhbWV0ZXJUeXBlL2JlZm9yZUNhbGxXaXRoVHlwZUFyZ3MuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvcmVkdW5kYW50TGFtYmRhUGFyYW1ldGVyVHlwZS9iZWZvcmVDYWxsV2l0aFR5cGVBcmdzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2E0OGQ1ZAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvcmVkdW5kYW50TGFtYmRhUGFyYW1ldGVyVHlwZS9iZWZvcmVDYWxsV2l0aFR5cGVBcmdzLmphdmEKQEAgLTAsMCArMSwxNiBAQAorLy8gIlJlbW92ZSByZWR1bmRhbnQgdHlwZXMiICJ0cnVlIgorY2xhc3MgVGVzdDIgeworICAgIGNsYXNzIFk8VD57CisgICAgICAgIFQgdDsKKyAgICB9CisKKyAgICBpbnRlcmZhY2UgSTxYPiB7CisgICAgICAgIFggZm9vKFk8WD4gbGlzdCk7CisgICAgfQorCisgICAgc3RhdGljIDxUPiBJPFQ+IGJhcihJPFQ+IGkpe3JldHVybiBpO30KKworICAgIHsKKyAgICAgICAgVGVzdDIuPFN0cmluZz5iYXIoKFk8U3Q8Y2FyZXQ+cmluZz4geSkgLT4geS50KTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9yZWR1bmRhbnRMYW1iZGFQYXJhbWV0ZXJUeXBlL2JlZm9yZUluZmVycmVkRnJvbU90aGVyQXJncy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9yZWR1bmRhbnRMYW1iZGFQYXJhbWV0ZXJUeXBlL2JlZm9yZUluZmVycmVkRnJvbU90aGVyQXJncy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFiZjcyMjgKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3JlZHVuZGFudExhbWJkYVBhcmFtZXRlclR5cGUvYmVmb3JlSW5mZXJyZWRGcm9tT3RoZXJBcmdzLmphdmEKQEAgLTAsMCArMSwxNSBAQAorLy8gIlJlbW92ZSByZWR1bmRhbnQgdHlwZXMiICJ0cnVlIgorY2xhc3MgUmV0dXJuVHlwZUNvbXBhdGliaWxpdHkgeworCisgICAgaW50ZXJmYWNlIEkxPEw+IHsKKyAgICAgICAgTCBtKEwgeCk7CisgICAgfQorCisgICAgc3RhdGljIDxQPiB2b2lkIGNhbGwoUCBwLCBJMTxQPiBpMikgeworICAgICAgICBpMi5tKG51bGwpOworICAgIH0KKworICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKyAgICAgICAgY2FsbCgiIiwgIChTdHI8Y2FyZXQ+aW5nICBpKSAtPiAiIik7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvcmVkdW5kYW50TGFtYmRhUGFyYW1ldGVyVHlwZS9iZWZvcmVUeXBlUGFyYW0uamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvcmVkdW5kYW50TGFtYmRhUGFyYW1ldGVyVHlwZS9iZWZvcmVUeXBlUGFyYW0uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZTQ4MWJiCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9yZWR1bmRhbnRMYW1iZGFQYXJhbWV0ZXJUeXBlL2JlZm9yZVR5cGVQYXJhbS5qYXZhCkBAIC0wLDAgKzEsMTAgQEAKKy8vICJSZW1vdmUgcmVkdW5kYW50IHR5cGVzIiAiZmFsc2UiCitjbGFzcyBUZXN0MyB7CisgIGludGVyZmFjZSBJPFk+IHsKKyAgICB2b2lkIG0oWSB5KTsKKyAgfQorCisgIHN0YXRpYyA8VD4gdm9pZCBiYXIoSTxUPiBpLCBMaXN0PFQ+IGwpeworICAgIGJhcigoPGNhcmV0PlQgeCkgLT4ge30sIG51bGwpOworICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3JlZHVuZGFudFVuY2hlY2tlZFZhcmFyZ3MvYWZ0ZXIxLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3JlZHVuZGFudFVuY2hlY2tlZFZhcmFyZ3MvYWZ0ZXIxLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTE2ZmY3OQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvcmVkdW5kYW50VW5jaGVja2VkVmFyYXJncy9hZnRlcjEuamF2YQpAQCAtMCwwICsxLDEzIEBACisvLyAiUmVtb3ZlICd1bmNoZWNrZWQnIHN1cHByZXNzaW9uIiAidHJ1ZSIKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworCitwdWJsaWMgY2xhc3MgVGVzdCB7CisgIEBTYWZlVmFyYXJncworICBzdGF0aWMgPFQ+IHZvaWQgZm9vKFQuLi4gdCl7CisgIH0KKworICB2b2lkIGZvbygpIHsKKyAgICAgIGZvbyhuZXcgQXJyYXlMaXN0PFN0cmluZz4oKSk7CisgIH0KK30KKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9yZWR1bmRhbnRVbmNoZWNrZWRWYXJhcmdzL2FmdGVyMi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9yZWR1bmRhbnRVbmNoZWNrZWRWYXJhcmdzL2FmdGVyMi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM2OWNhMzcKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3JlZHVuZGFudFVuY2hlY2tlZFZhcmFyZ3MvYWZ0ZXIyLmphdmEKQEAgLTAsMCArMSwxNCBAQAorLy8gIlJlbW92ZSAndW5jaGVja2VkJyBzdXBwcmVzc2lvbiIgInRydWUiCitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKKworcHVibGljIGNsYXNzIFRlc3QgeworICBAU2FmZVZhcmFyZ3MKKyAgc3RhdGljIDxUPiB2b2lkIGZvbyhULi4uIHQpeworICB9CisKKyAgdm9pZCBmb28oKSB7CisgICAgICAvLyBub2luc3BlY3Rpb24gYmxhaC1ibGFoLXRvb2xpZAorICAgIGZvbyhuZXcgQXJyYXlMaXN0PFN0cmluZz4oKSk7CisgIH0KK30KKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9yZWR1bmRhbnRVbmNoZWNrZWRWYXJhcmdzL2FmdGVyNC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9yZWR1bmRhbnRVbmNoZWNrZWRWYXJhcmdzL2FmdGVyNC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBjMWE2OTUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3JlZHVuZGFudFVuY2hlY2tlZFZhcmFyZ3MvYWZ0ZXI0LmphdmEKQEAgLTAsMCArMSwxNCBAQAorLy8gIlJlbW92ZSAndW5jaGVja2VkJyBzdXBwcmVzc2lvbiIgInRydWUiCitpbXBvcnQgamF2YS51dGlsLio7CisKK3B1YmxpYyBjbGFzcyBUZXN0IHsKKyAgQFNhZmVWYXJhcmdzCisgIHN0YXRpYyA8VD4gTGlzdDxUPiBmb28oVC4uLiB0KXsKKyAgICByZXR1cm4gbnVsbDsKKyAgfQorCisgIHZvaWQgZm9vKCkgeworICAgICAgTGlzdDxBcnJheUxpc3Q8U3RyaW5nPj4gbGlzdCA9IGZvbyhuZXcgQXJyYXlMaXN0PFN0cmluZz4oKSk7CisgIH0KK30KKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9yZWR1bmRhbnRVbmNoZWNrZWRWYXJhcmdzL2FmdGVyNS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9yZWR1bmRhbnRVbmNoZWNrZWRWYXJhcmdzL2FmdGVyNS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU1OWVhYzQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3JlZHVuZGFudFVuY2hlY2tlZFZhcmFyZ3MvYWZ0ZXI1LmphdmEKQEAgLTAsMCArMSwxNCBAQAorLy8gIlJlbW92ZSAndW5jaGVja2VkJyBzdXBwcmVzc2lvbiIgInRydWUiCitpbXBvcnQgamF2YS51dGlsLio7CisKK3B1YmxpYyBjbGFzcyBUZXN0IHsKKyAgQFNhZmVWYXJhcmdzCisgIHN0YXRpYyA8VD4gTGlzdDxUPiBmb28oVC4uLiB0KXsKKyAgICByZXR1cm4gbnVsbDsKKyAgfQorCisgIHZvaWQgZm9vKCkgeworICAgIExpc3Q8QXJyYXlMaXN0PFN0cmluZz4+IGxpc3QgPSBmb28obmV3IEFycmF5TGlzdDxTdHJpbmc+KCkpOworICB9Cit9CisKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvcmVkdW5kYW50VW5jaGVja2VkVmFyYXJncy9hZnRlcjYuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvcmVkdW5kYW50VW5jaGVja2VkVmFyYXJncy9hZnRlcjYuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNTllYWM0Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9yZWR1bmRhbnRVbmNoZWNrZWRWYXJhcmdzL2FmdGVyNi5qYXZhCkBAIC0wLDAgKzEsMTQgQEAKKy8vICJSZW1vdmUgJ3VuY2hlY2tlZCcgc3VwcHJlc3Npb24iICJ0cnVlIgoraW1wb3J0IGphdmEudXRpbC4qOworCitwdWJsaWMgY2xhc3MgVGVzdCB7CisgIEBTYWZlVmFyYXJncworICBzdGF0aWMgPFQ+IExpc3Q8VD4gZm9vKFQuLi4gdCl7CisgICAgcmV0dXJuIG51bGw7CisgIH0KKworICB2b2lkIGZvbygpIHsKKyAgICBMaXN0PEFycmF5TGlzdDxTdHJpbmc+PiBsaXN0ID0gZm9vKG5ldyBBcnJheUxpc3Q8U3RyaW5nPigpKTsKKyAgfQorfQorCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3JlZHVuZGFudFVuY2hlY2tlZFZhcmFyZ3MvYWZ0ZXI5LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3JlZHVuZGFudFVuY2hlY2tlZFZhcmFyZ3MvYWZ0ZXI5LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2E0YmI2ZAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvcmVkdW5kYW50VW5jaGVja2VkVmFyYXJncy9hZnRlcjkuamF2YQpAQCAtMCwwICsxLDE1IEBACisvLyAiUmVtb3ZlICd1bmNoZWNrZWQnIHN1cHByZXNzaW9uIiAidHJ1ZSIKK2ltcG9ydCBqYXZhLnV0aWwuKjsKKworQFN1cHByZXNzV2FybmluZ3MoeyJibGEtYmxhaC10b29saWQifSkKK3B1YmxpYyBjbGFzcyBUZXN0IHsKKyAgQFNhZmVWYXJhcmdzCisgIHN0YXRpYyA8VD4gTGlzdDxUPiBmb28oVC4uLiB0KXsKKyAgICByZXR1cm4gbnVsbDsKKyAgfQorCisgIHZvaWQgZm9vKCkgeworICAgIExpc3Q8QXJyYXlMaXN0PFN0cmluZz4+IGxpc3QgPSBmb28obmV3IEFycmF5TGlzdDxTdHJpbmc+KCkpOworICB9Cit9CisKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvcmVkdW5kYW50VW5jaGVja2VkVmFyYXJncy9iZWZvcmUxLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3JlZHVuZGFudFVuY2hlY2tlZFZhcmFyZ3MvYmVmb3JlMS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU4Nzk0MGUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3JlZHVuZGFudFVuY2hlY2tlZFZhcmFyZ3MvYmVmb3JlMS5qYXZhCkBAIC0wLDAgKzEsMTQgQEAKKy8vICJSZW1vdmUgJ3VuY2hlY2tlZCcgc3VwcHJlc3Npb24iICJ0cnVlIgoraW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CisKK3B1YmxpYyBjbGFzcyBUZXN0IHsKKyAgQFNhZmVWYXJhcmdzCisgIHN0YXRpYyA8VD4gdm9pZCBmb28oVC4uLiB0KXsKKyAgfQorCisgIHZvaWQgZm88Y2FyZXQ+bygpIHsKKyAgICAvL25vaW5zcGVjdGlvbiB1bmNoZWNrZWQKKyAgICBmb28obmV3IEFycmF5TGlzdDxTdHJpbmc+KCkpOworICB9Cit9CisKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvcmVkdW5kYW50VW5jaGVja2VkVmFyYXJncy9iZWZvcmUxMC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9yZWR1bmRhbnRVbmNoZWNrZWRWYXJhcmdzL2JlZm9yZTEwLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2RjODQ5MzAKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3JlZHVuZGFudFVuY2hlY2tlZFZhcmFyZ3MvYmVmb3JlMTAuamF2YQpAQCAtMCwwICsxLDExIEBACisvLyAiUmVtb3ZlICd1bmNoZWNrZWQnIHN1cHByZXNzaW9uIiAiZmFsc2UiCisKK0BTdXBwcmVzc1dhcm5pbmdzKHsidW5jaGVja2VkIiwgImJsYS1ibGFoLXRvb2xpZCJ9KQorcHVibGljIGVudW0gUGxhbmV0IHsKKyAgTUVSQ1VSWSgpLAorICBWRU5VUygpOworCisgIDxUPiBQbGFuPGNhcmV0PmV0KFQuLi4gdHMpIHsKKyAgfQorCit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3JlZHVuZGFudFVuY2hlY2tlZFZhcmFyZ3MvYmVmb3JlMTEuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvcmVkdW5kYW50VW5jaGVja2VkVmFyYXJncy9iZWZvcmUxMS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg0N2FlMmIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3JlZHVuZGFudFVuY2hlY2tlZFZhcmFyZ3MvYmVmb3JlMTEuamF2YQpAQCAtMCwwICsxLDE5IEBACisvLyAiUmVtb3ZlICd1bmNoZWNrZWQnIHN1cHByZXNzaW9uIiAiZmFsc2UiCitpbXBvcnQgamF2YS51dGlsLio7CisKK3B1YmxpYyBjbGFzcyBTYW1wbGVTYWZlVmFyYXJncyB7CisKKyAgICBAU2FmZVZhcmFyZ3MKKyAgICBzdGF0aWMgPFQ+IExpc3Q8VD4gYXNMaXN0KFQuLi4gdHQpIHsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKHR0KTsKKyAgICAgICAgcmV0dXJuIG51bGw7CisgICAgfQorCisgICAgQFN1cHByZXNzV2FybmluZ3MoeyJ1bmNoZWNrZWQifSkKKyAgICB2b2lkIGZvbygpIHsKKyAgICAgICAgYXNMaXN0KG5ldyBBcnJheUxpc3Q8U3RyaW5nPigpKTsKKyAgICAgICAgTGlzdDxPYmplY3Q+IGwgOworICAgICAgICBBcnJheUxpc3Qgc3RyaW5ncyA9IG5ldyBBcnJheUxpc3Q8U3RyaW5nPigpOworICAgICAgICBsID0gc3RyaW5nczsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3JlZHVuZGFudFVuY2hlY2tlZFZhcmFyZ3MvYmVmb3JlMi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9yZWR1bmRhbnRVbmNoZWNrZWRWYXJhcmdzL2JlZm9yZTIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MzczNTFhCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9yZWR1bmRhbnRVbmNoZWNrZWRWYXJhcmdzL2JlZm9yZTIuamF2YQpAQCAtMCwwICsxLDE0IEBACisvLyAiUmVtb3ZlICd1bmNoZWNrZWQnIHN1cHByZXNzaW9uIiAidHJ1ZSIKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworCitwdWJsaWMgY2xhc3MgVGVzdCB7CisgIEBTYWZlVmFyYXJncworICBzdGF0aWMgPFQ+IHZvaWQgZm9vKFQuLi4gdCl7CisgIH0KKworICB2b2lkIGY8Y2FyZXQ+b28oKSB7CisgICAgLy9ub2luc3BlY3Rpb24gdW5jaGVja2VkLGJsYWgtYmxhaC10b29saWQKKyAgICBmb28obmV3IEFycmF5TGlzdDxTdHJpbmc+KCkpOworICB9Cit9CisKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvcmVkdW5kYW50VW5jaGVja2VkVmFyYXJncy9iZWZvcmUzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3JlZHVuZGFudFVuY2hlY2tlZFZhcmFyZ3MvYmVmb3JlMy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI0MTA3Y2YKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3JlZHVuZGFudFVuY2hlY2tlZFZhcmFyZ3MvYmVmb3JlMy5qYXZhCkBAIC0wLDAgKzEsMTkgQEAKKy8vICJSZW1vdmUgJ3VuY2hlY2tlZCcgc3VwcHJlc3Npb24iICJmYWxzZSIKK2ltcG9ydCBqYXZhLnV0aWwuKjsKKworcHVibGljIGNsYXNzIFRlc3QgeworICBAU2FmZVZhcmFyZ3MKKyAgc3RhdGljIDxUPiBMaXN0PFQ+IGZvbyhULi4uIHQpeworICAgIHJldHVybiBudWxsOworICB9CisKKyAgc3RhdGljIDxUPiBMaXN0PFQ+IGZvbzEoVC4uLiB0KXsKKyAgICByZXR1cm4gbnVsbDsKKyAgfQorCisgIHZvaWQgZm88Y2FyZXQ+bygpIHsKKyAgICAvL25vaW5zcGVjdGlvbiB1bmNoZWNrZWQKKyAgICBmb28obmV3IEFycmF5TGlzdDxTdHJpbmc+KCkpLmFkZEFsbChmb28xKG5ldyBBcnJheUxpc3Q8U3RyaW5nPigpKSk7CisgIH0KK30KKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9yZWR1bmRhbnRVbmNoZWNrZWRWYXJhcmdzL2JlZm9yZTQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvcmVkdW5kYW50VW5jaGVja2VkVmFyYXJncy9iZWZvcmU0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTZkYzUxZAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvcmVkdW5kYW50VW5jaGVja2VkVmFyYXJncy9iZWZvcmU0LmphdmEKQEAgLTAsMCArMSwxNSBAQAorLy8gIlJlbW92ZSAndW5jaGVja2VkJyBzdXBwcmVzc2lvbiIgInRydWUiCitpbXBvcnQgamF2YS51dGlsLio7CisKK3B1YmxpYyBjbGFzcyBUZXN0IHsKKyAgQFNhZmVWYXJhcmdzCisgIHN0YXRpYyA8VD4gTGlzdDxUPiBmb28oVC4uLiB0KXsKKyAgICByZXR1cm4gbnVsbDsKKyAgfQorCisgIHZvaWQgZm88Y2FyZXQ+bygpIHsKKyAgICAvL25vaW5zcGVjdGlvbiB1bmNoZWNrZWQKKyAgICBMaXN0PEFycmF5TGlzdDxTdHJpbmc+PiBsaXN0ID0gZm9vKG5ldyBBcnJheUxpc3Q8U3RyaW5nPigpKTsKKyAgfQorfQorCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3JlZHVuZGFudFVuY2hlY2tlZFZhcmFyZ3MvYmVmb3JlNS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9yZWR1bmRhbnRVbmNoZWNrZWRWYXJhcmdzL2JlZm9yZTUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMjk0ZDJkCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9yZWR1bmRhbnRVbmNoZWNrZWRWYXJhcmdzL2JlZm9yZTUuamF2YQpAQCAtMCwwICsxLDE1IEBACisvLyAiUmVtb3ZlICd1bmNoZWNrZWQnIHN1cHByZXNzaW9uIiAidHJ1ZSIKK2ltcG9ydCBqYXZhLnV0aWwuKjsKKworcHVibGljIGNsYXNzIFRlc3QgeworICBAU2FmZVZhcmFyZ3MKKyAgc3RhdGljIDxUPiBMaXN0PFQ+IGZvbyhULi4uIHQpeworICAgIHJldHVybiBudWxsOworICB9CisKKyAgQFN1cHByZXNzV2FybmluZ3MoInVuY2hlY2tlZCIpCisgIHZvaWQgZm88Y2FyZXQ+bygpIHsKKyAgICBMaXN0PEFycmF5TGlzdDxTdHJpbmc+PiBsaXN0ID0gZm9vKG5ldyBBcnJheUxpc3Q8U3RyaW5nPigpKTsKKyAgfQorfQorCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3JlZHVuZGFudFVuY2hlY2tlZFZhcmFyZ3MvYmVmb3JlNi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9yZWR1bmRhbnRVbmNoZWNrZWRWYXJhcmdzL2JlZm9yZTYuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MGY0MjY4Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9yZWR1bmRhbnRVbmNoZWNrZWRWYXJhcmdzL2JlZm9yZTYuamF2YQpAQCAtMCwwICsxLDE1IEBACisvLyAiUmVtb3ZlICd1bmNoZWNrZWQnIHN1cHByZXNzaW9uIiAidHJ1ZSIKK2ltcG9ydCBqYXZhLnV0aWwuKjsKKworQFN1cHByZXNzV2FybmluZ3MoInVuY2hlY2tlZCIpCitwdWJsaWMgY2xhc3MgVGU8Y2FyZXQ+c3QgeworICBAU2FmZVZhcmFyZ3MKKyAgc3RhdGljIDxUPiBMaXN0PFQ+IGZvbyhULi4uIHQpeworICAgIHJldHVybiBudWxsOworICB9CisKKyAgdm9pZCBmb28oKSB7CisgICAgTGlzdDxBcnJheUxpc3Q8U3RyaW5nPj4gbGlzdCA9IGZvbyhuZXcgQXJyYXlMaXN0PFN0cmluZz4oKSk7CisgIH0KK30KKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9yZWR1bmRhbnRVbmNoZWNrZWRWYXJhcmdzL2JlZm9yZTcuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvcmVkdW5kYW50VW5jaGVja2VkVmFyYXJncy9iZWZvcmU3LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGE5OGU0NgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvcmVkdW5kYW50VW5jaGVja2VkVmFyYXJncy9iZWZvcmU3LmphdmEKQEAgLTAsMCArMSwxOSBAQAorLy8gIlJlbW92ZSAndW5jaGVja2VkJyBzdXBwcmVzc2lvbiIgImZhbHNlIgoraW1wb3J0IGphdmEudXRpbC4qOworCitwdWJsaWMgY2xhc3MgVGVzdCB7CisgIEBTYWZlVmFyYXJncworICBzdGF0aWMgPFQ+IExpc3Q8VD4gZm9vKFQuLi4gdCl7CisgICAgcmV0dXJuIG51bGw7CisgIH0KKworICBzdGF0aWMgPFQ+IExpc3Q8VD4gZm9vMShULi4uIHQpeworICAgIHJldHVybiBudWxsOworICB9CisKKyAgQFN1cHByZXNzV2FybmluZ3MoInVuY2hlY2tlZCIpCisgIHZvaWQgZm9vKCkgeworICAgIGZvbyhuZXcgQXJyYXlMaXN0PFN0cmluZz4oKSkuYWRkQWxsKGZvbzEobmV3IEFycmF5TGlzdDxTdHJpbmc+KTsKKyAgfQorfQorCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3JlZHVuZGFudFVuY2hlY2tlZFZhcmFyZ3MvYmVmb3JlOC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9yZWR1bmRhbnRVbmNoZWNrZWRWYXJhcmdzL2JlZm9yZTguamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zODJiMjAxCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9yZWR1bmRhbnRVbmNoZWNrZWRWYXJhcmdzL2JlZm9yZTguamF2YQpAQCAtMCwwICsxLDE1IEBACisvLyAiUmVtb3ZlICd1bmNoZWNrZWQnIHN1cHByZXNzaW9uIiAiZmFsc2UiCitpbXBvcnQgamF2YS51dGlsLio7CisKK0BTdXBwcmVzc1dhcm5pbmdzKCJBTEwiKQorcHVibGljIGNsYXNzIFRlPGNhcmV0PnN0IHsKKyAgQFNhZmVWYXJhcmdzCisgIHN0YXRpYyA8VD4gTGlzdDxUPiBmb28oVC4uLiB0KXsKKyAgICByZXR1cm4gbnVsbDsKKyAgfQorCisgIHZvaWQgZm9vKCkgeworICAgIExpc3Q8QXJyYXlMaXN0PFN0cmluZz4+IGxpc3QgPSBmb28obmV3IEFycmF5TGlzdDxTdHJpbmc+KCkpOworICB9Cit9CisKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvcmVkdW5kYW50VW5jaGVja2VkVmFyYXJncy9iZWZvcmU5LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3JlZHVuZGFudFVuY2hlY2tlZFZhcmFyZ3MvYmVmb3JlOS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUzNGVlMGUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3JlZHVuZGFudFVuY2hlY2tlZFZhcmFyZ3MvYmVmb3JlOS5qYXZhCkBAIC0wLDAgKzEsMTUgQEAKKy8vICJSZW1vdmUgJ3VuY2hlY2tlZCcgc3VwcHJlc3Npb24iICJ0cnVlIgoraW1wb3J0IGphdmEudXRpbC4qOworCitAU3VwcHJlc3NXYXJuaW5ncyh7InVuY2hlY2tlZCIsICJibGEtYmxhaC10b29saWQifSkKK3B1YmxpYyBjbGFzcyBUZXM8Y2FyZXQ+dCB7CisgIEBTYWZlVmFyYXJncworICBzdGF0aWMgPFQ+IExpc3Q8VD4gZm9vKFQuLi4gdCl7CisgICAgcmV0dXJuIG51bGw7CisgIH0KKworICB2b2lkIGZvbygpIHsKKyAgICBMaXN0PEFycmF5TGlzdDxTdHJpbmc+PiBsaXN0ID0gZm9vKG5ldyBBcnJheUxpc3Q8U3RyaW5nPigpKTsKKyAgfQorfQorCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3JlbW92ZU5ld1F1YWxpZmllci9hZnRlcjEuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvcmVtb3ZlTmV3UXVhbGlmaWVyL2FmdGVyMS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFkNjNhNTMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3JlbW92ZU5ld1F1YWxpZmllci9hZnRlcjEuamF2YQpAQCAtMCwwICsxLDE0IEBACisvLyAiUmVtb3ZlIHF1YWxpZmllciIgInRydWUiCisKK2NsYXNzIGkyIHsKKyAgICBjbGFzcyBBIHsKKyAgICAgICAgQShiIGIpIHsKKyAgICAgICAgICA8Y2FyZXQ+bmV3IGIuYygpOworICAgICAgICB9CisgICAgfQorCisgICAgc3RhdGljIGNsYXNzIGIgeworICAgICAgc3RhdGljIGNsYXNzIGMge30KKyAgICB9CisKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvcmVtb3ZlTmV3UXVhbGlmaWVyL2FmdGVyMi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9yZW1vdmVOZXdRdWFsaWZpZXIvYWZ0ZXIyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTYzZWVmYwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvcmVtb3ZlTmV3UXVhbGlmaWVyL2FmdGVyMi5qYXZhCkBAIC0wLDAgKzEsOSBAQAorLy8gIlJlbW92ZSBxdWFsaWZpZXIiICJ0cnVlIgorCisgICAgc3RhdGljIGNsYXNzIEEgeworICAgICAgICBzdGF0aWMgY2xhc3MgQiB7CisgICAgICAgIH0KKyAgICAgICAgeworICAgICAgICAgICAgPGNhcmV0Pm5ldyBCKCk7CisgICAgICAgIH0KKyAgICB9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3JlbW92ZU5ld1F1YWxpZmllci9iZWZvcmUxLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3JlbW92ZU5ld1F1YWxpZmllci9iZWZvcmUxLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWJmYjRlZAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvcmVtb3ZlTmV3UXVhbGlmaWVyL2JlZm9yZTEuamF2YQpAQCAtMCwwICsxLDE0IEBACisvLyAiUmVtb3ZlIHF1YWxpZmllciIgInRydWUiCisKK2NsYXNzIGkyIHsKKyAgICBjbGFzcyBBIHsKKyAgICAgICAgQShiIGIpIHsKKyAgICAgICAgICA8Y2FyZXQ+Yi5uZXcgYygpOworICAgICAgICB9CisgICAgfQorCisgICAgc3RhdGljIGNsYXNzIGIgeworICAgICAgc3RhdGljIGNsYXNzIGMge30KKyAgICB9CisKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvcmVtb3ZlTmV3UXVhbGlmaWVyL2JlZm9yZTIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvcmVtb3ZlTmV3UXVhbGlmaWVyL2JlZm9yZTIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZmE1YjFmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9yZW1vdmVOZXdRdWFsaWZpZXIvYmVmb3JlMi5qYXZhCkBAIC0wLDAgKzEsMjMgQEAKKy8vICJSZW1vdmUgcXVhbGlmaWVyIiAidHJ1ZSIKKworICAgIHN0YXRpYyBjbGFzcyBBIHsKKyAgICAgICAgc3RhdGljIGNsYXNzIEIgeworICAgICAgICB9CisgICAgICAgIHsKKyAgICAgICAgICAgIG5ldyBBKCkgeworICAgICAgICAgICAgICAgdm9pZCBmKCkgeworCisKKworCisKKyAgICAgICAgICAgICAgICAgICAgIDxjYXJldD4KKworCisKKworICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC5uZXcgQigpOworICAgICAgICB9CisgICAgfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9yZW1vdmVRdWFsaWZpZXIvYWZ0ZXIxLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3JlbW92ZVF1YWxpZmllci9hZnRlcjEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43N2UyZTM0Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9yZW1vdmVRdWFsaWZpZXIvYWZ0ZXIxLmphdmEKQEAgLTAsMCArMSwxNSBAQAorLy8gIlJlbW92ZSBRdWFsaWZpZXIiICJ0cnVlIgorY2xhc3MgRSB7CisgICAgY2xhc3MgT3V0ZXIgeworICAgIGNsYXNzIFMgeworICAgICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBTUyA9IDA7CisgICAgfQorICAgIH0KKworICAgIE91dGVyIGYoKSB7CisgICAgICAgIGludCBzID0gPGNhcmV0Pk91dGVyLlMuU1M7CisgICAgICAgIC8vIGludCBzMSA9IDxlcnJvciBkZXNjcj0iRXhwZWN0ZWQgY2xhc3Mgb3IgcGFja2FnZSI+dGhpczwvZXJyb3I+Lk91dGVyLlMuU1M7CisgICAgICAgIGludCBzMiA9IE91dGVyLlMuU1M7CisgICAgICAgIHJldHVybiBudWxsOworICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvcmVtb3ZlUXVhbGlmaWVyL2FmdGVyMi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9yZW1vdmVRdWFsaWZpZXIvYWZ0ZXIyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTNlMWZlZAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvcmVtb3ZlUXVhbGlmaWVyL2FmdGVyMi5qYXZhCkBAIC0wLDAgKzEsMTQgQEAKKy8vICJSZW1vdmUgUXVhbGlmaWVyIiAidHJ1ZSIKK2NsYXNzIEUgeworICAgIGNsYXNzIE91dGVyIHsKKyAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgU1MgPSAwOworICAgIGNsYXNzIFMgeworICAgICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBTUyA9IDA7CisgICAgfQorICAgIH0KKworICAgIE91dGVyIGYoKSB7CisgICAgICAgIGludCBzID0gPGNhcmV0Pk91dGVyLlNTOworICAgICAgICByZXR1cm4gbnVsbDsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3JlbW92ZVF1YWxpZmllci9iZWZvcmUxLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3JlbW92ZVF1YWxpZmllci9iZWZvcmUxLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDRlZjBhMwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvcmVtb3ZlUXVhbGlmaWVyL2JlZm9yZTEuamF2YQpAQCAtMCwwICsxLDE1IEBACisvLyAiUmVtb3ZlIFF1YWxpZmllciIgInRydWUiCitjbGFzcyBFIHsKKyAgICBjbGFzcyBPdXRlciB7CisgICAgY2xhc3MgUyB7CisgICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFNTID0gMDsKKyAgICB9CisgICAgfQorCisgICAgT3V0ZXIgZigpIHsKKyAgICAgICAgaW50IHMgPSA8Y2FyZXQ+ZigpLlMuU1M7CisgICAgICAgIC8vIGludCBzMSA9IDxlcnJvciBkZXNjcj0iRXhwZWN0ZWQgY2xhc3Mgb3IgcGFja2FnZSI+dGhpczwvZXJyb3I+Lk91dGVyLlMuU1M7CisgICAgICAgIGludCBzMiA9IE91dGVyLlMuU1M7CisgICAgICAgIHJldHVybiBudWxsOworICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvcmVtb3ZlUXVhbGlmaWVyL2JlZm9yZTIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvcmVtb3ZlUXVhbGlmaWVyL2JlZm9yZTIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZjllMDkxCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9yZW1vdmVRdWFsaWZpZXIvYmVmb3JlMi5qYXZhCkBAIC0wLDAgKzEsMTQgQEAKKy8vICJSZW1vdmUgUXVhbGlmaWVyIiAidHJ1ZSIKK2NsYXNzIEUgeworICAgIGNsYXNzIE91dGVyIHsKKyAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgU1MgPSAwOworICAgIGNsYXNzIFMgeworICAgICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBTUyA9IDA7CisgICAgfQorICAgIH0KKworICAgIE91dGVyIGYoKSB7CisgICAgICAgIGludCBzID0gdGhpczxjYXJldD4uT3V0ZXIuU1M7CisgICAgICAgIHJldHVybiBudWxsOworICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvcmVtb3ZlUmVkdW5kYW50QXJndW1lbnQvYWZ0ZXJCb3hlZC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9yZW1vdmVSZWR1bmRhbnRBcmd1bWVudC9hZnRlckJveGVkLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzFjZGQ0ZAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvcmVtb3ZlUmVkdW5kYW50QXJndW1lbnQvYWZ0ZXJCb3hlZC5qYXZhCkBAIC0wLDAgKzEsOSBAQAorLy8gIlJlbW92ZSByZWR1bmRhbnQgYXJndW1lbnRzIHRvIGNhbGwgJ21ldGhvZChpbnQsIEludGVnZXIpJyIgInRydWUiCitjbGFzcyBBIHsKKyAgcHVibGljIEEoKSB7CisgICAgbWV0aG9kKG5ldyBJbnRlZ2VyKDUpLCA1KTsKKyAgfQorCisgIHByaXZhdGUgdm9pZCBtZXRob2QoaW50IGksIEludGVnZXIgaTIpIHsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvcmVtb3ZlUmVkdW5kYW50QXJndW1lbnQvYWZ0ZXJHZW5lcmljLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3JlbW92ZVJlZHVuZGFudEFyZ3VtZW50L2FmdGVyR2VuZXJpYy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFlNDYyZTAKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3JlbW92ZVJlZHVuZGFudEFyZ3VtZW50L2FmdGVyR2VuZXJpYy5qYXZhCkBAIC0wLDAgKzEsOSBAQAorLy8gIlJlbW92ZSByZWR1bmRhbnQgYXJndW1lbnRzIHRvIGNhbGwgJ21ldGhvZChpbnQsIFQpJyIgInRydWUiCitjbGFzcyBBIHsKKyAgcHVibGljIEEoKSB7CisgICAgbWV0aG9kKDUsIG5ldyBFeGNlcHRpb24oKSk7CisgIH0KKworICBwcml2YXRlIDxUIGV4dGVuZHMgRXhjZXB0aW9uPiB2b2lkIG1ldGhvZChpbnQgaSwgVCB0KSB7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3JlbW92ZVJlZHVuZGFudEFyZ3VtZW50L2FmdGVyU2ltcGxlLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3JlbW92ZVJlZHVuZGFudEFyZ3VtZW50L2FmdGVyU2ltcGxlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2RhNzkyNwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvcmVtb3ZlUmVkdW5kYW50QXJndW1lbnQvYWZ0ZXJTaW1wbGUuamF2YQpAQCAtMCwwICsxLDkgQEAKKy8vICJSZW1vdmUgcmVkdW5kYW50IGFyZ3VtZW50cyB0byBjYWxsICdtZXRob2QoaW50LCBTdHJpbmcpJyIgInRydWUiCitjbGFzcyBBIHsKKyAgcHVibGljIEEoKSB7CisgICAgbWV0aG9kKDUsICIiKTsKKyAgfQorCisgIHByaXZhdGUgdm9pZCBtZXRob2QoaW50IHMsIFN0cmluZyBzMikgeworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9yZW1vdmVSZWR1bmRhbnRBcmd1bWVudC9iZWZvcmVCb3hlZC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9yZW1vdmVSZWR1bmRhbnRBcmd1bWVudC9iZWZvcmVCb3hlZC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY1MzY4OWIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3JlbW92ZVJlZHVuZGFudEFyZ3VtZW50L2JlZm9yZUJveGVkLmphdmEKQEAgLTAsMCArMSw5IEBACisvLyAiUmVtb3ZlIHJlZHVuZGFudCBhcmd1bWVudHMgdG8gY2FsbCAnbWV0aG9kKGludCwgSW50ZWdlciknIiAidHJ1ZSIKK2NsYXNzIEEgeworICBwdWJsaWMgQSgpIHsKKyAgICBtZXRob2QobmV3IEludGVnZXIoNSksIDUsPGNhcmV0PiAiIiwgbmV3IFN0cmluZygpKTsKKyAgfQorCisgIHByaXZhdGUgdm9pZCBtZXRob2QoaW50IGksIEludGVnZXIgaTIpIHsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvcmVtb3ZlUmVkdW5kYW50QXJndW1lbnQvYmVmb3JlR2VuZXJpYy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9yZW1vdmVSZWR1bmRhbnRBcmd1bWVudC9iZWZvcmVHZW5lcmljLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTNkZjY0MAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvcmVtb3ZlUmVkdW5kYW50QXJndW1lbnQvYmVmb3JlR2VuZXJpYy5qYXZhCkBAIC0wLDAgKzEsOSBAQAorLy8gIlJlbW92ZSByZWR1bmRhbnQgYXJndW1lbnRzIHRvIGNhbGwgJ21ldGhvZChpbnQsIFQpJyIgInRydWUiCitjbGFzcyBBIHsKKyAgcHVibGljIEEoKSB7CisgICAgbWV0aG9kKDUsPGNhcmV0PiBuZXcgRXhjZXB0aW9uKCksIG5ldyBFeGNlcHRpb24oKSwgIiIsIDMpOworICB9CisKKyAgcHJpdmF0ZSA8VCBleHRlbmRzIEV4Y2VwdGlvbj4gdm9pZCBtZXRob2QoaW50IGksIFQgdCkgeworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9yZW1vdmVSZWR1bmRhbnRBcmd1bWVudC9iZWZvcmVTaW1wbGUuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvcmVtb3ZlUmVkdW5kYW50QXJndW1lbnQvYmVmb3JlU2ltcGxlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWNjMDk0NgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvcmVtb3ZlUmVkdW5kYW50QXJndW1lbnQvYmVmb3JlU2ltcGxlLmphdmEKQEAgLTAsMCArMSw5IEBACisvLyAiUmVtb3ZlIHJlZHVuZGFudCBhcmd1bWVudHMgdG8gY2FsbCAnbWV0aG9kKGludCwgU3RyaW5nKSciICJ0cnVlIgorY2xhc3MgQSB7CisgIHB1YmxpYyBBKCkgeworICAgIG1ldGhvZCg1LCAiIiw8Y2FyZXQ+IDEwKTsKKyAgfQorCisgIHByaXZhdGUgdm9pZCBtZXRob2QoaW50IHMsIFN0cmluZyBzMikgeworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9yZW1vdmVSZWR1bmRhbnRFbHNlL2FmdGVyMS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9yZW1vdmVSZWR1bmRhbnRFbHNlL2FmdGVyMS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYxMGRjNWQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3JlbW92ZVJlZHVuZGFudEVsc2UvYWZ0ZXIxLmphdmEKQEAgLTAsMCArMSwxMyBAQAorLy8gIlJlbW92ZSBSZWR1bmRhbnQgJ2Vsc2UnIiAidHJ1ZSIKK2NsYXNzIGEgeworICB2b2lkIGZvbygpIHsKKyAgICBpbnQgYSA9IDA7CisgICAgaW50IGIgPSAwOworICAgIGlmIChhICE9IGIpIHsKKyAgICAgIHJldHVybjsKKyAgICB9CisgICAgICBhID0gYjsKKyAgICAgIGErKzsKKyAgfQorfQorCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3JlbW92ZVJlZHVuZGFudEVsc2UvYmVmb3JlMS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9yZW1vdmVSZWR1bmRhbnRFbHNlL2JlZm9yZTEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NzRhMDUyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9yZW1vdmVSZWR1bmRhbnRFbHNlL2JlZm9yZTEuamF2YQpAQCAtMCwwICsxLDE0IEBACisvLyAiUmVtb3ZlIFJlZHVuZGFudCAnZWxzZSciICJ0cnVlIgorY2xhc3MgYSB7CisgIHZvaWQgZm9vKCkgeworICAgIGludCBhID0gMDsKKyAgICBpbnQgYiA9IDA7CisgICAgaWYgKGEgIT0gYikgeworICAgICAgcmV0dXJuOworICAgIH0gZTxjYXJldD5sc2UgeworICAgICAgYSA9IGI7CisgICAgfQorICAgIGErKzsKKyAgfQorfQorCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3JlbW92ZVJlZHVuZGFudEVsc2UvYmVmb3JlSWZFbHNlQ2hhaW4uamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvcmVtb3ZlUmVkdW5kYW50RWxzZS9iZWZvcmVJZkVsc2VDaGFpbi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI1MTI3ZDMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3JlbW92ZVJlZHVuZGFudEVsc2UvYmVmb3JlSWZFbHNlQ2hhaW4uamF2YQpAQCAtMCwwICsxLDE3IEBACisvLyAiUmVtb3ZlIFJlZHVuZGFudCAnZWxzZSciICJmYWxzZSIKK2NsYXNzIGEgeworICB2b2lkIGZvbygpIHsKKyAgICBpbnQgYSA9IDA7CisgICAgaW50IGIgPSAwOworICAgIGlmIChhICE9IGIpIHsKKyAgICAgIGEgPSAxMDsKKyAgICB9IGVsc2UgaWYgKGEgKyAxID09IGIpIHsKKyAgICAgIHJldHVybjsKKyAgICB9CisgICAgZTxjYXJldD5sc2UgeworICAgICAgYSA9IGI7CisgICAgfQorICAgIGErKzsKKyAgfQorfQorCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3JlbW92ZVR5cGVBcmd1bWVudHMvYWZ0ZXJSZW1vdmVBbGwuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvcmVtb3ZlVHlwZUFyZ3VtZW50cy9hZnRlclJlbW92ZUFsbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY3MTdmMDgKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3JlbW92ZVR5cGVBcmd1bWVudHMvYWZ0ZXJSZW1vdmVBbGwuamF2YQpAQCAtMCwwICsxLDcgQEAKKy8vICJSZW1vdmUgdHlwZSBhcmd1bWVudHMiICJ0cnVlIgorYWJzdHJhY3QgY2xhc3MgU29tZUNsYXNzPEssIFQ+IGltcGxlbWVudHMgU29tZTxLLCBUPiB7CisgICAgcHVibGljIGFic3RyYWN0IHZvaWQgZG9Tb21ldGhpbmcoSyBrZXksIE5vZGU8Y2FyZXQ+IHJvb3QpOworfQorY2xhc3MgTm9kZSB7fQoraW50ZXJmYWNlIFNvbWU8SUksIE9PPnt9CisKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvcmVtb3ZlVHlwZUFyZ3VtZW50cy9iZWZvcmVSZW1vdmVBbGwuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvcmVtb3ZlVHlwZUFyZ3VtZW50cy9iZWZvcmVSZW1vdmVBbGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iODBlMDhjCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9yZW1vdmVUeXBlQXJndW1lbnRzL2JlZm9yZVJlbW92ZUFsbC5qYXZhCkBAIC0wLDAgKzEsNyBAQAorLy8gIlJlbW92ZSB0eXBlIGFyZ3VtZW50cyIgInRydWUiCithYnN0cmFjdCBjbGFzcyBTb21lQ2xhc3M8SywgVD4gaW1wbGVtZW50cyBTb21lPEssIFQ+IHsKKyAgICBwdWJsaWMgYWJzdHJhY3Qgdm9pZCBkb1NvbWV0aGluZyhLIGtleSwgTm9kZTxjYXJldD48SywgVD4gcm9vdCk7Cit9CitjbGFzcyBOb2RlIHt9CitpbnRlcmZhY2UgU29tZTxJSSwgT08+e30KKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9yZW1vdmVUeXBlQXJndW1lbnRzL2JlZm9yZVJlbW92ZVVuYXZhaWxhYmxlLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3JlbW92ZVR5cGVBcmd1bWVudHMvYmVmb3JlUmVtb3ZlVW5hdmFpbGFibGUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMzM2M2IyYwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvcmVtb3ZlVHlwZUFyZ3VtZW50cy9iZWZvcmVSZW1vdmVVbmF2YWlsYWJsZS5qYXZhCkBAIC0wLDAgKzEsNyBAQAorLy8gIlJlbW92ZSB0eXBlIGFyZ3VtZW50cyIgImZhbHNlIgorYWJzdHJhY3QgY2xhc3MgU29tZUNsYXNzPEssIFQ+IGltcGxlbWVudHMgU29tZTxLLCBUPiB7CisgICAgcHVibGljIGFic3RyYWN0IHZvaWQgZG9Tb21ldGhpbmcoSyBrZXksIE5vZGU8Y2FyZXQ+PEssIFQ+IHJvb3QpOworfQorY2xhc3MgTm9kZTxHPiB7fQoraW50ZXJmYWNlIFNvbWU8SUksIE9PPnt9CisKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvcmVtb3ZlVW51c2VkUGFyYW1ldGVyL2FmdGVyMS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9yZW1vdmVVbnVzZWRQYXJhbWV0ZXIvYWZ0ZXIxLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjQ2ZTFlYQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvcmVtb3ZlVW51c2VkUGFyYW1ldGVyL2FmdGVyMS5qYXZhCkBAIC0wLDAgKzEsOCBAQAorLy8gIlJlbW92ZSBQYXJhbWV0ZXIgJ2knIiAidHJ1ZSIKK2ltcG9ydCBqYXZhLmlvLio7CisKK2NsYXNzIGEgeworIHByaXZhdGUgdm9pZCBydW4oPGNhcmV0PikgeworIH0KK30KKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9yZW1vdmVVbnVzZWRQYXJhbWV0ZXIvYWZ0ZXIyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3JlbW92ZVVudXNlZFBhcmFtZXRlci9hZnRlcjIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMDc0NmE1Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9yZW1vdmVVbnVzZWRQYXJhbWV0ZXIvYWZ0ZXIyLmphdmEKQEAgLTAsMCArMSw4IEBACisvLyAiUmVtb3ZlIFBhcmFtZXRlciAnaSciICJ0cnVlIgoraW1wb3J0IGphdmEuaW8uKjsKKworY2xhc3MgYSB7CisgcHJpdmF0ZSB2b2lkIHJ1bihpbnQgaTEsIDxjYXJldD5pbnQgZWUpIHsKKyB9Cit9CisKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvcmVtb3ZlVW51c2VkUGFyYW1ldGVyL2JlZm9yZTEuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvcmVtb3ZlVW51c2VkUGFyYW1ldGVyL2JlZm9yZTEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMDhjZWNmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9yZW1vdmVVbnVzZWRQYXJhbWV0ZXIvYmVmb3JlMS5qYXZhCkBAIC0wLDAgKzEsOCBAQAorLy8gIlJlbW92ZSBQYXJhbWV0ZXIgJ2knIiAidHJ1ZSIKK2ltcG9ydCBqYXZhLmlvLio7CisKK2NsYXNzIGEgeworIHByaXZhdGUgdm9pZCBydW4oaW50IDxjYXJldD5pKSB7CisgfQorfQorCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3JlbW92ZVVudXNlZFBhcmFtZXRlci9iZWZvcmUyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3JlbW92ZVVudXNlZFBhcmFtZXRlci9iZWZvcmUyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDQ0YTc3OAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvcmVtb3ZlVW51c2VkUGFyYW1ldGVyL2JlZm9yZTIuamF2YQpAQCAtMCwwICsxLDggQEAKKy8vICJSZW1vdmUgUGFyYW1ldGVyICdpJyIgInRydWUiCitpbXBvcnQgamF2YS5pby4qOworCitjbGFzcyBhIHsKKyBwcml2YXRlIHZvaWQgcnVuKGludCBpMSwgaW50IDxjYXJldD5pLCBpbnQgZWUpIHsKKyB9Cit9CisKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvcmVtb3ZlVW51c2VkVmFyaWFibGUvYWZ0ZXIxLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3JlbW92ZVVudXNlZFZhcmlhYmxlL2FmdGVyMS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM2MDAwNTMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3JlbW92ZVVudXNlZFZhcmlhYmxlL2FmdGVyMS5qYXZhCkBAIC0wLDAgKzEsOCBAQAorLy8gIlJlbW92ZSB2YXJpYWJsZSAnaSciICJ0cnVlIgoraW1wb3J0IGphdmEuaW8uKjsKKworY2xhc3MgYSB7CisgcHVibGljIHZvaWQgcnVuKCkgeworIDxjYXJldD59Cit9CisKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvcmVtb3ZlVW51c2VkVmFyaWFibGUvYWZ0ZXIxMC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9yZW1vdmVVbnVzZWRWYXJpYWJsZS9hZnRlcjEwLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2E5NmQxMAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvcmVtb3ZlVW51c2VkVmFyaWFibGUvYWZ0ZXIxMC5qYXZhCkBAIC0wLDAgKzEsMTIgQEAKKy8vICJSZW1vdmUgdmFyaWFibGUgJ29vJyIgInRydWUiCitpbXBvcnQgamF2YS5pby4qOworCitjbGFzcyBhIHsKKyAgICBpbnQgazsKKyAgICBwcml2YXRlIGludCBydW4oKSB7CisgICAgICBPYmplY3QgbzEgPSAvKipmZmZmZiovIHRoaXMgLypkZGRkZCovPGNhcmV0PiwgaSA9IG51bGw7CisKKyAgICAgIHJldHVybiAwOworICAgIH0KK30KKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9yZW1vdmVVbnVzZWRWYXJpYWJsZS9hZnRlcjExLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3JlbW92ZVVudXNlZFZhcmlhYmxlL2FmdGVyMTEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YWFmZWQzCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9yZW1vdmVVbnVzZWRWYXJpYWJsZS9hZnRlcjExLmphdmEKQEAgLTAsMCArMSwxMiBAQAorLy8gIlJlbW92ZSB2YXJpYWJsZSAnb28nIiAidHJ1ZSIKK2ltcG9ydCBqYXZhLmlvLio7CisKK2NsYXNzIGEgeworICAgIGludCBrOworICAgIHByaXZhdGUgaW50IHJ1bigpIHsKKyAgICAgICAgT2JqZWN0IG8xID0gLyoqZmZmZmYqLyB0aGlzOyAvKmRkZGRkKi88Y2FyZXQ+CisKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorfQorCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3JlbW92ZVVudXNlZFZhcmlhYmxlL2FmdGVyMTIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvcmVtb3ZlVW51c2VkVmFyaWFibGUvYWZ0ZXIxMi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk0M2QwN2QKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3JlbW92ZVVudXNlZFZhcmlhYmxlL2FmdGVyMTIuamF2YQpAQCAtMCwwICsxLDEyIEBACisvLyAiUmVtb3ZlIHZhcmlhYmxlICdvMSciICJ0cnVlIgoraW1wb3J0IGphdmEuaW8uKjsKKworY2xhc3MgYSB7CisgICAgaW50IGs7CisgICAgcHJpdmF0ZSBpbnQgcnVuKCkgeworICAgICAgLypkZGRkZCovIE9iamVjdCBvbyA9IChPYmplY3QpIG5ldyBJbnRlZ2VyKDApOworCisgICAgICByZXR1cm4gMDsKKyAgICB9Cit9CisKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvcmVtb3ZlVW51c2VkVmFyaWFibGUvYWZ0ZXIxMy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9yZW1vdmVVbnVzZWRWYXJpYWJsZS9hZnRlcjEzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGExNTQ0NgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvcmVtb3ZlVW51c2VkVmFyaWFibGUvYWZ0ZXIxMy5qYXZhCkBAIC0wLDAgKzEsMTIgQEAKKy8vICJSZW1vdmUgdmFyaWFibGUgJ28xJyIgInRydWUiCitpbXBvcnQgamF2YS5pby4qOworCitjbGFzcyBhIHsKKyAgICBpbnQgazsKKyAgICBwcml2YXRlIGludCBydW4oKSB7CisgICAgICBPYmplY3QgbzA8Y2FyZXQ+LCAvKmRkZGRkKi8gb28gPSAoT2JqZWN0KSBuZXcgSW50ZWdlcigwKTsKKworICAgICAgcmV0dXJuIDA7CisgICAgfQorfQorCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3JlbW92ZVVudXNlZFZhcmlhYmxlL2FmdGVyMTQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvcmVtb3ZlVW51c2VkVmFyaWFibGUvYWZ0ZXIxNC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk0YTUxMjkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3JlbW92ZVVudXNlZFZhcmlhYmxlL2FmdGVyMTQuamF2YQpAQCAtMCwwICsxLDEyIEBACisvLyAiUmVtb3ZlIHZhcmlhYmxlICdvMSciICJ0cnVlIgoraW1wb3J0IGphdmEuaW8uKjsKKworY2xhc3MgYSB7CisgICAgaW50IGs7CisgICAgcHJpdmF0ZSBpbnQgcnVuKCkgeworICAgICAgICBPYmplY3QgbzAsIG9vOzxjYXJldD4KKworICAgICAgICByZXR1cm4gMDsKKyAgICB9Cit9CisKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvcmVtb3ZlVW51c2VkVmFyaWFibGUvYWZ0ZXIxNS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9yZW1vdmVVbnVzZWRWYXJpYWJsZS9hZnRlcjE1LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYThkMjdhMgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvcmVtb3ZlVW51c2VkVmFyaWFibGUvYWZ0ZXIxNS5qYXZhCkBAIC0wLDAgKzEsMTAgQEAKKy8vICJSZW1vdmUgdmFyaWFibGUgJ28nIiAidHJ1ZSIKK2ltcG9ydCBqYXZhLmlvLio7CisKK2NsYXNzIGEgeworICAgIHByaXZhdGUgaW50IHJ1bigpIHs8Y2FyZXQ+CisKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorfQorCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3JlbW92ZVVudXNlZFZhcmlhYmxlL2FmdGVyMTYuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvcmVtb3ZlVW51c2VkVmFyaWFibGUvYWZ0ZXIxNi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ1ZTQ5YzMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3JlbW92ZVVudXNlZFZhcmlhYmxlL2FmdGVyMTYuamF2YQpAQCAtMCwwICsxLDExIEBACisvLyAiUmVtb3ZlIHZhcmlhYmxlICdvJyIgInRydWUiCitpbXBvcnQgamF2YS5pby4qOworCitjbGFzcyBhIHsKKyAgICBpbnQgazsKKyAgICBwcml2YXRlIGludCBydW4oKSB7PGNhcmV0PgorCisgICAgICAgIHJldHVybiAwOworICAgIH0KK30KKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9yZW1vdmVVbnVzZWRWYXJpYWJsZS9hZnRlcjE3LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3JlbW92ZVVudXNlZFZhcmlhYmxlL2FmdGVyMTcuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZWE3Yzk1Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9yZW1vdmVVbnVzZWRWYXJpYWJsZS9hZnRlcjE3LmphdmEKQEAgLTAsMCArMSwxMiBAQAorLy8gIlJlbW92ZSB2YXJpYWJsZSAnbyciICJ0cnVlIgoraW1wb3J0IGphdmEuaW8uKjsKKworY2xhc3MgYSB7CisgICAgaW50IGs7CisgICAgcHJpdmF0ZSBpbnQgcnVuKCkgeworICAgICAgICBpbnQgYSA9IDA7PGNhcmV0PgorCisgICAgICAgIHJldHVybiBhOworICAgIH0KK30KKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9yZW1vdmVVbnVzZWRWYXJpYWJsZS9hZnRlcjIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvcmVtb3ZlVW51c2VkVmFyaWFibGUvYWZ0ZXIyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjMxZWYwYwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvcmVtb3ZlVW51c2VkVmFyaWFibGUvYWZ0ZXIyLmphdmEKQEAgLTAsMCArMSw5IEBACisvLyAiUmVtb3ZlIHZhcmlhYmxlICdpJyIgInRydWUiCitpbXBvcnQgamF2YS5pby4qOworCitjbGFzcyBhIHsKKyBwcml2YXRlIHZvaWQgcnVuKCkgeworICAgICBpbnQgajsKKyA8Y2FyZXQ+fQorfQorCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3JlbW92ZVVudXNlZFZhcmlhYmxlL2FmdGVyNC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9yZW1vdmVVbnVzZWRWYXJpYWJsZS9hZnRlcjQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZjZkMTQ3Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9yZW1vdmVVbnVzZWRWYXJpYWJsZS9hZnRlcjQuamF2YQpAQCAtMCwwICsxLDEwIEBACisvLyAiUmVtb3ZlIGZpZWxkICdpJyIgInRydWUiCitpbXBvcnQgamF2YS5pby4qOworCitjbGFzcyBhIHsKKyAgICA8Y2FyZXQ+cHJpdmF0ZSB2b2lkIHJ1bigpIHsKKyAgICAgICAgaW50IGo7CisgICAgICAgIGludCBpOworICAgIH0KK30KKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9yZW1vdmVVbnVzZWRWYXJpYWJsZS9hZnRlcjUuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvcmVtb3ZlVW51c2VkVmFyaWFibGUvYWZ0ZXI1LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTUxMWM4ZAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvcmVtb3ZlVW51c2VkVmFyaWFibGUvYWZ0ZXI1LmphdmEKQEAgLTAsMCArMSwxMSBAQAorLy8gIlJlbW92ZSBmaWVsZCAnaSciICJ0cnVlIgoraW1wb3J0IGphdmEuaW8uKjsKKworY2xhc3MgYSB7CisgICAgPGNhcmV0PnByaXZhdGUgdm9pZCBydW4oKSB7CisgICAgICAgIGludCBqOworICAgICAgICBpbnQgayA9IDk7CisgICAgICAgIGlmICgzID09MCkgOworICAgIH0KK30KKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9yZW1vdmVVbnVzZWRWYXJpYWJsZS9hZnRlcjYuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvcmVtb3ZlVW51c2VkVmFyaWFibGUvYWZ0ZXI2LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWU0YzMwNAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvcmVtb3ZlVW51c2VkVmFyaWFibGUvYWZ0ZXI2LmphdmEKQEAgLTAsMCArMSwxMyBAQAorLy8gIlJlbW92ZSB2YXJpYWJsZSAnaSciICJ0cnVlIgoraW1wb3J0IGphdmEuaW8uKjsKKworY2xhc3MgYSB7CisgICAgcHJpdmF0ZSBpbnQgcnVuKCkgeworICAgICAgICA8Y2FyZXQ+aW50IGo7CisgICAgICAgIGludCBrID0gOTsKKyAgICAgICAgaWYgKDMgPT0wKSA7CisgICAgICAgIGVsc2UgcmV0dXJuIGs7CisgICAgICAgIHJldHVybiAwOworICAgIH0KK30KKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9yZW1vdmVVbnVzZWRWYXJpYWJsZS9hZnRlcjcuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvcmVtb3ZlVW51c2VkVmFyaWFibGUvYWZ0ZXI3LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGFkNDFjZgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvcmVtb3ZlVW51c2VkVmFyaWFibGUvYWZ0ZXI3LmphdmEKQEAgLTAsMCArMSwxMSBAQAorLy8gIlJlbW92ZSB2YXJpYWJsZSAnaSciICJ0cnVlIgoraW1wb3J0IGphdmEuaW8uKjsKKworY2xhc3MgYSB7CisgICAgaW50IGs7CisgICAgcHJpdmF0ZSB2b2lkIHJ1bigpIHsKKyAgICAgICAgPGNhcmV0PndoaWxlICgxID4gMCkgOworICAgICAgICBmb3IgKDs7ICkgOworICAgIH0KK30KKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9yZW1vdmVVbnVzZWRWYXJpYWJsZS9hZnRlcjguamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvcmVtb3ZlVW51c2VkVmFyaWFibGUvYWZ0ZXI4LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGU2OGFiMwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvcmVtb3ZlVW51c2VkVmFyaWFibGUvYWZ0ZXI4LmphdmEKQEAgLTAsMCArMSwxMiBAQAorLy8gIlJlbW92ZSB2YXJpYWJsZSAnb28nIiAidHJ1ZSIKK2ltcG9ydCBqYXZhLmlvLio7CisKK2NsYXNzIGEgeworICAgIGludCBrOworICAgIHByaXZhdGUgaW50IHJ1bigpIHsKKyAgICAgICAgbmV3IGEoKTsKKworICAgICAgICByZXR1cm4gMDsKKyAgICB9Cit9CisKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvcmVtb3ZlVW51c2VkVmFyaWFibGUvYWZ0ZXI5LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3JlbW92ZVVudXNlZFZhcmlhYmxlL2FmdGVyOS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAyZGE5ODkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3JlbW92ZVVudXNlZFZhcmlhYmxlL2FmdGVyOS5qYXZhCkBAIC0wLDAgKzEsMTIgQEAKKy8vICJSZW1vdmUgdmFyaWFibGUgJ29vJyIgInRydWUiCitpbXBvcnQgamF2YS5pby4qOworCitjbGFzcyBhIHsKKyAgICBpbnQgazsKKyAgICBwcml2YXRlIGludCBydW4oKSB7CisgICAgICA8Y2FyZXQ+T2JqZWN0IGkgPSBudWxsOworCisgICAgICByZXR1cm4gMDsKKyAgICB9Cit9CisKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvcmVtb3ZlVW51c2VkVmFyaWFibGUvYWZ0ZXJGaWVsZC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9yZW1vdmVVbnVzZWRWYXJpYWJsZS9hZnRlckZpZWxkLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDA5ZDUwZgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvcmVtb3ZlVW51c2VkVmFyaWFibGUvYWZ0ZXJGaWVsZC5qYXZhCkBAIC0wLDAgKzEsNyBAQAorLy8gIlJlbW92ZSBmaWVsZCAnayciICJ0cnVlIgoraW1wb3J0IGphdmEuaW8uKjsKKworY2xhc3MgYSB7CisgICAgcHJpdmF0ZSBpbnQgbGxsOworfQorCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3JlbW92ZVVudXNlZFZhcmlhYmxlL2FmdGVyRmllbGQyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3JlbW92ZVVudXNlZFZhcmlhYmxlL2FmdGVyRmllbGQyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmYxMjA3ZjgKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3JlbW92ZVVudXNlZFZhcmlhYmxlL2FmdGVyRmllbGQyLmphdmEKQEAgLTAsMCArMSw3IEBACisvLyAiUmVtb3ZlIGZpZWxkICdrJyIgInRydWUiCitpbXBvcnQgamF2YS5pby4qOworCitjbGFzcyBhIHsKKyAgICBwcml2YXRlIGludCB4eHg7Cit9CisKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvcmVtb3ZlVW51c2VkVmFyaWFibGUvYmVmb3JlMS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9yZW1vdmVVbnVzZWRWYXJpYWJsZS9iZWZvcmUxLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGZkZWY4YgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvcmVtb3ZlVW51c2VkVmFyaWFibGUvYmVmb3JlMS5qYXZhCkBAIC0wLDAgKzEsMTEgQEAKKy8vICJSZW1vdmUgdmFyaWFibGUgJ2knIiAidHJ1ZSIKK2ltcG9ydCBqYXZhLmlvLio7CisKK2NsYXNzIGEgeworIHB1YmxpYyB2b2lkIHJ1bigpIHsKKyAgICBpbnQgPGNhcmV0PmkgPSAwOworICAgIGkrKzsKKyAgICBpKys7CisgfQorfQorCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3JlbW92ZVVudXNlZFZhcmlhYmxlL2JlZm9yZTEwLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3JlbW92ZVVudXNlZFZhcmlhYmxlL2JlZm9yZTEwLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWJiOTI5MgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvcmVtb3ZlVW51c2VkVmFyaWFibGUvYmVmb3JlMTAuamF2YQpAQCAtMCwwICsxLDEyIEBACisvLyAiUmVtb3ZlIHZhcmlhYmxlICdvbyciICJ0cnVlIgoraW1wb3J0IGphdmEuaW8uKjsKKworY2xhc3MgYSB7CisgICAgaW50IGs7CisgICAgcHJpdmF0ZSBpbnQgcnVuKCkgeworICAgICAgT2JqZWN0IG8xID0gLyoqZmZmZmYqLyB0aGlzLCAvKmRkZGRkKi88Y2FyZXQ+b28gPSAoT2JqZWN0KSBuZXcgSW50ZWdlcigwKSwgaSA9IG51bGw7CisKKyAgICAgIHJldHVybiAwOworICAgIH0KK30KKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9yZW1vdmVVbnVzZWRWYXJpYWJsZS9iZWZvcmUxMS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9yZW1vdmVVbnVzZWRWYXJpYWJsZS9iZWZvcmUxMS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkyZmUzOTkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3JlbW92ZVVudXNlZFZhcmlhYmxlL2JlZm9yZTExLmphdmEKQEAgLTAsMCArMSwxMiBAQAorLy8gIlJlbW92ZSB2YXJpYWJsZSAnb28nIiAidHJ1ZSIKK2ltcG9ydCBqYXZhLmlvLio7CisKK2NsYXNzIGEgeworICAgIGludCBrOworICAgIHByaXZhdGUgaW50IHJ1bigpIHsKKyAgICAgICAgT2JqZWN0IG8xID0gLyoqZmZmZmYqLyB0aGlzLCAvKmRkZGRkKi88Y2FyZXQ+b28gPSAoT2JqZWN0KSBuZXcgSW50ZWdlcigwKTsKKworICAgICAgICByZXR1cm4gMDsKKyAgICB9Cit9CisKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvcmVtb3ZlVW51c2VkVmFyaWFibGUvYmVmb3JlMTIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvcmVtb3ZlVW51c2VkVmFyaWFibGUvYmVmb3JlMTIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNzlkZGIxZgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvcmVtb3ZlVW51c2VkVmFyaWFibGUvYmVmb3JlMTIuamF2YQpAQCAtMCwwICsxLDEyIEBACisvLyAiUmVtb3ZlIHZhcmlhYmxlICdvMSciICJ0cnVlIgoraW1wb3J0IGphdmEuaW8uKjsKKworY2xhc3MgYSB7CisgICAgaW50IGs7CisgICAgcHJpdmF0ZSBpbnQgcnVuKCkgeworICAgICAgT2JqZWN0IDxjYXJldD5vMSwgLypkZGRkZCovIG9vID0gKE9iamVjdCkgbmV3IEludGVnZXIoMCk7CisKKyAgICAgIHJldHVybiAwOworICAgIH0KK30KKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9yZW1vdmVVbnVzZWRWYXJpYWJsZS9iZWZvcmUxMy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9yZW1vdmVVbnVzZWRWYXJpYWJsZS9iZWZvcmUxMy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM4ZWZlNTkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3JlbW92ZVVudXNlZFZhcmlhYmxlL2JlZm9yZTEzLmphdmEKQEAgLTAsMCArMSwxMiBAQAorLy8gIlJlbW92ZSB2YXJpYWJsZSAnbzEnIiAidHJ1ZSIKK2ltcG9ydCBqYXZhLmlvLio7CisKK2NsYXNzIGEgeworICAgIGludCBrOworICAgIHByaXZhdGUgaW50IHJ1bigpIHsKKyAgICAgIE9iamVjdCBvMCwgPGNhcmV0Pm8xLCAvKmRkZGRkKi8gb28gPSAoT2JqZWN0KSBuZXcgSW50ZWdlcigwKTsKKworICAgICAgcmV0dXJuIDA7CisgICAgfQorfQorCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3JlbW92ZVVudXNlZFZhcmlhYmxlL2JlZm9yZTE0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3JlbW92ZVVudXNlZFZhcmlhYmxlL2JlZm9yZTE0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTc2NzJmNwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvcmVtb3ZlVW51c2VkVmFyaWFibGUvYmVmb3JlMTQuamF2YQpAQCAtMCwwICsxLDEyIEBACisvLyAiUmVtb3ZlIHZhcmlhYmxlICdvMSciICJ0cnVlIgoraW1wb3J0IGphdmEuaW8uKjsKKworY2xhc3MgYSB7CisgICAgaW50IGs7CisgICAgcHJpdmF0ZSBpbnQgcnVuKCkgeworICAgICAgICBPYmplY3QgbzAsIG9vLCA8Y2FyZXQ+bzE7CisKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorfQorCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3JlbW92ZVVudXNlZFZhcmlhYmxlL2JlZm9yZTE1LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3JlbW92ZVVudXNlZFZhcmlhYmxlL2JlZm9yZTE1LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjUxZWQwNQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvcmVtb3ZlVW51c2VkVmFyaWFibGUvYmVmb3JlMTUuamF2YQpAQCAtMCwwICsxLDEzIEBACisvLyAiUmVtb3ZlIHZhcmlhYmxlICdvJyIgInRydWUiCitpbXBvcnQgamF2YS5pby4qOworCitjbGFzcyBhIHsKKyAgICBwcml2YXRlIGludCBydW4oKSB7CisgICAgICAgIE9iamVjdCA8Y2FyZXQ+byA9IG5ldyBqYXZhLmxhbmcuUnVudGltZUV4Y2VwdGlvbihuZXcgU3RyaW5nKAorICAgICAgICAgICAgICAgICIiK25ldyBqYXZhLmxhbmcuSW50ZWdlcigiIituZXcgamF2YS5sYW5nLkxvbmcoIiIrbmV3IGphdmEubGFuZy5Cb29sZWFuKCkpKSksCisgICAgICAgICAgICAgICAgbmV3IGphdmEubGFuZy5UaHJvd2FibGUoIiIsbmV3IElPRXhjZXB0aW9uKCIiK25ldyBPYmplY3QoKSkpKTsKKworICAgICAgICByZXR1cm4gMDsKKyAgICB9Cit9CisKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvcmVtb3ZlVW51c2VkVmFyaWFibGUvYmVmb3JlMTYuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvcmVtb3ZlVW51c2VkVmFyaWFibGUvYmVmb3JlMTYuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hY2NjNDJkCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9yZW1vdmVVbnVzZWRWYXJpYWJsZS9iZWZvcmUxNi5qYXZhCkBAIC0wLDAgKzEsMTIgQEAKKy8vICJSZW1vdmUgdmFyaWFibGUgJ28nIiAidHJ1ZSIKK2ltcG9ydCBqYXZhLmlvLio7CisKK2NsYXNzIGEgeworICAgIGludCBrOworICAgIHByaXZhdGUgaW50IHJ1bigpIHsKKyAgICAgICAgT2JqZWN0W10gPGNhcmV0Pm8gPSBuZXcgT2JqZWN0W10geyBudWxsIH07CisKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorfQorCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3JlbW92ZVVudXNlZFZhcmlhYmxlL2JlZm9yZTE3LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3JlbW92ZVVudXNlZFZhcmlhYmxlL2JlZm9yZTE3LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTVkNzllNQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvcmVtb3ZlVW51c2VkVmFyaWFibGUvYmVmb3JlMTcuamF2YQpAQCAtMCwwICsxLDEzIEBACisvLyAiUmVtb3ZlIHZhcmlhYmxlICdvJyIgInRydWUiCitpbXBvcnQgamF2YS5pby4qOworCitjbGFzcyBhIHsKKyAgICBpbnQgazsKKyAgICBwcml2YXRlIGludCBydW4oKSB7CisgICAgICAgIGludCBhID0gMDsKKyAgICAgICAgT2JqZWN0W10gPGNhcmV0Pm8gPSBuZXcgT2JqZWN0WzFdOworCisgICAgICAgIHJldHVybiBhOworICAgIH0KK30KKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9yZW1vdmVVbnVzZWRWYXJpYWJsZS9iZWZvcmUyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3JlbW92ZVVudXNlZFZhcmlhYmxlL2JlZm9yZTIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOWY0MWM5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9yZW1vdmVVbnVzZWRWYXJpYWJsZS9iZWZvcmUyLmphdmEKQEAgLTAsMCArMSwxMCBAQAorLy8gIlJlbW92ZSB2YXJpYWJsZSAnaSciICJ0cnVlIgoraW1wb3J0IGphdmEuaW8uKjsKKworY2xhc3MgYSB7CisgcHJpdmF0ZSB2b2lkIHJ1bigpIHsKKyAgICAgaW50IGo7CisgICAgIGludCA8Y2FyZXQ+aTsKKyB9Cit9CisKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvcmVtb3ZlVW51c2VkVmFyaWFibGUvYmVmb3JlMy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9yZW1vdmVVbnVzZWRWYXJpYWJsZS9iZWZvcmUzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGE1NmJjMAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvcmVtb3ZlVW51c2VkVmFyaWFibGUvYmVmb3JlMy5qYXZhCkBAIC0wLDAgKzEsOCBAQAorLy8gIlJlbW92ZSB2YXJpYWJsZSAnaSciICJmYWxzZSIKK2ltcG9ydCBqYXZhLmlvLio7CisKK2NsYXNzIGEgeworIHByaXZhdGUgdm9pZCBydW4oaW50IDxjYXJldD5pKSB7CisgfQorfQorCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3JlbW92ZVVudXNlZFZhcmlhYmxlL2JlZm9yZTQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvcmVtb3ZlVW51c2VkVmFyaWFibGUvYmVmb3JlNC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQyZDMwNDUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3JlbW92ZVVudXNlZFZhcmlhYmxlL2JlZm9yZTQuamF2YQpAQCAtMCwwICsxLDExIEBACisvLyAiUmVtb3ZlIGZpZWxkICdpJyIgInRydWUiCitpbXBvcnQgamF2YS5pby4qOworCitjbGFzcyBhIHsKKyAgICBwcml2YXRlIGludCA8Y2FyZXQ+aTsKKyAgICBwcml2YXRlIHZvaWQgcnVuKCkgeworICAgICAgICBpbnQgajsKKyAgICAgICAgaW50IGk7CisgICAgfQorfQorCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3JlbW92ZVVudXNlZFZhcmlhYmxlL2JlZm9yZTUuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvcmVtb3ZlVW51c2VkVmFyaWFibGUvYmVmb3JlNS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM4NzY4Y2UKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3JlbW92ZVVudXNlZFZhcmlhYmxlL2JlZm9yZTUuamF2YQpAQCAtMCwwICsxLDE1IEBACisvLyAiUmVtb3ZlIGZpZWxkICdpJyIgInRydWUiCitpbXBvcnQgamF2YS5pby4qOworCitjbGFzcyBhIHsKKyAgICBwcml2YXRlIGludCA8Y2FyZXQ+aSA9IDA7CisgICAgcHJpdmF0ZSB2b2lkIHJ1bigpIHsKKyAgICAgICAgaW50IGo7CisgICAgICAgIGkrKzsKKyAgICAgICAgaW50IGsgPSA5OworICAgICAgICBpPShpPShrPTkpPT0wID8gaz04IDogMCk7CisgICAgICAgIGkgPSA5OworICAgICAgICBpZiAoKGk9Myk9PTApIGk9MDsKKyAgICB9Cit9CisKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvcmVtb3ZlVW51c2VkVmFyaWFibGUvYmVmb3JlNi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9yZW1vdmVVbnVzZWRWYXJpYWJsZS9iZWZvcmU2LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmJjYWQxYwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvcmVtb3ZlVW51c2VkVmFyaWFibGUvYmVmb3JlNi5qYXZhCkBAIC0wLDAgKzEsMTcgQEAKKy8vICJSZW1vdmUgdmFyaWFibGUgJ2knIiAidHJ1ZSIKK2ltcG9ydCBqYXZhLmlvLio7CisKK2NsYXNzIGEgeworICAgIHByaXZhdGUgaW50IHJ1bigpIHsKKyAgICAgICAgaW50IDxjYXJldD5pID0gMDsKKyAgICAgICAgaW50IGo7CisgICAgICAgIGkrKzsKKyAgICAgICAgaW50IGsgPSA5OworICAgICAgICBpPShpPShrPTkpPT0wID8gaz04IDogMCk7CisgICAgICAgIGkgPSA5OworICAgICAgICBpZiAoKGk9Myk9PTApIGk9MDsKKyAgICAgICAgZWxzZSByZXR1cm4gaT0oayk7CisgICAgICAgIHJldHVybiBpPWk9MDsKKyAgICB9Cit9CisKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvcmVtb3ZlVW51c2VkVmFyaWFibGUvYmVmb3JlNy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9yZW1vdmVVbnVzZWRWYXJpYWJsZS9iZWZvcmU3LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmU1Zjg5YwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvcmVtb3ZlVW51c2VkVmFyaWFibGUvYmVmb3JlNy5qYXZhCkBAIC0wLDAgKzEsMTUgQEAKKy8vICJSZW1vdmUgdmFyaWFibGUgJ2knIiAidHJ1ZSIKK2ltcG9ydCBqYXZhLmlvLio7CisKK2NsYXNzIGEgeworICAgIGludCBrOworICAgIHByaXZhdGUgdm9pZCBydW4oKSB7CisgICAgICAgIGludCA8Y2FyZXQ+aSA9ICgoaz05KSk7CisgICAgICAgIGkrPWs7CisgICAgICAgIGk9KGk9KGs9OSk9PTAgPyBrPTggOiAwKTsKKyAgICAgICAgaSA9IDk7CisgICAgICAgIHdoaWxlICgoaT0xKSA+IDApIGk9MTsKKyAgICAgICAgZm9yICg7O2krKykgaT0wOworICAgIH0KK30KKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9yZW1vdmVVbnVzZWRWYXJpYWJsZS9iZWZvcmU4LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3JlbW92ZVVudXNlZFZhcmlhYmxlL2JlZm9yZTguamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYjI5MGE2NgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvcmVtb3ZlVW51c2VkVmFyaWFibGUvYmVmb3JlOC5qYXZhCkBAIC0wLDAgKzEsMTIgQEAKKy8vICJSZW1vdmUgdmFyaWFibGUgJ29vJyIgInRydWUiCitpbXBvcnQgamF2YS5pby4qOworCitjbGFzcyBhIHsKKyAgICBpbnQgazsKKyAgICBwcml2YXRlIGludCBydW4oKSB7CisgICAgICAgIE9iamVjdCA8Y2FyZXQ+b28gPSAoT2JqZWN0KSBuZXcgYSgpOworCisgICAgICAgIHJldHVybiAwOworICAgIH0KK30KKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9yZW1vdmVVbnVzZWRWYXJpYWJsZS9iZWZvcmU5LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3JlbW92ZVVudXNlZFZhcmlhYmxlL2JlZm9yZTkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYzIxNjM5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9yZW1vdmVVbnVzZWRWYXJpYWJsZS9iZWZvcmU5LmphdmEKQEAgLTAsMCArMSwxMiBAQAorLy8gIlJlbW92ZSB2YXJpYWJsZSAnb28nIiAidHJ1ZSIKK2ltcG9ydCBqYXZhLmlvLio7CisKK2NsYXNzIGEgeworICAgIGludCBrOworICAgIHByaXZhdGUgaW50IHJ1bigpIHsKKyAgICAgIE9iamVjdCA8Y2FyZXQ+b28gPSAoT2JqZWN0KSBuZXcgSW50ZWdlcigwKSwgaSA9IG51bGw7CisKKyAgICAgIHJldHVybiAwOworICAgIH0KK30KKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9yZW1vdmVVbnVzZWRWYXJpYWJsZS9iZWZvcmVGaWVsZC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9yZW1vdmVVbnVzZWRWYXJpYWJsZS9iZWZvcmVGaWVsZC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVmOTNlZTAKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3JlbW92ZVVudXNlZFZhcmlhYmxlL2JlZm9yZUZpZWxkLmphdmEKQEAgLTAsMCArMSw3IEBACisvLyAiUmVtb3ZlIGZpZWxkICdrJyIgInRydWUiCitpbXBvcnQgamF2YS5pby4qOworCitjbGFzcyBhIHsKKyAgICBwcml2YXRlIGludCA8Y2FyZXQ+aywgbGxsOworfQorCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3JlbW92ZVVudXNlZFZhcmlhYmxlL2JlZm9yZUZpZWxkMi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9yZW1vdmVVbnVzZWRWYXJpYWJsZS9iZWZvcmVGaWVsZDIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZDQ3N2Q2Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9yZW1vdmVVbnVzZWRWYXJpYWJsZS9iZWZvcmVGaWVsZDIuamF2YQpAQCAtMCwwICsxLDcgQEAKKy8vICJSZW1vdmUgZmllbGQgJ2snIiAidHJ1ZSIKK2ltcG9ydCBqYXZhLmlvLio7CisKK2NsYXNzIGEgeworICAgIHByaXZhdGUgaW50IHh4eCw8Y2FyZXQ+azsKK30KKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9yZW5hbWVDb25zdHJ1Y3Rvck1hdGNoaW5nQ2xhc3MvYWZ0ZXIxLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3JlbmFtZUNvbnN0cnVjdG9yTWF0Y2hpbmdDbGFzcy9hZnRlcjEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNDkxZWExCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9yZW5hbWVDb25zdHJ1Y3Rvck1hdGNoaW5nQ2xhc3MvYWZ0ZXIxLmphdmEKQEAgLTAsMCArMSw0IEBACisvLyAiUmVuYW1lICdGb28nIHRvICdCYXInIiAidHJ1ZSIKK2NsYXNzIEJhciB7CisgIEJhcigpe30KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3JlbmFtZUNvbnN0cnVjdG9yTWF0Y2hpbmdDbGFzcy9iZWZvcmUxLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3JlbmFtZUNvbnN0cnVjdG9yTWF0Y2hpbmdDbGFzcy9iZWZvcmUxLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMThlZjA3NQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvcmVuYW1lQ29uc3RydWN0b3JNYXRjaGluZ0NsYXNzL2JlZm9yZTEuamF2YQpAQCAtMCwwICsxLDQgQEAKKy8vICJSZW5hbWUgJ0ZvbycgdG8gJ0JhciciICJ0cnVlIgorY2xhc3MgQmFyIHsKKyAgRm88Y2FyZXQ+bygpe30KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3JlbmFtZVdyb25nUmVmZXJlbmNlL2JlZm9yZTEuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvcmVuYW1lV3JvbmdSZWZlcmVuY2UvYmVmb3JlMS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ2MTc5NjAKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3JlbmFtZVdyb25nUmVmZXJlbmNlL2JlZm9yZTEuamF2YQpAQCAtMCwwICsxLDYgQEAKKy8vICJSZW5hbWUgUmVmZXJlbmNlIiAidHJ1ZSIKK2NsYXNzIGMgeworIHZvaWQgKCkgeworICAgaW50IGkgPSA8Y2FyZXQ+eDsKKyB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9yZW5hbWVXcm9uZ1JlZmVyZW5jZS9iZWZvcmUyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3JlbmFtZVdyb25nUmVmZXJlbmNlL2JlZm9yZTIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NzhjMDI5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9yZW5hbWVXcm9uZ1JlZmVyZW5jZS9iZWZvcmUyLmphdmEKQEAgLTAsMCArMSwxMSBAQAorLy8gIlJlbmFtZSBSZWZlcmVuY2UiICJ0cnVlIgorY2xhc3MgYyB7Cisgdm9pZCBmb28oYm9vbGVhbiBiKSB7CisgICBpZiAoYikgeworICAgICBpbnQgaSA9IDA7CisgICAgIGkrKzsKKyAgIH0gZWxzZSB7CisgICAgIGk8Y2FyZXQ+Kys7CisgICB9CisgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvcmVuYW1lV3JvbmdSZWZlcmVuY2UvYmVmb3JlUmVzb2x2ZWRNZXRob2QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvcmVuYW1lV3JvbmdSZWZlcmVuY2UvYmVmb3JlUmVzb2x2ZWRNZXRob2QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40Njk2ZjhlCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9yZW5hbWVXcm9uZ1JlZmVyZW5jZS9iZWZvcmVSZXNvbHZlZE1ldGhvZC5qYXZhCkBAIC0wLDAgKzEsOSBAQAorLy8gIlJlbmFtZSBSZWZlcmVuY2UiICJmYWxzZSIKK2NsYXNzIEZvbyB7CisgICAgdm9pZCBiYXIoaW50IHgpIHsKKyAgICB9CisKKyAgICB2b2lkIGJ1enooKSB7CisgICAgICAgIGI8Y2FyZXQ+YXIoKTsgLy8gVHJ5IHRvIHJlbmFtZSBiYXIgd2l0aCBTaGlmdCtGNgorICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3JlbmFtZVdyb25nUmVmZXJlbmNlL2JlZm9yZVJlc29sdmVkV2l0aEludmFsaWRBY2Nlc3NGaWVsZC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9yZW5hbWVXcm9uZ1JlZmVyZW5jZS9iZWZvcmVSZXNvbHZlZFdpdGhJbnZhbGlkQWNjZXNzRmllbGQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZGQ3M2RiCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9yZW5hbWVXcm9uZ1JlZmVyZW5jZS9iZWZvcmVSZXNvbHZlZFdpdGhJbnZhbGlkQWNjZXNzRmllbGQuamF2YQpAQCAtMCwwICsxLDEwIEBACisvLyAiUmVuYW1lIFJlZmVyZW5jZSIgInRydWUiCitjbGFzcyBGb29JbnRlcmZhY2UgeworICBwcml2YXRlIGludCBteUludDsKK30KKworY2xhc3MgRm9vIHsKKyAgICB2b2lkIGJ1enooKSB7CisgICAgICAgIG15STxjYXJldD5udCArIG15SW50OworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3JlcGxhY2VBZGRBbGxBcnJheVRvQ29sbGVjdGlvbnMvYWZ0ZXIxLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3JlcGxhY2VBZGRBbGxBcnJheVRvQ29sbGVjdGlvbnMvYWZ0ZXIxLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTc4MGZhYwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvcmVwbGFjZUFkZEFsbEFycmF5VG9Db2xsZWN0aW9ucy9hZnRlcjEuamF2YQpAQCAtMCwwICsxLDExIEBACisvLyAiUmVwbGFjZSBsLmFkZEFsbChvYmpzKSB3aXRoIGphdmEudXRpbC5Db2xsZWN0aW9ucy5hZGRBbGwobCwgb2JqcykiICJ0cnVlIgoraW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uczsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworY2xhc3MgQSB7CisgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpeworICAgIExpc3QgbCA9IG5ldyBMaXN0KCk7CisgICAgT2JqZWN0IFtdIG9ianMgPSBuZXcgT2JqZWN0WzBdOworICAgIENvbGxlY3Rpb25zLmFkZEFsbChsLCBvYmpzKTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvcmVwbGFjZUFkZEFsbEFycmF5VG9Db2xsZWN0aW9ucy9hZnRlcjIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvcmVwbGFjZUFkZEFsbEFycmF5VG9Db2xsZWN0aW9ucy9hZnRlcjIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZjhmZWIwOQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvcmVwbGFjZUFkZEFsbEFycmF5VG9Db2xsZWN0aW9ucy9hZnRlcjIuamF2YQpAQCAtMCwwICsxLDEwIEBACisvLyAiUmVwbGFjZSBhZGRBbGwob2Jqcykgd2l0aCBqYXZhLnV0aWwuQ29sbGVjdGlvbnMuYWRkQWxsKHRoaXMsIG9ianMpIiAidHJ1ZSIKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbnM7CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK2NsYXNzIEEgaW1wbGVtZW50cyBMaXN0IHsKKyAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncyl7CisgICAgT2JqZWN0W10gb2JqcyA9IG5ldyBPYmplY3RbMF07CisgICAgQ29sbGVjdGlvbnMuYWRkQWxsKHRoaXMsIG9ianMpOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9yZXBsYWNlQWRkQWxsQXJyYXlUb0NvbGxlY3Rpb25zL2JlZm9yZTEuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvcmVwbGFjZUFkZEFsbEFycmF5VG9Db2xsZWN0aW9ucy9iZWZvcmUxLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzVhOGVmMwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvcmVwbGFjZUFkZEFsbEFycmF5VG9Db2xsZWN0aW9ucy9iZWZvcmUxLmphdmEKQEAgLTAsMCArMSwxMCBAQAorLy8gIlJlcGxhY2UgbC5hZGRBbGwob2Jqcykgd2l0aCBqYXZhLnV0aWwuQ29sbGVjdGlvbnMuYWRkQWxsKGwsIG9ianMpIiAidHJ1ZSIKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworY2xhc3MgQSB7CisgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpeworICAgIExpc3QgbCA9IG5ldyBMaXN0KCk7CisgICAgT2JqZWN0IFtdIG9ianMgPSBuZXcgT2JqZWN0WzBdOworICAgIGwuYWRkQWxsKDxjYXJldD5vYmpzKTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvcmVwbGFjZUFkZEFsbEFycmF5VG9Db2xsZWN0aW9ucy9iZWZvcmUyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3JlcGxhY2VBZGRBbGxBcnJheVRvQ29sbGVjdGlvbnMvYmVmb3JlMi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY0NTcwOGIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3JlcGxhY2VBZGRBbGxBcnJheVRvQ29sbGVjdGlvbnMvYmVmb3JlMi5qYXZhCkBAIC0wLDAgKzEsOSBAQAorLy8gIlJlcGxhY2UgYWRkQWxsKG9ianMpIHdpdGggamF2YS51dGlsLkNvbGxlY3Rpb25zLmFkZEFsbCh0aGlzLCBvYmpzKSIgInRydWUiCitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK2NsYXNzIEEgaW1wbGVtZW50cyBMaXN0IHsKKyAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncyl7CisgICAgT2JqZWN0W10gb2JqcyA9IG5ldyBPYmplY3RbMF07CisgICAgYWRkQWxsKDxjYXJldD5vYmpzKTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvcmVwbGFjZUFkZEFsbEFycmF5VG9Db2xsZWN0aW9ucy9iZWZvcmUzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3JlcGxhY2VBZGRBbGxBcnJheVRvQ29sbGVjdGlvbnMvYmVmb3JlMy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg3MzA4ZTIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3JlcGxhY2VBZGRBbGxBcnJheVRvQ29sbGVjdGlvbnMvYmVmb3JlMy5qYXZhCkBAIC0wLDAgKzEsOCBAQAorLy8gIlJlcGxhY2UgbC5yZW1vdmVBbGwob2Jqcykgd2l0aCBqYXZhLnV0aWwuQ29sbGVjdGlvbnMuYWRkQWxsKGwsIG9ianMpIiAiZmFsc2UiCitjbGFzcyBUIHsKKyAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncyl7CisgICAgTGlzdCBsID0gbmV3IExpc3QoKTsKKyAgICBPYmplY3RbXSBvYmpzID0gbmV3IE9iamVjdFswXTsKKyAgICBsLnJlbW92ZUFsbCg8Y2FyZXQ+b2Jqcyk7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3JlcGxhY2VDYXN0V2l0aFZhcmlhYmxlL2FmdGVyQ2hhbmdlZEFmdGVyQ2FzdGluZ1Zhci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9yZXBsYWNlQ2FzdFdpdGhWYXJpYWJsZS9hZnRlckNoYW5nZWRBZnRlckNhc3RpbmdWYXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZTU1ZDM3Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9yZXBsYWNlQ2FzdFdpdGhWYXJpYWJsZS9hZnRlckNoYW5nZWRBZnRlckNhc3RpbmdWYXIuamF2YQpAQCAtMCwwICsxLDEzIEBACisvLyAiUmVwbGFjZSAnKEZvb0Jhcilmb28nIHdpdGggJ2Zvb2JhciciICJ0cnVlIgorCitpbXBvcnQgamF2YS5sYW5nLk9iamVjdDsKKworY2xhc3MgRm9vQmFyIHsKKyAgcHVibGljIGludCBiYXo7CisKKyAgaW50IG1ldGhvZChPYmplY3QgZm9vKSB7CisgICAgRm9vQmFyIGZvb2JhciA9IChGb29CYXIpZm9vOworICAgIE9iamVjdCBvID0gZm9vYmFyLmJhejsKKyAgICBmb28gPSBudWxsOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9yZXBsYWNlQ2FzdFdpdGhWYXJpYWJsZS9hZnRlckNoYW5nZWRBZnRlclZhci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9yZXBsYWNlQ2FzdFdpdGhWYXJpYWJsZS9hZnRlckNoYW5nZWRBZnRlclZhci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYxNmQyNmIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3JlcGxhY2VDYXN0V2l0aFZhcmlhYmxlL2FmdGVyQ2hhbmdlZEFmdGVyVmFyLmphdmEKQEAgLTAsMCArMSwxMyBAQAorLy8gIlJlcGxhY2UgJyhGb29CYXIpZm9vJyB3aXRoICdmb29iYXInIiAidHJ1ZSIKKworaW1wb3J0IGphdmEubGFuZy5PYmplY3Q7CisKK2NsYXNzIEZvb0JhciB7CisgIHB1YmxpYyBpbnQgYmF6OworCisgIGludCBtZXRob2QoT2JqZWN0IGZvbykgeworICAgIEZvb0JhciBmb29iYXIgPSAoRm9vQmFyKWZvbzsKKyAgICBPYmplY3QgbyA9IGZvb2Jhci5iYXo7CisgICAgZm9vYmFyID0gbnVsbDsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvcmVwbGFjZUNhc3RXaXRoVmFyaWFibGUvYWZ0ZXJDaGFuZ2VkQmVmb3JlQ2FzdGluZ1Zhci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9yZXBsYWNlQ2FzdFdpdGhWYXJpYWJsZS9hZnRlckNoYW5nZWRCZWZvcmVDYXN0aW5nVmFyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDY2Y2Y5MgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvcmVwbGFjZUNhc3RXaXRoVmFyaWFibGUvYWZ0ZXJDaGFuZ2VkQmVmb3JlQ2FzdGluZ1Zhci5qYXZhCkBAIC0wLDAgKzEsMTEgQEAKKy8vICJSZXBsYWNlICcoRm9vQmFyKWZvbycgd2l0aCAnZm9vYmFyJyIgInRydWUiCisKK2NsYXNzIEZvb0JhciB7CisgIHB1YmxpYyBpbnQgYmF6OworCisgIGludCBtZXRob2QoT2JqZWN0IGZvbykgeworICAgIGZvbyA9IG51bGw7CisgICAgRm9vQmFyIGZvb2JhciA9IChGb29CYXIpZm9vOworICAgIHJldHVybiBmb29iYXIuYmF6OworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9yZXBsYWNlQ2FzdFdpdGhWYXJpYWJsZS9hZnRlckNoYW5nZWRCZWZvcmVWYXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvcmVwbGFjZUNhc3RXaXRoVmFyaWFibGUvYWZ0ZXJDaGFuZ2VkQmVmb3JlVmFyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWNmZmEwOAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvcmVwbGFjZUNhc3RXaXRoVmFyaWFibGUvYWZ0ZXJDaGFuZ2VkQmVmb3JlVmFyLmphdmEKQEAgLTAsMCArMSwxMSBAQAorLy8gIlJlcGxhY2UgJyhGb29CYXIpZm9vJyB3aXRoICdmb29iYXInIiAidHJ1ZSIKKworY2xhc3MgRm9vQmFyIHsKKyAgcHVibGljIGludCBiYXo7CisKKyAgaW50IG1ldGhvZChPYmplY3QgZm9vKSB7CisgICAgZm9vYmFyID0gbnVsbDsKKyAgICBGb29CYXIgZm9vYmFyID0gKEZvb0Jhcilmb287CisgICAgcmV0dXJuIGZvb2Jhci5iYXo7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3JlcGxhY2VDYXN0V2l0aFZhcmlhYmxlL2FmdGVyQ2hhbmdlZFR3aWNlLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3JlcGxhY2VDYXN0V2l0aFZhcmlhYmxlL2FmdGVyQ2hhbmdlZFR3aWNlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTJkYWIwZgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvcmVwbGFjZUNhc3RXaXRoVmFyaWFibGUvYWZ0ZXJDaGFuZ2VkVHdpY2UuamF2YQpAQCAtMCwwICsxLDEzIEBACisvLyAiUmVwbGFjZSAnKEZvb0Jhcilmb28nIHdpdGggJ2Zvb2JhciciICJ0cnVlIgorCitjbGFzcyBGb29CYXIgeworICBwdWJsaWMgaW50IGJhejsKKworICBpbnQgbWV0aG9kKE9iamVjdCBmb28pIHsKKyAgICBGb29CYXIgZm9vYmFyID0gKEZvb0Jhcilmb287CisgICAgZm9vYmFyID0gbnVsbDsKKyAgICBmb28gPSBudWxsOworICAgIGZvb2JhciA9IChGb29CYXIpZm9vOworICAgIHJldHVybiBmb29iYXIuYmF6OworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9yZXBsYWNlQ2FzdFdpdGhWYXJpYWJsZS9hZnRlclNpbXBsZS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9yZXBsYWNlQ2FzdFdpdGhWYXJpYWJsZS9hZnRlclNpbXBsZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlmNWNjNDEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3JlcGxhY2VDYXN0V2l0aFZhcmlhYmxlL2FmdGVyU2ltcGxlLmphdmEKQEAgLTAsMCArMSwxMCBAQAorLy8gIlJlcGxhY2UgJyhGb29CYXIpZm9vJyB3aXRoICdmb29iYXInIiAidHJ1ZSIKKworY2xhc3MgRm9vQmFyIHsKKyAgcHVibGljIGludCBiYXo7CisKKyAgaW50IG1ldGhvZChPYmplY3QgZm9vKSB7CisgICAgRm9vQmFyIGZvb2JhciA9IChGb29CYXIpZm9vOworICAgIHJldHVybiBmb29iYXIuYmF6OworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9yZXBsYWNlQ2FzdFdpdGhWYXJpYWJsZS9hZnRlclR3b1ZhcnMuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvcmVwbGFjZUNhc3RXaXRoVmFyaWFibGUvYWZ0ZXJUd29WYXJzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDQwNjIwZAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvcmVwbGFjZUNhc3RXaXRoVmFyaWFibGUvYWZ0ZXJUd29WYXJzLmphdmEKQEAgLTAsMCArMSwxMiBAQAorLy8gIlJlcGxhY2UgJyhGb29CYXIpZm9vJyB3aXRoICdmb29iYXIyJyIgInRydWUiCisKK2NsYXNzIEZvb0JhciB7CisgIHB1YmxpYyBpbnQgYmF6OworCisgIGludCBtZXRob2QoT2JqZWN0IGZvbykgeworICAgIEZvb0JhciBmb29iYXIgPSAoRm9vQmFyKWZvbzsKKyAgICBmb29iYXIgPSBudWxsOworICAgIEZvb0JhciBmb29iYXIyID0gKEZvb0Jhcilmb287CisgICAgcmV0dXJuIGZvb2JhcjIuYmF6OworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9yZXBsYWNlQ2FzdFdpdGhWYXJpYWJsZS9iZWZvcmVDaGFuZ2VkQWZ0ZXJDYXN0aW5nVmFyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3JlcGxhY2VDYXN0V2l0aFZhcmlhYmxlL2JlZm9yZUNoYW5nZWRBZnRlckNhc3RpbmdWYXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xODgyYzkxCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9yZXBsYWNlQ2FzdFdpdGhWYXJpYWJsZS9iZWZvcmVDaGFuZ2VkQWZ0ZXJDYXN0aW5nVmFyLmphdmEKQEAgLTAsMCArMSwxMyBAQAorLy8gIlJlcGxhY2UgJyhGb29CYXIpZm9vJyB3aXRoICdmb29iYXInIiAidHJ1ZSIKKworaW1wb3J0IGphdmEubGFuZy5PYmplY3Q7CisKK2NsYXNzIEZvb0JhciB7CisgIHB1YmxpYyBpbnQgYmF6OworCisgIGludCBtZXRob2QoT2JqZWN0IGZvbykgeworICAgIEZvb0JhciBmb29iYXIgPSAoRm9vQmFyKWZvbzsKKyAgICBPYmplY3QgbyA9ICgoRm9vQmFyPGNhcmV0Pilmb28pLmJhejsKKyAgICBmb28gPSBudWxsOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9yZXBsYWNlQ2FzdFdpdGhWYXJpYWJsZS9iZWZvcmVDaGFuZ2VkQWZ0ZXJWYXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvcmVwbGFjZUNhc3RXaXRoVmFyaWFibGUvYmVmb3JlQ2hhbmdlZEFmdGVyVmFyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDQzNzUyZgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvcmVwbGFjZUNhc3RXaXRoVmFyaWFibGUvYmVmb3JlQ2hhbmdlZEFmdGVyVmFyLmphdmEKQEAgLTAsMCArMSwxMyBAQAorLy8gIlJlcGxhY2UgJyhGb29CYXIpZm9vJyB3aXRoICdmb29iYXInIiAidHJ1ZSIKKworaW1wb3J0IGphdmEubGFuZy5PYmplY3Q7CisKK2NsYXNzIEZvb0JhciB7CisgIHB1YmxpYyBpbnQgYmF6OworCisgIGludCBtZXRob2QoT2JqZWN0IGZvbykgeworICAgIEZvb0JhciBmb29iYXIgPSAoRm9vQmFyKWZvbzsKKyAgICBPYmplY3QgbyA9ICgoRm9vQmFyPGNhcmV0Pilmb28pLmJhejsKKyAgICBmb29iYXIgPSBudWxsOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9yZXBsYWNlQ2FzdFdpdGhWYXJpYWJsZS9iZWZvcmVDaGFuZ2VkQmVmb3JlQ2FzdGluZ1Zhci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9yZXBsYWNlQ2FzdFdpdGhWYXJpYWJsZS9iZWZvcmVDaGFuZ2VkQmVmb3JlQ2FzdGluZ1Zhci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNlZWNmMDEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3JlcGxhY2VDYXN0V2l0aFZhcmlhYmxlL2JlZm9yZUNoYW5nZWRCZWZvcmVDYXN0aW5nVmFyLmphdmEKQEAgLTAsMCArMSwxMSBAQAorLy8gIlJlcGxhY2UgJyhGb29CYXIpZm9vJyB3aXRoICdmb29iYXInIiAidHJ1ZSIKKworY2xhc3MgRm9vQmFyIHsKKyAgcHVibGljIGludCBiYXo7CisKKyAgaW50IG1ldGhvZChPYmplY3QgZm9vKSB7CisgICAgZm9vID0gbnVsbDsKKyAgICBGb29CYXIgZm9vYmFyID0gKEZvb0Jhcilmb287CisgICAgcmV0dXJuICgoRm9vQmFyPGNhcmV0Pilmb28pLmJhejsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvcmVwbGFjZUNhc3RXaXRoVmFyaWFibGUvYmVmb3JlQ2hhbmdlZEJlZm9yZVZhci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9yZXBsYWNlQ2FzdFdpdGhWYXJpYWJsZS9iZWZvcmVDaGFuZ2VkQmVmb3JlVmFyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzA4NGRiMAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvcmVwbGFjZUNhc3RXaXRoVmFyaWFibGUvYmVmb3JlQ2hhbmdlZEJlZm9yZVZhci5qYXZhCkBAIC0wLDAgKzEsMTEgQEAKKy8vICJSZXBsYWNlICcoRm9vQmFyKWZvbycgd2l0aCAnZm9vYmFyJyIgInRydWUiCisKK2NsYXNzIEZvb0JhciB7CisgIHB1YmxpYyBpbnQgYmF6OworCisgIGludCBtZXRob2QoT2JqZWN0IGZvbykgeworICAgIGZvb2JhciA9IG51bGw7CisgICAgRm9vQmFyIGZvb2JhciA9IChGb29CYXIpZm9vOworICAgIHJldHVybiAoKEZvb0JhcjxjYXJldD4pZm9vKS5iYXo7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3JlcGxhY2VDYXN0V2l0aFZhcmlhYmxlL2JlZm9yZUNoYW5nZWRDYXN0aW5nVmFyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3JlcGxhY2VDYXN0V2l0aFZhcmlhYmxlL2JlZm9yZUNoYW5nZWRDYXN0aW5nVmFyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWY0ZTcxZAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvcmVwbGFjZUNhc3RXaXRoVmFyaWFibGUvYmVmb3JlQ2hhbmdlZENhc3RpbmdWYXIuamF2YQpAQCAtMCwwICsxLDExIEBACisvLyAiUmVwbGFjZSAnKEZvb0Jhcilmb28nIHdpdGggJ2Zvb2JhciciICJmYWxzZSIKKworY2xhc3MgRm9vQmFyIHsKKyAgcHVibGljIGludCBiYXo7CisKKyAgaW50IG1ldGhvZChPYmplY3QgZm9vKSB7CisgICAgRm9vQmFyIGZvb2JhciA9IChGb29CYXIpZm9vOworICAgIGZvbyA9IG51bGw7CisgICAgcmV0dXJuICgoRm9vQmFyPGNhcmV0Pilmb28pLmJhejsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvcmVwbGFjZUNhc3RXaXRoVmFyaWFibGUvYmVmb3JlQ2hhbmdlZFR3aWNlLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3JlcGxhY2VDYXN0V2l0aFZhcmlhYmxlL2JlZm9yZUNoYW5nZWRUd2ljZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE0MjliZGMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3JlcGxhY2VDYXN0V2l0aFZhcmlhYmxlL2JlZm9yZUNoYW5nZWRUd2ljZS5qYXZhCkBAIC0wLDAgKzEsMTMgQEAKKy8vICJSZXBsYWNlICcoRm9vQmFyKWZvbycgd2l0aCAnZm9vYmFyJyIgInRydWUiCisKK2NsYXNzIEZvb0JhciB7CisgIHB1YmxpYyBpbnQgYmF6OworCisgIGludCBtZXRob2QoT2JqZWN0IGZvbykgeworICAgIEZvb0JhciBmb29iYXIgPSAoRm9vQmFyKWZvbzsKKyAgICBmb29iYXIgPSBudWxsOworICAgIGZvbyA9IG51bGw7CisgICAgZm9vYmFyID0gKEZvb0Jhcilmb287CisgICAgcmV0dXJuICgoRm9vQmFyPGNhcmV0Pilmb28pLmJhejsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvcmVwbGFjZUNhc3RXaXRoVmFyaWFibGUvYmVmb3JlQ2hhbmdlZFZhci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9yZXBsYWNlQ2FzdFdpdGhWYXJpYWJsZS9iZWZvcmVDaGFuZ2VkVmFyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWRkNjI3OQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvcmVwbGFjZUNhc3RXaXRoVmFyaWFibGUvYmVmb3JlQ2hhbmdlZFZhci5qYXZhCkBAIC0wLDAgKzEsMTEgQEAKKy8vICJSZXBsYWNlICcoRm9vQmFyKWZvbycgd2l0aCAnZm9vYmFyJyIgImZhbHNlIgorCitjbGFzcyBGb29CYXIgeworICBwdWJsaWMgaW50IGJhejsKKworICBpbnQgbWV0aG9kKE9iamVjdCBmb28pIHsKKyAgICBGb29CYXIgZm9vYmFyID0gKEZvb0Jhcilmb287CisgICAgZm9vYmFyID0gbnVsbDsKKyAgICByZXR1cm4gKChGb29CYXI8Y2FyZXQ+KWZvbykuYmF6OworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9yZXBsYWNlQ2FzdFdpdGhWYXJpYWJsZS9iZWZvcmVTaW1wbGUuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvcmVwbGFjZUNhc3RXaXRoVmFyaWFibGUvYmVmb3JlU2ltcGxlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjQ5MDVlNAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvcmVwbGFjZUNhc3RXaXRoVmFyaWFibGUvYmVmb3JlU2ltcGxlLmphdmEKQEAgLTAsMCArMSwxMCBAQAorLy8gIlJlcGxhY2UgJyhGb29CYXIpZm9vJyB3aXRoICdmb29iYXInIiAidHJ1ZSIKKworY2xhc3MgRm9vQmFyIHsKKyAgcHVibGljIGludCBiYXo7CisKKyAgaW50IG1ldGhvZChPYmplY3QgZm9vKSB7CisgICAgRm9vQmFyIGZvb2JhciA9IChGb29CYXIpZm9vOworICAgIHJldHVybiAoKEZvb0JhcjxjYXJldD4pZm9vKS5iYXo7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3JlcGxhY2VDYXN0V2l0aFZhcmlhYmxlL2JlZm9yZVR3b1ZhcnMuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvcmVwbGFjZUNhc3RXaXRoVmFyaWFibGUvYmVmb3JlVHdvVmFycy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI4Yzg4ZDEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3JlcGxhY2VDYXN0V2l0aFZhcmlhYmxlL2JlZm9yZVR3b1ZhcnMuamF2YQpAQCAtMCwwICsxLDEyIEBACisvLyAiUmVwbGFjZSAnKEZvb0Jhcilmb28nIHdpdGggJ2Zvb2JhcjInIiAidHJ1ZSIKKworY2xhc3MgRm9vQmFyIHsKKyAgcHVibGljIGludCBiYXo7CisKKyAgaW50IG1ldGhvZChPYmplY3QgZm9vKSB7CisgICAgRm9vQmFyIGZvb2JhciA9IChGb29CYXIpZm9vOworICAgIGZvb2JhciA9IG51bGw7CisgICAgRm9vQmFyIGZvb2JhcjIgPSAoRm9vQmFyKWZvbzsKKyAgICByZXR1cm4gKChGb29CYXI8Y2FyZXQ+KWZvbykuYmF6OworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9yZXBsYWNlRmllbGRXaXRoR2V0dGVyU2V0dGVyL2FmdGVyMy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9yZXBsYWNlRmllbGRXaXRoR2V0dGVyU2V0dGVyL2FmdGVyMy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkyYjlmODQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3JlcGxhY2VGaWVsZFdpdGhHZXR0ZXJTZXR0ZXIvYWZ0ZXIzLmphdmEKQEAgLTAsMCArMSwxNCBAQAorLy8gIlJlcGxhY2Ugd2l0aCBnZXR0ZXIiICJ0cnVlIgorY2xhc3MgVGVzdCB7CisgIHByaXZhdGUgaW50IGk7CisKKyAgcHVibGljIGludCBnZXRJKCkgeworICAgIHJldHVybiBpOworICB9Cit9CisKK2NsYXNzIEZvbyB7CisgIHZvaWQgZm9vKFRlc3QgdCkgeworICAgIFN5c3RlbS5vdXQucHJpbnRsbih0LmdldEkoKSk7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3JlcGxhY2VGaWVsZFdpdGhHZXR0ZXJTZXR0ZXIvYWZ0ZXI1LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3JlcGxhY2VGaWVsZFdpdGhHZXR0ZXJTZXR0ZXIvYWZ0ZXI1LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGUyNzc0YwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvcmVwbGFjZUZpZWxkV2l0aEdldHRlclNldHRlci9hZnRlcjUuamF2YQpAQCAtMCwwICsxLDE0IEBACisvLyAiUmVwbGFjZSB3aXRoIHNldHRlciIgInRydWUiCitjbGFzcyBUZXN0IHsKKyAgcHJpdmF0ZSBpbnQgaTsKKworICBwdWJsaWMgdm9pZCBzZXRJKGludCBpKSB7CisgICAgdGhpcy5pID0gaTsKKyAgfQorfQorCitjbGFzcyBGb28geworICB2b2lkIGZvbyhUZXN0IHQpIHsKKyAgICB0LnNldEkoMCk7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3JlcGxhY2VGaWVsZFdpdGhHZXR0ZXJTZXR0ZXIvYWZ0ZXI2LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3JlcGxhY2VGaWVsZFdpdGhHZXR0ZXJTZXR0ZXIvYWZ0ZXI2LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2RkMzJmYgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvcmVwbGFjZUZpZWxkV2l0aEdldHRlclNldHRlci9hZnRlcjYuamF2YQpAQCAtMCwwICsxLDggQEAKKy8vICJSZXBsYWNlIHdpdGggZ2V0dGVyIiAidHJ1ZSIKK2ltcG9ydCBqYXZhLmlvLkZpbGU7CisKK2NsYXNzIEZvbyB7CisgIHZvaWQgZm9vKEZpbGUgZikgeworICAgIFN0cmluZyBzcyA9IGYuZ2V0UGF0aCgpOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9yZXBsYWNlRmllbGRXaXRoR2V0dGVyU2V0dGVyL2JlZm9yZTEuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvcmVwbGFjZUZpZWxkV2l0aEdldHRlclNldHRlci9iZWZvcmUxLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzEwNzA1YgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvcmVwbGFjZUZpZWxkV2l0aEdldHRlclNldHRlci9iZWZvcmUxLmphdmEKQEAgLTAsMCArMSwxMCBAQAorLy8gIlJlcGxhY2Ugd2l0aCBnZXR0ZXIiICJmYWxzZSIKK2NsYXNzIFRlc3QgeworICBwcml2YXRlIGludCBpOworfQorCitjbGFzcyBGb28geworICB2b2lkIGZvbyhUZXN0IHQpIHsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4odC48Y2FyZXQ+aSk7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3JlcGxhY2VGaWVsZFdpdGhHZXR0ZXJTZXR0ZXIvYmVmb3JlMi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9yZXBsYWNlRmllbGRXaXRoR2V0dGVyU2V0dGVyL2JlZm9yZTIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NTBhYzYyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9yZXBsYWNlRmllbGRXaXRoR2V0dGVyU2V0dGVyL2JlZm9yZTIuamF2YQpAQCAtMCwwICsxLDEwIEBACisvLyAiUmVwbGFjZSB3aXRoIHNldHRlciIgImZhbHNlIgorY2xhc3MgVGVzdCB7CisgIHByaXZhdGUgaW50IGk7Cit9CisKK2NsYXNzIEZvbyB7CisgIHZvaWQgZm9vKFRlc3QgdCkgeworICAgIFN5c3RlbS5vdXQucHJpbnRsbih0LjxjYXJldD5pKTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvcmVwbGFjZUZpZWxkV2l0aEdldHRlclNldHRlci9iZWZvcmUzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3JlcGxhY2VGaWVsZFdpdGhHZXR0ZXJTZXR0ZXIvYmVmb3JlMy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYzZmVjYjcKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3JlcGxhY2VGaWVsZFdpdGhHZXR0ZXJTZXR0ZXIvYmVmb3JlMy5qYXZhCkBAIC0wLDAgKzEsMTQgQEAKKy8vICJSZXBsYWNlIHdpdGggZ2V0dGVyIiAidHJ1ZSIKK2NsYXNzIFRlc3QgeworICBwcml2YXRlIGludCBpOworCisgIHB1YmxpYyBpbnQgZ2V0SSgpIHsKKyAgICByZXR1cm4gaTsKKyAgfQorfQorCitjbGFzcyBGb28geworICB2b2lkIGZvbyhUZXN0IHQpIHsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4odC48Y2FyZXQ+aSk7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3JlcGxhY2VGaWVsZFdpdGhHZXR0ZXJTZXR0ZXIvYmVmb3JlNC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9yZXBsYWNlRmllbGRXaXRoR2V0dGVyU2V0dGVyL2JlZm9yZTQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMzZlMmYxCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9yZXBsYWNlRmllbGRXaXRoR2V0dGVyU2V0dGVyL2JlZm9yZTQuamF2YQpAQCAtMCwwICsxLDE0IEBACisvLyAiUmVwbGFjZSB3aXRoIGdldHRlciIgImZhbHNlIgorY2xhc3MgVGVzdCB7CisgIHByaXZhdGUgaW50IGk7CisKKyAgcHVibGljIGludCBnZXRJKCkgeworICAgIHJldHVybiBpOworICB9Cit9CisKK2NsYXNzIEZvbyB7CisgIHZvaWQgZm9vKFRlc3QgdCkgeworICAgIHQuPGNhcmV0PmkgPSAwOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9yZXBsYWNlRmllbGRXaXRoR2V0dGVyU2V0dGVyL2JlZm9yZTUuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvcmVwbGFjZUZpZWxkV2l0aEdldHRlclNldHRlci9iZWZvcmU1LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzA2MTI3ZgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvcmVwbGFjZUZpZWxkV2l0aEdldHRlclNldHRlci9iZWZvcmU1LmphdmEKQEAgLTAsMCArMSwxNCBAQAorLy8gIlJlcGxhY2Ugd2l0aCBzZXR0ZXIiICJ0cnVlIgorY2xhc3MgVGVzdCB7CisgIHByaXZhdGUgaW50IGk7CisKKyAgcHVibGljIHZvaWQgc2V0SShpbnQgaSkgeworICAgIHRoaXMuaSA9IGk7CisgIH0KK30KKworY2xhc3MgRm9vIHsKKyAgdm9pZCBmb28oVGVzdCB0KSB7CisgICAgdC48Y2FyZXQ+aSA9IDA7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3JlcGxhY2VGaWVsZFdpdGhHZXR0ZXJTZXR0ZXIvYmVmb3JlNi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9yZXBsYWNlRmllbGRXaXRoR2V0dGVyU2V0dGVyL2JlZm9yZTYuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNzA1NDFhCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9yZXBsYWNlRmllbGRXaXRoR2V0dGVyU2V0dGVyL2JlZm9yZTYuamF2YQpAQCAtMCwwICsxLDggQEAKKy8vICJSZXBsYWNlIHdpdGggZ2V0dGVyIiAidHJ1ZSIKK2ltcG9ydCBqYXZhLmlvLkZpbGU7CisKK2NsYXNzIEZvbyB7CisgIHZvaWQgZm9vKEZpbGUgZikgeworICAgIFN0cmluZyBzcyA9IGYuPGNhcmV0PnBhdGg7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3JlcGxhY2VQcmltaXRpdmVXaXRoQm94ZWQvYWZ0ZXJQcmltaXRpdmUuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvcmVwbGFjZVByaW1pdGl2ZVdpdGhCb3hlZC9hZnRlclByaW1pdGl2ZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU5NjRhYTQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3JlcGxhY2VQcmltaXRpdmVXaXRoQm94ZWQvYWZ0ZXJQcmltaXRpdmUuamF2YQpAQCAtMCwwICsxLDYgQEAKKy8vICJDb252ZXJ0ICdpbnQnIHRvICdqYXZhLmxhbmcuSW50ZWdlciciICJ0cnVlIgoraW1wb3J0IGphdmEudXRpbC4qOworCitjbGFzcyBUZXN0IHsKKyAgU2V0PEludGVnZXI+IGY7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9yZXBsYWNlUHJpbWl0aXZlV2l0aEJveGVkL2FmdGVyV2lsZGNhcmQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvcmVwbGFjZVByaW1pdGl2ZVdpdGhCb3hlZC9hZnRlcldpbGRjYXJkLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWI4ZDIxOAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvcmVwbGFjZVByaW1pdGl2ZVdpdGhCb3hlZC9hZnRlcldpbGRjYXJkLmphdmEKQEAgLTAsMCArMSw2IEBACisvLyAiQ29udmVydCAnaW50JyB0byAnamF2YS5sYW5nLkludGVnZXInIiAidHJ1ZSIKK2ltcG9ydCBqYXZhLnV0aWwuKjsKKworY2xhc3MgVGVzdCB7CisgIFNldDw/IGV4dGVuZHMgSW50ZWdlcj4gZjsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3JlcGxhY2VQcmltaXRpdmVXaXRoQm94ZWQvYmVmb3JlUHJpbWl0aXZlLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3JlcGxhY2VQcmltaXRpdmVXaXRoQm94ZWQvYmVmb3JlUHJpbWl0aXZlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzRiMzQwZAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvcmVwbGFjZVByaW1pdGl2ZVdpdGhCb3hlZC9iZWZvcmVQcmltaXRpdmUuamF2YQpAQCAtMCwwICsxLDYgQEAKKy8vICJDb252ZXJ0ICdpbnQnIHRvICdqYXZhLmxhbmcuSW50ZWdlciciICJ0cnVlIgoraW1wb3J0IGphdmEudXRpbC4qOworCitjbGFzcyBUZXN0IHsKKyAgU2V0PGluPGNhcmV0PnQ+IGY7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9yZXBsYWNlUHJpbWl0aXZlV2l0aEJveGVkL2JlZm9yZVdpbGRjYXJkLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3JlcGxhY2VQcmltaXRpdmVXaXRoQm94ZWQvYmVmb3JlV2lsZGNhcmQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZGIxNGMwCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9yZXBsYWNlUHJpbWl0aXZlV2l0aEJveGVkL2JlZm9yZVdpbGRjYXJkLmphdmEKQEAgLTAsMCArMSw2IEBACisvLyAiQ29udmVydCAnaW50JyB0byAnamF2YS5sYW5nLkludGVnZXInIiAidHJ1ZSIKK2ltcG9ydCBqYXZhLnV0aWwuKjsKKworY2xhc3MgVGVzdCB7CisgIFNldDw/IGV4dGVuZHMgaW48Y2FyZXQ+dD4gZjsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3JlcGxhY2VXaXRoTGlzdEFjY2Vzcy9hZnRlckV4cHJlc3Npb24uamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvcmVwbGFjZVdpdGhMaXN0QWNjZXNzL2FmdGVyRXhwcmVzc2lvbi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEzYzU5ZDIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3JlcGxhY2VXaXRoTGlzdEFjY2Vzcy9hZnRlckV4cHJlc3Npb24uamF2YQpAQCAtMCwwICsxLDEwIEBACisvLyAiUmVwbGFjZSB3aXRoIGxpc3QgYWNjZXNzIiAidHJ1ZSIKKworaW1wb3J0IGphdmEubGFuZy5NYXRoOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitjbGFzcyBBIHsKKyAgdm9pZCB0ZXN0KExpc3Q8TGlzdD4gbGlzdHMpIHsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4obGlzdHMuZ2V0KE1hdGgubWF4KE1hdGguYWJzKC0yKSwgMykpKTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvcmVwbGFjZVdpdGhMaXN0QWNjZXNzL2FmdGVySWRleElzQm94ZWRJbnRlZ2VyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3JlcGxhY2VXaXRoTGlzdEFjY2Vzcy9hZnRlcklkZXhJc0JveGVkSW50ZWdlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU1MWRhZDIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3JlcGxhY2VXaXRoTGlzdEFjY2Vzcy9hZnRlcklkZXhJc0JveGVkSW50ZWdlci5qYXZhCkBAIC0wLDAgKzEsMTAgQEAKKy8vICJSZXBsYWNlIHdpdGggbGlzdCBhY2Nlc3MiICJ0cnVlIgorCitpbXBvcnQgamF2YS5sYW5nLkludGVnZXI7CitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKKworY2xhc3MgQSB7CisgIHZvaWQgdGVzdChBcnJheUxpc3QgbGlzdCkgeworICAgIFN5c3RlbS5vdXQucHJpbnRsbihsaXN0LmdldChuZXcgSW50ZWdlcigwKSkpOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9yZXBsYWNlV2l0aExpc3RBY2Nlc3MvYWZ0ZXJMaXN0T2ZMaXN0cy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9yZXBsYWNlV2l0aExpc3RBY2Nlc3MvYWZ0ZXJMaXN0T2ZMaXN0cy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg4ZGUxNGMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3JlcGxhY2VXaXRoTGlzdEFjY2Vzcy9hZnRlckxpc3RPZkxpc3RzLmphdmEKQEAgLTAsMCArMSw5IEBACisvLyAiUmVwbGFjZSB3aXRoIGxpc3QgYWNjZXNzIiAidHJ1ZSIKKworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitjbGFzcyBBIHsKKyAgdm9pZCB0ZXN0KExpc3Q8TGlzdD4gbGlzdHMpIHsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4obGlzdHMuZ2V0KDApLmdldCgwKSk7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3JlcGxhY2VXaXRoTGlzdEFjY2Vzcy9hZnRlclNldFN0YXRlbWVudC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9yZXBsYWNlV2l0aExpc3RBY2Nlc3MvYWZ0ZXJTZXRTdGF0ZW1lbnQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OTk2YWI0Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9yZXBsYWNlV2l0aExpc3RBY2Nlc3MvYWZ0ZXJTZXRTdGF0ZW1lbnQuamF2YQpAQCAtMCwwICsxLDkgQEAKKy8vICJSZXBsYWNlIHdpdGggbGlzdCBhY2Nlc3MiICJ0cnVlIgorCitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKKworY2xhc3MgQSB7CisgIHZvaWQgdGVzdChBcnJheUxpc3Q8SW50ZWdlcj4gbGlzdCkgeworICAgIGxpc3Quc2V0KDAsIDUpOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9yZXBsYWNlV2l0aExpc3RBY2Nlc3MvYWZ0ZXJTaW1wbGUuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvcmVwbGFjZVdpdGhMaXN0QWNjZXNzL2FmdGVyU2ltcGxlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjcyNDc0MQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvcmVwbGFjZVdpdGhMaXN0QWNjZXNzL2FmdGVyU2ltcGxlLmphdmEKQEAgLTAsMCArMSw5IEBACisvLyAiUmVwbGFjZSB3aXRoIGxpc3QgYWNjZXNzIiAidHJ1ZSIKKworaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CisKK2NsYXNzIEEgeworICB2b2lkIHRlc3QoQXJyYXlMaXN0IGxpc3QpIHsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4obGlzdC5nZXQoMCkpOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9yZXBsYWNlV2l0aExpc3RBY2Nlc3MvYmVmb3JlQXNzaWdubWVudEluSWZDb25kaXRpb24uamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvcmVwbGFjZVdpdGhMaXN0QWNjZXNzL2JlZm9yZUFzc2lnbm1lbnRJbklmQ29uZGl0aW9uLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGRkZmJmMwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvcmVwbGFjZVdpdGhMaXN0QWNjZXNzL2JlZm9yZUFzc2lnbm1lbnRJbklmQ29uZGl0aW9uLmphdmEKQEAgLTAsMCArMSwxMSBAQAorLy8gIlJlcGxhY2Ugd2l0aCBsaXN0IGFjY2VzcyIgImZhbHNlIgorCitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKKworY2xhc3MgQSB7CisgIHZvaWQgdGVzdChBcnJheUxpc3Q8SW50ZWdlcj4gbGlzdCkgeworICAgIGlmIChsaXM8Y2FyZXQ+dFswXSA9IDUgPT0gNSl7CisKKyAgICB9CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3JlcGxhY2VXaXRoTGlzdEFjY2Vzcy9iZWZvcmVFeHByZXNzaW9uLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3JlcGxhY2VXaXRoTGlzdEFjY2Vzcy9iZWZvcmVFeHByZXNzaW9uLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzI0NzcwZgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvcmVwbGFjZVdpdGhMaXN0QWNjZXNzL2JlZm9yZUV4cHJlc3Npb24uamF2YQpAQCAtMCwwICsxLDEwIEBACisvLyAiUmVwbGFjZSB3aXRoIGxpc3QgYWNjZXNzIiAidHJ1ZSIKKworaW1wb3J0IGphdmEubGFuZy5NYXRoOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitjbGFzcyBBIHsKKyAgdm9pZCB0ZXN0KExpc3Q8TGlzdD4gbGlzdHMpIHsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4obGlzPGNhcmV0PnRzW01hdGgubWF4KE1hdGguYWJzKC0yKSwzKV0pOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9yZXBsYWNlV2l0aExpc3RBY2Nlc3MvYmVmb3JlSWRleElzQm94ZWRJbnRlZ2VyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3JlcGxhY2VXaXRoTGlzdEFjY2Vzcy9iZWZvcmVJZGV4SXNCb3hlZEludGVnZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YWEwOTEyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9yZXBsYWNlV2l0aExpc3RBY2Nlc3MvYmVmb3JlSWRleElzQm94ZWRJbnRlZ2VyLmphdmEKQEAgLTAsMCArMSwxMCBAQAorLy8gIlJlcGxhY2Ugd2l0aCBsaXN0IGFjY2VzcyIgInRydWUiCisKK2ltcG9ydCBqYXZhLmxhbmcuSW50ZWdlcjsKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworCitjbGFzcyBBIHsKKyAgdm9pZCB0ZXN0KEFycmF5TGlzdCBsaXN0KSB7CisgICAgU3lzdGVtLm91dC5wcmludGxuKGxpczxjYXJldD50W25ldyBJbnRlZ2VyKDApXSk7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3JlcGxhY2VXaXRoTGlzdEFjY2Vzcy9iZWZvcmVJbmRleE5vdEludGVnZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvcmVwbGFjZVdpdGhMaXN0QWNjZXNzL2JlZm9yZUluZGV4Tm90SW50ZWdlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNlMzU3MTMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3JlcGxhY2VXaXRoTGlzdEFjY2Vzcy9iZWZvcmVJbmRleE5vdEludGVnZXIuamF2YQpAQCAtMCwwICsxLDEwIEBACisvLyAiUmVwbGFjZSB3aXRoIGxpc3QgYWNjZXNzIiAiZmFsc2UiCisKK2ltcG9ydCBqYXZhLmxhbmcuT2JqZWN0OworaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CisKK2NsYXNzIEEgeworICB2b2lkIHRlc3QoQXJyYXlMaXN0IGxpc3QpIHsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4obGlzPGNhcmV0PnRbbmV3IE9iamVjdCgzKV0pOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9yZXBsYWNlV2l0aExpc3RBY2Nlc3MvYmVmb3JlTGlzdE9mTGlzdHMuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvcmVwbGFjZVdpdGhMaXN0QWNjZXNzL2JlZm9yZUxpc3RPZkxpc3RzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzY1N2RiNgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvcmVwbGFjZVdpdGhMaXN0QWNjZXNzL2JlZm9yZUxpc3RPZkxpc3RzLmphdmEKQEAgLTAsMCArMSw5IEBACisvLyAiUmVwbGFjZSB3aXRoIGxpc3QgYWNjZXNzIiAidHJ1ZSIKKworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitjbGFzcyBBIHsKKyAgdm9pZCB0ZXN0KExpc3Q8TGlzdD4gbGlzdHMpIHsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4obGk8Y2FyZXQ+c3RzWzBdLmdldCgwKSk7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3JlcGxhY2VXaXRoTGlzdEFjY2Vzcy9iZWZvcmVOb3RMSXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3JlcGxhY2VXaXRoTGlzdEFjY2Vzcy9iZWZvcmVOb3RMSXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWIzMDQxNwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvcmVwbGFjZVdpdGhMaXN0QWNjZXNzL2JlZm9yZU5vdExJc3QuamF2YQpAQCAtMCwwICsxLDYgQEAKKy8vICJSZXBsYWNlIHdpdGggbGlzdCBhY2Nlc3MiICJmYWxzZSIKK2NsYXNzIEEgeworICB2b2lkIHRlc3QoQ29sbGVjdGlvbiBsaXN0KSB7CisgICAgU3lzdGVtLm91dC5wcmludGxuKGxpczxjYXJldD50WzBdKTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvcmVwbGFjZVdpdGhMaXN0QWNjZXNzL2JlZm9yZVNldFN0YXRlbWVudC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9yZXBsYWNlV2l0aExpc3RBY2Nlc3MvYmVmb3JlU2V0U3RhdGVtZW50LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmQ1MDI2NgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvcmVwbGFjZVdpdGhMaXN0QWNjZXNzL2JlZm9yZVNldFN0YXRlbWVudC5qYXZhCkBAIC0wLDAgKzEsOSBAQAorLy8gIlJlcGxhY2Ugd2l0aCBsaXN0IGFjY2VzcyIgInRydWUiCisKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworCitjbGFzcyBBIHsKKyAgdm9pZCB0ZXN0KEFycmF5TGlzdDxJbnRlZ2VyPiBsaXN0KSB7CisgICAgbGlzPGNhcmV0PnRbMF0gPSA1OworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9yZXBsYWNlV2l0aExpc3RBY2Nlc3MvYmVmb3JlU2ltcGxlLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3JlcGxhY2VXaXRoTGlzdEFjY2Vzcy9iZWZvcmVTaW1wbGUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZTk2NDE3Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9yZXBsYWNlV2l0aExpc3RBY2Nlc3MvYmVmb3JlU2ltcGxlLmphdmEKQEAgLTAsMCArMSw5IEBACisvLyAiUmVwbGFjZSB3aXRoIGxpc3QgYWNjZXNzIiAidHJ1ZSIKKworaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CisKK2NsYXNzIEEgeworICB2b2lkIHRlc3QoQXJyYXlMaXN0IGxpc3QpIHsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4obGlzPGNhcmV0PnRbMF0pOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9yZXBsYWNlV2l0aFRlcm5hcnlPcGVyYXRvci9hZnRlck1ldGhvZENhbGwuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvcmVwbGFjZVdpdGhUZXJuYXJ5T3BlcmF0b3IvYWZ0ZXJNZXRob2RDYWxsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzZmYmU5NwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvcmVwbGFjZVdpdGhUZXJuYXJ5T3BlcmF0b3IvYWZ0ZXJNZXRob2RDYWxsLmphdmEKQEAgLTAsMCArMSwxMCBAQAorLy8gIlJlcGxhY2Ugd2l0aCAnbGlzdCAhPSBudWxsID86JyIgInRydWUiCisKK2ltcG9ydCBvcmcuamV0YnJhaW5zLmFubm90YXRpb25zLk5vdE51bGw7CisKK2NsYXNzIEF7CisgIHZvaWQgdGVzdChATm90TnVsbCBMaXN0IGwpIHsKKyAgICBmaW5hbCBMaXN0IGxpc3QgPSBudWxsOworICAgIHRlc3QobGlzdCAhPSBudWxsID8gbGlzdCA6IDxzZWxlY3Rpb24+bnVsbDwvc2VsZWN0aW9uPik7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3JlcGxhY2VXaXRoVGVybmFyeU9wZXJhdG9yL2FmdGVyUHJpbWl0aXZlLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3JlcGxhY2VXaXRoVGVybmFyeU9wZXJhdG9yL2FmdGVyUHJpbWl0aXZlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODU0N2U0NQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvcmVwbGFjZVdpdGhUZXJuYXJ5T3BlcmF0b3IvYWZ0ZXJQcmltaXRpdmUuamF2YQpAQCAtMCwwICsxLDEwIEBACisvLyAiUmVwbGFjZSB3aXRoICdpbnRlZ2VyICE9IG51bGwgPzonIiAidHJ1ZSIKKworaW1wb3J0IGphdmEubGFuZy5JbnRlZ2VyOworCitjbGFzcyBBeworICB2b2lkIHRlc3QoKXsKKyAgICBJbnRlZ2VyIGludGVnZXIgPSBudWxsOworICAgIGludCBpID0gaW50ZWdlciAhPSBudWxsID8gaW50ZWdlci5pbnRWYWx1ZSgpIDogPHNlbGVjdGlvbj4wPC9zZWxlY3Rpb24+OworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9yZXBsYWNlV2l0aFRlcm5hcnlPcGVyYXRvci9hZnRlclNpbXBsZS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9yZXBsYWNlV2l0aFRlcm5hcnlPcGVyYXRvci9hZnRlclNpbXBsZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFmZjNmOTQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3JlcGxhY2VXaXRoVGVybmFyeU9wZXJhdG9yL2FmdGVyU2ltcGxlLmphdmEKQEAgLTAsMCArMSw4IEBACisvLyAiUmVwbGFjZSB3aXRoICdsaXN0ICE9IG51bGwgPzonIiAidHJ1ZSIKKworY2xhc3MgQXsKKyAgdm9pZCB0ZXN0KCl7CisgICAgTGlzdCBsaXN0ID0gbnVsbDsKKyAgICBPYmplY3QgbyA9IGxpc3QgIT0gbnVsbCA/IGxpc3QuZ2V0KDApIDogPHNlbGVjdGlvbj5udWxsPC9zZWxlY3Rpb24+OworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9yZXBsYWNlV2l0aFRlcm5hcnlPcGVyYXRvci9iZWZvcmVFeHByZXNzaW9uU3RhdGVtZW50LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3JlcGxhY2VXaXRoVGVybmFyeU9wZXJhdG9yL2JlZm9yZUV4cHJlc3Npb25TdGF0ZW1lbnQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMDcyYzg0Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9yZXBsYWNlV2l0aFRlcm5hcnlPcGVyYXRvci9iZWZvcmVFeHByZXNzaW9uU3RhdGVtZW50LmphdmEKQEAgLTAsMCArMSw3IEBACisvLyAiUmVwbGFjZSB3aXRoICdsaXN0ICE9IG51bGwgPzonIiAiZmFsc2UiCitjbGFzcyBBeworICB2b2lkIHRlc3QoKXsKKyAgICBMaXN0IGxpc3QgPSBudWxsOworICAgIGxpPGNhcmV0PnN0LmdldCgwKTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvcmVwbGFjZVdpdGhUZXJuYXJ5T3BlcmF0b3IvYmVmb3JlTWV0aG9kQ2FsbC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9yZXBsYWNlV2l0aFRlcm5hcnlPcGVyYXRvci9iZWZvcmVNZXRob2RDYWxsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWI1ZWMzOQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvcmVwbGFjZVdpdGhUZXJuYXJ5T3BlcmF0b3IvYmVmb3JlTWV0aG9kQ2FsbC5qYXZhCkBAIC0wLDAgKzEsMTAgQEAKKy8vICJSZXBsYWNlIHdpdGggJ2xpc3QgIT0gbnVsbCA/OiciICJ0cnVlIgorCitpbXBvcnQgb3JnLmpldGJyYWlucy5hbm5vdGF0aW9ucy5Ob3ROdWxsOworCitjbGFzcyBBeworICB2b2lkIHRlc3QoQE5vdE51bGwgTGlzdCBsKSB7CisgICAgZmluYWwgTGlzdCBsaXN0ID0gbnVsbDsKKyAgICB0ZXN0KGxpPGNhcmV0PnN0KTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvcmVwbGFjZVdpdGhUZXJuYXJ5T3BlcmF0b3IvYmVmb3JlUHJpbWl0aXZlLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3JlcGxhY2VXaXRoVGVybmFyeU9wZXJhdG9yL2JlZm9yZVByaW1pdGl2ZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNhZjViZTAKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3JlcGxhY2VXaXRoVGVybmFyeU9wZXJhdG9yL2JlZm9yZVByaW1pdGl2ZS5qYXZhCkBAIC0wLDAgKzEsMTAgQEAKKy8vICJSZXBsYWNlIHdpdGggJ2ludGVnZXIgIT0gbnVsbCA/OiciICJ0cnVlIgorCitpbXBvcnQgamF2YS5sYW5nLkludGVnZXI7CisKK2NsYXNzIEF7CisgIHZvaWQgdGVzdCgpeworICAgIEludGVnZXIgaW50ZWdlciA9IG51bGw7CisgICAgaW50IGkgPSBpbjxjYXJldD50ZWdlci5pbnRWYWx1ZSgpOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9yZXBsYWNlV2l0aFRlcm5hcnlPcGVyYXRvci9iZWZvcmVTaW1wbGUuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvcmVwbGFjZVdpdGhUZXJuYXJ5T3BlcmF0b3IvYmVmb3JlU2ltcGxlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODc2NTI0OQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvcmVwbGFjZVdpdGhUZXJuYXJ5T3BlcmF0b3IvYmVmb3JlU2ltcGxlLmphdmEKQEAgLTAsMCArMSw4IEBACisvLyAiUmVwbGFjZSB3aXRoICdsaXN0ICE9IG51bGwgPzonIiAidHJ1ZSIKKworY2xhc3MgQXsKKyAgdm9pZCB0ZXN0KCl7CisgICAgTGlzdCBsaXN0ID0gbnVsbDsKKyAgICBPYmplY3QgbyA9IGxpPGNhcmV0PnN0LmdldCgwKTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvcmV1c2VWYXJpYWJsZURlY2xhcmF0aW9uL2FmdGVyMS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9yZXVzZVZhcmlhYmxlRGVjbGFyYXRpb24vYWZ0ZXIxLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzNjNzk1ZQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvcmV1c2VWYXJpYWJsZURlY2xhcmF0aW9uL2FmdGVyMS5qYXZhCkBAIC0wLDAgKzEsOSBAQAorLy8gIlJldXNlIHByZXZpb3VzIHZhcmlhYmxlICdpJyBkZWNsYXJhdGlvbiIgInRydWUiCitpbXBvcnQgamF2YS5pby4qOworCitjbGFzcyBhIHsKKyAgICB2b2lkIGYoaW50IGkpIHsKKyAgICAgICAgaSA9IDIzNCAvIDUgKyA3OworICAgIH0KK30KKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9yZXVzZVZhcmlhYmxlRGVjbGFyYXRpb24vYWZ0ZXIyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3JldXNlVmFyaWFibGVEZWNsYXJhdGlvbi9hZnRlcjIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYWRiODM0Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9yZXVzZVZhcmlhYmxlRGVjbGFyYXRpb24vYWZ0ZXIyLmphdmEKQEAgLTAsMCArMSwxMSBAQAorLy8gIlJldXNlIHByZXZpb3VzIHZhcmlhYmxlICdrJyBkZWNsYXJhdGlvbiIgInRydWUiCitpbXBvcnQgamF2YS5pby4qOworCitjbGFzcyBhIHsKKyAgICB2b2lkIGYoaW50IGkpIHsKKyAgICAgICAgaW50IGsgPSAyMzQvNSs3OworICAgICAgICBpbnQgaCA9IDc7CisgICAgICAgIGsgPSAyMzQgLyA1ICsgNzsKKyAgICB9Cit9CisKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvcmV1c2VWYXJpYWJsZURlY2xhcmF0aW9uL2FmdGVyMy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9yZXVzZVZhcmlhYmxlRGVjbGFyYXRpb24vYWZ0ZXIzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWM1N2UzNwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvcmV1c2VWYXJpYWJsZURlY2xhcmF0aW9uL2FmdGVyMy5qYXZhCkBAIC0wLDAgKzEsOSBAQAorLy8gIlJldXNlIHByZXZpb3VzIHZhcmlhYmxlICdpJyBkZWNsYXJhdGlvbiIgInRydWUiCitpbXBvcnQgamF2YS5pby4qOworCitjbGFzcyBhIHsKKyAgICB2b2lkIGYoaW50IGkpIHsKKyAgICAgICAgaW50IGggPSA3OworICAgIH0KK30KKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9yZXVzZVZhcmlhYmxlRGVjbGFyYXRpb24vYmVmb3JlMS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9yZXVzZVZhcmlhYmxlRGVjbGFyYXRpb24vYmVmb3JlMS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM1MjJmZDcKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3JldXNlVmFyaWFibGVEZWNsYXJhdGlvbi9iZWZvcmUxLmphdmEKQEAgLTAsMCArMSw5IEBACisvLyAiUmV1c2UgcHJldmlvdXMgdmFyaWFibGUgJ2knIGRlY2xhcmF0aW9uIiAidHJ1ZSIKK2ltcG9ydCBqYXZhLmlvLio7CisKK2NsYXNzIGEgeworICAgIHZvaWQgZihpbnQgaSkgeworICAgICAgICBpbnQgPGNhcmV0PmkgPSAyMzQvNSs3OworICAgIH0KK30KKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9yZXVzZVZhcmlhYmxlRGVjbGFyYXRpb24vYmVmb3JlMi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9yZXVzZVZhcmlhYmxlRGVjbGFyYXRpb24vYmVmb3JlMi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM3MGE2MWEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3JldXNlVmFyaWFibGVEZWNsYXJhdGlvbi9iZWZvcmUyLmphdmEKQEAgLTAsMCArMSwxMSBAQAorLy8gIlJldXNlIHByZXZpb3VzIHZhcmlhYmxlICdrJyBkZWNsYXJhdGlvbiIgInRydWUiCitpbXBvcnQgamF2YS5pby4qOworCitjbGFzcyBhIHsKKyAgICB2b2lkIGYoaW50IGkpIHsKKyAgICAgICAgZmluYWwgaW50IGsgPSAyMzQvNSs3OworICAgICAgICBpbnQgaCA9IDc7CisgICAgICAgIGludCA8Y2FyZXQ+ayA9IDIzNC81Kzc7CisgICAgfQorfQorCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3JldXNlVmFyaWFibGVEZWNsYXJhdGlvbi9iZWZvcmUzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3JldXNlVmFyaWFibGVEZWNsYXJhdGlvbi9iZWZvcmUzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTM3N2I2MwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvcmV1c2VWYXJpYWJsZURlY2xhcmF0aW9uL2JlZm9yZTMuamF2YQpAQCAtMCwwICsxLDEwIEBACisvLyAiUmV1c2UgcHJldmlvdXMgdmFyaWFibGUgJ2knIGRlY2xhcmF0aW9uIiAidHJ1ZSIKK2ltcG9ydCBqYXZhLmlvLio7CisKK2NsYXNzIGEgeworICAgIHZvaWQgZihpbnQgaSkgeworICAgICAgICBmaW5hbCBpbnQgPGNhcmV0Pmk7CisgICAgICAgIGludCBoID0gNzsKKyAgICB9Cit9CisKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvcmV1c2VWYXJpYWJsZURlY2xhcmF0aW9uL2JlZm9yZTQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvcmV1c2VWYXJpYWJsZURlY2xhcmF0aW9uL2JlZm9yZTQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZjEwNzM4Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9yZXVzZVZhcmlhYmxlRGVjbGFyYXRpb24vYmVmb3JlNC5qYXZhCkBAIC0wLDAgKzEsMTAgQEAKKy8vICJSZXVzZSBwcmV2aW91cyB2YXJpYWJsZSAnaScgZGVjbGFyYXRpb24iICJmYWxzZSIKK2ltcG9ydCBqYXZhLmlvLio7CisKK2NsYXNzIGEgeworICAgIHZvaWQgZihpbnQgaSkgeworICAgICAgICBmaW5hbCBzaG9ydCA8Y2FyZXQ+aTsKKyAgICAgICAgaW50IGggPSA3OworICAgIH0KK30KKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9yZXVzZVZhcmlhYmxlRGVjbGFyYXRpb24vYmVmb3JlNS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9yZXVzZVZhcmlhYmxlRGVjbGFyYXRpb24vYmVmb3JlNS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg3MmI2ZjAKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3JldXNlVmFyaWFibGVEZWNsYXJhdGlvbi9iZWZvcmU1LmphdmEKQEAgLTAsMCArMSwxMSBAQAorLy8gIlJldXNlIHByZXZpb3VzIHZhcmlhYmxlICdpJyBkZWNsYXJhdGlvbiIgImZhbHNlIgoraW1wb3J0IGphdmEuaW8uKjsKKworY2xhc3MgYSB7CisgICAgaW50IGk7CisgICAgdm9pZCBmKCkgeworICAgICAgICBmaW5hbCBpbnQgPGNhcmV0Pmk7CisgICAgICAgIGludCBoID0gNzsKKyAgICB9Cit9CisKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvcmV1c2VWYXJpYWJsZURlY2xhcmF0aW9uL2JlZm9yZTYuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvcmV1c2VWYXJpYWJsZURlY2xhcmF0aW9uL2JlZm9yZTYuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNmY1OTI1Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9yZXVzZVZhcmlhYmxlRGVjbGFyYXRpb24vYmVmb3JlNi5qYXZhCkBAIC0wLDAgKzEsMTEgQEAKKy8vICJSZXVzZSBwcmV2aW91cyB2YXJpYWJsZSAnaScgZGVjbGFyYXRpb24iICJmYWxzZSIKK2ltcG9ydCBqYXZhLmlvLio7CisKK2NsYXNzIGEgeworICAgIGludCBpOworICAgIGZpbmFsIGludCA8Y2FyZXQ+aTsKKyAgICB2b2lkIGYoKSB7CisgICAgICAgIGludCBoID0gNzsKKyAgICB9Cit9CisKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvc2FmZVZhcmFyZ3MvYWZ0ZXIxLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3NhZmVWYXJhcmdzL2FmdGVyMS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAxNTFjZWQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3NhZmVWYXJhcmdzL2FmdGVyMS5qYXZhCkBAIC0wLDAgKzEsOCBAQAorLy8gIkFubm90YXRlIGFzIEBTYWZlVmFyYXJncyIgInRydWUiCitwdWJsaWMgY2xhc3MgVGVzdCB7CisgIEBTYWZlVmFyYXJncworICBwdWJsaWMgc3RhdGljIDxUPiB2b2lkIG1haW4oVC4uLiBhcmdzKSB7CisKKyAgfQorfQorCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3NhZmVWYXJhcmdzL2FmdGVyNy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9zYWZlVmFyYXJncy9hZnRlcjcuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZGY4YmYzCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9zYWZlVmFyYXJncy9hZnRlcjcuamF2YQpAQCAtMCwwICsxLDkgQEAKKy8vICJBbm5vdGF0ZSBhcyBAU2FmZVZhcmFyZ3MiICJ0cnVlIgoraW1wb3J0IGphdmEudXRpbC5MaXN0OworcHVibGljIGNsYXNzIFRlc3QgeworICBwdWJsaWMgPFQ+IEBTYWZlVmFyYXJncworICAgICAgICAgICAgIHN0YXRpYyB2b2lkIG1haW4oTGlzdDxUPi4uLiBhcmdzKSB7CisKKyAgfQorfQorCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3NhZmVWYXJhcmdzL2FmdGVyOC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9zYWZlVmFyYXJncy9hZnRlcjguamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZmE1YjE1Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9zYWZlVmFyYXJncy9hZnRlcjguamF2YQpAQCAtMCwwICsxLDggQEAKKy8vICJBbm5vdGF0ZSBhcyBAU2FmZVZhcmFyZ3MiICJ0cnVlIgorcHVibGljIGNsYXNzIFRlc3QgeworICBAU2FmZVZhcmFyZ3MKKyAgcHVibGljIGZpbmFsIDxUPiB2b2lkIG1haW4oVC4uLiBhcmdzKSB7CisKKyAgfQorfQorCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3NhZmVWYXJhcmdzL2FmdGVyOS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9zYWZlVmFyYXJncy9hZnRlcjkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMGJiM2U3MQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvc2FmZVZhcmFyZ3MvYWZ0ZXI5LmphdmEKQEAgLTAsMCArMSw4IEBACisvLyAiTWFrZSBmaW5hbCBhbmQgYW5ub3RhdGUgYXMgQFNhZmVWYXJhcmdzIiAidHJ1ZSIKK3B1YmxpYyBjbGFzcyBUZXN0IHsKKyAgQFNhZmVWYXJhcmdzCisgIHB1YmxpYyBmaW5hbCA8VD4gdm9pZCBtPGNhcmV0PmFpbihULi4uIGFyZ3MpIHsKKworICB9Cit9CisKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvc2FmZVZhcmFyZ3MvYmVmb3JlMS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9zYWZlVmFyYXJncy9iZWZvcmUxLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTM5NDlhMAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvc2FmZVZhcmFyZ3MvYmVmb3JlMS5qYXZhCkBAIC0wLDAgKzEsNyBAQAorLy8gIkFubm90YXRlIGFzIEBTYWZlVmFyYXJncyIgInRydWUiCitwdWJsaWMgY2xhc3MgVGVzdCB7CisgIHB1YmxpYyBzdGF0aWMgPFQ+IHZvaWQgbWFpPGNhcmV0Pm4oVC4uLiBhcmdzKSB7CisKKyAgfQorfQorCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3NhZmVWYXJhcmdzL2JlZm9yZTEwLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3NhZmVWYXJhcmdzL2JlZm9yZTEwLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzUwNTY5ZAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvc2FmZVZhcmFyZ3MvYmVmb3JlMTAuamF2YQpAQCAtMCwwICsxLDUgQEAKKy8vICJNYWtlIGZpbmFsIGFuZCBhbm5vdGF0ZSBhcyBAU2FmZVZhcmFyZ3MiICJmYWxzZSIKK3B1YmxpYyBpbnRlcmZhY2UgVGVzdCB7CisgIDxUPiB2b2lkIG08Y2FyZXQ+YWluKFQuLi4gYXJncyk7Cit9CisKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvc2FmZVZhcmFyZ3MvYmVmb3JlMTEuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvc2FmZVZhcmFyZ3MvYmVmb3JlMTEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZDE3ZTY5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9zYWZlVmFyYXJncy9iZWZvcmUxMS5qYXZhCkBAIC0wLDAgKzEsNSBAQAorLy8gIk1ha2UgZmluYWwgYW5kIGFubm90YXRlIGFzIEBTYWZlVmFyYXJncyIgImZhbHNlIgorcHVibGljIGFic3RyYWN0IGNsYXNzIFRlc3QgeworICBhYnN0cmFjdCA8VD4gdm9pZCBtPGNhcmV0PmFpbihULi4uIGFyZ3MpOworfQorCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3NhZmVWYXJhcmdzL2JlZm9yZTIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvc2FmZVZhcmFyZ3MvYmVmb3JlMi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI0MzViOTQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3NhZmVWYXJhcmdzL2JlZm9yZTIuamF2YQpAQCAtMCwwICsxLDggQEAKKy8vICJBbm5vdGF0ZSBhcyBAU2FmZVZhcmFyZ3MiICJmYWxzZSIKK3B1YmxpYyBjbGFzcyBUZXN0IHsKKyAgQFNhZmVWYXJhcmdzCisgIHB1YmxpYyBzdGF0aWMgPFQ+IHZvaWQgbTxjYXJldD5haW4oVC4uLiBhcmdzKSB7CisKKyAgfQorfQorCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3NhZmVWYXJhcmdzL2JlZm9yZTMuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvc2FmZVZhcmFyZ3MvYmVmb3JlMy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRhYzFmNTUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3NhZmVWYXJhcmdzL2JlZm9yZTMuamF2YQpAQCAtMCwwICsxLDcgQEAKKy8vICJBbm5vdGF0ZSBhcyBAU2FmZVZhcmFyZ3MiICJmYWxzZSIKK3B1YmxpYyBjbGFzcyBUZXN0IHsKKyAgcHVibGljIHN0YXRpYyB2b2lkIG08Y2FyZXQ+YWluKFN0cmluZy4uLiBhcmdzKSB7CisKKyAgfQorfQorCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3NhZmVWYXJhcmdzL2JlZm9yZTUuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvc2FmZVZhcmFyZ3MvYmVmb3JlNS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE4ZjA5NTgKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3NhZmVWYXJhcmdzL2JlZm9yZTUuamF2YQpAQCAtMCwwICsxLDcgQEAKKy8vICJBbm5vdGF0ZSBhcyBAU2FmZVZhcmFyZ3MiICJmYWxzZSIKK3B1YmxpYyBjbGFzcyBUZXN0IHsKKyAgcHVibGljIDxUPiB2b2lkIG08Y2FyZXQ+YWluKFQgYXJncykgeworCisgIH0KK30KKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9zYWZlVmFyYXJncy9iZWZvcmU2LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3NhZmVWYXJhcmdzL2JlZm9yZTYuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZGFiNTEwCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9zYWZlVmFyYXJncy9iZWZvcmU2LmphdmEKQEAgLTAsMCArMSw4IEBACisvLyAiQW5ub3RhdGUgYXMgQFNhZmVWYXJhcmdzIiAiZmFsc2UiCitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CitwdWJsaWMgY2xhc3MgVGVzdCB7CisgIHB1YmxpYyBzdGF0aWMgdm9pZCBtPGNhcmV0PmFpbihMaXN0PD8+Li4uIGFyZ3MpIHsKKworICB9Cit9CisKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvc2FmZVZhcmFyZ3MvYmVmb3JlNy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9zYWZlVmFyYXJncy9iZWZvcmU3LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGE1MTQ4MQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvc2FmZVZhcmFyZ3MvYmVmb3JlNy5qYXZhCkBAIC0wLDAgKzEsOCBAQAorLy8gIkFubm90YXRlIGFzIEBTYWZlVmFyYXJncyIgInRydWUiCitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CitwdWJsaWMgY2xhc3MgVGVzdCB7CisgIHB1YmxpYyA8VD4gc3RhdGljIHZvaWQgbTxjYXJldD5haW4oTGlzdDxUPi4uLiBhcmdzKSB7CisKKyAgfQorfQorCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3NhZmVWYXJhcmdzL2JlZm9yZTguamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvc2FmZVZhcmFyZ3MvYmVmb3JlOC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJjZGE2NGYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3NhZmVWYXJhcmdzL2JlZm9yZTguamF2YQpAQCAtMCwwICsxLDcgQEAKKy8vICJBbm5vdGF0ZSBhcyBAU2FmZVZhcmFyZ3MiICJ0cnVlIgorcHVibGljIGNsYXNzIFRlc3QgeworICBwdWJsaWMgZmluYWwgPFQ+IHZvaWQgbTxjYXJldD5haW4oVC4uLiBhcmdzKSB7CisKKyAgfQorfQorCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3NhZmVWYXJhcmdzL2JlZm9yZTkuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvc2FmZVZhcmFyZ3MvYmVmb3JlOS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ3OGEzY2QxCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9zYWZlVmFyYXJncy9iZWZvcmU5LmphdmEKQEAgLTAsMCArMSw3IEBACisvLyAiTWFrZSBmaW5hbCBhbmQgYW5ub3RhdGUgYXMgQFNhZmVWYXJhcmdzIiAidHJ1ZSIKK3B1YmxpYyBjbGFzcyBUZXN0IHsKKyAgcHVibGljIDxUPiB2b2lkIG08Y2FyZXQ+YWluKFQuLi4gYXJncykgeworCisgIH0KK30KKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9zaW1wbGlmeUJvb2xlYW5FeHByZXNzaW9uL2FmdGVyMS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9zaW1wbGlmeUJvb2xlYW5FeHByZXNzaW9uL2FmdGVyMS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFjYWVmYWYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3NpbXBsaWZ5Qm9vbGVhbkV4cHJlc3Npb24vYWZ0ZXIxLmphdmEKQEAgLTAsMCArMSw2IEBACisvLyAiU2ltcGxpZnkgYm9vbGVhbiBleHByZXNzaW9uIiAidHJ1ZSIKK2NsYXNzIFggeworICAgIHZvaWQgZigpIHsKKyAgICAgICAgPGNhcmV0PnJldHVybjsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9zaW1wbGlmeUJvb2xlYW5FeHByZXNzaW9uL2FmdGVyMi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9zaW1wbGlmeUJvb2xlYW5FeHByZXNzaW9uL2FmdGVyMi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFjYWVmYWYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3NpbXBsaWZ5Qm9vbGVhbkV4cHJlc3Npb24vYWZ0ZXIyLmphdmEKQEAgLTAsMCArMSw2IEBACisvLyAiU2ltcGxpZnkgYm9vbGVhbiBleHByZXNzaW9uIiAidHJ1ZSIKK2NsYXNzIFggeworICAgIHZvaWQgZigpIHsKKyAgICAgICAgPGNhcmV0PnJldHVybjsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9zaW1wbGlmeUJvb2xlYW5FeHByZXNzaW9uL2FmdGVyMy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9zaW1wbGlmeUJvb2xlYW5FeHByZXNzaW9uL2FmdGVyMy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ0ZDk1NmYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3NpbXBsaWZ5Qm9vbGVhbkV4cHJlc3Npb24vYWZ0ZXIzLmphdmEKQEAgLTAsMCArMSw2IEBACisvLyAiU2ltcGxpZnkgYm9vbGVhbiBleHByZXNzaW9uIiAidHJ1ZSIKK2NsYXNzIFggeworICB2b2lkIGYoKSB7CisgICAgaW50IGkgPSAwPGNhcmV0PjsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvc2ltcGxpZnlCb29sZWFuRXhwcmVzc2lvbi9hZnRlcjQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvc2ltcGxpZnlCb29sZWFuRXhwcmVzc2lvbi9hZnRlcjQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZmI3MDUzZAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvc2ltcGxpZnlCb29sZWFuRXhwcmVzc2lvbi9hZnRlcjQuamF2YQpAQCAtMCwwICsxLDYgQEAKKy8vICJTaW1wbGlmeSBib29sZWFuIGV4cHJlc3Npb24iICJ0cnVlIgorY2xhc3MgWCB7CisgIHZvaWQgZigpIHsKKyAgICAgICAgaW50IGkgPSAyOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9zaW1wbGlmeUJvb2xlYW5FeHByZXNzaW9uL2FmdGVyNS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9zaW1wbGlmeUJvb2xlYW5FeHByZXNzaW9uL2FmdGVyNS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdmOThlNjgKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3NpbXBsaWZ5Qm9vbGVhbkV4cHJlc3Npb24vYWZ0ZXI1LmphdmEKQEAgLTAsMCArMSw5IEBACisvLyAiU2ltcGxpZnkgYm9vbGVhbiBleHByZXNzaW9uIiAidHJ1ZSIKK2NsYXNzIFggeworICAgIHZvaWQgZigpIHsKKyAgICAgICAgaW50IGkgPSAyOworICAgICAgICAvLyBiZWdpbgorICAgICAgICBpbnQgbyA9IDA7IC8vbWlkCisgICAgICAgIC8vIGVuZAorICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3NpbXBsaWZ5Qm9vbGVhbkV4cHJlc3Npb24vYWZ0ZXI2LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3NpbXBsaWZ5Qm9vbGVhbkV4cHJlc3Npb24vYWZ0ZXI2LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2Y0OTdhOQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvc2ltcGxpZnlCb29sZWFuRXhwcmVzc2lvbi9hZnRlcjYuamF2YQpAQCAtMCwwICsxLDYgQEAKKy8vICJTaW1wbGlmeSBib29sZWFuIGV4cHJlc3Npb24iICJ0cnVlIgorY2xhc3MgWCB7CisgICAgdm9pZCBmKCkgeworICAgICAgICAvL3NkZgorICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3NpbXBsaWZ5Qm9vbGVhbkV4cHJlc3Npb24vYWZ0ZXI3LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3NpbXBsaWZ5Qm9vbGVhbkV4cHJlc3Npb24vYWZ0ZXI3LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmM4NzU3ZgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvc2ltcGxpZnlCb29sZWFuRXhwcmVzc2lvbi9hZnRlcjcuamF2YQpAQCAtMCwwICsxLDggQEAKKy8vICJTaW1wbGlmeSBib29sZWFuIGV4cHJlc3Npb24iICJ0cnVlIgorY2xhc3MgWCB7CisgICAgdm9pZCBmKE9iamVjdCBwVmFsLCBPYmplY3QgbikgeworICAgICAgICBpZiAoIXBWYWwuZXF1YWxzKG4pKQorICAgICAgICAgICAgICAgIHBWYWwgPSBudWxsOworICAgICAgICAgICAgZWxzZSA8Y2FyZXQ+cFZhbCA9IG47CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvc2ltcGxpZnlCb29sZWFuRXhwcmVzc2lvbi9hZnRlckVxLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3NpbXBsaWZ5Qm9vbGVhbkV4cHJlc3Npb24vYWZ0ZXJFcS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYxMjQ0MzgKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3NpbXBsaWZ5Qm9vbGVhbkV4cHJlc3Npb24vYWZ0ZXJFcS5qYXZhCkBAIC0wLDAgKzEsNiBAQAorLy8gIlNpbXBsaWZ5IGJvb2xlYW4gZXhwcmVzc2lvbiIgInRydWUiCitjbGFzcyBYIHsKKyAgICB2b2lkIGYoYm9vbGVhbiBiKSB7CisgICAgICAgIGlmICghYikgcmV0dXJuOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3NpbXBsaWZ5Qm9vbGVhbkV4cHJlc3Npb24vYWZ0ZXJNaWRkbGVQb2x5YWRpYy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9zaW1wbGlmeUJvb2xlYW5FeHByZXNzaW9uL2FmdGVyTWlkZGxlUG9seWFkaWMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MDUyMWY4Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9zaW1wbGlmeUJvb2xlYW5FeHByZXNzaW9uL2FmdGVyTWlkZGxlUG9seWFkaWMuamF2YQpAQCAtMCwwICsxLDYgQEAKKy8vICJTaW1wbGlmeSBib29sZWFuIGV4cHJlc3Npb24iICJ0cnVlIgorY2xhc3MgWCB7CisgICAgdm9pZCBmKGJvb2xlYW4gYiwgYm9vbGVhbiBjKSB7CisgICAgICAgIGlmIChiICYmIGMpIHJldHVybjsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3NpbXBsaWZ5Qm9vbGVhbkV4cHJlc3Npb24vYWZ0ZXJYb3IxLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3NpbXBsaWZ5Qm9vbGVhbkV4cHJlc3Npb24vYWZ0ZXJYb3IxLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmFmMDEzNAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvc2ltcGxpZnlCb29sZWFuRXhwcmVzc2lvbi9hZnRlclhvcjEuamF2YQpAQCAtMCwwICsxLDkgQEAKKy8vICJTaW1wbGlmeSBib29sZWFuIGV4cHJlc3Npb24iICJ0cnVlIgorY2xhc3MgQSB7CisgICAgYm9vbGVhbiBhID0gdHJ1ZTsKKyAgICBib29sZWFuIGIgPSB0cnVlOworICAgIGJvb2xlYW4geCA9IGE7IC8vIGludGVudGlvbiAic2ltcGxpZnkgYm9vbGVhbiBleHByZXNzaW9uIiBkb2VzIG5vdGhpbmcgaGVyZSwgZXhwZWN0ZWQ6IGJvb2xlYW4geCA9IGE7CisgICAgYm9vbGVhbiB4MSA9IGEgXiB0cnVlOyAvLyBleHBlY3RlZDogYm9vbGVhbiB4MSA9ICFhOyBmYWlscywgZG9lcyBub3RoaW5nCisgICAgYm9vbGVhbiB5ID0gYSBeIHRydWUgXiBiOyAgLy8gaW50ZW50aW9uIHJlcGxhY2VzIHdpdGggYSBeIGIsIGV4cGVjdGVkICEoYSBeIGIpIGZhaWxzCisgICAgYm9vbGVhbiB5MSA9IGEgXiBmYWxzZSBeIGI7IC8vIGV4cGVjdGVkIGJvb2xlYW4geTEgPSBhIF4gYiB3b3JrcyBjb3JyZWN0bHk7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9zaW1wbGlmeUJvb2xlYW5FeHByZXNzaW9uL2FmdGVyWG9yMi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9zaW1wbGlmeUJvb2xlYW5FeHByZXNzaW9uL2FmdGVyWG9yMi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc0YmFmYTUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3NpbXBsaWZ5Qm9vbGVhbkV4cHJlc3Npb24vYWZ0ZXJYb3IyLmphdmEKQEAgLTAsMCArMSw5IEBACisvLyAiU2ltcGxpZnkgYm9vbGVhbiBleHByZXNzaW9uIiAidHJ1ZSIKK2NsYXNzIEEgeworICAgIGJvb2xlYW4gYSA9IHRydWU7CisgICAgYm9vbGVhbiBiID0gdHJ1ZTsKKyAgICBib29sZWFuIHggPSBhIF4gZmFsc2U7IC8vIGludGVudGlvbiAic2ltcGxpZnkgYm9vbGVhbiBleHByZXNzaW9uIiBkb2VzIG5vdGhpbmcgaGVyZSwgZXhwZWN0ZWQ6IGJvb2xlYW4geCA9IGE7CisgICAgYm9vbGVhbiB4MSA9ICFhOyAvLyBleHBlY3RlZDogYm9vbGVhbiB4MSA9ICFhOyBmYWlscywgZG9lcyBub3RoaW5nCisgICAgYm9vbGVhbiB5ID0gYSBeIHRydWUgXiBiOyAgLy8gaW50ZW50aW9uIHJlcGxhY2VzIHdpdGggYSBeIGIsIGV4cGVjdGVkICEoYSBeIGIpIGZhaWxzCisgICAgYm9vbGVhbiB5MSA9IGEgXiBmYWxzZSBeIGI7IC8vIGV4cGVjdGVkIGJvb2xlYW4geTEgPSBhIF4gYiB3b3JrcyBjb3JyZWN0bHk7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9zaW1wbGlmeUJvb2xlYW5FeHByZXNzaW9uL2FmdGVyWG9yMy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9zaW1wbGlmeUJvb2xlYW5FeHByZXNzaW9uL2FmdGVyWG9yMy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdhMjUyY2IKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3NpbXBsaWZ5Qm9vbGVhbkV4cHJlc3Npb24vYWZ0ZXJYb3IzLmphdmEKQEAgLTAsMCArMSw5IEBACisvLyAiU2ltcGxpZnkgYm9vbGVhbiBleHByZXNzaW9uIiAidHJ1ZSIKK2NsYXNzIEEgeworICAgIGJvb2xlYW4gYSA9IHRydWU7CisgICAgYm9vbGVhbiBiID0gdHJ1ZTsKKyAgICBib29sZWFuIHggPSBhIF4gZmFsc2U7IC8vIGludGVudGlvbiAic2ltcGxpZnkgYm9vbGVhbiBleHByZXNzaW9uIiBkb2VzIG5vdGhpbmcgaGVyZSwgZXhwZWN0ZWQ6IGJvb2xlYW4geCA9IGE7CisgICAgYm9vbGVhbiB4MSA9IGEgXiB0cnVlOyAvLyBleHBlY3RlZDogYm9vbGVhbiB4MSA9ICFhOyBmYWlscywgZG9lcyBub3RoaW5nCisgICAgYm9vbGVhbiB5ID0gIShhIF4gYik7ICAvLyBpbnRlbnRpb24gcmVwbGFjZXMgd2l0aCBhIF4gYiwgZXhwZWN0ZWQgIShhIF4gYikgZmFpbHMKKyAgICBib29sZWFuIHkxID0gYSBeIGZhbHNlIF4gYjsgLy8gZXhwZWN0ZWQgYm9vbGVhbiB5MSA9IGEgXiBiIHdvcmtzIGNvcnJlY3RseTsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3NpbXBsaWZ5Qm9vbGVhbkV4cHJlc3Npb24vYWZ0ZXJYb3I0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3NpbXBsaWZ5Qm9vbGVhbkV4cHJlc3Npb24vYWZ0ZXJYb3I0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmFiMTE0MQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvc2ltcGxpZnlCb29sZWFuRXhwcmVzc2lvbi9hZnRlclhvcjQuamF2YQpAQCAtMCwwICsxLDkgQEAKKy8vICJTaW1wbGlmeSBib29sZWFuIGV4cHJlc3Npb24iICJ0cnVlIgorY2xhc3MgQSB7CisgICAgYm9vbGVhbiBhID0gdHJ1ZTsKKyAgICBib29sZWFuIGIgPSB0cnVlOworICAgIGJvb2xlYW4geCA9IGEgXiBmYWxzZTsgLy8gaW50ZW50aW9uICJzaW1wbGlmeSBib29sZWFuIGV4cHJlc3Npb24iIGRvZXMgbm90aGluZyBoZXJlLCBleHBlY3RlZDogYm9vbGVhbiB4ID0gYTsKKyAgICBib29sZWFuIHgxID0gYSBeIHRydWU7IC8vIGV4cGVjdGVkOiBib29sZWFuIHgxID0gIWE7IGZhaWxzLCBkb2VzIG5vdGhpbmcKKyAgICBib29sZWFuIHkgPSBhIF4gdHJ1ZSBeIGI7ICAvLyBpbnRlbnRpb24gcmVwbGFjZXMgd2l0aCBhIF4gYiwgZXhwZWN0ZWQgIShhIF4gYikgZmFpbHMKKyAgICBib29sZWFuIHkxID0gYSBeIGI7IC8vIGV4cGVjdGVkIGJvb2xlYW4geTEgPSBhIF4gYiB3b3JrcyBjb3JyZWN0bHk7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9zaW1wbGlmeUJvb2xlYW5FeHByZXNzaW9uL2JlZm9yZTEuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvc2ltcGxpZnlCb29sZWFuRXhwcmVzc2lvbi9iZWZvcmUxLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDQxN2E5MAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvc2ltcGxpZnlCb29sZWFuRXhwcmVzc2lvbi9iZWZvcmUxLmphdmEKQEAgLTAsMCArMSw2IEBACisvLyAiU2ltcGxpZnkgYm9vbGVhbiBleHByZXNzaW9uIiAidHJ1ZSIKK2NsYXNzIFggeworICAgIHZvaWQgZigpIHsKKyAgICAgICAgaWYgKGZhbHNlIHx8IDxjYXJldD50cnVlIHx8IHRoaXMgPT0gbnVsbCkgcmV0dXJuOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3NpbXBsaWZ5Qm9vbGVhbkV4cHJlc3Npb24vYmVmb3JlMi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9zaW1wbGlmeUJvb2xlYW5FeHByZXNzaW9uL2JlZm9yZTIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZGVkYTEyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9zaW1wbGlmeUJvb2xlYW5FeHByZXNzaW9uL2JlZm9yZTIuamF2YQpAQCAtMCwwICsxLDYgQEAKKy8vICJTaW1wbGlmeSBib29sZWFuIGV4cHJlc3Npb24iICJ0cnVlIgorY2xhc3MgWCB7CisgICAgdm9pZCBmKCkgeworICAgICAgICBpZiAoZmFsc2UgfHwgKDxjYXJldD50cnVlICYmICEoZmFsc2UpKXx8IHRoaXMgPT0gbnVsbCkgcmV0dXJuOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3NpbXBsaWZ5Qm9vbGVhbkV4cHJlc3Npb24vYmVmb3JlMy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9zaW1wbGlmeUJvb2xlYW5FeHByZXNzaW9uL2JlZm9yZTMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MmI2YjkwCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9zaW1wbGlmeUJvb2xlYW5FeHByZXNzaW9uL2JlZm9yZTMuamF2YQpAQCAtMCwwICsxLDYgQEAKKy8vICJTaW1wbGlmeSBib29sZWFuIGV4cHJlc3Npb24iICJ0cnVlIgorY2xhc3MgWCB7CisgIHZvaWQgZigpIHsKKyAgICBpbnQgaSA9ICEoIWZhbHNlICYmIHRydWUpIHx8IDxjYXJldD4odHJ1ZSA/IHRydWUgJiB0cnVlIDogISFmYWxzZSB8IGZhbHNlKSB8fCB0aGlzID09IG51bGwgPyAwIDogMTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvc2ltcGxpZnlCb29sZWFuRXhwcmVzc2lvbi9iZWZvcmU0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3NpbXBsaWZ5Qm9vbGVhbkV4cHJlc3Npb24vYmVmb3JlNC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFlMGYwY2MKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3NpbXBsaWZ5Qm9vbGVhbkV4cHJlc3Npb24vYmVmb3JlNC5qYXZhCkBAIC0wLDAgKzEsOSBAQAorLy8gIlNpbXBsaWZ5IGJvb2xlYW4gZXhwcmVzc2lvbiIgInRydWUiCitjbGFzcyBYIHsKKyAgdm9pZCBmKCkgeworICAgICAgICBpbnQgaSA9IDI7CisgICAgICAgIGlmIChmYWxzZTxjYXJldD4gJiYgaT09MCkgeyAgIAorICAgICAgICAgICAgLy9zZGYKKyAgICAgICAgfQorICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9zaW1wbGlmeUJvb2xlYW5FeHByZXNzaW9uL2JlZm9yZTUuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvc2ltcGxpZnlCb29sZWFuRXhwcmVzc2lvbi9iZWZvcmU1LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODVkMGRmNgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvc2ltcGxpZnlCb29sZWFuRXhwcmVzc2lvbi9iZWZvcmU1LmphdmEKQEAgLTAsMCArMSwxNCBAQAorLy8gIlNpbXBsaWZ5IGJvb2xlYW4gZXhwcmVzc2lvbiIgInRydWUiCitjbGFzcyBYIHsKKyAgICB2b2lkIGYoKSB7CisgICAgICAgIGludCBpID0gMjsKKyAgICAgICAgaWYgKGZhbHNlPGNhcmV0PiAhPWZhbHNlKSB7CisgICAgICAgICAgICAvL3NkZgorICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgLy8gYmVnaW4KKyAgICAgICAgICAgIGludCBvID0gMDsgLy9taWQKKyAgICAgICAgICAgIC8vIGVuZAorICAgICAgICB9CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvc2ltcGxpZnlCb29sZWFuRXhwcmVzc2lvbi9iZWZvcmU2LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3NpbXBsaWZ5Qm9vbGVhbkV4cHJlc3Npb24vYmVmb3JlNi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI0ZThhZTAKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3NpbXBsaWZ5Qm9vbGVhbkV4cHJlc3Npb24vYmVmb3JlNi5qYXZhCkBAIC0wLDAgKzEsOCBAQAorLy8gIlNpbXBsaWZ5IGJvb2xlYW4gZXhwcmVzc2lvbiIgInRydWUiCitjbGFzcyBYIHsKKyAgICB2b2lkIGYoKSB7CisgICAgICAgIGlmICgoISghKChib29sZWFuKXRydWUpKTxjYXJldD4gPT0odHJ1ZSkpKSB7CisgICAgICAgICAgICAvL3NkZgorICAgICAgICB9CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvc2ltcGxpZnlCb29sZWFuRXhwcmVzc2lvbi9iZWZvcmU3LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3NpbXBsaWZ5Qm9vbGVhbkV4cHJlc3Npb24vYmVmb3JlNy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIzN2IxODcKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3NpbXBsaWZ5Qm9vbGVhbkV4cHJlc3Npb24vYmVmb3JlNy5qYXZhCkBAIC0wLDAgKzEsOSBAQAorLy8gIlNpbXBsaWZ5IGJvb2xlYW4gZXhwcmVzc2lvbiIgInRydWUiCitjbGFzcyBYIHsKKyAgICB2b2lkIGYoT2JqZWN0IHBWYWwsIE9iamVjdCBuKSB7CisgICAgICAgIGlmICghcFZhbC5lcXVhbHMobikpCisgICAgICAgICAgICAgICAgcFZhbCA9IG51bGw7CisgICAgICAgICAgICBlbHNlIGlmICg8Y2FyZXQ+dHJ1ZT09dHJ1ZSkKKyAgICAgICAgICAgICAgICBwVmFsID0gbjsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9zaW1wbGlmeUJvb2xlYW5FeHByZXNzaW9uL2JlZm9yZUJyb2tlbkluc2lkZVBvbHlhZGljLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3NpbXBsaWZ5Qm9vbGVhbkV4cHJlc3Npb24vYmVmb3JlQnJva2VuSW5zaWRlUG9seWFkaWMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMjU0ZGZiCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9zaW1wbGlmeUJvb2xlYW5FeHByZXNzaW9uL2JlZm9yZUJyb2tlbkluc2lkZVBvbHlhZGljLmphdmEKQEAgLTAsMCArMSw2IEBACisvLyAiU2ltcGxpZnkgYm9vbGVhbiBleHByZXNzaW9uIiAiZmFsc2UiCitjbGFzcyBYIHsKKyAgICB2b2lkIGYoaW50IGEsIGludCBiLCBpbnQgYykgeworICAgICAgICBpZiAoIGIgLSBhID09IGIgLSBjIC0gPGNhcmV0Pj09IGIpIHJldHVybjsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3NpbXBsaWZ5Qm9vbGVhbkV4cHJlc3Npb24vYmVmb3JlRXEuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvc2ltcGxpZnlCb29sZWFuRXhwcmVzc2lvbi9iZWZvcmVFcS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ0NDgwMTUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3NpbXBsaWZ5Qm9vbGVhbkV4cHJlc3Npb24vYmVmb3JlRXEuamF2YQpAQCAtMCwwICsxLDYgQEAKKy8vICJTaW1wbGlmeSBib29sZWFuIGV4cHJlc3Npb24iICJ0cnVlIgorY2xhc3MgWCB7CisgICAgdm9pZCBmKGJvb2xlYW4gYikgeworICAgICAgICBpZiAoPGNhcmV0PmIgPT0gZmFsc2UpIHJldHVybjsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9zaW1wbGlmeUJvb2xlYW5FeHByZXNzaW9uL2JlZm9yZU1pZGRsZVBvbHlhZGljLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3NpbXBsaWZ5Qm9vbGVhbkV4cHJlc3Npb24vYmVmb3JlTWlkZGxlUG9seWFkaWMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NTkzODE4Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9zaW1wbGlmeUJvb2xlYW5FeHByZXNzaW9uL2JlZm9yZU1pZGRsZVBvbHlhZGljLmphdmEKQEAgLTAsMCArMSw2IEBACisvLyAiU2ltcGxpZnkgYm9vbGVhbiBleHByZXNzaW9uIiAidHJ1ZSIKK2NsYXNzIFggeworICAgIHZvaWQgZihib29sZWFuIGIsIGJvb2xlYW4gYykgeworICAgICAgICBpZiAoYiAmJiB0cjxjYXJldD51ZSAmJiBjKSByZXR1cm47CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9zaW1wbGlmeUJvb2xlYW5FeHByZXNzaW9uL2JlZm9yZVhvcjEuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvc2ltcGxpZnlCb29sZWFuRXhwcmVzc2lvbi9iZWZvcmVYb3IxLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWMzYzIwNQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvc2ltcGxpZnlCb29sZWFuRXhwcmVzc2lvbi9iZWZvcmVYb3IxLmphdmEKQEAgLTAsMCArMSw5IEBACisvLyAiU2ltcGxpZnkgYm9vbGVhbiBleHByZXNzaW9uIiAidHJ1ZSIKK2NsYXNzIEEgeworICAgIGJvb2xlYW4gYSA9IHRydWU7CisgICAgYm9vbGVhbiBiID0gdHJ1ZTsKKyAgICBib29sZWFuIHggPSBhIDxjYXJldD5eIGZhbHNlOyAvLyBpbnRlbnRpb24gInNpbXBsaWZ5IGJvb2xlYW4gZXhwcmVzc2lvbiIgZG9lcyBub3RoaW5nIGhlcmUsIGV4cGVjdGVkOiBib29sZWFuIHggPSBhOworICAgIGJvb2xlYW4geDEgPSBhIF4gdHJ1ZTsgLy8gZXhwZWN0ZWQ6IGJvb2xlYW4geDEgPSAhYTsgZmFpbHMsIGRvZXMgbm90aGluZworICAgIGJvb2xlYW4geSA9IGEgXiB0cnVlIF4gYjsgIC8vIGludGVudGlvbiByZXBsYWNlcyB3aXRoIGEgXiBiLCBleHBlY3RlZCAhKGEgXiBiKSBmYWlscworICAgIGJvb2xlYW4geTEgPSBhIF4gZmFsc2UgXiBiOyAvLyBleHBlY3RlZCBib29sZWFuIHkxID0gYSBeIGIgd29ya3MgY29ycmVjdGx5OworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvc2ltcGxpZnlCb29sZWFuRXhwcmVzc2lvbi9iZWZvcmVYb3IyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3NpbXBsaWZ5Qm9vbGVhbkV4cHJlc3Npb24vYmVmb3JlWG9yMi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEzMDE1NjEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3NpbXBsaWZ5Qm9vbGVhbkV4cHJlc3Npb24vYmVmb3JlWG9yMi5qYXZhCkBAIC0wLDAgKzEsOSBAQAorLy8gIlNpbXBsaWZ5IGJvb2xlYW4gZXhwcmVzc2lvbiIgInRydWUiCitjbGFzcyBBIHsKKyAgICBib29sZWFuIGEgPSB0cnVlOworICAgIGJvb2xlYW4gYiA9IHRydWU7CisgICAgYm9vbGVhbiB4ID0gYSBeIGZhbHNlOyAvLyBpbnRlbnRpb24gInNpbXBsaWZ5IGJvb2xlYW4gZXhwcmVzc2lvbiIgZG9lcyBub3RoaW5nIGhlcmUsIGV4cGVjdGVkOiBib29sZWFuIHggPSBhOworICAgIGJvb2xlYW4geDEgPSBhIDxjYXJldD5eIHRydWU7IC8vIGV4cGVjdGVkOiBib29sZWFuIHgxID0gIWE7IGZhaWxzLCBkb2VzIG5vdGhpbmcKKyAgICBib29sZWFuIHkgPSBhIF4gdHJ1ZSBeIGI7ICAvLyBpbnRlbnRpb24gcmVwbGFjZXMgd2l0aCBhIF4gYiwgZXhwZWN0ZWQgIShhIF4gYikgZmFpbHMKKyAgICBib29sZWFuIHkxID0gYSBeIGZhbHNlIF4gYjsgLy8gZXhwZWN0ZWQgYm9vbGVhbiB5MSA9IGEgXiBiIHdvcmtzIGNvcnJlY3RseTsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3NpbXBsaWZ5Qm9vbGVhbkV4cHJlc3Npb24vYmVmb3JlWG9yMy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9zaW1wbGlmeUJvb2xlYW5FeHByZXNzaW9uL2JlZm9yZVhvcjMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NTZjOGJmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9zaW1wbGlmeUJvb2xlYW5FeHByZXNzaW9uL2JlZm9yZVhvcjMuamF2YQpAQCAtMCwwICsxLDkgQEAKKy8vICJTaW1wbGlmeSBib29sZWFuIGV4cHJlc3Npb24iICJ0cnVlIgorY2xhc3MgQSB7CisgICAgYm9vbGVhbiBhID0gdHJ1ZTsKKyAgICBib29sZWFuIGIgPSB0cnVlOworICAgIGJvb2xlYW4geCA9IGEgXiBmYWxzZTsgLy8gaW50ZW50aW9uICJzaW1wbGlmeSBib29sZWFuIGV4cHJlc3Npb24iIGRvZXMgbm90aGluZyBoZXJlLCBleHBlY3RlZDogYm9vbGVhbiB4ID0gYTsKKyAgICBib29sZWFuIHgxID0gYSBeIHRydWU7IC8vIGV4cGVjdGVkOiBib29sZWFuIHgxID0gIWE7IGZhaWxzLCBkb2VzIG5vdGhpbmcKKyAgICBib29sZWFuIHkgPSBhIF4gPGNhcmV0PnRydWUgXiBiOyAgLy8gaW50ZW50aW9uIHJlcGxhY2VzIHdpdGggYSBeIGIsIGV4cGVjdGVkICEoYSBeIGIpIGZhaWxzCisgICAgYm9vbGVhbiB5MSA9IGEgXiBmYWxzZSBeIGI7IC8vIGV4cGVjdGVkIGJvb2xlYW4geTEgPSBhIF4gYiB3b3JrcyBjb3JyZWN0bHk7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9zaW1wbGlmeUJvb2xlYW5FeHByZXNzaW9uL2JlZm9yZVhvcjQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvc2ltcGxpZnlCb29sZWFuRXhwcmVzc2lvbi9iZWZvcmVYb3I0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGQ1ZDBiYwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvc2ltcGxpZnlCb29sZWFuRXhwcmVzc2lvbi9iZWZvcmVYb3I0LmphdmEKQEAgLTAsMCArMSw5IEBACisvLyAiU2ltcGxpZnkgYm9vbGVhbiBleHByZXNzaW9uIiAidHJ1ZSIKK2NsYXNzIEEgeworICAgIGJvb2xlYW4gYSA9IHRydWU7CisgICAgYm9vbGVhbiBiID0gdHJ1ZTsKKyAgICBib29sZWFuIHggPSBhIF4gZmFsc2U7IC8vIGludGVudGlvbiAic2ltcGxpZnkgYm9vbGVhbiBleHByZXNzaW9uIiBkb2VzIG5vdGhpbmcgaGVyZSwgZXhwZWN0ZWQ6IGJvb2xlYW4geCA9IGE7CisgICAgYm9vbGVhbiB4MSA9IGEgXiB0cnVlOyAvLyBleHBlY3RlZDogYm9vbGVhbiB4MSA9ICFhOyBmYWlscywgZG9lcyBub3RoaW5nCisgICAgYm9vbGVhbiB5ID0gYSBeIHRydWUgXiBiOyAgLy8gaW50ZW50aW9uIHJlcGxhY2VzIHdpdGggYSBeIGIsIGV4cGVjdGVkICEoYSBeIGIpIGZhaWxzCisgICAgYm9vbGVhbiB5MSA9IGEgXiA8Y2FyZXQ+ZmFsc2UgXiBiOyAvLyBleHBlY3RlZCBib29sZWFuIHkxID0gYSBeIGIgd29ya3MgY29ycmVjdGx5OworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvc3RhdGljSW1wb3J0TWV0aG9kL2FmdGVyMS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9zdGF0aWNJbXBvcnRNZXRob2QvYWZ0ZXIxLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmM0Njg4YgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvc3RhdGljSW1wb3J0TWV0aG9kL2FmdGVyMS5qYXZhCkBAIC0wLDAgKzEsOCBAQAoraW1wb3J0IHN0YXRpYyBqYXZhLmxhbmcuSW50ZWdlci5wYXJzZUludDsKKworLy8gIlN0YXRpYyBJbXBvcnQgTWV0aG9kICdqYXZhLmxhbmcuSW50ZWdlci5wYXJzZUludCciICJ0cnVlIgorcHVibGljIGNsYXNzIFggeworICAgIHsKKyAgICAgICAgPGNhcmV0PnBhcnNlSW50KCIiLDEwKTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9zdGF0aWNJbXBvcnRNZXRob2QvYWZ0ZXIyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3N0YXRpY0ltcG9ydE1ldGhvZC9hZnRlcjIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYzc1ZDM4Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9zdGF0aWNJbXBvcnRNZXRob2QvYWZ0ZXIyLmphdmEKQEAgLTAsMCArMSwzMCBAQAorLy8gIlN0YXRpYyBJbXBvcnQgTWV0aG9kLi4uIiAidHJ1ZSIKK3BhY2thZ2UgcDsKKworaW1wb3J0IHN0YXRpYyBwLkZGRi5teUVxdWFsVG87CisKK3B1YmxpYyBjbGFzcyBYIHsKKyAgcHVibGljIHZvaWQgdGVzdCgpIHRocm93cyBFeGNlcHRpb24geworICAgIGFzc2VydE1lKCIiLCBteUVxdWFsVG8oIiIpKTsKKyAgfQorCisgIDxWPiB2b2lkIGFzc2VydE1lKFYgdiwgTTxWPiBtKSB7CisgIH0KK30KKworCitjbGFzcyBNPFQ+IHsKK30KKworY2xhc3MgRkZGIHsKKyAgcHVibGljIHN0YXRpYyA8VD4gTTxUPiBteUVxdWFsVG8oVCBvcGVyYW5kKSB7CisgICAgcmV0dXJuIG51bGw7CisgIH0KK30KKworCitjbGFzcyBMTEwgeworICBwdWJsaWMgc3RhdGljIE08U3RyaW5nPiBteUVxdWFsVG8oU3RyaW5nIHN0cmluZykgeworICAgIHJldHVybiBudWxsOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9zdGF0aWNJbXBvcnRNZXRob2QvYWZ0ZXJSZXBsYWNlQWxsUmVmcy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9zdGF0aWNJbXBvcnRNZXRob2QvYWZ0ZXJSZXBsYWNlQWxsUmVmcy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVlMjc0NTUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3N0YXRpY0ltcG9ydE1ldGhvZC9hZnRlclJlcGxhY2VBbGxSZWZzLmphdmEKQEAgLTAsMCArMSw5IEBACitpbXBvcnQgc3RhdGljIGphdmEubGFuZy5TdHJpbmcuZm9ybWF0OworCisvLyAiU3RhdGljIEltcG9ydCBNZXRob2QgJ2phdmEubGFuZy5TdHJpbmcuZm9ybWF0JyIgInRydWUiCitwdWJsaWMgY2xhc3MgWCB7CisgICAgeworICAgICAgZm9ybWF0KCIiKTsKKyAgICAgIGZvcm1hdCgiIik7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvc3RhdGljSW1wb3J0TWV0aG9kL2FmdGVyUmV0dXJuVHlwZS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9zdGF0aWNJbXBvcnRNZXRob2QvYWZ0ZXJSZXR1cm5UeXBlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2RjZTBiNQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvc3RhdGljSW1wb3J0TWV0aG9kL2FmdGVyUmV0dXJuVHlwZS5qYXZhCkBAIC0wLDAgKzEsMjEgQEAKKy8vICJTdGF0aWMgSW1wb3J0IE1ldGhvZCAnZm9vLkIuYWFhYWFhYSciICJ0cnVlIgorcGFja2FnZSBmb287CisKK2ltcG9ydCBzdGF0aWMgZm9vLkIuYWFhYWFhYTsKKworcHVibGljIGNsYXNzIFggeworICAgIHsKKyAgICAgICAgSW50ZWdlciBpID0gYWFhYWFhYSgiIiwgMTApOworICAgIH0KK30KKworY2xhc3MgQiB7CisgIHB1YmxpYyBzdGF0aWMgIEludGVnZXIgYWFhYWFhYShTdHJpbmcgcywgaW50IGkpIHsKKyAgICByZXR1cm4gMTsKKyAgfQorfQorY2xhc3MgQjEgeworICBwdWJsaWMgc3RhdGljIFN0cmluZyBhYWFhYWFhKFN0cmluZyBzLCBpbnQgaSkgeworICAgIHJldHVybiAiIjsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvc3RhdGljSW1wb3J0TWV0aG9kL2FmdGVyVmFyYXJncy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9zdGF0aWNJbXBvcnRNZXRob2QvYWZ0ZXJWYXJhcmdzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2ExODdmYgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvc3RhdGljSW1wb3J0TWV0aG9kL2FmdGVyVmFyYXJncy5qYXZhCkBAIC0wLDAgKzEsMjMgQEAKKy8vICJTdGF0aWMgSW1wb3J0IE1ldGhvZCAnZm9vLkIuYWFhYWFhYSciICJ0cnVlIgorcGFja2FnZSBmb287CisKK2ltcG9ydCBzdGF0aWMgZm9vLkIuYWFhYWFhYTsKKworcHVibGljIGNsYXNzIFggeworICAgIHsKKyAgICAgICAgZm9vKDEsIDIsIGFhYWFhYWEoIiIpKTsKKyAgICB9CisgIAorICAgIHZvaWQgZm9vKEludGVnZXIuLi4gcCkge30KK30KKworY2xhc3MgQiB7CisgIHB1YmxpYyBzdGF0aWMgIEludGVnZXIgYWFhYWFhYShTdHJpbmcgcykgeworICAgIHJldHVybiAxOworICB9Cit9CitjbGFzcyBCMSB7CisgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGFhYWFhYWEoU3RyaW5nIHMpIHsKKyAgICByZXR1cm4gIiI7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3N0YXRpY0ltcG9ydE1ldGhvZC9iZWZvcmUxLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3N0YXRpY0ltcG9ydE1ldGhvZC9iZWZvcmUxLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmZhYjNkYQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvc3RhdGljSW1wb3J0TWV0aG9kL2JlZm9yZTEuamF2YQpAQCAtMCwwICsxLDYgQEAKKy8vICJTdGF0aWMgSW1wb3J0IE1ldGhvZCAnamF2YS5sYW5nLkludGVnZXIucGFyc2VJbnQnIiAidHJ1ZSIKK3B1YmxpYyBjbGFzcyBYIHsKKyAgICB7CisgICAgICAgIDxjYXJldD5wYXJzZUludCgiIiwxMCk7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvc3RhdGljSW1wb3J0TWV0aG9kL2JlZm9yZTIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvc3RhdGljSW1wb3J0TWV0aG9kL2JlZm9yZTIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYzM3ODgxCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9zdGF0aWNJbXBvcnRNZXRob2QvYmVmb3JlMi5qYXZhCkBAIC0wLDAgKzEsMjcgQEAKKy8vICJTdGF0aWMgSW1wb3J0IE1ldGhvZC4uLiIgInRydWUiCitwYWNrYWdlIHA7CitwdWJsaWMgY2xhc3MgWCB7CisgIHB1YmxpYyB2b2lkIHRlc3QoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBhc3NlcnRNZSgiIiwgbXk8Y2FyZXQ+RXF1YWxUbygiIikpOworICB9CisKKyAgPFY+IHZvaWQgYXNzZXJ0TWUoViB2LCBNPFY+IG0pIHsKKyAgfQorfQorCisKK2NsYXNzIE08VD4geworfQorCitjbGFzcyBGRkYgeworICBwdWJsaWMgc3RhdGljIDxUPiBNPFQ+IG15RXF1YWxUbyhUIG9wZXJhbmQpIHsKKyAgICByZXR1cm4gbnVsbDsKKyAgfQorfQorCisKK2NsYXNzIExMTCB7CisgIHB1YmxpYyBzdGF0aWMgTTxTdHJpbmc+IG15RXF1YWxUbyhTdHJpbmcgc3RyaW5nKSB7CisgICAgcmV0dXJuIG51bGw7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3N0YXRpY0ltcG9ydE1ldGhvZC9iZWZvcmVRdWFsaWZpZWQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvc3RhdGljSW1wb3J0TWV0aG9kL2JlZm9yZVF1YWxpZmllZC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg4YjZmYjIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3N0YXRpY0ltcG9ydE1ldGhvZC9iZWZvcmVRdWFsaWZpZWQuamF2YQpAQCAtMCwwICsxLDYgQEAKKy8vICJTdGF0aWMgSW1wb3J0IE1ldGhvZCAnamF2YS5sYW5nLkludGVnZXIucGFyc2VJbnQnIiAiZmFsc2UiCitwdWJsaWMgY2xhc3MgWCB7CisgICAgeworICAgICAgICB0aGlzLjxjYXJldD5wYXJzZUludCgiIiwxMCk7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvc3RhdGljSW1wb3J0TWV0aG9kL2JlZm9yZVJlcGxhY2VBbGxSZWZzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3N0YXRpY0ltcG9ydE1ldGhvZC9iZWZvcmVSZXBsYWNlQWxsUmVmcy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNjN2FkMjcKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3N0YXRpY0ltcG9ydE1ldGhvZC9iZWZvcmVSZXBsYWNlQWxsUmVmcy5qYXZhCkBAIC0wLDAgKzEsNyBAQAorLy8gIlN0YXRpYyBJbXBvcnQgTWV0aG9kICdqYXZhLmxhbmcuU3RyaW5nLmZvcm1hdCciICJ0cnVlIgorcHVibGljIGNsYXNzIFggeworICAgIHsKKyAgICAgIFN0cmluZy5mb3JtYXQoIiIpOworICAgICAgPGNhcmV0PmZvcm1hdCgiIik7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvc3RhdGljSW1wb3J0TWV0aG9kL2JlZm9yZVJldHVyblR5cGUuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvc3RhdGljSW1wb3J0TWV0aG9kL2JlZm9yZVJldHVyblR5cGUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MTkzOTMyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9zdGF0aWNJbXBvcnRNZXRob2QvYmVmb3JlUmV0dXJuVHlwZS5qYXZhCkBAIC0wLDAgKzEsMTggQEAKKy8vICJTdGF0aWMgSW1wb3J0IE1ldGhvZCAnZm9vLkIuYWFhYWFhYSciICJ0cnVlIgorcGFja2FnZSBmb287CitwdWJsaWMgY2xhc3MgWCB7CisgICAgeworICAgICAgICBJbnRlZ2VyIGkgPSA8Y2FyZXQ+YWFhYWFhYSgiIiwgMTApOworICAgIH0KK30KKworY2xhc3MgQiB7CisgIHB1YmxpYyBzdGF0aWMgIEludGVnZXIgYWFhYWFhYShTdHJpbmcgcywgaW50IGkpIHsKKyAgICByZXR1cm4gMTsKKyAgfQorfQorY2xhc3MgQjEgeworICBwdWJsaWMgc3RhdGljIFN0cmluZyBhYWFhYWFhKFN0cmluZyBzLCBpbnQgaSkgeworICAgIHJldHVybiAiIjsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvc3RhdGljSW1wb3J0TWV0aG9kL2JlZm9yZVZhcmFyZ3MuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvc3RhdGljSW1wb3J0TWV0aG9kL2JlZm9yZVZhcmFyZ3MuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NmJiZWExCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9zdGF0aWNJbXBvcnRNZXRob2QvYmVmb3JlVmFyYXJncy5qYXZhCkBAIC0wLDAgKzEsMjEgQEAKKy8vICJTdGF0aWMgSW1wb3J0IE1ldGhvZCAnZm9vLkIuYWFhYWFhYSciICJ0cnVlIgorcGFja2FnZSBmb287CisKK3B1YmxpYyBjbGFzcyBYIHsKKyAgICB7CisgICAgICAgIGZvbygxLCAyLCA8Y2FyZXQ+YWFhYWFhYSgiIikpOworICAgIH0KKyAgCisgICAgdm9pZCBmb28oSW50ZWdlci4uLiBwKSB7fQorfQorCitjbGFzcyBCIHsKKyAgcHVibGljIHN0YXRpYyAgSW50ZWdlciBhYWFhYWFhKFN0cmluZyBzKSB7CisgICAgcmV0dXJuIDE7CisgIH0KK30KK2NsYXNzIEIxIHsKKyAgcHVibGljIHN0YXRpYyBTdHJpbmcgYWFhYWFhYShTdHJpbmcgcykgeworICAgIHJldHVybiAiIjsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvc3RyaW5nVG9DaGFyYWN0ZXJMaXRlcmFsL2FmdGVyMS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9zdHJpbmdUb0NoYXJhY3RlckxpdGVyYWwvYWZ0ZXIxLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODExZGVkMwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvc3RyaW5nVG9DaGFyYWN0ZXJMaXRlcmFsL2FmdGVyMS5qYXZhCkBAIC0wLDAgKzEsMTAgQEAKKy8vICJDaGFuZ2UgIjEiIHRvICcxJyAodG8gY2hhciBsaXRlcmFsKSIgInRydWUiCitjbGFzcyBTaW1wbGUgeworICAgIHB1YmxpYyB2b2lkIG0oY2hhciBjaCkgeworCisgICAgfQorCisgICAgcHVibGljIHZvaWQgdGVzdCgpIHsKKyAgICAgICAgbSg8Y2FyZXQ+JzEnKTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3N0cmluZ1RvQ2hhcmFjdGVyTGl0ZXJhbC9hZnRlcjEwLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3N0cmluZ1RvQ2hhcmFjdGVyTGl0ZXJhbC9hZnRlcjEwLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGQ5ZDFhYQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvc3RyaW5nVG9DaGFyYWN0ZXJMaXRlcmFsL2FmdGVyMTAuamF2YQpAQCAtMCwwICsxLDggQEAKKy8vICJDaGFuZ2UgIiciIHRvICdcJycgKHRvIGNoYXIgbGl0ZXJhbCkiICJ0cnVlIgorY2xhc3MgUXVvdGVzIHsKKyAgICB2b2lkIG0xKGNoYXIgY2gpIHt9CisKKyAgICB2b2lkIHRlc3QoKSB7CisgICAgICAgIG0xKDxjYXJldD4nXCcnKTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3N0cmluZ1RvQ2hhcmFjdGVyTGl0ZXJhbC9hZnRlcjExLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3N0cmluZ1RvQ2hhcmFjdGVyTGl0ZXJhbC9hZnRlcjExLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDIxM2RhMgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvc3RyaW5nVG9DaGFyYWN0ZXJMaXRlcmFsL2FmdGVyMTEuamF2YQpAQCAtMCwwICsxLDggQEAKKy8vICJDaGFuZ2UgIlwnIiB0byAnXCcnICh0byBjaGFyIGxpdGVyYWwpIiAidHJ1ZSIKK2NsYXNzIFF1b3RlcyB7CisgICAgdm9pZCBtMShjaGFyIGNoKSB7fQorCisgICAgdm9pZCB0ZXN0KCkgeworICAgICAgICBtMSg8Y2FyZXQ+J1wnJyk7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9zdHJpbmdUb0NoYXJhY3RlckxpdGVyYWwvYWZ0ZXIxMi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9zdHJpbmdUb0NoYXJhY3RlckxpdGVyYWwvYWZ0ZXIxMi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkwNmE4NDcKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3N0cmluZ1RvQ2hhcmFjdGVyTGl0ZXJhbC9hZnRlcjEyLmphdmEKQEAgLTAsMCArMSw4IEBACisvLyAiQ2hhbmdlICciJyB0byAiXCIiICh0byBTdHJpbmcgbGl0ZXJhbCkiICJ0cnVlIgorY2xhc3MgUXVvdGVzIHsKKyAgICB2b2lkIG0xKFN0cmluZyBzKSB7fQorCisgICAgdm9pZCB0ZXN0KCkgeworICAgICAgICBtMSg8Y2FyZXQ+IlwiIik7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9zdHJpbmdUb0NoYXJhY3RlckxpdGVyYWwvYWZ0ZXIxMy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9zdHJpbmdUb0NoYXJhY3RlckxpdGVyYWwvYWZ0ZXIxMy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU3OGM0OTUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3N0cmluZ1RvQ2hhcmFjdGVyTGl0ZXJhbC9hZnRlcjEzLmphdmEKQEAgLTAsMCArMSw4IEBACisvLyAiQ2hhbmdlICJcXCIgdG8gJ1xcJyAodG8gY2hhciBsaXRlcmFsKSIgInRydWUiCitjbGFzcyBBIHsKKyAgdm9pZCBtKGNoYXIgeCkge30KKworICB7CisgICAgbSg8Y2FyZXQ+J1xcJyk7CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvc3RyaW5nVG9DaGFyYWN0ZXJMaXRlcmFsL2FmdGVyNC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9zdHJpbmdUb0NoYXJhY3RlckxpdGVyYWwvYWZ0ZXI0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjY4N2Y4OQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvc3RyaW5nVG9DaGFyYWN0ZXJMaXRlcmFsL2FmdGVyNC5qYXZhCkBAIC0wLDAgKzEsMTYgQEAKKy8vICJDaGFuZ2UgIjEiIHRvICcxJyAodG8gY2hhciBsaXRlcmFsKSIgInRydWUiCitjbGFzcyBTaW1wbGUgZXh0ZW5kcyBBbmNlc3RvciB7CisgICAgcHVibGljIHZvaWQgbShpbnQgaSkgeworCisgICAgfQorCisgICAgcHVibGljIHZvaWQgdGVzdCgpIHsKKyAgICAgICAgbSg8Y2FyZXQ+JzEnKTsKKyAgICB9Cit9CisKK2NsYXNzIEFuY2VzdG9yIHsKKyAgICBwdWJsaWMgdm9pZCBtKGNoYXIgY2gpIHsKKworICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvc3RyaW5nVG9DaGFyYWN0ZXJMaXRlcmFsL2FmdGVyNS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9zdHJpbmdUb0NoYXJhY3RlckxpdGVyYWwvYWZ0ZXI1LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTUyYzI1OAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvc3RyaW5nVG9DaGFyYWN0ZXJMaXRlcmFsL2FmdGVyNS5qYXZhCkBAIC0wLDAgKzEsMTAgQEAKKy8vICJDaGFuZ2UgIjEiIHRvICcxJyAodG8gY2hhciBsaXRlcmFsKSIgInRydWUiCitjbGFzcyBTaW1wbGUgeworICAgIFNpbXBsZSgpIHt9CisgICAgU2ltcGxlKGludCBpKSB7fQorICAgIFNpbXBsZShjaGFyIGNoKSB7fQorCisgICAgcHVibGljIHN0YXRpYyB2b2lkIHRlc3QoKSB7CisgICAgICAgIGZpbmFsIFNpbXBsZSBpbnN0YW5jZSA9IG5ldyBTaW1wbGUoPGNhcmV0PicxJyk7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9zdHJpbmdUb0NoYXJhY3RlckxpdGVyYWwvYWZ0ZXI3LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3N0cmluZ1RvQ2hhcmFjdGVyTGl0ZXJhbC9hZnRlcjcuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMWE2Y2E2Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9zdHJpbmdUb0NoYXJhY3RlckxpdGVyYWwvYWZ0ZXI3LmphdmEKQEAgLTAsMCArMSw1IEBACisvLyAiQ2hhbmdlICcxJyB0byAiMSIgKHRvIFN0cmluZyBsaXRlcmFsKSIgInRydWUiCitjbGFzcyBTaW1wbGUgeworICAgIFNpbXBsZSgpIHt0aGlzKDxjYXJldD4iMSIpO30KKyAgICBTaW1wbGUoU3RyaW5nIHMpIHt9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3N0cmluZ1RvQ2hhcmFjdGVyTGl0ZXJhbC9hZnRlcjguamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvc3RyaW5nVG9DaGFyYWN0ZXJMaXRlcmFsL2FmdGVyOC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY4ZDJjZmIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3N0cmluZ1RvQ2hhcmFjdGVyTGl0ZXJhbC9hZnRlcjguamF2YQpAQCAtMCwwICsxLDkgQEAKKy8vICJDaGFuZ2UgIjEiIHRvICcxJyAodG8gY2hhciBsaXRlcmFsKSIgInRydWUiCitjbGFzcyBTaW1wbGUgeworICAgIFNpbXBsZShpbnQgaSkge30KKyAgICBTaW1wbGUoY2hhciBjaCkge30KK30KKworY2xhc3MgRGVzY2VuZGFudCBleHRlbmRzIFNpbXBsZSB7CisgICAgRGVzY2VuZGFudCgpIHtzdXBlcig8Y2FyZXQ+JzEnKTt9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3N0cmluZ1RvQ2hhcmFjdGVyTGl0ZXJhbC9hZnRlcjkuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvc3RyaW5nVG9DaGFyYWN0ZXJMaXRlcmFsL2FmdGVyOS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRmYjEzYjUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3N0cmluZ1RvQ2hhcmFjdGVyTGl0ZXJhbC9hZnRlcjkuamF2YQpAQCAtMCwwICsxLDggQEAKKy8vICJDaGFuZ2UgIjEiIHRvICcxJyAodG8gY2hhciBsaXRlcmFsKSIgInRydWUiCitjbGFzcyBTaW1wbGUgeworICAgIHB1YmxpYyB2b2lkIG0xKGZpbmFsIGludCBpLCBmaW5hbCBjaGFyIGNoKSB7fQorCisgICAgcHVibGljIHZvaWQgdGVzdCgpIHsKKyAgICAgICAgbTEoImRvZXMgbm90IG1hdHRlciIsIDxjYXJldD4nMScpOworICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvc3RyaW5nVG9DaGFyYWN0ZXJMaXRlcmFsL2JlZm9yZTEuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvc3RyaW5nVG9DaGFyYWN0ZXJMaXRlcmFsL2JlZm9yZTEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOGYyZjMyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9zdHJpbmdUb0NoYXJhY3RlckxpdGVyYWwvYmVmb3JlMS5qYXZhCkBAIC0wLDAgKzEsMTAgQEAKKy8vICJDaGFuZ2UgIjEiIHRvICcxJyAodG8gY2hhciBsaXRlcmFsKSIgInRydWUiCitjbGFzcyBTaW1wbGUgeworICAgIHB1YmxpYyB2b2lkIG0oY2hhciBjaCkgeworCisgICAgfQorCisgICAgcHVibGljIHZvaWQgdGVzdCgpIHsKKyAgICAgICAgbSg8Y2FyZXQ+IjEiKTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3N0cmluZ1RvQ2hhcmFjdGVyTGl0ZXJhbC9iZWZvcmUxMC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9zdHJpbmdUb0NoYXJhY3RlckxpdGVyYWwvYmVmb3JlMTAuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OThjZTIwCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9zdHJpbmdUb0NoYXJhY3RlckxpdGVyYWwvYmVmb3JlMTAuamF2YQpAQCAtMCwwICsxLDggQEAKKy8vICJDaGFuZ2UgIiciIHRvICdcJycgKHRvIGNoYXIgbGl0ZXJhbCkiICJ0cnVlIgorY2xhc3MgUXVvdGVzIHsKKyAgICB2b2lkIG0xKGNoYXIgY2gpIHt9CisKKyAgICB2b2lkIHRlc3QoKSB7CisgICAgICAgIG0xKDxjYXJldD4iJyIpOworICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvc3RyaW5nVG9DaGFyYWN0ZXJMaXRlcmFsL2JlZm9yZTExLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3N0cmluZ1RvQ2hhcmFjdGVyTGl0ZXJhbC9iZWZvcmUxMS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjczYjkyMWYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3N0cmluZ1RvQ2hhcmFjdGVyTGl0ZXJhbC9iZWZvcmUxMS5qYXZhCkBAIC0wLDAgKzEsOCBAQAorLy8gIkNoYW5nZSAiXCciIHRvICdcJycgKHRvIGNoYXIgbGl0ZXJhbCkiICJ0cnVlIgorY2xhc3MgUXVvdGVzIHsKKyAgICB2b2lkIG0xKGNoYXIgY2gpIHt9CisKKyAgICB2b2lkIHRlc3QoKSB7CisgICAgICAgIG0xKDxjYXJldD4iXCciKTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3N0cmluZ1RvQ2hhcmFjdGVyTGl0ZXJhbC9iZWZvcmUxMi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9zdHJpbmdUb0NoYXJhY3RlckxpdGVyYWwvYmVmb3JlMTIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMDA4ZGZiCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9zdHJpbmdUb0NoYXJhY3RlckxpdGVyYWwvYmVmb3JlMTIuamF2YQpAQCAtMCwwICsxLDggQEAKKy8vICJDaGFuZ2UgJyInIHRvICJcIiIgKHRvIFN0cmluZyBsaXRlcmFsKSIgInRydWUiCitjbGFzcyBRdW90ZXMgeworICAgIHZvaWQgbTEoU3RyaW5nIHMpIHt9CisKKyAgICB2b2lkIHRlc3QoKSB7CisgICAgICAgIG0xKDxjYXJldD4nIicpOworICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvc3RyaW5nVG9DaGFyYWN0ZXJMaXRlcmFsL2JlZm9yZTEzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3N0cmluZ1RvQ2hhcmFjdGVyTGl0ZXJhbC9iZWZvcmUxMy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM1NzE2ZmEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3N0cmluZ1RvQ2hhcmFjdGVyTGl0ZXJhbC9iZWZvcmUxMy5qYXZhCkBAIC0wLDAgKzEsOCBAQAorLy8gIkNoYW5nZSAiXFwiIHRvICdcXCcgKHRvIGNoYXIgbGl0ZXJhbCkiICJ0cnVlIgorY2xhc3MgQSB7CisgIHZvaWQgbShjaGFyIHgpIHt9CisKKyAgeworICAgIG0oPGNhcmV0PiJcXCIpOworICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3N0cmluZ1RvQ2hhcmFjdGVyTGl0ZXJhbC9iZWZvcmUyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3N0cmluZ1RvQ2hhcmFjdGVyTGl0ZXJhbC9iZWZvcmUyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWQ5OTljMgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvc3RyaW5nVG9DaGFyYWN0ZXJMaXRlcmFsL2JlZm9yZTIuamF2YQpAQCAtMCwwICsxLDEwIEBACisvLyAiQ2hhbmdlICIxIiB0byAnMScgKHRvIGNoYXIgbGl0ZXJhbCkiICJmYWxzZSIKK2NsYXNzIFNpbXBsZSB7CisgICAgcHVibGljIHZvaWQgbShpbnQgaSwgY2hhciBjaCkgeworCisgICAgfQorCisgICAgcHVibGljIHZvaWQgdGVzdCgpIHsKKyAgICAgICAgbSg8Y2FyZXQ+IjEiKTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3N0cmluZ1RvQ2hhcmFjdGVyTGl0ZXJhbC9iZWZvcmUzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3N0cmluZ1RvQ2hhcmFjdGVyTGl0ZXJhbC9iZWZvcmUzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTRiMTgzNwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvc3RyaW5nVG9DaGFyYWN0ZXJMaXRlcmFsL2JlZm9yZTMuamF2YQpAQCAtMCwwICsxLDE0IEBACisvLyAiQ2hhbmdlICIxIiB0byAnMScgKHRvIGNoYXIgbGl0ZXJhbCkiICJmYWxzZSIKK2NsYXNzIFNpbXBsZSB7CisgICAgcHVibGljIHZvaWQgbShjaGFyIGNoKSB7CisKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBtKFN0cmluZyBzKSB7CisKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCB0ZXN0KCkgeworICAgICAgICBtKDxjYXJldD4iMSIpOworICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvc3RyaW5nVG9DaGFyYWN0ZXJMaXRlcmFsL2JlZm9yZTQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvc3RyaW5nVG9DaGFyYWN0ZXJMaXRlcmFsL2JlZm9yZTQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YTEzMzg5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9zdHJpbmdUb0NoYXJhY3RlckxpdGVyYWwvYmVmb3JlNC5qYXZhCkBAIC0wLDAgKzEsMTYgQEAKKy8vICJDaGFuZ2UgIjEiIHRvICcxJyAodG8gY2hhciBsaXRlcmFsKSIgInRydWUiCitjbGFzcyBTaW1wbGUgZXh0ZW5kcyBBbmNlc3RvciB7CisgICAgcHVibGljIHZvaWQgbShpbnQgaSkgeworCisgICAgfQorCisgICAgcHVibGljIHZvaWQgdGVzdCgpIHsKKyAgICAgICAgbSg8Y2FyZXQ+IjEiKTsKKyAgICB9Cit9CisKK2NsYXNzIEFuY2VzdG9yIHsKKyAgICBwdWJsaWMgdm9pZCBtKGNoYXIgY2gpIHsKKworICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvc3RyaW5nVG9DaGFyYWN0ZXJMaXRlcmFsL2JlZm9yZTUuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvc3RyaW5nVG9DaGFyYWN0ZXJMaXRlcmFsL2JlZm9yZTUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZjliZGY3Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9zdHJpbmdUb0NoYXJhY3RlckxpdGVyYWwvYmVmb3JlNS5qYXZhCkBAIC0wLDAgKzEsMTAgQEAKKy8vICJDaGFuZ2UgIjEiIHRvICcxJyAodG8gY2hhciBsaXRlcmFsKSIgInRydWUiCitjbGFzcyBTaW1wbGUgeworICAgIFNpbXBsZSgpIHt9CisgICAgU2ltcGxlKGludCBpKSB7fQorICAgIFNpbXBsZShjaGFyIGNoKSB7fQorCisgICAgcHVibGljIHN0YXRpYyB2b2lkIHRlc3QoKSB7CisgICAgICAgIGZpbmFsIFNpbXBsZSBpbnN0YW5jZSA9IG5ldyBTaW1wbGUoPGNhcmV0PiIxIik7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9zdHJpbmdUb0NoYXJhY3RlckxpdGVyYWwvYmVmb3JlNi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9zdHJpbmdUb0NoYXJhY3RlckxpdGVyYWwvYmVmb3JlNi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjczYjE0NjEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3N0cmluZ1RvQ2hhcmFjdGVyTGl0ZXJhbC9iZWZvcmU2LmphdmEKQEAgLTAsMCArMSwxMSBAQAorLy8gIkNoYW5nZSAiMSIgdG8gJzEnICh0byBjaGFyIGxpdGVyYWwpIiAiZmFsc2UiCitjbGFzcyBTaW1wbGUgeworICAgIFNpbXBsZSgpIHt9CisgICAgU2ltcGxlKGludCBpKSB7fQorICAgIFNpbXBsZShjaGFyIGNoKSB7fQorICAgIFNpbXBsZShTdHJpbmcgcykge30KKworICAgIHB1YmxpYyBzdGF0aWMgdm9pZCB0ZXN0KCkgeworICAgICAgICBmaW5hbCBTaW1wbGUgaW5zdGFuY2UgPSBuZXcgU2ltcGxlKDxjYXJldD4iMSIsICk7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9zdHJpbmdUb0NoYXJhY3RlckxpdGVyYWwvYmVmb3JlNy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9zdHJpbmdUb0NoYXJhY3RlckxpdGVyYWwvYmVmb3JlNy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY1NTIyZDQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3N0cmluZ1RvQ2hhcmFjdGVyTGl0ZXJhbC9iZWZvcmU3LmphdmEKQEAgLTAsMCArMSw1IEBACisvLyAiQ2hhbmdlICcxJyB0byAiMSIgKHRvIFN0cmluZyBsaXRlcmFsKSIgInRydWUiCitjbGFzcyBTaW1wbGUgeworICAgIFNpbXBsZSgpIHt0aGlzKDxjYXJldD4nMScpO30KKyAgICBTaW1wbGUoU3RyaW5nIHMpIHt9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3N0cmluZ1RvQ2hhcmFjdGVyTGl0ZXJhbC9iZWZvcmU4LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3N0cmluZ1RvQ2hhcmFjdGVyTGl0ZXJhbC9iZWZvcmU4LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzAwNDEyYQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvc3RyaW5nVG9DaGFyYWN0ZXJMaXRlcmFsL2JlZm9yZTguamF2YQpAQCAtMCwwICsxLDkgQEAKKy8vICJDaGFuZ2UgIjEiIHRvICcxJyAodG8gY2hhciBsaXRlcmFsKSIgInRydWUiCitjbGFzcyBTaW1wbGUgeworICAgIFNpbXBsZShpbnQgaSkge30KKyAgICBTaW1wbGUoY2hhciBjaCkge30KK30KKworY2xhc3MgRGVzY2VuZGFudCBleHRlbmRzIFNpbXBsZSB7CisgICAgRGVzY2VuZGFudCgpIHtzdXBlcig8Y2FyZXQ+IjEiKTt9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3N0cmluZ1RvQ2hhcmFjdGVyTGl0ZXJhbC9iZWZvcmU5LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3N0cmluZ1RvQ2hhcmFjdGVyTGl0ZXJhbC9iZWZvcmU5LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTQyYTNkYgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvc3RyaW5nVG9DaGFyYWN0ZXJMaXRlcmFsL2JlZm9yZTkuamF2YQpAQCAtMCwwICsxLDggQEAKKy8vICJDaGFuZ2UgIjEiIHRvICcxJyAodG8gY2hhciBsaXRlcmFsKSIgInRydWUiCitjbGFzcyBTaW1wbGUgeworICAgIHB1YmxpYyB2b2lkIG0xKGZpbmFsIGludCBpLCBmaW5hbCBjaGFyIGNoKSB7fQorCisgICAgcHVibGljIHZvaWQgdGVzdCgpIHsKKyAgICAgICAgbTEoImRvZXMgbm90IG1hdHRlciIsIDxjYXJldD4iMSIpOworICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvc3VwZXJNZXRob2RSZXR1cm4vYWZ0ZXIxLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3N1cGVyTWV0aG9kUmV0dXJuL2FmdGVyMS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIzNGIyOWUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3N1cGVyTWV0aG9kUmV0dXJuL2FmdGVyMS5qYXZhCkBAIC0wLDAgKzEsMTIgQEAKKy8vICJNYWtlICdmJyByZXR1cm4gJ3ZvaWQnIiAidHJ1ZSIKK2NsYXNzIGEgeworIHZvaWQgZigpIHsKKyAgIHJldHVybiA7CisgfQorfQorCitjbGFzcyBiIGV4dGVuZHMgYSB7CisgIDxjYXJldD52b2lkIGYoKSB7CisgICAgcmV0dXJuIDA7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3N1cGVyTWV0aG9kUmV0dXJuL2FmdGVyMi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9zdXBlck1ldGhvZFJldHVybi9hZnRlcjIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YmY2NDdhCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9zdXBlck1ldGhvZFJldHVybi9hZnRlcjIuamF2YQpAQCAtMCwwICsxLDEyIEBACisvLyAiTWFrZSAnYS5mJyByZXR1cm4gJ2ludCciICJ0cnVlIgorY2xhc3MgYSB7CisgaW50IGYoKSB7CisgICByZXR1cm4gOworIH0KK30KKworY2xhc3MgYiBleHRlbmRzIGEgeworICA8Y2FyZXQ+aW50IGYoKSB7CisgICAgcmV0dXJuIDA7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3N1cGVyTWV0aG9kUmV0dXJuL2JlZm9yZTEuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvc3VwZXJNZXRob2RSZXR1cm4vYmVmb3JlMS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkzMWVlZGIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3N1cGVyTWV0aG9kUmV0dXJuL2JlZm9yZTEuamF2YQpAQCAtMCwwICsxLDEyIEBACisvLyAiTWFrZSAnZicgcmV0dXJuICd2b2lkJyIgInRydWUiCitjbGFzcyBhIHsKKyB2b2lkIGYoKSB7CisgICByZXR1cm4gOworIH0KK30KKworY2xhc3MgYiBleHRlbmRzIGEgeworICA8Y2FyZXQ+aW50IGYoKSB7CisgICAgcmV0dXJuIDA7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3N1cGVyTWV0aG9kUmV0dXJuL2JlZm9yZTIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvc3VwZXJNZXRob2RSZXR1cm4vYmVmb3JlMi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEyZjY1M2YKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3N1cGVyTWV0aG9kUmV0dXJuL2JlZm9yZTIuamF2YQpAQCAtMCwwICsxLDEyIEBACisvLyAiTWFrZSAnYS5mJyByZXR1cm4gJ2ludCciICJ0cnVlIgorY2xhc3MgYSB7Cisgdm9pZCBmKCkgeworICAgcmV0dXJuIDsKKyB9Cit9CisKK2NsYXNzIGIgZXh0ZW5kcyBhIHsKKyAgPGNhcmV0PmludCBmKCkgeworICAgIHJldHVybiAwOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9zdXBlck1ldGhvZFJldHVybi9iZWZvcmUzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3N1cGVyTWV0aG9kUmV0dXJuL2JlZm9yZTMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYWQ0NjFhCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9zdXBlck1ldGhvZFJldHVybi9iZWZvcmUzLmphdmEKQEAgLTAsMCArMSwxMiBAQAorLy8gIk1ha2UgJ2EuZicgcmV0dXJuICdpbnQnIiAiZmFsc2UiCitjbGFzcyBhIHsKKyBwcml2YXRlIHZvaWQgZigpIHsKKyAgIHJldHVybiA7CisgfQorfQorCitjbGFzcyBiIGV4dGVuZHMgYSB7CisgIDxjYXJldD5pbnQgZigpIHsKKyAgICByZXR1cm4gMDsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvc3VwZXJNZXRob2RSZXR1cm4vYmVmb3JlNC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9zdXBlck1ldGhvZFJldHVybi9iZWZvcmU0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTVkNWY2ZAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvc3VwZXJNZXRob2RSZXR1cm4vYmVmb3JlNC5qYXZhCkBAIC0wLDAgKzEsMTIgQEAKKy8vICJNYWtlICdmJyByZXR1cm4gJ3ZvaWQnIiAiZmFsc2UiCitjbGFzcyBhIHsKKyBwcml2YXRlIHZvaWQgZigpIHsKKyAgIHJldHVybiA7CisgfQorfQorCitjbGFzcyBiIGV4dGVuZHMgYSB7CisgIDxjYXJldD5pbnQgZigpIHsKKyAgICByZXR1cm4gMDsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvc3VwZXJNZXRob2RSZXR1cm4vYmVmb3JlNS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9zdXBlck1ldGhvZFJldHVybi9iZWZvcmU1LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzNlNjA2NAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvc3VwZXJNZXRob2RSZXR1cm4vYmVmb3JlNS5qYXZhCkBAIC0wLDAgKzEsMTIgQEAKKy8vICJNYWtlICdmJyByZXR1cm4gJ3ZvaWQnIiAiZmFsc2UiCitjbGFzcyBhIHsKKyB2b2lkIGYoaW50IGkpIHsKKyAgIHJldHVybiA7CisgfQorfQorCitjbGFzcyBiIGV4dGVuZHMgYSB7CisgIDxjYXJldD5pbnQgZigpIHsKKyAgICByZXR1cm4gMDsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvc3VwcHJlc3MxNUluc3BlY3Rpb25zL2FmdGVyMS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9zdXBwcmVzczE1SW5zcGVjdGlvbnMvYWZ0ZXIxLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTljMjEwOQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvc3VwcHJlc3MxNUluc3BlY3Rpb25zL2FmdGVyMS5qYXZhCkBAIC0wLDAgKzEsNiBAQAorLy8gIlN1cHByZXNzIGFsbCBpbnNwZWN0aW9ucyBmb3IgY2xhc3MiICJ0cnVlIgorQFN1cHByZXNzV2FybmluZ3MoIkFMTCIpCitwdWJsaWMgY2xhc3MgVGVzdCB7CisgIHB1YmxpYyB2b2lkIHJ1bihpbnQgPGNhcmV0PmkpIHsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvc3VwcHJlc3MxNUluc3BlY3Rpb25zL2FmdGVyMi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9zdXBwcmVzczE1SW5zcGVjdGlvbnMvYWZ0ZXIyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjJhMTg1MAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvc3VwcHJlc3MxNUluc3BlY3Rpb25zL2FmdGVyMi5qYXZhCkBAIC0wLDAgKzEsNiBAQAorLy8gIlN1cHByZXNzIGZvciBzdGF0ZW1lbnQiICJ0cnVlIgorcHVibGljIGNsYXNzIFRlc3QgeworICBwdWJsaWMgdm9pZCBydW4oKSB7CisgICAgQFN1cHByZXNzV2FybmluZ3MoIlVudXNlZERlY2xhcmF0aW9uIikgaW50IDxjYXJldD5pOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9zdXBwcmVzczE1SW5zcGVjdGlvbnMvYWZ0ZXIzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3N1cHByZXNzMTVJbnNwZWN0aW9ucy9hZnRlcjMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMjdkNTdkCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9zdXBwcmVzczE1SW5zcGVjdGlvbnMvYWZ0ZXIzLmphdmEKQEAgLTAsMCArMSw3IEBACisvLyAiU3VwcHJlc3MgZm9yIHN0YXRlbWVudCIgInRydWUiCitwdWJsaWMgY2xhc3MgVGVzdCB7CisgIHB1YmxpYyB2b2lkIHJ1bigpIHsKKyAgICAgIC8vbm9pbnNwZWN0aW9uIGlkLFVudXNlZERlY2xhcmF0aW9uCisgICAgaW50IDxjYXJldD5pOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9zdXBwcmVzczE1SW5zcGVjdGlvbnMvYWZ0ZXJTdXBwcmVzc1VudXNlZFBhcmFtZXRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9zdXBwcmVzczE1SW5zcGVjdGlvbnMvYWZ0ZXJTdXBwcmVzc1VudXNlZFBhcmFtZXRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI3ZWM0OWQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3N1cHByZXNzMTVJbnNwZWN0aW9ucy9hZnRlclN1cHByZXNzVW51c2VkUGFyYW1ldGVyLmphdmEKQEAgLTAsMCArMSw5IEBACisvLyAiU3VwcHJlc3MgZm9yIHBhcmFtZXRlciIgInRydWUiCitwdWJsaWMgY2xhc3MgVGVzdCB7CisgIHByaXZhdGUgdm9pZCBydW4oQFN1cHByZXNzV2FybmluZ3MoIlVudXNlZFBhcmFtZXRlcnMiKSBTdHJpbmcgczxjYXJldD5zcykgeworICB9CisKKyAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworICAgIG5ldyBUZXN0KCkucnVuKG51bGwpOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9zdXBwcmVzczE1SW5zcGVjdGlvbnMvYmVmb3JlMS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9zdXBwcmVzczE1SW5zcGVjdGlvbnMvYmVmb3JlMS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVhNWEyNDQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3N1cHByZXNzMTVJbnNwZWN0aW9ucy9iZWZvcmUxLmphdmEKQEAgLTAsMCArMSw2IEBACisvLyAiU3VwcHJlc3MgYWxsIGluc3BlY3Rpb25zIGZvciBjbGFzcyIgInRydWUiCitAamF2YS5sYW5nLlN1cHByZXNzV2FybmluZ3MoeyJ0dCJ9KQorcHVibGljIGNsYXNzIFRlc3QgeworICBwdWJsaWMgdm9pZCBydW4oaW50IDxjYXJldD5pKSB7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3N1cHByZXNzMTVJbnNwZWN0aW9ucy9iZWZvcmUyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3N1cHByZXNzMTVJbnNwZWN0aW9ucy9iZWZvcmUyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTA5Mzc4NQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvc3VwcHJlc3MxNUluc3BlY3Rpb25zL2JlZm9yZTIuamF2YQpAQCAtMCwwICsxLDYgQEAKKy8vICJTdXBwcmVzcyBmb3Igc3RhdGVtZW50IiAidHJ1ZSIKK3B1YmxpYyBjbGFzcyBUZXN0IHsKKyAgcHVibGljIHZvaWQgcnVuKCkgeworICAgIGludCA8Y2FyZXQ+aTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvc3VwcHJlc3MxNUluc3BlY3Rpb25zL2JlZm9yZTMuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvc3VwcHJlc3MxNUluc3BlY3Rpb25zL2JlZm9yZTMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NzcyMDBkCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9zdXBwcmVzczE1SW5zcGVjdGlvbnMvYmVmb3JlMy5qYXZhCkBAIC0wLDAgKzEsNyBAQAorLy8gIlN1cHByZXNzIGZvciBzdGF0ZW1lbnQiICJ0cnVlIgorcHVibGljIGNsYXNzIFRlc3QgeworICBwdWJsaWMgdm9pZCBydW4oKSB7CisgICAgLy9ub2luc3BlY3Rpb24gaWQKKyAgICBpbnQgPGNhcmV0Pmk7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3N1cHByZXNzMTVJbnNwZWN0aW9ucy9iZWZvcmVTdXBwcmVzc1VudXNlZFBhcmFtZXRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9zdXBwcmVzczE1SW5zcGVjdGlvbnMvYmVmb3JlU3VwcHJlc3NVbnVzZWRQYXJhbWV0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMTczOWZmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9zdXBwcmVzczE1SW5zcGVjdGlvbnMvYmVmb3JlU3VwcHJlc3NVbnVzZWRQYXJhbWV0ZXIuamF2YQpAQCAtMCwwICsxLDkgQEAKKy8vICJTdXBwcmVzcyBmb3IgcGFyYW1ldGVyIiAidHJ1ZSIKK3B1YmxpYyBjbGFzcyBUZXN0IHsKKyAgcHJpdmF0ZSB2b2lkIHJ1bihTdHJpbmcgczxjYXJldD5zcykgeworICB9CisKKyAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworICAgIG5ldyBUZXN0KCkucnVuKG51bGwpOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9zdXBwcmVzc0xvY2FsSW5zcGVjdGlvbi9hZnRlcjEuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvc3VwcHJlc3NMb2NhbEluc3BlY3Rpb24vYWZ0ZXIxLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTg1ZTU5MwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvc3VwcHJlc3NMb2NhbEluc3BlY3Rpb24vYWZ0ZXIxLmphdmEKQEAgLTAsMCArMSw2IEBACisvLyAiU3VwcHJlc3MgZm9yIG1ldGhvZCIgInRydWUiCitjbGFzcyBhIHsKKy8qKiBAbm9pbnNwZWN0aW9uIExvY2FsQ2FuQmVGaW5hbCovCitwdWJsaWMgdm9pZCBydW4oaW50IDxjYXJldD5pKSB7Cit9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9zdXBwcmVzc0xvY2FsSW5zcGVjdGlvbi9hZnRlcjEwLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3N1cHByZXNzTG9jYWxJbnNwZWN0aW9uL2FmdGVyMTAuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMGRlYjhjCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9zdXBwcmVzc0xvY2FsSW5zcGVjdGlvbi9hZnRlcjEwLmphdmEKQEAgLTAsMCArMSwxNSBAQAorLy8gIlN1cHByZXNzIGZvciBtZXRob2QiICJ0cnVlIgoraW1wb3J0IGphdmEuYXd0LmV2ZW50LkFjdGlvbkxpc3RlbmVyOworaW1wb3J0IGphdmEuYXd0LmV2ZW50LkFjdGlvbkV2ZW50OworCitjbGFzcyBUZXN0IHsKKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisgICAgICAgIEFjdGlvbkxpc3RlbmVyIGxpc3RlbmVyID0gbmV3IEFjdGlvbkxpc3RlbmVyKCkgeworICAgICAgICAgICAgLyoqIEBub2luc3BlY3Rpb24gTG9jYWxDYW5CZUZpbmFsKi8KKyAgICAgICAgICAgIHB1YmxpYyB2b2lkIGFjdGlvblBlcmZvcm1lZChBY3Rpb25FdmVudCBlKSB7CisgICAgICAgICAgICAgICAgaW50IGkgPSAwOworICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9zdXBwcmVzc0xvY2FsSW5zcGVjdGlvbi9hZnRlcjExLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3N1cHByZXNzTG9jYWxJbnNwZWN0aW9uL2FmdGVyMTEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43Y2Y5MTY1Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9zdXBwcmVzc0xvY2FsSW5zcGVjdGlvbi9hZnRlcjExLmphdmEKQEAgLTAsMCArMSwxNSBAQAorLy8gIlN1cHByZXNzIGZvciBjbGFzcyIgInRydWUiCitpbXBvcnQgamF2YS5hd3QuZXZlbnQuQWN0aW9uTGlzdGVuZXI7CitpbXBvcnQgamF2YS5hd3QuZXZlbnQuQWN0aW9uRXZlbnQ7CisKKy8qKiBAbm9pbnNwZWN0aW9uIExvY2FsQ2FuQmVGaW5hbCovCitjbGFzcyBUZXN0IHsKKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisgICAgICAgIEFjdGlvbkxpc3RlbmVyIGxpc3RlbmVyID0gbmV3IEFjdGlvbkxpc3RlbmVyKCkgeworICAgICAgICAgICAgcHVibGljIHZvaWQgYWN0aW9uUGVyZm9ybWVkKEFjdGlvbkV2ZW50IGUpIHsKKyAgICAgICAgICAgICAgICBpbnQgaSA9IDA7CisgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKGkpOworICAgICAgICAgICAgfQorICAgICAgICB9OworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3N1cHByZXNzTG9jYWxJbnNwZWN0aW9uL2FmdGVyMi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9zdXBwcmVzc0xvY2FsSW5zcGVjdGlvbi9hZnRlcjIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lY2JlZjllCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9zdXBwcmVzc0xvY2FsSW5zcGVjdGlvbi9hZnRlcjIuamF2YQpAQCAtMCwwICsxLDggQEAKKy8vICJTdXBwcmVzcyBmb3Igc3RhdGVtZW50IiAidHJ1ZSIKK2NsYXNzIGEgeworcHVibGljIHZvaWQgcnVuKCkgeworLy9ub2luc3BlY3Rpb24gTG9jYWxDYW5CZUZpbmFsCisgICAgaW50IDxjYXJldD5pID0gMDsKK1N5c3RlbS5vdXQucHJpbnRsbihpKTsKK30KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3N1cHByZXNzTG9jYWxJbnNwZWN0aW9uL2FmdGVyOC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9zdXBwcmVzc0xvY2FsSW5zcGVjdGlvbi9hZnRlcjguamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YTRhNmMxCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9zdXBwcmVzc0xvY2FsSW5zcGVjdGlvbi9hZnRlcjguamF2YQpAQCAtMCwwICsxLDE1IEBACisvLyAiU3VwcHJlc3MgZm9yIGNsYXNzIiAidHJ1ZSIKK2ltcG9ydCBqYXZhLmF3dC5ldmVudC5BY3Rpb25MaXN0ZW5lcjsKK2ltcG9ydCBqYXZhLmF3dC5ldmVudC5BY3Rpb25FdmVudDsKKworLyoqIEBub2luc3BlY3Rpb24gTG9jYWxDYW5CZUZpbmFsKi8KK2NsYXNzIFRlc3QgeworICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKyAgICAgICAgQWN0aW9uTGlzdGVuZXIgbGlzdGVuZXIgPSBuZXcgQWN0aW9uTGlzdGVuZXIoKSB7CisgICAgICAgICAgICBwdWJsaWMgdm9pZCBhY3Rpb25QZXJmb3JtZWQoQWN0aW9uRXZlbnQgZSkgeworICAgICAgICAgICAgICAgIGludCA8Y2FyZXQ+aSA9IDA7CisgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKGkpOworICAgICAgICAgICAgfQorICAgICAgICB9OworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3N1cHByZXNzTG9jYWxJbnNwZWN0aW9uL2FmdGVyOS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9zdXBwcmVzc0xvY2FsSW5zcGVjdGlvbi9hZnRlcjkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MWI1ZGVhCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9zdXBwcmVzc0xvY2FsSW5zcGVjdGlvbi9hZnRlcjkuamF2YQpAQCAtMCwwICsxLDE1IEBACisvLyAiU3VwcHJlc3MgZm9yIGNsYXNzIiAidHJ1ZSIKK2ltcG9ydCBqYXZhLmF3dC5ldmVudC5BY3Rpb25MaXN0ZW5lcjsKK2ltcG9ydCBqYXZhLmF3dC5ldmVudC5BY3Rpb25FdmVudDsKK2NsYXNzIFRlc3QgeworICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKworICAgICAgICAvKiogQG5vaW5zcGVjdGlvbiBMb2NhbENhbkJlRmluYWwqLworICAgICAgICBjbGFzcyBUIHsKKyAgICAgICAgICB2b2lkIGZvbygpIHsKKyAgICAgICAgICAgIGludCBpID0gMDsKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihpKTsKKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9zdXBwcmVzc0xvY2FsSW5zcGVjdGlvbi9iZWZvcmUxLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3N1cHByZXNzTG9jYWxJbnNwZWN0aW9uL2JlZm9yZTEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YTQ4ZjY4Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9zdXBwcmVzc0xvY2FsSW5zcGVjdGlvbi9iZWZvcmUxLmphdmEKQEAgLTAsMCArMSw1IEBACisvLyAiU3VwcHJlc3MgZm9yIG1ldGhvZCIgInRydWUiCitjbGFzcyBhIHsKK3B1YmxpYyB2b2lkIHJ1bihpbnQgPGNhcmV0PmkpIHsKK30KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3N1cHByZXNzTG9jYWxJbnNwZWN0aW9uL2JlZm9yZTEwLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3N1cHByZXNzTG9jYWxJbnNwZWN0aW9uL2JlZm9yZTEwLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzQ5MjdlNgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvc3VwcHJlc3NMb2NhbEluc3BlY3Rpb24vYmVmb3JlMTAuamF2YQpAQCAtMCwwICsxLDE0IEBACisvLyAiU3VwcHJlc3MgZm9yIG1ldGhvZCIgInRydWUiCitpbXBvcnQgamF2YS5hd3QuZXZlbnQuQWN0aW9uTGlzdGVuZXI7CitpbXBvcnQgamF2YS5hd3QuZXZlbnQuQWN0aW9uRXZlbnQ7CisKK2NsYXNzIFRlc3QgeworICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKyAgICAgICAgQWN0aW9uTGlzdGVuZXIgbGlzdGVuZXIgPSBuZXcgQWN0aW9uTGlzdGVuZXIoKSB7CisgICAgICAgICAgICBwdWJsaWMgdm9pZCBhY3Rpb25QZXJmb3JtZWQoQWN0aW9uRXZlbnQgZSkgeworICAgICAgICAgICAgICAgIGludCA8Y2FyZXQ+aSA9IDA7CisgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKGkpOworICAgICAgICAgICAgfQorICAgICAgICB9OworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3N1cHByZXNzTG9jYWxJbnNwZWN0aW9uL2JlZm9yZTExLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3N1cHByZXNzTG9jYWxJbnNwZWN0aW9uL2JlZm9yZTExLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTIwYzlkOAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvc3VwcHJlc3NMb2NhbEluc3BlY3Rpb24vYmVmb3JlMTEuamF2YQpAQCAtMCwwICsxLDE0IEBACisvLyAiU3VwcHJlc3MgZm9yIGNsYXNzIiAidHJ1ZSIKK2ltcG9ydCBqYXZhLmF3dC5ldmVudC5BY3Rpb25MaXN0ZW5lcjsKK2ltcG9ydCBqYXZhLmF3dC5ldmVudC5BY3Rpb25FdmVudDsKKworY2xhc3MgVGVzdCB7CisgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworICAgICAgICBBY3Rpb25MaXN0ZW5lciBsaXN0ZW5lciA9IG5ldyBBY3Rpb25MaXN0ZW5lcigpIHsKKyAgICAgICAgICAgIHB1YmxpYyB2b2lkIGFjdGlvblBlcmZvcm1lZChBY3Rpb25FdmVudCBlKSB7CisgICAgICAgICAgICAgICAgaW50IDxjYXJldD5pID0gMDsKKyAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oaSk7CisgICAgICAgICAgICB9CisgICAgICAgIH07CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvc3VwcHJlc3NMb2NhbEluc3BlY3Rpb24vYmVmb3JlMTIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvc3VwcHJlc3NMb2NhbEluc3BlY3Rpb24vYmVmb3JlMTIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45Y2EzNDYyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9zdXBwcmVzc0xvY2FsSW5zcGVjdGlvbi9iZWZvcmUxMi5qYXZhCkBAIC0wLDAgKzEsMTYgQEAKKy8vICJTdXBwcmVzcyBmb3IgY2xhc3MiICJmYWxzZSIKKworaW1wb3J0IGphdmEuYXd0LmV2ZW50LkFjdGlvbkV2ZW50OworaW1wb3J0IGphdmEuYXd0LmV2ZW50LkFjdGlvbkxpc3RlbmVyOworCitjbGFzcyBUZXN0IHsKKyAgICBAamF2YXguYW5ub3RhdGlvbi5HZW5lcmF0ZWQodmFsdWUgPSAidW5rbm93biIpCisgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworICAgICAgICBBY3Rpb25MaXN0ZW5lciBsaXN0ZW5lciA9IG5ldyBBY3Rpb25MaXN0ZW5lcigpIHsKKyAgICAgICAgICAgIHB1YmxpYyB2b2lkIGFjdGlvblBlcmZvcm1lZChBY3Rpb25FdmVudCBlKSB7CisgICAgICAgICAgICAgICAgaW50IDxjYXJldD5pID0gMDsKKyAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oaSk7CisgICAgICAgICAgICB9CisgICAgICAgIH07CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvc3VwcHJlc3NMb2NhbEluc3BlY3Rpb24vYmVmb3JlMi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9zdXBwcmVzc0xvY2FsSW5zcGVjdGlvbi9iZWZvcmUyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjI2NmRiZQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvc3VwcHJlc3NMb2NhbEluc3BlY3Rpb24vYmVmb3JlMi5qYXZhCkBAIC0wLDAgKzEsNyBAQAorLy8gIlN1cHByZXNzIGZvciBzdGF0ZW1lbnQiICJ0cnVlIgorY2xhc3MgYSB7CitwdWJsaWMgdm9pZCBydW4oKSB7CitpbnQgPGNhcmV0PmkgPSAwOworU3lzdGVtLm91dC5wcmludGxuKGkpOworfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvc3VwcHJlc3NMb2NhbEluc3BlY3Rpb24vYmVmb3JlMy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9zdXBwcmVzc0xvY2FsSW5zcGVjdGlvbi9iZWZvcmUzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmY3NWI5MAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvc3VwcHJlc3NMb2NhbEluc3BlY3Rpb24vYmVmb3JlMy5qYXZhCkBAIC0wLDAgKzEsOCBAQAorLy8gIlN1cHByZXNzIGZvciBzdGF0ZW1lbnQiICJmYWxzZSIKK2NsYXNzIGEgeworcHVibGljIHZvaWQgcnVuKCkgeworICAgICAgICAvLyAgICBub2luc3BlY3Rpb24gICAgIExvY2FsQ2FuQmVGaW5hbAorICAgIGludCA8Y2FyZXQ+aSA9IDA7CisgICAgU3lzdGVtLm91dC5wcmludGxuKGkpOworfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvc3VwcHJlc3NMb2NhbEluc3BlY3Rpb24vYmVmb3JlNC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9zdXBwcmVzc0xvY2FsSW5zcGVjdGlvbi9iZWZvcmU0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWM4N2VkOQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvc3VwcHJlc3NMb2NhbEluc3BlY3Rpb24vYmVmb3JlNC5qYXZhCkBAIC0wLDAgKzEsOCBAQAorLy8gIlN1cHByZXNzIGZvciBtZXRob2QiICJmYWxzZSIKKy8qKiBAbm9pbnNwZWN0aW9uIExvY2FsQ2FuQmVGaW5hbCovCitjbGFzcyBhIHsKK3B1YmxpYyB2b2lkIHJ1bigpIHsKK2ludCA8Y2FyZXQ+aSA9IDA7CitTeXN0ZW0ub3V0LnByaW50bG4oaSk7Cit9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9zdXBwcmVzc0xvY2FsSW5zcGVjdGlvbi9iZWZvcmU2LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3N1cHByZXNzTG9jYWxJbnNwZWN0aW9uL2JlZm9yZTYuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNmZkNjFhCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9zdXBwcmVzc0xvY2FsSW5zcGVjdGlvbi9iZWZvcmU2LmphdmEKQEAgLTAsMCArMSw1IEBACisvLyAiU3VwcHJlc3MgZm9yIGZpZWxkIiAiZmFsc2UiCisvKiogQG5vaW5zcGVjdGlvbiBBTEwqLworY2xhc3MgYSB7Cisgc3RhdGljIHByaXZhdGUgIFN0cmluZyBtbSA9ICIwMCI7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9zdXBwcmVzc0xvY2FsSW5zcGVjdGlvbi9iZWZvcmU3LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3N1cHByZXNzTG9jYWxJbnNwZWN0aW9uL2JlZm9yZTcuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZjA1NDMxCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9zdXBwcmVzc0xvY2FsSW5zcGVjdGlvbi9iZWZvcmU3LmphdmEKQEAgLTAsMCArMSw3IEBACisvLyAiU3VwcHJlc3MgZm9yIG1ldGhvZCIgImZhbHNlIgorLyoqIEBub2luc3BlY3Rpb24gQUxMKi8KK2NsYXNzIGEgeworcHVibGljIHZvaWQgcnVuKCkgeworaW50IDxjYXJldD5pID0gMDsKK30KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3N1cHByZXNzTG9jYWxJbnNwZWN0aW9uL2JlZm9yZTguamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvc3VwcHJlc3NMb2NhbEluc3BlY3Rpb24vYmVmb3JlOC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkyMGM5ZDgKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3N1cHByZXNzTG9jYWxJbnNwZWN0aW9uL2JlZm9yZTguamF2YQpAQCAtMCwwICsxLDE0IEBACisvLyAiU3VwcHJlc3MgZm9yIGNsYXNzIiAidHJ1ZSIKK2ltcG9ydCBqYXZhLmF3dC5ldmVudC5BY3Rpb25MaXN0ZW5lcjsKK2ltcG9ydCBqYXZhLmF3dC5ldmVudC5BY3Rpb25FdmVudDsKKworY2xhc3MgVGVzdCB7CisgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworICAgICAgICBBY3Rpb25MaXN0ZW5lciBsaXN0ZW5lciA9IG5ldyBBY3Rpb25MaXN0ZW5lcigpIHsKKyAgICAgICAgICAgIHB1YmxpYyB2b2lkIGFjdGlvblBlcmZvcm1lZChBY3Rpb25FdmVudCBlKSB7CisgICAgICAgICAgICAgICAgaW50IDxjYXJldD5pID0gMDsKKyAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oaSk7CisgICAgICAgICAgICB9CisgICAgICAgIH07CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvc3VwcHJlc3NMb2NhbEluc3BlY3Rpb24vYmVmb3JlOS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9zdXBwcmVzc0xvY2FsSW5zcGVjdGlvbi9iZWZvcmU5LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWZkYmFiMAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvc3VwcHJlc3NMb2NhbEluc3BlY3Rpb24vYmVmb3JlOS5qYXZhCkBAIC0wLDAgKzEsMTQgQEAKKy8vICJTdXBwcmVzcyBmb3IgY2xhc3MiICJ0cnVlIgoraW1wb3J0IGphdmEuYXd0LmV2ZW50LkFjdGlvbkxpc3RlbmVyOworaW1wb3J0IGphdmEuYXd0LmV2ZW50LkFjdGlvbkV2ZW50OworY2xhc3MgVGVzdCB7CisgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworCisgICAgICAgIGNsYXNzIFQgeworICAgICAgICAgIHZvaWQgZm9vKCkgeworICAgICAgICAgICAgaW50IDxjYXJldD5pID0gMDsKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihpKTsKKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9zdXBwcmVzc05vbkluc3BlY3Rpb25zL2FmdGVyMS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9zdXBwcmVzc05vbkluc3BlY3Rpb25zL2FmdGVyMS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdiODNhOGMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3N1cHByZXNzTm9uSW5zcGVjdGlvbnMvYWZ0ZXIxLmphdmEKQEAgLTAsMCArMSw3IEBACisvLyAiU3VwcHJlc3MgZm9yIHN0YXRlbWVudCIgInRydWUiCitjbGFzcyBhIHsKK3B1YmxpYyB2b2lkIHJ1bigpIHsKKy8vbm9pbnNwZWN0aW9uIFVudXNlZERlY2xhcmF0aW9uCisgICAgaW50IDxjYXJldD5pID0gMDsKK30KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3N1cHByZXNzTm9uSW5zcGVjdGlvbnMvYWZ0ZXIyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3N1cHByZXNzTm9uSW5zcGVjdGlvbnMvYWZ0ZXIyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzBhNDFmYQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvc3VwcHJlc3NOb25JbnNwZWN0aW9ucy9hZnRlcjIuamF2YQpAQCAtMCwwICsxLDYgQEAKKy8vICJTdXBwcmVzcyBmb3IgbWV0aG9kIiAidHJ1ZSIKK2NsYXNzIGEgeworLyoqIEBub2luc3BlY3Rpb24gVW51c2VkRGVjbGFyYXRpb24qLworcHJpdmF0ZSB2b2lkIDxjYXJldD5ydW4oKSB7Cit9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9zdXBwcmVzc05vbkluc3BlY3Rpb25zL2FmdGVyMy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9zdXBwcmVzc05vbkluc3BlY3Rpb25zL2FmdGVyMy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI5MWJhN2MKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3N1cHByZXNzTm9uSW5zcGVjdGlvbnMvYWZ0ZXIzLmphdmEKQEAgLTAsMCArMSw3IEBACisvLyAiU3VwcHJlc3MgZm9yIG1ldGhvZCIgInRydWUiCitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKK2NsYXNzIGEgeworLyoqIEBub2luc3BlY3Rpb24gUmVkdW5kYW50VGhyb3dzRGVjbGFyYXRpb24qLworcHJpdmF0ZSB2b2lkIHJ1bigpIHRocm93cyA8Y2FyZXQ+SU9FeGNlcHRpb257Cit9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9zdXBwcmVzc05vbkluc3BlY3Rpb25zL2FmdGVyNC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9zdXBwcmVzc05vbkluc3BlY3Rpb25zL2FmdGVyNC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkxZTI3NTYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3N1cHByZXNzTm9uSW5zcGVjdGlvbnMvYWZ0ZXI0LmphdmEKQEAgLTAsMCArMSwxMSBAQAorLy8gIlN1cHByZXNzIGZvciBzdGF0ZW1lbnQiICJ0cnVlIgorY2xhc3MgYSB7CisvKioKKyogQGRlcHJlY2F0ZWQKKyovCitpbnQgYjsKK3ByaXZhdGUgdm9pZCBhYSgpeworICAgIC8vbm9pbnNwZWN0aW9uIGRlcHJlY2F0aW9uCisgICAgYisrOworfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvc3VwcHJlc3NOb25JbnNwZWN0aW9ucy9hZnRlcjUuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvc3VwcHJlc3NOb25JbnNwZWN0aW9ucy9hZnRlcjUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNDUwMTc0Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9zdXBwcmVzc05vbkluc3BlY3Rpb25zL2FmdGVyNS5qYXZhCkBAIC0wLDAgKzEsMTMgQEAKKy8vICJTdXBwcmVzcyBmb3Igc3RhdGVtZW50IiAidHJ1ZSIKK2NsYXNzIGEgeworLyoqCisgKiBAZGVwcmVjYXRlZAorICovCitwdWJsaWMgdm9pZCBhYSgpeworfQorCitwcml2YXRlIHZvaWQgYWFhKCl7CisgICAgLy9ub2luc3BlY3Rpb24gZGVwcmVjYXRpb24KKyAgICA8Y2FyZXQ+YWEoKTsKK30KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvc3VwcHJlc3NOb25JbnNwZWN0aW9ucy9hZnRlcjYuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvc3VwcHJlc3NOb25JbnNwZWN0aW9ucy9hZnRlcjYuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNmFiNzFlCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9zdXBwcmVzc05vbkluc3BlY3Rpb25zL2FmdGVyNi5qYXZhCkBAIC0wLDAgKzEsOCBAQAorLy8gIlN1cHByZXNzIGZvciBzdGF0ZW1lbnQiICJ0cnVlIgorY2xhc3MgYSB7CisgIHB1YmxpYyB2b2lkIGFhKCl7CisgICAgIGludCBhID0gMDsKKyAgICAgIC8vbm9pbnNwZWN0aW9uIFNpbGx5QXNzaWdubWVudAorICAgICAgPGNhcmV0PmEgPSBhOworICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3N1cHByZXNzTm9uSW5zcGVjdGlvbnMvYWZ0ZXI3LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3N1cHByZXNzTm9uSW5zcGVjdGlvbnMvYWZ0ZXI3LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzlmYTEwMwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvc3VwcHJlc3NOb25JbnNwZWN0aW9ucy9hZnRlcjcuamF2YQpAQCAtMCwwICsxLDkgQEAKKy8vICJTdXBwcmVzcyBmb3Igc3RhdGVtZW50IiAidHJ1ZSIKK2NsYXNzIGEgeworc3RhdGljIHZvaWQgc2V0QSgpeworfQordm9pZCBiKCl7CisgICAgLy9ub2luc3BlY3Rpb24gQWNjZXNzU3RhdGljVmlhSW5zdGFuY2UKKyAgICA8Y2FyZXQ+bmV3IGEoKS5zZXRBKCk7Cit9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3N1cHByZXNzTm9uSW5zcGVjdGlvbnMvYWZ0ZXI5LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3N1cHByZXNzTm9uSW5zcGVjdGlvbnMvYWZ0ZXI5LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDc5NWU2MgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvc3VwcHJlc3NOb25JbnNwZWN0aW9ucy9hZnRlcjkuamF2YQpAQCAtMCwwICsxLDE5IEBACisvLyAiU3VwcHJlc3MgZm9yIGNsYXNzIiAidHJ1ZSIKK3B1YmxpYyBjbGFzcyBUZXN0IHsKKworICBwdWJsaWMgdm9pZCB0ZXN0KCkgeworICAgIElubmVyIGlubmVyID0gbmV3IElubmVyKCk7CisgIH0KKworICAvKiogQG5vaW5zcGVjdGlvbiBkZXByZWNhdGlvbiovCisgIHByaXZhdGUgc3RhdGljIGNsYXNzIElubmVyIHsKKworICAgIC8qKgorICAgICAqIEBkZXByZWNhdGVkCisgICAgICovCisgICAgaW50IGk7CisgICAgcHVibGljIHZvaWQgdW51c2VkKCkgeworICAgICAgaSsrOworICAgIH0KKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9zdXBwcmVzc05vbkluc3BlY3Rpb25zL2JlZm9yZTEuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvc3VwcHJlc3NOb25JbnNwZWN0aW9ucy9iZWZvcmUxLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWQ3ODY4ZAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvc3VwcHJlc3NOb25JbnNwZWN0aW9ucy9iZWZvcmUxLmphdmEKQEAgLTAsMCArMSw2IEBACisvLyAiU3VwcHJlc3MgZm9yIHN0YXRlbWVudCIgInRydWUiCitjbGFzcyBhIHsKK3B1YmxpYyB2b2lkIHJ1bigpIHsKK2ludCA8Y2FyZXQ+aSA9IDA7Cit9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9zdXBwcmVzc05vbkluc3BlY3Rpb25zL2JlZm9yZTIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvc3VwcHJlc3NOb25JbnNwZWN0aW9ucy9iZWZvcmUyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWRjYjkwZQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvc3VwcHJlc3NOb25JbnNwZWN0aW9ucy9iZWZvcmUyLmphdmEKQEAgLTAsMCArMSw1IEBACisvLyAiU3VwcHJlc3MgZm9yIG1ldGhvZCIgInRydWUiCitjbGFzcyBhIHsKK3ByaXZhdGUgdm9pZCA8Y2FyZXQ+cnVuKCkgeworfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvc3VwcHJlc3NOb25JbnNwZWN0aW9ucy9iZWZvcmUzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3N1cHByZXNzTm9uSW5zcGVjdGlvbnMvYmVmb3JlMy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNkZGQ1MTAKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3N1cHByZXNzTm9uSW5zcGVjdGlvbnMvYmVmb3JlMy5qYXZhCkBAIC0wLDAgKzEsNiBAQAorLy8gIlN1cHByZXNzIGZvciBtZXRob2QiICJ0cnVlIgoraW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CitjbGFzcyBhIHsKK3ByaXZhdGUgdm9pZCBydW4oKSB0aHJvd3MgPGNhcmV0PklPRXhjZXB0aW9ueworfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvc3VwcHJlc3NOb25JbnNwZWN0aW9ucy9iZWZvcmU0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3N1cHByZXNzTm9uSW5zcGVjdGlvbnMvYmVmb3JlNC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIyM2YyMTgKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3N1cHByZXNzTm9uSW5zcGVjdGlvbnMvYmVmb3JlNC5qYXZhCkBAIC0wLDAgKzEsMTAgQEAKKy8vICJTdXBwcmVzcyBmb3Igc3RhdGVtZW50IiAidHJ1ZSIKK2NsYXNzIGEgeworLyoqCisqIEBkZXByZWNhdGVkCisqLworaW50IGI7Citwcml2YXRlIHZvaWQgYWEoKXsKKyA8Y2FyZXQ+YisrOworfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvc3VwcHJlc3NOb25JbnNwZWN0aW9ucy9iZWZvcmU1LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3N1cHByZXNzTm9uSW5zcGVjdGlvbnMvYmVmb3JlNS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg2ZGE1ZTMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3N1cHByZXNzTm9uSW5zcGVjdGlvbnMvYmVmb3JlNS5qYXZhCkBAIC0wLDAgKzEsMTIgQEAKKy8vICJTdXBwcmVzcyBmb3Igc3RhdGVtZW50IiAidHJ1ZSIKK2NsYXNzIGEgeworLyoqCisgKiBAZGVwcmVjYXRlZAorICovCitwdWJsaWMgdm9pZCBhYSgpeworfQorCitwcml2YXRlIHZvaWQgYWFhKCl7CisgICAgPGNhcmV0PmFhKCk7Cit9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3N1cHByZXNzTm9uSW5zcGVjdGlvbnMvYmVmb3JlNi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9zdXBwcmVzc05vbkluc3BlY3Rpb25zL2JlZm9yZTYuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMzE0MmVjNgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvc3VwcHJlc3NOb25JbnNwZWN0aW9ucy9iZWZvcmU2LmphdmEKQEAgLTAsMCArMSw3IEBACisvLyAiU3VwcHJlc3MgZm9yIHN0YXRlbWVudCIgInRydWUiCitjbGFzcyBhIHsKKyAgcHVibGljIHZvaWQgYWEoKXsKKyAgICAgaW50IGEgPSAwOworICAgICA8Y2FyZXQ+YSA9IGE7CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvc3VwcHJlc3NOb25JbnNwZWN0aW9ucy9iZWZvcmU3LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3N1cHByZXNzTm9uSW5zcGVjdGlvbnMvYmVmb3JlNy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEwOTVjOGMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3N1cHByZXNzTm9uSW5zcGVjdGlvbnMvYmVmb3JlNy5qYXZhCkBAIC0wLDAgKzEsOCBAQAorLy8gIlN1cHByZXNzIGZvciBzdGF0ZW1lbnQiICJ0cnVlIgorY2xhc3MgYSB7CitzdGF0aWMgdm9pZCBzZXRBKCl7Cit9Cit2b2lkIGIoKXsKKyAgPGNhcmV0Pm5ldyBhKCkuc2V0QSgpOworfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9zdXBwcmVzc05vbkluc3BlY3Rpb25zL2JlZm9yZTguamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvc3VwcHJlc3NOb25JbnNwZWN0aW9ucy9iZWZvcmU4LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDg5NzU5MwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvc3VwcHJlc3NOb25JbnNwZWN0aW9ucy9iZWZvcmU4LmphdmEKQEAgLTAsMCArMSw2IEBACisvLyAiU3VwcHJlc3MgZm9yIG1ldGhvZCIgImZhbHNlIgorLyoqIEBub2luc3BlY3Rpb24gVU5VU0VEX1NZTUJPTCovCitjbGFzcyBhIHsKK3ByaXZhdGUgdm9pZCBydW4oKSB7Cit9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9zdXBwcmVzc05vbkluc3BlY3Rpb25zL2JlZm9yZTkuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvc3VwcHJlc3NOb25JbnNwZWN0aW9ucy9iZWZvcmU5LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWE5NGU3ZQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvc3VwcHJlc3NOb25JbnNwZWN0aW9ucy9iZWZvcmU5LmphdmEKQEAgLTAsMCArMSwxOCBAQAorLy8gIlN1cHByZXNzIGZvciBjbGFzcyIgInRydWUiCitwdWJsaWMgY2xhc3MgVGVzdCB7CisKKyAgcHVibGljIHZvaWQgdGVzdCgpIHsKKyAgICBJbm5lciBpbm5lciA9IG5ldyBJbm5lcigpOworICB9CisKKyAgcHJpdmF0ZSBzdGF0aWMgY2xhc3MgSW5uZXIgeworCisgICAgLyoqCisgICAgICogQGRlcHJlY2F0ZWQKKyAgICAgKi8KKyAgICBpbnQgaTsKKyAgICBwdWJsaWMgdm9pZCB1bnVzZWQoKSB7CisgICAgICA8Y2FyZXQ+aSsrOworICAgIH0KKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9zdXJyb3VuZFdpdGhBcnJheS9hZnRlcjEuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvc3Vycm91bmRXaXRoQXJyYXkvYWZ0ZXIxLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmUzYTJjOTIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3N1cnJvdW5kV2l0aEFycmF5L2FmdGVyMS5qYXZhCkBAIC0wLDAgKzEsOSBAQAorLy8gIlN1cnJvdW5kIHdpdGggYXJyYXkgaW5pdGlhbGl6YXRpb24iICJ0cnVlIgorY2xhc3MgQSB7CisgIHZvaWQgYmFyKFN0cmluZ1tdIGFyZ3MpeworICB9CisKKyAgdm9pZCBmb28oU3RyaW5nIHMpeworICAgIGJhcihuZXcgU3RyaW5nW117c30pOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9zdXJyb3VuZFdpdGhBcnJheS9hZnRlcjEwLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3N1cnJvdW5kV2l0aEFycmF5L2FmdGVyMTAuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZmM0YzAzCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9zdXJyb3VuZFdpdGhBcnJheS9hZnRlcjEwLmphdmEKQEAgLTAsMCArMSw5IEBACisvLyAiU3Vycm91bmQgd2l0aCBhcnJheSBpbml0aWFsaXphdGlvbiIgInRydWUiCitjbGFzcyBBIHsKKworICB2b2lkIGZvbygpeworICAgIHNvcnQobmV3IFN0cmluZ1tdeyJTdHJpbmcifSwgIlN0cmluZyIpOworICB9CisKKyAgPFQgZXh0ZW5kcyBTdHJpbmcsIFE+IHZvaWQgc29ydChUW10gYSwgUSBxKXt9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9zdXJyb3VuZFdpdGhBcnJheS9hZnRlcjMuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvc3Vycm91bmRXaXRoQXJyYXkvYWZ0ZXIzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjlhZDM0NwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvc3Vycm91bmRXaXRoQXJyYXkvYWZ0ZXIzLmphdmEKQEAgLTAsMCArMSw5IEBACisvLyAiU3Vycm91bmQgd2l0aCBhcnJheSBpbml0aWFsaXphdGlvbiIgInRydWUiCitjbGFzcyBBIHsKKyAgdm9pZCBiYXIoaW50IGksIFN0cmluZ1tdIGFyZ3MpeworICB9CisKKyAgdm9pZCBmb28oU3RyaW5nIHMpeworICAgIGJhcigxLCBuZXcgU3RyaW5nW117c30pOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9zdXJyb3VuZFdpdGhBcnJheS9hZnRlcjUuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvc3Vycm91bmRXaXRoQXJyYXkvYWZ0ZXI1LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWY1MjhmYwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvc3Vycm91bmRXaXRoQXJyYXkvYWZ0ZXI1LmphdmEKQEAgLTAsMCArMSwxMSBAQAorLy8gIlN1cnJvdW5kIHdpdGggYXJyYXkgaW5pdGlhbGl6YXRpb24iICJ0cnVlIgorY2xhc3MgQSB7CisgIHZvaWQgYmFyKGludCBpLCBTdHJpbmdbXSBhcmdzKXsKKyAgfQorCisgIHZvaWQgYmFyKGludCBpLCBpbnQgail7fQorCisgIHZvaWQgZm9vKFN0cmluZyBzKXsKKyAgICBiYXIoMSwgbmV3IFN0cmluZ1tde3N9KTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvc3Vycm91bmRXaXRoQXJyYXkvYWZ0ZXI2LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3N1cnJvdW5kV2l0aEFycmF5L2FmdGVyNi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYxOWVlYTIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3N1cnJvdW5kV2l0aEFycmF5L2FmdGVyNi5qYXZhCkBAIC0wLDAgKzEsOCBAQAorLy8gIlN1cnJvdW5kIHdpdGggYXJyYXkgaW5pdGlhbGl6YXRpb24iICJ0cnVlIgorY2xhc3MgQSB7CisgIEEoU3RyaW5nW10gcyl7fQorCisgIHZvaWQgZm9vKFN0cmluZyBzKXsKKyAgICBuZXcgQShuZXcgU3RyaW5nW117c30pOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9zdXJyb3VuZFdpdGhBcnJheS9hZnRlcjcuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvc3Vycm91bmRXaXRoQXJyYXkvYWZ0ZXI3LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjRiNjc0YgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvc3Vycm91bmRXaXRoQXJyYXkvYWZ0ZXI3LmphdmEKQEAgLTAsMCArMSw3IEBACisvLyAiU3Vycm91bmQgd2l0aCBhcnJheSBpbml0aWFsaXphdGlvbiIgInRydWUiCitjbGFzcyBBIHsKKworICBTdHJpbmdbXSBmb28oKXsKKyAgICByZXR1cm4gbmV3IFN0cmluZ1tdeyIifTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvc3Vycm91bmRXaXRoQXJyYXkvYWZ0ZXI4LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3N1cnJvdW5kV2l0aEFycmF5L2FmdGVyOC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU1OTU3MzQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3N1cnJvdW5kV2l0aEFycmF5L2FmdGVyOC5qYXZhCkBAIC0wLDAgKzEsMTIgQEAKKy8vICJTdXJyb3VuZCB3aXRoIGFycmF5IGluaXRpYWxpemF0aW9uIiAidHJ1ZSIKK2ltcG9ydCBqYXZhLnV0aWwuKjsKK2NsYXNzIEEgeworCisgIHZvaWQgZm9vKCl7CisgICAgQXJyYXlzLnNvcnQobmV3IFN0cmluZ1tdeyJTdHIifSwgbmV3IENvbXBhcmF0b3I8U3RyaW5nPigpeworICAgICAgICAgICAgcHVibGljIGludCBjb21wYXJlKFN0cmluZyBvMSwgU3RyaW5nIG8yKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICB9CisgICAgICAgIH0pOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9zdXJyb3VuZFdpdGhBcnJheS9iZWZvcmUxLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3N1cnJvdW5kV2l0aEFycmF5L2JlZm9yZTEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYWQwNDcwCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9zdXJyb3VuZFdpdGhBcnJheS9iZWZvcmUxLmphdmEKQEAgLTAsMCArMSw5IEBACisvLyAiU3Vycm91bmQgd2l0aCBhcnJheSBpbml0aWFsaXphdGlvbiIgInRydWUiCitjbGFzcyBBIHsKKyAgdm9pZCBiYXIoU3RyaW5nW10gYXJncyl7CisgIH0KKworICB2b2lkIGZvbyhTdHJpbmcgcyl7CisgICAgYmFyKDxjYXJldD5zKTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvc3Vycm91bmRXaXRoQXJyYXkvYmVmb3JlMTAuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvc3Vycm91bmRXaXRoQXJyYXkvYmVmb3JlMTAuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jODQwNzFmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9zdXJyb3VuZFdpdGhBcnJheS9iZWZvcmUxMC5qYXZhCkBAIC0wLDAgKzEsOSBAQAorLy8gIlN1cnJvdW5kIHdpdGggYXJyYXkgaW5pdGlhbGl6YXRpb24iICJ0cnVlIgorY2xhc3MgQSB7CisKKyAgdm9pZCBmb28oKXsKKyAgICBzb3J0KDxjYXJldD4iU3RyaW5nIiwgIlN0cmluZyIpOworICB9CisKKyAgPFQgZXh0ZW5kcyBTdHJpbmcsIFE+IHZvaWQgc29ydChUW10gYSwgUSBxKXt9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9zdXJyb3VuZFdpdGhBcnJheS9iZWZvcmUyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3N1cnJvdW5kV2l0aEFycmF5L2JlZm9yZTIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMjdlNGFkCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9zdXJyb3VuZFdpdGhBcnJheS9iZWZvcmUyLmphdmEKQEAgLTAsMCArMSw5IEBACisvLyAiU3Vycm91bmQgd2l0aCBhcnJheSBpbml0aWFsaXphdGlvbiIgImZhbHNlIgorY2xhc3MgQSB7CisgIHZvaWQgYmFyKGludCBhcmcpeworICB9CisKKyAgdm9pZCBmb28oU3RyaW5nIHMpeworICAgIGJhcig8Y2FyZXQ+cyk7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3N1cnJvdW5kV2l0aEFycmF5L2JlZm9yZTMuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvc3Vycm91bmRXaXRoQXJyYXkvYmVmb3JlMy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNmNmUwZmQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3N1cnJvdW5kV2l0aEFycmF5L2JlZm9yZTMuamF2YQpAQCAtMCwwICsxLDkgQEAKKy8vICJTdXJyb3VuZCB3aXRoIGFycmF5IGluaXRpYWxpemF0aW9uIiAidHJ1ZSIKK2NsYXNzIEEgeworICB2b2lkIGJhcihpbnQgaSwgU3RyaW5nW10gYXJncyl7CisgIH0KKworICB2b2lkIGZvbyhTdHJpbmcgcyl7CisgICAgYmFyKDEsIDxjYXJldD5zKTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvc3Vycm91bmRXaXRoQXJyYXkvYmVmb3JlNC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9zdXJyb3VuZFdpdGhBcnJheS9iZWZvcmU0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWNhYjg3ZAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvc3Vycm91bmRXaXRoQXJyYXkvYmVmb3JlNC5qYXZhCkBAIC0wLDAgKzEsOSBAQAorLy8gIlN1cnJvdW5kIHdpdGggYXJyYXkgaW5pdGlhbGl6YXRpb24iICJmYWxzZSIKK2NsYXNzIEEgeworICB2b2lkIGJhcihpbnQgaSwgU3RyaW5nW10gYXJncyl7CisgIH0KKworICB2b2lkIGZvbyhTdHJpbmcgcyl7CisgICAgYmFyKDxjYXJldD4xLCBzKTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvc3Vycm91bmRXaXRoQXJyYXkvYmVmb3JlNS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9zdXJyb3VuZFdpdGhBcnJheS9iZWZvcmU1LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjlmZmNlNgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvc3Vycm91bmRXaXRoQXJyYXkvYmVmb3JlNS5qYXZhCkBAIC0wLDAgKzEsMTEgQEAKKy8vICJTdXJyb3VuZCB3aXRoIGFycmF5IGluaXRpYWxpemF0aW9uIiAidHJ1ZSIKK2NsYXNzIEEgeworICB2b2lkIGJhcihpbnQgaSwgU3RyaW5nW10gYXJncyl7CisgIH0KKworICB2b2lkIGJhcihpbnQgaSwgaW50IGope30KKworICB2b2lkIGZvbyhTdHJpbmcgcyl7CisgICAgYmFyKDEsIDxjYXJldD5zKTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvc3Vycm91bmRXaXRoQXJyYXkvYmVmb3JlNi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9zdXJyb3VuZFdpdGhBcnJheS9iZWZvcmU2LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmQ0NGRjNAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvc3Vycm91bmRXaXRoQXJyYXkvYmVmb3JlNi5qYXZhCkBAIC0wLDAgKzEsOCBAQAorLy8gIlN1cnJvdW5kIHdpdGggYXJyYXkgaW5pdGlhbGl6YXRpb24iICJ0cnVlIgorY2xhc3MgQSB7CisgIEEoU3RyaW5nW10gcyl7fQorCisgIHZvaWQgZm9vKFN0cmluZyBzKXsKKyAgICBuZXcgQSg8Y2FyZXQ+cyk7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3N1cnJvdW5kV2l0aEFycmF5L2JlZm9yZTcuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvc3Vycm91bmRXaXRoQXJyYXkvYmVmb3JlNy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBkZjFlNTMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3N1cnJvdW5kV2l0aEFycmF5L2JlZm9yZTcuamF2YQpAQCAtMCwwICsxLDcgQEAKKy8vICJTdXJyb3VuZCB3aXRoIGFycmF5IGluaXRpYWxpemF0aW9uIiAidHJ1ZSIKK2NsYXNzIEEgeworCisgIFN0cmluZ1tdIGZvbygpeworICAgIHJldHVybiA8Y2FyZXQ+IiI7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3N1cnJvdW5kV2l0aEFycmF5L2JlZm9yZTguamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvc3Vycm91bmRXaXRoQXJyYXkvYmVmb3JlOC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZiZDIwNGMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3N1cnJvdW5kV2l0aEFycmF5L2JlZm9yZTguamF2YQpAQCAtMCwwICsxLDEyIEBACisvLyAiU3Vycm91bmQgd2l0aCBhcnJheSBpbml0aWFsaXphdGlvbiIgInRydWUiCitpbXBvcnQgamF2YS51dGlsLio7CitjbGFzcyBBIHsKKworICB2b2lkIGZvbygpeworICAgIEFycmF5cy5zb3J0KDxjYXJldD4iU3RyIiwgbmV3IENvbXBhcmF0b3I8U3RyaW5nPigpeworICAgICAgICAgICAgcHVibGljIGludCBjb21wYXJlKFN0cmluZyBvMSwgU3RyaW5nIG8yKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICB9CisgICAgICAgIH0pOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9zdXJyb3VuZFdpdGhBcnJheS9iZWZvcmU5LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3N1cnJvdW5kV2l0aEFycmF5L2JlZm9yZTkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZDA4NWQ5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9zdXJyb3VuZFdpdGhBcnJheS9iZWZvcmU5LmphdmEKQEAgLTAsMCArMSw5IEBACisvLyAiU3Vycm91bmQgd2l0aCBhcnJheSBpbml0aWFsaXphdGlvbiIgImZhbHNlIgorY2xhc3MgQSB7CisKKyAgdm9pZCBmb28oKXsKKyAgICBzb3J0KDxjYXJldD4iU3RyaW5nIiwgIlN0cmluZyIpOworICB9CisKKyAgPFQgZXh0ZW5kcyBJbnRlZ2VyLCBRPiB2b2lkIHNvcnQoVFtdIGEsIFEgcSl7fQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvc3Vycm91bmRXaXRoSWYvYWZ0ZXIxLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3N1cnJvdW5kV2l0aElmL2FmdGVyMS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUzNjU1NWUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3N1cnJvdW5kV2l0aElmL2FmdGVyMS5qYXZhCkBAIC0wLDAgKzEsOSBAQAorLy8gIlN1cnJvdW5kIHdpdGggJ2lmIChpICE9IG51bGwpJyIgInRydWUiCitjbGFzcyBBIHsKKyAgICB2b2lkIGZvbygpeworICAgICAgICBTdHJpbmcgaSA9IG51bGw7CisgICAgICAgIGlmIChpICE9IG51bGw8Y2FyZXQ+KSB7CisgICAgICAgICAgICBpLmhhc2hDb2RlKCk7CisgICAgICAgIH0KKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9zdXJyb3VuZFdpdGhJZi9hZnRlcjIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvc3Vycm91bmRXaXRoSWYvYWZ0ZXIyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWRlZTJjMgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvc3Vycm91bmRXaXRoSWYvYWZ0ZXIyLmphdmEKQEAgLTAsMCArMSw5IEBACisvLyAiU3Vycm91bmQgd2l0aCAnaWYgKHMgIT0gbnVsbCknIiAidHJ1ZSIKK2NsYXNzIEEgeworICAgIHZvaWQgZm9vKCl7CisgICAgICAgIFN0cmluZyBzID0gbnVsbDsKKyAgICAgICAgaWYgKHMgIT0gbnVsbDxjYXJldD4pIHsKKyAgICAgICAgICAgIGZvciAoaW50IGk9MDsgaSE9cy5oYXNoQ29kZSgpO2krKyl7fQorICAgICAgICB9CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvc3Vycm91bmRXaXRoSWYvYmVmb3JlMS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9zdXJyb3VuZFdpdGhJZi9iZWZvcmUxLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGYzYjE3NgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvc3Vycm91bmRXaXRoSWYvYmVmb3JlMS5qYXZhCkBAIC0wLDAgKzEsNyBAQAorLy8gIlN1cnJvdW5kIHdpdGggJ2lmIChpICE9IG51bGwpJyIgInRydWUiCitjbGFzcyBBIHsKKyAgICB2b2lkIGZvbygpeworICAgICAgICBTdHJpbmcgaSA9IG51bGw7CisgICAgICAgIDxjYXJldD5pLmhhc2hDb2RlKCk7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvc3Vycm91bmRXaXRoSWYvYmVmb3JlMi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9zdXJyb3VuZFdpdGhJZi9iZWZvcmUyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2E4ZTFhYwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvc3Vycm91bmRXaXRoSWYvYmVmb3JlMi5qYXZhCkBAIC0wLDAgKzEsNyBAQAorLy8gIlN1cnJvdW5kIHdpdGggJ2lmIChzICE9IG51bGwpJyIgInRydWUiCitjbGFzcyBBIHsKKyAgICB2b2lkIGZvbygpeworICAgICAgICBTdHJpbmcgcyA9IG51bGw7CisgICAgICAgIGZvciAoaW50IGk9MDsgaSE9PGNhcmV0PnMuaGFzaENvZGUoKTtpKyspe30KKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9zdXJyb3VuZFdpdGhJZi9iZWZvcmUzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3N1cnJvdW5kV2l0aElmL2JlZm9yZTMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZmY3MzBiCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9zdXJyb3VuZFdpdGhJZi9iZWZvcmUzLmphdmEKQEAgLTAsMCArMSw3IEBACisvLyAiU3Vycm91bmQgd2l0aCAnaWYgKHMgIT0gbnVsbCknIiAiZmFsc2UiCitjbGFzcyBBIHsKKyAgICB2b2lkIGZvbygpeworICAgICAgICBTdHJpbmcgcyA9IG51bGw7CisgICAgICAgIGZvciAoaW50IGk9PGNhcmV0PnMudG9TdHJpbmcoKS5oYXNoQ29kZSgpOyBpPT0wOyApIHt9CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9zdXJyb3VuZFdpdGhUcnkvYWZ0ZXIxLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3N1cnJvdW5kV2l0aFRyeS9hZnRlcjEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNDQ2MzAzCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9zdXJyb3VuZFdpdGhUcnkvYWZ0ZXIxLmphdmEKQEAgLTAsMCArMSwxNyBAQAorLy8gIlN1cnJvdW5kIHdpdGggdHJ5L2NhdGNoIiAidHJ1ZSIKK2NsYXNzIEMgeworICAgIHN0YXRpYyBjbGFzcyBFMSBleHRlbmRzIEV4Y2VwdGlvbiB7IH0KKworICAgIHN0YXRpYyBjbGFzcyBNeVJlc291cmNlIGltcGxlbWVudHMgQXV0b0Nsb3NlYWJsZSB7CisgICAgICAgIHB1YmxpYyB2b2lkIGNsb3NlKCkgdGhyb3dzIEUxIHsgfQorICAgIH0KKworICAgIHZvaWQgbSgpIHsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIHRyeSAoTXlSZXNvdXJjZSByID0gbmV3IE15UmVzb3VyY2UoKSkgeworICAgICAgICAgICAgfQorICAgICAgICB9IGNhdGNoIChFMSBlMSkgeworICAgICAgICAgICAgPHNlbGVjdGlvbj5lMS5wcmludFN0YWNrVHJhY2UoKTsgIC8vVG8gY2hhbmdlIGJvZHkgb2YgY2F0Y2ggc3RhdGVtZW50IHVzZSBGaWxlIHwgU2V0dGluZ3MgfCBGaWxlIFRlbXBsYXRlcy48L3NlbGVjdGlvbj4KKyAgICAgICAgfQorICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3N1cnJvdW5kV2l0aFRyeS9iZWZvcmUxLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3N1cnJvdW5kV2l0aFRyeS9iZWZvcmUxLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTBmNmI0MwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvc3Vycm91bmRXaXRoVHJ5L2JlZm9yZTEuamF2YQpAQCAtMCwwICsxLDEzIEBACisvLyAiU3Vycm91bmQgd2l0aCB0cnkvY2F0Y2giICJ0cnVlIgorY2xhc3MgQyB7CisgICAgc3RhdGljIGNsYXNzIEUxIGV4dGVuZHMgRXhjZXB0aW9uIHsgfQorCisgICAgc3RhdGljIGNsYXNzIE15UmVzb3VyY2UgaW1wbGVtZW50cyBBdXRvQ2xvc2VhYmxlIHsKKyAgICAgICAgcHVibGljIHZvaWQgY2xvc2UoKSB0aHJvd3MgRTEgeyB9CisgICAgfQorCisgICAgdm9pZCBtKCkgeworICAgICAgICB0cnkgKDxjYXJldD5NeVJlc291cmNlIHIgPSBuZXcgTXlSZXNvdXJjZSgpKSB7CisgICAgICAgIH0KKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC91bmltcGxlbWVudC9hZnRlcjJTdHJpbmcuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvdW5pbXBsZW1lbnQvYWZ0ZXIyU3RyaW5nLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2YzYzdiZgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvdW5pbXBsZW1lbnQvYWZ0ZXIyU3RyaW5nLmphdmEKQEAgLTAsMCArMSw4IEBACisvLyAiVW5pbXBsZW1lbnQgSW50ZXJmYWNlIiAidHJ1ZSIKK2NsYXNzIEEgeworICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgeworICAgIHJldHVybiBzdXBlci50b1N0cmluZygpOworICB9Cit9CisKK2ludGVyZmFjZSBJSSB7fQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvdW5pbXBsZW1lbnQvYWZ0ZXJHZW5lcmljcy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC91bmltcGxlbWVudC9hZnRlckdlbmVyaWNzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTA1MGE3NAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvdW5pbXBsZW1lbnQvYWZ0ZXJHZW5lcmljcy5qYXZhCkBAIC0wLDAgKzEsMTEgQEAKKy8vICJVbmltcGxlbWVudCBJbnRlcmZhY2UiICJ0cnVlIgorY2xhc3MgQSB7CisgIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7CisgICAgcmV0dXJuIHN1cGVyLnRvU3RyaW5nKCk7CisgIH0KKworfQorCitpbnRlcmZhY2UgSUk8VD4geworICB2b2lkIGZvbyhUIHR5KTsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3VuaW1wbGVtZW50L2FmdGVyTGFzdFBvc2l0aW9uLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3VuaW1wbGVtZW50L2FmdGVyTGFzdFBvc2l0aW9uLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmU3NmIwYgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvdW5pbXBsZW1lbnQvYWZ0ZXJMYXN0UG9zaXRpb24uamF2YQpAQCAtMCwwICsxLDExIEBACisvLyAiVW5pbXBsZW1lbnQgSW50ZXJmYWNlIiAidHJ1ZSIKK2NsYXNzIEEgeworICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgeworICAgIHJldHVybiBzdXBlci50b1N0cmluZygpOworICB9CisKKyAgICBwdWJsaWMgdm9pZCBmb28oU3RyaW5nIHR5KXt9Cit9CisKK2ludGVyZmFjZSBJSSB7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC91bmltcGxlbWVudC9iZWZvcmUyU3RyaW5nLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3VuaW1wbGVtZW50L2JlZm9yZTJTdHJpbmcuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MzdmODZmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC91bmltcGxlbWVudC9iZWZvcmUyU3RyaW5nLmphdmEKQEAgLTAsMCArMSw4IEBACisvLyAiVW5pbXBsZW1lbnQgSW50ZXJmYWNlIiAidHJ1ZSIKK2NsYXNzIEEgaW1wbGVtZW50cyBJPGNhcmV0PkkgeworICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgeworICAgIHJldHVybiBzdXBlci50b1N0cmluZygpOworICB9Cit9CisKK2ludGVyZmFjZSBJSSB7fQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvdW5pbXBsZW1lbnQvYmVmb3JlR2VuZXJpY3MuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvdW5pbXBsZW1lbnQvYmVmb3JlR2VuZXJpY3MuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZmVkZGYwCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC91bmltcGxlbWVudC9iZWZvcmVHZW5lcmljcy5qYXZhCkBAIC0wLDAgKzEsMTIgQEAKKy8vICJVbmltcGxlbWVudCBJbnRlcmZhY2UiICJ0cnVlIgorY2xhc3MgQSBpbXBsZW1lbnRzIElJPFM8Y2FyZXQ+dHJpbmc+IHsKKyAgcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKKyAgICByZXR1cm4gc3VwZXIudG9TdHJpbmcoKTsKKyAgfQorCisgICAgcHVibGljIHZvaWQgZm9vKFN0cmluZyB0eSl7fQorfQorCitpbnRlcmZhY2UgSUk8VD4geworICB2b2lkIGZvbyhUIHR5KTsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3VuaW1wbGVtZW50L2JlZm9yZUxhc3RQb3NpdGlvbi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC91bmltcGxlbWVudC9iZWZvcmVMYXN0UG9zaXRpb24uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kODE4ODJkCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC91bmltcGxlbWVudC9iZWZvcmVMYXN0UG9zaXRpb24uamF2YQpAQCAtMCwwICsxLDExIEBACisvLyAiVW5pbXBsZW1lbnQgSW50ZXJmYWNlIiAidHJ1ZSIKK2NsYXNzIEEgaW1wbGVtZW50cyBJSTxjYXJldD4geworICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgeworICAgIHJldHVybiBzdXBlci50b1N0cmluZygpOworICB9CisKKyAgICBwdWJsaWMgdm9pZCBmb28oU3RyaW5nIHR5KXt9Cit9CisKK2ludGVyZmFjZSBJSSB7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC92YXJUeXBlRnJvbUNhbGwvYWZ0ZXIxLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3ZhclR5cGVGcm9tQ2FsbC9hZnRlcjEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hODkwMjdkCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC92YXJUeXBlRnJvbUNhbGwvYWZ0ZXIxLmphdmEKQEAgLTAsMCArMSwxMSBAQAorLy8gIkNoYW5nZSAnbGlzdCcgdHlwZSB0byAnTGlzdDxqYXZhLmxhbmcuSW50ZWdlcj4nIiAidHJ1ZSIKK3B1YmxpYyBjbGFzcyBUZXN0IHsKKyAgdm9pZCBmb28oKSAgeworICAgIExpc3Q8SW50ZWdlcj4gbGlzdCA9IG5ldyBMaXN0PD4oKTsKKyAgICBsaXN0LmFkZChuZXcgSW50ZWdlcigwKSk7CisgIH0KK30KKworY2xhc3MgTGlzdDxUPiB7CisgIHZvaWQgYWRkKFQgdCl7fQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvdmFyVHlwZUZyb21DYWxsL2FmdGVyMlR5cGVQYXJhbXNJbk9uZUNhbGwuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvdmFyVHlwZUZyb21DYWxsL2FmdGVyMlR5cGVQYXJhbXNJbk9uZUNhbGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MjJjM2UyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC92YXJUeXBlRnJvbUNhbGwvYWZ0ZXIyVHlwZVBhcmFtc0luT25lQ2FsbC5qYXZhCkBAIC0wLDAgKzEsMTEgQEAKKy8vICJDaGFuZ2UgJ2xpc3QnIHR5cGUgdG8gJ0xvc3Q8amF2YS5sYW5nLlN0cmluZyxqYXZhLmxhbmcuSW50ZWdlcj4nIiAidHJ1ZSIKK3B1YmxpYyBjbGFzcyBUZXN0IHsKKyAgdm9pZCBmb28oKSAgeworICAgIExvc3Q8U3RyaW5nLCBJbnRlZ2VyPiBsaXN0ID0gbmV3IExvc3Q8PigpOworICAgIGxpc3QuYWRkKCIiLCBuZXcgSW50ZWdlcig0MikpOworICB9Cit9CisKK2NsYXNzIExvc3Q8VCwgSz4geworICB2b2lkIGFkZChUIGx0LCBLIHQpe30KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3ZhclR5cGVGcm9tQ2FsbC9hZnRlckFub3RoZXJQYXJhbVR5cGVDaGFuZ2UuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvdmFyVHlwZUZyb21DYWxsL2FmdGVyQW5vdGhlclBhcmFtVHlwZUNoYW5nZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFiODU5MTYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3ZhclR5cGVGcm9tQ2FsbC9hZnRlckFub3RoZXJQYXJhbVR5cGVDaGFuZ2UuamF2YQpAQCAtMCwwICsxLDExIEBACisvLyAiQ2hhbmdlICdsaXN0JyB0eXBlIHRvICdMb3N0PGphdmEubGFuZy5JbnRlZ2VyPiciICJ0cnVlIgorcHVibGljIGNsYXNzIFRlc3QgeworICB2b2lkIGZvbygpICB7CisgICAgTG9zdDxJbnRlZ2VyPiBsaXN0ID0gbmV3IExvc3Q8PigpOworICAgIGxpc3QuYWRkZChuZXcgTG9zdDxJbnRlZ2VyPigpLCBuZXcgSW50ZWdlcig5KSk7CisgIH0KK30KKworY2xhc3MgTG9zdDxUPiB7CisgIHZvaWQgYWRkZChMb3N0PFQ+IGx0LCBUIHQpe30KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3ZhclR5cGVGcm9tQ2FsbC9hZnRlckJveGluZy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC92YXJUeXBlRnJvbUNhbGwvYWZ0ZXJCb3hpbmcuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYjQzODUwCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC92YXJUeXBlRnJvbUNhbGwvYWZ0ZXJCb3hpbmcuamF2YQpAQCAtMCwwICsxLDExIEBACisvLyAiQ2hhbmdlICdsaXN0JyB0eXBlIHRvICdMaXN0PGphdmEubGFuZy5JbnRlZ2VyPiciICJ0cnVlIgorcHVibGljIGNsYXNzIFRlc3QgeworICB2b2lkIGZvbygpICB7CisgICAgTGlzdDxJbnRlZ2VyPiBsaXN0ID0gbmV3IExpc3Q8PigpOworICAgIGxpc3QuYWRkKDQyKTsKKyAgfQorfQorCitjbGFzcyBMaXN0PFQ+IHsKKyAgdm9pZCBhZGQoVCB0KXt9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC92YXJUeXBlRnJvbUNhbGwvYWZ0ZXJDb21wb3VuZC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC92YXJUeXBlRnJvbUNhbGwvYWZ0ZXJDb21wb3VuZC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE2ZTZkNjAKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3ZhclR5cGVGcm9tQ2FsbC9hZnRlckNvbXBvdW5kLmphdmEKQEAgLTAsMCArMSwxMSBAQAorLy8gIkNoYW5nZSAnbGlzdCcgdHlwZSB0byAnTG9zdDxqYXZhLmxhbmcuSW50ZWdlcj4nIiAidHJ1ZSIKK3B1YmxpYyBjbGFzcyBUZXN0IHsKKyAgdm9pZCBmb28oKSAgeworICAgIExvc3Q8SW50ZWdlcj4gbGlzdCA9IG5ldyBMb3N0PD4oKTsKKyAgICBsaXN0LmFkZChuZXcgTG9zdDxJbnRlZ2VyPigpKTsKKyAgfQorfQorCitjbGFzcyBMb3N0PFQ+IHsKKyAgdm9pZCBhZGQoTG9zdDxUPiB0KXt9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC92YXJUeXBlRnJvbUNhbGwvYWZ0ZXJNaXhlZC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC92YXJUeXBlRnJvbUNhbGwvYWZ0ZXJNaXhlZC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgwMmJhYWYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3ZhclR5cGVGcm9tQ2FsbC9hZnRlck1peGVkLmphdmEKQEAgLTAsMCArMSwxMSBAQAorLy8gIkNoYW5nZSAnbGlzdCcgdHlwZSB0byAnTG9zdDxqYXZhLmxhbmcuSW50ZWdlcj4nIiAidHJ1ZSIKK3B1YmxpYyBjbGFzcyBUZXN0IHsKKyAgdm9pZCBmb28oKSAgeworICAgIExvc3Q8SW50ZWdlcj4gbGlzdCA9IG5ldyBMb3N0PD4oKTsKKyAgICBsaXN0LmFkZChuZXcgTG9zdDxJbnRlZ2VyPigpLCBuZXcgSW50ZWdlcig0MikpOworICB9Cit9CisKK2NsYXNzIExvc3Q8VD4geworICB2b2lkIGFkZChMb3N0PFQ+IGx0LCBUIHQpe30KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3ZhclR5cGVGcm9tQ2FsbC9iZWZvcmUxLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3ZhclR5cGVGcm9tQ2FsbC9iZWZvcmUxLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzE0YjgzNAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvdmFyVHlwZUZyb21DYWxsL2JlZm9yZTEuamF2YQpAQCAtMCwwICsxLDExIEBACisvLyAiQ2hhbmdlICdsaXN0JyB0eXBlIHRvICdMaXN0PGphdmEubGFuZy5JbnRlZ2VyPiciICJ0cnVlIgorcHVibGljIGNsYXNzIFRlc3QgeworICB2b2lkIGZvbygpICB7CisgICAgTGlzdDxTdHJpbmc+IGxpc3QgPSBuZXcgTGlzdDxTdHJpbmc+KCk7CisgICAgbGlzdC5hZGQobmV3IEluPGNhcmV0PnRlZ2VyKDApKTsKKyAgfQorfQorCitjbGFzcyBMaXN0PFQ+IHsKKyAgdm9pZCBhZGQoVCB0KXt9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC92YXJUeXBlRnJvbUNhbGwvYmVmb3JlMlR5cGVQYXJhbXNJbk9uZUNhbGwuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvdmFyVHlwZUZyb21DYWxsL2JlZm9yZTJUeXBlUGFyYW1zSW5PbmVDYWxsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWUyN2VkMwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvdmFyVHlwZUZyb21DYWxsL2JlZm9yZTJUeXBlUGFyYW1zSW5PbmVDYWxsLmphdmEKQEAgLTAsMCArMSwxMSBAQAorLy8gIkNoYW5nZSAnbGlzdCcgdHlwZSB0byAnTG9zdDxqYXZhLmxhbmcuU3RyaW5nLGphdmEubGFuZy5JbnRlZ2VyPiciICJ0cnVlIgorcHVibGljIGNsYXNzIFRlc3QgeworICB2b2lkIGZvbygpICB7CisgICAgTG9zdDxTdHJpbmcsIFN0cmluZz4gbGlzdCA9IG5ldyBMb3N0PFN0cmluZywgU3RyaW5nPigpOworICAgIGxpc3QuYWRkKCIiLCBuZXcgSW50PGNhcmV0PmVnZXIoNDIpKTsKKyAgfQorfQorCitjbGFzcyBMb3N0PFQsIEs+IHsKKyAgdm9pZCBhZGQoVCBsdCwgSyB0KXt9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC92YXJUeXBlRnJvbUNhbGwvYmVmb3JlQW5vdGhlclBhcmFtVHlwZUNoYW5nZS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC92YXJUeXBlRnJvbUNhbGwvYmVmb3JlQW5vdGhlclBhcmFtVHlwZUNoYW5nZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYxZTg2ODQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3ZhclR5cGVGcm9tQ2FsbC9iZWZvcmVBbm90aGVyUGFyYW1UeXBlQ2hhbmdlLmphdmEKQEAgLTAsMCArMSwxMSBAQAorLy8gIkNoYW5nZSAnbGlzdCcgdHlwZSB0byAnTG9zdDxqYXZhLmxhbmcuSW50ZWdlcj4nIiAidHJ1ZSIKK3B1YmxpYyBjbGFzcyBUZXN0IHsKKyAgdm9pZCBmb28oKSAgeworICAgIExvc3Q8U3RyaW5nPiBsaXN0ID0gbmV3IExvc3Q8U3RyaW5nPigpOworICAgIGxpc3QuYWRkZChuZXcgTG9zdDxJbnRlZ2VyPigpLCBuZXcgSW50PGNhcmV0PmVnZXIoOSkpOworICB9Cit9CisKK2NsYXNzIExvc3Q8VD4geworICB2b2lkIGFkZGQoTG9zdDxUPiBsdCwgVCB0KXt9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC92YXJUeXBlRnJvbUNhbGwvYmVmb3JlQm94aW5nLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3ZhclR5cGVGcm9tQ2FsbC9iZWZvcmVCb3hpbmcuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZDAyYjkxCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC92YXJUeXBlRnJvbUNhbGwvYmVmb3JlQm94aW5nLmphdmEKQEAgLTAsMCArMSwxMSBAQAorLy8gIkNoYW5nZSAnbGlzdCcgdHlwZSB0byAnTGlzdDxqYXZhLmxhbmcuSW50ZWdlcj4nIiAidHJ1ZSIKK3B1YmxpYyBjbGFzcyBUZXN0IHsKKyAgdm9pZCBmb28oKSAgeworICAgIExpc3Q8U3RyaW5nPiBsaXN0ID0gbmV3IExpc3Q8U3RyaW5nPigpOworICAgIGxpc3QuYWRkKDQ8Y2FyZXQ+Mik7CisgIH0KK30KKworY2xhc3MgTGlzdDxUPiB7CisgIHZvaWQgYWRkKFQgdCl7fQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvdmFyVHlwZUZyb21DYWxsL2JlZm9yZUNoYW5nZVNpZ25hdHVyZUF2YWlsYWJsZS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC92YXJUeXBlRnJvbUNhbGwvYmVmb3JlQ2hhbmdlU2lnbmF0dXJlQXZhaWxhYmxlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWY1ZWMzYgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvdmFyVHlwZUZyb21DYWxsL2JlZm9yZUNoYW5nZVNpZ25hdHVyZUF2YWlsYWJsZS5qYXZhCkBAIC0wLDAgKzEsMTEgQEAKKy8vICJDaGFuZ2UgJ3ZhcicgdHlwZSB0byAnRm9vIiAiZmFsc2UiCitwdWJsaWMgY2xhc3MgVGVzdCB7CisgIHZvaWQgZm9vKCkgIHsKKyAgICBmaW5hbCBGb28gdmFyID0gbmV3IEZvbygpOworICAgIHZhci5mb28oIiIsIDY8Y2FyZXQ+Nik7CisgIH0KK30KKworY2xhc3MgRm9vIHsKKyAgdm9pZCBmb28oU3RyaW5nIHN0ciwgU3RyaW5nIHN0cjEpe30KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3ZhclR5cGVGcm9tQ2FsbC9iZWZvcmVDb21wb3VuZC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC92YXJUeXBlRnJvbUNhbGwvYmVmb3JlQ29tcG91bmQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYTJlYjBjCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC92YXJUeXBlRnJvbUNhbGwvYmVmb3JlQ29tcG91bmQuamF2YQpAQCAtMCwwICsxLDExIEBACisvLyAiQ2hhbmdlICdsaXN0JyB0eXBlIHRvICdMb3N0PGphdmEubGFuZy5JbnRlZ2VyPiciICJ0cnVlIgorcHVibGljIGNsYXNzIFRlc3QgeworICB2b2lkIGZvbygpICB7CisgICAgTG9zdDxTdHJpbmc+IGxpc3QgPSBuZXcgTG9zdDxTdHJpbmc+KCk7CisgICAgbGlzdC5hZGQobmV3IExvc3Q8SW50ZWc8Y2FyZXQ+ZXI+KCkpOworICB9Cit9CisKK2NsYXNzIExvc3Q8VD4geworICB2b2lkIGFkZChMb3N0PFQ+IHQpe30KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3ZhclR5cGVGcm9tQ2FsbC9iZWZvcmVNaXhlZC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC92YXJUeXBlRnJvbUNhbGwvYmVmb3JlTWl4ZWQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMGQ2Y2FiCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC92YXJUeXBlRnJvbUNhbGwvYmVmb3JlTWl4ZWQuamF2YQpAQCAtMCwwICsxLDExIEBACisvLyAiQ2hhbmdlICdsaXN0JyB0eXBlIHRvICdMb3N0PGphdmEubGFuZy5JbnRlZ2VyPiciICJ0cnVlIgorcHVibGljIGNsYXNzIFRlc3QgeworICB2b2lkIGZvbygpICB7CisgICAgTG9zdDxTdHJpbmc+IGxpc3QgPSBuZXcgTG9zdDxTdHJpbmc+KCk7CisgICAgbGlzdC5hZGQobmV3IExvc3Q8SW50ZWc8Y2FyZXQ+ZXI+KCksIG5ldyBJbnRlZ2VyKDQyKSk7CisgIH0KK30KKworY2xhc3MgTG9zdDxUPiB7CisgIHZvaWQgYWRkKExvc3Q8VD4gbHQsIFQgdCl7fQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvdmFyaWFibGVBcnJheVR5cGUvYWZ0ZXIxLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3ZhcmlhYmxlQXJyYXlUeXBlL2FmdGVyMS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI3ZjdlNjMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3ZhcmlhYmxlQXJyYXlUeXBlL2FmdGVyMS5qYXZhCkBAIC0wLDAgKzEsNiBAQAorLy8gIkNoYW5nZSAndGVzdCcgdHlwZSB0byAnaW50W11bXSciICJ0cnVlIgorY2xhc3MgQSB7CisgICAgdm9pZCBtKCkgeworICAgICAgICBmaW5hbCBpbnRbXVtdIHRlc3QgPSB7bmV3IGludDxjYXJldD5bXXsxfX07CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvdmFyaWFibGVBcnJheVR5cGUvYWZ0ZXIxMC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC92YXJpYWJsZUFycmF5VHlwZS9hZnRlcjEwLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2U4MTM2ZmIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3ZhcmlhYmxlQXJyYXlUeXBlL2FmdGVyMTAuamF2YQpAQCAtMCwwICsxLDYgQEAKKy8vICJDaGFuZ2UgJ25ldyBMb25nW10nIHRvICduZXcgY2hhcltdW10nIiAidHJ1ZSIKK2NsYXNzIEEgeworICAgIHZvaWQgbSgpIHsKKyAgICAgICAgZmluYWwgY2hhcltdW10gdGVzdCA9IG5ldyBjaGFyW11bXXs8Y2FyZXQ+eydhJ30sIHsnMSd9fTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC92YXJpYWJsZUFycmF5VHlwZS9hZnRlcjIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvdmFyaWFibGVBcnJheVR5cGUvYWZ0ZXIyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWNhZGI2MQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvdmFyaWFibGVBcnJheVR5cGUvYWZ0ZXIyLmphdmEKQEAgLTAsMCArMSw2IEBACisvLyAiQ2hhbmdlICd0ZXN0JyB0eXBlIHRvICdpbnRbXVtdJyIgInRydWUiCitjbGFzcyBBIHsKKyAgICB2b2lkIG0oKSB7CisgICAgICAgIGludFtdW10gdGVzdCA9IG5ldyBpbnRbXVtdezxjYXJldD57MX0sIHsyfX07CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvdmFyaWFibGVBcnJheVR5cGUvYWZ0ZXIzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3ZhcmlhYmxlQXJyYXlUeXBlL2FmdGVyMy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFjYWRiNjEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3ZhcmlhYmxlQXJyYXlUeXBlL2FmdGVyMy5qYXZhCkBAIC0wLDAgKzEsNiBAQAorLy8gIkNoYW5nZSAndGVzdCcgdHlwZSB0byAnaW50W11bXSciICJ0cnVlIgorY2xhc3MgQSB7CisgICAgdm9pZCBtKCkgeworICAgICAgICBpbnRbXVtdIHRlc3QgPSBuZXcgaW50W11bXXs8Y2FyZXQ+ezF9LCB7Mn19OworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3ZhcmlhYmxlQXJyYXlUeXBlL2FmdGVyNC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC92YXJpYWJsZUFycmF5VHlwZS9hZnRlcjQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OWRkZjk0Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC92YXJpYWJsZUFycmF5VHlwZS9hZnRlcjQuamF2YQpAQCAtMCwwICsxLDYgQEAKKy8vICJDaGFuZ2UgJ3Rlc3QnIHR5cGUgdG8gJ2ludFtdW10nIiAidHJ1ZSIKK2NsYXNzIEEgeworICAgIHZvaWQgbSgpIHsKKyAgICAgICAgaW50W11bXSB0ZXN0ID0gbmV3IGludFtdW117ezxjYXJldD4xfSwgezJ9fTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC92YXJpYWJsZUFycmF5VHlwZS9hZnRlcjUuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvdmFyaWFibGVBcnJheVR5cGUvYWZ0ZXI1LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODg5M2E5MQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvdmFyaWFibGVBcnJheVR5cGUvYWZ0ZXI1LmphdmEKQEAgLTAsMCArMSw2IEBACisvLyAiQ2hhbmdlICd0ZXN0JyB0eXBlIHRvICdjaGFyW10nIiAidHJ1ZSIKK2NsYXNzIEEgeworICAgIHZvaWQgbSgpIHsKKyAgICAgICAgZmluYWwgY2hhcltdIHRlc3QgPSBuZXcgY2hhcltdezxjYXJldD4nYSd9OworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3ZhcmlhYmxlQXJyYXlUeXBlL2FmdGVyNi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC92YXJpYWJsZUFycmF5VHlwZS9hZnRlcjYuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZGViZWFkCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC92YXJpYWJsZUFycmF5VHlwZS9hZnRlcjYuamF2YQpAQCAtMCwwICsxLDYgQEAKKy8vICJDaGFuZ2UgJ3Rlc3QnIHR5cGUgdG8gJ2NoYXJbXSciICJ0cnVlIgorY2xhc3MgQSB7CisgICAgdm9pZCBtKCkgeworICAgICAgICBmaW5hbCBjaGFyW10gdGVzdCA9IHs8Y2FyZXQ+J2EnfTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC92YXJpYWJsZUFycmF5VHlwZS9hZnRlcjkuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvdmFyaWFibGVBcnJheVR5cGUvYWZ0ZXI5LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTc0YTUxOAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvdmFyaWFibGVBcnJheVR5cGUvYWZ0ZXI5LmphdmEKQEAgLTAsMCArMSwxMCBAQAorLy8gIkNoYW5nZSAnbXlBcnInIHR5cGUgdG8gJ2NoYXJbXVtdJyIgInRydWUiCitjbGFzcyBBIGV4dGVuZHMgQiB7CisgICAgdm9pZCBtKCkgeworICAgICAgICBteUFyciA9IG5ldyBjaGFyW11bXXt7PGNhcmV0PidhJ319OworICAgIH0KK30KKworY2xhc3MgQiB7CisgIHByb3RlY3RlZCBjaGFyW11bXSBteUFycjsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3ZhcmlhYmxlQXJyYXlUeXBlL2JlZm9yZTEuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvdmFyaWFibGVBcnJheVR5cGUvYmVmb3JlMS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM0Y2M0OTIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3ZhcmlhYmxlQXJyYXlUeXBlL2JlZm9yZTEuamF2YQpAQCAtMCwwICsxLDYgQEAKKy8vICJDaGFuZ2UgJ3Rlc3QnIHR5cGUgdG8gJ2ludFtdW10nIiAidHJ1ZSIKK2NsYXNzIEEgeworICAgIHZvaWQgbSgpIHsKKyAgICAgICAgZmluYWwgTG9uZ1tdW10gdGVzdCA9IHtuZXcgaW50PGNhcmV0PltdezF9fTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC92YXJpYWJsZUFycmF5VHlwZS9iZWZvcmUxMC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC92YXJpYWJsZUFycmF5VHlwZS9iZWZvcmUxMC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYzNTYxYTYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3ZhcmlhYmxlQXJyYXlUeXBlL2JlZm9yZTEwLmphdmEKQEAgLTAsMCArMSw2IEBACisvLyAiQ2hhbmdlICduZXcgTG9uZ1tdJyB0byAnbmV3IGNoYXJbXVtdJyIgInRydWUiCitjbGFzcyBBIHsKKyAgICB2b2lkIG0oKSB7CisgICAgICAgIGZpbmFsIGNoYXJbXVtdIHRlc3QgPSBuZXcgTG9uZ1tdezxjYXJldD57J2EnfSwgeycxJ319OworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3ZhcmlhYmxlQXJyYXlUeXBlL2JlZm9yZTIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvdmFyaWFibGVBcnJheVR5cGUvYmVmb3JlMi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJlOWUyODcKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3ZhcmlhYmxlQXJyYXlUeXBlL2JlZm9yZTIuamF2YQpAQCAtMCwwICsxLDYgQEAKKy8vICJDaGFuZ2UgJ3Rlc3QnIHR5cGUgdG8gJ2ludFtdW10nIiAidHJ1ZSIKK2NsYXNzIEEgeworICAgIHZvaWQgbSgpIHsKKyAgICAgICAgTG9uZ1tdW11bXSB0ZXN0ID0gbmV3IExvbmdbXXs8Y2FyZXQ+ezF9LCB7Mn19OworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3ZhcmlhYmxlQXJyYXlUeXBlL2JlZm9yZTMuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvdmFyaWFibGVBcnJheVR5cGUvYmVmb3JlMy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM1ZTQ1Y2QKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3ZhcmlhYmxlQXJyYXlUeXBlL2JlZm9yZTMuamF2YQpAQCAtMCwwICsxLDYgQEAKKy8vICJDaGFuZ2UgJ3Rlc3QnIHR5cGUgdG8gJ2ludFtdW10nIiAidHJ1ZSIKK2NsYXNzIEEgeworICAgIHZvaWQgbSgpIHsKKyAgICAgICAgTG9uZ1tdIHRlc3QgPSBuZXcgTG9uZ1tdezxjYXJldD57MX0sIHsyfX07CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvdmFyaWFibGVBcnJheVR5cGUvYmVmb3JlNC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC92YXJpYWJsZUFycmF5VHlwZS9iZWZvcmU0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDA3ODAwZQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvdmFyaWFibGVBcnJheVR5cGUvYmVmb3JlNC5qYXZhCkBAIC0wLDAgKzEsNiBAQAorLy8gIkNoYW5nZSAndGVzdCcgdHlwZSB0byAnaW50W11bXSciICJ0cnVlIgorY2xhc3MgQSB7CisgICAgdm9pZCBtKCkgeworICAgICAgICBMb25nIHRlc3QgPSBuZXcgTG9uZ1tdW11bXVtde3s8Y2FyZXQ+MX0sIHsyfX07CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvdmFyaWFibGVBcnJheVR5cGUvYmVmb3JlNS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC92YXJpYWJsZUFycmF5VHlwZS9iZWZvcmU1LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTA0OGMyMgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvdmFyaWFibGVBcnJheVR5cGUvYmVmb3JlNS5qYXZhCkBAIC0wLDAgKzEsNiBAQAorLy8gIkNoYW5nZSAndGVzdCcgdHlwZSB0byAnY2hhcltdJyIgInRydWUiCitjbGFzcyBBIHsKKyAgICB2b2lkIG0oKSB7CisgICAgICAgIGZpbmFsIExvbmdbXSB0ZXN0ID0gbmV3IExvbmdbXXs8Y2FyZXQ+J2EnfTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC92YXJpYWJsZUFycmF5VHlwZS9iZWZvcmU2LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3ZhcmlhYmxlQXJyYXlUeXBlL2JlZm9yZTYuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZTViOTdmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC92YXJpYWJsZUFycmF5VHlwZS9iZWZvcmU2LmphdmEKQEAgLTAsMCArMSw2IEBACisvLyAiQ2hhbmdlICd0ZXN0JyB0eXBlIHRvICdjaGFyW10nIiAidHJ1ZSIKK2NsYXNzIEEgeworICAgIHZvaWQgbSgpIHsKKyAgICAgICAgZmluYWwgTG9uZ1tdIHRlc3QgPSB7PGNhcmV0PidhJ307CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvdmFyaWFibGVBcnJheVR5cGUvYmVmb3JlNy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC92YXJpYWJsZUFycmF5VHlwZS9iZWZvcmU3LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzY5ZDg3MAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvdmFyaWFibGVBcnJheVR5cGUvYmVmb3JlNy5qYXZhCkBAIC0wLDAgKzEsNiBAQAorLy8gIkNoYW5nZSAndGVzdCcgdHlwZSB0byAnY2hhcltdJyIgImZhbHNlIgorY2xhc3MgQSB7CisgICAgdm9pZCBtKCkgeworICAgICAgICBmaW5hbCBMb25nW10gdGVzdCA9IHs8Y2FyZXQ+J2EnLCAxfTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC92YXJpYWJsZUFycmF5VHlwZS9iZWZvcmU4LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3ZhcmlhYmxlQXJyYXlUeXBlL2JlZm9yZTguamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZDY0ZWU1Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC92YXJpYWJsZUFycmF5VHlwZS9iZWZvcmU4LmphdmEKQEAgLTAsMCArMSw2IEBACisvLyAiQ2hhbmdlICd0ZXN0JyB0eXBlIHRvICdjaGFyW11bXSciICJmYWxzZSIKK2NsYXNzIEEgeworICAgIHZvaWQgbSgpIHsKKyAgICAgICAgZmluYWwgTG9uZ1tdIHRlc3QgPSB7PGNhcmV0PnsnYSd9LCB7MX19OworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3ZhcmlhYmxlQXJyYXlUeXBlL2JlZm9yZTkuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvdmFyaWFibGVBcnJheVR5cGUvYmVmb3JlOS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRlNjM2NjYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3ZhcmlhYmxlQXJyYXlUeXBlL2JlZm9yZTkuamF2YQpAQCAtMCwwICsxLDEwIEBACisvLyAiQ2hhbmdlICdteUFycicgdHlwZSB0byAnY2hhcltdW10nIiAidHJ1ZSIKK2NsYXNzIEEgZXh0ZW5kcyBCIHsKKyAgICB2b2lkIG0oKSB7CisgICAgICAgIG15QXJyID0gbmV3IFN0cmluZ1tdW117ezxjYXJldD4nYSd9fTsKKyAgICB9Cit9CisKK2NsYXNzIEIgeworICBwcm90ZWN0ZWQgU3RyaW5nW11bXSBteUFycjsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3ZhcmlhYmxlUGFyYW1ldGVyaXplZFR5cGUvYWZ0ZXIxLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3ZhcmlhYmxlUGFyYW1ldGVyaXplZFR5cGUvYWZ0ZXIxLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWE5MTBhMwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvdmFyaWFibGVQYXJhbWV0ZXJpemVkVHlwZS9hZnRlcjEuamF2YQpAQCAtMCwwICsxLDE5IEBACisvLyAiQ2hhbmdlICdpJyB0eXBlIHRvICdhLmkuaWk8amF2YS5sYW5nLlN0cmluZz4nIiAidHJ1ZSIKK2NsYXNzIGEKK3sKKyAgY2xhc3MgaSB7CisgICAgY2xhc3MgaWk8RT4geworCisgICAgfQorICB9CisgIGNsYXNzIGkyIHsKKyAgICBjbGFzcyBpaSB7CisKKyAgICB9CisgIH0KKworICAgcHVibGljIHZvaWQgZm9vKCkKKyAgIHsKKyAgICAgIGkuaWk8PGNhcmV0PlN0cmluZz4gaTsKKyAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvdmFyaWFibGVQYXJhbWV0ZXJpemVkVHlwZS9iZWZvcmUxLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3ZhcmlhYmxlUGFyYW1ldGVyaXplZFR5cGUvYmVmb3JlMS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRlZmM2NTYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3ZhcmlhYmxlUGFyYW1ldGVyaXplZFR5cGUvYmVmb3JlMS5qYXZhCkBAIC0wLDAgKzEsMTkgQEAKKy8vICJDaGFuZ2UgJ2knIHR5cGUgdG8gJ2EuaS5paTxqYXZhLmxhbmcuU3RyaW5nPiciICJ0cnVlIgorY2xhc3MgYQoreworICBjbGFzcyBpIHsKKyAgICBjbGFzcyBpaTxFPiB7CisKKyAgICB9CisgIH0KKyAgY2xhc3MgaTIgeworICAgIGNsYXNzIGlpIHsKKworICAgIH0KKyAgfQorCisgICBwdWJsaWMgdm9pZCBmb28oKQorICAgeworICAgICAgaTIuaWk8PGNhcmV0PlN0cmluZz4gaTsKKyAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvdmFyaWFibGVQYXJhbWV0ZXJpemVkVHlwZS9iZWZvcmUyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3ZhcmlhYmxlUGFyYW1ldGVyaXplZFR5cGUvYmVmb3JlMi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg4Y2FkMmUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3ZhcmlhYmxlUGFyYW1ldGVyaXplZFR5cGUvYmVmb3JlMi5qYXZhCkBAIC0wLDAgKzEsMTggQEAKKy8vICJDaGFuZ2UgJ3MnIHR5cGUgdG8gJ08uZjxqYXZhLmxhbmcuU3RyaW5nPiciICJmYWxzZSIKKworY2xhc3MgTyB7CisKKyAgICBmIGYoKSB7CisgICAgICAgIHJldHVybiBudWxsOworICAgIH0KKworICAgIGNsYXNzIGYgPFQ+IHsKKyAgICB9CisKKyAgICB2b2lkIGcoKSB7CisKKyAgICAgICAgZmluYWwgZiBzID0gdGhpcy48PGNhcmV0PlN0cmluZz5mKCk7CisKKyAgICB9CisKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvdmFyaWFibGVUeXBlL2FmdGVyMS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC92YXJpYWJsZVR5cGUvYWZ0ZXIxLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTU4OGJmN2MKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3ZhcmlhYmxlVHlwZS9hZnRlcjEuamF2YQpAQCAtMCwwICsxLDEwIEBACisvLyAiQ2hhbmdlICdpJyB0eXBlIHRvICdkb3VibGUnIiAidHJ1ZSIKK2ltcG9ydCBqYXZhLmlvLio7CisKK2NsYXNzIGEgeworIHZvaWQgZigpIHsKKyAgIGRvdWJsZSBpOworICAgPGNhcmV0PmkgPSA2LjY7CisgfQorfQorCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3ZhcmlhYmxlVHlwZS9hZnRlcjIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvdmFyaWFibGVUeXBlL2FmdGVyMi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNlZTAzM2UKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3ZhcmlhYmxlVHlwZS9hZnRlcjIuamF2YQpAQCAtMCwwICsxLDEwIEBACisvLyAiQ2hhbmdlICdpJyB0eXBlIHRvICdqYXZhLmxhbmcuU3RyaW5nJyIgInRydWUiCitpbXBvcnQgamF2YS5pby4qOworCitjbGFzcyBhIHsKKyB2b2lkIGYoKSB7CisgICBTdHJpbmcgaTsKKyAgIDxjYXJldD5pID0gImRkIjsKKyB9Cit9CisKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvdmFyaWFibGVUeXBlL2FmdGVyMy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC92YXJpYWJsZVR5cGUvYWZ0ZXIzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjFkNTJjMQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvdmFyaWFibGVUeXBlL2FmdGVyMy5qYXZhCkBAIC0wLDAgKzEsOSBAQAorLy8gIkNoYW5nZSAnaScgdHlwZSB0byAnY2hhciciICJ0cnVlIgoraW1wb3J0IGphdmEuaW8uKjsKKworY2xhc3MgYSB7Cisgdm9pZCBmKCkgeworICAgPGNhcmV0PmNoYXIgaSA9ICdkJzsKKyB9Cit9CisKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvdmFyaWFibGVUeXBlL2FmdGVyNC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC92YXJpYWJsZVR5cGUvYWZ0ZXI0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDdiNDE2MwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvdmFyaWFibGVUeXBlL2FmdGVyNC5qYXZhCkBAIC0wLDAgKzEsOCBAQAorLy8gIkNoYW5nZSAncycgdHlwZSB0byAnamF2YS5sYW5nLlJ1bm5hYmxlJyIgInRydWUiCisKK2NsYXNzIGEgeworICAgIFJ1bm5hYmxlIHMgPSBuZXcgUnVubmFibGUoKSB7CisgICAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsgfQorICAgIH07Cit9CisKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvdmFyaWFibGVUeXBlL2FmdGVyNS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC92YXJpYWJsZVR5cGUvYWZ0ZXI1LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmE3Zjg0MQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvdmFyaWFibGVUeXBlL2FmdGVyNS5qYXZhCkBAIC0wLDAgKzEsMTIgQEAKKy8vICJDaGFuZ2UgJ2knIHR5cGUgdG8gJ2phdmEubGFuZy5TdHJpbmcnIiAidHJ1ZSIKKworY2xhc3MgQmFzZSB7Cisgdm9pZCBmb28oU3RyaW5nIGkpIHt9Cit9CisKK2NsYXNzIEV4IGV4dGVuZHMgQmFzZSB7CisgQE92ZXJyaWRlCisgdm9pZCBmb28oU3RyaW5nIGkpIHsKKyAgIGkgPSAiYWJjIjsgLy8gd2hlbiBJIGludm9rZSAiQ2hhbmdlIHR5cGUgb2YgJ2knIHRvICdTdHJpbmcnIiwgYmFzZSBtZXRob2QgaXMgaWdub3JlZCBzbyBtZXRob2Qgb3ZlcnJpZGluZyBpcyBsb3N0CisgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvdmFyaWFibGVUeXBlL2FmdGVySW5DYWxsLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3ZhcmlhYmxlVHlwZS9hZnRlckluQ2FsbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM1YjI5MDQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3ZhcmlhYmxlVHlwZS9hZnRlckluQ2FsbC5qYXZhCkBAIC0wLDAgKzEsOCBAQAorLy8gIkNoYW5nZSAnaScgdHlwZSB0byAnamF2YS5sYW5nLlN0cmluZyciICJ0cnVlIgorCitjbGFzcyBFeHsKKyB2b2lkIGZvbyhTdHJpbmcgaSkgeworICAgYmFyKGkpOworIH0KKyB2b2lkIGJhcihTdHJpbmcgcykge30KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3ZhcmlhYmxlVHlwZS9iZWZvcmUxLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3ZhcmlhYmxlVHlwZS9iZWZvcmUxLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGU4NzQyYgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvdmFyaWFibGVUeXBlL2JlZm9yZTEuamF2YQpAQCAtMCwwICsxLDEwIEBACisvLyAiQ2hhbmdlICdpJyB0eXBlIHRvICdkb3VibGUnIiAidHJ1ZSIKK2ltcG9ydCBqYXZhLmlvLio7CisKK2NsYXNzIGEgeworIHZvaWQgZigpIHsKKyAgIGludCBpOworICAgPGNhcmV0PmkgPSA2LjY7CisgfQorfQorCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3ZhcmlhYmxlVHlwZS9iZWZvcmUyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3ZhcmlhYmxlVHlwZS9iZWZvcmUyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmI4MGRhNgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvdmFyaWFibGVUeXBlL2JlZm9yZTIuamF2YQpAQCAtMCwwICsxLDEwIEBACisvLyAiQ2hhbmdlICdpJyB0eXBlIHRvICdqYXZhLmxhbmcuU3RyaW5nJyIgInRydWUiCitpbXBvcnQgamF2YS5pby4qOworCitjbGFzcyBhIHsKKyB2b2lkIGYoKSB7CisgICBpbnQgaTsKKyAgIDxjYXJldD5pID0gImRkIjsKKyB9Cit9CisKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvdmFyaWFibGVUeXBlL2JlZm9yZTMuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvdmFyaWFibGVUeXBlL2JlZm9yZTMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOTRhZDlhCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC92YXJpYWJsZVR5cGUvYmVmb3JlMy5qYXZhCkBAIC0wLDAgKzEsOSBAQAorLy8gIkNoYW5nZSAnaScgdHlwZSB0byAnY2hhciciICJ0cnVlIgoraW1wb3J0IGphdmEuaW8uKjsKKworY2xhc3MgYSB7Cisgdm9pZCBmKCkgeworICAgPGNhcmV0PlN0cmluZyBpID0gJ2QnOworIH0KK30KKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC92YXJpYWJsZVR5cGUvYmVmb3JlNC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC92YXJpYWJsZVR5cGUvYmVmb3JlNC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYyNjVlNTYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3ZhcmlhYmxlVHlwZS9iZWZvcmU0LmphdmEKQEAgLTAsMCArMSw4IEBACisvLyAiQ2hhbmdlICdzJyB0eXBlIHRvICdqYXZhLmxhbmcuUnVubmFibGUnIiAidHJ1ZSIKKworY2xhc3MgYSB7CisgICAgU3RyaW5nIHMgPSA8Y2FyZXQ+bmV3IFJ1bm5hYmxlKCkgeworICAgICAgICBwdWJsaWMgdm9pZCBydW4oKSB7IH0KKyAgICB9OworfQorCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3ZhcmlhYmxlVHlwZS9iZWZvcmU1LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3ZhcmlhYmxlVHlwZS9iZWZvcmU1LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2VhZDczOAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvdmFyaWFibGVUeXBlL2JlZm9yZTUuamF2YQpAQCAtMCwwICsxLDEyIEBACisvLyAiQ2hhbmdlICdpJyB0eXBlIHRvICdqYXZhLmxhbmcuU3RyaW5nJyIgInRydWUiCisKK2NsYXNzIEJhc2UgeworIHZvaWQgZm9vKGludCBpKSB7fQorfQorCitjbGFzcyBFeCBleHRlbmRzIEJhc2UgeworIEBPdmVycmlkZQorIHZvaWQgZm9vKGludCBpKSB7CisgICBpID0gPGNhcmV0PiJhYmMiOyAvLyB3aGVuIEkgaW52b2tlICJDaGFuZ2UgdHlwZSBvZiAnaScgdG8gJ1N0cmluZyciLCBiYXNlIG1ldGhvZCBpcyBpZ25vcmVkIHNvIG1ldGhvZCBvdmVycmlkaW5nIGlzIGxvc3QKKyB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC92YXJpYWJsZVR5cGUvYmVmb3JlSW5DYWxsLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3ZhcmlhYmxlVHlwZS9iZWZvcmVJbkNhbGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MmEzMmM5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC92YXJpYWJsZVR5cGUvYmVmb3JlSW5DYWxsLmphdmEKQEAgLTAsMCArMSw4IEBACisvLyAiQ2hhbmdlICdpJyB0eXBlIHRvICdqYXZhLmxhbmcuU3RyaW5nJyIgInRydWUiCisKK2NsYXNzIEV4eworIHZvaWQgZm9vKGludCBpKSB7CisgICBiYXIoPGNhcmV0PmkpOworIH0KKyB2b2lkIGJhcihTdHJpbmcgcykge30KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3ZhcmlhYmxlVHlwZS9iZWZvcmVJbkxpYkNhbGwuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvdmFyaWFibGVUeXBlL2JlZm9yZUluTGliQ2FsbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMzN2FmOGEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3ZhcmlhYmxlVHlwZS9iZWZvcmVJbkxpYkNhbGwuamF2YQpAQCAtMCwwICsxLDkgQEAKKy8vICJDaGFuZ2UgJ2knIHR5cGUgdG8gJ2xvbmcnIiAiZmFsc2UiCisKK2NsYXNzIE0gZXh0ZW5kcyBUaHJlYWQgeworICBAT3ZlcnJpZGUKKyAgcHVibGljIGJvb2xlYW4gZXF1YWxzKE9iamVjdCBvYmopIHsKKyAgICBUaHJlYWQuc2xlZXAoPGNhcmV0Pm9iaik7CisgICAgcmV0dXJuIHN1cGVyLmVxdWFscyhvYmopOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC93cmFwRXhwcmVzc2lvbi9hZnRlclBhcnNlQXNzaWdubWVudC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC93cmFwRXhwcmVzc2lvbi9hZnRlclBhcnNlQXNzaWdubWVudC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVhMjBiODcKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3dyYXBFeHByZXNzaW9uL2FmdGVyUGFyc2VBc3NpZ25tZW50LmphdmEKQEAgLTAsMCArMSw0IEBACisvLyAiV3JhcCB1c2luZyAnTG9uZy5wYXJzZUxvbmcnIiAidHJ1ZSIKK3B1YmxpYyBjbGFzcyBUZXN0IHsKKyAgcHJpdmF0ZSBsb25nIGxvID0gTG9uZy5wYXJzZUxvbmcoIjQyIik7Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3dyYXBFeHByZXNzaW9uL2FmdGVyUGFyc2VJbkNhbGwuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvd3JhcEV4cHJlc3Npb24vYWZ0ZXJQYXJzZUluQ2FsbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVjZTMyYjMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3dyYXBFeHByZXNzaW9uL2FmdGVyUGFyc2VJbkNhbGwuamF2YQpAQCAtMCwwICsxLDggQEAKKy8vICJXcmFwIHVzaW5nICdMb25nLnBhcnNlTG9uZyciICJ0cnVlIgorcHVibGljIGNsYXNzIFRlc3QgeworICB2b2lkIGJhKCkgeworICAgIGZhKExvbmcucGFyc2VMb25nKCI0MiIpKTsKKyAgfQorCisgIHZvaWQgZmEobG9uZyBsKXt9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3dyYXBFeHByZXNzaW9uL2FmdGVyUGFyc2VJblZhcmFyZ3NDYWxsLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3dyYXBFeHByZXNzaW9uL2FmdGVyUGFyc2VJblZhcmFyZ3NDYWxsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzE3MDYxMwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvd3JhcEV4cHJlc3Npb24vYWZ0ZXJQYXJzZUluVmFyYXJnc0NhbGwuamF2YQpAQCAtMCwwICsxLDggQEAKKy8vICJXcmFwIHVzaW5nICdMb25nLnBhcnNlTG9uZyciICJ0cnVlIgorcHVibGljIGNsYXNzIFRlc3QgeworICB2b2lkIGJhKGxvbmcgbCkgeworICAgIGZhKGwsIExvbmcucGFyc2VMb25nKCI0MiIpKTsKKyAgfQorCisgIHZvaWQgZmEobG9uZy4uLiBsKXt9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3dyYXBFeHByZXNzaW9uL2FmdGVyVmFsdWVvZkFzc2lnbm1lbnQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvd3JhcEV4cHJlc3Npb24vYWZ0ZXJWYWx1ZW9mQXNzaWdubWVudC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFhYzAyYWQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3dyYXBFeHByZXNzaW9uL2FmdGVyVmFsdWVvZkFzc2lnbm1lbnQuamF2YQpAQCAtMCwwICsxLDQgQEAKKy8vICJXcmFwIHVzaW5nICdMb25nLnZhbHVlT2YnIiAidHJ1ZSIKK3B1YmxpYyBjbGFzcyBUZXN0IHsKKyAgcHJpdmF0ZSBMb25nIGxvID0gTG9uZy52YWx1ZU9mKCI0MiIpOworfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC93cmFwRXhwcmVzc2lvbi9hZnRlclZhbHVlb2ZDYWxsLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3dyYXBFeHByZXNzaW9uL2FmdGVyVmFsdWVvZkNhbGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOTMzM2FjCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC93cmFwRXhwcmVzc2lvbi9hZnRlclZhbHVlb2ZDYWxsLmphdmEKQEAgLTAsMCArMSw4IEBACisvLyAiV3JhcCB1c2luZyAnTG9uZy52YWx1ZU9mJyIgInRydWUiCitwdWJsaWMgY2xhc3MgVGVzdCB7CisgIHZvaWQgYmEoKSB7CisgICAgZmEoTG9uZy52YWx1ZU9mKCI0MiIpKTsKKyAgfQorCisgIHZvaWQgZmEoTG9uZyBsKXt9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3dyYXBFeHByZXNzaW9uL2FmdGVyVmFsdWVvZkluVmFyYXJnc0NhbGwuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvd3JhcEV4cHJlc3Npb24vYWZ0ZXJWYWx1ZW9mSW5WYXJhcmdzQ2FsbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjExZTYxYjEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3dyYXBFeHByZXNzaW9uL2FmdGVyVmFsdWVvZkluVmFyYXJnc0NhbGwuamF2YQpAQCAtMCwwICsxLDggQEAKKy8vICJXcmFwIHVzaW5nICdMb25nLnZhbHVlT2YnIiAidHJ1ZSIKK3B1YmxpYyBjbGFzcyBUZXN0IHsKKyAgdm9pZCBiYShMb25nIGwpIHsKKyAgICBmYShsLCBMb25nLnZhbHVlT2YoIjQyIikpOworICB9CisKKyAgdm9pZCBmYShMb25nLi4uIGwpe30KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvd3JhcEV4cHJlc3Npb24vYWZ0ZXJWYWx1ZW9mVmFyYXJnc0NhbGwuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvd3JhcEV4cHJlc3Npb24vYWZ0ZXJWYWx1ZW9mVmFyYXJnc0NhbGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MjkxZTQzCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC93cmFwRXhwcmVzc2lvbi9hZnRlclZhbHVlb2ZWYXJhcmdzQ2FsbC5qYXZhCkBAIC0wLDAgKzEsOCBAQAorLy8gIldyYXAgdXNpbmcgJ0xvbmcudmFsdWVPZiciICJ0cnVlIgorcHVibGljIGNsYXNzIFRlc3QgeworICB2b2lkIGJhKCkgeworICAgIGZhKExvbmcudmFsdWVPZigiNDIiKSk7CisgIH0KKworICB2b2lkIGZhKExvbmcgbCwgaW50Li4uIGlpKXt9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3dyYXBFeHByZXNzaW9uL2JlZm9yZVBhcnNlQXNzaWdubWVudC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC93cmFwRXhwcmVzc2lvbi9iZWZvcmVQYXJzZUFzc2lnbm1lbnQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNzAwZDAwCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC93cmFwRXhwcmVzc2lvbi9iZWZvcmVQYXJzZUFzc2lnbm1lbnQuamF2YQpAQCAtMCwwICsxLDQgQEAKKy8vICJXcmFwIHVzaW5nICdMb25nLnBhcnNlTG9uZyciICJ0cnVlIgorcHVibGljIGNsYXNzIFRlc3QgeworICBwcml2YXRlIGxvbmcgbDxjYXJldD5vID0gIjQyIjsKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvd3JhcEV4cHJlc3Npb24vYmVmb3JlUGFyc2VJbkNhbGwuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvd3JhcEV4cHJlc3Npb24vYmVmb3JlUGFyc2VJbkNhbGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNGQwMjgzZQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvd3JhcEV4cHJlc3Npb24vYmVmb3JlUGFyc2VJbkNhbGwuamF2YQpAQCAtMCwwICsxLDggQEAKKy8vICJXcmFwIHVzaW5nICdMb25nLnBhcnNlTG9uZyciICJ0cnVlIgorcHVibGljIGNsYXNzIFRlc3QgeworICB2b2lkIGJhKCkgeworICAgIGZhKCI0PGNhcmV0PjIiKTsKKyAgfQorCisgIHZvaWQgZmEobG9uZyBsKXt9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3dyYXBFeHByZXNzaW9uL2JlZm9yZVBhcnNlSW5WYXJhcmdzQ2FsbC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC93cmFwRXhwcmVzc2lvbi9iZWZvcmVQYXJzZUluVmFyYXJnc0NhbGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MmNhNjEzCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC93cmFwRXhwcmVzc2lvbi9iZWZvcmVQYXJzZUluVmFyYXJnc0NhbGwuamF2YQpAQCAtMCwwICsxLDggQEAKKy8vICJXcmFwIHVzaW5nICdMb25nLnBhcnNlTG9uZyciICJ0cnVlIgorcHVibGljIGNsYXNzIFRlc3QgeworICB2b2lkIGJhKGxvbmcgbCkgeworICAgIGZhKGwsICI0PGNhcmV0PjIiKTsKKyAgfQorCisgIHZvaWQgZmEobG9uZy4uLiBsKXt9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3dyYXBFeHByZXNzaW9uL2JlZm9yZVZhbHVlb2ZBc3NpZ25tZW50LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3dyYXBFeHByZXNzaW9uL2JlZm9yZVZhbHVlb2ZBc3NpZ25tZW50LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGI4MTIxMQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvd3JhcEV4cHJlc3Npb24vYmVmb3JlVmFsdWVvZkFzc2lnbm1lbnQuamF2YQpAQCAtMCwwICsxLDQgQEAKKy8vICJXcmFwIHVzaW5nICdMb25nLnZhbHVlT2YnIiAidHJ1ZSIKK3B1YmxpYyBjbGFzcyBUZXN0IHsKKyAgcHJpdmF0ZSBMb25nIGw8Y2FyZXQ+byA9ICI0MiI7Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3dyYXBFeHByZXNzaW9uL2JlZm9yZVZhbHVlb2ZDYWxsLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3dyYXBFeHByZXNzaW9uL2JlZm9yZVZhbHVlb2ZDYWxsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTc2MDRiMgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvd3JhcEV4cHJlc3Npb24vYmVmb3JlVmFsdWVvZkNhbGwuamF2YQpAQCAtMCwwICsxLDggQEAKKy8vICJXcmFwIHVzaW5nICdMb25nLnZhbHVlT2YnIiAidHJ1ZSIKK3B1YmxpYyBjbGFzcyBUZXN0IHsKKyAgdm9pZCBiYSgpIHsKKyAgICBmYSgiNDxjYXJldD4yIik7CisgIH0KKworICB2b2lkIGZhKExvbmcgbCl7fQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC93cmFwRXhwcmVzc2lvbi9iZWZvcmVWYWx1ZW9mSW5WYXJhcmdzQ2FsbC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC93cmFwRXhwcmVzc2lvbi9iZWZvcmVWYWx1ZW9mSW5WYXJhcmdzQ2FsbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE0OWEzMjkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3dyYXBFeHByZXNzaW9uL2JlZm9yZVZhbHVlb2ZJblZhcmFyZ3NDYWxsLmphdmEKQEAgLTAsMCArMSw4IEBACisvLyAiV3JhcCB1c2luZyAnTG9uZy52YWx1ZU9mJyIgInRydWUiCitwdWJsaWMgY2xhc3MgVGVzdCB7CisgIHZvaWQgYmEoTG9uZyBsKSB7CisgICAgZmEobCwgIjQ8Y2FyZXQ+MiIpOworICB9CisKKyAgdm9pZCBmYShMb25nLi4uIGwpe30KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvd3JhcEV4cHJlc3Npb24vYmVmb3JlVmFsdWVvZlZhcmFyZ3NDYWxsLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3dyYXBFeHByZXNzaW9uL2JlZm9yZVZhbHVlb2ZWYXJhcmdzQ2FsbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdkZDZmOTEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3dyYXBFeHByZXNzaW9uL2JlZm9yZVZhbHVlb2ZWYXJhcmdzQ2FsbC5qYXZhCkBAIC0wLDAgKzEsOCBAQAorLy8gIldyYXAgdXNpbmcgJ0xvbmcudmFsdWVPZiciICJ0cnVlIgorcHVibGljIGNsYXNzIFRlc3QgeworICB2b2lkIGJhKCkgeworICAgIGZhKCI0PGNhcmV0PjIiKTsKKyAgfQorCisgIHZvaWQgZmEoTG9uZyBsLCBpbnQuLi4gaWkpe30KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcmVwbGFjZUltcGxlbWVudHNXaXRoU3RhdGljSW1wb3J0L2FmdGVyMS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9yZXBsYWNlSW1wbGVtZW50c1dpdGhTdGF0aWNJbXBvcnQvYWZ0ZXIxLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmEyMDNkNAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcmVwbGFjZUltcGxlbWVudHNXaXRoU3RhdGljSW1wb3J0L2FmdGVyMS5qYXZhCkBAIC0wLDAgKzEsMTIgQEAKK2ltcG9ydCBzdGF0aWMgSS5GT087CisKKy8vICJSZXBsYWNlIEltcGxlbWVudHMgd2l0aCBTdGF0aWMgSW1wb3J0IiAidHJ1ZSIKK3B1YmxpYyBjbGFzcyBYIHsKKyAgdm9pZCBmb28oKSB7CisgICAgU3lzdGVtLm91dC5wcmludGxuKEZPTyk7CisgIH0KK30KKworaW50ZXJmYWNlIEkgeworICBTdHJpbmcgRk9PID0gImZvbyI7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9yZXBsYWNlSW1wbGVtZW50c1dpdGhTdGF0aWNJbXBvcnQvYWZ0ZXIxMC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9yZXBsYWNlSW1wbGVtZW50c1dpdGhTdGF0aWNJbXBvcnQvYWZ0ZXIxMC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU5NjFhY2UKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3JlcGxhY2VJbXBsZW1lbnRzV2l0aFN0YXRpY0ltcG9ydC9hZnRlcjEwLmphdmEKQEAgLTAsMCArMSwyNSBAQAoraW1wb3J0IHN0YXRpYyBJbi5GT087CisKKy8vICJSZXBsYWNlIEltcGxlbWVudHMgd2l0aCBTdGF0aWMgSW1wb3J0IiAidHJ1ZSIKK2ludGVyZmFjZSBJbiB7CisgICAgaW50IEZPTyA9IDA7Cit9CisKK2NsYXNzIElJIHsKKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihGT08pOworICAgIH0KK30KKworY2xhc3MgSUkxIHsKKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihGT08pOworICAgIH0KK30KKworY2xhc3MgVWMgeworICAgIHN0YXRpYyBmaW5hbCBTdHJpbmcgRk9PID0gIiI7CisgICAgdm9pZCBnKCkgeworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIiIgKyBJbi5GT08pOworICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcmVwbGFjZUltcGxlbWVudHNXaXRoU3RhdGljSW1wb3J0L2FmdGVyMTEuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcmVwbGFjZUltcGxlbWVudHNXaXRoU3RhdGljSW1wb3J0L2FmdGVyMTEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yY2YzYTBlCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9yZXBsYWNlSW1wbGVtZW50c1dpdGhTdGF0aWNJbXBvcnQvYWZ0ZXIxMS5qYXZhCkBAIC0wLDAgKzEsMjggQEAKK2ltcG9ydCBzdGF0aWMgSW4uRk9POworCisvLyAiUmVwbGFjZSBJbXBsZW1lbnRzIHdpdGggU3RhdGljIEltcG9ydCIgInRydWUiCitpbnRlcmZhY2UgSW4geworICAgIGludCBGT08gPSAwOworfQorCitjbGFzcyBJSSB7CisgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oRk9PKTsKKyAgICB9Cit9CisKKy8qKgorICoge0BsaW5rIEluLkZPT30KKyAqLworY2xhc3MgSUkxIHsKKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihGT08pOworICAgIH0KK30KKworY2xhc3MgVWMgeworICAgIHN0YXRpYyBmaW5hbCBTdHJpbmcgRk9PID0gIiI7CisgICAgdm9pZCBnKCkgeworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIiIgKyBJbi5GT08pOworICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcmVwbGFjZUltcGxlbWVudHNXaXRoU3RhdGljSW1wb3J0L2FmdGVyMTIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcmVwbGFjZUltcGxlbWVudHNXaXRoU3RhdGljSW1wb3J0L2FmdGVyMTIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MzU2ZTNkCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9yZXBsYWNlSW1wbGVtZW50c1dpdGhTdGF0aWNJbXBvcnQvYWZ0ZXIxMi5qYXZhCkBAIC0wLDAgKzEsMjggQEAKK2ltcG9ydCBzdGF0aWMgSW4uRk9POworCisvLyAiUmVwbGFjZSBJbXBsZW1lbnRzIHdpdGggU3RhdGljIEltcG9ydCIgInRydWUiCitpbnRlcmZhY2UgSW4geworICAgIGludCBGT08gPSAwOworfQorCitjbGFzcyBJSSB7CisgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oRk9PKTsKKyAgICB9Cit9CisKKy8qKgorICoge0BsaW5rIEkjRk9PfQorICovCitjbGFzcyBJSTEgeworICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKEZPTyk7CisgICAgfQorfQorCitjbGFzcyBVYyB7CisgICAgc3RhdGljIGZpbmFsIFN0cmluZyBGT08gPSAiIjsKKyAgICB2b2lkIGcoKSB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiIiArIEluLkZPTyk7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9yZXBsYWNlSW1wbGVtZW50c1dpdGhTdGF0aWNJbXBvcnQvYWZ0ZXIyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3JlcGxhY2VJbXBsZW1lbnRzV2l0aFN0YXRpY0ltcG9ydC9hZnRlcjIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMzhjNTFmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9yZXBsYWNlSW1wbGVtZW50c1dpdGhTdGF0aWNJbXBvcnQvYWZ0ZXIyLmphdmEKQEAgLTAsMCArMSwyMiBAQAoraW1wb3J0IHN0YXRpYyBJLio7CisKKy8vICJSZXBsYWNlIEltcGxlbWVudHMgd2l0aCBTdGF0aWMgSW1wb3J0IiAidHJ1ZSIKK3B1YmxpYyBjbGFzcyBYIHsKKyAgdm9pZCBmb28oKSB7CisgICAgU3lzdGVtLm91dC5wcmludGxuKEZPTyk7CisgICAgU3lzdGVtLm91dC5wcmludGxuKEZPTzEpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbihGT08yKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oRk9PMyk7CisgICAgU3lzdGVtLm91dC5wcmludGxuKEZPTzQpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbihGT081KTsKKyAgfQorfQorCitpbnRlcmZhY2UgSSB7CisgIFN0cmluZyBGT08gPSAiZm9vIjsKKyAgU3RyaW5nIEZPTzEgPSAiZm9vIjsKKyAgU3RyaW5nIEZPTzIgPSAiZm9vIjsKKyAgU3RyaW5nIEZPTzMgPSAiZm9vIjsKKyAgU3RyaW5nIEZPTzQgPSAiZm9vIjsKKyAgU3RyaW5nIEZPTzUgPSAiZm9vIjsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3JlcGxhY2VJbXBsZW1lbnRzV2l0aFN0YXRpY0ltcG9ydC9hZnRlcjYuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcmVwbGFjZUltcGxlbWVudHNXaXRoU3RhdGljSW1wb3J0L2FmdGVyNi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg1OGU3NmMxCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9yZXBsYWNlSW1wbGVtZW50c1dpdGhTdGF0aWNJbXBvcnQvYWZ0ZXI2LmphdmEKQEAgLTAsMCArMSwxOCBAQAoraW1wb3J0IHN0YXRpYyBJLkZPTzsKK2ltcG9ydCBzdGF0aWMgSTEuQkFaWjsKKworLy8gIlJlcGxhY2UgSW1wbGVtZW50cyB3aXRoIFN0YXRpYyBJbXBvcnQiICJ0cnVlIgorcHVibGljIGNsYXNzIFggeworICB2b2lkIGJhcigpIHsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oRk9PKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oQkFaWik7CisgIH0KK30KKworaW50ZXJmYWNlIEkgZXh0ZW5kcyBJMXsKKyAgU3RyaW5nIEZPTyA9ICJmb28iOworfQorCitpbnRlcmZhY2UgSTEgeworICBTdHJpbmcgQkFaWiA9ICJiYXp6IjsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3JlcGxhY2VJbXBsZW1lbnRzV2l0aFN0YXRpY0ltcG9ydC9hZnRlcjcuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcmVwbGFjZUltcGxlbWVudHNXaXRoU3RhdGljSW1wb3J0L2FmdGVyNy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhiYWM4MjFmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9yZXBsYWNlSW1wbGVtZW50c1dpdGhTdGF0aWNJbXBvcnQvYWZ0ZXI3LmphdmEKQEAgLTAsMCArMSwxNyBAQAoraW1wb3J0IHN0YXRpYyBJMS5CQVpaOworCisvLyAiUmVwbGFjZSBJbXBsZW1lbnRzIHdpdGggU3RhdGljIEltcG9ydCIgInRydWUiCitwdWJsaWMgY2xhc3MgWCBpbXBsZW1lbnRzIEkgeworICB2b2lkIGJhcigpIHsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oRk9PKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oQkFaWik7CisgIH0KK30KKworaW50ZXJmYWNlIEkgeworICBTdHJpbmcgRk9PID0gImZvbyI7Cit9CisKK2ludGVyZmFjZSBJMSB7CisgIFN0cmluZyBCQVpaID0gImJhenoiOworfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9yZXBsYWNlSW1wbGVtZW50c1dpdGhTdGF0aWNJbXBvcnQvYWZ0ZXI4LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3JlcGxhY2VJbXBsZW1lbnRzV2l0aFN0YXRpY0ltcG9ydC9hZnRlcjguamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ODU4ZTUyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9yZXBsYWNlSW1wbGVtZW50c1dpdGhTdGF0aWNJbXBvcnQvYWZ0ZXI4LmphdmEKQEAgLTAsMCArMSwxOCBAQAoraW1wb3J0IHN0YXRpYyBJMS5CQVpaOworaW1wb3J0IHN0YXRpYyBJSS5GT087CisKKy8vICJSZXBsYWNlIEltcGxlbWVudHMgd2l0aCBTdGF0aWMgSW1wb3J0IiAidHJ1ZSIKK3B1YmxpYyBjbGFzcyBYIHsKKyAgdm9pZCBiYXIoKSB7CisgICAgU3lzdGVtLm91dC5wcmludGxuKEZPTyk7CisgICAgU3lzdGVtLm91dC5wcmludGxuKEJBWlopOworICB9Cit9CisKK2ludGVyZmFjZSBJSSBleHRlbmRzIEkxeworICBTdHJpbmcgRk9PID0gImZvbyI7Cit9CisKK2ludGVyZmFjZSBJMSB7CisgIFN0cmluZyBCQVpaID0gImJhenoiOworfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9yZXBsYWNlSW1wbGVtZW50c1dpdGhTdGF0aWNJbXBvcnQvYWZ0ZXI5LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3JlcGxhY2VJbXBsZW1lbnRzV2l0aFN0YXRpY0ltcG9ydC9hZnRlcjkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YzBkYTQyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9yZXBsYWNlSW1wbGVtZW50c1dpdGhTdGF0aWNJbXBvcnQvYWZ0ZXI5LmphdmEKQEAgLTAsMCArMSwxOSBAQAoraW1wb3J0IHN0YXRpYyBJbi5GT087CisKKy8vICJSZXBsYWNlIEltcGxlbWVudHMgd2l0aCBTdGF0aWMgSW1wb3J0IiAidHJ1ZSIKK2ludGVyZmFjZSBJbiB7CisgICAgaW50IEZPTyA9IDA7Cit9CisKK2NsYXNzIElJIHsKKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihGT08pOworICAgIH0KK30KKworY2xhc3MgSUkxIHsKKyAgICBpbnQgRk9PID0gOTsKKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihJbi5GT08pOworICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcmVwbGFjZUltcGxlbWVudHNXaXRoU3RhdGljSW1wb3J0L2JlZm9yZTEuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcmVwbGFjZUltcGxlbWVudHNXaXRoU3RhdGljSW1wb3J0L2JlZm9yZTEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZWI0NWU1YgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcmVwbGFjZUltcGxlbWVudHNXaXRoU3RhdGljSW1wb3J0L2JlZm9yZTEuamF2YQpAQCAtMCwwICsxLDEwIEBACisvLyAiUmVwbGFjZSBJbXBsZW1lbnRzIHdpdGggU3RhdGljIEltcG9ydCIgInRydWUiCitwdWJsaWMgY2xhc3MgWCBpbXBsZW1lbnRzIDxjYXJldD5JIHsKKyAgdm9pZCBmb28oKSB7CisgICAgU3lzdGVtLm91dC5wcmludGxuKEZPTyk7CisgIH0KK30KKworaW50ZXJmYWNlIEkgeworICBTdHJpbmcgRk9PID0gImZvbyI7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9yZXBsYWNlSW1wbGVtZW50c1dpdGhTdGF0aWNJbXBvcnQvYmVmb3JlMTAuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcmVwbGFjZUltcGxlbWVudHNXaXRoU3RhdGljSW1wb3J0L2JlZm9yZTEwLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTg3MGQzNAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcmVwbGFjZUltcGxlbWVudHNXaXRoU3RhdGljSW1wb3J0L2JlZm9yZTEwLmphdmEKQEAgLTAsMCArMSwyMyBAQAorLy8gIlJlcGxhY2UgSW1wbGVtZW50cyB3aXRoIFN0YXRpYyBJbXBvcnQiICJ0cnVlIgoraW50ZXJmYWNlIEk8Y2FyZXQ+biB7CisgICAgaW50IEZPTyA9IDA7Cit9CisKK2NsYXNzIElJIGltcGxlbWVudHMgSW4geworICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKEZPTyk7CisgICAgfQorfQorCitjbGFzcyBJSTEgaW1wbGVtZW50cyBJbiB7CisgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oSUkxLkZPTyk7CisgICAgfQorfQorCitjbGFzcyBVYyB7CisgICAgc3RhdGljIGZpbmFsIFN0cmluZyBGT08gPSAiIjsKKyAgICB2b2lkIGcoKSB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiIiArIElJLkZPTyk7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9yZXBsYWNlSW1wbGVtZW50c1dpdGhTdGF0aWNJbXBvcnQvYmVmb3JlMTEuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcmVwbGFjZUltcGxlbWVudHNXaXRoU3RhdGljSW1wb3J0L2JlZm9yZTExLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWQxNTljZQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcmVwbGFjZUltcGxlbWVudHNXaXRoU3RhdGljSW1wb3J0L2JlZm9yZTExLmphdmEKQEAgLTAsMCArMSwyNiBAQAorLy8gIlJlcGxhY2UgSW1wbGVtZW50cyB3aXRoIFN0YXRpYyBJbXBvcnQiICJ0cnVlIgoraW50ZXJmYWNlIEk8Y2FyZXQ+biB7CisgICAgaW50IEZPTyA9IDA7Cit9CisKK2NsYXNzIElJIGltcGxlbWVudHMgSW4geworICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKEZPTyk7CisgICAgfQorfQorCisvKioKKyAqIHtAbGluayBJbi5GT099CisgKi8KK2NsYXNzIElJMSBpbXBsZW1lbnRzIEluIHsKKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihJSTEuRk9PKTsKKyAgICB9Cit9CisKK2NsYXNzIFVjIHsKKyAgICBzdGF0aWMgZmluYWwgU3RyaW5nIEZPTyA9ICIiOworICAgIHZvaWQgZygpIHsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIiICsgSUkuRk9PKTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3JlcGxhY2VJbXBsZW1lbnRzV2l0aFN0YXRpY0ltcG9ydC9iZWZvcmUxMi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9yZXBsYWNlSW1wbGVtZW50c1dpdGhTdGF0aWNJbXBvcnQvYmVmb3JlMTIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZGI3NWZmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9yZXBsYWNlSW1wbGVtZW50c1dpdGhTdGF0aWNJbXBvcnQvYmVmb3JlMTIuamF2YQpAQCAtMCwwICsxLDI2IEBACisvLyAiUmVwbGFjZSBJbXBsZW1lbnRzIHdpdGggU3RhdGljIEltcG9ydCIgInRydWUiCitpbnRlcmZhY2UgSTxjYXJldD5uIHsKKyAgICBpbnQgRk9PID0gMDsKK30KKworY2xhc3MgSUkgaW1wbGVtZW50cyBJbiB7CisgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oRk9PKTsKKyAgICB9Cit9CisKKy8qKgorICoge0BsaW5rIEkjRk9PfQorICovCitjbGFzcyBJSTEgaW1wbGVtZW50cyBJbiB7CisgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oSUkxLkZPTyk7CisgICAgfQorfQorCitjbGFzcyBVYyB7CisgICAgc3RhdGljIGZpbmFsIFN0cmluZyBGT08gPSAiIjsKKyAgICB2b2lkIGcoKSB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiIiArIElJLkZPTyk7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9yZXBsYWNlSW1wbGVtZW50c1dpdGhTdGF0aWNJbXBvcnQvYmVmb3JlMi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9yZXBsYWNlSW1wbGVtZW50c1dpdGhTdGF0aWNJbXBvcnQvYmVmb3JlMi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ0MmI3ZTEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3JlcGxhY2VJbXBsZW1lbnRzV2l0aFN0YXRpY0ltcG9ydC9iZWZvcmUyLmphdmEKQEAgLTAsMCArMSwyMCBAQAorLy8gIlJlcGxhY2UgSW1wbGVtZW50cyB3aXRoIFN0YXRpYyBJbXBvcnQiICJ0cnVlIgorcHVibGljIGNsYXNzIFggaW1wbGVtZW50cyA8Y2FyZXQ+SSB7CisgIHZvaWQgZm9vKCkgeworICAgIFN5c3RlbS5vdXQucHJpbnRsbihGT08pOworICAgIFN5c3RlbS5vdXQucHJpbnRsbihGT08xKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oRk9PMik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKEZPTzMpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbihGT080KTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oRk9PNSk7CisgIH0KK30KKworaW50ZXJmYWNlIEkgeworICBTdHJpbmcgRk9PID0gImZvbyI7CisgIFN0cmluZyBGT08xID0gImZvbyI7CisgIFN0cmluZyBGT08yID0gImZvbyI7CisgIFN0cmluZyBGT08zID0gImZvbyI7CisgIFN0cmluZyBGT080ID0gImZvbyI7CisgIFN0cmluZyBGT081ID0gImZvbyI7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9yZXBsYWNlSW1wbGVtZW50c1dpdGhTdGF0aWNJbXBvcnQvYmVmb3JlMy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9yZXBsYWNlSW1wbGVtZW50c1dpdGhTdGF0aWNJbXBvcnQvYmVmb3JlMy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjllYjVjN2YKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3JlcGxhY2VJbXBsZW1lbnRzV2l0aFN0YXRpY0ltcG9ydC9iZWZvcmUzLmphdmEKQEAgLTAsMCArMSwyMiBAQAorLy8gIlJlcGxhY2UgSW1wbGVtZW50cyB3aXRoIFN0YXRpYyBJbXBvcnQiICJmYWxzZSIKK3B1YmxpYyBjbGFzcyBYIGltcGxlbWVudHMgPGNhcmV0PkkgeworICB2b2lkIGZvbygpIHsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oRk9PKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oRk9PMSk7CisgICAgU3lzdGVtLm91dC5wcmludGxuKEZPTzIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbihGT08zKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oRk9PNCk7CisgICAgU3lzdGVtLm91dC5wcmludGxuKEZPTzUpOworICB9Cit9CisKK2ludGVyZmFjZSBJIHsKKyAgU3RyaW5nIEZPTyA9ICJmb28iOworICBTdHJpbmcgRk9PMSA9ICJmb28iOworICBTdHJpbmcgRk9PMiA9ICJmb28iOworICBTdHJpbmcgRk9PMyA9ICJmb28iOworICBTdHJpbmcgRk9PNCA9ICJmb28iOworICBTdHJpbmcgRk9PNSA9ICJmb28iOworCisgIHZvaWQgZm9vKCk7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9yZXBsYWNlSW1wbGVtZW50c1dpdGhTdGF0aWNJbXBvcnQvYmVmb3JlNC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9yZXBsYWNlSW1wbGVtZW50c1dpdGhTdGF0aWNJbXBvcnQvYmVmb3JlNC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAwMDJkNWQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3JlcGxhY2VJbXBsZW1lbnRzV2l0aFN0YXRpY0ltcG9ydC9iZWZvcmU0LmphdmEKQEAgLTAsMCArMSw3IEBACisvLyAiUmVwbGFjZSBJbXBsZW1lbnRzIHdpdGggU3RhdGljIEltcG9ydCIgImZhbHNlIgorcHVibGljIGNsYXNzIFggaW1wbGVtZW50cyA8Y2FyZXQ+SSB7CisgIHZvaWQgYmFyKCkge30KK30KKworaW50ZXJmYWNlIEkgeworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcmVwbGFjZUltcGxlbWVudHNXaXRoU3RhdGljSW1wb3J0L2JlZm9yZTUuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcmVwbGFjZUltcGxlbWVudHNXaXRoU3RhdGljSW1wb3J0L2JlZm9yZTUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMDIxNmRiCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9yZXBsYWNlSW1wbGVtZW50c1dpdGhTdGF0aWNJbXBvcnQvYmVmb3JlNS5qYXZhCkBAIC0wLDAgKzEsMTQgQEAKKy8vICJSZXBsYWNlIEltcGxlbWVudHMgd2l0aCBTdGF0aWMgSW1wb3J0IiAiZmFsc2UiCitwdWJsaWMgY2xhc3MgWCBpbXBsZW1lbnRzIDxjYXJldD5JIHsKKyAgdm9pZCBiYXIoKSB7CisgICAgU3lzdGVtLm91dC5wcmludGxuKEZPTyk7CisgIH0KK30KKworaW50ZXJmYWNlIEkgZXh0ZW5kcyBJMXsKKyAgU3RyaW5nIEZPTyA9ICJmb28iOworfQorCitpbnRlcmZhY2UgSTEgeworICB2b2lkIGZvbygpe30KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3JlcGxhY2VJbXBsZW1lbnRzV2l0aFN0YXRpY0ltcG9ydC9iZWZvcmU2LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3JlcGxhY2VJbXBsZW1lbnRzV2l0aFN0YXRpY0ltcG9ydC9iZWZvcmU2LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTM5ZWY3MQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcmVwbGFjZUltcGxlbWVudHNXaXRoU3RhdGljSW1wb3J0L2JlZm9yZTYuamF2YQpAQCAtMCwwICsxLDE1IEBACisvLyAiUmVwbGFjZSBJbXBsZW1lbnRzIHdpdGggU3RhdGljIEltcG9ydCIgInRydWUiCitwdWJsaWMgY2xhc3MgWCBpbXBsZW1lbnRzIDxjYXJldD5JIHsKKyAgdm9pZCBiYXIoKSB7CisgICAgU3lzdGVtLm91dC5wcmludGxuKEZPTyk7CisgICAgU3lzdGVtLm91dC5wcmludGxuKEJBWlopOworICB9Cit9CisKK2ludGVyZmFjZSBJIGV4dGVuZHMgSTF7CisgIFN0cmluZyBGT08gPSAiZm9vIjsKK30KKworaW50ZXJmYWNlIEkxIHsKKyAgU3RyaW5nIEJBWlogPSAiYmF6eiI7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9yZXBsYWNlSW1wbGVtZW50c1dpdGhTdGF0aWNJbXBvcnQvYmVmb3JlNy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9yZXBsYWNlSW1wbGVtZW50c1dpdGhTdGF0aWNJbXBvcnQvYmVmb3JlNy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJhZGE2Y2MKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3JlcGxhY2VJbXBsZW1lbnRzV2l0aFN0YXRpY0ltcG9ydC9iZWZvcmU3LmphdmEKQEAgLTAsMCArMSwxNSBAQAorLy8gIlJlcGxhY2UgSW1wbGVtZW50cyB3aXRoIFN0YXRpYyBJbXBvcnQiICJ0cnVlIgorcHVibGljIGNsYXNzIFggaW1wbGVtZW50cyBJIHsKKyAgdm9pZCBiYXIoKSB7CisgICAgU3lzdGVtLm91dC5wcmludGxuKEZPTyk7CisgICAgU3lzdGVtLm91dC5wcmludGxuKEJBWlopOworICB9Cit9CisKK2ludGVyZmFjZSBJIGV4dGVuZHMgSTF7CisgIFN0cmluZyBGT08gPSAiZm9vIjsKK30KKworaW50ZXJmYWNlIEk8Y2FyZXQ+MSB7CisgIFN0cmluZyBCQVpaID0gImJhenoiOworfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9yZXBsYWNlSW1wbGVtZW50c1dpdGhTdGF0aWNJbXBvcnQvYmVmb3JlOC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9yZXBsYWNlSW1wbGVtZW50c1dpdGhTdGF0aWNJbXBvcnQvYmVmb3JlOC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU3NWQ1ZWIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3JlcGxhY2VJbXBsZW1lbnRzV2l0aFN0YXRpY0ltcG9ydC9iZWZvcmU4LmphdmEKQEAgLTAsMCArMSwxNSBAQAorLy8gIlJlcGxhY2UgSW1wbGVtZW50cyB3aXRoIFN0YXRpYyBJbXBvcnQiICJ0cnVlIgorcHVibGljIGNsYXNzIFggaW1wbGVtZW50cyBJSSB7CisgIHZvaWQgYmFyKCkgeworICAgIFN5c3RlbS5vdXQucHJpbnRsbihGT08pOworICAgIFN5c3RlbS5vdXQucHJpbnRsbihCQVpaKTsKKyAgfQorfQorCitpbnRlcmZhY2UgSTxjYXJldD5JIGV4dGVuZHMgSTF7CisgIFN0cmluZyBGT08gPSAiZm9vIjsKK30KKworaW50ZXJmYWNlIEkxIHsKKyAgU3RyaW5nIEJBWlogPSAiYmF6eiI7Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3JlcGxhY2VJbXBsZW1lbnRzV2l0aFN0YXRpY0ltcG9ydC9iZWZvcmU5LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3JlcGxhY2VJbXBsZW1lbnRzV2l0aFN0YXRpY0ltcG9ydC9iZWZvcmU5LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmJiMTgyZgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcmVwbGFjZUltcGxlbWVudHNXaXRoU3RhdGljSW1wb3J0L2JlZm9yZTkuamF2YQpAQCAtMCwwICsxLDE3IEBACisvLyAiUmVwbGFjZSBJbXBsZW1lbnRzIHdpdGggU3RhdGljIEltcG9ydCIgInRydWUiCitpbnRlcmZhY2UgSTxjYXJldD5uIHsKKyAgICBpbnQgRk9PID0gMDsKK30KKworY2xhc3MgSUkgaW1wbGVtZW50cyBJbiB7CisgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oRk9PKTsKKyAgICB9Cit9CisKK2NsYXNzIElJMSBpbXBsZW1lbnRzIEluIHsKKyAgICBpbnQgRk9PID0gOTsKKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihJbi5GT08pOworICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvdHlwZU1hdGNoaW5nL0FuZEFuZDEuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvdHlwZU1hdGNoaW5nL0FuZEFuZDEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OTkzZGZjCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci90eXBlTWF0Y2hpbmcvQW5kQW5kMS5qYXZhCkBAIC0wLDAgKzEsNSBAQAorY2xhc3MgVGVzdHsKKyAgeworICAgIGlmICg8ZXJyb3I+ImFhYSI8L2Vycm9yPiB8fCB0cnVlKXt9CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3R5cGVNYXRjaGluZy9BbmRBbmQyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3R5cGVNYXRjaGluZy9BbmRBbmQyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDA1ZjY4MgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvdHlwZU1hdGNoaW5nL0FuZEFuZDIuamF2YQpAQCAtMCwwICsxLDUgQEAKK2NsYXNzIFRlc3R7CisgIHsKKyAgICBpZiAoPGVycm9yPiJhYWEiPC9lcnJvcj4gfHw8RU9MRXJyb3IvPgorICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci90eXBlTWF0Y2hpbmcvRm9yMS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci90eXBlTWF0Y2hpbmcvRm9yMS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU4NGMxYjMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3R5cGVNYXRjaGluZy9Gb3IxLmphdmEKQEAgLTAsMCArMSw1IEBACitjbGFzcyBUZXN0eworICB7CisgICAgZm9yKGludCBpID0gMDsgPGVycm9yPmkgPSAxMDwvZXJyb3I+OyBpKyspIHt9CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3R5cGVNYXRjaGluZy9Gb3IyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3R5cGVNYXRjaGluZy9Gb3IyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTIwMmY2MAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvdHlwZU1hdGNoaW5nL0ZvcjIuamF2YQpAQCAtMCwwICsxLDUgQEAKK2NsYXNzIFRlc3R7CisgIHsKKyAgICBmb3IoaW50IGkgPSAwOyA8ZXJyb3I+aTwvZXJyb3I+OyBpKyspIHt9CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3R5cGVNYXRjaGluZy9JZi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci90eXBlTWF0Y2hpbmcvSWYuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMTJhYTE4Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci90eXBlTWF0Y2hpbmcvSWYuamF2YQpAQCAtMCwwICsxLDUgQEAKK2NsYXNzIFRlc3R7CisgIHZvaWQgZm9vKCl7CisgICAgaWYgKDxlcnJvcj4xMDwvZXJyb3I+KSByZXR1cm47CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3R5cGVNYXRjaGluZy9TaG9ydENvbnN0V2l0aENhc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvdHlwZU1hdGNoaW5nL1Nob3J0Q29uc3RXaXRoQ2FzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRiNDE1YmEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3R5cGVNYXRjaGluZy9TaG9ydENvbnN0V2l0aENhc3QuamF2YQpAQCAtMCwwICsxLDQgQEAKK2ludGVyZmFjZSBGb297CisgIHNob3J0IEFBQUEgPSAoc2hvcnQpKDIgKyAyKTsKKyAgc2hvcnQgQkJCQiA9IEFBQUEgKyAxOworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvdHlwZU1hdGNoaW5nL1doaWxlLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3R5cGVNYXRjaGluZy9XaGlsZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlkZDhlMmIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3R5cGVNYXRjaGluZy9XaGlsZS5qYXZhCkBAIC0wLDAgKzEsNSBAQAorY2xhc3MgVGVzdHsKKyAgeworICAgIHdoaWxlKDxlcnJvcj4xMDwvZXJyb3I+KSA7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3VuY29tcGxldGVDb25zdHJ1Y3RzL0ZvcjEuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvdW5jb21wbGV0ZUNvbnN0cnVjdHMvRm9yMS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkzZTY2NDkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3VuY29tcGxldGVDb25zdHJ1Y3RzL0ZvcjEuamF2YQpAQCAtMCwwICsxLDUgQEAKK2NsYXNzIFRlc3R7CisgIHsKKyAgICBmb3I8RU9MRXJyb3IvPgorICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci91bmNvbXBsZXRlQ29uc3RydWN0cy9Gb3IxMC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci91bmNvbXBsZXRlQ29uc3RydWN0cy9Gb3IxMC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEzM2FkZjkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3VuY29tcGxldGVDb25zdHJ1Y3RzL0ZvcjEwLmphdmEKQEAgLTAsMCArMSw1IEBACitjbGFzcyBGb297CisgIHZvaWQgZm9vKCl7CisgICAgZm9yKGludCBpID0gMDsgaSA8IDA8ZXJyb3I+KTwvZXJyb3I+IGZvbygpOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci91bmNvbXBsZXRlQ29uc3RydWN0cy9Gb3IyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3VuY29tcGxldGVDb25zdHJ1Y3RzL0ZvcjIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYzhhZjVlCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci91bmNvbXBsZXRlQ29uc3RydWN0cy9Gb3IyLmphdmEKQEAgLTAsMCArMSw1IEBACitjbGFzcyBUZXN0eworICB7CisgICAgZm9yKDxFT0xFcnJvci8+CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3VuY29tcGxldGVDb25zdHJ1Y3RzL0ZvcjMuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvdW5jb21wbGV0ZUNvbnN0cnVjdHMvRm9yMy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhkYWIzNWMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3VuY29tcGxldGVDb25zdHJ1Y3RzL0ZvcjMuamF2YQpAQCAtMCwwICsxLDUgQEAKK2NsYXNzIFRlc3R7CisgIHsKKyAgICBmb3IoaW50IGkgPSAwOzs8RU9MRXJyb3IvPgorICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci91bmNvbXBsZXRlQ29uc3RydWN0cy9Gb3I0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3VuY29tcGxldGVDb25zdHJ1Y3RzL0ZvcjQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45Y2M1ZjNiCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci91bmNvbXBsZXRlQ29uc3RydWN0cy9Gb3I0LmphdmEKQEAgLTAsMCArMSw1IEBACitjbGFzcyBUZXN0eworICB7CisgICAgZm9yKGludCBpID0gMDsgaSA8IDEwPEVPTEVycm9yLz4KKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvdW5jb21wbGV0ZUNvbnN0cnVjdHMvRm9yNS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci91bmNvbXBsZXRlQ29uc3RydWN0cy9Gb3I1LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzExNjVkNwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvdW5jb21wbGV0ZUNvbnN0cnVjdHMvRm9yNS5qYXZhCkBAIC0wLDAgKzEsNSBAQAorY2xhc3MgVGVzdHsKKyAgeworICAgIGZvcihpbnQgaSA9IDA7IGkgPCAxMDs8RU9MRXJyb3IvPgorICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci91bmNvbXBsZXRlQ29uc3RydWN0cy9Gb3I2LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3VuY29tcGxldGVDb25zdHJ1Y3RzL0ZvcjYuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OWJjNDJlCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci91bmNvbXBsZXRlQ29uc3RydWN0cy9Gb3I2LmphdmEKQEAgLTAsMCArMSw1IEBACitjbGFzcyBUZXN0eworICB7CisgICAgZm9yKGludCBpID0gMDsgaSA8IDEwOyBpKys8RU9MRXJyb3IvPgorICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci91bmNvbXBsZXRlQ29uc3RydWN0cy9Gb3I3LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3VuY29tcGxldGVDb25zdHJ1Y3RzL0ZvcjcuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45Yzg5ODQyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci91bmNvbXBsZXRlQ29uc3RydWN0cy9Gb3I3LmphdmEKQEAgLTAsMCArMSw1IEBACitjbGFzcyBUZXN0eworICB7CisgICAgZm9yKGludCBpID0gMDsgaSA8IDEwOyBpKyspPEVPTEVycm9yLz4KKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvdW5jb21wbGV0ZUNvbnN0cnVjdHMvRm9yOC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci91bmNvbXBsZXRlQ29uc3RydWN0cy9Gb3I4LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDRkOWI1OQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvdW5jb21wbGV0ZUNvbnN0cnVjdHMvRm9yOC5qYXZhCkBAIC0wLDAgKzEsNSBAQAorY2xhc3MgRm9veworICB2b2lkIGZvbygpeworICAgIGZvcig8ZXJyb3I+KTwvZXJyb3I+IGZvbygpOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci91bmNvbXBsZXRlQ29uc3RydWN0cy9Gb3I5LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3VuY29tcGxldGVDb25zdHJ1Y3RzL0ZvcjkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZTdiN2QyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci91bmNvbXBsZXRlQ29uc3RydWN0cy9Gb3I5LmphdmEKQEAgLTAsMCArMSw1IEBACitjbGFzcyBGb297CisgIHZvaWQgZm9vKCl7CisgICAgZm9yKGludCBpID0gMDs8ZXJyb3I+KTwvZXJyb3I+IGZvbygpOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci91bmNvbXBsZXRlQ29uc3RydWN0cy9JZjEuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvdW5jb21wbGV0ZUNvbnN0cnVjdHMvSWYxLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTgxMGZmYQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvdW5jb21wbGV0ZUNvbnN0cnVjdHMvSWYxLmphdmEKQEAgLTAsMCArMSw1IEBACitjbGFzcyBUZXN0eworICB7CisgICAgaWY8RU9MRXJyb3IvPgorICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci91bmNvbXBsZXRlQ29uc3RydWN0cy9JZjIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvdW5jb21wbGV0ZUNvbnN0cnVjdHMvSWYyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjlmZjlkYwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvdW5jb21wbGV0ZUNvbnN0cnVjdHMvSWYyLmphdmEKQEAgLTAsMCArMSw1IEBACitjbGFzcyBUZXN0eworICB7CisgICAgaWYgKDxFT0xFcnJvci8+CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3VuY29tcGxldGVDb25zdHJ1Y3RzL0lmMy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci91bmNvbXBsZXRlQ29uc3RydWN0cy9JZjMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZWUxOGM5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci91bmNvbXBsZXRlQ29uc3RydWN0cy9JZjMuamF2YQpAQCAtMCwwICsxLDUgQEAKK2NsYXNzIFRlc3R7CisgIHsKKyAgICBpZiAodHJ1ZTxFT0xFcnJvci8+CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3VuY29tcGxldGVDb25zdHJ1Y3RzL0lmNC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci91bmNvbXBsZXRlQ29uc3RydWN0cy9JZjQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZDAzZDcwCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci91bmNvbXBsZXRlQ29uc3RydWN0cy9JZjQuamF2YQpAQCAtMCwwICsxLDUgQEAKK2NsYXNzIFRlc3R7CisgIHsKKyAgICBpZiAodHJ1ZSk8RU9MRXJyb3IvPgorICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci91bmNvbXBsZXRlQ29uc3RydWN0cy9JZjUuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvdW5jb21wbGV0ZUNvbnN0cnVjdHMvSWY1LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOThmYWY5OQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvdW5jb21wbGV0ZUNvbnN0cnVjdHMvSWY1LmphdmEKQEAgLTAsMCArMSw1IEBACitjbGFzcyBUZXN0eworICB7CisgICAgaWYgKDxlcnJvcj4pPC9lcnJvcj57fQorICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci91bmNvbXBsZXRlQ29uc3RydWN0cy9JZjYuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvdW5jb21wbGV0ZUNvbnN0cnVjdHMvSWY2LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjc4MDJlOAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvdW5jb21wbGV0ZUNvbnN0cnVjdHMvSWY2LmphdmEKQEAgLTAsMCArMSw3IEBACitjbGFzcyBUZXN0eworICB7CisgICAgaWYgKHRydWUpeworICAgIH0KKyAgICBlbHNlPEVPTEVycm9yLz4KKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvdW5jb21wbGV0ZUNvbnN0cnVjdHMvUmV0dXJuMS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci91bmNvbXBsZXRlQ29uc3RydWN0cy9SZXR1cm4xLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmI4OTE4NwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvdW5jb21wbGV0ZUNvbnN0cnVjdHMvUmV0dXJuMS5qYXZhCkBAIC0wLDAgKzEsNSBAQAorY2xhc3MgVGVzdHsKKyAgdm9pZCBmb28oKXsKKyAgICByZXR1cm48RU9MRXJyb3IvPgorICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci91bmNvbXBsZXRlQ29uc3RydWN0cy9SZXR1cm4yLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3VuY29tcGxldGVDb25zdHJ1Y3RzL1JldHVybjIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYWVmNzFhCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci91bmNvbXBsZXRlQ29uc3RydWN0cy9SZXR1cm4yLmphdmEKQEAgLTAsMCArMSw1IEBACitjbGFzcyBUZXN0eworICBpbnQgZm9vKCl7CisgICAgcmV0dXJuIDE8RU9MRXJyb3IvPgorICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci91bmNvbXBsZXRlQ29uc3RydWN0cy9XaGlsZTEuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvdW5jb21wbGV0ZUNvbnN0cnVjdHMvV2hpbGUxLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWQyMzczOWYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3VuY29tcGxldGVDb25zdHJ1Y3RzL1doaWxlMS5qYXZhCkBAIC0wLDAgKzEsNSBAQAorY2xhc3MgVGVzdHsKKyAgeworICAgIHdoaWxlPEVPTEVycm9yLz4KKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvdW5jb21wbGV0ZUNvbnN0cnVjdHMvV2hpbGUyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3VuY29tcGxldGVDb25zdHJ1Y3RzL1doaWxlMi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk0ZjY1YzQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3VuY29tcGxldGVDb25zdHJ1Y3RzL1doaWxlMi5qYXZhCkBAIC0wLDAgKzEsNSBAQAorY2xhc3MgVGVzdHsKKyAgeworICAgIHdoaWxlKDxFT0xFcnJvci8+CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3VuY29tcGxldGVDb25zdHJ1Y3RzL1doaWxlMy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci91bmNvbXBsZXRlQ29uc3RydWN0cy9XaGlsZTMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40Nzg5MjRjCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci91bmNvbXBsZXRlQ29uc3RydWN0cy9XaGlsZTMuamF2YQpAQCAtMCwwICsxLDUgQEAKK2NsYXNzIFRlc3R7CisgIHsKKyAgICB3aGlsZSh0cnVlPEVPTEVycm9yLz4KKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvdW5jb21wbGV0ZUNvbnN0cnVjdHMvV2hpbGU0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3VuY29tcGxldGVDb25zdHJ1Y3RzL1doaWxlNC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFhMTQxMmVlCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci91bmNvbXBsZXRlQ29uc3RydWN0cy9XaGlsZTQuamF2YQpAQCAtMCwwICsxLDUgQEAKK2NsYXNzIFRlc3R7CisgIHsKKyAgICB3aGlsZSh0cnVlKTxFT0xFcnJvci8+CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3VuY29tcGxldGVDb25zdHJ1Y3RzL1doaWxlNS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci91bmNvbXBsZXRlQ29uc3RydWN0cy9XaGlsZTUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYzI2ZDJlCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci91bmNvbXBsZXRlQ29uc3RydWN0cy9XaGlsZTUuamF2YQpAQCAtMCwwICsxLDUgQEAKK2NsYXNzIFRlc3R7CisgIHsKKyAgICB3aGlsZSg8ZXJyb3I+KTwvZXJyb3I+e30KKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvdW51c2VkRGVjbHMvQ2hhbmdlSW5zaWRlQ29kZUJsb2NrLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3VudXNlZERlY2xzL0NoYW5nZUluc2lkZUNvZGVCbG9jay5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRhMzVjNzAKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3VudXNlZERlY2xzL0NoYW5nZUluc2lkZUNvZGVCbG9jay5qYXZhCkBAIC0wLDAgKzEsNiBAQAorY2xhc3MgVGVzdHsKKyAgcHVibGljIHZvaWQgdGVzdCgpeworICAgPGNhcmV0PmYoKTsKKyAgfQorICBwcml2YXRlIHZvaWQgZigpe30KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3VudXNlZERlY2xzL0luamVjdGVkQW5uby5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci91bnVzZWREZWNscy9JbmplY3RlZEFubm8uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYmRmZTMzCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci91bnVzZWREZWNscy9JbmplY3RlZEFubm8uamF2YQpAQCAtMCwwICsxLDI5IEBACitwYWNrYWdlIGphdmF4LmFubm90YXRpb247CisKKy8qCisqIENvcHlyaWdodCAyMDAwLTIwMTEgSmV0QnJhaW5zIHMuci5vLgorKgorKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyoKKyogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisqCisqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisqLworQGludGVyZmFjZSBSZXNvdXJjZSB7fQorY2xhc3MgVGVzdHsKKyAgQFJlc291cmNlCisgIHByaXZhdGUgaW50IDx3YXJuaW5nIGRlc2NyPSJQcml2YXRlIGZpZWxkICdmaWVsZCcgaXMgYXNzaWduZWQgYnV0IG5ldmVyIGFjY2Vzc2VkIj5maWVsZDwvd2FybmluZz47CisKKyAgQFJlc291cmNlCisgIHByaXZhdGUgaW50IGZpZWxkMjsKKworICBpbnQgZigpIHsKKyAgICByZXR1cm4gZmllbGQyOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci91bnVzZWREZWNscy9Jbm5lckNsYXNzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3VudXNlZERlY2xzL0lubmVyQ2xhc3MuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mM2YyYTYxCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci91bnVzZWREZWNscy9Jbm5lckNsYXNzLmphdmEKQEAgLTAsMCArMSwzIEBACitjbGFzcyBUZXN0eworICBwcml2YXRlIGNsYXNzIDx3YXJuaW5nPklubmVyPC93YXJuaW5nPnt9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci91bnVzZWREZWNscy9Jbm5lclVzZXNTZWxmLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3VudXNlZERlY2xzL0lubmVyVXNlc1NlbGYuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NjUwNjI1Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci91bnVzZWREZWNscy9Jbm5lclVzZXNTZWxmLmphdmEKQEAgLTAsMCArMSw1IEBACitjbGFzcyBUZXN0eworICBwcml2YXRlIGNsYXNzIDx3YXJuaW5nPklubmVyPC93YXJuaW5nPnsKKyAgICBJbm5lciBuZXh0OworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci91bnVzZWREZWNscy9Mb2NhbENsYXNzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3VudXNlZERlY2xzL0xvY2FsQ2xhc3MuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YWVhNmJmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci91bnVzZWREZWNscy9Mb2NhbENsYXNzLmphdmEKQEAgLTAsMCArMSw3IEBACitwdWJsaWMgY2xhc3MgVGVzdCB7IAorICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKCkgeworCWNsYXNzIElubmVyMXt9OworCWNsYXNzIDx3YXJuaW5nPklubmVyMjwvd2FybmluZz4ge307CisJbmV3IElubmVyMSgpOworICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvdW51c2VkSW1wb3J0cy8xLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3VudXNlZEltcG9ydHMvMS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIxMmUzZDIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3VudXNlZEltcG9ydHMvMS5qYXZhCkBAIC0wLDAgKzEsNiBAQAorPHdhcm5pbmc+aW1wb3J0IGphdmF4LnN3aW5nLkpQYW5lbDs8L3dhcm5pbmc+CitpbXBvcnQgamF2YXguc3dpbmcuSkNvbXBvbmVudDsKKworY2xhc3MgVGVzdHsKKyAgSkNvbXBvbmVudCBjb21wb25lbnQ7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci91bnVzZWRJbXBvcnRzLzIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvdW51c2VkSW1wb3J0cy8yLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjU5MzgzMAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvdW51c2VkSW1wb3J0cy8yLmphdmEKQEAgLTAsMCArMSw2IEBACis8d2FybmluZz5pbXBvcnQgamF2YS5hd3QuKjs8L3dhcm5pbmc+CitpbXBvcnQgamF2YXguc3dpbmcuKjsKKworY2xhc3MgVGVzdHsKKyAgSkNvbXBvbmVudCBjb21wb25lbnQ7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci91bnVzZWRJbXBvcnRzL0lubmVyc09uRGVtYW5kMS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci91bnVzZWRJbXBvcnRzL0lubmVyc09uRGVtYW5kMS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQwODQzYWQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3VudXNlZEltcG9ydHMvSW5uZXJzT25EZW1hbmQxLmphdmEKQEAgLTAsMCArMSwxMSBAQAoraW1wb3J0IDxlcnJvciBkZXNjcj0iQ2Fubm90IHJlc29sdmUgc3ltYm9sICdPdXRlckNsYXNzJyI+T3V0ZXJDbGFzczwvZXJyb3I+Lio7CisKK2NsYXNzIE91dGVyQ2xhc3N7CisgIGNsYXNzIElubmVye30KK30KKworY2xhc3MgWHsKKyAgSW5uZXIgaW5uZXI7Cit9CisKKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci91bnVzZWRJbXBvcnRzL0lubmVyc09uRGVtYW5kMi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci91bnVzZWRJbXBvcnRzL0lubmVyc09uRGVtYW5kMi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE3NmI1MzEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3VudXNlZEltcG9ydHMvSW5uZXJzT25EZW1hbmQyLmphdmEKQEAgLTAsMCArMSw3IEBACis8d2FybmluZyBkZXNjcj0iVW51c2VkIGltcG9ydCBzdGF0ZW1lbnQiPmltcG9ydCA8ZXJyb3IgZGVzY3I9IkNhbm5vdCByZXNvbHZlIHN5bWJvbCAnT3V0ZXJDbGFzcyciPk91dGVyQ2xhc3M8L2Vycm9yPi4qOzwvd2FybmluZz4KKworY2xhc3MgT3V0ZXJDbGFzc3sKKyAgY2xhc3MgSW5uZXJ7fQorfQorCisKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvdW51c2VkSW1wb3J0cy9RdWFsaWZpZWQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvdW51c2VkSW1wb3J0cy9RdWFsaWZpZWQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOThiNTkyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci91bnVzZWRJbXBvcnRzL1F1YWxpZmllZC5qYXZhCkBAIC0wLDAgKzEsNSBAQAorPHdhcm5pbmc+aW1wb3J0IGphdmF4LnN3aW5nLio7PC93YXJuaW5nPgorCitjbGFzcyBUZXN0eworICBqYXZheC5zd2luZy5KQ29tcG9uZW50IGNvbXBvbmVudDsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3VudXNlZEltcG9ydHMvU3RhdGljSW1wb3J0aW5nSW5uZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvdW51c2VkSW1wb3J0cy9TdGF0aWNJbXBvcnRpbmdJbm5lci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI2ZDM4NGIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3VudXNlZEltcG9ydHMvU3RhdGljSW1wb3J0aW5nSW5uZXIuamF2YQpAQCAtMCwwICsxLDYgQEAKK2ltcG9ydCBzdGF0aWMgcGFja2FnZTEuYy4qOworPHdhcm5pbmc+aW1wb3J0IHN0YXRpYyBwYWNrYWdlMS5jLio7PC93YXJuaW5nPgorCitwdWJsaWMgY2xhc3MgYSB7CisgICAgIGludCB4ID0gTXlJbm5lci5hOworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvdW51c2VkSW1wb3J0cy9VbmNsb3NlZC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci91bnVzZWRJbXBvcnRzL1VuY2xvc2VkLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWFjYzI4NAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvdW51c2VkSW1wb3J0cy9VbmNsb3NlZC5qYXZhCkBAIC0wLDAgKzEsNCBAQAoraW1wb3J0IGphdmF4LnN3aW5nLkpQYW5lbDxFT0xFcnJvci8+CisKK2NsYXNzIFRlc3R7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci91bnVzZWRJbXBvcnRzL1dpdGhIaWdobGlnaHRpbmdPZmYuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvdW51c2VkSW1wb3J0cy9XaXRoSGlnaGxpZ2h0aW5nT2ZmLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGEwMGU2ZAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvdW51c2VkSW1wb3J0cy9XaXRoSGlnaGxpZ2h0aW5nT2ZmLmphdmEKQEAgLTAsMCArMSw1IEBACitpbXBvcnQgamF2YXguc3dpbmcuSkNvbXBvbmVudDsKKworY2xhc3MgVGVzdHsKKyAgSkNvbXBvbmVudCBjb21wb25lbnQ7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci91bnVzZWRJbXBvcnRzL3BhY2thZ2UxL2EuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvdW51c2VkSW1wb3J0cy9wYWNrYWdlMS9hLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGQ0OTg5YQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvdW51c2VkSW1wb3J0cy9wYWNrYWdlMS9hLmphdmEKQEAgLTAsMCArMSw3IEBACitwYWNrYWdlIHBhY2thZ2UxOworCis8d2FybmluZyBkZXNjcj0iVW51c2VkIGltcG9ydCBzdGF0ZW1lbnQiPmltcG9ydCBwYWNrYWdlMS5iOzwvd2FybmluZz4KKworY2xhc3MgYSB7CisgYiBiID0gbnVsbDsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3VudXNlZEltcG9ydHMvcGFja2FnZTEvYi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci91bnVzZWRJbXBvcnRzL3BhY2thZ2UxL2IuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NTFiYjI0Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci91bnVzZWRJbXBvcnRzL3BhY2thZ2UxL2IuamF2YQpAQCAtMCwwICsxLDcgQEAKK3BhY2thZ2UgcGFja2FnZTE7CisKKzx3YXJuaW5nIGRlc2NyPSJVbnVzZWQgaW1wb3J0IHN0YXRlbWVudCI+aW1wb3J0IHBhY2thZ2UxLio7PC93YXJuaW5nPgorCitjbGFzcyBiIHsKKyBhIGEgPSBudWxsOworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvdW51c2VkSW1wb3J0cy9wYWNrYWdlMS9jLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3VudXNlZEltcG9ydHMvcGFja2FnZTEvYy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRmZWIxM2QKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3VudXNlZEltcG9ydHMvcGFja2FnZTEvYy5qYXZhCkBAIC0wLDAgKzEsMTAgQEAKK3BhY2thZ2UgcGFja2FnZTE7CisKK3B1YmxpYyBpbnRlcmZhY2UgYworeworICAgIHB1YmxpYyBpbnRlcmZhY2UgTXlJbm5lcgorICAgIHsKKyAgICAgICAgaW50IGEgPSAxOworICAgICAgICBpbnQgYiA9IDI7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kZWZhdWx0QWN0aW9uL2N1c3RvbUZpbGVUeXBlL0luc2VydEJyYWNlT25FbnRlci5jcyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kZWZhdWx0QWN0aW9uL2N1c3RvbUZpbGVUeXBlL0luc2VydEJyYWNlT25FbnRlci5jcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MjlkMTZiCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RlZmF1bHRBY3Rpb24vY3VzdG9tRmlsZVR5cGUvSW5zZXJ0QnJhY2VPbkVudGVyLmNzCkBAIC0wLDAgKzEgQEAKK2Z1bmN0aW9uIGFhYSgpIHs8Y2FyZXQ+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RlZmF1bHRBY3Rpb24vY3VzdG9tRmlsZVR5cGUvSW5zZXJ0QnJhY2VPbkVudGVySmF2YUZ4LmZ4IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RlZmF1bHRBY3Rpb24vY3VzdG9tRmlsZVR5cGUvSW5zZXJ0QnJhY2VPbkVudGVySmF2YUZ4LmZ4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ2YWM2NTYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGVmYXVsdEFjdGlvbi9jdXN0b21GaWxlVHlwZS9JbnNlcnRCcmFjZU9uRW50ZXJKYXZhRnguZngKQEAgLTAsMCArMSBAQAordmFyIHN4eSA9IFRpbWVsaW5lIHs8Y2FyZXQ+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RlZmF1bHRBY3Rpb24vY3VzdG9tRmlsZVR5cGUvSW5zZXJ0QnJhY2VPbkVudGVySmF2YUZ4X2FmdGVyLmZ4IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RlZmF1bHRBY3Rpb24vY3VzdG9tRmlsZVR5cGUvSW5zZXJ0QnJhY2VPbkVudGVySmF2YUZ4X2FmdGVyLmZ4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFiNzNkZTkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGVmYXVsdEFjdGlvbi9jdXN0b21GaWxlVHlwZS9JbnNlcnRCcmFjZU9uRW50ZXJKYXZhRnhfYWZ0ZXIuZngKQEAgLTAsMCArMSwzIEBACit2YXIgc3h5ID0gVGltZWxpbmUgeworPGNhcmV0PgorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kZWZhdWx0QWN0aW9uL2N1c3RvbUZpbGVUeXBlL0luc2VydEJyYWNlT25FbnRlcl9hZnRlci5jcyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kZWZhdWx0QWN0aW9uL2N1c3RvbUZpbGVUeXBlL0luc2VydEJyYWNlT25FbnRlcl9hZnRlci5jcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NDJlZDY5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RlZmF1bHRBY3Rpb24vY3VzdG9tRmlsZVR5cGUvSW5zZXJ0QnJhY2VPbkVudGVyX2FmdGVyLmNzCkBAIC0wLDAgKzEsMyBAQAorZnVuY3Rpb24gYWFhKCkgeworCit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RlZmF1bHRBY3Rpb24vY3VzdG9tRmlsZVR5cGUvSW5zZXJ0RGVsZXRlQnJhY2tldC5jcyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kZWZhdWx0QWN0aW9uL2N1c3RvbUZpbGVUeXBlL0luc2VydERlbGV0ZUJyYWNrZXQuY3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTg2Y2ZjOAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kZWZhdWx0QWN0aW9uL2N1c3RvbUZpbGVUeXBlL0luc2VydERlbGV0ZUJyYWNrZXQuY3MKQEAgLTAsMCArMSBAQAorZG9jdW1lbnQ8Y2FyZXQ+CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGVmYXVsdEFjdGlvbi9jdXN0b21GaWxlVHlwZS9JbnNlcnREZWxldGVCcmFja2V0X2FmdGVyLmNzIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RlZmF1bHRBY3Rpb24vY3VzdG9tRmlsZVR5cGUvSW5zZXJ0RGVsZXRlQnJhY2tldF9hZnRlci5jcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMjQ3M2Y5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RlZmF1bHRBY3Rpb24vY3VzdG9tRmlsZVR5cGUvSW5zZXJ0RGVsZXRlQnJhY2tldF9hZnRlci5jcwpAQCAtMCwwICsxIEBACitkb2N1bWVudFs8Y2FyZXQ+XQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RlZmF1bHRBY3Rpb24vY3VzdG9tRmlsZVR5cGUvSW5zZXJ0RGVsZXRlQnJhY2tldF9hZnRlcjIuY3MgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGVmYXVsdEFjdGlvbi9jdXN0b21GaWxlVHlwZS9JbnNlcnREZWxldGVCcmFja2V0X2FmdGVyMi5jcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNTRmODYyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RlZmF1bHRBY3Rpb24vY3VzdG9tRmlsZVR5cGUvSW5zZXJ0RGVsZXRlQnJhY2tldF9hZnRlcjIuY3MKQEAgLTAsMCArMSBAQAorZG9jdW1lbnRbXTxjYXJldD4KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kZWZhdWx0QWN0aW9uL2N1c3RvbUZpbGVUeXBlL0luc2VydERlbGV0ZVBhcmVudGguY3MgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGVmYXVsdEFjdGlvbi9jdXN0b21GaWxlVHlwZS9JbnNlcnREZWxldGVQYXJlbnRoLmNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE4NmNmYzgKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGVmYXVsdEFjdGlvbi9jdXN0b21GaWxlVHlwZS9JbnNlcnREZWxldGVQYXJlbnRoLmNzCkBAIC0wLDAgKzEgQEAKK2RvY3VtZW50PGNhcmV0PgpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RlZmF1bHRBY3Rpb24vY3VzdG9tRmlsZVR5cGUvSW5zZXJ0RGVsZXRlUGFyZW50aDIuY3MgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGVmYXVsdEFjdGlvbi9jdXN0b21GaWxlVHlwZS9JbnNlcnREZWxldGVQYXJlbnRoMi5jcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjlkZTI5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RlZmF1bHRBY3Rpb24vY3VzdG9tRmlsZVR5cGUvSW5zZXJ0RGVsZXRlUGFyZW50aDIuY3MKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kZWZhdWx0QWN0aW9uL2N1c3RvbUZpbGVUeXBlL0luc2VydERlbGV0ZVBhcmVudGgyXzIuY3MgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGVmYXVsdEFjdGlvbi9jdXN0b21GaWxlVHlwZS9JbnNlcnREZWxldGVQYXJlbnRoMl8yLmNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUyMzk0MGUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGVmYXVsdEFjdGlvbi9jdXN0b21GaWxlVHlwZS9JbnNlcnREZWxldGVQYXJlbnRoMl8yLmNzCkBAIC0wLDAgKzEgQEAKK2RvY3VtZW50PGNhcmV0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kZWZhdWx0QWN0aW9uL2N1c3RvbUZpbGVUeXBlL0luc2VydERlbGV0ZVBhcmVudGgyXzJfYWZ0ZXIuY3MgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGVmYXVsdEFjdGlvbi9jdXN0b21GaWxlVHlwZS9JbnNlcnREZWxldGVQYXJlbnRoMl8yX2FmdGVyLmNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdjN2M0ZGUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGVmYXVsdEFjdGlvbi9jdXN0b21GaWxlVHlwZS9JbnNlcnREZWxldGVQYXJlbnRoMl8yX2FmdGVyLmNzCkBAIC0wLDAgKzEgQEAKK2RvY3VtZW50KDxjYXJldD4pClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RlZmF1bHRBY3Rpb24vY3VzdG9tRmlsZVR5cGUvSW5zZXJ0RGVsZXRlUGFyZW50aDJfYWZ0ZXIuY3MgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGVmYXVsdEFjdGlvbi9jdXN0b21GaWxlVHlwZS9JbnNlcnREZWxldGVQYXJlbnRoMl9hZnRlci5jcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZDI3YmI1Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RlZmF1bHRBY3Rpb24vY3VzdG9tRmlsZVR5cGUvSW5zZXJ0RGVsZXRlUGFyZW50aDJfYWZ0ZXIuY3MKQEAgLTAsMCArMSBAQAorKDxjYXJldD4pClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RlZmF1bHRBY3Rpb24vY3VzdG9tRmlsZVR5cGUvSW5zZXJ0RGVsZXRlUGFyZW50aF9hZnRlci5jcyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kZWZhdWx0QWN0aW9uL2N1c3RvbUZpbGVUeXBlL0luc2VydERlbGV0ZVBhcmVudGhfYWZ0ZXIuY3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmY5NDI5ZAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kZWZhdWx0QWN0aW9uL2N1c3RvbUZpbGVUeXBlL0luc2VydERlbGV0ZVBhcmVudGhfYWZ0ZXIuY3MKQEAgLTAsMCArMSBAQAorZG9jdW1lbnQoPGNhcmV0PikKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kZWZhdWx0QWN0aW9uL2N1c3RvbUZpbGVUeXBlL0luc2VydERlbGV0ZVBhcmVudGhfYWZ0ZXIyLmNzIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RlZmF1bHRBY3Rpb24vY3VzdG9tRmlsZVR5cGUvSW5zZXJ0RGVsZXRlUGFyZW50aF9hZnRlcjIuY3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjEyMjU4MgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kZWZhdWx0QWN0aW9uL2N1c3RvbUZpbGVUeXBlL0luc2VydERlbGV0ZVBhcmVudGhfYWZ0ZXIyLmNzCkBAIC0wLDAgKzEgQEAKK2RvY3VtZW50KCk8Y2FyZXQ+CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGVmYXVsdEFjdGlvbi9jdXN0b21GaWxlVHlwZS9JbnNlcnREZWxldGVRdW90ZS5haiBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kZWZhdWx0QWN0aW9uL2N1c3RvbUZpbGVUeXBlL0luc2VydERlbGV0ZVF1b3RlLmFqCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1NWUzYTgKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGVmYXVsdEFjdGlvbi9jdXN0b21GaWxlVHlwZS9JbnNlcnREZWxldGVRdW90ZS5hagpAQCAtMCwwICsxLDYgQEAKK2FzcGVjdCBHZXRJbmZvIHsKKyAgIE9iamVjdCBDLmFib3V0KCkgeworICAgICAgcHJpbnRsbig8Y2FyZXQ+KQorICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kZWZhdWx0QWN0aW9uL2N1c3RvbUZpbGVUeXBlL0luc2VydERlbGV0ZVF1b3RlLmNzIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RlZmF1bHRBY3Rpb24vY3VzdG9tRmlsZVR5cGUvSW5zZXJ0RGVsZXRlUXVvdGUuY3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTFkMjIwZQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kZWZhdWx0QWN0aW9uL2N1c3RvbUZpbGVUeXBlL0luc2VydERlbGV0ZVF1b3RlLmNzCkBAIC0wLDAgKzEgQEAKK2RvY3VtZW50LndyaXRlKDxjYXJldD4pOwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kZWZhdWx0QWN0aW9uL2N1c3RvbUZpbGVUeXBlL0luc2VydERlbGV0ZVF1b3RlLnBsIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RlZmF1bHRBY3Rpb24vY3VzdG9tRmlsZVR5cGUvSW5zZXJ0RGVsZXRlUXVvdGUucGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWY0MWZmYQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kZWZhdWx0QWN0aW9uL2N1c3RvbUZpbGVUeXBlL0luc2VydERlbGV0ZVF1b3RlLnBsCkBAIC0wLDAgKzEgQEAKKyRhID0gPGNhcmV0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kZWZhdWx0QWN0aW9uL2N1c3RvbUZpbGVUeXBlL0luc2VydERlbGV0ZVF1b3RlX2FmdGVyLmFqIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RlZmF1bHRBY3Rpb24vY3VzdG9tRmlsZVR5cGUvSW5zZXJ0RGVsZXRlUXVvdGVfYWZ0ZXIuYWoKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWYyNGEyYgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kZWZhdWx0QWN0aW9uL2N1c3RvbUZpbGVUeXBlL0luc2VydERlbGV0ZVF1b3RlX2FmdGVyLmFqCkBAIC0wLDAgKzEsNiBAQAorYXNwZWN0IEdldEluZm8geworICAgT2JqZWN0IEMuYWJvdXQoKSB7CisgICAgICBwcmludGxuKCI8Y2FyZXQ+IikKKyAgICAgIHJldHVybiByZXN1bHQ7CisgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGVmYXVsdEFjdGlvbi9jdXN0b21GaWxlVHlwZS9JbnNlcnREZWxldGVRdW90ZV9hZnRlci5jcyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kZWZhdWx0QWN0aW9uL2N1c3RvbUZpbGVUeXBlL0luc2VydERlbGV0ZVF1b3RlX2FmdGVyLmNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAyNDk5N2YKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGVmYXVsdEFjdGlvbi9jdXN0b21GaWxlVHlwZS9JbnNlcnREZWxldGVRdW90ZV9hZnRlci5jcwpAQCAtMCwwICsxIEBACitkb2N1bWVudC53cml0ZSgiPGNhcmV0PiIpOwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kZWZhdWx0QWN0aW9uL2N1c3RvbUZpbGVUeXBlL0luc2VydERlbGV0ZVF1b3RlX2FmdGVyLnBsIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RlZmF1bHRBY3Rpb24vY3VzdG9tRmlsZVR5cGUvSW5zZXJ0RGVsZXRlUXVvdGVfYWZ0ZXIucGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjI3MjQyMwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kZWZhdWx0QWN0aW9uL2N1c3RvbUZpbGVUeXBlL0luc2VydERlbGV0ZVF1b3RlX2FmdGVyLnBsCkBAIC0wLDAgKzEgQEAKKyRhID0gIjxjYXJldD4iClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RlZmF1bHRBY3Rpb24vY3VzdG9tRmlsZVR5cGUvYmxvY2tOYXZpZ2F0aW9uLmNzIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2RlZmF1bHRBY3Rpb24vY3VzdG9tRmlsZVR5cGUvYmxvY2tOYXZpZ2F0aW9uLmNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU1OTFlMDcKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGVmYXVsdEFjdGlvbi9jdXN0b21GaWxlVHlwZS9ibG9ja05hdmlnYXRpb24uY3MKQEAgLTAsMCArMSwzIEBACitmdW5jdGlvbiBhICgpIDxjYXJldD57CisKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGVmYXVsdEFjdGlvbi9jdXN0b21GaWxlVHlwZS9ibG9ja05hdmlnYXRpb25fYWZ0ZXIuY3MgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZGVmYXVsdEFjdGlvbi9jdXN0b21GaWxlVHlwZS9ibG9ja05hdmlnYXRpb25fYWZ0ZXIuY3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODJjYzBlYgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9kZWZhdWx0QWN0aW9uL2N1c3RvbUZpbGVUeXBlL2Jsb2NrTmF2aWdhdGlvbl9hZnRlci5jcwpAQCAtMCwwICsxLDMgQEAKK2Z1bmN0aW9uIGEgKCkgeworCit9PGNhcmV0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9leHRlcm5hbEFubm90YXRpb25zL2NvbnRlbnQvYW5uby9wL2Fubm90YXRpb25zLnhtbCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9leHRlcm5hbEFubm90YXRpb25zL2NvbnRlbnQvYW5uby9wL2Fubm90YXRpb25zLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZDkwNWE0Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2V4dGVybmFsQW5ub3RhdGlvbnMvY29udGVudC9hbm5vL3AvYW5ub3RhdGlvbnMueG1sCkBAIC0wLDAgKzEsOCBAQAorPHJvb3Q+CisgIDxpdGVtIG5hbWU9J3AuVGVzdERlYW5ub3RhdGlvbiBqYXZhLmxhbmcuU3RyaW5nIGdldCgpJz4KKyAgICA8YW5ub3RhdGlvbiBuYW1lPSdvcmcuamV0YnJhaW5zLmFubm90YXRpb25zLk5vdE51bGwnLz4KKyAgPC9pdGVtPgorICA8aXRlbSBuYW1lPSdwLlRlc3REZWFubm90YXRpb24xIGphdmEubGFuZy5TdHJpbmcgZ2V0KGphdmEubGFuZy5TdHJpbmcpIDAnPgorICAgIDxhbm5vdGF0aW9uIG5hbWU9J29yZy5qZXRicmFpbnMuYW5ub3RhdGlvbnMuTm90TnVsbCcvPgorICA8L2l0ZW0+Cis8L3Jvb3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2V4dGVybmFsQW5ub3RhdGlvbnMvY29udGVudC9hbm5vL3AvYW5ub3RhdGlvbnNBbm5vdGF0ZUxpYnJhcnlfYWZ0ZXIueG1sIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2V4dGVybmFsQW5ub3RhdGlvbnMvY29udGVudC9hbm5vL3AvYW5ub3RhdGlvbnNBbm5vdGF0ZUxpYnJhcnlfYWZ0ZXIueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk3ZDBkZDUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZXh0ZXJuYWxBbm5vdGF0aW9ucy9jb250ZW50L2Fubm8vcC9hbm5vdGF0aW9uc0Fubm90YXRlTGlicmFyeV9hZnRlci54bWwKQEAgLTAsMCArMSwxMSBAQAorPHJvb3Q+CisgIDxpdGVtIG5hbWU9J3AuVGVzdERlYW5ub3RhdGlvbiBqYXZhLmxhbmcuU3RyaW5nIGdldCgpJz4KKyAgICA8YW5ub3RhdGlvbiBuYW1lPSdvcmcuamV0YnJhaW5zLmFubm90YXRpb25zLk5vdE51bGwnLz4KKyAgPC9pdGVtPgorICA8aXRlbSBuYW1lPSdwLlRlc3REZWFubm90YXRpb24xIGphdmEubGFuZy5TdHJpbmcgZ2V0KGphdmEubGFuZy5TdHJpbmcpIDAnPgorICAgIDxhbm5vdGF0aW9uIG5hbWU9J29yZy5qZXRicmFpbnMuYW5ub3RhdGlvbnMuTm90TnVsbCcvPgorICA8L2l0ZW0+CisgICAgPGl0ZW0gbmFtZT0ncC5UZXN0IGphdmEubGFuZy5TdHJpbmcgZ2V0KCknPgorICAgICAgICA8YW5ub3RhdGlvbiBuYW1lPSdvcmcuamV0YnJhaW5zLmFubm90YXRpb25zLk5vdE51bGwnLz4KKyAgICA8L2l0ZW0+Cis8L3Jvb3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2V4dGVybmFsQW5ub3RhdGlvbnMvY29udGVudC9hbm5vL3AvYW5ub3RhdGlvbnNEZWFubm90YXRpb24xX2FmdGVyLnhtbCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9leHRlcm5hbEFubm90YXRpb25zL2NvbnRlbnQvYW5uby9wL2Fubm90YXRpb25zRGVhbm5vdGF0aW9uMV9hZnRlci54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjJmYTk4YgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9leHRlcm5hbEFubm90YXRpb25zL2NvbnRlbnQvYW5uby9wL2Fubm90YXRpb25zRGVhbm5vdGF0aW9uMV9hZnRlci54bWwKQEAgLTAsMCArMSw1IEBACis8cm9vdD4KKyAgPGl0ZW0gbmFtZT0ncC5UZXN0RGVhbm5vdGF0aW9uIGphdmEubGFuZy5TdHJpbmcgZ2V0KCknPgorICAgIDxhbm5vdGF0aW9uIG5hbWU9J29yZy5qZXRicmFpbnMuYW5ub3RhdGlvbnMuTm90TnVsbCcvPgorICA8L2l0ZW0+Cis8L3Jvb3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2V4dGVybmFsQW5ub3RhdGlvbnMvY29udGVudC9hbm5vL3AvYW5ub3RhdGlvbnNEZWFubm90YXRpb25fYWZ0ZXIueG1sIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2V4dGVybmFsQW5ub3RhdGlvbnMvY29udGVudC9hbm5vL3AvYW5ub3RhdGlvbnNEZWFubm90YXRpb25fYWZ0ZXIueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdiNWM3ZjcKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZXh0ZXJuYWxBbm5vdGF0aW9ucy9jb250ZW50L2Fubm8vcC9hbm5vdGF0aW9uc0RlYW5ub3RhdGlvbl9hZnRlci54bWwKQEAgLTAsMCArMSw1IEBACis8cm9vdD4KKyAgICA8aXRlbSBuYW1lPSdwLlRlc3REZWFubm90YXRpb24xIGphdmEubGFuZy5TdHJpbmcgZ2V0KGphdmEubGFuZy5TdHJpbmcpIDAnPgorICAgIDxhbm5vdGF0aW9uIG5hbWU9J29yZy5qZXRicmFpbnMuYW5ub3RhdGlvbnMuTm90TnVsbCcvPgorICA8L2l0ZW0+Cis8L3Jvb3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2V4dGVybmFsQW5ub3RhdGlvbnMvY29udGVudC9hbm5vL3BlcnNpc3RlbmNlL2Fubm90YXRpb25zLnhtbCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9leHRlcm5hbEFubm90YXRpb25zL2NvbnRlbnQvYW5uby9wZXJzaXN0ZW5jZS9hbm5vdGF0aW9ucy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWU5YWQwZgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9leHRlcm5hbEFubm90YXRpb25zL2NvbnRlbnQvYW5uby9wZXJzaXN0ZW5jZS9hbm5vdGF0aW9ucy54bWwKQEAgLTAsMCArMSwxNCBAQAorPHJvb3Q+CisgIDxpdGVtIG5hbWU9J3BlcnNpc3RlbmNlLlRlc3QgamF2YS5sYW5nLlN0cmluZzxUPiBnZXRTdHJpbmcoamF2YS51dGlsLk1hcC5FbnRyeTxULFQ+KSAwJz4KKyAgICA8YW5ub3RhdGlvbiBuYW1lPSdvcmcuamV0YnJhaW5zLmFubm90YXRpb25zLk5vdE51bGwnLz4KKyAgPC9pdGVtPgorICA8aXRlbSBuYW1lPSdwZXJzaXN0ZW5jZS5UZXN0IGphdmEubGFuZy5TdHJpbmc8VD4gZ2V0U3RyaW5nKGphdmEudXRpbC5NYXAuRW50cnk8VCwgVD4pIDAnPgorICAgIDxhbm5vdGF0aW9uIG5hbWU9J29yZy5qZXRicmFpbnMuYW5ub3RhdGlvbnMuTm9uTmxzJy8+CisgIDwvaXRlbT4KKyAgPGl0ZW0gbmFtZT0ncGVyc2lzdGVuY2UuVGVzdCBqYXZhLmxhbmcuU3RyaW5nJmx0O1QmZ3Q7IGdldFN0cmluZyhqYXZhLnV0aWwuTWFwLkVudHJ5Jmx0O1QsVCZndDspJz4KKyAgICA8YW5ub3RhdGlvbiBuYW1lPSdvcmcuamV0YnJhaW5zLmFubm90YXRpb25zLk51bGxhYmxlJy8+CisgIDwvaXRlbT4KKyAgPGl0ZW0gbmFtZT0ncGVyc2lzdGVuY2UuVGVzdCBqYXZhLmxhbmcuU3RyaW5nJmx0O1QmZ3Q7IGdldFN0cmluZyhqYXZhLnV0aWwuTWFwLkVudHJ5Jmx0O1QsIFQmZ3Q7KSc+CisgICAgPGFubm90YXRpb24gbmFtZT0nb3JnLmpldGJyYWlucy5hbm5vdGF0aW9ucy5ObHMnLz4KKyAgPC9pdGVtPgorPC9yb290PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9leHRlcm5hbEFubm90YXRpb25zL2NvbnRlbnQvYW5uby9zdXBwcmVzc2VkL2Fubm90YXRpb25zLnhtbCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9leHRlcm5hbEFubm90YXRpb25zL2NvbnRlbnQvYW5uby9zdXBwcmVzc2VkL2Fubm90YXRpb25zLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMTQ0MzYzCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2V4dGVybmFsQW5ub3RhdGlvbnMvY29udGVudC9hbm5vL3N1cHByZXNzZWQvYW5ub3RhdGlvbnMueG1sCkBAIC0wLDAgKzEsMTAgQEAKKzxyb290PgorICA8aXRlbSBuYW1lPSdzdXBwcmVzc2VkLkV4aXN0aW5nRXh0ZXJuYWxOYW1lIGphdmEubGFuZy5TdHJpbmcgZm9vKCknPgorICAgIDxhbm5vdGF0aW9uIG5hbWU9J29yZy5qZXRicmFpbnMuYW5ub3RhdGlvbnMuTm90TnVsbCcvPgorICA8L2l0ZW0+CisgIDxpdGVtIG5hbWU9J3N1cHByZXNzZWQuU2Vjb25kU3VwcHJlc3Npb24gdm9pZCBzZWNvbmQoKSc+CisgICAgPGFubm90YXRpb24gbmFtZT0namF2YS5sYW5nLlN1cHByZXNzV2FybmluZ3MnPgorICAgICAgPHZhbCB2YWw9IntEb2VzbnRNYXR0ZXJXaGF0fSIvPgorICAgIDwvYW5ub3RhdGlvbj4KKyAgPC9pdGVtPgorPC9yb290PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9leHRlcm5hbEFubm90YXRpb25zL2NvbnRlbnQvYW5uby9zdXBwcmVzc2VkL2Fubm90YXRpb25zRXhpc3RpbmdFeHRlcm5hbE5hbWVfYWZ0ZXIueG1sIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2V4dGVybmFsQW5ub3RhdGlvbnMvY29udGVudC9hbm5vL3N1cHByZXNzZWQvYW5ub3RhdGlvbnNFeGlzdGluZ0V4dGVybmFsTmFtZV9hZnRlci54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2VhNzkzNgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9leHRlcm5hbEFubm90YXRpb25zL2NvbnRlbnQvYW5uby9zdXBwcmVzc2VkL2Fubm90YXRpb25zRXhpc3RpbmdFeHRlcm5hbE5hbWVfYWZ0ZXIueG1sCkBAIC0wLDAgKzEsMTMgQEAKKzxyb290PgorICA8aXRlbSBuYW1lPSdzdXBwcmVzc2VkLkV4aXN0aW5nRXh0ZXJuYWxOYW1lIGphdmEubGFuZy5TdHJpbmcgZm9vKCknPgorICAgIDxhbm5vdGF0aW9uIG5hbWU9J29yZy5qZXRicmFpbnMuYW5ub3RhdGlvbnMuTm90TnVsbCcvPgorICAgICAgPGFubm90YXRpb24gbmFtZT0namF2YS5sYW5nLlN1cHByZXNzV2FybmluZ3MnPgorICAgICAgICAgIDx2YWwgdmFsPSImcXVvdDtTaWxseUFzc2lnbm1lbnQmcXVvdDsiLz4KKyAgICAgIDwvYW5ub3RhdGlvbj4KKyAgPC9pdGVtPgorICA8aXRlbSBuYW1lPSdzdXBwcmVzc2VkLlNlY29uZFN1cHByZXNzaW9uIHZvaWQgc2Vjb25kKCknPgorICAgIDxhbm5vdGF0aW9uIG5hbWU9J2phdmEubGFuZy5TdXBwcmVzc1dhcm5pbmdzJz4KKyAgICAgIDx2YWwgdmFsPSJ7RG9lc250TWF0dGVyV2hhdH0iLz4KKyAgICA8L2Fubm90YXRpb24+CisgIDwvaXRlbT4KKzwvcm9vdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZXh0ZXJuYWxBbm5vdGF0aW9ucy9jb250ZW50L2Fubm8vc3VwcHJlc3NlZC9hbm5vdGF0aW9uc05ld1N1cHByZXNzX2FmdGVyLnhtbCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9leHRlcm5hbEFubm90YXRpb25zL2NvbnRlbnQvYW5uby9zdXBwcmVzc2VkL2Fubm90YXRpb25zTmV3U3VwcHJlc3NfYWZ0ZXIueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAzZjhjNDAKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZXh0ZXJuYWxBbm5vdGF0aW9ucy9jb250ZW50L2Fubm8vc3VwcHJlc3NlZC9hbm5vdGF0aW9uc05ld1N1cHByZXNzX2FmdGVyLnhtbApAQCAtMCwwICsxLDE1IEBACis8cm9vdD4KKyAgPGl0ZW0gbmFtZT0nc3VwcHJlc3NlZC5FeGlzdGluZ0V4dGVybmFsTmFtZSBqYXZhLmxhbmcuU3RyaW5nIGZvbygpJz4KKyAgICA8YW5ub3RhdGlvbiBuYW1lPSdvcmcuamV0YnJhaW5zLmFubm90YXRpb25zLk5vdE51bGwnLz4KKyAgPC9pdGVtPgorICA8aXRlbSBuYW1lPSdzdXBwcmVzc2VkLlNlY29uZFN1cHByZXNzaW9uIHZvaWQgc2Vjb25kKCknPgorICAgIDxhbm5vdGF0aW9uIG5hbWU9J2phdmEubGFuZy5TdXBwcmVzc1dhcm5pbmdzJz4KKyAgICAgIDx2YWwgdmFsPSJ7RG9lc250TWF0dGVyV2hhdH0iLz4KKyAgICA8L2Fubm90YXRpb24+CisgIDwvaXRlbT4KKyAgICA8aXRlbSBuYW1lPSdzdXBwcmVzc2VkLk5ld1N1cHByZXNzIHZvaWQgYmFycigpJz4KKyAgICAgICAgPGFubm90YXRpb24gbmFtZT0namF2YS5sYW5nLlN1cHByZXNzV2FybmluZ3MnPgorICAgICAgICAgICAgPHZhbCB2YWw9IiZxdW90O1NpbGx5QXNzaWdubWVudCZxdW90OyIvPgorICAgICAgICA8L2Fubm90YXRpb24+CisgICAgPC9pdGVtPgorPC9yb290PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9leHRlcm5hbEFubm90YXRpb25zL2NvbnRlbnQvYW5uby9zdXBwcmVzc2VkL2Fubm90YXRpb25zU2Vjb25kU3VwcHJlc3Npb25fYWZ0ZXIueG1sIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2V4dGVybmFsQW5ub3RhdGlvbnMvY29udGVudC9hbm5vL3N1cHByZXNzZWQvYW5ub3RhdGlvbnNTZWNvbmRTdXBwcmVzc2lvbl9hZnRlci54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWZkZjE1MwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9leHRlcm5hbEFubm90YXRpb25zL2NvbnRlbnQvYW5uby9zdXBwcmVzc2VkL2Fubm90YXRpb25zU2Vjb25kU3VwcHJlc3Npb25fYWZ0ZXIueG1sCkBAIC0wLDAgKzEsMTAgQEAKKzxyb290PgorICA8aXRlbSBuYW1lPSdzdXBwcmVzc2VkLkV4aXN0aW5nRXh0ZXJuYWxOYW1lIGphdmEubGFuZy5TdHJpbmcgZm9vKCknPgorICAgIDxhbm5vdGF0aW9uIG5hbWU9J29yZy5qZXRicmFpbnMuYW5ub3RhdGlvbnMuTm90TnVsbCcvPgorICA8L2l0ZW0+CisgIDxpdGVtIG5hbWU9J3N1cHByZXNzZWQuU2Vjb25kU3VwcHJlc3Npb24gdm9pZCBzZWNvbmQoKSc+CisgICAgICA8YW5ub3RhdGlvbiBuYW1lPSdqYXZhLmxhbmcuU3VwcHJlc3NXYXJuaW5ncyc+CisgICAgICAgICAgPHZhbCB2YWw9IntEb2VzbnRNYXR0ZXJXaGF0LCAmcXVvdDtTaWxseUFzc2lnbm1lbnQmcXVvdDt9Ii8+CisgICAgICA8L2Fubm90YXRpb24+CisgIDwvaXRlbT4KKzwvcm9vdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZXh0ZXJuYWxBbm5vdGF0aW9ucy9jb250ZW50L2Fubm9NdWx0aVJvb3Qvcm9vdDEvbXVsdGlSb290L2Fubm90YXRpb25zLnhtbCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9leHRlcm5hbEFubm90YXRpb25zL2NvbnRlbnQvYW5ub011bHRpUm9vdC9yb290MS9tdWx0aVJvb3QvYW5ub3RhdGlvbnMueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM2YWE4ZDgKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZXh0ZXJuYWxBbm5vdGF0aW9ucy9jb250ZW50L2Fubm9NdWx0aVJvb3Qvcm9vdDEvbXVsdGlSb290L2Fubm90YXRpb25zLnhtbApAQCAtMCwwICsxLDcgQEAKKzxyb290PgorICA8aXRlbSBuYW1lPSdtdWx0aVJvb3QuVGVzdCBqYXZhLmxhbmcuU3RyaW5nIGdldChqYXZhLmxhbmcuU3RyaW5nKSAwJz4KKyAgICA8YW5ub3RhdGlvbiBuYW1lPSdvcmcuamV0YnJhaW5zLmFubm90YXRpb25zLk5vdE51bGwnPgorICAgICAgPHZhbCBuYW1lPSJ2YWx1ZSIgdmFsPSImcXVvdDtmb28mcXVvdDsiLz4KKyAgICA8L2Fubm90YXRpb24+CisgIDwvaXRlbT4KKzwvcm9vdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZXh0ZXJuYWxBbm5vdGF0aW9ucy9jb250ZW50L2Fubm9NdWx0aVJvb3Qvcm9vdDEvbXVsdGlSb290L2Fubm90YXRpb25zX2FmdGVyLnhtbCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9leHRlcm5hbEFubm90YXRpb25zL2NvbnRlbnQvYW5ub011bHRpUm9vdC9yb290MS9tdWx0aVJvb3QvYW5ub3RhdGlvbnNfYWZ0ZXIueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY2MzVhMzMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZXh0ZXJuYWxBbm5vdGF0aW9ucy9jb250ZW50L2Fubm9NdWx0aVJvb3Qvcm9vdDEvbXVsdGlSb290L2Fubm90YXRpb25zX2FmdGVyLnhtbApAQCAtMCwwICsxLDcgQEAKKzxyb290PgorICA8aXRlbSBuYW1lPSdtdWx0aVJvb3QuVGVzdCBqYXZhLmxhbmcuU3RyaW5nIGdldChqYXZhLmxhbmcuU3RyaW5nKSAwJz4KKyAgICAgIDxhbm5vdGF0aW9uIG5hbWU9J29yZy5qZXRicmFpbnMuYW5ub3RhdGlvbnMuTm90TnVsbCc+CisgICAgICAgICAgPHZhbCBuYW1lPSJ2YWx1ZSIgdmFsPSImcXVvdDtiYXImcXVvdDsiLz4KKyAgICAgIDwvYW5ub3RhdGlvbj4KKyAgPC9pdGVtPgorPC9yb290PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9leHRlcm5hbEFubm90YXRpb25zL2NvbnRlbnQvYW5ub011bHRpUm9vdC9yb290Mi9tdWx0aVJvb3QvYW5ub3RhdGlvbnMueG1sIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2V4dGVybmFsQW5ub3RhdGlvbnMvY29udGVudC9hbm5vTXVsdGlSb290L3Jvb3QyL211bHRpUm9vdC9hbm5vdGF0aW9ucy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTQ5N2E2ZQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9leHRlcm5hbEFubm90YXRpb25zL2NvbnRlbnQvYW5ub011bHRpUm9vdC9yb290Mi9tdWx0aVJvb3QvYW5ub3RhdGlvbnMueG1sCkBAIC0wLDAgKzEsNyBAQAorPHJvb3Q+CisgIDxpdGVtIG5hbWU9J211bHRpUm9vdC5UZXN0IGphdmEubGFuZy5TdHJpbmcgZ2V0KGphdmEubGFuZy5TdHJpbmcpJz4KKyAgICA8YW5ub3RhdGlvbiBuYW1lPSdvcmcuamV0YnJhaW5zLmFubm90YXRpb25zLk51bGxhYmxlJz4KKyAgICAgIDx2YWwgbmFtZT0idmFsdWUiIHZhbD0iJnF1b3Q7Zm9vJnF1b3Q7Ii8+CisgICAgPC9hbm5vdGF0aW9uPgorICA8L2l0ZW0+Cis8L3Jvb3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2V4dGVybmFsQW5ub3RhdGlvbnMvY29udGVudC9hbm5vTXVsdGlSb290L3Jvb3QyL211bHRpUm9vdC9hbm5vdGF0aW9uc19hZnRlci54bWwgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZXh0ZXJuYWxBbm5vdGF0aW9ucy9jb250ZW50L2Fubm9NdWx0aVJvb3Qvcm9vdDIvbXVsdGlSb290L2Fubm90YXRpb25zX2FmdGVyLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MGUwNDFjCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2V4dGVybmFsQW5ub3RhdGlvbnMvY29udGVudC9hbm5vTXVsdGlSb290L3Jvb3QyL211bHRpUm9vdC9hbm5vdGF0aW9uc19hZnRlci54bWwKQEAgLTAsMCArMSw3IEBACis8cm9vdD4KKyAgPGl0ZW0gbmFtZT0nbXVsdGlSb290LlRlc3QgamF2YS5sYW5nLlN0cmluZyBnZXQoamF2YS5sYW5nLlN0cmluZyknPgorICAgICAgPGFubm90YXRpb24gbmFtZT0nb3JnLmpldGJyYWlucy5hbm5vdGF0aW9ucy5OdWxsYWJsZSc+CisgICAgICAgICAgPHZhbCBuYW1lPSJ2YWx1ZSIgdmFsPSImcXVvdDtiYXImcXVvdDsiLz4KKyAgICAgIDwvYW5ub3RhdGlvbj4KKyAgPC9pdGVtPgorPC9yb290PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9leHRlcm5hbEFubm90YXRpb25zL2xpYi9tdWx0aVJvb3QvVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2V4dGVybmFsQW5ub3RhdGlvbnMvbGliL211bHRpUm9vdC9UZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTQ3OGZhYwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9leHRlcm5hbEFubm90YXRpb25zL2xpYi9tdWx0aVJvb3QvVGVzdC5qYXZhCkBAIC0wLDAgKzEsNyBAQAorcGFja2FnZSBtdWx0aVJvb3Q7CisKK2NsYXNzIFRlc3QgeworICBTdHJpbmcgZ2V0KFN0cmluZyBwYXJhbSkgeworICAgIHJldHVybiBudWxsOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2V4dGVybmFsQW5ub3RhdGlvbnMvbGliL3AvVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2V4dGVybmFsQW5ub3RhdGlvbnMvbGliL3AvVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjYjRkOGMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZXh0ZXJuYWxBbm5vdGF0aW9ucy9saWIvcC9UZXN0LmphdmEKQEAgLTAsMCArMSw2IEBACitwYWNrYWdlIHA7CitjbGFzcyBUZXN0IHsKKyAgU3RyaW5nIGc8Y2FyZXQ+ZXQoKSB7CisgICAgcmV0dXJuIG51bGw7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZXh0ZXJuYWxBbm5vdGF0aW9ucy9saWIvcC9UZXN0QW5ub3RhdGVkLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZXh0ZXJuYWxBbm5vdGF0aW9ucy9saWIvcC9UZXN0QW5ub3RhdGVkLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzA2YWMwYQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9leHRlcm5hbEFubm90YXRpb25zL2xpYi9wL1Rlc3RBbm5vdGF0ZWQuamF2YQpAQCAtMCwwICsxLDExIEBACitwYWNrYWdlIHA7CisKK2ltcG9ydCBvcmcuamV0YnJhaW5zLmFubm90YXRpb25zLk5vdE51bGw7CisKK2NsYXNzIFRlc3QgeworCisgIEBOb3ROdWxsCisgIFN0cmluZyBnPGNhcmV0PmV0KCkgeworICAgIHJldHVybiBudWxsOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2V4dGVybmFsQW5ub3RhdGlvbnMvbGliL3AvVGVzdERlYW5ub3RhdGlvbi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2V4dGVybmFsQW5ub3RhdGlvbnMvbGliL3AvVGVzdERlYW5ub3RhdGlvbi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYxNzViOWYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZXh0ZXJuYWxBbm5vdGF0aW9ucy9saWIvcC9UZXN0RGVhbm5vdGF0aW9uLmphdmEKQEAgLTAsMCArMSw4IEBACitwYWNrYWdlIHA7CisKK3B1YmxpYyBjbGFzcyBUZXN0RGVhbm5vdGF0aW9uIHsKKworICBTdHJpbmcgZzxjYXJldD5ldCgpIHsKKyAgICByZXR1cm4gbnVsbDsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9leHRlcm5hbEFubm90YXRpb25zL2xpYi9wL1Rlc3REZWFubm90YXRpb24xLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZXh0ZXJuYWxBbm5vdGF0aW9ucy9saWIvcC9UZXN0RGVhbm5vdGF0aW9uMS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI0MGI5NDAKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZXh0ZXJuYWxBbm5vdGF0aW9ucy9saWIvcC9UZXN0RGVhbm5vdGF0aW9uMS5qYXZhCkBAIC0wLDAgKzEsOCBAQAorcGFja2FnZSBwOworCitwdWJsaWMgY2xhc3MgVGVzdERlYW5ub3RhdGlvbjEgeworCisgIFN0cmluZyBnZXQoU3RyaW5nIHM8Y2FyZXQ+cykgeworICAgIHJldHVybiBudWxsOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2V4dGVybmFsQW5ub3RhdGlvbnMvbGliL3AvVGVzdFByaW1pdGl2ZS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2V4dGVybmFsQW5ub3RhdGlvbnMvbGliL3AvVGVzdFByaW1pdGl2ZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBiZTQ5YTkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZXh0ZXJuYWxBbm5vdGF0aW9ucy9saWIvcC9UZXN0UHJpbWl0aXZlLmphdmEKQEAgLTAsMCArMSw2IEBACitwYWNrYWdlIHA7CitjbGFzcyBUZXN0IHsKKyAgYm9vbGVhbiBnPGNhcmV0PmV0KCkgeworICAgIHJldHVybiBmYWxzZTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9leHRlcm5hbEFubm90YXRpb25zL2xpYi9wZXJzaXN0ZW5jZS9UZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZXh0ZXJuYWxBbm5vdGF0aW9ucy9saWIvcGVyc2lzdGVuY2UvVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ2MWUzNzQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZXh0ZXJuYWxBbm5vdGF0aW9ucy9saWIvcGVyc2lzdGVuY2UvVGVzdC5qYXZhCkBAIC0wLDAgKzEsOSBAQAorcGFja2FnZSBwZXJzaXN0ZW5jZTsKKworaW1wb3J0IGphdmEudXRpbC4qOworCitjbGFzcyBUZXN0IHsKKyAgU3RyaW5nIDxUPiBnZXRTdHJpbmcoTWFwLkVudHJ5PFQsIFQ+IGVudHJ5KSB7CisgICAgcmV0dXJuIG51bGw7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZXh0ZXJuYWxBbm5vdGF0aW9ucy9zcmMvc3VwcHJlc3NlZC9FeGlzdGluZ0V4dGVybmFsTmFtZS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2V4dGVybmFsQW5ub3RhdGlvbnMvc3JjL3N1cHByZXNzZWQvRXhpc3RpbmdFeHRlcm5hbE5hbWUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YTg3NWY4Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2V4dGVybmFsQW5ub3RhdGlvbnMvc3JjL3N1cHByZXNzZWQvRXhpc3RpbmdFeHRlcm5hbE5hbWUuamF2YQpAQCAtMCwwICsxLDggQEAKK3BhY2thZ2Ugc3VwcHJlc3NlZDsKK2NsYXNzIEV4aXN0aW5nRXh0ZXJuYWxOYW1lIHsKKyAgU3RyaW5nIGZvbygpeworICAgIFN0cmluZyBzdHIgPSAiIjsKKyAgICBzPGNhcmV0PnRyID0gc3RyOworICAgIHJldHVybiBzdHI7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZXh0ZXJuYWxBbm5vdGF0aW9ucy9zcmMvc3VwcHJlc3NlZC9OZXdTdXBwcmVzcy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2V4dGVybmFsQW5ub3RhdGlvbnMvc3JjL3N1cHByZXNzZWQvTmV3U3VwcHJlc3MuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZjYxY2IxCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2V4dGVybmFsQW5ub3RhdGlvbnMvc3JjL3N1cHByZXNzZWQvTmV3U3VwcHJlc3MuamF2YQpAQCAtMCwwICsxLDcgQEAKK3BhY2thZ2Ugc3VwcHJlc3NlZDsKK2NsYXNzIE5ld1N1cHByZXNzIHsKKyAgdm9pZCBiYXJyKCkgeworICAgIFN0cmluZyBzdHIgPSAiIjsKKyAgICBzdDxjYXJldD5yID0gc3RyOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2V4dGVybmFsQW5ub3RhdGlvbnMvc3JjL3N1cHByZXNzZWQvU2Vjb25kU3VwcHJlc3Npb24uamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9leHRlcm5hbEFubm90YXRpb25zL3NyYy9zdXBwcmVzc2VkL1NlY29uZFN1cHByZXNzaW9uLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzBmNGIxOAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9leHRlcm5hbEFubm90YXRpb25zL3NyYy9zdXBwcmVzc2VkL1NlY29uZFN1cHByZXNzaW9uLmphdmEKQEAgLTAsMCArMSw3IEBACitwYWNrYWdlIHN1cHByZXNzZWQ7CitjbGFzcyBTZWNvbmRTdXBwcmVzc2lvbiB7CisgIHZvaWQgc2Vjb25kKCkgeworICAgIFN0cmluZyBzdHIgPSAiIjsKKyAgICBzdDxjYXJldD5yID0gc3RyOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2V4dGVybmFsSmF2YWRvYy9TdHJpbmcvNi9leHBlY3RlZC5odG1sIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2V4dGVybmFsSmF2YWRvYy9TdHJpbmcvNi9leHBlY3RlZC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ1Zjk2YmYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZXh0ZXJuYWxKYXZhZG9jL1N0cmluZy82L2V4cGVjdGVkLmh0bWwKQEAgLTAsMCArMSw5OSBAQAorPEhUTUw+PHN0eWxlIHR5cGU9InRleHQvY3NzIj4gIHVsLmluaGVyaXRhbmNlIHsKKyAgICAgIG1hcmdpbjowOworICAgICAgcGFkZGluZzowOworICB9CisgIHVsLmluaGVyaXRhbmNlIGxpIHsKKyAgICAgICBkaXNwbGF5OmlubGluZTsKKyAgICAgICBsaXN0LXN0eWxlOm5vbmU7CisgIH0KKyAgdWwuaW5oZXJpdGFuY2UgbGkgdWwuaW5oZXJpdGFuY2UgeworICAgIG1hcmdpbi1sZWZ0OjE1cHg7CisgICAgcGFkZGluZy1sZWZ0OjE1cHg7CisgICAgcGFkZGluZy10b3A6MXB4OworICB9Cis8L3N0eWxlPjwhLS0gPT09PT09PT0gU1RBUlQgT0YgQ0xBU1MgREFUQSA9PT09PT09PSAtLT4KKzxIMj4KKyAgICA8Rk9OVCBTSVpFPSItMSI+CisgICAgICAgIGphdmEubGFuZzwvRk9OVD4KKyAgICA8QlI+CisgICAgQ2xhc3MgU3RyaW5nPC9IMj4KKzxQUkU+Cis8QSBIUkVGPSIuLi8uLi9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBqYXZhLmxhbmciPmphdmEubGFuZy5PYmplY3Q8L0E+CisgIDxJTUcgU1JDPSIuLi8uLi9yZXNvdXJjZXMvaW5oZXJpdC5naWYiIEFMVD0iZXh0ZW5kZWQgYnkgIj48Qj5qYXZhLmxhbmcuU3RyaW5nPC9CPgorPC9QUkU+Cis8REw+PERMPgorICAgIDxEVD48QlI+PFBSRT5wdWJsaWMgZmluYWwgY2xhc3MgPEI+U3RyaW5nPC9CPjxEVD48QlI+ZXh0ZW5kcyA8QSBIUkVGPSIuLi8uLi9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBqYXZhLmxhbmciPk9iamVjdDwvQT48RFQ+PEJSPmltcGxlbWVudHMgPEEgSFJFRj0iLi4vLi4vamF2YS9pby9TZXJpYWxpemFibGUuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBqYXZhLmlvIj5TZXJpYWxpemFibGU8L0E+LCA8QSBIUkVGPSIuLi8uLi9qYXZhL2xhbmcvQ29tcGFyYWJsZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIGphdmEubGFuZyI+Q29tcGFyYWJsZTwvQT4mbHQ7PEEgSFJFRj0iLi4vLi4vamF2YS9sYW5nL1N0cmluZy5odG1sIiB0aXRsZT0iY2xhc3MgaW4gamF2YS5sYW5nIj5TdHJpbmc8L0E+Jmd0OywgPEEgSFJFRj0iLi4vLi4vamF2YS9sYW5nL0NoYXJTZXF1ZW5jZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIGphdmEubGFuZyI+Q2hhclNlcXVlbmNlPC9BPjwvREw+Cis8L1BSRT4KKworICAgIDxEVD48Qj5BbGwgSW1wbGVtZW50ZWQgSW50ZXJmYWNlczo8L0I+IDxERD48QSBIUkVGPSIuLi8uLi9qYXZhL2lvL1NlcmlhbGl6YWJsZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIGphdmEuaW8iPlNlcmlhbGl6YWJsZTwvQT4sIDxBIEhSRUY9Ii4uLy4uL2phdmEvbGFuZy9DaGFyU2VxdWVuY2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBqYXZhLmxhbmciPkNoYXJTZXF1ZW5jZTwvQT4sIDxBIEhSRUY9Ii4uLy4uL2phdmEvbGFuZy9Db21wYXJhYmxlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gamF2YS5sYW5nIj5Db21wYXJhYmxlPC9BPiZsdDs8QSBIUkVGPSIuLi8uLi9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBqYXZhLmxhbmciPlN0cmluZzwvQT4mZ3Q7PC9ERD4KKzwvREw+Cis8UD4gICAgVGhlIDxjb2RlPlN0cmluZzwvY29kZT4gY2xhc3MgcmVwcmVzZW50cyBjaGFyYWN0ZXIgc3RyaW5ncy4gQWxsCisgICAgc3RyaW5nIGxpdGVyYWxzIGluIEphdmEgcHJvZ3JhbXMsIHN1Y2ggYXMgPGNvZGU+ImFiYyI8L2NvZGU+LCBhcmUKKyAgICBpbXBsZW1lbnRlZCBhcyBpbnN0YW5jZXMgb2YgdGhpcyBjbGFzcy4KKzxwPgorICAgIFN0cmluZ3MgYXJlIGNvbnN0YW50OyB0aGVpciB2YWx1ZXMgY2Fubm90IGJlIGNoYW5nZWQgYWZ0ZXIgdGhleQorICAgIGFyZSBjcmVhdGVkLiBTdHJpbmcgYnVmZmVycyBzdXBwb3J0IG11dGFibGUgc3RyaW5ncy4KKyAgICBCZWNhdXNlIFN0cmluZyBvYmplY3RzIGFyZSBpbW11dGFibGUgdGhleSBjYW4gYmUgc2hhcmVkLiBGb3IgZXhhbXBsZToKKzxwPjxibG9ja3F1b3RlPjxwcmU+CisgICAgIFN0cmluZyBzdHIgPSAiYWJjIjsKKyA8L3ByZT48L2Jsb2NrcXVvdGU+PHA+CisgICAgaXMgZXF1aXZhbGVudCB0bzoKKzxwPjxibG9ja3F1b3RlPjxwcmU+CisgICAgIGNoYXIgZGF0YVtdID0geydhJywgJ2InLCAnYyd9OworICAgICBTdHJpbmcgc3RyID0gbmV3IFN0cmluZyhkYXRhKTsKKyA8L3ByZT48L2Jsb2NrcXVvdGU+PHA+CisgICAgSGVyZSBhcmUgc29tZSBtb3JlIGV4YW1wbGVzIG9mIGhvdyBzdHJpbmdzIGNhbiBiZSB1c2VkOgorPHA+PGJsb2NrcXVvdGU+PHByZT4KKyAgICAgU3lzdGVtLm91dC5wcmludGxuKCJhYmMiKTsKKyAgICAgU3RyaW5nIGNkZSA9ICJjZGUiOworICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImFiYyIgKyBjZGUpOworICAgICBTdHJpbmcgYyA9ICJhYmMiLnN1YnN0cmluZygyLDMpOworICAgICBTdHJpbmcgZCA9IGNkZS5zdWJzdHJpbmcoMSwgMik7CisgPC9wcmU+PC9ibG9ja3F1b3RlPgorPHA+CisgICAgVGhlIGNsYXNzIDxjb2RlPlN0cmluZzwvY29kZT4gaW5jbHVkZXMgbWV0aG9kcyBmb3IgZXhhbWluaW5nCisgICAgaW5kaXZpZHVhbCBjaGFyYWN0ZXJzIG9mIHRoZSBzZXF1ZW5jZSwgZm9yIGNvbXBhcmluZyBzdHJpbmdzLCBmb3IKKyAgICBzZWFyY2hpbmcgc3RyaW5ncywgZm9yIGV4dHJhY3Rpbmcgc3Vic3RyaW5ncywgYW5kIGZvciBjcmVhdGluZyBhCisgICAgY29weSBvZiBhIHN0cmluZyB3aXRoIGFsbCBjaGFyYWN0ZXJzIHRyYW5zbGF0ZWQgdG8gdXBwZXJjYXNlIG9yIHRvCisgICAgbG93ZXJjYXNlLiBDYXNlIG1hcHBpbmcgaXMgYmFzZWQgb24gdGhlIFVuaWNvZGUgU3RhbmRhcmQgdmVyc2lvbgorICAgIHNwZWNpZmllZCBieSB0aGUgPEEgSFJFRj0iLi4vLi4vamF2YS9sYW5nL0NoYXJhY3Rlci5odG1sIiB0aXRsZT0iY2xhc3MgaW4gamF2YS5sYW5nIj48Q09ERT5DaGFyYWN0ZXI8L0NPREU+PC9BPiBjbGFzcy4KKzxwPgorICAgIFRoZSBKYXZhIGxhbmd1YWdlIHByb3ZpZGVzIHNwZWNpYWwgc3VwcG9ydCBmb3IgdGhlIHN0cmluZworICAgIGNvbmNhdGVuYXRpb24gb3BlcmF0b3IgKCZuYnNwOysmbmJzcDspLCBhbmQgZm9yIGNvbnZlcnNpb24gb2YKKyAgICBvdGhlciBvYmplY3RzIHRvIHN0cmluZ3MuIFN0cmluZyBjb25jYXRlbmF0aW9uIGlzIGltcGxlbWVudGVkCisgICAgdGhyb3VnaCB0aGUgPGNvZGU+U3RyaW5nQnVpbGRlcjwvY29kZT4ob3IgPGNvZGU+U3RyaW5nQnVmZmVyPC9jb2RlPikKKyAgICBjbGFzcyBhbmQgaXRzIDxjb2RlPmFwcGVuZDwvY29kZT4gbWV0aG9kLgorICAgIFN0cmluZyBjb252ZXJzaW9ucyBhcmUgaW1wbGVtZW50ZWQgdGhyb3VnaCB0aGUgbWV0aG9kCisgICAgPGNvZGU+dG9TdHJpbmc8L2NvZGU+LCBkZWZpbmVkIGJ5IDxjb2RlPk9iamVjdDwvY29kZT4gYW5kCisgICAgaW5oZXJpdGVkIGJ5IGFsbCBjbGFzc2VzIGluIEphdmEuIEZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIG9uCisgICAgc3RyaW5nIGNvbmNhdGVuYXRpb24gYW5kIGNvbnZlcnNpb24sIHNlZSBHb3NsaW5nLCBKb3ksIGFuZCBTdGVlbGUsCisgICAgPGk+VGhlIEphdmEgTGFuZ3VhZ2UgU3BlY2lmaWNhdGlvbjwvaT4uCisKKzxwPiBVbmxlc3Mgb3RoZXJ3aXNlIG5vdGVkLCBwYXNzaW5nIGEgPHR0Pm51bGw8L3R0PiBhcmd1bWVudCB0byBhIGNvbnN0cnVjdG9yCisgICAgb3IgbWV0aG9kIGluIHRoaXMgY2xhc3Mgd2lsbCBjYXVzZSBhIDxBIEhSRUY9Ii4uLy4uL2phdmEvbGFuZy9OdWxsUG9pbnRlckV4Y2VwdGlvbi5odG1sIiB0aXRsZT0iY2xhc3MgaW4gamF2YS5sYW5nIj48Q09ERT5OdWxsUG9pbnRlckV4Y2VwdGlvbjwvQ09ERT48L0E+IHRvIGJlCisgICAgdGhyb3duLgorCis8cD5BIDxjb2RlPlN0cmluZzwvY29kZT4gcmVwcmVzZW50cyBhIHN0cmluZyBpbiB0aGUgVVRGLTE2IGZvcm1hdAorICAgIGluIHdoaWNoIDxlbT5zdXBwbGVtZW50YXJ5IGNoYXJhY3RlcnM8L2VtPiBhcmUgcmVwcmVzZW50ZWQgYnkgPGVtPnN1cnJvZ2F0ZQorICAgICAgICBwYWlyczwvZW0+IChzZWUgdGhlIHNlY3Rpb24gPGEgaHJlZj0iQ2hhcmFjdGVyLmh0bWwjdW5pY29kZSI+VW5pY29kZQorICAgICAgICBDaGFyYWN0ZXIgUmVwcmVzZW50YXRpb25zPC9hPiBpbiB0aGUgPGNvZGU+Q2hhcmFjdGVyPC9jb2RlPiBjbGFzcyBmb3IKKyAgICBtb3JlIGluZm9ybWF0aW9uKS4KKyAgICBJbmRleCB2YWx1ZXMgcmVmZXIgdG8gPGNvZGU+Y2hhcjwvY29kZT4gY29kZSB1bml0cywgc28gYSBzdXBwbGVtZW50YXJ5CisgICAgY2hhcmFjdGVyIHVzZXMgdHdvIHBvc2l0aW9ucyBpbiBhIDxjb2RlPlN0cmluZzwvY29kZT4uCis8cD5UaGUgPGNvZGU+U3RyaW5nPC9jb2RlPiBjbGFzcyBwcm92aWRlcyBtZXRob2RzIGZvciBkZWFsaW5nIHdpdGgKKyAgICBVbmljb2RlIGNvZGUgcG9pbnRzIChpLmUuLCBjaGFyYWN0ZXJzKSwgaW4gYWRkaXRpb24gdG8gdGhvc2UgZm9yCisgICAgZGVhbGluZyB3aXRoIFVuaWNvZGUgY29kZSB1bml0cyAoaS5lLiwgPGNvZGU+Y2hhcjwvY29kZT4gdmFsdWVzKS4KKzxQPgorCis8UD4KKzxETD4KKyAgICA8RFQ+PEI+U2luY2U6PC9CPjwvRFQ+CisgICAgPEREPkpESzEuMDwvREQ+CisgICAgPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vamF2YS9sYW5nL09iamVjdC5odG1sI3RvU3RyaW5nKCkiPjxDT0RFPk9iamVjdC50b1N0cmluZygpPC9DT0RFPjwvQT4sCisgICAgPEEgSFJFRj0iLi4vLi4vamF2YS9sYW5nL1N0cmluZ0J1ZmZlci5odG1sIiB0aXRsZT0iY2xhc3MgaW4gamF2YS5sYW5nIj48Q09ERT5TdHJpbmdCdWZmZXI8L0NPREU+PC9BPiwKKyAgICA8QSBIUkVGPSIuLi8uLi9qYXZhL2xhbmcvU3RyaW5nQnVpbGRlci5odG1sIiB0aXRsZT0iY2xhc3MgaW4gamF2YS5sYW5nIj48Q09ERT5TdHJpbmdCdWlsZGVyPC9DT0RFPjwvQT4sCisgICAgPEEgSFJFRj0iLi4vLi4vamF2YS9uaW8vY2hhcnNldC9DaGFyc2V0Lmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBqYXZhLm5pby5jaGFyc2V0Ij48Q09ERT5DaGFyc2V0PC9DT0RFPjwvQT4sCisgICAgPEEgSFJFRj0iLi4vLi4vc2VyaWFsaXplZC1mb3JtLmh0bWwjamF2YS5sYW5nLlN0cmluZyI+U2VyaWFsaXplZCBGb3JtPC9BPjwvREw+CisKKzxQPgorPC9IVE1MPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9leHRlcm5hbEphdmFkb2MvU3RyaW5nLzYvZXhwZWN0ZWRUb0xvd2VyQ2FzZS5odG1sIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2V4dGVybmFsSmF2YWRvYy9TdHJpbmcvNi9leHBlY3RlZFRvTG93ZXJDYXNlLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDFkYjc1NgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9leHRlcm5hbEphdmFkb2MvU3RyaW5nLzYvZXhwZWN0ZWRUb0xvd2VyQ2FzZS5odG1sCkBAIC0wLDAgKzEsNDQgQEAKKzxIVE1MPjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+ICB1bC5pbmhlcml0YW5jZSB7CisgICAgICBtYXJnaW46MDsKKyAgICAgIHBhZGRpbmc6MDsKKyAgfQorICB1bC5pbmhlcml0YW5jZSBsaSB7CisgICAgICAgZGlzcGxheTppbmxpbmU7CisgICAgICAgbGlzdC1zdHlsZTpub25lOworICB9CisgIHVsLmluaGVyaXRhbmNlIGxpIHVsLmluaGVyaXRhbmNlIHsKKyAgICBtYXJnaW4tbGVmdDoxNXB4OworICAgIHBhZGRpbmctbGVmdDoxNXB4OworICAgIHBhZGRpbmctdG9wOjFweDsKKyAgfQorPC9zdHlsZT48QSBOQU1FPSJ0b0xvd2VyQ2FzZSgpIj48IS0tIC0tPjwvQT48SDM+CisgICAgdG9Mb3dlckNhc2U8L0gzPgorPFBSRT4KK3B1YmxpYyA8QSBIUkVGPSIuLi8uLi9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBqYXZhLmxhbmciPlN0cmluZzwvQT4gPEI+dG9Mb3dlckNhc2U8L0I+KCk8L1BSRT4KKzxETD4KKyAgICA8REQ+Q29udmVydHMgYWxsIG9mIHRoZSBjaGFyYWN0ZXJzIGluIHRoaXMgPGNvZGU+U3RyaW5nPC9jb2RlPiB0byBsb3dlcgorICAgICAgICBjYXNlIHVzaW5nIHRoZSBydWxlcyBvZiB0aGUgZGVmYXVsdCBsb2NhbGUuIFRoaXMgaXMgZXF1aXZhbGVudCB0byBjYWxsaW5nCisgICAgICAgIDxjb2RlPnRvTG93ZXJDYXNlKExvY2FsZS5nZXREZWZhdWx0KCkpPC9jb2RlPi4KKyAgICAgICAgPHA+CisgICAgICAgICAgICA8Yj5Ob3RlOjwvYj4gVGhpcyBtZXRob2QgaXMgbG9jYWxlIHNlbnNpdGl2ZSwgYW5kIG1heSBwcm9kdWNlIHVuZXhwZWN0ZWQKKyAgICAgICAgICAgIHJlc3VsdHMgaWYgdXNlZCBmb3Igc3RyaW5ncyB0aGF0IGFyZSBpbnRlbmRlZCB0byBiZSBpbnRlcnByZXRlZCBsb2NhbGUKKyAgICAgICAgICAgIGluZGVwZW5kZW50bHkuCisgICAgICAgICAgICBFeGFtcGxlcyBhcmUgcHJvZ3JhbW1pbmcgbGFuZ3VhZ2UgaWRlbnRpZmllcnMsIHByb3RvY29sIGtleXMsIGFuZCBIVE1MCisgICAgICAgICAgICB0YWdzLgorICAgICAgICAgICAgRm9yIGluc3RhbmNlLCA8Y29kZT4iVElUTEUiLnRvTG93ZXJDYXNlKCk8L2NvZGU+IGluIGEgVHVya2lzaCBsb2NhbGUKKyAgICAgICAgICAgIHJldHVybnMgPGNvZGU+InQ/dGxlIjwvY29kZT4sIHdoZXJlICc/JyBpcyB0aGUgTEFUSU4gU01BTEwKKyAgICAgICAgICAgIExFVFRFUiBET1RMRVNTIEkgY2hhcmFjdGVyLgorICAgICAgICAgICAgVG8gb2J0YWluIGNvcnJlY3QgcmVzdWx0cyBmb3IgbG9jYWxlIGluc2Vuc2l0aXZlIHN0cmluZ3MsIHVzZQorICAgICAgICAgICAgPGNvZGU+dG9Mb3dlckNhc2UoTG9jYWxlLkVOR0xJU0gpPC9jb2RlPi4KKyAgICAgICAgPHA+CisgICAgICAgIDxQPgorICAgIDxERD48REw+CisgICAgPC9ETD4KKyAgICA8L0REPgorICAgIDxERD48REw+CisKKyAgICAgICAgPERUPjxCPlJldHVybnM6PC9CPjxERD50aGUgPGNvZGU+U3RyaW5nPC9jb2RlPiwgY29udmVydGVkIHRvIGxvd2VyY2FzZS48RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi9qYXZhL2xhbmcvU3RyaW5nLmh0bWwjdG9Mb3dlckNhc2UoamF2YS51dGlsLkxvY2FsZSkiPjxDT0RFPnRvTG93ZXJDYXNlKExvY2FsZSk8L0NPREU+PC9BPjwvREw+CisgICAgPC9ERD4KKzwvREw+CisKKzwvSFRNTD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZXh0ZXJuYWxKYXZhZG9jL1N0cmluZy82L3BhZ2UuaHRtbCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9leHRlcm5hbEphdmFkb2MvU3RyaW5nLzYvcGFnZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMzOWNlNjcKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZXh0ZXJuYWxKYXZhZG9jL1N0cmluZy82L3BhZ2UuaHRtbApAQCAtMCwwICsxLDM1NDQgQEAKKworPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCI+Cis8IS0tTmV3UGFnZS0tPgorPEhUTUw+Cis8SEVBRD4KKyAgICA8IS0tIEdlbmVyYXRlZCBieSBqYXZhZG9jIChidWlsZCAxLjYuMF8yNykgb24gV2VkIEF1ZyAxMCAxNTo1ODowMSBQRFQgMjAxMSAtLT4KKyAgICA8VElUTEU+CisgICAgICAgIFN0cmluZyAoSmF2YSBQbGF0Zm9ybSBTRSA2KQorICAgIDwvVElUTEU+CisKKyAgICA8TUVUQSBOQU1FPSJkYXRlIiBDT05URU5UPSIyMDExLTA4LTEwIj4KKyAgICA8TUVUQSBOQU1FPSJrZXl3b3JkcyIgQ09OVEVOVD0iamF2YS5sYW5nLlN0cmluZyBjbGFzcyI+CisgICAgPE1FVEEgTkFNRT0ia2V5d29yZHMiIENPTlRFTlQ9IkNBU0VfSU5TRU5TSVRJVkVfT1JERVIiPgorICAgIDxNRVRBIE5BTUU9ImtleXdvcmRzIiBDT05URU5UPSJsZW5ndGgoKSI+CisgICAgPE1FVEEgTkFNRT0ia2V5d29yZHMiIENPTlRFTlQ9ImlzRW1wdHkoKSI+CisgICAgPE1FVEEgTkFNRT0ia2V5d29yZHMiIENPTlRFTlQ9ImNoYXJBdCgpIj4KKyAgICA8TUVUQSBOQU1FPSJrZXl3b3JkcyIgQ09OVEVOVD0iY29kZVBvaW50QXQoKSI+CisgICAgPE1FVEEgTkFNRT0ia2V5d29yZHMiIENPTlRFTlQ9ImNvZGVQb2ludEJlZm9yZSgpIj4KKyAgICA8TUVUQSBOQU1FPSJrZXl3b3JkcyIgQ09OVEVOVD0iY29kZVBvaW50Q291bnQoKSI+CisgICAgPE1FVEEgTkFNRT0ia2V5d29yZHMiIENPTlRFTlQ9Im9mZnNldEJ5Q29kZVBvaW50cygpIj4KKyAgICA8TUVUQSBOQU1FPSJrZXl3b3JkcyIgQ09OVEVOVD0iZ2V0Q2hhcnMoKSI+CisgICAgPE1FVEEgTkFNRT0ia2V5d29yZHMiIENPTlRFTlQ9ImdldEJ5dGVzKCkiPgorICAgIDxNRVRBIE5BTUU9ImtleXdvcmRzIiBDT05URU5UPSJlcXVhbHMoKSI+CisgICAgPE1FVEEgTkFNRT0ia2V5d29yZHMiIENPTlRFTlQ9ImNvbnRlbnRFcXVhbHMoKSI+CisgICAgPE1FVEEgTkFNRT0ia2V5d29yZHMiIENPTlRFTlQ9ImVxdWFsc0lnbm9yZUNhc2UoKSI+CisgICAgPE1FVEEgTkFNRT0ia2V5d29yZHMiIENPTlRFTlQ9ImNvbXBhcmVUbygpIj4KKyAgICA8TUVUQSBOQU1FPSJrZXl3b3JkcyIgQ09OVEVOVD0iY29tcGFyZVRvSWdub3JlQ2FzZSgpIj4KKyAgICA8TUVUQSBOQU1FPSJrZXl3b3JkcyIgQ09OVEVOVD0icmVnaW9uTWF0Y2hlcygpIj4KKyAgICA8TUVUQSBOQU1FPSJrZXl3b3JkcyIgQ09OVEVOVD0ic3RhcnRzV2l0aCgpIj4KKyAgICA8TUVUQSBOQU1FPSJrZXl3b3JkcyIgQ09OVEVOVD0iZW5kc1dpdGgoKSI+CisgICAgPE1FVEEgTkFNRT0ia2V5d29yZHMiIENPTlRFTlQ9Imhhc2hDb2RlKCkiPgorICAgIDxNRVRBIE5BTUU9ImtleXdvcmRzIiBDT05URU5UPSJpbmRleE9mKCkiPgorICAgIDxNRVRBIE5BTUU9ImtleXdvcmRzIiBDT05URU5UPSJsYXN0SW5kZXhPZigpIj4KKyAgICA8TUVUQSBOQU1FPSJrZXl3b3JkcyIgQ09OVEVOVD0ic3Vic3RyaW5nKCkiPgorICAgIDxNRVRBIE5BTUU9ImtleXdvcmRzIiBDT05URU5UPSJzdWJTZXF1ZW5jZSgpIj4KKyAgICA8TUVUQSBOQU1FPSJrZXl3b3JkcyIgQ09OVEVOVD0iY29uY2F0KCkiPgorICAgIDxNRVRBIE5BTUU9ImtleXdvcmRzIiBDT05URU5UPSJyZXBsYWNlKCkiPgorICAgIDxNRVRBIE5BTUU9ImtleXdvcmRzIiBDT05URU5UPSJtYXRjaGVzKCkiPgorICAgIDxNRVRBIE5BTUU9ImtleXdvcmRzIiBDT05URU5UPSJjb250YWlucygpIj4KKyAgICA8TUVUQSBOQU1FPSJrZXl3b3JkcyIgQ09OVEVOVD0icmVwbGFjZUZpcnN0KCkiPgorICAgIDxNRVRBIE5BTUU9ImtleXdvcmRzIiBDT05URU5UPSJyZXBsYWNlQWxsKCkiPgorICAgIDxNRVRBIE5BTUU9ImtleXdvcmRzIiBDT05URU5UPSJzcGxpdCgpIj4KKyAgICA8TUVUQSBOQU1FPSJrZXl3b3JkcyIgQ09OVEVOVD0idG9Mb3dlckNhc2UoKSI+CisgICAgPE1FVEEgTkFNRT0ia2V5d29yZHMiIENPTlRFTlQ9InRvVXBwZXJDYXNlKCkiPgorICAgIDxNRVRBIE5BTUU9ImtleXdvcmRzIiBDT05URU5UPSJ0cmltKCkiPgorICAgIDxNRVRBIE5BTUU9ImtleXdvcmRzIiBDT05URU5UPSJ0b1N0cmluZygpIj4KKyAgICA8TUVUQSBOQU1FPSJrZXl3b3JkcyIgQ09OVEVOVD0idG9DaGFyQXJyYXkoKSI+CisgICAgPE1FVEEgTkFNRT0ia2V5d29yZHMiIENPTlRFTlQ9ImZvcm1hdCgpIj4KKyAgICA8TUVUQSBOQU1FPSJrZXl3b3JkcyIgQ09OVEVOVD0idmFsdWVPZigpIj4KKyAgICA8TUVUQSBOQU1FPSJrZXl3b3JkcyIgQ09OVEVOVD0iY29weVZhbHVlT2YoKSI+CisgICAgPE1FVEEgTkFNRT0ia2V5d29yZHMiIENPTlRFTlQ9ImludGVybigpIj4KKworICAgIDxMSU5LIFJFTCA9InN0eWxlc2hlZXQiIFRZUEU9InRleHQvY3NzIiBIUkVGPSIuLi8uLi9zdHlsZXNoZWV0LmNzcyIgVElUTEU9IlN0eWxlIj4KKworICAgIDxTQ1JJUFQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KKyAgICAgICAgZnVuY3Rpb24gd2luZG93VGl0bGUoKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAobG9jYXRpb24uaHJlZi5pbmRleE9mKCdpcy1leHRlcm5hbD10cnVlJykgPT0gLTEpIHsKKyAgICAgICAgICAgICAgICBwYXJlbnQuZG9jdW1lbnQudGl0bGU9IlN0cmluZyAoSmF2YSBQbGF0Zm9ybSBTRSA2KSI7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICA8L1NDUklQVD4KKyAgICA8Tk9TQ1JJUFQ+CisgICAgPC9OT1NDUklQVD4KKworPC9IRUFEPgorCis8Qk9EWSBCR0NPTE9SPSJ3aGl0ZSIgb25sb2FkPSJ3aW5kb3dUaXRsZSgpOyI+Cis8SFI+CisKKworPCEtLSA9PT09PT09PT0gU1RBUlQgT0YgVE9QIE5BVkJBUiA9PT09PT09IC0tPgorPEEgTkFNRT0ibmF2YmFyX3RvcCI+PCEtLSAtLT48L0E+Cis8QSBIUkVGPSIjc2tpcC1uYXZiYXJfdG9wIiB0aXRsZT0iU2tpcCBuYXZpZ2F0aW9uIGxpbmtzIj48L0E+Cis8VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjEiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgorICAgIDxUUj4KKyAgICAgICAgPFREIENPTFNQQU49MiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgorICAgICAgICAgICAgPEEgTkFNRT0ibmF2YmFyX3RvcF9maXJzdHJvdyI+PCEtLSAtLT48L0E+CisgICAgICAgICAgICA8VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiIFNVTU1BUlk9IiI+CisgICAgICAgICAgICAgICAgPFRSIEFMSUdOPSJjZW50ZXIiIFZBTElHTj0idG9wIj4KKyAgICAgICAgICAgICAgICAgICAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uL292ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5PdmVydmlldzwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+CisgICAgICAgICAgICAgICAgICAgIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5QYWNrYWdlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KKyAgICAgICAgICAgICAgICAgICAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxGT05UIENMQVNTPSJOYXZCYXJGb250MVJldiI+PEI+Q2xhc3M8L0I+PC9GT05UPiZuYnNwOzwvVEQ+CisgICAgICAgICAgICAgICAgICAgIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJjbGFzcy11c2UvU3RyaW5nLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VXNlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KKyAgICAgICAgICAgICAgICAgICAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2UtdHJlZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgorICAgICAgICAgICAgICAgICAgICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+CisgICAgICAgICAgICAgICAgICAgIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi9pbmRleC1maWxlcy9pbmRleC0xLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SW5kZXg8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgorICAgICAgICAgICAgICAgICAgICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vaGVscC1kb2MuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5IZWxwPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KKyAgICAgICAgICAgICAgICA8L1RSPgorICAgICAgICAgICAgPC9UQUJMRT4KKyAgICAgICAgPC9URD4KKyAgICAgICAgPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFJPV1NQQU49Mz48RU0+CisgICAgICAgICAgICA8Yj5KYXZhJiN4MjEyMjsmbmJzcDtQbGF0Zm9ybTxicj5TdGFuZGFyZCZuYnNwO0VkLiZuYnNwOzY8L2I+PC9FTT4KKyAgICAgICAgPC9URD4KKyAgICA8L1RSPgorCisgICAgPFRSPgorICAgICAgICA8VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgorICAgICAgICAgICAgJm5ic3A7PEEgSFJFRj0iLi4vLi4vamF2YS9sYW5nL1N0cmljdE1hdGguaHRtbCIgdGl0bGU9ImNsYXNzIGluIGphdmEubGFuZyI+PEI+UFJFViBDTEFTUzwvQj48L0E+Jm5ic3A7CisgICAgICAgICAgICAmbmJzcDs8QSBIUkVGPSIuLi8uLi9qYXZhL2xhbmcvU3RyaW5nQnVmZmVyLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBqYXZhLmxhbmciPjxCPk5FWFQgQ0xBU1M8L0I+PC9BPjwvRk9OVD48L1REPgorICAgICAgICA8VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgorICAgICAgICAgICAgPEEgSFJFRj0iLi4vLi4vaW5kZXguaHRtbD9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOworICAgICAgICAgICAgJm5ic3A7PEEgSFJFRj0iU3RyaW5nLmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOworICAgICAgICAgICAgJm5ic3A7PFNDUklQVCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgorICAgICAgICAgICAgPCEtLQorICAgICAgICAgICAgaWYod2luZG93PT10b3ApIHsKKyAgICAgICAgICAgICAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSIuLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgLy8tLT4KKyAgICAgICAgPC9TQ1JJUFQ+CisgICAgICAgICAgICA8Tk9TQ1JJUFQ+CisgICAgICAgICAgICAgICAgPEEgSFJFRj0iLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KKyAgICAgICAgICAgIDwvTk9TQ1JJUFQ+CisKKworICAgICAgICA8L0ZPTlQ+PC9URD4KKyAgICA8L1RSPgorICAgIDxUUj4KKyAgICAgICAgPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KKyAgICAgICAgICAgIFNVTU1BUlk6Jm5ic3A7TkVTVEVEJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNmaWVsZF9zdW1tYXJ5Ij5GSUVMRDwvQT4mbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI2NvbnN0cnVjdG9yX3N1bW1hcnkiPkNPTlNUUjwvQT4mbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9zdW1tYXJ5Ij5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+CisgICAgICAgIDxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+CisgICAgICAgICAgICBERVRBSUw6Jm5ic3A7PEEgSFJFRj0iI2ZpZWxkX2RldGFpbCI+RklFTEQ8L0E+Jm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNjb25zdHJ1Y3Rvcl9kZXRhaWwiPkNPTlNUUjwvQT4mbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9kZXRhaWwiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KKyAgICA8L1RSPgorPC9UQUJMRT4KKzxBIE5BTUU9InNraXAtbmF2YmFyX3RvcCI+PC9BPgorPCEtLSA9PT09PT09PT0gRU5EIE9GIFRPUCBOQVZCQVIgPT09PT09PT09IC0tPgorCis8SFI+Cis8IS0tID09PT09PT09IFNUQVJUIE9GIENMQVNTIERBVEEgPT09PT09PT0gLS0+Cis8SDI+CisgICAgPEZPTlQgU0laRT0iLTEiPgorICAgICAgICBqYXZhLmxhbmc8L0ZPTlQ+CisgICAgPEJSPgorICAgIENsYXNzIFN0cmluZzwvSDI+Cis8UFJFPgorPEEgSFJFRj0iLi4vLi4vamF2YS9sYW5nL09iamVjdC5odG1sIiB0aXRsZT0iY2xhc3MgaW4gamF2YS5sYW5nIj5qYXZhLmxhbmcuT2JqZWN0PC9BPgorICA8SU1HIFNSQz0iLi4vLi4vcmVzb3VyY2VzL2luaGVyaXQuZ2lmIiBBTFQ9ImV4dGVuZGVkIGJ5ICI+PEI+amF2YS5sYW5nLlN0cmluZzwvQj4KKzwvUFJFPgorPERMPgorICAgIDxEVD48Qj5BbGwgSW1wbGVtZW50ZWQgSW50ZXJmYWNlczo8L0I+IDxERD48QSBIUkVGPSIuLi8uLi9qYXZhL2lvL1NlcmlhbGl6YWJsZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIGphdmEuaW8iPlNlcmlhbGl6YWJsZTwvQT4sIDxBIEhSRUY9Ii4uLy4uL2phdmEvbGFuZy9DaGFyU2VxdWVuY2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBqYXZhLmxhbmciPkNoYXJTZXF1ZW5jZTwvQT4sIDxBIEhSRUY9Ii4uLy4uL2phdmEvbGFuZy9Db21wYXJhYmxlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gamF2YS5sYW5nIj5Db21wYXJhYmxlPC9BPiZsdDs8QSBIUkVGPSIuLi8uLi9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBqYXZhLmxhbmciPlN0cmluZzwvQT4mZ3Q7PC9ERD4KKzwvREw+Cis8SFI+Cis8REw+CisgICAgPERUPjxQUkU+cHVibGljIGZpbmFsIGNsYXNzIDxCPlN0cmluZzwvQj48RFQ+ZXh0ZW5kcyA8QSBIUkVGPSIuLi8uLi9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBqYXZhLmxhbmciPk9iamVjdDwvQT48RFQ+aW1wbGVtZW50cyA8QSBIUkVGPSIuLi8uLi9qYXZhL2lvL1NlcmlhbGl6YWJsZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIGphdmEuaW8iPlNlcmlhbGl6YWJsZTwvQT4sIDxBIEhSRUY9Ii4uLy4uL2phdmEvbGFuZy9Db21wYXJhYmxlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gamF2YS5sYW5nIj5Db21wYXJhYmxlPC9BPiZsdDs8QSBIUkVGPSIuLi8uLi9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBqYXZhLmxhbmciPlN0cmluZzwvQT4mZ3Q7LCA8QSBIUkVGPSIuLi8uLi9qYXZhL2xhbmcvQ2hhclNlcXVlbmNlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gamF2YS5sYW5nIj5DaGFyU2VxdWVuY2U8L0E+PC9ETD4KKzwvUFJFPgorCis8UD4KKyAgICBUaGUgPGNvZGU+U3RyaW5nPC9jb2RlPiBjbGFzcyByZXByZXNlbnRzIGNoYXJhY3RlciBzdHJpbmdzLiBBbGwKKyAgICBzdHJpbmcgbGl0ZXJhbHMgaW4gSmF2YSBwcm9ncmFtcywgc3VjaCBhcyA8Y29kZT4iYWJjIjwvY29kZT4sIGFyZQorICAgIGltcGxlbWVudGVkIGFzIGluc3RhbmNlcyBvZiB0aGlzIGNsYXNzLgorPHA+CisgICAgU3RyaW5ncyBhcmUgY29uc3RhbnQ7IHRoZWlyIHZhbHVlcyBjYW5ub3QgYmUgY2hhbmdlZCBhZnRlciB0aGV5CisgICAgYXJlIGNyZWF0ZWQuIFN0cmluZyBidWZmZXJzIHN1cHBvcnQgbXV0YWJsZSBzdHJpbmdzLgorICAgIEJlY2F1c2UgU3RyaW5nIG9iamVjdHMgYXJlIGltbXV0YWJsZSB0aGV5IGNhbiBiZSBzaGFyZWQuIEZvciBleGFtcGxlOgorPHA+PGJsb2NrcXVvdGU+PHByZT4KKyAgICAgU3RyaW5nIHN0ciA9ICJhYmMiOworIDwvcHJlPjwvYmxvY2txdW90ZT48cD4KKyAgICBpcyBlcXVpdmFsZW50IHRvOgorPHA+PGJsb2NrcXVvdGU+PHByZT4KKyAgICAgY2hhciBkYXRhW10gPSB7J2EnLCAnYicsICdjJ307CisgICAgIFN0cmluZyBzdHIgPSBuZXcgU3RyaW5nKGRhdGEpOworIDwvcHJlPjwvYmxvY2txdW90ZT48cD4KKyAgICBIZXJlIGFyZSBzb21lIG1vcmUgZXhhbXBsZXMgb2YgaG93IHN0cmluZ3MgY2FuIGJlIHVzZWQ6Cis8cD48YmxvY2txdW90ZT48cHJlPgorICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImFiYyIpOworICAgICBTdHJpbmcgY2RlID0gImNkZSI7CisgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiYWJjIiArIGNkZSk7CisgICAgIFN0cmluZyBjID0gImFiYyIuc3Vic3RyaW5nKDIsMyk7CisgICAgIFN0cmluZyBkID0gY2RlLnN1YnN0cmluZygxLCAyKTsKKyA8L3ByZT48L2Jsb2NrcXVvdGU+Cis8cD4KKyAgICBUaGUgY2xhc3MgPGNvZGU+U3RyaW5nPC9jb2RlPiBpbmNsdWRlcyBtZXRob2RzIGZvciBleGFtaW5pbmcKKyAgICBpbmRpdmlkdWFsIGNoYXJhY3RlcnMgb2YgdGhlIHNlcXVlbmNlLCBmb3IgY29tcGFyaW5nIHN0cmluZ3MsIGZvcgorICAgIHNlYXJjaGluZyBzdHJpbmdzLCBmb3IgZXh0cmFjdGluZyBzdWJzdHJpbmdzLCBhbmQgZm9yIGNyZWF0aW5nIGEKKyAgICBjb3B5IG9mIGEgc3RyaW5nIHdpdGggYWxsIGNoYXJhY3RlcnMgdHJhbnNsYXRlZCB0byB1cHBlcmNhc2Ugb3IgdG8KKyAgICBsb3dlcmNhc2UuIENhc2UgbWFwcGluZyBpcyBiYXNlZCBvbiB0aGUgVW5pY29kZSBTdGFuZGFyZCB2ZXJzaW9uCisgICAgc3BlY2lmaWVkIGJ5IHRoZSA8QSBIUkVGPSIuLi8uLi9qYXZhL2xhbmcvQ2hhcmFjdGVyLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBqYXZhLmxhbmciPjxDT0RFPkNoYXJhY3RlcjwvQ09ERT48L0E+IGNsYXNzLgorPHA+CisgICAgVGhlIEphdmEgbGFuZ3VhZ2UgcHJvdmlkZXMgc3BlY2lhbCBzdXBwb3J0IGZvciB0aGUgc3RyaW5nCisgICAgY29uY2F0ZW5hdGlvbiBvcGVyYXRvciAoJm5ic3A7KyZuYnNwOyksIGFuZCBmb3IgY29udmVyc2lvbiBvZgorICAgIG90aGVyIG9iamVjdHMgdG8gc3RyaW5ncy4gU3RyaW5nIGNvbmNhdGVuYXRpb24gaXMgaW1wbGVtZW50ZWQKKyAgICB0aHJvdWdoIHRoZSA8Y29kZT5TdHJpbmdCdWlsZGVyPC9jb2RlPihvciA8Y29kZT5TdHJpbmdCdWZmZXI8L2NvZGU+KQorICAgIGNsYXNzIGFuZCBpdHMgPGNvZGU+YXBwZW5kPC9jb2RlPiBtZXRob2QuCisgICAgU3RyaW5nIGNvbnZlcnNpb25zIGFyZSBpbXBsZW1lbnRlZCB0aHJvdWdoIHRoZSBtZXRob2QKKyAgICA8Y29kZT50b1N0cmluZzwvY29kZT4sIGRlZmluZWQgYnkgPGNvZGU+T2JqZWN0PC9jb2RlPiBhbmQKKyAgICBpbmhlcml0ZWQgYnkgYWxsIGNsYXNzZXMgaW4gSmF2YS4gRm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gb24KKyAgICBzdHJpbmcgY29uY2F0ZW5hdGlvbiBhbmQgY29udmVyc2lvbiwgc2VlIEdvc2xpbmcsIEpveSwgYW5kIFN0ZWVsZSwKKyAgICA8aT5UaGUgSmF2YSBMYW5ndWFnZSBTcGVjaWZpY2F0aW9uPC9pPi4KKworPHA+IFVubGVzcyBvdGhlcndpc2Ugbm90ZWQsIHBhc3NpbmcgYSA8dHQ+bnVsbDwvdHQ+IGFyZ3VtZW50IHRvIGEgY29uc3RydWN0b3IKKyAgICBvciBtZXRob2QgaW4gdGhpcyBjbGFzcyB3aWxsIGNhdXNlIGEgPEEgSFJFRj0iLi4vLi4vamF2YS9sYW5nL051bGxQb2ludGVyRXhjZXB0aW9uLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBqYXZhLmxhbmciPjxDT0RFPk51bGxQb2ludGVyRXhjZXB0aW9uPC9DT0RFPjwvQT4gdG8gYmUKKyAgICB0aHJvd24uCisKKzxwPkEgPGNvZGU+U3RyaW5nPC9jb2RlPiByZXByZXNlbnRzIGEgc3RyaW5nIGluIHRoZSBVVEYtMTYgZm9ybWF0CisgICAgaW4gd2hpY2ggPGVtPnN1cHBsZW1lbnRhcnkgY2hhcmFjdGVyczwvZW0+IGFyZSByZXByZXNlbnRlZCBieSA8ZW0+c3Vycm9nYXRlCisgICAgICAgIHBhaXJzPC9lbT4gKHNlZSB0aGUgc2VjdGlvbiA8YSBocmVmPSJDaGFyYWN0ZXIuaHRtbCN1bmljb2RlIj5Vbmljb2RlCisgICAgICAgIENoYXJhY3RlciBSZXByZXNlbnRhdGlvbnM8L2E+IGluIHRoZSA8Y29kZT5DaGFyYWN0ZXI8L2NvZGU+IGNsYXNzIGZvcgorICAgIG1vcmUgaW5mb3JtYXRpb24pLgorICAgIEluZGV4IHZhbHVlcyByZWZlciB0byA8Y29kZT5jaGFyPC9jb2RlPiBjb2RlIHVuaXRzLCBzbyBhIHN1cHBsZW1lbnRhcnkKKyAgICBjaGFyYWN0ZXIgdXNlcyB0d28gcG9zaXRpb25zIGluIGEgPGNvZGU+U3RyaW5nPC9jb2RlPi4KKzxwPlRoZSA8Y29kZT5TdHJpbmc8L2NvZGU+IGNsYXNzIHByb3ZpZGVzIG1ldGhvZHMgZm9yIGRlYWxpbmcgd2l0aAorICAgIFVuaWNvZGUgY29kZSBwb2ludHMgKGkuZS4sIGNoYXJhY3RlcnMpLCBpbiBhZGRpdGlvbiB0byB0aG9zZSBmb3IKKyAgICBkZWFsaW5nIHdpdGggVW5pY29kZSBjb2RlIHVuaXRzIChpLmUuLCA8Y29kZT5jaGFyPC9jb2RlPiB2YWx1ZXMpLgorPFA+CisKKzxQPgorPERMPgorICAgIDxEVD48Qj5TaW5jZTo8L0I+PC9EVD4KKyAgICA8REQ+SkRLMS4wPC9ERD4KKyAgICA8RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjdG9TdHJpbmcoKSI+PENPREU+T2JqZWN0LnRvU3RyaW5nKCk8L0NPREU+PC9BPiwKKyAgICA8QSBIUkVGPSIuLi8uLi9qYXZhL2xhbmcvU3RyaW5nQnVmZmVyLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBqYXZhLmxhbmciPjxDT0RFPlN0cmluZ0J1ZmZlcjwvQ09ERT48L0E+LAorICAgIDxBIEhSRUY9Ii4uLy4uL2phdmEvbGFuZy9TdHJpbmdCdWlsZGVyLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBqYXZhLmxhbmciPjxDT0RFPlN0cmluZ0J1aWxkZXI8L0NPREU+PC9BPiwKKyAgICA8QSBIUkVGPSIuLi8uLi9qYXZhL25pby9jaGFyc2V0L0NoYXJzZXQuaHRtbCIgdGl0bGU9ImNsYXNzIGluIGphdmEubmlvLmNoYXJzZXQiPjxDT0RFPkNoYXJzZXQ8L0NPREU+PC9BPiwKKyAgICA8QSBIUkVGPSIuLi8uLi9zZXJpYWxpemVkLWZvcm0uaHRtbCNqYXZhLmxhbmcuU3RyaW5nIj5TZXJpYWxpemVkIEZvcm08L0E+PC9ETD4KKzxIUj4KKworPFA+CisgICAgPCEtLSA9PT09PT09PT09PSBGSUVMRCBTVU1NQVJZID09PT09PT09PT09IC0tPgorCisgICAgPEEgTkFNRT0iZmllbGRfc3VtbWFyeSI+PCEtLSAtLT48L0E+Cis8VEFCTEUgQk9SREVSPSIxIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgorICAgIDxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgorICAgICAgICA8VEggQUxJR049ImxlZnQiIENPTFNQQU49IjIiPjxGT05UIFNJWkU9IisyIj4KKyAgICAgICAgICAgIDxCPkZpZWxkIFN1bW1hcnk8L0I+PC9GT05UPjwvVEg+CisgICAgPC9UUj4KKyAgICA8VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KKyAgICAgICAgPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgorICAgICAgICAgICAgPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vamF2YS91dGlsL0NvbXBhcmF0b3IuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBqYXZhLnV0aWwiPkNvbXBhcmF0b3I8L0E+Jmx0OzxBIEhSRUY9Ii4uLy4uL2phdmEvbGFuZy9TdHJpbmcuaHRtbCIgdGl0bGU9ImNsYXNzIGluIGphdmEubGFuZyI+U3RyaW5nPC9BPiZndDs8L0NPREU+PC9GT05UPjwvVEQ+CisgICAgICAgIDxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi9qYXZhL2xhbmcvU3RyaW5nLmh0bWwjQ0FTRV9JTlNFTlNJVElWRV9PUkRFUiI+Q0FTRV9JTlNFTlNJVElWRV9PUkRFUjwvQT48L0I+PC9DT0RFPgorCisgICAgICAgICAgICA8QlI+CisgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtBIENvbXBhcmF0b3IgdGhhdCBvcmRlcnMgPGNvZGU+U3RyaW5nPC9jb2RlPiBvYmplY3RzIGFzIGJ5CisgICAgICAgICAgICA8Y29kZT5jb21wYXJlVG9JZ25vcmVDYXNlPC9jb2RlPi48L1REPgorICAgIDwvVFI+Cis8L1RBQkxFPgorJm5ic3A7Cis8IS0tID09PT09PT09IENPTlNUUlVDVE9SIFNVTU1BUlkgPT09PT09PT0gLS0+CisKKzxBIE5BTUU9ImNvbnN0cnVjdG9yX3N1bW1hcnkiPjwhLS0gLS0+PC9BPgorPFRBQkxFIEJPUkRFUj0iMSIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KKyAgICA8VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KKyAgICAgICAgPFRIIEFMSUdOPSJsZWZ0IiBDT0xTUEFOPSIyIj48Rk9OVCBTSVpFPSIrMiI+CisgICAgICAgICAgICA8Qj5Db25zdHJ1Y3RvciBTdW1tYXJ5PC9CPjwvRk9OVD48L1RIPgorICAgIDwvVFI+CisgICAgPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+CisgICAgICAgIDxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi9qYXZhL2xhbmcvU3RyaW5nLmh0bWwjU3RyaW5nKCkiPlN0cmluZzwvQT48L0I+KCk8L0NPREU+CisKKyAgICAgICAgICAgIDxCUj4KKyAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0luaXRpYWxpemVzIGEgbmV3bHkgY3JlYXRlZCA8Y29kZT5TdHJpbmc8L2NvZGU+IG9iamVjdCBzbyB0aGF0IGl0IHJlcHJlc2VudHMKKyAgICAgICAgICAgIGFuIGVtcHR5IGNoYXJhY3RlciBzZXF1ZW5jZS48L1REPgorICAgIDwvVFI+CisgICAgPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+CisgICAgICAgIDxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi9qYXZhL2xhbmcvU3RyaW5nLmh0bWwjU3RyaW5nKGJ5dGVbXSkiPlN0cmluZzwvQT48L0I+KGJ5dGVbXSZuYnNwO2J5dGVzKTwvQ09ERT4KKworICAgICAgICAgICAgPEJSPgorICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Q29uc3RydWN0cyBhIG5ldyA8Y29kZT5TdHJpbmc8L2NvZGU+IGJ5IGRlY29kaW5nIHRoZSBzcGVjaWZpZWQgYXJyYXkgb2YgYnl0ZXMKKyAgICAgICAgICAgIHVzaW5nIHRoZSBwbGF0Zm9ybSdzIGRlZmF1bHQgY2hhcnNldC48L1REPgorICAgIDwvVFI+CisgICAgPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+CisgICAgICAgIDxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi9qYXZhL2xhbmcvU3RyaW5nLmh0bWwjU3RyaW5nKGJ5dGVbXSwgamF2YS5uaW8uY2hhcnNldC5DaGFyc2V0KSI+U3RyaW5nPC9BPjwvQj4oYnl0ZVtdJm5ic3A7Ynl0ZXMsCisgICAgICAgICAgICA8QSBIUkVGPSIuLi8uLi9qYXZhL25pby9jaGFyc2V0L0NoYXJzZXQuaHRtbCIgdGl0bGU9ImNsYXNzIGluIGphdmEubmlvLmNoYXJzZXQiPkNoYXJzZXQ8L0E+Jm5ic3A7Y2hhcnNldCk8L0NPREU+CisKKyAgICAgICAgICAgIDxCUj4KKyAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0NvbnN0cnVjdHMgYSBuZXcgPGNvZGU+U3RyaW5nPC9jb2RlPiBieSBkZWNvZGluZyB0aGUgc3BlY2lmaWVkIGFycmF5IG9mCisgICAgICAgICAgICBieXRlcyB1c2luZyB0aGUgc3BlY2lmaWVkIDxBIEhSRUY9Ii4uLy4uL2phdmEvbmlvL2NoYXJzZXQvQ2hhcnNldC5odG1sIiB0aXRsZT0iY2xhc3MgaW4gamF2YS5uaW8uY2hhcnNldCI+Y2hhcnNldDwvQT4uPC9URD4KKyAgICA8L1RSPgorICAgIDxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgorICAgICAgICA8VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vamF2YS9sYW5nL1N0cmluZy5odG1sI1N0cmluZyhieXRlW10sIGludCkiPlN0cmluZzwvQT48L0I+KGJ5dGVbXSZuYnNwO2FzY2lpLAorICAgICAgICAgICAgaW50Jm5ic3A7aGlieXRlKTwvQ09ERT4KKworICAgICAgICAgICAgPEJSPgorICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7PEI+RGVwcmVjYXRlZC48L0I+Jm5ic3A7PEk+VGhpcyBtZXRob2QgZG9lcyBub3QgcHJvcGVybHkgY29udmVydCBieXRlcyBpbnRvCisgICAgICAgICAgICAgICAgY2hhcmFjdGVycy4gIEFzIG9mIEpESyZuYnNwOzEuMSwgdGhlIHByZWZlcnJlZCB3YXkgdG8gZG8gdGhpcyBpcyB2aWEgdGhlCisgICAgICAgICAgICAgICAgPGNvZGU+U3RyaW5nPC9jb2RlPiBjb25zdHJ1Y3RvcnMgdGhhdCB0YWtlIGEgPEEgSFJFRj0iLi4vLi4vamF2YS9uaW8vY2hhcnNldC9DaGFyc2V0Lmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBqYXZhLm5pby5jaGFyc2V0Ij48Q09ERT5DaGFyc2V0PC9DT0RFPjwvQT4sIGNoYXJzZXQgbmFtZSwgb3IgdGhhdCB1c2UgdGhlIHBsYXRmb3JtJ3MKKyAgICAgICAgICAgICAgICBkZWZhdWx0IGNoYXJzZXQuPC9JPjwvVEQ+CisgICAgPC9UUj4KKyAgICA8VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KKyAgICAgICAgPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uL2phdmEvbGFuZy9TdHJpbmcuaHRtbCNTdHJpbmcoYnl0ZVtdLCBpbnQsIGludCkiPlN0cmluZzwvQT48L0I+KGJ5dGVbXSZuYnNwO2J5dGVzLAorICAgICAgICAgICAgaW50Jm5ic3A7b2Zmc2V0LAorICAgICAgICAgICAgaW50Jm5ic3A7bGVuZ3RoKTwvQ09ERT4KKworICAgICAgICAgICAgPEJSPgorICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Q29uc3RydWN0cyBhIG5ldyA8Y29kZT5TdHJpbmc8L2NvZGU+IGJ5IGRlY29kaW5nIHRoZSBzcGVjaWZpZWQgc3ViYXJyYXkgb2YKKyAgICAgICAgICAgIGJ5dGVzIHVzaW5nIHRoZSBwbGF0Zm9ybSdzIGRlZmF1bHQgY2hhcnNldC48L1REPgorICAgIDwvVFI+CisgICAgPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+CisgICAgICAgIDxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi9qYXZhL2xhbmcvU3RyaW5nLmh0bWwjU3RyaW5nKGJ5dGVbXSwgaW50LCBpbnQsIGphdmEubmlvLmNoYXJzZXQuQ2hhcnNldCkiPlN0cmluZzwvQT48L0I+KGJ5dGVbXSZuYnNwO2J5dGVzLAorICAgICAgICAgICAgaW50Jm5ic3A7b2Zmc2V0LAorICAgICAgICAgICAgaW50Jm5ic3A7bGVuZ3RoLAorICAgICAgICAgICAgPEEgSFJFRj0iLi4vLi4vamF2YS9uaW8vY2hhcnNldC9DaGFyc2V0Lmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBqYXZhLm5pby5jaGFyc2V0Ij5DaGFyc2V0PC9BPiZuYnNwO2NoYXJzZXQpPC9DT0RFPgorCisgICAgICAgICAgICA8QlI+CisgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtDb25zdHJ1Y3RzIGEgbmV3IDxjb2RlPlN0cmluZzwvY29kZT4gYnkgZGVjb2RpbmcgdGhlIHNwZWNpZmllZCBzdWJhcnJheSBvZgorICAgICAgICAgICAgYnl0ZXMgdXNpbmcgdGhlIHNwZWNpZmllZCA8QSBIUkVGPSIuLi8uLi9qYXZhL25pby9jaGFyc2V0L0NoYXJzZXQuaHRtbCIgdGl0bGU9ImNsYXNzIGluIGphdmEubmlvLmNoYXJzZXQiPmNoYXJzZXQ8L0E+LjwvVEQ+CisgICAgPC9UUj4KKyAgICA8VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KKyAgICAgICAgPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uL2phdmEvbGFuZy9TdHJpbmcuaHRtbCNTdHJpbmcoYnl0ZVtdLCBpbnQsIGludCwgaW50KSI+U3RyaW5nPC9BPjwvQj4oYnl0ZVtdJm5ic3A7YXNjaWksCisgICAgICAgICAgICBpbnQmbmJzcDtoaWJ5dGUsCisgICAgICAgICAgICBpbnQmbmJzcDtvZmZzZXQsCisgICAgICAgICAgICBpbnQmbmJzcDtjb3VudCk8L0NPREU+CisKKyAgICAgICAgICAgIDxCUj4KKyAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOzxCPkRlcHJlY2F0ZWQuPC9CPiZuYnNwOzxJPlRoaXMgbWV0aG9kIGRvZXMgbm90IHByb3Blcmx5IGNvbnZlcnQgYnl0ZXMgaW50byBjaGFyYWN0ZXJzLgorICAgICAgICAgICAgICAgIEFzIG9mIEpESyZuYnNwOzEuMSwgdGhlIHByZWZlcnJlZCB3YXkgdG8gZG8gdGhpcyBpcyB2aWEgdGhlCisgICAgICAgICAgICAgICAgPGNvZGU+U3RyaW5nPC9jb2RlPiBjb25zdHJ1Y3RvcnMgdGhhdCB0YWtlIGEgPEEgSFJFRj0iLi4vLi4vamF2YS9uaW8vY2hhcnNldC9DaGFyc2V0Lmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBqYXZhLm5pby5jaGFyc2V0Ij48Q09ERT5DaGFyc2V0PC9DT0RFPjwvQT4sIGNoYXJzZXQgbmFtZSwgb3IgdGhhdCB1c2UgdGhlIHBsYXRmb3JtJ3MKKyAgICAgICAgICAgICAgICBkZWZhdWx0IGNoYXJzZXQuPC9JPjwvVEQ+CisgICAgPC9UUj4KKyAgICA8VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KKyAgICAgICAgPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uL2phdmEvbGFuZy9TdHJpbmcuaHRtbCNTdHJpbmcoYnl0ZVtdLCBpbnQsIGludCwgamF2YS5sYW5nLlN0cmluZykiPlN0cmluZzwvQT48L0I+KGJ5dGVbXSZuYnNwO2J5dGVzLAorICAgICAgICAgICAgaW50Jm5ic3A7b2Zmc2V0LAorICAgICAgICAgICAgaW50Jm5ic3A7bGVuZ3RoLAorICAgICAgICAgICAgPEEgSFJFRj0iLi4vLi4vamF2YS9sYW5nL1N0cmluZy5odG1sIiB0aXRsZT0iY2xhc3MgaW4gamF2YS5sYW5nIj5TdHJpbmc8L0E+Jm5ic3A7Y2hhcnNldE5hbWUpPC9DT0RFPgorCisgICAgICAgICAgICA8QlI+CisgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtDb25zdHJ1Y3RzIGEgbmV3IDxjb2RlPlN0cmluZzwvY29kZT4gYnkgZGVjb2RpbmcgdGhlIHNwZWNpZmllZCBzdWJhcnJheSBvZgorICAgICAgICAgICAgYnl0ZXMgdXNpbmcgdGhlIHNwZWNpZmllZCBjaGFyc2V0LjwvVEQ+CisgICAgPC9UUj4KKyAgICA8VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KKyAgICAgICAgPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uL2phdmEvbGFuZy9TdHJpbmcuaHRtbCNTdHJpbmcoYnl0ZVtdLCBqYXZhLmxhbmcuU3RyaW5nKSI+U3RyaW5nPC9BPjwvQj4oYnl0ZVtdJm5ic3A7Ynl0ZXMsCisgICAgICAgICAgICA8QSBIUkVGPSIuLi8uLi9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBqYXZhLmxhbmciPlN0cmluZzwvQT4mbmJzcDtjaGFyc2V0TmFtZSk8L0NPREU+CisKKyAgICAgICAgICAgIDxCUj4KKyAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0NvbnN0cnVjdHMgYSBuZXcgPGNvZGU+U3RyaW5nPC9jb2RlPiBieSBkZWNvZGluZyB0aGUgc3BlY2lmaWVkIGFycmF5IG9mIGJ5dGVzCisgICAgICAgICAgICB1c2luZyB0aGUgc3BlY2lmaWVkIDxBIEhSRUY9Ii4uLy4uL2phdmEvbmlvL2NoYXJzZXQvQ2hhcnNldC5odG1sIiB0aXRsZT0iY2xhc3MgaW4gamF2YS5uaW8uY2hhcnNldCI+Y2hhcnNldDwvQT4uPC9URD4KKyAgICA8L1RSPgorICAgIDxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgorICAgICAgICA8VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vamF2YS9sYW5nL1N0cmluZy5odG1sI1N0cmluZyhjaGFyW10pIj5TdHJpbmc8L0E+PC9CPihjaGFyW10mbmJzcDt2YWx1ZSk8L0NPREU+CisKKyAgICAgICAgICAgIDxCUj4KKyAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0FsbG9jYXRlcyBhIG5ldyA8Y29kZT5TdHJpbmc8L2NvZGU+IHNvIHRoYXQgaXQgcmVwcmVzZW50cyB0aGUgc2VxdWVuY2Ugb2YKKyAgICAgICAgICAgIGNoYXJhY3RlcnMgY3VycmVudGx5IGNvbnRhaW5lZCBpbiB0aGUgY2hhcmFjdGVyIGFycmF5IGFyZ3VtZW50LjwvVEQ+CisgICAgPC9UUj4KKyAgICA8VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KKyAgICAgICAgPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uL2phdmEvbGFuZy9TdHJpbmcuaHRtbCNTdHJpbmcoY2hhcltdLCBpbnQsIGludCkiPlN0cmluZzwvQT48L0I+KGNoYXJbXSZuYnNwO3ZhbHVlLAorICAgICAgICAgICAgaW50Jm5ic3A7b2Zmc2V0LAorICAgICAgICAgICAgaW50Jm5ic3A7Y291bnQpPC9DT0RFPgorCisgICAgICAgICAgICA8QlI+CisgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtBbGxvY2F0ZXMgYSBuZXcgPGNvZGU+U3RyaW5nPC9jb2RlPiB0aGF0IGNvbnRhaW5zIGNoYXJhY3RlcnMgZnJvbSBhIHN1YmFycmF5CisgICAgICAgICAgICBvZiB0aGUgY2hhcmFjdGVyIGFycmF5IGFyZ3VtZW50LjwvVEQ+CisgICAgPC9UUj4KKyAgICA8VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KKyAgICAgICAgPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uL2phdmEvbGFuZy9TdHJpbmcuaHRtbCNTdHJpbmcoaW50W10sIGludCwgaW50KSI+U3RyaW5nPC9BPjwvQj4oaW50W10mbmJzcDtjb2RlUG9pbnRzLAorICAgICAgICAgICAgaW50Jm5ic3A7b2Zmc2V0LAorICAgICAgICAgICAgaW50Jm5ic3A7Y291bnQpPC9DT0RFPgorCisgICAgICAgICAgICA8QlI+CisgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtBbGxvY2F0ZXMgYSBuZXcgPGNvZGU+U3RyaW5nPC9jb2RlPiB0aGF0IGNvbnRhaW5zIGNoYXJhY3RlcnMgZnJvbSBhIHN1YmFycmF5CisgICAgICAgICAgICBvZiB0aGUgVW5pY29kZSBjb2RlIHBvaW50IGFycmF5IGFyZ3VtZW50LjwvVEQ+CisgICAgPC9UUj4KKyAgICA8VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KKyAgICAgICAgPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uL2phdmEvbGFuZy9TdHJpbmcuaHRtbCNTdHJpbmcoamF2YS5sYW5nLlN0cmluZykiPlN0cmluZzwvQT48L0I+KDxBIEhSRUY9Ii4uLy4uL2phdmEvbGFuZy9TdHJpbmcuaHRtbCIgdGl0bGU9ImNsYXNzIGluIGphdmEubGFuZyI+U3RyaW5nPC9BPiZuYnNwO29yaWdpbmFsKTwvQ09ERT4KKworICAgICAgICAgICAgPEJSPgorICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7SW5pdGlhbGl6ZXMgYSBuZXdseSBjcmVhdGVkIDxjb2RlPlN0cmluZzwvY29kZT4gb2JqZWN0IHNvIHRoYXQgaXQgcmVwcmVzZW50cworICAgICAgICAgICAgdGhlIHNhbWUgc2VxdWVuY2Ugb2YgY2hhcmFjdGVycyBhcyB0aGUgYXJndW1lbnQ7IGluIG90aGVyIHdvcmRzLCB0aGUKKyAgICAgICAgICAgIG5ld2x5IGNyZWF0ZWQgc3RyaW5nIGlzIGEgY29weSBvZiB0aGUgYXJndW1lbnQgc3RyaW5nLjwvVEQ+CisgICAgPC9UUj4KKyAgICA8VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KKyAgICAgICAgPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uL2phdmEvbGFuZy9TdHJpbmcuaHRtbCNTdHJpbmcoamF2YS5sYW5nLlN0cmluZ0J1ZmZlcikiPlN0cmluZzwvQT48L0I+KDxBIEhSRUY9Ii4uLy4uL2phdmEvbGFuZy9TdHJpbmdCdWZmZXIuaHRtbCIgdGl0bGU9ImNsYXNzIGluIGphdmEubGFuZyI+U3RyaW5nQnVmZmVyPC9BPiZuYnNwO2J1ZmZlcik8L0NPREU+CisKKyAgICAgICAgICAgIDxCUj4KKyAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0FsbG9jYXRlcyBhIG5ldyBzdHJpbmcgdGhhdCBjb250YWlucyB0aGUgc2VxdWVuY2Ugb2YgY2hhcmFjdGVycworICAgICAgICAgICAgY3VycmVudGx5IGNvbnRhaW5lZCBpbiB0aGUgc3RyaW5nIGJ1ZmZlciBhcmd1bWVudC48L1REPgorICAgIDwvVFI+CisgICAgPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+CisgICAgICAgIDxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi9qYXZhL2xhbmcvU3RyaW5nLmh0bWwjU3RyaW5nKGphdmEubGFuZy5TdHJpbmdCdWlsZGVyKSI+U3RyaW5nPC9BPjwvQj4oPEEgSFJFRj0iLi4vLi4vamF2YS9sYW5nL1N0cmluZ0J1aWxkZXIuaHRtbCIgdGl0bGU9ImNsYXNzIGluIGphdmEubGFuZyI+U3RyaW5nQnVpbGRlcjwvQT4mbmJzcDtidWlsZGVyKTwvQ09ERT4KKworICAgICAgICAgICAgPEJSPgorICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7QWxsb2NhdGVzIGEgbmV3IHN0cmluZyB0aGF0IGNvbnRhaW5zIHRoZSBzZXF1ZW5jZSBvZiBjaGFyYWN0ZXJzCisgICAgICAgICAgICBjdXJyZW50bHkgY29udGFpbmVkIGluIHRoZSBzdHJpbmcgYnVpbGRlciBhcmd1bWVudC48L1REPgorICAgIDwvVFI+Cis8L1RBQkxFPgorJm5ic3A7Cis8IS0tID09PT09PT09PT0gTUVUSE9EIFNVTU1BUlkgPT09PT09PT09PT0gLS0+CisKKzxBIE5BTUU9Im1ldGhvZF9zdW1tYXJ5Ij48IS0tIC0tPjwvQT4KKzxUQUJMRSBCT1JERVI9IjEiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+Cis8VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KKyAgICA8VEggQUxJR049ImxlZnQiIENPTFNQQU49IjIiPjxGT05UIFNJWkU9IisyIj4KKyAgICAgICAgPEI+TWV0aG9kIFN1bW1hcnk8L0I+PC9GT05UPjwvVEg+Cis8L1RSPgorPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+CisgICAgPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgorICAgICAgICA8Q09ERT4mbmJzcDtjaGFyPC9DT0RFPjwvRk9OVD48L1REPgorICAgIDxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi9qYXZhL2xhbmcvU3RyaW5nLmh0bWwjY2hhckF0KGludCkiPmNoYXJBdDwvQT48L0I+KGludCZuYnNwO2luZGV4KTwvQ09ERT4KKworICAgICAgICA8QlI+CisgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgdGhlIDxjb2RlPmNoYXI8L2NvZGU+IHZhbHVlIGF0IHRoZQorICAgICAgICBzcGVjaWZpZWQgaW5kZXguPC9URD4KKzwvVFI+Cis8VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KKyAgICA8VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+CisgICAgICAgIDxDT0RFPiZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KKyAgICA8VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vamF2YS9sYW5nL1N0cmluZy5odG1sI2NvZGVQb2ludEF0KGludCkiPmNvZGVQb2ludEF0PC9BPjwvQj4oaW50Jm5ic3A7aW5kZXgpPC9DT0RFPgorCisgICAgICAgIDxCUj4KKyAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyB0aGUgY2hhcmFjdGVyIChVbmljb2RlIGNvZGUgcG9pbnQpIGF0IHRoZSBzcGVjaWZpZWQKKyAgICAgICAgaW5kZXguPC9URD4KKzwvVFI+Cis8VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KKyAgICA8VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+CisgICAgICAgIDxDT0RFPiZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KKyAgICA8VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vamF2YS9sYW5nL1N0cmluZy5odG1sI2NvZGVQb2ludEJlZm9yZShpbnQpIj5jb2RlUG9pbnRCZWZvcmU8L0E+PC9CPihpbnQmbmJzcDtpbmRleCk8L0NPREU+CisKKyAgICAgICAgPEJSPgorICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIHRoZSBjaGFyYWN0ZXIgKFVuaWNvZGUgY29kZSBwb2ludCkgYmVmb3JlIHRoZSBzcGVjaWZpZWQKKyAgICAgICAgaW5kZXguPC9URD4KKzwvVFI+Cis8VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KKyAgICA8VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+CisgICAgICAgIDxDT0RFPiZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KKyAgICA8VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vamF2YS9sYW5nL1N0cmluZy5odG1sI2NvZGVQb2ludENvdW50KGludCwgaW50KSI+Y29kZVBvaW50Q291bnQ8L0E+PC9CPihpbnQmbmJzcDtiZWdpbkluZGV4LAorICAgICAgICBpbnQmbmJzcDtlbmRJbmRleCk8L0NPREU+CisKKyAgICAgICAgPEJSPgorICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIHRoZSBudW1iZXIgb2YgVW5pY29kZSBjb2RlIHBvaW50cyBpbiB0aGUgc3BlY2lmaWVkIHRleHQKKyAgICAgICAgcmFuZ2Ugb2YgdGhpcyA8Y29kZT5TdHJpbmc8L2NvZGU+LjwvVEQ+Cis8L1RSPgorPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+CisgICAgPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgorICAgICAgICA8Q09ERT4mbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+CisgICAgPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uL2phdmEvbGFuZy9TdHJpbmcuaHRtbCNjb21wYXJlVG8oamF2YS5sYW5nLlN0cmluZykiPmNvbXBhcmVUbzwvQT48L0I+KDxBIEhSRUY9Ii4uLy4uL2phdmEvbGFuZy9TdHJpbmcuaHRtbCIgdGl0bGU9ImNsYXNzIGluIGphdmEubGFuZyI+U3RyaW5nPC9BPiZuYnNwO2Fub3RoZXJTdHJpbmcpPC9DT0RFPgorCisgICAgICAgIDxCUj4KKyAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Q29tcGFyZXMgdHdvIHN0cmluZ3MgbGV4aWNvZ3JhcGhpY2FsbHkuPC9URD4KKzwvVFI+Cis8VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KKyAgICA8VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+CisgICAgICAgIDxDT0RFPiZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KKyAgICA8VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vamF2YS9sYW5nL1N0cmluZy5odG1sI2NvbXBhcmVUb0lnbm9yZUNhc2UoamF2YS5sYW5nLlN0cmluZykiPmNvbXBhcmVUb0lnbm9yZUNhc2U8L0E+PC9CPig8QSBIUkVGPSIuLi8uLi9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBqYXZhLmxhbmciPlN0cmluZzwvQT4mbmJzcDtzdHIpPC9DT0RFPgorCisgICAgICAgIDxCUj4KKyAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Q29tcGFyZXMgdHdvIHN0cmluZ3MgbGV4aWNvZ3JhcGhpY2FsbHksIGlnbm9yaW5nIGNhc2UKKyAgICAgICAgZGlmZmVyZW5jZXMuPC9URD4KKzwvVFI+Cis8VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KKyAgICA8VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+CisgICAgICAgIDxDT0RFPiZuYnNwOzxBIEhSRUY9Ii4uLy4uL2phdmEvbGFuZy9TdHJpbmcuaHRtbCIgdGl0bGU9ImNsYXNzIGluIGphdmEubGFuZyI+U3RyaW5nPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KKyAgICA8VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vamF2YS9sYW5nL1N0cmluZy5odG1sI2NvbmNhdChqYXZhLmxhbmcuU3RyaW5nKSI+Y29uY2F0PC9BPjwvQj4oPEEgSFJFRj0iLi4vLi4vamF2YS9sYW5nL1N0cmluZy5odG1sIiB0aXRsZT0iY2xhc3MgaW4gamF2YS5sYW5nIj5TdHJpbmc8L0E+Jm5ic3A7c3RyKTwvQ09ERT4KKworICAgICAgICA8QlI+CisgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0NvbmNhdGVuYXRlcyB0aGUgc3BlY2lmaWVkIHN0cmluZyB0byB0aGUgZW5kIG9mIHRoaXMgc3RyaW5nLjwvVEQ+Cis8L1RSPgorPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+CisgICAgPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgorICAgICAgICA8Q09ERT4mbmJzcDtib29sZWFuPC9DT0RFPjwvRk9OVD48L1REPgorICAgIDxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi9qYXZhL2xhbmcvU3RyaW5nLmh0bWwjY29udGFpbnMoamF2YS5sYW5nLkNoYXJTZXF1ZW5jZSkiPmNvbnRhaW5zPC9BPjwvQj4oPEEgSFJFRj0iLi4vLi4vamF2YS9sYW5nL0NoYXJTZXF1ZW5jZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIGphdmEubGFuZyI+Q2hhclNlcXVlbmNlPC9BPiZuYnNwO3MpPC9DT0RFPgorCisgICAgICAgIDxCUj4KKyAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyB0cnVlIGlmIGFuZCBvbmx5IGlmIHRoaXMgc3RyaW5nIGNvbnRhaW5zIHRoZSBzcGVjaWZpZWQKKyAgICAgICAgc2VxdWVuY2Ugb2YgY2hhciB2YWx1ZXMuPC9URD4KKzwvVFI+Cis8VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KKyAgICA8VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+CisgICAgICAgIDxDT0RFPiZuYnNwO2Jvb2xlYW48L0NPREU+PC9GT05UPjwvVEQ+CisgICAgPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uL2phdmEvbGFuZy9TdHJpbmcuaHRtbCNjb250ZW50RXF1YWxzKGphdmEubGFuZy5DaGFyU2VxdWVuY2UpIj5jb250ZW50RXF1YWxzPC9BPjwvQj4oPEEgSFJFRj0iLi4vLi4vamF2YS9sYW5nL0NoYXJTZXF1ZW5jZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIGphdmEubGFuZyI+Q2hhclNlcXVlbmNlPC9BPiZuYnNwO2NzKTwvQ09ERT4KKworICAgICAgICA8QlI+CisgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0NvbXBhcmVzIHRoaXMgc3RyaW5nIHRvIHRoZSBzcGVjaWZpZWQgPGNvZGU+Q2hhclNlcXVlbmNlPC9jb2RlPi48L1REPgorPC9UUj4KKzxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgorICAgIDxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KKyAgICAgICAgPENPREU+Jm5ic3A7Ym9vbGVhbjwvQ09ERT48L0ZPTlQ+PC9URD4KKyAgICA8VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vamF2YS9sYW5nL1N0cmluZy5odG1sI2NvbnRlbnRFcXVhbHMoamF2YS5sYW5nLlN0cmluZ0J1ZmZlcikiPmNvbnRlbnRFcXVhbHM8L0E+PC9CPig8QSBIUkVGPSIuLi8uLi9qYXZhL2xhbmcvU3RyaW5nQnVmZmVyLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBqYXZhLmxhbmciPlN0cmluZ0J1ZmZlcjwvQT4mbmJzcDtzYik8L0NPREU+CisKKyAgICAgICAgPEJSPgorICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtDb21wYXJlcyB0aGlzIHN0cmluZyB0byB0aGUgc3BlY2lmaWVkIDxjb2RlPlN0cmluZ0J1ZmZlcjwvY29kZT4uPC9URD4KKzwvVFI+Cis8VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KKyAgICA8VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+CisgICAgICAgIDxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uL2phdmEvbGFuZy9TdHJpbmcuaHRtbCIgdGl0bGU9ImNsYXNzIGluIGphdmEubGFuZyI+U3RyaW5nPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KKyAgICA8VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vamF2YS9sYW5nL1N0cmluZy5odG1sI2NvcHlWYWx1ZU9mKGNoYXJbXSkiPmNvcHlWYWx1ZU9mPC9BPjwvQj4oY2hhcltdJm5ic3A7ZGF0YSk8L0NPREU+CisKKyAgICAgICAgPEJSPgorICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIGEgU3RyaW5nIHRoYXQgcmVwcmVzZW50cyB0aGUgY2hhcmFjdGVyIHNlcXVlbmNlIGluIHRoZQorICAgICAgICBhcnJheSBzcGVjaWZpZWQuPC9URD4KKzwvVFI+Cis8VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KKyAgICA8VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+CisgICAgICAgIDxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uL2phdmEvbGFuZy9TdHJpbmcuaHRtbCIgdGl0bGU9ImNsYXNzIGluIGphdmEubGFuZyI+U3RyaW5nPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KKyAgICA8VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vamF2YS9sYW5nL1N0cmluZy5odG1sI2NvcHlWYWx1ZU9mKGNoYXJbXSwgaW50LCBpbnQpIj5jb3B5VmFsdWVPZjwvQT48L0I+KGNoYXJbXSZuYnNwO2RhdGEsCisgICAgICAgIGludCZuYnNwO29mZnNldCwKKyAgICAgICAgaW50Jm5ic3A7Y291bnQpPC9DT0RFPgorCisgICAgICAgIDxCUj4KKyAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyBhIFN0cmluZyB0aGF0IHJlcHJlc2VudHMgdGhlIGNoYXJhY3RlciBzZXF1ZW5jZSBpbiB0aGUKKyAgICAgICAgYXJyYXkgc3BlY2lmaWVkLjwvVEQ+Cis8L1RSPgorPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+CisgICAgPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgorICAgICAgICA8Q09ERT4mbmJzcDtib29sZWFuPC9DT0RFPjwvRk9OVD48L1REPgorICAgIDxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi9qYXZhL2xhbmcvU3RyaW5nLmh0bWwjZW5kc1dpdGgoamF2YS5sYW5nLlN0cmluZykiPmVuZHNXaXRoPC9BPjwvQj4oPEEgSFJFRj0iLi4vLi4vamF2YS9sYW5nL1N0cmluZy5odG1sIiB0aXRsZT0iY2xhc3MgaW4gamF2YS5sYW5nIj5TdHJpbmc8L0E+Jm5ic3A7c3VmZml4KTwvQ09ERT4KKworICAgICAgICA8QlI+CisgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1Rlc3RzIGlmIHRoaXMgc3RyaW5nIGVuZHMgd2l0aCB0aGUgc3BlY2lmaWVkIHN1ZmZpeC48L1REPgorPC9UUj4KKzxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgorICAgIDxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KKyAgICAgICAgPENPREU+Jm5ic3A7Ym9vbGVhbjwvQ09ERT48L0ZPTlQ+PC9URD4KKyAgICA8VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vamF2YS9sYW5nL1N0cmluZy5odG1sI2VxdWFscyhqYXZhLmxhbmcuT2JqZWN0KSI+ZXF1YWxzPC9BPjwvQj4oPEEgSFJFRj0iLi4vLi4vamF2YS9sYW5nL09iamVjdC5odG1sIiB0aXRsZT0iY2xhc3MgaW4gamF2YS5sYW5nIj5PYmplY3Q8L0E+Jm5ic3A7YW5PYmplY3QpPC9DT0RFPgorCisgICAgICAgIDxCUj4KKyAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Q29tcGFyZXMgdGhpcyBzdHJpbmcgdG8gdGhlIHNwZWNpZmllZCBvYmplY3QuPC9URD4KKzwvVFI+Cis8VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KKyAgICA8VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+CisgICAgICAgIDxDT0RFPiZuYnNwO2Jvb2xlYW48L0NPREU+PC9GT05UPjwvVEQ+CisgICAgPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uL2phdmEvbGFuZy9TdHJpbmcuaHRtbCNlcXVhbHNJZ25vcmVDYXNlKGphdmEubGFuZy5TdHJpbmcpIj5lcXVhbHNJZ25vcmVDYXNlPC9BPjwvQj4oPEEgSFJFRj0iLi4vLi4vamF2YS9sYW5nL1N0cmluZy5odG1sIiB0aXRsZT0iY2xhc3MgaW4gamF2YS5sYW5nIj5TdHJpbmc8L0E+Jm5ic3A7YW5vdGhlclN0cmluZyk8L0NPREU+CisKKyAgICAgICAgPEJSPgorICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtDb21wYXJlcyB0aGlzIDxjb2RlPlN0cmluZzwvY29kZT4gdG8gYW5vdGhlciA8Y29kZT5TdHJpbmc8L2NvZGU+LCBpZ25vcmluZyBjYXNlCisgICAgICAgIGNvbnNpZGVyYXRpb25zLjwvVEQ+Cis8L1RSPgorPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+CisgICAgPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgorICAgICAgICA8Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBqYXZhLmxhbmciPlN0cmluZzwvQT48L0NPREU+PC9GT05UPjwvVEQ+CisgICAgPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uL2phdmEvbGFuZy9TdHJpbmcuaHRtbCNmb3JtYXQoamF2YS51dGlsLkxvY2FsZSwgamF2YS5sYW5nLlN0cmluZywgamF2YS5sYW5nLk9iamVjdC4uLikiPmZvcm1hdDwvQT48L0I+KDxBIEhSRUY9Ii4uLy4uL2phdmEvdXRpbC9Mb2NhbGUuaHRtbCIgdGl0bGU9ImNsYXNzIGluIGphdmEudXRpbCI+TG9jYWxlPC9BPiZuYnNwO2wsCisgICAgICAgIDxBIEhSRUY9Ii4uLy4uL2phdmEvbGFuZy9TdHJpbmcuaHRtbCIgdGl0bGU9ImNsYXNzIGluIGphdmEubGFuZyI+U3RyaW5nPC9BPiZuYnNwO2Zvcm1hdCwKKyAgICAgICAgPEEgSFJFRj0iLi4vLi4vamF2YS9sYW5nL09iamVjdC5odG1sIiB0aXRsZT0iY2xhc3MgaW4gamF2YS5sYW5nIj5PYmplY3Q8L0E+Li4uJm5ic3A7YXJncyk8L0NPREU+CisKKyAgICAgICAgPEJSPgorICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIGEgZm9ybWF0dGVkIHN0cmluZyB1c2luZyB0aGUgc3BlY2lmaWVkIGxvY2FsZSwgZm9ybWF0IHN0cmluZywKKyAgICAgICAgYW5kIGFyZ3VtZW50cy48L1REPgorPC9UUj4KKzxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgorICAgIDxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KKyAgICAgICAgPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vamF2YS9sYW5nL1N0cmluZy5odG1sIiB0aXRsZT0iY2xhc3MgaW4gamF2YS5sYW5nIj5TdHJpbmc8L0E+PC9DT0RFPjwvRk9OVD48L1REPgorICAgIDxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi9qYXZhL2xhbmcvU3RyaW5nLmh0bWwjZm9ybWF0KGphdmEubGFuZy5TdHJpbmcsIGphdmEubGFuZy5PYmplY3QuLi4pIj5mb3JtYXQ8L0E+PC9CPig8QSBIUkVGPSIuLi8uLi9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBqYXZhLmxhbmciPlN0cmluZzwvQT4mbmJzcDtmb3JtYXQsCisgICAgICAgIDxBIEhSRUY9Ii4uLy4uL2phdmEvbGFuZy9PYmplY3QuaHRtbCIgdGl0bGU9ImNsYXNzIGluIGphdmEubGFuZyI+T2JqZWN0PC9BPi4uLiZuYnNwO2FyZ3MpPC9DT0RFPgorCisgICAgICAgIDxCUj4KKyAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyBhIGZvcm1hdHRlZCBzdHJpbmcgdXNpbmcgdGhlIHNwZWNpZmllZCBmb3JtYXQgc3RyaW5nIGFuZAorICAgICAgICBhcmd1bWVudHMuPC9URD4KKzwvVFI+Cis8VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KKyAgICA8VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+CisgICAgICAgIDxDT0RFPiZuYnNwO2J5dGVbXTwvQ09ERT48L0ZPTlQ+PC9URD4KKyAgICA8VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vamF2YS9sYW5nL1N0cmluZy5odG1sI2dldEJ5dGVzKCkiPmdldEJ5dGVzPC9BPjwvQj4oKTwvQ09ERT4KKworICAgICAgICA8QlI+CisgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0VuY29kZXMgdGhpcyA8Y29kZT5TdHJpbmc8L2NvZGU+IGludG8gYSBzZXF1ZW5jZSBvZiBieXRlcyB1c2luZyB0aGUKKyAgICAgICAgcGxhdGZvcm0ncyBkZWZhdWx0IGNoYXJzZXQsIHN0b3JpbmcgdGhlIHJlc3VsdCBpbnRvIGEgbmV3IGJ5dGUgYXJyYXkuPC9URD4KKzwvVFI+Cis8VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KKyAgICA8VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+CisgICAgICAgIDxDT0RFPiZuYnNwO2J5dGVbXTwvQ09ERT48L0ZPTlQ+PC9URD4KKyAgICA8VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vamF2YS9sYW5nL1N0cmluZy5odG1sI2dldEJ5dGVzKGphdmEubmlvLmNoYXJzZXQuQ2hhcnNldCkiPmdldEJ5dGVzPC9BPjwvQj4oPEEgSFJFRj0iLi4vLi4vamF2YS9uaW8vY2hhcnNldC9DaGFyc2V0Lmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBqYXZhLm5pby5jaGFyc2V0Ij5DaGFyc2V0PC9BPiZuYnNwO2NoYXJzZXQpPC9DT0RFPgorCisgICAgICAgIDxCUj4KKyAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7RW5jb2RlcyB0aGlzIDxjb2RlPlN0cmluZzwvY29kZT4gaW50byBhIHNlcXVlbmNlIG9mIGJ5dGVzIHVzaW5nIHRoZSBnaXZlbgorICAgICAgICA8QSBIUkVGPSIuLi8uLi9qYXZhL25pby9jaGFyc2V0L0NoYXJzZXQuaHRtbCIgdGl0bGU9ImNsYXNzIGluIGphdmEubmlvLmNoYXJzZXQiPmNoYXJzZXQ8L0E+LCBzdG9yaW5nIHRoZSByZXN1bHQgaW50byBhCisgICAgICAgIG5ldyBieXRlIGFycmF5LjwvVEQ+Cis8L1RSPgorPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+CisgICAgPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgorICAgICAgICA8Q09ERT4mbmJzcDt2b2lkPC9DT0RFPjwvRk9OVD48L1REPgorICAgIDxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi9qYXZhL2xhbmcvU3RyaW5nLmh0bWwjZ2V0Qnl0ZXMoaW50LCBpbnQsIGJ5dGVbXSwgaW50KSI+Z2V0Qnl0ZXM8L0E+PC9CPihpbnQmbmJzcDtzcmNCZWdpbiwKKyAgICAgICAgaW50Jm5ic3A7c3JjRW5kLAorICAgICAgICBieXRlW10mbmJzcDtkc3QsCisgICAgICAgIGludCZuYnNwO2RzdEJlZ2luKTwvQ09ERT4KKworICAgICAgICA8QlI+CisgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOzxCPkRlcHJlY2F0ZWQuPC9CPiZuYnNwOzxJPlRoaXMgbWV0aG9kIGRvZXMgbm90IHByb3Blcmx5IGNvbnZlcnQgY2hhcmFjdGVycyBpbnRvCisgICAgICAgICAgICBieXRlcy4gIEFzIG9mIEpESyZuYnNwOzEuMSwgdGhlIHByZWZlcnJlZCB3YXkgdG8gZG8gdGhpcyBpcyB2aWEgdGhlCisgICAgICAgICAgICA8QSBIUkVGPSIuLi8uLi9qYXZhL2xhbmcvU3RyaW5nLmh0bWwjZ2V0Qnl0ZXMoKSI+PENPREU+Z2V0Qnl0ZXMoKTwvQ09ERT48L0E+IG1ldGhvZCwgd2hpY2ggdXNlcyB0aGUgcGxhdGZvcm0ncyBkZWZhdWx0IGNoYXJzZXQuPC9JPjwvVEQ+Cis8L1RSPgorPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+CisgICAgPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgorICAgICAgICA8Q09ERT4mbmJzcDtieXRlW108L0NPREU+PC9GT05UPjwvVEQ+CisgICAgPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uL2phdmEvbGFuZy9TdHJpbmcuaHRtbCNnZXRCeXRlcyhqYXZhLmxhbmcuU3RyaW5nKSI+Z2V0Qnl0ZXM8L0E+PC9CPig8QSBIUkVGPSIuLi8uLi9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBqYXZhLmxhbmciPlN0cmluZzwvQT4mbmJzcDtjaGFyc2V0TmFtZSk8L0NPREU+CisKKyAgICAgICAgPEJSPgorICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtFbmNvZGVzIHRoaXMgPGNvZGU+U3RyaW5nPC9jb2RlPiBpbnRvIGEgc2VxdWVuY2Ugb2YgYnl0ZXMgdXNpbmcgdGhlIG5hbWVkCisgICAgICAgIGNoYXJzZXQsIHN0b3JpbmcgdGhlIHJlc3VsdCBpbnRvIGEgbmV3IGJ5dGUgYXJyYXkuPC9URD4KKzwvVFI+Cis8VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KKyAgICA8VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+CisgICAgICAgIDxDT0RFPiZuYnNwO3ZvaWQ8L0NPREU+PC9GT05UPjwvVEQ+CisgICAgPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uL2phdmEvbGFuZy9TdHJpbmcuaHRtbCNnZXRDaGFycyhpbnQsIGludCwgY2hhcltdLCBpbnQpIj5nZXRDaGFyczwvQT48L0I+KGludCZuYnNwO3NyY0JlZ2luLAorICAgICAgICBpbnQmbmJzcDtzcmNFbmQsCisgICAgICAgIGNoYXJbXSZuYnNwO2RzdCwKKyAgICAgICAgaW50Jm5ic3A7ZHN0QmVnaW4pPC9DT0RFPgorCisgICAgICAgIDxCUj4KKyAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Q29waWVzIGNoYXJhY3RlcnMgZnJvbSB0aGlzIHN0cmluZyBpbnRvIHRoZSBkZXN0aW5hdGlvbiBjaGFyYWN0ZXIKKyAgICAgICAgYXJyYXkuPC9URD4KKzwvVFI+Cis8VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KKyAgICA8VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+CisgICAgICAgIDxDT0RFPiZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KKyAgICA8VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vamF2YS9sYW5nL1N0cmluZy5odG1sI2hhc2hDb2RlKCkiPmhhc2hDb2RlPC9BPjwvQj4oKTwvQ09ERT4KKworICAgICAgICA8QlI+CisgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgYSBoYXNoIGNvZGUgZm9yIHRoaXMgc3RyaW5nLjwvVEQ+Cis8L1RSPgorPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+CisgICAgPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgorICAgICAgICA8Q09ERT4mbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+CisgICAgPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uL2phdmEvbGFuZy9TdHJpbmcuaHRtbCNpbmRleE9mKGludCkiPmluZGV4T2Y8L0E+PC9CPihpbnQmbmJzcDtjaCk8L0NPREU+CisKKyAgICAgICAgPEJSPgorICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIHRoZSBpbmRleCB3aXRoaW4gdGhpcyBzdHJpbmcgb2YgdGhlIGZpcnN0IG9jY3VycmVuY2Ugb2YKKyAgICAgICAgdGhlIHNwZWNpZmllZCBjaGFyYWN0ZXIuPC9URD4KKzwvVFI+Cis8VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KKyAgICA8VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+CisgICAgICAgIDxDT0RFPiZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KKyAgICA8VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vamF2YS9sYW5nL1N0cmluZy5odG1sI2luZGV4T2YoaW50LCBpbnQpIj5pbmRleE9mPC9BPjwvQj4oaW50Jm5ic3A7Y2gsCisgICAgICAgIGludCZuYnNwO2Zyb21JbmRleCk8L0NPREU+CisKKyAgICAgICAgPEJSPgorICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIHRoZSBpbmRleCB3aXRoaW4gdGhpcyBzdHJpbmcgb2YgdGhlIGZpcnN0IG9jY3VycmVuY2Ugb2YgdGhlCisgICAgICAgIHNwZWNpZmllZCBjaGFyYWN0ZXIsIHN0YXJ0aW5nIHRoZSBzZWFyY2ggYXQgdGhlIHNwZWNpZmllZCBpbmRleC48L1REPgorPC9UUj4KKzxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgorICAgIDxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KKyAgICAgICAgPENPREU+Jm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgorICAgIDxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi9qYXZhL2xhbmcvU3RyaW5nLmh0bWwjaW5kZXhPZihqYXZhLmxhbmcuU3RyaW5nKSI+aW5kZXhPZjwvQT48L0I+KDxBIEhSRUY9Ii4uLy4uL2phdmEvbGFuZy9TdHJpbmcuaHRtbCIgdGl0bGU9ImNsYXNzIGluIGphdmEubGFuZyI+U3RyaW5nPC9BPiZuYnNwO3N0cik8L0NPREU+CisKKyAgICAgICAgPEJSPgorICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIHRoZSBpbmRleCB3aXRoaW4gdGhpcyBzdHJpbmcgb2YgdGhlIGZpcnN0IG9jY3VycmVuY2Ugb2YgdGhlCisgICAgICAgIHNwZWNpZmllZCBzdWJzdHJpbmcuPC9URD4KKzwvVFI+Cis8VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KKyAgICA8VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+CisgICAgICAgIDxDT0RFPiZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KKyAgICA8VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vamF2YS9sYW5nL1N0cmluZy5odG1sI2luZGV4T2YoamF2YS5sYW5nLlN0cmluZywgaW50KSI+aW5kZXhPZjwvQT48L0I+KDxBIEhSRUY9Ii4uLy4uL2phdmEvbGFuZy9TdHJpbmcuaHRtbCIgdGl0bGU9ImNsYXNzIGluIGphdmEubGFuZyI+U3RyaW5nPC9BPiZuYnNwO3N0ciwKKyAgICAgICAgaW50Jm5ic3A7ZnJvbUluZGV4KTwvQ09ERT4KKworICAgICAgICA8QlI+CisgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgdGhlIGluZGV4IHdpdGhpbiB0aGlzIHN0cmluZyBvZiB0aGUgZmlyc3Qgb2NjdXJyZW5jZSBvZiB0aGUKKyAgICAgICAgc3BlY2lmaWVkIHN1YnN0cmluZywgc3RhcnRpbmcgYXQgdGhlIHNwZWNpZmllZCBpbmRleC48L1REPgorPC9UUj4KKzxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgorICAgIDxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KKyAgICAgICAgPENPREU+Jm5ic3A7PEEgSFJFRj0iLi4vLi4vamF2YS9sYW5nL1N0cmluZy5odG1sIiB0aXRsZT0iY2xhc3MgaW4gamF2YS5sYW5nIj5TdHJpbmc8L0E+PC9DT0RFPjwvRk9OVD48L1REPgorICAgIDxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi9qYXZhL2xhbmcvU3RyaW5nLmh0bWwjaW50ZXJuKCkiPmludGVybjwvQT48L0I+KCk8L0NPREU+CisKKyAgICAgICAgPEJSPgorICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIGEgY2Fub25pY2FsIHJlcHJlc2VudGF0aW9uIGZvciB0aGUgc3RyaW5nIG9iamVjdC48L1REPgorPC9UUj4KKzxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgorICAgIDxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KKyAgICAgICAgPENPREU+Jm5ic3A7Ym9vbGVhbjwvQ09ERT48L0ZPTlQ+PC9URD4KKyAgICA8VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vamF2YS9sYW5nL1N0cmluZy5odG1sI2lzRW1wdHkoKSI+aXNFbXB0eTwvQT48L0I+KCk8L0NPREU+CisKKyAgICAgICAgPEJSPgorICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIDx0dD50cnVlPC90dD4gaWYsIGFuZCBvbmx5IGlmLCA8QSBIUkVGPSIuLi8uLi9qYXZhL2xhbmcvU3RyaW5nLmh0bWwjbGVuZ3RoKCkiPjxDT0RFPmxlbmd0aCgpPC9DT0RFPjwvQT4gaXMgPHR0PjA8L3R0Pi48L1REPgorPC9UUj4KKzxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgorICAgIDxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KKyAgICAgICAgPENPREU+Jm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgorICAgIDxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi9qYXZhL2xhbmcvU3RyaW5nLmh0bWwjbGFzdEluZGV4T2YoaW50KSI+bGFzdEluZGV4T2Y8L0E+PC9CPihpbnQmbmJzcDtjaCk8L0NPREU+CisKKyAgICAgICAgPEJSPgorICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIHRoZSBpbmRleCB3aXRoaW4gdGhpcyBzdHJpbmcgb2YgdGhlIGxhc3Qgb2NjdXJyZW5jZSBvZgorICAgICAgICB0aGUgc3BlY2lmaWVkIGNoYXJhY3Rlci48L1REPgorPC9UUj4KKzxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgorICAgIDxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KKyAgICAgICAgPENPREU+Jm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgorICAgIDxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi9qYXZhL2xhbmcvU3RyaW5nLmh0bWwjbGFzdEluZGV4T2YoaW50LCBpbnQpIj5sYXN0SW5kZXhPZjwvQT48L0I+KGludCZuYnNwO2NoLAorICAgICAgICBpbnQmbmJzcDtmcm9tSW5kZXgpPC9DT0RFPgorCisgICAgICAgIDxCUj4KKyAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyB0aGUgaW5kZXggd2l0aGluIHRoaXMgc3RyaW5nIG9mIHRoZSBsYXN0IG9jY3VycmVuY2Ugb2YKKyAgICAgICAgdGhlIHNwZWNpZmllZCBjaGFyYWN0ZXIsIHNlYXJjaGluZyBiYWNrd2FyZCBzdGFydGluZyBhdCB0aGUKKyAgICAgICAgc3BlY2lmaWVkIGluZGV4LjwvVEQ+Cis8L1RSPgorPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+CisgICAgPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgorICAgICAgICA8Q09ERT4mbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+CisgICAgPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uL2phdmEvbGFuZy9TdHJpbmcuaHRtbCNsYXN0SW5kZXhPZihqYXZhLmxhbmcuU3RyaW5nKSI+bGFzdEluZGV4T2Y8L0E+PC9CPig8QSBIUkVGPSIuLi8uLi9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBqYXZhLmxhbmciPlN0cmluZzwvQT4mbmJzcDtzdHIpPC9DT0RFPgorCisgICAgICAgIDxCUj4KKyAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyB0aGUgaW5kZXggd2l0aGluIHRoaXMgc3RyaW5nIG9mIHRoZSByaWdodG1vc3Qgb2NjdXJyZW5jZQorICAgICAgICBvZiB0aGUgc3BlY2lmaWVkIHN1YnN0cmluZy48L1REPgorPC9UUj4KKzxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgorICAgIDxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KKyAgICAgICAgPENPREU+Jm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgorICAgIDxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi9qYXZhL2xhbmcvU3RyaW5nLmh0bWwjbGFzdEluZGV4T2YoamF2YS5sYW5nLlN0cmluZywgaW50KSI+bGFzdEluZGV4T2Y8L0E+PC9CPig8QSBIUkVGPSIuLi8uLi9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBqYXZhLmxhbmciPlN0cmluZzwvQT4mbmJzcDtzdHIsCisgICAgICAgIGludCZuYnNwO2Zyb21JbmRleCk8L0NPREU+CisKKyAgICAgICAgPEJSPgorICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIHRoZSBpbmRleCB3aXRoaW4gdGhpcyBzdHJpbmcgb2YgdGhlIGxhc3Qgb2NjdXJyZW5jZSBvZiB0aGUKKyAgICAgICAgc3BlY2lmaWVkIHN1YnN0cmluZywgc2VhcmNoaW5nIGJhY2t3YXJkIHN0YXJ0aW5nIGF0IHRoZSBzcGVjaWZpZWQgaW5kZXguPC9URD4KKzwvVFI+Cis8VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KKyAgICA8VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+CisgICAgICAgIDxDT0RFPiZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KKyAgICA8VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vamF2YS9sYW5nL1N0cmluZy5odG1sI2xlbmd0aCgpIj5sZW5ndGg8L0E+PC9CPigpPC9DT0RFPgorCisgICAgICAgIDxCUj4KKyAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyB0aGUgbGVuZ3RoIG9mIHRoaXMgc3RyaW5nLjwvVEQ+Cis8L1RSPgorPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+CisgICAgPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgorICAgICAgICA8Q09ERT4mbmJzcDtib29sZWFuPC9DT0RFPjwvRk9OVD48L1REPgorICAgIDxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi9qYXZhL2xhbmcvU3RyaW5nLmh0bWwjbWF0Y2hlcyhqYXZhLmxhbmcuU3RyaW5nKSI+bWF0Y2hlczwvQT48L0I+KDxBIEhSRUY9Ii4uLy4uL2phdmEvbGFuZy9TdHJpbmcuaHRtbCIgdGl0bGU9ImNsYXNzIGluIGphdmEubGFuZyI+U3RyaW5nPC9BPiZuYnNwO3JlZ2V4KTwvQ09ERT4KKworICAgICAgICA8QlI+CisgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RlbGxzIHdoZXRoZXIgb3Igbm90IHRoaXMgc3RyaW5nIG1hdGNoZXMgdGhlIGdpdmVuIDxhCisgICAgICAgICAgICAgICAgaHJlZj0iLi4vdXRpbC9yZWdleC9QYXR0ZXJuLmh0bWwjc3VtIj5yZWd1bGFyIGV4cHJlc3Npb248L2E+LjwvVEQ+Cis8L1RSPgorPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+CisgICAgPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgorICAgICAgICA8Q09ERT4mbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+CisgICAgPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uL2phdmEvbGFuZy9TdHJpbmcuaHRtbCNvZmZzZXRCeUNvZGVQb2ludHMoaW50LCBpbnQpIj5vZmZzZXRCeUNvZGVQb2ludHM8L0E+PC9CPihpbnQmbmJzcDtpbmRleCwKKyAgICAgICAgaW50Jm5ic3A7Y29kZVBvaW50T2Zmc2V0KTwvQ09ERT4KKworICAgICAgICA8QlI+CisgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgdGhlIGluZGV4IHdpdGhpbiB0aGlzIDxjb2RlPlN0cmluZzwvY29kZT4gdGhhdCBpcworICAgICAgICBvZmZzZXQgZnJvbSB0aGUgZ2l2ZW4gPGNvZGU+aW5kZXg8L2NvZGU+IGJ5CisgICAgICAgIDxjb2RlPmNvZGVQb2ludE9mZnNldDwvY29kZT4gY29kZSBwb2ludHMuPC9URD4KKzwvVFI+Cis8VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KKyAgICA8VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+CisgICAgICAgIDxDT0RFPiZuYnNwO2Jvb2xlYW48L0NPREU+PC9GT05UPjwvVEQ+CisgICAgPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uL2phdmEvbGFuZy9TdHJpbmcuaHRtbCNyZWdpb25NYXRjaGVzKGJvb2xlYW4sIGludCwgamF2YS5sYW5nLlN0cmluZywgaW50LCBpbnQpIj5yZWdpb25NYXRjaGVzPC9BPjwvQj4oYm9vbGVhbiZuYnNwO2lnbm9yZUNhc2UsCisgICAgICAgIGludCZuYnNwO3RvZmZzZXQsCisgICAgICAgIDxBIEhSRUY9Ii4uLy4uL2phdmEvbGFuZy9TdHJpbmcuaHRtbCIgdGl0bGU9ImNsYXNzIGluIGphdmEubGFuZyI+U3RyaW5nPC9BPiZuYnNwO290aGVyLAorICAgICAgICBpbnQmbmJzcDtvb2Zmc2V0LAorICAgICAgICBpbnQmbmJzcDtsZW4pPC9DT0RFPgorCisgICAgICAgIDxCUj4KKyAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGVzdHMgaWYgdHdvIHN0cmluZyByZWdpb25zIGFyZSBlcXVhbC48L1REPgorPC9UUj4KKzxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgorICAgIDxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KKyAgICAgICAgPENPREU+Jm5ic3A7Ym9vbGVhbjwvQ09ERT48L0ZPTlQ+PC9URD4KKyAgICA8VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vamF2YS9sYW5nL1N0cmluZy5odG1sI3JlZ2lvbk1hdGNoZXMoaW50LCBqYXZhLmxhbmcuU3RyaW5nLCBpbnQsIGludCkiPnJlZ2lvbk1hdGNoZXM8L0E+PC9CPihpbnQmbmJzcDt0b2Zmc2V0LAorICAgICAgICA8QSBIUkVGPSIuLi8uLi9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBqYXZhLmxhbmciPlN0cmluZzwvQT4mbmJzcDtvdGhlciwKKyAgICAgICAgaW50Jm5ic3A7b29mZnNldCwKKyAgICAgICAgaW50Jm5ic3A7bGVuKTwvQ09ERT4KKworICAgICAgICA8QlI+CisgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1Rlc3RzIGlmIHR3byBzdHJpbmcgcmVnaW9ucyBhcmUgZXF1YWwuPC9URD4KKzwvVFI+Cis8VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KKyAgICA8VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+CisgICAgICAgIDxDT0RFPiZuYnNwOzxBIEhSRUY9Ii4uLy4uL2phdmEvbGFuZy9TdHJpbmcuaHRtbCIgdGl0bGU9ImNsYXNzIGluIGphdmEubGFuZyI+U3RyaW5nPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KKyAgICA8VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vamF2YS9sYW5nL1N0cmluZy5odG1sI3JlcGxhY2UoY2hhciwgY2hhcikiPnJlcGxhY2U8L0E+PC9CPihjaGFyJm5ic3A7b2xkQ2hhciwKKyAgICAgICAgY2hhciZuYnNwO25ld0NoYXIpPC9DT0RFPgorCisgICAgICAgIDxCUj4KKyAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyBhIG5ldyBzdHJpbmcgcmVzdWx0aW5nIGZyb20gcmVwbGFjaW5nIGFsbCBvY2N1cnJlbmNlcyBvZgorICAgICAgICA8Y29kZT5vbGRDaGFyPC9jb2RlPiBpbiB0aGlzIHN0cmluZyB3aXRoIDxjb2RlPm5ld0NoYXI8L2NvZGU+LjwvVEQ+Cis8L1RSPgorPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+CisgICAgPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgorICAgICAgICA8Q09ERT4mbmJzcDs8QSBIUkVGPSIuLi8uLi9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBqYXZhLmxhbmciPlN0cmluZzwvQT48L0NPREU+PC9GT05UPjwvVEQ+CisgICAgPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uL2phdmEvbGFuZy9TdHJpbmcuaHRtbCNyZXBsYWNlKGphdmEubGFuZy5DaGFyU2VxdWVuY2UsIGphdmEubGFuZy5DaGFyU2VxdWVuY2UpIj5yZXBsYWNlPC9BPjwvQj4oPEEgSFJFRj0iLi4vLi4vamF2YS9sYW5nL0NoYXJTZXF1ZW5jZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIGphdmEubGFuZyI+Q2hhclNlcXVlbmNlPC9BPiZuYnNwO3RhcmdldCwKKyAgICAgICAgPEEgSFJFRj0iLi4vLi4vamF2YS9sYW5nL0NoYXJTZXF1ZW5jZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIGphdmEubGFuZyI+Q2hhclNlcXVlbmNlPC9BPiZuYnNwO3JlcGxhY2VtZW50KTwvQ09ERT4KKworICAgICAgICA8QlI+CisgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JlcGxhY2VzIGVhY2ggc3Vic3RyaW5nIG9mIHRoaXMgc3RyaW5nIHRoYXQgbWF0Y2hlcyB0aGUgbGl0ZXJhbCB0YXJnZXQKKyAgICAgICAgc2VxdWVuY2Ugd2l0aCB0aGUgc3BlY2lmaWVkIGxpdGVyYWwgcmVwbGFjZW1lbnQgc2VxdWVuY2UuPC9URD4KKzwvVFI+Cis8VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KKyAgICA8VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+CisgICAgICAgIDxDT0RFPiZuYnNwOzxBIEhSRUY9Ii4uLy4uL2phdmEvbGFuZy9TdHJpbmcuaHRtbCIgdGl0bGU9ImNsYXNzIGluIGphdmEubGFuZyI+U3RyaW5nPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KKyAgICA8VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vamF2YS9sYW5nL1N0cmluZy5odG1sI3JlcGxhY2VBbGwoamF2YS5sYW5nLlN0cmluZywgamF2YS5sYW5nLlN0cmluZykiPnJlcGxhY2VBbGw8L0E+PC9CPig8QSBIUkVGPSIuLi8uLi9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBqYXZhLmxhbmciPlN0cmluZzwvQT4mbmJzcDtyZWdleCwKKyAgICAgICAgPEEgSFJFRj0iLi4vLi4vamF2YS9sYW5nL1N0cmluZy5odG1sIiB0aXRsZT0iY2xhc3MgaW4gamF2YS5sYW5nIj5TdHJpbmc8L0E+Jm5ic3A7cmVwbGFjZW1lbnQpPC9DT0RFPgorCisgICAgICAgIDxCUj4KKyAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmVwbGFjZXMgZWFjaCBzdWJzdHJpbmcgb2YgdGhpcyBzdHJpbmcgdGhhdCBtYXRjaGVzIHRoZSBnaXZlbiA8YQorICAgICAgICAgICAgICAgIGhyZWY9Ii4uL3V0aWwvcmVnZXgvUGF0dGVybi5odG1sI3N1bSI+cmVndWxhciBleHByZXNzaW9uPC9hPiB3aXRoIHRoZQorICAgICAgICBnaXZlbiByZXBsYWNlbWVudC48L1REPgorPC9UUj4KKzxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgorICAgIDxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KKyAgICAgICAgPENPREU+Jm5ic3A7PEEgSFJFRj0iLi4vLi4vamF2YS9sYW5nL1N0cmluZy5odG1sIiB0aXRsZT0iY2xhc3MgaW4gamF2YS5sYW5nIj5TdHJpbmc8L0E+PC9DT0RFPjwvRk9OVD48L1REPgorICAgIDxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi9qYXZhL2xhbmcvU3RyaW5nLmh0bWwjcmVwbGFjZUZpcnN0KGphdmEubGFuZy5TdHJpbmcsIGphdmEubGFuZy5TdHJpbmcpIj5yZXBsYWNlRmlyc3Q8L0E+PC9CPig8QSBIUkVGPSIuLi8uLi9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBqYXZhLmxhbmciPlN0cmluZzwvQT4mbmJzcDtyZWdleCwKKyAgICAgICAgPEEgSFJFRj0iLi4vLi4vamF2YS9sYW5nL1N0cmluZy5odG1sIiB0aXRsZT0iY2xhc3MgaW4gamF2YS5sYW5nIj5TdHJpbmc8L0E+Jm5ic3A7cmVwbGFjZW1lbnQpPC9DT0RFPgorCisgICAgICAgIDxCUj4KKyAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmVwbGFjZXMgdGhlIGZpcnN0IHN1YnN0cmluZyBvZiB0aGlzIHN0cmluZyB0aGF0IG1hdGNoZXMgdGhlIGdpdmVuIDxhCisgICAgICAgICAgICAgICAgaHJlZj0iLi4vdXRpbC9yZWdleC9QYXR0ZXJuLmh0bWwjc3VtIj5yZWd1bGFyIGV4cHJlc3Npb248L2E+IHdpdGggdGhlCisgICAgICAgIGdpdmVuIHJlcGxhY2VtZW50LjwvVEQ+Cis8L1RSPgorPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+CisgICAgPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgorICAgICAgICA8Q09ERT4mbmJzcDs8QSBIUkVGPSIuLi8uLi9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBqYXZhLmxhbmciPlN0cmluZzwvQT5bXTwvQ09ERT48L0ZPTlQ+PC9URD4KKyAgICA8VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vamF2YS9sYW5nL1N0cmluZy5odG1sI3NwbGl0KGphdmEubGFuZy5TdHJpbmcpIj5zcGxpdDwvQT48L0I+KDxBIEhSRUY9Ii4uLy4uL2phdmEvbGFuZy9TdHJpbmcuaHRtbCIgdGl0bGU9ImNsYXNzIGluIGphdmEubGFuZyI+U3RyaW5nPC9BPiZuYnNwO3JlZ2V4KTwvQ09ERT4KKworICAgICAgICA8QlI+CisgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1NwbGl0cyB0aGlzIHN0cmluZyBhcm91bmQgbWF0Y2hlcyBvZiB0aGUgZ2l2ZW4gPGEKKyAgICAgICAgICAgICAgICBocmVmPSIuLi91dGlsL3JlZ2V4L1BhdHRlcm4uaHRtbCNzdW0iPnJlZ3VsYXIgZXhwcmVzc2lvbjwvYT4uPC9URD4KKzwvVFI+Cis8VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KKyAgICA8VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+CisgICAgICAgIDxDT0RFPiZuYnNwOzxBIEhSRUY9Ii4uLy4uL2phdmEvbGFuZy9TdHJpbmcuaHRtbCIgdGl0bGU9ImNsYXNzIGluIGphdmEubGFuZyI+U3RyaW5nPC9BPltdPC9DT0RFPjwvRk9OVD48L1REPgorICAgIDxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi9qYXZhL2xhbmcvU3RyaW5nLmh0bWwjc3BsaXQoamF2YS5sYW5nLlN0cmluZywgaW50KSI+c3BsaXQ8L0E+PC9CPig8QSBIUkVGPSIuLi8uLi9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBqYXZhLmxhbmciPlN0cmluZzwvQT4mbmJzcDtyZWdleCwKKyAgICAgICAgaW50Jm5ic3A7bGltaXQpPC9DT0RFPgorCisgICAgICAgIDxCUj4KKyAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7U3BsaXRzIHRoaXMgc3RyaW5nIGFyb3VuZCBtYXRjaGVzIG9mIHRoZSBnaXZlbgorICAgICAgICA8YSBocmVmPSIuLi91dGlsL3JlZ2V4L1BhdHRlcm4uaHRtbCNzdW0iPnJlZ3VsYXIgZXhwcmVzc2lvbjwvYT4uPC9URD4KKzwvVFI+Cis8VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KKyAgICA8VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+CisgICAgICAgIDxDT0RFPiZuYnNwO2Jvb2xlYW48L0NPREU+PC9GT05UPjwvVEQ+CisgICAgPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uL2phdmEvbGFuZy9TdHJpbmcuaHRtbCNzdGFydHNXaXRoKGphdmEubGFuZy5TdHJpbmcpIj5zdGFydHNXaXRoPC9BPjwvQj4oPEEgSFJFRj0iLi4vLi4vamF2YS9sYW5nL1N0cmluZy5odG1sIiB0aXRsZT0iY2xhc3MgaW4gamF2YS5sYW5nIj5TdHJpbmc8L0E+Jm5ic3A7cHJlZml4KTwvQ09ERT4KKworICAgICAgICA8QlI+CisgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1Rlc3RzIGlmIHRoaXMgc3RyaW5nIHN0YXJ0cyB3aXRoIHRoZSBzcGVjaWZpZWQgcHJlZml4LjwvVEQ+Cis8L1RSPgorPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+CisgICAgPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgorICAgICAgICA8Q09ERT4mbmJzcDtib29sZWFuPC9DT0RFPjwvRk9OVD48L1REPgorICAgIDxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi9qYXZhL2xhbmcvU3RyaW5nLmh0bWwjc3RhcnRzV2l0aChqYXZhLmxhbmcuU3RyaW5nLCBpbnQpIj5zdGFydHNXaXRoPC9BPjwvQj4oPEEgSFJFRj0iLi4vLi4vamF2YS9sYW5nL1N0cmluZy5odG1sIiB0aXRsZT0iY2xhc3MgaW4gamF2YS5sYW5nIj5TdHJpbmc8L0E+Jm5ic3A7cHJlZml4LAorICAgICAgICBpbnQmbmJzcDt0b2Zmc2V0KTwvQ09ERT4KKworICAgICAgICA8QlI+CisgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1Rlc3RzIGlmIHRoZSBzdWJzdHJpbmcgb2YgdGhpcyBzdHJpbmcgYmVnaW5uaW5nIGF0IHRoZQorICAgICAgICBzcGVjaWZpZWQgaW5kZXggc3RhcnRzIHdpdGggdGhlIHNwZWNpZmllZCBwcmVmaXguPC9URD4KKzwvVFI+Cis8VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KKyAgICA8VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+CisgICAgICAgIDxDT0RFPiZuYnNwOzxBIEhSRUY9Ii4uLy4uL2phdmEvbGFuZy9DaGFyU2VxdWVuY2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBqYXZhLmxhbmciPkNoYXJTZXF1ZW5jZTwvQT48L0NPREU+PC9GT05UPjwvVEQ+CisgICAgPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uL2phdmEvbGFuZy9TdHJpbmcuaHRtbCNzdWJTZXF1ZW5jZShpbnQsIGludCkiPnN1YlNlcXVlbmNlPC9BPjwvQj4oaW50Jm5ic3A7YmVnaW5JbmRleCwKKyAgICAgICAgaW50Jm5ic3A7ZW5kSW5kZXgpPC9DT0RFPgorCisgICAgICAgIDxCUj4KKyAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyBhIG5ldyBjaGFyYWN0ZXIgc2VxdWVuY2UgdGhhdCBpcyBhIHN1YnNlcXVlbmNlIG9mIHRoaXMgc2VxdWVuY2UuPC9URD4KKzwvVFI+Cis8VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KKyAgICA8VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+CisgICAgICAgIDxDT0RFPiZuYnNwOzxBIEhSRUY9Ii4uLy4uL2phdmEvbGFuZy9TdHJpbmcuaHRtbCIgdGl0bGU9ImNsYXNzIGluIGphdmEubGFuZyI+U3RyaW5nPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KKyAgICA8VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vamF2YS9sYW5nL1N0cmluZy5odG1sI3N1YnN0cmluZyhpbnQpIj5zdWJzdHJpbmc8L0E+PC9CPihpbnQmbmJzcDtiZWdpbkluZGV4KTwvQ09ERT4KKworICAgICAgICA8QlI+CisgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgYSBuZXcgc3RyaW5nIHRoYXQgaXMgYSBzdWJzdHJpbmcgb2YgdGhpcyBzdHJpbmcuPC9URD4KKzwvVFI+Cis8VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KKyAgICA8VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+CisgICAgICAgIDxDT0RFPiZuYnNwOzxBIEhSRUY9Ii4uLy4uL2phdmEvbGFuZy9TdHJpbmcuaHRtbCIgdGl0bGU9ImNsYXNzIGluIGphdmEubGFuZyI+U3RyaW5nPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KKyAgICA8VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vamF2YS9sYW5nL1N0cmluZy5odG1sI3N1YnN0cmluZyhpbnQsIGludCkiPnN1YnN0cmluZzwvQT48L0I+KGludCZuYnNwO2JlZ2luSW5kZXgsCisgICAgICAgIGludCZuYnNwO2VuZEluZGV4KTwvQ09ERT4KKworICAgICAgICA8QlI+CisgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgYSBuZXcgc3RyaW5nIHRoYXQgaXMgYSBzdWJzdHJpbmcgb2YgdGhpcyBzdHJpbmcuPC9URD4KKzwvVFI+Cis8VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KKyAgICA8VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+CisgICAgICAgIDxDT0RFPiZuYnNwO2NoYXJbXTwvQ09ERT48L0ZPTlQ+PC9URD4KKyAgICA8VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vamF2YS9sYW5nL1N0cmluZy5odG1sI3RvQ2hhckFycmF5KCkiPnRvQ2hhckFycmF5PC9BPjwvQj4oKTwvQ09ERT4KKworICAgICAgICA8QlI+CisgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0NvbnZlcnRzIHRoaXMgc3RyaW5nIHRvIGEgbmV3IGNoYXJhY3RlciBhcnJheS48L1REPgorPC9UUj4KKzxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgorICAgIDxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KKyAgICAgICAgPENPREU+Jm5ic3A7PEEgSFJFRj0iLi4vLi4vamF2YS9sYW5nL1N0cmluZy5odG1sIiB0aXRsZT0iY2xhc3MgaW4gamF2YS5sYW5nIj5TdHJpbmc8L0E+PC9DT0RFPjwvRk9OVD48L1REPgorICAgIDxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi9qYXZhL2xhbmcvU3RyaW5nLmh0bWwjdG9Mb3dlckNhc2UoKSI+dG9Mb3dlckNhc2U8L0E+PC9CPigpPC9DT0RFPgorCisgICAgICAgIDxCUj4KKyAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Q29udmVydHMgYWxsIG9mIHRoZSBjaGFyYWN0ZXJzIGluIHRoaXMgPGNvZGU+U3RyaW5nPC9jb2RlPiB0byBsb3dlcgorICAgICAgICBjYXNlIHVzaW5nIHRoZSBydWxlcyBvZiB0aGUgZGVmYXVsdCBsb2NhbGUuPC9URD4KKzwvVFI+Cis8VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KKyAgICA8VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+CisgICAgICAgIDxDT0RFPiZuYnNwOzxBIEhSRUY9Ii4uLy4uL2phdmEvbGFuZy9TdHJpbmcuaHRtbCIgdGl0bGU9ImNsYXNzIGluIGphdmEubGFuZyI+U3RyaW5nPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KKyAgICA8VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vamF2YS9sYW5nL1N0cmluZy5odG1sI3RvTG93ZXJDYXNlKGphdmEudXRpbC5Mb2NhbGUpIj50b0xvd2VyQ2FzZTwvQT48L0I+KDxBIEhSRUY9Ii4uLy4uL2phdmEvdXRpbC9Mb2NhbGUuaHRtbCIgdGl0bGU9ImNsYXNzIGluIGphdmEudXRpbCI+TG9jYWxlPC9BPiZuYnNwO2xvY2FsZSk8L0NPREU+CisKKyAgICAgICAgPEJSPgorICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtDb252ZXJ0cyBhbGwgb2YgdGhlIGNoYXJhY3RlcnMgaW4gdGhpcyA8Y29kZT5TdHJpbmc8L2NvZGU+IHRvIGxvd2VyCisgICAgICAgIGNhc2UgdXNpbmcgdGhlIHJ1bGVzIG9mIHRoZSBnaXZlbiA8Y29kZT5Mb2NhbGU8L2NvZGU+LjwvVEQ+Cis8L1RSPgorPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+CisgICAgPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgorICAgICAgICA8Q09ERT4mbmJzcDs8QSBIUkVGPSIuLi8uLi9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBqYXZhLmxhbmciPlN0cmluZzwvQT48L0NPREU+PC9GT05UPjwvVEQ+CisgICAgPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uL2phdmEvbGFuZy9TdHJpbmcuaHRtbCN0b1N0cmluZygpIj50b1N0cmluZzwvQT48L0I+KCk8L0NPREU+CisKKyAgICAgICAgPEJSPgorICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGlzIG9iamVjdCAod2hpY2ggaXMgYWxyZWFkeSBhIHN0cmluZyEpIGlzIGl0c2VsZiByZXR1cm5lZC48L1REPgorPC9UUj4KKzxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgorICAgIDxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KKyAgICAgICAgPENPREU+Jm5ic3A7PEEgSFJFRj0iLi4vLi4vamF2YS9sYW5nL1N0cmluZy5odG1sIiB0aXRsZT0iY2xhc3MgaW4gamF2YS5sYW5nIj5TdHJpbmc8L0E+PC9DT0RFPjwvRk9OVD48L1REPgorICAgIDxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi9qYXZhL2xhbmcvU3RyaW5nLmh0bWwjdG9VcHBlckNhc2UoKSI+dG9VcHBlckNhc2U8L0E+PC9CPigpPC9DT0RFPgorCisgICAgICAgIDxCUj4KKyAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Q29udmVydHMgYWxsIG9mIHRoZSBjaGFyYWN0ZXJzIGluIHRoaXMgPGNvZGU+U3RyaW5nPC9jb2RlPiB0byB1cHBlcgorICAgICAgICBjYXNlIHVzaW5nIHRoZSBydWxlcyBvZiB0aGUgZGVmYXVsdCBsb2NhbGUuPC9URD4KKzwvVFI+Cis8VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KKyAgICA8VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+CisgICAgICAgIDxDT0RFPiZuYnNwOzxBIEhSRUY9Ii4uLy4uL2phdmEvbGFuZy9TdHJpbmcuaHRtbCIgdGl0bGU9ImNsYXNzIGluIGphdmEubGFuZyI+U3RyaW5nPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KKyAgICA8VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vamF2YS9sYW5nL1N0cmluZy5odG1sI3RvVXBwZXJDYXNlKGphdmEudXRpbC5Mb2NhbGUpIj50b1VwcGVyQ2FzZTwvQT48L0I+KDxBIEhSRUY9Ii4uLy4uL2phdmEvdXRpbC9Mb2NhbGUuaHRtbCIgdGl0bGU9ImNsYXNzIGluIGphdmEudXRpbCI+TG9jYWxlPC9BPiZuYnNwO2xvY2FsZSk8L0NPREU+CisKKyAgICAgICAgPEJSPgorICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtDb252ZXJ0cyBhbGwgb2YgdGhlIGNoYXJhY3RlcnMgaW4gdGhpcyA8Y29kZT5TdHJpbmc8L2NvZGU+IHRvIHVwcGVyCisgICAgICAgIGNhc2UgdXNpbmcgdGhlIHJ1bGVzIG9mIHRoZSBnaXZlbiA8Y29kZT5Mb2NhbGU8L2NvZGU+LjwvVEQ+Cis8L1RSPgorPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+CisgICAgPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgorICAgICAgICA8Q09ERT4mbmJzcDs8QSBIUkVGPSIuLi8uLi9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBqYXZhLmxhbmciPlN0cmluZzwvQT48L0NPREU+PC9GT05UPjwvVEQ+CisgICAgPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uL2phdmEvbGFuZy9TdHJpbmcuaHRtbCN0cmltKCkiPnRyaW08L0E+PC9CPigpPC9DT0RFPgorCisgICAgICAgIDxCUj4KKyAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyBhIGNvcHkgb2YgdGhlIHN0cmluZywgd2l0aCBsZWFkaW5nIGFuZCB0cmFpbGluZyB3aGl0ZXNwYWNlCisgICAgICAgIG9taXR0ZWQuPC9URD4KKzwvVFI+Cis8VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KKyAgICA8VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+CisgICAgICAgIDxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uL2phdmEvbGFuZy9TdHJpbmcuaHRtbCIgdGl0bGU9ImNsYXNzIGluIGphdmEubGFuZyI+U3RyaW5nPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KKyAgICA8VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vamF2YS9sYW5nL1N0cmluZy5odG1sI3ZhbHVlT2YoYm9vbGVhbikiPnZhbHVlT2Y8L0E+PC9CPihib29sZWFuJm5ic3A7Yik8L0NPREU+CisKKyAgICAgICAgPEJSPgorICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIHRoZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIDxjb2RlPmJvb2xlYW48L2NvZGU+IGFyZ3VtZW50LjwvVEQ+Cis8L1RSPgorPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+CisgICAgPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgorICAgICAgICA8Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBqYXZhLmxhbmciPlN0cmluZzwvQT48L0NPREU+PC9GT05UPjwvVEQ+CisgICAgPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uL2phdmEvbGFuZy9TdHJpbmcuaHRtbCN2YWx1ZU9mKGNoYXIpIj52YWx1ZU9mPC9BPjwvQj4oY2hhciZuYnNwO2MpPC9DT0RFPgorCisgICAgICAgIDxCUj4KKyAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyB0aGUgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSA8Y29kZT5jaGFyPC9jb2RlPgorICAgICAgICBhcmd1bWVudC48L1REPgorPC9UUj4KKzxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgorICAgIDxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KKyAgICAgICAgPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vamF2YS9sYW5nL1N0cmluZy5odG1sIiB0aXRsZT0iY2xhc3MgaW4gamF2YS5sYW5nIj5TdHJpbmc8L0E+PC9DT0RFPjwvRk9OVD48L1REPgorICAgIDxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi9qYXZhL2xhbmcvU3RyaW5nLmh0bWwjdmFsdWVPZihjaGFyW10pIj52YWx1ZU9mPC9BPjwvQj4oY2hhcltdJm5ic3A7ZGF0YSk8L0NPREU+CisKKyAgICAgICAgPEJSPgorICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIHRoZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIDxjb2RlPmNoYXI8L2NvZGU+IGFycmF5CisgICAgICAgIGFyZ3VtZW50LjwvVEQ+Cis8L1RSPgorPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+CisgICAgPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgorICAgICAgICA8Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBqYXZhLmxhbmciPlN0cmluZzwvQT48L0NPREU+PC9GT05UPjwvVEQ+CisgICAgPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uL2phdmEvbGFuZy9TdHJpbmcuaHRtbCN2YWx1ZU9mKGNoYXJbXSwgaW50LCBpbnQpIj52YWx1ZU9mPC9BPjwvQj4oY2hhcltdJm5ic3A7ZGF0YSwKKyAgICAgICAgaW50Jm5ic3A7b2Zmc2V0LAorICAgICAgICBpbnQmbmJzcDtjb3VudCk8L0NPREU+CisKKyAgICAgICAgPEJSPgorICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIHRoZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYSBzcGVjaWZpYyBzdWJhcnJheSBvZiB0aGUKKyAgICAgICAgPGNvZGU+Y2hhcjwvY29kZT4gYXJyYXkgYXJndW1lbnQuPC9URD4KKzwvVFI+Cis8VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KKyAgICA8VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+CisgICAgICAgIDxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uL2phdmEvbGFuZy9TdHJpbmcuaHRtbCIgdGl0bGU9ImNsYXNzIGluIGphdmEubGFuZyI+U3RyaW5nPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KKyAgICA8VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vamF2YS9sYW5nL1N0cmluZy5odG1sI3ZhbHVlT2YoZG91YmxlKSI+dmFsdWVPZjwvQT48L0I+KGRvdWJsZSZuYnNwO2QpPC9DT0RFPgorCisgICAgICAgIDxCUj4KKyAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyB0aGUgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSA8Y29kZT5kb3VibGU8L2NvZGU+IGFyZ3VtZW50LjwvVEQ+Cis8L1RSPgorPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+CisgICAgPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgorICAgICAgICA8Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBqYXZhLmxhbmciPlN0cmluZzwvQT48L0NPREU+PC9GT05UPjwvVEQ+CisgICAgPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uL2phdmEvbGFuZy9TdHJpbmcuaHRtbCN2YWx1ZU9mKGZsb2F0KSI+dmFsdWVPZjwvQT48L0I+KGZsb2F0Jm5ic3A7Zik8L0NPREU+CisKKyAgICAgICAgPEJSPgorICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIHRoZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIDxjb2RlPmZsb2F0PC9jb2RlPiBhcmd1bWVudC48L1REPgorPC9UUj4KKzxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgorICAgIDxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KKyAgICAgICAgPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vamF2YS9sYW5nL1N0cmluZy5odG1sIiB0aXRsZT0iY2xhc3MgaW4gamF2YS5sYW5nIj5TdHJpbmc8L0E+PC9DT0RFPjwvRk9OVD48L1REPgorICAgIDxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi9qYXZhL2xhbmcvU3RyaW5nLmh0bWwjdmFsdWVPZihpbnQpIj52YWx1ZU9mPC9BPjwvQj4oaW50Jm5ic3A7aSk8L0NPREU+CisKKyAgICAgICAgPEJSPgorICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIHRoZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIDxjb2RlPmludDwvY29kZT4gYXJndW1lbnQuPC9URD4KKzwvVFI+Cis8VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KKyAgICA8VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+CisgICAgICAgIDxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uL2phdmEvbGFuZy9TdHJpbmcuaHRtbCIgdGl0bGU9ImNsYXNzIGluIGphdmEubGFuZyI+U3RyaW5nPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KKyAgICA8VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vamF2YS9sYW5nL1N0cmluZy5odG1sI3ZhbHVlT2YobG9uZykiPnZhbHVlT2Y8L0E+PC9CPihsb25nJm5ic3A7bCk8L0NPREU+CisKKyAgICAgICAgPEJSPgorICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIHRoZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIDxjb2RlPmxvbmc8L2NvZGU+IGFyZ3VtZW50LjwvVEQ+Cis8L1RSPgorPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+CisgICAgPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgorICAgICAgICA8Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBqYXZhLmxhbmciPlN0cmluZzwvQT48L0NPREU+PC9GT05UPjwvVEQ+CisgICAgPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uL2phdmEvbGFuZy9TdHJpbmcuaHRtbCN2YWx1ZU9mKGphdmEubGFuZy5PYmplY3QpIj52YWx1ZU9mPC9BPjwvQj4oPEEgSFJFRj0iLi4vLi4vamF2YS9sYW5nL09iamVjdC5odG1sIiB0aXRsZT0iY2xhc3MgaW4gamF2YS5sYW5nIj5PYmplY3Q8L0E+Jm5ic3A7b2JqKTwvQ09ERT4KKworICAgICAgICA8QlI+CisgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgdGhlIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgPGNvZGU+T2JqZWN0PC9jb2RlPiBhcmd1bWVudC48L1REPgorPC9UUj4KKzwvVEFCTEU+CismbmJzcDs8QSBOQU1FPSJtZXRob2RzX2luaGVyaXRlZF9mcm9tX2NsYXNzX2phdmEubGFuZy5PYmplY3QiPjwhLS0gLS0+PC9BPgorPFRBQkxFIEJPUkRFUj0iMSIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KKyAgICA8VFIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KKyAgICAgICAgPFRIIEFMSUdOPSJsZWZ0Ij48Qj5NZXRob2RzIGluaGVyaXRlZCBmcm9tIGNsYXNzIGphdmEubGFuZy48QSBIUkVGPSIuLi8uLi9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBqYXZhLmxhbmciPk9iamVjdDwvQT48L0I+PC9USD4KKyAgICA8L1RSPgorICAgIDxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgorICAgICAgICA8VEQ+PENPREU+PEEgSFJFRj0iLi4vLi4vamF2YS9sYW5nL09iamVjdC5odG1sI2Nsb25lKCkiPmNsb25lPC9BPiwgPEEgSFJFRj0iLi4vLi4vamF2YS9sYW5nL09iamVjdC5odG1sI2ZpbmFsaXplKCkiPmZpbmFsaXplPC9BPiwgPEEgSFJFRj0iLi4vLi4vamF2YS9sYW5nL09iamVjdC5odG1sI2dldENsYXNzKCkiPmdldENsYXNzPC9BPiwgPEEgSFJFRj0iLi4vLi4vamF2YS9sYW5nL09iamVjdC5odG1sI25vdGlmeSgpIj5ub3RpZnk8L0E+LCA8QSBIUkVGPSIuLi8uLi9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjbm90aWZ5QWxsKCkiPm5vdGlmeUFsbDwvQT4sIDxBIEhSRUY9Ii4uLy4uL2phdmEvbGFuZy9PYmplY3QuaHRtbCN3YWl0KCkiPndhaXQ8L0E+LCA8QSBIUkVGPSIuLi8uLi9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjd2FpdChsb25nKSI+d2FpdDwvQT4sIDxBIEhSRUY9Ii4uLy4uL2phdmEvbGFuZy9PYmplY3QuaHRtbCN3YWl0KGxvbmcsIGludCkiPndhaXQ8L0E+PC9DT0RFPjwvVEQ+CisgICAgPC9UUj4KKzwvVEFCTEU+CismbmJzcDsKKzxQPgorCisgICAgPCEtLSA9PT09PT09PT09PT0gRklFTEQgREVUQUlMID09PT09PT09PT09IC0tPgorCisgICAgPEEgTkFNRT0iZmllbGRfZGV0YWlsIj48IS0tIC0tPjwvQT4KKzxUQUJMRSBCT1JERVI9IjEiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+CisgICAgPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+CisgICAgICAgIDxUSCBBTElHTj0ibGVmdCIgQ09MU1BBTj0iMSI+PEZPTlQgU0laRT0iKzIiPgorICAgICAgICAgICAgPEI+RmllbGQgRGV0YWlsPC9CPjwvRk9OVD48L1RIPgorICAgIDwvVFI+Cis8L1RBQkxFPgorCis8QSBOQU1FPSJDQVNFX0lOU0VOU0lUSVZFX09SREVSIj48IS0tIC0tPjwvQT48SDM+CisgICAgQ0FTRV9JTlNFTlNJVElWRV9PUkRFUjwvSDM+Cis8UFJFPgorcHVibGljIHN0YXRpYyBmaW5hbCA8QSBIUkVGPSIuLi8uLi9qYXZhL3V0aWwvQ29tcGFyYXRvci5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIGphdmEudXRpbCI+Q29tcGFyYXRvcjwvQT4mbHQ7PEEgSFJFRj0iLi4vLi4vamF2YS9sYW5nL1N0cmluZy5odG1sIiB0aXRsZT0iY2xhc3MgaW4gamF2YS5sYW5nIj5TdHJpbmc8L0E+Jmd0OyA8Qj5DQVNFX0lOU0VOU0lUSVZFX09SREVSPC9CPjwvUFJFPgorPERMPgorICAgIDxERD5BIENvbXBhcmF0b3IgdGhhdCBvcmRlcnMgPGNvZGU+U3RyaW5nPC9jb2RlPiBvYmplY3RzIGFzIGJ5CisgICAgICAgIDxjb2RlPmNvbXBhcmVUb0lnbm9yZUNhc2U8L2NvZGU+LiBUaGlzIGNvbXBhcmF0b3IgaXMgc2VyaWFsaXphYmxlLgorICAgICAgICA8cD4KKyAgICAgICAgICAgIE5vdGUgdGhhdCB0aGlzIENvbXBhcmF0b3IgZG9lcyA8ZW0+bm90PC9lbT4gdGFrZSBsb2NhbGUgaW50byBhY2NvdW50LAorICAgICAgICAgICAgYW5kIHdpbGwgcmVzdWx0IGluIGFuIHVuc2F0aXNmYWN0b3J5IG9yZGVyaW5nIGZvciBjZXJ0YWluIGxvY2FsZXMuCisgICAgICAgICAgICBUaGUgamF2YS50ZXh0IHBhY2thZ2UgcHJvdmlkZXMgPGVtPkNvbGxhdG9yczwvZW0+IHRvIGFsbG93CisgICAgICAgICAgICBsb2NhbGUtc2Vuc2l0aXZlIG9yZGVyaW5nLgorICAgICAgICA8UD4KKyAgICAgICAgPERMPgorICAgICAgICAgICAgPERUPjxCPlNpbmNlOjwvQj48L0RUPgorICAgICAgICAgICAgPEREPjEuMjwvREQ+CisgICAgICAgICAgICA8RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi9qYXZhL3RleHQvQ29sbGF0b3IuaHRtbCNjb21wYXJlKGphdmEubGFuZy5TdHJpbmcsIGphdmEubGFuZy5TdHJpbmcpIj48Q09ERT5Db2xsYXRvci5jb21wYXJlKFN0cmluZywgU3RyaW5nKTwvQ09ERT48L0E+PC9ETD4KKzwvREw+CisKKzwhLS0gPT09PT09PT09IENPTlNUUlVDVE9SIERFVEFJTCA9PT09PT09PSAtLT4KKworPEEgTkFNRT0iY29uc3RydWN0b3JfZGV0YWlsIj48IS0tIC0tPjwvQT4KKzxUQUJMRSBCT1JERVI9IjEiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+CisgICAgPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+CisgICAgICAgIDxUSCBBTElHTj0ibGVmdCIgQ09MU1BBTj0iMSI+PEZPTlQgU0laRT0iKzIiPgorICAgICAgICAgICAgPEI+Q29uc3RydWN0b3IgRGV0YWlsPC9CPjwvRk9OVD48L1RIPgorICAgIDwvVFI+Cis8L1RBQkxFPgorCis8QSBOQU1FPSJTdHJpbmcoKSI+PCEtLSAtLT48L0E+PEgzPgorICAgIFN0cmluZzwvSDM+Cis8UFJFPgorcHVibGljIDxCPlN0cmluZzwvQj4oKTwvUFJFPgorPERMPgorICAgIDxERD5Jbml0aWFsaXplcyBhIG5ld2x5IGNyZWF0ZWQgPGNvZGU+U3RyaW5nPC9jb2RlPiBvYmplY3Qgc28gdGhhdCBpdCByZXByZXNlbnRzCisgICAgICAgIGFuIGVtcHR5IGNoYXJhY3RlciBzZXF1ZW5jZS4gIE5vdGUgdGhhdCB1c2Ugb2YgdGhpcyBjb25zdHJ1Y3RvciBpcworICAgICAgICB1bm5lY2Vzc2FyeSBzaW5jZSBTdHJpbmdzIGFyZSBpbW11dGFibGUuCisgICAgICAgIDxQPgorPC9ETD4KKzxIUj4KKworPEEgTkFNRT0iU3RyaW5nKGphdmEubGFuZy5TdHJpbmcpIj48IS0tIC0tPjwvQT48SDM+CisgICAgU3RyaW5nPC9IMz4KKzxQUkU+CitwdWJsaWMgPEI+U3RyaW5nPC9CPig8QSBIUkVGPSIuLi8uLi9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBqYXZhLmxhbmciPlN0cmluZzwvQT4mbmJzcDtvcmlnaW5hbCk8L1BSRT4KKzxETD4KKyAgICA8REQ+SW5pdGlhbGl6ZXMgYSBuZXdseSBjcmVhdGVkIDxjb2RlPlN0cmluZzwvY29kZT4gb2JqZWN0IHNvIHRoYXQgaXQgcmVwcmVzZW50cworICAgICAgICB0aGUgc2FtZSBzZXF1ZW5jZSBvZiBjaGFyYWN0ZXJzIGFzIHRoZSBhcmd1bWVudDsgaW4gb3RoZXIgd29yZHMsIHRoZQorICAgICAgICBuZXdseSBjcmVhdGVkIHN0cmluZyBpcyBhIGNvcHkgb2YgdGhlIGFyZ3VtZW50IHN0cmluZy4gVW5sZXNzIGFuCisgICAgICAgIGV4cGxpY2l0IGNvcHkgb2YgPGNvZGU+b3JpZ2luYWw8L2NvZGU+IGlzIG5lZWRlZCwgdXNlIG9mIHRoaXMgY29uc3RydWN0b3IgaXMKKyAgICAgICAgdW5uZWNlc3Nhcnkgc2luY2UgU3RyaW5ncyBhcmUgaW1tdXRhYmxlLgorICAgICAgICA8UD4KKyAgICAgICAgPERMPgorICAgICAgICAgICAgPERUPjxCPlBhcmFtZXRlcnM6PC9CPjxERD48Q09ERT5vcmlnaW5hbDwvQ09ERT4gLSBBIDxjb2RlPlN0cmluZzwvY29kZT48L0RMPgorPC9ETD4KKzxIUj4KKworPEEgTkFNRT0iU3RyaW5nKGNoYXJbXSkiPjwhLS0gLS0+PC9BPjxIMz4KKyAgICBTdHJpbmc8L0gzPgorPFBSRT4KK3B1YmxpYyA8Qj5TdHJpbmc8L0I+KGNoYXJbXSZuYnNwO3ZhbHVlKTwvUFJFPgorPERMPgorICAgIDxERD5BbGxvY2F0ZXMgYSBuZXcgPGNvZGU+U3RyaW5nPC9jb2RlPiBzbyB0aGF0IGl0IHJlcHJlc2VudHMgdGhlIHNlcXVlbmNlIG9mCisgICAgICAgIGNoYXJhY3RlcnMgY3VycmVudGx5IGNvbnRhaW5lZCBpbiB0aGUgY2hhcmFjdGVyIGFycmF5IGFyZ3VtZW50LiBUaGUKKyAgICAgICAgY29udGVudHMgb2YgdGhlIGNoYXJhY3RlciBhcnJheSBhcmUgY29waWVkOyBzdWJzZXF1ZW50IG1vZGlmaWNhdGlvbiBvZgorICAgICAgICB0aGUgY2hhcmFjdGVyIGFycmF5IGRvZXMgbm90IGFmZmVjdCB0aGUgbmV3bHkgY3JlYXRlZCBzdHJpbmcuCisgICAgICAgIDxQPgorICAgICAgICA8REw+CisgICAgICAgICAgICA8RFQ+PEI+UGFyYW1ldGVyczo8L0I+PEREPjxDT0RFPnZhbHVlPC9DT0RFPiAtIFRoZSBpbml0aWFsIHZhbHVlIG9mIHRoZSBzdHJpbmc8L0RMPgorPC9ETD4KKzxIUj4KKworPEEgTkFNRT0iU3RyaW5nKGNoYXJbXSwgaW50LCBpbnQpIj48IS0tIC0tPjwvQT48SDM+CisgICAgU3RyaW5nPC9IMz4KKzxQUkU+CitwdWJsaWMgPEI+U3RyaW5nPC9CPihjaGFyW10mbmJzcDt2YWx1ZSwKKyAgICAgICAgICAgICAgaW50Jm5ic3A7b2Zmc2V0LAorICAgICAgICAgICAgICBpbnQmbmJzcDtjb3VudCk8L1BSRT4KKzxETD4KKyAgICA8REQ+QWxsb2NhdGVzIGEgbmV3IDxjb2RlPlN0cmluZzwvY29kZT4gdGhhdCBjb250YWlucyBjaGFyYWN0ZXJzIGZyb20gYSBzdWJhcnJheQorICAgICAgICBvZiB0aGUgY2hhcmFjdGVyIGFycmF5IGFyZ3VtZW50LiBUaGUgPGNvZGU+b2Zmc2V0PC9jb2RlPiBhcmd1bWVudCBpcyB0aGUKKyAgICAgICAgaW5kZXggb2YgdGhlIGZpcnN0IGNoYXJhY3RlciBvZiB0aGUgc3ViYXJyYXkgYW5kIHRoZSA8Y29kZT5jb3VudDwvY29kZT4KKyAgICAgICAgYXJndW1lbnQgc3BlY2lmaWVzIHRoZSBsZW5ndGggb2YgdGhlIHN1YmFycmF5LiBUaGUgY29udGVudHMgb2YgdGhlCisgICAgICAgIHN1YmFycmF5IGFyZSBjb3BpZWQ7IHN1YnNlcXVlbnQgbW9kaWZpY2F0aW9uIG9mIHRoZSBjaGFyYWN0ZXIgYXJyYXkgZG9lcworICAgICAgICBub3QgYWZmZWN0IHRoZSBuZXdseSBjcmVhdGVkIHN0cmluZy4KKyAgICAgICAgPFA+CisgICAgICAgIDxETD4KKyAgICAgICAgICAgIDxEVD48Qj5QYXJhbWV0ZXJzOjwvQj48REQ+PENPREU+dmFsdWU8L0NPREU+IC0gQXJyYXkgdGhhdCBpcyB0aGUgc291cmNlIG9mIGNoYXJhY3RlcnM8REQ+PENPREU+b2Zmc2V0PC9DT0RFPiAtIFRoZSBpbml0aWFsIG9mZnNldDxERD48Q09ERT5jb3VudDwvQ09ERT4gLSBUaGUgbGVuZ3RoCisgICAgICAgICAgICA8RFQ+PEI+VGhyb3dzOjwvQj4KKyAgICAgICAgICAgIDxERD48Q09ERT48QSBIUkVGPSIuLi8uLi9qYXZhL2xhbmcvSW5kZXhPdXRPZkJvdW5kc0V4Y2VwdGlvbi5odG1sIiB0aXRsZT0iY2xhc3MgaW4gamF2YS5sYW5nIj5JbmRleE91dE9mQm91bmRzRXhjZXB0aW9uPC9BPjwvQ09ERT4gLSBJZiB0aGUgPGNvZGU+b2Zmc2V0PC9jb2RlPiBhbmQgPGNvZGU+Y291bnQ8L2NvZGU+IGFyZ3VtZW50cyBpbmRleAorICAgICAgICAgICAgICAgIGNoYXJhY3RlcnMgb3V0c2lkZSB0aGUgYm91bmRzIG9mIHRoZSA8Y29kZT52YWx1ZTwvY29kZT4gYXJyYXk8L0RMPgorPC9ETD4KKzxIUj4KKworPEEgTkFNRT0iU3RyaW5nKGludFtdLCBpbnQsIGludCkiPjwhLS0gLS0+PC9BPjxIMz4KKyAgICBTdHJpbmc8L0gzPgorPFBSRT4KK3B1YmxpYyA8Qj5TdHJpbmc8L0I+KGludFtdJm5ic3A7Y29kZVBvaW50cywKKyAgICAgICAgICAgICAgaW50Jm5ic3A7b2Zmc2V0LAorICAgICAgICAgICAgICBpbnQmbmJzcDtjb3VudCk8L1BSRT4KKzxETD4KKyAgICA8REQ+QWxsb2NhdGVzIGEgbmV3IDxjb2RlPlN0cmluZzwvY29kZT4gdGhhdCBjb250YWlucyBjaGFyYWN0ZXJzIGZyb20gYSBzdWJhcnJheQorICAgICAgICBvZiB0aGUgVW5pY29kZSBjb2RlIHBvaW50IGFycmF5IGFyZ3VtZW50LiBUaGUgPGNvZGU+b2Zmc2V0PC9jb2RlPiBhcmd1bWVudAorICAgICAgICBpcyB0aGUgaW5kZXggb2YgdGhlIGZpcnN0IGNvZGUgcG9pbnQgb2YgdGhlIHN1YmFycmF5IGFuZCB0aGUKKyAgICAgICAgPGNvZGU+Y291bnQ8L2NvZGU+IGFyZ3VtZW50IHNwZWNpZmllcyB0aGUgbGVuZ3RoIG9mIHRoZSBzdWJhcnJheS4gVGhlCisgICAgICAgIGNvbnRlbnRzIG9mIHRoZSBzdWJhcnJheSBhcmUgY29udmVydGVkIHRvIDxjb2RlPmNoYXI8L2NvZGU+czsgc3Vic2VxdWVudAorICAgICAgICBtb2RpZmljYXRpb24gb2YgdGhlIDxjb2RlPmludDwvY29kZT4gYXJyYXkgZG9lcyBub3QgYWZmZWN0IHRoZSBuZXdseSBjcmVhdGVkCisgICAgICAgIHN0cmluZy4KKyAgICAgICAgPFA+CisgICAgICAgIDxETD4KKyAgICAgICAgICAgIDxEVD48Qj5QYXJhbWV0ZXJzOjwvQj48REQ+PENPREU+Y29kZVBvaW50czwvQ09ERT4gLSBBcnJheSB0aGF0IGlzIHRoZSBzb3VyY2Ugb2YgVW5pY29kZSBjb2RlIHBvaW50czxERD48Q09ERT5vZmZzZXQ8L0NPREU+IC0gVGhlIGluaXRpYWwgb2Zmc2V0PEREPjxDT0RFPmNvdW50PC9DT0RFPiAtIFRoZSBsZW5ndGgKKyAgICAgICAgICAgIDxEVD48Qj5UaHJvd3M6PC9CPgorICAgICAgICAgICAgPEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uL2phdmEvbGFuZy9JbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24uaHRtbCIgdGl0bGU9ImNsYXNzIGluIGphdmEubGFuZyI+SWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uPC9BPjwvQ09ERT4gLSBJZiBhbnkgaW52YWxpZCBVbmljb2RlIGNvZGUgcG9pbnQgaXMgZm91bmQgaW4gPGNvZGU+Y29kZVBvaW50czwvY29kZT4KKyAgICAgICAgICAgIDxERD48Q09ERT48QSBIUkVGPSIuLi8uLi9qYXZhL2xhbmcvSW5kZXhPdXRPZkJvdW5kc0V4Y2VwdGlvbi5odG1sIiB0aXRsZT0iY2xhc3MgaW4gamF2YS5sYW5nIj5JbmRleE91dE9mQm91bmRzRXhjZXB0aW9uPC9BPjwvQ09ERT4gLSBJZiB0aGUgPGNvZGU+b2Zmc2V0PC9jb2RlPiBhbmQgPGNvZGU+Y291bnQ8L2NvZGU+IGFyZ3VtZW50cyBpbmRleAorICAgICAgICAgICAgICAgIGNoYXJhY3RlcnMgb3V0c2lkZSB0aGUgYm91bmRzIG9mIHRoZSA8Y29kZT5jb2RlUG9pbnRzPC9jb2RlPiBhcnJheTxEVD48Qj5TaW5jZTo8L0I+PC9EVD4KKyAgICAgICAgICAgIDxERD4xLjU8L0REPgorICAgICAgICA8L0RMPgorPC9ETD4KKzxIUj4KKworPEEgTkFNRT0iU3RyaW5nKGJ5dGVbXSwgaW50LCBpbnQsIGludCkiPjwhLS0gLS0+PC9BPjxIMz4KKyAgICBTdHJpbmc8L0gzPgorPFBSRT4KKzxGT05UIFNJWkU9Ii0xIj48QSBIUkVGPSIuLi8uLi9qYXZhL2xhbmcvRGVwcmVjYXRlZC5odG1sIiB0aXRsZT0iYW5ub3RhdGlvbiBpbiBqYXZhLmxhbmciPkBEZXByZWNhdGVkPC9BPgorPC9GT05UPnB1YmxpYyA8Qj5TdHJpbmc8L0I+KGJ5dGVbXSZuYnNwO2FzY2lpLAorICAgICAgICAgICAgICAgICAgICAgICAgIGludCZuYnNwO2hpYnl0ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBpbnQmbmJzcDtvZmZzZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgaW50Jm5ic3A7Y291bnQpPC9QUkU+Cis8REw+CisgICAgPEREPjxCPkRlcHJlY2F0ZWQuPC9CPiZuYnNwOzxJPlRoaXMgbWV0aG9kIGRvZXMgbm90IHByb3Blcmx5IGNvbnZlcnQgYnl0ZXMgaW50byBjaGFyYWN0ZXJzLgorICAgICAgICBBcyBvZiBKREsmbmJzcDsxLjEsIHRoZSBwcmVmZXJyZWQgd2F5IHRvIGRvIHRoaXMgaXMgdmlhIHRoZQorICAgICAgICA8Y29kZT5TdHJpbmc8L2NvZGU+IGNvbnN0cnVjdG9ycyB0aGF0IHRha2UgYSA8QSBIUkVGPSIuLi8uLi9qYXZhL25pby9jaGFyc2V0L0NoYXJzZXQuaHRtbCIgdGl0bGU9ImNsYXNzIGluIGphdmEubmlvLmNoYXJzZXQiPjxDT0RFPkNoYXJzZXQ8L0NPREU+PC9BPiwgY2hhcnNldCBuYW1lLCBvciB0aGF0IHVzZSB0aGUgcGxhdGZvcm0ncworICAgICAgICBkZWZhdWx0IGNoYXJzZXQuPC9JPgorICAgICAgICA8UD4KKyAgICAgICAgICAgIDxERD5BbGxvY2F0ZXMgYSBuZXcgPGNvZGU+U3RyaW5nPC9jb2RlPiBjb25zdHJ1Y3RlZCBmcm9tIGEgc3ViYXJyYXkgb2YgYW4gYXJyYXkKKyAgICAgICAgICAgICAgICBvZiA4LWJpdCBpbnRlZ2VyIHZhbHVlcy4KKworICAgICAgICA8cD4gVGhlIDxjb2RlPm9mZnNldDwvY29kZT4gYXJndW1lbnQgaXMgdGhlIGluZGV4IG9mIHRoZSBmaXJzdCBieXRlIG9mIHRoZQorICAgICAgICAgICAgc3ViYXJyYXksIGFuZCB0aGUgPGNvZGU+Y291bnQ8L2NvZGU+IGFyZ3VtZW50IHNwZWNpZmllcyB0aGUgbGVuZ3RoIG9mIHRoZQorICAgICAgICAgICAgc3ViYXJyYXkuCisKKyAgICAgICAgPHA+IEVhY2ggPGNvZGU+Ynl0ZTwvY29kZT4gaW4gdGhlIHN1YmFycmF5IGlzIGNvbnZlcnRlZCB0byBhIDxjb2RlPmNoYXI8L2NvZGU+IGFzCisgICAgICAgICAgICBzcGVjaWZpZWQgaW4gdGhlIG1ldGhvZCBhYm92ZS4KKyAgICAgICAgPFA+CisgICAgICAgIDxETD4KKyAgICAgICAgICAgIDxEVD48Qj5QYXJhbWV0ZXJzOjwvQj48REQ+PENPREU+YXNjaWk8L0NPREU+IC0gVGhlIGJ5dGVzIHRvIGJlIGNvbnZlcnRlZCB0byBjaGFyYWN0ZXJzPEREPjxDT0RFPmhpYnl0ZTwvQ09ERT4gLSBUaGUgdG9wIDggYml0cyBvZiBlYWNoIDE2LWJpdCBVbmljb2RlIGNvZGUgdW5pdDxERD48Q09ERT5vZmZzZXQ8L0NPREU+IC0gVGhlIGluaXRpYWwgb2Zmc2V0PEREPjxDT0RFPmNvdW50PC9DT0RFPiAtIFRoZSBsZW5ndGgKKyAgICAgICAgICAgIDxEVD48Qj5UaHJvd3M6PC9CPgorICAgICAgICAgICAgPEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uL2phdmEvbGFuZy9JbmRleE91dE9mQm91bmRzRXhjZXB0aW9uLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBqYXZhLmxhbmciPkluZGV4T3V0T2ZCb3VuZHNFeGNlcHRpb248L0E+PC9DT0RFPiAtIElmIHRoZSA8Y29kZT5vZmZzZXQ8L2NvZGU+IG9yIDxjb2RlPmNvdW50PC9jb2RlPiBhcmd1bWVudCBpcyBpbnZhbGlkPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vamF2YS9sYW5nL1N0cmluZy5odG1sI1N0cmluZyhieXRlW10sIGludCkiPjxDT0RFPlN0cmluZyhieXRlW10sIGludCk8L0NPREU+PC9BPiwKKyAgICAgICAgICAgIDxBIEhSRUY9Ii4uLy4uL2phdmEvbGFuZy9TdHJpbmcuaHRtbCNTdHJpbmcoYnl0ZVtdLCBpbnQsIGludCwgamF2YS5sYW5nLlN0cmluZykiPjxDT0RFPlN0cmluZyhieXRlW10sIGludCwgaW50LCBqYXZhLmxhbmcuU3RyaW5nKTwvQ09ERT48L0E+LAorICAgICAgICAgICAgPEEgSFJFRj0iLi4vLi4vamF2YS9sYW5nL1N0cmluZy5odG1sI1N0cmluZyhieXRlW10sIGludCwgaW50LCBqYXZhLm5pby5jaGFyc2V0LkNoYXJzZXQpIj48Q09ERT5TdHJpbmcoYnl0ZVtdLCBpbnQsIGludCwgamF2YS5uaW8uY2hhcnNldC5DaGFyc2V0KTwvQ09ERT48L0E+LAorICAgICAgICAgICAgPEEgSFJFRj0iLi4vLi4vamF2YS9sYW5nL1N0cmluZy5odG1sI1N0cmluZyhieXRlW10sIGludCwgaW50KSI+PENPREU+U3RyaW5nKGJ5dGVbXSwgaW50LCBpbnQpPC9DT0RFPjwvQT4sCisgICAgICAgICAgICA8QSBIUkVGPSIuLi8uLi9qYXZhL2xhbmcvU3RyaW5nLmh0bWwjU3RyaW5nKGJ5dGVbXSwgamF2YS5sYW5nLlN0cmluZykiPjxDT0RFPlN0cmluZyhieXRlW10sIGphdmEubGFuZy5TdHJpbmcpPC9DT0RFPjwvQT4sCisgICAgICAgICAgICA8QSBIUkVGPSIuLi8uLi9qYXZhL2xhbmcvU3RyaW5nLmh0bWwjU3RyaW5nKGJ5dGVbXSwgamF2YS5uaW8uY2hhcnNldC5DaGFyc2V0KSI+PENPREU+U3RyaW5nKGJ5dGVbXSwgamF2YS5uaW8uY2hhcnNldC5DaGFyc2V0KTwvQ09ERT48L0E+LAorICAgICAgICAgICAgPEEgSFJFRj0iLi4vLi4vamF2YS9sYW5nL1N0cmluZy5odG1sI1N0cmluZyhieXRlW10pIj48Q09ERT5TdHJpbmcoYnl0ZVtdKTwvQ09ERT48L0E+PC9ETD4KKzwvREw+Cis8SFI+CisKKzxBIE5BTUU9IlN0cmluZyhieXRlW10sIGludCkiPjwhLS0gLS0+PC9BPjxIMz4KKyAgICBTdHJpbmc8L0gzPgorPFBSRT4KKzxGT05UIFNJWkU9Ii0xIj48QSBIUkVGPSIuLi8uLi9qYXZhL2xhbmcvRGVwcmVjYXRlZC5odG1sIiB0aXRsZT0iYW5ub3RhdGlvbiBpbiBqYXZhLmxhbmciPkBEZXByZWNhdGVkPC9BPgorPC9GT05UPnB1YmxpYyA8Qj5TdHJpbmc8L0I+KGJ5dGVbXSZuYnNwO2FzY2lpLAorICAgICAgICAgICAgICAgICAgICAgICAgIGludCZuYnNwO2hpYnl0ZSk8L1BSRT4KKzxETD4KKyAgICA8REQ+PEI+RGVwcmVjYXRlZC48L0I+Jm5ic3A7PEk+VGhpcyBtZXRob2QgZG9lcyBub3QgcHJvcGVybHkgY29udmVydCBieXRlcyBpbnRvCisgICAgICAgIGNoYXJhY3RlcnMuICBBcyBvZiBKREsmbmJzcDsxLjEsIHRoZSBwcmVmZXJyZWQgd2F5IHRvIGRvIHRoaXMgaXMgdmlhIHRoZQorICAgICAgICA8Y29kZT5TdHJpbmc8L2NvZGU+IGNvbnN0cnVjdG9ycyB0aGF0IHRha2UgYSA8QSBIUkVGPSIuLi8uLi9qYXZhL25pby9jaGFyc2V0L0NoYXJzZXQuaHRtbCIgdGl0bGU9ImNsYXNzIGluIGphdmEubmlvLmNoYXJzZXQiPjxDT0RFPkNoYXJzZXQ8L0NPREU+PC9BPiwgY2hhcnNldCBuYW1lLCBvciB0aGF0IHVzZSB0aGUgcGxhdGZvcm0ncworICAgICAgICBkZWZhdWx0IGNoYXJzZXQuPC9JPgorICAgICAgICA8UD4KKyAgICAgICAgICAgIDxERD5BbGxvY2F0ZXMgYSBuZXcgPGNvZGU+U3RyaW5nPC9jb2RlPiBjb250YWluaW5nIGNoYXJhY3RlcnMgY29uc3RydWN0ZWQgZnJvbQorICAgICAgICAgICAgICAgIGFuIGFycmF5IG9mIDgtYml0IGludGVnZXIgdmFsdWVzLiBFYWNoIGNoYXJhY3RlciA8aT5jPC9pPmluIHRoZQorICAgICAgICAgICAgICAgIHJlc3VsdGluZyBzdHJpbmcgaXMgY29uc3RydWN0ZWQgZnJvbSB0aGUgY29ycmVzcG9uZGluZyBjb21wb25lbnQKKyAgICAgICAgICAgICAgICA8aT5iPC9pPiBpbiB0aGUgYnl0ZSBhcnJheSBzdWNoIHRoYXQ6CisKKyAgICAgICAgICAgICAgICA8YmxvY2txdW90ZT48cHJlPgorICAgICA8Yj48aT5jPC9pPjwvYj4gPT0gKGNoYXIpKCgoaGlieXRlICZhbXA7IDB4ZmYpICZsdDsmbHQ7IDgpCisgICAgICAgICAgICAgICAgICAgICAgICAgfCAoPGI+PGk+YjwvaT48L2I+ICZhbXA7IDB4ZmYpKQorIDwvcHJlPjwvYmxvY2txdW90ZT4KKyAgICAgICAgPFA+CisgICAgICAgIDxETD4KKyAgICAgICAgICAgIDxEVD48Qj5QYXJhbWV0ZXJzOjwvQj48REQ+PENPREU+YXNjaWk8L0NPREU+IC0gVGhlIGJ5dGVzIHRvIGJlIGNvbnZlcnRlZCB0byBjaGFyYWN0ZXJzPEREPjxDT0RFPmhpYnl0ZTwvQ09ERT4gLSBUaGUgdG9wIDggYml0cyBvZiBlYWNoIDE2LWJpdCBVbmljb2RlIGNvZGUgdW5pdDxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uL2phdmEvbGFuZy9TdHJpbmcuaHRtbCNTdHJpbmcoYnl0ZVtdLCBpbnQsIGludCwgamF2YS5sYW5nLlN0cmluZykiPjxDT0RFPlN0cmluZyhieXRlW10sIGludCwgaW50LCBqYXZhLmxhbmcuU3RyaW5nKTwvQ09ERT48L0E+LAorICAgICAgICAgICAgPEEgSFJFRj0iLi4vLi4vamF2YS9sYW5nL1N0cmluZy5odG1sI1N0cmluZyhieXRlW10sIGludCwgaW50LCBqYXZhLm5pby5jaGFyc2V0LkNoYXJzZXQpIj48Q09ERT5TdHJpbmcoYnl0ZVtdLCBpbnQsIGludCwgamF2YS5uaW8uY2hhcnNldC5DaGFyc2V0KTwvQ09ERT48L0E+LAorICAgICAgICAgICAgPEEgSFJFRj0iLi4vLi4vamF2YS9sYW5nL1N0cmluZy5odG1sI1N0cmluZyhieXRlW10sIGludCwgaW50KSI+PENPREU+U3RyaW5nKGJ5dGVbXSwgaW50LCBpbnQpPC9DT0RFPjwvQT4sCisgICAgICAgICAgICA8QSBIUkVGPSIuLi8uLi9qYXZhL2xhbmcvU3RyaW5nLmh0bWwjU3RyaW5nKGJ5dGVbXSwgamF2YS5sYW5nLlN0cmluZykiPjxDT0RFPlN0cmluZyhieXRlW10sIGphdmEubGFuZy5TdHJpbmcpPC9DT0RFPjwvQT4sCisgICAgICAgICAgICA8QSBIUkVGPSIuLi8uLi9qYXZhL2xhbmcvU3RyaW5nLmh0bWwjU3RyaW5nKGJ5dGVbXSwgamF2YS5uaW8uY2hhcnNldC5DaGFyc2V0KSI+PENPREU+U3RyaW5nKGJ5dGVbXSwgamF2YS5uaW8uY2hhcnNldC5DaGFyc2V0KTwvQ09ERT48L0E+LAorICAgICAgICAgICAgPEEgSFJFRj0iLi4vLi4vamF2YS9sYW5nL1N0cmluZy5odG1sI1N0cmluZyhieXRlW10pIj48Q09ERT5TdHJpbmcoYnl0ZVtdKTwvQ09ERT48L0E+PC9ETD4KKzwvREw+Cis8SFI+CisKKzxBIE5BTUU9IlN0cmluZyhieXRlW10sIGludCwgaW50LCBqYXZhLmxhbmcuU3RyaW5nKSI+PCEtLSAtLT48L0E+PEgzPgorICAgIFN0cmluZzwvSDM+Cis8UFJFPgorcHVibGljIDxCPlN0cmluZzwvQj4oYnl0ZVtdJm5ic3A7Ynl0ZXMsCisgICAgICAgICAgICAgIGludCZuYnNwO29mZnNldCwKKyAgICAgICAgICAgICAgaW50Jm5ic3A7bGVuZ3RoLAorICAgICAgICAgICAgICA8QSBIUkVGPSIuLi8uLi9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBqYXZhLmxhbmciPlN0cmluZzwvQT4mbmJzcDtjaGFyc2V0TmFtZSkKKyAgICAgICB0aHJvd3MgPEEgSFJFRj0iLi4vLi4vamF2YS9pby9VbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBqYXZhLmlvIj5VbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uPC9BPjwvUFJFPgorPERMPgorICAgIDxERD5Db25zdHJ1Y3RzIGEgbmV3IDxjb2RlPlN0cmluZzwvY29kZT4gYnkgZGVjb2RpbmcgdGhlIHNwZWNpZmllZCBzdWJhcnJheSBvZgorICAgICAgICBieXRlcyB1c2luZyB0aGUgc3BlY2lmaWVkIGNoYXJzZXQuICBUaGUgbGVuZ3RoIG9mIHRoZSBuZXcgPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAgICBpcyBhIGZ1bmN0aW9uIG9mIHRoZSBjaGFyc2V0LCBhbmQgaGVuY2UgbWF5IG5vdCBiZSBlcXVhbCB0byB0aGUgbGVuZ3RoCisgICAgICAgIG9mIHRoZSBzdWJhcnJheS4KKworICAgICAgICA8cD4gVGhlIGJlaGF2aW9yIG9mIHRoaXMgY29uc3RydWN0b3Igd2hlbiB0aGUgZ2l2ZW4gYnl0ZXMgYXJlIG5vdCB2YWxpZAorICAgICAgICAgICAgaW4gdGhlIGdpdmVuIGNoYXJzZXQgaXMgdW5zcGVjaWZpZWQuICBUaGUgPEEgSFJFRj0iLi4vLi4vamF2YS9uaW8vY2hhcnNldC9DaGFyc2V0RGVjb2Rlci5odG1sIiB0aXRsZT0iY2xhc3MgaW4gamF2YS5uaW8uY2hhcnNldCI+PENPREU+Q2hhcnNldERlY29kZXI8L0NPREU+PC9BPiBjbGFzcyBzaG91bGQgYmUgdXNlZCB3aGVuIG1vcmUgY29udHJvbAorICAgICAgICAgICAgb3ZlciB0aGUgZGVjb2RpbmcgcHJvY2VzcyBpcyByZXF1aXJlZC4KKyAgICAgICAgPFA+CisgICAgICAgIDxETD4KKyAgICAgICAgICAgIDxEVD48Qj5QYXJhbWV0ZXJzOjwvQj48REQ+PENPREU+Ynl0ZXM8L0NPREU+IC0gVGhlIGJ5dGVzIHRvIGJlIGRlY29kZWQgaW50byBjaGFyYWN0ZXJzPEREPjxDT0RFPm9mZnNldDwvQ09ERT4gLSBUaGUgaW5kZXggb2YgdGhlIGZpcnN0IGJ5dGUgdG8gZGVjb2RlPEREPjxDT0RFPmxlbmd0aDwvQ09ERT4gLSBUaGUgbnVtYmVyIG9mIGJ5dGVzIHRvIGRlY29kZTxERD48Q09ERT5jaGFyc2V0TmFtZTwvQ09ERT4gLSBUaGUgbmFtZSBvZiBhIHN1cHBvcnRlZCA8QSBIUkVGPSIuLi8uLi9qYXZhL25pby9jaGFyc2V0L0NoYXJzZXQuaHRtbCIgdGl0bGU9ImNsYXNzIGluIGphdmEubmlvLmNoYXJzZXQiPmNoYXJzZXQ8L0E+CisgICAgICAgICAgICA8RFQ+PEI+VGhyb3dzOjwvQj4KKyAgICAgICAgICAgIDxERD48Q09ERT48QSBIUkVGPSIuLi8uLi9qYXZhL2lvL1Vuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb24uaHRtbCIgdGl0bGU9ImNsYXNzIGluIGphdmEuaW8iPlVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb248L0E+PC9DT0RFPiAtIElmIHRoZSBuYW1lZCBjaGFyc2V0IGlzIG5vdCBzdXBwb3J0ZWQKKyAgICAgICAgICAgIDxERD48Q09ERT48QSBIUkVGPSIuLi8uLi9qYXZhL2xhbmcvSW5kZXhPdXRPZkJvdW5kc0V4Y2VwdGlvbi5odG1sIiB0aXRsZT0iY2xhc3MgaW4gamF2YS5sYW5nIj5JbmRleE91dE9mQm91bmRzRXhjZXB0aW9uPC9BPjwvQ09ERT4gLSBJZiB0aGUgPGNvZGU+b2Zmc2V0PC9jb2RlPiBhbmQgPGNvZGU+bGVuZ3RoPC9jb2RlPiBhcmd1bWVudHMgaW5kZXgKKyAgICAgICAgICAgICAgICBjaGFyYWN0ZXJzIG91dHNpZGUgdGhlIGJvdW5kcyBvZiB0aGUgPGNvZGU+Ynl0ZXM8L2NvZGU+IGFycmF5PERUPjxCPlNpbmNlOjwvQj48L0RUPgorICAgICAgICAgICAgPEREPkpESzEuMTwvREQ+CisgICAgICAgIDwvREw+Cis8L0RMPgorPEhSPgorCis8QSBOQU1FPSJTdHJpbmcoYnl0ZVtdLCBpbnQsIGludCwgamF2YS5uaW8uY2hhcnNldC5DaGFyc2V0KSI+PCEtLSAtLT48L0E+PEgzPgorICAgIFN0cmluZzwvSDM+Cis8UFJFPgorcHVibGljIDxCPlN0cmluZzwvQj4oYnl0ZVtdJm5ic3A7Ynl0ZXMsCisgICAgICAgICAgICAgIGludCZuYnNwO29mZnNldCwKKyAgICAgICAgICAgICAgaW50Jm5ic3A7bGVuZ3RoLAorICAgICAgICAgICAgICA8QSBIUkVGPSIuLi8uLi9qYXZhL25pby9jaGFyc2V0L0NoYXJzZXQuaHRtbCIgdGl0bGU9ImNsYXNzIGluIGphdmEubmlvLmNoYXJzZXQiPkNoYXJzZXQ8L0E+Jm5ic3A7Y2hhcnNldCk8L1BSRT4KKzxETD4KKyAgICA8REQ+Q29uc3RydWN0cyBhIG5ldyA8Y29kZT5TdHJpbmc8L2NvZGU+IGJ5IGRlY29kaW5nIHRoZSBzcGVjaWZpZWQgc3ViYXJyYXkgb2YKKyAgICAgICAgYnl0ZXMgdXNpbmcgdGhlIHNwZWNpZmllZCA8QSBIUkVGPSIuLi8uLi9qYXZhL25pby9jaGFyc2V0L0NoYXJzZXQuaHRtbCIgdGl0bGU9ImNsYXNzIGluIGphdmEubmlvLmNoYXJzZXQiPmNoYXJzZXQ8L0E+LgorICAgICAgICBUaGUgbGVuZ3RoIG9mIHRoZSBuZXcgPGNvZGU+U3RyaW5nPC9jb2RlPiBpcyBhIGZ1bmN0aW9uIG9mIHRoZSBjaGFyc2V0LCBhbmQKKyAgICAgICAgaGVuY2UgbWF5IG5vdCBiZSBlcXVhbCB0byB0aGUgbGVuZ3RoIG9mIHRoZSBzdWJhcnJheS4KKworICAgICAgICA8cD4gVGhpcyBtZXRob2QgYWx3YXlzIHJlcGxhY2VzIG1hbGZvcm1lZC1pbnB1dCBhbmQgdW5tYXBwYWJsZS1jaGFyYWN0ZXIKKyAgICAgICAgICAgIHNlcXVlbmNlcyB3aXRoIHRoaXMgY2hhcnNldCdzIGRlZmF1bHQgcmVwbGFjZW1lbnQgc3RyaW5nLiAgVGhlIDxBIEhSRUY9Ii4uLy4uL2phdmEvbmlvL2NoYXJzZXQvQ2hhcnNldERlY29kZXIuaHRtbCIgdGl0bGU9ImNsYXNzIGluIGphdmEubmlvLmNoYXJzZXQiPjxDT0RFPkNoYXJzZXREZWNvZGVyPC9DT0RFPjwvQT4gY2xhc3Mgc2hvdWxkIGJlIHVzZWQgd2hlbiBtb3JlIGNvbnRyb2wKKyAgICAgICAgICAgIG92ZXIgdGhlIGRlY29kaW5nIHByb2Nlc3MgaXMgcmVxdWlyZWQuCisgICAgICAgIDxQPgorICAgICAgICA8REw+CisgICAgICAgICAgICA8RFQ+PEI+UGFyYW1ldGVyczo8L0I+PEREPjxDT0RFPmJ5dGVzPC9DT0RFPiAtIFRoZSBieXRlcyB0byBiZSBkZWNvZGVkIGludG8gY2hhcmFjdGVyczxERD48Q09ERT5vZmZzZXQ8L0NPREU+IC0gVGhlIGluZGV4IG9mIHRoZSBmaXJzdCBieXRlIHRvIGRlY29kZTxERD48Q09ERT5sZW5ndGg8L0NPREU+IC0gVGhlIG51bWJlciBvZiBieXRlcyB0byBkZWNvZGU8REQ+PENPREU+Y2hhcnNldDwvQ09ERT4gLSBUaGUgPEEgSFJFRj0iLi4vLi4vamF2YS9uaW8vY2hhcnNldC9DaGFyc2V0Lmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBqYXZhLm5pby5jaGFyc2V0Ij5jaGFyc2V0PC9BPiB0byBiZSB1c2VkIHRvCisgICAgICAgICAgICBkZWNvZGUgdGhlIDxjb2RlPmJ5dGVzPC9jb2RlPgorICAgICAgICAgICAgPERUPjxCPlRocm93czo8L0I+CisgICAgICAgICAgICA8REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vamF2YS9sYW5nL0luZGV4T3V0T2ZCb3VuZHNFeGNlcHRpb24uaHRtbCIgdGl0bGU9ImNsYXNzIGluIGphdmEubGFuZyI+SW5kZXhPdXRPZkJvdW5kc0V4Y2VwdGlvbjwvQT48L0NPREU+IC0gSWYgdGhlIDxjb2RlPm9mZnNldDwvY29kZT4gYW5kIDxjb2RlPmxlbmd0aDwvY29kZT4gYXJndW1lbnRzIGluZGV4CisgICAgICAgICAgICAgICAgY2hhcmFjdGVycyBvdXRzaWRlIHRoZSBib3VuZHMgb2YgdGhlIDxjb2RlPmJ5dGVzPC9jb2RlPiBhcnJheTxEVD48Qj5TaW5jZTo8L0I+PC9EVD4KKyAgICAgICAgICAgIDxERD4xLjY8L0REPgorICAgICAgICA8L0RMPgorPC9ETD4KKzxIUj4KKworPEEgTkFNRT0iU3RyaW5nKGJ5dGVbXSwgamF2YS5sYW5nLlN0cmluZykiPjwhLS0gLS0+PC9BPjxIMz4KKyAgICBTdHJpbmc8L0gzPgorPFBSRT4KK3B1YmxpYyA8Qj5TdHJpbmc8L0I+KGJ5dGVbXSZuYnNwO2J5dGVzLAorICAgICAgICAgICAgICA8QSBIUkVGPSIuLi8uLi9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBqYXZhLmxhbmciPlN0cmluZzwvQT4mbmJzcDtjaGFyc2V0TmFtZSkKKyAgICAgICB0aHJvd3MgPEEgSFJFRj0iLi4vLi4vamF2YS9pby9VbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBqYXZhLmlvIj5VbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uPC9BPjwvUFJFPgorPERMPgorICAgIDxERD5Db25zdHJ1Y3RzIGEgbmV3IDxjb2RlPlN0cmluZzwvY29kZT4gYnkgZGVjb2RpbmcgdGhlIHNwZWNpZmllZCBhcnJheSBvZiBieXRlcworICAgICAgICB1c2luZyB0aGUgc3BlY2lmaWVkIDxBIEhSRUY9Ii4uLy4uL2phdmEvbmlvL2NoYXJzZXQvQ2hhcnNldC5odG1sIiB0aXRsZT0iY2xhc3MgaW4gamF2YS5uaW8uY2hhcnNldCI+Y2hhcnNldDwvQT4uICBUaGUKKyAgICAgICAgbGVuZ3RoIG9mIHRoZSBuZXcgPGNvZGU+U3RyaW5nPC9jb2RlPiBpcyBhIGZ1bmN0aW9uIG9mIHRoZSBjaGFyc2V0LCBhbmQgaGVuY2UKKyAgICAgICAgbWF5IG5vdCBiZSBlcXVhbCB0byB0aGUgbGVuZ3RoIG9mIHRoZSBieXRlIGFycmF5LgorCisgICAgICAgIDxwPiBUaGUgYmVoYXZpb3Igb2YgdGhpcyBjb25zdHJ1Y3RvciB3aGVuIHRoZSBnaXZlbiBieXRlcyBhcmUgbm90IHZhbGlkCisgICAgICAgICAgICBpbiB0aGUgZ2l2ZW4gY2hhcnNldCBpcyB1bnNwZWNpZmllZC4gIFRoZSA8QSBIUkVGPSIuLi8uLi9qYXZhL25pby9jaGFyc2V0L0NoYXJzZXREZWNvZGVyLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBqYXZhLm5pby5jaGFyc2V0Ij48Q09ERT5DaGFyc2V0RGVjb2RlcjwvQ09ERT48L0E+IGNsYXNzIHNob3VsZCBiZSB1c2VkIHdoZW4gbW9yZSBjb250cm9sCisgICAgICAgICAgICBvdmVyIHRoZSBkZWNvZGluZyBwcm9jZXNzIGlzIHJlcXVpcmVkLgorICAgICAgICA8UD4KKyAgICAgICAgPERMPgorICAgICAgICAgICAgPERUPjxCPlBhcmFtZXRlcnM6PC9CPjxERD48Q09ERT5ieXRlczwvQ09ERT4gLSBUaGUgYnl0ZXMgdG8gYmUgZGVjb2RlZCBpbnRvIGNoYXJhY3RlcnM8REQ+PENPREU+Y2hhcnNldE5hbWU8L0NPREU+IC0gVGhlIG5hbWUgb2YgYSBzdXBwb3J0ZWQgPEEgSFJFRj0iLi4vLi4vamF2YS9uaW8vY2hhcnNldC9DaGFyc2V0Lmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBqYXZhLm5pby5jaGFyc2V0Ij5jaGFyc2V0PC9BPgorICAgICAgICAgICAgPERUPjxCPlRocm93czo8L0I+CisgICAgICAgICAgICA8REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vamF2YS9pby9VbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBqYXZhLmlvIj5VbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uPC9BPjwvQ09ERT4gLSBJZiB0aGUgbmFtZWQgY2hhcnNldCBpcyBub3Qgc3VwcG9ydGVkPERUPjxCPlNpbmNlOjwvQj48L0RUPgorICAgICAgICAgICAgPEREPkpESzEuMTwvREQ+CisgICAgICAgIDwvREw+Cis8L0RMPgorPEhSPgorCis8QSBOQU1FPSJTdHJpbmcoYnl0ZVtdLCBqYXZhLm5pby5jaGFyc2V0LkNoYXJzZXQpIj48IS0tIC0tPjwvQT48SDM+CisgICAgU3RyaW5nPC9IMz4KKzxQUkU+CitwdWJsaWMgPEI+U3RyaW5nPC9CPihieXRlW10mbmJzcDtieXRlcywKKyAgICAgICAgICAgICAgPEEgSFJFRj0iLi4vLi4vamF2YS9uaW8vY2hhcnNldC9DaGFyc2V0Lmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBqYXZhLm5pby5jaGFyc2V0Ij5DaGFyc2V0PC9BPiZuYnNwO2NoYXJzZXQpPC9QUkU+Cis8REw+CisgICAgPEREPkNvbnN0cnVjdHMgYSBuZXcgPGNvZGU+U3RyaW5nPC9jb2RlPiBieSBkZWNvZGluZyB0aGUgc3BlY2lmaWVkIGFycmF5IG9mCisgICAgICAgIGJ5dGVzIHVzaW5nIHRoZSBzcGVjaWZpZWQgPEEgSFJFRj0iLi4vLi4vamF2YS9uaW8vY2hhcnNldC9DaGFyc2V0Lmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBqYXZhLm5pby5jaGFyc2V0Ij5jaGFyc2V0PC9BPi4KKyAgICAgICAgVGhlIGxlbmd0aCBvZiB0aGUgbmV3IDxjb2RlPlN0cmluZzwvY29kZT4gaXMgYSBmdW5jdGlvbiBvZiB0aGUgY2hhcnNldCwgYW5kCisgICAgICAgIGhlbmNlIG1heSBub3QgYmUgZXF1YWwgdG8gdGhlIGxlbmd0aCBvZiB0aGUgYnl0ZSBhcnJheS4KKworICAgICAgICA8cD4gVGhpcyBtZXRob2QgYWx3YXlzIHJlcGxhY2VzIG1hbGZvcm1lZC1pbnB1dCBhbmQgdW5tYXBwYWJsZS1jaGFyYWN0ZXIKKyAgICAgICAgICAgIHNlcXVlbmNlcyB3aXRoIHRoaXMgY2hhcnNldCdzIGRlZmF1bHQgcmVwbGFjZW1lbnQgc3RyaW5nLiAgVGhlIDxBIEhSRUY9Ii4uLy4uL2phdmEvbmlvL2NoYXJzZXQvQ2hhcnNldERlY29kZXIuaHRtbCIgdGl0bGU9ImNsYXNzIGluIGphdmEubmlvLmNoYXJzZXQiPjxDT0RFPkNoYXJzZXREZWNvZGVyPC9DT0RFPjwvQT4gY2xhc3Mgc2hvdWxkIGJlIHVzZWQgd2hlbiBtb3JlIGNvbnRyb2wKKyAgICAgICAgICAgIG92ZXIgdGhlIGRlY29kaW5nIHByb2Nlc3MgaXMgcmVxdWlyZWQuCisgICAgICAgIDxQPgorICAgICAgICA8REw+CisgICAgICAgICAgICA8RFQ+PEI+UGFyYW1ldGVyczo8L0I+PEREPjxDT0RFPmJ5dGVzPC9DT0RFPiAtIFRoZSBieXRlcyB0byBiZSBkZWNvZGVkIGludG8gY2hhcmFjdGVyczxERD48Q09ERT5jaGFyc2V0PC9DT0RFPiAtIFRoZSA8QSBIUkVGPSIuLi8uLi9qYXZhL25pby9jaGFyc2V0L0NoYXJzZXQuaHRtbCIgdGl0bGU9ImNsYXNzIGluIGphdmEubmlvLmNoYXJzZXQiPmNoYXJzZXQ8L0E+IHRvIGJlIHVzZWQgdG8KKyAgICAgICAgICAgIGRlY29kZSB0aGUgPGNvZGU+Ynl0ZXM8L2NvZGU+PERUPjxCPlNpbmNlOjwvQj48L0RUPgorICAgICAgICAgICAgPEREPjEuNjwvREQ+CisgICAgICAgIDwvREw+Cis8L0RMPgorPEhSPgorCis8QSBOQU1FPSJTdHJpbmcoYnl0ZVtdLCBpbnQsIGludCkiPjwhLS0gLS0+PC9BPjxIMz4KKyAgICBTdHJpbmc8L0gzPgorPFBSRT4KK3B1YmxpYyA8Qj5TdHJpbmc8L0I+KGJ5dGVbXSZuYnNwO2J5dGVzLAorICAgICAgICAgICAgICBpbnQmbmJzcDtvZmZzZXQsCisgICAgICAgICAgICAgIGludCZuYnNwO2xlbmd0aCk8L1BSRT4KKzxETD4KKyAgICA8REQ+Q29uc3RydWN0cyBhIG5ldyA8Y29kZT5TdHJpbmc8L2NvZGU+IGJ5IGRlY29kaW5nIHRoZSBzcGVjaWZpZWQgc3ViYXJyYXkgb2YKKyAgICAgICAgYnl0ZXMgdXNpbmcgdGhlIHBsYXRmb3JtJ3MgZGVmYXVsdCBjaGFyc2V0LiAgVGhlIGxlbmd0aCBvZiB0aGUgbmV3CisgICAgICAgIDxjb2RlPlN0cmluZzwvY29kZT4gaXMgYSBmdW5jdGlvbiBvZiB0aGUgY2hhcnNldCwgYW5kIGhlbmNlIG1heSBub3QgYmUgZXF1YWwKKyAgICAgICAgdG8gdGhlIGxlbmd0aCBvZiB0aGUgc3ViYXJyYXkuCisKKyAgICAgICAgPHA+IFRoZSBiZWhhdmlvciBvZiB0aGlzIGNvbnN0cnVjdG9yIHdoZW4gdGhlIGdpdmVuIGJ5dGVzIGFyZSBub3QgdmFsaWQKKyAgICAgICAgICAgIGluIHRoZSBkZWZhdWx0IGNoYXJzZXQgaXMgdW5zcGVjaWZpZWQuICBUaGUgPEEgSFJFRj0iLi4vLi4vamF2YS9uaW8vY2hhcnNldC9DaGFyc2V0RGVjb2Rlci5odG1sIiB0aXRsZT0iY2xhc3MgaW4gamF2YS5uaW8uY2hhcnNldCI+PENPREU+Q2hhcnNldERlY29kZXI8L0NPREU+PC9BPiBjbGFzcyBzaG91bGQgYmUgdXNlZCB3aGVuIG1vcmUgY29udHJvbAorICAgICAgICAgICAgb3ZlciB0aGUgZGVjb2RpbmcgcHJvY2VzcyBpcyByZXF1aXJlZC4KKyAgICAgICAgPFA+CisgICAgICAgIDxETD4KKyAgICAgICAgICAgIDxEVD48Qj5QYXJhbWV0ZXJzOjwvQj48REQ+PENPREU+Ynl0ZXM8L0NPREU+IC0gVGhlIGJ5dGVzIHRvIGJlIGRlY29kZWQgaW50byBjaGFyYWN0ZXJzPEREPjxDT0RFPm9mZnNldDwvQ09ERT4gLSBUaGUgaW5kZXggb2YgdGhlIGZpcnN0IGJ5dGUgdG8gZGVjb2RlPEREPjxDT0RFPmxlbmd0aDwvQ09ERT4gLSBUaGUgbnVtYmVyIG9mIGJ5dGVzIHRvIGRlY29kZQorICAgICAgICAgICAgPERUPjxCPlRocm93czo8L0I+CisgICAgICAgICAgICA8REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vamF2YS9sYW5nL0luZGV4T3V0T2ZCb3VuZHNFeGNlcHRpb24uaHRtbCIgdGl0bGU9ImNsYXNzIGluIGphdmEubGFuZyI+SW5kZXhPdXRPZkJvdW5kc0V4Y2VwdGlvbjwvQT48L0NPREU+IC0gSWYgdGhlIDxjb2RlPm9mZnNldDwvY29kZT4gYW5kIHRoZSA8Y29kZT5sZW5ndGg8L2NvZGU+IGFyZ3VtZW50cyBpbmRleAorICAgICAgICAgICAgICAgIGNoYXJhY3RlcnMgb3V0c2lkZSB0aGUgYm91bmRzIG9mIHRoZSA8Y29kZT5ieXRlczwvY29kZT4gYXJyYXk8RFQ+PEI+U2luY2U6PC9CPjwvRFQ+CisgICAgICAgICAgICA8REQ+SkRLMS4xPC9ERD4KKyAgICAgICAgPC9ETD4KKzwvREw+Cis8SFI+CisKKzxBIE5BTUU9IlN0cmluZyhieXRlW10pIj48IS0tIC0tPjwvQT48SDM+CisgICAgU3RyaW5nPC9IMz4KKzxQUkU+CitwdWJsaWMgPEI+U3RyaW5nPC9CPihieXRlW10mbmJzcDtieXRlcyk8L1BSRT4KKzxETD4KKyAgICA8REQ+Q29uc3RydWN0cyBhIG5ldyA8Y29kZT5TdHJpbmc8L2NvZGU+IGJ5IGRlY29kaW5nIHRoZSBzcGVjaWZpZWQgYXJyYXkgb2YgYnl0ZXMKKyAgICAgICAgdXNpbmcgdGhlIHBsYXRmb3JtJ3MgZGVmYXVsdCBjaGFyc2V0LiAgVGhlIGxlbmd0aCBvZiB0aGUgbmV3IDxjb2RlPlN0cmluZzwvY29kZT4gaXMgYSBmdW5jdGlvbiBvZiB0aGUgY2hhcnNldCwgYW5kIGhlbmNlIG1heSBub3QgYmUgZXF1YWwgdG8gdGhlCisgICAgICAgIGxlbmd0aCBvZiB0aGUgYnl0ZSBhcnJheS4KKworICAgICAgICA8cD4gVGhlIGJlaGF2aW9yIG9mIHRoaXMgY29uc3RydWN0b3Igd2hlbiB0aGUgZ2l2ZW4gYnl0ZXMgYXJlIG5vdCB2YWxpZAorICAgICAgICAgICAgaW4gdGhlIGRlZmF1bHQgY2hhcnNldCBpcyB1bnNwZWNpZmllZC4gIFRoZSA8QSBIUkVGPSIuLi8uLi9qYXZhL25pby9jaGFyc2V0L0NoYXJzZXREZWNvZGVyLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBqYXZhLm5pby5jaGFyc2V0Ij48Q09ERT5DaGFyc2V0RGVjb2RlcjwvQ09ERT48L0E+IGNsYXNzIHNob3VsZCBiZSB1c2VkIHdoZW4gbW9yZSBjb250cm9sCisgICAgICAgICAgICBvdmVyIHRoZSBkZWNvZGluZyBwcm9jZXNzIGlzIHJlcXVpcmVkLgorICAgICAgICA8UD4KKyAgICAgICAgPERMPgorICAgICAgICAgICAgPERUPjxCPlBhcmFtZXRlcnM6PC9CPjxERD48Q09ERT5ieXRlczwvQ09ERT4gLSBUaGUgYnl0ZXMgdG8gYmUgZGVjb2RlZCBpbnRvIGNoYXJhY3RlcnM8RFQ+PEI+U2luY2U6PC9CPjwvRFQ+CisgICAgICAgICAgICA8REQ+SkRLMS4xPC9ERD4KKyAgICAgICAgPC9ETD4KKzwvREw+Cis8SFI+CisKKzxBIE5BTUU9IlN0cmluZyhqYXZhLmxhbmcuU3RyaW5nQnVmZmVyKSI+PCEtLSAtLT48L0E+PEgzPgorICAgIFN0cmluZzwvSDM+Cis8UFJFPgorcHVibGljIDxCPlN0cmluZzwvQj4oPEEgSFJFRj0iLi4vLi4vamF2YS9sYW5nL1N0cmluZ0J1ZmZlci5odG1sIiB0aXRsZT0iY2xhc3MgaW4gamF2YS5sYW5nIj5TdHJpbmdCdWZmZXI8L0E+Jm5ic3A7YnVmZmVyKTwvUFJFPgorPERMPgorICAgIDxERD5BbGxvY2F0ZXMgYSBuZXcgc3RyaW5nIHRoYXQgY29udGFpbnMgdGhlIHNlcXVlbmNlIG9mIGNoYXJhY3RlcnMKKyAgICAgICAgY3VycmVudGx5IGNvbnRhaW5lZCBpbiB0aGUgc3RyaW5nIGJ1ZmZlciBhcmd1bWVudC4gVGhlIGNvbnRlbnRzIG9mIHRoZQorICAgICAgICBzdHJpbmcgYnVmZmVyIGFyZSBjb3BpZWQ7IHN1YnNlcXVlbnQgbW9kaWZpY2F0aW9uIG9mIHRoZSBzdHJpbmcgYnVmZmVyCisgICAgICAgIGRvZXMgbm90IGFmZmVjdCB0aGUgbmV3bHkgY3JlYXRlZCBzdHJpbmcuCisgICAgICAgIDxQPgorICAgICAgICA8REw+CisgICAgICAgICAgICA8RFQ+PEI+UGFyYW1ldGVyczo8L0I+PEREPjxDT0RFPmJ1ZmZlcjwvQ09ERT4gLSBBIDxjb2RlPlN0cmluZ0J1ZmZlcjwvY29kZT48L0RMPgorPC9ETD4KKzxIUj4KKworPEEgTkFNRT0iU3RyaW5nKGphdmEubGFuZy5TdHJpbmdCdWlsZGVyKSI+PCEtLSAtLT48L0E+PEgzPgorICAgIFN0cmluZzwvSDM+Cis8UFJFPgorcHVibGljIDxCPlN0cmluZzwvQj4oPEEgSFJFRj0iLi4vLi4vamF2YS9sYW5nL1N0cmluZ0J1aWxkZXIuaHRtbCIgdGl0bGU9ImNsYXNzIGluIGphdmEubGFuZyI+U3RyaW5nQnVpbGRlcjwvQT4mbmJzcDtidWlsZGVyKTwvUFJFPgorPERMPgorICAgIDxERD5BbGxvY2F0ZXMgYSBuZXcgc3RyaW5nIHRoYXQgY29udGFpbnMgdGhlIHNlcXVlbmNlIG9mIGNoYXJhY3RlcnMKKyAgICAgICAgY3VycmVudGx5IGNvbnRhaW5lZCBpbiB0aGUgc3RyaW5nIGJ1aWxkZXIgYXJndW1lbnQuIFRoZSBjb250ZW50cyBvZiB0aGUKKyAgICAgICAgc3RyaW5nIGJ1aWxkZXIgYXJlIGNvcGllZDsgc3Vic2VxdWVudCBtb2RpZmljYXRpb24gb2YgdGhlIHN0cmluZyBidWlsZGVyCisgICAgICAgIGRvZXMgbm90IGFmZmVjdCB0aGUgbmV3bHkgY3JlYXRlZCBzdHJpbmcuCisKKyAgICAgICAgPHA+IFRoaXMgY29uc3RydWN0b3IgaXMgcHJvdmlkZWQgdG8gZWFzZSBtaWdyYXRpb24gdG8gPGNvZGU+U3RyaW5nQnVpbGRlcjwvY29kZT4uIE9idGFpbmluZyBhIHN0cmluZyBmcm9tIGEgc3RyaW5nIGJ1aWxkZXIgdmlhIHRoZSA8Y29kZT50b1N0cmluZzwvY29kZT4gbWV0aG9kIGlzIGxpa2VseSB0byBydW4gZmFzdGVyIGFuZCBpcyBnZW5lcmFsbHkgcHJlZmVycmVkLgorICAgICAgICA8UD4KKyAgICAgICAgPERMPgorICAgICAgICAgICAgPERUPjxCPlBhcmFtZXRlcnM6PC9CPjxERD48Q09ERT5idWlsZGVyPC9DT0RFPiAtIEEgPGNvZGU+U3RyaW5nQnVpbGRlcjwvY29kZT48RFQ+PEI+U2luY2U6PC9CPjwvRFQ+CisgICAgICAgICAgICA8REQ+MS41PC9ERD4KKyAgICAgICAgPC9ETD4KKzwvREw+CisKKzwhLS0gPT09PT09PT09PT09IE1FVEhPRCBERVRBSUwgPT09PT09PT09PSAtLT4KKworPEEgTkFNRT0ibWV0aG9kX2RldGFpbCI+PCEtLSAtLT48L0E+Cis8VEFCTEUgQk9SREVSPSIxIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgorICAgIDxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgorICAgICAgICA8VEggQUxJR049ImxlZnQiIENPTFNQQU49IjEiPjxGT05UIFNJWkU9IisyIj4KKyAgICAgICAgICAgIDxCPk1ldGhvZCBEZXRhaWw8L0I+PC9GT05UPjwvVEg+CisgICAgPC9UUj4KKzwvVEFCTEU+CisKKzxBIE5BTUU9Imxlbmd0aCgpIj48IS0tIC0tPjwvQT48SDM+CisgICAgbGVuZ3RoPC9IMz4KKzxQUkU+CitwdWJsaWMgaW50IDxCPmxlbmd0aDwvQj4oKTwvUFJFPgorPERMPgorICAgIDxERD5SZXR1cm5zIHRoZSBsZW5ndGggb2YgdGhpcyBzdHJpbmcuCisgICAgICAgIFRoZSBsZW5ndGggaXMgZXF1YWwgdG8gdGhlIG51bWJlciBvZiA8YSBocmVmPSJDaGFyYWN0ZXIuaHRtbCN1bmljb2RlIj5Vbmljb2RlCisgICAgICAgICAgICBjb2RlIHVuaXRzPC9hPiBpbiB0aGUgc3RyaW5nLgorICAgICAgICA8UD4KKyAgICA8REQ+PERMPgorICAgICAgICA8RFQ+PEI+U3BlY2lmaWVkIGJ5OjwvQj48REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vamF2YS9sYW5nL0NoYXJTZXF1ZW5jZS5odG1sI2xlbmd0aCgpIj5sZW5ndGg8L0E+PC9DT0RFPiBpbiBpbnRlcmZhY2UgPENPREU+PEEgSFJFRj0iLi4vLi4vamF2YS9sYW5nL0NoYXJTZXF1ZW5jZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIGphdmEubGFuZyI+Q2hhclNlcXVlbmNlPC9BPjwvQ09ERT48L0RMPgorICAgIDwvREQ+CisgICAgPEREPjxETD4KKworICAgICAgICA8RFQ+PEI+UmV0dXJuczo8L0I+PEREPnRoZSBsZW5ndGggb2YgdGhlIHNlcXVlbmNlIG9mIGNoYXJhY3RlcnMgcmVwcmVzZW50ZWQgYnkgdGhpcworICAgICAgICBvYmplY3QuPC9ETD4KKyAgICA8L0REPgorPC9ETD4KKzxIUj4KKworPEEgTkFNRT0iaXNFbXB0eSgpIj48IS0tIC0tPjwvQT48SDM+CisgICAgaXNFbXB0eTwvSDM+Cis8UFJFPgorcHVibGljIGJvb2xlYW4gPEI+aXNFbXB0eTwvQj4oKTwvUFJFPgorPERMPgorICAgIDxERD5SZXR1cm5zIDx0dD50cnVlPC90dD4gaWYsIGFuZCBvbmx5IGlmLCA8QSBIUkVGPSIuLi8uLi9qYXZhL2xhbmcvU3RyaW5nLmh0bWwjbGVuZ3RoKCkiPjxDT0RFPmxlbmd0aCgpPC9DT0RFPjwvQT4gaXMgPHR0PjA8L3R0Pi4KKyAgICAgICAgPFA+CisgICAgPEREPjxETD4KKyAgICA8L0RMPgorICAgIDwvREQ+CisgICAgPEREPjxETD4KKworICAgICAgICA8RFQ+PEI+UmV0dXJuczo8L0I+PEREPjx0dD50cnVlPC90dD4gaWYgPEEgSFJFRj0iLi4vLi4vamF2YS9sYW5nL1N0cmluZy5odG1sI2xlbmd0aCgpIj48Q09ERT5sZW5ndGgoKTwvQ09ERT48L0E+IGlzIDx0dD4wPC90dD4sIG90aGVyd2lzZQorICAgICAgICA8dHQ+ZmFsc2U8L3R0PjxEVD48Qj5TaW5jZTo8L0I+PC9EVD4KKyAgICAgICAgPEREPjEuNjwvREQ+CisgICAgPC9ETD4KKyAgICA8L0REPgorPC9ETD4KKzxIUj4KKworPEEgTkFNRT0iY2hhckF0KGludCkiPjwhLS0gLS0+PC9BPjxIMz4KKyAgICBjaGFyQXQ8L0gzPgorPFBSRT4KK3B1YmxpYyBjaGFyIDxCPmNoYXJBdDwvQj4oaW50Jm5ic3A7aW5kZXgpPC9QUkU+Cis8REw+CisgICAgPEREPlJldHVybnMgdGhlIDxjb2RlPmNoYXI8L2NvZGU+IHZhbHVlIGF0IHRoZQorICAgICAgICBzcGVjaWZpZWQgaW5kZXguIEFuIGluZGV4IHJhbmdlcyBmcm9tIDxjb2RlPjA8L2NvZGU+IHRvCisgICAgICAgIDxjb2RlPmxlbmd0aCgpIC0gMTwvY29kZT4uIFRoZSBmaXJzdCA8Y29kZT5jaGFyPC9jb2RlPiB2YWx1ZSBvZiB0aGUgc2VxdWVuY2UKKyAgICAgICAgaXMgYXQgaW5kZXggPGNvZGU+MDwvY29kZT4sIHRoZSBuZXh0IGF0IGluZGV4IDxjb2RlPjE8L2NvZGU+LAorICAgICAgICBhbmQgc28gb24sIGFzIGZvciBhcnJheSBpbmRleGluZy4KKworICAgICAgICA8cD5JZiB0aGUgPGNvZGU+Y2hhcjwvY29kZT4gdmFsdWUgc3BlY2lmaWVkIGJ5IHRoZSBpbmRleCBpcyBhCisgICAgICAgICAgICA8YSBocmVmPSJDaGFyYWN0ZXIuaHRtbCN1bmljb2RlIj5zdXJyb2dhdGU8L2E+LCB0aGUgc3Vycm9nYXRlCisgICAgICAgICAgICB2YWx1ZSBpcyByZXR1cm5lZC4KKyAgICAgICAgPFA+CisgICAgPEREPjxETD4KKyAgICAgICAgPERUPjxCPlNwZWNpZmllZCBieTo8L0I+PEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uL2phdmEvbGFuZy9DaGFyU2VxdWVuY2UuaHRtbCNjaGFyQXQoaW50KSI+Y2hhckF0PC9BPjwvQ09ERT4gaW4gaW50ZXJmYWNlIDxDT0RFPjxBIEhSRUY9Ii4uLy4uL2phdmEvbGFuZy9DaGFyU2VxdWVuY2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBqYXZhLmxhbmciPkNoYXJTZXF1ZW5jZTwvQT48L0NPREU+PC9ETD4KKyAgICA8L0REPgorICAgIDxERD48REw+CisgICAgICAgIDxEVD48Qj5QYXJhbWV0ZXJzOjwvQj48REQ+PENPREU+aW5kZXg8L0NPREU+IC0gdGhlIGluZGV4IG9mIHRoZSA8Y29kZT5jaGFyPC9jb2RlPiB2YWx1ZS4KKyAgICAgICAgPERUPjxCPlJldHVybnM6PC9CPjxERD50aGUgPGNvZGU+Y2hhcjwvY29kZT4gdmFsdWUgYXQgdGhlIHNwZWNpZmllZCBpbmRleCBvZiB0aGlzIHN0cmluZy4KKyAgICAgICAgVGhlIGZpcnN0IDxjb2RlPmNoYXI8L2NvZGU+IHZhbHVlIGlzIGF0IGluZGV4IDxjb2RlPjA8L2NvZGU+LgorICAgICAgICA8RFQ+PEI+VGhyb3dzOjwvQj4KKyAgICAgICAgPEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uL2phdmEvbGFuZy9JbmRleE91dE9mQm91bmRzRXhjZXB0aW9uLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBqYXZhLmxhbmciPkluZGV4T3V0T2ZCb3VuZHNFeGNlcHRpb248L0E+PC9DT0RFPiAtIGlmIHRoZSA8Y29kZT5pbmRleDwvY29kZT4KKyAgICAgICAgICAgIGFyZ3VtZW50IGlzIG5lZ2F0aXZlIG9yIG5vdCBsZXNzIHRoYW4gdGhlIGxlbmd0aCBvZiB0aGlzCisgICAgICAgICAgICBzdHJpbmcuPC9ETD4KKyAgICA8L0REPgorPC9ETD4KKzxIUj4KKworPEEgTkFNRT0iY29kZVBvaW50QXQoaW50KSI+PCEtLSAtLT48L0E+PEgzPgorICAgIGNvZGVQb2ludEF0PC9IMz4KKzxQUkU+CitwdWJsaWMgaW50IDxCPmNvZGVQb2ludEF0PC9CPihpbnQmbmJzcDtpbmRleCk8L1BSRT4KKzxETD4KKyAgICA8REQ+UmV0dXJucyB0aGUgY2hhcmFjdGVyIChVbmljb2RlIGNvZGUgcG9pbnQpIGF0IHRoZSBzcGVjaWZpZWQKKyAgICAgICAgaW5kZXguIFRoZSBpbmRleCByZWZlcnMgdG8gPGNvZGU+Y2hhcjwvY29kZT4gdmFsdWVzCisgICAgICAgIChVbmljb2RlIGNvZGUgdW5pdHMpIGFuZCByYW5nZXMgZnJvbSA8Y29kZT4wPC9jb2RlPiB0bworICAgICAgICA8QSBIUkVGPSIuLi8uLi9qYXZhL2xhbmcvU3RyaW5nLmh0bWwjbGVuZ3RoKCkiPjxDT0RFPmxlbmd0aCgpPC9DT0RFPjwvQT48Y29kZT4gLSAxPC9jb2RlPi4KKworICAgICAgICA8cD4gSWYgdGhlIDxjb2RlPmNoYXI8L2NvZGU+IHZhbHVlIHNwZWNpZmllZCBhdCB0aGUgZ2l2ZW4gaW5kZXgKKyAgICAgICAgICAgIGlzIGluIHRoZSBoaWdoLXN1cnJvZ2F0ZSByYW5nZSwgdGhlIGZvbGxvd2luZyBpbmRleCBpcyBsZXNzCisgICAgICAgICAgICB0aGFuIHRoZSBsZW5ndGggb2YgdGhpcyA8Y29kZT5TdHJpbmc8L2NvZGU+LCBhbmQgdGhlCisgICAgICAgICAgICA8Y29kZT5jaGFyPC9jb2RlPiB2YWx1ZSBhdCB0aGUgZm9sbG93aW5nIGluZGV4IGlzIGluIHRoZQorICAgICAgICAgICAgbG93LXN1cnJvZ2F0ZSByYW5nZSwgdGhlbiB0aGUgc3VwcGxlbWVudGFyeSBjb2RlIHBvaW50CisgICAgICAgICAgICBjb3JyZXNwb25kaW5nIHRvIHRoaXMgc3Vycm9nYXRlIHBhaXIgaXMgcmV0dXJuZWQuIE90aGVyd2lzZSwKKyAgICAgICAgICAgIHRoZSA8Y29kZT5jaGFyPC9jb2RlPiB2YWx1ZSBhdCB0aGUgZ2l2ZW4gaW5kZXggaXMgcmV0dXJuZWQuCisgICAgICAgIDxQPgorICAgIDxERD48REw+CisgICAgPC9ETD4KKyAgICA8L0REPgorICAgIDxERD48REw+CisgICAgICAgIDxEVD48Qj5QYXJhbWV0ZXJzOjwvQj48REQ+PENPREU+aW5kZXg8L0NPREU+IC0gdGhlIGluZGV4IHRvIHRoZSA8Y29kZT5jaGFyPC9jb2RlPiB2YWx1ZXMKKyAgICAgICAgPERUPjxCPlJldHVybnM6PC9CPjxERD50aGUgY29kZSBwb2ludCB2YWx1ZSBvZiB0aGUgY2hhcmFjdGVyIGF0IHRoZQorICAgICAgICA8Y29kZT5pbmRleDwvY29kZT4KKyAgICAgICAgPERUPjxCPlRocm93czo8L0I+CisgICAgICAgIDxERD48Q09ERT48QSBIUkVGPSIuLi8uLi9qYXZhL2xhbmcvSW5kZXhPdXRPZkJvdW5kc0V4Y2VwdGlvbi5odG1sIiB0aXRsZT0iY2xhc3MgaW4gamF2YS5sYW5nIj5JbmRleE91dE9mQm91bmRzRXhjZXB0aW9uPC9BPjwvQ09ERT4gLSBpZiB0aGUgPGNvZGU+aW5kZXg8L2NvZGU+CisgICAgICAgICAgICBhcmd1bWVudCBpcyBuZWdhdGl2ZSBvciBub3QgbGVzcyB0aGFuIHRoZSBsZW5ndGggb2YgdGhpcworICAgICAgICAgICAgc3RyaW5nLjxEVD48Qj5TaW5jZTo8L0I+PC9EVD4KKyAgICAgICAgPEREPjEuNTwvREQ+CisgICAgPC9ETD4KKyAgICA8L0REPgorPC9ETD4KKzxIUj4KKworPEEgTkFNRT0iY29kZVBvaW50QmVmb3JlKGludCkiPjwhLS0gLS0+PC9BPjxIMz4KKyAgICBjb2RlUG9pbnRCZWZvcmU8L0gzPgorPFBSRT4KK3B1YmxpYyBpbnQgPEI+Y29kZVBvaW50QmVmb3JlPC9CPihpbnQmbmJzcDtpbmRleCk8L1BSRT4KKzxETD4KKyAgICA8REQ+UmV0dXJucyB0aGUgY2hhcmFjdGVyIChVbmljb2RlIGNvZGUgcG9pbnQpIGJlZm9yZSB0aGUgc3BlY2lmaWVkCisgICAgICAgIGluZGV4LiBUaGUgaW5kZXggcmVmZXJzIHRvIDxjb2RlPmNoYXI8L2NvZGU+IHZhbHVlcworICAgICAgICAoVW5pY29kZSBjb2RlIHVuaXRzKSBhbmQgcmFuZ2VzIGZyb20gPGNvZGU+MTwvY29kZT4gdG8gPEEgSFJFRj0iLi4vLi4vamF2YS9sYW5nL0NoYXJTZXF1ZW5jZS5odG1sI2xlbmd0aCgpIj48Q09ERT5sZW5ndGg8L0NPREU+PC9BPi4KKworICAgICAgICA8cD4gSWYgdGhlIDxjb2RlPmNoYXI8L2NvZGU+IHZhbHVlIGF0IDxjb2RlPihpbmRleCAtIDEpPC9jb2RlPgorICAgICAgICAgICAgaXMgaW4gdGhlIGxvdy1zdXJyb2dhdGUgcmFuZ2UsIDxjb2RlPihpbmRleCAtIDIpPC9jb2RlPiBpcyBub3QKKyAgICAgICAgICAgIG5lZ2F0aXZlLCBhbmQgdGhlIDxjb2RlPmNoYXI8L2NvZGU+IHZhbHVlIGF0IDxjb2RlPihpbmRleCAtCisgICAgICAgICAgICAgICAgMik8L2NvZGU+IGlzIGluIHRoZSBoaWdoLXN1cnJvZ2F0ZSByYW5nZSwgdGhlbiB0aGUKKyAgICAgICAgICAgIHN1cHBsZW1lbnRhcnkgY29kZSBwb2ludCB2YWx1ZSBvZiB0aGUgc3Vycm9nYXRlIHBhaXIgaXMKKyAgICAgICAgICAgIHJldHVybmVkLiBJZiB0aGUgPGNvZGU+Y2hhcjwvY29kZT4gdmFsdWUgYXQgPGNvZGU+aW5kZXggLQorICAgICAgICAgICAgICAgIDE8L2NvZGU+IGlzIGFuIHVucGFpcmVkIGxvdy1zdXJyb2dhdGUgb3IgYSBoaWdoLXN1cnJvZ2F0ZSwgdGhlCisgICAgICAgICAgICBzdXJyb2dhdGUgdmFsdWUgaXMgcmV0dXJuZWQuCisgICAgICAgIDxQPgorICAgIDxERD48REw+CisgICAgPC9ETD4KKyAgICA8L0REPgorICAgIDxERD48REw+CisgICAgICAgIDxEVD48Qj5QYXJhbWV0ZXJzOjwvQj48REQ+PENPREU+aW5kZXg8L0NPREU+IC0gdGhlIGluZGV4IGZvbGxvd2luZyB0aGUgY29kZSBwb2ludCB0aGF0IHNob3VsZCBiZSByZXR1cm5lZAorICAgICAgICA8RFQ+PEI+UmV0dXJuczo8L0I+PEREPnRoZSBVbmljb2RlIGNvZGUgcG9pbnQgdmFsdWUgYmVmb3JlIHRoZSBnaXZlbiBpbmRleC4KKyAgICAgICAgPERUPjxCPlRocm93czo8L0I+CisgICAgICAgIDxERD48Q09ERT48QSBIUkVGPSIuLi8uLi9qYXZhL2xhbmcvSW5kZXhPdXRPZkJvdW5kc0V4Y2VwdGlvbi5odG1sIiB0aXRsZT0iY2xhc3MgaW4gamF2YS5sYW5nIj5JbmRleE91dE9mQm91bmRzRXhjZXB0aW9uPC9BPjwvQ09ERT4gLSBpZiB0aGUgPGNvZGU+aW5kZXg8L2NvZGU+CisgICAgICAgICAgICBhcmd1bWVudCBpcyBsZXNzIHRoYW4gMSBvciBncmVhdGVyIHRoYW4gdGhlIGxlbmd0aAorICAgICAgICAgICAgb2YgdGhpcyBzdHJpbmcuPERUPjxCPlNpbmNlOjwvQj48L0RUPgorICAgICAgICA8REQ+MS41PC9ERD4KKyAgICA8L0RMPgorICAgIDwvREQ+Cis8L0RMPgorPEhSPgorCis8QSBOQU1FPSJjb2RlUG9pbnRDb3VudChpbnQsIGludCkiPjwhLS0gLS0+PC9BPjxIMz4KKyAgICBjb2RlUG9pbnRDb3VudDwvSDM+Cis8UFJFPgorcHVibGljIGludCA8Qj5jb2RlUG9pbnRDb3VudDwvQj4oaW50Jm5ic3A7YmVnaW5JbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgaW50Jm5ic3A7ZW5kSW5kZXgpPC9QUkU+Cis8REw+CisgICAgPEREPlJldHVybnMgdGhlIG51bWJlciBvZiBVbmljb2RlIGNvZGUgcG9pbnRzIGluIHRoZSBzcGVjaWZpZWQgdGV4dAorICAgICAgICByYW5nZSBvZiB0aGlzIDxjb2RlPlN0cmluZzwvY29kZT4uIFRoZSB0ZXh0IHJhbmdlIGJlZ2lucyBhdCB0aGUKKyAgICAgICAgc3BlY2lmaWVkIDxjb2RlPmJlZ2luSW5kZXg8L2NvZGU+IGFuZCBleHRlbmRzIHRvIHRoZQorICAgICAgICA8Y29kZT5jaGFyPC9jb2RlPiBhdCBpbmRleCA8Y29kZT5lbmRJbmRleCAtIDE8L2NvZGU+LiBUaHVzIHRoZQorICAgICAgICBsZW5ndGggKGluIDxjb2RlPmNoYXI8L2NvZGU+cykgb2YgdGhlIHRleHQgcmFuZ2UgaXMKKyAgICAgICAgPGNvZGU+ZW5kSW5kZXgtYmVnaW5JbmRleDwvY29kZT4uIFVucGFpcmVkIHN1cnJvZ2F0ZXMgd2l0aGluCisgICAgICAgIHRoZSB0ZXh0IHJhbmdlIGNvdW50IGFzIG9uZSBjb2RlIHBvaW50IGVhY2guCisgICAgICAgIDxQPgorICAgIDxERD48REw+CisgICAgPC9ETD4KKyAgICA8L0REPgorICAgIDxERD48REw+CisgICAgICAgIDxEVD48Qj5QYXJhbWV0ZXJzOjwvQj48REQ+PENPREU+YmVnaW5JbmRleDwvQ09ERT4gLSB0aGUgaW5kZXggdG8gdGhlIGZpcnN0IDxjb2RlPmNoYXI8L2NvZGU+IG9mCisgICAgICAgIHRoZSB0ZXh0IHJhbmdlLjxERD48Q09ERT5lbmRJbmRleDwvQ09ERT4gLSB0aGUgaW5kZXggYWZ0ZXIgdGhlIGxhc3QgPGNvZGU+Y2hhcjwvY29kZT4gb2YKKyAgICAgICAgdGhlIHRleHQgcmFuZ2UuCisgICAgICAgIDxEVD48Qj5SZXR1cm5zOjwvQj48REQ+dGhlIG51bWJlciBvZiBVbmljb2RlIGNvZGUgcG9pbnRzIGluIHRoZSBzcGVjaWZpZWQgdGV4dAorICAgICAgICByYW5nZQorICAgICAgICA8RFQ+PEI+VGhyb3dzOjwvQj4KKyAgICAgICAgPEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uL2phdmEvbGFuZy9JbmRleE91dE9mQm91bmRzRXhjZXB0aW9uLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBqYXZhLmxhbmciPkluZGV4T3V0T2ZCb3VuZHNFeGNlcHRpb248L0E+PC9DT0RFPiAtIGlmIHRoZQorICAgICAgICAgICAgPGNvZGU+YmVnaW5JbmRleDwvY29kZT4gaXMgbmVnYXRpdmUsIG9yIDxjb2RlPmVuZEluZGV4PC9jb2RlPgorICAgICAgICAgICAgaXMgbGFyZ2VyIHRoYW4gdGhlIGxlbmd0aCBvZiB0aGlzIDxjb2RlPlN0cmluZzwvY29kZT4sIG9yCisgICAgICAgICAgICA8Y29kZT5iZWdpbkluZGV4PC9jb2RlPiBpcyBsYXJnZXIgdGhhbiA8Y29kZT5lbmRJbmRleDwvY29kZT4uPERUPjxCPlNpbmNlOjwvQj48L0RUPgorICAgICAgICA8REQ+MS41PC9ERD4KKyAgICA8L0RMPgorICAgIDwvREQ+Cis8L0RMPgorPEhSPgorCis8QSBOQU1FPSJvZmZzZXRCeUNvZGVQb2ludHMoaW50LCBpbnQpIj48IS0tIC0tPjwvQT48SDM+CisgICAgb2Zmc2V0QnlDb2RlUG9pbnRzPC9IMz4KKzxQUkU+CitwdWJsaWMgaW50IDxCPm9mZnNldEJ5Q29kZVBvaW50czwvQj4oaW50Jm5ic3A7aW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQmbmJzcDtjb2RlUG9pbnRPZmZzZXQpPC9QUkU+Cis8REw+CisgICAgPEREPlJldHVybnMgdGhlIGluZGV4IHdpdGhpbiB0aGlzIDxjb2RlPlN0cmluZzwvY29kZT4gdGhhdCBpcworICAgICAgICBvZmZzZXQgZnJvbSB0aGUgZ2l2ZW4gPGNvZGU+aW5kZXg8L2NvZGU+IGJ5CisgICAgICAgIDxjb2RlPmNvZGVQb2ludE9mZnNldDwvY29kZT4gY29kZSBwb2ludHMuIFVucGFpcmVkIHN1cnJvZ2F0ZXMKKyAgICAgICAgd2l0aGluIHRoZSB0ZXh0IHJhbmdlIGdpdmVuIGJ5IDxjb2RlPmluZGV4PC9jb2RlPiBhbmQKKyAgICAgICAgPGNvZGU+Y29kZVBvaW50T2Zmc2V0PC9jb2RlPiBjb3VudCBhcyBvbmUgY29kZSBwb2ludCBlYWNoLgorICAgICAgICA8UD4KKyAgICA8REQ+PERMPgorICAgIDwvREw+CisgICAgPC9ERD4KKyAgICA8REQ+PERMPgorICAgICAgICA8RFQ+PEI+UGFyYW1ldGVyczo8L0I+PEREPjxDT0RFPmluZGV4PC9DT0RFPiAtIHRoZSBpbmRleCB0byBiZSBvZmZzZXQ8REQ+PENPREU+Y29kZVBvaW50T2Zmc2V0PC9DT0RFPiAtIHRoZSBvZmZzZXQgaW4gY29kZSBwb2ludHMKKyAgICAgICAgPERUPjxCPlJldHVybnM6PC9CPjxERD50aGUgaW5kZXggd2l0aGluIHRoaXMgPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAgICA8RFQ+PEI+VGhyb3dzOjwvQj4KKyAgICAgICAgPEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uL2phdmEvbGFuZy9JbmRleE91dE9mQm91bmRzRXhjZXB0aW9uLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBqYXZhLmxhbmciPkluZGV4T3V0T2ZCb3VuZHNFeGNlcHRpb248L0E+PC9DT0RFPiAtIGlmIDxjb2RlPmluZGV4PC9jb2RlPgorICAgICAgICAgICAgaXMgbmVnYXRpdmUgb3IgbGFyZ2VyIHRoZW4gdGhlIGxlbmd0aCBvZiB0aGlzCisgICAgICAgICAgICA8Y29kZT5TdHJpbmc8L2NvZGU+LCBvciBpZiA8Y29kZT5jb2RlUG9pbnRPZmZzZXQ8L2NvZGU+IGlzIHBvc2l0aXZlCisgICAgICAgICAgICBhbmQgdGhlIHN1YnN0cmluZyBzdGFydGluZyB3aXRoIDxjb2RlPmluZGV4PC9jb2RlPiBoYXMgZmV3ZXIKKyAgICAgICAgICAgIHRoYW4gPGNvZGU+Y29kZVBvaW50T2Zmc2V0PC9jb2RlPiBjb2RlIHBvaW50cywKKyAgICAgICAgICAgIG9yIGlmIDxjb2RlPmNvZGVQb2ludE9mZnNldDwvY29kZT4gaXMgbmVnYXRpdmUgYW5kIHRoZSBzdWJzdHJpbmcKKyAgICAgICAgICAgIGJlZm9yZSA8Y29kZT5pbmRleDwvY29kZT4gaGFzIGZld2VyIHRoYW4gdGhlIGFic29sdXRlIHZhbHVlCisgICAgICAgICAgICBvZiA8Y29kZT5jb2RlUG9pbnRPZmZzZXQ8L2NvZGU+IGNvZGUgcG9pbnRzLjxEVD48Qj5TaW5jZTo8L0I+PC9EVD4KKyAgICAgICAgPEREPjEuNTwvREQ+CisgICAgPC9ETD4KKyAgICA8L0REPgorPC9ETD4KKzxIUj4KKworPEEgTkFNRT0iZ2V0Q2hhcnMoaW50LCBpbnQsIGNoYXJbXSwgaW50KSI+PCEtLSAtLT48L0E+PEgzPgorICAgIGdldENoYXJzPC9IMz4KKzxQUkU+CitwdWJsaWMgdm9pZCA8Qj5nZXRDaGFyczwvQj4oaW50Jm5ic3A7c3JjQmVnaW4sCisgICAgICAgICAgICAgICAgICAgICBpbnQmbmJzcDtzcmNFbmQsCisgICAgICAgICAgICAgICAgICAgICBjaGFyW10mbmJzcDtkc3QsCisgICAgICAgICAgICAgICAgICAgICBpbnQmbmJzcDtkc3RCZWdpbik8L1BSRT4KKzxETD4KKyAgICA8REQ+Q29waWVzIGNoYXJhY3RlcnMgZnJvbSB0aGlzIHN0cmluZyBpbnRvIHRoZSBkZXN0aW5hdGlvbiBjaGFyYWN0ZXIKKyAgICAgICAgYXJyYXkuCisgICAgICAgIDxwPgorICAgICAgICAgICAgVGhlIGZpcnN0IGNoYXJhY3RlciB0byBiZSBjb3BpZWQgaXMgYXQgaW5kZXggPGNvZGU+c3JjQmVnaW48L2NvZGU+OworICAgICAgICAgICAgdGhlIGxhc3QgY2hhcmFjdGVyIHRvIGJlIGNvcGllZCBpcyBhdCBpbmRleCA8Y29kZT5zcmNFbmQtMTwvY29kZT4KKyAgICAgICAgICAgICh0aHVzIHRoZSB0b3RhbCBudW1iZXIgb2YgY2hhcmFjdGVycyB0byBiZSBjb3BpZWQgaXMKKyAgICAgICAgICAgIDxjb2RlPnNyY0VuZC1zcmNCZWdpbjwvY29kZT4pLiBUaGUgY2hhcmFjdGVycyBhcmUgY29waWVkIGludG8gdGhlCisgICAgICAgICAgICBzdWJhcnJheSBvZiA8Y29kZT5kc3Q8L2NvZGU+IHN0YXJ0aW5nIGF0IGluZGV4IDxjb2RlPmRzdEJlZ2luPC9jb2RlPgorICAgICAgICAgICAgYW5kIGVuZGluZyBhdCBpbmRleDoKKyAgICAgICAgPHA+PGJsb2NrcXVvdGU+PHByZT4KKyAgICAgZHN0YmVnaW4gKyAoc3JjRW5kLXNyY0JlZ2luKSAtIDEKKyA8L3ByZT48L2Jsb2NrcXVvdGU+CisgICAgICAgIDxQPgorICAgIDxERD48REw+CisgICAgPC9ETD4KKyAgICA8L0REPgorICAgIDxERD48REw+CisgICAgICAgIDxEVD48Qj5QYXJhbWV0ZXJzOjwvQj48REQ+PENPREU+c3JjQmVnaW48L0NPREU+IC0gaW5kZXggb2YgdGhlIGZpcnN0IGNoYXJhY3RlciBpbiB0aGUgc3RyaW5nCisgICAgICAgIHRvIGNvcHkuPEREPjxDT0RFPnNyY0VuZDwvQ09ERT4gLSBpbmRleCBhZnRlciB0aGUgbGFzdCBjaGFyYWN0ZXIgaW4gdGhlIHN0cmluZworICAgICAgICB0byBjb3B5LjxERD48Q09ERT5kc3Q8L0NPREU+IC0gdGhlIGRlc3RpbmF0aW9uIGFycmF5LjxERD48Q09ERT5kc3RCZWdpbjwvQ09ERT4gLSB0aGUgc3RhcnQgb2Zmc2V0IGluIHRoZSBkZXN0aW5hdGlvbiBhcnJheS4KKyAgICAgICAgPERUPjxCPlRocm93czo8L0I+CisgICAgICAgIDxERD48Q09ERT48QSBIUkVGPSIuLi8uLi9qYXZhL2xhbmcvSW5kZXhPdXRPZkJvdW5kc0V4Y2VwdGlvbi5odG1sIiB0aXRsZT0iY2xhc3MgaW4gamF2YS5sYW5nIj5JbmRleE91dE9mQm91bmRzRXhjZXB0aW9uPC9BPjwvQ09ERT4gLSBJZiBhbnkgb2YgdGhlIGZvbGxvd2luZworICAgICAgICAgICAgaXMgdHJ1ZToKKyAgICAgICAgICAgIDx1bD48bGk+PGNvZGU+c3JjQmVnaW48L2NvZGU+IGlzIG5lZ2F0aXZlLgorICAgICAgICAgICAgICAgIDxsaT48Y29kZT5zcmNCZWdpbjwvY29kZT4gaXMgZ3JlYXRlciB0aGFuIDxjb2RlPnNyY0VuZDwvY29kZT4KKyAgICAgICAgICAgICAgICA8bGk+PGNvZGU+c3JjRW5kPC9jb2RlPiBpcyBncmVhdGVyIHRoYW4gdGhlIGxlbmd0aCBvZiB0aGlzCisgICAgICAgICAgICAgICAgICAgIHN0cmluZworICAgICAgICAgICAgICAgIDxsaT48Y29kZT5kc3RCZWdpbjwvY29kZT4gaXMgbmVnYXRpdmUKKyAgICAgICAgICAgICAgICA8bGk+PGNvZGU+ZHN0QmVnaW4rKHNyY0VuZC1zcmNCZWdpbik8L2NvZGU+IGlzIGxhcmdlciB0aGFuCisgICAgICAgICAgICAgICAgICAgIDxjb2RlPmRzdC5sZW5ndGg8L2NvZGU+PC91bD48L0RMPgorICAgIDwvREQ+Cis8L0RMPgorPEhSPgorCis8QSBOQU1FPSJnZXRCeXRlcyhpbnQsIGludCwgYnl0ZVtdLCBpbnQpIj48IS0tIC0tPjwvQT48SDM+CisgICAgZ2V0Qnl0ZXM8L0gzPgorPFBSRT4KKzxGT05UIFNJWkU9Ii0xIj48QSBIUkVGPSIuLi8uLi9qYXZhL2xhbmcvRGVwcmVjYXRlZC5odG1sIiB0aXRsZT0iYW5ub3RhdGlvbiBpbiBqYXZhLmxhbmciPkBEZXByZWNhdGVkPC9BPgorPC9GT05UPnB1YmxpYyB2b2lkIDxCPmdldEJ5dGVzPC9CPihpbnQmbmJzcDtzcmNCZWdpbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50Jm5ic3A7c3JjRW5kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBieXRlW10mbmJzcDtkc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCZuYnNwO2RzdEJlZ2luKTwvUFJFPgorPERMPgorICAgIDxERD48Qj5EZXByZWNhdGVkLjwvQj4mbmJzcDs8ST5UaGlzIG1ldGhvZCBkb2VzIG5vdCBwcm9wZXJseSBjb252ZXJ0IGNoYXJhY3RlcnMgaW50bworICAgICAgICBieXRlcy4gIEFzIG9mIEpESyZuYnNwOzEuMSwgdGhlIHByZWZlcnJlZCB3YXkgdG8gZG8gdGhpcyBpcyB2aWEgdGhlCisgICAgICAgIDxBIEhSRUY9Ii4uLy4uL2phdmEvbGFuZy9TdHJpbmcuaHRtbCNnZXRCeXRlcygpIj48Q09ERT5nZXRCeXRlcygpPC9DT0RFPjwvQT4gbWV0aG9kLCB3aGljaCB1c2VzIHRoZSBwbGF0Zm9ybSdzIGRlZmF1bHQgY2hhcnNldC48L0k+CisgICAgICAgIDxQPgorICAgICAgICAgICAgPEREPkNvcGllcyBjaGFyYWN0ZXJzIGZyb20gdGhpcyBzdHJpbmcgaW50byB0aGUgZGVzdGluYXRpb24gYnl0ZSBhcnJheS4gRWFjaAorICAgICAgICAgICAgICAgIGJ5dGUgcmVjZWl2ZXMgdGhlIDggbG93LW9yZGVyIGJpdHMgb2YgdGhlIGNvcnJlc3BvbmRpbmcgY2hhcmFjdGVyLiBUaGUKKyAgICAgICAgICAgICAgICBlaWdodCBoaWdoLW9yZGVyIGJpdHMgb2YgZWFjaCBjaGFyYWN0ZXIgYXJlIG5vdCBjb3BpZWQgYW5kIGRvIG5vdAorICAgICAgICAgICAgICAgIHBhcnRpY2lwYXRlIGluIHRoZSB0cmFuc2ZlciBpbiBhbnkgd2F5LgorCisgICAgICAgIDxwPiBUaGUgZmlyc3QgY2hhcmFjdGVyIHRvIGJlIGNvcGllZCBpcyBhdCBpbmRleCA8Y29kZT5zcmNCZWdpbjwvY29kZT47IHRoZQorICAgICAgICAgICAgbGFzdCBjaGFyYWN0ZXIgdG8gYmUgY29waWVkIGlzIGF0IGluZGV4IDxjb2RlPnNyY0VuZC0xPC9jb2RlPi4gIFRoZSB0b3RhbAorICAgICAgICAgICAgbnVtYmVyIG9mIGNoYXJhY3RlcnMgdG8gYmUgY29waWVkIGlzIDxjb2RlPnNyY0VuZC1zcmNCZWdpbjwvY29kZT4uIFRoZQorICAgICAgICAgICAgY2hhcmFjdGVycywgY29udmVydGVkIHRvIGJ5dGVzLCBhcmUgY29waWVkIGludG8gdGhlIHN1YmFycmF5IG9mIDxjb2RlPmRzdDwvY29kZT4gc3RhcnRpbmcgYXQgaW5kZXggPGNvZGU+ZHN0QmVnaW48L2NvZGU+IGFuZCBlbmRpbmcgYXQgaW5kZXg6CisKKyAgICAgICAgPGJsb2NrcXVvdGU+PHByZT4KKyAgICAgZHN0YmVnaW4gKyAoc3JjRW5kLXNyY0JlZ2luKSAtIDEKKyA8L3ByZT48L2Jsb2NrcXVvdGU+CisgICAgICAgIDxQPgorICAgIDxERD48REw+CisgICAgPC9ETD4KKyAgICA8L0REPgorICAgIDxERD48REw+CisgICAgICAgIDxEVD48Qj5QYXJhbWV0ZXJzOjwvQj48REQ+PENPREU+c3JjQmVnaW48L0NPREU+IC0gSW5kZXggb2YgdGhlIGZpcnN0IGNoYXJhY3RlciBpbiB0aGUgc3RyaW5nIHRvIGNvcHk8REQ+PENPREU+c3JjRW5kPC9DT0RFPiAtIEluZGV4IGFmdGVyIHRoZSBsYXN0IGNoYXJhY3RlciBpbiB0aGUgc3RyaW5nIHRvIGNvcHk8REQ+PENPREU+ZHN0PC9DT0RFPiAtIFRoZSBkZXN0aW5hdGlvbiBhcnJheTxERD48Q09ERT5kc3RCZWdpbjwvQ09ERT4gLSBUaGUgc3RhcnQgb2Zmc2V0IGluIHRoZSBkZXN0aW5hdGlvbiBhcnJheQorICAgICAgICA8RFQ+PEI+VGhyb3dzOjwvQj4KKyAgICAgICAgPEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uL2phdmEvbGFuZy9JbmRleE91dE9mQm91bmRzRXhjZXB0aW9uLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBqYXZhLmxhbmciPkluZGV4T3V0T2ZCb3VuZHNFeGNlcHRpb248L0E+PC9DT0RFPiAtIElmIGFueSBvZiB0aGUgZm9sbG93aW5nIGlzIHRydWU6CisgICAgICAgICAgICA8dWw+CisgICAgICAgICAgICAgICAgPGxpPiA8Y29kZT5zcmNCZWdpbjwvY29kZT4gaXMgbmVnYXRpdmUKKyAgICAgICAgICAgICAgICA8bGk+IDxjb2RlPnNyY0JlZ2luPC9jb2RlPiBpcyBncmVhdGVyIHRoYW4gPGNvZGU+c3JjRW5kPC9jb2RlPgorICAgICAgICAgICAgICAgIDxsaT4gPGNvZGU+c3JjRW5kPC9jb2RlPiBpcyBncmVhdGVyIHRoYW4gdGhlIGxlbmd0aCBvZiB0aGlzIFN0cmluZworICAgICAgICAgICAgICAgIDxsaT4gPGNvZGU+ZHN0QmVnaW48L2NvZGU+IGlzIG5lZ2F0aXZlCisgICAgICAgICAgICAgICAgPGxpPiA8Y29kZT5kc3RCZWdpbisoc3JjRW5kLXNyY0JlZ2luKTwvY29kZT4gaXMgbGFyZ2VyIHRoYW4gPGNvZGU+ZHN0Lmxlbmd0aDwvY29kZT4KKyAgICAgICAgICAgIDwvdWw+PC9ETD4KKyAgICA8L0REPgorPC9ETD4KKzxIUj4KKworPEEgTkFNRT0iZ2V0Qnl0ZXMoamF2YS5sYW5nLlN0cmluZykiPjwhLS0gLS0+PC9BPjxIMz4KKyAgICBnZXRCeXRlczwvSDM+Cis8UFJFPgorcHVibGljIGJ5dGVbXSA8Qj5nZXRCeXRlczwvQj4oPEEgSFJFRj0iLi4vLi4vamF2YS9sYW5nL1N0cmluZy5odG1sIiB0aXRsZT0iY2xhc3MgaW4gamF2YS5sYW5nIj5TdHJpbmc8L0E+Jm5ic3A7Y2hhcnNldE5hbWUpCisgICAgICAgICAgICAgICAgdGhyb3dzIDxBIEhSRUY9Ii4uLy4uL2phdmEvaW8vVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbi5odG1sIiB0aXRsZT0iY2xhc3MgaW4gamF2YS5pbyI+VW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbjwvQT48L1BSRT4KKzxETD4KKyAgICA8REQ+RW5jb2RlcyB0aGlzIDxjb2RlPlN0cmluZzwvY29kZT4gaW50byBhIHNlcXVlbmNlIG9mIGJ5dGVzIHVzaW5nIHRoZSBuYW1lZAorICAgICAgICBjaGFyc2V0LCBzdG9yaW5nIHRoZSByZXN1bHQgaW50byBhIG5ldyBieXRlIGFycmF5LgorCisgICAgICAgIDxwPiBUaGUgYmVoYXZpb3Igb2YgdGhpcyBtZXRob2Qgd2hlbiB0aGlzIHN0cmluZyBjYW5ub3QgYmUgZW5jb2RlZCBpbgorICAgICAgICAgICAgdGhlIGdpdmVuIGNoYXJzZXQgaXMgdW5zcGVjaWZpZWQuICBUaGUgPEEgSFJFRj0iLi4vLi4vamF2YS9uaW8vY2hhcnNldC9DaGFyc2V0RW5jb2Rlci5odG1sIiB0aXRsZT0iY2xhc3MgaW4gamF2YS5uaW8uY2hhcnNldCI+PENPREU+Q2hhcnNldEVuY29kZXI8L0NPREU+PC9BPiBjbGFzcyBzaG91bGQgYmUgdXNlZCB3aGVuIG1vcmUgY29udHJvbAorICAgICAgICAgICAgb3ZlciB0aGUgZW5jb2RpbmcgcHJvY2VzcyBpcyByZXF1aXJlZC4KKyAgICAgICAgPFA+CisgICAgPEREPjxETD4KKyAgICA8L0RMPgorICAgIDwvREQ+CisgICAgPEREPjxETD4KKyAgICAgICAgPERUPjxCPlBhcmFtZXRlcnM6PC9CPjxERD48Q09ERT5jaGFyc2V0TmFtZTwvQ09ERT4gLSBUaGUgbmFtZSBvZiBhIHN1cHBvcnRlZCA8QSBIUkVGPSIuLi8uLi9qYXZhL25pby9jaGFyc2V0L0NoYXJzZXQuaHRtbCIgdGl0bGU9ImNsYXNzIGluIGphdmEubmlvLmNoYXJzZXQiPmNoYXJzZXQ8L0E+CisgICAgICAgIDxEVD48Qj5SZXR1cm5zOjwvQj48REQ+VGhlIHJlc3VsdGFudCBieXRlIGFycmF5CisgICAgICAgIDxEVD48Qj5UaHJvd3M6PC9CPgorICAgICAgICA8REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vamF2YS9pby9VbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBqYXZhLmlvIj5VbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uPC9BPjwvQ09ERT4gLSBJZiB0aGUgbmFtZWQgY2hhcnNldCBpcyBub3Qgc3VwcG9ydGVkPERUPjxCPlNpbmNlOjwvQj48L0RUPgorICAgICAgICA8REQ+SkRLMS4xPC9ERD4KKyAgICA8L0RMPgorICAgIDwvREQ+Cis8L0RMPgorPEhSPgorCis8QSBOQU1FPSJnZXRCeXRlcyhqYXZhLm5pby5jaGFyc2V0LkNoYXJzZXQpIj48IS0tIC0tPjwvQT48SDM+CisgICAgZ2V0Qnl0ZXM8L0gzPgorPFBSRT4KK3B1YmxpYyBieXRlW10gPEI+Z2V0Qnl0ZXM8L0I+KDxBIEhSRUY9Ii4uLy4uL2phdmEvbmlvL2NoYXJzZXQvQ2hhcnNldC5odG1sIiB0aXRsZT0iY2xhc3MgaW4gamF2YS5uaW8uY2hhcnNldCI+Q2hhcnNldDwvQT4mbmJzcDtjaGFyc2V0KTwvUFJFPgorPERMPgorICAgIDxERD5FbmNvZGVzIHRoaXMgPGNvZGU+U3RyaW5nPC9jb2RlPiBpbnRvIGEgc2VxdWVuY2Ugb2YgYnl0ZXMgdXNpbmcgdGhlIGdpdmVuCisgICAgICAgIDxBIEhSRUY9Ii4uLy4uL2phdmEvbmlvL2NoYXJzZXQvQ2hhcnNldC5odG1sIiB0aXRsZT0iY2xhc3MgaW4gamF2YS5uaW8uY2hhcnNldCI+Y2hhcnNldDwvQT4sIHN0b3JpbmcgdGhlIHJlc3VsdCBpbnRvIGEKKyAgICAgICAgbmV3IGJ5dGUgYXJyYXkuCisKKyAgICAgICAgPHA+IFRoaXMgbWV0aG9kIGFsd2F5cyByZXBsYWNlcyBtYWxmb3JtZWQtaW5wdXQgYW5kIHVubWFwcGFibGUtY2hhcmFjdGVyCisgICAgICAgICAgICBzZXF1ZW5jZXMgd2l0aCB0aGlzIGNoYXJzZXQncyBkZWZhdWx0IHJlcGxhY2VtZW50IGJ5dGUgYXJyYXkuICBUaGUKKyAgICAgICAgICAgIDxBIEhSRUY9Ii4uLy4uL2phdmEvbmlvL2NoYXJzZXQvQ2hhcnNldEVuY29kZXIuaHRtbCIgdGl0bGU9ImNsYXNzIGluIGphdmEubmlvLmNoYXJzZXQiPjxDT0RFPkNoYXJzZXRFbmNvZGVyPC9DT0RFPjwvQT4gY2xhc3Mgc2hvdWxkIGJlIHVzZWQgd2hlbiBtb3JlCisgICAgICAgICAgICBjb250cm9sIG92ZXIgdGhlIGVuY29kaW5nIHByb2Nlc3MgaXMgcmVxdWlyZWQuCisgICAgICAgIDxQPgorICAgIDxERD48REw+CisgICAgPC9ETD4KKyAgICA8L0REPgorICAgIDxERD48REw+CisgICAgICAgIDxEVD48Qj5QYXJhbWV0ZXJzOjwvQj48REQ+PENPREU+Y2hhcnNldDwvQ09ERT4gLSBUaGUgPEEgSFJFRj0iLi4vLi4vamF2YS9uaW8vY2hhcnNldC9DaGFyc2V0Lmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBqYXZhLm5pby5jaGFyc2V0Ij5DaGFyc2V0PC9BPiB0byBiZSB1c2VkIHRvIGVuY29kZQorICAgICAgICB0aGUgPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAgICA8RFQ+PEI+UmV0dXJuczo8L0I+PEREPlRoZSByZXN1bHRhbnQgYnl0ZSBhcnJheTxEVD48Qj5TaW5jZTo8L0I+PC9EVD4KKyAgICAgICAgPEREPjEuNjwvREQ+CisgICAgPC9ETD4KKyAgICA8L0REPgorPC9ETD4KKzxIUj4KKworPEEgTkFNRT0iZ2V0Qnl0ZXMoKSI+PCEtLSAtLT48L0E+PEgzPgorICAgIGdldEJ5dGVzPC9IMz4KKzxQUkU+CitwdWJsaWMgYnl0ZVtdIDxCPmdldEJ5dGVzPC9CPigpPC9QUkU+Cis8REw+CisgICAgPEREPkVuY29kZXMgdGhpcyA8Y29kZT5TdHJpbmc8L2NvZGU+IGludG8gYSBzZXF1ZW5jZSBvZiBieXRlcyB1c2luZyB0aGUKKyAgICAgICAgcGxhdGZvcm0ncyBkZWZhdWx0IGNoYXJzZXQsIHN0b3JpbmcgdGhlIHJlc3VsdCBpbnRvIGEgbmV3IGJ5dGUgYXJyYXkuCisKKyAgICAgICAgPHA+IFRoZSBiZWhhdmlvciBvZiB0aGlzIG1ldGhvZCB3aGVuIHRoaXMgc3RyaW5nIGNhbm5vdCBiZSBlbmNvZGVkIGluCisgICAgICAgICAgICB0aGUgZGVmYXVsdCBjaGFyc2V0IGlzIHVuc3BlY2lmaWVkLiAgVGhlIDxBIEhSRUY9Ii4uLy4uL2phdmEvbmlvL2NoYXJzZXQvQ2hhcnNldEVuY29kZXIuaHRtbCIgdGl0bGU9ImNsYXNzIGluIGphdmEubmlvLmNoYXJzZXQiPjxDT0RFPkNoYXJzZXRFbmNvZGVyPC9DT0RFPjwvQT4gY2xhc3Mgc2hvdWxkIGJlIHVzZWQgd2hlbiBtb3JlIGNvbnRyb2wKKyAgICAgICAgICAgIG92ZXIgdGhlIGVuY29kaW5nIHByb2Nlc3MgaXMgcmVxdWlyZWQuCisgICAgICAgIDxQPgorICAgIDxERD48REw+CisgICAgPC9ETD4KKyAgICA8L0REPgorICAgIDxERD48REw+CisKKyAgICAgICAgPERUPjxCPlJldHVybnM6PC9CPjxERD5UaGUgcmVzdWx0YW50IGJ5dGUgYXJyYXk8RFQ+PEI+U2luY2U6PC9CPjwvRFQ+CisgICAgICAgIDxERD5KREsxLjE8L0REPgorICAgIDwvREw+CisgICAgPC9ERD4KKzwvREw+Cis8SFI+CisKKzxBIE5BTUU9ImVxdWFscyhqYXZhLmxhbmcuT2JqZWN0KSI+PCEtLSAtLT48L0E+PEgzPgorICAgIGVxdWFsczwvSDM+Cis8UFJFPgorcHVibGljIGJvb2xlYW4gPEI+ZXF1YWxzPC9CPig8QSBIUkVGPSIuLi8uLi9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBqYXZhLmxhbmciPk9iamVjdDwvQT4mbmJzcDthbk9iamVjdCk8L1BSRT4KKzxETD4KKyAgICA8REQ+Q29tcGFyZXMgdGhpcyBzdHJpbmcgdG8gdGhlIHNwZWNpZmllZCBvYmplY3QuICBUaGUgcmVzdWx0IGlzIDxjb2RlPnRydWU8L2NvZGU+IGlmIGFuZCBvbmx5IGlmIHRoZSBhcmd1bWVudCBpcyBub3QgPGNvZGU+bnVsbDwvY29kZT4gYW5kIGlzIGEgPGNvZGU+U3RyaW5nPC9jb2RlPiBvYmplY3QgdGhhdCByZXByZXNlbnRzIHRoZSBzYW1lIHNlcXVlbmNlIG9mIGNoYXJhY3RlcnMgYXMgdGhpcworICAgICAgICBvYmplY3QuCisgICAgICAgIDxQPgorICAgIDxERD48REw+CisgICAgICAgIDxEVD48Qj5PdmVycmlkZXM6PC9CPjxERD48Q09ERT48QSBIUkVGPSIuLi8uLi9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjZXF1YWxzKGphdmEubGFuZy5PYmplY3QpIj5lcXVhbHM8L0E+PC9DT0RFPiBpbiBjbGFzcyA8Q09ERT48QSBIUkVGPSIuLi8uLi9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBqYXZhLmxhbmciPk9iamVjdDwvQT48L0NPREU+PC9ETD4KKyAgICA8L0REPgorICAgIDxERD48REw+CisgICAgICAgIDxEVD48Qj5QYXJhbWV0ZXJzOjwvQj48REQ+PENPREU+YW5PYmplY3Q8L0NPREU+IC0gVGhlIG9iamVjdCB0byBjb21wYXJlIHRoaXMgPGNvZGU+U3RyaW5nPC9jb2RlPiBhZ2FpbnN0CisgICAgICAgIDxEVD48Qj5SZXR1cm5zOjwvQj48REQ+PGNvZGU+dHJ1ZTwvY29kZT4gaWYgdGhlIGdpdmVuIG9iamVjdCByZXByZXNlbnRzIGEgPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAgICBlcXVpdmFsZW50IHRvIHRoaXMgc3RyaW5nLCA8Y29kZT5mYWxzZTwvY29kZT4gb3RoZXJ3aXNlPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vamF2YS9sYW5nL1N0cmluZy5odG1sI2NvbXBhcmVUbyhqYXZhLmxhbmcuU3RyaW5nKSI+PENPREU+Y29tcGFyZVRvKFN0cmluZyk8L0NPREU+PC9BPiwKKyAgICAgICAgPEEgSFJFRj0iLi4vLi4vamF2YS9sYW5nL1N0cmluZy5odG1sI2VxdWFsc0lnbm9yZUNhc2UoamF2YS5sYW5nLlN0cmluZykiPjxDT0RFPmVxdWFsc0lnbm9yZUNhc2UoU3RyaW5nKTwvQ09ERT48L0E+PC9ETD4KKyAgICA8L0REPgorPC9ETD4KKzxIUj4KKworPEEgTkFNRT0iY29udGVudEVxdWFscyhqYXZhLmxhbmcuU3RyaW5nQnVmZmVyKSI+PCEtLSAtLT48L0E+PEgzPgorICAgIGNvbnRlbnRFcXVhbHM8L0gzPgorPFBSRT4KK3B1YmxpYyBib29sZWFuIDxCPmNvbnRlbnRFcXVhbHM8L0I+KDxBIEhSRUY9Ii4uLy4uL2phdmEvbGFuZy9TdHJpbmdCdWZmZXIuaHRtbCIgdGl0bGU9ImNsYXNzIGluIGphdmEubGFuZyI+U3RyaW5nQnVmZmVyPC9BPiZuYnNwO3NiKTwvUFJFPgorPERMPgorICAgIDxERD5Db21wYXJlcyB0aGlzIHN0cmluZyB0byB0aGUgc3BlY2lmaWVkIDxjb2RlPlN0cmluZ0J1ZmZlcjwvY29kZT4uICBUaGUgcmVzdWx0CisgICAgICAgIGlzIDxjb2RlPnRydWU8L2NvZGU+IGlmIGFuZCBvbmx5IGlmIHRoaXMgPGNvZGU+U3RyaW5nPC9jb2RlPiByZXByZXNlbnRzIHRoZSBzYW1lCisgICAgICAgIHNlcXVlbmNlIG9mIGNoYXJhY3RlcnMgYXMgdGhlIHNwZWNpZmllZCA8Y29kZT5TdHJpbmdCdWZmZXI8L2NvZGU+LgorICAgICAgICA8UD4KKyAgICA8REQ+PERMPgorICAgIDwvREw+CisgICAgPC9ERD4KKyAgICA8REQ+PERMPgorICAgICAgICA8RFQ+PEI+UGFyYW1ldGVyczo8L0I+PEREPjxDT0RFPnNiPC9DT0RFPiAtIFRoZSA8Y29kZT5TdHJpbmdCdWZmZXI8L2NvZGU+IHRvIGNvbXBhcmUgdGhpcyA8Y29kZT5TdHJpbmc8L2NvZGU+IGFnYWluc3QKKyAgICAgICAgPERUPjxCPlJldHVybnM6PC9CPjxERD48Y29kZT50cnVlPC9jb2RlPiBpZiB0aGlzIDxjb2RlPlN0cmluZzwvY29kZT4gcmVwcmVzZW50cyB0aGUgc2FtZQorICAgICAgICBzZXF1ZW5jZSBvZiBjaGFyYWN0ZXJzIGFzIHRoZSBzcGVjaWZpZWQgPGNvZGU+U3RyaW5nQnVmZmVyPC9jb2RlPiwKKyAgICAgICAgPGNvZGU+ZmFsc2U8L2NvZGU+IG90aGVyd2lzZTxEVD48Qj5TaW5jZTo8L0I+PC9EVD4KKyAgICAgICAgPEREPjEuNDwvREQ+CisgICAgPC9ETD4KKyAgICA8L0REPgorPC9ETD4KKzxIUj4KKworPEEgTkFNRT0iY29udGVudEVxdWFscyhqYXZhLmxhbmcuQ2hhclNlcXVlbmNlKSI+PCEtLSAtLT48L0E+PEgzPgorICAgIGNvbnRlbnRFcXVhbHM8L0gzPgorPFBSRT4KK3B1YmxpYyBib29sZWFuIDxCPmNvbnRlbnRFcXVhbHM8L0I+KDxBIEhSRUY9Ii4uLy4uL2phdmEvbGFuZy9DaGFyU2VxdWVuY2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBqYXZhLmxhbmciPkNoYXJTZXF1ZW5jZTwvQT4mbmJzcDtjcyk8L1BSRT4KKzxETD4KKyAgICA8REQ+Q29tcGFyZXMgdGhpcyBzdHJpbmcgdG8gdGhlIHNwZWNpZmllZCA8Y29kZT5DaGFyU2VxdWVuY2U8L2NvZGU+LiAgVGhlIHJlc3VsdAorICAgICAgICBpcyA8Y29kZT50cnVlPC9jb2RlPiBpZiBhbmQgb25seSBpZiB0aGlzIDxjb2RlPlN0cmluZzwvY29kZT4gcmVwcmVzZW50cyB0aGUgc2FtZQorICAgICAgICBzZXF1ZW5jZSBvZiBjaGFyIHZhbHVlcyBhcyB0aGUgc3BlY2lmaWVkIHNlcXVlbmNlLgorICAgICAgICA8UD4KKyAgICA8REQ+PERMPgorICAgIDwvREw+CisgICAgPC9ERD4KKyAgICA8REQ+PERMPgorICAgICAgICA8RFQ+PEI+UGFyYW1ldGVyczo8L0I+PEREPjxDT0RFPmNzPC9DT0RFPiAtIFRoZSBzZXF1ZW5jZSB0byBjb21wYXJlIHRoaXMgPGNvZGU+U3RyaW5nPC9jb2RlPiBhZ2FpbnN0CisgICAgICAgIDxEVD48Qj5SZXR1cm5zOjwvQj48REQ+PGNvZGU+dHJ1ZTwvY29kZT4gaWYgdGhpcyA8Y29kZT5TdHJpbmc8L2NvZGU+IHJlcHJlc2VudHMgdGhlIHNhbWUKKyAgICAgICAgc2VxdWVuY2Ugb2YgY2hhciB2YWx1ZXMgYXMgdGhlIHNwZWNpZmllZCBzZXF1ZW5jZSwgPGNvZGU+ZmFsc2U8L2NvZGU+IG90aGVyd2lzZTxEVD48Qj5TaW5jZTo8L0I+PC9EVD4KKyAgICAgICAgPEREPjEuNTwvREQ+CisgICAgPC9ETD4KKyAgICA8L0REPgorPC9ETD4KKzxIUj4KKworPEEgTkFNRT0iZXF1YWxzSWdub3JlQ2FzZShqYXZhLmxhbmcuU3RyaW5nKSI+PCEtLSAtLT48L0E+PEgzPgorICAgIGVxdWFsc0lnbm9yZUNhc2U8L0gzPgorPFBSRT4KK3B1YmxpYyBib29sZWFuIDxCPmVxdWFsc0lnbm9yZUNhc2U8L0I+KDxBIEhSRUY9Ii4uLy4uL2phdmEvbGFuZy9TdHJpbmcuaHRtbCIgdGl0bGU9ImNsYXNzIGluIGphdmEubGFuZyI+U3RyaW5nPC9BPiZuYnNwO2Fub3RoZXJTdHJpbmcpPC9QUkU+Cis8REw+CisgICAgPEREPkNvbXBhcmVzIHRoaXMgPGNvZGU+U3RyaW5nPC9jb2RlPiB0byBhbm90aGVyIDxjb2RlPlN0cmluZzwvY29kZT4sIGlnbm9yaW5nIGNhc2UKKyAgICAgICAgY29uc2lkZXJhdGlvbnMuICBUd28gc3RyaW5ncyBhcmUgY29uc2lkZXJlZCBlcXVhbCBpZ25vcmluZyBjYXNlIGlmIHRoZXkKKyAgICAgICAgYXJlIG9mIHRoZSBzYW1lIGxlbmd0aCBhbmQgY29ycmVzcG9uZGluZyBjaGFyYWN0ZXJzIGluIHRoZSB0d28gc3RyaW5ncworICAgICAgICBhcmUgZXF1YWwgaWdub3JpbmcgY2FzZS4KKworICAgICAgICA8cD4gVHdvIGNoYXJhY3RlcnMgPGNvZGU+YzE8L2NvZGU+IGFuZCA8Y29kZT5jMjwvY29kZT4gYXJlIGNvbnNpZGVyZWQgdGhlIHNhbWUKKyAgICAgICAgICAgIGlnbm9yaW5nIGNhc2UgaWYgYXQgbGVhc3Qgb25lIG9mIHRoZSBmb2xsb3dpbmcgaXMgdHJ1ZToKKyAgICAgICAgPHVsPgorICAgICAgICAgICAgPGxpPiBUaGUgdHdvIGNoYXJhY3RlcnMgYXJlIHRoZSBzYW1lIChhcyBjb21wYXJlZCBieSB0aGUKKyAgICAgICAgICAgICAgICA8Y29kZT49PTwvY29kZT4gb3BlcmF0b3IpCisgICAgICAgICAgICA8bGk+IEFwcGx5aW5nIHRoZSBtZXRob2QgPEEgSFJFRj0iLi4vLi4vamF2YS9sYW5nL0NoYXJhY3Rlci5odG1sI3RvVXBwZXJDYXNlKGNoYXIpIj48Q09ERT5DaGFyYWN0ZXIudG9VcHBlckNhc2UoY2hhcik8L0NPREU+PC9BPiB0byBlYWNoIGNoYXJhY3RlcgorICAgICAgICAgICAgICAgIHByb2R1Y2VzIHRoZSBzYW1lIHJlc3VsdAorICAgICAgICAgICAgPGxpPiBBcHBseWluZyB0aGUgbWV0aG9kIDxBIEhSRUY9Ii4uLy4uL2phdmEvbGFuZy9DaGFyYWN0ZXIuaHRtbCN0b0xvd2VyQ2FzZShjaGFyKSI+PENPREU+Q2hhcmFjdGVyLnRvTG93ZXJDYXNlKGNoYXIpPC9DT0RFPjwvQT4gdG8gZWFjaCBjaGFyYWN0ZXIKKyAgICAgICAgICAgICAgICBwcm9kdWNlcyB0aGUgc2FtZSByZXN1bHQKKyAgICAgICAgPC91bD4KKyAgICAgICAgPFA+CisgICAgPEREPjxETD4KKyAgICA8L0RMPgorICAgIDwvREQ+CisgICAgPEREPjxETD4KKyAgICAgICAgPERUPjxCPlBhcmFtZXRlcnM6PC9CPjxERD48Q09ERT5hbm90aGVyU3RyaW5nPC9DT0RFPiAtIFRoZSA8Y29kZT5TdHJpbmc8L2NvZGU+IHRvIGNvbXBhcmUgdGhpcyA8Y29kZT5TdHJpbmc8L2NvZGU+IGFnYWluc3QKKyAgICAgICAgPERUPjxCPlJldHVybnM6PC9CPjxERD48Y29kZT50cnVlPC9jb2RlPiBpZiB0aGUgYXJndW1lbnQgaXMgbm90IDxjb2RlPm51bGw8L2NvZGU+IGFuZCBpdAorICAgICAgICByZXByZXNlbnRzIGFuIGVxdWl2YWxlbnQgPGNvZGU+U3RyaW5nPC9jb2RlPiBpZ25vcmluZyBjYXNlOyA8Y29kZT5mYWxzZTwvY29kZT4gb3RoZXJ3aXNlPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vamF2YS9sYW5nL1N0cmluZy5odG1sI2VxdWFscyhqYXZhLmxhbmcuT2JqZWN0KSI+PENPREU+ZXF1YWxzKE9iamVjdCk8L0NPREU+PC9BPjwvREw+CisgICAgPC9ERD4KKzwvREw+Cis8SFI+CisKKzxBIE5BTUU9ImNvbXBhcmVUbyhqYXZhLmxhbmcuU3RyaW5nKSI+PCEtLSAtLT48L0E+PEgzPgorICAgIGNvbXBhcmVUbzwvSDM+Cis8UFJFPgorcHVibGljIGludCA8Qj5jb21wYXJlVG88L0I+KDxBIEhSRUY9Ii4uLy4uL2phdmEvbGFuZy9TdHJpbmcuaHRtbCIgdGl0bGU9ImNsYXNzIGluIGphdmEubGFuZyI+U3RyaW5nPC9BPiZuYnNwO2Fub3RoZXJTdHJpbmcpPC9QUkU+Cis8REw+CisgICAgPEREPkNvbXBhcmVzIHR3byBzdHJpbmdzIGxleGljb2dyYXBoaWNhbGx5LgorICAgICAgICBUaGUgY29tcGFyaXNvbiBpcyBiYXNlZCBvbiB0aGUgVW5pY29kZSB2YWx1ZSBvZiBlYWNoIGNoYXJhY3RlciBpbgorICAgICAgICB0aGUgc3RyaW5ncy4gVGhlIGNoYXJhY3RlciBzZXF1ZW5jZSByZXByZXNlbnRlZCBieSB0aGlzCisgICAgICAgIDxjb2RlPlN0cmluZzwvY29kZT4gb2JqZWN0IGlzIGNvbXBhcmVkIGxleGljb2dyYXBoaWNhbGx5IHRvIHRoZQorICAgICAgICBjaGFyYWN0ZXIgc2VxdWVuY2UgcmVwcmVzZW50ZWQgYnkgdGhlIGFyZ3VtZW50IHN0cmluZy4gVGhlIHJlc3VsdCBpcworICAgICAgICBhIG5lZ2F0aXZlIGludGVnZXIgaWYgdGhpcyA8Y29kZT5TdHJpbmc8L2NvZGU+IG9iamVjdAorICAgICAgICBsZXhpY29ncmFwaGljYWxseSBwcmVjZWRlcyB0aGUgYXJndW1lbnQgc3RyaW5nLiBUaGUgcmVzdWx0IGlzIGEKKyAgICAgICAgcG9zaXRpdmUgaW50ZWdlciBpZiB0aGlzIDxjb2RlPlN0cmluZzwvY29kZT4gb2JqZWN0IGxleGljb2dyYXBoaWNhbGx5CisgICAgICAgIGZvbGxvd3MgdGhlIGFyZ3VtZW50IHN0cmluZy4gVGhlIHJlc3VsdCBpcyB6ZXJvIGlmIHRoZSBzdHJpbmdzCisgICAgICAgIGFyZSBlcXVhbDsgPGNvZGU+Y29tcGFyZVRvPC9jb2RlPiByZXR1cm5zIDxjb2RlPjA8L2NvZGU+IGV4YWN0bHkgd2hlbgorICAgICAgICB0aGUgPEEgSFJFRj0iLi4vLi4vamF2YS9sYW5nL1N0cmluZy5odG1sI2VxdWFscyhqYXZhLmxhbmcuT2JqZWN0KSI+PENPREU+ZXF1YWxzKE9iamVjdCk8L0NPREU+PC9BPiBtZXRob2Qgd291bGQgcmV0dXJuIDxjb2RlPnRydWU8L2NvZGU+LgorICAgICAgICA8cD4KKyAgICAgICAgICAgIFRoaXMgaXMgdGhlIGRlZmluaXRpb24gb2YgbGV4aWNvZ3JhcGhpYyBvcmRlcmluZy4gSWYgdHdvIHN0cmluZ3MgYXJlCisgICAgICAgICAgICBkaWZmZXJlbnQsIHRoZW4gZWl0aGVyIHRoZXkgaGF2ZSBkaWZmZXJlbnQgY2hhcmFjdGVycyBhdCBzb21lIGluZGV4CisgICAgICAgICAgICB0aGF0IGlzIGEgdmFsaWQgaW5kZXggZm9yIGJvdGggc3RyaW5ncywgb3IgdGhlaXIgbGVuZ3RocyBhcmUgZGlmZmVyZW50LAorICAgICAgICAgICAgb3IgYm90aC4gSWYgdGhleSBoYXZlIGRpZmZlcmVudCBjaGFyYWN0ZXJzIGF0IG9uZSBvciBtb3JlIGluZGV4CisgICAgICAgICAgICBwb3NpdGlvbnMsIGxldCA8aT5rPC9pPiBiZSB0aGUgc21hbGxlc3Qgc3VjaCBpbmRleDsgdGhlbiB0aGUgc3RyaW5nCisgICAgICAgICAgICB3aG9zZSBjaGFyYWN0ZXIgYXQgcG9zaXRpb24gPGk+azwvaT4gaGFzIHRoZSBzbWFsbGVyIHZhbHVlLCBhcworICAgICAgICAgICAgZGV0ZXJtaW5lZCBieSB1c2luZyB0aGUgJmx0OyBvcGVyYXRvciwgbGV4aWNvZ3JhcGhpY2FsbHkgcHJlY2VkZXMgdGhlCisgICAgICAgICAgICBvdGhlciBzdHJpbmcuIEluIHRoaXMgY2FzZSwgPGNvZGU+Y29tcGFyZVRvPC9jb2RlPiByZXR1cm5zIHRoZQorICAgICAgICAgICAgZGlmZmVyZW5jZSBvZiB0aGUgdHdvIGNoYXJhY3RlciB2YWx1ZXMgYXQgcG9zaXRpb24gPGNvZGU+azwvY29kZT4gaW4KKyAgICAgICAgICAgIHRoZSB0d28gc3RyaW5nIC0tIHRoYXQgaXMsIHRoZSB2YWx1ZToKKyAgICAgICAgPGJsb2NrcXVvdGU+PHByZT4KKyB0aGlzLmNoYXJBdChrKS1hbm90aGVyU3RyaW5nLmNoYXJBdChrKQorIDwvcHJlPjwvYmxvY2txdW90ZT4KKyAgICAgICAgSWYgdGhlcmUgaXMgbm8gaW5kZXggcG9zaXRpb24gYXQgd2hpY2ggdGhleSBkaWZmZXIsIHRoZW4gdGhlIHNob3J0ZXIKKyAgICAgICAgc3RyaW5nIGxleGljb2dyYXBoaWNhbGx5IHByZWNlZGVzIHRoZSBsb25nZXIgc3RyaW5nLiBJbiB0aGlzIGNhc2UsCisgICAgICAgIDxjb2RlPmNvbXBhcmVUbzwvY29kZT4gcmV0dXJucyB0aGUgZGlmZmVyZW5jZSBvZiB0aGUgbGVuZ3RocyBvZiB0aGUKKyAgICAgICAgc3RyaW5ncyAtLSB0aGF0IGlzLCB0aGUgdmFsdWU6CisgICAgICAgIDxibG9ja3F1b3RlPjxwcmU+CisgdGhpcy5sZW5ndGgoKS1hbm90aGVyU3RyaW5nLmxlbmd0aCgpCisgPC9wcmU+PC9ibG9ja3F1b3RlPgorICAgICAgICA8UD4KKyAgICA8REQ+PERMPgorICAgICAgICA8RFQ+PEI+U3BlY2lmaWVkIGJ5OjwvQj48REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vamF2YS9sYW5nL0NvbXBhcmFibGUuaHRtbCNjb21wYXJlVG8oVCkiPmNvbXBhcmVUbzwvQT48L0NPREU+IGluIGludGVyZmFjZSA8Q09ERT48QSBIUkVGPSIuLi8uLi9qYXZhL2xhbmcvQ29tcGFyYWJsZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIGphdmEubGFuZyI+Q29tcGFyYWJsZTwvQT4mbHQ7PEEgSFJFRj0iLi4vLi4vamF2YS9sYW5nL1N0cmluZy5odG1sIiB0aXRsZT0iY2xhc3MgaW4gamF2YS5sYW5nIj5TdHJpbmc8L0E+Jmd0OzwvQ09ERT48L0RMPgorICAgIDwvREQ+CisgICAgPEREPjxETD4KKyAgICAgICAgPERUPjxCPlBhcmFtZXRlcnM6PC9CPjxERD48Q09ERT5hbm90aGVyU3RyaW5nPC9DT0RFPiAtIHRoZSA8Y29kZT5TdHJpbmc8L2NvZGU+IHRvIGJlIGNvbXBhcmVkLgorICAgICAgICA8RFQ+PEI+UmV0dXJuczo8L0I+PEREPnRoZSB2YWx1ZSA8Y29kZT4wPC9jb2RlPiBpZiB0aGUgYXJndW1lbnQgc3RyaW5nIGlzIGVxdWFsIHRvCisgICAgICAgIHRoaXMgc3RyaW5nOyBhIHZhbHVlIGxlc3MgdGhhbiA8Y29kZT4wPC9jb2RlPiBpZiB0aGlzIHN0cmluZworICAgICAgICBpcyBsZXhpY29ncmFwaGljYWxseSBsZXNzIHRoYW4gdGhlIHN0cmluZyBhcmd1bWVudDsgYW5kIGEKKyAgICAgICAgdmFsdWUgZ3JlYXRlciB0aGFuIDxjb2RlPjA8L2NvZGU+IGlmIHRoaXMgc3RyaW5nIGlzCisgICAgICAgIGxleGljb2dyYXBoaWNhbGx5IGdyZWF0ZXIgdGhhbiB0aGUgc3RyaW5nIGFyZ3VtZW50LjwvREw+CisgICAgPC9ERD4KKzwvREw+Cis8SFI+CisKKzxBIE5BTUU9ImNvbXBhcmVUb0lnbm9yZUNhc2UoamF2YS5sYW5nLlN0cmluZykiPjwhLS0gLS0+PC9BPjxIMz4KKyAgICBjb21wYXJlVG9JZ25vcmVDYXNlPC9IMz4KKzxQUkU+CitwdWJsaWMgaW50IDxCPmNvbXBhcmVUb0lnbm9yZUNhc2U8L0I+KDxBIEhSRUY9Ii4uLy4uL2phdmEvbGFuZy9TdHJpbmcuaHRtbCIgdGl0bGU9ImNsYXNzIGluIGphdmEubGFuZyI+U3RyaW5nPC9BPiZuYnNwO3N0cik8L1BSRT4KKzxETD4KKyAgICA8REQ+Q29tcGFyZXMgdHdvIHN0cmluZ3MgbGV4aWNvZ3JhcGhpY2FsbHksIGlnbm9yaW5nIGNhc2UKKyAgICAgICAgZGlmZmVyZW5jZXMuIFRoaXMgbWV0aG9kIHJldHVybnMgYW4gaW50ZWdlciB3aG9zZSBzaWduIGlzIHRoYXQgb2YKKyAgICAgICAgY2FsbGluZyA8Y29kZT5jb21wYXJlVG88L2NvZGU+IHdpdGggbm9ybWFsaXplZCB2ZXJzaW9ucyBvZiB0aGUgc3RyaW5ncworICAgICAgICB3aGVyZSBjYXNlIGRpZmZlcmVuY2VzIGhhdmUgYmVlbiBlbGltaW5hdGVkIGJ5IGNhbGxpbmcKKyAgICAgICAgPGNvZGU+Q2hhcmFjdGVyLnRvTG93ZXJDYXNlKENoYXJhY3Rlci50b1VwcGVyQ2FzZShjaGFyYWN0ZXIpKTwvY29kZT4gb24KKyAgICAgICAgZWFjaCBjaGFyYWN0ZXIuCisgICAgICAgIDxwPgorICAgICAgICAgICAgTm90ZSB0aGF0IHRoaXMgbWV0aG9kIGRvZXMgPGVtPm5vdDwvZW0+IHRha2UgbG9jYWxlIGludG8gYWNjb3VudCwKKyAgICAgICAgICAgIGFuZCB3aWxsIHJlc3VsdCBpbiBhbiB1bnNhdGlzZmFjdG9yeSBvcmRlcmluZyBmb3IgY2VydGFpbiBsb2NhbGVzLgorICAgICAgICAgICAgVGhlIGphdmEudGV4dCBwYWNrYWdlIHByb3ZpZGVzIDxlbT5jb2xsYXRvcnM8L2VtPiB0byBhbGxvdworICAgICAgICAgICAgbG9jYWxlLXNlbnNpdGl2ZSBvcmRlcmluZy4KKyAgICAgICAgPFA+CisgICAgPEREPjxETD4KKyAgICA8L0RMPgorICAgIDwvREQ+CisgICAgPEREPjxETD4KKyAgICAgICAgPERUPjxCPlBhcmFtZXRlcnM6PC9CPjxERD48Q09ERT5zdHI8L0NPREU+IC0gdGhlIDxjb2RlPlN0cmluZzwvY29kZT4gdG8gYmUgY29tcGFyZWQuCisgICAgICAgIDxEVD48Qj5SZXR1cm5zOjwvQj48REQ+YSBuZWdhdGl2ZSBpbnRlZ2VyLCB6ZXJvLCBvciBhIHBvc2l0aXZlIGludGVnZXIgYXMgdGhlCisgICAgICAgIHNwZWNpZmllZCBTdHJpbmcgaXMgZ3JlYXRlciB0aGFuLCBlcXVhbCB0bywgb3IgbGVzcworICAgICAgICB0aGFuIHRoaXMgU3RyaW5nLCBpZ25vcmluZyBjYXNlIGNvbnNpZGVyYXRpb25zLjxEVD48Qj5TaW5jZTo8L0I+PC9EVD4KKyAgICAgICAgPEREPjEuMjwvREQ+CisgICAgICAgIDxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uL2phdmEvdGV4dC9Db2xsYXRvci5odG1sI2NvbXBhcmUoamF2YS5sYW5nLlN0cmluZywgamF2YS5sYW5nLlN0cmluZykiPjxDT0RFPkNvbGxhdG9yLmNvbXBhcmUoU3RyaW5nLCBTdHJpbmcpPC9DT0RFPjwvQT48L0RMPgorICAgIDwvREQ+Cis8L0RMPgorPEhSPgorCis8QSBOQU1FPSJyZWdpb25NYXRjaGVzKGludCwgamF2YS5sYW5nLlN0cmluZywgaW50LCBpbnQpIj48IS0tIC0tPjwvQT48SDM+CisgICAgcmVnaW9uTWF0Y2hlczwvSDM+Cis8UFJFPgorcHVibGljIGJvb2xlYW4gPEI+cmVnaW9uTWF0Y2hlczwvQj4oaW50Jm5ic3A7dG9mZnNldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iLi4vLi4vamF2YS9sYW5nL1N0cmluZy5odG1sIiB0aXRsZT0iY2xhc3MgaW4gamF2YS5sYW5nIj5TdHJpbmc8L0E+Jm5ic3A7b3RoZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCZuYnNwO29vZmZzZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCZuYnNwO2xlbik8L1BSRT4KKzxETD4KKyAgICA8REQ+VGVzdHMgaWYgdHdvIHN0cmluZyByZWdpb25zIGFyZSBlcXVhbC4KKyAgICAgICAgPHA+CisgICAgICAgICAgICBBIHN1YnN0cmluZyBvZiB0aGlzIDx0dD5TdHJpbmc8L3R0PiBvYmplY3QgaXMgY29tcGFyZWQgdG8gYSBzdWJzdHJpbmcKKyAgICAgICAgICAgIG9mIHRoZSBhcmd1bWVudCBvdGhlci4gVGhlIHJlc3VsdCBpcyB0cnVlIGlmIHRoZXNlIHN1YnN0cmluZ3MKKyAgICAgICAgICAgIHJlcHJlc2VudCBpZGVudGljYWwgY2hhcmFjdGVyIHNlcXVlbmNlcy4gVGhlIHN1YnN0cmluZyBvZiB0aGlzCisgICAgICAgICAgICA8dHQ+U3RyaW5nPC90dD4gb2JqZWN0IHRvIGJlIGNvbXBhcmVkIGJlZ2lucyBhdCBpbmRleCA8dHQ+dG9mZnNldDwvdHQ+CisgICAgICAgICAgICBhbmQgaGFzIGxlbmd0aCA8dHQ+bGVuPC90dD4uIFRoZSBzdWJzdHJpbmcgb2Ygb3RoZXIgdG8gYmUgY29tcGFyZWQKKyAgICAgICAgICAgIGJlZ2lucyBhdCBpbmRleCA8dHQ+b29mZnNldDwvdHQ+IGFuZCBoYXMgbGVuZ3RoIDx0dD5sZW48L3R0Pi4gVGhlCisgICAgICAgICAgICByZXN1bHQgaXMgPHR0PmZhbHNlPC90dD4gaWYgYW5kIG9ubHkgaWYgYXQgbGVhc3Qgb25lIG9mIHRoZSBmb2xsb3dpbmcKKyAgICAgICAgICAgIGlzIHRydWU6CisgICAgICAgIDx1bD48bGk+PHR0PnRvZmZzZXQ8L3R0PiBpcyBuZWdhdGl2ZS4KKyAgICAgICAgICAgIDxsaT48dHQ+b29mZnNldDwvdHQ+IGlzIG5lZ2F0aXZlLgorICAgICAgICAgICAgPGxpPjx0dD50b2Zmc2V0K2xlbjwvdHQ+IGlzIGdyZWF0ZXIgdGhhbiB0aGUgbGVuZ3RoIG9mIHRoaXMKKyAgICAgICAgICAgICAgICA8dHQ+U3RyaW5nPC90dD4gb2JqZWN0LgorICAgICAgICAgICAgPGxpPjx0dD5vb2Zmc2V0K2xlbjwvdHQ+IGlzIGdyZWF0ZXIgdGhhbiB0aGUgbGVuZ3RoIG9mIHRoZSBvdGhlcgorICAgICAgICAgICAgICAgIGFyZ3VtZW50LgorICAgICAgICAgICAgPGxpPlRoZXJlIGlzIHNvbWUgbm9ubmVnYXRpdmUgaW50ZWdlciA8aT5rPC9pPiBsZXNzIHRoYW4gPHR0PmxlbjwvdHQ+CisgICAgICAgICAgICAgICAgc3VjaCB0aGF0OgorICAgICAgICAgICAgICAgIDx0dD50aGlzLmNoYXJBdCh0b2Zmc2V0KzxpPms8L2k+KSZuYnNwOyE9Jm5ic3A7b3RoZXIuY2hhckF0KG9vZmZzZXQrPGk+azwvaT4pPC90dD4KKyAgICAgICAgPC91bD4KKyAgICAgICAgPFA+CisgICAgPEREPjxETD4KKyAgICA8L0RMPgorICAgIDwvREQ+CisgICAgPEREPjxETD4KKyAgICAgICAgPERUPjxCPlBhcmFtZXRlcnM6PC9CPjxERD48Q09ERT50b2Zmc2V0PC9DT0RFPiAtIHRoZSBzdGFydGluZyBvZmZzZXQgb2YgdGhlIHN1YnJlZ2lvbiBpbiB0aGlzIHN0cmluZy48REQ+PENPREU+b3RoZXI8L0NPREU+IC0gdGhlIHN0cmluZyBhcmd1bWVudC48REQ+PENPREU+b29mZnNldDwvQ09ERT4gLSB0aGUgc3RhcnRpbmcgb2Zmc2V0IG9mIHRoZSBzdWJyZWdpb24gaW4gdGhlIHN0cmluZworICAgICAgICBhcmd1bWVudC48REQ+PENPREU+bGVuPC9DT0RFPiAtIHRoZSBudW1iZXIgb2YgY2hhcmFjdGVycyB0byBjb21wYXJlLgorICAgICAgICA8RFQ+PEI+UmV0dXJuczo8L0I+PEREPjxjb2RlPnRydWU8L2NvZGU+IGlmIHRoZSBzcGVjaWZpZWQgc3VicmVnaW9uIG9mIHRoaXMgc3RyaW5nCisgICAgICAgIGV4YWN0bHkgbWF0Y2hlcyB0aGUgc3BlY2lmaWVkIHN1YnJlZ2lvbiBvZiB0aGUgc3RyaW5nIGFyZ3VtZW50OworICAgICAgICA8Y29kZT5mYWxzZTwvY29kZT4gb3RoZXJ3aXNlLjwvREw+CisgICAgPC9ERD4KKzwvREw+Cis8SFI+CisKKzxBIE5BTUU9InJlZ2lvbk1hdGNoZXMoYm9vbGVhbiwgaW50LCBqYXZhLmxhbmcuU3RyaW5nLCBpbnQsIGludCkiPjwhLS0gLS0+PC9BPjxIMz4KKyAgICByZWdpb25NYXRjaGVzPC9IMz4KKzxQUkU+CitwdWJsaWMgYm9vbGVhbiA8Qj5yZWdpb25NYXRjaGVzPC9CPihib29sZWFuJm5ic3A7aWdub3JlQ2FzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50Jm5ic3A7dG9mZnNldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iLi4vLi4vamF2YS9sYW5nL1N0cmluZy5odG1sIiB0aXRsZT0iY2xhc3MgaW4gamF2YS5sYW5nIj5TdHJpbmc8L0E+Jm5ic3A7b3RoZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCZuYnNwO29vZmZzZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCZuYnNwO2xlbik8L1BSRT4KKzxETD4KKyAgICA8REQ+VGVzdHMgaWYgdHdvIHN0cmluZyByZWdpb25zIGFyZSBlcXVhbC4KKyAgICAgICAgPHA+CisgICAgICAgICAgICBBIHN1YnN0cmluZyBvZiB0aGlzIDx0dD5TdHJpbmc8L3R0PiBvYmplY3QgaXMgY29tcGFyZWQgdG8gYSBzdWJzdHJpbmcKKyAgICAgICAgICAgIG9mIHRoZSBhcmd1bWVudCA8dHQ+b3RoZXI8L3R0Pi4gVGhlIHJlc3VsdCBpcyA8dHQ+dHJ1ZTwvdHQ+IGlmIHRoZXNlCisgICAgICAgICAgICBzdWJzdHJpbmdzIHJlcHJlc2VudCBjaGFyYWN0ZXIgc2VxdWVuY2VzIHRoYXQgYXJlIHRoZSBzYW1lLCBpZ25vcmluZworICAgICAgICAgICAgY2FzZSBpZiBhbmQgb25seSBpZiA8dHQ+aWdub3JlQ2FzZTwvdHQ+IGlzIHRydWUuIFRoZSBzdWJzdHJpbmcgb2YKKyAgICAgICAgICAgIHRoaXMgPHR0PlN0cmluZzwvdHQ+IG9iamVjdCB0byBiZSBjb21wYXJlZCBiZWdpbnMgYXQgaW5kZXgKKyAgICAgICAgICAgIDx0dD50b2Zmc2V0PC90dD4gYW5kIGhhcyBsZW5ndGggPHR0PmxlbjwvdHQ+LiBUaGUgc3Vic3RyaW5nIG9mCisgICAgICAgICAgICA8dHQ+b3RoZXI8L3R0PiB0byBiZSBjb21wYXJlZCBiZWdpbnMgYXQgaW5kZXggPHR0Pm9vZmZzZXQ8L3R0PiBhbmQKKyAgICAgICAgICAgIGhhcyBsZW5ndGggPHR0PmxlbjwvdHQ+LiBUaGUgcmVzdWx0IGlzIDx0dD5mYWxzZTwvdHQ+IGlmIGFuZCBvbmx5IGlmCisgICAgICAgICAgICBhdCBsZWFzdCBvbmUgb2YgdGhlIGZvbGxvd2luZyBpcyB0cnVlOgorICAgICAgICA8dWw+PGxpPjx0dD50b2Zmc2V0PC90dD4gaXMgbmVnYXRpdmUuCisgICAgICAgICAgICA8bGk+PHR0Pm9vZmZzZXQ8L3R0PiBpcyBuZWdhdGl2ZS4KKyAgICAgICAgICAgIDxsaT48dHQ+dG9mZnNldCtsZW48L3R0PiBpcyBncmVhdGVyIHRoYW4gdGhlIGxlbmd0aCBvZiB0aGlzCisgICAgICAgICAgICAgICAgPHR0PlN0cmluZzwvdHQ+IG9iamVjdC4KKyAgICAgICAgICAgIDxsaT48dHQ+b29mZnNldCtsZW48L3R0PiBpcyBncmVhdGVyIHRoYW4gdGhlIGxlbmd0aCBvZiB0aGUgb3RoZXIKKyAgICAgICAgICAgICAgICBhcmd1bWVudC4KKyAgICAgICAgICAgIDxsaT48dHQ+aWdub3JlQ2FzZTwvdHQ+IGlzIDx0dD5mYWxzZTwvdHQ+IGFuZCB0aGVyZSBpcyBzb21lIG5vbm5lZ2F0aXZlCisgICAgICAgICAgICAgICAgaW50ZWdlciA8aT5rPC9pPiBsZXNzIHRoYW4gPHR0PmxlbjwvdHQ+IHN1Y2ggdGhhdDoKKyAgICAgICAgICAgICAgICA8YmxvY2txdW90ZT48cHJlPgorIHRoaXMuY2hhckF0KHRvZmZzZXQraykgIT0gb3RoZXIuY2hhckF0KG9vZmZzZXQraykKKyA8L3ByZT48L2Jsb2NrcXVvdGU+CisgICAgICAgICAgICA8bGk+PHR0Pmlnbm9yZUNhc2U8L3R0PiBpcyA8dHQ+dHJ1ZTwvdHQ+IGFuZCB0aGVyZSBpcyBzb21lIG5vbm5lZ2F0aXZlCisgICAgICAgICAgICAgICAgaW50ZWdlciA8aT5rPC9pPiBsZXNzIHRoYW4gPHR0PmxlbjwvdHQ+IHN1Y2ggdGhhdDoKKyAgICAgICAgICAgICAgICA8YmxvY2txdW90ZT48cHJlPgorIENoYXJhY3Rlci50b0xvd2VyQ2FzZSh0aGlzLmNoYXJBdCh0b2Zmc2V0K2spKSAhPQorICAgICAgICAgICAgICAgQ2hhcmFjdGVyLnRvTG93ZXJDYXNlKG90aGVyLmNoYXJBdChvb2Zmc2V0K2spKQorIDwvcHJlPjwvYmxvY2txdW90ZT4KKyAgICAgICAgICAgICAgICBhbmQ6CisgICAgICAgICAgICAgICAgPGJsb2NrcXVvdGU+PHByZT4KKyBDaGFyYWN0ZXIudG9VcHBlckNhc2UodGhpcy5jaGFyQXQodG9mZnNldCtrKSkgIT0KKyAgICAgICAgIENoYXJhY3Rlci50b1VwcGVyQ2FzZShvdGhlci5jaGFyQXQob29mZnNldCtrKSkKKyA8L3ByZT48L2Jsb2NrcXVvdGU+CisgICAgICAgIDwvdWw+CisgICAgICAgIDxQPgorICAgIDxERD48REw+CisgICAgPC9ETD4KKyAgICA8L0REPgorICAgIDxERD48REw+CisgICAgICAgIDxEVD48Qj5QYXJhbWV0ZXJzOjwvQj48REQ+PENPREU+aWdub3JlQ2FzZTwvQ09ERT4gLSBpZiA8Y29kZT50cnVlPC9jb2RlPiwgaWdub3JlIGNhc2Ugd2hlbiBjb21wYXJpbmcKKyAgICAgICAgY2hhcmFjdGVycy48REQ+PENPREU+dG9mZnNldDwvQ09ERT4gLSB0aGUgc3RhcnRpbmcgb2Zmc2V0IG9mIHRoZSBzdWJyZWdpb24gaW4gdGhpcworICAgICAgICBzdHJpbmcuPEREPjxDT0RFPm90aGVyPC9DT0RFPiAtIHRoZSBzdHJpbmcgYXJndW1lbnQuPEREPjxDT0RFPm9vZmZzZXQ8L0NPREU+IC0gdGhlIHN0YXJ0aW5nIG9mZnNldCBvZiB0aGUgc3VicmVnaW9uIGluIHRoZSBzdHJpbmcKKyAgICAgICAgYXJndW1lbnQuPEREPjxDT0RFPmxlbjwvQ09ERT4gLSB0aGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMgdG8gY29tcGFyZS4KKyAgICAgICAgPERUPjxCPlJldHVybnM6PC9CPjxERD48Y29kZT50cnVlPC9jb2RlPiBpZiB0aGUgc3BlY2lmaWVkIHN1YnJlZ2lvbiBvZiB0aGlzIHN0cmluZworICAgICAgICBtYXRjaGVzIHRoZSBzcGVjaWZpZWQgc3VicmVnaW9uIG9mIHRoZSBzdHJpbmcgYXJndW1lbnQ7CisgICAgICAgIDxjb2RlPmZhbHNlPC9jb2RlPiBvdGhlcndpc2UuIFdoZXRoZXIgdGhlIG1hdGNoaW5nIGlzIGV4YWN0CisgICAgICAgIG9yIGNhc2UgaW5zZW5zaXRpdmUgZGVwZW5kcyBvbiB0aGUgPGNvZGU+aWdub3JlQ2FzZTwvY29kZT4KKyAgICAgICAgYXJndW1lbnQuPC9ETD4KKyAgICA8L0REPgorPC9ETD4KKzxIUj4KKworPEEgTkFNRT0ic3RhcnRzV2l0aChqYXZhLmxhbmcuU3RyaW5nLCBpbnQpIj48IS0tIC0tPjwvQT48SDM+CisgICAgc3RhcnRzV2l0aDwvSDM+Cis8UFJFPgorcHVibGljIGJvb2xlYW4gPEI+c3RhcnRzV2l0aDwvQj4oPEEgSFJFRj0iLi4vLi4vamF2YS9sYW5nL1N0cmluZy5odG1sIiB0aXRsZT0iY2xhc3MgaW4gamF2YS5sYW5nIj5TdHJpbmc8L0E+Jm5ic3A7cHJlZml4LAorICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQmbmJzcDt0b2Zmc2V0KTwvUFJFPgorPERMPgorICAgIDxERD5UZXN0cyBpZiB0aGUgc3Vic3RyaW5nIG9mIHRoaXMgc3RyaW5nIGJlZ2lubmluZyBhdCB0aGUKKyAgICAgICAgc3BlY2lmaWVkIGluZGV4IHN0YXJ0cyB3aXRoIHRoZSBzcGVjaWZpZWQgcHJlZml4LgorICAgICAgICA8UD4KKyAgICA8REQ+PERMPgorICAgIDwvREw+CisgICAgPC9ERD4KKyAgICA8REQ+PERMPgorICAgICAgICA8RFQ+PEI+UGFyYW1ldGVyczo8L0I+PEREPjxDT0RFPnByZWZpeDwvQ09ERT4gLSB0aGUgcHJlZml4LjxERD48Q09ERT50b2Zmc2V0PC9DT0RFPiAtIHdoZXJlIHRvIGJlZ2luIGxvb2tpbmcgaW4gdGhpcyBzdHJpbmcuCisgICAgICAgIDxEVD48Qj5SZXR1cm5zOjwvQj48REQ+PGNvZGU+dHJ1ZTwvY29kZT4gaWYgdGhlIGNoYXJhY3RlciBzZXF1ZW5jZSByZXByZXNlbnRlZCBieSB0aGUKKyAgICAgICAgYXJndW1lbnQgaXMgYSBwcmVmaXggb2YgdGhlIHN1YnN0cmluZyBvZiB0aGlzIG9iamVjdCBzdGFydGluZworICAgICAgICBhdCBpbmRleCA8Y29kZT50b2Zmc2V0PC9jb2RlPjsgPGNvZGU+ZmFsc2U8L2NvZGU+IG90aGVyd2lzZS4KKyAgICAgICAgVGhlIHJlc3VsdCBpcyA8Y29kZT5mYWxzZTwvY29kZT4gaWYgPGNvZGU+dG9mZnNldDwvY29kZT4gaXMKKyAgICAgICAgbmVnYXRpdmUgb3IgZ3JlYXRlciB0aGFuIHRoZSBsZW5ndGggb2YgdGhpcworICAgICAgICA8Y29kZT5TdHJpbmc8L2NvZGU+IG9iamVjdDsgb3RoZXJ3aXNlIHRoZSByZXN1bHQgaXMgdGhlIHNhbWUKKyAgICAgICAgYXMgdGhlIHJlc3VsdCBvZiB0aGUgZXhwcmVzc2lvbgorICAgICAgICAgIDxwcmU+CisgICAgICAgICAgdGhpcy5zdWJzdHJpbmcodG9mZnNldCkuc3RhcnRzV2l0aChwcmVmaXgpCisgICAgICAgICAgPC9wcmU+PC9ETD4KKyAgICA8L0REPgorPC9ETD4KKzxIUj4KKworPEEgTkFNRT0ic3RhcnRzV2l0aChqYXZhLmxhbmcuU3RyaW5nKSI+PCEtLSAtLT48L0E+PEgzPgorICAgIHN0YXJ0c1dpdGg8L0gzPgorPFBSRT4KK3B1YmxpYyBib29sZWFuIDxCPnN0YXJ0c1dpdGg8L0I+KDxBIEhSRUY9Ii4uLy4uL2phdmEvbGFuZy9TdHJpbmcuaHRtbCIgdGl0bGU9ImNsYXNzIGluIGphdmEubGFuZyI+U3RyaW5nPC9BPiZuYnNwO3ByZWZpeCk8L1BSRT4KKzxETD4KKyAgICA8REQ+VGVzdHMgaWYgdGhpcyBzdHJpbmcgc3RhcnRzIHdpdGggdGhlIHNwZWNpZmllZCBwcmVmaXguCisgICAgICAgIDxQPgorICAgIDxERD48REw+CisgICAgPC9ETD4KKyAgICA8L0REPgorICAgIDxERD48REw+CisgICAgICAgIDxEVD48Qj5QYXJhbWV0ZXJzOjwvQj48REQ+PENPREU+cHJlZml4PC9DT0RFPiAtIHRoZSBwcmVmaXguCisgICAgICAgIDxEVD48Qj5SZXR1cm5zOjwvQj48REQ+PGNvZGU+dHJ1ZTwvY29kZT4gaWYgdGhlIGNoYXJhY3RlciBzZXF1ZW5jZSByZXByZXNlbnRlZCBieSB0aGUKKyAgICAgICAgYXJndW1lbnQgaXMgYSBwcmVmaXggb2YgdGhlIGNoYXJhY3RlciBzZXF1ZW5jZSByZXByZXNlbnRlZCBieQorICAgICAgICB0aGlzIHN0cmluZzsgPGNvZGU+ZmFsc2U8L2NvZGU+IG90aGVyd2lzZS4KKyAgICAgICAgTm90ZSBhbHNvIHRoYXQgPGNvZGU+dHJ1ZTwvY29kZT4gd2lsbCBiZSByZXR1cm5lZCBpZiB0aGUKKyAgICAgICAgYXJndW1lbnQgaXMgYW4gZW1wdHkgc3RyaW5nIG9yIGlzIGVxdWFsIHRvIHRoaXMKKyAgICAgICAgPGNvZGU+U3RyaW5nPC9jb2RlPiBvYmplY3QgYXMgZGV0ZXJtaW5lZCBieSB0aGUKKyAgICAgICAgPEEgSFJFRj0iLi4vLi4vamF2YS9sYW5nL1N0cmluZy5odG1sI2VxdWFscyhqYXZhLmxhbmcuT2JqZWN0KSI+PENPREU+ZXF1YWxzKE9iamVjdCk8L0NPREU+PC9BPiBtZXRob2QuPERUPjxCPlNpbmNlOjwvQj48L0RUPgorICAgICAgICA8REQ+MS4gMDwvREQ+CisgICAgPC9ETD4KKyAgICA8L0REPgorPC9ETD4KKzxIUj4KKworPEEgTkFNRT0iZW5kc1dpdGgoamF2YS5sYW5nLlN0cmluZykiPjwhLS0gLS0+PC9BPjxIMz4KKyAgICBlbmRzV2l0aDwvSDM+Cis8UFJFPgorcHVibGljIGJvb2xlYW4gPEI+ZW5kc1dpdGg8L0I+KDxBIEhSRUY9Ii4uLy4uL2phdmEvbGFuZy9TdHJpbmcuaHRtbCIgdGl0bGU9ImNsYXNzIGluIGphdmEubGFuZyI+U3RyaW5nPC9BPiZuYnNwO3N1ZmZpeCk8L1BSRT4KKzxETD4KKyAgICA8REQ+VGVzdHMgaWYgdGhpcyBzdHJpbmcgZW5kcyB3aXRoIHRoZSBzcGVjaWZpZWQgc3VmZml4LgorICAgICAgICA8UD4KKyAgICA8REQ+PERMPgorICAgIDwvREw+CisgICAgPC9ERD4KKyAgICA8REQ+PERMPgorICAgICAgICA8RFQ+PEI+UGFyYW1ldGVyczo8L0I+PEREPjxDT0RFPnN1ZmZpeDwvQ09ERT4gLSB0aGUgc3VmZml4LgorICAgICAgICA8RFQ+PEI+UmV0dXJuczo8L0I+PEREPjxjb2RlPnRydWU8L2NvZGU+IGlmIHRoZSBjaGFyYWN0ZXIgc2VxdWVuY2UgcmVwcmVzZW50ZWQgYnkgdGhlCisgICAgICAgIGFyZ3VtZW50IGlzIGEgc3VmZml4IG9mIHRoZSBjaGFyYWN0ZXIgc2VxdWVuY2UgcmVwcmVzZW50ZWQgYnkKKyAgICAgICAgdGhpcyBvYmplY3Q7IDxjb2RlPmZhbHNlPC9jb2RlPiBvdGhlcndpc2UuIE5vdGUgdGhhdCB0aGUKKyAgICAgICAgcmVzdWx0IHdpbGwgYmUgPGNvZGU+dHJ1ZTwvY29kZT4gaWYgdGhlIGFyZ3VtZW50IGlzIHRoZQorICAgICAgICBlbXB0eSBzdHJpbmcgb3IgaXMgZXF1YWwgdG8gdGhpcyA8Y29kZT5TdHJpbmc8L2NvZGU+IG9iamVjdAorICAgICAgICBhcyBkZXRlcm1pbmVkIGJ5IHRoZSA8QSBIUkVGPSIuLi8uLi9qYXZhL2xhbmcvU3RyaW5nLmh0bWwjZXF1YWxzKGphdmEubGFuZy5PYmplY3QpIj48Q09ERT5lcXVhbHMoT2JqZWN0KTwvQ09ERT48L0E+IG1ldGhvZC48L0RMPgorICAgIDwvREQ+Cis8L0RMPgorPEhSPgorCis8QSBOQU1FPSJoYXNoQ29kZSgpIj48IS0tIC0tPjwvQT48SDM+CisgICAgaGFzaENvZGU8L0gzPgorPFBSRT4KK3B1YmxpYyBpbnQgPEI+aGFzaENvZGU8L0I+KCk8L1BSRT4KKzxETD4KKyAgICA8REQ+UmV0dXJucyBhIGhhc2ggY29kZSBmb3IgdGhpcyBzdHJpbmcuIFRoZSBoYXNoIGNvZGUgZm9yIGEKKyAgICAgICAgPGNvZGU+U3RyaW5nPC9jb2RlPiBvYmplY3QgaXMgY29tcHV0ZWQgYXMKKyAgICAgICAgPGJsb2NrcXVvdGU+PHByZT4KKyBzWzBdKjMxXihuLTEpICsgc1sxXSozMV4obi0yKSArIC4uLiArIHNbbi0xXQorIDwvcHJlPjwvYmxvY2txdW90ZT4KKyAgICAgICAgdXNpbmcgPGNvZGU+aW50PC9jb2RlPiBhcml0aG1ldGljLCB3aGVyZSA8Y29kZT5zW2ldPC9jb2RlPiBpcyB0aGUKKyAgICAgICAgPGk+aTwvaT50aCBjaGFyYWN0ZXIgb2YgdGhlIHN0cmluZywgPGNvZGU+bjwvY29kZT4gaXMgdGhlIGxlbmd0aCBvZgorICAgICAgICB0aGUgc3RyaW5nLCBhbmQgPGNvZGU+XjwvY29kZT4gaW5kaWNhdGVzIGV4cG9uZW50aWF0aW9uLgorICAgICAgICAoVGhlIGhhc2ggdmFsdWUgb2YgdGhlIGVtcHR5IHN0cmluZyBpcyB6ZXJvLikKKyAgICAgICAgPFA+CisgICAgPEREPjxETD4KKyAgICAgICAgPERUPjxCPk92ZXJyaWRlczo8L0I+PEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uL2phdmEvbGFuZy9PYmplY3QuaHRtbCNoYXNoQ29kZSgpIj5oYXNoQ29kZTwvQT48L0NPREU+IGluIGNsYXNzIDxDT0RFPjxBIEhSRUY9Ii4uLy4uL2phdmEvbGFuZy9PYmplY3QuaHRtbCIgdGl0bGU9ImNsYXNzIGluIGphdmEubGFuZyI+T2JqZWN0PC9BPjwvQ09ERT48L0RMPgorICAgIDwvREQ+CisgICAgPEREPjxETD4KKworICAgICAgICA8RFQ+PEI+UmV0dXJuczo8L0I+PEREPmEgaGFzaCBjb2RlIHZhbHVlIGZvciB0aGlzIG9iamVjdC48RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjZXF1YWxzKGphdmEubGFuZy5PYmplY3QpIj48Q09ERT5PYmplY3QuZXF1YWxzKGphdmEubGFuZy5PYmplY3QpPC9DT0RFPjwvQT4sCisgICAgICAgIDxBIEhSRUY9Ii4uLy4uL2phdmEvdXRpbC9IYXNodGFibGUuaHRtbCIgdGl0bGU9ImNsYXNzIGluIGphdmEudXRpbCI+PENPREU+SGFzaHRhYmxlPC9DT0RFPjwvQT48L0RMPgorICAgIDwvREQ+Cis8L0RMPgorPEhSPgorCis8QSBOQU1FPSJpbmRleE9mKGludCkiPjwhLS0gLS0+PC9BPjxIMz4KKyAgICBpbmRleE9mPC9IMz4KKzxQUkU+CitwdWJsaWMgaW50IDxCPmluZGV4T2Y8L0I+KGludCZuYnNwO2NoKTwvUFJFPgorPERMPgorICAgIDxERD5SZXR1cm5zIHRoZSBpbmRleCB3aXRoaW4gdGhpcyBzdHJpbmcgb2YgdGhlIGZpcnN0IG9jY3VycmVuY2Ugb2YKKyAgICAgICAgdGhlIHNwZWNpZmllZCBjaGFyYWN0ZXIuIElmIGEgY2hhcmFjdGVyIHdpdGggdmFsdWUKKyAgICAgICAgPGNvZGU+Y2g8L2NvZGU+IG9jY3VycyBpbiB0aGUgY2hhcmFjdGVyIHNlcXVlbmNlIHJlcHJlc2VudGVkIGJ5CisgICAgICAgIHRoaXMgPGNvZGU+U3RyaW5nPC9jb2RlPiBvYmplY3QsIHRoZW4gdGhlIGluZGV4IChpbiBVbmljb2RlCisgICAgICAgIGNvZGUgdW5pdHMpIG9mIHRoZSBmaXJzdCBzdWNoIG9jY3VycmVuY2UgaXMgcmV0dXJuZWQuIEZvcgorICAgICAgICB2YWx1ZXMgb2YgPGNvZGU+Y2g8L2NvZGU+IGluIHRoZSByYW5nZSBmcm9tIDAgdG8gMHhGRkZGCisgICAgICAgIChpbmNsdXNpdmUpLCB0aGlzIGlzIHRoZSBzbWFsbGVzdCB2YWx1ZSA8aT5rPC9pPiBzdWNoIHRoYXQ6CisgICAgICAgIDxibG9ja3F1b3RlPjxwcmU+CisgdGhpcy5jaGFyQXQoPGk+azwvaT4pID09IGNoCisgPC9wcmU+PC9ibG9ja3F1b3RlPgorICAgICAgICBpcyB0cnVlLiBGb3Igb3RoZXIgdmFsdWVzIG9mIDxjb2RlPmNoPC9jb2RlPiwgaXQgaXMgdGhlCisgICAgICAgIHNtYWxsZXN0IHZhbHVlIDxpPms8L2k+IHN1Y2ggdGhhdDoKKyAgICAgICAgPGJsb2NrcXVvdGU+PHByZT4KKyB0aGlzLmNvZGVQb2ludEF0KDxpPms8L2k+KSA9PSBjaAorIDwvcHJlPjwvYmxvY2txdW90ZT4KKyAgICAgICAgaXMgdHJ1ZS4gSW4gZWl0aGVyIGNhc2UsIGlmIG5vIHN1Y2ggY2hhcmFjdGVyIG9jY3VycyBpbiB0aGlzCisgICAgICAgIHN0cmluZywgdGhlbiA8Y29kZT4tMTwvY29kZT4gaXMgcmV0dXJuZWQuCisgICAgICAgIDxQPgorICAgIDxERD48REw+CisgICAgPC9ETD4KKyAgICA8L0REPgorICAgIDxERD48REw+CisgICAgICAgIDxEVD48Qj5QYXJhbWV0ZXJzOjwvQj48REQ+PENPREU+Y2g8L0NPREU+IC0gYSBjaGFyYWN0ZXIgKFVuaWNvZGUgY29kZSBwb2ludCkuCisgICAgICAgIDxEVD48Qj5SZXR1cm5zOjwvQj48REQ+dGhlIGluZGV4IG9mIHRoZSBmaXJzdCBvY2N1cnJlbmNlIG9mIHRoZSBjaGFyYWN0ZXIgaW4gdGhlCisgICAgICAgIGNoYXJhY3RlciBzZXF1ZW5jZSByZXByZXNlbnRlZCBieSB0aGlzIG9iamVjdCwgb3IKKyAgICAgICAgPGNvZGU+LTE8L2NvZGU+IGlmIHRoZSBjaGFyYWN0ZXIgZG9lcyBub3Qgb2NjdXIuPC9ETD4KKyAgICA8L0REPgorPC9ETD4KKzxIUj4KKworPEEgTkFNRT0iaW5kZXhPZihpbnQsIGludCkiPjwhLS0gLS0+PC9BPjxIMz4KKyAgICBpbmRleE9mPC9IMz4KKzxQUkU+CitwdWJsaWMgaW50IDxCPmluZGV4T2Y8L0I+KGludCZuYnNwO2NoLAorICAgICAgICAgICAgICAgICAgIGludCZuYnNwO2Zyb21JbmRleCk8L1BSRT4KKzxETD4KKyAgICA8REQ+UmV0dXJucyB0aGUgaW5kZXggd2l0aGluIHRoaXMgc3RyaW5nIG9mIHRoZSBmaXJzdCBvY2N1cnJlbmNlIG9mIHRoZQorICAgICAgICBzcGVjaWZpZWQgY2hhcmFjdGVyLCBzdGFydGluZyB0aGUgc2VhcmNoIGF0IHRoZSBzcGVjaWZpZWQgaW5kZXguCisgICAgICAgIDxwPgorICAgICAgICAgICAgSWYgYSBjaGFyYWN0ZXIgd2l0aCB2YWx1ZSA8Y29kZT5jaDwvY29kZT4gb2NjdXJzIGluIHRoZQorICAgICAgICAgICAgY2hhcmFjdGVyIHNlcXVlbmNlIHJlcHJlc2VudGVkIGJ5IHRoaXMgPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAgICAgICAgb2JqZWN0IGF0IGFuIGluZGV4IG5vIHNtYWxsZXIgdGhhbiA8Y29kZT5mcm9tSW5kZXg8L2NvZGU+LCB0aGVuCisgICAgICAgICAgICB0aGUgaW5kZXggb2YgdGhlIGZpcnN0IHN1Y2ggb2NjdXJyZW5jZSBpcyByZXR1cm5lZC4gRm9yIHZhbHVlcworICAgICAgICAgICAgb2YgPGNvZGU+Y2g8L2NvZGU+IGluIHRoZSByYW5nZSBmcm9tIDAgdG8gMHhGRkZGIChpbmNsdXNpdmUpLAorICAgICAgICAgICAgdGhpcyBpcyB0aGUgc21hbGxlc3QgdmFsdWUgPGk+azwvaT4gc3VjaCB0aGF0OgorICAgICAgICA8YmxvY2txdW90ZT48cHJlPgorICh0aGlzLmNoYXJBdCg8aT5rPC9pPikgPT0gY2gpICYmICg8aT5rPC9pPiAmZ3Q7PSBmcm9tSW5kZXgpCisgPC9wcmU+PC9ibG9ja3F1b3RlPgorICAgICAgICBpcyB0cnVlLiBGb3Igb3RoZXIgdmFsdWVzIG9mIDxjb2RlPmNoPC9jb2RlPiwgaXQgaXMgdGhlCisgICAgICAgIHNtYWxsZXN0IHZhbHVlIDxpPms8L2k+IHN1Y2ggdGhhdDoKKyAgICAgICAgPGJsb2NrcXVvdGU+PHByZT4KKyAodGhpcy5jb2RlUG9pbnRBdCg8aT5rPC9pPikgPT0gY2gpICYmICg8aT5rPC9pPiAmZ3Q7PSBmcm9tSW5kZXgpCisgPC9wcmU+PC9ibG9ja3F1b3RlPgorICAgICAgICBpcyB0cnVlLiBJbiBlaXRoZXIgY2FzZSwgaWYgbm8gc3VjaCBjaGFyYWN0ZXIgb2NjdXJzIGluIHRoaXMKKyAgICAgICAgc3RyaW5nIGF0IG9yIGFmdGVyIHBvc2l0aW9uIDxjb2RlPmZyb21JbmRleDwvY29kZT4sIHRoZW4KKyAgICAgICAgPGNvZGU+LTE8L2NvZGU+IGlzIHJldHVybmVkLgorCisgICAgICAgIDxwPgorICAgICAgICAgICAgVGhlcmUgaXMgbm8gcmVzdHJpY3Rpb24gb24gdGhlIHZhbHVlIG9mIDxjb2RlPmZyb21JbmRleDwvY29kZT4uIElmIGl0CisgICAgICAgICAgICBpcyBuZWdhdGl2ZSwgaXQgaGFzIHRoZSBzYW1lIGVmZmVjdCBhcyBpZiBpdCB3ZXJlIHplcm86IHRoaXMgZW50aXJlCisgICAgICAgICAgICBzdHJpbmcgbWF5IGJlIHNlYXJjaGVkLiBJZiBpdCBpcyBncmVhdGVyIHRoYW4gdGhlIGxlbmd0aCBvZiB0aGlzCisgICAgICAgICAgICBzdHJpbmcsIGl0IGhhcyB0aGUgc2FtZSBlZmZlY3QgYXMgaWYgaXQgd2VyZSBlcXVhbCB0byB0aGUgbGVuZ3RoIG9mCisgICAgICAgICAgICB0aGlzIHN0cmluZzogPGNvZGU+LTE8L2NvZGU+IGlzIHJldHVybmVkLgorCisgICAgICAgIDxwPkFsbCBpbmRpY2VzIGFyZSBzcGVjaWZpZWQgaW4gPGNvZGU+Y2hhcjwvY29kZT4gdmFsdWVzCisgICAgICAgICAgICAoVW5pY29kZSBjb2RlIHVuaXRzKS4KKyAgICAgICAgPFA+CisgICAgPEREPjxETD4KKyAgICA8L0RMPgorICAgIDwvREQ+CisgICAgPEREPjxETD4KKyAgICAgICAgPERUPjxCPlBhcmFtZXRlcnM6PC9CPjxERD48Q09ERT5jaDwvQ09ERT4gLSBhIGNoYXJhY3RlciAoVW5pY29kZSBjb2RlIHBvaW50KS48REQ+PENPREU+ZnJvbUluZGV4PC9DT0RFPiAtIHRoZSBpbmRleCB0byBzdGFydCB0aGUgc2VhcmNoIGZyb20uCisgICAgICAgIDxEVD48Qj5SZXR1cm5zOjwvQj48REQ+dGhlIGluZGV4IG9mIHRoZSBmaXJzdCBvY2N1cnJlbmNlIG9mIHRoZSBjaGFyYWN0ZXIgaW4gdGhlCisgICAgICAgIGNoYXJhY3RlciBzZXF1ZW5jZSByZXByZXNlbnRlZCBieSB0aGlzIG9iamVjdCB0aGF0IGlzIGdyZWF0ZXIKKyAgICAgICAgdGhhbiBvciBlcXVhbCB0byA8Y29kZT5mcm9tSW5kZXg8L2NvZGU+LCBvciA8Y29kZT4tMTwvY29kZT4KKyAgICAgICAgaWYgdGhlIGNoYXJhY3RlciBkb2VzIG5vdCBvY2N1ci48L0RMPgorICAgIDwvREQ+Cis8L0RMPgorPEhSPgorCis8QSBOQU1FPSJsYXN0SW5kZXhPZihpbnQpIj48IS0tIC0tPjwvQT48SDM+CisgICAgbGFzdEluZGV4T2Y8L0gzPgorPFBSRT4KK3B1YmxpYyBpbnQgPEI+bGFzdEluZGV4T2Y8L0I+KGludCZuYnNwO2NoKTwvUFJFPgorPERMPgorICAgIDxERD5SZXR1cm5zIHRoZSBpbmRleCB3aXRoaW4gdGhpcyBzdHJpbmcgb2YgdGhlIGxhc3Qgb2NjdXJyZW5jZSBvZgorICAgICAgICB0aGUgc3BlY2lmaWVkIGNoYXJhY3Rlci4gRm9yIHZhbHVlcyBvZiA8Y29kZT5jaDwvY29kZT4gaW4gdGhlCisgICAgICAgIHJhbmdlIGZyb20gMCB0byAweEZGRkYgKGluY2x1c2l2ZSksIHRoZSBpbmRleCAoaW4gVW5pY29kZSBjb2RlCisgICAgICAgIHVuaXRzKSByZXR1cm5lZCBpcyB0aGUgbGFyZ2VzdCB2YWx1ZSA8aT5rPC9pPiBzdWNoIHRoYXQ6CisgICAgICAgIDxibG9ja3F1b3RlPjxwcmU+CisgdGhpcy5jaGFyQXQoPGk+azwvaT4pID09IGNoCisgPC9wcmU+PC9ibG9ja3F1b3RlPgorICAgICAgICBpcyB0cnVlLiBGb3Igb3RoZXIgdmFsdWVzIG9mIDxjb2RlPmNoPC9jb2RlPiwgaXQgaXMgdGhlCisgICAgICAgIGxhcmdlc3QgdmFsdWUgPGk+azwvaT4gc3VjaCB0aGF0OgorICAgICAgICA8YmxvY2txdW90ZT48cHJlPgorIHRoaXMuY29kZVBvaW50QXQoPGk+azwvaT4pID09IGNoCisgPC9wcmU+PC9ibG9ja3F1b3RlPgorICAgICAgICBpcyB0cnVlLiAgSW4gZWl0aGVyIGNhc2UsIGlmIG5vIHN1Y2ggY2hhcmFjdGVyIG9jY3VycyBpbiB0aGlzCisgICAgICAgIHN0cmluZywgdGhlbiA8Y29kZT4tMTwvY29kZT4gaXMgcmV0dXJuZWQuICBUaGUKKyAgICAgICAgPGNvZGU+U3RyaW5nPC9jb2RlPiBpcyBzZWFyY2hlZCBiYWNrd2FyZHMgc3RhcnRpbmcgYXQgdGhlIGxhc3QKKyAgICAgICAgY2hhcmFjdGVyLgorICAgICAgICA8UD4KKyAgICA8REQ+PERMPgorICAgIDwvREw+CisgICAgPC9ERD4KKyAgICA8REQ+PERMPgorICAgICAgICA8RFQ+PEI+UGFyYW1ldGVyczo8L0I+PEREPjxDT0RFPmNoPC9DT0RFPiAtIGEgY2hhcmFjdGVyIChVbmljb2RlIGNvZGUgcG9pbnQpLgorICAgICAgICA8RFQ+PEI+UmV0dXJuczo8L0I+PEREPnRoZSBpbmRleCBvZiB0aGUgbGFzdCBvY2N1cnJlbmNlIG9mIHRoZSBjaGFyYWN0ZXIgaW4gdGhlCisgICAgICAgIGNoYXJhY3RlciBzZXF1ZW5jZSByZXByZXNlbnRlZCBieSB0aGlzIG9iamVjdCwgb3IKKyAgICAgICAgPGNvZGU+LTE8L2NvZGU+IGlmIHRoZSBjaGFyYWN0ZXIgZG9lcyBub3Qgb2NjdXIuPC9ETD4KKyAgICA8L0REPgorPC9ETD4KKzxIUj4KKworPEEgTkFNRT0ibGFzdEluZGV4T2YoaW50LCBpbnQpIj48IS0tIC0tPjwvQT48SDM+CisgICAgbGFzdEluZGV4T2Y8L0gzPgorPFBSRT4KK3B1YmxpYyBpbnQgPEI+bGFzdEluZGV4T2Y8L0I+KGludCZuYnNwO2NoLAorICAgICAgICAgICAgICAgICAgICAgICBpbnQmbmJzcDtmcm9tSW5kZXgpPC9QUkU+Cis8REw+CisgICAgPEREPlJldHVybnMgdGhlIGluZGV4IHdpdGhpbiB0aGlzIHN0cmluZyBvZiB0aGUgbGFzdCBvY2N1cnJlbmNlIG9mCisgICAgICAgIHRoZSBzcGVjaWZpZWQgY2hhcmFjdGVyLCBzZWFyY2hpbmcgYmFja3dhcmQgc3RhcnRpbmcgYXQgdGhlCisgICAgICAgIHNwZWNpZmllZCBpbmRleC4gRm9yIHZhbHVlcyBvZiA8Y29kZT5jaDwvY29kZT4gaW4gdGhlIHJhbmdlCisgICAgICAgIGZyb20gMCB0byAweEZGRkYgKGluY2x1c2l2ZSksIHRoZSBpbmRleCByZXR1cm5lZCBpcyB0aGUgbGFyZ2VzdAorICAgICAgICB2YWx1ZSA8aT5rPC9pPiBzdWNoIHRoYXQ6CisgICAgICAgIDxibG9ja3F1b3RlPjxwcmU+CisgKHRoaXMuY2hhckF0KDxpPms8L2k+KSA9PSBjaCkgJiYgKDxpPms8L2k+ICZsdDs9IGZyb21JbmRleCkKKyA8L3ByZT48L2Jsb2NrcXVvdGU+CisgICAgICAgIGlzIHRydWUuIEZvciBvdGhlciB2YWx1ZXMgb2YgPGNvZGU+Y2g8L2NvZGU+LCBpdCBpcyB0aGUKKyAgICAgICAgbGFyZ2VzdCB2YWx1ZSA8aT5rPC9pPiBzdWNoIHRoYXQ6CisgICAgICAgIDxibG9ja3F1b3RlPjxwcmU+CisgKHRoaXMuY29kZVBvaW50QXQoPGk+azwvaT4pID09IGNoKSAmJiAoPGk+azwvaT4gJmx0Oz0gZnJvbUluZGV4KQorIDwvcHJlPjwvYmxvY2txdW90ZT4KKyAgICAgICAgaXMgdHJ1ZS4gSW4gZWl0aGVyIGNhc2UsIGlmIG5vIHN1Y2ggY2hhcmFjdGVyIG9jY3VycyBpbiB0aGlzCisgICAgICAgIHN0cmluZyBhdCBvciBiZWZvcmUgcG9zaXRpb24gPGNvZGU+ZnJvbUluZGV4PC9jb2RlPiwgdGhlbgorICAgICAgICA8Y29kZT4tMTwvY29kZT4gaXMgcmV0dXJuZWQuCisKKyAgICAgICAgPHA+QWxsIGluZGljZXMgYXJlIHNwZWNpZmllZCBpbiA8Y29kZT5jaGFyPC9jb2RlPiB2YWx1ZXMKKyAgICAgICAgICAgIChVbmljb2RlIGNvZGUgdW5pdHMpLgorICAgICAgICA8UD4KKyAgICA8REQ+PERMPgorICAgIDwvREw+CisgICAgPC9ERD4KKyAgICA8REQ+PERMPgorICAgICAgICA8RFQ+PEI+UGFyYW1ldGVyczo8L0I+PEREPjxDT0RFPmNoPC9DT0RFPiAtIGEgY2hhcmFjdGVyIChVbmljb2RlIGNvZGUgcG9pbnQpLjxERD48Q09ERT5mcm9tSW5kZXg8L0NPREU+IC0gdGhlIGluZGV4IHRvIHN0YXJ0IHRoZSBzZWFyY2ggZnJvbS4gVGhlcmUgaXMgbm8KKyAgICAgICAgcmVzdHJpY3Rpb24gb24gdGhlIHZhbHVlIG9mIDxjb2RlPmZyb21JbmRleDwvY29kZT4uIElmIGl0IGlzCisgICAgICAgIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byB0aGUgbGVuZ3RoIG9mIHRoaXMgc3RyaW5nLCBpdCBoYXMKKyAgICAgICAgdGhlIHNhbWUgZWZmZWN0IGFzIGlmIGl0IHdlcmUgZXF1YWwgdG8gb25lIGxlc3MgdGhhbiB0aGUKKyAgICAgICAgbGVuZ3RoIG9mIHRoaXMgc3RyaW5nOiB0aGlzIGVudGlyZSBzdHJpbmcgbWF5IGJlIHNlYXJjaGVkLgorICAgICAgICBJZiBpdCBpcyBuZWdhdGl2ZSwgaXQgaGFzIHRoZSBzYW1lIGVmZmVjdCBhcyBpZiBpdCB3ZXJlIC0xOgorICAgICAgICAtMSBpcyByZXR1cm5lZC4KKyAgICAgICAgPERUPjxCPlJldHVybnM6PC9CPjxERD50aGUgaW5kZXggb2YgdGhlIGxhc3Qgb2NjdXJyZW5jZSBvZiB0aGUgY2hhcmFjdGVyIGluIHRoZQorICAgICAgICBjaGFyYWN0ZXIgc2VxdWVuY2UgcmVwcmVzZW50ZWQgYnkgdGhpcyBvYmplY3QgdGhhdCBpcyBsZXNzCisgICAgICAgIHRoYW4gb3IgZXF1YWwgdG8gPGNvZGU+ZnJvbUluZGV4PC9jb2RlPiwgb3IgPGNvZGU+LTE8L2NvZGU+CisgICAgICAgIGlmIHRoZSBjaGFyYWN0ZXIgZG9lcyBub3Qgb2NjdXIgYmVmb3JlIHRoYXQgcG9pbnQuPC9ETD4KKyAgICA8L0REPgorPC9ETD4KKzxIUj4KKworPEEgTkFNRT0iaW5kZXhPZihqYXZhLmxhbmcuU3RyaW5nKSI+PCEtLSAtLT48L0E+PEgzPgorICAgIGluZGV4T2Y8L0gzPgorPFBSRT4KK3B1YmxpYyBpbnQgPEI+aW5kZXhPZjwvQj4oPEEgSFJFRj0iLi4vLi4vamF2YS9sYW5nL1N0cmluZy5odG1sIiB0aXRsZT0iY2xhc3MgaW4gamF2YS5sYW5nIj5TdHJpbmc8L0E+Jm5ic3A7c3RyKTwvUFJFPgorPERMPgorICAgIDxERD5SZXR1cm5zIHRoZSBpbmRleCB3aXRoaW4gdGhpcyBzdHJpbmcgb2YgdGhlIGZpcnN0IG9jY3VycmVuY2Ugb2YgdGhlCisgICAgICAgIHNwZWNpZmllZCBzdWJzdHJpbmcuIFRoZSBpbnRlZ2VyIHJldHVybmVkIGlzIHRoZSBzbWFsbGVzdCB2YWx1ZQorICAgICAgICA8aT5rPC9pPiBzdWNoIHRoYXQ6CisgICAgICAgIDxibG9ja3F1b3RlPjxwcmU+CisgdGhpcy5zdGFydHNXaXRoKHN0ciwgPGk+azwvaT4pCisgPC9wcmU+PC9ibG9ja3F1b3RlPgorICAgICAgICBpcyA8Y29kZT50cnVlPC9jb2RlPi4KKyAgICAgICAgPFA+CisgICAgPEREPjxETD4KKyAgICA8L0RMPgorICAgIDwvREQ+CisgICAgPEREPjxETD4KKyAgICAgICAgPERUPjxCPlBhcmFtZXRlcnM6PC9CPjxERD48Q09ERT5zdHI8L0NPREU+IC0gYW55IHN0cmluZy4KKyAgICAgICAgPERUPjxCPlJldHVybnM6PC9CPjxERD5pZiB0aGUgc3RyaW5nIGFyZ3VtZW50IG9jY3VycyBhcyBhIHN1YnN0cmluZyB3aXRoaW4gdGhpcworICAgICAgICBvYmplY3QsIHRoZW4gdGhlIGluZGV4IG9mIHRoZSBmaXJzdCBjaGFyYWN0ZXIgb2YgdGhlIGZpcnN0CisgICAgICAgIHN1Y2ggc3Vic3RyaW5nIGlzIHJldHVybmVkOyBpZiBpdCBkb2VzIG5vdCBvY2N1ciBhcyBhCisgICAgICAgIHN1YnN0cmluZywgPGNvZGU+LTE8L2NvZGU+IGlzIHJldHVybmVkLjwvREw+CisgICAgPC9ERD4KKzwvREw+Cis8SFI+CisKKzxBIE5BTUU9ImluZGV4T2YoamF2YS5sYW5nLlN0cmluZywgaW50KSI+PCEtLSAtLT48L0E+PEgzPgorICAgIGluZGV4T2Y8L0gzPgorPFBSRT4KK3B1YmxpYyBpbnQgPEI+aW5kZXhPZjwvQj4oPEEgSFJFRj0iLi4vLi4vamF2YS9sYW5nL1N0cmluZy5odG1sIiB0aXRsZT0iY2xhc3MgaW4gamF2YS5sYW5nIj5TdHJpbmc8L0E+Jm5ic3A7c3RyLAorICAgICAgICAgICAgICAgICAgIGludCZuYnNwO2Zyb21JbmRleCk8L1BSRT4KKzxETD4KKyAgICA8REQ+UmV0dXJucyB0aGUgaW5kZXggd2l0aGluIHRoaXMgc3RyaW5nIG9mIHRoZSBmaXJzdCBvY2N1cnJlbmNlIG9mIHRoZQorICAgICAgICBzcGVjaWZpZWQgc3Vic3RyaW5nLCBzdGFydGluZyBhdCB0aGUgc3BlY2lmaWVkIGluZGV4LiAgVGhlIGludGVnZXIKKyAgICAgICAgcmV0dXJuZWQgaXMgdGhlIHNtYWxsZXN0IHZhbHVlIDx0dD5rPC90dD4gZm9yIHdoaWNoOgorICAgICAgICA8YmxvY2txdW90ZT48cHJlPgorICAgICBrICZndDs9IE1hdGgubWluKGZyb21JbmRleCwgdGhpcy5sZW5ndGgoKSkgJiYgdGhpcy5zdGFydHNXaXRoKHN0ciwgaykKKyA8L3ByZT48L2Jsb2NrcXVvdGU+CisgICAgICAgIElmIG5vIHN1Y2ggdmFsdWUgb2YgPGk+azwvaT4gZXhpc3RzLCB0aGVuIC0xIGlzIHJldHVybmVkLgorICAgICAgICA8UD4KKyAgICA8REQ+PERMPgorICAgIDwvREw+CisgICAgPC9ERD4KKyAgICA8REQ+PERMPgorICAgICAgICA8RFQ+PEI+UGFyYW1ldGVyczo8L0I+PEREPjxDT0RFPnN0cjwvQ09ERT4gLSB0aGUgc3Vic3RyaW5nIGZvciB3aGljaCB0byBzZWFyY2guPEREPjxDT0RFPmZyb21JbmRleDwvQ09ERT4gLSB0aGUgaW5kZXggZnJvbSB3aGljaCB0byBzdGFydCB0aGUgc2VhcmNoLgorICAgICAgICA8RFQ+PEI+UmV0dXJuczo8L0I+PEREPnRoZSBpbmRleCB3aXRoaW4gdGhpcyBzdHJpbmcgb2YgdGhlIGZpcnN0IG9jY3VycmVuY2Ugb2YgdGhlCisgICAgICAgIHNwZWNpZmllZCBzdWJzdHJpbmcsIHN0YXJ0aW5nIGF0IHRoZSBzcGVjaWZpZWQgaW5kZXguPC9ETD4KKyAgICA8L0REPgorPC9ETD4KKzxIUj4KKworPEEgTkFNRT0ibGFzdEluZGV4T2YoamF2YS5sYW5nLlN0cmluZykiPjwhLS0gLS0+PC9BPjxIMz4KKyAgICBsYXN0SW5kZXhPZjwvSDM+Cis8UFJFPgorcHVibGljIGludCA8Qj5sYXN0SW5kZXhPZjwvQj4oPEEgSFJFRj0iLi4vLi4vamF2YS9sYW5nL1N0cmluZy5odG1sIiB0aXRsZT0iY2xhc3MgaW4gamF2YS5sYW5nIj5TdHJpbmc8L0E+Jm5ic3A7c3RyKTwvUFJFPgorPERMPgorICAgIDxERD5SZXR1cm5zIHRoZSBpbmRleCB3aXRoaW4gdGhpcyBzdHJpbmcgb2YgdGhlIHJpZ2h0bW9zdCBvY2N1cnJlbmNlCisgICAgICAgIG9mIHRoZSBzcGVjaWZpZWQgc3Vic3RyaW5nLiAgVGhlIHJpZ2h0bW9zdCBlbXB0eSBzdHJpbmcgIiIgaXMKKyAgICAgICAgY29uc2lkZXJlZCB0byBvY2N1ciBhdCB0aGUgaW5kZXggdmFsdWUgPGNvZGU+dGhpcy5sZW5ndGgoKTwvY29kZT4uCisgICAgICAgIFRoZSByZXR1cm5lZCBpbmRleCBpcyB0aGUgbGFyZ2VzdCB2YWx1ZSA8aT5rPC9pPiBzdWNoIHRoYXQKKyAgICAgICAgPGJsb2NrcXVvdGU+PHByZT4KKyB0aGlzLnN0YXJ0c1dpdGgoc3RyLCBrKQorIDwvcHJlPjwvYmxvY2txdW90ZT4KKyAgICAgICAgaXMgdHJ1ZS4KKyAgICAgICAgPFA+CisgICAgPEREPjxETD4KKyAgICA8L0RMPgorICAgIDwvREQ+CisgICAgPEREPjxETD4KKyAgICAgICAgPERUPjxCPlBhcmFtZXRlcnM6PC9CPjxERD48Q09ERT5zdHI8L0NPREU+IC0gdGhlIHN1YnN0cmluZyB0byBzZWFyY2ggZm9yLgorICAgICAgICA8RFQ+PEI+UmV0dXJuczo8L0I+PEREPmlmIHRoZSBzdHJpbmcgYXJndW1lbnQgb2NjdXJzIG9uZSBvciBtb3JlIHRpbWVzIGFzIGEgc3Vic3RyaW5nCisgICAgICAgIHdpdGhpbiB0aGlzIG9iamVjdCwgdGhlbiB0aGUgaW5kZXggb2YgdGhlIGZpcnN0IGNoYXJhY3RlciBvZgorICAgICAgICB0aGUgbGFzdCBzdWNoIHN1YnN0cmluZyBpcyByZXR1cm5lZC4gSWYgaXQgZG9lcyBub3Qgb2NjdXIgYXMKKyAgICAgICAgYSBzdWJzdHJpbmcsIDxjb2RlPi0xPC9jb2RlPiBpcyByZXR1cm5lZC48L0RMPgorICAgIDwvREQ+Cis8L0RMPgorPEhSPgorCis8QSBOQU1FPSJsYXN0SW5kZXhPZihqYXZhLmxhbmcuU3RyaW5nLCBpbnQpIj48IS0tIC0tPjwvQT48SDM+CisgICAgbGFzdEluZGV4T2Y8L0gzPgorPFBSRT4KK3B1YmxpYyBpbnQgPEI+bGFzdEluZGV4T2Y8L0I+KDxBIEhSRUY9Ii4uLy4uL2phdmEvbGFuZy9TdHJpbmcuaHRtbCIgdGl0bGU9ImNsYXNzIGluIGphdmEubGFuZyI+U3RyaW5nPC9BPiZuYnNwO3N0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgaW50Jm5ic3A7ZnJvbUluZGV4KTwvUFJFPgorPERMPgorICAgIDxERD5SZXR1cm5zIHRoZSBpbmRleCB3aXRoaW4gdGhpcyBzdHJpbmcgb2YgdGhlIGxhc3Qgb2NjdXJyZW5jZSBvZiB0aGUKKyAgICAgICAgc3BlY2lmaWVkIHN1YnN0cmluZywgc2VhcmNoaW5nIGJhY2t3YXJkIHN0YXJ0aW5nIGF0IHRoZSBzcGVjaWZpZWQgaW5kZXguCisgICAgICAgIFRoZSBpbnRlZ2VyIHJldHVybmVkIGlzIHRoZSBsYXJnZXN0IHZhbHVlIDxpPms8L2k+IHN1Y2ggdGhhdDoKKyAgICAgICAgPGJsb2NrcXVvdGU+PHByZT4KKyAgICAgayAmbHQ7PSBNYXRoLm1pbihmcm9tSW5kZXgsIHRoaXMubGVuZ3RoKCkpICYmIHRoaXMuc3RhcnRzV2l0aChzdHIsIGspCisgPC9wcmU+PC9ibG9ja3F1b3RlPgorICAgICAgICBJZiBubyBzdWNoIHZhbHVlIG9mIDxpPms8L2k+IGV4aXN0cywgdGhlbiAtMSBpcyByZXR1cm5lZC4KKyAgICAgICAgPFA+CisgICAgPEREPjxETD4KKyAgICA8L0RMPgorICAgIDwvREQ+CisgICAgPEREPjxETD4KKyAgICAgICAgPERUPjxCPlBhcmFtZXRlcnM6PC9CPjxERD48Q09ERT5zdHI8L0NPREU+IC0gdGhlIHN1YnN0cmluZyB0byBzZWFyY2ggZm9yLjxERD48Q09ERT5mcm9tSW5kZXg8L0NPREU+IC0gdGhlIGluZGV4IHRvIHN0YXJ0IHRoZSBzZWFyY2ggZnJvbS4KKyAgICAgICAgPERUPjxCPlJldHVybnM6PC9CPjxERD50aGUgaW5kZXggd2l0aGluIHRoaXMgc3RyaW5nIG9mIHRoZSBsYXN0IG9jY3VycmVuY2Ugb2YgdGhlCisgICAgICAgIHNwZWNpZmllZCBzdWJzdHJpbmcuPC9ETD4KKyAgICA8L0REPgorPC9ETD4KKzxIUj4KKworPEEgTkFNRT0ic3Vic3RyaW5nKGludCkiPjwhLS0gLS0+PC9BPjxIMz4KKyAgICBzdWJzdHJpbmc8L0gzPgorPFBSRT4KK3B1YmxpYyA8QSBIUkVGPSIuLi8uLi9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBqYXZhLmxhbmciPlN0cmluZzwvQT4gPEI+c3Vic3RyaW5nPC9CPihpbnQmbmJzcDtiZWdpbkluZGV4KTwvUFJFPgorPERMPgorICAgIDxERD5SZXR1cm5zIGEgbmV3IHN0cmluZyB0aGF0IGlzIGEgc3Vic3RyaW5nIG9mIHRoaXMgc3RyaW5nLiBUaGUKKyAgICAgICAgc3Vic3RyaW5nIGJlZ2lucyB3aXRoIHRoZSBjaGFyYWN0ZXIgYXQgdGhlIHNwZWNpZmllZCBpbmRleCBhbmQKKyAgICAgICAgZXh0ZW5kcyB0byB0aGUgZW5kIG9mIHRoaXMgc3RyaW5nLiA8cD4KKyAgICAgICAgICAgIEV4YW1wbGVzOgorICAgICAgICA8YmxvY2txdW90ZT48cHJlPgorICJ1bmhhcHB5Ii5zdWJzdHJpbmcoMikgcmV0dXJucyAiaGFwcHkiCisgIkhhcmJpc29uIi5zdWJzdHJpbmcoMykgcmV0dXJucyAiYmlzb24iCisgImVtcHRpbmVzcyIuc3Vic3RyaW5nKDkpIHJldHVybnMgIiIgKGFuIGVtcHR5IHN0cmluZykKKyA8L3ByZT48L2Jsb2NrcXVvdGU+CisgICAgICAgIDxQPgorICAgIDxERD48REw+CisgICAgPC9ETD4KKyAgICA8L0REPgorICAgIDxERD48REw+CisgICAgICAgIDxEVD48Qj5QYXJhbWV0ZXJzOjwvQj48REQ+PENPREU+YmVnaW5JbmRleDwvQ09ERT4gLSB0aGUgYmVnaW5uaW5nIGluZGV4LCBpbmNsdXNpdmUuCisgICAgICAgIDxEVD48Qj5SZXR1cm5zOjwvQj48REQ+dGhlIHNwZWNpZmllZCBzdWJzdHJpbmcuCisgICAgICAgIDxEVD48Qj5UaHJvd3M6PC9CPgorICAgICAgICA8REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vamF2YS9sYW5nL0luZGV4T3V0T2ZCb3VuZHNFeGNlcHRpb24uaHRtbCIgdGl0bGU9ImNsYXNzIGluIGphdmEubGFuZyI+SW5kZXhPdXRPZkJvdW5kc0V4Y2VwdGlvbjwvQT48L0NPREU+IC0gaWYKKyAgICAgICAgICAgIDxjb2RlPmJlZ2luSW5kZXg8L2NvZGU+IGlzIG5lZ2F0aXZlIG9yIGxhcmdlciB0aGFuIHRoZQorICAgICAgICAgICAgbGVuZ3RoIG9mIHRoaXMgPGNvZGU+U3RyaW5nPC9jb2RlPiBvYmplY3QuPC9ETD4KKyAgICA8L0REPgorPC9ETD4KKzxIUj4KKworPEEgTkFNRT0ic3Vic3RyaW5nKGludCwgaW50KSI+PCEtLSAtLT48L0E+PEgzPgorICAgIHN1YnN0cmluZzwvSDM+Cis8UFJFPgorcHVibGljIDxBIEhSRUY9Ii4uLy4uL2phdmEvbGFuZy9TdHJpbmcuaHRtbCIgdGl0bGU9ImNsYXNzIGluIGphdmEubGFuZyI+U3RyaW5nPC9BPiA8Qj5zdWJzdHJpbmc8L0I+KGludCZuYnNwO2JlZ2luSW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgICBpbnQmbmJzcDtlbmRJbmRleCk8L1BSRT4KKzxETD4KKyAgICA8REQ+UmV0dXJucyBhIG5ldyBzdHJpbmcgdGhhdCBpcyBhIHN1YnN0cmluZyBvZiB0aGlzIHN0cmluZy4gVGhlCisgICAgICAgIHN1YnN0cmluZyBiZWdpbnMgYXQgdGhlIHNwZWNpZmllZCA8Y29kZT5iZWdpbkluZGV4PC9jb2RlPiBhbmQKKyAgICAgICAgZXh0ZW5kcyB0byB0aGUgY2hhcmFjdGVyIGF0IGluZGV4IDxjb2RlPmVuZEluZGV4IC0gMTwvY29kZT4uCisgICAgICAgIFRodXMgdGhlIGxlbmd0aCBvZiB0aGUgc3Vic3RyaW5nIGlzIDxjb2RlPmVuZEluZGV4LWJlZ2luSW5kZXg8L2NvZGU+LgorICAgICAgICA8cD4KKyAgICAgICAgICAgIEV4YW1wbGVzOgorICAgICAgICA8YmxvY2txdW90ZT48cHJlPgorICJoYW1idXJnZXIiLnN1YnN0cmluZyg0LCA4KSByZXR1cm5zICJ1cmdlIgorICJzbWlsZXMiLnN1YnN0cmluZygxLCA1KSByZXR1cm5zICJtaWxlIgorIDwvcHJlPjwvYmxvY2txdW90ZT4KKyAgICAgICAgPFA+CisgICAgPEREPjxETD4KKyAgICA8L0RMPgorICAgIDwvREQ+CisgICAgPEREPjxETD4KKyAgICAgICAgPERUPjxCPlBhcmFtZXRlcnM6PC9CPjxERD48Q09ERT5iZWdpbkluZGV4PC9DT0RFPiAtIHRoZSBiZWdpbm5pbmcgaW5kZXgsIGluY2x1c2l2ZS48REQ+PENPREU+ZW5kSW5kZXg8L0NPREU+IC0gdGhlIGVuZGluZyBpbmRleCwgZXhjbHVzaXZlLgorICAgICAgICA8RFQ+PEI+UmV0dXJuczo8L0I+PEREPnRoZSBzcGVjaWZpZWQgc3Vic3RyaW5nLgorICAgICAgICA8RFQ+PEI+VGhyb3dzOjwvQj4KKyAgICAgICAgPEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uL2phdmEvbGFuZy9JbmRleE91dE9mQm91bmRzRXhjZXB0aW9uLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBqYXZhLmxhbmciPkluZGV4T3V0T2ZCb3VuZHNFeGNlcHRpb248L0E+PC9DT0RFPiAtIGlmIHRoZQorICAgICAgICAgICAgPGNvZGU+YmVnaW5JbmRleDwvY29kZT4gaXMgbmVnYXRpdmUsIG9yCisgICAgICAgICAgICA8Y29kZT5lbmRJbmRleDwvY29kZT4gaXMgbGFyZ2VyIHRoYW4gdGhlIGxlbmd0aCBvZgorICAgICAgICAgICAgdGhpcyA8Y29kZT5TdHJpbmc8L2NvZGU+IG9iamVjdCwgb3IKKyAgICAgICAgICAgIDxjb2RlPmJlZ2luSW5kZXg8L2NvZGU+IGlzIGxhcmdlciB0aGFuCisgICAgICAgICAgICA8Y29kZT5lbmRJbmRleDwvY29kZT4uPC9ETD4KKyAgICA8L0REPgorPC9ETD4KKzxIUj4KKworPEEgTkFNRT0ic3ViU2VxdWVuY2UoaW50LCBpbnQpIj48IS0tIC0tPjwvQT48SDM+CisgICAgc3ViU2VxdWVuY2U8L0gzPgorPFBSRT4KK3B1YmxpYyA8QSBIUkVGPSIuLi8uLi9qYXZhL2xhbmcvQ2hhclNlcXVlbmNlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gamF2YS5sYW5nIj5DaGFyU2VxdWVuY2U8L0E+IDxCPnN1YlNlcXVlbmNlPC9CPihpbnQmbmJzcDtiZWdpbkluZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQmbmJzcDtlbmRJbmRleCk8L1BSRT4KKzxETD4KKyAgICA8REQ+UmV0dXJucyBhIG5ldyBjaGFyYWN0ZXIgc2VxdWVuY2UgdGhhdCBpcyBhIHN1YnNlcXVlbmNlIG9mIHRoaXMgc2VxdWVuY2UuCisKKyAgICAgICAgPHA+IEFuIGludm9jYXRpb24gb2YgdGhpcyBtZXRob2Qgb2YgdGhlIGZvcm0KKworICAgICAgICA8YmxvY2txdW90ZT48cHJlPgorIHN0ci5zdWJTZXF1ZW5jZShiZWdpbiwmbmJzcDtlbmQpPC9wcmU+PC9ibG9ja3F1b3RlPgorCisgICAgICAgIGJlaGF2ZXMgaW4gZXhhY3RseSB0aGUgc2FtZSB3YXkgYXMgdGhlIGludm9jYXRpb24KKworICAgICAgICA8YmxvY2txdW90ZT48cHJlPgorIHN0ci5zdWJzdHJpbmcoYmVnaW4sJm5ic3A7ZW5kKTwvcHJlPjwvYmxvY2txdW90ZT4KKworICAgICAgICBUaGlzIG1ldGhvZCBpcyBkZWZpbmVkIHNvIHRoYXQgdGhlIDx0dD5TdHJpbmc8L3R0PiBjbGFzcyBjYW4gaW1wbGVtZW50CisgICAgICAgIHRoZSA8QSBIUkVGPSIuLi8uLi9qYXZhL2xhbmcvQ2hhclNlcXVlbmNlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gamF2YS5sYW5nIj48Q09ERT5DaGFyU2VxdWVuY2U8L0NPREU+PC9BPiBpbnRlcmZhY2UuIDwvcD4KKyAgICAgICAgPFA+CisgICAgPEREPjxETD4KKyAgICAgICAgPERUPjxCPlNwZWNpZmllZCBieTo8L0I+PEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uL2phdmEvbGFuZy9DaGFyU2VxdWVuY2UuaHRtbCNzdWJTZXF1ZW5jZShpbnQsIGludCkiPnN1YlNlcXVlbmNlPC9BPjwvQ09ERT4gaW4gaW50ZXJmYWNlIDxDT0RFPjxBIEhSRUY9Ii4uLy4uL2phdmEvbGFuZy9DaGFyU2VxdWVuY2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBqYXZhLmxhbmciPkNoYXJTZXF1ZW5jZTwvQT48L0NPREU+PC9ETD4KKyAgICA8L0REPgorICAgIDxERD48REw+CisgICAgICAgIDxEVD48Qj5QYXJhbWV0ZXJzOjwvQj48REQ+PENPREU+YmVnaW5JbmRleDwvQ09ERT4gLSB0aGUgYmVnaW4gaW5kZXgsIGluY2x1c2l2ZS48REQ+PENPREU+ZW5kSW5kZXg8L0NPREU+IC0gdGhlIGVuZCBpbmRleCwgZXhjbHVzaXZlLgorICAgICAgICA8RFQ+PEI+UmV0dXJuczo8L0I+PEREPnRoZSBzcGVjaWZpZWQgc3Vic2VxdWVuY2UuCisgICAgICAgIDxEVD48Qj5UaHJvd3M6PC9CPgorICAgICAgICA8REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vamF2YS9sYW5nL0luZGV4T3V0T2ZCb3VuZHNFeGNlcHRpb24uaHRtbCIgdGl0bGU9ImNsYXNzIGluIGphdmEubGFuZyI+SW5kZXhPdXRPZkJvdW5kc0V4Y2VwdGlvbjwvQT48L0NPREU+IC0gaWYgPHR0PmJlZ2luSW5kZXg8L3R0PiBvciA8dHQ+ZW5kSW5kZXg8L3R0PiBhcmUgbmVnYXRpdmUsCisgICAgICAgICAgICBpZiA8dHQ+ZW5kSW5kZXg8L3R0PiBpcyBncmVhdGVyIHRoYW4gPHR0Pmxlbmd0aCgpPC90dD4sCisgICAgICAgICAgICBvciBpZiA8dHQ+YmVnaW5JbmRleDwvdHQ+IGlzIGdyZWF0ZXIgdGhhbiA8dHQ+c3RhcnRJbmRleDwvdHQ+PERUPjxCPlNpbmNlOjwvQj48L0RUPgorICAgICAgICA8REQ+MS40PC9ERD4KKyAgICA8L0RMPgorICAgIDwvREQ+Cis8L0RMPgorPEhSPgorCis8QSBOQU1FPSJjb25jYXQoamF2YS5sYW5nLlN0cmluZykiPjwhLS0gLS0+PC9BPjxIMz4KKyAgICBjb25jYXQ8L0gzPgorPFBSRT4KK3B1YmxpYyA8QSBIUkVGPSIuLi8uLi9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBqYXZhLmxhbmciPlN0cmluZzwvQT4gPEI+Y29uY2F0PC9CPig8QSBIUkVGPSIuLi8uLi9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBqYXZhLmxhbmciPlN0cmluZzwvQT4mbmJzcDtzdHIpPC9QUkU+Cis8REw+CisgICAgPEREPkNvbmNhdGVuYXRlcyB0aGUgc3BlY2lmaWVkIHN0cmluZyB0byB0aGUgZW5kIG9mIHRoaXMgc3RyaW5nLgorICAgICAgICA8cD4KKyAgICAgICAgICAgIElmIHRoZSBsZW5ndGggb2YgdGhlIGFyZ3VtZW50IHN0cmluZyBpcyA8Y29kZT4wPC9jb2RlPiwgdGhlbiB0aGlzCisgICAgICAgICAgICA8Y29kZT5TdHJpbmc8L2NvZGU+IG9iamVjdCBpcyByZXR1cm5lZC4gT3RoZXJ3aXNlLCBhIG5ldworICAgICAgICAgICAgPGNvZGU+U3RyaW5nPC9jb2RlPiBvYmplY3QgaXMgY3JlYXRlZCwgcmVwcmVzZW50aW5nIGEgY2hhcmFjdGVyCisgICAgICAgICAgICBzZXF1ZW5jZSB0aGF0IGlzIHRoZSBjb25jYXRlbmF0aW9uIG9mIHRoZSBjaGFyYWN0ZXIgc2VxdWVuY2UKKyAgICAgICAgICAgIHJlcHJlc2VudGVkIGJ5IHRoaXMgPGNvZGU+U3RyaW5nPC9jb2RlPiBvYmplY3QgYW5kIHRoZSBjaGFyYWN0ZXIKKyAgICAgICAgICAgIHNlcXVlbmNlIHJlcHJlc2VudGVkIGJ5IHRoZSBhcmd1bWVudCBzdHJpbmcuPHA+CisgICAgICAgICAgICBFeGFtcGxlczoKKyAgICAgICAgPGJsb2NrcXVvdGU+PHByZT4KKyAiY2FyZXMiLmNvbmNhdCgicyIpIHJldHVybnMgImNhcmVzcyIKKyAidG8iLmNvbmNhdCgiZ2V0IikuY29uY2F0KCJoZXIiKSByZXR1cm5zICJ0b2dldGhlciIKKyA8L3ByZT48L2Jsb2NrcXVvdGU+CisgICAgICAgIDxQPgorICAgIDxERD48REw+CisgICAgPC9ETD4KKyAgICA8L0REPgorICAgIDxERD48REw+CisgICAgICAgIDxEVD48Qj5QYXJhbWV0ZXJzOjwvQj48REQ+PENPREU+c3RyPC9DT0RFPiAtIHRoZSA8Y29kZT5TdHJpbmc8L2NvZGU+IHRoYXQgaXMgY29uY2F0ZW5hdGVkIHRvIHRoZSBlbmQKKyAgICAgICAgb2YgdGhpcyA8Y29kZT5TdHJpbmc8L2NvZGU+LgorICAgICAgICA8RFQ+PEI+UmV0dXJuczo8L0I+PEREPmEgc3RyaW5nIHRoYXQgcmVwcmVzZW50cyB0aGUgY29uY2F0ZW5hdGlvbiBvZiB0aGlzIG9iamVjdCdzCisgICAgICAgIGNoYXJhY3RlcnMgZm9sbG93ZWQgYnkgdGhlIHN0cmluZyBhcmd1bWVudCdzIGNoYXJhY3RlcnMuPC9ETD4KKyAgICA8L0REPgorPC9ETD4KKzxIUj4KKworPEEgTkFNRT0icmVwbGFjZShjaGFyLCBjaGFyKSI+PCEtLSAtLT48L0E+PEgzPgorICAgIHJlcGxhY2U8L0gzPgorPFBSRT4KK3B1YmxpYyA8QSBIUkVGPSIuLi8uLi9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBqYXZhLmxhbmciPlN0cmluZzwvQT4gPEI+cmVwbGFjZTwvQj4oY2hhciZuYnNwO29sZENoYXIsCisgICAgICAgICAgICAgICAgICAgICAgY2hhciZuYnNwO25ld0NoYXIpPC9QUkU+Cis8REw+CisgICAgPEREPlJldHVybnMgYSBuZXcgc3RyaW5nIHJlc3VsdGluZyBmcm9tIHJlcGxhY2luZyBhbGwgb2NjdXJyZW5jZXMgb2YKKyAgICAgICAgPGNvZGU+b2xkQ2hhcjwvY29kZT4gaW4gdGhpcyBzdHJpbmcgd2l0aCA8Y29kZT5uZXdDaGFyPC9jb2RlPi4KKyAgICAgICAgPHA+CisgICAgICAgICAgICBJZiB0aGUgY2hhcmFjdGVyIDxjb2RlPm9sZENoYXI8L2NvZGU+IGRvZXMgbm90IG9jY3VyIGluIHRoZQorICAgICAgICAgICAgY2hhcmFjdGVyIHNlcXVlbmNlIHJlcHJlc2VudGVkIGJ5IHRoaXMgPGNvZGU+U3RyaW5nPC9jb2RlPiBvYmplY3QsCisgICAgICAgICAgICB0aGVuIGEgcmVmZXJlbmNlIHRvIHRoaXMgPGNvZGU+U3RyaW5nPC9jb2RlPiBvYmplY3QgaXMgcmV0dXJuZWQuCisgICAgICAgICAgICBPdGhlcndpc2UsIGEgbmV3IDxjb2RlPlN0cmluZzwvY29kZT4gb2JqZWN0IGlzIGNyZWF0ZWQgdGhhdAorICAgICAgICAgICAgcmVwcmVzZW50cyBhIGNoYXJhY3RlciBzZXF1ZW5jZSBpZGVudGljYWwgdG8gdGhlIGNoYXJhY3RlciBzZXF1ZW5jZQorICAgICAgICAgICAgcmVwcmVzZW50ZWQgYnkgdGhpcyA8Y29kZT5TdHJpbmc8L2NvZGU+IG9iamVjdCwgZXhjZXB0IHRoYXQgZXZlcnkKKyAgICAgICAgICAgIG9jY3VycmVuY2Ugb2YgPGNvZGU+b2xkQ2hhcjwvY29kZT4gaXMgcmVwbGFjZWQgYnkgYW4gb2NjdXJyZW5jZQorICAgICAgICAgICAgb2YgPGNvZGU+bmV3Q2hhcjwvY29kZT4uCisgICAgICAgIDxwPgorICAgICAgICAgICAgRXhhbXBsZXM6CisgICAgICAgIDxibG9ja3F1b3RlPjxwcmU+CisgIm1lc3F1aXRlIGluIHlvdXIgY2VsbGFyIi5yZXBsYWNlKCdlJywgJ28nKQorICAgICAgICAgcmV0dXJucyAibW9zcXVpdG8gaW4geW91ciBjb2xsYXIiCisgInRoZSB3YXIgb2YgYmFyb25ldHMiLnJlcGxhY2UoJ3InLCAneScpCisgICAgICAgICByZXR1cm5zICJ0aGUgd2F5IG9mIGJheW9uZXRzIgorICJzcGFycmluZyB3aXRoIGEgcHVycGxlIHBvcnBvaXNlIi5yZXBsYWNlKCdwJywgJ3QnKQorICAgICAgICAgcmV0dXJucyAic3RhcnJpbmcgd2l0aCBhIHR1cnRsZSB0b3J0b2lzZSIKKyAiSm9uTCIucmVwbGFjZSgncScsICd4JykgcmV0dXJucyAiSm9uTCIgKG5vIGNoYW5nZSkKKyA8L3ByZT48L2Jsb2NrcXVvdGU+CisgICAgICAgIDxQPgorICAgIDxERD48REw+CisgICAgPC9ETD4KKyAgICA8L0REPgorICAgIDxERD48REw+CisgICAgICAgIDxEVD48Qj5QYXJhbWV0ZXJzOjwvQj48REQ+PENPREU+b2xkQ2hhcjwvQ09ERT4gLSB0aGUgb2xkIGNoYXJhY3Rlci48REQ+PENPREU+bmV3Q2hhcjwvQ09ERT4gLSB0aGUgbmV3IGNoYXJhY3Rlci4KKyAgICAgICAgPERUPjxCPlJldHVybnM6PC9CPjxERD5hIHN0cmluZyBkZXJpdmVkIGZyb20gdGhpcyBzdHJpbmcgYnkgcmVwbGFjaW5nIGV2ZXJ5CisgICAgICAgIG9jY3VycmVuY2Ugb2YgPGNvZGU+b2xkQ2hhcjwvY29kZT4gd2l0aCA8Y29kZT5uZXdDaGFyPC9jb2RlPi48L0RMPgorICAgIDwvREQ+Cis8L0RMPgorPEhSPgorCis8QSBOQU1FPSJtYXRjaGVzKGphdmEubGFuZy5TdHJpbmcpIj48IS0tIC0tPjwvQT48SDM+CisgICAgbWF0Y2hlczwvSDM+Cis8UFJFPgorcHVibGljIGJvb2xlYW4gPEI+bWF0Y2hlczwvQj4oPEEgSFJFRj0iLi4vLi4vamF2YS9sYW5nL1N0cmluZy5odG1sIiB0aXRsZT0iY2xhc3MgaW4gamF2YS5sYW5nIj5TdHJpbmc8L0E+Jm5ic3A7cmVnZXgpPC9QUkU+Cis8REw+CisgICAgPEREPlRlbGxzIHdoZXRoZXIgb3Igbm90IHRoaXMgc3RyaW5nIG1hdGNoZXMgdGhlIGdpdmVuIDxhCisgICAgICAgICAgICBocmVmPSIuLi91dGlsL3JlZ2V4L1BhdHRlcm4uaHRtbCNzdW0iPnJlZ3VsYXIgZXhwcmVzc2lvbjwvYT4uCisKKyAgICAgICAgPHA+IEFuIGludm9jYXRpb24gb2YgdGhpcyBtZXRob2Qgb2YgdGhlIGZvcm0KKyAgICAgICAgICAgIDxpPnN0cjwvaT48dHQ+Lm1hdGNoZXMoPC90dD48aT5yZWdleDwvaT48dHQ+KTwvdHQ+IHlpZWxkcyBleGFjdGx5IHRoZQorICAgICAgICAgICAgc2FtZSByZXN1bHQgYXMgdGhlIGV4cHJlc3Npb24KKworICAgICAgICA8YmxvY2txdW90ZT48dHQ+IDxBIEhSRUY9Ii4uLy4uL2phdmEvdXRpbC9yZWdleC9QYXR0ZXJuLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBqYXZhLnV0aWwucmVnZXgiPjxDT0RFPlBhdHRlcm48L0NPREU+PC9BPi48QSBIUkVGPSIuLi8uLi9qYXZhL3V0aWwvcmVnZXgvUGF0dGVybi5odG1sI21hdGNoZXMoamF2YS5sYW5nLlN0cmluZywgamF2YS5sYW5nLkNoYXJTZXF1ZW5jZSkiPjxDT0RFPm1hdGNoZXM8L0NPREU+PC9BPig8L3R0PjxpPnJlZ2V4PC9pPjx0dD4sPC90dD4gPGk+c3RyPC9pPjx0dD4pPC90dD48L2Jsb2NrcXVvdGU+CisgICAgICAgIDxQPgorICAgIDxERD48REw+CisgICAgPC9ETD4KKyAgICA8L0REPgorICAgIDxERD48REw+CisgICAgICAgIDxEVD48Qj5QYXJhbWV0ZXJzOjwvQj48REQ+PENPREU+cmVnZXg8L0NPREU+IC0gdGhlIHJlZ3VsYXIgZXhwcmVzc2lvbiB0byB3aGljaCB0aGlzIHN0cmluZyBpcyB0byBiZSBtYXRjaGVkCisgICAgICAgIDxEVD48Qj5SZXR1cm5zOjwvQj48REQ+PHR0PnRydWU8L3R0PiBpZiwgYW5kIG9ubHkgaWYsIHRoaXMgc3RyaW5nIG1hdGNoZXMgdGhlCisgICAgICAgIGdpdmVuIHJlZ3VsYXIgZXhwcmVzc2lvbgorICAgICAgICA8RFQ+PEI+VGhyb3dzOjwvQj4KKyAgICAgICAgPEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uL2phdmEvdXRpbC9yZWdleC9QYXR0ZXJuU3ludGF4RXhjZXB0aW9uLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBqYXZhLnV0aWwucmVnZXgiPlBhdHRlcm5TeW50YXhFeGNlcHRpb248L0E+PC9DT0RFPiAtIGlmIHRoZSByZWd1bGFyIGV4cHJlc3Npb24ncyBzeW50YXggaXMgaW52YWxpZDxEVD48Qj5TaW5jZTo8L0I+PC9EVD4KKyAgICAgICAgPEREPjEuNDwvREQ+CisgICAgICAgIDxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uL2phdmEvdXRpbC9yZWdleC9QYXR0ZXJuLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBqYXZhLnV0aWwucmVnZXgiPjxDT0RFPlBhdHRlcm48L0NPREU+PC9BPjwvREw+CisgICAgPC9ERD4KKzwvREw+Cis8SFI+CisKKzxBIE5BTUU9ImNvbnRhaW5zKGphdmEubGFuZy5DaGFyU2VxdWVuY2UpIj48IS0tIC0tPjwvQT48SDM+CisgICAgY29udGFpbnM8L0gzPgorPFBSRT4KK3B1YmxpYyBib29sZWFuIDxCPmNvbnRhaW5zPC9CPig8QSBIUkVGPSIuLi8uLi9qYXZhL2xhbmcvQ2hhclNlcXVlbmNlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gamF2YS5sYW5nIj5DaGFyU2VxdWVuY2U8L0E+Jm5ic3A7cyk8L1BSRT4KKzxETD4KKyAgICA8REQ+UmV0dXJucyB0cnVlIGlmIGFuZCBvbmx5IGlmIHRoaXMgc3RyaW5nIGNvbnRhaW5zIHRoZSBzcGVjaWZpZWQKKyAgICAgICAgc2VxdWVuY2Ugb2YgY2hhciB2YWx1ZXMuCisgICAgICAgIDxQPgorICAgIDxERD48REw+CisgICAgPC9ETD4KKyAgICA8L0REPgorICAgIDxERD48REw+CisgICAgICAgIDxEVD48Qj5QYXJhbWV0ZXJzOjwvQj48REQ+PENPREU+czwvQ09ERT4gLSB0aGUgc2VxdWVuY2UgdG8gc2VhcmNoIGZvcgorICAgICAgICA8RFQ+PEI+UmV0dXJuczo8L0I+PEREPnRydWUgaWYgdGhpcyBzdHJpbmcgY29udGFpbnMgPGNvZGU+czwvY29kZT4sIGZhbHNlIG90aGVyd2lzZQorICAgICAgICA8RFQ+PEI+VGhyb3dzOjwvQj4KKyAgICAgICAgPEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uL2phdmEvbGFuZy9OdWxsUG9pbnRlckV4Y2VwdGlvbi5odG1sIiB0aXRsZT0iY2xhc3MgaW4gamF2YS5sYW5nIj5OdWxsUG9pbnRlckV4Y2VwdGlvbjwvQT48L0NPREU+IC0gaWYgPGNvZGU+czwvY29kZT4gaXMgPGNvZGU+bnVsbDwvY29kZT48RFQ+PEI+U2luY2U6PC9CPjwvRFQ+CisgICAgICAgIDxERD4xLjU8L0REPgorICAgIDwvREw+CisgICAgPC9ERD4KKzwvREw+Cis8SFI+CisKKzxBIE5BTUU9InJlcGxhY2VGaXJzdChqYXZhLmxhbmcuU3RyaW5nLCBqYXZhLmxhbmcuU3RyaW5nKSI+PCEtLSAtLT48L0E+PEgzPgorICAgIHJlcGxhY2VGaXJzdDwvSDM+Cis8UFJFPgorcHVibGljIDxBIEhSRUY9Ii4uLy4uL2phdmEvbGFuZy9TdHJpbmcuaHRtbCIgdGl0bGU9ImNsYXNzIGluIGphdmEubGFuZyI+U3RyaW5nPC9BPiA8Qj5yZXBsYWNlRmlyc3Q8L0I+KDxBIEhSRUY9Ii4uLy4uL2phdmEvbGFuZy9TdHJpbmcuaHRtbCIgdGl0bGU9ImNsYXNzIGluIGphdmEubGFuZyI+U3RyaW5nPC9BPiZuYnNwO3JlZ2V4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iLi4vLi4vamF2YS9sYW5nL1N0cmluZy5odG1sIiB0aXRsZT0iY2xhc3MgaW4gamF2YS5sYW5nIj5TdHJpbmc8L0E+Jm5ic3A7cmVwbGFjZW1lbnQpPC9QUkU+Cis8REw+CisgICAgPEREPlJlcGxhY2VzIHRoZSBmaXJzdCBzdWJzdHJpbmcgb2YgdGhpcyBzdHJpbmcgdGhhdCBtYXRjaGVzIHRoZSBnaXZlbiA8YQorICAgICAgICAgICAgaHJlZj0iLi4vdXRpbC9yZWdleC9QYXR0ZXJuLmh0bWwjc3VtIj5yZWd1bGFyIGV4cHJlc3Npb248L2E+IHdpdGggdGhlCisgICAgICAgIGdpdmVuIHJlcGxhY2VtZW50LgorCisgICAgICAgIDxwPiBBbiBpbnZvY2F0aW9uIG9mIHRoaXMgbWV0aG9kIG9mIHRoZSBmb3JtCisgICAgICAgICAgICA8aT5zdHI8L2k+PHR0Pi5yZXBsYWNlRmlyc3QoPC90dD48aT5yZWdleDwvaT48dHQ+LDwvdHQ+IDxpPnJlcGw8L2k+PHR0Pik8L3R0PgorICAgICAgICAgICAgeWllbGRzIGV4YWN0bHkgdGhlIHNhbWUgcmVzdWx0IGFzIHRoZSBleHByZXNzaW9uCisKKyAgICAgICAgPGJsb2NrcXVvdGU+PHR0PgorICAgICAgICAgICAgPEEgSFJFRj0iLi4vLi4vamF2YS91dGlsL3JlZ2V4L1BhdHRlcm4uaHRtbCIgdGl0bGU9ImNsYXNzIGluIGphdmEudXRpbC5yZWdleCI+PENPREU+UGF0dGVybjwvQ09ERT48L0E+LjxBIEhSRUY9Ii4uLy4uL2phdmEvdXRpbC9yZWdleC9QYXR0ZXJuLmh0bWwjY29tcGlsZShqYXZhLmxhbmcuU3RyaW5nKSI+PENPREU+Y29tcGlsZTwvQ09ERT48L0E+KDwvdHQ+PGk+cmVnZXg8L2k+PHR0PikuPEEgSFJFRj0iLi4vLi4vamF2YS91dGlsL3JlZ2V4L1BhdHRlcm4uaHRtbCNtYXRjaGVyKGphdmEubGFuZy5DaGFyU2VxdWVuY2UpIj48Q09ERT5tYXRjaGVyPC9DT0RFPjwvQT4oPC90dD48aT5zdHI8L2k+PHR0PikuPEEgSFJFRj0iLi4vLi4vamF2YS91dGlsL3JlZ2V4L01hdGNoZXIuaHRtbCNyZXBsYWNlRmlyc3QoamF2YS5sYW5nLlN0cmluZykiPjxDT0RFPnJlcGxhY2VGaXJzdDwvQ09ERT48L0E+KDwvdHQ+PGk+cmVwbDwvaT48dHQ+KTwvdHQ+PC9ibG9ja3F1b3RlPgorCisgICAgICAgIDxwPgorICAgICAgICAgICAgTm90ZSB0aGF0IGJhY2tzbGFzaGVzICg8dHQ+XDwvdHQ+KSBhbmQgZG9sbGFyIHNpZ25zICg8dHQ+JDwvdHQ+KSBpbiB0aGUKKyAgICAgICAgICAgIHJlcGxhY2VtZW50IHN0cmluZyBtYXkgY2F1c2UgdGhlIHJlc3VsdHMgdG8gYmUgZGlmZmVyZW50IHRoYW4gaWYgaXQgd2VyZQorICAgICAgICAgICAgYmVpbmcgdHJlYXRlZCBhcyBhIGxpdGVyYWwgcmVwbGFjZW1lbnQgc3RyaW5nOyBzZWUKKyAgICAgICAgICAgIDxBIEhSRUY9Ii4uLy4uL2phdmEvdXRpbC9yZWdleC9NYXRjaGVyLmh0bWwjcmVwbGFjZUZpcnN0KGphdmEubGFuZy5TdHJpbmcpIj48Q09ERT5NYXRjaGVyLnJlcGxhY2VGaXJzdChqYXZhLmxhbmcuU3RyaW5nKTwvQ09ERT48L0E+LgorICAgICAgICAgICAgVXNlIDxBIEhSRUY9Ii4uLy4uL2phdmEvdXRpbC9yZWdleC9NYXRjaGVyLmh0bWwjcXVvdGVSZXBsYWNlbWVudChqYXZhLmxhbmcuU3RyaW5nKSI+PENPREU+TWF0Y2hlci5xdW90ZVJlcGxhY2VtZW50KGphdmEubGFuZy5TdHJpbmcpPC9DT0RFPjwvQT4gdG8gc3VwcHJlc3MgdGhlIHNwZWNpYWwKKyAgICAgICAgICAgIG1lYW5pbmcgb2YgdGhlc2UgY2hhcmFjdGVycywgaWYgZGVzaXJlZC4KKyAgICAgICAgPFA+CisgICAgPEREPjxETD4KKyAgICA8L0RMPgorICAgIDwvREQ+CisgICAgPEREPjxETD4KKyAgICAgICAgPERUPjxCPlBhcmFtZXRlcnM6PC9CPjxERD48Q09ERT5yZWdleDwvQ09ERT4gLSB0aGUgcmVndWxhciBleHByZXNzaW9uIHRvIHdoaWNoIHRoaXMgc3RyaW5nIGlzIHRvIGJlIG1hdGNoZWQ8REQ+PENPREU+cmVwbGFjZW1lbnQ8L0NPREU+IC0gdGhlIHN0cmluZyB0byBiZSBzdWJzdGl0dXRlZCBmb3IgdGhlIGZpcnN0IG1hdGNoCisgICAgICAgIDxEVD48Qj5SZXR1cm5zOjwvQj48REQ+VGhlIHJlc3VsdGluZyA8dHQ+U3RyaW5nPC90dD4KKyAgICAgICAgPERUPjxCPlRocm93czo8L0I+CisgICAgICAgIDxERD48Q09ERT48QSBIUkVGPSIuLi8uLi9qYXZhL3V0aWwvcmVnZXgvUGF0dGVyblN5bnRheEV4Y2VwdGlvbi5odG1sIiB0aXRsZT0iY2xhc3MgaW4gamF2YS51dGlsLnJlZ2V4Ij5QYXR0ZXJuU3ludGF4RXhjZXB0aW9uPC9BPjwvQ09ERT4gLSBpZiB0aGUgcmVndWxhciBleHByZXNzaW9uJ3Mgc3ludGF4IGlzIGludmFsaWQ8RFQ+PEI+U2luY2U6PC9CPjwvRFQ+CisgICAgICAgIDxERD4xLjQ8L0REPgorICAgICAgICA8RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi9qYXZhL3V0aWwvcmVnZXgvUGF0dGVybi5odG1sIiB0aXRsZT0iY2xhc3MgaW4gamF2YS51dGlsLnJlZ2V4Ij48Q09ERT5QYXR0ZXJuPC9DT0RFPjwvQT48L0RMPgorICAgIDwvREQ+Cis8L0RMPgorPEhSPgorCis8QSBOQU1FPSJyZXBsYWNlQWxsKGphdmEubGFuZy5TdHJpbmcsIGphdmEubGFuZy5TdHJpbmcpIj48IS0tIC0tPjwvQT48SDM+CisgICAgcmVwbGFjZUFsbDwvSDM+Cis8UFJFPgorcHVibGljIDxBIEhSRUY9Ii4uLy4uL2phdmEvbGFuZy9TdHJpbmcuaHRtbCIgdGl0bGU9ImNsYXNzIGluIGphdmEubGFuZyI+U3RyaW5nPC9BPiA8Qj5yZXBsYWNlQWxsPC9CPig8QSBIUkVGPSIuLi8uLi9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBqYXZhLmxhbmciPlN0cmluZzwvQT4mbmJzcDtyZWdleCwKKyAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSIuLi8uLi9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBqYXZhLmxhbmciPlN0cmluZzwvQT4mbmJzcDtyZXBsYWNlbWVudCk8L1BSRT4KKzxETD4KKyAgICA8REQ+UmVwbGFjZXMgZWFjaCBzdWJzdHJpbmcgb2YgdGhpcyBzdHJpbmcgdGhhdCBtYXRjaGVzIHRoZSBnaXZlbiA8YQorICAgICAgICAgICAgaHJlZj0iLi4vdXRpbC9yZWdleC9QYXR0ZXJuLmh0bWwjc3VtIj5yZWd1bGFyIGV4cHJlc3Npb248L2E+IHdpdGggdGhlCisgICAgICAgIGdpdmVuIHJlcGxhY2VtZW50LgorCisgICAgICAgIDxwPiBBbiBpbnZvY2F0aW9uIG9mIHRoaXMgbWV0aG9kIG9mIHRoZSBmb3JtCisgICAgICAgICAgICA8aT5zdHI8L2k+PHR0Pi5yZXBsYWNlQWxsKDwvdHQ+PGk+cmVnZXg8L2k+PHR0Piw8L3R0PiA8aT5yZXBsPC9pPjx0dD4pPC90dD4KKyAgICAgICAgICAgIHlpZWxkcyBleGFjdGx5IHRoZSBzYW1lIHJlc3VsdCBhcyB0aGUgZXhwcmVzc2lvbgorCisgICAgICAgIDxibG9ja3F1b3RlPjx0dD4KKyAgICAgICAgICAgIDxBIEhSRUY9Ii4uLy4uL2phdmEvdXRpbC9yZWdleC9QYXR0ZXJuLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBqYXZhLnV0aWwucmVnZXgiPjxDT0RFPlBhdHRlcm48L0NPREU+PC9BPi48QSBIUkVGPSIuLi8uLi9qYXZhL3V0aWwvcmVnZXgvUGF0dGVybi5odG1sI2NvbXBpbGUoamF2YS5sYW5nLlN0cmluZykiPjxDT0RFPmNvbXBpbGU8L0NPREU+PC9BPig8L3R0PjxpPnJlZ2V4PC9pPjx0dD4pLjxBIEhSRUY9Ii4uLy4uL2phdmEvdXRpbC9yZWdleC9QYXR0ZXJuLmh0bWwjbWF0Y2hlcihqYXZhLmxhbmcuQ2hhclNlcXVlbmNlKSI+PENPREU+bWF0Y2hlcjwvQ09ERT48L0E+KDwvdHQ+PGk+c3RyPC9pPjx0dD4pLjxBIEhSRUY9Ii4uLy4uL2phdmEvdXRpbC9yZWdleC9NYXRjaGVyLmh0bWwjcmVwbGFjZUFsbChqYXZhLmxhbmcuU3RyaW5nKSI+PENPREU+cmVwbGFjZUFsbDwvQ09ERT48L0E+KDwvdHQ+PGk+cmVwbDwvaT48dHQ+KTwvdHQ+PC9ibG9ja3F1b3RlPgorCisgICAgICAgIDxwPgorICAgICAgICAgICAgTm90ZSB0aGF0IGJhY2tzbGFzaGVzICg8dHQ+XDwvdHQ+KSBhbmQgZG9sbGFyIHNpZ25zICg8dHQ+JDwvdHQ+KSBpbiB0aGUKKyAgICAgICAgICAgIHJlcGxhY2VtZW50IHN0cmluZyBtYXkgY2F1c2UgdGhlIHJlc3VsdHMgdG8gYmUgZGlmZmVyZW50IHRoYW4gaWYgaXQgd2VyZQorICAgICAgICAgICAgYmVpbmcgdHJlYXRlZCBhcyBhIGxpdGVyYWwgcmVwbGFjZW1lbnQgc3RyaW5nOyBzZWUKKyAgICAgICAgICAgIDxBIEhSRUY9Ii4uLy4uL2phdmEvdXRpbC9yZWdleC9NYXRjaGVyLmh0bWwjcmVwbGFjZUFsbChqYXZhLmxhbmcuU3RyaW5nKSI+PENPREU+TWF0Y2hlci5yZXBsYWNlQWxsPC9DT0RFPjwvQT4uCisgICAgICAgICAgICBVc2UgPEEgSFJFRj0iLi4vLi4vamF2YS91dGlsL3JlZ2V4L01hdGNoZXIuaHRtbCNxdW90ZVJlcGxhY2VtZW50KGphdmEubGFuZy5TdHJpbmcpIj48Q09ERT5NYXRjaGVyLnF1b3RlUmVwbGFjZW1lbnQoamF2YS5sYW5nLlN0cmluZyk8L0NPREU+PC9BPiB0byBzdXBwcmVzcyB0aGUgc3BlY2lhbAorICAgICAgICAgICAgbWVhbmluZyBvZiB0aGVzZSBjaGFyYWN0ZXJzLCBpZiBkZXNpcmVkLgorICAgICAgICA8UD4KKyAgICA8REQ+PERMPgorICAgIDwvREw+CisgICAgPC9ERD4KKyAgICA8REQ+PERMPgorICAgICAgICA8RFQ+PEI+UGFyYW1ldGVyczo8L0I+PEREPjxDT0RFPnJlZ2V4PC9DT0RFPiAtIHRoZSByZWd1bGFyIGV4cHJlc3Npb24gdG8gd2hpY2ggdGhpcyBzdHJpbmcgaXMgdG8gYmUgbWF0Y2hlZDxERD48Q09ERT5yZXBsYWNlbWVudDwvQ09ERT4gLSB0aGUgc3RyaW5nIHRvIGJlIHN1YnN0aXR1dGVkIGZvciBlYWNoIG1hdGNoCisgICAgICAgIDxEVD48Qj5SZXR1cm5zOjwvQj48REQ+VGhlIHJlc3VsdGluZyA8dHQ+U3RyaW5nPC90dD4KKyAgICAgICAgPERUPjxCPlRocm93czo8L0I+CisgICAgICAgIDxERD48Q09ERT48QSBIUkVGPSIuLi8uLi9qYXZhL3V0aWwvcmVnZXgvUGF0dGVyblN5bnRheEV4Y2VwdGlvbi5odG1sIiB0aXRsZT0iY2xhc3MgaW4gamF2YS51dGlsLnJlZ2V4Ij5QYXR0ZXJuU3ludGF4RXhjZXB0aW9uPC9BPjwvQ09ERT4gLSBpZiB0aGUgcmVndWxhciBleHByZXNzaW9uJ3Mgc3ludGF4IGlzIGludmFsaWQ8RFQ+PEI+U2luY2U6PC9CPjwvRFQ+CisgICAgICAgIDxERD4xLjQ8L0REPgorICAgICAgICA8RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi9qYXZhL3V0aWwvcmVnZXgvUGF0dGVybi5odG1sIiB0aXRsZT0iY2xhc3MgaW4gamF2YS51dGlsLnJlZ2V4Ij48Q09ERT5QYXR0ZXJuPC9DT0RFPjwvQT48L0RMPgorICAgIDwvREQ+Cis8L0RMPgorPEhSPgorCis8QSBOQU1FPSJyZXBsYWNlKGphdmEubGFuZy5DaGFyU2VxdWVuY2UsIGphdmEubGFuZy5DaGFyU2VxdWVuY2UpIj48IS0tIC0tPjwvQT48SDM+CisgICAgcmVwbGFjZTwvSDM+Cis8UFJFPgorcHVibGljIDxBIEhSRUY9Ii4uLy4uL2phdmEvbGFuZy9TdHJpbmcuaHRtbCIgdGl0bGU9ImNsYXNzIGluIGphdmEubGFuZyI+U3RyaW5nPC9BPiA8Qj5yZXBsYWNlPC9CPig8QSBIUkVGPSIuLi8uLi9qYXZhL2xhbmcvQ2hhclNlcXVlbmNlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gamF2YS5sYW5nIj5DaGFyU2VxdWVuY2U8L0E+Jm5ic3A7dGFyZ2V0LAorICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Ii4uLy4uL2phdmEvbGFuZy9DaGFyU2VxdWVuY2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBqYXZhLmxhbmciPkNoYXJTZXF1ZW5jZTwvQT4mbmJzcDtyZXBsYWNlbWVudCk8L1BSRT4KKzxETD4KKyAgICA8REQ+UmVwbGFjZXMgZWFjaCBzdWJzdHJpbmcgb2YgdGhpcyBzdHJpbmcgdGhhdCBtYXRjaGVzIHRoZSBsaXRlcmFsIHRhcmdldAorICAgICAgICBzZXF1ZW5jZSB3aXRoIHRoZSBzcGVjaWZpZWQgbGl0ZXJhbCByZXBsYWNlbWVudCBzZXF1ZW5jZS4gVGhlCisgICAgICAgIHJlcGxhY2VtZW50IHByb2NlZWRzIGZyb20gdGhlIGJlZ2lubmluZyBvZiB0aGUgc3RyaW5nIHRvIHRoZSBlbmQsIGZvcgorICAgICAgICBleGFtcGxlLCByZXBsYWNpbmcgImFhIiB3aXRoICJiIiBpbiB0aGUgc3RyaW5nICJhYWEiIHdpbGwgcmVzdWx0IGluCisgICAgICAgICJiYSIgcmF0aGVyIHRoYW4gImFiIi4KKyAgICAgICAgPFA+CisgICAgPEREPjxETD4KKyAgICA8L0RMPgorICAgIDwvREQ+CisgICAgPEREPjxETD4KKyAgICAgICAgPERUPjxCPlBhcmFtZXRlcnM6PC9CPjxERD48Q09ERT50YXJnZXQ8L0NPREU+IC0gVGhlIHNlcXVlbmNlIG9mIGNoYXIgdmFsdWVzIHRvIGJlIHJlcGxhY2VkPEREPjxDT0RFPnJlcGxhY2VtZW50PC9DT0RFPiAtIFRoZSByZXBsYWNlbWVudCBzZXF1ZW5jZSBvZiBjaGFyIHZhbHVlcworICAgICAgICA8RFQ+PEI+UmV0dXJuczo8L0I+PEREPlRoZSByZXN1bHRpbmcgc3RyaW5nCisgICAgICAgIDxEVD48Qj5UaHJvd3M6PC9CPgorICAgICAgICA8REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vamF2YS9sYW5nL051bGxQb2ludGVyRXhjZXB0aW9uLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBqYXZhLmxhbmciPk51bGxQb2ludGVyRXhjZXB0aW9uPC9BPjwvQ09ERT4gLSBpZiA8Y29kZT50YXJnZXQ8L2NvZGU+IG9yCisgICAgICAgICAgICA8Y29kZT5yZXBsYWNlbWVudDwvY29kZT4gaXMgPGNvZGU+bnVsbDwvY29kZT4uPERUPjxCPlNpbmNlOjwvQj48L0RUPgorICAgICAgICA8REQ+MS41PC9ERD4KKyAgICA8L0RMPgorICAgIDwvREQ+Cis8L0RMPgorPEhSPgorCis8QSBOQU1FPSJzcGxpdChqYXZhLmxhbmcuU3RyaW5nLCBpbnQpIj48IS0tIC0tPjwvQT48SDM+CisgICAgc3BsaXQ8L0gzPgorPFBSRT4KK3B1YmxpYyA8QSBIUkVGPSIuLi8uLi9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBqYXZhLmxhbmciPlN0cmluZzwvQT5bXSA8Qj5zcGxpdDwvQj4oPEEgSFJFRj0iLi4vLi4vamF2YS9sYW5nL1N0cmluZy5odG1sIiB0aXRsZT0iY2xhc3MgaW4gamF2YS5sYW5nIj5TdHJpbmc8L0E+Jm5ic3A7cmVnZXgsCisgICAgICAgICAgICAgICAgICAgICAgaW50Jm5ic3A7bGltaXQpPC9QUkU+Cis8REw+CisgICAgPEREPlNwbGl0cyB0aGlzIHN0cmluZyBhcm91bmQgbWF0Y2hlcyBvZiB0aGUgZ2l2ZW4KKyAgICAgICAgPGEgaHJlZj0iLi4vdXRpbC9yZWdleC9QYXR0ZXJuLmh0bWwjc3VtIj5yZWd1bGFyIGV4cHJlc3Npb248L2E+LgorCisgICAgICAgIDxwPiBUaGUgYXJyYXkgcmV0dXJuZWQgYnkgdGhpcyBtZXRob2QgY29udGFpbnMgZWFjaCBzdWJzdHJpbmcgb2YgdGhpcworICAgICAgICAgICAgc3RyaW5nIHRoYXQgaXMgdGVybWluYXRlZCBieSBhbm90aGVyIHN1YnN0cmluZyB0aGF0IG1hdGNoZXMgdGhlIGdpdmVuCisgICAgICAgICAgICBleHByZXNzaW9uIG9yIGlzIHRlcm1pbmF0ZWQgYnkgdGhlIGVuZCBvZiB0aGUgc3RyaW5nLiAgVGhlIHN1YnN0cmluZ3MgaW4KKyAgICAgICAgICAgIHRoZSBhcnJheSBhcmUgaW4gdGhlIG9yZGVyIGluIHdoaWNoIHRoZXkgb2NjdXIgaW4gdGhpcyBzdHJpbmcuICBJZiB0aGUKKyAgICAgICAgICAgIGV4cHJlc3Npb24gZG9lcyBub3QgbWF0Y2ggYW55IHBhcnQgb2YgdGhlIGlucHV0IHRoZW4gdGhlIHJlc3VsdGluZyBhcnJheQorICAgICAgICAgICAgaGFzIGp1c3Qgb25lIGVsZW1lbnQsIG5hbWVseSB0aGlzIHN0cmluZy4KKworICAgICAgICA8cD4gVGhlIDx0dD5saW1pdDwvdHQ+IHBhcmFtZXRlciBjb250cm9scyB0aGUgbnVtYmVyIG9mIHRpbWVzIHRoZQorICAgICAgICAgICAgcGF0dGVybiBpcyBhcHBsaWVkIGFuZCB0aGVyZWZvcmUgYWZmZWN0cyB0aGUgbGVuZ3RoIG9mIHRoZSByZXN1bHRpbmcKKyAgICAgICAgICAgIGFycmF5LiAgSWYgdGhlIGxpbWl0IDxpPm48L2k+IGlzIGdyZWF0ZXIgdGhhbiB6ZXJvIHRoZW4gdGhlIHBhdHRlcm4KKyAgICAgICAgICAgIHdpbGwgYmUgYXBwbGllZCBhdCBtb3N0IDxpPm48L2k+Jm5ic3A7LSZuYnNwOzEgdGltZXMsIHRoZSBhcnJheSdzCisgICAgICAgICAgICBsZW5ndGggd2lsbCBiZSBubyBncmVhdGVyIHRoYW4gPGk+bjwvaT4sIGFuZCB0aGUgYXJyYXkncyBsYXN0IGVudHJ5CisgICAgICAgICAgICB3aWxsIGNvbnRhaW4gYWxsIGlucHV0IGJleW9uZCB0aGUgbGFzdCBtYXRjaGVkIGRlbGltaXRlci4gIElmIDxpPm48L2k+CisgICAgICAgICAgICBpcyBub24tcG9zaXRpdmUgdGhlbiB0aGUgcGF0dGVybiB3aWxsIGJlIGFwcGxpZWQgYXMgbWFueSB0aW1lcyBhcworICAgICAgICAgICAgcG9zc2libGUgYW5kIHRoZSBhcnJheSBjYW4gaGF2ZSBhbnkgbGVuZ3RoLiAgSWYgPGk+bjwvaT4gaXMgemVybyB0aGVuCisgICAgICAgICAgICB0aGUgcGF0dGVybiB3aWxsIGJlIGFwcGxpZWQgYXMgbWFueSB0aW1lcyBhcyBwb3NzaWJsZSwgdGhlIGFycmF5IGNhbgorICAgICAgICAgICAgaGF2ZSBhbnkgbGVuZ3RoLCBhbmQgdHJhaWxpbmcgZW1wdHkgc3RyaW5ncyB3aWxsIGJlIGRpc2NhcmRlZC4KKworICAgICAgICA8cD4gVGhlIHN0cmluZyA8dHQ+ImJvbzphbmQ6Zm9vIjwvdHQ+LCBmb3IgZXhhbXBsZSwgeWllbGRzIHRoZQorICAgICAgICAgICAgZm9sbG93aW5nIHJlc3VsdHMgd2l0aCB0aGVzZSBwYXJhbWV0ZXJzOgorCisgICAgICAgIDxibG9ja3F1b3RlPjx0YWJsZSBjZWxscGFkZGluZz0xIGNlbGxzcGFjaW5nPTAgc3VtbWFyeT0iU3BsaXQgZXhhbXBsZSBzaG93aW5nIHJlZ2V4LCBsaW1pdCwgYW5kIHJlc3VsdCI+CisgICAgICAgICAgICA8dHI+CisgICAgICAgICAgICAgICAgPHRoPlJlZ2V4PC90aD4KKyAgICAgICAgICAgICAgICA8dGg+TGltaXQ8L3RoPgorICAgICAgICAgICAgICAgIDx0aD5SZXN1bHQ8L3RoPgorICAgICAgICAgICAgPC90cj4KKyAgICAgICAgICAgIDx0cj48dGQgYWxpZ249Y2VudGVyPjo8L3RkPgorICAgICAgICAgICAgICAgIDx0ZCBhbGlnbj1jZW50ZXI+MjwvdGQ+CisgICAgICAgICAgICAgICAgPHRkPjx0dD57ICJib28iLCAiYW5kOmZvbyIgfTwvdHQ+PC90ZD48L3RyPgorICAgICAgICAgICAgPHRyPjx0ZCBhbGlnbj1jZW50ZXI+OjwvdGQ+CisgICAgICAgICAgICAgICAgPHRkIGFsaWduPWNlbnRlcj41PC90ZD4KKyAgICAgICAgICAgICAgICA8dGQ+PHR0PnsgImJvbyIsICJhbmQiLCAiZm9vIiB9PC90dD48L3RkPjwvdHI+CisgICAgICAgICAgICA8dHI+PHRkIGFsaWduPWNlbnRlcj46PC90ZD4KKyAgICAgICAgICAgICAgICA8dGQgYWxpZ249Y2VudGVyPi0yPC90ZD4KKyAgICAgICAgICAgICAgICA8dGQ+PHR0PnsgImJvbyIsICJhbmQiLCAiZm9vIiB9PC90dD48L3RkPjwvdHI+CisgICAgICAgICAgICA8dHI+PHRkIGFsaWduPWNlbnRlcj5vPC90ZD4KKyAgICAgICAgICAgICAgICA8dGQgYWxpZ249Y2VudGVyPjU8L3RkPgorICAgICAgICAgICAgICAgIDx0ZD48dHQ+eyAiYiIsICIiLCAiOmFuZDpmIiwgIiIsICIiIH08L3R0PjwvdGQ+PC90cj4KKyAgICAgICAgICAgIDx0cj48dGQgYWxpZ249Y2VudGVyPm88L3RkPgorICAgICAgICAgICAgICAgIDx0ZCBhbGlnbj1jZW50ZXI+LTI8L3RkPgorICAgICAgICAgICAgICAgIDx0ZD48dHQ+eyAiYiIsICIiLCAiOmFuZDpmIiwgIiIsICIiIH08L3R0PjwvdGQ+PC90cj4KKyAgICAgICAgICAgIDx0cj48dGQgYWxpZ249Y2VudGVyPm88L3RkPgorICAgICAgICAgICAgICAgIDx0ZCBhbGlnbj1jZW50ZXI+MDwvdGQ+CisgICAgICAgICAgICAgICAgPHRkPjx0dD57ICJiIiwgIiIsICI6YW5kOmYiIH08L3R0PjwvdGQ+PC90cj4KKyAgICAgICAgPC90YWJsZT48L2Jsb2NrcXVvdGU+CisKKyAgICAgICAgPHA+IEFuIGludm9jYXRpb24gb2YgdGhpcyBtZXRob2Qgb2YgdGhlIGZvcm0KKyAgICAgICAgICAgIDxpPnN0ci48L2k+PHR0PnNwbGl0KDwvdHQ+PGk+cmVnZXg8L2k+PHR0Piw8L3R0PiZuYnNwOzxpPm48L2k+PHR0Pik8L3R0PgorICAgICAgICAgICAgeWllbGRzIHRoZSBzYW1lIHJlc3VsdCBhcyB0aGUgZXhwcmVzc2lvbgorCisgICAgICAgIDxibG9ja3F1b3RlPgorICAgICAgICAgICAgPEEgSFJFRj0iLi4vLi4vamF2YS91dGlsL3JlZ2V4L1BhdHRlcm4uaHRtbCIgdGl0bGU9ImNsYXNzIGluIGphdmEudXRpbC5yZWdleCI+PENPREU+UGF0dGVybjwvQ09ERT48L0E+LjxBIEhSRUY9Ii4uLy4uL2phdmEvdXRpbC9yZWdleC9QYXR0ZXJuLmh0bWwjY29tcGlsZShqYXZhLmxhbmcuU3RyaW5nKSI+PENPREU+Y29tcGlsZTwvQ09ERT48L0E+PHR0Pig8L3R0PjxpPnJlZ2V4PC9pPjx0dD4pPC90dD4uPEEgSFJFRj0iLi4vLi4vamF2YS91dGlsL3JlZ2V4L1BhdHRlcm4uaHRtbCNzcGxpdChqYXZhLmxhbmcuQ2hhclNlcXVlbmNlLCBpbnQpIj48Q09ERT5zcGxpdDwvQ09ERT48L0E+PHR0Pig8L3R0PjxpPnN0cjwvaT48dHQ+LDwvdHQ+Jm5ic3A7PGk+bjwvaT48dHQ+KTwvdHQ+CisgICAgICAgIDwvYmxvY2txdW90ZT4KKyAgICAgICAgPFA+CisgICAgPEREPjxETD4KKyAgICA8L0RMPgorICAgIDwvREQ+CisgICAgPEREPjxETD4KKyAgICAgICAgPERUPjxCPlBhcmFtZXRlcnM6PC9CPjxERD48Q09ERT5yZWdleDwvQ09ERT4gLSB0aGUgZGVsaW1pdGluZyByZWd1bGFyIGV4cHJlc3Npb248REQ+PENPREU+bGltaXQ8L0NPREU+IC0gdGhlIHJlc3VsdCB0aHJlc2hvbGQsIGFzIGRlc2NyaWJlZCBhYm92ZQorICAgICAgICA8RFQ+PEI+UmV0dXJuczo8L0I+PEREPnRoZSBhcnJheSBvZiBzdHJpbmdzIGNvbXB1dGVkIGJ5IHNwbGl0dGluZyB0aGlzIHN0cmluZworICAgICAgICBhcm91bmQgbWF0Y2hlcyBvZiB0aGUgZ2l2ZW4gcmVndWxhciBleHByZXNzaW9uCisgICAgICAgIDxEVD48Qj5UaHJvd3M6PC9CPgorICAgICAgICA8REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vamF2YS91dGlsL3JlZ2V4L1BhdHRlcm5TeW50YXhFeGNlcHRpb24uaHRtbCIgdGl0bGU9ImNsYXNzIGluIGphdmEudXRpbC5yZWdleCI+UGF0dGVyblN5bnRheEV4Y2VwdGlvbjwvQT48L0NPREU+IC0gaWYgdGhlIHJlZ3VsYXIgZXhwcmVzc2lvbidzIHN5bnRheCBpcyBpbnZhbGlkPERUPjxCPlNpbmNlOjwvQj48L0RUPgorICAgICAgICA8REQ+MS40PC9ERD4KKyAgICAgICAgPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vamF2YS91dGlsL3JlZ2V4L1BhdHRlcm4uaHRtbCIgdGl0bGU9ImNsYXNzIGluIGphdmEudXRpbC5yZWdleCI+PENPREU+UGF0dGVybjwvQ09ERT48L0E+PC9ETD4KKyAgICA8L0REPgorPC9ETD4KKzxIUj4KKworPEEgTkFNRT0ic3BsaXQoamF2YS5sYW5nLlN0cmluZykiPjwhLS0gLS0+PC9BPjxIMz4KKyAgICBzcGxpdDwvSDM+Cis8UFJFPgorcHVibGljIDxBIEhSRUY9Ii4uLy4uL2phdmEvbGFuZy9TdHJpbmcuaHRtbCIgdGl0bGU9ImNsYXNzIGluIGphdmEubGFuZyI+U3RyaW5nPC9BPltdIDxCPnNwbGl0PC9CPig8QSBIUkVGPSIuLi8uLi9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBqYXZhLmxhbmciPlN0cmluZzwvQT4mbmJzcDtyZWdleCk8L1BSRT4KKzxETD4KKyAgICA8REQ+U3BsaXRzIHRoaXMgc3RyaW5nIGFyb3VuZCBtYXRjaGVzIG9mIHRoZSBnaXZlbiA8YQorICAgICAgICAgICAgaHJlZj0iLi4vdXRpbC9yZWdleC9QYXR0ZXJuLmh0bWwjc3VtIj5yZWd1bGFyIGV4cHJlc3Npb248L2E+LgorCisgICAgICAgIDxwPiBUaGlzIG1ldGhvZCB3b3JrcyBhcyBpZiBieSBpbnZva2luZyB0aGUgdHdvLWFyZ3VtZW50IDxBIEhSRUY9Ii4uLy4uL2phdmEvbGFuZy9TdHJpbmcuaHRtbCNzcGxpdChqYXZhLmxhbmcuU3RyaW5nLCBpbnQpIj48Q09ERT5zcGxpdDwvQ09ERT48L0E+IG1ldGhvZCB3aXRoIHRoZSBnaXZlbiBleHByZXNzaW9uIGFuZCBhIGxpbWl0CisgICAgICAgICAgICBhcmd1bWVudCBvZiB6ZXJvLiAgVHJhaWxpbmcgZW1wdHkgc3RyaW5ncyBhcmUgdGhlcmVmb3JlIG5vdCBpbmNsdWRlZCBpbgorICAgICAgICAgICAgdGhlIHJlc3VsdGluZyBhcnJheS4KKworICAgICAgICA8cD4gVGhlIHN0cmluZyA8dHQ+ImJvbzphbmQ6Zm9vIjwvdHQ+LCBmb3IgZXhhbXBsZSwgeWllbGRzIHRoZSBmb2xsb3dpbmcKKyAgICAgICAgICAgIHJlc3VsdHMgd2l0aCB0aGVzZSBleHByZXNzaW9uczoKKworICAgICAgICA8YmxvY2txdW90ZT48dGFibGUgY2VsbHBhZGRpbmc9MSBjZWxsc3BhY2luZz0wIHN1bW1hcnk9IlNwbGl0IGV4YW1wbGVzIHNob3dpbmcgcmVnZXggYW5kIHJlc3VsdCI+CisgICAgICAgICAgICA8dHI+CisgICAgICAgICAgICAgICAgPHRoPlJlZ2V4PC90aD4KKyAgICAgICAgICAgICAgICA8dGg+UmVzdWx0PC90aD4KKyAgICAgICAgICAgIDwvdHI+CisgICAgICAgICAgICA8dHI+PHRkIGFsaWduPWNlbnRlcj46PC90ZD4KKyAgICAgICAgICAgICAgICA8dGQ+PHR0PnsgImJvbyIsICJhbmQiLCAiZm9vIiB9PC90dD48L3RkPjwvdHI+CisgICAgICAgICAgICA8dHI+PHRkIGFsaWduPWNlbnRlcj5vPC90ZD4KKyAgICAgICAgICAgICAgICA8dGQ+PHR0PnsgImIiLCAiIiwgIjphbmQ6ZiIgfTwvdHQ+PC90ZD48L3RyPgorICAgICAgICA8L3RhYmxlPjwvYmxvY2txdW90ZT4KKyAgICAgICAgPFA+CisgICAgPEREPjxETD4KKyAgICA8L0RMPgorICAgIDwvREQ+CisgICAgPEREPjxETD4KKyAgICAgICAgPERUPjxCPlBhcmFtZXRlcnM6PC9CPjxERD48Q09ERT5yZWdleDwvQ09ERT4gLSB0aGUgZGVsaW1pdGluZyByZWd1bGFyIGV4cHJlc3Npb24KKyAgICAgICAgPERUPjxCPlJldHVybnM6PC9CPjxERD50aGUgYXJyYXkgb2Ygc3RyaW5ncyBjb21wdXRlZCBieSBzcGxpdHRpbmcgdGhpcyBzdHJpbmcKKyAgICAgICAgYXJvdW5kIG1hdGNoZXMgb2YgdGhlIGdpdmVuIHJlZ3VsYXIgZXhwcmVzc2lvbgorICAgICAgICA8RFQ+PEI+VGhyb3dzOjwvQj4KKyAgICAgICAgPEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uL2phdmEvdXRpbC9yZWdleC9QYXR0ZXJuU3ludGF4RXhjZXB0aW9uLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBqYXZhLnV0aWwucmVnZXgiPlBhdHRlcm5TeW50YXhFeGNlcHRpb248L0E+PC9DT0RFPiAtIGlmIHRoZSByZWd1bGFyIGV4cHJlc3Npb24ncyBzeW50YXggaXMgaW52YWxpZDxEVD48Qj5TaW5jZTo8L0I+PC9EVD4KKyAgICAgICAgPEREPjEuNDwvREQ+CisgICAgICAgIDxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uL2phdmEvdXRpbC9yZWdleC9QYXR0ZXJuLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBqYXZhLnV0aWwucmVnZXgiPjxDT0RFPlBhdHRlcm48L0NPREU+PC9BPjwvREw+CisgICAgPC9ERD4KKzwvREw+Cis8SFI+CisKKzxBIE5BTUU9InRvTG93ZXJDYXNlKGphdmEudXRpbC5Mb2NhbGUpIj48IS0tIC0tPjwvQT48SDM+CisgICAgdG9Mb3dlckNhc2U8L0gzPgorPFBSRT4KK3B1YmxpYyA8QSBIUkVGPSIuLi8uLi9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBqYXZhLmxhbmciPlN0cmluZzwvQT4gPEI+dG9Mb3dlckNhc2U8L0I+KDxBIEhSRUY9Ii4uLy4uL2phdmEvdXRpbC9Mb2NhbGUuaHRtbCIgdGl0bGU9ImNsYXNzIGluIGphdmEudXRpbCI+TG9jYWxlPC9BPiZuYnNwO2xvY2FsZSk8L1BSRT4KKzxETD4KKyAgICA8REQ+Q29udmVydHMgYWxsIG9mIHRoZSBjaGFyYWN0ZXJzIGluIHRoaXMgPGNvZGU+U3RyaW5nPC9jb2RlPiB0byBsb3dlcgorICAgICAgICBjYXNlIHVzaW5nIHRoZSBydWxlcyBvZiB0aGUgZ2l2ZW4gPGNvZGU+TG9jYWxlPC9jb2RlPi4gIENhc2UgbWFwcGluZyBpcyBiYXNlZAorICAgICAgICBvbiB0aGUgVW5pY29kZSBTdGFuZGFyZCB2ZXJzaW9uIHNwZWNpZmllZCBieSB0aGUgPEEgSFJFRj0iLi4vLi4vamF2YS9sYW5nL0NoYXJhY3Rlci5odG1sIiB0aXRsZT0iY2xhc3MgaW4gamF2YS5sYW5nIj48Q09ERT5DaGFyYWN0ZXI8L0NPREU+PC9BPgorICAgICAgICBjbGFzcy4gU2luY2UgY2FzZSBtYXBwaW5ncyBhcmUgbm90IGFsd2F5cyAxOjEgY2hhciBtYXBwaW5ncywgdGhlIHJlc3VsdGluZworICAgICAgICA8Y29kZT5TdHJpbmc8L2NvZGU+IG1heSBiZSBhIGRpZmZlcmVudCBsZW5ndGggdGhhbiB0aGUgb3JpZ2luYWwgPGNvZGU+U3RyaW5nPC9jb2RlPi4KKyAgICAgICAgPHA+CisgICAgICAgICAgICBFeGFtcGxlcyBvZiBsb3dlcmNhc2UgIG1hcHBpbmdzIGFyZSBpbiB0aGUgZm9sbG93aW5nIHRhYmxlOgorICAgICAgICA8dGFibGUgYm9yZGVyPSIxIiBzdW1tYXJ5PSJMb3dlcmNhc2UgbWFwcGluZyBleGFtcGxlcyBzaG93aW5nIGxhbmd1YWdlIGNvZGUgb2YgbG9jYWxlLCB1cHBlciBjYXNlLCBsb3dlciBjYXNlLCBhbmQgZGVzY3JpcHRpb24iPgorICAgICAgICAgICAgPHRyPgorICAgICAgICAgICAgICAgIDx0aD5MYW5ndWFnZSBDb2RlIG9mIExvY2FsZTwvdGg+CisgICAgICAgICAgICAgICAgPHRoPlVwcGVyIENhc2U8L3RoPgorICAgICAgICAgICAgICAgIDx0aD5Mb3dlciBDYXNlPC90aD4KKyAgICAgICAgICAgICAgICA8dGg+RGVzY3JpcHRpb248L3RoPgorICAgICAgICAgICAgPC90cj4KKyAgICAgICAgICAgIDx0cj4KKyAgICAgICAgICAgICAgICA8dGQ+dHIgKFR1cmtpc2gpPC90ZD4KKyAgICAgICAgICAgICAgICA8dGQ+JiM5Mjt1MDEzMDwvdGQ+CisgICAgICAgICAgICAgICAgPHRkPiYjOTI7dTAwNjk8L3RkPgorICAgICAgICAgICAgICAgIDx0ZD5jYXBpdGFsIGxldHRlciBJIHdpdGggZG90IGFib3ZlIC0mZ3Q7IHNtYWxsIGxldHRlciBpPC90ZD4KKyAgICAgICAgICAgIDwvdHI+CisgICAgICAgICAgICA8dHI+CisgICAgICAgICAgICAgICAgPHRkPnRyIChUdXJraXNoKTwvdGQ+CisgICAgICAgICAgICAgICAgPHRkPiYjOTI7dTAwNDk8L3RkPgorICAgICAgICAgICAgICAgIDx0ZD4mIzkyO3UwMTMxPC90ZD4KKyAgICAgICAgICAgICAgICA8dGQ+Y2FwaXRhbCBsZXR0ZXIgSSAtJmd0OyBzbWFsbCBsZXR0ZXIgZG90bGVzcyBpIDwvdGQ+CisgICAgICAgICAgICA8L3RyPgorICAgICAgICAgICAgPHRyPgorICAgICAgICAgICAgICAgIDx0ZD4oYWxsKTwvdGQ+CisgICAgICAgICAgICAgICAgPHRkPkZyZW5jaCBGcmllczwvdGQ+CisgICAgICAgICAgICAgICAgPHRkPmZyZW5jaCBmcmllczwvdGQ+CisgICAgICAgICAgICAgICAgPHRkPmxvd2VyY2FzZWQgYWxsIGNoYXJzIGluIFN0cmluZzwvdGQ+CisgICAgICAgICAgICA8L3RyPgorICAgICAgICAgICAgPHRyPgorICAgICAgICAgICAgICAgIDx0ZD4oYWxsKTwvdGQ+CisgICAgICAgICAgICAgICAgPHRkPjxpbWcgc3JjPSJkb2MtZmlsZXMvY2FwaW90YS5naWYiIGFsdD0iY2FwaW90YSI+PGltZyBzcmM9ImRvYy1maWxlcy9jYXBjaGkuZ2lmIiBhbHQ9ImNhcGNoaSI+CisgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJkb2MtZmlsZXMvY2FwdGhldGEuZ2lmIiBhbHQ9ImNhcHRoZXRhIj48aW1nIHNyYz0iZG9jLWZpbGVzL2NhcHVwc2lsLmdpZiIgYWx0PSJjYXB1cHNpbCI+CisgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJkb2MtZmlsZXMvY2Fwc2lnbWEuZ2lmIiBhbHQ9ImNhcHNpZ21hIj48L3RkPgorICAgICAgICAgICAgICAgIDx0ZD48aW1nIHNyYz0iZG9jLWZpbGVzL2lvdGEuZ2lmIiBhbHQ9ImlvdGEiPjxpbWcgc3JjPSJkb2MtZmlsZXMvY2hpLmdpZiIgYWx0PSJjaGkiPgorICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iZG9jLWZpbGVzL3RoZXRhLmdpZiIgYWx0PSJ0aGV0YSI+PGltZyBzcmM9ImRvYy1maWxlcy91cHNpbG9uLmdpZiIgYWx0PSJ1cHNpbG9uIj4KKyAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImRvYy1maWxlcy9zaWdtYTEuZ2lmIiBhbHQ9InNpZ21hIj48L3RkPgorICAgICAgICAgICAgICAgIDx0ZD5sb3dlcmNhc2VkIGFsbCBjaGFycyBpbiBTdHJpbmc8L3RkPgorICAgICAgICAgICAgPC90cj4KKyAgICAgICAgPC90YWJsZT4KKyAgICAgICAgPFA+CisgICAgPEREPjxETD4KKyAgICA8L0RMPgorICAgIDwvREQ+CisgICAgPEREPjxETD4KKyAgICAgICAgPERUPjxCPlBhcmFtZXRlcnM6PC9CPjxERD48Q09ERT5sb2NhbGU8L0NPREU+IC0gdXNlIHRoZSBjYXNlIHRyYW5zZm9ybWF0aW9uIHJ1bGVzIGZvciB0aGlzIGxvY2FsZQorICAgICAgICA8RFQ+PEI+UmV0dXJuczo8L0I+PEREPnRoZSA8Y29kZT5TdHJpbmc8L2NvZGU+LCBjb252ZXJ0ZWQgdG8gbG93ZXJjYXNlLjxEVD48Qj5TaW5jZTo8L0I+PC9EVD4KKyAgICAgICAgPEREPjEuMTwvREQ+CisgICAgICAgIDxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uL2phdmEvbGFuZy9TdHJpbmcuaHRtbCN0b0xvd2VyQ2FzZSgpIj48Q09ERT50b0xvd2VyQ2FzZSgpPC9DT0RFPjwvQT4sCisgICAgICAgIDxBIEhSRUY9Ii4uLy4uL2phdmEvbGFuZy9TdHJpbmcuaHRtbCN0b1VwcGVyQ2FzZSgpIj48Q09ERT50b1VwcGVyQ2FzZSgpPC9DT0RFPjwvQT4sCisgICAgICAgIDxBIEhSRUY9Ii4uLy4uL2phdmEvbGFuZy9TdHJpbmcuaHRtbCN0b1VwcGVyQ2FzZShqYXZhLnV0aWwuTG9jYWxlKSI+PENPREU+dG9VcHBlckNhc2UoTG9jYWxlKTwvQ09ERT48L0E+PC9ETD4KKyAgICA8L0REPgorPC9ETD4KKzxIUj4KKworPEEgTkFNRT0idG9Mb3dlckNhc2UoKSI+PCEtLSAtLT48L0E+PEgzPgorICAgIHRvTG93ZXJDYXNlPC9IMz4KKzxQUkU+CitwdWJsaWMgPEEgSFJFRj0iLi4vLi4vamF2YS9sYW5nL1N0cmluZy5odG1sIiB0aXRsZT0iY2xhc3MgaW4gamF2YS5sYW5nIj5TdHJpbmc8L0E+IDxCPnRvTG93ZXJDYXNlPC9CPigpPC9QUkU+Cis8REw+CisgICAgPEREPkNvbnZlcnRzIGFsbCBvZiB0aGUgY2hhcmFjdGVycyBpbiB0aGlzIDxjb2RlPlN0cmluZzwvY29kZT4gdG8gbG93ZXIKKyAgICAgICAgY2FzZSB1c2luZyB0aGUgcnVsZXMgb2YgdGhlIGRlZmF1bHQgbG9jYWxlLiBUaGlzIGlzIGVxdWl2YWxlbnQgdG8gY2FsbGluZworICAgICAgICA8Y29kZT50b0xvd2VyQ2FzZShMb2NhbGUuZ2V0RGVmYXVsdCgpKTwvY29kZT4uCisgICAgICAgIDxwPgorICAgICAgICAgICAgPGI+Tm90ZTo8L2I+IFRoaXMgbWV0aG9kIGlzIGxvY2FsZSBzZW5zaXRpdmUsIGFuZCBtYXkgcHJvZHVjZSB1bmV4cGVjdGVkCisgICAgICAgICAgICByZXN1bHRzIGlmIHVzZWQgZm9yIHN0cmluZ3MgdGhhdCBhcmUgaW50ZW5kZWQgdG8gYmUgaW50ZXJwcmV0ZWQgbG9jYWxlCisgICAgICAgICAgICBpbmRlcGVuZGVudGx5LgorICAgICAgICAgICAgRXhhbXBsZXMgYXJlIHByb2dyYW1taW5nIGxhbmd1YWdlIGlkZW50aWZpZXJzLCBwcm90b2NvbCBrZXlzLCBhbmQgSFRNTAorICAgICAgICAgICAgdGFncy4KKyAgICAgICAgICAgIEZvciBpbnN0YW5jZSwgPGNvZGU+IlRJVExFIi50b0xvd2VyQ2FzZSgpPC9jb2RlPiBpbiBhIFR1cmtpc2ggbG9jYWxlCisgICAgICAgICAgICByZXR1cm5zIDxjb2RlPiJ0P3RsZSI8L2NvZGU+LCB3aGVyZSAnPycgaXMgdGhlIExBVElOIFNNQUxMCisgICAgICAgICAgICBMRVRURVIgRE9UTEVTUyBJIGNoYXJhY3Rlci4KKyAgICAgICAgICAgIFRvIG9idGFpbiBjb3JyZWN0IHJlc3VsdHMgZm9yIGxvY2FsZSBpbnNlbnNpdGl2ZSBzdHJpbmdzLCB1c2UKKyAgICAgICAgICAgIDxjb2RlPnRvTG93ZXJDYXNlKExvY2FsZS5FTkdMSVNIKTwvY29kZT4uCisgICAgICAgIDxwPgorICAgICAgICA8UD4KKyAgICA8REQ+PERMPgorICAgIDwvREw+CisgICAgPC9ERD4KKyAgICA8REQ+PERMPgorCisgICAgICAgIDxEVD48Qj5SZXR1cm5zOjwvQj48REQ+dGhlIDxjb2RlPlN0cmluZzwvY29kZT4sIGNvbnZlcnRlZCB0byBsb3dlcmNhc2UuPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vamF2YS9sYW5nL1N0cmluZy5odG1sI3RvTG93ZXJDYXNlKGphdmEudXRpbC5Mb2NhbGUpIj48Q09ERT50b0xvd2VyQ2FzZShMb2NhbGUpPC9DT0RFPjwvQT48L0RMPgorICAgIDwvREQ+Cis8L0RMPgorPEhSPgorCis8QSBOQU1FPSJ0b1VwcGVyQ2FzZShqYXZhLnV0aWwuTG9jYWxlKSI+PCEtLSAtLT48L0E+PEgzPgorICAgIHRvVXBwZXJDYXNlPC9IMz4KKzxQUkU+CitwdWJsaWMgPEEgSFJFRj0iLi4vLi4vamF2YS9sYW5nL1N0cmluZy5odG1sIiB0aXRsZT0iY2xhc3MgaW4gamF2YS5sYW5nIj5TdHJpbmc8L0E+IDxCPnRvVXBwZXJDYXNlPC9CPig8QSBIUkVGPSIuLi8uLi9qYXZhL3V0aWwvTG9jYWxlLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBqYXZhLnV0aWwiPkxvY2FsZTwvQT4mbmJzcDtsb2NhbGUpPC9QUkU+Cis8REw+CisgICAgPEREPkNvbnZlcnRzIGFsbCBvZiB0aGUgY2hhcmFjdGVycyBpbiB0aGlzIDxjb2RlPlN0cmluZzwvY29kZT4gdG8gdXBwZXIKKyAgICAgICAgY2FzZSB1c2luZyB0aGUgcnVsZXMgb2YgdGhlIGdpdmVuIDxjb2RlPkxvY2FsZTwvY29kZT4uIENhc2UgbWFwcGluZyBpcyBiYXNlZAorICAgICAgICBvbiB0aGUgVW5pY29kZSBTdGFuZGFyZCB2ZXJzaW9uIHNwZWNpZmllZCBieSB0aGUgPEEgSFJFRj0iLi4vLi4vamF2YS9sYW5nL0NoYXJhY3Rlci5odG1sIiB0aXRsZT0iY2xhc3MgaW4gamF2YS5sYW5nIj48Q09ERT5DaGFyYWN0ZXI8L0NPREU+PC9BPgorICAgICAgICBjbGFzcy4gU2luY2UgY2FzZSBtYXBwaW5ncyBhcmUgbm90IGFsd2F5cyAxOjEgY2hhciBtYXBwaW5ncywgdGhlIHJlc3VsdGluZworICAgICAgICA8Y29kZT5TdHJpbmc8L2NvZGU+IG1heSBiZSBhIGRpZmZlcmVudCBsZW5ndGggdGhhbiB0aGUgb3JpZ2luYWwgPGNvZGU+U3RyaW5nPC9jb2RlPi4KKyAgICAgICAgPHA+CisgICAgICAgICAgICBFeGFtcGxlcyBvZiBsb2NhbGUtc2Vuc2l0aXZlIGFuZCAxOk0gY2FzZSBtYXBwaW5ncyBhcmUgaW4gdGhlIGZvbGxvd2luZyB0YWJsZS4KKyAgICAgICAgPHA+CisgICAgICAgIDx0YWJsZSBib3JkZXI9IjEiIHN1bW1hcnk9IkV4YW1wbGVzIG9mIGxvY2FsZS1zZW5zaXRpdmUgYW5kIDE6TSBjYXNlIG1hcHBpbmdzLiBTaG93cyBMYW5ndWFnZSBjb2RlIG9mIGxvY2FsZSwgbG93ZXIgY2FzZSwgdXBwZXIgY2FzZSwgYW5kIGRlc2NyaXB0aW9uLiI+CisgICAgICAgICAgICA8dHI+CisgICAgICAgICAgICAgICAgPHRoPkxhbmd1YWdlIENvZGUgb2YgTG9jYWxlPC90aD4KKyAgICAgICAgICAgICAgICA8dGg+TG93ZXIgQ2FzZTwvdGg+CisgICAgICAgICAgICAgICAgPHRoPlVwcGVyIENhc2U8L3RoPgorICAgICAgICAgICAgICAgIDx0aD5EZXNjcmlwdGlvbjwvdGg+CisgICAgICAgICAgICA8L3RyPgorICAgICAgICAgICAgPHRyPgorICAgICAgICAgICAgICAgIDx0ZD50ciAoVHVya2lzaCk8L3RkPgorICAgICAgICAgICAgICAgIDx0ZD4mIzkyO3UwMDY5PC90ZD4KKyAgICAgICAgICAgICAgICA8dGQ+JiM5Mjt1MDEzMDwvdGQ+CisgICAgICAgICAgICAgICAgPHRkPnNtYWxsIGxldHRlciBpIC0mZ3Q7IGNhcGl0YWwgbGV0dGVyIEkgd2l0aCBkb3QgYWJvdmU8L3RkPgorICAgICAgICAgICAgPC90cj4KKyAgICAgICAgICAgIDx0cj4KKyAgICAgICAgICAgICAgICA8dGQ+dHIgKFR1cmtpc2gpPC90ZD4KKyAgICAgICAgICAgICAgICA8dGQ+JiM5Mjt1MDEzMTwvdGQ+CisgICAgICAgICAgICAgICAgPHRkPiYjOTI7dTAwNDk8L3RkPgorICAgICAgICAgICAgICAgIDx0ZD5zbWFsbCBsZXR0ZXIgZG90bGVzcyBpIC0mZ3Q7IGNhcGl0YWwgbGV0dGVyIEk8L3RkPgorICAgICAgICAgICAgPC90cj4KKyAgICAgICAgICAgIDx0cj4KKyAgICAgICAgICAgICAgICA8dGQ+KGFsbCk8L3RkPgorICAgICAgICAgICAgICAgIDx0ZD4mIzkyO3UwMGRmPC90ZD4KKyAgICAgICAgICAgICAgICA8dGQ+JiM5Mjt1MDA1MyAmIzkyO3UwMDUzPC90ZD4KKyAgICAgICAgICAgICAgICA8dGQ+c21hbGwgbGV0dGVyIHNoYXJwIHMgLSZndDsgdHdvIGxldHRlcnM6IFNTPC90ZD4KKyAgICAgICAgICAgIDwvdHI+CisgICAgICAgICAgICA8dHI+CisgICAgICAgICAgICAgICAgPHRkPihhbGwpPC90ZD4KKyAgICAgICAgICAgICAgICA8dGQ+RmFocnZlcmduJnV1bWw7Z2VuPC90ZD4KKyAgICAgICAgICAgICAgICA8dGQ+RkFIUlZFUkdOJlV1bWw7R0VOPC90ZD4KKyAgICAgICAgICAgICAgICA8dGQ+PC90ZD4KKyAgICAgICAgICAgIDwvdHI+CisgICAgICAgIDwvdGFibGU+CisgICAgICAgIDxQPgorICAgIDxERD48REw+CisgICAgPC9ETD4KKyAgICA8L0REPgorICAgIDxERD48REw+CisgICAgICAgIDxEVD48Qj5QYXJhbWV0ZXJzOjwvQj48REQ+PENPREU+bG9jYWxlPC9DT0RFPiAtIHVzZSB0aGUgY2FzZSB0cmFuc2Zvcm1hdGlvbiBydWxlcyBmb3IgdGhpcyBsb2NhbGUKKyAgICAgICAgPERUPjxCPlJldHVybnM6PC9CPjxERD50aGUgPGNvZGU+U3RyaW5nPC9jb2RlPiwgY29udmVydGVkIHRvIHVwcGVyY2FzZS48RFQ+PEI+U2luY2U6PC9CPjwvRFQ+CisgICAgICAgIDxERD4xLjE8L0REPgorICAgICAgICA8RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi9qYXZhL2xhbmcvU3RyaW5nLmh0bWwjdG9VcHBlckNhc2UoKSI+PENPREU+dG9VcHBlckNhc2UoKTwvQ09ERT48L0E+LAorICAgICAgICA8QSBIUkVGPSIuLi8uLi9qYXZhL2xhbmcvU3RyaW5nLmh0bWwjdG9Mb3dlckNhc2UoKSI+PENPREU+dG9Mb3dlckNhc2UoKTwvQ09ERT48L0E+LAorICAgICAgICA8QSBIUkVGPSIuLi8uLi9qYXZhL2xhbmcvU3RyaW5nLmh0bWwjdG9Mb3dlckNhc2UoamF2YS51dGlsLkxvY2FsZSkiPjxDT0RFPnRvTG93ZXJDYXNlKExvY2FsZSk8L0NPREU+PC9BPjwvREw+CisgICAgPC9ERD4KKzwvREw+Cis8SFI+CisKKzxBIE5BTUU9InRvVXBwZXJDYXNlKCkiPjwhLS0gLS0+PC9BPjxIMz4KKyAgICB0b1VwcGVyQ2FzZTwvSDM+Cis8UFJFPgorcHVibGljIDxBIEhSRUY9Ii4uLy4uL2phdmEvbGFuZy9TdHJpbmcuaHRtbCIgdGl0bGU9ImNsYXNzIGluIGphdmEubGFuZyI+U3RyaW5nPC9BPiA8Qj50b1VwcGVyQ2FzZTwvQj4oKTwvUFJFPgorPERMPgorICAgIDxERD5Db252ZXJ0cyBhbGwgb2YgdGhlIGNoYXJhY3RlcnMgaW4gdGhpcyA8Y29kZT5TdHJpbmc8L2NvZGU+IHRvIHVwcGVyCisgICAgICAgIGNhc2UgdXNpbmcgdGhlIHJ1bGVzIG9mIHRoZSBkZWZhdWx0IGxvY2FsZS4gVGhpcyBtZXRob2QgaXMgZXF1aXZhbGVudCB0bworICAgICAgICA8Y29kZT50b1VwcGVyQ2FzZShMb2NhbGUuZ2V0RGVmYXVsdCgpKTwvY29kZT4uCisgICAgICAgIDxwPgorICAgICAgICAgICAgPGI+Tm90ZTo8L2I+IFRoaXMgbWV0aG9kIGlzIGxvY2FsZSBzZW5zaXRpdmUsIGFuZCBtYXkgcHJvZHVjZSB1bmV4cGVjdGVkCisgICAgICAgICAgICByZXN1bHRzIGlmIHVzZWQgZm9yIHN0cmluZ3MgdGhhdCBhcmUgaW50ZW5kZWQgdG8gYmUgaW50ZXJwcmV0ZWQgbG9jYWxlCisgICAgICAgICAgICBpbmRlcGVuZGVudGx5LgorICAgICAgICAgICAgRXhhbXBsZXMgYXJlIHByb2dyYW1taW5nIGxhbmd1YWdlIGlkZW50aWZpZXJzLCBwcm90b2NvbCBrZXlzLCBhbmQgSFRNTAorICAgICAgICAgICAgdGFncy4KKyAgICAgICAgICAgIEZvciBpbnN0YW5jZSwgPGNvZGU+InRpdGxlIi50b1VwcGVyQ2FzZSgpPC9jb2RlPiBpbiBhIFR1cmtpc2ggbG9jYWxlCisgICAgICAgICAgICByZXR1cm5zIDxjb2RlPiJUP1RMRSI8L2NvZGU+LCB3aGVyZSAnPycgaXMgdGhlIExBVElOIENBUElUQUwKKyAgICAgICAgICAgIExFVFRFUiBJIFdJVEggRE9UIEFCT1ZFIGNoYXJhY3Rlci4KKyAgICAgICAgICAgIFRvIG9idGFpbiBjb3JyZWN0IHJlc3VsdHMgZm9yIGxvY2FsZSBpbnNlbnNpdGl2ZSBzdHJpbmdzLCB1c2UKKyAgICAgICAgICAgIDxjb2RlPnRvVXBwZXJDYXNlKExvY2FsZS5FTkdMSVNIKTwvY29kZT4uCisgICAgICAgIDxwPgorICAgICAgICA8UD4KKyAgICA8REQ+PERMPgorICAgIDwvREw+CisgICAgPC9ERD4KKyAgICA8REQ+PERMPgorCisgICAgICAgIDxEVD48Qj5SZXR1cm5zOjwvQj48REQ+dGhlIDxjb2RlPlN0cmluZzwvY29kZT4sIGNvbnZlcnRlZCB0byB1cHBlcmNhc2UuPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vamF2YS9sYW5nL1N0cmluZy5odG1sI3RvVXBwZXJDYXNlKGphdmEudXRpbC5Mb2NhbGUpIj48Q09ERT50b1VwcGVyQ2FzZShMb2NhbGUpPC9DT0RFPjwvQT48L0RMPgorICAgIDwvREQ+Cis8L0RMPgorPEhSPgorCis8QSBOQU1FPSJ0cmltKCkiPjwhLS0gLS0+PC9BPjxIMz4KKyAgICB0cmltPC9IMz4KKzxQUkU+CitwdWJsaWMgPEEgSFJFRj0iLi4vLi4vamF2YS9sYW5nL1N0cmluZy5odG1sIiB0aXRsZT0iY2xhc3MgaW4gamF2YS5sYW5nIj5TdHJpbmc8L0E+IDxCPnRyaW08L0I+KCk8L1BSRT4KKzxETD4KKyAgICA8REQ+UmV0dXJucyBhIGNvcHkgb2YgdGhlIHN0cmluZywgd2l0aCBsZWFkaW5nIGFuZCB0cmFpbGluZyB3aGl0ZXNwYWNlCisgICAgICAgIG9taXR0ZWQuCisgICAgICAgIDxwPgorICAgICAgICAgICAgSWYgdGhpcyA8Y29kZT5TdHJpbmc8L2NvZGU+IG9iamVjdCByZXByZXNlbnRzIGFuIGVtcHR5IGNoYXJhY3RlcgorICAgICAgICAgICAgc2VxdWVuY2UsIG9yIHRoZSBmaXJzdCBhbmQgbGFzdCBjaGFyYWN0ZXJzIG9mIGNoYXJhY3RlciBzZXF1ZW5jZQorICAgICAgICAgICAgcmVwcmVzZW50ZWQgYnkgdGhpcyA8Y29kZT5TdHJpbmc8L2NvZGU+IG9iamVjdCBib3RoIGhhdmUgY29kZXMKKyAgICAgICAgICAgIGdyZWF0ZXIgdGhhbiA8Y29kZT4nJiM5Mjt1MDAyMCc8L2NvZGU+ICh0aGUgc3BhY2UgY2hhcmFjdGVyKSwgdGhlbiBhCisgICAgICAgICAgICByZWZlcmVuY2UgdG8gdGhpcyA8Y29kZT5TdHJpbmc8L2NvZGU+IG9iamVjdCBpcyByZXR1cm5lZC4KKyAgICAgICAgPHA+CisgICAgICAgICAgICBPdGhlcndpc2UsIGlmIHRoZXJlIGlzIG5vIGNoYXJhY3RlciB3aXRoIGEgY29kZSBncmVhdGVyIHRoYW4KKyAgICAgICAgICAgIDxjb2RlPicmIzkyO3UwMDIwJzwvY29kZT4gaW4gdGhlIHN0cmluZywgdGhlbiBhIG5ldworICAgICAgICAgICAgPGNvZGU+U3RyaW5nPC9jb2RlPiBvYmplY3QgcmVwcmVzZW50aW5nIGFuIGVtcHR5IHN0cmluZyBpcyBjcmVhdGVkCisgICAgICAgICAgICBhbmQgcmV0dXJuZWQuCisgICAgICAgIDxwPgorICAgICAgICAgICAgT3RoZXJ3aXNlLCBsZXQgPGk+azwvaT4gYmUgdGhlIGluZGV4IG9mIHRoZSBmaXJzdCBjaGFyYWN0ZXIgaW4gdGhlCisgICAgICAgICAgICBzdHJpbmcgd2hvc2UgY29kZSBpcyBncmVhdGVyIHRoYW4gPGNvZGU+JyYjOTI7dTAwMjAnPC9jb2RlPiwgYW5kIGxldAorICAgICAgICAgICAgPGk+bTwvaT4gYmUgdGhlIGluZGV4IG9mIHRoZSBsYXN0IGNoYXJhY3RlciBpbiB0aGUgc3RyaW5nIHdob3NlIGNvZGUKKyAgICAgICAgICAgIGlzIGdyZWF0ZXIgdGhhbiA8Y29kZT4nJiM5Mjt1MDAyMCc8L2NvZGU+LiBBIG5ldyA8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICAgICAgICBvYmplY3QgaXMgY3JlYXRlZCwgcmVwcmVzZW50aW5nIHRoZSBzdWJzdHJpbmcgb2YgdGhpcyBzdHJpbmcgdGhhdAorICAgICAgICAgICAgYmVnaW5zIHdpdGggdGhlIGNoYXJhY3RlciBhdCBpbmRleCA8aT5rPC9pPiBhbmQgZW5kcyB3aXRoIHRoZQorICAgICAgICAgICAgY2hhcmFjdGVyIGF0IGluZGV4IDxpPm08L2k+LXRoYXQgaXMsIHRoZSByZXN1bHQgb2YKKyAgICAgICAgICAgIDxjb2RlPnRoaXMuc3Vic3RyaW5nKDxpPms8L2k+LCZuYnNwOzxpPm08L2k+KzEpPC9jb2RlPi4KKyAgICAgICAgPHA+CisgICAgICAgICAgICBUaGlzIG1ldGhvZCBtYXkgYmUgdXNlZCB0byB0cmltIHdoaXRlc3BhY2UgKGFzIGRlZmluZWQgYWJvdmUpIGZyb20KKyAgICAgICAgICAgIHRoZSBiZWdpbm5pbmcgYW5kIGVuZCBvZiBhIHN0cmluZy4KKyAgICAgICAgPFA+CisgICAgPEREPjxETD4KKyAgICA8L0RMPgorICAgIDwvREQ+CisgICAgPEREPjxETD4KKworICAgICAgICA8RFQ+PEI+UmV0dXJuczo8L0I+PEREPkEgY29weSBvZiB0aGlzIHN0cmluZyB3aXRoIGxlYWRpbmcgYW5kIHRyYWlsaW5nIHdoaXRlCisgICAgICAgIHNwYWNlIHJlbW92ZWQsIG9yIHRoaXMgc3RyaW5nIGlmIGl0IGhhcyBubyBsZWFkaW5nIG9yCisgICAgICAgIHRyYWlsaW5nIHdoaXRlIHNwYWNlLjwvREw+CisgICAgPC9ERD4KKzwvREw+Cis8SFI+CisKKzxBIE5BTUU9InRvU3RyaW5nKCkiPjwhLS0gLS0+PC9BPjxIMz4KKyAgICB0b1N0cmluZzwvSDM+Cis8UFJFPgorcHVibGljIDxBIEhSRUY9Ii4uLy4uL2phdmEvbGFuZy9TdHJpbmcuaHRtbCIgdGl0bGU9ImNsYXNzIGluIGphdmEubGFuZyI+U3RyaW5nPC9BPiA8Qj50b1N0cmluZzwvQj4oKTwvUFJFPgorPERMPgorICAgIDxERD5UaGlzIG9iamVjdCAod2hpY2ggaXMgYWxyZWFkeSBhIHN0cmluZyEpIGlzIGl0c2VsZiByZXR1cm5lZC4KKyAgICAgICAgPFA+CisgICAgPEREPjxETD4KKyAgICAgICAgPERUPjxCPlNwZWNpZmllZCBieTo8L0I+PEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uL2phdmEvbGFuZy9DaGFyU2VxdWVuY2UuaHRtbCN0b1N0cmluZygpIj50b1N0cmluZzwvQT48L0NPREU+IGluIGludGVyZmFjZSA8Q09ERT48QSBIUkVGPSIuLi8uLi9qYXZhL2xhbmcvQ2hhclNlcXVlbmNlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gamF2YS5sYW5nIj5DaGFyU2VxdWVuY2U8L0E+PC9DT0RFPjxEVD48Qj5PdmVycmlkZXM6PC9CPjxERD48Q09ERT48QSBIUkVGPSIuLi8uLi9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjdG9TdHJpbmcoKSI+dG9TdHJpbmc8L0E+PC9DT0RFPiBpbiBjbGFzcyA8Q09ERT48QSBIUkVGPSIuLi8uLi9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBqYXZhLmxhbmciPk9iamVjdDwvQT48L0NPREU+PC9ETD4KKyAgICA8L0REPgorICAgIDxERD48REw+CisKKyAgICAgICAgPERUPjxCPlJldHVybnM6PC9CPjxERD50aGUgc3RyaW5nIGl0c2VsZi48L0RMPgorICAgIDwvREQ+Cis8L0RMPgorPEhSPgorCis8QSBOQU1FPSJ0b0NoYXJBcnJheSgpIj48IS0tIC0tPjwvQT48SDM+CisgICAgdG9DaGFyQXJyYXk8L0gzPgorPFBSRT4KK3B1YmxpYyBjaGFyW10gPEI+dG9DaGFyQXJyYXk8L0I+KCk8L1BSRT4KKzxETD4KKyAgICA8REQ+Q29udmVydHMgdGhpcyBzdHJpbmcgdG8gYSBuZXcgY2hhcmFjdGVyIGFycmF5LgorICAgICAgICA8UD4KKyAgICA8REQ+PERMPgorICAgIDwvREw+CisgICAgPC9ERD4KKyAgICA8REQ+PERMPgorCisgICAgICAgIDxEVD48Qj5SZXR1cm5zOjwvQj48REQ+YSBuZXdseSBhbGxvY2F0ZWQgY2hhcmFjdGVyIGFycmF5IHdob3NlIGxlbmd0aCBpcyB0aGUgbGVuZ3RoCisgICAgICAgIG9mIHRoaXMgc3RyaW5nIGFuZCB3aG9zZSBjb250ZW50cyBhcmUgaW5pdGlhbGl6ZWQgdG8gY29udGFpbgorICAgICAgICB0aGUgY2hhcmFjdGVyIHNlcXVlbmNlIHJlcHJlc2VudGVkIGJ5IHRoaXMgc3RyaW5nLjwvREw+CisgICAgPC9ERD4KKzwvREw+Cis8SFI+CisKKzxBIE5BTUU9ImZvcm1hdChqYXZhLmxhbmcuU3RyaW5nLCBqYXZhLmxhbmcuT2JqZWN0Li4uKSI+PCEtLSAtLT48L0E+PEgzPgorICAgIGZvcm1hdDwvSDM+Cis8UFJFPgorcHVibGljIHN0YXRpYyA8QSBIUkVGPSIuLi8uLi9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBqYXZhLmxhbmciPlN0cmluZzwvQT4gPEI+Zm9ybWF0PC9CPig8QSBIUkVGPSIuLi8uLi9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBqYXZhLmxhbmciPlN0cmluZzwvQT4mbmJzcDtmb3JtYXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iLi4vLi4vamF2YS9sYW5nL09iamVjdC5odG1sIiB0aXRsZT0iY2xhc3MgaW4gamF2YS5sYW5nIj5PYmplY3Q8L0E+Li4uJm5ic3A7YXJncyk8L1BSRT4KKzxETD4KKyAgICA8REQ+UmV0dXJucyBhIGZvcm1hdHRlZCBzdHJpbmcgdXNpbmcgdGhlIHNwZWNpZmllZCBmb3JtYXQgc3RyaW5nIGFuZAorICAgICAgICBhcmd1bWVudHMuCisKKyAgICAgICAgPHA+IFRoZSBsb2NhbGUgYWx3YXlzIHVzZWQgaXMgdGhlIG9uZSByZXR1cm5lZCBieSA8QSBIUkVGPSIuLi8uLi9qYXZhL3V0aWwvTG9jYWxlLmh0bWwjZ2V0RGVmYXVsdCgpIj48Q09ERT5Mb2NhbGUuZ2V0RGVmYXVsdCgpPC9DT0RFPjwvQT4uCisgICAgICAgIDxQPgorICAgIDxERD48REw+CisgICAgPC9ETD4KKyAgICA8L0REPgorICAgIDxERD48REw+CisgICAgICAgIDxEVD48Qj5QYXJhbWV0ZXJzOjwvQj48REQ+PENPREU+Zm9ybWF0PC9DT0RFPiAtIEEgPGEgaHJlZj0iLi4vdXRpbC9Gb3JtYXR0ZXIuaHRtbCNzeW50YXgiPmZvcm1hdCBzdHJpbmc8L2E+PEREPjxDT0RFPmFyZ3M8L0NPREU+IC0gQXJndW1lbnRzIHJlZmVyZW5jZWQgYnkgdGhlIGZvcm1hdCBzcGVjaWZpZXJzIGluIHRoZSBmb3JtYXQKKyAgICAgICAgc3RyaW5nLiAgSWYgdGhlcmUgYXJlIG1vcmUgYXJndW1lbnRzIHRoYW4gZm9ybWF0IHNwZWNpZmllcnMsIHRoZQorICAgICAgICBleHRyYSBhcmd1bWVudHMgYXJlIGlnbm9yZWQuICBUaGUgbnVtYmVyIG9mIGFyZ3VtZW50cyBpcworICAgICAgICB2YXJpYWJsZSBhbmQgbWF5IGJlIHplcm8uICBUaGUgbWF4aW11bSBudW1iZXIgb2YgYXJndW1lbnRzIGlzCisgICAgICAgIGxpbWl0ZWQgYnkgdGhlIG1heGltdW0gZGltZW5zaW9uIG9mIGEgSmF2YSBhcnJheSBhcyBkZWZpbmVkIGJ5CisgICAgICAgIHRoZSA8YSBocmVmPSJodHRwOi8vamF2YS5zdW4uY29tL2RvY3MvYm9va3Mvdm1zcGVjLyI+SmF2YQorICAgICAgICAgICAgVmlydHVhbCBNYWNoaW5lIFNwZWNpZmljYXRpb248L2E+LiAgVGhlIGJlaGF2aW91ciBvbiBhCisgICAgICAgIDx0dD5udWxsPC90dD4gYXJndW1lbnQgZGVwZW5kcyBvbiB0aGUgPGEKKyAgICAgICAgICAgICAgICBocmVmPSIuLi91dGlsL0Zvcm1hdHRlci5odG1sI3N5bnRheCI+Y29udmVyc2lvbjwvYT4uCisgICAgICAgIDxEVD48Qj5SZXR1cm5zOjwvQj48REQ+QSBmb3JtYXR0ZWQgc3RyaW5nCisgICAgICAgIDxEVD48Qj5UaHJvd3M6PC9CPgorICAgICAgICA8REQ+PENPREU+SWxsZWdhbEZvcm1hdEV4Y2VwdGlvbjwvQ09ERT4gLSBJZiBhIGZvcm1hdCBzdHJpbmcgY29udGFpbnMgYW4gaWxsZWdhbCBzeW50YXgsIGEgZm9ybWF0CisgICAgICAgICAgICBzcGVjaWZpZXIgdGhhdCBpcyBpbmNvbXBhdGlibGUgd2l0aCB0aGUgZ2l2ZW4gYXJndW1lbnRzLAorICAgICAgICAgICAgaW5zdWZmaWNpZW50IGFyZ3VtZW50cyBnaXZlbiB0aGUgZm9ybWF0IHN0cmluZywgb3Igb3RoZXIKKyAgICAgICAgICAgIGlsbGVnYWwgY29uZGl0aW9ucy4gIEZvciBzcGVjaWZpY2F0aW9uIG9mIGFsbCBwb3NzaWJsZQorICAgICAgICAgICAgZm9ybWF0dGluZyBlcnJvcnMsIHNlZSB0aGUgPGEKKyAgICAgICAgICAgICAgICAgICAgaHJlZj0iLi4vdXRpbC9Gb3JtYXR0ZXIuaHRtbCNkZXRhaWwiPkRldGFpbHM8L2E+IHNlY3Rpb24gb2YgdGhlCisgICAgICAgICAgICBmb3JtYXR0ZXIgY2xhc3Mgc3BlY2lmaWNhdGlvbi4KKyAgICAgICAgPEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uL2phdmEvbGFuZy9OdWxsUG9pbnRlckV4Y2VwdGlvbi5odG1sIiB0aXRsZT0iY2xhc3MgaW4gamF2YS5sYW5nIj5OdWxsUG9pbnRlckV4Y2VwdGlvbjwvQT48L0NPREU+IC0gSWYgdGhlIDx0dD5mb3JtYXQ8L3R0PiBpcyA8dHQ+bnVsbDwvdHQ+PERUPjxCPlNpbmNlOjwvQj48L0RUPgorICAgICAgICA8REQ+MS41PC9ERD4KKyAgICAgICAgPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vamF2YS91dGlsL0Zvcm1hdHRlci5odG1sIiB0aXRsZT0iY2xhc3MgaW4gamF2YS51dGlsIj48Q09ERT5Gb3JtYXR0ZXI8L0NPREU+PC9BPjwvREw+CisgICAgPC9ERD4KKzwvREw+Cis8SFI+CisKKzxBIE5BTUU9ImZvcm1hdChqYXZhLnV0aWwuTG9jYWxlLCBqYXZhLmxhbmcuU3RyaW5nLCBqYXZhLmxhbmcuT2JqZWN0Li4uKSI+PCEtLSAtLT48L0E+PEgzPgorICAgIGZvcm1hdDwvSDM+Cis8UFJFPgorcHVibGljIHN0YXRpYyA8QSBIUkVGPSIuLi8uLi9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBqYXZhLmxhbmciPlN0cmluZzwvQT4gPEI+Zm9ybWF0PC9CPig8QSBIUkVGPSIuLi8uLi9qYXZhL3V0aWwvTG9jYWxlLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBqYXZhLnV0aWwiPkxvY2FsZTwvQT4mbmJzcDtsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Ii4uLy4uL2phdmEvbGFuZy9TdHJpbmcuaHRtbCIgdGl0bGU9ImNsYXNzIGluIGphdmEubGFuZyI+U3RyaW5nPC9BPiZuYnNwO2Zvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSIuLi8uLi9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBqYXZhLmxhbmciPk9iamVjdDwvQT4uLi4mbmJzcDthcmdzKTwvUFJFPgorPERMPgorICAgIDxERD5SZXR1cm5zIGEgZm9ybWF0dGVkIHN0cmluZyB1c2luZyB0aGUgc3BlY2lmaWVkIGxvY2FsZSwgZm9ybWF0IHN0cmluZywKKyAgICAgICAgYW5kIGFyZ3VtZW50cy4KKyAgICAgICAgPFA+CisgICAgPEREPjxETD4KKyAgICA8L0RMPgorICAgIDwvREQ+CisgICAgPEREPjxETD4KKyAgICAgICAgPERUPjxCPlBhcmFtZXRlcnM6PC9CPjxERD48Q09ERT5sPC9DT0RFPiAtIFRoZSA8QSBIUkVGPSIuLi8uLi9qYXZhL3V0aWwvTG9jYWxlLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBqYXZhLnV0aWwiPmxvY2FsZTwvQT4gdG8gYXBwbHkgZHVyaW5nCisgICAgICAgIGZvcm1hdHRpbmcuICBJZiA8dHQ+bDwvdHQ+IGlzIDx0dD5udWxsPC90dD4gdGhlbiBubyBsb2NhbGl6YXRpb24KKyAgICAgICAgaXMgYXBwbGllZC48REQ+PENPREU+Zm9ybWF0PC9DT0RFPiAtIEEgPGEgaHJlZj0iLi4vdXRpbC9Gb3JtYXR0ZXIuaHRtbCNzeW50YXgiPmZvcm1hdCBzdHJpbmc8L2E+PEREPjxDT0RFPmFyZ3M8L0NPREU+IC0gQXJndW1lbnRzIHJlZmVyZW5jZWQgYnkgdGhlIGZvcm1hdCBzcGVjaWZpZXJzIGluIHRoZSBmb3JtYXQKKyAgICAgICAgc3RyaW5nLiAgSWYgdGhlcmUgYXJlIG1vcmUgYXJndW1lbnRzIHRoYW4gZm9ybWF0IHNwZWNpZmllcnMsIHRoZQorICAgICAgICBleHRyYSBhcmd1bWVudHMgYXJlIGlnbm9yZWQuICBUaGUgbnVtYmVyIG9mIGFyZ3VtZW50cyBpcworICAgICAgICB2YXJpYWJsZSBhbmQgbWF5IGJlIHplcm8uICBUaGUgbWF4aW11bSBudW1iZXIgb2YgYXJndW1lbnRzIGlzCisgICAgICAgIGxpbWl0ZWQgYnkgdGhlIG1heGltdW0gZGltZW5zaW9uIG9mIGEgSmF2YSBhcnJheSBhcyBkZWZpbmVkIGJ5CisgICAgICAgIHRoZSA8YSBocmVmPSJodHRwOi8vamF2YS5zdW4uY29tL2RvY3MvYm9va3Mvdm1zcGVjLyI+SmF2YQorICAgICAgICAgICAgVmlydHVhbCBNYWNoaW5lIFNwZWNpZmljYXRpb248L2E+LiAgVGhlIGJlaGF2aW91ciBvbiBhCisgICAgICAgIDx0dD5udWxsPC90dD4gYXJndW1lbnQgZGVwZW5kcyBvbiB0aGUgPGEKKyAgICAgICAgICAgICAgICBocmVmPSIuLi91dGlsL0Zvcm1hdHRlci5odG1sI3N5bnRheCI+Y29udmVyc2lvbjwvYT4uCisgICAgICAgIDxEVD48Qj5SZXR1cm5zOjwvQj48REQ+QSBmb3JtYXR0ZWQgc3RyaW5nCisgICAgICAgIDxEVD48Qj5UaHJvd3M6PC9CPgorICAgICAgICA8REQ+PENPREU+SWxsZWdhbEZvcm1hdEV4Y2VwdGlvbjwvQ09ERT4gLSBJZiBhIGZvcm1hdCBzdHJpbmcgY29udGFpbnMgYW4gaWxsZWdhbCBzeW50YXgsIGEgZm9ybWF0CisgICAgICAgICAgICBzcGVjaWZpZXIgdGhhdCBpcyBpbmNvbXBhdGlibGUgd2l0aCB0aGUgZ2l2ZW4gYXJndW1lbnRzLAorICAgICAgICAgICAgaW5zdWZmaWNpZW50IGFyZ3VtZW50cyBnaXZlbiB0aGUgZm9ybWF0IHN0cmluZywgb3Igb3RoZXIKKyAgICAgICAgICAgIGlsbGVnYWwgY29uZGl0aW9ucy4gIEZvciBzcGVjaWZpY2F0aW9uIG9mIGFsbCBwb3NzaWJsZQorICAgICAgICAgICAgZm9ybWF0dGluZyBlcnJvcnMsIHNlZSB0aGUgPGEKKyAgICAgICAgICAgICAgICAgICAgaHJlZj0iLi4vdXRpbC9Gb3JtYXR0ZXIuaHRtbCNkZXRhaWwiPkRldGFpbHM8L2E+IHNlY3Rpb24gb2YgdGhlCisgICAgICAgICAgICBmb3JtYXR0ZXIgY2xhc3Mgc3BlY2lmaWNhdGlvbgorICAgICAgICA8REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vamF2YS9sYW5nL051bGxQb2ludGVyRXhjZXB0aW9uLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBqYXZhLmxhbmciPk51bGxQb2ludGVyRXhjZXB0aW9uPC9BPjwvQ09ERT4gLSBJZiB0aGUgPHR0PmZvcm1hdDwvdHQ+IGlzIDx0dD5udWxsPC90dD48RFQ+PEI+U2luY2U6PC9CPjwvRFQ+CisgICAgICAgIDxERD4xLjU8L0REPgorICAgICAgICA8RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi9qYXZhL3V0aWwvRm9ybWF0dGVyLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBqYXZhLnV0aWwiPjxDT0RFPkZvcm1hdHRlcjwvQ09ERT48L0E+PC9ETD4KKyAgICA8L0REPgorPC9ETD4KKzxIUj4KKworPEEgTkFNRT0idmFsdWVPZihqYXZhLmxhbmcuT2JqZWN0KSI+PCEtLSAtLT48L0E+PEgzPgorICAgIHZhbHVlT2Y8L0gzPgorPFBSRT4KK3B1YmxpYyBzdGF0aWMgPEEgSFJFRj0iLi4vLi4vamF2YS9sYW5nL1N0cmluZy5odG1sIiB0aXRsZT0iY2xhc3MgaW4gamF2YS5sYW5nIj5TdHJpbmc8L0E+IDxCPnZhbHVlT2Y8L0I+KDxBIEhSRUY9Ii4uLy4uL2phdmEvbGFuZy9PYmplY3QuaHRtbCIgdGl0bGU9ImNsYXNzIGluIGphdmEubGFuZyI+T2JqZWN0PC9BPiZuYnNwO29iaik8L1BSRT4KKzxETD4KKyAgICA8REQ+UmV0dXJucyB0aGUgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSA8Y29kZT5PYmplY3Q8L2NvZGU+IGFyZ3VtZW50LgorICAgICAgICA8UD4KKyAgICA8REQ+PERMPgorICAgIDwvREw+CisgICAgPC9ERD4KKyAgICA8REQ+PERMPgorICAgICAgICA8RFQ+PEI+UGFyYW1ldGVyczo8L0I+PEREPjxDT0RFPm9iajwvQ09ERT4gLSBhbiA8Y29kZT5PYmplY3Q8L2NvZGU+LgorICAgICAgICA8RFQ+PEI+UmV0dXJuczo8L0I+PEREPmlmIHRoZSBhcmd1bWVudCBpcyA8Y29kZT5udWxsPC9jb2RlPiwgdGhlbiBhIHN0cmluZyBlcXVhbCB0bworICAgICAgICA8Y29kZT4ibnVsbCI8L2NvZGU+OyBvdGhlcndpc2UsIHRoZSB2YWx1ZSBvZgorICAgICAgICA8Y29kZT5vYmoudG9TdHJpbmcoKTwvY29kZT4gaXMgcmV0dXJuZWQuPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vamF2YS9sYW5nL09iamVjdC5odG1sI3RvU3RyaW5nKCkiPjxDT0RFPk9iamVjdC50b1N0cmluZygpPC9DT0RFPjwvQT48L0RMPgorICAgIDwvREQ+Cis8L0RMPgorPEhSPgorCis8QSBOQU1FPSJ2YWx1ZU9mKGNoYXJbXSkiPjwhLS0gLS0+PC9BPjxIMz4KKyAgICB2YWx1ZU9mPC9IMz4KKzxQUkU+CitwdWJsaWMgc3RhdGljIDxBIEhSRUY9Ii4uLy4uL2phdmEvbGFuZy9TdHJpbmcuaHRtbCIgdGl0bGU9ImNsYXNzIGluIGphdmEubGFuZyI+U3RyaW5nPC9BPiA8Qj52YWx1ZU9mPC9CPihjaGFyW10mbmJzcDtkYXRhKTwvUFJFPgorPERMPgorICAgIDxERD5SZXR1cm5zIHRoZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIDxjb2RlPmNoYXI8L2NvZGU+IGFycmF5CisgICAgICAgIGFyZ3VtZW50LiBUaGUgY29udGVudHMgb2YgdGhlIGNoYXJhY3RlciBhcnJheSBhcmUgY29waWVkOyBzdWJzZXF1ZW50CisgICAgICAgIG1vZGlmaWNhdGlvbiBvZiB0aGUgY2hhcmFjdGVyIGFycmF5IGRvZXMgbm90IGFmZmVjdCB0aGUgbmV3bHkKKyAgICAgICAgY3JlYXRlZCBzdHJpbmcuCisgICAgICAgIDxQPgorICAgIDxERD48REw+CisgICAgPC9ETD4KKyAgICA8L0REPgorICAgIDxERD48REw+CisgICAgICAgIDxEVD48Qj5QYXJhbWV0ZXJzOjwvQj48REQ+PENPREU+ZGF0YTwvQ09ERT4gLSBhIDxjb2RlPmNoYXI8L2NvZGU+IGFycmF5LgorICAgICAgICA8RFQ+PEI+UmV0dXJuczo8L0I+PEREPmEgbmV3bHkgYWxsb2NhdGVkIHN0cmluZyByZXByZXNlbnRpbmcgdGhlIHNhbWUgc2VxdWVuY2Ugb2YKKyAgICAgICAgY2hhcmFjdGVycyBjb250YWluZWQgaW4gdGhlIGNoYXJhY3RlciBhcnJheSBhcmd1bWVudC48L0RMPgorICAgIDwvREQ+Cis8L0RMPgorPEhSPgorCis8QSBOQU1FPSJ2YWx1ZU9mKGNoYXJbXSwgaW50LCBpbnQpIj48IS0tIC0tPjwvQT48SDM+CisgICAgdmFsdWVPZjwvSDM+Cis8UFJFPgorcHVibGljIHN0YXRpYyA8QSBIUkVGPSIuLi8uLi9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBqYXZhLmxhbmciPlN0cmluZzwvQT4gPEI+dmFsdWVPZjwvQj4oY2hhcltdJm5ic3A7ZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50Jm5ic3A7b2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQmbmJzcDtjb3VudCk8L1BSRT4KKzxETD4KKyAgICA8REQ+UmV0dXJucyB0aGUgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGEgc3BlY2lmaWMgc3ViYXJyYXkgb2YgdGhlCisgICAgICAgIDxjb2RlPmNoYXI8L2NvZGU+IGFycmF5IGFyZ3VtZW50LgorICAgICAgICA8cD4KKyAgICAgICAgICAgIFRoZSA8Y29kZT5vZmZzZXQ8L2NvZGU+IGFyZ3VtZW50IGlzIHRoZSBpbmRleCBvZiB0aGUgZmlyc3QKKyAgICAgICAgICAgIGNoYXJhY3RlciBvZiB0aGUgc3ViYXJyYXkuIFRoZSA8Y29kZT5jb3VudDwvY29kZT4gYXJndW1lbnQKKyAgICAgICAgICAgIHNwZWNpZmllcyB0aGUgbGVuZ3RoIG9mIHRoZSBzdWJhcnJheS4gVGhlIGNvbnRlbnRzIG9mIHRoZSBzdWJhcnJheQorICAgICAgICAgICAgYXJlIGNvcGllZDsgc3Vic2VxdWVudCBtb2RpZmljYXRpb24gb2YgdGhlIGNoYXJhY3RlciBhcnJheSBkb2VzIG5vdAorICAgICAgICAgICAgYWZmZWN0IHRoZSBuZXdseSBjcmVhdGVkIHN0cmluZy4KKyAgICAgICAgPFA+CisgICAgPEREPjxETD4KKyAgICA8L0RMPgorICAgIDwvREQ+CisgICAgPEREPjxETD4KKyAgICAgICAgPERUPjxCPlBhcmFtZXRlcnM6PC9CPjxERD48Q09ERT5kYXRhPC9DT0RFPiAtIHRoZSBjaGFyYWN0ZXIgYXJyYXkuPEREPjxDT0RFPm9mZnNldDwvQ09ERT4gLSB0aGUgaW5pdGlhbCBvZmZzZXQgaW50byB0aGUgdmFsdWUgb2YgdGhlCisgICAgICAgIDxjb2RlPlN0cmluZzwvY29kZT4uPEREPjxDT0RFPmNvdW50PC9DT0RFPiAtIHRoZSBsZW5ndGggb2YgdGhlIHZhbHVlIG9mIHRoZSA8Y29kZT5TdHJpbmc8L2NvZGU+LgorICAgICAgICA8RFQ+PEI+UmV0dXJuczo8L0I+PEREPmEgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgc2VxdWVuY2Ugb2YgY2hhcmFjdGVycyBjb250YWluZWQKKyAgICAgICAgaW4gdGhlIHN1YmFycmF5IG9mIHRoZSBjaGFyYWN0ZXIgYXJyYXkgYXJndW1lbnQuCisgICAgICAgIDxEVD48Qj5UaHJvd3M6PC9CPgorICAgICAgICA8REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vamF2YS9sYW5nL0luZGV4T3V0T2ZCb3VuZHNFeGNlcHRpb24uaHRtbCIgdGl0bGU9ImNsYXNzIGluIGphdmEubGFuZyI+SW5kZXhPdXRPZkJvdW5kc0V4Y2VwdGlvbjwvQT48L0NPREU+IC0gaWYgPGNvZGU+b2Zmc2V0PC9jb2RlPiBpcworICAgICAgICAgICAgbmVnYXRpdmUsIG9yIDxjb2RlPmNvdW50PC9jb2RlPiBpcyBuZWdhdGl2ZSwgb3IKKyAgICAgICAgICAgIDxjb2RlPm9mZnNldCtjb3VudDwvY29kZT4gaXMgbGFyZ2VyIHRoYW4KKyAgICAgICAgICAgIDxjb2RlPmRhdGEubGVuZ3RoPC9jb2RlPi48L0RMPgorICAgIDwvREQ+Cis8L0RMPgorPEhSPgorCis8QSBOQU1FPSJjb3B5VmFsdWVPZihjaGFyW10sIGludCwgaW50KSI+PCEtLSAtLT48L0E+PEgzPgorICAgIGNvcHlWYWx1ZU9mPC9IMz4KKzxQUkU+CitwdWJsaWMgc3RhdGljIDxBIEhSRUY9Ii4uLy4uL2phdmEvbGFuZy9TdHJpbmcuaHRtbCIgdGl0bGU9ImNsYXNzIGluIGphdmEubGFuZyI+U3RyaW5nPC9BPiA8Qj5jb3B5VmFsdWVPZjwvQj4oY2hhcltdJm5ic3A7ZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCZuYnNwO29mZnNldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCZuYnNwO2NvdW50KTwvUFJFPgorPERMPgorICAgIDxERD5SZXR1cm5zIGEgU3RyaW5nIHRoYXQgcmVwcmVzZW50cyB0aGUgY2hhcmFjdGVyIHNlcXVlbmNlIGluIHRoZQorICAgICAgICBhcnJheSBzcGVjaWZpZWQuCisgICAgICAgIDxQPgorICAgIDxERD48REw+CisgICAgPC9ETD4KKyAgICA8L0REPgorICAgIDxERD48REw+CisgICAgICAgIDxEVD48Qj5QYXJhbWV0ZXJzOjwvQj48REQ+PENPREU+ZGF0YTwvQ09ERT4gLSB0aGUgY2hhcmFjdGVyIGFycmF5LjxERD48Q09ERT5vZmZzZXQ8L0NPREU+IC0gaW5pdGlhbCBvZmZzZXQgb2YgdGhlIHN1YmFycmF5LjxERD48Q09ERT5jb3VudDwvQ09ERT4gLSBsZW5ndGggb2YgdGhlIHN1YmFycmF5LgorICAgICAgICA8RFQ+PEI+UmV0dXJuczo8L0I+PEREPmEgPGNvZGU+U3RyaW5nPC9jb2RlPiB0aGF0IGNvbnRhaW5zIHRoZSBjaGFyYWN0ZXJzIG9mIHRoZQorICAgICAgICBzcGVjaWZpZWQgc3ViYXJyYXkgb2YgdGhlIGNoYXJhY3RlciBhcnJheS48L0RMPgorICAgIDwvREQ+Cis8L0RMPgorPEhSPgorCis8QSBOQU1FPSJjb3B5VmFsdWVPZihjaGFyW10pIj48IS0tIC0tPjwvQT48SDM+CisgICAgY29weVZhbHVlT2Y8L0gzPgorPFBSRT4KK3B1YmxpYyBzdGF0aWMgPEEgSFJFRj0iLi4vLi4vamF2YS9sYW5nL1N0cmluZy5odG1sIiB0aXRsZT0iY2xhc3MgaW4gamF2YS5sYW5nIj5TdHJpbmc8L0E+IDxCPmNvcHlWYWx1ZU9mPC9CPihjaGFyW10mbmJzcDtkYXRhKTwvUFJFPgorPERMPgorICAgIDxERD5SZXR1cm5zIGEgU3RyaW5nIHRoYXQgcmVwcmVzZW50cyB0aGUgY2hhcmFjdGVyIHNlcXVlbmNlIGluIHRoZQorICAgICAgICBhcnJheSBzcGVjaWZpZWQuCisgICAgICAgIDxQPgorICAgIDxERD48REw+CisgICAgPC9ETD4KKyAgICA8L0REPgorICAgIDxERD48REw+CisgICAgICAgIDxEVD48Qj5QYXJhbWV0ZXJzOjwvQj48REQ+PENPREU+ZGF0YTwvQ09ERT4gLSB0aGUgY2hhcmFjdGVyIGFycmF5LgorICAgICAgICA8RFQ+PEI+UmV0dXJuczo8L0I+PEREPmEgPGNvZGU+U3RyaW5nPC9jb2RlPiB0aGF0IGNvbnRhaW5zIHRoZSBjaGFyYWN0ZXJzIG9mIHRoZQorICAgICAgICBjaGFyYWN0ZXIgYXJyYXkuPC9ETD4KKyAgICA8L0REPgorPC9ETD4KKzxIUj4KKworPEEgTkFNRT0idmFsdWVPZihib29sZWFuKSI+PCEtLSAtLT48L0E+PEgzPgorICAgIHZhbHVlT2Y8L0gzPgorPFBSRT4KK3B1YmxpYyBzdGF0aWMgPEEgSFJFRj0iLi4vLi4vamF2YS9sYW5nL1N0cmluZy5odG1sIiB0aXRsZT0iY2xhc3MgaW4gamF2YS5sYW5nIj5TdHJpbmc8L0E+IDxCPnZhbHVlT2Y8L0I+KGJvb2xlYW4mbmJzcDtiKTwvUFJFPgorPERMPgorICAgIDxERD5SZXR1cm5zIHRoZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIDxjb2RlPmJvb2xlYW48L2NvZGU+IGFyZ3VtZW50LgorICAgICAgICA8UD4KKyAgICA8REQ+PERMPgorICAgIDwvREw+CisgICAgPC9ERD4KKyAgICA8REQ+PERMPgorICAgICAgICA8RFQ+PEI+UGFyYW1ldGVyczo8L0I+PEREPjxDT0RFPmI8L0NPREU+IC0gYSA8Y29kZT5ib29sZWFuPC9jb2RlPi4KKyAgICAgICAgPERUPjxCPlJldHVybnM6PC9CPjxERD5pZiB0aGUgYXJndW1lbnQgaXMgPGNvZGU+dHJ1ZTwvY29kZT4sIGEgc3RyaW5nIGVxdWFsIHRvCisgICAgICAgIDxjb2RlPiJ0cnVlIjwvY29kZT4gaXMgcmV0dXJuZWQ7IG90aGVyd2lzZSwgYSBzdHJpbmcgZXF1YWwgdG8KKyAgICAgICAgPGNvZGU+ImZhbHNlIjwvY29kZT4gaXMgcmV0dXJuZWQuPC9ETD4KKyAgICA8L0REPgorPC9ETD4KKzxIUj4KKworPEEgTkFNRT0idmFsdWVPZihjaGFyKSI+PCEtLSAtLT48L0E+PEgzPgorICAgIHZhbHVlT2Y8L0gzPgorPFBSRT4KK3B1YmxpYyBzdGF0aWMgPEEgSFJFRj0iLi4vLi4vamF2YS9sYW5nL1N0cmluZy5odG1sIiB0aXRsZT0iY2xhc3MgaW4gamF2YS5sYW5nIj5TdHJpbmc8L0E+IDxCPnZhbHVlT2Y8L0I+KGNoYXImbmJzcDtjKTwvUFJFPgorPERMPgorICAgIDxERD5SZXR1cm5zIHRoZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIDxjb2RlPmNoYXI8L2NvZGU+CisgICAgICAgIGFyZ3VtZW50LgorICAgICAgICA8UD4KKyAgICA8REQ+PERMPgorICAgIDwvREw+CisgICAgPC9ERD4KKyAgICA8REQ+PERMPgorICAgICAgICA8RFQ+PEI+UGFyYW1ldGVyczo8L0I+PEREPjxDT0RFPmM8L0NPREU+IC0gYSA8Y29kZT5jaGFyPC9jb2RlPi4KKyAgICAgICAgPERUPjxCPlJldHVybnM6PC9CPjxERD5hIHN0cmluZyBvZiBsZW5ndGggPGNvZGU+MTwvY29kZT4gY29udGFpbmluZworICAgICAgICBhcyBpdHMgc2luZ2xlIGNoYXJhY3RlciB0aGUgYXJndW1lbnQgPGNvZGU+YzwvY29kZT4uPC9ETD4KKyAgICA8L0REPgorPC9ETD4KKzxIUj4KKworPEEgTkFNRT0idmFsdWVPZihpbnQpIj48IS0tIC0tPjwvQT48SDM+CisgICAgdmFsdWVPZjwvSDM+Cis8UFJFPgorcHVibGljIHN0YXRpYyA8QSBIUkVGPSIuLi8uLi9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBqYXZhLmxhbmciPlN0cmluZzwvQT4gPEI+dmFsdWVPZjwvQj4oaW50Jm5ic3A7aSk8L1BSRT4KKzxETD4KKyAgICA8REQ+UmV0dXJucyB0aGUgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSA8Y29kZT5pbnQ8L2NvZGU+IGFyZ3VtZW50LgorICAgICAgICA8cD4KKyAgICAgICAgICAgIFRoZSByZXByZXNlbnRhdGlvbiBpcyBleGFjdGx5IHRoZSBvbmUgcmV0dXJuZWQgYnkgdGhlCisgICAgICAgICAgICA8Y29kZT5JbnRlZ2VyLnRvU3RyaW5nPC9jb2RlPiBtZXRob2Qgb2Ygb25lIGFyZ3VtZW50LgorICAgICAgICA8UD4KKyAgICA8REQ+PERMPgorICAgIDwvREw+CisgICAgPC9ERD4KKyAgICA8REQ+PERMPgorICAgICAgICA8RFQ+PEI+UGFyYW1ldGVyczo8L0I+PEREPjxDT0RFPmk8L0NPREU+IC0gYW4gPGNvZGU+aW50PC9jb2RlPi4KKyAgICAgICAgPERUPjxCPlJldHVybnM6PC9CPjxERD5hIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgPGNvZGU+aW50PC9jb2RlPiBhcmd1bWVudC48RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi9qYXZhL2xhbmcvSW50ZWdlci5odG1sI3RvU3RyaW5nKGludCwgaW50KSI+PENPREU+SW50ZWdlci50b1N0cmluZyhpbnQsIGludCk8L0NPREU+PC9BPjwvREw+CisgICAgPC9ERD4KKzwvREw+Cis8SFI+CisKKzxBIE5BTUU9InZhbHVlT2YobG9uZykiPjwhLS0gLS0+PC9BPjxIMz4KKyAgICB2YWx1ZU9mPC9IMz4KKzxQUkU+CitwdWJsaWMgc3RhdGljIDxBIEhSRUY9Ii4uLy4uL2phdmEvbGFuZy9TdHJpbmcuaHRtbCIgdGl0bGU9ImNsYXNzIGluIGphdmEubGFuZyI+U3RyaW5nPC9BPiA8Qj52YWx1ZU9mPC9CPihsb25nJm5ic3A7bCk8L1BSRT4KKzxETD4KKyAgICA8REQ+UmV0dXJucyB0aGUgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSA8Y29kZT5sb25nPC9jb2RlPiBhcmd1bWVudC4KKyAgICAgICAgPHA+CisgICAgICAgICAgICBUaGUgcmVwcmVzZW50YXRpb24gaXMgZXhhY3RseSB0aGUgb25lIHJldHVybmVkIGJ5IHRoZQorICAgICAgICAgICAgPGNvZGU+TG9uZy50b1N0cmluZzwvY29kZT4gbWV0aG9kIG9mIG9uZSBhcmd1bWVudC4KKyAgICAgICAgPFA+CisgICAgPEREPjxETD4KKyAgICA8L0RMPgorICAgIDwvREQ+CisgICAgPEREPjxETD4KKyAgICAgICAgPERUPjxCPlBhcmFtZXRlcnM6PC9CPjxERD48Q09ERT5sPC9DT0RFPiAtIGEgPGNvZGU+bG9uZzwvY29kZT4uCisgICAgICAgIDxEVD48Qj5SZXR1cm5zOjwvQj48REQ+YSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIDxjb2RlPmxvbmc8L2NvZGU+IGFyZ3VtZW50LjxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uL2phdmEvbGFuZy9Mb25nLmh0bWwjdG9TdHJpbmcobG9uZykiPjxDT0RFPkxvbmcudG9TdHJpbmcobG9uZyk8L0NPREU+PC9BPjwvREw+CisgICAgPC9ERD4KKzwvREw+Cis8SFI+CisKKzxBIE5BTUU9InZhbHVlT2YoZmxvYXQpIj48IS0tIC0tPjwvQT48SDM+CisgICAgdmFsdWVPZjwvSDM+Cis8UFJFPgorcHVibGljIHN0YXRpYyA8QSBIUkVGPSIuLi8uLi9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBqYXZhLmxhbmciPlN0cmluZzwvQT4gPEI+dmFsdWVPZjwvQj4oZmxvYXQmbmJzcDtmKTwvUFJFPgorPERMPgorICAgIDxERD5SZXR1cm5zIHRoZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIDxjb2RlPmZsb2F0PC9jb2RlPiBhcmd1bWVudC4KKyAgICAgICAgPHA+CisgICAgICAgICAgICBUaGUgcmVwcmVzZW50YXRpb24gaXMgZXhhY3RseSB0aGUgb25lIHJldHVybmVkIGJ5IHRoZQorICAgICAgICAgICAgPGNvZGU+RmxvYXQudG9TdHJpbmc8L2NvZGU+IG1ldGhvZCBvZiBvbmUgYXJndW1lbnQuCisgICAgICAgIDxQPgorICAgIDxERD48REw+CisgICAgPC9ETD4KKyAgICA8L0REPgorICAgIDxERD48REw+CisgICAgICAgIDxEVD48Qj5QYXJhbWV0ZXJzOjwvQj48REQ+PENPREU+ZjwvQ09ERT4gLSBhIDxjb2RlPmZsb2F0PC9jb2RlPi4KKyAgICAgICAgPERUPjxCPlJldHVybnM6PC9CPjxERD5hIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgPGNvZGU+ZmxvYXQ8L2NvZGU+IGFyZ3VtZW50LjxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uL2phdmEvbGFuZy9GbG9hdC5odG1sI3RvU3RyaW5nKGZsb2F0KSI+PENPREU+RmxvYXQudG9TdHJpbmcoZmxvYXQpPC9DT0RFPjwvQT48L0RMPgorICAgIDwvREQ+Cis8L0RMPgorPEhSPgorCis8QSBOQU1FPSJ2YWx1ZU9mKGRvdWJsZSkiPjwhLS0gLS0+PC9BPjxIMz4KKyAgICB2YWx1ZU9mPC9IMz4KKzxQUkU+CitwdWJsaWMgc3RhdGljIDxBIEhSRUY9Ii4uLy4uL2phdmEvbGFuZy9TdHJpbmcuaHRtbCIgdGl0bGU9ImNsYXNzIGluIGphdmEubGFuZyI+U3RyaW5nPC9BPiA8Qj52YWx1ZU9mPC9CPihkb3VibGUmbmJzcDtkKTwvUFJFPgorPERMPgorICAgIDxERD5SZXR1cm5zIHRoZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIDxjb2RlPmRvdWJsZTwvY29kZT4gYXJndW1lbnQuCisgICAgICAgIDxwPgorICAgICAgICAgICAgVGhlIHJlcHJlc2VudGF0aW9uIGlzIGV4YWN0bHkgdGhlIG9uZSByZXR1cm5lZCBieSB0aGUKKyAgICAgICAgICAgIDxjb2RlPkRvdWJsZS50b1N0cmluZzwvY29kZT4gbWV0aG9kIG9mIG9uZSBhcmd1bWVudC4KKyAgICAgICAgPFA+CisgICAgPEREPjxETD4KKyAgICA8L0RMPgorICAgIDwvREQ+CisgICAgPEREPjxETD4KKyAgICAgICAgPERUPjxCPlBhcmFtZXRlcnM6PC9CPjxERD48Q09ERT5kPC9DT0RFPiAtIGEgPGNvZGU+ZG91YmxlPC9jb2RlPi4KKyAgICAgICAgPERUPjxCPlJldHVybnM6PC9CPjxERD5hICBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIDxjb2RlPmRvdWJsZTwvY29kZT4gYXJndW1lbnQuPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vamF2YS9sYW5nL0RvdWJsZS5odG1sI3RvU3RyaW5nKGRvdWJsZSkiPjxDT0RFPkRvdWJsZS50b1N0cmluZyhkb3VibGUpPC9DT0RFPjwvQT48L0RMPgorICAgIDwvREQ+Cis8L0RMPgorPEhSPgorCis8QSBOQU1FPSJpbnRlcm4oKSI+PCEtLSAtLT48L0E+PEgzPgorICAgIGludGVybjwvSDM+Cis8UFJFPgorcHVibGljIDxBIEhSRUY9Ii4uLy4uL2phdmEvbGFuZy9TdHJpbmcuaHRtbCIgdGl0bGU9ImNsYXNzIGluIGphdmEubGFuZyI+U3RyaW5nPC9BPiA8Qj5pbnRlcm48L0I+KCk8L1BSRT4KKzxETD4KKyAgICA8REQ+UmV0dXJucyBhIGNhbm9uaWNhbCByZXByZXNlbnRhdGlvbiBmb3IgdGhlIHN0cmluZyBvYmplY3QuCisgICAgICAgIDxwPgorICAgICAgICAgICAgQSBwb29sIG9mIHN0cmluZ3MsIGluaXRpYWxseSBlbXB0eSwgaXMgbWFpbnRhaW5lZCBwcml2YXRlbHkgYnkgdGhlCisgICAgICAgICAgICBjbGFzcyA8Y29kZT5TdHJpbmc8L2NvZGU+LgorICAgICAgICA8cD4KKyAgICAgICAgICAgIFdoZW4gdGhlIGludGVybiBtZXRob2QgaXMgaW52b2tlZCwgaWYgdGhlIHBvb2wgYWxyZWFkeSBjb250YWlucyBhCisgICAgICAgICAgICBzdHJpbmcgZXF1YWwgdG8gdGhpcyA8Y29kZT5TdHJpbmc8L2NvZGU+IG9iamVjdCBhcyBkZXRlcm1pbmVkIGJ5CisgICAgICAgICAgICB0aGUgPEEgSFJFRj0iLi4vLi4vamF2YS9sYW5nL1N0cmluZy5odG1sI2VxdWFscyhqYXZhLmxhbmcuT2JqZWN0KSI+PENPREU+ZXF1YWxzKE9iamVjdCk8L0NPREU+PC9BPiBtZXRob2QsIHRoZW4gdGhlIHN0cmluZyBmcm9tIHRoZSBwb29sIGlzCisgICAgICAgICAgICByZXR1cm5lZC4gT3RoZXJ3aXNlLCB0aGlzIDxjb2RlPlN0cmluZzwvY29kZT4gb2JqZWN0IGlzIGFkZGVkIHRvIHRoZQorICAgICAgICAgICAgcG9vbCBhbmQgYSByZWZlcmVuY2UgdG8gdGhpcyA8Y29kZT5TdHJpbmc8L2NvZGU+IG9iamVjdCBpcyByZXR1cm5lZC4KKyAgICAgICAgPHA+CisgICAgICAgICAgICBJdCBmb2xsb3dzIHRoYXQgZm9yIGFueSB0d28gc3RyaW5ncyA8Y29kZT5zPC9jb2RlPiBhbmQgPGNvZGU+dDwvY29kZT4sCisgICAgICAgICAgICA8Y29kZT5zLmludGVybigpJm5ic3A7PT0mbmJzcDt0LmludGVybigpPC9jb2RlPiBpcyA8Y29kZT50cnVlPC9jb2RlPgorICAgICAgICAgICAgaWYgYW5kIG9ubHkgaWYgPGNvZGU+cy5lcXVhbHModCk8L2NvZGU+IGlzIDxjb2RlPnRydWU8L2NvZGU+LgorICAgICAgICA8cD4KKyAgICAgICAgICAgIEFsbCBsaXRlcmFsIHN0cmluZ3MgYW5kIHN0cmluZy12YWx1ZWQgY29uc3RhbnQgZXhwcmVzc2lvbnMgYXJlCisgICAgICAgICAgICBpbnRlcm5lZC4gU3RyaW5nIGxpdGVyYWxzIGFyZSBkZWZpbmVkIGluICZzZWN0OzMuMTAuNSBvZiB0aGUKKyAgICAgICAgICAgIDxhIGhyZWY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vZG9jcy9ib29rcy9qbHMvaHRtbC8iPkphdmEgTGFuZ3VhZ2UKKyAgICAgICAgICAgICAgICBTcGVjaWZpY2F0aW9uPC9hPgorICAgICAgICA8UD4KKyAgICA8REQ+PERMPgorICAgIDwvREw+CisgICAgPC9ERD4KKyAgICA8REQ+PERMPgorCisgICAgICAgIDxEVD48Qj5SZXR1cm5zOjwvQj48REQ+YSBzdHJpbmcgdGhhdCBoYXMgdGhlIHNhbWUgY29udGVudHMgYXMgdGhpcyBzdHJpbmcsIGJ1dCBpcworICAgICAgICBndWFyYW50ZWVkIHRvIGJlIGZyb20gYSBwb29sIG9mIHVuaXF1ZSBzdHJpbmdzLjwvREw+CisgICAgPC9ERD4KKzwvREw+Cis8IS0tID09PT09PT09PSBFTkQgT0YgQ0xBU1MgREFUQSA9PT09PT09PT0gLS0+Cis8SFI+CisKKworPCEtLSA9PT09PT09IFNUQVJUIE9GIEJPVFRPTSBOQVZCQVIgPT09PT09IC0tPgorPEEgTkFNRT0ibmF2YmFyX2JvdHRvbSI+PCEtLSAtLT48L0E+Cis8QSBIUkVGPSIjc2tpcC1uYXZiYXJfYm90dG9tIiB0aXRsZT0iU2tpcCBuYXZpZ2F0aW9uIGxpbmtzIj48L0E+Cis8VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjEiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgorICAgIDxUUj4KKyAgICAgICAgPFREIENPTFNQQU49MiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgorICAgICAgICAgICAgPEEgTkFNRT0ibmF2YmFyX2JvdHRvbV9maXJzdHJvdyI+PCEtLSAtLT48L0E+CisgICAgICAgICAgICA8VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiIFNVTU1BUlk9IiI+CisgICAgICAgICAgICAgICAgPFRSIEFMSUdOPSJjZW50ZXIiIFZBTElHTj0idG9wIj4KKyAgICAgICAgICAgICAgICAgICAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uL292ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5PdmVydmlldzwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+CisgICAgICAgICAgICAgICAgICAgIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5QYWNrYWdlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KKyAgICAgICAgICAgICAgICAgICAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxGT05UIENMQVNTPSJOYXZCYXJGb250MVJldiI+PEI+Q2xhc3M8L0I+PC9GT05UPiZuYnNwOzwvVEQ+CisgICAgICAgICAgICAgICAgICAgIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJjbGFzcy11c2UvU3RyaW5nLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VXNlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KKyAgICAgICAgICAgICAgICAgICAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2UtdHJlZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgorICAgICAgICAgICAgICAgICAgICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+CisgICAgICAgICAgICAgICAgICAgIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi9pbmRleC1maWxlcy9pbmRleC0xLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SW5kZXg8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgorICAgICAgICAgICAgICAgICAgICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vaGVscC1kb2MuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5IZWxwPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KKyAgICAgICAgICAgICAgICA8L1RSPgorICAgICAgICAgICAgPC9UQUJMRT4KKyAgICAgICAgPC9URD4KKyAgICAgICAgPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFJPV1NQQU49Mz48RU0+CisgICAgICAgICAgICA8Yj5KYXZhJiN4MjEyMjsmbmJzcDtQbGF0Zm9ybTxicj5TdGFuZGFyZCZuYnNwO0VkLiZuYnNwOzY8L2I+PC9FTT4KKyAgICAgICAgPC9URD4KKyAgICA8L1RSPgorCisgICAgPFRSPgorICAgICAgICA8VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgorICAgICAgICAgICAgJm5ic3A7PEEgSFJFRj0iLi4vLi4vamF2YS9sYW5nL1N0cmljdE1hdGguaHRtbCIgdGl0bGU9ImNsYXNzIGluIGphdmEubGFuZyI+PEI+UFJFViBDTEFTUzwvQj48L0E+Jm5ic3A7CisgICAgICAgICAgICAmbmJzcDs8QSBIUkVGPSIuLi8uLi9qYXZhL2xhbmcvU3RyaW5nQnVmZmVyLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBqYXZhLmxhbmciPjxCPk5FWFQgQ0xBU1M8L0I+PC9BPjwvRk9OVD48L1REPgorICAgICAgICA8VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgorICAgICAgICAgICAgPEEgSFJFRj0iLi4vLi4vaW5kZXguaHRtbD9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOworICAgICAgICAgICAgJm5ic3A7PEEgSFJFRj0iU3RyaW5nLmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOworICAgICAgICAgICAgJm5ic3A7PFNDUklQVCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgorICAgICAgICAgICAgPCEtLQorICAgICAgICAgICAgaWYod2luZG93PT10b3ApIHsKKyAgICAgICAgICAgICAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSIuLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgLy8tLT4KKyAgICAgICAgPC9TQ1JJUFQ+CisgICAgICAgICAgICA8Tk9TQ1JJUFQ+CisgICAgICAgICAgICAgICAgPEEgSFJFRj0iLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KKyAgICAgICAgICAgIDwvTk9TQ1JJUFQ+CisKKworICAgICAgICA8L0ZPTlQ+PC9URD4KKyAgICA8L1RSPgorICAgIDxUUj4KKyAgICAgICAgPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KKyAgICAgICAgICAgIFNVTU1BUlk6Jm5ic3A7TkVTVEVEJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNmaWVsZF9zdW1tYXJ5Ij5GSUVMRDwvQT4mbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI2NvbnN0cnVjdG9yX3N1bW1hcnkiPkNPTlNUUjwvQT4mbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9zdW1tYXJ5Ij5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+CisgICAgICAgIDxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+CisgICAgICAgICAgICBERVRBSUw6Jm5ic3A7PEEgSFJFRj0iI2ZpZWxkX2RldGFpbCI+RklFTEQ8L0E+Jm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNjb25zdHJ1Y3Rvcl9kZXRhaWwiPkNPTlNUUjwvQT4mbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9kZXRhaWwiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KKyAgICA8L1RSPgorPC9UQUJMRT4KKzxBIE5BTUU9InNraXAtbmF2YmFyX2JvdHRvbSI+PC9BPgorPCEtLSA9PT09PT09PSBFTkQgT0YgQk9UVE9NIE5BVkJBUiA9PT09PT09IC0tPgorCis8SFI+Cis8Zm9udCBzaXplPSItMSI+IDxhIGhyZWY9Imh0dHA6Ly9idWdzLnN1bi5jb20vc2VydmljZXMvYnVncmVwb3J0L2luZGV4LmpzcCI+U3VibWl0IGEgYnVnIG9yIGZlYXR1cmU8L2E+PGJyPkZvciBmdXJ0aGVyIEFQSSByZWZlcmVuY2UgYW5kIGRldmVsb3BlciBkb2N1bWVudGF0aW9uLCBzZWUgPGEgaHJlZj0iaHR0cDovL2phdmEuc3VuLmNvbS9qYXZhc2UvNi93ZWJub3Rlcy9kZXZkb2NzLXZzLXNwZWNzLmh0bWwiPkphdmEgU0UgRGV2ZWxvcGVyIERvY3VtZW50YXRpb248L2E+LiBUaGF0IGRvY3VtZW50YXRpb24gY29udGFpbnMgbW9yZSBkZXRhaWxlZCwgZGV2ZWxvcGVyLXRhcmdldGVkIGRlc2NyaXB0aW9ucywgd2l0aCBjb25jZXB0dWFsIG92ZXJ2aWV3cywgZGVmaW5pdGlvbnMgb2YgdGVybXMsIHdvcmthcm91bmRzLCBhbmQgd29ya2luZyBjb2RlIGV4YW1wbGVzLjxwPiA8YSBocmVmPSIuLi8uLi8uLi9sZWdhbC9jcHlyLmh0bWwiPkNvcHlyaWdodDwvYT4gJiN4MDBhOTsgMTk5MywgMjAxMSwgT3JhY2xlIGFuZC9vciBpdHMgYWZmaWxpYXRlcy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuIDwvZm9udD4KKzwhLS0gU3RhcnQgU2l0ZUNhdGFseXN0IGNvZGUgICAtLT4KKzxzY3JpcHQgbGFuZ3VhZ2U9IkphdmFTY3JpcHQiIHNyYz0iaHR0cDovL3d3dy5vcmFjbGUuY29tL29jb20vZ3JvdXBzL3N5c3RlbW9iamVjdC9AbWt0Z19hZG1pbi9kb2N1bWVudHMvc3lzdGVtb2JqZWN0L3NfY29kZV9kb3dubG9hZC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IGxhbmd1YWdlPSJKYXZhU2NyaXB0IiBzcmM9Imh0dHA6Ly93d3cub3JhY2xlLmNvbS9vY29tL2dyb3Vwcy9zeXN0ZW1vYmplY3QvQG1rdGdfYWRtaW4vZG9jdW1lbnRzL3N5c3RlbW9iamVjdC9zX2NvZGUuanMiPjwvc2NyaXB0PgorCis8IS0tICoqKioqKioqKiogRE8gTk9UIEFMVEVSIEFOWVRISU5HIEJFTE9XIFRISVMgTElORSAhICoqKioqKioqKioqIC0tPgorPCEtLSAgQmVsb3cgY29kZSB3aWxsIHNlbmQgdGhlIGluZm8gdG8gT21uaXR1cmUgc2VydmVyIC0tPgorPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+dmFyIHNfY29kZT1zLnQoKTtpZihzX2NvZGUpZG9jdW1lbnQud3JpdGUoc19jb2RlKTwvc2NyaXB0PgorCis8IS0tIEVuZCBTaXRlQ2F0YWx5c3QgY29kZSAtLT4KKzxub3NjcmlwdD4KKyAgICA8cD5TY3JpcHRpbmcgb24gdGhpcyBwYWdlIHRyYWNrcyB3ZWIgcGFnZSB0cmFmZmljLCBidXQgZG9lcyBub3QgY2hhbmdlIHRoZSBjb250ZW50IGluIGFueSB3YXkuPC9wPgorPC9ub3NjcmlwdD4KKzwvQk9EWT4KKzwvSFRNTD4KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9leHRlcm5hbEphdmFkb2MvU3RyaW5nLzcvZXhwZWN0ZWQuaHRtbCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9leHRlcm5hbEphdmFkb2MvU3RyaW5nLzcvZXhwZWN0ZWQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZDJjZWVmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2V4dGVybmFsSmF2YWRvYy9TdHJpbmcvNy9leHBlY3RlZC5odG1sCkBAIC0wLDAgKzEsMTA1IEBACis8SFRNTD48c3R5bGUgdHlwZT0idGV4dC9jc3MiPiAgdWwuaW5oZXJpdGFuY2UgeworICAgICAgbWFyZ2luOjA7CisgICAgICBwYWRkaW5nOjA7CisgIH0KKyAgdWwuaW5oZXJpdGFuY2UgbGkgeworICAgICAgIGRpc3BsYXk6aW5saW5lOworICAgICAgIGxpc3Qtc3R5bGU6bm9uZTsKKyAgfQorICB1bC5pbmhlcml0YW5jZSBsaSB1bC5pbmhlcml0YW5jZSB7CisgICAgbWFyZ2luLWxlZnQ6MTVweDsKKyAgICBwYWRkaW5nLWxlZnQ6MTVweDsKKyAgICBwYWRkaW5nLXRvcDoxcHg7CisgIH0KKzwvc3R5bGU+PCEtLSA9PT09PT09PSBTVEFSVCBPRiBDTEFTUyBEQVRBID09PT09PT09IC0tPgorPGRpdiBjbGFzcz0iaGVhZGVyIj4KKyAgICA8ZGl2IGNsYXNzPSJzdWJUaXRsZSI+amF2YS5sYW5nPC9kaXY+CisgICAgPGgyIHRpdGxlPSJDbGFzcyBTdHJpbmciIGNsYXNzPSJ0aXRsZSI+Q2xhc3MgU3RyaW5nPC9oMj4KKzwvZGl2PgorPGRpdiBjbGFzcz0iY29udGVudENvbnRhaW5lciI+Cis8dWwgY2xhc3M9ImluaGVyaXRhbmNlIj4KKyAgICA8bGk+PGEgaHJlZj0iLi4vLi4vamF2YS9sYW5nL09iamVjdC5odG1sIiB0aXRsZT0iY2xhc3MgaW4gamF2YS5sYW5nIj5qYXZhLmxhbmcuT2JqZWN0PC9hPjwvbGk+CisgICAgPGxpPgorICAgICAgICA8dWwgY2xhc3M9ImluaGVyaXRhbmNlIj4KKyAgICAgICAgICAgIDxsaT5qYXZhLmxhbmcuU3RyaW5nPC9saT4KKyAgICAgICAgPC91bD4KKyAgICA8L2xpPgorPC91bD4KKzxETD4gICAgPHVsIGNsYXNzPSJibG9ja0xpc3QiPgorICAgICAgICA8bGkgY2xhc3M9ImJsb2NrTGlzdCI+CisgICAgICAgICAgICA8ZGw+CisgICAgICAgICAgICAgICAgPGR0PkFsbCBJbXBsZW1lbnRlZCBJbnRlcmZhY2VzOjwvZHQ+CisgICAgICAgICAgICAgICAgPGRkPjxhIGhyZWY9Ii4uLy4uL2phdmEvaW8vU2VyaWFsaXphYmxlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gamF2YS5pbyI+U2VyaWFsaXphYmxlPC9hPiwgPGEgaHJlZj0iLi4vLi4vamF2YS9sYW5nL0NoYXJTZXF1ZW5jZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIGphdmEubGFuZyI+Q2hhclNlcXVlbmNlPC9hPiwgPGEgaHJlZj0iLi4vLi4vamF2YS9sYW5nL0NvbXBhcmFibGUuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBqYXZhLmxhbmciPkNvbXBhcmFibGU8L2E+Jmx0OzxhIGhyZWY9Ii4uLy4uL2phdmEvbGFuZy9TdHJpbmcuaHRtbCIgdGl0bGU9ImNsYXNzIGluIGphdmEubGFuZyI+U3RyaW5nPC9hPiZndDs8L2RkPgorICAgICAgICAgICAgPC9kbD4KKyAgICAgICAgICAgIDxocj4KKyAgICAgICAgICAgIDxicj4KKzxwcmU+cHVibGljIGZpbmFsIGNsYXNzIDxzcGFuIGNsYXNzPSJzdHJvbmciPlN0cmluZzwvc3Bhbj4KK2V4dGVuZHMgPGEgaHJlZj0iLi4vLi4vamF2YS9sYW5nL09iamVjdC5odG1sIiB0aXRsZT0iY2xhc3MgaW4gamF2YS5sYW5nIj5PYmplY3Q8L2E+CitpbXBsZW1lbnRzIDxhIGhyZWY9Ii4uLy4uL2phdmEvaW8vU2VyaWFsaXphYmxlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gamF2YS5pbyI+U2VyaWFsaXphYmxlPC9hPiwgPGEgaHJlZj0iLi4vLi4vamF2YS9sYW5nL0NvbXBhcmFibGUuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBqYXZhLmxhbmciPkNvbXBhcmFibGU8L2E+Jmx0OzxhIGhyZWY9Ii4uLy4uL2phdmEvbGFuZy9TdHJpbmcuaHRtbCIgdGl0bGU9ImNsYXNzIGluIGphdmEubGFuZyI+U3RyaW5nPC9hPiZndDssIDxhIGhyZWY9Ii4uLy4uL2phdmEvbGFuZy9DaGFyU2VxdWVuY2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBqYXZhLmxhbmciPkNoYXJTZXF1ZW5jZTwvYT48L3ByZT4KKyAgICAgICAgICAgIDxkaXYgY2xhc3M9ImJsb2NrIj5UaGUgPGNvZGU+U3RyaW5nPC9jb2RlPiBjbGFzcyByZXByZXNlbnRzIGNoYXJhY3RlciBzdHJpbmdzLiBBbGwKKyAgICAgICAgICAgICAgICBzdHJpbmcgbGl0ZXJhbHMgaW4gSmF2YSBwcm9ncmFtcywgc3VjaCBhcyA8Y29kZT4iYWJjIjwvY29kZT4sIGFyZQorICAgICAgICAgICAgICAgIGltcGxlbWVudGVkIGFzIGluc3RhbmNlcyBvZiB0aGlzIGNsYXNzLgorICAgICAgICAgICAgICAgIDxwPgorICAgICAgICAgICAgICAgICAgICBTdHJpbmdzIGFyZSBjb25zdGFudDsgdGhlaXIgdmFsdWVzIGNhbm5vdCBiZSBjaGFuZ2VkIGFmdGVyIHRoZXkKKyAgICAgICAgICAgICAgICAgICAgYXJlIGNyZWF0ZWQuIFN0cmluZyBidWZmZXJzIHN1cHBvcnQgbXV0YWJsZSBzdHJpbmdzLgorICAgICAgICAgICAgICAgICAgICBCZWNhdXNlIFN0cmluZyBvYmplY3RzIGFyZSBpbW11dGFibGUgdGhleSBjYW4gYmUgc2hhcmVkLiBGb3IgZXhhbXBsZToKKyAgICAgICAgICAgICAgICA8cD48YmxvY2txdW90ZT48cHJlPgorICAgICBTdHJpbmcgc3RyID0gImFiYyI7CisgPC9wcmU+PC9ibG9ja3F1b3RlPjxwPgorICAgICAgICAgICAgICAgICAgICBpcyBlcXVpdmFsZW50IHRvOgorICAgICAgICAgICAgICAgIDxwPjxibG9ja3F1b3RlPjxwcmU+CisgICAgIGNoYXIgZGF0YVtdID0geydhJywgJ2InLCAnYyd9OworICAgICBTdHJpbmcgc3RyID0gbmV3IFN0cmluZyhkYXRhKTsKKyA8L3ByZT48L2Jsb2NrcXVvdGU+PHA+CisgICAgICAgICAgICAgICAgICAgIEhlcmUgYXJlIHNvbWUgbW9yZSBleGFtcGxlcyBvZiBob3cgc3RyaW5ncyBjYW4gYmUgdXNlZDoKKyAgICAgICAgICAgICAgICA8cD48YmxvY2txdW90ZT48cHJlPgorICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImFiYyIpOworICAgICBTdHJpbmcgY2RlID0gImNkZSI7CisgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiYWJjIiArIGNkZSk7CisgICAgIFN0cmluZyBjID0gImFiYyIuc3Vic3RyaW5nKDIsMyk7CisgICAgIFN0cmluZyBkID0gY2RlLnN1YnN0cmluZygxLCAyKTsKKyA8L3ByZT48L2Jsb2NrcXVvdGU+CisgICAgICAgICAgICAgICAgPHA+CisgICAgICAgICAgICAgICAgICAgIFRoZSBjbGFzcyA8Y29kZT5TdHJpbmc8L2NvZGU+IGluY2x1ZGVzIG1ldGhvZHMgZm9yIGV4YW1pbmluZworICAgICAgICAgICAgICAgICAgICBpbmRpdmlkdWFsIGNoYXJhY3RlcnMgb2YgdGhlIHNlcXVlbmNlLCBmb3IgY29tcGFyaW5nIHN0cmluZ3MsIGZvcgorICAgICAgICAgICAgICAgICAgICBzZWFyY2hpbmcgc3RyaW5ncywgZm9yIGV4dHJhY3Rpbmcgc3Vic3RyaW5ncywgYW5kIGZvciBjcmVhdGluZyBhCisgICAgICAgICAgICAgICAgICAgIGNvcHkgb2YgYSBzdHJpbmcgd2l0aCBhbGwgY2hhcmFjdGVycyB0cmFuc2xhdGVkIHRvIHVwcGVyY2FzZSBvciB0bworICAgICAgICAgICAgICAgICAgICBsb3dlcmNhc2UuIENhc2UgbWFwcGluZyBpcyBiYXNlZCBvbiB0aGUgVW5pY29kZSBTdGFuZGFyZCB2ZXJzaW9uCisgICAgICAgICAgICAgICAgICAgIHNwZWNpZmllZCBieSB0aGUgPGEgaHJlZj0iLi4vLi4vamF2YS9sYW5nL0NoYXJhY3Rlci5odG1sIiB0aXRsZT0iY2xhc3MgaW4gamF2YS5sYW5nIj48Y29kZT5DaGFyYWN0ZXI8L2NvZGU+PC9hPiBjbGFzcy4KKyAgICAgICAgICAgICAgICA8cD4KKyAgICAgICAgICAgICAgICAgICAgVGhlIEphdmEgbGFuZ3VhZ2UgcHJvdmlkZXMgc3BlY2lhbCBzdXBwb3J0IGZvciB0aGUgc3RyaW5nCisgICAgICAgICAgICAgICAgICAgIGNvbmNhdGVuYXRpb24gb3BlcmF0b3IgKCZuYnNwOysmbmJzcDspLCBhbmQgZm9yIGNvbnZlcnNpb24gb2YKKyAgICAgICAgICAgICAgICAgICAgb3RoZXIgb2JqZWN0cyB0byBzdHJpbmdzLiBTdHJpbmcgY29uY2F0ZW5hdGlvbiBpcyBpbXBsZW1lbnRlZAorICAgICAgICAgICAgICAgICAgICB0aHJvdWdoIHRoZSA8Y29kZT5TdHJpbmdCdWlsZGVyPC9jb2RlPihvciA8Y29kZT5TdHJpbmdCdWZmZXI8L2NvZGU+KQorICAgICAgICAgICAgICAgICAgICBjbGFzcyBhbmQgaXRzIDxjb2RlPmFwcGVuZDwvY29kZT4gbWV0aG9kLgorICAgICAgICAgICAgICAgICAgICBTdHJpbmcgY29udmVyc2lvbnMgYXJlIGltcGxlbWVudGVkIHRocm91Z2ggdGhlIG1ldGhvZAorICAgICAgICAgICAgICAgICAgICA8Y29kZT50b1N0cmluZzwvY29kZT4sIGRlZmluZWQgYnkgPGNvZGU+T2JqZWN0PC9jb2RlPiBhbmQKKyAgICAgICAgICAgICAgICAgICAgaW5oZXJpdGVkIGJ5IGFsbCBjbGFzc2VzIGluIEphdmEuIEZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIG9uCisgICAgICAgICAgICAgICAgICAgIHN0cmluZyBjb25jYXRlbmF0aW9uIGFuZCBjb252ZXJzaW9uLCBzZWUgR29zbGluZywgSm95LCBhbmQgU3RlZWxlLAorICAgICAgICAgICAgICAgICAgICA8aT5UaGUgSmF2YSBMYW5ndWFnZSBTcGVjaWZpY2F0aW9uPC9pPi4KKworICAgICAgICAgICAgICAgIDxwPiBVbmxlc3Mgb3RoZXJ3aXNlIG5vdGVkLCBwYXNzaW5nIGEgPHR0Pm51bGw8L3R0PiBhcmd1bWVudCB0byBhIGNvbnN0cnVjdG9yCisgICAgICAgICAgICAgICAgICAgIG9yIG1ldGhvZCBpbiB0aGlzIGNsYXNzIHdpbGwgY2F1c2UgYSA8YSBocmVmPSIuLi8uLi9qYXZhL2xhbmcvTnVsbFBvaW50ZXJFeGNlcHRpb24uaHRtbCIgdGl0bGU9ImNsYXNzIGluIGphdmEubGFuZyI+PGNvZGU+TnVsbFBvaW50ZXJFeGNlcHRpb248L2NvZGU+PC9hPiB0byBiZQorICAgICAgICAgICAgICAgICAgICB0aHJvd24uCisKKyAgICAgICAgICAgICAgICA8cD5BIDxjb2RlPlN0cmluZzwvY29kZT4gcmVwcmVzZW50cyBhIHN0cmluZyBpbiB0aGUgVVRGLTE2IGZvcm1hdAorICAgICAgICAgICAgICAgICAgICBpbiB3aGljaCA8ZW0+c3VwcGxlbWVudGFyeSBjaGFyYWN0ZXJzPC9lbT4gYXJlIHJlcHJlc2VudGVkIGJ5IDxlbT5zdXJyb2dhdGUKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhaXJzPC9lbT4gKHNlZSB0aGUgc2VjdGlvbiA8YSBocmVmPSJDaGFyYWN0ZXIuaHRtbCN1bmljb2RlIj5Vbmljb2RlCisgICAgICAgICAgICAgICAgICAgICAgICBDaGFyYWN0ZXIgUmVwcmVzZW50YXRpb25zPC9hPiBpbiB0aGUgPGNvZGU+Q2hhcmFjdGVyPC9jb2RlPiBjbGFzcyBmb3IKKyAgICAgICAgICAgICAgICAgICAgbW9yZSBpbmZvcm1hdGlvbikuCisgICAgICAgICAgICAgICAgICAgIEluZGV4IHZhbHVlcyByZWZlciB0byA8Y29kZT5jaGFyPC9jb2RlPiBjb2RlIHVuaXRzLCBzbyBhIHN1cHBsZW1lbnRhcnkKKyAgICAgICAgICAgICAgICAgICAgY2hhcmFjdGVyIHVzZXMgdHdvIHBvc2l0aW9ucyBpbiBhIDxjb2RlPlN0cmluZzwvY29kZT4uCisgICAgICAgICAgICAgICAgPHA+VGhlIDxjb2RlPlN0cmluZzwvY29kZT4gY2xhc3MgcHJvdmlkZXMgbWV0aG9kcyBmb3IgZGVhbGluZyB3aXRoCisgICAgICAgICAgICAgICAgICAgIFVuaWNvZGUgY29kZSBwb2ludHMgKGkuZS4sIGNoYXJhY3RlcnMpLCBpbiBhZGRpdGlvbiB0byB0aG9zZSBmb3IKKyAgICAgICAgICAgICAgICAgICAgZGVhbGluZyB3aXRoIFVuaWNvZGUgY29kZSB1bml0cyAoaS5lLiwgPGNvZGU+Y2hhcjwvY29kZT4gdmFsdWVzKS48L2Rpdj4KKyAgICAgICAgICAgIDxkbD48ZHQ+PHNwYW4gY2xhc3M9InN0cm9uZyI+U2luY2U6PC9zcGFuPjwvZHQ+CisgICAgICAgICAgICAgICAgPGRkPkpESzEuMDwvZGQ+CisgICAgICAgICAgICAgICAgPGR0PjxzcGFuIGNsYXNzPSJzdHJvbmciPlNlZSBBbHNvOjwvc3Bhbj48L2R0PjxkZD48YSBocmVmPSIuLi8uLi9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjdG9TdHJpbmcoKSI+PGNvZGU+T2JqZWN0LnRvU3RyaW5nKCk8L2NvZGU+PC9hPiwKKyAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iLi4vLi4vamF2YS9sYW5nL1N0cmluZ0J1ZmZlci5odG1sIiB0aXRsZT0iY2xhc3MgaW4gamF2YS5sYW5nIj48Y29kZT5TdHJpbmdCdWZmZXI8L2NvZGU+PC9hPiwKKyAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iLi4vLi4vamF2YS9sYW5nL1N0cmluZ0J1aWxkZXIuaHRtbCIgdGl0bGU9ImNsYXNzIGluIGphdmEubGFuZyI+PGNvZGU+U3RyaW5nQnVpbGRlcjwvY29kZT48L2E+LAorICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIuLi8uLi9qYXZhL25pby9jaGFyc2V0L0NoYXJzZXQuaHRtbCIgdGl0bGU9ImNsYXNzIGluIGphdmEubmlvLmNoYXJzZXQiPjxjb2RlPkNoYXJzZXQ8L2NvZGU+PC9hPiwKKyAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iLi4vLi4vc2VyaWFsaXplZC1mb3JtLmh0bWwjamF2YS5sYW5nLlN0cmluZyI+U2VyaWFsaXplZCBGb3JtPC9hPjwvZGQ+PC9kbD4KKyAgICAgICAgPC9saT4KKyAgICA8L3VsPgorPC9kaXY+Cis8L0hUTUw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2V4dGVybmFsSmF2YWRvYy9TdHJpbmcvNy9leHBlY3RlZFRvTG93ZXJDYXNlLmh0bWwgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZXh0ZXJuYWxKYXZhZG9jL1N0cmluZy83L2V4cGVjdGVkVG9Mb3dlckNhc2UuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZmY4ZTQyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2V4dGVybmFsSmF2YWRvYy9TdHJpbmcvNy9leHBlY3RlZFRvTG93ZXJDYXNlLmh0bWwKQEAgLTAsMCArMSwzNyBAQAorPEhUTUw+PHN0eWxlIHR5cGU9InRleHQvY3NzIj4gIHVsLmluaGVyaXRhbmNlIHsKKyAgICAgIG1hcmdpbjowOworICAgICAgcGFkZGluZzowOworICB9CisgIHVsLmluaGVyaXRhbmNlIGxpIHsKKyAgICAgICBkaXNwbGF5OmlubGluZTsKKyAgICAgICBsaXN0LXN0eWxlOm5vbmU7CisgIH0KKyAgdWwuaW5oZXJpdGFuY2UgbGkgdWwuaW5oZXJpdGFuY2UgeworICAgIG1hcmdpbi1sZWZ0OjE1cHg7CisgICAgcGFkZGluZy1sZWZ0OjE1cHg7CisgICAgcGFkZGluZy10b3A6MXB4OworICB9Cis8L3N0eWxlPjxhIG5hbWU9InRvTG93ZXJDYXNlKCkiPgorICAgIDwhLS0gICAtLT4KKzwvYT4KKyAgICAgICAgPGg0PnRvTG93ZXJDYXNlPC9oND4KKyAgICAgICAgPHByZT5wdWJsaWMmbmJzcDs8YSBocmVmPSIuLi8uLi9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBqYXZhLmxhbmciPlN0cmluZzwvYT4mbmJzcDt0b0xvd2VyQ2FzZSgpPC9wcmU+CisgICAgICAgIDxkaXYgY2xhc3M9ImJsb2NrIj5Db252ZXJ0cyBhbGwgb2YgdGhlIGNoYXJhY3RlcnMgaW4gdGhpcyA8Y29kZT5TdHJpbmc8L2NvZGU+IHRvIGxvd2VyCisgICAgICAgICAgICBjYXNlIHVzaW5nIHRoZSBydWxlcyBvZiB0aGUgZGVmYXVsdCBsb2NhbGUuIFRoaXMgaXMgZXF1aXZhbGVudCB0byBjYWxsaW5nCisgICAgICAgICAgICA8Y29kZT50b0xvd2VyQ2FzZShMb2NhbGUuZ2V0RGVmYXVsdCgpKTwvY29kZT4uCisgICAgICAgICAgICA8cD4KKyAgICAgICAgICAgICAgICA8Yj5Ob3RlOjwvYj4gVGhpcyBtZXRob2QgaXMgbG9jYWxlIHNlbnNpdGl2ZSwgYW5kIG1heSBwcm9kdWNlIHVuZXhwZWN0ZWQKKyAgICAgICAgICAgICAgICByZXN1bHRzIGlmIHVzZWQgZm9yIHN0cmluZ3MgdGhhdCBhcmUgaW50ZW5kZWQgdG8gYmUgaW50ZXJwcmV0ZWQgbG9jYWxlCisgICAgICAgICAgICAgICAgaW5kZXBlbmRlbnRseS4KKyAgICAgICAgICAgICAgICBFeGFtcGxlcyBhcmUgcHJvZ3JhbW1pbmcgbGFuZ3VhZ2UgaWRlbnRpZmllcnMsIHByb3RvY29sIGtleXMsIGFuZCBIVE1MCisgICAgICAgICAgICAgICAgdGFncy4KKyAgICAgICAgICAgICAgICBGb3IgaW5zdGFuY2UsIDxjb2RlPiJUSVRMRSIudG9Mb3dlckNhc2UoKTwvY29kZT4gaW4gYSBUdXJraXNoIGxvY2FsZQorICAgICAgICAgICAgICAgIHJldHVybnMgPGNvZGU+InRcdTAxMzF0bGUiPC9jb2RlPiwgd2hlcmUgJ1x1MDEzMScgaXMgdGhlCisgICAgICAgICAgICAgICAgTEFUSU4gU01BTEwgTEVUVEVSIERPVExFU1MgSSBjaGFyYWN0ZXIuCisgICAgICAgICAgICAgICAgVG8gb2J0YWluIGNvcnJlY3QgcmVzdWx0cyBmb3IgbG9jYWxlIGluc2Vuc2l0aXZlIHN0cmluZ3MsIHVzZQorICAgICAgICAgICAgICAgIDxjb2RlPnRvTG93ZXJDYXNlKExvY2FsZS5FTkdMSVNIKTwvY29kZT4uCisgICAgICAgICAgICA8cD48L2Rpdj4KKyAgICAgICAgPGRsPjxkdD48c3BhbiBjbGFzcz0ic3Ryb25nIj5SZXR1cm5zOjwvc3Bhbj48L2R0PjxkZD50aGUgPGNvZGU+U3RyaW5nPC9jb2RlPiwgY29udmVydGVkIHRvIGxvd2VyY2FzZS48L2RkPjxkdD48c3BhbiBjbGFzcz0ic3Ryb25nIj5TZWUgQWxzbzo8L3NwYW4+PC9kdD48ZGQ+PGEgaHJlZj0iLi4vLi4vamF2YS9sYW5nL1N0cmluZy5odG1sI3RvTG93ZXJDYXNlKGphdmEudXRpbC5Mb2NhbGUpIj48Y29kZT50b0xvd2VyQ2FzZShMb2NhbGUpPC9jb2RlPjwvYT48L2RkPjwvZGw+CisgICAgPC9saT4KKzwvdWw+Cis8L0hUTUw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2V4dGVybmFsSmF2YWRvYy9TdHJpbmcvNy9wYWdlLmh0bWwgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZXh0ZXJuYWxKYXZhZG9jL1N0cmluZy83L3BhZ2UuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYjllYjFmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2V4dGVybmFsSmF2YWRvYy9TdHJpbmcvNy9wYWdlLmh0bWwKQEAgLTAsMCArMSwzMDcxIEBACisKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNC9sb29zZS5kdGQiPgorPCEtLSBOZXdQYWdlIC0tPgorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+CisgICAgPCEtLSBHZW5lcmF0ZWQgYnkgamF2YWRvYyAodmVyc2lvbiAxLjYuMF8xNCkgb24gV2VkIEp1bCAxMyAwNToxOTozMiBQRFQgMjAxMSAtLT4KKyAgICA8dGl0bGU+U3RyaW5nIChKYXZhIFBsYXRmb3JtIFNFIDcgKTwvdGl0bGU+CisgICAgPG1ldGEgbmFtZT0iZGF0ZSIgY29udGVudD0iMjAxMS0wNy0xMyI+CisgICAgPG1ldGEgbmFtZT0ia2V5d29yZHMiIGNvbnRlbnQ9ImphdmEubGFuZy5TdHJpbmcgY2xhc3MiPgorICAgIDxtZXRhIG5hbWU9ImtleXdvcmRzIiBjb250ZW50PSJDQVNFX0lOU0VOU0lUSVZFX09SREVSIj4KKyAgICA8bWV0YSBuYW1lPSJrZXl3b3JkcyIgY29udGVudD0ibGVuZ3RoKCkiPgorICAgIDxtZXRhIG5hbWU9ImtleXdvcmRzIiBjb250ZW50PSJpc0VtcHR5KCkiPgorICAgIDxtZXRhIG5hbWU9ImtleXdvcmRzIiBjb250ZW50PSJjaGFyQXQoKSI+CisgICAgPG1ldGEgbmFtZT0ia2V5d29yZHMiIGNvbnRlbnQ9ImNvZGVQb2ludEF0KCkiPgorICAgIDxtZXRhIG5hbWU9ImtleXdvcmRzIiBjb250ZW50PSJjb2RlUG9pbnRCZWZvcmUoKSI+CisgICAgPG1ldGEgbmFtZT0ia2V5d29yZHMiIGNvbnRlbnQ9ImNvZGVQb2ludENvdW50KCkiPgorICAgIDxtZXRhIG5hbWU9ImtleXdvcmRzIiBjb250ZW50PSJvZmZzZXRCeUNvZGVQb2ludHMoKSI+CisgICAgPG1ldGEgbmFtZT0ia2V5d29yZHMiIGNvbnRlbnQ9ImdldENoYXJzKCkiPgorICAgIDxtZXRhIG5hbWU9ImtleXdvcmRzIiBjb250ZW50PSJnZXRCeXRlcygpIj4KKyAgICA8bWV0YSBuYW1lPSJrZXl3b3JkcyIgY29udGVudD0iZXF1YWxzKCkiPgorICAgIDxtZXRhIG5hbWU9ImtleXdvcmRzIiBjb250ZW50PSJjb250ZW50RXF1YWxzKCkiPgorICAgIDxtZXRhIG5hbWU9ImtleXdvcmRzIiBjb250ZW50PSJlcXVhbHNJZ25vcmVDYXNlKCkiPgorICAgIDxtZXRhIG5hbWU9ImtleXdvcmRzIiBjb250ZW50PSJjb21wYXJlVG8oKSI+CisgICAgPG1ldGEgbmFtZT0ia2V5d29yZHMiIGNvbnRlbnQ9ImNvbXBhcmVUb0lnbm9yZUNhc2UoKSI+CisgICAgPG1ldGEgbmFtZT0ia2V5d29yZHMiIGNvbnRlbnQ9InJlZ2lvbk1hdGNoZXMoKSI+CisgICAgPG1ldGEgbmFtZT0ia2V5d29yZHMiIGNvbnRlbnQ9InN0YXJ0c1dpdGgoKSI+CisgICAgPG1ldGEgbmFtZT0ia2V5d29yZHMiIGNvbnRlbnQ9ImVuZHNXaXRoKCkiPgorICAgIDxtZXRhIG5hbWU9ImtleXdvcmRzIiBjb250ZW50PSJoYXNoQ29kZSgpIj4KKyAgICA8bWV0YSBuYW1lPSJrZXl3b3JkcyIgY29udGVudD0iaW5kZXhPZigpIj4KKyAgICA8bWV0YSBuYW1lPSJrZXl3b3JkcyIgY29udGVudD0ibGFzdEluZGV4T2YoKSI+CisgICAgPG1ldGEgbmFtZT0ia2V5d29yZHMiIGNvbnRlbnQ9InN1YnN0cmluZygpIj4KKyAgICA8bWV0YSBuYW1lPSJrZXl3b3JkcyIgY29udGVudD0ic3ViU2VxdWVuY2UoKSI+CisgICAgPG1ldGEgbmFtZT0ia2V5d29yZHMiIGNvbnRlbnQ9ImNvbmNhdCgpIj4KKyAgICA8bWV0YSBuYW1lPSJrZXl3b3JkcyIgY29udGVudD0icmVwbGFjZSgpIj4KKyAgICA8bWV0YSBuYW1lPSJrZXl3b3JkcyIgY29udGVudD0ibWF0Y2hlcygpIj4KKyAgICA8bWV0YSBuYW1lPSJrZXl3b3JkcyIgY29udGVudD0iY29udGFpbnMoKSI+CisgICAgPG1ldGEgbmFtZT0ia2V5d29yZHMiIGNvbnRlbnQ9InJlcGxhY2VGaXJzdCgpIj4KKyAgICA8bWV0YSBuYW1lPSJrZXl3b3JkcyIgY29udGVudD0icmVwbGFjZUFsbCgpIj4KKyAgICA8bWV0YSBuYW1lPSJrZXl3b3JkcyIgY29udGVudD0ic3BsaXQoKSI+CisgICAgPG1ldGEgbmFtZT0ia2V5d29yZHMiIGNvbnRlbnQ9InRvTG93ZXJDYXNlKCkiPgorICAgIDxtZXRhIG5hbWU9ImtleXdvcmRzIiBjb250ZW50PSJ0b1VwcGVyQ2FzZSgpIj4KKyAgICA8bWV0YSBuYW1lPSJrZXl3b3JkcyIgY29udGVudD0idHJpbSgpIj4KKyAgICA8bWV0YSBuYW1lPSJrZXl3b3JkcyIgY29udGVudD0idG9TdHJpbmcoKSI+CisgICAgPG1ldGEgbmFtZT0ia2V5d29yZHMiIGNvbnRlbnQ9InRvQ2hhckFycmF5KCkiPgorICAgIDxtZXRhIG5hbWU9ImtleXdvcmRzIiBjb250ZW50PSJmb3JtYXQoKSI+CisgICAgPG1ldGEgbmFtZT0ia2V5d29yZHMiIGNvbnRlbnQ9InZhbHVlT2YoKSI+CisgICAgPG1ldGEgbmFtZT0ia2V5d29yZHMiIGNvbnRlbnQ9ImNvcHlWYWx1ZU9mKCkiPgorICAgIDxtZXRhIG5hbWU9ImtleXdvcmRzIiBjb250ZW50PSJpbnRlcm4oKSI+CisgICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iLi4vLi4vc3R5bGVzaGVldC5jc3MiIHRpdGxlPSJTdHlsZSI+Cis8L2hlYWQ+Cis8Ym9keT4KKzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij48IS0tCitpZiAobG9jYXRpb24uaHJlZi5pbmRleE9mKCdpcy1leHRlcm5hbD10cnVlJykgPT0gLTEpIHsKKyAgICBwYXJlbnQuZG9jdW1lbnQudGl0bGU9IlN0cmluZyAoSmF2YSBQbGF0Zm9ybSBTRSA3ICkiOworfQorLy8tLT4KKzwvc2NyaXB0PgorPG5vc2NyaXB0PgorICAgIDxkaXY+SmF2YVNjcmlwdCBpcyBkaXNhYmxlZCBvbiB5b3VyIGJyb3dzZXIuPC9kaXY+Cis8L25vc2NyaXB0PgorPCEtLSA9PT09PT09PT0gU1RBUlQgT0YgVE9QIE5BVkJBUiA9PT09PT09IC0tPgorPGRpdiBjbGFzcz0idG9wTmF2Ij48YSBuYW1lPSJuYXZiYXJfdG9wIj4KKyAgICA8IS0tICAgLS0+Cis8L2E+PGEgaHJlZj0iI3NraXAtbmF2YmFyX3RvcCIgdGl0bGU9IlNraXAgbmF2aWdhdGlvbiBsaW5rcyI+PC9hPjxhIG5hbWU9Im5hdmJhcl90b3BfZmlyc3Ryb3ciPgorICAgIDwhLS0gICAtLT4KKzwvYT4KKyAgICA8dWwgY2xhc3M9Im5hdkxpc3QiIHRpdGxlPSJOYXZpZ2F0aW9uIj4KKyAgICAgICAgPGxpPjxhIGhyZWY9Ii4uLy4uL292ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+T3ZlcnZpZXc8L2E+PC9saT4KKyAgICAgICAgPGxpPjxhIGhyZWY9InBhY2thZ2Utc3VtbWFyeS5odG1sIj5QYWNrYWdlPC9hPjwvbGk+CisgICAgICAgIDxsaSBjbGFzcz0ibmF2QmFyQ2VsbDFSZXYiPkNsYXNzPC9saT4KKyAgICAgICAgPGxpPjxhIGhyZWY9ImNsYXNzLXVzZS9TdHJpbmcuaHRtbCI+VXNlPC9hPjwvbGk+CisgICAgICAgIDxsaT48YSBocmVmPSJwYWNrYWdlLXRyZWUuaHRtbCI+VHJlZTwvYT48L2xpPgorICAgICAgICA8bGk+PGEgaHJlZj0iLi4vLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPkRlcHJlY2F0ZWQ8L2E+PC9saT4KKyAgICAgICAgPGxpPjxhIGhyZWY9Ii4uLy4uL2luZGV4LWZpbGVzL2luZGV4LTEuaHRtbCI+SW5kZXg8L2E+PC9saT4KKyAgICAgICAgPGxpPjxhIGhyZWY9Ii4uLy4uL2hlbHAtZG9jLmh0bWwiPkhlbHA8L2E+PC9saT4KKyAgICA8L3VsPgorICAgIDxkaXYgY2xhc3M9ImFib3V0TGFuZ3VhZ2UiPjxlbT48c3Ryb25nPkphdmEmdHJhZGU7Jm5ic3A7UGxhdGZvcm08YnI+U3RhbmRhcmQmbmJzcDtFZC4mbmJzcDs3PC9zdHJvbmc+PC9lbT48L2Rpdj4KKzwvZGl2PgorPGRpdiBjbGFzcz0ic3ViTmF2Ij4KKyAgICA8dWwgY2xhc3M9Im5hdkxpc3QiPgorICAgICAgICA8bGk+PGEgaHJlZj0iLi4vLi4vamF2YS9sYW5nL1N0cmljdE1hdGguaHRtbCIgdGl0bGU9ImNsYXNzIGluIGphdmEubGFuZyI+PHNwYW4gY2xhc3M9InN0cm9uZyI+UHJldiBDbGFzczwvc3Bhbj48L2E+PC9saT4KKyAgICAgICAgPGxpPjxhIGhyZWY9Ii4uLy4uL2phdmEvbGFuZy9TdHJpbmdCdWZmZXIuaHRtbCIgdGl0bGU9ImNsYXNzIGluIGphdmEubGFuZyI+PHNwYW4gY2xhc3M9InN0cm9uZyI+TmV4dCBDbGFzczwvc3Bhbj48L2E+PC9saT4KKyAgICA8L3VsPgorICAgIDx1bCBjbGFzcz0ibmF2TGlzdCI+CisgICAgICAgIDxsaT48YSBocmVmPSIuLi8uLi9pbmRleC5odG1sP2phdmEvbGFuZy9TdHJpbmcuaHRtbCIgdGFyZ2V0PSJfdG9wIj5GcmFtZXM8L2E+PC9saT4KKyAgICAgICAgPGxpPjxhIGhyZWY9IlN0cmluZy5odG1sIiB0YXJnZXQ9Il90b3AiPk5vIEZyYW1lczwvYT48L2xpPgorICAgIDwvdWw+CisgICAgPHVsIGNsYXNzPSJuYXZMaXN0IiBpZD0iYWxsY2xhc3Nlc19uYXZiYXJfdG9wIj4KKyAgICAgICAgPGxpPjxhIGhyZWY9Ii4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj5BbGwgQ2xhc3NlczwvYT48L2xpPgorICAgIDwvdWw+CisgICAgPGRpdj4KKyAgICAgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPjwhLS0KKyAgICAgICAgYWxsQ2xhc3Nlc0xpbmsgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiYWxsY2xhc3Nlc19uYXZiYXJfdG9wIik7CisgICAgICAgIGlmKHdpbmRvdz09dG9wKSB7CisgICAgICAgICAgICBhbGxDbGFzc2VzTGluay5zdHlsZS5kaXNwbGF5ID0gImJsb2NrIjsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGFsbENsYXNzZXNMaW5rLnN0eWxlLmRpc3BsYXkgPSAibm9uZSI7CisgICAgICAgIH0KKyAgICAgICAgLy8tLT4KKyAgICAgICAgPC9zY3JpcHQ+CisgICAgPC9kaXY+CisgICAgPGRpdj4KKyAgICAgICAgPHVsIGNsYXNzPSJzdWJOYXZMaXN0Ij4KKyAgICAgICAgICAgIDxsaT5TdW1tYXJ5OiZuYnNwOzwvbGk+CisgICAgICAgICAgICA8bGk+TmVzdGVkJm5ic3A7fCZuYnNwOzwvbGk+CisgICAgICAgICAgICA8bGk+PGEgaHJlZj0iI2ZpZWxkX3N1bW1hcnkiPkZpZWxkPC9hPiZuYnNwO3wmbmJzcDs8L2xpPgorICAgICAgICAgICAgPGxpPjxhIGhyZWY9IiNjb25zdHJ1Y3Rvcl9zdW1tYXJ5Ij5Db25zdHI8L2E+Jm5ic3A7fCZuYnNwOzwvbGk+CisgICAgICAgICAgICA8bGk+PGEgaHJlZj0iI21ldGhvZF9zdW1tYXJ5Ij5NZXRob2Q8L2E+PC9saT4KKyAgICAgICAgPC91bD4KKyAgICAgICAgPHVsIGNsYXNzPSJzdWJOYXZMaXN0Ij4KKyAgICAgICAgICAgIDxsaT5EZXRhaWw6Jm5ic3A7PC9saT4KKyAgICAgICAgICAgIDxsaT48YSBocmVmPSIjZmllbGRfZGV0YWlsIj5GaWVsZDwvYT4mbmJzcDt8Jm5ic3A7PC9saT4KKyAgICAgICAgICAgIDxsaT48YSBocmVmPSIjY29uc3RydWN0b3JfZGV0YWlsIj5Db25zdHI8L2E+Jm5ic3A7fCZuYnNwOzwvbGk+CisgICAgICAgICAgICA8bGk+PGEgaHJlZj0iI21ldGhvZF9kZXRhaWwiPk1ldGhvZDwvYT48L2xpPgorICAgICAgICA8L3VsPgorICAgIDwvZGl2PgorICAgIDxhIG5hbWU9InNraXAtbmF2YmFyX3RvcCI+CisgICAgICAgIDwhLS0gICAtLT4KKyAgICA8L2E+PC9kaXY+Cis8IS0tID09PT09PT09PSBFTkQgT0YgVE9QIE5BVkJBUiA9PT09PT09PT0gLS0+Cis8IS0tID09PT09PT09IFNUQVJUIE9GIENMQVNTIERBVEEgPT09PT09PT0gLS0+Cis8ZGl2IGNsYXNzPSJoZWFkZXIiPgorICAgIDxkaXYgY2xhc3M9InN1YlRpdGxlIj5qYXZhLmxhbmc8L2Rpdj4KKyAgICA8aDIgdGl0bGU9IkNsYXNzIFN0cmluZyIgY2xhc3M9InRpdGxlIj5DbGFzcyBTdHJpbmc8L2gyPgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJjb250ZW50Q29udGFpbmVyIj4KKzx1bCBjbGFzcz0iaW5oZXJpdGFuY2UiPgorICAgIDxsaT48YSBocmVmPSIuLi8uLi9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBqYXZhLmxhbmciPmphdmEubGFuZy5PYmplY3Q8L2E+PC9saT4KKyAgICA8bGk+CisgICAgICAgIDx1bCBjbGFzcz0iaW5oZXJpdGFuY2UiPgorICAgICAgICAgICAgPGxpPmphdmEubGFuZy5TdHJpbmc8L2xpPgorICAgICAgICA8L3VsPgorICAgIDwvbGk+Cis8L3VsPgorPGRpdiBjbGFzcz0iZGVzY3JpcHRpb24iPgorICAgIDx1bCBjbGFzcz0iYmxvY2tMaXN0Ij4KKyAgICAgICAgPGxpIGNsYXNzPSJibG9ja0xpc3QiPgorICAgICAgICAgICAgPGRsPgorICAgICAgICAgICAgICAgIDxkdD5BbGwgSW1wbGVtZW50ZWQgSW50ZXJmYWNlczo8L2R0PgorICAgICAgICAgICAgICAgIDxkZD48YSBocmVmPSIuLi8uLi9qYXZhL2lvL1NlcmlhbGl6YWJsZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIGphdmEuaW8iPlNlcmlhbGl6YWJsZTwvYT4sIDxhIGhyZWY9Ii4uLy4uL2phdmEvbGFuZy9DaGFyU2VxdWVuY2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBqYXZhLmxhbmciPkNoYXJTZXF1ZW5jZTwvYT4sIDxhIGhyZWY9Ii4uLy4uL2phdmEvbGFuZy9Db21wYXJhYmxlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gamF2YS5sYW5nIj5Db21wYXJhYmxlPC9hPiZsdDs8YSBocmVmPSIuLi8uLi9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBqYXZhLmxhbmciPlN0cmluZzwvYT4mZ3Q7PC9kZD4KKyAgICAgICAgICAgIDwvZGw+CisgICAgICAgICAgICA8aHI+CisgICAgICAgICAgICA8YnI+Cis8cHJlPnB1YmxpYyBmaW5hbCBjbGFzcyA8c3BhbiBjbGFzcz0ic3Ryb25nIj5TdHJpbmc8L3NwYW4+CitleHRlbmRzIDxhIGhyZWY9Ii4uLy4uL2phdmEvbGFuZy9PYmplY3QuaHRtbCIgdGl0bGU9ImNsYXNzIGluIGphdmEubGFuZyI+T2JqZWN0PC9hPgoraW1wbGVtZW50cyA8YSBocmVmPSIuLi8uLi9qYXZhL2lvL1NlcmlhbGl6YWJsZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIGphdmEuaW8iPlNlcmlhbGl6YWJsZTwvYT4sIDxhIGhyZWY9Ii4uLy4uL2phdmEvbGFuZy9Db21wYXJhYmxlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gamF2YS5sYW5nIj5Db21wYXJhYmxlPC9hPiZsdDs8YSBocmVmPSIuLi8uLi9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBqYXZhLmxhbmciPlN0cmluZzwvYT4mZ3Q7LCA8YSBocmVmPSIuLi8uLi9qYXZhL2xhbmcvQ2hhclNlcXVlbmNlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gamF2YS5sYW5nIj5DaGFyU2VxdWVuY2U8L2E+PC9wcmU+CisgICAgICAgICAgICA8ZGl2IGNsYXNzPSJibG9jayI+VGhlIDxjb2RlPlN0cmluZzwvY29kZT4gY2xhc3MgcmVwcmVzZW50cyBjaGFyYWN0ZXIgc3RyaW5ncy4gQWxsCisgICAgICAgICAgICAgICAgc3RyaW5nIGxpdGVyYWxzIGluIEphdmEgcHJvZ3JhbXMsIHN1Y2ggYXMgPGNvZGU+ImFiYyI8L2NvZGU+LCBhcmUKKyAgICAgICAgICAgICAgICBpbXBsZW1lbnRlZCBhcyBpbnN0YW5jZXMgb2YgdGhpcyBjbGFzcy4KKyAgICAgICAgICAgICAgICA8cD4KKyAgICAgICAgICAgICAgICAgICAgU3RyaW5ncyBhcmUgY29uc3RhbnQ7IHRoZWlyIHZhbHVlcyBjYW5ub3QgYmUgY2hhbmdlZCBhZnRlciB0aGV5CisgICAgICAgICAgICAgICAgICAgIGFyZSBjcmVhdGVkLiBTdHJpbmcgYnVmZmVycyBzdXBwb3J0IG11dGFibGUgc3RyaW5ncy4KKyAgICAgICAgICAgICAgICAgICAgQmVjYXVzZSBTdHJpbmcgb2JqZWN0cyBhcmUgaW1tdXRhYmxlIHRoZXkgY2FuIGJlIHNoYXJlZC4gRm9yIGV4YW1wbGU6CisgICAgICAgICAgICAgICAgPHA+PGJsb2NrcXVvdGU+PHByZT4KKyAgICAgU3RyaW5nIHN0ciA9ICJhYmMiOworIDwvcHJlPjwvYmxvY2txdW90ZT48cD4KKyAgICAgICAgICAgICAgICAgICAgaXMgZXF1aXZhbGVudCB0bzoKKyAgICAgICAgICAgICAgICA8cD48YmxvY2txdW90ZT48cHJlPgorICAgICBjaGFyIGRhdGFbXSA9IHsnYScsICdiJywgJ2MnfTsKKyAgICAgU3RyaW5nIHN0ciA9IG5ldyBTdHJpbmcoZGF0YSk7CisgPC9wcmU+PC9ibG9ja3F1b3RlPjxwPgorICAgICAgICAgICAgICAgICAgICBIZXJlIGFyZSBzb21lIG1vcmUgZXhhbXBsZXMgb2YgaG93IHN0cmluZ3MgY2FuIGJlIHVzZWQ6CisgICAgICAgICAgICAgICAgPHA+PGJsb2NrcXVvdGU+PHByZT4KKyAgICAgU3lzdGVtLm91dC5wcmludGxuKCJhYmMiKTsKKyAgICAgU3RyaW5nIGNkZSA9ICJjZGUiOworICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImFiYyIgKyBjZGUpOworICAgICBTdHJpbmcgYyA9ICJhYmMiLnN1YnN0cmluZygyLDMpOworICAgICBTdHJpbmcgZCA9IGNkZS5zdWJzdHJpbmcoMSwgMik7CisgPC9wcmU+PC9ibG9ja3F1b3RlPgorICAgICAgICAgICAgICAgIDxwPgorICAgICAgICAgICAgICAgICAgICBUaGUgY2xhc3MgPGNvZGU+U3RyaW5nPC9jb2RlPiBpbmNsdWRlcyBtZXRob2RzIGZvciBleGFtaW5pbmcKKyAgICAgICAgICAgICAgICAgICAgaW5kaXZpZHVhbCBjaGFyYWN0ZXJzIG9mIHRoZSBzZXF1ZW5jZSwgZm9yIGNvbXBhcmluZyBzdHJpbmdzLCBmb3IKKyAgICAgICAgICAgICAgICAgICAgc2VhcmNoaW5nIHN0cmluZ3MsIGZvciBleHRyYWN0aW5nIHN1YnN0cmluZ3MsIGFuZCBmb3IgY3JlYXRpbmcgYQorICAgICAgICAgICAgICAgICAgICBjb3B5IG9mIGEgc3RyaW5nIHdpdGggYWxsIGNoYXJhY3RlcnMgdHJhbnNsYXRlZCB0byB1cHBlcmNhc2Ugb3IgdG8KKyAgICAgICAgICAgICAgICAgICAgbG93ZXJjYXNlLiBDYXNlIG1hcHBpbmcgaXMgYmFzZWQgb24gdGhlIFVuaWNvZGUgU3RhbmRhcmQgdmVyc2lvbgorICAgICAgICAgICAgICAgICAgICBzcGVjaWZpZWQgYnkgdGhlIDxhIGhyZWY9Ii4uLy4uL2phdmEvbGFuZy9DaGFyYWN0ZXIuaHRtbCIgdGl0bGU9ImNsYXNzIGluIGphdmEubGFuZyI+PGNvZGU+Q2hhcmFjdGVyPC9jb2RlPjwvYT4gY2xhc3MuCisgICAgICAgICAgICAgICAgPHA+CisgICAgICAgICAgICAgICAgICAgIFRoZSBKYXZhIGxhbmd1YWdlIHByb3ZpZGVzIHNwZWNpYWwgc3VwcG9ydCBmb3IgdGhlIHN0cmluZworICAgICAgICAgICAgICAgICAgICBjb25jYXRlbmF0aW9uIG9wZXJhdG9yICgmbmJzcDsrJm5ic3A7KSwgYW5kIGZvciBjb252ZXJzaW9uIG9mCisgICAgICAgICAgICAgICAgICAgIG90aGVyIG9iamVjdHMgdG8gc3RyaW5ncy4gU3RyaW5nIGNvbmNhdGVuYXRpb24gaXMgaW1wbGVtZW50ZWQKKyAgICAgICAgICAgICAgICAgICAgdGhyb3VnaCB0aGUgPGNvZGU+U3RyaW5nQnVpbGRlcjwvY29kZT4ob3IgPGNvZGU+U3RyaW5nQnVmZmVyPC9jb2RlPikKKyAgICAgICAgICAgICAgICAgICAgY2xhc3MgYW5kIGl0cyA8Y29kZT5hcHBlbmQ8L2NvZGU+IG1ldGhvZC4KKyAgICAgICAgICAgICAgICAgICAgU3RyaW5nIGNvbnZlcnNpb25zIGFyZSBpbXBsZW1lbnRlZCB0aHJvdWdoIHRoZSBtZXRob2QKKyAgICAgICAgICAgICAgICAgICAgPGNvZGU+dG9TdHJpbmc8L2NvZGU+LCBkZWZpbmVkIGJ5IDxjb2RlPk9iamVjdDwvY29kZT4gYW5kCisgICAgICAgICAgICAgICAgICAgIGluaGVyaXRlZCBieSBhbGwgY2xhc3NlcyBpbiBKYXZhLiBGb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBvbgorICAgICAgICAgICAgICAgICAgICBzdHJpbmcgY29uY2F0ZW5hdGlvbiBhbmQgY29udmVyc2lvbiwgc2VlIEdvc2xpbmcsIEpveSwgYW5kIFN0ZWVsZSwKKyAgICAgICAgICAgICAgICAgICAgPGk+VGhlIEphdmEgTGFuZ3VhZ2UgU3BlY2lmaWNhdGlvbjwvaT4uCisKKyAgICAgICAgICAgICAgICA8cD4gVW5sZXNzIG90aGVyd2lzZSBub3RlZCwgcGFzc2luZyBhIDx0dD5udWxsPC90dD4gYXJndW1lbnQgdG8gYSBjb25zdHJ1Y3RvcgorICAgICAgICAgICAgICAgICAgICBvciBtZXRob2QgaW4gdGhpcyBjbGFzcyB3aWxsIGNhdXNlIGEgPGEgaHJlZj0iLi4vLi4vamF2YS9sYW5nL051bGxQb2ludGVyRXhjZXB0aW9uLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBqYXZhLmxhbmciPjxjb2RlPk51bGxQb2ludGVyRXhjZXB0aW9uPC9jb2RlPjwvYT4gdG8gYmUKKyAgICAgICAgICAgICAgICAgICAgdGhyb3duLgorCisgICAgICAgICAgICAgICAgPHA+QSA8Y29kZT5TdHJpbmc8L2NvZGU+IHJlcHJlc2VudHMgYSBzdHJpbmcgaW4gdGhlIFVURi0xNiBmb3JtYXQKKyAgICAgICAgICAgICAgICAgICAgaW4gd2hpY2ggPGVtPnN1cHBsZW1lbnRhcnkgY2hhcmFjdGVyczwvZW0+IGFyZSByZXByZXNlbnRlZCBieSA8ZW0+c3Vycm9nYXRlCisgICAgICAgICAgICAgICAgICAgICAgICBwYWlyczwvZW0+IChzZWUgdGhlIHNlY3Rpb24gPGEgaHJlZj0iQ2hhcmFjdGVyLmh0bWwjdW5pY29kZSI+VW5pY29kZQorICAgICAgICAgICAgICAgICAgICAgICAgQ2hhcmFjdGVyIFJlcHJlc2VudGF0aW9uczwvYT4gaW4gdGhlIDxjb2RlPkNoYXJhY3RlcjwvY29kZT4gY2xhc3MgZm9yCisgICAgICAgICAgICAgICAgICAgIG1vcmUgaW5mb3JtYXRpb24pLgorICAgICAgICAgICAgICAgICAgICBJbmRleCB2YWx1ZXMgcmVmZXIgdG8gPGNvZGU+Y2hhcjwvY29kZT4gY29kZSB1bml0cywgc28gYSBzdXBwbGVtZW50YXJ5CisgICAgICAgICAgICAgICAgICAgIGNoYXJhY3RlciB1c2VzIHR3byBwb3NpdGlvbnMgaW4gYSA8Y29kZT5TdHJpbmc8L2NvZGU+LgorICAgICAgICAgICAgICAgIDxwPlRoZSA8Y29kZT5TdHJpbmc8L2NvZGU+IGNsYXNzIHByb3ZpZGVzIG1ldGhvZHMgZm9yIGRlYWxpbmcgd2l0aAorICAgICAgICAgICAgICAgICAgICBVbmljb2RlIGNvZGUgcG9pbnRzIChpLmUuLCBjaGFyYWN0ZXJzKSwgaW4gYWRkaXRpb24gdG8gdGhvc2UgZm9yCisgICAgICAgICAgICAgICAgICAgIGRlYWxpbmcgd2l0aCBVbmljb2RlIGNvZGUgdW5pdHMgKGkuZS4sIDxjb2RlPmNoYXI8L2NvZGU+IHZhbHVlcykuPC9kaXY+CisgICAgICAgICAgICA8ZGw+PGR0PjxzcGFuIGNsYXNzPSJzdHJvbmciPlNpbmNlOjwvc3Bhbj48L2R0PgorICAgICAgICAgICAgICAgIDxkZD5KREsxLjA8L2RkPgorICAgICAgICAgICAgICAgIDxkdD48c3BhbiBjbGFzcz0ic3Ryb25nIj5TZWUgQWxzbzo8L3NwYW4+PC9kdD48ZGQ+PGEgaHJlZj0iLi4vLi4vamF2YS9sYW5nL09iamVjdC5odG1sI3RvU3RyaW5nKCkiPjxjb2RlPk9iamVjdC50b1N0cmluZygpPC9jb2RlPjwvYT4sCisgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Ii4uLy4uL2phdmEvbGFuZy9TdHJpbmdCdWZmZXIuaHRtbCIgdGl0bGU9ImNsYXNzIGluIGphdmEubGFuZyI+PGNvZGU+U3RyaW5nQnVmZmVyPC9jb2RlPjwvYT4sCisgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Ii4uLy4uL2phdmEvbGFuZy9TdHJpbmdCdWlsZGVyLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBqYXZhLmxhbmciPjxjb2RlPlN0cmluZ0J1aWxkZXI8L2NvZGU+PC9hPiwKKyAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iLi4vLi4vamF2YS9uaW8vY2hhcnNldC9DaGFyc2V0Lmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBqYXZhLm5pby5jaGFyc2V0Ij48Y29kZT5DaGFyc2V0PC9jb2RlPjwvYT4sCisgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Ii4uLy4uL3NlcmlhbGl6ZWQtZm9ybS5odG1sI2phdmEubGFuZy5TdHJpbmciPlNlcmlhbGl6ZWQgRm9ybTwvYT48L2RkPjwvZGw+CisgICAgICAgIDwvbGk+CisgICAgPC91bD4KKzwvZGl2PgorPGRpdiBjbGFzcz0ic3VtbWFyeSI+Cis8dWwgY2xhc3M9ImJsb2NrTGlzdCI+Cis8bGkgY2xhc3M9ImJsb2NrTGlzdCI+Cis8IS0tID09PT09PT09PT09IEZJRUxEIFNVTU1BUlkgPT09PT09PT09PT0gLS0+Cis8dWwgY2xhc3M9ImJsb2NrTGlzdCI+CisgICAgPGxpIGNsYXNzPSJibG9ja0xpc3QiPjxhIG5hbWU9ImZpZWxkX3N1bW1hcnkiPgorICAgICAgICA8IS0tICAgLS0+CisgICAgPC9hPgorICAgICAgICA8aDM+RmllbGQgU3VtbWFyeTwvaDM+CisgICAgICAgIDx0YWJsZSBjbGFzcz0ib3ZlcnZpZXdTdW1tYXJ5IiBib3JkZXI9IjAiIGNlbGxwYWRkaW5nPSIzIiBjZWxsc3BhY2luZz0iMCIgc3VtbWFyeT0iRmllbGQgU3VtbWFyeSB0YWJsZSwgbGlzdGluZyBmaWVsZHMsIGFuZCBhbiBleHBsYW5hdGlvbiI+CisgICAgICAgICAgICA8Y2FwdGlvbj48c3Bhbj5GaWVsZHM8L3NwYW4+PHNwYW4gY2xhc3M9InRhYkVuZCI+Jm5ic3A7PC9zcGFuPjwvY2FwdGlvbj4KKyAgICAgICAgICAgIDx0cj4KKyAgICAgICAgICAgICAgICA8dGggY2xhc3M9ImNvbEZpcnN0IiBzY29wZT0iY29sIj5Nb2RpZmllciBhbmQgVHlwZTwvdGg+CisgICAgICAgICAgICAgICAgPHRoIGNsYXNzPSJjb2xMYXN0IiBzY29wZT0iY29sIj5GaWVsZCBhbmQgRGVzY3JpcHRpb248L3RoPgorICAgICAgICAgICAgPC90cj4KKyAgICAgICAgICAgIDx0ciBjbGFzcz0iYWx0Q29sb3IiPgorICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0iY29sRmlyc3QiPjxjb2RlPnN0YXRpYyA8YSBocmVmPSIuLi8uLi9qYXZhL3V0aWwvQ29tcGFyYXRvci5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIGphdmEudXRpbCI+Q29tcGFyYXRvcjwvYT4mbHQ7PGEgaHJlZj0iLi4vLi4vamF2YS9sYW5nL1N0cmluZy5odG1sIiB0aXRsZT0iY2xhc3MgaW4gamF2YS5sYW5nIj5TdHJpbmc8L2E+Jmd0OzwvY29kZT48L3RkPgorICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0iY29sTGFzdCI+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIuLi8uLi9qYXZhL2xhbmcvU3RyaW5nLmh0bWwjQ0FTRV9JTlNFTlNJVElWRV9PUkRFUiI+Q0FTRV9JTlNFTlNJVElWRV9PUkRFUjwvYT48L3N0cm9uZz48L2NvZGU+CisgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImJsb2NrIj5BIENvbXBhcmF0b3IgdGhhdCBvcmRlcnMgPGNvZGU+U3RyaW5nPC9jb2RlPiBvYmplY3RzIGFzIGJ5CisgICAgICAgICAgICAgICAgICAgICAgICA8Y29kZT5jb21wYXJlVG9JZ25vcmVDYXNlPC9jb2RlPi48L2Rpdj4KKyAgICAgICAgICAgICAgICA8L3RkPgorICAgICAgICAgICAgPC90cj4KKyAgICAgICAgPC90YWJsZT4KKyAgICA8L2xpPgorPC91bD4KKzwhLS0gPT09PT09PT0gQ09OU1RSVUNUT1IgU1VNTUFSWSA9PT09PT09PSAtLT4KKzx1bCBjbGFzcz0iYmxvY2tMaXN0Ij4KKyAgICA8bGkgY2xhc3M9ImJsb2NrTGlzdCI+PGEgbmFtZT0iY29uc3RydWN0b3Jfc3VtbWFyeSI+CisgICAgICAgIDwhLS0gICAtLT4KKyAgICA8L2E+CisgICAgICAgIDxoMz5Db25zdHJ1Y3RvciBTdW1tYXJ5PC9oMz4KKyAgICAgICAgPHRhYmxlIGNsYXNzPSJvdmVydmlld1N1bW1hcnkiIGJvcmRlcj0iMCIgY2VsbHBhZGRpbmc9IjMiIGNlbGxzcGFjaW5nPSIwIiBzdW1tYXJ5PSJDb25zdHJ1Y3RvciBTdW1tYXJ5IHRhYmxlLCBsaXN0aW5nIGNvbnN0cnVjdG9ycywgYW5kIGFuIGV4cGxhbmF0aW9uIj4KKyAgICAgICAgICAgIDxjYXB0aW9uPjxzcGFuPkNvbnN0cnVjdG9yczwvc3Bhbj48c3BhbiBjbGFzcz0idGFiRW5kIj4mbmJzcDs8L3NwYW4+PC9jYXB0aW9uPgorICAgICAgICAgICAgPHRyPgorICAgICAgICAgICAgICAgIDx0aCBjbGFzcz0iY29sT25lIiBzY29wZT0iY29sIj5Db25zdHJ1Y3RvciBhbmQgRGVzY3JpcHRpb248L3RoPgorICAgICAgICAgICAgPC90cj4KKyAgICAgICAgICAgIDx0ciBjbGFzcz0iYWx0Q29sb3IiPgorICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0iY29sT25lIj48Y29kZT48c3Ryb25nPjxhIGhyZWY9Ii4uLy4uL2phdmEvbGFuZy9TdHJpbmcuaHRtbCNTdHJpbmcoKSI+U3RyaW5nPC9hPjwvc3Ryb25nPigpPC9jb2RlPgorICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJibG9jayI+SW5pdGlhbGl6ZXMgYSBuZXdseSBjcmVhdGVkIDxjb2RlPlN0cmluZzwvY29kZT4gb2JqZWN0IHNvIHRoYXQgaXQgcmVwcmVzZW50cworICAgICAgICAgICAgICAgICAgICAgICAgYW4gZW1wdHkgY2hhcmFjdGVyIHNlcXVlbmNlLjwvZGl2PgorICAgICAgICAgICAgICAgIDwvdGQ+CisgICAgICAgICAgICA8L3RyPgorICAgICAgICAgICAgPHRyIGNsYXNzPSJyb3dDb2xvciI+CisgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJjb2xPbmUiPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iLi4vLi4vamF2YS9sYW5nL1N0cmluZy5odG1sI1N0cmluZyhieXRlW10pIj5TdHJpbmc8L2E+PC9zdHJvbmc+KGJ5dGVbXSZuYnNwO2J5dGVzKTwvY29kZT4KKyAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iYmxvY2siPkNvbnN0cnVjdHMgYSBuZXcgPGNvZGU+U3RyaW5nPC9jb2RlPiBieSBkZWNvZGluZyB0aGUgc3BlY2lmaWVkIGFycmF5IG9mIGJ5dGVzCisgICAgICAgICAgICAgICAgICAgICAgICB1c2luZyB0aGUgcGxhdGZvcm0ncyBkZWZhdWx0IGNoYXJzZXQuPC9kaXY+CisgICAgICAgICAgICAgICAgPC90ZD4KKyAgICAgICAgICAgIDwvdHI+CisgICAgICAgICAgICA8dHIgY2xhc3M9ImFsdENvbG9yIj4KKyAgICAgICAgICAgICAgICA8dGQgY2xhc3M9ImNvbE9uZSI+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIuLi8uLi9qYXZhL2xhbmcvU3RyaW5nLmh0bWwjU3RyaW5nKGJ5dGVbXSwgamF2YS5uaW8uY2hhcnNldC5DaGFyc2V0KSI+U3RyaW5nPC9hPjwvc3Ryb25nPihieXRlW10mbmJzcDtieXRlcywKKyAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iLi4vLi4vamF2YS9uaW8vY2hhcnNldC9DaGFyc2V0Lmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBqYXZhLm5pby5jaGFyc2V0Ij5DaGFyc2V0PC9hPiZuYnNwO2NoYXJzZXQpPC9jb2RlPgorICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJibG9jayI+Q29uc3RydWN0cyBhIG5ldyA8Y29kZT5TdHJpbmc8L2NvZGU+IGJ5IGRlY29kaW5nIHRoZSBzcGVjaWZpZWQgYXJyYXkgb2YKKyAgICAgICAgICAgICAgICAgICAgICAgIGJ5dGVzIHVzaW5nIHRoZSBzcGVjaWZpZWQgPGEgaHJlZj0iLi4vLi4vamF2YS9uaW8vY2hhcnNldC9DaGFyc2V0Lmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBqYXZhLm5pby5jaGFyc2V0Ij5jaGFyc2V0PC9hPi48L2Rpdj4KKyAgICAgICAgICAgICAgICA8L3RkPgorICAgICAgICAgICAgPC90cj4KKyAgICAgICAgICAgIDx0ciBjbGFzcz0icm93Q29sb3IiPgorICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0iY29sT25lIj48Y29kZT48c3Ryb25nPjxhIGhyZWY9Ii4uLy4uL2phdmEvbGFuZy9TdHJpbmcuaHRtbCNTdHJpbmcoYnl0ZVtdLCBpbnQpIj5TdHJpbmc8L2E+PC9zdHJvbmc+KGJ5dGVbXSZuYnNwO2FzY2lpLAorICAgICAgICAgICAgICAgICAgICBpbnQmbmJzcDtoaWJ5dGUpPC9jb2RlPgorICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJibG9jayI+PHN0cm9uZz5EZXByZWNhdGVkLjwvc3Ryb25nPiZuYnNwOworICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iYmxvY2siPjxpPlRoaXMgbWV0aG9kIGRvZXMgbm90IHByb3Blcmx5IGNvbnZlcnQgYnl0ZXMgaW50bworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXJhY3RlcnMuICBBcyBvZiBKREsmbmJzcDsxLjEsIHRoZSBwcmVmZXJyZWQgd2F5IHRvIGRvIHRoaXMgaXMgdmlhIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjb2RlPlN0cmluZzwvY29kZT4gY29uc3RydWN0b3JzIHRoYXQgdGFrZSBhIDxhIGhyZWY9Ii4uLy4uL2phdmEvbmlvL2NoYXJzZXQvQ2hhcnNldC5odG1sIiB0aXRsZT0iY2xhc3MgaW4gamF2YS5uaW8uY2hhcnNldCI+PGNvZGU+Q2hhcnNldDwvY29kZT48L2E+LCBjaGFyc2V0IG5hbWUsIG9yIHRoYXQgdXNlIHRoZSBwbGF0Zm9ybSdzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdCBjaGFyc2V0LjwvaT48L2Rpdj4KKyAgICAgICAgICAgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgICAgICAgPC90ZD4KKyAgICAgICAgICAgIDwvdHI+CisgICAgICAgICAgICA8dHIgY2xhc3M9ImFsdENvbG9yIj4KKyAgICAgICAgICAgICAgICA8dGQgY2xhc3M9ImNvbE9uZSI+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIuLi8uLi9qYXZhL2xhbmcvU3RyaW5nLmh0bWwjU3RyaW5nKGJ5dGVbXSwgaW50LCBpbnQpIj5TdHJpbmc8L2E+PC9zdHJvbmc+KGJ5dGVbXSZuYnNwO2J5dGVzLAorICAgICAgICAgICAgICAgICAgICBpbnQmbmJzcDtvZmZzZXQsCisgICAgICAgICAgICAgICAgICAgIGludCZuYnNwO2xlbmd0aCk8L2NvZGU+CisgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImJsb2NrIj5Db25zdHJ1Y3RzIGEgbmV3IDxjb2RlPlN0cmluZzwvY29kZT4gYnkgZGVjb2RpbmcgdGhlIHNwZWNpZmllZCBzdWJhcnJheSBvZgorICAgICAgICAgICAgICAgICAgICAgICAgYnl0ZXMgdXNpbmcgdGhlIHBsYXRmb3JtJ3MgZGVmYXVsdCBjaGFyc2V0LjwvZGl2PgorICAgICAgICAgICAgICAgIDwvdGQ+CisgICAgICAgICAgICA8L3RyPgorICAgICAgICAgICAgPHRyIGNsYXNzPSJyb3dDb2xvciI+CisgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJjb2xPbmUiPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iLi4vLi4vamF2YS9sYW5nL1N0cmluZy5odG1sI1N0cmluZyhieXRlW10sIGludCwgaW50LCBqYXZhLm5pby5jaGFyc2V0LkNoYXJzZXQpIj5TdHJpbmc8L2E+PC9zdHJvbmc+KGJ5dGVbXSZuYnNwO2J5dGVzLAorICAgICAgICAgICAgICAgICAgICBpbnQmbmJzcDtvZmZzZXQsCisgICAgICAgICAgICAgICAgICAgIGludCZuYnNwO2xlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iLi4vLi4vamF2YS9uaW8vY2hhcnNldC9DaGFyc2V0Lmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBqYXZhLm5pby5jaGFyc2V0Ij5DaGFyc2V0PC9hPiZuYnNwO2NoYXJzZXQpPC9jb2RlPgorICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJibG9jayI+Q29uc3RydWN0cyBhIG5ldyA8Y29kZT5TdHJpbmc8L2NvZGU+IGJ5IGRlY29kaW5nIHRoZSBzcGVjaWZpZWQgc3ViYXJyYXkgb2YKKyAgICAgICAgICAgICAgICAgICAgICAgIGJ5dGVzIHVzaW5nIHRoZSBzcGVjaWZpZWQgPGEgaHJlZj0iLi4vLi4vamF2YS9uaW8vY2hhcnNldC9DaGFyc2V0Lmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBqYXZhLm5pby5jaGFyc2V0Ij5jaGFyc2V0PC9hPi48L2Rpdj4KKyAgICAgICAgICAgICAgICA8L3RkPgorICAgICAgICAgICAgPC90cj4KKyAgICAgICAgICAgIDx0ciBjbGFzcz0iYWx0Q29sb3IiPgorICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0iY29sT25lIj48Y29kZT48c3Ryb25nPjxhIGhyZWY9Ii4uLy4uL2phdmEvbGFuZy9TdHJpbmcuaHRtbCNTdHJpbmcoYnl0ZVtdLCBpbnQsIGludCwgaW50KSI+U3RyaW5nPC9hPjwvc3Ryb25nPihieXRlW10mbmJzcDthc2NpaSwKKyAgICAgICAgICAgICAgICAgICAgaW50Jm5ic3A7aGlieXRlLAorICAgICAgICAgICAgICAgICAgICBpbnQmbmJzcDtvZmZzZXQsCisgICAgICAgICAgICAgICAgICAgIGludCZuYnNwO2NvdW50KTwvY29kZT4KKyAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iYmxvY2siPjxzdHJvbmc+RGVwcmVjYXRlZC48L3N0cm9uZz4mbmJzcDsKKyAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImJsb2NrIj48aT5UaGlzIG1ldGhvZCBkb2VzIG5vdCBwcm9wZXJseSBjb252ZXJ0IGJ5dGVzIGludG8gY2hhcmFjdGVycy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcyBvZiBKREsmbmJzcDsxLjEsIHRoZSBwcmVmZXJyZWQgd2F5IHRvIGRvIHRoaXMgaXMgdmlhIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjb2RlPlN0cmluZzwvY29kZT4gY29uc3RydWN0b3JzIHRoYXQgdGFrZSBhIDxhIGhyZWY9Ii4uLy4uL2phdmEvbmlvL2NoYXJzZXQvQ2hhcnNldC5odG1sIiB0aXRsZT0iY2xhc3MgaW4gamF2YS5uaW8uY2hhcnNldCI+PGNvZGU+Q2hhcnNldDwvY29kZT48L2E+LCBjaGFyc2V0IG5hbWUsIG9yIHRoYXQgdXNlIHRoZSBwbGF0Zm9ybSdzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdCBjaGFyc2V0LjwvaT48L2Rpdj4KKyAgICAgICAgICAgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgICAgICAgPC90ZD4KKyAgICAgICAgICAgIDwvdHI+CisgICAgICAgICAgICA8dHIgY2xhc3M9InJvd0NvbG9yIj4KKyAgICAgICAgICAgICAgICA8dGQgY2xhc3M9ImNvbE9uZSI+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIuLi8uLi9qYXZhL2xhbmcvU3RyaW5nLmh0bWwjU3RyaW5nKGJ5dGVbXSwgaW50LCBpbnQsIGphdmEubGFuZy5TdHJpbmcpIj5TdHJpbmc8L2E+PC9zdHJvbmc+KGJ5dGVbXSZuYnNwO2J5dGVzLAorICAgICAgICAgICAgICAgICAgICBpbnQmbmJzcDtvZmZzZXQsCisgICAgICAgICAgICAgICAgICAgIGludCZuYnNwO2xlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iLi4vLi4vamF2YS9sYW5nL1N0cmluZy5odG1sIiB0aXRsZT0iY2xhc3MgaW4gamF2YS5sYW5nIj5TdHJpbmc8L2E+Jm5ic3A7Y2hhcnNldE5hbWUpPC9jb2RlPgorICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJibG9jayI+Q29uc3RydWN0cyBhIG5ldyA8Y29kZT5TdHJpbmc8L2NvZGU+IGJ5IGRlY29kaW5nIHRoZSBzcGVjaWZpZWQgc3ViYXJyYXkgb2YKKyAgICAgICAgICAgICAgICAgICAgICAgIGJ5dGVzIHVzaW5nIHRoZSBzcGVjaWZpZWQgY2hhcnNldC48L2Rpdj4KKyAgICAgICAgICAgICAgICA8L3RkPgorICAgICAgICAgICAgPC90cj4KKyAgICAgICAgICAgIDx0ciBjbGFzcz0iYWx0Q29sb3IiPgorICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0iY29sT25lIj48Y29kZT48c3Ryb25nPjxhIGhyZWY9Ii4uLy4uL2phdmEvbGFuZy9TdHJpbmcuaHRtbCNTdHJpbmcoYnl0ZVtdLCBqYXZhLmxhbmcuU3RyaW5nKSI+U3RyaW5nPC9hPjwvc3Ryb25nPihieXRlW10mbmJzcDtieXRlcywKKyAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iLi4vLi4vamF2YS9sYW5nL1N0cmluZy5odG1sIiB0aXRsZT0iY2xhc3MgaW4gamF2YS5sYW5nIj5TdHJpbmc8L2E+Jm5ic3A7Y2hhcnNldE5hbWUpPC9jb2RlPgorICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJibG9jayI+Q29uc3RydWN0cyBhIG5ldyA8Y29kZT5TdHJpbmc8L2NvZGU+IGJ5IGRlY29kaW5nIHRoZSBzcGVjaWZpZWQgYXJyYXkgb2YgYnl0ZXMKKyAgICAgICAgICAgICAgICAgICAgICAgIHVzaW5nIHRoZSBzcGVjaWZpZWQgPGEgaHJlZj0iLi4vLi4vamF2YS9uaW8vY2hhcnNldC9DaGFyc2V0Lmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBqYXZhLm5pby5jaGFyc2V0Ij5jaGFyc2V0PC9hPi48L2Rpdj4KKyAgICAgICAgICAgICAgICA8L3RkPgorICAgICAgICAgICAgPC90cj4KKyAgICAgICAgICAgIDx0ciBjbGFzcz0icm93Q29sb3IiPgorICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0iY29sT25lIj48Y29kZT48c3Ryb25nPjxhIGhyZWY9Ii4uLy4uL2phdmEvbGFuZy9TdHJpbmcuaHRtbCNTdHJpbmcoY2hhcltdKSI+U3RyaW5nPC9hPjwvc3Ryb25nPihjaGFyW10mbmJzcDt2YWx1ZSk8L2NvZGU+CisgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImJsb2NrIj5BbGxvY2F0ZXMgYSBuZXcgPGNvZGU+U3RyaW5nPC9jb2RlPiBzbyB0aGF0IGl0IHJlcHJlc2VudHMgdGhlIHNlcXVlbmNlIG9mCisgICAgICAgICAgICAgICAgICAgICAgICBjaGFyYWN0ZXJzIGN1cnJlbnRseSBjb250YWluZWQgaW4gdGhlIGNoYXJhY3RlciBhcnJheSBhcmd1bWVudC48L2Rpdj4KKyAgICAgICAgICAgICAgICA8L3RkPgorICAgICAgICAgICAgPC90cj4KKyAgICAgICAgICAgIDx0ciBjbGFzcz0iYWx0Q29sb3IiPgorICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0iY29sT25lIj48Y29kZT48c3Ryb25nPjxhIGhyZWY9Ii4uLy4uL2phdmEvbGFuZy9TdHJpbmcuaHRtbCNTdHJpbmcoY2hhcltdLCBpbnQsIGludCkiPlN0cmluZzwvYT48L3N0cm9uZz4oY2hhcltdJm5ic3A7dmFsdWUsCisgICAgICAgICAgICAgICAgICAgIGludCZuYnNwO29mZnNldCwKKyAgICAgICAgICAgICAgICAgICAgaW50Jm5ic3A7Y291bnQpPC9jb2RlPgorICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJibG9jayI+QWxsb2NhdGVzIGEgbmV3IDxjb2RlPlN0cmluZzwvY29kZT4gdGhhdCBjb250YWlucyBjaGFyYWN0ZXJzIGZyb20gYSBzdWJhcnJheQorICAgICAgICAgICAgICAgICAgICAgICAgb2YgdGhlIGNoYXJhY3RlciBhcnJheSBhcmd1bWVudC48L2Rpdj4KKyAgICAgICAgICAgICAgICA8L3RkPgorICAgICAgICAgICAgPC90cj4KKyAgICAgICAgICAgIDx0ciBjbGFzcz0icm93Q29sb3IiPgorICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0iY29sT25lIj48Y29kZT48c3Ryb25nPjxhIGhyZWY9Ii4uLy4uL2phdmEvbGFuZy9TdHJpbmcuaHRtbCNTdHJpbmcoaW50W10sIGludCwgaW50KSI+U3RyaW5nPC9hPjwvc3Ryb25nPihpbnRbXSZuYnNwO2NvZGVQb2ludHMsCisgICAgICAgICAgICAgICAgICAgIGludCZuYnNwO29mZnNldCwKKyAgICAgICAgICAgICAgICAgICAgaW50Jm5ic3A7Y291bnQpPC9jb2RlPgorICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJibG9jayI+QWxsb2NhdGVzIGEgbmV3IDxjb2RlPlN0cmluZzwvY29kZT4gdGhhdCBjb250YWlucyBjaGFyYWN0ZXJzIGZyb20gYSBzdWJhcnJheQorICAgICAgICAgICAgICAgICAgICAgICAgb2YgdGhlIDxhIGhyZWY9IkNoYXJhY3Rlci5odG1sI3VuaWNvZGUiPlVuaWNvZGUgY29kZSBwb2ludDwvYT4gYXJyYXkKKyAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3VtZW50LjwvZGl2PgorICAgICAgICAgICAgICAgIDwvdGQ+CisgICAgICAgICAgICA8L3RyPgorICAgICAgICAgICAgPHRyIGNsYXNzPSJhbHRDb2xvciI+CisgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJjb2xPbmUiPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iLi4vLi4vamF2YS9sYW5nL1N0cmluZy5odG1sI1N0cmluZyhqYXZhLmxhbmcuU3RyaW5nKSI+U3RyaW5nPC9hPjwvc3Ryb25nPig8YSBocmVmPSIuLi8uLi9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBqYXZhLmxhbmciPlN0cmluZzwvYT4mbmJzcDtvcmlnaW5hbCk8L2NvZGU+CisgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImJsb2NrIj5Jbml0aWFsaXplcyBhIG5ld2x5IGNyZWF0ZWQgPGNvZGU+U3RyaW5nPC9jb2RlPiBvYmplY3Qgc28gdGhhdCBpdCByZXByZXNlbnRzCisgICAgICAgICAgICAgICAgICAgICAgICB0aGUgc2FtZSBzZXF1ZW5jZSBvZiBjaGFyYWN0ZXJzIGFzIHRoZSBhcmd1bWVudDsgaW4gb3RoZXIgd29yZHMsIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgbmV3bHkgY3JlYXRlZCBzdHJpbmcgaXMgYSBjb3B5IG9mIHRoZSBhcmd1bWVudCBzdHJpbmcuPC9kaXY+CisgICAgICAgICAgICAgICAgPC90ZD4KKyAgICAgICAgICAgIDwvdHI+CisgICAgICAgICAgICA8dHIgY2xhc3M9InJvd0NvbG9yIj4KKyAgICAgICAgICAgICAgICA8dGQgY2xhc3M9ImNvbE9uZSI+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIuLi8uLi9qYXZhL2xhbmcvU3RyaW5nLmh0bWwjU3RyaW5nKGphdmEubGFuZy5TdHJpbmdCdWZmZXIpIj5TdHJpbmc8L2E+PC9zdHJvbmc+KDxhIGhyZWY9Ii4uLy4uL2phdmEvbGFuZy9TdHJpbmdCdWZmZXIuaHRtbCIgdGl0bGU9ImNsYXNzIGluIGphdmEubGFuZyI+U3RyaW5nQnVmZmVyPC9hPiZuYnNwO2J1ZmZlcik8L2NvZGU+CisgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImJsb2NrIj5BbGxvY2F0ZXMgYSBuZXcgc3RyaW5nIHRoYXQgY29udGFpbnMgdGhlIHNlcXVlbmNlIG9mIGNoYXJhY3RlcnMKKyAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRseSBjb250YWluZWQgaW4gdGhlIHN0cmluZyBidWZmZXIgYXJndW1lbnQuPC9kaXY+CisgICAgICAgICAgICAgICAgPC90ZD4KKyAgICAgICAgICAgIDwvdHI+CisgICAgICAgICAgICA8dHIgY2xhc3M9ImFsdENvbG9yIj4KKyAgICAgICAgICAgICAgICA8dGQgY2xhc3M9ImNvbE9uZSI+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIuLi8uLi9qYXZhL2xhbmcvU3RyaW5nLmh0bWwjU3RyaW5nKGphdmEubGFuZy5TdHJpbmdCdWlsZGVyKSI+U3RyaW5nPC9hPjwvc3Ryb25nPig8YSBocmVmPSIuLi8uLi9qYXZhL2xhbmcvU3RyaW5nQnVpbGRlci5odG1sIiB0aXRsZT0iY2xhc3MgaW4gamF2YS5sYW5nIj5TdHJpbmdCdWlsZGVyPC9hPiZuYnNwO2J1aWxkZXIpPC9jb2RlPgorICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJibG9jayI+QWxsb2NhdGVzIGEgbmV3IHN0cmluZyB0aGF0IGNvbnRhaW5zIHRoZSBzZXF1ZW5jZSBvZiBjaGFyYWN0ZXJzCisgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50bHkgY29udGFpbmVkIGluIHRoZSBzdHJpbmcgYnVpbGRlciBhcmd1bWVudC48L2Rpdj4KKyAgICAgICAgICAgICAgICA8L3RkPgorICAgICAgICAgICAgPC90cj4KKyAgICAgICAgPC90YWJsZT4KKyAgICA8L2xpPgorPC91bD4KKzwhLS0gPT09PT09PT09PSBNRVRIT0QgU1VNTUFSWSA9PT09PT09PT09PSAtLT4KKzx1bCBjbGFzcz0iYmxvY2tMaXN0Ij4KKzxsaSBjbGFzcz0iYmxvY2tMaXN0Ij48YSBuYW1lPSJtZXRob2Rfc3VtbWFyeSI+CisgICAgPCEtLSAgIC0tPgorPC9hPgorPGgzPk1ldGhvZCBTdW1tYXJ5PC9oMz4KKzx0YWJsZSBjbGFzcz0ib3ZlcnZpZXdTdW1tYXJ5IiBib3JkZXI9IjAiIGNlbGxwYWRkaW5nPSIzIiBjZWxsc3BhY2luZz0iMCIgc3VtbWFyeT0iTWV0aG9kIFN1bW1hcnkgdGFibGUsIGxpc3RpbmcgbWV0aG9kcywgYW5kIGFuIGV4cGxhbmF0aW9uIj4KKzxjYXB0aW9uPjxzcGFuPk1ldGhvZHM8L3NwYW4+PHNwYW4gY2xhc3M9InRhYkVuZCI+Jm5ic3A7PC9zcGFuPjwvY2FwdGlvbj4KKzx0cj4KKyAgICA8dGggY2xhc3M9ImNvbEZpcnN0IiBzY29wZT0iY29sIj5Nb2RpZmllciBhbmQgVHlwZTwvdGg+CisgICAgPHRoIGNsYXNzPSJjb2xMYXN0IiBzY29wZT0iY29sIj5NZXRob2QgYW5kIERlc2NyaXB0aW9uPC90aD4KKzwvdHI+Cis8dHIgY2xhc3M9ImFsdENvbG9yIj4KKyAgICA8dGQgY2xhc3M9ImNvbEZpcnN0Ij48Y29kZT5jaGFyPC9jb2RlPjwvdGQ+CisgICAgPHRkIGNsYXNzPSJjb2xMYXN0Ij48Y29kZT48c3Ryb25nPjxhIGhyZWY9Ii4uLy4uL2phdmEvbGFuZy9TdHJpbmcuaHRtbCNjaGFyQXQoaW50KSI+Y2hhckF0PC9hPjwvc3Ryb25nPihpbnQmbmJzcDtpbmRleCk8L2NvZGU+CisgICAgICAgIDxkaXYgY2xhc3M9ImJsb2NrIj5SZXR1cm5zIHRoZSA8Y29kZT5jaGFyPC9jb2RlPiB2YWx1ZSBhdCB0aGUKKyAgICAgICAgICAgIHNwZWNpZmllZCBpbmRleC48L2Rpdj4KKyAgICA8L3RkPgorPC90cj4KKzx0ciBjbGFzcz0icm93Q29sb3IiPgorICAgIDx0ZCBjbGFzcz0iY29sRmlyc3QiPjxjb2RlPmludDwvY29kZT48L3RkPgorICAgIDx0ZCBjbGFzcz0iY29sTGFzdCI+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIuLi8uLi9qYXZhL2xhbmcvU3RyaW5nLmh0bWwjY29kZVBvaW50QXQoaW50KSI+Y29kZVBvaW50QXQ8L2E+PC9zdHJvbmc+KGludCZuYnNwO2luZGV4KTwvY29kZT4KKyAgICAgICAgPGRpdiBjbGFzcz0iYmxvY2siPlJldHVybnMgdGhlIGNoYXJhY3RlciAoVW5pY29kZSBjb2RlIHBvaW50KSBhdCB0aGUgc3BlY2lmaWVkCisgICAgICAgICAgICBpbmRleC48L2Rpdj4KKyAgICA8L3RkPgorPC90cj4KKzx0ciBjbGFzcz0iYWx0Q29sb3IiPgorICAgIDx0ZCBjbGFzcz0iY29sRmlyc3QiPjxjb2RlPmludDwvY29kZT48L3RkPgorICAgIDx0ZCBjbGFzcz0iY29sTGFzdCI+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIuLi8uLi9qYXZhL2xhbmcvU3RyaW5nLmh0bWwjY29kZVBvaW50QmVmb3JlKGludCkiPmNvZGVQb2ludEJlZm9yZTwvYT48L3N0cm9uZz4oaW50Jm5ic3A7aW5kZXgpPC9jb2RlPgorICAgICAgICA8ZGl2IGNsYXNzPSJibG9jayI+UmV0dXJucyB0aGUgY2hhcmFjdGVyIChVbmljb2RlIGNvZGUgcG9pbnQpIGJlZm9yZSB0aGUgc3BlY2lmaWVkCisgICAgICAgICAgICBpbmRleC48L2Rpdj4KKyAgICA8L3RkPgorPC90cj4KKzx0ciBjbGFzcz0icm93Q29sb3IiPgorICAgIDx0ZCBjbGFzcz0iY29sRmlyc3QiPjxjb2RlPmludDwvY29kZT48L3RkPgorICAgIDx0ZCBjbGFzcz0iY29sTGFzdCI+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIuLi8uLi9qYXZhL2xhbmcvU3RyaW5nLmh0bWwjY29kZVBvaW50Q291bnQoaW50LCBpbnQpIj5jb2RlUG9pbnRDb3VudDwvYT48L3N0cm9uZz4oaW50Jm5ic3A7YmVnaW5JbmRleCwKKyAgICAgICAgaW50Jm5ic3A7ZW5kSW5kZXgpPC9jb2RlPgorICAgICAgICA8ZGl2IGNsYXNzPSJibG9jayI+UmV0dXJucyB0aGUgbnVtYmVyIG9mIFVuaWNvZGUgY29kZSBwb2ludHMgaW4gdGhlIHNwZWNpZmllZCB0ZXh0CisgICAgICAgICAgICByYW5nZSBvZiB0aGlzIDxjb2RlPlN0cmluZzwvY29kZT4uPC9kaXY+CisgICAgPC90ZD4KKzwvdHI+Cis8dHIgY2xhc3M9ImFsdENvbG9yIj4KKyAgICA8dGQgY2xhc3M9ImNvbEZpcnN0Ij48Y29kZT5pbnQ8L2NvZGU+PC90ZD4KKyAgICA8dGQgY2xhc3M9ImNvbExhc3QiPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iLi4vLi4vamF2YS9sYW5nL1N0cmluZy5odG1sI2NvbXBhcmVUbyhqYXZhLmxhbmcuU3RyaW5nKSI+Y29tcGFyZVRvPC9hPjwvc3Ryb25nPig8YSBocmVmPSIuLi8uLi9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBqYXZhLmxhbmciPlN0cmluZzwvYT4mbmJzcDthbm90aGVyU3RyaW5nKTwvY29kZT4KKyAgICAgICAgPGRpdiBjbGFzcz0iYmxvY2siPkNvbXBhcmVzIHR3byBzdHJpbmdzIGxleGljb2dyYXBoaWNhbGx5LjwvZGl2PgorICAgIDwvdGQ+Cis8L3RyPgorPHRyIGNsYXNzPSJyb3dDb2xvciI+CisgICAgPHRkIGNsYXNzPSJjb2xGaXJzdCI+PGNvZGU+aW50PC9jb2RlPjwvdGQ+CisgICAgPHRkIGNsYXNzPSJjb2xMYXN0Ij48Y29kZT48c3Ryb25nPjxhIGhyZWY9Ii4uLy4uL2phdmEvbGFuZy9TdHJpbmcuaHRtbCNjb21wYXJlVG9JZ25vcmVDYXNlKGphdmEubGFuZy5TdHJpbmcpIj5jb21wYXJlVG9JZ25vcmVDYXNlPC9hPjwvc3Ryb25nPig8YSBocmVmPSIuLi8uLi9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBqYXZhLmxhbmciPlN0cmluZzwvYT4mbmJzcDtzdHIpPC9jb2RlPgorICAgICAgICA8ZGl2IGNsYXNzPSJibG9jayI+Q29tcGFyZXMgdHdvIHN0cmluZ3MgbGV4aWNvZ3JhcGhpY2FsbHksIGlnbm9yaW5nIGNhc2UKKyAgICAgICAgICAgIGRpZmZlcmVuY2VzLjwvZGl2PgorICAgIDwvdGQ+Cis8L3RyPgorPHRyIGNsYXNzPSJhbHRDb2xvciI+CisgICAgPHRkIGNsYXNzPSJjb2xGaXJzdCI+PGNvZGU+PGEgaHJlZj0iLi4vLi4vamF2YS9sYW5nL1N0cmluZy5odG1sIiB0aXRsZT0iY2xhc3MgaW4gamF2YS5sYW5nIj5TdHJpbmc8L2E+PC9jb2RlPjwvdGQ+CisgICAgPHRkIGNsYXNzPSJjb2xMYXN0Ij48Y29kZT48c3Ryb25nPjxhIGhyZWY9Ii4uLy4uL2phdmEvbGFuZy9TdHJpbmcuaHRtbCNjb25jYXQoamF2YS5sYW5nLlN0cmluZykiPmNvbmNhdDwvYT48L3N0cm9uZz4oPGEgaHJlZj0iLi4vLi4vamF2YS9sYW5nL1N0cmluZy5odG1sIiB0aXRsZT0iY2xhc3MgaW4gamF2YS5sYW5nIj5TdHJpbmc8L2E+Jm5ic3A7c3RyKTwvY29kZT4KKyAgICAgICAgPGRpdiBjbGFzcz0iYmxvY2siPkNvbmNhdGVuYXRlcyB0aGUgc3BlY2lmaWVkIHN0cmluZyB0byB0aGUgZW5kIG9mIHRoaXMgc3RyaW5nLjwvZGl2PgorICAgIDwvdGQ+Cis8L3RyPgorPHRyIGNsYXNzPSJyb3dDb2xvciI+CisgICAgPHRkIGNsYXNzPSJjb2xGaXJzdCI+PGNvZGU+Ym9vbGVhbjwvY29kZT48L3RkPgorICAgIDx0ZCBjbGFzcz0iY29sTGFzdCI+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIuLi8uLi9qYXZhL2xhbmcvU3RyaW5nLmh0bWwjY29udGFpbnMoamF2YS5sYW5nLkNoYXJTZXF1ZW5jZSkiPmNvbnRhaW5zPC9hPjwvc3Ryb25nPig8YSBocmVmPSIuLi8uLi9qYXZhL2xhbmcvQ2hhclNlcXVlbmNlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gamF2YS5sYW5nIj5DaGFyU2VxdWVuY2U8L2E+Jm5ic3A7cyk8L2NvZGU+CisgICAgICAgIDxkaXYgY2xhc3M9ImJsb2NrIj5SZXR1cm5zIHRydWUgaWYgYW5kIG9ubHkgaWYgdGhpcyBzdHJpbmcgY29udGFpbnMgdGhlIHNwZWNpZmllZAorICAgICAgICAgICAgc2VxdWVuY2Ugb2YgY2hhciB2YWx1ZXMuPC9kaXY+CisgICAgPC90ZD4KKzwvdHI+Cis8dHIgY2xhc3M9ImFsdENvbG9yIj4KKyAgICA8dGQgY2xhc3M9ImNvbEZpcnN0Ij48Y29kZT5ib29sZWFuPC9jb2RlPjwvdGQ+CisgICAgPHRkIGNsYXNzPSJjb2xMYXN0Ij48Y29kZT48c3Ryb25nPjxhIGhyZWY9Ii4uLy4uL2phdmEvbGFuZy9TdHJpbmcuaHRtbCNjb250ZW50RXF1YWxzKGphdmEubGFuZy5DaGFyU2VxdWVuY2UpIj5jb250ZW50RXF1YWxzPC9hPjwvc3Ryb25nPig8YSBocmVmPSIuLi8uLi9qYXZhL2xhbmcvQ2hhclNlcXVlbmNlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gamF2YS5sYW5nIj5DaGFyU2VxdWVuY2U8L2E+Jm5ic3A7Y3MpPC9jb2RlPgorICAgICAgICA8ZGl2IGNsYXNzPSJibG9jayI+Q29tcGFyZXMgdGhpcyBzdHJpbmcgdG8gdGhlIHNwZWNpZmllZCA8Y29kZT5DaGFyU2VxdWVuY2U8L2NvZGU+LjwvZGl2PgorICAgIDwvdGQ+Cis8L3RyPgorPHRyIGNsYXNzPSJyb3dDb2xvciI+CisgICAgPHRkIGNsYXNzPSJjb2xGaXJzdCI+PGNvZGU+Ym9vbGVhbjwvY29kZT48L3RkPgorICAgIDx0ZCBjbGFzcz0iY29sTGFzdCI+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIuLi8uLi9qYXZhL2xhbmcvU3RyaW5nLmh0bWwjY29udGVudEVxdWFscyhqYXZhLmxhbmcuU3RyaW5nQnVmZmVyKSI+Y29udGVudEVxdWFsczwvYT48L3N0cm9uZz4oPGEgaHJlZj0iLi4vLi4vamF2YS9sYW5nL1N0cmluZ0J1ZmZlci5odG1sIiB0aXRsZT0iY2xhc3MgaW4gamF2YS5sYW5nIj5TdHJpbmdCdWZmZXI8L2E+Jm5ic3A7c2IpPC9jb2RlPgorICAgICAgICA8ZGl2IGNsYXNzPSJibG9jayI+Q29tcGFyZXMgdGhpcyBzdHJpbmcgdG8gdGhlIHNwZWNpZmllZCA8Y29kZT5TdHJpbmdCdWZmZXI8L2NvZGU+LjwvZGl2PgorICAgIDwvdGQ+Cis8L3RyPgorPHRyIGNsYXNzPSJhbHRDb2xvciI+CisgICAgPHRkIGNsYXNzPSJjb2xGaXJzdCI+PGNvZGU+c3RhdGljIDxhIGhyZWY9Ii4uLy4uL2phdmEvbGFuZy9TdHJpbmcuaHRtbCIgdGl0bGU9ImNsYXNzIGluIGphdmEubGFuZyI+U3RyaW5nPC9hPjwvY29kZT48L3RkPgorICAgIDx0ZCBjbGFzcz0iY29sTGFzdCI+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIuLi8uLi9qYXZhL2xhbmcvU3RyaW5nLmh0bWwjY29weVZhbHVlT2YoY2hhcltdKSI+Y29weVZhbHVlT2Y8L2E+PC9zdHJvbmc+KGNoYXJbXSZuYnNwO2RhdGEpPC9jb2RlPgorICAgICAgICA8ZGl2IGNsYXNzPSJibG9jayI+UmV0dXJucyBhIFN0cmluZyB0aGF0IHJlcHJlc2VudHMgdGhlIGNoYXJhY3RlciBzZXF1ZW5jZSBpbiB0aGUKKyAgICAgICAgICAgIGFycmF5IHNwZWNpZmllZC48L2Rpdj4KKyAgICA8L3RkPgorPC90cj4KKzx0ciBjbGFzcz0icm93Q29sb3IiPgorICAgIDx0ZCBjbGFzcz0iY29sRmlyc3QiPjxjb2RlPnN0YXRpYyA8YSBocmVmPSIuLi8uLi9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBqYXZhLmxhbmciPlN0cmluZzwvYT48L2NvZGU+PC90ZD4KKyAgICA8dGQgY2xhc3M9ImNvbExhc3QiPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iLi4vLi4vamF2YS9sYW5nL1N0cmluZy5odG1sI2NvcHlWYWx1ZU9mKGNoYXJbXSwgaW50LCBpbnQpIj5jb3B5VmFsdWVPZjwvYT48L3N0cm9uZz4oY2hhcltdJm5ic3A7ZGF0YSwKKyAgICAgICAgaW50Jm5ic3A7b2Zmc2V0LAorICAgICAgICBpbnQmbmJzcDtjb3VudCk8L2NvZGU+CisgICAgICAgIDxkaXYgY2xhc3M9ImJsb2NrIj5SZXR1cm5zIGEgU3RyaW5nIHRoYXQgcmVwcmVzZW50cyB0aGUgY2hhcmFjdGVyIHNlcXVlbmNlIGluIHRoZQorICAgICAgICAgICAgYXJyYXkgc3BlY2lmaWVkLjwvZGl2PgorICAgIDwvdGQ+Cis8L3RyPgorPHRyIGNsYXNzPSJhbHRDb2xvciI+CisgICAgPHRkIGNsYXNzPSJjb2xGaXJzdCI+PGNvZGU+Ym9vbGVhbjwvY29kZT48L3RkPgorICAgIDx0ZCBjbGFzcz0iY29sTGFzdCI+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIuLi8uLi9qYXZhL2xhbmcvU3RyaW5nLmh0bWwjZW5kc1dpdGgoamF2YS5sYW5nLlN0cmluZykiPmVuZHNXaXRoPC9hPjwvc3Ryb25nPig8YSBocmVmPSIuLi8uLi9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBqYXZhLmxhbmciPlN0cmluZzwvYT4mbmJzcDtzdWZmaXgpPC9jb2RlPgorICAgICAgICA8ZGl2IGNsYXNzPSJibG9jayI+VGVzdHMgaWYgdGhpcyBzdHJpbmcgZW5kcyB3aXRoIHRoZSBzcGVjaWZpZWQgc3VmZml4LjwvZGl2PgorICAgIDwvdGQ+Cis8L3RyPgorPHRyIGNsYXNzPSJyb3dDb2xvciI+CisgICAgPHRkIGNsYXNzPSJjb2xGaXJzdCI+PGNvZGU+Ym9vbGVhbjwvY29kZT48L3RkPgorICAgIDx0ZCBjbGFzcz0iY29sTGFzdCI+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIuLi8uLi9qYXZhL2xhbmcvU3RyaW5nLmh0bWwjZXF1YWxzKGphdmEubGFuZy5PYmplY3QpIj5lcXVhbHM8L2E+PC9zdHJvbmc+KDxhIGhyZWY9Ii4uLy4uL2phdmEvbGFuZy9PYmplY3QuaHRtbCIgdGl0bGU9ImNsYXNzIGluIGphdmEubGFuZyI+T2JqZWN0PC9hPiZuYnNwO2FuT2JqZWN0KTwvY29kZT4KKyAgICAgICAgPGRpdiBjbGFzcz0iYmxvY2siPkNvbXBhcmVzIHRoaXMgc3RyaW5nIHRvIHRoZSBzcGVjaWZpZWQgb2JqZWN0LjwvZGl2PgorICAgIDwvdGQ+Cis8L3RyPgorPHRyIGNsYXNzPSJhbHRDb2xvciI+CisgICAgPHRkIGNsYXNzPSJjb2xGaXJzdCI+PGNvZGU+Ym9vbGVhbjwvY29kZT48L3RkPgorICAgIDx0ZCBjbGFzcz0iY29sTGFzdCI+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIuLi8uLi9qYXZhL2xhbmcvU3RyaW5nLmh0bWwjZXF1YWxzSWdub3JlQ2FzZShqYXZhLmxhbmcuU3RyaW5nKSI+ZXF1YWxzSWdub3JlQ2FzZTwvYT48L3N0cm9uZz4oPGEgaHJlZj0iLi4vLi4vamF2YS9sYW5nL1N0cmluZy5odG1sIiB0aXRsZT0iY2xhc3MgaW4gamF2YS5sYW5nIj5TdHJpbmc8L2E+Jm5ic3A7YW5vdGhlclN0cmluZyk8L2NvZGU+CisgICAgICAgIDxkaXYgY2xhc3M9ImJsb2NrIj5Db21wYXJlcyB0aGlzIDxjb2RlPlN0cmluZzwvY29kZT4gdG8gYW5vdGhlciA8Y29kZT5TdHJpbmc8L2NvZGU+LCBpZ25vcmluZyBjYXNlCisgICAgICAgICAgICBjb25zaWRlcmF0aW9ucy48L2Rpdj4KKyAgICA8L3RkPgorPC90cj4KKzx0ciBjbGFzcz0icm93Q29sb3IiPgorICAgIDx0ZCBjbGFzcz0iY29sRmlyc3QiPjxjb2RlPnN0YXRpYyA8YSBocmVmPSIuLi8uLi9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBqYXZhLmxhbmciPlN0cmluZzwvYT48L2NvZGU+PC90ZD4KKyAgICA8dGQgY2xhc3M9ImNvbExhc3QiPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iLi4vLi4vamF2YS9sYW5nL1N0cmluZy5odG1sI2Zvcm1hdChqYXZhLnV0aWwuTG9jYWxlLCBqYXZhLmxhbmcuU3RyaW5nLCBqYXZhLmxhbmcuT2JqZWN0Li4uKSI+Zm9ybWF0PC9hPjwvc3Ryb25nPig8YSBocmVmPSIuLi8uLi9qYXZhL3V0aWwvTG9jYWxlLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBqYXZhLnV0aWwiPkxvY2FsZTwvYT4mbmJzcDtsLAorICAgICAgICA8YSBocmVmPSIuLi8uLi9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBqYXZhLmxhbmciPlN0cmluZzwvYT4mbmJzcDtmb3JtYXQsCisgICAgICAgIDxhIGhyZWY9Ii4uLy4uL2phdmEvbGFuZy9PYmplY3QuaHRtbCIgdGl0bGU9ImNsYXNzIGluIGphdmEubGFuZyI+T2JqZWN0PC9hPi4uLiZuYnNwO2FyZ3MpPC9jb2RlPgorICAgICAgICA8ZGl2IGNsYXNzPSJibG9jayI+UmV0dXJucyBhIGZvcm1hdHRlZCBzdHJpbmcgdXNpbmcgdGhlIHNwZWNpZmllZCBsb2NhbGUsIGZvcm1hdCBzdHJpbmcsCisgICAgICAgICAgICBhbmQgYXJndW1lbnRzLjwvZGl2PgorICAgIDwvdGQ+Cis8L3RyPgorPHRyIGNsYXNzPSJhbHRDb2xvciI+CisgICAgPHRkIGNsYXNzPSJjb2xGaXJzdCI+PGNvZGU+c3RhdGljIDxhIGhyZWY9Ii4uLy4uL2phdmEvbGFuZy9TdHJpbmcuaHRtbCIgdGl0bGU9ImNsYXNzIGluIGphdmEubGFuZyI+U3RyaW5nPC9hPjwvY29kZT48L3RkPgorICAgIDx0ZCBjbGFzcz0iY29sTGFzdCI+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIuLi8uLi9qYXZhL2xhbmcvU3RyaW5nLmh0bWwjZm9ybWF0KGphdmEubGFuZy5TdHJpbmcsIGphdmEubGFuZy5PYmplY3QuLi4pIj5mb3JtYXQ8L2E+PC9zdHJvbmc+KDxhIGhyZWY9Ii4uLy4uL2phdmEvbGFuZy9TdHJpbmcuaHRtbCIgdGl0bGU9ImNsYXNzIGluIGphdmEubGFuZyI+U3RyaW5nPC9hPiZuYnNwO2Zvcm1hdCwKKyAgICAgICAgPGEgaHJlZj0iLi4vLi4vamF2YS9sYW5nL09iamVjdC5odG1sIiB0aXRsZT0iY2xhc3MgaW4gamF2YS5sYW5nIj5PYmplY3Q8L2E+Li4uJm5ic3A7YXJncyk8L2NvZGU+CisgICAgICAgIDxkaXYgY2xhc3M9ImJsb2NrIj5SZXR1cm5zIGEgZm9ybWF0dGVkIHN0cmluZyB1c2luZyB0aGUgc3BlY2lmaWVkIGZvcm1hdCBzdHJpbmcgYW5kCisgICAgICAgICAgICBhcmd1bWVudHMuPC9kaXY+CisgICAgPC90ZD4KKzwvdHI+Cis8dHIgY2xhc3M9InJvd0NvbG9yIj4KKyAgICA8dGQgY2xhc3M9ImNvbEZpcnN0Ij48Y29kZT5ieXRlW108L2NvZGU+PC90ZD4KKyAgICA8dGQgY2xhc3M9ImNvbExhc3QiPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iLi4vLi4vamF2YS9sYW5nL1N0cmluZy5odG1sI2dldEJ5dGVzKCkiPmdldEJ5dGVzPC9hPjwvc3Ryb25nPigpPC9jb2RlPgorICAgICAgICA8ZGl2IGNsYXNzPSJibG9jayI+RW5jb2RlcyB0aGlzIDxjb2RlPlN0cmluZzwvY29kZT4gaW50byBhIHNlcXVlbmNlIG9mIGJ5dGVzIHVzaW5nIHRoZQorICAgICAgICAgICAgcGxhdGZvcm0ncyBkZWZhdWx0IGNoYXJzZXQsIHN0b3JpbmcgdGhlIHJlc3VsdCBpbnRvIGEgbmV3IGJ5dGUgYXJyYXkuPC9kaXY+CisgICAgPC90ZD4KKzwvdHI+Cis8dHIgY2xhc3M9ImFsdENvbG9yIj4KKyAgICA8dGQgY2xhc3M9ImNvbEZpcnN0Ij48Y29kZT5ieXRlW108L2NvZGU+PC90ZD4KKyAgICA8dGQgY2xhc3M9ImNvbExhc3QiPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iLi4vLi4vamF2YS9sYW5nL1N0cmluZy5odG1sI2dldEJ5dGVzKGphdmEubmlvLmNoYXJzZXQuQ2hhcnNldCkiPmdldEJ5dGVzPC9hPjwvc3Ryb25nPig8YSBocmVmPSIuLi8uLi9qYXZhL25pby9jaGFyc2V0L0NoYXJzZXQuaHRtbCIgdGl0bGU9ImNsYXNzIGluIGphdmEubmlvLmNoYXJzZXQiPkNoYXJzZXQ8L2E+Jm5ic3A7Y2hhcnNldCk8L2NvZGU+CisgICAgICAgIDxkaXYgY2xhc3M9ImJsb2NrIj5FbmNvZGVzIHRoaXMgPGNvZGU+U3RyaW5nPC9jb2RlPiBpbnRvIGEgc2VxdWVuY2Ugb2YgYnl0ZXMgdXNpbmcgdGhlIGdpdmVuCisgICAgICAgICAgICA8YSBocmVmPSIuLi8uLi9qYXZhL25pby9jaGFyc2V0L0NoYXJzZXQuaHRtbCIgdGl0bGU9ImNsYXNzIGluIGphdmEubmlvLmNoYXJzZXQiPmNoYXJzZXQ8L2E+LCBzdG9yaW5nIHRoZSByZXN1bHQgaW50byBhCisgICAgICAgICAgICBuZXcgYnl0ZSBhcnJheS48L2Rpdj4KKyAgICA8L3RkPgorPC90cj4KKzx0ciBjbGFzcz0icm93Q29sb3IiPgorICAgIDx0ZCBjbGFzcz0iY29sRmlyc3QiPjxjb2RlPnZvaWQ8L2NvZGU+PC90ZD4KKyAgICA8dGQgY2xhc3M9ImNvbExhc3QiPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iLi4vLi4vamF2YS9sYW5nL1N0cmluZy5odG1sI2dldEJ5dGVzKGludCwgaW50LCBieXRlW10sIGludCkiPmdldEJ5dGVzPC9hPjwvc3Ryb25nPihpbnQmbmJzcDtzcmNCZWdpbiwKKyAgICAgICAgaW50Jm5ic3A7c3JjRW5kLAorICAgICAgICBieXRlW10mbmJzcDtkc3QsCisgICAgICAgIGludCZuYnNwO2RzdEJlZ2luKTwvY29kZT4KKyAgICAgICAgPGRpdiBjbGFzcz0iYmxvY2siPjxzdHJvbmc+RGVwcmVjYXRlZC48L3N0cm9uZz4mbmJzcDsKKyAgICAgICAgICAgIDxkaXYgY2xhc3M9ImJsb2NrIj48aT5UaGlzIG1ldGhvZCBkb2VzIG5vdCBwcm9wZXJseSBjb252ZXJ0IGNoYXJhY3RlcnMgaW50bworICAgICAgICAgICAgICAgIGJ5dGVzLiAgQXMgb2YgSkRLJm5ic3A7MS4xLCB0aGUgcHJlZmVycmVkIHdheSB0byBkbyB0aGlzIGlzIHZpYSB0aGUKKyAgICAgICAgICAgICAgICA8YSBocmVmPSIuLi8uLi9qYXZhL2xhbmcvU3RyaW5nLmh0bWwjZ2V0Qnl0ZXMoKSI+PGNvZGU+Z2V0Qnl0ZXMoKTwvY29kZT48L2E+IG1ldGhvZCwgd2hpY2ggdXNlcyB0aGUgcGxhdGZvcm0ncyBkZWZhdWx0IGNoYXJzZXQuPC9pPjwvZGl2PgorICAgICAgICA8L2Rpdj4KKyAgICA8L3RkPgorPC90cj4KKzx0ciBjbGFzcz0iYWx0Q29sb3IiPgorICAgIDx0ZCBjbGFzcz0iY29sRmlyc3QiPjxjb2RlPmJ5dGVbXTwvY29kZT48L3RkPgorICAgIDx0ZCBjbGFzcz0iY29sTGFzdCI+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIuLi8uLi9qYXZhL2xhbmcvU3RyaW5nLmh0bWwjZ2V0Qnl0ZXMoamF2YS5sYW5nLlN0cmluZykiPmdldEJ5dGVzPC9hPjwvc3Ryb25nPig8YSBocmVmPSIuLi8uLi9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBqYXZhLmxhbmciPlN0cmluZzwvYT4mbmJzcDtjaGFyc2V0TmFtZSk8L2NvZGU+CisgICAgICAgIDxkaXYgY2xhc3M9ImJsb2NrIj5FbmNvZGVzIHRoaXMgPGNvZGU+U3RyaW5nPC9jb2RlPiBpbnRvIGEgc2VxdWVuY2Ugb2YgYnl0ZXMgdXNpbmcgdGhlIG5hbWVkCisgICAgICAgICAgICBjaGFyc2V0LCBzdG9yaW5nIHRoZSByZXN1bHQgaW50byBhIG5ldyBieXRlIGFycmF5LjwvZGl2PgorICAgIDwvdGQ+Cis8L3RyPgorPHRyIGNsYXNzPSJyb3dDb2xvciI+CisgICAgPHRkIGNsYXNzPSJjb2xGaXJzdCI+PGNvZGU+dm9pZDwvY29kZT48L3RkPgorICAgIDx0ZCBjbGFzcz0iY29sTGFzdCI+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIuLi8uLi9qYXZhL2xhbmcvU3RyaW5nLmh0bWwjZ2V0Q2hhcnMoaW50LCBpbnQsIGNoYXJbXSwgaW50KSI+Z2V0Q2hhcnM8L2E+PC9zdHJvbmc+KGludCZuYnNwO3NyY0JlZ2luLAorICAgICAgICBpbnQmbmJzcDtzcmNFbmQsCisgICAgICAgIGNoYXJbXSZuYnNwO2RzdCwKKyAgICAgICAgaW50Jm5ic3A7ZHN0QmVnaW4pPC9jb2RlPgorICAgICAgICA8ZGl2IGNsYXNzPSJibG9jayI+Q29waWVzIGNoYXJhY3RlcnMgZnJvbSB0aGlzIHN0cmluZyBpbnRvIHRoZSBkZXN0aW5hdGlvbiBjaGFyYWN0ZXIKKyAgICAgICAgICAgIGFycmF5LjwvZGl2PgorICAgIDwvdGQ+Cis8L3RyPgorPHRyIGNsYXNzPSJhbHRDb2xvciI+CisgICAgPHRkIGNsYXNzPSJjb2xGaXJzdCI+PGNvZGU+aW50PC9jb2RlPjwvdGQ+CisgICAgPHRkIGNsYXNzPSJjb2xMYXN0Ij48Y29kZT48c3Ryb25nPjxhIGhyZWY9Ii4uLy4uL2phdmEvbGFuZy9TdHJpbmcuaHRtbCNoYXNoQ29kZSgpIj5oYXNoQ29kZTwvYT48L3N0cm9uZz4oKTwvY29kZT4KKyAgICAgICAgPGRpdiBjbGFzcz0iYmxvY2siPlJldHVybnMgYSBoYXNoIGNvZGUgZm9yIHRoaXMgc3RyaW5nLjwvZGl2PgorICAgIDwvdGQ+Cis8L3RyPgorPHRyIGNsYXNzPSJyb3dDb2xvciI+CisgICAgPHRkIGNsYXNzPSJjb2xGaXJzdCI+PGNvZGU+aW50PC9jb2RlPjwvdGQ+CisgICAgPHRkIGNsYXNzPSJjb2xMYXN0Ij48Y29kZT48c3Ryb25nPjxhIGhyZWY9Ii4uLy4uL2phdmEvbGFuZy9TdHJpbmcuaHRtbCNpbmRleE9mKGludCkiPmluZGV4T2Y8L2E+PC9zdHJvbmc+KGludCZuYnNwO2NoKTwvY29kZT4KKyAgICAgICAgPGRpdiBjbGFzcz0iYmxvY2siPlJldHVybnMgdGhlIGluZGV4IHdpdGhpbiB0aGlzIHN0cmluZyBvZiB0aGUgZmlyc3Qgb2NjdXJyZW5jZSBvZgorICAgICAgICAgICAgdGhlIHNwZWNpZmllZCBjaGFyYWN0ZXIuPC9kaXY+CisgICAgPC90ZD4KKzwvdHI+Cis8dHIgY2xhc3M9ImFsdENvbG9yIj4KKyAgICA8dGQgY2xhc3M9ImNvbEZpcnN0Ij48Y29kZT5pbnQ8L2NvZGU+PC90ZD4KKyAgICA8dGQgY2xhc3M9ImNvbExhc3QiPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iLi4vLi4vamF2YS9sYW5nL1N0cmluZy5odG1sI2luZGV4T2YoaW50LCBpbnQpIj5pbmRleE9mPC9hPjwvc3Ryb25nPihpbnQmbmJzcDtjaCwKKyAgICAgICAgaW50Jm5ic3A7ZnJvbUluZGV4KTwvY29kZT4KKyAgICAgICAgPGRpdiBjbGFzcz0iYmxvY2siPlJldHVybnMgdGhlIGluZGV4IHdpdGhpbiB0aGlzIHN0cmluZyBvZiB0aGUgZmlyc3Qgb2NjdXJyZW5jZSBvZiB0aGUKKyAgICAgICAgICAgIHNwZWNpZmllZCBjaGFyYWN0ZXIsIHN0YXJ0aW5nIHRoZSBzZWFyY2ggYXQgdGhlIHNwZWNpZmllZCBpbmRleC48L2Rpdj4KKyAgICA8L3RkPgorPC90cj4KKzx0ciBjbGFzcz0icm93Q29sb3IiPgorICAgIDx0ZCBjbGFzcz0iY29sRmlyc3QiPjxjb2RlPmludDwvY29kZT48L3RkPgorICAgIDx0ZCBjbGFzcz0iY29sTGFzdCI+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIuLi8uLi9qYXZhL2xhbmcvU3RyaW5nLmh0bWwjaW5kZXhPZihqYXZhLmxhbmcuU3RyaW5nKSI+aW5kZXhPZjwvYT48L3N0cm9uZz4oPGEgaHJlZj0iLi4vLi4vamF2YS9sYW5nL1N0cmluZy5odG1sIiB0aXRsZT0iY2xhc3MgaW4gamF2YS5sYW5nIj5TdHJpbmc8L2E+Jm5ic3A7c3RyKTwvY29kZT4KKyAgICAgICAgPGRpdiBjbGFzcz0iYmxvY2siPlJldHVybnMgdGhlIGluZGV4IHdpdGhpbiB0aGlzIHN0cmluZyBvZiB0aGUgZmlyc3Qgb2NjdXJyZW5jZSBvZiB0aGUKKyAgICAgICAgICAgIHNwZWNpZmllZCBzdWJzdHJpbmcuPC9kaXY+CisgICAgPC90ZD4KKzwvdHI+Cis8dHIgY2xhc3M9ImFsdENvbG9yIj4KKyAgICA8dGQgY2xhc3M9ImNvbEZpcnN0Ij48Y29kZT5pbnQ8L2NvZGU+PC90ZD4KKyAgICA8dGQgY2xhc3M9ImNvbExhc3QiPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iLi4vLi4vamF2YS9sYW5nL1N0cmluZy5odG1sI2luZGV4T2YoamF2YS5sYW5nLlN0cmluZywgaW50KSI+aW5kZXhPZjwvYT48L3N0cm9uZz4oPGEgaHJlZj0iLi4vLi4vamF2YS9sYW5nL1N0cmluZy5odG1sIiB0aXRsZT0iY2xhc3MgaW4gamF2YS5sYW5nIj5TdHJpbmc8L2E+Jm5ic3A7c3RyLAorICAgICAgICBpbnQmbmJzcDtmcm9tSW5kZXgpPC9jb2RlPgorICAgICAgICA8ZGl2IGNsYXNzPSJibG9jayI+UmV0dXJucyB0aGUgaW5kZXggd2l0aGluIHRoaXMgc3RyaW5nIG9mIHRoZSBmaXJzdCBvY2N1cnJlbmNlIG9mIHRoZQorICAgICAgICAgICAgc3BlY2lmaWVkIHN1YnN0cmluZywgc3RhcnRpbmcgYXQgdGhlIHNwZWNpZmllZCBpbmRleC48L2Rpdj4KKyAgICA8L3RkPgorPC90cj4KKzx0ciBjbGFzcz0icm93Q29sb3IiPgorICAgIDx0ZCBjbGFzcz0iY29sRmlyc3QiPjxjb2RlPjxhIGhyZWY9Ii4uLy4uL2phdmEvbGFuZy9TdHJpbmcuaHRtbCIgdGl0bGU9ImNsYXNzIGluIGphdmEubGFuZyI+U3RyaW5nPC9hPjwvY29kZT48L3RkPgorICAgIDx0ZCBjbGFzcz0iY29sTGFzdCI+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIuLi8uLi9qYXZhL2xhbmcvU3RyaW5nLmh0bWwjaW50ZXJuKCkiPmludGVybjwvYT48L3N0cm9uZz4oKTwvY29kZT4KKyAgICAgICAgPGRpdiBjbGFzcz0iYmxvY2siPlJldHVybnMgYSBjYW5vbmljYWwgcmVwcmVzZW50YXRpb24gZm9yIHRoZSBzdHJpbmcgb2JqZWN0LjwvZGl2PgorICAgIDwvdGQ+Cis8L3RyPgorPHRyIGNsYXNzPSJhbHRDb2xvciI+CisgICAgPHRkIGNsYXNzPSJjb2xGaXJzdCI+PGNvZGU+Ym9vbGVhbjwvY29kZT48L3RkPgorICAgIDx0ZCBjbGFzcz0iY29sTGFzdCI+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIuLi8uLi9qYXZhL2xhbmcvU3RyaW5nLmh0bWwjaXNFbXB0eSgpIj5pc0VtcHR5PC9hPjwvc3Ryb25nPigpPC9jb2RlPgorICAgICAgICA8ZGl2IGNsYXNzPSJibG9jayI+UmV0dXJucyA8dHQ+dHJ1ZTwvdHQ+IGlmLCBhbmQgb25seSBpZiwgPGEgaHJlZj0iLi4vLi4vamF2YS9sYW5nL1N0cmluZy5odG1sI2xlbmd0aCgpIj48Y29kZT5sZW5ndGgoKTwvY29kZT48L2E+IGlzIDx0dD4wPC90dD4uPC9kaXY+CisgICAgPC90ZD4KKzwvdHI+Cis8dHIgY2xhc3M9InJvd0NvbG9yIj4KKyAgICA8dGQgY2xhc3M9ImNvbEZpcnN0Ij48Y29kZT5pbnQ8L2NvZGU+PC90ZD4KKyAgICA8dGQgY2xhc3M9ImNvbExhc3QiPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iLi4vLi4vamF2YS9sYW5nL1N0cmluZy5odG1sI2xhc3RJbmRleE9mKGludCkiPmxhc3RJbmRleE9mPC9hPjwvc3Ryb25nPihpbnQmbmJzcDtjaCk8L2NvZGU+CisgICAgICAgIDxkaXYgY2xhc3M9ImJsb2NrIj5SZXR1cm5zIHRoZSBpbmRleCB3aXRoaW4gdGhpcyBzdHJpbmcgb2YgdGhlIGxhc3Qgb2NjdXJyZW5jZSBvZgorICAgICAgICAgICAgdGhlIHNwZWNpZmllZCBjaGFyYWN0ZXIuPC9kaXY+CisgICAgPC90ZD4KKzwvdHI+Cis8dHIgY2xhc3M9ImFsdENvbG9yIj4KKyAgICA8dGQgY2xhc3M9ImNvbEZpcnN0Ij48Y29kZT5pbnQ8L2NvZGU+PC90ZD4KKyAgICA8dGQgY2xhc3M9ImNvbExhc3QiPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iLi4vLi4vamF2YS9sYW5nL1N0cmluZy5odG1sI2xhc3RJbmRleE9mKGludCwgaW50KSI+bGFzdEluZGV4T2Y8L2E+PC9zdHJvbmc+KGludCZuYnNwO2NoLAorICAgICAgICBpbnQmbmJzcDtmcm9tSW5kZXgpPC9jb2RlPgorICAgICAgICA8ZGl2IGNsYXNzPSJibG9jayI+UmV0dXJucyB0aGUgaW5kZXggd2l0aGluIHRoaXMgc3RyaW5nIG9mIHRoZSBsYXN0IG9jY3VycmVuY2Ugb2YKKyAgICAgICAgICAgIHRoZSBzcGVjaWZpZWQgY2hhcmFjdGVyLCBzZWFyY2hpbmcgYmFja3dhcmQgc3RhcnRpbmcgYXQgdGhlCisgICAgICAgICAgICBzcGVjaWZpZWQgaW5kZXguPC9kaXY+CisgICAgPC90ZD4KKzwvdHI+Cis8dHIgY2xhc3M9InJvd0NvbG9yIj4KKyAgICA8dGQgY2xhc3M9ImNvbEZpcnN0Ij48Y29kZT5pbnQ8L2NvZGU+PC90ZD4KKyAgICA8dGQgY2xhc3M9ImNvbExhc3QiPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iLi4vLi4vamF2YS9sYW5nL1N0cmluZy5odG1sI2xhc3RJbmRleE9mKGphdmEubGFuZy5TdHJpbmcpIj5sYXN0SW5kZXhPZjwvYT48L3N0cm9uZz4oPGEgaHJlZj0iLi4vLi4vamF2YS9sYW5nL1N0cmluZy5odG1sIiB0aXRsZT0iY2xhc3MgaW4gamF2YS5sYW5nIj5TdHJpbmc8L2E+Jm5ic3A7c3RyKTwvY29kZT4KKyAgICAgICAgPGRpdiBjbGFzcz0iYmxvY2siPlJldHVybnMgdGhlIGluZGV4IHdpdGhpbiB0aGlzIHN0cmluZyBvZiB0aGUgbGFzdCBvY2N1cnJlbmNlIG9mIHRoZQorICAgICAgICAgICAgc3BlY2lmaWVkIHN1YnN0cmluZy48L2Rpdj4KKyAgICA8L3RkPgorPC90cj4KKzx0ciBjbGFzcz0iYWx0Q29sb3IiPgorICAgIDx0ZCBjbGFzcz0iY29sRmlyc3QiPjxjb2RlPmludDwvY29kZT48L3RkPgorICAgIDx0ZCBjbGFzcz0iY29sTGFzdCI+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIuLi8uLi9qYXZhL2xhbmcvU3RyaW5nLmh0bWwjbGFzdEluZGV4T2YoamF2YS5sYW5nLlN0cmluZywgaW50KSI+bGFzdEluZGV4T2Y8L2E+PC9zdHJvbmc+KDxhIGhyZWY9Ii4uLy4uL2phdmEvbGFuZy9TdHJpbmcuaHRtbCIgdGl0bGU9ImNsYXNzIGluIGphdmEubGFuZyI+U3RyaW5nPC9hPiZuYnNwO3N0ciwKKyAgICAgICAgaW50Jm5ic3A7ZnJvbUluZGV4KTwvY29kZT4KKyAgICAgICAgPGRpdiBjbGFzcz0iYmxvY2siPlJldHVybnMgdGhlIGluZGV4IHdpdGhpbiB0aGlzIHN0cmluZyBvZiB0aGUgbGFzdCBvY2N1cnJlbmNlIG9mIHRoZQorICAgICAgICAgICAgc3BlY2lmaWVkIHN1YnN0cmluZywgc2VhcmNoaW5nIGJhY2t3YXJkIHN0YXJ0aW5nIGF0IHRoZSBzcGVjaWZpZWQgaW5kZXguPC9kaXY+CisgICAgPC90ZD4KKzwvdHI+Cis8dHIgY2xhc3M9InJvd0NvbG9yIj4KKyAgICA8dGQgY2xhc3M9ImNvbEZpcnN0Ij48Y29kZT5pbnQ8L2NvZGU+PC90ZD4KKyAgICA8dGQgY2xhc3M9ImNvbExhc3QiPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iLi4vLi4vamF2YS9sYW5nL1N0cmluZy5odG1sI2xlbmd0aCgpIj5sZW5ndGg8L2E+PC9zdHJvbmc+KCk8L2NvZGU+CisgICAgICAgIDxkaXYgY2xhc3M9ImJsb2NrIj5SZXR1cm5zIHRoZSBsZW5ndGggb2YgdGhpcyBzdHJpbmcuPC9kaXY+CisgICAgPC90ZD4KKzwvdHI+Cis8dHIgY2xhc3M9ImFsdENvbG9yIj4KKyAgICA8dGQgY2xhc3M9ImNvbEZpcnN0Ij48Y29kZT5ib29sZWFuPC9jb2RlPjwvdGQ+CisgICAgPHRkIGNsYXNzPSJjb2xMYXN0Ij48Y29kZT48c3Ryb25nPjxhIGhyZWY9Ii4uLy4uL2phdmEvbGFuZy9TdHJpbmcuaHRtbCNtYXRjaGVzKGphdmEubGFuZy5TdHJpbmcpIj5tYXRjaGVzPC9hPjwvc3Ryb25nPig8YSBocmVmPSIuLi8uLi9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBqYXZhLmxhbmciPlN0cmluZzwvYT4mbmJzcDtyZWdleCk8L2NvZGU+CisgICAgICAgIDxkaXYgY2xhc3M9ImJsb2NrIj5UZWxscyB3aGV0aGVyIG9yIG5vdCB0aGlzIHN0cmluZyBtYXRjaGVzIHRoZSBnaXZlbiA8YQorICAgICAgICAgICAgICAgIGhyZWY9Ii4uL3V0aWwvcmVnZXgvUGF0dGVybi5odG1sI3N1bSI+cmVndWxhciBleHByZXNzaW9uPC9hPi48L2Rpdj4KKyAgICA8L3RkPgorPC90cj4KKzx0ciBjbGFzcz0icm93Q29sb3IiPgorICAgIDx0ZCBjbGFzcz0iY29sRmlyc3QiPjxjb2RlPmludDwvY29kZT48L3RkPgorICAgIDx0ZCBjbGFzcz0iY29sTGFzdCI+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIuLi8uLi9qYXZhL2xhbmcvU3RyaW5nLmh0bWwjb2Zmc2V0QnlDb2RlUG9pbnRzKGludCwgaW50KSI+b2Zmc2V0QnlDb2RlUG9pbnRzPC9hPjwvc3Ryb25nPihpbnQmbmJzcDtpbmRleCwKKyAgICAgICAgaW50Jm5ic3A7Y29kZVBvaW50T2Zmc2V0KTwvY29kZT4KKyAgICAgICAgPGRpdiBjbGFzcz0iYmxvY2siPlJldHVybnMgdGhlIGluZGV4IHdpdGhpbiB0aGlzIDxjb2RlPlN0cmluZzwvY29kZT4gdGhhdCBpcworICAgICAgICAgICAgb2Zmc2V0IGZyb20gdGhlIGdpdmVuIDxjb2RlPmluZGV4PC9jb2RlPiBieQorICAgICAgICAgICAgPGNvZGU+Y29kZVBvaW50T2Zmc2V0PC9jb2RlPiBjb2RlIHBvaW50cy48L2Rpdj4KKyAgICA8L3RkPgorPC90cj4KKzx0ciBjbGFzcz0iYWx0Q29sb3IiPgorICAgIDx0ZCBjbGFzcz0iY29sRmlyc3QiPjxjb2RlPmJvb2xlYW48L2NvZGU+PC90ZD4KKyAgICA8dGQgY2xhc3M9ImNvbExhc3QiPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iLi4vLi4vamF2YS9sYW5nL1N0cmluZy5odG1sI3JlZ2lvbk1hdGNoZXMoYm9vbGVhbiwgaW50LCBqYXZhLmxhbmcuU3RyaW5nLCBpbnQsIGludCkiPnJlZ2lvbk1hdGNoZXM8L2E+PC9zdHJvbmc+KGJvb2xlYW4mbmJzcDtpZ25vcmVDYXNlLAorICAgICAgICBpbnQmbmJzcDt0b2Zmc2V0LAorICAgICAgICA8YSBocmVmPSIuLi8uLi9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBqYXZhLmxhbmciPlN0cmluZzwvYT4mbmJzcDtvdGhlciwKKyAgICAgICAgaW50Jm5ic3A7b29mZnNldCwKKyAgICAgICAgaW50Jm5ic3A7bGVuKTwvY29kZT4KKyAgICAgICAgPGRpdiBjbGFzcz0iYmxvY2siPlRlc3RzIGlmIHR3byBzdHJpbmcgcmVnaW9ucyBhcmUgZXF1YWwuPC9kaXY+CisgICAgPC90ZD4KKzwvdHI+Cis8dHIgY2xhc3M9InJvd0NvbG9yIj4KKyAgICA8dGQgY2xhc3M9ImNvbEZpcnN0Ij48Y29kZT5ib29sZWFuPC9jb2RlPjwvdGQ+CisgICAgPHRkIGNsYXNzPSJjb2xMYXN0Ij48Y29kZT48c3Ryb25nPjxhIGhyZWY9Ii4uLy4uL2phdmEvbGFuZy9TdHJpbmcuaHRtbCNyZWdpb25NYXRjaGVzKGludCwgamF2YS5sYW5nLlN0cmluZywgaW50LCBpbnQpIj5yZWdpb25NYXRjaGVzPC9hPjwvc3Ryb25nPihpbnQmbmJzcDt0b2Zmc2V0LAorICAgICAgICA8YSBocmVmPSIuLi8uLi9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBqYXZhLmxhbmciPlN0cmluZzwvYT4mbmJzcDtvdGhlciwKKyAgICAgICAgaW50Jm5ic3A7b29mZnNldCwKKyAgICAgICAgaW50Jm5ic3A7bGVuKTwvY29kZT4KKyAgICAgICAgPGRpdiBjbGFzcz0iYmxvY2siPlRlc3RzIGlmIHR3byBzdHJpbmcgcmVnaW9ucyBhcmUgZXF1YWwuPC9kaXY+CisgICAgPC90ZD4KKzwvdHI+Cis8dHIgY2xhc3M9ImFsdENvbG9yIj4KKyAgICA8dGQgY2xhc3M9ImNvbEZpcnN0Ij48Y29kZT48YSBocmVmPSIuLi8uLi9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBqYXZhLmxhbmciPlN0cmluZzwvYT48L2NvZGU+PC90ZD4KKyAgICA8dGQgY2xhc3M9ImNvbExhc3QiPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iLi4vLi4vamF2YS9sYW5nL1N0cmluZy5odG1sI3JlcGxhY2UoY2hhciwgY2hhcikiPnJlcGxhY2U8L2E+PC9zdHJvbmc+KGNoYXImbmJzcDtvbGRDaGFyLAorICAgICAgICBjaGFyJm5ic3A7bmV3Q2hhcik8L2NvZGU+CisgICAgICAgIDxkaXYgY2xhc3M9ImJsb2NrIj5SZXR1cm5zIGEgbmV3IHN0cmluZyByZXN1bHRpbmcgZnJvbSByZXBsYWNpbmcgYWxsIG9jY3VycmVuY2VzIG9mCisgICAgICAgICAgICA8Y29kZT5vbGRDaGFyPC9jb2RlPiBpbiB0aGlzIHN0cmluZyB3aXRoIDxjb2RlPm5ld0NoYXI8L2NvZGU+LjwvZGl2PgorICAgIDwvdGQ+Cis8L3RyPgorPHRyIGNsYXNzPSJyb3dDb2xvciI+CisgICAgPHRkIGNsYXNzPSJjb2xGaXJzdCI+PGNvZGU+PGEgaHJlZj0iLi4vLi4vamF2YS9sYW5nL1N0cmluZy5odG1sIiB0aXRsZT0iY2xhc3MgaW4gamF2YS5sYW5nIj5TdHJpbmc8L2E+PC9jb2RlPjwvdGQ+CisgICAgPHRkIGNsYXNzPSJjb2xMYXN0Ij48Y29kZT48c3Ryb25nPjxhIGhyZWY9Ii4uLy4uL2phdmEvbGFuZy9TdHJpbmcuaHRtbCNyZXBsYWNlKGphdmEubGFuZy5DaGFyU2VxdWVuY2UsIGphdmEubGFuZy5DaGFyU2VxdWVuY2UpIj5yZXBsYWNlPC9hPjwvc3Ryb25nPig8YSBocmVmPSIuLi8uLi9qYXZhL2xhbmcvQ2hhclNlcXVlbmNlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gamF2YS5sYW5nIj5DaGFyU2VxdWVuY2U8L2E+Jm5ic3A7dGFyZ2V0LAorICAgICAgICA8YSBocmVmPSIuLi8uLi9qYXZhL2xhbmcvQ2hhclNlcXVlbmNlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gamF2YS5sYW5nIj5DaGFyU2VxdWVuY2U8L2E+Jm5ic3A7cmVwbGFjZW1lbnQpPC9jb2RlPgorICAgICAgICA8ZGl2IGNsYXNzPSJibG9jayI+UmVwbGFjZXMgZWFjaCBzdWJzdHJpbmcgb2YgdGhpcyBzdHJpbmcgdGhhdCBtYXRjaGVzIHRoZSBsaXRlcmFsIHRhcmdldAorICAgICAgICAgICAgc2VxdWVuY2Ugd2l0aCB0aGUgc3BlY2lmaWVkIGxpdGVyYWwgcmVwbGFjZW1lbnQgc2VxdWVuY2UuPC9kaXY+CisgICAgPC90ZD4KKzwvdHI+Cis8dHIgY2xhc3M9ImFsdENvbG9yIj4KKyAgICA8dGQgY2xhc3M9ImNvbEZpcnN0Ij48Y29kZT48YSBocmVmPSIuLi8uLi9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBqYXZhLmxhbmciPlN0cmluZzwvYT48L2NvZGU+PC90ZD4KKyAgICA8dGQgY2xhc3M9ImNvbExhc3QiPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iLi4vLi4vamF2YS9sYW5nL1N0cmluZy5odG1sI3JlcGxhY2VBbGwoamF2YS5sYW5nLlN0cmluZywgamF2YS5sYW5nLlN0cmluZykiPnJlcGxhY2VBbGw8L2E+PC9zdHJvbmc+KDxhIGhyZWY9Ii4uLy4uL2phdmEvbGFuZy9TdHJpbmcuaHRtbCIgdGl0bGU9ImNsYXNzIGluIGphdmEubGFuZyI+U3RyaW5nPC9hPiZuYnNwO3JlZ2V4LAorICAgICAgICA8YSBocmVmPSIuLi8uLi9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBqYXZhLmxhbmciPlN0cmluZzwvYT4mbmJzcDtyZXBsYWNlbWVudCk8L2NvZGU+CisgICAgICAgIDxkaXYgY2xhc3M9ImJsb2NrIj5SZXBsYWNlcyBlYWNoIHN1YnN0cmluZyBvZiB0aGlzIHN0cmluZyB0aGF0IG1hdGNoZXMgdGhlIGdpdmVuIDxhCisgICAgICAgICAgICAgICAgaHJlZj0iLi4vdXRpbC9yZWdleC9QYXR0ZXJuLmh0bWwjc3VtIj5yZWd1bGFyIGV4cHJlc3Npb248L2E+IHdpdGggdGhlCisgICAgICAgICAgICBnaXZlbiByZXBsYWNlbWVudC48L2Rpdj4KKyAgICA8L3RkPgorPC90cj4KKzx0ciBjbGFzcz0icm93Q29sb3IiPgorICAgIDx0ZCBjbGFzcz0iY29sRmlyc3QiPjxjb2RlPjxhIGhyZWY9Ii4uLy4uL2phdmEvbGFuZy9TdHJpbmcuaHRtbCIgdGl0bGU9ImNsYXNzIGluIGphdmEubGFuZyI+U3RyaW5nPC9hPjwvY29kZT48L3RkPgorICAgIDx0ZCBjbGFzcz0iY29sTGFzdCI+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIuLi8uLi9qYXZhL2xhbmcvU3RyaW5nLmh0bWwjcmVwbGFjZUZpcnN0KGphdmEubGFuZy5TdHJpbmcsIGphdmEubGFuZy5TdHJpbmcpIj5yZXBsYWNlRmlyc3Q8L2E+PC9zdHJvbmc+KDxhIGhyZWY9Ii4uLy4uL2phdmEvbGFuZy9TdHJpbmcuaHRtbCIgdGl0bGU9ImNsYXNzIGluIGphdmEubGFuZyI+U3RyaW5nPC9hPiZuYnNwO3JlZ2V4LAorICAgICAgICA8YSBocmVmPSIuLi8uLi9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBqYXZhLmxhbmciPlN0cmluZzwvYT4mbmJzcDtyZXBsYWNlbWVudCk8L2NvZGU+CisgICAgICAgIDxkaXYgY2xhc3M9ImJsb2NrIj5SZXBsYWNlcyB0aGUgZmlyc3Qgc3Vic3RyaW5nIG9mIHRoaXMgc3RyaW5nIHRoYXQgbWF0Y2hlcyB0aGUgZ2l2ZW4gPGEKKyAgICAgICAgICAgICAgICBocmVmPSIuLi91dGlsL3JlZ2V4L1BhdHRlcm4uaHRtbCNzdW0iPnJlZ3VsYXIgZXhwcmVzc2lvbjwvYT4gd2l0aCB0aGUKKyAgICAgICAgICAgIGdpdmVuIHJlcGxhY2VtZW50LjwvZGl2PgorICAgIDwvdGQ+Cis8L3RyPgorPHRyIGNsYXNzPSJhbHRDb2xvciI+CisgICAgPHRkIGNsYXNzPSJjb2xGaXJzdCI+PGNvZGU+PGEgaHJlZj0iLi4vLi4vamF2YS9sYW5nL1N0cmluZy5odG1sIiB0aXRsZT0iY2xhc3MgaW4gamF2YS5sYW5nIj5TdHJpbmc8L2E+W108L2NvZGU+PC90ZD4KKyAgICA8dGQgY2xhc3M9ImNvbExhc3QiPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iLi4vLi4vamF2YS9sYW5nL1N0cmluZy5odG1sI3NwbGl0KGphdmEubGFuZy5TdHJpbmcpIj5zcGxpdDwvYT48L3N0cm9uZz4oPGEgaHJlZj0iLi4vLi4vamF2YS9sYW5nL1N0cmluZy5odG1sIiB0aXRsZT0iY2xhc3MgaW4gamF2YS5sYW5nIj5TdHJpbmc8L2E+Jm5ic3A7cmVnZXgpPC9jb2RlPgorICAgICAgICA8ZGl2IGNsYXNzPSJibG9jayI+U3BsaXRzIHRoaXMgc3RyaW5nIGFyb3VuZCBtYXRjaGVzIG9mIHRoZSBnaXZlbiA8YQorICAgICAgICAgICAgICAgIGhyZWY9Ii4uL3V0aWwvcmVnZXgvUGF0dGVybi5odG1sI3N1bSI+cmVndWxhciBleHByZXNzaW9uPC9hPi48L2Rpdj4KKyAgICA8L3RkPgorPC90cj4KKzx0ciBjbGFzcz0icm93Q29sb3IiPgorICAgIDx0ZCBjbGFzcz0iY29sRmlyc3QiPjxjb2RlPjxhIGhyZWY9Ii4uLy4uL2phdmEvbGFuZy9TdHJpbmcuaHRtbCIgdGl0bGU9ImNsYXNzIGluIGphdmEubGFuZyI+U3RyaW5nPC9hPltdPC9jb2RlPjwvdGQ+CisgICAgPHRkIGNsYXNzPSJjb2xMYXN0Ij48Y29kZT48c3Ryb25nPjxhIGhyZWY9Ii4uLy4uL2phdmEvbGFuZy9TdHJpbmcuaHRtbCNzcGxpdChqYXZhLmxhbmcuU3RyaW5nLCBpbnQpIj5zcGxpdDwvYT48L3N0cm9uZz4oPGEgaHJlZj0iLi4vLi4vamF2YS9sYW5nL1N0cmluZy5odG1sIiB0aXRsZT0iY2xhc3MgaW4gamF2YS5sYW5nIj5TdHJpbmc8L2E+Jm5ic3A7cmVnZXgsCisgICAgICAgIGludCZuYnNwO2xpbWl0KTwvY29kZT4KKyAgICAgICAgPGRpdiBjbGFzcz0iYmxvY2siPlNwbGl0cyB0aGlzIHN0cmluZyBhcm91bmQgbWF0Y2hlcyBvZiB0aGUgZ2l2ZW4KKyAgICAgICAgICAgIDxhIGhyZWY9Ii4uL3V0aWwvcmVnZXgvUGF0dGVybi5odG1sI3N1bSI+cmVndWxhciBleHByZXNzaW9uPC9hPi48L2Rpdj4KKyAgICA8L3RkPgorPC90cj4KKzx0ciBjbGFzcz0iYWx0Q29sb3IiPgorICAgIDx0ZCBjbGFzcz0iY29sRmlyc3QiPjxjb2RlPmJvb2xlYW48L2NvZGU+PC90ZD4KKyAgICA8dGQgY2xhc3M9ImNvbExhc3QiPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iLi4vLi4vamF2YS9sYW5nL1N0cmluZy5odG1sI3N0YXJ0c1dpdGgoamF2YS5sYW5nLlN0cmluZykiPnN0YXJ0c1dpdGg8L2E+PC9zdHJvbmc+KDxhIGhyZWY9Ii4uLy4uL2phdmEvbGFuZy9TdHJpbmcuaHRtbCIgdGl0bGU9ImNsYXNzIGluIGphdmEubGFuZyI+U3RyaW5nPC9hPiZuYnNwO3ByZWZpeCk8L2NvZGU+CisgICAgICAgIDxkaXYgY2xhc3M9ImJsb2NrIj5UZXN0cyBpZiB0aGlzIHN0cmluZyBzdGFydHMgd2l0aCB0aGUgc3BlY2lmaWVkIHByZWZpeC48L2Rpdj4KKyAgICA8L3RkPgorPC90cj4KKzx0ciBjbGFzcz0icm93Q29sb3IiPgorICAgIDx0ZCBjbGFzcz0iY29sRmlyc3QiPjxjb2RlPmJvb2xlYW48L2NvZGU+PC90ZD4KKyAgICA8dGQgY2xhc3M9ImNvbExhc3QiPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iLi4vLi4vamF2YS9sYW5nL1N0cmluZy5odG1sI3N0YXJ0c1dpdGgoamF2YS5sYW5nLlN0cmluZywgaW50KSI+c3RhcnRzV2l0aDwvYT48L3N0cm9uZz4oPGEgaHJlZj0iLi4vLi4vamF2YS9sYW5nL1N0cmluZy5odG1sIiB0aXRsZT0iY2xhc3MgaW4gamF2YS5sYW5nIj5TdHJpbmc8L2E+Jm5ic3A7cHJlZml4LAorICAgICAgICBpbnQmbmJzcDt0b2Zmc2V0KTwvY29kZT4KKyAgICAgICAgPGRpdiBjbGFzcz0iYmxvY2siPlRlc3RzIGlmIHRoZSBzdWJzdHJpbmcgb2YgdGhpcyBzdHJpbmcgYmVnaW5uaW5nIGF0IHRoZQorICAgICAgICAgICAgc3BlY2lmaWVkIGluZGV4IHN0YXJ0cyB3aXRoIHRoZSBzcGVjaWZpZWQgcHJlZml4LjwvZGl2PgorICAgIDwvdGQ+Cis8L3RyPgorPHRyIGNsYXNzPSJhbHRDb2xvciI+CisgICAgPHRkIGNsYXNzPSJjb2xGaXJzdCI+PGNvZGU+PGEgaHJlZj0iLi4vLi4vamF2YS9sYW5nL0NoYXJTZXF1ZW5jZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIGphdmEubGFuZyI+Q2hhclNlcXVlbmNlPC9hPjwvY29kZT48L3RkPgorICAgIDx0ZCBjbGFzcz0iY29sTGFzdCI+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIuLi8uLi9qYXZhL2xhbmcvU3RyaW5nLmh0bWwjc3ViU2VxdWVuY2UoaW50LCBpbnQpIj5zdWJTZXF1ZW5jZTwvYT48L3N0cm9uZz4oaW50Jm5ic3A7YmVnaW5JbmRleCwKKyAgICAgICAgaW50Jm5ic3A7ZW5kSW5kZXgpPC9jb2RlPgorICAgICAgICA8ZGl2IGNsYXNzPSJibG9jayI+UmV0dXJucyBhIG5ldyBjaGFyYWN0ZXIgc2VxdWVuY2UgdGhhdCBpcyBhIHN1YnNlcXVlbmNlIG9mIHRoaXMgc2VxdWVuY2UuPC9kaXY+CisgICAgPC90ZD4KKzwvdHI+Cis8dHIgY2xhc3M9InJvd0NvbG9yIj4KKyAgICA8dGQgY2xhc3M9ImNvbEZpcnN0Ij48Y29kZT48YSBocmVmPSIuLi8uLi9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBqYXZhLmxhbmciPlN0cmluZzwvYT48L2NvZGU+PC90ZD4KKyAgICA8dGQgY2xhc3M9ImNvbExhc3QiPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iLi4vLi4vamF2YS9sYW5nL1N0cmluZy5odG1sI3N1YnN0cmluZyhpbnQpIj5zdWJzdHJpbmc8L2E+PC9zdHJvbmc+KGludCZuYnNwO2JlZ2luSW5kZXgpPC9jb2RlPgorICAgICAgICA8ZGl2IGNsYXNzPSJibG9jayI+UmV0dXJucyBhIG5ldyBzdHJpbmcgdGhhdCBpcyBhIHN1YnN0cmluZyBvZiB0aGlzIHN0cmluZy48L2Rpdj4KKyAgICA8L3RkPgorPC90cj4KKzx0ciBjbGFzcz0iYWx0Q29sb3IiPgorICAgIDx0ZCBjbGFzcz0iY29sRmlyc3QiPjxjb2RlPjxhIGhyZWY9Ii4uLy4uL2phdmEvbGFuZy9TdHJpbmcuaHRtbCIgdGl0bGU9ImNsYXNzIGluIGphdmEubGFuZyI+U3RyaW5nPC9hPjwvY29kZT48L3RkPgorICAgIDx0ZCBjbGFzcz0iY29sTGFzdCI+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIuLi8uLi9qYXZhL2xhbmcvU3RyaW5nLmh0bWwjc3Vic3RyaW5nKGludCwgaW50KSI+c3Vic3RyaW5nPC9hPjwvc3Ryb25nPihpbnQmbmJzcDtiZWdpbkluZGV4LAorICAgICAgICBpbnQmbmJzcDtlbmRJbmRleCk8L2NvZGU+CisgICAgICAgIDxkaXYgY2xhc3M9ImJsb2NrIj5SZXR1cm5zIGEgbmV3IHN0cmluZyB0aGF0IGlzIGEgc3Vic3RyaW5nIG9mIHRoaXMgc3RyaW5nLjwvZGl2PgorICAgIDwvdGQ+Cis8L3RyPgorPHRyIGNsYXNzPSJyb3dDb2xvciI+CisgICAgPHRkIGNsYXNzPSJjb2xGaXJzdCI+PGNvZGU+Y2hhcltdPC9jb2RlPjwvdGQ+CisgICAgPHRkIGNsYXNzPSJjb2xMYXN0Ij48Y29kZT48c3Ryb25nPjxhIGhyZWY9Ii4uLy4uL2phdmEvbGFuZy9TdHJpbmcuaHRtbCN0b0NoYXJBcnJheSgpIj50b0NoYXJBcnJheTwvYT48L3N0cm9uZz4oKTwvY29kZT4KKyAgICAgICAgPGRpdiBjbGFzcz0iYmxvY2siPkNvbnZlcnRzIHRoaXMgc3RyaW5nIHRvIGEgbmV3IGNoYXJhY3RlciBhcnJheS48L2Rpdj4KKyAgICA8L3RkPgorPC90cj4KKzx0ciBjbGFzcz0iYWx0Q29sb3IiPgorICAgIDx0ZCBjbGFzcz0iY29sRmlyc3QiPjxjb2RlPjxhIGhyZWY9Ii4uLy4uL2phdmEvbGFuZy9TdHJpbmcuaHRtbCIgdGl0bGU9ImNsYXNzIGluIGphdmEubGFuZyI+U3RyaW5nPC9hPjwvY29kZT48L3RkPgorICAgIDx0ZCBjbGFzcz0iY29sTGFzdCI+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIuLi8uLi9qYXZhL2xhbmcvU3RyaW5nLmh0bWwjdG9Mb3dlckNhc2UoKSI+dG9Mb3dlckNhc2U8L2E+PC9zdHJvbmc+KCk8L2NvZGU+CisgICAgICAgIDxkaXYgY2xhc3M9ImJsb2NrIj5Db252ZXJ0cyBhbGwgb2YgdGhlIGNoYXJhY3RlcnMgaW4gdGhpcyA8Y29kZT5TdHJpbmc8L2NvZGU+IHRvIGxvd2VyCisgICAgICAgICAgICBjYXNlIHVzaW5nIHRoZSBydWxlcyBvZiB0aGUgZGVmYXVsdCBsb2NhbGUuPC9kaXY+CisgICAgPC90ZD4KKzwvdHI+Cis8dHIgY2xhc3M9InJvd0NvbG9yIj4KKyAgICA8dGQgY2xhc3M9ImNvbEZpcnN0Ij48Y29kZT48YSBocmVmPSIuLi8uLi9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBqYXZhLmxhbmciPlN0cmluZzwvYT48L2NvZGU+PC90ZD4KKyAgICA8dGQgY2xhc3M9ImNvbExhc3QiPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iLi4vLi4vamF2YS9sYW5nL1N0cmluZy5odG1sI3RvTG93ZXJDYXNlKGphdmEudXRpbC5Mb2NhbGUpIj50b0xvd2VyQ2FzZTwvYT48L3N0cm9uZz4oPGEgaHJlZj0iLi4vLi4vamF2YS91dGlsL0xvY2FsZS5odG1sIiB0aXRsZT0iY2xhc3MgaW4gamF2YS51dGlsIj5Mb2NhbGU8L2E+Jm5ic3A7bG9jYWxlKTwvY29kZT4KKyAgICAgICAgPGRpdiBjbGFzcz0iYmxvY2siPkNvbnZlcnRzIGFsbCBvZiB0aGUgY2hhcmFjdGVycyBpbiB0aGlzIDxjb2RlPlN0cmluZzwvY29kZT4gdG8gbG93ZXIKKyAgICAgICAgICAgIGNhc2UgdXNpbmcgdGhlIHJ1bGVzIG9mIHRoZSBnaXZlbiA8Y29kZT5Mb2NhbGU8L2NvZGU+LjwvZGl2PgorICAgIDwvdGQ+Cis8L3RyPgorPHRyIGNsYXNzPSJhbHRDb2xvciI+CisgICAgPHRkIGNsYXNzPSJjb2xGaXJzdCI+PGNvZGU+PGEgaHJlZj0iLi4vLi4vamF2YS9sYW5nL1N0cmluZy5odG1sIiB0aXRsZT0iY2xhc3MgaW4gamF2YS5sYW5nIj5TdHJpbmc8L2E+PC9jb2RlPjwvdGQ+CisgICAgPHRkIGNsYXNzPSJjb2xMYXN0Ij48Y29kZT48c3Ryb25nPjxhIGhyZWY9Ii4uLy4uL2phdmEvbGFuZy9TdHJpbmcuaHRtbCN0b1N0cmluZygpIj50b1N0cmluZzwvYT48L3N0cm9uZz4oKTwvY29kZT4KKyAgICAgICAgPGRpdiBjbGFzcz0iYmxvY2siPlRoaXMgb2JqZWN0ICh3aGljaCBpcyBhbHJlYWR5IGEgc3RyaW5nISkgaXMgaXRzZWxmIHJldHVybmVkLjwvZGl2PgorICAgIDwvdGQ+Cis8L3RyPgorPHRyIGNsYXNzPSJyb3dDb2xvciI+CisgICAgPHRkIGNsYXNzPSJjb2xGaXJzdCI+PGNvZGU+PGEgaHJlZj0iLi4vLi4vamF2YS9sYW5nL1N0cmluZy5odG1sIiB0aXRsZT0iY2xhc3MgaW4gamF2YS5sYW5nIj5TdHJpbmc8L2E+PC9jb2RlPjwvdGQ+CisgICAgPHRkIGNsYXNzPSJjb2xMYXN0Ij48Y29kZT48c3Ryb25nPjxhIGhyZWY9Ii4uLy4uL2phdmEvbGFuZy9TdHJpbmcuaHRtbCN0b1VwcGVyQ2FzZSgpIj50b1VwcGVyQ2FzZTwvYT48L3N0cm9uZz4oKTwvY29kZT4KKyAgICAgICAgPGRpdiBjbGFzcz0iYmxvY2siPkNvbnZlcnRzIGFsbCBvZiB0aGUgY2hhcmFjdGVycyBpbiB0aGlzIDxjb2RlPlN0cmluZzwvY29kZT4gdG8gdXBwZXIKKyAgICAgICAgICAgIGNhc2UgdXNpbmcgdGhlIHJ1bGVzIG9mIHRoZSBkZWZhdWx0IGxvY2FsZS48L2Rpdj4KKyAgICA8L3RkPgorPC90cj4KKzx0ciBjbGFzcz0iYWx0Q29sb3IiPgorICAgIDx0ZCBjbGFzcz0iY29sRmlyc3QiPjxjb2RlPjxhIGhyZWY9Ii4uLy4uL2phdmEvbGFuZy9TdHJpbmcuaHRtbCIgdGl0bGU9ImNsYXNzIGluIGphdmEubGFuZyI+U3RyaW5nPC9hPjwvY29kZT48L3RkPgorICAgIDx0ZCBjbGFzcz0iY29sTGFzdCI+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIuLi8uLi9qYXZhL2xhbmcvU3RyaW5nLmh0bWwjdG9VcHBlckNhc2UoamF2YS51dGlsLkxvY2FsZSkiPnRvVXBwZXJDYXNlPC9hPjwvc3Ryb25nPig8YSBocmVmPSIuLi8uLi9qYXZhL3V0aWwvTG9jYWxlLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBqYXZhLnV0aWwiPkxvY2FsZTwvYT4mbmJzcDtsb2NhbGUpPC9jb2RlPgorICAgICAgICA8ZGl2IGNsYXNzPSJibG9jayI+Q29udmVydHMgYWxsIG9mIHRoZSBjaGFyYWN0ZXJzIGluIHRoaXMgPGNvZGU+U3RyaW5nPC9jb2RlPiB0byB1cHBlcgorICAgICAgICAgICAgY2FzZSB1c2luZyB0aGUgcnVsZXMgb2YgdGhlIGdpdmVuIDxjb2RlPkxvY2FsZTwvY29kZT4uPC9kaXY+CisgICAgPC90ZD4KKzwvdHI+Cis8dHIgY2xhc3M9InJvd0NvbG9yIj4KKyAgICA8dGQgY2xhc3M9ImNvbEZpcnN0Ij48Y29kZT48YSBocmVmPSIuLi8uLi9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBqYXZhLmxhbmciPlN0cmluZzwvYT48L2NvZGU+PC90ZD4KKyAgICA8dGQgY2xhc3M9ImNvbExhc3QiPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iLi4vLi4vamF2YS9sYW5nL1N0cmluZy5odG1sI3RyaW0oKSI+dHJpbTwvYT48L3N0cm9uZz4oKTwvY29kZT4KKyAgICAgICAgPGRpdiBjbGFzcz0iYmxvY2siPlJldHVybnMgYSBjb3B5IG9mIHRoZSBzdHJpbmcsIHdpdGggbGVhZGluZyBhbmQgdHJhaWxpbmcgd2hpdGVzcGFjZQorICAgICAgICAgICAgb21pdHRlZC48L2Rpdj4KKyAgICA8L3RkPgorPC90cj4KKzx0ciBjbGFzcz0iYWx0Q29sb3IiPgorICAgIDx0ZCBjbGFzcz0iY29sRmlyc3QiPjxjb2RlPnN0YXRpYyA8YSBocmVmPSIuLi8uLi9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBqYXZhLmxhbmciPlN0cmluZzwvYT48L2NvZGU+PC90ZD4KKyAgICA8dGQgY2xhc3M9ImNvbExhc3QiPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iLi4vLi4vamF2YS9sYW5nL1N0cmluZy5odG1sI3ZhbHVlT2YoYm9vbGVhbikiPnZhbHVlT2Y8L2E+PC9zdHJvbmc+KGJvb2xlYW4mbmJzcDtiKTwvY29kZT4KKyAgICAgICAgPGRpdiBjbGFzcz0iYmxvY2siPlJldHVybnMgdGhlIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgPGNvZGU+Ym9vbGVhbjwvY29kZT4gYXJndW1lbnQuPC9kaXY+CisgICAgPC90ZD4KKzwvdHI+Cis8dHIgY2xhc3M9InJvd0NvbG9yIj4KKyAgICA8dGQgY2xhc3M9ImNvbEZpcnN0Ij48Y29kZT5zdGF0aWMgPGEgaHJlZj0iLi4vLi4vamF2YS9sYW5nL1N0cmluZy5odG1sIiB0aXRsZT0iY2xhc3MgaW4gamF2YS5sYW5nIj5TdHJpbmc8L2E+PC9jb2RlPjwvdGQ+CisgICAgPHRkIGNsYXNzPSJjb2xMYXN0Ij48Y29kZT48c3Ryb25nPjxhIGhyZWY9Ii4uLy4uL2phdmEvbGFuZy9TdHJpbmcuaHRtbCN2YWx1ZU9mKGNoYXIpIj52YWx1ZU9mPC9hPjwvc3Ryb25nPihjaGFyJm5ic3A7Yyk8L2NvZGU+CisgICAgICAgIDxkaXYgY2xhc3M9ImJsb2NrIj5SZXR1cm5zIHRoZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIDxjb2RlPmNoYXI8L2NvZGU+CisgICAgICAgICAgICBhcmd1bWVudC48L2Rpdj4KKyAgICA8L3RkPgorPC90cj4KKzx0ciBjbGFzcz0iYWx0Q29sb3IiPgorICAgIDx0ZCBjbGFzcz0iY29sRmlyc3QiPjxjb2RlPnN0YXRpYyA8YSBocmVmPSIuLi8uLi9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBqYXZhLmxhbmciPlN0cmluZzwvYT48L2NvZGU+PC90ZD4KKyAgICA8dGQgY2xhc3M9ImNvbExhc3QiPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iLi4vLi4vamF2YS9sYW5nL1N0cmluZy5odG1sI3ZhbHVlT2YoY2hhcltdKSI+dmFsdWVPZjwvYT48L3N0cm9uZz4oY2hhcltdJm5ic3A7ZGF0YSk8L2NvZGU+CisgICAgICAgIDxkaXYgY2xhc3M9ImJsb2NrIj5SZXR1cm5zIHRoZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIDxjb2RlPmNoYXI8L2NvZGU+IGFycmF5CisgICAgICAgICAgICBhcmd1bWVudC48L2Rpdj4KKyAgICA8L3RkPgorPC90cj4KKzx0ciBjbGFzcz0icm93Q29sb3IiPgorICAgIDx0ZCBjbGFzcz0iY29sRmlyc3QiPjxjb2RlPnN0YXRpYyA8YSBocmVmPSIuLi8uLi9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBqYXZhLmxhbmciPlN0cmluZzwvYT48L2NvZGU+PC90ZD4KKyAgICA8dGQgY2xhc3M9ImNvbExhc3QiPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iLi4vLi4vamF2YS9sYW5nL1N0cmluZy5odG1sI3ZhbHVlT2YoY2hhcltdLCBpbnQsIGludCkiPnZhbHVlT2Y8L2E+PC9zdHJvbmc+KGNoYXJbXSZuYnNwO2RhdGEsCisgICAgICAgIGludCZuYnNwO29mZnNldCwKKyAgICAgICAgaW50Jm5ic3A7Y291bnQpPC9jb2RlPgorICAgICAgICA8ZGl2IGNsYXNzPSJibG9jayI+UmV0dXJucyB0aGUgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGEgc3BlY2lmaWMgc3ViYXJyYXkgb2YgdGhlCisgICAgICAgICAgICA8Y29kZT5jaGFyPC9jb2RlPiBhcnJheSBhcmd1bWVudC48L2Rpdj4KKyAgICA8L3RkPgorPC90cj4KKzx0ciBjbGFzcz0iYWx0Q29sb3IiPgorICAgIDx0ZCBjbGFzcz0iY29sRmlyc3QiPjxjb2RlPnN0YXRpYyA8YSBocmVmPSIuLi8uLi9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBqYXZhLmxhbmciPlN0cmluZzwvYT48L2NvZGU+PC90ZD4KKyAgICA8dGQgY2xhc3M9ImNvbExhc3QiPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iLi4vLi4vamF2YS9sYW5nL1N0cmluZy5odG1sI3ZhbHVlT2YoZG91YmxlKSI+dmFsdWVPZjwvYT48L3N0cm9uZz4oZG91YmxlJm5ic3A7ZCk8L2NvZGU+CisgICAgICAgIDxkaXYgY2xhc3M9ImJsb2NrIj5SZXR1cm5zIHRoZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIDxjb2RlPmRvdWJsZTwvY29kZT4gYXJndW1lbnQuPC9kaXY+CisgICAgPC90ZD4KKzwvdHI+Cis8dHIgY2xhc3M9InJvd0NvbG9yIj4KKyAgICA8dGQgY2xhc3M9ImNvbEZpcnN0Ij48Y29kZT5zdGF0aWMgPGEgaHJlZj0iLi4vLi4vamF2YS9sYW5nL1N0cmluZy5odG1sIiB0aXRsZT0iY2xhc3MgaW4gamF2YS5sYW5nIj5TdHJpbmc8L2E+PC9jb2RlPjwvdGQ+CisgICAgPHRkIGNsYXNzPSJjb2xMYXN0Ij48Y29kZT48c3Ryb25nPjxhIGhyZWY9Ii4uLy4uL2phdmEvbGFuZy9TdHJpbmcuaHRtbCN2YWx1ZU9mKGZsb2F0KSI+dmFsdWVPZjwvYT48L3N0cm9uZz4oZmxvYXQmbmJzcDtmKTwvY29kZT4KKyAgICAgICAgPGRpdiBjbGFzcz0iYmxvY2siPlJldHVybnMgdGhlIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgPGNvZGU+ZmxvYXQ8L2NvZGU+IGFyZ3VtZW50LjwvZGl2PgorICAgIDwvdGQ+Cis8L3RyPgorPHRyIGNsYXNzPSJhbHRDb2xvciI+CisgICAgPHRkIGNsYXNzPSJjb2xGaXJzdCI+PGNvZGU+c3RhdGljIDxhIGhyZWY9Ii4uLy4uL2phdmEvbGFuZy9TdHJpbmcuaHRtbCIgdGl0bGU9ImNsYXNzIGluIGphdmEubGFuZyI+U3RyaW5nPC9hPjwvY29kZT48L3RkPgorICAgIDx0ZCBjbGFzcz0iY29sTGFzdCI+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIuLi8uLi9qYXZhL2xhbmcvU3RyaW5nLmh0bWwjdmFsdWVPZihpbnQpIj52YWx1ZU9mPC9hPjwvc3Ryb25nPihpbnQmbmJzcDtpKTwvY29kZT4KKyAgICAgICAgPGRpdiBjbGFzcz0iYmxvY2siPlJldHVybnMgdGhlIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgPGNvZGU+aW50PC9jb2RlPiBhcmd1bWVudC48L2Rpdj4KKyAgICA8L3RkPgorPC90cj4KKzx0ciBjbGFzcz0icm93Q29sb3IiPgorICAgIDx0ZCBjbGFzcz0iY29sRmlyc3QiPjxjb2RlPnN0YXRpYyA8YSBocmVmPSIuLi8uLi9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBqYXZhLmxhbmciPlN0cmluZzwvYT48L2NvZGU+PC90ZD4KKyAgICA8dGQgY2xhc3M9ImNvbExhc3QiPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iLi4vLi4vamF2YS9sYW5nL1N0cmluZy5odG1sI3ZhbHVlT2YobG9uZykiPnZhbHVlT2Y8L2E+PC9zdHJvbmc+KGxvbmcmbmJzcDtsKTwvY29kZT4KKyAgICAgICAgPGRpdiBjbGFzcz0iYmxvY2siPlJldHVybnMgdGhlIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgPGNvZGU+bG9uZzwvY29kZT4gYXJndW1lbnQuPC9kaXY+CisgICAgPC90ZD4KKzwvdHI+Cis8dHIgY2xhc3M9ImFsdENvbG9yIj4KKyAgICA8dGQgY2xhc3M9ImNvbEZpcnN0Ij48Y29kZT5zdGF0aWMgPGEgaHJlZj0iLi4vLi4vamF2YS9sYW5nL1N0cmluZy5odG1sIiB0aXRsZT0iY2xhc3MgaW4gamF2YS5sYW5nIj5TdHJpbmc8L2E+PC9jb2RlPjwvdGQ+CisgICAgPHRkIGNsYXNzPSJjb2xMYXN0Ij48Y29kZT48c3Ryb25nPjxhIGhyZWY9Ii4uLy4uL2phdmEvbGFuZy9TdHJpbmcuaHRtbCN2YWx1ZU9mKGphdmEubGFuZy5PYmplY3QpIj52YWx1ZU9mPC9hPjwvc3Ryb25nPig8YSBocmVmPSIuLi8uLi9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBqYXZhLmxhbmciPk9iamVjdDwvYT4mbmJzcDtvYmopPC9jb2RlPgorICAgICAgICA8ZGl2IGNsYXNzPSJibG9jayI+UmV0dXJucyB0aGUgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSA8Y29kZT5PYmplY3Q8L2NvZGU+IGFyZ3VtZW50LjwvZGl2PgorICAgIDwvdGQ+Cis8L3RyPgorPC90YWJsZT4KKzx1bCBjbGFzcz0iYmxvY2tMaXN0Ij4KKyAgICA8bGkgY2xhc3M9ImJsb2NrTGlzdCI+PGEgbmFtZT0ibWV0aG9kc19pbmhlcml0ZWRfZnJvbV9jbGFzc19qYXZhLmxhbmcuT2JqZWN0Ij4KKyAgICAgICAgPCEtLSAgIC0tPgorICAgIDwvYT4KKyAgICAgICAgPGgzPk1ldGhvZHMgaW5oZXJpdGVkIGZyb20gY2xhc3MmbmJzcDtqYXZhLmxhbmcuPGEgaHJlZj0iLi4vLi4vamF2YS9sYW5nL09iamVjdC5odG1sIiB0aXRsZT0iY2xhc3MgaW4gamF2YS5sYW5nIj5PYmplY3Q8L2E+PC9oMz4KKyAgICAgICAgPGNvZGU+PGEgaHJlZj0iLi4vLi4vamF2YS9sYW5nL09iamVjdC5odG1sI2Nsb25lKCkiPmNsb25lPC9hPiwgPGEgaHJlZj0iLi4vLi4vamF2YS9sYW5nL09iamVjdC5odG1sI2ZpbmFsaXplKCkiPmZpbmFsaXplPC9hPiwgPGEgaHJlZj0iLi4vLi4vamF2YS9sYW5nL09iamVjdC5odG1sI2dldENsYXNzKCkiPmdldENsYXNzPC9hPiwgPGEgaHJlZj0iLi4vLi4vamF2YS9sYW5nL09iamVjdC5odG1sI25vdGlmeSgpIj5ub3RpZnk8L2E+LCA8YSBocmVmPSIuLi8uLi9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjbm90aWZ5QWxsKCkiPm5vdGlmeUFsbDwvYT4sIDxhIGhyZWY9Ii4uLy4uL2phdmEvbGFuZy9PYmplY3QuaHRtbCN3YWl0KCkiPndhaXQ8L2E+LCA8YSBocmVmPSIuLi8uLi9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjd2FpdChsb25nKSI+d2FpdDwvYT4sIDxhIGhyZWY9Ii4uLy4uL2phdmEvbGFuZy9PYmplY3QuaHRtbCN3YWl0KGxvbmcsIGludCkiPndhaXQ8L2E+PC9jb2RlPjwvbGk+Cis8L3VsPgorPC9saT4KKzwvdWw+Cis8L2xpPgorPC91bD4KKzwvZGl2PgorPGRpdiBjbGFzcz0iZGV0YWlscyI+Cis8dWwgY2xhc3M9ImJsb2NrTGlzdCI+Cis8bGkgY2xhc3M9ImJsb2NrTGlzdCI+Cis8IS0tID09PT09PT09PT09PSBGSUVMRCBERVRBSUwgPT09PT09PT09PT0gLS0+Cis8dWwgY2xhc3M9ImJsb2NrTGlzdCI+CisgICAgPGxpIGNsYXNzPSJibG9ja0xpc3QiPjxhIG5hbWU9ImZpZWxkX2RldGFpbCI+CisgICAgICAgIDwhLS0gICAtLT4KKyAgICA8L2E+CisgICAgICAgIDxoMz5GaWVsZCBEZXRhaWw8L2gzPgorICAgICAgICA8YSBuYW1lPSJDQVNFX0lOU0VOU0lUSVZFX09SREVSIj4KKyAgICAgICAgICAgIDwhLS0gICAtLT4KKyAgICAgICAgPC9hPgorICAgICAgICA8dWwgY2xhc3M9ImJsb2NrTGlzdExhc3QiPgorICAgICAgICAgICAgPGxpIGNsYXNzPSJibG9ja0xpc3QiPgorICAgICAgICAgICAgICAgIDxoND5DQVNFX0lOU0VOU0lUSVZFX09SREVSPC9oND4KKyAgICAgICAgICAgICAgICA8cHJlPnB1YmxpYyBzdGF0aWMgZmluYWwmbmJzcDs8YSBocmVmPSIuLi8uLi9qYXZhL3V0aWwvQ29tcGFyYXRvci5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIGphdmEudXRpbCI+Q29tcGFyYXRvcjwvYT4mbHQ7PGEgaHJlZj0iLi4vLi4vamF2YS9sYW5nL1N0cmluZy5odG1sIiB0aXRsZT0iY2xhc3MgaW4gamF2YS5sYW5nIj5TdHJpbmc8L2E+Jmd0OyBDQVNFX0lOU0VOU0lUSVZFX09SREVSPC9wcmU+CisgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iYmxvY2siPkEgQ29tcGFyYXRvciB0aGF0IG9yZGVycyA8Y29kZT5TdHJpbmc8L2NvZGU+IG9iamVjdHMgYXMgYnkKKyAgICAgICAgICAgICAgICAgICAgPGNvZGU+Y29tcGFyZVRvSWdub3JlQ2FzZTwvY29kZT4uIFRoaXMgY29tcGFyYXRvciBpcyBzZXJpYWxpemFibGUuCisgICAgICAgICAgICAgICAgICAgIDxwPgorICAgICAgICAgICAgICAgICAgICAgICAgTm90ZSB0aGF0IHRoaXMgQ29tcGFyYXRvciBkb2VzIDxlbT5ub3Q8L2VtPiB0YWtlIGxvY2FsZSBpbnRvIGFjY291bnQsCisgICAgICAgICAgICAgICAgICAgICAgICBhbmQgd2lsbCByZXN1bHQgaW4gYW4gdW5zYXRpc2ZhY3Rvcnkgb3JkZXJpbmcgZm9yIGNlcnRhaW4gbG9jYWxlcy4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBqYXZhLnRleHQgcGFja2FnZSBwcm92aWRlcyA8ZW0+Q29sbGF0b3JzPC9lbT4gdG8gYWxsb3cKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FsZS1zZW5zaXRpdmUgb3JkZXJpbmcuPC9kaXY+CisgICAgICAgICAgICAgICAgPGRsPjxkdD48c3BhbiBjbGFzcz0ic3Ryb25nIj5TaW5jZTo8L3NwYW4+PC9kdD4KKyAgICAgICAgICAgICAgICAgICAgPGRkPjEuMjwvZGQ+CisgICAgICAgICAgICAgICAgICAgIDxkdD48c3BhbiBjbGFzcz0ic3Ryb25nIj5TZWUgQWxzbzo8L3NwYW4+PC9kdD48ZGQ+PGEgaHJlZj0iLi4vLi4vamF2YS90ZXh0L0NvbGxhdG9yLmh0bWwjY29tcGFyZShqYXZhLmxhbmcuU3RyaW5nLCBqYXZhLmxhbmcuU3RyaW5nKSI+PGNvZGU+Q29sbGF0b3IuY29tcGFyZShTdHJpbmcsIFN0cmluZyk8L2NvZGU+PC9hPjwvZGQ+PC9kbD4KKyAgICAgICAgICAgIDwvbGk+CisgICAgICAgIDwvdWw+CisgICAgPC9saT4KKzwvdWw+Cis8IS0tID09PT09PT09PSBDT05TVFJVQ1RPUiBERVRBSUwgPT09PT09PT0gLS0+Cis8dWwgY2xhc3M9ImJsb2NrTGlzdCI+Cis8bGkgY2xhc3M9ImJsb2NrTGlzdCI+PGEgbmFtZT0iY29uc3RydWN0b3JfZGV0YWlsIj4KKyAgICA8IS0tICAgLS0+Cis8L2E+Cis8aDM+Q29uc3RydWN0b3IgRGV0YWlsPC9oMz4KKzxhIG5hbWU9IlN0cmluZygpIj4KKyAgICA8IS0tICAgLS0+Cis8L2E+Cis8dWwgY2xhc3M9ImJsb2NrTGlzdCI+CisgICAgPGxpIGNsYXNzPSJibG9ja0xpc3QiPgorICAgICAgICA8aDQ+U3RyaW5nPC9oND4KKyAgICAgICAgPHByZT5wdWJsaWMmbmJzcDtTdHJpbmcoKTwvcHJlPgorICAgICAgICA8ZGl2IGNsYXNzPSJibG9jayI+SW5pdGlhbGl6ZXMgYSBuZXdseSBjcmVhdGVkIDxjb2RlPlN0cmluZzwvY29kZT4gb2JqZWN0IHNvIHRoYXQgaXQgcmVwcmVzZW50cworICAgICAgICAgICAgYW4gZW1wdHkgY2hhcmFjdGVyIHNlcXVlbmNlLiAgTm90ZSB0aGF0IHVzZSBvZiB0aGlzIGNvbnN0cnVjdG9yIGlzCisgICAgICAgICAgICB1bm5lY2Vzc2FyeSBzaW5jZSBTdHJpbmdzIGFyZSBpbW11dGFibGUuPC9kaXY+CisgICAgPC9saT4KKzwvdWw+Cis8YSBuYW1lPSJTdHJpbmcoamF2YS5sYW5nLlN0cmluZykiPgorICAgIDwhLS0gICAtLT4KKzwvYT4KKzx1bCBjbGFzcz0iYmxvY2tMaXN0Ij4KKyAgICA8bGkgY2xhc3M9ImJsb2NrTGlzdCI+CisgICAgICAgIDxoND5TdHJpbmc8L2g0PgorICAgICAgICA8cHJlPnB1YmxpYyZuYnNwO1N0cmluZyg8YSBocmVmPSIuLi8uLi9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBqYXZhLmxhbmciPlN0cmluZzwvYT4mbmJzcDtvcmlnaW5hbCk8L3ByZT4KKyAgICAgICAgPGRpdiBjbGFzcz0iYmxvY2siPkluaXRpYWxpemVzIGEgbmV3bHkgY3JlYXRlZCA8Y29kZT5TdHJpbmc8L2NvZGU+IG9iamVjdCBzbyB0aGF0IGl0IHJlcHJlc2VudHMKKyAgICAgICAgICAgIHRoZSBzYW1lIHNlcXVlbmNlIG9mIGNoYXJhY3RlcnMgYXMgdGhlIGFyZ3VtZW50OyBpbiBvdGhlciB3b3JkcywgdGhlCisgICAgICAgICAgICBuZXdseSBjcmVhdGVkIHN0cmluZyBpcyBhIGNvcHkgb2YgdGhlIGFyZ3VtZW50IHN0cmluZy4gVW5sZXNzIGFuCisgICAgICAgICAgICBleHBsaWNpdCBjb3B5IG9mIDxjb2RlPm9yaWdpbmFsPC9jb2RlPiBpcyBuZWVkZWQsIHVzZSBvZiB0aGlzIGNvbnN0cnVjdG9yIGlzCisgICAgICAgICAgICB1bm5lY2Vzc2FyeSBzaW5jZSBTdHJpbmdzIGFyZSBpbW11dGFibGUuPC9kaXY+CisgICAgICAgIDxkbD48ZHQ+PHNwYW4gY2xhc3M9InN0cm9uZyI+UGFyYW1ldGVyczo8L3NwYW4+PC9kdD48ZGQ+PGNvZGU+b3JpZ2luYWw8L2NvZGU+IC0gQSA8Y29kZT5TdHJpbmc8L2NvZGU+PC9kZD48L2RsPgorICAgIDwvbGk+Cis8L3VsPgorPGEgbmFtZT0iU3RyaW5nKGNoYXJbXSkiPgorICAgIDwhLS0gICAtLT4KKzwvYT4KKzx1bCBjbGFzcz0iYmxvY2tMaXN0Ij4KKyAgICA8bGkgY2xhc3M9ImJsb2NrTGlzdCI+CisgICAgICAgIDxoND5TdHJpbmc8L2g0PgorICAgICAgICA8cHJlPnB1YmxpYyZuYnNwO1N0cmluZyhjaGFyW10mbmJzcDt2YWx1ZSk8L3ByZT4KKyAgICAgICAgPGRpdiBjbGFzcz0iYmxvY2siPkFsbG9jYXRlcyBhIG5ldyA8Y29kZT5TdHJpbmc8L2NvZGU+IHNvIHRoYXQgaXQgcmVwcmVzZW50cyB0aGUgc2VxdWVuY2Ugb2YKKyAgICAgICAgICAgIGNoYXJhY3RlcnMgY3VycmVudGx5IGNvbnRhaW5lZCBpbiB0aGUgY2hhcmFjdGVyIGFycmF5IGFyZ3VtZW50LiBUaGUKKyAgICAgICAgICAgIGNvbnRlbnRzIG9mIHRoZSBjaGFyYWN0ZXIgYXJyYXkgYXJlIGNvcGllZDsgc3Vic2VxdWVudCBtb2RpZmljYXRpb24gb2YKKyAgICAgICAgICAgIHRoZSBjaGFyYWN0ZXIgYXJyYXkgZG9lcyBub3QgYWZmZWN0IHRoZSBuZXdseSBjcmVhdGVkIHN0cmluZy48L2Rpdj4KKyAgICAgICAgPGRsPjxkdD48c3BhbiBjbGFzcz0ic3Ryb25nIj5QYXJhbWV0ZXJzOjwvc3Bhbj48L2R0PjxkZD48Y29kZT52YWx1ZTwvY29kZT4gLSBUaGUgaW5pdGlhbCB2YWx1ZSBvZiB0aGUgc3RyaW5nPC9kZD48L2RsPgorICAgIDwvbGk+Cis8L3VsPgorPGEgbmFtZT0iU3RyaW5nKGNoYXJbXSwgaW50LCBpbnQpIj4KKyAgICA8IS0tICAgLS0+Cis8L2E+Cis8dWwgY2xhc3M9ImJsb2NrTGlzdCI+CisgICAgPGxpIGNsYXNzPSJibG9ja0xpc3QiPgorICAgICAgICA8aDQ+U3RyaW5nPC9oND4KKzxwcmU+cHVibGljJm5ic3A7U3RyaW5nKGNoYXJbXSZuYnNwO3ZhbHVlLAorICAgICAgaW50Jm5ic3A7b2Zmc2V0LAorICAgICAgaW50Jm5ic3A7Y291bnQpPC9wcmU+CisgICAgICAgIDxkaXYgY2xhc3M9ImJsb2NrIj5BbGxvY2F0ZXMgYSBuZXcgPGNvZGU+U3RyaW5nPC9jb2RlPiB0aGF0IGNvbnRhaW5zIGNoYXJhY3RlcnMgZnJvbSBhIHN1YmFycmF5CisgICAgICAgICAgICBvZiB0aGUgY2hhcmFjdGVyIGFycmF5IGFyZ3VtZW50LiBUaGUgPGNvZGU+b2Zmc2V0PC9jb2RlPiBhcmd1bWVudCBpcyB0aGUKKyAgICAgICAgICAgIGluZGV4IG9mIHRoZSBmaXJzdCBjaGFyYWN0ZXIgb2YgdGhlIHN1YmFycmF5IGFuZCB0aGUgPGNvZGU+Y291bnQ8L2NvZGU+CisgICAgICAgICAgICBhcmd1bWVudCBzcGVjaWZpZXMgdGhlIGxlbmd0aCBvZiB0aGUgc3ViYXJyYXkuIFRoZSBjb250ZW50cyBvZiB0aGUKKyAgICAgICAgICAgIHN1YmFycmF5IGFyZSBjb3BpZWQ7IHN1YnNlcXVlbnQgbW9kaWZpY2F0aW9uIG9mIHRoZSBjaGFyYWN0ZXIgYXJyYXkgZG9lcworICAgICAgICAgICAgbm90IGFmZmVjdCB0aGUgbmV3bHkgY3JlYXRlZCBzdHJpbmcuPC9kaXY+CisgICAgICAgIDxkbD48ZHQ+PHNwYW4gY2xhc3M9InN0cm9uZyI+UGFyYW1ldGVyczo8L3NwYW4+PC9kdD48ZGQ+PGNvZGU+dmFsdWU8L2NvZGU+IC0gQXJyYXkgdGhhdCBpcyB0aGUgc291cmNlIG9mIGNoYXJhY3RlcnM8L2RkPjxkZD48Y29kZT5vZmZzZXQ8L2NvZGU+IC0gVGhlIGluaXRpYWwgb2Zmc2V0PC9kZD48ZGQ+PGNvZGU+Y291bnQ8L2NvZGU+IC0gVGhlIGxlbmd0aDwvZGQ+CisgICAgICAgICAgICA8ZHQ+PHNwYW4gY2xhc3M9InN0cm9uZyI+VGhyb3dzOjwvc3Bhbj48L2R0PgorICAgICAgICAgICAgPGRkPjxjb2RlPjxhIGhyZWY9Ii4uLy4uL2phdmEvbGFuZy9JbmRleE91dE9mQm91bmRzRXhjZXB0aW9uLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBqYXZhLmxhbmciPkluZGV4T3V0T2ZCb3VuZHNFeGNlcHRpb248L2E+PC9jb2RlPiAtIElmIHRoZSA8Y29kZT5vZmZzZXQ8L2NvZGU+IGFuZCA8Y29kZT5jb3VudDwvY29kZT4gYXJndW1lbnRzIGluZGV4CisgICAgICAgICAgICAgICAgY2hhcmFjdGVycyBvdXRzaWRlIHRoZSBib3VuZHMgb2YgdGhlIDxjb2RlPnZhbHVlPC9jb2RlPiBhcnJheTwvZGQ+PC9kbD4KKyAgICA8L2xpPgorPC91bD4KKzxhIG5hbWU9IlN0cmluZyhpbnRbXSwgaW50LCBpbnQpIj4KKyAgICA8IS0tICAgLS0+Cis8L2E+Cis8dWwgY2xhc3M9ImJsb2NrTGlzdCI+CisgICAgPGxpIGNsYXNzPSJibG9ja0xpc3QiPgorICAgICAgICA8aDQ+U3RyaW5nPC9oND4KKzxwcmU+cHVibGljJm5ic3A7U3RyaW5nKGludFtdJm5ic3A7Y29kZVBvaW50cywKKyAgICAgIGludCZuYnNwO29mZnNldCwKKyAgICAgIGludCZuYnNwO2NvdW50KTwvcHJlPgorICAgICAgICA8ZGl2IGNsYXNzPSJibG9jayI+QWxsb2NhdGVzIGEgbmV3IDxjb2RlPlN0cmluZzwvY29kZT4gdGhhdCBjb250YWlucyBjaGFyYWN0ZXJzIGZyb20gYSBzdWJhcnJheQorICAgICAgICAgICAgb2YgdGhlIDxhIGhyZWY9IkNoYXJhY3Rlci5odG1sI3VuaWNvZGUiPlVuaWNvZGUgY29kZSBwb2ludDwvYT4gYXJyYXkKKyAgICAgICAgICAgIGFyZ3VtZW50LiAgVGhlIDxjb2RlPm9mZnNldDwvY29kZT4gYXJndW1lbnQgaXMgdGhlIGluZGV4IG9mIHRoZSBmaXJzdCBjb2RlCisgICAgICAgICAgICBwb2ludCBvZiB0aGUgc3ViYXJyYXkgYW5kIHRoZSA8Y29kZT5jb3VudDwvY29kZT4gYXJndW1lbnQgc3BlY2lmaWVzIHRoZQorICAgICAgICAgICAgbGVuZ3RoIG9mIHRoZSBzdWJhcnJheS4gIFRoZSBjb250ZW50cyBvZiB0aGUgc3ViYXJyYXkgYXJlIGNvbnZlcnRlZCB0bworICAgICAgICAgICAgPGNvZGU+Y2hhcjwvY29kZT5zOyBzdWJzZXF1ZW50IG1vZGlmaWNhdGlvbiBvZiB0aGUgPGNvZGU+aW50PC9jb2RlPiBhcnJheSBkb2VzIG5vdAorICAgICAgICAgICAgYWZmZWN0IHRoZSBuZXdseSBjcmVhdGVkIHN0cmluZy48L2Rpdj4KKyAgICAgICAgPGRsPjxkdD48c3BhbiBjbGFzcz0ic3Ryb25nIj5QYXJhbWV0ZXJzOjwvc3Bhbj48L2R0PjxkZD48Y29kZT5jb2RlUG9pbnRzPC9jb2RlPiAtIEFycmF5IHRoYXQgaXMgdGhlIHNvdXJjZSBvZiBVbmljb2RlIGNvZGUgcG9pbnRzPC9kZD48ZGQ+PGNvZGU+b2Zmc2V0PC9jb2RlPiAtIFRoZSBpbml0aWFsIG9mZnNldDwvZGQ+PGRkPjxjb2RlPmNvdW50PC9jb2RlPiAtIFRoZSBsZW5ndGg8L2RkPgorICAgICAgICAgICAgPGR0PjxzcGFuIGNsYXNzPSJzdHJvbmciPlRocm93czo8L3NwYW4+PC9kdD4KKyAgICAgICAgICAgIDxkZD48Y29kZT48YSBocmVmPSIuLi8uLi9qYXZhL2xhbmcvSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBqYXZhLmxhbmciPklsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbjwvYT48L2NvZGU+IC0gSWYgYW55IGludmFsaWQgVW5pY29kZSBjb2RlIHBvaW50IGlzIGZvdW5kIGluIDxjb2RlPmNvZGVQb2ludHM8L2NvZGU+PC9kZD4KKyAgICAgICAgICAgIDxkZD48Y29kZT48YSBocmVmPSIuLi8uLi9qYXZhL2xhbmcvSW5kZXhPdXRPZkJvdW5kc0V4Y2VwdGlvbi5odG1sIiB0aXRsZT0iY2xhc3MgaW4gamF2YS5sYW5nIj5JbmRleE91dE9mQm91bmRzRXhjZXB0aW9uPC9hPjwvY29kZT4gLSBJZiB0aGUgPGNvZGU+b2Zmc2V0PC9jb2RlPiBhbmQgPGNvZGU+Y291bnQ8L2NvZGU+IGFyZ3VtZW50cyBpbmRleAorICAgICAgICAgICAgICAgIGNoYXJhY3RlcnMgb3V0c2lkZSB0aGUgYm91bmRzIG9mIHRoZSA8Y29kZT5jb2RlUG9pbnRzPC9jb2RlPiBhcnJheTwvZGQ+PGR0PjxzcGFuIGNsYXNzPSJzdHJvbmciPlNpbmNlOjwvc3Bhbj48L2R0PgorICAgICAgICAgICAgPGRkPjEuNTwvZGQ+PC9kbD4KKyAgICA8L2xpPgorPC91bD4KKzxhIG5hbWU9IlN0cmluZyhieXRlW10sIGludCwgaW50LCBpbnQpIj4KKyAgICA8IS0tICAgLS0+Cis8L2E+Cis8dWwgY2xhc3M9ImJsb2NrTGlzdCI+CisgICAgPGxpIGNsYXNzPSJibG9ja0xpc3QiPgorICAgICAgICA8aDQ+U3RyaW5nPC9oND4KKzxwcmU+PGEgaHJlZj0iLi4vLi4vamF2YS9sYW5nL0RlcHJlY2F0ZWQuaHRtbCIgdGl0bGU9ImFubm90YXRpb24gaW4gamF2YS5sYW5nIj5ARGVwcmVjYXRlZDwvYT4KK3B1YmxpYyZuYnNwO1N0cmluZyhieXRlW10mbmJzcDthc2NpaSwKKyAgICAgICAgICAgICAgICAgaW50Jm5ic3A7aGlieXRlLAorICAgICAgICAgICAgICAgICBpbnQmbmJzcDtvZmZzZXQsCisgICAgICAgICAgICAgICAgIGludCZuYnNwO2NvdW50KTwvcHJlPgorICAgICAgICA8ZGl2IGNsYXNzPSJibG9jayI+PHNwYW4gY2xhc3M9InN0cm9uZyI+RGVwcmVjYXRlZC48L3NwYW4+Jm5ic3A7PGk+VGhpcyBtZXRob2QgZG9lcyBub3QgcHJvcGVybHkgY29udmVydCBieXRlcyBpbnRvIGNoYXJhY3RlcnMuCisgICAgICAgICAgICBBcyBvZiBKREsmbmJzcDsxLjEsIHRoZSBwcmVmZXJyZWQgd2F5IHRvIGRvIHRoaXMgaXMgdmlhIHRoZQorICAgICAgICAgICAgPGNvZGU+U3RyaW5nPC9jb2RlPiBjb25zdHJ1Y3RvcnMgdGhhdCB0YWtlIGEgPGEgaHJlZj0iLi4vLi4vamF2YS9uaW8vY2hhcnNldC9DaGFyc2V0Lmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBqYXZhLm5pby5jaGFyc2V0Ij48Y29kZT5DaGFyc2V0PC9jb2RlPjwvYT4sIGNoYXJzZXQgbmFtZSwgb3IgdGhhdCB1c2UgdGhlIHBsYXRmb3JtJ3MKKyAgICAgICAgICAgIGRlZmF1bHQgY2hhcnNldC48L2k+PC9kaXY+CisgICAgICAgIDxkaXYgY2xhc3M9ImJsb2NrIj5BbGxvY2F0ZXMgYSBuZXcgPGNvZGU+U3RyaW5nPC9jb2RlPiBjb25zdHJ1Y3RlZCBmcm9tIGEgc3ViYXJyYXkgb2YgYW4gYXJyYXkKKyAgICAgICAgICAgIG9mIDgtYml0IGludGVnZXIgdmFsdWVzLgorCisgICAgICAgICAgICA8cD4gVGhlIDxjb2RlPm9mZnNldDwvY29kZT4gYXJndW1lbnQgaXMgdGhlIGluZGV4IG9mIHRoZSBmaXJzdCBieXRlIG9mIHRoZQorICAgICAgICAgICAgICAgIHN1YmFycmF5LCBhbmQgdGhlIDxjb2RlPmNvdW50PC9jb2RlPiBhcmd1bWVudCBzcGVjaWZpZXMgdGhlIGxlbmd0aCBvZiB0aGUKKyAgICAgICAgICAgICAgICBzdWJhcnJheS4KKworICAgICAgICAgICAgPHA+IEVhY2ggPGNvZGU+Ynl0ZTwvY29kZT4gaW4gdGhlIHN1YmFycmF5IGlzIGNvbnZlcnRlZCB0byBhIDxjb2RlPmNoYXI8L2NvZGU+IGFzCisgICAgICAgICAgICAgICAgc3BlY2lmaWVkIGluIHRoZSBtZXRob2QgYWJvdmUuPC9kaXY+CisgICAgICAgIDxkbD48ZHQ+PHNwYW4gY2xhc3M9InN0cm9uZyI+UGFyYW1ldGVyczo8L3NwYW4+PC9kdD48ZGQ+PGNvZGU+YXNjaWk8L2NvZGU+IC0gVGhlIGJ5dGVzIHRvIGJlIGNvbnZlcnRlZCB0byBjaGFyYWN0ZXJzPC9kZD48ZGQ+PGNvZGU+aGlieXRlPC9jb2RlPiAtIFRoZSB0b3AgOCBiaXRzIG9mIGVhY2ggMTYtYml0IFVuaWNvZGUgY29kZSB1bml0PC9kZD48ZGQ+PGNvZGU+b2Zmc2V0PC9jb2RlPiAtIFRoZSBpbml0aWFsIG9mZnNldDwvZGQ+PGRkPjxjb2RlPmNvdW50PC9jb2RlPiAtIFRoZSBsZW5ndGg8L2RkPgorICAgICAgICAgICAgPGR0PjxzcGFuIGNsYXNzPSJzdHJvbmciPlRocm93czo8L3NwYW4+PC9kdD4KKyAgICAgICAgICAgIDxkZD48Y29kZT48YSBocmVmPSIuLi8uLi9qYXZhL2xhbmcvSW5kZXhPdXRPZkJvdW5kc0V4Y2VwdGlvbi5odG1sIiB0aXRsZT0iY2xhc3MgaW4gamF2YS5sYW5nIj5JbmRleE91dE9mQm91bmRzRXhjZXB0aW9uPC9hPjwvY29kZT4gLSBJZiB0aGUgPGNvZGU+b2Zmc2V0PC9jb2RlPiBvciA8Y29kZT5jb3VudDwvY29kZT4gYXJndW1lbnQgaXMgaW52YWxpZDwvZGQ+PGR0PjxzcGFuIGNsYXNzPSJzdHJvbmciPlNlZSBBbHNvOjwvc3Bhbj48L2R0PjxkZD48YSBocmVmPSIuLi8uLi9qYXZhL2xhbmcvU3RyaW5nLmh0bWwjU3RyaW5nKGJ5dGVbXSwgaW50KSI+PGNvZGU+U3RyaW5nKGJ5dGVbXSwgaW50KTwvY29kZT48L2E+LAorICAgICAgICAgICAgICAgIDxhIGhyZWY9Ii4uLy4uL2phdmEvbGFuZy9TdHJpbmcuaHRtbCNTdHJpbmcoYnl0ZVtdLCBpbnQsIGludCwgamF2YS5sYW5nLlN0cmluZykiPjxjb2RlPlN0cmluZyhieXRlW10sIGludCwgaW50LCBqYXZhLmxhbmcuU3RyaW5nKTwvY29kZT48L2E+LAorICAgICAgICAgICAgICAgIDxhIGhyZWY9Ii4uLy4uL2phdmEvbGFuZy9TdHJpbmcuaHRtbCNTdHJpbmcoYnl0ZVtdLCBpbnQsIGludCwgamF2YS5uaW8uY2hhcnNldC5DaGFyc2V0KSI+PGNvZGU+U3RyaW5nKGJ5dGVbXSwgaW50LCBpbnQsIGphdmEubmlvLmNoYXJzZXQuQ2hhcnNldCk8L2NvZGU+PC9hPiwKKyAgICAgICAgICAgICAgICA8YSBocmVmPSIuLi8uLi9qYXZhL2xhbmcvU3RyaW5nLmh0bWwjU3RyaW5nKGJ5dGVbXSwgaW50LCBpbnQpIj48Y29kZT5TdHJpbmcoYnl0ZVtdLCBpbnQsIGludCk8L2NvZGU+PC9hPiwKKyAgICAgICAgICAgICAgICA8YSBocmVmPSIuLi8uLi9qYXZhL2xhbmcvU3RyaW5nLmh0bWwjU3RyaW5nKGJ5dGVbXSwgamF2YS5sYW5nLlN0cmluZykiPjxjb2RlPlN0cmluZyhieXRlW10sIGphdmEubGFuZy5TdHJpbmcpPC9jb2RlPjwvYT4sCisgICAgICAgICAgICAgICAgPGEgaHJlZj0iLi4vLi4vamF2YS9sYW5nL1N0cmluZy5odG1sI1N0cmluZyhieXRlW10sIGphdmEubmlvLmNoYXJzZXQuQ2hhcnNldCkiPjxjb2RlPlN0cmluZyhieXRlW10sIGphdmEubmlvLmNoYXJzZXQuQ2hhcnNldCk8L2NvZGU+PC9hPiwKKyAgICAgICAgICAgICAgICA8YSBocmVmPSIuLi8uLi9qYXZhL2xhbmcvU3RyaW5nLmh0bWwjU3RyaW5nKGJ5dGVbXSkiPjxjb2RlPlN0cmluZyhieXRlW10pPC9jb2RlPjwvYT48L2RkPjwvZGw+CisgICAgPC9saT4KKzwvdWw+Cis8YSBuYW1lPSJTdHJpbmcoYnl0ZVtdLCBpbnQpIj4KKyAgICA8IS0tICAgLS0+Cis8L2E+Cis8dWwgY2xhc3M9ImJsb2NrTGlzdCI+CisgICAgPGxpIGNsYXNzPSJibG9ja0xpc3QiPgorICAgICAgICA8aDQ+U3RyaW5nPC9oND4KKzxwcmU+PGEgaHJlZj0iLi4vLi4vamF2YS9sYW5nL0RlcHJlY2F0ZWQuaHRtbCIgdGl0bGU9ImFubm90YXRpb24gaW4gamF2YS5sYW5nIj5ARGVwcmVjYXRlZDwvYT4KK3B1YmxpYyZuYnNwO1N0cmluZyhieXRlW10mbmJzcDthc2NpaSwKKyAgICAgICAgICAgICAgICAgaW50Jm5ic3A7aGlieXRlKTwvcHJlPgorICAgICAgICA8ZGl2IGNsYXNzPSJibG9jayI+PHNwYW4gY2xhc3M9InN0cm9uZyI+RGVwcmVjYXRlZC48L3NwYW4+Jm5ic3A7PGk+VGhpcyBtZXRob2QgZG9lcyBub3QgcHJvcGVybHkgY29udmVydCBieXRlcyBpbnRvCisgICAgICAgICAgICBjaGFyYWN0ZXJzLiAgQXMgb2YgSkRLJm5ic3A7MS4xLCB0aGUgcHJlZmVycmVkIHdheSB0byBkbyB0aGlzIGlzIHZpYSB0aGUKKyAgICAgICAgICAgIDxjb2RlPlN0cmluZzwvY29kZT4gY29uc3RydWN0b3JzIHRoYXQgdGFrZSBhIDxhIGhyZWY9Ii4uLy4uL2phdmEvbmlvL2NoYXJzZXQvQ2hhcnNldC5odG1sIiB0aXRsZT0iY2xhc3MgaW4gamF2YS5uaW8uY2hhcnNldCI+PGNvZGU+Q2hhcnNldDwvY29kZT48L2E+LCBjaGFyc2V0IG5hbWUsIG9yIHRoYXQgdXNlIHRoZSBwbGF0Zm9ybSdzCisgICAgICAgICAgICBkZWZhdWx0IGNoYXJzZXQuPC9pPjwvZGl2PgorICAgICAgICA8ZGl2IGNsYXNzPSJibG9jayI+QWxsb2NhdGVzIGEgbmV3IDxjb2RlPlN0cmluZzwvY29kZT4gY29udGFpbmluZyBjaGFyYWN0ZXJzIGNvbnN0cnVjdGVkIGZyb20KKyAgICAgICAgICAgIGFuIGFycmF5IG9mIDgtYml0IGludGVnZXIgdmFsdWVzLiBFYWNoIGNoYXJhY3RlciA8aT5jPC9pPmluIHRoZQorICAgICAgICAgICAgcmVzdWx0aW5nIHN0cmluZyBpcyBjb25zdHJ1Y3RlZCBmcm9tIHRoZSBjb3JyZXNwb25kaW5nIGNvbXBvbmVudAorICAgICAgICAgICAgPGk+YjwvaT4gaW4gdGhlIGJ5dGUgYXJyYXkgc3VjaCB0aGF0OgorCisgICAgICAgICAgICA8YmxvY2txdW90ZT48cHJlPgorICAgICA8Yj48aT5jPC9pPjwvYj4gPT0gKGNoYXIpKCgoaGlieXRlICZhbXA7IDB4ZmYpICZsdDsmbHQ7IDgpCisgICAgICAgICAgICAgICAgICAgICAgICAgfCAoPGI+PGk+YjwvaT48L2I+ICZhbXA7IDB4ZmYpKQorIDwvcHJlPjwvYmxvY2txdW90ZT48L2Rpdj4KKyAgICAgICAgPGRsPjxkdD48c3BhbiBjbGFzcz0ic3Ryb25nIj5QYXJhbWV0ZXJzOjwvc3Bhbj48L2R0PjxkZD48Y29kZT5hc2NpaTwvY29kZT4gLSBUaGUgYnl0ZXMgdG8gYmUgY29udmVydGVkIHRvIGNoYXJhY3RlcnM8L2RkPjxkZD48Y29kZT5oaWJ5dGU8L2NvZGU+IC0gVGhlIHRvcCA4IGJpdHMgb2YgZWFjaCAxNi1iaXQgVW5pY29kZSBjb2RlIHVuaXQ8L2RkPjxkdD48c3BhbiBjbGFzcz0ic3Ryb25nIj5TZWUgQWxzbzo8L3NwYW4+PC9kdD48ZGQ+PGEgaHJlZj0iLi4vLi4vamF2YS9sYW5nL1N0cmluZy5odG1sI1N0cmluZyhieXRlW10sIGludCwgaW50LCBqYXZhLmxhbmcuU3RyaW5nKSI+PGNvZGU+U3RyaW5nKGJ5dGVbXSwgaW50LCBpbnQsIGphdmEubGFuZy5TdHJpbmcpPC9jb2RlPjwvYT4sCisgICAgICAgICAgICA8YSBocmVmPSIuLi8uLi9qYXZhL2xhbmcvU3RyaW5nLmh0bWwjU3RyaW5nKGJ5dGVbXSwgaW50LCBpbnQsIGphdmEubmlvLmNoYXJzZXQuQ2hhcnNldCkiPjxjb2RlPlN0cmluZyhieXRlW10sIGludCwgaW50LCBqYXZhLm5pby5jaGFyc2V0LkNoYXJzZXQpPC9jb2RlPjwvYT4sCisgICAgICAgICAgICA8YSBocmVmPSIuLi8uLi9qYXZhL2xhbmcvU3RyaW5nLmh0bWwjU3RyaW5nKGJ5dGVbXSwgaW50LCBpbnQpIj48Y29kZT5TdHJpbmcoYnl0ZVtdLCBpbnQsIGludCk8L2NvZGU+PC9hPiwKKyAgICAgICAgICAgIDxhIGhyZWY9Ii4uLy4uL2phdmEvbGFuZy9TdHJpbmcuaHRtbCNTdHJpbmcoYnl0ZVtdLCBqYXZhLmxhbmcuU3RyaW5nKSI+PGNvZGU+U3RyaW5nKGJ5dGVbXSwgamF2YS5sYW5nLlN0cmluZyk8L2NvZGU+PC9hPiwKKyAgICAgICAgICAgIDxhIGhyZWY9Ii4uLy4uL2phdmEvbGFuZy9TdHJpbmcuaHRtbCNTdHJpbmcoYnl0ZVtdLCBqYXZhLm5pby5jaGFyc2V0LkNoYXJzZXQpIj48Y29kZT5TdHJpbmcoYnl0ZVtdLCBqYXZhLm5pby5jaGFyc2V0LkNoYXJzZXQpPC9jb2RlPjwvYT4sCisgICAgICAgICAgICA8YSBocmVmPSIuLi8uLi9qYXZhL2xhbmcvU3RyaW5nLmh0bWwjU3RyaW5nKGJ5dGVbXSkiPjxjb2RlPlN0cmluZyhieXRlW10pPC9jb2RlPjwvYT48L2RkPjwvZGw+CisgICAgPC9saT4KKzwvdWw+Cis8YSBuYW1lPSJTdHJpbmcoYnl0ZVtdLCBpbnQsIGludCwgamF2YS5sYW5nLlN0cmluZykiPgorICAgIDwhLS0gICAtLT4KKzwvYT4KKzx1bCBjbGFzcz0iYmxvY2tMaXN0Ij4KKyAgICA8bGkgY2xhc3M9ImJsb2NrTGlzdCI+CisgICAgICAgIDxoND5TdHJpbmc8L2g0PgorPHByZT5wdWJsaWMmbmJzcDtTdHJpbmcoYnl0ZVtdJm5ic3A7Ynl0ZXMsCisgICAgICBpbnQmbmJzcDtvZmZzZXQsCisgICAgICBpbnQmbmJzcDtsZW5ndGgsCisgICAgICA8YSBocmVmPSIuLi8uLi9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBqYXZhLmxhbmciPlN0cmluZzwvYT4mbmJzcDtjaGFyc2V0TmFtZSkKKyAgICAgICB0aHJvd3MgPGEgaHJlZj0iLi4vLi4vamF2YS9pby9VbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBqYXZhLmlvIj5VbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uPC9hPjwvcHJlPgorICAgICAgICA8ZGl2IGNsYXNzPSJibG9jayI+Q29uc3RydWN0cyBhIG5ldyA8Y29kZT5TdHJpbmc8L2NvZGU+IGJ5IGRlY29kaW5nIHRoZSBzcGVjaWZpZWQgc3ViYXJyYXkgb2YKKyAgICAgICAgICAgIGJ5dGVzIHVzaW5nIHRoZSBzcGVjaWZpZWQgY2hhcnNldC4gIFRoZSBsZW5ndGggb2YgdGhlIG5ldyA8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICAgICAgICBpcyBhIGZ1bmN0aW9uIG9mIHRoZSBjaGFyc2V0LCBhbmQgaGVuY2UgbWF5IG5vdCBiZSBlcXVhbCB0byB0aGUgbGVuZ3RoCisgICAgICAgICAgICBvZiB0aGUgc3ViYXJyYXkuCisKKyAgICAgICAgICAgIDxwPiBUaGUgYmVoYXZpb3Igb2YgdGhpcyBjb25zdHJ1Y3RvciB3aGVuIHRoZSBnaXZlbiBieXRlcyBhcmUgbm90IHZhbGlkCisgICAgICAgICAgICAgICAgaW4gdGhlIGdpdmVuIGNoYXJzZXQgaXMgdW5zcGVjaWZpZWQuICBUaGUgPGEgaHJlZj0iLi4vLi4vamF2YS9uaW8vY2hhcnNldC9DaGFyc2V0RGVjb2Rlci5odG1sIiB0aXRsZT0iY2xhc3MgaW4gamF2YS5uaW8uY2hhcnNldCI+PGNvZGU+Q2hhcnNldERlY29kZXI8L2NvZGU+PC9hPiBjbGFzcyBzaG91bGQgYmUgdXNlZCB3aGVuIG1vcmUgY29udHJvbAorICAgICAgICAgICAgICAgIG92ZXIgdGhlIGRlY29kaW5nIHByb2Nlc3MgaXMgcmVxdWlyZWQuPC9kaXY+CisgICAgICAgIDxkbD48ZHQ+PHNwYW4gY2xhc3M9InN0cm9uZyI+UGFyYW1ldGVyczo8L3NwYW4+PC9kdD48ZGQ+PGNvZGU+Ynl0ZXM8L2NvZGU+IC0gVGhlIGJ5dGVzIHRvIGJlIGRlY29kZWQgaW50byBjaGFyYWN0ZXJzPC9kZD48ZGQ+PGNvZGU+b2Zmc2V0PC9jb2RlPiAtIFRoZSBpbmRleCBvZiB0aGUgZmlyc3QgYnl0ZSB0byBkZWNvZGU8L2RkPjxkZD48Y29kZT5sZW5ndGg8L2NvZGU+IC0gVGhlIG51bWJlciBvZiBieXRlcyB0byBkZWNvZGU8L2RkPjxkZD48Y29kZT5jaGFyc2V0TmFtZTwvY29kZT4gLSBUaGUgbmFtZSBvZiBhIHN1cHBvcnRlZCA8YSBocmVmPSIuLi8uLi9qYXZhL25pby9jaGFyc2V0L0NoYXJzZXQuaHRtbCIgdGl0bGU9ImNsYXNzIGluIGphdmEubmlvLmNoYXJzZXQiPmNoYXJzZXQ8L2E+PC9kZD4KKyAgICAgICAgICAgIDxkdD48c3BhbiBjbGFzcz0ic3Ryb25nIj5UaHJvd3M6PC9zcGFuPjwvZHQ+CisgICAgICAgICAgICA8ZGQ+PGNvZGU+PGEgaHJlZj0iLi4vLi4vamF2YS9pby9VbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBqYXZhLmlvIj5VbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uPC9hPjwvY29kZT4gLSBJZiB0aGUgbmFtZWQgY2hhcnNldCBpcyBub3Qgc3VwcG9ydGVkPC9kZD4KKyAgICAgICAgICAgIDxkZD48Y29kZT48YSBocmVmPSIuLi8uLi9qYXZhL2xhbmcvSW5kZXhPdXRPZkJvdW5kc0V4Y2VwdGlvbi5odG1sIiB0aXRsZT0iY2xhc3MgaW4gamF2YS5sYW5nIj5JbmRleE91dE9mQm91bmRzRXhjZXB0aW9uPC9hPjwvY29kZT4gLSBJZiB0aGUgPGNvZGU+b2Zmc2V0PC9jb2RlPiBhbmQgPGNvZGU+bGVuZ3RoPC9jb2RlPiBhcmd1bWVudHMgaW5kZXgKKyAgICAgICAgICAgICAgICBjaGFyYWN0ZXJzIG91dHNpZGUgdGhlIGJvdW5kcyBvZiB0aGUgPGNvZGU+Ynl0ZXM8L2NvZGU+IGFycmF5PC9kZD48ZHQ+PHNwYW4gY2xhc3M9InN0cm9uZyI+U2luY2U6PC9zcGFuPjwvZHQ+CisgICAgICAgICAgICA8ZGQ+SkRLMS4xPC9kZD48L2RsPgorICAgIDwvbGk+Cis8L3VsPgorPGEgbmFtZT0iU3RyaW5nKGJ5dGVbXSwgaW50LCBpbnQsIGphdmEubmlvLmNoYXJzZXQuQ2hhcnNldCkiPgorICAgIDwhLS0gICAtLT4KKzwvYT4KKzx1bCBjbGFzcz0iYmxvY2tMaXN0Ij4KKyAgICA8bGkgY2xhc3M9ImJsb2NrTGlzdCI+CisgICAgICAgIDxoND5TdHJpbmc8L2g0PgorPHByZT5wdWJsaWMmbmJzcDtTdHJpbmcoYnl0ZVtdJm5ic3A7Ynl0ZXMsCisgICAgICBpbnQmbmJzcDtvZmZzZXQsCisgICAgICBpbnQmbmJzcDtsZW5ndGgsCisgICAgICA8YSBocmVmPSIuLi8uLi9qYXZhL25pby9jaGFyc2V0L0NoYXJzZXQuaHRtbCIgdGl0bGU9ImNsYXNzIGluIGphdmEubmlvLmNoYXJzZXQiPkNoYXJzZXQ8L2E+Jm5ic3A7Y2hhcnNldCk8L3ByZT4KKyAgICAgICAgPGRpdiBjbGFzcz0iYmxvY2siPkNvbnN0cnVjdHMgYSBuZXcgPGNvZGU+U3RyaW5nPC9jb2RlPiBieSBkZWNvZGluZyB0aGUgc3BlY2lmaWVkIHN1YmFycmF5IG9mCisgICAgICAgICAgICBieXRlcyB1c2luZyB0aGUgc3BlY2lmaWVkIDxhIGhyZWY9Ii4uLy4uL2phdmEvbmlvL2NoYXJzZXQvQ2hhcnNldC5odG1sIiB0aXRsZT0iY2xhc3MgaW4gamF2YS5uaW8uY2hhcnNldCI+Y2hhcnNldDwvYT4uCisgICAgICAgICAgICBUaGUgbGVuZ3RoIG9mIHRoZSBuZXcgPGNvZGU+U3RyaW5nPC9jb2RlPiBpcyBhIGZ1bmN0aW9uIG9mIHRoZSBjaGFyc2V0LCBhbmQKKyAgICAgICAgICAgIGhlbmNlIG1heSBub3QgYmUgZXF1YWwgdG8gdGhlIGxlbmd0aCBvZiB0aGUgc3ViYXJyYXkuCisKKyAgICAgICAgICAgIDxwPiBUaGlzIG1ldGhvZCBhbHdheXMgcmVwbGFjZXMgbWFsZm9ybWVkLWlucHV0IGFuZCB1bm1hcHBhYmxlLWNoYXJhY3RlcgorICAgICAgICAgICAgICAgIHNlcXVlbmNlcyB3aXRoIHRoaXMgY2hhcnNldCdzIGRlZmF1bHQgcmVwbGFjZW1lbnQgc3RyaW5nLiAgVGhlIDxhIGhyZWY9Ii4uLy4uL2phdmEvbmlvL2NoYXJzZXQvQ2hhcnNldERlY29kZXIuaHRtbCIgdGl0bGU9ImNsYXNzIGluIGphdmEubmlvLmNoYXJzZXQiPjxjb2RlPkNoYXJzZXREZWNvZGVyPC9jb2RlPjwvYT4gY2xhc3Mgc2hvdWxkIGJlIHVzZWQgd2hlbiBtb3JlIGNvbnRyb2wKKyAgICAgICAgICAgICAgICBvdmVyIHRoZSBkZWNvZGluZyBwcm9jZXNzIGlzIHJlcXVpcmVkLjwvZGl2PgorICAgICAgICA8ZGw+PGR0PjxzcGFuIGNsYXNzPSJzdHJvbmciPlBhcmFtZXRlcnM6PC9zcGFuPjwvZHQ+PGRkPjxjb2RlPmJ5dGVzPC9jb2RlPiAtIFRoZSBieXRlcyB0byBiZSBkZWNvZGVkIGludG8gY2hhcmFjdGVyczwvZGQ+PGRkPjxjb2RlPm9mZnNldDwvY29kZT4gLSBUaGUgaW5kZXggb2YgdGhlIGZpcnN0IGJ5dGUgdG8gZGVjb2RlPC9kZD48ZGQ+PGNvZGU+bGVuZ3RoPC9jb2RlPiAtIFRoZSBudW1iZXIgb2YgYnl0ZXMgdG8gZGVjb2RlPC9kZD48ZGQ+PGNvZGU+Y2hhcnNldDwvY29kZT4gLSBUaGUgPGEgaHJlZj0iLi4vLi4vamF2YS9uaW8vY2hhcnNldC9DaGFyc2V0Lmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBqYXZhLm5pby5jaGFyc2V0Ij5jaGFyc2V0PC9hPiB0byBiZSB1c2VkIHRvCisgICAgICAgICAgICBkZWNvZGUgdGhlIDxjb2RlPmJ5dGVzPC9jb2RlPjwvZGQ+CisgICAgICAgICAgICA8ZHQ+PHNwYW4gY2xhc3M9InN0cm9uZyI+VGhyb3dzOjwvc3Bhbj48L2R0PgorICAgICAgICAgICAgPGRkPjxjb2RlPjxhIGhyZWY9Ii4uLy4uL2phdmEvbGFuZy9JbmRleE91dE9mQm91bmRzRXhjZXB0aW9uLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBqYXZhLmxhbmciPkluZGV4T3V0T2ZCb3VuZHNFeGNlcHRpb248L2E+PC9jb2RlPiAtIElmIHRoZSA8Y29kZT5vZmZzZXQ8L2NvZGU+IGFuZCA8Y29kZT5sZW5ndGg8L2NvZGU+IGFyZ3VtZW50cyBpbmRleAorICAgICAgICAgICAgICAgIGNoYXJhY3RlcnMgb3V0c2lkZSB0aGUgYm91bmRzIG9mIHRoZSA8Y29kZT5ieXRlczwvY29kZT4gYXJyYXk8L2RkPjxkdD48c3BhbiBjbGFzcz0ic3Ryb25nIj5TaW5jZTo8L3NwYW4+PC9kdD4KKyAgICAgICAgICAgIDxkZD4xLjY8L2RkPjwvZGw+CisgICAgPC9saT4KKzwvdWw+Cis8YSBuYW1lPSJTdHJpbmcoYnl0ZVtdLCBqYXZhLmxhbmcuU3RyaW5nKSI+CisgICAgPCEtLSAgIC0tPgorPC9hPgorPHVsIGNsYXNzPSJibG9ja0xpc3QiPgorICAgIDxsaSBjbGFzcz0iYmxvY2tMaXN0Ij4KKyAgICAgICAgPGg0PlN0cmluZzwvaDQ+Cis8cHJlPnB1YmxpYyZuYnNwO1N0cmluZyhieXRlW10mbmJzcDtieXRlcywKKyAgICAgIDxhIGhyZWY9Ii4uLy4uL2phdmEvbGFuZy9TdHJpbmcuaHRtbCIgdGl0bGU9ImNsYXNzIGluIGphdmEubGFuZyI+U3RyaW5nPC9hPiZuYnNwO2NoYXJzZXROYW1lKQorICAgICAgIHRocm93cyA8YSBocmVmPSIuLi8uLi9qYXZhL2lvL1Vuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb24uaHRtbCIgdGl0bGU9ImNsYXNzIGluIGphdmEuaW8iPlVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb248L2E+PC9wcmU+CisgICAgICAgIDxkaXYgY2xhc3M9ImJsb2NrIj5Db25zdHJ1Y3RzIGEgbmV3IDxjb2RlPlN0cmluZzwvY29kZT4gYnkgZGVjb2RpbmcgdGhlIHNwZWNpZmllZCBhcnJheSBvZiBieXRlcworICAgICAgICAgICAgdXNpbmcgdGhlIHNwZWNpZmllZCA8YSBocmVmPSIuLi8uLi9qYXZhL25pby9jaGFyc2V0L0NoYXJzZXQuaHRtbCIgdGl0bGU9ImNsYXNzIGluIGphdmEubmlvLmNoYXJzZXQiPmNoYXJzZXQ8L2E+LiAgVGhlCisgICAgICAgICAgICBsZW5ndGggb2YgdGhlIG5ldyA8Y29kZT5TdHJpbmc8L2NvZGU+IGlzIGEgZnVuY3Rpb24gb2YgdGhlIGNoYXJzZXQsIGFuZCBoZW5jZQorICAgICAgICAgICAgbWF5IG5vdCBiZSBlcXVhbCB0byB0aGUgbGVuZ3RoIG9mIHRoZSBieXRlIGFycmF5LgorCisgICAgICAgICAgICA8cD4gVGhlIGJlaGF2aW9yIG9mIHRoaXMgY29uc3RydWN0b3Igd2hlbiB0aGUgZ2l2ZW4gYnl0ZXMgYXJlIG5vdCB2YWxpZAorICAgICAgICAgICAgICAgIGluIHRoZSBnaXZlbiBjaGFyc2V0IGlzIHVuc3BlY2lmaWVkLiAgVGhlIDxhIGhyZWY9Ii4uLy4uL2phdmEvbmlvL2NoYXJzZXQvQ2hhcnNldERlY29kZXIuaHRtbCIgdGl0bGU9ImNsYXNzIGluIGphdmEubmlvLmNoYXJzZXQiPjxjb2RlPkNoYXJzZXREZWNvZGVyPC9jb2RlPjwvYT4gY2xhc3Mgc2hvdWxkIGJlIHVzZWQgd2hlbiBtb3JlIGNvbnRyb2wKKyAgICAgICAgICAgICAgICBvdmVyIHRoZSBkZWNvZGluZyBwcm9jZXNzIGlzIHJlcXVpcmVkLjwvZGl2PgorICAgICAgICA8ZGw+PGR0PjxzcGFuIGNsYXNzPSJzdHJvbmciPlBhcmFtZXRlcnM6PC9zcGFuPjwvZHQ+PGRkPjxjb2RlPmJ5dGVzPC9jb2RlPiAtIFRoZSBieXRlcyB0byBiZSBkZWNvZGVkIGludG8gY2hhcmFjdGVyczwvZGQ+PGRkPjxjb2RlPmNoYXJzZXROYW1lPC9jb2RlPiAtIFRoZSBuYW1lIG9mIGEgc3VwcG9ydGVkIDxhIGhyZWY9Ii4uLy4uL2phdmEvbmlvL2NoYXJzZXQvQ2hhcnNldC5odG1sIiB0aXRsZT0iY2xhc3MgaW4gamF2YS5uaW8uY2hhcnNldCI+Y2hhcnNldDwvYT48L2RkPgorICAgICAgICAgICAgPGR0PjxzcGFuIGNsYXNzPSJzdHJvbmciPlRocm93czo8L3NwYW4+PC9kdD4KKyAgICAgICAgICAgIDxkZD48Y29kZT48YSBocmVmPSIuLi8uLi9qYXZhL2lvL1Vuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb24uaHRtbCIgdGl0bGU9ImNsYXNzIGluIGphdmEuaW8iPlVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb248L2E+PC9jb2RlPiAtIElmIHRoZSBuYW1lZCBjaGFyc2V0IGlzIG5vdCBzdXBwb3J0ZWQ8L2RkPjxkdD48c3BhbiBjbGFzcz0ic3Ryb25nIj5TaW5jZTo8L3NwYW4+PC9kdD4KKyAgICAgICAgICAgIDxkZD5KREsxLjE8L2RkPjwvZGw+CisgICAgPC9saT4KKzwvdWw+Cis8YSBuYW1lPSJTdHJpbmcoYnl0ZVtdLCBqYXZhLm5pby5jaGFyc2V0LkNoYXJzZXQpIj4KKyAgICA8IS0tICAgLS0+Cis8L2E+Cis8dWwgY2xhc3M9ImJsb2NrTGlzdCI+CisgICAgPGxpIGNsYXNzPSJibG9ja0xpc3QiPgorICAgICAgICA8aDQ+U3RyaW5nPC9oND4KKzxwcmU+cHVibGljJm5ic3A7U3RyaW5nKGJ5dGVbXSZuYnNwO2J5dGVzLAorICAgICAgPGEgaHJlZj0iLi4vLi4vamF2YS9uaW8vY2hhcnNldC9DaGFyc2V0Lmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBqYXZhLm5pby5jaGFyc2V0Ij5DaGFyc2V0PC9hPiZuYnNwO2NoYXJzZXQpPC9wcmU+CisgICAgICAgIDxkaXYgY2xhc3M9ImJsb2NrIj5Db25zdHJ1Y3RzIGEgbmV3IDxjb2RlPlN0cmluZzwvY29kZT4gYnkgZGVjb2RpbmcgdGhlIHNwZWNpZmllZCBhcnJheSBvZgorICAgICAgICAgICAgYnl0ZXMgdXNpbmcgdGhlIHNwZWNpZmllZCA8YSBocmVmPSIuLi8uLi9qYXZhL25pby9jaGFyc2V0L0NoYXJzZXQuaHRtbCIgdGl0bGU9ImNsYXNzIGluIGphdmEubmlvLmNoYXJzZXQiPmNoYXJzZXQ8L2E+LgorICAgICAgICAgICAgVGhlIGxlbmd0aCBvZiB0aGUgbmV3IDxjb2RlPlN0cmluZzwvY29kZT4gaXMgYSBmdW5jdGlvbiBvZiB0aGUgY2hhcnNldCwgYW5kCisgICAgICAgICAgICBoZW5jZSBtYXkgbm90IGJlIGVxdWFsIHRvIHRoZSBsZW5ndGggb2YgdGhlIGJ5dGUgYXJyYXkuCisKKyAgICAgICAgICAgIDxwPiBUaGlzIG1ldGhvZCBhbHdheXMgcmVwbGFjZXMgbWFsZm9ybWVkLWlucHV0IGFuZCB1bm1hcHBhYmxlLWNoYXJhY3RlcgorICAgICAgICAgICAgICAgIHNlcXVlbmNlcyB3aXRoIHRoaXMgY2hhcnNldCdzIGRlZmF1bHQgcmVwbGFjZW1lbnQgc3RyaW5nLiAgVGhlIDxhIGhyZWY9Ii4uLy4uL2phdmEvbmlvL2NoYXJzZXQvQ2hhcnNldERlY29kZXIuaHRtbCIgdGl0bGU9ImNsYXNzIGluIGphdmEubmlvLmNoYXJzZXQiPjxjb2RlPkNoYXJzZXREZWNvZGVyPC9jb2RlPjwvYT4gY2xhc3Mgc2hvdWxkIGJlIHVzZWQgd2hlbiBtb3JlIGNvbnRyb2wKKyAgICAgICAgICAgICAgICBvdmVyIHRoZSBkZWNvZGluZyBwcm9jZXNzIGlzIHJlcXVpcmVkLjwvZGl2PgorICAgICAgICA8ZGw+PGR0PjxzcGFuIGNsYXNzPSJzdHJvbmciPlBhcmFtZXRlcnM6PC9zcGFuPjwvZHQ+PGRkPjxjb2RlPmJ5dGVzPC9jb2RlPiAtIFRoZSBieXRlcyB0byBiZSBkZWNvZGVkIGludG8gY2hhcmFjdGVyczwvZGQ+PGRkPjxjb2RlPmNoYXJzZXQ8L2NvZGU+IC0gVGhlIDxhIGhyZWY9Ii4uLy4uL2phdmEvbmlvL2NoYXJzZXQvQ2hhcnNldC5odG1sIiB0aXRsZT0iY2xhc3MgaW4gamF2YS5uaW8uY2hhcnNldCI+Y2hhcnNldDwvYT4gdG8gYmUgdXNlZCB0bworICAgICAgICAgICAgZGVjb2RlIHRoZSA8Y29kZT5ieXRlczwvY29kZT48L2RkPjxkdD48c3BhbiBjbGFzcz0ic3Ryb25nIj5TaW5jZTo8L3NwYW4+PC9kdD4KKyAgICAgICAgICAgIDxkZD4xLjY8L2RkPjwvZGw+CisgICAgPC9saT4KKzwvdWw+Cis8YSBuYW1lPSJTdHJpbmcoYnl0ZVtdLCBpbnQsIGludCkiPgorICAgIDwhLS0gICAtLT4KKzwvYT4KKzx1bCBjbGFzcz0iYmxvY2tMaXN0Ij4KKyAgICA8bGkgY2xhc3M9ImJsb2NrTGlzdCI+CisgICAgICAgIDxoND5TdHJpbmc8L2g0PgorPHByZT5wdWJsaWMmbmJzcDtTdHJpbmcoYnl0ZVtdJm5ic3A7Ynl0ZXMsCisgICAgICBpbnQmbmJzcDtvZmZzZXQsCisgICAgICBpbnQmbmJzcDtsZW5ndGgpPC9wcmU+CisgICAgICAgIDxkaXYgY2xhc3M9ImJsb2NrIj5Db25zdHJ1Y3RzIGEgbmV3IDxjb2RlPlN0cmluZzwvY29kZT4gYnkgZGVjb2RpbmcgdGhlIHNwZWNpZmllZCBzdWJhcnJheSBvZgorICAgICAgICAgICAgYnl0ZXMgdXNpbmcgdGhlIHBsYXRmb3JtJ3MgZGVmYXVsdCBjaGFyc2V0LiAgVGhlIGxlbmd0aCBvZiB0aGUgbmV3CisgICAgICAgICAgICA8Y29kZT5TdHJpbmc8L2NvZGU+IGlzIGEgZnVuY3Rpb24gb2YgdGhlIGNoYXJzZXQsIGFuZCBoZW5jZSBtYXkgbm90IGJlIGVxdWFsCisgICAgICAgICAgICB0byB0aGUgbGVuZ3RoIG9mIHRoZSBzdWJhcnJheS4KKworICAgICAgICAgICAgPHA+IFRoZSBiZWhhdmlvciBvZiB0aGlzIGNvbnN0cnVjdG9yIHdoZW4gdGhlIGdpdmVuIGJ5dGVzIGFyZSBub3QgdmFsaWQKKyAgICAgICAgICAgICAgICBpbiB0aGUgZGVmYXVsdCBjaGFyc2V0IGlzIHVuc3BlY2lmaWVkLiAgVGhlIDxhIGhyZWY9Ii4uLy4uL2phdmEvbmlvL2NoYXJzZXQvQ2hhcnNldERlY29kZXIuaHRtbCIgdGl0bGU9ImNsYXNzIGluIGphdmEubmlvLmNoYXJzZXQiPjxjb2RlPkNoYXJzZXREZWNvZGVyPC9jb2RlPjwvYT4gY2xhc3Mgc2hvdWxkIGJlIHVzZWQgd2hlbiBtb3JlIGNvbnRyb2wKKyAgICAgICAgICAgICAgICBvdmVyIHRoZSBkZWNvZGluZyBwcm9jZXNzIGlzIHJlcXVpcmVkLjwvZGl2PgorICAgICAgICA8ZGw+PGR0PjxzcGFuIGNsYXNzPSJzdHJvbmciPlBhcmFtZXRlcnM6PC9zcGFuPjwvZHQ+PGRkPjxjb2RlPmJ5dGVzPC9jb2RlPiAtIFRoZSBieXRlcyB0byBiZSBkZWNvZGVkIGludG8gY2hhcmFjdGVyczwvZGQ+PGRkPjxjb2RlPm9mZnNldDwvY29kZT4gLSBUaGUgaW5kZXggb2YgdGhlIGZpcnN0IGJ5dGUgdG8gZGVjb2RlPC9kZD48ZGQ+PGNvZGU+bGVuZ3RoPC9jb2RlPiAtIFRoZSBudW1iZXIgb2YgYnl0ZXMgdG8gZGVjb2RlPC9kZD4KKyAgICAgICAgICAgIDxkdD48c3BhbiBjbGFzcz0ic3Ryb25nIj5UaHJvd3M6PC9zcGFuPjwvZHQ+CisgICAgICAgICAgICA8ZGQ+PGNvZGU+PGEgaHJlZj0iLi4vLi4vamF2YS9sYW5nL0luZGV4T3V0T2ZCb3VuZHNFeGNlcHRpb24uaHRtbCIgdGl0bGU9ImNsYXNzIGluIGphdmEubGFuZyI+SW5kZXhPdXRPZkJvdW5kc0V4Y2VwdGlvbjwvYT48L2NvZGU+IC0gSWYgdGhlIDxjb2RlPm9mZnNldDwvY29kZT4gYW5kIHRoZSA8Y29kZT5sZW5ndGg8L2NvZGU+IGFyZ3VtZW50cyBpbmRleAorICAgICAgICAgICAgICAgIGNoYXJhY3RlcnMgb3V0c2lkZSB0aGUgYm91bmRzIG9mIHRoZSA8Y29kZT5ieXRlczwvY29kZT4gYXJyYXk8L2RkPjxkdD48c3BhbiBjbGFzcz0ic3Ryb25nIj5TaW5jZTo8L3NwYW4+PC9kdD4KKyAgICAgICAgICAgIDxkZD5KREsxLjE8L2RkPjwvZGw+CisgICAgPC9saT4KKzwvdWw+Cis8YSBuYW1lPSJTdHJpbmcoYnl0ZVtdKSI+CisgICAgPCEtLSAgIC0tPgorPC9hPgorPHVsIGNsYXNzPSJibG9ja0xpc3QiPgorICAgIDxsaSBjbGFzcz0iYmxvY2tMaXN0Ij4KKyAgICAgICAgPGg0PlN0cmluZzwvaDQ+CisgICAgICAgIDxwcmU+cHVibGljJm5ic3A7U3RyaW5nKGJ5dGVbXSZuYnNwO2J5dGVzKTwvcHJlPgorICAgICAgICA8ZGl2IGNsYXNzPSJibG9jayI+Q29uc3RydWN0cyBhIG5ldyA8Y29kZT5TdHJpbmc8L2NvZGU+IGJ5IGRlY29kaW5nIHRoZSBzcGVjaWZpZWQgYXJyYXkgb2YgYnl0ZXMKKyAgICAgICAgICAgIHVzaW5nIHRoZSBwbGF0Zm9ybSdzIGRlZmF1bHQgY2hhcnNldC4gIFRoZSBsZW5ndGggb2YgdGhlIG5ldyA8Y29kZT5TdHJpbmc8L2NvZGU+IGlzIGEgZnVuY3Rpb24gb2YgdGhlIGNoYXJzZXQsIGFuZCBoZW5jZSBtYXkgbm90IGJlIGVxdWFsIHRvIHRoZQorICAgICAgICAgICAgbGVuZ3RoIG9mIHRoZSBieXRlIGFycmF5LgorCisgICAgICAgICAgICA8cD4gVGhlIGJlaGF2aW9yIG9mIHRoaXMgY29uc3RydWN0b3Igd2hlbiB0aGUgZ2l2ZW4gYnl0ZXMgYXJlIG5vdCB2YWxpZAorICAgICAgICAgICAgICAgIGluIHRoZSBkZWZhdWx0IGNoYXJzZXQgaXMgdW5zcGVjaWZpZWQuICBUaGUgPGEgaHJlZj0iLi4vLi4vamF2YS9uaW8vY2hhcnNldC9DaGFyc2V0RGVjb2Rlci5odG1sIiB0aXRsZT0iY2xhc3MgaW4gamF2YS5uaW8uY2hhcnNldCI+PGNvZGU+Q2hhcnNldERlY29kZXI8L2NvZGU+PC9hPiBjbGFzcyBzaG91bGQgYmUgdXNlZCB3aGVuIG1vcmUgY29udHJvbAorICAgICAgICAgICAgICAgIG92ZXIgdGhlIGRlY29kaW5nIHByb2Nlc3MgaXMgcmVxdWlyZWQuPC9kaXY+CisgICAgICAgIDxkbD48ZHQ+PHNwYW4gY2xhc3M9InN0cm9uZyI+UGFyYW1ldGVyczo8L3NwYW4+PC9kdD48ZGQ+PGNvZGU+Ynl0ZXM8L2NvZGU+IC0gVGhlIGJ5dGVzIHRvIGJlIGRlY29kZWQgaW50byBjaGFyYWN0ZXJzPC9kZD48ZHQ+PHNwYW4gY2xhc3M9InN0cm9uZyI+U2luY2U6PC9zcGFuPjwvZHQ+CisgICAgICAgICAgICA8ZGQ+SkRLMS4xPC9kZD48L2RsPgorICAgIDwvbGk+Cis8L3VsPgorPGEgbmFtZT0iU3RyaW5nKGphdmEubGFuZy5TdHJpbmdCdWZmZXIpIj4KKyAgICA8IS0tICAgLS0+Cis8L2E+Cis8dWwgY2xhc3M9ImJsb2NrTGlzdCI+CisgICAgPGxpIGNsYXNzPSJibG9ja0xpc3QiPgorICAgICAgICA8aDQ+U3RyaW5nPC9oND4KKyAgICAgICAgPHByZT5wdWJsaWMmbmJzcDtTdHJpbmcoPGEgaHJlZj0iLi4vLi4vamF2YS9sYW5nL1N0cmluZ0J1ZmZlci5odG1sIiB0aXRsZT0iY2xhc3MgaW4gamF2YS5sYW5nIj5TdHJpbmdCdWZmZXI8L2E+Jm5ic3A7YnVmZmVyKTwvcHJlPgorICAgICAgICA8ZGl2IGNsYXNzPSJibG9jayI+QWxsb2NhdGVzIGEgbmV3IHN0cmluZyB0aGF0IGNvbnRhaW5zIHRoZSBzZXF1ZW5jZSBvZiBjaGFyYWN0ZXJzCisgICAgICAgICAgICBjdXJyZW50bHkgY29udGFpbmVkIGluIHRoZSBzdHJpbmcgYnVmZmVyIGFyZ3VtZW50LiBUaGUgY29udGVudHMgb2YgdGhlCisgICAgICAgICAgICBzdHJpbmcgYnVmZmVyIGFyZSBjb3BpZWQ7IHN1YnNlcXVlbnQgbW9kaWZpY2F0aW9uIG9mIHRoZSBzdHJpbmcgYnVmZmVyCisgICAgICAgICAgICBkb2VzIG5vdCBhZmZlY3QgdGhlIG5ld2x5IGNyZWF0ZWQgc3RyaW5nLjwvZGl2PgorICAgICAgICA8ZGw+PGR0PjxzcGFuIGNsYXNzPSJzdHJvbmciPlBhcmFtZXRlcnM6PC9zcGFuPjwvZHQ+PGRkPjxjb2RlPmJ1ZmZlcjwvY29kZT4gLSBBIDxjb2RlPlN0cmluZ0J1ZmZlcjwvY29kZT48L2RkPjwvZGw+CisgICAgPC9saT4KKzwvdWw+Cis8YSBuYW1lPSJTdHJpbmcoamF2YS5sYW5nLlN0cmluZ0J1aWxkZXIpIj4KKyAgICA8IS0tICAgLS0+Cis8L2E+Cis8dWwgY2xhc3M9ImJsb2NrTGlzdExhc3QiPgorICAgIDxsaSBjbGFzcz0iYmxvY2tMaXN0Ij4KKyAgICAgICAgPGg0PlN0cmluZzwvaDQ+CisgICAgICAgIDxwcmU+cHVibGljJm5ic3A7U3RyaW5nKDxhIGhyZWY9Ii4uLy4uL2phdmEvbGFuZy9TdHJpbmdCdWlsZGVyLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBqYXZhLmxhbmciPlN0cmluZ0J1aWxkZXI8L2E+Jm5ic3A7YnVpbGRlcik8L3ByZT4KKyAgICAgICAgPGRpdiBjbGFzcz0iYmxvY2siPkFsbG9jYXRlcyBhIG5ldyBzdHJpbmcgdGhhdCBjb250YWlucyB0aGUgc2VxdWVuY2Ugb2YgY2hhcmFjdGVycworICAgICAgICAgICAgY3VycmVudGx5IGNvbnRhaW5lZCBpbiB0aGUgc3RyaW5nIGJ1aWxkZXIgYXJndW1lbnQuIFRoZSBjb250ZW50cyBvZiB0aGUKKyAgICAgICAgICAgIHN0cmluZyBidWlsZGVyIGFyZSBjb3BpZWQ7IHN1YnNlcXVlbnQgbW9kaWZpY2F0aW9uIG9mIHRoZSBzdHJpbmcgYnVpbGRlcgorICAgICAgICAgICAgZG9lcyBub3QgYWZmZWN0IHRoZSBuZXdseSBjcmVhdGVkIHN0cmluZy4KKworICAgICAgICAgICAgPHA+IFRoaXMgY29uc3RydWN0b3IgaXMgcHJvdmlkZWQgdG8gZWFzZSBtaWdyYXRpb24gdG8gPGNvZGU+U3RyaW5nQnVpbGRlcjwvY29kZT4uIE9idGFpbmluZyBhIHN0cmluZyBmcm9tIGEgc3RyaW5nIGJ1aWxkZXIgdmlhIHRoZSA8Y29kZT50b1N0cmluZzwvY29kZT4gbWV0aG9kIGlzIGxpa2VseSB0byBydW4gZmFzdGVyIGFuZCBpcyBnZW5lcmFsbHkgcHJlZmVycmVkLjwvZGl2PgorICAgICAgICA8ZGw+PGR0PjxzcGFuIGNsYXNzPSJzdHJvbmciPlBhcmFtZXRlcnM6PC9zcGFuPjwvZHQ+PGRkPjxjb2RlPmJ1aWxkZXI8L2NvZGU+IC0gQSA8Y29kZT5TdHJpbmdCdWlsZGVyPC9jb2RlPjwvZGQ+PGR0PjxzcGFuIGNsYXNzPSJzdHJvbmciPlNpbmNlOjwvc3Bhbj48L2R0PgorICAgICAgICAgICAgPGRkPjEuNTwvZGQ+PC9kbD4KKyAgICA8L2xpPgorPC91bD4KKzwvbGk+Cis8L3VsPgorPCEtLSA9PT09PT09PT09PT0gTUVUSE9EIERFVEFJTCA9PT09PT09PT09IC0tPgorPHVsIGNsYXNzPSJibG9ja0xpc3QiPgorPGxpIGNsYXNzPSJibG9ja0xpc3QiPjxhIG5hbWU9Im1ldGhvZF9kZXRhaWwiPgorICAgIDwhLS0gICAtLT4KKzwvYT4KKzxoMz5NZXRob2QgRGV0YWlsPC9oMz4KKzxhIG5hbWU9Imxlbmd0aCgpIj4KKyAgICA8IS0tICAgLS0+Cis8L2E+Cis8dWwgY2xhc3M9ImJsb2NrTGlzdCI+CisgICAgPGxpIGNsYXNzPSJibG9ja0xpc3QiPgorICAgICAgICA8aDQ+bGVuZ3RoPC9oND4KKyAgICAgICAgPHByZT5wdWJsaWMmbmJzcDtpbnQmbmJzcDtsZW5ndGgoKTwvcHJlPgorICAgICAgICA8ZGl2IGNsYXNzPSJibG9jayI+UmV0dXJucyB0aGUgbGVuZ3RoIG9mIHRoaXMgc3RyaW5nLgorICAgICAgICAgICAgVGhlIGxlbmd0aCBpcyBlcXVhbCB0byB0aGUgbnVtYmVyIG9mIDxhIGhyZWY9IkNoYXJhY3Rlci5odG1sI3VuaWNvZGUiPlVuaWNvZGUKKyAgICAgICAgICAgICAgICBjb2RlIHVuaXRzPC9hPiBpbiB0aGUgc3RyaW5nLjwvZGl2PgorICAgICAgICA8ZGw+CisgICAgICAgICAgICA8ZHQ+PHN0cm9uZz5TcGVjaWZpZWQgYnk6PC9zdHJvbmc+PC9kdD4KKyAgICAgICAgICAgIDxkZD48Y29kZT48YSBocmVmPSIuLi8uLi9qYXZhL2xhbmcvQ2hhclNlcXVlbmNlLmh0bWwjbGVuZ3RoKCkiPmxlbmd0aDwvYT48L2NvZGU+Jm5ic3A7aW4gaW50ZXJmYWNlJm5ic3A7PGNvZGU+PGEgaHJlZj0iLi4vLi4vamF2YS9sYW5nL0NoYXJTZXF1ZW5jZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIGphdmEubGFuZyI+Q2hhclNlcXVlbmNlPC9hPjwvY29kZT48L2RkPgorICAgICAgICAgICAgPGR0PjxzcGFuIGNsYXNzPSJzdHJvbmciPlJldHVybnM6PC9zcGFuPjwvZHQ+PGRkPnRoZSBsZW5ndGggb2YgdGhlIHNlcXVlbmNlIG9mIGNoYXJhY3RlcnMgcmVwcmVzZW50ZWQgYnkgdGhpcworICAgICAgICAgICAgb2JqZWN0LjwvZGQ+PC9kbD4KKyAgICA8L2xpPgorPC91bD4KKzxhIG5hbWU9ImlzRW1wdHkoKSI+CisgICAgPCEtLSAgIC0tPgorPC9hPgorPHVsIGNsYXNzPSJibG9ja0xpc3QiPgorICAgIDxsaSBjbGFzcz0iYmxvY2tMaXN0Ij4KKyAgICAgICAgPGg0PmlzRW1wdHk8L2g0PgorICAgICAgICA8cHJlPnB1YmxpYyZuYnNwO2Jvb2xlYW4mbmJzcDtpc0VtcHR5KCk8L3ByZT4KKyAgICAgICAgPGRpdiBjbGFzcz0iYmxvY2siPlJldHVybnMgPHR0PnRydWU8L3R0PiBpZiwgYW5kIG9ubHkgaWYsIDxhIGhyZWY9Ii4uLy4uL2phdmEvbGFuZy9TdHJpbmcuaHRtbCNsZW5ndGgoKSI+PGNvZGU+bGVuZ3RoKCk8L2NvZGU+PC9hPiBpcyA8dHQ+MDwvdHQ+LjwvZGl2PgorICAgICAgICA8ZGw+PGR0PjxzcGFuIGNsYXNzPSJzdHJvbmciPlJldHVybnM6PC9zcGFuPjwvZHQ+PGRkPjx0dD50cnVlPC90dD4gaWYgPGEgaHJlZj0iLi4vLi4vamF2YS9sYW5nL1N0cmluZy5odG1sI2xlbmd0aCgpIj48Y29kZT5sZW5ndGgoKTwvY29kZT48L2E+IGlzIDx0dD4wPC90dD4sIG90aGVyd2lzZQorICAgICAgICAgICAgPHR0PmZhbHNlPC90dD48L2RkPjxkdD48c3BhbiBjbGFzcz0ic3Ryb25nIj5TaW5jZTo8L3NwYW4+PC9kdD4KKyAgICAgICAgICAgIDxkZD4xLjY8L2RkPjwvZGw+CisgICAgPC9saT4KKzwvdWw+Cis8YSBuYW1lPSJjaGFyQXQoaW50KSI+CisgICAgPCEtLSAgIC0tPgorPC9hPgorPHVsIGNsYXNzPSJibG9ja0xpc3QiPgorICAgIDxsaSBjbGFzcz0iYmxvY2tMaXN0Ij4KKyAgICAgICAgPGg0PmNoYXJBdDwvaDQ+CisgICAgICAgIDxwcmU+cHVibGljJm5ic3A7Y2hhciZuYnNwO2NoYXJBdChpbnQmbmJzcDtpbmRleCk8L3ByZT4KKyAgICAgICAgPGRpdiBjbGFzcz0iYmxvY2siPlJldHVybnMgdGhlIDxjb2RlPmNoYXI8L2NvZGU+IHZhbHVlIGF0IHRoZQorICAgICAgICAgICAgc3BlY2lmaWVkIGluZGV4LiBBbiBpbmRleCByYW5nZXMgZnJvbSA8Y29kZT4wPC9jb2RlPiB0bworICAgICAgICAgICAgPGNvZGU+bGVuZ3RoKCkgLSAxPC9jb2RlPi4gVGhlIGZpcnN0IDxjb2RlPmNoYXI8L2NvZGU+IHZhbHVlIG9mIHRoZSBzZXF1ZW5jZQorICAgICAgICAgICAgaXMgYXQgaW5kZXggPGNvZGU+MDwvY29kZT4sIHRoZSBuZXh0IGF0IGluZGV4IDxjb2RlPjE8L2NvZGU+LAorICAgICAgICAgICAgYW5kIHNvIG9uLCBhcyBmb3IgYXJyYXkgaW5kZXhpbmcuCisKKyAgICAgICAgICAgIDxwPklmIHRoZSA8Y29kZT5jaGFyPC9jb2RlPiB2YWx1ZSBzcGVjaWZpZWQgYnkgdGhlIGluZGV4IGlzIGEKKyAgICAgICAgICAgICAgICA8YSBocmVmPSJDaGFyYWN0ZXIuaHRtbCN1bmljb2RlIj5zdXJyb2dhdGU8L2E+LCB0aGUgc3Vycm9nYXRlCisgICAgICAgICAgICAgICAgdmFsdWUgaXMgcmV0dXJuZWQuPC9kaXY+CisgICAgICAgIDxkbD4KKyAgICAgICAgICAgIDxkdD48c3Ryb25nPlNwZWNpZmllZCBieTo8L3N0cm9uZz48L2R0PgorICAgICAgICAgICAgPGRkPjxjb2RlPjxhIGhyZWY9Ii4uLy4uL2phdmEvbGFuZy9DaGFyU2VxdWVuY2UuaHRtbCNjaGFyQXQoaW50KSI+Y2hhckF0PC9hPjwvY29kZT4mbmJzcDtpbiBpbnRlcmZhY2UmbmJzcDs8Y29kZT48YSBocmVmPSIuLi8uLi9qYXZhL2xhbmcvQ2hhclNlcXVlbmNlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gamF2YS5sYW5nIj5DaGFyU2VxdWVuY2U8L2E+PC9jb2RlPjwvZGQ+CisgICAgICAgICAgICA8ZHQ+PHNwYW4gY2xhc3M9InN0cm9uZyI+UGFyYW1ldGVyczo8L3NwYW4+PC9kdD48ZGQ+PGNvZGU+aW5kZXg8L2NvZGU+IC0gdGhlIGluZGV4IG9mIHRoZSA8Y29kZT5jaGFyPC9jb2RlPiB2YWx1ZS48L2RkPgorICAgICAgICAgICAgPGR0PjxzcGFuIGNsYXNzPSJzdHJvbmciPlJldHVybnM6PC9zcGFuPjwvZHQ+PGRkPnRoZSA8Y29kZT5jaGFyPC9jb2RlPiB2YWx1ZSBhdCB0aGUgc3BlY2lmaWVkIGluZGV4IG9mIHRoaXMgc3RyaW5nLgorICAgICAgICAgICAgVGhlIGZpcnN0IDxjb2RlPmNoYXI8L2NvZGU+IHZhbHVlIGlzIGF0IGluZGV4IDxjb2RlPjA8L2NvZGU+LjwvZGQ+CisgICAgICAgICAgICA8ZHQ+PHNwYW4gY2xhc3M9InN0cm9uZyI+VGhyb3dzOjwvc3Bhbj48L2R0PgorICAgICAgICAgICAgPGRkPjxjb2RlPjxhIGhyZWY9Ii4uLy4uL2phdmEvbGFuZy9JbmRleE91dE9mQm91bmRzRXhjZXB0aW9uLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBqYXZhLmxhbmciPkluZGV4T3V0T2ZCb3VuZHNFeGNlcHRpb248L2E+PC9jb2RlPiAtIGlmIHRoZSA8Y29kZT5pbmRleDwvY29kZT4KKyAgICAgICAgICAgICAgICBhcmd1bWVudCBpcyBuZWdhdGl2ZSBvciBub3QgbGVzcyB0aGFuIHRoZSBsZW5ndGggb2YgdGhpcworICAgICAgICAgICAgICAgIHN0cmluZy48L2RkPjwvZGw+CisgICAgPC9saT4KKzwvdWw+Cis8YSBuYW1lPSJjb2RlUG9pbnRBdChpbnQpIj4KKyAgICA8IS0tICAgLS0+Cis8L2E+Cis8dWwgY2xhc3M9ImJsb2NrTGlzdCI+CisgICAgPGxpIGNsYXNzPSJibG9ja0xpc3QiPgorICAgICAgICA8aDQ+Y29kZVBvaW50QXQ8L2g0PgorICAgICAgICA8cHJlPnB1YmxpYyZuYnNwO2ludCZuYnNwO2NvZGVQb2ludEF0KGludCZuYnNwO2luZGV4KTwvcHJlPgorICAgICAgICA8ZGl2IGNsYXNzPSJibG9jayI+UmV0dXJucyB0aGUgY2hhcmFjdGVyIChVbmljb2RlIGNvZGUgcG9pbnQpIGF0IHRoZSBzcGVjaWZpZWQKKyAgICAgICAgICAgIGluZGV4LiBUaGUgaW5kZXggcmVmZXJzIHRvIDxjb2RlPmNoYXI8L2NvZGU+IHZhbHVlcworICAgICAgICAgICAgKFVuaWNvZGUgY29kZSB1bml0cykgYW5kIHJhbmdlcyBmcm9tIDxjb2RlPjA8L2NvZGU+IHRvCisgICAgICAgICAgICA8YSBocmVmPSIuLi8uLi9qYXZhL2xhbmcvU3RyaW5nLmh0bWwjbGVuZ3RoKCkiPjxjb2RlPmxlbmd0aCgpPC9jb2RlPjwvYT48Y29kZT4gLSAxPC9jb2RlPi4KKworICAgICAgICAgICAgPHA+IElmIHRoZSA8Y29kZT5jaGFyPC9jb2RlPiB2YWx1ZSBzcGVjaWZpZWQgYXQgdGhlIGdpdmVuIGluZGV4CisgICAgICAgICAgICAgICAgaXMgaW4gdGhlIGhpZ2gtc3Vycm9nYXRlIHJhbmdlLCB0aGUgZm9sbG93aW5nIGluZGV4IGlzIGxlc3MKKyAgICAgICAgICAgICAgICB0aGFuIHRoZSBsZW5ndGggb2YgdGhpcyA8Y29kZT5TdHJpbmc8L2NvZGU+LCBhbmQgdGhlCisgICAgICAgICAgICAgICAgPGNvZGU+Y2hhcjwvY29kZT4gdmFsdWUgYXQgdGhlIGZvbGxvd2luZyBpbmRleCBpcyBpbiB0aGUKKyAgICAgICAgICAgICAgICBsb3ctc3Vycm9nYXRlIHJhbmdlLCB0aGVuIHRoZSBzdXBwbGVtZW50YXJ5IGNvZGUgcG9pbnQKKyAgICAgICAgICAgICAgICBjb3JyZXNwb25kaW5nIHRvIHRoaXMgc3Vycm9nYXRlIHBhaXIgaXMgcmV0dXJuZWQuIE90aGVyd2lzZSwKKyAgICAgICAgICAgICAgICB0aGUgPGNvZGU+Y2hhcjwvY29kZT4gdmFsdWUgYXQgdGhlIGdpdmVuIGluZGV4IGlzIHJldHVybmVkLjwvZGl2PgorICAgICAgICA8ZGw+PGR0PjxzcGFuIGNsYXNzPSJzdHJvbmciPlBhcmFtZXRlcnM6PC9zcGFuPjwvZHQ+PGRkPjxjb2RlPmluZGV4PC9jb2RlPiAtIHRoZSBpbmRleCB0byB0aGUgPGNvZGU+Y2hhcjwvY29kZT4gdmFsdWVzPC9kZD4KKyAgICAgICAgICAgIDxkdD48c3BhbiBjbGFzcz0ic3Ryb25nIj5SZXR1cm5zOjwvc3Bhbj48L2R0PjxkZD50aGUgY29kZSBwb2ludCB2YWx1ZSBvZiB0aGUgY2hhcmFjdGVyIGF0IHRoZQorICAgICAgICAgICAgICAgIDxjb2RlPmluZGV4PC9jb2RlPjwvZGQ+CisgICAgICAgICAgICA8ZHQ+PHNwYW4gY2xhc3M9InN0cm9uZyI+VGhyb3dzOjwvc3Bhbj48L2R0PgorICAgICAgICAgICAgPGRkPjxjb2RlPjxhIGhyZWY9Ii4uLy4uL2phdmEvbGFuZy9JbmRleE91dE9mQm91bmRzRXhjZXB0aW9uLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBqYXZhLmxhbmciPkluZGV4T3V0T2ZCb3VuZHNFeGNlcHRpb248L2E+PC9jb2RlPiAtIGlmIHRoZSA8Y29kZT5pbmRleDwvY29kZT4KKyAgICAgICAgICAgICAgICBhcmd1bWVudCBpcyBuZWdhdGl2ZSBvciBub3QgbGVzcyB0aGFuIHRoZSBsZW5ndGggb2YgdGhpcworICAgICAgICAgICAgICAgIHN0cmluZy48L2RkPjxkdD48c3BhbiBjbGFzcz0ic3Ryb25nIj5TaW5jZTo8L3NwYW4+PC9kdD4KKyAgICAgICAgICAgIDxkZD4xLjU8L2RkPjwvZGw+CisgICAgPC9saT4KKzwvdWw+Cis8YSBuYW1lPSJjb2RlUG9pbnRCZWZvcmUoaW50KSI+CisgICAgPCEtLSAgIC0tPgorPC9hPgorPHVsIGNsYXNzPSJibG9ja0xpc3QiPgorICAgIDxsaSBjbGFzcz0iYmxvY2tMaXN0Ij4KKyAgICAgICAgPGg0PmNvZGVQb2ludEJlZm9yZTwvaDQ+CisgICAgICAgIDxwcmU+cHVibGljJm5ic3A7aW50Jm5ic3A7Y29kZVBvaW50QmVmb3JlKGludCZuYnNwO2luZGV4KTwvcHJlPgorICAgICAgICA8ZGl2IGNsYXNzPSJibG9jayI+UmV0dXJucyB0aGUgY2hhcmFjdGVyIChVbmljb2RlIGNvZGUgcG9pbnQpIGJlZm9yZSB0aGUgc3BlY2lmaWVkCisgICAgICAgICAgICBpbmRleC4gVGhlIGluZGV4IHJlZmVycyB0byA8Y29kZT5jaGFyPC9jb2RlPiB2YWx1ZXMKKyAgICAgICAgICAgIChVbmljb2RlIGNvZGUgdW5pdHMpIGFuZCByYW5nZXMgZnJvbSA8Y29kZT4xPC9jb2RlPiB0byA8YSBocmVmPSIuLi8uLi9qYXZhL2xhbmcvQ2hhclNlcXVlbmNlLmh0bWwjbGVuZ3RoKCkiPjxjb2RlPmxlbmd0aDwvY29kZT48L2E+LgorCisgICAgICAgICAgICA8cD4gSWYgdGhlIDxjb2RlPmNoYXI8L2NvZGU+IHZhbHVlIGF0IDxjb2RlPihpbmRleCAtIDEpPC9jb2RlPgorICAgICAgICAgICAgICAgIGlzIGluIHRoZSBsb3ctc3Vycm9nYXRlIHJhbmdlLCA8Y29kZT4oaW5kZXggLSAyKTwvY29kZT4gaXMgbm90CisgICAgICAgICAgICAgICAgbmVnYXRpdmUsIGFuZCB0aGUgPGNvZGU+Y2hhcjwvY29kZT4gdmFsdWUgYXQgPGNvZGU+KGluZGV4IC0KKyAgICAgICAgICAgICAgICAgICAgMik8L2NvZGU+IGlzIGluIHRoZSBoaWdoLXN1cnJvZ2F0ZSByYW5nZSwgdGhlbiB0aGUKKyAgICAgICAgICAgICAgICBzdXBwbGVtZW50YXJ5IGNvZGUgcG9pbnQgdmFsdWUgb2YgdGhlIHN1cnJvZ2F0ZSBwYWlyIGlzCisgICAgICAgICAgICAgICAgcmV0dXJuZWQuIElmIHRoZSA8Y29kZT5jaGFyPC9jb2RlPiB2YWx1ZSBhdCA8Y29kZT5pbmRleCAtCisgICAgICAgICAgICAgICAgICAgIDE8L2NvZGU+IGlzIGFuIHVucGFpcmVkIGxvdy1zdXJyb2dhdGUgb3IgYSBoaWdoLXN1cnJvZ2F0ZSwgdGhlCisgICAgICAgICAgICAgICAgc3Vycm9nYXRlIHZhbHVlIGlzIHJldHVybmVkLjwvZGl2PgorICAgICAgICA8ZGw+PGR0PjxzcGFuIGNsYXNzPSJzdHJvbmciPlBhcmFtZXRlcnM6PC9zcGFuPjwvZHQ+PGRkPjxjb2RlPmluZGV4PC9jb2RlPiAtIHRoZSBpbmRleCBmb2xsb3dpbmcgdGhlIGNvZGUgcG9pbnQgdGhhdCBzaG91bGQgYmUgcmV0dXJuZWQ8L2RkPgorICAgICAgICAgICAgPGR0PjxzcGFuIGNsYXNzPSJzdHJvbmciPlJldHVybnM6PC9zcGFuPjwvZHQ+PGRkPnRoZSBVbmljb2RlIGNvZGUgcG9pbnQgdmFsdWUgYmVmb3JlIHRoZSBnaXZlbiBpbmRleC48L2RkPgorICAgICAgICAgICAgPGR0PjxzcGFuIGNsYXNzPSJzdHJvbmciPlRocm93czo8L3NwYW4+PC9kdD4KKyAgICAgICAgICAgIDxkZD48Y29kZT48YSBocmVmPSIuLi8uLi9qYXZhL2xhbmcvSW5kZXhPdXRPZkJvdW5kc0V4Y2VwdGlvbi5odG1sIiB0aXRsZT0iY2xhc3MgaW4gamF2YS5sYW5nIj5JbmRleE91dE9mQm91bmRzRXhjZXB0aW9uPC9hPjwvY29kZT4gLSBpZiB0aGUgPGNvZGU+aW5kZXg8L2NvZGU+CisgICAgICAgICAgICAgICAgYXJndW1lbnQgaXMgbGVzcyB0aGFuIDEgb3IgZ3JlYXRlciB0aGFuIHRoZSBsZW5ndGgKKyAgICAgICAgICAgICAgICBvZiB0aGlzIHN0cmluZy48L2RkPjxkdD48c3BhbiBjbGFzcz0ic3Ryb25nIj5TaW5jZTo8L3NwYW4+PC9kdD4KKyAgICAgICAgICAgIDxkZD4xLjU8L2RkPjwvZGw+CisgICAgPC9saT4KKzwvdWw+Cis8YSBuYW1lPSJjb2RlUG9pbnRDb3VudChpbnQsIGludCkiPgorICAgIDwhLS0gICAtLT4KKzwvYT4KKzx1bCBjbGFzcz0iYmxvY2tMaXN0Ij4KKyAgICA8bGkgY2xhc3M9ImJsb2NrTGlzdCI+CisgICAgICAgIDxoND5jb2RlUG9pbnRDb3VudDwvaDQ+Cis8cHJlPnB1YmxpYyZuYnNwO2ludCZuYnNwO2NvZGVQb2ludENvdW50KGludCZuYnNwO2JlZ2luSW5kZXgsCisgICAgICAgICAgICAgICAgIGludCZuYnNwO2VuZEluZGV4KTwvcHJlPgorICAgICAgICA8ZGl2IGNsYXNzPSJibG9jayI+UmV0dXJucyB0aGUgbnVtYmVyIG9mIFVuaWNvZGUgY29kZSBwb2ludHMgaW4gdGhlIHNwZWNpZmllZCB0ZXh0CisgICAgICAgICAgICByYW5nZSBvZiB0aGlzIDxjb2RlPlN0cmluZzwvY29kZT4uIFRoZSB0ZXh0IHJhbmdlIGJlZ2lucyBhdCB0aGUKKyAgICAgICAgICAgIHNwZWNpZmllZCA8Y29kZT5iZWdpbkluZGV4PC9jb2RlPiBhbmQgZXh0ZW5kcyB0byB0aGUKKyAgICAgICAgICAgIDxjb2RlPmNoYXI8L2NvZGU+IGF0IGluZGV4IDxjb2RlPmVuZEluZGV4IC0gMTwvY29kZT4uIFRodXMgdGhlCisgICAgICAgICAgICBsZW5ndGggKGluIDxjb2RlPmNoYXI8L2NvZGU+cykgb2YgdGhlIHRleHQgcmFuZ2UgaXMKKyAgICAgICAgICAgIDxjb2RlPmVuZEluZGV4LWJlZ2luSW5kZXg8L2NvZGU+LiBVbnBhaXJlZCBzdXJyb2dhdGVzIHdpdGhpbgorICAgICAgICAgICAgdGhlIHRleHQgcmFuZ2UgY291bnQgYXMgb25lIGNvZGUgcG9pbnQgZWFjaC48L2Rpdj4KKyAgICAgICAgPGRsPjxkdD48c3BhbiBjbGFzcz0ic3Ryb25nIj5QYXJhbWV0ZXJzOjwvc3Bhbj48L2R0PjxkZD48Y29kZT5iZWdpbkluZGV4PC9jb2RlPiAtIHRoZSBpbmRleCB0byB0aGUgZmlyc3QgPGNvZGU+Y2hhcjwvY29kZT4gb2YKKyAgICAgICAgICAgIHRoZSB0ZXh0IHJhbmdlLjwvZGQ+PGRkPjxjb2RlPmVuZEluZGV4PC9jb2RlPiAtIHRoZSBpbmRleCBhZnRlciB0aGUgbGFzdCA8Y29kZT5jaGFyPC9jb2RlPiBvZgorICAgICAgICAgICAgdGhlIHRleHQgcmFuZ2UuPC9kZD4KKyAgICAgICAgICAgIDxkdD48c3BhbiBjbGFzcz0ic3Ryb25nIj5SZXR1cm5zOjwvc3Bhbj48L2R0PjxkZD50aGUgbnVtYmVyIG9mIFVuaWNvZGUgY29kZSBwb2ludHMgaW4gdGhlIHNwZWNpZmllZCB0ZXh0CisgICAgICAgICAgICAgICAgcmFuZ2U8L2RkPgorICAgICAgICAgICAgPGR0PjxzcGFuIGNsYXNzPSJzdHJvbmciPlRocm93czo8L3NwYW4+PC9kdD4KKyAgICAgICAgICAgIDxkZD48Y29kZT48YSBocmVmPSIuLi8uLi9qYXZhL2xhbmcvSW5kZXhPdXRPZkJvdW5kc0V4Y2VwdGlvbi5odG1sIiB0aXRsZT0iY2xhc3MgaW4gamF2YS5sYW5nIj5JbmRleE91dE9mQm91bmRzRXhjZXB0aW9uPC9hPjwvY29kZT4gLSBpZiB0aGUKKyAgICAgICAgICAgICAgICA8Y29kZT5iZWdpbkluZGV4PC9jb2RlPiBpcyBuZWdhdGl2ZSwgb3IgPGNvZGU+ZW5kSW5kZXg8L2NvZGU+CisgICAgICAgICAgICAgICAgaXMgbGFyZ2VyIHRoYW4gdGhlIGxlbmd0aCBvZiB0aGlzIDxjb2RlPlN0cmluZzwvY29kZT4sIG9yCisgICAgICAgICAgICAgICAgPGNvZGU+YmVnaW5JbmRleDwvY29kZT4gaXMgbGFyZ2VyIHRoYW4gPGNvZGU+ZW5kSW5kZXg8L2NvZGU+LjwvZGQ+PGR0PjxzcGFuIGNsYXNzPSJzdHJvbmciPlNpbmNlOjwvc3Bhbj48L2R0PgorICAgICAgICAgICAgPGRkPjEuNTwvZGQ+PC9kbD4KKyAgICA8L2xpPgorPC91bD4KKzxhIG5hbWU9Im9mZnNldEJ5Q29kZVBvaW50cyhpbnQsIGludCkiPgorICAgIDwhLS0gICAtLT4KKzwvYT4KKzx1bCBjbGFzcz0iYmxvY2tMaXN0Ij4KKyAgICA8bGkgY2xhc3M9ImJsb2NrTGlzdCI+CisgICAgICAgIDxoND5vZmZzZXRCeUNvZGVQb2ludHM8L2g0PgorPHByZT5wdWJsaWMmbmJzcDtpbnQmbmJzcDtvZmZzZXRCeUNvZGVQb2ludHMoaW50Jm5ic3A7aW5kZXgsCisgICAgICAgICAgICAgICAgICAgICBpbnQmbmJzcDtjb2RlUG9pbnRPZmZzZXQpPC9wcmU+CisgICAgICAgIDxkaXYgY2xhc3M9ImJsb2NrIj5SZXR1cm5zIHRoZSBpbmRleCB3aXRoaW4gdGhpcyA8Y29kZT5TdHJpbmc8L2NvZGU+IHRoYXQgaXMKKyAgICAgICAgICAgIG9mZnNldCBmcm9tIHRoZSBnaXZlbiA8Y29kZT5pbmRleDwvY29kZT4gYnkKKyAgICAgICAgICAgIDxjb2RlPmNvZGVQb2ludE9mZnNldDwvY29kZT4gY29kZSBwb2ludHMuIFVucGFpcmVkIHN1cnJvZ2F0ZXMKKyAgICAgICAgICAgIHdpdGhpbiB0aGUgdGV4dCByYW5nZSBnaXZlbiBieSA8Y29kZT5pbmRleDwvY29kZT4gYW5kCisgICAgICAgICAgICA8Y29kZT5jb2RlUG9pbnRPZmZzZXQ8L2NvZGU+IGNvdW50IGFzIG9uZSBjb2RlIHBvaW50IGVhY2guPC9kaXY+CisgICAgICAgIDxkbD48ZHQ+PHNwYW4gY2xhc3M9InN0cm9uZyI+UGFyYW1ldGVyczo8L3NwYW4+PC9kdD48ZGQ+PGNvZGU+aW5kZXg8L2NvZGU+IC0gdGhlIGluZGV4IHRvIGJlIG9mZnNldDwvZGQ+PGRkPjxjb2RlPmNvZGVQb2ludE9mZnNldDwvY29kZT4gLSB0aGUgb2Zmc2V0IGluIGNvZGUgcG9pbnRzPC9kZD4KKyAgICAgICAgICAgIDxkdD48c3BhbiBjbGFzcz0ic3Ryb25nIj5SZXR1cm5zOjwvc3Bhbj48L2R0PjxkZD50aGUgaW5kZXggd2l0aGluIHRoaXMgPGNvZGU+U3RyaW5nPC9jb2RlPjwvZGQ+CisgICAgICAgICAgICA8ZHQ+PHNwYW4gY2xhc3M9InN0cm9uZyI+VGhyb3dzOjwvc3Bhbj48L2R0PgorICAgICAgICAgICAgPGRkPjxjb2RlPjxhIGhyZWY9Ii4uLy4uL2phdmEvbGFuZy9JbmRleE91dE9mQm91bmRzRXhjZXB0aW9uLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBqYXZhLmxhbmciPkluZGV4T3V0T2ZCb3VuZHNFeGNlcHRpb248L2E+PC9jb2RlPiAtIGlmIDxjb2RlPmluZGV4PC9jb2RlPgorICAgICAgICAgICAgICAgIGlzIG5lZ2F0aXZlIG9yIGxhcmdlciB0aGVuIHRoZSBsZW5ndGggb2YgdGhpcworICAgICAgICAgICAgICAgIDxjb2RlPlN0cmluZzwvY29kZT4sIG9yIGlmIDxjb2RlPmNvZGVQb2ludE9mZnNldDwvY29kZT4gaXMgcG9zaXRpdmUKKyAgICAgICAgICAgICAgICBhbmQgdGhlIHN1YnN0cmluZyBzdGFydGluZyB3aXRoIDxjb2RlPmluZGV4PC9jb2RlPiBoYXMgZmV3ZXIKKyAgICAgICAgICAgICAgICB0aGFuIDxjb2RlPmNvZGVQb2ludE9mZnNldDwvY29kZT4gY29kZSBwb2ludHMsCisgICAgICAgICAgICAgICAgb3IgaWYgPGNvZGU+Y29kZVBvaW50T2Zmc2V0PC9jb2RlPiBpcyBuZWdhdGl2ZSBhbmQgdGhlIHN1YnN0cmluZworICAgICAgICAgICAgICAgIGJlZm9yZSA8Y29kZT5pbmRleDwvY29kZT4gaGFzIGZld2VyIHRoYW4gdGhlIGFic29sdXRlIHZhbHVlCisgICAgICAgICAgICAgICAgb2YgPGNvZGU+Y29kZVBvaW50T2Zmc2V0PC9jb2RlPiBjb2RlIHBvaW50cy48L2RkPjxkdD48c3BhbiBjbGFzcz0ic3Ryb25nIj5TaW5jZTo8L3NwYW4+PC9kdD4KKyAgICAgICAgICAgIDxkZD4xLjU8L2RkPjwvZGw+CisgICAgPC9saT4KKzwvdWw+Cis8YSBuYW1lPSJnZXRDaGFycyhpbnQsIGludCwgY2hhcltdLCBpbnQpIj4KKyAgICA8IS0tICAgLS0+Cis8L2E+Cis8dWwgY2xhc3M9ImJsb2NrTGlzdCI+CisgICAgPGxpIGNsYXNzPSJibG9ja0xpc3QiPgorICAgICAgICA8aDQ+Z2V0Q2hhcnM8L2g0PgorPHByZT5wdWJsaWMmbmJzcDt2b2lkJm5ic3A7Z2V0Q2hhcnMoaW50Jm5ic3A7c3JjQmVnaW4sCisgICAgICAgICAgICBpbnQmbmJzcDtzcmNFbmQsCisgICAgICAgICAgICBjaGFyW10mbmJzcDtkc3QsCisgICAgICAgICAgICBpbnQmbmJzcDtkc3RCZWdpbik8L3ByZT4KKyAgICAgICAgPGRpdiBjbGFzcz0iYmxvY2siPkNvcGllcyBjaGFyYWN0ZXJzIGZyb20gdGhpcyBzdHJpbmcgaW50byB0aGUgZGVzdGluYXRpb24gY2hhcmFjdGVyCisgICAgICAgICAgICBhcnJheS4KKyAgICAgICAgICAgIDxwPgorICAgICAgICAgICAgICAgIFRoZSBmaXJzdCBjaGFyYWN0ZXIgdG8gYmUgY29waWVkIGlzIGF0IGluZGV4IDxjb2RlPnNyY0JlZ2luPC9jb2RlPjsKKyAgICAgICAgICAgICAgICB0aGUgbGFzdCBjaGFyYWN0ZXIgdG8gYmUgY29waWVkIGlzIGF0IGluZGV4IDxjb2RlPnNyY0VuZC0xPC9jb2RlPgorICAgICAgICAgICAgICAgICh0aHVzIHRoZSB0b3RhbCBudW1iZXIgb2YgY2hhcmFjdGVycyB0byBiZSBjb3BpZWQgaXMKKyAgICAgICAgICAgICAgICA8Y29kZT5zcmNFbmQtc3JjQmVnaW48L2NvZGU+KS4gVGhlIGNoYXJhY3RlcnMgYXJlIGNvcGllZCBpbnRvIHRoZQorICAgICAgICAgICAgICAgIHN1YmFycmF5IG9mIDxjb2RlPmRzdDwvY29kZT4gc3RhcnRpbmcgYXQgaW5kZXggPGNvZGU+ZHN0QmVnaW48L2NvZGU+CisgICAgICAgICAgICAgICAgYW5kIGVuZGluZyBhdCBpbmRleDoKKyAgICAgICAgICAgIDxwPjxibG9ja3F1b3RlPjxwcmU+CisgICAgIGRzdGJlZ2luICsgKHNyY0VuZC1zcmNCZWdpbikgLSAxCisgPC9wcmU+PC9ibG9ja3F1b3RlPjwvZGl2PgorICAgICAgICA8ZGw+PGR0PjxzcGFuIGNsYXNzPSJzdHJvbmciPlBhcmFtZXRlcnM6PC9zcGFuPjwvZHQ+PGRkPjxjb2RlPnNyY0JlZ2luPC9jb2RlPiAtIGluZGV4IG9mIHRoZSBmaXJzdCBjaGFyYWN0ZXIgaW4gdGhlIHN0cmluZworICAgICAgICAgICAgdG8gY29weS48L2RkPjxkZD48Y29kZT5zcmNFbmQ8L2NvZGU+IC0gaW5kZXggYWZ0ZXIgdGhlIGxhc3QgY2hhcmFjdGVyIGluIHRoZSBzdHJpbmcKKyAgICAgICAgICAgIHRvIGNvcHkuPC9kZD48ZGQ+PGNvZGU+ZHN0PC9jb2RlPiAtIHRoZSBkZXN0aW5hdGlvbiBhcnJheS48L2RkPjxkZD48Y29kZT5kc3RCZWdpbjwvY29kZT4gLSB0aGUgc3RhcnQgb2Zmc2V0IGluIHRoZSBkZXN0aW5hdGlvbiBhcnJheS48L2RkPgorICAgICAgICAgICAgPGR0PjxzcGFuIGNsYXNzPSJzdHJvbmciPlRocm93czo8L3NwYW4+PC9kdD4KKyAgICAgICAgICAgIDxkZD48Y29kZT48YSBocmVmPSIuLi8uLi9qYXZhL2xhbmcvSW5kZXhPdXRPZkJvdW5kc0V4Y2VwdGlvbi5odG1sIiB0aXRsZT0iY2xhc3MgaW4gamF2YS5sYW5nIj5JbmRleE91dE9mQm91bmRzRXhjZXB0aW9uPC9hPjwvY29kZT4gLSBJZiBhbnkgb2YgdGhlIGZvbGxvd2luZworICAgICAgICAgICAgICAgIGlzIHRydWU6CisgICAgICAgICAgICAgICAgPHVsPjxsaT48Y29kZT5zcmNCZWdpbjwvY29kZT4gaXMgbmVnYXRpdmUuCisgICAgICAgICAgICAgICAgICAgIDxsaT48Y29kZT5zcmNCZWdpbjwvY29kZT4gaXMgZ3JlYXRlciB0aGFuIDxjb2RlPnNyY0VuZDwvY29kZT4KKyAgICAgICAgICAgICAgICAgICAgPGxpPjxjb2RlPnNyY0VuZDwvY29kZT4gaXMgZ3JlYXRlciB0aGFuIHRoZSBsZW5ndGggb2YgdGhpcworICAgICAgICAgICAgICAgICAgICAgICAgc3RyaW5nCisgICAgICAgICAgICAgICAgICAgIDxsaT48Y29kZT5kc3RCZWdpbjwvY29kZT4gaXMgbmVnYXRpdmUKKyAgICAgICAgICAgICAgICAgICAgPGxpPjxjb2RlPmRzdEJlZ2luKyhzcmNFbmQtc3JjQmVnaW4pPC9jb2RlPiBpcyBsYXJnZXIgdGhhbgorICAgICAgICAgICAgICAgICAgICAgICAgPGNvZGU+ZHN0Lmxlbmd0aDwvY29kZT48L3VsPjwvZGQ+PC9kbD4KKyAgICA8L2xpPgorPC91bD4KKzxhIG5hbWU9ImdldEJ5dGVzKGludCwgaW50LCBieXRlW10sIGludCkiPgorICAgIDwhLS0gICAtLT4KKzwvYT4KKzx1bCBjbGFzcz0iYmxvY2tMaXN0Ij4KKyAgICA8bGkgY2xhc3M9ImJsb2NrTGlzdCI+CisgICAgICAgIDxoND5nZXRCeXRlczwvaDQ+Cis8cHJlPjxhIGhyZWY9Ii4uLy4uL2phdmEvbGFuZy9EZXByZWNhdGVkLmh0bWwiIHRpdGxlPSJhbm5vdGF0aW9uIGluIGphdmEubGFuZyI+QERlcHJlY2F0ZWQ8L2E+CitwdWJsaWMmbmJzcDt2b2lkJm5ic3A7Z2V0Qnl0ZXMoaW50Jm5ic3A7c3JjQmVnaW4sCisgICAgICAgICAgICAgICAgICAgICAgIGludCZuYnNwO3NyY0VuZCwKKyAgICAgICAgICAgICAgICAgICAgICAgYnl0ZVtdJm5ic3A7ZHN0LAorICAgICAgICAgICAgICAgICAgICAgICBpbnQmbmJzcDtkc3RCZWdpbik8L3ByZT4KKyAgICAgICAgPGRpdiBjbGFzcz0iYmxvY2siPjxzcGFuIGNsYXNzPSJzdHJvbmciPkRlcHJlY2F0ZWQuPC9zcGFuPiZuYnNwOzxpPlRoaXMgbWV0aG9kIGRvZXMgbm90IHByb3Blcmx5IGNvbnZlcnQgY2hhcmFjdGVycyBpbnRvCisgICAgICAgICAgICBieXRlcy4gIEFzIG9mIEpESyZuYnNwOzEuMSwgdGhlIHByZWZlcnJlZCB3YXkgdG8gZG8gdGhpcyBpcyB2aWEgdGhlCisgICAgICAgICAgICA8YSBocmVmPSIuLi8uLi9qYXZhL2xhbmcvU3RyaW5nLmh0bWwjZ2V0Qnl0ZXMoKSI+PGNvZGU+Z2V0Qnl0ZXMoKTwvY29kZT48L2E+IG1ldGhvZCwgd2hpY2ggdXNlcyB0aGUgcGxhdGZvcm0ncyBkZWZhdWx0IGNoYXJzZXQuPC9pPjwvZGl2PgorICAgICAgICA8ZGl2IGNsYXNzPSJibG9jayI+Q29waWVzIGNoYXJhY3RlcnMgZnJvbSB0aGlzIHN0cmluZyBpbnRvIHRoZSBkZXN0aW5hdGlvbiBieXRlIGFycmF5LiBFYWNoCisgICAgICAgICAgICBieXRlIHJlY2VpdmVzIHRoZSA4IGxvdy1vcmRlciBiaXRzIG9mIHRoZSBjb3JyZXNwb25kaW5nIGNoYXJhY3Rlci4gVGhlCisgICAgICAgICAgICBlaWdodCBoaWdoLW9yZGVyIGJpdHMgb2YgZWFjaCBjaGFyYWN0ZXIgYXJlIG5vdCBjb3BpZWQgYW5kIGRvIG5vdAorICAgICAgICAgICAgcGFydGljaXBhdGUgaW4gdGhlIHRyYW5zZmVyIGluIGFueSB3YXkuCisKKyAgICAgICAgICAgIDxwPiBUaGUgZmlyc3QgY2hhcmFjdGVyIHRvIGJlIGNvcGllZCBpcyBhdCBpbmRleCA8Y29kZT5zcmNCZWdpbjwvY29kZT47IHRoZQorICAgICAgICAgICAgICAgIGxhc3QgY2hhcmFjdGVyIHRvIGJlIGNvcGllZCBpcyBhdCBpbmRleCA8Y29kZT5zcmNFbmQtMTwvY29kZT4uICBUaGUgdG90YWwKKyAgICAgICAgICAgICAgICBudW1iZXIgb2YgY2hhcmFjdGVycyB0byBiZSBjb3BpZWQgaXMgPGNvZGU+c3JjRW5kLXNyY0JlZ2luPC9jb2RlPi4gVGhlCisgICAgICAgICAgICAgICAgY2hhcmFjdGVycywgY29udmVydGVkIHRvIGJ5dGVzLCBhcmUgY29waWVkIGludG8gdGhlIHN1YmFycmF5IG9mIDxjb2RlPmRzdDwvY29kZT4gc3RhcnRpbmcgYXQgaW5kZXggPGNvZGU+ZHN0QmVnaW48L2NvZGU+IGFuZCBlbmRpbmcgYXQgaW5kZXg6CisKKyAgICAgICAgICAgIDxibG9ja3F1b3RlPjxwcmU+CisgICAgIGRzdGJlZ2luICsgKHNyY0VuZC1zcmNCZWdpbikgLSAxCisgPC9wcmU+PC9ibG9ja3F1b3RlPjwvZGl2PgorICAgICAgICA8ZGw+PGR0PjxzcGFuIGNsYXNzPSJzdHJvbmciPlBhcmFtZXRlcnM6PC9zcGFuPjwvZHQ+PGRkPjxjb2RlPnNyY0JlZ2luPC9jb2RlPiAtIEluZGV4IG9mIHRoZSBmaXJzdCBjaGFyYWN0ZXIgaW4gdGhlIHN0cmluZyB0byBjb3B5PC9kZD48ZGQ+PGNvZGU+c3JjRW5kPC9jb2RlPiAtIEluZGV4IGFmdGVyIHRoZSBsYXN0IGNoYXJhY3RlciBpbiB0aGUgc3RyaW5nIHRvIGNvcHk8L2RkPjxkZD48Y29kZT5kc3Q8L2NvZGU+IC0gVGhlIGRlc3RpbmF0aW9uIGFycmF5PC9kZD48ZGQ+PGNvZGU+ZHN0QmVnaW48L2NvZGU+IC0gVGhlIHN0YXJ0IG9mZnNldCBpbiB0aGUgZGVzdGluYXRpb24gYXJyYXk8L2RkPgorICAgICAgICAgICAgPGR0PjxzcGFuIGNsYXNzPSJzdHJvbmciPlRocm93czo8L3NwYW4+PC9kdD4KKyAgICAgICAgICAgIDxkZD48Y29kZT48YSBocmVmPSIuLi8uLi9qYXZhL2xhbmcvSW5kZXhPdXRPZkJvdW5kc0V4Y2VwdGlvbi5odG1sIiB0aXRsZT0iY2xhc3MgaW4gamF2YS5sYW5nIj5JbmRleE91dE9mQm91bmRzRXhjZXB0aW9uPC9hPjwvY29kZT4gLSBJZiBhbnkgb2YgdGhlIGZvbGxvd2luZyBpcyB0cnVlOgorICAgICAgICAgICAgICAgIDx1bD4KKyAgICAgICAgICAgICAgICAgICAgPGxpPiA8Y29kZT5zcmNCZWdpbjwvY29kZT4gaXMgbmVnYXRpdmUKKyAgICAgICAgICAgICAgICAgICAgPGxpPiA8Y29kZT5zcmNCZWdpbjwvY29kZT4gaXMgZ3JlYXRlciB0aGFuIDxjb2RlPnNyY0VuZDwvY29kZT4KKyAgICAgICAgICAgICAgICAgICAgPGxpPiA8Y29kZT5zcmNFbmQ8L2NvZGU+IGlzIGdyZWF0ZXIgdGhhbiB0aGUgbGVuZ3RoIG9mIHRoaXMgU3RyaW5nCisgICAgICAgICAgICAgICAgICAgIDxsaT4gPGNvZGU+ZHN0QmVnaW48L2NvZGU+IGlzIG5lZ2F0aXZlCisgICAgICAgICAgICAgICAgICAgIDxsaT4gPGNvZGU+ZHN0QmVnaW4rKHNyY0VuZC1zcmNCZWdpbik8L2NvZGU+IGlzIGxhcmdlciB0aGFuIDxjb2RlPmRzdC5sZW5ndGg8L2NvZGU+CisgICAgICAgICAgICAgICAgPC91bD48L2RkPjwvZGw+CisgICAgPC9saT4KKzwvdWw+Cis8YSBuYW1lPSJnZXRCeXRlcyhqYXZhLmxhbmcuU3RyaW5nKSI+CisgICAgPCEtLSAgIC0tPgorPC9hPgorPHVsIGNsYXNzPSJibG9ja0xpc3QiPgorICAgIDxsaSBjbGFzcz0iYmxvY2tMaXN0Ij4KKyAgICAgICAgPGg0PmdldEJ5dGVzPC9oND4KKzxwcmU+cHVibGljJm5ic3A7Ynl0ZVtdJm5ic3A7Z2V0Qnl0ZXMoPGEgaHJlZj0iLi4vLi4vamF2YS9sYW5nL1N0cmluZy5odG1sIiB0aXRsZT0iY2xhc3MgaW4gamF2YS5sYW5nIj5TdHJpbmc8L2E+Jm5ic3A7Y2hhcnNldE5hbWUpCisgICAgICAgICAgICAgICAgdGhyb3dzIDxhIGhyZWY9Ii4uLy4uL2phdmEvaW8vVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbi5odG1sIiB0aXRsZT0iY2xhc3MgaW4gamF2YS5pbyI+VW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbjwvYT48L3ByZT4KKyAgICAgICAgPGRpdiBjbGFzcz0iYmxvY2siPkVuY29kZXMgdGhpcyA8Y29kZT5TdHJpbmc8L2NvZGU+IGludG8gYSBzZXF1ZW5jZSBvZiBieXRlcyB1c2luZyB0aGUgbmFtZWQKKyAgICAgICAgICAgIGNoYXJzZXQsIHN0b3JpbmcgdGhlIHJlc3VsdCBpbnRvIGEgbmV3IGJ5dGUgYXJyYXkuCisKKyAgICAgICAgICAgIDxwPiBUaGUgYmVoYXZpb3Igb2YgdGhpcyBtZXRob2Qgd2hlbiB0aGlzIHN0cmluZyBjYW5ub3QgYmUgZW5jb2RlZCBpbgorICAgICAgICAgICAgICAgIHRoZSBnaXZlbiBjaGFyc2V0IGlzIHVuc3BlY2lmaWVkLiAgVGhlIDxhIGhyZWY9Ii4uLy4uL2phdmEvbmlvL2NoYXJzZXQvQ2hhcnNldEVuY29kZXIuaHRtbCIgdGl0bGU9ImNsYXNzIGluIGphdmEubmlvLmNoYXJzZXQiPjxjb2RlPkNoYXJzZXRFbmNvZGVyPC9jb2RlPjwvYT4gY2xhc3Mgc2hvdWxkIGJlIHVzZWQgd2hlbiBtb3JlIGNvbnRyb2wKKyAgICAgICAgICAgICAgICBvdmVyIHRoZSBlbmNvZGluZyBwcm9jZXNzIGlzIHJlcXVpcmVkLjwvZGl2PgorICAgICAgICA8ZGw+PGR0PjxzcGFuIGNsYXNzPSJzdHJvbmciPlBhcmFtZXRlcnM6PC9zcGFuPjwvZHQ+PGRkPjxjb2RlPmNoYXJzZXROYW1lPC9jb2RlPiAtIFRoZSBuYW1lIG9mIGEgc3VwcG9ydGVkIDxhIGhyZWY9Ii4uLy4uL2phdmEvbmlvL2NoYXJzZXQvQ2hhcnNldC5odG1sIiB0aXRsZT0iY2xhc3MgaW4gamF2YS5uaW8uY2hhcnNldCI+Y2hhcnNldDwvYT48L2RkPgorICAgICAgICAgICAgPGR0PjxzcGFuIGNsYXNzPSJzdHJvbmciPlJldHVybnM6PC9zcGFuPjwvZHQ+PGRkPlRoZSByZXN1bHRhbnQgYnl0ZSBhcnJheTwvZGQ+CisgICAgICAgICAgICA8ZHQ+PHNwYW4gY2xhc3M9InN0cm9uZyI+VGhyb3dzOjwvc3Bhbj48L2R0PgorICAgICAgICAgICAgPGRkPjxjb2RlPjxhIGhyZWY9Ii4uLy4uL2phdmEvaW8vVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbi5odG1sIiB0aXRsZT0iY2xhc3MgaW4gamF2YS5pbyI+VW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbjwvYT48L2NvZGU+IC0gSWYgdGhlIG5hbWVkIGNoYXJzZXQgaXMgbm90IHN1cHBvcnRlZDwvZGQ+PGR0PjxzcGFuIGNsYXNzPSJzdHJvbmciPlNpbmNlOjwvc3Bhbj48L2R0PgorICAgICAgICAgICAgPGRkPkpESzEuMTwvZGQ+PC9kbD4KKyAgICA8L2xpPgorPC91bD4KKzxhIG5hbWU9ImdldEJ5dGVzKGphdmEubmlvLmNoYXJzZXQuQ2hhcnNldCkiPgorICAgIDwhLS0gICAtLT4KKzwvYT4KKzx1bCBjbGFzcz0iYmxvY2tMaXN0Ij4KKyAgICA8bGkgY2xhc3M9ImJsb2NrTGlzdCI+CisgICAgICAgIDxoND5nZXRCeXRlczwvaDQ+CisgICAgICAgIDxwcmU+cHVibGljJm5ic3A7Ynl0ZVtdJm5ic3A7Z2V0Qnl0ZXMoPGEgaHJlZj0iLi4vLi4vamF2YS9uaW8vY2hhcnNldC9DaGFyc2V0Lmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBqYXZhLm5pby5jaGFyc2V0Ij5DaGFyc2V0PC9hPiZuYnNwO2NoYXJzZXQpPC9wcmU+CisgICAgICAgIDxkaXYgY2xhc3M9ImJsb2NrIj5FbmNvZGVzIHRoaXMgPGNvZGU+U3RyaW5nPC9jb2RlPiBpbnRvIGEgc2VxdWVuY2Ugb2YgYnl0ZXMgdXNpbmcgdGhlIGdpdmVuCisgICAgICAgICAgICA8YSBocmVmPSIuLi8uLi9qYXZhL25pby9jaGFyc2V0L0NoYXJzZXQuaHRtbCIgdGl0bGU9ImNsYXNzIGluIGphdmEubmlvLmNoYXJzZXQiPmNoYXJzZXQ8L2E+LCBzdG9yaW5nIHRoZSByZXN1bHQgaW50byBhCisgICAgICAgICAgICBuZXcgYnl0ZSBhcnJheS4KKworICAgICAgICAgICAgPHA+IFRoaXMgbWV0aG9kIGFsd2F5cyByZXBsYWNlcyBtYWxmb3JtZWQtaW5wdXQgYW5kIHVubWFwcGFibGUtY2hhcmFjdGVyCisgICAgICAgICAgICAgICAgc2VxdWVuY2VzIHdpdGggdGhpcyBjaGFyc2V0J3MgZGVmYXVsdCByZXBsYWNlbWVudCBieXRlIGFycmF5LiAgVGhlCisgICAgICAgICAgICAgICAgPGEgaHJlZj0iLi4vLi4vamF2YS9uaW8vY2hhcnNldC9DaGFyc2V0RW5jb2Rlci5odG1sIiB0aXRsZT0iY2xhc3MgaW4gamF2YS5uaW8uY2hhcnNldCI+PGNvZGU+Q2hhcnNldEVuY29kZXI8L2NvZGU+PC9hPiBjbGFzcyBzaG91bGQgYmUgdXNlZCB3aGVuIG1vcmUKKyAgICAgICAgICAgICAgICBjb250cm9sIG92ZXIgdGhlIGVuY29kaW5nIHByb2Nlc3MgaXMgcmVxdWlyZWQuPC9kaXY+CisgICAgICAgIDxkbD48ZHQ+PHNwYW4gY2xhc3M9InN0cm9uZyI+UGFyYW1ldGVyczo8L3NwYW4+PC9kdD48ZGQ+PGNvZGU+Y2hhcnNldDwvY29kZT4gLSBUaGUgPGEgaHJlZj0iLi4vLi4vamF2YS9uaW8vY2hhcnNldC9DaGFyc2V0Lmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBqYXZhLm5pby5jaGFyc2V0Ij5DaGFyc2V0PC9hPiB0byBiZSB1c2VkIHRvIGVuY29kZQorICAgICAgICAgICAgdGhlIDxjb2RlPlN0cmluZzwvY29kZT48L2RkPgorICAgICAgICAgICAgPGR0PjxzcGFuIGNsYXNzPSJzdHJvbmciPlJldHVybnM6PC9zcGFuPjwvZHQ+PGRkPlRoZSByZXN1bHRhbnQgYnl0ZSBhcnJheTwvZGQ+PGR0PjxzcGFuIGNsYXNzPSJzdHJvbmciPlNpbmNlOjwvc3Bhbj48L2R0PgorICAgICAgICAgICAgPGRkPjEuNjwvZGQ+PC9kbD4KKyAgICA8L2xpPgorPC91bD4KKzxhIG5hbWU9ImdldEJ5dGVzKCkiPgorICAgIDwhLS0gICAtLT4KKzwvYT4KKzx1bCBjbGFzcz0iYmxvY2tMaXN0Ij4KKyAgICA8bGkgY2xhc3M9ImJsb2NrTGlzdCI+CisgICAgICAgIDxoND5nZXRCeXRlczwvaDQ+CisgICAgICAgIDxwcmU+cHVibGljJm5ic3A7Ynl0ZVtdJm5ic3A7Z2V0Qnl0ZXMoKTwvcHJlPgorICAgICAgICA8ZGl2IGNsYXNzPSJibG9jayI+RW5jb2RlcyB0aGlzIDxjb2RlPlN0cmluZzwvY29kZT4gaW50byBhIHNlcXVlbmNlIG9mIGJ5dGVzIHVzaW5nIHRoZQorICAgICAgICAgICAgcGxhdGZvcm0ncyBkZWZhdWx0IGNoYXJzZXQsIHN0b3JpbmcgdGhlIHJlc3VsdCBpbnRvIGEgbmV3IGJ5dGUgYXJyYXkuCisKKyAgICAgICAgICAgIDxwPiBUaGUgYmVoYXZpb3Igb2YgdGhpcyBtZXRob2Qgd2hlbiB0aGlzIHN0cmluZyBjYW5ub3QgYmUgZW5jb2RlZCBpbgorICAgICAgICAgICAgICAgIHRoZSBkZWZhdWx0IGNoYXJzZXQgaXMgdW5zcGVjaWZpZWQuICBUaGUgPGEgaHJlZj0iLi4vLi4vamF2YS9uaW8vY2hhcnNldC9DaGFyc2V0RW5jb2Rlci5odG1sIiB0aXRsZT0iY2xhc3MgaW4gamF2YS5uaW8uY2hhcnNldCI+PGNvZGU+Q2hhcnNldEVuY29kZXI8L2NvZGU+PC9hPiBjbGFzcyBzaG91bGQgYmUgdXNlZCB3aGVuIG1vcmUgY29udHJvbAorICAgICAgICAgICAgICAgIG92ZXIgdGhlIGVuY29kaW5nIHByb2Nlc3MgaXMgcmVxdWlyZWQuPC9kaXY+CisgICAgICAgIDxkbD48ZHQ+PHNwYW4gY2xhc3M9InN0cm9uZyI+UmV0dXJuczo8L3NwYW4+PC9kdD48ZGQ+VGhlIHJlc3VsdGFudCBieXRlIGFycmF5PC9kZD48ZHQ+PHNwYW4gY2xhc3M9InN0cm9uZyI+U2luY2U6PC9zcGFuPjwvZHQ+CisgICAgICAgICAgICA8ZGQ+SkRLMS4xPC9kZD48L2RsPgorICAgIDwvbGk+Cis8L3VsPgorPGEgbmFtZT0iZXF1YWxzKGphdmEubGFuZy5PYmplY3QpIj4KKyAgICA8IS0tICAgLS0+Cis8L2E+Cis8dWwgY2xhc3M9ImJsb2NrTGlzdCI+CisgICAgPGxpIGNsYXNzPSJibG9ja0xpc3QiPgorICAgICAgICA8aDQ+ZXF1YWxzPC9oND4KKyAgICAgICAgPHByZT5wdWJsaWMmbmJzcDtib29sZWFuJm5ic3A7ZXF1YWxzKDxhIGhyZWY9Ii4uLy4uL2phdmEvbGFuZy9PYmplY3QuaHRtbCIgdGl0bGU9ImNsYXNzIGluIGphdmEubGFuZyI+T2JqZWN0PC9hPiZuYnNwO2FuT2JqZWN0KTwvcHJlPgorICAgICAgICA8ZGl2IGNsYXNzPSJibG9jayI+Q29tcGFyZXMgdGhpcyBzdHJpbmcgdG8gdGhlIHNwZWNpZmllZCBvYmplY3QuICBUaGUgcmVzdWx0IGlzIDxjb2RlPnRydWU8L2NvZGU+IGlmIGFuZCBvbmx5IGlmIHRoZSBhcmd1bWVudCBpcyBub3QgPGNvZGU+bnVsbDwvY29kZT4gYW5kIGlzIGEgPGNvZGU+U3RyaW5nPC9jb2RlPiBvYmplY3QgdGhhdCByZXByZXNlbnRzIHRoZSBzYW1lIHNlcXVlbmNlIG9mIGNoYXJhY3RlcnMgYXMgdGhpcworICAgICAgICAgICAgb2JqZWN0LjwvZGl2PgorICAgICAgICA8ZGw+CisgICAgICAgICAgICA8ZHQ+PHN0cm9uZz5PdmVycmlkZXM6PC9zdHJvbmc+PC9kdD4KKyAgICAgICAgICAgIDxkZD48Y29kZT48YSBocmVmPSIuLi8uLi9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjZXF1YWxzKGphdmEubGFuZy5PYmplY3QpIj5lcXVhbHM8L2E+PC9jb2RlPiZuYnNwO2luIGNsYXNzJm5ic3A7PGNvZGU+PGEgaHJlZj0iLi4vLi4vamF2YS9sYW5nL09iamVjdC5odG1sIiB0aXRsZT0iY2xhc3MgaW4gamF2YS5sYW5nIj5PYmplY3Q8L2E+PC9jb2RlPjwvZGQ+CisgICAgICAgICAgICA8ZHQ+PHNwYW4gY2xhc3M9InN0cm9uZyI+UGFyYW1ldGVyczo8L3NwYW4+PC9kdD48ZGQ+PGNvZGU+YW5PYmplY3Q8L2NvZGU+IC0gVGhlIG9iamVjdCB0byBjb21wYXJlIHRoaXMgPGNvZGU+U3RyaW5nPC9jb2RlPiBhZ2FpbnN0PC9kZD4KKyAgICAgICAgICAgIDxkdD48c3BhbiBjbGFzcz0ic3Ryb25nIj5SZXR1cm5zOjwvc3Bhbj48L2R0PjxkZD48Y29kZT50cnVlPC9jb2RlPiBpZiB0aGUgZ2l2ZW4gb2JqZWN0IHJlcHJlc2VudHMgYSA8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICAgICAgICBlcXVpdmFsZW50IHRvIHRoaXMgc3RyaW5nLCA8Y29kZT5mYWxzZTwvY29kZT4gb3RoZXJ3aXNlPC9kZD48ZHQ+PHNwYW4gY2xhc3M9InN0cm9uZyI+U2VlIEFsc286PC9zcGFuPjwvZHQ+PGRkPjxhIGhyZWY9Ii4uLy4uL2phdmEvbGFuZy9TdHJpbmcuaHRtbCNjb21wYXJlVG8oamF2YS5sYW5nLlN0cmluZykiPjxjb2RlPmNvbXBhcmVUbyhTdHJpbmcpPC9jb2RlPjwvYT4sCisgICAgICAgICAgICA8YSBocmVmPSIuLi8uLi9qYXZhL2xhbmcvU3RyaW5nLmh0bWwjZXF1YWxzSWdub3JlQ2FzZShqYXZhLmxhbmcuU3RyaW5nKSI+PGNvZGU+ZXF1YWxzSWdub3JlQ2FzZShTdHJpbmcpPC9jb2RlPjwvYT48L2RkPjwvZGw+CisgICAgPC9saT4KKzwvdWw+Cis8YSBuYW1lPSJjb250ZW50RXF1YWxzKGphdmEubGFuZy5TdHJpbmdCdWZmZXIpIj4KKyAgICA8IS0tICAgLS0+Cis8L2E+Cis8dWwgY2xhc3M9ImJsb2NrTGlzdCI+CisgICAgPGxpIGNsYXNzPSJibG9ja0xpc3QiPgorICAgICAgICA8aDQ+Y29udGVudEVxdWFsczwvaDQ+CisgICAgICAgIDxwcmU+cHVibGljJm5ic3A7Ym9vbGVhbiZuYnNwO2NvbnRlbnRFcXVhbHMoPGEgaHJlZj0iLi4vLi4vamF2YS9sYW5nL1N0cmluZ0J1ZmZlci5odG1sIiB0aXRsZT0iY2xhc3MgaW4gamF2YS5sYW5nIj5TdHJpbmdCdWZmZXI8L2E+Jm5ic3A7c2IpPC9wcmU+CisgICAgICAgIDxkaXYgY2xhc3M9ImJsb2NrIj5Db21wYXJlcyB0aGlzIHN0cmluZyB0byB0aGUgc3BlY2lmaWVkIDxjb2RlPlN0cmluZ0J1ZmZlcjwvY29kZT4uICBUaGUgcmVzdWx0CisgICAgICAgICAgICBpcyA8Y29kZT50cnVlPC9jb2RlPiBpZiBhbmQgb25seSBpZiB0aGlzIDxjb2RlPlN0cmluZzwvY29kZT4gcmVwcmVzZW50cyB0aGUgc2FtZQorICAgICAgICAgICAgc2VxdWVuY2Ugb2YgY2hhcmFjdGVycyBhcyB0aGUgc3BlY2lmaWVkIDxjb2RlPlN0cmluZ0J1ZmZlcjwvY29kZT4uPC9kaXY+CisgICAgICAgIDxkbD48ZHQ+PHNwYW4gY2xhc3M9InN0cm9uZyI+UGFyYW1ldGVyczo8L3NwYW4+PC9kdD48ZGQ+PGNvZGU+c2I8L2NvZGU+IC0gVGhlIDxjb2RlPlN0cmluZ0J1ZmZlcjwvY29kZT4gdG8gY29tcGFyZSB0aGlzIDxjb2RlPlN0cmluZzwvY29kZT4gYWdhaW5zdDwvZGQ+CisgICAgICAgICAgICA8ZHQ+PHNwYW4gY2xhc3M9InN0cm9uZyI+UmV0dXJuczo8L3NwYW4+PC9kdD48ZGQ+PGNvZGU+dHJ1ZTwvY29kZT4gaWYgdGhpcyA8Y29kZT5TdHJpbmc8L2NvZGU+IHJlcHJlc2VudHMgdGhlIHNhbWUKKyAgICAgICAgICAgICAgICBzZXF1ZW5jZSBvZiBjaGFyYWN0ZXJzIGFzIHRoZSBzcGVjaWZpZWQgPGNvZGU+U3RyaW5nQnVmZmVyPC9jb2RlPiwKKyAgICAgICAgICAgICAgICA8Y29kZT5mYWxzZTwvY29kZT4gb3RoZXJ3aXNlPC9kZD48ZHQ+PHNwYW4gY2xhc3M9InN0cm9uZyI+U2luY2U6PC9zcGFuPjwvZHQ+CisgICAgICAgICAgICA8ZGQ+MS40PC9kZD48L2RsPgorICAgIDwvbGk+Cis8L3VsPgorPGEgbmFtZT0iY29udGVudEVxdWFscyhqYXZhLmxhbmcuQ2hhclNlcXVlbmNlKSI+CisgICAgPCEtLSAgIC0tPgorPC9hPgorPHVsIGNsYXNzPSJibG9ja0xpc3QiPgorICAgIDxsaSBjbGFzcz0iYmxvY2tMaXN0Ij4KKyAgICAgICAgPGg0PmNvbnRlbnRFcXVhbHM8L2g0PgorICAgICAgICA8cHJlPnB1YmxpYyZuYnNwO2Jvb2xlYW4mbmJzcDtjb250ZW50RXF1YWxzKDxhIGhyZWY9Ii4uLy4uL2phdmEvbGFuZy9DaGFyU2VxdWVuY2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBqYXZhLmxhbmciPkNoYXJTZXF1ZW5jZTwvYT4mbmJzcDtjcyk8L3ByZT4KKyAgICAgICAgPGRpdiBjbGFzcz0iYmxvY2siPkNvbXBhcmVzIHRoaXMgc3RyaW5nIHRvIHRoZSBzcGVjaWZpZWQgPGNvZGU+Q2hhclNlcXVlbmNlPC9jb2RlPi4gIFRoZSByZXN1bHQKKyAgICAgICAgICAgIGlzIDxjb2RlPnRydWU8L2NvZGU+IGlmIGFuZCBvbmx5IGlmIHRoaXMgPGNvZGU+U3RyaW5nPC9jb2RlPiByZXByZXNlbnRzIHRoZSBzYW1lCisgICAgICAgICAgICBzZXF1ZW5jZSBvZiBjaGFyIHZhbHVlcyBhcyB0aGUgc3BlY2lmaWVkIHNlcXVlbmNlLjwvZGl2PgorICAgICAgICA8ZGw+PGR0PjxzcGFuIGNsYXNzPSJzdHJvbmciPlBhcmFtZXRlcnM6PC9zcGFuPjwvZHQ+PGRkPjxjb2RlPmNzPC9jb2RlPiAtIFRoZSBzZXF1ZW5jZSB0byBjb21wYXJlIHRoaXMgPGNvZGU+U3RyaW5nPC9jb2RlPiBhZ2FpbnN0PC9kZD4KKyAgICAgICAgICAgIDxkdD48c3BhbiBjbGFzcz0ic3Ryb25nIj5SZXR1cm5zOjwvc3Bhbj48L2R0PjxkZD48Y29kZT50cnVlPC9jb2RlPiBpZiB0aGlzIDxjb2RlPlN0cmluZzwvY29kZT4gcmVwcmVzZW50cyB0aGUgc2FtZQorICAgICAgICAgICAgICAgIHNlcXVlbmNlIG9mIGNoYXIgdmFsdWVzIGFzIHRoZSBzcGVjaWZpZWQgc2VxdWVuY2UsIDxjb2RlPmZhbHNlPC9jb2RlPiBvdGhlcndpc2U8L2RkPjxkdD48c3BhbiBjbGFzcz0ic3Ryb25nIj5TaW5jZTo8L3NwYW4+PC9kdD4KKyAgICAgICAgICAgIDxkZD4xLjU8L2RkPjwvZGw+CisgICAgPC9saT4KKzwvdWw+Cis8YSBuYW1lPSJlcXVhbHNJZ25vcmVDYXNlKGphdmEubGFuZy5TdHJpbmcpIj4KKyAgICA8IS0tICAgLS0+Cis8L2E+Cis8dWwgY2xhc3M9ImJsb2NrTGlzdCI+CisgICAgPGxpIGNsYXNzPSJibG9ja0xpc3QiPgorICAgICAgICA8aDQ+ZXF1YWxzSWdub3JlQ2FzZTwvaDQ+CisgICAgICAgIDxwcmU+cHVibGljJm5ic3A7Ym9vbGVhbiZuYnNwO2VxdWFsc0lnbm9yZUNhc2UoPGEgaHJlZj0iLi4vLi4vamF2YS9sYW5nL1N0cmluZy5odG1sIiB0aXRsZT0iY2xhc3MgaW4gamF2YS5sYW5nIj5TdHJpbmc8L2E+Jm5ic3A7YW5vdGhlclN0cmluZyk8L3ByZT4KKyAgICAgICAgPGRpdiBjbGFzcz0iYmxvY2siPkNvbXBhcmVzIHRoaXMgPGNvZGU+U3RyaW5nPC9jb2RlPiB0byBhbm90aGVyIDxjb2RlPlN0cmluZzwvY29kZT4sIGlnbm9yaW5nIGNhc2UKKyAgICAgICAgICAgIGNvbnNpZGVyYXRpb25zLiAgVHdvIHN0cmluZ3MgYXJlIGNvbnNpZGVyZWQgZXF1YWwgaWdub3JpbmcgY2FzZSBpZiB0aGV5CisgICAgICAgICAgICBhcmUgb2YgdGhlIHNhbWUgbGVuZ3RoIGFuZCBjb3JyZXNwb25kaW5nIGNoYXJhY3RlcnMgaW4gdGhlIHR3byBzdHJpbmdzCisgICAgICAgICAgICBhcmUgZXF1YWwgaWdub3JpbmcgY2FzZS4KKworICAgICAgICAgICAgPHA+IFR3byBjaGFyYWN0ZXJzIDxjb2RlPmMxPC9jb2RlPiBhbmQgPGNvZGU+YzI8L2NvZGU+IGFyZSBjb25zaWRlcmVkIHRoZSBzYW1lCisgICAgICAgICAgICAgICAgaWdub3JpbmcgY2FzZSBpZiBhdCBsZWFzdCBvbmUgb2YgdGhlIGZvbGxvd2luZyBpcyB0cnVlOgorICAgICAgICAgICAgPHVsPgorICAgICAgICAgICAgICAgIDxsaT4gVGhlIHR3byBjaGFyYWN0ZXJzIGFyZSB0aGUgc2FtZSAoYXMgY29tcGFyZWQgYnkgdGhlCisgICAgICAgICAgICAgICAgICAgIDxjb2RlPj09PC9jb2RlPiBvcGVyYXRvcikKKyAgICAgICAgICAgICAgICA8bGk+IEFwcGx5aW5nIHRoZSBtZXRob2QgPGEgaHJlZj0iLi4vLi4vamF2YS9sYW5nL0NoYXJhY3Rlci5odG1sI3RvVXBwZXJDYXNlKGNoYXIpIj48Y29kZT5DaGFyYWN0ZXIudG9VcHBlckNhc2UoY2hhcik8L2NvZGU+PC9hPiB0byBlYWNoIGNoYXJhY3RlcgorICAgICAgICAgICAgICAgICAgICBwcm9kdWNlcyB0aGUgc2FtZSByZXN1bHQKKyAgICAgICAgICAgICAgICA8bGk+IEFwcGx5aW5nIHRoZSBtZXRob2QgPGEgaHJlZj0iLi4vLi4vamF2YS9sYW5nL0NoYXJhY3Rlci5odG1sI3RvTG93ZXJDYXNlKGNoYXIpIj48Y29kZT5DaGFyYWN0ZXIudG9Mb3dlckNhc2UoY2hhcik8L2NvZGU+PC9hPiB0byBlYWNoIGNoYXJhY3RlcgorICAgICAgICAgICAgICAgICAgICBwcm9kdWNlcyB0aGUgc2FtZSByZXN1bHQKKyAgICAgICAgICAgIDwvdWw+PC9kaXY+CisgICAgICAgIDxkbD48ZHQ+PHNwYW4gY2xhc3M9InN0cm9uZyI+UGFyYW1ldGVyczo8L3NwYW4+PC9kdD48ZGQ+PGNvZGU+YW5vdGhlclN0cmluZzwvY29kZT4gLSBUaGUgPGNvZGU+U3RyaW5nPC9jb2RlPiB0byBjb21wYXJlIHRoaXMgPGNvZGU+U3RyaW5nPC9jb2RlPiBhZ2FpbnN0PC9kZD4KKyAgICAgICAgICAgIDxkdD48c3BhbiBjbGFzcz0ic3Ryb25nIj5SZXR1cm5zOjwvc3Bhbj48L2R0PjxkZD48Y29kZT50cnVlPC9jb2RlPiBpZiB0aGUgYXJndW1lbnQgaXMgbm90IDxjb2RlPm51bGw8L2NvZGU+IGFuZCBpdAorICAgICAgICAgICAgICAgIHJlcHJlc2VudHMgYW4gZXF1aXZhbGVudCA8Y29kZT5TdHJpbmc8L2NvZGU+IGlnbm9yaW5nIGNhc2U7IDxjb2RlPmZhbHNlPC9jb2RlPiBvdGhlcndpc2U8L2RkPjxkdD48c3BhbiBjbGFzcz0ic3Ryb25nIj5TZWUgQWxzbzo8L3NwYW4+PC9kdD48ZGQ+PGEgaHJlZj0iLi4vLi4vamF2YS9sYW5nL1N0cmluZy5odG1sI2VxdWFscyhqYXZhLmxhbmcuT2JqZWN0KSI+PGNvZGU+ZXF1YWxzKE9iamVjdCk8L2NvZGU+PC9hPjwvZGQ+PC9kbD4KKyAgICA8L2xpPgorPC91bD4KKzxhIG5hbWU9ImNvbXBhcmVUbyhqYXZhLmxhbmcuU3RyaW5nKSI+CisgICAgPCEtLSAgIC0tPgorPC9hPgorPHVsIGNsYXNzPSJibG9ja0xpc3QiPgorICAgIDxsaSBjbGFzcz0iYmxvY2tMaXN0Ij4KKyAgICAgICAgPGg0PmNvbXBhcmVUbzwvaDQ+CisgICAgICAgIDxwcmU+cHVibGljJm5ic3A7aW50Jm5ic3A7Y29tcGFyZVRvKDxhIGhyZWY9Ii4uLy4uL2phdmEvbGFuZy9TdHJpbmcuaHRtbCIgdGl0bGU9ImNsYXNzIGluIGphdmEubGFuZyI+U3RyaW5nPC9hPiZuYnNwO2Fub3RoZXJTdHJpbmcpPC9wcmU+CisgICAgICAgIDxkaXYgY2xhc3M9ImJsb2NrIj5Db21wYXJlcyB0d28gc3RyaW5ncyBsZXhpY29ncmFwaGljYWxseS4KKyAgICAgICAgICAgIFRoZSBjb21wYXJpc29uIGlzIGJhc2VkIG9uIHRoZSBVbmljb2RlIHZhbHVlIG9mIGVhY2ggY2hhcmFjdGVyIGluCisgICAgICAgICAgICB0aGUgc3RyaW5ncy4gVGhlIGNoYXJhY3RlciBzZXF1ZW5jZSByZXByZXNlbnRlZCBieSB0aGlzCisgICAgICAgICAgICA8Y29kZT5TdHJpbmc8L2NvZGU+IG9iamVjdCBpcyBjb21wYXJlZCBsZXhpY29ncmFwaGljYWxseSB0byB0aGUKKyAgICAgICAgICAgIGNoYXJhY3RlciBzZXF1ZW5jZSByZXByZXNlbnRlZCBieSB0aGUgYXJndW1lbnQgc3RyaW5nLiBUaGUgcmVzdWx0IGlzCisgICAgICAgICAgICBhIG5lZ2F0aXZlIGludGVnZXIgaWYgdGhpcyA8Y29kZT5TdHJpbmc8L2NvZGU+IG9iamVjdAorICAgICAgICAgICAgbGV4aWNvZ3JhcGhpY2FsbHkgcHJlY2VkZXMgdGhlIGFyZ3VtZW50IHN0cmluZy4gVGhlIHJlc3VsdCBpcyBhCisgICAgICAgICAgICBwb3NpdGl2ZSBpbnRlZ2VyIGlmIHRoaXMgPGNvZGU+U3RyaW5nPC9jb2RlPiBvYmplY3QgbGV4aWNvZ3JhcGhpY2FsbHkKKyAgICAgICAgICAgIGZvbGxvd3MgdGhlIGFyZ3VtZW50IHN0cmluZy4gVGhlIHJlc3VsdCBpcyB6ZXJvIGlmIHRoZSBzdHJpbmdzCisgICAgICAgICAgICBhcmUgZXF1YWw7IDxjb2RlPmNvbXBhcmVUbzwvY29kZT4gcmV0dXJucyA8Y29kZT4wPC9jb2RlPiBleGFjdGx5IHdoZW4KKyAgICAgICAgICAgIHRoZSA8YSBocmVmPSIuLi8uLi9qYXZhL2xhbmcvU3RyaW5nLmh0bWwjZXF1YWxzKGphdmEubGFuZy5PYmplY3QpIj48Y29kZT5lcXVhbHMoT2JqZWN0KTwvY29kZT48L2E+IG1ldGhvZCB3b3VsZCByZXR1cm4gPGNvZGU+dHJ1ZTwvY29kZT4uCisgICAgICAgICAgICA8cD4KKyAgICAgICAgICAgICAgICBUaGlzIGlzIHRoZSBkZWZpbml0aW9uIG9mIGxleGljb2dyYXBoaWMgb3JkZXJpbmcuIElmIHR3byBzdHJpbmdzIGFyZQorICAgICAgICAgICAgICAgIGRpZmZlcmVudCwgdGhlbiBlaXRoZXIgdGhleSBoYXZlIGRpZmZlcmVudCBjaGFyYWN0ZXJzIGF0IHNvbWUgaW5kZXgKKyAgICAgICAgICAgICAgICB0aGF0IGlzIGEgdmFsaWQgaW5kZXggZm9yIGJvdGggc3RyaW5ncywgb3IgdGhlaXIgbGVuZ3RocyBhcmUgZGlmZmVyZW50LAorICAgICAgICAgICAgICAgIG9yIGJvdGguIElmIHRoZXkgaGF2ZSBkaWZmZXJlbnQgY2hhcmFjdGVycyBhdCBvbmUgb3IgbW9yZSBpbmRleAorICAgICAgICAgICAgICAgIHBvc2l0aW9ucywgbGV0IDxpPms8L2k+IGJlIHRoZSBzbWFsbGVzdCBzdWNoIGluZGV4OyB0aGVuIHRoZSBzdHJpbmcKKyAgICAgICAgICAgICAgICB3aG9zZSBjaGFyYWN0ZXIgYXQgcG9zaXRpb24gPGk+azwvaT4gaGFzIHRoZSBzbWFsbGVyIHZhbHVlLCBhcworICAgICAgICAgICAgICAgIGRldGVybWluZWQgYnkgdXNpbmcgdGhlICZsdDsgb3BlcmF0b3IsIGxleGljb2dyYXBoaWNhbGx5IHByZWNlZGVzIHRoZQorICAgICAgICAgICAgICAgIG90aGVyIHN0cmluZy4gSW4gdGhpcyBjYXNlLCA8Y29kZT5jb21wYXJlVG88L2NvZGU+IHJldHVybnMgdGhlCisgICAgICAgICAgICAgICAgZGlmZmVyZW5jZSBvZiB0aGUgdHdvIGNoYXJhY3RlciB2YWx1ZXMgYXQgcG9zaXRpb24gPGNvZGU+azwvY29kZT4gaW4KKyAgICAgICAgICAgICAgICB0aGUgdHdvIHN0cmluZyAtLSB0aGF0IGlzLCB0aGUgdmFsdWU6CisgICAgICAgICAgICA8YmxvY2txdW90ZT48cHJlPgorIHRoaXMuY2hhckF0KGspLWFub3RoZXJTdHJpbmcuY2hhckF0KGspCisgPC9wcmU+PC9ibG9ja3F1b3RlPgorICAgICAgICAgICAgSWYgdGhlcmUgaXMgbm8gaW5kZXggcG9zaXRpb24gYXQgd2hpY2ggdGhleSBkaWZmZXIsIHRoZW4gdGhlIHNob3J0ZXIKKyAgICAgICAgICAgIHN0cmluZyBsZXhpY29ncmFwaGljYWxseSBwcmVjZWRlcyB0aGUgbG9uZ2VyIHN0cmluZy4gSW4gdGhpcyBjYXNlLAorICAgICAgICAgICAgPGNvZGU+Y29tcGFyZVRvPC9jb2RlPiByZXR1cm5zIHRoZSBkaWZmZXJlbmNlIG9mIHRoZSBsZW5ndGhzIG9mIHRoZQorICAgICAgICAgICAgc3RyaW5ncyAtLSB0aGF0IGlzLCB0aGUgdmFsdWU6CisgICAgICAgICAgICA8YmxvY2txdW90ZT48cHJlPgorIHRoaXMubGVuZ3RoKCktYW5vdGhlclN0cmluZy5sZW5ndGgoKQorIDwvcHJlPjwvYmxvY2txdW90ZT48L2Rpdj4KKyAgICAgICAgPGRsPgorICAgICAgICAgICAgPGR0PjxzdHJvbmc+U3BlY2lmaWVkIGJ5Ojwvc3Ryb25nPjwvZHQ+CisgICAgICAgICAgICA8ZGQ+PGNvZGU+PGEgaHJlZj0iLi4vLi4vamF2YS9sYW5nL0NvbXBhcmFibGUuaHRtbCNjb21wYXJlVG8oVCkiPmNvbXBhcmVUbzwvYT48L2NvZGU+Jm5ic3A7aW4gaW50ZXJmYWNlJm5ic3A7PGNvZGU+PGEgaHJlZj0iLi4vLi4vamF2YS9sYW5nL0NvbXBhcmFibGUuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBqYXZhLmxhbmciPkNvbXBhcmFibGU8L2E+Jmx0OzxhIGhyZWY9Ii4uLy4uL2phdmEvbGFuZy9TdHJpbmcuaHRtbCIgdGl0bGU9ImNsYXNzIGluIGphdmEubGFuZyI+U3RyaW5nPC9hPiZndDs8L2NvZGU+PC9kZD4KKyAgICAgICAgICAgIDxkdD48c3BhbiBjbGFzcz0ic3Ryb25nIj5QYXJhbWV0ZXJzOjwvc3Bhbj48L2R0PjxkZD48Y29kZT5hbm90aGVyU3RyaW5nPC9jb2RlPiAtIHRoZSA8Y29kZT5TdHJpbmc8L2NvZGU+IHRvIGJlIGNvbXBhcmVkLjwvZGQ+CisgICAgICAgICAgICA8ZHQ+PHNwYW4gY2xhc3M9InN0cm9uZyI+UmV0dXJuczo8L3NwYW4+PC9kdD48ZGQ+dGhlIHZhbHVlIDxjb2RlPjA8L2NvZGU+IGlmIHRoZSBhcmd1bWVudCBzdHJpbmcgaXMgZXF1YWwgdG8KKyAgICAgICAgICAgIHRoaXMgc3RyaW5nOyBhIHZhbHVlIGxlc3MgdGhhbiA8Y29kZT4wPC9jb2RlPiBpZiB0aGlzIHN0cmluZworICAgICAgICAgICAgaXMgbGV4aWNvZ3JhcGhpY2FsbHkgbGVzcyB0aGFuIHRoZSBzdHJpbmcgYXJndW1lbnQ7IGFuZCBhCisgICAgICAgICAgICB2YWx1ZSBncmVhdGVyIHRoYW4gPGNvZGU+MDwvY29kZT4gaWYgdGhpcyBzdHJpbmcgaXMKKyAgICAgICAgICAgIGxleGljb2dyYXBoaWNhbGx5IGdyZWF0ZXIgdGhhbiB0aGUgc3RyaW5nIGFyZ3VtZW50LjwvZGQ+PC9kbD4KKyAgICA8L2xpPgorPC91bD4KKzxhIG5hbWU9ImNvbXBhcmVUb0lnbm9yZUNhc2UoamF2YS5sYW5nLlN0cmluZykiPgorICAgIDwhLS0gICAtLT4KKzwvYT4KKzx1bCBjbGFzcz0iYmxvY2tMaXN0Ij4KKyAgICA8bGkgY2xhc3M9ImJsb2NrTGlzdCI+CisgICAgICAgIDxoND5jb21wYXJlVG9JZ25vcmVDYXNlPC9oND4KKyAgICAgICAgPHByZT5wdWJsaWMmbmJzcDtpbnQmbmJzcDtjb21wYXJlVG9JZ25vcmVDYXNlKDxhIGhyZWY9Ii4uLy4uL2phdmEvbGFuZy9TdHJpbmcuaHRtbCIgdGl0bGU9ImNsYXNzIGluIGphdmEubGFuZyI+U3RyaW5nPC9hPiZuYnNwO3N0cik8L3ByZT4KKyAgICAgICAgPGRpdiBjbGFzcz0iYmxvY2siPkNvbXBhcmVzIHR3byBzdHJpbmdzIGxleGljb2dyYXBoaWNhbGx5LCBpZ25vcmluZyBjYXNlCisgICAgICAgICAgICBkaWZmZXJlbmNlcy4gVGhpcyBtZXRob2QgcmV0dXJucyBhbiBpbnRlZ2VyIHdob3NlIHNpZ24gaXMgdGhhdCBvZgorICAgICAgICAgICAgY2FsbGluZyA8Y29kZT5jb21wYXJlVG88L2NvZGU+IHdpdGggbm9ybWFsaXplZCB2ZXJzaW9ucyBvZiB0aGUgc3RyaW5ncworICAgICAgICAgICAgd2hlcmUgY2FzZSBkaWZmZXJlbmNlcyBoYXZlIGJlZW4gZWxpbWluYXRlZCBieSBjYWxsaW5nCisgICAgICAgICAgICA8Y29kZT5DaGFyYWN0ZXIudG9Mb3dlckNhc2UoQ2hhcmFjdGVyLnRvVXBwZXJDYXNlKGNoYXJhY3RlcikpPC9jb2RlPiBvbgorICAgICAgICAgICAgZWFjaCBjaGFyYWN0ZXIuCisgICAgICAgICAgICA8cD4KKyAgICAgICAgICAgICAgICBOb3RlIHRoYXQgdGhpcyBtZXRob2QgZG9lcyA8ZW0+bm90PC9lbT4gdGFrZSBsb2NhbGUgaW50byBhY2NvdW50LAorICAgICAgICAgICAgICAgIGFuZCB3aWxsIHJlc3VsdCBpbiBhbiB1bnNhdGlzZmFjdG9yeSBvcmRlcmluZyBmb3IgY2VydGFpbiBsb2NhbGVzLgorICAgICAgICAgICAgICAgIFRoZSBqYXZhLnRleHQgcGFja2FnZSBwcm92aWRlcyA8ZW0+Y29sbGF0b3JzPC9lbT4gdG8gYWxsb3cKKyAgICAgICAgICAgICAgICBsb2NhbGUtc2Vuc2l0aXZlIG9yZGVyaW5nLjwvZGl2PgorICAgICAgICA8ZGw+PGR0PjxzcGFuIGNsYXNzPSJzdHJvbmciPlBhcmFtZXRlcnM6PC9zcGFuPjwvZHQ+PGRkPjxjb2RlPnN0cjwvY29kZT4gLSB0aGUgPGNvZGU+U3RyaW5nPC9jb2RlPiB0byBiZSBjb21wYXJlZC48L2RkPgorICAgICAgICAgICAgPGR0PjxzcGFuIGNsYXNzPSJzdHJvbmciPlJldHVybnM6PC9zcGFuPjwvZHQ+PGRkPmEgbmVnYXRpdmUgaW50ZWdlciwgemVybywgb3IgYSBwb3NpdGl2ZSBpbnRlZ2VyIGFzIHRoZQorICAgICAgICAgICAgICAgIHNwZWNpZmllZCBTdHJpbmcgaXMgZ3JlYXRlciB0aGFuLCBlcXVhbCB0bywgb3IgbGVzcworICAgICAgICAgICAgICAgIHRoYW4gdGhpcyBTdHJpbmcsIGlnbm9yaW5nIGNhc2UgY29uc2lkZXJhdGlvbnMuPC9kZD48ZHQ+PHNwYW4gY2xhc3M9InN0cm9uZyI+U2luY2U6PC9zcGFuPjwvZHQ+CisgICAgICAgICAgICA8ZGQ+MS4yPC9kZD4KKyAgICAgICAgICAgIDxkdD48c3BhbiBjbGFzcz0ic3Ryb25nIj5TZWUgQWxzbzo8L3NwYW4+PC9kdD48ZGQ+PGEgaHJlZj0iLi4vLi4vamF2YS90ZXh0L0NvbGxhdG9yLmh0bWwjY29tcGFyZShqYXZhLmxhbmcuU3RyaW5nLCBqYXZhLmxhbmcuU3RyaW5nKSI+PGNvZGU+Q29sbGF0b3IuY29tcGFyZShTdHJpbmcsIFN0cmluZyk8L2NvZGU+PC9hPjwvZGQ+PC9kbD4KKyAgICA8L2xpPgorPC91bD4KKzxhIG5hbWU9InJlZ2lvbk1hdGNoZXMoaW50LCBqYXZhLmxhbmcuU3RyaW5nLCBpbnQsIGludCkiPgorICAgIDwhLS0gICAtLT4KKzwvYT4KKzx1bCBjbGFzcz0iYmxvY2tMaXN0Ij4KKyAgICA8bGkgY2xhc3M9ImJsb2NrTGlzdCI+CisgICAgICAgIDxoND5yZWdpb25NYXRjaGVzPC9oND4KKzxwcmU+cHVibGljJm5ic3A7Ym9vbGVhbiZuYnNwO3JlZ2lvbk1hdGNoZXMoaW50Jm5ic3A7dG9mZnNldCwKKyAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iLi4vLi4vamF2YS9sYW5nL1N0cmluZy5odG1sIiB0aXRsZT0iY2xhc3MgaW4gamF2YS5sYW5nIj5TdHJpbmc8L2E+Jm5ic3A7b3RoZXIsCisgICAgICAgICAgICAgICAgICAgIGludCZuYnNwO29vZmZzZXQsCisgICAgICAgICAgICAgICAgICAgIGludCZuYnNwO2xlbik8L3ByZT4KKyAgICAgICAgPGRpdiBjbGFzcz0iYmxvY2siPlRlc3RzIGlmIHR3byBzdHJpbmcgcmVnaW9ucyBhcmUgZXF1YWwuCisgICAgICAgICAgICA8cD4KKyAgICAgICAgICAgICAgICBBIHN1YnN0cmluZyBvZiB0aGlzIDx0dD5TdHJpbmc8L3R0PiBvYmplY3QgaXMgY29tcGFyZWQgdG8gYSBzdWJzdHJpbmcKKyAgICAgICAgICAgICAgICBvZiB0aGUgYXJndW1lbnQgb3RoZXIuIFRoZSByZXN1bHQgaXMgdHJ1ZSBpZiB0aGVzZSBzdWJzdHJpbmdzCisgICAgICAgICAgICAgICAgcmVwcmVzZW50IGlkZW50aWNhbCBjaGFyYWN0ZXIgc2VxdWVuY2VzLiBUaGUgc3Vic3RyaW5nIG9mIHRoaXMKKyAgICAgICAgICAgICAgICA8dHQ+U3RyaW5nPC90dD4gb2JqZWN0IHRvIGJlIGNvbXBhcmVkIGJlZ2lucyBhdCBpbmRleCA8dHQ+dG9mZnNldDwvdHQ+CisgICAgICAgICAgICAgICAgYW5kIGhhcyBsZW5ndGggPHR0PmxlbjwvdHQ+LiBUaGUgc3Vic3RyaW5nIG9mIG90aGVyIHRvIGJlIGNvbXBhcmVkCisgICAgICAgICAgICAgICAgYmVnaW5zIGF0IGluZGV4IDx0dD5vb2Zmc2V0PC90dD4gYW5kIGhhcyBsZW5ndGggPHR0PmxlbjwvdHQ+LiBUaGUKKyAgICAgICAgICAgICAgICByZXN1bHQgaXMgPHR0PmZhbHNlPC90dD4gaWYgYW5kIG9ubHkgaWYgYXQgbGVhc3Qgb25lIG9mIHRoZSBmb2xsb3dpbmcKKyAgICAgICAgICAgICAgICBpcyB0cnVlOgorICAgICAgICAgICAgPHVsPjxsaT48dHQ+dG9mZnNldDwvdHQ+IGlzIG5lZ2F0aXZlLgorICAgICAgICAgICAgICAgIDxsaT48dHQ+b29mZnNldDwvdHQ+IGlzIG5lZ2F0aXZlLgorICAgICAgICAgICAgICAgIDxsaT48dHQ+dG9mZnNldCtsZW48L3R0PiBpcyBncmVhdGVyIHRoYW4gdGhlIGxlbmd0aCBvZiB0aGlzCisgICAgICAgICAgICAgICAgICAgIDx0dD5TdHJpbmc8L3R0PiBvYmplY3QuCisgICAgICAgICAgICAgICAgPGxpPjx0dD5vb2Zmc2V0K2xlbjwvdHQ+IGlzIGdyZWF0ZXIgdGhhbiB0aGUgbGVuZ3RoIG9mIHRoZSBvdGhlcgorICAgICAgICAgICAgICAgICAgICBhcmd1bWVudC4KKyAgICAgICAgICAgICAgICA8bGk+VGhlcmUgaXMgc29tZSBub25uZWdhdGl2ZSBpbnRlZ2VyIDxpPms8L2k+IGxlc3MgdGhhbiA8dHQ+bGVuPC90dD4KKyAgICAgICAgICAgICAgICAgICAgc3VjaCB0aGF0OgorICAgICAgICAgICAgICAgICAgICA8dHQ+dGhpcy5jaGFyQXQodG9mZnNldCs8aT5rPC9pPikmbmJzcDshPSZuYnNwO290aGVyLmNoYXJBdChvb2Zmc2V0KzxpPms8L2k+KTwvdHQ+CisgICAgICAgICAgICA8L3VsPjwvZGl2PgorICAgICAgICA8ZGw+PGR0PjxzcGFuIGNsYXNzPSJzdHJvbmciPlBhcmFtZXRlcnM6PC9zcGFuPjwvZHQ+PGRkPjxjb2RlPnRvZmZzZXQ8L2NvZGU+IC0gdGhlIHN0YXJ0aW5nIG9mZnNldCBvZiB0aGUgc3VicmVnaW9uIGluIHRoaXMgc3RyaW5nLjwvZGQ+PGRkPjxjb2RlPm90aGVyPC9jb2RlPiAtIHRoZSBzdHJpbmcgYXJndW1lbnQuPC9kZD48ZGQ+PGNvZGU+b29mZnNldDwvY29kZT4gLSB0aGUgc3RhcnRpbmcgb2Zmc2V0IG9mIHRoZSBzdWJyZWdpb24gaW4gdGhlIHN0cmluZworICAgICAgICAgICAgYXJndW1lbnQuPC9kZD48ZGQ+PGNvZGU+bGVuPC9jb2RlPiAtIHRoZSBudW1iZXIgb2YgY2hhcmFjdGVycyB0byBjb21wYXJlLjwvZGQ+CisgICAgICAgICAgICA8ZHQ+PHNwYW4gY2xhc3M9InN0cm9uZyI+UmV0dXJuczo8L3NwYW4+PC9kdD48ZGQ+PGNvZGU+dHJ1ZTwvY29kZT4gaWYgdGhlIHNwZWNpZmllZCBzdWJyZWdpb24gb2YgdGhpcyBzdHJpbmcKKyAgICAgICAgICAgICAgICBleGFjdGx5IG1hdGNoZXMgdGhlIHNwZWNpZmllZCBzdWJyZWdpb24gb2YgdGhlIHN0cmluZyBhcmd1bWVudDsKKyAgICAgICAgICAgICAgICA8Y29kZT5mYWxzZTwvY29kZT4gb3RoZXJ3aXNlLjwvZGQ+PC9kbD4KKyAgICA8L2xpPgorPC91bD4KKzxhIG5hbWU9InJlZ2lvbk1hdGNoZXMoYm9vbGVhbiwgaW50LCBqYXZhLmxhbmcuU3RyaW5nLCBpbnQsIGludCkiPgorICAgIDwhLS0gICAtLT4KKzwvYT4KKzx1bCBjbGFzcz0iYmxvY2tMaXN0Ij4KKyAgICA8bGkgY2xhc3M9ImJsb2NrTGlzdCI+CisgICAgICAgIDxoND5yZWdpb25NYXRjaGVzPC9oND4KKzxwcmU+cHVibGljJm5ic3A7Ym9vbGVhbiZuYnNwO3JlZ2lvbk1hdGNoZXMoYm9vbGVhbiZuYnNwO2lnbm9yZUNhc2UsCisgICAgICAgICAgICAgICAgICAgIGludCZuYnNwO3RvZmZzZXQsCisgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Ii4uLy4uL2phdmEvbGFuZy9TdHJpbmcuaHRtbCIgdGl0bGU9ImNsYXNzIGluIGphdmEubGFuZyI+U3RyaW5nPC9hPiZuYnNwO290aGVyLAorICAgICAgICAgICAgICAgICAgICBpbnQmbmJzcDtvb2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICBpbnQmbmJzcDtsZW4pPC9wcmU+CisgICAgICAgIDxkaXYgY2xhc3M9ImJsb2NrIj5UZXN0cyBpZiB0d28gc3RyaW5nIHJlZ2lvbnMgYXJlIGVxdWFsLgorICAgICAgICAgICAgPHA+CisgICAgICAgICAgICAgICAgQSBzdWJzdHJpbmcgb2YgdGhpcyA8dHQ+U3RyaW5nPC90dD4gb2JqZWN0IGlzIGNvbXBhcmVkIHRvIGEgc3Vic3RyaW5nCisgICAgICAgICAgICAgICAgb2YgdGhlIGFyZ3VtZW50IDx0dD5vdGhlcjwvdHQ+LiBUaGUgcmVzdWx0IGlzIDx0dD50cnVlPC90dD4gaWYgdGhlc2UKKyAgICAgICAgICAgICAgICBzdWJzdHJpbmdzIHJlcHJlc2VudCBjaGFyYWN0ZXIgc2VxdWVuY2VzIHRoYXQgYXJlIHRoZSBzYW1lLCBpZ25vcmluZworICAgICAgICAgICAgICAgIGNhc2UgaWYgYW5kIG9ubHkgaWYgPHR0Pmlnbm9yZUNhc2U8L3R0PiBpcyB0cnVlLiBUaGUgc3Vic3RyaW5nIG9mCisgICAgICAgICAgICAgICAgdGhpcyA8dHQ+U3RyaW5nPC90dD4gb2JqZWN0IHRvIGJlIGNvbXBhcmVkIGJlZ2lucyBhdCBpbmRleAorICAgICAgICAgICAgICAgIDx0dD50b2Zmc2V0PC90dD4gYW5kIGhhcyBsZW5ndGggPHR0PmxlbjwvdHQ+LiBUaGUgc3Vic3RyaW5nIG9mCisgICAgICAgICAgICAgICAgPHR0Pm90aGVyPC90dD4gdG8gYmUgY29tcGFyZWQgYmVnaW5zIGF0IGluZGV4IDx0dD5vb2Zmc2V0PC90dD4gYW5kCisgICAgICAgICAgICAgICAgaGFzIGxlbmd0aCA8dHQ+bGVuPC90dD4uIFRoZSByZXN1bHQgaXMgPHR0PmZhbHNlPC90dD4gaWYgYW5kIG9ubHkgaWYKKyAgICAgICAgICAgICAgICBhdCBsZWFzdCBvbmUgb2YgdGhlIGZvbGxvd2luZyBpcyB0cnVlOgorICAgICAgICAgICAgPHVsPjxsaT48dHQ+dG9mZnNldDwvdHQ+IGlzIG5lZ2F0aXZlLgorICAgICAgICAgICAgICAgIDxsaT48dHQ+b29mZnNldDwvdHQ+IGlzIG5lZ2F0aXZlLgorICAgICAgICAgICAgICAgIDxsaT48dHQ+dG9mZnNldCtsZW48L3R0PiBpcyBncmVhdGVyIHRoYW4gdGhlIGxlbmd0aCBvZiB0aGlzCisgICAgICAgICAgICAgICAgICAgIDx0dD5TdHJpbmc8L3R0PiBvYmplY3QuCisgICAgICAgICAgICAgICAgPGxpPjx0dD5vb2Zmc2V0K2xlbjwvdHQ+IGlzIGdyZWF0ZXIgdGhhbiB0aGUgbGVuZ3RoIG9mIHRoZSBvdGhlcgorICAgICAgICAgICAgICAgICAgICBhcmd1bWVudC4KKyAgICAgICAgICAgICAgICA8bGk+PHR0Pmlnbm9yZUNhc2U8L3R0PiBpcyA8dHQ+ZmFsc2U8L3R0PiBhbmQgdGhlcmUgaXMgc29tZSBub25uZWdhdGl2ZQorICAgICAgICAgICAgICAgICAgICBpbnRlZ2VyIDxpPms8L2k+IGxlc3MgdGhhbiA8dHQ+bGVuPC90dD4gc3VjaCB0aGF0OgorICAgICAgICAgICAgICAgICAgICA8YmxvY2txdW90ZT48cHJlPgorIHRoaXMuY2hhckF0KHRvZmZzZXQraykgIT0gb3RoZXIuY2hhckF0KG9vZmZzZXQraykKKyA8L3ByZT48L2Jsb2NrcXVvdGU+CisgICAgICAgICAgICAgICAgPGxpPjx0dD5pZ25vcmVDYXNlPC90dD4gaXMgPHR0PnRydWU8L3R0PiBhbmQgdGhlcmUgaXMgc29tZSBub25uZWdhdGl2ZQorICAgICAgICAgICAgICAgICAgICBpbnRlZ2VyIDxpPms8L2k+IGxlc3MgdGhhbiA8dHQ+bGVuPC90dD4gc3VjaCB0aGF0OgorICAgICAgICAgICAgICAgICAgICA8YmxvY2txdW90ZT48cHJlPgorIENoYXJhY3Rlci50b0xvd2VyQ2FzZSh0aGlzLmNoYXJBdCh0b2Zmc2V0K2spKSAhPQorICAgICAgICAgICAgICAgQ2hhcmFjdGVyLnRvTG93ZXJDYXNlKG90aGVyLmNoYXJBdChvb2Zmc2V0K2spKQorIDwvcHJlPjwvYmxvY2txdW90ZT4KKyAgICAgICAgICAgICAgICAgICAgYW5kOgorICAgICAgICAgICAgICAgICAgICA8YmxvY2txdW90ZT48cHJlPgorIENoYXJhY3Rlci50b1VwcGVyQ2FzZSh0aGlzLmNoYXJBdCh0b2Zmc2V0K2spKSAhPQorICAgICAgICAgQ2hhcmFjdGVyLnRvVXBwZXJDYXNlKG90aGVyLmNoYXJBdChvb2Zmc2V0K2spKQorIDwvcHJlPjwvYmxvY2txdW90ZT4KKyAgICAgICAgICAgIDwvdWw+PC9kaXY+CisgICAgICAgIDxkbD48ZHQ+PHNwYW4gY2xhc3M9InN0cm9uZyI+UGFyYW1ldGVyczo8L3NwYW4+PC9kdD48ZGQ+PGNvZGU+aWdub3JlQ2FzZTwvY29kZT4gLSBpZiA8Y29kZT50cnVlPC9jb2RlPiwgaWdub3JlIGNhc2Ugd2hlbiBjb21wYXJpbmcKKyAgICAgICAgICAgIGNoYXJhY3RlcnMuPC9kZD48ZGQ+PGNvZGU+dG9mZnNldDwvY29kZT4gLSB0aGUgc3RhcnRpbmcgb2Zmc2V0IG9mIHRoZSBzdWJyZWdpb24gaW4gdGhpcworICAgICAgICAgICAgc3RyaW5nLjwvZGQ+PGRkPjxjb2RlPm90aGVyPC9jb2RlPiAtIHRoZSBzdHJpbmcgYXJndW1lbnQuPC9kZD48ZGQ+PGNvZGU+b29mZnNldDwvY29kZT4gLSB0aGUgc3RhcnRpbmcgb2Zmc2V0IG9mIHRoZSBzdWJyZWdpb24gaW4gdGhlIHN0cmluZworICAgICAgICAgICAgYXJndW1lbnQuPC9kZD48ZGQ+PGNvZGU+bGVuPC9jb2RlPiAtIHRoZSBudW1iZXIgb2YgY2hhcmFjdGVycyB0byBjb21wYXJlLjwvZGQ+CisgICAgICAgICAgICA8ZHQ+PHNwYW4gY2xhc3M9InN0cm9uZyI+UmV0dXJuczo8L3NwYW4+PC9kdD48ZGQ+PGNvZGU+dHJ1ZTwvY29kZT4gaWYgdGhlIHNwZWNpZmllZCBzdWJyZWdpb24gb2YgdGhpcyBzdHJpbmcKKyAgICAgICAgICAgICAgICBtYXRjaGVzIHRoZSBzcGVjaWZpZWQgc3VicmVnaW9uIG9mIHRoZSBzdHJpbmcgYXJndW1lbnQ7CisgICAgICAgICAgICAgICAgPGNvZGU+ZmFsc2U8L2NvZGU+IG90aGVyd2lzZS4gV2hldGhlciB0aGUgbWF0Y2hpbmcgaXMgZXhhY3QKKyAgICAgICAgICAgICAgICBvciBjYXNlIGluc2Vuc2l0aXZlIGRlcGVuZHMgb24gdGhlIDxjb2RlPmlnbm9yZUNhc2U8L2NvZGU+CisgICAgICAgICAgICAgICAgYXJndW1lbnQuPC9kZD48L2RsPgorICAgIDwvbGk+Cis8L3VsPgorPGEgbmFtZT0ic3RhcnRzV2l0aChqYXZhLmxhbmcuU3RyaW5nLCBpbnQpIj4KKyAgICA8IS0tICAgLS0+Cis8L2E+Cis8dWwgY2xhc3M9ImJsb2NrTGlzdCI+CisgICAgPGxpIGNsYXNzPSJibG9ja0xpc3QiPgorICAgICAgICA8aDQ+c3RhcnRzV2l0aDwvaDQ+Cis8cHJlPnB1YmxpYyZuYnNwO2Jvb2xlYW4mbmJzcDtzdGFydHNXaXRoKDxhIGhyZWY9Ii4uLy4uL2phdmEvbGFuZy9TdHJpbmcuaHRtbCIgdGl0bGU9ImNsYXNzIGluIGphdmEubGFuZyI+U3RyaW5nPC9hPiZuYnNwO3ByZWZpeCwKKyAgICAgICAgICAgICAgICAgaW50Jm5ic3A7dG9mZnNldCk8L3ByZT4KKyAgICAgICAgPGRpdiBjbGFzcz0iYmxvY2siPlRlc3RzIGlmIHRoZSBzdWJzdHJpbmcgb2YgdGhpcyBzdHJpbmcgYmVnaW5uaW5nIGF0IHRoZQorICAgICAgICAgICAgc3BlY2lmaWVkIGluZGV4IHN0YXJ0cyB3aXRoIHRoZSBzcGVjaWZpZWQgcHJlZml4LjwvZGl2PgorICAgICAgICA8ZGw+PGR0PjxzcGFuIGNsYXNzPSJzdHJvbmciPlBhcmFtZXRlcnM6PC9zcGFuPjwvZHQ+PGRkPjxjb2RlPnByZWZpeDwvY29kZT4gLSB0aGUgcHJlZml4LjwvZGQ+PGRkPjxjb2RlPnRvZmZzZXQ8L2NvZGU+IC0gd2hlcmUgdG8gYmVnaW4gbG9va2luZyBpbiB0aGlzIHN0cmluZy48L2RkPgorICAgICAgICAgICAgPGR0PjxzcGFuIGNsYXNzPSJzdHJvbmciPlJldHVybnM6PC9zcGFuPjwvZHQ+PGRkPjxjb2RlPnRydWU8L2NvZGU+IGlmIHRoZSBjaGFyYWN0ZXIgc2VxdWVuY2UgcmVwcmVzZW50ZWQgYnkgdGhlCisgICAgICAgICAgICAgICAgYXJndW1lbnQgaXMgYSBwcmVmaXggb2YgdGhlIHN1YnN0cmluZyBvZiB0aGlzIG9iamVjdCBzdGFydGluZworICAgICAgICAgICAgICAgIGF0IGluZGV4IDxjb2RlPnRvZmZzZXQ8L2NvZGU+OyA8Y29kZT5mYWxzZTwvY29kZT4gb3RoZXJ3aXNlLgorICAgICAgICAgICAgICAgIFRoZSByZXN1bHQgaXMgPGNvZGU+ZmFsc2U8L2NvZGU+IGlmIDxjb2RlPnRvZmZzZXQ8L2NvZGU+IGlzCisgICAgICAgICAgICAgICAgbmVnYXRpdmUgb3IgZ3JlYXRlciB0aGFuIHRoZSBsZW5ndGggb2YgdGhpcworICAgICAgICAgICAgICAgIDxjb2RlPlN0cmluZzwvY29kZT4gb2JqZWN0OyBvdGhlcndpc2UgdGhlIHJlc3VsdCBpcyB0aGUgc2FtZQorICAgICAgICAgICAgICAgIGFzIHRoZSByZXN1bHQgb2YgdGhlIGV4cHJlc3Npb24KKyAgICAgICAgICA8cHJlPgorICAgICAgICAgIHRoaXMuc3Vic3RyaW5nKHRvZmZzZXQpLnN0YXJ0c1dpdGgocHJlZml4KQorICAgICAgICAgIDwvcHJlPjwvZGQ+PC9kbD4KKyAgICA8L2xpPgorPC91bD4KKzxhIG5hbWU9InN0YXJ0c1dpdGgoamF2YS5sYW5nLlN0cmluZykiPgorICAgIDwhLS0gICAtLT4KKzwvYT4KKzx1bCBjbGFzcz0iYmxvY2tMaXN0Ij4KKyAgICA8bGkgY2xhc3M9ImJsb2NrTGlzdCI+CisgICAgICAgIDxoND5zdGFydHNXaXRoPC9oND4KKyAgICAgICAgPHByZT5wdWJsaWMmbmJzcDtib29sZWFuJm5ic3A7c3RhcnRzV2l0aCg8YSBocmVmPSIuLi8uLi9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBqYXZhLmxhbmciPlN0cmluZzwvYT4mbmJzcDtwcmVmaXgpPC9wcmU+CisgICAgICAgIDxkaXYgY2xhc3M9ImJsb2NrIj5UZXN0cyBpZiB0aGlzIHN0cmluZyBzdGFydHMgd2l0aCB0aGUgc3BlY2lmaWVkIHByZWZpeC48L2Rpdj4KKyAgICAgICAgPGRsPjxkdD48c3BhbiBjbGFzcz0ic3Ryb25nIj5QYXJhbWV0ZXJzOjwvc3Bhbj48L2R0PjxkZD48Y29kZT5wcmVmaXg8L2NvZGU+IC0gdGhlIHByZWZpeC48L2RkPgorICAgICAgICAgICAgPGR0PjxzcGFuIGNsYXNzPSJzdHJvbmciPlJldHVybnM6PC9zcGFuPjwvZHQ+PGRkPjxjb2RlPnRydWU8L2NvZGU+IGlmIHRoZSBjaGFyYWN0ZXIgc2VxdWVuY2UgcmVwcmVzZW50ZWQgYnkgdGhlCisgICAgICAgICAgICAgICAgYXJndW1lbnQgaXMgYSBwcmVmaXggb2YgdGhlIGNoYXJhY3RlciBzZXF1ZW5jZSByZXByZXNlbnRlZCBieQorICAgICAgICAgICAgICAgIHRoaXMgc3RyaW5nOyA8Y29kZT5mYWxzZTwvY29kZT4gb3RoZXJ3aXNlLgorICAgICAgICAgICAgICAgIE5vdGUgYWxzbyB0aGF0IDxjb2RlPnRydWU8L2NvZGU+IHdpbGwgYmUgcmV0dXJuZWQgaWYgdGhlCisgICAgICAgICAgICAgICAgYXJndW1lbnQgaXMgYW4gZW1wdHkgc3RyaW5nIG9yIGlzIGVxdWFsIHRvIHRoaXMKKyAgICAgICAgICAgICAgICA8Y29kZT5TdHJpbmc8L2NvZGU+IG9iamVjdCBhcyBkZXRlcm1pbmVkIGJ5IHRoZQorICAgICAgICAgICAgICAgIDxhIGhyZWY9Ii4uLy4uL2phdmEvbGFuZy9TdHJpbmcuaHRtbCNlcXVhbHMoamF2YS5sYW5nLk9iamVjdCkiPjxjb2RlPmVxdWFscyhPYmplY3QpPC9jb2RlPjwvYT4gbWV0aG9kLjwvZGQ+PGR0PjxzcGFuIGNsYXNzPSJzdHJvbmciPlNpbmNlOjwvc3Bhbj48L2R0PgorICAgICAgICAgICAgPGRkPjEuIDA8L2RkPjwvZGw+CisgICAgPC9saT4KKzwvdWw+Cis8YSBuYW1lPSJlbmRzV2l0aChqYXZhLmxhbmcuU3RyaW5nKSI+CisgICAgPCEtLSAgIC0tPgorPC9hPgorPHVsIGNsYXNzPSJibG9ja0xpc3QiPgorICAgIDxsaSBjbGFzcz0iYmxvY2tMaXN0Ij4KKyAgICAgICAgPGg0PmVuZHNXaXRoPC9oND4KKyAgICAgICAgPHByZT5wdWJsaWMmbmJzcDtib29sZWFuJm5ic3A7ZW5kc1dpdGgoPGEgaHJlZj0iLi4vLi4vamF2YS9sYW5nL1N0cmluZy5odG1sIiB0aXRsZT0iY2xhc3MgaW4gamF2YS5sYW5nIj5TdHJpbmc8L2E+Jm5ic3A7c3VmZml4KTwvcHJlPgorICAgICAgICA8ZGl2IGNsYXNzPSJibG9jayI+VGVzdHMgaWYgdGhpcyBzdHJpbmcgZW5kcyB3aXRoIHRoZSBzcGVjaWZpZWQgc3VmZml4LjwvZGl2PgorICAgICAgICA8ZGw+PGR0PjxzcGFuIGNsYXNzPSJzdHJvbmciPlBhcmFtZXRlcnM6PC9zcGFuPjwvZHQ+PGRkPjxjb2RlPnN1ZmZpeDwvY29kZT4gLSB0aGUgc3VmZml4LjwvZGQ+CisgICAgICAgICAgICA8ZHQ+PHNwYW4gY2xhc3M9InN0cm9uZyI+UmV0dXJuczo8L3NwYW4+PC9kdD48ZGQ+PGNvZGU+dHJ1ZTwvY29kZT4gaWYgdGhlIGNoYXJhY3RlciBzZXF1ZW5jZSByZXByZXNlbnRlZCBieSB0aGUKKyAgICAgICAgICAgICAgICBhcmd1bWVudCBpcyBhIHN1ZmZpeCBvZiB0aGUgY2hhcmFjdGVyIHNlcXVlbmNlIHJlcHJlc2VudGVkIGJ5CisgICAgICAgICAgICAgICAgdGhpcyBvYmplY3Q7IDxjb2RlPmZhbHNlPC9jb2RlPiBvdGhlcndpc2UuIE5vdGUgdGhhdCB0aGUKKyAgICAgICAgICAgICAgICByZXN1bHQgd2lsbCBiZSA8Y29kZT50cnVlPC9jb2RlPiBpZiB0aGUgYXJndW1lbnQgaXMgdGhlCisgICAgICAgICAgICAgICAgZW1wdHkgc3RyaW5nIG9yIGlzIGVxdWFsIHRvIHRoaXMgPGNvZGU+U3RyaW5nPC9jb2RlPiBvYmplY3QKKyAgICAgICAgICAgICAgICBhcyBkZXRlcm1pbmVkIGJ5IHRoZSA8YSBocmVmPSIuLi8uLi9qYXZhL2xhbmcvU3RyaW5nLmh0bWwjZXF1YWxzKGphdmEubGFuZy5PYmplY3QpIj48Y29kZT5lcXVhbHMoT2JqZWN0KTwvY29kZT48L2E+IG1ldGhvZC48L2RkPjwvZGw+CisgICAgPC9saT4KKzwvdWw+Cis8YSBuYW1lPSJoYXNoQ29kZSgpIj4KKyAgICA8IS0tICAgLS0+Cis8L2E+Cis8dWwgY2xhc3M9ImJsb2NrTGlzdCI+CisgICAgPGxpIGNsYXNzPSJibG9ja0xpc3QiPgorICAgICAgICA8aDQ+aGFzaENvZGU8L2g0PgorICAgICAgICA8cHJlPnB1YmxpYyZuYnNwO2ludCZuYnNwO2hhc2hDb2RlKCk8L3ByZT4KKyAgICAgICAgPGRpdiBjbGFzcz0iYmxvY2siPlJldHVybnMgYSBoYXNoIGNvZGUgZm9yIHRoaXMgc3RyaW5nLiBUaGUgaGFzaCBjb2RlIGZvciBhCisgICAgICAgICAgICA8Y29kZT5TdHJpbmc8L2NvZGU+IG9iamVjdCBpcyBjb21wdXRlZCBhcworICAgICAgICAgICAgPGJsb2NrcXVvdGU+PHByZT4KKyBzWzBdKjMxXihuLTEpICsgc1sxXSozMV4obi0yKSArIC4uLiArIHNbbi0xXQorIDwvcHJlPjwvYmxvY2txdW90ZT4KKyAgICAgICAgICAgIHVzaW5nIDxjb2RlPmludDwvY29kZT4gYXJpdGhtZXRpYywgd2hlcmUgPGNvZGU+c1tpXTwvY29kZT4gaXMgdGhlCisgICAgICAgICAgICA8aT5pPC9pPnRoIGNoYXJhY3RlciBvZiB0aGUgc3RyaW5nLCA8Y29kZT5uPC9jb2RlPiBpcyB0aGUgbGVuZ3RoIG9mCisgICAgICAgICAgICB0aGUgc3RyaW5nLCBhbmQgPGNvZGU+XjwvY29kZT4gaW5kaWNhdGVzIGV4cG9uZW50aWF0aW9uLgorICAgICAgICAgICAgKFRoZSBoYXNoIHZhbHVlIG9mIHRoZSBlbXB0eSBzdHJpbmcgaXMgemVyby4pPC9kaXY+CisgICAgICAgIDxkbD4KKyAgICAgICAgICAgIDxkdD48c3Ryb25nPk92ZXJyaWRlczo8L3N0cm9uZz48L2R0PgorICAgICAgICAgICAgPGRkPjxjb2RlPjxhIGhyZWY9Ii4uLy4uL2phdmEvbGFuZy9PYmplY3QuaHRtbCNoYXNoQ29kZSgpIj5oYXNoQ29kZTwvYT48L2NvZGU+Jm5ic3A7aW4gY2xhc3MmbmJzcDs8Y29kZT48YSBocmVmPSIuLi8uLi9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBqYXZhLmxhbmciPk9iamVjdDwvYT48L2NvZGU+PC9kZD4KKyAgICAgICAgICAgIDxkdD48c3BhbiBjbGFzcz0ic3Ryb25nIj5SZXR1cm5zOjwvc3Bhbj48L2R0PjxkZD5hIGhhc2ggY29kZSB2YWx1ZSBmb3IgdGhpcyBvYmplY3QuPC9kZD48ZHQ+PHNwYW4gY2xhc3M9InN0cm9uZyI+U2VlIEFsc286PC9zcGFuPjwvZHQ+PGRkPjxhIGhyZWY9Ii4uLy4uL2phdmEvbGFuZy9PYmplY3QuaHRtbCNlcXVhbHMoamF2YS5sYW5nLk9iamVjdCkiPjxjb2RlPk9iamVjdC5lcXVhbHMoamF2YS5sYW5nLk9iamVjdCk8L2NvZGU+PC9hPiwKKyAgICAgICAgICAgIDxhIGhyZWY9Ii4uLy4uL2phdmEvbGFuZy9TeXN0ZW0uaHRtbCNpZGVudGl0eUhhc2hDb2RlKGphdmEubGFuZy5PYmplY3QpIj48Y29kZT5TeXN0ZW0uaWRlbnRpdHlIYXNoQ29kZShqYXZhLmxhbmcuT2JqZWN0KTwvY29kZT48L2E+PC9kZD48L2RsPgorICAgIDwvbGk+Cis8L3VsPgorPGEgbmFtZT0iaW5kZXhPZihpbnQpIj4KKyAgICA8IS0tICAgLS0+Cis8L2E+Cis8dWwgY2xhc3M9ImJsb2NrTGlzdCI+CisgICAgPGxpIGNsYXNzPSJibG9ja0xpc3QiPgorICAgICAgICA8aDQ+aW5kZXhPZjwvaDQ+CisgICAgICAgIDxwcmU+cHVibGljJm5ic3A7aW50Jm5ic3A7aW5kZXhPZihpbnQmbmJzcDtjaCk8L3ByZT4KKyAgICAgICAgPGRpdiBjbGFzcz0iYmxvY2siPlJldHVybnMgdGhlIGluZGV4IHdpdGhpbiB0aGlzIHN0cmluZyBvZiB0aGUgZmlyc3Qgb2NjdXJyZW5jZSBvZgorICAgICAgICAgICAgdGhlIHNwZWNpZmllZCBjaGFyYWN0ZXIuIElmIGEgY2hhcmFjdGVyIHdpdGggdmFsdWUKKyAgICAgICAgICAgIDxjb2RlPmNoPC9jb2RlPiBvY2N1cnMgaW4gdGhlIGNoYXJhY3RlciBzZXF1ZW5jZSByZXByZXNlbnRlZCBieQorICAgICAgICAgICAgdGhpcyA8Y29kZT5TdHJpbmc8L2NvZGU+IG9iamVjdCwgdGhlbiB0aGUgaW5kZXggKGluIFVuaWNvZGUKKyAgICAgICAgICAgIGNvZGUgdW5pdHMpIG9mIHRoZSBmaXJzdCBzdWNoIG9jY3VycmVuY2UgaXMgcmV0dXJuZWQuIEZvcgorICAgICAgICAgICAgdmFsdWVzIG9mIDxjb2RlPmNoPC9jb2RlPiBpbiB0aGUgcmFuZ2UgZnJvbSAwIHRvIDB4RkZGRgorICAgICAgICAgICAgKGluY2x1c2l2ZSksIHRoaXMgaXMgdGhlIHNtYWxsZXN0IHZhbHVlIDxpPms8L2k+IHN1Y2ggdGhhdDoKKyAgICAgICAgICAgIDxibG9ja3F1b3RlPjxwcmU+CisgdGhpcy5jaGFyQXQoPGk+azwvaT4pID09IGNoCisgPC9wcmU+PC9ibG9ja3F1b3RlPgorICAgICAgICAgICAgaXMgdHJ1ZS4gRm9yIG90aGVyIHZhbHVlcyBvZiA8Y29kZT5jaDwvY29kZT4sIGl0IGlzIHRoZQorICAgICAgICAgICAgc21hbGxlc3QgdmFsdWUgPGk+azwvaT4gc3VjaCB0aGF0OgorICAgICAgICAgICAgPGJsb2NrcXVvdGU+PHByZT4KKyB0aGlzLmNvZGVQb2ludEF0KDxpPms8L2k+KSA9PSBjaAorIDwvcHJlPjwvYmxvY2txdW90ZT4KKyAgICAgICAgICAgIGlzIHRydWUuIEluIGVpdGhlciBjYXNlLCBpZiBubyBzdWNoIGNoYXJhY3RlciBvY2N1cnMgaW4gdGhpcworICAgICAgICAgICAgc3RyaW5nLCB0aGVuIDxjb2RlPi0xPC9jb2RlPiBpcyByZXR1cm5lZC48L2Rpdj4KKyAgICAgICAgPGRsPjxkdD48c3BhbiBjbGFzcz0ic3Ryb25nIj5QYXJhbWV0ZXJzOjwvc3Bhbj48L2R0PjxkZD48Y29kZT5jaDwvY29kZT4gLSBhIGNoYXJhY3RlciAoVW5pY29kZSBjb2RlIHBvaW50KS48L2RkPgorICAgICAgICAgICAgPGR0PjxzcGFuIGNsYXNzPSJzdHJvbmciPlJldHVybnM6PC9zcGFuPjwvZHQ+PGRkPnRoZSBpbmRleCBvZiB0aGUgZmlyc3Qgb2NjdXJyZW5jZSBvZiB0aGUgY2hhcmFjdGVyIGluIHRoZQorICAgICAgICAgICAgICAgIGNoYXJhY3RlciBzZXF1ZW5jZSByZXByZXNlbnRlZCBieSB0aGlzIG9iamVjdCwgb3IKKyAgICAgICAgICAgICAgICA8Y29kZT4tMTwvY29kZT4gaWYgdGhlIGNoYXJhY3RlciBkb2VzIG5vdCBvY2N1ci48L2RkPjwvZGw+CisgICAgPC9saT4KKzwvdWw+Cis8YSBuYW1lPSJpbmRleE9mKGludCwgaW50KSI+CisgICAgPCEtLSAgIC0tPgorPC9hPgorPHVsIGNsYXNzPSJibG9ja0xpc3QiPgorICAgIDxsaSBjbGFzcz0iYmxvY2tMaXN0Ij4KKyAgICAgICAgPGg0PmluZGV4T2Y8L2g0PgorPHByZT5wdWJsaWMmbmJzcDtpbnQmbmJzcDtpbmRleE9mKGludCZuYnNwO2NoLAorICAgICAgICAgIGludCZuYnNwO2Zyb21JbmRleCk8L3ByZT4KKyAgICAgICAgPGRpdiBjbGFzcz0iYmxvY2siPlJldHVybnMgdGhlIGluZGV4IHdpdGhpbiB0aGlzIHN0cmluZyBvZiB0aGUgZmlyc3Qgb2NjdXJyZW5jZSBvZiB0aGUKKyAgICAgICAgICAgIHNwZWNpZmllZCBjaGFyYWN0ZXIsIHN0YXJ0aW5nIHRoZSBzZWFyY2ggYXQgdGhlIHNwZWNpZmllZCBpbmRleC4KKyAgICAgICAgICAgIDxwPgorICAgICAgICAgICAgICAgIElmIGEgY2hhcmFjdGVyIHdpdGggdmFsdWUgPGNvZGU+Y2g8L2NvZGU+IG9jY3VycyBpbiB0aGUKKyAgICAgICAgICAgICAgICBjaGFyYWN0ZXIgc2VxdWVuY2UgcmVwcmVzZW50ZWQgYnkgdGhpcyA8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICAgICAgICAgICAgb2JqZWN0IGF0IGFuIGluZGV4IG5vIHNtYWxsZXIgdGhhbiA8Y29kZT5mcm9tSW5kZXg8L2NvZGU+LCB0aGVuCisgICAgICAgICAgICAgICAgdGhlIGluZGV4IG9mIHRoZSBmaXJzdCBzdWNoIG9jY3VycmVuY2UgaXMgcmV0dXJuZWQuIEZvciB2YWx1ZXMKKyAgICAgICAgICAgICAgICBvZiA8Y29kZT5jaDwvY29kZT4gaW4gdGhlIHJhbmdlIGZyb20gMCB0byAweEZGRkYgKGluY2x1c2l2ZSksCisgICAgICAgICAgICAgICAgdGhpcyBpcyB0aGUgc21hbGxlc3QgdmFsdWUgPGk+azwvaT4gc3VjaCB0aGF0OgorICAgICAgICAgICAgPGJsb2NrcXVvdGU+PHByZT4KKyAodGhpcy5jaGFyQXQoPGk+azwvaT4pID09IGNoKSAmJiAoPGk+azwvaT4gJmd0Oz0gZnJvbUluZGV4KQorIDwvcHJlPjwvYmxvY2txdW90ZT4KKyAgICAgICAgICAgIGlzIHRydWUuIEZvciBvdGhlciB2YWx1ZXMgb2YgPGNvZGU+Y2g8L2NvZGU+LCBpdCBpcyB0aGUKKyAgICAgICAgICAgIHNtYWxsZXN0IHZhbHVlIDxpPms8L2k+IHN1Y2ggdGhhdDoKKyAgICAgICAgICAgIDxibG9ja3F1b3RlPjxwcmU+CisgKHRoaXMuY29kZVBvaW50QXQoPGk+azwvaT4pID09IGNoKSAmJiAoPGk+azwvaT4gJmd0Oz0gZnJvbUluZGV4KQorIDwvcHJlPjwvYmxvY2txdW90ZT4KKyAgICAgICAgICAgIGlzIHRydWUuIEluIGVpdGhlciBjYXNlLCBpZiBubyBzdWNoIGNoYXJhY3RlciBvY2N1cnMgaW4gdGhpcworICAgICAgICAgICAgc3RyaW5nIGF0IG9yIGFmdGVyIHBvc2l0aW9uIDxjb2RlPmZyb21JbmRleDwvY29kZT4sIHRoZW4KKyAgICAgICAgICAgIDxjb2RlPi0xPC9jb2RlPiBpcyByZXR1cm5lZC4KKworICAgICAgICAgICAgPHA+CisgICAgICAgICAgICAgICAgVGhlcmUgaXMgbm8gcmVzdHJpY3Rpb24gb24gdGhlIHZhbHVlIG9mIDxjb2RlPmZyb21JbmRleDwvY29kZT4uIElmIGl0CisgICAgICAgICAgICAgICAgaXMgbmVnYXRpdmUsIGl0IGhhcyB0aGUgc2FtZSBlZmZlY3QgYXMgaWYgaXQgd2VyZSB6ZXJvOiB0aGlzIGVudGlyZQorICAgICAgICAgICAgICAgIHN0cmluZyBtYXkgYmUgc2VhcmNoZWQuIElmIGl0IGlzIGdyZWF0ZXIgdGhhbiB0aGUgbGVuZ3RoIG9mIHRoaXMKKyAgICAgICAgICAgICAgICBzdHJpbmcsIGl0IGhhcyB0aGUgc2FtZSBlZmZlY3QgYXMgaWYgaXQgd2VyZSBlcXVhbCB0byB0aGUgbGVuZ3RoIG9mCisgICAgICAgICAgICAgICAgdGhpcyBzdHJpbmc6IDxjb2RlPi0xPC9jb2RlPiBpcyByZXR1cm5lZC4KKworICAgICAgICAgICAgPHA+QWxsIGluZGljZXMgYXJlIHNwZWNpZmllZCBpbiA8Y29kZT5jaGFyPC9jb2RlPiB2YWx1ZXMKKyAgICAgICAgICAgICAgICAoVW5pY29kZSBjb2RlIHVuaXRzKS48L2Rpdj4KKyAgICAgICAgPGRsPjxkdD48c3BhbiBjbGFzcz0ic3Ryb25nIj5QYXJhbWV0ZXJzOjwvc3Bhbj48L2R0PjxkZD48Y29kZT5jaDwvY29kZT4gLSBhIGNoYXJhY3RlciAoVW5pY29kZSBjb2RlIHBvaW50KS48L2RkPjxkZD48Y29kZT5mcm9tSW5kZXg8L2NvZGU+IC0gdGhlIGluZGV4IHRvIHN0YXJ0IHRoZSBzZWFyY2ggZnJvbS48L2RkPgorICAgICAgICAgICAgPGR0PjxzcGFuIGNsYXNzPSJzdHJvbmciPlJldHVybnM6PC9zcGFuPjwvZHQ+PGRkPnRoZSBpbmRleCBvZiB0aGUgZmlyc3Qgb2NjdXJyZW5jZSBvZiB0aGUgY2hhcmFjdGVyIGluIHRoZQorICAgICAgICAgICAgICAgIGNoYXJhY3RlciBzZXF1ZW5jZSByZXByZXNlbnRlZCBieSB0aGlzIG9iamVjdCB0aGF0IGlzIGdyZWF0ZXIKKyAgICAgICAgICAgICAgICB0aGFuIG9yIGVxdWFsIHRvIDxjb2RlPmZyb21JbmRleDwvY29kZT4sIG9yIDxjb2RlPi0xPC9jb2RlPgorICAgICAgICAgICAgICAgIGlmIHRoZSBjaGFyYWN0ZXIgZG9lcyBub3Qgb2NjdXIuPC9kZD48L2RsPgorICAgIDwvbGk+Cis8L3VsPgorPGEgbmFtZT0ibGFzdEluZGV4T2YoaW50KSI+CisgICAgPCEtLSAgIC0tPgorPC9hPgorPHVsIGNsYXNzPSJibG9ja0xpc3QiPgorICAgIDxsaSBjbGFzcz0iYmxvY2tMaXN0Ij4KKyAgICAgICAgPGg0Pmxhc3RJbmRleE9mPC9oND4KKyAgICAgICAgPHByZT5wdWJsaWMmbmJzcDtpbnQmbmJzcDtsYXN0SW5kZXhPZihpbnQmbmJzcDtjaCk8L3ByZT4KKyAgICAgICAgPGRpdiBjbGFzcz0iYmxvY2siPlJldHVybnMgdGhlIGluZGV4IHdpdGhpbiB0aGlzIHN0cmluZyBvZiB0aGUgbGFzdCBvY2N1cnJlbmNlIG9mCisgICAgICAgICAgICB0aGUgc3BlY2lmaWVkIGNoYXJhY3Rlci4gRm9yIHZhbHVlcyBvZiA8Y29kZT5jaDwvY29kZT4gaW4gdGhlCisgICAgICAgICAgICByYW5nZSBmcm9tIDAgdG8gMHhGRkZGIChpbmNsdXNpdmUpLCB0aGUgaW5kZXggKGluIFVuaWNvZGUgY29kZQorICAgICAgICAgICAgdW5pdHMpIHJldHVybmVkIGlzIHRoZSBsYXJnZXN0IHZhbHVlIDxpPms8L2k+IHN1Y2ggdGhhdDoKKyAgICAgICAgICAgIDxibG9ja3F1b3RlPjxwcmU+CisgdGhpcy5jaGFyQXQoPGk+azwvaT4pID09IGNoCisgPC9wcmU+PC9ibG9ja3F1b3RlPgorICAgICAgICAgICAgaXMgdHJ1ZS4gRm9yIG90aGVyIHZhbHVlcyBvZiA8Y29kZT5jaDwvY29kZT4sIGl0IGlzIHRoZQorICAgICAgICAgICAgbGFyZ2VzdCB2YWx1ZSA8aT5rPC9pPiBzdWNoIHRoYXQ6CisgICAgICAgICAgICA8YmxvY2txdW90ZT48cHJlPgorIHRoaXMuY29kZVBvaW50QXQoPGk+azwvaT4pID09IGNoCisgPC9wcmU+PC9ibG9ja3F1b3RlPgorICAgICAgICAgICAgaXMgdHJ1ZS4gIEluIGVpdGhlciBjYXNlLCBpZiBubyBzdWNoIGNoYXJhY3RlciBvY2N1cnMgaW4gdGhpcworICAgICAgICAgICAgc3RyaW5nLCB0aGVuIDxjb2RlPi0xPC9jb2RlPiBpcyByZXR1cm5lZC4gIFRoZQorICAgICAgICAgICAgPGNvZGU+U3RyaW5nPC9jb2RlPiBpcyBzZWFyY2hlZCBiYWNrd2FyZHMgc3RhcnRpbmcgYXQgdGhlIGxhc3QKKyAgICAgICAgICAgIGNoYXJhY3Rlci48L2Rpdj4KKyAgICAgICAgPGRsPjxkdD48c3BhbiBjbGFzcz0ic3Ryb25nIj5QYXJhbWV0ZXJzOjwvc3Bhbj48L2R0PjxkZD48Y29kZT5jaDwvY29kZT4gLSBhIGNoYXJhY3RlciAoVW5pY29kZSBjb2RlIHBvaW50KS48L2RkPgorICAgICAgICAgICAgPGR0PjxzcGFuIGNsYXNzPSJzdHJvbmciPlJldHVybnM6PC9zcGFuPjwvZHQ+PGRkPnRoZSBpbmRleCBvZiB0aGUgbGFzdCBvY2N1cnJlbmNlIG9mIHRoZSBjaGFyYWN0ZXIgaW4gdGhlCisgICAgICAgICAgICAgICAgY2hhcmFjdGVyIHNlcXVlbmNlIHJlcHJlc2VudGVkIGJ5IHRoaXMgb2JqZWN0LCBvcgorICAgICAgICAgICAgICAgIDxjb2RlPi0xPC9jb2RlPiBpZiB0aGUgY2hhcmFjdGVyIGRvZXMgbm90IG9jY3VyLjwvZGQ+PC9kbD4KKyAgICA8L2xpPgorPC91bD4KKzxhIG5hbWU9Imxhc3RJbmRleE9mKGludCwgaW50KSI+CisgICAgPCEtLSAgIC0tPgorPC9hPgorPHVsIGNsYXNzPSJibG9ja0xpc3QiPgorICAgIDxsaSBjbGFzcz0iYmxvY2tMaXN0Ij4KKyAgICAgICAgPGg0Pmxhc3RJbmRleE9mPC9oND4KKzxwcmU+cHVibGljJm5ic3A7aW50Jm5ic3A7bGFzdEluZGV4T2YoaW50Jm5ic3A7Y2gsCisgICAgICAgICAgICAgIGludCZuYnNwO2Zyb21JbmRleCk8L3ByZT4KKyAgICAgICAgPGRpdiBjbGFzcz0iYmxvY2siPlJldHVybnMgdGhlIGluZGV4IHdpdGhpbiB0aGlzIHN0cmluZyBvZiB0aGUgbGFzdCBvY2N1cnJlbmNlIG9mCisgICAgICAgICAgICB0aGUgc3BlY2lmaWVkIGNoYXJhY3Rlciwgc2VhcmNoaW5nIGJhY2t3YXJkIHN0YXJ0aW5nIGF0IHRoZQorICAgICAgICAgICAgc3BlY2lmaWVkIGluZGV4LiBGb3IgdmFsdWVzIG9mIDxjb2RlPmNoPC9jb2RlPiBpbiB0aGUgcmFuZ2UKKyAgICAgICAgICAgIGZyb20gMCB0byAweEZGRkYgKGluY2x1c2l2ZSksIHRoZSBpbmRleCByZXR1cm5lZCBpcyB0aGUgbGFyZ2VzdAorICAgICAgICAgICAgdmFsdWUgPGk+azwvaT4gc3VjaCB0aGF0OgorICAgICAgICAgICAgPGJsb2NrcXVvdGU+PHByZT4KKyAodGhpcy5jaGFyQXQoPGk+azwvaT4pID09IGNoKSAmJiAoPGk+azwvaT4gJmx0Oz0gZnJvbUluZGV4KQorIDwvcHJlPjwvYmxvY2txdW90ZT4KKyAgICAgICAgICAgIGlzIHRydWUuIEZvciBvdGhlciB2YWx1ZXMgb2YgPGNvZGU+Y2g8L2NvZGU+LCBpdCBpcyB0aGUKKyAgICAgICAgICAgIGxhcmdlc3QgdmFsdWUgPGk+azwvaT4gc3VjaCB0aGF0OgorICAgICAgICAgICAgPGJsb2NrcXVvdGU+PHByZT4KKyAodGhpcy5jb2RlUG9pbnRBdCg8aT5rPC9pPikgPT0gY2gpICYmICg8aT5rPC9pPiAmbHQ7PSBmcm9tSW5kZXgpCisgPC9wcmU+PC9ibG9ja3F1b3RlPgorICAgICAgICAgICAgaXMgdHJ1ZS4gSW4gZWl0aGVyIGNhc2UsIGlmIG5vIHN1Y2ggY2hhcmFjdGVyIG9jY3VycyBpbiB0aGlzCisgICAgICAgICAgICBzdHJpbmcgYXQgb3IgYmVmb3JlIHBvc2l0aW9uIDxjb2RlPmZyb21JbmRleDwvY29kZT4sIHRoZW4KKyAgICAgICAgICAgIDxjb2RlPi0xPC9jb2RlPiBpcyByZXR1cm5lZC4KKworICAgICAgICAgICAgPHA+QWxsIGluZGljZXMgYXJlIHNwZWNpZmllZCBpbiA8Y29kZT5jaGFyPC9jb2RlPiB2YWx1ZXMKKyAgICAgICAgICAgICAgICAoVW5pY29kZSBjb2RlIHVuaXRzKS48L2Rpdj4KKyAgICAgICAgPGRsPjxkdD48c3BhbiBjbGFzcz0ic3Ryb25nIj5QYXJhbWV0ZXJzOjwvc3Bhbj48L2R0PjxkZD48Y29kZT5jaDwvY29kZT4gLSBhIGNoYXJhY3RlciAoVW5pY29kZSBjb2RlIHBvaW50KS48L2RkPjxkZD48Y29kZT5mcm9tSW5kZXg8L2NvZGU+IC0gdGhlIGluZGV4IHRvIHN0YXJ0IHRoZSBzZWFyY2ggZnJvbS4gVGhlcmUgaXMgbm8KKyAgICAgICAgICAgIHJlc3RyaWN0aW9uIG9uIHRoZSB2YWx1ZSBvZiA8Y29kZT5mcm9tSW5kZXg8L2NvZGU+LiBJZiBpdCBpcworICAgICAgICAgICAgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIHRoZSBsZW5ndGggb2YgdGhpcyBzdHJpbmcsIGl0IGhhcworICAgICAgICAgICAgdGhlIHNhbWUgZWZmZWN0IGFzIGlmIGl0IHdlcmUgZXF1YWwgdG8gb25lIGxlc3MgdGhhbiB0aGUKKyAgICAgICAgICAgIGxlbmd0aCBvZiB0aGlzIHN0cmluZzogdGhpcyBlbnRpcmUgc3RyaW5nIG1heSBiZSBzZWFyY2hlZC4KKyAgICAgICAgICAgIElmIGl0IGlzIG5lZ2F0aXZlLCBpdCBoYXMgdGhlIHNhbWUgZWZmZWN0IGFzIGlmIGl0IHdlcmUgLTE6CisgICAgICAgICAgICAtMSBpcyByZXR1cm5lZC48L2RkPgorICAgICAgICAgICAgPGR0PjxzcGFuIGNsYXNzPSJzdHJvbmciPlJldHVybnM6PC9zcGFuPjwvZHQ+PGRkPnRoZSBpbmRleCBvZiB0aGUgbGFzdCBvY2N1cnJlbmNlIG9mIHRoZSBjaGFyYWN0ZXIgaW4gdGhlCisgICAgICAgICAgICAgICAgY2hhcmFjdGVyIHNlcXVlbmNlIHJlcHJlc2VudGVkIGJ5IHRoaXMgb2JqZWN0IHRoYXQgaXMgbGVzcworICAgICAgICAgICAgICAgIHRoYW4gb3IgZXF1YWwgdG8gPGNvZGU+ZnJvbUluZGV4PC9jb2RlPiwgb3IgPGNvZGU+LTE8L2NvZGU+CisgICAgICAgICAgICAgICAgaWYgdGhlIGNoYXJhY3RlciBkb2VzIG5vdCBvY2N1ciBiZWZvcmUgdGhhdCBwb2ludC48L2RkPjwvZGw+CisgICAgPC9saT4KKzwvdWw+Cis8YSBuYW1lPSJpbmRleE9mKGphdmEubGFuZy5TdHJpbmcpIj4KKyAgICA8IS0tICAgLS0+Cis8L2E+Cis8dWwgY2xhc3M9ImJsb2NrTGlzdCI+CisgICAgPGxpIGNsYXNzPSJibG9ja0xpc3QiPgorICAgICAgICA8aDQ+aW5kZXhPZjwvaDQ+CisgICAgICAgIDxwcmU+cHVibGljJm5ic3A7aW50Jm5ic3A7aW5kZXhPZig8YSBocmVmPSIuLi8uLi9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBqYXZhLmxhbmciPlN0cmluZzwvYT4mbmJzcDtzdHIpPC9wcmU+CisgICAgICAgIDxkaXYgY2xhc3M9ImJsb2NrIj5SZXR1cm5zIHRoZSBpbmRleCB3aXRoaW4gdGhpcyBzdHJpbmcgb2YgdGhlIGZpcnN0IG9jY3VycmVuY2Ugb2YgdGhlCisgICAgICAgICAgICBzcGVjaWZpZWQgc3Vic3RyaW5nLgorCisgICAgICAgICAgICA8cD5UaGUgcmV0dXJuZWQgaW5kZXggaXMgdGhlIHNtYWxsZXN0IHZhbHVlIDxpPms8L2k+IGZvciB3aGljaDoKKyAgICAgICAgICAgIDxibG9ja3F1b3RlPjxwcmU+CisgdGhpcy5zdGFydHNXaXRoKHN0ciwgPGk+azwvaT4pCisgPC9wcmU+PC9ibG9ja3F1b3RlPgorICAgICAgICAgICAgSWYgbm8gc3VjaCB2YWx1ZSBvZiA8aT5rPC9pPiBleGlzdHMsIHRoZW4gPGNvZGU+LTE8L2NvZGU+IGlzIHJldHVybmVkLjwvZGl2PgorICAgICAgICA8ZGw+PGR0PjxzcGFuIGNsYXNzPSJzdHJvbmciPlBhcmFtZXRlcnM6PC9zcGFuPjwvZHQ+PGRkPjxjb2RlPnN0cjwvY29kZT4gLSB0aGUgc3Vic3RyaW5nIHRvIHNlYXJjaCBmb3IuPC9kZD4KKyAgICAgICAgICAgIDxkdD48c3BhbiBjbGFzcz0ic3Ryb25nIj5SZXR1cm5zOjwvc3Bhbj48L2R0PjxkZD50aGUgaW5kZXggb2YgdGhlIGZpcnN0IG9jY3VycmVuY2Ugb2YgdGhlIHNwZWNpZmllZCBzdWJzdHJpbmcsCisgICAgICAgICAgICAgICAgb3IgPGNvZGU+LTE8L2NvZGU+IGlmIHRoZXJlIGlzIG5vIHN1Y2ggb2NjdXJyZW5jZS48L2RkPjwvZGw+CisgICAgPC9saT4KKzwvdWw+Cis8YSBuYW1lPSJpbmRleE9mKGphdmEubGFuZy5TdHJpbmcsIGludCkiPgorICAgIDwhLS0gICAtLT4KKzwvYT4KKzx1bCBjbGFzcz0iYmxvY2tMaXN0Ij4KKyAgICA8bGkgY2xhc3M9ImJsb2NrTGlzdCI+CisgICAgICAgIDxoND5pbmRleE9mPC9oND4KKzxwcmU+cHVibGljJm5ic3A7aW50Jm5ic3A7aW5kZXhPZig8YSBocmVmPSIuLi8uLi9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBqYXZhLmxhbmciPlN0cmluZzwvYT4mbmJzcDtzdHIsCisgICAgICAgICAgaW50Jm5ic3A7ZnJvbUluZGV4KTwvcHJlPgorICAgICAgICA8ZGl2IGNsYXNzPSJibG9jayI+UmV0dXJucyB0aGUgaW5kZXggd2l0aGluIHRoaXMgc3RyaW5nIG9mIHRoZSBmaXJzdCBvY2N1cnJlbmNlIG9mIHRoZQorICAgICAgICAgICAgc3BlY2lmaWVkIHN1YnN0cmluZywgc3RhcnRpbmcgYXQgdGhlIHNwZWNpZmllZCBpbmRleC4KKworICAgICAgICAgICAgPHA+VGhlIHJldHVybmVkIGluZGV4IGlzIHRoZSBzbWFsbGVzdCB2YWx1ZSA8aT5rPC9pPiBmb3Igd2hpY2g6CisgICAgICAgICAgICA8YmxvY2txdW90ZT48cHJlPgorIDxpPms8L2k+ICZndDs9IGZyb21JbmRleCAmJiB0aGlzLnN0YXJ0c1dpdGgoc3RyLCA8aT5rPC9pPikKKyA8L3ByZT48L2Jsb2NrcXVvdGU+CisgICAgICAgICAgICBJZiBubyBzdWNoIHZhbHVlIG9mIDxpPms8L2k+IGV4aXN0cywgdGhlbiA8Y29kZT4tMTwvY29kZT4gaXMgcmV0dXJuZWQuPC9kaXY+CisgICAgICAgIDxkbD48ZHQ+PHNwYW4gY2xhc3M9InN0cm9uZyI+UGFyYW1ldGVyczo8L3NwYW4+PC9kdD48ZGQ+PGNvZGU+c3RyPC9jb2RlPiAtIHRoZSBzdWJzdHJpbmcgdG8gc2VhcmNoIGZvci48L2RkPjxkZD48Y29kZT5mcm9tSW5kZXg8L2NvZGU+IC0gdGhlIGluZGV4IGZyb20gd2hpY2ggdG8gc3RhcnQgdGhlIHNlYXJjaC48L2RkPgorICAgICAgICAgICAgPGR0PjxzcGFuIGNsYXNzPSJzdHJvbmciPlJldHVybnM6PC9zcGFuPjwvZHQ+PGRkPnRoZSBpbmRleCBvZiB0aGUgZmlyc3Qgb2NjdXJyZW5jZSBvZiB0aGUgc3BlY2lmaWVkIHN1YnN0cmluZywKKyAgICAgICAgICAgICAgICBzdGFydGluZyBhdCB0aGUgc3BlY2lmaWVkIGluZGV4LAorICAgICAgICAgICAgICAgIG9yIDxjb2RlPi0xPC9jb2RlPiBpZiB0aGVyZSBpcyBubyBzdWNoIG9jY3VycmVuY2UuPC9kZD48L2RsPgorICAgIDwvbGk+Cis8L3VsPgorPGEgbmFtZT0ibGFzdEluZGV4T2YoamF2YS5sYW5nLlN0cmluZykiPgorICAgIDwhLS0gICAtLT4KKzwvYT4KKzx1bCBjbGFzcz0iYmxvY2tMaXN0Ij4KKyAgICA8bGkgY2xhc3M9ImJsb2NrTGlzdCI+CisgICAgICAgIDxoND5sYXN0SW5kZXhPZjwvaDQ+CisgICAgICAgIDxwcmU+cHVibGljJm5ic3A7aW50Jm5ic3A7bGFzdEluZGV4T2YoPGEgaHJlZj0iLi4vLi4vamF2YS9sYW5nL1N0cmluZy5odG1sIiB0aXRsZT0iY2xhc3MgaW4gamF2YS5sYW5nIj5TdHJpbmc8L2E+Jm5ic3A7c3RyKTwvcHJlPgorICAgICAgICA8ZGl2IGNsYXNzPSJibG9jayI+UmV0dXJucyB0aGUgaW5kZXggd2l0aGluIHRoaXMgc3RyaW5nIG9mIHRoZSBsYXN0IG9jY3VycmVuY2Ugb2YgdGhlCisgICAgICAgICAgICBzcGVjaWZpZWQgc3Vic3RyaW5nLiAgVGhlIGxhc3Qgb2NjdXJyZW5jZSBvZiB0aGUgZW1wdHkgc3RyaW5nICIiCisgICAgICAgICAgICBpcyBjb25zaWRlcmVkIHRvIG9jY3VyIGF0IHRoZSBpbmRleCB2YWx1ZSA8Y29kZT50aGlzLmxlbmd0aCgpPC9jb2RlPi4KKworICAgICAgICAgICAgPHA+VGhlIHJldHVybmVkIGluZGV4IGlzIHRoZSBsYXJnZXN0IHZhbHVlIDxpPms8L2k+IGZvciB3aGljaDoKKyAgICAgICAgICAgIDxibG9ja3F1b3RlPjxwcmU+CisgdGhpcy5zdGFydHNXaXRoKHN0ciwgPGk+azwvaT4pCisgPC9wcmU+PC9ibG9ja3F1b3RlPgorICAgICAgICAgICAgSWYgbm8gc3VjaCB2YWx1ZSBvZiA8aT5rPC9pPiBleGlzdHMsIHRoZW4gPGNvZGU+LTE8L2NvZGU+IGlzIHJldHVybmVkLjwvZGl2PgorICAgICAgICA8ZGw+PGR0PjxzcGFuIGNsYXNzPSJzdHJvbmciPlBhcmFtZXRlcnM6PC9zcGFuPjwvZHQ+PGRkPjxjb2RlPnN0cjwvY29kZT4gLSB0aGUgc3Vic3RyaW5nIHRvIHNlYXJjaCBmb3IuPC9kZD4KKyAgICAgICAgICAgIDxkdD48c3BhbiBjbGFzcz0ic3Ryb25nIj5SZXR1cm5zOjwvc3Bhbj48L2R0PjxkZD50aGUgaW5kZXggb2YgdGhlIGxhc3Qgb2NjdXJyZW5jZSBvZiB0aGUgc3BlY2lmaWVkIHN1YnN0cmluZywKKyAgICAgICAgICAgICAgICBvciA8Y29kZT4tMTwvY29kZT4gaWYgdGhlcmUgaXMgbm8gc3VjaCBvY2N1cnJlbmNlLjwvZGQ+PC9kbD4KKyAgICA8L2xpPgorPC91bD4KKzxhIG5hbWU9Imxhc3RJbmRleE9mKGphdmEubGFuZy5TdHJpbmcsIGludCkiPgorICAgIDwhLS0gICAtLT4KKzwvYT4KKzx1bCBjbGFzcz0iYmxvY2tMaXN0Ij4KKyAgICA8bGkgY2xhc3M9ImJsb2NrTGlzdCI+CisgICAgICAgIDxoND5sYXN0SW5kZXhPZjwvaDQ+Cis8cHJlPnB1YmxpYyZuYnNwO2ludCZuYnNwO2xhc3RJbmRleE9mKDxhIGhyZWY9Ii4uLy4uL2phdmEvbGFuZy9TdHJpbmcuaHRtbCIgdGl0bGU9ImNsYXNzIGluIGphdmEubGFuZyI+U3RyaW5nPC9hPiZuYnNwO3N0ciwKKyAgICAgICAgICAgICAgaW50Jm5ic3A7ZnJvbUluZGV4KTwvcHJlPgorICAgICAgICA8ZGl2IGNsYXNzPSJibG9jayI+UmV0dXJucyB0aGUgaW5kZXggd2l0aGluIHRoaXMgc3RyaW5nIG9mIHRoZSBsYXN0IG9jY3VycmVuY2Ugb2YgdGhlCisgICAgICAgICAgICBzcGVjaWZpZWQgc3Vic3RyaW5nLCBzZWFyY2hpbmcgYmFja3dhcmQgc3RhcnRpbmcgYXQgdGhlIHNwZWNpZmllZCBpbmRleC4KKworICAgICAgICAgICAgPHA+VGhlIHJldHVybmVkIGluZGV4IGlzIHRoZSBsYXJnZXN0IHZhbHVlIDxpPms8L2k+IGZvciB3aGljaDoKKyAgICAgICAgICAgIDxibG9ja3F1b3RlPjxwcmU+CisgPGk+azwvaT4gJmx0Oz0gZnJvbUluZGV4ICYmIHRoaXMuc3RhcnRzV2l0aChzdHIsIDxpPms8L2k+KQorIDwvcHJlPjwvYmxvY2txdW90ZT4KKyAgICAgICAgICAgIElmIG5vIHN1Y2ggdmFsdWUgb2YgPGk+azwvaT4gZXhpc3RzLCB0aGVuIDxjb2RlPi0xPC9jb2RlPiBpcyByZXR1cm5lZC48L2Rpdj4KKyAgICAgICAgPGRsPjxkdD48c3BhbiBjbGFzcz0ic3Ryb25nIj5QYXJhbWV0ZXJzOjwvc3Bhbj48L2R0PjxkZD48Y29kZT5zdHI8L2NvZGU+IC0gdGhlIHN1YnN0cmluZyB0byBzZWFyY2ggZm9yLjwvZGQ+PGRkPjxjb2RlPmZyb21JbmRleDwvY29kZT4gLSB0aGUgaW5kZXggdG8gc3RhcnQgdGhlIHNlYXJjaCBmcm9tLjwvZGQ+CisgICAgICAgICAgICA8ZHQ+PHNwYW4gY2xhc3M9InN0cm9uZyI+UmV0dXJuczo8L3NwYW4+PC9kdD48ZGQ+dGhlIGluZGV4IG9mIHRoZSBsYXN0IG9jY3VycmVuY2Ugb2YgdGhlIHNwZWNpZmllZCBzdWJzdHJpbmcsCisgICAgICAgICAgICAgICAgc2VhcmNoaW5nIGJhY2t3YXJkIGZyb20gdGhlIHNwZWNpZmllZCBpbmRleCwKKyAgICAgICAgICAgICAgICBvciA8Y29kZT4tMTwvY29kZT4gaWYgdGhlcmUgaXMgbm8gc3VjaCBvY2N1cnJlbmNlLjwvZGQ+PC9kbD4KKyAgICA8L2xpPgorPC91bD4KKzxhIG5hbWU9InN1YnN0cmluZyhpbnQpIj4KKyAgICA8IS0tICAgLS0+Cis8L2E+Cis8dWwgY2xhc3M9ImJsb2NrTGlzdCI+CisgICAgPGxpIGNsYXNzPSJibG9ja0xpc3QiPgorICAgICAgICA8aDQ+c3Vic3RyaW5nPC9oND4KKyAgICAgICAgPHByZT5wdWJsaWMmbmJzcDs8YSBocmVmPSIuLi8uLi9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBqYXZhLmxhbmciPlN0cmluZzwvYT4mbmJzcDtzdWJzdHJpbmcoaW50Jm5ic3A7YmVnaW5JbmRleCk8L3ByZT4KKyAgICAgICAgPGRpdiBjbGFzcz0iYmxvY2siPlJldHVybnMgYSBuZXcgc3RyaW5nIHRoYXQgaXMgYSBzdWJzdHJpbmcgb2YgdGhpcyBzdHJpbmcuIFRoZQorICAgICAgICAgICAgc3Vic3RyaW5nIGJlZ2lucyB3aXRoIHRoZSBjaGFyYWN0ZXIgYXQgdGhlIHNwZWNpZmllZCBpbmRleCBhbmQKKyAgICAgICAgICAgIGV4dGVuZHMgdG8gdGhlIGVuZCBvZiB0aGlzIHN0cmluZy4gPHA+CisgICAgICAgICAgICAgICAgRXhhbXBsZXM6CisgICAgICAgICAgICA8YmxvY2txdW90ZT48cHJlPgorICJ1bmhhcHB5Ii5zdWJzdHJpbmcoMikgcmV0dXJucyAiaGFwcHkiCisgIkhhcmJpc29uIi5zdWJzdHJpbmcoMykgcmV0dXJucyAiYmlzb24iCisgImVtcHRpbmVzcyIuc3Vic3RyaW5nKDkpIHJldHVybnMgIiIgKGFuIGVtcHR5IHN0cmluZykKKyA8L3ByZT48L2Jsb2NrcXVvdGU+PC9kaXY+CisgICAgICAgIDxkbD48ZHQ+PHNwYW4gY2xhc3M9InN0cm9uZyI+UGFyYW1ldGVyczo8L3NwYW4+PC9kdD48ZGQ+PGNvZGU+YmVnaW5JbmRleDwvY29kZT4gLSB0aGUgYmVnaW5uaW5nIGluZGV4LCBpbmNsdXNpdmUuPC9kZD4KKyAgICAgICAgICAgIDxkdD48c3BhbiBjbGFzcz0ic3Ryb25nIj5SZXR1cm5zOjwvc3Bhbj48L2R0PjxkZD50aGUgc3BlY2lmaWVkIHN1YnN0cmluZy48L2RkPgorICAgICAgICAgICAgPGR0PjxzcGFuIGNsYXNzPSJzdHJvbmciPlRocm93czo8L3NwYW4+PC9kdD4KKyAgICAgICAgICAgIDxkZD48Y29kZT48YSBocmVmPSIuLi8uLi9qYXZhL2xhbmcvSW5kZXhPdXRPZkJvdW5kc0V4Y2VwdGlvbi5odG1sIiB0aXRsZT0iY2xhc3MgaW4gamF2YS5sYW5nIj5JbmRleE91dE9mQm91bmRzRXhjZXB0aW9uPC9hPjwvY29kZT4gLSBpZgorICAgICAgICAgICAgICAgIDxjb2RlPmJlZ2luSW5kZXg8L2NvZGU+IGlzIG5lZ2F0aXZlIG9yIGxhcmdlciB0aGFuIHRoZQorICAgICAgICAgICAgICAgIGxlbmd0aCBvZiB0aGlzIDxjb2RlPlN0cmluZzwvY29kZT4gb2JqZWN0LjwvZGQ+PC9kbD4KKyAgICA8L2xpPgorPC91bD4KKzxhIG5hbWU9InN1YnN0cmluZyhpbnQsIGludCkiPgorICAgIDwhLS0gICAtLT4KKzwvYT4KKzx1bCBjbGFzcz0iYmxvY2tMaXN0Ij4KKyAgICA8bGkgY2xhc3M9ImJsb2NrTGlzdCI+CisgICAgICAgIDxoND5zdWJzdHJpbmc8L2g0PgorPHByZT5wdWJsaWMmbmJzcDs8YSBocmVmPSIuLi8uLi9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBqYXZhLmxhbmciPlN0cmluZzwvYT4mbmJzcDtzdWJzdHJpbmcoaW50Jm5ic3A7YmVnaW5JbmRleCwKKyAgICAgICAgICAgICAgIGludCZuYnNwO2VuZEluZGV4KTwvcHJlPgorICAgICAgICA8ZGl2IGNsYXNzPSJibG9jayI+UmV0dXJucyBhIG5ldyBzdHJpbmcgdGhhdCBpcyBhIHN1YnN0cmluZyBvZiB0aGlzIHN0cmluZy4gVGhlCisgICAgICAgICAgICBzdWJzdHJpbmcgYmVnaW5zIGF0IHRoZSBzcGVjaWZpZWQgPGNvZGU+YmVnaW5JbmRleDwvY29kZT4gYW5kCisgICAgICAgICAgICBleHRlbmRzIHRvIHRoZSBjaGFyYWN0ZXIgYXQgaW5kZXggPGNvZGU+ZW5kSW5kZXggLSAxPC9jb2RlPi4KKyAgICAgICAgICAgIFRodXMgdGhlIGxlbmd0aCBvZiB0aGUgc3Vic3RyaW5nIGlzIDxjb2RlPmVuZEluZGV4LWJlZ2luSW5kZXg8L2NvZGU+LgorICAgICAgICAgICAgPHA+CisgICAgICAgICAgICAgICAgRXhhbXBsZXM6CisgICAgICAgICAgICA8YmxvY2txdW90ZT48cHJlPgorICJoYW1idXJnZXIiLnN1YnN0cmluZyg0LCA4KSByZXR1cm5zICJ1cmdlIgorICJzbWlsZXMiLnN1YnN0cmluZygxLCA1KSByZXR1cm5zICJtaWxlIgorIDwvcHJlPjwvYmxvY2txdW90ZT48L2Rpdj4KKyAgICAgICAgPGRsPjxkdD48c3BhbiBjbGFzcz0ic3Ryb25nIj5QYXJhbWV0ZXJzOjwvc3Bhbj48L2R0PjxkZD48Y29kZT5iZWdpbkluZGV4PC9jb2RlPiAtIHRoZSBiZWdpbm5pbmcgaW5kZXgsIGluY2x1c2l2ZS48L2RkPjxkZD48Y29kZT5lbmRJbmRleDwvY29kZT4gLSB0aGUgZW5kaW5nIGluZGV4LCBleGNsdXNpdmUuPC9kZD4KKyAgICAgICAgICAgIDxkdD48c3BhbiBjbGFzcz0ic3Ryb25nIj5SZXR1cm5zOjwvc3Bhbj48L2R0PjxkZD50aGUgc3BlY2lmaWVkIHN1YnN0cmluZy48L2RkPgorICAgICAgICAgICAgPGR0PjxzcGFuIGNsYXNzPSJzdHJvbmciPlRocm93czo8L3NwYW4+PC9kdD4KKyAgICAgICAgICAgIDxkZD48Y29kZT48YSBocmVmPSIuLi8uLi9qYXZhL2xhbmcvSW5kZXhPdXRPZkJvdW5kc0V4Y2VwdGlvbi5odG1sIiB0aXRsZT0iY2xhc3MgaW4gamF2YS5sYW5nIj5JbmRleE91dE9mQm91bmRzRXhjZXB0aW9uPC9hPjwvY29kZT4gLSBpZiB0aGUKKyAgICAgICAgICAgICAgICA8Y29kZT5iZWdpbkluZGV4PC9jb2RlPiBpcyBuZWdhdGl2ZSwgb3IKKyAgICAgICAgICAgICAgICA8Y29kZT5lbmRJbmRleDwvY29kZT4gaXMgbGFyZ2VyIHRoYW4gdGhlIGxlbmd0aCBvZgorICAgICAgICAgICAgICAgIHRoaXMgPGNvZGU+U3RyaW5nPC9jb2RlPiBvYmplY3QsIG9yCisgICAgICAgICAgICAgICAgPGNvZGU+YmVnaW5JbmRleDwvY29kZT4gaXMgbGFyZ2VyIHRoYW4KKyAgICAgICAgICAgICAgICA8Y29kZT5lbmRJbmRleDwvY29kZT4uPC9kZD48L2RsPgorICAgIDwvbGk+Cis8L3VsPgorPGEgbmFtZT0ic3ViU2VxdWVuY2UoaW50LCBpbnQpIj4KKyAgICA8IS0tICAgLS0+Cis8L2E+Cis8dWwgY2xhc3M9ImJsb2NrTGlzdCI+CisgICAgPGxpIGNsYXNzPSJibG9ja0xpc3QiPgorICAgICAgICA8aDQ+c3ViU2VxdWVuY2U8L2g0PgorPHByZT5wdWJsaWMmbmJzcDs8YSBocmVmPSIuLi8uLi9qYXZhL2xhbmcvQ2hhclNlcXVlbmNlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gamF2YS5sYW5nIj5DaGFyU2VxdWVuY2U8L2E+Jm5ic3A7c3ViU2VxdWVuY2UoaW50Jm5ic3A7YmVnaW5JbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgaW50Jm5ic3A7ZW5kSW5kZXgpPC9wcmU+CisgICAgICAgIDxkaXYgY2xhc3M9ImJsb2NrIj5SZXR1cm5zIGEgbmV3IGNoYXJhY3RlciBzZXF1ZW5jZSB0aGF0IGlzIGEgc3Vic2VxdWVuY2Ugb2YgdGhpcyBzZXF1ZW5jZS4KKworICAgICAgICAgICAgPHA+IEFuIGludm9jYXRpb24gb2YgdGhpcyBtZXRob2Qgb2YgdGhlIGZvcm0KKworICAgICAgICAgICAgPGJsb2NrcXVvdGU+PHByZT4KKyBzdHIuc3ViU2VxdWVuY2UoYmVnaW4sJm5ic3A7ZW5kKTwvcHJlPjwvYmxvY2txdW90ZT4KKworICAgICAgICAgICAgYmVoYXZlcyBpbiBleGFjdGx5IHRoZSBzYW1lIHdheSBhcyB0aGUgaW52b2NhdGlvbgorCisgICAgICAgICAgICA8YmxvY2txdW90ZT48cHJlPgorIHN0ci5zdWJzdHJpbmcoYmVnaW4sJm5ic3A7ZW5kKTwvcHJlPjwvYmxvY2txdW90ZT4KKworICAgICAgICAgICAgVGhpcyBtZXRob2QgaXMgZGVmaW5lZCBzbyB0aGF0IHRoZSA8dHQ+U3RyaW5nPC90dD4gY2xhc3MgY2FuIGltcGxlbWVudAorICAgICAgICAgICAgdGhlIDxhIGhyZWY9Ii4uLy4uL2phdmEvbGFuZy9DaGFyU2VxdWVuY2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBqYXZhLmxhbmciPjxjb2RlPkNoYXJTZXF1ZW5jZTwvY29kZT48L2E+IGludGVyZmFjZS4gPC9wPjwvZGl2PgorICAgICAgICA8ZGw+CisgICAgICAgICAgICA8ZHQ+PHN0cm9uZz5TcGVjaWZpZWQgYnk6PC9zdHJvbmc+PC9kdD4KKyAgICAgICAgICAgIDxkZD48Y29kZT48YSBocmVmPSIuLi8uLi9qYXZhL2xhbmcvQ2hhclNlcXVlbmNlLmh0bWwjc3ViU2VxdWVuY2UoaW50LCBpbnQpIj5zdWJTZXF1ZW5jZTwvYT48L2NvZGU+Jm5ic3A7aW4gaW50ZXJmYWNlJm5ic3A7PGNvZGU+PGEgaHJlZj0iLi4vLi4vamF2YS9sYW5nL0NoYXJTZXF1ZW5jZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIGphdmEubGFuZyI+Q2hhclNlcXVlbmNlPC9hPjwvY29kZT48L2RkPgorICAgICAgICAgICAgPGR0PjxzcGFuIGNsYXNzPSJzdHJvbmciPlBhcmFtZXRlcnM6PC9zcGFuPjwvZHQ+PGRkPjxjb2RlPmJlZ2luSW5kZXg8L2NvZGU+IC0gdGhlIGJlZ2luIGluZGV4LCBpbmNsdXNpdmUuPC9kZD48ZGQ+PGNvZGU+ZW5kSW5kZXg8L2NvZGU+IC0gdGhlIGVuZCBpbmRleCwgZXhjbHVzaXZlLjwvZGQ+CisgICAgICAgICAgICA8ZHQ+PHNwYW4gY2xhc3M9InN0cm9uZyI+UmV0dXJuczo8L3NwYW4+PC9kdD48ZGQ+dGhlIHNwZWNpZmllZCBzdWJzZXF1ZW5jZS48L2RkPgorICAgICAgICAgICAgPGR0PjxzcGFuIGNsYXNzPSJzdHJvbmciPlRocm93czo8L3NwYW4+PC9kdD4KKyAgICAgICAgICAgIDxkZD48Y29kZT48YSBocmVmPSIuLi8uLi9qYXZhL2xhbmcvSW5kZXhPdXRPZkJvdW5kc0V4Y2VwdGlvbi5odG1sIiB0aXRsZT0iY2xhc3MgaW4gamF2YS5sYW5nIj5JbmRleE91dE9mQm91bmRzRXhjZXB0aW9uPC9hPjwvY29kZT4gLSBpZiA8dHQ+YmVnaW5JbmRleDwvdHQ+IG9yIDx0dD5lbmRJbmRleDwvdHQ+IGFyZSBuZWdhdGl2ZSwKKyAgICAgICAgICAgICAgICBpZiA8dHQ+ZW5kSW5kZXg8L3R0PiBpcyBncmVhdGVyIHRoYW4gPHR0Pmxlbmd0aCgpPC90dD4sCisgICAgICAgICAgICAgICAgb3IgaWYgPHR0PmJlZ2luSW5kZXg8L3R0PiBpcyBncmVhdGVyIHRoYW4gPHR0PnN0YXJ0SW5kZXg8L3R0PjwvZGQ+PGR0PjxzcGFuIGNsYXNzPSJzdHJvbmciPlNpbmNlOjwvc3Bhbj48L2R0PgorICAgICAgICAgICAgPGRkPjEuNDwvZGQ+PC9kbD4KKyAgICA8L2xpPgorPC91bD4KKzxhIG5hbWU9ImNvbmNhdChqYXZhLmxhbmcuU3RyaW5nKSI+CisgICAgPCEtLSAgIC0tPgorPC9hPgorPHVsIGNsYXNzPSJibG9ja0xpc3QiPgorICAgIDxsaSBjbGFzcz0iYmxvY2tMaXN0Ij4KKyAgICAgICAgPGg0PmNvbmNhdDwvaDQ+CisgICAgICAgIDxwcmU+cHVibGljJm5ic3A7PGEgaHJlZj0iLi4vLi4vamF2YS9sYW5nL1N0cmluZy5odG1sIiB0aXRsZT0iY2xhc3MgaW4gamF2YS5sYW5nIj5TdHJpbmc8L2E+Jm5ic3A7Y29uY2F0KDxhIGhyZWY9Ii4uLy4uL2phdmEvbGFuZy9TdHJpbmcuaHRtbCIgdGl0bGU9ImNsYXNzIGluIGphdmEubGFuZyI+U3RyaW5nPC9hPiZuYnNwO3N0cik8L3ByZT4KKyAgICAgICAgPGRpdiBjbGFzcz0iYmxvY2siPkNvbmNhdGVuYXRlcyB0aGUgc3BlY2lmaWVkIHN0cmluZyB0byB0aGUgZW5kIG9mIHRoaXMgc3RyaW5nLgorICAgICAgICAgICAgPHA+CisgICAgICAgICAgICAgICAgSWYgdGhlIGxlbmd0aCBvZiB0aGUgYXJndW1lbnQgc3RyaW5nIGlzIDxjb2RlPjA8L2NvZGU+LCB0aGVuIHRoaXMKKyAgICAgICAgICAgICAgICA8Y29kZT5TdHJpbmc8L2NvZGU+IG9iamVjdCBpcyByZXR1cm5lZC4gT3RoZXJ3aXNlLCBhIG5ldworICAgICAgICAgICAgICAgIDxjb2RlPlN0cmluZzwvY29kZT4gb2JqZWN0IGlzIGNyZWF0ZWQsIHJlcHJlc2VudGluZyBhIGNoYXJhY3RlcgorICAgICAgICAgICAgICAgIHNlcXVlbmNlIHRoYXQgaXMgdGhlIGNvbmNhdGVuYXRpb24gb2YgdGhlIGNoYXJhY3RlciBzZXF1ZW5jZQorICAgICAgICAgICAgICAgIHJlcHJlc2VudGVkIGJ5IHRoaXMgPGNvZGU+U3RyaW5nPC9jb2RlPiBvYmplY3QgYW5kIHRoZSBjaGFyYWN0ZXIKKyAgICAgICAgICAgICAgICBzZXF1ZW5jZSByZXByZXNlbnRlZCBieSB0aGUgYXJndW1lbnQgc3RyaW5nLjxwPgorICAgICAgICAgICAgICAgIEV4YW1wbGVzOgorICAgICAgICAgICAgPGJsb2NrcXVvdGU+PHByZT4KKyAiY2FyZXMiLmNvbmNhdCgicyIpIHJldHVybnMgImNhcmVzcyIKKyAidG8iLmNvbmNhdCgiZ2V0IikuY29uY2F0KCJoZXIiKSByZXR1cm5zICJ0b2dldGhlciIKKyA8L3ByZT48L2Jsb2NrcXVvdGU+PC9kaXY+CisgICAgICAgIDxkbD48ZHQ+PHNwYW4gY2xhc3M9InN0cm9uZyI+UGFyYW1ldGVyczo8L3NwYW4+PC9kdD48ZGQ+PGNvZGU+c3RyPC9jb2RlPiAtIHRoZSA8Y29kZT5TdHJpbmc8L2NvZGU+IHRoYXQgaXMgY29uY2F0ZW5hdGVkIHRvIHRoZSBlbmQKKyAgICAgICAgICAgIG9mIHRoaXMgPGNvZGU+U3RyaW5nPC9jb2RlPi48L2RkPgorICAgICAgICAgICAgPGR0PjxzcGFuIGNsYXNzPSJzdHJvbmciPlJldHVybnM6PC9zcGFuPjwvZHQ+PGRkPmEgc3RyaW5nIHRoYXQgcmVwcmVzZW50cyB0aGUgY29uY2F0ZW5hdGlvbiBvZiB0aGlzIG9iamVjdCdzCisgICAgICAgICAgICAgICAgY2hhcmFjdGVycyBmb2xsb3dlZCBieSB0aGUgc3RyaW5nIGFyZ3VtZW50J3MgY2hhcmFjdGVycy48L2RkPjwvZGw+CisgICAgPC9saT4KKzwvdWw+Cis8YSBuYW1lPSJyZXBsYWNlKGNoYXIsIGNoYXIpIj4KKyAgICA8IS0tICAgLS0+Cis8L2E+Cis8dWwgY2xhc3M9ImJsb2NrTGlzdCI+CisgICAgPGxpIGNsYXNzPSJibG9ja0xpc3QiPgorICAgICAgICA8aDQ+cmVwbGFjZTwvaDQ+Cis8cHJlPnB1YmxpYyZuYnNwOzxhIGhyZWY9Ii4uLy4uL2phdmEvbGFuZy9TdHJpbmcuaHRtbCIgdGl0bGU9ImNsYXNzIGluIGphdmEubGFuZyI+U3RyaW5nPC9hPiZuYnNwO3JlcGxhY2UoY2hhciZuYnNwO29sZENoYXIsCisgICAgICAgICAgICAgY2hhciZuYnNwO25ld0NoYXIpPC9wcmU+CisgICAgICAgIDxkaXYgY2xhc3M9ImJsb2NrIj5SZXR1cm5zIGEgbmV3IHN0cmluZyByZXN1bHRpbmcgZnJvbSByZXBsYWNpbmcgYWxsIG9jY3VycmVuY2VzIG9mCisgICAgICAgICAgICA8Y29kZT5vbGRDaGFyPC9jb2RlPiBpbiB0aGlzIHN0cmluZyB3aXRoIDxjb2RlPm5ld0NoYXI8L2NvZGU+LgorICAgICAgICAgICAgPHA+CisgICAgICAgICAgICAgICAgSWYgdGhlIGNoYXJhY3RlciA8Y29kZT5vbGRDaGFyPC9jb2RlPiBkb2VzIG5vdCBvY2N1ciBpbiB0aGUKKyAgICAgICAgICAgICAgICBjaGFyYWN0ZXIgc2VxdWVuY2UgcmVwcmVzZW50ZWQgYnkgdGhpcyA8Y29kZT5TdHJpbmc8L2NvZGU+IG9iamVjdCwKKyAgICAgICAgICAgICAgICB0aGVuIGEgcmVmZXJlbmNlIHRvIHRoaXMgPGNvZGU+U3RyaW5nPC9jb2RlPiBvYmplY3QgaXMgcmV0dXJuZWQuCisgICAgICAgICAgICAgICAgT3RoZXJ3aXNlLCBhIG5ldyA8Y29kZT5TdHJpbmc8L2NvZGU+IG9iamVjdCBpcyBjcmVhdGVkIHRoYXQKKyAgICAgICAgICAgICAgICByZXByZXNlbnRzIGEgY2hhcmFjdGVyIHNlcXVlbmNlIGlkZW50aWNhbCB0byB0aGUgY2hhcmFjdGVyIHNlcXVlbmNlCisgICAgICAgICAgICAgICAgcmVwcmVzZW50ZWQgYnkgdGhpcyA8Y29kZT5TdHJpbmc8L2NvZGU+IG9iamVjdCwgZXhjZXB0IHRoYXQgZXZlcnkKKyAgICAgICAgICAgICAgICBvY2N1cnJlbmNlIG9mIDxjb2RlPm9sZENoYXI8L2NvZGU+IGlzIHJlcGxhY2VkIGJ5IGFuIG9jY3VycmVuY2UKKyAgICAgICAgICAgICAgICBvZiA8Y29kZT5uZXdDaGFyPC9jb2RlPi4KKyAgICAgICAgICAgIDxwPgorICAgICAgICAgICAgICAgIEV4YW1wbGVzOgorICAgICAgICAgICAgPGJsb2NrcXVvdGU+PHByZT4KKyAibWVzcXVpdGUgaW4geW91ciBjZWxsYXIiLnJlcGxhY2UoJ2UnLCAnbycpCisgICAgICAgICByZXR1cm5zICJtb3NxdWl0byBpbiB5b3VyIGNvbGxhciIKKyAidGhlIHdhciBvZiBiYXJvbmV0cyIucmVwbGFjZSgncicsICd5JykKKyAgICAgICAgIHJldHVybnMgInRoZSB3YXkgb2YgYmF5b25ldHMiCisgInNwYXJyaW5nIHdpdGggYSBwdXJwbGUgcG9ycG9pc2UiLnJlcGxhY2UoJ3AnLCAndCcpCisgICAgICAgICByZXR1cm5zICJzdGFycmluZyB3aXRoIGEgdHVydGxlIHRvcnRvaXNlIgorICJKb25MIi5yZXBsYWNlKCdxJywgJ3gnKSByZXR1cm5zICJKb25MIiAobm8gY2hhbmdlKQorIDwvcHJlPjwvYmxvY2txdW90ZT48L2Rpdj4KKyAgICAgICAgPGRsPjxkdD48c3BhbiBjbGFzcz0ic3Ryb25nIj5QYXJhbWV0ZXJzOjwvc3Bhbj48L2R0PjxkZD48Y29kZT5vbGRDaGFyPC9jb2RlPiAtIHRoZSBvbGQgY2hhcmFjdGVyLjwvZGQ+PGRkPjxjb2RlPm5ld0NoYXI8L2NvZGU+IC0gdGhlIG5ldyBjaGFyYWN0ZXIuPC9kZD4KKyAgICAgICAgICAgIDxkdD48c3BhbiBjbGFzcz0ic3Ryb25nIj5SZXR1cm5zOjwvc3Bhbj48L2R0PjxkZD5hIHN0cmluZyBkZXJpdmVkIGZyb20gdGhpcyBzdHJpbmcgYnkgcmVwbGFjaW5nIGV2ZXJ5CisgICAgICAgICAgICAgICAgb2NjdXJyZW5jZSBvZiA8Y29kZT5vbGRDaGFyPC9jb2RlPiB3aXRoIDxjb2RlPm5ld0NoYXI8L2NvZGU+LjwvZGQ+PC9kbD4KKyAgICA8L2xpPgorPC91bD4KKzxhIG5hbWU9Im1hdGNoZXMoamF2YS5sYW5nLlN0cmluZykiPgorICAgIDwhLS0gICAtLT4KKzwvYT4KKzx1bCBjbGFzcz0iYmxvY2tMaXN0Ij4KKyAgICA8bGkgY2xhc3M9ImJsb2NrTGlzdCI+CisgICAgICAgIDxoND5tYXRjaGVzPC9oND4KKyAgICAgICAgPHByZT5wdWJsaWMmbmJzcDtib29sZWFuJm5ic3A7bWF0Y2hlcyg8YSBocmVmPSIuLi8uLi9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBqYXZhLmxhbmciPlN0cmluZzwvYT4mbmJzcDtyZWdleCk8L3ByZT4KKyAgICAgICAgPGRpdiBjbGFzcz0iYmxvY2siPlRlbGxzIHdoZXRoZXIgb3Igbm90IHRoaXMgc3RyaW5nIG1hdGNoZXMgdGhlIGdpdmVuIDxhCisgICAgICAgICAgICAgICAgaHJlZj0iLi4vdXRpbC9yZWdleC9QYXR0ZXJuLmh0bWwjc3VtIj5yZWd1bGFyIGV4cHJlc3Npb248L2E+LgorCisgICAgICAgICAgICA8cD4gQW4gaW52b2NhdGlvbiBvZiB0aGlzIG1ldGhvZCBvZiB0aGUgZm9ybQorICAgICAgICAgICAgICAgIDxpPnN0cjwvaT48dHQ+Lm1hdGNoZXMoPC90dD48aT5yZWdleDwvaT48dHQ+KTwvdHQ+IHlpZWxkcyBleGFjdGx5IHRoZQorICAgICAgICAgICAgICAgIHNhbWUgcmVzdWx0IGFzIHRoZSBleHByZXNzaW9uCisKKyAgICAgICAgICAgIDxibG9ja3F1b3RlPjx0dD4gPGEgaHJlZj0iLi4vLi4vamF2YS91dGlsL3JlZ2V4L1BhdHRlcm4uaHRtbCIgdGl0bGU9ImNsYXNzIGluIGphdmEudXRpbC5yZWdleCI+PGNvZGU+UGF0dGVybjwvY29kZT48L2E+LjxhIGhyZWY9Ii4uLy4uL2phdmEvdXRpbC9yZWdleC9QYXR0ZXJuLmh0bWwjbWF0Y2hlcyhqYXZhLmxhbmcuU3RyaW5nLCBqYXZhLmxhbmcuQ2hhclNlcXVlbmNlKSI+PGNvZGU+bWF0Y2hlczwvY29kZT48L2E+KDwvdHQ+PGk+cmVnZXg8L2k+PHR0Piw8L3R0PiA8aT5zdHI8L2k+PHR0Pik8L3R0PjwvYmxvY2txdW90ZT48L2Rpdj4KKyAgICAgICAgPGRsPjxkdD48c3BhbiBjbGFzcz0ic3Ryb25nIj5QYXJhbWV0ZXJzOjwvc3Bhbj48L2R0PjxkZD48Y29kZT5yZWdleDwvY29kZT4gLSB0aGUgcmVndWxhciBleHByZXNzaW9uIHRvIHdoaWNoIHRoaXMgc3RyaW5nIGlzIHRvIGJlIG1hdGNoZWQ8L2RkPgorICAgICAgICAgICAgPGR0PjxzcGFuIGNsYXNzPSJzdHJvbmciPlJldHVybnM6PC9zcGFuPjwvZHQ+PGRkPjx0dD50cnVlPC90dD4gaWYsIGFuZCBvbmx5IGlmLCB0aGlzIHN0cmluZyBtYXRjaGVzIHRoZQorICAgICAgICAgICAgICAgIGdpdmVuIHJlZ3VsYXIgZXhwcmVzc2lvbjwvZGQ+CisgICAgICAgICAgICA8ZHQ+PHNwYW4gY2xhc3M9InN0cm9uZyI+VGhyb3dzOjwvc3Bhbj48L2R0PgorICAgICAgICAgICAgPGRkPjxjb2RlPjxhIGhyZWY9Ii4uLy4uL2phdmEvdXRpbC9yZWdleC9QYXR0ZXJuU3ludGF4RXhjZXB0aW9uLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBqYXZhLnV0aWwucmVnZXgiPlBhdHRlcm5TeW50YXhFeGNlcHRpb248L2E+PC9jb2RlPiAtIGlmIHRoZSByZWd1bGFyIGV4cHJlc3Npb24ncyBzeW50YXggaXMgaW52YWxpZDwvZGQ+PGR0PjxzcGFuIGNsYXNzPSJzdHJvbmciPlNpbmNlOjwvc3Bhbj48L2R0PgorICAgICAgICAgICAgPGRkPjEuNDwvZGQ+CisgICAgICAgICAgICA8ZHQ+PHNwYW4gY2xhc3M9InN0cm9uZyI+U2VlIEFsc286PC9zcGFuPjwvZHQ+PGRkPjxhIGhyZWY9Ii4uLy4uL2phdmEvdXRpbC9yZWdleC9QYXR0ZXJuLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBqYXZhLnV0aWwucmVnZXgiPjxjb2RlPlBhdHRlcm48L2NvZGU+PC9hPjwvZGQ+PC9kbD4KKyAgICA8L2xpPgorPC91bD4KKzxhIG5hbWU9ImNvbnRhaW5zKGphdmEubGFuZy5DaGFyU2VxdWVuY2UpIj4KKyAgICA8IS0tICAgLS0+Cis8L2E+Cis8dWwgY2xhc3M9ImJsb2NrTGlzdCI+CisgICAgPGxpIGNsYXNzPSJibG9ja0xpc3QiPgorICAgICAgICA8aDQ+Y29udGFpbnM8L2g0PgorICAgICAgICA8cHJlPnB1YmxpYyZuYnNwO2Jvb2xlYW4mbmJzcDtjb250YWlucyg8YSBocmVmPSIuLi8uLi9qYXZhL2xhbmcvQ2hhclNlcXVlbmNlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gamF2YS5sYW5nIj5DaGFyU2VxdWVuY2U8L2E+Jm5ic3A7cyk8L3ByZT4KKyAgICAgICAgPGRpdiBjbGFzcz0iYmxvY2siPlJldHVybnMgdHJ1ZSBpZiBhbmQgb25seSBpZiB0aGlzIHN0cmluZyBjb250YWlucyB0aGUgc3BlY2lmaWVkCisgICAgICAgICAgICBzZXF1ZW5jZSBvZiBjaGFyIHZhbHVlcy48L2Rpdj4KKyAgICAgICAgPGRsPjxkdD48c3BhbiBjbGFzcz0ic3Ryb25nIj5QYXJhbWV0ZXJzOjwvc3Bhbj48L2R0PjxkZD48Y29kZT5zPC9jb2RlPiAtIHRoZSBzZXF1ZW5jZSB0byBzZWFyY2ggZm9yPC9kZD4KKyAgICAgICAgICAgIDxkdD48c3BhbiBjbGFzcz0ic3Ryb25nIj5SZXR1cm5zOjwvc3Bhbj48L2R0PjxkZD50cnVlIGlmIHRoaXMgc3RyaW5nIGNvbnRhaW5zIDxjb2RlPnM8L2NvZGU+LCBmYWxzZSBvdGhlcndpc2U8L2RkPgorICAgICAgICAgICAgPGR0PjxzcGFuIGNsYXNzPSJzdHJvbmciPlRocm93czo8L3NwYW4+PC9kdD4KKyAgICAgICAgICAgIDxkZD48Y29kZT48YSBocmVmPSIuLi8uLi9qYXZhL2xhbmcvTnVsbFBvaW50ZXJFeGNlcHRpb24uaHRtbCIgdGl0bGU9ImNsYXNzIGluIGphdmEubGFuZyI+TnVsbFBvaW50ZXJFeGNlcHRpb248L2E+PC9jb2RlPiAtIGlmIDxjb2RlPnM8L2NvZGU+IGlzIDxjb2RlPm51bGw8L2NvZGU+PC9kZD48ZHQ+PHNwYW4gY2xhc3M9InN0cm9uZyI+U2luY2U6PC9zcGFuPjwvZHQ+CisgICAgICAgICAgICA8ZGQ+MS41PC9kZD48L2RsPgorICAgIDwvbGk+Cis8L3VsPgorPGEgbmFtZT0icmVwbGFjZUZpcnN0KGphdmEubGFuZy5TdHJpbmcsIGphdmEubGFuZy5TdHJpbmcpIj4KKyAgICA8IS0tICAgLS0+Cis8L2E+Cis8dWwgY2xhc3M9ImJsb2NrTGlzdCI+CisgICAgPGxpIGNsYXNzPSJibG9ja0xpc3QiPgorICAgICAgICA8aDQ+cmVwbGFjZUZpcnN0PC9oND4KKzxwcmU+cHVibGljJm5ic3A7PGEgaHJlZj0iLi4vLi4vamF2YS9sYW5nL1N0cmluZy5odG1sIiB0aXRsZT0iY2xhc3MgaW4gamF2YS5sYW5nIj5TdHJpbmc8L2E+Jm5ic3A7cmVwbGFjZUZpcnN0KDxhIGhyZWY9Ii4uLy4uL2phdmEvbGFuZy9TdHJpbmcuaHRtbCIgdGl0bGU9ImNsYXNzIGluIGphdmEubGFuZyI+U3RyaW5nPC9hPiZuYnNwO3JlZ2V4LAorICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iLi4vLi4vamF2YS9sYW5nL1N0cmluZy5odG1sIiB0aXRsZT0iY2xhc3MgaW4gamF2YS5sYW5nIj5TdHJpbmc8L2E+Jm5ic3A7cmVwbGFjZW1lbnQpPC9wcmU+CisgICAgICAgIDxkaXYgY2xhc3M9ImJsb2NrIj5SZXBsYWNlcyB0aGUgZmlyc3Qgc3Vic3RyaW5nIG9mIHRoaXMgc3RyaW5nIHRoYXQgbWF0Y2hlcyB0aGUgZ2l2ZW4gPGEKKyAgICAgICAgICAgICAgICBocmVmPSIuLi91dGlsL3JlZ2V4L1BhdHRlcm4uaHRtbCNzdW0iPnJlZ3VsYXIgZXhwcmVzc2lvbjwvYT4gd2l0aCB0aGUKKyAgICAgICAgICAgIGdpdmVuIHJlcGxhY2VtZW50LgorCisgICAgICAgICAgICA8cD4gQW4gaW52b2NhdGlvbiBvZiB0aGlzIG1ldGhvZCBvZiB0aGUgZm9ybQorICAgICAgICAgICAgICAgIDxpPnN0cjwvaT48dHQ+LnJlcGxhY2VGaXJzdCg8L3R0PjxpPnJlZ2V4PC9pPjx0dD4sPC90dD4gPGk+cmVwbDwvaT48dHQ+KTwvdHQ+CisgICAgICAgICAgICAgICAgeWllbGRzIGV4YWN0bHkgdGhlIHNhbWUgcmVzdWx0IGFzIHRoZSBleHByZXNzaW9uCisKKyAgICAgICAgICAgIDxibG9ja3F1b3RlPjx0dD4KKyAgICAgICAgICAgICAgICA8YSBocmVmPSIuLi8uLi9qYXZhL3V0aWwvcmVnZXgvUGF0dGVybi5odG1sIiB0aXRsZT0iY2xhc3MgaW4gamF2YS51dGlsLnJlZ2V4Ij48Y29kZT5QYXR0ZXJuPC9jb2RlPjwvYT4uPGEgaHJlZj0iLi4vLi4vamF2YS91dGlsL3JlZ2V4L1BhdHRlcm4uaHRtbCNjb21waWxlKGphdmEubGFuZy5TdHJpbmcpIj48Y29kZT5jb21waWxlPC9jb2RlPjwvYT4oPC90dD48aT5yZWdleDwvaT48dHQ+KS48YSBocmVmPSIuLi8uLi9qYXZhL3V0aWwvcmVnZXgvUGF0dGVybi5odG1sI21hdGNoZXIoamF2YS5sYW5nLkNoYXJTZXF1ZW5jZSkiPjxjb2RlPm1hdGNoZXI8L2NvZGU+PC9hPig8L3R0PjxpPnN0cjwvaT48dHQ+KS48YSBocmVmPSIuLi8uLi9qYXZhL3V0aWwvcmVnZXgvTWF0Y2hlci5odG1sI3JlcGxhY2VGaXJzdChqYXZhLmxhbmcuU3RyaW5nKSI+PGNvZGU+cmVwbGFjZUZpcnN0PC9jb2RlPjwvYT4oPC90dD48aT5yZXBsPC9pPjx0dD4pPC90dD48L2Jsb2NrcXVvdGU+CisKKyAgICAgICAgICAgIDxwPgorICAgICAgICAgICAgICAgIE5vdGUgdGhhdCBiYWNrc2xhc2hlcyAoPHR0Plw8L3R0PikgYW5kIGRvbGxhciBzaWducyAoPHR0PiQ8L3R0PikgaW4gdGhlCisgICAgICAgICAgICAgICAgcmVwbGFjZW1lbnQgc3RyaW5nIG1heSBjYXVzZSB0aGUgcmVzdWx0cyB0byBiZSBkaWZmZXJlbnQgdGhhbiBpZiBpdCB3ZXJlCisgICAgICAgICAgICAgICAgYmVpbmcgdHJlYXRlZCBhcyBhIGxpdGVyYWwgcmVwbGFjZW1lbnQgc3RyaW5nOyBzZWUKKyAgICAgICAgICAgICAgICA8YSBocmVmPSIuLi8uLi9qYXZhL3V0aWwvcmVnZXgvTWF0Y2hlci5odG1sI3JlcGxhY2VGaXJzdChqYXZhLmxhbmcuU3RyaW5nKSI+PGNvZGU+TWF0Y2hlci5yZXBsYWNlRmlyc3QoamF2YS5sYW5nLlN0cmluZyk8L2NvZGU+PC9hPi4KKyAgICAgICAgICAgICAgICBVc2UgPGEgaHJlZj0iLi4vLi4vamF2YS91dGlsL3JlZ2V4L01hdGNoZXIuaHRtbCNxdW90ZVJlcGxhY2VtZW50KGphdmEubGFuZy5TdHJpbmcpIj48Y29kZT5NYXRjaGVyLnF1b3RlUmVwbGFjZW1lbnQoamF2YS5sYW5nLlN0cmluZyk8L2NvZGU+PC9hPiB0byBzdXBwcmVzcyB0aGUgc3BlY2lhbAorICAgICAgICAgICAgICAgIG1lYW5pbmcgb2YgdGhlc2UgY2hhcmFjdGVycywgaWYgZGVzaXJlZC48L2Rpdj4KKyAgICAgICAgPGRsPjxkdD48c3BhbiBjbGFzcz0ic3Ryb25nIj5QYXJhbWV0ZXJzOjwvc3Bhbj48L2R0PjxkZD48Y29kZT5yZWdleDwvY29kZT4gLSB0aGUgcmVndWxhciBleHByZXNzaW9uIHRvIHdoaWNoIHRoaXMgc3RyaW5nIGlzIHRvIGJlIG1hdGNoZWQ8L2RkPjxkZD48Y29kZT5yZXBsYWNlbWVudDwvY29kZT4gLSB0aGUgc3RyaW5nIHRvIGJlIHN1YnN0aXR1dGVkIGZvciB0aGUgZmlyc3QgbWF0Y2g8L2RkPgorICAgICAgICAgICAgPGR0PjxzcGFuIGNsYXNzPSJzdHJvbmciPlJldHVybnM6PC9zcGFuPjwvZHQ+PGRkPlRoZSByZXN1bHRpbmcgPHR0PlN0cmluZzwvdHQ+PC9kZD4KKyAgICAgICAgICAgIDxkdD48c3BhbiBjbGFzcz0ic3Ryb25nIj5UaHJvd3M6PC9zcGFuPjwvZHQ+CisgICAgICAgICAgICA8ZGQ+PGNvZGU+PGEgaHJlZj0iLi4vLi4vamF2YS91dGlsL3JlZ2V4L1BhdHRlcm5TeW50YXhFeGNlcHRpb24uaHRtbCIgdGl0bGU9ImNsYXNzIGluIGphdmEudXRpbC5yZWdleCI+UGF0dGVyblN5bnRheEV4Y2VwdGlvbjwvYT48L2NvZGU+IC0gaWYgdGhlIHJlZ3VsYXIgZXhwcmVzc2lvbidzIHN5bnRheCBpcyBpbnZhbGlkPC9kZD48ZHQ+PHNwYW4gY2xhc3M9InN0cm9uZyI+U2luY2U6PC9zcGFuPjwvZHQ+CisgICAgICAgICAgICA8ZGQ+MS40PC9kZD4KKyAgICAgICAgICAgIDxkdD48c3BhbiBjbGFzcz0ic3Ryb25nIj5TZWUgQWxzbzo8L3NwYW4+PC9kdD48ZGQ+PGEgaHJlZj0iLi4vLi4vamF2YS91dGlsL3JlZ2V4L1BhdHRlcm4uaHRtbCIgdGl0bGU9ImNsYXNzIGluIGphdmEudXRpbC5yZWdleCI+PGNvZGU+UGF0dGVybjwvY29kZT48L2E+PC9kZD48L2RsPgorICAgIDwvbGk+Cis8L3VsPgorPGEgbmFtZT0icmVwbGFjZUFsbChqYXZhLmxhbmcuU3RyaW5nLCBqYXZhLmxhbmcuU3RyaW5nKSI+CisgICAgPCEtLSAgIC0tPgorPC9hPgorPHVsIGNsYXNzPSJibG9ja0xpc3QiPgorICAgIDxsaSBjbGFzcz0iYmxvY2tMaXN0Ij4KKyAgICAgICAgPGg0PnJlcGxhY2VBbGw8L2g0PgorPHByZT5wdWJsaWMmbmJzcDs8YSBocmVmPSIuLi8uLi9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBqYXZhLmxhbmciPlN0cmluZzwvYT4mbmJzcDtyZXBsYWNlQWxsKDxhIGhyZWY9Ii4uLy4uL2phdmEvbGFuZy9TdHJpbmcuaHRtbCIgdGl0bGU9ImNsYXNzIGluIGphdmEubGFuZyI+U3RyaW5nPC9hPiZuYnNwO3JlZ2V4LAorICAgICAgICAgICAgICAgIDxhIGhyZWY9Ii4uLy4uL2phdmEvbGFuZy9TdHJpbmcuaHRtbCIgdGl0bGU9ImNsYXNzIGluIGphdmEubGFuZyI+U3RyaW5nPC9hPiZuYnNwO3JlcGxhY2VtZW50KTwvcHJlPgorICAgICAgICA8ZGl2IGNsYXNzPSJibG9jayI+UmVwbGFjZXMgZWFjaCBzdWJzdHJpbmcgb2YgdGhpcyBzdHJpbmcgdGhhdCBtYXRjaGVzIHRoZSBnaXZlbiA8YQorICAgICAgICAgICAgICAgIGhyZWY9Ii4uL3V0aWwvcmVnZXgvUGF0dGVybi5odG1sI3N1bSI+cmVndWxhciBleHByZXNzaW9uPC9hPiB3aXRoIHRoZQorICAgICAgICAgICAgZ2l2ZW4gcmVwbGFjZW1lbnQuCisKKyAgICAgICAgICAgIDxwPiBBbiBpbnZvY2F0aW9uIG9mIHRoaXMgbWV0aG9kIG9mIHRoZSBmb3JtCisgICAgICAgICAgICAgICAgPGk+c3RyPC9pPjx0dD4ucmVwbGFjZUFsbCg8L3R0PjxpPnJlZ2V4PC9pPjx0dD4sPC90dD4gPGk+cmVwbDwvaT48dHQ+KTwvdHQ+CisgICAgICAgICAgICAgICAgeWllbGRzIGV4YWN0bHkgdGhlIHNhbWUgcmVzdWx0IGFzIHRoZSBleHByZXNzaW9uCisKKyAgICAgICAgICAgIDxibG9ja3F1b3RlPjx0dD4KKyAgICAgICAgICAgICAgICA8YSBocmVmPSIuLi8uLi9qYXZhL3V0aWwvcmVnZXgvUGF0dGVybi5odG1sIiB0aXRsZT0iY2xhc3MgaW4gamF2YS51dGlsLnJlZ2V4Ij48Y29kZT5QYXR0ZXJuPC9jb2RlPjwvYT4uPGEgaHJlZj0iLi4vLi4vamF2YS91dGlsL3JlZ2V4L1BhdHRlcm4uaHRtbCNjb21waWxlKGphdmEubGFuZy5TdHJpbmcpIj48Y29kZT5jb21waWxlPC9jb2RlPjwvYT4oPC90dD48aT5yZWdleDwvaT48dHQ+KS48YSBocmVmPSIuLi8uLi9qYXZhL3V0aWwvcmVnZXgvUGF0dGVybi5odG1sI21hdGNoZXIoamF2YS5sYW5nLkNoYXJTZXF1ZW5jZSkiPjxjb2RlPm1hdGNoZXI8L2NvZGU+PC9hPig8L3R0PjxpPnN0cjwvaT48dHQ+KS48YSBocmVmPSIuLi8uLi9qYXZhL3V0aWwvcmVnZXgvTWF0Y2hlci5odG1sI3JlcGxhY2VBbGwoamF2YS5sYW5nLlN0cmluZykiPjxjb2RlPnJlcGxhY2VBbGw8L2NvZGU+PC9hPig8L3R0PjxpPnJlcGw8L2k+PHR0Pik8L3R0PjwvYmxvY2txdW90ZT4KKworICAgICAgICAgICAgPHA+CisgICAgICAgICAgICAgICAgTm90ZSB0aGF0IGJhY2tzbGFzaGVzICg8dHQ+XDwvdHQ+KSBhbmQgZG9sbGFyIHNpZ25zICg8dHQ+JDwvdHQ+KSBpbiB0aGUKKyAgICAgICAgICAgICAgICByZXBsYWNlbWVudCBzdHJpbmcgbWF5IGNhdXNlIHRoZSByZXN1bHRzIHRvIGJlIGRpZmZlcmVudCB0aGFuIGlmIGl0IHdlcmUKKyAgICAgICAgICAgICAgICBiZWluZyB0cmVhdGVkIGFzIGEgbGl0ZXJhbCByZXBsYWNlbWVudCBzdHJpbmc7IHNlZQorICAgICAgICAgICAgICAgIDxhIGhyZWY9Ii4uLy4uL2phdmEvdXRpbC9yZWdleC9NYXRjaGVyLmh0bWwjcmVwbGFjZUFsbChqYXZhLmxhbmcuU3RyaW5nKSI+PGNvZGU+TWF0Y2hlci5yZXBsYWNlQWxsPC9jb2RlPjwvYT4uCisgICAgICAgICAgICAgICAgVXNlIDxhIGhyZWY9Ii4uLy4uL2phdmEvdXRpbC9yZWdleC9NYXRjaGVyLmh0bWwjcXVvdGVSZXBsYWNlbWVudChqYXZhLmxhbmcuU3RyaW5nKSI+PGNvZGU+TWF0Y2hlci5xdW90ZVJlcGxhY2VtZW50KGphdmEubGFuZy5TdHJpbmcpPC9jb2RlPjwvYT4gdG8gc3VwcHJlc3MgdGhlIHNwZWNpYWwKKyAgICAgICAgICAgICAgICBtZWFuaW5nIG9mIHRoZXNlIGNoYXJhY3RlcnMsIGlmIGRlc2lyZWQuPC9kaXY+CisgICAgICAgIDxkbD48ZHQ+PHNwYW4gY2xhc3M9InN0cm9uZyI+UGFyYW1ldGVyczo8L3NwYW4+PC9kdD48ZGQ+PGNvZGU+cmVnZXg8L2NvZGU+IC0gdGhlIHJlZ3VsYXIgZXhwcmVzc2lvbiB0byB3aGljaCB0aGlzIHN0cmluZyBpcyB0byBiZSBtYXRjaGVkPC9kZD48ZGQ+PGNvZGU+cmVwbGFjZW1lbnQ8L2NvZGU+IC0gdGhlIHN0cmluZyB0byBiZSBzdWJzdGl0dXRlZCBmb3IgZWFjaCBtYXRjaDwvZGQ+CisgICAgICAgICAgICA8ZHQ+PHNwYW4gY2xhc3M9InN0cm9uZyI+UmV0dXJuczo8L3NwYW4+PC9kdD48ZGQ+VGhlIHJlc3VsdGluZyA8dHQ+U3RyaW5nPC90dD48L2RkPgorICAgICAgICAgICAgPGR0PjxzcGFuIGNsYXNzPSJzdHJvbmciPlRocm93czo8L3NwYW4+PC9kdD4KKyAgICAgICAgICAgIDxkZD48Y29kZT48YSBocmVmPSIuLi8uLi9qYXZhL3V0aWwvcmVnZXgvUGF0dGVyblN5bnRheEV4Y2VwdGlvbi5odG1sIiB0aXRsZT0iY2xhc3MgaW4gamF2YS51dGlsLnJlZ2V4Ij5QYXR0ZXJuU3ludGF4RXhjZXB0aW9uPC9hPjwvY29kZT4gLSBpZiB0aGUgcmVndWxhciBleHByZXNzaW9uJ3Mgc3ludGF4IGlzIGludmFsaWQ8L2RkPjxkdD48c3BhbiBjbGFzcz0ic3Ryb25nIj5TaW5jZTo8L3NwYW4+PC9kdD4KKyAgICAgICAgICAgIDxkZD4xLjQ8L2RkPgorICAgICAgICAgICAgPGR0PjxzcGFuIGNsYXNzPSJzdHJvbmciPlNlZSBBbHNvOjwvc3Bhbj48L2R0PjxkZD48YSBocmVmPSIuLi8uLi9qYXZhL3V0aWwvcmVnZXgvUGF0dGVybi5odG1sIiB0aXRsZT0iY2xhc3MgaW4gamF2YS51dGlsLnJlZ2V4Ij48Y29kZT5QYXR0ZXJuPC9jb2RlPjwvYT48L2RkPjwvZGw+CisgICAgPC9saT4KKzwvdWw+Cis8YSBuYW1lPSJyZXBsYWNlKGphdmEubGFuZy5DaGFyU2VxdWVuY2UsIGphdmEubGFuZy5DaGFyU2VxdWVuY2UpIj4KKyAgICA8IS0tICAgLS0+Cis8L2E+Cis8dWwgY2xhc3M9ImJsb2NrTGlzdCI+CisgICAgPGxpIGNsYXNzPSJibG9ja0xpc3QiPgorICAgICAgICA8aDQ+cmVwbGFjZTwvaDQ+Cis8cHJlPnB1YmxpYyZuYnNwOzxhIGhyZWY9Ii4uLy4uL2phdmEvbGFuZy9TdHJpbmcuaHRtbCIgdGl0bGU9ImNsYXNzIGluIGphdmEubGFuZyI+U3RyaW5nPC9hPiZuYnNwO3JlcGxhY2UoPGEgaHJlZj0iLi4vLi4vamF2YS9sYW5nL0NoYXJTZXF1ZW5jZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIGphdmEubGFuZyI+Q2hhclNlcXVlbmNlPC9hPiZuYnNwO3RhcmdldCwKKyAgICAgICAgICAgICA8YSBocmVmPSIuLi8uLi9qYXZhL2xhbmcvQ2hhclNlcXVlbmNlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gamF2YS5sYW5nIj5DaGFyU2VxdWVuY2U8L2E+Jm5ic3A7cmVwbGFjZW1lbnQpPC9wcmU+CisgICAgICAgIDxkaXYgY2xhc3M9ImJsb2NrIj5SZXBsYWNlcyBlYWNoIHN1YnN0cmluZyBvZiB0aGlzIHN0cmluZyB0aGF0IG1hdGNoZXMgdGhlIGxpdGVyYWwgdGFyZ2V0CisgICAgICAgICAgICBzZXF1ZW5jZSB3aXRoIHRoZSBzcGVjaWZpZWQgbGl0ZXJhbCByZXBsYWNlbWVudCBzZXF1ZW5jZS4gVGhlCisgICAgICAgICAgICByZXBsYWNlbWVudCBwcm9jZWVkcyBmcm9tIHRoZSBiZWdpbm5pbmcgb2YgdGhlIHN0cmluZyB0byB0aGUgZW5kLCBmb3IKKyAgICAgICAgICAgIGV4YW1wbGUsIHJlcGxhY2luZyAiYWEiIHdpdGggImIiIGluIHRoZSBzdHJpbmcgImFhYSIgd2lsbCByZXN1bHQgaW4KKyAgICAgICAgICAgICJiYSIgcmF0aGVyIHRoYW4gImFiIi48L2Rpdj4KKyAgICAgICAgPGRsPjxkdD48c3BhbiBjbGFzcz0ic3Ryb25nIj5QYXJhbWV0ZXJzOjwvc3Bhbj48L2R0PjxkZD48Y29kZT50YXJnZXQ8L2NvZGU+IC0gVGhlIHNlcXVlbmNlIG9mIGNoYXIgdmFsdWVzIHRvIGJlIHJlcGxhY2VkPC9kZD48ZGQ+PGNvZGU+cmVwbGFjZW1lbnQ8L2NvZGU+IC0gVGhlIHJlcGxhY2VtZW50IHNlcXVlbmNlIG9mIGNoYXIgdmFsdWVzPC9kZD4KKyAgICAgICAgICAgIDxkdD48c3BhbiBjbGFzcz0ic3Ryb25nIj5SZXR1cm5zOjwvc3Bhbj48L2R0PjxkZD5UaGUgcmVzdWx0aW5nIHN0cmluZzwvZGQ+CisgICAgICAgICAgICA8ZHQ+PHNwYW4gY2xhc3M9InN0cm9uZyI+VGhyb3dzOjwvc3Bhbj48L2R0PgorICAgICAgICAgICAgPGRkPjxjb2RlPjxhIGhyZWY9Ii4uLy4uL2phdmEvbGFuZy9OdWxsUG9pbnRlckV4Y2VwdGlvbi5odG1sIiB0aXRsZT0iY2xhc3MgaW4gamF2YS5sYW5nIj5OdWxsUG9pbnRlckV4Y2VwdGlvbjwvYT48L2NvZGU+IC0gaWYgPGNvZGU+dGFyZ2V0PC9jb2RlPiBvcgorICAgICAgICAgICAgICAgIDxjb2RlPnJlcGxhY2VtZW50PC9jb2RlPiBpcyA8Y29kZT5udWxsPC9jb2RlPi48L2RkPjxkdD48c3BhbiBjbGFzcz0ic3Ryb25nIj5TaW5jZTo8L3NwYW4+PC9kdD4KKyAgICAgICAgICAgIDxkZD4xLjU8L2RkPjwvZGw+CisgICAgPC9saT4KKzwvdWw+Cis8YSBuYW1lPSJzcGxpdChqYXZhLmxhbmcuU3RyaW5nLCBpbnQpIj4KKyAgICA8IS0tICAgLS0+Cis8L2E+Cis8dWwgY2xhc3M9ImJsb2NrTGlzdCI+CisgICAgPGxpIGNsYXNzPSJibG9ja0xpc3QiPgorICAgICAgICA8aDQ+c3BsaXQ8L2g0PgorPHByZT5wdWJsaWMmbmJzcDs8YSBocmVmPSIuLi8uLi9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBqYXZhLmxhbmciPlN0cmluZzwvYT5bXSZuYnNwO3NwbGl0KDxhIGhyZWY9Ii4uLy4uL2phdmEvbGFuZy9TdHJpbmcuaHRtbCIgdGl0bGU9ImNsYXNzIGluIGphdmEubGFuZyI+U3RyaW5nPC9hPiZuYnNwO3JlZ2V4LAorICAgICAgICAgICAgIGludCZuYnNwO2xpbWl0KTwvcHJlPgorICAgICAgICA8ZGl2IGNsYXNzPSJibG9jayI+U3BsaXRzIHRoaXMgc3RyaW5nIGFyb3VuZCBtYXRjaGVzIG9mIHRoZSBnaXZlbgorICAgICAgICAgICAgPGEgaHJlZj0iLi4vdXRpbC9yZWdleC9QYXR0ZXJuLmh0bWwjc3VtIj5yZWd1bGFyIGV4cHJlc3Npb248L2E+LgorCisgICAgICAgICAgICA8cD4gVGhlIGFycmF5IHJldHVybmVkIGJ5IHRoaXMgbWV0aG9kIGNvbnRhaW5zIGVhY2ggc3Vic3RyaW5nIG9mIHRoaXMKKyAgICAgICAgICAgICAgICBzdHJpbmcgdGhhdCBpcyB0ZXJtaW5hdGVkIGJ5IGFub3RoZXIgc3Vic3RyaW5nIHRoYXQgbWF0Y2hlcyB0aGUgZ2l2ZW4KKyAgICAgICAgICAgICAgICBleHByZXNzaW9uIG9yIGlzIHRlcm1pbmF0ZWQgYnkgdGhlIGVuZCBvZiB0aGUgc3RyaW5nLiAgVGhlIHN1YnN0cmluZ3MgaW4KKyAgICAgICAgICAgICAgICB0aGUgYXJyYXkgYXJlIGluIHRoZSBvcmRlciBpbiB3aGljaCB0aGV5IG9jY3VyIGluIHRoaXMgc3RyaW5nLiAgSWYgdGhlCisgICAgICAgICAgICAgICAgZXhwcmVzc2lvbiBkb2VzIG5vdCBtYXRjaCBhbnkgcGFydCBvZiB0aGUgaW5wdXQgdGhlbiB0aGUgcmVzdWx0aW5nIGFycmF5CisgICAgICAgICAgICAgICAgaGFzIGp1c3Qgb25lIGVsZW1lbnQsIG5hbWVseSB0aGlzIHN0cmluZy4KKworICAgICAgICAgICAgPHA+IFRoZSA8dHQ+bGltaXQ8L3R0PiBwYXJhbWV0ZXIgY29udHJvbHMgdGhlIG51bWJlciBvZiB0aW1lcyB0aGUKKyAgICAgICAgICAgICAgICBwYXR0ZXJuIGlzIGFwcGxpZWQgYW5kIHRoZXJlZm9yZSBhZmZlY3RzIHRoZSBsZW5ndGggb2YgdGhlIHJlc3VsdGluZworICAgICAgICAgICAgICAgIGFycmF5LiAgSWYgdGhlIGxpbWl0IDxpPm48L2k+IGlzIGdyZWF0ZXIgdGhhbiB6ZXJvIHRoZW4gdGhlIHBhdHRlcm4KKyAgICAgICAgICAgICAgICB3aWxsIGJlIGFwcGxpZWQgYXQgbW9zdCA8aT5uPC9pPiZuYnNwOy0mbmJzcDsxIHRpbWVzLCB0aGUgYXJyYXkncworICAgICAgICAgICAgICAgIGxlbmd0aCB3aWxsIGJlIG5vIGdyZWF0ZXIgdGhhbiA8aT5uPC9pPiwgYW5kIHRoZSBhcnJheSdzIGxhc3QgZW50cnkKKyAgICAgICAgICAgICAgICB3aWxsIGNvbnRhaW4gYWxsIGlucHV0IGJleW9uZCB0aGUgbGFzdCBtYXRjaGVkIGRlbGltaXRlci4gIElmIDxpPm48L2k+CisgICAgICAgICAgICAgICAgaXMgbm9uLXBvc2l0aXZlIHRoZW4gdGhlIHBhdHRlcm4gd2lsbCBiZSBhcHBsaWVkIGFzIG1hbnkgdGltZXMgYXMKKyAgICAgICAgICAgICAgICBwb3NzaWJsZSBhbmQgdGhlIGFycmF5IGNhbiBoYXZlIGFueSBsZW5ndGguICBJZiA8aT5uPC9pPiBpcyB6ZXJvIHRoZW4KKyAgICAgICAgICAgICAgICB0aGUgcGF0dGVybiB3aWxsIGJlIGFwcGxpZWQgYXMgbWFueSB0aW1lcyBhcyBwb3NzaWJsZSwgdGhlIGFycmF5IGNhbgorICAgICAgICAgICAgICAgIGhhdmUgYW55IGxlbmd0aCwgYW5kIHRyYWlsaW5nIGVtcHR5IHN0cmluZ3Mgd2lsbCBiZSBkaXNjYXJkZWQuCisKKyAgICAgICAgICAgIDxwPiBUaGUgc3RyaW5nIDx0dD4iYm9vOmFuZDpmb28iPC90dD4sIGZvciBleGFtcGxlLCB5aWVsZHMgdGhlCisgICAgICAgICAgICAgICAgZm9sbG93aW5nIHJlc3VsdHMgd2l0aCB0aGVzZSBwYXJhbWV0ZXJzOgorCisgICAgICAgICAgICA8YmxvY2txdW90ZT48dGFibGUgY2VsbHBhZGRpbmc9MSBjZWxsc3BhY2luZz0wIHN1bW1hcnk9IlNwbGl0IGV4YW1wbGUgc2hvd2luZyByZWdleCwgbGltaXQsIGFuZCByZXN1bHQiPgorICAgICAgICAgICAgICAgIDx0cj4KKyAgICAgICAgICAgICAgICAgICAgPHRoPlJlZ2V4PC90aD4KKyAgICAgICAgICAgICAgICAgICAgPHRoPkxpbWl0PC90aD4KKyAgICAgICAgICAgICAgICAgICAgPHRoPlJlc3VsdDwvdGg+CisgICAgICAgICAgICAgICAgPC90cj4KKyAgICAgICAgICAgICAgICA8dHI+PHRkIGFsaWduPWNlbnRlcj46PC90ZD4KKyAgICAgICAgICAgICAgICAgICAgPHRkIGFsaWduPWNlbnRlcj4yPC90ZD4KKyAgICAgICAgICAgICAgICAgICAgPHRkPjx0dD57ICJib28iLCAiYW5kOmZvbyIgfTwvdHQ+PC90ZD48L3RyPgorICAgICAgICAgICAgICAgIDx0cj48dGQgYWxpZ249Y2VudGVyPjo8L3RkPgorICAgICAgICAgICAgICAgICAgICA8dGQgYWxpZ249Y2VudGVyPjU8L3RkPgorICAgICAgICAgICAgICAgICAgICA8dGQ+PHR0PnsgImJvbyIsICJhbmQiLCAiZm9vIiB9PC90dD48L3RkPjwvdHI+CisgICAgICAgICAgICAgICAgPHRyPjx0ZCBhbGlnbj1jZW50ZXI+OjwvdGQ+CisgICAgICAgICAgICAgICAgICAgIDx0ZCBhbGlnbj1jZW50ZXI+LTI8L3RkPgorICAgICAgICAgICAgICAgICAgICA8dGQ+PHR0PnsgImJvbyIsICJhbmQiLCAiZm9vIiB9PC90dD48L3RkPjwvdHI+CisgICAgICAgICAgICAgICAgPHRyPjx0ZCBhbGlnbj1jZW50ZXI+bzwvdGQ+CisgICAgICAgICAgICAgICAgICAgIDx0ZCBhbGlnbj1jZW50ZXI+NTwvdGQ+CisgICAgICAgICAgICAgICAgICAgIDx0ZD48dHQ+eyAiYiIsICIiLCAiOmFuZDpmIiwgIiIsICIiIH08L3R0PjwvdGQ+PC90cj4KKyAgICAgICAgICAgICAgICA8dHI+PHRkIGFsaWduPWNlbnRlcj5vPC90ZD4KKyAgICAgICAgICAgICAgICAgICAgPHRkIGFsaWduPWNlbnRlcj4tMjwvdGQ+CisgICAgICAgICAgICAgICAgICAgIDx0ZD48dHQ+eyAiYiIsICIiLCAiOmFuZDpmIiwgIiIsICIiIH08L3R0PjwvdGQ+PC90cj4KKyAgICAgICAgICAgICAgICA8dHI+PHRkIGFsaWduPWNlbnRlcj5vPC90ZD4KKyAgICAgICAgICAgICAgICAgICAgPHRkIGFsaWduPWNlbnRlcj4wPC90ZD4KKyAgICAgICAgICAgICAgICAgICAgPHRkPjx0dD57ICJiIiwgIiIsICI6YW5kOmYiIH08L3R0PjwvdGQ+PC90cj4KKyAgICAgICAgICAgIDwvdGFibGU+PC9ibG9ja3F1b3RlPgorCisgICAgICAgICAgICA8cD4gQW4gaW52b2NhdGlvbiBvZiB0aGlzIG1ldGhvZCBvZiB0aGUgZm9ybQorICAgICAgICAgICAgICAgIDxpPnN0ci48L2k+PHR0PnNwbGl0KDwvdHQ+PGk+cmVnZXg8L2k+PHR0Piw8L3R0PiZuYnNwOzxpPm48L2k+PHR0Pik8L3R0PgorICAgICAgICAgICAgICAgIHlpZWxkcyB0aGUgc2FtZSByZXN1bHQgYXMgdGhlIGV4cHJlc3Npb24KKworICAgICAgICAgICAgPGJsb2NrcXVvdGU+CisgICAgICAgICAgICAgICAgPGEgaHJlZj0iLi4vLi4vamF2YS91dGlsL3JlZ2V4L1BhdHRlcm4uaHRtbCIgdGl0bGU9ImNsYXNzIGluIGphdmEudXRpbC5yZWdleCI+PGNvZGU+UGF0dGVybjwvY29kZT48L2E+LjxhIGhyZWY9Ii4uLy4uL2phdmEvdXRpbC9yZWdleC9QYXR0ZXJuLmh0bWwjY29tcGlsZShqYXZhLmxhbmcuU3RyaW5nKSI+PGNvZGU+Y29tcGlsZTwvY29kZT48L2E+PHR0Pig8L3R0PjxpPnJlZ2V4PC9pPjx0dD4pPC90dD4uPGEgaHJlZj0iLi4vLi4vamF2YS91dGlsL3JlZ2V4L1BhdHRlcm4uaHRtbCNzcGxpdChqYXZhLmxhbmcuQ2hhclNlcXVlbmNlLCBpbnQpIj48Y29kZT5zcGxpdDwvY29kZT48L2E+PHR0Pig8L3R0PjxpPnN0cjwvaT48dHQ+LDwvdHQ+Jm5ic3A7PGk+bjwvaT48dHQ+KTwvdHQ+CisgICAgICAgICAgICA8L2Jsb2NrcXVvdGU+PC9kaXY+CisgICAgICAgIDxkbD48ZHQ+PHNwYW4gY2xhc3M9InN0cm9uZyI+UGFyYW1ldGVyczo8L3NwYW4+PC9kdD48ZGQ+PGNvZGU+cmVnZXg8L2NvZGU+IC0gdGhlIGRlbGltaXRpbmcgcmVndWxhciBleHByZXNzaW9uPC9kZD48ZGQ+PGNvZGU+bGltaXQ8L2NvZGU+IC0gdGhlIHJlc3VsdCB0aHJlc2hvbGQsIGFzIGRlc2NyaWJlZCBhYm92ZTwvZGQ+CisgICAgICAgICAgICA8ZHQ+PHNwYW4gY2xhc3M9InN0cm9uZyI+UmV0dXJuczo8L3NwYW4+PC9kdD48ZGQ+dGhlIGFycmF5IG9mIHN0cmluZ3MgY29tcHV0ZWQgYnkgc3BsaXR0aW5nIHRoaXMgc3RyaW5nCisgICAgICAgICAgICAgICAgYXJvdW5kIG1hdGNoZXMgb2YgdGhlIGdpdmVuIHJlZ3VsYXIgZXhwcmVzc2lvbjwvZGQ+CisgICAgICAgICAgICA8ZHQ+PHNwYW4gY2xhc3M9InN0cm9uZyI+VGhyb3dzOjwvc3Bhbj48L2R0PgorICAgICAgICAgICAgPGRkPjxjb2RlPjxhIGhyZWY9Ii4uLy4uL2phdmEvdXRpbC9yZWdleC9QYXR0ZXJuU3ludGF4RXhjZXB0aW9uLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBqYXZhLnV0aWwucmVnZXgiPlBhdHRlcm5TeW50YXhFeGNlcHRpb248L2E+PC9jb2RlPiAtIGlmIHRoZSByZWd1bGFyIGV4cHJlc3Npb24ncyBzeW50YXggaXMgaW52YWxpZDwvZGQ+PGR0PjxzcGFuIGNsYXNzPSJzdHJvbmciPlNpbmNlOjwvc3Bhbj48L2R0PgorICAgICAgICAgICAgPGRkPjEuNDwvZGQ+CisgICAgICAgICAgICA8ZHQ+PHNwYW4gY2xhc3M9InN0cm9uZyI+U2VlIEFsc286PC9zcGFuPjwvZHQ+PGRkPjxhIGhyZWY9Ii4uLy4uL2phdmEvdXRpbC9yZWdleC9QYXR0ZXJuLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBqYXZhLnV0aWwucmVnZXgiPjxjb2RlPlBhdHRlcm48L2NvZGU+PC9hPjwvZGQ+PC9kbD4KKyAgICA8L2xpPgorPC91bD4KKzxhIG5hbWU9InNwbGl0KGphdmEubGFuZy5TdHJpbmcpIj4KKyAgICA8IS0tICAgLS0+Cis8L2E+Cis8dWwgY2xhc3M9ImJsb2NrTGlzdCI+CisgICAgPGxpIGNsYXNzPSJibG9ja0xpc3QiPgorICAgICAgICA8aDQ+c3BsaXQ8L2g0PgorICAgICAgICA8cHJlPnB1YmxpYyZuYnNwOzxhIGhyZWY9Ii4uLy4uL2phdmEvbGFuZy9TdHJpbmcuaHRtbCIgdGl0bGU9ImNsYXNzIGluIGphdmEubGFuZyI+U3RyaW5nPC9hPltdJm5ic3A7c3BsaXQoPGEgaHJlZj0iLi4vLi4vamF2YS9sYW5nL1N0cmluZy5odG1sIiB0aXRsZT0iY2xhc3MgaW4gamF2YS5sYW5nIj5TdHJpbmc8L2E+Jm5ic3A7cmVnZXgpPC9wcmU+CisgICAgICAgIDxkaXYgY2xhc3M9ImJsb2NrIj5TcGxpdHMgdGhpcyBzdHJpbmcgYXJvdW5kIG1hdGNoZXMgb2YgdGhlIGdpdmVuIDxhCisgICAgICAgICAgICAgICAgaHJlZj0iLi4vdXRpbC9yZWdleC9QYXR0ZXJuLmh0bWwjc3VtIj5yZWd1bGFyIGV4cHJlc3Npb248L2E+LgorCisgICAgICAgICAgICA8cD4gVGhpcyBtZXRob2Qgd29ya3MgYXMgaWYgYnkgaW52b2tpbmcgdGhlIHR3by1hcmd1bWVudCA8YSBocmVmPSIuLi8uLi9qYXZhL2xhbmcvU3RyaW5nLmh0bWwjc3BsaXQoamF2YS5sYW5nLlN0cmluZywgaW50KSI+PGNvZGU+c3BsaXQ8L2NvZGU+PC9hPiBtZXRob2Qgd2l0aCB0aGUgZ2l2ZW4gZXhwcmVzc2lvbiBhbmQgYSBsaW1pdAorICAgICAgICAgICAgICAgIGFyZ3VtZW50IG9mIHplcm8uICBUcmFpbGluZyBlbXB0eSBzdHJpbmdzIGFyZSB0aGVyZWZvcmUgbm90IGluY2x1ZGVkIGluCisgICAgICAgICAgICAgICAgdGhlIHJlc3VsdGluZyBhcnJheS4KKworICAgICAgICAgICAgPHA+IFRoZSBzdHJpbmcgPHR0PiJib286YW5kOmZvbyI8L3R0PiwgZm9yIGV4YW1wbGUsIHlpZWxkcyB0aGUgZm9sbG93aW5nCisgICAgICAgICAgICAgICAgcmVzdWx0cyB3aXRoIHRoZXNlIGV4cHJlc3Npb25zOgorCisgICAgICAgICAgICA8YmxvY2txdW90ZT48dGFibGUgY2VsbHBhZGRpbmc9MSBjZWxsc3BhY2luZz0wIHN1bW1hcnk9IlNwbGl0IGV4YW1wbGVzIHNob3dpbmcgcmVnZXggYW5kIHJlc3VsdCI+CisgICAgICAgICAgICAgICAgPHRyPgorICAgICAgICAgICAgICAgICAgICA8dGg+UmVnZXg8L3RoPgorICAgICAgICAgICAgICAgICAgICA8dGg+UmVzdWx0PC90aD4KKyAgICAgICAgICAgICAgICA8L3RyPgorICAgICAgICAgICAgICAgIDx0cj48dGQgYWxpZ249Y2VudGVyPjo8L3RkPgorICAgICAgICAgICAgICAgICAgICA8dGQ+PHR0PnsgImJvbyIsICJhbmQiLCAiZm9vIiB9PC90dD48L3RkPjwvdHI+CisgICAgICAgICAgICAgICAgPHRyPjx0ZCBhbGlnbj1jZW50ZXI+bzwvdGQ+CisgICAgICAgICAgICAgICAgICAgIDx0ZD48dHQ+eyAiYiIsICIiLCAiOmFuZDpmIiB9PC90dD48L3RkPjwvdHI+CisgICAgICAgICAgICA8L3RhYmxlPjwvYmxvY2txdW90ZT48L2Rpdj4KKyAgICAgICAgPGRsPjxkdD48c3BhbiBjbGFzcz0ic3Ryb25nIj5QYXJhbWV0ZXJzOjwvc3Bhbj48L2R0PjxkZD48Y29kZT5yZWdleDwvY29kZT4gLSB0aGUgZGVsaW1pdGluZyByZWd1bGFyIGV4cHJlc3Npb248L2RkPgorICAgICAgICAgICAgPGR0PjxzcGFuIGNsYXNzPSJzdHJvbmciPlJldHVybnM6PC9zcGFuPjwvZHQ+PGRkPnRoZSBhcnJheSBvZiBzdHJpbmdzIGNvbXB1dGVkIGJ5IHNwbGl0dGluZyB0aGlzIHN0cmluZworICAgICAgICAgICAgICAgIGFyb3VuZCBtYXRjaGVzIG9mIHRoZSBnaXZlbiByZWd1bGFyIGV4cHJlc3Npb248L2RkPgorICAgICAgICAgICAgPGR0PjxzcGFuIGNsYXNzPSJzdHJvbmciPlRocm93czo8L3NwYW4+PC9kdD4KKyAgICAgICAgICAgIDxkZD48Y29kZT48YSBocmVmPSIuLi8uLi9qYXZhL3V0aWwvcmVnZXgvUGF0dGVyblN5bnRheEV4Y2VwdGlvbi5odG1sIiB0aXRsZT0iY2xhc3MgaW4gamF2YS51dGlsLnJlZ2V4Ij5QYXR0ZXJuU3ludGF4RXhjZXB0aW9uPC9hPjwvY29kZT4gLSBpZiB0aGUgcmVndWxhciBleHByZXNzaW9uJ3Mgc3ludGF4IGlzIGludmFsaWQ8L2RkPjxkdD48c3BhbiBjbGFzcz0ic3Ryb25nIj5TaW5jZTo8L3NwYW4+PC9kdD4KKyAgICAgICAgICAgIDxkZD4xLjQ8L2RkPgorICAgICAgICAgICAgPGR0PjxzcGFuIGNsYXNzPSJzdHJvbmciPlNlZSBBbHNvOjwvc3Bhbj48L2R0PjxkZD48YSBocmVmPSIuLi8uLi9qYXZhL3V0aWwvcmVnZXgvUGF0dGVybi5odG1sIiB0aXRsZT0iY2xhc3MgaW4gamF2YS51dGlsLnJlZ2V4Ij48Y29kZT5QYXR0ZXJuPC9jb2RlPjwvYT48L2RkPjwvZGw+CisgICAgPC9saT4KKzwvdWw+Cis8YSBuYW1lPSJ0b0xvd2VyQ2FzZShqYXZhLnV0aWwuTG9jYWxlKSI+CisgICAgPCEtLSAgIC0tPgorPC9hPgorPHVsIGNsYXNzPSJibG9ja0xpc3QiPgorICAgIDxsaSBjbGFzcz0iYmxvY2tMaXN0Ij4KKyAgICAgICAgPGg0PnRvTG93ZXJDYXNlPC9oND4KKyAgICAgICAgPHByZT5wdWJsaWMmbmJzcDs8YSBocmVmPSIuLi8uLi9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBqYXZhLmxhbmciPlN0cmluZzwvYT4mbmJzcDt0b0xvd2VyQ2FzZSg8YSBocmVmPSIuLi8uLi9qYXZhL3V0aWwvTG9jYWxlLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBqYXZhLnV0aWwiPkxvY2FsZTwvYT4mbmJzcDtsb2NhbGUpPC9wcmU+CisgICAgICAgIDxkaXYgY2xhc3M9ImJsb2NrIj5Db252ZXJ0cyBhbGwgb2YgdGhlIGNoYXJhY3RlcnMgaW4gdGhpcyA8Y29kZT5TdHJpbmc8L2NvZGU+IHRvIGxvd2VyCisgICAgICAgICAgICBjYXNlIHVzaW5nIHRoZSBydWxlcyBvZiB0aGUgZ2l2ZW4gPGNvZGU+TG9jYWxlPC9jb2RlPi4gIENhc2UgbWFwcGluZyBpcyBiYXNlZAorICAgICAgICAgICAgb24gdGhlIFVuaWNvZGUgU3RhbmRhcmQgdmVyc2lvbiBzcGVjaWZpZWQgYnkgdGhlIDxhIGhyZWY9Ii4uLy4uL2phdmEvbGFuZy9DaGFyYWN0ZXIuaHRtbCIgdGl0bGU9ImNsYXNzIGluIGphdmEubGFuZyI+PGNvZGU+Q2hhcmFjdGVyPC9jb2RlPjwvYT4KKyAgICAgICAgICAgIGNsYXNzLiBTaW5jZSBjYXNlIG1hcHBpbmdzIGFyZSBub3QgYWx3YXlzIDE6MSBjaGFyIG1hcHBpbmdzLCB0aGUgcmVzdWx0aW5nCisgICAgICAgICAgICA8Y29kZT5TdHJpbmc8L2NvZGU+IG1heSBiZSBhIGRpZmZlcmVudCBsZW5ndGggdGhhbiB0aGUgb3JpZ2luYWwgPGNvZGU+U3RyaW5nPC9jb2RlPi4KKyAgICAgICAgICAgIDxwPgorICAgICAgICAgICAgICAgIEV4YW1wbGVzIG9mIGxvd2VyY2FzZSAgbWFwcGluZ3MgYXJlIGluIHRoZSBmb2xsb3dpbmcgdGFibGU6CisgICAgICAgICAgICA8dGFibGUgYm9yZGVyPSIxIiBzdW1tYXJ5PSJMb3dlcmNhc2UgbWFwcGluZyBleGFtcGxlcyBzaG93aW5nIGxhbmd1YWdlIGNvZGUgb2YgbG9jYWxlLCB1cHBlciBjYXNlLCBsb3dlciBjYXNlLCBhbmQgZGVzY3JpcHRpb24iPgorICAgICAgICAgICAgICAgIDx0cj4KKyAgICAgICAgICAgICAgICAgICAgPHRoPkxhbmd1YWdlIENvZGUgb2YgTG9jYWxlPC90aD4KKyAgICAgICAgICAgICAgICAgICAgPHRoPlVwcGVyIENhc2U8L3RoPgorICAgICAgICAgICAgICAgICAgICA8dGg+TG93ZXIgQ2FzZTwvdGg+CisgICAgICAgICAgICAgICAgICAgIDx0aD5EZXNjcmlwdGlvbjwvdGg+CisgICAgICAgICAgICAgICAgPC90cj4KKyAgICAgICAgICAgICAgICA8dHI+CisgICAgICAgICAgICAgICAgICAgIDx0ZD50ciAoVHVya2lzaCk8L3RkPgorICAgICAgICAgICAgICAgICAgICA8dGQ+JiM5Mjt1MDEzMDwvdGQ+CisgICAgICAgICAgICAgICAgICAgIDx0ZD4mIzkyO3UwMDY5PC90ZD4KKyAgICAgICAgICAgICAgICAgICAgPHRkPmNhcGl0YWwgbGV0dGVyIEkgd2l0aCBkb3QgYWJvdmUgLSZndDsgc21hbGwgbGV0dGVyIGk8L3RkPgorICAgICAgICAgICAgICAgIDwvdHI+CisgICAgICAgICAgICAgICAgPHRyPgorICAgICAgICAgICAgICAgICAgICA8dGQ+dHIgKFR1cmtpc2gpPC90ZD4KKyAgICAgICAgICAgICAgICAgICAgPHRkPiYjOTI7dTAwNDk8L3RkPgorICAgICAgICAgICAgICAgICAgICA8dGQ+JiM5Mjt1MDEzMTwvdGQ+CisgICAgICAgICAgICAgICAgICAgIDx0ZD5jYXBpdGFsIGxldHRlciBJIC0mZ3Q7IHNtYWxsIGxldHRlciBkb3RsZXNzIGkgPC90ZD4KKyAgICAgICAgICAgICAgICA8L3RyPgorICAgICAgICAgICAgICAgIDx0cj4KKyAgICAgICAgICAgICAgICAgICAgPHRkPihhbGwpPC90ZD4KKyAgICAgICAgICAgICAgICAgICAgPHRkPkZyZW5jaCBGcmllczwvdGQ+CisgICAgICAgICAgICAgICAgICAgIDx0ZD5mcmVuY2ggZnJpZXM8L3RkPgorICAgICAgICAgICAgICAgICAgICA8dGQ+bG93ZXJjYXNlZCBhbGwgY2hhcnMgaW4gU3RyaW5nPC90ZD4KKyAgICAgICAgICAgICAgICA8L3RyPgorICAgICAgICAgICAgICAgIDx0cj4KKyAgICAgICAgICAgICAgICAgICAgPHRkPihhbGwpPC90ZD4KKyAgICAgICAgICAgICAgICAgICAgPHRkPjxpbWcgc3JjPSJkb2MtZmlsZXMvY2FwaW90YS5naWYiIGFsdD0iY2FwaW90YSI+PGltZyBzcmM9ImRvYy1maWxlcy9jYXBjaGkuZ2lmIiBhbHQ9ImNhcGNoaSI+CisgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iZG9jLWZpbGVzL2NhcHRoZXRhLmdpZiIgYWx0PSJjYXB0aGV0YSI+PGltZyBzcmM9ImRvYy1maWxlcy9jYXB1cHNpbC5naWYiIGFsdD0iY2FwdXBzaWwiPgorICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImRvYy1maWxlcy9jYXBzaWdtYS5naWYiIGFsdD0iY2Fwc2lnbWEiPjwvdGQ+CisgICAgICAgICAgICAgICAgICAgIDx0ZD48aW1nIHNyYz0iZG9jLWZpbGVzL2lvdGEuZ2lmIiBhbHQ9ImlvdGEiPjxpbWcgc3JjPSJkb2MtZmlsZXMvY2hpLmdpZiIgYWx0PSJjaGkiPgorICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImRvYy1maWxlcy90aGV0YS5naWYiIGFsdD0idGhldGEiPjxpbWcgc3JjPSJkb2MtZmlsZXMvdXBzaWxvbi5naWYiIGFsdD0idXBzaWxvbiI+CisgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iZG9jLWZpbGVzL3NpZ21hMS5naWYiIGFsdD0ic2lnbWEiPjwvdGQ+CisgICAgICAgICAgICAgICAgICAgIDx0ZD5sb3dlcmNhc2VkIGFsbCBjaGFycyBpbiBTdHJpbmc8L3RkPgorICAgICAgICAgICAgICAgIDwvdHI+CisgICAgICAgICAgICA8L3RhYmxlPjwvZGl2PgorICAgICAgICA8ZGw+PGR0PjxzcGFuIGNsYXNzPSJzdHJvbmciPlBhcmFtZXRlcnM6PC9zcGFuPjwvZHQ+PGRkPjxjb2RlPmxvY2FsZTwvY29kZT4gLSB1c2UgdGhlIGNhc2UgdHJhbnNmb3JtYXRpb24gcnVsZXMgZm9yIHRoaXMgbG9jYWxlPC9kZD4KKyAgICAgICAgICAgIDxkdD48c3BhbiBjbGFzcz0ic3Ryb25nIj5SZXR1cm5zOjwvc3Bhbj48L2R0PjxkZD50aGUgPGNvZGU+U3RyaW5nPC9jb2RlPiwgY29udmVydGVkIHRvIGxvd2VyY2FzZS48L2RkPjxkdD48c3BhbiBjbGFzcz0ic3Ryb25nIj5TaW5jZTo8L3NwYW4+PC9kdD4KKyAgICAgICAgICAgIDxkZD4xLjE8L2RkPgorICAgICAgICAgICAgPGR0PjxzcGFuIGNsYXNzPSJzdHJvbmciPlNlZSBBbHNvOjwvc3Bhbj48L2R0PjxkZD48YSBocmVmPSIuLi8uLi9qYXZhL2xhbmcvU3RyaW5nLmh0bWwjdG9Mb3dlckNhc2UoKSI+PGNvZGU+dG9Mb3dlckNhc2UoKTwvY29kZT48L2E+LAorICAgICAgICAgICAgICAgIDxhIGhyZWY9Ii4uLy4uL2phdmEvbGFuZy9TdHJpbmcuaHRtbCN0b1VwcGVyQ2FzZSgpIj48Y29kZT50b1VwcGVyQ2FzZSgpPC9jb2RlPjwvYT4sCisgICAgICAgICAgICAgICAgPGEgaHJlZj0iLi4vLi4vamF2YS9sYW5nL1N0cmluZy5odG1sI3RvVXBwZXJDYXNlKGphdmEudXRpbC5Mb2NhbGUpIj48Y29kZT50b1VwcGVyQ2FzZShMb2NhbGUpPC9jb2RlPjwvYT48L2RkPjwvZGw+CisgICAgPC9saT4KKzwvdWw+Cis8YSBuYW1lPSJ0b0xvd2VyQ2FzZSgpIj4KKyAgICA8IS0tICAgLS0+Cis8L2E+Cis8dWwgY2xhc3M9ImJsb2NrTGlzdCI+CisgICAgPGxpIGNsYXNzPSJibG9ja0xpc3QiPgorICAgICAgICA8aDQ+dG9Mb3dlckNhc2U8L2g0PgorICAgICAgICA8cHJlPnB1YmxpYyZuYnNwOzxhIGhyZWY9Ii4uLy4uL2phdmEvbGFuZy9TdHJpbmcuaHRtbCIgdGl0bGU9ImNsYXNzIGluIGphdmEubGFuZyI+U3RyaW5nPC9hPiZuYnNwO3RvTG93ZXJDYXNlKCk8L3ByZT4KKyAgICAgICAgPGRpdiBjbGFzcz0iYmxvY2siPkNvbnZlcnRzIGFsbCBvZiB0aGUgY2hhcmFjdGVycyBpbiB0aGlzIDxjb2RlPlN0cmluZzwvY29kZT4gdG8gbG93ZXIKKyAgICAgICAgICAgIGNhc2UgdXNpbmcgdGhlIHJ1bGVzIG9mIHRoZSBkZWZhdWx0IGxvY2FsZS4gVGhpcyBpcyBlcXVpdmFsZW50IHRvIGNhbGxpbmcKKyAgICAgICAgICAgIDxjb2RlPnRvTG93ZXJDYXNlKExvY2FsZS5nZXREZWZhdWx0KCkpPC9jb2RlPi4KKyAgICAgICAgICAgIDxwPgorICAgICAgICAgICAgICAgIDxiPk5vdGU6PC9iPiBUaGlzIG1ldGhvZCBpcyBsb2NhbGUgc2Vuc2l0aXZlLCBhbmQgbWF5IHByb2R1Y2UgdW5leHBlY3RlZAorICAgICAgICAgICAgICAgIHJlc3VsdHMgaWYgdXNlZCBmb3Igc3RyaW5ncyB0aGF0IGFyZSBpbnRlbmRlZCB0byBiZSBpbnRlcnByZXRlZCBsb2NhbGUKKyAgICAgICAgICAgICAgICBpbmRlcGVuZGVudGx5LgorICAgICAgICAgICAgICAgIEV4YW1wbGVzIGFyZSBwcm9ncmFtbWluZyBsYW5ndWFnZSBpZGVudGlmaWVycywgcHJvdG9jb2wga2V5cywgYW5kIEhUTUwKKyAgICAgICAgICAgICAgICB0YWdzLgorICAgICAgICAgICAgICAgIEZvciBpbnN0YW5jZSwgPGNvZGU+IlRJVExFIi50b0xvd2VyQ2FzZSgpPC9jb2RlPiBpbiBhIFR1cmtpc2ggbG9jYWxlCisgICAgICAgICAgICAgICAgcmV0dXJucyA8Y29kZT4idFx1MDEzMXRsZSI8L2NvZGU+LCB3aGVyZSAnXHUwMTMxJyBpcyB0aGUKKyAgICAgICAgICAgICAgICBMQVRJTiBTTUFMTCBMRVRURVIgRE9UTEVTUyBJIGNoYXJhY3Rlci4KKyAgICAgICAgICAgICAgICBUbyBvYnRhaW4gY29ycmVjdCByZXN1bHRzIGZvciBsb2NhbGUgaW5zZW5zaXRpdmUgc3RyaW5ncywgdXNlCisgICAgICAgICAgICAgICAgPGNvZGU+dG9Mb3dlckNhc2UoTG9jYWxlLkVOR0xJU0gpPC9jb2RlPi4KKyAgICAgICAgICAgIDxwPjwvZGl2PgorICAgICAgICA8ZGw+PGR0PjxzcGFuIGNsYXNzPSJzdHJvbmciPlJldHVybnM6PC9zcGFuPjwvZHQ+PGRkPnRoZSA8Y29kZT5TdHJpbmc8L2NvZGU+LCBjb252ZXJ0ZWQgdG8gbG93ZXJjYXNlLjwvZGQ+PGR0PjxzcGFuIGNsYXNzPSJzdHJvbmciPlNlZSBBbHNvOjwvc3Bhbj48L2R0PjxkZD48YSBocmVmPSIuLi8uLi9qYXZhL2xhbmcvU3RyaW5nLmh0bWwjdG9Mb3dlckNhc2UoamF2YS51dGlsLkxvY2FsZSkiPjxjb2RlPnRvTG93ZXJDYXNlKExvY2FsZSk8L2NvZGU+PC9hPjwvZGQ+PC9kbD4KKyAgICA8L2xpPgorPC91bD4KKzxhIG5hbWU9InRvVXBwZXJDYXNlKGphdmEudXRpbC5Mb2NhbGUpIj4KKyAgICA8IS0tICAgLS0+Cis8L2E+Cis8dWwgY2xhc3M9ImJsb2NrTGlzdCI+CisgICAgPGxpIGNsYXNzPSJibG9ja0xpc3QiPgorICAgICAgICA8aDQ+dG9VcHBlckNhc2U8L2g0PgorICAgICAgICA8cHJlPnB1YmxpYyZuYnNwOzxhIGhyZWY9Ii4uLy4uL2phdmEvbGFuZy9TdHJpbmcuaHRtbCIgdGl0bGU9ImNsYXNzIGluIGphdmEubGFuZyI+U3RyaW5nPC9hPiZuYnNwO3RvVXBwZXJDYXNlKDxhIGhyZWY9Ii4uLy4uL2phdmEvdXRpbC9Mb2NhbGUuaHRtbCIgdGl0bGU9ImNsYXNzIGluIGphdmEudXRpbCI+TG9jYWxlPC9hPiZuYnNwO2xvY2FsZSk8L3ByZT4KKyAgICAgICAgPGRpdiBjbGFzcz0iYmxvY2siPkNvbnZlcnRzIGFsbCBvZiB0aGUgY2hhcmFjdGVycyBpbiB0aGlzIDxjb2RlPlN0cmluZzwvY29kZT4gdG8gdXBwZXIKKyAgICAgICAgICAgIGNhc2UgdXNpbmcgdGhlIHJ1bGVzIG9mIHRoZSBnaXZlbiA8Y29kZT5Mb2NhbGU8L2NvZGU+LiBDYXNlIG1hcHBpbmcgaXMgYmFzZWQKKyAgICAgICAgICAgIG9uIHRoZSBVbmljb2RlIFN0YW5kYXJkIHZlcnNpb24gc3BlY2lmaWVkIGJ5IHRoZSA8YSBocmVmPSIuLi8uLi9qYXZhL2xhbmcvQ2hhcmFjdGVyLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBqYXZhLmxhbmciPjxjb2RlPkNoYXJhY3RlcjwvY29kZT48L2E+CisgICAgICAgICAgICBjbGFzcy4gU2luY2UgY2FzZSBtYXBwaW5ncyBhcmUgbm90IGFsd2F5cyAxOjEgY2hhciBtYXBwaW5ncywgdGhlIHJlc3VsdGluZworICAgICAgICAgICAgPGNvZGU+U3RyaW5nPC9jb2RlPiBtYXkgYmUgYSBkaWZmZXJlbnQgbGVuZ3RoIHRoYW4gdGhlIG9yaWdpbmFsIDxjb2RlPlN0cmluZzwvY29kZT4uCisgICAgICAgICAgICA8cD4KKyAgICAgICAgICAgICAgICBFeGFtcGxlcyBvZiBsb2NhbGUtc2Vuc2l0aXZlIGFuZCAxOk0gY2FzZSBtYXBwaW5ncyBhcmUgaW4gdGhlIGZvbGxvd2luZyB0YWJsZS4KKyAgICAgICAgICAgIDxwPgorICAgICAgICAgICAgPHRhYmxlIGJvcmRlcj0iMSIgc3VtbWFyeT0iRXhhbXBsZXMgb2YgbG9jYWxlLXNlbnNpdGl2ZSBhbmQgMTpNIGNhc2UgbWFwcGluZ3MuIFNob3dzIExhbmd1YWdlIGNvZGUgb2YgbG9jYWxlLCBsb3dlciBjYXNlLCB1cHBlciBjYXNlLCBhbmQgZGVzY3JpcHRpb24uIj4KKyAgICAgICAgICAgICAgICA8dHI+CisgICAgICAgICAgICAgICAgICAgIDx0aD5MYW5ndWFnZSBDb2RlIG9mIExvY2FsZTwvdGg+CisgICAgICAgICAgICAgICAgICAgIDx0aD5Mb3dlciBDYXNlPC90aD4KKyAgICAgICAgICAgICAgICAgICAgPHRoPlVwcGVyIENhc2U8L3RoPgorICAgICAgICAgICAgICAgICAgICA8dGg+RGVzY3JpcHRpb248L3RoPgorICAgICAgICAgICAgICAgIDwvdHI+CisgICAgICAgICAgICAgICAgPHRyPgorICAgICAgICAgICAgICAgICAgICA8dGQ+dHIgKFR1cmtpc2gpPC90ZD4KKyAgICAgICAgICAgICAgICAgICAgPHRkPiYjOTI7dTAwNjk8L3RkPgorICAgICAgICAgICAgICAgICAgICA8dGQ+JiM5Mjt1MDEzMDwvdGQ+CisgICAgICAgICAgICAgICAgICAgIDx0ZD5zbWFsbCBsZXR0ZXIgaSAtJmd0OyBjYXBpdGFsIGxldHRlciBJIHdpdGggZG90IGFib3ZlPC90ZD4KKyAgICAgICAgICAgICAgICA8L3RyPgorICAgICAgICAgICAgICAgIDx0cj4KKyAgICAgICAgICAgICAgICAgICAgPHRkPnRyIChUdXJraXNoKTwvdGQ+CisgICAgICAgICAgICAgICAgICAgIDx0ZD4mIzkyO3UwMTMxPC90ZD4KKyAgICAgICAgICAgICAgICAgICAgPHRkPiYjOTI7dTAwNDk8L3RkPgorICAgICAgICAgICAgICAgICAgICA8dGQ+c21hbGwgbGV0dGVyIGRvdGxlc3MgaSAtJmd0OyBjYXBpdGFsIGxldHRlciBJPC90ZD4KKyAgICAgICAgICAgICAgICA8L3RyPgorICAgICAgICAgICAgICAgIDx0cj4KKyAgICAgICAgICAgICAgICAgICAgPHRkPihhbGwpPC90ZD4KKyAgICAgICAgICAgICAgICAgICAgPHRkPiYjOTI7dTAwZGY8L3RkPgorICAgICAgICAgICAgICAgICAgICA8dGQ+JiM5Mjt1MDA1MyAmIzkyO3UwMDUzPC90ZD4KKyAgICAgICAgICAgICAgICAgICAgPHRkPnNtYWxsIGxldHRlciBzaGFycCBzIC0mZ3Q7IHR3byBsZXR0ZXJzOiBTUzwvdGQ+CisgICAgICAgICAgICAgICAgPC90cj4KKyAgICAgICAgICAgICAgICA8dHI+CisgICAgICAgICAgICAgICAgICAgIDx0ZD4oYWxsKTwvdGQ+CisgICAgICAgICAgICAgICAgICAgIDx0ZD5GYWhydmVyZ24mdXVtbDtnZW48L3RkPgorICAgICAgICAgICAgICAgICAgICA8dGQ+RkFIUlZFUkdOJlV1bWw7R0VOPC90ZD4KKyAgICAgICAgICAgICAgICAgICAgPHRkPjwvdGQ+CisgICAgICAgICAgICAgICAgPC90cj4KKyAgICAgICAgICAgIDwvdGFibGU+PC9kaXY+CisgICAgICAgIDxkbD48ZHQ+PHNwYW4gY2xhc3M9InN0cm9uZyI+UGFyYW1ldGVyczo8L3NwYW4+PC9kdD48ZGQ+PGNvZGU+bG9jYWxlPC9jb2RlPiAtIHVzZSB0aGUgY2FzZSB0cmFuc2Zvcm1hdGlvbiBydWxlcyBmb3IgdGhpcyBsb2NhbGU8L2RkPgorICAgICAgICAgICAgPGR0PjxzcGFuIGNsYXNzPSJzdHJvbmciPlJldHVybnM6PC9zcGFuPjwvZHQ+PGRkPnRoZSA8Y29kZT5TdHJpbmc8L2NvZGU+LCBjb252ZXJ0ZWQgdG8gdXBwZXJjYXNlLjwvZGQ+PGR0PjxzcGFuIGNsYXNzPSJzdHJvbmciPlNpbmNlOjwvc3Bhbj48L2R0PgorICAgICAgICAgICAgPGRkPjEuMTwvZGQ+CisgICAgICAgICAgICA8ZHQ+PHNwYW4gY2xhc3M9InN0cm9uZyI+U2VlIEFsc286PC9zcGFuPjwvZHQ+PGRkPjxhIGhyZWY9Ii4uLy4uL2phdmEvbGFuZy9TdHJpbmcuaHRtbCN0b1VwcGVyQ2FzZSgpIj48Y29kZT50b1VwcGVyQ2FzZSgpPC9jb2RlPjwvYT4sCisgICAgICAgICAgICAgICAgPGEgaHJlZj0iLi4vLi4vamF2YS9sYW5nL1N0cmluZy5odG1sI3RvTG93ZXJDYXNlKCkiPjxjb2RlPnRvTG93ZXJDYXNlKCk8L2NvZGU+PC9hPiwKKyAgICAgICAgICAgICAgICA8YSBocmVmPSIuLi8uLi9qYXZhL2xhbmcvU3RyaW5nLmh0bWwjdG9Mb3dlckNhc2UoamF2YS51dGlsLkxvY2FsZSkiPjxjb2RlPnRvTG93ZXJDYXNlKExvY2FsZSk8L2NvZGU+PC9hPjwvZGQ+PC9kbD4KKyAgICA8L2xpPgorPC91bD4KKzxhIG5hbWU9InRvVXBwZXJDYXNlKCkiPgorICAgIDwhLS0gICAtLT4KKzwvYT4KKzx1bCBjbGFzcz0iYmxvY2tMaXN0Ij4KKyAgICA8bGkgY2xhc3M9ImJsb2NrTGlzdCI+CisgICAgICAgIDxoND50b1VwcGVyQ2FzZTwvaDQ+CisgICAgICAgIDxwcmU+cHVibGljJm5ic3A7PGEgaHJlZj0iLi4vLi4vamF2YS9sYW5nL1N0cmluZy5odG1sIiB0aXRsZT0iY2xhc3MgaW4gamF2YS5sYW5nIj5TdHJpbmc8L2E+Jm5ic3A7dG9VcHBlckNhc2UoKTwvcHJlPgorICAgICAgICA8ZGl2IGNsYXNzPSJibG9jayI+Q29udmVydHMgYWxsIG9mIHRoZSBjaGFyYWN0ZXJzIGluIHRoaXMgPGNvZGU+U3RyaW5nPC9jb2RlPiB0byB1cHBlcgorICAgICAgICAgICAgY2FzZSB1c2luZyB0aGUgcnVsZXMgb2YgdGhlIGRlZmF1bHQgbG9jYWxlLiBUaGlzIG1ldGhvZCBpcyBlcXVpdmFsZW50IHRvCisgICAgICAgICAgICA8Y29kZT50b1VwcGVyQ2FzZShMb2NhbGUuZ2V0RGVmYXVsdCgpKTwvY29kZT4uCisgICAgICAgICAgICA8cD4KKyAgICAgICAgICAgICAgICA8Yj5Ob3RlOjwvYj4gVGhpcyBtZXRob2QgaXMgbG9jYWxlIHNlbnNpdGl2ZSwgYW5kIG1heSBwcm9kdWNlIHVuZXhwZWN0ZWQKKyAgICAgICAgICAgICAgICByZXN1bHRzIGlmIHVzZWQgZm9yIHN0cmluZ3MgdGhhdCBhcmUgaW50ZW5kZWQgdG8gYmUgaW50ZXJwcmV0ZWQgbG9jYWxlCisgICAgICAgICAgICAgICAgaW5kZXBlbmRlbnRseS4KKyAgICAgICAgICAgICAgICBFeGFtcGxlcyBhcmUgcHJvZ3JhbW1pbmcgbGFuZ3VhZ2UgaWRlbnRpZmllcnMsIHByb3RvY29sIGtleXMsIGFuZCBIVE1MCisgICAgICAgICAgICAgICAgdGFncy4KKyAgICAgICAgICAgICAgICBGb3IgaW5zdGFuY2UsIDxjb2RlPiJ0aXRsZSIudG9VcHBlckNhc2UoKTwvY29kZT4gaW4gYSBUdXJraXNoIGxvY2FsZQorICAgICAgICAgICAgICAgIHJldHVybnMgPGNvZGU+IlRcdTAxMzBUTEUiPC9jb2RlPiwgd2hlcmUgJ1x1MDEzMCcgaXMgdGhlCisgICAgICAgICAgICAgICAgTEFUSU4gQ0FQSVRBTCBMRVRURVIgSSBXSVRIIERPVCBBQk9WRSBjaGFyYWN0ZXIuCisgICAgICAgICAgICAgICAgVG8gb2J0YWluIGNvcnJlY3QgcmVzdWx0cyBmb3IgbG9jYWxlIGluc2Vuc2l0aXZlIHN0cmluZ3MsIHVzZQorICAgICAgICAgICAgICAgIDxjb2RlPnRvVXBwZXJDYXNlKExvY2FsZS5FTkdMSVNIKTwvY29kZT4uCisgICAgICAgICAgICA8cD48L2Rpdj4KKyAgICAgICAgPGRsPjxkdD48c3BhbiBjbGFzcz0ic3Ryb25nIj5SZXR1cm5zOjwvc3Bhbj48L2R0PjxkZD50aGUgPGNvZGU+U3RyaW5nPC9jb2RlPiwgY29udmVydGVkIHRvIHVwcGVyY2FzZS48L2RkPjxkdD48c3BhbiBjbGFzcz0ic3Ryb25nIj5TZWUgQWxzbzo8L3NwYW4+PC9kdD48ZGQ+PGEgaHJlZj0iLi4vLi4vamF2YS9sYW5nL1N0cmluZy5odG1sI3RvVXBwZXJDYXNlKGphdmEudXRpbC5Mb2NhbGUpIj48Y29kZT50b1VwcGVyQ2FzZShMb2NhbGUpPC9jb2RlPjwvYT48L2RkPjwvZGw+CisgICAgPC9saT4KKzwvdWw+Cis8YSBuYW1lPSJ0cmltKCkiPgorICAgIDwhLS0gICAtLT4KKzwvYT4KKzx1bCBjbGFzcz0iYmxvY2tMaXN0Ij4KKyAgICA8bGkgY2xhc3M9ImJsb2NrTGlzdCI+CisgICAgICAgIDxoND50cmltPC9oND4KKyAgICAgICAgPHByZT5wdWJsaWMmbmJzcDs8YSBocmVmPSIuLi8uLi9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBqYXZhLmxhbmciPlN0cmluZzwvYT4mbmJzcDt0cmltKCk8L3ByZT4KKyAgICAgICAgPGRpdiBjbGFzcz0iYmxvY2siPlJldHVybnMgYSBjb3B5IG9mIHRoZSBzdHJpbmcsIHdpdGggbGVhZGluZyBhbmQgdHJhaWxpbmcgd2hpdGVzcGFjZQorICAgICAgICAgICAgb21pdHRlZC4KKyAgICAgICAgICAgIDxwPgorICAgICAgICAgICAgICAgIElmIHRoaXMgPGNvZGU+U3RyaW5nPC9jb2RlPiBvYmplY3QgcmVwcmVzZW50cyBhbiBlbXB0eSBjaGFyYWN0ZXIKKyAgICAgICAgICAgICAgICBzZXF1ZW5jZSwgb3IgdGhlIGZpcnN0IGFuZCBsYXN0IGNoYXJhY3RlcnMgb2YgY2hhcmFjdGVyIHNlcXVlbmNlCisgICAgICAgICAgICAgICAgcmVwcmVzZW50ZWQgYnkgdGhpcyA8Y29kZT5TdHJpbmc8L2NvZGU+IG9iamVjdCBib3RoIGhhdmUgY29kZXMKKyAgICAgICAgICAgICAgICBncmVhdGVyIHRoYW4gPGNvZGU+JyYjOTI7dTAwMjAnPC9jb2RlPiAodGhlIHNwYWNlIGNoYXJhY3RlciksIHRoZW4gYQorICAgICAgICAgICAgICAgIHJlZmVyZW5jZSB0byB0aGlzIDxjb2RlPlN0cmluZzwvY29kZT4gb2JqZWN0IGlzIHJldHVybmVkLgorICAgICAgICAgICAgPHA+CisgICAgICAgICAgICAgICAgT3RoZXJ3aXNlLCBpZiB0aGVyZSBpcyBubyBjaGFyYWN0ZXIgd2l0aCBhIGNvZGUgZ3JlYXRlciB0aGFuCisgICAgICAgICAgICAgICAgPGNvZGU+JyYjOTI7dTAwMjAnPC9jb2RlPiBpbiB0aGUgc3RyaW5nLCB0aGVuIGEgbmV3CisgICAgICAgICAgICAgICAgPGNvZGU+U3RyaW5nPC9jb2RlPiBvYmplY3QgcmVwcmVzZW50aW5nIGFuIGVtcHR5IHN0cmluZyBpcyBjcmVhdGVkCisgICAgICAgICAgICAgICAgYW5kIHJldHVybmVkLgorICAgICAgICAgICAgPHA+CisgICAgICAgICAgICAgICAgT3RoZXJ3aXNlLCBsZXQgPGk+azwvaT4gYmUgdGhlIGluZGV4IG9mIHRoZSBmaXJzdCBjaGFyYWN0ZXIgaW4gdGhlCisgICAgICAgICAgICAgICAgc3RyaW5nIHdob3NlIGNvZGUgaXMgZ3JlYXRlciB0aGFuIDxjb2RlPicmIzkyO3UwMDIwJzwvY29kZT4sIGFuZCBsZXQKKyAgICAgICAgICAgICAgICA8aT5tPC9pPiBiZSB0aGUgaW5kZXggb2YgdGhlIGxhc3QgY2hhcmFjdGVyIGluIHRoZSBzdHJpbmcgd2hvc2UgY29kZQorICAgICAgICAgICAgICAgIGlzIGdyZWF0ZXIgdGhhbiA8Y29kZT4nJiM5Mjt1MDAyMCc8L2NvZGU+LiBBIG5ldyA8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICAgICAgICAgICAgb2JqZWN0IGlzIGNyZWF0ZWQsIHJlcHJlc2VudGluZyB0aGUgc3Vic3RyaW5nIG9mIHRoaXMgc3RyaW5nIHRoYXQKKyAgICAgICAgICAgICAgICBiZWdpbnMgd2l0aCB0aGUgY2hhcmFjdGVyIGF0IGluZGV4IDxpPms8L2k+IGFuZCBlbmRzIHdpdGggdGhlCisgICAgICAgICAgICAgICAgY2hhcmFjdGVyIGF0IGluZGV4IDxpPm08L2k+LXRoYXQgaXMsIHRoZSByZXN1bHQgb2YKKyAgICAgICAgICAgICAgICA8Y29kZT50aGlzLnN1YnN0cmluZyg8aT5rPC9pPiwmbmJzcDs8aT5tPC9pPisxKTwvY29kZT4uCisgICAgICAgICAgICA8cD4KKyAgICAgICAgICAgICAgICBUaGlzIG1ldGhvZCBtYXkgYmUgdXNlZCB0byB0cmltIHdoaXRlc3BhY2UgKGFzIGRlZmluZWQgYWJvdmUpIGZyb20KKyAgICAgICAgICAgICAgICB0aGUgYmVnaW5uaW5nIGFuZCBlbmQgb2YgYSBzdHJpbmcuPC9kaXY+CisgICAgICAgIDxkbD48ZHQ+PHNwYW4gY2xhc3M9InN0cm9uZyI+UmV0dXJuczo8L3NwYW4+PC9kdD48ZGQ+QSBjb3B5IG9mIHRoaXMgc3RyaW5nIHdpdGggbGVhZGluZyBhbmQgdHJhaWxpbmcgd2hpdGUKKyAgICAgICAgICAgIHNwYWNlIHJlbW92ZWQsIG9yIHRoaXMgc3RyaW5nIGlmIGl0IGhhcyBubyBsZWFkaW5nIG9yCisgICAgICAgICAgICB0cmFpbGluZyB3aGl0ZSBzcGFjZS48L2RkPjwvZGw+CisgICAgPC9saT4KKzwvdWw+Cis8YSBuYW1lPSJ0b1N0cmluZygpIj4KKyAgICA8IS0tICAgLS0+Cis8L2E+Cis8dWwgY2xhc3M9ImJsb2NrTGlzdCI+CisgICAgPGxpIGNsYXNzPSJibG9ja0xpc3QiPgorICAgICAgICA8aDQ+dG9TdHJpbmc8L2g0PgorICAgICAgICA8cHJlPnB1YmxpYyZuYnNwOzxhIGhyZWY9Ii4uLy4uL2phdmEvbGFuZy9TdHJpbmcuaHRtbCIgdGl0bGU9ImNsYXNzIGluIGphdmEubGFuZyI+U3RyaW5nPC9hPiZuYnNwO3RvU3RyaW5nKCk8L3ByZT4KKyAgICAgICAgPGRpdiBjbGFzcz0iYmxvY2siPlRoaXMgb2JqZWN0ICh3aGljaCBpcyBhbHJlYWR5IGEgc3RyaW5nISkgaXMgaXRzZWxmIHJldHVybmVkLjwvZGl2PgorICAgICAgICA8ZGw+CisgICAgICAgICAgICA8ZHQ+PHN0cm9uZz5TcGVjaWZpZWQgYnk6PC9zdHJvbmc+PC9kdD4KKyAgICAgICAgICAgIDxkZD48Y29kZT48YSBocmVmPSIuLi8uLi9qYXZhL2xhbmcvQ2hhclNlcXVlbmNlLmh0bWwjdG9TdHJpbmcoKSI+dG9TdHJpbmc8L2E+PC9jb2RlPiZuYnNwO2luIGludGVyZmFjZSZuYnNwOzxjb2RlPjxhIGhyZWY9Ii4uLy4uL2phdmEvbGFuZy9DaGFyU2VxdWVuY2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBqYXZhLmxhbmciPkNoYXJTZXF1ZW5jZTwvYT48L2NvZGU+PC9kZD4KKyAgICAgICAgICAgIDxkdD48c3Ryb25nPk92ZXJyaWRlczo8L3N0cm9uZz48L2R0PgorICAgICAgICAgICAgPGRkPjxjb2RlPjxhIGhyZWY9Ii4uLy4uL2phdmEvbGFuZy9PYmplY3QuaHRtbCN0b1N0cmluZygpIj50b1N0cmluZzwvYT48L2NvZGU+Jm5ic3A7aW4gY2xhc3MmbmJzcDs8Y29kZT48YSBocmVmPSIuLi8uLi9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBqYXZhLmxhbmciPk9iamVjdDwvYT48L2NvZGU+PC9kZD4KKyAgICAgICAgICAgIDxkdD48c3BhbiBjbGFzcz0ic3Ryb25nIj5SZXR1cm5zOjwvc3Bhbj48L2R0PjxkZD50aGUgc3RyaW5nIGl0c2VsZi48L2RkPjwvZGw+CisgICAgPC9saT4KKzwvdWw+Cis8YSBuYW1lPSJ0b0NoYXJBcnJheSgpIj4KKyAgICA8IS0tICAgLS0+Cis8L2E+Cis8dWwgY2xhc3M9ImJsb2NrTGlzdCI+CisgICAgPGxpIGNsYXNzPSJibG9ja0xpc3QiPgorICAgICAgICA8aDQ+dG9DaGFyQXJyYXk8L2g0PgorICAgICAgICA8cHJlPnB1YmxpYyZuYnNwO2NoYXJbXSZuYnNwO3RvQ2hhckFycmF5KCk8L3ByZT4KKyAgICAgICAgPGRpdiBjbGFzcz0iYmxvY2siPkNvbnZlcnRzIHRoaXMgc3RyaW5nIHRvIGEgbmV3IGNoYXJhY3RlciBhcnJheS48L2Rpdj4KKyAgICAgICAgPGRsPjxkdD48c3BhbiBjbGFzcz0ic3Ryb25nIj5SZXR1cm5zOjwvc3Bhbj48L2R0PjxkZD5hIG5ld2x5IGFsbG9jYXRlZCBjaGFyYWN0ZXIgYXJyYXkgd2hvc2UgbGVuZ3RoIGlzIHRoZSBsZW5ndGgKKyAgICAgICAgICAgIG9mIHRoaXMgc3RyaW5nIGFuZCB3aG9zZSBjb250ZW50cyBhcmUgaW5pdGlhbGl6ZWQgdG8gY29udGFpbgorICAgICAgICAgICAgdGhlIGNoYXJhY3RlciBzZXF1ZW5jZSByZXByZXNlbnRlZCBieSB0aGlzIHN0cmluZy48L2RkPjwvZGw+CisgICAgPC9saT4KKzwvdWw+Cis8YSBuYW1lPSJmb3JtYXQoamF2YS5sYW5nLlN0cmluZywgamF2YS5sYW5nLk9iamVjdC4uLikiPgorICAgIDwhLS0gICAtLT4KKzwvYT4KKzx1bCBjbGFzcz0iYmxvY2tMaXN0Ij4KKyAgICA8bGkgY2xhc3M9ImJsb2NrTGlzdCI+CisgICAgICAgIDxoND5mb3JtYXQ8L2g0PgorPHByZT5wdWJsaWMgc3RhdGljJm5ic3A7PGEgaHJlZj0iLi4vLi4vamF2YS9sYW5nL1N0cmluZy5odG1sIiB0aXRsZT0iY2xhc3MgaW4gamF2YS5sYW5nIj5TdHJpbmc8L2E+Jm5ic3A7Zm9ybWF0KDxhIGhyZWY9Ii4uLy4uL2phdmEvbGFuZy9TdHJpbmcuaHRtbCIgdGl0bGU9ImNsYXNzIGluIGphdmEubGFuZyI+U3RyaW5nPC9hPiZuYnNwO2Zvcm1hdCwKKyAgICAgICAgICAgIDxhIGhyZWY9Ii4uLy4uL2phdmEvbGFuZy9PYmplY3QuaHRtbCIgdGl0bGU9ImNsYXNzIGluIGphdmEubGFuZyI+T2JqZWN0PC9hPi4uLiZuYnNwO2FyZ3MpPC9wcmU+CisgICAgICAgIDxkaXYgY2xhc3M9ImJsb2NrIj5SZXR1cm5zIGEgZm9ybWF0dGVkIHN0cmluZyB1c2luZyB0aGUgc3BlY2lmaWVkIGZvcm1hdCBzdHJpbmcgYW5kCisgICAgICAgICAgICBhcmd1bWVudHMuCisKKyAgICAgICAgICAgIDxwPiBUaGUgbG9jYWxlIGFsd2F5cyB1c2VkIGlzIHRoZSBvbmUgcmV0dXJuZWQgYnkgPGEgaHJlZj0iLi4vLi4vamF2YS91dGlsL0xvY2FsZS5odG1sI2dldERlZmF1bHQoKSI+PGNvZGU+TG9jYWxlLmdldERlZmF1bHQoKTwvY29kZT48L2E+LjwvZGl2PgorICAgICAgICA8ZGw+PGR0PjxzcGFuIGNsYXNzPSJzdHJvbmciPlBhcmFtZXRlcnM6PC9zcGFuPjwvZHQ+PGRkPjxjb2RlPmZvcm1hdDwvY29kZT4gLSBBIDxhIGhyZWY9Ii4uL3V0aWwvRm9ybWF0dGVyLmh0bWwjc3ludGF4Ij5mb3JtYXQgc3RyaW5nPC9hPjwvZGQ+PGRkPjxjb2RlPmFyZ3M8L2NvZGU+IC0gQXJndW1lbnRzIHJlZmVyZW5jZWQgYnkgdGhlIGZvcm1hdCBzcGVjaWZpZXJzIGluIHRoZSBmb3JtYXQKKyAgICAgICAgICAgIHN0cmluZy4gIElmIHRoZXJlIGFyZSBtb3JlIGFyZ3VtZW50cyB0aGFuIGZvcm1hdCBzcGVjaWZpZXJzLCB0aGUKKyAgICAgICAgICAgIGV4dHJhIGFyZ3VtZW50cyBhcmUgaWdub3JlZC4gIFRoZSBudW1iZXIgb2YgYXJndW1lbnRzIGlzCisgICAgICAgICAgICB2YXJpYWJsZSBhbmQgbWF5IGJlIHplcm8uICBUaGUgbWF4aW11bSBudW1iZXIgb2YgYXJndW1lbnRzIGlzCisgICAgICAgICAgICBsaW1pdGVkIGJ5IHRoZSBtYXhpbXVtIGRpbWVuc2lvbiBvZiBhIEphdmEgYXJyYXkgYXMgZGVmaW5lZCBieQorICAgICAgICAgICAgPGNpdGU+VGhlIEphdmEmdHJhZGU7IFZpcnR1YWwgTWFjaGluZSBTcGVjaWZpY2F0aW9uPC9jaXRlPi4KKyAgICAgICAgICAgIFRoZSBiZWhhdmlvdXIgb24gYQorICAgICAgICAgICAgPHR0Pm51bGw8L3R0PiBhcmd1bWVudCBkZXBlbmRzIG9uIHRoZSA8YQorICAgICAgICAgICAgICAgICAgICBocmVmPSIuLi91dGlsL0Zvcm1hdHRlci5odG1sI3N5bnRheCI+Y29udmVyc2lvbjwvYT4uPC9kZD4KKyAgICAgICAgICAgIDxkdD48c3BhbiBjbGFzcz0ic3Ryb25nIj5SZXR1cm5zOjwvc3Bhbj48L2R0PjxkZD5BIGZvcm1hdHRlZCBzdHJpbmc8L2RkPgorICAgICAgICAgICAgPGR0PjxzcGFuIGNsYXNzPSJzdHJvbmciPlRocm93czo8L3NwYW4+PC9kdD4KKyAgICAgICAgICAgIDxkZD48Y29kZT5JbGxlZ2FsRm9ybWF0RXhjZXB0aW9uPC9jb2RlPiAtIElmIGEgZm9ybWF0IHN0cmluZyBjb250YWlucyBhbiBpbGxlZ2FsIHN5bnRheCwgYSBmb3JtYXQKKyAgICAgICAgICAgICAgICBzcGVjaWZpZXIgdGhhdCBpcyBpbmNvbXBhdGlibGUgd2l0aCB0aGUgZ2l2ZW4gYXJndW1lbnRzLAorICAgICAgICAgICAgICAgIGluc3VmZmljaWVudCBhcmd1bWVudHMgZ2l2ZW4gdGhlIGZvcm1hdCBzdHJpbmcsIG9yIG90aGVyCisgICAgICAgICAgICAgICAgaWxsZWdhbCBjb25kaXRpb25zLiAgRm9yIHNwZWNpZmljYXRpb24gb2YgYWxsIHBvc3NpYmxlCisgICAgICAgICAgICAgICAgZm9ybWF0dGluZyBlcnJvcnMsIHNlZSB0aGUgPGEKKyAgICAgICAgICAgICAgICAgICAgICAgIGhyZWY9Ii4uL3V0aWwvRm9ybWF0dGVyLmh0bWwjZGV0YWlsIj5EZXRhaWxzPC9hPiBzZWN0aW9uIG9mIHRoZQorICAgICAgICAgICAgICAgIGZvcm1hdHRlciBjbGFzcyBzcGVjaWZpY2F0aW9uLjwvZGQ+CisgICAgICAgICAgICA8ZGQ+PGNvZGU+PGEgaHJlZj0iLi4vLi4vamF2YS9sYW5nL051bGxQb2ludGVyRXhjZXB0aW9uLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBqYXZhLmxhbmciPk51bGxQb2ludGVyRXhjZXB0aW9uPC9hPjwvY29kZT4gLSBJZiB0aGUgPHR0PmZvcm1hdDwvdHQ+IGlzIDx0dD5udWxsPC90dD48L2RkPjxkdD48c3BhbiBjbGFzcz0ic3Ryb25nIj5TaW5jZTo8L3NwYW4+PC9kdD4KKyAgICAgICAgICAgIDxkZD4xLjU8L2RkPgorICAgICAgICAgICAgPGR0PjxzcGFuIGNsYXNzPSJzdHJvbmciPlNlZSBBbHNvOjwvc3Bhbj48L2R0PjxkZD48YSBocmVmPSIuLi8uLi9qYXZhL3V0aWwvRm9ybWF0dGVyLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBqYXZhLnV0aWwiPjxjb2RlPkZvcm1hdHRlcjwvY29kZT48L2E+PC9kZD48L2RsPgorICAgIDwvbGk+Cis8L3VsPgorPGEgbmFtZT0iZm9ybWF0KGphdmEudXRpbC5Mb2NhbGUsIGphdmEubGFuZy5TdHJpbmcsIGphdmEubGFuZy5PYmplY3QuLi4pIj4KKyAgICA8IS0tICAgLS0+Cis8L2E+Cis8dWwgY2xhc3M9ImJsb2NrTGlzdCI+CisgICAgPGxpIGNsYXNzPSJibG9ja0xpc3QiPgorICAgICAgICA8aDQ+Zm9ybWF0PC9oND4KKzxwcmU+cHVibGljIHN0YXRpYyZuYnNwOzxhIGhyZWY9Ii4uLy4uL2phdmEvbGFuZy9TdHJpbmcuaHRtbCIgdGl0bGU9ImNsYXNzIGluIGphdmEubGFuZyI+U3RyaW5nPC9hPiZuYnNwO2Zvcm1hdCg8YSBocmVmPSIuLi8uLi9qYXZhL3V0aWwvTG9jYWxlLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBqYXZhLnV0aWwiPkxvY2FsZTwvYT4mbmJzcDtsLAorICAgICAgICAgICAgPGEgaHJlZj0iLi4vLi4vamF2YS9sYW5nL1N0cmluZy5odG1sIiB0aXRsZT0iY2xhc3MgaW4gamF2YS5sYW5nIj5TdHJpbmc8L2E+Jm5ic3A7Zm9ybWF0LAorICAgICAgICAgICAgPGEgaHJlZj0iLi4vLi4vamF2YS9sYW5nL09iamVjdC5odG1sIiB0aXRsZT0iY2xhc3MgaW4gamF2YS5sYW5nIj5PYmplY3Q8L2E+Li4uJm5ic3A7YXJncyk8L3ByZT4KKyAgICAgICAgPGRpdiBjbGFzcz0iYmxvY2siPlJldHVybnMgYSBmb3JtYXR0ZWQgc3RyaW5nIHVzaW5nIHRoZSBzcGVjaWZpZWQgbG9jYWxlLCBmb3JtYXQgc3RyaW5nLAorICAgICAgICAgICAgYW5kIGFyZ3VtZW50cy48L2Rpdj4KKyAgICAgICAgPGRsPjxkdD48c3BhbiBjbGFzcz0ic3Ryb25nIj5QYXJhbWV0ZXJzOjwvc3Bhbj48L2R0PjxkZD48Y29kZT5sPC9jb2RlPiAtIFRoZSA8YSBocmVmPSIuLi8uLi9qYXZhL3V0aWwvTG9jYWxlLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBqYXZhLnV0aWwiPmxvY2FsZTwvYT4gdG8gYXBwbHkgZHVyaW5nCisgICAgICAgICAgICBmb3JtYXR0aW5nLiAgSWYgPHR0Pmw8L3R0PiBpcyA8dHQ+bnVsbDwvdHQ+IHRoZW4gbm8gbG9jYWxpemF0aW9uCisgICAgICAgICAgICBpcyBhcHBsaWVkLjwvZGQ+PGRkPjxjb2RlPmZvcm1hdDwvY29kZT4gLSBBIDxhIGhyZWY9Ii4uL3V0aWwvRm9ybWF0dGVyLmh0bWwjc3ludGF4Ij5mb3JtYXQgc3RyaW5nPC9hPjwvZGQ+PGRkPjxjb2RlPmFyZ3M8L2NvZGU+IC0gQXJndW1lbnRzIHJlZmVyZW5jZWQgYnkgdGhlIGZvcm1hdCBzcGVjaWZpZXJzIGluIHRoZSBmb3JtYXQKKyAgICAgICAgICAgIHN0cmluZy4gIElmIHRoZXJlIGFyZSBtb3JlIGFyZ3VtZW50cyB0aGFuIGZvcm1hdCBzcGVjaWZpZXJzLCB0aGUKKyAgICAgICAgICAgIGV4dHJhIGFyZ3VtZW50cyBhcmUgaWdub3JlZC4gIFRoZSBudW1iZXIgb2YgYXJndW1lbnRzIGlzCisgICAgICAgICAgICB2YXJpYWJsZSBhbmQgbWF5IGJlIHplcm8uICBUaGUgbWF4aW11bSBudW1iZXIgb2YgYXJndW1lbnRzIGlzCisgICAgICAgICAgICBsaW1pdGVkIGJ5IHRoZSBtYXhpbXVtIGRpbWVuc2lvbiBvZiBhIEphdmEgYXJyYXkgYXMgZGVmaW5lZCBieQorICAgICAgICAgICAgPGNpdGU+VGhlIEphdmEmdHJhZGU7IFZpcnR1YWwgTWFjaGluZSBTcGVjaWZpY2F0aW9uPC9jaXRlPi4KKyAgICAgICAgICAgIFRoZSBiZWhhdmlvdXIgb24gYQorICAgICAgICAgICAgPHR0Pm51bGw8L3R0PiBhcmd1bWVudCBkZXBlbmRzIG9uIHRoZSA8YQorICAgICAgICAgICAgICAgICAgICBocmVmPSIuLi91dGlsL0Zvcm1hdHRlci5odG1sI3N5bnRheCI+Y29udmVyc2lvbjwvYT4uPC9kZD4KKyAgICAgICAgICAgIDxkdD48c3BhbiBjbGFzcz0ic3Ryb25nIj5SZXR1cm5zOjwvc3Bhbj48L2R0PjxkZD5BIGZvcm1hdHRlZCBzdHJpbmc8L2RkPgorICAgICAgICAgICAgPGR0PjxzcGFuIGNsYXNzPSJzdHJvbmciPlRocm93czo8L3NwYW4+PC9kdD4KKyAgICAgICAgICAgIDxkZD48Y29kZT5JbGxlZ2FsRm9ybWF0RXhjZXB0aW9uPC9jb2RlPiAtIElmIGEgZm9ybWF0IHN0cmluZyBjb250YWlucyBhbiBpbGxlZ2FsIHN5bnRheCwgYSBmb3JtYXQKKyAgICAgICAgICAgICAgICBzcGVjaWZpZXIgdGhhdCBpcyBpbmNvbXBhdGlibGUgd2l0aCB0aGUgZ2l2ZW4gYXJndW1lbnRzLAorICAgICAgICAgICAgICAgIGluc3VmZmljaWVudCBhcmd1bWVudHMgZ2l2ZW4gdGhlIGZvcm1hdCBzdHJpbmcsIG9yIG90aGVyCisgICAgICAgICAgICAgICAgaWxsZWdhbCBjb25kaXRpb25zLiAgRm9yIHNwZWNpZmljYXRpb24gb2YgYWxsIHBvc3NpYmxlCisgICAgICAgICAgICAgICAgZm9ybWF0dGluZyBlcnJvcnMsIHNlZSB0aGUgPGEKKyAgICAgICAgICAgICAgICAgICAgICAgIGhyZWY9Ii4uL3V0aWwvRm9ybWF0dGVyLmh0bWwjZGV0YWlsIj5EZXRhaWxzPC9hPiBzZWN0aW9uIG9mIHRoZQorICAgICAgICAgICAgICAgIGZvcm1hdHRlciBjbGFzcyBzcGVjaWZpY2F0aW9uPC9kZD4KKyAgICAgICAgICAgIDxkZD48Y29kZT48YSBocmVmPSIuLi8uLi9qYXZhL2xhbmcvTnVsbFBvaW50ZXJFeGNlcHRpb24uaHRtbCIgdGl0bGU9ImNsYXNzIGluIGphdmEubGFuZyI+TnVsbFBvaW50ZXJFeGNlcHRpb248L2E+PC9jb2RlPiAtIElmIHRoZSA8dHQ+Zm9ybWF0PC90dD4gaXMgPHR0Pm51bGw8L3R0PjwvZGQ+PGR0PjxzcGFuIGNsYXNzPSJzdHJvbmciPlNpbmNlOjwvc3Bhbj48L2R0PgorICAgICAgICAgICAgPGRkPjEuNTwvZGQ+CisgICAgICAgICAgICA8ZHQ+PHNwYW4gY2xhc3M9InN0cm9uZyI+U2VlIEFsc286PC9zcGFuPjwvZHQ+PGRkPjxhIGhyZWY9Ii4uLy4uL2phdmEvdXRpbC9Gb3JtYXR0ZXIuaHRtbCIgdGl0bGU9ImNsYXNzIGluIGphdmEudXRpbCI+PGNvZGU+Rm9ybWF0dGVyPC9jb2RlPjwvYT48L2RkPjwvZGw+CisgICAgPC9saT4KKzwvdWw+Cis8YSBuYW1lPSJ2YWx1ZU9mKGphdmEubGFuZy5PYmplY3QpIj4KKyAgICA8IS0tICAgLS0+Cis8L2E+Cis8dWwgY2xhc3M9ImJsb2NrTGlzdCI+CisgICAgPGxpIGNsYXNzPSJibG9ja0xpc3QiPgorICAgICAgICA8aDQ+dmFsdWVPZjwvaDQ+CisgICAgICAgIDxwcmU+cHVibGljIHN0YXRpYyZuYnNwOzxhIGhyZWY9Ii4uLy4uL2phdmEvbGFuZy9TdHJpbmcuaHRtbCIgdGl0bGU9ImNsYXNzIGluIGphdmEubGFuZyI+U3RyaW5nPC9hPiZuYnNwO3ZhbHVlT2YoPGEgaHJlZj0iLi4vLi4vamF2YS9sYW5nL09iamVjdC5odG1sIiB0aXRsZT0iY2xhc3MgaW4gamF2YS5sYW5nIj5PYmplY3Q8L2E+Jm5ic3A7b2JqKTwvcHJlPgorICAgICAgICA8ZGl2IGNsYXNzPSJibG9jayI+UmV0dXJucyB0aGUgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSA8Y29kZT5PYmplY3Q8L2NvZGU+IGFyZ3VtZW50LjwvZGl2PgorICAgICAgICA8ZGw+PGR0PjxzcGFuIGNsYXNzPSJzdHJvbmciPlBhcmFtZXRlcnM6PC9zcGFuPjwvZHQ+PGRkPjxjb2RlPm9iajwvY29kZT4gLSBhbiA8Y29kZT5PYmplY3Q8L2NvZGU+LjwvZGQ+CisgICAgICAgICAgICA8ZHQ+PHNwYW4gY2xhc3M9InN0cm9uZyI+UmV0dXJuczo8L3NwYW4+PC9kdD48ZGQ+aWYgdGhlIGFyZ3VtZW50IGlzIDxjb2RlPm51bGw8L2NvZGU+LCB0aGVuIGEgc3RyaW5nIGVxdWFsIHRvCisgICAgICAgICAgICAgICAgPGNvZGU+Im51bGwiPC9jb2RlPjsgb3RoZXJ3aXNlLCB0aGUgdmFsdWUgb2YKKyAgICAgICAgICAgICAgICA8Y29kZT5vYmoudG9TdHJpbmcoKTwvY29kZT4gaXMgcmV0dXJuZWQuPC9kZD48ZHQ+PHNwYW4gY2xhc3M9InN0cm9uZyI+U2VlIEFsc286PC9zcGFuPjwvZHQ+PGRkPjxhIGhyZWY9Ii4uLy4uL2phdmEvbGFuZy9PYmplY3QuaHRtbCN0b1N0cmluZygpIj48Y29kZT5PYmplY3QudG9TdHJpbmcoKTwvY29kZT48L2E+PC9kZD48L2RsPgorICAgIDwvbGk+Cis8L3VsPgorPGEgbmFtZT0idmFsdWVPZihjaGFyW10pIj4KKyAgICA8IS0tICAgLS0+Cis8L2E+Cis8dWwgY2xhc3M9ImJsb2NrTGlzdCI+CisgICAgPGxpIGNsYXNzPSJibG9ja0xpc3QiPgorICAgICAgICA8aDQ+dmFsdWVPZjwvaDQ+CisgICAgICAgIDxwcmU+cHVibGljIHN0YXRpYyZuYnNwOzxhIGhyZWY9Ii4uLy4uL2phdmEvbGFuZy9TdHJpbmcuaHRtbCIgdGl0bGU9ImNsYXNzIGluIGphdmEubGFuZyI+U3RyaW5nPC9hPiZuYnNwO3ZhbHVlT2YoY2hhcltdJm5ic3A7ZGF0YSk8L3ByZT4KKyAgICAgICAgPGRpdiBjbGFzcz0iYmxvY2siPlJldHVybnMgdGhlIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgPGNvZGU+Y2hhcjwvY29kZT4gYXJyYXkKKyAgICAgICAgICAgIGFyZ3VtZW50LiBUaGUgY29udGVudHMgb2YgdGhlIGNoYXJhY3RlciBhcnJheSBhcmUgY29waWVkOyBzdWJzZXF1ZW50CisgICAgICAgICAgICBtb2RpZmljYXRpb24gb2YgdGhlIGNoYXJhY3RlciBhcnJheSBkb2VzIG5vdCBhZmZlY3QgdGhlIG5ld2x5CisgICAgICAgICAgICBjcmVhdGVkIHN0cmluZy48L2Rpdj4KKyAgICAgICAgPGRsPjxkdD48c3BhbiBjbGFzcz0ic3Ryb25nIj5QYXJhbWV0ZXJzOjwvc3Bhbj48L2R0PjxkZD48Y29kZT5kYXRhPC9jb2RlPiAtIGEgPGNvZGU+Y2hhcjwvY29kZT4gYXJyYXkuPC9kZD4KKyAgICAgICAgICAgIDxkdD48c3BhbiBjbGFzcz0ic3Ryb25nIj5SZXR1cm5zOjwvc3Bhbj48L2R0PjxkZD5hIG5ld2x5IGFsbG9jYXRlZCBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSBzYW1lIHNlcXVlbmNlIG9mCisgICAgICAgICAgICAgICAgY2hhcmFjdGVycyBjb250YWluZWQgaW4gdGhlIGNoYXJhY3RlciBhcnJheSBhcmd1bWVudC48L2RkPjwvZGw+CisgICAgPC9saT4KKzwvdWw+Cis8YSBuYW1lPSJ2YWx1ZU9mKGNoYXJbXSwgaW50LCBpbnQpIj4KKyAgICA8IS0tICAgLS0+Cis8L2E+Cis8dWwgY2xhc3M9ImJsb2NrTGlzdCI+CisgICAgPGxpIGNsYXNzPSJibG9ja0xpc3QiPgorICAgICAgICA8aDQ+dmFsdWVPZjwvaDQ+Cis8cHJlPnB1YmxpYyBzdGF0aWMmbmJzcDs8YSBocmVmPSIuLi8uLi9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBqYXZhLmxhbmciPlN0cmluZzwvYT4mbmJzcDt2YWx1ZU9mKGNoYXJbXSZuYnNwO2RhdGEsCisgICAgICAgICAgICAgaW50Jm5ic3A7b2Zmc2V0LAorICAgICAgICAgICAgIGludCZuYnNwO2NvdW50KTwvcHJlPgorICAgICAgICA8ZGl2IGNsYXNzPSJibG9jayI+UmV0dXJucyB0aGUgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGEgc3BlY2lmaWMgc3ViYXJyYXkgb2YgdGhlCisgICAgICAgICAgICA8Y29kZT5jaGFyPC9jb2RlPiBhcnJheSBhcmd1bWVudC4KKyAgICAgICAgICAgIDxwPgorICAgICAgICAgICAgICAgIFRoZSA8Y29kZT5vZmZzZXQ8L2NvZGU+IGFyZ3VtZW50IGlzIHRoZSBpbmRleCBvZiB0aGUgZmlyc3QKKyAgICAgICAgICAgICAgICBjaGFyYWN0ZXIgb2YgdGhlIHN1YmFycmF5LiBUaGUgPGNvZGU+Y291bnQ8L2NvZGU+IGFyZ3VtZW50CisgICAgICAgICAgICAgICAgc3BlY2lmaWVzIHRoZSBsZW5ndGggb2YgdGhlIHN1YmFycmF5LiBUaGUgY29udGVudHMgb2YgdGhlIHN1YmFycmF5CisgICAgICAgICAgICAgICAgYXJlIGNvcGllZDsgc3Vic2VxdWVudCBtb2RpZmljYXRpb24gb2YgdGhlIGNoYXJhY3RlciBhcnJheSBkb2VzIG5vdAorICAgICAgICAgICAgICAgIGFmZmVjdCB0aGUgbmV3bHkgY3JlYXRlZCBzdHJpbmcuPC9kaXY+CisgICAgICAgIDxkbD48ZHQ+PHNwYW4gY2xhc3M9InN0cm9uZyI+UGFyYW1ldGVyczo8L3NwYW4+PC9kdD48ZGQ+PGNvZGU+ZGF0YTwvY29kZT4gLSB0aGUgY2hhcmFjdGVyIGFycmF5LjwvZGQ+PGRkPjxjb2RlPm9mZnNldDwvY29kZT4gLSB0aGUgaW5pdGlhbCBvZmZzZXQgaW50byB0aGUgdmFsdWUgb2YgdGhlCisgICAgICAgICAgICA8Y29kZT5TdHJpbmc8L2NvZGU+LjwvZGQ+PGRkPjxjb2RlPmNvdW50PC9jb2RlPiAtIHRoZSBsZW5ndGggb2YgdGhlIHZhbHVlIG9mIHRoZSA8Y29kZT5TdHJpbmc8L2NvZGU+LjwvZGQ+CisgICAgICAgICAgICA8ZHQ+PHNwYW4gY2xhc3M9InN0cm9uZyI+UmV0dXJuczo8L3NwYW4+PC9kdD48ZGQ+YSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSBzZXF1ZW5jZSBvZiBjaGFyYWN0ZXJzIGNvbnRhaW5lZAorICAgICAgICAgICAgICAgIGluIHRoZSBzdWJhcnJheSBvZiB0aGUgY2hhcmFjdGVyIGFycmF5IGFyZ3VtZW50LjwvZGQ+CisgICAgICAgICAgICA8ZHQ+PHNwYW4gY2xhc3M9InN0cm9uZyI+VGhyb3dzOjwvc3Bhbj48L2R0PgorICAgICAgICAgICAgPGRkPjxjb2RlPjxhIGhyZWY9Ii4uLy4uL2phdmEvbGFuZy9JbmRleE91dE9mQm91bmRzRXhjZXB0aW9uLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBqYXZhLmxhbmciPkluZGV4T3V0T2ZCb3VuZHNFeGNlcHRpb248L2E+PC9jb2RlPiAtIGlmIDxjb2RlPm9mZnNldDwvY29kZT4gaXMKKyAgICAgICAgICAgICAgICBuZWdhdGl2ZSwgb3IgPGNvZGU+Y291bnQ8L2NvZGU+IGlzIG5lZ2F0aXZlLCBvcgorICAgICAgICAgICAgICAgIDxjb2RlPm9mZnNldCtjb3VudDwvY29kZT4gaXMgbGFyZ2VyIHRoYW4KKyAgICAgICAgICAgICAgICA8Y29kZT5kYXRhLmxlbmd0aDwvY29kZT4uPC9kZD48L2RsPgorICAgIDwvbGk+Cis8L3VsPgorPGEgbmFtZT0iY29weVZhbHVlT2YoY2hhcltdLCBpbnQsIGludCkiPgorICAgIDwhLS0gICAtLT4KKzwvYT4KKzx1bCBjbGFzcz0iYmxvY2tMaXN0Ij4KKyAgICA8bGkgY2xhc3M9ImJsb2NrTGlzdCI+CisgICAgICAgIDxoND5jb3B5VmFsdWVPZjwvaDQ+Cis8cHJlPnB1YmxpYyBzdGF0aWMmbmJzcDs8YSBocmVmPSIuLi8uLi9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBqYXZhLmxhbmciPlN0cmluZzwvYT4mbmJzcDtjb3B5VmFsdWVPZihjaGFyW10mbmJzcDtkYXRhLAorICAgICAgICAgICAgICAgICBpbnQmbmJzcDtvZmZzZXQsCisgICAgICAgICAgICAgICAgIGludCZuYnNwO2NvdW50KTwvcHJlPgorICAgICAgICA8ZGl2IGNsYXNzPSJibG9jayI+UmV0dXJucyBhIFN0cmluZyB0aGF0IHJlcHJlc2VudHMgdGhlIGNoYXJhY3RlciBzZXF1ZW5jZSBpbiB0aGUKKyAgICAgICAgICAgIGFycmF5IHNwZWNpZmllZC48L2Rpdj4KKyAgICAgICAgPGRsPjxkdD48c3BhbiBjbGFzcz0ic3Ryb25nIj5QYXJhbWV0ZXJzOjwvc3Bhbj48L2R0PjxkZD48Y29kZT5kYXRhPC9jb2RlPiAtIHRoZSBjaGFyYWN0ZXIgYXJyYXkuPC9kZD48ZGQ+PGNvZGU+b2Zmc2V0PC9jb2RlPiAtIGluaXRpYWwgb2Zmc2V0IG9mIHRoZSBzdWJhcnJheS48L2RkPjxkZD48Y29kZT5jb3VudDwvY29kZT4gLSBsZW5ndGggb2YgdGhlIHN1YmFycmF5LjwvZGQ+CisgICAgICAgICAgICA8ZHQ+PHNwYW4gY2xhc3M9InN0cm9uZyI+UmV0dXJuczo8L3NwYW4+PC9kdD48ZGQ+YSA8Y29kZT5TdHJpbmc8L2NvZGU+IHRoYXQgY29udGFpbnMgdGhlIGNoYXJhY3RlcnMgb2YgdGhlCisgICAgICAgICAgICAgICAgc3BlY2lmaWVkIHN1YmFycmF5IG9mIHRoZSBjaGFyYWN0ZXIgYXJyYXkuPC9kZD48L2RsPgorICAgIDwvbGk+Cis8L3VsPgorPGEgbmFtZT0iY29weVZhbHVlT2YoY2hhcltdKSI+CisgICAgPCEtLSAgIC0tPgorPC9hPgorPHVsIGNsYXNzPSJibG9ja0xpc3QiPgorICAgIDxsaSBjbGFzcz0iYmxvY2tMaXN0Ij4KKyAgICAgICAgPGg0PmNvcHlWYWx1ZU9mPC9oND4KKyAgICAgICAgPHByZT5wdWJsaWMgc3RhdGljJm5ic3A7PGEgaHJlZj0iLi4vLi4vamF2YS9sYW5nL1N0cmluZy5odG1sIiB0aXRsZT0iY2xhc3MgaW4gamF2YS5sYW5nIj5TdHJpbmc8L2E+Jm5ic3A7Y29weVZhbHVlT2YoY2hhcltdJm5ic3A7ZGF0YSk8L3ByZT4KKyAgICAgICAgPGRpdiBjbGFzcz0iYmxvY2siPlJldHVybnMgYSBTdHJpbmcgdGhhdCByZXByZXNlbnRzIHRoZSBjaGFyYWN0ZXIgc2VxdWVuY2UgaW4gdGhlCisgICAgICAgICAgICBhcnJheSBzcGVjaWZpZWQuPC9kaXY+CisgICAgICAgIDxkbD48ZHQ+PHNwYW4gY2xhc3M9InN0cm9uZyI+UGFyYW1ldGVyczo8L3NwYW4+PC9kdD48ZGQ+PGNvZGU+ZGF0YTwvY29kZT4gLSB0aGUgY2hhcmFjdGVyIGFycmF5LjwvZGQ+CisgICAgICAgICAgICA8ZHQ+PHNwYW4gY2xhc3M9InN0cm9uZyI+UmV0dXJuczo8L3NwYW4+PC9kdD48ZGQ+YSA8Y29kZT5TdHJpbmc8L2NvZGU+IHRoYXQgY29udGFpbnMgdGhlIGNoYXJhY3RlcnMgb2YgdGhlCisgICAgICAgICAgICAgICAgY2hhcmFjdGVyIGFycmF5LjwvZGQ+PC9kbD4KKyAgICA8L2xpPgorPC91bD4KKzxhIG5hbWU9InZhbHVlT2YoYm9vbGVhbikiPgorICAgIDwhLS0gICAtLT4KKzwvYT4KKzx1bCBjbGFzcz0iYmxvY2tMaXN0Ij4KKyAgICA8bGkgY2xhc3M9ImJsb2NrTGlzdCI+CisgICAgICAgIDxoND52YWx1ZU9mPC9oND4KKyAgICAgICAgPHByZT5wdWJsaWMgc3RhdGljJm5ic3A7PGEgaHJlZj0iLi4vLi4vamF2YS9sYW5nL1N0cmluZy5odG1sIiB0aXRsZT0iY2xhc3MgaW4gamF2YS5sYW5nIj5TdHJpbmc8L2E+Jm5ic3A7dmFsdWVPZihib29sZWFuJm5ic3A7Yik8L3ByZT4KKyAgICAgICAgPGRpdiBjbGFzcz0iYmxvY2siPlJldHVybnMgdGhlIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgPGNvZGU+Ym9vbGVhbjwvY29kZT4gYXJndW1lbnQuPC9kaXY+CisgICAgICAgIDxkbD48ZHQ+PHNwYW4gY2xhc3M9InN0cm9uZyI+UGFyYW1ldGVyczo8L3NwYW4+PC9kdD48ZGQ+PGNvZGU+YjwvY29kZT4gLSBhIDxjb2RlPmJvb2xlYW48L2NvZGU+LjwvZGQ+CisgICAgICAgICAgICA8ZHQ+PHNwYW4gY2xhc3M9InN0cm9uZyI+UmV0dXJuczo8L3NwYW4+PC9kdD48ZGQ+aWYgdGhlIGFyZ3VtZW50IGlzIDxjb2RlPnRydWU8L2NvZGU+LCBhIHN0cmluZyBlcXVhbCB0bworICAgICAgICAgICAgICAgIDxjb2RlPiJ0cnVlIjwvY29kZT4gaXMgcmV0dXJuZWQ7IG90aGVyd2lzZSwgYSBzdHJpbmcgZXF1YWwgdG8KKyAgICAgICAgICAgICAgICA8Y29kZT4iZmFsc2UiPC9jb2RlPiBpcyByZXR1cm5lZC48L2RkPjwvZGw+CisgICAgPC9saT4KKzwvdWw+Cis8YSBuYW1lPSJ2YWx1ZU9mKGNoYXIpIj4KKyAgICA8IS0tICAgLS0+Cis8L2E+Cis8dWwgY2xhc3M9ImJsb2NrTGlzdCI+CisgICAgPGxpIGNsYXNzPSJibG9ja0xpc3QiPgorICAgICAgICA8aDQ+dmFsdWVPZjwvaDQ+CisgICAgICAgIDxwcmU+cHVibGljIHN0YXRpYyZuYnNwOzxhIGhyZWY9Ii4uLy4uL2phdmEvbGFuZy9TdHJpbmcuaHRtbCIgdGl0bGU9ImNsYXNzIGluIGphdmEubGFuZyI+U3RyaW5nPC9hPiZuYnNwO3ZhbHVlT2YoY2hhciZuYnNwO2MpPC9wcmU+CisgICAgICAgIDxkaXYgY2xhc3M9ImJsb2NrIj5SZXR1cm5zIHRoZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIDxjb2RlPmNoYXI8L2NvZGU+CisgICAgICAgICAgICBhcmd1bWVudC48L2Rpdj4KKyAgICAgICAgPGRsPjxkdD48c3BhbiBjbGFzcz0ic3Ryb25nIj5QYXJhbWV0ZXJzOjwvc3Bhbj48L2R0PjxkZD48Y29kZT5jPC9jb2RlPiAtIGEgPGNvZGU+Y2hhcjwvY29kZT4uPC9kZD4KKyAgICAgICAgICAgIDxkdD48c3BhbiBjbGFzcz0ic3Ryb25nIj5SZXR1cm5zOjwvc3Bhbj48L2R0PjxkZD5hIHN0cmluZyBvZiBsZW5ndGggPGNvZGU+MTwvY29kZT4gY29udGFpbmluZworICAgICAgICAgICAgICAgIGFzIGl0cyBzaW5nbGUgY2hhcmFjdGVyIHRoZSBhcmd1bWVudCA8Y29kZT5jPC9jb2RlPi48L2RkPjwvZGw+CisgICAgPC9saT4KKzwvdWw+Cis8YSBuYW1lPSJ2YWx1ZU9mKGludCkiPgorICAgIDwhLS0gICAtLT4KKzwvYT4KKzx1bCBjbGFzcz0iYmxvY2tMaXN0Ij4KKyAgICA8bGkgY2xhc3M9ImJsb2NrTGlzdCI+CisgICAgICAgIDxoND52YWx1ZU9mPC9oND4KKyAgICAgICAgPHByZT5wdWJsaWMgc3RhdGljJm5ic3A7PGEgaHJlZj0iLi4vLi4vamF2YS9sYW5nL1N0cmluZy5odG1sIiB0aXRsZT0iY2xhc3MgaW4gamF2YS5sYW5nIj5TdHJpbmc8L2E+Jm5ic3A7dmFsdWVPZihpbnQmbmJzcDtpKTwvcHJlPgorICAgICAgICA8ZGl2IGNsYXNzPSJibG9jayI+UmV0dXJucyB0aGUgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSA8Y29kZT5pbnQ8L2NvZGU+IGFyZ3VtZW50LgorICAgICAgICAgICAgPHA+CisgICAgICAgICAgICAgICAgVGhlIHJlcHJlc2VudGF0aW9uIGlzIGV4YWN0bHkgdGhlIG9uZSByZXR1cm5lZCBieSB0aGUKKyAgICAgICAgICAgICAgICA8Y29kZT5JbnRlZ2VyLnRvU3RyaW5nPC9jb2RlPiBtZXRob2Qgb2Ygb25lIGFyZ3VtZW50LjwvZGl2PgorICAgICAgICA8ZGw+PGR0PjxzcGFuIGNsYXNzPSJzdHJvbmciPlBhcmFtZXRlcnM6PC9zcGFuPjwvZHQ+PGRkPjxjb2RlPmk8L2NvZGU+IC0gYW4gPGNvZGU+aW50PC9jb2RlPi48L2RkPgorICAgICAgICAgICAgPGR0PjxzcGFuIGNsYXNzPSJzdHJvbmciPlJldHVybnM6PC9zcGFuPjwvZHQ+PGRkPmEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSA8Y29kZT5pbnQ8L2NvZGU+IGFyZ3VtZW50LjwvZGQ+PGR0PjxzcGFuIGNsYXNzPSJzdHJvbmciPlNlZSBBbHNvOjwvc3Bhbj48L2R0PjxkZD48YSBocmVmPSIuLi8uLi9qYXZhL2xhbmcvSW50ZWdlci5odG1sI3RvU3RyaW5nKGludCwgaW50KSI+PGNvZGU+SW50ZWdlci50b1N0cmluZyhpbnQsIGludCk8L2NvZGU+PC9hPjwvZGQ+PC9kbD4KKyAgICA8L2xpPgorPC91bD4KKzxhIG5hbWU9InZhbHVlT2YobG9uZykiPgorICAgIDwhLS0gICAtLT4KKzwvYT4KKzx1bCBjbGFzcz0iYmxvY2tMaXN0Ij4KKyAgICA8bGkgY2xhc3M9ImJsb2NrTGlzdCI+CisgICAgICAgIDxoND52YWx1ZU9mPC9oND4KKyAgICAgICAgPHByZT5wdWJsaWMgc3RhdGljJm5ic3A7PGEgaHJlZj0iLi4vLi4vamF2YS9sYW5nL1N0cmluZy5odG1sIiB0aXRsZT0iY2xhc3MgaW4gamF2YS5sYW5nIj5TdHJpbmc8L2E+Jm5ic3A7dmFsdWVPZihsb25nJm5ic3A7bCk8L3ByZT4KKyAgICAgICAgPGRpdiBjbGFzcz0iYmxvY2siPlJldHVybnMgdGhlIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgPGNvZGU+bG9uZzwvY29kZT4gYXJndW1lbnQuCisgICAgICAgICAgICA8cD4KKyAgICAgICAgICAgICAgICBUaGUgcmVwcmVzZW50YXRpb24gaXMgZXhhY3RseSB0aGUgb25lIHJldHVybmVkIGJ5IHRoZQorICAgICAgICAgICAgICAgIDxjb2RlPkxvbmcudG9TdHJpbmc8L2NvZGU+IG1ldGhvZCBvZiBvbmUgYXJndW1lbnQuPC9kaXY+CisgICAgICAgIDxkbD48ZHQ+PHNwYW4gY2xhc3M9InN0cm9uZyI+UGFyYW1ldGVyczo8L3NwYW4+PC9kdD48ZGQ+PGNvZGU+bDwvY29kZT4gLSBhIDxjb2RlPmxvbmc8L2NvZGU+LjwvZGQ+CisgICAgICAgICAgICA8ZHQ+PHNwYW4gY2xhc3M9InN0cm9uZyI+UmV0dXJuczo8L3NwYW4+PC9kdD48ZGQ+YSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIDxjb2RlPmxvbmc8L2NvZGU+IGFyZ3VtZW50LjwvZGQ+PGR0PjxzcGFuIGNsYXNzPSJzdHJvbmciPlNlZSBBbHNvOjwvc3Bhbj48L2R0PjxkZD48YSBocmVmPSIuLi8uLi9qYXZhL2xhbmcvTG9uZy5odG1sI3RvU3RyaW5nKGxvbmcpIj48Y29kZT5Mb25nLnRvU3RyaW5nKGxvbmcpPC9jb2RlPjwvYT48L2RkPjwvZGw+CisgICAgPC9saT4KKzwvdWw+Cis8YSBuYW1lPSJ2YWx1ZU9mKGZsb2F0KSI+CisgICAgPCEtLSAgIC0tPgorPC9hPgorPHVsIGNsYXNzPSJibG9ja0xpc3QiPgorICAgIDxsaSBjbGFzcz0iYmxvY2tMaXN0Ij4KKyAgICAgICAgPGg0PnZhbHVlT2Y8L2g0PgorICAgICAgICA8cHJlPnB1YmxpYyBzdGF0aWMmbmJzcDs8YSBocmVmPSIuLi8uLi9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBqYXZhLmxhbmciPlN0cmluZzwvYT4mbmJzcDt2YWx1ZU9mKGZsb2F0Jm5ic3A7Zik8L3ByZT4KKyAgICAgICAgPGRpdiBjbGFzcz0iYmxvY2siPlJldHVybnMgdGhlIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgPGNvZGU+ZmxvYXQ8L2NvZGU+IGFyZ3VtZW50LgorICAgICAgICAgICAgPHA+CisgICAgICAgICAgICAgICAgVGhlIHJlcHJlc2VudGF0aW9uIGlzIGV4YWN0bHkgdGhlIG9uZSByZXR1cm5lZCBieSB0aGUKKyAgICAgICAgICAgICAgICA8Y29kZT5GbG9hdC50b1N0cmluZzwvY29kZT4gbWV0aG9kIG9mIG9uZSBhcmd1bWVudC48L2Rpdj4KKyAgICAgICAgPGRsPjxkdD48c3BhbiBjbGFzcz0ic3Ryb25nIj5QYXJhbWV0ZXJzOjwvc3Bhbj48L2R0PjxkZD48Y29kZT5mPC9jb2RlPiAtIGEgPGNvZGU+ZmxvYXQ8L2NvZGU+LjwvZGQ+CisgICAgICAgICAgICA8ZHQ+PHNwYW4gY2xhc3M9InN0cm9uZyI+UmV0dXJuczo8L3NwYW4+PC9kdD48ZGQ+YSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIDxjb2RlPmZsb2F0PC9jb2RlPiBhcmd1bWVudC48L2RkPjxkdD48c3BhbiBjbGFzcz0ic3Ryb25nIj5TZWUgQWxzbzo8L3NwYW4+PC9kdD48ZGQ+PGEgaHJlZj0iLi4vLi4vamF2YS9sYW5nL0Zsb2F0Lmh0bWwjdG9TdHJpbmcoZmxvYXQpIj48Y29kZT5GbG9hdC50b1N0cmluZyhmbG9hdCk8L2NvZGU+PC9hPjwvZGQ+PC9kbD4KKyAgICA8L2xpPgorPC91bD4KKzxhIG5hbWU9InZhbHVlT2YoZG91YmxlKSI+CisgICAgPCEtLSAgIC0tPgorPC9hPgorPHVsIGNsYXNzPSJibG9ja0xpc3QiPgorICAgIDxsaSBjbGFzcz0iYmxvY2tMaXN0Ij4KKyAgICAgICAgPGg0PnZhbHVlT2Y8L2g0PgorICAgICAgICA8cHJlPnB1YmxpYyBzdGF0aWMmbmJzcDs8YSBocmVmPSIuLi8uLi9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBqYXZhLmxhbmciPlN0cmluZzwvYT4mbmJzcDt2YWx1ZU9mKGRvdWJsZSZuYnNwO2QpPC9wcmU+CisgICAgICAgIDxkaXYgY2xhc3M9ImJsb2NrIj5SZXR1cm5zIHRoZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIDxjb2RlPmRvdWJsZTwvY29kZT4gYXJndW1lbnQuCisgICAgICAgICAgICA8cD4KKyAgICAgICAgICAgICAgICBUaGUgcmVwcmVzZW50YXRpb24gaXMgZXhhY3RseSB0aGUgb25lIHJldHVybmVkIGJ5IHRoZQorICAgICAgICAgICAgICAgIDxjb2RlPkRvdWJsZS50b1N0cmluZzwvY29kZT4gbWV0aG9kIG9mIG9uZSBhcmd1bWVudC48L2Rpdj4KKyAgICAgICAgPGRsPjxkdD48c3BhbiBjbGFzcz0ic3Ryb25nIj5QYXJhbWV0ZXJzOjwvc3Bhbj48L2R0PjxkZD48Y29kZT5kPC9jb2RlPiAtIGEgPGNvZGU+ZG91YmxlPC9jb2RlPi48L2RkPgorICAgICAgICAgICAgPGR0PjxzcGFuIGNsYXNzPSJzdHJvbmciPlJldHVybnM6PC9zcGFuPjwvZHQ+PGRkPmEgIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgPGNvZGU+ZG91YmxlPC9jb2RlPiBhcmd1bWVudC48L2RkPjxkdD48c3BhbiBjbGFzcz0ic3Ryb25nIj5TZWUgQWxzbzo8L3NwYW4+PC9kdD48ZGQ+PGEgaHJlZj0iLi4vLi4vamF2YS9sYW5nL0RvdWJsZS5odG1sI3RvU3RyaW5nKGRvdWJsZSkiPjxjb2RlPkRvdWJsZS50b1N0cmluZyhkb3VibGUpPC9jb2RlPjwvYT48L2RkPjwvZGw+CisgICAgPC9saT4KKzwvdWw+Cis8YSBuYW1lPSJpbnRlcm4oKSI+CisgICAgPCEtLSAgIC0tPgorPC9hPgorPHVsIGNsYXNzPSJibG9ja0xpc3RMYXN0Ij4KKyAgICA8bGkgY2xhc3M9ImJsb2NrTGlzdCI+CisgICAgICAgIDxoND5pbnRlcm48L2g0PgorICAgICAgICA8cHJlPnB1YmxpYyZuYnNwOzxhIGhyZWY9Ii4uLy4uL2phdmEvbGFuZy9TdHJpbmcuaHRtbCIgdGl0bGU9ImNsYXNzIGluIGphdmEubGFuZyI+U3RyaW5nPC9hPiZuYnNwO2ludGVybigpPC9wcmU+CisgICAgICAgIDxkaXYgY2xhc3M9ImJsb2NrIj5SZXR1cm5zIGEgY2Fub25pY2FsIHJlcHJlc2VudGF0aW9uIGZvciB0aGUgc3RyaW5nIG9iamVjdC4KKyAgICAgICAgICAgIDxwPgorICAgICAgICAgICAgICAgIEEgcG9vbCBvZiBzdHJpbmdzLCBpbml0aWFsbHkgZW1wdHksIGlzIG1haW50YWluZWQgcHJpdmF0ZWx5IGJ5IHRoZQorICAgICAgICAgICAgICAgIGNsYXNzIDxjb2RlPlN0cmluZzwvY29kZT4uCisgICAgICAgICAgICA8cD4KKyAgICAgICAgICAgICAgICBXaGVuIHRoZSBpbnRlcm4gbWV0aG9kIGlzIGludm9rZWQsIGlmIHRoZSBwb29sIGFscmVhZHkgY29udGFpbnMgYQorICAgICAgICAgICAgICAgIHN0cmluZyBlcXVhbCB0byB0aGlzIDxjb2RlPlN0cmluZzwvY29kZT4gb2JqZWN0IGFzIGRldGVybWluZWQgYnkKKyAgICAgICAgICAgICAgICB0aGUgPGEgaHJlZj0iLi4vLi4vamF2YS9sYW5nL1N0cmluZy5odG1sI2VxdWFscyhqYXZhLmxhbmcuT2JqZWN0KSI+PGNvZGU+ZXF1YWxzKE9iamVjdCk8L2NvZGU+PC9hPiBtZXRob2QsIHRoZW4gdGhlIHN0cmluZyBmcm9tIHRoZSBwb29sIGlzCisgICAgICAgICAgICAgICAgcmV0dXJuZWQuIE90aGVyd2lzZSwgdGhpcyA8Y29kZT5TdHJpbmc8L2NvZGU+IG9iamVjdCBpcyBhZGRlZCB0byB0aGUKKyAgICAgICAgICAgICAgICBwb29sIGFuZCBhIHJlZmVyZW5jZSB0byB0aGlzIDxjb2RlPlN0cmluZzwvY29kZT4gb2JqZWN0IGlzIHJldHVybmVkLgorICAgICAgICAgICAgPHA+CisgICAgICAgICAgICAgICAgSXQgZm9sbG93cyB0aGF0IGZvciBhbnkgdHdvIHN0cmluZ3MgPGNvZGU+czwvY29kZT4gYW5kIDxjb2RlPnQ8L2NvZGU+LAorICAgICAgICAgICAgICAgIDxjb2RlPnMuaW50ZXJuKCkmbmJzcDs9PSZuYnNwO3QuaW50ZXJuKCk8L2NvZGU+IGlzIDxjb2RlPnRydWU8L2NvZGU+CisgICAgICAgICAgICAgICAgaWYgYW5kIG9ubHkgaWYgPGNvZGU+cy5lcXVhbHModCk8L2NvZGU+IGlzIDxjb2RlPnRydWU8L2NvZGU+LgorICAgICAgICAgICAgPHA+CisgICAgICAgICAgICAgICAgQWxsIGxpdGVyYWwgc3RyaW5ncyBhbmQgc3RyaW5nLXZhbHVlZCBjb25zdGFudCBleHByZXNzaW9ucyBhcmUKKyAgICAgICAgICAgICAgICBpbnRlcm5lZC4gU3RyaW5nIGxpdGVyYWxzIGFyZSBkZWZpbmVkIGluIHNlY3Rpb24gMy4xMC41IG9mIHRoZQorICAgICAgICAgICAgICAgIDxjaXRlPlRoZSBKYXZhJnRyYWRlOyBMYW5ndWFnZSBTcGVjaWZpY2F0aW9uPC9jaXRlPi48L2Rpdj4KKyAgICAgICAgPGRsPjxkdD48c3BhbiBjbGFzcz0ic3Ryb25nIj5SZXR1cm5zOjwvc3Bhbj48L2R0PjxkZD5hIHN0cmluZyB0aGF0IGhhcyB0aGUgc2FtZSBjb250ZW50cyBhcyB0aGlzIHN0cmluZywgYnV0IGlzCisgICAgICAgICAgICBndWFyYW50ZWVkIHRvIGJlIGZyb20gYSBwb29sIG9mIHVuaXF1ZSBzdHJpbmdzLjwvZGQ+PC9kbD4KKyAgICA8L2xpPgorPC91bD4KKzwvbGk+Cis8L3VsPgorPC9saT4KKzwvdWw+Cis8L2Rpdj4KKzwvZGl2PgorPCEtLSA9PT09PT09PT0gRU5EIE9GIENMQVNTIERBVEEgPT09PT09PT09IC0tPgorPCEtLSA9PT09PT09IFNUQVJUIE9GIEJPVFRPTSBOQVZCQVIgPT09PT09IC0tPgorPGRpdiBjbGFzcz0iYm90dG9tTmF2Ij48YSBuYW1lPSJuYXZiYXJfYm90dG9tIj4KKyAgICA8IS0tICAgLS0+Cis8L2E+PGEgaHJlZj0iI3NraXAtbmF2YmFyX2JvdHRvbSIgdGl0bGU9IlNraXAgbmF2aWdhdGlvbiBsaW5rcyI+PC9hPjxhIG5hbWU9Im5hdmJhcl9ib3R0b21fZmlyc3Ryb3ciPgorICAgIDwhLS0gICAtLT4KKzwvYT4KKyAgICA8dWwgY2xhc3M9Im5hdkxpc3QiIHRpdGxlPSJOYXZpZ2F0aW9uIj4KKyAgICAgICAgPGxpPjxhIGhyZWY9Ii4uLy4uL292ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+T3ZlcnZpZXc8L2E+PC9saT4KKyAgICAgICAgPGxpPjxhIGhyZWY9InBhY2thZ2Utc3VtbWFyeS5odG1sIj5QYWNrYWdlPC9hPjwvbGk+CisgICAgICAgIDxsaSBjbGFzcz0ibmF2QmFyQ2VsbDFSZXYiPkNsYXNzPC9saT4KKyAgICAgICAgPGxpPjxhIGhyZWY9ImNsYXNzLXVzZS9TdHJpbmcuaHRtbCI+VXNlPC9hPjwvbGk+CisgICAgICAgIDxsaT48YSBocmVmPSJwYWNrYWdlLXRyZWUuaHRtbCI+VHJlZTwvYT48L2xpPgorICAgICAgICA8bGk+PGEgaHJlZj0iLi4vLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPkRlcHJlY2F0ZWQ8L2E+PC9saT4KKyAgICAgICAgPGxpPjxhIGhyZWY9Ii4uLy4uL2luZGV4LWZpbGVzL2luZGV4LTEuaHRtbCI+SW5kZXg8L2E+PC9saT4KKyAgICAgICAgPGxpPjxhIGhyZWY9Ii4uLy4uL2hlbHAtZG9jLmh0bWwiPkhlbHA8L2E+PC9saT4KKyAgICA8L3VsPgorICAgIDxkaXYgY2xhc3M9ImFib3V0TGFuZ3VhZ2UiPjxlbT48c3Ryb25nPkphdmEmdHJhZGU7Jm5ic3A7UGxhdGZvcm08YnI+U3RhbmRhcmQmbmJzcDtFZC4mbmJzcDs3PC9zdHJvbmc+PC9lbT48L2Rpdj4KKzwvZGl2PgorPGRpdiBjbGFzcz0ic3ViTmF2Ij4KKyAgICA8dWwgY2xhc3M9Im5hdkxpc3QiPgorICAgICAgICA8bGk+PGEgaHJlZj0iLi4vLi4vamF2YS9sYW5nL1N0cmljdE1hdGguaHRtbCIgdGl0bGU9ImNsYXNzIGluIGphdmEubGFuZyI+PHNwYW4gY2xhc3M9InN0cm9uZyI+UHJldiBDbGFzczwvc3Bhbj48L2E+PC9saT4KKyAgICAgICAgPGxpPjxhIGhyZWY9Ii4uLy4uL2phdmEvbGFuZy9TdHJpbmdCdWZmZXIuaHRtbCIgdGl0bGU9ImNsYXNzIGluIGphdmEubGFuZyI+PHNwYW4gY2xhc3M9InN0cm9uZyI+TmV4dCBDbGFzczwvc3Bhbj48L2E+PC9saT4KKyAgICA8L3VsPgorICAgIDx1bCBjbGFzcz0ibmF2TGlzdCI+CisgICAgICAgIDxsaT48YSBocmVmPSIuLi8uLi9pbmRleC5odG1sP2phdmEvbGFuZy9TdHJpbmcuaHRtbCIgdGFyZ2V0PSJfdG9wIj5GcmFtZXM8L2E+PC9saT4KKyAgICAgICAgPGxpPjxhIGhyZWY9IlN0cmluZy5odG1sIiB0YXJnZXQ9Il90b3AiPk5vIEZyYW1lczwvYT48L2xpPgorICAgIDwvdWw+CisgICAgPHVsIGNsYXNzPSJuYXZMaXN0IiBpZD0iYWxsY2xhc3Nlc19uYXZiYXJfYm90dG9tIj4KKyAgICAgICAgPGxpPjxhIGhyZWY9Ii4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj5BbGwgQ2xhc3NlczwvYT48L2xpPgorICAgIDwvdWw+CisgICAgPGRpdj4KKyAgICAgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPjwhLS0KKyAgICAgICAgYWxsQ2xhc3Nlc0xpbmsgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiYWxsY2xhc3Nlc19uYXZiYXJfYm90dG9tIik7CisgICAgICAgIGlmKHdpbmRvdz09dG9wKSB7CisgICAgICAgICAgICBhbGxDbGFzc2VzTGluay5zdHlsZS5kaXNwbGF5ID0gImJsb2NrIjsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGFsbENsYXNzZXNMaW5rLnN0eWxlLmRpc3BsYXkgPSAibm9uZSI7CisgICAgICAgIH0KKyAgICAgICAgLy8tLT4KKyAgICAgICAgPC9zY3JpcHQ+CisgICAgPC9kaXY+CisgICAgPGRpdj4KKyAgICAgICAgPHVsIGNsYXNzPSJzdWJOYXZMaXN0Ij4KKyAgICAgICAgICAgIDxsaT5TdW1tYXJ5OiZuYnNwOzwvbGk+CisgICAgICAgICAgICA8bGk+TmVzdGVkJm5ic3A7fCZuYnNwOzwvbGk+CisgICAgICAgICAgICA8bGk+PGEgaHJlZj0iI2ZpZWxkX3N1bW1hcnkiPkZpZWxkPC9hPiZuYnNwO3wmbmJzcDs8L2xpPgorICAgICAgICAgICAgPGxpPjxhIGhyZWY9IiNjb25zdHJ1Y3Rvcl9zdW1tYXJ5Ij5Db25zdHI8L2E+Jm5ic3A7fCZuYnNwOzwvbGk+CisgICAgICAgICAgICA8bGk+PGEgaHJlZj0iI21ldGhvZF9zdW1tYXJ5Ij5NZXRob2Q8L2E+PC9saT4KKyAgICAgICAgPC91bD4KKyAgICAgICAgPHVsIGNsYXNzPSJzdWJOYXZMaXN0Ij4KKyAgICAgICAgICAgIDxsaT5EZXRhaWw6Jm5ic3A7PC9saT4KKyAgICAgICAgICAgIDxsaT48YSBocmVmPSIjZmllbGRfZGV0YWlsIj5GaWVsZDwvYT4mbmJzcDt8Jm5ic3A7PC9saT4KKyAgICAgICAgICAgIDxsaT48YSBocmVmPSIjY29uc3RydWN0b3JfZGV0YWlsIj5Db25zdHI8L2E+Jm5ic3A7fCZuYnNwOzwvbGk+CisgICAgICAgICAgICA8bGk+PGEgaHJlZj0iI21ldGhvZF9kZXRhaWwiPk1ldGhvZDwvYT48L2xpPgorICAgICAgICA8L3VsPgorICAgIDwvZGl2PgorICAgIDxhIG5hbWU9InNraXAtbmF2YmFyX2JvdHRvbSI+CisgICAgICAgIDwhLS0gICAtLT4KKyAgICA8L2E+PC9kaXY+Cis8IS0tID09PT09PT09IEVORCBPRiBCT1RUT00gTkFWQkFSID09PT09PT0gLS0+Cis8cCBjbGFzcz0ibGVnYWxDb3B5Ij48c21hbGw+PGZvbnQgc2l6ZT0iLTEiPiA8YSBocmVmPSJodHRwOi8vYnVncmVwb3J0LnN1bi5jb20vYnVncmVwb3J0LyI+U3VibWl0IGEgYnVnIG9yIGZlYXR1cmU8L2E+IDxicj5Gb3IgZnVydGhlciBBUEkgcmVmZXJlbmNlIGFuZCBkZXZlbG9wZXIgZG9jdW1lbnRhdGlvbiwgc2VlIDxhIGhyZWY9Imh0dHA6Ly9kb3dubG9hZC5vcmFjbGUuY29tL2phdmFzZS83L2RvY3MvaW5kZXguaHRtbCIgdGFyZ2V0PSJfYmxhbmsiPkphdmEgU0UgRG9jdW1lbnRhdGlvbjwvYT4uIFRoYXQgZG9jdW1lbnRhdGlvbiBjb250YWlucyBtb3JlIGRldGFpbGVkLCBkZXZlbG9wZXItdGFyZ2V0ZWQgZGVzY3JpcHRpb25zLCB3aXRoIGNvbmNlcHR1YWwgb3ZlcnZpZXdzLCBkZWZpbml0aW9ucyBvZiB0ZXJtcywgd29ya2Fyb3VuZHMsIGFuZCB3b3JraW5nIGNvZGUgZXhhbXBsZXMuPGJyPiA8YSBocmVmPSIuLi8uLi8uLi9sZWdhbC9jcHlyLmh0bWwiPkNvcHlyaWdodDwvYT4gJiN4MDBhOTsgMTk5MywgMjAxMSwgT3JhY2xlIGFuZC9vciBpdHMgYWZmaWxpYXRlcy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuIDwvZm9udD48L3NtYWxsPjwvcD4KKzwhLS0gU3RhcnQgU2l0ZUNhdGFseXN0IGNvZGUgICAtLT4KKzxzY3JpcHQgbGFuZ3VhZ2U9IkphdmFTY3JpcHQiIHNyYz0iaHR0cDovL3d3dy5vcmFjbGUuY29tL29jb20vZ3JvdXBzL3N5c3RlbW9iamVjdC9AbWt0Z19hZG1pbi9kb2N1bWVudHMvc3lzdGVtb2JqZWN0L3NfY29kZV9kb3dubG9hZC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IGxhbmd1YWdlPSJKYXZhU2NyaXB0IiBzcmM9Imh0dHA6Ly93d3cub3JhY2xlLmNvbS9vY29tL2dyb3Vwcy9zeXN0ZW1vYmplY3QvQG1rdGdfYWRtaW4vZG9jdW1lbnRzL3N5c3RlbW9iamVjdC9zX2NvZGUuanMiPjwvc2NyaXB0PgorCis8IS0tICoqKioqKioqKiogRE8gTk9UIEFMVEVSIEFOWVRISU5HIEJFTE9XIFRISVMgTElORSAhICoqKioqKioqKioqIC0tPgorPCEtLSAgQmVsb3cgY29kZSB3aWxsIHNlbmQgdGhlIGluZm8gdG8gT21uaXR1cmUgc2VydmVyIC0tPgorPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+dmFyIHNfY29kZT1zLnQoKTtpZihzX2NvZGUpZG9jdW1lbnQud3JpdGUoc19jb2RlKTwvc2NyaXB0PgorCis8IS0tIEVuZCBTaXRlQ2F0YWx5c3QgY29kZSAtLT4KKzxub3NjcmlwdD4KKyAgICA8cD5TY3JpcHRpbmcgb24gdGhpcyBwYWdlIHRyYWNrcyB3ZWIgcGFnZSB0cmFmZmljLCBidXQgZG9lcyBub3QgY2hhbmdlIHRoZSBjb250ZW50IGluIGFueSB3YXkuPC9wPgorPC9ub3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9leHRlcm5hbEphdmFkb2MvcGFja2FnZVN1bW1hcnkvdXRpbC9leHBlY3RlZC5odG1sIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2V4dGVybmFsSmF2YWRvYy9wYWNrYWdlU3VtbWFyeS91dGlsL2V4cGVjdGVkLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzJjMmRkNwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9leHRlcm5hbEphdmFkb2MvcGFja2FnZVN1bW1hcnkvdXRpbC9leHBlY3RlZC5odG1sCkBAIC0wLDAgKzEsMzggQEAKKzxIVE1MPjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+ICB1bC5pbmhlcml0YW5jZSB7CisgICAgICBtYXJnaW46MDsKKyAgICAgIHBhZGRpbmc6MDsKKyAgfQorICB1bC5pbmhlcml0YW5jZSBsaSB7CisgICAgICAgZGlzcGxheTppbmxpbmU7CisgICAgICAgbGlzdC1zdHlsZTpub25lOworICB9CisgIHVsLmluaGVyaXRhbmNlIGxpIHVsLmluaGVyaXRhbmNlIHsKKyAgICBtYXJnaW4tbGVmdDoxNXB4OworICAgIHBhZGRpbmctbGVmdDoxNXB4OworICAgIHBhZGRpbmctdG9wOjFweDsKKyAgfQorPC9zdHlsZT48aDIgdGl0bGU9IlBhY2thZ2UgamF2YS51dGlsIERlc2NyaXB0aW9uIj5QYWNrYWdlIGphdmEudXRpbCBEZXNjcmlwdGlvbjwvaDI+Cis8ZGl2IGNsYXNzPSJibG9jayI+Q29udGFpbnMgdGhlIGNvbGxlY3Rpb25zIGZyYW1ld29yaywgbGVnYWN5IGNvbGxlY3Rpb24gY2xhc3NlcywgZXZlbnQgbW9kZWwsCisgIGRhdGUgYW5kIHRpbWUgZmFjaWxpdGllcywgaW50ZXJuYXRpb25hbGl6YXRpb24sIGFuZCBtaXNjZWxsYW5lb3VzIHV0aWxpdHkKKyAgY2xhc3NlcyAoYSBzdHJpbmcgdG9rZW5pemVyLCBhIHJhbmRvbS1udW1iZXIgZ2VuZXJhdG9yLCBhbmQgYSBiaXQgYXJyYXkpLgorCisgIDxoMj5QYWNrYWdlIFNwZWNpZmljYXRpb248L2gyPgorICA8dWw+CisgICAgPGxpPjxhIGhyZWY9Ii4uLy4uLy4uL3RlY2hub3Rlcy9ndWlkZXMvY29sbGVjdGlvbnMvb3ZlcnZpZXcuaHRtbCI+PGI+Q29sbGVjdGlvbnMgRnJhbWV3b3JrIE92ZXJ2aWV3PC9iPjwvYT4KKyAgICA8bGk+PGEgaHJlZj0iLi4vLi4vLi4vdGVjaG5vdGVzL2d1aWRlcy9jb2xsZWN0aW9ucy9yZWZlcmVuY2UuaHRtbCI+PGI+CisgICAgICBDb2xsZWN0aW9ucyBGcmFtZXdvcmsgQW5ub3RhdGVkIE91dGxpbmU8L2I+PC9hPgorICA8L3VsPgorCisgIDxoMj5SZWxhdGVkIERvY3VtZW50YXRpb248L2gyPgorICBGb3Igb3ZlcnZpZXdzLCB0dXRvcmlhbHMsIGV4YW1wbGVzLCBndWlkZXMsIGFuZCB0b29sIGRvY3VtZW50YXRpb24sIHBsZWFzZSBzZWU6CisgIDx1bD4KKyAgICA8bGk+PGEgaHJlZj0iaHR0cDovL3d3dy5qYXZhLnN1bi5jb20vZG9jcy9ib29rcy90dXRvcmlhbC9jb2xsZWN0aW9ucy8iPgorICAgICAgPGI+Q29sbGVjdGlvbnMgRnJhbWV3b3JrIFR1dG9yaWFsPC9iPjwvYT4KKyAgICA8bGk+PGEKKyAgICAgICAgaHJlZj0iLi4vLi4vLi4vdGVjaG5vdGVzL2d1aWRlcy9jb2xsZWN0aW9ucy9kZXNpZ25mYXEuaHRtbCI+PGI+Q29sbGVjdGlvbnMKKyAgICAgIEZyYW1ld29yayBEZXNpZ24gRkFRPC9iPjwvYT4KKyAgPC91bD48L2Rpdj4KKzxkbD48ZHQ+PHNwYW4gY2xhc3M9InN0cm9uZyI+U2luY2U6PC9zcGFuPjwvZHQ+CisgIDxkZD5KREsxLjA8L2RkPjwvZGw+Cis8L2Rpdj4KKzwvSFRNTD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZXh0ZXJuYWxKYXZhZG9jL3BhY2thZ2VTdW1tYXJ5L3V0aWwvcGFnZS5odG1sIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2V4dGVybmFsSmF2YWRvYy9wYWNrYWdlU3VtbWFyeS91dGlsL3BhZ2UuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44N2MwODU4Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2V4dGVybmFsSmF2YWRvYy9wYWNrYWdlU3VtbWFyeS91dGlsL3BhZ2UuaHRtbApAQCAtMCwwICsxLDg5NiBAQAorCis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvbG9vc2UuZHRkIj4KKzwhLS0gTmV3UGFnZSAtLT4KKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorICA8IS0tIEdlbmVyYXRlZCBieSBqYXZhZG9jICh2ZXJzaW9uIDEuNi4wXzE0KSBvbiBUaHUgQXByIDEyIDA1OjQ1OjAzIFBEVCAyMDEyIC0tPgorICA8dGl0bGU+amF2YS51dGlsIChKYXZhIFBsYXRmb3JtIFNFIDcgKTwvdGl0bGU+CisgIDxtZXRhIG5hbWU9ImRhdGUiIGNvbnRlbnQ9IjIwMTItMDQtMTIiPgorICA8bWV0YSBuYW1lPSJrZXl3b3JkcyIgY29udGVudD0iamF2YS51dGlsIHBhY2thZ2UiPgorICA8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSIuLi8uLi9zdHlsZXNoZWV0LmNzcyIgdGl0bGU9IlN0eWxlIj4KKzwvaGVhZD4KKzxib2R5PgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPjwhLS0KKyAgICBpZiAobG9jYXRpb24uaHJlZi5pbmRleE9mKCdpcy1leHRlcm5hbD10cnVlJykgPT0gLTEpIHsKKyAgICAgICAgcGFyZW50LmRvY3VtZW50LnRpdGxlPSJqYXZhLnV0aWwgKEphdmEgUGxhdGZvcm0gU0UgNyApIjsKKyAgICB9CisvLy0tPgorPC9zY3JpcHQ+Cis8bm9zY3JpcHQ+CisgIDxkaXY+SmF2YVNjcmlwdCBpcyBkaXNhYmxlZCBvbiB5b3VyIGJyb3dzZXIuPC9kaXY+Cis8L25vc2NyaXB0PgorPCEtLSA9PT09PT09PT0gU1RBUlQgT0YgVE9QIE5BVkJBUiA9PT09PT09IC0tPgorPGRpdiBjbGFzcz0idG9wTmF2Ij48YSBuYW1lPSJuYXZiYXJfdG9wIj4KKyAgPCEtLSAgIC0tPgorPC9hPjxhIGhyZWY9IiNza2lwLW5hdmJhcl90b3AiIHRpdGxlPSJTa2lwIG5hdmlnYXRpb24gbGlua3MiPjwvYT48YSBuYW1lPSJuYXZiYXJfdG9wX2ZpcnN0cm93Ij4KKyAgPCEtLSAgIC0tPgorPC9hPgorICA8dWwgY2xhc3M9Im5hdkxpc3QiIHRpdGxlPSJOYXZpZ2F0aW9uIj4KKyAgICA8bGk+PGEgaHJlZj0iLi4vLi4vb3ZlcnZpZXctc3VtbWFyeS5odG1sIj5PdmVydmlldzwvYT48L2xpPgorICAgIDxsaSBjbGFzcz0ibmF2QmFyQ2VsbDFSZXYiPlBhY2thZ2U8L2xpPgorICAgIDxsaT5DbGFzczwvbGk+CisgICAgPGxpPjxhIGhyZWY9InBhY2thZ2UtdXNlLmh0bWwiPlVzZTwvYT48L2xpPgorICAgIDxsaT48YSBocmVmPSJwYWNrYWdlLXRyZWUuaHRtbCI+VHJlZTwvYT48L2xpPgorICAgIDxsaT48YSBocmVmPSIuLi8uLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+RGVwcmVjYXRlZDwvYT48L2xpPgorICAgIDxsaT48YSBocmVmPSIuLi8uLi9pbmRleC1maWxlcy9pbmRleC0xLmh0bWwiPkluZGV4PC9hPjwvbGk+CisgICAgPGxpPjxhIGhyZWY9Ii4uLy4uL2hlbHAtZG9jLmh0bWwiPkhlbHA8L2E+PC9saT4KKyAgPC91bD4KKyAgPGRpdiBjbGFzcz0iYWJvdXRMYW5ndWFnZSI+PGVtPjxzdHJvbmc+SmF2YSZ0cmFkZTsmbmJzcDtQbGF0Zm9ybTxicj5TdGFuZGFyZCZuYnNwO0VkLiZuYnNwOzc8L3N0cm9uZz48L2VtPjwvZGl2PgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJzdWJOYXYiPgorICA8dWwgY2xhc3M9Im5hdkxpc3QiPgorICAgIDxsaT48YSBocmVmPSIuLi8uLi9qYXZhL3RleHQvc3BpL3BhY2thZ2Utc3VtbWFyeS5odG1sIj5QcmV2IFBhY2thZ2U8L2E+PC9saT4KKyAgICA8bGk+PGEgaHJlZj0iLi4vLi4vamF2YS91dGlsL2NvbmN1cnJlbnQvcGFja2FnZS1zdW1tYXJ5Lmh0bWwiPk5leHQgUGFja2FnZTwvYT48L2xpPgorICA8L3VsPgorICA8dWwgY2xhc3M9Im5hdkxpc3QiPgorICAgIDxsaT48YSBocmVmPSIuLi8uLi9pbmRleC5odG1sP2phdmEvdXRpbC9wYWNrYWdlLXN1bW1hcnkuaHRtbCIgdGFyZ2V0PSJfdG9wIj5GcmFtZXM8L2E+PC9saT4KKyAgICA8bGk+PGEgaHJlZj0icGFja2FnZS1zdW1tYXJ5Lmh0bWwiIHRhcmdldD0iX3RvcCI+Tm8gRnJhbWVzPC9hPjwvbGk+CisgIDwvdWw+CisgIDx1bCBjbGFzcz0ibmF2TGlzdCIgaWQ9ImFsbGNsYXNzZXNfbmF2YmFyX3RvcCI+CisgICAgPGxpPjxhIGhyZWY9Ii4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj5BbGwgQ2xhc3NlczwvYT48L2xpPgorICA8L3VsPgorICA8ZGl2PgorICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij48IS0tCisgIGFsbENsYXNzZXNMaW5rID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImFsbGNsYXNzZXNfbmF2YmFyX3RvcCIpOworICBpZih3aW5kb3c9PXRvcCkgeworICAgIGFsbENsYXNzZXNMaW5rLnN0eWxlLmRpc3BsYXkgPSAiYmxvY2siOworICB9CisgIGVsc2UgeworICAgIGFsbENsYXNzZXNMaW5rLnN0eWxlLmRpc3BsYXkgPSAibm9uZSI7CisgIH0KKyAgLy8tLT4KKyAgICA8L3NjcmlwdD4KKyAgPC9kaXY+CisgIDxhIG5hbWU9InNraXAtbmF2YmFyX3RvcCI+CisgICAgPCEtLSAgIC0tPgorICA8L2E+PC9kaXY+Cis8IS0tID09PT09PT09PSBFTkQgT0YgVE9QIE5BVkJBUiA9PT09PT09PT0gLS0+Cis8ZGl2IGNsYXNzPSJoZWFkZXIiPgorICA8aDEgdGl0bGU9IlBhY2thZ2UiIGNsYXNzPSJ0aXRsZSI+UGFja2FnZSZuYnNwO2phdmEudXRpbDwvaDE+CisgIDxkaXYgY2xhc3M9ImRvY1N1bW1hcnkiPgorICAgIDxkaXYgY2xhc3M9ImJsb2NrIj5Db250YWlucyB0aGUgY29sbGVjdGlvbnMgZnJhbWV3b3JrLCBsZWdhY3kgY29sbGVjdGlvbiBjbGFzc2VzLCBldmVudCBtb2RlbCwKKyAgICAgIGRhdGUgYW5kIHRpbWUgZmFjaWxpdGllcywgaW50ZXJuYXRpb25hbGl6YXRpb24sIGFuZCBtaXNjZWxsYW5lb3VzIHV0aWxpdHkKKyAgICAgIGNsYXNzZXMgKGEgc3RyaW5nIHRva2VuaXplciwgYSByYW5kb20tbnVtYmVyIGdlbmVyYXRvciwgYW5kIGEgYml0IGFycmF5KS48L2Rpdj4KKyAgPC9kaXY+CisgIDxwPlNlZTombmJzcDs8YSBocmVmPSIjcGFja2FnZV9kZXNjcmlwdGlvbiI+RGVzY3JpcHRpb248L2E+PC9wPgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJjb250ZW50Q29udGFpbmVyIj4KKzx1bCBjbGFzcz0iYmxvY2tMaXN0Ij4KKzxsaSBjbGFzcz0iYmxvY2tMaXN0Ij4KKyAgPHRhYmxlIGNsYXNzPSJwYWNrYWdlU3VtbWFyeSIgYm9yZGVyPSIwIiBjZWxscGFkZGluZz0iMyIgY2VsbHNwYWNpbmc9IjAiIHN1bW1hcnk9IkludGVyZmFjZSBTdW1tYXJ5IHRhYmxlLCBsaXN0aW5nIGludGVyZmFjZXMsIGFuZCBhbiBleHBsYW5hdGlvbiI+CisgICAgPGNhcHRpb24+PHNwYW4+SW50ZXJmYWNlIFN1bW1hcnk8L3NwYW4+PHNwYW4gY2xhc3M9InRhYkVuZCI+Jm5ic3A7PC9zcGFuPjwvY2FwdGlvbj4KKyAgICA8dHI+CisgICAgICA8dGggY2xhc3M9ImNvbEZpcnN0IiBzY29wZT0iY29sIj5JbnRlcmZhY2U8L3RoPgorICAgICAgPHRoIGNsYXNzPSJjb2xMYXN0IiBzY29wZT0iY29sIj5EZXNjcmlwdGlvbjwvdGg+CisgICAgPC90cj4KKyAgICA8dGJvZHk+CisgICAgPHRyIGNsYXNzPSJhbHRDb2xvciI+CisgICAgICA8dGQgY2xhc3M9ImNvbEZpcnN0Ij48YSBocmVmPSIuLi8uLi9qYXZhL3V0aWwvQ29sbGVjdGlvbi5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIGphdmEudXRpbCI+Q29sbGVjdGlvbjwvYT4mbHQ7RSZndDs8L3RkPgorICAgICAgPHRkIGNsYXNzPSJjb2xMYXN0Ij4KKyAgICAgICAgPGRpdiBjbGFzcz0iYmxvY2siPlRoZSByb290IGludGVyZmFjZSBpbiB0aGUgPGk+Y29sbGVjdGlvbiBoaWVyYXJjaHk8L2k+LjwvZGl2PgorICAgICAgPC90ZD4KKyAgICA8L3RyPgorICAgIDx0ciBjbGFzcz0icm93Q29sb3IiPgorICAgICAgPHRkIGNsYXNzPSJjb2xGaXJzdCI+PGEgaHJlZj0iLi4vLi4vamF2YS91dGlsL0NvbXBhcmF0b3IuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBqYXZhLnV0aWwiPkNvbXBhcmF0b3I8L2E+Jmx0O1QmZ3Q7PC90ZD4KKyAgICAgIDx0ZCBjbGFzcz0iY29sTGFzdCI+CisgICAgICAgIDxkaXYgY2xhc3M9ImJsb2NrIj5BIGNvbXBhcmlzb24gZnVuY3Rpb24sIHdoaWNoIGltcG9zZXMgYSA8aT50b3RhbCBvcmRlcmluZzwvaT4gb24gc29tZQorICAgICAgICAgIGNvbGxlY3Rpb24gb2Ygb2JqZWN0cy48L2Rpdj4KKyAgICAgIDwvdGQ+CisgICAgPC90cj4KKyAgICA8dHIgY2xhc3M9ImFsdENvbG9yIj4KKyAgICAgIDx0ZCBjbGFzcz0iY29sRmlyc3QiPjxhIGhyZWY9Ii4uLy4uL2phdmEvdXRpbC9EZXF1ZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIGphdmEudXRpbCI+RGVxdWU8L2E+Jmx0O0UmZ3Q7PC90ZD4KKyAgICAgIDx0ZCBjbGFzcz0iY29sTGFzdCI+CisgICAgICAgIDxkaXYgY2xhc3M9ImJsb2NrIj5BIGxpbmVhciBjb2xsZWN0aW9uIHRoYXQgc3VwcG9ydHMgZWxlbWVudCBpbnNlcnRpb24gYW5kIHJlbW92YWwgYXQKKyAgICAgICAgICBib3RoIGVuZHMuPC9kaXY+CisgICAgICA8L3RkPgorICAgIDwvdHI+CisgICAgPHRyIGNsYXNzPSJyb3dDb2xvciI+CisgICAgICA8dGQgY2xhc3M9ImNvbEZpcnN0Ij48YSBocmVmPSIuLi8uLi9qYXZhL3V0aWwvRW51bWVyYXRpb24uaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBqYXZhLnV0aWwiPkVudW1lcmF0aW9uPC9hPiZsdDtFJmd0OzwvdGQ+CisgICAgICA8dGQgY2xhc3M9ImNvbExhc3QiPgorICAgICAgICA8ZGl2IGNsYXNzPSJibG9jayI+QW4gb2JqZWN0IHRoYXQgaW1wbGVtZW50cyB0aGUgRW51bWVyYXRpb24gaW50ZXJmYWNlIGdlbmVyYXRlcyBhCisgICAgICAgICAgc2VyaWVzIG9mIGVsZW1lbnRzLCBvbmUgYXQgYSB0aW1lLjwvZGl2PgorICAgICAgPC90ZD4KKyAgICA8L3RyPgorICAgIDx0ciBjbGFzcz0iYWx0Q29sb3IiPgorICAgICAgPHRkIGNsYXNzPSJjb2xGaXJzdCI+PGEgaHJlZj0iLi4vLi4vamF2YS91dGlsL0V2ZW50TGlzdGVuZXIuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBqYXZhLnV0aWwiPkV2ZW50TGlzdGVuZXI8L2E+PC90ZD4KKyAgICAgIDx0ZCBjbGFzcz0iY29sTGFzdCI+CisgICAgICAgIDxkaXYgY2xhc3M9ImJsb2NrIj5BIHRhZ2dpbmcgaW50ZXJmYWNlIHRoYXQgYWxsIGV2ZW50IGxpc3RlbmVyIGludGVyZmFjZXMgbXVzdCBleHRlbmQuPC9kaXY+CisgICAgICA8L3RkPgorICAgIDwvdHI+CisgICAgPHRyIGNsYXNzPSJyb3dDb2xvciI+CisgICAgICA8dGQgY2xhc3M9ImNvbEZpcnN0Ij48YSBocmVmPSIuLi8uLi9qYXZhL3V0aWwvRm9ybWF0dGFibGUuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBqYXZhLnV0aWwiPkZvcm1hdHRhYmxlPC9hPjwvdGQ+CisgICAgICA8dGQgY2xhc3M9ImNvbExhc3QiPgorICAgICAgICA8ZGl2IGNsYXNzPSJibG9jayI+VGhlIDx0dD5Gb3JtYXR0YWJsZTwvdHQ+IGludGVyZmFjZSBtdXN0IGJlIGltcGxlbWVudGVkIGJ5IGFueSBjbGFzcyB0aGF0CisgICAgICAgICAgbmVlZHMgdG8gcGVyZm9ybSBjdXN0b20gZm9ybWF0dGluZyB1c2luZyB0aGUgPHR0PidzJzwvdHQ+IGNvbnZlcnNpb24KKyAgICAgICAgICBzcGVjaWZpZXIgb2YgPGEgaHJlZj0iLi4vLi4vamF2YS91dGlsL0Zvcm1hdHRlci5odG1sIiB0aXRsZT0iY2xhc3MgaW4gamF2YS51dGlsIj48Y29kZT5Gb3JtYXR0ZXI8L2NvZGU+PC9hPi48L2Rpdj4KKyAgICAgIDwvdGQ+CisgICAgPC90cj4KKyAgICA8dHIgY2xhc3M9ImFsdENvbG9yIj4KKyAgICAgIDx0ZCBjbGFzcz0iY29sRmlyc3QiPjxhIGhyZWY9Ii4uLy4uL2phdmEvdXRpbC9JdGVyYXRvci5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIGphdmEudXRpbCI+SXRlcmF0b3I8L2E+Jmx0O0UmZ3Q7PC90ZD4KKyAgICAgIDx0ZCBjbGFzcz0iY29sTGFzdCI+CisgICAgICAgIDxkaXYgY2xhc3M9ImJsb2NrIj5BbiBpdGVyYXRvciBvdmVyIGEgY29sbGVjdGlvbi48L2Rpdj4KKyAgICAgIDwvdGQ+CisgICAgPC90cj4KKyAgICA8dHIgY2xhc3M9InJvd0NvbG9yIj4KKyAgICAgIDx0ZCBjbGFzcz0iY29sRmlyc3QiPjxhIGhyZWY9Ii4uLy4uL2phdmEvdXRpbC9MaXN0Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gamF2YS51dGlsIj5MaXN0PC9hPiZsdDtFJmd0OzwvdGQ+CisgICAgICA8dGQgY2xhc3M9ImNvbExhc3QiPgorICAgICAgICA8ZGl2IGNsYXNzPSJibG9jayI+QW4gb3JkZXJlZCBjb2xsZWN0aW9uIChhbHNvIGtub3duIGFzIGEgPGk+c2VxdWVuY2U8L2k+KS48L2Rpdj4KKyAgICAgIDwvdGQ+CisgICAgPC90cj4KKyAgICA8dHIgY2xhc3M9ImFsdENvbG9yIj4KKyAgICAgIDx0ZCBjbGFzcz0iY29sRmlyc3QiPjxhIGhyZWY9Ii4uLy4uL2phdmEvdXRpbC9MaXN0SXRlcmF0b3IuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBqYXZhLnV0aWwiPkxpc3RJdGVyYXRvcjwvYT4mbHQ7RSZndDs8L3RkPgorICAgICAgPHRkIGNsYXNzPSJjb2xMYXN0Ij4KKyAgICAgICAgPGRpdiBjbGFzcz0iYmxvY2siPkFuIGl0ZXJhdG9yIGZvciBsaXN0cyB0aGF0IGFsbG93cyB0aGUgcHJvZ3JhbW1lcgorICAgICAgICAgIHRvIHRyYXZlcnNlIHRoZSBsaXN0IGluIGVpdGhlciBkaXJlY3Rpb24sIG1vZGlmeQorICAgICAgICAgIHRoZSBsaXN0IGR1cmluZyBpdGVyYXRpb24sIGFuZCBvYnRhaW4gdGhlIGl0ZXJhdG9yJ3MKKyAgICAgICAgICBjdXJyZW50IHBvc2l0aW9uIGluIHRoZSBsaXN0LjwvZGl2PgorICAgICAgPC90ZD4KKyAgICA8L3RyPgorICAgIDx0ciBjbGFzcz0icm93Q29sb3IiPgorICAgICAgPHRkIGNsYXNzPSJjb2xGaXJzdCI+PGEgaHJlZj0iLi4vLi4vamF2YS91dGlsL01hcC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIGphdmEudXRpbCI+TWFwPC9hPiZsdDtLLFYmZ3Q7PC90ZD4KKyAgICAgIDx0ZCBjbGFzcz0iY29sTGFzdCI+CisgICAgICAgIDxkaXYgY2xhc3M9ImJsb2NrIj5BbiBvYmplY3QgdGhhdCBtYXBzIGtleXMgdG8gdmFsdWVzLjwvZGl2PgorICAgICAgPC90ZD4KKyAgICA8L3RyPgorICAgIDx0ciBjbGFzcz0iYWx0Q29sb3IiPgorICAgICAgPHRkIGNsYXNzPSJjb2xGaXJzdCI+PGEgaHJlZj0iLi4vLi4vamF2YS91dGlsL01hcC5FbnRyeS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIGphdmEudXRpbCI+TWFwLkVudHJ5PC9hPiZsdDtLLFYmZ3Q7PC90ZD4KKyAgICAgIDx0ZCBjbGFzcz0iY29sTGFzdCI+CisgICAgICAgIDxkaXYgY2xhc3M9ImJsb2NrIj5BIG1hcCBlbnRyeSAoa2V5LXZhbHVlIHBhaXIpLjwvZGl2PgorICAgICAgPC90ZD4KKyAgICA8L3RyPgorICAgIDx0ciBjbGFzcz0icm93Q29sb3IiPgorICAgICAgPHRkIGNsYXNzPSJjb2xGaXJzdCI+PGEgaHJlZj0iLi4vLi4vamF2YS91dGlsL05hdmlnYWJsZU1hcC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIGphdmEudXRpbCI+TmF2aWdhYmxlTWFwPC9hPiZsdDtLLFYmZ3Q7PC90ZD4KKyAgICAgIDx0ZCBjbGFzcz0iY29sTGFzdCI+CisgICAgICAgIDxkaXYgY2xhc3M9ImJsb2NrIj5BIDxhIGhyZWY9Ii4uLy4uL2phdmEvdXRpbC9Tb3J0ZWRNYXAuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBqYXZhLnV0aWwiPjxjb2RlPlNvcnRlZE1hcDwvY29kZT48L2E+IGV4dGVuZGVkIHdpdGggbmF2aWdhdGlvbiBtZXRob2RzIHJldHVybmluZyB0aGUKKyAgICAgICAgICBjbG9zZXN0IG1hdGNoZXMgZm9yIGdpdmVuIHNlYXJjaCB0YXJnZXRzLjwvZGl2PgorICAgICAgPC90ZD4KKyAgICA8L3RyPgorICAgIDx0ciBjbGFzcz0iYWx0Q29sb3IiPgorICAgICAgPHRkIGNsYXNzPSJjb2xGaXJzdCI+PGEgaHJlZj0iLi4vLi4vamF2YS91dGlsL05hdmlnYWJsZVNldC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIGphdmEudXRpbCI+TmF2aWdhYmxlU2V0PC9hPiZsdDtFJmd0OzwvdGQ+CisgICAgICA8dGQgY2xhc3M9ImNvbExhc3QiPgorICAgICAgICA8ZGl2IGNsYXNzPSJibG9jayI+QSA8YSBocmVmPSIuLi8uLi9qYXZhL3V0aWwvU29ydGVkU2V0Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gamF2YS51dGlsIj48Y29kZT5Tb3J0ZWRTZXQ8L2NvZGU+PC9hPiBleHRlbmRlZCB3aXRoIG5hdmlnYXRpb24gbWV0aG9kcyByZXBvcnRpbmcKKyAgICAgICAgICBjbG9zZXN0IG1hdGNoZXMgZm9yIGdpdmVuIHNlYXJjaCB0YXJnZXRzLjwvZGl2PgorICAgICAgPC90ZD4KKyAgICA8L3RyPgorICAgIDx0ciBjbGFzcz0icm93Q29sb3IiPgorICAgICAgPHRkIGNsYXNzPSJjb2xGaXJzdCI+PGEgaHJlZj0iLi4vLi4vamF2YS91dGlsL09ic2VydmVyLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gamF2YS51dGlsIj5PYnNlcnZlcjwvYT48L3RkPgorICAgICAgPHRkIGNsYXNzPSJjb2xMYXN0Ij4KKyAgICAgICAgPGRpdiBjbGFzcz0iYmxvY2siPkEgY2xhc3MgY2FuIGltcGxlbWVudCB0aGUgPGNvZGU+T2JzZXJ2ZXI8L2NvZGU+IGludGVyZmFjZSB3aGVuIGl0CisgICAgICAgICAgd2FudHMgdG8gYmUgaW5mb3JtZWQgb2YgY2hhbmdlcyBpbiBvYnNlcnZhYmxlIG9iamVjdHMuPC9kaXY+CisgICAgICA8L3RkPgorICAgIDwvdHI+CisgICAgPHRyIGNsYXNzPSJhbHRDb2xvciI+CisgICAgICA8dGQgY2xhc3M9ImNvbEZpcnN0Ij48YSBocmVmPSIuLi8uLi9qYXZhL3V0aWwvUXVldWUuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBqYXZhLnV0aWwiPlF1ZXVlPC9hPiZsdDtFJmd0OzwvdGQ+CisgICAgICA8dGQgY2xhc3M9ImNvbExhc3QiPgorICAgICAgICA8ZGl2IGNsYXNzPSJibG9jayI+QSBjb2xsZWN0aW9uIGRlc2lnbmVkIGZvciBob2xkaW5nIGVsZW1lbnRzIHByaW9yIHRvIHByb2Nlc3NpbmcuPC9kaXY+CisgICAgICA8L3RkPgorICAgIDwvdHI+CisgICAgPHRyIGNsYXNzPSJyb3dDb2xvciI+CisgICAgICA8dGQgY2xhc3M9ImNvbEZpcnN0Ij48YSBocmVmPSIuLi8uLi9qYXZhL3V0aWwvUmFuZG9tQWNjZXNzLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gamF2YS51dGlsIj5SYW5kb21BY2Nlc3M8L2E+PC90ZD4KKyAgICAgIDx0ZCBjbGFzcz0iY29sTGFzdCI+CisgICAgICAgIDxkaXYgY2xhc3M9ImJsb2NrIj5NYXJrZXIgaW50ZXJmYWNlIHVzZWQgYnkgPHR0Pkxpc3Q8L3R0PiBpbXBsZW1lbnRhdGlvbnMgdG8gaW5kaWNhdGUgdGhhdAorICAgICAgICAgIHRoZXkgc3VwcG9ydCBmYXN0IChnZW5lcmFsbHkgY29uc3RhbnQgdGltZSkgcmFuZG9tIGFjY2Vzcy48L2Rpdj4KKyAgICAgIDwvdGQ+CisgICAgPC90cj4KKyAgICA8dHIgY2xhc3M9ImFsdENvbG9yIj4KKyAgICAgIDx0ZCBjbGFzcz0iY29sRmlyc3QiPjxhIGhyZWY9Ii4uLy4uL2phdmEvdXRpbC9TZXQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBqYXZhLnV0aWwiPlNldDwvYT4mbHQ7RSZndDs8L3RkPgorICAgICAgPHRkIGNsYXNzPSJjb2xMYXN0Ij4KKyAgICAgICAgPGRpdiBjbGFzcz0iYmxvY2siPkEgY29sbGVjdGlvbiB0aGF0IGNvbnRhaW5zIG5vIGR1cGxpY2F0ZSBlbGVtZW50cy48L2Rpdj4KKyAgICAgIDwvdGQ+CisgICAgPC90cj4KKyAgICA8dHIgY2xhc3M9InJvd0NvbG9yIj4KKyAgICAgIDx0ZCBjbGFzcz0iY29sRmlyc3QiPjxhIGhyZWY9Ii4uLy4uL2phdmEvdXRpbC9Tb3J0ZWRNYXAuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBqYXZhLnV0aWwiPlNvcnRlZE1hcDwvYT4mbHQ7SyxWJmd0OzwvdGQ+CisgICAgICA8dGQgY2xhc3M9ImNvbExhc3QiPgorICAgICAgICA8ZGl2IGNsYXNzPSJibG9jayI+QSA8YSBocmVmPSIuLi8uLi9qYXZhL3V0aWwvTWFwLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gamF2YS51dGlsIj48Y29kZT5NYXA8L2NvZGU+PC9hPiB0aGF0IGZ1cnRoZXIgcHJvdmlkZXMgYSA8ZW0+dG90YWwgb3JkZXJpbmc8L2VtPiBvbiBpdHMga2V5cy48L2Rpdj4KKyAgICAgIDwvdGQ+CisgICAgPC90cj4KKyAgICA8dHIgY2xhc3M9ImFsdENvbG9yIj4KKyAgICAgIDx0ZCBjbGFzcz0iY29sRmlyc3QiPjxhIGhyZWY9Ii4uLy4uL2phdmEvdXRpbC9Tb3J0ZWRTZXQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBqYXZhLnV0aWwiPlNvcnRlZFNldDwvYT4mbHQ7RSZndDs8L3RkPgorICAgICAgPHRkIGNsYXNzPSJjb2xMYXN0Ij4KKyAgICAgICAgPGRpdiBjbGFzcz0iYmxvY2siPkEgPGEgaHJlZj0iLi4vLi4vamF2YS91dGlsL1NldC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIGphdmEudXRpbCI+PGNvZGU+U2V0PC9jb2RlPjwvYT4gdGhhdCBmdXJ0aGVyIHByb3ZpZGVzIGEgPGk+dG90YWwgb3JkZXJpbmc8L2k+IG9uIGl0cyBlbGVtZW50cy48L2Rpdj4KKyAgICAgIDwvdGQ+CisgICAgPC90cj4KKyAgICA8L3Rib2R5PgorICA8L3RhYmxlPgorPC9saT4KKzxsaSBjbGFzcz0iYmxvY2tMaXN0Ij4KKzx0YWJsZSBjbGFzcz0icGFja2FnZVN1bW1hcnkiIGJvcmRlcj0iMCIgY2VsbHBhZGRpbmc9IjMiIGNlbGxzcGFjaW5nPSIwIiBzdW1tYXJ5PSJDbGFzcyBTdW1tYXJ5IHRhYmxlLCBsaXN0aW5nIGNsYXNzZXMsIGFuZCBhbiBleHBsYW5hdGlvbiI+Cis8Y2FwdGlvbj48c3Bhbj5DbGFzcyBTdW1tYXJ5PC9zcGFuPjxzcGFuIGNsYXNzPSJ0YWJFbmQiPiZuYnNwOzwvc3Bhbj48L2NhcHRpb24+Cis8dHI+CisgIDx0aCBjbGFzcz0iY29sRmlyc3QiIHNjb3BlPSJjb2wiPkNsYXNzPC90aD4KKyAgPHRoIGNsYXNzPSJjb2xMYXN0IiBzY29wZT0iY29sIj5EZXNjcmlwdGlvbjwvdGg+Cis8L3RyPgorPHRib2R5PgorPHRyIGNsYXNzPSJhbHRDb2xvciI+CisgIDx0ZCBjbGFzcz0iY29sRmlyc3QiPjxhIGhyZWY9Ii4uLy4uL2phdmEvdXRpbC9BYnN0cmFjdENvbGxlY3Rpb24uaHRtbCIgdGl0bGU9ImNsYXNzIGluIGphdmEudXRpbCI+QWJzdHJhY3RDb2xsZWN0aW9uPC9hPiZsdDtFJmd0OzwvdGQ+CisgIDx0ZCBjbGFzcz0iY29sTGFzdCI+CisgICAgPGRpdiBjbGFzcz0iYmxvY2siPlRoaXMgY2xhc3MgcHJvdmlkZXMgYSBza2VsZXRhbCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgPHR0PkNvbGxlY3Rpb248L3R0PgorICAgICAgaW50ZXJmYWNlLCB0byBtaW5pbWl6ZSB0aGUgZWZmb3J0IHJlcXVpcmVkIHRvIGltcGxlbWVudCB0aGlzIGludGVyZmFjZS48L2Rpdj4KKyAgPC90ZD4KKzwvdHI+Cis8dHIgY2xhc3M9InJvd0NvbG9yIj4KKyAgPHRkIGNsYXNzPSJjb2xGaXJzdCI+PGEgaHJlZj0iLi4vLi4vamF2YS91dGlsL0Fic3RyYWN0TGlzdC5odG1sIiB0aXRsZT0iY2xhc3MgaW4gamF2YS51dGlsIj5BYnN0cmFjdExpc3Q8L2E+Jmx0O0UmZ3Q7PC90ZD4KKyAgPHRkIGNsYXNzPSJjb2xMYXN0Ij4KKyAgICA8ZGl2IGNsYXNzPSJibG9jayI+VGhpcyBjbGFzcyBwcm92aWRlcyBhIHNrZWxldGFsIGltcGxlbWVudGF0aW9uIG9mIHRoZSA8YSBocmVmPSIuLi8uLi9qYXZhL3V0aWwvTGlzdC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIGphdmEudXRpbCI+PGNvZGU+TGlzdDwvY29kZT48L2E+CisgICAgICBpbnRlcmZhY2UgdG8gbWluaW1pemUgdGhlIGVmZm9ydCByZXF1aXJlZCB0byBpbXBsZW1lbnQgdGhpcyBpbnRlcmZhY2UKKyAgICAgIGJhY2tlZCBieSBhICJyYW5kb20gYWNjZXNzIiBkYXRhIHN0b3JlIChzdWNoIGFzIGFuIGFycmF5KS48L2Rpdj4KKyAgPC90ZD4KKzwvdHI+Cis8dHIgY2xhc3M9ImFsdENvbG9yIj4KKyAgPHRkIGNsYXNzPSJjb2xGaXJzdCI+PGEgaHJlZj0iLi4vLi4vamF2YS91dGlsL0Fic3RyYWN0TWFwLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBqYXZhLnV0aWwiPkFic3RyYWN0TWFwPC9hPiZsdDtLLFYmZ3Q7PC90ZD4KKyAgPHRkIGNsYXNzPSJjb2xMYXN0Ij4KKyAgICA8ZGl2IGNsYXNzPSJibG9jayI+VGhpcyBjbGFzcyBwcm92aWRlcyBhIHNrZWxldGFsIGltcGxlbWVudGF0aW9uIG9mIHRoZSA8dHQ+TWFwPC90dD4KKyAgICAgIGludGVyZmFjZSwgdG8gbWluaW1pemUgdGhlIGVmZm9ydCByZXF1aXJlZCB0byBpbXBsZW1lbnQgdGhpcyBpbnRlcmZhY2UuPC9kaXY+CisgIDwvdGQ+Cis8L3RyPgorPHRyIGNsYXNzPSJyb3dDb2xvciI+CisgIDx0ZCBjbGFzcz0iY29sRmlyc3QiPjxhIGhyZWY9Ii4uLy4uL2phdmEvdXRpbC9BYnN0cmFjdE1hcC5TaW1wbGVFbnRyeS5odG1sIiB0aXRsZT0iY2xhc3MgaW4gamF2YS51dGlsIj5BYnN0cmFjdE1hcC5TaW1wbGVFbnRyeTwvYT4mbHQ7SyxWJmd0OzwvdGQ+CisgIDx0ZCBjbGFzcz0iY29sTGFzdCI+CisgICAgPGRpdiBjbGFzcz0iYmxvY2siPkFuIEVudHJ5IG1haW50YWluaW5nIGEga2V5IGFuZCBhIHZhbHVlLjwvZGl2PgorICA8L3RkPgorPC90cj4KKzx0ciBjbGFzcz0iYWx0Q29sb3IiPgorICA8dGQgY2xhc3M9ImNvbEZpcnN0Ij48YSBocmVmPSIuLi8uLi9qYXZhL3V0aWwvQWJzdHJhY3RNYXAuU2ltcGxlSW1tdXRhYmxlRW50cnkuaHRtbCIgdGl0bGU9ImNsYXNzIGluIGphdmEudXRpbCI+QWJzdHJhY3RNYXAuU2ltcGxlSW1tdXRhYmxlRW50cnk8L2E+Jmx0O0ssViZndDs8L3RkPgorICA8dGQgY2xhc3M9ImNvbExhc3QiPgorICAgIDxkaXYgY2xhc3M9ImJsb2NrIj5BbiBFbnRyeSBtYWludGFpbmluZyBhbiBpbW11dGFibGUga2V5IGFuZCB2YWx1ZS48L2Rpdj4KKyAgPC90ZD4KKzwvdHI+Cis8dHIgY2xhc3M9InJvd0NvbG9yIj4KKyAgPHRkIGNsYXNzPSJjb2xGaXJzdCI+PGEgaHJlZj0iLi4vLi4vamF2YS91dGlsL0Fic3RyYWN0UXVldWUuaHRtbCIgdGl0bGU9ImNsYXNzIGluIGphdmEudXRpbCI+QWJzdHJhY3RRdWV1ZTwvYT4mbHQ7RSZndDs8L3RkPgorICA8dGQgY2xhc3M9ImNvbExhc3QiPgorICAgIDxkaXYgY2xhc3M9ImJsb2NrIj5UaGlzIGNsYXNzIHByb3ZpZGVzIHNrZWxldGFsIGltcGxlbWVudGF0aW9ucyBvZiBzb21lIDxhIGhyZWY9Ii4uLy4uL2phdmEvdXRpbC9RdWV1ZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIGphdmEudXRpbCI+PGNvZGU+UXVldWU8L2NvZGU+PC9hPgorICAgICAgb3BlcmF0aW9ucy48L2Rpdj4KKyAgPC90ZD4KKzwvdHI+Cis8dHIgY2xhc3M9ImFsdENvbG9yIj4KKyAgPHRkIGNsYXNzPSJjb2xGaXJzdCI+PGEgaHJlZj0iLi4vLi4vamF2YS91dGlsL0Fic3RyYWN0U2VxdWVudGlhbExpc3QuaHRtbCIgdGl0bGU9ImNsYXNzIGluIGphdmEudXRpbCI+QWJzdHJhY3RTZXF1ZW50aWFsTGlzdDwvYT4mbHQ7RSZndDs8L3RkPgorICA8dGQgY2xhc3M9ImNvbExhc3QiPgorICAgIDxkaXYgY2xhc3M9ImJsb2NrIj5UaGlzIGNsYXNzIHByb3ZpZGVzIGEgc2tlbGV0YWwgaW1wbGVtZW50YXRpb24gb2YgdGhlIDx0dD5MaXN0PC90dD4KKyAgICAgIGludGVyZmFjZSB0byBtaW5pbWl6ZSB0aGUgZWZmb3J0IHJlcXVpcmVkIHRvIGltcGxlbWVudCB0aGlzIGludGVyZmFjZQorICAgICAgYmFja2VkIGJ5IGEgInNlcXVlbnRpYWwgYWNjZXNzIiBkYXRhIHN0b3JlIChzdWNoIGFzIGEgbGlua2VkIGxpc3QpLjwvZGl2PgorICA8L3RkPgorPC90cj4KKzx0ciBjbGFzcz0icm93Q29sb3IiPgorICA8dGQgY2xhc3M9ImNvbEZpcnN0Ij48YSBocmVmPSIuLi8uLi9qYXZhL3V0aWwvQWJzdHJhY3RTZXQuaHRtbCIgdGl0bGU9ImNsYXNzIGluIGphdmEudXRpbCI+QWJzdHJhY3RTZXQ8L2E+Jmx0O0UmZ3Q7PC90ZD4KKyAgPHRkIGNsYXNzPSJjb2xMYXN0Ij4KKyAgICA8ZGl2IGNsYXNzPSJibG9jayI+VGhpcyBjbGFzcyBwcm92aWRlcyBhIHNrZWxldGFsIGltcGxlbWVudGF0aW9uIG9mIHRoZSA8dHQ+U2V0PC90dD4KKyAgICAgIGludGVyZmFjZSB0byBtaW5pbWl6ZSB0aGUgZWZmb3J0IHJlcXVpcmVkIHRvIGltcGxlbWVudCB0aGlzCisgICAgICBpbnRlcmZhY2UuPC9kaXY+CisgIDwvdGQ+Cis8L3RyPgorPHRyIGNsYXNzPSJhbHRDb2xvciI+CisgIDx0ZCBjbGFzcz0iY29sRmlyc3QiPjxhIGhyZWY9Ii4uLy4uL2phdmEvdXRpbC9BcnJheURlcXVlLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBqYXZhLnV0aWwiPkFycmF5RGVxdWU8L2E+Jmx0O0UmZ3Q7PC90ZD4KKyAgPHRkIGNsYXNzPSJjb2xMYXN0Ij4KKyAgICA8ZGl2IGNsYXNzPSJibG9jayI+UmVzaXphYmxlLWFycmF5IGltcGxlbWVudGF0aW9uIG9mIHRoZSA8YSBocmVmPSIuLi8uLi9qYXZhL3V0aWwvRGVxdWUuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBqYXZhLnV0aWwiPjxjb2RlPkRlcXVlPC9jb2RlPjwvYT4gaW50ZXJmYWNlLjwvZGl2PgorICA8L3RkPgorPC90cj4KKzx0ciBjbGFzcz0icm93Q29sb3IiPgorICA8dGQgY2xhc3M9ImNvbEZpcnN0Ij48YSBocmVmPSIuLi8uLi9qYXZhL3V0aWwvQXJyYXlMaXN0Lmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBqYXZhLnV0aWwiPkFycmF5TGlzdDwvYT4mbHQ7RSZndDs8L3RkPgorICA8dGQgY2xhc3M9ImNvbExhc3QiPgorICAgIDxkaXYgY2xhc3M9ImJsb2NrIj5SZXNpemFibGUtYXJyYXkgaW1wbGVtZW50YXRpb24gb2YgdGhlIDx0dD5MaXN0PC90dD4gaW50ZXJmYWNlLjwvZGl2PgorICA8L3RkPgorPC90cj4KKzx0ciBjbGFzcz0iYWx0Q29sb3IiPgorICA8dGQgY2xhc3M9ImNvbEZpcnN0Ij48YSBocmVmPSIuLi8uLi9qYXZhL3V0aWwvQXJyYXlzLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBqYXZhLnV0aWwiPkFycmF5czwvYT48L3RkPgorICA8dGQgY2xhc3M9ImNvbExhc3QiPgorICAgIDxkaXYgY2xhc3M9ImJsb2NrIj5UaGlzIGNsYXNzIGNvbnRhaW5zIHZhcmlvdXMgbWV0aG9kcyBmb3IgbWFuaXB1bGF0aW5nIGFycmF5cyAoc3VjaCBhcworICAgICAgc29ydGluZyBhbmQgc2VhcmNoaW5nKS48L2Rpdj4KKyAgPC90ZD4KKzwvdHI+Cis8dHIgY2xhc3M9InJvd0NvbG9yIj4KKyAgPHRkIGNsYXNzPSJjb2xGaXJzdCI+PGEgaHJlZj0iLi4vLi4vamF2YS91dGlsL0JpdFNldC5odG1sIiB0aXRsZT0iY2xhc3MgaW4gamF2YS51dGlsIj5CaXRTZXQ8L2E+PC90ZD4KKyAgPHRkIGNsYXNzPSJjb2xMYXN0Ij4KKyAgICA8ZGl2IGNsYXNzPSJibG9jayI+VGhpcyBjbGFzcyBpbXBsZW1lbnRzIGEgdmVjdG9yIG9mIGJpdHMgdGhhdCBncm93cyBhcyBuZWVkZWQuPC9kaXY+CisgIDwvdGQ+Cis8L3RyPgorPHRyIGNsYXNzPSJhbHRDb2xvciI+CisgIDx0ZCBjbGFzcz0iY29sRmlyc3QiPjxhIGhyZWY9Ii4uLy4uL2phdmEvdXRpbC9DYWxlbmRhci5odG1sIiB0aXRsZT0iY2xhc3MgaW4gamF2YS51dGlsIj5DYWxlbmRhcjwvYT48L3RkPgorICA8dGQgY2xhc3M9ImNvbExhc3QiPgorICAgIDxkaXYgY2xhc3M9ImJsb2NrIj5UaGUgPGNvZGU+Q2FsZW5kYXI8L2NvZGU+IGNsYXNzIGlzIGFuIGFic3RyYWN0IGNsYXNzIHRoYXQgcHJvdmlkZXMgbWV0aG9kcworICAgICAgZm9yIGNvbnZlcnRpbmcgYmV0d2VlbiBhIHNwZWNpZmljIGluc3RhbnQgaW4gdGltZSBhbmQgYSBzZXQgb2YgPGEgaHJlZj0iLi4vLi4vamF2YS91dGlsL0NhbGVuZGFyLmh0bWwjZmllbGRzIj48Y29kZT5jYWxlbmRhciBmaWVsZHM8L2NvZGU+PC9hPiBzdWNoIGFzIDxjb2RlPllFQVI8L2NvZGU+LCA8Y29kZT5NT05USDwvY29kZT4sCisgICAgICA8Y29kZT5EQVlfT0ZfTU9OVEg8L2NvZGU+LCA8Y29kZT5IT1VSPC9jb2RlPiwgYW5kIHNvIG9uLCBhbmQgZm9yCisgICAgICBtYW5pcHVsYXRpbmcgdGhlIGNhbGVuZGFyIGZpZWxkcywgc3VjaCBhcyBnZXR0aW5nIHRoZSBkYXRlIG9mIHRoZSBuZXh0CisgICAgICB3ZWVrLjwvZGl2PgorICA8L3RkPgorPC90cj4KKzx0ciBjbGFzcz0icm93Q29sb3IiPgorICA8dGQgY2xhc3M9ImNvbEZpcnN0Ij48YSBocmVmPSIuLi8uLi9qYXZhL3V0aWwvQ29sbGVjdGlvbnMuaHRtbCIgdGl0bGU9ImNsYXNzIGluIGphdmEudXRpbCI+Q29sbGVjdGlvbnM8L2E+PC90ZD4KKyAgPHRkIGNsYXNzPSJjb2xMYXN0Ij4KKyAgICA8ZGl2IGNsYXNzPSJibG9jayI+VGhpcyBjbGFzcyBjb25zaXN0cyBleGNsdXNpdmVseSBvZiBzdGF0aWMgbWV0aG9kcyB0aGF0IG9wZXJhdGUgb24gb3IgcmV0dXJuCisgICAgICBjb2xsZWN0aW9ucy48L2Rpdj4KKyAgPC90ZD4KKzwvdHI+Cis8dHIgY2xhc3M9ImFsdENvbG9yIj4KKyAgPHRkIGNsYXNzPSJjb2xGaXJzdCI+PGEgaHJlZj0iLi4vLi4vamF2YS91dGlsL0N1cnJlbmN5Lmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBqYXZhLnV0aWwiPkN1cnJlbmN5PC9hPjwvdGQ+CisgIDx0ZCBjbGFzcz0iY29sTGFzdCI+CisgICAgPGRpdiBjbGFzcz0iYmxvY2siPlJlcHJlc2VudHMgYSBjdXJyZW5jeS48L2Rpdj4KKyAgPC90ZD4KKzwvdHI+Cis8dHIgY2xhc3M9InJvd0NvbG9yIj4KKyAgPHRkIGNsYXNzPSJjb2xGaXJzdCI+PGEgaHJlZj0iLi4vLi4vamF2YS91dGlsL0RhdGUuaHRtbCIgdGl0bGU9ImNsYXNzIGluIGphdmEudXRpbCI+RGF0ZTwvYT48L3RkPgorICA8dGQgY2xhc3M9ImNvbExhc3QiPgorICAgIDxkaXYgY2xhc3M9ImJsb2NrIj5UaGUgY2xhc3MgPGNvZGU+RGF0ZTwvY29kZT4gcmVwcmVzZW50cyBhIHNwZWNpZmljIGluc3RhbnQKKyAgICAgIGluIHRpbWUsIHdpdGggbWlsbGlzZWNvbmQgcHJlY2lzaW9uLjwvZGl2PgorICA8L3RkPgorPC90cj4KKzx0ciBjbGFzcz0iYWx0Q29sb3IiPgorICA8dGQgY2xhc3M9ImNvbEZpcnN0Ij48YSBocmVmPSIuLi8uLi9qYXZhL3V0aWwvRGljdGlvbmFyeS5odG1sIiB0aXRsZT0iY2xhc3MgaW4gamF2YS51dGlsIj5EaWN0aW9uYXJ5PC9hPiZsdDtLLFYmZ3Q7PC90ZD4KKyAgPHRkIGNsYXNzPSJjb2xMYXN0Ij4KKyAgICA8ZGl2IGNsYXNzPSJibG9jayI+VGhlIDxjb2RlPkRpY3Rpb25hcnk8L2NvZGU+IGNsYXNzIGlzIHRoZSBhYnN0cmFjdCBwYXJlbnQgb2YgYW55CisgICAgICBjbGFzcywgc3VjaCBhcyA8Y29kZT5IYXNodGFibGU8L2NvZGU+LCB3aGljaCBtYXBzIGtleXMgdG8gdmFsdWVzLjwvZGl2PgorICA8L3RkPgorPC90cj4KKzx0ciBjbGFzcz0icm93Q29sb3IiPgorICA8dGQgY2xhc3M9ImNvbEZpcnN0Ij48YSBocmVmPSIuLi8uLi9qYXZhL3V0aWwvRW51bU1hcC5odG1sIiB0aXRsZT0iY2xhc3MgaW4gamF2YS51dGlsIj5FbnVtTWFwPC9hPiZsdDtLIGV4dGVuZHMgPGEgaHJlZj0iLi4vLi4vamF2YS9sYW5nL0VudW0uaHRtbCIgdGl0bGU9ImNsYXNzIGluIGphdmEubGFuZyI+RW51bTwvYT4mbHQ7SyZndDssViZndDs8L3RkPgorICA8dGQgY2xhc3M9ImNvbExhc3QiPgorICAgIDxkaXYgY2xhc3M9ImJsb2NrIj5BIHNwZWNpYWxpemVkIDxhIGhyZWY9Ii4uLy4uL2phdmEvdXRpbC9NYXAuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBqYXZhLnV0aWwiPjxjb2RlPk1hcDwvY29kZT48L2E+IGltcGxlbWVudGF0aW9uIGZvciB1c2Ugd2l0aCBlbnVtIHR5cGUga2V5cy48L2Rpdj4KKyAgPC90ZD4KKzwvdHI+Cis8dHIgY2xhc3M9ImFsdENvbG9yIj4KKyAgPHRkIGNsYXNzPSJjb2xGaXJzdCI+PGEgaHJlZj0iLi4vLi4vamF2YS91dGlsL0VudW1TZXQuaHRtbCIgdGl0bGU9ImNsYXNzIGluIGphdmEudXRpbCI+RW51bVNldDwvYT4mbHQ7RSBleHRlbmRzIDxhIGhyZWY9Ii4uLy4uL2phdmEvbGFuZy9FbnVtLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBqYXZhLmxhbmciPkVudW08L2E+Jmx0O0UmZ3Q7Jmd0OzwvdGQ+CisgIDx0ZCBjbGFzcz0iY29sTGFzdCI+CisgICAgPGRpdiBjbGFzcz0iYmxvY2siPkEgc3BlY2lhbGl6ZWQgPGEgaHJlZj0iLi4vLi4vamF2YS91dGlsL1NldC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIGphdmEudXRpbCI+PGNvZGU+U2V0PC9jb2RlPjwvYT4gaW1wbGVtZW50YXRpb24gZm9yIHVzZSB3aXRoIGVudW0gdHlwZXMuPC9kaXY+CisgIDwvdGQ+Cis8L3RyPgorPHRyIGNsYXNzPSJyb3dDb2xvciI+CisgIDx0ZCBjbGFzcz0iY29sRmlyc3QiPjxhIGhyZWY9Ii4uLy4uL2phdmEvdXRpbC9FdmVudExpc3RlbmVyUHJveHkuaHRtbCIgdGl0bGU9ImNsYXNzIGluIGphdmEudXRpbCI+RXZlbnRMaXN0ZW5lclByb3h5PC9hPiZsdDtUIGV4dGVuZHMgPGEgaHJlZj0iLi4vLi4vamF2YS91dGlsL0V2ZW50TGlzdGVuZXIuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBqYXZhLnV0aWwiPkV2ZW50TGlzdGVuZXI8L2E+Jmd0OzwvdGQ+CisgIDx0ZCBjbGFzcz0iY29sTGFzdCI+CisgICAgPGRpdiBjbGFzcz0iYmxvY2siPkFuIGFic3RyYWN0IHdyYXBwZXIgY2xhc3MgZm9yIGFuIDxjb2RlPkV2ZW50TGlzdGVuZXI8L2NvZGU+IGNsYXNzCisgICAgICB3aGljaCBhc3NvY2lhdGVzIGEgc2V0IG9mIGFkZGl0aW9uYWwgcGFyYW1ldGVycyB3aXRoIHRoZSBsaXN0ZW5lci48L2Rpdj4KKyAgPC90ZD4KKzwvdHI+Cis8dHIgY2xhc3M9ImFsdENvbG9yIj4KKyAgPHRkIGNsYXNzPSJjb2xGaXJzdCI+PGEgaHJlZj0iLi4vLi4vamF2YS91dGlsL0V2ZW50T2JqZWN0Lmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBqYXZhLnV0aWwiPkV2ZW50T2JqZWN0PC9hPjwvdGQ+CisgIDx0ZCBjbGFzcz0iY29sTGFzdCI+CisgICAgPGRpdiBjbGFzcz0iYmxvY2siPgorICAgICAgVGhlIHJvb3QgY2xhc3MgZnJvbSB3aGljaCBhbGwgZXZlbnQgc3RhdGUgb2JqZWN0cyBzaGFsbCBiZSBkZXJpdmVkLjwvZGl2PgorICA8L3RkPgorPC90cj4KKzx0ciBjbGFzcz0icm93Q29sb3IiPgorICA8dGQgY2xhc3M9ImNvbEZpcnN0Ij48YSBocmVmPSIuLi8uLi9qYXZhL3V0aWwvRm9ybWF0dGFibGVGbGFncy5odG1sIiB0aXRsZT0iY2xhc3MgaW4gamF2YS51dGlsIj5Gb3JtYXR0YWJsZUZsYWdzPC9hPjwvdGQ+CisgIDx0ZCBjbGFzcz0iY29sTGFzdCI+CisgICAgPGRpdiBjbGFzcz0iYmxvY2siPkZvbWF0dGFibGVGbGFncyBhcmUgcGFzc2VkIHRvIHRoZSA8YSBocmVmPSIuLi8uLi9qYXZhL3V0aWwvRm9ybWF0dGFibGUuaHRtbCNmb3JtYXRUbyhqYXZhLnV0aWwuRm9ybWF0dGVyLCBpbnQsIGludCwgaW50KSI+PGNvZGU+Rm9ybWF0dGFibGUuZm9ybWF0VG8oKTwvY29kZT48L2E+IG1ldGhvZCBhbmQgbW9kaWZ5IHRoZSBvdXRwdXQgZm9ybWF0IGZvciA8YSBocmVmPSIuLi8uLi9qYXZhL3V0aWwvRm9ybWF0dGFibGUuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBqYXZhLnV0aWwiPkZvcm1hdHRhYmxlczwvYT4uPC9kaXY+CisgIDwvdGQ+Cis8L3RyPgorPHRyIGNsYXNzPSJhbHRDb2xvciI+CisgIDx0ZCBjbGFzcz0iY29sRmlyc3QiPjxhIGhyZWY9Ii4uLy4uL2phdmEvdXRpbC9Gb3JtYXR0ZXIuaHRtbCIgdGl0bGU9ImNsYXNzIGluIGphdmEudXRpbCI+Rm9ybWF0dGVyPC9hPjwvdGQ+CisgIDx0ZCBjbGFzcz0iY29sTGFzdCI+CisgICAgPGRpdiBjbGFzcz0iYmxvY2siPkFuIGludGVycHJldGVyIGZvciBwcmludGYtc3R5bGUgZm9ybWF0IHN0cmluZ3MuPC9kaXY+CisgIDwvdGQ+Cis8L3RyPgorPHRyIGNsYXNzPSJyb3dDb2xvciI+CisgIDx0ZCBjbGFzcz0iY29sRmlyc3QiPjxhIGhyZWY9Ii4uLy4uL2phdmEvdXRpbC9HcmVnb3JpYW5DYWxlbmRhci5odG1sIiB0aXRsZT0iY2xhc3MgaW4gamF2YS51dGlsIj5HcmVnb3JpYW5DYWxlbmRhcjwvYT48L3RkPgorICA8dGQgY2xhc3M9ImNvbExhc3QiPgorICAgIDxkaXYgY2xhc3M9ImJsb2NrIj48Y29kZT5HcmVnb3JpYW5DYWxlbmRhcjwvY29kZT4gaXMgYSBjb25jcmV0ZSBzdWJjbGFzcyBvZgorICAgICAgPGNvZGU+Q2FsZW5kYXI8L2NvZGU+IGFuZCBwcm92aWRlcyB0aGUgc3RhbmRhcmQgY2FsZW5kYXIgc3lzdGVtCisgICAgICB1c2VkIGJ5IG1vc3Qgb2YgdGhlIHdvcmxkLjwvZGl2PgorICA8L3RkPgorPC90cj4KKzx0ciBjbGFzcz0iYWx0Q29sb3IiPgorICA8dGQgY2xhc3M9ImNvbEZpcnN0Ij48YSBocmVmPSIuLi8uLi9qYXZhL3V0aWwvSGFzaE1hcC5odG1sIiB0aXRsZT0iY2xhc3MgaW4gamF2YS51dGlsIj5IYXNoTWFwPC9hPiZsdDtLLFYmZ3Q7PC90ZD4KKyAgPHRkIGNsYXNzPSJjb2xMYXN0Ij4KKyAgICA8ZGl2IGNsYXNzPSJibG9jayI+SGFzaCB0YWJsZSBiYXNlZCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgPHR0Pk1hcDwvdHQ+IGludGVyZmFjZS48L2Rpdj4KKyAgPC90ZD4KKzwvdHI+Cis8dHIgY2xhc3M9InJvd0NvbG9yIj4KKyAgPHRkIGNsYXNzPSJjb2xGaXJzdCI+PGEgaHJlZj0iLi4vLi4vamF2YS91dGlsL0hhc2hTZXQuaHRtbCIgdGl0bGU9ImNsYXNzIGluIGphdmEudXRpbCI+SGFzaFNldDwvYT4mbHQ7RSZndDs8L3RkPgorICA8dGQgY2xhc3M9ImNvbExhc3QiPgorICAgIDxkaXYgY2xhc3M9ImJsb2NrIj5UaGlzIGNsYXNzIGltcGxlbWVudHMgdGhlIDx0dD5TZXQ8L3R0PiBpbnRlcmZhY2UsIGJhY2tlZCBieSBhIGhhc2ggdGFibGUKKyAgICAgIChhY3R1YWxseSBhIDx0dD5IYXNoTWFwPC90dD4gaW5zdGFuY2UpLjwvZGl2PgorICA8L3RkPgorPC90cj4KKzx0ciBjbGFzcz0iYWx0Q29sb3IiPgorICA8dGQgY2xhc3M9ImNvbEZpcnN0Ij48YSBocmVmPSIuLi8uLi9qYXZhL3V0aWwvSGFzaHRhYmxlLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBqYXZhLnV0aWwiPkhhc2h0YWJsZTwvYT4mbHQ7SyxWJmd0OzwvdGQ+CisgIDx0ZCBjbGFzcz0iY29sTGFzdCI+CisgICAgPGRpdiBjbGFzcz0iYmxvY2siPlRoaXMgY2xhc3MgaW1wbGVtZW50cyBhIGhhc2ggdGFibGUsIHdoaWNoIG1hcHMga2V5cyB0byB2YWx1ZXMuPC9kaXY+CisgIDwvdGQ+Cis8L3RyPgorPHRyIGNsYXNzPSJyb3dDb2xvciI+CisgIDx0ZCBjbGFzcz0iY29sRmlyc3QiPjxhIGhyZWY9Ii4uLy4uL2phdmEvdXRpbC9JZGVudGl0eUhhc2hNYXAuaHRtbCIgdGl0bGU9ImNsYXNzIGluIGphdmEudXRpbCI+SWRlbnRpdHlIYXNoTWFwPC9hPiZsdDtLLFYmZ3Q7PC90ZD4KKyAgPHRkIGNsYXNzPSJjb2xMYXN0Ij4KKyAgICA8ZGl2IGNsYXNzPSJibG9jayI+VGhpcyBjbGFzcyBpbXBsZW1lbnRzIHRoZSA8dHQ+TWFwPC90dD4gaW50ZXJmYWNlIHdpdGggYSBoYXNoIHRhYmxlLCB1c2luZworICAgICAgcmVmZXJlbmNlLWVxdWFsaXR5IGluIHBsYWNlIG9mIG9iamVjdC1lcXVhbGl0eSB3aGVuIGNvbXBhcmluZyBrZXlzIChhbmQKKyAgICAgIHZhbHVlcykuPC9kaXY+CisgIDwvdGQ+Cis8L3RyPgorPHRyIGNsYXNzPSJhbHRDb2xvciI+CisgIDx0ZCBjbGFzcz0iY29sRmlyc3QiPjxhIGhyZWY9Ii4uLy4uL2phdmEvdXRpbC9MaW5rZWRIYXNoTWFwLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBqYXZhLnV0aWwiPkxpbmtlZEhhc2hNYXA8L2E+Jmx0O0ssViZndDs8L3RkPgorICA8dGQgY2xhc3M9ImNvbExhc3QiPgorICAgIDxkaXYgY2xhc3M9ImJsb2NrIj5IYXNoIHRhYmxlIGFuZCBsaW5rZWQgbGlzdCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgPHR0Pk1hcDwvdHQ+IGludGVyZmFjZSwKKyAgICAgIHdpdGggcHJlZGljdGFibGUgaXRlcmF0aW9uIG9yZGVyLjwvZGl2PgorICA8L3RkPgorPC90cj4KKzx0ciBjbGFzcz0icm93Q29sb3IiPgorICA8dGQgY2xhc3M9ImNvbEZpcnN0Ij48YSBocmVmPSIuLi8uLi9qYXZhL3V0aWwvTGlua2VkSGFzaFNldC5odG1sIiB0aXRsZT0iY2xhc3MgaW4gamF2YS51dGlsIj5MaW5rZWRIYXNoU2V0PC9hPiZsdDtFJmd0OzwvdGQ+CisgIDx0ZCBjbGFzcz0iY29sTGFzdCI+CisgICAgPGRpdiBjbGFzcz0iYmxvY2siPkhhc2ggdGFibGUgYW5kIGxpbmtlZCBsaXN0IGltcGxlbWVudGF0aW9uIG9mIHRoZSA8dHQ+U2V0PC90dD4gaW50ZXJmYWNlLAorICAgICAgd2l0aCBwcmVkaWN0YWJsZSBpdGVyYXRpb24gb3JkZXIuPC9kaXY+CisgIDwvdGQ+Cis8L3RyPgorPHRyIGNsYXNzPSJhbHRDb2xvciI+CisgIDx0ZCBjbGFzcz0iY29sRmlyc3QiPjxhIGhyZWY9Ii4uLy4uL2phdmEvdXRpbC9MaW5rZWRMaXN0Lmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBqYXZhLnV0aWwiPkxpbmtlZExpc3Q8L2E+Jmx0O0UmZ3Q7PC90ZD4KKyAgPHRkIGNsYXNzPSJjb2xMYXN0Ij4KKyAgICA8ZGl2IGNsYXNzPSJibG9jayI+RG91Ymx5LWxpbmtlZCBsaXN0IGltcGxlbWVudGF0aW9uIG9mIHRoZSA8Y29kZT5MaXN0PC9jb2RlPiBhbmQgPGNvZGU+RGVxdWU8L2NvZGU+CisgICAgICBpbnRlcmZhY2VzLjwvZGl2PgorICA8L3RkPgorPC90cj4KKzx0ciBjbGFzcz0icm93Q29sb3IiPgorICA8dGQgY2xhc3M9ImNvbEZpcnN0Ij48YSBocmVmPSIuLi8uLi9qYXZhL3V0aWwvTGlzdFJlc291cmNlQnVuZGxlLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBqYXZhLnV0aWwiPkxpc3RSZXNvdXJjZUJ1bmRsZTwvYT48L3RkPgorICA8dGQgY2xhc3M9ImNvbExhc3QiPgorICAgIDxkaXYgY2xhc3M9ImJsb2NrIj48Y29kZT5MaXN0UmVzb3VyY2VCdW5kbGU8L2NvZGU+IGlzIGFuIGFic3RyYWN0IHN1YmNsYXNzIG9mCisgICAgICA8Y29kZT5SZXNvdXJjZUJ1bmRsZTwvY29kZT4gdGhhdCBtYW5hZ2VzIHJlc291cmNlcyBmb3IgYSBsb2NhbGUKKyAgICAgIGluIGEgY29udmVuaWVudCBhbmQgZWFzeSB0byB1c2UgbGlzdC48L2Rpdj4KKyAgPC90ZD4KKzwvdHI+Cis8dHIgY2xhc3M9ImFsdENvbG9yIj4KKyAgPHRkIGNsYXNzPSJjb2xGaXJzdCI+PGEgaHJlZj0iLi4vLi4vamF2YS91dGlsL0xvY2FsZS5odG1sIiB0aXRsZT0iY2xhc3MgaW4gamF2YS51dGlsIj5Mb2NhbGU8L2E+PC90ZD4KKyAgPHRkIGNsYXNzPSJjb2xMYXN0Ij4KKyAgICA8ZGl2IGNsYXNzPSJibG9jayI+QSA8Y29kZT5Mb2NhbGU8L2NvZGU+IG9iamVjdCByZXByZXNlbnRzIGEgc3BlY2lmaWMgZ2VvZ3JhcGhpY2FsLCBwb2xpdGljYWwsCisgICAgICBvciBjdWx0dXJhbCByZWdpb24uPC9kaXY+CisgIDwvdGQ+Cis8L3RyPgorPHRyIGNsYXNzPSJyb3dDb2xvciI+CisgIDx0ZCBjbGFzcz0iY29sRmlyc3QiPjxhIGhyZWY9Ii4uLy4uL2phdmEvdXRpbC9Mb2NhbGUuQnVpbGRlci5odG1sIiB0aXRsZT0iY2xhc3MgaW4gamF2YS51dGlsIj5Mb2NhbGUuQnVpbGRlcjwvYT48L3RkPgorICA8dGQgY2xhc3M9ImNvbExhc3QiPgorICAgIDxkaXYgY2xhc3M9ImJsb2NrIj48Y29kZT5CdWlsZGVyPC9jb2RlPiBpcyB1c2VkIHRvIGJ1aWxkIGluc3RhbmNlcyBvZiA8Y29kZT5Mb2NhbGU8L2NvZGU+CisgICAgICBmcm9tIHZhbHVlcyBjb25maWd1cmVkIGJ5IHRoZSBzZXR0ZXJzLjwvZGl2PgorICA8L3RkPgorPC90cj4KKzx0ciBjbGFzcz0iYWx0Q29sb3IiPgorICA8dGQgY2xhc3M9ImNvbEZpcnN0Ij48YSBocmVmPSIuLi8uLi9qYXZhL3V0aWwvT2JqZWN0cy5odG1sIiB0aXRsZT0iY2xhc3MgaW4gamF2YS51dGlsIj5PYmplY3RzPC9hPjwvdGQ+CisgIDx0ZCBjbGFzcz0iY29sTGFzdCI+CisgICAgPGRpdiBjbGFzcz0iYmxvY2siPlRoaXMgY2xhc3MgY29uc2lzdHMgb2YgPGNvZGU+c3RhdGljPC9jb2RlPiB1dGlsaXR5IG1ldGhvZHMgZm9yIG9wZXJhdGluZworICAgICAgb24gb2JqZWN0cy48L2Rpdj4KKyAgPC90ZD4KKzwvdHI+Cis8dHIgY2xhc3M9InJvd0NvbG9yIj4KKyAgPHRkIGNsYXNzPSJjb2xGaXJzdCI+PGEgaHJlZj0iLi4vLi4vamF2YS91dGlsL09ic2VydmFibGUuaHRtbCIgdGl0bGU9ImNsYXNzIGluIGphdmEudXRpbCI+T2JzZXJ2YWJsZTwvYT48L3RkPgorICA8dGQgY2xhc3M9ImNvbExhc3QiPgorICAgIDxkaXYgY2xhc3M9ImJsb2NrIj5UaGlzIGNsYXNzIHJlcHJlc2VudHMgYW4gb2JzZXJ2YWJsZSBvYmplY3QsIG9yICJkYXRhIgorICAgICAgaW4gdGhlIG1vZGVsLXZpZXcgcGFyYWRpZ20uPC9kaXY+CisgIDwvdGQ+Cis8L3RyPgorPHRyIGNsYXNzPSJhbHRDb2xvciI+CisgIDx0ZCBjbGFzcz0iY29sRmlyc3QiPjxhIGhyZWY9Ii4uLy4uL2phdmEvdXRpbC9Qcmlvcml0eVF1ZXVlLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBqYXZhLnV0aWwiPlByaW9yaXR5UXVldWU8L2E+Jmx0O0UmZ3Q7PC90ZD4KKyAgPHRkIGNsYXNzPSJjb2xMYXN0Ij4KKyAgICA8ZGl2IGNsYXNzPSJibG9jayI+QW4gdW5ib3VuZGVkIHByaW9yaXR5IDxhIGhyZWY9Ii4uLy4uL2phdmEvdXRpbC9RdWV1ZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIGphdmEudXRpbCI+cXVldWU8L2E+IGJhc2VkIG9uIGEgcHJpb3JpdHkgaGVhcC48L2Rpdj4KKyAgPC90ZD4KKzwvdHI+Cis8dHIgY2xhc3M9InJvd0NvbG9yIj4KKyAgPHRkIGNsYXNzPSJjb2xGaXJzdCI+PGEgaHJlZj0iLi4vLi4vamF2YS91dGlsL1Byb3BlcnRpZXMuaHRtbCIgdGl0bGU9ImNsYXNzIGluIGphdmEudXRpbCI+UHJvcGVydGllczwvYT48L3RkPgorICA8dGQgY2xhc3M9ImNvbExhc3QiPgorICAgIDxkaXYgY2xhc3M9ImJsb2NrIj5UaGUgPGNvZGU+UHJvcGVydGllczwvY29kZT4gY2xhc3MgcmVwcmVzZW50cyBhIHBlcnNpc3RlbnQgc2V0IG9mCisgICAgICBwcm9wZXJ0aWVzLjwvZGl2PgorICA8L3RkPgorPC90cj4KKzx0ciBjbGFzcz0iYWx0Q29sb3IiPgorICA8dGQgY2xhc3M9ImNvbEZpcnN0Ij48YSBocmVmPSIuLi8uLi9qYXZhL3V0aWwvUHJvcGVydHlQZXJtaXNzaW9uLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBqYXZhLnV0aWwiPlByb3BlcnR5UGVybWlzc2lvbjwvYT48L3RkPgorICA8dGQgY2xhc3M9ImNvbExhc3QiPgorICAgIDxkaXYgY2xhc3M9ImJsb2NrIj5UaGlzIGNsYXNzIGlzIGZvciBwcm9wZXJ0eSBwZXJtaXNzaW9ucy48L2Rpdj4KKyAgPC90ZD4KKzwvdHI+Cis8dHIgY2xhc3M9InJvd0NvbG9yIj4KKyAgPHRkIGNsYXNzPSJjb2xGaXJzdCI+PGEgaHJlZj0iLi4vLi4vamF2YS91dGlsL1Byb3BlcnR5UmVzb3VyY2VCdW5kbGUuaHRtbCIgdGl0bGU9ImNsYXNzIGluIGphdmEudXRpbCI+UHJvcGVydHlSZXNvdXJjZUJ1bmRsZTwvYT48L3RkPgorICA8dGQgY2xhc3M9ImNvbExhc3QiPgorICAgIDxkaXYgY2xhc3M9ImJsb2NrIj48Y29kZT5Qcm9wZXJ0eVJlc291cmNlQnVuZGxlPC9jb2RlPiBpcyBhIGNvbmNyZXRlIHN1YmNsYXNzIG9mCisgICAgICA8Y29kZT5SZXNvdXJjZUJ1bmRsZTwvY29kZT4gdGhhdCBtYW5hZ2VzIHJlc291cmNlcyBmb3IgYSBsb2NhbGUKKyAgICAgIHVzaW5nIGEgc2V0IG9mIHN0YXRpYyBzdHJpbmdzIGZyb20gYSBwcm9wZXJ0eSBmaWxlLjwvZGl2PgorICA8L3RkPgorPC90cj4KKzx0ciBjbGFzcz0iYWx0Q29sb3IiPgorICA8dGQgY2xhc3M9ImNvbEZpcnN0Ij48YSBocmVmPSIuLi8uLi9qYXZhL3V0aWwvUmFuZG9tLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBqYXZhLnV0aWwiPlJhbmRvbTwvYT48L3RkPgorICA8dGQgY2xhc3M9ImNvbExhc3QiPgorICAgIDxkaXYgY2xhc3M9ImJsb2NrIj5BbiBpbnN0YW5jZSBvZiB0aGlzIGNsYXNzIGlzIHVzZWQgdG8gZ2VuZXJhdGUgYSBzdHJlYW0gb2YKKyAgICAgIHBzZXVkb3JhbmRvbSBudW1iZXJzLjwvZGl2PgorICA8L3RkPgorPC90cj4KKzx0ciBjbGFzcz0icm93Q29sb3IiPgorICA8dGQgY2xhc3M9ImNvbEZpcnN0Ij48YSBocmVmPSIuLi8uLi9qYXZhL3V0aWwvUmVzb3VyY2VCdW5kbGUuaHRtbCIgdGl0bGU9ImNsYXNzIGluIGphdmEudXRpbCI+UmVzb3VyY2VCdW5kbGU8L2E+PC90ZD4KKyAgPHRkIGNsYXNzPSJjb2xMYXN0Ij4KKyAgICA8ZGl2IGNsYXNzPSJibG9jayI+UmVzb3VyY2UgYnVuZGxlcyBjb250YWluIGxvY2FsZS1zcGVjaWZpYyBvYmplY3RzLjwvZGl2PgorICA8L3RkPgorPC90cj4KKzx0ciBjbGFzcz0iYWx0Q29sb3IiPgorICA8dGQgY2xhc3M9ImNvbEZpcnN0Ij48YSBocmVmPSIuLi8uLi9qYXZhL3V0aWwvUmVzb3VyY2VCdW5kbGUuQ29udHJvbC5odG1sIiB0aXRsZT0iY2xhc3MgaW4gamF2YS51dGlsIj5SZXNvdXJjZUJ1bmRsZS5Db250cm9sPC9hPjwvdGQ+CisgIDx0ZCBjbGFzcz0iY29sTGFzdCI+CisgICAgPGRpdiBjbGFzcz0iYmxvY2siPjxjb2RlPlJlc291cmNlQnVuZGxlLkNvbnRyb2w8L2NvZGU+IGRlZmluZXMgYSBzZXQgb2YgY2FsbGJhY2sgbWV0aG9kcworICAgICAgdGhhdCBhcmUgaW52b2tlZCBieSB0aGUgPGEgaHJlZj0iLi4vLi4vamF2YS91dGlsL1Jlc291cmNlQnVuZGxlLmh0bWwjZ2V0QnVuZGxlKGphdmEubGFuZy5TdHJpbmcsIGphdmEudXRpbC5Mb2NhbGUsIGphdmEubGFuZy5DbGFzc0xvYWRlciwgamF2YS51dGlsLlJlc291cmNlQnVuZGxlLkNvbnRyb2wpIj48Y29kZT5SZXNvdXJjZUJ1bmRsZS5nZXRCdW5kbGU8L2NvZGU+PC9hPiBmYWN0b3J5CisgICAgICBtZXRob2RzIGR1cmluZyB0aGUgYnVuZGxlIGxvYWRpbmcgcHJvY2Vzcy48L2Rpdj4KKyAgPC90ZD4KKzwvdHI+Cis8dHIgY2xhc3M9InJvd0NvbG9yIj4KKyAgPHRkIGNsYXNzPSJjb2xGaXJzdCI+PGEgaHJlZj0iLi4vLi4vamF2YS91dGlsL1NjYW5uZXIuaHRtbCIgdGl0bGU9ImNsYXNzIGluIGphdmEudXRpbCI+U2Nhbm5lcjwvYT48L3RkPgorICA8dGQgY2xhc3M9ImNvbExhc3QiPgorICAgIDxkaXYgY2xhc3M9ImJsb2NrIj5BIHNpbXBsZSB0ZXh0IHNjYW5uZXIgd2hpY2ggY2FuIHBhcnNlIHByaW1pdGl2ZSB0eXBlcyBhbmQgc3RyaW5ncyB1c2luZworICAgICAgcmVndWxhciBleHByZXNzaW9ucy48L2Rpdj4KKyAgPC90ZD4KKzwvdHI+Cis8dHIgY2xhc3M9ImFsdENvbG9yIj4KKyAgPHRkIGNsYXNzPSJjb2xGaXJzdCI+PGEgaHJlZj0iLi4vLi4vamF2YS91dGlsL1NlcnZpY2VMb2FkZXIuaHRtbCIgdGl0bGU9ImNsYXNzIGluIGphdmEudXRpbCI+U2VydmljZUxvYWRlcjwvYT4mbHQ7UyZndDs8L3RkPgorICA8dGQgY2xhc3M9ImNvbExhc3QiPgorICAgIDxkaXYgY2xhc3M9ImJsb2NrIj5BIHNpbXBsZSBzZXJ2aWNlLXByb3ZpZGVyIGxvYWRpbmcgZmFjaWxpdHkuPC9kaXY+CisgIDwvdGQ+Cis8L3RyPgorPHRyIGNsYXNzPSJyb3dDb2xvciI+CisgIDx0ZCBjbGFzcz0iY29sRmlyc3QiPjxhIGhyZWY9Ii4uLy4uL2phdmEvdXRpbC9TaW1wbGVUaW1lWm9uZS5odG1sIiB0aXRsZT0iY2xhc3MgaW4gamF2YS51dGlsIj5TaW1wbGVUaW1lWm9uZTwvYT48L3RkPgorICA8dGQgY2xhc3M9ImNvbExhc3QiPgorICAgIDxkaXYgY2xhc3M9ImJsb2NrIj48Y29kZT5TaW1wbGVUaW1lWm9uZTwvY29kZT4gaXMgYSBjb25jcmV0ZSBzdWJjbGFzcyBvZiA8Y29kZT5UaW1lWm9uZTwvY29kZT4KKyAgICAgIHRoYXQgcmVwcmVzZW50cyBhIHRpbWUgem9uZSBmb3IgdXNlIHdpdGggYSBHcmVnb3JpYW4gY2FsZW5kYXIuPC9kaXY+CisgIDwvdGQ+Cis8L3RyPgorPHRyIGNsYXNzPSJhbHRDb2xvciI+CisgIDx0ZCBjbGFzcz0iY29sRmlyc3QiPjxhIGhyZWY9Ii4uLy4uL2phdmEvdXRpbC9TdGFjay5odG1sIiB0aXRsZT0iY2xhc3MgaW4gamF2YS51dGlsIj5TdGFjazwvYT4mbHQ7RSZndDs8L3RkPgorICA8dGQgY2xhc3M9ImNvbExhc3QiPgorICAgIDxkaXYgY2xhc3M9ImJsb2NrIj5UaGUgPGNvZGU+U3RhY2s8L2NvZGU+IGNsYXNzIHJlcHJlc2VudHMgYSBsYXN0LWluLWZpcnN0LW91dAorICAgICAgKExJRk8pIHN0YWNrIG9mIG9iamVjdHMuPC9kaXY+CisgIDwvdGQ+Cis8L3RyPgorPHRyIGNsYXNzPSJyb3dDb2xvciI+CisgIDx0ZCBjbGFzcz0iY29sRmlyc3QiPjxhIGhyZWY9Ii4uLy4uL2phdmEvdXRpbC9TdHJpbmdUb2tlbml6ZXIuaHRtbCIgdGl0bGU9ImNsYXNzIGluIGphdmEudXRpbCI+U3RyaW5nVG9rZW5pemVyPC9hPjwvdGQ+CisgIDx0ZCBjbGFzcz0iY29sTGFzdCI+CisgICAgPGRpdiBjbGFzcz0iYmxvY2siPlRoZSBzdHJpbmcgdG9rZW5pemVyIGNsYXNzIGFsbG93cyBhbiBhcHBsaWNhdGlvbiB0byBicmVhayBhCisgICAgICBzdHJpbmcgaW50byB0b2tlbnMuPC9kaXY+CisgIDwvdGQ+Cis8L3RyPgorPHRyIGNsYXNzPSJhbHRDb2xvciI+CisgIDx0ZCBjbGFzcz0iY29sRmlyc3QiPjxhIGhyZWY9Ii4uLy4uL2phdmEvdXRpbC9UaW1lci5odG1sIiB0aXRsZT0iY2xhc3MgaW4gamF2YS51dGlsIj5UaW1lcjwvYT48L3RkPgorICA8dGQgY2xhc3M9ImNvbExhc3QiPgorICAgIDxkaXYgY2xhc3M9ImJsb2NrIj5BIGZhY2lsaXR5IGZvciB0aHJlYWRzIHRvIHNjaGVkdWxlIHRhc2tzIGZvciBmdXR1cmUgZXhlY3V0aW9uIGluIGEKKyAgICAgIGJhY2tncm91bmQgdGhyZWFkLjwvZGl2PgorICA8L3RkPgorPC90cj4KKzx0ciBjbGFzcz0icm93Q29sb3IiPgorICA8dGQgY2xhc3M9ImNvbEZpcnN0Ij48YSBocmVmPSIuLi8uLi9qYXZhL3V0aWwvVGltZXJUYXNrLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBqYXZhLnV0aWwiPlRpbWVyVGFzazwvYT48L3RkPgorICA8dGQgY2xhc3M9ImNvbExhc3QiPgorICAgIDxkaXYgY2xhc3M9ImJsb2NrIj5BIHRhc2sgdGhhdCBjYW4gYmUgc2NoZWR1bGVkIGZvciBvbmUtdGltZSBvciByZXBlYXRlZCBleGVjdXRpb24gYnkgYSBUaW1lci48L2Rpdj4KKyAgPC90ZD4KKzwvdHI+Cis8dHIgY2xhc3M9ImFsdENvbG9yIj4KKyAgPHRkIGNsYXNzPSJjb2xGaXJzdCI+PGEgaHJlZj0iLi4vLi4vamF2YS91dGlsL1RpbWVab25lLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBqYXZhLnV0aWwiPlRpbWVab25lPC9hPjwvdGQ+CisgIDx0ZCBjbGFzcz0iY29sTGFzdCI+CisgICAgPGRpdiBjbGFzcz0iYmxvY2siPjxjb2RlPlRpbWVab25lPC9jb2RlPiByZXByZXNlbnRzIGEgdGltZSB6b25lIG9mZnNldCwgYW5kIGFsc28gZmlndXJlcyBvdXQgZGF5bGlnaHQKKyAgICAgIHNhdmluZ3MuPC9kaXY+CisgIDwvdGQ+Cis8L3RyPgorPHRyIGNsYXNzPSJyb3dDb2xvciI+CisgIDx0ZCBjbGFzcz0iY29sRmlyc3QiPjxhIGhyZWY9Ii4uLy4uL2phdmEvdXRpbC9UcmVlTWFwLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBqYXZhLnV0aWwiPlRyZWVNYXA8L2E+Jmx0O0ssViZndDs8L3RkPgorICA8dGQgY2xhc3M9ImNvbExhc3QiPgorICAgIDxkaXYgY2xhc3M9ImJsb2NrIj5BIFJlZC1CbGFjayB0cmVlIGJhc2VkIDxhIGhyZWY9Ii4uLy4uL2phdmEvdXRpbC9OYXZpZ2FibGVNYXAuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBqYXZhLnV0aWwiPjxjb2RlPk5hdmlnYWJsZU1hcDwvY29kZT48L2E+IGltcGxlbWVudGF0aW9uLjwvZGl2PgorICA8L3RkPgorPC90cj4KKzx0ciBjbGFzcz0iYWx0Q29sb3IiPgorICA8dGQgY2xhc3M9ImNvbEZpcnN0Ij48YSBocmVmPSIuLi8uLi9qYXZhL3V0aWwvVHJlZVNldC5odG1sIiB0aXRsZT0iY2xhc3MgaW4gamF2YS51dGlsIj5UcmVlU2V0PC9hPiZsdDtFJmd0OzwvdGQ+CisgIDx0ZCBjbGFzcz0iY29sTGFzdCI+CisgICAgPGRpdiBjbGFzcz0iYmxvY2siPkEgPGEgaHJlZj0iLi4vLi4vamF2YS91dGlsL05hdmlnYWJsZVNldC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIGphdmEudXRpbCI+PGNvZGU+TmF2aWdhYmxlU2V0PC9jb2RlPjwvYT4gaW1wbGVtZW50YXRpb24gYmFzZWQgb24gYSA8YSBocmVmPSIuLi8uLi9qYXZhL3V0aWwvVHJlZU1hcC5odG1sIiB0aXRsZT0iY2xhc3MgaW4gamF2YS51dGlsIj48Y29kZT5UcmVlTWFwPC9jb2RlPjwvYT4uPC9kaXY+CisgIDwvdGQ+Cis8L3RyPgorPHRyIGNsYXNzPSJyb3dDb2xvciI+CisgIDx0ZCBjbGFzcz0iY29sRmlyc3QiPjxhIGhyZWY9Ii4uLy4uL2phdmEvdXRpbC9VVUlELmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBqYXZhLnV0aWwiPlVVSUQ8L2E+PC90ZD4KKyAgPHRkIGNsYXNzPSJjb2xMYXN0Ij4KKyAgICA8ZGl2IGNsYXNzPSJibG9jayI+QSBjbGFzcyB0aGF0IHJlcHJlc2VudHMgYW4gaW1tdXRhYmxlIHVuaXZlcnNhbGx5IHVuaXF1ZSBpZGVudGlmaWVyIChVVUlEKS48L2Rpdj4KKyAgPC90ZD4KKzwvdHI+Cis8dHIgY2xhc3M9ImFsdENvbG9yIj4KKyAgPHRkIGNsYXNzPSJjb2xGaXJzdCI+PGEgaHJlZj0iLi4vLi4vamF2YS91dGlsL1ZlY3Rvci5odG1sIiB0aXRsZT0iY2xhc3MgaW4gamF2YS51dGlsIj5WZWN0b3I8L2E+Jmx0O0UmZ3Q7PC90ZD4KKyAgPHRkIGNsYXNzPSJjb2xMYXN0Ij4KKyAgICA8ZGl2IGNsYXNzPSJibG9jayI+VGhlIDxjb2RlPlZlY3RvcjwvY29kZT4gY2xhc3MgaW1wbGVtZW50cyBhIGdyb3dhYmxlIGFycmF5IG9mCisgICAgICBvYmplY3RzLjwvZGl2PgorICA8L3RkPgorPC90cj4KKzx0ciBjbGFzcz0icm93Q29sb3IiPgorICA8dGQgY2xhc3M9ImNvbEZpcnN0Ij48YSBocmVmPSIuLi8uLi9qYXZhL3V0aWwvV2Vha0hhc2hNYXAuaHRtbCIgdGl0bGU9ImNsYXNzIGluIGphdmEudXRpbCI+V2Vha0hhc2hNYXA8L2E+Jmx0O0ssViZndDs8L3RkPgorICA8dGQgY2xhc3M9ImNvbExhc3QiPgorICAgIDxkaXYgY2xhc3M9ImJsb2NrIj5IYXNoIHRhYmxlIGJhc2VkIGltcGxlbWVudGF0aW9uIG9mIHRoZSA8dHQ+TWFwPC90dD4gaW50ZXJmYWNlLCB3aXRoCisgICAgICA8ZW0+d2VhayBrZXlzPC9lbT4uPC9kaXY+CisgIDwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+Cis8L2xpPgorPGxpIGNsYXNzPSJibG9ja0xpc3QiPgorICA8dGFibGUgY2xhc3M9InBhY2thZ2VTdW1tYXJ5IiBib3JkZXI9IjAiIGNlbGxwYWRkaW5nPSIzIiBjZWxsc3BhY2luZz0iMCIgc3VtbWFyeT0iRW51bSBTdW1tYXJ5IHRhYmxlLCBsaXN0aW5nIGVudW1zLCBhbmQgYW4gZXhwbGFuYXRpb24iPgorICAgIDxjYXB0aW9uPjxzcGFuPkVudW0gU3VtbWFyeTwvc3Bhbj48c3BhbiBjbGFzcz0idGFiRW5kIj4mbmJzcDs8L3NwYW4+PC9jYXB0aW9uPgorICAgIDx0cj4KKyAgICAgIDx0aCBjbGFzcz0iY29sRmlyc3QiIHNjb3BlPSJjb2wiPkVudW08L3RoPgorICAgICAgPHRoIGNsYXNzPSJjb2xMYXN0IiBzY29wZT0iY29sIj5EZXNjcmlwdGlvbjwvdGg+CisgICAgPC90cj4KKyAgICA8dGJvZHk+CisgICAgPHRyIGNsYXNzPSJhbHRDb2xvciI+CisgICAgICA8dGQgY2xhc3M9ImNvbEZpcnN0Ij48YSBocmVmPSIuLi8uLi9qYXZhL3V0aWwvRm9ybWF0dGVyLkJpZ0RlY2ltYWxMYXlvdXRGb3JtLmh0bWwiIHRpdGxlPSJlbnVtIGluIGphdmEudXRpbCI+Rm9ybWF0dGVyLkJpZ0RlY2ltYWxMYXlvdXRGb3JtPC9hPjwvdGQ+CisgICAgICA8dGQgY2xhc3M9ImNvbExhc3QiPiZuYnNwOzwvdGQ+CisgICAgPC90cj4KKyAgICA8dHIgY2xhc3M9InJvd0NvbG9yIj4KKyAgICAgIDx0ZCBjbGFzcz0iY29sRmlyc3QiPjxhIGhyZWY9Ii4uLy4uL2phdmEvdXRpbC9Mb2NhbGUuQ2F0ZWdvcnkuaHRtbCIgdGl0bGU9ImVudW0gaW4gamF2YS51dGlsIj5Mb2NhbGUuQ2F0ZWdvcnk8L2E+PC90ZD4KKyAgICAgIDx0ZCBjbGFzcz0iY29sTGFzdCI+CisgICAgICAgIDxkaXYgY2xhc3M9ImJsb2NrIj5FbnVtIGZvciBsb2NhbGUgY2F0ZWdvcmllcy48L2Rpdj4KKyAgICAgIDwvdGQ+CisgICAgPC90cj4KKyAgICA8L3Rib2R5PgorICA8L3RhYmxlPgorPC9saT4KKzxsaSBjbGFzcz0iYmxvY2tMaXN0Ij4KKyAgPHRhYmxlIGNsYXNzPSJwYWNrYWdlU3VtbWFyeSIgYm9yZGVyPSIwIiBjZWxscGFkZGluZz0iMyIgY2VsbHNwYWNpbmc9IjAiIHN1bW1hcnk9IkV4Y2VwdGlvbiBTdW1tYXJ5IHRhYmxlLCBsaXN0aW5nIGV4Y2VwdGlvbnMsIGFuZCBhbiBleHBsYW5hdGlvbiI+CisgICAgPGNhcHRpb24+PHNwYW4+RXhjZXB0aW9uIFN1bW1hcnk8L3NwYW4+PHNwYW4gY2xhc3M9InRhYkVuZCI+Jm5ic3A7PC9zcGFuPjwvY2FwdGlvbj4KKyAgICA8dHI+CisgICAgICA8dGggY2xhc3M9ImNvbEZpcnN0IiBzY29wZT0iY29sIj5FeGNlcHRpb248L3RoPgorICAgICAgPHRoIGNsYXNzPSJjb2xMYXN0IiBzY29wZT0iY29sIj5EZXNjcmlwdGlvbjwvdGg+CisgICAgPC90cj4KKyAgICA8dGJvZHk+CisgICAgPHRyIGNsYXNzPSJhbHRDb2xvciI+CisgICAgICA8dGQgY2xhc3M9ImNvbEZpcnN0Ij48YSBocmVmPSIuLi8uLi9qYXZhL3V0aWwvQ29uY3VycmVudE1vZGlmaWNhdGlvbkV4Y2VwdGlvbi5odG1sIiB0aXRsZT0iY2xhc3MgaW4gamF2YS51dGlsIj5Db25jdXJyZW50TW9kaWZpY2F0aW9uRXhjZXB0aW9uPC9hPjwvdGQ+CisgICAgICA8dGQgY2xhc3M9ImNvbExhc3QiPgorICAgICAgICA8ZGl2IGNsYXNzPSJibG9jayI+VGhpcyBleGNlcHRpb24gbWF5IGJlIHRocm93biBieSBtZXRob2RzIHRoYXQgaGF2ZSBkZXRlY3RlZCBjb25jdXJyZW50CisgICAgICAgICAgbW9kaWZpY2F0aW9uIG9mIGFuIG9iamVjdCB3aGVuIHN1Y2ggbW9kaWZpY2F0aW9uIGlzIG5vdCBwZXJtaXNzaWJsZS48L2Rpdj4KKyAgICAgIDwvdGQ+CisgICAgPC90cj4KKyAgICA8dHIgY2xhc3M9InJvd0NvbG9yIj4KKyAgICAgIDx0ZCBjbGFzcz0iY29sRmlyc3QiPjxhIGhyZWY9Ii4uLy4uL2phdmEvdXRpbC9EdXBsaWNhdGVGb3JtYXRGbGFnc0V4Y2VwdGlvbi5odG1sIiB0aXRsZT0iY2xhc3MgaW4gamF2YS51dGlsIj5EdXBsaWNhdGVGb3JtYXRGbGFnc0V4Y2VwdGlvbjwvYT48L3RkPgorICAgICAgPHRkIGNsYXNzPSJjb2xMYXN0Ij4KKyAgICAgICAgPGRpdiBjbGFzcz0iYmxvY2siPlVuY2hlY2tlZCBleGNlcHRpb24gdGhyb3duIHdoZW4gZHVwbGljYXRlIGZsYWdzIGFyZSBwcm92aWRlZCBpbiB0aGUgZm9ybWF0CisgICAgICAgICAgc3BlY2lmaWVyLjwvZGl2PgorICAgICAgPC90ZD4KKyAgICA8L3RyPgorICAgIDx0ciBjbGFzcz0iYWx0Q29sb3IiPgorICAgICAgPHRkIGNsYXNzPSJjb2xGaXJzdCI+PGEgaHJlZj0iLi4vLi4vamF2YS91dGlsL0VtcHR5U3RhY2tFeGNlcHRpb24uaHRtbCIgdGl0bGU9ImNsYXNzIGluIGphdmEudXRpbCI+RW1wdHlTdGFja0V4Y2VwdGlvbjwvYT48L3RkPgorICAgICAgPHRkIGNsYXNzPSJjb2xMYXN0Ij4KKyAgICAgICAgPGRpdiBjbGFzcz0iYmxvY2siPlRocm93biBieSBtZXRob2RzIGluIHRoZSA8Y29kZT5TdGFjazwvY29kZT4gY2xhc3MgdG8gaW5kaWNhdGUKKyAgICAgICAgICB0aGF0IHRoZSBzdGFjayBpcyBlbXB0eS48L2Rpdj4KKyAgICAgIDwvdGQ+CisgICAgPC90cj4KKyAgICA8dHIgY2xhc3M9InJvd0NvbG9yIj4KKyAgICAgIDx0ZCBjbGFzcz0iY29sRmlyc3QiPjxhIGhyZWY9Ii4uLy4uL2phdmEvdXRpbC9Gb3JtYXRGbGFnc0NvbnZlcnNpb25NaXNtYXRjaEV4Y2VwdGlvbi5odG1sIiB0aXRsZT0iY2xhc3MgaW4gamF2YS51dGlsIj5Gb3JtYXRGbGFnc0NvbnZlcnNpb25NaXNtYXRjaEV4Y2VwdGlvbjwvYT48L3RkPgorICAgICAgPHRkIGNsYXNzPSJjb2xMYXN0Ij4KKyAgICAgICAgPGRpdiBjbGFzcz0iYmxvY2siPlVuY2hlY2tlZCBleGNlcHRpb24gdGhyb3duIHdoZW4gYSBjb252ZXJzaW9uIGFuZCBmbGFnIGFyZSBpbmNvbXBhdGlibGUuPC9kaXY+CisgICAgICA8L3RkPgorICAgIDwvdHI+CisgICAgPHRyIGNsYXNzPSJhbHRDb2xvciI+CisgICAgICA8dGQgY2xhc3M9ImNvbEZpcnN0Ij48YSBocmVmPSIuLi8uLi9qYXZhL3V0aWwvRm9ybWF0dGVyQ2xvc2VkRXhjZXB0aW9uLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBqYXZhLnV0aWwiPkZvcm1hdHRlckNsb3NlZEV4Y2VwdGlvbjwvYT48L3RkPgorICAgICAgPHRkIGNsYXNzPSJjb2xMYXN0Ij4KKyAgICAgICAgPGRpdiBjbGFzcz0iYmxvY2siPlVuY2hlY2tlZCBleGNlcHRpb24gdGhyb3duIHdoZW4gdGhlIGZvcm1hdHRlciBoYXMgYmVlbiBjbG9zZWQuPC9kaXY+CisgICAgICA8L3RkPgorICAgIDwvdHI+CisgICAgPHRyIGNsYXNzPSJyb3dDb2xvciI+CisgICAgICA8dGQgY2xhc3M9ImNvbEZpcnN0Ij48YSBocmVmPSIuLi8uLi9qYXZhL3V0aWwvSWxsZWdhbEZvcm1hdENvZGVQb2ludEV4Y2VwdGlvbi5odG1sIiB0aXRsZT0iY2xhc3MgaW4gamF2YS51dGlsIj5JbGxlZ2FsRm9ybWF0Q29kZVBvaW50RXhjZXB0aW9uPC9hPjwvdGQ+CisgICAgICA8dGQgY2xhc3M9ImNvbExhc3QiPgorICAgICAgICA8ZGl2IGNsYXNzPSJibG9jayI+VW5jaGVja2VkIGV4Y2VwdGlvbiB0aHJvd24gd2hlbiBhIGNoYXJhY3RlciB3aXRoIGFuIGludmFsaWQgVW5pY29kZSBjb2RlCisgICAgICAgICAgcG9pbnQgYXMgZGVmaW5lZCBieSA8YSBocmVmPSIuLi8uLi9qYXZhL2xhbmcvQ2hhcmFjdGVyLmh0bWwjaXNWYWxpZENvZGVQb2ludChpbnQpIj48Y29kZT5DaGFyYWN0ZXIuaXNWYWxpZENvZGVQb2ludChpbnQpPC9jb2RlPjwvYT4gaXMgcGFzc2VkIHRvIHRoZQorICAgICAgICAgIDxhIGhyZWY9Ii4uLy4uL2phdmEvdXRpbC9Gb3JtYXR0ZXIuaHRtbCIgdGl0bGU9ImNsYXNzIGluIGphdmEudXRpbCI+PGNvZGU+Rm9ybWF0dGVyPC9jb2RlPjwvYT4uPC9kaXY+CisgICAgICA8L3RkPgorICAgIDwvdHI+CisgICAgPHRyIGNsYXNzPSJhbHRDb2xvciI+CisgICAgICA8dGQgY2xhc3M9ImNvbEZpcnN0Ij48YSBocmVmPSIuLi8uLi9qYXZhL3V0aWwvSWxsZWdhbEZvcm1hdENvbnZlcnNpb25FeGNlcHRpb24uaHRtbCIgdGl0bGU9ImNsYXNzIGluIGphdmEudXRpbCI+SWxsZWdhbEZvcm1hdENvbnZlcnNpb25FeGNlcHRpb248L2E+PC90ZD4KKyAgICAgIDx0ZCBjbGFzcz0iY29sTGFzdCI+CisgICAgICAgIDxkaXYgY2xhc3M9ImJsb2NrIj5VbmNoZWNrZWQgZXhjZXB0aW9uIHRocm93biB3aGVuIHRoZSBhcmd1bWVudCBjb3JyZXNwb25kaW5nIHRvIHRoZSBmb3JtYXQKKyAgICAgICAgICBzcGVjaWZpZXIgaXMgb2YgYW4gaW5jb21wYXRpYmxlIHR5cGUuPC9kaXY+CisgICAgICA8L3RkPgorICAgIDwvdHI+CisgICAgPHRyIGNsYXNzPSJyb3dDb2xvciI+CisgICAgICA8dGQgY2xhc3M9ImNvbEZpcnN0Ij48YSBocmVmPSIuLi8uLi9qYXZhL3V0aWwvSWxsZWdhbEZvcm1hdEV4Y2VwdGlvbi5odG1sIiB0aXRsZT0iY2xhc3MgaW4gamF2YS51dGlsIj5JbGxlZ2FsRm9ybWF0RXhjZXB0aW9uPC9hPjwvdGQ+CisgICAgICA8dGQgY2xhc3M9ImNvbExhc3QiPgorICAgICAgICA8ZGl2IGNsYXNzPSJibG9jayI+VW5jaGVja2VkIGV4Y2VwdGlvbiB0aHJvd24gd2hlbiBhIGZvcm1hdCBzdHJpbmcgY29udGFpbnMgYW4gaWxsZWdhbCBzeW50YXgKKyAgICAgICAgICBvciBhIGZvcm1hdCBzcGVjaWZpZXIgdGhhdCBpcyBpbmNvbXBhdGlibGUgd2l0aCB0aGUgZ2l2ZW4gYXJndW1lbnRzLjwvZGl2PgorICAgICAgPC90ZD4KKyAgICA8L3RyPgorICAgIDx0ciBjbGFzcz0iYWx0Q29sb3IiPgorICAgICAgPHRkIGNsYXNzPSJjb2xGaXJzdCI+PGEgaHJlZj0iLi4vLi4vamF2YS91dGlsL0lsbGVnYWxGb3JtYXRGbGFnc0V4Y2VwdGlvbi5odG1sIiB0aXRsZT0iY2xhc3MgaW4gamF2YS51dGlsIj5JbGxlZ2FsRm9ybWF0RmxhZ3NFeGNlcHRpb248L2E+PC90ZD4KKyAgICAgIDx0ZCBjbGFzcz0iY29sTGFzdCI+CisgICAgICAgIDxkaXYgY2xhc3M9ImJsb2NrIj5VbmNoZWNrZWQgZXhjZXB0aW9uIHRocm93biB3aGVuIGFuIGlsbGVnYWwgY29tYmluYXRpb24gZmxhZ3MgaXMgZ2l2ZW4uPC9kaXY+CisgICAgICA8L3RkPgorICAgIDwvdHI+CisgICAgPHRyIGNsYXNzPSJyb3dDb2xvciI+CisgICAgICA8dGQgY2xhc3M9ImNvbEZpcnN0Ij48YSBocmVmPSIuLi8uLi9qYXZhL3V0aWwvSWxsZWdhbEZvcm1hdFByZWNpc2lvbkV4Y2VwdGlvbi5odG1sIiB0aXRsZT0iY2xhc3MgaW4gamF2YS51dGlsIj5JbGxlZ2FsRm9ybWF0UHJlY2lzaW9uRXhjZXB0aW9uPC9hPjwvdGQ+CisgICAgICA8dGQgY2xhc3M9ImNvbExhc3QiPgorICAgICAgICA8ZGl2IGNsYXNzPSJibG9jayI+VW5jaGVja2VkIGV4Y2VwdGlvbiB0aHJvd24gd2hlbiB0aGUgcHJlY2lzaW9uIGlzIGEgbmVnYXRpdmUgdmFsdWUgb3RoZXIgdGhhbgorICAgICAgICAgIDx0dD4tMTwvdHQ+LCB0aGUgY29udmVyc2lvbiBkb2VzIG5vdCBzdXBwb3J0IGEgcHJlY2lzaW9uLCBvciB0aGUgdmFsdWUgaXMKKyAgICAgICAgICBvdGhlcndpc2UgdW5zdXBwb3J0ZWQuPC9kaXY+CisgICAgICA8L3RkPgorICAgIDwvdHI+CisgICAgPHRyIGNsYXNzPSJhbHRDb2xvciI+CisgICAgICA8dGQgY2xhc3M9ImNvbEZpcnN0Ij48YSBocmVmPSIuLi8uLi9qYXZhL3V0aWwvSWxsZWdhbEZvcm1hdFdpZHRoRXhjZXB0aW9uLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBqYXZhLnV0aWwiPklsbGVnYWxGb3JtYXRXaWR0aEV4Y2VwdGlvbjwvYT48L3RkPgorICAgICAgPHRkIGNsYXNzPSJjb2xMYXN0Ij4KKyAgICAgICAgPGRpdiBjbGFzcz0iYmxvY2siPlVuY2hlY2tlZCBleGNlcHRpb24gdGhyb3duIHdoZW4gdGhlIGZvcm1hdCB3aWR0aCBpcyBhIG5lZ2F0aXZlIHZhbHVlIG90aGVyCisgICAgICAgICAgdGhhbiA8dHQ+LTE8L3R0PiBvciBpcyBvdGhlcndpc2UgdW5zdXBwb3J0ZWQuPC9kaXY+CisgICAgICA8L3RkPgorICAgIDwvdHI+CisgICAgPHRyIGNsYXNzPSJyb3dDb2xvciI+CisgICAgICA8dGQgY2xhc3M9ImNvbEZpcnN0Ij48YSBocmVmPSIuLi8uLi9qYXZhL3V0aWwvSWxsZm9ybWVkTG9jYWxlRXhjZXB0aW9uLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBqYXZhLnV0aWwiPklsbGZvcm1lZExvY2FsZUV4Y2VwdGlvbjwvYT48L3RkPgorICAgICAgPHRkIGNsYXNzPSJjb2xMYXN0Ij4KKyAgICAgICAgPGRpdiBjbGFzcz0iYmxvY2siPlRocm93biBieSBtZXRob2RzIGluIDxhIGhyZWY9Ii4uLy4uL2phdmEvdXRpbC9Mb2NhbGUuaHRtbCIgdGl0bGU9ImNsYXNzIGluIGphdmEudXRpbCI+PGNvZGU+TG9jYWxlPC9jb2RlPjwvYT4gYW5kIDxhIGhyZWY9Ii4uLy4uL2phdmEvdXRpbC9Mb2NhbGUuQnVpbGRlci5odG1sIiB0aXRsZT0iY2xhc3MgaW4gamF2YS51dGlsIj48Y29kZT5Mb2NhbGUuQnVpbGRlcjwvY29kZT48L2E+IHRvCisgICAgICAgICAgaW5kaWNhdGUgdGhhdCBhbiBhcmd1bWVudCBpcyBub3QgYSB3ZWxsLWZvcm1lZCBCQ1AgNDcgdGFnLjwvZGl2PgorICAgICAgPC90ZD4KKyAgICA8L3RyPgorICAgIDx0ciBjbGFzcz0iYWx0Q29sb3IiPgorICAgICAgPHRkIGNsYXNzPSJjb2xGaXJzdCI+PGEgaHJlZj0iLi4vLi4vamF2YS91dGlsL0lucHV0TWlzbWF0Y2hFeGNlcHRpb24uaHRtbCIgdGl0bGU9ImNsYXNzIGluIGphdmEudXRpbCI+SW5wdXRNaXNtYXRjaEV4Y2VwdGlvbjwvYT48L3RkPgorICAgICAgPHRkIGNsYXNzPSJjb2xMYXN0Ij4KKyAgICAgICAgPGRpdiBjbGFzcz0iYmxvY2siPlRocm93biBieSBhIDxjb2RlPlNjYW5uZXI8L2NvZGU+IHRvIGluZGljYXRlIHRoYXQgdGhlIHRva2VuCisgICAgICAgICAgcmV0cmlldmVkIGRvZXMgbm90IG1hdGNoIHRoZSBwYXR0ZXJuIGZvciB0aGUgZXhwZWN0ZWQgdHlwZSwgb3IKKyAgICAgICAgICB0aGF0IHRoZSB0b2tlbiBpcyBvdXQgb2YgcmFuZ2UgZm9yIHRoZSBleHBlY3RlZCB0eXBlLjwvZGl2PgorICAgICAgPC90ZD4KKyAgICA8L3RyPgorICAgIDx0ciBjbGFzcz0icm93Q29sb3IiPgorICAgICAgPHRkIGNsYXNzPSJjb2xGaXJzdCI+PGEgaHJlZj0iLi4vLi4vamF2YS91dGlsL0ludmFsaWRQcm9wZXJ0aWVzRm9ybWF0RXhjZXB0aW9uLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBqYXZhLnV0aWwiPkludmFsaWRQcm9wZXJ0aWVzRm9ybWF0RXhjZXB0aW9uPC9hPjwvdGQ+CisgICAgICA8dGQgY2xhc3M9ImNvbExhc3QiPgorICAgICAgICA8ZGl2IGNsYXNzPSJibG9jayI+VGhyb3duIHRvIGluZGljYXRlIHRoYXQgYW4gb3BlcmF0aW9uIGNvdWxkIG5vdCBjb21wbGV0ZSBiZWNhdXNlCisgICAgICAgICAgdGhlIGlucHV0IGRpZCBub3QgY29uZm9ybSB0byB0aGUgYXBwcm9wcmlhdGUgWE1MIGRvY3VtZW50IHR5cGUKKyAgICAgICAgICBmb3IgYSBjb2xsZWN0aW9uIG9mIHByb3BlcnRpZXMsIGFzIHBlciB0aGUgPGEgaHJlZj0iLi4vLi4vamF2YS91dGlsL1Byb3BlcnRpZXMuaHRtbCIgdGl0bGU9ImNsYXNzIGluIGphdmEudXRpbCI+PGNvZGU+UHJvcGVydGllczwvY29kZT48L2E+CisgICAgICAgICAgc3BlY2lmaWNhdGlvbi48L2Rpdj4KKyAgICAgIDwvdGQ+CisgICAgPC90cj4KKyAgICA8dHIgY2xhc3M9ImFsdENvbG9yIj4KKyAgICAgIDx0ZCBjbGFzcz0iY29sRmlyc3QiPjxhIGhyZWY9Ii4uLy4uL2phdmEvdXRpbC9NaXNzaW5nRm9ybWF0QXJndW1lbnRFeGNlcHRpb24uaHRtbCIgdGl0bGU9ImNsYXNzIGluIGphdmEudXRpbCI+TWlzc2luZ0Zvcm1hdEFyZ3VtZW50RXhjZXB0aW9uPC9hPjwvdGQ+CisgICAgICA8dGQgY2xhc3M9ImNvbExhc3QiPgorICAgICAgICA8ZGl2IGNsYXNzPSJibG9jayI+VW5jaGVja2VkIGV4Y2VwdGlvbiB0aHJvd24gd2hlbiB0aGVyZSBpcyBhIGZvcm1hdCBzcGVjaWZpZXIgd2hpY2ggZG9lcyBub3QKKyAgICAgICAgICBoYXZlIGEgY29ycmVzcG9uZGluZyBhcmd1bWVudCBvciBpZiBhbiBhcmd1bWVudCBpbmRleCByZWZlcnMgdG8gYW4gYXJndW1lbnQKKyAgICAgICAgICB0aGF0IGRvZXMgbm90IGV4aXN0LjwvZGl2PgorICAgICAgPC90ZD4KKyAgICA8L3RyPgorICAgIDx0ciBjbGFzcz0icm93Q29sb3IiPgorICAgICAgPHRkIGNsYXNzPSJjb2xGaXJzdCI+PGEgaHJlZj0iLi4vLi4vamF2YS91dGlsL01pc3NpbmdGb3JtYXRXaWR0aEV4Y2VwdGlvbi5odG1sIiB0aXRsZT0iY2xhc3MgaW4gamF2YS51dGlsIj5NaXNzaW5nRm9ybWF0V2lkdGhFeGNlcHRpb248L2E+PC90ZD4KKyAgICAgIDx0ZCBjbGFzcz0iY29sTGFzdCI+CisgICAgICAgIDxkaXYgY2xhc3M9ImJsb2NrIj5VbmNoZWNrZWQgZXhjZXB0aW9uIHRocm93biB3aGVuIHRoZSBmb3JtYXQgd2lkdGggaXMgcmVxdWlyZWQuPC9kaXY+CisgICAgICA8L3RkPgorICAgIDwvdHI+CisgICAgPHRyIGNsYXNzPSJhbHRDb2xvciI+CisgICAgICA8dGQgY2xhc3M9ImNvbEZpcnN0Ij48YSBocmVmPSIuLi8uLi9qYXZhL3V0aWwvTWlzc2luZ1Jlc291cmNlRXhjZXB0aW9uLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBqYXZhLnV0aWwiPk1pc3NpbmdSZXNvdXJjZUV4Y2VwdGlvbjwvYT48L3RkPgorICAgICAgPHRkIGNsYXNzPSJjb2xMYXN0Ij4KKyAgICAgICAgPGRpdiBjbGFzcz0iYmxvY2siPlNpZ25hbHMgdGhhdCBhIHJlc291cmNlIGlzIG1pc3NpbmcuPC9kaXY+CisgICAgICA8L3RkPgorICAgIDwvdHI+CisgICAgPHRyIGNsYXNzPSJyb3dDb2xvciI+CisgICAgICA8dGQgY2xhc3M9ImNvbEZpcnN0Ij48YSBocmVmPSIuLi8uLi9qYXZhL3V0aWwvTm9TdWNoRWxlbWVudEV4Y2VwdGlvbi5odG1sIiB0aXRsZT0iY2xhc3MgaW4gamF2YS51dGlsIj5Ob1N1Y2hFbGVtZW50RXhjZXB0aW9uPC9hPjwvdGQ+CisgICAgICA8dGQgY2xhc3M9ImNvbExhc3QiPgorICAgICAgICA8ZGl2IGNsYXNzPSJibG9jayI+VGhyb3duIGJ5IHRoZSA8Y29kZT5uZXh0RWxlbWVudDwvY29kZT4gbWV0aG9kIG9mIGFuCisgICAgICAgICAgPGNvZGU+RW51bWVyYXRpb248L2NvZGU+IHRvIGluZGljYXRlIHRoYXQgdGhlcmUgYXJlIG5vIG1vcmUKKyAgICAgICAgICBlbGVtZW50cyBpbiB0aGUgZW51bWVyYXRpb24uPC9kaXY+CisgICAgICA8L3RkPgorICAgIDwvdHI+CisgICAgPHRyIGNsYXNzPSJhbHRDb2xvciI+CisgICAgICA8dGQgY2xhc3M9ImNvbEZpcnN0Ij48YSBocmVmPSIuLi8uLi9qYXZhL3V0aWwvVG9vTWFueUxpc3RlbmVyc0V4Y2VwdGlvbi5odG1sIiB0aXRsZT0iY2xhc3MgaW4gamF2YS51dGlsIj5Ub29NYW55TGlzdGVuZXJzRXhjZXB0aW9uPC9hPjwvdGQ+CisgICAgICA8dGQgY2xhc3M9ImNvbExhc3QiPgorICAgICAgICA8ZGl2IGNsYXNzPSJibG9jayI+CisgICAgICAgICAgVGhlIDxjb2RlPiBUb29NYW55TGlzdGVuZXJzRXhjZXB0aW9uIDwvY29kZT4gRXhjZXB0aW9uIGlzIHVzZWQgYXMgcGFydCBvZgorICAgICAgICAgIHRoZSBKYXZhIEV2ZW50IG1vZGVsIHRvIGFubm90YXRlIGFuZCBpbXBsZW1lbnQgYSB1bmljYXN0IHNwZWNpYWwgY2FzZSBvZgorICAgICAgICAgIGEgbXVsdGljYXN0IEV2ZW50IFNvdXJjZS48L2Rpdj4KKyAgICAgIDwvdGQ+CisgICAgPC90cj4KKyAgICA8dHIgY2xhc3M9InJvd0NvbG9yIj4KKyAgICAgIDx0ZCBjbGFzcz0iY29sRmlyc3QiPjxhIGhyZWY9Ii4uLy4uL2phdmEvdXRpbC9Vbmtub3duRm9ybWF0Q29udmVyc2lvbkV4Y2VwdGlvbi5odG1sIiB0aXRsZT0iY2xhc3MgaW4gamF2YS51dGlsIj5Vbmtub3duRm9ybWF0Q29udmVyc2lvbkV4Y2VwdGlvbjwvYT48L3RkPgorICAgICAgPHRkIGNsYXNzPSJjb2xMYXN0Ij4KKyAgICAgICAgPGRpdiBjbGFzcz0iYmxvY2siPlVuY2hlY2tlZCBleGNlcHRpb24gdGhyb3duIHdoZW4gYW4gdW5rbm93biBjb252ZXJzaW9uIGlzIGdpdmVuLjwvZGl2PgorICAgICAgPC90ZD4KKyAgICA8L3RyPgorICAgIDx0ciBjbGFzcz0iYWx0Q29sb3IiPgorICAgICAgPHRkIGNsYXNzPSJjb2xGaXJzdCI+PGEgaHJlZj0iLi4vLi4vamF2YS91dGlsL1Vua25vd25Gb3JtYXRGbGFnc0V4Y2VwdGlvbi5odG1sIiB0aXRsZT0iY2xhc3MgaW4gamF2YS51dGlsIj5Vbmtub3duRm9ybWF0RmxhZ3NFeGNlcHRpb248L2E+PC90ZD4KKyAgICAgIDx0ZCBjbGFzcz0iY29sTGFzdCI+CisgICAgICAgIDxkaXYgY2xhc3M9ImJsb2NrIj5VbmNoZWNrZWQgZXhjZXB0aW9uIHRocm93biB3aGVuIGFuIHVua25vd24gZmxhZyBpcyBnaXZlbi48L2Rpdj4KKyAgICAgIDwvdGQ+CisgICAgPC90cj4KKyAgICA8L3Rib2R5PgorICA8L3RhYmxlPgorPC9saT4KKzxsaSBjbGFzcz0iYmxvY2tMaXN0Ij4KKyAgPHRhYmxlIGNsYXNzPSJwYWNrYWdlU3VtbWFyeSIgYm9yZGVyPSIwIiBjZWxscGFkZGluZz0iMyIgY2VsbHNwYWNpbmc9IjAiIHN1bW1hcnk9IkVycm9yIFN1bW1hcnkgdGFibGUsIGxpc3RpbmcgZXJyb3JzLCBhbmQgYW4gZXhwbGFuYXRpb24iPgorICAgIDxjYXB0aW9uPjxzcGFuPkVycm9yIFN1bW1hcnk8L3NwYW4+PHNwYW4gY2xhc3M9InRhYkVuZCI+Jm5ic3A7PC9zcGFuPjwvY2FwdGlvbj4KKyAgICA8dHI+CisgICAgICA8dGggY2xhc3M9ImNvbEZpcnN0IiBzY29wZT0iY29sIj5FcnJvcjwvdGg+CisgICAgICA8dGggY2xhc3M9ImNvbExhc3QiIHNjb3BlPSJjb2wiPkRlc2NyaXB0aW9uPC90aD4KKyAgICA8L3RyPgorICAgIDx0Ym9keT4KKyAgICA8dHIgY2xhc3M9ImFsdENvbG9yIj4KKyAgICAgIDx0ZCBjbGFzcz0iY29sRmlyc3QiPjxhIGhyZWY9Ii4uLy4uL2phdmEvdXRpbC9TZXJ2aWNlQ29uZmlndXJhdGlvbkVycm9yLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBqYXZhLnV0aWwiPlNlcnZpY2VDb25maWd1cmF0aW9uRXJyb3I8L2E+PC90ZD4KKyAgICAgIDx0ZCBjbGFzcz0iY29sTGFzdCI+CisgICAgICAgIDxkaXYgY2xhc3M9ImJsb2NrIj5FcnJvciB0aHJvd24gd2hlbiBzb21ldGhpbmcgZ29lcyB3cm9uZyB3aGlsZSBsb2FkaW5nIGEgc2VydmljZSBwcm92aWRlci48L2Rpdj4KKyAgICAgIDwvdGQ+CisgICAgPC90cj4KKyAgICA8L3Rib2R5PgorICA8L3RhYmxlPgorPC9saT4KKzwvdWw+Cis8YSBuYW1lPSJwYWNrYWdlX2Rlc2NyaXB0aW9uIj4KKyAgPCEtLSAgIC0tPgorPC9hPgorPGgyIHRpdGxlPSJQYWNrYWdlIGphdmEudXRpbCBEZXNjcmlwdGlvbiI+UGFja2FnZSBqYXZhLnV0aWwgRGVzY3JpcHRpb248L2gyPgorPGRpdiBjbGFzcz0iYmxvY2siPkNvbnRhaW5zIHRoZSBjb2xsZWN0aW9ucyBmcmFtZXdvcmssIGxlZ2FjeSBjb2xsZWN0aW9uIGNsYXNzZXMsIGV2ZW50IG1vZGVsLAorICBkYXRlIGFuZCB0aW1lIGZhY2lsaXRpZXMsIGludGVybmF0aW9uYWxpemF0aW9uLCBhbmQgbWlzY2VsbGFuZW91cyB1dGlsaXR5CisgIGNsYXNzZXMgKGEgc3RyaW5nIHRva2VuaXplciwgYSByYW5kb20tbnVtYmVyIGdlbmVyYXRvciwgYW5kIGEgYml0IGFycmF5KS4KKworICA8aDI+UGFja2FnZSBTcGVjaWZpY2F0aW9uPC9oMj4KKyAgPHVsPgorICAgIDxsaT48YSBocmVmPSIuLi8uLi8uLi90ZWNobm90ZXMvZ3VpZGVzL2NvbGxlY3Rpb25zL292ZXJ2aWV3Lmh0bWwiPjxiPkNvbGxlY3Rpb25zIEZyYW1ld29yayBPdmVydmlldzwvYj48L2E+CisgICAgPGxpPjxhIGhyZWY9Ii4uLy4uLy4uL3RlY2hub3Rlcy9ndWlkZXMvY29sbGVjdGlvbnMvcmVmZXJlbmNlLmh0bWwiPjxiPgorICAgICAgQ29sbGVjdGlvbnMgRnJhbWV3b3JrIEFubm90YXRlZCBPdXRsaW5lPC9iPjwvYT4KKyAgPC91bD4KKworICA8aDI+UmVsYXRlZCBEb2N1bWVudGF0aW9uPC9oMj4KKyAgRm9yIG92ZXJ2aWV3cywgdHV0b3JpYWxzLCBleGFtcGxlcywgZ3VpZGVzLCBhbmQgdG9vbCBkb2N1bWVudGF0aW9uLCBwbGVhc2Ugc2VlOgorICA8dWw+CisgICAgPGxpPjxhIGhyZWY9Imh0dHA6Ly93d3cuamF2YS5zdW4uY29tL2RvY3MvYm9va3MvdHV0b3JpYWwvY29sbGVjdGlvbnMvIj4KKyAgICAgIDxiPkNvbGxlY3Rpb25zIEZyYW1ld29yayBUdXRvcmlhbDwvYj48L2E+CisgICAgPGxpPjxhCisgICAgICAgIGhyZWY9Ii4uLy4uLy4uL3RlY2hub3Rlcy9ndWlkZXMvY29sbGVjdGlvbnMvZGVzaWduZmFxLmh0bWwiPjxiPkNvbGxlY3Rpb25zCisgICAgICBGcmFtZXdvcmsgRGVzaWduIEZBUTwvYj48L2E+CisgIDwvdWw+PC9kaXY+Cis8ZGw+PGR0PjxzcGFuIGNsYXNzPSJzdHJvbmciPlNpbmNlOjwvc3Bhbj48L2R0PgorICA8ZGQ+SkRLMS4wPC9kZD48L2RsPgorPC9kaXY+Cis8IS0tID09PT09PT0gU1RBUlQgT0YgQk9UVE9NIE5BVkJBUiA9PT09PT0gLS0+Cis8ZGl2IGNsYXNzPSJib3R0b21OYXYiPjxhIG5hbWU9Im5hdmJhcl9ib3R0b20iPgorICA8IS0tICAgLS0+Cis8L2E+PGEgaHJlZj0iI3NraXAtbmF2YmFyX2JvdHRvbSIgdGl0bGU9IlNraXAgbmF2aWdhdGlvbiBsaW5rcyI+PC9hPjxhIG5hbWU9Im5hdmJhcl9ib3R0b21fZmlyc3Ryb3ciPgorICA8IS0tICAgLS0+Cis8L2E+CisgIDx1bCBjbGFzcz0ibmF2TGlzdCIgdGl0bGU9Ik5hdmlnYXRpb24iPgorICAgIDxsaT48YSBocmVmPSIuLi8uLi9vdmVydmlldy1zdW1tYXJ5Lmh0bWwiPk92ZXJ2aWV3PC9hPjwvbGk+CisgICAgPGxpIGNsYXNzPSJuYXZCYXJDZWxsMVJldiI+UGFja2FnZTwvbGk+CisgICAgPGxpPkNsYXNzPC9saT4KKyAgICA8bGk+PGEgaHJlZj0icGFja2FnZS11c2UuaHRtbCI+VXNlPC9hPjwvbGk+CisgICAgPGxpPjxhIGhyZWY9InBhY2thZ2UtdHJlZS5odG1sIj5UcmVlPC9hPjwvbGk+CisgICAgPGxpPjxhIGhyZWY9Ii4uLy4uL2RlcHJlY2F0ZWQtbGlzdC5odG1sIj5EZXByZWNhdGVkPC9hPjwvbGk+CisgICAgPGxpPjxhIGhyZWY9Ii4uLy4uL2luZGV4LWZpbGVzL2luZGV4LTEuaHRtbCI+SW5kZXg8L2E+PC9saT4KKyAgICA8bGk+PGEgaHJlZj0iLi4vLi4vaGVscC1kb2MuaHRtbCI+SGVscDwvYT48L2xpPgorICA8L3VsPgorICA8ZGl2IGNsYXNzPSJhYm91dExhbmd1YWdlIj48ZW0+PHN0cm9uZz5KYXZhJnRyYWRlOyZuYnNwO1BsYXRmb3JtPGJyPlN0YW5kYXJkJm5ic3A7RWQuJm5ic3A7Nzwvc3Ryb25nPjwvZW0+PC9kaXY+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9InN1Yk5hdiI+CisgIDx1bCBjbGFzcz0ibmF2TGlzdCI+CisgICAgPGxpPjxhIGhyZWY9Ii4uLy4uL2phdmEvdGV4dC9zcGkvcGFja2FnZS1zdW1tYXJ5Lmh0bWwiPlByZXYgUGFja2FnZTwvYT48L2xpPgorICAgIDxsaT48YSBocmVmPSIuLi8uLi9qYXZhL3V0aWwvY29uY3VycmVudC9wYWNrYWdlLXN1bW1hcnkuaHRtbCI+TmV4dCBQYWNrYWdlPC9hPjwvbGk+CisgIDwvdWw+CisgIDx1bCBjbGFzcz0ibmF2TGlzdCI+CisgICAgPGxpPjxhIGhyZWY9Ii4uLy4uL2luZGV4Lmh0bWw/amF2YS91dGlsL3BhY2thZ2Utc3VtbWFyeS5odG1sIiB0YXJnZXQ9Il90b3AiPkZyYW1lczwvYT48L2xpPgorICAgIDxsaT48YSBocmVmPSJwYWNrYWdlLXN1bW1hcnkuaHRtbCIgdGFyZ2V0PSJfdG9wIj5ObyBGcmFtZXM8L2E+PC9saT4KKyAgPC91bD4KKyAgPHVsIGNsYXNzPSJuYXZMaXN0IiBpZD0iYWxsY2xhc3Nlc19uYXZiYXJfYm90dG9tIj4KKyAgICA8bGk+PGEgaHJlZj0iLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPkFsbCBDbGFzc2VzPC9hPjwvbGk+CisgIDwvdWw+CisgIDxkaXY+CisgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPjwhLS0KKyAgYWxsQ2xhc3Nlc0xpbmsgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiYWxsY2xhc3Nlc19uYXZiYXJfYm90dG9tIik7CisgIGlmKHdpbmRvdz09dG9wKSB7CisgICAgYWxsQ2xhc3Nlc0xpbmsuc3R5bGUuZGlzcGxheSA9ICJibG9jayI7CisgIH0KKyAgZWxzZSB7CisgICAgYWxsQ2xhc3Nlc0xpbmsuc3R5bGUuZGlzcGxheSA9ICJub25lIjsKKyAgfQorICAvLy0tPgorICAgIDwvc2NyaXB0PgorICA8L2Rpdj4KKyAgPGEgbmFtZT0ic2tpcC1uYXZiYXJfYm90dG9tIj4KKyAgICA8IS0tICAgLS0+CisgIDwvYT48L2Rpdj4KKzwhLS0gPT09PT09PT0gRU5EIE9GIEJPVFRPTSBOQVZCQVIgPT09PT09PSAtLT4KKzxwIGNsYXNzPSJsZWdhbENvcHkiPjxzbWFsbD48Zm9udCBzaXplPSItMSI+IDxhIGhyZWY9Imh0dHA6Ly9idWdyZXBvcnQuc3VuLmNvbS9idWdyZXBvcnQvIj5TdWJtaXQgYSBidWcgb3IgZmVhdHVyZTwvYT4gPGJyPkZvciBmdXJ0aGVyIEFQSSByZWZlcmVuY2UgYW5kIGRldmVsb3BlciBkb2N1bWVudGF0aW9uLCBzZWUgPGEgaHJlZj0iaHR0cDovL2Rvd25sb2FkLm9yYWNsZS5jb20vamF2YXNlLzcvZG9jcy9pbmRleC5odG1sIiB0YXJnZXQ9Il9ibGFuayI+SmF2YSBTRSBEb2N1bWVudGF0aW9uPC9hPi4gVGhhdCBkb2N1bWVudGF0aW9uIGNvbnRhaW5zIG1vcmUgZGV0YWlsZWQsIGRldmVsb3Blci10YXJnZXRlZCBkZXNjcmlwdGlvbnMsIHdpdGggY29uY2VwdHVhbCBvdmVydmlld3MsIGRlZmluaXRpb25zIG9mIHRlcm1zLCB3b3JrYXJvdW5kcywgYW5kIHdvcmtpbmcgY29kZSBleGFtcGxlcy48YnI+IDxhIGhyZWY9Ii4uLy4uLy4uL2xlZ2FsL2NweXIuaHRtbCI+Q29weXJpZ2h0PC9hPiAmI3gwMGE5OyAxOTkzLCAyMDEyLCBPcmFjbGUgYW5kL29yIGl0cyBhZmZpbGlhdGVzLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gPC9mb250Pjwvc21hbGw+PC9wPgorPCEtLSBTdGFydCBTaXRlQ2F0YWx5c3QgY29kZSAgIC0tPgorPHNjcmlwdCB0eXBlPSJ0ZXh0L0phdmFTY3JpcHQiIHNyYz0iaHR0cDovL3d3dy5vcmFjbGUuY29tL29jb20vZ3JvdXBzL3N5c3RlbW9iamVjdC9AbWt0Z19hZG1pbi9kb2N1bWVudHMvc3lzdGVtb2JqZWN0L3NfY29kZV9kb3dubG9hZC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHR5cGU9InRleHQvSmF2YVNjcmlwdCIgc3JjPSJodHRwOi8vd3d3Lm9yYWNsZS5jb20vb2NvbS9ncm91cHMvc3lzdGVtb2JqZWN0L0Bta3RnX2FkbWluL2RvY3VtZW50cy9zeXN0ZW1vYmplY3Qvc19jb2RlLmpzIj48L3NjcmlwdD4KKworPCEtLSAqKioqKioqKioqIERPIE5PVCBBTFRFUiBBTllUSElORyBCRUxPVyBUSElTIExJTkUgISAqKioqKioqKioqKiAtLT4KKzwhLS0gIEJlbG93IGNvZGUgd2lsbCBzZW5kIHRoZSBpbmZvIHRvIE9tbml0dXJlIHNlcnZlciAtLT4KKzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij52YXIgc19jb2RlPXMudCgpO2lmKHNfY29kZSlkb2N1bWVudC53cml0ZShzX2NvZGUpPC9zY3JpcHQ+CisKKzwhLS0gRW5kIFNpdGVDYXRhbHlzdCBjb2RlIC0tPgorPG5vc2NyaXB0PgorICA8cD5TY3JpcHRpbmcgb24gdGhpcyBwYWdlIHRyYWNrcyB3ZWIgcGFnZSB0cmFmZmljLCBidXQgZG9lcyBub3QgY2hhbmdlIHRoZSBjb250ZW50IGluIGFueSB3YXkuPC9wPgorPC9ub3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9mb2xkaW5nL0N1c3RvbUZvbGRpbmcuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9mb2xkaW5nL0N1c3RvbUZvbGRpbmcuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNjhmNTM1Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2ZvbGRpbmcvQ3VzdG9tRm9sZGluZy5qYXZhCkBAIC0wLDAgKzEsMTcgQEAKK3B1YmxpYyBjbGFzcyBUZXN0IHsKKyAgPGZvbGQgdGV4dD0nTXkgcHJpdmF0ZSBmaWVsZHMnPi8vIDxlZGl0b3ItZm9sZCBkZXNjPSJNeSBwcml2YXRlIGZpZWxkcyI+CisgIHByaXZhdGUgaW50IHg7CisgIHByaXZhdGUgaW50IHk7CisgIC8vIDwvZWRpdG9yLWZvbGQ+PC9mb2xkPgorCisgIDxmb2xkIHRleHQ9J015IG1ldGhvZHMnPi8vIDxlZGl0b3ItZm9sZCBkZXNjPSJNeSBtZXRob2RzIj4KKyAgcHJpdmF0ZSB2b2lkIGRvU29tZXRoaW5nKCkgPGZvbGQgdGV4dD0ney4uLn0nPnsKKyAgICBTdHJpbmdCdWlsZGVyIHMgPSBuZXcgU3RyaW5nQnVpbGRlcigpOworICAgIDxmb2xkIHRleHQ9J015IGNvZGUnPi8vIDxlZGl0b3ItZm9sZCBkZXNjPSJNeSBjb2RlIj4KKyAgICBzLmFwcGVuZCgiYSIpOworICAgIHMuYXBwZW5kKCJiIik7CisgICAgLy8gPC9lZGl0b3ItZm9sZD48L2ZvbGQ+CisgICAgU3lzdGVtLm91dC5wcmludGxuKHMudG9TdHJpbmcoKSk7CisgIH08L2ZvbGQ+CisgIC8vIDwvZWRpdG9yLWZvbGQ+PC9mb2xkPgorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9mb2xkaW5nL0VuZE9mTGluZUNvbW1lbnRzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZm9sZGluZy9FbmRPZkxpbmVDb21tZW50cy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ1MzZmYzMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZm9sZGluZy9FbmRPZkxpbmVDb21tZW50cy5qYXZhCkBAIC0wLDAgKzEsMTQgQEAKK2NsYXNzIFRlc3QgeworICAKKyAgPGZvbGQgdGV4dD0nLy8uLi4nPi8vIGNsYXNzLWxldmVsIGZvbGRpbmcxCisgIC8vIGNsYXNzLWxldmVsIGZvbGRpbmcyPC9mb2xkPgorICAKKyAgcHVibGljIHZvaWQgZm9vKCkgPGZvbGQgdGV4dD0ney4uLn0nPnsKKyAgICA8Zm9sZCB0ZXh0PScvLy4uLic+Ly8gbWV0aG9kLWxldmVsIGZvbGRpbmcxCisgICAgLy8gbWV0aG9kLWxldmVsIGZvbGRpbmcyPC9mb2xkPgorICAgIGludCBpID0gMTsKKyAgICAvLyBtZXRob2QtbGV2ZWwgZm9sZGluZzIKKyAgfTwvZm9sZD4KKworICAvLyBjbGFzcy1sZXZlbCBmb2xkaW5nMworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9nZW5lcmF0ZUNvbnN0cnVjdG9yL2FmdGVyQWJzdHJhY3RDbGFzcy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2dlbmVyYXRlQ29uc3RydWN0b3IvYWZ0ZXJBYnN0cmFjdENsYXNzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmU4NTBiMQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9nZW5lcmF0ZUNvbnN0cnVjdG9yL2FmdGVyQWJzdHJhY3RDbGFzcy5qYXZhCkBAIC0wLDAgKzEsNCBAQAorcHVibGljIGFic3RyYWN0IGNsYXNzIFRlc3QgeworICAgIHByb3RlY3RlZCBUZXN0KCkgezxjYXJldD4KKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZ2VuZXJhdGVDb25zdHJ1Y3Rvci9hZnRlckJvdW5kQ29tbWVudHMuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9nZW5lcmF0ZUNvbnN0cnVjdG9yL2FmdGVyQm91bmRDb21tZW50cy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA5YzY3YzcKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZ2VuZXJhdGVDb25zdHJ1Y3Rvci9hZnRlckJvdW5kQ29tbWVudHMuamF2YQpAQCAtMCwwICsxLDkgQEAKK3B1YmxpYyBjbGFzcyBGb28geworICAgIHB1YmxpYyBGb28oKSB7PGNhcmV0PgorICAgIH0KKyAgICAvLyBNZXRob2QgY29tbWVudAorCisgICAgcHVibGljIFN0cmluZyBnZXRTb21lR2V0dGVyKCkgeworICAgICAgICByZXR1cm4gbnVsbDsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZ2VuZXJhdGVDb25zdHJ1Y3Rvci9hZnRlckJvdW5kQ29tbWVudHNLZWVwc0JsYW5rTGluZS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2dlbmVyYXRlQ29uc3RydWN0b3IvYWZ0ZXJCb3VuZENvbW1lbnRzS2VlcHNCbGFua0xpbmUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kM2IzMzVhCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2dlbmVyYXRlQ29uc3RydWN0b3IvYWZ0ZXJCb3VuZENvbW1lbnRzS2VlcHNCbGFua0xpbmUuamF2YQpAQCAtMCwwICsxLDExIEBACitwdWJsaWMgY2xhc3MgRm9vIHsKKworICAgIHB1YmxpYyBGb28oKSB7PGNhcmV0PgorICAgIH0KKworICAgIC8vIE1ldGhvZCBjb21tZW50CisKKyAgICBwdWJsaWMgU3RyaW5nIGdldFNvbWVHZXR0ZXIoKSB7CisgICAgICAgIHJldHVybiBudWxsOworICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9nZW5lcmF0ZUNvbnN0cnVjdG9yL2FmdGVyRW51bVdpdGhBYnN0cmFjdE1ldGhvZC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2dlbmVyYXRlQ29uc3RydWN0b3IvYWZ0ZXJFbnVtV2l0aEFic3RyYWN0TWV0aG9kLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjEyYmM5NAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9nZW5lcmF0ZUNvbnN0cnVjdG9yL2FmdGVyRW51bVdpdGhBYnN0cmFjdE1ldGhvZC5qYXZhCkBAIC0wLDAgKzEsMTIgQEAKK3B1YmxpYyBlbnVtIE9wZXJhdGlvbiB7CisgICAgUExVUyB7CisgICAgICAgIGludCBldmFsKGludCB4LCBpbnQgeSkgeworICAgICAgICAgICAgcmV0dXJuIHggKyB5OworICAgICAgICB9CisgICAgfTsKKworICAgIGFic3RyYWN0IGludCBldmFsKGludCB4LCBpbnQgeSk7CisKKyAgICBwcml2YXRlIE9wZXJhdGlvbigpIHsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2dlbmVyYXRlQ29uc3RydWN0b3IvYWZ0ZXJGaW5hbEZpZWxkUHJlc2VsZWN0aW9uLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZ2VuZXJhdGVDb25zdHJ1Y3Rvci9hZnRlckZpbmFsRmllbGRQcmVzZWxlY3Rpb24uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZDQwMmE5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2dlbmVyYXRlQ29uc3RydWN0b3IvYWZ0ZXJGaW5hbEZpZWxkUHJlc2VsZWN0aW9uLmphdmEKQEAgLTAsMCArMSwxMSBAQAorY2xhc3MgVGVzdCB7CisgICAgcHJpdmF0ZSBpbnQgYTsKKyAgICBwcml2YXRlIGZpbmFsIGludCBiOworICAgIHByaXZhdGUgaW50IGM7CisgICAgcHJpdmF0ZSBmaW5hbCBpbnQgZDsKKworICAgIFRlc3QoaW50IGIsIGludCBkKSB7CisgICAgICAgIHRoaXMuYiA9IGI7CisgICAgICAgIHRoaXMuZCA9IGQ7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9nZW5lcmF0ZUNvbnN0cnVjdG9yL2FmdGVySW1tZWRpYXRlbHlBZnRlclJCcmFjZS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2dlbmVyYXRlQ29uc3RydWN0b3IvYWZ0ZXJJbW1lZGlhdGVseUFmdGVyUkJyYWNlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjViOTg1OAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9nZW5lcmF0ZUNvbnN0cnVjdG9yL2FmdGVySW1tZWRpYXRlbHlBZnRlclJCcmFjZS5qYXZhCkBAIC0wLDAgKzEsNSBAQAorY2xhc3MgQQoreworICAgIEEoKSB7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2dlbmVyYXRlQ29uc3RydWN0b3IvYWZ0ZXJOb01vcmVDb25zdHJ1Y3RvcnNDYW5CZUdlbmVyYXRlZC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2dlbmVyYXRlQ29uc3RydWN0b3IvYWZ0ZXJOb01vcmVDb25zdHJ1Y3RvcnNDYW5CZUdlbmVyYXRlZC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVlMThmOTkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZ2VuZXJhdGVDb25zdHJ1Y3Rvci9hZnRlck5vTW9yZUNvbnN0cnVjdG9yc0NhbkJlR2VuZXJhdGVkLmphdmEKQEAgLTAsMCArMSw2IEBACitwdWJsaWMgY2xhc3MgVGVzdCB7CisgIDxjYXJldD4KKworICBwdWJsaWMgVGVzdCgpIHsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9nZW5lcmF0ZUNvbnN0cnVjdG9yL2FmdGVyUGFja2FnZUxvY2FsQ2xhc3MuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9nZW5lcmF0ZUNvbnN0cnVjdG9yL2FmdGVyUGFja2FnZUxvY2FsQ2xhc3MuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZDliMGFkCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2dlbmVyYXRlQ29uc3RydWN0b3IvYWZ0ZXJQYWNrYWdlTG9jYWxDbGFzcy5qYXZhCkBAIC0wLDAgKzEsNCBAQAorY2xhc3MgVGVzdCB7CisgICAgVGVzdCgpIHs8Y2FyZXQ+CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2dlbmVyYXRlQ29uc3RydWN0b3IvYWZ0ZXJQcml2YXRlQ2xhc3MuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9nZW5lcmF0ZUNvbnN0cnVjdG9yL2FmdGVyUHJpdmF0ZUNsYXNzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTk5MDYxNgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9nZW5lcmF0ZUNvbnN0cnVjdG9yL2FmdGVyUHJpdmF0ZUNsYXNzLmphdmEKQEAgLTAsMCArMSw2IEBACitjbGFzcyBUZXN0IHsKKyAgcHJpdmF0ZSBjbGFzcyBGb28geworICAgICAgcHJpdmF0ZSBGb28oKSB7PGNhcmV0PgorICAgICAgfQorICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZ2VuZXJhdGVDb25zdHJ1Y3Rvci9hZnRlclNhbWVOYW1lZEZpZWxkcy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2dlbmVyYXRlQ29uc3RydWN0b3IvYWZ0ZXJTYW1lTmFtZWRGaWVsZHMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMzg4YmMzCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2dlbmVyYXRlQ29uc3RydWN0b3IvYWZ0ZXJTYW1lTmFtZWRGaWVsZHMuamF2YQpAQCAtMCwwICsxLDE2IEBACitwdWJsaWMgY2xhc3MgQ2xhcyBleHRlbmRzIENsYXMyeworICAgIGludCBmb287CisKKyAgICBwdWJsaWMgQ2xhcyhpbnQgZm9vLCBpbnQgZm9vMSkgezxjYXJldD4KKyAgICAgICAgc3VwZXIoZm9vKTsKKyAgICAgICAgZm9vID0gZm9vMTsKKyAgICB9Cit9CisKK2NsYXNzIENsYXMyIHsKKyAgICBpbnQgZm9vOworCisgICAgQ2xhczIoaW50IGZvbykgeworICAgICAgICB0aGlzLmZvbyA9IGZvbzsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZ2VuZXJhdGVDb25zdHJ1Y3Rvci9hZnRlclN1YnN0aXR1dGlvbi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2dlbmVyYXRlQ29uc3RydWN0b3IvYWZ0ZXJTdWJzdGl0dXRpb24uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNDU3OTU2YQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9nZW5lcmF0ZUNvbnN0cnVjdG9yL2FmdGVyU3Vic3RpdHV0aW9uLmphdmEKQEAgLTAsMCArMSwxMyBAQAorY2xhc3MgUGFyZW50PFQ+IHsKKyAgVCBmaWVsZDsKKworICBwdWJsaWMgUGFyZW50KFQgZmllbGQpIHsKKyAgICB0aGlzLmZpZWxkID0gZmllbGQ7CisgIH0KK30KKworY2xhc3MgQ2hpbGQ8SW50ZWdlcj4gZXh0ZW5kcyBQYXJlbnQ8SW50ZWdlcj4geworICAgIENoaWxkKEludGVnZXIgZmllbGQpIHsKKyAgICAgICAgc3VwZXIoZmllbGQpOworICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9nZW5lcmF0ZUNvbnN0cnVjdG9yL2JlZm9yZUFic3RyYWN0Q2xhc3MuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9nZW5lcmF0ZUNvbnN0cnVjdG9yL2JlZm9yZUFic3RyYWN0Q2xhc3MuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40Y2Y5YTBjCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2dlbmVyYXRlQ29uc3RydWN0b3IvYmVmb3JlQWJzdHJhY3RDbGFzcy5qYXZhCkBAIC0wLDAgKzEsMyBAQAorcHVibGljIGFic3RyYWN0IGNsYXNzIFRlc3QgeworICA8Y2FyZXQ+Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZ2VuZXJhdGVDb25zdHJ1Y3Rvci9iZWZvcmVCb3VuZENvbW1lbnRzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZ2VuZXJhdGVDb25zdHJ1Y3Rvci9iZWZvcmVCb3VuZENvbW1lbnRzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2E1Zjg1MQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9nZW5lcmF0ZUNvbnN0cnVjdG9yL2JlZm9yZUJvdW5kQ29tbWVudHMuamF2YQpAQCAtMCwwICsxLDkgQEAKK3B1YmxpYyBjbGFzcyBGb28geworICAgIDxjYXJldD4KKworICAgIC8vIE1ldGhvZCBjb21tZW50CisKKyAgICBwdWJsaWMgU3RyaW5nIGdldFNvbWVHZXR0ZXIoKSB7CisgICAgICAgIHJldHVybiBudWxsOworICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9nZW5lcmF0ZUNvbnN0cnVjdG9yL2JlZm9yZUJvdW5kQ29tbWVudHNLZWVwc0JsYW5rTGluZS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2dlbmVyYXRlQ29uc3RydWN0b3IvYmVmb3JlQm91bmRDb21tZW50c0tlZXBzQmxhbmtMaW5lLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWUwNjAxYgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9nZW5lcmF0ZUNvbnN0cnVjdG9yL2JlZm9yZUJvdW5kQ29tbWVudHNLZWVwc0JsYW5rTGluZS5qYXZhCkBAIC0wLDAgKzEsMTAgQEAKK3B1YmxpYyBjbGFzcyBGb28geworCisgICAgPGNhcmV0PgorCisgICAgLy8gTWV0aG9kIGNvbW1lbnQKKworICAgIHB1YmxpYyBTdHJpbmcgZ2V0U29tZUdldHRlcigpIHsKKyAgICAgICAgcmV0dXJuIG51bGw7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2dlbmVyYXRlQ29uc3RydWN0b3IvYmVmb3JlRW51bVdpdGhBYnN0cmFjdE1ldGhvZC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2dlbmVyYXRlQ29uc3RydWN0b3IvYmVmb3JlRW51bVdpdGhBYnN0cmFjdE1ldGhvZC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhkZjQwOGYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZ2VuZXJhdGVDb25zdHJ1Y3Rvci9iZWZvcmVFbnVtV2l0aEFic3RyYWN0TWV0aG9kLmphdmEKQEAgLTAsMCArMSwxMCBAQAorcHVibGljIGVudW0gT3BlcmF0aW9uIHsKKyAgICBQTFVTIHsKKyAgICAgICAgaW50IGV2YWwoaW50IHgsIGludCB5KSB7CisgICAgICAgICAgICByZXR1cm4geCArIHk7CisgICAgICAgIH0KKyAgICB9OworCisgICAgYWJzdHJhY3QgaW50IGV2YWwoaW50IHgsIGludCB5KTsKKyAgICA8Y2FyZXQ+Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2dlbmVyYXRlQ29uc3RydWN0b3IvYmVmb3JlRmluYWxGaWVsZFByZXNlbGVjdGlvbi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2dlbmVyYXRlQ29uc3RydWN0b3IvYmVmb3JlRmluYWxGaWVsZFByZXNlbGVjdGlvbi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU3NDU5YTUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZ2VuZXJhdGVDb25zdHJ1Y3Rvci9iZWZvcmVGaW5hbEZpZWxkUHJlc2VsZWN0aW9uLmphdmEKQEAgLTAsMCArMSw2IEBACitjbGFzcyBUZXN0IHsKKyAgICBwcml2YXRlIGludCBhOworICAgIHByaXZhdGUgZmluYWwgaW50IGI7CisgICAgcHJpdmF0ZSBpbnQgYzsKKyAgICBwcml2YXRlIGZpbmFsIGludCBkOworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9nZW5lcmF0ZUNvbnN0cnVjdG9yL2JlZm9yZUltbWVkaWF0ZWx5QWZ0ZXJSQnJhY2UuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9nZW5lcmF0ZUNvbnN0cnVjdG9yL2JlZm9yZUltbWVkaWF0ZWx5QWZ0ZXJSQnJhY2UuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMTU0ZWUxCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2dlbmVyYXRlQ29uc3RydWN0b3IvYmVmb3JlSW1tZWRpYXRlbHlBZnRlclJCcmFjZS5qYXZhCkBAIC0wLDAgKzEsMyBAQAorY2xhc3MgQQorezxjYXJldD4KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9nZW5lcmF0ZUNvbnN0cnVjdG9yL2JlZm9yZU5vTW9yZUNvbnN0cnVjdG9yc0NhbkJlR2VuZXJhdGVkLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZ2VuZXJhdGVDb25zdHJ1Y3Rvci9iZWZvcmVOb01vcmVDb25zdHJ1Y3RvcnNDYW5CZUdlbmVyYXRlZC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVlMThmOTkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZ2VuZXJhdGVDb25zdHJ1Y3Rvci9iZWZvcmVOb01vcmVDb25zdHJ1Y3RvcnNDYW5CZUdlbmVyYXRlZC5qYXZhCkBAIC0wLDAgKzEsNiBAQAorcHVibGljIGNsYXNzIFRlc3QgeworICA8Y2FyZXQ+CisKKyAgcHVibGljIFRlc3QoKSB7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZ2VuZXJhdGVDb25zdHJ1Y3Rvci9iZWZvcmVQYWNrYWdlTG9jYWxDbGFzcy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2dlbmVyYXRlQ29uc3RydWN0b3IvYmVmb3JlUGFja2FnZUxvY2FsQ2xhc3MuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MTI1NDAzCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2dlbmVyYXRlQ29uc3RydWN0b3IvYmVmb3JlUGFja2FnZUxvY2FsQ2xhc3MuamF2YQpAQCAtMCwwICsxLDMgQEAKK2NsYXNzIFRlc3QgeworICA8Y2FyZXQ+Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZ2VuZXJhdGVDb25zdHJ1Y3Rvci9iZWZvcmVQcml2YXRlQ2xhc3MuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9nZW5lcmF0ZUNvbnN0cnVjdG9yL2JlZm9yZVByaXZhdGVDbGFzcy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFlYzY5ZjEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZ2VuZXJhdGVDb25zdHJ1Y3Rvci9iZWZvcmVQcml2YXRlQ2xhc3MuamF2YQpAQCAtMCwwICsxLDUgQEAKK2NsYXNzIFRlc3QgeworICBwcml2YXRlIGNsYXNzIEZvbyB7CisgIDxjYXJldD4KKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2dlbmVyYXRlQ29uc3RydWN0b3IvYmVmb3JlU2FtZU5hbWVkRmllbGRzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZ2VuZXJhdGVDb25zdHJ1Y3Rvci9iZWZvcmVTYW1lTmFtZWRGaWVsZHMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lODdhOGYyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2dlbmVyYXRlQ29uc3RydWN0b3IvYmVmb3JlU2FtZU5hbWVkRmllbGRzLmphdmEKQEAgLTAsMCArMSwxMiBAQAorcHVibGljIGNsYXNzIENsYXMgZXh0ZW5kcyBDbGFzMnsKKyAgICBpbnQgZm9vOworICAgIDxjYXJldD4KK30KKworY2xhc3MgQ2xhczIgeworICAgIGludCBmb287CisKKyAgICBDbGFzMihpbnQgZm9vKSB7CisgICAgICAgIHRoaXMuZm9vID0gZm9vOworICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9nZW5lcmF0ZUNvbnN0cnVjdG9yL2JlZm9yZVN1YnN0aXR1dGlvbi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2dlbmVyYXRlQ29uc3RydWN0b3IvYmVmb3JlU3Vic3RpdHV0aW9uLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTc2MGI5ZQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9nZW5lcmF0ZUNvbnN0cnVjdG9yL2JlZm9yZVN1YnN0aXR1dGlvbi5qYXZhCkBAIC0wLDAgKzEsMTIgQEAKK2NsYXNzIFBhcmVudDxUPiB7CisgIFQgZmllbGQ7CisKKyAgcHVibGljIFBhcmVudChUIGZpZWxkKSB7CisgICAgdGhpcy5maWVsZCA9IGZpZWxkOworICB9Cit9CisKK2NsYXNzIENoaWxkPEludGVnZXI+IGV4dGVuZHMgUGFyZW50PEludGVnZXI+IHsKKyAgIDxjYXJldD4KKworfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2dlbmVyYXRlSmF2YWRvYy9hZnRlcjEuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9nZW5lcmF0ZUphdmFkb2MvYWZ0ZXIxLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWQ3Y2M1NwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9nZW5lcmF0ZUphdmFkb2MvYWZ0ZXIxLmphdmEKQEAgLTAsMCArMSw3IEBACitjbGFzcyBUZXN0IHsKKyAgICAvKioKKyAgICAgKiA8Y2FyZXQ+CisgICAgICogQHJldHVybgorICAgICAqLworICAgIHB1YmxpYyBTdHJpbmcgZm9vKCkge30KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZ2VuZXJhdGVKYXZhZG9jL2FmdGVyMi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2dlbmVyYXRlSmF2YWRvYy9hZnRlcjIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNWVhOTE2Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2dlbmVyYXRlSmF2YWRvYy9hZnRlcjIuamF2YQpAQCAtMCwwICsxLDkgQEAKK2NsYXNzIFRlc3QgeworICAgIC8qKgorICAgICAqIDxjYXJldD4KKyAgICAgKiBAcGFyYW0gYQorICAgICAqIEBwYXJhbSBwYXJhbQorICAgICAqIEBwYXJhbSBkZGQKKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBmb28oaW50IGEsIFN0cmluZyBwYXJhbSwgZG91YmxlIGRkZCkge30KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZ2VuZXJhdGVKYXZhZG9jL2FmdGVyMy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2dlbmVyYXRlSmF2YWRvYy9hZnRlcjMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44Njc1ZWVhCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2dlbmVyYXRlSmF2YWRvYy9hZnRlcjMuamF2YQpAQCAtMCwwICsxLDcgQEAKK2NsYXNzIFRlc3QgeworICAgIC8qKgorICAgICAqIDxjYXJldD4KKyAgICAgKiBAdGhyb3dzIElPRXhjZXB0aW9uCisgICAgICovCisgICAgcHVibGljIHZvaWQgZm9vKCkgdGhyb3dzIElPRXhjZXB0aW9uIHt9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2dlbmVyYXRlSmF2YWRvYy9hZnRlcklkZWFkZXYyMzI4LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZ2VuZXJhdGVKYXZhZG9jL2FmdGVySWRlYWRldjIzMjguamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NWUyNzJhCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2dlbmVyYXRlSmF2YWRvYy9hZnRlcklkZWFkZXYyMzI4LmphdmEKQEAgLTAsMCArMSw4IEBACitjbGFzcyBUZXN0IHsKKyAgICAvKioKKyAgICAgKiA8Y2FyZXQ+CisgICAgICovCisgIHZvaWQgdGVzdCgpIHsKKyAgICBTdHJpbmcgc29tZXRoaW5nID0gIi8qKiBzb21ldGhpbmcgKi8iOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2dlbmVyYXRlSmF2YWRvYy9hZnRlcklkZWFkZXYyMzI4XzIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9nZW5lcmF0ZUphdmFkb2MvYWZ0ZXJJZGVhZGV2MjMyOF8yLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGI2MTc3ZAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9nZW5lcmF0ZUphdmFkb2MvYWZ0ZXJJZGVhZGV2MjMyOF8yLmphdmEKQEAgLTAsMCArMSw5IEBACitjbGFzcyBUZXN0IHsKKyAgICAvKioKKyAgICAgKiA8Y2FyZXQ+CisgICAgICoKKyAgICAgKiAic3RyaW5nIiAqLworICB2b2lkIHRlc3QoKSB7CisgICAgU3RyaW5nIHNvbWV0aGluZyA9ICIiOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2dlbmVyYXRlSmF2YWRvYy9iZWZvcmUxLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZ2VuZXJhdGVKYXZhZG9jL2JlZm9yZTEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yN2UyODc4Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2dlbmVyYXRlSmF2YWRvYy9iZWZvcmUxLmphdmEKQEAgLTAsMCArMSw0IEBACitjbGFzcyBUZXN0IHsKKyAgICAvKio8Y2FyZXQ+CisgICAgcHVibGljIFN0cmluZyBmb28oKSB7fQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9nZW5lcmF0ZUphdmFkb2MvYmVmb3JlMi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2dlbmVyYXRlSmF2YWRvYy9iZWZvcmUyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2I3OGQ0NAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9nZW5lcmF0ZUphdmFkb2MvYmVmb3JlMi5qYXZhCkBAIC0wLDAgKzEsNCBAQAorY2xhc3MgVGVzdCB7CisgICAgLyoqPGNhcmV0PgorICAgIHB1YmxpYyB2b2lkIGZvbyhpbnQgYSwgU3RyaW5nIHBhcmFtLCBkb3VibGUgZGRkKSB7fQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9nZW5lcmF0ZUphdmFkb2MvYmVmb3JlMy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2dlbmVyYXRlSmF2YWRvYy9iZWZvcmUzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTMwMDE1NwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9nZW5lcmF0ZUphdmFkb2MvYmVmb3JlMy5qYXZhCkBAIC0wLDAgKzEsNCBAQAorY2xhc3MgVGVzdCB7CisgICAgLyoqPGNhcmV0PgorICAgIHB1YmxpYyB2b2lkIGZvbygpIHRocm93cyBJT0V4Y2VwdGlvbiB7fQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9nZW5lcmF0ZUphdmFkb2MvYmVmb3JlSWRlYWRldjIzMjguamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9nZW5lcmF0ZUphdmFkb2MvYmVmb3JlSWRlYWRldjIzMjguamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41Yjk1YmFjCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2dlbmVyYXRlSmF2YWRvYy9iZWZvcmVJZGVhZGV2MjMyOC5qYXZhCkBAIC0wLDAgKzEsNiBAQAorY2xhc3MgVGVzdCB7CisgIC8qKjxjYXJldD4KKyAgdm9pZCB0ZXN0KCkgeworICAgIFN0cmluZyBzb21ldGhpbmcgPSAiLyoqIHNvbWV0aGluZyAqLyI7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZ2VuZXJhdGVKYXZhZG9jL2JlZm9yZUlkZWFkZXYyMzI4XzIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9nZW5lcmF0ZUphdmFkb2MvYmVmb3JlSWRlYWRldjIzMjhfMi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdjZTNjMTQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZ2VuZXJhdGVKYXZhZG9jL2JlZm9yZUlkZWFkZXYyMzI4XzIuamF2YQpAQCAtMCwwICsxLDggQEAKK2NsYXNzIFRlc3QgeworICAgIC8qKjxjYXJldD4KKyAgICAgKgorICAgICAqICJzdHJpbmciICovCisgIHZvaWQgdGVzdCgpIHsKKyAgICBTdHJpbmcgc29tZXRoaW5nID0gIiI7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZ2VuZXJhdGlvbi9zdXJyb3VuZFdpdGgvamF2YS9Db21tZW50QXNGaXJzdENvZGVCbG9ja1N1cnJvdW5kU3RhdGVtZW50LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZ2VuZXJhdGlvbi9zdXJyb3VuZFdpdGgvamF2YS9Db21tZW50QXNGaXJzdENvZGVCbG9ja1N1cnJvdW5kU3RhdGVtZW50LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2RkZDAxNAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9nZW5lcmF0aW9uL3N1cnJvdW5kV2l0aC9qYXZhL0NvbW1lbnRBc0ZpcnN0Q29kZUJsb2NrU3Vycm91bmRTdGF0ZW1lbnQuamF2YQpAQCAtMCwwICsxLDYgQEAKK2NsYXNzIFRlc3QgeworICAgIHZvaWQgZm9vKCkgeworICAgICAgICA8c2VsZWN0aW9uPi8vIFRoaXMgaXMgY29tbWVudCIKKyAgICAgICAgICAgIGludCBpID0gMTs8L3NlbGVjdGlvbj4KKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2dlbmVyYXRpb24vc3Vycm91bmRXaXRoL2phdmEvQ29tbWVudEFzRmlyc3RDb2RlQmxvY2tTdXJyb3VuZFN0YXRlbWVudF9hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2dlbmVyYXRpb24vc3Vycm91bmRXaXRoL2phdmEvQ29tbWVudEFzRmlyc3RDb2RlQmxvY2tTdXJyb3VuZFN0YXRlbWVudF9hZnRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAxYjI5M2IKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZ2VuZXJhdGlvbi9zdXJyb3VuZFdpdGgvamF2YS9Db21tZW50QXNGaXJzdENvZGVCbG9ja1N1cnJvdW5kU3RhdGVtZW50X2FmdGVyLmphdmEKQEAgLTAsMCArMSw5IEBACitjbGFzcyBUZXN0IHsKKyAgICB2b2lkIGZvbygpIHsKKyAgICAgICAgeworICAgICAgICAgICAgLy8gVGhpcyBpcyBjb21tZW50IgorICAgICAgICAgICAgaW50IGkgPSAxOworICAgICAgICB9PGNhcmV0PgorCisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9nZW5lcmF0aW9uL3N1cnJvdW5kV2l0aC9qYXZhL0NvbW1lbnRBc0ZpcnN0RG9XaGlsZVN1cnJvdW5kU3RhdGVtZW50LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZ2VuZXJhdGlvbi9zdXJyb3VuZFdpdGgvamF2YS9Db21tZW50QXNGaXJzdERvV2hpbGVTdXJyb3VuZFN0YXRlbWVudC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNkZGQwMTQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZ2VuZXJhdGlvbi9zdXJyb3VuZFdpdGgvamF2YS9Db21tZW50QXNGaXJzdERvV2hpbGVTdXJyb3VuZFN0YXRlbWVudC5qYXZhCkBAIC0wLDAgKzEsNiBAQAorY2xhc3MgVGVzdCB7CisgICAgdm9pZCBmb28oKSB7CisgICAgICAgIDxzZWxlY3Rpb24+Ly8gVGhpcyBpcyBjb21tZW50IgorICAgICAgICAgICAgaW50IGkgPSAxOzwvc2VsZWN0aW9uPgorICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZ2VuZXJhdGlvbi9zdXJyb3VuZFdpdGgvamF2YS9Db21tZW50QXNGaXJzdERvV2hpbGVTdXJyb3VuZFN0YXRlbWVudF9hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2dlbmVyYXRpb24vc3Vycm91bmRXaXRoL2phdmEvQ29tbWVudEFzRmlyc3REb1doaWxlU3Vycm91bmRTdGF0ZW1lbnRfYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NjUzOGIwCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2dlbmVyYXRpb24vc3Vycm91bmRXaXRoL2phdmEvQ29tbWVudEFzRmlyc3REb1doaWxlU3Vycm91bmRTdGF0ZW1lbnRfYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDggQEAKK2NsYXNzIFRlc3QgeworICAgIHZvaWQgZm9vKCkgeworICAgICAgICBkbyB7CisgICAgICAgICAgICAvLyBUaGlzIGlzIGNvbW1lbnQiCisgICAgICAgICAgICBpbnQgaSA9IDE7CisgICAgICAgIH0gd2hpbGUgKDxjYXJldD48c2VsZWN0aW9uPnRydWU8L3NlbGVjdGlvbj4pOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZ2VuZXJhdGlvbi9zdXJyb3VuZFdpdGgvamF2YS9Db21tZW50QXNGaXJzdEZvclN1cnJvdW5kU3RhdGVtZW50LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZ2VuZXJhdGlvbi9zdXJyb3VuZFdpdGgvamF2YS9Db21tZW50QXNGaXJzdEZvclN1cnJvdW5kU3RhdGVtZW50LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2RkZDAxNAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9nZW5lcmF0aW9uL3N1cnJvdW5kV2l0aC9qYXZhL0NvbW1lbnRBc0ZpcnN0Rm9yU3Vycm91bmRTdGF0ZW1lbnQuamF2YQpAQCAtMCwwICsxLDYgQEAKK2NsYXNzIFRlc3QgeworICAgIHZvaWQgZm9vKCkgeworICAgICAgICA8c2VsZWN0aW9uPi8vIFRoaXMgaXMgY29tbWVudCIKKyAgICAgICAgICAgIGludCBpID0gMTs8L3NlbGVjdGlvbj4KKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2dlbmVyYXRpb24vc3Vycm91bmRXaXRoL2phdmEvQ29tbWVudEFzRmlyc3RGb3JTdXJyb3VuZFN0YXRlbWVudF9hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2dlbmVyYXRpb24vc3Vycm91bmRXaXRoL2phdmEvQ29tbWVudEFzRmlyc3RGb3JTdXJyb3VuZFN0YXRlbWVudF9hZnRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNjMDQyYmQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZ2VuZXJhdGlvbi9zdXJyb3VuZFdpdGgvamF2YS9Db21tZW50QXNGaXJzdEZvclN1cnJvdW5kU3RhdGVtZW50X2FmdGVyLmphdmEKQEAgLTAsMCArMSw4IEBACitjbGFzcyBUZXN0IHsKKyAgICB2b2lkIGZvbygpIHsKKyAgICAgICAgZm9yICg8Y2FyZXQ+KSB7CisgICAgICAgICAgICAvLyBUaGlzIGlzIGNvbW1lbnQiCisgICAgICAgICAgICBpbnQgaSA9IDE7CisgICAgICAgIH0KKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2dlbmVyYXRpb24vc3Vycm91bmRXaXRoL2phdmEvQ29tbWVudEFzRmlyc3RJZkVsc2VTdXJyb3VuZFN0YXRlbWVudC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2dlbmVyYXRpb24vc3Vycm91bmRXaXRoL2phdmEvQ29tbWVudEFzRmlyc3RJZkVsc2VTdXJyb3VuZFN0YXRlbWVudC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmExNTQ5NGEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZ2VuZXJhdGlvbi9zdXJyb3VuZFdpdGgvamF2YS9Db21tZW50QXNGaXJzdElmRWxzZVN1cnJvdW5kU3RhdGVtZW50LmphdmEKQEAgLTAsMCArMSw2IEBACitjbGFzcyBUZXN0IHsKKyAgICB2b2lkIGZvbygpIHsKKyAgICAgICAgPHNlbGVjdGlvbj4vLyBUaGlzIGlzIGNvbW1lbnQiCisgICAgICAgIGludCBpID0gMTs8L3NlbGVjdGlvbj4KKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2dlbmVyYXRpb24vc3Vycm91bmRXaXRoL2phdmEvQ29tbWVudEFzRmlyc3RJZkVsc2VTdXJyb3VuZFN0YXRlbWVudF9hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2dlbmVyYXRpb24vc3Vycm91bmRXaXRoL2phdmEvQ29tbWVudEFzRmlyc3RJZkVsc2VTdXJyb3VuZFN0YXRlbWVudF9hZnRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJhYjMzYTUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZ2VuZXJhdGlvbi9zdXJyb3VuZFdpdGgvamF2YS9Db21tZW50QXNGaXJzdElmRWxzZVN1cnJvdW5kU3RhdGVtZW50X2FmdGVyLmphdmEKQEAgLTAsMCArMSw5IEBACitjbGFzcyBUZXN0IHsKKyAgICB2b2lkIGZvbygpIHsKKyAgICAgICAgaWYgKDxjYXJldD4pIHsKKyAgICAgICAgICAgIC8vIFRoaXMgaXMgY29tbWVudCIKKyAgICAgICAgICAgIGludCBpID0gMTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgfQorICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZ2VuZXJhdGlvbi9zdXJyb3VuZFdpdGgvamF2YS9Db21tZW50QXNGaXJzdElmU3Vycm91bmRTdGF0ZW1lbnQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9nZW5lcmF0aW9uL3N1cnJvdW5kV2l0aC9qYXZhL0NvbW1lbnRBc0ZpcnN0SWZTdXJyb3VuZFN0YXRlbWVudC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNkZGQwMTQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZ2VuZXJhdGlvbi9zdXJyb3VuZFdpdGgvamF2YS9Db21tZW50QXNGaXJzdElmU3Vycm91bmRTdGF0ZW1lbnQuamF2YQpAQCAtMCwwICsxLDYgQEAKK2NsYXNzIFRlc3QgeworICAgIHZvaWQgZm9vKCkgeworICAgICAgICA8c2VsZWN0aW9uPi8vIFRoaXMgaXMgY29tbWVudCIKKyAgICAgICAgICAgIGludCBpID0gMTs8L3NlbGVjdGlvbj4KKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2dlbmVyYXRpb24vc3Vycm91bmRXaXRoL2phdmEvQ29tbWVudEFzRmlyc3RJZlN1cnJvdW5kU3RhdGVtZW50X2FmdGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZ2VuZXJhdGlvbi9zdXJyb3VuZFdpdGgvamF2YS9Db21tZW50QXNGaXJzdElmU3Vycm91bmRTdGF0ZW1lbnRfYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YTg5MjdhCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2dlbmVyYXRpb24vc3Vycm91bmRXaXRoL2phdmEvQ29tbWVudEFzRmlyc3RJZlN1cnJvdW5kU3RhdGVtZW50X2FmdGVyLmphdmEKQEAgLTAsMCArMSw4IEBACitjbGFzcyBUZXN0IHsKKyAgICB2b2lkIGZvbygpIHsKKyAgICAgICAgaWYgKDxjYXJldD4pIHsKKyAgICAgICAgICAgIC8vIFRoaXMgaXMgY29tbWVudCIKKyAgICAgICAgICAgIGludCBpID0gMTsKKyAgICAgICAgfQorICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZ2VuZXJhdGlvbi9zdXJyb3VuZFdpdGgvamF2YS9Db21tZW50QXNGaXJzdFJ1bm5hYmxlU3Vycm91bmRTdGF0ZW1lbnQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9nZW5lcmF0aW9uL3N1cnJvdW5kV2l0aC9qYXZhL0NvbW1lbnRBc0ZpcnN0UnVubmFibGVTdXJyb3VuZFN0YXRlbWVudC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMwMzViZTMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZ2VuZXJhdGlvbi9zdXJyb3VuZFdpdGgvamF2YS9Db21tZW50QXNGaXJzdFJ1bm5hYmxlU3Vycm91bmRTdGF0ZW1lbnQuamF2YQpAQCAtMCwwICsxLDYgQEAKK2NsYXNzIFRlc3QgeworICAgIHZvaWQgZm9vKCkgeworICAgICAgICA8c2VsZWN0aW9uPjxjYXJldD4vLyBUaGlzIGlzIGNvbW1lbnQiCisgICAgICAgICAgICBpbnQgaSA9IDE7Cis8L3NlbGVjdGlvbj4gICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9nZW5lcmF0aW9uL3N1cnJvdW5kV2l0aC9qYXZhL0NvbW1lbnRBc0ZpcnN0UnVubmFibGVTdXJyb3VuZFN0YXRlbWVudF9hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2dlbmVyYXRpb24vc3Vycm91bmRXaXRoL2phdmEvQ29tbWVudEFzRmlyc3RSdW5uYWJsZVN1cnJvdW5kU3RhdGVtZW50X2FmdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzBhZTk4YQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9nZW5lcmF0aW9uL3N1cnJvdW5kV2l0aC9qYXZhL0NvbW1lbnRBc0ZpcnN0UnVubmFibGVTdXJyb3VuZFN0YXRlbWVudF9hZnRlci5qYXZhCkBAIC0wLDAgKzEsMTAgQEAKK2NsYXNzIFRlc3QgeworICAgIHZvaWQgZm9vKCkgeworICAgICAgICA8Y2FyZXQ+UnVubmFibGUgcnVubmFibGUgPSBuZXcgUnVubmFibGUoKSB7CisgICAgICAgICAgICBwdWJsaWMgdm9pZCBydW4oKSB7CisgICAgICAgICAgICAgICAgLy8gVGhpcyBpcyBjb21tZW50IgorICAgICAgICAgICAgICAgIGludCBpID0gMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2dlbmVyYXRpb24vc3Vycm91bmRXaXRoL2phdmEvQ29tbWVudEFzRmlyc3RTeW5jaHJvbml6ZWRTdXJyb3VuZFN0YXRlbWVudC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2dlbmVyYXRpb24vc3Vycm91bmRXaXRoL2phdmEvQ29tbWVudEFzRmlyc3RTeW5jaHJvbml6ZWRTdXJyb3VuZFN0YXRlbWVudC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNkZGQwMTQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZ2VuZXJhdGlvbi9zdXJyb3VuZFdpdGgvamF2YS9Db21tZW50QXNGaXJzdFN5bmNocm9uaXplZFN1cnJvdW5kU3RhdGVtZW50LmphdmEKQEAgLTAsMCArMSw2IEBACitjbGFzcyBUZXN0IHsKKyAgICB2b2lkIGZvbygpIHsKKyAgICAgICAgPHNlbGVjdGlvbj4vLyBUaGlzIGlzIGNvbW1lbnQiCisgICAgICAgICAgICBpbnQgaSA9IDE7PC9zZWxlY3Rpb24+CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9nZW5lcmF0aW9uL3N1cnJvdW5kV2l0aC9qYXZhL0NvbW1lbnRBc0ZpcnN0U3luY2hyb25pemVkU3Vycm91bmRTdGF0ZW1lbnRfYWZ0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9nZW5lcmF0aW9uL3N1cnJvdW5kV2l0aC9qYXZhL0NvbW1lbnRBc0ZpcnN0U3luY2hyb25pemVkU3Vycm91bmRTdGF0ZW1lbnRfYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMTUxYjY0Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2dlbmVyYXRpb24vc3Vycm91bmRXaXRoL2phdmEvQ29tbWVudEFzRmlyc3RTeW5jaHJvbml6ZWRTdXJyb3VuZFN0YXRlbWVudF9hZnRlci5qYXZhCkBAIC0wLDAgKzEsOCBAQAorY2xhc3MgVGVzdCB7CisgICAgdm9pZCBmb28oKSB7CisgICAgICAgIHN5bmNocm9uaXplZCAoPGNhcmV0PikgeworICAgICAgICAgICAgLy8gVGhpcyBpcyBjb21tZW50IgorICAgICAgICAgICAgaW50IGkgPSAxOworICAgICAgICB9CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9nZW5lcmF0aW9uL3N1cnJvdW5kV2l0aC9qYXZhL0NvbW1lbnRBc0ZpcnN0VHJ5Q2F0Y2hGaW5hbGx5U3Vycm91bmRTdGF0ZW1lbnQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9nZW5lcmF0aW9uL3N1cnJvdW5kV2l0aC9qYXZhL0NvbW1lbnRBc0ZpcnN0VHJ5Q2F0Y2hGaW5hbGx5U3Vycm91bmRTdGF0ZW1lbnQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZGRkMDE0Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2dlbmVyYXRpb24vc3Vycm91bmRXaXRoL2phdmEvQ29tbWVudEFzRmlyc3RUcnlDYXRjaEZpbmFsbHlTdXJyb3VuZFN0YXRlbWVudC5qYXZhCkBAIC0wLDAgKzEsNiBAQAorY2xhc3MgVGVzdCB7CisgICAgdm9pZCBmb28oKSB7CisgICAgICAgIDxzZWxlY3Rpb24+Ly8gVGhpcyBpcyBjb21tZW50IgorICAgICAgICAgICAgaW50IGkgPSAxOzwvc2VsZWN0aW9uPgorICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZ2VuZXJhdGlvbi9zdXJyb3VuZFdpdGgvamF2YS9Db21tZW50QXNGaXJzdFRyeUNhdGNoRmluYWxseVN1cnJvdW5kU3RhdGVtZW50X2FmdGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZ2VuZXJhdGlvbi9zdXJyb3VuZFdpdGgvamF2YS9Db21tZW50QXNGaXJzdFRyeUNhdGNoRmluYWxseVN1cnJvdW5kU3RhdGVtZW50X2FmdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDk4ZDA4NgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9nZW5lcmF0aW9uL3N1cnJvdW5kV2l0aC9qYXZhL0NvbW1lbnRBc0ZpcnN0VHJ5Q2F0Y2hGaW5hbGx5U3Vycm91bmRTdGF0ZW1lbnRfYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDExIEBACitjbGFzcyBUZXN0IHsKKyAgICB2b2lkIGZvbygpIHsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIC8vIFRoaXMgaXMgY29tbWVudCIKKyAgICAgICAgICAgIGludCBpID0gMTsKKyAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIDxjYXJldD48c2VsZWN0aW9uPmUucHJpbnRTdGFja1RyYWNlKCk7ICAvL1RvIGNoYW5nZSBib2R5IG9mIGNhdGNoIHN0YXRlbWVudCB1c2UgRmlsZSB8IFNldHRpbmdzIHwgRmlsZSBUZW1wbGF0ZXMuPC9zZWxlY3Rpb24+CisgICAgICAgIH0gZmluYWxseSB7CisgICAgICAgIH0KKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2dlbmVyYXRpb24vc3Vycm91bmRXaXRoL2phdmEvQ29tbWVudEFzRmlyc3RUcnlDYXRjaFN1cnJvdW5kU3RhdGVtZW50LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZ2VuZXJhdGlvbi9zdXJyb3VuZFdpdGgvamF2YS9Db21tZW50QXNGaXJzdFRyeUNhdGNoU3Vycm91bmRTdGF0ZW1lbnQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZGRkMDE0Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2dlbmVyYXRpb24vc3Vycm91bmRXaXRoL2phdmEvQ29tbWVudEFzRmlyc3RUcnlDYXRjaFN1cnJvdW5kU3RhdGVtZW50LmphdmEKQEAgLTAsMCArMSw2IEBACitjbGFzcyBUZXN0IHsKKyAgICB2b2lkIGZvbygpIHsKKyAgICAgICAgPHNlbGVjdGlvbj4vLyBUaGlzIGlzIGNvbW1lbnQiCisgICAgICAgICAgICBpbnQgaSA9IDE7PC9zZWxlY3Rpb24+CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9nZW5lcmF0aW9uL3N1cnJvdW5kV2l0aC9qYXZhL0NvbW1lbnRBc0ZpcnN0VHJ5Q2F0Y2hTdXJyb3VuZFN0YXRlbWVudF9hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2dlbmVyYXRpb24vc3Vycm91bmRXaXRoL2phdmEvQ29tbWVudEFzRmlyc3RUcnlDYXRjaFN1cnJvdW5kU3RhdGVtZW50X2FmdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjUwNmNlOAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9nZW5lcmF0aW9uL3N1cnJvdW5kV2l0aC9qYXZhL0NvbW1lbnRBc0ZpcnN0VHJ5Q2F0Y2hTdXJyb3VuZFN0YXRlbWVudF9hZnRlci5qYXZhCkBAIC0wLDAgKzEsMTAgQEAKK2NsYXNzIFRlc3QgeworICAgIHZvaWQgZm9vKCkgeworICAgICAgICB0cnkgeworICAgICAgICAgICAgLy8gVGhpcyBpcyBjb21tZW50IgorICAgICAgICAgICAgaW50IGkgPSAxOworICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgPGNhcmV0PjxzZWxlY3Rpb24+ZS5wcmludFN0YWNrVHJhY2UoKTsgIC8vVG8gY2hhbmdlIGJvZHkgb2YgY2F0Y2ggc3RhdGVtZW50IHVzZSBGaWxlIHwgU2V0dGluZ3MgfCBGaWxlIFRlbXBsYXRlcy48L3NlbGVjdGlvbj4KKyAgICAgICAgfQorICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZ2VuZXJhdGlvbi9zdXJyb3VuZFdpdGgvamF2YS9Db21tZW50QXNGaXJzdFRyeUZpbmFsbHlTdXJyb3VuZFN0YXRlbWVudC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2dlbmVyYXRpb24vc3Vycm91bmRXaXRoL2phdmEvQ29tbWVudEFzRmlyc3RUcnlGaW5hbGx5U3Vycm91bmRTdGF0ZW1lbnQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZGRkMDE0Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2dlbmVyYXRpb24vc3Vycm91bmRXaXRoL2phdmEvQ29tbWVudEFzRmlyc3RUcnlGaW5hbGx5U3Vycm91bmRTdGF0ZW1lbnQuamF2YQpAQCAtMCwwICsxLDYgQEAKK2NsYXNzIFRlc3QgeworICAgIHZvaWQgZm9vKCkgeworICAgICAgICA8c2VsZWN0aW9uPi8vIFRoaXMgaXMgY29tbWVudCIKKyAgICAgICAgICAgIGludCBpID0gMTs8L3NlbGVjdGlvbj4KKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2dlbmVyYXRpb24vc3Vycm91bmRXaXRoL2phdmEvQ29tbWVudEFzRmlyc3RUcnlGaW5hbGx5U3Vycm91bmRTdGF0ZW1lbnRfYWZ0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9nZW5lcmF0aW9uL3N1cnJvdW5kV2l0aC9qYXZhL0NvbW1lbnRBc0ZpcnN0VHJ5RmluYWxseVN1cnJvdW5kU3RhdGVtZW50X2FmdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTY3N2E2YwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9nZW5lcmF0aW9uL3N1cnJvdW5kV2l0aC9qYXZhL0NvbW1lbnRBc0ZpcnN0VHJ5RmluYWxseVN1cnJvdW5kU3RhdGVtZW50X2FmdGVyLmphdmEKQEAgLTAsMCArMSwxMCBAQAorY2xhc3MgVGVzdCB7CisgICAgdm9pZCBmb28oKSB7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICAvLyBUaGlzIGlzIGNvbW1lbnQiCisgICAgICAgICAgICBpbnQgaSA9IDE7CisgICAgICAgIH0gZmluYWxseSB7CisgICAgICAgICAgICA8Y2FyZXQ+CisgICAgICAgIH0KKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2dlbmVyYXRpb24vc3Vycm91bmRXaXRoL2phdmEvQ29tbWVudEFzRmlyc3RXaGlsZVN1cnJvdW5kU3RhdGVtZW50LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZ2VuZXJhdGlvbi9zdXJyb3VuZFdpdGgvamF2YS9Db21tZW50QXNGaXJzdFdoaWxlU3Vycm91bmRTdGF0ZW1lbnQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZGRkMDE0Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2dlbmVyYXRpb24vc3Vycm91bmRXaXRoL2phdmEvQ29tbWVudEFzRmlyc3RXaGlsZVN1cnJvdW5kU3RhdGVtZW50LmphdmEKQEAgLTAsMCArMSw2IEBACitjbGFzcyBUZXN0IHsKKyAgICB2b2lkIGZvbygpIHsKKyAgICAgICAgPHNlbGVjdGlvbj4vLyBUaGlzIGlzIGNvbW1lbnQiCisgICAgICAgICAgICBpbnQgaSA9IDE7PC9zZWxlY3Rpb24+CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9nZW5lcmF0aW9uL3N1cnJvdW5kV2l0aC9qYXZhL0NvbW1lbnRBc0ZpcnN0V2hpbGVTdXJyb3VuZFN0YXRlbWVudF9hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2dlbmVyYXRpb24vc3Vycm91bmRXaXRoL2phdmEvQ29tbWVudEFzRmlyc3RXaGlsZVN1cnJvdW5kU3RhdGVtZW50X2FmdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzNlMmM3OAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9nZW5lcmF0aW9uL3N1cnJvdW5kV2l0aC9qYXZhL0NvbW1lbnRBc0ZpcnN0V2hpbGVTdXJyb3VuZFN0YXRlbWVudF9hZnRlci5qYXZhCkBAIC0wLDAgKzEsOCBAQAorY2xhc3MgVGVzdCB7CisgICAgdm9pZCBmb28oKSB7CisgICAgICAgIHdoaWxlICg8Y2FyZXQ+PHNlbGVjdGlvbj50cnVlPC9zZWxlY3Rpb24+KSB7CisgICAgICAgICAgICAvLyBUaGlzIGlzIGNvbW1lbnQiCisgICAgICAgICAgICBpbnQgaSA9IDE7CisgICAgICAgIH0KKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2dlbmVyYXRpb24vc3Vycm91bmRXaXRoL2phdmEvU3Vycm91bmRBc3NpZ25tZW50V2l0aENhc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9nZW5lcmF0aW9uL3N1cnJvdW5kV2l0aC9qYXZhL1N1cnJvdW5kQXNzaWdubWVudFdpdGhDYXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODAyMjc2OAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9nZW5lcmF0aW9uL3N1cnJvdW5kV2l0aC9qYXZhL1N1cnJvdW5kQXNzaWdubWVudFdpdGhDYXN0LmphdmEKQEAgLTAsMCArMSw3IEBACitjbGFzcyBUZXN0IHsKKyAgdm9pZCBmb28oaW50IGEsIGRvdWJsZSBiKSB7CisgICAgaWYgKDxzZWxlY3Rpb24+PGNhcmV0PmEgPSBiPC9zZWxlY3Rpb24+KSB7CisKKyAgICB9CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZ2VuZXJhdGlvbi9zdXJyb3VuZFdpdGgvamF2YS9TdXJyb3VuZEFzc2lnbm1lbnRXaXRoQ2FzdF9hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2dlbmVyYXRpb24vc3Vycm91bmRXaXRoL2phdmEvU3Vycm91bmRBc3NpZ25tZW50V2l0aENhc3RfYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MjMzY2RiCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2dlbmVyYXRpb24vc3Vycm91bmRXaXRoL2phdmEvU3Vycm91bmRBc3NpZ25tZW50V2l0aENhc3RfYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDcgQEAKK2NsYXNzIFRlc3QgeworICB2b2lkIGZvbyhpbnQgYSwgZG91YmxlIGIpIHsKKyAgICBpZiAoKCg8Y2FyZXQ+KSAoYSA9IGIpKSkgeworCisgICAgfQorICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2dlbmVyYXRpb24vc3Vycm91bmRXaXRoL2phdmEvU3Vycm91bmRCaW5hcnlXaXRoQ2FzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2dlbmVyYXRpb24vc3Vycm91bmRXaXRoL2phdmEvU3Vycm91bmRCaW5hcnlXaXRoQ2FzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJjY2MwNDYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZ2VuZXJhdGlvbi9zdXJyb3VuZFdpdGgvamF2YS9TdXJyb3VuZEJpbmFyeVdpdGhDYXN0LmphdmEKQEAgLTAsMCArMSw3IEBACitjbGFzcyBUZXN0IHsKKyAgdm9pZCBmb28oaW50IGEsIGRvdWJsZSBiKSB7CisgICAgaWYgKDxzZWxlY3Rpb24+PGNhcmV0PmEgKyBiICsgMTwvc2VsZWN0aW9uPikgeworCisgICAgfQorICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2dlbmVyYXRpb24vc3Vycm91bmRXaXRoL2phdmEvU3Vycm91bmRCaW5hcnlXaXRoQ2FzdF9hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2dlbmVyYXRpb24vc3Vycm91bmRXaXRoL2phdmEvU3Vycm91bmRCaW5hcnlXaXRoQ2FzdF9hZnRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFkOTA4YTYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZ2VuZXJhdGlvbi9zdXJyb3VuZFdpdGgvamF2YS9TdXJyb3VuZEJpbmFyeVdpdGhDYXN0X2FmdGVyLmphdmEKQEAgLTAsMCArMSw3IEBACitjbGFzcyBUZXN0IHsKKyAgdm9pZCBmb28oaW50IGEsIGRvdWJsZSBiKSB7CisgICAgaWYgKCgoPGNhcmV0PikgKGEgKyBiICsgMSkpKSB7CisKKyAgICB9CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZ2VuZXJhdGlvbi9zdXJyb3VuZFdpdGgvamF2YS9TdXJyb3VuZENvbmRpdGlvbmFsV2l0aENhc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9nZW5lcmF0aW9uL3N1cnJvdW5kV2l0aC9qYXZhL1N1cnJvdW5kQ29uZGl0aW9uYWxXaXRoQ2FzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdiMTk0NTkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZ2VuZXJhdGlvbi9zdXJyb3VuZFdpdGgvamF2YS9TdXJyb3VuZENvbmRpdGlvbmFsV2l0aENhc3QuamF2YQpAQCAtMCwwICsxLDcgQEAKK2NsYXNzIFRlc3QgeworICB2b2lkIGZvbyhpbnQgYSwgZG91YmxlIGIpIHsKKyAgICBpZiAoPHNlbGVjdGlvbj48Y2FyZXQ+dHJ1ZSA/IGEgOiBiPC9zZWxlY3Rpb24+KSB7CisKKyAgICB9CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZ2VuZXJhdGlvbi9zdXJyb3VuZFdpdGgvamF2YS9TdXJyb3VuZENvbmRpdGlvbmFsV2l0aENhc3RfYWZ0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9nZW5lcmF0aW9uL3N1cnJvdW5kV2l0aC9qYXZhL1N1cnJvdW5kQ29uZGl0aW9uYWxXaXRoQ2FzdF9hZnRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE2ZDlkMDAKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZ2VuZXJhdGlvbi9zdXJyb3VuZFdpdGgvamF2YS9TdXJyb3VuZENvbmRpdGlvbmFsV2l0aENhc3RfYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDcgQEAKK2NsYXNzIFRlc3QgeworICB2b2lkIGZvbyhpbnQgYSwgZG91YmxlIGIpIHsKKyAgICBpZiAoKCg8Y2FyZXQ+KSAodHJ1ZSA/IGEgOiBiKSkpIHsKKworICAgIH0KKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9nZW5lcmF0aW9uL3N1cnJvdW5kV2l0aC9qYXZhL1N1cnJvdW5kRXhwcmVzc2lvbldpdGhDYXN0RW1wdHlMaW5lQWZ0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9nZW5lcmF0aW9uL3N1cnJvdW5kV2l0aC9qYXZhL1N1cnJvdW5kRXhwcmVzc2lvbldpdGhDYXN0RW1wdHlMaW5lQWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMDU3ODQ4Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2dlbmVyYXRpb24vc3Vycm91bmRXaXRoL2phdmEvU3Vycm91bmRFeHByZXNzaW9uV2l0aENhc3RFbXB0eUxpbmVBZnRlci5qYXZhCkBAIC0wLDAgKzEsNiBAQAorY2xhc3MgVGVzdCB7CisgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKyAgICAgIDxzZWxlY3Rpb24+YXJnczwvc2VsZWN0aW9uPgorCisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZ2VuZXJhdGlvbi9zdXJyb3VuZFdpdGgvamF2YS9TdXJyb3VuZEV4cHJlc3Npb25XaXRoQ2FzdEVtcHR5TGluZUFmdGVyXzIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9nZW5lcmF0aW9uL3N1cnJvdW5kV2l0aC9qYXZhL1N1cnJvdW5kRXhwcmVzc2lvbldpdGhDYXN0RW1wdHlMaW5lQWZ0ZXJfMi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQwNTc4NDgKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZ2VuZXJhdGlvbi9zdXJyb3VuZFdpdGgvamF2YS9TdXJyb3VuZEV4cHJlc3Npb25XaXRoQ2FzdEVtcHR5TGluZUFmdGVyXzIuamF2YQpAQCAtMCwwICsxLDYgQEAKK2NsYXNzIFRlc3QgeworICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisgICAgICA8c2VsZWN0aW9uPmFyZ3M8L3NlbGVjdGlvbj4KKworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2dlbmVyYXRpb24vc3Vycm91bmRXaXRoL2phdmEvU3Vycm91bmRFeHByZXNzaW9uV2l0aENhc3RFbXB0eUxpbmVBZnRlcl8yX2FmdGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZ2VuZXJhdGlvbi9zdXJyb3VuZFdpdGgvamF2YS9TdXJyb3VuZEV4cHJlc3Npb25XaXRoQ2FzdEVtcHR5TGluZUFmdGVyXzJfYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOWIyNDVmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2dlbmVyYXRpb24vc3Vycm91bmRXaXRoL2phdmEvU3Vycm91bmRFeHByZXNzaW9uV2l0aENhc3RFbXB0eUxpbmVBZnRlcl8yX2FmdGVyLmphdmEKQEAgLTAsMCArMSw2IEBACitjbGFzcyBUZXN0IHsKKyAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworICAgICAgKCgpIGFyZ3MpPGNhcmV0PgorCisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZ2VuZXJhdGlvbi9zdXJyb3VuZFdpdGgvamF2YS9TdXJyb3VuZEV4cHJlc3Npb25XaXRoQ2FzdEVtcHR5TGluZUFmdGVyX2FmdGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZ2VuZXJhdGlvbi9zdXJyb3VuZFdpdGgvamF2YS9TdXJyb3VuZEV4cHJlc3Npb25XaXRoQ2FzdEVtcHR5TGluZUFmdGVyX2FmdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWU0OWMyNQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9nZW5lcmF0aW9uL3N1cnJvdW5kV2l0aC9qYXZhL1N1cnJvdW5kRXhwcmVzc2lvbldpdGhDYXN0RW1wdHlMaW5lQWZ0ZXJfYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDYgQEAKK2NsYXNzIFRlc3QgeworICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisgICAgICAoKHZhcikgYXJncyk8Y2FyZXQ+CisKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9nZW5lcmF0aW9uL3N1cnJvdW5kV2l0aC9qYXZhL1N1cnJvdW5kTm9uRXhwcmVzc2lvbldpdGhDYXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZ2VuZXJhdGlvbi9zdXJyb3VuZFdpdGgvamF2YS9TdXJyb3VuZE5vbkV4cHJlc3Npb25XaXRoQ2FzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcyYTE4YWYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZ2VuZXJhdGlvbi9zdXJyb3VuZFdpdGgvamF2YS9TdXJyb3VuZE5vbkV4cHJlc3Npb25XaXRoQ2FzdC5qYXZhCkBAIC0wLDAgKzEsOCBAQAorY2xhc3MgVGVzdCB7CisgIHZvaWQgZm9vKCkgeworICAgIFN0cmluZyBhID0gIiIsIGIgPSAiIiwgYyA9ICIiOworICAgIGlmIChhICsgPHNlbGVjdGlvbj5iICsgYzwvc2VsZWN0aW9uPikgeworCisgICAgfQorICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2dlbmVyYXRpb24vc3Vycm91bmRXaXRoL2phdmEvU3Vycm91bmROb25FeHByZXNzaW9uV2l0aENhc3RfYWZ0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9nZW5lcmF0aW9uL3N1cnJvdW5kV2l0aC9qYXZhL1N1cnJvdW5kTm9uRXhwcmVzc2lvbldpdGhDYXN0X2FmdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjU5ZTQ0MgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9nZW5lcmF0aW9uL3N1cnJvdW5kV2l0aC9qYXZhL1N1cnJvdW5kTm9uRXhwcmVzc2lvbldpdGhDYXN0X2FmdGVyLmphdmEKQEAgLTAsMCArMSw4IEBACitjbGFzcyBUZXN0IHsKKyAgdm9pZCBmb28oKSB7CisgICAgU3RyaW5nIGEgPSAiIiwgYiA9ICIiLCBjID0gIiI7CisgICAgaWYgKGEgKyAoKCkgKGIgKyBjKSkpIHsKKworICAgIH0KKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9nZW5lcmF0aW9uL3N1cnJvdW5kV2l0aC9qYXZhL1N1cnJvdW5kTm9uRXhwcmVzc2lvbldpdGhOb3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9nZW5lcmF0aW9uL3N1cnJvdW5kV2l0aC9qYXZhL1N1cnJvdW5kTm9uRXhwcmVzc2lvbldpdGhOb3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZjNmODRiCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2dlbmVyYXRpb24vc3Vycm91bmRXaXRoL2phdmEvU3Vycm91bmROb25FeHByZXNzaW9uV2l0aE5vdC5qYXZhCkBAIC0wLDAgKzEsOCBAQAorY2xhc3MgVGVzdCB7CisgIHZvaWQgZm9vKCkgeworICAgIGJvb2xlYW4gYSA9IGZhbHNlLCBiID0gZmFsc2UsIGMgPSBmYWxzZTsKKyAgICBpZiAoYSAmJiA8c2VsZWN0aW9uPmIgJiYgYzwvc2VsZWN0aW9uPikgeworCisgICAgfQorICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2dlbmVyYXRpb24vc3Vycm91bmRXaXRoL2phdmEvU3Vycm91bmROb25FeHByZXNzaW9uV2l0aE5vdF9hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2dlbmVyYXRpb24vc3Vycm91bmRXaXRoL2phdmEvU3Vycm91bmROb25FeHByZXNzaW9uV2l0aE5vdF9hZnRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVlNjhjM2FmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2dlbmVyYXRpb24vc3Vycm91bmRXaXRoL2phdmEvU3Vycm91bmROb25FeHByZXNzaW9uV2l0aE5vdF9hZnRlci5qYXZhCkBAIC0wLDAgKzEsOCBAQAorY2xhc3MgVGVzdCB7CisgIHZvaWQgZm9vKCkgeworICAgIGJvb2xlYW4gYSA9IGZhbHNlLCBiID0gZmFsc2UsIGMgPSBmYWxzZTsKKyAgICBpZiAoYSAmJiAhKGIgJiYgYykpIHsKKworICAgIH0KKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9nZW5lcmF0aW9uL3N1cnJvdW5kV2l0aC9qYXZhL1N1cnJvdW5kTm9uRXhwcmVzc2lvbldpdGhQYXJlbnRoZXNpcy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2dlbmVyYXRpb24vc3Vycm91bmRXaXRoL2phdmEvU3Vycm91bmROb25FeHByZXNzaW9uV2l0aFBhcmVudGhlc2lzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzQ4NDE5NgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9nZW5lcmF0aW9uL3N1cnJvdW5kV2l0aC9qYXZhL1N1cnJvdW5kTm9uRXhwcmVzc2lvbldpdGhQYXJlbnRoZXNpcy5qYXZhCkBAIC0wLDAgKzEsOCBAQAorY2xhc3MgVGVzdCB7CisgIHZvaWQgZm9vKCkgeworICAgIGludCBhID0gMCwgYiA9IDAsIGMgPSAwOworICAgIGlmIChhICsgPHNlbGVjdGlvbj5iICsgYzwvc2VsZWN0aW9uPikgeworCisgICAgfQorICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2dlbmVyYXRpb24vc3Vycm91bmRXaXRoL2phdmEvU3Vycm91bmROb25FeHByZXNzaW9uV2l0aFBhcmVudGhlc2lzX2FmdGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZ2VuZXJhdGlvbi9zdXJyb3VuZFdpdGgvamF2YS9TdXJyb3VuZE5vbkV4cHJlc3Npb25XaXRoUGFyZW50aGVzaXNfYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MDYwNTVkCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2dlbmVyYXRpb24vc3Vycm91bmRXaXRoL2phdmEvU3Vycm91bmROb25FeHByZXNzaW9uV2l0aFBhcmVudGhlc2lzX2FmdGVyLmphdmEKQEAgLTAsMCArMSw4IEBACitjbGFzcyBUZXN0IHsKKyAgdm9pZCBmb28oKSB7CisgICAgaW50IGEgPSAwLCBiID0gMCwgYyA9IDA7CisgICAgaWYgKGEgKyAoYiArIGMpKSB7CisKKyAgICB9CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZ2VuZXJhdGlvbi9zdXJyb3VuZFdpdGgvamF2YS9TdXJyb3VuZFdpdGhOb3ROdWxsQ2hlY2suamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9nZW5lcmF0aW9uL3N1cnJvdW5kV2l0aC9qYXZhL1N1cnJvdW5kV2l0aE5vdE51bGxDaGVjay5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkzMDEwMjEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvZ2VuZXJhdGlvbi9zdXJyb3VuZFdpdGgvamF2YS9TdXJyb3VuZFdpdGhOb3ROdWxsQ2hlY2suamF2YQpAQCAtMCwwICsxLDEwIEBACisKK2NsYXNzIFRlc3QgeworICBTdHJpbmcgZm9vKCkgeworICAgIHJldHVybiBudWxsOworICB9CisgIAorICB2b2lkIGJhcigpIHsKKyAgICA8c2VsZWN0aW9uPmZvbygpPC9zZWxlY3Rpb24+LnRvTG93ZXJDYXNlKCkKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9nZW5lcmF0aW9uL3N1cnJvdW5kV2l0aC9qYXZhL1N1cnJvdW5kV2l0aE5vdE51bGxDaGVja19hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2dlbmVyYXRpb24vc3Vycm91bmRXaXRoL2phdmEvU3Vycm91bmRXaXRoTm90TnVsbENoZWNrX2FmdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjcwYTkxMAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9nZW5lcmF0aW9uL3N1cnJvdW5kV2l0aC9qYXZhL1N1cnJvdW5kV2l0aE5vdE51bGxDaGVja19hZnRlci5qYXZhCkBAIC0wLDAgKzEsMTIgQEAKKworY2xhc3MgVGVzdCB7CisgIFN0cmluZyBmb28oKSB7CisgICAgcmV0dXJuIG51bGw7CisgIH0KKyAgCisgIHZvaWQgYmFyKCkgeworICAgICAgaWYgKGZvbygpICE9IG51bGwpIHsKKyAgICAgICAgICBmb28oKS50b0xvd2VyQ2FzZSgpPGNhcmV0PgorICAgICAgfQorICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2hpZ2hsaWdodFVzYWdlc0hhbmRsZXIvSGlnaGxpZ2h0T3ZlcnJpZGRlbi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2hpZ2hsaWdodFVzYWdlc0hhbmRsZXIvSGlnaGxpZ2h0T3ZlcnJpZGRlbi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI0YmM5YmMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvaGlnaGxpZ2h0VXNhZ2VzSGFuZGxlci9IaWdobGlnaHRPdmVycmlkZGVuLmphdmEKQEAgLTAsMCArMSw3IEBACitjbGFzcyBVc2FnZSBleHRlbmRzPGNhcmV0PiBCYXNleworICB2b2lkIGZvbygpIHsKKyAgfQorfQorY2xhc3MgQmFzZSB7Cit2b2lkIGZvbygpe30KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvaGlnaGxpZ2h0VXNhZ2VzSGFuZGxlci9IaWdobGlnaHRPdmVycmlkZGVuSW1wbGVtZW50cy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2hpZ2hsaWdodFVzYWdlc0hhbmRsZXIvSGlnaGxpZ2h0T3ZlcnJpZGRlbkltcGxlbWVudHMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OTQxZmZiCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2hpZ2hsaWdodFVzYWdlc0hhbmRsZXIvSGlnaGxpZ2h0T3ZlcnJpZGRlbkltcGxlbWVudHMuamF2YQpAQCAtMCwwICsxLDcgQEAKK2NsYXNzIFVzYWdlIDxjYXJldD5pbXBsZW1lbnRzIEJhc2V7CisgIHZvaWQgZm9vKCkgeworICB9Cit9CitpbnRlcmZhY2UgQmFzZSB7Cit2b2lkIGZvbygpOworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9oaWdobGlnaHRVc2FnZXNIYW5kbGVyL0hpZ2hsaWdodE92ZXJyaWRkZW5NdWx0aXBsZS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2hpZ2hsaWdodFVzYWdlc0hhbmRsZXIvSGlnaGxpZ2h0T3ZlcnJpZGRlbk11bHRpcGxlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2MxZTE4MQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9oaWdobGlnaHRVc2FnZXNIYW5kbGVyL0hpZ2hsaWdodE92ZXJyaWRkZW5NdWx0aXBsZS5qYXZhCkBAIC0wLDAgKzEsMTEgQEAKK2NsYXNzIFVzYWdlIDxjYXJldD5pbXBsZW1lbnRzIEJhc2UsIE90aGVyeworICBwdWJsaWMgdm9pZCBmb28oKSB7CisgIH0KKyAgcHVibGljIHZvaWQgb3RoZXIoKSB7fQorfQoraW50ZXJmYWNlIEJhc2Ugewordm9pZCBmb28oKTsKK30KK2ludGVyZmFjZSBPdGhlciB7Cit2b2lkIG90aGVyKCk7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2hpZ2hsaWdodFVzYWdlc0hhbmRsZXIvSGlnaGxpZ2h0T3ZlcnJpZGRlbk5vdGhpbmcuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9oaWdobGlnaHRVc2FnZXNIYW5kbGVyL0hpZ2hsaWdodE92ZXJyaWRkZW5Ob3RoaW5nLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWRhYTM5MwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9oaWdobGlnaHRVc2FnZXNIYW5kbGVyL0hpZ2hsaWdodE92ZXJyaWRkZW5Ob3RoaW5nLmphdmEKQEAgLTAsMCArMSw3IEBACitjbGFzcyBVc2FnZSA8Y2FyZXQ+ZXh0ZW5kcyBCYXNleworICB2b2lkIGZvbzMoKSB7CisgIH0KK30KK2NsYXNzIEJhc2Ugewordm9pZCBmb28oKSB7fQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9oaWdobGlnaHRVc2FnZXNIYW5kbGVyL1NpbXBsZVRocm93cy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2hpZ2hsaWdodFVzYWdlc0hhbmRsZXIvU2ltcGxlVGhyb3dzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDY4NTI0MQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9oaWdobGlnaHRVc2FnZXNIYW5kbGVyL1NpbXBsZVRocm93cy5qYXZhCkBAIC0wLDAgKzEsNSBAQAorY2xhc3MgQ2FsY3VsYXRvciB7CisgICAgcHVibGljIHZvaWQgcHJpbnRFcnJvcihTdHJpbmcgZGV0YWlsLCBpbnQgbGluZSwgU3RyaW5nIGZpbGUpIDxjYXJldD50aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbigpOworICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9oaWdobGlnaHRVc2FnZXNIYW5kbGVyL1Rocm93c0V4cHJlc3Npb24uamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9oaWdobGlnaHRVc2FnZXNIYW5kbGVyL1Rocm93c0V4cHJlc3Npb24uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOTNmYTYxCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2hpZ2hsaWdodFVzYWdlc0hhbmRsZXIvVGhyb3dzRXhwcmVzc2lvbi5qYXZhCkBAIC0wLDAgKzEsNSBAQAorY2xhc3MgQ2FsY3VsYXRvciB7CisgICAgcHVibGljIHZvaWQgcHJpbnRFcnJvcihPYmplY3QgZGV0YWlsLCBpbnQgbGluZSwgU3RyaW5nIGZpbGUpIDxjYXJldD50aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgdGhyb3cgKEV4Y2VwdGlvbilkZXRhaWw7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2hpZ2hsaWdodFVzYWdlc0hhbmRsZXIvVGhyb3dzUmVmZXJlbmNlLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvaGlnaGxpZ2h0VXNhZ2VzSGFuZGxlci9UaHJvd3NSZWZlcmVuY2UuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NTJiODU1Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2hpZ2hsaWdodFVzYWdlc0hhbmRsZXIvVGhyb3dzUmVmZXJlbmNlLmphdmEKQEAgLTAsMCArMSw1IEBACitjbGFzcyBDYWxjdWxhdG9yIHsKKyAgICBwdWJsaWMgdm9pZCBwcmludEVycm9yKEV4Y2VwdGlvbiBkZXRhaWwsIGludCBsaW5lLCBTdHJpbmcgZmlsZSkgPGNhcmV0PnRocm93cyBFeGNlcHRpb24geworICAgICAgICB0aHJvdyBkZXRhaWw7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2hpZ2hsaWdodFVzYWdlc0hhbmRsZXIvVW5zZWxlY3RVc2FnZS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2hpZ2hsaWdodFVzYWdlc0hhbmRsZXIvVW5zZWxlY3RVc2FnZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjViMjQ2NTkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvaGlnaGxpZ2h0VXNhZ2VzSGFuZGxlci9VbnNlbGVjdFVzYWdlLmphdmEKQEAgLTAsMCArMSw2IEBACitjbGFzcyBVc2FnZSB7CisgIHZvaWQgZm9vKCkgeworICAgICBmb28oKTsKKyAgICAgPGNhcmV0PmZvbygpOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2ludmVydElmQ29uZGl0aW9uL2FmdGVyQ29uZGl0aW9uMS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2ludmVydElmQ29uZGl0aW9uL2FmdGVyQ29uZGl0aW9uMS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRlZGNkYTQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvaW52ZXJ0SWZDb25kaXRpb24vYWZ0ZXJDb25kaXRpb24xLmphdmEKQEAgLTAsMCArMSwxMSBAQAorLy8gIkludmVydCBJZiBDb25kaXRpb24iICJ0cnVlIgorY2xhc3MgQSB7CisgICAgcHVibGljIHZvaWQgZm9vKCkgeworICAgICAgICA8Y2FyZXQ+aWYgKCFjKSB7CisgICAgICAgICAgICBiKCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBhKCk7CisgICAgICAgIH0KKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2ludmVydElmQ29uZGl0aW9uL2FmdGVyQ29uZGl0aW9uMi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2ludmVydElmQ29uZGl0aW9uL2FmdGVyQ29uZGl0aW9uMi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE0NDQ1NjIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvaW52ZXJ0SWZDb25kaXRpb24vYWZ0ZXJDb25kaXRpb24yLmphdmEKQEAgLTAsMCArMSwxMSBAQAorLy8gIkludmVydCBJZiBDb25kaXRpb24iICJ0cnVlIgorY2xhc3MgQSB7CisgICAgcHVibGljIHZvaWQgZm9vKCkgeworICAgICAgICA8Y2FyZXQ+aWYgKCghYykpIHsKKyAgICAgICAgICAgIGIoKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGEoKTsKKyAgICAgICAgfQorICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvaW52ZXJ0SWZDb25kaXRpb24vYWZ0ZXJDb25kaXRpb25FcS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2ludmVydElmQ29uZGl0aW9uL2FmdGVyQ29uZGl0aW9uRXEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMjQ5NTkwCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2ludmVydElmQ29uZGl0aW9uL2FmdGVyQ29uZGl0aW9uRXEuamF2YQpAQCAtMCwwICsxLDExIEBACisvLyAiSW52ZXJ0IElmIENvbmRpdGlvbiIgInRydWUiCitjbGFzcyBBIHsKKyAgICBwdWJsaWMgdm9pZCBmb28oKSB7CisgICAgICAgIDxjYXJldD5pZiAoYyAhPSBkKSB7CisgICAgICAgICAgICBiKCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBhKCk7CisgICAgICAgIH0KKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2ludmVydElmQ29uZGl0aW9uL2FmdGVyQ29uZGl0aW9uTmVxLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvaW52ZXJ0SWZDb25kaXRpb24vYWZ0ZXJDb25kaXRpb25OZXEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMTQ3NzgzCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2ludmVydElmQ29uZGl0aW9uL2FmdGVyQ29uZGl0aW9uTmVxLmphdmEKQEAgLTAsMCArMSwxMSBAQAorLy8gIkludmVydCBJZiBDb25kaXRpb24iICJ0cnVlIgorY2xhc3MgQSB7CisgICAgcHVibGljIHZvaWQgZm9vKCkgeworICAgICAgICA8Y2FyZXQ+aWYgKGMgPT0gZCkgeworICAgICAgICAgICAgYigpOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgYSgpOworICAgICAgICB9CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9pbnZlcnRJZkNvbmRpdGlvbi9hZnRlckNvbmRpdGlvbk5vdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2ludmVydElmQ29uZGl0aW9uL2FmdGVyQ29uZGl0aW9uTm90LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjE0NGQ4MQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9pbnZlcnRJZkNvbmRpdGlvbi9hZnRlckNvbmRpdGlvbk5vdC5qYXZhCkBAIC0wLDAgKzEsMTEgQEAKKy8vICJJbnZlcnQgSWYgQ29uZGl0aW9uIiAidHJ1ZSIKK2NsYXNzIEEgeworICAgIHB1YmxpYyB2b2lkIGZvbygpIHsKKyAgICAgICAgPGNhcmV0PmlmIChjKSB7CisgICAgICAgICAgICBiKCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBhKCk7CisgICAgICAgIH0KKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2ludmVydElmQ29uZGl0aW9uL2FmdGVyQ29udGludWUxLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvaW52ZXJ0SWZDb25kaXRpb24vYWZ0ZXJDb250aW51ZTEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNjM5MTcxCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2ludmVydElmQ29uZGl0aW9uL2FmdGVyQ29udGludWUxLmphdmEKQEAgLTAsMCArMSwxMSBAQAorLy8gIkludmVydCBJZiBDb25kaXRpb24iICJ0cnVlIgorY2xhc3MgQSB7CisgICAgdm9pZCBmb28gKCkgeworICAgICAgaW50IGEgPSAwLCBiID0gMDsKKyAgICAgIGZvciAoOzspIHsKKyAgICAgICAgICA8Y2FyZXQ+aWYgKGEgIT0gYikgeworICAgICAgICAgICAgICBhID0gYjsKKyAgICAgICAgICB9CisgICAgICB9CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9pbnZlcnRJZkNvbmRpdGlvbi9hZnRlckNvbnRpbnVlMi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2ludmVydElmQ29uZGl0aW9uL2FmdGVyQ29udGludWUyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjgwNzEyYQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9pbnZlcnRJZkNvbmRpdGlvbi9hZnRlckNvbnRpbnVlMi5qYXZhCkBAIC0wLDAgKzEsMTEgQEAKKy8vICJJbnZlcnQgSWYgQ29uZGl0aW9uIiAidHJ1ZSIKK2NsYXNzIEEgeworICAgIHZvaWQgZm9vKCkgeworICAgICAgICBTdHJpbmdbXSBlbnRyaWVzID0gbnVsbDsKKyAgICAgICAgZm9yIChTdHJpbmcgZW50cnkgOiBlbnRyaWVzKSB7CisgICAgICAgICAgICA8Y2FyZXQ+aWYgKGVudHJ5ICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIm5vdCBudWxsIik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2ludmVydElmQ29uZGl0aW9uL2FmdGVyRG9Ob3RSZW1vdmVSZXR1cm4uamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9pbnZlcnRJZkNvbmRpdGlvbi9hZnRlckRvTm90UmVtb3ZlUmV0dXJuLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWU5NDQ1NAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9pbnZlcnRJZkNvbmRpdGlvbi9hZnRlckRvTm90UmVtb3ZlUmV0dXJuLmphdmEKQEAgLTAsMCArMSwxMCBAQAorLy8gIkludmVydCBJZiBDb25kaXRpb24iICJ0cnVlIgorY2xhc3MgVGVzdCB7CisgICAgcHVibGljIHN0YXRpYyBpbnQgY3JlYXRlKCkgeworICAgICAgICBpZiAodHJ1ZSkgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIHJldHVybiAicyI7CisKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2ludmVydElmQ29uZGl0aW9uL2FmdGVyRWxzZTEuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9pbnZlcnRJZkNvbmRpdGlvbi9hZnRlckVsc2UxLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDQ0OGM3OQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9pbnZlcnRJZkNvbmRpdGlvbi9hZnRlckVsc2UxLmphdmEKQEAgLTAsMCArMSwxMSBAQAorLy8gIkludmVydCBJZiBDb25kaXRpb24iICJ0cnVlIgorY2xhc3MgQSB7CisgICAgcHVibGljIHZvaWQgZm9vKCkgeworICAgICAgICBpZiAoPGNhcmV0PiFjKSB7CisgICAgICAgICAgICBiKCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBhKCk7CisgICAgICAgIH0KKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2ludmVydElmQ29uZGl0aW9uL2FmdGVyRWxzZTIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9pbnZlcnRJZkNvbmRpdGlvbi9hZnRlckVsc2UyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDJlNzM3MQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9pbnZlcnRJZkNvbmRpdGlvbi9hZnRlckVsc2UyLmphdmEKQEAgLTAsMCArMSw4IEBACisvLyAiSW52ZXJ0IElmIENvbmRpdGlvbiIgInRydWUiCitjbGFzcyBBIHsKKyAgICBwdWJsaWMgdm9pZCBmb28oKSB7CisgICAgICAgIDxjYXJldD5pZiAoIWMpIHsKKyAgICAgICAgICAgIGIoKTsKKyAgICAgICAgfQorICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvaW52ZXJ0SWZDb25kaXRpb24vYWZ0ZXJGbG93MS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2ludmVydElmQ29uZGl0aW9uL2FmdGVyRmxvdzEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wODA3MTY5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2ludmVydElmQ29uZGl0aW9uL2FmdGVyRmxvdzEuamF2YQpAQCAtMCwwICsxLDkgQEAKKy8vICJJbnZlcnQgSWYgQ29uZGl0aW9uIiAidHJ1ZSIKK2NsYXNzIEEgeworICAgIHB1YmxpYyB2b2lkIGZvbygpIHsKKyAgICAgICAgPGNhcmV0PmlmICghYykgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGEoKTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2ludmVydElmQ29uZGl0aW9uL2FmdGVyRmxvdzIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9pbnZlcnRJZkNvbmRpdGlvbi9hZnRlckZsb3cyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjU1OTg4ZQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9pbnZlcnRJZkNvbmRpdGlvbi9hZnRlckZsb3cyLmphdmEKQEAgLTAsMCArMSwxMCBAQAorLy8gIkludmVydCBJZiBDb25kaXRpb24iICJ0cnVlIgorY2xhc3MgQSB7CisgICAgcHVibGljIHZvaWQgZm9vKCkgeworICAgICAgICA8Y2FyZXQ+aWYgKCFjKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgYSgpOworICAgICAgICBiKCk7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9pbnZlcnRJZkNvbmRpdGlvbi9hZnRlckZsb3czLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvaW52ZXJ0SWZDb25kaXRpb24vYWZ0ZXJGbG93My5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEzZGUyZmIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvaW52ZXJ0SWZDb25kaXRpb24vYWZ0ZXJGbG93My5qYXZhCkBAIC0wLDAgKzEsMTEgQEAKKy8vICJJbnZlcnQgSWYgQ29uZGl0aW9uIiAidHJ1ZSIKK2NsYXNzIEEgeworICAgIHB1YmxpYyB2b2lkIGZvbyhib29sZWFuIGMpIHsKKyAgICAgICAgPGNhcmV0PmlmIChjKSB7CisgICAgICAgICAgICBmb28oKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvaW52ZXJ0SWZDb25kaXRpb24vYWZ0ZXJGbG93NC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2ludmVydElmQ29uZGl0aW9uL2FmdGVyRmxvdzQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NzczZGRlCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2ludmVydElmQ29uZGl0aW9uL2FmdGVyRmxvdzQuamF2YQpAQCAtMCwwICsxLDE1IEBACisvLyAiSW52ZXJ0IElmIENvbmRpdGlvbiIgInRydWUiCitwdWJsaWMgY2xhc3MgQyB7CisgICAgcHVibGljIHN0YXRpYyBpbnQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisgICAgICAgIGlmICghYSkgeworICAgICAgICAgICAgZm9vKCk7CisgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHJldHVybiAyOworICAgICAgICB9CisgICAgfQorCisgICAgcHJpdmF0ZSBzdGF0aWMgdm9pZCBmb28oKSB7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2ludmVydElmQ29uZGl0aW9uL2FmdGVyRm9yMS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2ludmVydElmQ29uZGl0aW9uL2FmdGVyRm9yMS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjViYTk4NzAKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvaW52ZXJ0SWZDb25kaXRpb24vYWZ0ZXJGb3IxLmphdmEKQEAgLTAsMCArMSwxMSBAQAorLy8gIkludmVydCBJZiBDb25kaXRpb24iICJ0cnVlIgorY2xhc3MgQSB7CisgICAgcHVibGljIHZvaWQgZm9vKCkgeworICAgICAgICBmb3IgKGludCBpID0gMDs7aSsrKSB7CisgICAgICAgICAgICA8Y2FyZXQ+aWYgKCFjKSB7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBhKCk7CisgICAgICAgIH0KKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2ludmVydElmQ29uZGl0aW9uL2FmdGVySURFQTE4ODY0XzEuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9pbnZlcnRJZkNvbmRpdGlvbi9hZnRlcklERUExODg2NF8xLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjY5MmYyMgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9pbnZlcnRJZkNvbmRpdGlvbi9hZnRlcklERUExODg2NF8xLmphdmEKQEAgLTAsMCArMSwxMCBAQAorLy8gIkludmVydCBJZiBDb25kaXRpb24iICJ0cnVlIgorY2xhc3MgQSB7CisgICAgcHVibGljIHN0YXRpYyB2b2lkIGZvbygpIHsKKyAgICAgICAgaWYgKDEgPT0gMikgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIC8vIHZlcnkgaW1wb3J0YW50IGNvbW1lbnQgaGVyZQorICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oInNvbWV0aGluZyIpOworICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9pbnZlcnRJZkNvbmRpdGlvbi9hZnRlcklERUExODg2NF8yLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvaW52ZXJ0SWZDb25kaXRpb24vYWZ0ZXJJREVBMTg4NjRfMi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk5NGZkZGRhCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2ludmVydElmQ29uZGl0aW9uL2FmdGVySURFQTE4ODY0XzIuamF2YQpAQCAtMCwwICsxLDExIEBACisvLyAiSW52ZXJ0IElmIENvbmRpdGlvbiIgInRydWUiCitjbGFzcyBBIHsKKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgZm9vKCkgeworICAgICAgICA8Y2FyZXQ+aWYgKDEgKyAyICE9IDMpIHsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigic2F5Iik7CisgICAgICAgIH0KKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJzb21ldGhpbmciKTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvaW52ZXJ0SWZDb25kaXRpb24vYWZ0ZXJJREVBREVWMjI1OS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2ludmVydElmQ29uZGl0aW9uL2FmdGVySURFQURFVjIyNTkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZjM1MDA5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2ludmVydElmQ29uZGl0aW9uL2FmdGVySURFQURFVjIyNTkuamF2YQpAQCAtMCwwICsxLDIxIEBACisvLyAiSW52ZXJ0IElmIENvbmRpdGlvbiIgInRydWUiCitjbGFzcyBLIHsKKyAgICBwcml2YXRlIHZvaWQgYmFyKGludCBpKSB7CisgICAgICAgIHN3aXRjaChpKSB7CisgICAgICAgICAgICBjYXNlIDA6CisgICAgICAgICAgICAgICAgaWYgKCFmKGkpKSB7CisgICAgICAgICAgICAgICAgICAgIGkgPSAxOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICBjYXNlIDE6CisgICAgICAgICAgICAgICAgaSA9IDI7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwcml2YXRlIHN0YXRpYyBib29sZWFuIGYoaW50IGkpIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9pbnZlcnRJZkNvbmRpdGlvbi9hZnRlckluc2lkZUZvcmVhY2guamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9pbnZlcnRJZkNvbmRpdGlvbi9hZnRlckluc2lkZUZvcmVhY2guamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZjFmOTU2Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2ludmVydElmQ29uZGl0aW9uL2FmdGVySW5zaWRlRm9yZWFjaC5qYXZhCkBAIC0wLDAgKzEsMTEgQEAKKy8vICJJbnZlcnQgSWYgQ29uZGl0aW9uIiAidHJ1ZSIKK2NsYXNzIEZvbyB7CisgICAgdm9pZCBmb28oU3RyaW5nW10gYXJncykgeworICAgICAgICBmb3IgKFN0cmluZyBzIDogYXJncykgeworICAgICAgICAgICAgPGNhcmV0PmlmICghIjYiLmVxdWFscyhzKSkgeworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKHMpOworICAgICAgICB9CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9pbnZlcnRJZkNvbmRpdGlvbi9hZnRlclJldHVybjEuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9pbnZlcnRJZkNvbmRpdGlvbi9hZnRlclJldHVybjEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wODRiZjc5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2ludmVydElmQ29uZGl0aW9uL2FmdGVyUmV0dXJuMS5qYXZhCkBAIC0wLDAgKzEsMTAgQEAKKy8vICJJbnZlcnQgSWYgQ29uZGl0aW9uIiAidHJ1ZSIKK2NsYXNzIEEgeworICAgIHB1YmxpYyB2b2lkIGZvbygpIHsKKyAgICAgICAgPGNhcmV0PmlmICghYykgeworICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgIH0KKyAgICAgICAgYSgpOworICAgICAgICByZXR1cm4gbnVsbDsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2ludmVydElmQ29uZGl0aW9uL2FmdGVyUmV0dXJuMi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2ludmVydElmQ29uZGl0aW9uL2FmdGVyUmV0dXJuMi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI1ZDhlZTUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvaW52ZXJ0SWZDb25kaXRpb24vYWZ0ZXJSZXR1cm4yLmphdmEKQEAgLTAsMCArMSwxMCBAQAorLy8gIkludmVydCBJZiBDb25kaXRpb24iICJ0cnVlIgorY2xhc3MgQSB7CisgICAgcHVibGljIHZvaWQgZm9vKCkgeworICAgICAgICA8Y2FyZXQ+aWYgKCFjKSB7CisgICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgfQorICAgICAgICBhKCk7CisgICAgICAgIHJldHVybiAiIjsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2ludmVydElmQ29uZGl0aW9uL2FmdGVyU0NSMjU0Mi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2ludmVydElmQ29uZGl0aW9uL2FmdGVyU0NSMjU0Mi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE3YmVjNmIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvaW52ZXJ0SWZDb25kaXRpb24vYWZ0ZXJTQ1IyNTQyLmphdmEKQEAgLTAsMCArMSwxMiBAQAorLy8gIkludmVydCBJZiBDb25kaXRpb24iICJ0cnVlIgorLy8gZWxzZSBvbiB0aGUgc2FtZSBsaW5lCitjbGFzcyBUZXN0SW52ZXJ0SWYgeworICAgIHZvaWQgaW52ZXJ0SWYoT2JqZWN0IG9iamVjdCkgeworICAgICAgICBpZiAob2JqZWN0ICE9ICJhZGYiKSB7CisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIjEiKTsKKyAgICAgICAgfSAvLyBjb21tZW50CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIyIik7CisgICAgICAgIH0KKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2ludmVydElmQ29uZGl0aW9uL2FmdGVyV2hpbGUxLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvaW52ZXJ0SWZDb25kaXRpb24vYWZ0ZXJXaGlsZTEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOWU4NzJmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2ludmVydElmQ29uZGl0aW9uL2FmdGVyV2hpbGUxLmphdmEKQEAgLTAsMCArMSwxMSBAQAorLy8gIkludmVydCBJZiBDb25kaXRpb24iICJ0cnVlIgorY2xhc3MgQSB7CisgICAgcHVibGljIHZvaWQgZm9vKCkgeworICAgICAgICB3aGlsZSAodHJ1ZSkgeworICAgICAgICAgICAgPGNhcmV0PmlmICghYykgeworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYSgpOworICAgICAgICB9CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9pbnZlcnRJZkNvbmRpdGlvbi9hZnRlcldoaWxlMi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2ludmVydElmQ29uZGl0aW9uL2FmdGVyV2hpbGUyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTU5NGU2YgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9pbnZlcnRJZkNvbmRpdGlvbi9hZnRlcldoaWxlMi5qYXZhCkBAIC0wLDAgKzEsMTYgQEAKKy8vICJJbnZlcnQgSWYgQ29uZGl0aW9uIiAidHJ1ZSIKK2NsYXNzIEEgeworICAgIHB1YmxpYyB2b2lkIGZvbygpIHsKKyAgICAgICAgd2hpbGUgKHRydWUpIHsKKyAgICAgICAgICAgIGlmIChjKSB7CisgICAgICAgICAgICAgICAgPGNhcmV0PmlmICghZCkgeworICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYSgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAoZSkgeworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9pbnZlcnRJZkNvbmRpdGlvbi9iZWZvcmVDb25kaXRpb24xLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvaW52ZXJ0SWZDb25kaXRpb24vYmVmb3JlQ29uZGl0aW9uMS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYwN2JmYzQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvaW52ZXJ0SWZDb25kaXRpb24vYmVmb3JlQ29uZGl0aW9uMS5qYXZhCkBAIC0wLDAgKzEsNiBAQAorLy8gIkludmVydCBJZiBDb25kaXRpb24iICJ0cnVlIgorY2xhc3MgQSB7CisgICAgcHVibGljIHZvaWQgZm9vKCkgeworICAgICAgICA8Y2FyZXQ+aWYgKGMpIGEoKTsgZWxzZSBiKCk7IAorICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvaW52ZXJ0SWZDb25kaXRpb24vYmVmb3JlQ29uZGl0aW9uMi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2ludmVydElmQ29uZGl0aW9uL2JlZm9yZUNvbmRpdGlvbjIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjIxMDgxCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2ludmVydElmQ29uZGl0aW9uL2JlZm9yZUNvbmRpdGlvbjIuamF2YQpAQCAtMCwwICsxLDYgQEAKKy8vICJJbnZlcnQgSWYgQ29uZGl0aW9uIiAidHJ1ZSIKK2NsYXNzIEEgeworICAgIHB1YmxpYyB2b2lkIGZvbygpIHsKKyAgICAgICAgPGNhcmV0PmlmICgoYykpIGEoKTsgZWxzZSBiKCk7IAorICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvaW52ZXJ0SWZDb25kaXRpb24vYmVmb3JlQ29uZGl0aW9uRXEuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9pbnZlcnRJZkNvbmRpdGlvbi9iZWZvcmVDb25kaXRpb25FcS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIzZmNlOGIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvaW52ZXJ0SWZDb25kaXRpb24vYmVmb3JlQ29uZGl0aW9uRXEuamF2YQpAQCAtMCwwICsxLDYgQEAKKy8vICJJbnZlcnQgSWYgQ29uZGl0aW9uIiAidHJ1ZSIKK2NsYXNzIEEgeworICAgIHB1YmxpYyB2b2lkIGZvbygpIHsKKyAgICAgICAgPGNhcmV0PmlmIChjID09IGQpIGEoKTsgZWxzZSBiKCk7IAorICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvaW52ZXJ0SWZDb25kaXRpb24vYmVmb3JlQ29uZGl0aW9uTmVxLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvaW52ZXJ0SWZDb25kaXRpb24vYmVmb3JlQ29uZGl0aW9uTmVxLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzUwZGY3NwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9pbnZlcnRJZkNvbmRpdGlvbi9iZWZvcmVDb25kaXRpb25OZXEuamF2YQpAQCAtMCwwICsxLDYgQEAKKy8vICJJbnZlcnQgSWYgQ29uZGl0aW9uIiAidHJ1ZSIKK2NsYXNzIEEgeworICAgIHB1YmxpYyB2b2lkIGZvbygpIHsKKyAgICAgICAgPGNhcmV0PmlmIChjICE9IGQpIGEoKTsgZWxzZSBiKCk7IAorICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvaW52ZXJ0SWZDb25kaXRpb24vYmVmb3JlQ29uZGl0aW9uTm90LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvaW52ZXJ0SWZDb25kaXRpb24vYmVmb3JlQ29uZGl0aW9uTm90LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWEwOGQyNgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9pbnZlcnRJZkNvbmRpdGlvbi9iZWZvcmVDb25kaXRpb25Ob3QuamF2YQpAQCAtMCwwICsxLDYgQEAKKy8vICJJbnZlcnQgSWYgQ29uZGl0aW9uIiAidHJ1ZSIKK2NsYXNzIEEgeworICAgIHB1YmxpYyB2b2lkIGZvbygpIHsKKyAgICAgICAgPGNhcmV0PmlmICghYykgYSgpOyBlbHNlIGIoKTsgCisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9pbnZlcnRJZkNvbmRpdGlvbi9iZWZvcmVDb250aW51ZTEuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9pbnZlcnRJZkNvbmRpdGlvbi9iZWZvcmVDb250aW51ZTEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MTVmNzNiCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2ludmVydElmQ29uZGl0aW9uL2JlZm9yZUNvbnRpbnVlMS5qYXZhCkBAIC0wLDAgKzEsMTAgQEAKKy8vICJJbnZlcnQgSWYgQ29uZGl0aW9uIiAidHJ1ZSIKK2NsYXNzIEEgeworICAgIHZvaWQgZm9vICgpIHsKKyAgICAgIGludCBhID0gMCwgYiA9IDA7CisgICAgICBmb3IgKDs7KSB7CisgICAgICAgICAgPGNhcmV0PmlmIChhID09IGIpIGNvbnRpbnVlOworICAgICAgICAgIGEgPSBiOworICAgICAgfQorICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvaW52ZXJ0SWZDb25kaXRpb24vYmVmb3JlQ29udGludWUyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvaW52ZXJ0SWZDb25kaXRpb24vYmVmb3JlQ29udGludWUyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGJiNjNmMgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9pbnZlcnRJZkNvbmRpdGlvbi9iZWZvcmVDb250aW51ZTIuamF2YQpAQCAtMCwwICsxLDExIEBACisvLyAiSW52ZXJ0IElmIENvbmRpdGlvbiIgInRydWUiCitjbGFzcyBBIHsKKyAgICB2b2lkIGZvbygpIHsKKyAgICAgICAgU3RyaW5nW10gZW50cmllcyA9IG51bGw7CisgICAgICAgIGZvciAoU3RyaW5nIGVudHJ5IDogZW50cmllcykgeworICAgICAgICAgICAgPGNhcmV0PmlmIChlbnRyeSA9PSBudWxsKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJub3QgbnVsbCIpOworICAgICAgICB9CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9pbnZlcnRJZkNvbmRpdGlvbi9iZWZvcmVEb05vdFJlbW92ZVJldHVybi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2ludmVydElmQ29uZGl0aW9uL2JlZm9yZURvTm90UmVtb3ZlUmV0dXJuLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjg0N2Q0OAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9pbnZlcnRJZkNvbmRpdGlvbi9iZWZvcmVEb05vdFJlbW92ZVJldHVybi5qYXZhCkBAIC0wLDAgKzEsOSBAQAorLy8gIkludmVydCBJZiBDb25kaXRpb24iICJ0cnVlIgorY2xhc3MgVGVzdCB7CisgICAgcHVibGljIHN0YXRpYyBpbnQgY3JlYXRlKCkgeworICAgICAgICBpZiAoIXRyPGNhcmV0PnVlKSB7CisgICAgICAgICAgICByZXR1cm4gInMiOworICAgICAgICB9CisKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2ludmVydElmQ29uZGl0aW9uL2JlZm9yZUVsc2UxLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvaW52ZXJ0SWZDb25kaXRpb24vYmVmb3JlRWxzZTEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNTljNGY2Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2ludmVydElmQ29uZGl0aW9uL2JlZm9yZUVsc2UxLmphdmEKQEAgLTAsMCArMSw3IEBACisvLyAiSW52ZXJ0IElmIENvbmRpdGlvbiIgInRydWUiCitjbGFzcyBBIHsKKyAgICBwdWJsaWMgdm9pZCBmb28oKSB7CisgICAgICAgIGlmICg8Y2FyZXQ+YykgYSgpOworICAgICAgICBlbHNlIGIoKTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2ludmVydElmQ29uZGl0aW9uL2JlZm9yZUVsc2UyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvaW52ZXJ0SWZDb25kaXRpb24vYmVmb3JlRWxzZTIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOTdkYjhkCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2ludmVydElmQ29uZGl0aW9uL2JlZm9yZUVsc2UyLmphdmEKQEAgLTAsMCArMSw3IEBACisvLyAiSW52ZXJ0IElmIENvbmRpdGlvbiIgInRydWUiCitjbGFzcyBBIHsKKyAgICBwdWJsaWMgdm9pZCBmb28oKSB7CisgICAgICAgIDxjYXJldD5pZiAoYykge30KKyAgICAgICAgZWxzZSBiKCk7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9pbnZlcnRJZkNvbmRpdGlvbi9iZWZvcmVGbG93MS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2ludmVydElmQ29uZGl0aW9uL2JlZm9yZUZsb3cxLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjhiMmZhZQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9pbnZlcnRJZkNvbmRpdGlvbi9iZWZvcmVGbG93MS5qYXZhCkBAIC0wLDAgKzEsNiBAQAorLy8gIkludmVydCBJZiBDb25kaXRpb24iICJ0cnVlIgorY2xhc3MgQSB7CisgICAgcHVibGljIHZvaWQgZm9vKCkgeworICAgICAgICA8Y2FyZXQ+aWYgKGMpIGEoKTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2ludmVydElmQ29uZGl0aW9uL2JlZm9yZUZsb3cyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvaW52ZXJ0SWZDb25kaXRpb24vYmVmb3JlRmxvdzIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYTc1YzYzCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2ludmVydElmQ29uZGl0aW9uL2JlZm9yZUZsb3cyLmphdmEKQEAgLTAsMCArMSw5IEBACisvLyAiSW52ZXJ0IElmIENvbmRpdGlvbiIgInRydWUiCitjbGFzcyBBIHsKKyAgICBwdWJsaWMgdm9pZCBmb28oKSB7CisgICAgICAgIDxjYXJldD5pZiAoYykgeworICAgICAgICAgICAgYSgpOworICAgICAgICAgICAgYigpOworICAgICAgICB9CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9pbnZlcnRJZkNvbmRpdGlvbi9iZWZvcmVGbG93My5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2ludmVydElmQ29uZGl0aW9uL2JlZm9yZUZsb3czLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTk3YTlhYgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9pbnZlcnRJZkNvbmRpdGlvbi9iZWZvcmVGbG93My5qYXZhCkBAIC0wLDAgKzEsNyBAQAorLy8gIkludmVydCBJZiBDb25kaXRpb24iICJ0cnVlIgorY2xhc3MgQSB7CisgICAgcHVibGljIHZvaWQgZm9vKGJvb2xlYW4gYykgeworICAgICAgICA8Y2FyZXQ+aWYgKCFjKSByZXR1cm47CisgICAgICAgIGZvbygpOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvaW52ZXJ0SWZDb25kaXRpb24vYmVmb3JlRmxvdzQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9pbnZlcnRJZkNvbmRpdGlvbi9iZWZvcmVGbG93NC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRmMDYzMjMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvaW52ZXJ0SWZDb25kaXRpb24vYmVmb3JlRmxvdzQuamF2YQpAQCAtMCwwICsxLDExIEBACisvLyAiSW52ZXJ0IElmIENvbmRpdGlvbiIgInRydWUiCitwdWJsaWMgY2xhc3MgQyB7CisgICAgcHVibGljIHN0YXRpYyBpbnQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisgICAgICAgIDxjYXJldD5pZiAoYSkgcmV0dXJuIDI7CisgICAgICAgIGZvbygpOworICAgICAgICByZXR1cm4gMTsKKyAgICB9CisKKyAgICBwcml2YXRlIHN0YXRpYyB2b2lkIGZvbygpIHsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvaW52ZXJ0SWZDb25kaXRpb24vYmVmb3JlRm9yMS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2ludmVydElmQ29uZGl0aW9uL2JlZm9yZUZvcjEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMDE1YTMzCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2ludmVydElmQ29uZGl0aW9uL2JlZm9yZUZvcjEuamF2YQpAQCAtMCwwICsxLDggQEAKKy8vICJJbnZlcnQgSWYgQ29uZGl0aW9uIiAidHJ1ZSIKK2NsYXNzIEEgeworICAgIHB1YmxpYyB2b2lkIGZvbygpIHsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7O2krKykgeworICAgICAgICAgICAgPGNhcmV0PmlmIChjKSBhKCk7CisgICAgICAgIH0KKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2ludmVydElmQ29uZGl0aW9uL2JlZm9yZUlERUExODg2NF8xLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvaW52ZXJ0SWZDb25kaXRpb24vYmVmb3JlSURFQTE4ODY0XzEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NDU0MzU1Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2ludmVydElmQ29uZGl0aW9uL2JlZm9yZUlERUExODg2NF8xLmphdmEKQEAgLTAsMCArMSw5IEBACisvLyAiSW52ZXJ0IElmIENvbmRpdGlvbiIgInRydWUiCitjbGFzcyBBIHsKKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgZm9vKCkgeworICAgICAgICA8Y2FyZXQ+aWYgKDEgIT0gMikgeworICAgICAgICAgICAgLy8gdmVyeSBpbXBvcnRhbnQgY29tbWVudCBoZXJlCisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oInNvbWV0aGluZyIpOworICAgICAgICB9CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2ludmVydElmQ29uZGl0aW9uL2JlZm9yZUlERUExODg2NF8yLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvaW52ZXJ0SWZDb25kaXRpb24vYmVmb3JlSURFQTE4ODY0XzIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40Njg0NTNhCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2ludmVydElmQ29uZGl0aW9uL2JlZm9yZUlERUExODg2NF8yLmphdmEKQEAgLTAsMCArMSw5IEBACisvLyAiSW52ZXJ0IElmIENvbmRpdGlvbiIgInRydWUiCitjbGFzcyBBIHsKKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgZm9vKCkgeworICAgICAgICA8Y2FyZXQ+aWYgKDEgKyAyID09IDMpIHsKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigic2F5Iik7CisgICAgICAgIH0KKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJzb21ldGhpbmciKTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvaW52ZXJ0SWZDb25kaXRpb24vYmVmb3JlSURFQURFVjIyNTkuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9pbnZlcnRJZkNvbmRpdGlvbi9iZWZvcmVJREVBREVWMjI1OS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk0NjM3YzJjCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2ludmVydElmQ29uZGl0aW9uL2JlZm9yZUlERUFERVYyMjU5LmphdmEKQEAgLTAsMCArMSwxOSBAQAorLy8gIkludmVydCBJZiBDb25kaXRpb24iICJ0cnVlIgorY2xhc3MgSyB7CisgICAgcHJpdmF0ZSB2b2lkIGJhcihpbnQgaSkgeworICAgICAgICBzd2l0Y2goaSkgeworICAgICAgICAgICAgY2FzZSAwOgorICAgICAgICAgICAgICAgIDxjYXJldD5pZiAoZihpKSkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGkgPSAxOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSAxOgorICAgICAgICAgICAgICAgIGkgPSAyOworICAgICAgICB9CisgICAgfQorCisgICAgcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBmKGludCBpKSB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvaW52ZXJ0SWZDb25kaXRpb24vYmVmb3JlSW5zaWRlRm9yZWFjaC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2ludmVydElmQ29uZGl0aW9uL2JlZm9yZUluc2lkZUZvcmVhY2guamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jN2NiNzQ5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2ludmVydElmQ29uZGl0aW9uL2JlZm9yZUluc2lkZUZvcmVhY2guamF2YQpAQCAtMCwwICsxLDEwIEBACisvLyAiSW52ZXJ0IElmIENvbmRpdGlvbiIgInRydWUiCitjbGFzcyBGb28geworICAgIHZvaWQgZm9vKFN0cmluZ1tdIGFyZ3MpIHsKKyAgICAgICAgZm9yIChTdHJpbmcgcyA6IGFyZ3MpIHsKKyAgICAgICAgICAgIDxjYXJldD5pZiAoIjYiLmVxdWFscyhzKSkgeworICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihzKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvaW52ZXJ0SWZDb25kaXRpb24vYmVmb3JlUmV0dXJuMS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2ludmVydElmQ29uZGl0aW9uL2JlZm9yZVJldHVybjEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMzg1MWJkCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2ludmVydElmQ29uZGl0aW9uL2JlZm9yZVJldHVybjEuamF2YQpAQCAtMCwwICsxLDcgQEAKKy8vICJJbnZlcnQgSWYgQ29uZGl0aW9uIiAidHJ1ZSIKK2NsYXNzIEEgeworICAgIHB1YmxpYyB2b2lkIGZvbygpIHsKKyAgICAgICAgPGNhcmV0PmlmIChjKSBhKCk7CisgICAgICAgIHJldHVybiBudWxsOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvaW52ZXJ0SWZDb25kaXRpb24vYmVmb3JlUmV0dXJuMi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2ludmVydElmQ29uZGl0aW9uL2JlZm9yZVJldHVybjIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZGYzMzZmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2ludmVydElmQ29uZGl0aW9uL2JlZm9yZVJldHVybjIuamF2YQpAQCAtMCwwICsxLDEwIEBACisvLyAiSW52ZXJ0IElmIENvbmRpdGlvbiIgInRydWUiCitjbGFzcyBBIHsKKyAgICBwdWJsaWMgdm9pZCBmb28oKSB7CisgICAgICAgIDxjYXJldD5pZiAoYykgeworICAgICAgICAgICAgYSgpOworICAgICAgICAgICAgcmV0dXJuICIiOworICAgICAgICB9CisgICAgICAgIHJldHVybiBudWxsOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvaW52ZXJ0SWZDb25kaXRpb24vYmVmb3JlU0NSMjU0Mi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2ludmVydElmQ29uZGl0aW9uL2JlZm9yZVNDUjI1NDIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYWI1NmQ0Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2ludmVydElmQ29uZGl0aW9uL2JlZm9yZVNDUjI1NDIuamF2YQpAQCAtMCwwICsxLDExIEBACisvLyAiSW52ZXJ0IElmIENvbmRpdGlvbiIgInRydWUiCisvLyBlbHNlIG9uIHRoZSBzYW1lIGxpbmUKK2NsYXNzIFRlc3RJbnZlcnRJZiB7CisgICAgdm9pZCBpbnZlcnRJZihPYmplY3Qgb2JqZWN0KSB7CisgICAgICAgIDxjYXJldD5pZiAob2JqZWN0ID09ICJhZGYiKSB7CisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIjIiKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiMSIpOworICAgICAgICB9IC8vIGNvbW1lbnQKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2ludmVydElmQ29uZGl0aW9uL2JlZm9yZVdoaWxlMS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2ludmVydElmQ29uZGl0aW9uL2JlZm9yZVdoaWxlMS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY0MzVjMjMyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2ludmVydElmQ29uZGl0aW9uL2JlZm9yZVdoaWxlMS5qYXZhCkBAIC0wLDAgKzEsOCBAQAorLy8gIkludmVydCBJZiBDb25kaXRpb24iICJ0cnVlIgorY2xhc3MgQSB7CisgICAgcHVibGljIHZvaWQgZm9vKCkgeworICAgICAgICB3aGlsZSAodHJ1ZSkgeworICAgICAgICAgICAgPGNhcmV0PmlmIChjKSBhKCk7CisgICAgICAgIH0KKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2ludmVydElmQ29uZGl0aW9uL2JlZm9yZVdoaWxlMi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2ludmVydElmQ29uZGl0aW9uL2JlZm9yZVdoaWxlMi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ2MTEwMDYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvaW52ZXJ0SWZDb25kaXRpb24vYmVmb3JlV2hpbGUyLmphdmEKQEAgLTAsMCArMSwxNSBAQAorLy8gIkludmVydCBJZiBDb25kaXRpb24iICJ0cnVlIgorY2xhc3MgQSB7CisgICAgcHVibGljIHZvaWQgZm9vKCkgeworICAgICAgICB3aGlsZSAodHJ1ZSkgeworICAgICAgICAgICAgaWYgKGMpIHsKKyAgICAgICAgICAgICAgICA8Y2FyZXQ+aWYgKGQpIHsKKyAgICAgICAgICAgICAgICAgICAgYSgpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmIChlKSB7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2phdmFkb2NJRy9jbGFzc1R5cGVQYXJhbWV0ZXIuaHRtbCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9qYXZhZG9jSUcvY2xhc3NUeXBlUGFyYW1ldGVyLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTIyNTRhOAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9qYXZhZG9jSUcvY2xhc3NUeXBlUGFyYW1ldGVyLmh0bWwKQEAgLTAsMCArMSwzIEBACis8aHRtbD48aGVhZD4gICAgPHN0eWxlIHR5cGU9InRleHQvY3NzIj4gICAgICAgICNlcnJvciB7ICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2VlZWVlZTsgICAgICAgICAgICBtYXJnaW4tYm90dG9tOiAxMHB4OyAgICAgICAgfSAgICAgICAgcCB7ICAgICAgICAgICAgbWFyZ2luOiA1cHggMDsgICAgICAgIH0gICAgPC9zdHlsZT48L2hlYWQ+PGJvZHk+PFBSRT5jbGFzcyA8Yj5NZXRob2RUeXBlUGFyYW08L2I+Jmx0O1QmZ3Q7CitleHRlbmRzIDxhIGhyZWY9InBzaV9lbGVtZW50Oi8vamF2YS5sYW5nLk9iamVjdCI+PGNvZGU+T2JqZWN0PC9jb2RlPjwvYT48L1BSRT4KKyAgICA8REQ+PERMPjxEVD48Yj5UeXBlIHBhcmFtZXRlcnM6PC9iPjxERD48Y29kZT4mbHQ7VCZndDs8L2NvZGU+IC0gIHR5cGUgcGFyYW08L0REPjwvREw+PC9ERD48L2JvZHk+PC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9qYXZhZG9jSUcvY2xhc3NUeXBlUGFyYW1ldGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvamF2YWRvY0lHL2NsYXNzVHlwZVBhcmFtZXRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFjZWI5Y2EKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvamF2YWRvY0lHL2NsYXNzVHlwZVBhcmFtZXRlci5qYXZhCkBAIC0wLDAgKzEsNiBAQAorLyoqCisgICogQHBhcmFtIDxUPiB0eXBlIHBhcmFtCisgICovCitjbGFzcyBNZXRob2RUeXBlUGFyYW08VD4geworCit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2phdmFkb2NJRy9lbnVtVmFsdWVPZi5odG1sIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2phdmFkb2NJRy9lbnVtVmFsdWVPZi5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUyMTYxY2IKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvamF2YWRvY0lHL2VudW1WYWx1ZU9mLmh0bWwKQEAgLTAsMCArMSwzIEBACis8aHRtbD48aGVhZD4gICAgPHN0eWxlIHR5cGU9InRleHQvY3NzIj4gICAgICAgICNlcnJvciB7ICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2VlZWVlZTsgICAgICAgICAgICBtYXJnaW4tYm90dG9tOiAxMHB4OyAgICAgICAgfSAgICAgICAgcCB7ICAgICAgICAgICAgbWFyZ2luOiA1cHggMDsgICAgICAgIH0gICAgPC9zdHlsZT48L2hlYWQ+PGJvZHk+PHNtYWxsPjxiPjxhIGhyZWY9InBzaV9lbGVtZW50Oi8vRW4iPjxjb2RlPkVuPC9jb2RlPjwvYT48L2I+PC9zbWFsbD48UFJFPnN0YXRpYyZuYnNwO2ludCZuYnNwOzxiPnZhbHVlT2Y8L2I+KGludCZuYnNwO2kpPC9QUkU+CisgICAgIG15amF2YWRvYworICAgICA8REQ+PERMPjxEVD48Yj5QYXJhbWV0ZXJzOjwvYj48REQ+PGNvZGU+aTwvY29kZT4gLSAgPC9ERD48L0RMPjwvREQ+PEREPjxETD48RFQ+PGI+UmV0dXJuczo8L2I+PEREPjwvREQ+PC9ETD48L0REPjwvYm9keT48L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2phdmFkb2NJRy9lbnVtVmFsdWVPZi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2phdmFkb2NJRy9lbnVtVmFsdWVPZi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBkNTRlN2IKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvamF2YWRvY0lHL2VudW1WYWx1ZU9mLmphdmEKQEAgLTAsMCArMSwxMiBAQAorZW51bSBFbiB7CisgIDsKKworICAvKioKKyAgICogbXlqYXZhZG9jCisgICAqIEBwYXJhbSBpCisgICAqIEByZXR1cm4KKyAgICovCisgIHN0YXRpYyBpbnQgdmFsdWVPZihpbnQgaSkgeworICAgIHJldHVybiBpOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2phdmFkb2NJRy9lc2NhcGVWYWx1ZXMuaHRtbCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9qYXZhZG9jSUcvZXNjYXBlVmFsdWVzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTM1YmQyNwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9qYXZhZG9jSUcvZXNjYXBlVmFsdWVzLmh0bWwKQEAgLTAsMCArMSwzIEBACis8aHRtbD48aGVhZD4gICAgPHN0eWxlIHR5cGU9InRleHQvY3NzIj4gICAgICAgICNlcnJvciB7ICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2VlZWVlZTsgICAgICAgICAgICBtYXJnaW4tYm90dG9tOiAxMHB4OyAgICAgICAgfSAgICAgICAgcCB7ICAgICAgICAgICAgbWFyZ2luOiA1cHggMDsgICAgICAgIH0gICAgPC9zdHlsZT48L2hlYWQ+PGJvZHk+PFBSRT5jbGFzcyA8Yj5QYXR0ZXJuPC9iPgorZXh0ZW5kcyA8YSBocmVmPSJwc2lfZWxlbWVudDovL2phdmEubGFuZy5PYmplY3QiPjxjb2RlPk9iamVjdDwvY29kZT48L2E+PC9QUkU+CisgICBcVyAgXHUwM0E5PC9ib2R5PjwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvamF2YWRvY0lHL2VzY2FwZVZhbHVlcy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2phdmFkb2NJRy9lc2NhcGVWYWx1ZXMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44M2MwMTQ5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2phdmFkb2NJRy9lc2NhcGVWYWx1ZXMuamF2YQpAQCAtMCwwICsxLDUgQEAKKy8qKgorICogXFcgIFx1MDNBOQorICovCitjbGFzcyBQYXR0ZXJuIHsKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9qYXZhZG9jSUcvZmllbGRWYWx1ZS5odG1sIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2phdmFkb2NJRy9maWVsZFZhbHVlLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjE1NDg4ZAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9qYXZhZG9jSUcvZmllbGRWYWx1ZS5odG1sCkBAIC0wLDAgKzEgQEAKKzxodG1sPjxoZWFkPiAgICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiPiAgICAgICAgI2Vycm9yIHsgICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZWVlZWVlOyAgICAgICAgICAgIG1hcmdpbi1ib3R0b206IDEwcHg7ICAgICAgICB9ICAgICAgICBwIHsgICAgICAgICAgICBtYXJnaW46IDVweCAwOyAgICAgICAgfSAgICA8L3N0eWxlPjwvaGVhZD48Ym9keT48c21hbGw+PGI+PGEgaHJlZj0icHNpX2VsZW1lbnQ6Ly9BIj48Y29kZT5BPC9jb2RlPjwvYT48L2I+PC9zbWFsbD48UFJFPnB1YmxpYyBzdGF0aWMgaW50IDxiPkpBVkFET0NfTUUgPSAyMzwvYj48L1BSRT4gVGhlIHZhbHVlIG9mIHRoZSBmaWVsZCBpcyAyMy48L2JvZHk+PC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9qYXZhZG9jSUcvZmllbGRWYWx1ZS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2phdmFkb2NJRy9maWVsZFZhbHVlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDFjMGZmNgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9qYXZhZG9jSUcvZmllbGRWYWx1ZS5qYXZhCkBAIC0wLDAgKzEsNCBAQAorY2xhc3MgQSB7CisgIC8qKiBUaGUgdmFsdWUgb2YgdGhlIGZpZWxkIGlzIHtAdmFsdWV9LiAqLworICBwdWJsaWMgc3RhdGljIGludCBKQVZBRE9DX01FID0gMjM7Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvamF2YWRvY0lHL2lkZWFkZXYyMzI2Lmh0bWwgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvamF2YWRvY0lHL2lkZWFkZXYyMzI2Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTVmNmM5ZgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9qYXZhZG9jSUcvaWRlYWRldjIzMjYuaHRtbApAQCAtMCwwICsxLDIgQEAKKzxodG1sPjxoZWFkPiAgICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiPiAgICAgICAgI2Vycm9yIHsgICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZWVlZWVlOyAgICAgICAgICAgIG1hcmdpbi1ib3R0b206IDEwcHg7ICAgICAgICB9ICAgICAgICBwIHsgICAgICAgICAgICBtYXJnaW46IDVweCAwOyAgICAgICAgfSAgICA8L3N0eWxlPjwvaGVhZD48Ym9keT48c21hbGw+PGI+PGEgaHJlZj0icHNpX2VsZW1lbnQ6Ly9JZGVhNDc4MCI+PGNvZGU+SWRlYTQ3ODA8L2NvZGU+PC9hPjwvYj48L3NtYWxsPjxQUkU+cHVibGljJm5ic3A7PGEgaHJlZj0icHNpX2VsZW1lbnQ6Ly9qYXZhLmxhbmcuT2JqZWN0Ij48Y29kZT5PYmplY3Q8L2NvZGU+PC9hPiZuYnNwOzxiPnJlYWQ8L2I+KCkKKyAgICAgICAgICAgdGhyb3dzJm5ic3A7PGEgaHJlZj0icHNpX2VsZW1lbnQ6Ly9qYXZhLmlvLklPRXhjZXB0aW9uIj48Y29kZT5JT0V4Y2VwdGlvbjwvY29kZT48L2E+PC9QUkU+PEREPjxETD48RFQ+PGI+VGhyb3dzOjwvYj48REQ+PGEgaHJlZj0icHNpX2VsZW1lbnQ6Ly9qYXZhLmlvLklPRXhjZXB0aW9uIj48Y29kZT5JT0V4Y2VwdGlvbjwvY29kZT48L2E+IC0gaWYgYW4gSS9PIGVycm9yIG9jY3VycyB3aGlsZSByZWFkaW5nLiAgPEREPjxhIGhyZWY9InBzaV9lbGVtZW50Oi8vamF2YS5pby5FT0ZFeGNlcHRpb24iPjxjb2RlPkVPRkV4Y2VwdGlvbjwvY29kZT48L2E+IC0gaWYgdGhpcyBzb3VyY2UgaXMgYWxyZWFkeSBjbG9zZWQgd2hlbiB0aGUgPGNvZGU+cmVhZCgpPC9jb2RlPiBpcyBjYWxsZWQsICBvciBpcyBjbG9zZWQgZHVyaW5nIHRoZSA8Y29kZT5yZWFkKCk8L2NvZGU+LiAgPEREPjxmb250IGNvbG9yPXJlZD5JbnRlcnJ1cHRlZElPRXhjZXB0aW9uPC9mb250PiAtIGlmIHRoZSByZWFkaW5nIHRocmVhZCBpcyBpbnRlcnJ1cHRlZC48L0REPjwvREw+PC9ERD48L2JvZHk+PC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9qYXZhZG9jSUcvaWRlYWRldjIzMjYuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9qYXZhZG9jSUcvaWRlYWRldjIzMjYuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYzJmNjA5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2phdmFkb2NJRy9pZGVhZGV2MjMyNi5qYXZhCkBAIC0wLDAgKzEsMTQgQEAKK2ltcG9ydCBqYXZhLmlvLkVPRkV4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworaW1wb3J0IGphdmEuaW8uSW50ZXJydXB0ZWRJT0V4Y2VwdGlvbjsKKworcHVibGljIGludGVyZmFjZSBJZGVhNDc4MCB7CisgICAgLyoqCisgICAgICogQHRocm93cyBJT0V4Y2VwdGlvbiBpZiBhbiBJL08gZXJyb3Igb2NjdXJzIHdoaWxlIHJlYWRpbmcuCisgICAgICogQHRocm93cyBFT0ZFeGNlcHRpb24gaWYgdGhpcyBzb3VyY2UgaXMgYWxyZWFkeSBjbG9zZWQgd2hlbiB0aGUgPGNvZGU+cmVhZCgpPC9jb2RlPiBpcyBjYWxsZWQsCisgICAgICogb3IgaXMgY2xvc2VkIGR1cmluZyB0aGUgPGNvZGU+cmVhZCgpPC9jb2RlPi4KKyAgICAgKiBAdGhyb3dzIEludGVycnVwdGVkSU9FeGNlcHRpb24gaWYgdGhlIHJlYWRpbmcgdGhyZWFkIGlzIGludGVycnVwdGVkLgorICAgICAqLworICAgIHB1YmxpYyBPYmplY3QgcmVhZCgpCisgICAgICAgIHRocm93cyBJT0V4Y2VwdGlvbjsKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9qYXZhZG9jSUcvaW5oZXJpdGVkRG9jSW5UaHJvd3MuaHRtbCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9qYXZhZG9jSUcvaW5oZXJpdGVkRG9jSW5UaHJvd3MuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YTMyYjUwCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2phdmFkb2NJRy9pbmhlcml0ZWREb2NJblRocm93cy5odG1sCkBAIC0wLDAgKzEsMiBAQAorPGh0bWw+PGhlYWQ+ICAgIDxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+ICAgICAgICAjZXJyb3IgeyAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNlZWVlZWU7ICAgICAgICAgICAgbWFyZ2luLWJvdHRvbTogMTBweDsgICAgICAgIH0gICAgICAgIHAgeyAgICAgICAgICAgIG1hcmdpbjogNXB4IDA7ICAgICAgICB9ICAgIDwvc3R5bGU+PC9oZWFkPjxib2R5PjxzbWFsbD48Yj48YSBocmVmPSJwc2lfZWxlbWVudDovL0luaGVyaXRlZERvY0luVGhyb3dzIj48Y29kZT5Jbmhlcml0ZWREb2NJblRocm93czwvY29kZT48L2E+PC9iPjwvc21hbGw+PFBSRT52b2lkJm5ic3A7PGI+Zm9vPC9iPigpCisgdGhyb3dzJm5ic3A7PGEgaHJlZj0icHNpX2VsZW1lbnQ6Ly9qYXZhLmlvLklPRXhjZXB0aW9uIj48Y29kZT5JT0V4Y2VwdGlvbjwvY29kZT48L2E+PC9QUkU+PEREPjxETD48RFQ+PGI+T3ZlcnJpZGVzOjwvYj48REQ+PGEgaHJlZj0icHNpX2VsZW1lbnQ6Ly9BI2ZvbygpIj48Y29kZT5mb288L2NvZGU+PC9hPiBpbiBjbGFzcyA8YSBocmVmPSJwc2lfZWxlbWVudDovL0EiPjxjb2RlPkE8L2NvZGU+PC9hPjwvREQ+PC9ETD48L0REPjxERD48REw+PERUPjxiPlRocm93czo8L2I+PEREPjxhIGhyZWY9InBzaV9lbGVtZW50Oi8vamF2YS5pby5JT0V4Y2VwdGlvbiI+PGNvZGU+SU9FeGNlcHRpb248L2NvZGU+PC9hPiAtIGxhLWxhLWxhPC9ERD48L0RMPjwvREQ+PC9ib2R5PjwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvamF2YWRvY0lHL2luaGVyaXRlZERvY0luVGhyb3dzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvamF2YWRvY0lHL2luaGVyaXRlZERvY0luVGhyb3dzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzdkYzg2M2YKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvamF2YWRvY0lHL2luaGVyaXRlZERvY0luVGhyb3dzLmphdmEKQEAgLTAsMCArMSwxOCBAQAoraW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CisKK2NsYXNzIEluaGVyaXRlZERvY0luVGhyb3dzIGV4dGVuZHMgQXsKKyAgLyoqCisgICAqIEB0aHJvd3MgSU9FeGNlcHRpb24ge0Bpbmhlcml0RG9jfQorICAgKi8KKyAgdm9pZCBmb28oKSB0aHJvd3MgSU9FeGNlcHRpb24geworICAgIHN1cGVyLmZvbygpOworICB9Cit9CisKK2NsYXNzIEEgeworICAvKioKKyAgICogQHRocm93cyBJT0V4Y2VwdGlvbiBsYS1sYS1sYQorICAgKi8KKyAgdm9pZCBmb28oKSB0aHJvd3MgSU9FeGNlcHRpb24geworICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvamF2YWRvY0lHL2luaGVyaXRlZERvY0luVGhyb3dzMS5odG1sIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2phdmFkb2NJRy9pbmhlcml0ZWREb2NJblRocm93czEuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OTc5NmU3Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2phdmFkb2NJRy9pbmhlcml0ZWREb2NJblRocm93czEuaHRtbApAQCAtMCwwICsxLDIgQEAKKzxodG1sPjxoZWFkPiAgICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiPiAgICAgICAgI2Vycm9yIHsgICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZWVlZWVlOyAgICAgICAgICAgIG1hcmdpbi1ib3R0b206IDEwcHg7ICAgICAgICB9ICAgICAgICBwIHsgICAgICAgICAgICBtYXJnaW46IDVweCAwOyAgICAgICAgfSAgICA8L3N0eWxlPjwvaGVhZD48Ym9keT48c21hbGw+PGI+PGEgaHJlZj0icHNpX2VsZW1lbnQ6Ly9Jbmhlcml0ZWREb2NJblRocm93czEiPjxjb2RlPkluaGVyaXRlZERvY0luVGhyb3dzMTwvY29kZT48L2E+PC9iPjwvc21hbGw+PFBSRT52b2lkJm5ic3A7PGI+Zm9vPC9iPigpCisgdGhyb3dzJm5ic3A7PGEgaHJlZj0icHNpX2VsZW1lbnQ6Ly9qYXZhLmlvLklPRXhjZXB0aW9uIj48Y29kZT5JT0V4Y2VwdGlvbjwvY29kZT48L2E+PC9QUkU+PEREPjxETD48RFQ+PGI+T3ZlcnJpZGVzOjwvYj48REQ+PGEgaHJlZj0icHNpX2VsZW1lbnQ6Ly9BI2ZvbygpIj48Y29kZT5mb288L2NvZGU+PC9hPiBpbiBjbGFzcyA8YSBocmVmPSJwc2lfZWxlbWVudDovL0EiPjxjb2RlPkE8L2NvZGU+PC9hPjwvREQ+PC9ETD48L0REPjxERD48REw+PERUPjxiPlRocm93czo8L2I+PEREPjxhIGhyZWY9InBzaV9lbGVtZW50Oi8vamF2YS5pby5JT0V4Y2VwdGlvbiI+PGNvZGU+SU9FeGNlcHRpb248L2NvZGU+PC9hPiAtIGNvbW1lbnQ8L0REPjwvREw+PC9ERD48L2JvZHk+PC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9qYXZhZG9jSUcvaW5oZXJpdGVkRG9jSW5UaHJvd3MxLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvamF2YWRvY0lHL2luaGVyaXRlZERvY0luVGhyb3dzMS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUzMGU1ZjAKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvamF2YWRvY0lHL2luaGVyaXRlZERvY0luVGhyb3dzMS5qYXZhCkBAIC0wLDAgKzEsMTggQEAKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworCitjbGFzcyBJbmhlcml0ZWREb2NJblRocm93czEgZXh0ZW5kcyBBeworICAvKioKKyAgICogQHRocm93cyBqYXZhLmlvLklPRXhjZXB0aW9uIGNvbW1lbnQKKyAgICovCisgIHZvaWQgZm9vKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKKyAgICBzdXBlci5mb28oKTsKKyAgfQorfQorCitjbGFzcyBBIHsKKyAgLyoqCisgICAqIEB0aHJvd3MgamF2YS5pby5JT0V4Y2VwdGlvbiBsYS1sYS1sYQorICAgKi8KKyAgdm9pZCBmb28oKSB0aHJvd3MgSU9FeGNlcHRpb24geworICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvamF2YWRvY0lHL2luaXRpYWxpemVyV2l0aE5ldy5odG1sIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2phdmFkb2NJRy9pbml0aWFsaXplcldpdGhOZXcuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMTFlMjM4Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2phdmFkb2NJRy9pbml0aWFsaXplcldpdGhOZXcuaHRtbApAQCAtMCwwICsxIEBACis8aHRtbD48aGVhZD4gICAgPHN0eWxlIHR5cGU9InRleHQvY3NzIj4gICAgICAgICNlcnJvciB7ICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2VlZWVlZTsgICAgICAgICAgICBtYXJnaW4tYm90dG9tOiAxMHB4OyAgICAgICAgfSAgICAgICAgcCB7ICAgICAgICAgICAgbWFyZ2luOiA1cHggMDsgICAgICAgIH0gICAgPC9zdHlsZT48L2hlYWQ+PGJvZHk+PHNtYWxsPjxiPjxhIGhyZWY9InBzaV9lbGVtZW50Oi8vQSI+PGNvZGU+QTwvY29kZT48L2E+PC9iPjwvc21hbGw+PFBSRT5wdWJsaWMgPGEgaHJlZj0icHNpX2VsZW1lbnQ6Ly9qYXZhLnV0aWwuTGlzdCI+PGNvZGU+TGlzdDwvY29kZT48L2E+Jmx0OzxhIGhyZWY9InBzaV9lbGVtZW50Oi8vamF2YS5sYW5nLlN0cmluZyI+PGNvZGU+U3RyaW5nPC9jb2RlPjwvYT4mZ3Q7IDxiPnN0cmluZ3MgPSBuZXcgPGEgaHJlZj0icHNpX2VsZW1lbnQ6Ly9qYXZhLnV0aWwuQXJyYXlMaXN0Ij48Y29kZT5BcnJheUxpc3Q8L2NvZGU+PC9hPiZsdDs8YSBocmVmPSJwc2lfZWxlbWVudDovL2phdmEubGFuZy5TdHJpbmciPjxjb2RlPlN0cmluZzwvY29kZT48L2E+Jmd0OyhuZXcgPGEgaHJlZj0icHNpX2VsZW1lbnQ6Ly9qYXZhLnV0aWwuQXJyYXlMaXN0Ij48Y29kZT5BcnJheUxpc3Q8L2NvZGU+PC9hPiZsdDs8YSBocmVmPSJwc2lfZWxlbWVudDovL2phdmEubGFuZy5JbnRlZ2VyIj48Y29kZT5JbnRlZ2VyPC9jb2RlPjwvYT4mZ3Q7KCksIENvbGxlY3Rpb25zLnNpbmdsZXRvbihuZXcgPGEgaHJlZj0icHNpX2VsZW1lbnQ6Ly9qYXZhLnV0aWwuQXJyYXlMaXN0Ij48Y29kZT5BcnJheUxpc3Q8L2NvZGU+PC9hPiZsdDs8YSBocmVmPSJwc2lfZWxlbWVudDovL2phdmEubGFuZy5Eb3VibGUiPjxjb2RlPkRvdWJsZTwvY29kZT48L2E+Jmd0OygpKSk8L2I+PC9QUkU+PC9ib2R5PjwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvamF2YWRvY0lHL2luaXRpYWxpemVyV2l0aE5ldy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2phdmFkb2NJRy9pbml0aWFsaXplcldpdGhOZXcuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZTRmNDFiCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2phdmFkb2NJRy9pbml0aWFsaXplcldpdGhOZXcuamF2YQpAQCAtMCwwICsxLDYgQEAKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitjbGFzcyBBIHsKKyAgcHVibGljIExpc3Q8U3RyaW5nPiBzdHJpbmdzID0gbmV3IEFycmF5TGlzdDxTdHJpbmc+KG5ldyBBcnJheUxpc3Q8SW50ZWdlcj4oKSwgQ29sbGVjdGlvbnMuc2luZ2xldG9uKG5ldyBBcnJheUxpc3Q8RG91YmxlPigpKSk7Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvamF2YWRvY0lHL21ldGhvZFR5cGVQYXJhbWV0ZXIuaHRtbCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9qYXZhZG9jSUcvbWV0aG9kVHlwZVBhcmFtZXRlci5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg2ZWQ2NjIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvamF2YWRvY0lHL21ldGhvZFR5cGVQYXJhbWV0ZXIuaHRtbApAQCAtMCwwICsxIEBACis8aHRtbD48aGVhZD4gICAgPHN0eWxlIHR5cGU9InRleHQvY3NzIj4gICAgICAgICNlcnJvciB7ICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2VlZWVlZTsgICAgICAgICAgICBtYXJnaW4tYm90dG9tOiAxMHB4OyAgICAgICAgfSAgICAgICAgcCB7ICAgICAgICAgICAgbWFyZ2luOiA1cHggMDsgICAgICAgIH0gICAgPC9zdHlsZT48L2hlYWQ+PGJvZHk+PHNtYWxsPjxiPjxhIGhyZWY9InBzaV9lbGVtZW50Oi8vTWV0aG9kVHlwZVBhcmFtIj48Y29kZT5NZXRob2RUeXBlUGFyYW08L2NvZGU+PC9hPjwvYj48L3NtYWxsPjxQUkU+Jmx0O1QmZ3Q7Jm5ic3A7dm9pZCZuYnNwOzxiPmZvbzwvYj4oVCZuYnNwO3QpPC9QUkU+PEREPjxETD48RFQ+PGI+VHlwZSBwYXJhbWV0ZXJzOjwvYj48REQ+PGNvZGU+Jmx0O1QmZ3Q7PC9jb2RlPiAtICB0eXBlIHBhcmFtPC9ERD48L0RMPjwvREQ+PC9ib2R5PjwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvamF2YWRvY0lHL21ldGhvZFR5cGVQYXJhbWV0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9qYXZhZG9jSUcvbWV0aG9kVHlwZVBhcmFtZXRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVhZDVkODUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvamF2YWRvY0lHL21ldGhvZFR5cGVQYXJhbWV0ZXIuamF2YQpAQCAtMCwwICsxLDcgQEAKK2NsYXNzIE1ldGhvZFR5cGVQYXJhbSB7CisgIC8qKgorICAqIEBwYXJhbSA8VD4gdHlwZSBwYXJhbQorICAqLworICA8VD4gdm9pZCBmb28oVCB0KSB7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvamF2YWRvY0lHL3BhY2thZ2VJbmZvL3BhY2thZ2UtaW5mby5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2phdmFkb2NJRy9wYWNrYWdlSW5mby9wYWNrYWdlLWluZm8uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZGMzZjFiCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2phdmFkb2NJRy9wYWNrYWdlSW5mby9wYWNrYWdlLWluZm8uamF2YQpAQCAtMCwwICsxLDQgQEAKKy8qKgorICogVGhpcyBwYWNrYWdlIGNvbnRhaW5zIG5vdGhpbmcgYnV0IHBhY2thZ2UtaW5mby5qYXZhCisgKi8KK3BhY2thZ2UgcGFja2FnZUluZm87ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2phdmFkb2NJRy9wYWNrYWdlSW5mby9wYWNrYWdlSW5mby5odG1sIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2phdmFkb2NJRy9wYWNrYWdlSW5mby9wYWNrYWdlSW5mby5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNjN2ZmODkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvamF2YWRvY0lHL3BhY2thZ2VJbmZvL3BhY2thZ2VJbmZvLmh0bWwKQEAgLTAsMCArMSwyIEBACis8aHRtbD48aGVhZD4gICAgPHN0eWxlIHR5cGU9InRleHQvY3NzIj4gICAgICAgICNlcnJvciB7ICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2VlZWVlZTsgICAgICAgICAgICBtYXJnaW4tYm90dG9tOiAxMHB4OyAgICAgICAgfSAgICAgICAgcCB7ICAgICAgICAgICAgbWFyZ2luOiA1cHggMDsgICAgICAgIH0gICAgPC9zdHlsZT48L2hlYWQ+PGJvZHk+CisgICBUaGlzIHBhY2thZ2UgY29udGFpbnMgbm90aGluZyBidXQgcGFja2FnZS1pbmZvLmphdmE8L2JvZHk+PC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9qYXZhZG9jSUcvc2ltcGxlRmllbGQuaHRtbCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9qYXZhZG9jSUcvc2ltcGxlRmllbGQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NDNjZWFjCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2phdmFkb2NJRy9zaW1wbGVGaWVsZC5odG1sCkBAIC0wLDAgKzEgQEAKKzxodG1sPjxoZWFkPiAgICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiPiAgICAgICAgI2Vycm9yIHsgICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZWVlZWVlOyAgICAgICAgICAgIG1hcmdpbi1ib3R0b206IDEwcHg7ICAgICAgICB9ICAgICAgICBwIHsgICAgICAgICAgICBtYXJnaW46IDVweCAwOyAgICAgICAgfSAgICA8L3N0eWxlPjwvaGVhZD48Ym9keT48c21hbGw+PGI+PGEgaHJlZj0icHNpX2VsZW1lbnQ6Ly9BIj48Y29kZT5BPC9jb2RlPjwvYT48L2I+PC9zbWFsbD48UFJFPnB1YmxpYyBzdGF0aWMgaW50IDxiPkpBVkFET0NfTUU8L2I+PC9QUkU+IFRlc3Q8L2JvZHk+PC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9qYXZhZG9jSUcvc2ltcGxlRmllbGQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9qYXZhZG9jSUcvc2ltcGxlRmllbGQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMTcyZTY5MQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9qYXZhZG9jSUcvc2ltcGxlRmllbGQuamF2YQpAQCAtMCwwICsxLDQgQEAKK2NsYXNzIEEgeworICAvKiogVGVzdCAqLworICBwdWJsaWMgc3RhdGljIGludCBKQVZBRE9DX01FOworfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2phdmFkb2NJRy92YWx1ZUluTWV0aG9kLmh0bWwgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvamF2YWRvY0lHL3ZhbHVlSW5NZXRob2QuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YjJmZTcyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2phdmFkb2NJRy92YWx1ZUluTWV0aG9kLmh0bWwKQEAgLTAsMCArMSBAQAorPGh0bWw+PGhlYWQ+ICAgIDxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+ICAgICAgICAjZXJyb3IgeyAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNlZWVlZWU7ICAgICAgICAgICAgbWFyZ2luLWJvdHRvbTogMTBweDsgICAgICAgIH0gICAgICAgIHAgeyAgICAgICAgICAgIG1hcmdpbjogNXB4IDA7ICAgICAgICB9ICAgIDwvc3R5bGU+PC9oZWFkPjxib2R5PjxzbWFsbD48Yj48YSBocmVmPSJwc2lfZWxlbWVudDovL0EiPjxjb2RlPkE8L2NvZGU+PC9hPjwvYj48L3NtYWxsPjxQUkU+cHVibGljIHN0YXRpYyZuYnNwO3ZvaWQmbmJzcDs8Yj5KQVZBRE9DX01FPC9iPigpPC9QUkU+IFRoZSB2YWx1ZSBvZiBBIGlzIDIzLjwvYm9keT48L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2phdmFkb2NJRy92YWx1ZUluTWV0aG9kLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvamF2YWRvY0lHL3ZhbHVlSW5NZXRob2QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YzdlMjA1Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L2phdmFkb2NJRy92YWx1ZUluTWV0aG9kLmphdmEKQEAgLTAsMCArMSw2IEBACitjbGFzcyBBIHsKKyAgcHVibGljIHN0YXRpYyBpbnQgQSA9IDIzOworCisgIC8qKiBUaGUgdmFsdWUgb2YgQSBpcyB7QHZhbHVlICNBfS4gKi8KKyAgcHVibGljIHN0YXRpYyB2b2lkIEpBVkFET0NfTUUoKSB7IH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9uYXZpZ2F0aW9uL2FsZXhQcm9qZWN0L3Rlc3QuaXByIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L25hdmlnYXRpb24vYWxleFByb2plY3QvdGVzdC5pcHIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGRlZDZmNAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9uYXZpZ2F0aW9uL2FsZXhQcm9qZWN0L3Rlc3QuaXByCkBAIC0wLDAgKzEsMjY0IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHByb2plY3QgdmVyc2lvbj0iNCIgcmVsYXRpdmVQYXRocz0idHJ1ZSI+CisgIDxjb21wb25lbnQgbmFtZT0iQW50Q29uZmlndXJhdGlvbiI+CisgICAgPGRlZmF1bHRBbnQgYnVuZGxlZEFudD0idHJ1ZSIgLz4KKyAgPC9jb21wb25lbnQ+CisgIDxjb21wb25lbnQgbmFtZT0iQnVpbGRKYXJQcm9qZWN0U2V0dGluZ3MiPgorICAgIDxvcHRpb24gbmFtZT0iQlVJTERfSkFSU19PTl9NQUtFIiB2YWx1ZT0iZmFsc2UiIC8+CisgIDwvY29tcG9uZW50PgorICA8Y29tcG9uZW50IG5hbWU9IkNvZGVTdHlsZVByb2plY3RQcm9maWxlTWFuZ2VyIj4KKyAgICA8b3B0aW9uIG5hbWU9IlBST0pFQ1RfUFJPRklMRSIgLz4KKyAgICA8b3B0aW9uIG5hbWU9IlVTRV9QUk9KRUNUX0xFVkVMX1NFVFRJTkdTIiB2YWx1ZT0iZmFsc2UiIC8+CisgICAgPHNjb3BlcyAvPgorICAgIDxwcm9maWxlcyAvPgorICA8L2NvbXBvbmVudD4KKyAgPGNvbXBvbmVudCBuYW1lPSJDb2RlU3R5bGVTZXR0aW5nc01hbmFnZXIiPgorICAgIDxvcHRpb24gbmFtZT0iUEVSX1BST0pFQ1RfU0VUVElOR1MiIC8+CisgICAgPG9wdGlvbiBuYW1lPSJVU0VfUEVSX1BST0pFQ1RfU0VUVElOR1MiIHZhbHVlPSJmYWxzZSIgLz4KKyAgPC9jb21wb25lbnQ+CisgIDxjb21wb25lbnQgbmFtZT0iQ29tcGlsZXJDb25maWd1cmF0aW9uIj4KKyAgICA8b3B0aW9uIG5hbWU9IkRFRkFVTFRfQ09NUElMRVIiIHZhbHVlPSJKYXZhYyIgLz4KKyAgICA8b3B0aW9uIG5hbWU9IkRFUExPWV9BRlRFUl9NQUtFIiB2YWx1ZT0iMCIgLz4KKyAgICA8cmVzb3VyY2VFeHRlbnNpb25zPgorICAgICAgPGVudHJ5IG5hbWU9Ii4rXC4ocHJvcGVydGllc3x4bWx8aHRtbHxkdGR8dGxkKSIgLz4KKyAgICAgIDxlbnRyeSBuYW1lPSIuK1wuKGdpZnxwbmd8anBlZ3xqcGcpIiAvPgorICAgIDwvcmVzb3VyY2VFeHRlbnNpb25zPgorICAgIDx3aWxkY2FyZFJlc291cmNlUGF0dGVybnM+CisgICAgICA8ZW50cnkgbmFtZT0iPyoucHJvcGVydGllcyIgLz4KKyAgICAgIDxlbnRyeSBuYW1lPSI/Ki54bWwiIC8+CisgICAgICA8ZW50cnkgbmFtZT0iPyouZ2lmIiAvPgorICAgICAgPGVudHJ5IG5hbWU9Ij8qLnBuZyIgLz4KKyAgICAgIDxlbnRyeSBuYW1lPSI/Ki5qcGVnIiAvPgorICAgICAgPGVudHJ5IG5hbWU9Ij8qLmpwZyIgLz4KKyAgICAgIDxlbnRyeSBuYW1lPSI/Ki5odG1sIiAvPgorICAgICAgPGVudHJ5IG5hbWU9Ij8qLmR0ZCIgLz4KKyAgICAgIDxlbnRyeSBuYW1lPSI/Ki50bGQiIC8+CisgICAgPC93aWxkY2FyZFJlc291cmNlUGF0dGVybnM+CisgIDwvY29tcG9uZW50PgorICA8Y29tcG9uZW50IG5hbWU9IkRhdGFTb3VyY2VNYW5hZ2VySW1wbCIgLz4KKyAgPGNvbXBvbmVudCBuYW1lPSJEZXBlbmRlbmNpZXNBbmFseXplTWFuYWdlciI+CisgICAgPG9wdGlvbiBuYW1lPSJteUZvcndhcmREaXJlY3Rpb24iIHZhbHVlPSJmYWxzZSIgLz4KKyAgPC9jb21wb25lbnQ+CisgIDxjb21wb25lbnQgbmFtZT0iRGVwZW5kZW5jeVZhbGlkYXRpb25NYW5hZ2VyIiAvPgorICA8Y29tcG9uZW50IG5hbWU9IkVjbGlwc2VDb21waWxlclNldHRpbmdzIj4KKyAgICA8b3B0aW9uIG5hbWU9IkRFQlVHR0lOR19JTkZPIiB2YWx1ZT0idHJ1ZSIgLz4KKyAgICA8b3B0aW9uIG5hbWU9IkdFTkVSQVRFX05PX1dBUk5JTkdTIiB2YWx1ZT0idHJ1ZSIgLz4KKyAgICA8b3B0aW9uIG5hbWU9IkRFUFJFQ0FUSU9OIiB2YWx1ZT0iZmFsc2UiIC8+CisgICAgPG9wdGlvbiBuYW1lPSJBRERJVElPTkFMX09QVElPTlNfU1RSSU5HIiB2YWx1ZT0iIiAvPgorICAgIDxvcHRpb24gbmFtZT0iTUFYSU1VTV9IRUFQX1NJWkUiIHZhbHVlPSIxMjgiIC8+CisgIDwvY29tcG9uZW50PgorICA8Y29tcG9uZW50IG5hbWU9IkVjbGlwc2VFbWJlZGRlZENvbXBpbGVyU2V0dGluZ3MiPgorICAgIDxvcHRpb24gbmFtZT0iREVCVUdHSU5HX0lORk8iIHZhbHVlPSJ0cnVlIiAvPgorICAgIDxvcHRpb24gbmFtZT0iR0VORVJBVEVfTk9fV0FSTklOR1MiIHZhbHVlPSJ0cnVlIiAvPgorICAgIDxvcHRpb24gbmFtZT0iREVQUkVDQVRJT04iIHZhbHVlPSJmYWxzZSIgLz4KKyAgICA8b3B0aW9uIG5hbWU9IkFERElUSU9OQUxfT1BUSU9OU19TVFJJTkciIHZhbHVlPSIiIC8+CisgICAgPG9wdGlvbiBuYW1lPSJNQVhJTVVNX0hFQVBfU0laRSIgdmFsdWU9IjEyOCIgLz4KKyAgPC9jb21wb25lbnQ+CisgIDxjb21wb25lbnQgbmFtZT0iRW50cnlQb2ludHNNYW5hZ2VyIj4KKyAgICA8ZW50cnlfcG9pbnRzIC8+CisgIDwvY29tcG9uZW50PgorICA8Y29tcG9uZW50IG5hbWU9IkV4cG9ydFRvSFRNTFNldHRpbmdzIj4KKyAgICA8b3B0aW9uIG5hbWU9IlBSSU5UX0xJTkVfTlVNQkVSUyIgdmFsdWU9ImZhbHNlIiAvPgorICAgIDxvcHRpb24gbmFtZT0iT1BFTl9JTl9CUk9XU0VSIiB2YWx1ZT0iZmFsc2UiIC8+CisgICAgPG9wdGlvbiBuYW1lPSJPVVRQVVRfRElSRUNUT1JZIiAvPgorICA8L2NvbXBvbmVudD4KKyAgPGNvbXBvbmVudCBuYW1lPSJHVUkgRGVzaWduZXIgY29tcG9uZW50IGxvYWRlciBmYWN0b3J5IiAvPgorICA8Y29tcG9uZW50IG5hbWU9Ikluc3BlY3Rpb25Qcm9qZWN0UHJvZmlsZU1hbmFnZXIiPgorICAgIDxvcHRpb24gbmFtZT0iUFJPSkVDVF9QUk9GSUxFIiB2YWx1ZT0iUHJvamVjdCBEZWZhdWx0IiAvPgorICAgIDxvcHRpb24gbmFtZT0iVVNFX1BST0pFQ1RfTEVWRUxfU0VUVElOR1MiIHZhbHVlPSJmYWxzZSIgLz4KKyAgICA8c2NvcGVzIC8+CisgICAgPHByb2ZpbGVzPgorICAgICAgPHByb2ZpbGUgdmVyc2lvbj0iMS4wIiBpc19sb2NrZWQ9ImZhbHNlIj4KKyAgICAgICAgPG9wdGlvbiBuYW1lPSJteU5hbWUiIHZhbHVlPSJQcm9qZWN0IERlZmF1bHQiIC8+CisgICAgICAgIDxvcHRpb24gbmFtZT0ibXlMb2NhbCIgdmFsdWU9ImZhbHNlIiAvPgorICAgICAgPC9wcm9maWxlPgorICAgIDwvcHJvZmlsZXM+CisgIDwvY29tcG9uZW50PgorICA8Y29tcG9uZW50IG5hbWU9IkphdmFjU2V0dGluZ3MiPgorICAgIDxvcHRpb24gbmFtZT0iREVCVUdHSU5HX0lORk8iIHZhbHVlPSJ0cnVlIiAvPgorICAgIDxvcHRpb24gbmFtZT0iR0VORVJBVEVfTk9fV0FSTklOR1MiIHZhbHVlPSJmYWxzZSIgLz4KKyAgICA8b3B0aW9uIG5hbWU9IkRFUFJFQ0FUSU9OIiB2YWx1ZT0idHJ1ZSIgLz4KKyAgICA8b3B0aW9uIG5hbWU9IkFERElUSU9OQUxfT1BUSU9OU19TVFJJTkciIHZhbHVlPSIiIC8+CisgICAgPG9wdGlvbiBuYW1lPSJNQVhJTVVNX0hFQVBfU0laRSIgdmFsdWU9IjEyOCIgLz4KKyAgPC9jb21wb25lbnQ+CisgIDxjb21wb25lbnQgbmFtZT0iSmF2YWRvY0dlbmVyYXRpb25NYW5hZ2VyIj4KKyAgICA8b3B0aW9uIG5hbWU9Ik9VVFBVVF9ESVJFQ1RPUlkiIC8+CisgICAgPG9wdGlvbiBuYW1lPSJPUFRJT05fU0NPUEUiIHZhbHVlPSJwcm90ZWN0ZWQiIC8+CisgICAgPG9wdGlvbiBuYW1lPSJPUFRJT05fSElFUkFSQ0hZIiB2YWx1ZT0idHJ1ZSIgLz4KKyAgICA8b3B0aW9uIG5hbWU9Ik9QVElPTl9OQVZJR0FUT1IiIHZhbHVlPSJ0cnVlIiAvPgorICAgIDxvcHRpb24gbmFtZT0iT1BUSU9OX0lOREVYIiB2YWx1ZT0idHJ1ZSIgLz4KKyAgICA8b3B0aW9uIG5hbWU9Ik9QVElPTl9TRVBBUkFURV9JTkRFWCIgdmFsdWU9InRydWUiIC8+CisgICAgPG9wdGlvbiBuYW1lPSJPUFRJT05fRE9DVU1FTlRfVEFHX1VTRSIgdmFsdWU9ImZhbHNlIiAvPgorICAgIDxvcHRpb24gbmFtZT0iT1BUSU9OX0RPQ1VNRU5UX1RBR19BVVRIT1IiIHZhbHVlPSJmYWxzZSIgLz4KKyAgICA8b3B0aW9uIG5hbWU9Ik9QVElPTl9ET0NVTUVOVF9UQUdfVkVSU0lPTiIgdmFsdWU9ImZhbHNlIiAvPgorICAgIDxvcHRpb24gbmFtZT0iT1BUSU9OX0RPQ1VNRU5UX1RBR19ERVBSRUNBVEVEIiB2YWx1ZT0idHJ1ZSIgLz4KKyAgICA8b3B0aW9uIG5hbWU9Ik9QVElPTl9ERVBSRUNBVEVEX0xJU1QiIHZhbHVlPSJ0cnVlIiAvPgorICAgIDxvcHRpb24gbmFtZT0iT1RIRVJfT1BUSU9OUyIgdmFsdWU9IiIgLz4KKyAgICA8b3B0aW9uIG5hbWU9IkhFQVBfU0laRSIgLz4KKyAgICA8b3B0aW9uIG5hbWU9IkxPQ0FMRSIgLz4KKyAgICA8b3B0aW9uIG5hbWU9Ik9QRU5fSU5fQlJPV1NFUiIgdmFsdWU9InRydWUiIC8+CisgIDwvY29tcG9uZW50PgorICA8Y29tcG9uZW50IG5hbWU9Ikppa2VzU2V0dGluZ3MiPgorICAgIDxvcHRpb24gbmFtZT0iSklLRVNfUEFUSCIgdmFsdWU9IiIgLz4KKyAgICA8b3B0aW9uIG5hbWU9IkRFQlVHR0lOR19JTkZPIiB2YWx1ZT0idHJ1ZSIgLz4KKyAgICA8b3B0aW9uIG5hbWU9IkRFUFJFQ0FUSU9OIiB2YWx1ZT0idHJ1ZSIgLz4KKyAgICA8b3B0aW9uIG5hbWU9IkdFTkVSQVRFX05PX1dBUk5JTkdTIiB2YWx1ZT0iZmFsc2UiIC8+CisgICAgPG9wdGlvbiBuYW1lPSJJU19FTUFDU19FUlJPUlNfTU9ERSIgdmFsdWU9InRydWUiIC8+CisgICAgPG9wdGlvbiBuYW1lPSJBRERJVElPTkFMX09QVElPTlNfU1RSSU5HIiB2YWx1ZT0iIiAvPgorICA8L2NvbXBvbmVudD4KKyAgPGNvbXBvbmVudCBuYW1lPSJMb2dDb25zb2xlUHJlZmVyZW5jZXMiPgorICAgIDxvcHRpb24gbmFtZT0iRklMVEVSX0VSUk9SUyIgdmFsdWU9ImZhbHNlIiAvPgorICAgIDxvcHRpb24gbmFtZT0iRklMVEVSX1dBUk5JTkdTIiB2YWx1ZT0iZmFsc2UiIC8+CisgICAgPG9wdGlvbiBuYW1lPSJGSUxURVJfSU5GTyIgdmFsdWU9InRydWUiIC8+CisgICAgPG9wdGlvbiBuYW1lPSJDVVNUT01fRklMVEVSIiAvPgorICA8L2NvbXBvbmVudD4KKyAgPGNvbXBvbmVudCBuYW1lPSJQYWxldHRlMiI+CisgICAgPGdyb3VwIG5hbWU9IlN3aW5nIj4KKyAgICAgIDxpdGVtIGNsYXNzPSJjb20uaW50ZWxsaWoudWlEZXNpZ25lci5IU3BhY2VyIiB0b29sdGlwLXRleHQ9Ikhvcml6b250YWwgU3BhY2VyIiBpY29uPSIvY29tL2ludGVsbGlqL3VpRGVzaWduZXIvaWNvbnMvaHNwYWNlci5wbmciIHJlbW92YWJsZT0iZmFsc2UiIGF1dG8tY3JlYXRlLWJpbmRpbmc9ImZhbHNlIiBjYW4tYXR0YWNoLWxhYmVsPSJmYWxzZSI+CisgICAgICAgIDxkZWZhdWx0LWNvbnN0cmFpbnRzIHZzaXplLXBvbGljeT0iMSIgaHNpemUtcG9saWN5PSI2IiBhbmNob3I9IjAiIGZpbGw9IjEiIC8+CisgICAgICA8L2l0ZW0+CisgICAgICA8aXRlbSBjbGFzcz0iY29tLmludGVsbGlqLnVpRGVzaWduZXIuVlNwYWNlciIgdG9vbHRpcC10ZXh0PSJWZXJ0aWNhbCBTcGFjZXIiIGljb249Ii9jb20vaW50ZWxsaWovdWlEZXNpZ25lci9pY29ucy92c3BhY2VyLnBuZyIgcmVtb3ZhYmxlPSJmYWxzZSIgYXV0by1jcmVhdGUtYmluZGluZz0iZmFsc2UiIGNhbi1hdHRhY2gtbGFiZWw9ImZhbHNlIj4KKyAgICAgICAgPGRlZmF1bHQtY29uc3RyYWludHMgdnNpemUtcG9saWN5PSI2IiBoc2l6ZS1wb2xpY3k9IjEiIGFuY2hvcj0iMCIgZmlsbD0iMiIgLz4KKyAgICAgIDwvaXRlbT4KKyAgICAgIDxpdGVtIGNsYXNzPSJqYXZheC5zd2luZy5KUGFuZWwiIGljb249Ii9jb20vaW50ZWxsaWovdWlEZXNpZ25lci9pY29ucy9wYW5lbC5wbmciIHJlbW92YWJsZT0iZmFsc2UiIGF1dG8tY3JlYXRlLWJpbmRpbmc9ImZhbHNlIiBjYW4tYXR0YWNoLWxhYmVsPSJmYWxzZSI+CisgICAgICAgIDxkZWZhdWx0LWNvbnN0cmFpbnRzIHZzaXplLXBvbGljeT0iMyIgaHNpemUtcG9saWN5PSIzIiBhbmNob3I9IjAiIGZpbGw9IjMiIC8+CisgICAgICA8L2l0ZW0+CisgICAgICA8aXRlbSBjbGFzcz0iamF2YXguc3dpbmcuSlNjcm9sbFBhbmUiIGljb249Ii9jb20vaW50ZWxsaWovdWlEZXNpZ25lci9pY29ucy9zY3JvbGxQYW5lLnBuZyIgcmVtb3ZhYmxlPSJmYWxzZSIgYXV0by1jcmVhdGUtYmluZGluZz0iZmFsc2UiIGNhbi1hdHRhY2gtbGFiZWw9InRydWUiPgorICAgICAgICA8ZGVmYXVsdC1jb25zdHJhaW50cyB2c2l6ZS1wb2xpY3k9IjciIGhzaXplLXBvbGljeT0iNyIgYW5jaG9yPSIwIiBmaWxsPSIzIiAvPgorICAgICAgPC9pdGVtPgorICAgICAgPGl0ZW0gY2xhc3M9ImphdmF4LnN3aW5nLkpCdXR0b24iIGljb249Ii9jb20vaW50ZWxsaWovdWlEZXNpZ25lci9pY29ucy9idXR0b24ucG5nIiByZW1vdmFibGU9ImZhbHNlIiBhdXRvLWNyZWF0ZS1iaW5kaW5nPSJ0cnVlIiBjYW4tYXR0YWNoLWxhYmVsPSJmYWxzZSI+CisgICAgICAgIDxkZWZhdWx0LWNvbnN0cmFpbnRzIHZzaXplLXBvbGljeT0iMCIgaHNpemUtcG9saWN5PSIzIiBhbmNob3I9IjAiIGZpbGw9IjEiIC8+CisgICAgICAgIDxpbml0aWFsLXZhbHVlcz4KKyAgICAgICAgICA8cHJvcGVydHkgbmFtZT0idGV4dCIgdmFsdWU9IkJ1dHRvbiIgLz4KKyAgICAgICAgPC9pbml0aWFsLXZhbHVlcz4KKyAgICAgIDwvaXRlbT4KKyAgICAgIDxpdGVtIGNsYXNzPSJqYXZheC5zd2luZy5KUmFkaW9CdXR0b24iIGljb249Ii9jb20vaW50ZWxsaWovdWlEZXNpZ25lci9pY29ucy9yYWRpb0J1dHRvbi5wbmciIHJlbW92YWJsZT0iZmFsc2UiIGF1dG8tY3JlYXRlLWJpbmRpbmc9InRydWUiIGNhbi1hdHRhY2gtbGFiZWw9ImZhbHNlIj4KKyAgICAgICAgPGRlZmF1bHQtY29uc3RyYWludHMgdnNpemUtcG9saWN5PSIwIiBoc2l6ZS1wb2xpY3k9IjMiIGFuY2hvcj0iOCIgZmlsbD0iMCIgLz4KKyAgICAgICAgPGluaXRpYWwtdmFsdWVzPgorICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ0ZXh0IiB2YWx1ZT0iUmFkaW9CdXR0b24iIC8+CisgICAgICAgIDwvaW5pdGlhbC12YWx1ZXM+CisgICAgICA8L2l0ZW0+CisgICAgICA8aXRlbSBjbGFzcz0iamF2YXguc3dpbmcuSkNoZWNrQm94IiBpY29uPSIvY29tL2ludGVsbGlqL3VpRGVzaWduZXIvaWNvbnMvY2hlY2tCb3gucG5nIiByZW1vdmFibGU9ImZhbHNlIiBhdXRvLWNyZWF0ZS1iaW5kaW5nPSJ0cnVlIiBjYW4tYXR0YWNoLWxhYmVsPSJmYWxzZSI+CisgICAgICAgIDxkZWZhdWx0LWNvbnN0cmFpbnRzIHZzaXplLXBvbGljeT0iMCIgaHNpemUtcG9saWN5PSIzIiBhbmNob3I9IjgiIGZpbGw9IjAiIC8+CisgICAgICAgIDxpbml0aWFsLXZhbHVlcz4KKyAgICAgICAgICA8cHJvcGVydHkgbmFtZT0idGV4dCIgdmFsdWU9IkNoZWNrQm94IiAvPgorICAgICAgICA8L2luaXRpYWwtdmFsdWVzPgorICAgICAgPC9pdGVtPgorICAgICAgPGl0ZW0gY2xhc3M9ImphdmF4LnN3aW5nLkpMYWJlbCIgaWNvbj0iL2NvbS9pbnRlbGxpai91aURlc2lnbmVyL2ljb25zL2xhYmVsLnBuZyIgcmVtb3ZhYmxlPSJmYWxzZSIgYXV0by1jcmVhdGUtYmluZGluZz0iZmFsc2UiIGNhbi1hdHRhY2gtbGFiZWw9ImZhbHNlIj4KKyAgICAgICAgPGRlZmF1bHQtY29uc3RyYWludHMgdnNpemUtcG9saWN5PSIwIiBoc2l6ZS1wb2xpY3k9IjAiIGFuY2hvcj0iOCIgZmlsbD0iMCIgLz4KKyAgICAgICAgPGluaXRpYWwtdmFsdWVzPgorICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ0ZXh0IiB2YWx1ZT0iTGFiZWwiIC8+CisgICAgICAgIDwvaW5pdGlhbC12YWx1ZXM+CisgICAgICA8L2l0ZW0+CisgICAgICA8aXRlbSBjbGFzcz0iamF2YXguc3dpbmcuSlRleHRGaWVsZCIgaWNvbj0iL2NvbS9pbnRlbGxpai91aURlc2lnbmVyL2ljb25zL3RleHRGaWVsZC5wbmciIHJlbW92YWJsZT0iZmFsc2UiIGF1dG8tY3JlYXRlLWJpbmRpbmc9InRydWUiIGNhbi1hdHRhY2gtbGFiZWw9InRydWUiPgorICAgICAgICA8ZGVmYXVsdC1jb25zdHJhaW50cyB2c2l6ZS1wb2xpY3k9IjAiIGhzaXplLXBvbGljeT0iNiIgYW5jaG9yPSI4IiBmaWxsPSIxIj4KKyAgICAgICAgICA8cHJlZmVycmVkLXNpemUgd2lkdGg9IjE1MCIgaGVpZ2h0PSItMSIgLz4KKyAgICAgICAgPC9kZWZhdWx0LWNvbnN0cmFpbnRzPgorICAgICAgPC9pdGVtPgorICAgICAgPGl0ZW0gY2xhc3M9ImphdmF4LnN3aW5nLkpQYXNzd29yZEZpZWxkIiBpY29uPSIvY29tL2ludGVsbGlqL3VpRGVzaWduZXIvaWNvbnMvcGFzc3dvcmRGaWVsZC5wbmciIHJlbW92YWJsZT0iZmFsc2UiIGF1dG8tY3JlYXRlLWJpbmRpbmc9InRydWUiIGNhbi1hdHRhY2gtbGFiZWw9InRydWUiPgorICAgICAgICA8ZGVmYXVsdC1jb25zdHJhaW50cyB2c2l6ZS1wb2xpY3k9IjAiIGhzaXplLXBvbGljeT0iNiIgYW5jaG9yPSI4IiBmaWxsPSIxIj4KKyAgICAgICAgICA8cHJlZmVycmVkLXNpemUgd2lkdGg9IjE1MCIgaGVpZ2h0PSItMSIgLz4KKyAgICAgICAgPC9kZWZhdWx0LWNvbnN0cmFpbnRzPgorICAgICAgPC9pdGVtPgorICAgICAgPGl0ZW0gY2xhc3M9ImphdmF4LnN3aW5nLkpGb3JtYXR0ZWRUZXh0RmllbGQiIGljb249Ii9jb20vaW50ZWxsaWovdWlEZXNpZ25lci9pY29ucy9mb3JtYXR0ZWRUZXh0RmllbGQucG5nIiByZW1vdmFibGU9ImZhbHNlIiBhdXRvLWNyZWF0ZS1iaW5kaW5nPSJ0cnVlIiBjYW4tYXR0YWNoLWxhYmVsPSJ0cnVlIj4KKyAgICAgICAgPGRlZmF1bHQtY29uc3RyYWludHMgdnNpemUtcG9saWN5PSIwIiBoc2l6ZS1wb2xpY3k9IjYiIGFuY2hvcj0iOCIgZmlsbD0iMSI+CisgICAgICAgICAgPHByZWZlcnJlZC1zaXplIHdpZHRoPSIxNTAiIGhlaWdodD0iLTEiIC8+CisgICAgICAgIDwvZGVmYXVsdC1jb25zdHJhaW50cz4KKyAgICAgIDwvaXRlbT4KKyAgICAgIDxpdGVtIGNsYXNzPSJqYXZheC5zd2luZy5KVGV4dEFyZWEiIGljb249Ii9jb20vaW50ZWxsaWovdWlEZXNpZ25lci9pY29ucy90ZXh0QXJlYS5wbmciIHJlbW92YWJsZT0iZmFsc2UiIGF1dG8tY3JlYXRlLWJpbmRpbmc9InRydWUiIGNhbi1hdHRhY2gtbGFiZWw9InRydWUiPgorICAgICAgICA8ZGVmYXVsdC1jb25zdHJhaW50cyB2c2l6ZS1wb2xpY3k9IjYiIGhzaXplLXBvbGljeT0iNiIgYW5jaG9yPSIwIiBmaWxsPSIzIj4KKyAgICAgICAgICA8cHJlZmVycmVkLXNpemUgd2lkdGg9IjE1MCIgaGVpZ2h0PSI1MCIgLz4KKyAgICAgICAgPC9kZWZhdWx0LWNvbnN0cmFpbnRzPgorICAgICAgPC9pdGVtPgorICAgICAgPGl0ZW0gY2xhc3M9ImphdmF4LnN3aW5nLkpUZXh0UGFuZSIgaWNvbj0iL2NvbS9pbnRlbGxpai91aURlc2lnbmVyL2ljb25zL3RleHRQYW5lLnBuZyIgcmVtb3ZhYmxlPSJmYWxzZSIgYXV0by1jcmVhdGUtYmluZGluZz0idHJ1ZSIgY2FuLWF0dGFjaC1sYWJlbD0idHJ1ZSI+CisgICAgICAgIDxkZWZhdWx0LWNvbnN0cmFpbnRzIHZzaXplLXBvbGljeT0iNiIgaHNpemUtcG9saWN5PSI2IiBhbmNob3I9IjAiIGZpbGw9IjMiPgorICAgICAgICAgIDxwcmVmZXJyZWQtc2l6ZSB3aWR0aD0iMTUwIiBoZWlnaHQ9IjUwIiAvPgorICAgICAgICA8L2RlZmF1bHQtY29uc3RyYWludHM+CisgICAgICA8L2l0ZW0+CisgICAgICA8aXRlbSBjbGFzcz0iamF2YXguc3dpbmcuSkVkaXRvclBhbmUiIGljb249Ii9jb20vaW50ZWxsaWovdWlEZXNpZ25lci9pY29ucy9lZGl0b3JQYW5lLnBuZyIgcmVtb3ZhYmxlPSJmYWxzZSIgYXV0by1jcmVhdGUtYmluZGluZz0idHJ1ZSIgY2FuLWF0dGFjaC1sYWJlbD0idHJ1ZSI+CisgICAgICAgIDxkZWZhdWx0LWNvbnN0cmFpbnRzIHZzaXplLXBvbGljeT0iNiIgaHNpemUtcG9saWN5PSI2IiBhbmNob3I9IjAiIGZpbGw9IjMiPgorICAgICAgICAgIDxwcmVmZXJyZWQtc2l6ZSB3aWR0aD0iMTUwIiBoZWlnaHQ9IjUwIiAvPgorICAgICAgICA8L2RlZmF1bHQtY29uc3RyYWludHM+CisgICAgICA8L2l0ZW0+CisgICAgICA8aXRlbSBjbGFzcz0iamF2YXguc3dpbmcuSkNvbWJvQm94IiBpY29uPSIvY29tL2ludGVsbGlqL3VpRGVzaWduZXIvaWNvbnMvY29tYm9Cb3gucG5nIiByZW1vdmFibGU9ImZhbHNlIiBhdXRvLWNyZWF0ZS1iaW5kaW5nPSJ0cnVlIiBjYW4tYXR0YWNoLWxhYmVsPSJ0cnVlIj4KKyAgICAgICAgPGRlZmF1bHQtY29uc3RyYWludHMgdnNpemUtcG9saWN5PSIwIiBoc2l6ZS1wb2xpY3k9IjIiIGFuY2hvcj0iOCIgZmlsbD0iMSIgLz4KKyAgICAgIDwvaXRlbT4KKyAgICAgIDxpdGVtIGNsYXNzPSJqYXZheC5zd2luZy5KVGFibGUiIGljb249Ii9jb20vaW50ZWxsaWovdWlEZXNpZ25lci9pY29ucy90YWJsZS5wbmciIHJlbW92YWJsZT0iZmFsc2UiIGF1dG8tY3JlYXRlLWJpbmRpbmc9InRydWUiIGNhbi1hdHRhY2gtbGFiZWw9ImZhbHNlIj4KKyAgICAgICAgPGRlZmF1bHQtY29uc3RyYWludHMgdnNpemUtcG9saWN5PSI2IiBoc2l6ZS1wb2xpY3k9IjYiIGFuY2hvcj0iMCIgZmlsbD0iMyI+CisgICAgICAgICAgPHByZWZlcnJlZC1zaXplIHdpZHRoPSIxNTAiIGhlaWdodD0iNTAiIC8+CisgICAgICAgIDwvZGVmYXVsdC1jb25zdHJhaW50cz4KKyAgICAgIDwvaXRlbT4KKyAgICAgIDxpdGVtIGNsYXNzPSJqYXZheC5zd2luZy5KTGlzdCIgaWNvbj0iL2NvbS9pbnRlbGxpai91aURlc2lnbmVyL2ljb25zL2xpc3QucG5nIiByZW1vdmFibGU9ImZhbHNlIiBhdXRvLWNyZWF0ZS1iaW5kaW5nPSJ0cnVlIiBjYW4tYXR0YWNoLWxhYmVsPSJmYWxzZSI+CisgICAgICAgIDxkZWZhdWx0LWNvbnN0cmFpbnRzIHZzaXplLXBvbGljeT0iNiIgaHNpemUtcG9saWN5PSIyIiBhbmNob3I9IjAiIGZpbGw9IjMiPgorICAgICAgICAgIDxwcmVmZXJyZWQtc2l6ZSB3aWR0aD0iMTUwIiBoZWlnaHQ9IjUwIiAvPgorICAgICAgICA8L2RlZmF1bHQtY29uc3RyYWludHM+CisgICAgICA8L2l0ZW0+CisgICAgICA8aXRlbSBjbGFzcz0iamF2YXguc3dpbmcuSlRyZWUiIGljb249Ii9jb20vaW50ZWxsaWovdWlEZXNpZ25lci9pY29ucy90cmVlLnBuZyIgcmVtb3ZhYmxlPSJmYWxzZSIgYXV0by1jcmVhdGUtYmluZGluZz0idHJ1ZSIgY2FuLWF0dGFjaC1sYWJlbD0iZmFsc2UiPgorICAgICAgICA8ZGVmYXVsdC1jb25zdHJhaW50cyB2c2l6ZS1wb2xpY3k9IjYiIGhzaXplLXBvbGljeT0iNiIgYW5jaG9yPSIwIiBmaWxsPSIzIj4KKyAgICAgICAgICA8cHJlZmVycmVkLXNpemUgd2lkdGg9IjE1MCIgaGVpZ2h0PSI1MCIgLz4KKyAgICAgICAgPC9kZWZhdWx0LWNvbnN0cmFpbnRzPgorICAgICAgPC9pdGVtPgorICAgICAgPGl0ZW0gY2xhc3M9ImphdmF4LnN3aW5nLkpUYWJiZWRQYW5lIiBpY29uPSIvY29tL2ludGVsbGlqL3VpRGVzaWduZXIvaWNvbnMvdGFiYmVkUGFuZS5wbmciIHJlbW92YWJsZT0iZmFsc2UiIGF1dG8tY3JlYXRlLWJpbmRpbmc9InRydWUiIGNhbi1hdHRhY2gtbGFiZWw9ImZhbHNlIj4KKyAgICAgICAgPGRlZmF1bHQtY29uc3RyYWludHMgdnNpemUtcG9saWN5PSIzIiBoc2l6ZS1wb2xpY3k9IjMiIGFuY2hvcj0iMCIgZmlsbD0iMyI+CisgICAgICAgICAgPHByZWZlcnJlZC1zaXplIHdpZHRoPSIyMDAiIGhlaWdodD0iMjAwIiAvPgorICAgICAgICA8L2RlZmF1bHQtY29uc3RyYWludHM+CisgICAgICA8L2l0ZW0+CisgICAgICA8aXRlbSBjbGFzcz0iamF2YXguc3dpbmcuSlNwbGl0UGFuZSIgaWNvbj0iL2NvbS9pbnRlbGxpai91aURlc2lnbmVyL2ljb25zL3NwbGl0UGFuZS5wbmciIHJlbW92YWJsZT0iZmFsc2UiIGF1dG8tY3JlYXRlLWJpbmRpbmc9ImZhbHNlIiBjYW4tYXR0YWNoLWxhYmVsPSJmYWxzZSI+CisgICAgICAgIDxkZWZhdWx0LWNvbnN0cmFpbnRzIHZzaXplLXBvbGljeT0iMyIgaHNpemUtcG9saWN5PSIzIiBhbmNob3I9IjAiIGZpbGw9IjMiPgorICAgICAgICAgIDxwcmVmZXJyZWQtc2l6ZSB3aWR0aD0iMjAwIiBoZWlnaHQ9IjIwMCIgLz4KKyAgICAgICAgPC9kZWZhdWx0LWNvbnN0cmFpbnRzPgorICAgICAgPC9pdGVtPgorICAgICAgPGl0ZW0gY2xhc3M9ImphdmF4LnN3aW5nLkpTcGlubmVyIiBpY29uPSIvY29tL2ludGVsbGlqL3VpRGVzaWduZXIvaWNvbnMvc3Bpbm5lci5wbmciIHJlbW92YWJsZT0iZmFsc2UiIGF1dG8tY3JlYXRlLWJpbmRpbmc9InRydWUiIGNhbi1hdHRhY2gtbGFiZWw9InRydWUiPgorICAgICAgICA8ZGVmYXVsdC1jb25zdHJhaW50cyB2c2l6ZS1wb2xpY3k9IjAiIGhzaXplLXBvbGljeT0iNiIgYW5jaG9yPSI4IiBmaWxsPSIxIiAvPgorICAgICAgPC9pdGVtPgorICAgICAgPGl0ZW0gY2xhc3M9ImphdmF4LnN3aW5nLkpTbGlkZXIiIGljb249Ii9jb20vaW50ZWxsaWovdWlEZXNpZ25lci9pY29ucy9zbGlkZXIucG5nIiByZW1vdmFibGU9ImZhbHNlIiBhdXRvLWNyZWF0ZS1iaW5kaW5nPSJ0cnVlIiBjYW4tYXR0YWNoLWxhYmVsPSJmYWxzZSI+CisgICAgICAgIDxkZWZhdWx0LWNvbnN0cmFpbnRzIHZzaXplLXBvbGljeT0iMCIgaHNpemUtcG9saWN5PSI2IiBhbmNob3I9IjgiIGZpbGw9IjEiIC8+CisgICAgICA8L2l0ZW0+CisgICAgICA8aXRlbSBjbGFzcz0iamF2YXguc3dpbmcuSlNlcGFyYXRvciIgaWNvbj0iL2NvbS9pbnRlbGxpai91aURlc2lnbmVyL2ljb25zL3NlcGFyYXRvci5wbmciIHJlbW92YWJsZT0iZmFsc2UiIGF1dG8tY3JlYXRlLWJpbmRpbmc9ImZhbHNlIiBjYW4tYXR0YWNoLWxhYmVsPSJmYWxzZSI+CisgICAgICAgIDxkZWZhdWx0LWNvbnN0cmFpbnRzIHZzaXplLXBvbGljeT0iNiIgaHNpemUtcG9saWN5PSI2IiBhbmNob3I9IjAiIGZpbGw9IjMiIC8+CisgICAgICA8L2l0ZW0+CisgICAgICA8aXRlbSBjbGFzcz0iamF2YXguc3dpbmcuSlByb2dyZXNzQmFyIiBpY29uPSIvY29tL2ludGVsbGlqL3VpRGVzaWduZXIvaWNvbnMvcHJvZ3Jlc3NiYXIucG5nIiByZW1vdmFibGU9ImZhbHNlIiBhdXRvLWNyZWF0ZS1iaW5kaW5nPSJ0cnVlIiBjYW4tYXR0YWNoLWxhYmVsPSJmYWxzZSI+CisgICAgICAgIDxkZWZhdWx0LWNvbnN0cmFpbnRzIHZzaXplLXBvbGljeT0iMCIgaHNpemUtcG9saWN5PSI2IiBhbmNob3I9IjAiIGZpbGw9IjEiIC8+CisgICAgICA8L2l0ZW0+CisgICAgICA8aXRlbSBjbGFzcz0iamF2YXguc3dpbmcuSlRvb2xCYXIiIGljb249Ii9jb20vaW50ZWxsaWovdWlEZXNpZ25lci9pY29ucy90b29sYmFyLnBuZyIgcmVtb3ZhYmxlPSJmYWxzZSIgYXV0by1jcmVhdGUtYmluZGluZz0iZmFsc2UiIGNhbi1hdHRhY2gtbGFiZWw9ImZhbHNlIj4KKyAgICAgICAgPGRlZmF1bHQtY29uc3RyYWludHMgdnNpemUtcG9saWN5PSIwIiBoc2l6ZS1wb2xpY3k9IjYiIGFuY2hvcj0iMCIgZmlsbD0iMSI+CisgICAgICAgICAgPHByZWZlcnJlZC1zaXplIHdpZHRoPSItMSIgaGVpZ2h0PSIyMCIgLz4KKyAgICAgICAgPC9kZWZhdWx0LWNvbnN0cmFpbnRzPgorICAgICAgPC9pdGVtPgorICAgICAgPGl0ZW0gY2xhc3M9ImphdmF4LnN3aW5nLkpUb29sQmFyJFNlcGFyYXRvciIgaWNvbj0iL2NvbS9pbnRlbGxpai91aURlc2lnbmVyL2ljb25zL3Rvb2xiYXJTZXBhcmF0b3IucG5nIiByZW1vdmFibGU9ImZhbHNlIiBhdXRvLWNyZWF0ZS1iaW5kaW5nPSJmYWxzZSIgY2FuLWF0dGFjaC1sYWJlbD0iZmFsc2UiPgorICAgICAgICA8ZGVmYXVsdC1jb25zdHJhaW50cyB2c2l6ZS1wb2xpY3k9IjAiIGhzaXplLXBvbGljeT0iMCIgYW5jaG9yPSIwIiBmaWxsPSIxIiAvPgorICAgICAgPC9pdGVtPgorICAgICAgPGl0ZW0gY2xhc3M9ImphdmF4LnN3aW5nLkpTY3JvbGxCYXIiIGljb249Ii9jb20vaW50ZWxsaWovdWlEZXNpZ25lci9pY29ucy9zY3JvbGxiYXIucG5nIiByZW1vdmFibGU9ImZhbHNlIiBhdXRvLWNyZWF0ZS1iaW5kaW5nPSJ0cnVlIiBjYW4tYXR0YWNoLWxhYmVsPSJmYWxzZSI+CisgICAgICAgIDxkZWZhdWx0LWNvbnN0cmFpbnRzIHZzaXplLXBvbGljeT0iNiIgaHNpemUtcG9saWN5PSIwIiBhbmNob3I9IjAiIGZpbGw9IjIiIC8+CisgICAgICA8L2l0ZW0+CisgICAgPC9ncm91cD4KKyAgPC9jb21wb25lbnQ+CisgIDxjb21wb25lbnQgbmFtZT0iUHJvamVjdE1vZHVsZU1hbmFnZXIiPgorICAgIDxtb2R1bGVzPgorICAgICAgPG1vZHVsZSBmaWxldXJsPSJmaWxlOi8vJFBST0pFQ1RfRElSJC90ZXN0MS90ZXN0MS5pbWwiIGZpbGVwYXRoPSIkUFJPSkVDVF9ESVIkL3Rlc3QxL3Rlc3QxLmltbCIgLz4KKyAgICAgIDxtb2R1bGUgZmlsZXVybD0iZmlsZTovLyRQUk9KRUNUX0RJUiQvdGVzdDIvdGVzdDIuaW1sIiBmaWxlcGF0aD0iJFBST0pFQ1RfRElSJC90ZXN0Mi90ZXN0Mi5pbWwiIC8+CisgICAgICA8bW9kdWxlIGZpbGV1cmw9ImZpbGU6Ly8kUFJPSkVDVF9ESVIkL3Rlc3QzL3Rlc3QzLmltbCIgZmlsZXBhdGg9IiRQUk9KRUNUX0RJUiQvdGVzdDMvdGVzdDMuaW1sIiAvPgorICAgIDwvbW9kdWxlcz4KKyAgPC9jb21wb25lbnQ+CisgIDxjb21wb25lbnQgbmFtZT0iUHJvamVjdFJvb3RNYW5hZ2VyIiB2ZXJzaW9uPSIyIiBhc3NlcnQta2V5d29yZD0idHJ1ZSIgamRrLTE1PSJ0cnVlIiBwcm9qZWN0LWpkay1uYW1lPSIxLjUiIHByb2plY3QtamRrLXR5cGU9IkphdmFTREsiPgorICAgIDxvdXRwdXQgdXJsPSJmaWxlOi8vJFBST0pFQ1RfRElSJC9jbGFzc2VzIiAvPgorICA8L2NvbXBvbmVudD4KKyAgPGNvbXBvbmVudCBuYW1lPSJQcm9qZWN0UnVuQ29uZmlndXJhdGlvbk1hbmFnZXIiIC8+CisgIDxjb21wb25lbnQgbmFtZT0iUm1pY1NldHRpbmdzIj4KKyAgICA8b3B0aW9uIG5hbWU9IklTX0VBTkFCTEVEIiB2YWx1ZT0iZmFsc2UiIC8+CisgICAgPG9wdGlvbiBuYW1lPSJERUJVR0dJTkdfSU5GTyIgdmFsdWU9InRydWUiIC8+CisgICAgPG9wdGlvbiBuYW1lPSJHRU5FUkFURV9OT19XQVJOSU5HUyIgdmFsdWU9ImZhbHNlIiAvPgorICAgIDxvcHRpb24gbmFtZT0iR0VORVJBVEVfSUlPUF9TVFVCUyIgdmFsdWU9ImZhbHNlIiAvPgorICAgIDxvcHRpb24gbmFtZT0iQURESVRJT05BTF9PUFRJT05TX1NUUklORyIgdmFsdWU9IiIgLz4KKyAgPC9jb21wb25lbnQ+CisgIDxjb21wb25lbnQgbmFtZT0iU3RhcnRlYW1WY3NBZGFwdGVyIiAvPgorICA8Y29tcG9uZW50IG5hbWU9IlZzc1ZjcyIgLz4KKyAgPGNvbXBvbmVudCBuYW1lPSJsaWJyYXJ5VGFibGUiIC8+CisgIDxjb21wb25lbnQgbmFtZT0idWlkZXNpZ25lci1jb25maWd1cmF0aW9uIj4KKyAgICA8b3B0aW9uIG5hbWU9IklOU1RSVU1FTlRfQ0xBU1NFUyIgdmFsdWU9InRydWUiIC8+CisgICAgPG9wdGlvbiBuYW1lPSJDT1BZX0ZPUk1TX1JVTlRJTUVfVE9fT1VUUFVUIiB2YWx1ZT0idHJ1ZSIgLz4KKyAgICA8b3B0aW9uIG5hbWU9IkRFRkFVTFRfTEFZT1VUX01BTkFHRVIiIHZhbHVlPSJHcmlkTGF5b3V0TWFuYWdlciIgLz4KKyAgPC9jb21wb25lbnQ+CisgIDxVc2VkUGF0aE1hY3JvcyAvPgorPC9wcm9qZWN0PgorCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvbmF2aWdhdGlvbi9hbGV4UHJvamVjdC90ZXN0MS9zcmMvY29tL3Rlc3QvVGVzdEkuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9uYXZpZ2F0aW9uL2FsZXhQcm9qZWN0L3Rlc3QxL3NyYy9jb20vdGVzdC9UZXN0SS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjExYjY4NTcKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvbmF2aWdhdGlvbi9hbGV4UHJvamVjdC90ZXN0MS9zcmMvY29tL3Rlc3QvVGVzdEkuamF2YQpAQCAtMCwwICsxLDEyIEBACitwYWNrYWdlIGNvbS50ZXN0OworCisvKioKKyAqIENyZWF0ZWQgYnkgSW50ZWxsaUogSURFQS4KKyAqIFVzZXI6IGNkcgorICogRGF0ZTogQXVnIDE0LCAyMDA2CisgKiBUaW1lOiAzOjM1OjE4IFBNCisgKiBUbyBjaGFuZ2UgdGhpcyB0ZW1wbGF0ZSB1c2UgRmlsZSB8IFNldHRpbmdzIHwgRmlsZSBUZW1wbGF0ZXMuCisgKi8KK3B1YmxpYyBpbnRlcmZhY2UgVGVzdEkgey8vampqa2poIGtsamggbGsKKyAgICB2b2lkIHRlc3QoLyogKi8pOworfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L25hdmlnYXRpb24vYWxleFByb2plY3QvdGVzdDEvc3JjL2NvbS90ZXN0L1Rlc3RJSW1wbDEuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9uYXZpZ2F0aW9uL2FsZXhQcm9qZWN0L3Rlc3QxL3NyYy9jb20vdGVzdC9UZXN0SUltcGwxLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDA2YjE2MwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9uYXZpZ2F0aW9uL2FsZXhQcm9qZWN0L3Rlc3QxL3NyYy9jb20vdGVzdC9UZXN0SUltcGwxLmphdmEKQEAgLTAsMCArMSwxNCBAQAorcGFja2FnZSBjb20udGVzdDsKKworLyoqCisgKiBDcmVhdGVkIGJ5IEludGVsbGlKIElERUEuCisgKiBVc2VyOiBjZHIKKyAqIERhdGU6IEF1ZyAxNCwgMjAwNgorICogVGltZTogMzozNTo1MiBQTQorICogVG8gY2hhbmdlIHRoaXMgdGVtcGxhdGUgdXNlIEZpbGUgfCBTZXR0aW5ncyB8IEZpbGUgVGVtcGxhdGVzLgorICovCitwdWJsaWMgY2xhc3MgVGVzdElJbXBsMSBpbXBsZW1lbnRzIFRlc3RJIHsKKyAgICBwdWJsaWMgdm9pZCB0ZXN0KCkgeworICAgICAgICAvL1RvIGNoYW5nZSBib2R5IG9mIGltcGxlbWVudGVkIG1ldGhvZHMgdXNlIEZpbGUgfCBTZXR0aW5ncyB8IEZpbGUgVGVtcGxhdGVzLgorICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9uYXZpZ2F0aW9uL2FsZXhQcm9qZWN0L3Rlc3QxL3NyYy9jb20vdGVzdC9UZXN0SUltcGwyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvbmF2aWdhdGlvbi9hbGV4UHJvamVjdC90ZXN0MS9zcmMvY29tL3Rlc3QvVGVzdElJbXBsMi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZkMjIxYzkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvbmF2aWdhdGlvbi9hbGV4UHJvamVjdC90ZXN0MS9zcmMvY29tL3Rlc3QvVGVzdElJbXBsMi5qYXZhCkBAIC0wLDAgKzEsMTQgQEAKK3BhY2thZ2UgY29tLnRlc3Q7CisKKy8qKgorICogQ3JlYXRlZCBieSBJbnRlbGxpSiBJREVBLgorICogVXNlcjogY2RyCisgKiBEYXRlOiBBdWcgMTQsIDIwMDYKKyAqIFRpbWU6IDM6MzY6MDMgUE0KKyAqIFRvIGNoYW5nZSB0aGlzIHRlbXBsYXRlIHVzZSBGaWxlIHwgU2V0dGluZ3MgfCBGaWxlIFRlbXBsYXRlcy4KKyAqLworcHVibGljIGNsYXNzIFRlc3RJSW1wbDIgaW1wbGVtZW50cyBUZXN0SSB7CisgICAgcHVibGljIHZvaWQgdGVzdCgpIHsKKyAgICAgICAgLy9UbyBjaGFuZ2UgYm9keSBvZiBpbXBsZW1lbnRlZCBtZXRob2RzIHVzZSBGaWxlIHwgU2V0dGluZ3MgfCBGaWxlIFRlbXBsYXRlcy4KKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvbmF2aWdhdGlvbi9hbGV4UHJvamVjdC90ZXN0MS90ZXN0MS5pbWwgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvbmF2aWdhdGlvbi9hbGV4UHJvamVjdC90ZXN0MS90ZXN0MS5pbWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWMzYTBhNgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9uYXZpZ2F0aW9uL2FsZXhQcm9qZWN0L3Rlc3QxL3Rlc3QxLmltbApAQCAtMCwwICsxLDE0IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPG1vZHVsZSB2ZXJzaW9uPSI0IiByZWxhdGl2ZVBhdGhzPSJ0cnVlIiB0eXBlPSJKQVZBX01PRFVMRSI+CisgIDxjb21wb25lbnQgbmFtZT0iTW9kdWxlUm9vdE1hbmFnZXIiIC8+CisgIDxjb21wb25lbnQgbmFtZT0iTmV3TW9kdWxlUm9vdE1hbmFnZXIiIGluaGVyaXQtY29tcGlsZXItb3V0cHV0PSJ0cnVlIj4KKyAgICA8ZXhjbHVkZS1vdXRwdXQgLz4KKyAgICA8Y29udGVudCB1cmw9ImZpbGU6Ly8kTU9EVUxFX0RJUiQiPgorICAgICAgPHNvdXJjZUZvbGRlciB1cmw9ImZpbGU6Ly8kTU9EVUxFX0RJUiQvc3JjIiBpc1Rlc3RTb3VyY2U9ImZhbHNlIiAvPgorICAgIDwvY29udGVudD4KKyAgICA8b3JkZXJFbnRyeSB0eXBlPSJpbmhlcml0ZWRKZGsiIC8+CisgICAgPG9yZGVyRW50cnkgdHlwZT0ic291cmNlRm9sZGVyIiBmb3JUZXN0cz0iZmFsc2UiIC8+CisgICAgPG9yZGVyRW50cnlQcm9wZXJ0aWVzIC8+CisgIDwvY29tcG9uZW50PgorPC9tb2R1bGU+CisKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9uYXZpZ2F0aW9uL2FsZXhQcm9qZWN0L3Rlc3QyL3NyYy9jb20vdGVzdC9UZXN0SS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L25hdmlnYXRpb24vYWxleFByb2plY3QvdGVzdDIvc3JjL2NvbS90ZXN0L1Rlc3RJLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2IyMmI4MgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9uYXZpZ2F0aW9uL2FsZXhQcm9qZWN0L3Rlc3QyL3NyYy9jb20vdGVzdC9UZXN0SS5qYXZhCkBAIC0wLDAgKzEsMTEgQEAKK3BhY2thZ2UgY29tLnRlc3Q7CisKKy8qKgorICogQ3JlYXRlZCBieSBJbnRlbGxpSiBJREVBLgorICogVXNlcjogY2RyCisgKiBEYXRlOiBBdWcgMTQsIDIwMDYKKyAqIFRpbWU6IDM6MzU6MTEgUE0KKyAqIFRvIGNoYW5nZSB0aGlzIHRlbXBsYXRlIHVzZSBGaWxlIHwgU2V0dGluZ3MgfCBGaWxlIFRlbXBsYXRlcy4KKyAqLworcHVibGljIGludGVyZmFjZSBUZXN0SSB7Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvbmF2aWdhdGlvbi9hbGV4UHJvamVjdC90ZXN0Mi9zcmMvY29tL3Rlc3QvVGVzdElJbXBsMS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L25hdmlnYXRpb24vYWxleFByb2plY3QvdGVzdDIvc3JjL2NvbS90ZXN0L1Rlc3RJSW1wbDEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ODYxN2ZjCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L25hdmlnYXRpb24vYWxleFByb2plY3QvdGVzdDIvc3JjL2NvbS90ZXN0L1Rlc3RJSW1wbDEuamF2YQpAQCAtMCwwICsxLDExIEBACitwYWNrYWdlIGNvbS50ZXN0OworCisvKioKKyAqIENyZWF0ZWQgYnkgSW50ZWxsaUogSURFQS4KKyAqIFVzZXI6IGNkcgorICogRGF0ZTogQXVnIDE0LCAyMDA2CisgKiBUaW1lOiAzOjM2OjIyIFBNCisgKiBUbyBjaGFuZ2UgdGhpcyB0ZW1wbGF0ZSB1c2UgRmlsZSB8IFNldHRpbmdzIHwgRmlsZSBUZW1wbGF0ZXMuCisgKi8KK3B1YmxpYyBjbGFzcyBUZXN0SUltcGwxIGltcGxlbWVudHMgVGVzdEkgeworfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L25hdmlnYXRpb24vYWxleFByb2plY3QvdGVzdDIvc3JjL2NvbS90ZXN0L1Rlc3RJSW1wbDMuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9uYXZpZ2F0aW9uL2FsZXhQcm9qZWN0L3Rlc3QyL3NyYy9jb20vdGVzdC9UZXN0SUltcGwzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2FlNzZjOAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9uYXZpZ2F0aW9uL2FsZXhQcm9qZWN0L3Rlc3QyL3NyYy9jb20vdGVzdC9UZXN0SUltcGwzLmphdmEKQEAgLTAsMCArMSwxMSBAQAorcGFja2FnZSBjb20udGVzdDsKKworLyoqCisgKiBDcmVhdGVkIGJ5IEludGVsbGlKIElERUEuCisgKiBVc2VyOiBjZHIKKyAqIERhdGU6IEF1ZyAxNCwgMjAwNgorICogVGltZTogMzozNjoyOCBQTQorICogVG8gY2hhbmdlIHRoaXMgdGVtcGxhdGUgdXNlIEZpbGUgfCBTZXR0aW5ncyB8IEZpbGUgVGVtcGxhdGVzLgorICovCitwdWJsaWMgY2xhc3MgVGVzdElJbXBsMyBpbXBsZW1lbnRzIFRlc3RJIHsKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9uYXZpZ2F0aW9uL2FsZXhQcm9qZWN0L3Rlc3QyL3Rlc3QyLmltbCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9uYXZpZ2F0aW9uL2FsZXhQcm9qZWN0L3Rlc3QyL3Rlc3QyLmltbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YzNhMGE2Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L25hdmlnYXRpb24vYWxleFByb2plY3QvdGVzdDIvdGVzdDIuaW1sCkBAIC0wLDAgKzEsMTQgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8bW9kdWxlIHZlcnNpb249IjQiIHJlbGF0aXZlUGF0aHM9InRydWUiIHR5cGU9IkpBVkFfTU9EVUxFIj4KKyAgPGNvbXBvbmVudCBuYW1lPSJNb2R1bGVSb290TWFuYWdlciIgLz4KKyAgPGNvbXBvbmVudCBuYW1lPSJOZXdNb2R1bGVSb290TWFuYWdlciIgaW5oZXJpdC1jb21waWxlci1vdXRwdXQ9InRydWUiPgorICAgIDxleGNsdWRlLW91dHB1dCAvPgorICAgIDxjb250ZW50IHVybD0iZmlsZTovLyRNT0RVTEVfRElSJCI+CisgICAgICA8c291cmNlRm9sZGVyIHVybD0iZmlsZTovLyRNT0RVTEVfRElSJC9zcmMiIGlzVGVzdFNvdXJjZT0iZmFsc2UiIC8+CisgICAgPC9jb250ZW50PgorICAgIDxvcmRlckVudHJ5IHR5cGU9ImluaGVyaXRlZEpkayIgLz4KKyAgICA8b3JkZXJFbnRyeSB0eXBlPSJzb3VyY2VGb2xkZXIiIGZvclRlc3RzPSJmYWxzZSIgLz4KKyAgICA8b3JkZXJFbnRyeVByb3BlcnRpZXMgLz4KKyAgPC9jb21wb25lbnQ+Cis8L21vZHVsZT4KKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L25hdmlnYXRpb24vYWxleFByb2plY3QvdGVzdDMvc3JjL2NvbS90ZXN0L1Rlc3RJLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvbmF2aWdhdGlvbi9hbGV4UHJvamVjdC90ZXN0My9zcmMvY29tL3Rlc3QvVGVzdEkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mM2Q0M2UwCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L25hdmlnYXRpb24vYWxleFByb2plY3QvdGVzdDMvc3JjL2NvbS90ZXN0L1Rlc3RJLmphdmEKQEAgLTAsMCArMSwxMSBAQAorcGFja2FnZSBjb20udGVzdDsKKworLyoqCisgKiBDcmVhdGVkIGJ5IEludGVsbGlKIElERUEuCisgKiBVc2VyOiBjZHIKKyAqIERhdGU6IEF1ZyAxNCwgMjAwNgorICogVGltZTogMzozNTowMyBQTQorICogVG8gY2hhbmdlIHRoaXMgdGVtcGxhdGUgdXNlIEZpbGUgfCBTZXR0aW5ncyB8IEZpbGUgVGVtcGxhdGVzLgorICovCitwdWJsaWMgaW50ZXJmYWNlIFRlc3RJIHsKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9uYXZpZ2F0aW9uL2FsZXhQcm9qZWN0L3Rlc3QzL3NyYy9jb20vdGVzdC9UZXN0SUltcGwxLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvbmF2aWdhdGlvbi9hbGV4UHJvamVjdC90ZXN0My9zcmMvY29tL3Rlc3QvVGVzdElJbXBsMS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU2ZTVkODQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvbmF2aWdhdGlvbi9hbGV4UHJvamVjdC90ZXN0My9zcmMvY29tL3Rlc3QvVGVzdElJbXBsMS5qYXZhCkBAIC0wLDAgKzEsMTEgQEAKK3BhY2thZ2UgY29tLnRlc3Q7CisKKy8qKgorICogQ3JlYXRlZCBieSBJbnRlbGxpSiBJREVBLgorICogVXNlcjogY2RyCisgKiBEYXRlOiBBdWcgMTQsIDIwMDYKKyAqIFRpbWU6IDM6MzY6MzYgUE0KKyAqIFRvIGNoYW5nZSB0aGlzIHRlbXBsYXRlIHVzZSBGaWxlIHwgU2V0dGluZ3MgfCBGaWxlIFRlbXBsYXRlcy4KKyAqLworcHVibGljIGNsYXNzIFRlc3RJSW1wbDEgaW1wbGVtZW50cyBUZXN0SSB7Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvbmF2aWdhdGlvbi9hbGV4UHJvamVjdC90ZXN0My90ZXN0My5pbWwgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvbmF2aWdhdGlvbi9hbGV4UHJvamVjdC90ZXN0My90ZXN0My5pbWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWMzYTBhNgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9uYXZpZ2F0aW9uL2FsZXhQcm9qZWN0L3Rlc3QzL3Rlc3QzLmltbApAQCAtMCwwICsxLDE0IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPG1vZHVsZSB2ZXJzaW9uPSI0IiByZWxhdGl2ZVBhdGhzPSJ0cnVlIiB0eXBlPSJKQVZBX01PRFVMRSI+CisgIDxjb21wb25lbnQgbmFtZT0iTW9kdWxlUm9vdE1hbmFnZXIiIC8+CisgIDxjb21wb25lbnQgbmFtZT0iTmV3TW9kdWxlUm9vdE1hbmFnZXIiIGluaGVyaXQtY29tcGlsZXItb3V0cHV0PSJ0cnVlIj4KKyAgICA8ZXhjbHVkZS1vdXRwdXQgLz4KKyAgICA8Y29udGVudCB1cmw9ImZpbGU6Ly8kTU9EVUxFX0RJUiQiPgorICAgICAgPHNvdXJjZUZvbGRlciB1cmw9ImZpbGU6Ly8kTU9EVUxFX0RJUiQvc3JjIiBpc1Rlc3RTb3VyY2U9ImZhbHNlIiAvPgorICAgIDwvY29udGVudD4KKyAgICA8b3JkZXJFbnRyeSB0eXBlPSJpbmhlcml0ZWRKZGsiIC8+CisgICAgPG9yZGVyRW50cnkgdHlwZT0ic291cmNlRm9sZGVyIiBmb3JUZXN0cz0iZmFsc2UiIC8+CisgICAgPG9yZGVyRW50cnlQcm9wZXJ0aWVzIC8+CisgIDwvY29tcG9uZW50PgorPC9tb2R1bGU+CisKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9udWxsaXR5aW5mZXJyZXIvYWZ0ZXJBc3NlcnRQYXJhbU5vdE51bGwuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9udWxsaXR5aW5mZXJyZXIvYWZ0ZXJBc3NlcnRQYXJhbU5vdE51bGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNDZhMGJlCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L251bGxpdHlpbmZlcnJlci9hZnRlckFzc2VydFBhcmFtTm90TnVsbC5qYXZhCkBAIC0wLDAgKzEsMTQgQEAKK2ltcG9ydCBvcmcuamV0YnJhaW5zLmFubm90YXRpb25zLk5vdE51bGw7CisKK2NsYXNzIFRlc3QgeworICBATm90TnVsbAorICBwdWJsaWMgU3RyaW5nIG5vTnVsbChATm90TnVsbCBTdHJpbmcgdGV4dCkgeworICAgIGFzc2VydCB0ZXh0ICE9IG51bGw7CisgICAgcmV0dXJuICIiOworICB9CisKKyAgcHJpdmF0ZSB2b2lkIGZvbygpIHsKKyAgICBATm90TnVsbCBTdHJpbmcgc3RyID0gIiI7CisgICAgYXNzZXJ0IHN0ciAhPSBudWxsOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L251bGxpdHlpbmZlcnJlci9hZnRlckNvbmRpdGlvbmFsUmV0dXJuTm90TnVsbC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L251bGxpdHlpbmZlcnJlci9hZnRlckNvbmRpdGlvbmFsUmV0dXJuTm90TnVsbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVhODllNDcKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvbnVsbGl0eWluZmVycmVyL2FmdGVyQ29uZGl0aW9uYWxSZXR1cm5Ob3ROdWxsLmphdmEKQEAgLTAsMCArMSw5IEBACitpbXBvcnQgb3JnLmpldGJyYWlucy5hbm5vdGF0aW9ucy5Ob3ROdWxsOworaW1wb3J0IG9yZy5qZXRicmFpbnMuYW5ub3RhdGlvbnMuTnVsbGFibGU7CisKK2NsYXNzIFRlc3QgeworICAgIEBOb3ROdWxsCisgICAgcHVibGljICBTdHJpbmcgbm9OdWxsKCBATnVsbGFibGUgU3RyaW5nIHRleHQpIHsKKyAgICAgICAgcmV0dXJuIHRleHQgPT0gbnVsbCA/ICIiIDogdGV4dDsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L251bGxpdHlpbmZlcnJlci9hZnRlckZpZWxkc0Fzc2lnbm1lbnQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9udWxsaXR5aW5mZXJyZXIvYWZ0ZXJGaWVsZHNBc3NpZ25tZW50LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTA3NDFhZQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9udWxsaXR5aW5mZXJyZXIvYWZ0ZXJGaWVsZHNBc3NpZ25tZW50LmphdmEKQEAgLTAsMCArMSw1OCBAQAoraW1wb3J0IG9yZy5qZXRicmFpbnMuYW5ub3RhdGlvbnMuKjsKKworY2xhc3MgVGVzdCB7CisgIEBOb3ROdWxsCisgIFN0cmluZyBteUZvbyA9ICIiOworCisgIEBOdWxsYWJsZQorICBTdHJpbmcgbXlGb28xID0gbnVsbDsKKworICBATm90TnVsbAorICBTdHJpbmcgbXlGb28yID0gZm9vMigpOworICBATm90TnVsbCBTdHJpbmcgZm9vMigpIHsgcmV0dXJuICIiO30KKworICBATnVsbGFibGUKKyAgU3RyaW5nIG15Rm9vMyA9IGZvbzMoKTsKKyAgQE51bGxhYmxlIFN0cmluZyBmb28zKCkgeyByZXR1cm4gbnVsbDt9CisKKyAgU3RyaW5nIG15Rm9vNDsKKyAgdm9pZCBzZXRGb280KCkgeworICAgIG15Rm9vNCA9ICIiOworICB9CisKKyAgQE5vdE51bGwKKyAgZmluYWwgU3RyaW5nIG15Rm9vNTsKKyAgQE51bGxhYmxlCisgIGZpbmFsIFN0cmluZyBteUZvbzY7CisgIEBOb3ROdWxsCisgIGZpbmFsIFN0cmluZyBteUZvbzc7CisgIEBOdWxsYWJsZQorICBmaW5hbCBTdHJpbmcgbXlGb284OworICBmaW5hbCBTdHJpbmcgbXlGb285OworICBATnVsbGFibGUKKyAgZmluYWwgU3RyaW5nIG15Rm9vMTA7CisKKyAgZmluYWwgU3RyaW5nIG15Rm9vMTEgPSAiIjsKKyAgQE5vdE51bGwKKyAgZmluYWwgU3RyaW5nIG15Rm9vMTI7CisgIEBOdWxsYWJsZQorICBmaW5hbCBTdHJpbmcgbXlGb28xMyA9IG51bGw7CisKKyAgLyoqCisgICAqIHtAbGluayAjbXlGb282fQorICAgKi8KKyAgVGVzdChATm90TnVsbCBTdHJpbmcgcGFyYW0sIEBOdWxsYWJsZSBTdHJpbmcgcGFyYW1OdWxsYWJsZSwgU3RyaW5nIHNpbXBsZVBhcmFtKSB7CisgICAgbXlGb281ID0gIiI7CisgICAgbXlGb282ID0gbnVsbDsKKyAgICBteUZvbzcgPSBwYXJhbTsKKyAgICBteUZvbzggPSBwYXJhbU51bGxhYmxlOworICAgIG15Rm9vOSA9IHNpbXBsZVBhcmFtOworICAgIG15Rm9vMTAgPSBmb28xMChmYWxzZSk7CisgICAgbXlGb28xMiA9ICIiOworICB9CisKKyAgQE51bGxhYmxlCisgIFN0cmluZyBmb28xMChib29sZWFuIGZsYWcpIHsKKyAgICByZXR1cm4gZmxhZyA/IGZvbzIoKSA6IGZvbzMoKTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9udWxsaXR5aW5mZXJyZXIvYWZ0ZXJGb3JFYWNoUGFyYW1ldGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvbnVsbGl0eWluZmVycmVyL2FmdGVyRm9yRWFjaFBhcmFtZXRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI4NjM0NjcKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvbnVsbGl0eWluZmVycmVyL2FmdGVyRm9yRWFjaFBhcmFtZXRlci5qYXZhCkBAIC0wLDAgKzEsMTAgQEAKK2ltcG9ydCBvcmcuamV0YnJhaW5zLmFubm90YXRpb25zLk5vdE51bGw7CisKK2ltcG9ydCBqYXZhLnV0aWwuKjsKK2NsYXNzIFRlc3QgeworICAgdm9pZCBmb28oQE5vdE51bGwgTGlzdCByZXF1ZXN0cyl7CisgICAgICAgIGZvciAoQE5vdE51bGwgT2JqZWN0IHJlcXVlc3QgOiByZXF1ZXN0cykgeworICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihyZXF1ZXN0LnRvU3RyaW5nKCkpOworICAgICAgICB9CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9udWxsaXR5aW5mZXJyZXIvYWZ0ZXJNZXRob2RSZXR1cm5WYWx1ZS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L251bGxpdHlpbmZlcnJlci9hZnRlck1ldGhvZFJldHVyblZhbHVlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmFlMGI1YgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9udWxsaXR5aW5mZXJyZXIvYWZ0ZXJNZXRob2RSZXR1cm5WYWx1ZS5qYXZhCkBAIC0wLDAgKzEsODQgQEAKK2ltcG9ydCBvcmcuamV0YnJhaW5zLmFubm90YXRpb25zLio7CisKK2NsYXNzIFRlc3QgeworICBATnVsbGFibGUKKyAgU3RyaW5nIGZvbzEoKSB7CisgICAgcmV0dXJuIG51bGw7CisgIH0KKworICBATm90TnVsbAorICBTdHJpbmcgZm9vMigpIHsKKyAgICByZXR1cm4gIiI7CisgIH0KKworICBTdHJpbmcgZm9vMyhTdHJpbmcgcykgeworICAgIHJldHVybiBzOworICB9CisKKyAgU3RyaW5nIGZvbzQoQE5vdE51bGwgU3RyaW5nIHMpIHsKKyAgICByZXR1cm4gcy5zdWJzdHJpbmcoMCk7CisgIH0KKworICBATm90TnVsbAorICBJbnRlZ2VyIGZvbzUoSW50ZWdlciBpKSB7CisgICAgcmV0dXJuIGkrKzsKKyAgfQorCisgIEBOb3ROdWxsCisgIEludGVnZXIgZm9vNihJbnRlZ2VyIGkpIHsKKyAgICBpZiAoaSA9PSAwKSByZXR1cm4gMTsKKyAgICByZXR1cm4gaSAqIGZvbzYoaS0tKTsKKyAgfQorCisgIEBOdWxsYWJsZQorICBJbnRlZ2VyIGZvbzcoYm9vbGVhbiBmbGFnKSB7CisgICAgcmV0dXJuIGZsYWcgPyBudWxsIDogMTsKKyAgfQorCisgIEBOdWxsYWJsZQorICBJbnRlZ2VyIGZvbzgoYm9vbGVhbiBmbGFnKSB7CisgICAgaWYgKGZsYWcpIHsKKyAgICAgIHJldHVybiBudWxsOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgIHJldHVybiAxOworICAgIH0KKyAgfQorCisgIEBOdWxsYWJsZQorICBTdHJpbmcgYmFyOSgpIHsKKyAgICByZXR1cm4gZm9vMygiIik7CisgIH0KKworICBATnVsbGFibGUKKyAgU3RyaW5nIGZvbzkoKSB7CisgICAgcmV0dXJuIGJhcjkoKTsKKyAgfQorCisKKyAgQE51bGxhYmxlCisgIFN0cmluZyBiYXIxMCgpIHsKKyAgICByZXR1cm4gZm9vMygiIik7CisgIH0KKworICBATm90TnVsbAorICBTdHJpbmcgYmFyMTAxKCkgeworICAgIHJldHVybiBmb28zKCIiKTsKKyAgfQorCisgIEBOdWxsYWJsZQorICBTdHJpbmcgZm9vMTAoYm9vbGVhbiBmbGFnKSB7CisgICAgcmV0dXJuIGZsYWcgPyBiYXIxMCgpIDogYmFyMTAxKCk7CisgIH0KKworICBATm90TnVsbAorICBTdHJpbmcgZm9vMTEoKSB7CisgICAgY2xhc3MgRm9veworICAgICAgQE51bGxhYmxlCisgICAgICBTdHJpbmcgbWVzcygpIHsKKyAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICB9CisgICAgfQorICAgIHJldHVybiAiIjsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9udWxsaXR5aW5mZXJyZXIvYWZ0ZXJQYXJhbWV0ZXJDaGVja2VkRm9yTnVsbC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L251bGxpdHlpbmZlcnJlci9hZnRlclBhcmFtZXRlckNoZWNrZWRGb3JOdWxsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGNhMjhkOAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9udWxsaXR5aW5mZXJyZXIvYWZ0ZXJQYXJhbWV0ZXJDaGVja2VkRm9yTnVsbC5qYXZhCkBAIC0wLDAgKzEsMzcgQEAKK2ltcG9ydCBvcmcuamV0YnJhaW5zLmFubm90YXRpb25zLio7CisKK2NsYXNzIFRlc3QgeworICB2b2lkIGJhcihATnVsbGFibGUgU3RyaW5nIHN0cikgeworICAgIGlmIChzdHIgPT0gbnVsbCkgeworICAgICAgZm9vKHN0cik7CisgICAgfQorICB9CisKKyAgU3RyaW5nIGZvbyhTdHJpbmcgc3RyKSB7CisgICAgcmV0dXJuIHN0cjsKKyAgfQorCisgIEBOdWxsYWJsZQorICBTdHJpbmcgZm9vMShATnVsbGFibGUgU3RyaW5nIHN0cikgeworICAgIGlmIChzdHIgPT0gbnVsbCk7CisgICAgcmV0dXJuIChzdHIpOworICB9CisKKyAgQE5vdE51bGwKKyAgU3RyaW5nIGZvbzIoQE51bGxhYmxlIFN0cmluZyBzdHIpIHsKKyAgICBpZiAoc3RyID09IG51bGwpOworICAgIHJldHVybiAoKFN0cmluZylzdHIpOworICB9CisKKyAgQE5vdE51bGwKKyAgU3RyaW5nIGZyYW0oQE51bGxhYmxlIFN0cmluZyBzdHIsIGJvb2xlYW4gYikgeworICAgIGlmIChzdHIgIT0gbnVsbCkgeworICAgICAgcmV0dXJuIGIgPyBzdHIgOiAibm90IG51bGwgc3RyaW1nIjsKKyAgICB9CisgICAgcmV0dXJuICJzdHIgd2FzIG51bGwiOworICB9CisKKworCisKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvbnVsbGl0eWluZmVycmVyL2FmdGVyUGFyYW1ldGVyRGVyZWZlcmVuY2VkLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvbnVsbGl0eWluZmVycmVyL2FmdGVyUGFyYW1ldGVyRGVyZWZlcmVuY2VkLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzAxZjAyMwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9udWxsaXR5aW5mZXJyZXIvYWZ0ZXJQYXJhbWV0ZXJEZXJlZmVyZW5jZWQuamF2YQpAQCAtMCwwICsxLDIzIEBACitpbXBvcnQgb3JnLmpldGJyYWlucy5hbm5vdGF0aW9ucy4qOworCitjbGFzcyBUZXN0IHsKKyAgdm9pZCBmb28oQE5vdE51bGwgU3RyaW5nIHMpIHsKKyAgICBzLnN1YnN0cmluZygwKTsKKyAgfQorCisgIC8qKgorICAgKiBAcGFyYW0gc3RyCisgICAqLworICB2b2lkIGJhcihATm90TnVsbCBTdHJpbmcgc3RyKSB7CisgICAgaWYgKHN0ci5zdWJzdHJpbmcoMCkgPT0gbnVsbCkgeworICAgIH0KKyAgfQorCisgIC8qKgorICAgKiBAcGFyYW0gc3RyCisgICAqLworICB2b2lkIGJhcihATm90TnVsbCBTdHJpbmcgc3RyKSB7CisgICAgaWYgKChzdHIpLnN1YnN0cmluZygwKSA9PSBudWxsKSB7CisgICAgfQorICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L251bGxpdHlpbmZlcnJlci9hZnRlclBhcmFtZXRlclBhc3NlZDJOb3ROdWxsLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvbnVsbGl0eWluZmVycmVyL2FmdGVyUGFyYW1ldGVyUGFzc2VkMk5vdE51bGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MDExM2MyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L251bGxpdHlpbmZlcnJlci9hZnRlclBhcmFtZXRlclBhc3NlZDJOb3ROdWxsLmphdmEKQEAgLTAsMCArMSwxMCBAQAoraW1wb3J0IG9yZy5qZXRicmFpbnMuYW5ub3RhdGlvbnMuKjsKKworY2xhc3MgVGVzdCB7CisgIHZvaWQgZm9vKEBOb3ROdWxsIFN0cmluZyBzKSB7CisgIH0KKworICB2b2lkIGJhcihATm90TnVsbCBTdHJpbmcgc3RyKSB7CisgICAgZm9vKHN0cik7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvbnVsbGl0eWluZmVycmVyL2FmdGVyUGFyYW1ldGVyVXNlZEluRm9yZWFjaEl0ZXJhdGVkVmFsdWUuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9udWxsaXR5aW5mZXJyZXIvYWZ0ZXJQYXJhbWV0ZXJVc2VkSW5Gb3JlYWNoSXRlcmF0ZWRWYWx1ZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE1NDdjMTgKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvbnVsbGl0eWluZmVycmVyL2FmdGVyUGFyYW1ldGVyVXNlZEluRm9yZWFjaEl0ZXJhdGVkVmFsdWUuamF2YQpAQCAtMCwwICsxLDkgQEAKK2ltcG9ydCBvcmcuamV0YnJhaW5zLmFubm90YXRpb25zLk5vdE51bGw7CisKK2ltcG9ydCBqYXZhLnV0aWwuKjsKK2NsYXNzIFRlc3QgeworICAgdm9pZCBmb28oQE5vdE51bGwgTGlzdCByZXF1ZXN0cyl7CisgICAgICAgIGZvciAoT2JqZWN0IHJlcXVlc3QgOiByZXF1ZXN0cykgeworICAgICAgICB9CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9udWxsaXR5aW5mZXJyZXIvYWZ0ZXJUcnlFbnVtU3dpdGNoLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvbnVsbGl0eWluZmVycmVyL2FmdGVyVHJ5RW51bVN3aXRjaC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUxNzI4ZmUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvbnVsbGl0eWluZmVycmVyL2FmdGVyVHJ5RW51bVN3aXRjaC5qYXZhCkBAIC0wLDAgKzEsMTMgQEAKK2ltcG9ydCBvcmcuamV0YnJhaW5zLmFubm90YXRpb25zLio7CisKK3B1YmxpYyBjbGFzcyBJbmZlciB7CisgICAgZW51bSBFIHs7CisgICAgfQorCisgICAgdm9pZCB0cnlTd2l0Y2hFbnVtKEBOb3ROdWxsIEUgZSkgeworICAgICAgICBzd2l0Y2ggKGUpIHsKKworICAgICAgICB9CisgICAgfQorCit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L251bGxpdHlpbmZlcnJlci9iZWZvcmVBc3NlcnRQYXJhbU5vdE51bGwuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9udWxsaXR5aW5mZXJyZXIvYmVmb3JlQXNzZXJ0UGFyYW1Ob3ROdWxsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWY0YTg5YwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9udWxsaXR5aW5mZXJyZXIvYmVmb3JlQXNzZXJ0UGFyYW1Ob3ROdWxsLmphdmEKQEAgLTAsMCArMSwxMSBAQAorY2xhc3MgVGVzdCB7CisgIHB1YmxpYyBTdHJpbmcgbm9OdWxsKFN0cmluZyB0ZXh0KSB7CisgICAgYXNzZXJ0IHRleHQgIT0gbnVsbDsKKyAgICByZXR1cm4gIiI7CisgIH0KKworICBwcml2YXRlIHZvaWQgZm9vKCkgeworICAgIFN0cmluZyBzdHIgPSAiIjsKKyAgICBhc3NlcnQgc3RyICE9IG51bGw7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvbnVsbGl0eWluZmVycmVyL2JlZm9yZUNvbmRpdGlvbmFsUmV0dXJuTm90TnVsbC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L251bGxpdHlpbmZlcnJlci9iZWZvcmVDb25kaXRpb25hbFJldHVybk5vdE51bGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZTVmMWE4Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L251bGxpdHlpbmZlcnJlci9iZWZvcmVDb25kaXRpb25hbFJldHVybk5vdE51bGwuamF2YQpAQCAtMCwwICsxLDUgQEAKK2NsYXNzIFRlc3QgeworICAgIHB1YmxpYyAgU3RyaW5nIG5vTnVsbCggU3RyaW5nIHRleHQpIHsKKyAgICAgICAgcmV0dXJuIHRleHQgPT0gbnVsbCA/ICIiIDogdGV4dDsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L251bGxpdHlpbmZlcnJlci9iZWZvcmVGaWVsZHNBc3NpZ25tZW50LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvbnVsbGl0eWluZmVycmVyL2JlZm9yZUZpZWxkc0Fzc2lnbm1lbnQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNzc3MmFmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L251bGxpdHlpbmZlcnJlci9iZWZvcmVGaWVsZHNBc3NpZ25tZW50LmphdmEKQEAgLTAsMCArMSw0NiBAQAoraW1wb3J0IG9yZy5qZXRicmFpbnMuYW5ub3RhdGlvbnMuKjsKKworY2xhc3MgVGVzdCB7CisgIFN0cmluZyBteUZvbyA9ICIiOworCisgIFN0cmluZyBteUZvbzEgPSBudWxsOworCisgIFN0cmluZyBteUZvbzIgPSBmb28yKCk7CisgIEBOb3ROdWxsIFN0cmluZyBmb28yKCkgeyByZXR1cm4gIiI7fQorCisgIFN0cmluZyBteUZvbzMgPSBmb28zKCk7CisgIEBOdWxsYWJsZSBTdHJpbmcgZm9vMygpIHsgcmV0dXJuIG51bGw7fQorCisgIFN0cmluZyBteUZvbzQ7CisgIHZvaWQgc2V0Rm9vNCgpIHsKKyAgICBteUZvbzQgPSAiIjsKKyAgfQorCisgIGZpbmFsIFN0cmluZyBteUZvbzU7CisgIGZpbmFsIFN0cmluZyBteUZvbzY7CisgIGZpbmFsIFN0cmluZyBteUZvbzc7CisgIGZpbmFsIFN0cmluZyBteUZvbzg7CisgIGZpbmFsIFN0cmluZyBteUZvbzk7CisgIGZpbmFsIFN0cmluZyBteUZvbzEwOworCisgIGZpbmFsIFN0cmluZyBteUZvbzExID0gIiI7CisgIGZpbmFsIFN0cmluZyBteUZvbzEyOworICBmaW5hbCBTdHJpbmcgbXlGb28xMyA9IG51bGw7CisKKyAgLyoqCisgICAqIHtAbGluayAjbXlGb282fQorICAgKi8KKyAgVGVzdChATm90TnVsbCBTdHJpbmcgcGFyYW0sIEBOdWxsYWJsZSBTdHJpbmcgcGFyYW1OdWxsYWJsZSwgU3RyaW5nIHNpbXBsZVBhcmFtKSB7CisgICAgbXlGb281ID0gIiI7CisgICAgbXlGb282ID0gbnVsbDsKKyAgICBteUZvbzcgPSBwYXJhbTsKKyAgICBteUZvbzggPSBwYXJhbU51bGxhYmxlOworICAgIG15Rm9vOSA9IHNpbXBsZVBhcmFtOworICAgIG15Rm9vMTAgPSBmb28xMChmYWxzZSk7CisgICAgbXlGb28xMiA9ICIiOworICB9CisKKyAgU3RyaW5nIGZvbzEwKGJvb2xlYW4gZmxhZykgeworICAgIHJldHVybiBmbGFnID8gZm9vMigpIDogZm9vMygpOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L251bGxpdHlpbmZlcnJlci9iZWZvcmVGb3JFYWNoUGFyYW1ldGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvbnVsbGl0eWluZmVycmVyL2JlZm9yZUZvckVhY2hQYXJhbWV0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NzcyYmI4Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L251bGxpdHlpbmZlcnJlci9iZWZvcmVGb3JFYWNoUGFyYW1ldGVyLmphdmEKQEAgLTAsMCArMSw4IEBACitpbXBvcnQgamF2YS51dGlsLio7CitjbGFzcyBUZXN0IHsKKyAgIHZvaWQgZm9vKExpc3QgcmVxdWVzdHMpeworICAgICAgICBmb3IgKE9iamVjdCByZXF1ZXN0IDogcmVxdWVzdHMpIHsKKyAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4ocmVxdWVzdC50b1N0cmluZygpKTsKKyAgICAgICAgfQorICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvbnVsbGl0eWluZmVycmVyL2JlZm9yZU1ldGhvZFJldHVyblZhbHVlLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvbnVsbGl0eWluZmVycmVyL2JlZm9yZU1ldGhvZFJldHVyblZhbHVlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDA1ZTMxYwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9udWxsaXR5aW5mZXJyZXIvYmVmb3JlTWV0aG9kUmV0dXJuVmFsdWUuamF2YQpAQCAtMCwwICsxLDc0IEBACitpbXBvcnQgb3JnLmpldGJyYWlucy5hbm5vdGF0aW9ucy4qOworCitjbGFzcyBUZXN0IHsKKyAgU3RyaW5nIGZvbzEoKSB7CisgICAgcmV0dXJuIG51bGw7CisgIH0KKworICBTdHJpbmcgZm9vMigpIHsKKyAgICByZXR1cm4gIiI7CisgIH0KKworICBTdHJpbmcgZm9vMyhTdHJpbmcgcykgeworICAgIHJldHVybiBzOworICB9CisKKyAgU3RyaW5nIGZvbzQoU3RyaW5nIHMpIHsKKyAgICByZXR1cm4gcy5zdWJzdHJpbmcoMCk7CisgIH0KKworICBJbnRlZ2VyIGZvbzUoSW50ZWdlciBpKSB7CisgICAgcmV0dXJuIGkrKzsKKyAgfQorCisgIEludGVnZXIgZm9vNihJbnRlZ2VyIGkpIHsKKyAgICBpZiAoaSA9PSAwKSByZXR1cm4gMTsKKyAgICByZXR1cm4gaSAqIGZvbzYoaS0tKTsKKyAgfQorCisgIEludGVnZXIgZm9vNyhib29sZWFuIGZsYWcpIHsKKyAgICByZXR1cm4gZmxhZyA/IG51bGwgOiAxOworICB9CisKKyAgSW50ZWdlciBmb284KGJvb2xlYW4gZmxhZykgeworICAgIGlmIChmbGFnKSB7CisgICAgICByZXR1cm4gbnVsbDsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICByZXR1cm4gMTsKKyAgICB9CisgIH0KKworICBATnVsbGFibGUKKyAgU3RyaW5nIGJhcjkoKSB7CisgICAgcmV0dXJuIGZvbzMoIiIpOworICB9CisKKyAgU3RyaW5nIGZvbzkoKSB7CisgICAgcmV0dXJuIGJhcjkoKTsKKyAgfQorCisKKyAgQE51bGxhYmxlCisgIFN0cmluZyBiYXIxMCgpIHsKKyAgICByZXR1cm4gZm9vMygiIik7CisgIH0KKworICBATm90TnVsbAorICBTdHJpbmcgYmFyMTAxKCkgeworICAgIHJldHVybiBmb28zKCIiKTsKKyAgfQorCisgIFN0cmluZyBmb28xMChib29sZWFuIGZsYWcpIHsKKyAgICByZXR1cm4gZmxhZyA/IGJhcjEwKCkgOiBiYXIxMDEoKTsKKyAgfQorCisgIFN0cmluZyBmb28xMSgpIHsKKyAgICBjbGFzcyBGb297CisgICAgICBTdHJpbmcgbWVzcygpIHsKKyAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICB9CisgICAgfQorICAgIHJldHVybiAiIjsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9udWxsaXR5aW5mZXJyZXIvYmVmb3JlUGFyYW1ldGVyQ2hlY2tlZEZvckluc3RhbmNlb2YuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9udWxsaXR5aW5mZXJyZXIvYmVmb3JlUGFyYW1ldGVyQ2hlY2tlZEZvckluc3RhbmNlb2YuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZjcwM2ExCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L251bGxpdHlpbmZlcnJlci9iZWZvcmVQYXJhbWV0ZXJDaGVja2VkRm9ySW5zdGFuY2VvZi5qYXZhCkBAIC0wLDAgKzEsMTIgQEAKK3B1YmxpYyBjbGFzcyBDIHsKKyAgcHJpdmF0ZSBpbnQgeDsKKworICBwdWJsaWMgYm9vbGVhbiBlcXVhbHMoT2JqZWN0IG9iamVjdCkgeworICAgIGlmIChvYmplY3QgaW5zdGFuY2VvZiBDKSB7CisgICAgICBpZiAoKChDKW9iamVjdCkueCA9PSB4KSB7CisgICAgICAgIHJldHVybiB0cnVlOworICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gZmFsc2U7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvbnVsbGl0eWluZmVycmVyL2JlZm9yZVBhcmFtZXRlckNoZWNrZWRGb3JOdWxsLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvbnVsbGl0eWluZmVycmVyL2JlZm9yZVBhcmFtZXRlckNoZWNrZWRGb3JOdWxsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2I0YmIwYgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9udWxsaXR5aW5mZXJyZXIvYmVmb3JlUGFyYW1ldGVyQ2hlY2tlZEZvck51bGwuamF2YQpAQCAtMCwwICsxLDM0IEBACitpbXBvcnQgb3JnLmpldGJyYWlucy5hbm5vdGF0aW9ucy4qOworCitjbGFzcyBUZXN0IHsKKyAgdm9pZCBiYXIoU3RyaW5nIHN0cikgeworICAgIGlmIChzdHIgPT0gbnVsbCkgeworICAgICAgZm9vKHN0cik7CisgICAgfQorICB9CisKKyAgU3RyaW5nIGZvbyhTdHJpbmcgc3RyKSB7CisgICAgcmV0dXJuIHN0cjsKKyAgfQorCisgIFN0cmluZyBmb28xKFN0cmluZyBzdHIpIHsKKyAgICBpZiAoc3RyID09IG51bGwpOworICAgIHJldHVybiAoc3RyKTsKKyAgfQorCisgIFN0cmluZyBmb28yKFN0cmluZyBzdHIpIHsKKyAgICBpZiAoc3RyID09IG51bGwpOworICAgIHJldHVybiAoKFN0cmluZylzdHIpOworICB9CisKKyAgU3RyaW5nIGZyYW0oU3RyaW5nIHN0ciwgYm9vbGVhbiBiKSB7CisgICAgaWYgKHN0ciAhPSBudWxsKSB7CisgICAgICByZXR1cm4gYiA/IHN0ciA6ICJub3QgbnVsbCBzdHJpbWciOworICAgIH0KKyAgICByZXR1cm4gInN0ciB3YXMgbnVsbCI7CisgIH0KKworCisKKworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9udWxsaXR5aW5mZXJyZXIvYmVmb3JlUGFyYW1ldGVyRGVyZWZlcmVuY2VkLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvbnVsbGl0eWluZmVycmVyL2JlZm9yZVBhcmFtZXRlckRlcmVmZXJlbmNlZC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmExYmE3Y2EKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvbnVsbGl0eWluZmVycmVyL2JlZm9yZVBhcmFtZXRlckRlcmVmZXJlbmNlZC5qYXZhCkBAIC0wLDAgKzEsMjMgQEAKK2ltcG9ydCBvcmcuamV0YnJhaW5zLmFubm90YXRpb25zLio7CisKK2NsYXNzIFRlc3QgeworICB2b2lkIGZvbyhTdHJpbmcgcykgeworICAgIHMuc3Vic3RyaW5nKDApOworICB9CisKKyAgLyoqCisgICAqIEBwYXJhbSBzdHIKKyAgICovCisgIHZvaWQgYmFyKFN0cmluZyBzdHIpIHsKKyAgICBpZiAoc3RyLnN1YnN0cmluZygwKSA9PSBudWxsKSB7CisgICAgfQorICB9CisKKyAgLyoqCisgICAqIEBwYXJhbSBzdHIKKyAgICovCisgIHZvaWQgYmFyKFN0cmluZyBzdHIpIHsKKyAgICBpZiAoKHN0cikuc3Vic3RyaW5nKDApID09IG51bGwpIHsKKyAgICB9CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvbnVsbGl0eWluZmVycmVyL2JlZm9yZVBhcmFtZXRlclBhc3NlZDJOb3ROdWxsLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvbnVsbGl0eWluZmVycmVyL2JlZm9yZVBhcmFtZXRlclBhc3NlZDJOb3ROdWxsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTA0NmM2MQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9udWxsaXR5aW5mZXJyZXIvYmVmb3JlUGFyYW1ldGVyUGFzc2VkMk5vdE51bGwuamF2YQpAQCAtMCwwICsxLDEwIEBACitpbXBvcnQgb3JnLmpldGJyYWlucy5hbm5vdGF0aW9ucy4qOworCitjbGFzcyBUZXN0IHsKKyAgdm9pZCBmb28oQE5vdE51bGwgU3RyaW5nIHMpIHsKKyAgfQorCisgIHZvaWQgYmFyKFN0cmluZyBzdHIpIHsKKyAgICBmb28oc3RyKTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9udWxsaXR5aW5mZXJyZXIvYmVmb3JlUGFyYW1ldGVyVXNlZEluRm9yZWFjaEl0ZXJhdGVkVmFsdWUuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9udWxsaXR5aW5mZXJyZXIvYmVmb3JlUGFyYW1ldGVyVXNlZEluRm9yZWFjaEl0ZXJhdGVkVmFsdWUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNjZjZTQ0Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L251bGxpdHlpbmZlcnJlci9iZWZvcmVQYXJhbWV0ZXJVc2VkSW5Gb3JlYWNoSXRlcmF0ZWRWYWx1ZS5qYXZhCkBAIC0wLDAgKzEsNyBAQAoraW1wb3J0IGphdmEudXRpbC4qOworY2xhc3MgVGVzdCB7CisgICB2b2lkIGZvbyhMaXN0IHJlcXVlc3RzKXsKKyAgICAgICAgZm9yIChPYmplY3QgcmVxdWVzdCA6IHJlcXVlc3RzKSB7CisgICAgICAgIH0KKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L251bGxpdHlpbmZlcnJlci9iZWZvcmVUcnlFbnVtU3dpdGNoLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvbnVsbGl0eWluZmVycmVyL2JlZm9yZVRyeUVudW1Td2l0Y2guamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MGM3MDQ3Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L251bGxpdHlpbmZlcnJlci9iZWZvcmVUcnlFbnVtU3dpdGNoLmphdmEKQEAgLTAsMCArMSwxMyBAQAoraW1wb3J0IG9yZy5qZXRicmFpbnMuYW5ub3RhdGlvbnMuKjsKKworcHVibGljIGNsYXNzIEluZmVyIHsKKyAgICBlbnVtIEUgezsKKyAgICB9CisKKyAgICB2b2lkIHRyeVN3aXRjaEVudW0oRSBlKSB7CisgICAgICAgIHN3aXRjaCAoZSkgeworCisgICAgICAgIH0KKyAgICB9CisKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvbnVsbGl0eWluZmVycmVyL2xpYi9hbm5vdGF0aW9ucy5qYXIgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvbnVsbGl0eWluZmVycmVyL2xpYi9hbm5vdGF0aW9ucy5qYXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTQwNDE5MgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9udWxsaXR5aW5mZXJyZXIvbGliL2Fubm90YXRpb25zLmphcgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvb3ZlcnJpZGVJbXBsZW1lbnQvSW1wbGVtZW50ZWRDb25zdHJ1Y3RvcnNFeGNsdWRlZC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L292ZXJyaWRlSW1wbGVtZW50L0ltcGxlbWVudGVkQ29uc3RydWN0b3JzRXhjbHVkZWQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MDY2OTY1Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L292ZXJyaWRlSW1wbGVtZW50L0ltcGxlbWVudGVkQ29uc3RydWN0b3JzRXhjbHVkZWQuamF2YQpAQCAtMCwwICsxLDkgQEAKK2NsYXNzIEEgeworICBBKCkgeyB9CisgIEEoU3RyaW5nIHMpIHsgfQorfQorCitjbGFzcyBCIGV4dGVuZHMgQSB7CisgIEIoKSB7IHN1cGVyKCk7IH0KKyAgPGNhcmV0PgorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L292ZXJyaWRlSW1wbGVtZW50L2FmdGVyQW5ub3RhdGlvbi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L292ZXJyaWRlSW1wbGVtZW50L2FmdGVyQW5ub3RhdGlvbi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgwMTZkOGYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvb3ZlcnJpZGVJbXBsZW1lbnQvYWZ0ZXJBbm5vdGF0aW9uLmphdmEKQEAgLTAsMCArMSwxMiBAQAorQGludGVyZmFjZSBmZnsKKyAgICBTdHJpbmcgZigpIGRlZmF1bHQgIiI7Cit9CitjbGFzcyBkIGltcGxlbWVudHMgZmYgeworICAgIHB1YmxpYyBTdHJpbmcgZigpIHsKKyAgICAgICAgPGNhcmV0PjxzZWxlY3Rpb24+cmV0dXJuIG51bGw7ICAvL1RvIGNoYW5nZSBib2R5IG9mIGltcGxlbWVudGVkIG1ldGhvZHMgdXNlIEZpbGUgfCBTZXR0aW5ncyB8IEZpbGUgVGVtcGxhdGVzLjwvc2VsZWN0aW9uPgorICAgIH0KKworICAgIHB1YmxpYyBDbGFzczw/IGV4dGVuZHMgQW5ub3RhdGlvbj4gYW5ub3RhdGlvblR5cGUoKSB7CisgICAgICAgIHJldHVybiBudWxsOyAgLy9UbyBjaGFuZ2UgYm9keSBvZiBpbXBsZW1lbnRlZCBtZXRob2RzIHVzZSBGaWxlIHwgU2V0dGluZ3MgfCBGaWxlIFRlbXBsYXRlcy4KKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvb3ZlcnJpZGVJbXBsZW1lbnQvYWZ0ZXJDbG9uZS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L292ZXJyaWRlSW1wbGVtZW50L2FmdGVyQ2xvbmUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNmRjM2IwCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L292ZXJyaWRlSW1wbGVtZW50L2FmdGVyQ2xvbmUuamF2YQpAQCAtMCwwICsxLDEyIEBACitjbGFzcyBHZW4geworICAgIHByb3RlY3RlZCBHZW4gY2xvbmUoKSB7CisgICAgICAgIHJldHVybiBudWxsOworICAgIH0KK30KKworY2xhc3MgWDIgZXh0ZW5kcyBHZW4geworICAgIEBPdmVycmlkZQorICAgIHByb3RlY3RlZCBHZW4gY2xvbmUoKSB7CisgICAgICAgIDxjYXJldD48c2VsZWN0aW9uPnJldHVybiBzdXBlci5jbG9uZSgpOyAgICAvL1RvIGNoYW5nZSBib2R5IG9mIG92ZXJyaWRkZW4gbWV0aG9kcyB1c2UgRmlsZSB8IFNldHRpbmdzIHwgRmlsZSBUZW1wbGF0ZXMuPC9zZWxlY3Rpb24+CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9vdmVycmlkZUltcGxlbWVudC9hZnRlckRvTm90SW1wbGVtZW50RXh0ZW5zaW9uTWV0aG9kcy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L292ZXJyaWRlSW1wbGVtZW50L2FmdGVyRG9Ob3RJbXBsZW1lbnRFeHRlbnNpb25NZXRob2RzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjMyYmY1MwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9vdmVycmlkZUltcGxlbWVudC9hZnRlckRvTm90SW1wbGVtZW50RXh0ZW5zaW9uTWV0aG9kcy5qYXZhCkBAIC0wLDAgKzEsMTUgQEAKK2ludGVyZmFjZSBBPFQ+IHsKKyAgICB2b2lkIG0xKFQgdCk7CisgICAgdm9pZCBtMigpOworfQorCitpbnRlcmZhY2UgQjxUPiBleHRlbmRzIEE8VD4geworICAgIHZvaWQgbTEoVCB0KSBkZWZhdWx0IHsgfQorfQorCitjbGFzcyBNeUNsYXNzPFQ+IGltcGxlbWVudHMgQjxUPiB7CisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIHZvaWQgbTIoKSB7CisgICAgICAgIDxzZWxlY3Rpb24+Ly9UbyBjaGFuZ2UgYm9keSBvZiBpbXBsZW1lbnRlZCBtZXRob2RzIHVzZSBGaWxlIHwgU2V0dGluZ3MgfCBGaWxlIFRlbXBsYXRlcy48L3NlbGVjdGlvbj4KKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvb3ZlcnJpZGVJbXBsZW1lbnQvYWZ0ZXJFbnVtQ29uc3RhbnQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9vdmVycmlkZUltcGxlbWVudC9hZnRlckVudW1Db25zdGFudC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk3M2Y3OGYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvb3ZlcnJpZGVJbXBsZW1lbnQvYWZ0ZXJFbnVtQ29uc3RhbnQuamF2YQpAQCAtMCwwICsxLDI0IEBACisvKgorICogQ29weXJpZ2h0IDIwMDAtMjAxMiBKZXRCcmFpbnMgcy5yLm8uCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworZW51bSBFeworICBFMSB7CisgICAgICBAT3ZlcnJpZGUKKyAgICAgIHB1YmxpYyB2b2lkIGZvbygpIHsKKyAgICAgICAgICA8c2VsZWN0aW9uPi8vVG8gY2hhbmdlIGJvZHkgb2YgaW1wbGVtZW50ZWQgbWV0aG9kcyB1c2UgRmlsZSB8IFNldHRpbmdzIHwgRmlsZSBUZW1wbGF0ZXMuPC9zZWxlY3Rpb24+CisgICAgICB9CisgIH07CisgIHB1YmxpYyBhYnN0cmFjdCB2b2lkIGZvbygpOworfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L292ZXJyaWRlSW1wbGVtZW50L2FmdGVyRXJhc3VyZVdpbGRjYXJkLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvb3ZlcnJpZGVJbXBsZW1lbnQvYWZ0ZXJFcmFzdXJlV2lsZGNhcmQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40Yzc1OTA5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L292ZXJyaWRlSW1wbGVtZW50L2FmdGVyRXJhc3VyZVdpbGRjYXJkLmphdmEKQEAgLTAsMCArMSw5IEBACitpbnRlcmZhY2UgR2VuZXJpYzxUPiB7CisgIFQgZm9vKCk7Cit9CisKK2NsYXNzIElJIGltcGxlbWVudHMgR2VuZXJpYzw/PiB7CisgICAgcHVibGljIE9iamVjdCBmb28oKSB7CisgICAgICAgIDxzZWxlY3Rpb24+cmV0dXJuIG51bGw7ICAvL1RvIGNoYW5nZSBib2R5IG9mIGltcGxlbWVudGVkIG1ldGhvZHMgdXNlIEZpbGUgfCBTZXR0aW5ncyB8IEZpbGUgVGVtcGxhdGVzLjwvc2VsZWN0aW9uPgorICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvb3ZlcnJpZGVJbXBsZW1lbnQvYWZ0ZXJJbXBsZW1lbnRFeHRlbnNpb25NZXRob2RzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvb3ZlcnJpZGVJbXBsZW1lbnQvYWZ0ZXJJbXBsZW1lbnRFeHRlbnNpb25NZXRob2RzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDdlNTcyZQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9vdmVycmlkZUltcGxlbWVudC9hZnRlckltcGxlbWVudEV4dGVuc2lvbk1ldGhvZHMuamF2YQpAQCAtMCwwICsxLDEwIEBACitpbnRlcmZhY2UgQTxUPiB7CisgICAgdm9pZCBtKFQgdCkgZGVmYXVsdCB7IH0KK30KKworY2xhc3MgTXlDbGFzczxUPiBpbXBsZW1lbnRzIEE8VD4geworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyB2b2lkIG0oVCB0KSB7CisgICAgICAgIDxzZWxlY3Rpb24+Ly9UbyBjaGFuZ2UgYm9keSBvZiBpbXBsZW1lbnRlZCBtZXRob2RzIHVzZSBGaWxlIHwgU2V0dGluZ3MgfCBGaWxlIFRlbXBsYXRlcy48L3NlbGVjdGlvbj4KKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvb3ZlcnJpZGVJbXBsZW1lbnQvYWZ0ZXJJbmNvbXBsZXRlLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvb3ZlcnJpZGVJbXBsZW1lbnQvYWZ0ZXJJbmNvbXBsZXRlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmZhMTIxMQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9vdmVycmlkZUltcGxlbWVudC9hZnRlckluY29tcGxldGUuamF2YQpAQCAtMCwwICsxLDUgQEAKK2NsYXNzIFMgaW1wbGVtZW50cyBSdW5uYWJsZSB7CisgICAgcHVibGljIHZvaWQgcnVuKCkgeworICAgICAgICA8Y2FyZXQ+PHNlbGVjdGlvbj4vL1RvIGNoYW5nZSBib2R5IG9mIGltcGxlbWVudGVkIG1ldGhvZHMgdXNlIEZpbGUgfCBTZXR0aW5ncyB8IEZpbGUgVGVtcGxhdGVzLjwvc2VsZWN0aW9uPgorICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvb3ZlcnJpZGVJbXBsZW1lbnQvYWZ0ZXJJbnRlcmZhY2VBbmRBYnN0cmFjdENsYXNzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvb3ZlcnJpZGVJbXBsZW1lbnQvYWZ0ZXJJbnRlcmZhY2VBbmRBYnN0cmFjdENsYXNzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjkwMTM0YgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9vdmVycmlkZUltcGxlbWVudC9hZnRlckludGVyZmFjZUFuZEFic3RyYWN0Q2xhc3MuamF2YQpAQCAtMCwwICsxLDE2IEBACithYnN0cmFjdCBjbGFzcyBBIHsKKyAgcHVibGljIGFic3RyYWN0IEQgZm9vKCk7Cit9CisKK2ludGVyZmFjZSBCIHsKKyAgRiBmb28oKTsKK30KKworY2xhc3MgQyBleHRlbmRzIEEgaW1wbGVtZW50cyBCIHsKKyAgICBwdWJsaWMgRiBmb28oKSB7CisgICAgICAgIDxzZWxlY3Rpb24+cmV0dXJuIG51bGw7ICAvL1RvIGNoYW5nZSBib2R5IG9mIGltcGxlbWVudGVkIG1ldGhvZHMgdXNlIEZpbGUgfCBTZXR0aW5ncyB8IEZpbGUgVGVtcGxhdGVzLjwvc2VsZWN0aW9uPgorICAgIH0KK30KKworY2xhc3MgRCB7fQorY2xhc3MgRiBleHRlbmRzIEQge30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvb3ZlcnJpZGVJbXBsZW1lbnQvYWZ0ZXJMb25nRmluYWxQYXJhbWV0ZXJMaXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvb3ZlcnJpZGVJbXBsZW1lbnQvYWZ0ZXJMb25nRmluYWxQYXJhbWV0ZXJMaXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2I3YTcyNwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9vdmVycmlkZUltcGxlbWVudC9hZnRlckxvbmdGaW5hbFBhcmFtZXRlckxpc3QuamF2YQpAQCAtMCwwICsxLDE2IEBACitwdWJsaWMgaW50ZXJmYWNlIEEgeworICAgIHZvaWQgZm9vKFN0cmluZyBwcHBwcHBwcHBwcHAxLCBTdHJpbmcgcHBwcHBwcHBwcHBwMixTdHJpbmcgcHBwcHBwcHBwcHBwMyxTdHJpbmcgcHBwcHBwcHBwcHBwNCxTdHJpbmcgcHBwcHBwcHBwcHBwNSxTdHJpbmcgcHBwcHBwcHBwcHBwNixTdHJpbmcgcHBwcHBwcHBwcHBwNyxTdHJpbmcgcHBwcHBwcHBwcHBwOCk7Cit9CisKK2Fic3RyYWN0IGNsYXNzIEIgaW1wbGVtZW50cyBBeworICAgIHB1YmxpYyB2b2lkIGZvbyhmaW5hbCBTdHJpbmcgcHBwcHBwcHBwcHBwMSwKKyAgICAgICAgICAgICAgICAgICAgZmluYWwgU3RyaW5nIHBwcHBwcHBwcHBwcDIsCisgICAgICAgICAgICAgICAgICAgIGZpbmFsIFN0cmluZyBwcHBwcHBwcHBwcHAzLAorICAgICAgICAgICAgICAgICAgICBmaW5hbCBTdHJpbmcgcHBwcHBwcHBwcHBwNCwKKyAgICAgICAgICAgICAgICAgICAgZmluYWwgU3RyaW5nIHBwcHBwcHBwcHBwcDUsCisgICAgICAgICAgICAgICAgICAgIGZpbmFsIFN0cmluZyBwcHBwcHBwcHBwcHA2LAorICAgICAgICAgICAgICAgICAgICBmaW5hbCBTdHJpbmcgcHBwcHBwcHBwcHBwNywKKyAgICAgICAgICAgICAgICAgICAgZmluYWwgU3RyaW5nIHBwcHBwcHBwcHBwcDgpIHsKKyAgICAgICAgPGNhcmV0PjxzZWxlY3Rpb24+Ly9UbyBjaGFuZ2UgYm9keSBvZiBpbXBsZW1lbnRlZCBtZXRob2RzIHVzZSBGaWxlIHwgU2V0dGluZ3MgfCBGaWxlIFRlbXBsYXRlcy48L3NlbGVjdGlvbj4KKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L292ZXJyaWRlSW1wbGVtZW50L2FmdGVyTG9uZ1BhcmFtZXRlckxpc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9vdmVycmlkZUltcGxlbWVudC9hZnRlckxvbmdQYXJhbWV0ZXJMaXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTdkODk5YQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9vdmVycmlkZUltcGxlbWVudC9hZnRlckxvbmdQYXJhbWV0ZXJMaXN0LmphdmEKQEAgLTAsMCArMSwxNSBAQAorcHVibGljIGludGVyZmFjZSBBIHsKKyAgICB2b2lkIGZvbyhTdHJpbmcgcDEsIFN0cmluZyBwMixTdHJpbmcgcDMsU3RyaW5nIHA0LFN0cmluZyBwNSxTdHJpbmcgcDYsU3RyaW5nIHA3KTsKK30KKworYWJzdHJhY3QgY2xhc3MgQiBpbXBsZW1lbnRzIEF7CisgICAgcHVibGljIHZvaWQgZm9vKFN0cmluZyBwMSwKKyAgICAgICAgICAgICAgICAgICAgU3RyaW5nIHAyLAorICAgICAgICAgICAgICAgICAgICBTdHJpbmcgcDMsCisgICAgICAgICAgICAgICAgICAgIFN0cmluZyBwNCwKKyAgICAgICAgICAgICAgICAgICAgU3RyaW5nIHA1LAorICAgICAgICAgICAgICAgICAgICBTdHJpbmcgcDYsCisgICAgICAgICAgICAgICAgICAgIFN0cmluZyBwNykgeworICAgICAgICA8Y2FyZXQ+PHNlbGVjdGlvbj4vL1RvIGNoYW5nZSBib2R5IG9mIGltcGxlbWVudGVkIG1ldGhvZHMgdXNlIEZpbGUgfCBTZXR0aW5ncyB8IEZpbGUgVGVtcGxhdGVzLjwvc2VsZWN0aW9uPgorICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvb3ZlcnJpZGVJbXBsZW1lbnQvYWZ0ZXJNdWx0aXBsZUludGVyZmFjZUluaGVyaXRhbmNlLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvb3ZlcnJpZGVJbXBsZW1lbnQvYWZ0ZXJNdWx0aXBsZUludGVyZmFjZUluaGVyaXRhbmNlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmM0OWE5MQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9vdmVycmlkZUltcGxlbWVudC9hZnRlck11bHRpcGxlSW50ZXJmYWNlSW5oZXJpdGFuY2UuamF2YQpAQCAtMCwwICsxLDE2IEBACitpbnRlcmZhY2UgQQoreworICAgIGFic3RyYWN0IFN0cmluZyBmb28oKTsKK30KKworaW50ZXJmYWNlIEIKK3sKKyAgICBhYnN0cmFjdCBPYmplY3QgZm9vKCk7Cit9CisKK2NsYXNzIEMgaW1wbGVtZW50cyBBLCBCCit7CisgICAgcHVibGljIFN0cmluZyBmb28oKSB7CisgICAgICAgIDxzZWxlY3Rpb24+cmV0dXJuIG51bGw7ICAvL1RvIGNoYW5nZSBib2R5IG9mIGltcGxlbWVudGVkIG1ldGhvZHMgdXNlIEZpbGUgfCBTZXR0aW5ncyB8IEZpbGUgVGVtcGxhdGVzLjwvc2VsZWN0aW9uPgorICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvb3ZlcnJpZGVJbXBsZW1lbnQvYWZ0ZXJPblRoZUxpbmVXaXRoRXhpc3RpbmdFeHByZXNzaW9uLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvb3ZlcnJpZGVJbXBsZW1lbnQvYWZ0ZXJPblRoZUxpbmVXaXRoRXhpc3RpbmdFeHByZXNzaW9uLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGE0ZTI5OAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9vdmVycmlkZUltcGxlbWVudC9hZnRlck9uVGhlTGluZVdpdGhFeGlzdGluZ0V4cHJlc3Npb24uamF2YQpAQCAtMCwwICsxLDEyIEBACithYnN0cmFjdCBjbGFzcyAgQmFzZSAgeworICAgIHZvaWQgZm9vKCl7fQorfQorCitjbGFzcyBTdWIgZXh0ZW5kcyBCYXNlIHsKKyAgICBpbnQgaXQ7CisKKyAgICBAT3ZlcnJpZGUKKyAgICB2b2lkIGZvbygpIHsKKyAgICAgICAgPGNhcmV0PjxzZWxlY3Rpb24+c3VwZXIuZm9vKCk7ICAgIC8vVG8gY2hhbmdlIGJvZHkgb2Ygb3ZlcnJpZGRlbiBtZXRob2RzIHVzZSBGaWxlIHwgU2V0dGluZ3MgfCBGaWxlIFRlbXBsYXRlcy48L3NlbGVjdGlvbj4KKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvb3ZlcnJpZGVJbXBsZW1lbnQvYWZ0ZXJSYXdTdXBlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L292ZXJyaWRlSW1wbGVtZW50L2FmdGVyUmF3U3VwZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NTkxMmExCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L292ZXJyaWRlSW1wbGVtZW50L2FmdGVyUmF3U3VwZXIuamF2YQpAQCAtMCwwICsxLDI1IEBACisvKgorICogQ29weXJpZ2h0IDIwMDAtMjAxMiBKZXRCcmFpbnMgcy5yLm8uCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworaW50ZXJmYWNlIEE8VD4geworICAgICAgICA8Uz4gdm9pZCBmb28oKTsKKyAgICB9CisKKyAgICBjbGFzcyBCIGltcGxlbWVudHMgQQorICAgIHsKKyAgICAgICAgcHVibGljIHZvaWQgZm9vKCkgeworICAgICAgICAgICAgPHNlbGVjdGlvbj4vL1RvIGNoYW5nZSBib2R5IG9mIGltcGxlbWVudGVkIG1ldGhvZHMgdXNlIEZpbGUgfCBTZXR0aW5ncyB8IEZpbGUgVGVtcGxhdGVzLjwvc2VsZWN0aW9uPgorICAgICAgICB9CisgICAgfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L292ZXJyaWRlSW1wbGVtZW50L2FmdGVyUmVzb2x2ZVR5cGVQYXJhbUNvbmZsaWN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvb3ZlcnJpZGVJbXBsZW1lbnQvYWZ0ZXJSZXNvbHZlVHlwZVBhcmFtQ29uZmxpY3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xN2ZlZWYyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L292ZXJyaWRlSW1wbGVtZW50L2FmdGVyUmVzb2x2ZVR5cGVQYXJhbUNvbmZsaWN0LmphdmEKQEAgLTAsMCArMSwxMCBAQAorYWJzdHJhY3QgY2xhc3MgQTE8WD57CisgICAgYWJzdHJhY3QgPFQ+IHZvaWQgZm9vKFQgdCwgWCB4KTsKK30KKworY2xhc3MgQjE8VD4gZXh0ZW5kcyBBMTxUPnsKKyAgICBAT3ZlcnJpZGUKKyAgICA8VDE+IHZvaWQgZm9vKFQxIHQxLCBUIHQpIHsKKyAgICAgICAgPHNlbGVjdGlvbj4vL1RvIGNoYW5nZSBib2R5IG9mIGltcGxlbWVudGVkIG1ldGhvZHMgdXNlIEZpbGUgfCBTZXR0aW5ncyB8IEZpbGUgVGVtcGxhdGVzLjwvc2VsZWN0aW9uPgorICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9vdmVycmlkZUltcGxlbWVudC9hZnRlclNpbXBsZS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L292ZXJyaWRlSW1wbGVtZW50L2FmdGVyU2ltcGxlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzA0ZWUxMAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9vdmVycmlkZUltcGxlbWVudC9hZnRlclNpbXBsZS5qYXZhCkBAIC0wLDAgKzEsMTAgQEAKK2Fic3RyYWN0IGNsYXNzICBJWCAgeworICAgIHZvaWQgZm9vKCl7fQorfQorCitjbGFzcyBYWEMgZXh0ZW5kcyBJWCB7CisgICAgQE92ZXJyaWRlCisgICAgdm9pZCBmb28oKSB7CisgICAgICAgIDxjYXJldD48c2VsZWN0aW9uPnN1cGVyLmZvbygpOyAgICAvL1RvIGNoYW5nZSBib2R5IG9mIG92ZXJyaWRkZW4gbWV0aG9kcyB1c2UgRmlsZSB8IFNldHRpbmdzIHwgRmlsZSBUZW1wbGF0ZXMuPC9zZWxlY3Rpb24+CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L292ZXJyaWRlSW1wbGVtZW50L2FmdGVyU2ltcGxpZnlPYmplY3RXaWxkY2FyZC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L292ZXJyaWRlSW1wbGVtZW50L2FmdGVyU2ltcGxpZnlPYmplY3RXaWxkY2FyZC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBmMDlkOGYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvb3ZlcnJpZGVJbXBsZW1lbnQvYWZ0ZXJTaW1wbGlmeU9iamVjdFdpbGRjYXJkLmphdmEKQEAgLTAsMCArMSwxMiBAQAoraW50ZXJmYWNlIEdlbmVyaWM8VD4geworICBTb21lR2VuZXJpYzw/IGV4dGVuZHMgVD4gZm9vKCk7Cit9CisKK2NsYXNzIElJIGltcGxlbWVudHMgR2VuZXJpYzxPYmplY3Q+IHsKKyAgICBwdWJsaWMgU29tZUdlbmVyaWM8Pz4gZm9vKCkgeworICAgICAgICA8c2VsZWN0aW9uPnJldHVybiBudWxsOyAgLy9UbyBjaGFuZ2UgYm9keSBvZiBpbXBsZW1lbnRlZCBtZXRob2RzIHVzZSBGaWxlIHwgU2V0dGluZ3MgfCBGaWxlIFRlbXBsYXRlcy48L3NlbGVjdGlvbj4KKyAgICB9Cit9CisKK2NsYXNzIFNvbWVHZW5lcmljPFA+IHsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvb3ZlcnJpZGVJbXBsZW1lbnQvYWZ0ZXJTdWJzdGl0dXRlQm91bmRJbk1ldGhvZFR5cGVQYXJhbS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L292ZXJyaWRlSW1wbGVtZW50L2FmdGVyU3Vic3RpdHV0ZUJvdW5kSW5NZXRob2RUeXBlUGFyYW0uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NzgxNmM0Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L292ZXJyaWRlSW1wbGVtZW50L2FmdGVyU3Vic3RpdHV0ZUJvdW5kSW5NZXRob2RUeXBlUGFyYW0uamF2YQpAQCAtMCwwICsxLDI2IEBACisvKgorICogQ29weXJpZ2h0IDIwMDAtMjAxMiBKZXRCcmFpbnMgcy5yLm8uCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworYWJzdHJhY3QgY2xhc3MgQTxUPiB7CisgICAgICAgIGFic3RyYWN0IDxTIGV4dGVuZHMgVD4gdm9pZCBmb28oUyBzKTsKKyAgICB9CisKKyAgICBjbGFzcyBCPFM+IGV4dGVuZHMgQTxUaHJvd2FibGU+eyAvLyBJbXBsZW1lbnQgbWV0aG9kcworCisgICAgICAgIEBPdmVycmlkZQorICAgICAgICA8UyBleHRlbmRzIFRocm93YWJsZT4gdm9pZCBmb28oUyBzKSB7CisgICAgICAgICAgICA8c2VsZWN0aW9uPi8vVG8gY2hhbmdlIGJvZHkgb2YgaW1wbGVtZW50ZWQgbWV0aG9kcyB1c2UgRmlsZSB8IFNldHRpbmdzIHwgRmlsZSBUZW1wbGF0ZXMuPC9zZWxlY3Rpb24+CisgICAgICAgIH0KKyAgICB9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvb3ZlcnJpZGVJbXBsZW1lbnQvYWZ0ZXJTdWJzdGl0dXRpb25JblR5cGVQYXJhbWV0ZXJzTGlzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L292ZXJyaWRlSW1wbGVtZW50L2FmdGVyU3Vic3RpdHV0aW9uSW5UeXBlUGFyYW1ldGVyc0xpc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xY2Q2NzJlCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L292ZXJyaWRlSW1wbGVtZW50L2FmdGVyU3Vic3RpdHV0aW9uSW5UeXBlUGFyYW1ldGVyc0xpc3QuamF2YQpAQCAtMCwwICsxLDEwIEBACithYnN0cmFjdCBjbGFzcyAgSVg8VD4gIHsKKyAgIGFic3RyYWN0IDxTIGV4dGVuZHMgVD4gdm9pZCBmb28oKXt9Cit9CisKK2NsYXNzIFhYQzxTPiBleHRlbmRzIElYPFRocm93YWJsZT4geworICAgIEBPdmVycmlkZQorICAgIDxTIGV4dGVuZHMgVGhyb3dhYmxlPiB2b2lkIGZvbygpIHsKKyAgICAgICAgPGNhcmV0PjxzZWxlY3Rpb24+Ly9UbyBjaGFuZ2UgYm9keSBvZiBpbXBsZW1lbnRlZCBtZXRob2RzIHVzZSBGaWxlIHwgU2V0dGluZ3MgfCBGaWxlIFRlbXBsYXRlcy48L3NlbGVjdGlvbj4KKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvb3ZlcnJpZGVJbXBsZW1lbnQvYWZ0ZXJUZXN0TWlzc2VkLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvb3ZlcnJpZGVJbXBsZW1lbnQvYWZ0ZXJUZXN0TWlzc2VkLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTRmYWQ5YgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9vdmVycmlkZUltcGxlbWVudC9hZnRlclRlc3RNaXNzZWQuamF2YQpAQCAtMCwwICsxLDExIEBACitjbGFzcyBmeworICBAb3JnLnRlc3RuZy5hbm5vdGF0aW9ucy5CZWZvcmVNZXRob2QKKyAgU3RyaW5nIGZvbygpIHtyZXR1cm4gIiI7fQorfQorCitjbGFzcyBmZiBleHRlbmRzIGYgeworICAgIEBPdmVycmlkZQorICAgIFN0cmluZyBmb28oKSB7CisgICAgICAgIDxzZWxlY3Rpb24+cmV0dXJuIHN1cGVyLmZvbygpOyAgICAvL1RvIGNoYW5nZSBib2R5IG9mIG92ZXJyaWRkZW4gbWV0aG9kcyB1c2UgRmlsZSB8IFNldHRpbmdzIHwgRmlsZSBUZW1wbGF0ZXMuPC9zZWxlY3Rpb24+CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9vdmVycmlkZUltcGxlbWVudC9hZnRlclR5cGVQYXJhbS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L292ZXJyaWRlSW1wbGVtZW50L2FmdGVyVHlwZVBhcmFtLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmNjNmRmNAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9vdmVycmlkZUltcGxlbWVudC9hZnRlclR5cGVQYXJhbS5qYXZhCkBAIC0wLDAgKzEsOSBAQAoraW50ZXJmYWNlIEZ1bmN0aW9uPFM+IHsKKyAgdm9pZCBmdW4oRnVuY3Rpb248Uz4gZnVuY3Rpb24pOworfQorCitjbGFzcyBCYXIgZXh0ZW5kcyBGdW5jdGlvbjxTdHJpbmc+eworICAgIHB1YmxpYyB2b2lkIGZ1bihGdW5jdGlvbjxTdHJpbmc+IGZ1bmN0aW9uKSB7CisgICAgICAgIDxzZWxlY3Rpb24+Ly9UbyBjaGFuZ2UgYm9keSBvZiBpbXBsZW1lbnRlZCBtZXRob2RzIHVzZSBGaWxlIHwgU2V0dGluZ3MgfCBGaWxlIFRlbXBsYXRlcy48L3NlbGVjdGlvbj4KKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L292ZXJyaWRlSW1wbGVtZW50L2FmdGVyV2lsZGNhcmQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9vdmVycmlkZUltcGxlbWVudC9hZnRlcldpbGRjYXJkLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWMzOTgzOAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9vdmVycmlkZUltcGxlbWVudC9hZnRlcldpbGRjYXJkLmphdmEKQEAgLTAsMCArMSw5IEBACitpbnRlcmZhY2UgRnVuY3Rpb248UywgUj4geworICBSIGZ1bihTIHMpOworfQorCitjbGFzcyBCYXIgZXh0ZW5kcyBGdW5jdGlvbjxTdHJpbmcsID8+eworICAgIHB1YmxpYyBPYmplY3QgZnVuKFN0cmluZyBzKSB7CisgICAgICAgIDxzZWxlY3Rpb24+cmV0dXJuIG51bGw7ICAvL1RvIGNoYW5nZSBib2R5IG9mIGltcGxlbWVudGVkIG1ldGhvZHMgdXNlIEZpbGUgfCBTZXR0aW5ncyB8IEZpbGUgVGVtcGxhdGVzLjwvc2VsZWN0aW9uPgorICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvb3ZlcnJpZGVJbXBsZW1lbnQvYmVmb3JlQW5ub3RhdGlvbi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L292ZXJyaWRlSW1wbGVtZW50L2JlZm9yZUFubm90YXRpb24uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44Mzg4NGZmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L292ZXJyaWRlSW1wbGVtZW50L2JlZm9yZUFubm90YXRpb24uamF2YQpAQCAtMCwwICsxLDkgQEAKK0BpbnRlcmZhY2UgZmZ7CisgICAgU3RyaW5nIGYoKSBkZWZhdWx0ICIiOworfQorY2xhc3MgZCBpbXBsZW1lbnRzIGZmIHsKKyAgICA8Y2FyZXQ+CisgICAgcHVibGljIENsYXNzPD8gZXh0ZW5kcyBBbm5vdGF0aW9uPiBhbm5vdGF0aW9uVHlwZSgpIHsKKyAgICAgICAgcmV0dXJuIG51bGw7ICAvL1RvIGNoYW5nZSBib2R5IG9mIGltcGxlbWVudGVkIG1ldGhvZHMgdXNlIEZpbGUgfCBTZXR0aW5ncyB8IEZpbGUgVGVtcGxhdGVzLgorICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9vdmVycmlkZUltcGxlbWVudC9iZWZvcmVDbG9uZS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L292ZXJyaWRlSW1wbGVtZW50L2JlZm9yZUNsb25lLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWJmNjM1NgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9vdmVycmlkZUltcGxlbWVudC9iZWZvcmVDbG9uZS5qYXZhCkBAIC0wLDAgKzEsOSBAQAorY2xhc3MgR2VuIHsKKyAgICBwcm90ZWN0ZWQgR2VuIGNsb25lKCkgeworICAgICAgICByZXR1cm4gbnVsbDsKKyAgICB9Cit9CisKK2NsYXNzIFgyIGV4dGVuZHMgR2VuIHsKKyAgICA8Y2FyZXQ+Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L292ZXJyaWRlSW1wbGVtZW50L2JlZm9yZURvTm90SW1wbGVtZW50RXh0ZW5zaW9uTWV0aG9kcy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L292ZXJyaWRlSW1wbGVtZW50L2JlZm9yZURvTm90SW1wbGVtZW50RXh0ZW5zaW9uTWV0aG9kcy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVkZjdjNTcKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvb3ZlcnJpZGVJbXBsZW1lbnQvYmVmb3JlRG9Ob3RJbXBsZW1lbnRFeHRlbnNpb25NZXRob2RzLmphdmEKQEAgLTAsMCArMSwxMiBAQAoraW50ZXJmYWNlIEE8VD4geworICAgIHZvaWQgbTEoVCB0KTsKKyAgICB2b2lkIG0yKCk7Cit9CisKK2ludGVyZmFjZSBCPFQ+IGV4dGVuZHMgQTxUPiB7CisgICAgdm9pZCBtMShUIHQpIGRlZmF1bHQgeyB9Cit9CisKK2NsYXNzIE15Q2xhc3M8VD4gaW1wbGVtZW50cyBCPFQ+IHsKKyAgICA8Y2FyZXQ+Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvb3ZlcnJpZGVJbXBsZW1lbnQvYmVmb3JlRW51bUNvbnN0YW50LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvb3ZlcnJpZGVJbXBsZW1lbnQvYmVmb3JlRW51bUNvbnN0YW50LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWQwNmVlYmMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvb3ZlcnJpZGVJbXBsZW1lbnQvYmVmb3JlRW51bUNvbnN0YW50LmphdmEKQEAgLTAsMCArMSwxOSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDAwLTIwMTIgSmV0QnJhaW5zIHMuci5vLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KK2VudW0gRXsKKyAgRTE7CisgIHB1YmxpYyBhYnN0cmFjdCB2b2lkIGZvPGNhcmV0Pm8oKTsKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9vdmVycmlkZUltcGxlbWVudC9iZWZvcmVFcmFzdXJlV2lsZGNhcmQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9vdmVycmlkZUltcGxlbWVudC9iZWZvcmVFcmFzdXJlV2lsZGNhcmQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YzJjZmJjCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L292ZXJyaWRlSW1wbGVtZW50L2JlZm9yZUVyYXN1cmVXaWxkY2FyZC5qYXZhCkBAIC0wLDAgKzEsNyBAQAoraW50ZXJmYWNlIEdlbmVyaWM8VD4geworICBUIGZvbygpOworfQorCitjbGFzcyBJSSBpbXBsZW1lbnRzIEdlbmVyaWM8Pz4geworICA8Y2FyZXQ+Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L292ZXJyaWRlSW1wbGVtZW50L2JlZm9yZUltcGxlbWVudEV4dGVuc2lvbk1ldGhvZHMuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9vdmVycmlkZUltcGxlbWVudC9iZWZvcmVJbXBsZW1lbnRFeHRlbnNpb25NZXRob2RzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDY5NDg3MwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9vdmVycmlkZUltcGxlbWVudC9iZWZvcmVJbXBsZW1lbnRFeHRlbnNpb25NZXRob2RzLmphdmEKQEAgLTAsMCArMSw3IEBACitpbnRlcmZhY2UgQTxUPiB7CisgICAgdm9pZCBtKFQgdCkgZGVmYXVsdCB7IH0KK30KKworY2xhc3MgTXlDbGFzczxUPiBpbXBsZW1lbnRzIEE8VD4geworICAgIDxjYXJldD4KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9vdmVycmlkZUltcGxlbWVudC9iZWZvcmVJbmNvbXBsZXRlLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvb3ZlcnJpZGVJbXBsZW1lbnQvYmVmb3JlSW5jb21wbGV0ZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFiMTBmZmQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvb3ZlcnJpZGVJbXBsZW1lbnQvYmVmb3JlSW5jb21wbGV0ZS5qYXZhCkBAIC0wLDAgKzEgQEAKK2NsYXNzIFMgPGNhcmV0PmltcGxlbWVudHMgUnVubmFibGUKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvb3ZlcnJpZGVJbXBsZW1lbnQvYmVmb3JlSW50ZXJmYWNlQW5kQWJzdHJhY3RDbGFzcy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L292ZXJyaWRlSW1wbGVtZW50L2JlZm9yZUludGVyZmFjZUFuZEFic3RyYWN0Q2xhc3MuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NGI0ZjBhCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L292ZXJyaWRlSW1wbGVtZW50L2JlZm9yZUludGVyZmFjZUFuZEFic3RyYWN0Q2xhc3MuamF2YQpAQCAtMCwwICsxLDE0IEBACithYnN0cmFjdCBjbGFzcyBBIHsKKyAgcHVibGljIGFic3RyYWN0IEQgZm9vKCk7Cit9CisKK2ludGVyZmFjZSBCIHsKKyAgRiBmb28oKTsKK30KKworY2xhc3MgQyBleHRlbmRzIEEgaW1wbGVtZW50cyBCIHsKKyAgICA8Y2FyZXQ+Cit9CisKK2NsYXNzIEQge30KK2NsYXNzIEYgZXh0ZW5kcyBEIHt9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L292ZXJyaWRlSW1wbGVtZW50L2JlZm9yZUxvbmdGaW5hbFBhcmFtZXRlckxpc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9vdmVycmlkZUltcGxlbWVudC9iZWZvcmVMb25nRmluYWxQYXJhbWV0ZXJMaXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWI5NDBlMQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9vdmVycmlkZUltcGxlbWVudC9iZWZvcmVMb25nRmluYWxQYXJhbWV0ZXJMaXN0LmphdmEKQEAgLTAsMCArMSw3IEBACitwdWJsaWMgaW50ZXJmYWNlIEEgeworICAgIHZvaWQgZm9vKFN0cmluZyBwcHBwcHBwcHBwcHAxLCBTdHJpbmcgcHBwcHBwcHBwcHBwMixTdHJpbmcgcHBwcHBwcHBwcHBwMyxTdHJpbmcgcHBwcHBwcHBwcHBwNCxTdHJpbmcgcHBwcHBwcHBwcHBwNSxTdHJpbmcgcHBwcHBwcHBwcHBwNixTdHJpbmcgcHBwcHBwcHBwcHBwNyxTdHJpbmcgcHBwcHBwcHBwcHBwOCk7Cit9CisKK2Fic3RyYWN0IGNsYXNzIEIgaW1wbGVtZW50cyBBeworICA8Y2FyZXQ+Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L292ZXJyaWRlSW1wbGVtZW50L2JlZm9yZUxvbmdQYXJhbWV0ZXJMaXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvb3ZlcnJpZGVJbXBsZW1lbnQvYmVmb3JlTG9uZ1BhcmFtZXRlckxpc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZTc3YWQ5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L292ZXJyaWRlSW1wbGVtZW50L2JlZm9yZUxvbmdQYXJhbWV0ZXJMaXN0LmphdmEKQEAgLTAsMCArMSw3IEBACitwdWJsaWMgaW50ZXJmYWNlIEEgeworICAgIHZvaWQgZm9vKFN0cmluZyBwMSwgU3RyaW5nIHAyLFN0cmluZyBwMyxTdHJpbmcgcDQsU3RyaW5nIHA1LFN0cmluZyBwNixTdHJpbmcgcDcpOworfQorCithYnN0cmFjdCBjbGFzcyBCIGltcGxlbWVudHMgQXsKKyAgICA8Y2FyZXQ+Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L292ZXJyaWRlSW1wbGVtZW50L2JlZm9yZU11bHRpcGxlSW50ZXJmYWNlSW5oZXJpdGFuY2UuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9vdmVycmlkZUltcGxlbWVudC9iZWZvcmVNdWx0aXBsZUludGVyZmFjZUluaGVyaXRhbmNlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOThhNDkxYQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9vdmVycmlkZUltcGxlbWVudC9iZWZvcmVNdWx0aXBsZUludGVyZmFjZUluaGVyaXRhbmNlLmphdmEKQEAgLTAsMCArMSwxNCBAQAoraW50ZXJmYWNlIEEKK3sKKyAgICBhYnN0cmFjdCBTdHJpbmcgZm9vKCk7Cit9CisKK2ludGVyZmFjZSBCCit7CisgICAgYWJzdHJhY3QgT2JqZWN0IGZvbygpOworfQorCitjbGFzcyBDIGltcGxlbWVudHMgQSwgQgoreworICAgIDxjYXJldD4KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvb3ZlcnJpZGVJbXBsZW1lbnQvYmVmb3JlT25UaGVMaW5lV2l0aEV4aXN0aW5nRXhwcmVzc2lvbi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L292ZXJyaWRlSW1wbGVtZW50L2JlZm9yZU9uVGhlTGluZVdpdGhFeGlzdGluZ0V4cHJlc3Npb24uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYTdjNmRjCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L292ZXJyaWRlSW1wbGVtZW50L2JlZm9yZU9uVGhlTGluZVdpdGhFeGlzdGluZ0V4cHJlc3Npb24uamF2YQpAQCAtMCwwICsxLDcgQEAKK2Fic3RyYWN0IGNsYXNzICBCYXNlICB7CisgICAgdm9pZCBmb28oKXt9Cit9CisKK2NsYXNzIFN1YiBleHRlbmRzIEJhc2UgeworICAgIGludCBpdDs8Y2FyZXQ+Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvb3ZlcnJpZGVJbXBsZW1lbnQvYmVmb3JlUmF3U3VwZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9vdmVycmlkZUltcGxlbWVudC9iZWZvcmVSYXdTdXBlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFlZmU5NWMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvb3ZlcnJpZGVJbXBsZW1lbnQvYmVmb3JlUmF3U3VwZXIuamF2YQpAQCAtMCwwICsxLDI0IEBACisvKgorICogQ29weXJpZ2h0IDIwMDAtMjAxMiBKZXRCcmFpbnMgcy5yLm8uCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworaW50ZXJmYWNlIEE8VD4geworICAgICAgICA8Uz4gdm9pZCBmb28oKTsKKyAgICB9CisKKyAgICBjbGFzcyBCIGltcGxlbWVudHMgQQorICAgIHsKKyAgICAgIDxjYXJldD4KKworICAgIH0KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9vdmVycmlkZUltcGxlbWVudC9iZWZvcmVSZXNvbHZlVHlwZVBhcmFtQ29uZmxpY3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9vdmVycmlkZUltcGxlbWVudC9iZWZvcmVSZXNvbHZlVHlwZVBhcmFtQ29uZmxpY3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZmUxOTFlCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L292ZXJyaWRlSW1wbGVtZW50L2JlZm9yZVJlc29sdmVUeXBlUGFyYW1Db25mbGljdC5qYXZhCkBAIC0wLDAgKzEsNyBAQAorYWJzdHJhY3QgY2xhc3MgQTE8WD57CisgICAgYWJzdHJhY3QgPFQ+IHZvaWQgZm9vKFQgdCwgWCB4KTsKK30KKworY2xhc3MgQjE8VD4gZXh0ZW5kcyBBMTxUPnsKKyAgPGNhcmV0PgorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L292ZXJyaWRlSW1wbGVtZW50L2JlZm9yZVNpbXBsZS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L292ZXJyaWRlSW1wbGVtZW50L2JlZm9yZVNpbXBsZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQwNmRkZmEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvb3ZlcnJpZGVJbXBsZW1lbnQvYmVmb3JlU2ltcGxlLmphdmEKQEAgLTAsMCArMSw3IEBACithYnN0cmFjdCBjbGFzcyAgSVggIHsKKyAgICB2b2lkIGZvbygpe30KK30KKworY2xhc3MgWFhDIGV4dGVuZHMgSVggeworICAgIDxjYXJldD4KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9vdmVycmlkZUltcGxlbWVudC9iZWZvcmVTaW1wbGlmeU9iamVjdFdpbGRjYXJkLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvb3ZlcnJpZGVJbXBsZW1lbnQvYmVmb3JlU2ltcGxpZnlPYmplY3RXaWxkY2FyZC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMyOTZlMWUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvb3ZlcnJpZGVJbXBsZW1lbnQvYmVmb3JlU2ltcGxpZnlPYmplY3RXaWxkY2FyZC5qYXZhCkBAIC0wLDAgKzEsMTAgQEAKK2ludGVyZmFjZSBHZW5lcmljPFQ+IHsKKyAgU29tZUdlbmVyaWM8PyBleHRlbmRzIFQ+IGZvbygpOworfQorCitjbGFzcyBJSSBpbXBsZW1lbnRzIEdlbmVyaWM8T2JqZWN0PiB7CisgIDxjYXJldD4KK30KKworY2xhc3MgU29tZUdlbmVyaWM8UD4geworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9vdmVycmlkZUltcGxlbWVudC9iZWZvcmVTdWJzdGl0dXRlQm91bmRJbk1ldGhvZFR5cGVQYXJhbS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L292ZXJyaWRlSW1wbGVtZW50L2JlZm9yZVN1YnN0aXR1dGVCb3VuZEluTWV0aG9kVHlwZVBhcmFtLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGNjY2RhMQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9vdmVycmlkZUltcGxlbWVudC9iZWZvcmVTdWJzdGl0dXRlQm91bmRJbk1ldGhvZFR5cGVQYXJhbS5qYXZhCkBAIC0wLDAgKzEsMjIgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwMC0yMDEyIEpldEJyYWlucyBzLnIuby4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCithYnN0cmFjdCBjbGFzcyBBPFQ+IHsKKyAgICAgICAgYWJzdHJhY3QgPFMgZXh0ZW5kcyBUPiB2b2lkIGZvbyhTIHMpOworICAgIH0KKworICAgIGNsYXNzIEI8Uz4gZXh0ZW5kcyBBPFRocm93YWJsZT57IC8vIEltcGxlbWVudCBtZXRob2RzCisgICAgICA8Y2FyZXQ+CisgICAgfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L292ZXJyaWRlSW1wbGVtZW50L2JlZm9yZVN1YnN0aXR1dGlvbkluVHlwZVBhcmFtZXRlcnNMaXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvb3ZlcnJpZGVJbXBsZW1lbnQvYmVmb3JlU3Vic3RpdHV0aW9uSW5UeXBlUGFyYW1ldGVyc0xpc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NmYzZDhlCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L292ZXJyaWRlSW1wbGVtZW50L2JlZm9yZVN1YnN0aXR1dGlvbkluVHlwZVBhcmFtZXRlcnNMaXN0LmphdmEKQEAgLTAsMCArMSw3IEBACithYnN0cmFjdCBjbGFzcyAgSVg8VD4gIHsKKyAgIGFic3RyYWN0IDxTIGV4dGVuZHMgVD4gdm9pZCBmb28oKXt9Cit9CisKK2NsYXNzIFhYQzxTPiBleHRlbmRzIElYPFRocm93YWJsZT4geworICAgIDxjYXJldD4KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9vdmVycmlkZUltcGxlbWVudC9iZWZvcmVUZXN0TWlzc2VkLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvb3ZlcnJpZGVJbXBsZW1lbnQvYmVmb3JlVGVzdE1pc3NlZC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJhNzAxMmYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvb3ZlcnJpZGVJbXBsZW1lbnQvYmVmb3JlVGVzdE1pc3NlZC5qYXZhCkBAIC0wLDAgKzEsOCBAQAorY2xhc3MgZnsKKyAgQG9yZy50ZXN0bmcuYW5ub3RhdGlvbnMuQmVmb3JlTWV0aG9kCisgIFN0cmluZyBmb28oKSB7cmV0dXJuICIiO30KK30KKworY2xhc3MgZmYgZXh0ZW5kcyBmIHsKKyAgPGNhcmV0PgorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9vdmVycmlkZUltcGxlbWVudC9iZWZvcmVUeXBlUGFyYW0uamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9vdmVycmlkZUltcGxlbWVudC9iZWZvcmVUeXBlUGFyYW0uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMmY5MWY2Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L292ZXJyaWRlSW1wbGVtZW50L2JlZm9yZVR5cGVQYXJhbS5qYXZhCkBAIC0wLDAgKzEsNyBAQAoraW50ZXJmYWNlIEZ1bmN0aW9uPFM+IHsKKyAgdm9pZCBmdW4oRnVuY3Rpb248Uz4gZnVuY3Rpb24pOworfQorCitjbGFzcyBCYXIgZXh0ZW5kcyBGdW5jdGlvbjxTdHJpbmc+eworICA8Y2FyZXQ+Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L292ZXJyaWRlSW1wbGVtZW50L2JlZm9yZVdpbGRjYXJkLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvb3ZlcnJpZGVJbXBsZW1lbnQvYmVmb3JlV2lsZGNhcmQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMmY0OWQ1Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L292ZXJyaWRlSW1wbGVtZW50L2JlZm9yZVdpbGRjYXJkLmphdmEKQEAgLTAsMCArMSw3IEBACitpbnRlcmZhY2UgRnVuY3Rpb248UywgUj4geworICBSIGZ1bihTIHMpOworfQorCitjbGFzcyBCYXIgZXh0ZW5kcyBGdW5jdGlvbjxTdHJpbmcsID8+eworICA8Y2FyZXQ+Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L3NsaWNlL2JhY2t3YXJkL0Fub25DbGFzcy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L3NsaWNlL2JhY2t3YXJkL0Fub25DbGFzcy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk3OGE5M2YKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvc2xpY2UvYmFja3dhcmQvQW5vbkNsYXNzLmphdmEKQEAgLTAsMCArMSwxNyBAQAorY2xhc3MgVGVzdCB7CisKKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisgICAgICAgIGZpbmFsIFN0cmluZyBhID0gPGZsb3duMTE+YXJnc1swXTsKKyAgICAgICAgZmluYWwgU3RyaW5nIGIgPSBhcmdzWzFdOworICAgICAgICBuZXcgUnVubmFibGUoKSB7CisgICAgICAgICAgICBwdWJsaWMgdm9pZCBydW4oKSB7CisgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKGYoPGZsb3duMT5hLCBiKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0ucnVuKCk7CisgICAgfQorCisgICAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGYoU3RyaW5nIGEsIFN0cmluZyBiKSB7CisgICAgICAgIHJldHVybiA8Y2FyZXQ+YSArIGI7CisgICAgfQorCit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L3NsaWNlL2JhY2t3YXJkL0Fzc2lnbm1lbnQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9zbGljZS9iYWNrd2FyZC9Bc3NpZ25tZW50LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzljMDZmZAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9zbGljZS9iYWNrd2FyZC9Bc3NpZ25tZW50LmphdmEKQEAgLTAsMCArMSw3IEBACitjbGFzcyBWIHsKKyAgeworICAgIGludCBpOworICAgIGk8Y2FyZXQ+PSA8Zmxvd24xPjE7CisgICAgCisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvc2xpY2UvYmFja3dhcmQvQ29tcGxleFR5cGVFcmFzdXJlLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvc2xpY2UvYmFja3dhcmQvQ29tcGxleFR5cGVFcmFzdXJlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTNmYzM4MQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9zbGljZS9iYWNrd2FyZC9Db21wbGV4VHlwZUVyYXN1cmUuamF2YQpAQCAtMCwwICsxLDg5IEBACitjbGFzcyBQYWlyPEEsIEI+IHsKKyAgcHVibGljIGZpbmFsIEEgZmlyc3Q7CisgIHB1YmxpYyBmaW5hbCBCIHNlY29uZDsKKworICBwdWJsaWMgUGFpcihBIGZpcnN0LCBCIHNlY29uZCkgeworICAgIHRoaXMuZmlyc3QgPSA8Zmxvd24xMTE+Zmlyc3Q7CisgICAgdGhpcy5zZWNvbmQgPSBzZWNvbmQ7CisgIH0KKworICBwdWJsaWMgZmluYWwgQSBnZXRGaXJzdCgpIHsKKyAgICByZXR1cm4gPGZsb3duMTE+Zmlyc3Q7CisgIH0KKworICBwdWJsaWMgZmluYWwgQiBnZXRTZWNvbmQoKSB7CisgICAgcmV0dXJuIHNlY29uZDsKKyAgfQorCisgIHB1YmxpYyBzdGF0aWMgPEEsIEI+IFBhaXI8QSwgQj4gY3JlYXRlKEEgZmlyc3QsIEIgc2Vjb25kKSB7CisgICAgcmV0dXJuIG5ldyBQYWlyPEEsQj4oPGZsb3duMTExMT5maXJzdCwgc2Vjb25kKTsKKyAgfQorCisgIHB1YmxpYyBmaW5hbCBib29sZWFuIGVxdWFscyhPYmplY3Qgbyl7CisgICAgcmV0dXJuIG8gaW5zdGFuY2VvZiBQYWlyICYmIGZhbHNlOworICB9CisKKyAgcHVibGljIGZpbmFsIGludCBoYXNoQ29kZSgpeworICAgIGludCBoYXNoQ29kZSA9IDA7CisgICAgaWYgKGZpcnN0ICE9IG51bGwpeworICAgICAgaGFzaENvZGUgKz0gaGFzaENvZGUoZmlyc3QpOworICAgIH0KKyAgICBpZiAoc2Vjb25kICE9IG51bGwpeworICAgICAgaGFzaENvZGUgKz0gaGFzaENvZGUoc2Vjb25kKTsKKyAgICB9CisgICAgcmV0dXJuIGhhc2hDb2RlOworICB9CisKKyAgcHJpdmF0ZSBzdGF0aWMgaW50IGhhc2hDb2RlKGZpbmFsIE9iamVjdCBvKSB7CisgICAgcmV0dXJuIG8uaGFzaENvZGUoKTsKKyAgfQorCisgIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7CisgICAgcmV0dXJuICI8IiArIGZpcnN0ICsgIiwiICsgc2Vjb25kICsgIj4iOworICB9Cit9CitjbGFzcyBSZWY8VD4geworICBwcml2YXRlIFQgbXlWYWx1ZTsKKworICBwdWJsaWMgUmVmKCkgeyB9CisKKyAgcHVibGljIFJlZihUIHZhbHVlKSB7CisgICAgbXlWYWx1ZSA9IHZhbHVlOworICB9CisKKyAgcHVibGljIGJvb2xlYW4gaXNOdWxsICgpIHsKKyAgICByZXR1cm4gbXlWYWx1ZSA9PSBudWxsOworICB9CisKKyAgcHVibGljIFQgZ2V0ICgpIHsKKyAgICByZXR1cm4gbXlWYWx1ZTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHNldCAoVCB2YWx1ZSkgeworICAgIG15VmFsdWUgPSB2YWx1ZTsKKyAgfQorCisgIHB1YmxpYyBzdGF0aWMgPFQ+IFJlZjxUPiBjcmVhdGUoVCB2YWx1ZSkgeworICAgIHJldHVybiBuZXcgUmVmPFQ+KHZhbHVlKTsKKyAgfQorCisgIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7CisgICAgcmV0dXJuIG15VmFsdWUgPT0gbnVsbCA/IG51bGwgOiBteVZhbHVlLnRvU3RyaW5nKCk7CisgIH0KK30KK2NsYXNzIFBzaVZhcmlhYmxlIHt9CitjbGFzcyBQc2lGaWVsZCBleHRlbmRzIFBzaVZhcmlhYmxlIHt9CisKK2NsYXNzIFMgeworICAgICAgICBwcml2YXRlIHN0YXRpYyBQYWlyPGJvb2xlYW5bXSwgQm9vbGVhbj4gcGFyc2VGbGFncyhmaW5hbCBTdHJpbmcgc3RyaW5nKSB7CisgICAgICAgICAgYm9vbGVhbiByZXR1cm5GbGFnID0gZmFsc2U7CisgICAgICAgICAgZmluYWwgYm9vbGVhbltdIHJlc3VsdCA9IG5ldyBib29sZWFuWzBdOworICAgICAgICAgIHJldHVybiBQYWlyLmNyZWF0ZShyZXN1bHQsIHJldHVybkZsYWcpOworICAgICAgICB9CisgICAgICAgIHZvaWQgcHNpZmxvdygpIHsKKyAgICAgICAgICAgIFJlZjxQYWlyPFBzaUZpZWxkLCBCb29sZWFuPj4gYW5jaG9yUmVmID0gbmV3IFJlZjxQYWlyPFBzaUZpZWxkLCBCb29sZWFuPj4oKTsKKyAgICAgICAgICAgIFBhaXI8UHNpRmllbGQsIEJvb2xlYW4+IGZpZWxkQW5jaG9yID0gYW5jaG9yUmVmLmdldCgpOworCisgICAgICAgICAgICBQc2lWYXJpYWJsZSA8Y2FyZXQ+cHNpVmFyaWFibGUgPSA8Zmxvd24xPmZpZWxkQW5jaG9yLmdldEZpcnN0KCk7CisgICAgICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvc2xpY2UvYmFja3dhcmQvQ29uZGl0aW9uYWwuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9zbGljZS9iYWNrd2FyZC9Db25kaXRpb25hbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE2ZTA3Y2EKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvc2xpY2UvYmFja3dhcmQvQ29uZGl0aW9uYWwuamF2YQpAQCAtMCwwICsxLDEzIEBACitjbGFzcyBzIHsKKyAgICB7CisgICAgICB4KDxmbG93bjExMjExPiJ4eHgiKTsKKyAgICB9CisgICAgU3RyaW5nIHgoU3RyaW5nIGcpIHsKKyAgICAgICAgU3RyaW5nIGQgPSA8Zmxvd24xPmZvbyg8Zmxvd24xMTIxPmcpOworICAgICAgICByZXR1cm4gPGNhcmV0PmQ7CisgICAgfQorCisgICAgcHJpdmF0ZSBTdHJpbmcgZm9vKFN0cmluZyBpKSB7CisgICAgICAgIHJldHVybiA8Zmxvd24xMT5pPT1udWxsID8gPGZsb3duMTExPm51bGwgOiA8Zmxvd24xMTI+aTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L3NsaWNlL2JhY2t3YXJkL0NvbmRpdGlvbmFsMi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L3NsaWNlL2JhY2t3YXJkL0NvbmRpdGlvbmFsMi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM1NDk4NjYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvc2xpY2UvYmFja3dhcmQvQ29uZGl0aW9uYWwyLmphdmEKQEAgLTAsMCArMSwxNyBAQAorY2xhc3MgVGVzdCB7CisKKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisgICAgICAgIGZpbmFsIFN0cmluZyBhID0gPGZsb3duMTEyMT5hcmdzWzBdOworICAgICAgICBmaW5hbCBTdHJpbmcgYiA9IDxmbG93bjExPlRlc3QuY2xhc3MgPT0gbnVsbCA/IDxmbG93bjExMT5hcmdzWzFdIDogPGZsb3duMTEyPmE7CisgICAgICAgIG5ldyBSdW5uYWJsZSgpIHsKKyAgICAgICAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKKyAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oZihhLCA8Zmxvd24xPmIpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfS5ydW4oKTsKKyAgICB9CisKKyAgICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgZihTdHJpbmcgYSwgU3RyaW5nIGIpIHsKKyAgICAgICAgcmV0dXJuIGEgKyA8Y2FyZXQ+YjsKKyAgICB9CisKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9zbGljZS9iYWNrd2FyZC9Eb3VibGVOdWxscy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L3NsaWNlL2JhY2t3YXJkL0RvdWJsZU51bGxzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzEzNjAxNAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9zbGljZS9iYWNrd2FyZC9Eb3VibGVOdWxscy5qYXZhCkBAIC0wLDAgKzEsOSBAQAorcHVibGljIGNsYXNzIFggIHsKKyAgU3RyaW5nIDxjYXJldD5sOworICB7CisgICAgbCA9IG51bGw7CisgIH0KKyAgeworICAgIGwgPSBudWxsOworICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvc2xpY2UvYmFja3dhcmQvRHVwU2xpY2UuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9zbGljZS9iYWNrd2FyZC9EdXBTbGljZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE5ODNlZTYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvc2xpY2UvYmFja3dhcmQvRHVwU2xpY2UuamF2YQpAQCAtMCwwICsxLDEzIEBACitwdWJsaWMgY2xhc3MgRHVwU2xpY2UgeworICAgIGludCA8Y2FyZXQ+ZmllbGQ7IAorCisgICAgdm9pZCBtdWx0aXBseShpbnQgZnApIHsKKyAgICAgICAgdGhpcy5maWVsZCA9IGZwOworICAgICAgICBtdWx0aXBsYXkyKDExMTExMTExMTEpOworICAgIH0KKworICAgIHZvaWQgbXVsdGlwbGF5MihpbnQgaSkgeworICAgICAgICBmaWVsZCA9IGk7CisgICAgICAgIG11bHRpcGx5KGkpOworICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9zbGljZS9iYWNrd2FyZC9EdXBsaWNhdGUuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9zbGljZS9iYWNrd2FyZC9EdXBsaWNhdGUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ODEyZjhkCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L3NsaWNlL2JhY2t3YXJkL0R1cGxpY2F0ZS5qYXZhCkBAIC0wLDAgKzEsMzIgQEAKK2NsYXNzIFRlc3QgeworICAgIGJvb2xlYW4gPGNhcmV0PmZpZTsKKyAgICBpbnQgZihUIHQpIHsKKyAgICAgICAgZmllID0gdC50OworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICB2b2lkIGcoVCB0KSB7CisvLyAgICAgICAgdC50ID0gZmFsc2U7CisgICAgICAgIGZpZSA9IHRydWU7CisgICAgfQorICAgIHZvaWQgaChUIHQpIHsKKyAgICAgICAgYm9vbGVhbiB0MSA9IHQudDsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIHQudCA9IGZhbHNlOworICAgICAgICAgICAgZyh0KTsKKyAgICAgICAgfQorICAgICAgICBmaW5hbGx5IHsKKyAgICAgICAgICAgIHQudCA9IHQxOworICAgICAgICB9CisgICAgfQorCisKKyAgICBwcml2YXRlIGNsYXNzIFQgeworICAgICAgICBwdWJsaWMgYm9vbGVhbiB0ID0gdHJ1ZTsKKworICAgICAgICBwdWJsaWMgYm9vbGVhbiBpc1QoKSB7CisgICAgICAgICAgICBpc1QoKTsKKyAgICAgICAgICAgIHJldHVybiB0OworICAgICAgICB9CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L3NsaWNlL2JhY2t3YXJkL0R1cGxpY2F0ZUxlYXZlcy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L3NsaWNlL2JhY2t3YXJkL0R1cGxpY2F0ZUxlYXZlcy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE4NDQwZWMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvc2xpY2UvYmFja3dhcmQvRHVwbGljYXRlTGVhdmVzLmphdmEKQEAgLTAsMCArMSwyMyBAQAorcHVibGljIGNsYXNzIFggIHsKKyAgICBTdHJpbmcgPGNhcmV0Pmw7CisKKyAgICBwdWJsaWMgWCgpIHsKKyAgICAgICAgZnMoIm9vIiwgdGhpcyk7CisgICAgfQorCisgICAgdm9pZCBmcyhTdHJpbmcgdCwgWCB4KQorICAgIHsKKyAgICAgICAgeC5zZXQodCk7CisgICAgfQorICAgICAgICAgICAgICAgIC8vCisgICAgdm9pZCBzZXQoU3RyaW5nIGQpIHsKKyAgICAgICAgbCA9IGQ7CisgICAgfQorfQorCitjbGFzcyBYWCBleHRlbmRzIFggeworICAgIHZvaWQgZnMoU3RyaW5nIHQsIFggeCkgeworICAgICAgICB4LmZzKHQsIHgpOworICAgIH0KK30KKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L3NsaWNlL2JhY2t3YXJkL0VudW1Db25zdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L3NsaWNlL2JhY2t3YXJkL0VudW1Db25zdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRlY2NkODIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvc2xpY2UvYmFja3dhcmQvRW51bUNvbnN0LmphdmEKQEAgLTAsMCArMSw2IEBACisgICAgZW51bSBNIHsKKyAgICAgICAgWCg8Zmxvd24xPjk5OSk7CisKKyAgICAgICAgTShpbnQgPGNhcmV0PmkpIHsKKyAgICAgICAgfQorICAgIH0KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9zbGljZS9iYWNrd2FyZC9HZW5lcmljQm94aW5nLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvc2xpY2UvYmFja3dhcmQvR2VuZXJpY0JveGluZy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE4ODg5NDQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvc2xpY2UvYmFja3dhcmQvR2VuZXJpY0JveGluZy5qYXZhCkBAIC0wLDAgKzEsMjEgQEAKK3B1YmxpYyBjbGFzcyBCb3hpIHsKKyAgICBwcml2YXRlIGludGVyZmFjZSBGb288VD4geworICAgICAgICAgICAgVCB0KCk7CisgICAgICAgIH0KKworICAgICAgICAgeworICAgICAgICAgICAgRm9vPFN0cmluZz4gYSA9IG5ldyBGb288U3RyaW5nPigpIHsKKyAgICAgICAgICAgICAgICBwdWJsaWMgU3RyaW5nIHQoKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAiYSI7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIEZvbzxJbnRlZ2VyPiBiID0gbmV3IEZvbzxJbnRlZ2VyPigpIHsKKyAgICAgICAgICAgICAgICBwdWJsaWMgSW50ZWdlciB0KCkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gPGZsb3duMTE+NDI7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfTsKKworICAgICAgICAgICAgaW50IDxjYXJldD5pID0gPGZsb3duMT5iLnQoKTsKKyAgICAgICAgfQorCit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L3NsaWNlL2JhY2t3YXJkL0dlbmVyaWNJbXBsZW1lbnQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9zbGljZS9iYWNrd2FyZC9HZW5lcmljSW1wbGVtZW50LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTFkMGVlNQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9zbGljZS9iYWNrd2FyZC9HZW5lcmljSW1wbGVtZW50LmphdmEKQEAgLTAsMCArMSwyMSBAQAorcHVibGljIGNsYXNzIFggeworICAgIHsKKyAgICAgICAgUHJvYzxTdHJpbmc+IHByb2NzID0gbmV3IFByb2M8U3RyaW5nPigpIHsKKyAgICAgICAgICAgIHB1YmxpYyB2b2lkIGYoU3RyaW5nIDxjYXJldD5zKSB7CisgICAgICAgICAgICAgICAgLy9UbyBjaGFuZ2UgYm9keSBvZiBpbXBsZW1lbnRlZCBtZXRob2RzIHVzZSBGaWxlIHwgU2V0dGluZ3MgfCBGaWxlIFRlbXBsYXRlcy4KKyAgICAgICAgICAgIH0KKyAgICAgICAgfTsKKyAgICAgICAgUHJvYzxJbnRlZ2VyPiBwcm9jaSA9IG5ldyBQcm9jPEludGVnZXI+KCkgeworICAgICAgICAgICAgcHVibGljIHZvaWQgZihJbnRlZ2VyIHMpIHsKKyAgICAgICAgICAgICAgICAvL1RvIGNoYW5nZSBib2R5IG9mIGltcGxlbWVudGVkIG1ldGhvZHMgdXNlIEZpbGUgfCBTZXR0aW5ncyB8IEZpbGUgVGVtcGxhdGVzLgorICAgICAgICAgICAgfQorICAgICAgICB9OworCisgICAgICAgIHByb2NzLmYoPGZsb3duMT4iIik7CisgICAgICAgIHByb2NpLmYoMCk7CisgICAgfQorfQorCitpbnRlcmZhY2UgUHJvYzxUPiB7CisgICAgICB2b2lkIGYoVCB0KTsKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9zbGljZS9iYWNrd2FyZC9HZW5lcmljSW1wbGVtZW50Mi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L3NsaWNlL2JhY2t3YXJkL0dlbmVyaWNJbXBsZW1lbnQyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmMzZjVmMQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9zbGljZS9iYWNrd2FyZC9HZW5lcmljSW1wbGVtZW50Mi5qYXZhCkBAIC0wLDAgKzEsMjEgQEAKK3B1YmxpYyBjbGFzcyBYIHsKKyAgICB7CisgICAgICAgIFByb2M8U3RyaW5nPiBwcm9jcyA9IG5ldyBQcm9jPFN0cmluZz4oKSB7CisgICAgICAgICAgICBwdWJsaWMgdm9pZCBmKFN0cmluZyBzKSB7CisgICAgICAgICAgICAgICAgLy9UbyBjaGFuZ2UgYm9keSBvZiBpbXBsZW1lbnRlZCBtZXRob2RzIHVzZSBGaWxlIHwgU2V0dGluZ3MgfCBGaWxlIFRlbXBsYXRlcy4KKyAgICAgICAgICAgIH0KKyAgICAgICAgfTsKKyAgICAgICAgUHJvYzxJbnRlZ2VyPiBwcm9jaSA9IG5ldyBQcm9jPEludGVnZXI+KCkgeworICAgICAgICAgICAgcHVibGljIHZvaWQgZihJbnRlZ2VyIDxjYXJldD5zKSB7CisgICAgICAgICAgICAgICAgLy9UbyBjaGFuZ2UgYm9keSBvZiBpbXBsZW1lbnRlZCBtZXRob2RzIHVzZSBGaWxlIHwgU2V0dGluZ3MgfCBGaWxlIFRlbXBsYXRlcy4KKyAgICAgICAgICAgIH0KKyAgICAgICAgfTsKKworICAgICAgICBwcm9jcy5mKCIiKTsKKyAgICAgICAgcHJvY2kuZig8Zmxvd24xPjApOworICAgIH0KK30KKworaW50ZXJmYWNlIFByb2M8VD4geworICAgICAgdm9pZCBmKFQgdCk7Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvc2xpY2UvYmFja3dhcmQvR2VuZXJpY3NTdWJzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L3NsaWNlL2JhY2t3YXJkL0dlbmVyaWNzU3Vic3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNDQwMTQ5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L3NsaWNlL2JhY2t3YXJkL0dlbmVyaWNzU3Vic3QuamF2YQpAQCAtMCwwICsxLDI4IEBACitpbXBvcnQgamF2YS51dGlsLk1hcDsKKworY2xhc3MgTTxYLCBZPiB7CisgICAgTWFwPFgsIFk+IG07CisgICAgWSB5OworCisgICAgcHVibGljIE0oTWFwPFgsIFk+IG0sIFkgeSkgeworICAgICAgICB0aGlzLm0gPSBtOworICAgICAgICB0aGlzLnkgPSA8Zmxvd24xMTExMT55OworICAgIH0KKworICAgIHB1YmxpYyBzdGF0aWMgPE1YLCBNWT4gTTxNWCwgTVk+IG1ha2VNKE1ZIHkpIHsKKyAgICAgICAgcmV0dXJuIG5ldyBNPE1YLCBNWT4obnVsbCwgPGZsb3duMTExMTExPnkpOworICAgIH0KKworICAgIFkgZ2V0KFggeCkgeworICAgICAgICBZIHJlcyA9IDxmbG93bjExMTIxPm0uZ2V0KHgpOworICAgICAgICByZXR1cm4gPGZsb3duMTExPnJlcyA9PSBudWxsID8gPGZsb3duMTExMT55IDogPGZsb3duMTExMj5yZXM7CisgICAgfQorCisgICAgcHVibGljIHN0YXRpYyB2b2lkIGcoKSB7CisgICAgICAgIFN0cmluZyA8Y2FyZXQ+YSA9IDxmbG93bjE+ZihNLjxTdHJpbmcsIFN0cmluZz5tYWtlTSg8Zmxvd24xMTExMTExPiJhIiksICJrIik7CisgICAgfQorCisgICAgcHVibGljIHN0YXRpYyA8QT4gQSBmKE08QSwgQT4gYSwgQSBrYSkgeworICAgICAgICByZXR1cm4gPGZsb3duMTE+YS5nZXQoa2EpOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvc2xpY2UvYmFja3dhcmQvSW50ZXJNZXRob2QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9zbGljZS9iYWNrd2FyZC9JbnRlck1ldGhvZC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRlZTEzYTUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvc2xpY2UvYmFja3dhcmQvSW50ZXJNZXRob2QuamF2YQpAQCAtMCwwICsxLDI0IEBACitwdWJsaWMgY2xhc3MgV1cgeworICAgIHZvaWQgZihTdHJpbmcgZGRkKSB7CisgICAgICAgIGlmIChoYXNoQ29kZSgpID09IDApCisgICAgICAgICAgICBkZGQgPSA8Zmxvd24xMTExPiJkZCI7CisgICAgICAgIGZvbyg8Zmxvd24xMTE+ZGRkKTsKKyAgICB9CisKKyAgICB7CisgICAgICAgIGYoPGZsb3duMTExMj4ieHh4Iik7CisgICAgfQorCisgICAgeworICAgICAgICB4KDxmbG93bjExMjE+Inp6eiIpOworICAgIH0KKworICAgIFN0cmluZyB4KFN0cmluZyBnKSB7CisgICAgICAgIFN0cmluZyBkID0gPGZsb3duMT5mb28oPGZsb3duMTEyPmcpOworICAgICAgICByZXR1cm4gPGNhcmV0PmQ7CisgICAgfQorCisgICAgcHJpdmF0ZSBTdHJpbmcgZm9vKFN0cmluZyBpKSB7CisgICAgICAgIHJldHVybiA8Zmxvd24xMT5pOworICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9zbGljZS9iYWNrd2FyZC9Mb2NhbFZhci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L3NsaWNlL2JhY2t3YXJkL0xvY2FsVmFyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTE3NDdiYwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9zbGljZS9iYWNrd2FyZC9Mb2NhbFZhci5qYXZhCkBAIC0wLDAgKzEsNiBAQAorY2xhc3MgUyB7CisgU3RyaW5nIHgoU3RyaW5nIGcpIHsKKyAgU3RyaW5nIGQgPSAoU3RyaW5nKSg8Zmxvd24xPmcpOworICByZXR1cm4gPGNhcmV0PmQ7CisgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L3NsaWNlL2JhY2t3YXJkL01ldGhvZENhbGwuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9zbGljZS9iYWNrd2FyZC9NZXRob2RDYWxsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzNkMDdkMQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9zbGljZS9iYWNrd2FyZC9NZXRob2RDYWxsLmphdmEKQEAgLTAsMCArMSw5IEBACitjbGFzcyBUMiB7CisgICAgdm9pZCBmKCkgeworICAgICAgICBpbnQgaSA9IDxjYXJldD54KCk7CisgICAgfQorCisgICAgcHJpdmF0ZSBpbnQgeCgpIHsKKyAgICAgICAgcmV0dXJuIDxmbG93bjE+MDsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L3NsaWNlL2JhY2t3YXJkL01ldGhvZFJldHVybi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L3NsaWNlL2JhY2t3YXJkL01ldGhvZFJldHVybi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVjM2FmY2IKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvc2xpY2UvYmFja3dhcmQvTWV0aG9kUmV0dXJuLmphdmEKQEAgLTAsMCArMSwyNyBAQAorCitjbGFzcyBzIHsKKyAgICB7CisgICAgICB4KDxmbG93bjEyMTE+Inh4eCIpOworICAgIH0KKyAgICBTdHJpbmcgeChTdHJpbmcgZykgeworICAgICAgICBTdHJpbmcgZCA9IDxmbG93bjE+Zm9vKDxmbG93bjEyMT5nKTsKKyAgICAgICAgcmV0dXJuIDxjYXJldD5kOworICAgIH0KKworICAgIHByaXZhdGUgU3RyaW5nIGZvbyhTdHJpbmcgaSkgeworICAgICAgICBpZiAoaT09bnVsbCkgeworICAgICAgICAgICAgbmV3IENhbGxhYmxlPFN0cmluZz4oKXsKKyAgICAgICAgICAgICAgICBwdWJsaWMgU3RyaW5nIGNhbGwoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJ4eHh4eHh4eHgiOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH07CisgICAgICAgICAgICByZXR1cm4gPGZsb3duMTE+bnVsbDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHJldHVybiA8Zmxvd24xMj5pOworICAgICAgICB9CisgICAgfQorfQorCitpbnRlcmZhY2UgQ2FsbGFibGU8Vj4geworICAgIFYgY2FsbCgpIHRocm93cyBFeGNlcHRpb247Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvc2xpY2UvYmFja3dhcmQvTnVsbHMuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9zbGljZS9iYWNrd2FyZC9OdWxscy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk0NzM4ZjIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvc2xpY2UvYmFja3dhcmQvTnVsbHMuamF2YQpAQCAtMCwwICsxLDU3IEBACitpbXBvcnQgb3JnLmpldGJyYWlucy5hbm5vdGF0aW9ucy5Ob3ROdWxsOworaW1wb3J0IG9yZy5qZXRicmFpbnMuYW5ub3RhdGlvbnMuTnVsbGFibGU7CisKK3B1YmxpYyBjbGFzcyBYICB7CisgICAgcHJpdmF0ZSBmaW5hbCBzdGF0aWMgU3RyaW5nIENPTiA9ICIiOworICAgIFN0cmluZyA8Y2FyZXQ+bDsKKyAgICBwcml2YXRlIFN0cmluZyBkOworCisgICAgcHVibGljIFgoU3RyaW5nIGcpIHsKKyAgICAgICAgc2V0KCJ4eHgiKTsKKyAgICAgICAgc2V0KGcpOworICAgICAgICBmcygib28iLCB0aGlzKTsKKworICAgICAgICBTdHJpbmcgbyA9IChTdHJpbmcpKChudWxsKSk7CisgICAgICAgIHNldChvKTsKKworICAgICAgICBzZXQobmV3IFN0cmluZygpKTsKKyAgICAgICAgc2V0KG5uKCkpOworICAgICAgICBzZXQoQ09OKTsKKyAgICAgICAgU3RyaW5nIG5uID0gZyA9PSBudWxsID8gQ09OIDogZzsKKyAgICAgICAgc2V0KG5uKTsKKworICAgICAgICBTdHJpbmcgb3RoZXIgPSBnID09ICIiID8gQ09OIDogZzsKKyAgICAgICAgc2V0KG90aGVyKTsKKworICAgICAgICBnLmhhc2hDb2RlKCk7IC8vIGcgZGVyZWZlcm5jZWQgYmVmb3JlIHVzZSwgbXVzdCBiZSBOTgorICAgICAgICBzZXQoZyk7CisKKyAgICAgICAgc2V0KG51KCkpOworICAgICAgICBzZXQoaHooKSk7CisgICAgfQorCisgICAgQE5vdE51bGwKKyAgICBTdHJpbmcgbm4oKSB7CisgICAgICAgIHJldHVybiAiIjsKKyAgICB9CisgICAgQE51bGxhYmxlCisgICAgU3RyaW5nIG51KCkgeworICAgICAgICByZXR1cm4gIiI7CisgICAgfQorICAgIFN0cmluZyBoeigpIHsKKyAgICAgICAgcmV0dXJuIGQ7CisgICAgfQorICAgIHZvaWQgZnMoQE51bGxhYmxlIFN0cmluZyB0LCBYIHgpCisgICAgeworICAgICAgICB4LnNldCh0KTsKKworICAgICAgICB4LnNldCh0ID09IG51bGwgPyAibnVsbCIgOiB0KTsKKyAgICB9CisKKyAgICB2b2lkIHNldChTdHJpbmcgZCkgeworICAgICAgICBsID0gZDsKKyAgICB9CisgICAgdm9pZCBzZXRGcm9tTk4oQE5vdE51bGwgU3RyaW5nIGQpIHsKKyAgICAgICAgbCA9IGQ7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L3NsaWNlL2JhY2t3YXJkL092ZXJsb2FkQ29uc3RydWN0b3IuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9zbGljZS9iYWNrd2FyZC9PdmVybG9hZENvbnN0cnVjdG9yLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWUwZTkwYQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9zbGljZS9iYWNrd2FyZC9PdmVybG9hZENvbnN0cnVjdG9yLmphdmEKQEAgLTAsMCArMSwxNyBAQAoraW1wb3J0IGphdmEudXRpbC4qOworCitwdWJsaWMgY2xhc3MgIEF1dG8geworICAgIHB1YmxpYyBBdXRvKEFycmF5TGlzdCB3LCBSdW5uYWJsZSA8Y2FyZXQ+aSkgeworICAgICAgICB0aGlzKHcsIG51bGwsbnVsbCk7CisgICAgfQorICAgIHB1YmxpYyBBdXRvKEFycmF5TGlzdCB3LCBSdW5uYWJsZSAgaSxSdW5uYWJsZSBvKSB7CisgICAgICAgIG8uaGFzaENvZGUoKTsKKyAgICB9CisKKyAgICB7CisKKyAgICAgICAgbmV3IEF1dG8obnVsbCxudWxsLG51bGwpOworICAgICAgICBuZXcgQXV0byhudWxsLDxmbG93bjE+bnVsbCk7CisgICAgfQorCit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvc2xpY2UvYmFja3dhcmQvT3ZlcnJpZGVzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvc2xpY2UvYmFja3dhcmQvT3ZlcnJpZGVzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2Q3NWVlYwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9zbGljZS9iYWNrd2FyZC9PdmVycmlkZXMuamF2YQpAQCAtMCwwICsxLDIyIEBACitwdWJsaWMgY2xhc3MgT3ZlcnJpZGVTbGljZSB7CisgICAgaW50ZXJmYWNlIEkgeworICAgICAgICBpbnQgZihpbnQgaSk7CisgICAgfQorICAgIGNsYXNzIE8gaW1wbGVtZW50cyBJIHsKKyAgICAgICAgcHVibGljIGludCBmKGludCBpKSB7CisgICAgICAgICAgICByZXR1cm4gPGZsb3duMTE+aTsKKyAgICAgICAgfQorICAgIH0KKyAgICBjbGFzcyBPMCBpbXBsZW1lbnRzIEkgeworICAgICAgICBwdWJsaWMgaW50IGYoaW50IGkpIHsKKyAgICAgICAgICAgIHJldHVybiA8Zmxvd24xMj4wOworICAgICAgICB9CisgICAgfQorCisgICAgeworICAgICAgICBmKDxmbG93bjExMTE+MSwgbmV3IE8oKSk7CisgICAgfQorICAgIHZvaWQgZihpbnQgYywgSSBpKSB7CisgICAgICAgIGludCA8Y2FyZXQ+eCA9IDxmbG93bjE+aS5mKDxmbG93bjExMT5jKTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvc2xpY2UvYmFja3dhcmQvUG9zdGZpeC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L3NsaWNlL2JhY2t3YXJkL1Bvc3RmaXguamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZjVmZjg3Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L3NsaWNlL2JhY2t3YXJkL1Bvc3RmaXguamF2YQpAQCAtMCwwICsxLDEwIEBACitjbGFzcyBJbmNyRGVjcklnbm9yZSB7CisJaW50IDxjYXJldD5pID0gPGZsb3duMT4wOworCisJaW50IGluY3IoKSB7CisJCXJldHVybiA8Zmxvd24yPmkrKzsKKwl9CisJaW50IGRlY3IoKSB7CisJCXJldHVybiA8Zmxvd24zPi0taTsKKwl9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L3NsaWNlL2JhY2t3YXJkL1NpbXBsZS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L3NsaWNlL2JhY2t3YXJkL1NpbXBsZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxZWE3MDFmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L3NsaWNlL2JhY2t3YXJkL1NpbXBsZS5qYXZhCkBAIC0wLDAgKzEsMTAgQEAKK2NsYXNzIFdXIHsKK3sgU3RyaW5nIGRkZDsKKyAgZGRkID0gZm9vKDxmbG93bjE+MSk7Cit9ICAgICAgICAgICAgICAgICAKKworcHJpdmF0ZSBTdHJpbmcgZm9vKGludCBpKSB7CisgIHJldHVybiA8Y2FyZXQ+aSsiIjsKK30KKworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9zbGljZS9iYWNrd2FyZC9UdXBsZS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L3NsaWNlL2JhY2t3YXJkL1R1cGxlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTg5MTM1YgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9zbGljZS9iYWNrd2FyZC9UdXBsZS5qYXZhCkBAIC0wLDAgKzEsMTQgQEAKK2NsYXNzIFR1cGxlPFgsWT4geworICAgIHB1YmxpYyBmaW5hbCBYIHg7CisgICAgcHVibGljIGZpbmFsIFkgeTsKKyAgICBwdWJsaWMgVHVwbGUoWCB4LFkgeSkge3RoaXMueD14OyB0aGlzLnk9eTt9CisKKyAgICBwdWJsaWMgWCBnZXRYKCkgeworICAgICAgICByZXR1cm4gPGNhcmV0Png7CisgICAgfQorCisgICAgcHJpdmF0ZSBzdGF0aWMgPFgsWT4gVHVwbGU8WCxZPiBjb3B5KFR1cGxlPFgsWT4gdCkgeworICAgICAgICByZXR1cm4gbmV3IFR1cGxlPFgsWT4odC54LCB0LnkpOworICAgIH0KKworfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L3NsaWNlL2JhY2t3YXJkL1R5cGVBd2FyZS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L3NsaWNlL2JhY2t3YXJkL1R5cGVBd2FyZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZkODU3YWYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvc2xpY2UvYmFja3dhcmQvVHlwZUF3YXJlLmphdmEKQEAgLTAsMCArMSwxNyBAQAorY2xhc3MgQSB7CisgICAgcHJpdmF0ZSBzdGF0aWMgY2xhc3MgVHVwbGU8WCxZPiB7CisgICAgICAgIHB1YmxpYyBmaW5hbCBYIHg7CisgICAgICAgIHB1YmxpYyBmaW5hbCBZIHk7CisgICAgICAgIHB1YmxpYyBUdXBsZShYIHgsWSB5KSB7dGhpcy54PTxmbG93bjExPng7IHRoaXMueT15O30KKyAgICB9CisKKyAgICBwcml2YXRlIHN0YXRpYyBjbGFzcyBGb28geworICAgICAgICB2b2lkIGYoKSB7CisgICAgICAgICAgICBUdXBsZTxJbnRlZ2VyLEludGVnZXI+IHQxID0gbmV3IFR1cGxlPEludGVnZXIsSW50ZWdlcj4oMSwyKTsKKyAgICAgICAgICAgIFR1cGxlPFN0cmluZyxTdHJpbmc+IHQyID0gbmV3IFR1cGxlPFN0cmluZyxTdHJpbmc+KDxmbG93bjExMT4iYSIsImIiKTsKKyAgICAgICAgICAgIFR1cGxlPEZvbyxGb28+IHQydyA9IG5ldyBUdXBsZTxGb28sRm9vPihudWxsLG51bGwpOworICAgICAgICAgICAgCisgICAgICAgICAgICBTdHJpbmcgPGNhcmV0PnggPSB0Mi48Zmxvd24xPng7CisgICAgICAgIH0KKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L3NsaWNlL2JhY2t3YXJkL1R5cGVBd2FyZTIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9zbGljZS9iYWNrd2FyZC9UeXBlQXdhcmUyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWZiNGY4YgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9zbGljZS9iYWNrd2FyZC9UeXBlQXdhcmUyLmphdmEKQEAgLTAsMCArMSwxNSBAQAorY2xhc3MgQSB7CisgICAgcHJpdmF0ZSBzdGF0aWMgY2xhc3MgVHVwbGU8WCxZPiB7CisgICAgICAgIHB1YmxpYyBmaW5hbCBYIDxjYXJldD54OworICAgICAgICBwdWJsaWMgZmluYWwgWSB5OworICAgICAgICBwdWJsaWMgVHVwbGUoWCB4LFkgeSkge3RoaXMueD08Zmxvd24xPng7IHRoaXMueT15O30KKyAgICB9CisKKyAgICBwcml2YXRlIHN0YXRpYyBjbGFzcyBGb28geworICAgICAgICB2b2lkIGYoKSB7CisgICAgICAgICAgICBUdXBsZTxJbnRlZ2VyLEludGVnZXI+IHQxID0gbmV3IFR1cGxlPEludGVnZXIsSW50ZWdlcj4oPGZsb3duMTE+MSwyKTsKKyAgICAgICAgICAgIFR1cGxlPFN0cmluZyxTdHJpbmc+IHQyID0gbmV3IFR1cGxlPFN0cmluZyxTdHJpbmc+KDxmbG93bjEyPiJhIiwiYiIpOworICAgICAgICAgICAgU3RyaW5nIHggPSB0Mi54OworICAgICAgICB9CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9zbGljZS9iYWNrd2FyZC9UeXBlRXJhc2VkLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvc2xpY2UvYmFja3dhcmQvVHlwZUVyYXNlZC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxZDRiYzMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvc2xpY2UvYmFja3dhcmQvVHlwZUVyYXNlZC5qYXZhCkBAIC0wLDAgKzEsMTQgQEAKK2NsYXNzIEEgeworICAgIHByaXZhdGUgc3RhdGljIGNsYXNzIFR1cGxlPFgsWT4geworICAgICAgICBwdWJsaWMgZmluYWwgWCB4OworICAgICAgICBwdWJsaWMgZmluYWwgWSB5OworICAgICAgICBwdWJsaWMgVHVwbGUoWCB4LFkgeSkge3RoaXMueD08Zmxvd24xMT54OyB0aGlzLnk9eTt9CisgICAgfQorCisgICAgcHJpdmF0ZSBzdGF0aWMgY2xhc3MgRm9vIHsKKyAgICAgICAgdm9pZCBmMihUdXBsZTxTdHJpbmcsIFN0cmluZz4gdDJ3KSB7CisgICAgICAgICAgICBUdXBsZSB0MiA9IG5ldyBUdXBsZSgxLDIpOworICAgICAgICAgICAgU3RyaW5nIDxjYXJldD54ID0gdDJ3LjxmbG93bjE+eDsKKyAgICAgICAgfQorICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvc2xpY2UvYmFja3dhcmQvVmFyVXNlLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvc2xpY2UvYmFja3dhcmQvVmFyVXNlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWJhZDE5OAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9zbGljZS9iYWNrd2FyZC9WYXJVc2UuamF2YQpAQCAtMCwwICsxLDE2IEBACitjbGFzcyBTIHsKKyAgICBwcml2YXRlIFN0cmluZyBmb28gPSA8Zmxvd24xMT4ieHh4IjsKKworICAgIHsKKyAgICAgICAgU3RyaW5nIGJhciA9IDxmbG93bjE+Zm9vOworICAgICAgICBpZiAoYmFyLmVxdWFscygiYSIpKSB7CisgICAgICAgIH0gZWxzZSBpZiAoYmFyLmVxdWFscygiYiIpKSB7CisgICAgICAgIH0KKworICAgICAgICBpZiAoYmFyLmVxdWFscygiYyIpKSB7CisgICAgICAgICAgICBiYXIgPSA8Zmxvd24yPiIiOworICAgICAgICB9CisKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJiYXI6ICIgKyA8Y2FyZXQ+YmFyKTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L3NsaWNlL2JhY2t3YXJkL1ZpYVBhcmFtZXRlcml6ZWRNZXRob2RzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvc2xpY2UvYmFja3dhcmQvVmlhUGFyYW1ldGVyaXplZE1ldGhvZHMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YzIwZDNlCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L3NsaWNlL2JhY2t3YXJkL1ZpYVBhcmFtZXRlcml6ZWRNZXRob2RzLmphdmEKQEAgLTAsMCArMSwxOSBAQAorY2xhc3MgQSB7CisgICAgcHJpdmF0ZSBzdGF0aWMgY2xhc3MgVHVwbGU8WCxZPiB7CisgICAgICAgIHB1YmxpYyBmaW5hbCBYIHg7CisgICAgICAgIHB1YmxpYyBmaW5hbCBZIHk7CisgICAgICAgIHB1YmxpYyBUdXBsZShYIHgsWSB5KSB7dGhpcy54PTxmbG93bjExPng7IHRoaXMueT15O30KKyAgICAgICAgcHVibGljIHN0YXRpYyA8WDEsWTE+IFR1cGxlPFgxLFkxPiBjcmVhdGUoWDEgeCwgWTEgeSkgeworICAgICAgICAgICAgcmV0dXJuIG5ldyBUdXBsZTxYMSxZMT4oPGZsb3duMTExPngsIHkpOworICAgICAgICB9CisgICAgfQorCisgICAgcHJpdmF0ZSBzdGF0aWMgY2xhc3MgRm9vIHsKKyAgICAgICAgdm9pZCBmKCkgeworICAgICAgICAgICAgVHVwbGU8U3RyaW5nLFN0cmluZz4gdCA9IFR1cGxlLmNyZWF0ZSg8Zmxvd24xMTExPiIiLCIiKTsKKyAgICAgICAgICAgIFR1cGxlPE9iamVjdCxPYmplY3Q+IHQyID0gVHVwbGUuY3JlYXRlKChPYmplY3QpICIiLChPYmplY3QpICIiKTsKKworICAgICAgICAgICAgU3RyaW5nIDxjYXJldD54ID0gdC48Zmxvd24xPng7CisgICAgICAgIH0KKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L3NsaWNlL2JhY2t3YXJkL1dlaXJkQ2FyZXRQb3NpdGlvbi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L3NsaWNlL2JhY2t3YXJkL1dlaXJkQ2FyZXRQb3NpdGlvbi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNlMjFjYTQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvc2xpY2UvYmFja3dhcmQvV2VpcmRDYXJldFBvc2l0aW9uLmphdmEKQEAgLTAsMCArMSwyOSBAQAorY2xhc3MgRm9vIHsKKyAgICBwcml2YXRlIHN0YXRpYyBNeUVudW0gc3RhdGljTXlFbnVtID0gTXlFbnVtLjxmbG93bjExPkJBUjsKKworICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKyAgICAgICAgcHJvZHVjZSgpOworICAgIH0KKworICAgIHN0YXRpYyB2b2lkIHByb2R1Y2UoKSB7CisgICAgICAgIHByb2R1Y2UoPGZsb3duMT5zdGF0aWNNeUVudW0pOworICAgIH0KKworICAgIHN0YXRpYyB2b2lkIHByb2R1Y2UoTXlFbnVtIG15RW51bSkgeworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIm15RW51bTogIiArIG15RW51bTxjYXJldD4pOworICAgIH0KKworICAgIHN0YXRpYyB2b2lkIGYoKSB7CisgICAgICAgIHN0YXRpY015RW51bSA9IE15RW51bS48Zmxvd24xMj5CQVo7CisgICAgfQorCisgICAgc3RhdGljIHZvaWQgZygpIHsKKyAgICAgICAgc3RhdGljTXlFbnVtID0gTXlFbnVtLjxmbG93bjEzPkZPTzsKKyAgICB9CisKKyAgICBlbnVtIE15RW51bSB7CisgICAgICAgIEZPTywKKyAgICAgICAgQkFSLAorICAgICAgICBCQVoKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L3NsaWNlL2ZvcndhcmQvSW50ZXJNZXRob2QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9zbGljZS9mb3J3YXJkL0ludGVyTWV0aG9kLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGQ3MjNiYwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9zbGljZS9mb3J3YXJkL0ludGVyTWV0aG9kLmphdmEKQEAgLTAsMCArMSwyOCBAQAorcHVibGljIGNsYXNzIFQyIHsKKyAgICBpbnQgPGNhcmV0PmZmZjsKKworICAgIHB1YmxpYyBUMihpbnQgaSkgeworICAgICAgICBmZmYgPSBpOworICAgIH0KKworICAgIHB1YmxpYyBpbnQgPGZsb3duMTE+Z2V0RmZmKCkgeworICAgICAgICByZXR1cm4gPGZsb3duMT5mZmY7CisgICAgfQorCisgICAgdm9pZCBmKGludCBpMikgeworLy8gICAgICAgIGZmZj1pMjsKKyAgICAgICAgcCg8Zmxvd24xMTE+Z2V0RmZmKCkpOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIHAoaW50IDxmbG93bjExMTE+aSkgeworICAgICAgICBuZXcgRig8Zmxvd24xMTExMT5pKTsKKyAgICB9CisKKyAgICBwcml2YXRlIGNsYXNzIEYgeworICAgICAgICBwcml2YXRlIGludCA8Zmxvd24xMTExMTExMT54c3M7CisKKyAgICAgICAgcHVibGljIEYoaW50IDxmbG93bjExMTExMT5pKSB7CisgICAgICAgICAgICB4c3MgPSA8Zmxvd24xMTExMTExPmk7CisgICAgICAgIH0KKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvc2xpY2UvZm9yd2FyZC9QYXJhbWV0ZXJzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvc2xpY2UvZm9yd2FyZC9QYXJhbWV0ZXJzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTdiOWI1YwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9zbGljZS9mb3J3YXJkL1BhcmFtZXRlcnMuamF2YQpAQCAtMCwwICsxLDY2IEBACitpbXBvcnQgamF2YS51dGlsLio7CisKK2NsYXNzIFggeworY2xhc3MgTXlNYXAgaW1wbGVtZW50cyBNYXAgeworICAgIHB1YmxpYyBpbnQgc2l6ZSgpIHsKKyAgICAgICAgcmV0dXJuIDA7ICAvL1RvIGNoYW5nZSBib2R5IG9mIGltcGxlbWVudGVkIG1ldGhvZHMgdXNlIEZpbGUgfCBTZXR0aW5ncyB8IEZpbGUgVGVtcGxhdGVzLgorICAgIH0KKworICAgIHB1YmxpYyBib29sZWFuIGlzRW1wdHkoKSB7CisgICAgICAgIHJldHVybiBmYWxzZTsgIC8vVG8gY2hhbmdlIGJvZHkgb2YgaW1wbGVtZW50ZWQgbWV0aG9kcyB1c2UgRmlsZSB8IFNldHRpbmdzIHwgRmlsZSBUZW1wbGF0ZXMuCisgICAgfQorCisgICAgcHVibGljIGJvb2xlYW4gY29udGFpbnNLZXkoT2JqZWN0IGtleSkgeworICAgICAgICByZXR1cm4gZmFsc2U7ICAvL1RvIGNoYW5nZSBib2R5IG9mIGltcGxlbWVudGVkIG1ldGhvZHMgdXNlIEZpbGUgfCBTZXR0aW5ncyB8IEZpbGUgVGVtcGxhdGVzLgorICAgIH0KKworICAgIHB1YmxpYyBib29sZWFuIGNvbnRhaW5zVmFsdWUoT2JqZWN0IHZhbHVlKSB7CisgICAgICAgIHJldHVybiBmYWxzZTsgIC8vVG8gY2hhbmdlIGJvZHkgb2YgaW1wbGVtZW50ZWQgbWV0aG9kcyB1c2UgRmlsZSB8IFNldHRpbmdzIHwgRmlsZSBUZW1wbGF0ZXMuCisgICAgfQorCisgICAgcHVibGljIE9iamVjdCBnZXQoT2JqZWN0IDxmbG93bjExMTE+a2V5KSB7CisgICAgICAgIHJldHVybiBrZXkuPGZsb3duMTExMTE+Z2V0Q2xhc3MoKTsKKyAgICB9CisKKyAgICBwdWJsaWMgT2JqZWN0IHB1dChPYmplY3Qga2V5LCBPYmplY3QgdmFsdWUpIHsKKyAgICAgICAgcmV0dXJuIG51bGw7ICAvL1RvIGNoYW5nZSBib2R5IG9mIGltcGxlbWVudGVkIG1ldGhvZHMgdXNlIEZpbGUgfCBTZXR0aW5ncyB8IEZpbGUgVGVtcGxhdGVzLgorICAgIH0KKworICAgIHB1YmxpYyBPYmplY3QgcmVtb3ZlKE9iamVjdCBrZXkpIHsKKyAgICAgICAgcmV0dXJuIG51bGw7ICAvL1RvIGNoYW5nZSBib2R5IG9mIGltcGxlbWVudGVkIG1ldGhvZHMgdXNlIEZpbGUgfCBTZXR0aW5ncyB8IEZpbGUgVGVtcGxhdGVzLgorICAgIH0KKworICAgIHB1YmxpYyB2b2lkIHB1dEFsbChNYXAgbSkgeworICAgICAgICAvL1RvIGNoYW5nZSBib2R5IG9mIGltcGxlbWVudGVkIG1ldGhvZHMgdXNlIEZpbGUgfCBTZXR0aW5ncyB8IEZpbGUgVGVtcGxhdGVzLgorICAgIH0KKworICAgIHB1YmxpYyB2b2lkIGNsZWFyKCkgeworICAgICAgICAvL1RvIGNoYW5nZSBib2R5IG9mIGltcGxlbWVudGVkIG1ldGhvZHMgdXNlIEZpbGUgfCBTZXR0aW5ncyB8IEZpbGUgVGVtcGxhdGVzLgorICAgIH0KKworICAgIHB1YmxpYyBTZXQga2V5U2V0KCkgeworICAgICAgICByZXR1cm4gbnVsbDsgIC8vVG8gY2hhbmdlIGJvZHkgb2YgaW1wbGVtZW50ZWQgbWV0aG9kcyB1c2UgRmlsZSB8IFNldHRpbmdzIHwgRmlsZSBUZW1wbGF0ZXMuCisgICAgfQorCisgICAgcHVibGljIENvbGxlY3Rpb24gdmFsdWVzKCkgeworICAgICAgICByZXR1cm4gbnVsbDsgIC8vVG8gY2hhbmdlIGJvZHkgb2YgaW1wbGVtZW50ZWQgbWV0aG9kcyB1c2UgRmlsZSB8IFNldHRpbmdzIHwgRmlsZSBUZW1wbGF0ZXMuCisgICAgfQorCisgICAgcHVibGljIFNldCBlbnRyeVNldCgpIHsKKyAgICAgICAgcmV0dXJuIG51bGw7ICAvL1RvIGNoYW5nZSBib2R5IG9mIGltcGxlbWVudGVkIG1ldGhvZHMgdXNlIEZpbGUgfCBTZXR0aW5ncyB8IEZpbGUgVGVtcGxhdGVzLgorICAgIH0KK30KKworcHVibGljIFN0cmluZyBnZXRFbmNvZGluZyggaW50IDxjYXJldD52aXJ0dWFsRmlsZSwgYm9vbGVhbiB1c2VQYXJlbnREZWZhdWx0cykgeworICAgIE1hcDxJbnRlZ2VyLFN0cmluZz4gbXlNYXBwaW5nID0gbnVsbDsKKyAgaW50IDxmbG93bjExPnBhcmVudCA9IDxmbG93bjE+dmlydHVhbEZpbGU7CisgIHdoaWxlICh0cnVlKSB7CisgICAgU3RyaW5nIGNoYXJzZXQgPSBteU1hcHBpbmcuZ2V0KDxmbG93bjExMT5wYXJlbnQpOworICAgIGlmIChjaGFyc2V0ICE9IG51bGwgfHwgIXVzZVBhcmVudERlZmF1bHRzKSByZXR1cm4gY2hhcnNldDsKKyAgICBpZiAocGFyZW50ID09IDApIGJyZWFrOworICAgIHBhcmVudCA9IHBhcmVudC0xOworICB9CisgIHJldHVybiBudWxsOworfQorCit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L3NsaWNlL2ZvcndhcmQvU2ltcGxlLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvc2xpY2UvZm9yd2FyZC9TaW1wbGUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMDQ5YmVjCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L3NsaWNlL2ZvcndhcmQvU2ltcGxlLmphdmEKQEAgLTAsMCArMSwzMCBAQAorIHB1YmxpYyBjbGFzcyBUMiB7CisgICAgIGludCA8Zmxvd24xMTExMTE+ZmZmOworCisgICAgIHsKKyAvLyAgICAgICAgZihmZmYpOworICAgICB9CisKKyB2b2lkIGYoaW50IDxjYXJldD5pMikgeworICAgICBpbnQgaSA9IC0xOworICAgICBpID0gMDsKKyAgICAgdHJ5IHsgICAgICAgICAgIC8vCisgICAgICAgICBpID0gMTsKKyAgICAgICAgIGlmIChpMiA9PSAwKSB7CisgICAgICAgICAgICAgcCg8Zmxvd24xPmkyKTsvLworICAgICAgICAgfQorICAgICB9CisgICAgIGNhdGNoIChFeGNlcHRpb24gZSkgeworCisgICAgIH0KKyAgICAgZmluYWxseSB7CisgICAgICAgICBpID0gOTsKKyAgICAgfQorIH0KKworICAgICBwdWJsaWMgdm9pZCBwKGludCA8Zmxvd24xMT5pKSB7Ly8KKyAvLyAgICAgICAgZmZmID0gaTsKKyAgICAgICAgIGludCA8Zmxvd24xMTExPmRkZCA9IDxmbG93bjExMT5pOworICAgICAgICAgZmZmID08Zmxvd24xMTExMT5kZGQ7CisgICAgIH0KKyB9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvc3BsaXRJZkFjdGlvbi9hZnRlcjEuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9zcGxpdElmQWN0aW9uL2FmdGVyMS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlhMGEzNDcKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvc3BsaXRJZkFjdGlvbi9hZnRlcjEuamF2YQpAQCAtMCwwICsxLDE1IEBACitjbGFzcyBDIHsKKyAgICB2b2lkIGZvbygpIHsKKyAgICAgICAgaWYgKDxjYXJldD5hKSB7CisgICAgICAgICAgICBpZiAoYikgeworICAgICAgICAgICAgICAgIGNhbGwoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIGRvbnRDYWxsKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBkb250Q2FsbCgpOworICAgICAgICB9CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9zcGxpdElmQWN0aW9uL2FmdGVyMi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L3NwbGl0SWZBY3Rpb24vYWZ0ZXIyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjY4MDgyMwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9zcGxpdElmQWN0aW9uL2FmdGVyMi5qYXZhCkBAIC0wLDAgKzEsOSBAQAorY2xhc3MgQyB7CisgICAgdm9pZCBmb28oKSB7CisgICAgICAgIGlmICg8Y2FyZXQ+YSkgeworICAgICAgICAgICAgaWYgKGIpIHsKKyAgICAgICAgICAgICAgICBjYWxsKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L3NwbGl0SWZBY3Rpb24vYWZ0ZXIzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvc3BsaXRJZkFjdGlvbi9hZnRlcjMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44Y2NlMTA3Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L3NwbGl0SWZBY3Rpb24vYWZ0ZXIzLmphdmEKQEAgLTAsMCArMSw5IEBACitjbGFzcyBDIHsKKyAgICB2b2lkIGZvbygpIHsKKyAgICAgICAgaWYgKDxjYXJldD5hKSB7CisgICAgICAgICAgICBjYWxsKCk7CisgICAgICAgIH0gZWxzZSBpZiAoYikgeworICAgICAgICAgICAgY2FsbCgpOworICAgICAgICB9CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9zcGxpdElmQWN0aW9uL2FmdGVyNC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L3NwbGl0SWZBY3Rpb24vYWZ0ZXI0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODc5N2U3ZQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9zcGxpdElmQWN0aW9uL2FmdGVyNC5qYXZhCkBAIC0wLDAgKzEsMTEgQEAKK2NsYXNzIEMgeworICAgIHZvaWQgZm9vKCkgeworICAgICAgICBpZiAoPGNhcmV0PmEpIHsKKyAgICAgICAgICAgIGNhbGwoKTsKKyAgICAgICAgfSBlbHNlIGlmIChiKSB7CisgICAgICAgICAgICBjYWxsKCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBkb250Q2FsbCgpOworICAgICAgICB9CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9zcGxpdElmQWN0aW9uL2FmdGVyNS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L3NwbGl0SWZBY3Rpb24vYWZ0ZXI1LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWUyOGVlMAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9zcGxpdElmQWN0aW9uL2FmdGVyNS5qYXZhCkBAIC0wLDAgKzEsOSBAQAorY2xhc3MgQyB7CisgICAgdm9pZCBmb28oKSB7CisgICAgICAgIGlmICg8Y2FyZXQ+YSAmJiBiKSB7CisgICAgICAgICAgICBpZiAoYyAmJiBkICYmIGUpIHsKKyAgICAgICAgICAgICAgICBjYWxsKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L3NwbGl0SWZBY3Rpb24vYWZ0ZXJDb21tZW50LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvc3BsaXRJZkFjdGlvbi9hZnRlckNvbW1lbnQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMjkxNTgzCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L3NwbGl0SWZBY3Rpb24vYWZ0ZXJDb21tZW50LmphdmEKQEAgLTAsMCArMSw5IEBACitjbGFzcyBDIHsKKyAgICB2b2lkIGZvbygpIHsKKyAgICAgICAgaWYgKGEpIHsKKyAgICAgICAgICAgIGNhbGwoKTsKKyAgICAgICAgfSBlbHNlIGlmIChiKSB7CisgICAgICAgICAgICBjYWxsKCk7CisgICAgICAgIH0KKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L3NwbGl0SWZBY3Rpb24vYWZ0ZXJPclBhcmVudGhlc2lzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvc3BsaXRJZkFjdGlvbi9hZnRlck9yUGFyZW50aGVzaXMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMjkxNTgzCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L3NwbGl0SWZBY3Rpb24vYWZ0ZXJPclBhcmVudGhlc2lzLmphdmEKQEAgLTAsMCArMSw5IEBACitjbGFzcyBDIHsKKyAgICB2b2lkIGZvbygpIHsKKyAgICAgICAgaWYgKGEpIHsKKyAgICAgICAgICAgIGNhbGwoKTsKKyAgICAgICAgfSBlbHNlIGlmIChiKSB7CisgICAgICAgICAgICBjYWxsKCk7CisgICAgICAgIH0KKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L3NwbGl0SWZBY3Rpb24vYWZ0ZXJQYXJlbnRoZXNpcy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L3NwbGl0SWZBY3Rpb24vYWZ0ZXJQYXJlbnRoZXNpcy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE5MDIwY2QKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvc3BsaXRJZkFjdGlvbi9hZnRlclBhcmVudGhlc2lzLmphdmEKQEAgLTAsMCArMSw5IEBACitjbGFzcyBDIHsKKyAgICB2b2lkIGZvbygpIHsKKyAgICAgICAgaWYgKGEpIHsKKyAgICAgICAgICAgIGlmIChiKSB7CisgICAgICAgICAgICAgICAgY2FsbCgpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9zcGxpdElmQWN0aW9uL2JlZm9yZTEuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9zcGxpdElmQWN0aW9uL2JlZm9yZTEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MTk4NGU5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L3NwbGl0SWZBY3Rpb24vYmVmb3JlMS5qYXZhCkBAIC0wLDAgKzEsMTAgQEAKK2NsYXNzIEMgeworICAgIHZvaWQgZm9vKCkgeworICAgICAgICBpZiAoYSAmPGNhcmV0PiYgYikgeworICAgICAgICAgICAgY2FsbCgpOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgZG9udENhbGwoKTsKKyAgICAgICAgfQorICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvc3BsaXRJZkFjdGlvbi9iZWZvcmUyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvc3BsaXRJZkFjdGlvbi9iZWZvcmUyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGRlNWI2OAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9zcGxpdElmQWN0aW9uL2JlZm9yZTIuamF2YQpAQCAtMCwwICsxLDcgQEAKK2NsYXNzIEMgeworICAgIHZvaWQgZm9vKCkgeworICAgICAgICBpZiAoYSAmPGNhcmV0PiYgYikgeworICAgICAgICAgICAgY2FsbCgpOworICAgICAgICB9CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9zcGxpdElmQWN0aW9uL2JlZm9yZTMuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9zcGxpdElmQWN0aW9uL2JlZm9yZTMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNTkxZDYxCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L3NwbGl0SWZBY3Rpb24vYmVmb3JlMy5qYXZhCkBAIC0wLDAgKzEsNyBAQAorY2xhc3MgQyB7CisgICAgdm9pZCBmb28oKSB7CisgICAgICAgIGlmIChhIHw8Y2FyZXQ+fCBiKSB7CisgICAgICAgICAgICBjYWxsKCk7CisgICAgICAgIH0KKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L3NwbGl0SWZBY3Rpb24vYmVmb3JlNC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L3NwbGl0SWZBY3Rpb24vYmVmb3JlNC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM4ZDBiYWEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvc3BsaXRJZkFjdGlvbi9iZWZvcmU0LmphdmEKQEAgLTAsMCArMSw5IEBACitjbGFzcyBDIHsKKyAgICB2b2lkIGZvbygpIHsKKyAgICAgICAgaWYgKGEgfDxjYXJldD58IGIpIHsKKyAgICAgICAgICAgIGNhbGwoKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGRvbnRDYWxsKCk7CisgICAgICAgIH0KKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L3NwbGl0SWZBY3Rpb24vYmVmb3JlNS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L3NwbGl0SWZBY3Rpb24vYmVmb3JlNS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQwZTUwZmMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvc3BsaXRJZkFjdGlvbi9iZWZvcmU1LmphdmEKQEAgLTAsMCArMSw3IEBACitjbGFzcyBDIHsKKyAgICB2b2lkIGZvbygpIHsKKyAgICAgICAgaWYgKGEgJiYgYiAmPGNhcmV0PiYgYyAmJiBkICYmIGUpIHsKKyAgICAgICAgICAgIGNhbGwoKTsKKyAgICAgICAgfQorICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvc3BsaXRJZkFjdGlvbi9iZWZvcmVDb21tZW50LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvc3BsaXRJZkFjdGlvbi9iZWZvcmVDb21tZW50LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2E3MzI0ZgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9zcGxpdElmQWN0aW9uL2JlZm9yZUNvbW1lbnQuamF2YQpAQCAtMCwwICsxLDggQEAKK2NsYXNzIEMgeworICAgIHZvaWQgZm9vKCkgeworICAgICAgICBpZiAoYSB8PGNhcmV0PnwgLy9jb21tZW50IAorICAgICAgICAgICAgYikgeworICAgICAgICAgICAgY2FsbCgpOworICAgICAgICB9CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9zcGxpdElmQWN0aW9uL2JlZm9yZU9yQW5kTWl4ZWQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9zcGxpdElmQWN0aW9uL2JlZm9yZU9yQW5kTWl4ZWQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOGE3ZDA4Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L3NwbGl0SWZBY3Rpb24vYmVmb3JlT3JBbmRNaXhlZC5qYXZhCkBAIC0wLDAgKzEsNyBAQAorY2xhc3MgQyB7CisgICAgdm9pZCBmb28oKSB7CisgICAgICAgIGlmIChhIHx8IGIgJjxjYXJldD4mIGMpIHsKKyAgICAgICAgICAgIGNhbGwoKTsKKyAgICAgICAgfQorICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvc3BsaXRJZkFjdGlvbi9iZWZvcmVPclBhcmVudGhlc2lzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvc3BsaXRJZkFjdGlvbi9iZWZvcmVPclBhcmVudGhlc2lzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzJjOWE3YgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9zcGxpdElmQWN0aW9uL2JlZm9yZU9yUGFyZW50aGVzaXMuamF2YQpAQCAtMCwwICsxLDcgQEAKK2NsYXNzIEMgeworICAgIHZvaWQgZm9vKCkgeworICAgICAgICBpZiAoKGEpIHw8Y2FyZXQ+fCAoYikpIHsKKyAgICAgICAgICAgIGNhbGwoKTsKKyAgICAgICAgfQorICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvc3BsaXRJZkFjdGlvbi9iZWZvcmVQYXJlbnRoZXNpcy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L3NwbGl0SWZBY3Rpb24vYmVmb3JlUGFyZW50aGVzaXMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZmI2MjJhOQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9zcGxpdElmQWN0aW9uL2JlZm9yZVBhcmVudGhlc2lzLmphdmEKQEAgLTAsMCArMSw3IEBACitjbGFzcyBDIHsKKyAgICB2b2lkIGZvbygpIHsKKyAgICAgICAgaWYgKChhKSAmPGNhcmV0PiYgKGIpKSB7CisgICAgICAgICAgICBjYWxsKCk7CisgICAgICAgIH0KKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L3N1cnJvdW5kQXV0b0Nsb3NlYWJsZS9NaXhlZFVzYWdlcy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L3N1cnJvdW5kQXV0b0Nsb3NlYWJsZS9NaXhlZFVzYWdlcy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFjOTgzOGEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvc3Vycm91bmRBdXRvQ2xvc2VhYmxlL01peGVkVXNhZ2VzLmphdmEKQEAgLTAsMCArMSwyMiBAQAoraW1wb3J0IGphdmEuaW8uRmlsZTsKK2ltcG9ydCBqYXZhLmlvLkZpbGVJbnB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworaW1wb3J0IGphdmEudXRpbC5BcnJheXM7CisKK2NsYXNzIEMgeworICAgIHZvaWQgbShGaWxlIGZpbGUpIHRocm93cyBJT0V4Y2VwdGlvbiB7CisgICAgICAgIDxjYXJldD5GaWxlSW5wdXRTdHJlYW0gZmlsZUlucHV0U3RyZWFtID0gbmV3IEZpbGVJbnB1dFN0cmVhbShmaWxlKTsKKyAgICAgICAgaW50IHJlYWQsIGxlbiA9IC0xOworICAgICAgICBib29sZWFuIGVtcHR5ID0gdHJ1ZTsKKyAgICAgICAgZG8geworICAgICAgICAgICAgcmVhZCA9IGZpbGVJbnB1dFN0cmVhbS5yZWFkKCk7CisgICAgICAgICAgICBjaGFyW10gY2hhcnMgPSBDaGFyYWN0ZXIudG9DaGFycyhyZWFkKTsKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihyZWFkICsgIiA9ICIgKyBBcnJheXMudG9TdHJpbmcoY2hhcnMpKTsKKyAgICAgICAgICAgICsrbGVuOworICAgICAgICAgICAgZW1wdHkgPSBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICB3aGlsZSAocmVhZCAhPSAtMSk7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihsZW4pOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oZW1wdHkpOworICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9zdXJyb3VuZEF1dG9DbG9zZWFibGUvTWl4ZWRVc2FnZXNfYWZ0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9zdXJyb3VuZEF1dG9DbG9zZWFibGUvTWl4ZWRVc2FnZXNfYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYTE5MTQxNQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9zdXJyb3VuZEF1dG9DbG9zZWFibGUvTWl4ZWRVc2FnZXNfYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDI2IEBACitpbXBvcnQgamF2YS5pby5GaWxlOworaW1wb3J0IGphdmEuaW8uRmlsZUlucHV0U3RyZWFtOworaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CitpbXBvcnQgamF2YS51dGlsLkFycmF5czsKKworY2xhc3MgQyB7CisgICAgdm9pZCBtKEZpbGUgZmlsZSkgdGhyb3dzIElPRXhjZXB0aW9uIHsKKyAgICAgICAgaW50IGxlbjsKKyAgICAgICAgYm9vbGVhbiBlbXB0eTsKKyAgICAgICAgdHJ5IChGaWxlSW5wdXRTdHJlYW0gZmlsZUlucHV0U3RyZWFtID0gbmV3IEZpbGVJbnB1dFN0cmVhbShmaWxlKSkgeworICAgICAgICAgICAgaW50IHJlYWQ7CisgICAgICAgICAgICBsZW4gPSAtMTsKKyAgICAgICAgICAgIGVtcHR5ID0gdHJ1ZTsKKyAgICAgICAgICAgIGRvIHsKKyAgICAgICAgICAgICAgICByZWFkID0gZmlsZUlucHV0U3RyZWFtLnJlYWQoKTsKKyAgICAgICAgICAgICAgICBjaGFyW10gY2hhcnMgPSBDaGFyYWN0ZXIudG9DaGFycyhyZWFkKTsKKyAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4ocmVhZCArICIgPSAiICsgQXJyYXlzLnRvU3RyaW5nKGNoYXJzKSk7CisgICAgICAgICAgICAgICAgKytsZW47CisgICAgICAgICAgICAgICAgZW1wdHkgPSBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHdoaWxlIChyZWFkICE9IC0xKTsKKyAgICAgICAgfQorICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4obGVuKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKGVtcHR5KTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvc3Vycm91bmRBdXRvQ2xvc2VhYmxlL1NpbXBsZS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L3N1cnJvdW5kQXV0b0Nsb3NlYWJsZS9TaW1wbGUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMzA3NTA5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L3N1cnJvdW5kQXV0b0Nsb3NlYWJsZS9TaW1wbGUuamF2YQpAQCAtMCwwICsxLDI0IEBACisvKgorICogQ29weXJpZ2h0IDIwMDAtMjAxMiBKZXRCcmFpbnMgcy5yLm8uCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCitpbXBvcnQgamF2YS5pby4qOworaW1wb3J0IGphdmEubmV0Lio7CisKK2NsYXNzIEMgeworICAgIHB1YmxpYyB2b2lkIHJlYWQoVVJMQ29ubmVjdGlvbiBjb25uZWN0aW9uKSB7CisgICAgICAgIDxjYXJldD5JbnB1dFN0cmVhbSBzdHJlYW0gPSBjb25uZWN0aW9uLmdldElucHV0U3RyZWFtKCk7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC9zdXJyb3VuZEF1dG9DbG9zZWFibGUvU2ltcGxlX2FmdGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvc3Vycm91bmRBdXRvQ2xvc2VhYmxlL1NpbXBsZV9hZnRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRkY2RjZmIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvc3Vycm91bmRBdXRvQ2xvc2VhYmxlL1NpbXBsZV9hZnRlci5qYXZhCkBAIC0wLDAgKzEsMjUgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwMC0yMDEyIEpldEJyYWlucyBzLnIuby4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKK2ltcG9ydCBqYXZhLmlvLio7CitpbXBvcnQgamF2YS5uZXQuKjsKKworY2xhc3MgQyB7CisgICAgcHVibGljIHZvaWQgcmVhZChVUkxDb25uZWN0aW9uIGNvbm5lY3Rpb24pIHsKKyAgICAgICAgdHJ5IChJbnB1dFN0cmVhbSBzdHJlYW0gPSBjb25uZWN0aW9uLmdldElucHV0U3RyZWFtKCkpIHs8Y2FyZXQ+CisgICAgICAgIH0KKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L3N1cnJvdW5kQXV0b0Nsb3NlYWJsZS9Vc2FnZS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L3N1cnJvdW5kQXV0b0Nsb3NlYWJsZS9Vc2FnZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIzNGJlZGEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvc3Vycm91bmRBdXRvQ2xvc2VhYmxlL1VzYWdlLmphdmEKQEAgLTAsMCArMSwxNSBAQAoraW1wb3J0IGphdmEuaW8uRmlsZTsKK2ltcG9ydCBqYXZhLmlvLkZpbGVJbnB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworCitjbGFzcyBDIHsKKyAgICB2b2lkIG0oRmlsZSBmaWxlKSB0aHJvd3MgSU9FeGNlcHRpb24geworICAgICAgICA8Y2FyZXQ+RmlsZUlucHV0U3RyZWFtIGZpbGVJbnB1dFN0cmVhbSA9IG5ldyBGaWxlSW5wdXRTdHJlYW0oZmlsZSk7CisgICAgICAgIGludCByZWFkOworICAgICAgICBkbyB7CisgICAgICAgICAgICByZWFkID0gZmlsZUlucHV0U3RyZWFtLnJlYWQoKTsKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihyZWFkKTsKKyAgICAgICAgfQorICAgICAgICB3aGlsZSAocmVhZCAhPSAtMSk7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L3N1cnJvdW5kQXV0b0Nsb3NlYWJsZS9Vc2FnZV9hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L3N1cnJvdW5kQXV0b0Nsb3NlYWJsZS9Vc2FnZV9hZnRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1OGUzMzEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvc3Vycm91bmRBdXRvQ2xvc2VhYmxlL1VzYWdlX2FmdGVyLmphdmEKQEAgLTAsMCArMSwxNiBAQAoraW1wb3J0IGphdmEuaW8uRmlsZTsKK2ltcG9ydCBqYXZhLmlvLkZpbGVJbnB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworCitjbGFzcyBDIHsKKyAgICB2b2lkIG0oRmlsZSBmaWxlKSB0aHJvd3MgSU9FeGNlcHRpb24geworICAgICAgICB0cnkgKEZpbGVJbnB1dFN0cmVhbSBmaWxlSW5wdXRTdHJlYW0gPSBuZXcgRmlsZUlucHV0U3RyZWFtKGZpbGUpKSB7CisgICAgICAgICAgICBpbnQgcmVhZDsKKyAgICAgICAgICAgIGRvIHsKKyAgICAgICAgICAgICAgICByZWFkID0gZmlsZUlucHV0U3RyZWFtLnJlYWQoKTsKKyAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4ocmVhZCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB3aGlsZSAocmVhZCAhPSAtMSk7CisgICAgICAgIH0KKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvdGVtcGxhdGUvQWxsb3dUeXBpbmdSYW5kb21FeHByZXNzaW9uc1dpdGhMb29rdXBPcGVuLW91dC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L3RlbXBsYXRlL0FsbG93VHlwaW5nUmFuZG9tRXhwcmVzc2lvbnNXaXRoTG9va3VwT3Blbi1vdXQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNzYwMTI1Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L3RlbXBsYXRlL0FsbG93VHlwaW5nUmFuZG9tRXhwcmVzc2lvbnNXaXRoTG9va3VwT3Blbi1vdXQuamF2YQpAQCAtMCwwICsxLDExIEBACitpbXBvcnQgamF2YS5pby5GaWxlOworaW1wb3J0IGphdmEubGFuZy5PYmplY3Q7CitpbXBvcnQgamF2YS51dGlsLk1hcDsKKworY2xhc3MgRm9vIHsKKyAgICB2b2lkIGZvbyhNYXA8RmlsZSwgT2JqZWN0PiBmaWxlcywgRmlsZSBmaWxlLCBPYmplY3QgZmlseCkgeworICAgICAgICBmb3IgKEZpbGUgZmlsZTEgOiBmaWxlLjxjYXJldD4pIHsKKyAgICAgICAgICAgIAorICAgICAgICB9CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC90ZW1wbGF0ZS9BbGxvd1R5cGluZ1JhbmRvbUV4cHJlc3Npb25zV2l0aExvb2t1cE9wZW4uamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC90ZW1wbGF0ZS9BbGxvd1R5cGluZ1JhbmRvbUV4cHJlc3Npb25zV2l0aExvb2t1cE9wZW4uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNTkzODMxCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L3RlbXBsYXRlL0FsbG93VHlwaW5nUmFuZG9tRXhwcmVzc2lvbnNXaXRoTG9va3VwT3Blbi5qYXZhCkBAIC0wLDAgKzEsOSBAQAoraW1wb3J0IGphdmEuaW8uRmlsZTsKK2ltcG9ydCBqYXZhLmxhbmcuT2JqZWN0OworaW1wb3J0IGphdmEudXRpbC5NYXA7CisKK2NsYXNzIEZvbyB7CisgICAgdm9pZCBmb28oTWFwPEZpbGUsIE9iamVjdD4gZmlsZXMsIEZpbGUgZmlsZSwgT2JqZWN0IGZpbHgpIHsKKyAgICAgIDxjYXJldD4KKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L3RlbXBsYXRlL0FzTGlzdFRvYXItb3V0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvdGVtcGxhdGUvQXNMaXN0VG9hci1vdXQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OTY5NTIzCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L3RlbXBsYXRlL0FzTGlzdFRvYXItb3V0LmphdmEKQEAgLTAsMCArMSw5IEBACitpbXBvcnQgamF2YS51dGlsLkFycmF5czsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworY2xhc3MgRm9vIHsKKworICBzdGF0aWMgdm9pZCBmb28oTGlzdDxTdHJpbmc+IGxzKSB7CisgICAgTGlzdDxTdHJpbmc+IGxzMiA9IEFycmF5cy5hc0xpc3QobHMudG9BcnJheShuZXcgU3RyaW5nW2xzLnNpemUoKV0pPGNhcmV0Pik7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvdGVtcGxhdGUvQXNMaXN0VG9hci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L3RlbXBsYXRlL0FzTGlzdFRvYXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZWZiNmNlCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L3RlbXBsYXRlL0FzTGlzdFRvYXIuamF2YQpAQCAtMCwwICsxLDkgQEAKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlzOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitjbGFzcyBGb28geworCisgIHN0YXRpYyB2b2lkIGZvbyhMaXN0PFN0cmluZz4gbHMpIHsKKyAgICBMaXN0PFN0cmluZz4gbHMyID0gQXJyYXlzLmFzTGlzdCg8Y2FyZXQ+KTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC90ZW1wbGF0ZS9DbGFzc05hbWVEb3RJblRlbXBsYXRlLW91dC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L3RlbXBsYXRlL0NsYXNzTmFtZURvdEluVGVtcGxhdGUtb3V0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTA0ZTQzOAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC90ZW1wbGF0ZS9DbGFzc05hbWVEb3RJblRlbXBsYXRlLW91dC5qYXZhCkBAIC0wLDAgKzEsOCBAQAoraW1wb3J0IGphdmEuaW8uRmlsZTsKKworY2xhc3MgRm9vIHsKKyAgICB7CisgICAgICBGaWxlIGZpbGUgPSBuZXcgRmlsZSgic29tZS50eHQiKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJmaWxlID0gIiArIEZpbGUuPGNhcmV0Pik7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC90ZW1wbGF0ZS9DbGFzc05hbWVEb3RJblRlbXBsYXRlLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvdGVtcGxhdGUvQ2xhc3NOYW1lRG90SW5UZW1wbGF0ZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIwZDJhZmMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvdGVtcGxhdGUvQ2xhc3NOYW1lRG90SW5UZW1wbGF0ZS5qYXZhCkBAIC0wLDAgKzEsOCBAQAoraW1wb3J0IGphdmEuaW8uRmlsZTsKKworY2xhc3MgRm9vIHsKKyAgICB7CisgICAgICBGaWxlIGZpbGUgPSBuZXcgRmlsZSgic29tZS50eHQiKTsKKyAgICAgIDxjYXJldD4KKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L3RlbXBsYXRlL0VuZEluVGhlTWlkZGxlLW91dC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L3RlbXBsYXRlL0VuZEluVGhlTWlkZGxlLW91dC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2MWVlMTMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvdGVtcGxhdGUvRW5kSW5UaGVNaWRkbGUtb3V0LmphdmEKQEAgLTAsMCArMSw5IEBACitwdWJsaWMgY2xhc3MgRW5kSW5UaGVNaWRkbGUgeworICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKyAgICAgICAgamF2YXguc3dpbmcuSkZyYW1lIGZyYW1lID0gbmV3IGphdmF4LnN3aW5nLkpGcmFtZSgpOworICAgICAgICA8Y2FyZXQ+CisgICAgICAgIGZyYW1lLnNldFZpc2libGUodHJ1ZSk7CisgICAgICAgIGZyYW1lLnNldERlZmF1bHRDbG9zZU9wZXJhdGlvbihqYXZheC5zd2luZy5KRnJhbWUuRVhJVF9PTl9DTE9TRSk7CisgICAgICAgIGZyYW1lLnBhY2soKTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L3RlbXBsYXRlL0VuZEluVGhlTWlkZGxlLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvdGVtcGxhdGUvRW5kSW5UaGVNaWRkbGUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZTgxZDIxCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L3RlbXBsYXRlL0VuZEluVGhlTWlkZGxlLmphdmEKQEAgLTAsMCArMSw1IEBACitwdWJsaWMgY2xhc3MgRW5kSW5UaGVNaWRkbGUgeworICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKyAgICAgICAgPGNhcmV0PgorICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvdGVtcGxhdGUvSXRlci1vdXQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC90ZW1wbGF0ZS9JdGVyLW91dC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE4Yjc2NDYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvdGVtcGxhdGUvSXRlci1vdXQuamF2YQpAQCAtMCwwICsxLDEyIEBACitpbXBvcnQgamF2YS51dGlsLio7CisKK2NsYXNzIEJhckdvbyB7fQorCitjbGFzcyBGb28geworICAgIHsKKyAgICAgICAgTGlzdDxCYXJHb28+IGdvb3M7CisgICAgICAgIGZvciAoQmFyR29vIGdvbyA6IGdvb3MpIHsKKyAgICAgICAgICAgIDxjYXJldD4KKyAgICAgICAgfQorICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvdGVtcGxhdGUvSXRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L3RlbXBsYXRlL0l0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MGQwNTdkCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L3RlbXBsYXRlL0l0ZXIuamF2YQpAQCAtMCwwICsxLDEwIEBACitpbXBvcnQgamF2YS51dGlsLio7CisKK2NsYXNzIEJhckdvbyB7fQorCitjbGFzcyBGb28geworICAgIHsKKyAgICAgICAgTGlzdDxCYXJHb28+IGdvb3M7CisgICAgICAgIDxjYXJldD4KKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L3RlbXBsYXRlL0l0ZXIxLW91dC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L3RlbXBsYXRlL0l0ZXIxLW91dC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY2YTVmMjgKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvdGVtcGxhdGUvSXRlcjEtb3V0LmphdmEKQEAgLTAsMCArMSwxNCBAQAoraW1wb3J0IGphdmEudXRpbC4qOworCitwdWJsaWMgY2xhc3MgQyB7CisgIE9iamVjdCBvID0gbmV3IE9iamVjdCgpIHsKKyAgICBjbGFzcyBJbm5lciB7CisgICAgfQorCisgICAgdm9pZCBmb28oTGlzdDxJbm5lcj4gaW5uZXJzKSB7CisgICAgICAgIGZvciAoSW5uZXIgPHNlbGVjdGlvbj5pbm5lcjxjYXJldD48L3NlbGVjdGlvbj4gOiBpbm5lcnMpIHsKKyAgICAgICAgICAgIAorICAgICAgICB9CisgICAgfQorICB9OworfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L3RlbXBsYXRlL0l0ZXIxLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvdGVtcGxhdGUvSXRlcjEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOTU1ZmFlCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L3RlbXBsYXRlL0l0ZXIxLmphdmEKQEAgLTAsMCArMSwxMiBAQAoraW1wb3J0IGphdmEudXRpbC4qOworCitwdWJsaWMgY2xhc3MgQyB7CisgIE9iamVjdCBvID0gbmV3IE9iamVjdCgpIHsKKyAgICBjbGFzcyBJbm5lciB7CisgICAgfQorCisgICAgdm9pZCBmb28oTGlzdDxJbm5lcj4gaW5uZXJzKSB7CisgICAgICA8Y2FyZXQ+CisgICAgfQorICB9OworfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L3RlbXBsYXRlL0l0ZXJGb3JjZUJyYWNlcy1vdXQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC90ZW1wbGF0ZS9JdGVyRm9yY2VCcmFjZXMtb3V0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTBlMmEwMAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC90ZW1wbGF0ZS9JdGVyRm9yY2VCcmFjZXMtb3V0LmphdmEKQEAgLTAsMCArMSwxNCBAQAoraW1wb3J0IGphdmEudXRpbC4qOworCitjbGFzcyBCYXJHb28ge30KKworY2xhc3MgRm9vIHsKKyAgICB7CisgICAgICAgIExpc3Q8QmFyR29vPiBnb29zOworICAgICAgICBpZiAodHJ1ZSkgeworICAgICAgICAgICAgZm9yIChCYXJHb28gZ29vIDogPHNlbGVjdGlvbj5nb29zPC9zZWxlY3Rpb24+PGNhcmV0PikgeworCisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L3RlbXBsYXRlL0l0ZXJGb3JjZUJyYWNlcy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L3RlbXBsYXRlL0l0ZXJGb3JjZUJyYWNlcy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU4OWMwZjkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvdGVtcGxhdGUvSXRlckZvcmNlQnJhY2VzLmphdmEKQEAgLTAsMCArMSwxMCBAQAoraW1wb3J0IGphdmEudXRpbC4qOworCitjbGFzcyBCYXJHb28ge30KKworY2xhc3MgRm9vIHsKKyAgICB7CisgICAgICAgIExpc3Q8QmFyR29vPiBnb29zOworICAgICAgICBpZiAodHJ1ZSkgPGNhcmV0PgorICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvdGVtcGxhdGUvSXRlclBhcmFtZXRlcml6ZWRJbm5lci1vdXQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC90ZW1wbGF0ZS9JdGVyUGFyYW1ldGVyaXplZElubmVyLW91dC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA0ZTY0YzkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvdGVtcGxhdGUvSXRlclBhcmFtZXRlcml6ZWRJbm5lci1vdXQuamF2YQpAQCAtMCwwICsxLDE1IEBACitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK3B1YmxpYyBjbGFzcyBMaXZlVGVtcGxhdGVUZXN0IHsKKworICAgIHZvaWQgb25lKCkgeworICAgICAgICBMaXN0PEEuQjxTdHJpbmc+PiBsaXN0OworICAgICAgICBmb3IgKEEuQjxTdHJpbmc+IHN0cmluZ0IgOiA8c2VsZWN0aW9uPmxpc3Q8L3NlbGVjdGlvbj48Y2FyZXQ+KSB7CisKKyAgICAgICAgfQorICAgIH0KK30KKworY2xhc3MgQSB7CisgICAgc3RhdGljIGludGVyZmFjZSBCPFQ+IHt9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L3RlbXBsYXRlL0l0ZXJQYXJhbWV0ZXJpemVkSW5uZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC90ZW1wbGF0ZS9JdGVyUGFyYW1ldGVyaXplZElubmVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzQyNDZhNwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC90ZW1wbGF0ZS9JdGVyUGFyYW1ldGVyaXplZElubmVyLmphdmEKQEAgLTAsMCArMSwxMyBAQAoraW1wb3J0IGphdmEudXRpbC5MaXN0OworCitwdWJsaWMgY2xhc3MgTGl2ZVRlbXBsYXRlVGVzdCB7CisKKyAgICB2b2lkIG9uZSgpIHsKKyAgICAgICAgTGlzdDxBLkI8U3RyaW5nPj4gbGlzdDsKKyAgICAgICAgPGNhcmV0PgorICAgIH0KK30KKworY2xhc3MgQSB7CisgICAgc3RhdGljIGludGVyZmFjZSBCPFQ+IHt9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L3RlbXBsYXRlL05hdmlnYXRpb25BY3Rpb25zRG9udFRlcm1pbmF0ZVRlbXBsYXRlLW91dC50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvdGVtcGxhdGUvTmF2aWdhdGlvbkFjdGlvbnNEb250VGVybWluYXRlVGVtcGxhdGUtb3V0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYTg1OGEyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L3RlbXBsYXRlL05hdmlnYXRpb25BY3Rpb25zRG9udFRlcm1pbmF0ZVRlbXBsYXRlLW91dC50eHQKQEAgLTAsMCArMSwzIEBACitIZWxsbyBIIFdvcmxkIEgKK0hlbGxvIEggV29ybGQgSAorSGVsbG8gSCBXb3JsZCBIPGNhcmV0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC90ZW1wbGF0ZS9QcmVmZXJTdGFydE1hdGNoZXNJbkxvb2t1cHMuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC90ZW1wbGF0ZS9QcmVmZXJTdGFydE1hdGNoZXNJbkxvb2t1cHMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMWI0NDc5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L3RlbXBsYXRlL1ByZWZlclN0YXJ0TWF0Y2hlc0luTG9va3Vwcy5qYXZhCkBAIC0wLDAgKzEsMTEgQEAKK2ltcG9ydCBqYXZhLnV0aWwuKjsKKworY2xhc3MgQmFyR29vIHt9CisKK2NsYXNzIEZvbyB7CisgICAgeworICAgICAgICBNYXA8QmFyR29vLCBTdHJpbmdCdWlsZGVyPiBnb29zOworCisgICAgICAgIDxjYXJldD4KKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L3RlbXBsYXRlL1NvdXRwLW91dC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L3RlbXBsYXRlL1NvdXRwLW91dC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRiNjJlNjYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvdGVtcGxhdGUvU291dHAtb3V0LmphdmEKQEAgLTAsMCArMSwxMCBAQAoraW1wb3J0IGphdmEubGFuZy5TdHJpbmc7CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK3B1YmxpYyBjbGFzcyBMaXZlVGVtcGxhdGVUZXN0IHsKKworICB2b2lkIHVzYWdlKGludCBudW0sIGJvb2xlYW4gc29tZUJvb2xlYW4sIExpc3Q8U3RyaW5nPiBhcmdzKXsKKyAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigibnVtID0gWyIgKyBudW0gKyAiXSwgc29tZUJvb2xlYW4gPSBbIiArIHNvbWVCb29sZWFuICsgIl0sIGFyZ3MgPSBbIiArIGFyZ3MgKyAiXSIpOzxjYXJldD4KKyAgfQorCit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L3RlbXBsYXRlL1NvdXRwLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvdGVtcGxhdGUvU291dHAuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMWQ1ZWMzCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L3RlbXBsYXRlL1NvdXRwLmphdmEKQEAgLTAsMCArMSwxMCBAQAoraW1wb3J0IGphdmEubGFuZy5TdHJpbmc7CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK3B1YmxpYyBjbGFzcyBMaXZlVGVtcGxhdGVUZXN0IHsKKworICB2b2lkIHVzYWdlKGludCBudW0sIGJvb2xlYW4gc29tZUJvb2xlYW4sIExpc3Q8U3RyaW5nPiBhcmdzKXsKKyAgICA8Y2FyZXQ+CisgIH0KKworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC90ZW1wbGF0ZS9Ub2FyLW91dC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L3RlbXBsYXRlL1RvYXItb3V0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGY2ODRhYQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC90ZW1wbGF0ZS9Ub2FyLW91dC5qYXZhCkBAIC0wLDAgKzEsOCBAQAoraW1wb3J0IGphdmEudXRpbC4qOworCitjbGFzcyBGb28geworICB7CisgICAgTGlzdDxTdHJpbmc+IGw7CisgICAgU3RyaW5nW10gcyA9IGwudG9BcnJheShuZXcgU3RyaW5nW2wuc2l6ZSgpXSk8Y2FyZXQ+CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvdGVtcGxhdGUvVG9hci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L3RlbXBsYXRlL1RvYXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYjg0M2VlCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L3RlbXBsYXRlL1RvYXIuamF2YQpAQCAtMCwwICsxLDggQEAKK2ltcG9ydCBqYXZhLnV0aWwuKjsKKworY2xhc3MgRm9vIHsKKyAgeworICAgIExpc3Q8U3RyaW5nPiBsOworICAgIFN0cmluZ1tdIHMgPSA8Y2FyZXQ+CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvdGVtcGxhdGUvVmFyYXJnVG9hci1vdXQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC90ZW1wbGF0ZS9WYXJhcmdUb2FyLW91dC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNkMzVmYjIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvdGVtcGxhdGUvVmFyYXJnVG9hci1vdXQuamF2YQpAQCAtMCwwICsxLDExIEBACitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK3B1YmxpYyBjbGFzcyBMaXZlVGVtcGxhdGVUZXN0IHsKKworICB2b2lkIGZvbyhTdHJpbmcuLi4gbWVzc2FnZXMpe30KKyAgdm9pZCB1c2FnZSgpeworICAgIExpc3Q8U3RyaW5nPiBtZXNzYWdlcyA9IG5ldyBBcnJheUxpc3Q8U3RyaW5nPigpOworICAgIGZvbyhtZXNzYWdlcy50b0FycmF5KG5ldyA8c2VsZWN0aW9uPlN0cmluZzxjYXJldD48L3NlbGVjdGlvbj5bbWVzc2FnZXMuc2l6ZSgpXSkpOworICB9CisKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29kZUluc2lnaHQvdGVtcGxhdGUvVmFyYXJnVG9hci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L3RlbXBsYXRlL1ZhcmFyZ1RvYXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMjZiOTFkCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L3RlbXBsYXRlL1ZhcmFyZ1RvYXIuamF2YQpAQCAtMCwwICsxLDExIEBACitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK3B1YmxpYyBjbGFzcyBMaXZlVGVtcGxhdGVUZXN0IHsKKworICB2b2lkIGZvbyhTdHJpbmcuLi4gbWVzc2FnZXMpe30KKyAgdm9pZCB1c2FnZSgpeworICAgIExpc3Q8U3RyaW5nPiBtZXNzYWdlcyA9IG5ldyBBcnJheUxpc3Q8U3RyaW5nPigpOworICAgIGZvbyg8Y2FyZXQ+KTsKKyAgfQorCit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L3VuZGVyc2NvcmVzSW5MaXRlcmFscy9XaXRoVW5kZXJzY29yZXMuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC91bmRlcnNjb3Jlc0luTGl0ZXJhbHMvV2l0aFVuZGVyc2NvcmVzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWE1MTQ1MgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC91bmRlcnNjb3Jlc0luTGl0ZXJhbHMvV2l0aFVuZGVyc2NvcmVzLmphdmEKQEAgLTAsMCArMSwzIEBACitjbGFzcyBDIHsKKyAgaW50IGkgPSA8Y2FyZXQ+MTIzXzQ1Nl83ODk7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvZGVJbnNpZ2h0L3VuZGVyc2NvcmVzSW5MaXRlcmFscy9XaXRob3V0VW5kZXJzY29yZXMuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC91bmRlcnNjb3Jlc0luTGl0ZXJhbHMvV2l0aG91dFVuZGVyc2NvcmVzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWVhMGRhYwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb2RlSW5zaWdodC91bmRlcnNjb3Jlc0luTGl0ZXJhbHMvV2l0aG91dFVuZGVyc2NvcmVzLmphdmEKQEAgLTAsMCArMSwzIEBACitjbGFzcyBDIHsKKyAgaW50IGkgPSA8Y2FyZXQ+MTIzNDU2Nzg5OworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2Fubm90YXRpb25zL2FkZEFubm90YXRpb25UYXJnZXQubG9nIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvYW5ub3RhdGlvbnMvYWRkQW5ub3RhdGlvblRhcmdldC5sb2cKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWVkM2VhZAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2Fubm90YXRpb25zL2FkZEFubm90YXRpb25UYXJnZXQubG9nCkBAIC0wLDAgKzEsNiBAQAorQ2xlYW5pbmcgb3V0cHV0IGZpbGVzOgorb3V0L3Byb2R1Y3Rpb24vQWRkQW5ub3RhdGlvblRhcmdldC9BLmNsYXNzCitFbmQgb2YgZmlsZXMKK0NvbXBpbGluZyBmaWxlczoKK3NyYy9BLmphdmEKK0VuZCBvZiBmaWxlcwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvYW5ub3RhdGlvbnMvYWRkQW5ub3RhdGlvblRhcmdldC9BLmphdmEubmV3IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvYW5ub3RhdGlvbnMvYWRkQW5ub3RhdGlvblRhcmdldC9BLmphdmEubmV3Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQzZTlkYWUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9hbm5vdGF0aW9ucy9hZGRBbm5vdGF0aW9uVGFyZ2V0L0EuamF2YS5uZXcKQEAgLTAsMCArMSw3IEBACitpbXBvcnQgamF2YS5sYW5nLmFubm90YXRpb24uKjsKK2ltcG9ydCBzdGF0aWMgamF2YS5sYW5nLmFubm90YXRpb24uRWxlbWVudFR5cGUuKjsKKworQFRhcmdldCh7VFlQRSwgRklFTEQsIE1FVEhPRH0pCitwdWJsaWMgQGludGVyZmFjZSBBIHsKKyAgaW50IHZhbHVlKCk7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvYW5ub3RhdGlvbnMvYWRkQW5ub3RhdGlvblRhcmdldC9zcmMvQS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvYW5ub3RhdGlvbnMvYWRkQW5ub3RhdGlvblRhcmdldC9zcmMvQS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhkMTBiN2UKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9hbm5vdGF0aW9ucy9hZGRBbm5vdGF0aW9uVGFyZ2V0L3NyYy9BLmphdmEKQEAgLTAsMCArMSw3IEBACitpbXBvcnQgamF2YS5sYW5nLmFubm90YXRpb24uKjsKK2ltcG9ydCBzdGF0aWMgamF2YS5sYW5nLmFubm90YXRpb24uRWxlbWVudFR5cGUuKjsKKworQFRhcmdldCh7VFlQRSwgRklFTEQsIE1FVEhPRH0pCitwdWJsaWMgQGludGVyZmFjZSBBIHsKKyAgaW50IHZhbHVlKCkgZGVmYXVsdCAzOworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2Fubm90YXRpb25zL2FkZEFubm90YXRpb25UYXJnZXQvc3JjL0MuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2Fubm90YXRpb25zL2FkZEFubm90YXRpb25UYXJnZXQvc3JjL0MuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOTYyYWVmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvYW5ub3RhdGlvbnMvYWRkQW5ub3RhdGlvblRhcmdldC9zcmMvQy5qYXZhCkBAIC0wLDAgKzEsMyBAQAorQEEoMTApIAorcHVibGljIGNsYXNzIEMgeworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2Fubm90YXRpb25zL2FkZEFubm90YXRpb25UYXJnZXQvc3JjL0MyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9hbm5vdGF0aW9ucy9hZGRBbm5vdGF0aW9uVGFyZ2V0L3NyYy9DMi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU3NzYxNTZiCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvYW5ub3RhdGlvbnMvYWRkQW5ub3RhdGlvblRhcmdldC9zcmMvQzIuamF2YQpAQCAtMCwwICsxLDUgQEAKK3B1YmxpYyBjbGFzcyBDMiB7CisKKyAgQEEoMzApIAorICBpbnQgZmllbGQ7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvYW5ub3RhdGlvbnMvYWRkQW5ub3RhdGlvblR5cGVNZW1iZXJXaXRoRGVmYXVsdFZhbHVlLmxvZyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2Fubm90YXRpb25zL2FkZEFubm90YXRpb25UeXBlTWVtYmVyV2l0aERlZmF1bHRWYWx1ZS5sb2cKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjAzZDgzNwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2Fubm90YXRpb25zL2FkZEFubm90YXRpb25UeXBlTWVtYmVyV2l0aERlZmF1bHRWYWx1ZS5sb2cKQEAgLTAsMCArMSw2IEBACitDbGVhbmluZyBvdXRwdXQgZmlsZXM6CitvdXQvcHJvZHVjdGlvbi9BZGRBbm5vdGF0aW9uVHlwZU1lbWJlcldpdGhEZWZhdWx0VmFsdWUvQS5jbGFzcworRW5kIG9mIGZpbGVzCitDb21waWxpbmcgZmlsZXM6CitzcmMvQS5qYXZhCitFbmQgb2YgZmlsZXMKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2Fubm90YXRpb25zL2FkZEFubm90YXRpb25UeXBlTWVtYmVyV2l0aERlZmF1bHRWYWx1ZS9BLmphdmEubmV3IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvYW5ub3RhdGlvbnMvYWRkQW5ub3RhdGlvblR5cGVNZW1iZXJXaXRoRGVmYXVsdFZhbHVlL0EuamF2YS5uZXcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGM4OTJmYQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2Fubm90YXRpb25zL2FkZEFubm90YXRpb25UeXBlTWVtYmVyV2l0aERlZmF1bHRWYWx1ZS9BLmphdmEubmV3CkBAIC0wLDAgKzEsNCBAQAorcHVibGljIEBpbnRlcmZhY2UgQSB7CisgIGludCB2YWx1ZSgpOworICBpbnQgdmFsdWUxKCkgZGVmYXVsdCA3OworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2Fubm90YXRpb25zL2FkZEFubm90YXRpb25UeXBlTWVtYmVyV2l0aERlZmF1bHRWYWx1ZS9zcmMvQS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvYW5ub3RhdGlvbnMvYWRkQW5ub3RhdGlvblR5cGVNZW1iZXJXaXRoRGVmYXVsdFZhbHVlL3NyYy9BLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODdmMWI2NAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2Fubm90YXRpb25zL2FkZEFubm90YXRpb25UeXBlTWVtYmVyV2l0aERlZmF1bHRWYWx1ZS9zcmMvQS5qYXZhCkBAIC0wLDAgKzEsMyBAQAorcHVibGljIEBpbnRlcmZhY2UgQSB7CisgIGludCB2YWx1ZSgpOworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2Fubm90YXRpb25zL2FkZEFubm90YXRpb25UeXBlTWVtYmVyV2l0aERlZmF1bHRWYWx1ZS9zcmMvQy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvYW5ub3RhdGlvbnMvYWRkQW5ub3RhdGlvblR5cGVNZW1iZXJXaXRoRGVmYXVsdFZhbHVlL3NyYy9DLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjk2MmFlZgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2Fubm90YXRpb25zL2FkZEFubm90YXRpb25UeXBlTWVtYmVyV2l0aERlZmF1bHRWYWx1ZS9zcmMvQy5qYXZhCkBAIC0wLDAgKzEsMyBAQAorQEEoMTApIAorcHVibGljIGNsYXNzIEMgeworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2Fubm90YXRpb25zL2FkZEFubm90YXRpb25UeXBlTWVtYmVyV2l0aERlZmF1bHRWYWx1ZS9zcmMvQzEuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2Fubm90YXRpb25zL2FkZEFubm90YXRpb25UeXBlTWVtYmVyV2l0aERlZmF1bHRWYWx1ZS9zcmMvQzEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMzQyOTA1Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvYW5ub3RhdGlvbnMvYWRkQW5ub3RhdGlvblR5cGVNZW1iZXJXaXRoRGVmYXVsdFZhbHVlL3NyYy9DMS5qYXZhCkBAIC0wLDAgKzEsNiBAQAorcHVibGljIGNsYXNzIEMxIHsKKworICBAQSgyMCkKKyAgdm9pZCBmb28oKSB7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9hbm5vdGF0aW9ucy9hZGRBbm5vdGF0aW9uVHlwZU1lbWJlcldpdGhEZWZhdWx0VmFsdWUvc3JjL0MyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9hbm5vdGF0aW9ucy9hZGRBbm5vdGF0aW9uVHlwZU1lbWJlcldpdGhEZWZhdWx0VmFsdWUvc3JjL0MyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTc3NjE1NmIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9hbm5vdGF0aW9ucy9hZGRBbm5vdGF0aW9uVHlwZU1lbWJlcldpdGhEZWZhdWx0VmFsdWUvc3JjL0MyLmphdmEKQEAgLTAsMCArMSw1IEBACitwdWJsaWMgY2xhc3MgQzIgeworCisgIEBBKDMwKSAKKyAgaW50IGZpZWxkOworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2Fubm90YXRpb25zL2FkZEFubm90YXRpb25UeXBlTWVtYmVyV2l0aERlZmF1bHRWYWx1ZTIubG9nIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvYW5ub3RhdGlvbnMvYWRkQW5ub3RhdGlvblR5cGVNZW1iZXJXaXRoRGVmYXVsdFZhbHVlMi5sb2cKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDljYjYwMQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2Fubm90YXRpb25zL2FkZEFubm90YXRpb25UeXBlTWVtYmVyV2l0aERlZmF1bHRWYWx1ZTIubG9nCkBAIC0wLDAgKzEsNiBAQAorQ2xlYW5pbmcgb3V0cHV0IGZpbGVzOgorb3V0L3Byb2R1Y3Rpb24vQWRkQW5ub3RhdGlvblR5cGVNZW1iZXJXaXRoRGVmYXVsdFZhbHVlMi9BLmNsYXNzCitFbmQgb2YgZmlsZXMKK0NvbXBpbGluZyBmaWxlczoKK3NyYy9BLmphdmEKK0VuZCBvZiBmaWxlcwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvYW5ub3RhdGlvbnMvYWRkQW5ub3RhdGlvblR5cGVNZW1iZXJXaXRoRGVmYXVsdFZhbHVlMi9BLmphdmEubmV3IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvYW5ub3RhdGlvbnMvYWRkQW5ub3RhdGlvblR5cGVNZW1iZXJXaXRoRGVmYXVsdFZhbHVlMi9BLmphdmEubmV3Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFlMmNmMTMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9hbm5vdGF0aW9ucy9hZGRBbm5vdGF0aW9uVHlwZU1lbWJlcldpdGhEZWZhdWx0VmFsdWUyL0EuamF2YS5uZXcKQEAgLTAsMCArMSw0IEBACitwdWJsaWMgQGludGVyZmFjZSBBIHsKKyAgQ2xhc3MgdmFsdWUoKTsKKyAgQ2xhc3MgdmFsdWUxKCkgZGVmYXVsdCBieXRlLmNsYXNzOworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2Fubm90YXRpb25zL2FkZEFubm90YXRpb25UeXBlTWVtYmVyV2l0aERlZmF1bHRWYWx1ZTIvc3JjL0EuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2Fubm90YXRpb25zL2FkZEFubm90YXRpb25UeXBlTWVtYmVyV2l0aERlZmF1bHRWYWx1ZTIvc3JjL0EuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMjEyNGZlCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvYW5ub3RhdGlvbnMvYWRkQW5ub3RhdGlvblR5cGVNZW1iZXJXaXRoRGVmYXVsdFZhbHVlMi9zcmMvQS5qYXZhCkBAIC0wLDAgKzEsMyBAQAorcHVibGljIEBpbnRlcmZhY2UgQSB7CisgIENsYXNzIHZhbHVlKCk7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvYW5ub3RhdGlvbnMvYWRkQW5ub3RhdGlvblR5cGVNZW1iZXJXaXRoRGVmYXVsdFZhbHVlMi9zcmMvQy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvYW5ub3RhdGlvbnMvYWRkQW5ub3RhdGlvblR5cGVNZW1iZXJXaXRoRGVmYXVsdFZhbHVlMi9zcmMvQy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk2ZTYyZDAKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9hbm5vdGF0aW9ucy9hZGRBbm5vdGF0aW9uVHlwZU1lbWJlcldpdGhEZWZhdWx0VmFsdWUyL3NyYy9DLmphdmEKQEAgLTAsMCArMSwzIEBACitAQShpbnQuY2xhc3MpIAorcHVibGljIGNsYXNzIEMgeworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2Fubm90YXRpb25zL2FkZEFubm90YXRpb25UeXBlTWVtYmVyV2l0aERlZmF1bHRWYWx1ZTIvc3JjL0MxLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9hbm5vdGF0aW9ucy9hZGRBbm5vdGF0aW9uVHlwZU1lbWJlcldpdGhEZWZhdWx0VmFsdWUyL3NyYy9DMS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ5OGI5ZDcKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9hbm5vdGF0aW9ucy9hZGRBbm5vdGF0aW9uVHlwZU1lbWJlcldpdGhEZWZhdWx0VmFsdWUyL3NyYy9DMS5qYXZhCkBAIC0wLDAgKzEsNiBAQAorcHVibGljIGNsYXNzIEMxIHsKKworICBAQShib29sZWFuLmNsYXNzKQorICB2b2lkIGZvbygpIHsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2Fubm90YXRpb25zL2FkZEFubm90YXRpb25UeXBlTWVtYmVyV2l0aERlZmF1bHRWYWx1ZTIvc3JjL0MyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9hbm5vdGF0aW9ucy9hZGRBbm5vdGF0aW9uVHlwZU1lbWJlcldpdGhEZWZhdWx0VmFsdWUyL3NyYy9DMi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJmNzRmNDUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9hbm5vdGF0aW9ucy9hZGRBbm5vdGF0aW9uVHlwZU1lbWJlcldpdGhEZWZhdWx0VmFsdWUyL3NyYy9DMi5qYXZhCkBAIC0wLDAgKzEsNSBAQAorcHVibGljIGNsYXNzIEMyIHsKKworICBAQShkb3VibGUuY2xhc3MpIAorICBpbnQgZmllbGQ7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvYW5ub3RhdGlvbnMvYWRkQW5ub3RhdGlvblR5cGVNZW1iZXJXaXRob3V0RGVmYXVsdFZhbHVlLmxvZyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2Fubm90YXRpb25zL2FkZEFubm90YXRpb25UeXBlTWVtYmVyV2l0aG91dERlZmF1bHRWYWx1ZS5sb2cKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWUxYmE4MgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2Fubm90YXRpb25zL2FkZEFubm90YXRpb25UeXBlTWVtYmVyV2l0aG91dERlZmF1bHRWYWx1ZS5sb2cKQEAgLTAsMCArMSwxNiBAQAorQ2xlYW5pbmcgb3V0cHV0IGZpbGVzOgorb3V0L3Byb2R1Y3Rpb24vQWRkQW5ub3RhdGlvblR5cGVNZW1iZXJXaXRob3V0RGVmYXVsdFZhbHVlL0EuY2xhc3MKK0VuZCBvZiBmaWxlcworQ29tcGlsaW5nIGZpbGVzOgorc3JjL0EuamF2YQorRW5kIG9mIGZpbGVzCitDbGVhbmluZyBvdXRwdXQgZmlsZXM6CitvdXQvcHJvZHVjdGlvbi9BZGRBbm5vdGF0aW9uVHlwZU1lbWJlcldpdGhvdXREZWZhdWx0VmFsdWUvQy5jbGFzcworb3V0L3Byb2R1Y3Rpb24vQWRkQW5ub3RhdGlvblR5cGVNZW1iZXJXaXRob3V0RGVmYXVsdFZhbHVlL0MxLmNsYXNzCitvdXQvcHJvZHVjdGlvbi9BZGRBbm5vdGF0aW9uVHlwZU1lbWJlcldpdGhvdXREZWZhdWx0VmFsdWUvQzIuY2xhc3MKK0VuZCBvZiBmaWxlcworQ29tcGlsaW5nIGZpbGVzOgorc3JjL0MuamF2YQorc3JjL0MxLmphdmEKK3NyYy9DMi5qYXZhCitFbmQgb2YgZmlsZXMKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2Fubm90YXRpb25zL2FkZEFubm90YXRpb25UeXBlTWVtYmVyV2l0aG91dERlZmF1bHRWYWx1ZS9BLmphdmEubmV3IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvYW5ub3RhdGlvbnMvYWRkQW5ub3RhdGlvblR5cGVNZW1iZXJXaXRob3V0RGVmYXVsdFZhbHVlL0EuamF2YS5uZXcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTM4Njk5OQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2Fubm90YXRpb25zL2FkZEFubm90YXRpb25UeXBlTWVtYmVyV2l0aG91dERlZmF1bHRWYWx1ZS9BLmphdmEubmV3CkBAIC0wLDAgKzEsNCBAQAorcHVibGljIEBpbnRlcmZhY2UgQSB7CisgIGludCB2YWx1ZSgpOworICBpbnQgdmFsdWUxKCk7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvYW5ub3RhdGlvbnMvYWRkQW5ub3RhdGlvblR5cGVNZW1iZXJXaXRob3V0RGVmYXVsdFZhbHVlL3NyYy9BLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9hbm5vdGF0aW9ucy9hZGRBbm5vdGF0aW9uVHlwZU1lbWJlcldpdGhvdXREZWZhdWx0VmFsdWUvc3JjL0EuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44N2YxYjY0Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvYW5ub3RhdGlvbnMvYWRkQW5ub3RhdGlvblR5cGVNZW1iZXJXaXRob3V0RGVmYXVsdFZhbHVlL3NyYy9BLmphdmEKQEAgLTAsMCArMSwzIEBACitwdWJsaWMgQGludGVyZmFjZSBBIHsKKyAgaW50IHZhbHVlKCk7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvYW5ub3RhdGlvbnMvYWRkQW5ub3RhdGlvblR5cGVNZW1iZXJXaXRob3V0RGVmYXVsdFZhbHVlL3NyYy9DLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9hbm5vdGF0aW9ucy9hZGRBbm5vdGF0aW9uVHlwZU1lbWJlcldpdGhvdXREZWZhdWx0VmFsdWUvc3JjL0MuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOTYyYWVmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvYW5ub3RhdGlvbnMvYWRkQW5ub3RhdGlvblR5cGVNZW1iZXJXaXRob3V0RGVmYXVsdFZhbHVlL3NyYy9DLmphdmEKQEAgLTAsMCArMSwzIEBACitAQSgxMCkgCitwdWJsaWMgY2xhc3MgQyB7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvYW5ub3RhdGlvbnMvYWRkQW5ub3RhdGlvblR5cGVNZW1iZXJXaXRob3V0RGVmYXVsdFZhbHVlL3NyYy9DMS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvYW5ub3RhdGlvbnMvYWRkQW5ub3RhdGlvblR5cGVNZW1iZXJXaXRob3V0RGVmYXVsdFZhbHVlL3NyYy9DMS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAzNDI5MDUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9hbm5vdGF0aW9ucy9hZGRBbm5vdGF0aW9uVHlwZU1lbWJlcldpdGhvdXREZWZhdWx0VmFsdWUvc3JjL0MxLmphdmEKQEAgLTAsMCArMSw2IEBACitwdWJsaWMgY2xhc3MgQzEgeworCisgIEBBKDIwKQorICB2b2lkIGZvbygpIHsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2Fubm90YXRpb25zL2FkZEFubm90YXRpb25UeXBlTWVtYmVyV2l0aG91dERlZmF1bHRWYWx1ZS9zcmMvQzIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2Fubm90YXRpb25zL2FkZEFubm90YXRpb25UeXBlTWVtYmVyV2l0aG91dERlZmF1bHRWYWx1ZS9zcmMvQzIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNzc2MTU2YgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2Fubm90YXRpb25zL2FkZEFubm90YXRpb25UeXBlTWVtYmVyV2l0aG91dERlZmF1bHRWYWx1ZS9zcmMvQzIuamF2YQpAQCAtMCwwICsxLDUgQEAKK3B1YmxpYyBjbGFzcyBDMiB7CisKKyAgQEEoMzApIAorICBpbnQgZmllbGQ7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvYW5ub3RhdGlvbnMvYWRkRGVmYXVsdFRvQW5ub3RhdGlvbk1lbWJlci5sb2cgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9hbm5vdGF0aW9ucy9hZGREZWZhdWx0VG9Bbm5vdGF0aW9uTWVtYmVyLmxvZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yM2NlOWM4NwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2Fubm90YXRpb25zL2FkZERlZmF1bHRUb0Fubm90YXRpb25NZW1iZXIubG9nCkBAIC0wLDAgKzEsNiBAQAorQ2xlYW5pbmcgb3V0cHV0IGZpbGVzOgorb3V0L3Byb2R1Y3Rpb24vQWRkRGVmYXVsdFRvQW5ub3RhdGlvbk1lbWJlci9BLmNsYXNzCitFbmQgb2YgZmlsZXMKK0NvbXBpbGluZyBmaWxlczoKK3NyYy9BLmphdmEKK0VuZCBvZiBmaWxlcwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvYW5ub3RhdGlvbnMvYWRkRGVmYXVsdFRvQW5ub3RhdGlvbk1lbWJlci9BLmphdmEubmV3IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvYW5ub3RhdGlvbnMvYWRkRGVmYXVsdFRvQW5ub3RhdGlvbk1lbWJlci9BLmphdmEubmV3Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVjYWEzMTQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9hbm5vdGF0aW9ucy9hZGREZWZhdWx0VG9Bbm5vdGF0aW9uTWVtYmVyL0EuamF2YS5uZXcKQEAgLTAsMCArMSwzIEBACitwdWJsaWMgQGludGVyZmFjZSBBIHsKKyAgaW50IHZhbHVlKCkgZGVmYXVsdCA3OworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2Fubm90YXRpb25zL2FkZERlZmF1bHRUb0Fubm90YXRpb25NZW1iZXIvc3JjL0EuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2Fubm90YXRpb25zL2FkZERlZmF1bHRUb0Fubm90YXRpb25NZW1iZXIvc3JjL0EuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44N2YxYjY0Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvYW5ub3RhdGlvbnMvYWRkRGVmYXVsdFRvQW5ub3RhdGlvbk1lbWJlci9zcmMvQS5qYXZhCkBAIC0wLDAgKzEsMyBAQAorcHVibGljIEBpbnRlcmZhY2UgQSB7CisgIGludCB2YWx1ZSgpOworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2Fubm90YXRpb25zL2FkZERlZmF1bHRUb0Fubm90YXRpb25NZW1iZXIvc3JjL0MuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2Fubm90YXRpb25zL2FkZERlZmF1bHRUb0Fubm90YXRpb25NZW1iZXIvc3JjL0MuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOTYyYWVmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvYW5ub3RhdGlvbnMvYWRkRGVmYXVsdFRvQW5ub3RhdGlvbk1lbWJlci9zcmMvQy5qYXZhCkBAIC0wLDAgKzEsMyBAQAorQEEoMTApIAorcHVibGljIGNsYXNzIEMgeworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2Fubm90YXRpb25zL2FkZERlZmF1bHRUb0Fubm90YXRpb25NZW1iZXIvc3JjL0MxLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9hbm5vdGF0aW9ucy9hZGREZWZhdWx0VG9Bbm5vdGF0aW9uTWVtYmVyL3NyYy9DMS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAzNDI5MDUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9hbm5vdGF0aW9ucy9hZGREZWZhdWx0VG9Bbm5vdGF0aW9uTWVtYmVyL3NyYy9DMS5qYXZhCkBAIC0wLDAgKzEsNiBAQAorcHVibGljIGNsYXNzIEMxIHsKKworICBAQSgyMCkKKyAgdm9pZCBmb28oKSB7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9hbm5vdGF0aW9ucy9hZGREZWZhdWx0VG9Bbm5vdGF0aW9uTWVtYmVyL3NyYy9DMi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvYW5ub3RhdGlvbnMvYWRkRGVmYXVsdFRvQW5ub3RhdGlvbk1lbWJlci9zcmMvQzIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNzc2MTU2YgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2Fubm90YXRpb25zL2FkZERlZmF1bHRUb0Fubm90YXRpb25NZW1iZXIvc3JjL0MyLmphdmEKQEAgLTAsMCArMSw1IEBACitwdWJsaWMgY2xhc3MgQzIgeworCisgIEBBKDMwKSAKKyAgaW50IGZpZWxkOworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2Fubm90YXRpb25zL2NoYW5nZUFubm90YXRpb25SZXRlbnRpb25Qb2xpY3kubG9nIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvYW5ub3RhdGlvbnMvY2hhbmdlQW5ub3RhdGlvblJldGVudGlvblBvbGljeS5sb2cKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDU2NGUxMwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2Fubm90YXRpb25zL2NoYW5nZUFubm90YXRpb25SZXRlbnRpb25Qb2xpY3kubG9nCkBAIC0wLDAgKzEsMTYgQEAKK0NsZWFuaW5nIG91dHB1dCBmaWxlczoKK291dC9wcm9kdWN0aW9uL0NoYW5nZUFubm90YXRpb25SZXRlbnRpb25Qb2xpY3kvQS5jbGFzcworRW5kIG9mIGZpbGVzCitDb21waWxpbmcgZmlsZXM6CitzcmMvQS5qYXZhCitFbmQgb2YgZmlsZXMKK0NsZWFuaW5nIG91dHB1dCBmaWxlczoKK291dC9wcm9kdWN0aW9uL0NoYW5nZUFubm90YXRpb25SZXRlbnRpb25Qb2xpY3kvQy5jbGFzcworb3V0L3Byb2R1Y3Rpb24vQ2hhbmdlQW5ub3RhdGlvblJldGVudGlvblBvbGljeS9DMS5jbGFzcworb3V0L3Byb2R1Y3Rpb24vQ2hhbmdlQW5ub3RhdGlvblJldGVudGlvblBvbGljeS9DMi5jbGFzcworRW5kIG9mIGZpbGVzCitDb21waWxpbmcgZmlsZXM6CitzcmMvQy5qYXZhCitzcmMvQzEuamF2YQorc3JjL0MyLmphdmEKK0VuZCBvZiBmaWxlcwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvYW5ub3RhdGlvbnMvY2hhbmdlQW5ub3RhdGlvblJldGVudGlvblBvbGljeS9BLmphdmEubmV3IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvYW5ub3RhdGlvbnMvY2hhbmdlQW5ub3RhdGlvblJldGVudGlvblBvbGljeS9BLmphdmEubmV3Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU2ZWExYzYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9hbm5vdGF0aW9ucy9jaGFuZ2VBbm5vdGF0aW9uUmV0ZW50aW9uUG9saWN5L0EuamF2YS5uZXcKQEAgLTAsMCArMSw3IEBACitpbXBvcnQgamF2YS5sYW5nLmFubm90YXRpb24uKjsKK2ltcG9ydCBzdGF0aWMgamF2YS5sYW5nLmFubm90YXRpb24uUmV0ZW50aW9uUG9saWN5Lio7CisKK0BSZXRlbnRpb24oU09VUkNFKQorcHVibGljIEBpbnRlcmZhY2UgQSB7CisgIGludCB2YWx1ZSgpOworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2Fubm90YXRpb25zL2NoYW5nZUFubm90YXRpb25SZXRlbnRpb25Qb2xpY3kvc3JjL0EuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2Fubm90YXRpb25zL2NoYW5nZUFubm90YXRpb25SZXRlbnRpb25Qb2xpY3kvc3JjL0EuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44N2YxYjY0Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvYW5ub3RhdGlvbnMvY2hhbmdlQW5ub3RhdGlvblJldGVudGlvblBvbGljeS9zcmMvQS5qYXZhCkBAIC0wLDAgKzEsMyBAQAorcHVibGljIEBpbnRlcmZhY2UgQSB7CisgIGludCB2YWx1ZSgpOworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2Fubm90YXRpb25zL2NoYW5nZUFubm90YXRpb25SZXRlbnRpb25Qb2xpY3kvc3JjL0MuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2Fubm90YXRpb25zL2NoYW5nZUFubm90YXRpb25SZXRlbnRpb25Qb2xpY3kvc3JjL0MuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOTYyYWVmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvYW5ub3RhdGlvbnMvY2hhbmdlQW5ub3RhdGlvblJldGVudGlvblBvbGljeS9zcmMvQy5qYXZhCkBAIC0wLDAgKzEsMyBAQAorQEEoMTApIAorcHVibGljIGNsYXNzIEMgeworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2Fubm90YXRpb25zL2NoYW5nZUFubm90YXRpb25SZXRlbnRpb25Qb2xpY3kvc3JjL0MxLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9hbm5vdGF0aW9ucy9jaGFuZ2VBbm5vdGF0aW9uUmV0ZW50aW9uUG9saWN5L3NyYy9DMS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAzNDI5MDUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9hbm5vdGF0aW9ucy9jaGFuZ2VBbm5vdGF0aW9uUmV0ZW50aW9uUG9saWN5L3NyYy9DMS5qYXZhCkBAIC0wLDAgKzEsNiBAQAorcHVibGljIGNsYXNzIEMxIHsKKworICBAQSgyMCkKKyAgdm9pZCBmb28oKSB7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9hbm5vdGF0aW9ucy9jaGFuZ2VBbm5vdGF0aW9uUmV0ZW50aW9uUG9saWN5L3NyYy9DMi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvYW5ub3RhdGlvbnMvY2hhbmdlQW5ub3RhdGlvblJldGVudGlvblBvbGljeS9zcmMvQzIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNzc2MTU2YgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2Fubm90YXRpb25zL2NoYW5nZUFubm90YXRpb25SZXRlbnRpb25Qb2xpY3kvc3JjL0MyLmphdmEKQEAgLTAsMCArMSw1IEBACitwdWJsaWMgY2xhc3MgQzIgeworCisgIEBBKDMwKSAKKyAgaW50IGZpZWxkOworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2Fubm90YXRpb25zL2NoYW5nZUFubm90YXRpb25SZXRlbnRpb25Qb2xpY3kxLmxvZyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2Fubm90YXRpb25zL2NoYW5nZUFubm90YXRpb25SZXRlbnRpb25Qb2xpY3kxLmxvZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NjNiYzdlCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvYW5ub3RhdGlvbnMvY2hhbmdlQW5ub3RhdGlvblJldGVudGlvblBvbGljeTEubG9nCkBAIC0wLDAgKzEsMTYgQEAKK0NsZWFuaW5nIG91dHB1dCBmaWxlczoKK291dC9wcm9kdWN0aW9uL0NoYW5nZUFubm90YXRpb25SZXRlbnRpb25Qb2xpY3kxL0EuY2xhc3MKK0VuZCBvZiBmaWxlcworQ29tcGlsaW5nIGZpbGVzOgorc3JjL0EuamF2YQorRW5kIG9mIGZpbGVzCitDbGVhbmluZyBvdXRwdXQgZmlsZXM6CitvdXQvcHJvZHVjdGlvbi9DaGFuZ2VBbm5vdGF0aW9uUmV0ZW50aW9uUG9saWN5MS9DLmNsYXNzCitvdXQvcHJvZHVjdGlvbi9DaGFuZ2VBbm5vdGF0aW9uUmV0ZW50aW9uUG9saWN5MS9DMS5jbGFzcworb3V0L3Byb2R1Y3Rpb24vQ2hhbmdlQW5ub3RhdGlvblJldGVudGlvblBvbGljeTEvQzIuY2xhc3MKK0VuZCBvZiBmaWxlcworQ29tcGlsaW5nIGZpbGVzOgorc3JjL0MuamF2YQorc3JjL0MxLmphdmEKK3NyYy9DMi5qYXZhCitFbmQgb2YgZmlsZXMKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2Fubm90YXRpb25zL2NoYW5nZUFubm90YXRpb25SZXRlbnRpb25Qb2xpY3kxL0EuamF2YS5uZXcgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9hbm5vdGF0aW9ucy9jaGFuZ2VBbm5vdGF0aW9uUmV0ZW50aW9uUG9saWN5MS9BLmphdmEubmV3Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUyZDhkYzAKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9hbm5vdGF0aW9ucy9jaGFuZ2VBbm5vdGF0aW9uUmV0ZW50aW9uUG9saWN5MS9BLmphdmEubmV3CkBAIC0wLDAgKzEsNyBAQAoraW1wb3J0IGphdmEubGFuZy5hbm5vdGF0aW9uLio7CitpbXBvcnQgc3RhdGljIGphdmEubGFuZy5hbm5vdGF0aW9uLlJldGVudGlvblBvbGljeS4qOworCitAUmV0ZW50aW9uKFJVTlRJTUUpCitwdWJsaWMgQGludGVyZmFjZSBBIHsKKyAgaW50IHZhbHVlKCk7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvYW5ub3RhdGlvbnMvY2hhbmdlQW5ub3RhdGlvblJldGVudGlvblBvbGljeTEvc3JjL0EuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2Fubm90YXRpb25zL2NoYW5nZUFubm90YXRpb25SZXRlbnRpb25Qb2xpY3kxL3NyYy9BLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODdmMWI2NAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2Fubm90YXRpb25zL2NoYW5nZUFubm90YXRpb25SZXRlbnRpb25Qb2xpY3kxL3NyYy9BLmphdmEKQEAgLTAsMCArMSwzIEBACitwdWJsaWMgQGludGVyZmFjZSBBIHsKKyAgaW50IHZhbHVlKCk7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvYW5ub3RhdGlvbnMvY2hhbmdlQW5ub3RhdGlvblJldGVudGlvblBvbGljeTEvc3JjL0MuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2Fubm90YXRpb25zL2NoYW5nZUFubm90YXRpb25SZXRlbnRpb25Qb2xpY3kxL3NyYy9DLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjk2MmFlZgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2Fubm90YXRpb25zL2NoYW5nZUFubm90YXRpb25SZXRlbnRpb25Qb2xpY3kxL3NyYy9DLmphdmEKQEAgLTAsMCArMSwzIEBACitAQSgxMCkgCitwdWJsaWMgY2xhc3MgQyB7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvYW5ub3RhdGlvbnMvY2hhbmdlQW5ub3RhdGlvblJldGVudGlvblBvbGljeTEvc3JjL0MxLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9hbm5vdGF0aW9ucy9jaGFuZ2VBbm5vdGF0aW9uUmV0ZW50aW9uUG9saWN5MS9zcmMvQzEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMzQyOTA1Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvYW5ub3RhdGlvbnMvY2hhbmdlQW5ub3RhdGlvblJldGVudGlvblBvbGljeTEvc3JjL0MxLmphdmEKQEAgLTAsMCArMSw2IEBACitwdWJsaWMgY2xhc3MgQzEgeworCisgIEBBKDIwKQorICB2b2lkIGZvbygpIHsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2Fubm90YXRpb25zL2NoYW5nZUFubm90YXRpb25SZXRlbnRpb25Qb2xpY3kxL3NyYy9DMi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvYW5ub3RhdGlvbnMvY2hhbmdlQW5ub3RhdGlvblJldGVudGlvblBvbGljeTEvc3JjL0MyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTc3NjE1NmIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9hbm5vdGF0aW9ucy9jaGFuZ2VBbm5vdGF0aW9uUmV0ZW50aW9uUG9saWN5MS9zcmMvQzIuamF2YQpAQCAtMCwwICsxLDUgQEAKK3B1YmxpYyBjbGFzcyBDMiB7CisKKyAgQEEoMzApIAorICBpbnQgZmllbGQ7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvYW5ub3RhdGlvbnMvY2hhbmdlQW5ub3RhdGlvblJldGVudGlvblBvbGljeTIubG9nIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvYW5ub3RhdGlvbnMvY2hhbmdlQW5ub3RhdGlvblJldGVudGlvblBvbGljeTIubG9nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxMWNhOTMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9hbm5vdGF0aW9ucy9jaGFuZ2VBbm5vdGF0aW9uUmV0ZW50aW9uUG9saWN5Mi5sb2cKQEAgLTAsMCArMSwxOCBAQAorQ2xlYW5pbmcgb3V0cHV0IGZpbGVzOgorb3V0L3Byb2R1Y3Rpb24vQ2hhbmdlQW5ub3RhdGlvblJldGVudGlvblBvbGljeTIvQS5jbGFzcworRW5kIG9mIGZpbGVzCitDb21waWxpbmcgZmlsZXM6CitzcmMvQS5qYXZhCitFbmQgb2YgZmlsZXMKK0NsZWFuaW5nIG91dHB1dCBmaWxlczoKK291dC9wcm9kdWN0aW9uL0NoYW5nZUFubm90YXRpb25SZXRlbnRpb25Qb2xpY3kyL0EuY2xhc3MKK291dC9wcm9kdWN0aW9uL0NoYW5nZUFubm90YXRpb25SZXRlbnRpb25Qb2xpY3kyL0MuY2xhc3MKK291dC9wcm9kdWN0aW9uL0NoYW5nZUFubm90YXRpb25SZXRlbnRpb25Qb2xpY3kyL0MxLmNsYXNzCitvdXQvcHJvZHVjdGlvbi9DaGFuZ2VBbm5vdGF0aW9uUmV0ZW50aW9uUG9saWN5Mi9DMi5jbGFzcworRW5kIG9mIGZpbGVzCitDb21waWxpbmcgZmlsZXM6CitzcmMvQS5qYXZhCitzcmMvQy5qYXZhCitzcmMvQzEuamF2YQorc3JjL0MyLmphdmEKK0VuZCBvZiBmaWxlcwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvYW5ub3RhdGlvbnMvY2hhbmdlQW5ub3RhdGlvblJldGVudGlvblBvbGljeTIvQS5qYXZhLm5ldyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2Fubm90YXRpb25zL2NoYW5nZUFubm90YXRpb25SZXRlbnRpb25Qb2xpY3kyL0EuamF2YS5uZXcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTJkOGRjMAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2Fubm90YXRpb25zL2NoYW5nZUFubm90YXRpb25SZXRlbnRpb25Qb2xpY3kyL0EuamF2YS5uZXcKQEAgLTAsMCArMSw3IEBACitpbXBvcnQgamF2YS5sYW5nLmFubm90YXRpb24uKjsKK2ltcG9ydCBzdGF0aWMgamF2YS5sYW5nLmFubm90YXRpb24uUmV0ZW50aW9uUG9saWN5Lio7CisKK0BSZXRlbnRpb24oUlVOVElNRSkKK3B1YmxpYyBAaW50ZXJmYWNlIEEgeworICBpbnQgdmFsdWUoKTsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9hbm5vdGF0aW9ucy9jaGFuZ2VBbm5vdGF0aW9uUmV0ZW50aW9uUG9saWN5Mi9zcmMvQS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvYW5ub3RhdGlvbnMvY2hhbmdlQW5ub3RhdGlvblJldGVudGlvblBvbGljeTIvc3JjL0EuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NmVhMWM2Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvYW5ub3RhdGlvbnMvY2hhbmdlQW5ub3RhdGlvblJldGVudGlvblBvbGljeTIvc3JjL0EuamF2YQpAQCAtMCwwICsxLDcgQEAKK2ltcG9ydCBqYXZhLmxhbmcuYW5ub3RhdGlvbi4qOworaW1wb3J0IHN0YXRpYyBqYXZhLmxhbmcuYW5ub3RhdGlvbi5SZXRlbnRpb25Qb2xpY3kuKjsKKworQFJldGVudGlvbihTT1VSQ0UpCitwdWJsaWMgQGludGVyZmFjZSBBIHsKKyAgaW50IHZhbHVlKCk7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvYW5ub3RhdGlvbnMvY2hhbmdlQW5ub3RhdGlvblJldGVudGlvblBvbGljeTIvc3JjL0MuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2Fubm90YXRpb25zL2NoYW5nZUFubm90YXRpb25SZXRlbnRpb25Qb2xpY3kyL3NyYy9DLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjk2MmFlZgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2Fubm90YXRpb25zL2NoYW5nZUFubm90YXRpb25SZXRlbnRpb25Qb2xpY3kyL3NyYy9DLmphdmEKQEAgLTAsMCArMSwzIEBACitAQSgxMCkgCitwdWJsaWMgY2xhc3MgQyB7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvYW5ub3RhdGlvbnMvY2hhbmdlQW5ub3RhdGlvblJldGVudGlvblBvbGljeTIvc3JjL0MxLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9hbm5vdGF0aW9ucy9jaGFuZ2VBbm5vdGF0aW9uUmV0ZW50aW9uUG9saWN5Mi9zcmMvQzEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMzQyOTA1Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvYW5ub3RhdGlvbnMvY2hhbmdlQW5ub3RhdGlvblJldGVudGlvblBvbGljeTIvc3JjL0MxLmphdmEKQEAgLTAsMCArMSw2IEBACitwdWJsaWMgY2xhc3MgQzEgeworCisgIEBBKDIwKQorICB2b2lkIGZvbygpIHsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2Fubm90YXRpb25zL2NoYW5nZUFubm90YXRpb25SZXRlbnRpb25Qb2xpY3kyL3NyYy9DMi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvYW5ub3RhdGlvbnMvY2hhbmdlQW5ub3RhdGlvblJldGVudGlvblBvbGljeTIvc3JjL0MyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2EyNGYxOQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2Fubm90YXRpb25zL2NoYW5nZUFubm90YXRpb25SZXRlbnRpb25Qb2xpY3kyL3NyYy9DMi5qYXZhCkBAIC0wLDAgKzEsMyBAQAorcHVibGljIGNsYXNzIEMyIHsKKyAgaW50IGZpZWxkOworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2Fubm90YXRpb25zL2NoYW5nZUFubm90YXRpb25SZXRlbnRpb25Qb2xpY3kzLmxvZyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2Fubm90YXRpb25zL2NoYW5nZUFubm90YXRpb25SZXRlbnRpb25Qb2xpY3kzLmxvZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZGFiMjEwCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvYW5ub3RhdGlvbnMvY2hhbmdlQW5ub3RhdGlvblJldGVudGlvblBvbGljeTMubG9nCkBAIC0wLDAgKzEsMTggQEAKK0NsZWFuaW5nIG91dHB1dCBmaWxlczoKK291dC9wcm9kdWN0aW9uL0NoYW5nZUFubm90YXRpb25SZXRlbnRpb25Qb2xpY3kzL0EuY2xhc3MKK0VuZCBvZiBmaWxlcworQ29tcGlsaW5nIGZpbGVzOgorc3JjL0EuamF2YQorRW5kIG9mIGZpbGVzCitDbGVhbmluZyBvdXRwdXQgZmlsZXM6CitvdXQvcHJvZHVjdGlvbi9DaGFuZ2VBbm5vdGF0aW9uUmV0ZW50aW9uUG9saWN5My9BLmNsYXNzCitvdXQvcHJvZHVjdGlvbi9DaGFuZ2VBbm5vdGF0aW9uUmV0ZW50aW9uUG9saWN5My9DLmNsYXNzCitvdXQvcHJvZHVjdGlvbi9DaGFuZ2VBbm5vdGF0aW9uUmV0ZW50aW9uUG9saWN5My9DMS5jbGFzcworb3V0L3Byb2R1Y3Rpb24vQ2hhbmdlQW5ub3RhdGlvblJldGVudGlvblBvbGljeTMvQzIuY2xhc3MKK0VuZCBvZiBmaWxlcworQ29tcGlsaW5nIGZpbGVzOgorc3JjL0EuamF2YQorc3JjL0MuamF2YQorc3JjL0MxLmphdmEKK3NyYy9DMi5qYXZhCitFbmQgb2YgZmlsZXMKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2Fubm90YXRpb25zL2NoYW5nZUFubm90YXRpb25SZXRlbnRpb25Qb2xpY3kzL0EuamF2YS5uZXcgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9hbm5vdGF0aW9ucy9jaGFuZ2VBbm5vdGF0aW9uUmV0ZW50aW9uUG9saWN5My9BLmphdmEubmV3Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQwMDkyYTkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9hbm5vdGF0aW9ucy9jaGFuZ2VBbm5vdGF0aW9uUmV0ZW50aW9uUG9saWN5My9BLmphdmEubmV3CkBAIC0wLDAgKzEsNyBAQAoraW1wb3J0IGphdmEubGFuZy5hbm5vdGF0aW9uLio7CitpbXBvcnQgc3RhdGljIGphdmEubGFuZy5hbm5vdGF0aW9uLlJldGVudGlvblBvbGljeS4qOworCitAUmV0ZW50aW9uKENMQVNTKQorcHVibGljIEBpbnRlcmZhY2UgQSB7CisgIGludCB2YWx1ZSgpOworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2Fubm90YXRpb25zL2NoYW5nZUFubm90YXRpb25SZXRlbnRpb25Qb2xpY3kzL3NyYy9BLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9hbm5vdGF0aW9ucy9jaGFuZ2VBbm5vdGF0aW9uUmV0ZW50aW9uUG9saWN5My9zcmMvQS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU2ZWExYzYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9hbm5vdGF0aW9ucy9jaGFuZ2VBbm5vdGF0aW9uUmV0ZW50aW9uUG9saWN5My9zcmMvQS5qYXZhCkBAIC0wLDAgKzEsNyBAQAoraW1wb3J0IGphdmEubGFuZy5hbm5vdGF0aW9uLio7CitpbXBvcnQgc3RhdGljIGphdmEubGFuZy5hbm5vdGF0aW9uLlJldGVudGlvblBvbGljeS4qOworCitAUmV0ZW50aW9uKFNPVVJDRSkKK3B1YmxpYyBAaW50ZXJmYWNlIEEgeworICBpbnQgdmFsdWUoKTsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9hbm5vdGF0aW9ucy9jaGFuZ2VBbm5vdGF0aW9uUmV0ZW50aW9uUG9saWN5My9zcmMvQy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvYW5ub3RhdGlvbnMvY2hhbmdlQW5ub3RhdGlvblJldGVudGlvblBvbGljeTMvc3JjL0MuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOTYyYWVmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvYW5ub3RhdGlvbnMvY2hhbmdlQW5ub3RhdGlvblJldGVudGlvblBvbGljeTMvc3JjL0MuamF2YQpAQCAtMCwwICsxLDMgQEAKK0BBKDEwKSAKK3B1YmxpYyBjbGFzcyBDIHsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9hbm5vdGF0aW9ucy9jaGFuZ2VBbm5vdGF0aW9uUmV0ZW50aW9uUG9saWN5My9zcmMvQzEuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2Fubm90YXRpb25zL2NoYW5nZUFubm90YXRpb25SZXRlbnRpb25Qb2xpY3kzL3NyYy9DMS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAzNDI5MDUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9hbm5vdGF0aW9ucy9jaGFuZ2VBbm5vdGF0aW9uUmV0ZW50aW9uUG9saWN5My9zcmMvQzEuamF2YQpAQCAtMCwwICsxLDYgQEAKK3B1YmxpYyBjbGFzcyBDMSB7CisKKyAgQEEoMjApCisgIHZvaWQgZm9vKCkgeworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvYW5ub3RhdGlvbnMvY2hhbmdlQW5ub3RhdGlvblJldGVudGlvblBvbGljeTMvc3JjL0MyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9hbm5vdGF0aW9ucy9jaGFuZ2VBbm5vdGF0aW9uUmV0ZW50aW9uUG9saWN5My9zcmMvQzIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNzc2MTU2YgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2Fubm90YXRpb25zL2NoYW5nZUFubm90YXRpb25SZXRlbnRpb25Qb2xpY3kzL3NyYy9DMi5qYXZhCkBAIC0wLDAgKzEsNSBAQAorcHVibGljIGNsYXNzIEMyIHsKKworICBAQSgzMCkgCisgIGludCBmaWVsZDsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9hbm5vdGF0aW9ucy9jaGFuZ2VBbm5vdGF0aW9uUmV0ZW50aW9uUG9saWN5NC5sb2cgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9hbm5vdGF0aW9ucy9jaGFuZ2VBbm5vdGF0aW9uUmV0ZW50aW9uUG9saWN5NC5sb2cKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjFmYzZjNQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2Fubm90YXRpb25zL2NoYW5nZUFubm90YXRpb25SZXRlbnRpb25Qb2xpY3k0LmxvZwpAQCAtMCwwICsxLDE0IEBACitDbGVhbmluZyBvdXRwdXQgZmlsZXM6CitvdXQvcHJvZHVjdGlvbi9DaGFuZ2VBbm5vdGF0aW9uUmV0ZW50aW9uUG9saWN5NC9BLmNsYXNzCitFbmQgb2YgZmlsZXMKK0NvbXBpbGluZyBmaWxlczoKK3NyYy9BLmphdmEKK0VuZCBvZiBmaWxlcworQ2xlYW5pbmcgb3V0cHV0IGZpbGVzOgorb3V0L3Byb2R1Y3Rpb24vQ2hhbmdlQW5ub3RhdGlvblJldGVudGlvblBvbGljeTQvQy5jbGFzcworb3V0L3Byb2R1Y3Rpb24vQ2hhbmdlQW5ub3RhdGlvblJldGVudGlvblBvbGljeTQvQzIuY2xhc3MKK0VuZCBvZiBmaWxlcworQ29tcGlsaW5nIGZpbGVzOgorc3JjL0MuamF2YQorc3JjL0MyLmphdmEKK0VuZCBvZiBmaWxlcwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvYW5ub3RhdGlvbnMvY2hhbmdlQW5ub3RhdGlvblJldGVudGlvblBvbGljeTQvQS5qYXZhLm5ldyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2Fubm90YXRpb25zL2NoYW5nZUFubm90YXRpb25SZXRlbnRpb25Qb2xpY3k0L0EuamF2YS5uZXcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTZlYTFjNgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2Fubm90YXRpb25zL2NoYW5nZUFubm90YXRpb25SZXRlbnRpb25Qb2xpY3k0L0EuamF2YS5uZXcKQEAgLTAsMCArMSw3IEBACitpbXBvcnQgamF2YS5sYW5nLmFubm90YXRpb24uKjsKK2ltcG9ydCBzdGF0aWMgamF2YS5sYW5nLmFubm90YXRpb24uUmV0ZW50aW9uUG9saWN5Lio7CisKK0BSZXRlbnRpb24oU09VUkNFKQorcHVibGljIEBpbnRlcmZhY2UgQSB7CisgIGludCB2YWx1ZSgpOworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2Fubm90YXRpb25zL2NoYW5nZUFubm90YXRpb25SZXRlbnRpb25Qb2xpY3k0L3NyYy9BLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9hbm5vdGF0aW9ucy9jaGFuZ2VBbm5vdGF0aW9uUmV0ZW50aW9uUG9saWN5NC9zcmMvQS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUyZDhkYzAKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9hbm5vdGF0aW9ucy9jaGFuZ2VBbm5vdGF0aW9uUmV0ZW50aW9uUG9saWN5NC9zcmMvQS5qYXZhCkBAIC0wLDAgKzEsNyBAQAoraW1wb3J0IGphdmEubGFuZy5hbm5vdGF0aW9uLio7CitpbXBvcnQgc3RhdGljIGphdmEubGFuZy5hbm5vdGF0aW9uLlJldGVudGlvblBvbGljeS4qOworCitAUmV0ZW50aW9uKFJVTlRJTUUpCitwdWJsaWMgQGludGVyZmFjZSBBIHsKKyAgaW50IHZhbHVlKCk7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvYW5ub3RhdGlvbnMvY2hhbmdlQW5ub3RhdGlvblJldGVudGlvblBvbGljeTQvc3JjL0MuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2Fubm90YXRpb25zL2NoYW5nZUFubm90YXRpb25SZXRlbnRpb25Qb2xpY3k0L3NyYy9DLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjk2MmFlZgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2Fubm90YXRpb25zL2NoYW5nZUFubm90YXRpb25SZXRlbnRpb25Qb2xpY3k0L3NyYy9DLmphdmEKQEAgLTAsMCArMSwzIEBACitAQSgxMCkgCitwdWJsaWMgY2xhc3MgQyB7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvYW5ub3RhdGlvbnMvY2hhbmdlQW5ub3RhdGlvblJldGVudGlvblBvbGljeTQvc3JjL0MxLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9hbm5vdGF0aW9ucy9jaGFuZ2VBbm5vdGF0aW9uUmV0ZW50aW9uUG9saWN5NC9zcmMvQzEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NmI1YjMwCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvYW5ub3RhdGlvbnMvY2hhbmdlQW5ub3RhdGlvblJldGVudGlvblBvbGljeTQvc3JjL0MxLmphdmEKQEAgLTAsMCArMSw0IEBACitwdWJsaWMgY2xhc3MgQzEgeworICB2b2lkIGZvbygpIHsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2Fubm90YXRpb25zL2NoYW5nZUFubm90YXRpb25SZXRlbnRpb25Qb2xpY3k0L3NyYy9DMi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvYW5ub3RhdGlvbnMvY2hhbmdlQW5ub3RhdGlvblJldGVudGlvblBvbGljeTQvc3JjL0MyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTc3NjE1NmIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9hbm5vdGF0aW9ucy9jaGFuZ2VBbm5vdGF0aW9uUmV0ZW50aW9uUG9saWN5NC9zcmMvQzIuamF2YQpAQCAtMCwwICsxLDUgQEAKK3B1YmxpYyBjbGFzcyBDMiB7CisKKyAgQEEoMzApIAorICBpbnQgZmllbGQ7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvYW5ub3RhdGlvbnMvY2hhbmdlQW5ub3RhdGlvblR5cGVNZW1iZXJUeXBlLmxvZyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2Fubm90YXRpb25zL2NoYW5nZUFubm90YXRpb25UeXBlTWVtYmVyVHlwZS5sb2cKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDA3MTE1YwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2Fubm90YXRpb25zL2NoYW5nZUFubm90YXRpb25UeXBlTWVtYmVyVHlwZS5sb2cKQEAgLTAsMCArMSwxNiBAQAorQ2xlYW5pbmcgb3V0cHV0IGZpbGVzOgorb3V0L3Byb2R1Y3Rpb24vQ2hhbmdlQW5ub3RhdGlvblR5cGVNZW1iZXJUeXBlL0EuY2xhc3MKK0VuZCBvZiBmaWxlcworQ29tcGlsaW5nIGZpbGVzOgorc3JjL0EuamF2YQorRW5kIG9mIGZpbGVzCitDbGVhbmluZyBvdXRwdXQgZmlsZXM6CitvdXQvcHJvZHVjdGlvbi9DaGFuZ2VBbm5vdGF0aW9uVHlwZU1lbWJlclR5cGUvQy5jbGFzcworb3V0L3Byb2R1Y3Rpb24vQ2hhbmdlQW5ub3RhdGlvblR5cGVNZW1iZXJUeXBlL0MxLmNsYXNzCitvdXQvcHJvZHVjdGlvbi9DaGFuZ2VBbm5vdGF0aW9uVHlwZU1lbWJlclR5cGUvQzIuY2xhc3MKK0VuZCBvZiBmaWxlcworQ29tcGlsaW5nIGZpbGVzOgorc3JjL0MuamF2YQorc3JjL0MxLmphdmEKK3NyYy9DMi5qYXZhCitFbmQgb2YgZmlsZXMKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2Fubm90YXRpb25zL2NoYW5nZUFubm90YXRpb25UeXBlTWVtYmVyVHlwZS9BLmphdmEubmV3IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvYW5ub3RhdGlvbnMvY2hhbmdlQW5ub3RhdGlvblR5cGVNZW1iZXJUeXBlL0EuamF2YS5uZXcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTIxMjRmZQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2Fubm90YXRpb25zL2NoYW5nZUFubm90YXRpb25UeXBlTWVtYmVyVHlwZS9BLmphdmEubmV3CkBAIC0wLDAgKzEsMyBAQAorcHVibGljIEBpbnRlcmZhY2UgQSB7CisgIENsYXNzIHZhbHVlKCk7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvYW5ub3RhdGlvbnMvY2hhbmdlQW5ub3RhdGlvblR5cGVNZW1iZXJUeXBlL3NyYy9BLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9hbm5vdGF0aW9ucy9jaGFuZ2VBbm5vdGF0aW9uVHlwZU1lbWJlclR5cGUvc3JjL0EuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44N2YxYjY0Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvYW5ub3RhdGlvbnMvY2hhbmdlQW5ub3RhdGlvblR5cGVNZW1iZXJUeXBlL3NyYy9BLmphdmEKQEAgLTAsMCArMSwzIEBACitwdWJsaWMgQGludGVyZmFjZSBBIHsKKyAgaW50IHZhbHVlKCk7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvYW5ub3RhdGlvbnMvY2hhbmdlQW5ub3RhdGlvblR5cGVNZW1iZXJUeXBlL3NyYy9DLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9hbm5vdGF0aW9ucy9jaGFuZ2VBbm5vdGF0aW9uVHlwZU1lbWJlclR5cGUvc3JjL0MuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOTYyYWVmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvYW5ub3RhdGlvbnMvY2hhbmdlQW5ub3RhdGlvblR5cGVNZW1iZXJUeXBlL3NyYy9DLmphdmEKQEAgLTAsMCArMSwzIEBACitAQSgxMCkgCitwdWJsaWMgY2xhc3MgQyB7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvYW5ub3RhdGlvbnMvY2hhbmdlQW5ub3RhdGlvblR5cGVNZW1iZXJUeXBlL3NyYy9DMS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvYW5ub3RhdGlvbnMvY2hhbmdlQW5ub3RhdGlvblR5cGVNZW1iZXJUeXBlL3NyYy9DMS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAzNDI5MDUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9hbm5vdGF0aW9ucy9jaGFuZ2VBbm5vdGF0aW9uVHlwZU1lbWJlclR5cGUvc3JjL0MxLmphdmEKQEAgLTAsMCArMSw2IEBACitwdWJsaWMgY2xhc3MgQzEgeworCisgIEBBKDIwKQorICB2b2lkIGZvbygpIHsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2Fubm90YXRpb25zL2NoYW5nZUFubm90YXRpb25UeXBlTWVtYmVyVHlwZS9zcmMvQzIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2Fubm90YXRpb25zL2NoYW5nZUFubm90YXRpb25UeXBlTWVtYmVyVHlwZS9zcmMvQzIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNzc2MTU2YgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2Fubm90YXRpb25zL2NoYW5nZUFubm90YXRpb25UeXBlTWVtYmVyVHlwZS9zcmMvQzIuamF2YQpAQCAtMCwwICsxLDUgQEAKK3B1YmxpYyBjbGFzcyBDMiB7CisKKyAgQEEoMzApIAorICBpbnQgZmllbGQ7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvYW5ub3RhdGlvbnMvY2xhc3NBc0FyZ3VtZW50LmxvZyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2Fubm90YXRpb25zL2NsYXNzQXNBcmd1bWVudC5sb2cKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzEyMjU0MgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2Fubm90YXRpb25zL2NsYXNzQXNBcmd1bWVudC5sb2cKQEAgLTAsMCArMSwxMiBAQAorQ2xlYW5pbmcgb3V0cHV0IGZpbGVzOgorb3V0L3Byb2R1Y3Rpb24vQ2xhc3NBc0FyZ3VtZW50L0EuY2xhc3MKK0VuZCBvZiBmaWxlcworQ29tcGlsaW5nIGZpbGVzOgorc3JjL0EuamF2YQorRW5kIG9mIGZpbGVzCitDbGVhbmluZyBvdXRwdXQgZmlsZXM6CitvdXQvcHJvZHVjdGlvbi9DbGFzc0FzQXJndW1lbnQvQW5ub3RhdGVkLmNsYXNzCitFbmQgb2YgZmlsZXMKK0NvbXBpbGluZyBmaWxlczoKK3NyYy9Bbm5vdGF0ZWQuamF2YQorRW5kIG9mIGZpbGVzCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9hbm5vdGF0aW9ucy9jbGFzc0FzQXJndW1lbnQvQS5qYXZhLm5ldyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2Fubm90YXRpb25zL2NsYXNzQXNBcmd1bWVudC9BLmphdmEubmV3Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2OWRlMjkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9hbm5vdGF0aW9ucy9jbGFzc0FzQXJndW1lbnQvQS5qYXZhLm5ldwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvYW5ub3RhdGlvbnMvY2xhc3NBc0FyZ3VtZW50L3NyYy9BLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9hbm5vdGF0aW9ucy9jbGFzc0FzQXJndW1lbnQvc3JjL0EuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NTVlNjJhCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvYW5ub3RhdGlvbnMvY2xhc3NBc0FyZ3VtZW50L3NyYy9BLmphdmEKQEAgLTAsMCArMSw5IEBACisvKioKKyAqIENyZWF0ZWQgd2l0aCBJbnRlbGxpSiBJREVBLgorICogVXNlcjogZGIKKyAqIERhdGU6IDA0LjA1LjEyCisgKiBUaW1lOiAxNzo0MgorICogVG8gY2hhbmdlIHRoaXMgdGVtcGxhdGUgdXNlIEZpbGUgfCBTZXR0aW5ncyB8IEZpbGUgVGVtcGxhdGVzLgorICovCitwdWJsaWMgY2xhc3MgQSB7Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9hbm5vdGF0aW9ucy9jbGFzc0FzQXJndW1lbnQvc3JjL0Fubi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvYW5ub3RhdGlvbnMvY2xhc3NBc0FyZ3VtZW50L3NyYy9Bbm4uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZWMyZjllCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvYW5ub3RhdGlvbnMvY2xhc3NBc0FyZ3VtZW50L3NyYy9Bbm4uamF2YQpAQCAtMCwwICsxLDEzIEBACisvKioKKyAqIENyZWF0ZWQgd2l0aCBJbnRlbGxpSiBJREVBLgorICogVXNlcjogZGIKKyAqIERhdGU6IDA0LjA1LjEyCisgKiBUaW1lOiAxNzo0MgorICogVG8gY2hhbmdlIHRoaXMgdGVtcGxhdGUgdXNlIEZpbGUgfCBTZXR0aW5ncyB8IEZpbGUgVGVtcGxhdGVzLgorICovCitpbXBvcnQgamF2YS5sYW5nLmFubm90YXRpb24uUmV0ZW50aW9uOworaW1wb3J0IGphdmEubGFuZy5hbm5vdGF0aW9uLlJldGVudGlvblBvbGljeTsKKworQFJldGVudGlvbihSZXRlbnRpb25Qb2xpY3kuQ0xBU1MpIHB1YmxpYyBAaW50ZXJmYWNlIEFubiB7CisgICAgICAgIENsYXNzW10gdmFsdWUoKTsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9hbm5vdGF0aW9ucy9jbGFzc0FzQXJndW1lbnQvc3JjL0Fubm90YXRlZC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvYW5ub3RhdGlvbnMvY2xhc3NBc0FyZ3VtZW50L3NyYy9Bbm5vdGF0ZWQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOWZhZmI1Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvYW5ub3RhdGlvbnMvY2xhc3NBc0FyZ3VtZW50L3NyYy9Bbm5vdGF0ZWQuamF2YQpAQCAtMCwwICsxLDEwIEBACisvKioKKyAqIENyZWF0ZWQgd2l0aCBJbnRlbGxpSiBJREVBLgorICogVXNlcjogZGIKKyAqIERhdGU6IDA0LjA1LjEyCisgKiBUaW1lOiAxNzo0MworICogVG8gY2hhbmdlIHRoaXMgdGVtcGxhdGUgdXNlIEZpbGUgfCBTZXR0aW5ncyB8IEZpbGUgVGVtcGxhdGVzLgorICovCitAQW5uKEEuY2xhc3MpCitwdWJsaWMgY2xhc3MgQW5ub3RhdGVkIHsKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2Fubm90YXRpb25zL2NvbnNlcnZhdGl2ZU5vbkluY3JlbWVudGFsLmxvZyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2Fubm90YXRpb25zL2NvbnNlcnZhdGl2ZU5vbkluY3JlbWVudGFsLmxvZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOWY0Y2U3Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvYW5ub3RhdGlvbnMvY29uc2VydmF0aXZlTm9uSW5jcmVtZW50YWwubG9nCkBAIC0wLDAgKzEsMjYgQEAKK0NsZWFuaW5nIG91dHB1dCBmaWxlczoKK291dC9wcm9kdWN0aW9uL2EyL0EyLmNsYXNzCitFbmQgb2YgZmlsZXMKK0NvbXBpbGluZyBmaWxlczoKK2EyL3NyYy9BMi5qYXZhCitFbmQgb2YgZmlsZXMKK0NsZWFuaW5nIG91dHB1dCBmaWxlczoKK291dC9wcm9kdWN0aW9uL2EyL0EyLmNsYXNzCitvdXQvcHJvZHVjdGlvbi9hMi9DLmNsYXNzCitFbmQgb2YgZmlsZXMKK0NvbXBpbGluZyBmaWxlczoKK2EyL3NyYy9BMi5qYXZhCithMi9zcmMvQy5qYXZhCitFbmQgb2YgZmlsZXMKK0NsZWFuaW5nIG91dHB1dCBmaWxlczoKK291dC9wcm9kdWN0aW9uL2IyMi9CMjIuY2xhc3MKK0VuZCBvZiBmaWxlcworQ29tcGlsaW5nIGZpbGVzOgorYjIyL3NyYy9CMjIuamF2YQorRW5kIG9mIGZpbGVzCitDbGVhbmluZyBvdXRwdXQgZmlsZXM6CitvdXQvcHJvZHVjdGlvbi9iMjEvQjIxLmNsYXNzCitFbmQgb2YgZmlsZXMKK0NvbXBpbGluZyBmaWxlczoKK2IyMS9zcmMvQjIxLmphdmEKK0VuZCBvZiBmaWxlcwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvYW5ub3RhdGlvbnMvY29uc2VydmF0aXZlTm9uSW5jcmVtZW50YWwvLmlkZWEvbWlzYy54bWwgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9hbm5vdGF0aW9ucy9jb25zZXJ2YXRpdmVOb25JbmNyZW1lbnRhbC8uaWRlYS9taXNjLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOWIzZjgxCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvYW5ub3RhdGlvbnMvY29uc2VydmF0aXZlTm9uSW5jcmVtZW50YWwvLmlkZWEvbWlzYy54bWwKQEAgLTAsMCArMSw0OSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxwcm9qZWN0IHZlcnNpb249IjQiPgorICA8Y29tcG9uZW50IG5hbWU9IkVudHJ5UG9pbnRzTWFuYWdlciI+CisgICAgPGVudHJ5X3BvaW50cyB2ZXJzaW9uPSIyLjAiIC8+CisgIDwvY29tcG9uZW50PgorICA8Y29tcG9uZW50IG5hbWU9IkphdmFkb2NHZW5lcmF0aW9uTWFuYWdlciI+CisgICAgPG9wdGlvbiBuYW1lPSJPVVRQVVRfRElSRUNUT1JZIiAvPgorICAgIDxvcHRpb24gbmFtZT0iT1BUSU9OX1NDT1BFIiB2YWx1ZT0icHJvdGVjdGVkIiAvPgorICAgIDxvcHRpb24gbmFtZT0iT1BUSU9OX0hJRVJBUkNIWSIgdmFsdWU9InRydWUiIC8+CisgICAgPG9wdGlvbiBuYW1lPSJPUFRJT05fTkFWSUdBVE9SIiB2YWx1ZT0idHJ1ZSIgLz4KKyAgICA8b3B0aW9uIG5hbWU9Ik9QVElPTl9JTkRFWCIgdmFsdWU9InRydWUiIC8+CisgICAgPG9wdGlvbiBuYW1lPSJPUFRJT05fU0VQQVJBVEVfSU5ERVgiIHZhbHVlPSJ0cnVlIiAvPgorICAgIDxvcHRpb24gbmFtZT0iT1BUSU9OX0RPQ1VNRU5UX1RBR19VU0UiIHZhbHVlPSJmYWxzZSIgLz4KKyAgICA8b3B0aW9uIG5hbWU9Ik9QVElPTl9ET0NVTUVOVF9UQUdfQVVUSE9SIiB2YWx1ZT0iZmFsc2UiIC8+CisgICAgPG9wdGlvbiBuYW1lPSJPUFRJT05fRE9DVU1FTlRfVEFHX1ZFUlNJT04iIHZhbHVlPSJmYWxzZSIgLz4KKyAgICA8b3B0aW9uIG5hbWU9Ik9QVElPTl9ET0NVTUVOVF9UQUdfREVQUkVDQVRFRCIgdmFsdWU9InRydWUiIC8+CisgICAgPG9wdGlvbiBuYW1lPSJPUFRJT05fREVQUkVDQVRFRF9MSVNUIiB2YWx1ZT0idHJ1ZSIgLz4KKyAgICA8b3B0aW9uIG5hbWU9Ik9USEVSX09QVElPTlMiIHZhbHVlPSIiIC8+CisgICAgPG9wdGlvbiBuYW1lPSJIRUFQX1NJWkUiIC8+CisgICAgPG9wdGlvbiBuYW1lPSJMT0NBTEUiIC8+CisgICAgPG9wdGlvbiBuYW1lPSJPUEVOX0lOX0JST1dTRVIiIHZhbHVlPSJ0cnVlIiAvPgorICA8L2NvbXBvbmVudD4KKyAgPGNvbXBvbmVudCBuYW1lPSJNb2R1bGVFZGl0b3JTdGF0ZSI+CisgICAgPG9wdGlvbiBuYW1lPSJMQVNUX0VESVRFRF9NT0RVTEVfTkFNRSIgLz4KKyAgICA8b3B0aW9uIG5hbWU9IkxBU1RfRURJVEVEX1RBQl9OQU1FIiAvPgorICA8L2NvbXBvbmVudD4KKyAgPGNvbXBvbmVudCBuYW1lPSJOdWxsYWJsZU5vdE51bGxNYW5hZ2VyIj4KKyAgICA8b3B0aW9uIG5hbWU9Im15RGVmYXVsdE51bGxhYmxlIiB2YWx1ZT0ib3JnLmpldGJyYWlucy5hbm5vdGF0aW9ucy5OdWxsYWJsZSIgLz4KKyAgICA8b3B0aW9uIG5hbWU9Im15RGVmYXVsdE5vdE51bGwiIHZhbHVlPSJvcmcuamV0YnJhaW5zLmFubm90YXRpb25zLk5vdE51bGwiIC8+CisgICAgPG9wdGlvbiBuYW1lPSJteU51bGxhYmxlcyI+CisgICAgICA8dmFsdWU+CisgICAgICAgIDxsaXN0IHNpemU9IjAiIC8+CisgICAgICA8L3ZhbHVlPgorICAgIDwvb3B0aW9uPgorICAgIDxvcHRpb24gbmFtZT0ibXlOb3ROdWxscyI+CisgICAgICA8dmFsdWU+CisgICAgICAgIDxsaXN0IHNpemU9IjMiPgorICAgICAgICAgIDxpdGVtIGluZGV4PSIwIiBjbGFzcz0iamF2YS5sYW5nLlN0cmluZyIgaXRlbXZhbHVlPSJvcmcuamV0YnJhaW5zLmFubm90YXRpb25zLk5vdE51bGwiIC8+CisgICAgICAgICAgPGl0ZW0gaW5kZXg9IjEiIGNsYXNzPSJqYXZhLmxhbmcuU3RyaW5nIiBpdGVtdmFsdWU9ImphdmF4LmFubm90YXRpb24uTm9ubnVsbCIgLz4KKyAgICAgICAgICA8aXRlbSBpbmRleD0iMiIgY2xhc3M9ImphdmEubGFuZy5TdHJpbmciIGl0ZW12YWx1ZT0iZWR1LnVtZC5jcy5maW5kYnVncy5hbm5vdGF0aW9ucy5Ob25OdWxsIiAvPgorICAgICAgICA8L2xpc3Q+CisgICAgICA8L3ZhbHVlPgorICAgIDwvb3B0aW9uPgorICA8L2NvbXBvbmVudD4KKyAgPGNvbXBvbmVudCBuYW1lPSJQcm9qZWN0Um9vdE1hbmFnZXIiIHZlcnNpb249IjIiIGxhbmd1YWdlTGV2ZWw9IkpES18xXzUiIGFzc2VydC1rZXl3b3JkPSJ0cnVlIiBqZGstMTU9InRydWUiIHByb2plY3QtamRrLW5hbWU9IklERUEgamRrIiBwcm9qZWN0LWpkay10eXBlPSJKYXZhU0RLIj4KKyAgICA8b3V0cHV0IHVybD0iZmlsZTovLyRQUk9KRUNUX0RJUiQvb3V0IiAvPgorICA8L2NvbXBvbmVudD4KKzwvcHJvamVjdD4KKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvYW5ub3RhdGlvbnMvY29uc2VydmF0aXZlTm9uSW5jcmVtZW50YWwvLmlkZWEvbW9kdWxlcy54bWwgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9hbm5vdGF0aW9ucy9jb25zZXJ2YXRpdmVOb25JbmNyZW1lbnRhbC8uaWRlYS9tb2R1bGVzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZjlhNGUyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvYW5ub3RhdGlvbnMvY29uc2VydmF0aXZlTm9uSW5jcmVtZW50YWwvLmlkZWEvbW9kdWxlcy54bWwKQEAgLTAsMCArMSwxMyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxwcm9qZWN0IHZlcnNpb249IjQiPgorICA8Y29tcG9uZW50IG5hbWU9IlByb2plY3RNb2R1bGVNYW5hZ2VyIj4KKyAgICA8bW9kdWxlcz4KKyAgICAgIDxtb2R1bGUgZmlsZXVybD0iZmlsZTovLyRQUk9KRUNUX0RJUiQvYTEvYTEuaW1sIiBmaWxlcGF0aD0iJFBST0pFQ1RfRElSJC9hMS9hMS5pbWwiIC8+CisgICAgICA8bW9kdWxlIGZpbGV1cmw9ImZpbGU6Ly8kUFJPSkVDVF9ESVIkL2EyL2EyLmltbCIgZmlsZXBhdGg9IiRQUk9KRUNUX0RJUiQvYTIvYTIuaW1sIiAvPgorICAgICAgPG1vZHVsZSBmaWxldXJsPSJmaWxlOi8vJFBST0pFQ1RfRElSJC9iMjEvYjIxLmltbCIgZmlsZXBhdGg9IiRQUk9KRUNUX0RJUiQvYjIxL2IyMS5pbWwiIC8+CisgICAgICA8bW9kdWxlIGZpbGV1cmw9ImZpbGU6Ly8kUFJPSkVDVF9ESVIkL2IyMi9iMjIuaW1sIiBmaWxlcGF0aD0iJFBST0pFQ1RfRElSJC9iMjIvYjIyLmltbCIgLz4KKyAgICAgIDxtb2R1bGUgZmlsZXVybD0iZmlsZTovLyRQUk9KRUNUX0RJUiQvY29uc2VydmF0aXZlTm9uSW5jcmVtZW50YWwuaW1sIiBmaWxlcGF0aD0iJFBST0pFQ1RfRElSJC9jb25zZXJ2YXRpdmVOb25JbmNyZW1lbnRhbC5pbWwiIC8+CisgICAgPC9tb2R1bGVzPgorICA8L2NvbXBvbmVudD4KKzwvcHJvamVjdD4KKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvYW5ub3RhdGlvbnMvY29uc2VydmF0aXZlTm9uSW5jcmVtZW50YWwvYTEvYTEuaW1sIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvYW5ub3RhdGlvbnMvY29uc2VydmF0aXZlTm9uSW5jcmVtZW50YWwvYTEvYTEuaW1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZkMmRlYmEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9hbm5vdGF0aW9ucy9jb25zZXJ2YXRpdmVOb25JbmNyZW1lbnRhbC9hMS9hMS5pbWwKQEAgLTAsMCArMSwxMyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxtb2R1bGUgdHlwZT0iSkFWQV9NT0RVTEUiIHZlcnNpb249IjQiPgorICA8Y29tcG9uZW50IG5hbWU9Ik5ld01vZHVsZVJvb3RNYW5hZ2VyIiBpbmhlcml0LWNvbXBpbGVyLW91dHB1dD0idHJ1ZSI+CisgICAgPGV4Y2x1ZGUtb3V0cHV0IC8+CisgICAgPGNvbnRlbnQgdXJsPSJmaWxlOi8vJE1PRFVMRV9ESVIkIj4KKyAgICAgIDxzb3VyY2VGb2xkZXIgdXJsPSJmaWxlOi8vJE1PRFVMRV9ESVIkL3NyYyIgaXNUZXN0U291cmNlPSJmYWxzZSIgLz4KKyAgICA8L2NvbnRlbnQ+CisgICAgPG9yZGVyRW50cnkgdHlwZT0iaW5oZXJpdGVkSmRrIiAvPgorICAgIDxvcmRlckVudHJ5IHR5cGU9InNvdXJjZUZvbGRlciIgZm9yVGVzdHM9ImZhbHNlIiAvPgorICAgIDxvcmRlckVudHJ5IHR5cGU9Im1vZHVsZSIgbW9kdWxlLW5hbWU9ImNvbnNlcnZhdGl2ZU5vbkluY3JlbWVudGFsIiAvPgorICA8L2NvbXBvbmVudD4KKzwvbW9kdWxlPgorCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9hbm5vdGF0aW9ucy9jb25zZXJ2YXRpdmVOb25JbmNyZW1lbnRhbC9hMS9zcmMvQTEuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2Fubm90YXRpb25zL2NvbnNlcnZhdGl2ZU5vbkluY3JlbWVudGFsL2ExL3NyYy9BMS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNiOTA5NDk5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvYW5ub3RhdGlvbnMvY29uc2VydmF0aXZlTm9uSW5jcmVtZW50YWwvYTEvc3JjL0ExLmphdmEKQEAgLTAsMCArMSw5IEBACisvKioKKyAqIENyZWF0ZWQgYnkgSW50ZWxsaUogSURFQS4KKyAqIFVzZXI6IGRiCisgKiBEYXRlOiAwNi4wOC4xMQorICogVGltZTogMTQ6NTYKKyAqIFRvIGNoYW5nZSB0aGlzIHRlbXBsYXRlIHVzZSBGaWxlIHwgU2V0dGluZ3MgfCBGaWxlIFRlbXBsYXRlcy4KKyAqLworcHVibGljIGNsYXNzIEExIHsKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2Fubm90YXRpb25zL2NvbnNlcnZhdGl2ZU5vbkluY3JlbWVudGFsL2EyL2EyLmltbCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2Fubm90YXRpb25zL2NvbnNlcnZhdGl2ZU5vbkluY3JlbWVudGFsL2EyL2EyLmltbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZDJkZWJhCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvYW5ub3RhdGlvbnMvY29uc2VydmF0aXZlTm9uSW5jcmVtZW50YWwvYTIvYTIuaW1sCkBAIC0wLDAgKzEsMTMgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8bW9kdWxlIHR5cGU9IkpBVkFfTU9EVUxFIiB2ZXJzaW9uPSI0Ij4KKyAgPGNvbXBvbmVudCBuYW1lPSJOZXdNb2R1bGVSb290TWFuYWdlciIgaW5oZXJpdC1jb21waWxlci1vdXRwdXQ9InRydWUiPgorICAgIDxleGNsdWRlLW91dHB1dCAvPgorICAgIDxjb250ZW50IHVybD0iZmlsZTovLyRNT0RVTEVfRElSJCI+CisgICAgICA8c291cmNlRm9sZGVyIHVybD0iZmlsZTovLyRNT0RVTEVfRElSJC9zcmMiIGlzVGVzdFNvdXJjZT0iZmFsc2UiIC8+CisgICAgPC9jb250ZW50PgorICAgIDxvcmRlckVudHJ5IHR5cGU9ImluaGVyaXRlZEpkayIgLz4KKyAgICA8b3JkZXJFbnRyeSB0eXBlPSJzb3VyY2VGb2xkZXIiIGZvclRlc3RzPSJmYWxzZSIgLz4KKyAgICA8b3JkZXJFbnRyeSB0eXBlPSJtb2R1bGUiIG1vZHVsZS1uYW1lPSJjb25zZXJ2YXRpdmVOb25JbmNyZW1lbnRhbCIgLz4KKyAgPC9jb21wb25lbnQ+Cis8L21vZHVsZT4KKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvYW5ub3RhdGlvbnMvY29uc2VydmF0aXZlTm9uSW5jcmVtZW50YWwvYTIvc3JjL0EyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9hbm5vdGF0aW9ucy9jb25zZXJ2YXRpdmVOb25JbmNyZW1lbnRhbC9hMi9zcmMvQTIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NmFjMjk4MjAKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9hbm5vdGF0aW9ucy9jb25zZXJ2YXRpdmVOb25JbmNyZW1lbnRhbC9hMi9zcmMvQTIuamF2YQpAQCAtMCwwICsxLDE0IEBACitpbXBvcnQgamF2YS5sYW5nLmFubm90YXRpb24uUmV0ZW50aW9uOworaW1wb3J0IGphdmEubGFuZy5hbm5vdGF0aW9uLlJldGVudGlvblBvbGljeTsKKworLyoqCisgKiBDcmVhdGVkIGJ5IEludGVsbGlKIElERUEuCisgKiBVc2VyOiBkYgorICogRGF0ZTogMDYuMDguMTEKKyAqIFRpbWU6IDE0OjU2CisgKiBUbyBjaGFuZ2UgdGhpcyB0ZW1wbGF0ZSB1c2UgRmlsZSB8IFNldHRpbmdzIHwgRmlsZSBUZW1wbGF0ZXMuCisgKi8KKworQFJldGVudGlvbihSZXRlbnRpb25Qb2xpY3kuU09VUkNFKQorcHVibGljIEBpbnRlcmZhY2UgQTIgeworfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvYW5ub3RhdGlvbnMvY29uc2VydmF0aXZlTm9uSW5jcmVtZW50YWwvYTIvc3JjL0EyLmphdmEubmV3IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvYW5ub3RhdGlvbnMvY29uc2VydmF0aXZlTm9uSW5jcmVtZW50YWwvYTIvc3JjL0EyLmphdmEubmV3Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBkNjYzYTEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9hbm5vdGF0aW9ucy9jb25zZXJ2YXRpdmVOb25JbmNyZW1lbnRhbC9hMi9zcmMvQTIuamF2YS5uZXcKQEAgLTAsMCArMSwxNSBAQAoraW1wb3J0IGphdmEubGFuZy5hbm5vdGF0aW9uLlJldGVudGlvbjsKK2ltcG9ydCBqYXZhLmxhbmcuYW5ub3RhdGlvbi5SZXRlbnRpb25Qb2xpY3k7CisKKy8qKgorICogQ3JlYXRlZCBieSBJbnRlbGxpSiBJREVBLgorICogVXNlcjogZGIKKyAqIERhdGU6IDA2LjA4LjExCisgKiBUaW1lOiAxNDo1NgorICogVG8gY2hhbmdlIHRoaXMgdGVtcGxhdGUgdXNlIEZpbGUgfCBTZXR0aW5ncyB8IEZpbGUgVGVtcGxhdGVzLgorICovCisKK0BSZXRlbnRpb24oUmV0ZW50aW9uUG9saWN5LlNPVVJDRSkKK3B1YmxpYyBAaW50ZXJmYWNlIEEyIHsKKyAgU3RyaW5nIHZhbHVlICgpOworfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvYW5ub3RhdGlvbnMvY29uc2VydmF0aXZlTm9uSW5jcmVtZW50YWwvYTIvc3JjL0MuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2Fubm90YXRpb25zL2NvbnNlcnZhdGl2ZU5vbkluY3JlbWVudGFsL2EyL3NyYy9DLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTdjNGExMAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2Fubm90YXRpb25zL2NvbnNlcnZhdGl2ZU5vbkluY3JlbWVudGFsL2EyL3NyYy9DLmphdmEKQEAgLTAsMCArMSBAQAorcHVibGljIGNsYXNzIEMge30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9hbm5vdGF0aW9ucy9jb25zZXJ2YXRpdmVOb25JbmNyZW1lbnRhbC9iMjEvYjIxLmltbCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2Fubm90YXRpb25zL2NvbnNlcnZhdGl2ZU5vbkluY3JlbWVudGFsL2IyMS9iMjEuaW1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAyZWEzNjUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9hbm5vdGF0aW9ucy9jb25zZXJ2YXRpdmVOb25JbmNyZW1lbnRhbC9iMjEvYjIxLmltbApAQCAtMCwwICsxLDEzIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPG1vZHVsZSB0eXBlPSJKQVZBX01PRFVMRSIgdmVyc2lvbj0iNCI+CisgIDxjb21wb25lbnQgbmFtZT0iTmV3TW9kdWxlUm9vdE1hbmFnZXIiIGluaGVyaXQtY29tcGlsZXItb3V0cHV0PSJ0cnVlIj4KKyAgICA8ZXhjbHVkZS1vdXRwdXQgLz4KKyAgICA8Y29udGVudCB1cmw9ImZpbGU6Ly8kTU9EVUxFX0RJUiQiPgorICAgICAgPHNvdXJjZUZvbGRlciB1cmw9ImZpbGU6Ly8kTU9EVUxFX0RJUiQvc3JjIiBpc1Rlc3RTb3VyY2U9ImZhbHNlIiAvPgorICAgIDwvY29udGVudD4KKyAgICA8b3JkZXJFbnRyeSB0eXBlPSJpbmhlcml0ZWRKZGsiIC8+CisgICAgPG9yZGVyRW50cnkgdHlwZT0ic291cmNlRm9sZGVyIiBmb3JUZXN0cz0iZmFsc2UiIC8+CisgICAgPG9yZGVyRW50cnkgdHlwZT0ibW9kdWxlIiBtb2R1bGUtbmFtZT0iYTIiIC8+CisgIDwvY29tcG9uZW50PgorPC9tb2R1bGU+CisKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2Fubm90YXRpb25zL2NvbnNlcnZhdGl2ZU5vbkluY3JlbWVudGFsL2IyMS9zcmMvQjIxLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9hbm5vdGF0aW9ucy9jb25zZXJ2YXRpdmVOb25JbmNyZW1lbnRhbC9iMjEvc3JjL0IyMS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBkYjRkMWYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9hbm5vdGF0aW9ucy9jb25zZXJ2YXRpdmVOb25JbmNyZW1lbnRhbC9iMjEvc3JjL0IyMS5qYXZhCkBAIC0wLDAgKzEsOSBAQAorLyoqCisgKiBDcmVhdGVkIGJ5IEludGVsbGlKIElERUEuCisgKiBVc2VyOiBkYgorICogRGF0ZTogMDYuMDguMTEKKyAqIFRpbWU6IDE0OjU3CisgKiBUbyBjaGFuZ2UgdGhpcyB0ZW1wbGF0ZSB1c2UgRmlsZSB8IFNldHRpbmdzIHwgRmlsZSBUZW1wbGF0ZXMuCisgKi8KK3B1YmxpYyBjbGFzcyBCMjEgeworfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvYW5ub3RhdGlvbnMvY29uc2VydmF0aXZlTm9uSW5jcmVtZW50YWwvYjIyL2IyMi5pbWwgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9hbm5vdGF0aW9ucy9jb25zZXJ2YXRpdmVOb25JbmNyZW1lbnRhbC9iMjIvYjIyLmltbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMmVhMzY1Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvYW5ub3RhdGlvbnMvY29uc2VydmF0aXZlTm9uSW5jcmVtZW50YWwvYjIyL2IyMi5pbWwKQEAgLTAsMCArMSwxMyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxtb2R1bGUgdHlwZT0iSkFWQV9NT0RVTEUiIHZlcnNpb249IjQiPgorICA8Y29tcG9uZW50IG5hbWU9Ik5ld01vZHVsZVJvb3RNYW5hZ2VyIiBpbmhlcml0LWNvbXBpbGVyLW91dHB1dD0idHJ1ZSI+CisgICAgPGV4Y2x1ZGUtb3V0cHV0IC8+CisgICAgPGNvbnRlbnQgdXJsPSJmaWxlOi8vJE1PRFVMRV9ESVIkIj4KKyAgICAgIDxzb3VyY2VGb2xkZXIgdXJsPSJmaWxlOi8vJE1PRFVMRV9ESVIkL3NyYyIgaXNUZXN0U291cmNlPSJmYWxzZSIgLz4KKyAgICA8L2NvbnRlbnQ+CisgICAgPG9yZGVyRW50cnkgdHlwZT0iaW5oZXJpdGVkSmRrIiAvPgorICAgIDxvcmRlckVudHJ5IHR5cGU9InNvdXJjZUZvbGRlciIgZm9yVGVzdHM9ImZhbHNlIiAvPgorICAgIDxvcmRlckVudHJ5IHR5cGU9Im1vZHVsZSIgbW9kdWxlLW5hbWU9ImEyIiAvPgorICA8L2NvbXBvbmVudD4KKzwvbW9kdWxlPgorCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9hbm5vdGF0aW9ucy9jb25zZXJ2YXRpdmVOb25JbmNyZW1lbnRhbC9iMjIvc3JjL0IyMi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvYW5ub3RhdGlvbnMvY29uc2VydmF0aXZlTm9uSW5jcmVtZW50YWwvYjIyL3NyYy9CMjIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wODEyOTU0Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvYW5ub3RhdGlvbnMvY29uc2VydmF0aXZlTm9uSW5jcmVtZW50YWwvYjIyL3NyYy9CMjIuamF2YQpAQCAtMCwwICsxLDkgQEAKKy8qKgorICogQ3JlYXRlZCBieSBJbnRlbGxpSiBJREVBLgorICogVXNlcjogZGIKKyAqIERhdGU6IDA2LjA4LjExCisgKiBUaW1lOiAxNDo1NworICogVG8gY2hhbmdlIHRoaXMgdGVtcGxhdGUgdXNlIEZpbGUgfCBTZXR0aW5ncyB8IEZpbGUgVGVtcGxhdGVzLgorICovCitwdWJsaWMgY2xhc3MgQjIyIHsKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2Fubm90YXRpb25zL2NvbnNlcnZhdGl2ZU5vbkluY3JlbWVudGFsL2NvbnNlcnZhdGl2ZU5vbkluY3JlbWVudGFsLmltbCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2Fubm90YXRpb25zL2NvbnNlcnZhdGl2ZU5vbkluY3JlbWVudGFsL2NvbnNlcnZhdGl2ZU5vbkluY3JlbWVudGFsLmltbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNWMwNzQzCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvYW5ub3RhdGlvbnMvY29uc2VydmF0aXZlTm9uSW5jcmVtZW50YWwvY29uc2VydmF0aXZlTm9uSW5jcmVtZW50YWwuaW1sCkBAIC0wLDAgKzEsMTIgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8bW9kdWxlIHR5cGU9IkpBVkFfTU9EVUxFIiB2ZXJzaW9uPSI0Ij4KKyAgPGNvbXBvbmVudCBuYW1lPSJOZXdNb2R1bGVSb290TWFuYWdlciIgaW5oZXJpdC1jb21waWxlci1vdXRwdXQ9InRydWUiPgorICAgIDxleGNsdWRlLW91dHB1dCAvPgorICAgIDxjb250ZW50IHVybD0iZmlsZTovLyRNT0RVTEVfRElSJCI+CisgICAgICA8c291cmNlRm9sZGVyIHVybD0iZmlsZTovLyRNT0RVTEVfRElSJC9zcmMiIGlzVGVzdFNvdXJjZT0iZmFsc2UiIC8+CisgICAgPC9jb250ZW50PgorICAgIDxvcmRlckVudHJ5IHR5cGU9ImluaGVyaXRlZEpkayIgLz4KKyAgICA8b3JkZXJFbnRyeSB0eXBlPSJzb3VyY2VGb2xkZXIiIGZvclRlc3RzPSJmYWxzZSIgLz4KKyAgPC9jb21wb25lbnQ+Cis8L21vZHVsZT4KKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvYW5ub3RhdGlvbnMvY29uc2VydmF0aXZlTm9uSW5jcmVtZW50YWwvc3JjL0EuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2Fubm90YXRpb25zL2NvbnNlcnZhdGl2ZU5vbkluY3JlbWVudGFsL3NyYy9BLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWQ4YmZiMwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2Fubm90YXRpb25zL2NvbnNlcnZhdGl2ZU5vbkluY3JlbWVudGFsL3NyYy9BLmphdmEKQEAgLTAsMCArMSw5IEBACisvKioKKyAqIENyZWF0ZWQgYnkgSW50ZWxsaUogSURFQS4KKyAqIFVzZXI6IGRiCisgKiBEYXRlOiAwNi4wOC4xMQorICogVGltZTogMTQ6NTYKKyAqIFRvIGNoYW5nZSB0aGlzIHRlbXBsYXRlIHVzZSBGaWxlIHwgU2V0dGluZ3MgfCBGaWxlIFRlbXBsYXRlcy4KKyAqLworcHVibGljIGNsYXNzIEEgeworfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvYW5ub3RhdGlvbnMvY29uc2VydmF0aXZlTm9uSW5jcmVtZW50YWwxLmxvZyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2Fubm90YXRpb25zL2NvbnNlcnZhdGl2ZU5vbkluY3JlbWVudGFsMS5sb2cKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzlmNGNlNwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2Fubm90YXRpb25zL2NvbnNlcnZhdGl2ZU5vbkluY3JlbWVudGFsMS5sb2cKQEAgLTAsMCArMSwyNiBAQAorQ2xlYW5pbmcgb3V0cHV0IGZpbGVzOgorb3V0L3Byb2R1Y3Rpb24vYTIvQTIuY2xhc3MKK0VuZCBvZiBmaWxlcworQ29tcGlsaW5nIGZpbGVzOgorYTIvc3JjL0EyLmphdmEKK0VuZCBvZiBmaWxlcworQ2xlYW5pbmcgb3V0cHV0IGZpbGVzOgorb3V0L3Byb2R1Y3Rpb24vYTIvQTIuY2xhc3MKK291dC9wcm9kdWN0aW9uL2EyL0MuY2xhc3MKK0VuZCBvZiBmaWxlcworQ29tcGlsaW5nIGZpbGVzOgorYTIvc3JjL0EyLmphdmEKK2EyL3NyYy9DLmphdmEKK0VuZCBvZiBmaWxlcworQ2xlYW5pbmcgb3V0cHV0IGZpbGVzOgorb3V0L3Byb2R1Y3Rpb24vYjIyL0IyMi5jbGFzcworRW5kIG9mIGZpbGVzCitDb21waWxpbmcgZmlsZXM6CitiMjIvc3JjL0IyMi5qYXZhCitFbmQgb2YgZmlsZXMKK0NsZWFuaW5nIG91dHB1dCBmaWxlczoKK291dC9wcm9kdWN0aW9uL2IyMS9CMjEuY2xhc3MKK0VuZCBvZiBmaWxlcworQ29tcGlsaW5nIGZpbGVzOgorYjIxL3NyYy9CMjEuamF2YQorRW5kIG9mIGZpbGVzCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9hbm5vdGF0aW9ucy9jb25zZXJ2YXRpdmVOb25JbmNyZW1lbnRhbDEvLmlkZWEvbWlzYy54bWwgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9hbm5vdGF0aW9ucy9jb25zZXJ2YXRpdmVOb25JbmNyZW1lbnRhbDEvLmlkZWEvbWlzYy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzliM2Y4MQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2Fubm90YXRpb25zL2NvbnNlcnZhdGl2ZU5vbkluY3JlbWVudGFsMS8uaWRlYS9taXNjLnhtbApAQCAtMCwwICsxLDQ5IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHByb2plY3QgdmVyc2lvbj0iNCI+CisgIDxjb21wb25lbnQgbmFtZT0iRW50cnlQb2ludHNNYW5hZ2VyIj4KKyAgICA8ZW50cnlfcG9pbnRzIHZlcnNpb249IjIuMCIgLz4KKyAgPC9jb21wb25lbnQ+CisgIDxjb21wb25lbnQgbmFtZT0iSmF2YWRvY0dlbmVyYXRpb25NYW5hZ2VyIj4KKyAgICA8b3B0aW9uIG5hbWU9Ik9VVFBVVF9ESVJFQ1RPUlkiIC8+CisgICAgPG9wdGlvbiBuYW1lPSJPUFRJT05fU0NPUEUiIHZhbHVlPSJwcm90ZWN0ZWQiIC8+CisgICAgPG9wdGlvbiBuYW1lPSJPUFRJT05fSElFUkFSQ0hZIiB2YWx1ZT0idHJ1ZSIgLz4KKyAgICA8b3B0aW9uIG5hbWU9Ik9QVElPTl9OQVZJR0FUT1IiIHZhbHVlPSJ0cnVlIiAvPgorICAgIDxvcHRpb24gbmFtZT0iT1BUSU9OX0lOREVYIiB2YWx1ZT0idHJ1ZSIgLz4KKyAgICA8b3B0aW9uIG5hbWU9Ik9QVElPTl9TRVBBUkFURV9JTkRFWCIgdmFsdWU9InRydWUiIC8+CisgICAgPG9wdGlvbiBuYW1lPSJPUFRJT05fRE9DVU1FTlRfVEFHX1VTRSIgdmFsdWU9ImZhbHNlIiAvPgorICAgIDxvcHRpb24gbmFtZT0iT1BUSU9OX0RPQ1VNRU5UX1RBR19BVVRIT1IiIHZhbHVlPSJmYWxzZSIgLz4KKyAgICA8b3B0aW9uIG5hbWU9Ik9QVElPTl9ET0NVTUVOVF9UQUdfVkVSU0lPTiIgdmFsdWU9ImZhbHNlIiAvPgorICAgIDxvcHRpb24gbmFtZT0iT1BUSU9OX0RPQ1VNRU5UX1RBR19ERVBSRUNBVEVEIiB2YWx1ZT0idHJ1ZSIgLz4KKyAgICA8b3B0aW9uIG5hbWU9Ik9QVElPTl9ERVBSRUNBVEVEX0xJU1QiIHZhbHVlPSJ0cnVlIiAvPgorICAgIDxvcHRpb24gbmFtZT0iT1RIRVJfT1BUSU9OUyIgdmFsdWU9IiIgLz4KKyAgICA8b3B0aW9uIG5hbWU9IkhFQVBfU0laRSIgLz4KKyAgICA8b3B0aW9uIG5hbWU9IkxPQ0FMRSIgLz4KKyAgICA8b3B0aW9uIG5hbWU9Ik9QRU5fSU5fQlJPV1NFUiIgdmFsdWU9InRydWUiIC8+CisgIDwvY29tcG9uZW50PgorICA8Y29tcG9uZW50IG5hbWU9Ik1vZHVsZUVkaXRvclN0YXRlIj4KKyAgICA8b3B0aW9uIG5hbWU9IkxBU1RfRURJVEVEX01PRFVMRV9OQU1FIiAvPgorICAgIDxvcHRpb24gbmFtZT0iTEFTVF9FRElURURfVEFCX05BTUUiIC8+CisgIDwvY29tcG9uZW50PgorICA8Y29tcG9uZW50IG5hbWU9Ik51bGxhYmxlTm90TnVsbE1hbmFnZXIiPgorICAgIDxvcHRpb24gbmFtZT0ibXlEZWZhdWx0TnVsbGFibGUiIHZhbHVlPSJvcmcuamV0YnJhaW5zLmFubm90YXRpb25zLk51bGxhYmxlIiAvPgorICAgIDxvcHRpb24gbmFtZT0ibXlEZWZhdWx0Tm90TnVsbCIgdmFsdWU9Im9yZy5qZXRicmFpbnMuYW5ub3RhdGlvbnMuTm90TnVsbCIgLz4KKyAgICA8b3B0aW9uIG5hbWU9Im15TnVsbGFibGVzIj4KKyAgICAgIDx2YWx1ZT4KKyAgICAgICAgPGxpc3Qgc2l6ZT0iMCIgLz4KKyAgICAgIDwvdmFsdWU+CisgICAgPC9vcHRpb24+CisgICAgPG9wdGlvbiBuYW1lPSJteU5vdE51bGxzIj4KKyAgICAgIDx2YWx1ZT4KKyAgICAgICAgPGxpc3Qgc2l6ZT0iMyI+CisgICAgICAgICAgPGl0ZW0gaW5kZXg9IjAiIGNsYXNzPSJqYXZhLmxhbmcuU3RyaW5nIiBpdGVtdmFsdWU9Im9yZy5qZXRicmFpbnMuYW5ub3RhdGlvbnMuTm90TnVsbCIgLz4KKyAgICAgICAgICA8aXRlbSBpbmRleD0iMSIgY2xhc3M9ImphdmEubGFuZy5TdHJpbmciIGl0ZW12YWx1ZT0iamF2YXguYW5ub3RhdGlvbi5Ob25udWxsIiAvPgorICAgICAgICAgIDxpdGVtIGluZGV4PSIyIiBjbGFzcz0iamF2YS5sYW5nLlN0cmluZyIgaXRlbXZhbHVlPSJlZHUudW1kLmNzLmZpbmRidWdzLmFubm90YXRpb25zLk5vbk51bGwiIC8+CisgICAgICAgIDwvbGlzdD4KKyAgICAgIDwvdmFsdWU+CisgICAgPC9vcHRpb24+CisgIDwvY29tcG9uZW50PgorICA8Y29tcG9uZW50IG5hbWU9IlByb2plY3RSb290TWFuYWdlciIgdmVyc2lvbj0iMiIgbGFuZ3VhZ2VMZXZlbD0iSkRLXzFfNSIgYXNzZXJ0LWtleXdvcmQ9InRydWUiIGpkay0xNT0idHJ1ZSIgcHJvamVjdC1qZGstbmFtZT0iSURFQSBqZGsiIHByb2plY3QtamRrLXR5cGU9IkphdmFTREsiPgorICAgIDxvdXRwdXQgdXJsPSJmaWxlOi8vJFBST0pFQ1RfRElSJC9vdXQiIC8+CisgIDwvY29tcG9uZW50PgorPC9wcm9qZWN0PgorCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9hbm5vdGF0aW9ucy9jb25zZXJ2YXRpdmVOb25JbmNyZW1lbnRhbDEvLmlkZWEvbW9kdWxlcy54bWwgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9hbm5vdGF0aW9ucy9jb25zZXJ2YXRpdmVOb25JbmNyZW1lbnRhbDEvLmlkZWEvbW9kdWxlcy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmY5YTRlMgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2Fubm90YXRpb25zL2NvbnNlcnZhdGl2ZU5vbkluY3JlbWVudGFsMS8uaWRlYS9tb2R1bGVzLnhtbApAQCAtMCwwICsxLDEzIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHByb2plY3QgdmVyc2lvbj0iNCI+CisgIDxjb21wb25lbnQgbmFtZT0iUHJvamVjdE1vZHVsZU1hbmFnZXIiPgorICAgIDxtb2R1bGVzPgorICAgICAgPG1vZHVsZSBmaWxldXJsPSJmaWxlOi8vJFBST0pFQ1RfRElSJC9hMS9hMS5pbWwiIGZpbGVwYXRoPSIkUFJPSkVDVF9ESVIkL2ExL2ExLmltbCIgLz4KKyAgICAgIDxtb2R1bGUgZmlsZXVybD0iZmlsZTovLyRQUk9KRUNUX0RJUiQvYTIvYTIuaW1sIiBmaWxlcGF0aD0iJFBST0pFQ1RfRElSJC9hMi9hMi5pbWwiIC8+CisgICAgICA8bW9kdWxlIGZpbGV1cmw9ImZpbGU6Ly8kUFJPSkVDVF9ESVIkL2IyMS9iMjEuaW1sIiBmaWxlcGF0aD0iJFBST0pFQ1RfRElSJC9iMjEvYjIxLmltbCIgLz4KKyAgICAgIDxtb2R1bGUgZmlsZXVybD0iZmlsZTovLyRQUk9KRUNUX0RJUiQvYjIyL2IyMi5pbWwiIGZpbGVwYXRoPSIkUFJPSkVDVF9ESVIkL2IyMi9iMjIuaW1sIiAvPgorICAgICAgPG1vZHVsZSBmaWxldXJsPSJmaWxlOi8vJFBST0pFQ1RfRElSJC9jb25zZXJ2YXRpdmVOb25JbmNyZW1lbnRhbC5pbWwiIGZpbGVwYXRoPSIkUFJPSkVDVF9ESVIkL2NvbnNlcnZhdGl2ZU5vbkluY3JlbWVudGFsLmltbCIgLz4KKyAgICA8L21vZHVsZXM+CisgIDwvY29tcG9uZW50PgorPC9wcm9qZWN0PgorCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9hbm5vdGF0aW9ucy9jb25zZXJ2YXRpdmVOb25JbmNyZW1lbnRhbDEvYTEvYTEuaW1sIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvYW5ub3RhdGlvbnMvY29uc2VydmF0aXZlTm9uSW5jcmVtZW50YWwxL2ExL2ExLmltbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZDJkZWJhCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvYW5ub3RhdGlvbnMvY29uc2VydmF0aXZlTm9uSW5jcmVtZW50YWwxL2ExL2ExLmltbApAQCAtMCwwICsxLDEzIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPG1vZHVsZSB0eXBlPSJKQVZBX01PRFVMRSIgdmVyc2lvbj0iNCI+CisgIDxjb21wb25lbnQgbmFtZT0iTmV3TW9kdWxlUm9vdE1hbmFnZXIiIGluaGVyaXQtY29tcGlsZXItb3V0cHV0PSJ0cnVlIj4KKyAgICA8ZXhjbHVkZS1vdXRwdXQgLz4KKyAgICA8Y29udGVudCB1cmw9ImZpbGU6Ly8kTU9EVUxFX0RJUiQiPgorICAgICAgPHNvdXJjZUZvbGRlciB1cmw9ImZpbGU6Ly8kTU9EVUxFX0RJUiQvc3JjIiBpc1Rlc3RTb3VyY2U9ImZhbHNlIiAvPgorICAgIDwvY29udGVudD4KKyAgICA8b3JkZXJFbnRyeSB0eXBlPSJpbmhlcml0ZWRKZGsiIC8+CisgICAgPG9yZGVyRW50cnkgdHlwZT0ic291cmNlRm9sZGVyIiBmb3JUZXN0cz0iZmFsc2UiIC8+CisgICAgPG9yZGVyRW50cnkgdHlwZT0ibW9kdWxlIiBtb2R1bGUtbmFtZT0iY29uc2VydmF0aXZlTm9uSW5jcmVtZW50YWwiIC8+CisgIDwvY29tcG9uZW50PgorPC9tb2R1bGU+CisKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2Fubm90YXRpb25zL2NvbnNlcnZhdGl2ZU5vbkluY3JlbWVudGFsMS9hMS9zcmMvQTEuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2Fubm90YXRpb25zL2NvbnNlcnZhdGl2ZU5vbkluY3JlbWVudGFsMS9hMS9zcmMvQTEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYjkwOTQ5OQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2Fubm90YXRpb25zL2NvbnNlcnZhdGl2ZU5vbkluY3JlbWVudGFsMS9hMS9zcmMvQTEuamF2YQpAQCAtMCwwICsxLDkgQEAKKy8qKgorICogQ3JlYXRlZCBieSBJbnRlbGxpSiBJREVBLgorICogVXNlcjogZGIKKyAqIERhdGU6IDA2LjA4LjExCisgKiBUaW1lOiAxNDo1NgorICogVG8gY2hhbmdlIHRoaXMgdGVtcGxhdGUgdXNlIEZpbGUgfCBTZXR0aW5ncyB8IEZpbGUgVGVtcGxhdGVzLgorICovCitwdWJsaWMgY2xhc3MgQTEgeworfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvYW5ub3RhdGlvbnMvY29uc2VydmF0aXZlTm9uSW5jcmVtZW50YWwxL2EyL2EyLmltbCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2Fubm90YXRpb25zL2NvbnNlcnZhdGl2ZU5vbkluY3JlbWVudGFsMS9hMi9hMi5pbWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmQyZGViYQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2Fubm90YXRpb25zL2NvbnNlcnZhdGl2ZU5vbkluY3JlbWVudGFsMS9hMi9hMi5pbWwKQEAgLTAsMCArMSwxMyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxtb2R1bGUgdHlwZT0iSkFWQV9NT0RVTEUiIHZlcnNpb249IjQiPgorICA8Y29tcG9uZW50IG5hbWU9Ik5ld01vZHVsZVJvb3RNYW5hZ2VyIiBpbmhlcml0LWNvbXBpbGVyLW91dHB1dD0idHJ1ZSI+CisgICAgPGV4Y2x1ZGUtb3V0cHV0IC8+CisgICAgPGNvbnRlbnQgdXJsPSJmaWxlOi8vJE1PRFVMRV9ESVIkIj4KKyAgICAgIDxzb3VyY2VGb2xkZXIgdXJsPSJmaWxlOi8vJE1PRFVMRV9ESVIkL3NyYyIgaXNUZXN0U291cmNlPSJmYWxzZSIgLz4KKyAgICA8L2NvbnRlbnQ+CisgICAgPG9yZGVyRW50cnkgdHlwZT0iaW5oZXJpdGVkSmRrIiAvPgorICAgIDxvcmRlckVudHJ5IHR5cGU9InNvdXJjZUZvbGRlciIgZm9yVGVzdHM9ImZhbHNlIiAvPgorICAgIDxvcmRlckVudHJ5IHR5cGU9Im1vZHVsZSIgbW9kdWxlLW5hbWU9ImNvbnNlcnZhdGl2ZU5vbkluY3JlbWVudGFsIiAvPgorICA8L2NvbXBvbmVudD4KKzwvbW9kdWxlPgorCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9hbm5vdGF0aW9ucy9jb25zZXJ2YXRpdmVOb25JbmNyZW1lbnRhbDEvYTIvc3JjL0EyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9hbm5vdGF0aW9ucy9jb25zZXJ2YXRpdmVOb25JbmNyZW1lbnRhbDEvYTIvc3JjL0EyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmY2Y2Y3ZGIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9hbm5vdGF0aW9ucy9jb25zZXJ2YXRpdmVOb25JbmNyZW1lbnRhbDEvYTIvc3JjL0EyLmphdmEKQEAgLTAsMCArMSwxNyBAQAoraW1wb3J0IGphdmEubGFuZy5hbm5vdGF0aW9uLlJldGVudGlvbjsKK2ltcG9ydCBqYXZhLmxhbmcuYW5ub3RhdGlvbi5SZXRlbnRpb25Qb2xpY3k7CitpbXBvcnQgamF2YS5sYW5nLmFubm90YXRpb24uRWxlbWVudFR5cGU7CitpbXBvcnQgamF2YS5sYW5nLmFubm90YXRpb24uVGFyZ2V0OworCisvKioKKyAqIENyZWF0ZWQgYnkgSW50ZWxsaUogSURFQS4KKyAqIFVzZXI6IGRiCisgKiBEYXRlOiAwNi4wOC4xMQorICogVGltZTogMTQ6NTYKKyAqIFRvIGNoYW5nZSB0aGlzIHRlbXBsYXRlIHVzZSBGaWxlIHwgU2V0dGluZ3MgfCBGaWxlIFRlbXBsYXRlcy4KKyAqLworCitAUmV0ZW50aW9uKFJldGVudGlvblBvbGljeS5TT1VSQ0UpCitAVGFyZ2V0KHtFbGVtZW50VHlwZS5UWVBFLCBFbGVtZW50VHlwZS5NRVRIT0QsIEVsZW1lbnRUeXBlLkxPQ0FMX1ZBUklBQkxFfSkKK3B1YmxpYyBAaW50ZXJmYWNlIEEyIHsKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2Fubm90YXRpb25zL2NvbnNlcnZhdGl2ZU5vbkluY3JlbWVudGFsMS9hMi9zcmMvQTIuamF2YS5uZXcgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9hbm5vdGF0aW9ucy9jb25zZXJ2YXRpdmVOb25JbmNyZW1lbnRhbDEvYTIvc3JjL0EyLmphdmEubmV3Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNlMmRkYjAKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9hbm5vdGF0aW9ucy9jb25zZXJ2YXRpdmVOb25JbmNyZW1lbnRhbDEvYTIvc3JjL0EyLmphdmEubmV3CkBAIC0wLDAgKzEsMTggQEAKK2ltcG9ydCBqYXZhLmxhbmcuYW5ub3RhdGlvbi5SZXRlbnRpb247CitpbXBvcnQgamF2YS5sYW5nLmFubm90YXRpb24uUmV0ZW50aW9uUG9saWN5OworaW1wb3J0IGphdmEubGFuZy5hbm5vdGF0aW9uLkVsZW1lbnRUeXBlOworaW1wb3J0IGphdmEubGFuZy5hbm5vdGF0aW9uLlRhcmdldDsKKworLyoqCisgKiBDcmVhdGVkIGJ5IEludGVsbGlKIElERUEuCisgKiBVc2VyOiBkYgorICogRGF0ZTogMDYuMDguMTEKKyAqIFRpbWU6IDE0OjU2CisgKiBUbyBjaGFuZ2UgdGhpcyB0ZW1wbGF0ZSB1c2UgRmlsZSB8IFNldHRpbmdzIHwgRmlsZSBUZW1wbGF0ZXMuCisgKi8KKworQFJldGVudGlvbihSZXRlbnRpb25Qb2xpY3kuU09VUkNFKQorQFRhcmdldCh7RWxlbWVudFR5cGUuVFlQRSwgRWxlbWVudFR5cGUuTUVUSE9EfSkKK3B1YmxpYyBAaW50ZXJmYWNlIEEyIHsKKyAgU3RyaW5nIHZhbHVlICgpOworfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvYW5ub3RhdGlvbnMvY29uc2VydmF0aXZlTm9uSW5jcmVtZW50YWwxL2EyL3NyYy9DLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9hbm5vdGF0aW9ucy9jb25zZXJ2YXRpdmVOb25JbmNyZW1lbnRhbDEvYTIvc3JjL0MuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hN2M0YTEwCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvYW5ub3RhdGlvbnMvY29uc2VydmF0aXZlTm9uSW5jcmVtZW50YWwxL2EyL3NyYy9DLmphdmEKQEAgLTAsMCArMSBAQAorcHVibGljIGNsYXNzIEMge30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9hbm5vdGF0aW9ucy9jb25zZXJ2YXRpdmVOb25JbmNyZW1lbnRhbDEvYjIxL2IyMS5pbWwgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9hbm5vdGF0aW9ucy9jb25zZXJ2YXRpdmVOb25JbmNyZW1lbnRhbDEvYjIxL2IyMS5pbWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDJlYTM2NQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2Fubm90YXRpb25zL2NvbnNlcnZhdGl2ZU5vbkluY3JlbWVudGFsMS9iMjEvYjIxLmltbApAQCAtMCwwICsxLDEzIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPG1vZHVsZSB0eXBlPSJKQVZBX01PRFVMRSIgdmVyc2lvbj0iNCI+CisgIDxjb21wb25lbnQgbmFtZT0iTmV3TW9kdWxlUm9vdE1hbmFnZXIiIGluaGVyaXQtY29tcGlsZXItb3V0cHV0PSJ0cnVlIj4KKyAgICA8ZXhjbHVkZS1vdXRwdXQgLz4KKyAgICA8Y29udGVudCB1cmw9ImZpbGU6Ly8kTU9EVUxFX0RJUiQiPgorICAgICAgPHNvdXJjZUZvbGRlciB1cmw9ImZpbGU6Ly8kTU9EVUxFX0RJUiQvc3JjIiBpc1Rlc3RTb3VyY2U9ImZhbHNlIiAvPgorICAgIDwvY29udGVudD4KKyAgICA8b3JkZXJFbnRyeSB0eXBlPSJpbmhlcml0ZWRKZGsiIC8+CisgICAgPG9yZGVyRW50cnkgdHlwZT0ic291cmNlRm9sZGVyIiBmb3JUZXN0cz0iZmFsc2UiIC8+CisgICAgPG9yZGVyRW50cnkgdHlwZT0ibW9kdWxlIiBtb2R1bGUtbmFtZT0iYTIiIC8+CisgIDwvY29tcG9uZW50PgorPC9tb2R1bGU+CisKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2Fubm90YXRpb25zL2NvbnNlcnZhdGl2ZU5vbkluY3JlbWVudGFsMS9iMjEvc3JjL0IyMS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvYW5ub3RhdGlvbnMvY29uc2VydmF0aXZlTm9uSW5jcmVtZW50YWwxL2IyMS9zcmMvQjIxLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGRiNGQxZgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2Fubm90YXRpb25zL2NvbnNlcnZhdGl2ZU5vbkluY3JlbWVudGFsMS9iMjEvc3JjL0IyMS5qYXZhCkBAIC0wLDAgKzEsOSBAQAorLyoqCisgKiBDcmVhdGVkIGJ5IEludGVsbGlKIElERUEuCisgKiBVc2VyOiBkYgorICogRGF0ZTogMDYuMDguMTEKKyAqIFRpbWU6IDE0OjU3CisgKiBUbyBjaGFuZ2UgdGhpcyB0ZW1wbGF0ZSB1c2UgRmlsZSB8IFNldHRpbmdzIHwgRmlsZSBUZW1wbGF0ZXMuCisgKi8KK3B1YmxpYyBjbGFzcyBCMjEgeworfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvYW5ub3RhdGlvbnMvY29uc2VydmF0aXZlTm9uSW5jcmVtZW50YWwxL2IyMi9iMjIuaW1sIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvYW5ub3RhdGlvbnMvY29uc2VydmF0aXZlTm9uSW5jcmVtZW50YWwxL2IyMi9iMjIuaW1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAyZWEzNjUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9hbm5vdGF0aW9ucy9jb25zZXJ2YXRpdmVOb25JbmNyZW1lbnRhbDEvYjIyL2IyMi5pbWwKQEAgLTAsMCArMSwxMyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxtb2R1bGUgdHlwZT0iSkFWQV9NT0RVTEUiIHZlcnNpb249IjQiPgorICA8Y29tcG9uZW50IG5hbWU9Ik5ld01vZHVsZVJvb3RNYW5hZ2VyIiBpbmhlcml0LWNvbXBpbGVyLW91dHB1dD0idHJ1ZSI+CisgICAgPGV4Y2x1ZGUtb3V0cHV0IC8+CisgICAgPGNvbnRlbnQgdXJsPSJmaWxlOi8vJE1PRFVMRV9ESVIkIj4KKyAgICAgIDxzb3VyY2VGb2xkZXIgdXJsPSJmaWxlOi8vJE1PRFVMRV9ESVIkL3NyYyIgaXNUZXN0U291cmNlPSJmYWxzZSIgLz4KKyAgICA8L2NvbnRlbnQ+CisgICAgPG9yZGVyRW50cnkgdHlwZT0iaW5oZXJpdGVkSmRrIiAvPgorICAgIDxvcmRlckVudHJ5IHR5cGU9InNvdXJjZUZvbGRlciIgZm9yVGVzdHM9ImZhbHNlIiAvPgorICAgIDxvcmRlckVudHJ5IHR5cGU9Im1vZHVsZSIgbW9kdWxlLW5hbWU9ImEyIiAvPgorICA8L2NvbXBvbmVudD4KKzwvbW9kdWxlPgorCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9hbm5vdGF0aW9ucy9jb25zZXJ2YXRpdmVOb25JbmNyZW1lbnRhbDEvYjIyL3NyYy9CMjIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2Fubm90YXRpb25zL2NvbnNlcnZhdGl2ZU5vbkluY3JlbWVudGFsMS9iMjIvc3JjL0IyMi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA4MTI5NTQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9hbm5vdGF0aW9ucy9jb25zZXJ2YXRpdmVOb25JbmNyZW1lbnRhbDEvYjIyL3NyYy9CMjIuamF2YQpAQCAtMCwwICsxLDkgQEAKKy8qKgorICogQ3JlYXRlZCBieSBJbnRlbGxpSiBJREVBLgorICogVXNlcjogZGIKKyAqIERhdGU6IDA2LjA4LjExCisgKiBUaW1lOiAxNDo1NworICogVG8gY2hhbmdlIHRoaXMgdGVtcGxhdGUgdXNlIEZpbGUgfCBTZXR0aW5ncyB8IEZpbGUgVGVtcGxhdGVzLgorICovCitwdWJsaWMgY2xhc3MgQjIyIHsKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2Fubm90YXRpb25zL2NvbnNlcnZhdGl2ZU5vbkluY3JlbWVudGFsMS9jb25zZXJ2YXRpdmVOb25JbmNyZW1lbnRhbC5pbWwgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9hbm5vdGF0aW9ucy9jb25zZXJ2YXRpdmVOb25JbmNyZW1lbnRhbDEvY29uc2VydmF0aXZlTm9uSW5jcmVtZW50YWwuaW1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ1YzA3NDMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9hbm5vdGF0aW9ucy9jb25zZXJ2YXRpdmVOb25JbmNyZW1lbnRhbDEvY29uc2VydmF0aXZlTm9uSW5jcmVtZW50YWwuaW1sCkBAIC0wLDAgKzEsMTIgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8bW9kdWxlIHR5cGU9IkpBVkFfTU9EVUxFIiB2ZXJzaW9uPSI0Ij4KKyAgPGNvbXBvbmVudCBuYW1lPSJOZXdNb2R1bGVSb290TWFuYWdlciIgaW5oZXJpdC1jb21waWxlci1vdXRwdXQ9InRydWUiPgorICAgIDxleGNsdWRlLW91dHB1dCAvPgorICAgIDxjb250ZW50IHVybD0iZmlsZTovLyRNT0RVTEVfRElSJCI+CisgICAgICA8c291cmNlRm9sZGVyIHVybD0iZmlsZTovLyRNT0RVTEVfRElSJC9zcmMiIGlzVGVzdFNvdXJjZT0iZmFsc2UiIC8+CisgICAgPC9jb250ZW50PgorICAgIDxvcmRlckVudHJ5IHR5cGU9ImluaGVyaXRlZEpkayIgLz4KKyAgICA8b3JkZXJFbnRyeSB0eXBlPSJzb3VyY2VGb2xkZXIiIGZvclRlc3RzPSJmYWxzZSIgLz4KKyAgPC9jb21wb25lbnQ+Cis8L21vZHVsZT4KKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvYW5ub3RhdGlvbnMvY29uc2VydmF0aXZlTm9uSW5jcmVtZW50YWwxL3NyYy9BLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9hbm5vdGF0aW9ucy9jb25zZXJ2YXRpdmVOb25JbmNyZW1lbnRhbDEvc3JjL0EuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZDhiZmIzCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvYW5ub3RhdGlvbnMvY29uc2VydmF0aXZlTm9uSW5jcmVtZW50YWwxL3NyYy9BLmphdmEKQEAgLTAsMCArMSw5IEBACisvKioKKyAqIENyZWF0ZWQgYnkgSW50ZWxsaUogSURFQS4KKyAqIFVzZXI6IGRiCisgKiBEYXRlOiAwNi4wOC4xMQorICogVGltZTogMTQ6NTYKKyAqIFRvIGNoYW5nZSB0aGlzIHRlbXBsYXRlIHVzZSBGaWxlIHwgU2V0dGluZ3MgfCBGaWxlIFRlbXBsYXRlcy4KKyAqLworcHVibGljIGNsYXNzIEEgeworfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvYW5ub3RhdGlvbnMvbWV0YUFubm90YXRpb25DaGFuZ2VkLmxvZyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2Fubm90YXRpb25zL21ldGFBbm5vdGF0aW9uQ2hhbmdlZC5sb2cKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzQzN2FjNAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2Fubm90YXRpb25zL21ldGFBbm5vdGF0aW9uQ2hhbmdlZC5sb2cKQEAgLTAsMCArMSw4IEBACitDbGVhbmluZyBvdXRwdXQgZmlsZXM6CitvdXQvcHJvZHVjdGlvbi9NZXRhQW5ub3RhdGlvbkNoYW5nZWQvQTEuY2xhc3MKK291dC9wcm9kdWN0aW9uL01ldGFBbm5vdGF0aW9uQ2hhbmdlZC9DMS5jbGFzcworRW5kIG9mIGZpbGVzCitDb21waWxpbmcgZmlsZXM6CitzcmMvQTEuamF2YQorc3JjL0MxLmphdmEKK0VuZCBvZiBmaWxlcwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvYW5ub3RhdGlvbnMvbWV0YUFubm90YXRpb25DaGFuZ2VkL0ExLmphdmEubmV3IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvYW5ub3RhdGlvbnMvbWV0YUFubm90YXRpb25DaGFuZ2VkL0ExLmphdmEubmV3Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg1ZjBkZTYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9hbm5vdGF0aW9ucy9tZXRhQW5ub3RhdGlvbkNoYW5nZWQvQTEuamF2YS5uZXcKQEAgLTAsMCArMSw2IEBACitpbXBvcnQgamF2YS5sYW5nLmFubm90YXRpb24uKjsKK2ltcG9ydCBzdGF0aWMgamF2YS5sYW5nLmFubm90YXRpb24uRWxlbWVudFR5cGUuKjsKKworQEEoMTEpCitwdWJsaWMgQGludGVyZmFjZSBBMSB7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvYW5ub3RhdGlvbnMvbWV0YUFubm90YXRpb25DaGFuZ2VkL3NyYy9BLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9hbm5vdGF0aW9ucy9tZXRhQW5ub3RhdGlvbkNoYW5nZWQvc3JjL0EuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZTQ1MmFkCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvYW5ub3RhdGlvbnMvbWV0YUFubm90YXRpb25DaGFuZ2VkL3NyYy9BLmphdmEKQEAgLTAsMCArMSw2IEBACitpbXBvcnQgamF2YS5sYW5nLmFubm90YXRpb24uKjsKK2ltcG9ydCBzdGF0aWMgamF2YS5sYW5nLmFubm90YXRpb24uRWxlbWVudFR5cGUuKjsKKworcHVibGljIEBpbnRlcmZhY2UgQSB7CisgIGludCB2YWx1ZSgpOworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2Fubm90YXRpb25zL21ldGFBbm5vdGF0aW9uQ2hhbmdlZC9zcmMvQTEuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2Fubm90YXRpb25zL21ldGFBbm5vdGF0aW9uQ2hhbmdlZC9zcmMvQTEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMDllZDg5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvYW5ub3RhdGlvbnMvbWV0YUFubm90YXRpb25DaGFuZ2VkL3NyYy9BMS5qYXZhCkBAIC0wLDAgKzEsNiBAQAoraW1wb3J0IGphdmEubGFuZy5hbm5vdGF0aW9uLio7CitpbXBvcnQgc3RhdGljIGphdmEubGFuZy5hbm5vdGF0aW9uLkVsZW1lbnRUeXBlLio7CisKK0BBKDEpCitwdWJsaWMgQGludGVyZmFjZSBBMSB7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvYW5ub3RhdGlvbnMvbWV0YUFubm90YXRpb25DaGFuZ2VkL3NyYy9DLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9hbm5vdGF0aW9ucy9tZXRhQW5ub3RhdGlvbkNoYW5nZWQvc3JjL0MuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOTYyYWVmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvYW5ub3RhdGlvbnMvbWV0YUFubm90YXRpb25DaGFuZ2VkL3NyYy9DLmphdmEKQEAgLTAsMCArMSwzIEBACitAQSgxMCkgCitwdWJsaWMgY2xhc3MgQyB7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvYW5ub3RhdGlvbnMvbWV0YUFubm90YXRpb25DaGFuZ2VkL3NyYy9DMS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvYW5ub3RhdGlvbnMvbWV0YUFubm90YXRpb25DaGFuZ2VkL3NyYy9DMS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI3ZTdhNmIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9hbm5vdGF0aW9ucy9tZXRhQW5ub3RhdGlvbkNoYW5nZWQvc3JjL0MxLmphdmEKQEAgLTAsMCArMSwzIEBACitAQTEKK3B1YmxpYyBjbGFzcyBDMSB7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvYW5ub3RhdGlvbnMvbWV0YUFubm90YXRpb25DaGFuZ2VkQ2FzY2FkZS5sb2cgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9hbm5vdGF0aW9ucy9tZXRhQW5ub3RhdGlvbkNoYW5nZWRDYXNjYWRlLmxvZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNjBiZGQzCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvYW5ub3RhdGlvbnMvbWV0YUFubm90YXRpb25DaGFuZ2VkQ2FzY2FkZS5sb2cKQEAgLTAsMCArMSwxMiBAQAorQ2xlYW5pbmcgb3V0cHV0IGZpbGVzOgorb3V0L3Byb2R1Y3Rpb24vTWV0YUFubm90YXRpb25DaGFuZ2VkQ2FzY2FkZS9BLmNsYXNzCitvdXQvcHJvZHVjdGlvbi9NZXRhQW5ub3RhdGlvbkNoYW5nZWRDYXNjYWRlL0MuY2xhc3MKK291dC9wcm9kdWN0aW9uL01ldGFBbm5vdGF0aW9uQ2hhbmdlZENhc2NhZGUvQTEuY2xhc3MKK291dC9wcm9kdWN0aW9uL01ldGFBbm5vdGF0aW9uQ2hhbmdlZENhc2NhZGUvQzEuY2xhc3MKK0VuZCBvZiBmaWxlcworQ29tcGlsaW5nIGZpbGVzOgorc3JjL0EuamF2YQorc3JjL0MuamF2YQorc3JjL0ExLmphdmEKK3NyYy9DMS5qYXZhCitFbmQgb2YgZmlsZXMKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2Fubm90YXRpb25zL21ldGFBbm5vdGF0aW9uQ2hhbmdlZENhc2NhZGUvQS5qYXZhLm5ldyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2Fubm90YXRpb25zL21ldGFBbm5vdGF0aW9uQ2hhbmdlZENhc2NhZGUvQS5qYXZhLm5ldwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNGU2N2Q2Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvYW5ub3RhdGlvbnMvbWV0YUFubm90YXRpb25DaGFuZ2VkQ2FzY2FkZS9BLmphdmEubmV3CkBAIC0wLDAgKzEsNyBAQAoraW1wb3J0IGphdmEubGFuZy5hbm5vdGF0aW9uLio7CitpbXBvcnQgc3RhdGljIGphdmEubGFuZy5hbm5vdGF0aW9uLkVsZW1lbnRUeXBlLio7CisKK0BCKDc3KQorcHVibGljIEBpbnRlcmZhY2UgQSB7CisgIGludCB2YWx1ZSgpOworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2Fubm90YXRpb25zL21ldGFBbm5vdGF0aW9uQ2hhbmdlZENhc2NhZGUvc3JjL0EuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2Fubm90YXRpb25zL21ldGFBbm5vdGF0aW9uQ2hhbmdlZENhc2NhZGUvc3JjL0EuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZTQ1MmFkCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvYW5ub3RhdGlvbnMvbWV0YUFubm90YXRpb25DaGFuZ2VkQ2FzY2FkZS9zcmMvQS5qYXZhCkBAIC0wLDAgKzEsNiBAQAoraW1wb3J0IGphdmEubGFuZy5hbm5vdGF0aW9uLio7CitpbXBvcnQgc3RhdGljIGphdmEubGFuZy5hbm5vdGF0aW9uLkVsZW1lbnRUeXBlLio7CisKK3B1YmxpYyBAaW50ZXJmYWNlIEEgeworICBpbnQgdmFsdWUoKTsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9hbm5vdGF0aW9ucy9tZXRhQW5ub3RhdGlvbkNoYW5nZWRDYXNjYWRlL3NyYy9BMS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvYW5ub3RhdGlvbnMvbWV0YUFubm90YXRpb25DaGFuZ2VkQ2FzY2FkZS9zcmMvQTEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMDllZDg5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvYW5ub3RhdGlvbnMvbWV0YUFubm90YXRpb25DaGFuZ2VkQ2FzY2FkZS9zcmMvQTEuamF2YQpAQCAtMCwwICsxLDYgQEAKK2ltcG9ydCBqYXZhLmxhbmcuYW5ub3RhdGlvbi4qOworaW1wb3J0IHN0YXRpYyBqYXZhLmxhbmcuYW5ub3RhdGlvbi5FbGVtZW50VHlwZS4qOworCitAQSgxKQorcHVibGljIEBpbnRlcmZhY2UgQTEgeworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2Fubm90YXRpb25zL21ldGFBbm5vdGF0aW9uQ2hhbmdlZENhc2NhZGUvc3JjL0IuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2Fubm90YXRpb25zL21ldGFBbm5vdGF0aW9uQ2hhbmdlZENhc2NhZGUvc3JjL0IuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMzNmZGY3Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvYW5ub3RhdGlvbnMvbWV0YUFubm90YXRpb25DaGFuZ2VkQ2FzY2FkZS9zcmMvQi5qYXZhCkBAIC0wLDAgKzEsNiBAQAoraW1wb3J0IGphdmEubGFuZy5hbm5vdGF0aW9uLio7CitpbXBvcnQgc3RhdGljIGphdmEubGFuZy5hbm5vdGF0aW9uLkVsZW1lbnRUeXBlLio7CisKK3B1YmxpYyBAaW50ZXJmYWNlIEIgeworICBpbnQgdmFsdWUoKTsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9hbm5vdGF0aW9ucy9tZXRhQW5ub3RhdGlvbkNoYW5nZWRDYXNjYWRlL3NyYy9DLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9hbm5vdGF0aW9ucy9tZXRhQW5ub3RhdGlvbkNoYW5nZWRDYXNjYWRlL3NyYy9DLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjk2MmFlZgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2Fubm90YXRpb25zL21ldGFBbm5vdGF0aW9uQ2hhbmdlZENhc2NhZGUvc3JjL0MuamF2YQpAQCAtMCwwICsxLDMgQEAKK0BBKDEwKSAKK3B1YmxpYyBjbGFzcyBDIHsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9hbm5vdGF0aW9ucy9tZXRhQW5ub3RhdGlvbkNoYW5nZWRDYXNjYWRlL3NyYy9DMS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvYW5ub3RhdGlvbnMvbWV0YUFubm90YXRpb25DaGFuZ2VkQ2FzY2FkZS9zcmMvQzEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iN2U3YTZiCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvYW5ub3RhdGlvbnMvbWV0YUFubm90YXRpb25DaGFuZ2VkQ2FzY2FkZS9zcmMvQzEuamF2YQpAQCAtMCwwICsxLDMgQEAKK0BBMQorcHVibGljIGNsYXNzIEMxIHsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9hbm5vdGF0aW9ucy9tZXRhQW5ub3RhdGlvbkNoYW5nZWRDYXNjYWRlMi5sb2cgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9hbm5vdGF0aW9ucy9tZXRhQW5ub3RhdGlvbkNoYW5nZWRDYXNjYWRlMi5sb2cKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODdiNDYzMwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2Fubm90YXRpb25zL21ldGFBbm5vdGF0aW9uQ2hhbmdlZENhc2NhZGUyLmxvZwpAQCAtMCwwICsxLDEyIEBACitDbGVhbmluZyBvdXRwdXQgZmlsZXM6CitvdXQvcHJvZHVjdGlvbi9NZXRhQW5ub3RhdGlvbkNoYW5nZWRDYXNjYWRlMi9BLmNsYXNzCitvdXQvcHJvZHVjdGlvbi9NZXRhQW5ub3RhdGlvbkNoYW5nZWRDYXNjYWRlMi9DLmNsYXNzCitvdXQvcHJvZHVjdGlvbi9NZXRhQW5ub3RhdGlvbkNoYW5nZWRDYXNjYWRlMi9BMS5jbGFzcworb3V0L3Byb2R1Y3Rpb24vTWV0YUFubm90YXRpb25DaGFuZ2VkQ2FzY2FkZTIvQzEuY2xhc3MKK0VuZCBvZiBmaWxlcworQ29tcGlsaW5nIGZpbGVzOgorc3JjL0EuamF2YQorc3JjL0MuamF2YQorc3JjL0ExLmphdmEKK3NyYy9DMS5qYXZhCitFbmQgb2YgZmlsZXMKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2Fubm90YXRpb25zL21ldGFBbm5vdGF0aW9uQ2hhbmdlZENhc2NhZGUyL0EuamF2YS5uZXcgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9hbm5vdGF0aW9ucy9tZXRhQW5ub3RhdGlvbkNoYW5nZWRDYXNjYWRlMi9BLmphdmEubmV3Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFiZDE0ZjgKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9hbm5vdGF0aW9ucy9tZXRhQW5ub3RhdGlvbkNoYW5nZWRDYXNjYWRlMi9BLmphdmEubmV3CkBAIC0wLDAgKzEsNyBAQAoraW1wb3J0IGphdmEubGFuZy5hbm5vdGF0aW9uLio7CitpbXBvcnQgc3RhdGljIGphdmEubGFuZy5hbm5vdGF0aW9uLkVsZW1lbnRUeXBlLio7CisKK0BCKDg4KQorcHVibGljIEBpbnRlcmZhY2UgQSB7CisgIGludCB2YWx1ZSgpOworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2Fubm90YXRpb25zL21ldGFBbm5vdGF0aW9uQ2hhbmdlZENhc2NhZGUyL3NyYy9BLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9hbm5vdGF0aW9ucy9tZXRhQW5ub3RhdGlvbkNoYW5nZWRDYXNjYWRlMi9zcmMvQS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI0ZTY3ZDYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9hbm5vdGF0aW9ucy9tZXRhQW5ub3RhdGlvbkNoYW5nZWRDYXNjYWRlMi9zcmMvQS5qYXZhCkBAIC0wLDAgKzEsNyBAQAoraW1wb3J0IGphdmEubGFuZy5hbm5vdGF0aW9uLio7CitpbXBvcnQgc3RhdGljIGphdmEubGFuZy5hbm5vdGF0aW9uLkVsZW1lbnRUeXBlLio7CisKK0BCKDc3KQorcHVibGljIEBpbnRlcmZhY2UgQSB7CisgIGludCB2YWx1ZSgpOworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2Fubm90YXRpb25zL21ldGFBbm5vdGF0aW9uQ2hhbmdlZENhc2NhZGUyL3NyYy9BMS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvYW5ub3RhdGlvbnMvbWV0YUFubm90YXRpb25DaGFuZ2VkQ2FzY2FkZTIvc3JjL0ExLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzA5ZWQ4OQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2Fubm90YXRpb25zL21ldGFBbm5vdGF0aW9uQ2hhbmdlZENhc2NhZGUyL3NyYy9BMS5qYXZhCkBAIC0wLDAgKzEsNiBAQAoraW1wb3J0IGphdmEubGFuZy5hbm5vdGF0aW9uLio7CitpbXBvcnQgc3RhdGljIGphdmEubGFuZy5hbm5vdGF0aW9uLkVsZW1lbnRUeXBlLio7CisKK0BBKDEpCitwdWJsaWMgQGludGVyZmFjZSBBMSB7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvYW5ub3RhdGlvbnMvbWV0YUFubm90YXRpb25DaGFuZ2VkQ2FzY2FkZTIvc3JjL0IuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2Fubm90YXRpb25zL21ldGFBbm5vdGF0aW9uQ2hhbmdlZENhc2NhZGUyL3NyYy9CLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTMzZmRmNwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2Fubm90YXRpb25zL21ldGFBbm5vdGF0aW9uQ2hhbmdlZENhc2NhZGUyL3NyYy9CLmphdmEKQEAgLTAsMCArMSw2IEBACitpbXBvcnQgamF2YS5sYW5nLmFubm90YXRpb24uKjsKK2ltcG9ydCBzdGF0aWMgamF2YS5sYW5nLmFubm90YXRpb24uRWxlbWVudFR5cGUuKjsKKworcHVibGljIEBpbnRlcmZhY2UgQiB7CisgIGludCB2YWx1ZSgpOworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2Fubm90YXRpb25zL21ldGFBbm5vdGF0aW9uQ2hhbmdlZENhc2NhZGUyL3NyYy9DLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9hbm5vdGF0aW9ucy9tZXRhQW5ub3RhdGlvbkNoYW5nZWRDYXNjYWRlMi9zcmMvQy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI5NjJhZWYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9hbm5vdGF0aW9ucy9tZXRhQW5ub3RhdGlvbkNoYW5nZWRDYXNjYWRlMi9zcmMvQy5qYXZhCkBAIC0wLDAgKzEsMyBAQAorQEEoMTApIAorcHVibGljIGNsYXNzIEMgeworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2Fubm90YXRpb25zL21ldGFBbm5vdGF0aW9uQ2hhbmdlZENhc2NhZGUyL3NyYy9DMS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvYW5ub3RhdGlvbnMvbWV0YUFubm90YXRpb25DaGFuZ2VkQ2FzY2FkZTIvc3JjL0MxLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjdlN2E2YgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2Fubm90YXRpb25zL21ldGFBbm5vdGF0aW9uQ2hhbmdlZENhc2NhZGUyL3NyYy9DMS5qYXZhCkBAIC0wLDAgKzEsMyBAQAorQEExCitwdWJsaWMgY2xhc3MgQzEgeworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2Fubm90YXRpb25zL3JlbW92ZUFubm90YXRpb25UYXJnZXQubG9nIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvYW5ub3RhdGlvbnMvcmVtb3ZlQW5ub3RhdGlvblRhcmdldC5sb2cKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjVjOGI1OAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2Fubm90YXRpb25zL3JlbW92ZUFubm90YXRpb25UYXJnZXQubG9nCkBAIC0wLDAgKzEsMTIgQEAKK0NsZWFuaW5nIG91dHB1dCBmaWxlczoKK291dC9wcm9kdWN0aW9uL1JlbW92ZUFubm90YXRpb25UYXJnZXQvQS5jbGFzcworRW5kIG9mIGZpbGVzCitDb21waWxpbmcgZmlsZXM6CitzcmMvQS5qYXZhCitFbmQgb2YgZmlsZXMKK0NsZWFuaW5nIG91dHB1dCBmaWxlczoKK291dC9wcm9kdWN0aW9uL1JlbW92ZUFubm90YXRpb25UYXJnZXQvQzIuY2xhc3MKK0VuZCBvZiBmaWxlcworQ29tcGlsaW5nIGZpbGVzOgorc3JjL0MyLmphdmEKK0VuZCBvZiBmaWxlcwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvYW5ub3RhdGlvbnMvcmVtb3ZlQW5ub3RhdGlvblRhcmdldC9BLmphdmEubmV3IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvYW5ub3RhdGlvbnMvcmVtb3ZlQW5ub3RhdGlvblRhcmdldC9BLmphdmEubmV3Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYxMTZhNTMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9hbm5vdGF0aW9ucy9yZW1vdmVBbm5vdGF0aW9uVGFyZ2V0L0EuamF2YS5uZXcKQEAgLTAsMCArMSw3IEBACitpbXBvcnQgamF2YS5sYW5nLmFubm90YXRpb24uKjsKK2ltcG9ydCBzdGF0aWMgamF2YS5sYW5nLmFubm90YXRpb24uRWxlbWVudFR5cGUuKjsKKworQFRhcmdldChUWVBFKQorcHVibGljIEBpbnRlcmZhY2UgQSB7CisgIGludCB2YWx1ZSgpOworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2Fubm90YXRpb25zL3JlbW92ZUFubm90YXRpb25UYXJnZXQvc3JjL0EuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2Fubm90YXRpb25zL3JlbW92ZUFubm90YXRpb25UYXJnZXQvc3JjL0EuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NDBjNGM0NwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2Fubm90YXRpb25zL3JlbW92ZUFubm90YXRpb25UYXJnZXQvc3JjL0EuamF2YQpAQCAtMCwwICsxLDcgQEAKK2ltcG9ydCBqYXZhLmxhbmcuYW5ub3RhdGlvbi4qOworaW1wb3J0IHN0YXRpYyBqYXZhLmxhbmcuYW5ub3RhdGlvbi5FbGVtZW50VHlwZS4qOworCitAVGFyZ2V0KHtUWVBFLCBGSUVMRH0pCitwdWJsaWMgQGludGVyZmFjZSBBIHsKKyAgaW50IHZhbHVlKCk7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvYW5ub3RhdGlvbnMvcmVtb3ZlQW5ub3RhdGlvblRhcmdldC9zcmMvQy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvYW5ub3RhdGlvbnMvcmVtb3ZlQW5ub3RhdGlvblRhcmdldC9zcmMvQy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI5NjJhZWYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9hbm5vdGF0aW9ucy9yZW1vdmVBbm5vdGF0aW9uVGFyZ2V0L3NyYy9DLmphdmEKQEAgLTAsMCArMSwzIEBACitAQSgxMCkgCitwdWJsaWMgY2xhc3MgQyB7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvYW5ub3RhdGlvbnMvcmVtb3ZlQW5ub3RhdGlvblRhcmdldC9zcmMvQzIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2Fubm90YXRpb25zL3JlbW92ZUFubm90YXRpb25UYXJnZXQvc3JjL0MyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTc3NjE1NmIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9hbm5vdGF0aW9ucy9yZW1vdmVBbm5vdGF0aW9uVGFyZ2V0L3NyYy9DMi5qYXZhCkBAIC0wLDAgKzEsNSBAQAorcHVibGljIGNsYXNzIEMyIHsKKworICBAQSgzMCkgCisgIGludCBmaWVsZDsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9hbm5vdGF0aW9ucy9yZW1vdmVBbm5vdGF0aW9uVHlwZU1lbWJlci5sb2cgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9hbm5vdGF0aW9ucy9yZW1vdmVBbm5vdGF0aW9uVHlwZU1lbWJlci5sb2cKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjc2ZjVlOQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2Fubm90YXRpb25zL3JlbW92ZUFubm90YXRpb25UeXBlTWVtYmVyLmxvZwpAQCAtMCwwICsxLDE2IEBACitDbGVhbmluZyBvdXRwdXQgZmlsZXM6CitvdXQvcHJvZHVjdGlvbi9SZW1vdmVBbm5vdGF0aW9uVHlwZU1lbWJlci9BLmNsYXNzCitFbmQgb2YgZmlsZXMKK0NvbXBpbGluZyBmaWxlczoKK3NyYy9BLmphdmEKK0VuZCBvZiBmaWxlcworQ2xlYW5pbmcgb3V0cHV0IGZpbGVzOgorb3V0L3Byb2R1Y3Rpb24vUmVtb3ZlQW5ub3RhdGlvblR5cGVNZW1iZXIvQy5jbGFzcworb3V0L3Byb2R1Y3Rpb24vUmVtb3ZlQW5ub3RhdGlvblR5cGVNZW1iZXIvQzEuY2xhc3MKK291dC9wcm9kdWN0aW9uL1JlbW92ZUFubm90YXRpb25UeXBlTWVtYmVyL0MyLmNsYXNzCitFbmQgb2YgZmlsZXMKK0NvbXBpbGluZyBmaWxlczoKK3NyYy9DLmphdmEKK3NyYy9DMS5qYXZhCitzcmMvQzIuamF2YQorRW5kIG9mIGZpbGVzCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9hbm5vdGF0aW9ucy9yZW1vdmVBbm5vdGF0aW9uVHlwZU1lbWJlci9BLmphdmEubmV3IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvYW5ub3RhdGlvbnMvcmVtb3ZlQW5ub3RhdGlvblR5cGVNZW1iZXIvQS5qYXZhLm5ldwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNGM3NDU0Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvYW5ub3RhdGlvbnMvcmVtb3ZlQW5ub3RhdGlvblR5cGVNZW1iZXIvQS5qYXZhLm5ldwpAQCAtMCwwICsxLDIgQEAKK3B1YmxpYyBAaW50ZXJmYWNlIEEgeworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2Fubm90YXRpb25zL3JlbW92ZUFubm90YXRpb25UeXBlTWVtYmVyL3NyYy9BLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9hbm5vdGF0aW9ucy9yZW1vdmVBbm5vdGF0aW9uVHlwZU1lbWJlci9zcmMvQS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg3ZjFiNjQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9hbm5vdGF0aW9ucy9yZW1vdmVBbm5vdGF0aW9uVHlwZU1lbWJlci9zcmMvQS5qYXZhCkBAIC0wLDAgKzEsMyBAQAorcHVibGljIEBpbnRlcmZhY2UgQSB7CisgIGludCB2YWx1ZSgpOworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2Fubm90YXRpb25zL3JlbW92ZUFubm90YXRpb25UeXBlTWVtYmVyL3NyYy9DLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9hbm5vdGF0aW9ucy9yZW1vdmVBbm5vdGF0aW9uVHlwZU1lbWJlci9zcmMvQy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI5NjJhZWYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9hbm5vdGF0aW9ucy9yZW1vdmVBbm5vdGF0aW9uVHlwZU1lbWJlci9zcmMvQy5qYXZhCkBAIC0wLDAgKzEsMyBAQAorQEEoMTApIAorcHVibGljIGNsYXNzIEMgeworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2Fubm90YXRpb25zL3JlbW92ZUFubm90YXRpb25UeXBlTWVtYmVyL3NyYy9DMS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvYW5ub3RhdGlvbnMvcmVtb3ZlQW5ub3RhdGlvblR5cGVNZW1iZXIvc3JjL0MxLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDM0MjkwNQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2Fubm90YXRpb25zL3JlbW92ZUFubm90YXRpb25UeXBlTWVtYmVyL3NyYy9DMS5qYXZhCkBAIC0wLDAgKzEsNiBAQAorcHVibGljIGNsYXNzIEMxIHsKKworICBAQSgyMCkKKyAgdm9pZCBmb28oKSB7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9hbm5vdGF0aW9ucy9yZW1vdmVBbm5vdGF0aW9uVHlwZU1lbWJlci9zcmMvQzIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2Fubm90YXRpb25zL3JlbW92ZUFubm90YXRpb25UeXBlTWVtYmVyL3NyYy9DMi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU3NzYxNTZiCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvYW5ub3RhdGlvbnMvcmVtb3ZlQW5ub3RhdGlvblR5cGVNZW1iZXIvc3JjL0MyLmphdmEKQEAgLTAsMCArMSw1IEBACitwdWJsaWMgY2xhc3MgQzIgeworCisgIEBBKDMwKSAKKyAgaW50IGZpZWxkOworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2Fubm90YXRpb25zL3JlbW92ZUFubm90YXRpb25UeXBlTWVtYmVyMS5sb2cgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9hbm5vdGF0aW9ucy9yZW1vdmVBbm5vdGF0aW9uVHlwZU1lbWJlcjEubG9nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg3Mjk0YTUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9hbm5vdGF0aW9ucy9yZW1vdmVBbm5vdGF0aW9uVHlwZU1lbWJlcjEubG9nCkBAIC0wLDAgKzEsMTYgQEAKK0NsZWFuaW5nIG91dHB1dCBmaWxlczoKK291dC9wcm9kdWN0aW9uL1JlbW92ZUFubm90YXRpb25UeXBlTWVtYmVyMS9BLmNsYXNzCitFbmQgb2YgZmlsZXMKK0NvbXBpbGluZyBmaWxlczoKK3NyYy9BLmphdmEKK0VuZCBvZiBmaWxlcworQ2xlYW5pbmcgb3V0cHV0IGZpbGVzOgorb3V0L3Byb2R1Y3Rpb24vUmVtb3ZlQW5ub3RhdGlvblR5cGVNZW1iZXIxL0MuY2xhc3MKK291dC9wcm9kdWN0aW9uL1JlbW92ZUFubm90YXRpb25UeXBlTWVtYmVyMS9DMS5jbGFzcworb3V0L3Byb2R1Y3Rpb24vUmVtb3ZlQW5ub3RhdGlvblR5cGVNZW1iZXIxL0MyLmNsYXNzCitFbmQgb2YgZmlsZXMKK0NvbXBpbGluZyBmaWxlczoKK3NyYy9DLmphdmEKK3NyYy9DMS5qYXZhCitzcmMvQzIuamF2YQorRW5kIG9mIGZpbGVzCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9hbm5vdGF0aW9ucy9yZW1vdmVBbm5vdGF0aW9uVHlwZU1lbWJlcjEvQS5qYXZhLm5ldyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2Fubm90YXRpb25zL3JlbW92ZUFubm90YXRpb25UeXBlTWVtYmVyMS9BLmphdmEubmV3Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA0Yzc0NTQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9hbm5vdGF0aW9ucy9yZW1vdmVBbm5vdGF0aW9uVHlwZU1lbWJlcjEvQS5qYXZhLm5ldwpAQCAtMCwwICsxLDIgQEAKK3B1YmxpYyBAaW50ZXJmYWNlIEEgeworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2Fubm90YXRpb25zL3JlbW92ZUFubm90YXRpb25UeXBlTWVtYmVyMS9zcmMvQS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvYW5ub3RhdGlvbnMvcmVtb3ZlQW5ub3RhdGlvblR5cGVNZW1iZXIxL3NyYy9BLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODQ3ZDA3NwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2Fubm90YXRpb25zL3JlbW92ZUFubm90YXRpb25UeXBlTWVtYmVyMS9zcmMvQS5qYXZhCkBAIC0wLDAgKzEsMyBAQAorcHVibGljIEBpbnRlcmZhY2UgQSB7CisgIGludCB2YWx1ZSgpIGRlZmF1bHQgMTsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9hbm5vdGF0aW9ucy9yZW1vdmVBbm5vdGF0aW9uVHlwZU1lbWJlcjEvc3JjL0MuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2Fubm90YXRpb25zL3JlbW92ZUFubm90YXRpb25UeXBlTWVtYmVyMS9zcmMvQy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI5NjJhZWYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9hbm5vdGF0aW9ucy9yZW1vdmVBbm5vdGF0aW9uVHlwZU1lbWJlcjEvc3JjL0MuamF2YQpAQCAtMCwwICsxLDMgQEAKK0BBKDEwKSAKK3B1YmxpYyBjbGFzcyBDIHsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9hbm5vdGF0aW9ucy9yZW1vdmVBbm5vdGF0aW9uVHlwZU1lbWJlcjEvc3JjL0MxLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9hbm5vdGF0aW9ucy9yZW1vdmVBbm5vdGF0aW9uVHlwZU1lbWJlcjEvc3JjL0MxLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDM0MjkwNQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2Fubm90YXRpb25zL3JlbW92ZUFubm90YXRpb25UeXBlTWVtYmVyMS9zcmMvQzEuamF2YQpAQCAtMCwwICsxLDYgQEAKK3B1YmxpYyBjbGFzcyBDMSB7CisKKyAgQEEoMjApCisgIHZvaWQgZm9vKCkgeworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvYW5ub3RhdGlvbnMvcmVtb3ZlQW5ub3RhdGlvblR5cGVNZW1iZXIxL3NyYy9DMi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvYW5ub3RhdGlvbnMvcmVtb3ZlQW5ub3RhdGlvblR5cGVNZW1iZXIxL3NyYy9DMi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU3NzYxNTZiCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvYW5ub3RhdGlvbnMvcmVtb3ZlQW5ub3RhdGlvblR5cGVNZW1iZXIxL3NyYy9DMi5qYXZhCkBAIC0wLDAgKzEsNSBAQAorcHVibGljIGNsYXNzIEMyIHsKKworICBAQSgzMCkgCisgIGludCBmaWVsZDsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9hbm5vdGF0aW9ucy9yZW1vdmVEZWZhdWx0RnJvbUFubm90YXRpb25NZW1iZXIubG9nIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvYW5ub3RhdGlvbnMvcmVtb3ZlRGVmYXVsdEZyb21Bbm5vdGF0aW9uTWVtYmVyLmxvZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45M2I5NTU5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvYW5ub3RhdGlvbnMvcmVtb3ZlRGVmYXVsdEZyb21Bbm5vdGF0aW9uTWVtYmVyLmxvZwpAQCAtMCwwICsxLDE0IEBACitDbGVhbmluZyBvdXRwdXQgZmlsZXM6CitvdXQvcHJvZHVjdGlvbi9SZW1vdmVEZWZhdWx0RnJvbUFubm90YXRpb25NZW1iZXIvQS5jbGFzcworRW5kIG9mIGZpbGVzCitDb21waWxpbmcgZmlsZXM6CitzcmMvQS5qYXZhCitFbmQgb2YgZmlsZXMKK0NsZWFuaW5nIG91dHB1dCBmaWxlczoKK291dC9wcm9kdWN0aW9uL1JlbW92ZURlZmF1bHRGcm9tQW5ub3RhdGlvbk1lbWJlci9DLmNsYXNzCitvdXQvcHJvZHVjdGlvbi9SZW1vdmVEZWZhdWx0RnJvbUFubm90YXRpb25NZW1iZXIvQzEuY2xhc3MKK0VuZCBvZiBmaWxlcworQ29tcGlsaW5nIGZpbGVzOgorc3JjL0MuamF2YQorc3JjL0MxLmphdmEKK0VuZCBvZiBmaWxlcwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvYW5ub3RhdGlvbnMvcmVtb3ZlRGVmYXVsdEZyb21Bbm5vdGF0aW9uTWVtYmVyL0EuamF2YS5uZXcgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9hbm5vdGF0aW9ucy9yZW1vdmVEZWZhdWx0RnJvbUFubm90YXRpb25NZW1iZXIvQS5qYXZhLm5ldwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44N2YxYjY0Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvYW5ub3RhdGlvbnMvcmVtb3ZlRGVmYXVsdEZyb21Bbm5vdGF0aW9uTWVtYmVyL0EuamF2YS5uZXcKQEAgLTAsMCArMSwzIEBACitwdWJsaWMgQGludGVyZmFjZSBBIHsKKyAgaW50IHZhbHVlKCk7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvYW5ub3RhdGlvbnMvcmVtb3ZlRGVmYXVsdEZyb21Bbm5vdGF0aW9uTWVtYmVyL3NyYy9BLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9hbm5vdGF0aW9ucy9yZW1vdmVEZWZhdWx0RnJvbUFubm90YXRpb25NZW1iZXIvc3JjL0EuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lY2FhMzE0Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvYW5ub3RhdGlvbnMvcmVtb3ZlRGVmYXVsdEZyb21Bbm5vdGF0aW9uTWVtYmVyL3NyYy9BLmphdmEKQEAgLTAsMCArMSwzIEBACitwdWJsaWMgQGludGVyZmFjZSBBIHsKKyAgaW50IHZhbHVlKCkgZGVmYXVsdCA3OworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2Fubm90YXRpb25zL3JlbW92ZURlZmF1bHRGcm9tQW5ub3RhdGlvbk1lbWJlci9zcmMvQy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvYW5ub3RhdGlvbnMvcmVtb3ZlRGVmYXVsdEZyb21Bbm5vdGF0aW9uTWVtYmVyL3NyYy9DLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzlmNTFjOAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2Fubm90YXRpb25zL3JlbW92ZURlZmF1bHRGcm9tQW5ub3RhdGlvbk1lbWJlci9zcmMvQy5qYXZhCkBAIC0wLDAgKzEsMyBAQAorQEEoKSAKK3B1YmxpYyBjbGFzcyBDIHsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9hbm5vdGF0aW9ucy9yZW1vdmVEZWZhdWx0RnJvbUFubm90YXRpb25NZW1iZXIvc3JjL0MxLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9hbm5vdGF0aW9ucy9yZW1vdmVEZWZhdWx0RnJvbUFubm90YXRpb25NZW1iZXIvc3JjL0MxLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTU3MzQ4OAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2Fubm90YXRpb25zL3JlbW92ZURlZmF1bHRGcm9tQW5ub3RhdGlvbk1lbWJlci9zcmMvQzEuamF2YQpAQCAtMCwwICsxLDYgQEAKK3B1YmxpYyBjbGFzcyBDMSB7CisKKyAgQEEoKQorICB2b2lkIGZvbygpIHsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2Fubm90YXRpb25zL3JlbW92ZURlZmF1bHRGcm9tQW5ub3RhdGlvbk1lbWJlci9zcmMvQzIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2Fubm90YXRpb25zL3JlbW92ZURlZmF1bHRGcm9tQW5ub3RhdGlvbk1lbWJlci9zcmMvQzIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNzc2MTU2YgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2Fubm90YXRpb25zL3JlbW92ZURlZmF1bHRGcm9tQW5ub3RhdGlvbk1lbWJlci9zcmMvQzIuamF2YQpAQCAtMCwwICsxLDUgQEAKK3B1YmxpYyBjbGFzcyBDMiB7CisKKyAgQEEoMzApIAorICBpbnQgZmllbGQ7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvY2hhbmdlTmFtZS9jaGFuZ2VDYXNlT2ZOYW1lL2J1aWxkLmxvZyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2NoYW5nZU5hbWUvY2hhbmdlQ2FzZU9mTmFtZS9idWlsZC5sb2cKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmIyODg2NwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2NoYW5nZU5hbWUvY2hhbmdlQ2FzZU9mTmFtZS9idWlsZC5sb2cKQEAgLTAsMCArMSw2IEBACitDbGVhbmluZyBvdXRwdXQgZmlsZXM6CitvdXQvcHJvZHVjdGlvbi9DaGFuZ2VDYXNlT2ZOYW1lL0EuY2xhc3MKK0VuZCBvZiBmaWxlcworQ29tcGlsaW5nIGZpbGVzOgorc3JjL2EuamF2YQorRW5kIG9mIGZpbGVzCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9jaGFuZ2VOYW1lL2NoYW5nZUNhc2VPZk5hbWUvc3JjL0EuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2NoYW5nZU5hbWUvY2hhbmdlQ2FzZU9mTmFtZS9zcmMvQS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYxZmYyYWIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9jaGFuZ2VOYW1lL2NoYW5nZUNhc2VPZk5hbWUvc3JjL0EuamF2YQpAQCAtMCwwICsxLDIgQEAKK3B1YmxpYyBjbGFzcyBBIHsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9jaGFuZ2VOYW1lL2NoYW5nZUNhc2VPZk5hbWUvc3JjL0EuamF2YS5yZW1vdmUgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9jaGFuZ2VOYW1lL2NoYW5nZUNhc2VPZk5hbWUvc3JjL0EuamF2YS5yZW1vdmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY5ZGUyOQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2NoYW5nZU5hbWUvY2hhbmdlQ2FzZU9mTmFtZS9zcmMvQS5qYXZhLnJlbW92ZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvY2hhbmdlTmFtZS9jaGFuZ2VDYXNlT2ZOYW1lL3NyYy9hLmphdmEubmV3IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvY2hhbmdlTmFtZS9jaGFuZ2VDYXNlT2ZOYW1lL3NyYy9hLmphdmEubmV3Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE1M2EzYjkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9jaGFuZ2VOYW1lL2NoYW5nZUNhc2VPZk5hbWUvc3JjL2EuamF2YS5uZXcKQEAgLTAsMCArMSwyIEBACitwdWJsaWMgY2xhc3MgYSB7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvY2hhbmdlTmFtZS9jaGFuZ2VDbGFzc05hbWUvQS5qYXZhLnJlbW92ZSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2NoYW5nZU5hbWUvY2hhbmdlQ2xhc3NOYW1lL0EuamF2YS5yZW1vdmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY5ZGUyOQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2NoYW5nZU5hbWUvY2hhbmdlQ2xhc3NOYW1lL0EuamF2YS5yZW1vdmUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2NoYW5nZU5hbWUvY2hhbmdlQ2xhc3NOYW1lL0IuamF2YS5uZXcgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9jaGFuZ2VOYW1lL2NoYW5nZUNsYXNzTmFtZS9CLmphdmEubmV3Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI1MzgzNGIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9jaGFuZ2VOYW1lL2NoYW5nZUNsYXNzTmFtZS9CLmphdmEubmV3CkBAIC0wLDAgKzEsMiBAQAorY2xhc3MgQiB7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvY2hhbmdlTmFtZS9jaGFuZ2VDbGFzc05hbWUvYnVpbGQubG9nIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvY2hhbmdlTmFtZS9jaGFuZ2VDbGFzc05hbWUvYnVpbGQubG9nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMyNzMxZDUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9jaGFuZ2VOYW1lL2NoYW5nZUNsYXNzTmFtZS9idWlsZC5sb2cKQEAgLTAsMCArMSw2IEBACitDbGVhbmluZyBvdXRwdXQgZmlsZXM6CitvdXQvcHJvZHVjdGlvbi9DaGFuZ2VDbGFzc05hbWUvQS5jbGFzcworRW5kIG9mIGZpbGVzCitDb21waWxpbmcgZmlsZXM6CitzcmMvQi5qYXZhCitFbmQgb2YgZmlsZXMKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2NoYW5nZU5hbWUvY2hhbmdlQ2xhc3NOYW1lL3NyYy9BLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9jaGFuZ2VOYW1lL2NoYW5nZUNsYXNzTmFtZS9zcmMvQS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE3Y2EyMmEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9jaGFuZ2VOYW1lL2NoYW5nZUNsYXNzTmFtZS9zcmMvQS5qYXZhCkBAIC0wLDAgKzEsMiBAQAorY2xhc3MgQSB7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvY2xhc3NNb2RpZmllcnMvYWRkU3RhdGljLmxvZyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2NsYXNzTW9kaWZpZXJzL2FkZFN0YXRpYy5sb2cKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGQ2M2NkZQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2NsYXNzTW9kaWZpZXJzL2FkZFN0YXRpYy5sb2cKQEAgLTAsMCArMSwxMyBAQAorQ2xlYW5pbmcgb3V0cHV0IGZpbGVzOgorb3V0L3Byb2R1Y3Rpb24vQWRkU3RhdGljL0EkQi5jbGFzcworb3V0L3Byb2R1Y3Rpb24vQWRkU3RhdGljL0EuY2xhc3MKK0VuZCBvZiBmaWxlcworQ29tcGlsaW5nIGZpbGVzOgorc3JjL0EuamF2YQorRW5kIG9mIGZpbGVzCitDbGVhbmluZyBvdXRwdXQgZmlsZXM6CitvdXQvcHJvZHVjdGlvbi9BZGRTdGF0aWMvQi5jbGFzcworRW5kIG9mIGZpbGVzCitDb21waWxpbmcgZmlsZXM6CitzcmMvQi5qYXZhCitFbmQgb2YgZmlsZXMKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2NsYXNzTW9kaWZpZXJzL2FkZFN0YXRpYy9BLmphdmEubmV3IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvY2xhc3NNb2RpZmllcnMvYWRkU3RhdGljL0EuamF2YS5uZXcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjUyNGZkZgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2NsYXNzTW9kaWZpZXJzL2FkZFN0YXRpYy9BLmphdmEubmV3CkBAIC0wLDAgKzEsMTUgQEAKK3B1YmxpYyBjbGFzcyBBIHsKKyAgICBpbnQgYTsKKworICAgIHB1YmxpYyBBIChpbnQgYSkgeworICAgICAgICB0aGlzLmEgPSBhOworICAgIH0KKworICAgIHB1YmxpYyBzdGF0aWMgY2xhc3MgQiB7CisgICAgICAgIGludCBiOworCisgICAgICAgIHB1YmxpYyBCIChpbnQgYikgeworICAgICAgICAgICAgdGhpcy5iID0gYjsKKyAgICAgICAgfQorICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9jbGFzc01vZGlmaWVycy9hZGRTdGF0aWMvc3JjL0EuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2NsYXNzTW9kaWZpZXJzL2FkZFN0YXRpYy9zcmMvQS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYwYzVhNmEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9jbGFzc01vZGlmaWVycy9hZGRTdGF0aWMvc3JjL0EuamF2YQpAQCAtMCwwICsxLDE1IEBACitwdWJsaWMgY2xhc3MgQSB7CisgICAgaW50IGE7CisKKyAgICBwdWJsaWMgQSAoaW50IGEpIHsKKyAgICAgICAgdGhpcy5hID0gYTsKKyAgICB9CisKKyAgICBwdWJsaWMgY2xhc3MgQiB7CisgICAgICAgIGludCBiOworCisgICAgICAgIHB1YmxpYyBCIChpbnQgYikgeworICAgICAgICAgICAgdGhpcy5iID0gYjsKKyAgICAgICAgfQorICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9jbGFzc01vZGlmaWVycy9hZGRTdGF0aWMvc3JjL0IuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2NsYXNzTW9kaWZpZXJzL2FkZFN0YXRpYy9zcmMvQi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRmMjYxZTQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9jbGFzc01vZGlmaWVycy9hZGRTdGF0aWMvc3JjL0IuamF2YQpAQCAtMCwwICsxLDUgQEAKK3B1YmxpYyBjbGFzcyBCIHsKKyAgICBwdWJsaWMgQS5CIGdldCAoKSB7CisgICAgICAgIHJldHVybiBuZXcgQSgxKS5uZXcgQigzKTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvY2xhc3NNb2RpZmllcnMvYWRkU3RhdGljL3NyYy9DLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9jbGFzc01vZGlmaWVycy9hZGRTdGF0aWMvc3JjL0MuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZmFkY2E0Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvY2xhc3NNb2RpZmllcnMvYWRkU3RhdGljL3NyYy9DLmphdmEKQEAgLTAsMCArMSw1IEBACitwdWJsaWMgY2xhc3MgQyB7CisgICAgcHVibGljIEEuQiBnZXQgKCkgeworICAgICAgICByZXR1cm4gbmV3IEIoKS5nZXQoKTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvY2xhc3NNb2RpZmllcnMvZGVjQWNjZXNzLmxvZyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2NsYXNzTW9kaWZpZXJzL2RlY0FjY2Vzcy5sb2cKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGQyMDQ5YwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2NsYXNzTW9kaWZpZXJzL2RlY0FjY2Vzcy5sb2cKQEAgLTAsMCArMSwxMiBAQAorQ2xlYW5pbmcgb3V0cHV0IGZpbGVzOgorb3V0L3Byb2R1Y3Rpb24vRGVjQWNjZXNzL2ltcGwvU2VydmljZS5jbGFzcworRW5kIG9mIGZpbGVzCitDb21waWxpbmcgZmlsZXM6CitzcmMvaW1wbC9TZXJ2aWNlLmphdmEKK0VuZCBvZiBmaWxlcworQ2xlYW5pbmcgb3V0cHV0IGZpbGVzOgorb3V0L3Byb2R1Y3Rpb24vRGVjQWNjZXNzL0NsaWVudC5jbGFzcworRW5kIG9mIGZpbGVzCitDb21waWxpbmcgZmlsZXM6CitzcmMvaW1wbC9DbGllbnQuamF2YQorRW5kIG9mIGZpbGVzCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9jbGFzc01vZGlmaWVycy9kZWNBY2Nlc3Mvc3JjL2ltcGwvQ2xpZW50LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9jbGFzc01vZGlmaWVycy9kZWNBY2Nlc3Mvc3JjL2ltcGwvQ2xpZW50LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGI1YmFkYgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2NsYXNzTW9kaWZpZXJzL2RlY0FjY2Vzcy9zcmMvaW1wbC9DbGllbnQuamF2YQpAQCAtMCwwICsxLDkgQEAKK2ltcG9ydCBpbXBsLlNlcnZpY2U7CisKK2ltcG9ydCBqYXZhLnNlY3VyaXR5LlByb3ZpZGVyOworCitjbGFzcyBDbGllbnQgeworICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisgICAgICBuZXcgU2VydmljZSgxMCk7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9jbGFzc01vZGlmaWVycy9kZWNBY2Nlc3Mvc3JjL2ltcGwvU2VydmljZS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvY2xhc3NNb2RpZmllcnMvZGVjQWNjZXNzL3NyYy9pbXBsL1NlcnZpY2UuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41M2M5ODZjCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvY2xhc3NNb2RpZmllcnMvZGVjQWNjZXNzL3NyYy9pbXBsL1NlcnZpY2UuamF2YQpAQCAtMCwwICsxLDQgQEAKK3BhY2thZ2UgaW1wbDsKK3B1YmxpYyBjbGFzcyBTZXJ2aWNleworICBwdWJsaWMgU2VydmljZShpbnQgYSl7fQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2NsYXNzTW9kaWZpZXJzL2RlY0FjY2Vzcy9zcmMvaW1wbC9TZXJ2aWNlLmphdmEubmV3IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvY2xhc3NNb2RpZmllcnMvZGVjQWNjZXNzL3NyYy9pbXBsL1NlcnZpY2UuamF2YS5uZXcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmRiM2M1MwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2NsYXNzTW9kaWZpZXJzL2RlY0FjY2Vzcy9zcmMvaW1wbC9TZXJ2aWNlLmphdmEubmV3CkBAIC0wLDAgKzEsNCBAQAorcGFja2FnZSBpbXBsOworY2xhc3MgU2VydmljZXsKKyAgcHVibGljIFNlcnZpY2UoaW50IGEpe30KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9jbGFzc01vZGlmaWVycy9kcm9wQWJzdHJhY3QubG9nIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvY2xhc3NNb2RpZmllcnMvZHJvcEFic3RyYWN0LmxvZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZDJiMzAyZAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2NsYXNzTW9kaWZpZXJzL2Ryb3BBYnN0cmFjdC5sb2cKQEAgLTAsMCArMSw2IEBACitDbGVhbmluZyBvdXRwdXQgZmlsZXM6CitvdXQvcHJvZHVjdGlvbi9Ecm9wQWJzdHJhY3QvQS5jbGFzcworRW5kIG9mIGZpbGVzCitDb21waWxpbmcgZmlsZXM6CitzcmMvQS5qYXZhCitFbmQgb2YgZmlsZXMKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2NsYXNzTW9kaWZpZXJzL2Ryb3BBYnN0cmFjdC9BLmphdmEubmV3IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvY2xhc3NNb2RpZmllcnMvZHJvcEFic3RyYWN0L0EuamF2YS5uZXcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjg4ZTk3YQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2NsYXNzTW9kaWZpZXJzL2Ryb3BBYnN0cmFjdC9BLmphdmEubmV3CkBAIC0wLDAgKzEsNSBAQAorcHVibGljIGNsYXNzIEEgeworICAgIGludCBmICgpIHsKKyAgICAgICByZXR1cm4gMDsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvY2xhc3NNb2RpZmllcnMvZHJvcEFic3RyYWN0L3NyYy9BLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9jbGFzc01vZGlmaWVycy9kcm9wQWJzdHJhY3Qvc3JjL0EuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMzdkYjA4Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvY2xhc3NNb2RpZmllcnMvZHJvcEFic3RyYWN0L3NyYy9BLmphdmEKQEAgLTAsMCArMSwxMCBAQAorLyoqCisgKiBDcmVhdGVkIGJ5IEludGVsbGlKIElERUEuCisgKiBVc2VyOiBkYgorICogRGF0ZTogMjEuMDkuMTEKKyAqIFRpbWU6IDIzOjU1CisgKiBUbyBjaGFuZ2UgdGhpcyB0ZW1wbGF0ZSB1c2UgRmlsZSB8IFNldHRpbmdzIHwgRmlsZSBUZW1wbGF0ZXMuCisgKi8KK3B1YmxpYyBhYnN0cmFjdCBjbGFzcyBBIHsKKyAgICBhYnN0cmFjdCBpbnQgZiAoKTsKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2NsYXNzTW9kaWZpZXJzL2Ryb3BBYnN0cmFjdC9zcmMvQi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvY2xhc3NNb2RpZmllcnMvZHJvcEFic3RyYWN0L3NyYy9CLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODg1ZDYwMAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2NsYXNzTW9kaWZpZXJzL2Ryb3BBYnN0cmFjdC9zcmMvQi5qYXZhCkBAIC0wLDAgKzEsOSBAQAorLyoqCisgKiBDcmVhdGVkIGJ5IEludGVsbGlKIElERUEuCisgKiBVc2VyOiBkYgorICogRGF0ZTogMjEuMDkuMTEKKyAqIFRpbWU6IDIzOjU2CisgKiBUbyBjaGFuZ2UgdGhpcyB0ZW1wbGF0ZSB1c2UgRmlsZSB8IFNldHRpbmdzIHwgRmlsZSBUZW1wbGF0ZXMuCisgKi8KK3B1YmxpYyBhYnN0cmFjdCBjbGFzcyBCIGV4dGVuZHMgQSB7Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9jbGFzc01vZGlmaWVycy9kcm9wQWJzdHJhY3Qvc3JjL0MuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2NsYXNzTW9kaWZpZXJzL2Ryb3BBYnN0cmFjdC9zcmMvQy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZmNzM3ODMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9jbGFzc01vZGlmaWVycy9kcm9wQWJzdHJhY3Qvc3JjL0MuamF2YQpAQCAtMCwwICsxLDEwIEBACisvKioKKyAqIENyZWF0ZWQgYnkgSW50ZWxsaUogSURFQS4KKyAqIFVzZXI6IGRiCisgKiBEYXRlOiAyMS4wOS4xMQorICogVGltZTogMjM6NTYKKyAqIFRvIGNoYW5nZSB0aGlzIHRlbXBsYXRlIHVzZSBGaWxlIHwgU2V0dGluZ3MgfCBGaWxlIFRlbXBsYXRlcy4KKyAqLworcHVibGljIGFic3RyYWN0IGNsYXNzIEMgZXh0ZW5kcyBBIHsKKyAgICBhYnN0cmFjdCBpbnQgZygpOworfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvY2xhc3NNb2RpZmllcnMvZHJvcEFic3RyYWN0L3NyYy9NLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9jbGFzc01vZGlmaWVycy9kcm9wQWJzdHJhY3Qvc3JjL00uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZTA4YzU1Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvY2xhc3NNb2RpZmllcnMvZHJvcEFic3RyYWN0L3NyYy9NLmphdmEKQEAgLTAsMCArMSwxMiBAQAorLyoqCisgKiBDcmVhdGVkIGJ5IEludGVsbGlKIElERUEuCisgKiBVc2VyOiBkYgorICogRGF0ZTogMjEuMDkuMTEKKyAqIFRpbWU6IDIzOjU3CisgKiBUbyBjaGFuZ2UgdGhpcyB0ZW1wbGF0ZSB1c2UgRmlsZSB8IFNldHRpbmdzIHwgRmlsZSBUZW1wbGF0ZXMuCisgKi8KK3B1YmxpYyBjbGFzcyBNIHsKKyAgICBwdWJsaWMgaW50IGcgKGZpbmFsIEEgYSwgZmluYWwgQiBiLCBmaW5hbCBDIGMpeworICAgICAgICByZXR1cm4gYS5mKCkgKyBiLmYoKSArIGMuZigpICsgYy5nKCk7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvY2xhc3NNb2RpZmllcnMvcmVtb3ZlU3RhdGljLmxvZyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2NsYXNzTW9kaWZpZXJzL3JlbW92ZVN0YXRpYy5sb2cKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjdlMjVhOAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2NsYXNzTW9kaWZpZXJzL3JlbW92ZVN0YXRpYy5sb2cKQEAgLTAsMCArMSwxMyBAQAorQ2xlYW5pbmcgb3V0cHV0IGZpbGVzOgorb3V0L3Byb2R1Y3Rpb24vUmVtb3ZlU3RhdGljL0EkQi5jbGFzcworb3V0L3Byb2R1Y3Rpb24vUmVtb3ZlU3RhdGljL0EuY2xhc3MKK0VuZCBvZiBmaWxlcworQ29tcGlsaW5nIGZpbGVzOgorc3JjL0EuamF2YQorRW5kIG9mIGZpbGVzCitDbGVhbmluZyBvdXRwdXQgZmlsZXM6CitvdXQvcHJvZHVjdGlvbi9SZW1vdmVTdGF0aWMvQi5jbGFzcworRW5kIG9mIGZpbGVzCitDb21waWxpbmcgZmlsZXM6CitzcmMvQi5qYXZhCitFbmQgb2YgZmlsZXMKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2NsYXNzTW9kaWZpZXJzL3JlbW92ZVN0YXRpYy9BLmphdmEubmV3IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvY2xhc3NNb2RpZmllcnMvcmVtb3ZlU3RhdGljL0EuamF2YS5uZXcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjBjNWE2YQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2NsYXNzTW9kaWZpZXJzL3JlbW92ZVN0YXRpYy9BLmphdmEubmV3CkBAIC0wLDAgKzEsMTUgQEAKK3B1YmxpYyBjbGFzcyBBIHsKKyAgICBpbnQgYTsKKworICAgIHB1YmxpYyBBIChpbnQgYSkgeworICAgICAgICB0aGlzLmEgPSBhOworICAgIH0KKworICAgIHB1YmxpYyBjbGFzcyBCIHsKKyAgICAgICAgaW50IGI7CisKKyAgICAgICAgcHVibGljIEIgKGludCBiKSB7CisgICAgICAgICAgICB0aGlzLmIgPSBiOworICAgICAgICB9CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2NsYXNzTW9kaWZpZXJzL3JlbW92ZVN0YXRpYy9zcmMvQS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvY2xhc3NNb2RpZmllcnMvcmVtb3ZlU3RhdGljL3NyYy9BLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjUyNGZkZgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2NsYXNzTW9kaWZpZXJzL3JlbW92ZVN0YXRpYy9zcmMvQS5qYXZhCkBAIC0wLDAgKzEsMTUgQEAKK3B1YmxpYyBjbGFzcyBBIHsKKyAgICBpbnQgYTsKKworICAgIHB1YmxpYyBBIChpbnQgYSkgeworICAgICAgICB0aGlzLmEgPSBhOworICAgIH0KKworICAgIHB1YmxpYyBzdGF0aWMgY2xhc3MgQiB7CisgICAgICAgIGludCBiOworCisgICAgICAgIHB1YmxpYyBCIChpbnQgYikgeworICAgICAgICAgICAgdGhpcy5iID0gYjsKKyAgICAgICAgfQorICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9jbGFzc01vZGlmaWVycy9yZW1vdmVTdGF0aWMvc3JjL0IuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2NsYXNzTW9kaWZpZXJzL3JlbW92ZVN0YXRpYy9zcmMvQi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZlY2M1NzIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9jbGFzc01vZGlmaWVycy9yZW1vdmVTdGF0aWMvc3JjL0IuamF2YQpAQCAtMCwwICsxLDUgQEAKK3B1YmxpYyBjbGFzcyBCIHsKKyAgICBwdWJsaWMgQS5CIGdldCAoKSB7CisgICAgICAgIHJldHVybiBuZXcgQS5CKDMpOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9jbGFzc01vZGlmaWVycy9yZW1vdmVTdGF0aWMvc3JjL0MuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2NsYXNzTW9kaWZpZXJzL3JlbW92ZVN0YXRpYy9zcmMvQy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFmYWRjYTQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9jbGFzc01vZGlmaWVycy9yZW1vdmVTdGF0aWMvc3JjL0MuamF2YQpAQCAtMCwwICsxLDUgQEAKK3B1YmxpYyBjbGFzcyBDIHsKKyAgICBwdWJsaWMgQS5CIGdldCAoKSB7CisgICAgICAgIHJldHVybiBuZXcgQigpLmdldCgpOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9jbGFzc01vZGlmaWVycy9zZXRBYnN0cmFjdC5sb2cgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9jbGFzc01vZGlmaWVycy9zZXRBYnN0cmFjdC5sb2cKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODBiMGZmZgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2NsYXNzTW9kaWZpZXJzL3NldEFic3RyYWN0LmxvZwpAQCAtMCwwICsxLDEyIEBACitDbGVhbmluZyBvdXRwdXQgZmlsZXM6CitvdXQvcHJvZHVjdGlvbi9TZXRBYnN0cmFjdC9TZXJ2aWNlLmNsYXNzCitFbmQgb2YgZmlsZXMKK0NvbXBpbGluZyBmaWxlczoKK3NyYy9TZXJ2aWNlLmphdmEKK0VuZCBvZiBmaWxlcworQ2xlYW5pbmcgb3V0cHV0IGZpbGVzOgorb3V0L3Byb2R1Y3Rpb24vU2V0QWJzdHJhY3QvQ2xpZW50LmNsYXNzCitFbmQgb2YgZmlsZXMKK0NvbXBpbGluZyBmaWxlczoKK3NyYy9DbGllbnQuamF2YQorRW5kIG9mIGZpbGVzCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9jbGFzc01vZGlmaWVycy9zZXRBYnN0cmFjdC9TZXJ2aWNlLmphdmEubmV3IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvY2xhc3NNb2RpZmllcnMvc2V0QWJzdHJhY3QvU2VydmljZS5qYXZhLm5ldwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNTNmZjAyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvY2xhc3NNb2RpZmllcnMvc2V0QWJzdHJhY3QvU2VydmljZS5qYXZhLm5ldwpAQCAtMCwwICsxLDMgQEAKK3B1YmxpYyBhYnN0cmFjdCBjbGFzcyBTZXJ2aWNleworICBwdWJsaWMgdm9pZCBmb28oKSB7fQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2NsYXNzTW9kaWZpZXJzL3NldEFic3RyYWN0L3NyYy9DbGllbnQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2NsYXNzTW9kaWZpZXJzL3NldEFic3RyYWN0L3NyYy9DbGllbnQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YjBlYTdmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvY2xhc3NNb2RpZmllcnMvc2V0QWJzdHJhY3Qvc3JjL0NsaWVudC5qYXZhCkBAIC0wLDAgKzEsNiBAQAorY2xhc3MgQ2xpZW50IHsKKyAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworICAgIFNlcnZpY2Ugc2VydmljZSA9IG5ldyBTZXJ2aWNlKCk7CisgICAgc2VydmljZS5mb28oKTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2NsYXNzTW9kaWZpZXJzL3NldEFic3RyYWN0L3NyYy9OLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9jbGFzc01vZGlmaWVycy9zZXRBYnN0cmFjdC9zcmMvTi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY4NzFjZmYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9jbGFzc01vZGlmaWVycy9zZXRBYnN0cmFjdC9zcmMvTi5qYXZhCkBAIC0wLDAgKzEsNSBAQAorY2xhc3MgTiB7CisgICAgdm9pZCBmIChTZXJ2aWNlIHMpIHsKKyAgICAgICAgcy5mb28gKCk7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2NsYXNzTW9kaWZpZXJzL3NldEFic3RyYWN0L3NyYy9TZXJ2aWNlLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9jbGFzc01vZGlmaWVycy9zZXRBYnN0cmFjdC9zcmMvU2VydmljZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE2YTc2ZmUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9jbGFzc01vZGlmaWVycy9zZXRBYnN0cmFjdC9zcmMvU2VydmljZS5qYXZhCkBAIC0wLDAgKzEsMyBAQAorcHVibGljIGNsYXNzIFNlcnZpY2V7CisgIHB1YmxpYyB2b2lkIGZvbygpIHt9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvY2xhc3NNb2RpZmllcnMvc2V0RmluYWwubG9nIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvY2xhc3NNb2RpZmllcnMvc2V0RmluYWwubG9nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAwOTkyMDkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9jbGFzc01vZGlmaWVycy9zZXRGaW5hbC5sb2cKQEAgLTAsMCArMSwxMiBAQAorQ2xlYW5pbmcgb3V0cHV0IGZpbGVzOgorb3V0L3Byb2R1Y3Rpb24vU2V0RmluYWwvU2VydmljZS5jbGFzcworRW5kIG9mIGZpbGVzCitDb21waWxpbmcgZmlsZXM6CitzcmMvU2VydmljZS5qYXZhCitFbmQgb2YgZmlsZXMKK0NsZWFuaW5nIG91dHB1dCBmaWxlczoKK291dC9wcm9kdWN0aW9uL1NldEZpbmFsL1N1YlNlcnZpY2UuY2xhc3MKK0VuZCBvZiBmaWxlcworQ29tcGlsaW5nIGZpbGVzOgorc3JjL1N1YlNlcnZpY2UuamF2YQorRW5kIG9mIGZpbGVzCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9jbGFzc01vZGlmaWVycy9zZXRGaW5hbC9TZXJ2aWNlLmphdmEubmV3IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvY2xhc3NNb2RpZmllcnMvc2V0RmluYWwvU2VydmljZS5qYXZhLm5ldwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZTViYzk3Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvY2xhc3NNb2RpZmllcnMvc2V0RmluYWwvU2VydmljZS5qYXZhLm5ldwpAQCAtMCwwICsxLDMgQEAKK3B1YmxpYyBmaW5hbCBjbGFzcyBTZXJ2aWNleworICBwdWJsaWMgdm9pZCBmb28oKSB7fQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2NsYXNzTW9kaWZpZXJzL3NldEZpbmFsL3NyYy9TZXJ2aWNlLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9jbGFzc01vZGlmaWVycy9zZXRGaW5hbC9zcmMvU2VydmljZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE2YTc2ZmUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9jbGFzc01vZGlmaWVycy9zZXRGaW5hbC9zcmMvU2VydmljZS5qYXZhCkBAIC0wLDAgKzEsMyBAQAorcHVibGljIGNsYXNzIFNlcnZpY2V7CisgIHB1YmxpYyB2b2lkIGZvbygpIHt9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvY2xhc3NNb2RpZmllcnMvc2V0RmluYWwvc3JjL1N1YlNlcnZpY2UuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2NsYXNzTW9kaWZpZXJzL3NldEZpbmFsL3NyYy9TdWJTZXJ2aWNlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTAwZmUxOAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2NsYXNzTW9kaWZpZXJzL3NldEZpbmFsL3NyYy9TdWJTZXJ2aWNlLmphdmEKQEAgLTAsMCArMSwyIEBACitwdWJsaWMgY2xhc3MgU3ViU2VydmljZSBleHRlbmRzIFNlcnZpY2UgeworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2NsYXNzTW9kaWZpZXJzL3NldEZpbmFsMS5sb2cgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9jbGFzc01vZGlmaWVycy9zZXRGaW5hbDEubG9nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFiZGNjMTAKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9jbGFzc01vZGlmaWVycy9zZXRGaW5hbDEubG9nCkBAIC0wLDAgKzEsMTIgQEAKK0NsZWFuaW5nIG91dHB1dCBmaWxlczoKK291dC9wcm9kdWN0aW9uL1NldEZpbmFsMS9BLmNsYXNzCitFbmQgb2YgZmlsZXMKK0NvbXBpbGluZyBmaWxlczoKK3NyYy9BLmphdmEKK0VuZCBvZiBmaWxlcworQ2xlYW5pbmcgb3V0cHV0IGZpbGVzOgorb3V0L3Byb2R1Y3Rpb24vU2V0RmluYWwxL0IuY2xhc3MKK0VuZCBvZiBmaWxlcworQ29tcGlsaW5nIGZpbGVzOgorc3JjL0IuamF2YQorRW5kIG9mIGZpbGVzCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9jbGFzc01vZGlmaWVycy9zZXRGaW5hbDEvQS5qYXZhLm5ldyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2NsYXNzTW9kaWZpZXJzL3NldEZpbmFsMS9BLmphdmEubmV3Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM5NzM5NDkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9jbGFzc01vZGlmaWVycy9zZXRGaW5hbDEvQS5qYXZhLm5ldwpAQCAtMCwwICsxLDIgQEAKK3B1YmxpYyBmaW5hbCBjbGFzcyBBIHsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9jbGFzc01vZGlmaWVycy9zZXRGaW5hbDEvc3JjL0EuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2NsYXNzTW9kaWZpZXJzL3NldEZpbmFsMS9zcmMvQS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYxZmYyYWIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9jbGFzc01vZGlmaWVycy9zZXRGaW5hbDEvc3JjL0EuamF2YQpAQCAtMCwwICsxLDIgQEAKK3B1YmxpYyBjbGFzcyBBIHsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9jbGFzc01vZGlmaWVycy9zZXRGaW5hbDEvc3JjL0IuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2NsYXNzTW9kaWZpZXJzL3NldEZpbmFsMS9zcmMvQi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE3NGNlYTkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9jbGFzc01vZGlmaWVycy9zZXRGaW5hbDEvc3JjL0IuamF2YQpAQCAtMCwwICsxLDkgQEAKK3B1YmxpYyBjbGFzcyBCIHsKKyAgdm9pZCBmb28oKSB7CisgICAgQSBhID0gYmFyKCk7CisgICAgaWYgKGEgaW5zdGFuY2VvZiBJKSB7CisgICAgfQorICB9CisKKyAgQSBiYXIoKSB7cmV0dXJuIG51bGw7fQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2NsYXNzTW9kaWZpZXJzL3NldEZpbmFsMS9zcmMvSS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvY2xhc3NNb2RpZmllcnMvc2V0RmluYWwxL3NyYy9JLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzlmMWIyNQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2NsYXNzTW9kaWZpZXJzL3NldEZpbmFsMS9zcmMvSS5qYXZhCkBAIC0wLDAgKzEsMiBAQAorcHVibGljIGludGVyZmFjZSBJIHsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9jbGFzc1Byb3BlcnRpZXMvYWRkRXh0ZW5kcy5sb2cgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9jbGFzc1Byb3BlcnRpZXMvYWRkRXh0ZW5kcy5sb2cKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTk0ZmE1MAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2NsYXNzUHJvcGVydGllcy9hZGRFeHRlbmRzLmxvZwpAQCAtMCwwICsxLDE0IEBACitDbGVhbmluZyBvdXRwdXQgZmlsZXM6CitvdXQvcHJvZHVjdGlvbi9BZGRFeHRlbmRzL1N1cGVyLmNsYXNzCitFbmQgb2YgZmlsZXMKK0NvbXBpbGluZyBmaWxlczoKK3NyYy9TdXBlci5qYXZhCitFbmQgb2YgZmlsZXMKK0NsZWFuaW5nIG91dHB1dCBmaWxlczoKK291dC9wcm9kdWN0aW9uL0FkZEV4dGVuZHMvQ2xpZW50Mi5jbGFzcworb3V0L3Byb2R1Y3Rpb24vQWRkRXh0ZW5kcy9DbGllbnQzLmNsYXNzCitFbmQgb2YgZmlsZXMKK0NvbXBpbGluZyBmaWxlczoKK3NyYy9DbGllbnQyLmphdmEKK3NyYy9DbGllbnQzLmphdmEKK0VuZCBvZiBmaWxlcwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvY2xhc3NQcm9wZXJ0aWVzL2FkZEV4dGVuZHMvU3VwZXIuamF2YS5uZXcgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9jbGFzc1Byb3BlcnRpZXMvYWRkRXh0ZW5kcy9TdXBlci5qYXZhLm5ldwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ODQ0OWEzCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvY2xhc3NQcm9wZXJ0aWVzL2FkZEV4dGVuZHMvU3VwZXIuamF2YS5uZXcKQEAgLTAsMCArMSwzIEBACitjbGFzcyBTdXBlciBleHRlbmRzIEh5cGVyIHsKKyAgY2hhciBzID0gJ3MnOworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2NsYXNzUHJvcGVydGllcy9hZGRFeHRlbmRzL3NyYy9DbGllbnQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2NsYXNzUHJvcGVydGllcy9hZGRFeHRlbmRzL3NyYy9DbGllbnQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zN2RlYTc2Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvY2xhc3NQcm9wZXJ0aWVzL2FkZEV4dGVuZHMvc3JjL0NsaWVudC5qYXZhCkBAIC0wLDAgKzEsNSBAQAorY2xhc3MgQ2xpZW50IHsKKyAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworICAgIG5ldyBTdXBlcigpOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvY2xhc3NQcm9wZXJ0aWVzL2FkZEV4dGVuZHMvc3JjL0NsaWVudDIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2NsYXNzUHJvcGVydGllcy9hZGRFeHRlbmRzL3NyYy9DbGllbnQyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODkwMGQwMgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2NsYXNzUHJvcGVydGllcy9hZGRFeHRlbmRzL3NyYy9DbGllbnQyLmphdmEKQEAgLTAsMCArMSw0IEBACitjbGFzcyBDbGllbnQyIGV4dGVuZHMgU3VwZXIgeworICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9jbGFzc1Byb3BlcnRpZXMvYWRkRXh0ZW5kcy9zcmMvQ2xpZW50My5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvY2xhc3NQcm9wZXJ0aWVzL2FkZEV4dGVuZHMvc3JjL0NsaWVudDMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NzNmZDg0Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvY2xhc3NQcm9wZXJ0aWVzL2FkZEV4dGVuZHMvc3JjL0NsaWVudDMuamF2YQpAQCAtMCwwICsxLDQgQEAKK2NsYXNzIENsaWVudDMgZXh0ZW5kcyBDbGllbnQyIHsKKyAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvY2xhc3NQcm9wZXJ0aWVzL2FkZEV4dGVuZHMvc3JjL0h5cGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9jbGFzc1Byb3BlcnRpZXMvYWRkRXh0ZW5kcy9zcmMvSHlwZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOWUyZDc4Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvY2xhc3NQcm9wZXJ0aWVzL2FkZEV4dGVuZHMvc3JjL0h5cGVyLmphdmEKQEAgLTAsMCArMSwzIEBACitjbGFzcyBIeXBlciB7CisgIGNoYXIgaCA9ICdoJzsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9jbGFzc1Byb3BlcnRpZXMvYWRkRXh0ZW5kcy9zcmMvU3VwZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2NsYXNzUHJvcGVydGllcy9hZGRFeHRlbmRzL3NyYy9TdXBlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdlMmU1ZTAKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9jbGFzc1Byb3BlcnRpZXMvYWRkRXh0ZW5kcy9zcmMvU3VwZXIuamF2YQpAQCAtMCwwICsxLDMgQEAKK2NsYXNzIFN1cGVyIHsKKyAgY2hhciBzID0gJ3MnOworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2NsYXNzUHJvcGVydGllcy9hZGRJbXBsZW1lbnRzLmxvZyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2NsYXNzUHJvcGVydGllcy9hZGRJbXBsZW1lbnRzLmxvZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZjNkNjYzCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvY2xhc3NQcm9wZXJ0aWVzL2FkZEltcGxlbWVudHMubG9nCkBAIC0wLDAgKzEsMTQgQEAKK0NsZWFuaW5nIG91dHB1dCBmaWxlczoKK291dC9wcm9kdWN0aW9uL0FkZEltcGxlbWVudHMvU3VwZXIuY2xhc3MKK0VuZCBvZiBmaWxlcworQ29tcGlsaW5nIGZpbGVzOgorc3JjL1N1cGVyLmphdmEKK0VuZCBvZiBmaWxlcworQ2xlYW5pbmcgb3V0cHV0IGZpbGVzOgorb3V0L3Byb2R1Y3Rpb24vQWRkSW1wbGVtZW50cy9DbGllbnQyLmNsYXNzCitvdXQvcHJvZHVjdGlvbi9BZGRJbXBsZW1lbnRzL0NsaWVudDMuY2xhc3MKK0VuZCBvZiBmaWxlcworQ29tcGlsaW5nIGZpbGVzOgorc3JjL0NsaWVudDIuamF2YQorc3JjL0NsaWVudDMuamF2YQorRW5kIG9mIGZpbGVzCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9jbGFzc1Byb3BlcnRpZXMvYWRkSW1wbGVtZW50cy9TdXBlci5qYXZhLm5ldyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2NsYXNzUHJvcGVydGllcy9hZGRJbXBsZW1lbnRzL1N1cGVyLmphdmEubmV3Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMxNDI4OWIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9jbGFzc1Byb3BlcnRpZXMvYWRkSW1wbGVtZW50cy9TdXBlci5qYXZhLm5ldwpAQCAtMCwwICsxLDMgQEAKK2NsYXNzIFN1cGVyIGltcGxlbWVudHMgSHlwZXIgeworICBjaGFyIHMgPSAncyc7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvY2xhc3NQcm9wZXJ0aWVzL2FkZEltcGxlbWVudHMvc3JjL0NsaWVudC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvY2xhc3NQcm9wZXJ0aWVzL2FkZEltcGxlbWVudHMvc3JjL0NsaWVudC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM3ZGVhNzYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9jbGFzc1Byb3BlcnRpZXMvYWRkSW1wbGVtZW50cy9zcmMvQ2xpZW50LmphdmEKQEAgLTAsMCArMSw1IEBACitjbGFzcyBDbGllbnQgeworICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisgICAgbmV3IFN1cGVyKCk7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9jbGFzc1Byb3BlcnRpZXMvYWRkSW1wbGVtZW50cy9zcmMvQ2xpZW50Mi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvY2xhc3NQcm9wZXJ0aWVzL2FkZEltcGxlbWVudHMvc3JjL0NsaWVudDIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OTAwZDAyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvY2xhc3NQcm9wZXJ0aWVzL2FkZEltcGxlbWVudHMvc3JjL0NsaWVudDIuamF2YQpAQCAtMCwwICsxLDQgQEAKK2NsYXNzIENsaWVudDIgZXh0ZW5kcyBTdXBlciB7CisgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2NsYXNzUHJvcGVydGllcy9hZGRJbXBsZW1lbnRzL3NyYy9DbGllbnQzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9jbGFzc1Byb3BlcnRpZXMvYWRkSW1wbGVtZW50cy9zcmMvQ2xpZW50My5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY3M2ZkODQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9jbGFzc1Byb3BlcnRpZXMvYWRkSW1wbGVtZW50cy9zcmMvQ2xpZW50My5qYXZhCkBAIC0wLDAgKzEsNCBAQAorY2xhc3MgQ2xpZW50MyBleHRlbmRzIENsaWVudDIgeworICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9jbGFzc1Byb3BlcnRpZXMvYWRkSW1wbGVtZW50cy9zcmMvSHlwZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2NsYXNzUHJvcGVydGllcy9hZGRJbXBsZW1lbnRzL3NyYy9IeXBlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYyMGM4OGQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9jbGFzc1Byb3BlcnRpZXMvYWRkSW1wbGVtZW50cy9zcmMvSHlwZXIuamF2YQpAQCAtMCwwICsxLDIgQEAKK2ludGVyZmFjZSBIeXBlciB7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvY2xhc3NQcm9wZXJ0aWVzL2FkZEltcGxlbWVudHMvc3JjL1N1cGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9jbGFzc1Byb3BlcnRpZXMvYWRkSW1wbGVtZW50cy9zcmMvU3VwZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZTJlNWUwCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvY2xhc3NQcm9wZXJ0aWVzL2FkZEltcGxlbWVudHMvc3JjL1N1cGVyLmphdmEKQEAgLTAsMCArMSwzIEBACitjbGFzcyBTdXBlciB7CisgIGNoYXIgcyA9ICdzJzsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9jbGFzc1Byb3BlcnRpZXMvY2hhbmdlRXh0ZW5kcy5sb2cgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9jbGFzc1Byb3BlcnRpZXMvY2hhbmdlRXh0ZW5kcy5sb2cKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGNiYTA0MAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2NsYXNzUHJvcGVydGllcy9jaGFuZ2VFeHRlbmRzLmxvZwpAQCAtMCwwICsxLDE2IEBACitDbGVhbmluZyBvdXRwdXQgZmlsZXM6CitvdXQvcHJvZHVjdGlvbi9DaGFuZ2VFeHRlbmRzL1N1cGVyLmNsYXNzCitFbmQgb2YgZmlsZXMKK0NvbXBpbGluZyBmaWxlczoKK3NyYy9TdXBlci5qYXZhCitFbmQgb2YgZmlsZXMKK0NsZWFuaW5nIG91dHB1dCBmaWxlczoKK291dC9wcm9kdWN0aW9uL0NoYW5nZUV4dGVuZHMvQ2xpZW50LmNsYXNzCitvdXQvcHJvZHVjdGlvbi9DaGFuZ2VFeHRlbmRzL0NsaWVudDIuY2xhc3MKK291dC9wcm9kdWN0aW9uL0NoYW5nZUV4dGVuZHMvQ2xpZW50My5jbGFzcworRW5kIG9mIGZpbGVzCitDb21waWxpbmcgZmlsZXM6CitzcmMvQ2xpZW50LmphdmEKK3NyYy9DbGllbnQyLmphdmEKK3NyYy9DbGllbnQzLmphdmEKK0VuZCBvZiBmaWxlcwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvY2xhc3NQcm9wZXJ0aWVzL2NoYW5nZUV4dGVuZHMvU3VwZXIuamF2YS5uZXcgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9jbGFzc1Byb3BlcnRpZXMvY2hhbmdlRXh0ZW5kcy9TdXBlci5qYXZhLm5ldwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZGU0OTJjCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvY2xhc3NQcm9wZXJ0aWVzL2NoYW5nZUV4dGVuZHMvU3VwZXIuamF2YS5uZXcKQEAgLTAsMCArMSwzIEBACitjbGFzcyBTdXBlciBleHRlbmRzIEFub3RoZXJIeXBlciB7CisgIGNoYXIgcyA9ICdzJzsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9jbGFzc1Byb3BlcnRpZXMvY2hhbmdlRXh0ZW5kcy9zcmMvQW5vdGhlckh5cGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9jbGFzc1Byb3BlcnRpZXMvY2hhbmdlRXh0ZW5kcy9zcmMvQW5vdGhlckh5cGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzNlNTBkOAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2NsYXNzUHJvcGVydGllcy9jaGFuZ2VFeHRlbmRzL3NyYy9Bbm90aGVySHlwZXIuamF2YQpAQCAtMCwwICsxLDIgQEAKK2NsYXNzIEFub3RoZXJIeXBlciB7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvY2xhc3NQcm9wZXJ0aWVzL2NoYW5nZUV4dGVuZHMvc3JjL0NsaWVudC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvY2xhc3NQcm9wZXJ0aWVzL2NoYW5nZUV4dGVuZHMvc3JjL0NsaWVudC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM3ZGVhNzYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9jbGFzc1Byb3BlcnRpZXMvY2hhbmdlRXh0ZW5kcy9zcmMvQ2xpZW50LmphdmEKQEAgLTAsMCArMSw1IEBACitjbGFzcyBDbGllbnQgeworICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisgICAgbmV3IFN1cGVyKCk7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9jbGFzc1Byb3BlcnRpZXMvY2hhbmdlRXh0ZW5kcy9zcmMvQ2xpZW50Mi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvY2xhc3NQcm9wZXJ0aWVzL2NoYW5nZUV4dGVuZHMvc3JjL0NsaWVudDIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OTAwZDAyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvY2xhc3NQcm9wZXJ0aWVzL2NoYW5nZUV4dGVuZHMvc3JjL0NsaWVudDIuamF2YQpAQCAtMCwwICsxLDQgQEAKK2NsYXNzIENsaWVudDIgZXh0ZW5kcyBTdXBlciB7CisgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2NsYXNzUHJvcGVydGllcy9jaGFuZ2VFeHRlbmRzL3NyYy9DbGllbnQzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9jbGFzc1Byb3BlcnRpZXMvY2hhbmdlRXh0ZW5kcy9zcmMvQ2xpZW50My5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY3M2ZkODQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9jbGFzc1Byb3BlcnRpZXMvY2hhbmdlRXh0ZW5kcy9zcmMvQ2xpZW50My5qYXZhCkBAIC0wLDAgKzEsNCBAQAorY2xhc3MgQ2xpZW50MyBleHRlbmRzIENsaWVudDIgeworICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9jbGFzc1Byb3BlcnRpZXMvY2hhbmdlRXh0ZW5kcy9zcmMvSHlwZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2NsYXNzUHJvcGVydGllcy9jaGFuZ2VFeHRlbmRzL3NyYy9IeXBlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM5ZTJkNzgKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9jbGFzc1Byb3BlcnRpZXMvY2hhbmdlRXh0ZW5kcy9zcmMvSHlwZXIuamF2YQpAQCAtMCwwICsxLDMgQEAKK2NsYXNzIEh5cGVyIHsKKyAgY2hhciBoID0gJ2gnOworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2NsYXNzUHJvcGVydGllcy9jaGFuZ2VFeHRlbmRzL3NyYy9TdXBlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvY2xhc3NQcm9wZXJ0aWVzL2NoYW5nZUV4dGVuZHMvc3JjL1N1cGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTg0NDlhMwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2NsYXNzUHJvcGVydGllcy9jaGFuZ2VFeHRlbmRzL3NyYy9TdXBlci5qYXZhCkBAIC0wLDAgKzEsMyBAQAorY2xhc3MgU3VwZXIgZXh0ZW5kcyBIeXBlciB7CisgIGNoYXIgcyA9ICdzJzsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9jbGFzc1Byb3BlcnRpZXMvY2hhbmdlRXh0ZW5kczIubG9nIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvY2xhc3NQcm9wZXJ0aWVzL2NoYW5nZUV4dGVuZHMyLmxvZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMGYyMmU0Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvY2xhc3NQcm9wZXJ0aWVzL2NoYW5nZUV4dGVuZHMyLmxvZwpAQCAtMCwwICsxLDEzIEBACitDbGVhbmluZyBvdXRwdXQgZmlsZXM6CitvdXQvcHJvZHVjdGlvbi9DaGFuZ2VFeHRlbmRzMi9WaWN0aW0kU3ViVmljdGltLmNsYXNzCitvdXQvcHJvZHVjdGlvbi9DaGFuZ2VFeHRlbmRzMi9WaWN0aW0uY2xhc3MKK0VuZCBvZiBmaWxlcworQ29tcGlsaW5nIGZpbGVzOgorc3JjL1ZpY3RpbS5qYXZhCitFbmQgb2YgZmlsZXMKK0NsZWFuaW5nIG91dHB1dCBmaWxlczoKK291dC9wcm9kdWN0aW9uL0NoYW5nZUV4dGVuZHMyL01haW4uY2xhc3MKK0VuZCBvZiBmaWxlcworQ29tcGlsaW5nIGZpbGVzOgorc3JjL01haW4uamF2YQorRW5kIG9mIGZpbGVzCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9jbGFzc1Byb3BlcnRpZXMvY2hhbmdlRXh0ZW5kczIvVmljdGltLmphdmEubmV3IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvY2xhc3NQcm9wZXJ0aWVzL2NoYW5nZUV4dGVuZHMyL1ZpY3RpbS5qYXZhLm5ldwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hN2M1YzJlCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvY2xhc3NQcm9wZXJ0aWVzL2NoYW5nZUV4dGVuZHMyL1ZpY3RpbS5qYXZhLm5ldwpAQCAtMCwwICsxLDEyIEBACisvKioKKyAqIENyZWF0ZWQgd2l0aCBJbnRlbGxpSiBJREVBLgorICogVXNlcjogZGIKKyAqIERhdGU6IDIwLjAyLjEyCisgKiBUaW1lOiAxMzoxOQorICogVG8gY2hhbmdlIHRoaXMgdGVtcGxhdGUgdXNlIEZpbGUgfCBTZXR0aW5ncyB8IEZpbGUgVGVtcGxhdGVzLgorICovCitwdWJsaWMgY2xhc3MgVmljdGltIGV4dGVuZHMgU3VwZXIgeworICAgIHB1YmxpYyBzdGF0aWMgY2xhc3MgU3ViVmljdGltIGV4dGVuZHMgVmljdGltIHsKKworICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2NsYXNzUHJvcGVydGllcy9jaGFuZ2VFeHRlbmRzMi9zcmMvTWFpbi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvY2xhc3NQcm9wZXJ0aWVzL2NoYW5nZUV4dGVuZHMyL3NyYy9NYWluLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWZkZDdjNgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2NsYXNzUHJvcGVydGllcy9jaGFuZ2VFeHRlbmRzMi9zcmMvTWFpbi5qYXZhCkBAIC0wLDAgKzEsMjAgQEAKKy8qKgorICogQ3JlYXRlZCB3aXRoIEludGVsbGlKIElERUEuCisgKiBVc2VyOiBkYgorICogRGF0ZTogMjAuMDIuMTIKKyAqIFRpbWU6IDEzOjE5CisgKiBUbyBjaGFuZ2UgdGhpcyB0ZW1wbGF0ZSB1c2UgRmlsZSB8IFNldHRpbmdzIHwgRmlsZSBUZW1wbGF0ZXMuCisgKi8KK3B1YmxpYyBjbGFzcyBNYWluIHsKKyAgICBzdGF0aWMgdm9pZCBkb01lIChmaW5hbCBQdXBlciB4KSB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUHVwZXIhIik7CisgICAgfQorCisgICAgc3RhdGljIHZvaWQgZG9NZSAoZmluYWwgU3VwZXIgeCl7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU3VwZXIhIik7CisgICAgfQorCisgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4gKFN0cmluZ1tdIGFyZ3MpeworICAgICAgICBkb01lKG5ldyBWaWN0aW0uU3ViVmljdGltKCkpOworICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2NsYXNzUHJvcGVydGllcy9jaGFuZ2VFeHRlbmRzMi9zcmMvUHVwZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2NsYXNzUHJvcGVydGllcy9jaGFuZ2VFeHRlbmRzMi9zcmMvUHVwZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45M2NjYTEyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvY2xhc3NQcm9wZXJ0aWVzL2NoYW5nZUV4dGVuZHMyL3NyYy9QdXBlci5qYXZhCkBAIC0wLDAgKzEsOSBAQAorLyoqCisgKiBDcmVhdGVkIHdpdGggSW50ZWxsaUogSURFQS4KKyAqIFVzZXI6IGRiCisgKiBEYXRlOiAyMC4wMi4xMgorICogVGltZTogMTM6MTkKKyAqIFRvIGNoYW5nZSB0aGlzIHRlbXBsYXRlIHVzZSBGaWxlIHwgU2V0dGluZ3MgfCBGaWxlIFRlbXBsYXRlcy4KKyAqLworcHVibGljIGNsYXNzIFB1cGVyIHsKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2NsYXNzUHJvcGVydGllcy9jaGFuZ2VFeHRlbmRzMi9zcmMvU3VwZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2NsYXNzUHJvcGVydGllcy9jaGFuZ2VFeHRlbmRzMi9zcmMvU3VwZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZDcwZjU4Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvY2xhc3NQcm9wZXJ0aWVzL2NoYW5nZUV4dGVuZHMyL3NyYy9TdXBlci5qYXZhCkBAIC0wLDAgKzEsOSBAQAorLyoqCisgKiBDcmVhdGVkIHdpdGggSW50ZWxsaUogSURFQS4KKyAqIFVzZXI6IGRiCisgKiBEYXRlOiAyMC4wMi4xMgorICogVGltZTogMTM6MTkKKyAqIFRvIGNoYW5nZSB0aGlzIHRlbXBsYXRlIHVzZSBGaWxlIHwgU2V0dGluZ3MgfCBGaWxlIFRlbXBsYXRlcy4KKyAqLworcHVibGljIGNsYXNzIFN1cGVyIHsKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2NsYXNzUHJvcGVydGllcy9jaGFuZ2VFeHRlbmRzMi9zcmMvVmljdGltLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9jbGFzc1Byb3BlcnRpZXMvY2hhbmdlRXh0ZW5kczIvc3JjL1ZpY3RpbS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU4NzFjZmIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9jbGFzc1Byb3BlcnRpZXMvY2hhbmdlRXh0ZW5kczIvc3JjL1ZpY3RpbS5qYXZhCkBAIC0wLDAgKzEsMTIgQEAKKy8qKgorICogQ3JlYXRlZCB3aXRoIEludGVsbGlKIElERUEuCisgKiBVc2VyOiBkYgorICogRGF0ZTogMjAuMDIuMTIKKyAqIFRpbWU6IDEzOjE5CisgKiBUbyBjaGFuZ2UgdGhpcyB0ZW1wbGF0ZSB1c2UgRmlsZSB8IFNldHRpbmdzIHwgRmlsZSBUZW1wbGF0ZXMuCisgKi8KK3B1YmxpYyBjbGFzcyBWaWN0aW0gZXh0ZW5kcyBQdXBlciB7CisgICAgcHVibGljIHN0YXRpYyBjbGFzcyBTdWJWaWN0aW0gZXh0ZW5kcyBWaWN0aW0geworCisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvY2xhc3NQcm9wZXJ0aWVzL3JlbW92ZUV4dGVuZHMubG9nIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvY2xhc3NQcm9wZXJ0aWVzL3JlbW92ZUV4dGVuZHMubG9nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNiNWQ5ZWEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9jbGFzc1Byb3BlcnRpZXMvcmVtb3ZlRXh0ZW5kcy5sb2cKQEAgLTAsMCArMSwxNCBAQAorQ2xlYW5pbmcgb3V0cHV0IGZpbGVzOgorb3V0L3Byb2R1Y3Rpb24vUmVtb3ZlRXh0ZW5kcy9TdXBlci5jbGFzcworRW5kIG9mIGZpbGVzCitDb21waWxpbmcgZmlsZXM6CitzcmMvU3VwZXIuamF2YQorRW5kIG9mIGZpbGVzCitDbGVhbmluZyBvdXRwdXQgZmlsZXM6CitvdXQvcHJvZHVjdGlvbi9SZW1vdmVFeHRlbmRzL0NsaWVudC5jbGFzcworb3V0L3Byb2R1Y3Rpb24vUmVtb3ZlRXh0ZW5kcy9DbGllbnQyLmNsYXNzCitFbmQgb2YgZmlsZXMKK0NvbXBpbGluZyBmaWxlczoKK3NyYy9DbGllbnQuamF2YQorc3JjL0NsaWVudDIuamF2YQorRW5kIG9mIGZpbGVzCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9jbGFzc1Byb3BlcnRpZXMvcmVtb3ZlRXh0ZW5kcy9TdXBlci5qYXZhLm5ldyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2NsYXNzUHJvcGVydGllcy9yZW1vdmVFeHRlbmRzL1N1cGVyLmphdmEubmV3Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdlMmU1ZTAKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9jbGFzc1Byb3BlcnRpZXMvcmVtb3ZlRXh0ZW5kcy9TdXBlci5qYXZhLm5ldwpAQCAtMCwwICsxLDMgQEAKK2NsYXNzIFN1cGVyIHsKKyAgY2hhciBzID0gJ3MnOworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2NsYXNzUHJvcGVydGllcy9yZW1vdmVFeHRlbmRzL3NyYy9DbGllbnQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2NsYXNzUHJvcGVydGllcy9yZW1vdmVFeHRlbmRzL3NyYy9DbGllbnQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNjk3NDQ2Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvY2xhc3NQcm9wZXJ0aWVzL3JlbW92ZUV4dGVuZHMvc3JjL0NsaWVudC5qYXZhCkBAIC0wLDAgKzEsNiBAQAorY2xhc3MgQ2xpZW50IHsKKyAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworICAgIEh5cGVyIGggPSBuZXcgU3VwZXIoKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oaC5oKTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2NsYXNzUHJvcGVydGllcy9yZW1vdmVFeHRlbmRzL3NyYy9DbGllbnQyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9jbGFzc1Byb3BlcnRpZXMvcmVtb3ZlRXh0ZW5kcy9zcmMvQ2xpZW50Mi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg5MDBkMDIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9jbGFzc1Byb3BlcnRpZXMvcmVtb3ZlRXh0ZW5kcy9zcmMvQ2xpZW50Mi5qYXZhCkBAIC0wLDAgKzEsNCBAQAorY2xhc3MgQ2xpZW50MiBleHRlbmRzIFN1cGVyIHsKKyAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvY2xhc3NQcm9wZXJ0aWVzL3JlbW92ZUV4dGVuZHMvc3JjL0h5cGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9jbGFzc1Byb3BlcnRpZXMvcmVtb3ZlRXh0ZW5kcy9zcmMvSHlwZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOWUyZDc4Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvY2xhc3NQcm9wZXJ0aWVzL3JlbW92ZUV4dGVuZHMvc3JjL0h5cGVyLmphdmEKQEAgLTAsMCArMSwzIEBACitjbGFzcyBIeXBlciB7CisgIGNoYXIgaCA9ICdoJzsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9jbGFzc1Byb3BlcnRpZXMvcmVtb3ZlRXh0ZW5kcy9zcmMvU3VwZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2NsYXNzUHJvcGVydGllcy9yZW1vdmVFeHRlbmRzL3NyYy9TdXBlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk4NDQ5YTMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9jbGFzc1Byb3BlcnRpZXMvcmVtb3ZlRXh0ZW5kcy9zcmMvU3VwZXIuamF2YQpAQCAtMCwwICsxLDMgQEAKK2NsYXNzIFN1cGVyIGV4dGVuZHMgSHlwZXIgeworICBjaGFyIHMgPSAncyc7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvY2xhc3NQcm9wZXJ0aWVzL3JlbW92ZUV4dGVuZHNBZmZlY3RzRmllbGRBY2Nlc3MubG9nIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvY2xhc3NQcm9wZXJ0aWVzL3JlbW92ZUV4dGVuZHNBZmZlY3RzRmllbGRBY2Nlc3MubG9nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI1ZmNmZDAKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9jbGFzc1Byb3BlcnRpZXMvcmVtb3ZlRXh0ZW5kc0FmZmVjdHNGaWVsZEFjY2Vzcy5sb2cKQEAgLTAsMCArMSwxNCBAQAorQ2xlYW5pbmcgb3V0cHV0IGZpbGVzOgorb3V0L3Byb2R1Y3Rpb24vUmVtb3ZlRXh0ZW5kc0FmZmVjdHNGaWVsZEFjY2Vzcy9Hb2FsU3dpdGNoLmNsYXNzCitFbmQgb2YgZmlsZXMKK0NvbXBpbGluZyBmaWxlczoKK3NyYy9Hb2FsU3dpdGNoLmphdmEKK0VuZCBvZiBmaWxlcworQ2xlYW5pbmcgb3V0cHV0IGZpbGVzOgorb3V0L3Byb2R1Y3Rpb24vUmVtb3ZlRXh0ZW5kc0FmZmVjdHNGaWVsZEFjY2Vzcy9GYXJDbGllbnQuY2xhc3MKK291dC9wcm9kdWN0aW9uL1JlbW92ZUV4dGVuZHNBZmZlY3RzRmllbGRBY2Nlc3MvU3dpdGNoUHJvdmlkZXIuY2xhc3MKK0VuZCBvZiBmaWxlcworQ29tcGlsaW5nIGZpbGVzOgorc3JjL0ZhckNsaWVudC5qYXZhCitzcmMvU3dpdGNoUHJvdmlkZXIuamF2YQorRW5kIG9mIGZpbGVzCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9jbGFzc1Byb3BlcnRpZXMvcmVtb3ZlRXh0ZW5kc0FmZmVjdHNGaWVsZEFjY2Vzcy9Hb2FsU3dpdGNoLmphdmEubmV3IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvY2xhc3NQcm9wZXJ0aWVzL3JlbW92ZUV4dGVuZHNBZmZlY3RzRmllbGRBY2Nlc3MvR29hbFN3aXRjaC5qYXZhLm5ldwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNmViNzIyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvY2xhc3NQcm9wZXJ0aWVzL3JlbW92ZUV4dGVuZHNBZmZlY3RzRmllbGRBY2Nlc3MvR29hbFN3aXRjaC5qYXZhLm5ldwpAQCAtMCwwICsxLDIgQEAKK3B1YmxpYyBjbGFzcyBHb2FsU3dpdGNoIHsKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2NsYXNzUHJvcGVydGllcy9yZW1vdmVFeHRlbmRzQWZmZWN0c0ZpZWxkQWNjZXNzL3NyYy9GYXJDbGllbnQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2NsYXNzUHJvcGVydGllcy9yZW1vdmVFeHRlbmRzQWZmZWN0c0ZpZWxkQWNjZXNzL3NyYy9GYXJDbGllbnQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZDc1MDA0Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvY2xhc3NQcm9wZXJ0aWVzL3JlbW92ZUV4dGVuZHNBZmZlY3RzRmllbGRBY2Nlc3Mvc3JjL0ZhckNsaWVudC5qYXZhCkBAIC0wLDAgKzEsNSBAQAorcHVibGljIGNsYXNzIEZhckNsaWVudCB7CisgICAgcHVibGljIHZvaWQgY29udGV4dCgpIHsKKyAgICAgICAgRmFyR29hbCBnb2FsMSA9IG5ldyBTd2l0Y2hQcm92aWRlcigpLmZpZWxkOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9jbGFzc1Byb3BlcnRpZXMvcmVtb3ZlRXh0ZW5kc0FmZmVjdHNGaWVsZEFjY2Vzcy9zcmMvRmFyR29hbC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvY2xhc3NQcm9wZXJ0aWVzL3JlbW92ZUV4dGVuZHNBZmZlY3RzRmllbGRBY2Nlc3Mvc3JjL0ZhckdvYWwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OWYwMWQ4Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvY2xhc3NQcm9wZXJ0aWVzL3JlbW92ZUV4dGVuZHNBZmZlY3RzRmllbGRBY2Nlc3Mvc3JjL0ZhckdvYWwuamF2YQpAQCAtMCwwICsxLDIgQEAKK3B1YmxpYyBjbGFzcyBGYXJHb2FsIHsKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2NsYXNzUHJvcGVydGllcy9yZW1vdmVFeHRlbmRzQWZmZWN0c0ZpZWxkQWNjZXNzL3NyYy9Hb2FsU3dpdGNoLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9jbGFzc1Byb3BlcnRpZXMvcmVtb3ZlRXh0ZW5kc0FmZmVjdHNGaWVsZEFjY2Vzcy9zcmMvR29hbFN3aXRjaC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBhNjg5YjIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9jbGFzc1Byb3BlcnRpZXMvcmVtb3ZlRXh0ZW5kc0FmZmVjdHNGaWVsZEFjY2Vzcy9zcmMvR29hbFN3aXRjaC5qYXZhCkBAIC0wLDAgKzEsMiBAQAorcHVibGljIGNsYXNzIEdvYWxTd2l0Y2ggZXh0ZW5kcyBGYXJHb2FseworfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvY2xhc3NQcm9wZXJ0aWVzL3JlbW92ZUV4dGVuZHNBZmZlY3RzRmllbGRBY2Nlc3Mvc3JjL1N3aXRjaFByb3ZpZGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9jbGFzc1Byb3BlcnRpZXMvcmVtb3ZlRXh0ZW5kc0FmZmVjdHNGaWVsZEFjY2Vzcy9zcmMvU3dpdGNoUHJvdmlkZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYWE5YWVkCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvY2xhc3NQcm9wZXJ0aWVzL3JlbW92ZUV4dGVuZHNBZmZlY3RzRmllbGRBY2Nlc3Mvc3JjL1N3aXRjaFByb3ZpZGVyLmphdmEKQEAgLTAsMCArMSwzIEBACitwdWJsaWMgY2xhc3MgU3dpdGNoUHJvdmlkZXIgeworICAgIHB1YmxpYyBHb2FsU3dpdGNoIGZpZWxkOworfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvY2xhc3NQcm9wZXJ0aWVzL3JlbW92ZUV4dGVuZHNBZmZlY3RzTWV0aG9kQWNjZXNzLmxvZyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2NsYXNzUHJvcGVydGllcy9yZW1vdmVFeHRlbmRzQWZmZWN0c01ldGhvZEFjY2Vzcy5sb2cKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjFhMzI4ZAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2NsYXNzUHJvcGVydGllcy9yZW1vdmVFeHRlbmRzQWZmZWN0c01ldGhvZEFjY2Vzcy5sb2cKQEAgLTAsMCArMSwxNCBAQAorQ2xlYW5pbmcgb3V0cHV0IGZpbGVzOgorb3V0L3Byb2R1Y3Rpb24vUmVtb3ZlRXh0ZW5kc0FmZmVjdHNNZXRob2RBY2Nlc3MvR29hbFN3aXRjaC5jbGFzcworRW5kIG9mIGZpbGVzCitDb21waWxpbmcgZmlsZXM6CitzcmMvR29hbFN3aXRjaC5qYXZhCitFbmQgb2YgZmlsZXMKK0NsZWFuaW5nIG91dHB1dCBmaWxlczoKK291dC9wcm9kdWN0aW9uL1JlbW92ZUV4dGVuZHNBZmZlY3RzTWV0aG9kQWNjZXNzL0ZhckNsaWVudC5jbGFzcworb3V0L3Byb2R1Y3Rpb24vUmVtb3ZlRXh0ZW5kc0FmZmVjdHNNZXRob2RBY2Nlc3MvU3dpdGNoUHJvdmlkZXIuY2xhc3MKK0VuZCBvZiBmaWxlcworQ29tcGlsaW5nIGZpbGVzOgorc3JjL0ZhckNsaWVudC5qYXZhCitzcmMvU3dpdGNoUHJvdmlkZXIuamF2YQorRW5kIG9mIGZpbGVzCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9jbGFzc1Byb3BlcnRpZXMvcmVtb3ZlRXh0ZW5kc0FmZmVjdHNNZXRob2RBY2Nlc3MvR29hbFN3aXRjaC5qYXZhLm5ldyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2NsYXNzUHJvcGVydGllcy9yZW1vdmVFeHRlbmRzQWZmZWN0c01ldGhvZEFjY2Vzcy9Hb2FsU3dpdGNoLmphdmEubmV3Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE2ZWI3MjIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9jbGFzc1Byb3BlcnRpZXMvcmVtb3ZlRXh0ZW5kc0FmZmVjdHNNZXRob2RBY2Nlc3MvR29hbFN3aXRjaC5qYXZhLm5ldwpAQCAtMCwwICsxLDIgQEAKK3B1YmxpYyBjbGFzcyBHb2FsU3dpdGNoIHsKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2NsYXNzUHJvcGVydGllcy9yZW1vdmVFeHRlbmRzQWZmZWN0c01ldGhvZEFjY2Vzcy9zcmMvRmFyQ2xpZW50LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9jbGFzc1Byb3BlcnRpZXMvcmVtb3ZlRXh0ZW5kc0FmZmVjdHNNZXRob2RBY2Nlc3Mvc3JjL0ZhckNsaWVudC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJiMWNjMGUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9jbGFzc1Byb3BlcnRpZXMvcmVtb3ZlRXh0ZW5kc0FmZmVjdHNNZXRob2RBY2Nlc3Mvc3JjL0ZhckNsaWVudC5qYXZhCkBAIC0wLDAgKzEsNSBAQAorcHVibGljIGNsYXNzIEZhckNsaWVudCB7CisgICAgcHVibGljIHZvaWQgY29udGV4dCgpIHsKKyAgICAgICAgRmFyR29hbCBnb2FsMiA9IG5ldyBTd2l0Y2hQcm92aWRlcigpLm1ldGhvZCgpOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9jbGFzc1Byb3BlcnRpZXMvcmVtb3ZlRXh0ZW5kc0FmZmVjdHNNZXRob2RBY2Nlc3Mvc3JjL0ZhckdvYWwuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2NsYXNzUHJvcGVydGllcy9yZW1vdmVFeHRlbmRzQWZmZWN0c01ldGhvZEFjY2Vzcy9zcmMvRmFyR29hbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk5ZjAxZDgKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9jbGFzc1Byb3BlcnRpZXMvcmVtb3ZlRXh0ZW5kc0FmZmVjdHNNZXRob2RBY2Nlc3Mvc3JjL0ZhckdvYWwuamF2YQpAQCAtMCwwICsxLDIgQEAKK3B1YmxpYyBjbGFzcyBGYXJHb2FsIHsKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2NsYXNzUHJvcGVydGllcy9yZW1vdmVFeHRlbmRzQWZmZWN0c01ldGhvZEFjY2Vzcy9zcmMvR29hbFN3aXRjaC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvY2xhc3NQcm9wZXJ0aWVzL3JlbW92ZUV4dGVuZHNBZmZlY3RzTWV0aG9kQWNjZXNzL3NyYy9Hb2FsU3dpdGNoLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGE2ODliMgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2NsYXNzUHJvcGVydGllcy9yZW1vdmVFeHRlbmRzQWZmZWN0c01ldGhvZEFjY2Vzcy9zcmMvR29hbFN3aXRjaC5qYXZhCkBAIC0wLDAgKzEsMiBAQAorcHVibGljIGNsYXNzIEdvYWxTd2l0Y2ggZXh0ZW5kcyBGYXJHb2FseworfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvY2xhc3NQcm9wZXJ0aWVzL3JlbW92ZUV4dGVuZHNBZmZlY3RzTWV0aG9kQWNjZXNzL3NyYy9Td2l0Y2hQcm92aWRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvY2xhc3NQcm9wZXJ0aWVzL3JlbW92ZUV4dGVuZHNBZmZlY3RzTWV0aG9kQWNjZXNzL3NyYy9Td2l0Y2hQcm92aWRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdiNjM1ZDAKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9jbGFzc1Byb3BlcnRpZXMvcmVtb3ZlRXh0ZW5kc0FmZmVjdHNNZXRob2RBY2Nlc3Mvc3JjL1N3aXRjaFByb3ZpZGVyLmphdmEKQEAgLTAsMCArMSw1IEBACitwdWJsaWMgY2xhc3MgU3dpdGNoUHJvdmlkZXIgeworICAgIHB1YmxpYyBHb2FsU3dpdGNoIG1ldGhvZCgpIHsKKyAgICAgICAgcmV0dXJuIG5ldyBHb2FsU3dpdGNoKCk7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvY2xhc3NQcm9wZXJ0aWVzL3JlbW92ZUltcGxlbWVudHMubG9nIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvY2xhc3NQcm9wZXJ0aWVzL3JlbW92ZUltcGxlbWVudHMubG9nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjllYTRkNDQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9jbGFzc1Byb3BlcnRpZXMvcmVtb3ZlSW1wbGVtZW50cy5sb2cKQEAgLTAsMCArMSwxNCBAQAorQ2xlYW5pbmcgb3V0cHV0IGZpbGVzOgorb3V0L3Byb2R1Y3Rpb24vUmVtb3ZlSW1wbGVtZW50cy9TdXBlci5jbGFzcworRW5kIG9mIGZpbGVzCitDb21waWxpbmcgZmlsZXM6CitzcmMvU3VwZXIuamF2YQorRW5kIG9mIGZpbGVzCitDbGVhbmluZyBvdXRwdXQgZmlsZXM6CitvdXQvcHJvZHVjdGlvbi9SZW1vdmVJbXBsZW1lbnRzL0NsaWVudC5jbGFzcworb3V0L3Byb2R1Y3Rpb24vUmVtb3ZlSW1wbGVtZW50cy9DbGllbnQyLmNsYXNzCitFbmQgb2YgZmlsZXMKK0NvbXBpbGluZyBmaWxlczoKK3NyYy9DbGllbnQuamF2YQorc3JjL0NsaWVudDIuamF2YQorRW5kIG9mIGZpbGVzCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9jbGFzc1Byb3BlcnRpZXMvcmVtb3ZlSW1wbGVtZW50cy9TdXBlci5qYXZhLm5ldyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2NsYXNzUHJvcGVydGllcy9yZW1vdmVJbXBsZW1lbnRzL1N1cGVyLmphdmEubmV3Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM3YjBjZGIxNgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2NsYXNzUHJvcGVydGllcy9yZW1vdmVJbXBsZW1lbnRzL1N1cGVyLmphdmEubmV3CkBAIC0wLDAgKzEsNCBAQAorY2xhc3MgU3VwZXIgaW1wbGVtZW50cyBqYXZhLmxhbmcuUnVubmFibGUgeworICBwdWJsaWMgdm9pZCBydW4oKSB7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9jbGFzc1Byb3BlcnRpZXMvcmVtb3ZlSW1wbGVtZW50cy9zcmMvQ2xpZW50LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9jbGFzc1Byb3BlcnRpZXMvcmVtb3ZlSW1wbGVtZW50cy9zcmMvQ2xpZW50LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWQ5YWU1NAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2NsYXNzUHJvcGVydGllcy9yZW1vdmVJbXBsZW1lbnRzL3NyYy9DbGllbnQuamF2YQpAQCAtMCwwICsxLDUgQEAKK2NsYXNzIENsaWVudCB7CisgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKyAgIEh5cGVyIGggPSBuZXcgU3VwZXIoKTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2NsYXNzUHJvcGVydGllcy9yZW1vdmVJbXBsZW1lbnRzL3NyYy9DbGllbnQyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9jbGFzc1Byb3BlcnRpZXMvcmVtb3ZlSW1wbGVtZW50cy9zcmMvQ2xpZW50Mi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg5MDBkMDIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9jbGFzc1Byb3BlcnRpZXMvcmVtb3ZlSW1wbGVtZW50cy9zcmMvQ2xpZW50Mi5qYXZhCkBAIC0wLDAgKzEsNCBAQAorY2xhc3MgQ2xpZW50MiBleHRlbmRzIFN1cGVyIHsKKyAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvY2xhc3NQcm9wZXJ0aWVzL3JlbW92ZUltcGxlbWVudHMvc3JjL0h5cGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9jbGFzc1Byb3BlcnRpZXMvcmVtb3ZlSW1wbGVtZW50cy9zcmMvSHlwZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMjBjODhkCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvY2xhc3NQcm9wZXJ0aWVzL3JlbW92ZUltcGxlbWVudHMvc3JjL0h5cGVyLmphdmEKQEAgLTAsMCArMSwyIEBACitpbnRlcmZhY2UgSHlwZXIgeworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2NsYXNzUHJvcGVydGllcy9yZW1vdmVJbXBsZW1lbnRzL3NyYy9TdXBlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvY2xhc3NQcm9wZXJ0aWVzL3JlbW92ZUltcGxlbWVudHMvc3JjL1N1cGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmVjYjVjMQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2NsYXNzUHJvcGVydGllcy9yZW1vdmVJbXBsZW1lbnRzL3NyYy9TdXBlci5qYXZhCkBAIC0wLDAgKzEsNCBAQAorY2xhc3MgU3VwZXIgaW1wbGVtZW50cyBIeXBlciwgamF2YS5sYW5nLlJ1bm5hYmxlIHsKKyAgcHVibGljIHZvaWQgcnVuKCkgeworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvY2xhc3NQcm9wZXJ0aWVzL3JlbW92ZUltcGxlbWVudHMyLmxvZyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2NsYXNzUHJvcGVydGllcy9yZW1vdmVJbXBsZW1lbnRzMi5sb2cKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2RiMzU3MwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2NsYXNzUHJvcGVydGllcy9yZW1vdmVJbXBsZW1lbnRzMi5sb2cKQEAgLTAsMCArMSwxNCBAQAorQ2xlYW5pbmcgb3V0cHV0IGZpbGVzOgorb3V0L3Byb2R1Y3Rpb24vUmVtb3ZlSW1wbGVtZW50czIvVGVzdC5jbGFzcworRW5kIG9mIGZpbGVzCitDb21waWxpbmcgZmlsZXM6CitzcmMvVGVzdC5qYXZhCitFbmQgb2YgZmlsZXMKK0NsZWFuaW5nIG91dHB1dCBmaWxlczoKK291dC9wcm9kdWN0aW9uL1JlbW92ZUltcGxlbWVudHMyL0NsaWVudC5jbGFzcworb3V0L3Byb2R1Y3Rpb24vUmVtb3ZlSW1wbGVtZW50czIvQ2xpZW50SW1wbC5jbGFzcworRW5kIG9mIGZpbGVzCitDb21waWxpbmcgZmlsZXM6CitzcmMvQ2xpZW50LmphdmEKK3NyYy9DbGllbnRJbXBsLmphdmEKK0VuZCBvZiBmaWxlcwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvY2xhc3NQcm9wZXJ0aWVzL3JlbW92ZUltcGxlbWVudHMyL1Rlc3QuamF2YS5uZXcgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9jbGFzc1Byb3BlcnRpZXMvcmVtb3ZlSW1wbGVtZW50czIvVGVzdC5qYXZhLm5ldwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZTQ5NTgyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvY2xhc3NQcm9wZXJ0aWVzL3JlbW92ZUltcGxlbWVudHMyL1Rlc3QuamF2YS5uZXcKQEAgLTAsMCArMSw1IEBACisKK3B1YmxpYyBjbGFzcyBUZXN0IHsKKyAgcHVibGljIHZvaWQgcnVuKCkgeworICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9jbGFzc1Byb3BlcnRpZXMvcmVtb3ZlSW1wbGVtZW50czIvc3JjL0NsaWVudC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvY2xhc3NQcm9wZXJ0aWVzL3JlbW92ZUltcGxlbWVudHMyL3NyYy9DbGllbnQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZmNkZTdiCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvY2xhc3NQcm9wZXJ0aWVzL3JlbW92ZUltcGxlbWVudHMyL3NyYy9DbGllbnQuamF2YQpAQCAtMCwwICsxLDExIEBACisKK2ltcG9ydCBqYXZheC5zd2luZy4qOworCitwdWJsaWMgYWJzdHJhY3QgY2xhc3MgQ2xpZW50IHsKKyAgeworICAgIFRlc3QgdGVzdCA9IGZvbygpOworICAgIFN3aW5nVXRpbGl0aWVzLmludm9rZUxhdGVyKHRlc3QpOworICB9CisKKyAgcHVibGljIGFic3RyYWN0IFRlc3QgZm9vKCk7Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9jbGFzc1Byb3BlcnRpZXMvcmVtb3ZlSW1wbGVtZW50czIvc3JjL0NsaWVudEltcGwuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2NsYXNzUHJvcGVydGllcy9yZW1vdmVJbXBsZW1lbnRzMi9zcmMvQ2xpZW50SW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRiMGRjN2UKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9jbGFzc1Byb3BlcnRpZXMvcmVtb3ZlSW1wbGVtZW50czIvc3JjL0NsaWVudEltcGwuamF2YQpAQCAtMCwwICsxLDEwIEBACitwdWJsaWMgY2xhc3MgQ2xpZW50SW1wbCBleHRlbmRzIENsaWVudCB7CisgIHB1YmxpYyBUZXN0IGZvbygpIHsKKyAgICByZXR1cm4gbmV3IFRlc3QoKTsKKyAgfQorCisgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKyAgICBuZXcgQ2xpZW50SW1wbCgpOworICB9CisKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9jbGFzc1Byb3BlcnRpZXMvcmVtb3ZlSW1wbGVtZW50czIvc3JjL1Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2NsYXNzUHJvcGVydGllcy9yZW1vdmVJbXBsZW1lbnRzMi9zcmMvVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE0ODY4YjgKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9jbGFzc1Byb3BlcnRpZXMvcmVtb3ZlSW1wbGVtZW50czIvc3JjL1Rlc3QuamF2YQpAQCAtMCwwICsxLDUgQEAKKworcHVibGljIGNsYXNzIFRlc3QgaW1wbGVtZW50cyBSdW5uYWJsZXsKKyAgcHVibGljIHZvaWQgcnVuKCkgeworICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9jbGFzc1Byb3BlcnRpZXMvcmVtb3ZlSW1wbGVtZW50czMubG9nIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvY2xhc3NQcm9wZXJ0aWVzL3JlbW92ZUltcGxlbWVudHMzLmxvZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMzA3ZTE2Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvY2xhc3NQcm9wZXJ0aWVzL3JlbW92ZUltcGxlbWVudHMzLmxvZwpAQCAtMCwwICsxLDE0IEBACitDbGVhbmluZyBvdXRwdXQgZmlsZXM6CitvdXQvcHJvZHVjdGlvbi9SZW1vdmVJbXBsZW1lbnRzMy9UZXN0LmNsYXNzCitFbmQgb2YgZmlsZXMKK0NvbXBpbGluZyBmaWxlczoKK3NyYy9UZXN0LmphdmEKK0VuZCBvZiBmaWxlcworQ2xlYW5pbmcgb3V0cHV0IGZpbGVzOgorb3V0L3Byb2R1Y3Rpb24vUmVtb3ZlSW1wbGVtZW50czMvQ2xpZW50LmNsYXNzCitvdXQvcHJvZHVjdGlvbi9SZW1vdmVJbXBsZW1lbnRzMy9DbGllbnRJbXBsLmNsYXNzCitFbmQgb2YgZmlsZXMKK0NvbXBpbGluZyBmaWxlczoKK3NyYy9DbGllbnQuamF2YQorc3JjL0NsaWVudEltcGwuamF2YQorRW5kIG9mIGZpbGVzCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9jbGFzc1Byb3BlcnRpZXMvcmVtb3ZlSW1wbGVtZW50czMvVGVzdC5qYXZhLm5ldyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2NsYXNzUHJvcGVydGllcy9yZW1vdmVJbXBsZW1lbnRzMy9UZXN0LmphdmEubmV3Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZlNDk1ODIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9jbGFzc1Byb3BlcnRpZXMvcmVtb3ZlSW1wbGVtZW50czMvVGVzdC5qYXZhLm5ldwpAQCAtMCwwICsxLDUgQEAKKworcHVibGljIGNsYXNzIFRlc3QgeworICBwdWJsaWMgdm9pZCBydW4oKSB7CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2NsYXNzUHJvcGVydGllcy9yZW1vdmVJbXBsZW1lbnRzMy9zcmMvQ2xpZW50LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9jbGFzc1Byb3BlcnRpZXMvcmVtb3ZlSW1wbGVtZW50czMvc3JjL0NsaWVudC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVjZTk2OTkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9jbGFzc1Byb3BlcnRpZXMvcmVtb3ZlSW1wbGVtZW50czMvc3JjL0NsaWVudC5qYXZhCkBAIC0wLDAgKzEsMTEgQEAKKworaW1wb3J0IGphdmF4LnN3aW5nLio7CisKK3B1YmxpYyBhYnN0cmFjdCBjbGFzcyBDbGllbnQgeworICB7CisgICAgVGVzdCB0ZXN0ID0gKFRlc3QpZm9vKCk7CisgICAgU3dpbmdVdGlsaXRpZXMuaW52b2tlTGF0ZXIodGVzdCk7CisgIH0KKworICBwdWJsaWMgYWJzdHJhY3QgUnVubmFibGUgZm9vKCk7Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9jbGFzc1Byb3BlcnRpZXMvcmVtb3ZlSW1wbGVtZW50czMvc3JjL0NsaWVudEltcGwuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2NsYXNzUHJvcGVydGllcy9yZW1vdmVJbXBsZW1lbnRzMy9zcmMvQ2xpZW50SW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA5MjdhYTE5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvY2xhc3NQcm9wZXJ0aWVzL3JlbW92ZUltcGxlbWVudHMzL3NyYy9DbGllbnRJbXBsLmphdmEKQEAgLTAsMCArMSwxMCBAQAorcHVibGljIGNsYXNzIENsaWVudEltcGwgZXh0ZW5kcyBDbGllbnQgeworICBwdWJsaWMgUnVubmFibGUgZm9vKCkgeworICAgIHJldHVybiBuZXcgVGVzdCgpOworICB9CisKKyAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworICAgIG5ldyBDbGllbnRJbXBsKCk7CisgIH0KKworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2NsYXNzUHJvcGVydGllcy9yZW1vdmVJbXBsZW1lbnRzMy9zcmMvVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvY2xhc3NQcm9wZXJ0aWVzL3JlbW92ZUltcGxlbWVudHMzL3NyYy9UZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTQ4NjhiOAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2NsYXNzUHJvcGVydGllcy9yZW1vdmVJbXBsZW1lbnRzMy9zcmMvVGVzdC5qYXZhCkBAIC0wLDAgKzEsNSBAQAorCitwdWJsaWMgY2xhc3MgVGVzdCBpbXBsZW1lbnRzIFJ1bm5hYmxleworICBwdWJsaWMgdm9pZCBydW4oKSB7CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2NvbW1vbi9hZGRDbGFzcy5sb2cgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9jb21tb24vYWRkQ2xhc3MubG9nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVhYWY2YjEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9jb21tb24vYWRkQ2xhc3MubG9nCkBAIC0wLDAgKzEsOSBAQAorQ29tcGlsaW5nIGZpbGVzOgorc3JjL1V0aWwuamF2YQorRW5kIG9mIGZpbGVzCitDbGVhbmluZyBvdXRwdXQgZmlsZXM6CitvdXQvcHJvZHVjdGlvbi9hZGRDbGFzcy9DbGllbnQuY2xhc3MKK0VuZCBvZiBmaWxlcworQ29tcGlsaW5nIGZpbGVzOgorc3JjL0NsaWVudC5qYXZhCitFbmQgb2YgZmlsZXMKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2NvbW1vbi9hZGRDbGFzcy8uaWRlYS9taXNjLnhtbCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2NvbW1vbi9hZGRDbGFzcy8uaWRlYS9taXNjLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YTI0OWQyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvY29tbW9uL2FkZENsYXNzLy5pZGVhL21pc2MueG1sCkBAIC0wLDAgKzEsMTMgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8cHJvamVjdCB2ZXJzaW9uPSI0Ij4KKyAgPGNvbXBvbmVudCBuYW1lPSJFbnRyeVBvaW50c01hbmFnZXIiPgorICAgIDxlbnRyeV9wb2ludHMgdmVyc2lvbj0iMi4wIiAvPgorICA8L2NvbXBvbmVudD4KKyAgPGNvbXBvbmVudCBuYW1lPSJQcm9qZWN0UmVzb3VyY2VzIj4KKyAgICA8ZGVmYXVsdC1odG1sLWRvY3R5cGU+aHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbDwvZGVmYXVsdC1odG1sLWRvY3R5cGU+CisgIDwvY29tcG9uZW50PgorICA8Y29tcG9uZW50IG5hbWU9IlByb2plY3RSb290TWFuYWdlciIgdmVyc2lvbj0iMiIgbGFuZ3VhZ2VMZXZlbD0iSkRLXzFfNiIgYXNzZXJ0LWtleXdvcmQ9InRydWUiIGpkay0xNT0idHJ1ZSIgcHJvamVjdC1qZGstbmFtZT0iSURFQSBqZGsiIHByb2plY3QtamRrLXR5cGU9IkphdmFTREsiPgorICAgIDxvdXRwdXQgdXJsPSJmaWxlOi8vJFBST0pFQ1RfRElSJC9vdXQiIC8+CisgIDwvY29tcG9uZW50PgorPC9wcm9qZWN0PgorCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9jb21tb24vYWRkQ2xhc3MvLmlkZWEvbW9kdWxlcy54bWwgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9jb21tb24vYWRkQ2xhc3MvLmlkZWEvbW9kdWxlcy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWNlZmM2NAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2NvbW1vbi9hZGRDbGFzcy8uaWRlYS9tb2R1bGVzLnhtbApAQCAtMCwwICsxLDEwIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHByb2plY3QgdmVyc2lvbj0iNCI+CisgIDxjb21wb25lbnQgbmFtZT0iUHJvamVjdE1vZHVsZU1hbmFnZXIiPgorICAgIDxtb2R1bGVzPgorICAgICAgPG1vZHVsZSBmaWxldXJsPSJmaWxlOi8vJFBST0pFQ1RfRElSJC9hZGRDbGFzcy5pbWwiIGZpbGVwYXRoPSIkUFJPSkVDVF9ESVIkL2FkZENsYXNzLmltbCIgLz4KKyAgICAgIDxtb2R1bGUgZmlsZXVybD0iZmlsZTovLyRQUk9KRUNUX0RJUiQvY29tbW9uL2NvbW1vbi5pbWwiIGZpbGVwYXRoPSIkUFJPSkVDVF9ESVIkL2NvbW1vbi9jb21tb24uaW1sIiAvPgorICAgIDwvbW9kdWxlcz4KKyAgPC9jb21wb25lbnQ+Cis8L3Byb2plY3Q+CisKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2NvbW1vbi9hZGRDbGFzcy9VdGlsLmphdmEubmV3IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvY29tbW9uL2FkZENsYXNzL1V0aWwuamF2YS5uZXcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTE0MTE1MQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2NvbW1vbi9hZGRDbGFzcy9VdGlsLmphdmEubmV3CkBAIC0wLDAgKzEsNSBAQAorcHVibGljIGNsYXNzIFV0aWwgeworICBwdWJsaWMgc3RhdGljIHZvaWQgZm9vIChpbnQgeCkgeworCisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9jb21tb24vYWRkQ2xhc3MvYWRkQ2xhc3MuaW1sIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvY29tbW9uL2FkZENsYXNzL2FkZENsYXNzLmltbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wODk4YjU0Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvY29tbW9uL2FkZENsYXNzL2FkZENsYXNzLmltbApAQCAtMCwwICsxLDEzIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPG1vZHVsZSB0eXBlPSJKQVZBX01PRFVMRSIgdmVyc2lvbj0iNCI+CisgIDxjb21wb25lbnQgbmFtZT0iTmV3TW9kdWxlUm9vdE1hbmFnZXIiIGluaGVyaXQtY29tcGlsZXItb3V0cHV0PSJ0cnVlIj4KKyAgICA8ZXhjbHVkZS1vdXRwdXQgLz4KKyAgICA8Y29udGVudCB1cmw9ImZpbGU6Ly8kTU9EVUxFX0RJUiQiPgorICAgICAgPHNvdXJjZUZvbGRlciB1cmw9ImZpbGU6Ly8kTU9EVUxFX0RJUiQvc3JjIiBpc1Rlc3RTb3VyY2U9ImZhbHNlIiAvPgorICAgIDwvY29udGVudD4KKyAgICA8b3JkZXJFbnRyeSB0eXBlPSJqZGsiIGpka05hbWU9IklERUEgamRrIiBqZGtUeXBlPSJKYXZhU0RLIiAvPgorICAgIDxvcmRlckVudHJ5IHR5cGU9InNvdXJjZUZvbGRlciIgZm9yVGVzdHM9ImZhbHNlIiAvPgorICAgIDxvcmRlckVudHJ5IHR5cGU9Im1vZHVsZSIgbW9kdWxlLW5hbWU9ImNvbW1vbiIgLz4KKyAgPC9jb21wb25lbnQ+Cis8L21vZHVsZT4KKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvY29tbW9uL2FkZENsYXNzL2NvbW1vbi9jb21tb24uaW1sIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvY29tbW9uL2FkZENsYXNzL2NvbW1vbi9jb21tb24uaW1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ1YzA3NDMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9jb21tb24vYWRkQ2xhc3MvY29tbW9uL2NvbW1vbi5pbWwKQEAgLTAsMCArMSwxMiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxtb2R1bGUgdHlwZT0iSkFWQV9NT0RVTEUiIHZlcnNpb249IjQiPgorICA8Y29tcG9uZW50IG5hbWU9Ik5ld01vZHVsZVJvb3RNYW5hZ2VyIiBpbmhlcml0LWNvbXBpbGVyLW91dHB1dD0idHJ1ZSI+CisgICAgPGV4Y2x1ZGUtb3V0cHV0IC8+CisgICAgPGNvbnRlbnQgdXJsPSJmaWxlOi8vJE1PRFVMRV9ESVIkIj4KKyAgICAgIDxzb3VyY2VGb2xkZXIgdXJsPSJmaWxlOi8vJE1PRFVMRV9ESVIkL3NyYyIgaXNUZXN0U291cmNlPSJmYWxzZSIgLz4KKyAgICA8L2NvbnRlbnQ+CisgICAgPG9yZGVyRW50cnkgdHlwZT0iaW5oZXJpdGVkSmRrIiAvPgorICAgIDxvcmRlckVudHJ5IHR5cGU9InNvdXJjZUZvbGRlciIgZm9yVGVzdHM9ImZhbHNlIiAvPgorICA8L2NvbXBvbmVudD4KKzwvbW9kdWxlPgorCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9jb21tb24vYWRkQ2xhc3MvY29tbW9uL3NyYy9VdGlsLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9jb21tb24vYWRkQ2xhc3MvY29tbW9uL3NyYy9VdGlsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2UzNWFmZgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2NvbW1vbi9hZGRDbGFzcy9jb21tb24vc3JjL1V0aWwuamF2YQpAQCAtMCwwICsxLDEyIEBACisvKioKKyAqIENyZWF0ZWQgd2l0aCBJbnRlbGxpSiBJREVBLgorICogVXNlcjogZGIKKyAqIERhdGU6IDExLjA0LjEyCisgKiBUaW1lOiAxMTo0MworICogVG8gY2hhbmdlIHRoaXMgdGVtcGxhdGUgdXNlIEZpbGUgfCBTZXR0aW5ncyB8IEZpbGUgVGVtcGxhdGVzLgorICovCitwdWJsaWMgY2xhc3MgVXRpbCB7CisgICAgcHVibGljIHN0YXRpYyB2b2lkIGZvbyAoKSB7CisKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9jb21tb24vYWRkQ2xhc3Mvc3JjL0NsaWVudC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvY29tbW9uL2FkZENsYXNzL3NyYy9DbGllbnQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNGI3YWQ3Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvY29tbW9uL2FkZENsYXNzL3NyYy9DbGllbnQuamF2YQpAQCAtMCwwICsxLDEyIEBACisvKioKKyAqIENyZWF0ZWQgd2l0aCBJbnRlbGxpSiBJREVBLgorICogVXNlcjogZGIKKyAqIERhdGU6IDExLjA0LjEyCisgKiBUaW1lOiAxMTo0MworICogVG8gY2hhbmdlIHRoaXMgdGVtcGxhdGUgdXNlIEZpbGUgfCBTZXR0aW5ncyB8IEZpbGUgVGVtcGxhdGVzLgorICovCitwdWJsaWMgY2xhc3MgQ2xpZW50IHsKKyAgICB7CisgICAgICAgIFV0aWwuZm9vKCk7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvY29tbW9uL2Fub255bW91cy5sb2cgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9jb21tb24vYW5vbnltb3VzLmxvZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYzI0Y2VmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvY29tbW9uL2Fub255bW91cy5sb2cKQEAgLTAsMCArMSwxMyBAQAorQ2xlYW5pbmcgb3V0cHV0IGZpbGVzOgorb3V0L3Byb2R1Y3Rpb24vQW5vbnltb3VzL1NlcnZlci5jbGFzcworRW5kIG9mIGZpbGVzCitDb21waWxpbmcgZmlsZXM6CitzcmMvU2VydmVyLmphdmEKK0VuZCBvZiBmaWxlcworQ2xlYW5pbmcgb3V0cHV0IGZpbGVzOgorb3V0L3Byb2R1Y3Rpb24vQW5vbnltb3VzL0NsaWVudCQxLmNsYXNzCitvdXQvcHJvZHVjdGlvbi9Bbm9ueW1vdXMvQ2xpZW50LmNsYXNzCitFbmQgb2YgZmlsZXMKK0NvbXBpbGluZyBmaWxlczoKK3NyYy9DbGllbnQuamF2YQorRW5kIG9mIGZpbGVzCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9jb21tb24vYW5vbnltb3VzL1NlcnZlci5qYXZhLm5ldyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2NvbW1vbi9hbm9ueW1vdXMvU2VydmVyLmphdmEubmV3Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ3OTZmODUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9jb21tb24vYW5vbnltb3VzL1NlcnZlci5qYXZhLm5ldwpAQCAtMCwwICsxLDQgQEAKK2NsYXNzIFNlcnZlcnsKKyAgc3RhdGljIHZvaWQgZm9vKGludCBhKXsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2NvbW1vbi9hbm9ueW1vdXMvc3JjL0NsaWVudC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvY29tbW9uL2Fub255bW91cy9zcmMvQ2xpZW50LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzkyYjJiZAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2NvbW1vbi9hbm9ueW1vdXMvc3JjL0NsaWVudC5qYXZhCkBAIC0wLDAgKzEsOSBAQAorY2xhc3MgQ2xpZW50eworICB2b2lkIGZvbygpeworICAgIFJ1bm5hYmxlIHJ1bm5hYmxlID0gbmV3IFJ1bm5hYmxlKCl7CisgICAgICBwdWJsaWMgdm9pZCBydW4oKXsKKyAgICAgICAgU2VydmVyLmZvbygpOworICAgICAgfQorICAgIH07CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9jb21tb24vYW5vbnltb3VzL3NyYy9TZXJ2ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2NvbW1vbi9hbm9ueW1vdXMvc3JjL1NlcnZlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYwYzcwN2IKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9jb21tb24vYW5vbnltb3VzL3NyYy9TZXJ2ZXIuamF2YQpAQCAtMCwwICsxLDQgQEAKK2NsYXNzIFNlcnZlcnsKKyAgc3RhdGljIHZvaWQgZm9vKCl7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9jb21tb24vY2hhbmdlRGVmaW5pdGlvblRvQ2xhc3MubG9nIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvY29tbW9uL2NoYW5nZURlZmluaXRpb25Ub0NsYXNzLmxvZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMmQ4Y2I3Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvY29tbW9uL2NoYW5nZURlZmluaXRpb25Ub0NsYXNzLmxvZwpAQCAtMCwwICsxLDEzIEBACitDbGVhbmluZyBvdXRwdXQgZmlsZXM6CitvdXQvcHJvZHVjdGlvbi9DaGFuZ2VEZWZpbml0aW9uVG9DbGFzcy9TZXJ2ZXIuY2xhc3MKK0VuZCBvZiBmaWxlcworQ29tcGlsaW5nIGZpbGVzOgorc3JjL1NlcnZlci5qYXZhCitFbmQgb2YgZmlsZXMKK0NsZWFuaW5nIG91dHB1dCBmaWxlczoKK291dC9wcm9kdWN0aW9uL0NoYW5nZURlZmluaXRpb25Ub0NsYXNzL0NsaWVudCQxLmNsYXNzCitvdXQvcHJvZHVjdGlvbi9DaGFuZ2VEZWZpbml0aW9uVG9DbGFzcy9DbGllbnQuY2xhc3MKK0VuZCBvZiBmaWxlcworQ29tcGlsaW5nIGZpbGVzOgorc3JjL0NsaWVudC5qYXZhCitFbmQgb2YgZmlsZXMKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2NvbW1vbi9jaGFuZ2VEZWZpbml0aW9uVG9DbGFzcy9TZXJ2ZXIuamF2YS5uZXcgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9jb21tb24vY2hhbmdlRGVmaW5pdGlvblRvQ2xhc3MvU2VydmVyLmphdmEubmV3Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQxMWE0NjkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9jb21tb24vY2hhbmdlRGVmaW5pdGlvblRvQ2xhc3MvU2VydmVyLmphdmEubmV3CkBAIC0wLDAgKzEsMyBAQAorYWJzdHJhY3QgY2xhc3MgU2VydmVyeworICBwdWJsaWMgYWJzdHJhY3Qgdm9pZCBmb28oKTsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9jb21tb24vY2hhbmdlRGVmaW5pdGlvblRvQ2xhc3Mvc3JjL0NsaWVudC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvY29tbW9uL2NoYW5nZURlZmluaXRpb25Ub0NsYXNzL3NyYy9DbGllbnQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NmZkYzc4Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvY29tbW9uL2NoYW5nZURlZmluaXRpb25Ub0NsYXNzL3NyYy9DbGllbnQuamF2YQpAQCAtMCwwICsxLDEwIEBACitjbGFzcyBDbGllbnR7CisgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKyAgICBTZXJ2ZXIgc2VydmVyID0gbmV3IFNlcnZlcigpIHsKKyAgICAgIHB1YmxpYyB2b2lkIGZvbygpIHsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJmb28gY2FsbGVkIik7CisgICAgICB9CisgICAgfTsKKyAgICBzZXJ2ZXIuZm9vKCk7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9jb21tb24vY2hhbmdlRGVmaW5pdGlvblRvQ2xhc3Mvc3JjL1NlcnZlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvY29tbW9uL2NoYW5nZURlZmluaXRpb25Ub0NsYXNzL3NyYy9TZXJ2ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NzE4MDA3Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvY29tbW9uL2NoYW5nZURlZmluaXRpb25Ub0NsYXNzL3NyYy9TZXJ2ZXIuamF2YQpAQCAtMCwwICsxLDMgQEAKK2ludGVyZmFjZSBTZXJ2ZXJ7CisgIHB1YmxpYyB2b2lkIGZvbygpOworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2NvbW1vbi9jaGFuZ2VEZWZpbml0aW9uVG9DbGFzczIubG9nIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvY29tbW9uL2NoYW5nZURlZmluaXRpb25Ub0NsYXNzMi5sb2cKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmNhOGFiMgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2NvbW1vbi9jaGFuZ2VEZWZpbml0aW9uVG9DbGFzczIubG9nCkBAIC0wLDAgKzEsMTUgQEAKK0NsZWFuaW5nIG91dHB1dCBmaWxlczoKK291dC9wcm9kdWN0aW9uL0NoYW5nZURlZmluaXRpb25Ub0NsYXNzMi9TZXJ2ZXIuY2xhc3MKK0VuZCBvZiBmaWxlcworQ29tcGlsaW5nIGZpbGVzOgorc3JjL1NlcnZlci5qYXZhCitFbmQgb2YgZmlsZXMKK0NsZWFuaW5nIG91dHB1dCBmaWxlczoKK291dC9wcm9kdWN0aW9uL0NoYW5nZURlZmluaXRpb25Ub0NsYXNzMi9DbGllbnQuY2xhc3MKK291dC9wcm9kdWN0aW9uL0NoYW5nZURlZmluaXRpb25Ub0NsYXNzMi9GYWN0b3J5JDEuY2xhc3MKK291dC9wcm9kdWN0aW9uL0NoYW5nZURlZmluaXRpb25Ub0NsYXNzMi9GYWN0b3J5LmNsYXNzCitFbmQgb2YgZmlsZXMKK0NvbXBpbGluZyBmaWxlczoKK3NyYy9DbGllbnQuamF2YQorc3JjL0ZhY3RvcnkuamF2YQorRW5kIG9mIGZpbGVzCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9jb21tb24vY2hhbmdlRGVmaW5pdGlvblRvQ2xhc3MyL1NlcnZlci5qYXZhLm5ldyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2NvbW1vbi9jaGFuZ2VEZWZpbml0aW9uVG9DbGFzczIvU2VydmVyLmphdmEubmV3Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQxMWE0NjkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9jb21tb24vY2hhbmdlRGVmaW5pdGlvblRvQ2xhc3MyL1NlcnZlci5qYXZhLm5ldwpAQCAtMCwwICsxLDMgQEAKK2Fic3RyYWN0IGNsYXNzIFNlcnZlcnsKKyAgcHVibGljIGFic3RyYWN0IHZvaWQgZm9vKCk7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvY29tbW9uL2NoYW5nZURlZmluaXRpb25Ub0NsYXNzMi9zcmMvQ2xpZW50LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9jb21tb24vY2hhbmdlRGVmaW5pdGlvblRvQ2xhc3MyL3NyYy9DbGllbnQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zODg1ZTM4Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvY29tbW9uL2NoYW5nZURlZmluaXRpb25Ub0NsYXNzMi9zcmMvQ2xpZW50LmphdmEKQEAgLTAsMCArMSw2IEBACitjbGFzcyBDbGllbnR7CisgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKyAgICBTZXJ2ZXIgc2VydmVyID0gRmFjdG9yeS5jcmVhdGVTZXJ2ZXIoKTsKKyAgICBzZXJ2ZXIuZm9vKCk7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9jb21tb24vY2hhbmdlRGVmaW5pdGlvblRvQ2xhc3MyL3NyYy9GYWN0b3J5LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9jb21tb24vY2hhbmdlRGVmaW5pdGlvblRvQ2xhc3MyL3NyYy9GYWN0b3J5LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGU3OGNmNAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2NvbW1vbi9jaGFuZ2VEZWZpbml0aW9uVG9DbGFzczIvc3JjL0ZhY3RvcnkuamF2YQpAQCAtMCwwICsxLDkgQEAKK2NsYXNzIEZhY3RvcnkgeworICBwdWJsaWMgc3RhdGljIFNlcnZlciBjcmVhdGVTZXJ2ZXIoKSB7CisgICAgcmV0dXJuIG5ldyBTZXJ2ZXIoKSB7CisgICAgICBwdWJsaWMgdm9pZCBmb28oKSB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiZm9vKCkgY2FsbGVkIik7CisgICAgICB9CisgICAgfTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2NvbW1vbi9jaGFuZ2VEZWZpbml0aW9uVG9DbGFzczIvc3JjL1NlcnZlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvY29tbW9uL2NoYW5nZURlZmluaXRpb25Ub0NsYXNzMi9zcmMvU2VydmVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDcxODAwNwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2NvbW1vbi9jaGFuZ2VEZWZpbml0aW9uVG9DbGFzczIvc3JjL1NlcnZlci5qYXZhCkBAIC0wLDAgKzEsMyBAQAoraW50ZXJmYWNlIFNlcnZlcnsKKyAgcHVibGljIHZvaWQgZm9vKCk7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvY29tbW9uL2NsYXNzMkludGVyZmFjZTEubG9nIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvY29tbW9uL2NsYXNzMkludGVyZmFjZTEubG9nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM3NzA4NDUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9jb21tb24vY2xhc3MySW50ZXJmYWNlMS5sb2cKQEAgLTAsMCArMSwxNyBAQAorQ2xlYW5pbmcgb3V0cHV0IGZpbGVzOgorb3V0L3Byb2R1Y3Rpb24vQ2xhc3MySW50ZXJmYWNlMS9GYWN0b3J5LmNsYXNzCitFbmQgb2YgZmlsZXMKK0NvbXBpbGluZyBmaWxlczoKK3NyYy9GYWN0b3J5LmphdmEKK0VuZCBvZiBmaWxlcworQ2xlYW5pbmcgb3V0cHV0IGZpbGVzOgorb3V0L3Byb2R1Y3Rpb24vQ2xhc3MySW50ZXJmYWNlMS9DbGllbnQkMS5jbGFzcworb3V0L3Byb2R1Y3Rpb24vQ2xhc3MySW50ZXJmYWNlMS9DbGllbnQuY2xhc3MKK291dC9wcm9kdWN0aW9uL0NsYXNzMkludGVyZmFjZTEvTWFpbi5jbGFzcworb3V0L3Byb2R1Y3Rpb24vQ2xhc3MySW50ZXJmYWNlMS9TdWJDbGllbnQuY2xhc3MKK0VuZCBvZiBmaWxlcworQ29tcGlsaW5nIGZpbGVzOgorc3JjL0NsaWVudC5qYXZhCitzcmMvTWFpbi5qYXZhCitzcmMvU3ViQ2xpZW50LmphdmEKK0VuZCBvZiBmaWxlcwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvY29tbW9uL2NsYXNzMkludGVyZmFjZTEvRmFjdG9yeS5qYXZhLm5ldyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2NvbW1vbi9jbGFzczJJbnRlcmZhY2UxL0ZhY3RvcnkuamF2YS5uZXcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzAyNDEwNAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2NvbW1vbi9jbGFzczJJbnRlcmZhY2UxL0ZhY3RvcnkuamF2YS5uZXcKQEAgLTAsMCArMSw0IEBACithYnN0cmFjdCBjbGFzcyBGYWN0b3J5IHsKKyAgYWJzdHJhY3QgUHJvZHVjdCBjcmVhdGUoKTsKK30KKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvY29tbW9uL2NsYXNzMkludGVyZmFjZTEvRmFjdG9yeS5qYXZhLm5ld34gYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9jb21tb24vY2xhc3MySW50ZXJmYWNlMS9GYWN0b3J5LmphdmEubmV3fgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMTA3ZTY1Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvY29tbW9uL2NsYXNzMkludGVyZmFjZTEvRmFjdG9yeS5qYXZhLm5ld34KQEAgLTAsMCArMSw0IEBACitpbnRlcmZhY2UgRmFjdG9yeSB7CisgIFByb2R1Y3QgY3JlYXRlKCk7Cit9CisKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2NvbW1vbi9jbGFzczJJbnRlcmZhY2UxL3NyYy9DbGllbnQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2NvbW1vbi9jbGFzczJJbnRlcmZhY2UxL3NyYy9DbGllbnQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ODU0ZDE4Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvY29tbW9uL2NsYXNzMkludGVyZmFjZTEvc3JjL0NsaWVudC5qYXZhCkBAIC0wLDAgKzEsOCBAQAorY2xhc3MgQ2xpZW50IHsKKyAgcHJvdGVjdGVkIEZhY3RvcnkgZmFjdG9yeSA9CisgICAgbmV3IEZhY3RvcnkoKSB7CisgICAgICBwdWJsaWMgUHJvZHVjdCBjcmVhdGUgKCkgeworICAgICAgICByZXR1cm4gbmV3IFByb2R1Y3QoImNyZWF0ZWQiKTsKKyAgICAgIH0KKyAgICB9OyAgCit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9jb21tb24vY2xhc3MySW50ZXJmYWNlMS9zcmMvRmFjdG9yeS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvY29tbW9uL2NsYXNzMkludGVyZmFjZTEvc3JjL0ZhY3RvcnkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMTA3ZTY1Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvY29tbW9uL2NsYXNzMkludGVyZmFjZTEvc3JjL0ZhY3RvcnkuamF2YQpAQCAtMCwwICsxLDQgQEAKK2ludGVyZmFjZSBGYWN0b3J5IHsKKyAgUHJvZHVjdCBjcmVhdGUoKTsKK30KKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvY29tbW9uL2NsYXNzMkludGVyZmFjZTEvc3JjL01haW4uamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2NvbW1vbi9jbGFzczJJbnRlcmZhY2UxL3NyYy9NYWluLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGM3NTM5NAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2NvbW1vbi9jbGFzczJJbnRlcmZhY2UxL3NyYy9NYWluLmphdmEKQEAgLTAsMCArMSw2IEBACitwdWJsaWMgY2xhc3MgTWFpbiB7CisgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluIChTdHJpbmdbXSBhcmdzKSB7CisgICAgICBmaW5hbCBTdWJDbGllbnQgcyA9IG5ldyBTdWJDbGllbnQgKCk7CisgICAgICBzLm1ldGhvZCAocy5mYWN0b3J5KTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvY29tbW9uL2NsYXNzMkludGVyZmFjZTEvc3JjL1Byb2R1Y3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2NvbW1vbi9jbGFzczJJbnRlcmZhY2UxL3NyYy9Qcm9kdWN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDM5NWRlNQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2NvbW1vbi9jbGFzczJJbnRlcmZhY2UxL3NyYy9Qcm9kdWN0LmphdmEKQEAgLTAsMCArMSw1IEBACitjbGFzcyBQcm9kdWN0IHsKKyAgU3RyaW5nIG5hbWU7CisgIHB1YmxpYyBQcm9kdWN0IChTdHJpbmcgbmFtZSkge3RoaXMubmFtZSA9IG5hbWU7fQorICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nICgpIHtyZXR1cm4gbmFtZTt9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9jb21tb24vY2xhc3MySW50ZXJmYWNlMS9zcmMvU3ViQ2xpZW50LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9jb21tb24vY2xhc3MySW50ZXJmYWNlMS9zcmMvU3ViQ2xpZW50LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDkyMmVjOQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2NvbW1vbi9jbGFzczJJbnRlcmZhY2UxL3NyYy9TdWJDbGllbnQuamF2YQpAQCAtMCwwICsxLDYgQEAKK2NsYXNzIFN1YkNsaWVudCBleHRlbmRzIENsaWVudCB7CisgIHZvaWQgbWV0aG9kIChmaW5hbCBGYWN0b3J5IGZhY3RvcnkpIHsKKyAgICBQcm9kdWN0IHByb2R1Y3QgPSBmYWN0b3J5LmNyZWF0ZSgpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbiAocHJvZHVjdCk7CisgIH0KK30gCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9jb21tb24vY2xhc3MySW50ZXJmYWNlMi5sb2cgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9jb21tb24vY2xhc3MySW50ZXJmYWNlMi5sb2cKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDEyMWRmNQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2NvbW1vbi9jbGFzczJJbnRlcmZhY2UyLmxvZwpAQCAtMCwwICsxLDE1IEBACitDbGVhbmluZyBvdXRwdXQgZmlsZXM6CitvdXQvcHJvZHVjdGlvbi9DbGFzczJJbnRlcmZhY2UyL0ZhY3RvcnkuY2xhc3MKK0VuZCBvZiBmaWxlcworQ29tcGlsaW5nIGZpbGVzOgorc3JjL0ZhY3RvcnkuamF2YQorRW5kIG9mIGZpbGVzCitDbGVhbmluZyBvdXRwdXQgZmlsZXM6CitvdXQvcHJvZHVjdGlvbi9DbGFzczJJbnRlcmZhY2UyL0NsaWVudCQxLmNsYXNzCitvdXQvcHJvZHVjdGlvbi9DbGFzczJJbnRlcmZhY2UyL0NsaWVudC5jbGFzcworb3V0L3Byb2R1Y3Rpb24vQ2xhc3MySW50ZXJmYWNlMi9TdWJDbGllbnQuY2xhc3MKK0VuZCBvZiBmaWxlcworQ29tcGlsaW5nIGZpbGVzOgorc3JjL0NsaWVudC5qYXZhCitzcmMvU3ViQ2xpZW50LmphdmEKK0VuZCBvZiBmaWxlcwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvY29tbW9uL2NsYXNzMkludGVyZmFjZTIvRmFjdG9yeS5qYXZhLm5ldyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2NvbW1vbi9jbGFzczJJbnRlcmZhY2UyL0ZhY3RvcnkuamF2YS5uZXcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzAyNDEwNAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2NvbW1vbi9jbGFzczJJbnRlcmZhY2UyL0ZhY3RvcnkuamF2YS5uZXcKQEAgLTAsMCArMSw0IEBACithYnN0cmFjdCBjbGFzcyBGYWN0b3J5IHsKKyAgYWJzdHJhY3QgUHJvZHVjdCBjcmVhdGUoKTsKK30KKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvY29tbW9uL2NsYXNzMkludGVyZmFjZTIvc3JjL0NsaWVudC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvY29tbW9uL2NsYXNzMkludGVyZmFjZTIvc3JjL0NsaWVudC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU4NTRkMTgKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9jb21tb24vY2xhc3MySW50ZXJmYWNlMi9zcmMvQ2xpZW50LmphdmEKQEAgLTAsMCArMSw4IEBACitjbGFzcyBDbGllbnQgeworICBwcm90ZWN0ZWQgRmFjdG9yeSBmYWN0b3J5ID0KKyAgICBuZXcgRmFjdG9yeSgpIHsKKyAgICAgIHB1YmxpYyBQcm9kdWN0IGNyZWF0ZSAoKSB7CisgICAgICAgIHJldHVybiBuZXcgUHJvZHVjdCgiY3JlYXRlZCIpOworICAgICAgfQorICAgIH07ICAKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2NvbW1vbi9jbGFzczJJbnRlcmZhY2UyL3NyYy9GYWN0b3J5LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9jb21tb24vY2xhc3MySW50ZXJmYWNlMi9zcmMvRmFjdG9yeS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAxMDdlNjUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9jb21tb24vY2xhc3MySW50ZXJmYWNlMi9zcmMvRmFjdG9yeS5qYXZhCkBAIC0wLDAgKzEsNCBAQAoraW50ZXJmYWNlIEZhY3RvcnkgeworICBQcm9kdWN0IGNyZWF0ZSgpOworfQorCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9jb21tb24vY2xhc3MySW50ZXJmYWNlMi9zcmMvTWFpbi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvY29tbW9uL2NsYXNzMkludGVyZmFjZTIvc3JjL01haW4uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NmE2YWViCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvY29tbW9uL2NsYXNzMkludGVyZmFjZTIvc3JjL01haW4uamF2YQpAQCAtMCwwICsxLDYgQEAKK3B1YmxpYyBjbGFzcyBNYWluIHsKKyAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4gKFN0cmluZ1tdIGFyZ3MpIHsKKyAgICAgIGZpbmFsIFN1YkNsaWVudCBzID0gbmV3IFN1YkNsaWVudCAoKTsKKyAgICAgIHMubWV0aG9kICgpOworICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9jb21tb24vY2xhc3MySW50ZXJmYWNlMi9zcmMvUHJvZHVjdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvY29tbW9uL2NsYXNzMkludGVyZmFjZTIvc3JjL1Byb2R1Y3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMzk1ZGU1Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvY29tbW9uL2NsYXNzMkludGVyZmFjZTIvc3JjL1Byb2R1Y3QuamF2YQpAQCAtMCwwICsxLDUgQEAKK2NsYXNzIFByb2R1Y3QgeworICBTdHJpbmcgbmFtZTsKKyAgcHVibGljIFByb2R1Y3QgKFN0cmluZyBuYW1lKSB7dGhpcy5uYW1lID0gbmFtZTt9CisgIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcgKCkge3JldHVybiBuYW1lO30KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2NvbW1vbi9jbGFzczJJbnRlcmZhY2UyL3NyYy9TdWJDbGllbnQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2NvbW1vbi9jbGFzczJJbnRlcmZhY2UyL3NyYy9TdWJDbGllbnQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOGQ5YjI5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvY29tbW9uL2NsYXNzMkludGVyZmFjZTIvc3JjL1N1YkNsaWVudC5qYXZhCkBAIC0wLDAgKzEsNiBAQAorY2xhc3MgU3ViQ2xpZW50IGV4dGVuZHMgQ2xpZW50IHsKKyAgdm9pZCBtZXRob2QgKCkgeworICAgIFByb2R1Y3QgcHJvZHVjdCA9IGZhY3RvcnkuY3JlYXRlKCk7CisgICAgU3lzdGVtLm91dC5wcmludGxuIChwcm9kdWN0KTsKKyAgfQorfSAKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2NvbW1vbi9jbGFzczJJbnRlcmZhY2UzLmxvZyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2NvbW1vbi9jbGFzczJJbnRlcmZhY2UzLmxvZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZGM4ZTcyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvY29tbW9uL2NsYXNzMkludGVyZmFjZTMubG9nCkBAIC0wLDAgKzEsMTUgQEAKK0NsZWFuaW5nIG91dHB1dCBmaWxlczoKK291dC9wcm9kdWN0aW9uL0NsYXNzMkludGVyZmFjZTMvRmFjdG9yeS5jbGFzcworRW5kIG9mIGZpbGVzCitDb21waWxpbmcgZmlsZXM6CitzcmMvRmFjdG9yeS5qYXZhCitFbmQgb2YgZmlsZXMKK0NsZWFuaW5nIG91dHB1dCBmaWxlczoKK291dC9wcm9kdWN0aW9uL0NsYXNzMkludGVyZmFjZTMvQ2xpZW50JDEuY2xhc3MKK291dC9wcm9kdWN0aW9uL0NsYXNzMkludGVyZmFjZTMvQ2xpZW50LmNsYXNzCitvdXQvcHJvZHVjdGlvbi9DbGFzczJJbnRlcmZhY2UzL1N1YkNsaWVudC5jbGFzcworRW5kIG9mIGZpbGVzCitDb21waWxpbmcgZmlsZXM6CitzcmMvQ2xpZW50LmphdmEKK3NyYy9TdWJDbGllbnQuamF2YQorRW5kIG9mIGZpbGVzCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9jb21tb24vY2xhc3MySW50ZXJmYWNlMy9GYWN0b3J5LmphdmEubmV3IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvY29tbW9uL2NsYXNzMkludGVyZmFjZTMvRmFjdG9yeS5qYXZhLm5ldwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMDI0MTA0Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvY29tbW9uL2NsYXNzMkludGVyZmFjZTMvRmFjdG9yeS5qYXZhLm5ldwpAQCAtMCwwICsxLDQgQEAKK2Fic3RyYWN0IGNsYXNzIEZhY3RvcnkgeworICBhYnN0cmFjdCBQcm9kdWN0IGNyZWF0ZSgpOworfQorCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9jb21tb24vY2xhc3MySW50ZXJmYWNlMy9zcmMvQ2xpZW50LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9jb21tb24vY2xhc3MySW50ZXJmYWNlMy9zcmMvQ2xpZW50LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTk3ZGQ3YwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2NvbW1vbi9jbGFzczJJbnRlcmZhY2UzL3NyYy9DbGllbnQuamF2YQpAQCAtMCwwICsxLDEwIEBACitjbGFzcyBDbGllbnQgeworICAgIHByb3RlY3RlZCBGYWN0b3J5IGdldEZhY3RvcnkgKCkgeworICAgICAgcmV0dXJuCisgICAgICAgIG5ldyBGYWN0b3J5KCkgeworICAgICAgICAgIHB1YmxpYyBQcm9kdWN0IGNyZWF0ZSAoKSB7CisgICAgICAgICAgICByZXR1cm4gbmV3IFByb2R1Y3QoImNyZWF0ZWQiKTsKKyAgICAgICAgICB9CisgICAgICAgIH07ICAKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9jb21tb24vY2xhc3MySW50ZXJmYWNlMy9zcmMvRmFjdG9yeS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvY29tbW9uL2NsYXNzMkludGVyZmFjZTMvc3JjL0ZhY3RvcnkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMTA3ZTY1Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvY29tbW9uL2NsYXNzMkludGVyZmFjZTMvc3JjL0ZhY3RvcnkuamF2YQpAQCAtMCwwICsxLDQgQEAKK2ludGVyZmFjZSBGYWN0b3J5IHsKKyAgUHJvZHVjdCBjcmVhdGUoKTsKK30KKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvY29tbW9uL2NsYXNzMkludGVyZmFjZTMvc3JjL01haW4uamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2NvbW1vbi9jbGFzczJJbnRlcmZhY2UzL3NyYy9NYWluLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDZhNmFlYgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2NvbW1vbi9jbGFzczJJbnRlcmZhY2UzL3NyYy9NYWluLmphdmEKQEAgLTAsMCArMSw2IEBACitwdWJsaWMgY2xhc3MgTWFpbiB7CisgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluIChTdHJpbmdbXSBhcmdzKSB7CisgICAgICBmaW5hbCBTdWJDbGllbnQgcyA9IG5ldyBTdWJDbGllbnQgKCk7CisgICAgICBzLm1ldGhvZCAoKTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvY29tbW9uL2NsYXNzMkludGVyZmFjZTMvc3JjL1Byb2R1Y3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2NvbW1vbi9jbGFzczJJbnRlcmZhY2UzL3NyYy9Qcm9kdWN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDM5NWRlNQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2NvbW1vbi9jbGFzczJJbnRlcmZhY2UzL3NyYy9Qcm9kdWN0LmphdmEKQEAgLTAsMCArMSw1IEBACitjbGFzcyBQcm9kdWN0IHsKKyAgU3RyaW5nIG5hbWU7CisgIHB1YmxpYyBQcm9kdWN0IChTdHJpbmcgbmFtZSkge3RoaXMubmFtZSA9IG5hbWU7fQorICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nICgpIHtyZXR1cm4gbmFtZTt9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9jb21tb24vY2xhc3MySW50ZXJmYWNlMy9zcmMvU3ViQ2xpZW50LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9jb21tb24vY2xhc3MySW50ZXJmYWNlMy9zcmMvU3ViQ2xpZW50LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDVhZTg3NAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2NvbW1vbi9jbGFzczJJbnRlcmZhY2UzL3NyYy9TdWJDbGllbnQuamF2YQpAQCAtMCwwICsxLDYgQEAKK2NsYXNzIFN1YkNsaWVudCBleHRlbmRzIENsaWVudCB7CisgIHZvaWQgbWV0aG9kICgpIHsKKyAgICBQcm9kdWN0IHByb2R1Y3QgPSBnZXRGYWN0b3J5KCkuY3JlYXRlKCk7CisgICAgU3lzdGVtLm91dC5wcmludGxuIChwcm9kdWN0KTsKKyAgfQorfSAKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2NvbW1vbi9kZWxldGVDbGFzcy5sb2cgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9jb21tb24vZGVsZXRlQ2xhc3MubG9nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc5ZGExYTZlCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvY29tbW9uL2RlbGV0ZUNsYXNzLmxvZwpAQCAtMCwwICsxLDkgQEAKK0NsZWFuaW5nIG91dHB1dCBmaWxlczoKK291dC9wcm9kdWN0aW9uL0RlbGV0ZUNsYXNzL3BhY2thZ2VBL1NlcnZlci5jbGFzcworRW5kIG9mIGZpbGVzCitDbGVhbmluZyBvdXRwdXQgZmlsZXM6CitvdXQvcHJvZHVjdGlvbi9EZWxldGVDbGFzcy9wYWNrYWdlQS9DbGllbnQuY2xhc3MKK0VuZCBvZiBmaWxlcworQ29tcGlsaW5nIGZpbGVzOgorc3JjL3BhY2thZ2VBL0NsaWVudC5qYXZhCitFbmQgb2YgZmlsZXMKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2NvbW1vbi9kZWxldGVDbGFzcy9zcmMvcGFja2FnZUEvQ2xpZW50LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9jb21tb24vZGVsZXRlQ2xhc3Mvc3JjL3BhY2thZ2VBL0NsaWVudC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNlZjU0MmYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9jb21tb24vZGVsZXRlQ2xhc3Mvc3JjL3BhY2thZ2VBL0NsaWVudC5qYXZhCkBAIC0wLDAgKzEsMTIgQEAKKy8qKgorICogY3JlYXRlZCBhdCBKYW4gMjIsIDIwMDIKKyAqIEBhdXRob3IgSmVrYQorICovCitwYWNrYWdlIHBhY2thZ2VBOworCitwdWJsaWMgY2xhc3MgQ2xpZW50IHsKKyAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworICAgIFNlcnZlciBzZXJ2ZXIgPSBuZXcgU2VydmVyKCk7CisgICAgc2VydmVyLm1ldGhvZCgpOworICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9jb21tb24vZGVsZXRlQ2xhc3Mvc3JjL3BhY2thZ2VBL1NlcnZlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvY29tbW9uL2RlbGV0ZUNsYXNzL3NyYy9wYWNrYWdlQS9TZXJ2ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MTBjODdkCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvY29tbW9uL2RlbGV0ZUNsYXNzL3NyYy9wYWNrYWdlQS9TZXJ2ZXIuamF2YQpAQCAtMCwwICsxLDExIEBACisvKioKKyAqIGNyZWF0ZWQgYXQgSmFuIDIyLCAyMDAyCisgKiBAYXV0aG9yIEpla2EKKyAqLworcGFja2FnZSBwYWNrYWdlQTsKKworcHVibGljIGNsYXNzIFNlcnZlciB7CisgIHB1YmxpYyB2b2lkIG1ldGhvZCgpIHsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlNlcnZlci5tZXRob2QiKTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvY29tbW9uL2RlbGV0ZUNsYXNzL3NyYy9wYWNrYWdlQS9TZXJ2ZXIuamF2YS5yZW1vdmUgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9jb21tb24vZGVsZXRlQ2xhc3Mvc3JjL3BhY2thZ2VBL1NlcnZlci5qYXZhLnJlbW92ZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjlkZTI5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvY29tbW9uL2RlbGV0ZUNsYXNzL3NyYy9wYWNrYWdlQS9TZXJ2ZXIuamF2YS5yZW1vdmUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2NvbW1vbi9kZWxldGVDbGFzczEubG9nIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvY29tbW9uL2RlbGV0ZUNsYXNzMS5sb2cKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGJhYmI4YQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2NvbW1vbi9kZWxldGVDbGFzczEubG9nCkBAIC0wLDAgKzEsOSBAQAorQ2xlYW5pbmcgb3V0cHV0IGZpbGVzOgorb3V0L3Byb2R1Y3Rpb24vRGVsZXRlQ2xhc3MxL3BhY2thZ2VBL1NlcnZlci5jbGFzcworRW5kIG9mIGZpbGVzCitDbGVhbmluZyBvdXRwdXQgZmlsZXM6CitvdXQvcHJvZHVjdGlvbi9EZWxldGVDbGFzczEvcGFja2FnZUEvQ2xpZW50LmNsYXNzCitFbmQgb2YgZmlsZXMKK0NvbXBpbGluZyBmaWxlczoKK3NyYy9wYWNrYWdlQS9DbGllbnQuamF2YQorRW5kIG9mIGZpbGVzCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9jb21tb24vZGVsZXRlQ2xhc3MxL3NyYy9wYWNrYWdlQS9DbGllbnQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2NvbW1vbi9kZWxldGVDbGFzczEvc3JjL3BhY2thZ2VBL0NsaWVudC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY5MWQ1YmMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9jb21tb24vZGVsZXRlQ2xhc3MxL3NyYy9wYWNrYWdlQS9DbGllbnQuamF2YQpAQCAtMCwwICsxLDUgQEAKK3BhY2thZ2UgcGFja2FnZUE7CisKK3B1YmxpYyBjbGFzcyBDbGllbnQgeworCXN0YXRpYyBDbGFzcyBjID0gbmV3IFNlcnZlcigpLmdldENsYXNzKCk7Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9jb21tb24vZGVsZXRlQ2xhc3MxL3NyYy9wYWNrYWdlQS9TZXJ2ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2NvbW1vbi9kZWxldGVDbGFzczEvc3JjL3BhY2thZ2VBL1NlcnZlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI1ZjFiZTYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9jb21tb24vZGVsZXRlQ2xhc3MxL3NyYy9wYWNrYWdlQS9TZXJ2ZXIuamF2YQpAQCAtMCwwICsxLDQgQEAKK3BhY2thZ2UgcGFja2FnZUE7CisKK3B1YmxpYyBjbGFzcyBTZXJ2ZXIgeworfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvY29tbW9uL2RlbGV0ZUNsYXNzMS9zcmMvcGFja2FnZUEvU2VydmVyLmphdmEucmVtb3ZlIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvY29tbW9uL2RlbGV0ZUNsYXNzMS9zcmMvcGFja2FnZUEvU2VydmVyLmphdmEucmVtb3ZlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2OWRlMjkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9jb21tb24vZGVsZXRlQ2xhc3MxL3NyYy9wYWNrYWdlQS9TZXJ2ZXIuamF2YS5yZW1vdmUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2NvbW1vbi9kZWxldGVDbGFzczIubG9nIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvY29tbW9uL2RlbGV0ZUNsYXNzMi5sb2cKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTdkMjk0MQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2NvbW1vbi9kZWxldGVDbGFzczIubG9nCkBAIC0wLDAgKzEsMTIgQEAKK0NsZWFuaW5nIG91dHB1dCBmaWxlczoKK291dC9wcm9kdWN0aW9uL0RlbGV0ZUNsYXNzMi9wYWNrYWdlQS9TZXJ2ZXIuY2xhc3MKK0VuZCBvZiBmaWxlcworQ29tcGlsaW5nIGZpbGVzOgorc3JjL3BhY2thZ2VBL1NlcnZlci5qYXZhCitFbmQgb2YgZmlsZXMKK0NsZWFuaW5nIG91dHB1dCBmaWxlczoKK291dC9wcm9kdWN0aW9uL0RlbGV0ZUNsYXNzMi9wYWNrYWdlQS9DbGllbnQuY2xhc3MKK0VuZCBvZiBmaWxlcworQ29tcGlsaW5nIGZpbGVzOgorc3JjL3BhY2thZ2VBL0NsaWVudC5qYXZhCitFbmQgb2YgZmlsZXMKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2NvbW1vbi9kZWxldGVDbGFzczIvc3JjL3BhY2thZ2VBL0NsaWVudC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvY29tbW9uL2RlbGV0ZUNsYXNzMi9zcmMvcGFja2FnZUEvQ2xpZW50LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2VmNTQyZgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2NvbW1vbi9kZWxldGVDbGFzczIvc3JjL3BhY2thZ2VBL0NsaWVudC5qYXZhCkBAIC0wLDAgKzEsMTIgQEAKKy8qKgorICogY3JlYXRlZCBhdCBKYW4gMjIsIDIwMDIKKyAqIEBhdXRob3IgSmVrYQorICovCitwYWNrYWdlIHBhY2thZ2VBOworCitwdWJsaWMgY2xhc3MgQ2xpZW50IHsKKyAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworICAgIFNlcnZlciBzZXJ2ZXIgPSBuZXcgU2VydmVyKCk7CisgICAgc2VydmVyLm1ldGhvZCgpOworICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9jb21tb24vZGVsZXRlQ2xhc3MyL3NyYy9wYWNrYWdlQS9TZXJ2ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2NvbW1vbi9kZWxldGVDbGFzczIvc3JjL3BhY2thZ2VBL1NlcnZlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUxNjg0MzAKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9jb21tb24vZGVsZXRlQ2xhc3MyL3NyYy9wYWNrYWdlQS9TZXJ2ZXIuamF2YQpAQCAtMCwwICsxLDcgQEAKK3BhY2thZ2UgcGFja2FnZUE7CisKK3B1YmxpYyBjbGFzcyBTZXJ2ZXIgeworICBwdWJsaWMgdm9pZCBtZXRob2QoKSB7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJTZXJ2ZXIubWV0aG9kIik7CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2NvbW1vbi9kZWxldGVDbGFzczIvc3JjL3BhY2thZ2VBL1NlcnZlci5qYXZhLm5ldyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2NvbW1vbi9kZWxldGVDbGFzczIvc3JjL3BhY2thZ2VBL1NlcnZlci5qYXZhLm5ldwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZmM4YzEyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvY29tbW9uL2RlbGV0ZUNsYXNzMi9zcmMvcGFja2FnZUEvU2VydmVyLmphdmEubmV3CkBAIC0wLDAgKzEgQEAKK3BhY2thZ2UgcGFja2FnZUE7CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9jb21tb24vZGVsZXRlQ2xhc3MzLmxvZyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2NvbW1vbi9kZWxldGVDbGFzczMubG9nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA0ZjBjZjYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9jb21tb24vZGVsZXRlQ2xhc3MzLmxvZwpAQCAtMCwwICsxLDkgQEAKK0NsZWFuaW5nIG91dHB1dCBmaWxlczoKK291dC9wcm9kdWN0aW9uL00vQS5jbGFzcworRW5kIG9mIGZpbGVzCitDb21waWxpbmcgZmlsZXM6CitNL3NyYy9BLmphdmEKK0VuZCBvZiBmaWxlcworQ2xlYW5pbmcgb3V0cHV0IGZpbGVzOgorb3V0L3Byb2R1Y3Rpb24vTi9DLmNsYXNzCitFbmQgb2YgZmlsZXMKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2NvbW1vbi9kZWxldGVDbGFzczMvLmlkZWEvbWlzYy54bWwgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9jb21tb24vZGVsZXRlQ2xhc3MzLy5pZGVhL21pc2MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY3OTgwOTYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9jb21tb24vZGVsZXRlQ2xhc3MzLy5pZGVhL21pc2MueG1sCkBAIC0wLDAgKzEsMTAgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8cHJvamVjdCB2ZXJzaW9uPSI0Ij4KKyAgPGNvbXBvbmVudCBuYW1lPSJFbnRyeVBvaW50c01hbmFnZXIiPgorICAgIDxlbnRyeV9wb2ludHMgdmVyc2lvbj0iMi4wIiAvPgorICA8L2NvbXBvbmVudD4KKyAgPGNvbXBvbmVudCBuYW1lPSJQcm9qZWN0Um9vdE1hbmFnZXIiIHZlcnNpb249IjIiIGxhbmd1YWdlTGV2ZWw9IkpES18xXzYiIGFzc2VydC1rZXl3b3JkPSJ0cnVlIiBqZGstMTU9InRydWUiIHByb2plY3QtamRrLW5hbWU9IklERUEgamRrIiBwcm9qZWN0LWpkay10eXBlPSJKYXZhU0RLIj4KKyAgICA8b3V0cHV0IHVybD0iZmlsZTovLyRQUk9KRUNUX0RJUiQvb3V0IiAvPgorICA8L2NvbXBvbmVudD4KKzwvcHJvamVjdD4KKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvY29tbW9uL2RlbGV0ZUNsYXNzMy8uaWRlYS9tb2R1bGVzLnhtbCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2NvbW1vbi9kZWxldGVDbGFzczMvLmlkZWEvbW9kdWxlcy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmIwMzYxZgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2NvbW1vbi9kZWxldGVDbGFzczMvLmlkZWEvbW9kdWxlcy54bWwKQEAgLTAsMCArMSwxMCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxwcm9qZWN0IHZlcnNpb249IjQiPgorICA8Y29tcG9uZW50IG5hbWU9IlByb2plY3RNb2R1bGVNYW5hZ2VyIj4KKyAgICA8bW9kdWxlcz4KKyAgICAgIDxtb2R1bGUgZmlsZXVybD0iZmlsZTovLyRQUk9KRUNUX0RJUiQvTS9NLmltbCIgZmlsZXBhdGg9IiRQUk9KRUNUX0RJUiQvTS9NLmltbCIgLz4KKyAgICAgIDxtb2R1bGUgZmlsZXVybD0iZmlsZTovLyRQUk9KRUNUX0RJUiQvTi9OLmltbCIgZmlsZXBhdGg9IiRQUk9KRUNUX0RJUiQvTi9OLmltbCIgLz4KKyAgICA8L21vZHVsZXM+CisgIDwvY29tcG9uZW50PgorPC9wcm9qZWN0PgorCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9jb21tb24vZGVsZXRlQ2xhc3MzL00vTS5pbWwgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9jb21tb24vZGVsZXRlQ2xhc3MzL00vTS5pbWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDVjMDc0MwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2NvbW1vbi9kZWxldGVDbGFzczMvTS9NLmltbApAQCAtMCwwICsxLDEyIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPG1vZHVsZSB0eXBlPSJKQVZBX01PRFVMRSIgdmVyc2lvbj0iNCI+CisgIDxjb21wb25lbnQgbmFtZT0iTmV3TW9kdWxlUm9vdE1hbmFnZXIiIGluaGVyaXQtY29tcGlsZXItb3V0cHV0PSJ0cnVlIj4KKyAgICA8ZXhjbHVkZS1vdXRwdXQgLz4KKyAgICA8Y29udGVudCB1cmw9ImZpbGU6Ly8kTU9EVUxFX0RJUiQiPgorICAgICAgPHNvdXJjZUZvbGRlciB1cmw9ImZpbGU6Ly8kTU9EVUxFX0RJUiQvc3JjIiBpc1Rlc3RTb3VyY2U9ImZhbHNlIiAvPgorICAgIDwvY29udGVudD4KKyAgICA8b3JkZXJFbnRyeSB0eXBlPSJpbmhlcml0ZWRKZGsiIC8+CisgICAgPG9yZGVyRW50cnkgdHlwZT0ic291cmNlRm9sZGVyIiBmb3JUZXN0cz0iZmFsc2UiIC8+CisgIDwvY29tcG9uZW50PgorPC9tb2R1bGU+CisKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2NvbW1vbi9kZWxldGVDbGFzczMvTS9zcmMvQS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvY29tbW9uL2RlbGV0ZUNsYXNzMy9NL3NyYy9BLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGVlNWQzOQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2NvbW1vbi9kZWxldGVDbGFzczMvTS9zcmMvQS5qYXZhCkBAIC0wLDAgKzEsOSBAQAorLyoqCisgKiBDcmVhdGVkIHdpdGggSW50ZWxsaUogSURFQS4KKyAqIFVzZXI6IGRiCisgKiBEYXRlOiAyMC4wMi4xMgorICogVGltZTogMTI6NDcKKyAqIFRvIGNoYW5nZSB0aGlzIHRlbXBsYXRlIHVzZSBGaWxlIHwgU2V0dGluZ3MgfCBGaWxlIFRlbXBsYXRlcy4KKyAqLworcHVibGljIGNsYXNzIEEgeworfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvY29tbW9uL2RlbGV0ZUNsYXNzMy9NL3NyYy9BLmphdmEubmV3IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvY29tbW9uL2RlbGV0ZUNsYXNzMy9NL3NyYy9BLmphdmEubmV3Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE2YmUxMjgKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9jb21tb24vZGVsZXRlQ2xhc3MzL00vc3JjL0EuamF2YS5uZXcKQEAgLTAsMCArMSwzIEBACitwdWJsaWMgY2xhc3MgQSB7CisgIHB1YmxpYyBBIChpbnQgeCkge30KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9jb21tb24vZGVsZXRlQ2xhc3MzL04vTi5pbWwgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9jb21tb24vZGVsZXRlQ2xhc3MzL04vTi5pbWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjA1ZGNhZDAKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9jb21tb24vZGVsZXRlQ2xhc3MzL04vTi5pbWwKQEAgLTAsMCArMSwxMyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxtb2R1bGUgdHlwZT0iSkFWQV9NT0RVTEUiIHZlcnNpb249IjQiPgorICA8Y29tcG9uZW50IG5hbWU9Ik5ld01vZHVsZVJvb3RNYW5hZ2VyIiBpbmhlcml0LWNvbXBpbGVyLW91dHB1dD0idHJ1ZSI+CisgICAgPGV4Y2x1ZGUtb3V0cHV0IC8+CisgICAgPGNvbnRlbnQgdXJsPSJmaWxlOi8vJE1PRFVMRV9ESVIkIj4KKyAgICAgIDxzb3VyY2VGb2xkZXIgdXJsPSJmaWxlOi8vJE1PRFVMRV9ESVIkL3NyYyIgaXNUZXN0U291cmNlPSJmYWxzZSIgLz4KKyAgICA8L2NvbnRlbnQ+CisgICAgPG9yZGVyRW50cnkgdHlwZT0iaW5oZXJpdGVkSmRrIiAvPgorICAgIDxvcmRlckVudHJ5IHR5cGU9InNvdXJjZUZvbGRlciIgZm9yVGVzdHM9ImZhbHNlIiAvPgorICAgIDxvcmRlckVudHJ5IHR5cGU9Im1vZHVsZSIgbW9kdWxlLW5hbWU9Ik0iIC8+CisgIDwvY29tcG9uZW50PgorPC9tb2R1bGU+CisKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2NvbW1vbi9kZWxldGVDbGFzczMvTi9zcmMvQy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvY29tbW9uL2RlbGV0ZUNsYXNzMy9OL3NyYy9DLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGUxODMyMgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2NvbW1vbi9kZWxldGVDbGFzczMvTi9zcmMvQy5qYXZhCkBAIC0wLDAgKzEsMTAgQEAKKy8qKgorICogQ3JlYXRlZCB3aXRoIEludGVsbGlKIElERUEuCisgKiBVc2VyOiBkYgorICogRGF0ZTogMjAuMDIuMTIKKyAqIFRpbWU6IDEyOjQ2CisgKiBUbyBjaGFuZ2UgdGhpcyB0ZW1wbGF0ZSB1c2UgRmlsZSB8IFNldHRpbmdzIHwgRmlsZSBUZW1wbGF0ZXMuCisgKi8KK3B1YmxpYyBjbGFzcyBDIHsKKyAgICBBIGEgPSBuZXcgQSgpOworfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvY29tbW9uL2RlbGV0ZUNsYXNzMy9OL3NyYy9DLmphdmEucmVtb3ZlIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvY29tbW9uL2RlbGV0ZUNsYXNzMy9OL3NyYy9DLmphdmEucmVtb3ZlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI5OTVhNGQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9jb21tb24vZGVsZXRlQ2xhc3MzL04vc3JjL0MuamF2YS5yZW1vdmUKQEAgLTAsMCArMSBAQAorZHVtbXkKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9jb21tb24vZGVsZXRlQ2xhc3M0LmxvZyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2NvbW1vbi9kZWxldGVDbGFzczQubG9nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUyYzZiYzIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9jb21tb24vZGVsZXRlQ2xhc3M0LmxvZwpAQCAtMCwwICsxLDkgQEAKK0NsZWFuaW5nIG91dHB1dCBmaWxlczoKK291dC9wcm9kdWN0aW9uL0RlbGV0ZUNsYXNzNC9BLmNsYXNzCitFbmQgb2YgZmlsZXMKK0NsZWFuaW5nIG91dHB1dCBmaWxlczoKK291dC9wcm9kdWN0aW9uL0RlbGV0ZUNsYXNzNC9CLmNsYXNzCitFbmQgb2YgZmlsZXMKK0NvbXBpbGluZyBmaWxlczoKK3NyYy9CLmphdmEKK0VuZCBvZiBmaWxlcwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvY29tbW9uL2RlbGV0ZUNsYXNzNC9BLmphdmEucmVtb3ZlIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvY29tbW9uL2RlbGV0ZUNsYXNzNC9BLmphdmEucmVtb3ZlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM2MWY0YTcKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9jb21tb24vZGVsZXRlQ2xhc3M0L0EuamF2YS5yZW1vdmUKQEAgLTAsMCArMSBAQAorPGR1bW15PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2NvbW1vbi9kZWxldGVDbGFzczQvc3JjL0EuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2NvbW1vbi9kZWxldGVDbGFzczQvc3JjL0EuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZWIzYzBlCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvY29tbW9uL2RlbGV0ZUNsYXNzNC9zcmMvQS5qYXZhCkBAIC0wLDAgKzEsMyBAQAorcHVibGljIGNsYXNzIEEgeworCit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvY29tbW9uL2RlbGV0ZUNsYXNzNC9zcmMvQi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvY29tbW9uL2RlbGV0ZUNsYXNzNC9zcmMvQi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM4YjQ5ZDMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9jb21tb24vZGVsZXRlQ2xhc3M0L3NyYy9CLmphdmEKQEAgLTAsMCArMSw1IEBACitwdWJsaWMgY2xhc3MgQiB7CisgIENsYXNzIGZvbyAoKSB7CisgICAgcmV0dXJuIEEuY2xhc3M7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9jb21tb24vZGVsZXRlQ2xhc3NBZnRlckNvbXBpbGVFcnJvcnMubG9nIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvY29tbW9uL2RlbGV0ZUNsYXNzQWZ0ZXJDb21waWxlRXJyb3JzLmxvZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNGQzNzczCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvY29tbW9uL2RlbGV0ZUNsYXNzQWZ0ZXJDb21waWxlRXJyb3JzLmxvZwpAQCAtMCwwICsxLDEyIEBACitDbGVhbmluZyBvdXRwdXQgZmlsZXM6CitvdXQvcHJvZHVjdGlvbi9EZWxldGVDbGFzc0FmdGVyQ29tcGlsZUVycm9ycy9wYWNrYWdlQS9TZXJ2ZXIuY2xhc3MKK0VuZCBvZiBmaWxlcworQ29tcGlsaW5nIGZpbGVzOgorc3JjL3BhY2thZ2VBL1NlcnZlci5qYXZhCitFbmQgb2YgZmlsZXMKK0NsZWFuaW5nIG91dHB1dCBmaWxlczoKK291dC9wcm9kdWN0aW9uL0RlbGV0ZUNsYXNzQWZ0ZXJDb21waWxlRXJyb3JzL3BhY2thZ2VBL0NsaWVudC5jbGFzcworRW5kIG9mIGZpbGVzCitDb21waWxpbmcgZmlsZXM6CitzcmMvcGFja2FnZUEvQ2xpZW50LmphdmEKK0VuZCBvZiBmaWxlcwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvY29tbW9uL2RlbGV0ZUNsYXNzQWZ0ZXJDb21waWxlRXJyb3JzL3NyYy9wYWNrYWdlQS9DbGllbnQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2NvbW1vbi9kZWxldGVDbGFzc0FmdGVyQ29tcGlsZUVycm9ycy9zcmMvcGFja2FnZUEvQ2xpZW50LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmQ2ODY5YgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2NvbW1vbi9kZWxldGVDbGFzc0FmdGVyQ29tcGlsZUVycm9ycy9zcmMvcGFja2FnZUEvQ2xpZW50LmphdmEKQEAgLTAsMCArMSw5IEBACitwYWNrYWdlIHBhY2thZ2VBOworCitwdWJsaWMgY2xhc3MgQ2xpZW50IHsKKworICBwdWJsaWMgdm9pZCBtZXRob2QoU2VydmVyIHNlcnZlcikgeworICAgIHNlcnZlci5tZXRob2QoKTsKKyAgfQorCit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9jb21tb24vZGVsZXRlQ2xhc3NBZnRlckNvbXBpbGVFcnJvcnMvc3JjL3BhY2thZ2VBL1NlcnZlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvY29tbW9uL2RlbGV0ZUNsYXNzQWZ0ZXJDb21waWxlRXJyb3JzL3NyYy9wYWNrYWdlQS9TZXJ2ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MTY4NDMwCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvY29tbW9uL2RlbGV0ZUNsYXNzQWZ0ZXJDb21waWxlRXJyb3JzL3NyYy9wYWNrYWdlQS9TZXJ2ZXIuamF2YQpAQCAtMCwwICsxLDcgQEAKK3BhY2thZ2UgcGFja2FnZUE7CisKK3B1YmxpYyBjbGFzcyBTZXJ2ZXIgeworICBwdWJsaWMgdm9pZCBtZXRob2QoKSB7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJTZXJ2ZXIubWV0aG9kIik7CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2NvbW1vbi9kZWxldGVDbGFzc0FmdGVyQ29tcGlsZUVycm9ycy9zcmMvcGFja2FnZUEvU2VydmVyLmphdmEubmV3IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvY29tbW9uL2RlbGV0ZUNsYXNzQWZ0ZXJDb21waWxlRXJyb3JzL3NyYy9wYWNrYWdlQS9TZXJ2ZXIuamF2YS5uZXcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmRkMDcxMgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2NvbW1vbi9kZWxldGVDbGFzc0FmdGVyQ29tcGlsZUVycm9ycy9zcmMvcGFja2FnZUEvU2VydmVyLmphdmEubmV3CkBAIC0wLDAgKzEsNyBAQAorcGFja2FnZSBwYWNrYWdlQTsKKworcHVibGljIGNsYXNzIFNlcnZlciB7CisgIHB1YmxpYyB2b2lkIG1ldGhvZCgpIHsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlNlcnZlci5tZXRob2QiKTsgPHNvbWUtZXJyb3IhPgorICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9jb21tb24vZGVsZXRlQ2xhc3NBZnRlckNvbXBpbGVFcnJvcnMvc3JjL3BhY2thZ2VBL1NlcnZlci5qYXZhLnJlbW92ZTEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9jb21tb24vZGVsZXRlQ2xhc3NBZnRlckNvbXBpbGVFcnJvcnMvc3JjL3BhY2thZ2VBL1NlcnZlci5qYXZhLnJlbW92ZTEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY5ZGUyOQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2NvbW1vbi9kZWxldGVDbGFzc0FmdGVyQ29tcGlsZUVycm9ycy9zcmMvcGFja2FnZUEvU2VydmVyLmphdmEucmVtb3ZlMQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvY29tbW9uL2RlbGV0ZUNsYXNzUGFja2FnZURvZXNudE1hdGNoUm9vdC5sb2cgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9jb21tb24vZGVsZXRlQ2xhc3NQYWNrYWdlRG9lc250TWF0Y2hSb290LmxvZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYTg4YWY4Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvY29tbW9uL2RlbGV0ZUNsYXNzUGFja2FnZURvZXNudE1hdGNoUm9vdC5sb2cKQEAgLTAsMCArMSwxMCBAQAorQ2xlYW5pbmcgb3V0cHV0IGZpbGVzOgorb3V0L3Byb2R1Y3Rpb24vRGVsZXRlQ2xhc3NQYWNrYWdlRG9lc250TWF0Y2hSb290L3BwcC9TZXJ2ZXIkMS5jbGFzcworb3V0L3Byb2R1Y3Rpb24vRGVsZXRlQ2xhc3NQYWNrYWdlRG9lc250TWF0Y2hSb290L3BwcC9TZXJ2ZXIuY2xhc3MKK0VuZCBvZiBmaWxlcworQ2xlYW5pbmcgb3V0cHV0IGZpbGVzOgorb3V0L3Byb2R1Y3Rpb24vRGVsZXRlQ2xhc3NQYWNrYWdlRG9lc250TWF0Y2hSb290L2NsaWVudFBhY2thZ2UvQ2xpZW50LmNsYXNzCitFbmQgb2YgZmlsZXMKK0NvbXBpbGluZyBmaWxlczoKK3NyYy9wYWNrYWdlQS9DbGllbnQuamF2YQorRW5kIG9mIGZpbGVzCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9jb21tb24vZGVsZXRlQ2xhc3NQYWNrYWdlRG9lc250TWF0Y2hSb290L2RhdGEueG1sIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvY29tbW9uL2RlbGV0ZUNsYXNzUGFja2FnZURvZXNudE1hdGNoUm9vdC9kYXRhLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOGJjZjZkCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvY29tbW9uL2RlbGV0ZUNsYXNzUGFja2FnZURvZXNudE1hdGNoUm9vdC9kYXRhLnhtbApAQCAtMCwwICsxLDE3IEBACis8dGVzdERhdGE+CisKKyAgPGRlbGV0ZT4KKyAgICA8ZmlsZSBwYXRoPSJzb3VyY2UvcGFja2FnZUEvU2VydmVyLmphdmEiIC8+CisgIDwvZGVsZXRlPgorCisgIDxkZWxldGVkX2J5X21ha2U+CisgICAgPGZpbGUgcGF0aD0iY2xhc3Nlcy9wcHAvU2VydmVyLmNsYXNzIiAvPgorICAgIDxmaWxlIHBhdGg9ImNsYXNzZXMvcHBwL1NlcnZlciQxLmNsYXNzIiAvPgorICAgIDxmaWxlIHBhdGg9ImNsYXNzZXMvY2xpZW50UGFja2FnZS9DbGllbnQuY2xhc3MiIC8+CisgIDwvZGVsZXRlZF9ieV9tYWtlPgorCisgIDxyZWNvbXBpbGU+CisgICAgPGZpbGUgcGF0aD0ic291cmNlL3BhY2thZ2VBL0NsaWVudC5qYXZhIiAvPgorICA8L3JlY29tcGlsZT4KKworPC90ZXN0RGF0YT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9jb21tb24vZGVsZXRlQ2xhc3NQYWNrYWdlRG9lc250TWF0Y2hSb290L3NyYy9wYWNrYWdlQS9DbGllbnQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2NvbW1vbi9kZWxldGVDbGFzc1BhY2thZ2VEb2VzbnRNYXRjaFJvb3Qvc3JjL3BhY2thZ2VBL0NsaWVudC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEzMjE4OWIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9jb21tb24vZGVsZXRlQ2xhc3NQYWNrYWdlRG9lc250TWF0Y2hSb290L3NyYy9wYWNrYWdlQS9DbGllbnQuamF2YQpAQCAtMCwwICsxLDEzIEBACisvKioKKyAqIGNyZWF0ZWQgYXQgSmFuIDIyLCAyMDAyCisgKiBAYXV0aG9yIEpla2EKKyAqLworcGFja2FnZSBjbGllbnRQYWNrYWdlOworaW1wb3J0IHBwcC4qOworCitwdWJsaWMgY2xhc3MgQ2xpZW50IHsKKyAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworICAgIFNlcnZlciBzZXJ2ZXIgPSBuZXcgU2VydmVyKCk7CisgICAgc2VydmVyLm1ldGhvZCgpOworICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9jb21tb24vZGVsZXRlQ2xhc3NQYWNrYWdlRG9lc250TWF0Y2hSb290L3NyYy9wYWNrYWdlQS9TZXJ2ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2NvbW1vbi9kZWxldGVDbGFzc1BhY2thZ2VEb2VzbnRNYXRjaFJvb3Qvc3JjL3BhY2thZ2VBL1NlcnZlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBmODA1Y2EKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9jb21tb24vZGVsZXRlQ2xhc3NQYWNrYWdlRG9lc250TWF0Y2hSb290L3NyYy9wYWNrYWdlQS9TZXJ2ZXIuamF2YQpAQCAtMCwwICsxLDE1IEBACisvKioKKyAqIGNyZWF0ZWQgYXQgSmFuIDIyLCAyMDAyCisgKiBAYXV0aG9yIEpla2EKKyAqLworcGFja2FnZSBwcHA7CisKK3B1YmxpYyBjbGFzcyBTZXJ2ZXIgeworICBwdWJsaWMgdm9pZCBtZXRob2QoKSB7CisgICAgbmV3IFJ1bm5hYmxlKCl7CisgICAgICBwdWJsaWMgdm9pZCBydW4oKSB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU2VydmVyLm1ldGhvZCIpOworICAgICAgfQorICAgIH0ucnVuKCk7CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2NvbW1vbi9kZWxldGVDbGFzc1BhY2thZ2VEb2VzbnRNYXRjaFJvb3Qvc3JjL3BhY2thZ2VBL1NlcnZlci5qYXZhLnJlbW92ZSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2NvbW1vbi9kZWxldGVDbGFzc1BhY2thZ2VEb2VzbnRNYXRjaFJvb3Qvc3JjL3BhY2thZ2VBL1NlcnZlci5qYXZhLnJlbW92ZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjlkZTI5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvY29tbW9uL2RlbGV0ZUNsYXNzUGFja2FnZURvZXNudE1hdGNoUm9vdC9zcmMvcGFja2FnZUEvU2VydmVyLmphdmEucmVtb3ZlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9jb21tb24vZGVwZW5kZW5jeVVwZGF0ZS5sb2cgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9jb21tb24vZGVwZW5kZW5jeVVwZGF0ZS5sb2cKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGYxMmZmYQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2NvbW1vbi9kZXBlbmRlbmN5VXBkYXRlLmxvZwpAQCAtMCwwICsxLDE0IEBACitDbGVhbmluZyBvdXRwdXQgZmlsZXM6CitvdXQvcHJvZHVjdGlvbi9EZXBlbmRlbmN5VXBkYXRlL0EuY2xhc3MKK291dC9wcm9kdWN0aW9uL0RlcGVuZGVuY3lVcGRhdGUvRS5jbGFzcworRW5kIG9mIGZpbGVzCitDb21waWxpbmcgZmlsZXM6CitzcmMvQS5qYXZhCitzcmMvRS5qYXZhCitFbmQgb2YgZmlsZXMKK0NsZWFuaW5nIG91dHB1dCBmaWxlczoKK291dC9wcm9kdWN0aW9uL0RlcGVuZGVuY3lVcGRhdGUvQi5jbGFzcworRW5kIG9mIGZpbGVzCitDb21waWxpbmcgZmlsZXM6CitzcmMvQi5qYXZhCitFbmQgb2YgZmlsZXMKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2NvbW1vbi9kZXBlbmRlbmN5VXBkYXRlL0EuamF2YS5uZXcgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9jb21tb24vZGVwZW5kZW5jeVVwZGF0ZS9BLmphdmEubmV3Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg0ZTVmNDMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9jb21tb24vZGVwZW5kZW5jeVVwZGF0ZS9BLmphdmEubmV3CkBAIC0wLDAgKzEsMyBAQAoraW50ZXJmYWNlIEEgeworCit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvY29tbW9uL2RlcGVuZGVuY3lVcGRhdGUvRS5qYXZhLm5ldyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2NvbW1vbi9kZXBlbmRlbmN5VXBkYXRlL0UuamF2YS5uZXcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjgyNjJiY2QKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9jb21tb24vZGVwZW5kZW5jeVVwZGF0ZS9FLmphdmEubmV3CkBAIC0wLDAgKzEsNSBAQAorY2xhc3MgRSB7CisgIEEgZiAoKSB7CisgICAgcmV0dXJuIG5ldyBBKCl7fTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2NvbW1vbi9kZXBlbmRlbmN5VXBkYXRlL3NyYy9BLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9jb21tb24vZGVwZW5kZW5jeVVwZGF0ZS9zcmMvQS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFiNDU2OGEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9jb21tb24vZGVwZW5kZW5jeVVwZGF0ZS9zcmMvQS5qYXZhCkBAIC0wLDAgKzEsMyBAQAorY2xhc3MgQSB7CisKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9jb21tb24vZGVwZW5kZW5jeVVwZGF0ZS9zcmMvQi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvY29tbW9uL2RlcGVuZGVuY3lVcGRhdGUvc3JjL0IuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNjgxNTM5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvY29tbW9uL2RlcGVuZGVuY3lVcGRhdGUvc3JjL0IuamF2YQpAQCAtMCwwICsxLDMgQEAKK2NsYXNzIEI8VCBleHRlbmRzIEE+eworCit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvY29tbW9uL2RlcGVuZGVuY3lVcGRhdGUvc3JjL0UuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2NvbW1vbi9kZXBlbmRlbmN5VXBkYXRlL3NyYy9FLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTc1Njk5YQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2NvbW1vbi9kZXBlbmRlbmN5VXBkYXRlL3NyYy9FLmphdmEKQEAgLTAsMCArMSw1IEBACitjbGFzcyBFIHsKKyAgQSBmICgpIHsKKyAgICByZXR1cm4gbmV3IEEoKTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2NvbW1vbi9pbm5lci5sb2cgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9jb21tb24vaW5uZXIubG9nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYwYWM4NzgKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9jb21tb24vaW5uZXIubG9nCkBAIC0wLDAgKzEsMTMgQEAKK0NsZWFuaW5nIG91dHB1dCBmaWxlczoKK291dC9wcm9kdWN0aW9uL0lubmVyL1NlcnZlci5jbGFzcworRW5kIG9mIGZpbGVzCitDb21waWxpbmcgZmlsZXM6CitzcmMvU2VydmVyLmphdmEKK0VuZCBvZiBmaWxlcworQ2xlYW5pbmcgb3V0cHV0IGZpbGVzOgorb3V0L3Byb2R1Y3Rpb24vSW5uZXIvQ2xpZW50JElubmVyLmNsYXNzCitvdXQvcHJvZHVjdGlvbi9Jbm5lci9DbGllbnQuY2xhc3MKK0VuZCBvZiBmaWxlcworQ29tcGlsaW5nIGZpbGVzOgorc3JjL0NsaWVudC5qYXZhCitFbmQgb2YgZmlsZXMKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2NvbW1vbi9pbm5lci9TZXJ2ZXIuamF2YS5uZXcgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9jb21tb24vaW5uZXIvU2VydmVyLmphdmEubmV3Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ3OTZmODUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9jb21tb24vaW5uZXIvU2VydmVyLmphdmEubmV3CkBAIC0wLDAgKzEsNCBAQAorY2xhc3MgU2VydmVyeworICBzdGF0aWMgdm9pZCBmb28oaW50IGEpeworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvY29tbW9uL2lubmVyL3NyYy9DbGllbnQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2NvbW1vbi9pbm5lci9zcmMvQ2xpZW50LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDA3NzNjOQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2NvbW1vbi9pbm5lci9zcmMvQ2xpZW50LmphdmEKQEAgLTAsMCArMSw3IEBACitjbGFzcyBDbGllbnR7CisgIGNsYXNzIElubmVyeworICAgIHZvaWQgZm9vKCl7CisgICAgICBTZXJ2ZXIuZm9vKCk7CisgICAgfQorICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvY29tbW9uL2lubmVyL3NyYy9TZXJ2ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2NvbW1vbi9pbm5lci9zcmMvU2VydmVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjBjNzA3YgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2NvbW1vbi9pbm5lci9zcmMvU2VydmVyLmphdmEKQEAgLTAsMCArMSw0IEBACitjbGFzcyBTZXJ2ZXJ7CisgIHN0YXRpYyB2b2lkIGZvbygpeworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvY29tbW9uL25vUmVzb3VyY2VEZWxldGUubG9nIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvY29tbW9uL25vUmVzb3VyY2VEZWxldGUubG9nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2OWRlMjkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9jb21tb24vbm9SZXNvdXJjZURlbGV0ZS5sb2cKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2NvbW1vbi9ub1Jlc291cmNlRGVsZXRlL3NyYy9jb20vdHR0LnByb3BlcnRpZXMgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9jb21tb24vbm9SZXNvdXJjZURlbGV0ZS9zcmMvY29tL3R0dC5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMwZDc0ZDIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9jb21tb24vbm9SZXNvdXJjZURlbGV0ZS9zcmMvY29tL3R0dC5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEgQEAKK3Rlc3QKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9jb21tb24vbm9TZWNvbmRGaWxlQ29tcGlsZS5sb2cgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9jb21tb24vbm9TZWNvbmRGaWxlQ29tcGlsZS5sb2cKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTEwNmNjYQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2NvbW1vbi9ub1NlY29uZEZpbGVDb21waWxlLmxvZwpAQCAtMCwwICsxLDkgQEAKK0NsZWFuaW5nIG91dHB1dCBmaWxlczoKK291dC9wcm9kdWN0aW9uL05vU2Vjb25kRmlsZUNvbXBpbGUvQS5jbGFzcworb3V0L3Byb2R1Y3Rpb24vTm9TZWNvbmRGaWxlQ29tcGlsZS9CLmNsYXNzCitvdXQvcHJvZHVjdGlvbi9Ob1NlY29uZEZpbGVDb21waWxlL0MuY2xhc3MKK0VuZCBvZiBmaWxlcworQ29tcGlsaW5nIGZpbGVzOgorc3JjL0EuamF2YQorc3JjL0MuamF2YQorRW5kIG9mIGZpbGVzCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9jb21tb24vbm9TZWNvbmRGaWxlQ29tcGlsZS9BLmphdmEubmV3IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvY29tbW9uL25vU2Vjb25kRmlsZUNvbXBpbGUvQS5qYXZhLm5ldwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MjA1Y2QwCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvY29tbW9uL25vU2Vjb25kRmlsZUNvbXBpbGUvQS5qYXZhLm5ldwpAQCAtMCwwICsxLDMgQEAKKworcHVibGljIGNsYXNzIEEgeworfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvY29tbW9uL25vU2Vjb25kRmlsZUNvbXBpbGUvQy5qYXZhLm5ldyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2NvbW1vbi9ub1NlY29uZEZpbGVDb21waWxlL0MuamF2YS5uZXcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGJjZjhlNQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2NvbW1vbi9ub1NlY29uZEZpbGVDb21waWxlL0MuamF2YS5uZXcKQEAgLTAsMCArMSw1IEBACisKK3B1YmxpYyBjbGFzcyBDIHsKKyAgcHVibGljIEMoaW50IGEpIHsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2NvbW1vbi9ub1NlY29uZEZpbGVDb21waWxlL3NyYy9BLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9jb21tb24vbm9TZWNvbmRGaWxlQ29tcGlsZS9zcmMvQS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMyNWYwN2EKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9jb21tb24vbm9TZWNvbmRGaWxlQ29tcGlsZS9zcmMvQS5qYXZhCkBAIC0wLDAgKzEsOSBAQAorCitwdWJsaWMgY2xhc3MgQSB7Cit9CisKK2NsYXNzIEJ7CisgIHsKKyAgICBuZXcgQygpOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvY29tbW9uL25vU2Vjb25kRmlsZUNvbXBpbGUvc3JjL0MuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2NvbW1vbi9ub1NlY29uZEZpbGVDb21waWxlL3NyYy9DLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWMyZjZiNAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2NvbW1vbi9ub1NlY29uZEZpbGVDb21waWxlL3NyYy9DLmphdmEKQEAgLTAsMCArMSw1IEBACisKK3B1YmxpYyBjbGFzcyBDIHsKKyAgcHVibGljIEMoKSB7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9jb21tb24vbm9TZWNvbmRGaWxlQ29tcGlsZTEubG9nIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvY29tbW9uL25vU2Vjb25kRmlsZUNvbXBpbGUxLmxvZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YmJiYjRmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvY29tbW9uL25vU2Vjb25kRmlsZUNvbXBpbGUxLmxvZwpAQCAtMCwwICsxLDkgQEAKK0NsZWFuaW5nIG91dHB1dCBmaWxlczoKK291dC9wcm9kdWN0aW9uL05vU2Vjb25kRmlsZUNvbXBpbGUxL0EuY2xhc3MKK291dC9wcm9kdWN0aW9uL05vU2Vjb25kRmlsZUNvbXBpbGUxL0IuY2xhc3MKK291dC9wcm9kdWN0aW9uL05vU2Vjb25kRmlsZUNvbXBpbGUxL0MuY2xhc3MKK0VuZCBvZiBmaWxlcworQ29tcGlsaW5nIGZpbGVzOgorc3JjL0EuamF2YQorc3JjL0MuamF2YQorRW5kIG9mIGZpbGVzCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9jb21tb24vbm9TZWNvbmRGaWxlQ29tcGlsZTEvQS5qYXZhLm5ldyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2NvbW1vbi9ub1NlY29uZEZpbGVDb21waWxlMS9BLmphdmEubmV3Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJiMzFhNzAKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9jb21tb24vbm9TZWNvbmRGaWxlQ29tcGlsZTEvQS5qYXZhLm5ldwpAQCAtMCwwICsxLDkgQEAKKworcHVibGljIGNsYXNzIEEgeworfQorCitjbGFzcyBCeworICB7CisgICAgbmV3IEMoMTApOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvY29tbW9uL25vU2Vjb25kRmlsZUNvbXBpbGUxL0MuamF2YS5uZXcgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9jb21tb24vbm9TZWNvbmRGaWxlQ29tcGlsZTEvQy5qYXZhLm5ldwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YmNmOGU1Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvY29tbW9uL25vU2Vjb25kRmlsZUNvbXBpbGUxL0MuamF2YS5uZXcKQEAgLTAsMCArMSw1IEBACisKK3B1YmxpYyBjbGFzcyBDIHsKKyAgcHVibGljIEMoaW50IGEpIHsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2NvbW1vbi9ub1NlY29uZEZpbGVDb21waWxlMS9zcmMvQS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvY29tbW9uL25vU2Vjb25kRmlsZUNvbXBpbGUxL3NyYy9BLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzI1ZjA3YQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2NvbW1vbi9ub1NlY29uZEZpbGVDb21waWxlMS9zcmMvQS5qYXZhCkBAIC0wLDAgKzEsOSBAQAorCitwdWJsaWMgY2xhc3MgQSB7Cit9CisKK2NsYXNzIEJ7CisgIHsKKyAgICBuZXcgQygpOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvY29tbW9uL25vU2Vjb25kRmlsZUNvbXBpbGUxL3NyYy9DLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9jb21tb24vbm9TZWNvbmRGaWxlQ29tcGlsZTEvc3JjL0MuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYzJmNmI0Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvY29tbW9uL25vU2Vjb25kRmlsZUNvbXBpbGUxL3NyYy9DLmphdmEKQEAgLTAsMCArMSw1IEBACisKK3B1YmxpYyBjbGFzcyBDIHsKKyAgcHVibGljIEMoKSB7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9jb21waWxlUGFja2FnZS9zeW5jaHJvbml6ZU91dHB1dC9hL0EuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2NvbXBpbGVQYWNrYWdlL3N5bmNocm9uaXplT3V0cHV0L2EvQS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg0MTMwYTMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9jb21waWxlUGFja2FnZS9zeW5jaHJvbml6ZU91dHB1dC9hL0EuamF2YQpAQCAtMCwwICsxLDMgQEAKK3BhY2thZ2UgYTsKK2NsYXNzIEEgeworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2NvbXBpbGVQYWNrYWdlL3N5bmNocm9uaXplT3V0cHV0L2FiL0IuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2NvbXBpbGVQYWNrYWdlL3N5bmNocm9uaXplT3V0cHV0L2FiL0IuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lY2ZkMmM2OAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2NvbXBpbGVQYWNrYWdlL3N5bmNocm9uaXplT3V0cHV0L2FiL0IuamF2YQpAQCAtMCwwICsxLDMgQEAKK3BhY2thZ2UgYWI7CitjbGFzcyBCIHsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9jb21waWxlUGFja2FnZS9zeW5jaHJvbml6ZU91dHB1dC9kYXRhLnhtbCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2NvbXBpbGVQYWNrYWdlL3N5bmNocm9uaXplT3V0cHV0L2RhdGEueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNjNzljMzUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9jb21waWxlUGFja2FnZS9zeW5jaHJvbml6ZU91dHB1dC9kYXRhLnhtbApAQCAtMCwwICsxLDEwIEBACis8dGVzdERhdGE+CisKKyAgPGRlbGV0ZWRfYnlfbWFrZT4KKyAgICA8ZmlsZSBwYXRoPSJjbGFzc2VzL2EvQS5jbGFzcyIgLz4KKyAgPC9kZWxldGVkX2J5X21ha2U+CisKKyAgPHJlY29tcGlsZT4KKyAgICA8ZmlsZSBwYXRoPSJzb3VyY2UvYS9BLmphdmEiIC8+CisgIDwvcmVjb21waWxlPgorPC90ZXN0RGF0YT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9maWVsZE1vZGlmaWVycy9zZXRGaW5hbC5sb2cgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9maWVsZE1vZGlmaWVycy9zZXRGaW5hbC5sb2cKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmVhYzMxMQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2ZpZWxkTW9kaWZpZXJzL3NldEZpbmFsLmxvZwpAQCAtMCwwICsxLDE0IEBACitDbGVhbmluZyBvdXRwdXQgZmlsZXM6CitvdXQvcHJvZHVjdGlvbi9TZXRGaW5hbC9CYXNlLmNsYXNzCitFbmQgb2YgZmlsZXMKK0NvbXBpbGluZyBmaWxlczoKK3NyYy9CYXNlLmphdmEKK0VuZCBvZiBmaWxlcworQ2xlYW5pbmcgb3V0cHV0IGZpbGVzOgorb3V0L3Byb2R1Y3Rpb24vU2V0RmluYWwvQ2xpZW50MS5jbGFzcworb3V0L3Byb2R1Y3Rpb24vU2V0RmluYWwvQ2xpZW50Mi5jbGFzcworRW5kIG9mIGZpbGVzCitDb21waWxpbmcgZmlsZXM6CitzcmMvQ2xpZW50MS5qYXZhCitzcmMvQ2xpZW50Mi5qYXZhCitFbmQgb2YgZmlsZXMKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2ZpZWxkTW9kaWZpZXJzL3NldEZpbmFsL0Jhc2UuamF2YS5uZXcgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9maWVsZE1vZGlmaWVycy9zZXRGaW5hbC9CYXNlLmphdmEubmV3Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc5YTYxZjcKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9maWVsZE1vZGlmaWVycy9zZXRGaW5hbC9CYXNlLmphdmEubmV3CkBAIC0wLDAgKzEsMyBAQAorY2xhc3MgQmFzZSB7CisgIGZpbmFsIHN0YXRpYyBjaGFyIHMgPSAnZyc7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZmllbGRNb2RpZmllcnMvc2V0RmluYWwvc3JjL0Jhc2UuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2ZpZWxkTW9kaWZpZXJzL3NldEZpbmFsL3NyYy9CYXNlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjAxN2Q5MQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2ZpZWxkTW9kaWZpZXJzL3NldEZpbmFsL3NyYy9CYXNlLmphdmEKQEAgLTAsMCArMSwzIEBACitjbGFzcyBCYXNlIHsKKyAgc3RhdGljIGNoYXIgczsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9maWVsZE1vZGlmaWVycy9zZXRGaW5hbC9zcmMvQ2xpZW50MS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZmllbGRNb2RpZmllcnMvc2V0RmluYWwvc3JjL0NsaWVudDEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZDQ4MjU1Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZmllbGRNb2RpZmllcnMvc2V0RmluYWwvc3JjL0NsaWVudDEuamF2YQpAQCAtMCwwICsxLDUgQEAKK2NsYXNzIENsaWVudDEgZXh0ZW5kcyBCYXNlIHsKKyAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncyl7CisgICAgcyA9ICdhJzsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2ZpZWxkTW9kaWZpZXJzL3NldEZpbmFsL3NyYy9DbGllbnQyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9maWVsZE1vZGlmaWVycy9zZXRGaW5hbC9zcmMvQ2xpZW50Mi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZjMjBhY2QKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9maWVsZE1vZGlmaWVycy9zZXRGaW5hbC9zcmMvQ2xpZW50Mi5qYXZhCkBAIC0wLDAgKzEsNSBAQAorY2xhc3MgQ2xpZW50MiB7CisgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpeworICAgIEJhc2UucyA9ICdhJzsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2ZpZWxkTW9kaWZpZXJzL3NldEZpbmFsL3NyYy9DbGllbnQzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9maWVsZE1vZGlmaWVycy9zZXRGaW5hbC9zcmMvQ2xpZW50My5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmViOWUyODIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9maWVsZE1vZGlmaWVycy9zZXRGaW5hbC9zcmMvQ2xpZW50My5qYXZhCkBAIC0wLDAgKzEsMyBAQAorcHVibGljIGNsYXNzIENsaWVudDMgeworICAgIGNoYXIgYyA9IEJhc2UuczsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9maWVsZE1vZGlmaWVycy9zZXRQcml2YXRlLmxvZyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2ZpZWxkTW9kaWZpZXJzL3NldFByaXZhdGUubG9nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVkNjdiYzcKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9maWVsZE1vZGlmaWVycy9zZXRQcml2YXRlLmxvZwpAQCAtMCwwICsxLDEyIEBACitDbGVhbmluZyBvdXRwdXQgZmlsZXM6CitvdXQvcHJvZHVjdGlvbi9TZXRQcml2YXRlL0EuY2xhc3MKK0VuZCBvZiBmaWxlcworQ29tcGlsaW5nIGZpbGVzOgorc3JjL0EuamF2YQorRW5kIG9mIGZpbGVzCitDbGVhbmluZyBvdXRwdXQgZmlsZXM6CitvdXQvcHJvZHVjdGlvbi9TZXRQcml2YXRlL0IuY2xhc3MKK0VuZCBvZiBmaWxlcworQ29tcGlsaW5nIGZpbGVzOgorc3JjL0IuamF2YQorRW5kIG9mIGZpbGVzCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9maWVsZE1vZGlmaWVycy9zZXRQcml2YXRlL0EuamF2YS5uZXcgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9maWVsZE1vZGlmaWVycy9zZXRQcml2YXRlL0EuamF2YS5uZXcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGM4OTY3MAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2ZpZWxkTW9kaWZpZXJzL3NldFByaXZhdGUvQS5qYXZhLm5ldwpAQCAtMCwwICsxLDMgQEAKK3B1YmxpYyBjbGFzcyBBIHsKKyAgICBwcml2YXRlIGludCB4OworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2ZpZWxkTW9kaWZpZXJzL3NldFByaXZhdGUvc3JjL0EuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2ZpZWxkTW9kaWZpZXJzL3NldFByaXZhdGUvc3JjL0EuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMDU0MTc1Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZmllbGRNb2RpZmllcnMvc2V0UHJpdmF0ZS9zcmMvQS5qYXZhCkBAIC0wLDAgKzEsMyBAQAorcHVibGljIGNsYXNzIEEgeworICAgIHB1YmxpYyBpbnQgeDsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9maWVsZE1vZGlmaWVycy9zZXRQcml2YXRlL3NyYy9CLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9maWVsZE1vZGlmaWVycy9zZXRQcml2YXRlL3NyYy9CLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDk5ODkzYQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2ZpZWxkTW9kaWZpZXJzL3NldFByaXZhdGUvc3JjL0IuamF2YQpAQCAtMCwwICsxLDUgQEAKK3B1YmxpYyBjbGFzcyBCIHsKKyAgICB2b2lkIGYgKEEgYSkgeworICAgICAgICBpbnQgeSA9IGEueDsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZmllbGRNb2RpZmllcnMvc2V0UHJvdGVjdGVkLmxvZyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2ZpZWxkTW9kaWZpZXJzL3NldFByb3RlY3RlZC5sb2cKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzY1ZGE5MwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2ZpZWxkTW9kaWZpZXJzL3NldFByb3RlY3RlZC5sb2cKQEAgLTAsMCArMSwxMiBAQAorQ2xlYW5pbmcgb3V0cHV0IGZpbGVzOgorb3V0L3Byb2R1Y3Rpb24vU2V0UHJvdGVjdGVkL0EuY2xhc3MKK0VuZCBvZiBmaWxlcworQ29tcGlsaW5nIGZpbGVzOgorc3JjL0EuamF2YQorRW5kIG9mIGZpbGVzCitDbGVhbmluZyBvdXRwdXQgZmlsZXM6CitvdXQvcHJvZHVjdGlvbi9TZXRQcm90ZWN0ZWQvQi5jbGFzcworRW5kIG9mIGZpbGVzCitDb21waWxpbmcgZmlsZXM6CitzcmMvQi5qYXZhCitFbmQgb2YgZmlsZXMKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2ZpZWxkTW9kaWZpZXJzL3NldFByb3RlY3RlZC9BLmphdmEubmV3IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZmllbGRNb2RpZmllcnMvc2V0UHJvdGVjdGVkL0EuamF2YS5uZXcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTdiMTBiNwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2ZpZWxkTW9kaWZpZXJzL3NldFByb3RlY3RlZC9BLmphdmEubmV3CkBAIC0wLDAgKzEsMyBAQAorcHVibGljIGNsYXNzIEEgeworICAgIHByb3RlY3RlZCBpbnQgeDsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9maWVsZE1vZGlmaWVycy9zZXRQcm90ZWN0ZWQvc3JjL0EuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2ZpZWxkTW9kaWZpZXJzL3NldFByb3RlY3RlZC9zcmMvQS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMwNTQxNzUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9maWVsZE1vZGlmaWVycy9zZXRQcm90ZWN0ZWQvc3JjL0EuamF2YQpAQCAtMCwwICsxLDMgQEAKK3B1YmxpYyBjbGFzcyBBIHsKKyAgICBwdWJsaWMgaW50IHg7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZmllbGRNb2RpZmllcnMvc2V0UHJvdGVjdGVkL3NyYy9CLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9maWVsZE1vZGlmaWVycy9zZXRQcm90ZWN0ZWQvc3JjL0IuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OTk4OTNhCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZmllbGRNb2RpZmllcnMvc2V0UHJvdGVjdGVkL3NyYy9CLmphdmEKQEAgLTAsMCArMSw1IEBACitwdWJsaWMgY2xhc3MgQiB7CisgICAgdm9pZCBmIChBIGEpIHsKKyAgICAgICAgaW50IHkgPSBhLng7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2ZpZWxkTW9kaWZpZXJzL3NldFByb3RlY3RlZC9zcmMvQy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZmllbGRNb2RpZmllcnMvc2V0UHJvdGVjdGVkL3NyYy9DLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjBiYTRkMAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2ZpZWxkTW9kaWZpZXJzL3NldFByb3RlY3RlZC9zcmMvQy5qYXZhCkBAIC0wLDAgKzEsNSBAQAorcHVibGljIGNsYXNzIEMgZXh0ZW5kcyBBIHsKKyAgICBpbnQgZiAoKXsKKyAgICAgICAgcmV0dXJuIHg7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2ZpZWxkTW9kaWZpZXJzL3NldFN0YXRpYy5sb2cgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9maWVsZE1vZGlmaWVycy9zZXRTdGF0aWMubG9nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQwOTI0NjgKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9maWVsZE1vZGlmaWVycy9zZXRTdGF0aWMubG9nCkBAIC0wLDAgKzEsMTQgQEAKK0NsZWFuaW5nIG91dHB1dCBmaWxlczoKK291dC9wcm9kdWN0aW9uL1NldFN0YXRpYy9CYXNlLmNsYXNzCitFbmQgb2YgZmlsZXMKK0NvbXBpbGluZyBmaWxlczoKK3NyYy9CYXNlLmphdmEKK0VuZCBvZiBmaWxlcworQ2xlYW5pbmcgb3V0cHV0IGZpbGVzOgorb3V0L3Byb2R1Y3Rpb24vU2V0U3RhdGljL0NsaWVudDEuY2xhc3MKK291dC9wcm9kdWN0aW9uL1NldFN0YXRpYy9DbGllbnQyLmNsYXNzCitFbmQgb2YgZmlsZXMKK0NvbXBpbGluZyBmaWxlczoKK3NyYy9DbGllbnQxLmphdmEKK3NyYy9DbGllbnQyLmphdmEKK0VuZCBvZiBmaWxlcwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZmllbGRNb2RpZmllcnMvc2V0U3RhdGljL0Jhc2UuamF2YS5uZXcgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9maWVsZE1vZGlmaWVycy9zZXRTdGF0aWMvQmFzZS5qYXZhLm5ldwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMDE3ZDkxCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZmllbGRNb2RpZmllcnMvc2V0U3RhdGljL0Jhc2UuamF2YS5uZXcKQEAgLTAsMCArMSwzIEBACitjbGFzcyBCYXNlIHsKKyAgc3RhdGljIGNoYXIgczsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9maWVsZE1vZGlmaWVycy9zZXRTdGF0aWMvc3JjL0Jhc2UuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2ZpZWxkTW9kaWZpZXJzL3NldFN0YXRpYy9zcmMvQmFzZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJlNjg2MDAKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9maWVsZE1vZGlmaWVycy9zZXRTdGF0aWMvc3JjL0Jhc2UuamF2YQpAQCAtMCwwICsxLDMgQEAKK2NsYXNzIEJhc2UgeworICBjaGFyIHM7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZmllbGRNb2RpZmllcnMvc2V0U3RhdGljL3NyYy9DbGllbnQxLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9maWVsZE1vZGlmaWVycy9zZXRTdGF0aWMvc3JjL0NsaWVudDEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MGJhNDU2Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZmllbGRNb2RpZmllcnMvc2V0U3RhdGljL3NyYy9DbGllbnQxLmphdmEKQEAgLTAsMCArMSw1IEBACitjbGFzcyBDbGllbnQxIGV4dGVuZHMgQmFzZSB7CisgIHZvaWQgZm9vKCkgeworICAgIHMgPSAnYSc7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9maWVsZE1vZGlmaWVycy9zZXRTdGF0aWMvc3JjL0NsaWVudDIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2ZpZWxkTW9kaWZpZXJzL3NldFN0YXRpYy9zcmMvQ2xpZW50Mi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc3NTMwMzIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9maWVsZE1vZGlmaWVycy9zZXRTdGF0aWMvc3JjL0NsaWVudDIuamF2YQpAQCAtMCwwICsxLDUgQEAKK2NsYXNzIENsaWVudDIgeworICB2b2lkIGZvbygpIHsKKyAgICBuZXcgQmFzZSgpLnMgPSAnYSc7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9maWVsZE1vZGlmaWVycy91bnNldFN0YXRpYy5sb2cgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9maWVsZE1vZGlmaWVycy91bnNldFN0YXRpYy5sb2cKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmM3Y2VkZgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2ZpZWxkTW9kaWZpZXJzL3Vuc2V0U3RhdGljLmxvZwpAQCAtMCwwICsxLDE0IEBACitDbGVhbmluZyBvdXRwdXQgZmlsZXM6CitvdXQvcHJvZHVjdGlvbi9VbnNldFN0YXRpYy9CYXNlLmNsYXNzCitFbmQgb2YgZmlsZXMKK0NvbXBpbGluZyBmaWxlczoKK3NyYy9CYXNlLmphdmEKK0VuZCBvZiBmaWxlcworQ2xlYW5pbmcgb3V0cHV0IGZpbGVzOgorb3V0L3Byb2R1Y3Rpb24vVW5zZXRTdGF0aWMvQ2xpZW50MS5jbGFzcworb3V0L3Byb2R1Y3Rpb24vVW5zZXRTdGF0aWMvQ2xpZW50Mi5jbGFzcworRW5kIG9mIGZpbGVzCitDb21waWxpbmcgZmlsZXM6CitzcmMvQ2xpZW50MS5qYXZhCitzcmMvQ2xpZW50Mi5qYXZhCitFbmQgb2YgZmlsZXMKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2ZpZWxkTW9kaWZpZXJzL3Vuc2V0U3RhdGljL0Jhc2UuamF2YS5uZXcgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9maWVsZE1vZGlmaWVycy91bnNldFN0YXRpYy9CYXNlLmphdmEubmV3Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJlNjg2MDAKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9maWVsZE1vZGlmaWVycy91bnNldFN0YXRpYy9CYXNlLmphdmEubmV3CkBAIC0wLDAgKzEsMyBAQAorY2xhc3MgQmFzZSB7CisgIGNoYXIgczsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9maWVsZE1vZGlmaWVycy91bnNldFN0YXRpYy9zcmMvQmFzZS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZmllbGRNb2RpZmllcnMvdW5zZXRTdGF0aWMvc3JjL0Jhc2UuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMDE3ZDkxCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZmllbGRNb2RpZmllcnMvdW5zZXRTdGF0aWMvc3JjL0Jhc2UuamF2YQpAQCAtMCwwICsxLDMgQEAKK2NsYXNzIEJhc2UgeworICBzdGF0aWMgY2hhciBzOworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2ZpZWxkTW9kaWZpZXJzL3Vuc2V0U3RhdGljL3NyYy9DbGllbnQxLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9maWVsZE1vZGlmaWVycy91bnNldFN0YXRpYy9zcmMvQ2xpZW50MS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU2MWRmMGMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9maWVsZE1vZGlmaWVycy91bnNldFN0YXRpYy9zcmMvQ2xpZW50MS5qYXZhCkBAIC0wLDAgKzEsNSBAQAorY2xhc3MgQ2xpZW50MSBleHRlbmRzIEJhc2UgeworICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisgICAgU3lzdGVtLm91dC5wcmludGxuKHMpOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZmllbGRNb2RpZmllcnMvdW5zZXRTdGF0aWMvc3JjL0NsaWVudDIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2ZpZWxkTW9kaWZpZXJzL3Vuc2V0U3RhdGljL3NyYy9DbGllbnQyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWNlMDNjNQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2ZpZWxkTW9kaWZpZXJzL3Vuc2V0U3RhdGljL3NyYy9DbGllbnQyLmphdmEKQEAgLTAsMCArMSw1IEBACitjbGFzcyBDbGllbnQyIHsKKyAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworICAgIFN5c3RlbS5vdXQucHJpbnRsbihCYXNlLnMpOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZmllbGRNb2RpZmllcnMvdW5zZXRTdGF0aWNGaW5hbC5sb2cgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9maWVsZE1vZGlmaWVycy91bnNldFN0YXRpY0ZpbmFsLmxvZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kODA2NWE1Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZmllbGRNb2RpZmllcnMvdW5zZXRTdGF0aWNGaW5hbC5sb2cKQEAgLTAsMCArMSwxMiBAQAorQ2xlYW5pbmcgb3V0cHV0IGZpbGVzOgorb3V0L3Byb2R1Y3Rpb24vVW5zZXRTdGF0aWNGaW5hbC9TZXJ2ZXIuY2xhc3MKK0VuZCBvZiBmaWxlcworQ29tcGlsaW5nIGZpbGVzOgorc3JjL1NlcnZlci5qYXZhCitFbmQgb2YgZmlsZXMKK0NsZWFuaW5nIG91dHB1dCBmaWxlczoKK291dC9wcm9kdWN0aW9uL1Vuc2V0U3RhdGljRmluYWwvQ2xpZW50LmNsYXNzCitFbmQgb2YgZmlsZXMKK0NvbXBpbGluZyBmaWxlczoKK3NyYy9DbGllbnQuamF2YQorRW5kIG9mIGZpbGVzCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9maWVsZE1vZGlmaWVycy91bnNldFN0YXRpY0ZpbmFsL1NlcnZlci5qYXZhLm5ldyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2ZpZWxkTW9kaWZpZXJzL3Vuc2V0U3RhdGljRmluYWwvU2VydmVyLmphdmEubmV3Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZlNTc5ZTgKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9maWVsZE1vZGlmaWVycy91bnNldFN0YXRpY0ZpbmFsL1NlcnZlci5qYXZhLm5ldwpAQCAtMCwwICsxLDMgQEAKK2NsYXNzIFNlcnZlciB7CisgIHN0YXRpYyBTdHJpbmcgcyA9ICJTdGF0aWMiOworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2ZpZWxkTW9kaWZpZXJzL3Vuc2V0U3RhdGljRmluYWwvc3JjL0NsaWVudC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZmllbGRNb2RpZmllcnMvdW5zZXRTdGF0aWNGaW5hbC9zcmMvQ2xpZW50LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGRkNmExYgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2ZpZWxkTW9kaWZpZXJzL3Vuc2V0U3RhdGljRmluYWwvc3JjL0NsaWVudC5qYXZhCkBAIC0wLDAgKzEsNSBAQAorY2xhc3MgQ2xpZW50IHsKKyAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworICAgIFN5c3RlbS5vdXQucHJpbnRsbihTZXJ2ZXIucyk7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9maWVsZE1vZGlmaWVycy91bnNldFN0YXRpY0ZpbmFsL3NyYy9TZXJ2ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2ZpZWxkTW9kaWZpZXJzL3Vuc2V0U3RhdGljRmluYWwvc3JjL1NlcnZlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhhMjRmMWIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9maWVsZE1vZGlmaWVycy91bnNldFN0YXRpY0ZpbmFsL3NyYy9TZXJ2ZXIuamF2YQpAQCAtMCwwICsxLDMgQEAKK2NsYXNzIFNlcnZlciB7CisgIHN0YXRpYyBmaW5hbCBTdHJpbmcgcyA9ICJTdGF0aWNGaW5hbCI7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZmllbGRQcm9wZXJ0aWVzL2NvbnN0YW50Q2hhaW4ubG9nIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZmllbGRQcm9wZXJ0aWVzL2NvbnN0YW50Q2hhaW4ubG9nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM3MjQ1ZjIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9maWVsZFByb3BlcnRpZXMvY29uc3RhbnRDaGFpbi5sb2cKQEAgLTAsMCArMSwxNCBAQAorQ2xlYW5pbmcgb3V0cHV0IGZpbGVzOgorb3V0L3Byb2R1Y3Rpb24vQ29uc3RhbnRDaGFpbi9TZXJ2ZXIuY2xhc3MKK0VuZCBvZiBmaWxlcworQ29tcGlsaW5nIGZpbGVzOgorc3JjL1NlcnZlci5qYXZhCitFbmQgb2YgZmlsZXMKK0NsZWFuaW5nIG91dHB1dCBmaWxlczoKK291dC9wcm9kdWN0aW9uL0NvbnN0YW50Q2hhaW4vQ2xpZW50LmNsYXNzCitvdXQvcHJvZHVjdGlvbi9Db25zdGFudENoYWluL1NlcnZlckNsaWVudC5jbGFzcworRW5kIG9mIGZpbGVzCitDb21waWxpbmcgZmlsZXM6CitzcmMvQ2xpZW50LmphdmEKK3NyYy9TZXJ2ZXJDbGllbnQuamF2YQorRW5kIG9mIGZpbGVzCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9maWVsZFByb3BlcnRpZXMvY29uc3RhbnRDaGFpbi9TZXJ2ZXIuamF2YS5uZXcgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9maWVsZFByb3BlcnRpZXMvY29uc3RhbnRDaGFpbi9TZXJ2ZXIuamF2YS5uZXcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGU3YTEyMAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2ZpZWxkUHJvcGVydGllcy9jb25zdGFudENoYWluL1NlcnZlci5qYXZhLm5ldwpAQCAtMCwwICsxLDMgQEAKK2NsYXNzIFNlcnZlciB7CisgIHN0YXRpYyBmaW5hbCBpbnQgdmFyID0gNTAwOworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2ZpZWxkUHJvcGVydGllcy9jb25zdGFudENoYWluL3NyYy9DbGllbnQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2ZpZWxkUHJvcGVydGllcy9jb25zdGFudENoYWluL3NyYy9DbGllbnQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iN2RjZTE3Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZmllbGRQcm9wZXJ0aWVzL2NvbnN0YW50Q2hhaW4vc3JjL0NsaWVudC5qYXZhCkBAIC0wLDAgKzEsNSBAQAorY2xhc3MgQ2xpZW50IHsKKyAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworICAgIFN5c3RlbS5vdXQucHJpbnRsbihTZXJ2ZXJDbGllbnQudmFyKTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2ZpZWxkUHJvcGVydGllcy9jb25zdGFudENoYWluL3NyYy9TZXJ2ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2ZpZWxkUHJvcGVydGllcy9jb25zdGFudENoYWluL3NyYy9TZXJ2ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yODJkNDJhCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZmllbGRQcm9wZXJ0aWVzL2NvbnN0YW50Q2hhaW4vc3JjL1NlcnZlci5qYXZhCkBAIC0wLDAgKzEsMyBAQAorY2xhc3MgU2VydmVyIHsKKyAgc3RhdGljIGZpbmFsIGludCB2YXIgPSAxMDA7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZmllbGRQcm9wZXJ0aWVzL2NvbnN0YW50Q2hhaW4vc3JjL1NlcnZlckNsaWVudC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZmllbGRQcm9wZXJ0aWVzL2NvbnN0YW50Q2hhaW4vc3JjL1NlcnZlckNsaWVudC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU4Mzk3ZTYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9maWVsZFByb3BlcnRpZXMvY29uc3RhbnRDaGFpbi9zcmMvU2VydmVyQ2xpZW50LmphdmEKQEAgLTAsMCArMSwzIEBACitjbGFzcyBTZXJ2ZXJDbGllbnQgeworICBzdGF0aWMgZmluYWwgaW50IHZhciA9IFNlcnZlci52YXIgKiAxMDAwOworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2ZpZWxkUHJvcGVydGllcy9jb25zdGFudENoYWluMS5sb2cgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9maWVsZFByb3BlcnRpZXMvY29uc3RhbnRDaGFpbjEubG9nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEwNmZlYTQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9maWVsZFByb3BlcnRpZXMvY29uc3RhbnRDaGFpbjEubG9nCkBAIC0wLDAgKzEsMTggQEAKK0NsZWFuaW5nIG91dHB1dCBmaWxlczoKK291dC9wcm9kdWN0aW9uL0NvbnN0YW50Q2hhaW4xL0EuY2xhc3MKK0VuZCBvZiBmaWxlcworQ29tcGlsaW5nIGZpbGVzOgorc3JjL0EuamF2YQorRW5kIG9mIGZpbGVzCitDbGVhbmluZyBvdXRwdXQgZmlsZXM6CitvdXQvcHJvZHVjdGlvbi9Db25zdGFudENoYWluMS9BLmNsYXNzCitvdXQvcHJvZHVjdGlvbi9Db25zdGFudENoYWluMS9CLmNsYXNzCitvdXQvcHJvZHVjdGlvbi9Db25zdGFudENoYWluMS9DLmNsYXNzCitvdXQvcHJvZHVjdGlvbi9Db25zdGFudENoYWluMS9DbGllbnQuY2xhc3MKK0VuZCBvZiBmaWxlcworQ29tcGlsaW5nIGZpbGVzOgorc3JjL0EuamF2YQorc3JjL0IuamF2YQorc3JjL0MuamF2YQorc3JjL0NsaWVudC5qYXZhCitFbmQgb2YgZmlsZXMKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2ZpZWxkUHJvcGVydGllcy9jb25zdGFudENoYWluMS9BLmphdmEubmV3IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZmllbGRQcm9wZXJ0aWVzL2NvbnN0YW50Q2hhaW4xL0EuamF2YS5uZXcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzIxMGI5ZgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2ZpZWxkUHJvcGVydGllcy9jb25zdGFudENoYWluMS9BLmphdmEubmV3CkBAIC0wLDAgKzEsNyBAQAoraW50ZXJmYWNlIEEgeworICBzdGF0aWMgZmluYWwgc2hvcnQgdmFyMCA9IDEwMDsKKyAgc3RhdGljIGZpbmFsIHNob3J0IHZhcjEgPSB2YXIwICsgMTsKKyAgc3RhdGljIGZpbmFsIHNob3J0IHZhcjEyID0gdmFyMSArIDE7CisgIHN0YXRpYyBmaW5hbCBzaG9ydCB2YXIyID0gdmFyMTIgKyAxOworICBzdGF0aWMgZmluYWwgc2hvcnQgbGFzdCA9IHZhcjI7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZmllbGRQcm9wZXJ0aWVzL2NvbnN0YW50Q2hhaW4xL3NyYy9BLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9maWVsZFByb3BlcnRpZXMvY29uc3RhbnRDaGFpbjEvc3JjL0EuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNDY3MzhmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZmllbGRQcm9wZXJ0aWVzL2NvbnN0YW50Q2hhaW4xL3NyYy9BLmphdmEKQEAgLTAsMCArMSw2IEBACitpbnRlcmZhY2UgQSB7CisgIHN0YXRpYyBmaW5hbCBzaG9ydCB2YXIwID0gMTAwOworICBzdGF0aWMgZmluYWwgc2hvcnQgdmFyMSA9IHZhcjAgKyAxOworICBzdGF0aWMgZmluYWwgc2hvcnQgdmFyMiA9IHZhcjEgKyAxOworICBzdGF0aWMgZmluYWwgc2hvcnQgbGFzdCA9IHZhcjI7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZmllbGRQcm9wZXJ0aWVzL2NvbnN0YW50Q2hhaW4xL3NyYy9CLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9maWVsZFByb3BlcnRpZXMvY29uc3RhbnRDaGFpbjEvc3JjL0IuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMjhkNTQ5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZmllbGRQcm9wZXJ0aWVzL2NvbnN0YW50Q2hhaW4xL3NyYy9CLmphdmEKQEAgLTAsMCArMSw0IEBACitpbnRlcmZhY2UgQiBleHRlbmRzIEEgeworICBzdGF0aWMgZmluYWwgc2hvcnQgdmFyID0gQS5sYXN0ICsgMTsKKyAgc3RhdGljIGZpbmFsIHNob3J0IGxhc3RCID0gdmFyOworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2ZpZWxkUHJvcGVydGllcy9jb25zdGFudENoYWluMS9zcmMvQy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZmllbGRQcm9wZXJ0aWVzL2NvbnN0YW50Q2hhaW4xL3NyYy9DLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTg3NDcwNQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2ZpZWxkUHJvcGVydGllcy9jb25zdGFudENoYWluMS9zcmMvQy5qYXZhCkBAIC0wLDAgKzEsNCBAQAoraW50ZXJmYWNlIEMgZXh0ZW5kcyBCIHsKKyAgc3RhdGljIGZpbmFsIHNob3J0IHZhckMgPSBCLmxhc3QgKyAxOworICBzdGF0aWMgZmluYWwgc2hvcnQgbGFzdEMgPSB2YXJDOworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2ZpZWxkUHJvcGVydGllcy9jb25zdGFudENoYWluMS9zcmMvQ2xpZW50LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9maWVsZFByb3BlcnRpZXMvY29uc3RhbnRDaGFpbjEvc3JjL0NsaWVudC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY2ZDA4ZjgKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9maWVsZFByb3BlcnRpZXMvY29uc3RhbnRDaGFpbjEvc3JjL0NsaWVudC5qYXZhCkBAIC0wLDAgKzEsNSBAQAorY2xhc3MgQ2xpZW50IGltcGxlbWVudHMgQyB7CisgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oQy5sYXN0Qyk7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9maWVsZFByb3BlcnRpZXMvY29uc3RhbnRDaGFpbjIubG9nIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZmllbGRQcm9wZXJ0aWVzL2NvbnN0YW50Q2hhaW4yLmxvZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZTZkNDUxCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZmllbGRQcm9wZXJ0aWVzL2NvbnN0YW50Q2hhaW4yLmxvZwpAQCAtMCwwICsxLDE4IEBACitDbGVhbmluZyBvdXRwdXQgZmlsZXM6CitvdXQvcHJvZHVjdGlvbi9Db25zdGFudENoYWluMi9DbGllbnQuY2xhc3MKK291dC9wcm9kdWN0aW9uL0NvbnN0YW50Q2hhaW4yL0NvbnN0MS5jbGFzcworRW5kIG9mIGZpbGVzCitDb21waWxpbmcgZmlsZXM6CitzcmMvQ2xpZW50LmphdmEKK3NyYy9Db25zdDEuamF2YQorRW5kIG9mIGZpbGVzCitDbGVhbmluZyBvdXRwdXQgZmlsZXM6CitvdXQvcHJvZHVjdGlvbi9Db25zdGFudENoYWluMi9DbGllbnQuY2xhc3MKK291dC9wcm9kdWN0aW9uL0NvbnN0YW50Q2hhaW4yL0NvbnN0MS5jbGFzcworb3V0L3Byb2R1Y3Rpb24vQ29uc3RhbnRDaGFpbjIvQ29uc3QyLmNsYXNzCitFbmQgb2YgZmlsZXMKK0NvbXBpbGluZyBmaWxlczoKK3NyYy9DbGllbnQuamF2YQorc3JjL0NvbnN0MS5qYXZhCitzcmMvQ29uc3QyLmphdmEKK0VuZCBvZiBmaWxlcwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZmllbGRQcm9wZXJ0aWVzL2NvbnN0YW50Q2hhaW4yL0NsaWVudC5qYXZhLm5ldyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2ZpZWxkUHJvcGVydGllcy9jb25zdGFudENoYWluMi9DbGllbnQuamF2YS5uZXcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjMwNWMzYgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2ZpZWxkUHJvcGVydGllcy9jb25zdGFudENoYWluMi9DbGllbnQuamF2YS5uZXcKQEAgLTAsMCArMSw2IEBACitjbGFzcyBDbGllbnQgeworICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisgICAgU3lzdGVtLm91dC5wcmludGxuKENvbnN0Mi5BMik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKENvbnN0Mi5BMik7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9maWVsZFByb3BlcnRpZXMvY29uc3RhbnRDaGFpbjIvQ29uc3QxLmphdmEubmV3IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZmllbGRQcm9wZXJ0aWVzL2NvbnN0YW50Q2hhaW4yL0NvbnN0MS5qYXZhLm5ldwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYTU4ZmZhCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZmllbGRQcm9wZXJ0aWVzL2NvbnN0YW50Q2hhaW4yL0NvbnN0MS5qYXZhLm5ldwpAQCAtMCwwICsxLDMgQEAKK3B1YmxpYyBjbGFzcyBDb25zdDEgeworICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBBMSA9IDIwOworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2ZpZWxkUHJvcGVydGllcy9jb25zdGFudENoYWluMi9zcmMvQ2xpZW50LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9maWVsZFByb3BlcnRpZXMvY29uc3RhbnRDaGFpbjIvc3JjL0NsaWVudC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU4YTAwYzAKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9maWVsZFByb3BlcnRpZXMvY29uc3RhbnRDaGFpbjIvc3JjL0NsaWVudC5qYXZhCkBAIC0wLDAgKzEsNSBAQAorY2xhc3MgQ2xpZW50IHsKKyAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworICAgIFN5c3RlbS5vdXQucHJpbnRsbihDb25zdDIuQTIpOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZmllbGRQcm9wZXJ0aWVzL2NvbnN0YW50Q2hhaW4yL3NyYy9Db25zdDEuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2ZpZWxkUHJvcGVydGllcy9jb25zdGFudENoYWluMi9zcmMvQ29uc3QxLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmE5OWQ1MwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2ZpZWxkUHJvcGVydGllcy9jb25zdGFudENoYWluMi9zcmMvQ29uc3QxLmphdmEKQEAgLTAsMCArMSwzIEBACitwdWJsaWMgY2xhc3MgQ29uc3QxIHsKKyAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQTEgPSAxMDsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9maWVsZFByb3BlcnRpZXMvY29uc3RhbnRDaGFpbjIvc3JjL0NvbnN0Mi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZmllbGRQcm9wZXJ0aWVzL2NvbnN0YW50Q2hhaW4yL3NyYy9Db25zdDIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOTM3OTBlCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZmllbGRQcm9wZXJ0aWVzL2NvbnN0YW50Q2hhaW4yL3NyYy9Db25zdDIuamF2YQpAQCAtMCwwICsxLDMgQEAKK3B1YmxpYyBjbGFzcyBDb25zdDIgeworICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBBMiA9IENvbnN0MS5BMTsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9maWVsZFByb3BlcnRpZXMvY29uc3RhbnRSZW1vdmUubG9nIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZmllbGRQcm9wZXJ0aWVzL2NvbnN0YW50UmVtb3ZlLmxvZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZTY3ZDk0Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZmllbGRQcm9wZXJ0aWVzL2NvbnN0YW50UmVtb3ZlLmxvZwpAQCAtMCwwICsxLDEyIEBACitDbGVhbmluZyBvdXRwdXQgZmlsZXM6CitvdXQvcHJvZHVjdGlvbi9Db25zdGFudFJlbW92ZS9TZXJ2ZXIuY2xhc3MKK0VuZCBvZiBmaWxlcworQ29tcGlsaW5nIGZpbGVzOgorc3JjL1NlcnZlci5qYXZhCitFbmQgb2YgZmlsZXMKK0NsZWFuaW5nIG91dHB1dCBmaWxlczoKK291dC9wcm9kdWN0aW9uL0NvbnN0YW50UmVtb3ZlL0NsaWVudC5jbGFzcworRW5kIG9mIGZpbGVzCitDb21waWxpbmcgZmlsZXM6CitzcmMvQ2xpZW50LmphdmEKK0VuZCBvZiBmaWxlcwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZmllbGRQcm9wZXJ0aWVzL2NvbnN0YW50UmVtb3ZlL1NlcnZlci5qYXZhLm5ldyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2ZpZWxkUHJvcGVydGllcy9jb25zdGFudFJlbW92ZS9TZXJ2ZXIuamF2YS5uZXcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTQ2MTA2YgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2ZpZWxkUHJvcGVydGllcy9jb25zdGFudFJlbW92ZS9TZXJ2ZXIuamF2YS5uZXcKQEAgLTAsMCArMSwyIEBACitjbGFzcyBTZXJ2ZXIgeworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2ZpZWxkUHJvcGVydGllcy9jb25zdGFudFJlbW92ZS9zcmMvQ2xpZW50LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9maWVsZFByb3BlcnRpZXMvY29uc3RhbnRSZW1vdmUvc3JjL0NsaWVudC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRkZDZhMWIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9maWVsZFByb3BlcnRpZXMvY29uc3RhbnRSZW1vdmUvc3JjL0NsaWVudC5qYXZhCkBAIC0wLDAgKzEsNSBAQAorY2xhc3MgQ2xpZW50IHsKKyAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworICAgIFN5c3RlbS5vdXQucHJpbnRsbihTZXJ2ZXIucyk7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9maWVsZFByb3BlcnRpZXMvY29uc3RhbnRSZW1vdmUvc3JjL1NlcnZlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZmllbGRQcm9wZXJ0aWVzL2NvbnN0YW50UmVtb3ZlL3NyYy9TZXJ2ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YTI0ZjFiCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZmllbGRQcm9wZXJ0aWVzL2NvbnN0YW50UmVtb3ZlL3NyYy9TZXJ2ZXIuamF2YQpAQCAtMCwwICsxLDMgQEAKK2NsYXNzIFNlcnZlciB7CisgIHN0YXRpYyBmaW5hbCBTdHJpbmcgcyA9ICJTdGF0aWNGaW5hbCI7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZmllbGRQcm9wZXJ0aWVzL2NvbnN0YW50UmVtb3ZlMS5sb2cgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9maWVsZFByb3BlcnRpZXMvY29uc3RhbnRSZW1vdmUxLmxvZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZmExNTIzCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZmllbGRQcm9wZXJ0aWVzL2NvbnN0YW50UmVtb3ZlMS5sb2cKQEAgLTAsMCArMSwxMiBAQAorQ2xlYW5pbmcgb3V0cHV0IGZpbGVzOgorb3V0L3Byb2R1Y3Rpb24vQ29uc3RhbnRSZW1vdmUxL1NlcnZlci5jbGFzcworRW5kIG9mIGZpbGVzCitDb21waWxpbmcgZmlsZXM6CitzcmMvU2VydmVyLmphdmEKK0VuZCBvZiBmaWxlcworQ2xlYW5pbmcgb3V0cHV0IGZpbGVzOgorb3V0L3Byb2R1Y3Rpb24vQ29uc3RhbnRSZW1vdmUxL0NsaWVudC5jbGFzcworRW5kIG9mIGZpbGVzCitDb21waWxpbmcgZmlsZXM6CitzcmMvQ2xpZW50LmphdmEKK0VuZCBvZiBmaWxlcwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZmllbGRQcm9wZXJ0aWVzL2NvbnN0YW50UmVtb3ZlMS9TZXJ2ZXIuamF2YS5uZXcgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9maWVsZFByb3BlcnRpZXMvY29uc3RhbnRSZW1vdmUxL1NlcnZlci5qYXZhLm5ldwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNDYxMDZiCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZmllbGRQcm9wZXJ0aWVzL2NvbnN0YW50UmVtb3ZlMS9TZXJ2ZXIuamF2YS5uZXcKQEAgLTAsMCArMSwyIEBACitjbGFzcyBTZXJ2ZXIgeworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2ZpZWxkUHJvcGVydGllcy9jb25zdGFudFJlbW92ZTEvc3JjL0EuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2ZpZWxkUHJvcGVydGllcy9jb25zdGFudFJlbW92ZTEvc3JjL0EuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMDZiNGNjCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZmllbGRQcm9wZXJ0aWVzL2NvbnN0YW50UmVtb3ZlMS9zcmMvQS5qYXZhCkBAIC0wLDAgKzEsNSBAQAorcHVibGljIGNsYXNzIEF7CisgICAgc3RhdGljIFN0cmluZyBmb28oKXsKKyAgICAgICAgcmV0dXJuICAiYWJjIjsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZmllbGRQcm9wZXJ0aWVzL2NvbnN0YW50UmVtb3ZlMS9zcmMvQ2xpZW50LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9maWVsZFByb3BlcnRpZXMvY29uc3RhbnRSZW1vdmUxL3NyYy9DbGllbnQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZGQ2YTFiCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZmllbGRQcm9wZXJ0aWVzL2NvbnN0YW50UmVtb3ZlMS9zcmMvQ2xpZW50LmphdmEKQEAgLTAsMCArMSw1IEBACitjbGFzcyBDbGllbnQgeworICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisgICAgU3lzdGVtLm91dC5wcmludGxuKFNlcnZlci5zKTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2ZpZWxkUHJvcGVydGllcy9jb25zdGFudFJlbW92ZTEvc3JjL1NlcnZlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZmllbGRQcm9wZXJ0aWVzL2NvbnN0YW50UmVtb3ZlMS9zcmMvU2VydmVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDA1MTg4NwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2ZpZWxkUHJvcGVydGllcy9jb25zdGFudFJlbW92ZTEvc3JjL1NlcnZlci5qYXZhCkBAIC0wLDAgKzEsMyBAQAorY2xhc3MgU2VydmVyIHsKKyAgc3RhdGljIGZpbmFsIFN0cmluZyBzID0gQS5mb28oKTsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9maWVsZFByb3BlcnRpZXMvZG91YmxlQ29uc3RhbnRDaGFuZ2UubG9nIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZmllbGRQcm9wZXJ0aWVzL2RvdWJsZUNvbnN0YW50Q2hhbmdlLmxvZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYjQzNzgxCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZmllbGRQcm9wZXJ0aWVzL2RvdWJsZUNvbnN0YW50Q2hhbmdlLmxvZwpAQCAtMCwwICsxLDEyIEBACitDbGVhbmluZyBvdXRwdXQgZmlsZXM6CitvdXQvcHJvZHVjdGlvbi9Eb3VibGVDb25zdGFudENoYW5nZS9TZXJ2ZXIuY2xhc3MKK0VuZCBvZiBmaWxlcworQ29tcGlsaW5nIGZpbGVzOgorc3JjL1NlcnZlci5qYXZhCitFbmQgb2YgZmlsZXMKK0NsZWFuaW5nIG91dHB1dCBmaWxlczoKK291dC9wcm9kdWN0aW9uL0RvdWJsZUNvbnN0YW50Q2hhbmdlL0NsaWVudC5jbGFzcworRW5kIG9mIGZpbGVzCitDb21waWxpbmcgZmlsZXM6CitzcmMvQ2xpZW50LmphdmEKK0VuZCBvZiBmaWxlcwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZmllbGRQcm9wZXJ0aWVzL2RvdWJsZUNvbnN0YW50Q2hhbmdlL1NlcnZlci5qYXZhLm5ldyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2ZpZWxkUHJvcGVydGllcy9kb3VibGVDb25zdGFudENoYW5nZS9TZXJ2ZXIuamF2YS5uZXcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzU1ZDk5MgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2ZpZWxkUHJvcGVydGllcy9kb3VibGVDb25zdGFudENoYW5nZS9TZXJ2ZXIuamF2YS5uZXcKQEAgLTAsMCArMSwzIEBACitjbGFzcyBTZXJ2ZXIgeworICBzdGF0aWMgZmluYWwgZG91YmxlIHZhciA9IDk5Ljk7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZmllbGRQcm9wZXJ0aWVzL2RvdWJsZUNvbnN0YW50Q2hhbmdlL3NyYy9DbGllbnQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2ZpZWxkUHJvcGVydGllcy9kb3VibGVDb25zdGFudENoYW5nZS9zcmMvQ2xpZW50LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzU3MzBlZgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2ZpZWxkUHJvcGVydGllcy9kb3VibGVDb25zdGFudENoYW5nZS9zcmMvQ2xpZW50LmphdmEKQEAgLTAsMCArMSw1IEBACitjbGFzcyBDbGllbnQgeworICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisgICAgU3lzdGVtLm91dC5wcmludGxuKFNlcnZlci52YXIpOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZmllbGRQcm9wZXJ0aWVzL2RvdWJsZUNvbnN0YW50Q2hhbmdlL3NyYy9TZXJ2ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2ZpZWxkUHJvcGVydGllcy9kb3VibGVDb25zdGFudENoYW5nZS9zcmMvU2VydmVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjBhNTZiZgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2ZpZWxkUHJvcGVydGllcy9kb3VibGVDb25zdGFudENoYW5nZS9zcmMvU2VydmVyLmphdmEKQEAgLTAsMCArMSwzIEBACitjbGFzcyBTZXJ2ZXIgeworICBzdGF0aWMgZmluYWwgZG91YmxlIHZhciA9IDEwMC4wOworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2ZpZWxkUHJvcGVydGllcy9mbG9hdENvbnN0YW50Q2hhbmdlLmxvZyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2ZpZWxkUHJvcGVydGllcy9mbG9hdENvbnN0YW50Q2hhbmdlLmxvZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MTgxMzJhCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZmllbGRQcm9wZXJ0aWVzL2Zsb2F0Q29uc3RhbnRDaGFuZ2UubG9nCkBAIC0wLDAgKzEsMTIgQEAKK0NsZWFuaW5nIG91dHB1dCBmaWxlczoKK291dC9wcm9kdWN0aW9uL0Zsb2F0Q29uc3RhbnRDaGFuZ2UvU2VydmVyLmNsYXNzCitFbmQgb2YgZmlsZXMKK0NvbXBpbGluZyBmaWxlczoKK3NyYy9TZXJ2ZXIuamF2YQorRW5kIG9mIGZpbGVzCitDbGVhbmluZyBvdXRwdXQgZmlsZXM6CitvdXQvcHJvZHVjdGlvbi9GbG9hdENvbnN0YW50Q2hhbmdlL0NsaWVudC5jbGFzcworRW5kIG9mIGZpbGVzCitDb21waWxpbmcgZmlsZXM6CitzcmMvQ2xpZW50LmphdmEKK0VuZCBvZiBmaWxlcwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZmllbGRQcm9wZXJ0aWVzL2Zsb2F0Q29uc3RhbnRDaGFuZ2UvU2VydmVyLmphdmEubmV3IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZmllbGRQcm9wZXJ0aWVzL2Zsb2F0Q29uc3RhbnRDaGFuZ2UvU2VydmVyLmphdmEubmV3Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU1OGQ2NzEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9maWVsZFByb3BlcnRpZXMvZmxvYXRDb25zdGFudENoYW5nZS9TZXJ2ZXIuamF2YS5uZXcKQEAgLTAsMCArMSwzIEBACitjbGFzcyBTZXJ2ZXIgeworICBzdGF0aWMgZmluYWwgZmxvYXQgdmFyID0gMTAwLjFmOworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2ZpZWxkUHJvcGVydGllcy9mbG9hdENvbnN0YW50Q2hhbmdlL3NyYy9DbGllbnQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2ZpZWxkUHJvcGVydGllcy9mbG9hdENvbnN0YW50Q2hhbmdlL3NyYy9DbGllbnQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NTczMGVmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZmllbGRQcm9wZXJ0aWVzL2Zsb2F0Q29uc3RhbnRDaGFuZ2Uvc3JjL0NsaWVudC5qYXZhCkBAIC0wLDAgKzEsNSBAQAorY2xhc3MgQ2xpZW50IHsKKyAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworICAgIFN5c3RlbS5vdXQucHJpbnRsbihTZXJ2ZXIudmFyKTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2ZpZWxkUHJvcGVydGllcy9mbG9hdENvbnN0YW50Q2hhbmdlL3NyYy9TZXJ2ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2ZpZWxkUHJvcGVydGllcy9mbG9hdENvbnN0YW50Q2hhbmdlL3NyYy9TZXJ2ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYzlmYjJkCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZmllbGRQcm9wZXJ0aWVzL2Zsb2F0Q29uc3RhbnRDaGFuZ2Uvc3JjL1NlcnZlci5qYXZhCkBAIC0wLDAgKzEsMyBAQAorY2xhc3MgU2VydmVyIHsKKyAgc3RhdGljIGZpbmFsIGZsb2F0IHZhciA9IDEwMC4wZjsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9maWVsZFByb3BlcnRpZXMvaW5uZXJDb25zdGFudENoYW5nZS5sb2cgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9maWVsZFByb3BlcnRpZXMvaW5uZXJDb25zdGFudENoYW5nZS5sb2cKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2U4ZTQ4MAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2ZpZWxkUHJvcGVydGllcy9pbm5lckNvbnN0YW50Q2hhbmdlLmxvZwpAQCAtMCwwICsxLDE2IEBACitDbGVhbmluZyBvdXRwdXQgZmlsZXM6CitvdXQvcHJvZHVjdGlvbi9Jbm5lckNvbnN0YW50Q2hhbmdlL1NlcnZlciRJbm5lci5jbGFzcworb3V0L3Byb2R1Y3Rpb24vSW5uZXJDb25zdGFudENoYW5nZS9TZXJ2ZXIuY2xhc3MKK0VuZCBvZiBmaWxlcworQ29tcGlsaW5nIGZpbGVzOgorc3JjL1NlcnZlci5qYXZhCitFbmQgb2YgZmlsZXMKK0NsZWFuaW5nIG91dHB1dCBmaWxlczoKK291dC9wcm9kdWN0aW9uL0lubmVyQ29uc3RhbnRDaGFuZ2UvQ2xpZW50LmNsYXNzCitvdXQvcHJvZHVjdGlvbi9Jbm5lckNvbnN0YW50Q2hhbmdlL1NlcnZlciRJbm5lci5jbGFzcworb3V0L3Byb2R1Y3Rpb24vSW5uZXJDb25zdGFudENoYW5nZS9TZXJ2ZXIuY2xhc3MKK0VuZCBvZiBmaWxlcworQ29tcGlsaW5nIGZpbGVzOgorc3JjL0NsaWVudC5qYXZhCitzcmMvU2VydmVyLmphdmEKK0VuZCBvZiBmaWxlcwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZmllbGRQcm9wZXJ0aWVzL2lubmVyQ29uc3RhbnRDaGFuZ2UvU2VydmVyLmphdmEubmV3IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZmllbGRQcm9wZXJ0aWVzL2lubmVyQ29uc3RhbnRDaGFuZ2UvU2VydmVyLmphdmEubmV3Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNiODRlYzMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9maWVsZFByb3BlcnRpZXMvaW5uZXJDb25zdGFudENoYW5nZS9TZXJ2ZXIuamF2YS5uZXcKQEAgLTAsMCArMSw1IEBACitjbGFzcyBTZXJ2ZXIgeworICBwdWJsaWMgc3RhdGljIGludGVyZmFjZSBJbm5lciB7CisgICAgU3RyaW5nIHMgPSAiU3RhdGljRmluYWxfdXBkYXRlZCI7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9maWVsZFByb3BlcnRpZXMvaW5uZXJDb25zdGFudENoYW5nZS9zcmMvQ2xpZW50LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9maWVsZFByb3BlcnRpZXMvaW5uZXJDb25zdGFudENoYW5nZS9zcmMvQ2xpZW50LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTg1Y2YyMwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2ZpZWxkUHJvcGVydGllcy9pbm5lckNvbnN0YW50Q2hhbmdlL3NyYy9DbGllbnQuamF2YQpAQCAtMCwwICsxLDUgQEAKK2NsYXNzIENsaWVudCB7CisgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oU2VydmVyLklubmVyLnMpOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZmllbGRQcm9wZXJ0aWVzL2lubmVyQ29uc3RhbnRDaGFuZ2Uvc3JjL1NlcnZlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZmllbGRQcm9wZXJ0aWVzL2lubmVyQ29uc3RhbnRDaGFuZ2Uvc3JjL1NlcnZlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE4YTFiYjYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9maWVsZFByb3BlcnRpZXMvaW5uZXJDb25zdGFudENoYW5nZS9zcmMvU2VydmVyLmphdmEKQEAgLTAsMCArMSw1IEBACitjbGFzcyBTZXJ2ZXIgeworICBwdWJsaWMgc3RhdGljIGludGVyZmFjZSBJbm5lciB7CisgICAgU3RyaW5nIHMgPSAiU3RhdGljRmluYWwiOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZmllbGRQcm9wZXJ0aWVzL2ludENvbnN0YW50Q2hhbmdlLmxvZyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2ZpZWxkUHJvcGVydGllcy9pbnRDb25zdGFudENoYW5nZS5sb2cKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2QwYmIzNAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2ZpZWxkUHJvcGVydGllcy9pbnRDb25zdGFudENoYW5nZS5sb2cKQEAgLTAsMCArMSwxMiBAQAorQ2xlYW5pbmcgb3V0cHV0IGZpbGVzOgorb3V0L3Byb2R1Y3Rpb24vSW50Q29uc3RhbnRDaGFuZ2UvU2VydmVyLmNsYXNzCitFbmQgb2YgZmlsZXMKK0NvbXBpbGluZyBmaWxlczoKK3NyYy9TZXJ2ZXIuamF2YQorRW5kIG9mIGZpbGVzCitDbGVhbmluZyBvdXRwdXQgZmlsZXM6CitvdXQvcHJvZHVjdGlvbi9JbnRDb25zdGFudENoYW5nZS9DbGllbnQuY2xhc3MKK0VuZCBvZiBmaWxlcworQ29tcGlsaW5nIGZpbGVzOgorc3JjL0NsaWVudC5qYXZhCitFbmQgb2YgZmlsZXMKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2ZpZWxkUHJvcGVydGllcy9pbnRDb25zdGFudENoYW5nZS9TZXJ2ZXIuamF2YS5uZXcgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9maWVsZFByb3BlcnRpZXMvaW50Q29uc3RhbnRDaGFuZ2UvU2VydmVyLmphdmEubmV3Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRlN2ExMjAKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9maWVsZFByb3BlcnRpZXMvaW50Q29uc3RhbnRDaGFuZ2UvU2VydmVyLmphdmEubmV3CkBAIC0wLDAgKzEsMyBAQAorY2xhc3MgU2VydmVyIHsKKyAgc3RhdGljIGZpbmFsIGludCB2YXIgPSA1MDA7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZmllbGRQcm9wZXJ0aWVzL2ludENvbnN0YW50Q2hhbmdlL3NyYy9DbGllbnQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2ZpZWxkUHJvcGVydGllcy9pbnRDb25zdGFudENoYW5nZS9zcmMvQ2xpZW50LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzU3MzBlZgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2ZpZWxkUHJvcGVydGllcy9pbnRDb25zdGFudENoYW5nZS9zcmMvQ2xpZW50LmphdmEKQEAgLTAsMCArMSw1IEBACitjbGFzcyBDbGllbnQgeworICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisgICAgU3lzdGVtLm91dC5wcmludGxuKFNlcnZlci52YXIpOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZmllbGRQcm9wZXJ0aWVzL2ludENvbnN0YW50Q2hhbmdlL3NyYy9TZXJ2ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2ZpZWxkUHJvcGVydGllcy9pbnRDb25zdGFudENoYW5nZS9zcmMvU2VydmVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjgyZDQyYQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2ZpZWxkUHJvcGVydGllcy9pbnRDb25zdGFudENoYW5nZS9zcmMvU2VydmVyLmphdmEKQEAgLTAsMCArMSwzIEBACitjbGFzcyBTZXJ2ZXIgeworICBzdGF0aWMgZmluYWwgaW50IHZhciA9IDEwMDsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9maWVsZFByb3BlcnRpZXMvbG9uZ0NvbnN0YW50Q2hhbmdlLmxvZyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2ZpZWxkUHJvcGVydGllcy9sb25nQ29uc3RhbnRDaGFuZ2UubG9nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUyMjFlMTUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9maWVsZFByb3BlcnRpZXMvbG9uZ0NvbnN0YW50Q2hhbmdlLmxvZwpAQCAtMCwwICsxLDEyIEBACitDbGVhbmluZyBvdXRwdXQgZmlsZXM6CitvdXQvcHJvZHVjdGlvbi9Mb25nQ29uc3RhbnRDaGFuZ2UvU2VydmVyLmNsYXNzCitFbmQgb2YgZmlsZXMKK0NvbXBpbGluZyBmaWxlczoKK3NyYy9TZXJ2ZXIuamF2YQorRW5kIG9mIGZpbGVzCitDbGVhbmluZyBvdXRwdXQgZmlsZXM6CitvdXQvcHJvZHVjdGlvbi9Mb25nQ29uc3RhbnRDaGFuZ2UvQ2xpZW50LmNsYXNzCitFbmQgb2YgZmlsZXMKK0NvbXBpbGluZyBmaWxlczoKK3NyYy9DbGllbnQuamF2YQorRW5kIG9mIGZpbGVzCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9maWVsZFByb3BlcnRpZXMvbG9uZ0NvbnN0YW50Q2hhbmdlL1NlcnZlci5qYXZhLm5ldyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2ZpZWxkUHJvcGVydGllcy9sb25nQ29uc3RhbnRDaGFuZ2UvU2VydmVyLmphdmEubmV3Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE5NWY4MzgKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9maWVsZFByb3BlcnRpZXMvbG9uZ0NvbnN0YW50Q2hhbmdlL1NlcnZlci5qYXZhLm5ldwpAQCAtMCwwICsxLDMgQEAKK2NsYXNzIFNlcnZlciB7CisgIHN0YXRpYyBmaW5hbCBsb25nIHZhciA9IDUwMDAwMDBMOworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2ZpZWxkUHJvcGVydGllcy9sb25nQ29uc3RhbnRDaGFuZ2Uvc3JjL0NsaWVudC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZmllbGRQcm9wZXJ0aWVzL2xvbmdDb25zdGFudENoYW5nZS9zcmMvQ2xpZW50LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzU3MzBlZgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2ZpZWxkUHJvcGVydGllcy9sb25nQ29uc3RhbnRDaGFuZ2Uvc3JjL0NsaWVudC5qYXZhCkBAIC0wLDAgKzEsNSBAQAorY2xhc3MgQ2xpZW50IHsKKyAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworICAgIFN5c3RlbS5vdXQucHJpbnRsbihTZXJ2ZXIudmFyKTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2ZpZWxkUHJvcGVydGllcy9sb25nQ29uc3RhbnRDaGFuZ2Uvc3JjL1NlcnZlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZmllbGRQcm9wZXJ0aWVzL2xvbmdDb25zdGFudENoYW5nZS9zcmMvU2VydmVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWNiZGRkNwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2ZpZWxkUHJvcGVydGllcy9sb25nQ29uc3RhbnRDaGFuZ2Uvc3JjL1NlcnZlci5qYXZhCkBAIC0wLDAgKzEsMyBAQAorY2xhc3MgU2VydmVyIHsKKyAgc3RhdGljIGZpbmFsIGxvbmcgdmFyID0gMTAwMDAwMEw7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZmllbGRQcm9wZXJ0aWVzL25vbkNvbXBpbGVUaW1lQ29uc3RhbnQubG9nIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZmllbGRQcm9wZXJ0aWVzL25vbkNvbXBpbGVUaW1lQ29uc3RhbnQubG9nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJhN2JmODAKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9maWVsZFByb3BlcnRpZXMvbm9uQ29tcGlsZVRpbWVDb25zdGFudC5sb2cKQEAgLTAsMCArMSw2IEBACitDbGVhbmluZyBvdXRwdXQgZmlsZXM6CitvdXQvcHJvZHVjdGlvbi9Ob25Db21waWxlVGltZUNvbnN0YW50L1Rlc3QuY2xhc3MKK0VuZCBvZiBmaWxlcworQ29tcGlsaW5nIGZpbGVzOgorc3JjL1Rlc3QuamF2YQorRW5kIG9mIGZpbGVzCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9maWVsZFByb3BlcnRpZXMvbm9uQ29tcGlsZVRpbWVDb25zdGFudC9UZXN0LmphdmEubmV3IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZmllbGRQcm9wZXJ0aWVzL25vbkNvbXBpbGVUaW1lQ29uc3RhbnQvVGVzdC5qYXZhLm5ldwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NTkwYzA2Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZmllbGRQcm9wZXJ0aWVzL25vbkNvbXBpbGVUaW1lQ29uc3RhbnQvVGVzdC5qYXZhLm5ldwpAQCAtMCwwICsxLDkgQEAKKworLy8gbm90aGluZyBoYXMgY2hhbmdlZCEKK3B1YmxpYyBjbGFzcyBUZXN0IHsKKyAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQ09OU1QgPSBmb28oKTsKKworICBwcml2YXRlIHN0YXRpYyBpbnQgZm9vKCkgeworICAgIHJldHVybiAwOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZmllbGRQcm9wZXJ0aWVzL25vbkNvbXBpbGVUaW1lQ29uc3RhbnQvc3JjL0NsaWVudC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZmllbGRQcm9wZXJ0aWVzL25vbkNvbXBpbGVUaW1lQ29uc3RhbnQvc3JjL0NsaWVudC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA1YmU1Y2YKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9maWVsZFByb3BlcnRpZXMvbm9uQ29tcGlsZVRpbWVDb25zdGFudC9zcmMvQ2xpZW50LmphdmEKQEAgLTAsMCArMSw2IEBACisKK3B1YmxpYyBjbGFzcyBDbGllbnQgeworICBpbnQgZm9vKCl7CisgICAgcmV0dXJuIFRlc3QuQ09OU1Q7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9maWVsZFByb3BlcnRpZXMvbm9uQ29tcGlsZVRpbWVDb25zdGFudC9zcmMvVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZmllbGRQcm9wZXJ0aWVzL25vbkNvbXBpbGVUaW1lQ29uc3RhbnQvc3JjL1Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YjcyNjI0Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZmllbGRQcm9wZXJ0aWVzL25vbkNvbXBpbGVUaW1lQ29uc3RhbnQvc3JjL1Rlc3QuamF2YQpAQCAtMCwwICsxLDggQEAKKworcHVibGljIGNsYXNzIFRlc3QgeworICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBDT05TVCA9IGZvbygpOworCisgIHByaXZhdGUgc3RhdGljIGludCBmb28oKSB7CisgICAgcmV0dXJuIDA7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9maWVsZFByb3BlcnRpZXMvbm9uSW5jcmVtZW50YWwxLmxvZyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2ZpZWxkUHJvcGVydGllcy9ub25JbmNyZW1lbnRhbDEubG9nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE2ZWQ3NDQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9maWVsZFByb3BlcnRpZXMvbm9uSW5jcmVtZW50YWwxLmxvZwpAQCAtMCwwICsxLDEyIEBACitDbGVhbmluZyBvdXRwdXQgZmlsZXM6CitvdXQvcHJvZHVjdGlvbi9Ob25JbmNyZW1lbnRhbDEvQS9BLmNsYXNzCitFbmQgb2YgZmlsZXMKK0NvbXBpbGluZyBmaWxlczoKK3NyYy9BL0EuamF2YQorRW5kIG9mIGZpbGVzCitDbGVhbmluZyBvdXRwdXQgZmlsZXM6CitvdXQvcHJvZHVjdGlvbi9Ob25JbmNyZW1lbnRhbDEvQS9DLmNsYXNzCitFbmQgb2YgZmlsZXMKK0NvbXBpbGluZyBmaWxlczoKK3NyYy9BL0MuamF2YQorRW5kIG9mIGZpbGVzCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9maWVsZFByb3BlcnRpZXMvbm9uSW5jcmVtZW50YWwxL3NyYy9BL0EuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2ZpZWxkUHJvcGVydGllcy9ub25JbmNyZW1lbnRhbDEvc3JjL0EvQS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJkMzhhMDcKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9maWVsZFByb3BlcnRpZXMvbm9uSW5jcmVtZW50YWwxL3NyYy9BL0EuamF2YQpAQCAtMCwwICsxLDEyIEBACitwYWNrYWdlIEE7CisKKy8qKgorICogQ3JlYXRlZCBieSBJbnRlbGxpSiBJREVBLgorICogVXNlcjogZGIKKyAqIERhdGU6IDIzLjAxLjEyCisgKiBUaW1lOiAxMzo1MQorICogVG8gY2hhbmdlIHRoaXMgdGVtcGxhdGUgdXNlIEZpbGUgfCBTZXR0aW5ncyB8IEZpbGUgVGVtcGxhdGVzLgorICovCitwdWJsaWMgY2xhc3MgQSB7CisgICAgZmluYWwgc3RhdGljIGludCB4ID0gMTAyNDsKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2ZpZWxkUHJvcGVydGllcy9ub25JbmNyZW1lbnRhbDEvc3JjL0EvQS5qYXZhLm5ldyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2ZpZWxkUHJvcGVydGllcy9ub25JbmNyZW1lbnRhbDEvc3JjL0EvQS5qYXZhLm5ldwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNGE2MDIyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZmllbGRQcm9wZXJ0aWVzL25vbkluY3JlbWVudGFsMS9zcmMvQS9BLmphdmEubmV3CkBAIC0wLDAgKzEsMTIgQEAKK3BhY2thZ2UgQTsKKworLyoqCisgKiBDcmVhdGVkIGJ5IEludGVsbGlKIElERUEuCisgKiBVc2VyOiBkYgorICogRGF0ZTogMjMuMDEuMTIKKyAqIFRpbWU6IDEzOjUxCisgKiBUbyBjaGFuZ2UgdGhpcyB0ZW1wbGF0ZSB1c2UgRmlsZSB8IFNldHRpbmdzIHwgRmlsZSBUZW1wbGF0ZXMuCisgKi8KK3B1YmxpYyBjbGFzcyBBIHsKKyAgICBmaW5hbCBzdGF0aWMgaW50IHggPSAxMDI1OworfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZmllbGRQcm9wZXJ0aWVzL25vbkluY3JlbWVudGFsMS9zcmMvQS9DLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9maWVsZFByb3BlcnRpZXMvbm9uSW5jcmVtZW50YWwxL3NyYy9BL0MuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MGFjMDNhCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZmllbGRQcm9wZXJ0aWVzL25vbkluY3JlbWVudGFsMS9zcmMvQS9DLmphdmEKQEAgLTAsMCArMSwxNCBAQAorcGFja2FnZSBBOworCisvKioKKyAqIENyZWF0ZWQgYnkgSW50ZWxsaUogSURFQS4KKyAqIFVzZXI6IGRiCisgKiBEYXRlOiAyMy4wMS4xMgorICogVGltZTogMTM6NTEKKyAqIFRvIGNoYW5nZSB0aGlzIHRlbXBsYXRlIHVzZSBGaWxlIHwgU2V0dGluZ3MgfCBGaWxlIFRlbXBsYXRlcy4KKyAqLworcHVibGljIGNsYXNzIEMgeworICAgIHB1YmxpYyBpbnQgZ2V0KCl7CisgICAgICAgIHJldHVybiBBLng7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZmllbGRQcm9wZXJ0aWVzL25vbkluY3JlbWVudGFsMS9zcmMvQi9NLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9maWVsZFByb3BlcnRpZXMvbm9uSW5jcmVtZW50YWwxL3NyYy9CL00uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYjViNzFmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZmllbGRQcm9wZXJ0aWVzL25vbkluY3JlbWVudGFsMS9zcmMvQi9NLmphdmEKQEAgLTAsMCArMSwxNCBAQAorcGFja2FnZSBCOworCitpbXBvcnQgQS5DOworCisvKioKKyAqIENyZWF0ZWQgYnkgSW50ZWxsaUogSURFQS4KKyAqIFVzZXI6IGRiCisgKiBEYXRlOiAyMy4wMS4xMgorICogVGltZTogMTM6NTIKKyAqIFRvIGNoYW5nZSB0aGlzIHRlbXBsYXRlIHVzZSBGaWxlIHwgU2V0dGluZ3MgfCBGaWxlIFRlbXBsYXRlcy4KKyAqLworcHVibGljIGNsYXNzIE0geworICAgIGludCB5ID0gbmV3IEMoKS5nZXQoKTsKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2ZpZWxkUHJvcGVydGllcy9ub25JbmNyZW1lbnRhbDIubG9nIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZmllbGRQcm9wZXJ0aWVzL25vbkluY3JlbWVudGFsMi5sb2cKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWFmZDYzMAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2ZpZWxkUHJvcGVydGllcy9ub25JbmNyZW1lbnRhbDIubG9nCkBAIC0wLDAgKzEsMTQgQEAKK0NsZWFuaW5nIG91dHB1dCBmaWxlczoKK291dC9wcm9kdWN0aW9uL05vbkluY3JlbWVudGFsMi9BL0EuY2xhc3MKK0VuZCBvZiBmaWxlcworQ29tcGlsaW5nIGZpbGVzOgorc3JjL0EvQS5qYXZhCitFbmQgb2YgZmlsZXMKK0NsZWFuaW5nIG91dHB1dCBmaWxlczoKK291dC9wcm9kdWN0aW9uL05vbkluY3JlbWVudGFsMi9BL0MuY2xhc3MKK291dC9wcm9kdWN0aW9uL05vbkluY3JlbWVudGFsMi9CL00uY2xhc3MKK0VuZCBvZiBmaWxlcworQ29tcGlsaW5nIGZpbGVzOgorc3JjL0EvQy5qYXZhCitzcmMvQi9NLmphdmEKK0VuZCBvZiBmaWxlcwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZmllbGRQcm9wZXJ0aWVzL25vbkluY3JlbWVudGFsMi9zcmMvQS9BLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9maWVsZFByb3BlcnRpZXMvbm9uSW5jcmVtZW50YWwyL3NyYy9BL0EuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MjNjZTI4Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZmllbGRQcm9wZXJ0aWVzL25vbkluY3JlbWVudGFsMi9zcmMvQS9BLmphdmEKQEAgLTAsMCArMSwxMiBAQAorcGFja2FnZSBBOworCisvKioKKyAqIENyZWF0ZWQgYnkgSW50ZWxsaUogSURFQS4KKyAqIFVzZXI6IGRiCisgKiBEYXRlOiAyMy4wMS4xMgorICogVGltZTogMTM6NTEKKyAqIFRvIGNoYW5nZSB0aGlzIHRlbXBsYXRlIHVzZSBGaWxlIHwgU2V0dGluZ3MgfCBGaWxlIFRlbXBsYXRlcy4KKyAqLworcHVibGljIGNsYXNzIEEgeworICAgIHByb3RlY3RlZCBmaW5hbCBzdGF0aWMgaW50IHggPSAxMDI0OworfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZmllbGRQcm9wZXJ0aWVzL25vbkluY3JlbWVudGFsMi9zcmMvQS9BLmphdmEubmV3IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZmllbGRQcm9wZXJ0aWVzL25vbkluY3JlbWVudGFsMi9zcmMvQS9BLmphdmEubmV3Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYxMmYxMDIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9maWVsZFByb3BlcnRpZXMvbm9uSW5jcmVtZW50YWwyL3NyYy9BL0EuamF2YS5uZXcKQEAgLTAsMCArMSwxMiBAQAorcGFja2FnZSBBOworCisvKioKKyAqIENyZWF0ZWQgYnkgSW50ZWxsaUogSURFQS4KKyAqIFVzZXI6IGRiCisgKiBEYXRlOiAyMy4wMS4xMgorICogVGltZTogMTM6NTEKKyAqIFRvIGNoYW5nZSB0aGlzIHRlbXBsYXRlIHVzZSBGaWxlIHwgU2V0dGluZ3MgfCBGaWxlIFRlbXBsYXRlcy4KKyAqLworcHVibGljIGNsYXNzIEEgeworICAgIHByb3RlY3RlZCBmaW5hbCBzdGF0aWMgaW50IHggPSAxMDI1OworfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZmllbGRQcm9wZXJ0aWVzL25vbkluY3JlbWVudGFsMi9zcmMvQS9DLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9maWVsZFByb3BlcnRpZXMvbm9uSW5jcmVtZW50YWwyL3NyYy9BL0MuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MGFjMDNhCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZmllbGRQcm9wZXJ0aWVzL25vbkluY3JlbWVudGFsMi9zcmMvQS9DLmphdmEKQEAgLTAsMCArMSwxNCBAQAorcGFja2FnZSBBOworCisvKioKKyAqIENyZWF0ZWQgYnkgSW50ZWxsaUogSURFQS4KKyAqIFVzZXI6IGRiCisgKiBEYXRlOiAyMy4wMS4xMgorICogVGltZTogMTM6NTEKKyAqIFRvIGNoYW5nZSB0aGlzIHRlbXBsYXRlIHVzZSBGaWxlIHwgU2V0dGluZ3MgfCBGaWxlIFRlbXBsYXRlcy4KKyAqLworcHVibGljIGNsYXNzIEMgeworICAgIHB1YmxpYyBpbnQgZ2V0KCl7CisgICAgICAgIHJldHVybiBBLng7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZmllbGRQcm9wZXJ0aWVzL25vbkluY3JlbWVudGFsMi9zcmMvQi9NLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9maWVsZFByb3BlcnRpZXMvbm9uSW5jcmVtZW50YWwyL3NyYy9CL00uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iM2Q1YjU3Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZmllbGRQcm9wZXJ0aWVzL25vbkluY3JlbWVudGFsMi9zcmMvQi9NLmphdmEKQEAgLTAsMCArMSwxMyBAQAorcGFja2FnZSBCOworCitpbXBvcnQgQS5DOworLyoqCisgKiBDcmVhdGVkIGJ5IEludGVsbGlKIElERUEuCisgKiBVc2VyOiBkYgorICogRGF0ZTogMjMuMDEuMTIKKyAqIFRpbWU6IDEzOjUyCisgKiBUbyBjaGFuZ2UgdGhpcyB0ZW1wbGF0ZSB1c2UgRmlsZSB8IFNldHRpbmdzIHwgRmlsZSBUZW1wbGF0ZXMuCisgKi8KK3B1YmxpYyBjbGFzcyBNIGV4dGVuZHMgQS5BIHsKKyAgICBpbnQgeSA9IEEuQS54OworfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZmllbGRQcm9wZXJ0aWVzL25vbkluY3JlbWVudGFsMi9zcmMvQi9OLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9maWVsZFByb3BlcnRpZXMvbm9uSW5jcmVtZW50YWwyL3NyYy9CL04uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zY2E3OTU4Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZmllbGRQcm9wZXJ0aWVzL25vbkluY3JlbWVudGFsMi9zcmMvQi9OLmphdmEKQEAgLTAsMCArMSwxNCBAQAorcGFja2FnZSBCOworCitpbXBvcnQgQS5DOworCisvKioKKyAqIENyZWF0ZWQgYnkgSW50ZWxsaUogSURFQS4KKyAqIFVzZXI6IGRiCisgKiBEYXRlOiAyMy4wMS4xMgorICogVGltZTogMTM6NTIKKyAqIFRvIGNoYW5nZSB0aGlzIHRlbXBsYXRlIHVzZSBGaWxlIHwgU2V0dGluZ3MgfCBGaWxlIFRlbXBsYXRlcy4KKyAqLworcHVibGljIGNsYXNzIE4geworICAgIGludCB5ID0gbmV3IEMoKS5nZXQoKTsKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2ZpZWxkUHJvcGVydGllcy9ub25JbmNyZW1lbnRhbDMvQSRBLmphdmEubmV3fiBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2ZpZWxkUHJvcGVydGllcy9ub25JbmNyZW1lbnRhbDMvQSRBLmphdmEubmV3fgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZDM4YTA3Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZmllbGRQcm9wZXJ0aWVzL25vbkluY3JlbWVudGFsMy9BJEEuamF2YS5uZXd+CkBAIC0wLDAgKzEsMTIgQEAKK3BhY2thZ2UgQTsKKworLyoqCisgKiBDcmVhdGVkIGJ5IEludGVsbGlKIElERUEuCisgKiBVc2VyOiBkYgorICogRGF0ZTogMjMuMDEuMTIKKyAqIFRpbWU6IDEzOjUxCisgKiBUbyBjaGFuZ2UgdGhpcyB0ZW1wbGF0ZSB1c2UgRmlsZSB8IFNldHRpbmdzIHwgRmlsZSBUZW1wbGF0ZXMuCisgKi8KK3B1YmxpYyBjbGFzcyBBIHsKKyAgICBmaW5hbCBzdGF0aWMgaW50IHggPSAxMDI0OworfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZmllbGRQcm9wZXJ0aWVzL25vbkluY3JlbWVudGFsMy9zcmMvQS9BLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9maWVsZFByb3BlcnRpZXMvbm9uSW5jcmVtZW50YWwzL3NyYy9BL0EuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZDM4YTA3Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZmllbGRQcm9wZXJ0aWVzL25vbkluY3JlbWVudGFsMy9zcmMvQS9BLmphdmEKQEAgLTAsMCArMSwxMiBAQAorcGFja2FnZSBBOworCisvKioKKyAqIENyZWF0ZWQgYnkgSW50ZWxsaUogSURFQS4KKyAqIFVzZXI6IGRiCisgKiBEYXRlOiAyMy4wMS4xMgorICogVGltZTogMTM6NTEKKyAqIFRvIGNoYW5nZSB0aGlzIHRlbXBsYXRlIHVzZSBGaWxlIHwgU2V0dGluZ3MgfCBGaWxlIFRlbXBsYXRlcy4KKyAqLworcHVibGljIGNsYXNzIEEgeworICAgIGZpbmFsIHN0YXRpYyBpbnQgeCA9IDEwMjQ7Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9maWVsZFByb3BlcnRpZXMvbm9uSW5jcmVtZW50YWwzL3NyYy9BL0EuamF2YS5uZXcgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9maWVsZFByb3BlcnRpZXMvbm9uSW5jcmVtZW50YWwzL3NyYy9BL0EuamF2YS5uZXcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjRhNjAyMgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2ZpZWxkUHJvcGVydGllcy9ub25JbmNyZW1lbnRhbDMvc3JjL0EvQS5qYXZhLm5ldwpAQCAtMCwwICsxLDEyIEBACitwYWNrYWdlIEE7CisKKy8qKgorICogQ3JlYXRlZCBieSBJbnRlbGxpSiBJREVBLgorICogVXNlcjogZGIKKyAqIERhdGU6IDIzLjAxLjEyCisgKiBUaW1lOiAxMzo1MQorICogVG8gY2hhbmdlIHRoaXMgdGVtcGxhdGUgdXNlIEZpbGUgfCBTZXR0aW5ncyB8IEZpbGUgVGVtcGxhdGVzLgorICovCitwdWJsaWMgY2xhc3MgQSB7CisgICAgZmluYWwgc3RhdGljIGludCB4ID0gMTAyNTsKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2ZpZWxkUHJvcGVydGllcy9ub25JbmNyZW1lbnRhbDMvc3JjL0EvQy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZmllbGRQcm9wZXJ0aWVzL25vbkluY3JlbWVudGFsMy9zcmMvQS9DLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjBhYzAzYQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2ZpZWxkUHJvcGVydGllcy9ub25JbmNyZW1lbnRhbDMvc3JjL0EvQy5qYXZhCkBAIC0wLDAgKzEsMTQgQEAKK3BhY2thZ2UgQTsKKworLyoqCisgKiBDcmVhdGVkIGJ5IEludGVsbGlKIElERUEuCisgKiBVc2VyOiBkYgorICogRGF0ZTogMjMuMDEuMTIKKyAqIFRpbWU6IDEzOjUxCisgKiBUbyBjaGFuZ2UgdGhpcyB0ZW1wbGF0ZSB1c2UgRmlsZSB8IFNldHRpbmdzIHwgRmlsZSBUZW1wbGF0ZXMuCisgKi8KK3B1YmxpYyBjbGFzcyBDIHsKKyAgICBwdWJsaWMgaW50IGdldCgpeworICAgICAgICByZXR1cm4gQS54OworICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2ZpZWxkUHJvcGVydGllcy9ub25JbmNyZW1lbnRhbDMvc3JjL0IvTS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZmllbGRQcm9wZXJ0aWVzL25vbkluY3JlbWVudGFsMy9zcmMvQi9NLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmI1YjcxZgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2ZpZWxkUHJvcGVydGllcy9ub25JbmNyZW1lbnRhbDMvc3JjL0IvTS5qYXZhCkBAIC0wLDAgKzEsMTQgQEAKK3BhY2thZ2UgQjsKKworaW1wb3J0IEEuQzsKKworLyoqCisgKiBDcmVhdGVkIGJ5IEludGVsbGlKIElERUEuCisgKiBVc2VyOiBkYgorICogRGF0ZTogMjMuMDEuMTIKKyAqIFRpbWU6IDEzOjUyCisgKiBUbyBjaGFuZ2UgdGhpcyB0ZW1wbGF0ZSB1c2UgRmlsZSB8IFNldHRpbmdzIHwgRmlsZSBUZW1wbGF0ZXMuCisgKi8KK3B1YmxpYyBjbGFzcyBNIHsKKyAgICBpbnQgeSA9IG5ldyBDKCkuZ2V0KCk7Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9maWVsZFByb3BlcnRpZXMvbm9uSW5jcmVtZW50YWw0LmxvZyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2ZpZWxkUHJvcGVydGllcy9ub25JbmNyZW1lbnRhbDQubG9nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM1YjBiYmY5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZmllbGRQcm9wZXJ0aWVzL25vbkluY3JlbWVudGFsNC5sb2cKQEAgLTAsMCArMSw2IEBACitDbGVhbmluZyBvdXRwdXQgZmlsZXM6CitvdXQvcHJvZHVjdGlvbi9Ob25JbmNyZW1lbnRhbDQvQS5jbGFzcworRW5kIG9mIGZpbGVzCitDb21waWxpbmcgZmlsZXM6CitzcmMvQS5qYXZhCitFbmQgb2YgZmlsZXMKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2ZpZWxkUHJvcGVydGllcy9ub25JbmNyZW1lbnRhbDQvQS5qYXZhLm5ldyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2ZpZWxkUHJvcGVydGllcy9ub25JbmNyZW1lbnRhbDQvQS5qYXZhLm5ldwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43M2RjYTI4Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZmllbGRQcm9wZXJ0aWVzL25vbkluY3JlbWVudGFsNC9BLmphdmEubmV3CkBAIC0wLDAgKzEsMTAgQEAKKy8qKgorICogQ3JlYXRlZCB3aXRoIEludGVsbGlKIElERUEuCisgKiBVc2VyOiBkYgorICogRGF0ZTogMzEuMDMuMTIKKyAqIFRpbWU6IDE3OjUwCisgKiBUbyBjaGFuZ2UgdGhpcyB0ZW1wbGF0ZSB1c2UgRmlsZSB8IFNldHRpbmdzIHwgRmlsZSBUZW1wbGF0ZXMuCisgKi8KK3B1YmxpYyBjbGFzcyBBIHsKKyAgICBwdWJsaWMgZmluYWwgc3RhdGljIGludCBYID0gMDsKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2ZpZWxkUHJvcGVydGllcy9ub25JbmNyZW1lbnRhbDQvc3JjL0EuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2ZpZWxkUHJvcGVydGllcy9ub25JbmNyZW1lbnRhbDQvc3JjL0EuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YjYxYmQ2Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZmllbGRQcm9wZXJ0aWVzL25vbkluY3JlbWVudGFsNC9zcmMvQS5qYXZhCkBAIC0wLDAgKzEsMTQgQEAKKy8qKgorICogQ3JlYXRlZCB3aXRoIEludGVsbGlKIElERUEuCisgKiBVc2VyOiBkYgorICogRGF0ZTogMzEuMDMuMTIKKyAqIFRpbWU6IDE3OjUwCisgKiBUbyBjaGFuZ2UgdGhpcyB0ZW1wbGF0ZSB1c2UgRmlsZSB8IFNldHRpbmdzIHwgRmlsZSBUZW1wbGF0ZXMuCisgKi8KK3B1YmxpYyBjbGFzcyBBIHsKKyAgICBwdWJsaWMgZmluYWwgc3RhdGljIGludCBYOworCisgICAgc3RhdGljIHsKKyAgICAgICAgWCA9IDEwMDsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9maWVsZFByb3BlcnRpZXMvbm9uSW5jcmVtZW50YWw0L3NyYy9DLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9maWVsZFByb3BlcnRpZXMvbm9uSW5jcmVtZW50YWw0L3NyYy9DLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2Y3YmEwZQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2ZpZWxkUHJvcGVydGllcy9ub25JbmNyZW1lbnRhbDQvc3JjL0MuamF2YQpAQCAtMCwwICsxLDkgQEAKKy8qKgorICogQ3JlYXRlZCB3aXRoIEludGVsbGlKIElERUEuCisgKiBVc2VyOiBkYgorICogRGF0ZTogMzEuMDMuMTIKKyAqIFRpbWU6IDE3OjUxCisgKiBUbyBjaGFuZ2UgdGhpcyB0ZW1wbGF0ZSB1c2UgRmlsZSB8IFNldHRpbmdzIHwgRmlsZSBUZW1wbGF0ZXMuCisgKi8KK3B1YmxpYyBjbGFzcyBDIHsKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2ZpZWxkUHJvcGVydGllcy9zdHJpbmdDb25zdGFudENoYW5nZS5sb2cgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9maWVsZFByb3BlcnRpZXMvc3RyaW5nQ29uc3RhbnRDaGFuZ2UubG9nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg2NzViZjAKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9maWVsZFByb3BlcnRpZXMvc3RyaW5nQ29uc3RhbnRDaGFuZ2UubG9nCkBAIC0wLDAgKzEsMTIgQEAKK0NsZWFuaW5nIG91dHB1dCBmaWxlczoKK291dC9wcm9kdWN0aW9uL1N0cmluZ0NvbnN0YW50Q2hhbmdlL1NlcnZlci5jbGFzcworRW5kIG9mIGZpbGVzCitDb21waWxpbmcgZmlsZXM6CitzcmMvU2VydmVyLmphdmEKK0VuZCBvZiBmaWxlcworQ2xlYW5pbmcgb3V0cHV0IGZpbGVzOgorb3V0L3Byb2R1Y3Rpb24vU3RyaW5nQ29uc3RhbnRDaGFuZ2UvQ2xpZW50LmNsYXNzCitFbmQgb2YgZmlsZXMKK0NvbXBpbGluZyBmaWxlczoKK3NyYy9DbGllbnQuamF2YQorRW5kIG9mIGZpbGVzCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9maWVsZFByb3BlcnRpZXMvc3RyaW5nQ29uc3RhbnRDaGFuZ2UvU2VydmVyLmphdmEubmV3IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZmllbGRQcm9wZXJ0aWVzL3N0cmluZ0NvbnN0YW50Q2hhbmdlL1NlcnZlci5qYXZhLm5ldwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yM2YxYzIwCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZmllbGRQcm9wZXJ0aWVzL3N0cmluZ0NvbnN0YW50Q2hhbmdlL1NlcnZlci5qYXZhLm5ldwpAQCAtMCwwICsxLDMgQEAKK2NsYXNzIFNlcnZlciB7CisgIHN0YXRpYyBmaW5hbCBTdHJpbmcgcyA9ICJDaGFuZ2VkU3RhdGljRmluYWwiOworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2ZpZWxkUHJvcGVydGllcy9zdHJpbmdDb25zdGFudENoYW5nZS9zcmMvQ2xpZW50LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9maWVsZFByb3BlcnRpZXMvc3RyaW5nQ29uc3RhbnRDaGFuZ2Uvc3JjL0NsaWVudC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRkZDZhMWIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9maWVsZFByb3BlcnRpZXMvc3RyaW5nQ29uc3RhbnRDaGFuZ2Uvc3JjL0NsaWVudC5qYXZhCkBAIC0wLDAgKzEsNSBAQAorY2xhc3MgQ2xpZW50IHsKKyAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworICAgIFN5c3RlbS5vdXQucHJpbnRsbihTZXJ2ZXIucyk7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9maWVsZFByb3BlcnRpZXMvc3RyaW5nQ29uc3RhbnRDaGFuZ2Uvc3JjL1NlcnZlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZmllbGRQcm9wZXJ0aWVzL3N0cmluZ0NvbnN0YW50Q2hhbmdlL3NyYy9TZXJ2ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YTI0ZjFiCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZmllbGRQcm9wZXJ0aWVzL3N0cmluZ0NvbnN0YW50Q2hhbmdlL3NyYy9TZXJ2ZXIuamF2YQpAQCAtMCwwICsxLDMgQEAKK2NsYXNzIFNlcnZlciB7CisgIHN0YXRpYyBmaW5hbCBTdHJpbmcgcyA9ICJTdGF0aWNGaW5hbCI7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZmllbGRQcm9wZXJ0aWVzL3N0cmluZ0NvbnN0YW50TGVzc0FjY2Vzc2libGUubG9nIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZmllbGRQcm9wZXJ0aWVzL3N0cmluZ0NvbnN0YW50TGVzc0FjY2Vzc2libGUubG9nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlmYzkzN2EKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9maWVsZFByb3BlcnRpZXMvc3RyaW5nQ29uc3RhbnRMZXNzQWNjZXNzaWJsZS5sb2cKQEAgLTAsMCArMSwxNCBAQAorQ2xlYW5pbmcgb3V0cHV0IGZpbGVzOgorb3V0L3Byb2R1Y3Rpb24vU3RyaW5nQ29uc3RhbnRMZXNzQWNjZXNzaWJsZS9TZXJ2ZXIuY2xhc3MKK0VuZCBvZiBmaWxlcworQ29tcGlsaW5nIGZpbGVzOgorc3JjL1NlcnZlci5qYXZhCitFbmQgb2YgZmlsZXMKK0NsZWFuaW5nIG91dHB1dCBmaWxlczoKK291dC9wcm9kdWN0aW9uL1N0cmluZ0NvbnN0YW50TGVzc0FjY2Vzc2libGUvQ2xpZW50LmNsYXNzCitvdXQvcHJvZHVjdGlvbi9TdHJpbmdDb25zdGFudExlc3NBY2Nlc3NpYmxlL1NlcnZlci5jbGFzcworRW5kIG9mIGZpbGVzCitDb21waWxpbmcgZmlsZXM6CitzcmMvQ2xpZW50LmphdmEKK3NyYy9TZXJ2ZXIuamF2YQorRW5kIG9mIGZpbGVzCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9maWVsZFByb3BlcnRpZXMvc3RyaW5nQ29uc3RhbnRMZXNzQWNjZXNzaWJsZS9TZXJ2ZXIuamF2YS5uZXcgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9maWVsZFByb3BlcnRpZXMvc3RyaW5nQ29uc3RhbnRMZXNzQWNjZXNzaWJsZS9TZXJ2ZXIuamF2YS5uZXcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzY2NzQ3MQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2ZpZWxkUHJvcGVydGllcy9zdHJpbmdDb25zdGFudExlc3NBY2Nlc3NpYmxlL1NlcnZlci5qYXZhLm5ldwpAQCAtMCwwICsxLDMgQEAKK2NsYXNzIFNlcnZlciB7CisgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBzID0gIlN0YXRpY0ZpbmFsIjsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9maWVsZFByb3BlcnRpZXMvc3RyaW5nQ29uc3RhbnRMZXNzQWNjZXNzaWJsZS9zcmMvQ2xpZW50LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9maWVsZFByb3BlcnRpZXMvc3RyaW5nQ29uc3RhbnRMZXNzQWNjZXNzaWJsZS9zcmMvQ2xpZW50LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGRkNmExYgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2ZpZWxkUHJvcGVydGllcy9zdHJpbmdDb25zdGFudExlc3NBY2Nlc3NpYmxlL3NyYy9DbGllbnQuamF2YQpAQCAtMCwwICsxLDUgQEAKK2NsYXNzIENsaWVudCB7CisgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oU2VydmVyLnMpOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZmllbGRQcm9wZXJ0aWVzL3N0cmluZ0NvbnN0YW50TGVzc0FjY2Vzc2libGUvc3JjL1NlcnZlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZmllbGRQcm9wZXJ0aWVzL3N0cmluZ0NvbnN0YW50TGVzc0FjY2Vzc2libGUvc3JjL1NlcnZlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk0YTc4OTQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9maWVsZFByb3BlcnRpZXMvc3RyaW5nQ29uc3RhbnRMZXNzQWNjZXNzaWJsZS9zcmMvU2VydmVyLmphdmEKQEAgLTAsMCArMSwzIEBACitjbGFzcyBTZXJ2ZXIgeworICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBzID0gIlN0YXRpY0ZpbmFsIjsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9maWVsZFByb3BlcnRpZXMvdHlwZUNoYW5nZS5sb2cgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9maWVsZFByb3BlcnRpZXMvdHlwZUNoYW5nZS5sb2cKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGEwNmViNgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2ZpZWxkUHJvcGVydGllcy90eXBlQ2hhbmdlLmxvZwpAQCAtMCwwICsxLDEyIEBACitDbGVhbmluZyBvdXRwdXQgZmlsZXM6CitvdXQvcHJvZHVjdGlvbi9UeXBlQ2hhbmdlL0EuY2xhc3MKK0VuZCBvZiBmaWxlcworQ29tcGlsaW5nIGZpbGVzOgorc3JjL0EuamF2YQorRW5kIG9mIGZpbGVzCitDbGVhbmluZyBvdXRwdXQgZmlsZXM6CitvdXQvcHJvZHVjdGlvbi9UeXBlQ2hhbmdlL0IuY2xhc3MKK0VuZCBvZiBmaWxlcworQ29tcGlsaW5nIGZpbGVzOgorc3JjL0IuamF2YQorRW5kIG9mIGZpbGVzCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9maWVsZFByb3BlcnRpZXMvdHlwZUNoYW5nZS9BLmphdmEubmV3IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZmllbGRQcm9wZXJ0aWVzL3R5cGVDaGFuZ2UvQS5qYXZhLm5ldwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOTkzM2YzCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZmllbGRQcm9wZXJ0aWVzL3R5cGVDaGFuZ2UvQS5qYXZhLm5ldwpAQCAtMCwwICsxLDMgQEAKK3B1YmxpYyBjbGFzcyBBIHsKKyAgICBTdHJpbmcgeDsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9maWVsZFByb3BlcnRpZXMvdHlwZUNoYW5nZS9zcmMvQS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZmllbGRQcm9wZXJ0aWVzL3R5cGVDaGFuZ2Uvc3JjL0EuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZWIzMjZjCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZmllbGRQcm9wZXJ0aWVzL3R5cGVDaGFuZ2Uvc3JjL0EuamF2YQpAQCAtMCwwICsxLDMgQEAKK3B1YmxpYyBjbGFzcyBBIHsKKyAgICBpbnQgeDsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9maWVsZFByb3BlcnRpZXMvdHlwZUNoYW5nZS9zcmMvQi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZmllbGRQcm9wZXJ0aWVzL3R5cGVDaGFuZ2Uvc3JjL0IuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NTI1YmNmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZmllbGRQcm9wZXJ0aWVzL3R5cGVDaGFuZ2Uvc3JjL0IuamF2YQpAQCAtMCwwICsxLDUgQEAKK3B1YmxpYyBjbGFzcyBCIHsKKyAgICB2b2lkIGYgKEEgYSkgeworICAgICAgICBhLnggPSAxOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9maWVsZFByb3BlcnRpZXMvdHlwZUNoYW5nZTEubG9nIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZmllbGRQcm9wZXJ0aWVzL3R5cGVDaGFuZ2UxLmxvZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZGNkNzgxCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZmllbGRQcm9wZXJ0aWVzL3R5cGVDaGFuZ2UxLmxvZwpAQCAtMCwwICsxLDEyIEBACitDbGVhbmluZyBvdXRwdXQgZmlsZXM6CitvdXQvcHJvZHVjdGlvbi9UeXBlQ2hhbmdlMS9BLmNsYXNzCitFbmQgb2YgZmlsZXMKK0NvbXBpbGluZyBmaWxlczoKK3NyYy9BLmphdmEKK0VuZCBvZiBmaWxlcworQ2xlYW5pbmcgb3V0cHV0IGZpbGVzOgorb3V0L3Byb2R1Y3Rpb24vVHlwZUNoYW5nZTEvQy5jbGFzcworRW5kIG9mIGZpbGVzCitDb21waWxpbmcgZmlsZXM6CitzcmMvQy5qYXZhCitFbmQgb2YgZmlsZXMKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2ZpZWxkUHJvcGVydGllcy90eXBlQ2hhbmdlMS9BLmphdmEubmV3IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZmllbGRQcm9wZXJ0aWVzL3R5cGVDaGFuZ2UxL0EuamF2YS5uZXcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTk5MzNmMwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2ZpZWxkUHJvcGVydGllcy90eXBlQ2hhbmdlMS9BLmphdmEubmV3CkBAIC0wLDAgKzEsMyBAQAorcHVibGljIGNsYXNzIEEgeworICAgIFN0cmluZyB4OworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2ZpZWxkUHJvcGVydGllcy90eXBlQ2hhbmdlMS9zcmMvQS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZmllbGRQcm9wZXJ0aWVzL3R5cGVDaGFuZ2UxL3NyYy9BLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2ViMzI2YwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2ZpZWxkUHJvcGVydGllcy90eXBlQ2hhbmdlMS9zcmMvQS5qYXZhCkBAIC0wLDAgKzEsMyBAQAorcHVibGljIGNsYXNzIEEgeworICAgIGludCB4OworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2ZpZWxkUHJvcGVydGllcy90eXBlQ2hhbmdlMS9zcmMvQi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZmllbGRQcm9wZXJ0aWVzL3R5cGVDaGFuZ2UxL3NyYy9CLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjIyMWE1MwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2ZpZWxkUHJvcGVydGllcy90eXBlQ2hhbmdlMS9zcmMvQi5qYXZhCkBAIC0wLDAgKzEsMiBAQAorcHVibGljIGNsYXNzIEIgZXh0ZW5kcyBBIHsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9maWVsZFByb3BlcnRpZXMvdHlwZUNoYW5nZTEvc3JjL0MuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2ZpZWxkUHJvcGVydGllcy90eXBlQ2hhbmdlMS9zcmMvQy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEwYjU1MWMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9maWVsZFByb3BlcnRpZXMvdHlwZUNoYW5nZTEvc3JjL0MuamF2YQpAQCAtMCwwICsxLDUgQEAKK3B1YmxpYyBjbGFzcyBDIHsKKyAgICB2b2lkIGYgKEIgYikgeworICAgICAgICBiLnggPSAxOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9maWVsZFByb3BlcnRpZXMvdHlwZUNoYW5nZTEvc3JjL0QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2ZpZWxkUHJvcGVydGllcy90eXBlQ2hhbmdlMS9zcmMvRC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNmOTQ1MTEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9maWVsZFByb3BlcnRpZXMvdHlwZUNoYW5nZTEvc3JjL0QuamF2YQpAQCAtMCwwICsxLDUgQEAKK3B1YmxpYyBjbGFzcyBEIHsKKyAgICB2b2lkIGYgKEIgYikgeworCisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2ZpZWxkUHJvcGVydGllcy90eXBlQ2hhbmdlMi5sb2cgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9maWVsZFByb3BlcnRpZXMvdHlwZUNoYW5nZTIubG9nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE2ZDhmZGYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9maWVsZFByb3BlcnRpZXMvdHlwZUNoYW5nZTIubG9nCkBAIC0wLDAgKzEsNiBAQAorQ2xlYW5pbmcgb3V0cHV0IGZpbGVzOgorb3V0L3Byb2R1Y3Rpb24vVHlwZUNoYW5nZTIvQS5jbGFzcworRW5kIG9mIGZpbGVzCitDb21waWxpbmcgZmlsZXM6CitzcmMvQS5qYXZhCitFbmQgb2YgZmlsZXMKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2ZpZWxkUHJvcGVydGllcy90eXBlQ2hhbmdlMi9BLmphdmEubmV3IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZmllbGRQcm9wZXJ0aWVzL3R5cGVDaGFuZ2UyL0EuamF2YS5uZXcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTk5MzNmMwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2ZpZWxkUHJvcGVydGllcy90eXBlQ2hhbmdlMi9BLmphdmEubmV3CkBAIC0wLDAgKzEsMyBAQAorcHVibGljIGNsYXNzIEEgeworICAgIFN0cmluZyB4OworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2ZpZWxkUHJvcGVydGllcy90eXBlQ2hhbmdlMi9zcmMvQS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZmllbGRQcm9wZXJ0aWVzL3R5cGVDaGFuZ2UyL3NyYy9BLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTk0YzVmNwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2ZpZWxkUHJvcGVydGllcy90eXBlQ2hhbmdlMi9zcmMvQS5qYXZhCkBAIC0wLDAgKzEsMyBAQAorcHVibGljIGNsYXNzIEEgeworICBwdWJsaWMgaW50IHg7Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9maWVsZFByb3BlcnRpZXMvdHlwZUNoYW5nZTIvc3JjL0IuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2ZpZWxkUHJvcGVydGllcy90eXBlQ2hhbmdlMi9zcmMvQi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYxMjI3N2EKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9maWVsZFByb3BlcnRpZXMvdHlwZUNoYW5nZTIvc3JjL0IuamF2YQpAQCAtMCwwICsxLDMgQEAKK3B1YmxpYyBjbGFzcyBCIGV4dGVuZHMgQSB7CisgIHB1YmxpYyBpbnQgeDsKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2ZpZWxkUHJvcGVydGllcy90eXBlQ2hhbmdlMi9zcmMvQy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZmllbGRQcm9wZXJ0aWVzL3R5cGVDaGFuZ2UyL3NyYy9DLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTBiNTUxYwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2ZpZWxkUHJvcGVydGllcy90eXBlQ2hhbmdlMi9zcmMvQy5qYXZhCkBAIC0wLDAgKzEsNSBAQAorcHVibGljIGNsYXNzIEMgeworICAgIHZvaWQgZiAoQiBiKSB7CisgICAgICAgIGIueCA9IDE7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2ZpZWxkUHJvcGVydGllcy90eXBlQ2hhbmdlMi9zcmMvRC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZmllbGRQcm9wZXJ0aWVzL3R5cGVDaGFuZ2UyL3NyYy9ELmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2Y5NDUxMQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2ZpZWxkUHJvcGVydGllcy90eXBlQ2hhbmdlMi9zcmMvRC5qYXZhCkBAIC0wLDAgKzEsNSBAQAorcHVibGljIGNsYXNzIEQgeworICAgIHZvaWQgZiAoQiBiKSB7CisKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZ2VuZXJpY3MvYWRkTWV0aG9kVG9CYXNlLmxvZyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2dlbmVyaWNzL2FkZE1ldGhvZFRvQmFzZS5sb2cKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzUwYThiYQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2dlbmVyaWNzL2FkZE1ldGhvZFRvQmFzZS5sb2cKQEAgLTAsMCArMSwxMiBAQAorQ2xlYW5pbmcgb3V0cHV0IGZpbGVzOgorb3V0L3Byb2R1Y3Rpb24vQWRkTWV0aG9kVG9CYXNlL0MuY2xhc3MKK0VuZCBvZiBmaWxlcworQ29tcGlsaW5nIGZpbGVzOgorc3JjL0MuamF2YQorRW5kIG9mIGZpbGVzCitDbGVhbmluZyBvdXRwdXQgZmlsZXM6CitvdXQvcHJvZHVjdGlvbi9BZGRNZXRob2RUb0Jhc2UvRC5jbGFzcworRW5kIG9mIGZpbGVzCitDb21waWxpbmcgZmlsZXM6CitzcmMvRC5qYXZhCitFbmQgb2YgZmlsZXMKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2dlbmVyaWNzL2FkZE1ldGhvZFRvQmFzZS9DLmphdmEubmV3IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZ2VuZXJpY3MvYWRkTWV0aG9kVG9CYXNlL0MuamF2YS5uZXcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzBhOWI1MAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2dlbmVyaWNzL2FkZE1ldGhvZFRvQmFzZS9DLmphdmEubmV3CkBAIC0wLDAgKzEsMyBAQAorcHVibGljIGNsYXNzIEMgeworICBPYmplY3QgaWQoT2JqZWN0IHgpIHtyZXR1cm4gbnVsbDt9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZ2VuZXJpY3MvYWRkTWV0aG9kVG9CYXNlL2RhdGEueG1sIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZ2VuZXJpY3MvYWRkTWV0aG9kVG9CYXNlL2RhdGEueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUwNjhlNDcKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9nZW5lcmljcy9hZGRNZXRob2RUb0Jhc2UvZGF0YS54bWwKQEAgLTAsMCArMSwxMCBAQAorPHRlc3REYXRhPgorICA8ZGVsZXRlZF9ieV9tYWtlPgorICAgIDxmaWxlIHBhdGg9ImNsYXNzZXMvQy5jbGFzcyIgLz4KKyAgICA8ZmlsZSBwYXRoPSJjbGFzc2VzL0QuY2xhc3MiIC8+CisgIDwvZGVsZXRlZF9ieV9tYWtlPgorCisgIDxyZWNvbXBpbGU+CisgICAgPGZpbGUgcGF0aD0ic291cmNlL0QuamF2YSIgLz4KKyAgPC9yZWNvbXBpbGU+Cis8L3Rlc3REYXRhPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2dlbmVyaWNzL2FkZE1ldGhvZFRvQmFzZS9zcmMvQy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZ2VuZXJpY3MvYWRkTWV0aG9kVG9CYXNlL3NyYy9DLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjVlZjAxYwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2dlbmVyaWNzL2FkZE1ldGhvZFRvQmFzZS9zcmMvQy5qYXZhCkBAIC0wLDAgKzEsMiBAQAorcHVibGljIGNsYXNzIEMgeworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2dlbmVyaWNzL2FkZE1ldGhvZFRvQmFzZS9zcmMvRC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZ2VuZXJpY3MvYWRkTWV0aG9kVG9CYXNlL3NyYy9ELmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjU5NWQ3NAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2dlbmVyaWNzL2FkZE1ldGhvZFRvQmFzZS9zcmMvRC5qYXZhCkBAIC0wLDAgKzEsMyBAQAorcHVibGljIGNsYXNzIEQ8QT4gZXh0ZW5kcyBDIHsKKyAgQSBpZChBIHgpIHtyZXR1cm4gbnVsbDt9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZ2VuZXJpY3MvYWRkUGFyYW1ldGVyaXplZE1ldGhvZFRvQmFzZS5sb2cgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9nZW5lcmljcy9hZGRQYXJhbWV0ZXJpemVkTWV0aG9kVG9CYXNlLmxvZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNzhkNjZhCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZ2VuZXJpY3MvYWRkUGFyYW1ldGVyaXplZE1ldGhvZFRvQmFzZS5sb2cKQEAgLTAsMCArMSwxMiBAQAorQ2xlYW5pbmcgb3V0cHV0IGZpbGVzOgorb3V0L3Byb2R1Y3Rpb24vQWRkUGFyYW1ldGVyaXplZE1ldGhvZFRvQmFzZS9DLmNsYXNzCitFbmQgb2YgZmlsZXMKK0NvbXBpbGluZyBmaWxlczoKK3NyYy9DLmphdmEKK0VuZCBvZiBmaWxlcworQ2xlYW5pbmcgb3V0cHV0IGZpbGVzOgorb3V0L3Byb2R1Y3Rpb24vQWRkUGFyYW1ldGVyaXplZE1ldGhvZFRvQmFzZS9ELmNsYXNzCitFbmQgb2YgZmlsZXMKK0NvbXBpbGluZyBmaWxlczoKK3NyYy9ELmphdmEKK0VuZCBvZiBmaWxlcwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZ2VuZXJpY3MvYWRkUGFyYW1ldGVyaXplZE1ldGhvZFRvQmFzZS9DLmphdmEubmV3IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZ2VuZXJpY3MvYWRkUGFyYW1ldGVyaXplZE1ldGhvZFRvQmFzZS9DLmphdmEubmV3Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI0NzFkMDYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9nZW5lcmljcy9hZGRQYXJhbWV0ZXJpemVkTWV0aG9kVG9CYXNlL0MuamF2YS5uZXcKQEAgLTAsMCArMSwzIEBACitwdWJsaWMgY2xhc3MgQzxBPiB7CisgIEEgaWQoQSB4KSB7cmV0dXJuIG51bGw7fQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2dlbmVyaWNzL2FkZFBhcmFtZXRlcml6ZWRNZXRob2RUb0Jhc2UvZGF0YS54bWwgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9nZW5lcmljcy9hZGRQYXJhbWV0ZXJpemVkTWV0aG9kVG9CYXNlL2RhdGEueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUwNjhlNDcKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9nZW5lcmljcy9hZGRQYXJhbWV0ZXJpemVkTWV0aG9kVG9CYXNlL2RhdGEueG1sCkBAIC0wLDAgKzEsMTAgQEAKKzx0ZXN0RGF0YT4KKyAgPGRlbGV0ZWRfYnlfbWFrZT4KKyAgICA8ZmlsZSBwYXRoPSJjbGFzc2VzL0MuY2xhc3MiIC8+CisgICAgPGZpbGUgcGF0aD0iY2xhc3Nlcy9ELmNsYXNzIiAvPgorICA8L2RlbGV0ZWRfYnlfbWFrZT4KKworICA8cmVjb21waWxlPgorICAgIDxmaWxlIHBhdGg9InNvdXJjZS9ELmphdmEiIC8+CisgIDwvcmVjb21waWxlPgorPC90ZXN0RGF0YT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9nZW5lcmljcy9hZGRQYXJhbWV0ZXJpemVkTWV0aG9kVG9CYXNlL3NyYy9DLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9nZW5lcmljcy9hZGRQYXJhbWV0ZXJpemVkTWV0aG9kVG9CYXNlL3NyYy9DLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmE3ZmZmYwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2dlbmVyaWNzL2FkZFBhcmFtZXRlcml6ZWRNZXRob2RUb0Jhc2Uvc3JjL0MuamF2YQpAQCAtMCwwICsxLDIgQEAKK3B1YmxpYyBjbGFzcyBDPEE+IHsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9nZW5lcmljcy9hZGRQYXJhbWV0ZXJpemVkTWV0aG9kVG9CYXNlL3NyYy9ELmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9nZW5lcmljcy9hZGRQYXJhbWV0ZXJpemVkTWV0aG9kVG9CYXNlL3NyYy9ELmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzQ1OTk1NQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2dlbmVyaWNzL2FkZFBhcmFtZXRlcml6ZWRNZXRob2RUb0Jhc2Uvc3JjL0QuamF2YQpAQCAtMCwwICsxLDMgQEAKK3B1YmxpYyBjbGFzcyBEIGV4dGVuZHMgQzxTdHJpbmc+IHsKKyAgT2JqZWN0IGlkKE9iamVjdCB4KSB7cmV0dXJuIG51bGw7fQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2dlbmVyaWNzL2FyZ3VtZW50Q29udGFpbm1lbnQubG9nIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZ2VuZXJpY3MvYXJndW1lbnRDb250YWlubWVudC5sb2cKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzAxYjMyZAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2dlbmVyaWNzL2FyZ3VtZW50Q29udGFpbm1lbnQubG9nCkBAIC0wLDAgKzEsMTYgQEAKK0NsZWFuaW5nIG91dHB1dCBmaWxlczoKK291dC9wcm9kdWN0aW9uL0FyZ3VtZW50Q29udGFpbm1lbnQvU3ViMi5jbGFzcworRW5kIG9mIGZpbGVzCitDb21waWxpbmcgZmlsZXM6CitzcmMvU3ViMi5qYXZhCitFbmQgb2YgZmlsZXMKK0NsZWFuaW5nIG91dHB1dCBmaWxlczoKK291dC9wcm9kdWN0aW9uL0FyZ3VtZW50Q29udGFpbm1lbnQvQ2FwdHVyZUNyZWF0b3IuY2xhc3MKK291dC9wcm9kdWN0aW9uL0FyZ3VtZW50Q29udGFpbm1lbnQvQ2FwdHVyZUNyZWF0b3IyLmNsYXNzCitvdXQvcHJvZHVjdGlvbi9Bcmd1bWVudENvbnRhaW5tZW50L0dlbmVyaWNCb3VuZC5jbGFzcworRW5kIG9mIGZpbGVzCitDb21waWxpbmcgZmlsZXM6CitzcmMvQ2FwdHVyZUNyZWF0b3IuamF2YQorc3JjL0NhcHR1cmVDcmVhdG9yMi5qYXZhCitzcmMvR2VuZXJpY0JvdW5kLmphdmEKK0VuZCBvZiBmaWxlcwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZ2VuZXJpY3MvYXJndW1lbnRDb250YWlubWVudC9TdWIyLmphdmEubmV3IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZ2VuZXJpY3MvYXJndW1lbnRDb250YWlubWVudC9TdWIyLmphdmEubmV3Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFjODA3N2YKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9nZW5lcmljcy9hcmd1bWVudENvbnRhaW5tZW50L1N1YjIuamF2YS5uZXcKQEAgLTAsMCArMSwyIEBACitwdWJsaWMgY2xhc3MgU3ViMiB7Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9nZW5lcmljcy9hcmd1bWVudENvbnRhaW5tZW50L3NyYy9DYXB0dXJlQ3JlYXRvci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZ2VuZXJpY3MvYXJndW1lbnRDb250YWlubWVudC9zcmMvQ2FwdHVyZUNyZWF0b3IuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOGZmOGNjCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZ2VuZXJpY3MvYXJndW1lbnRDb250YWlubWVudC9zcmMvQ2FwdHVyZUNyZWF0b3IuamF2YQpAQCAtMCwwICsxLDQgQEAKK3B1YmxpYyBjbGFzcyBDYXB0dXJlQ3JlYXRvciB7CisgICAgcHVibGljIHZvaWQgY29udGV4dChHZW5lcmljQm91bmQ8PyBleHRlbmRzIFBhcmVudD4gcCkgeworICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2dlbmVyaWNzL2FyZ3VtZW50Q29udGFpbm1lbnQvc3JjL0NhcHR1cmVDcmVhdG9yMi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZ2VuZXJpY3MvYXJndW1lbnRDb250YWlubWVudC9zcmMvQ2FwdHVyZUNyZWF0b3IyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGM5ZWQ2OQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2dlbmVyaWNzL2FyZ3VtZW50Q29udGFpbm1lbnQvc3JjL0NhcHR1cmVDcmVhdG9yMi5qYXZhCkBAIC0wLDAgKzEsNCBAQAorcHVibGljIGNsYXNzIENhcHR1cmVDcmVhdG9yMiB7CisgICAgcHVibGljIHZvaWQgY29udGV4dChHZW5lcmljQm91bmQ8PyBleHRlbmRzIFN1Yj4gcCkgeworICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2dlbmVyaWNzL2FyZ3VtZW50Q29udGFpbm1lbnQvc3JjL0dlbmVyaWNCb3VuZC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZ2VuZXJpY3MvYXJndW1lbnRDb250YWlubWVudC9zcmMvR2VuZXJpY0JvdW5kLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTgxZDk0NgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2dlbmVyaWNzL2FyZ3VtZW50Q29udGFpbm1lbnQvc3JjL0dlbmVyaWNCb3VuZC5qYXZhCkBAIC0wLDAgKzEsMiBAQAorcHVibGljIGNsYXNzIEdlbmVyaWNCb3VuZDxUIGV4dGVuZHMgU3ViMj4geworfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZ2VuZXJpY3MvYXJndW1lbnRDb250YWlubWVudC9zcmMvUGFyZW50LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9nZW5lcmljcy9hcmd1bWVudENvbnRhaW5tZW50L3NyYy9QYXJlbnQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZGY2ZDhlCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZ2VuZXJpY3MvYXJndW1lbnRDb250YWlubWVudC9zcmMvUGFyZW50LmphdmEKQEAgLTAsMCArMSwyIEBACitwdWJsaWMgY2xhc3MgUGFyZW50IHsKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2dlbmVyaWNzL2FyZ3VtZW50Q29udGFpbm1lbnQvc3JjL1N1Yi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZ2VuZXJpY3MvYXJndW1lbnRDb250YWlubWVudC9zcmMvU3ViLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDY0ZGFjNQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2dlbmVyaWNzL2FyZ3VtZW50Q29udGFpbm1lbnQvc3JjL1N1Yi5qYXZhCkBAIC0wLDAgKzEsMiBAQAorcHVibGljIGNsYXNzIFN1YiBleHRlbmRzIFBhcmVudCB7Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9nZW5lcmljcy9hcmd1bWVudENvbnRhaW5tZW50L3NyYy9TdWIyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9nZW5lcmljcy9hcmd1bWVudENvbnRhaW5tZW50L3NyYy9TdWIyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmRlZDZjZQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2dlbmVyaWNzL2FyZ3VtZW50Q29udGFpbm1lbnQvc3JjL1N1YjIuamF2YQpAQCAtMCwwICsxLDIgQEAKK3B1YmxpYyBjbGFzcyBTdWIyIGV4dGVuZHMgU3ViIHsKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2dlbmVyaWNzL2FyZ3VtZW50Q29udGFpbm1lbnQyLmxvZyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2dlbmVyaWNzL2FyZ3VtZW50Q29udGFpbm1lbnQyLmxvZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZDk5YTE2Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZ2VuZXJpY3MvYXJndW1lbnRDb250YWlubWVudDIubG9nCkBAIC0wLDAgKzEsMTggQEAKK0NsZWFuaW5nIG91dHB1dCBmaWxlczoKK291dC9wcm9kdWN0aW9uL0FyZ3VtZW50Q29udGFpbm1lbnQyL1N1Yi5jbGFzcworRW5kIG9mIGZpbGVzCitDb21waWxpbmcgZmlsZXM6CitzcmMvU3ViLmphdmEKK0VuZCBvZiBmaWxlcworQ2xlYW5pbmcgb3V0cHV0IGZpbGVzOgorb3V0L3Byb2R1Y3Rpb24vQXJndW1lbnRDb250YWlubWVudDIvQ2FwdHVyZUNyZWF0b3IuY2xhc3MKK291dC9wcm9kdWN0aW9uL0FyZ3VtZW50Q29udGFpbm1lbnQyL0NhcHR1cmVDcmVhdG9yMi5jbGFzcworb3V0L3Byb2R1Y3Rpb24vQXJndW1lbnRDb250YWlubWVudDIvR2VuZXJpY0JvdW5kLmNsYXNzCitvdXQvcHJvZHVjdGlvbi9Bcmd1bWVudENvbnRhaW5tZW50Mi9TdWIyLmNsYXNzCitFbmQgb2YgZmlsZXMKK0NvbXBpbGluZyBmaWxlczoKK3NyYy9DYXB0dXJlQ3JlYXRvci5qYXZhCitzcmMvQ2FwdHVyZUNyZWF0b3IyLmphdmEKK3NyYy9HZW5lcmljQm91bmQuamF2YQorc3JjL1N1YjIuamF2YQorRW5kIG9mIGZpbGVzCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9nZW5lcmljcy9hcmd1bWVudENvbnRhaW5tZW50Mi9TdWIuamF2YS5uZXcgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9nZW5lcmljcy9hcmd1bWVudENvbnRhaW5tZW50Mi9TdWIuamF2YS5uZXcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTlhMjllYQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2dlbmVyaWNzL2FyZ3VtZW50Q29udGFpbm1lbnQyL1N1Yi5qYXZhLm5ldwpAQCAtMCwwICsxLDIgQEAKK3B1YmxpYyBjbGFzcyBTdWIgeworfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZ2VuZXJpY3MvYXJndW1lbnRDb250YWlubWVudDIvc3JjL0NhcHR1cmVDcmVhdG9yLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9nZW5lcmljcy9hcmd1bWVudENvbnRhaW5tZW50Mi9zcmMvQ2FwdHVyZUNyZWF0b3IuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNWNhMGIyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZ2VuZXJpY3MvYXJndW1lbnRDb250YWlubWVudDIvc3JjL0NhcHR1cmVDcmVhdG9yLmphdmEKQEAgLTAsMCArMSw0IEBACitwdWJsaWMgY2xhc3MgQ2FwdHVyZUNyZWF0b3IgeworICAgIHB1YmxpYyB2b2lkIGNvbnRleHQoR2VuZXJpY0JvdW5kPD8gc3VwZXIgU3ViPiBwKSB7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZ2VuZXJpY3MvYXJndW1lbnRDb250YWlubWVudDIvc3JjL0NhcHR1cmVDcmVhdG9yMi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZ2VuZXJpY3MvYXJndW1lbnRDb250YWlubWVudDIvc3JjL0NhcHR1cmVDcmVhdG9yMi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMxNWUwOWUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9nZW5lcmljcy9hcmd1bWVudENvbnRhaW5tZW50Mi9zcmMvQ2FwdHVyZUNyZWF0b3IyLmphdmEKQEAgLTAsMCArMSw0IEBACitwdWJsaWMgY2xhc3MgQ2FwdHVyZUNyZWF0b3IyIHsKKyAgICBwdWJsaWMgdm9pZCBjb250ZXh0KEdlbmVyaWNCb3VuZDw/IHN1cGVyIFN1YjI+IHApIHsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9nZW5lcmljcy9hcmd1bWVudENvbnRhaW5tZW50Mi9zcmMvR2VuZXJpY0JvdW5kLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9nZW5lcmljcy9hcmd1bWVudENvbnRhaW5tZW50Mi9zcmMvR2VuZXJpY0JvdW5kLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTY1NDY3ZQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2dlbmVyaWNzL2FyZ3VtZW50Q29udGFpbm1lbnQyL3NyYy9HZW5lcmljQm91bmQuamF2YQpAQCAtMCwwICsxLDIgQEAKK3B1YmxpYyBjbGFzcyBHZW5lcmljQm91bmQ8VCBleHRlbmRzIFBhcmVudD4geworfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZ2VuZXJpY3MvYXJndW1lbnRDb250YWlubWVudDIvc3JjL1BhcmVudC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZ2VuZXJpY3MvYXJndW1lbnRDb250YWlubWVudDIvc3JjL1BhcmVudC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVkZjZkOGUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9nZW5lcmljcy9hcmd1bWVudENvbnRhaW5tZW50Mi9zcmMvUGFyZW50LmphdmEKQEAgLTAsMCArMSwyIEBACitwdWJsaWMgY2xhc3MgUGFyZW50IHsKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2dlbmVyaWNzL2FyZ3VtZW50Q29udGFpbm1lbnQyL3NyYy9TdWIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2dlbmVyaWNzL2FyZ3VtZW50Q29udGFpbm1lbnQyL3NyYy9TdWIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNjRkYWM1Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZ2VuZXJpY3MvYXJndW1lbnRDb250YWlubWVudDIvc3JjL1N1Yi5qYXZhCkBAIC0wLDAgKzEsMiBAQAorcHVibGljIGNsYXNzIFN1YiBleHRlbmRzIFBhcmVudCB7Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9nZW5lcmljcy9hcmd1bWVudENvbnRhaW5tZW50Mi9zcmMvU3ViMi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZ2VuZXJpY3MvYXJndW1lbnRDb250YWlubWVudDIvc3JjL1N1YjIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZjVjZWJkCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZ2VuZXJpY3MvYXJndW1lbnRDb250YWlubWVudDIvc3JjL1N1YjIuamF2YQpAQCAtMCwwICsxLDIgQEAKK3B1YmxpYyBjbGFzcyBTdWIyIGV4dGVuZHMgU3VieworfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZ2VuZXJpY3MvYXJndW1lbnRDb250YWlubWVudDMubG9nIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZ2VuZXJpY3MvYXJndW1lbnRDb250YWlubWVudDMubG9nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU2MjUzNmYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9nZW5lcmljcy9hcmd1bWVudENvbnRhaW5tZW50My5sb2cKQEAgLTAsMCArMSwxNCBAQAorQ2xlYW5pbmcgb3V0cHV0IGZpbGVzOgorb3V0L3Byb2R1Y3Rpb24vQXJndW1lbnRDb250YWlubWVudDMvU3ViMi5jbGFzcworRW5kIG9mIGZpbGVzCitDb21waWxpbmcgZmlsZXM6CitzcmMvU3ViMi5qYXZhCitFbmQgb2YgZmlsZXMKK0NsZWFuaW5nIG91dHB1dCBmaWxlczoKK291dC9wcm9kdWN0aW9uL0FyZ3VtZW50Q29udGFpbm1lbnQzL0NhcHR1cmVDcmVhdG9yMi5jbGFzcworb3V0L3Byb2R1Y3Rpb24vQXJndW1lbnRDb250YWlubWVudDMvR2VuZXJpY0JvdW5kLmNsYXNzCitFbmQgb2YgZmlsZXMKK0NvbXBpbGluZyBmaWxlczoKK3NyYy9DYXB0dXJlQ3JlYXRvcjIuamF2YQorc3JjL0dlbmVyaWNCb3VuZC5qYXZhCitFbmQgb2YgZmlsZXMKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2dlbmVyaWNzL2FyZ3VtZW50Q29udGFpbm1lbnQzL1N1YjIuamF2YS5uZXcgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9nZW5lcmljcy9hcmd1bWVudENvbnRhaW5tZW50My9TdWIyLmphdmEubmV3Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM3MzI2YjcKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9nZW5lcmljcy9hcmd1bWVudENvbnRhaW5tZW50My9TdWIyLmphdmEubmV3CkBAIC0wLDAgKzEsMiBAQAorcHVibGljIGNsYXNzIFN1YjIgZXh0ZW5kcyBQYXJlbnQgeworfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZ2VuZXJpY3MvYXJndW1lbnRDb250YWlubWVudDMvc3JjL0NhcHR1cmVDcmVhdG9yLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9nZW5lcmljcy9hcmd1bWVudENvbnRhaW5tZW50My9zcmMvQ2FwdHVyZUNyZWF0b3IuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOGZmOGNjCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZ2VuZXJpY3MvYXJndW1lbnRDb250YWlubWVudDMvc3JjL0NhcHR1cmVDcmVhdG9yLmphdmEKQEAgLTAsMCArMSw0IEBACitwdWJsaWMgY2xhc3MgQ2FwdHVyZUNyZWF0b3IgeworICAgIHB1YmxpYyB2b2lkIGNvbnRleHQoR2VuZXJpY0JvdW5kPD8gZXh0ZW5kcyBQYXJlbnQ+IHApIHsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9nZW5lcmljcy9hcmd1bWVudENvbnRhaW5tZW50My9zcmMvQ2FwdHVyZUNyZWF0b3IyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9nZW5lcmljcy9hcmd1bWVudENvbnRhaW5tZW50My9zcmMvQ2FwdHVyZUNyZWF0b3IyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGM5ZWQ2OQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2dlbmVyaWNzL2FyZ3VtZW50Q29udGFpbm1lbnQzL3NyYy9DYXB0dXJlQ3JlYXRvcjIuamF2YQpAQCAtMCwwICsxLDQgQEAKK3B1YmxpYyBjbGFzcyBDYXB0dXJlQ3JlYXRvcjIgeworICAgIHB1YmxpYyB2b2lkIGNvbnRleHQoR2VuZXJpY0JvdW5kPD8gZXh0ZW5kcyBTdWI+IHApIHsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9nZW5lcmljcy9hcmd1bWVudENvbnRhaW5tZW50My9zcmMvR2VuZXJpY0JvdW5kLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9nZW5lcmljcy9hcmd1bWVudENvbnRhaW5tZW50My9zcmMvR2VuZXJpY0JvdW5kLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTgxZDk0NgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2dlbmVyaWNzL2FyZ3VtZW50Q29udGFpbm1lbnQzL3NyYy9HZW5lcmljQm91bmQuamF2YQpAQCAtMCwwICsxLDIgQEAKK3B1YmxpYyBjbGFzcyBHZW5lcmljQm91bmQ8VCBleHRlbmRzIFN1YjI+IHsKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2dlbmVyaWNzL2FyZ3VtZW50Q29udGFpbm1lbnQzL3NyYy9QYXJlbnQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2dlbmVyaWNzL2FyZ3VtZW50Q29udGFpbm1lbnQzL3NyYy9QYXJlbnQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZGY2ZDhlCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZ2VuZXJpY3MvYXJndW1lbnRDb250YWlubWVudDMvc3JjL1BhcmVudC5qYXZhCkBAIC0wLDAgKzEsMiBAQAorcHVibGljIGNsYXNzIFBhcmVudCB7Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9nZW5lcmljcy9hcmd1bWVudENvbnRhaW5tZW50My9zcmMvU3ViLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9nZW5lcmljcy9hcmd1bWVudENvbnRhaW5tZW50My9zcmMvU3ViLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDY0ZGFjNQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2dlbmVyaWNzL2FyZ3VtZW50Q29udGFpbm1lbnQzL3NyYy9TdWIuamF2YQpAQCAtMCwwICsxLDIgQEAKK3B1YmxpYyBjbGFzcyBTdWIgZXh0ZW5kcyBQYXJlbnQgeworfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZ2VuZXJpY3MvYXJndW1lbnRDb250YWlubWVudDMvc3JjL1N1YjIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2dlbmVyaWNzL2FyZ3VtZW50Q29udGFpbm1lbnQzL3NyYy9TdWIyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmRlZDZjZQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2dlbmVyaWNzL2FyZ3VtZW50Q29udGFpbm1lbnQzL3NyYy9TdWIyLmphdmEKQEAgLTAsMCArMSwyIEBACitwdWJsaWMgY2xhc3MgU3ViMiBleHRlbmRzIFN1YiB7Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9nZW5lcmljcy9jaGFuZ2VCb3VuZC5sb2cgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9nZW5lcmljcy9jaGFuZ2VCb3VuZC5sb2cKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2IyNWQ3ZAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2dlbmVyaWNzL2NoYW5nZUJvdW5kLmxvZwpAQCAtMCwwICsxLDEyIEBACitDbGVhbmluZyBvdXRwdXQgZmlsZXM6CitvdXQvcHJvZHVjdGlvbi9DaGFuZ2VCb3VuZC9BLmNsYXNzCitFbmQgb2YgZmlsZXMKK0NvbXBpbGluZyBmaWxlczoKK3NyYy9BLmphdmEKK0VuZCBvZiBmaWxlcworQ2xlYW5pbmcgb3V0cHV0IGZpbGVzOgorb3V0L3Byb2R1Y3Rpb24vQ2hhbmdlQm91bmQvQ2xpZW50LmNsYXNzCitFbmQgb2YgZmlsZXMKK0NvbXBpbGluZyBmaWxlczoKK3NyYy9DbGllbnQuamF2YQorRW5kIG9mIGZpbGVzCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9nZW5lcmljcy9jaGFuZ2VCb3VuZC9BLmphdmEubmV3IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZ2VuZXJpY3MvY2hhbmdlQm91bmQvQS5qYXZhLm5ldwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YWM0OGU5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZ2VuZXJpY3MvY2hhbmdlQm91bmQvQS5qYXZhLm5ldwpAQCAtMCwwICsxLDMgQEAKK3B1YmxpYyBjbGFzcyBBPFQgZXh0ZW5kcyBTdHJpbmc+IHsKKyAgVCBmb28oKSB7cmV0dXJuIG51bGw7fQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2dlbmVyaWNzL2NoYW5nZUJvdW5kL3NyYy9BLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9nZW5lcmljcy9jaGFuZ2VCb3VuZC9zcmMvQS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM0ZDYzMzMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9nZW5lcmljcy9jaGFuZ2VCb3VuZC9zcmMvQS5qYXZhCkBAIC0wLDAgKzEsMyBAQAorcHVibGljIGNsYXNzIEE8VCBleHRlbmRzIFZhbHVlPiB7CisgIFQgZm9vKCkge3JldHVybiBudWxsO30KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9nZW5lcmljcy9jaGFuZ2VCb3VuZC9zcmMvQ2xpZW50LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9nZW5lcmljcy9jaGFuZ2VCb3VuZC9zcmMvQ2xpZW50LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDU3NjZmNQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2dlbmVyaWNzL2NoYW5nZUJvdW5kL3NyYy9DbGllbnQuamF2YQpAQCAtMCwwICsxLDUgQEAKK3B1YmxpYyBjbGFzcyBDbGllbnQgeworICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisgICAgT2JqZWN0IHZhbHVlID0gbmV3IEE8VmFsdWVJbXBsPigpLmZvbygpOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZ2VuZXJpY3MvY2hhbmdlQm91bmQvc3JjL1ZhbHVlLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9nZW5lcmljcy9jaGFuZ2VCb3VuZC9zcmMvVmFsdWUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MWI3OWMzCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZ2VuZXJpY3MvY2hhbmdlQm91bmQvc3JjL1ZhbHVlLmphdmEKQEAgLTAsMCArMSwyIEBACitwdWJsaWMgY2xhc3MgVmFsdWUgeworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2dlbmVyaWNzL2NoYW5nZUJvdW5kL3NyYy9WYWx1ZUltcGwuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2dlbmVyaWNzL2NoYW5nZUJvdW5kL3NyYy9WYWx1ZUltcGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNTE5MmU5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZ2VuZXJpY3MvY2hhbmdlQm91bmQvc3JjL1ZhbHVlSW1wbC5qYXZhCkBAIC0wLDAgKzEsMiBAQAorcHVibGljIGNsYXNzIFZhbHVlSW1wbCBleHRlbmRzIFZhbHVlIHsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9nZW5lcmljcy9jaGFuZ2VCb3VuZDEubG9nIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZ2VuZXJpY3MvY2hhbmdlQm91bmQxLmxvZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMzAzNDVlCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZ2VuZXJpY3MvY2hhbmdlQm91bmQxLmxvZwpAQCAtMCwwICsxLDEyIEBACitDbGVhbmluZyBvdXRwdXQgZmlsZXM6CitvdXQvcHJvZHVjdGlvbi9DaGFuZ2VCb3VuZDEvQS5jbGFzcworRW5kIG9mIGZpbGVzCitDb21waWxpbmcgZmlsZXM6CitzcmMvQS5qYXZhCitFbmQgb2YgZmlsZXMKK0NsZWFuaW5nIG91dHB1dCBmaWxlczoKK291dC9wcm9kdWN0aW9uL0NoYW5nZUJvdW5kMS9DbGllbnQuY2xhc3MKK0VuZCBvZiBmaWxlcworQ29tcGlsaW5nIGZpbGVzOgorc3JjL0NsaWVudC5qYXZhCitFbmQgb2YgZmlsZXMKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2dlbmVyaWNzL2NoYW5nZUJvdW5kMS9BLmphdmEubmV3IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZ2VuZXJpY3MvY2hhbmdlQm91bmQxL0EuamF2YS5uZXcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjVmYmEwOQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2dlbmVyaWNzL2NoYW5nZUJvdW5kMS9BLmphdmEubmV3CkBAIC0wLDAgKzEsMyBAQAorcHVibGljIGNsYXNzIEE8VCBleHRlbmRzIFN0cmluZz4geworICB2b2lkIGZvbyhUIHQpIHt9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZ2VuZXJpY3MvY2hhbmdlQm91bmQxL3NyYy9BLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9nZW5lcmljcy9jaGFuZ2VCb3VuZDEvc3JjL0EuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNDRlNzY2Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZ2VuZXJpY3MvY2hhbmdlQm91bmQxL3NyYy9BLmphdmEKQEAgLTAsMCArMSwzIEBACitwdWJsaWMgY2xhc3MgQTxUIGV4dGVuZHMgVmFsdWU+IHsKKyAgdm9pZCBmb28oVCB0KSB7fQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2dlbmVyaWNzL2NoYW5nZUJvdW5kMS9zcmMvQ2xpZW50LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9nZW5lcmljcy9jaGFuZ2VCb3VuZDEvc3JjL0NsaWVudC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI4OWUxZTEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9nZW5lcmljcy9jaGFuZ2VCb3VuZDEvc3JjL0NsaWVudC5qYXZhCkBAIC0wLDAgKzEsNSBAQAorcHVibGljIGNsYXNzIENsaWVudCB7CisgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKyAgICBuZXcgQTxWYWx1ZUltcGw+KCkuZm9vKG5ldyBWYWx1ZUltcGwoKSk7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9nZW5lcmljcy9jaGFuZ2VCb3VuZDEvc3JjL1ZhbHVlLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9nZW5lcmljcy9jaGFuZ2VCb3VuZDEvc3JjL1ZhbHVlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODFiNzljMwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2dlbmVyaWNzL2NoYW5nZUJvdW5kMS9zcmMvVmFsdWUuamF2YQpAQCAtMCwwICsxLDIgQEAKK3B1YmxpYyBjbGFzcyBWYWx1ZSB7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZ2VuZXJpY3MvY2hhbmdlQm91bmQxL3NyYy9WYWx1ZUltcGwuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2dlbmVyaWNzL2NoYW5nZUJvdW5kMS9zcmMvVmFsdWVJbXBsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDUxOTJlOQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2dlbmVyaWNzL2NoYW5nZUJvdW5kMS9zcmMvVmFsdWVJbXBsLmphdmEKQEAgLTAsMCArMSwyIEBACitwdWJsaWMgY2xhc3MgVmFsdWVJbXBsIGV4dGVuZHMgVmFsdWUgeworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2dlbmVyaWNzL2NoYW5nZUJvdW5kQ2xhc3MxLmxvZyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2dlbmVyaWNzL2NoYW5nZUJvdW5kQ2xhc3MxLmxvZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYzVhMWQxCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZ2VuZXJpY3MvY2hhbmdlQm91bmRDbGFzczEubG9nCkBAIC0wLDAgKzEsOSBAQAorQ2xlYW5pbmcgb3V0cHV0IGZpbGVzOgorb3V0L3Byb2R1Y3Rpb24vQ2hhbmdlQm91bmRDbGFzczEvVmFsdWUuY2xhc3MKK0VuZCBvZiBmaWxlcworQ2xlYW5pbmcgb3V0cHV0IGZpbGVzOgorb3V0L3Byb2R1Y3Rpb24vQ2hhbmdlQm91bmRDbGFzczEvQS5jbGFzcworRW5kIG9mIGZpbGVzCitDb21waWxpbmcgZmlsZXM6CitzcmMvQS5qYXZhCitFbmQgb2YgZmlsZXMKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2dlbmVyaWNzL2NoYW5nZUJvdW5kQ2xhc3MxL1ZhbHVlLmphdmEucmVtb3ZlIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZ2VuZXJpY3MvY2hhbmdlQm91bmRDbGFzczEvVmFsdWUuamF2YS5yZW1vdmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY5ZGUyOQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2dlbmVyaWNzL2NoYW5nZUJvdW5kQ2xhc3MxL1ZhbHVlLmphdmEucmVtb3ZlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9nZW5lcmljcy9jaGFuZ2VCb3VuZENsYXNzMS9zcmMvQS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZ2VuZXJpY3MvY2hhbmdlQm91bmRDbGFzczEvc3JjL0EuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMzQzMWMxCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZ2VuZXJpY3MvY2hhbmdlQm91bmRDbGFzczEvc3JjL0EuamF2YQpAQCAtMCwwICsxLDIgQEAKK3B1YmxpYyBjbGFzcyBBPFQgZXh0ZW5kcyBWYWx1ZT4geworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2dlbmVyaWNzL2NoYW5nZUJvdW5kQ2xhc3MxL3NyYy9WYWx1ZS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZ2VuZXJpY3MvY2hhbmdlQm91bmRDbGFzczEvc3JjL1ZhbHVlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODFiNzljMwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2dlbmVyaWNzL2NoYW5nZUJvdW5kQ2xhc3MxL3NyYy9WYWx1ZS5qYXZhCkBAIC0wLDAgKzEsMiBAQAorcHVibGljIGNsYXNzIFZhbHVlIHsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9nZW5lcmljcy9jaGFuZ2VCb3VuZEludGVyZmFjZTEubG9nIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZ2VuZXJpY3MvY2hhbmdlQm91bmRJbnRlcmZhY2UxLmxvZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMmJiN2JhCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZ2VuZXJpY3MvY2hhbmdlQm91bmRJbnRlcmZhY2UxLmxvZwpAQCAtMCwwICsxLDEyIEBACitDbGVhbmluZyBvdXRwdXQgZmlsZXM6CitvdXQvcHJvZHVjdGlvbi9DaGFuZ2VCb3VuZEludGVyZmFjZTEvSS5jbGFzcworRW5kIG9mIGZpbGVzCitDb21waWxpbmcgZmlsZXM6CitzcmMvSS5qYXZhCitFbmQgb2YgZmlsZXMKK0NsZWFuaW5nIG91dHB1dCBmaWxlczoKK291dC9wcm9kdWN0aW9uL0NoYW5nZUJvdW5kSW50ZXJmYWNlMS9BLmNsYXNzCitFbmQgb2YgZmlsZXMKK0NvbXBpbGluZyBmaWxlczoKK3NyYy9BLmphdmEKK0VuZCBvZiBmaWxlcwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZ2VuZXJpY3MvY2hhbmdlQm91bmRJbnRlcmZhY2UxL0kuamF2YS5uZXcgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9nZW5lcmljcy9jaGFuZ2VCb3VuZEludGVyZmFjZTEvSS5qYXZhLm5ldwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NTRmM2I5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZ2VuZXJpY3MvY2hhbmdlQm91bmRJbnRlcmZhY2UxL0kuamF2YS5uZXcKQEAgLTAsMCArMSwzIEBACitwdWJsaWMgY2xhc3MgSSB7CisgIHZvaWQgYmFyKCkge30KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9nZW5lcmljcy9jaGFuZ2VCb3VuZEludGVyZmFjZTEvc3JjL0EuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2dlbmVyaWNzL2NoYW5nZUJvdW5kSW50ZXJmYWNlMS9zcmMvQS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjllNzFmNzIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9nZW5lcmljcy9jaGFuZ2VCb3VuZEludGVyZmFjZTEvc3JjL0EuamF2YQpAQCAtMCwwICsxLDMgQEAKK3B1YmxpYyBjbGFzcyBBPFQgZXh0ZW5kcyBWYWx1ZSAmIEk+IHsKKyAgdm9pZCBmb28oVCB0KSB7dC5mb28oKTt9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZ2VuZXJpY3MvY2hhbmdlQm91bmRJbnRlcmZhY2UxL3NyYy9JLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9nZW5lcmljcy9jaGFuZ2VCb3VuZEludGVyZmFjZTEvc3JjL0kuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYTJlZTMyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZ2VuZXJpY3MvY2hhbmdlQm91bmRJbnRlcmZhY2UxL3NyYy9JLmphdmEKQEAgLTAsMCArMSwzIEBACitwdWJsaWMgaW50ZXJmYWNlIEkgeworICB2b2lkIGJhcigpOworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2dlbmVyaWNzL2NoYW5nZUJvdW5kSW50ZXJmYWNlMS9zcmMvVmFsdWUuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2dlbmVyaWNzL2NoYW5nZUJvdW5kSW50ZXJmYWNlMS9zcmMvVmFsdWUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YTQ4YTJiCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZ2VuZXJpY3MvY2hhbmdlQm91bmRJbnRlcmZhY2UxL3NyYy9WYWx1ZS5qYXZhCkBAIC0wLDAgKzEsMyBAQAorcHVibGljIGNsYXNzIFZhbHVlIHsKKyAgdm9pZCBmb28oKSB7fQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2dlbmVyaWNzL2NoYW5nZUJvdW5kZWRDbGFzcy5sb2cgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9nZW5lcmljcy9jaGFuZ2VCb3VuZGVkQ2xhc3MubG9nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJiNDE2YmQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9nZW5lcmljcy9jaGFuZ2VCb3VuZGVkQ2xhc3MubG9nCkBAIC0wLDAgKzEsMTIgQEAKK0NsZWFuaW5nIG91dHB1dCBmaWxlczoKK291dC9wcm9kdWN0aW9uL0NoYW5nZUJvdW5kZWRDbGFzcy9WYWx1ZS5jbGFzcworRW5kIG9mIGZpbGVzCitDb21waWxpbmcgZmlsZXM6CitzcmMvVmFsdWUuamF2YQorRW5kIG9mIGZpbGVzCitDbGVhbmluZyBvdXRwdXQgZmlsZXM6CitvdXQvcHJvZHVjdGlvbi9DaGFuZ2VCb3VuZGVkQ2xhc3MvQS5jbGFzcworRW5kIG9mIGZpbGVzCitDb21waWxpbmcgZmlsZXM6CitzcmMvQS5qYXZhCitFbmQgb2YgZmlsZXMKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2dlbmVyaWNzL2NoYW5nZUJvdW5kZWRDbGFzcy9WYWx1ZS5qYXZhLm5ldyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2dlbmVyaWNzL2NoYW5nZUJvdW5kZWRDbGFzcy9WYWx1ZS5qYXZhLm5ldwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MWI3OWMzCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZ2VuZXJpY3MvY2hhbmdlQm91bmRlZENsYXNzL1ZhbHVlLmphdmEubmV3CkBAIC0wLDAgKzEsMiBAQAorcHVibGljIGNsYXNzIFZhbHVlIHsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9nZW5lcmljcy9jaGFuZ2VCb3VuZGVkQ2xhc3Mvc3JjL0EuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2dlbmVyaWNzL2NoYW5nZUJvdW5kZWRDbGFzcy9zcmMvQS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZhNDllMDIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9nZW5lcmljcy9jaGFuZ2VCb3VuZGVkQ2xhc3Mvc3JjL0EuamF2YQpAQCAtMCwwICsxLDMgQEAKK3B1YmxpYyBjbGFzcyBBPFQgZXh0ZW5kcyBWYWx1ZT4geworICB2b2lkIGZvbyhUIHQpIHt0LmZvbygpO30KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9nZW5lcmljcy9jaGFuZ2VCb3VuZGVkQ2xhc3Mvc3JjL1ZhbHVlLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9nZW5lcmljcy9jaGFuZ2VCb3VuZGVkQ2xhc3Mvc3JjL1ZhbHVlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGE0OGEyYgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2dlbmVyaWNzL2NoYW5nZUJvdW5kZWRDbGFzcy9zcmMvVmFsdWUuamF2YQpAQCAtMCwwICsxLDMgQEAKK3B1YmxpYyBjbGFzcyBWYWx1ZSB7CisgIHZvaWQgZm9vKCkge30KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9nZW5lcmljcy9jaGFuZ2VFeHRlbmRzLmxvZyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2dlbmVyaWNzL2NoYW5nZUV4dGVuZHMubG9nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBjYmEwNDAKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9nZW5lcmljcy9jaGFuZ2VFeHRlbmRzLmxvZwpAQCAtMCwwICsxLDE2IEBACitDbGVhbmluZyBvdXRwdXQgZmlsZXM6CitvdXQvcHJvZHVjdGlvbi9DaGFuZ2VFeHRlbmRzL1N1cGVyLmNsYXNzCitFbmQgb2YgZmlsZXMKK0NvbXBpbGluZyBmaWxlczoKK3NyYy9TdXBlci5qYXZhCitFbmQgb2YgZmlsZXMKK0NsZWFuaW5nIG91dHB1dCBmaWxlczoKK291dC9wcm9kdWN0aW9uL0NoYW5nZUV4dGVuZHMvQ2xpZW50LmNsYXNzCitvdXQvcHJvZHVjdGlvbi9DaGFuZ2VFeHRlbmRzL0NsaWVudDIuY2xhc3MKK291dC9wcm9kdWN0aW9uL0NoYW5nZUV4dGVuZHMvQ2xpZW50My5jbGFzcworRW5kIG9mIGZpbGVzCitDb21waWxpbmcgZmlsZXM6CitzcmMvQ2xpZW50LmphdmEKK3NyYy9DbGllbnQyLmphdmEKK3NyYy9DbGllbnQzLmphdmEKK0VuZCBvZiBmaWxlcwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZ2VuZXJpY3MvY2hhbmdlRXh0ZW5kcy9TdXBlci5qYXZhLm5ldyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2dlbmVyaWNzL2NoYW5nZUV4dGVuZHMvU3VwZXIuamF2YS5uZXcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODM0YTU0MQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2dlbmVyaWNzL2NoYW5nZUV4dGVuZHMvU3VwZXIuamF2YS5uZXcKQEAgLTAsMCArMSwzIEBACitjbGFzcyBTdXBlciBleHRlbmRzIEh5cGVyPFN0cmluZz4geworICBjaGFyIHMgPSAncyc7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZ2VuZXJpY3MvY2hhbmdlRXh0ZW5kcy9zcmMvQ2xpZW50LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9nZW5lcmljcy9jaGFuZ2VFeHRlbmRzL3NyYy9DbGllbnQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YmQ2ZDM3Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZ2VuZXJpY3MvY2hhbmdlRXh0ZW5kcy9zcmMvQ2xpZW50LmphdmEKQEAgLTAsMCArMSw3IEBACitjbGFzcyBDbGllbnQgeworICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisgICAgU3VwZXIgcyA9IG5ldyBTdXBlcigpOworICAgIHMuaCA9IG5ldyBJbnRlZ2VyKDEwKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4ocy5oKTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2dlbmVyaWNzL2NoYW5nZUV4dGVuZHMvc3JjL0NsaWVudDIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2dlbmVyaWNzL2NoYW5nZUV4dGVuZHMvc3JjL0NsaWVudDIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OTAwZDAyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZ2VuZXJpY3MvY2hhbmdlRXh0ZW5kcy9zcmMvQ2xpZW50Mi5qYXZhCkBAIC0wLDAgKzEsNCBAQAorY2xhc3MgQ2xpZW50MiBleHRlbmRzIFN1cGVyIHsKKyAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZ2VuZXJpY3MvY2hhbmdlRXh0ZW5kcy9zcmMvQ2xpZW50My5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZ2VuZXJpY3MvY2hhbmdlRXh0ZW5kcy9zcmMvQ2xpZW50My5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY3M2ZkODQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9nZW5lcmljcy9jaGFuZ2VFeHRlbmRzL3NyYy9DbGllbnQzLmphdmEKQEAgLTAsMCArMSw0IEBACitjbGFzcyBDbGllbnQzIGV4dGVuZHMgQ2xpZW50MiB7CisgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2dlbmVyaWNzL2NoYW5nZUV4dGVuZHMvc3JjL0h5cGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9nZW5lcmljcy9jaGFuZ2VFeHRlbmRzL3NyYy9IeXBlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAzZDI2NGQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9nZW5lcmljcy9jaGFuZ2VFeHRlbmRzL3NyYy9IeXBlci5qYXZhCkBAIC0wLDAgKzEsMyBAQAorY2xhc3MgSHlwZXI8VD4geworICBUIGg7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZ2VuZXJpY3MvY2hhbmdlRXh0ZW5kcy9zcmMvU3VwZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2dlbmVyaWNzL2NoYW5nZUV4dGVuZHMvc3JjL1N1cGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzg4NTUyYgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2dlbmVyaWNzL2NoYW5nZUV4dGVuZHMvc3JjL1N1cGVyLmphdmEKQEAgLTAsMCArMSwzIEBACitjbGFzcyBTdXBlciBleHRlbmRzIEh5cGVyPEludGVnZXI+IHsKKyAgY2hhciBzID0gJ3MnOworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2dlbmVyaWNzL2NoYW5nZUV4dGVuZHMxLmxvZyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2dlbmVyaWNzL2NoYW5nZUV4dGVuZHMxLmxvZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNGFhYWU0Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZ2VuZXJpY3MvY2hhbmdlRXh0ZW5kczEubG9nCkBAIC0wLDAgKzEsMTYgQEAKK0NsZWFuaW5nIG91dHB1dCBmaWxlczoKK291dC9wcm9kdWN0aW9uL0NoYW5nZUV4dGVuZHMxL1N1cGVyLmNsYXNzCitFbmQgb2YgZmlsZXMKK0NvbXBpbGluZyBmaWxlczoKK3NyYy9TdXBlci5qYXZhCitFbmQgb2YgZmlsZXMKK0NsZWFuaW5nIG91dHB1dCBmaWxlczoKK291dC9wcm9kdWN0aW9uL0NoYW5nZUV4dGVuZHMxL0NsaWVudC5jbGFzcworb3V0L3Byb2R1Y3Rpb24vQ2hhbmdlRXh0ZW5kczEvQ2xpZW50Mi5jbGFzcworb3V0L3Byb2R1Y3Rpb24vQ2hhbmdlRXh0ZW5kczEvQ2xpZW50My5jbGFzcworRW5kIG9mIGZpbGVzCitDb21waWxpbmcgZmlsZXM6CitzcmMvQ2xpZW50LmphdmEKK3NyYy9DbGllbnQyLmphdmEKK3NyYy9DbGllbnQzLmphdmEKK0VuZCBvZiBmaWxlcwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZ2VuZXJpY3MvY2hhbmdlRXh0ZW5kczEvU3VwZXIuamF2YS5uZXcgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9nZW5lcmljcy9jaGFuZ2VFeHRlbmRzMS9TdXBlci5qYXZhLm5ldwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jODg1NTJiCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZ2VuZXJpY3MvY2hhbmdlRXh0ZW5kczEvU3VwZXIuamF2YS5uZXcKQEAgLTAsMCArMSwzIEBACitjbGFzcyBTdXBlciBleHRlbmRzIEh5cGVyPEludGVnZXI+IHsKKyAgY2hhciBzID0gJ3MnOworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2dlbmVyaWNzL2NoYW5nZUV4dGVuZHMxL3NyYy9DbGllbnQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2dlbmVyaWNzL2NoYW5nZUV4dGVuZHMxL3NyYy9DbGllbnQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zN2RlYTc2Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZ2VuZXJpY3MvY2hhbmdlRXh0ZW5kczEvc3JjL0NsaWVudC5qYXZhCkBAIC0wLDAgKzEsNSBAQAorY2xhc3MgQ2xpZW50IHsKKyAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworICAgIG5ldyBTdXBlcigpOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZ2VuZXJpY3MvY2hhbmdlRXh0ZW5kczEvc3JjL0NsaWVudDIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2dlbmVyaWNzL2NoYW5nZUV4dGVuZHMxL3NyYy9DbGllbnQyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODkwMGQwMgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2dlbmVyaWNzL2NoYW5nZUV4dGVuZHMxL3NyYy9DbGllbnQyLmphdmEKQEAgLTAsMCArMSw0IEBACitjbGFzcyBDbGllbnQyIGV4dGVuZHMgU3VwZXIgeworICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9nZW5lcmljcy9jaGFuZ2VFeHRlbmRzMS9zcmMvQ2xpZW50My5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZ2VuZXJpY3MvY2hhbmdlRXh0ZW5kczEvc3JjL0NsaWVudDMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NzNmZDg0Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZ2VuZXJpY3MvY2hhbmdlRXh0ZW5kczEvc3JjL0NsaWVudDMuamF2YQpAQCAtMCwwICsxLDQgQEAKK2NsYXNzIENsaWVudDMgZXh0ZW5kcyBDbGllbnQyIHsKKyAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZ2VuZXJpY3MvY2hhbmdlRXh0ZW5kczEvc3JjL0h5cGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9nZW5lcmljcy9jaGFuZ2VFeHRlbmRzMS9zcmMvSHlwZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NWJmM2Q3Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZ2VuZXJpY3MvY2hhbmdlRXh0ZW5kczEvc3JjL0h5cGVyLmphdmEKQEAgLTAsMCArMSwzIEBACitjbGFzcyBIeXBlcjxUPiB7CisgVCBoOworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2dlbmVyaWNzL2NoYW5nZUV4dGVuZHMxL3NyYy9TdXBlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZ2VuZXJpY3MvY2hhbmdlRXh0ZW5kczEvc3JjL1N1cGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTg0NDlhMwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2dlbmVyaWNzL2NoYW5nZUV4dGVuZHMxL3NyYy9TdXBlci5qYXZhCkBAIC0wLDAgKzEsMyBAQAorY2xhc3MgU3VwZXIgZXh0ZW5kcyBIeXBlciB7CisgIGNoYXIgcyA9ICdzJzsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9nZW5lcmljcy9jaGFuZ2VFeHRlbmRzMi5sb2cgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9nZW5lcmljcy9jaGFuZ2VFeHRlbmRzMi5sb2cKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWY2NGExYgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2dlbmVyaWNzL2NoYW5nZUV4dGVuZHMyLmxvZwpAQCAtMCwwICsxLDEyIEBACitDbGVhbmluZyBvdXRwdXQgZmlsZXM6CitvdXQvcHJvZHVjdGlvbi9DaGFuZ2VFeHRlbmRzMi9TdXBlci5jbGFzcworRW5kIG9mIGZpbGVzCitDb21waWxpbmcgZmlsZXM6CitzcmMvU3VwZXIuamF2YQorRW5kIG9mIGZpbGVzCitDbGVhbmluZyBvdXRwdXQgZmlsZXM6CitvdXQvcHJvZHVjdGlvbi9DaGFuZ2VFeHRlbmRzMi9DbGllbnQuY2xhc3MKK0VuZCBvZiBmaWxlcworQ29tcGlsaW5nIGZpbGVzOgorc3JjL0NsaWVudC5qYXZhCitFbmQgb2YgZmlsZXMKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2dlbmVyaWNzL2NoYW5nZUV4dGVuZHMyL1N1cGVyLmphdmEubmV3IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZ2VuZXJpY3MvY2hhbmdlRXh0ZW5kczIvU3VwZXIuamF2YS5uZXcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjc4OWUxNAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2dlbmVyaWNzL2NoYW5nZUV4dGVuZHMyL1N1cGVyLmphdmEubmV3CkBAIC0wLDAgKzEsMiBAQAorY2xhc3MgU3VwZXIgZXh0ZW5kcyBIeXBlcjxJbnRlZ2VyPiB7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZ2VuZXJpY3MvY2hhbmdlRXh0ZW5kczIvc3JjL0NsaWVudC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZ2VuZXJpY3MvY2hhbmdlRXh0ZW5kczIvc3JjL0NsaWVudC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhjMjA3OGEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9nZW5lcmljcy9jaGFuZ2VFeHRlbmRzMi9zcmMvQ2xpZW50LmphdmEKQEAgLTAsMCArMSw1IEBACitjbGFzcyBDbGllbnQgeworICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisgICAgbmV3IFN1cGVyKCkuZm9vKG5ldyBPYmplY3QoKSk7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9nZW5lcmljcy9jaGFuZ2VFeHRlbmRzMi9zcmMvSHlwZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2dlbmVyaWNzL2NoYW5nZUV4dGVuZHMyL3NyYy9IeXBlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNlMmRmNmMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9nZW5lcmljcy9jaGFuZ2VFeHRlbmRzMi9zcmMvSHlwZXIuamF2YQpAQCAtMCwwICsxLDMgQEAKK2NsYXNzIEh5cGVyPFQ+IHsKKyB2b2lkIGZvbyhUIHQpIHt9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZ2VuZXJpY3MvY2hhbmdlRXh0ZW5kczIvc3JjL1N1cGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9nZW5lcmljcy9jaGFuZ2VFeHRlbmRzMi9zcmMvU3VwZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNjJlNTVkCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZ2VuZXJpY3MvY2hhbmdlRXh0ZW5kczIvc3JjL1N1cGVyLmphdmEKQEAgLTAsMCArMSwyIEBACitjbGFzcyBTdXBlciBleHRlbmRzIEh5cGVyIHsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9nZW5lcmljcy9jaGFuZ2VJbXBsZW1lbnRzLmxvZyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2dlbmVyaWNzL2NoYW5nZUltcGxlbWVudHMubG9nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdlMTVmZTQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9nZW5lcmljcy9jaGFuZ2VJbXBsZW1lbnRzLmxvZwpAQCAtMCwwICsxLDE2IEBACitDbGVhbmluZyBvdXRwdXQgZmlsZXM6CitvdXQvcHJvZHVjdGlvbi9DaGFuZ2VJbXBsZW1lbnRzL1N1cGVyLmNsYXNzCitFbmQgb2YgZmlsZXMKK0NvbXBpbGluZyBmaWxlczoKK3NyYy9TdXBlci5qYXZhCitFbmQgb2YgZmlsZXMKK0NsZWFuaW5nIG91dHB1dCBmaWxlczoKK291dC9wcm9kdWN0aW9uL0NoYW5nZUltcGxlbWVudHMvQ2xpZW50LmNsYXNzCitvdXQvcHJvZHVjdGlvbi9DaGFuZ2VJbXBsZW1lbnRzL0NsaWVudDIuY2xhc3MKK291dC9wcm9kdWN0aW9uL0NoYW5nZUltcGxlbWVudHMvQ2xpZW50My5jbGFzcworRW5kIG9mIGZpbGVzCitDb21waWxpbmcgZmlsZXM6CitzcmMvQ2xpZW50LmphdmEKK3NyYy9DbGllbnQyLmphdmEKK3NyYy9DbGllbnQzLmphdmEKK0VuZCBvZiBmaWxlcwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZ2VuZXJpY3MvY2hhbmdlSW1wbGVtZW50cy9TdXBlci5qYXZhLm5ldyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2dlbmVyaWNzL2NoYW5nZUltcGxlbWVudHMvU3VwZXIuamF2YS5uZXcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjM1NDNmNgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2dlbmVyaWNzL2NoYW5nZUltcGxlbWVudHMvU3VwZXIuamF2YS5uZXcKQEAgLTAsMCArMSwzIEBACitjbGFzcyBTdXBlciBpbXBsZW1lbnRzIEh5cGVyPFN0cmluZz4geworICBwdWJsaWMgdm9pZCBmb28oU3RyaW5nIHQpIHt9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZ2VuZXJpY3MvY2hhbmdlSW1wbGVtZW50cy9zcmMvQ2xpZW50LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9nZW5lcmljcy9jaGFuZ2VJbXBsZW1lbnRzL3NyYy9DbGllbnQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZmFmNGUxCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZ2VuZXJpY3MvY2hhbmdlSW1wbGVtZW50cy9zcmMvQ2xpZW50LmphdmEKQEAgLTAsMCArMSw2IEBACitjbGFzcyBDbGllbnQgeworICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisgICAgSHlwZXIgcyA9IG5ldyBTdXBlcigpOworICAgIHMuZm9vKG5ldyBJbnRlZ2VyKDEwKSk7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9nZW5lcmljcy9jaGFuZ2VJbXBsZW1lbnRzL3NyYy9DbGllbnQyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9nZW5lcmljcy9jaGFuZ2VJbXBsZW1lbnRzL3NyYy9DbGllbnQyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODkwMGQwMgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2dlbmVyaWNzL2NoYW5nZUltcGxlbWVudHMvc3JjL0NsaWVudDIuamF2YQpAQCAtMCwwICsxLDQgQEAKK2NsYXNzIENsaWVudDIgZXh0ZW5kcyBTdXBlciB7CisgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2dlbmVyaWNzL2NoYW5nZUltcGxlbWVudHMvc3JjL0NsaWVudDMuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2dlbmVyaWNzL2NoYW5nZUltcGxlbWVudHMvc3JjL0NsaWVudDMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NzNmZDg0Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZ2VuZXJpY3MvY2hhbmdlSW1wbGVtZW50cy9zcmMvQ2xpZW50My5qYXZhCkBAIC0wLDAgKzEsNCBAQAorY2xhc3MgQ2xpZW50MyBleHRlbmRzIENsaWVudDIgeworICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9nZW5lcmljcy9jaGFuZ2VJbXBsZW1lbnRzL3NyYy9IeXBlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZ2VuZXJpY3MvY2hhbmdlSW1wbGVtZW50cy9zcmMvSHlwZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZmRkN2Q2Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZ2VuZXJpY3MvY2hhbmdlSW1wbGVtZW50cy9zcmMvSHlwZXIuamF2YQpAQCAtMCwwICsxLDMgQEAKK2ludGVyZmFjZSBIeXBlcjxUPiB7CisgIHZvaWQgZm9vKFQgdCk7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZ2VuZXJpY3MvY2hhbmdlSW1wbGVtZW50cy9zcmMvU3VwZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2dlbmVyaWNzL2NoYW5nZUltcGxlbWVudHMvc3JjL1N1cGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDBhMTMyMQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2dlbmVyaWNzL2NoYW5nZUltcGxlbWVudHMvc3JjL1N1cGVyLmphdmEKQEAgLTAsMCArMSwzIEBACitjbGFzcyBTdXBlciBpbXBsZW1lbnRzIEh5cGVyPEludGVnZXI+IHsKKyAgcHVibGljIHZvaWQgZm9vKEludGVnZXIgdCkge30KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9nZW5lcmljcy9jaGFuZ2VJbnRlcmZhY2VUeXBlUGFyYW1ldGVyLmxvZyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2dlbmVyaWNzL2NoYW5nZUludGVyZmFjZVR5cGVQYXJhbWV0ZXIubG9nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNmMzBiOTMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9nZW5lcmljcy9jaGFuZ2VJbnRlcmZhY2VUeXBlUGFyYW1ldGVyLmxvZwpAQCAtMCwwICsxLDEyIEBACitDbGVhbmluZyBvdXRwdXQgZmlsZXM6CitvdXQvcHJvZHVjdGlvbi9DaGFuZ2VJbnRlcmZhY2VUeXBlUGFyYW1ldGVyL0IuY2xhc3MKK0VuZCBvZiBmaWxlcworQ29tcGlsaW5nIGZpbGVzOgorc3JjL0IuamF2YQorRW5kIG9mIGZpbGVzCitDbGVhbmluZyBvdXRwdXQgZmlsZXM6CitvdXQvcHJvZHVjdGlvbi9DaGFuZ2VJbnRlcmZhY2VUeXBlUGFyYW1ldGVyL0MuY2xhc3MKK0VuZCBvZiBmaWxlcworQ29tcGlsaW5nIGZpbGVzOgorc3JjL0MuamF2YQorRW5kIG9mIGZpbGVzCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9nZW5lcmljcy9jaGFuZ2VJbnRlcmZhY2VUeXBlUGFyYW1ldGVyL0IuamF2YS5uZXcgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9nZW5lcmljcy9jaGFuZ2VJbnRlcmZhY2VUeXBlUGFyYW1ldGVyL0IuamF2YS5uZXcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGQ0MzM2YgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2dlbmVyaWNzL2NoYW5nZUludGVyZmFjZVR5cGVQYXJhbWV0ZXIvQi5qYXZhLm5ldwpAQCAtMCwwICsxLDIgQEAKK3B1YmxpYyBjbGFzcyBCIGltcGxlbWVudHMgSTxJbnRlZ2VyPiB7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZ2VuZXJpY3MvY2hhbmdlSW50ZXJmYWNlVHlwZVBhcmFtZXRlci9zcmMvQi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZ2VuZXJpY3MvY2hhbmdlSW50ZXJmYWNlVHlwZVBhcmFtZXRlci9zcmMvQi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI4Y2M3ZTMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9nZW5lcmljcy9jaGFuZ2VJbnRlcmZhY2VUeXBlUGFyYW1ldGVyL3NyYy9CLmphdmEKQEAgLTAsMCArMSwyIEBACitwdWJsaWMgY2xhc3MgQiBpbXBsZW1lbnRzIEk8U3RyaW5nPiB7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZ2VuZXJpY3MvY2hhbmdlSW50ZXJmYWNlVHlwZVBhcmFtZXRlci9zcmMvQy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZ2VuZXJpY3MvY2hhbmdlSW50ZXJmYWNlVHlwZVBhcmFtZXRlci9zcmMvQy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAzOWVlNzYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9nZW5lcmljcy9jaGFuZ2VJbnRlcmZhY2VUeXBlUGFyYW1ldGVyL3NyYy9DLmphdmEKQEAgLTAsMCArMSwyIEBACitwdWJsaWMgY2xhc3MgQyBleHRlbmRzIEIgaW1wbGVtZW50cyBJPFN0cmluZz4geworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2dlbmVyaWNzL2NoYW5nZUludGVyZmFjZVR5cGVQYXJhbWV0ZXIvc3JjL0kuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2dlbmVyaWNzL2NoYW5nZUludGVyZmFjZVR5cGVQYXJhbWV0ZXIvc3JjL0kuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNDU1NWI1Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZ2VuZXJpY3MvY2hhbmdlSW50ZXJmYWNlVHlwZVBhcmFtZXRlci9zcmMvSS5qYXZhCkBAIC0wLDAgKzEsMiBAQAorcHVibGljIGludGVyZmFjZSBJPFQ+IHsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9nZW5lcmljcy9jaGFuZ2VUb0NvdmFyaWFudE1ldGhvZEluQmFzZS5sb2cgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9nZW5lcmljcy9jaGFuZ2VUb0NvdmFyaWFudE1ldGhvZEluQmFzZS5sb2cKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWUwN2I2NwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2dlbmVyaWNzL2NoYW5nZVRvQ292YXJpYW50TWV0aG9kSW5CYXNlLmxvZwpAQCAtMCwwICsxLDEyIEBACitDbGVhbmluZyBvdXRwdXQgZmlsZXM6CitvdXQvcHJvZHVjdGlvbi9DaGFuZ2VUb0NvdmFyaWFudE1ldGhvZEluQmFzZS9tYWtldGVzdC9CYXNlSW1wbGVtZW50YXRpb24uY2xhc3MKK0VuZCBvZiBmaWxlcworQ29tcGlsaW5nIGZpbGVzOgorc3JjL21ha2V0ZXN0L0Jhc2VJbXBsZW1lbnRhdGlvbi5qYXZhCitFbmQgb2YgZmlsZXMKK0NsZWFuaW5nIG91dHB1dCBmaWxlczoKK291dC9wcm9kdWN0aW9uL0NoYW5nZVRvQ292YXJpYW50TWV0aG9kSW5CYXNlL21ha2V0ZXN0L0lJbXBsLmNsYXNzCitFbmQgb2YgZmlsZXMKK0NvbXBpbGluZyBmaWxlczoKK3NyYy9tYWtldGVzdC9JSW1wbC5qYXZhCitFbmQgb2YgZmlsZXMKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2dlbmVyaWNzL2NoYW5nZVRvQ292YXJpYW50TWV0aG9kSW5CYXNlL2RhdGEueG1sIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZ2VuZXJpY3MvY2hhbmdlVG9Db3ZhcmlhbnRNZXRob2RJbkJhc2UvZGF0YS54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDlkNWU4NwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2dlbmVyaWNzL2NoYW5nZVRvQ292YXJpYW50TWV0aG9kSW5CYXNlL2RhdGEueG1sCkBAIC0wLDAgKzEsMTAgQEAKKzx0ZXN0RGF0YT4KKyAgPGRlbGV0ZWRfYnlfbWFrZT4KKyAgICA8ZmlsZSBwYXRoPSJjbGFzc2VzL21ha2V0ZXN0L0Jhc2VJbXBsZW1lbnRhdGlvbi5jbGFzcyIgLz4KKyAgICA8ZmlsZSBwYXRoPSJjbGFzc2VzL21ha2V0ZXN0L0lJbXBsLmNsYXNzIiAvPgorICA8L2RlbGV0ZWRfYnlfbWFrZT4KKworICA8cmVjb21waWxlPgorICAgIDxmaWxlIHBhdGg9InNvdXJjZS9tYWtldGVzdC9JSW1wbC5qYXZhIiAvPgorICA8L3JlY29tcGlsZT4KKzwvdGVzdERhdGE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZ2VuZXJpY3MvY2hhbmdlVG9Db3ZhcmlhbnRNZXRob2RJbkJhc2Uvc3JjL21ha2V0ZXN0L0Jhc2VJbXBsZW1lbnRhdGlvbi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZ2VuZXJpY3MvY2hhbmdlVG9Db3ZhcmlhbnRNZXRob2RJbkJhc2Uvc3JjL21ha2V0ZXN0L0Jhc2VJbXBsZW1lbnRhdGlvbi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE5YWUyOWYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9nZW5lcmljcy9jaGFuZ2VUb0NvdmFyaWFudE1ldGhvZEluQmFzZS9zcmMvbWFrZXRlc3QvQmFzZUltcGxlbWVudGF0aW9uLmphdmEKQEAgLTAsMCArMSw3IEBACitwYWNrYWdlIG1ha2V0ZXN0OworCitwdWJsaWMgY2xhc3MgQmFzZUltcGxlbWVudGF0aW9uIHsKKyAgICBwdWJsaWMgRGF0YSBnZXREYXRhKCkgeworICAgICAgICByZXR1cm4gbmV3IERhdGFFeCgpOworICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2dlbmVyaWNzL2NoYW5nZVRvQ292YXJpYW50TWV0aG9kSW5CYXNlL3NyYy9tYWtldGVzdC9CYXNlSW1wbGVtZW50YXRpb24uamF2YS5uZXcgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9nZW5lcmljcy9jaGFuZ2VUb0NvdmFyaWFudE1ldGhvZEluQmFzZS9zcmMvbWFrZXRlc3QvQmFzZUltcGxlbWVudGF0aW9uLmphdmEubmV3Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA3NDkyNzAKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9nZW5lcmljcy9jaGFuZ2VUb0NvdmFyaWFudE1ldGhvZEluQmFzZS9zcmMvbWFrZXRlc3QvQmFzZUltcGxlbWVudGF0aW9uLmphdmEubmV3CkBAIC0wLDAgKzEsNyBAQAorcGFja2FnZSBtYWtldGVzdDsKKworcHVibGljIGNsYXNzIEJhc2VJbXBsZW1lbnRhdGlvbiB7CisgICAgcHVibGljIERhdGFFeCBnZXREYXRhKCkgeworICAgICAgICByZXR1cm4gbmV3IERhdGFFeCgpOworICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2dlbmVyaWNzL2NoYW5nZVRvQ292YXJpYW50TWV0aG9kSW5CYXNlL3NyYy9tYWtldGVzdC9EYXRhLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9nZW5lcmljcy9jaGFuZ2VUb0NvdmFyaWFudE1ldGhvZEluQmFzZS9zcmMvbWFrZXRlc3QvRGF0YS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRmMWZlY2QKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9nZW5lcmljcy9jaGFuZ2VUb0NvdmFyaWFudE1ldGhvZEluQmFzZS9zcmMvbWFrZXRlc3QvRGF0YS5qYXZhCkBAIC0wLDAgKzEsNCBAQAorcGFja2FnZSBtYWtldGVzdDsKKworcHVibGljIGNsYXNzIERhdGEgeworfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZ2VuZXJpY3MvY2hhbmdlVG9Db3ZhcmlhbnRNZXRob2RJbkJhc2Uvc3JjL21ha2V0ZXN0L0RhdGFFeC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZ2VuZXJpY3MvY2hhbmdlVG9Db3ZhcmlhbnRNZXRob2RJbkJhc2Uvc3JjL21ha2V0ZXN0L0RhdGFFeC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ0MmE2ZmIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9nZW5lcmljcy9jaGFuZ2VUb0NvdmFyaWFudE1ldGhvZEluQmFzZS9zcmMvbWFrZXRlc3QvRGF0YUV4LmphdmEKQEAgLTAsMCArMSw0IEBACitwYWNrYWdlIG1ha2V0ZXN0OworCitwdWJsaWMgY2xhc3MgRGF0YUV4IGV4dGVuZHMgRGF0YSB7Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9nZW5lcmljcy9jaGFuZ2VUb0NvdmFyaWFudE1ldGhvZEluQmFzZS9zcmMvbWFrZXRlc3QvSS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZ2VuZXJpY3MvY2hhbmdlVG9Db3ZhcmlhbnRNZXRob2RJbkJhc2Uvc3JjL21ha2V0ZXN0L0kuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NDM3ODIxCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZ2VuZXJpY3MvY2hhbmdlVG9Db3ZhcmlhbnRNZXRob2RJbkJhc2Uvc3JjL21ha2V0ZXN0L0kuamF2YQpAQCAtMCwwICsxLDUgQEAKK3BhY2thZ2UgbWFrZXRlc3Q7CisKK3B1YmxpYyBpbnRlcmZhY2UgSSB7CisgICAgRGF0YSBnZXREYXRhKCk7Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9nZW5lcmljcy9jaGFuZ2VUb0NvdmFyaWFudE1ldGhvZEluQmFzZS9zcmMvbWFrZXRlc3QvSUltcGwuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2dlbmVyaWNzL2NoYW5nZVRvQ292YXJpYW50TWV0aG9kSW5CYXNlL3NyYy9tYWtldGVzdC9JSW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNlZDgxMjkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9nZW5lcmljcy9jaGFuZ2VUb0NvdmFyaWFudE1ldGhvZEluQmFzZS9zcmMvbWFrZXRlc3QvSUltcGwuamF2YQpAQCAtMCwwICsxLDQgQEAKK3BhY2thZ2UgbWFrZXRlc3Q7CisKK3B1YmxpYyBjbGFzcyBJSW1wbCBleHRlbmRzIEJhc2VJbXBsZW1lbnRhdGlvbiBpbXBsZW1lbnRzIEkgeworfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZ2VuZXJpY3MvY2hhbmdlVG9Db3ZhcmlhbnRNZXRob2RJbkJhc2Uvc3JjL21ha2V0ZXN0L01haW4uamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2dlbmVyaWNzL2NoYW5nZVRvQ292YXJpYW50TWV0aG9kSW5CYXNlL3NyYy9tYWtldGVzdC9NYWluLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODNmYWM0ZAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2dlbmVyaWNzL2NoYW5nZVRvQ292YXJpYW50TWV0aG9kSW5CYXNlL3NyYy9tYWtldGVzdC9NYWluLmphdmEKQEAgLTAsMCArMSw5IEBACitwYWNrYWdlIG1ha2V0ZXN0OworCitwdWJsaWMgY2xhc3MgTWFpbiB7CisgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworICAgICAgICBJIGkgPSBuZXcgSUltcGwoKTsKKyAgICAgICAgRGF0YSBkYXRhID0gaS5nZXREYXRhKCk7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiZGF0YSA9ICIgKyBkYXRhKTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9nZW5lcmljcy9jaGFuZ2VUb0NvdmFyaWFudE1ldGhvZEluQmFzZTIubG9nIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZ2VuZXJpY3MvY2hhbmdlVG9Db3ZhcmlhbnRNZXRob2RJbkJhc2UyLmxvZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ODJhZTlhCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZ2VuZXJpY3MvY2hhbmdlVG9Db3ZhcmlhbnRNZXRob2RJbkJhc2UyLmxvZwpAQCAtMCwwICsxLDEyIEBACitDbGVhbmluZyBvdXRwdXQgZmlsZXM6CitvdXQvcHJvZHVjdGlvbi9DaGFuZ2VUb0NvdmFyaWFudE1ldGhvZEluQmFzZTIvbWFrZXRlc3QvQmFzZUltcGxlbWVudGF0aW9uLmNsYXNzCitFbmQgb2YgZmlsZXMKK0NvbXBpbGluZyBmaWxlczoKK3NyYy9tYWtldGVzdC9CYXNlSW1wbGVtZW50YXRpb24uamF2YQorRW5kIG9mIGZpbGVzCitDbGVhbmluZyBvdXRwdXQgZmlsZXM6CitvdXQvcHJvZHVjdGlvbi9DaGFuZ2VUb0NvdmFyaWFudE1ldGhvZEluQmFzZTIvbWFrZXRlc3QvSUltcGwuY2xhc3MKK0VuZCBvZiBmaWxlcworQ29tcGlsaW5nIGZpbGVzOgorc3JjL21ha2V0ZXN0L0lJbXBsLmphdmEKK0VuZCBvZiBmaWxlcwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZ2VuZXJpY3MvY2hhbmdlVG9Db3ZhcmlhbnRNZXRob2RJbkJhc2UyL2RhdGEueG1sIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZ2VuZXJpY3MvY2hhbmdlVG9Db3ZhcmlhbnRNZXRob2RJbkJhc2UyL2RhdGEueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA5ZDVlODcKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9nZW5lcmljcy9jaGFuZ2VUb0NvdmFyaWFudE1ldGhvZEluQmFzZTIvZGF0YS54bWwKQEAgLTAsMCArMSwxMCBAQAorPHRlc3REYXRhPgorICA8ZGVsZXRlZF9ieV9tYWtlPgorICAgIDxmaWxlIHBhdGg9ImNsYXNzZXMvbWFrZXRlc3QvQmFzZUltcGxlbWVudGF0aW9uLmNsYXNzIiAvPgorICAgIDxmaWxlIHBhdGg9ImNsYXNzZXMvbWFrZXRlc3QvSUltcGwuY2xhc3MiIC8+CisgIDwvZGVsZXRlZF9ieV9tYWtlPgorCisgIDxyZWNvbXBpbGU+CisgICAgPGZpbGUgcGF0aD0ic291cmNlL21ha2V0ZXN0L0lJbXBsLmphdmEiIC8+CisgIDwvcmVjb21waWxlPgorPC90ZXN0RGF0YT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9nZW5lcmljcy9jaGFuZ2VUb0NvdmFyaWFudE1ldGhvZEluQmFzZTIvc3JjL21ha2V0ZXN0L0Jhc2VJbXBsZW1lbnRhdGlvbi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZ2VuZXJpY3MvY2hhbmdlVG9Db3ZhcmlhbnRNZXRob2RJbkJhc2UyL3NyYy9tYWtldGVzdC9CYXNlSW1wbGVtZW50YXRpb24uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOWFlMjlmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZ2VuZXJpY3MvY2hhbmdlVG9Db3ZhcmlhbnRNZXRob2RJbkJhc2UyL3NyYy9tYWtldGVzdC9CYXNlSW1wbGVtZW50YXRpb24uamF2YQpAQCAtMCwwICsxLDcgQEAKK3BhY2thZ2UgbWFrZXRlc3Q7CisKK3B1YmxpYyBjbGFzcyBCYXNlSW1wbGVtZW50YXRpb24geworICAgIHB1YmxpYyBEYXRhIGdldERhdGEoKSB7CisgICAgICAgIHJldHVybiBuZXcgRGF0YUV4KCk7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZ2VuZXJpY3MvY2hhbmdlVG9Db3ZhcmlhbnRNZXRob2RJbkJhc2UyL3NyYy9tYWtldGVzdC9CYXNlSW1wbGVtZW50YXRpb24uamF2YS5uZXcgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9nZW5lcmljcy9jaGFuZ2VUb0NvdmFyaWFudE1ldGhvZEluQmFzZTIvc3JjL21ha2V0ZXN0L0Jhc2VJbXBsZW1lbnRhdGlvbi5qYXZhLm5ldwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNzQ5MjcwCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZ2VuZXJpY3MvY2hhbmdlVG9Db3ZhcmlhbnRNZXRob2RJbkJhc2UyL3NyYy9tYWtldGVzdC9CYXNlSW1wbGVtZW50YXRpb24uamF2YS5uZXcKQEAgLTAsMCArMSw3IEBACitwYWNrYWdlIG1ha2V0ZXN0OworCitwdWJsaWMgY2xhc3MgQmFzZUltcGxlbWVudGF0aW9uIHsKKyAgICBwdWJsaWMgRGF0YUV4IGdldERhdGEoKSB7CisgICAgICAgIHJldHVybiBuZXcgRGF0YUV4KCk7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZ2VuZXJpY3MvY2hhbmdlVG9Db3ZhcmlhbnRNZXRob2RJbkJhc2UyL3NyYy9tYWtldGVzdC9EYXRhLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9nZW5lcmljcy9jaGFuZ2VUb0NvdmFyaWFudE1ldGhvZEluQmFzZTIvc3JjL21ha2V0ZXN0L0RhdGEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZjFmZWNkCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZ2VuZXJpY3MvY2hhbmdlVG9Db3ZhcmlhbnRNZXRob2RJbkJhc2UyL3NyYy9tYWtldGVzdC9EYXRhLmphdmEKQEAgLTAsMCArMSw0IEBACitwYWNrYWdlIG1ha2V0ZXN0OworCitwdWJsaWMgY2xhc3MgRGF0YSB7Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9nZW5lcmljcy9jaGFuZ2VUb0NvdmFyaWFudE1ldGhvZEluQmFzZTIvc3JjL21ha2V0ZXN0L0RhdGFFeC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZ2VuZXJpY3MvY2hhbmdlVG9Db3ZhcmlhbnRNZXRob2RJbkJhc2UyL3NyYy9tYWtldGVzdC9EYXRhRXguamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNDJhNmZiCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZ2VuZXJpY3MvY2hhbmdlVG9Db3ZhcmlhbnRNZXRob2RJbkJhc2UyL3NyYy9tYWtldGVzdC9EYXRhRXguamF2YQpAQCAtMCwwICsxLDQgQEAKK3BhY2thZ2UgbWFrZXRlc3Q7CisKK3B1YmxpYyBjbGFzcyBEYXRhRXggZXh0ZW5kcyBEYXRhIHsKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2dlbmVyaWNzL2NoYW5nZVRvQ292YXJpYW50TWV0aG9kSW5CYXNlMi9zcmMvbWFrZXRlc3QvSS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZ2VuZXJpY3MvY2hhbmdlVG9Db3ZhcmlhbnRNZXRob2RJbkJhc2UyL3NyYy9tYWtldGVzdC9JLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODQzNzgyMQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2dlbmVyaWNzL2NoYW5nZVRvQ292YXJpYW50TWV0aG9kSW5CYXNlMi9zcmMvbWFrZXRlc3QvSS5qYXZhCkBAIC0wLDAgKzEsNSBAQAorcGFja2FnZSBtYWtldGVzdDsKKworcHVibGljIGludGVyZmFjZSBJIHsKKyAgICBEYXRhIGdldERhdGEoKTsKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2dlbmVyaWNzL2NoYW5nZVRvQ292YXJpYW50TWV0aG9kSW5CYXNlMi9zcmMvbWFrZXRlc3QvSUltcGwuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2dlbmVyaWNzL2NoYW5nZVRvQ292YXJpYW50TWV0aG9kSW5CYXNlMi9zcmMvbWFrZXRlc3QvSUltcGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOTJjN2UyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZ2VuZXJpY3MvY2hhbmdlVG9Db3ZhcmlhbnRNZXRob2RJbkJhc2UyL3NyYy9tYWtldGVzdC9JSW1wbC5qYXZhCkBAIC0wLDAgKzEsNCBAQAorcGFja2FnZSBtYWtldGVzdDsKKworcHVibGljIGNsYXNzIElJbXBsIGV4dGVuZHMgQmFzZUltcGxlbWVudGF0aW9uIGltcGxlbWVudHMgSiB7Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9nZW5lcmljcy9jaGFuZ2VUb0NvdmFyaWFudE1ldGhvZEluQmFzZTIvc3JjL21ha2V0ZXN0L0ouamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2dlbmVyaWNzL2NoYW5nZVRvQ292YXJpYW50TWV0aG9kSW5CYXNlMi9zcmMvbWFrZXRlc3QvSi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQyMTZlYzYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9nZW5lcmljcy9jaGFuZ2VUb0NvdmFyaWFudE1ldGhvZEluQmFzZTIvc3JjL21ha2V0ZXN0L0ouamF2YQpAQCAtMCwwICsxLDQgQEAKK3BhY2thZ2UgbWFrZXRlc3Q7CisKK3B1YmxpYyBpbnRlcmZhY2UgSiBleHRlbmRzIEkgeworfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZ2VuZXJpY3MvY2hhbmdlVG9Db3ZhcmlhbnRNZXRob2RJbkJhc2UyL3NyYy9tYWtldGVzdC9NYWluLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9nZW5lcmljcy9jaGFuZ2VUb0NvdmFyaWFudE1ldGhvZEluQmFzZTIvc3JjL21ha2V0ZXN0L01haW4uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44M2ZhYzRkCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZ2VuZXJpY3MvY2hhbmdlVG9Db3ZhcmlhbnRNZXRob2RJbkJhc2UyL3NyYy9tYWtldGVzdC9NYWluLmphdmEKQEAgLTAsMCArMSw5IEBACitwYWNrYWdlIG1ha2V0ZXN0OworCitwdWJsaWMgY2xhc3MgTWFpbiB7CisgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworICAgICAgICBJIGkgPSBuZXcgSUltcGwoKTsKKyAgICAgICAgRGF0YSBkYXRhID0gaS5nZXREYXRhKCk7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiZGF0YSA9ICIgKyBkYXRhKTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9nZW5lcmljcy9jaGFuZ2VUb0NvdmFyaWFudE1ldGhvZEluQmFzZTMvZGF0YS54bWwgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9nZW5lcmljcy9jaGFuZ2VUb0NvdmFyaWFudE1ldGhvZEluQmFzZTMvZGF0YS54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGQ4NDA3YzMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9nZW5lcmljcy9jaGFuZ2VUb0NvdmFyaWFudE1ldGhvZEluQmFzZTMvZGF0YS54bWwKQEAgLTAsMCArMSwxMCBAQAorPHRlc3REYXRhPgorICA8ZGVsZXRlZF9ieV9tYWtlPgorICAgIDxmaWxlIHBhdGg9ImNsYXNzZXMvbWFrZXRlc3QvQmFzZUltcGxlbWVudGF0aW9uLmNsYXNzIiAvPgorICAgIDxmaWxlIHBhdGg9ImNsYXNzZXMvbWFrZXRlc3QvTWVkaWF0b3IuY2xhc3MiIC8+CisgIDwvZGVsZXRlZF9ieV9tYWtlPgorCisgIDxyZWNvbXBpbGU+CisgICAgPGZpbGUgcGF0aD0ic291cmNlL21ha2V0ZXN0L01lZGlhdG9yLmphdmEiIC8+CisgIDwvcmVjb21waWxlPgorPC90ZXN0RGF0YT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9nZW5lcmljcy9jaGFuZ2VUb0NvdmFyaWFudE1ldGhvZEluQmFzZTMvb3V0L3Byb2R1Y3Rpb24vQ2hhbmdlVG9Db3ZhcmlhbnRNZXRob2RJbkJhc2UzL21ha2V0ZXN0L0Jhc2VJbXBsZW1lbnRhdGlvbi5jbGFzcyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2dlbmVyaWNzL2NoYW5nZVRvQ292YXJpYW50TWV0aG9kSW5CYXNlMy9vdXQvcHJvZHVjdGlvbi9DaGFuZ2VUb0NvdmFyaWFudE1ldGhvZEluQmFzZTMvbWFrZXRlc3QvQmFzZUltcGxlbWVudGF0aW9uLmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEzOTgzMzQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9nZW5lcmljcy9jaGFuZ2VUb0NvdmFyaWFudE1ldGhvZEluQmFzZTMvb3V0L3Byb2R1Y3Rpb24vQ2hhbmdlVG9Db3ZhcmlhbnRNZXRob2RJbkJhc2UzL21ha2V0ZXN0L0Jhc2VJbXBsZW1lbnRhdGlvbi5jbGFzcwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9nZW5lcmljcy9jaGFuZ2VUb0NvdmFyaWFudE1ldGhvZEluQmFzZTMvb3V0L3Byb2R1Y3Rpb24vQ2hhbmdlVG9Db3ZhcmlhbnRNZXRob2RJbkJhc2UzL21ha2V0ZXN0L0RhdGEuY2xhc3MgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9nZW5lcmljcy9jaGFuZ2VUb0NvdmFyaWFudE1ldGhvZEluQmFzZTMvb3V0L3Byb2R1Y3Rpb24vQ2hhbmdlVG9Db3ZhcmlhbnRNZXRob2RJbkJhc2UzL21ha2V0ZXN0L0RhdGEuY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDJlMDdkNgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2dlbmVyaWNzL2NoYW5nZVRvQ292YXJpYW50TWV0aG9kSW5CYXNlMy9vdXQvcHJvZHVjdGlvbi9DaGFuZ2VUb0NvdmFyaWFudE1ldGhvZEluQmFzZTMvbWFrZXRlc3QvRGF0YS5jbGFzcwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9nZW5lcmljcy9jaGFuZ2VUb0NvdmFyaWFudE1ldGhvZEluQmFzZTMvb3V0L3Byb2R1Y3Rpb24vQ2hhbmdlVG9Db3ZhcmlhbnRNZXRob2RJbkJhc2UzL21ha2V0ZXN0L0RhdGFFeC5jbGFzcyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2dlbmVyaWNzL2NoYW5nZVRvQ292YXJpYW50TWV0aG9kSW5CYXNlMy9vdXQvcHJvZHVjdGlvbi9DaGFuZ2VUb0NvdmFyaWFudE1ldGhvZEluQmFzZTMvbWFrZXRlc3QvRGF0YUV4LmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU5ZjBiZGQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9nZW5lcmljcy9jaGFuZ2VUb0NvdmFyaWFudE1ldGhvZEluQmFzZTMvb3V0L3Byb2R1Y3Rpb24vQ2hhbmdlVG9Db3ZhcmlhbnRNZXRob2RJbkJhc2UzL21ha2V0ZXN0L0RhdGFFeC5jbGFzcwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9nZW5lcmljcy9jaGFuZ2VUb0NvdmFyaWFudE1ldGhvZEluQmFzZTMvb3V0L3Byb2R1Y3Rpb24vQ2hhbmdlVG9Db3ZhcmlhbnRNZXRob2RJbkJhc2UzL21ha2V0ZXN0L0kuY2xhc3MgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9nZW5lcmljcy9jaGFuZ2VUb0NvdmFyaWFudE1ldGhvZEluQmFzZTMvb3V0L3Byb2R1Y3Rpb24vQ2hhbmdlVG9Db3ZhcmlhbnRNZXRob2RJbkJhc2UzL21ha2V0ZXN0L0kuY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmM3ZDQ1NQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2dlbmVyaWNzL2NoYW5nZVRvQ292YXJpYW50TWV0aG9kSW5CYXNlMy9vdXQvcHJvZHVjdGlvbi9DaGFuZ2VUb0NvdmFyaWFudE1ldGhvZEluQmFzZTMvbWFrZXRlc3QvSS5jbGFzcwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9nZW5lcmljcy9jaGFuZ2VUb0NvdmFyaWFudE1ldGhvZEluQmFzZTMvb3V0L3Byb2R1Y3Rpb24vQ2hhbmdlVG9Db3ZhcmlhbnRNZXRob2RJbkJhc2UzL21ha2V0ZXN0L0lJbXBsLmNsYXNzIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZ2VuZXJpY3MvY2hhbmdlVG9Db3ZhcmlhbnRNZXRob2RJbkJhc2UzL291dC9wcm9kdWN0aW9uL0NoYW5nZVRvQ292YXJpYW50TWV0aG9kSW5CYXNlMy9tYWtldGVzdC9JSW1wbC5jbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40Mzc5ODljCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZ2VuZXJpY3MvY2hhbmdlVG9Db3ZhcmlhbnRNZXRob2RJbkJhc2UzL291dC9wcm9kdWN0aW9uL0NoYW5nZVRvQ292YXJpYW50TWV0aG9kSW5CYXNlMy9tYWtldGVzdC9JSW1wbC5jbGFzcwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9nZW5lcmljcy9jaGFuZ2VUb0NvdmFyaWFudE1ldGhvZEluQmFzZTMvb3V0L3Byb2R1Y3Rpb24vQ2hhbmdlVG9Db3ZhcmlhbnRNZXRob2RJbkJhc2UzL21ha2V0ZXN0L0ouY2xhc3MgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9nZW5lcmljcy9jaGFuZ2VUb0NvdmFyaWFudE1ldGhvZEluQmFzZTMvb3V0L3Byb2R1Y3Rpb24vQ2hhbmdlVG9Db3ZhcmlhbnRNZXRob2RJbkJhc2UzL21ha2V0ZXN0L0ouY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTNiMzBjOAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2dlbmVyaWNzL2NoYW5nZVRvQ292YXJpYW50TWV0aG9kSW5CYXNlMy9vdXQvcHJvZHVjdGlvbi9DaGFuZ2VUb0NvdmFyaWFudE1ldGhvZEluQmFzZTMvbWFrZXRlc3QvSi5jbGFzcwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9nZW5lcmljcy9jaGFuZ2VUb0NvdmFyaWFudE1ldGhvZEluQmFzZTMvb3V0L3Byb2R1Y3Rpb24vQ2hhbmdlVG9Db3ZhcmlhbnRNZXRob2RJbkJhc2UzL21ha2V0ZXN0L01haW4uY2xhc3MgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9nZW5lcmljcy9jaGFuZ2VUb0NvdmFyaWFudE1ldGhvZEluQmFzZTMvb3V0L3Byb2R1Y3Rpb24vQ2hhbmdlVG9Db3ZhcmlhbnRNZXRob2RJbkJhc2UzL21ha2V0ZXN0L01haW4uY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTI1YWQ2YwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2dlbmVyaWNzL2NoYW5nZVRvQ292YXJpYW50TWV0aG9kSW5CYXNlMy9vdXQvcHJvZHVjdGlvbi9DaGFuZ2VUb0NvdmFyaWFudE1ldGhvZEluQmFzZTMvbWFrZXRlc3QvTWFpbi5jbGFzcwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9nZW5lcmljcy9jaGFuZ2VUb0NvdmFyaWFudE1ldGhvZEluQmFzZTMvb3V0L3Byb2R1Y3Rpb24vQ2hhbmdlVG9Db3ZhcmlhbnRNZXRob2RJbkJhc2UzL21ha2V0ZXN0L01lZGlhdG9yLmNsYXNzIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZ2VuZXJpY3MvY2hhbmdlVG9Db3ZhcmlhbnRNZXRob2RJbkJhc2UzL291dC9wcm9kdWN0aW9uL0NoYW5nZVRvQ292YXJpYW50TWV0aG9kSW5CYXNlMy9tYWtldGVzdC9NZWRpYXRvci5jbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZTQ3YjIyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZ2VuZXJpY3MvY2hhbmdlVG9Db3ZhcmlhbnRNZXRob2RJbkJhc2UzL291dC9wcm9kdWN0aW9uL0NoYW5nZVRvQ292YXJpYW50TWV0aG9kSW5CYXNlMy9tYWtldGVzdC9NZWRpYXRvci5jbGFzcwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9nZW5lcmljcy9jaGFuZ2VUb0NvdmFyaWFudE1ldGhvZEluQmFzZTMvc3JjL21ha2V0ZXN0L0Jhc2VJbXBsZW1lbnRhdGlvbi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZ2VuZXJpY3MvY2hhbmdlVG9Db3ZhcmlhbnRNZXRob2RJbkJhc2UzL3NyYy9tYWtldGVzdC9CYXNlSW1wbGVtZW50YXRpb24uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOWFlMjlmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZ2VuZXJpY3MvY2hhbmdlVG9Db3ZhcmlhbnRNZXRob2RJbkJhc2UzL3NyYy9tYWtldGVzdC9CYXNlSW1wbGVtZW50YXRpb24uamF2YQpAQCAtMCwwICsxLDcgQEAKK3BhY2thZ2UgbWFrZXRlc3Q7CisKK3B1YmxpYyBjbGFzcyBCYXNlSW1wbGVtZW50YXRpb24geworICAgIHB1YmxpYyBEYXRhIGdldERhdGEoKSB7CisgICAgICAgIHJldHVybiBuZXcgRGF0YUV4KCk7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZ2VuZXJpY3MvY2hhbmdlVG9Db3ZhcmlhbnRNZXRob2RJbkJhc2UzL3NyYy9tYWtldGVzdC9CYXNlSW1wbGVtZW50YXRpb24uamF2YS5uZXcgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9nZW5lcmljcy9jaGFuZ2VUb0NvdmFyaWFudE1ldGhvZEluQmFzZTMvc3JjL21ha2V0ZXN0L0Jhc2VJbXBsZW1lbnRhdGlvbi5qYXZhLm5ldwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNzQ5MjcwCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZ2VuZXJpY3MvY2hhbmdlVG9Db3ZhcmlhbnRNZXRob2RJbkJhc2UzL3NyYy9tYWtldGVzdC9CYXNlSW1wbGVtZW50YXRpb24uamF2YS5uZXcKQEAgLTAsMCArMSw3IEBACitwYWNrYWdlIG1ha2V0ZXN0OworCitwdWJsaWMgY2xhc3MgQmFzZUltcGxlbWVudGF0aW9uIHsKKyAgICBwdWJsaWMgRGF0YUV4IGdldERhdGEoKSB7CisgICAgICAgIHJldHVybiBuZXcgRGF0YUV4KCk7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZ2VuZXJpY3MvY2hhbmdlVG9Db3ZhcmlhbnRNZXRob2RJbkJhc2UzL3NyYy9tYWtldGVzdC9EYXRhLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9nZW5lcmljcy9jaGFuZ2VUb0NvdmFyaWFudE1ldGhvZEluQmFzZTMvc3JjL21ha2V0ZXN0L0RhdGEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZjFmZWNkCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZ2VuZXJpY3MvY2hhbmdlVG9Db3ZhcmlhbnRNZXRob2RJbkJhc2UzL3NyYy9tYWtldGVzdC9EYXRhLmphdmEKQEAgLTAsMCArMSw0IEBACitwYWNrYWdlIG1ha2V0ZXN0OworCitwdWJsaWMgY2xhc3MgRGF0YSB7Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9nZW5lcmljcy9jaGFuZ2VUb0NvdmFyaWFudE1ldGhvZEluQmFzZTMvc3JjL21ha2V0ZXN0L0RhdGFFeC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZ2VuZXJpY3MvY2hhbmdlVG9Db3ZhcmlhbnRNZXRob2RJbkJhc2UzL3NyYy9tYWtldGVzdC9EYXRhRXguamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNDJhNmZiCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZ2VuZXJpY3MvY2hhbmdlVG9Db3ZhcmlhbnRNZXRob2RJbkJhc2UzL3NyYy9tYWtldGVzdC9EYXRhRXguamF2YQpAQCAtMCwwICsxLDQgQEAKK3BhY2thZ2UgbWFrZXRlc3Q7CisKK3B1YmxpYyBjbGFzcyBEYXRhRXggZXh0ZW5kcyBEYXRhIHsKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2dlbmVyaWNzL2NoYW5nZVRvQ292YXJpYW50TWV0aG9kSW5CYXNlMy9zcmMvbWFrZXRlc3QvSS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZ2VuZXJpY3MvY2hhbmdlVG9Db3ZhcmlhbnRNZXRob2RJbkJhc2UzL3NyYy9tYWtldGVzdC9JLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODQzNzgyMQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2dlbmVyaWNzL2NoYW5nZVRvQ292YXJpYW50TWV0aG9kSW5CYXNlMy9zcmMvbWFrZXRlc3QvSS5qYXZhCkBAIC0wLDAgKzEsNSBAQAorcGFja2FnZSBtYWtldGVzdDsKKworcHVibGljIGludGVyZmFjZSBJIHsKKyAgICBEYXRhIGdldERhdGEoKTsKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2dlbmVyaWNzL2NoYW5nZVRvQ292YXJpYW50TWV0aG9kSW5CYXNlMy9zcmMvbWFrZXRlc3QvSUltcGwuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2dlbmVyaWNzL2NoYW5nZVRvQ292YXJpYW50TWV0aG9kSW5CYXNlMy9zcmMvbWFrZXRlc3QvSUltcGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMWNkOTNmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZ2VuZXJpY3MvY2hhbmdlVG9Db3ZhcmlhbnRNZXRob2RJbkJhc2UzL3NyYy9tYWtldGVzdC9JSW1wbC5qYXZhCkBAIC0wLDAgKzEsNCBAQAorcGFja2FnZSBtYWtldGVzdDsKKworcHVibGljIGNsYXNzIElJbXBsIGV4dGVuZHMgTWVkaWF0b3IgeworfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZ2VuZXJpY3MvY2hhbmdlVG9Db3ZhcmlhbnRNZXRob2RJbkJhc2UzL3NyYy9tYWtldGVzdC9KLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9nZW5lcmljcy9jaGFuZ2VUb0NvdmFyaWFudE1ldGhvZEluQmFzZTMvc3JjL21ha2V0ZXN0L0ouamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MjE2ZWM2Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZ2VuZXJpY3MvY2hhbmdlVG9Db3ZhcmlhbnRNZXRob2RJbkJhc2UzL3NyYy9tYWtldGVzdC9KLmphdmEKQEAgLTAsMCArMSw0IEBACitwYWNrYWdlIG1ha2V0ZXN0OworCitwdWJsaWMgaW50ZXJmYWNlIEogZXh0ZW5kcyBJIHsKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2dlbmVyaWNzL2NoYW5nZVRvQ292YXJpYW50TWV0aG9kSW5CYXNlMy9zcmMvbWFrZXRlc3QvTWFpbi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZ2VuZXJpY3MvY2hhbmdlVG9Db3ZhcmlhbnRNZXRob2RJbkJhc2UzL3NyYy9tYWtldGVzdC9NYWluLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODNmYWM0ZAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2dlbmVyaWNzL2NoYW5nZVRvQ292YXJpYW50TWV0aG9kSW5CYXNlMy9zcmMvbWFrZXRlc3QvTWFpbi5qYXZhCkBAIC0wLDAgKzEsOSBAQAorcGFja2FnZSBtYWtldGVzdDsKKworcHVibGljIGNsYXNzIE1haW4geworICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKyAgICAgICAgSSBpID0gbmV3IElJbXBsKCk7CisgICAgICAgIERhdGEgZGF0YSA9IGkuZ2V0RGF0YSgpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImRhdGEgPSAiICsgZGF0YSk7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZ2VuZXJpY3MvY2hhbmdlVG9Db3ZhcmlhbnRNZXRob2RJbkJhc2UzL3NyYy9tYWtldGVzdC9NZWRpYXRvci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZ2VuZXJpY3MvY2hhbmdlVG9Db3ZhcmlhbnRNZXRob2RJbkJhc2UzL3NyYy9tYWtldGVzdC9NZWRpYXRvci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ2NzlhODgKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9nZW5lcmljcy9jaGFuZ2VUb0NvdmFyaWFudE1ldGhvZEluQmFzZTMvc3JjL21ha2V0ZXN0L01lZGlhdG9yLmphdmEKQEAgLTAsMCArMSw0IEBACitwYWNrYWdlIG1ha2V0ZXN0OworCitwdWJsaWMgY2xhc3MgTWVkaWF0b3IgZXh0ZW5kcyBCYXNlSW1wbGVtZW50YXRpb24gaW1wbGVtZW50cyBKIHsKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2dlbmVyaWNzL2NoYW5nZVZhcmFyZ1NpZ25hdHVyZS5sb2cgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9nZW5lcmljcy9jaGFuZ2VWYXJhcmdTaWduYXR1cmUubG9nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVkOGZhMGIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9nZW5lcmljcy9jaGFuZ2VWYXJhcmdTaWduYXR1cmUubG9nCkBAIC0wLDAgKzEsMTIgQEAKK0NsZWFuaW5nIG91dHB1dCBmaWxlczoKK291dC9wcm9kdWN0aW9uL0NoYW5nZVZhcmFyZ1NpZ25hdHVyZS9wYWNrYWdlQS9CYXNlLmNsYXNzCitFbmQgb2YgZmlsZXMKK0NvbXBpbGluZyBmaWxlczoKK3NyYy9wYWNrYWdlQS9CYXNlLmphdmEKK0VuZCBvZiBmaWxlcworQ2xlYW5pbmcgb3V0cHV0IGZpbGVzOgorb3V0L3Byb2R1Y3Rpb24vQ2hhbmdlVmFyYXJnU2lnbmF0dXJlL3BhY2thZ2VBL0Rlcml2ZWQuY2xhc3MKK0VuZCBvZiBmaWxlcworQ29tcGlsaW5nIGZpbGVzOgorc3JjL3BhY2thZ2VBL0Rlcml2ZWQuamF2YQorRW5kIG9mIGZpbGVzCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9nZW5lcmljcy9jaGFuZ2VWYXJhcmdTaWduYXR1cmUvZGF0YS54bWwgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9nZW5lcmljcy9jaGFuZ2VWYXJhcmdTaWduYXR1cmUvZGF0YS54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDhlYjc5ZAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2dlbmVyaWNzL2NoYW5nZVZhcmFyZ1NpZ25hdHVyZS9kYXRhLnhtbApAQCAtMCwwICsxLDE1IEBACis8dGVzdERhdGE+CisKKyAgPGRlbGV0ZT4KKyAgPC9kZWxldGU+CisKKyAgPGRlbGV0ZWRfYnlfbWFrZT4KKyAgICA8ZmlsZSBwYXRoPSJjbGFzc2VzL3BhY2thZ2VBL0Jhc2UuY2xhc3MiIC8+CisgICAgPGZpbGUgcGF0aD0iY2xhc3Nlcy9wYWNrYWdlQS9EZXJpdmVkLmNsYXNzIiAvPgorICA8L2RlbGV0ZWRfYnlfbWFrZT4KKworICA8cmVjb21waWxlPgorICAgIDxmaWxlIHBhdGg9InNvdXJjZS9wYWNrYWdlQS9EZXJpdmVkLmphdmEiIC8+CisgIDwvcmVjb21waWxlPgorCis8L3Rlc3REYXRhPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2dlbmVyaWNzL2NoYW5nZVZhcmFyZ1NpZ25hdHVyZS9zcmMvcGFja2FnZUEvQmFzZS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZ2VuZXJpY3MvY2hhbmdlVmFyYXJnU2lnbmF0dXJlL3NyYy9wYWNrYWdlQS9CYXNlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjUwYTljYQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2dlbmVyaWNzL2NoYW5nZVZhcmFyZ1NpZ25hdHVyZS9zcmMvcGFja2FnZUEvQmFzZS5qYXZhCkBAIC0wLDAgKzEsNyBAQAorcGFja2FnZSBwYWNrYWdlQTsKKworcHVibGljIGNsYXNzIEJhc2UgeworICBwdWJsaWMgdm9pZCBmb28oU3RyaW5nLi4uIHBhcmFtcykgeworICAgIFN5c3RlbS5vdXQucHJpbnRsbihwYXJhbXMpOworICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9nZW5lcmljcy9jaGFuZ2VWYXJhcmdTaWduYXR1cmUvc3JjL3BhY2thZ2VBL0Jhc2UuamF2YS5uZXcgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9nZW5lcmljcy9jaGFuZ2VWYXJhcmdTaWduYXR1cmUvc3JjL3BhY2thZ2VBL0Jhc2UuamF2YS5uZXcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWI2MWFiMQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2dlbmVyaWNzL2NoYW5nZVZhcmFyZ1NpZ25hdHVyZS9zcmMvcGFja2FnZUEvQmFzZS5qYXZhLm5ldwpAQCAtMCwwICsxLDcgQEAKK3BhY2thZ2UgcGFja2FnZUE7CisKK3B1YmxpYyBjbGFzcyBCYXNlIHsKKyAgcHVibGljIHZvaWQgZm9vKGphdmEudXRpbC5MaXN0PFN0cmluZz4gcGFyYW1zKSB7CisgICAgU3lzdGVtLm91dC5wcmludGxuKHBhcmFtcyk7CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2dlbmVyaWNzL2NoYW5nZVZhcmFyZ1NpZ25hdHVyZS9zcmMvcGFja2FnZUEvRGVyaXZlZC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZ2VuZXJpY3MvY2hhbmdlVmFyYXJnU2lnbmF0dXJlL3NyYy9wYWNrYWdlQS9EZXJpdmVkLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGY5MmIwNwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2dlbmVyaWNzL2NoYW5nZVZhcmFyZ1NpZ25hdHVyZS9zcmMvcGFja2FnZUEvRGVyaXZlZC5qYXZhCkBAIC0wLDAgKzEsOCBAQAorcGFja2FnZSBwYWNrYWdlQTsKKworcHVibGljIGNsYXNzIERlcml2ZWQgZXh0ZW5kcyBCYXNleworICBAT3ZlcnJpZGUKKyAgcHVibGljIHZvaWQgZm9vKFN0cmluZy4uLiBwYXJhbXMpIHsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkRlcml2ZWQgIiArIHBhcmFtcy50b1N0cmluZygpKTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZ2VuZXJpY3MvY2hhbmdlVmFyYXJnU2lnbmF0dXJlMS5sb2cgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9nZW5lcmljcy9jaGFuZ2VWYXJhcmdTaWduYXR1cmUxLmxvZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NTNjMmJjCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZ2VuZXJpY3MvY2hhbmdlVmFyYXJnU2lnbmF0dXJlMS5sb2cKQEAgLTAsMCArMSwxMiBAQAorQ2xlYW5pbmcgb3V0cHV0IGZpbGVzOgorb3V0L3Byb2R1Y3Rpb24vQ2hhbmdlVmFyYXJnU2lnbmF0dXJlMS9wYWNrYWdlQS9CYXNlLmNsYXNzCitFbmQgb2YgZmlsZXMKK0NvbXBpbGluZyBmaWxlczoKK3NyYy9wYWNrYWdlQS9CYXNlLmphdmEKK0VuZCBvZiBmaWxlcworQ2xlYW5pbmcgb3V0cHV0IGZpbGVzOgorb3V0L3Byb2R1Y3Rpb24vQ2hhbmdlVmFyYXJnU2lnbmF0dXJlMS9wYWNrYWdlQS9EZXJpJHZlZC5jbGFzcworRW5kIG9mIGZpbGVzCitDb21waWxpbmcgZmlsZXM6CitzcmMvcGFja2FnZUEvRGVyaSR2ZWQuamF2YQorRW5kIG9mIGZpbGVzCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9nZW5lcmljcy9jaGFuZ2VWYXJhcmdTaWduYXR1cmUxL2RhdGEueG1sIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZ2VuZXJpY3MvY2hhbmdlVmFyYXJnU2lnbmF0dXJlMS9kYXRhLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OTUzNDE2Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZ2VuZXJpY3MvY2hhbmdlVmFyYXJnU2lnbmF0dXJlMS9kYXRhLnhtbApAQCAtMCwwICsxLDE1IEBACis8dGVzdERhdGE+CisKKyAgPGRlbGV0ZT4KKyAgPC9kZWxldGU+CisKKyAgPGRlbGV0ZWRfYnlfbWFrZT4KKyAgICA8ZmlsZSBwYXRoPSJjbGFzc2VzL3BhY2thZ2VBL0Jhc2UuY2xhc3MiIC8+CisgICAgPGZpbGUgcGF0aD0iY2xhc3Nlcy9wYWNrYWdlQS9EZXJpJHZlZC5jbGFzcyIgLz4KKyAgPC9kZWxldGVkX2J5X21ha2U+CisKKyAgPHJlY29tcGlsZT4KKyAgICA8ZmlsZSBwYXRoPSJzb3VyY2UvcGFja2FnZUEvRGVyaSR2ZWQuamF2YSIgLz4KKyAgPC9yZWNvbXBpbGU+CisKKzwvdGVzdERhdGE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZ2VuZXJpY3MvY2hhbmdlVmFyYXJnU2lnbmF0dXJlMS9zcmMvcGFja2FnZUEvQmFzZS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZ2VuZXJpY3MvY2hhbmdlVmFyYXJnU2lnbmF0dXJlMS9zcmMvcGFja2FnZUEvQmFzZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI1MGE5Y2EKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9nZW5lcmljcy9jaGFuZ2VWYXJhcmdTaWduYXR1cmUxL3NyYy9wYWNrYWdlQS9CYXNlLmphdmEKQEAgLTAsMCArMSw3IEBACitwYWNrYWdlIHBhY2thZ2VBOworCitwdWJsaWMgY2xhc3MgQmFzZSB7CisgIHB1YmxpYyB2b2lkIGZvbyhTdHJpbmcuLi4gcGFyYW1zKSB7CisgICAgU3lzdGVtLm91dC5wcmludGxuKHBhcmFtcyk7CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2dlbmVyaWNzL2NoYW5nZVZhcmFyZ1NpZ25hdHVyZTEvc3JjL3BhY2thZ2VBL0Jhc2UuamF2YS5uZXcgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9nZW5lcmljcy9jaGFuZ2VWYXJhcmdTaWduYXR1cmUxL3NyYy9wYWNrYWdlQS9CYXNlLmphdmEubmV3Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjViNjFhYjEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9nZW5lcmljcy9jaGFuZ2VWYXJhcmdTaWduYXR1cmUxL3NyYy9wYWNrYWdlQS9CYXNlLmphdmEubmV3CkBAIC0wLDAgKzEsNyBAQAorcGFja2FnZSBwYWNrYWdlQTsKKworcHVibGljIGNsYXNzIEJhc2UgeworICBwdWJsaWMgdm9pZCBmb28oamF2YS51dGlsLkxpc3Q8U3RyaW5nPiBwYXJhbXMpIHsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4ocGFyYW1zKTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZ2VuZXJpY3MvY2hhbmdlVmFyYXJnU2lnbmF0dXJlMS9zcmMvcGFja2FnZUEvRGVyaSR2ZWQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2dlbmVyaWNzL2NoYW5nZVZhcmFyZ1NpZ25hdHVyZTEvc3JjL3BhY2thZ2VBL0RlcmkkdmVkLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjYzNWYxNQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2dlbmVyaWNzL2NoYW5nZVZhcmFyZ1NpZ25hdHVyZTEvc3JjL3BhY2thZ2VBL0RlcmkkdmVkLmphdmEKQEAgLTAsMCArMSw4IEBACitwYWNrYWdlIHBhY2thZ2VBOworCitwdWJsaWMgY2xhc3MgRGVyaSR2ZWQgZXh0ZW5kcyBCYXNleworICBAT3ZlcnJpZGUKKyAgcHVibGljIHZvaWQgZm9vKFN0cmluZy4uLiBwYXJhbXMpIHsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkRlcml2ZWQgIiArIHBhcmFtcy50b1N0cmluZygpKTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZ2VuZXJpY3MvY292YXJpYW5jZS5sb2cgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9nZW5lcmljcy9jb3ZhcmlhbmNlLmxvZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZDhmODIwCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZ2VuZXJpY3MvY292YXJpYW5jZS5sb2cKQEAgLTAsMCArMSwxMiBAQAorQ2xlYW5pbmcgb3V0cHV0IGZpbGVzOgorb3V0L3Byb2R1Y3Rpb24vQ292YXJpYW5jZS9EZXJpdmVkLmNsYXNzCitFbmQgb2YgZmlsZXMKK0NvbXBpbGluZyBmaWxlczoKK3NyYy9EZXJpdmVkLmphdmEKK0VuZCBvZiBmaWxlcworQ2xlYW5pbmcgb3V0cHV0IGZpbGVzOgorb3V0L3Byb2R1Y3Rpb24vQ292YXJpYW5jZS9DbGllbnQuY2xhc3MKK0VuZCBvZiBmaWxlcworQ29tcGlsaW5nIGZpbGVzOgorc3JjL0NsaWVudC5qYXZhCitFbmQgb2YgZmlsZXMKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2dlbmVyaWNzL2NvdmFyaWFuY2UvRGVyaXZlZC5qYXZhLm5ldyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2dlbmVyaWNzL2NvdmFyaWFuY2UvRGVyaXZlZC5qYXZhLm5ldwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZDk0OTJkCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZ2VuZXJpY3MvY292YXJpYW5jZS9EZXJpdmVkLmphdmEubmV3CkBAIC0wLDAgKzEsMiBAQAorcHVibGljIGNsYXNzIERlcml2ZWQgZXh0ZW5kcyBCYXNlIHsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9nZW5lcmljcy9jb3ZhcmlhbmNlL3NyYy9CYXNlLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9nZW5lcmljcy9jb3ZhcmlhbmNlL3NyYy9CYXNlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWNmMzA4MgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2dlbmVyaWNzL2NvdmFyaWFuY2Uvc3JjL0Jhc2UuamF2YQpAQCAtMCwwICsxLDUgQEAKK3B1YmxpYyBjbGFzcyBCYXNlIHsKKyAgcHVibGljIFZhbHVlIGdldFZhbHVlKCkgeworICAgIHJldHVybiBuZXcgVmFsdWUoKTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2dlbmVyaWNzL2NvdmFyaWFuY2Uvc3JjL0NsaWVudC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZ2VuZXJpY3MvY292YXJpYW5jZS9zcmMvQ2xpZW50LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWM2MzQzMAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2dlbmVyaWNzL2NvdmFyaWFuY2Uvc3JjL0NsaWVudC5qYXZhCkBAIC0wLDAgKzEsNiBAQAorcHVibGljIGNsYXNzIENsaWVudCB7CisgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKyAgICBEZXJpdmVkIG9iaiA9IG5ldyBEZXJpdmVkKCk7CisgICAgU3lzdGVtLm91dC5wcmludGxuKG9iai5nZXRWYWx1ZSgpKTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2dlbmVyaWNzL2NvdmFyaWFuY2Uvc3JjL0Rlcml2ZWQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2dlbmVyaWNzL2NvdmFyaWFuY2Uvc3JjL0Rlcml2ZWQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMjM1OGE4Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZ2VuZXJpY3MvY292YXJpYW5jZS9zcmMvRGVyaXZlZC5qYXZhCkBAIC0wLDAgKzEsNSBAQAorcHVibGljIGNsYXNzIERlcml2ZWQgZXh0ZW5kcyBCYXNlIHsKKyAgcHVibGljIFZhbHVlRGVyaXZlZCBnZXRWYWx1ZSgpIHsKKyAgICByZXR1cm4gbmV3IFZhbHVlRGVyaXZlZCgpOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZ2VuZXJpY3MvY292YXJpYW5jZS9zcmMvVmFsdWUuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2dlbmVyaWNzL2NvdmFyaWFuY2Uvc3JjL1ZhbHVlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmUxNzNlZgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2dlbmVyaWNzL2NvdmFyaWFuY2Uvc3JjL1ZhbHVlLmphdmEKQEAgLTAsMCArMSw1IEBACitwdWJsaWMgY2xhc3MgVmFsdWUgeworICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgeworICAgIHJldHVybiAiVmFsdWUiOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZ2VuZXJpY3MvY292YXJpYW5jZS9zcmMvVmFsdWVEZXJpdmVkLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9nZW5lcmljcy9jb3ZhcmlhbmNlL3NyYy9WYWx1ZURlcml2ZWQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NmQ3N2I1Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZ2VuZXJpY3MvY292YXJpYW5jZS9zcmMvVmFsdWVEZXJpdmVkLmphdmEKQEAgLTAsMCArMSw1IEBACitwdWJsaWMgY2xhc3MgVmFsdWVEZXJpdmVkIGV4dGVuZHMgVmFsdWUgeworICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgeworICAgIHJldHVybiAiVmFsdWVEZXJpdmVkIjsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2dlbmVyaWNzL2NvdmFyaWFuY2UxLmxvZyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2dlbmVyaWNzL2NvdmFyaWFuY2UxLmxvZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOTljZjQxZgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2dlbmVyaWNzL2NvdmFyaWFuY2UxLmxvZwpAQCAtMCwwICsxLDYgQEAKK0NsZWFuaW5nIG91dHB1dCBmaWxlczoKK291dC9wcm9kdWN0aW9uL0NvdmFyaWFuY2UxL0Rlcml2ZWQuY2xhc3MKK0VuZCBvZiBmaWxlcworQ29tcGlsaW5nIGZpbGVzOgorc3JjL0Rlcml2ZWQuamF2YQorRW5kIG9mIGZpbGVzCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9nZW5lcmljcy9jb3ZhcmlhbmNlMS9EZXJpdmVkLmphdmEubmV3IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZ2VuZXJpY3MvY292YXJpYW5jZTEvRGVyaXZlZC5qYXZhLm5ldwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZDk0OTJkCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZ2VuZXJpY3MvY292YXJpYW5jZTEvRGVyaXZlZC5qYXZhLm5ldwpAQCAtMCwwICsxLDIgQEAKK3B1YmxpYyBjbGFzcyBEZXJpdmVkIGV4dGVuZHMgQmFzZSB7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZ2VuZXJpY3MvY292YXJpYW5jZTEvc3JjL0Jhc2UuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2dlbmVyaWNzL2NvdmFyaWFuY2UxL3NyYy9CYXNlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWNmMzA4MgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2dlbmVyaWNzL2NvdmFyaWFuY2UxL3NyYy9CYXNlLmphdmEKQEAgLTAsMCArMSw1IEBACitwdWJsaWMgY2xhc3MgQmFzZSB7CisgIHB1YmxpYyBWYWx1ZSBnZXRWYWx1ZSgpIHsKKyAgICByZXR1cm4gbmV3IFZhbHVlKCk7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9nZW5lcmljcy9jb3ZhcmlhbmNlMS9zcmMvQ2xpZW50LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9nZW5lcmljcy9jb3ZhcmlhbmNlMS9zcmMvQ2xpZW50LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTFiMTQ4NQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2dlbmVyaWNzL2NvdmFyaWFuY2UxL3NyYy9DbGllbnQuamF2YQpAQCAtMCwwICsxLDYgQEAKK3B1YmxpYyBjbGFzcyBDbGllbnQgeworICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisgICAgQmFzZSBvYmogPSBuZXcgRGVyaXZlZCgpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbihvYmouZ2V0VmFsdWUoKSk7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9nZW5lcmljcy9jb3ZhcmlhbmNlMS9zcmMvRGVyaXZlZC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZ2VuZXJpY3MvY292YXJpYW5jZTEvc3JjL0Rlcml2ZWQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMjM1OGE4Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZ2VuZXJpY3MvY292YXJpYW5jZTEvc3JjL0Rlcml2ZWQuamF2YQpAQCAtMCwwICsxLDUgQEAKK3B1YmxpYyBjbGFzcyBEZXJpdmVkIGV4dGVuZHMgQmFzZSB7CisgIHB1YmxpYyBWYWx1ZURlcml2ZWQgZ2V0VmFsdWUoKSB7CisgICAgcmV0dXJuIG5ldyBWYWx1ZURlcml2ZWQoKTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2dlbmVyaWNzL2NvdmFyaWFuY2UxL3NyYy9WYWx1ZS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZ2VuZXJpY3MvY292YXJpYW5jZTEvc3JjL1ZhbHVlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmUxNzNlZgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2dlbmVyaWNzL2NvdmFyaWFuY2UxL3NyYy9WYWx1ZS5qYXZhCkBAIC0wLDAgKzEsNSBAQAorcHVibGljIGNsYXNzIFZhbHVlIHsKKyAgcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKKyAgICByZXR1cm4gIlZhbHVlIjsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2dlbmVyaWNzL2NvdmFyaWFuY2UxL3NyYy9WYWx1ZURlcml2ZWQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2dlbmVyaWNzL2NvdmFyaWFuY2UxL3NyYy9WYWx1ZURlcml2ZWQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NmQ3N2I1Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZ2VuZXJpY3MvY292YXJpYW5jZTEvc3JjL1ZhbHVlRGVyaXZlZC5qYXZhCkBAIC0wLDAgKzEsNSBAQAorcHVibGljIGNsYXNzIFZhbHVlRGVyaXZlZCBleHRlbmRzIFZhbHVlIHsKKyAgcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKKyAgICByZXR1cm4gIlZhbHVlRGVyaXZlZCI7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9nZW5lcmljcy9jb3ZhcmlhbmNlMi5sb2cgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9nZW5lcmljcy9jb3ZhcmlhbmNlMi5sb2cKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzllZTdlYgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2dlbmVyaWNzL2NvdmFyaWFuY2UyLmxvZwpAQCAtMCwwICsxLDEyIEBACitDbGVhbmluZyBvdXRwdXQgZmlsZXM6CitvdXQvcHJvZHVjdGlvbi9Db3ZhcmlhbmNlMi9JZmFjZUltcGwuY2xhc3MKK0VuZCBvZiBmaWxlcworQ29tcGlsaW5nIGZpbGVzOgorc3JjL0lmYWNlSW1wbC5qYXZhCitFbmQgb2YgZmlsZXMKK0NsZWFuaW5nIG91dHB1dCBmaWxlczoKK291dC9wcm9kdWN0aW9uL0NvdmFyaWFuY2UyL0NsaWVudC5jbGFzcworRW5kIG9mIGZpbGVzCitDb21waWxpbmcgZmlsZXM6CitzcmMvQ2xpZW50LmphdmEKK0VuZCBvZiBmaWxlcwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZ2VuZXJpY3MvY292YXJpYW5jZTIvSWZhY2VJbXBsLmphdmEubmV3IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZ2VuZXJpY3MvY292YXJpYW5jZTIvSWZhY2VJbXBsLmphdmEubmV3Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNmOTBjZTkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9nZW5lcmljcy9jb3ZhcmlhbmNlMi9JZmFjZUltcGwuamF2YS5uZXcKQEAgLTAsMCArMSw3IEBACitwdWJsaWMgY2xhc3MgSWZhY2VJbXBsIGltcGxlbWVudHMgSWZhY2UgeworICAKKyAgcHVibGljIElmYWNlIGZvbygpIHsKKyAgICByZXR1cm4gdGhpczsKKyAgfQorCit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZ2VuZXJpY3MvY292YXJpYW5jZTIvc3JjL0NsaWVudC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZ2VuZXJpY3MvY292YXJpYW5jZTIvc3JjL0NsaWVudC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY2ZTRlZjkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9nZW5lcmljcy9jb3ZhcmlhbmNlMi9zcmMvQ2xpZW50LmphdmEKQEAgLTAsMCArMSw1IEBACitwdWJsaWMgY2xhc3MgQ2xpZW50IHsKKyAgdm9pZCBmKElmYWNlSW1wbCBpbXBsKSB7CisgICAgaW1wbCA9IGltcGwuZm9vKCk7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9nZW5lcmljcy9jb3ZhcmlhbmNlMi9zcmMvSWZhY2UuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2dlbmVyaWNzL2NvdmFyaWFuY2UyL3NyYy9JZmFjZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE0Njg2YWQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9nZW5lcmljcy9jb3ZhcmlhbmNlMi9zcmMvSWZhY2UuamF2YQpAQCAtMCwwICsxLDMgQEAKK3B1YmxpYyBpbnRlcmZhY2UgSWZhY2UgeworICBJZmFjZSBmb28oKTsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9nZW5lcmljcy9jb3ZhcmlhbmNlMi9zcmMvSWZhY2VJbXBsLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9nZW5lcmljcy9jb3ZhcmlhbmNlMi9zcmMvSWZhY2VJbXBsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2YwODY1OQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2dlbmVyaWNzL2NvdmFyaWFuY2UyL3NyYy9JZmFjZUltcGwuamF2YQpAQCAtMCwwICsxLDcgQEAKK3B1YmxpYyBjbGFzcyBJZmFjZUltcGwgaW1wbGVtZW50cyBJZmFjZSB7CisgIAorICBwdWJsaWMgSWZhY2VJbXBsIGZvbygpIHsKKyAgICByZXR1cm4gdGhpczsKKyAgfQorCit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZ2VuZXJpY3MvY292YXJpYW5jZU5vQ2hhbmdlcy5sb2cgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9nZW5lcmljcy9jb3ZhcmlhbmNlTm9DaGFuZ2VzLmxvZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMjQyMzk5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZ2VuZXJpY3MvY292YXJpYW5jZU5vQ2hhbmdlcy5sb2cKQEAgLTAsMCArMSw2IEBACitDbGVhbmluZyBvdXRwdXQgZmlsZXM6CitvdXQvcHJvZHVjdGlvbi9Db3ZhcmlhbmNlTm9DaGFuZ2VzL0Rlcml2ZWQuY2xhc3MKK0VuZCBvZiBmaWxlcworQ29tcGlsaW5nIGZpbGVzOgorc3JjL0Rlcml2ZWQuamF2YQorRW5kIG9mIGZpbGVzCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9nZW5lcmljcy9jb3ZhcmlhbmNlTm9DaGFuZ2VzL0Rlcml2ZWQuamF2YS5uZXcgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9nZW5lcmljcy9jb3ZhcmlhbmNlTm9DaGFuZ2VzL0Rlcml2ZWQuamF2YS5uZXcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzQ2MjEyZgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2dlbmVyaWNzL2NvdmFyaWFuY2VOb0NoYW5nZXMvRGVyaXZlZC5qYXZhLm5ldwpAQCAtMCwwICsxLDcgQEAKK3B1YmxpYyBjbGFzcyBEZXJpdmVkIGV4dGVuZHMgQmFzZSB7CisgIGludCBmaWVsZCA9IDEwOworCisgIHB1YmxpYyBWYWx1ZURlcml2ZWQgZ2V0VmFsdWUoKSB7CisgICAgcmV0dXJuIG5ldyBWYWx1ZURlcml2ZWQoKTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2dlbmVyaWNzL2NvdmFyaWFuY2VOb0NoYW5nZXMvc3JjL0Jhc2UuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2dlbmVyaWNzL2NvdmFyaWFuY2VOb0NoYW5nZXMvc3JjL0Jhc2UuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41Y2YzMDgyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZ2VuZXJpY3MvY292YXJpYW5jZU5vQ2hhbmdlcy9zcmMvQmFzZS5qYXZhCkBAIC0wLDAgKzEsNSBAQAorcHVibGljIGNsYXNzIEJhc2UgeworICBwdWJsaWMgVmFsdWUgZ2V0VmFsdWUoKSB7CisgICAgcmV0dXJuIG5ldyBWYWx1ZSgpOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZ2VuZXJpY3MvY292YXJpYW5jZU5vQ2hhbmdlcy9zcmMvQ2xpZW50LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9nZW5lcmljcy9jb3ZhcmlhbmNlTm9DaGFuZ2VzL3NyYy9DbGllbnQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YjRlNWE3Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZ2VuZXJpY3MvY292YXJpYW5jZU5vQ2hhbmdlcy9zcmMvQ2xpZW50LmphdmEKQEAgLTAsMCArMSw2IEBACitwdWJsaWMgY2xhc3MgQ2xpZW50IHsKKyAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworICAgIERlcml2ZWQgb2JqID0gbmV3IERlcml2ZWQoKTsKKyAgICBWYWx1ZSB2ID0gb2JqLmdldFZhbHVlKCk7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9nZW5lcmljcy9jb3ZhcmlhbmNlTm9DaGFuZ2VzL3NyYy9EZXJpdmVkLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9nZW5lcmljcy9jb3ZhcmlhbmNlTm9DaGFuZ2VzL3NyYy9EZXJpdmVkLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjIzNThhOAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2dlbmVyaWNzL2NvdmFyaWFuY2VOb0NoYW5nZXMvc3JjL0Rlcml2ZWQuamF2YQpAQCAtMCwwICsxLDUgQEAKK3B1YmxpYyBjbGFzcyBEZXJpdmVkIGV4dGVuZHMgQmFzZSB7CisgIHB1YmxpYyBWYWx1ZURlcml2ZWQgZ2V0VmFsdWUoKSB7CisgICAgcmV0dXJuIG5ldyBWYWx1ZURlcml2ZWQoKTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2dlbmVyaWNzL2NvdmFyaWFuY2VOb0NoYW5nZXMvc3JjL1ZhbHVlLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9nZW5lcmljcy9jb3ZhcmlhbmNlTm9DaGFuZ2VzL3NyYy9WYWx1ZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJlMTczZWYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9nZW5lcmljcy9jb3ZhcmlhbmNlTm9DaGFuZ2VzL3NyYy9WYWx1ZS5qYXZhCkBAIC0wLDAgKzEsNSBAQAorcHVibGljIGNsYXNzIFZhbHVlIHsKKyAgcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKKyAgICByZXR1cm4gIlZhbHVlIjsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2dlbmVyaWNzL2NvdmFyaWFuY2VOb0NoYW5nZXMvc3JjL1ZhbHVlRGVyaXZlZC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZ2VuZXJpY3MvY292YXJpYW5jZU5vQ2hhbmdlcy9zcmMvVmFsdWVEZXJpdmVkLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTZkNzdiNQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2dlbmVyaWNzL2NvdmFyaWFuY2VOb0NoYW5nZXMvc3JjL1ZhbHVlRGVyaXZlZC5qYXZhCkBAIC0wLDAgKzEsNSBAQAorcHVibGljIGNsYXNzIFZhbHVlRGVyaXZlZCBleHRlbmRzIFZhbHVlIHsKKyAgcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKKyAgICByZXR1cm4gIlZhbHVlRGVyaXZlZCI7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9nZW5lcmljcy9kZWdlbmVyaWZ5LmxvZyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2dlbmVyaWNzL2RlZ2VuZXJpZnkubG9nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAxYzNlYjIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9nZW5lcmljcy9kZWdlbmVyaWZ5LmxvZwpAQCAtMCwwICsxLDEyIEBACitDbGVhbmluZyBvdXRwdXQgZmlsZXM6CitvdXQvcHJvZHVjdGlvbi9EZWdlbmVyaWZ5L0EuY2xhc3MKK0VuZCBvZiBmaWxlcworQ29tcGlsaW5nIGZpbGVzOgorc3JjL0EuamF2YQorRW5kIG9mIGZpbGVzCitDbGVhbmluZyBvdXRwdXQgZmlsZXM6CitvdXQvcHJvZHVjdGlvbi9EZWdlbmVyaWZ5L0NsaWVudC5jbGFzcworRW5kIG9mIGZpbGVzCitDb21waWxpbmcgZmlsZXM6CitzcmMvQ2xpZW50LmphdmEKK0VuZCBvZiBmaWxlcwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZ2VuZXJpY3MvZGVnZW5lcmlmeS9BLmphdmEubmV3IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZ2VuZXJpY3MvZGVnZW5lcmlmeS9BLmphdmEubmV3Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYxZmYyYWIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9nZW5lcmljcy9kZWdlbmVyaWZ5L0EuamF2YS5uZXcKQEAgLTAsMCArMSwyIEBACitwdWJsaWMgY2xhc3MgQSB7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZ2VuZXJpY3MvZGVnZW5lcmlmeS9zcmMvQS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZ2VuZXJpY3MvZGVnZW5lcmlmeS9zcmMvQS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE0YTU3M2UKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9nZW5lcmljcy9kZWdlbmVyaWZ5L3NyYy9BLmphdmEKQEAgLTAsMCArMSwyIEBACitwdWJsaWMgY2xhc3MgQTxUPiB7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZ2VuZXJpY3MvZGVnZW5lcmlmeS9zcmMvQ2xpZW50LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9nZW5lcmljcy9kZWdlbmVyaWZ5L3NyYy9DbGllbnQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMjZmYzY5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZ2VuZXJpY3MvZGVnZW5lcmlmeS9zcmMvQ2xpZW50LmphdmEKQEAgLTAsMCArMSw0IEBACitwdWJsaWMgY2xhc3MgQ2xpZW50PFQ+IHsKKyAgcHVibGljIHZvaWQgZm9vKEE8VD4gYSkgeworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZ2VuZXJpY3MvZGVnZW5lcmlmeTEubG9nIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZ2VuZXJpY3MvZGVnZW5lcmlmeTEubG9nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQyOTc3ZTUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9nZW5lcmljcy9kZWdlbmVyaWZ5MS5sb2cKQEAgLTAsMCArMSwxMiBAQAorQ2xlYW5pbmcgb3V0cHV0IGZpbGVzOgorb3V0L3Byb2R1Y3Rpb24vRGVnZW5lcmlmeTEvQS5jbGFzcworRW5kIG9mIGZpbGVzCitDb21waWxpbmcgZmlsZXM6CitzcmMvQS5qYXZhCitFbmQgb2YgZmlsZXMKK0NsZWFuaW5nIG91dHB1dCBmaWxlczoKK291dC9wcm9kdWN0aW9uL0RlZ2VuZXJpZnkxL0NsaWVudC5jbGFzcworRW5kIG9mIGZpbGVzCitDb21waWxpbmcgZmlsZXM6CitzcmMvQ2xpZW50LmphdmEKK0VuZCBvZiBmaWxlcwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZ2VuZXJpY3MvZGVnZW5lcmlmeTEvQS5qYXZhLm5ldyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2dlbmVyaWNzL2RlZ2VuZXJpZnkxL0EuamF2YS5uZXcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjFmZjJhYgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2dlbmVyaWNzL2RlZ2VuZXJpZnkxL0EuamF2YS5uZXcKQEAgLTAsMCArMSwyIEBACitwdWJsaWMgY2xhc3MgQSB7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZ2VuZXJpY3MvZGVnZW5lcmlmeTEvc3JjL0EuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2dlbmVyaWNzL2RlZ2VuZXJpZnkxL3NyYy9BLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTRhNTczZQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2dlbmVyaWNzL2RlZ2VuZXJpZnkxL3NyYy9BLmphdmEKQEAgLTAsMCArMSwyIEBACitwdWJsaWMgY2xhc3MgQTxUPiB7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZ2VuZXJpY3MvZGVnZW5lcmlmeTEvc3JjL0NsaWVudC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZ2VuZXJpY3MvZGVnZW5lcmlmeTEvc3JjL0NsaWVudC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUzYWY1N2QKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9nZW5lcmljcy9kZWdlbmVyaWZ5MS9zcmMvQ2xpZW50LmphdmEKQEAgLTAsMCArMSw0IEBACitwdWJsaWMgY2xhc3MgQ2xpZW50IHsKKyAgcHVibGljIDxUPiB2b2lkIGZvbyhBPFQ+IGEpIHsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2dlbmVyaWNzL2ZpZWxkVHlwZUNoYW5nZS5sb2cgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9nZW5lcmljcy9maWVsZFR5cGVDaGFuZ2UubG9nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjViZTUyNGEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9nZW5lcmljcy9maWVsZFR5cGVDaGFuZ2UubG9nCkBAIC0wLDAgKzEsMTIgQEAKK0NsZWFuaW5nIG91dHB1dCBmaWxlczoKK291dC9wcm9kdWN0aW9uL0ZpZWxkVHlwZUNoYW5nZS9TZXJ2ZXIuY2xhc3MKK0VuZCBvZiBmaWxlcworQ29tcGlsaW5nIGZpbGVzOgorc3JjL1NlcnZlci5qYXZhCitFbmQgb2YgZmlsZXMKK0NsZWFuaW5nIG91dHB1dCBmaWxlczoKK291dC9wcm9kdWN0aW9uL0ZpZWxkVHlwZUNoYW5nZS9DbGllbnQuY2xhc3MKK0VuZCBvZiBmaWxlcworQ29tcGlsaW5nIGZpbGVzOgorc3JjL0NsaWVudC5qYXZhCitFbmQgb2YgZmlsZXMKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2dlbmVyaWNzL2ZpZWxkVHlwZUNoYW5nZS9TZXJ2ZXIuamF2YS5uZXcgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9nZW5lcmljcy9maWVsZFR5cGVDaGFuZ2UvU2VydmVyLmphdmEubmV3Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg3ZGNjYTYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9nZW5lcmljcy9maWVsZFR5cGVDaGFuZ2UvU2VydmVyLmphdmEubmV3CkBAIC0wLDAgKzEsMyBAQAorcHVibGljIGNsYXNzIFNlcnZlciB7CisgIEdlbmVyaWNUeXBlPEludGVnZXI+IGZpZWxkID0gbmV3IEdlbmVyaWNUeXBlPEludGVnZXI+KCk7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZ2VuZXJpY3MvZmllbGRUeXBlQ2hhbmdlL3NyYy9DbGllbnQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2dlbmVyaWNzL2ZpZWxkVHlwZUNoYW5nZS9zcmMvQ2xpZW50LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTUyM2EyMgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2dlbmVyaWNzL2ZpZWxkVHlwZUNoYW5nZS9zcmMvQ2xpZW50LmphdmEKQEAgLTAsMCArMSw2IEBACitwdWJsaWMgY2xhc3MgQ2xpZW50IHsKKworICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKXsKKyAgICBuZXcgU2VydmVyKCkuZmllbGQuZm9vKCJhYWEiKTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2dlbmVyaWNzL2ZpZWxkVHlwZUNoYW5nZS9zcmMvR2VuZXJpY1R5cGUuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2dlbmVyaWNzL2ZpZWxkVHlwZUNoYW5nZS9zcmMvR2VuZXJpY1R5cGUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNDEyMGU0Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZ2VuZXJpY3MvZmllbGRUeXBlQ2hhbmdlL3NyYy9HZW5lcmljVHlwZS5qYXZhCkBAIC0wLDAgKzEsMyBAQAorcHVibGljIGNsYXNzIEdlbmVyaWNUeXBlPFQ+IHsKKyAgdm9pZCBmb28oVCB0KSB7fQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2dlbmVyaWNzL2ZpZWxkVHlwZUNoYW5nZS9zcmMvU2VydmVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9nZW5lcmljcy9maWVsZFR5cGVDaGFuZ2Uvc3JjL1NlcnZlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY4YWMyZTEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9nZW5lcmljcy9maWVsZFR5cGVDaGFuZ2Uvc3JjL1NlcnZlci5qYXZhCkBAIC0wLDAgKzEsMyBAQAorcHVibGljIGNsYXNzIFNlcnZlciB7CisgIEdlbmVyaWNUeXBlIGZpZWxkID0gbmV3IEdlbmVyaWNUeXBlKCk7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZ2VuZXJpY3Mvb3ZlcnJpZGVBbm5vdGF0ZWRBbm9ueW1vdXMubG9nIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZ2VuZXJpY3Mvb3ZlcnJpZGVBbm5vdGF0ZWRBbm9ueW1vdXMubG9nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQxM2Q0MWEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9nZW5lcmljcy9vdmVycmlkZUFubm90YXRlZEFub255bW91cy5sb2cKQEAgLTAsMCArMSwxMyBAQAorQ2xlYW5pbmcgb3V0cHV0IGZpbGVzOgorb3V0L3Byb2R1Y3Rpb24vT3ZlcnJpZGVBbm5vdGF0ZWRBbm9ueW1vdXMvcGFja2FnZUEvQmFzZS5jbGFzcworRW5kIG9mIGZpbGVzCitDb21waWxpbmcgZmlsZXM6CitzcmMvcGFja2FnZUEvQmFzZS5qYXZhCitFbmQgb2YgZmlsZXMKK0NsZWFuaW5nIG91dHB1dCBmaWxlczoKK291dC9wcm9kdWN0aW9uL092ZXJyaWRlQW5ub3RhdGVkQW5vbnltb3VzL3BhY2thZ2VBL0Rlcml2ZWQkMS5jbGFzcworb3V0L3Byb2R1Y3Rpb24vT3ZlcnJpZGVBbm5vdGF0ZWRBbm9ueW1vdXMvcGFja2FnZUEvRGVyaXZlZC5jbGFzcworRW5kIG9mIGZpbGVzCitDb21waWxpbmcgZmlsZXM6CitzcmMvcGFja2FnZUEvRGVyaXZlZC5qYXZhCitFbmQgb2YgZmlsZXMKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2dlbmVyaWNzL292ZXJyaWRlQW5ub3RhdGVkQW5vbnltb3VzL2RhdGEueG1sIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZ2VuZXJpY3Mvb3ZlcnJpZGVBbm5vdGF0ZWRBbm9ueW1vdXMvZGF0YS54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTRiNWIwMwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2dlbmVyaWNzL292ZXJyaWRlQW5ub3RhdGVkQW5vbnltb3VzL2RhdGEueG1sCkBAIC0wLDAgKzEsMTYgQEAKKzx0ZXN0RGF0YT4KKworICA8ZGVsZXRlPgorICA8L2RlbGV0ZT4KKworICA8ZGVsZXRlZF9ieV9tYWtlPgorICAgIDxmaWxlIHBhdGg9ImNsYXNzZXMvcGFja2FnZUEvQmFzZS5jbGFzcyIgLz4KKyAgICA8ZmlsZSBwYXRoPSJjbGFzc2VzL3BhY2thZ2VBL0Rlcml2ZWQuY2xhc3MiIC8+CisgICAgPGZpbGUgcGF0aD0iY2xhc3Nlcy9wYWNrYWdlQS9EZXJpdmVkJDEuY2xhc3MiIC8+CisgIDwvZGVsZXRlZF9ieV9tYWtlPgorCisgIDxyZWNvbXBpbGU+CisgICAgPGZpbGUgcGF0aD0ic291cmNlL3BhY2thZ2VBL0Rlcml2ZWQuamF2YSIgLz4KKyAgPC9yZWNvbXBpbGU+CisKKzwvdGVzdERhdGE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZ2VuZXJpY3Mvb3ZlcnJpZGVBbm5vdGF0ZWRBbm9ueW1vdXMvc3JjL3BhY2thZ2VBL0Jhc2UuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2dlbmVyaWNzL292ZXJyaWRlQW5ub3RhdGVkQW5vbnltb3VzL3NyYy9wYWNrYWdlQS9CYXNlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjUwYTljYQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2dlbmVyaWNzL292ZXJyaWRlQW5ub3RhdGVkQW5vbnltb3VzL3NyYy9wYWNrYWdlQS9CYXNlLmphdmEKQEAgLTAsMCArMSw3IEBACitwYWNrYWdlIHBhY2thZ2VBOworCitwdWJsaWMgY2xhc3MgQmFzZSB7CisgIHB1YmxpYyB2b2lkIGZvbyhTdHJpbmcuLi4gcGFyYW1zKSB7CisgICAgU3lzdGVtLm91dC5wcmludGxuKHBhcmFtcyk7CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2dlbmVyaWNzL292ZXJyaWRlQW5ub3RhdGVkQW5vbnltb3VzL3NyYy9wYWNrYWdlQS9CYXNlLmphdmEubmV3IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZ2VuZXJpY3Mvb3ZlcnJpZGVBbm5vdGF0ZWRBbm9ueW1vdXMvc3JjL3BhY2thZ2VBL0Jhc2UuamF2YS5uZXcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWI2MWFiMQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2dlbmVyaWNzL292ZXJyaWRlQW5ub3RhdGVkQW5vbnltb3VzL3NyYy9wYWNrYWdlQS9CYXNlLmphdmEubmV3CkBAIC0wLDAgKzEsNyBAQAorcGFja2FnZSBwYWNrYWdlQTsKKworcHVibGljIGNsYXNzIEJhc2UgeworICBwdWJsaWMgdm9pZCBmb28oamF2YS51dGlsLkxpc3Q8U3RyaW5nPiBwYXJhbXMpIHsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4ocGFyYW1zKTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZ2VuZXJpY3Mvb3ZlcnJpZGVBbm5vdGF0ZWRBbm9ueW1vdXMvc3JjL3BhY2thZ2VBL0Rlcml2ZWQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2dlbmVyaWNzL292ZXJyaWRlQW5ub3RhdGVkQW5vbnltb3VzL3NyYy9wYWNrYWdlQS9EZXJpdmVkLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2UwOTZiOAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2dlbmVyaWNzL292ZXJyaWRlQW5ub3RhdGVkQW5vbnltb3VzL3NyYy9wYWNrYWdlQS9EZXJpdmVkLmphdmEKQEAgLTAsMCArMSwxMiBAQAorcGFja2FnZSBwYWNrYWdlQTsKKworcHVibGljIGNsYXNzIERlcml2ZWQgeworICBwdWJsaWMgdm9pZCBiYXIoKSB7CisgICAgQmFzZSBiYXNlID0gbmV3IEJhc2UoKSB7CisgICAgICBAT3ZlcnJpZGUKKyAgICAgIHB1YmxpYyB2b2lkIGZvbyhTdHJpbmcuLi4gcGFyYW1zKSB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRGVyaXZlZCAiICsgcGFyYW1zLnRvU3RyaW5nKCkpOworICAgICAgfQorICAgIH07CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2dlbmVyaWNzL292ZXJyaWRlQW5ub3RhdGVkQW5vbnltb3VzTm90UmVjb21waWxlLmxvZyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2dlbmVyaWNzL292ZXJyaWRlQW5ub3RhdGVkQW5vbnltb3VzTm90UmVjb21waWxlLmxvZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zM2JhZGNjCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZ2VuZXJpY3Mvb3ZlcnJpZGVBbm5vdGF0ZWRBbm9ueW1vdXNOb3RSZWNvbXBpbGUubG9nCkBAIC0wLDAgKzEsMTMgQEAKK0NsZWFuaW5nIG91dHB1dCBmaWxlczoKK291dC9wcm9kdWN0aW9uL092ZXJyaWRlQW5ub3RhdGVkQW5vbnltb3VzTm90UmVjb21waWxlL3BhY2thZ2VBL0Jhc2UuY2xhc3MKK0VuZCBvZiBmaWxlcworQ29tcGlsaW5nIGZpbGVzOgorc3JjL3BhY2thZ2VBL0Jhc2UuamF2YQorRW5kIG9mIGZpbGVzCitDbGVhbmluZyBvdXRwdXQgZmlsZXM6CitvdXQvcHJvZHVjdGlvbi9PdmVycmlkZUFubm90YXRlZEFub255bW91c05vdFJlY29tcGlsZS9wYWNrYWdlQS9EZXJpdmVkJDEuY2xhc3MKK291dC9wcm9kdWN0aW9uL092ZXJyaWRlQW5ub3RhdGVkQW5vbnltb3VzTm90UmVjb21waWxlL3BhY2thZ2VBL0Rlcml2ZWQuY2xhc3MKK0VuZCBvZiBmaWxlcworQ29tcGlsaW5nIGZpbGVzOgorc3JjL3BhY2thZ2VBL0Rlcml2ZWQuamF2YQorRW5kIG9mIGZpbGVzCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9nZW5lcmljcy9vdmVycmlkZUFubm90YXRlZEFub255bW91c05vdFJlY29tcGlsZS9zcmMvcGFja2FnZUEvQmFzZS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZ2VuZXJpY3Mvb3ZlcnJpZGVBbm5vdGF0ZWRBbm9ueW1vdXNOb3RSZWNvbXBpbGUvc3JjL3BhY2thZ2VBL0Jhc2UuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNTBhOWNhCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZ2VuZXJpY3Mvb3ZlcnJpZGVBbm5vdGF0ZWRBbm9ueW1vdXNOb3RSZWNvbXBpbGUvc3JjL3BhY2thZ2VBL0Jhc2UuamF2YQpAQCAtMCwwICsxLDcgQEAKK3BhY2thZ2UgcGFja2FnZUE7CisKK3B1YmxpYyBjbGFzcyBCYXNlIHsKKyAgcHVibGljIHZvaWQgZm9vKFN0cmluZy4uLiBwYXJhbXMpIHsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4ocGFyYW1zKTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZ2VuZXJpY3Mvb3ZlcnJpZGVBbm5vdGF0ZWRBbm9ueW1vdXNOb3RSZWNvbXBpbGUvc3JjL3BhY2thZ2VBL0Jhc2UuamF2YS5uZXcgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9nZW5lcmljcy9vdmVycmlkZUFubm90YXRlZEFub255bW91c05vdFJlY29tcGlsZS9zcmMvcGFja2FnZUEvQmFzZS5qYXZhLm5ldwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YjYxYWIxCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZ2VuZXJpY3Mvb3ZlcnJpZGVBbm5vdGF0ZWRBbm9ueW1vdXNOb3RSZWNvbXBpbGUvc3JjL3BhY2thZ2VBL0Jhc2UuamF2YS5uZXcKQEAgLTAsMCArMSw3IEBACitwYWNrYWdlIHBhY2thZ2VBOworCitwdWJsaWMgY2xhc3MgQmFzZSB7CisgIHB1YmxpYyB2b2lkIGZvbyhqYXZhLnV0aWwuTGlzdDxTdHJpbmc+IHBhcmFtcykgeworICAgIFN5c3RlbS5vdXQucHJpbnRsbihwYXJhbXMpOworICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9nZW5lcmljcy9vdmVycmlkZUFubm90YXRlZEFub255bW91c05vdFJlY29tcGlsZS9zcmMvcGFja2FnZUEvRGVyaXZlZC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZ2VuZXJpY3Mvb3ZlcnJpZGVBbm5vdGF0ZWRBbm9ueW1vdXNOb3RSZWNvbXBpbGUvc3JjL3BhY2thZ2VBL0Rlcml2ZWQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMjRlOWZhCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZ2VuZXJpY3Mvb3ZlcnJpZGVBbm5vdGF0ZWRBbm9ueW1vdXNOb3RSZWNvbXBpbGUvc3JjL3BhY2thZ2VBL0Rlcml2ZWQuamF2YQpAQCAtMCwwICsxLDE2IEBACitwYWNrYWdlIHBhY2thZ2VBOworCitwdWJsaWMgY2xhc3MgRGVyaXZlZCBleHRlbmRzIEJhc2UgeworCisgIHB1YmxpYyB2b2lkIGJhcigpIHsKKyAgICBSdW5uYWJsZSBiYXNlID0gbmV3IFJ1bm5hYmxlQWRhcHRlcigpIHsKKyAgICAgIEBPdmVycmlkZQorICAgICAgcHVibGljIHZvaWQgcnVuKCkgeworICAgICAgfQorICAgIH07CisgIH0KKyAgCisvLyAgcHVibGljIHZvaWQgZm9vKFN0cmluZy4uLiBwYXJhbXMpIHsKKy8vICAgU3lzdGVtLm91dC5wcmludGxuKCJEZXJpdmVkICIgKyBwYXJhbXMudG9TdHJpbmcoKSk7CisvLyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZ2VuZXJpY3Mvb3ZlcnJpZGVBbm5vdGF0ZWRBbm9ueW1vdXNOb3RSZWNvbXBpbGUvc3JjL3BhY2thZ2VBL1J1bm5hYmxlQWRhcHRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZ2VuZXJpY3Mvb3ZlcnJpZGVBbm5vdGF0ZWRBbm9ueW1vdXNOb3RSZWNvbXBpbGUvc3JjL3BhY2thZ2VBL1J1bm5hYmxlQWRhcHRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIyNWFlYjQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9nZW5lcmljcy9vdmVycmlkZUFubm90YXRlZEFub255bW91c05vdFJlY29tcGlsZS9zcmMvcGFja2FnZUEvUnVubmFibGVBZGFwdGVyLmphdmEKQEAgLTAsMCArMSw2IEBACitwYWNrYWdlIHBhY2thZ2VBOworCitwdWJsaWMgY2xhc3MgUnVubmFibGVBZGFwdGVyIGltcGxlbWVudHMgUnVubmFibGUgeworICBwdWJsaWMgdm9pZCBydW4oKSB7CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2dlbmVyaWNzL292ZXJyaWRlQW5ub3RhdGVkSW5uZXIubG9nIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZ2VuZXJpY3Mvb3ZlcnJpZGVBbm5vdGF0ZWRJbm5lci5sb2cKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDkyOWVkMQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2dlbmVyaWNzL292ZXJyaWRlQW5ub3RhdGVkSW5uZXIubG9nCkBAIC0wLDAgKzEsMTMgQEAKK0NsZWFuaW5nIG91dHB1dCBmaWxlczoKK291dC9wcm9kdWN0aW9uL092ZXJyaWRlQW5ub3RhdGVkSW5uZXIvcGFja2FnZUEvQmFzZS5jbGFzcworRW5kIG9mIGZpbGVzCitDb21waWxpbmcgZmlsZXM6CitzcmMvcGFja2FnZUEvQmFzZS5qYXZhCitFbmQgb2YgZmlsZXMKK0NsZWFuaW5nIG91dHB1dCBmaWxlczoKK291dC9wcm9kdWN0aW9uL092ZXJyaWRlQW5ub3RhdGVkSW5uZXIvcGFja2FnZUEvRGVyaXZlZCRJbm5lci5jbGFzcworb3V0L3Byb2R1Y3Rpb24vT3ZlcnJpZGVBbm5vdGF0ZWRJbm5lci9wYWNrYWdlQS9EZXJpdmVkLmNsYXNzCitFbmQgb2YgZmlsZXMKK0NvbXBpbGluZyBmaWxlczoKK3NyYy9wYWNrYWdlQS9EZXJpdmVkLmphdmEKK0VuZCBvZiBmaWxlcwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZ2VuZXJpY3Mvb3ZlcnJpZGVBbm5vdGF0ZWRJbm5lci9kYXRhLnhtbCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2dlbmVyaWNzL292ZXJyaWRlQW5ub3RhdGVkSW5uZXIvZGF0YS54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmRlYTEyNgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2dlbmVyaWNzL292ZXJyaWRlQW5ub3RhdGVkSW5uZXIvZGF0YS54bWwKQEAgLTAsMCArMSwxNiBAQAorPHRlc3REYXRhPgorCisgIDxkZWxldGU+CisgIDwvZGVsZXRlPgorCisgIDxkZWxldGVkX2J5X21ha2U+CisgICAgPGZpbGUgcGF0aD0iY2xhc3Nlcy9wYWNrYWdlQS9CYXNlLmNsYXNzIiAvPgorICAgIDxmaWxlIHBhdGg9ImNsYXNzZXMvcGFja2FnZUEvRGVyaXZlZC5jbGFzcyIgLz4KKyAgICA8ZmlsZSBwYXRoPSJjbGFzc2VzL3BhY2thZ2VBL0Rlcml2ZWQkSW5uZXIuY2xhc3MiIC8+CisgIDwvZGVsZXRlZF9ieV9tYWtlPgorCisgIDxyZWNvbXBpbGU+CisgICAgPGZpbGUgcGF0aD0ic291cmNlL3BhY2thZ2VBL0Rlcml2ZWQuamF2YSIgLz4KKyAgPC9yZWNvbXBpbGU+CisKKzwvdGVzdERhdGE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZ2VuZXJpY3Mvb3ZlcnJpZGVBbm5vdGF0ZWRJbm5lci9zcmMvcGFja2FnZUEvQmFzZS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZ2VuZXJpY3Mvb3ZlcnJpZGVBbm5vdGF0ZWRJbm5lci9zcmMvcGFja2FnZUEvQmFzZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI1MGE5Y2EKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9nZW5lcmljcy9vdmVycmlkZUFubm90YXRlZElubmVyL3NyYy9wYWNrYWdlQS9CYXNlLmphdmEKQEAgLTAsMCArMSw3IEBACitwYWNrYWdlIHBhY2thZ2VBOworCitwdWJsaWMgY2xhc3MgQmFzZSB7CisgIHB1YmxpYyB2b2lkIGZvbyhTdHJpbmcuLi4gcGFyYW1zKSB7CisgICAgU3lzdGVtLm91dC5wcmludGxuKHBhcmFtcyk7CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2dlbmVyaWNzL292ZXJyaWRlQW5ub3RhdGVkSW5uZXIvc3JjL3BhY2thZ2VBL0Jhc2UuamF2YS5uZXcgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9nZW5lcmljcy9vdmVycmlkZUFubm90YXRlZElubmVyL3NyYy9wYWNrYWdlQS9CYXNlLmphdmEubmV3Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjViNjFhYjEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9nZW5lcmljcy9vdmVycmlkZUFubm90YXRlZElubmVyL3NyYy9wYWNrYWdlQS9CYXNlLmphdmEubmV3CkBAIC0wLDAgKzEsNyBAQAorcGFja2FnZSBwYWNrYWdlQTsKKworcHVibGljIGNsYXNzIEJhc2UgeworICBwdWJsaWMgdm9pZCBmb28oamF2YS51dGlsLkxpc3Q8U3RyaW5nPiBwYXJhbXMpIHsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4ocGFyYW1zKTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZ2VuZXJpY3Mvb3ZlcnJpZGVBbm5vdGF0ZWRJbm5lci9zcmMvcGFja2FnZUEvRGVyaXZlZC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZ2VuZXJpY3Mvb3ZlcnJpZGVBbm5vdGF0ZWRJbm5lci9zcmMvcGFja2FnZUEvRGVyaXZlZC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI1ZDMzYTAKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9nZW5lcmljcy9vdmVycmlkZUFubm90YXRlZElubmVyL3NyYy9wYWNrYWdlQS9EZXJpdmVkLmphdmEKQEAgLTAsMCArMSwxMCBAQAorcGFja2FnZSBwYWNrYWdlQTsKKworcHVibGljIGNsYXNzIERlcml2ZWQgeworICBjbGFzcyBJbm5lciBleHRlbmRzIEJhc2UgeworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyB2b2lkIGZvbyhTdHJpbmcuLi4gcGFyYW1zKSB7CisgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkRlcml2ZWQgIiArIHBhcmFtcy50b1N0cmluZygpKTsKKyAgICB9CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2dlbmVyaWNzL3BhcmFtVHlwZXMubG9nIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZ2VuZXJpY3MvcGFyYW1UeXBlcy5sb2cKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjdlOGNkNwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2dlbmVyaWNzL3BhcmFtVHlwZXMubG9nCkBAIC0wLDAgKzEsMTIgQEAKK0NsZWFuaW5nIG91dHB1dCBmaWxlczoKK291dC9wcm9kdWN0aW9uL1BhcmFtVHlwZXMvU2VydmVyLmNsYXNzCitFbmQgb2YgZmlsZXMKK0NvbXBpbGluZyBmaWxlczoKK3NyYy9TZXJ2ZXIuamF2YQorRW5kIG9mIGZpbGVzCitDbGVhbmluZyBvdXRwdXQgZmlsZXM6CitvdXQvcHJvZHVjdGlvbi9QYXJhbVR5cGVzL0NsaWVudC5jbGFzcworRW5kIG9mIGZpbGVzCitDb21waWxpbmcgZmlsZXM6CitzcmMvQ2xpZW50LmphdmEKK0VuZCBvZiBmaWxlcwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZ2VuZXJpY3MvcGFyYW1UeXBlcy9TZXJ2ZXIuamF2YS5uZXcgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9nZW5lcmljcy9wYXJhbVR5cGVzL1NlcnZlci5qYXZhLm5ldwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hODg0ODRjCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZ2VuZXJpY3MvcGFyYW1UeXBlcy9TZXJ2ZXIuamF2YS5uZXcKQEAgLTAsMCArMSw2IEBACitpbXBvcnQgamF2YS51dGlsLlNldDsKKworcHVibGljIGNsYXNzIFNlcnZlciB7CisgICAgcHVibGljIHZvaWQgZm9vKFNldDxEYXRhQmFzZT4gY29sbGVjdGlvbikgeworICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2dlbmVyaWNzL3BhcmFtVHlwZXMvc3JjL0NsaWVudC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZ2VuZXJpY3MvcGFyYW1UeXBlcy9zcmMvQ2xpZW50LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2YzOTAxYQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2dlbmVyaWNzL3BhcmFtVHlwZXMvc3JjL0NsaWVudC5qYXZhCkBAIC0wLDAgKzEsOSBAQAoraW1wb3J0IGphdmEudXRpbC5TZXQ7CisKK3B1YmxpYyBjbGFzcyBDbGllbnQgeworICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKyAgICAgICAgZmluYWwgU2VydmVyIHNlcnZlciA9IG5ldyBTZXJ2ZXIoKTsKKyAgICAgICAgZmluYWwgU2V0PERhdGFEZXJpdmVkPiBzZXQgPSBudWxsOworICAgICAgICBzZXJ2ZXIuZm9vKHNldCk7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZ2VuZXJpY3MvcGFyYW1UeXBlcy9zcmMvRGF0YUJhc2UuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2dlbmVyaWNzL3BhcmFtVHlwZXMvc3JjL0RhdGFCYXNlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2Y1NDQ3NQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2dlbmVyaWNzL3BhcmFtVHlwZXMvc3JjL0RhdGFCYXNlLmphdmEKQEAgLTAsMCArMSwyIEBACitwdWJsaWMgY2xhc3MgRGF0YUJhc2UgeworfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZ2VuZXJpY3MvcGFyYW1UeXBlcy9zcmMvRGF0YURlcml2ZWQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2dlbmVyaWNzL3BhcmFtVHlwZXMvc3JjL0RhdGFEZXJpdmVkLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWRhOWM2NDMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9nZW5lcmljcy9wYXJhbVR5cGVzL3NyYy9EYXRhRGVyaXZlZC5qYXZhCkBAIC0wLDAgKzEsMiBAQAorcHVibGljIGNsYXNzIERhdGFEZXJpdmVkIGV4dGVuZHMgRGF0YUJhc2V7Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9nZW5lcmljcy9wYXJhbVR5cGVzL3NyYy9TZXJ2ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2dlbmVyaWNzL3BhcmFtVHlwZXMvc3JjL1NlcnZlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI5Y2FhZWIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9nZW5lcmljcy9wYXJhbVR5cGVzL3NyYy9TZXJ2ZXIuamF2YQpAQCAtMCwwICsxLDYgQEAKK2ltcG9ydCBqYXZhLnV0aWwuU2V0OworCitwdWJsaWMgY2xhc3MgU2VydmVyIHsKKyAgICBwdWJsaWMgdm9pZCBmb28oU2V0PERhdGFEZXJpdmVkPiBjb2xsZWN0aW9uKSB7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZ2VuZXJpY3MvcmV0dXJuVHlwZS5sb2cgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9nZW5lcmljcy9yZXR1cm5UeXBlLmxvZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YTM4MzJhCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvZ2VuZXJpY3MvcmV0dXJuVHlwZS5sb2cKQEAgLTAsMCArMSwxMiBAQAorQ2xlYW5pbmcgb3V0cHV0IGZpbGVzOgorb3V0L3Byb2R1Y3Rpb24vUmV0dXJuVHlwZS9TZXJ2ZXIuY2xhc3MKK0VuZCBvZiBmaWxlcworQ29tcGlsaW5nIGZpbGVzOgorc3JjL1NlcnZlci5qYXZhCitFbmQgb2YgZmlsZXMKK0NsZWFuaW5nIG91dHB1dCBmaWxlczoKK291dC9wcm9kdWN0aW9uL1JldHVyblR5cGUvQ2xpZW50LmNsYXNzCitFbmQgb2YgZmlsZXMKK0NvbXBpbGluZyBmaWxlczoKK3NyYy9DbGllbnQuamF2YQorRW5kIG9mIGZpbGVzCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9nZW5lcmljcy9yZXR1cm5UeXBlL1NlcnZlci5qYXZhLm5ldyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2dlbmVyaWNzL3JldHVyblR5cGUvU2VydmVyLmphdmEubmV3Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMyNzA4ZGUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9nZW5lcmljcy9yZXR1cm5UeXBlL1NlcnZlci5qYXZhLm5ldwpAQCAtMCwwICsxLDUgQEAKK3B1YmxpYyBjbGFzcyBTZXJ2ZXIgeworICBwdWJsaWMgR2VuZXJpY1R5cGU8U3RyaW5nPiBmb28oKSB7CisgICAgcmV0dXJuIG51bGw7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9nZW5lcmljcy9yZXR1cm5UeXBlL3NyYy9DbGllbnQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2dlbmVyaWNzL3JldHVyblR5cGUvc3JjL0NsaWVudC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQzZTFiNmYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9nZW5lcmljcy9yZXR1cm5UeXBlL3NyYy9DbGllbnQuamF2YQpAQCAtMCwwICsxLDEwIEBACitwdWJsaWMgY2xhc3MgQ2xpZW50IHsKKyAgcHVibGljIHZvaWQgYmFyKCkgeworICAgIEdlbmVyaWNUeXBlPEludGVnZXI+IGxpc3QgPSBuZXcgU2VydmVyKCkuZm9vKCk7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJsaXN0ID0gIiArIGxpc3QpOzsKKyAgfQorCisgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpeworICAgIG5ldyBDbGllbnQoKS5iYXIoKTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2dlbmVyaWNzL3JldHVyblR5cGUvc3JjL0dlbmVyaWNUeXBlLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9nZW5lcmljcy9yZXR1cm5UeXBlL3NyYy9HZW5lcmljVHlwZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZhNjAyYzIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9nZW5lcmljcy9yZXR1cm5UeXBlL3NyYy9HZW5lcmljVHlwZS5qYXZhCkBAIC0wLDAgKzEsMiBAQAorcHVibGljIGNsYXNzIEdlbmVyaWNUeXBlPFQ+IHsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9nZW5lcmljcy9yZXR1cm5UeXBlL3NyYy9TZXJ2ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2dlbmVyaWNzL3JldHVyblR5cGUvc3JjL1NlcnZlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEzZDM3ODAKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9nZW5lcmljcy9yZXR1cm5UeXBlL3NyYy9TZXJ2ZXIuamF2YQpAQCAtMCwwICsxLDUgQEAKK3B1YmxpYyBjbGFzcyBTZXJ2ZXIgeworICBwdWJsaWMgR2VuZXJpY1R5cGU8SW50ZWdlcj4gZm9vKCkgeworICAgIHJldHVybiBudWxsOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvaW1wb3J0cy9jbGFzc0ltcG9ydC5sb2cgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9pbXBvcnRzL2NsYXNzSW1wb3J0LmxvZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZjQ4ZmUzCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvaW1wb3J0cy9jbGFzc0ltcG9ydC5sb2cKQEAgLTAsMCArMSw5IEBACitDbGVhbmluZyBvdXRwdXQgZmlsZXM6CitvdXQvcHJvZHVjdGlvbi9DbGFzc0ltcG9ydC9wYWNrYWdlQS9BLmNsYXNzCitFbmQgb2YgZmlsZXMKK0NsZWFuaW5nIG91dHB1dCBmaWxlczoKK291dC9wcm9kdWN0aW9uL0NsYXNzSW1wb3J0L0IuY2xhc3MKK0VuZCBvZiBmaWxlcworQ29tcGlsaW5nIGZpbGVzOgorc3JjL0IuamF2YQorRW5kIG9mIGZpbGVzCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9pbXBvcnRzL2NsYXNzSW1wb3J0L3NyYy9CLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9pbXBvcnRzL2NsYXNzSW1wb3J0L3NyYy9CLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjZlMGJjMQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2ltcG9ydHMvY2xhc3NJbXBvcnQvc3JjL0IuamF2YQpAQCAtMCwwICsxLDUgQEAKK2ltcG9ydCBwYWNrYWdlQS5BOworCitjbGFzcyBCIHsKKworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2ltcG9ydHMvY2xhc3NJbXBvcnQvc3JjL3BhY2thZ2VBL0EuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2ltcG9ydHMvY2xhc3NJbXBvcnQvc3JjL3BhY2thZ2VBL0EuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MmIwMTk4Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvaW1wb3J0cy9jbGFzc0ltcG9ydC9zcmMvcGFja2FnZUEvQS5qYXZhCkBAIC0wLDAgKzEsNSBAQAorcGFja2FnZSBwYWNrYWdlQTsKKworcHVibGljIGNsYXNzIEEgeworCit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvaW1wb3J0cy9jbGFzc0ltcG9ydC9zcmMvcGFja2FnZUEvQS5qYXZhLnJlbW92ZSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2ltcG9ydHMvY2xhc3NJbXBvcnQvc3JjL3BhY2thZ2VBL0EuamF2YS5yZW1vdmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjk5NWE0ZAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2ltcG9ydHMvY2xhc3NJbXBvcnQvc3JjL3BhY2thZ2VBL0EuamF2YS5yZW1vdmUKQEAgLTAsMCArMSBAQAorZHVtbXkKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9pbXBvcnRzL3N0YXRpY0ltcG9ydC5sb2cgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9pbXBvcnRzL3N0YXRpY0ltcG9ydC5sb2cKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDI5MTViZgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2ltcG9ydHMvc3RhdGljSW1wb3J0LmxvZwpAQCAtMCwwICsxLDkgQEAKK0NsZWFuaW5nIG91dHB1dCBmaWxlczoKK291dC9wcm9kdWN0aW9uL1N0YXRpY0ltcG9ydC9wYWNrYWdlQS9BLmNsYXNzCitFbmQgb2YgZmlsZXMKK0NsZWFuaW5nIG91dHB1dCBmaWxlczoKK291dC9wcm9kdWN0aW9uL1N0YXRpY0ltcG9ydC9CLmNsYXNzCitFbmQgb2YgZmlsZXMKK0NvbXBpbGluZyBmaWxlczoKK3NyYy9CLmphdmEKK0VuZCBvZiBmaWxlcwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvaW1wb3J0cy9zdGF0aWNJbXBvcnQvc3JjL0IuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2ltcG9ydHMvc3RhdGljSW1wb3J0L3NyYy9CLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTRiZDZlNwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2ltcG9ydHMvc3RhdGljSW1wb3J0L3NyYy9CLmphdmEKQEAgLTAsMCArMSw1IEBACitpbXBvcnQgc3RhdGljIHBhY2thZ2VBLkEuUDsKKworY2xhc3MgQiB7CisKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9pbXBvcnRzL3N0YXRpY0ltcG9ydC9zcmMvcGFja2FnZUEvQS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvaW1wb3J0cy9zdGF0aWNJbXBvcnQvc3JjL3BhY2thZ2VBL0EuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MWM1NWQ5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvaW1wb3J0cy9zdGF0aWNJbXBvcnQvc3JjL3BhY2thZ2VBL0EuamF2YQpAQCAtMCwwICsxLDUgQEAKK3BhY2thZ2UgcGFja2FnZUE7CisKK3B1YmxpYyBjbGFzcyBBIHsKKyAgcHVibGljIHN0YXRpYyBpbnQgUDsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9pbXBvcnRzL3N0YXRpY0ltcG9ydC9zcmMvcGFja2FnZUEvQS5qYXZhLnJlbW92ZSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2ltcG9ydHMvc3RhdGljSW1wb3J0L3NyYy9wYWNrYWdlQS9BLmphdmEucmVtb3ZlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI5OTVhNGQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9pbXBvcnRzL3N0YXRpY0ltcG9ydC9zcmMvcGFja2FnZUEvQS5qYXZhLnJlbW92ZQpAQCAtMCwwICsxIEBACitkdW1teQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2phc3BlclZhbGlkYXRpb24vamF2YURlcGVuZGVudC9XRUItSU5GL3dlYi54bWwgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9qYXNwZXJWYWxpZGF0aW9uL2phdmFEZXBlbmRlbnQvV0VCLUlORi93ZWIueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNhZmM5OTYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9qYXNwZXJWYWxpZGF0aW9uL2phdmFEZXBlbmRlbnQvV0VCLUlORi93ZWIueG1sCkBAIC0wLDAgKzEsNSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKworPCFET0NUWVBFIHdlYi1hcHAgUFVCTElDICItLy9TdW4gTWljcm9zeXN0ZW1zLCBJbmMuLy9EVEQgV2ViIEFwcGxpY2F0aW9uIDIuMy8vRU4iICJodHRwOi8vamF2YS5zdW4uY29tL2R0ZC93ZWItYXBwXzJfMy5kdGQiPgorPHdlYi1hcHA+Cis8L3dlYi1hcHA+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvamFzcGVyVmFsaWRhdGlvbi9qYXZhRGVwZW5kZW50L2RhdGEueG1sIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvamFzcGVyVmFsaWRhdGlvbi9qYXZhRGVwZW5kZW50L2RhdGEueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcyNTNlN2IKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9qYXNwZXJWYWxpZGF0aW9uL2phdmFEZXBlbmRlbnQvZGF0YS54bWwKQEAgLTAsMCArMSwxMiBAQAorPHRlc3REYXRhPgorICA8ZGVsZXRlPgorICA8L2RlbGV0ZT4KKworICA8ZGVsZXRlZF9ieV9tYWtlPgorICAgIDxmaWxlIHBhdGg9ImNsYXNzZXMveC9TLmNsYXNzIiAvPgorICA8L2RlbGV0ZWRfYnlfbWFrZT4KKworICA8cmVjb21waWxlPgorICAgIDxmaWxlIHBhdGg9InJvb3QvYS5qc3AiIC8+CisgIDwvcmVjb21waWxlPgorPC90ZXN0RGF0YT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9qYXNwZXJWYWxpZGF0aW9uL2phdmFEZXBlbmRlbnQvZXhwbG9kZWQvV0VCLUlORi9jbGFzc2VzL2EuY2xhc3MgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9qYXNwZXJWYWxpZGF0aW9uL2phdmFEZXBlbmRlbnQvZXhwbG9kZWQvV0VCLUlORi9jbGFzc2VzL2EuY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGVkMjVkMwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2phc3BlclZhbGlkYXRpb24vamF2YURlcGVuZGVudC9leHBsb2RlZC9XRUItSU5GL2NsYXNzZXMvYS5jbGFzcwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9qYXNwZXJWYWxpZGF0aW9uL2phdmFEZXBlbmRlbnQvZXhwbG9kZWQvV0VCLUlORi9saWIveHh4LmphciBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2phc3BlclZhbGlkYXRpb24vamF2YURlcGVuZGVudC9leHBsb2RlZC9XRUItSU5GL2xpYi94eHguamFyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRmYzM2NjkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9qYXNwZXJWYWxpZGF0aW9uL2phdmFEZXBlbmRlbnQvZXhwbG9kZWQvV0VCLUlORi9saWIveHh4LmphcgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9qYXNwZXJWYWxpZGF0aW9uL2phdmFEZXBlbmRlbnQvZXhwbG9kZWQvV0VCLUlORi93ZWIueG1sIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvamFzcGVyVmFsaWRhdGlvbi9qYXZhRGVwZW5kZW50L2V4cGxvZGVkL1dFQi1JTkYvd2ViLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYWZjOTk2Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvamFzcGVyVmFsaWRhdGlvbi9qYXZhRGVwZW5kZW50L2V4cGxvZGVkL1dFQi1JTkYvd2ViLnhtbApAQCAtMCwwICsxLDUgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+CisKKzwhRE9DVFlQRSB3ZWItYXBwIFBVQkxJQyAiLS8vU3VuIE1pY3Jvc3lzdGVtcywgSW5jLi8vRFREIFdlYiBBcHBsaWNhdGlvbiAyLjMvL0VOIiAiaHR0cDovL2phdmEuc3VuLmNvbS9kdGQvd2ViLWFwcF8yXzMuZHRkIj4KKzx3ZWItYXBwPgorPC93ZWItYXBwPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2phc3BlclZhbGlkYXRpb24vamF2YURlcGVuZGVudC9leHBsb2RlZC9hLmpzcCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2phc3BlclZhbGlkYXRpb24vamF2YURlcGVuZGVudC9leHBsb2RlZC9hLmpzcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZWFiMDY3Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvamFzcGVyVmFsaWRhdGlvbi9qYXZhRGVwZW5kZW50L2V4cGxvZGVkL2EuanNwCkBAIC0wLDAgKzEsMTQgQEAKKzwlLS0KKyAgQ3JlYXRlZCBieSBJbnRlbGxpSiBJREVBLgorICBVc2VyOiBjZHIKKyAgRGF0ZTogU2VwIDE3LCAyMDA0CisgIFRpbWU6IDI6NTM6NTggUE0KKyAgVG8gY2hhbmdlIHRoaXMgdGVtcGxhdGUgdXNlIEZpbGUgfCBTZXR0aW5ncyB8IEZpbGUgVGVtcGxhdGVzLgorLS0lPgorPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDtjaGFyc2V0PVVURi04IiBsYW5ndWFnZT0iamF2YSIgJT4KKzwlQGluY2x1ZGUgZmlsZT0iZGVwLmpzcCIgJT4KKzwlQGluY2x1ZGUgZmlsZT0iZGVwMi5qc3AiICU+Cis8aHRtbD4KKyAgPGhlYWQ+PHRpdGxlPlNpbXBsZSBqc3AgcGFnZTwvdGl0bGU+PC9oZWFkPgorICA8Ym9keT5QbGFjZSB5b3VyIGNvbnRlbnQgaGVyZTwvYm9keT4KKzwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9qYXNwZXJWYWxpZGF0aW9uL2phdmFEZXBlbmRlbnQvbGliL3h4eC5qYXIgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9qYXNwZXJWYWxpZGF0aW9uL2phdmFEZXBlbmRlbnQvbGliL3h4eC5qYXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGZjMzY2OQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2phc3BlclZhbGlkYXRpb24vamF2YURlcGVuZGVudC9saWIveHh4LmphcgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9qYXNwZXJWYWxpZGF0aW9uL2phdmFEZXBlbmRlbnQvbW9kdWxlLmltbCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2phc3BlclZhbGlkYXRpb24vamF2YURlcGVuZGVudC9tb2R1bGUuaW1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYwMWY1MjgKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9qYXNwZXJWYWxpZGF0aW9uL2phdmFEZXBlbmRlbnQvbW9kdWxlLmltbApAQCAtMCwwICsxLDM2IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPG1vZHVsZSB2ZXJzaW9uPSI0IiByZWxhdGl2ZVBhdGhzPSJ0cnVlIiB0eXBlPSJKQVZBX01PRFVMRSI+CisgIDxjb21wb25lbnQgbmFtZT0iTW9kdWxlUm9vdE1hbmFnZXIiIC8+CisgIDxjb21wb25lbnQgbmFtZT0iTmV3TW9kdWxlUm9vdE1hbmFnZXIiPgorICAgIDxvdXRwdXQgdXJsPSJmaWxlOi8vJE1PRFVMRV9ESVIkL2NsYXNzZXMiIC8+CisgICAgPGV4Y2x1ZGUtb3V0cHV0IC8+CisgICAgPGV4cGxvZGVkIHVybD0iZmlsZTovLyRNT0RVTEVfRElSJC9leHBsb2RlZCIgLz4KKyAgICA8ZXhjbHVkZS1leHBsb2RlZCAvPgorICAgIDxjb250ZW50IHVybD0iZmlsZTovLyRNT0RVTEVfRElSJCIgLz4KKyAgICA8b3JkZXJFbnRyeSB0eXBlPSJpbmhlcml0ZWRKZGsiIC8+CisgICAgPG9yZGVyRW50cnkgdHlwZT0ic291cmNlRm9sZGVyIiBmb3JUZXN0cz0iZmFsc2UiIC8+CisgICAgPG9yZGVyRW50cnkgdHlwZT0ibW9kdWxlLWxpYnJhcnkiPgorICAgICAgPGxpYnJhcnk+CisgICAgICAgIDxDTEFTU0VTPgorICAgICAgICAgIDxyb290IHVybD0iamFyOi8vJE1PRFVMRV9ESVIkL2xpYi94eHguamFyIS8iIC8+CisgICAgICAgIDwvQ0xBU1NFUz4KKyAgICAgICAgPEpBVkFET0MgLz4KKyAgICAgICAgPFNPVVJDRVMgLz4KKyAgICAgIDwvbGlicmFyeT4KKyAgICA8L29yZGVyRW50cnk+CisgICAgPG9yZGVyRW50cnlQcm9wZXJ0aWVzIC8+CisgIDwvY29tcG9uZW50PgorICA8Y29tcG9uZW50IG5hbWU9IkZhY2V0TWFuYWdlciI+CisgICAgPGZhY2V0IHR5cGU9IndlYiIgbmFtZT0ibW9kdWxlIj4KKyAgICAgIDxjb25maWd1cmF0aW9uPgorICAgICAgICA8d2Vicm9vdHM+CisgICAgICAgICAgPHJvb3QgdXJsPSJmaWxlOi8vJE1PRFVMRV9ESVIkL3Jvb3QiIHJlbGF0aXZlPSIvIiAvPgorICAgICAgICA8L3dlYnJvb3RzPgorICAgICAgICA8ZGVzY3JpcHRvcnM+CisgICAgICAgICAgPGRlcGxveW1lbnREZXNjcmlwdG9yIG5hbWU9IndlYi54bWwiIHVybD0iZmlsZTovLyRNT0RVTEVfRElSJC9XRUItSU5GL3dlYi54bWwiIHZlcnNpb249IjIuMyIgLz4KKyAgICAgICAgPC9kZXNjcmlwdG9ycz4KKyAgICAgIDwvY29uZmlndXJhdGlvbj4KKyAgICA8L2ZhY2V0PgorICA8L2NvbXBvbmVudD4KKzwvbW9kdWxlPgorCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9qYXNwZXJWYWxpZGF0aW9uL2phdmFEZXBlbmRlbnQvcm9vdC9hLmpzcCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2phc3BlclZhbGlkYXRpb24vamF2YURlcGVuZGVudC9yb290L2EuanNwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcxYWRlYzYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9qYXNwZXJWYWxpZGF0aW9uL2phdmFEZXBlbmRlbnQvcm9vdC9hLmpzcApAQCAtMCwwICsxLDcgQEAKKzwlQCBwYWdlIGltcG9ydD0ieC5TIiU+CisKKzwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7Y2hhcnNldD1VVEYtOCIgbGFuZ3VhZ2U9ImphdmEiICU+CisKKzwlIFMuZigpOyAlPgorQUFBQUEKKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvamFzcGVyVmFsaWRhdGlvbi9qYXZhRGVwZW5kZW50L3NvdXJjZS9hLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9qYXNwZXJWYWxpZGF0aW9uL2phdmFEZXBlbmRlbnQvc291cmNlL2EuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NTJmNTRmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvamFzcGVyVmFsaWRhdGlvbi9qYXZhRGVwZW5kZW50L3NvdXJjZS9hLmphdmEKQEAgLTAsMCArMSBAQAorY2xhc3MgYXt9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvamFzcGVyVmFsaWRhdGlvbi9qYXZhRGVwZW5kZW50L3NvdXJjZS94L1MuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2phc3BlclZhbGlkYXRpb24vamF2YURlcGVuZGVudC9zb3VyY2UveC9TLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTcyYmU0YQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2phc3BlclZhbGlkYXRpb24vamF2YURlcGVuZGVudC9zb3VyY2UveC9TLmphdmEKQEAgLTAsMCArMSw3IEBACitwYWNrYWdlIHg7CisKKy8vLy8vLy8vLy8KK3B1YmxpYyBjbGFzcyBTIHsKKyAgcHVibGljIHN0YXRpYyB2b2lkIGYoKSB7CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2phc3BlclZhbGlkYXRpb24vamF2YURlcGVuZGVudC9zb3VyY2UveC9TLmphdmEubmV3IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvamFzcGVyVmFsaWRhdGlvbi9qYXZhRGVwZW5kZW50L3NvdXJjZS94L1MuamF2YS5uZXcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2IwNTY5MwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2phc3BlclZhbGlkYXRpb24vamF2YURlcGVuZGVudC9zb3VyY2UveC9TLmphdmEubmV3CkBAIC0wLDAgKzEsNyBAQAorcGFja2FnZSB4OworCisvLy8vLy8vLy8vIFhYWFhYWFgKK3B1YmxpYyBjbGFzcyBTIHsKKyAgcHVibGljIHN0YXRpYyB2b2lkIGYoKSB7CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2phc3BlclZhbGlkYXRpb24vanNwRGVwZW5kZW50L1dFQi1JTkYvd2ViLnhtbCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2phc3BlclZhbGlkYXRpb24vanNwRGVwZW5kZW50L1dFQi1JTkYvd2ViLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYWZjOTk2Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvamFzcGVyVmFsaWRhdGlvbi9qc3BEZXBlbmRlbnQvV0VCLUlORi93ZWIueG1sCkBAIC0wLDAgKzEsNSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKworPCFET0NUWVBFIHdlYi1hcHAgUFVCTElDICItLy9TdW4gTWljcm9zeXN0ZW1zLCBJbmMuLy9EVEQgV2ViIEFwcGxpY2F0aW9uIDIuMy8vRU4iICJodHRwOi8vamF2YS5zdW4uY29tL2R0ZC93ZWItYXBwXzJfMy5kdGQiPgorPHdlYi1hcHA+Cis8L3dlYi1hcHA+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvamFzcGVyVmFsaWRhdGlvbi9qc3BEZXBlbmRlbnQvZGF0YS54bWwgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9qYXNwZXJWYWxpZGF0aW9uL2pzcERlcGVuZGVudC9kYXRhLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNzdmOWMxCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvamFzcGVyVmFsaWRhdGlvbi9qc3BEZXBlbmRlbnQvZGF0YS54bWwKQEAgLTAsMCArMSwxMSBAQAorPHRlc3REYXRhPgorICA8ZGVsZXRlPgorICA8L2RlbGV0ZT4KKworICA8ZGVsZXRlZF9ieV9tYWtlPgorICA8L2RlbGV0ZWRfYnlfbWFrZT4KKworICA8cmVjb21waWxlPgorICAgIDxmaWxlIHBhdGg9InJvb3QvYS5qc3AiIC8+CisgIDwvcmVjb21waWxlPgorPC90ZXN0RGF0YT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9qYXNwZXJWYWxpZGF0aW9uL2pzcERlcGVuZGVudC9leHBsb2RlZC9XRUItSU5GL2NsYXNzZXMvYS5jbGFzcyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2phc3BlclZhbGlkYXRpb24vanNwRGVwZW5kZW50L2V4cGxvZGVkL1dFQi1JTkYvY2xhc3Nlcy9hLmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRlZDI1ZDMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9qYXNwZXJWYWxpZGF0aW9uL2pzcERlcGVuZGVudC9leHBsb2RlZC9XRUItSU5GL2NsYXNzZXMvYS5jbGFzcwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9qYXNwZXJWYWxpZGF0aW9uL2pzcERlcGVuZGVudC9leHBsb2RlZC9XRUItSU5GL2xpYi94eHguamFyIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvamFzcGVyVmFsaWRhdGlvbi9qc3BEZXBlbmRlbnQvZXhwbG9kZWQvV0VCLUlORi9saWIveHh4LmphcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZmMzNjY5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvamFzcGVyVmFsaWRhdGlvbi9qc3BEZXBlbmRlbnQvZXhwbG9kZWQvV0VCLUlORi9saWIveHh4LmphcgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9qYXNwZXJWYWxpZGF0aW9uL2pzcERlcGVuZGVudC9leHBsb2RlZC9XRUItSU5GL3dlYi54bWwgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9qYXNwZXJWYWxpZGF0aW9uL2pzcERlcGVuZGVudC9leHBsb2RlZC9XRUItSU5GL3dlYi54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2FmYzk5NgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2phc3BlclZhbGlkYXRpb24vanNwRGVwZW5kZW50L2V4cGxvZGVkL1dFQi1JTkYvd2ViLnhtbApAQCAtMCwwICsxLDUgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+CisKKzwhRE9DVFlQRSB3ZWItYXBwIFBVQkxJQyAiLS8vU3VuIE1pY3Jvc3lzdGVtcywgSW5jLi8vRFREIFdlYiBBcHBsaWNhdGlvbiAyLjMvL0VOIiAiaHR0cDovL2phdmEuc3VuLmNvbS9kdGQvd2ViLWFwcF8yXzMuZHRkIj4KKzx3ZWItYXBwPgorPC93ZWItYXBwPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2phc3BlclZhbGlkYXRpb24vanNwRGVwZW5kZW50L2V4cGxvZGVkL2EuanNwIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvamFzcGVyVmFsaWRhdGlvbi9qc3BEZXBlbmRlbnQvZXhwbG9kZWQvYS5qc3AKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGVhYjA2NwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2phc3BlclZhbGlkYXRpb24vanNwRGVwZW5kZW50L2V4cGxvZGVkL2EuanNwCkBAIC0wLDAgKzEsMTQgQEAKKzwlLS0KKyAgQ3JlYXRlZCBieSBJbnRlbGxpSiBJREVBLgorICBVc2VyOiBjZHIKKyAgRGF0ZTogU2VwIDE3LCAyMDA0CisgIFRpbWU6IDI6NTM6NTggUE0KKyAgVG8gY2hhbmdlIHRoaXMgdGVtcGxhdGUgdXNlIEZpbGUgfCBTZXR0aW5ncyB8IEZpbGUgVGVtcGxhdGVzLgorLS0lPgorPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDtjaGFyc2V0PVVURi04IiBsYW5ndWFnZT0iamF2YSIgJT4KKzwlQGluY2x1ZGUgZmlsZT0iZGVwLmpzcCIgJT4KKzwlQGluY2x1ZGUgZmlsZT0iZGVwMi5qc3AiICU+Cis8aHRtbD4KKyAgPGhlYWQ+PHRpdGxlPlNpbXBsZSBqc3AgcGFnZTwvdGl0bGU+PC9oZWFkPgorICA8Ym9keT5QbGFjZSB5b3VyIGNvbnRlbnQgaGVyZTwvYm9keT4KKzwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9qYXNwZXJWYWxpZGF0aW9uL2pzcERlcGVuZGVudC9leHBsb2RlZC9kZXAuanNwIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvamFzcGVyVmFsaWRhdGlvbi9qc3BEZXBlbmRlbnQvZXhwbG9kZWQvZGVwLmpzcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OWVjMjNkCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvamFzcGVyVmFsaWRhdGlvbi9qc3BEZXBlbmRlbnQvZXhwbG9kZWQvZGVwLmpzcApAQCAtMCwwICsxIEBACitkZGQKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9qYXNwZXJWYWxpZGF0aW9uL2pzcERlcGVuZGVudC9leHBsb2RlZC9kZXAyLmpzcCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2phc3BlclZhbGlkYXRpb24vanNwRGVwZW5kZW50L2V4cGxvZGVkL2RlcDIuanNwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY5ZWMyM2QKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9qYXNwZXJWYWxpZGF0aW9uL2pzcERlcGVuZGVudC9leHBsb2RlZC9kZXAyLmpzcApAQCAtMCwwICsxIEBACitkZGQKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9qYXNwZXJWYWxpZGF0aW9uL2pzcERlcGVuZGVudC9leHBsb2RlZC9kaXIveHh4LmpzcCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2phc3BlclZhbGlkYXRpb24vanNwRGVwZW5kZW50L2V4cGxvZGVkL2Rpci94eHguanNwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQwYTRhMGIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9qYXNwZXJWYWxpZGF0aW9uL2pzcERlcGVuZGVudC9leHBsb2RlZC9kaXIveHh4LmpzcApAQCAtMCwwICsxLDMgQEAKKzwlCisgICAgaW50IGEgPSAwOworJT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9qYXNwZXJWYWxpZGF0aW9uL2pzcERlcGVuZGVudC9saWIveHh4LmphciBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2phc3BlclZhbGlkYXRpb24vanNwRGVwZW5kZW50L2xpYi94eHguamFyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRmYzM2NjkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9qYXNwZXJWYWxpZGF0aW9uL2pzcERlcGVuZGVudC9saWIveHh4LmphcgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9qYXNwZXJWYWxpZGF0aW9uL2pzcERlcGVuZGVudC9tb2R1bGUuaW1sIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvamFzcGVyVmFsaWRhdGlvbi9qc3BEZXBlbmRlbnQvbW9kdWxlLmltbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNGFhMDE0NQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2phc3BlclZhbGlkYXRpb24vanNwRGVwZW5kZW50L21vZHVsZS5pbWwKQEAgLTAsMCArMSw2MCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxtb2R1bGUgdmVyc2lvbj0iNCIgcmVsYXRpdmVQYXRocz0idHJ1ZSIgdHlwZT0iSkFWQV9NT0RVTEUiPgorICA8Y29tcG9uZW50IG5hbWU9Ik1vZHVsZVJvb3RNYW5hZ2VyIiAvPgorICA8Y29tcG9uZW50IG5hbWU9Ik5ld01vZHVsZVJvb3RNYW5hZ2VyIj4KKyAgICA8b3V0cHV0IHVybD0iZmlsZTovLyRNT0RVTEVfRElSJC9jbGFzc2VzIiAvPgorICAgIDxleGNsdWRlLW91dHB1dCAvPgorICAgIDxleHBsb2RlZCB1cmw9ImZpbGU6Ly8kTU9EVUxFX0RJUiQvZXhwbG9kZWQiIC8+CisgICAgPGV4Y2x1ZGUtZXhwbG9kZWQgLz4KKyAgICA8Y29udGVudCB1cmw9ImZpbGU6Ly8kTU9EVUxFX0RJUiQiIC8+CisgICAgPG9yZGVyRW50cnkgdHlwZT0iaW5oZXJpdGVkSmRrIiAvPgorICAgIDxvcmRlckVudHJ5IHR5cGU9InNvdXJjZUZvbGRlciIgZm9yVGVzdHM9ImZhbHNlIiAvPgorICAgIDxvcmRlckVudHJ5IHR5cGU9Im1vZHVsZS1saWJyYXJ5Ij4KKyAgICAgIDxsaWJyYXJ5PgorICAgICAgICA8Q0xBU1NFUz4KKyAgICAgICAgICA8cm9vdCB1cmw9ImphcjovLyRNT0RVTEVfRElSJC9saWIveHh4LmphciEvIiAvPgorICAgICAgICA8L0NMQVNTRVM+CisgICAgICAgIDxKQVZBRE9DIC8+CisgICAgICAgIDxTT1VSQ0VTIC8+CisgICAgICA8L2xpYnJhcnk+CisgICAgPC9vcmRlckVudHJ5PgorICAgIDxvcmRlckVudHJ5UHJvcGVydGllcyAvPgorICA8L2NvbXBvbmVudD4KKyAgPGNvbXBvbmVudCBuYW1lPSJWY3NNYW5hZ2VyQ29uZmlndXJhdGlvbiI+CisgICAgPG9wdGlvbiBuYW1lPSJBQ1RJVkVfVkNTX05BTUUiIHZhbHVlPSImbHQ7Tm9uZSZndDsiIC8+CisgICAgPG9wdGlvbiBuYW1lPSJVU0VfUFJPSkVDVF9WQ1MiIHZhbHVlPSJ0cnVlIiAvPgorICA8L2NvbXBvbmVudD4KKyAgPGNvbXBvbmVudCBuYW1lPSJGYWNldE1hbmFnZXIiPgorICAgIDxmYWNldCB0eXBlPSJ3ZWIiIG5hbWU9Im1vZHVsZSI+CisgICAgICA8Y29uZmlndXJhdGlvbj4KKyAgICAgICAgPHdlYnJvb3RzPgorICAgICAgICAgIDxyb290IHVybD0iZmlsZTovLyRNT0RVTEVfRElSJC9yb290IiByZWxhdGl2ZT0iLyIgLz4KKyAgICAgICAgPC93ZWJyb290cz4KKyAgICAgICAgPHBhY2thZ2luZz4KKyAgICAgICAgICA8Y29udGFpbmVyRWxlbWVudCB0eXBlPSJtb2R1bGUiIG5hbWU9Im1vZHVsZSI+CisgICAgICAgICAgICA8YXR0cmlidXRlIG5hbWU9Im1ldGhvZCIgdmFsdWU9IjEiIC8+CisgICAgICAgICAgICA8YXR0cmlidXRlIG5hbWU9IlVSSSIgdmFsdWU9Ii9XRUItSU5GL2NsYXNzZXMiIC8+CisgICAgICAgICAgPC9jb250YWluZXJFbGVtZW50PgorICAgICAgICAgIDxjb250YWluZXJFbGVtZW50IHR5cGU9ImxpYnJhcnkiIGxldmVsPSJtb2R1bGUiPgorICAgICAgICAgICAgPHVybD5qYXI6Ly8kTU9EVUxFX0RJUiQvbGliL3h4eC5qYXIhLzwvdXJsPgorICAgICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJtZXRob2QiIHZhbHVlPSIxIiAvPgorICAgICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJVUkkiIHZhbHVlPSIvV0VCLUlORi9saWIveHh4LmphciIgLz4KKyAgICAgICAgICA8L2NvbnRhaW5lckVsZW1lbnQ+CisgICAgICAgIDwvcGFja2FnaW5nPgorICAgICAgICA8ZGVzY3JpcHRvcnM+CisgICAgICAgICAgPGRlcGxveW1lbnREZXNjcmlwdG9yIG5hbWU9IndlYi54bWwiIHVybD0iZmlsZTovLyRNT0RVTEVfRElSJC9XRUItSU5GL3dlYi54bWwiIHZlcnNpb249IjIuMyIgLz4KKyAgICAgICAgPC9kZXNjcmlwdG9ycz4KKyAgICAgICAgPGJ1aWxkaW5nPgorICAgICAgICAgIDxzZXR0aW5nIG5hbWU9IkVYUExPREVEX1VSTCIgdmFsdWU9ImZpbGU6Ly8kTU9EVUxFX0RJUiQvZXhwbG9kZWQiIC8+CisgICAgICAgICAgPHNldHRpbmcgbmFtZT0iRVhQTE9ERURfRU5BQkxFRCIgdmFsdWU9InRydWUiIC8+CisgICAgICAgICAgPHNldHRpbmcgbmFtZT0iSkFSX1VSTCIgdmFsdWU9ImZpbGU6Ly8kTU9EVUxFX0RJUiQvZGVwL3dhci9tb2R1bGUud2FyIiAvPgorICAgICAgICAgIDxzZXR0aW5nIG5hbWU9IkpBUl9FTkFCTEVEIiB2YWx1ZT0iZmFsc2UiIC8+CisgICAgICAgICAgPHNldHRpbmcgbmFtZT0iU1lOQ19FWFBMT0RFRF9ESVIiIHZhbHVlPSJ0cnVlIiAvPgorICAgICAgICAgIDxzZXR0aW5nIG5hbWU9IkJVSUxEX09OX0ZSQU1FX0RFQUNUSVZBVElPTiIgdmFsdWU9ImZhbHNlIiAvPgorICAgICAgICAgIDxzZXR0aW5nIG5hbWU9IlJVTl9KQVNQRVJfVkFMSURBVElPTiIgdmFsdWU9InRydWUiIC8+CisgICAgICAgIDwvYnVpbGRpbmc+CisgICAgICA8L2NvbmZpZ3VyYXRpb24+CisgICAgPC9mYWNldD4KKyAgPC9jb21wb25lbnQ+Cis8L21vZHVsZT4KKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvamFzcGVyVmFsaWRhdGlvbi9qc3BEZXBlbmRlbnQvcm9vdC9hLmpzcCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2phc3BlclZhbGlkYXRpb24vanNwRGVwZW5kZW50L3Jvb3QvYS5qc3AKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGVhYjA2NwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2phc3BlclZhbGlkYXRpb24vanNwRGVwZW5kZW50L3Jvb3QvYS5qc3AKQEAgLTAsMCArMSwxNCBAQAorPCUtLQorICBDcmVhdGVkIGJ5IEludGVsbGlKIElERUEuCisgIFVzZXI6IGNkcgorICBEYXRlOiBTZXAgMTcsIDIwMDQKKyAgVGltZTogMjo1Mzo1OCBQTQorICBUbyBjaGFuZ2UgdGhpcyB0ZW1wbGF0ZSB1c2UgRmlsZSB8IFNldHRpbmdzIHwgRmlsZSBUZW1wbGF0ZXMuCistLSU+Cis8JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sO2NoYXJzZXQ9VVRGLTgiIGxhbmd1YWdlPSJqYXZhIiAlPgorPCVAaW5jbHVkZSBmaWxlPSJkZXAuanNwIiAlPgorPCVAaW5jbHVkZSBmaWxlPSJkZXAyLmpzcCIgJT4KKzxodG1sPgorICA8aGVhZD48dGl0bGU+U2ltcGxlIGpzcCBwYWdlPC90aXRsZT48L2hlYWQ+CisgIDxib2R5PlBsYWNlIHlvdXIgY29udGVudCBoZXJlPC9ib2R5PgorPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2phc3BlclZhbGlkYXRpb24vanNwRGVwZW5kZW50L3Jvb3QvZGVwLmpzcCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2phc3BlclZhbGlkYXRpb24vanNwRGVwZW5kZW50L3Jvb3QvZGVwLmpzcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OWVjMjNkCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvamFzcGVyVmFsaWRhdGlvbi9qc3BEZXBlbmRlbnQvcm9vdC9kZXAuanNwCkBAIC0wLDAgKzEgQEAKK2RkZApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2phc3BlclZhbGlkYXRpb24vanNwRGVwZW5kZW50L3Jvb3QvZGVwLmpzcC5uZXcgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9qYXNwZXJWYWxpZGF0aW9uL2pzcERlcGVuZGVudC9yb290L2RlcC5qc3AubmV3Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI1NTQ2MDIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9qYXNwZXJWYWxpZGF0aW9uL2pzcERlcGVuZGVudC9yb290L2RlcC5qc3AubmV3CkBAIC0wLDAgKzEgQEAKK2RkZCBYClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvamFzcGVyVmFsaWRhdGlvbi9qc3BEZXBlbmRlbnQvcm9vdC9kZXAyLmpzcCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2phc3BlclZhbGlkYXRpb24vanNwRGVwZW5kZW50L3Jvb3QvZGVwMi5qc3AKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjllYzIzZAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2phc3BlclZhbGlkYXRpb24vanNwRGVwZW5kZW50L3Jvb3QvZGVwMi5qc3AKQEAgLTAsMCArMSBAQAorZGRkClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvamFzcGVyVmFsaWRhdGlvbi9qc3BEZXBlbmRlbnQvcm9vdC9kaXIveHh4LmpzcCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2phc3BlclZhbGlkYXRpb24vanNwRGVwZW5kZW50L3Jvb3QvZGlyL3h4eC5qc3AKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDBhNGEwYgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2phc3BlclZhbGlkYXRpb24vanNwRGVwZW5kZW50L3Jvb3QvZGlyL3h4eC5qc3AKQEAgLTAsMCArMSwzIEBACis8JQorICAgIGludCBhID0gMDsKKyU+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvamFzcGVyVmFsaWRhdGlvbi9qc3BEZXBlbmRlbnQvc291cmNlL2EuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2phc3BlclZhbGlkYXRpb24vanNwRGVwZW5kZW50L3NvdXJjZS9hLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODUyZjU0ZgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2phc3BlclZhbGlkYXRpb24vanNwRGVwZW5kZW50L3NvdXJjZS9hLmphdmEKQEAgLTAsMCArMSBAQAorY2xhc3MgYXt9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvamFzcGVyVmFsaWRhdGlvbi9zY29wZS9kYXRhLnhtbCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2phc3BlclZhbGlkYXRpb24vc2NvcGUvZGF0YS54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDc3ZjljMQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2phc3BlclZhbGlkYXRpb24vc2NvcGUvZGF0YS54bWwKQEAgLTAsMCArMSwxMSBAQAorPHRlc3REYXRhPgorICA8ZGVsZXRlPgorICA8L2RlbGV0ZT4KKworICA8ZGVsZXRlZF9ieV9tYWtlPgorICA8L2RlbGV0ZWRfYnlfbWFrZT4KKworICA8cmVjb21waWxlPgorICAgIDxmaWxlIHBhdGg9InJvb3QvYS5qc3AiIC8+CisgIDwvcmVjb21waWxlPgorPC90ZXN0RGF0YT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9qYXNwZXJWYWxpZGF0aW9uL3Njb3BlL2V4cGxvZGVkL1dFQi1JTkYvd2ViLnhtbCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2phc3BlclZhbGlkYXRpb24vc2NvcGUvZXhwbG9kZWQvV0VCLUlORi93ZWIueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNhZmM5OTYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9qYXNwZXJWYWxpZGF0aW9uL3Njb3BlL2V4cGxvZGVkL1dFQi1JTkYvd2ViLnhtbApAQCAtMCwwICsxLDUgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+CisKKzwhRE9DVFlQRSB3ZWItYXBwIFBVQkxJQyAiLS8vU3VuIE1pY3Jvc3lzdGVtcywgSW5jLi8vRFREIFdlYiBBcHBsaWNhdGlvbiAyLjMvL0VOIiAiaHR0cDovL2phdmEuc3VuLmNvbS9kdGQvd2ViLWFwcF8yXzMuZHRkIj4KKzx3ZWItYXBwPgorPC93ZWItYXBwPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2phc3BlclZhbGlkYXRpb24vc2NvcGUvZXhwbG9kZWQvYS5qc3AgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9qYXNwZXJWYWxpZGF0aW9uL3Njb3BlL2V4cGxvZGVkL2EuanNwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRlYWIwNjcKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9qYXNwZXJWYWxpZGF0aW9uL3Njb3BlL2V4cGxvZGVkL2EuanNwCkBAIC0wLDAgKzEsMTQgQEAKKzwlLS0KKyAgQ3JlYXRlZCBieSBJbnRlbGxpSiBJREVBLgorICBVc2VyOiBjZHIKKyAgRGF0ZTogU2VwIDE3LCAyMDA0CisgIFRpbWU6IDI6NTM6NTggUE0KKyAgVG8gY2hhbmdlIHRoaXMgdGVtcGxhdGUgdXNlIEZpbGUgfCBTZXR0aW5ncyB8IEZpbGUgVGVtcGxhdGVzLgorLS0lPgorPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDtjaGFyc2V0PVVURi04IiBsYW5ndWFnZT0iamF2YSIgJT4KKzwlQGluY2x1ZGUgZmlsZT0iZGVwLmpzcCIgJT4KKzwlQGluY2x1ZGUgZmlsZT0iZGVwMi5qc3AiICU+Cis8aHRtbD4KKyAgPGhlYWQ+PHRpdGxlPlNpbXBsZSBqc3AgcGFnZTwvdGl0bGU+PC9oZWFkPgorICA8Ym9keT5QbGFjZSB5b3VyIGNvbnRlbnQgaGVyZTwvYm9keT4KKzwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9qYXNwZXJWYWxpZGF0aW9uL3Njb3BlL2V4cGxvZGVkL2RlcC5qc3AgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9qYXNwZXJWYWxpZGF0aW9uL3Njb3BlL2V4cGxvZGVkL2RlcC5qc3AKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjllYzIzZAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2phc3BlclZhbGlkYXRpb24vc2NvcGUvZXhwbG9kZWQvZGVwLmpzcApAQCAtMCwwICsxIEBACitkZGQKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9qYXNwZXJWYWxpZGF0aW9uL3Njb3BlL2V4cGxvZGVkL2RlcDIuanNwIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvamFzcGVyVmFsaWRhdGlvbi9zY29wZS9leHBsb2RlZC9kZXAyLmpzcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OWVjMjNkCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvamFzcGVyVmFsaWRhdGlvbi9zY29wZS9leHBsb2RlZC9kZXAyLmpzcApAQCAtMCwwICsxIEBACitkZGQKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9qYXNwZXJWYWxpZGF0aW9uL3Njb3BlL2V4cGxvZGVkL2Rpci94eHguanNwIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvamFzcGVyVmFsaWRhdGlvbi9zY29wZS9leHBsb2RlZC9kaXIveHh4LmpzcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMGE0YTBiCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvamFzcGVyVmFsaWRhdGlvbi9zY29wZS9leHBsb2RlZC9kaXIveHh4LmpzcApAQCAtMCwwICsxLDMgQEAKKzwlCisgICAgaW50IGEgPSAwOworJT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9qYXNwZXJWYWxpZGF0aW9uL3Njb3BlL21vZHVsZS5pbWwgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9qYXNwZXJWYWxpZGF0aW9uL3Njb3BlL21vZHVsZS5pbWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjFjYzlhMwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2phc3BlclZhbGlkYXRpb24vc2NvcGUvbW9kdWxlLmltbApAQCAtMCwwICsxLDI2IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPG1vZHVsZSB2ZXJzaW9uPSI0IiByZWxhdGl2ZVBhdGhzPSJ0cnVlIiB0eXBlPSJKQVZBX01PRFVMRSI+CisgIDxjb21wb25lbnQgbmFtZT0iTW9kdWxlUm9vdE1hbmFnZXIiIC8+CisgIDxjb21wb25lbnQgbmFtZT0iTmV3TW9kdWxlUm9vdE1hbmFnZXIiPgorICAgIDxvdXRwdXQgdXJsPSJmaWxlOi8vJE1PRFVMRV9ESVIkL2NsYXNzZXMiIC8+CisgICAgPGV4Y2x1ZGUtb3V0cHV0IC8+CisgICAgPGV4cGxvZGVkIHVybD0iZmlsZTovLyRNT0RVTEVfRElSJC9leHBsb2RlZCIgLz4KKyAgICA8ZXhjbHVkZS1leHBsb2RlZCAvPgorICAgIDxjb250ZW50IHVybD0iZmlsZTovLyRNT0RVTEVfRElSJCIgLz4KKyAgICA8b3JkZXJFbnRyeSB0eXBlPSJpbmhlcml0ZWRKZGsiIC8+CisgICAgPG9yZGVyRW50cnkgdHlwZT0ic291cmNlRm9sZGVyIiBmb3JUZXN0cz0iZmFsc2UiIC8+CisgIDwvY29tcG9uZW50PgorICA8Y29tcG9uZW50IG5hbWU9IkZhY2V0TWFuYWdlciI+CisgICAgPGZhY2V0IHR5cGU9IndlYiIgbmFtZT0ibW9kdWxlIj4KKyAgICAgIDxjb25maWd1cmF0aW9uPgorICAgICAgICA8d2Vicm9vdHM+CisgICAgICAgICAgPHJvb3QgdXJsPSJmaWxlOi8vJE1PRFVMRV9ESVIkL3Jvb3QiIHJlbGF0aXZlPSIvIiAvPgorICAgICAgICA8L3dlYnJvb3RzPgorICAgICAgICA8ZGVzY3JpcHRvcnM+CisgICAgICAgICAgPGRlcGxveW1lbnREZXNjcmlwdG9yIG5hbWU9IndlYi54bWwiIHVybD0iZmlsZTovLyRNT0RVTEVfRElSJC9XRUItSU5GL3dlYi54bWwiIHZlcnNpb249IjIuMyIgLz4KKyAgICAgICAgPC9kZXNjcmlwdG9ycz4KKyAgICAgIDwvY29uZmlndXJhdGlvbj4KKyAgICA8L2ZhY2V0PgorICA8L2NvbXBvbmVudD4KKzwvbW9kdWxlPgorCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9qYXNwZXJWYWxpZGF0aW9uL3Njb3BlL3Jvb3QvYS5qc3AgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9qYXNwZXJWYWxpZGF0aW9uL3Njb3BlL3Jvb3QvYS5qc3AKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGVhYjA2NwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2phc3BlclZhbGlkYXRpb24vc2NvcGUvcm9vdC9hLmpzcApAQCAtMCwwICsxLDE0IEBACis8JS0tCisgIENyZWF0ZWQgYnkgSW50ZWxsaUogSURFQS4KKyAgVXNlcjogY2RyCisgIERhdGU6IFNlcCAxNywgMjAwNAorICBUaW1lOiAyOjUzOjU4IFBNCisgIFRvIGNoYW5nZSB0aGlzIHRlbXBsYXRlIHVzZSBGaWxlIHwgU2V0dGluZ3MgfCBGaWxlIFRlbXBsYXRlcy4KKy0tJT4KKzwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7Y2hhcnNldD1VVEYtOCIgbGFuZ3VhZ2U9ImphdmEiICU+Cis8JUBpbmNsdWRlIGZpbGU9ImRlcC5qc3AiICU+Cis8JUBpbmNsdWRlIGZpbGU9ImRlcDIuanNwIiAlPgorPGh0bWw+CisgIDxoZWFkPjx0aXRsZT5TaW1wbGUganNwIHBhZ2U8L3RpdGxlPjwvaGVhZD4KKyAgPGJvZHk+UGxhY2UgeW91ciBjb250ZW50IGhlcmU8L2JvZHk+Cis8L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvamFzcGVyVmFsaWRhdGlvbi9zY29wZS9yb290L2IuanNwIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvamFzcGVyVmFsaWRhdGlvbi9zY29wZS9yb290L2IuanNwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2OWRlMjkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9qYXNwZXJWYWxpZGF0aW9uL3Njb3BlL3Jvb3QvYi5qc3AKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2phc3BlclZhbGlkYXRpb24vc2NvcGUvcm9vdC9kZXAuanNwIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvamFzcGVyVmFsaWRhdGlvbi9zY29wZS9yb290L2RlcC5qc3AKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjllYzIzZAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2phc3BlclZhbGlkYXRpb24vc2NvcGUvcm9vdC9kZXAuanNwCkBAIC0wLDAgKzEgQEAKK2RkZApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2phc3BlclZhbGlkYXRpb24vc2NvcGUvcm9vdC9kZXAuanNwLm5ldyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL2phc3BlclZhbGlkYXRpb24vc2NvcGUvcm9vdC9kZXAuanNwLm5ldwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNTU0NjAyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvamFzcGVyVmFsaWRhdGlvbi9zY29wZS9yb290L2RlcC5qc3AubmV3CkBAIC0wLDAgKzEgQEAKK2RkZCBYClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvamFzcGVyVmFsaWRhdGlvbi9zY29wZS9yb290L2RlcDIuanNwIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvamFzcGVyVmFsaWRhdGlvbi9zY29wZS9yb290L2RlcDIuanNwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY5ZWMyM2QKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9qYXNwZXJWYWxpZGF0aW9uL3Njb3BlL3Jvb3QvZGVwMi5qc3AKQEAgLTAsMCArMSBAQAorZGRkClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWFya0RpcnR5L3JlY29tcGlsZURlcGVuZGVudC5sb2cgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tYXJrRGlydHkvcmVjb21waWxlRGVwZW5kZW50LmxvZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNTk5OGVhCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWFya0RpcnR5L3JlY29tcGlsZURlcGVuZGVudC5sb2cKQEAgLTAsMCArMSwxNCBAQAorQ2xlYW5pbmcgb3V0cHV0IGZpbGVzOgorb3V0L3Byb2R1Y3Rpb24vUmVjb21waWxlRGVwZW5kZW50L1NlcnZlci5jbGFzcworRW5kIG9mIGZpbGVzCitDb21waWxpbmcgZmlsZXM6CitzcmMvU2VydmVyLmphdmEKK0VuZCBvZiBmaWxlcworQ2xlYW5pbmcgb3V0cHV0IGZpbGVzOgorb3V0L3Byb2R1Y3Rpb24vUmVjb21waWxlRGVwZW5kZW50L0NsaWVudC5jbGFzcworb3V0L3Byb2R1Y3Rpb24vUmVjb21waWxlRGVwZW5kZW50L1NlcnZlci5jbGFzcworRW5kIG9mIGZpbGVzCitDb21waWxpbmcgZmlsZXM6CitzcmMvQ2xpZW50LmphdmEKK3NyYy9TZXJ2ZXIuamF2YQorRW5kIG9mIGZpbGVzCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tYXJrRGlydHkvcmVjb21waWxlRGVwZW5kZW50L1NlcnZlci5qYXZhLm5ldyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21hcmtEaXJ0eS9yZWNvbXBpbGVEZXBlbmRlbnQvU2VydmVyLmphdmEubmV3Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxZWRkYzYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tYXJrRGlydHkvcmVjb21waWxlRGVwZW5kZW50L1NlcnZlci5qYXZhLm5ldwpAQCAtMCwwICsxLDMgQEAKK3B1YmxpYyBjbGFzcyBTZXJ2ZXJ7CisgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IENPTlNUQU5UID0gMjAwOworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21hcmtEaXJ0eS9yZWNvbXBpbGVEZXBlbmRlbnQvc3JjL0NsaWVudC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWFya0RpcnR5L3JlY29tcGlsZURlcGVuZGVudC9zcmMvQ2xpZW50LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2RkYjc1YwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21hcmtEaXJ0eS9yZWNvbXBpbGVEZXBlbmRlbnQvc3JjL0NsaWVudC5qYXZhCkBAIC0wLDAgKzEsNSBAQAorY2xhc3MgQ2xpZW50IHsKKyAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworICAgIFN5c3RlbS5vdXQucHJpbnRsbihTZXJ2ZXIuQ09OU1RBTlQpOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWFya0RpcnR5L3JlY29tcGlsZURlcGVuZGVudC9zcmMvU2VydmVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tYXJrRGlydHkvcmVjb21waWxlRGVwZW5kZW50L3NyYy9TZXJ2ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mODFmMGE2Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWFya0RpcnR5L3JlY29tcGlsZURlcGVuZGVudC9zcmMvU2VydmVyLmphdmEKQEAgLTAsMCArMSwzIEBACitwdWJsaWMgY2xhc3MgU2VydmVyeworICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBDT05TVEFOVCA9IDEwMDsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tYXJrRGlydHkvcmVjb21waWxlRGVwZW5kZW50VGVzdHMubG9nIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWFya0RpcnR5L3JlY29tcGlsZURlcGVuZGVudFRlc3RzLmxvZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNTQ2YjBhCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWFya0RpcnR5L3JlY29tcGlsZURlcGVuZGVudFRlc3RzLmxvZwpAQCAtMCwwICsxLDIwIEBACitDbGVhbmluZyBvdXRwdXQgZmlsZXM6CitvdXQvcHJvZHVjdGlvbi9SZWNvbXBpbGVEZXBlbmRlbnRUZXN0cy9TZXJ2ZXIuY2xhc3MKK0VuZCBvZiBmaWxlcworQ29tcGlsaW5nIGZpbGVzOgorc3JjL1NlcnZlci5qYXZhCitFbmQgb2YgZmlsZXMKK0NsZWFuaW5nIG91dHB1dCBmaWxlczoKK291dC9wcm9kdWN0aW9uL1JlY29tcGlsZURlcGVuZGVudFRlc3RzL0NsaWVudC5jbGFzcworb3V0L3Byb2R1Y3Rpb24vUmVjb21waWxlRGVwZW5kZW50VGVzdHMvU2VydmVyLmNsYXNzCitFbmQgb2YgZmlsZXMKK0NvbXBpbGluZyBmaWxlczoKK3NyYy9DbGllbnQuamF2YQorc3JjL1NlcnZlci5qYXZhCitFbmQgb2YgZmlsZXMKK0NsZWFuaW5nIG91dHB1dCBmaWxlczoKK291dC90ZXN0L1JlY29tcGlsZURlcGVuZGVudFRlc3RzL1Rlc3RDbGllbnQuY2xhc3MKK0VuZCBvZiBmaWxlcworQ29tcGlsaW5nIGZpbGVzOgordGVzdFNyYy9UZXN0Q2xpZW50LmphdmEKK0VuZCBvZiBmaWxlcwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWFya0RpcnR5L3JlY29tcGlsZURlcGVuZGVudFRlc3RzL1NlcnZlci5qYXZhLm5ldyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21hcmtEaXJ0eS9yZWNvbXBpbGVEZXBlbmRlbnRUZXN0cy9TZXJ2ZXIuamF2YS5uZXcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjFlZGRjNgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21hcmtEaXJ0eS9yZWNvbXBpbGVEZXBlbmRlbnRUZXN0cy9TZXJ2ZXIuamF2YS5uZXcKQEAgLTAsMCArMSwzIEBACitwdWJsaWMgY2xhc3MgU2VydmVyeworICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBDT05TVEFOVCA9IDIwMDsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tYXJrRGlydHkvcmVjb21waWxlRGVwZW5kZW50VGVzdHMvbGliL2EuamFyIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWFya0RpcnR5L3JlY29tcGlsZURlcGVuZGVudFRlc3RzL2xpYi9hLmphcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41Nzc2OTBkCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWFya0RpcnR5L3JlY29tcGlsZURlcGVuZGVudFRlc3RzL2xpYi9hLmphcgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tYXJrRGlydHkvcmVjb21waWxlRGVwZW5kZW50VGVzdHMvc3JjL0NsaWVudC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWFya0RpcnR5L3JlY29tcGlsZURlcGVuZGVudFRlc3RzL3NyYy9DbGllbnQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZDJmNmQ4Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWFya0RpcnR5L3JlY29tcGlsZURlcGVuZGVudFRlc3RzL3NyYy9DbGllbnQuamF2YQpAQCAtMCwwICsxLDIwIEBACisvKgorICogQ29weXJpZ2h0IDIwMDAtMjAxMiBKZXRCcmFpbnMgcy5yLm8uCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworY2xhc3MgQ2xpZW50IHsKKyAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworICAgIFN5c3RlbS5vdXQucHJpbnRsbihTZXJ2ZXIuQ09OU1RBTlQpOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWFya0RpcnR5L3JlY29tcGlsZURlcGVuZGVudFRlc3RzL3NyYy9TZXJ2ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21hcmtEaXJ0eS9yZWNvbXBpbGVEZXBlbmRlbnRUZXN0cy9zcmMvU2VydmVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2ZhYWIyNgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21hcmtEaXJ0eS9yZWNvbXBpbGVEZXBlbmRlbnRUZXN0cy9zcmMvU2VydmVyLmphdmEKQEAgLTAsMCArMSwxOCBAQAorLyoKKyAqIENvcHlyaWdodCAyMDAwLTIwMTIgSmV0QnJhaW5zIHMuci5vLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KK3B1YmxpYyBjbGFzcyBTZXJ2ZXJ7CisgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IENPTlNUQU5UID0gMTAwOworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21hcmtEaXJ0eS9yZWNvbXBpbGVEZXBlbmRlbnRUZXN0cy90ZXN0U3JjL1Rlc3RDbGllbnQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21hcmtEaXJ0eS9yZWNvbXBpbGVEZXBlbmRlbnRUZXN0cy90ZXN0U3JjL1Rlc3RDbGllbnQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZTFkNTNjCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWFya0RpcnR5L3JlY29tcGlsZURlcGVuZGVudFRlc3RzL3Rlc3RTcmMvVGVzdENsaWVudC5qYXZhCkBAIC0wLDAgKzEsMjAgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwMC0yMDEyIEpldEJyYWlucyBzLnIuby4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCitjbGFzcyBUZXN0Q2xpZW50IHsKKyAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworICAgIFN5c3RlbS5vdXQucHJpbnRsbihTZXJ2ZXIuQ09OU1RBTlQgKyBuZXcgY29tLk15Q2xhc3MoKS5nZXQoKSk7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tYXJrRGlydHkvdHJhbnNpdGl2ZVJlY29tcGlsZS9idWlsZC5sb2cgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tYXJrRGlydHkvdHJhbnNpdGl2ZVJlY29tcGlsZS9idWlsZC5sb2cKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmE1YjBmMwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21hcmtEaXJ0eS90cmFuc2l0aXZlUmVjb21waWxlL2J1aWxkLmxvZwpAQCAtMCwwICsxLDM2IEBACitDbGVhbmluZyBvdXRwdXQgZmlsZXM6CitvdXQvcHJvZHVjdGlvbi9saWIveS9MaWIuY2xhc3MKK0VuZCBvZiBmaWxlcworQ29tcGlsaW5nIGZpbGVzOgorbGliL3NyYy95L0xpYi5qYXZhCitFbmQgb2YgZmlsZXMKK0NsZWFuaW5nIG91dHB1dCBmaWxlczoKK291dC9wcm9kdWN0aW9uL2xpYi95L0xpYi5jbGFzcworRW5kIG9mIGZpbGVzCitDb21waWxpbmcgZmlsZXM6CitsaWIvc3JjL3kvTGliLmphdmEKK0VuZCBvZiBmaWxlcworQ2xlYW5pbmcgb3V0cHV0IGZpbGVzOgorb3V0L3Rlc3QvbGliL0xpYlRlc3QuY2xhc3MKK0VuZCBvZiBmaWxlcworQ29tcGlsaW5nIGZpbGVzOgorbGliL3Rlc3RTcmMvTGliVGVzdC5qYXZhCitFbmQgb2YgZmlsZXMKK0NsZWFuaW5nIG91dHB1dCBmaWxlczoKK291dC9wcm9kdWN0aW9uL3V0aWwveC9VdGlsLmNsYXNzCitFbmQgb2YgZmlsZXMKK0NvbXBpbGluZyBmaWxlczoKK3V0aWwvc3JjL3gvVXRpbC5qYXZhCitFbmQgb2YgZmlsZXMKK0NsZWFuaW5nIG91dHB1dCBmaWxlczoKK291dC90ZXN0L3V0aWwvVXRpbFRlc3QuY2xhc3MKK0VuZCBvZiBmaWxlcworQ29tcGlsaW5nIGZpbGVzOgordXRpbC90ZXN0U3JjL1V0aWxUZXN0LmphdmEKK0VuZCBvZiBmaWxlcworQ2xlYW5pbmcgb3V0cHV0IGZpbGVzOgorb3V0L3Byb2R1Y3Rpb24vVHJhbnNpdGl2ZVJlY29tcGlsZS9BLmNsYXNzCitFbmQgb2YgZmlsZXMKK0NvbXBpbGluZyBmaWxlczoKK3NyYy9BLmphdmEKK0VuZCBvZiBmaWxlcwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWFya0RpcnR5L3RyYW5zaXRpdmVSZWNvbXBpbGUvbGliL3NyYy95L0xpYi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWFya0RpcnR5L3RyYW5zaXRpdmVSZWNvbXBpbGUvbGliL3NyYy95L0xpYi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg0YWY3NDUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tYXJrRGlydHkvdHJhbnNpdGl2ZVJlY29tcGlsZS9saWIvc3JjL3kvTGliLmphdmEKQEAgLTAsMCArMSw4IEBACitwYWNrYWdlIHk7CisKK3B1YmxpYyBjbGFzcyBMaWIgeworICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBDT05TVCA9IDIzOTsKKworICBwdWJsaWMgc3RhdGljIHZvaWQgbGliTWV0aG9kKCkgeworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWFya0RpcnR5L3RyYW5zaXRpdmVSZWNvbXBpbGUvbGliL3NyYy95L0xpYi5qYXZhLm5ldyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21hcmtEaXJ0eS90cmFuc2l0aXZlUmVjb21waWxlL2xpYi9zcmMveS9MaWIuamF2YS5uZXcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWYxMGVjNQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21hcmtEaXJ0eS90cmFuc2l0aXZlUmVjb21waWxlL2xpYi9zcmMveS9MaWIuamF2YS5uZXcKQEAgLTAsMCArMSw4IEBACitwYWNrYWdlIHk7CisKK3B1YmxpYyBjbGFzcyBMaWIgeworICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBDT05TVCA9IDI0MTsKKworICBwdWJsaWMgc3RhdGljIHZvaWQgbGliTWV0aG9kKCkgeworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWFya0RpcnR5L3RyYW5zaXRpdmVSZWNvbXBpbGUvbGliL3Rlc3RTcmMvTGliVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWFya0RpcnR5L3RyYW5zaXRpdmVSZWNvbXBpbGUvbGliL3Rlc3RTcmMvTGliVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNmN2NkMTcKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tYXJrRGlydHkvdHJhbnNpdGl2ZVJlY29tcGlsZS9saWIvdGVzdFNyYy9MaWJUZXN0LmphdmEKQEAgLTAsMCArMSBAQAorY2xhc3MgTGliVGVzdCB7IH0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tYXJrRGlydHkvdHJhbnNpdGl2ZVJlY29tcGlsZS9zcmMvQS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWFya0RpcnR5L3RyYW5zaXRpdmVSZWNvbXBpbGUvc3JjL0EuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MzNlYmQ0MWYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tYXJrRGlydHkvdHJhbnNpdGl2ZVJlY29tcGlsZS9zcmMvQS5qYXZhCkBAIC0wLDAgKzEsNyBAQAoraW1wb3J0IHguVXRpbDsKKworcHVibGljIGNsYXNzIEEgeworICBBKCkgeworICAgIFV0aWwudXRpbE1ldGhvZCgpOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWFya0RpcnR5L3RyYW5zaXRpdmVSZWNvbXBpbGUvdGVzdFNyYy9NeVRlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21hcmtEaXJ0eS90cmFuc2l0aXZlUmVjb21waWxlL3Rlc3RTcmMvTXlUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGUyYTE1MgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21hcmtEaXJ0eS90cmFuc2l0aXZlUmVjb21waWxlL3Rlc3RTcmMvTXlUZXN0LmphdmEKQEAgLTAsMCArMSBAQAorY2xhc3MgTXlUZXN0IHt9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWFya0RpcnR5L3RyYW5zaXRpdmVSZWNvbXBpbGUvdXRpbC9zcmMveC9VdGlsLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tYXJrRGlydHkvdHJhbnNpdGl2ZVJlY29tcGlsZS91dGlsL3NyYy94L1V0aWwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MTI2ZGI5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWFya0RpcnR5L3RyYW5zaXRpdmVSZWNvbXBpbGUvdXRpbC9zcmMveC9VdGlsLmphdmEKQEAgLTAsMCArMSw5IEBACitwYWNrYWdlIHg7CisKK2ltcG9ydCB5LkxpYjsKKworcHVibGljIGNsYXNzIFV0aWwgeworICBwdWJsaWMgc3RhdGljIHZvaWQgdXRpbE1ldGhvZCgpIHsKKyAgICBMaWIubGliTWV0aG9kKCk7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tYXJrRGlydHkvdHJhbnNpdGl2ZVJlY29tcGlsZS91dGlsL3NyYy94L1V0aWwuamF2YS5uZXcgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tYXJrRGlydHkvdHJhbnNpdGl2ZVJlY29tcGlsZS91dGlsL3NyYy94L1V0aWwuamF2YS5uZXcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWMwODFlOAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21hcmtEaXJ0eS90cmFuc2l0aXZlUmVjb21waWxlL3V0aWwvc3JjL3gvVXRpbC5qYXZhLm5ldwpAQCAtMCwwICsxLDEwIEBACitwYWNrYWdlIHg7CisKK2ltcG9ydCB5LkxpYjsKKworcHVibGljIGNsYXNzIFV0aWwgeworICBwdWJsaWMgc3RhdGljIGludCB1dGlsTWV0aG9kKCkgeworICAgIExpYi5saWJNZXRob2QoKTsKKyAgICByZXR1cm4gMDsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21hcmtEaXJ0eS90cmFuc2l0aXZlUmVjb21waWxlL3V0aWwvdGVzdFNyYy9VdGlsVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWFya0RpcnR5L3RyYW5zaXRpdmVSZWNvbXBpbGUvdXRpbC90ZXN0U3JjL1V0aWxUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDc4YmNmNQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21hcmtEaXJ0eS90cmFuc2l0aXZlUmVjb21waWxlL3V0aWwvdGVzdFNyYy9VdGlsVGVzdC5qYXZhCkBAIC0wLDAgKzEgQEAKK3B1YmxpYyBjbGFzcyBVdGlsVGVzdCB7fQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21lbWJlcnNDaGFuZ2UvYWRkQWJzdHJhY3RNZXRob2QubG9nIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWVtYmVyc0NoYW5nZS9hZGRBYnN0cmFjdE1ldGhvZC5sb2cKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDk4OWYzMAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21lbWJlcnNDaGFuZ2UvYWRkQWJzdHJhY3RNZXRob2QubG9nCkBAIC0wLDAgKzEsMTIgQEAKK0NsZWFuaW5nIG91dHB1dCBmaWxlczoKK291dC9wcm9kdWN0aW9uL0FkZEFic3RyYWN0TWV0aG9kL3BhY2thZ2VBL0Jhc2VTZXJ2ZXIuY2xhc3MKK0VuZCBvZiBmaWxlcworQ29tcGlsaW5nIGZpbGVzOgorc3JjL3BhY2thZ2VBL0Jhc2VTZXJ2ZXIuamF2YQorRW5kIG9mIGZpbGVzCitDbGVhbmluZyBvdXRwdXQgZmlsZXM6CitvdXQvcHJvZHVjdGlvbi9BZGRBYnN0cmFjdE1ldGhvZC9wYWNrYWdlQS9TZXJ2ZXIuY2xhc3MKK0VuZCBvZiBmaWxlcworQ29tcGlsaW5nIGZpbGVzOgorc3JjL3BhY2thZ2VBL1NlcnZlci5qYXZhCitFbmQgb2YgZmlsZXMKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21lbWJlcnNDaGFuZ2UvYWRkQWJzdHJhY3RNZXRob2QvZGF0YS54bWwgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZW1iZXJzQ2hhbmdlL2FkZEFic3RyYWN0TWV0aG9kL2RhdGEueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE3ZDI2NzkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZW1iZXJzQ2hhbmdlL2FkZEFic3RyYWN0TWV0aG9kL2RhdGEueG1sCkBAIC0wLDAgKzEsMTUgQEAKKzx0ZXN0RGF0YT4KKworICA8ZGVsZXRlPgorICA8L2RlbGV0ZT4KKworICA8ZGVsZXRlZF9ieV9tYWtlPgorICAgIDxmaWxlIHBhdGg9ImNsYXNzZXMvcGFja2FnZUEvQmFzZVNlcnZlci5jbGFzcyIgLz4KKyAgICA8ZmlsZSBwYXRoPSJjbGFzc2VzL3BhY2thZ2VBL1NlcnZlci5jbGFzcyIgLz4KKyAgPC9kZWxldGVkX2J5X21ha2U+CisKKyAgPHJlY29tcGlsZT4KKyAgICA8ZmlsZSBwYXRoPSJzb3VyY2UvcGFja2FnZUEvU2VydmVyLmphdmEiIC8+CisgIDwvcmVjb21waWxlPgorCis8L3Rlc3REYXRhPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21lbWJlcnNDaGFuZ2UvYWRkQWJzdHJhY3RNZXRob2Qvc3JjL3BhY2thZ2VBL0Jhc2VTZXJ2ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21lbWJlcnNDaGFuZ2UvYWRkQWJzdHJhY3RNZXRob2Qvc3JjL3BhY2thZ2VBL0Jhc2VTZXJ2ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kODM4MDYzCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWVtYmVyc0NoYW5nZS9hZGRBYnN0cmFjdE1ldGhvZC9zcmMvcGFja2FnZUEvQmFzZVNlcnZlci5qYXZhCkBAIC0wLDAgKzEsMTEgQEAKKy8qKgorICogY3JlYXRlZCBhdCBKYW4gMjIsIDIwMDIKKyAqIEBhdXRob3IgSmVrYQorICovCitwYWNrYWdlIHBhY2thZ2VBOworCitwdWJsaWMgY2xhc3MgQmFzZVNlcnZlciB7CisgIHB1YmxpYyB2b2lkIG1ldGhvZCgpIHsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkJhc2VTZXJ2ZXIubWV0aG9kIik7CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21lbWJlcnNDaGFuZ2UvYWRkQWJzdHJhY3RNZXRob2Qvc3JjL3BhY2thZ2VBL0Jhc2VTZXJ2ZXIuamF2YS5uZXcgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZW1iZXJzQ2hhbmdlL2FkZEFic3RyYWN0TWV0aG9kL3NyYy9wYWNrYWdlQS9CYXNlU2VydmVyLmphdmEubmV3Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEwZTJkYjAKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZW1iZXJzQ2hhbmdlL2FkZEFic3RyYWN0TWV0aG9kL3NyYy9wYWNrYWdlQS9CYXNlU2VydmVyLmphdmEubmV3CkBAIC0wLDAgKzEsMTIgQEAKKy8qKgorICogY3JlYXRlZCBhdCBKYW4gMjIsIDIwMDIKKyAqIEBhdXRob3IgSmVrYQorICovCitwYWNrYWdlIHBhY2thZ2VBOworCitwdWJsaWMgYWJzdHJhY3QgY2xhc3MgQmFzZVNlcnZlciB7CisgIHB1YmxpYyB2b2lkIG1ldGhvZCgpIHsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkJhc2VTZXJ2ZXIubWV0aG9kIik7CisgIH0KKyAgcHVibGljIGFic3RyYWN0IHZvaWQgYWJzdHJhY3RNZXRob2QoKTsKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21lbWJlcnNDaGFuZ2UvYWRkQWJzdHJhY3RNZXRob2Qvc3JjL3BhY2thZ2VBL0NsaWVudC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWVtYmVyc0NoYW5nZS9hZGRBYnN0cmFjdE1ldGhvZC9zcmMvcGFja2FnZUEvQ2xpZW50LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2VmNTQyZgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21lbWJlcnNDaGFuZ2UvYWRkQWJzdHJhY3RNZXRob2Qvc3JjL3BhY2thZ2VBL0NsaWVudC5qYXZhCkBAIC0wLDAgKzEsMTIgQEAKKy8qKgorICogY3JlYXRlZCBhdCBKYW4gMjIsIDIwMDIKKyAqIEBhdXRob3IgSmVrYQorICovCitwYWNrYWdlIHBhY2thZ2VBOworCitwdWJsaWMgY2xhc3MgQ2xpZW50IHsKKyAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworICAgIFNlcnZlciBzZXJ2ZXIgPSBuZXcgU2VydmVyKCk7CisgICAgc2VydmVyLm1ldGhvZCgpOworICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZW1iZXJzQ2hhbmdlL2FkZEFic3RyYWN0TWV0aG9kL3NyYy9wYWNrYWdlQS9TZXJ2ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21lbWJlcnNDaGFuZ2UvYWRkQWJzdHJhY3RNZXRob2Qvc3JjL3BhY2thZ2VBL1NlcnZlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFiZTA2NjEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZW1iZXJzQ2hhbmdlL2FkZEFic3RyYWN0TWV0aG9kL3NyYy9wYWNrYWdlQS9TZXJ2ZXIuamF2YQpAQCAtMCwwICsxLDExIEBACisvKioKKyAqIGNyZWF0ZWQgYXQgSmFuIDIyLCAyMDAyCisgKiBAYXV0aG9yIEpla2EKKyAqLworcGFja2FnZSBwYWNrYWdlQTsKKworcHVibGljIGNsYXNzIFNlcnZlciBleHRlbmRzIEJhc2VTZXJ2ZXIgeworICBwdWJsaWMgdm9pZCBtZXRob2QoKSB7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJTZXJ2ZXIubWV0aG9kIik7CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21lbWJlcnNDaGFuZ2UvYWRkQ29uc3RydWN0b3JQYXJhbWV0ZXIubG9nIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWVtYmVyc0NoYW5nZS9hZGRDb25zdHJ1Y3RvclBhcmFtZXRlci5sb2cKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzNhNWFhMQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21lbWJlcnNDaGFuZ2UvYWRkQ29uc3RydWN0b3JQYXJhbWV0ZXIubG9nCkBAIC0wLDAgKzEsMTQgQEAKK0NsZWFuaW5nIG91dHB1dCBmaWxlczoKK291dC9wcm9kdWN0aW9uL0FkZENvbnN0cnVjdG9yUGFyYW1ldGVyL0Jhc2UuY2xhc3MKK0VuZCBvZiBmaWxlcworQ29tcGlsaW5nIGZpbGVzOgorc3JjL0Jhc2UuamF2YQorRW5kIG9mIGZpbGVzCitDbGVhbmluZyBvdXRwdXQgZmlsZXM6CitvdXQvcHJvZHVjdGlvbi9BZGRDb25zdHJ1Y3RvclBhcmFtZXRlci9DbGllbnQuY2xhc3MKK291dC9wcm9kdWN0aW9uL0FkZENvbnN0cnVjdG9yUGFyYW1ldGVyL0Rlcml2ZWQuY2xhc3MKK0VuZCBvZiBmaWxlcworQ29tcGlsaW5nIGZpbGVzOgorc3JjL0NsaWVudC5qYXZhCitzcmMvRGVyaXZlZC5qYXZhCitFbmQgb2YgZmlsZXMKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21lbWJlcnNDaGFuZ2UvYWRkQ29uc3RydWN0b3JQYXJhbWV0ZXIvQmFzZS5qYXZhLm5ldyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21lbWJlcnNDaGFuZ2UvYWRkQ29uc3RydWN0b3JQYXJhbWV0ZXIvQmFzZS5qYXZhLm5ldwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ODU2NWFhCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWVtYmVyc0NoYW5nZS9hZGRDb25zdHJ1Y3RvclBhcmFtZXRlci9CYXNlLmphdmEubmV3CkBAIC0wLDAgKzEsNCBAQAorY2xhc3MgQmFzZSB7CisgIHB1YmxpYyBCYXNlKGludCBhKSB7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZW1iZXJzQ2hhbmdlL2FkZENvbnN0cnVjdG9yUGFyYW1ldGVyL2RhdGEueG1sIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWVtYmVyc0NoYW5nZS9hZGRDb25zdHJ1Y3RvclBhcmFtZXRlci9kYXRhLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZDFiOGM0Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWVtYmVyc0NoYW5nZS9hZGRDb25zdHJ1Y3RvclBhcmFtZXRlci9kYXRhLnhtbApAQCAtMCwwICsxLDEyIEBACis8dGVzdERhdGE+CisgIDxkZWxldGVkX2J5X21ha2U+CisgICAgPGZpbGUgcGF0aD0iY2xhc3Nlcy9CYXNlLmNsYXNzIiAvPgorICAgIDxmaWxlIHBhdGg9ImNsYXNzZXMvQ2xpZW50LmNsYXNzIiAvPgorICAgIDxmaWxlIHBhdGg9ImNsYXNzZXMvRGVyaXZlZC5jbGFzcyIgLz4KKyAgPC9kZWxldGVkX2J5X21ha2U+CisKKyAgPHJlY29tcGlsZT4KKyAgICA8ZmlsZSBwYXRoPSJzb3VyY2UvQ2xpZW50LmphdmEiIC8+CisgICAgPGZpbGUgcGF0aD0ic291cmNlL0Rlcml2ZWQuamF2YSIgLz4KKyAgPC9yZWNvbXBpbGU+Cis8L3Rlc3REYXRhPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21lbWJlcnNDaGFuZ2UvYWRkQ29uc3RydWN0b3JQYXJhbWV0ZXIvc3JjL0Jhc2UuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21lbWJlcnNDaGFuZ2UvYWRkQ29uc3RydWN0b3JQYXJhbWV0ZXIvc3JjL0Jhc2UuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OTE4YWFiCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWVtYmVyc0NoYW5nZS9hZGRDb25zdHJ1Y3RvclBhcmFtZXRlci9zcmMvQmFzZS5qYXZhCkBAIC0wLDAgKzEsMiBAQAorY2xhc3MgQmFzZSB7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWVtYmVyc0NoYW5nZS9hZGRDb25zdHJ1Y3RvclBhcmFtZXRlci9zcmMvQ2xpZW50LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZW1iZXJzQ2hhbmdlL2FkZENvbnN0cnVjdG9yUGFyYW1ldGVyL3NyYy9DbGllbnQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZWI2YTVmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWVtYmVyc0NoYW5nZS9hZGRDb25zdHJ1Y3RvclBhcmFtZXRlci9zcmMvQ2xpZW50LmphdmEKQEAgLTAsMCArMSw1IEBACitjbGFzcyBDbGllbnR7CisgIHsKKyAgICBCYXNlIGJhc2UgPSBuZXcgQmFzZSgpOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWVtYmVyc0NoYW5nZS9hZGRDb25zdHJ1Y3RvclBhcmFtZXRlci9zcmMvRGVyaXZlZC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWVtYmVyc0NoYW5nZS9hZGRDb25zdHJ1Y3RvclBhcmFtZXRlci9zcmMvRGVyaXZlZC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZmZGZhYjUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZW1iZXJzQ2hhbmdlL2FkZENvbnN0cnVjdG9yUGFyYW1ldGVyL3NyYy9EZXJpdmVkLmphdmEKQEAgLTAsMCArMSwyIEBACitjbGFzcyBEZXJpdmVkIGV4dGVuZHMgQmFzZSB7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWVtYmVyc0NoYW5nZS9hZGRGaWVsZFRvQmFzZUNsYXNzLmxvZyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21lbWJlcnNDaGFuZ2UvYWRkRmllbGRUb0Jhc2VDbGFzcy5sb2cKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWQwNjM2MQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21lbWJlcnNDaGFuZ2UvYWRkRmllbGRUb0Jhc2VDbGFzcy5sb2cKQEAgLTAsMCArMSw2IEBACitDbGVhbmluZyBvdXRwdXQgZmlsZXM6CitvdXQvcHJvZHVjdGlvbi9BZGRGaWVsZFRvQmFzZUNsYXNzL0Jhc2VTZXJ2ZXIuY2xhc3MKK0VuZCBvZiBmaWxlcworQ29tcGlsaW5nIGZpbGVzOgorc3JjL0Jhc2VTZXJ2ZXIuamF2YQorRW5kIG9mIGZpbGVzCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZW1iZXJzQ2hhbmdlL2FkZEZpZWxkVG9CYXNlQ2xhc3MvQmFzZVNlcnZlci5qYXZhLm5ldyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21lbWJlcnNDaGFuZ2UvYWRkRmllbGRUb0Jhc2VDbGFzcy9CYXNlU2VydmVyLmphdmEubmV3Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk4ZjdmN2U0Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWVtYmVyc0NoYW5nZS9hZGRGaWVsZFRvQmFzZUNsYXNzL0Jhc2VTZXJ2ZXIuamF2YS5uZXcKQEAgLTAsMCArMSwzIEBACitwdWJsaWMgY2xhc3MgQmFzZVNlcnZlciB7CisgIHB1YmxpYyBTdHJpbmcgZmllbGQgPSAidGVzdFN0cmluZyI7Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZW1iZXJzQ2hhbmdlL2FkZEZpZWxkVG9CYXNlQ2xhc3MvYWRkRmllbGRUb0Jhc2VDbGFzcy5sb2cgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZW1iZXJzQ2hhbmdlL2FkZEZpZWxkVG9CYXNlQ2xhc3MvYWRkRmllbGRUb0Jhc2VDbGFzcy5sb2cKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWQwNjM2MQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21lbWJlcnNDaGFuZ2UvYWRkRmllbGRUb0Jhc2VDbGFzcy9hZGRGaWVsZFRvQmFzZUNsYXNzLmxvZwpAQCAtMCwwICsxLDYgQEAKK0NsZWFuaW5nIG91dHB1dCBmaWxlczoKK291dC9wcm9kdWN0aW9uL0FkZEZpZWxkVG9CYXNlQ2xhc3MvQmFzZVNlcnZlci5jbGFzcworRW5kIG9mIGZpbGVzCitDb21waWxpbmcgZmlsZXM6CitzcmMvQmFzZVNlcnZlci5qYXZhCitFbmQgb2YgZmlsZXMKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21lbWJlcnNDaGFuZ2UvYWRkRmllbGRUb0Jhc2VDbGFzcy9kYXRhLnhtbCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21lbWJlcnNDaGFuZ2UvYWRkRmllbGRUb0Jhc2VDbGFzcy9kYXRhLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NTk3ODFlCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWVtYmVyc0NoYW5nZS9hZGRGaWVsZFRvQmFzZUNsYXNzL2RhdGEueG1sCkBAIC0wLDAgKzEsMTIgQEAKKzx0ZXN0RGF0YT4KKworICA8ZGVsZXRlZF9ieV9tYWtlPgorICAgIDxmaWxlIHBhdGg9ImNsYXNzZXMvQmFzZVNlcnZlci5jbGFzcyIgLz4KKyAgICA8ZmlsZSBwYXRoPSJjbGFzc2VzL1NlcnZlci5jbGFzcyIgLz4KKyAgPC9kZWxldGVkX2J5X21ha2U+CisKKyAgPHJlY29tcGlsZT4KKyAgICA8ZmlsZSBwYXRoPSJzb3VyY2UvU2VydmVyLmphdmEiIC8+CisgIDwvcmVjb21waWxlPgorCis8L3Rlc3REYXRhPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21lbWJlcnNDaGFuZ2UvYWRkRmllbGRUb0Jhc2VDbGFzcy9zcmMvQmFzZVNlcnZlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWVtYmVyc0NoYW5nZS9hZGRGaWVsZFRvQmFzZUNsYXNzL3NyYy9CYXNlU2VydmVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzNmOWI3YgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21lbWJlcnNDaGFuZ2UvYWRkRmllbGRUb0Jhc2VDbGFzcy9zcmMvQmFzZVNlcnZlci5qYXZhCkBAIC0wLDAgKzEsMiBAQAorcHVibGljIGNsYXNzIEJhc2VTZXJ2ZXIgeworfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWVtYmVyc0NoYW5nZS9hZGRGaWVsZFRvQmFzZUNsYXNzL3NyYy9TZXJ2ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21lbWJlcnNDaGFuZ2UvYWRkRmllbGRUb0Jhc2VDbGFzcy9zcmMvU2VydmVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTcwOTQ2NQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21lbWJlcnNDaGFuZ2UvYWRkRmllbGRUb0Jhc2VDbGFzcy9zcmMvU2VydmVyLmphdmEKQEAgLTAsMCArMSwzIEBACitwdWJsaWMgY2xhc3MgU2VydmVyIGV4dGVuZHMgQmFzZVNlcnZlciB7CisgIHB1YmxpYyBJbnRlZ2VyIGZpZWxkID0gbmV3IEludGVnZXIoMTApOworfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWVtYmVyc0NoYW5nZS9hZGRGaWVsZFRvRGVyaXZlZC5sb2cgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZW1iZXJzQ2hhbmdlL2FkZEZpZWxkVG9EZXJpdmVkLmxvZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OWM2ZTYwCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWVtYmVyc0NoYW5nZS9hZGRGaWVsZFRvRGVyaXZlZC5sb2cKQEAgLTAsMCArMSwxMiBAQAorQ2xlYW5pbmcgb3V0cHV0IGZpbGVzOgorb3V0L3Byb2R1Y3Rpb24vQWRkRmllbGRUb0Rlcml2ZWQvRGVyaXZlZC5jbGFzcworRW5kIG9mIGZpbGVzCitDb21waWxpbmcgZmlsZXM6CitzcmMvRGVyaXZlZC5qYXZhCitFbmQgb2YgZmlsZXMKK0NsZWFuaW5nIG91dHB1dCBmaWxlczoKK291dC9wcm9kdWN0aW9uL0FkZEZpZWxkVG9EZXJpdmVkL0NsaWVudC5jbGFzcworRW5kIG9mIGZpbGVzCitDb21waWxpbmcgZmlsZXM6CitzcmMvQ2xpZW50LmphdmEKK0VuZCBvZiBmaWxlcwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWVtYmVyc0NoYW5nZS9hZGRGaWVsZFRvRGVyaXZlZC9EZXJpdmVkLmphdmEubmV3IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWVtYmVyc0NoYW5nZS9hZGRGaWVsZFRvRGVyaXZlZC9EZXJpdmVkLmphdmEubmV3Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY3NjkzNmIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZW1iZXJzQ2hhbmdlL2FkZEZpZWxkVG9EZXJpdmVkL0Rlcml2ZWQuamF2YS5uZXcKQEAgLTAsMCArMSwzIEBACitjbGFzcyBEZXJpdmVkIGV4dGVuZHMgQmFzZSB7CisgIGNoYXIgaCA9ICdoJzsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZW1iZXJzQ2hhbmdlL2FkZEZpZWxkVG9EZXJpdmVkL2RhdGEueG1sIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWVtYmVyc0NoYW5nZS9hZGRGaWVsZFRvRGVyaXZlZC9kYXRhLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOWY4NTQ4Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWVtYmVyc0NoYW5nZS9hZGRGaWVsZFRvRGVyaXZlZC9kYXRhLnhtbApAQCAtMCwwICsxLDEwIEBACis8dGVzdERhdGE+CisgIDxkZWxldGVkX2J5X21ha2U+CisgICAgPGZpbGUgcGF0aD0iY2xhc3Nlcy9EZXJpdmVkLmNsYXNzIiAvPgorICAgIDxmaWxlIHBhdGg9ImNsYXNzZXMvQ2xpZW50LmNsYXNzIiAvPgorICA8L2RlbGV0ZWRfYnlfbWFrZT4KKworICA8cmVjb21waWxlPgorICAgIDxmaWxlIHBhdGg9InNvdXJjZS9DbGllbnQuamF2YSIgLz4KKyAgPC9yZWNvbXBpbGU+Cis8L3Rlc3REYXRhPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21lbWJlcnNDaGFuZ2UvYWRkRmllbGRUb0Rlcml2ZWQvc3JjL0Jhc2UuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21lbWJlcnNDaGFuZ2UvYWRkRmllbGRUb0Rlcml2ZWQvc3JjL0Jhc2UuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOTkzNzk4Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWVtYmVyc0NoYW5nZS9hZGRGaWVsZFRvRGVyaXZlZC9zcmMvQmFzZS5qYXZhCkBAIC0wLDAgKzEsMyBAQAorY2xhc3MgQmFzZSB7CisgU3RyaW5nIGggPSAiQmFzZSI7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWVtYmVyc0NoYW5nZS9hZGRGaWVsZFRvRGVyaXZlZC9zcmMvQ2xpZW50LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZW1iZXJzQ2hhbmdlL2FkZEZpZWxkVG9EZXJpdmVkL3NyYy9DbGllbnQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNWRjMGFjCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWVtYmVyc0NoYW5nZS9hZGRGaWVsZFRvRGVyaXZlZC9zcmMvQ2xpZW50LmphdmEKQEAgLTAsMCArMSw2IEBACitjbGFzcyBDbGllbnQgZXh0ZW5kcyBEZXJpdmVkIHsKKyAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworICAgIFN0cmluZyBzID0gbmV3IENsaWVudCgpLmg7CisJCVN5c3RlbS5vdXQucHJpbnRsbihzKTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21lbWJlcnNDaGFuZ2UvYWRkRmllbGRUb0Rlcml2ZWQvc3JjL0Rlcml2ZWQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21lbWJlcnNDaGFuZ2UvYWRkRmllbGRUb0Rlcml2ZWQvc3JjL0Rlcml2ZWQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZmRmYWI1Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWVtYmVyc0NoYW5nZS9hZGRGaWVsZFRvRGVyaXZlZC9zcmMvRGVyaXZlZC5qYXZhCkBAIC0wLDAgKzEsMiBAQAorY2xhc3MgRGVyaXZlZCBleHRlbmRzIEJhc2UgeworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21lbWJlcnNDaGFuZ2UvYWRkRmllbGRUb0ludGVyZmFjZS5sb2cgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZW1iZXJzQ2hhbmdlL2FkZEZpZWxkVG9JbnRlcmZhY2UubG9nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhiYzQyNjUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZW1iZXJzQ2hhbmdlL2FkZEZpZWxkVG9JbnRlcmZhY2UubG9nCkBAIC0wLDAgKzEsMTIgQEAKK0NsZWFuaW5nIG91dHB1dCBmaWxlczoKK291dC9wcm9kdWN0aW9uL0FkZEZpZWxkVG9JbnRlcmZhY2UvQmFzZUludGVyZmFjZS5jbGFzcworRW5kIG9mIGZpbGVzCitDb21waWxpbmcgZmlsZXM6CitzcmMvQmFzZUludGVyZmFjZS5qYXZhCitFbmQgb2YgZmlsZXMKK0NsZWFuaW5nIG91dHB1dCBmaWxlczoKK291dC9wcm9kdWN0aW9uL0FkZEZpZWxkVG9JbnRlcmZhY2UvQ2xpZW50LmNsYXNzCitFbmQgb2YgZmlsZXMKK0NvbXBpbGluZyBmaWxlczoKK3NyYy9DbGllbnQuamF2YQorRW5kIG9mIGZpbGVzCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZW1iZXJzQ2hhbmdlL2FkZEZpZWxkVG9JbnRlcmZhY2UvQmFzZUludGVyZmFjZS5qYXZhLm5ldyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21lbWJlcnNDaGFuZ2UvYWRkRmllbGRUb0ludGVyZmFjZS9CYXNlSW50ZXJmYWNlLmphdmEubmV3Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY5OTllYzMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZW1iZXJzQ2hhbmdlL2FkZEZpZWxkVG9JbnRlcmZhY2UvQmFzZUludGVyZmFjZS5qYXZhLm5ldwpAQCAtMCwwICsxLDMgQEAKK2ludGVyZmFjZSBCYXNlSW50ZXJmYWNlIHsKKyAgU3RyaW5nIGZpZWxkID0gIkJhc2VJbnRlcmZhY2UiOworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21lbWJlcnNDaGFuZ2UvYWRkRmllbGRUb0ludGVyZmFjZS9kYXRhLnhtbCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21lbWJlcnNDaGFuZ2UvYWRkRmllbGRUb0ludGVyZmFjZS9kYXRhLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43Y2U2NDYyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWVtYmVyc0NoYW5nZS9hZGRGaWVsZFRvSW50ZXJmYWNlL2RhdGEueG1sCkBAIC0wLDAgKzEsMTAgQEAKKzx0ZXN0RGF0YT4KKyAgPGRlbGV0ZWRfYnlfbWFrZT4KKyAgICA8ZmlsZSBwYXRoPSJjbGFzc2VzL0Jhc2VJbnRlcmZhY2UuY2xhc3MiIC8+CisgICAgPGZpbGUgcGF0aD0iY2xhc3Nlcy9DbGllbnQuY2xhc3MiIC8+CisgIDwvZGVsZXRlZF9ieV9tYWtlPgorCisgIDxyZWNvbXBpbGU+CisgICAgPGZpbGUgcGF0aD0ic291cmNlL0NsaWVudC5qYXZhIiAvPgorICA8L3JlY29tcGlsZT4KKzwvdGVzdERhdGE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWVtYmVyc0NoYW5nZS9hZGRGaWVsZFRvSW50ZXJmYWNlL3NyYy9CYXNlLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZW1iZXJzQ2hhbmdlL2FkZEZpZWxkVG9JbnRlcmZhY2Uvc3JjL0Jhc2UuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iODYxZjRiCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWVtYmVyc0NoYW5nZS9hZGRGaWVsZFRvSW50ZXJmYWNlL3NyYy9CYXNlLmphdmEKQEAgLTAsMCArMSwzIEBACitjbGFzcyBCYXNlIHsKKyBTdHJpbmcgZmllbGQgPSAiQmFzZSI7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWVtYmVyc0NoYW5nZS9hZGRGaWVsZFRvSW50ZXJmYWNlL3NyYy9CYXNlSW50ZXJmYWNlLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZW1iZXJzQ2hhbmdlL2FkZEZpZWxkVG9JbnRlcmZhY2Uvc3JjL0Jhc2VJbnRlcmZhY2UuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNmZiYjhiCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWVtYmVyc0NoYW5nZS9hZGRGaWVsZFRvSW50ZXJmYWNlL3NyYy9CYXNlSW50ZXJmYWNlLmphdmEKQEAgLTAsMCArMSwyIEBACitpbnRlcmZhY2UgQmFzZUludGVyZmFjZSB7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWVtYmVyc0NoYW5nZS9hZGRGaWVsZFRvSW50ZXJmYWNlL3NyYy9DbGllbnQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21lbWJlcnNDaGFuZ2UvYWRkRmllbGRUb0ludGVyZmFjZS9zcmMvQ2xpZW50LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmIyMDRkNgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21lbWJlcnNDaGFuZ2UvYWRkRmllbGRUb0ludGVyZmFjZS9zcmMvQ2xpZW50LmphdmEKQEAgLTAsMCArMSw2IEBACitjbGFzcyBDbGllbnQgeworICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisgICAgU3RyaW5nIHMgPSBuZXcgRGVyaXZlZCgpLmZpZWxkOworCQlTeXN0ZW0ub3V0LnByaW50bG4ocyk7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZW1iZXJzQ2hhbmdlL2FkZEZpZWxkVG9JbnRlcmZhY2Uvc3JjL0Rlcml2ZWQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21lbWJlcnNDaGFuZ2UvYWRkRmllbGRUb0ludGVyZmFjZS9zcmMvRGVyaXZlZC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJjODRkNDgKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZW1iZXJzQ2hhbmdlL2FkZEZpZWxkVG9JbnRlcmZhY2Uvc3JjL0Rlcml2ZWQuamF2YQpAQCAtMCwwICsxLDIgQEAKK2NsYXNzIERlcml2ZWQgZXh0ZW5kcyBCYXNlIGltcGxlbWVudHMgQmFzZUludGVyZmFjZSB7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWVtYmVyc0NoYW5nZS9hZGRGaWVsZFRvSW50ZXJmYWNlMi5sb2cgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZW1iZXJzQ2hhbmdlL2FkZEZpZWxkVG9JbnRlcmZhY2UyLmxvZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OThiMTEyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWVtYmVyc0NoYW5nZS9hZGRGaWVsZFRvSW50ZXJmYWNlMi5sb2cKQEAgLTAsMCArMSwxMiBAQAorQ2xlYW5pbmcgb3V0cHV0IGZpbGVzOgorb3V0L3Byb2R1Y3Rpb24vQWRkRmllbGRUb0ludGVyZmFjZTIvQmFzZUludGVyZmFjZS5jbGFzcworRW5kIG9mIGZpbGVzCitDb21waWxpbmcgZmlsZXM6CitzcmMvQmFzZUludGVyZmFjZS5qYXZhCitFbmQgb2YgZmlsZXMKK0NsZWFuaW5nIG91dHB1dCBmaWxlczoKK291dC9wcm9kdWN0aW9uL0FkZEZpZWxkVG9JbnRlcmZhY2UyL0Rlcml2ZWQuY2xhc3MKK0VuZCBvZiBmaWxlcworQ29tcGlsaW5nIGZpbGVzOgorc3JjL0Rlcml2ZWQuamF2YQorRW5kIG9mIGZpbGVzCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZW1iZXJzQ2hhbmdlL2FkZEZpZWxkVG9JbnRlcmZhY2UyL0Jhc2VJbnRlcmZhY2UuamF2YS5uZXcgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZW1iZXJzQ2hhbmdlL2FkZEZpZWxkVG9JbnRlcmZhY2UyL0Jhc2VJbnRlcmZhY2UuamF2YS5uZXcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjk5OWVjMwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21lbWJlcnNDaGFuZ2UvYWRkRmllbGRUb0ludGVyZmFjZTIvQmFzZUludGVyZmFjZS5qYXZhLm5ldwpAQCAtMCwwICsxLDMgQEAKK2ludGVyZmFjZSBCYXNlSW50ZXJmYWNlIHsKKyAgU3RyaW5nIGZpZWxkID0gIkJhc2VJbnRlcmZhY2UiOworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21lbWJlcnNDaGFuZ2UvYWRkRmllbGRUb0ludGVyZmFjZTIvZGF0YS54bWwgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZW1iZXJzQ2hhbmdlL2FkZEZpZWxkVG9JbnRlcmZhY2UyL2RhdGEueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU5ZjFiY2IKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZW1iZXJzQ2hhbmdlL2FkZEZpZWxkVG9JbnRlcmZhY2UyL2RhdGEueG1sCkBAIC0wLDAgKzEsMTAgQEAKKzx0ZXN0RGF0YT4KKyAgPGRlbGV0ZWRfYnlfbWFrZT4KKyAgICA8ZmlsZSBwYXRoPSJjbGFzc2VzL0Jhc2VJbnRlcmZhY2UuY2xhc3MiIC8+CisgICAgPGZpbGUgcGF0aD0iY2xhc3Nlcy9EZXJpdmVkLmNsYXNzIiAvPgorICA8L2RlbGV0ZWRfYnlfbWFrZT4KKworICA8cmVjb21waWxlPgorICAgIDxmaWxlIHBhdGg9InNvdXJjZS9EZXJpdmVkLmphdmEiIC8+CisgIDwvcmVjb21waWxlPgorPC90ZXN0RGF0YT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZW1iZXJzQ2hhbmdlL2FkZEZpZWxkVG9JbnRlcmZhY2UyL3NyYy9CYXNlLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZW1iZXJzQ2hhbmdlL2FkZEZpZWxkVG9JbnRlcmZhY2UyL3NyYy9CYXNlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjg2MWY0YgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21lbWJlcnNDaGFuZ2UvYWRkRmllbGRUb0ludGVyZmFjZTIvc3JjL0Jhc2UuamF2YQpAQCAtMCwwICsxLDMgQEAKK2NsYXNzIEJhc2UgeworIFN0cmluZyBmaWVsZCA9ICJCYXNlIjsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZW1iZXJzQ2hhbmdlL2FkZEZpZWxkVG9JbnRlcmZhY2UyL3NyYy9CYXNlSW50ZXJmYWNlLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZW1iZXJzQ2hhbmdlL2FkZEZpZWxkVG9JbnRlcmZhY2UyL3NyYy9CYXNlSW50ZXJmYWNlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDZmYmI4YgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21lbWJlcnNDaGFuZ2UvYWRkRmllbGRUb0ludGVyZmFjZTIvc3JjL0Jhc2VJbnRlcmZhY2UuamF2YQpAQCAtMCwwICsxLDIgQEAKK2ludGVyZmFjZSBCYXNlSW50ZXJmYWNlIHsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZW1iZXJzQ2hhbmdlL2FkZEZpZWxkVG9JbnRlcmZhY2UyL3NyYy9EZXJpdmVkLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZW1iZXJzQ2hhbmdlL2FkZEZpZWxkVG9JbnRlcmZhY2UyL3NyYy9EZXJpdmVkLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzAwMjU2OAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21lbWJlcnNDaGFuZ2UvYWRkRmllbGRUb0ludGVyZmFjZTIvc3JjL0Rlcml2ZWQuamF2YQpAQCAtMCwwICsxLDkgQEAKK2NsYXNzIERlcml2ZWQgZXh0ZW5kcyBCYXNlIGltcGxlbWVudHMgQmFzZUludGVyZmFjZSB7CisgIHZvaWQgZm9vKCkgeworICAgIFN5c3RlbS5vdXQucHJpbnRsbihmaWVsZCk7CisgIH0KKworICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisgICAgbmV3IERlcml2ZWQoKS5mb28oKTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21lbWJlcnNDaGFuZ2UvYWRkRmluYWxNZXRob2RIYXZpbmdOb25GaW5hbE1ldGhvZEluU3ViY2xhc3MubG9nIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWVtYmVyc0NoYW5nZS9hZGRGaW5hbE1ldGhvZEhhdmluZ05vbkZpbmFsTWV0aG9kSW5TdWJjbGFzcy5sb2cKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWFmY2RlMAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21lbWJlcnNDaGFuZ2UvYWRkRmluYWxNZXRob2RIYXZpbmdOb25GaW5hbE1ldGhvZEluU3ViY2xhc3MubG9nCkBAIC0wLDAgKzEsMTIgQEAKK0NsZWFuaW5nIG91dHB1dCBmaWxlczoKK291dC9wcm9kdWN0aW9uL0FkZEZpbmFsTWV0aG9kSGF2aW5nTm9uRmluYWxNZXRob2RJblN1YmNsYXNzL0Jhc2VTZXJ2ZXIuY2xhc3MKK0VuZCBvZiBmaWxlcworQ29tcGlsaW5nIGZpbGVzOgorc3JjL0Jhc2VTZXJ2ZXIuamF2YQorRW5kIG9mIGZpbGVzCitDbGVhbmluZyBvdXRwdXQgZmlsZXM6CitvdXQvcHJvZHVjdGlvbi9BZGRGaW5hbE1ldGhvZEhhdmluZ05vbkZpbmFsTWV0aG9kSW5TdWJjbGFzcy9TZXJ2ZXIuY2xhc3MKK0VuZCBvZiBmaWxlcworQ29tcGlsaW5nIGZpbGVzOgorc3JjL1NlcnZlci5qYXZhCitFbmQgb2YgZmlsZXMKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21lbWJlcnNDaGFuZ2UvYWRkRmluYWxNZXRob2RIYXZpbmdOb25GaW5hbE1ldGhvZEluU3ViY2xhc3MvQmFzZVNlcnZlci5qYXZhLm5ldyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21lbWJlcnNDaGFuZ2UvYWRkRmluYWxNZXRob2RIYXZpbmdOb25GaW5hbE1ldGhvZEluU3ViY2xhc3MvQmFzZVNlcnZlci5qYXZhLm5ldwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MWUzZTQ2Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWVtYmVyc0NoYW5nZS9hZGRGaW5hbE1ldGhvZEhhdmluZ05vbkZpbmFsTWV0aG9kSW5TdWJjbGFzcy9CYXNlU2VydmVyLmphdmEubmV3CkBAIC0wLDAgKzEsNSBAQAorcHVibGljIGNsYXNzIEJhc2VTZXJ2ZXIgeworICBwdWJsaWMgZmluYWwgSW50ZWdlciBtZXRob2QoKSB7CisgICAgcmV0dXJuIG5ldyBJbnRlZ2VyKDEwKTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWVtYmVyc0NoYW5nZS9hZGRGaW5hbE1ldGhvZEhhdmluZ05vbkZpbmFsTWV0aG9kSW5TdWJjbGFzcy9kYXRhLnhtbCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21lbWJlcnNDaGFuZ2UvYWRkRmluYWxNZXRob2RIYXZpbmdOb25GaW5hbE1ldGhvZEluU3ViY2xhc3MvZGF0YS54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTU5NzgxZQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21lbWJlcnNDaGFuZ2UvYWRkRmluYWxNZXRob2RIYXZpbmdOb25GaW5hbE1ldGhvZEluU3ViY2xhc3MvZGF0YS54bWwKQEAgLTAsMCArMSwxMiBAQAorPHRlc3REYXRhPgorCisgIDxkZWxldGVkX2J5X21ha2U+CisgICAgPGZpbGUgcGF0aD0iY2xhc3Nlcy9CYXNlU2VydmVyLmNsYXNzIiAvPgorICAgIDxmaWxlIHBhdGg9ImNsYXNzZXMvU2VydmVyLmNsYXNzIiAvPgorICA8L2RlbGV0ZWRfYnlfbWFrZT4KKworICA8cmVjb21waWxlPgorICAgIDxmaWxlIHBhdGg9InNvdXJjZS9TZXJ2ZXIuamF2YSIgLz4KKyAgPC9yZWNvbXBpbGU+CisKKzwvdGVzdERhdGE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWVtYmVyc0NoYW5nZS9hZGRGaW5hbE1ldGhvZEhhdmluZ05vbkZpbmFsTWV0aG9kSW5TdWJjbGFzcy9zcmMvQmFzZVNlcnZlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWVtYmVyc0NoYW5nZS9hZGRGaW5hbE1ldGhvZEhhdmluZ05vbkZpbmFsTWV0aG9kSW5TdWJjbGFzcy9zcmMvQmFzZVNlcnZlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMzZjliN2IKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZW1iZXJzQ2hhbmdlL2FkZEZpbmFsTWV0aG9kSGF2aW5nTm9uRmluYWxNZXRob2RJblN1YmNsYXNzL3NyYy9CYXNlU2VydmVyLmphdmEKQEAgLTAsMCArMSwyIEBACitwdWJsaWMgY2xhc3MgQmFzZVNlcnZlciB7Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZW1iZXJzQ2hhbmdlL2FkZEZpbmFsTWV0aG9kSGF2aW5nTm9uRmluYWxNZXRob2RJblN1YmNsYXNzL3NyYy9TZXJ2ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21lbWJlcnNDaGFuZ2UvYWRkRmluYWxNZXRob2RIYXZpbmdOb25GaW5hbE1ldGhvZEluU3ViY2xhc3Mvc3JjL1NlcnZlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdiNzhlY2MKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZW1iZXJzQ2hhbmdlL2FkZEZpbmFsTWV0aG9kSGF2aW5nTm9uRmluYWxNZXRob2RJblN1YmNsYXNzL3NyYy9TZXJ2ZXIuamF2YQpAQCAtMCwwICsxLDUgQEAKK3B1YmxpYyBjbGFzcyBTZXJ2ZXIgZXh0ZW5kcyBCYXNlU2VydmVyIHsKKyAgcHVibGljIEludGVnZXIgbWV0aG9kKCkgeworICAgIHJldHVybiBuZXcgSW50ZWdlcigxMCk7CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21lbWJlcnNDaGFuZ2UvYWRkSGlkaW5nRmllbGQubG9nIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWVtYmVyc0NoYW5nZS9hZGRIaWRpbmdGaWVsZC5sb2cKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjJjNmJkZQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21lbWJlcnNDaGFuZ2UvYWRkSGlkaW5nRmllbGQubG9nCkBAIC0wLDAgKzEsMTMgQEAKK0NsZWFuaW5nIG91dHB1dCBmaWxlczoKK291dC9wcm9kdWN0aW9uL0FkZEhpZGluZ0ZpZWxkL0Jhc2VBY3Rpb24uY2xhc3MKK0VuZCBvZiBmaWxlcworQ29tcGlsaW5nIGZpbGVzOgorc3JjL0Jhc2VBY3Rpb24uamF2YQorRW5kIG9mIGZpbGVzCitDbGVhbmluZyBvdXRwdXQgZmlsZXM6CitvdXQvcHJvZHVjdGlvbi9BZGRIaWRpbmdGaWVsZC9DbGllbnQkMS5jbGFzcworb3V0L3Byb2R1Y3Rpb24vQWRkSGlkaW5nRmllbGQvQ2xpZW50LmNsYXNzCitFbmQgb2YgZmlsZXMKK0NvbXBpbGluZyBmaWxlczoKK3NyYy9DbGllbnQuamF2YQorRW5kIG9mIGZpbGVzCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZW1iZXJzQ2hhbmdlL2FkZEhpZGluZ0ZpZWxkL0Jhc2VBY3Rpb24uamF2YS5uZXcgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZW1iZXJzQ2hhbmdlL2FkZEhpZGluZ0ZpZWxkL0Jhc2VBY3Rpb24uamF2YS5uZXcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWM4ZDMyMAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21lbWJlcnNDaGFuZ2UvYWRkSGlkaW5nRmllbGQvQmFzZUFjdGlvbi5qYXZhLm5ldwpAQCAtMCwwICsxLDcgQEAKK3B1YmxpYyBhYnN0cmFjdCBjbGFzcyBCYXNlQWN0aW9uIHsKKyAgaW50IGZpZWxkID0gOTk5OworCisgIHB1YmxpYyBhYnN0cmFjdCB2b2lkIGFjdGlvbigpOworCisKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZW1iZXJzQ2hhbmdlL2FkZEhpZGluZ0ZpZWxkL2RhdGEueG1sIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWVtYmVyc0NoYW5nZS9hZGRIaWRpbmdGaWVsZC9kYXRhLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MjhjMDVhCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWVtYmVyc0NoYW5nZS9hZGRIaWRpbmdGaWVsZC9kYXRhLnhtbApAQCAtMCwwICsxLDEyIEBACis8dGVzdERhdGE+CisgIDxkZWxldGVkX2J5X21ha2U+CisgICAgPGZpbGUgcGF0aD0iY2xhc3Nlcy9CYXNlQWN0aW9uLmNsYXNzIiAvPgorICAgIDxmaWxlIHBhdGg9ImNsYXNzZXMvQ2xpZW50LmNsYXNzIiAvPgorICAgIDxmaWxlIHBhdGg9ImNsYXNzZXMvQ2xpZW50JDEuY2xhc3MiIC8+CisgIDwvZGVsZXRlZF9ieV9tYWtlPgorCisgIDxyZWNvbXBpbGU+CisgICAgPGZpbGUgcGF0aD0ic291cmNlL0NsaWVudC5qYXZhIiAvPgorICA8L3JlY29tcGlsZT4KKworPC90ZXN0RGF0YT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZW1iZXJzQ2hhbmdlL2FkZEhpZGluZ0ZpZWxkL3NyYy9CYXNlQWN0aW9uLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZW1iZXJzQ2hhbmdlL2FkZEhpZGluZ0ZpZWxkL3NyYy9CYXNlQWN0aW9uLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTUwNWJkNgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21lbWJlcnNDaGFuZ2UvYWRkSGlkaW5nRmllbGQvc3JjL0Jhc2VBY3Rpb24uamF2YQpAQCAtMCwwICsxLDMgQEAKK3B1YmxpYyBhYnN0cmFjdCBjbGFzcyBCYXNlQWN0aW9uIHsKKyAgcHVibGljIGFic3RyYWN0IHZvaWQgYWN0aW9uKCk7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWVtYmVyc0NoYW5nZS9hZGRIaWRpbmdGaWVsZC9zcmMvQmFzZUNsaWVudC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWVtYmVyc0NoYW5nZS9hZGRIaWRpbmdGaWVsZC9zcmMvQmFzZUNsaWVudC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE1NzUzNmMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZW1iZXJzQ2hhbmdlL2FkZEhpZGluZ0ZpZWxkL3NyYy9CYXNlQ2xpZW50LmphdmEKQEAgLTAsMCArMSwzIEBACitwdWJsaWMgY2xhc3MgQmFzZUNsaWVudCB7CisgIGludCBmaWVsZCA9IDc3NzsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZW1iZXJzQ2hhbmdlL2FkZEhpZGluZ0ZpZWxkL3NyYy9DbGllbnQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21lbWJlcnNDaGFuZ2UvYWRkSGlkaW5nRmllbGQvc3JjL0NsaWVudC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg4ZWQzMDgKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZW1iZXJzQ2hhbmdlL2FkZEhpZGluZ0ZpZWxkL3NyYy9DbGllbnQuamF2YQpAQCAtMCwwICsxLDkgQEAKK3B1YmxpYyBjbGFzcyBDbGllbnQgZXh0ZW5kcyBCYXNlQ2xpZW50eworICBwdWJsaWMgdm9pZCBjYWxjdWxhdGlvbigpIHsKKyAgICBuZXcgQmFzZUFjdGlvbigpIHsKKyAgICAgICBwdWJsaWMgdm9pZCBhY3Rpb24oKSB7CisgICAgICAgICAgaW50IGRhdGEgPSBmaWVsZDsKKyAgICAgICB9CisgICAgfS5hY3Rpb24oKTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21lbWJlcnNDaGFuZ2UvYWRkSGlkaW5nTWV0aG9kLmxvZyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21lbWJlcnNDaGFuZ2UvYWRkSGlkaW5nTWV0aG9kLmxvZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOTVkMzU0Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWVtYmVyc0NoYW5nZS9hZGRIaWRpbmdNZXRob2QubG9nCkBAIC0wLDAgKzEsMTMgQEAKK0NsZWFuaW5nIG91dHB1dCBmaWxlczoKK291dC9wcm9kdWN0aW9uL0FkZEhpZGluZ01ldGhvZC9CYXNlQWN0aW9uLmNsYXNzCitFbmQgb2YgZmlsZXMKK0NvbXBpbGluZyBmaWxlczoKK3NyYy9CYXNlQWN0aW9uLmphdmEKK0VuZCBvZiBmaWxlcworQ2xlYW5pbmcgb3V0cHV0IGZpbGVzOgorb3V0L3Byb2R1Y3Rpb24vQWRkSGlkaW5nTWV0aG9kL0NsaWVudCQxLmNsYXNzCitvdXQvcHJvZHVjdGlvbi9BZGRIaWRpbmdNZXRob2QvQ2xpZW50LmNsYXNzCitFbmQgb2YgZmlsZXMKK0NvbXBpbGluZyBmaWxlczoKK3NyYy9DbGllbnQuamF2YQorRW5kIG9mIGZpbGVzCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZW1iZXJzQ2hhbmdlL2FkZEhpZGluZ01ldGhvZC9CYXNlQWN0aW9uLmphdmEubmV3IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWVtYmVyc0NoYW5nZS9hZGRIaWRpbmdNZXRob2QvQmFzZUFjdGlvbi5qYXZhLm5ldwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNzllNjkwCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWVtYmVyc0NoYW5nZS9hZGRIaWRpbmdNZXRob2QvQmFzZUFjdGlvbi5qYXZhLm5ldwpAQCAtMCwwICsxLDggQEAKK3B1YmxpYyBhYnN0cmFjdCBjbGFzcyBCYXNlQWN0aW9uIHsKKyAgcHVibGljIGFic3RyYWN0IHZvaWQgYWN0aW9uKCk7CisKKyAgcHVibGljIGludCBnZXREYXRhKCkgeworICAgICByZXR1cm4gMTA7CisgIH0KKworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21lbWJlcnNDaGFuZ2UvYWRkSGlkaW5nTWV0aG9kL2RhdGEueG1sIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWVtYmVyc0NoYW5nZS9hZGRIaWRpbmdNZXRob2QvZGF0YS54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDI4YzA1YQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21lbWJlcnNDaGFuZ2UvYWRkSGlkaW5nTWV0aG9kL2RhdGEueG1sCkBAIC0wLDAgKzEsMTIgQEAKKzx0ZXN0RGF0YT4KKyAgPGRlbGV0ZWRfYnlfbWFrZT4KKyAgICA8ZmlsZSBwYXRoPSJjbGFzc2VzL0Jhc2VBY3Rpb24uY2xhc3MiIC8+CisgICAgPGZpbGUgcGF0aD0iY2xhc3Nlcy9DbGllbnQuY2xhc3MiIC8+CisgICAgPGZpbGUgcGF0aD0iY2xhc3Nlcy9DbGllbnQkMS5jbGFzcyIgLz4KKyAgPC9kZWxldGVkX2J5X21ha2U+CisKKyAgPHJlY29tcGlsZT4KKyAgICA8ZmlsZSBwYXRoPSJzb3VyY2UvQ2xpZW50LmphdmEiIC8+CisgIDwvcmVjb21waWxlPgorCis8L3Rlc3REYXRhPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21lbWJlcnNDaGFuZ2UvYWRkSGlkaW5nTWV0aG9kL3NyYy9CYXNlQWN0aW9uLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZW1iZXJzQ2hhbmdlL2FkZEhpZGluZ01ldGhvZC9zcmMvQmFzZUFjdGlvbi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE1MDViZDYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZW1iZXJzQ2hhbmdlL2FkZEhpZGluZ01ldGhvZC9zcmMvQmFzZUFjdGlvbi5qYXZhCkBAIC0wLDAgKzEsMyBAQAorcHVibGljIGFic3RyYWN0IGNsYXNzIEJhc2VBY3Rpb24geworICBwdWJsaWMgYWJzdHJhY3Qgdm9pZCBhY3Rpb24oKTsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZW1iZXJzQ2hhbmdlL2FkZEhpZGluZ01ldGhvZC9zcmMvQmFzZUNsaWVudC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWVtYmVyc0NoYW5nZS9hZGRIaWRpbmdNZXRob2Qvc3JjL0Jhc2VDbGllbnQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jODJkOWRiCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWVtYmVyc0NoYW5nZS9hZGRIaWRpbmdNZXRob2Qvc3JjL0Jhc2VDbGllbnQuamF2YQpAQCAtMCwwICsxLDUgQEAKK3B1YmxpYyBjbGFzcyBCYXNlQ2xpZW50IHsKKyAgcHVibGljIGludCBnZXREYXRhKCkgeworICAgICByZXR1cm4gMTA7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZW1iZXJzQ2hhbmdlL2FkZEhpZGluZ01ldGhvZC9zcmMvQ2xpZW50LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZW1iZXJzQ2hhbmdlL2FkZEhpZGluZ01ldGhvZC9zcmMvQ2xpZW50LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzUzZTM0MQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21lbWJlcnNDaGFuZ2UvYWRkSGlkaW5nTWV0aG9kL3NyYy9DbGllbnQuamF2YQpAQCAtMCwwICsxLDkgQEAKK3B1YmxpYyBjbGFzcyBDbGllbnQgZXh0ZW5kcyBCYXNlQ2xpZW50eworICBwdWJsaWMgdm9pZCBjYWxjdWxhdGlvbigpIHsKKyAgICBuZXcgQmFzZUFjdGlvbigpIHsKKyAgICAgICBwdWJsaWMgdm9pZCBhY3Rpb24oKSB7CisgICAgICAgICAgaW50IGRhdGEgPSBnZXREYXRhKCk7CisgICAgICAgfQorICAgIH0uYWN0aW9uKCk7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZW1iZXJzQ2hhbmdlL2FkZEludGVyZmFjZU1ldGhvZC5sb2cgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZW1iZXJzQ2hhbmdlL2FkZEludGVyZmFjZU1ldGhvZC5sb2cKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjM4ZGY4MgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21lbWJlcnNDaGFuZ2UvYWRkSW50ZXJmYWNlTWV0aG9kLmxvZwpAQCAtMCwwICsxLDEyIEBACitDbGVhbmluZyBvdXRwdXQgZmlsZXM6CitvdXQvcHJvZHVjdGlvbi9BZGRJbnRlcmZhY2VNZXRob2QvU2VydmljZS5jbGFzcworRW5kIG9mIGZpbGVzCitDb21waWxpbmcgZmlsZXM6CitzcmMvU2VydmljZS5qYXZhCitFbmQgb2YgZmlsZXMKK0NsZWFuaW5nIG91dHB1dCBmaWxlczoKK291dC9wcm9kdWN0aW9uL0FkZEludGVyZmFjZU1ldGhvZC9TZXJ2aWNlSW1wbC5jbGFzcworRW5kIG9mIGZpbGVzCitDb21waWxpbmcgZmlsZXM6CitzcmMvU2VydmljZUltcGwuamF2YQorRW5kIG9mIGZpbGVzCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZW1iZXJzQ2hhbmdlL2FkZEludGVyZmFjZU1ldGhvZC9TZXJ2aWNlLmphdmEubmV3IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWVtYmVyc0NoYW5nZS9hZGRJbnRlcmZhY2VNZXRob2QvU2VydmljZS5qYXZhLm5ldwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZjViMGExCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWVtYmVyc0NoYW5nZS9hZGRJbnRlcmZhY2VNZXRob2QvU2VydmljZS5qYXZhLm5ldwpAQCAtMCwwICsxLDQgQEAKK2ludGVyZmFjZSBTZXJ2aWNlIHsKKyAgdm9pZCBmb28oKTsKKyAgdm9pZCBiYXIoaW50IGEpOworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21lbWJlcnNDaGFuZ2UvYWRkSW50ZXJmYWNlTWV0aG9kL2RhdGEueG1sIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWVtYmVyc0NoYW5nZS9hZGRJbnRlcmZhY2VNZXRob2QvZGF0YS54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDNjMDVhMAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21lbWJlcnNDaGFuZ2UvYWRkSW50ZXJmYWNlTWV0aG9kL2RhdGEueG1sCkBAIC0wLDAgKzEsMTIgQEAKKzx0ZXN0RGF0YT4KKworICA8ZGVsZXRlZF9ieV9tYWtlPgorICAgIDxmaWxlIHBhdGg9ImNsYXNzZXMvU2VydmljZS5jbGFzcyIgLz4KKyAgICA8ZmlsZSBwYXRoPSJjbGFzc2VzL1NlcnZpY2VJbXBsLmNsYXNzIiAvPgorICA8L2RlbGV0ZWRfYnlfbWFrZT4KKworICA8cmVjb21waWxlPgorICAgIDxmaWxlIHBhdGg9InNvdXJjZS9TZXJ2aWNlSW1wbC5qYXZhIiAvPgorICA8L3JlY29tcGlsZT4KKworPC90ZXN0RGF0YT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZW1iZXJzQ2hhbmdlL2FkZEludGVyZmFjZU1ldGhvZC9zcmMvU2VydmljZS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWVtYmVyc0NoYW5nZS9hZGRJbnRlcmZhY2VNZXRob2Qvc3JjL1NlcnZpY2UuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45N2MxMTNmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWVtYmVyc0NoYW5nZS9hZGRJbnRlcmZhY2VNZXRob2Qvc3JjL1NlcnZpY2UuamF2YQpAQCAtMCwwICsxLDMgQEAKK2ludGVyZmFjZSBTZXJ2aWNlIHsKKyAgdm9pZCBmb28oKTsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZW1iZXJzQ2hhbmdlL2FkZEludGVyZmFjZU1ldGhvZC9zcmMvU2VydmljZUltcGwuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21lbWJlcnNDaGFuZ2UvYWRkSW50ZXJmYWNlTWV0aG9kL3NyYy9TZXJ2aWNlSW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRmYWU1ZTAKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZW1iZXJzQ2hhbmdlL2FkZEludGVyZmFjZU1ldGhvZC9zcmMvU2VydmljZUltcGwuamF2YQpAQCAtMCwwICsxLDQgQEAKK3B1YmxpYyBjbGFzcyBTZXJ2aWNlSW1wbCBpbXBsZW1lbnRzIFNlcnZpY2UgeworICBwdWJsaWMgdm9pZCBmb28oKSB7CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21lbWJlcnNDaGFuZ2UvYWRkSW50ZXJmYWNlTWV0aG9kMi5sb2cgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZW1iZXJzQ2hhbmdlL2FkZEludGVyZmFjZU1ldGhvZDIubG9nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY5NmVmODUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZW1iZXJzQ2hhbmdlL2FkZEludGVyZmFjZU1ldGhvZDIubG9nCkBAIC0wLDAgKzEsMTQgQEAKK0NsZWFuaW5nIG91dHB1dCBmaWxlczoKK291dC9wcm9kdWN0aW9uL0FkZEludGVyZmFjZU1ldGhvZDIvU2VydmljZS5jbGFzcworRW5kIG9mIGZpbGVzCitDb21waWxpbmcgZmlsZXM6CitzcmMvU2VydmljZS5qYXZhCitFbmQgb2YgZmlsZXMKK0NsZWFuaW5nIG91dHB1dCBmaWxlczoKK291dC9wcm9kdWN0aW9uL0FkZEludGVyZmFjZU1ldGhvZDIvRGVyaXZlZFNlcnZpY2UuY2xhc3MKK291dC9wcm9kdWN0aW9uL0FkZEludGVyZmFjZU1ldGhvZDIvU2VydmljZUltcGwuY2xhc3MKK0VuZCBvZiBmaWxlcworQ29tcGlsaW5nIGZpbGVzOgorc3JjL0Rlcml2ZWRTZXJ2aWNlLmphdmEKK3NyYy9TZXJ2aWNlSW1wbC5qYXZhCitFbmQgb2YgZmlsZXMKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21lbWJlcnNDaGFuZ2UvYWRkSW50ZXJmYWNlTWV0aG9kMi9TZXJ2aWNlLmphdmEubmV3IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWVtYmVyc0NoYW5nZS9hZGRJbnRlcmZhY2VNZXRob2QyL1NlcnZpY2UuamF2YS5uZXcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2Y1YjBhMQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21lbWJlcnNDaGFuZ2UvYWRkSW50ZXJmYWNlTWV0aG9kMi9TZXJ2aWNlLmphdmEubmV3CkBAIC0wLDAgKzEsNCBAQAoraW50ZXJmYWNlIFNlcnZpY2UgeworICB2b2lkIGZvbygpOworICB2b2lkIGJhcihpbnQgYSk7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWVtYmVyc0NoYW5nZS9hZGRJbnRlcmZhY2VNZXRob2QyL2RhdGEueG1sIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWVtYmVyc0NoYW5nZS9hZGRJbnRlcmZhY2VNZXRob2QyL2RhdGEueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUwM2U1OGMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZW1iZXJzQ2hhbmdlL2FkZEludGVyZmFjZU1ldGhvZDIvZGF0YS54bWwKQEAgLTAsMCArMSwxNCBAQAorPHRlc3REYXRhPgorCisgIDxkZWxldGVkX2J5X21ha2U+CisgICAgPGZpbGUgcGF0aD0iY2xhc3Nlcy9TZXJ2aWNlLmNsYXNzIiAvPgorICAgIDxmaWxlIHBhdGg9ImNsYXNzZXMvU2VydmljZUltcGwuY2xhc3MiIC8+CisgICAgPGZpbGUgcGF0aD0iY2xhc3Nlcy9EZXJpdmVkU2VydmljZS5jbGFzcyIgLz4KKyAgPC9kZWxldGVkX2J5X21ha2U+CisKKyAgPHJlY29tcGlsZT4KKyAgICA8ZmlsZSBwYXRoPSJzb3VyY2UvU2VydmljZUltcGwuamF2YSIgLz4KKyAgICA8ZmlsZSBwYXRoPSJzb3VyY2UvRGVyaXZlZFNlcnZpY2UuamF2YSIgLz4KKyAgPC9yZWNvbXBpbGU+CisKKzwvdGVzdERhdGE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWVtYmVyc0NoYW5nZS9hZGRJbnRlcmZhY2VNZXRob2QyL3NyYy9EZXJpdmVkU2VydmljZS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWVtYmVyc0NoYW5nZS9hZGRJbnRlcmZhY2VNZXRob2QyL3NyYy9EZXJpdmVkU2VydmljZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRhYjQyODcKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZW1iZXJzQ2hhbmdlL2FkZEludGVyZmFjZU1ldGhvZDIvc3JjL0Rlcml2ZWRTZXJ2aWNlLmphdmEKQEAgLTAsMCArMSwyIEBACitpbnRlcmZhY2UgRGVyaXZlZFNlcnZpY2UgZXh0ZW5kcyBTZXJ2aWNlIHsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZW1iZXJzQ2hhbmdlL2FkZEludGVyZmFjZU1ldGhvZDIvc3JjL1NlcnZpY2UuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21lbWJlcnNDaGFuZ2UvYWRkSW50ZXJmYWNlTWV0aG9kMi9zcmMvU2VydmljZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk3YzExM2YKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZW1iZXJzQ2hhbmdlL2FkZEludGVyZmFjZU1ldGhvZDIvc3JjL1NlcnZpY2UuamF2YQpAQCAtMCwwICsxLDMgQEAKK2ludGVyZmFjZSBTZXJ2aWNlIHsKKyAgdm9pZCBmb28oKTsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZW1iZXJzQ2hhbmdlL2FkZEludGVyZmFjZU1ldGhvZDIvc3JjL1NlcnZpY2VJbXBsLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZW1iZXJzQ2hhbmdlL2FkZEludGVyZmFjZU1ldGhvZDIvc3JjL1NlcnZpY2VJbXBsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjY4NTI1MwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21lbWJlcnNDaGFuZ2UvYWRkSW50ZXJmYWNlTWV0aG9kMi9zcmMvU2VydmljZUltcGwuamF2YQpAQCAtMCwwICsxLDQgQEAKK3B1YmxpYyBjbGFzcyBTZXJ2aWNlSW1wbCBpbXBsZW1lbnRzIERlcml2ZWRTZXJ2aWNlIHsKKyAgcHVibGljIHZvaWQgZm9vKCkgeworICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZW1iZXJzQ2hhbmdlL2FkZExlc3NBY2Nlc3NpYmxlRmllbGRUb0Rlcml2ZWQubG9nIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWVtYmVyc0NoYW5nZS9hZGRMZXNzQWNjZXNzaWJsZUZpZWxkVG9EZXJpdmVkLmxvZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZTQzNTMwCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWVtYmVyc0NoYW5nZS9hZGRMZXNzQWNjZXNzaWJsZUZpZWxkVG9EZXJpdmVkLmxvZwpAQCAtMCwwICsxLDEyIEBACitDbGVhbmluZyBvdXRwdXQgZmlsZXM6CitvdXQvcHJvZHVjdGlvbi9BZGRMZXNzQWNjZXNzaWJsZUZpZWxkVG9EZXJpdmVkL0Rlcml2ZWQuY2xhc3MKK0VuZCBvZiBmaWxlcworQ29tcGlsaW5nIGZpbGVzOgorc3JjL0Rlcml2ZWQuamF2YQorRW5kIG9mIGZpbGVzCitDbGVhbmluZyBvdXRwdXQgZmlsZXM6CitvdXQvcHJvZHVjdGlvbi9BZGRMZXNzQWNjZXNzaWJsZUZpZWxkVG9EZXJpdmVkL0NsaWVudC5jbGFzcworRW5kIG9mIGZpbGVzCitDb21waWxpbmcgZmlsZXM6CitzcmMvQ2xpZW50LmphdmEKK0VuZCBvZiBmaWxlcwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWVtYmVyc0NoYW5nZS9hZGRMZXNzQWNjZXNzaWJsZUZpZWxkVG9EZXJpdmVkL0Rlcml2ZWQuamF2YS5uZXcgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZW1iZXJzQ2hhbmdlL2FkZExlc3NBY2Nlc3NpYmxlRmllbGRUb0Rlcml2ZWQvRGVyaXZlZC5qYXZhLm5ldwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40Y2NiZmFkCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWVtYmVyc0NoYW5nZS9hZGRMZXNzQWNjZXNzaWJsZUZpZWxkVG9EZXJpdmVkL0Rlcml2ZWQuamF2YS5uZXcKQEAgLTAsMCArMSwzIEBACitjbGFzcyBEZXJpdmVkIGV4dGVuZHMgQmFzZSB7CisgIHByaXZhdGUgU3RyaW5nIG15RmllbGQgPSAiRGVyaXZlZC5teUZpZWxkIjsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZW1iZXJzQ2hhbmdlL2FkZExlc3NBY2Nlc3NpYmxlRmllbGRUb0Rlcml2ZWQvZGF0YS54bWwgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZW1iZXJzQ2hhbmdlL2FkZExlc3NBY2Nlc3NpYmxlRmllbGRUb0Rlcml2ZWQvZGF0YS54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDlmODU0OAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21lbWJlcnNDaGFuZ2UvYWRkTGVzc0FjY2Vzc2libGVGaWVsZFRvRGVyaXZlZC9kYXRhLnhtbApAQCAtMCwwICsxLDEwIEBACis8dGVzdERhdGE+CisgIDxkZWxldGVkX2J5X21ha2U+CisgICAgPGZpbGUgcGF0aD0iY2xhc3Nlcy9EZXJpdmVkLmNsYXNzIiAvPgorICAgIDxmaWxlIHBhdGg9ImNsYXNzZXMvQ2xpZW50LmNsYXNzIiAvPgorICA8L2RlbGV0ZWRfYnlfbWFrZT4KKworICA8cmVjb21waWxlPgorICAgIDxmaWxlIHBhdGg9InNvdXJjZS9DbGllbnQuamF2YSIgLz4KKyAgPC9yZWNvbXBpbGU+Cis8L3Rlc3REYXRhPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21lbWJlcnNDaGFuZ2UvYWRkTGVzc0FjY2Vzc2libGVGaWVsZFRvRGVyaXZlZC9zcmMvQmFzZS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWVtYmVyc0NoYW5nZS9hZGRMZXNzQWNjZXNzaWJsZUZpZWxkVG9EZXJpdmVkL3NyYy9CYXNlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjk4NzUyZgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21lbWJlcnNDaGFuZ2UvYWRkTGVzc0FjY2Vzc2libGVGaWVsZFRvRGVyaXZlZC9zcmMvQmFzZS5qYXZhCkBAIC0wLDAgKzEsMyBAQAorY2xhc3MgQmFzZSB7CisgU3RyaW5nIG15RmllbGQgPSAiQmFzZS5teUZpZWxkIjsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZW1iZXJzQ2hhbmdlL2FkZExlc3NBY2Nlc3NpYmxlRmllbGRUb0Rlcml2ZWQvc3JjL0NsaWVudC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWVtYmVyc0NoYW5nZS9hZGRMZXNzQWNjZXNzaWJsZUZpZWxkVG9EZXJpdmVkL3NyYy9DbGllbnQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYWQ2M2QyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWVtYmVyc0NoYW5nZS9hZGRMZXNzQWNjZXNzaWJsZUZpZWxkVG9EZXJpdmVkL3NyYy9DbGllbnQuamF2YQpAQCAtMCwwICsxLDUgQEAKK2NsYXNzIENsaWVudCB7CisgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKwkJU3lzdGVtLm91dC5wcmludGxuKG5ldyBEZXJpdmVkKCkubXlGaWVsZCk7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZW1iZXJzQ2hhbmdlL2FkZExlc3NBY2Nlc3NpYmxlRmllbGRUb0Rlcml2ZWQvc3JjL0Rlcml2ZWQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21lbWJlcnNDaGFuZ2UvYWRkTGVzc0FjY2Vzc2libGVGaWVsZFRvRGVyaXZlZC9zcmMvRGVyaXZlZC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZmZGZhYjUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZW1iZXJzQ2hhbmdlL2FkZExlc3NBY2Nlc3NpYmxlRmllbGRUb0Rlcml2ZWQvc3JjL0Rlcml2ZWQuamF2YQpAQCAtMCwwICsxLDIgQEAKK2NsYXNzIERlcml2ZWQgZXh0ZW5kcyBCYXNlIHsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZW1iZXJzQ2hhbmdlL2FkZE1ldGhvZC5sb2cgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZW1iZXJzQ2hhbmdlL2FkZE1ldGhvZC5sb2cKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzE2ZTRiZQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21lbWJlcnNDaGFuZ2UvYWRkTWV0aG9kLmxvZwpAQCAtMCwwICsxLDEyIEBACitDbGVhbmluZyBvdXRwdXQgZmlsZXM6CitvdXQvcHJvZHVjdGlvbi9BZGRNZXRob2QvQS5jbGFzcworRW5kIG9mIGZpbGVzCitDb21waWxpbmcgZmlsZXM6CitzcmMvQS5qYXZhCitFbmQgb2YgZmlsZXMKK0NsZWFuaW5nIG91dHB1dCBmaWxlczoKK291dC9wcm9kdWN0aW9uL0FkZE1ldGhvZC9ELmNsYXNzCitFbmQgb2YgZmlsZXMKK0NvbXBpbGluZyBmaWxlczoKK3NyYy9ELmphdmEKK0VuZCBvZiBmaWxlcwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWVtYmVyc0NoYW5nZS9hZGRNZXRob2QvQS5qYXZhLm5ldyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21lbWJlcnNDaGFuZ2UvYWRkTWV0aG9kL0EuamF2YS5uZXcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTU2YzU0NwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21lbWJlcnNDaGFuZ2UvYWRkTWV0aG9kL0EuamF2YS5uZXcKQEAgLTAsMCArMSwxMyBAQAorcHVibGljIGNsYXNzIEEgeworICAgIHZvaWQgZiAoSW50ZWdlciB4KSB7CisKKyAgICB9CisKKyAgICB2b2lkIGYgKEludGVnZXIgeCwgSW50ZWdlciB5KXsKKworICAgIH0KKworICAgIHZvaWQgZiAoU3RyaW5nIHgsIEludGVnZXIgeSl7CisKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWVtYmVyc0NoYW5nZS9hZGRNZXRob2Qvc3JjL0EuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21lbWJlcnNDaGFuZ2UvYWRkTWV0aG9kL3NyYy9BLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjRlZDc0YwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21lbWJlcnNDaGFuZ2UvYWRkTWV0aG9kL3NyYy9BLmphdmEKQEAgLTAsMCArMSwxNiBAQAorLyoqCisgKiBDcmVhdGVkIGJ5IEludGVsbGlKIElERUEuCisgKiBVc2VyOiBkYgorICogRGF0ZTogMTguMTEuMTEKKyAqIFRpbWU6IDE4OjUzCisgKiBUbyBjaGFuZ2UgdGhpcyB0ZW1wbGF0ZSB1c2UgRmlsZSB8IFNldHRpbmdzIHwgRmlsZSBUZW1wbGF0ZXMuCisgKi8KK3B1YmxpYyBjbGFzcyBBIHsKKyAgICB2b2lkIGYgKEludGVnZXIgeCkgeworICAgICAgICAKKyAgICB9CisgICAgCisgICAgdm9pZCBmIChJbnRlZ2VyIHgsIEludGVnZXIgeSl7CisKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZW1iZXJzQ2hhbmdlL2FkZE1ldGhvZC9zcmMvQy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWVtYmVyc0NoYW5nZS9hZGRNZXRob2Qvc3JjL0MuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MDFjNGQ4Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWVtYmVyc0NoYW5nZS9hZGRNZXRob2Qvc3JjL0MuamF2YQpAQCAtMCwwICsxLDEyIEBACisvKioKKyAqIENyZWF0ZWQgYnkgSW50ZWxsaUogSURFQS4KKyAqIFVzZXI6IGRiCisgKiBEYXRlOiAxOC4xMS4xMQorICogVGltZTogMTg6NTQKKyAqIFRvIGNoYW5nZSB0aGlzIHRlbXBsYXRlIHVzZSBGaWxlIHwgU2V0dGluZ3MgfCBGaWxlIFRlbXBsYXRlcy4KKyAqLworcHVibGljIGNsYXNzIEMgeworICAgIHZvaWQgZiAoQSBhKXsKKyAgICAgICAgYS5mKDEpOworICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21lbWJlcnNDaGFuZ2UvYWRkTWV0aG9kL3NyYy9ELmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZW1iZXJzQ2hhbmdlL2FkZE1ldGhvZC9zcmMvRC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQxMzZmM2YKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZW1iZXJzQ2hhbmdlL2FkZE1ldGhvZC9zcmMvRC5qYXZhCkBAIC0wLDAgKzEsMTIgQEAKKy8qKgorICogQ3JlYXRlZCBieSBJbnRlbGxpSiBJREVBLgorICogVXNlcjogZGIKKyAqIERhdGU6IDE4LjExLjExCisgKiBUaW1lOiAxODo1NQorICogVG8gY2hhbmdlIHRoaXMgdGVtcGxhdGUgdXNlIEZpbGUgfCBTZXR0aW5ncyB8IEZpbGUgVGVtcGxhdGVzLgorICovCitwdWJsaWMgY2xhc3MgRCB7CisgICAgdm9pZCBmKEEgYSl7CisgICAgICAgIGEuZigxLCAyKTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZW1iZXJzQ2hhbmdlL2FkZE1ldGhvZFdpdGhDb3ZhcmlhbnRSZXR1cm5UeXBlLmxvZyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21lbWJlcnNDaGFuZ2UvYWRkTWV0aG9kV2l0aENvdmFyaWFudFJldHVyblR5cGUubG9nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYwYjQwMDEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZW1iZXJzQ2hhbmdlL2FkZE1ldGhvZFdpdGhDb3ZhcmlhbnRSZXR1cm5UeXBlLmxvZwpAQCAtMCwwICsxLDE0IEBACitDbGVhbmluZyBvdXRwdXQgZmlsZXM6CitvdXQvcHJvZHVjdGlvbi9BZGRNZXRob2RXaXRoQ292YXJpYW50UmV0dXJuVHlwZS9CYXNlU2VydmVyLmNsYXNzCitvdXQvcHJvZHVjdGlvbi9BZGRNZXRob2RXaXRoQ292YXJpYW50UmV0dXJuVHlwZS9DbGllbnQuY2xhc3MKK0VuZCBvZiBmaWxlcworQ29tcGlsaW5nIGZpbGVzOgorc3JjL0Jhc2VTZXJ2ZXIuamF2YQorc3JjL0NsaWVudC5qYXZhCitFbmQgb2YgZmlsZXMKK0NsZWFuaW5nIG91dHB1dCBmaWxlczoKK291dC9wcm9kdWN0aW9uL0FkZE1ldGhvZFdpdGhDb3ZhcmlhbnRSZXR1cm5UeXBlL1NlcnZlci5jbGFzcworRW5kIG9mIGZpbGVzCitDb21waWxpbmcgZmlsZXM6CitzcmMvU2VydmVyLmphdmEKK0VuZCBvZiBmaWxlcwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWVtYmVyc0NoYW5nZS9hZGRNZXRob2RXaXRoQ292YXJpYW50UmV0dXJuVHlwZS9CYXNlU2VydmVyLmphdmEubmV3IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWVtYmVyc0NoYW5nZS9hZGRNZXRob2RXaXRoQ292YXJpYW50UmV0dXJuVHlwZS9CYXNlU2VydmVyLmphdmEubmV3Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdlODdhZTUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZW1iZXJzQ2hhbmdlL2FkZE1ldGhvZFdpdGhDb3ZhcmlhbnRSZXR1cm5UeXBlL0Jhc2VTZXJ2ZXIuamF2YS5uZXcKQEAgLTAsMCArMSw1IEBACitwdWJsaWMgY2xhc3MgQmFzZVNlcnZlciB7CisgIHB1YmxpYyBFbGVtZW50IG1ldGhvZCgpIHsKKyAgICByZXR1cm4gbmV3IEVsZW1lbnQoKTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWVtYmVyc0NoYW5nZS9hZGRNZXRob2RXaXRoQ292YXJpYW50UmV0dXJuVHlwZS9DbGllbnQuamF2YS5uZXcgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZW1iZXJzQ2hhbmdlL2FkZE1ldGhvZFdpdGhDb3ZhcmlhbnRSZXR1cm5UeXBlL0NsaWVudC5qYXZhLm5ldwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NjNkNzlhCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWVtYmVyc0NoYW5nZS9hZGRNZXRob2RXaXRoQ292YXJpYW50UmV0dXJuVHlwZS9DbGllbnQuamF2YS5uZXcKQEAgLTAsMCArMSw3IEBACitwdWJsaWMgY2xhc3MgQ2xpZW50IHsKKworICBwdWJsaWMgdm9pZCBmb28oQmFzZVNlcnZlciBzZXJ2ZXIpIHsKKyAgICBFbGVtZW50IGVsZW0gPSBzZXJ2ZXIubWV0aG9kKCk7CisgIH0KKworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21lbWJlcnNDaGFuZ2UvYWRkTWV0aG9kV2l0aENvdmFyaWFudFJldHVyblR5cGUvZGF0YS54bWwgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZW1iZXJzQ2hhbmdlL2FkZE1ldGhvZFdpdGhDb3ZhcmlhbnRSZXR1cm5UeXBlL2RhdGEueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc1NTVkOTYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZW1iZXJzQ2hhbmdlL2FkZE1ldGhvZFdpdGhDb3ZhcmlhbnRSZXR1cm5UeXBlL2RhdGEueG1sCkBAIC0wLDAgKzEsMTMgQEAKKzx0ZXN0RGF0YT4KKworICA8ZGVsZXRlZF9ieV9tYWtlPgorICAgIDxmaWxlIHBhdGg9ImNsYXNzZXMvQmFzZVNlcnZlci5jbGFzcyIgLz4KKyAgICA8ZmlsZSBwYXRoPSJjbGFzc2VzL0NsaWVudC5jbGFzcyIgLz4KKyAgICA8ZmlsZSBwYXRoPSJjbGFzc2VzL1NlcnZlci5jbGFzcyIgLz4KKyAgPC9kZWxldGVkX2J5X21ha2U+CisKKyAgPHJlY29tcGlsZT4KKyAgICA8ZmlsZSBwYXRoPSJzb3VyY2UvU2VydmVyLmphdmEiIC8+CisgIDwvcmVjb21waWxlPgorCis8L3Rlc3REYXRhPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21lbWJlcnNDaGFuZ2UvYWRkTWV0aG9kV2l0aENvdmFyaWFudFJldHVyblR5cGUvc3JjL0Jhc2VTZXJ2ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21lbWJlcnNDaGFuZ2UvYWRkTWV0aG9kV2l0aENvdmFyaWFudFJldHVyblR5cGUvc3JjL0Jhc2VTZXJ2ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zM2Y5YjdiCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWVtYmVyc0NoYW5nZS9hZGRNZXRob2RXaXRoQ292YXJpYW50UmV0dXJuVHlwZS9zcmMvQmFzZVNlcnZlci5qYXZhCkBAIC0wLDAgKzEsMiBAQAorcHVibGljIGNsYXNzIEJhc2VTZXJ2ZXIgeworfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWVtYmVyc0NoYW5nZS9hZGRNZXRob2RXaXRoQ292YXJpYW50UmV0dXJuVHlwZS9zcmMvQ2xpZW50LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZW1iZXJzQ2hhbmdlL2FkZE1ldGhvZFdpdGhDb3ZhcmlhbnRSZXR1cm5UeXBlL3NyYy9DbGllbnQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZDZmZTZhCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWVtYmVyc0NoYW5nZS9hZGRNZXRob2RXaXRoQ292YXJpYW50UmV0dXJuVHlwZS9zcmMvQ2xpZW50LmphdmEKQEAgLTAsMCArMSw3IEBACitwdWJsaWMgY2xhc3MgQ2xpZW50IHsKKworICBwdWJsaWMgdm9pZCBmb28oU2VydmVyIHNlcnZlcikgeworICAgIEVsZW1lbnQgZWxlbSA9IHNlcnZlci5tZXRob2QoKTsKKyAgfQorCit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWVtYmVyc0NoYW5nZS9hZGRNZXRob2RXaXRoQ292YXJpYW50UmV0dXJuVHlwZS9zcmMvRWxlbWVudC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWVtYmVyc0NoYW5nZS9hZGRNZXRob2RXaXRoQ292YXJpYW50UmV0dXJuVHlwZS9zcmMvRWxlbWVudC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYyOWEwYTcKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZW1iZXJzQ2hhbmdlL2FkZE1ldGhvZFdpdGhDb3ZhcmlhbnRSZXR1cm5UeXBlL3NyYy9FbGVtZW50LmphdmEKQEAgLTAsMCArMSwyIEBACitwdWJsaWMgY2xhc3MgRWxlbWVudCB7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWVtYmVyc0NoYW5nZS9hZGRNZXRob2RXaXRoQ292YXJpYW50UmV0dXJuVHlwZS9zcmMvU2VydmVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZW1iZXJzQ2hhbmdlL2FkZE1ldGhvZFdpdGhDb3ZhcmlhbnRSZXR1cm5UeXBlL3NyYy9TZXJ2ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MmUyYjFiCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWVtYmVyc0NoYW5nZS9hZGRNZXRob2RXaXRoQ292YXJpYW50UmV0dXJuVHlwZS9zcmMvU2VydmVyLmphdmEKQEAgLTAsMCArMSw1IEBACitwdWJsaWMgY2xhc3MgU2VydmVyIGV4dGVuZHMgQmFzZVNlcnZlciB7CisgIHB1YmxpYyBTdWJFbGVtZW50IG1ldGhvZCgpIHsKKyAgICByZXR1cm4gbmV3IFN1YkVsZW1lbnQoKTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWVtYmVyc0NoYW5nZS9hZGRNZXRob2RXaXRoQ292YXJpYW50UmV0dXJuVHlwZS9zcmMvU3ViRWxlbWVudC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWVtYmVyc0NoYW5nZS9hZGRNZXRob2RXaXRoQ292YXJpYW50UmV0dXJuVHlwZS9zcmMvU3ViRWxlbWVudC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI5YzUxOWI0Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWVtYmVyc0NoYW5nZS9hZGRNZXRob2RXaXRoQ292YXJpYW50UmV0dXJuVHlwZS9zcmMvU3ViRWxlbWVudC5qYXZhCkBAIC0wLDAgKzEsMiBAQAorcHVibGljIGNsYXNzIFN1YkVsZW1lbnQgZXh0ZW5kcyBFbGVtZW50IHsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZW1iZXJzQ2hhbmdlL2FkZE1ldGhvZFdpdGhJbmNvbXBhdGlibGVSZXR1cm5UeXBlLmxvZyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21lbWJlcnNDaGFuZ2UvYWRkTWV0aG9kV2l0aEluY29tcGF0aWJsZVJldHVyblR5cGUubG9nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBhYWYyYTIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZW1iZXJzQ2hhbmdlL2FkZE1ldGhvZFdpdGhJbmNvbXBhdGlibGVSZXR1cm5UeXBlLmxvZwpAQCAtMCwwICsxLDEyIEBACitDbGVhbmluZyBvdXRwdXQgZmlsZXM6CitvdXQvcHJvZHVjdGlvbi9BZGRNZXRob2RXaXRoSW5jb21wYXRpYmxlUmV0dXJuVHlwZS9CYXNlU2VydmVyLmNsYXNzCitFbmQgb2YgZmlsZXMKK0NvbXBpbGluZyBmaWxlczoKK3NyYy9CYXNlU2VydmVyLmphdmEKK0VuZCBvZiBmaWxlcworQ2xlYW5pbmcgb3V0cHV0IGZpbGVzOgorb3V0L3Byb2R1Y3Rpb24vQWRkTWV0aG9kV2l0aEluY29tcGF0aWJsZVJldHVyblR5cGUvU2VydmVyLmNsYXNzCitFbmQgb2YgZmlsZXMKK0NvbXBpbGluZyBmaWxlczoKK3NyYy9TZXJ2ZXIuamF2YQorRW5kIG9mIGZpbGVzCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZW1iZXJzQ2hhbmdlL2FkZE1ldGhvZFdpdGhJbmNvbXBhdGlibGVSZXR1cm5UeXBlL0Jhc2VTZXJ2ZXIuamF2YS5uZXcgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZW1iZXJzQ2hhbmdlL2FkZE1ldGhvZFdpdGhJbmNvbXBhdGlibGVSZXR1cm5UeXBlL0Jhc2VTZXJ2ZXIuamF2YS5uZXcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTA5ZGFmNAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21lbWJlcnNDaGFuZ2UvYWRkTWV0aG9kV2l0aEluY29tcGF0aWJsZVJldHVyblR5cGUvQmFzZVNlcnZlci5qYXZhLm5ldwpAQCAtMCwwICsxLDUgQEAKK3B1YmxpYyBjbGFzcyBCYXNlU2VydmVyIHsKKyAgcHVibGljIFN0cmluZyBtZXRob2QoKSB7CisgICAgcmV0dXJuICJ0ZXN0IjsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWVtYmVyc0NoYW5nZS9hZGRNZXRob2RXaXRoSW5jb21wYXRpYmxlUmV0dXJuVHlwZS9kYXRhLnhtbCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21lbWJlcnNDaGFuZ2UvYWRkTWV0aG9kV2l0aEluY29tcGF0aWJsZVJldHVyblR5cGUvZGF0YS54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTU5NzgxZQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21lbWJlcnNDaGFuZ2UvYWRkTWV0aG9kV2l0aEluY29tcGF0aWJsZVJldHVyblR5cGUvZGF0YS54bWwKQEAgLTAsMCArMSwxMiBAQAorPHRlc3REYXRhPgorCisgIDxkZWxldGVkX2J5X21ha2U+CisgICAgPGZpbGUgcGF0aD0iY2xhc3Nlcy9CYXNlU2VydmVyLmNsYXNzIiAvPgorICAgIDxmaWxlIHBhdGg9ImNsYXNzZXMvU2VydmVyLmNsYXNzIiAvPgorICA8L2RlbGV0ZWRfYnlfbWFrZT4KKworICA8cmVjb21waWxlPgorICAgIDxmaWxlIHBhdGg9InNvdXJjZS9TZXJ2ZXIuamF2YSIgLz4KKyAgPC9yZWNvbXBpbGU+CisKKzwvdGVzdERhdGE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWVtYmVyc0NoYW5nZS9hZGRNZXRob2RXaXRoSW5jb21wYXRpYmxlUmV0dXJuVHlwZS9zcmMvQmFzZVNlcnZlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWVtYmVyc0NoYW5nZS9hZGRNZXRob2RXaXRoSW5jb21wYXRpYmxlUmV0dXJuVHlwZS9zcmMvQmFzZVNlcnZlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMzZjliN2IKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZW1iZXJzQ2hhbmdlL2FkZE1ldGhvZFdpdGhJbmNvbXBhdGlibGVSZXR1cm5UeXBlL3NyYy9CYXNlU2VydmVyLmphdmEKQEAgLTAsMCArMSwyIEBACitwdWJsaWMgY2xhc3MgQmFzZVNlcnZlciB7Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZW1iZXJzQ2hhbmdlL2FkZE1ldGhvZFdpdGhJbmNvbXBhdGlibGVSZXR1cm5UeXBlL3NyYy9TZXJ2ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21lbWJlcnNDaGFuZ2UvYWRkTWV0aG9kV2l0aEluY29tcGF0aWJsZVJldHVyblR5cGUvc3JjL1NlcnZlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdiNzhlY2MKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZW1iZXJzQ2hhbmdlL2FkZE1ldGhvZFdpdGhJbmNvbXBhdGlibGVSZXR1cm5UeXBlL3NyYy9TZXJ2ZXIuamF2YQpAQCAtMCwwICsxLDUgQEAKK3B1YmxpYyBjbGFzcyBTZXJ2ZXIgZXh0ZW5kcyBCYXNlU2VydmVyIHsKKyAgcHVibGljIEludGVnZXIgbWV0aG9kKCkgeworICAgIHJldHVybiBuZXcgSW50ZWdlcigxMCk7CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21lbWJlcnNDaGFuZ2UvYWRkTW9yZUFjY2Vzc2libGVNZXRob2RUb0Jhc2UubG9nIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWVtYmVyc0NoYW5nZS9hZGRNb3JlQWNjZXNzaWJsZU1ldGhvZFRvQmFzZS5sb2cKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTYzNmJiMAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21lbWJlcnNDaGFuZ2UvYWRkTW9yZUFjY2Vzc2libGVNZXRob2RUb0Jhc2UubG9nCkBAIC0wLDAgKzEsMTIgQEAKK0NsZWFuaW5nIG91dHB1dCBmaWxlczoKK291dC9wcm9kdWN0aW9uL0FkZE1vcmVBY2Nlc3NpYmxlTWV0aG9kVG9CYXNlL0Jhc2VTZXJ2ZXIuY2xhc3MKK0VuZCBvZiBmaWxlcworQ29tcGlsaW5nIGZpbGVzOgorc3JjL0Jhc2VTZXJ2ZXIuamF2YQorRW5kIG9mIGZpbGVzCitDbGVhbmluZyBvdXRwdXQgZmlsZXM6CitvdXQvcHJvZHVjdGlvbi9BZGRNb3JlQWNjZXNzaWJsZU1ldGhvZFRvQmFzZS9TZXJ2ZXIuY2xhc3MKK0VuZCBvZiBmaWxlcworQ29tcGlsaW5nIGZpbGVzOgorc3JjL1NlcnZlci5qYXZhCitFbmQgb2YgZmlsZXMKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21lbWJlcnNDaGFuZ2UvYWRkTW9yZUFjY2Vzc2libGVNZXRob2RUb0Jhc2UvQmFzZVNlcnZlci5qYXZhLm5ldyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21lbWJlcnNDaGFuZ2UvYWRkTW9yZUFjY2Vzc2libGVNZXRob2RUb0Jhc2UvQmFzZVNlcnZlci5qYXZhLm5ldwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMTFhOTIyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWVtYmVyc0NoYW5nZS9hZGRNb3JlQWNjZXNzaWJsZU1ldGhvZFRvQmFzZS9CYXNlU2VydmVyLmphdmEubmV3CkBAIC0wLDAgKzEsNSBAQAorcHVibGljIGNsYXNzIEJhc2VTZXJ2ZXIgeworICBwdWJsaWMgSW50ZWdlciBtZXRob2QoKSB7CisgICAgcmV0dXJuIG5ldyBJbnRlZ2VyKDApOworICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZW1iZXJzQ2hhbmdlL2FkZE1vcmVBY2Nlc3NpYmxlTWV0aG9kVG9CYXNlL2RhdGEueG1sIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWVtYmVyc0NoYW5nZS9hZGRNb3JlQWNjZXNzaWJsZU1ldGhvZFRvQmFzZS9kYXRhLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NTk3ODFlCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWVtYmVyc0NoYW5nZS9hZGRNb3JlQWNjZXNzaWJsZU1ldGhvZFRvQmFzZS9kYXRhLnhtbApAQCAtMCwwICsxLDEyIEBACis8dGVzdERhdGE+CisKKyAgPGRlbGV0ZWRfYnlfbWFrZT4KKyAgICA8ZmlsZSBwYXRoPSJjbGFzc2VzL0Jhc2VTZXJ2ZXIuY2xhc3MiIC8+CisgICAgPGZpbGUgcGF0aD0iY2xhc3Nlcy9TZXJ2ZXIuY2xhc3MiIC8+CisgIDwvZGVsZXRlZF9ieV9tYWtlPgorCisgIDxyZWNvbXBpbGU+CisgICAgPGZpbGUgcGF0aD0ic291cmNlL1NlcnZlci5qYXZhIiAvPgorICA8L3JlY29tcGlsZT4KKworPC90ZXN0RGF0YT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZW1iZXJzQ2hhbmdlL2FkZE1vcmVBY2Nlc3NpYmxlTWV0aG9kVG9CYXNlL3NyYy9CYXNlU2VydmVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZW1iZXJzQ2hhbmdlL2FkZE1vcmVBY2Nlc3NpYmxlTWV0aG9kVG9CYXNlL3NyYy9CYXNlU2VydmVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzNmOWI3YgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21lbWJlcnNDaGFuZ2UvYWRkTW9yZUFjY2Vzc2libGVNZXRob2RUb0Jhc2Uvc3JjL0Jhc2VTZXJ2ZXIuamF2YQpAQCAtMCwwICsxLDIgQEAKK3B1YmxpYyBjbGFzcyBCYXNlU2VydmVyIHsKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21lbWJlcnNDaGFuZ2UvYWRkTW9yZUFjY2Vzc2libGVNZXRob2RUb0Jhc2Uvc3JjL1NlcnZlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWVtYmVyc0NoYW5nZS9hZGRNb3JlQWNjZXNzaWJsZU1ldGhvZFRvQmFzZS9zcmMvU2VydmVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjk0ZDZmMwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21lbWJlcnNDaGFuZ2UvYWRkTW9yZUFjY2Vzc2libGVNZXRob2RUb0Jhc2Uvc3JjL1NlcnZlci5qYXZhCkBAIC0wLDAgKzEsNSBAQAorcHVibGljIGNsYXNzIFNlcnZlciBleHRlbmRzIEJhc2VTZXJ2ZXIgeworICBwcm90ZWN0ZWQgSW50ZWdlciBtZXRob2QoKSB7CisgICAgcmV0dXJuIG5ldyBJbnRlZ2VyKDEwKTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWVtYmVyc0NoYW5nZS9hZGRNb3JlU3BlY2lmaWMubG9nIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWVtYmVyc0NoYW5nZS9hZGRNb3JlU3BlY2lmaWMubG9nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ1NWZlMjYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZW1iZXJzQ2hhbmdlL2FkZE1vcmVTcGVjaWZpYy5sb2cKQEAgLTAsMCArMSwxMiBAQAorQ2xlYW5pbmcgb3V0cHV0IGZpbGVzOgorb3V0L3Byb2R1Y3Rpb24vQWRkTW9yZVNwZWNpZmljL1NlcnZlci5jbGFzcworRW5kIG9mIGZpbGVzCitDb21waWxpbmcgZmlsZXM6CitzcmMvU2VydmVyLmphdmEKK0VuZCBvZiBmaWxlcworQ2xlYW5pbmcgb3V0cHV0IGZpbGVzOgorb3V0L3Byb2R1Y3Rpb24vQWRkTW9yZVNwZWNpZmljL0NsaWVudC5jbGFzcworRW5kIG9mIGZpbGVzCitDb21waWxpbmcgZmlsZXM6CitzcmMvQ2xpZW50LmphdmEKK0VuZCBvZiBmaWxlcwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWVtYmVyc0NoYW5nZS9hZGRNb3JlU3BlY2lmaWMvU2VydmVyLmphdmEubmV3IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWVtYmVyc0NoYW5nZS9hZGRNb3JlU3BlY2lmaWMvU2VydmVyLmphdmEubmV3Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRmNTEzOWIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZW1iZXJzQ2hhbmdlL2FkZE1vcmVTcGVjaWZpYy9TZXJ2ZXIuamF2YS5uZXcKQEAgLTAsMCArMSw1IEBACitjbGFzcyBTZXJ2ZXJ7CisgIHZvaWQgZm9vKE9iamVjdCBvKXt9CisKKyAgdm9pZCBmb28oU3RyaW5nIHMpe30KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZW1iZXJzQ2hhbmdlL2FkZE1vcmVTcGVjaWZpYy9kYXRhLnhtbCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21lbWJlcnNDaGFuZ2UvYWRkTW9yZVNwZWNpZmljL2RhdGEueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZhODg2ZDQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZW1iZXJzQ2hhbmdlL2FkZE1vcmVTcGVjaWZpYy9kYXRhLnhtbApAQCAtMCwwICsxLDEwIEBACis8dGVzdERhdGE+CisgIDxkZWxldGVkX2J5X21ha2U+CisgICAgPGZpbGUgcGF0aD0iY2xhc3Nlcy9TZXJ2ZXIuY2xhc3MiIC8+CisgICAgPGZpbGUgcGF0aD0iY2xhc3Nlcy9DbGllbnQuY2xhc3MiIC8+CisgIDwvZGVsZXRlZF9ieV9tYWtlPgorCisgIDxyZWNvbXBpbGU+CisgICAgPGZpbGUgcGF0aD0ic291cmNlL0NsaWVudC5qYXZhIiAvPgorICA8L3JlY29tcGlsZT4KKzwvdGVzdERhdGE+CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZW1iZXJzQ2hhbmdlL2FkZE1vcmVTcGVjaWZpYy9zcmMvQ2xpZW50LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZW1iZXJzQ2hhbmdlL2FkZE1vcmVTcGVjaWZpYy9zcmMvQ2xpZW50LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWVlMGY1YwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21lbWJlcnNDaGFuZ2UvYWRkTW9yZVNwZWNpZmljL3NyYy9DbGllbnQuamF2YQpAQCAtMCwwICsxLDUgQEAKK2NsYXNzIENsaWVudHsKKyAgeworICAgIG5ldyBTZXJ2ZXIoKS5mb28oImFhYSIpOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWVtYmVyc0NoYW5nZS9hZGRNb3JlU3BlY2lmaWMvc3JjL1NlcnZlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWVtYmVyc0NoYW5nZS9hZGRNb3JlU3BlY2lmaWMvc3JjL1NlcnZlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI0MTc3ODgKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZW1iZXJzQ2hhbmdlL2FkZE1vcmVTcGVjaWZpYy9zcmMvU2VydmVyLmphdmEKQEAgLTAsMCArMSwzIEBACitjbGFzcyBTZXJ2ZXJ7CisgIHZvaWQgZm9vKE9iamVjdCBvKXt9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWVtYmVyc0NoYW5nZS9hZGRNb3JlU3BlY2lmaWMxLmxvZyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21lbWJlcnNDaGFuZ2UvYWRkTW9yZVNwZWNpZmljMS5sb2cKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjgwZmYzOQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21lbWJlcnNDaGFuZ2UvYWRkTW9yZVNwZWNpZmljMS5sb2cKQEAgLTAsMCArMSwxMiBAQAorQ2xlYW5pbmcgb3V0cHV0IGZpbGVzOgorb3V0L3Byb2R1Y3Rpb24vQWRkTW9yZVNwZWNpZmljMS9EZXJpdmVkLmNsYXNzCitFbmQgb2YgZmlsZXMKK0NvbXBpbGluZyBmaWxlczoKK3NyYy9EZXJpdmVkLmphdmEKK0VuZCBvZiBmaWxlcworQ2xlYW5pbmcgb3V0cHV0IGZpbGVzOgorb3V0L3Byb2R1Y3Rpb24vQWRkTW9yZVNwZWNpZmljMS9DbGllbnQuY2xhc3MKK0VuZCBvZiBmaWxlcworQ29tcGlsaW5nIGZpbGVzOgorc3JjL0NsaWVudC5qYXZhCitFbmQgb2YgZmlsZXMKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21lbWJlcnNDaGFuZ2UvYWRkTW9yZVNwZWNpZmljMS9EZXJpdmVkLmphdmEubmV3IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWVtYmVyc0NoYW5nZS9hZGRNb3JlU3BlY2lmaWMxL0Rlcml2ZWQuamF2YS5uZXcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2U1NTRkNQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21lbWJlcnNDaGFuZ2UvYWRkTW9yZVNwZWNpZmljMS9EZXJpdmVkLmphdmEubmV3CkBAIC0wLDAgKzEsMyBAQAorY2xhc3MgRGVyaXZlZCBleHRlbmRzIEJhc2V7CisgIHZvaWQgZm9vKFN0cmluZyBzKSB7fQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWVtYmVyc0NoYW5nZS9hZGRNb3JlU3BlY2lmaWMxL2RhdGEueG1sIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWVtYmVyc0NoYW5nZS9hZGRNb3JlU3BlY2lmaWMxL2RhdGEueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVkYThjNGQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZW1iZXJzQ2hhbmdlL2FkZE1vcmVTcGVjaWZpYzEvZGF0YS54bWwKQEAgLTAsMCArMSwxMCBAQAorPHRlc3REYXRhPgorICA8ZGVsZXRlZF9ieV9tYWtlPgorICAgIDxmaWxlIHBhdGg9ImNsYXNzZXMvRGVyaXZlZC5jbGFzcyIgLz4KKyAgICA8ZmlsZSBwYXRoPSJjbGFzc2VzL0NsaWVudC5jbGFzcyIgLz4KKyAgPC9kZWxldGVkX2J5X21ha2U+CisKKyAgPHJlY29tcGlsZT4KKyAgICA8ZmlsZSBwYXRoPSJzb3VyY2UvQ2xpZW50LmphdmEiIC8+CisgIDwvcmVjb21waWxlPgorPC90ZXN0RGF0YT4KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21lbWJlcnNDaGFuZ2UvYWRkTW9yZVNwZWNpZmljMS9zcmMvQmFzZS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWVtYmVyc0NoYW5nZS9hZGRNb3JlU3BlY2lmaWMxL3NyYy9CYXNlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDg5YzZhYQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21lbWJlcnNDaGFuZ2UvYWRkTW9yZVNwZWNpZmljMS9zcmMvQmFzZS5qYXZhCkBAIC0wLDAgKzEsMyBAQAorY2xhc3MgQmFzZXsKKyAgdm9pZCBmb28oT2JqZWN0IG8pe30KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZW1iZXJzQ2hhbmdlL2FkZE1vcmVTcGVjaWZpYzEvc3JjL0NsaWVudC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWVtYmVyc0NoYW5nZS9hZGRNb3JlU3BlY2lmaWMxL3NyYy9DbGllbnQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MGE3MDM2Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWVtYmVyc0NoYW5nZS9hZGRNb3JlU3BlY2lmaWMxL3NyYy9DbGllbnQuamF2YQpAQCAtMCwwICsxLDUgQEAKK2NsYXNzIENsaWVudHsKKyAgeworICAgIG5ldyBEZXJpdmVkKCkuZm9vKCJhYWEiKTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21lbWJlcnNDaGFuZ2UvYWRkTW9yZVNwZWNpZmljMS9zcmMvRGVyaXZlZC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWVtYmVyc0NoYW5nZS9hZGRNb3JlU3BlY2lmaWMxL3NyYy9EZXJpdmVkLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDVhZGQ0YgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21lbWJlcnNDaGFuZ2UvYWRkTW9yZVNwZWNpZmljMS9zcmMvRGVyaXZlZC5qYXZhCkBAIC0wLDAgKzEsMiBAQAorY2xhc3MgRGVyaXZlZCBleHRlbmRzIEJhc2V7Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZW1iZXJzQ2hhbmdlL2FkZE1vcmVTcGVjaWZpYzIubG9nIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWVtYmVyc0NoYW5nZS9hZGRNb3JlU3BlY2lmaWMyLmxvZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jM2FlYTMzCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWVtYmVyc0NoYW5nZS9hZGRNb3JlU3BlY2lmaWMyLmxvZwpAQCAtMCwwICsxLDEyIEBACitDbGVhbmluZyBvdXRwdXQgZmlsZXM6CitvdXQvcHJvZHVjdGlvbi9BZGRNb3JlU3BlY2lmaWMyL0Jhc2UuY2xhc3MKK0VuZCBvZiBmaWxlcworQ29tcGlsaW5nIGZpbGVzOgorc3JjL0Jhc2UuamF2YQorRW5kIG9mIGZpbGVzCitDbGVhbmluZyBvdXRwdXQgZmlsZXM6CitvdXQvcHJvZHVjdGlvbi9BZGRNb3JlU3BlY2lmaWMyL0NsaWVudC5jbGFzcworRW5kIG9mIGZpbGVzCitDb21waWxpbmcgZmlsZXM6CitzcmMvQ2xpZW50LmphdmEKK0VuZCBvZiBmaWxlcwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWVtYmVyc0NoYW5nZS9hZGRNb3JlU3BlY2lmaWMyL0Jhc2UuamF2YS5uZXcgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZW1iZXJzQ2hhbmdlL2FkZE1vcmVTcGVjaWZpYzIvQmFzZS5qYXZhLm5ldwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZDlhYzc3Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWVtYmVyc0NoYW5nZS9hZGRNb3JlU3BlY2lmaWMyL0Jhc2UuamF2YS5uZXcKQEAgLTAsMCArMSwzIEBACitjbGFzcyBCYXNleworICB2b2lkIGZvbyhTdHJpbmcgcyl7fQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21lbWJlcnNDaGFuZ2UvYWRkTW9yZVNwZWNpZmljMi9kYXRhLnhtbCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21lbWJlcnNDaGFuZ2UvYWRkTW9yZVNwZWNpZmljMi9kYXRhLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NzFjNzkzCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWVtYmVyc0NoYW5nZS9hZGRNb3JlU3BlY2lmaWMyL2RhdGEueG1sCkBAIC0wLDAgKzEsMTAgQEAKKzx0ZXN0RGF0YT4KKyAgPGRlbGV0ZWRfYnlfbWFrZT4KKyAgICA8ZmlsZSBwYXRoPSJjbGFzc2VzL0Jhc2UuY2xhc3MiIC8+CisgICAgPGZpbGUgcGF0aD0iY2xhc3Nlcy9DbGllbnQuY2xhc3MiIC8+CisgIDwvZGVsZXRlZF9ieV9tYWtlPgorCisgIDxyZWNvbXBpbGU+CisgICAgPGZpbGUgcGF0aD0ic291cmNlL0NsaWVudC5qYXZhIiAvPgorICA8L3JlY29tcGlsZT4KKzwvdGVzdERhdGE+CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZW1iZXJzQ2hhbmdlL2FkZE1vcmVTcGVjaWZpYzIvc3JjL0Jhc2UuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21lbWJlcnNDaGFuZ2UvYWRkTW9yZVNwZWNpZmljMi9zcmMvQmFzZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBkNTUxNGIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZW1iZXJzQ2hhbmdlL2FkZE1vcmVTcGVjaWZpYzIvc3JjL0Jhc2UuamF2YQpAQCAtMCwwICsxLDIgQEAKK2NsYXNzIEJhc2V7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWVtYmVyc0NoYW5nZS9hZGRNb3JlU3BlY2lmaWMyL3NyYy9DbGllbnQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21lbWJlcnNDaGFuZ2UvYWRkTW9yZVNwZWNpZmljMi9zcmMvQ2xpZW50LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzBhNzAzNgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21lbWJlcnNDaGFuZ2UvYWRkTW9yZVNwZWNpZmljMi9zcmMvQ2xpZW50LmphdmEKQEAgLTAsMCArMSw1IEBACitjbGFzcyBDbGllbnR7CisgIHsKKyAgICBuZXcgRGVyaXZlZCgpLmZvbygiYWFhIik7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZW1iZXJzQ2hhbmdlL2FkZE1vcmVTcGVjaWZpYzIvc3JjL0Rlcml2ZWQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21lbWJlcnNDaGFuZ2UvYWRkTW9yZVNwZWNpZmljMi9zcmMvRGVyaXZlZC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI1MTNhMmUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZW1iZXJzQ2hhbmdlL2FkZE1vcmVTcGVjaWZpYzIvc3JjL0Rlcml2ZWQuamF2YQpAQCAtMCwwICsxLDMgQEAKK2NsYXNzIERlcml2ZWQgZXh0ZW5kcyBCYXNleworICB2b2lkIGZvbyhPYmplY3Qgbyl7fQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWVtYmVyc0NoYW5nZS9hZGROb25TdGF0aWNNZXRob2RIYXZpbmdTdGF0aWNNZXRob2RJblN1YmNsYXNzLmxvZyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21lbWJlcnNDaGFuZ2UvYWRkTm9uU3RhdGljTWV0aG9kSGF2aW5nU3RhdGljTWV0aG9kSW5TdWJjbGFzcy5sb2cKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjc3NGI3MAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21lbWJlcnNDaGFuZ2UvYWRkTm9uU3RhdGljTWV0aG9kSGF2aW5nU3RhdGljTWV0aG9kSW5TdWJjbGFzcy5sb2cKQEAgLTAsMCArMSwxMiBAQAorQ2xlYW5pbmcgb3V0cHV0IGZpbGVzOgorb3V0L3Byb2R1Y3Rpb24vQWRkTm9uU3RhdGljTWV0aG9kSGF2aW5nU3RhdGljTWV0aG9kSW5TdWJjbGFzcy9CYXNlU2VydmVyLmNsYXNzCitFbmQgb2YgZmlsZXMKK0NvbXBpbGluZyBmaWxlczoKK3NyYy9CYXNlU2VydmVyLmphdmEKK0VuZCBvZiBmaWxlcworQ2xlYW5pbmcgb3V0cHV0IGZpbGVzOgorb3V0L3Byb2R1Y3Rpb24vQWRkTm9uU3RhdGljTWV0aG9kSGF2aW5nU3RhdGljTWV0aG9kSW5TdWJjbGFzcy9TZXJ2ZXIuY2xhc3MKK0VuZCBvZiBmaWxlcworQ29tcGlsaW5nIGZpbGVzOgorc3JjL1NlcnZlci5qYXZhCitFbmQgb2YgZmlsZXMKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21lbWJlcnNDaGFuZ2UvYWRkTm9uU3RhdGljTWV0aG9kSGF2aW5nU3RhdGljTWV0aG9kSW5TdWJjbGFzcy9CYXNlU2VydmVyLmphdmEubmV3IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWVtYmVyc0NoYW5nZS9hZGROb25TdGF0aWNNZXRob2RIYXZpbmdTdGF0aWNNZXRob2RJblN1YmNsYXNzL0Jhc2VTZXJ2ZXIuamF2YS5uZXcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWJmYmE0YQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21lbWJlcnNDaGFuZ2UvYWRkTm9uU3RhdGljTWV0aG9kSGF2aW5nU3RhdGljTWV0aG9kSW5TdWJjbGFzcy9CYXNlU2VydmVyLmphdmEubmV3CkBAIC0wLDAgKzEsNSBAQAorcHVibGljIGNsYXNzIEJhc2VTZXJ2ZXIgeworICBwdWJsaWMgSW50ZWdlciBtZXRob2QoKSB7CisgICAgcmV0dXJuIG5ldyBJbnRlZ2VyKDEwKTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWVtYmVyc0NoYW5nZS9hZGROb25TdGF0aWNNZXRob2RIYXZpbmdTdGF0aWNNZXRob2RJblN1YmNsYXNzL2RhdGEueG1sIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWVtYmVyc0NoYW5nZS9hZGROb25TdGF0aWNNZXRob2RIYXZpbmdTdGF0aWNNZXRob2RJblN1YmNsYXNzL2RhdGEueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU1OTc4MWUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZW1iZXJzQ2hhbmdlL2FkZE5vblN0YXRpY01ldGhvZEhhdmluZ1N0YXRpY01ldGhvZEluU3ViY2xhc3MvZGF0YS54bWwKQEAgLTAsMCArMSwxMiBAQAorPHRlc3REYXRhPgorCisgIDxkZWxldGVkX2J5X21ha2U+CisgICAgPGZpbGUgcGF0aD0iY2xhc3Nlcy9CYXNlU2VydmVyLmNsYXNzIiAvPgorICAgIDxmaWxlIHBhdGg9ImNsYXNzZXMvU2VydmVyLmNsYXNzIiAvPgorICA8L2RlbGV0ZWRfYnlfbWFrZT4KKworICA8cmVjb21waWxlPgorICAgIDxmaWxlIHBhdGg9InNvdXJjZS9TZXJ2ZXIuamF2YSIgLz4KKyAgPC9yZWNvbXBpbGU+CisKKzwvdGVzdERhdGE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWVtYmVyc0NoYW5nZS9hZGROb25TdGF0aWNNZXRob2RIYXZpbmdTdGF0aWNNZXRob2RJblN1YmNsYXNzL3NyYy9CYXNlU2VydmVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZW1iZXJzQ2hhbmdlL2FkZE5vblN0YXRpY01ldGhvZEhhdmluZ1N0YXRpY01ldGhvZEluU3ViY2xhc3Mvc3JjL0Jhc2VTZXJ2ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zM2Y5YjdiCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWVtYmVyc0NoYW5nZS9hZGROb25TdGF0aWNNZXRob2RIYXZpbmdTdGF0aWNNZXRob2RJblN1YmNsYXNzL3NyYy9CYXNlU2VydmVyLmphdmEKQEAgLTAsMCArMSwyIEBACitwdWJsaWMgY2xhc3MgQmFzZVNlcnZlciB7Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZW1iZXJzQ2hhbmdlL2FkZE5vblN0YXRpY01ldGhvZEhhdmluZ1N0YXRpY01ldGhvZEluU3ViY2xhc3Mvc3JjL1NlcnZlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWVtYmVyc0NoYW5nZS9hZGROb25TdGF0aWNNZXRob2RIYXZpbmdTdGF0aWNNZXRob2RJblN1YmNsYXNzL3NyYy9TZXJ2ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MTEwMjliCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWVtYmVyc0NoYW5nZS9hZGROb25TdGF0aWNNZXRob2RIYXZpbmdTdGF0aWNNZXRob2RJblN1YmNsYXNzL3NyYy9TZXJ2ZXIuamF2YQpAQCAtMCwwICsxLDUgQEAKK3B1YmxpYyBjbGFzcyBTZXJ2ZXIgZXh0ZW5kcyBCYXNlU2VydmVyIHsKKyAgcHVibGljIHN0YXRpYyBJbnRlZ2VyIG1ldGhvZCgpIHsKKyAgICByZXR1cm4gbmV3IEludGVnZXIoMTApOworICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZW1iZXJzQ2hhbmdlL2FkZFN0YXRpY0ZpZWxkVG9EZXJpdmVkLmxvZyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21lbWJlcnNDaGFuZ2UvYWRkU3RhdGljRmllbGRUb0Rlcml2ZWQubG9nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYyZDAzNmMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZW1iZXJzQ2hhbmdlL2FkZFN0YXRpY0ZpZWxkVG9EZXJpdmVkLmxvZwpAQCAtMCwwICsxLDEyIEBACitDbGVhbmluZyBvdXRwdXQgZmlsZXM6CitvdXQvcHJvZHVjdGlvbi9BZGRTdGF0aWNGaWVsZFRvRGVyaXZlZC9EZXJpdmVkLmNsYXNzCitFbmQgb2YgZmlsZXMKK0NvbXBpbGluZyBmaWxlczoKK3NyYy9EZXJpdmVkLmphdmEKK0VuZCBvZiBmaWxlcworQ2xlYW5pbmcgb3V0cHV0IGZpbGVzOgorb3V0L3Byb2R1Y3Rpb24vQWRkU3RhdGljRmllbGRUb0Rlcml2ZWQvQ2xpZW50LmNsYXNzCitFbmQgb2YgZmlsZXMKK0NvbXBpbGluZyBmaWxlczoKK3NyYy9DbGllbnQuamF2YQorRW5kIG9mIGZpbGVzCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZW1iZXJzQ2hhbmdlL2FkZFN0YXRpY0ZpZWxkVG9EZXJpdmVkL0Rlcml2ZWQuamF2YS5uZXcgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZW1iZXJzQ2hhbmdlL2FkZFN0YXRpY0ZpZWxkVG9EZXJpdmVkL0Rlcml2ZWQuamF2YS5uZXcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2IxMzc0YQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21lbWJlcnNDaGFuZ2UvYWRkU3RhdGljRmllbGRUb0Rlcml2ZWQvRGVyaXZlZC5qYXZhLm5ldwpAQCAtMCwwICsxLDMgQEAKK2NsYXNzIERlcml2ZWQgZXh0ZW5kcyBCYXNlIHsKKyAgcHVibGljIHN0YXRpYyBTdHJpbmcgbXlGaWVsZCA9ICJEZXJpdmVkLm15RmllbGQiOworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21lbWJlcnNDaGFuZ2UvYWRkU3RhdGljRmllbGRUb0Rlcml2ZWQvZGF0YS54bWwgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZW1iZXJzQ2hhbmdlL2FkZFN0YXRpY0ZpZWxkVG9EZXJpdmVkL2RhdGEueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA5Zjg1NDgKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZW1iZXJzQ2hhbmdlL2FkZFN0YXRpY0ZpZWxkVG9EZXJpdmVkL2RhdGEueG1sCkBAIC0wLDAgKzEsMTAgQEAKKzx0ZXN0RGF0YT4KKyAgPGRlbGV0ZWRfYnlfbWFrZT4KKyAgICA8ZmlsZSBwYXRoPSJjbGFzc2VzL0Rlcml2ZWQuY2xhc3MiIC8+CisgICAgPGZpbGUgcGF0aD0iY2xhc3Nlcy9DbGllbnQuY2xhc3MiIC8+CisgIDwvZGVsZXRlZF9ieV9tYWtlPgorCisgIDxyZWNvbXBpbGU+CisgICAgPGZpbGUgcGF0aD0ic291cmNlL0NsaWVudC5qYXZhIiAvPgorICA8L3JlY29tcGlsZT4KKzwvdGVzdERhdGE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWVtYmVyc0NoYW5nZS9hZGRTdGF0aWNGaWVsZFRvRGVyaXZlZC9zcmMvQmFzZS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWVtYmVyc0NoYW5nZS9hZGRTdGF0aWNGaWVsZFRvRGVyaXZlZC9zcmMvQmFzZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI5ODc1MmYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZW1iZXJzQ2hhbmdlL2FkZFN0YXRpY0ZpZWxkVG9EZXJpdmVkL3NyYy9CYXNlLmphdmEKQEAgLTAsMCArMSwzIEBACitjbGFzcyBCYXNlIHsKKyBTdHJpbmcgbXlGaWVsZCA9ICJCYXNlLm15RmllbGQiOworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21lbWJlcnNDaGFuZ2UvYWRkU3RhdGljRmllbGRUb0Rlcml2ZWQvc3JjL0NsaWVudC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWVtYmVyc0NoYW5nZS9hZGRTdGF0aWNGaWVsZFRvRGVyaXZlZC9zcmMvQ2xpZW50LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGFkNjNkMgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21lbWJlcnNDaGFuZ2UvYWRkU3RhdGljRmllbGRUb0Rlcml2ZWQvc3JjL0NsaWVudC5qYXZhCkBAIC0wLDAgKzEsNSBAQAorY2xhc3MgQ2xpZW50IHsKKyAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworCQlTeXN0ZW0ub3V0LnByaW50bG4obmV3IERlcml2ZWQoKS5teUZpZWxkKTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21lbWJlcnNDaGFuZ2UvYWRkU3RhdGljRmllbGRUb0Rlcml2ZWQvc3JjL0Rlcml2ZWQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21lbWJlcnNDaGFuZ2UvYWRkU3RhdGljRmllbGRUb0Rlcml2ZWQvc3JjL0Rlcml2ZWQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZmRmYWI1Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWVtYmVyc0NoYW5nZS9hZGRTdGF0aWNGaWVsZFRvRGVyaXZlZC9zcmMvRGVyaXZlZC5qYXZhCkBAIC0wLDAgKzEsMiBAQAorY2xhc3MgRGVyaXZlZCBleHRlbmRzIEJhc2UgeworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21lbWJlcnNDaGFuZ2UvY2hhbmdlTWV0aG9kR2VuZXJpY1JldHVyblR5cGUubG9nIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWVtYmVyc0NoYW5nZS9jaGFuZ2VNZXRob2RHZW5lcmljUmV0dXJuVHlwZS5sb2cKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWVjYTUwMAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21lbWJlcnNDaGFuZ2UvY2hhbmdlTWV0aG9kR2VuZXJpY1JldHVyblR5cGUubG9nCkBAIC0wLDAgKzEsMTIgQEAKK0NsZWFuaW5nIG91dHB1dCBmaWxlczoKK291dC9wcm9kdWN0aW9uL0NoYW5nZU1ldGhvZEdlbmVyaWNSZXR1cm5UeXBlL3BhY2thZ2VBL0lGYWNlLmNsYXNzCitFbmQgb2YgZmlsZXMKK0NvbXBpbGluZyBmaWxlczoKK3NyYy9wYWNrYWdlQS9JRmFjZS5qYXZhCitFbmQgb2YgZmlsZXMKK0NsZWFuaW5nIG91dHB1dCBmaWxlczoKK291dC9wcm9kdWN0aW9uL0NoYW5nZU1ldGhvZEdlbmVyaWNSZXR1cm5UeXBlL3BhY2thZ2VBL0lGYWNlSW1wbC5jbGFzcworRW5kIG9mIGZpbGVzCitDb21waWxpbmcgZmlsZXM6CitzcmMvcGFja2FnZUEvSUZhY2VJbXBsLmphdmEKK0VuZCBvZiBmaWxlcwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWVtYmVyc0NoYW5nZS9jaGFuZ2VNZXRob2RHZW5lcmljUmV0dXJuVHlwZS9kYXRhLnhtbCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21lbWJlcnNDaGFuZ2UvY2hhbmdlTWV0aG9kR2VuZXJpY1JldHVyblR5cGUvZGF0YS54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWM5YWRmNwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21lbWJlcnNDaGFuZ2UvY2hhbmdlTWV0aG9kR2VuZXJpY1JldHVyblR5cGUvZGF0YS54bWwKQEAgLTAsMCArMSwxMiBAQAorPHRlc3REYXRhPgorCisgIDxkZWxldGVkX2J5X21ha2U+CisgICAgPGZpbGUgcGF0aD0iY2xhc3Nlcy9wYWNrYWdlQS9JRmFjZS5jbGFzcyIgLz4KKyAgICA8ZmlsZSBwYXRoPSJjbGFzc2VzL3BhY2thZ2VBL0lGYWNlSW1wbC5jbGFzcyIgLz4KKyAgPC9kZWxldGVkX2J5X21ha2U+CisKKyAgPHJlY29tcGlsZT4KKyAgICA8ZmlsZSBwYXRoPSJzb3VyY2UvcGFja2FnZUEvSUZhY2VpbXBsLmphdmEiIC8+CisgIDwvcmVjb21waWxlPgorCis8L3Rlc3REYXRhPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21lbWJlcnNDaGFuZ2UvY2hhbmdlTWV0aG9kR2VuZXJpY1JldHVyblR5cGUvc3JjL3BhY2thZ2VBL0lGYWNlLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZW1iZXJzQ2hhbmdlL2NoYW5nZU1ldGhvZEdlbmVyaWNSZXR1cm5UeXBlL3NyYy9wYWNrYWdlQS9JRmFjZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA3NzUwMWIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZW1iZXJzQ2hhbmdlL2NoYW5nZU1ldGhvZEdlbmVyaWNSZXR1cm5UeXBlL3NyYy9wYWNrYWdlQS9JRmFjZS5qYXZhCkBAIC0wLDAgKzEsNiBAQAorcGFja2FnZSBwYWNrYWdlQTsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworcHVibGljIGludGVyZmFjZSBJRmFjZSB7CisgICAgTGlzdDw/IGV4dGVuZHMgSW5mbzE+IGdldEtleXMoKTsKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21lbWJlcnNDaGFuZ2UvY2hhbmdlTWV0aG9kR2VuZXJpY1JldHVyblR5cGUvc3JjL3BhY2thZ2VBL0lGYWNlLmphdmEubmV3IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWVtYmVyc0NoYW5nZS9jaGFuZ2VNZXRob2RHZW5lcmljUmV0dXJuVHlwZS9zcmMvcGFja2FnZUEvSUZhY2UuamF2YS5uZXcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmM0NDU5ZgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21lbWJlcnNDaGFuZ2UvY2hhbmdlTWV0aG9kR2VuZXJpY1JldHVyblR5cGUvc3JjL3BhY2thZ2VBL0lGYWNlLmphdmEubmV3CkBAIC0wLDAgKzEsNiBAQAorcGFja2FnZSBwYWNrYWdlQTsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworcHVibGljIGludGVyZmFjZSBJRmFjZSB7CisgICAgTGlzdDw/IGV4dGVuZHMgSW5mbzI+IGdldEtleXMoKTsKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21lbWJlcnNDaGFuZ2UvY2hhbmdlTWV0aG9kR2VuZXJpY1JldHVyblR5cGUvc3JjL3BhY2thZ2VBL0lGYWNlSW1wbC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWVtYmVyc0NoYW5nZS9jaGFuZ2VNZXRob2RHZW5lcmljUmV0dXJuVHlwZS9zcmMvcGFja2FnZUEvSUZhY2VJbXBsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDhlZmZiNwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21lbWJlcnNDaGFuZ2UvY2hhbmdlTWV0aG9kR2VuZXJpY1JldHVyblR5cGUvc3JjL3BhY2thZ2VBL0lGYWNlSW1wbC5qYXZhCkBAIC0wLDAgKzEsMTAgQEAKK3BhY2thZ2UgcGFja2FnZUE7CisKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworcHVibGljIGNsYXNzIElGYWNlSW1wbCBpbXBsZW1lbnRzIElGYWNleworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyBMaXN0PD8gZXh0ZW5kcyBJbmZvMT4gZ2V0S2V5cygpIHsKKyAgICAgICAgcmV0dXJuIG51bGw7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWVtYmVyc0NoYW5nZS9jaGFuZ2VNZXRob2RHZW5lcmljUmV0dXJuVHlwZS9zcmMvcGFja2FnZUEvSW5mbzEuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21lbWJlcnNDaGFuZ2UvY2hhbmdlTWV0aG9kR2VuZXJpY1JldHVyblR5cGUvc3JjL3BhY2thZ2VBL0luZm8xLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDQ0ZjI3OAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21lbWJlcnNDaGFuZ2UvY2hhbmdlTWV0aG9kR2VuZXJpY1JldHVyblR5cGUvc3JjL3BhY2thZ2VBL0luZm8xLmphdmEKQEAgLTAsMCArMSw0IEBACitwYWNrYWdlIHBhY2thZ2VBOworCitwdWJsaWMgY2xhc3MgSW5mbzEgeworfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWVtYmVyc0NoYW5nZS9jaGFuZ2VNZXRob2RHZW5lcmljUmV0dXJuVHlwZS9zcmMvcGFja2FnZUEvSW5mbzIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21lbWJlcnNDaGFuZ2UvY2hhbmdlTWV0aG9kR2VuZXJpY1JldHVyblR5cGUvc3JjL3BhY2thZ2VBL0luZm8yLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTk2MzFmOAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21lbWJlcnNDaGFuZ2UvY2hhbmdlTWV0aG9kR2VuZXJpY1JldHVyblR5cGUvc3JjL3BhY2thZ2VBL0luZm8yLmphdmEKQEAgLTAsMCArMSw0IEBACitwYWNrYWdlIHBhY2thZ2VBOworCitwdWJsaWMgY2xhc3MgSW5mbzIgeworfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWVtYmVyc0NoYW5nZS9jaGFuZ2VTdGF0aWNNZXRob2RTaWduYXR1cmUubG9nIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWVtYmVyc0NoYW5nZS9jaGFuZ2VTdGF0aWNNZXRob2RTaWduYXR1cmUubG9nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjliYTg3MmUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZW1iZXJzQ2hhbmdlL2NoYW5nZVN0YXRpY01ldGhvZFNpZ25hdHVyZS5sb2cKQEAgLTAsMCArMSwxMiBAQAorQ2xlYW5pbmcgb3V0cHV0IGZpbGVzOgorb3V0L3Byb2R1Y3Rpb24vQ2hhbmdlU3RhdGljTWV0aG9kU2lnbmF0dXJlL3BhY2thZ2VBL1NlcnZlci5jbGFzcworRW5kIG9mIGZpbGVzCitDb21waWxpbmcgZmlsZXM6CitzcmMvcGFja2FnZUEvU2VydmVyLmphdmEKK0VuZCBvZiBmaWxlcworQ2xlYW5pbmcgb3V0cHV0IGZpbGVzOgorb3V0L3Byb2R1Y3Rpb24vQ2hhbmdlU3RhdGljTWV0aG9kU2lnbmF0dXJlL3BhY2thZ2VBL0NsaWVudC5jbGFzcworRW5kIG9mIGZpbGVzCitDb21waWxpbmcgZmlsZXM6CitzcmMvcGFja2FnZUEvQ2xpZW50LmphdmEKK0VuZCBvZiBmaWxlcwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWVtYmVyc0NoYW5nZS9jaGFuZ2VTdGF0aWNNZXRob2RTaWduYXR1cmUvZGF0YS54bWwgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZW1iZXJzQ2hhbmdlL2NoYW5nZVN0YXRpY01ldGhvZFNpZ25hdHVyZS9kYXRhLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NDFjMzYxCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWVtYmVyc0NoYW5nZS9jaGFuZ2VTdGF0aWNNZXRob2RTaWduYXR1cmUvZGF0YS54bWwKQEAgLTAsMCArMSwxMiBAQAorPHRlc3REYXRhPgorCisgIDxkZWxldGVkX2J5X21ha2U+CisgICAgPGZpbGUgcGF0aD0iY2xhc3Nlcy9wYWNrYWdlQS9TZXJ2ZXIuY2xhc3MiIC8+CisgICAgPGZpbGUgcGF0aD0iY2xhc3Nlcy9wYWNrYWdlQS9DbGllbnQuY2xhc3MiIC8+CisgIDwvZGVsZXRlZF9ieV9tYWtlPgorCisgIDxyZWNvbXBpbGU+CisgICAgPGZpbGUgcGF0aD0ic291cmNlL3BhY2thZ2VBL0NsaWVudC5qYXZhIiAvPgorICA8L3JlY29tcGlsZT4KKworPC90ZXN0RGF0YT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZW1iZXJzQ2hhbmdlL2NoYW5nZVN0YXRpY01ldGhvZFNpZ25hdHVyZS9zcmMvcGFja2FnZUEvQ2xpZW50LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZW1iZXJzQ2hhbmdlL2NoYW5nZVN0YXRpY01ldGhvZFNpZ25hdHVyZS9zcmMvcGFja2FnZUEvQ2xpZW50LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGZiMWFiOQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21lbWJlcnNDaGFuZ2UvY2hhbmdlU3RhdGljTWV0aG9kU2lnbmF0dXJlL3NyYy9wYWNrYWdlQS9DbGllbnQuamF2YQpAQCAtMCwwICsxLDcgQEAKK3BhY2thZ2UgcGFja2FnZUE7CisKK3B1YmxpYyBjbGFzcyBDbGllbnQgeworICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisgICAgU2VydmVyLm1ldGhvZCgpOworICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZW1iZXJzQ2hhbmdlL2NoYW5nZVN0YXRpY01ldGhvZFNpZ25hdHVyZS9zcmMvcGFja2FnZUEvU2VydmVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZW1iZXJzQ2hhbmdlL2NoYW5nZVN0YXRpY01ldGhvZFNpZ25hdHVyZS9zcmMvcGFja2FnZUEvU2VydmVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2ZhZDVhMwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21lbWJlcnNDaGFuZ2UvY2hhbmdlU3RhdGljTWV0aG9kU2lnbmF0dXJlL3NyYy9wYWNrYWdlQS9TZXJ2ZXIuamF2YQpAQCAtMCwwICsxLDYgQEAKK3BhY2thZ2UgcGFja2FnZUE7CisKK3B1YmxpYyBjbGFzcyBTZXJ2ZXIgeworICBwdWJsaWMgc3RhdGljIHZvaWQgbWV0aG9kKCkgeworICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZW1iZXJzQ2hhbmdlL2NoYW5nZVN0YXRpY01ldGhvZFNpZ25hdHVyZS9zcmMvcGFja2FnZUEvU2VydmVyLmphdmEubmV3IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWVtYmVyc0NoYW5nZS9jaGFuZ2VTdGF0aWNNZXRob2RTaWduYXR1cmUvc3JjL3BhY2thZ2VBL1NlcnZlci5qYXZhLm5ldwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZTg4YzY3Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWVtYmVyc0NoYW5nZS9jaGFuZ2VTdGF0aWNNZXRob2RTaWduYXR1cmUvc3JjL3BhY2thZ2VBL1NlcnZlci5qYXZhLm5ldwpAQCAtMCwwICsxLDYgQEAKK3BhY2thZ2UgcGFja2FnZUE7CisKK3B1YmxpYyBjbGFzcyBTZXJ2ZXIgeworICBwdWJsaWMgc3RhdGljIHZvaWQgbWV0aG9kKGludCBhKSB7CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21lbWJlcnNDaGFuZ2UvZGVsZXRlQ29uc3RydWN0b3IubG9nIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWVtYmVyc0NoYW5nZS9kZWxldGVDb25zdHJ1Y3Rvci5sb2cKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmFlOTM5MAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21lbWJlcnNDaGFuZ2UvZGVsZXRlQ29uc3RydWN0b3IubG9nCkBAIC0wLDAgKzEsMTIgQEAKK0NsZWFuaW5nIG91dHB1dCBmaWxlczoKK291dC9wcm9kdWN0aW9uL0RlbGV0ZUNvbnN0cnVjdG9yL1NlcnZlci5jbGFzcworRW5kIG9mIGZpbGVzCitDb21waWxpbmcgZmlsZXM6CitzcmMvU2VydmVyLmphdmEKK0VuZCBvZiBmaWxlcworQ2xlYW5pbmcgb3V0cHV0IGZpbGVzOgorb3V0L3Byb2R1Y3Rpb24vRGVsZXRlQ29uc3RydWN0b3IvQ2xpZW50LmNsYXNzCitFbmQgb2YgZmlsZXMKK0NvbXBpbGluZyBmaWxlczoKK3NyYy9DbGllbnQuamF2YQorRW5kIG9mIGZpbGVzCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZW1iZXJzQ2hhbmdlL2RlbGV0ZUNvbnN0cnVjdG9yL1NlcnZlci5qYXZhLm5ldyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21lbWJlcnNDaGFuZ2UvZGVsZXRlQ29uc3RydWN0b3IvU2VydmVyLmphdmEubmV3Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFhYzA5MTUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZW1iZXJzQ2hhbmdlL2RlbGV0ZUNvbnN0cnVjdG9yL1NlcnZlci5qYXZhLm5ldwpAQCAtMCwwICsxLDIgQEAKK2NsYXNzIFNlcnZlciB7Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZW1iZXJzQ2hhbmdlL2RlbGV0ZUNvbnN0cnVjdG9yL2RhdGEueG1sIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWVtYmVyc0NoYW5nZS9kZWxldGVDb25zdHJ1Y3Rvci9kYXRhLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOGU3YTk5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWVtYmVyc0NoYW5nZS9kZWxldGVDb25zdHJ1Y3Rvci9kYXRhLnhtbApAQCAtMCwwICsxLDExIEBACis8dGVzdERhdGE+CisgIDxkZWxldGVkX2J5X21ha2U+CisgICAgPGZpbGUgcGF0aD0iY2xhc3Nlcy9TZXJ2ZXIuY2xhc3MiIC8+CisgICAgPGZpbGUgcGF0aD0iY2xhc3Nlcy9DbGllbnQuY2xhc3MiIC8+CisgIDwvZGVsZXRlZF9ieV9tYWtlPgorCisgIDxyZWNvbXBpbGU+CisgICAgPGZpbGUgcGF0aD0ic291cmNlL0NsaWVudC5qYXZhIiAvPgorICA8L3JlY29tcGlsZT4KKworPC90ZXN0RGF0YT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZW1iZXJzQ2hhbmdlL2RlbGV0ZUNvbnN0cnVjdG9yL3NyYy9DbGllbnQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21lbWJlcnNDaGFuZ2UvZGVsZXRlQ29uc3RydWN0b3Ivc3JjL0NsaWVudC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZhYWE3MDAKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZW1iZXJzQ2hhbmdlL2RlbGV0ZUNvbnN0cnVjdG9yL3NyYy9DbGllbnQuamF2YQpAQCAtMCwwICsxLDUgQEAKK2NsYXNzIENsaWVudCB7CisgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKyAgICBuZXcgU2VydmVyKDEwKTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWVtYmVyc0NoYW5nZS9kZWxldGVDb25zdHJ1Y3Rvci9zcmMvU2VydmVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZW1iZXJzQ2hhbmdlL2RlbGV0ZUNvbnN0cnVjdG9yL3NyYy9TZXJ2ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOGQ2YWVmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWVtYmVyc0NoYW5nZS9kZWxldGVDb25zdHJ1Y3Rvci9zcmMvU2VydmVyLmphdmEKQEAgLTAsMCArMSw0IEBACitjbGFzcyBTZXJ2ZXIgeworICBTZXJ2ZXIoaW50IGEpIHsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWVtYmVyc0NoYW5nZS9kZWxldGVJbm5lci5sb2cgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZW1iZXJzQ2hhbmdlL2RlbGV0ZUlubmVyLmxvZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZDIwYmM1Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWVtYmVyc0NoYW5nZS9kZWxldGVJbm5lci5sb2cKQEAgLTAsMCArMSwxMyBAQAorQ2xlYW5pbmcgb3V0cHV0IGZpbGVzOgorb3V0L3Byb2R1Y3Rpb24vRGVsZXRlSW5uZXIvT3V0ZXIkSW5uZXIuY2xhc3MKK291dC9wcm9kdWN0aW9uL0RlbGV0ZUlubmVyL091dGVyLmNsYXNzCitFbmQgb2YgZmlsZXMKK0NvbXBpbGluZyBmaWxlczoKK3NyYy9PdXRlci5qYXZhCitFbmQgb2YgZmlsZXMKK0NsZWFuaW5nIG91dHB1dCBmaWxlczoKK291dC9wcm9kdWN0aW9uL0RlbGV0ZUlubmVyL0NsaWVudC5jbGFzcworRW5kIG9mIGZpbGVzCitDb21waWxpbmcgZmlsZXM6CitzcmMvQ2xpZW50LmphdmEKK0VuZCBvZiBmaWxlcwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWVtYmVyc0NoYW5nZS9kZWxldGVJbm5lci9PdXRlci5qYXZhLm5ldyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21lbWJlcnNDaGFuZ2UvZGVsZXRlSW5uZXIvT3V0ZXIuamF2YS5uZXcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2M1NTUxNgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21lbWJlcnNDaGFuZ2UvZGVsZXRlSW5uZXIvT3V0ZXIuamF2YS5uZXcKQEAgLTAsMCArMSwzIEBACisKK3B1YmxpYyBjbGFzcyBPdXRlciB7Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZW1iZXJzQ2hhbmdlL2RlbGV0ZUlubmVyL2RhdGEueG1sIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWVtYmVyc0NoYW5nZS9kZWxldGVJbm5lci9kYXRhLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYjNmMjEwCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWVtYmVyc0NoYW5nZS9kZWxldGVJbm5lci9kYXRhLnhtbApAQCAtMCwwICsxLDExIEBACis8dGVzdERhdGE+CisgIDxkZWxldGVkX2J5X21ha2U+CisgICAgPGZpbGUgcGF0aD0iY2xhc3Nlcy9PdXRlci5jbGFzcyIgLz4KKyAgICA8ZmlsZSBwYXRoPSJjbGFzc2VzL091dGVyJElubmVyLmNsYXNzIiAvPgorICAgIDxmaWxlIHBhdGg9ImNsYXNzZXMvQ2xpZW50LmNsYXNzIiAvPgorICA8L2RlbGV0ZWRfYnlfbWFrZT4KKworICA8cmVjb21waWxlPgorICAgIDxmaWxlIHBhdGg9InNvdXJjZS9DbGllbnQuamF2YSIgLz4KKyAgPC9yZWNvbXBpbGU+Cis8L3Rlc3REYXRhPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21lbWJlcnNDaGFuZ2UvZGVsZXRlSW5uZXIvc3JjL0NsaWVudC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWVtYmVyc0NoYW5nZS9kZWxldGVJbm5lci9zcmMvQ2xpZW50LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjU2OGFkNwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21lbWJlcnNDaGFuZ2UvZGVsZXRlSW5uZXIvc3JjL0NsaWVudC5qYXZhCkBAIC0wLDAgKzEsNCBAQAorCitwdWJsaWMgY2xhc3MgQ2xpZW50IHsKKyAgT3V0ZXIuSW5uZXIgZmllbGQ7Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZW1iZXJzQ2hhbmdlL2RlbGV0ZUlubmVyL3NyYy9PdXRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWVtYmVyc0NoYW5nZS9kZWxldGVJbm5lci9zcmMvT3V0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZjY0MWQ0Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWVtYmVyc0NoYW5nZS9kZWxldGVJbm5lci9zcmMvT3V0ZXIuamF2YQpAQCAtMCwwICsxLDQgQEAKKworcHVibGljIGNsYXNzIE91dGVyIHsKKyAgcHVibGljIHN0YXRpYyBjbGFzcyBJbm5lciB7fQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWVtYmVyc0NoYW5nZS9kZWxldGVJbnRlcmZhY2VNZXRob2QubG9nIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWVtYmVyc0NoYW5nZS9kZWxldGVJbnRlcmZhY2VNZXRob2QubG9nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZhYTljNWYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZW1iZXJzQ2hhbmdlL2RlbGV0ZUludGVyZmFjZU1ldGhvZC5sb2cKQEAgLTAsMCArMSwxNCBAQAorQ2xlYW5pbmcgb3V0cHV0IGZpbGVzOgorb3V0L3Byb2R1Y3Rpb24vRGVsZXRlSW50ZXJmYWNlTWV0aG9kL0lmYWNlLmNsYXNzCitFbmQgb2YgZmlsZXMKK0NvbXBpbGluZyBmaWxlczoKK3NyYy9JZmFjZS5qYXZhCitFbmQgb2YgZmlsZXMKK0NsZWFuaW5nIG91dHB1dCBmaWxlczoKK291dC9wcm9kdWN0aW9uL0RlbGV0ZUludGVyZmFjZU1ldGhvZC9JZmFjZUltcGwuY2xhc3MKK291dC9wcm9kdWN0aW9uL0RlbGV0ZUludGVyZmFjZU1ldGhvZC9JZmFjZUltcGwyLmNsYXNzCitFbmQgb2YgZmlsZXMKK0NvbXBpbGluZyBmaWxlczoKK3NyYy9JZmFjZUltcGwuamF2YQorc3JjL0lmYWNlSW1wbDIuamF2YQorRW5kIG9mIGZpbGVzCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZW1iZXJzQ2hhbmdlL2RlbGV0ZUludGVyZmFjZU1ldGhvZC9JZmFjZS5qYXZhLm5ldyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21lbWJlcnNDaGFuZ2UvZGVsZXRlSW50ZXJmYWNlTWV0aG9kL0lmYWNlLmphdmEubmV3Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI5NWYwZDUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZW1iZXJzQ2hhbmdlL2RlbGV0ZUludGVyZmFjZU1ldGhvZC9JZmFjZS5qYXZhLm5ldwpAQCAtMCwwICsxLDIgQEAKK3B1YmxpYyBpbnRlcmZhY2UgSWZhY2UgeworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21lbWJlcnNDaGFuZ2UvZGVsZXRlSW50ZXJmYWNlTWV0aG9kL2RhdGEueG1sIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWVtYmVyc0NoYW5nZS9kZWxldGVJbnRlcmZhY2VNZXRob2QvZGF0YS54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWY3ZDI1NwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21lbWJlcnNDaGFuZ2UvZGVsZXRlSW50ZXJmYWNlTWV0aG9kL2RhdGEueG1sCkBAIC0wLDAgKzEsMTIgQEAKKzx0ZXN0RGF0YT4KKyAgPGRlbGV0ZWRfYnlfbWFrZT4KKyAgICA8ZmlsZSBwYXRoPSJjbGFzc2VzL0lmYWNlSW1wbC5jbGFzcyIgLz4KKyAgICA8ZmlsZSBwYXRoPSJjbGFzc2VzL0lmYWNlaW1wbDIuY2xhc3MiIC8+CisgIDwvZGVsZXRlZF9ieV9tYWtlPgorCisgIDxyZWNvbXBpbGU+CisgICAgPGZpbGUgcGF0aD0ic291cmNlL0lmYWNlSW1wbC5qYXZhIiAvPgorICAgIDxmaWxlIHBhdGg9InNvdXJjZS9JZmFjZUltcGwyLmphdmEiIC8+CisgIDwvcmVjb21waWxlPgorCis8L3Rlc3REYXRhPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21lbWJlcnNDaGFuZ2UvZGVsZXRlSW50ZXJmYWNlTWV0aG9kL3NyYy9JZmFjZS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWVtYmVyc0NoYW5nZS9kZWxldGVJbnRlcmZhY2VNZXRob2Qvc3JjL0lmYWNlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTkxMmEzMQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21lbWJlcnNDaGFuZ2UvZGVsZXRlSW50ZXJmYWNlTWV0aG9kL3NyYy9JZmFjZS5qYXZhCkBAIC0wLDAgKzEsMyBAQAorcHVibGljIGludGVyZmFjZSBJZmFjZSB7Cisgdm9pZCBtZXRob2QoKTsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZW1iZXJzQ2hhbmdlL2RlbGV0ZUludGVyZmFjZU1ldGhvZC9zcmMvSWZhY2VJbXBsLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZW1iZXJzQ2hhbmdlL2RlbGV0ZUludGVyZmFjZU1ldGhvZC9zcmMvSWZhY2VJbXBsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjljN2M4NAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21lbWJlcnNDaGFuZ2UvZGVsZXRlSW50ZXJmYWNlTWV0aG9kL3NyYy9JZmFjZUltcGwuamF2YQpAQCAtMCwwICsxLDMgQEAKK3B1YmxpYyBjbGFzcyBJZmFjZUltcGwgaW1wbGVtZW50cyBJZmFjZSB7CisgcHVibGljIHZvaWQgbWV0aG9kKCkge30KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZW1iZXJzQ2hhbmdlL2RlbGV0ZUludGVyZmFjZU1ldGhvZC9zcmMvSWZhY2VJbXBsMi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWVtYmVyc0NoYW5nZS9kZWxldGVJbnRlcmZhY2VNZXRob2Qvc3JjL0lmYWNlSW1wbDIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMGFiNzMxCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWVtYmVyc0NoYW5nZS9kZWxldGVJbnRlcmZhY2VNZXRob2Qvc3JjL0lmYWNlSW1wbDIuamF2YQpAQCAtMCwwICsxLDQgQEAKK3B1YmxpYyBjbGFzcyBJZmFjZUltcGwyIGltcGxlbWVudHMgSWZhY2UgeworIEBPdmVycmlkZQorIHB1YmxpYyB2b2lkIG1ldGhvZCgpIHt9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWVtYmVyc0NoYW5nZS9kZWxldGVNZXRob2QubG9nIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWVtYmVyc0NoYW5nZS9kZWxldGVNZXRob2QubG9nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNiMDQ4NjUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZW1iZXJzQ2hhbmdlL2RlbGV0ZU1ldGhvZC5sb2cKQEAgLTAsMCArMSwxMiBAQAorQ2xlYW5pbmcgb3V0cHV0IGZpbGVzOgorb3V0L3Byb2R1Y3Rpb24vRGVsZXRlTWV0aG9kL1NlcnZlci5jbGFzcworRW5kIG9mIGZpbGVzCitDb21waWxpbmcgZmlsZXM6CitzcmMvU2VydmVyLmphdmEKK0VuZCBvZiBmaWxlcworQ2xlYW5pbmcgb3V0cHV0IGZpbGVzOgorb3V0L3Byb2R1Y3Rpb24vRGVsZXRlTWV0aG9kL1N1cGVyLmNsYXNzCitFbmQgb2YgZmlsZXMKK0NvbXBpbGluZyBmaWxlczoKK3NyYy9TdXBlci5qYXZhCitFbmQgb2YgZmlsZXMKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21lbWJlcnNDaGFuZ2UvZGVsZXRlTWV0aG9kL1NlcnZlci5qYXZhLm5ldyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21lbWJlcnNDaGFuZ2UvZGVsZXRlTWV0aG9kL1NlcnZlci5qYXZhLm5ldwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYjRmZDFhZQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21lbWJlcnNDaGFuZ2UvZGVsZXRlTWV0aG9kL1NlcnZlci5qYXZhLm5ldwpAQCAtMCwwICsxLDMgQEAKKworcHVibGljIGNsYXNzIFNlcnZlciB7Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZW1iZXJzQ2hhbmdlL2RlbGV0ZU1ldGhvZC9kYXRhLnhtbCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21lbWJlcnNDaGFuZ2UvZGVsZXRlTWV0aG9kL2RhdGEueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkzMGE4OGEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZW1iZXJzQ2hhbmdlL2RlbGV0ZU1ldGhvZC9kYXRhLnhtbApAQCAtMCwwICsxLDExIEBACis8dGVzdERhdGE+CisgIDxkZWxldGVkX2J5X21ha2U+CisgICAgPGZpbGUgcGF0aD0iY2xhc3Nlcy9TZXJ2ZXIuY2xhc3MiIC8+CisgICAgPGZpbGUgcGF0aD0iY2xhc3Nlcy9TdXBlci5jbGFzcyIgLz4KKyAgPC9kZWxldGVkX2J5X21ha2U+CisKKyAgPHJlY29tcGlsZT4KKyAgICA8ZmlsZSBwYXRoPSJzb3VyY2UvU3VwZXIuamF2YSIgLz4KKyAgPC9yZWNvbXBpbGU+CisKKzwvdGVzdERhdGE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWVtYmVyc0NoYW5nZS9kZWxldGVNZXRob2Qvc3JjL1NlcnZlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWVtYmVyc0NoYW5nZS9kZWxldGVNZXRob2Qvc3JjL1NlcnZlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM4ODA1NzUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZW1iZXJzQ2hhbmdlL2RlbGV0ZU1ldGhvZC9zcmMvU2VydmVyLmphdmEKQEAgLTAsMCArMSw0IEBACisKK3B1YmxpYyBjbGFzcyBTZXJ2ZXIgeworICBwdWJsaWMgdm9pZCBmb28oKXt9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZW1iZXJzQ2hhbmdlL2RlbGV0ZU1ldGhvZC9zcmMvU3VwZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21lbWJlcnNDaGFuZ2UvZGVsZXRlTWV0aG9kL3NyYy9TdXBlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ1ZDhkMGQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZW1iZXJzQ2hhbmdlL2RlbGV0ZU1ldGhvZC9zcmMvU3VwZXIuamF2YQpAQCAtMCwwICsxLDYgQEAKKworcHVibGljIGNsYXNzIFN1cGVyIGV4dGVuZHMgU2VydmVyeworICB7CisgICAgZm9vKCk7CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21lbWJlcnNDaGFuZ2UvZGVsZXRlTWV0aG9kSW1wbGVtZW50YXRpb24ubG9nIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWVtYmVyc0NoYW5nZS9kZWxldGVNZXRob2RJbXBsZW1lbnRhdGlvbi5sb2cKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzBiM2M4NwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21lbWJlcnNDaGFuZ2UvZGVsZXRlTWV0aG9kSW1wbGVtZW50YXRpb24ubG9nCkBAIC0wLDAgKzEsMTIgQEAKK0NsZWFuaW5nIG91dHB1dCBmaWxlczoKK291dC9wcm9kdWN0aW9uL0RlbGV0ZU1ldGhvZEltcGxlbWVudGF0aW9uL0Jhc2VJbXBsLmNsYXNzCitFbmQgb2YgZmlsZXMKK0NvbXBpbGluZyBmaWxlczoKK3NyYy9CYXNlSW1wbC5qYXZhCitFbmQgb2YgZmlsZXMKK0NsZWFuaW5nIG91dHB1dCBmaWxlczoKK291dC9wcm9kdWN0aW9uL0RlbGV0ZU1ldGhvZEltcGxlbWVudGF0aW9uL0NvbmNyZXRlQmFzZS5jbGFzcworRW5kIG9mIGZpbGVzCitDb21waWxpbmcgZmlsZXM6CitzcmMvQ29uY3JldGVCYXNlLmphdmEKK0VuZCBvZiBmaWxlcwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWVtYmVyc0NoYW5nZS9kZWxldGVNZXRob2RJbXBsZW1lbnRhdGlvbi9CYXNlSW1wbC5qYXZhLm5ldyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21lbWJlcnNDaGFuZ2UvZGVsZXRlTWV0aG9kSW1wbGVtZW50YXRpb24vQmFzZUltcGwuamF2YS5uZXcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDFlZWIyZQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21lbWJlcnNDaGFuZ2UvZGVsZXRlTWV0aG9kSW1wbGVtZW50YXRpb24vQmFzZUltcGwuamF2YS5uZXcKQEAgLTAsMCArMSwyIEBACitwdWJsaWMgYWJzdHJhY3QgY2xhc3MgQmFzZUltcGwgaW1wbGVtZW50cyBCYXNlIHsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZW1iZXJzQ2hhbmdlL2RlbGV0ZU1ldGhvZEltcGxlbWVudGF0aW9uL2RhdGEueG1sIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWVtYmVyc0NoYW5nZS9kZWxldGVNZXRob2RJbXBsZW1lbnRhdGlvbi9kYXRhLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMmU2YjI2Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWVtYmVyc0NoYW5nZS9kZWxldGVNZXRob2RJbXBsZW1lbnRhdGlvbi9kYXRhLnhtbApAQCAtMCwwICsxLDExIEBACis8dGVzdERhdGE+CisgIDxkZWxldGVkX2J5X21ha2U+CisgICAgPGZpbGUgcGF0aD0iY2xhc3Nlcy9CYXNlSW1wbC5jbGFzcyIgLz4KKyAgICA8ZmlsZSBwYXRoPSJjbGFzc2VzL0NvbmNyZXRlQmFzZS5jbGFzcyIgLz4KKyAgPC9kZWxldGVkX2J5X21ha2U+CisKKyAgPHJlY29tcGlsZT4KKyAgICA8ZmlsZSBwYXRoPSJzb3VyY2UvQ29uY3JldGVCYXNlLmphdmEiIC8+CisgIDwvcmVjb21waWxlPgorCis8L3Rlc3REYXRhPgpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWVtYmVyc0NoYW5nZS9kZWxldGVNZXRob2RJbXBsZW1lbnRhdGlvbi9zcmMvQmFzZS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWVtYmVyc0NoYW5nZS9kZWxldGVNZXRob2RJbXBsZW1lbnRhdGlvbi9zcmMvQmFzZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjliMDZiOTMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZW1iZXJzQ2hhbmdlL2RlbGV0ZU1ldGhvZEltcGxlbWVudGF0aW9uL3NyYy9CYXNlLmphdmEKQEAgLTAsMCArMSw0IEBACitwdWJsaWMgaW50ZXJmYWNlIEJhc2UgeworICB2b2lkIGZvbygpOworICB2b2lkIGJhcigpOworfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWVtYmVyc0NoYW5nZS9kZWxldGVNZXRob2RJbXBsZW1lbnRhdGlvbi9zcmMvQmFzZUltcGwuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21lbWJlcnNDaGFuZ2UvZGVsZXRlTWV0aG9kSW1wbGVtZW50YXRpb24vc3JjL0Jhc2VJbXBsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzNkOTVlMAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21lbWJlcnNDaGFuZ2UvZGVsZXRlTWV0aG9kSW1wbGVtZW50YXRpb24vc3JjL0Jhc2VJbXBsLmphdmEKQEAgLTAsMCArMSw0IEBACitwdWJsaWMgYWJzdHJhY3QgY2xhc3MgQmFzZUltcGwgaW1wbGVtZW50cyBCYXNlIHsKKyAgcHVibGljIHZvaWQgZm9vKCkge30KKyAgLy8gbGVhdmUgYmFyKCkgdW5pbXBsZW1lbnRlZAorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWVtYmVyc0NoYW5nZS9kZWxldGVNZXRob2RJbXBsZW1lbnRhdGlvbi9zcmMvQ29uY3JldGVCYXNlLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZW1iZXJzQ2hhbmdlL2RlbGV0ZU1ldGhvZEltcGxlbWVudGF0aW9uL3NyYy9Db25jcmV0ZUJhc2UuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMjdkYTE2Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWVtYmVyc0NoYW5nZS9kZWxldGVNZXRob2RJbXBsZW1lbnRhdGlvbi9zcmMvQ29uY3JldGVCYXNlLmphdmEKQEAgLTAsMCArMSwzIEBACitwdWJsaWMgY2xhc3MgQ29uY3JldGVCYXNlIGV4dGVuZHMgQmFzZUltcGwgeworICBwdWJsaWMgdm9pZCBiYXIoKSB7fTsKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21lbWJlcnNDaGFuZ2UvZGVsZXRlTWV0aG9kSW1wbGVtZW50YXRpb24yLmxvZyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21lbWJlcnNDaGFuZ2UvZGVsZXRlTWV0aG9kSW1wbGVtZW50YXRpb24yLmxvZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZDJmZDNhCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWVtYmVyc0NoYW5nZS9kZWxldGVNZXRob2RJbXBsZW1lbnRhdGlvbjIubG9nCkBAIC0wLDAgKzEsNiBAQAorQ2xlYW5pbmcgb3V0cHV0IGZpbGVzOgorb3V0L3Byb2R1Y3Rpb24vRGVsZXRlTWV0aG9kSW1wbGVtZW50YXRpb24yL0Jhc2VJbXBsLmNsYXNzCitFbmQgb2YgZmlsZXMKK0NvbXBpbGluZyBmaWxlczoKK3NyYy9CYXNlSW1wbC5qYXZhCitFbmQgb2YgZmlsZXMKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21lbWJlcnNDaGFuZ2UvZGVsZXRlTWV0aG9kSW1wbGVtZW50YXRpb24yL0Jhc2VJbXBsLmphdmEubmV3IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWVtYmVyc0NoYW5nZS9kZWxldGVNZXRob2RJbXBsZW1lbnRhdGlvbjIvQmFzZUltcGwuamF2YS5uZXcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjE3ZDY4ZAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21lbWJlcnNDaGFuZ2UvZGVsZXRlTWV0aG9kSW1wbGVtZW50YXRpb24yL0Jhc2VJbXBsLmphdmEubmV3CkBAIC0wLDAgKzEsMiBAQAorcHVibGljIGFic3RyYWN0IGNsYXNzIEJhc2VJbXBsIGV4dGVuZHMgQmFzZSB7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWVtYmVyc0NoYW5nZS9kZWxldGVNZXRob2RJbXBsZW1lbnRhdGlvbjIvZGF0YS54bWwgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZW1iZXJzQ2hhbmdlL2RlbGV0ZU1ldGhvZEltcGxlbWVudGF0aW9uMi9kYXRhLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NzM1YmQ2Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWVtYmVyc0NoYW5nZS9kZWxldGVNZXRob2RJbXBsZW1lbnRhdGlvbjIvZGF0YS54bWwKQEAgLTAsMCArMSw5IEBACis8dGVzdERhdGE+CisgIDxkZWxldGVkX2J5X21ha2U+CisgICAgPGZpbGUgcGF0aD0iY2xhc3Nlcy9CYXNlSW1wbC5jbGFzcyIgLz4KKyAgPC9kZWxldGVkX2J5X21ha2U+CisKKyAgPHJlY29tcGlsZT4KKyAgPC9yZWNvbXBpbGU+CisKKzwvdGVzdERhdGE+CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZW1iZXJzQ2hhbmdlL2RlbGV0ZU1ldGhvZEltcGxlbWVudGF0aW9uMi9zcmMvQmFzZS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWVtYmVyc0NoYW5nZS9kZWxldGVNZXRob2RJbXBsZW1lbnRhdGlvbjIvc3JjL0Jhc2UuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MTZkZjA1Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWVtYmVyc0NoYW5nZS9kZWxldGVNZXRob2RJbXBsZW1lbnRhdGlvbjIvc3JjL0Jhc2UuamF2YQpAQCAtMCwwICsxLDMgQEAKK3B1YmxpYyBhYnN0cmFjdCBjbGFzcyBCYXNlIHsKKyAgdm9pZCBmb28oKSB7fQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWVtYmVyc0NoYW5nZS9kZWxldGVNZXRob2RJbXBsZW1lbnRhdGlvbjIvc3JjL0Jhc2VJbXBsLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZW1iZXJzQ2hhbmdlL2RlbGV0ZU1ldGhvZEltcGxlbWVudGF0aW9uMi9zcmMvQmFzZUltcGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OTQ1NWQ0Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWVtYmVyc0NoYW5nZS9kZWxldGVNZXRob2RJbXBsZW1lbnRhdGlvbjIvc3JjL0Jhc2VJbXBsLmphdmEKQEAgLTAsMCArMSwzIEBACitwdWJsaWMgYWJzdHJhY3QgY2xhc3MgQmFzZUltcGwgZXh0ZW5kcyBCYXNlIHsKKyAgcHVibGljIHZvaWQgZm9vKCkge30KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21lbWJlcnNDaGFuZ2UvZGVsZXRlTWV0aG9kSW1wbGVtZW50YXRpb24yL3NyYy9Db25jcmV0ZUJhc2UuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21lbWJlcnNDaGFuZ2UvZGVsZXRlTWV0aG9kSW1wbGVtZW50YXRpb24yL3NyYy9Db25jcmV0ZUJhc2UuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OWY1ZDdhCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWVtYmVyc0NoYW5nZS9kZWxldGVNZXRob2RJbXBsZW1lbnRhdGlvbjIvc3JjL0NvbmNyZXRlQmFzZS5qYXZhCkBAIC0wLDAgKzEsMiBAQAorcHVibGljIGNsYXNzIENvbmNyZXRlQmFzZSBleHRlbmRzIEJhc2VJbXBsIHsKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21lbWJlcnNDaGFuZ2UvZGVsZXRlTWV0aG9kSW1wbGVtZW50YXRpb24zLmxvZyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21lbWJlcnNDaGFuZ2UvZGVsZXRlTWV0aG9kSW1wbGVtZW50YXRpb24zLmxvZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZmU4ODk2Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWVtYmVyc0NoYW5nZS9kZWxldGVNZXRob2RJbXBsZW1lbnRhdGlvbjMubG9nCkBAIC0wLDAgKzEsMTIgQEAKK0NsZWFuaW5nIG91dHB1dCBmaWxlczoKK291dC9wcm9kdWN0aW9uL0RlbGV0ZU1ldGhvZEltcGxlbWVudGF0aW9uMy9CYXNlLmNsYXNzCitFbmQgb2YgZmlsZXMKK0NvbXBpbGluZyBmaWxlczoKK3NyYy9CYXNlLmphdmEKK0VuZCBvZiBmaWxlcworQ2xlYW5pbmcgb3V0cHV0IGZpbGVzOgorb3V0L3Byb2R1Y3Rpb24vRGVsZXRlTWV0aG9kSW1wbGVtZW50YXRpb24zL0Jhc2VJbXBsLmNsYXNzCitFbmQgb2YgZmlsZXMKK0NvbXBpbGluZyBmaWxlczoKK3NyYy9CYXNlSW1wbC5qYXZhCitFbmQgb2YgZmlsZXMKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21lbWJlcnNDaGFuZ2UvZGVsZXRlTWV0aG9kSW1wbGVtZW50YXRpb24zL0Jhc2UuamF2YS5uZXcgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZW1iZXJzQ2hhbmdlL2RlbGV0ZU1ldGhvZEltcGxlbWVudGF0aW9uMy9CYXNlLmphdmEubmV3Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjExZjc5MWEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZW1iZXJzQ2hhbmdlL2RlbGV0ZU1ldGhvZEltcGxlbWVudGF0aW9uMy9CYXNlLmphdmEubmV3CkBAIC0wLDAgKzEsMiBAQAorcHVibGljIGNsYXNzIEJhc2UgeworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21lbWJlcnNDaGFuZ2UvZGVsZXRlTWV0aG9kSW1wbGVtZW50YXRpb24zL2RhdGEueG1sIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWVtYmVyc0NoYW5nZS9kZWxldGVNZXRob2RJbXBsZW1lbnRhdGlvbjMvZGF0YS54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDU1OTI3MgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21lbWJlcnNDaGFuZ2UvZGVsZXRlTWV0aG9kSW1wbGVtZW50YXRpb24zL2RhdGEueG1sCkBAIC0wLDAgKzEsMTEgQEAKKzx0ZXN0RGF0YT4KKyAgPGRlbGV0ZWRfYnlfbWFrZT4KKyAgICA8ZmlsZSBwYXRoPSJjbGFzc2VzL0Jhc2UuY2xhc3MiIC8+CisgICAgPGZpbGUgcGF0aD0iY2xhc3Nlcy9CYXNlSW1wbC5jbGFzcyIgLz4KKyAgPC9kZWxldGVkX2J5X21ha2U+CisKKyAgPHJlY29tcGlsZT4KKyAgICA8ZmlsZSBwYXRoPSJzb3VyY2UvQmFzZUltcGwuamF2YSIgLz4KKyAgPC9yZWNvbXBpbGU+CisKKzwvdGVzdERhdGE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWVtYmVyc0NoYW5nZS9kZWxldGVNZXRob2RJbXBsZW1lbnRhdGlvbjMvc3JjL0Jhc2UuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21lbWJlcnNDaGFuZ2UvZGVsZXRlTWV0aG9kSW1wbGVtZW50YXRpb24zL3NyYy9CYXNlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzgzOTZjNQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21lbWJlcnNDaGFuZ2UvZGVsZXRlTWV0aG9kSW1wbGVtZW50YXRpb24zL3NyYy9CYXNlLmphdmEKQEAgLTAsMCArMSwzIEBACitwdWJsaWMgY2xhc3MgQmFzZSB7CisgIHB1YmxpYyB2b2lkIGZvbygpIHt9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWVtYmVyc0NoYW5nZS9kZWxldGVNZXRob2RJbXBsZW1lbnRhdGlvbjMvc3JjL0Jhc2VJZmFjZS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWVtYmVyc0NoYW5nZS9kZWxldGVNZXRob2RJbXBsZW1lbnRhdGlvbjMvc3JjL0Jhc2VJZmFjZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhmN2FiYzMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZW1iZXJzQ2hhbmdlL2RlbGV0ZU1ldGhvZEltcGxlbWVudGF0aW9uMy9zcmMvQmFzZUlmYWNlLmphdmEKQEAgLTAsMCArMSwzIEBACitwdWJsaWMgaW50ZXJmYWNlIEJhc2VJZmFjZSB7CisgIHZvaWQgZm9vKCk7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWVtYmVyc0NoYW5nZS9kZWxldGVNZXRob2RJbXBsZW1lbnRhdGlvbjMvc3JjL0Jhc2VJbXBsLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZW1iZXJzQ2hhbmdlL2RlbGV0ZU1ldGhvZEltcGxlbWVudGF0aW9uMy9zcmMvQmFzZUltcGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYjQ3YmJlCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWVtYmVyc0NoYW5nZS9kZWxldGVNZXRob2RJbXBsZW1lbnRhdGlvbjMvc3JjL0Jhc2VJbXBsLmphdmEKQEAgLTAsMCArMSwyIEBACitwdWJsaWMgY2xhc3MgQmFzZUltcGwgZXh0ZW5kcyBCYXNlIGltcGxlbWVudHMgQmFzZUlmYWNlIHsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZW1iZXJzQ2hhbmdlL2RlbGV0ZU1ldGhvZEltcGxlbWVudGF0aW9uNC5sb2cgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZW1iZXJzQ2hhbmdlL2RlbGV0ZU1ldGhvZEltcGxlbWVudGF0aW9uNC5sb2cKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGI3MmIwZgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21lbWJlcnNDaGFuZ2UvZGVsZXRlTWV0aG9kSW1wbGVtZW50YXRpb240LmxvZwpAQCAtMCwwICsxLDE0IEBACitDbGVhbmluZyBvdXRwdXQgZmlsZXM6CitvdXQvcHJvZHVjdGlvbi9EZWxldGVNZXRob2RJbXBsZW1lbnRhdGlvbjQvQmFzZS5jbGFzcworRW5kIG9mIGZpbGVzCitDb21waWxpbmcgZmlsZXM6CitzcmMvQmFzZS5qYXZhCitFbmQgb2YgZmlsZXMKK0NsZWFuaW5nIG91dHB1dCBmaWxlczoKK291dC9wcm9kdWN0aW9uL0RlbGV0ZU1ldGhvZEltcGxlbWVudGF0aW9uNC9CYXNlSW1wbC5jbGFzcworb3V0L3Byb2R1Y3Rpb24vRGVsZXRlTWV0aG9kSW1wbGVtZW50YXRpb240L0Jhc2VJbXBsSW1wbC5jbGFzcworRW5kIG9mIGZpbGVzCitDb21waWxpbmcgZmlsZXM6CitzcmMvQmFzZUltcGwuamF2YQorc3JjL0Jhc2VJbXBsSW1wbC5qYXZhCitFbmQgb2YgZmlsZXMKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21lbWJlcnNDaGFuZ2UvZGVsZXRlTWV0aG9kSW1wbGVtZW50YXRpb240L0Jhc2UuamF2YS5uZXcgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZW1iZXJzQ2hhbmdlL2RlbGV0ZU1ldGhvZEltcGxlbWVudGF0aW9uNC9CYXNlLmphdmEubmV3Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjExZjc5MWEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZW1iZXJzQ2hhbmdlL2RlbGV0ZU1ldGhvZEltcGxlbWVudGF0aW9uNC9CYXNlLmphdmEubmV3CkBAIC0wLDAgKzEsMiBAQAorcHVibGljIGNsYXNzIEJhc2UgeworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21lbWJlcnNDaGFuZ2UvZGVsZXRlTWV0aG9kSW1wbGVtZW50YXRpb240L2RhdGEueG1sIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWVtYmVyc0NoYW5nZS9kZWxldGVNZXRob2RJbXBsZW1lbnRhdGlvbjQvZGF0YS54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDc2NTcwZQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21lbWJlcnNDaGFuZ2UvZGVsZXRlTWV0aG9kSW1wbGVtZW50YXRpb240L2RhdGEueG1sCkBAIC0wLDAgKzEsMTEgQEAKKzx0ZXN0RGF0YT4KKyAgPGRlbGV0ZWRfYnlfbWFrZT4KKyAgICA8ZmlsZSBwYXRoPSJjbGFzc2VzL0Jhc2UuY2xhc3MiIC8+CisgICAgPGZpbGUgcGF0aD0iY2xhc3Nlcy9CYXNlSW1wbEltcGwuY2xhc3MiIC8+CisgIDwvZGVsZXRlZF9ieV9tYWtlPgorCisgIDxyZWNvbXBpbGU+CisgICAgPGZpbGUgcGF0aD0ic291cmNlL0Jhc2VJbXBsSW1wbC5qYXZhIiAvPgorICA8L3JlY29tcGlsZT4KKworPC90ZXN0RGF0YT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZW1iZXJzQ2hhbmdlL2RlbGV0ZU1ldGhvZEltcGxlbWVudGF0aW9uNC9zcmMvQmFzZS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWVtYmVyc0NoYW5nZS9kZWxldGVNZXRob2RJbXBsZW1lbnRhdGlvbjQvc3JjL0Jhc2UuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zODM5NmM1Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWVtYmVyc0NoYW5nZS9kZWxldGVNZXRob2RJbXBsZW1lbnRhdGlvbjQvc3JjL0Jhc2UuamF2YQpAQCAtMCwwICsxLDMgQEAKK3B1YmxpYyBjbGFzcyBCYXNlIHsKKyAgcHVibGljIHZvaWQgZm9vKCkge30KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZW1iZXJzQ2hhbmdlL2RlbGV0ZU1ldGhvZEltcGxlbWVudGF0aW9uNC9zcmMvQmFzZUlmYWNlLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZW1iZXJzQ2hhbmdlL2RlbGV0ZU1ldGhvZEltcGxlbWVudGF0aW9uNC9zcmMvQmFzZUlmYWNlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGY3YWJjMwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21lbWJlcnNDaGFuZ2UvZGVsZXRlTWV0aG9kSW1wbGVtZW50YXRpb240L3NyYy9CYXNlSWZhY2UuamF2YQpAQCAtMCwwICsxLDMgQEAKK3B1YmxpYyBpbnRlcmZhY2UgQmFzZUlmYWNlIHsKKyAgdm9pZCBmb28oKTsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZW1iZXJzQ2hhbmdlL2RlbGV0ZU1ldGhvZEltcGxlbWVudGF0aW9uNC9zcmMvQmFzZUltcGwuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21lbWJlcnNDaGFuZ2UvZGVsZXRlTWV0aG9kSW1wbGVtZW50YXRpb240L3NyYy9CYXNlSW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdhMzMxZjkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZW1iZXJzQ2hhbmdlL2RlbGV0ZU1ldGhvZEltcGxlbWVudGF0aW9uNC9zcmMvQmFzZUltcGwuamF2YQpAQCAtMCwwICsxLDIgQEAKK3B1YmxpYyBjbGFzcyBCYXNlSW1wbCBleHRlbmRzIEJhc2V7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWVtYmVyc0NoYW5nZS9kZWxldGVNZXRob2RJbXBsZW1lbnRhdGlvbjQvc3JjL0Jhc2VJbXBsSW1wbC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWVtYmVyc0NoYW5nZS9kZWxldGVNZXRob2RJbXBsZW1lbnRhdGlvbjQvc3JjL0Jhc2VJbXBsSW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgxZWU2OGYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZW1iZXJzQ2hhbmdlL2RlbGV0ZU1ldGhvZEltcGxlbWVudGF0aW9uNC9zcmMvQmFzZUltcGxJbXBsLmphdmEKQEAgLTAsMCArMSwyIEBACitwdWJsaWMgY2xhc3MgQmFzZUltcGxJbXBsIGV4dGVuZHMgQmFzZUltcGwgaW1wbGVtZW50cyBCYXNlSWZhY2UgeworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21lbWJlcnNDaGFuZ2UvZGVsZXRlTWV0aG9kSW1wbGVtZW50YXRpb241LmxvZyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21lbWJlcnNDaGFuZ2UvZGVsZXRlTWV0aG9kSW1wbGVtZW50YXRpb241LmxvZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMzY5NDBmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWVtYmVyc0NoYW5nZS9kZWxldGVNZXRob2RJbXBsZW1lbnRhdGlvbjUubG9nCkBAIC0wLDAgKzEsMTIgQEAKK0NsZWFuaW5nIG91dHB1dCBmaWxlczoKK291dC9wcm9kdWN0aW9uL0RlbGV0ZU1ldGhvZEltcGxlbWVudGF0aW9uNS9CYXNlLmNsYXNzCitFbmQgb2YgZmlsZXMKK0NvbXBpbGluZyBmaWxlczoKK3NyYy9CYXNlLmphdmEKK0VuZCBvZiBmaWxlcworQ2xlYW5pbmcgb3V0cHV0IGZpbGVzOgorb3V0L3Byb2R1Y3Rpb24vRGVsZXRlTWV0aG9kSW1wbGVtZW50YXRpb241L0Jhc2VJbXBsLmNsYXNzCitFbmQgb2YgZmlsZXMKK0NvbXBpbGluZyBmaWxlczoKK3NyYy9CYXNlSW1wbC5qYXZhCitFbmQgb2YgZmlsZXMKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21lbWJlcnNDaGFuZ2UvZGVsZXRlTWV0aG9kSW1wbGVtZW50YXRpb241L0Jhc2UuamF2YS5uZXcgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZW1iZXJzQ2hhbmdlL2RlbGV0ZU1ldGhvZEltcGxlbWVudGF0aW9uNS9CYXNlLmphdmEubmV3Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjExZjc5MWEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZW1iZXJzQ2hhbmdlL2RlbGV0ZU1ldGhvZEltcGxlbWVudGF0aW9uNS9CYXNlLmphdmEubmV3CkBAIC0wLDAgKzEsMiBAQAorcHVibGljIGNsYXNzIEJhc2UgeworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21lbWJlcnNDaGFuZ2UvZGVsZXRlTWV0aG9kSW1wbGVtZW50YXRpb241L2RhdGEueG1sIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWVtYmVyc0NoYW5nZS9kZWxldGVNZXRob2RJbXBsZW1lbnRhdGlvbjUvZGF0YS54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDU1OTI3MgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21lbWJlcnNDaGFuZ2UvZGVsZXRlTWV0aG9kSW1wbGVtZW50YXRpb241L2RhdGEueG1sCkBAIC0wLDAgKzEsMTEgQEAKKzx0ZXN0RGF0YT4KKyAgPGRlbGV0ZWRfYnlfbWFrZT4KKyAgICA8ZmlsZSBwYXRoPSJjbGFzc2VzL0Jhc2UuY2xhc3MiIC8+CisgICAgPGZpbGUgcGF0aD0iY2xhc3Nlcy9CYXNlSW1wbC5jbGFzcyIgLz4KKyAgPC9kZWxldGVkX2J5X21ha2U+CisKKyAgPHJlY29tcGlsZT4KKyAgICA8ZmlsZSBwYXRoPSJzb3VyY2UvQmFzZUltcGwuamF2YSIgLz4KKyAgPC9yZWNvbXBpbGU+CisKKzwvdGVzdERhdGE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWVtYmVyc0NoYW5nZS9kZWxldGVNZXRob2RJbXBsZW1lbnRhdGlvbjUvc3JjL0Jhc2UuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21lbWJlcnNDaGFuZ2UvZGVsZXRlTWV0aG9kSW1wbGVtZW50YXRpb241L3NyYy9CYXNlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzgzOTZjNQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21lbWJlcnNDaGFuZ2UvZGVsZXRlTWV0aG9kSW1wbGVtZW50YXRpb241L3NyYy9CYXNlLmphdmEKQEAgLTAsMCArMSwzIEBACitwdWJsaWMgY2xhc3MgQmFzZSB7CisgIHB1YmxpYyB2b2lkIGZvbygpIHt9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWVtYmVyc0NoYW5nZS9kZWxldGVNZXRob2RJbXBsZW1lbnRhdGlvbjUvc3JjL0Jhc2VJZmFjZS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWVtYmVyc0NoYW5nZS9kZWxldGVNZXRob2RJbXBsZW1lbnRhdGlvbjUvc3JjL0Jhc2VJZmFjZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhmN2FiYzMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZW1iZXJzQ2hhbmdlL2RlbGV0ZU1ldGhvZEltcGxlbWVudGF0aW9uNS9zcmMvQmFzZUlmYWNlLmphdmEKQEAgLTAsMCArMSwzIEBACitwdWJsaWMgaW50ZXJmYWNlIEJhc2VJZmFjZSB7CisgIHZvaWQgZm9vKCk7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWVtYmVyc0NoYW5nZS9kZWxldGVNZXRob2RJbXBsZW1lbnRhdGlvbjUvc3JjL0Jhc2VJbXBsLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZW1iZXJzQ2hhbmdlL2RlbGV0ZU1ldGhvZEltcGxlbWVudGF0aW9uNS9zcmMvQmFzZUltcGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMTYzNjgxOAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21lbWJlcnNDaGFuZ2UvZGVsZXRlTWV0aG9kSW1wbGVtZW50YXRpb241L3NyYy9CYXNlSW1wbC5qYXZhCkBAIC0wLDAgKzEsMyBAQAorcHVibGljIGNsYXNzIEJhc2VJbXBsIGV4dGVuZHMgQmFzZXsKKyAgcHVibGljIHZvaWQgZm9vKCkge30KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZW1iZXJzQ2hhbmdlL2RlbGV0ZU1ldGhvZEltcGxlbWVudGF0aW9uNS9zcmMvQmFzZUltcGxJbXBsLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZW1iZXJzQ2hhbmdlL2RlbGV0ZU1ldGhvZEltcGxlbWVudGF0aW9uNS9zcmMvQmFzZUltcGxJbXBsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODFlZTY4ZgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21lbWJlcnNDaGFuZ2UvZGVsZXRlTWV0aG9kSW1wbGVtZW50YXRpb241L3NyYy9CYXNlSW1wbEltcGwuamF2YQpAQCAtMCwwICsxLDIgQEAKK3B1YmxpYyBjbGFzcyBCYXNlSW1wbEltcGwgZXh0ZW5kcyBCYXNlSW1wbCBpbXBsZW1lbnRzIEJhc2VJZmFjZSB7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWVtYmVyc0NoYW5nZS9kZWxldGVNZXRob2RJbXBsZW1lbnRhdGlvbjYubG9nIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWVtYmVyc0NoYW5nZS9kZWxldGVNZXRob2RJbXBsZW1lbnRhdGlvbjYubG9nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU0YmQzODMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZW1iZXJzQ2hhbmdlL2RlbGV0ZU1ldGhvZEltcGxlbWVudGF0aW9uNi5sb2cKQEAgLTAsMCArMSwxMiBAQAorQ2xlYW5pbmcgb3V0cHV0IGZpbGVzOgorb3V0L3Byb2R1Y3Rpb24vRGVsZXRlTWV0aG9kSW1wbGVtZW50YXRpb242L0Jhc2VJbXBsLmNsYXNzCitFbmQgb2YgZmlsZXMKK0NvbXBpbGluZyBmaWxlczoKK3NyYy9CYXNlSW1wbC5qYXZhCitFbmQgb2YgZmlsZXMKK0NsZWFuaW5nIG91dHB1dCBmaWxlczoKK291dC9wcm9kdWN0aW9uL0RlbGV0ZU1ldGhvZEltcGxlbWVudGF0aW9uNi9CYXNlSW1wbEltcGwuY2xhc3MKK0VuZCBvZiBmaWxlcworQ29tcGlsaW5nIGZpbGVzOgorc3JjL0Jhc2VJbXBsSW1wbC5qYXZhCitFbmQgb2YgZmlsZXMKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21lbWJlcnNDaGFuZ2UvZGVsZXRlTWV0aG9kSW1wbGVtZW50YXRpb242L0Jhc2VJbXBsLmphdmEubmV3IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWVtYmVyc0NoYW5nZS9kZWxldGVNZXRob2RJbXBsZW1lbnRhdGlvbjYvQmFzZUltcGwuamF2YS5uZXcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjE3ZDY4ZAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21lbWJlcnNDaGFuZ2UvZGVsZXRlTWV0aG9kSW1wbGVtZW50YXRpb242L0Jhc2VJbXBsLmphdmEubmV3CkBAIC0wLDAgKzEsMiBAQAorcHVibGljIGFic3RyYWN0IGNsYXNzIEJhc2VJbXBsIGV4dGVuZHMgQmFzZSB7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWVtYmVyc0NoYW5nZS9kZWxldGVNZXRob2RJbXBsZW1lbnRhdGlvbjYvZGF0YS54bWwgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZW1iZXJzQ2hhbmdlL2RlbGV0ZU1ldGhvZEltcGxlbWVudGF0aW9uNi9kYXRhLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yY2EyNDRkCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWVtYmVyc0NoYW5nZS9kZWxldGVNZXRob2RJbXBsZW1lbnRhdGlvbjYvZGF0YS54bWwKQEAgLTAsMCArMSwxMSBAQAorPHRlc3REYXRhPgorICA8ZGVsZXRlZF9ieV9tYWtlPgorICAgIDxmaWxlIHBhdGg9ImNsYXNzZXMvQmFzZUltcGwuY2xhc3MiIC8+CisgICAgPGZpbGUgcGF0aD0iY2xhc3Nlcy9CYXNlSW1wbEltcGwuY2xhc3MiIC8+CisgIDwvZGVsZXRlZF9ieV9tYWtlPgorCisgIDxyZWNvbXBpbGU+CisgICAgPGZpbGUgcGF0aD0ic291cmNlL0Jhc2VJbXBsSW1wbC5qYXZhIiAvPgorICA8L3JlY29tcGlsZT4KKworPC90ZXN0RGF0YT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZW1iZXJzQ2hhbmdlL2RlbGV0ZU1ldGhvZEltcGxlbWVudGF0aW9uNi9zcmMvQmFzZS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWVtYmVyc0NoYW5nZS9kZWxldGVNZXRob2RJbXBsZW1lbnRhdGlvbjYvc3JjL0Jhc2UuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOGZiOTAxYQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21lbWJlcnNDaGFuZ2UvZGVsZXRlTWV0aG9kSW1wbGVtZW50YXRpb242L3NyYy9CYXNlLmphdmEKQEAgLTAsMCArMSwzIEBACitwdWJsaWMgYWJzdHJhY3QgY2xhc3MgQmFzZSB7CisgIHB1YmxpYyBhYnN0cmFjdCB2b2lkIGZvbygpOworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21lbWJlcnNDaGFuZ2UvZGVsZXRlTWV0aG9kSW1wbGVtZW50YXRpb242L3NyYy9CYXNlSW1wbC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWVtYmVyc0NoYW5nZS9kZWxldGVNZXRob2RJbXBsZW1lbnRhdGlvbjYvc3JjL0Jhc2VJbXBsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjE0MTVkMQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21lbWJlcnNDaGFuZ2UvZGVsZXRlTWV0aG9kSW1wbGVtZW50YXRpb242L3NyYy9CYXNlSW1wbC5qYXZhCkBAIC0wLDAgKzEsMyBAQAorcHVibGljIGFic3RyYWN0IGNsYXNzIEJhc2VJbXBsIGV4dGVuZHMgQmFzZSB7CisgIHB1YmxpYyB2b2lkIGZvbygpIHt9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWVtYmVyc0NoYW5nZS9kZWxldGVNZXRob2RJbXBsZW1lbnRhdGlvbjYvc3JjL0Jhc2VJbXBsSW1wbC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWVtYmVyc0NoYW5nZS9kZWxldGVNZXRob2RJbXBsZW1lbnRhdGlvbjYvc3JjL0Jhc2VJbXBsSW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJlNDg4YjgKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZW1iZXJzQ2hhbmdlL2RlbGV0ZU1ldGhvZEltcGxlbWVudGF0aW9uNi9zcmMvQmFzZUltcGxJbXBsLmphdmEKQEAgLTAsMCArMSwzIEBACitwdWJsaWMgY2xhc3MgQmFzZUltcGxJbXBsIGV4dGVuZHMgQmFzZUltcGwgeworICBwdWJsaWMgdm9pZCBmb28oKSB7fQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21lbWJlcnNDaGFuZ2UvZGVsZXRlTWV0aG9kSW1wbGVtZW50YXRpb242L3NyYy9DbGllbnQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21lbWJlcnNDaGFuZ2UvZGVsZXRlTWV0aG9kSW1wbGVtZW50YXRpb242L3NyYy9DbGllbnQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYTMyYmVjCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWVtYmVyc0NoYW5nZS9kZWxldGVNZXRob2RJbXBsZW1lbnRhdGlvbjYvc3JjL0NsaWVudC5qYXZhCkBAIC0wLDAgKzEsNiBAQAorcHVibGljIGNsYXNzIENsaWVudCB7CisgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluIChTdHJpbmdbXSBhcmdzKSB7CisgICAgQmFzZSBiYXNlID0gbmV3IENvbmNyZXRlQmFzZSgpOworICAgIGJhc2UuZm9vKCk7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZW1iZXJzQ2hhbmdlL2RlbGV0ZU1ldGhvZEltcGxlbWVudGF0aW9uNi9zcmMvQ29uY3JldGVCYXNlLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZW1iZXJzQ2hhbmdlL2RlbGV0ZU1ldGhvZEltcGxlbWVudGF0aW9uNi9zcmMvQ29uY3JldGVCYXNlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjY2YzRkNQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21lbWJlcnNDaGFuZ2UvZGVsZXRlTWV0aG9kSW1wbGVtZW50YXRpb242L3NyYy9Db25jcmV0ZUJhc2UuamF2YQpAQCAtMCwwICsxLDIgQEAKK3B1YmxpYyBjbGFzcyBDb25jcmV0ZUJhc2UgZXh0ZW5kcyBCYXNlSW1wbEltcGwgeworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21lbWJlcnNDaGFuZ2UvZGVsZXRlTWV0aG9kSW1wbGVtZW50YXRpb243LmxvZyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21lbWJlcnNDaGFuZ2UvZGVsZXRlTWV0aG9kSW1wbGVtZW50YXRpb243LmxvZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOGI1ZTk4Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWVtYmVyc0NoYW5nZS9kZWxldGVNZXRob2RJbXBsZW1lbnRhdGlvbjcubG9nCkBAIC0wLDAgKzEsMTQgQEAKK0NsZWFuaW5nIG91dHB1dCBmaWxlczoKK291dC9wcm9kdWN0aW9uL0RlbGV0ZU1ldGhvZEltcGxlbWVudGF0aW9uNy9CYXNlSW1wbC5jbGFzcworb3V0L3Byb2R1Y3Rpb24vRGVsZXRlTWV0aG9kSW1wbGVtZW50YXRpb243L0Jhc2VJbXBsSW1wbC5jbGFzcworRW5kIG9mIGZpbGVzCitDb21waWxpbmcgZmlsZXM6CitzcmMvQmFzZUltcGwuamF2YQorc3JjL0Jhc2VJbXBsSW1wbC5qYXZhCitFbmQgb2YgZmlsZXMKK0NsZWFuaW5nIG91dHB1dCBmaWxlczoKK291dC9wcm9kdWN0aW9uL0RlbGV0ZU1ldGhvZEltcGxlbWVudGF0aW9uNy9Db25jcmV0ZUJhc2UuY2xhc3MKK0VuZCBvZiBmaWxlcworQ29tcGlsaW5nIGZpbGVzOgorc3JjL0NvbmNyZXRlQmFzZS5qYXZhCitFbmQgb2YgZmlsZXMKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21lbWJlcnNDaGFuZ2UvZGVsZXRlTWV0aG9kSW1wbGVtZW50YXRpb243L0Jhc2VJbXBsLmphdmEubmV3IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWVtYmVyc0NoYW5nZS9kZWxldGVNZXRob2RJbXBsZW1lbnRhdGlvbjcvQmFzZUltcGwuamF2YS5uZXcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjE3ZDY4ZAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21lbWJlcnNDaGFuZ2UvZGVsZXRlTWV0aG9kSW1wbGVtZW50YXRpb243L0Jhc2VJbXBsLmphdmEubmV3CkBAIC0wLDAgKzEsMiBAQAorcHVibGljIGFic3RyYWN0IGNsYXNzIEJhc2VJbXBsIGV4dGVuZHMgQmFzZSB7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWVtYmVyc0NoYW5nZS9kZWxldGVNZXRob2RJbXBsZW1lbnRhdGlvbjcvQmFzZUltcGxJbXBsLmphdmEubmV3IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWVtYmVyc0NoYW5nZS9kZWxldGVNZXRob2RJbXBsZW1lbnRhdGlvbjcvQmFzZUltcGxJbXBsLmphdmEubmV3Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRhNGRmOGQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZW1iZXJzQ2hhbmdlL2RlbGV0ZU1ldGhvZEltcGxlbWVudGF0aW9uNy9CYXNlSW1wbEltcGwuamF2YS5uZXcKQEAgLTAsMCArMSwyIEBACitwdWJsaWMgYWJzdHJhY3QgY2xhc3MgQmFzZUltcGxJbXBsIGV4dGVuZHMgQmFzZUltcGwgeworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21lbWJlcnNDaGFuZ2UvZGVsZXRlTWV0aG9kSW1wbGVtZW50YXRpb243L2RhdGEueG1sIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWVtYmVyc0NoYW5nZS9kZWxldGVNZXRob2RJbXBsZW1lbnRhdGlvbjcvZGF0YS54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjllZWNmNAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21lbWJlcnNDaGFuZ2UvZGVsZXRlTWV0aG9kSW1wbGVtZW50YXRpb243L2RhdGEueG1sCkBAIC0wLDAgKzEsMTIgQEAKKzx0ZXN0RGF0YT4KKyAgPGRlbGV0ZWRfYnlfbWFrZT4KKyAgICA8ZmlsZSBwYXRoPSJjbGFzc2VzL0Jhc2VJbXBsLmNsYXNzIiAvPgorICAgIDxmaWxlIHBhdGg9ImNsYXNzZXMvQmFzZUltcGxJbXBsLmNsYXNzIiAvPgorICAgIDxmaWxlIHBhdGg9ImNsYXNzZXMvQ29uY3JldGVCYXNlLmNsYXNzIiAvPgorICA8L2RlbGV0ZWRfYnlfbWFrZT4KKworICA8cmVjb21waWxlPgorICAgIDxmaWxlIHBhdGg9InNvdXJjZS9Db25jcmV0ZUJhc2UuamF2YSIgLz4KKyAgPC9yZWNvbXBpbGU+CisKKzwvdGVzdERhdGE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWVtYmVyc0NoYW5nZS9kZWxldGVNZXRob2RJbXBsZW1lbnRhdGlvbjcvc3JjL0Jhc2UuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21lbWJlcnNDaGFuZ2UvZGVsZXRlTWV0aG9kSW1wbGVtZW50YXRpb243L3NyYy9CYXNlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzhmYjkwMWEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZW1iZXJzQ2hhbmdlL2RlbGV0ZU1ldGhvZEltcGxlbWVudGF0aW9uNy9zcmMvQmFzZS5qYXZhCkBAIC0wLDAgKzEsMyBAQAorcHVibGljIGFic3RyYWN0IGNsYXNzIEJhc2UgeworICBwdWJsaWMgYWJzdHJhY3Qgdm9pZCBmb28oKTsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZW1iZXJzQ2hhbmdlL2RlbGV0ZU1ldGhvZEltcGxlbWVudGF0aW9uNy9zcmMvQmFzZUltcGwuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21lbWJlcnNDaGFuZ2UvZGVsZXRlTWV0aG9kSW1wbGVtZW50YXRpb243L3NyYy9CYXNlSW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIxNDE1ZDEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZW1iZXJzQ2hhbmdlL2RlbGV0ZU1ldGhvZEltcGxlbWVudGF0aW9uNy9zcmMvQmFzZUltcGwuamF2YQpAQCAtMCwwICsxLDMgQEAKK3B1YmxpYyBhYnN0cmFjdCBjbGFzcyBCYXNlSW1wbCBleHRlbmRzIEJhc2UgeworICBwdWJsaWMgdm9pZCBmb28oKSB7fQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21lbWJlcnNDaGFuZ2UvZGVsZXRlTWV0aG9kSW1wbGVtZW50YXRpb243L3NyYy9CYXNlSW1wbEltcGwuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21lbWJlcnNDaGFuZ2UvZGVsZXRlTWV0aG9kSW1wbGVtZW50YXRpb243L3NyYy9CYXNlSW1wbEltcGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOTBhNDAzCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWVtYmVyc0NoYW5nZS9kZWxldGVNZXRob2RJbXBsZW1lbnRhdGlvbjcvc3JjL0Jhc2VJbXBsSW1wbC5qYXZhCkBAIC0wLDAgKzEsMyBAQAorcHVibGljIGFic3RyYWN0IGNsYXNzIEJhc2VJbXBsSW1wbCBleHRlbmRzIEJhc2VJbXBsIHsKKyAgcHVibGljIHZvaWQgZm9vKCkge30KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZW1iZXJzQ2hhbmdlL2RlbGV0ZU1ldGhvZEltcGxlbWVudGF0aW9uNy9zcmMvQ2xpZW50LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZW1iZXJzQ2hhbmdlL2RlbGV0ZU1ldGhvZEltcGxlbWVudGF0aW9uNy9zcmMvQ2xpZW50LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWEzMmJlYwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21lbWJlcnNDaGFuZ2UvZGVsZXRlTWV0aG9kSW1wbGVtZW50YXRpb243L3NyYy9DbGllbnQuamF2YQpAQCAtMCwwICsxLDYgQEAKK3B1YmxpYyBjbGFzcyBDbGllbnQgeworICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbiAoU3RyaW5nW10gYXJncykgeworICAgIEJhc2UgYmFzZSA9IG5ldyBDb25jcmV0ZUJhc2UoKTsKKyAgICBiYXNlLmZvbygpOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWVtYmVyc0NoYW5nZS9kZWxldGVNZXRob2RJbXBsZW1lbnRhdGlvbjcvc3JjL0NvbmNyZXRlQmFzZS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWVtYmVyc0NoYW5nZS9kZWxldGVNZXRob2RJbXBsZW1lbnRhdGlvbjcvc3JjL0NvbmNyZXRlQmFzZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY2NmM0ZDUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZW1iZXJzQ2hhbmdlL2RlbGV0ZU1ldGhvZEltcGxlbWVudGF0aW9uNy9zcmMvQ29uY3JldGVCYXNlLmphdmEKQEAgLTAsMCArMSwyIEBACitwdWJsaWMgY2xhc3MgQ29uY3JldGVCYXNlIGV4dGVuZHMgQmFzZUltcGxJbXBsIHsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZW1iZXJzQ2hhbmdlL2hpZXJhcmNoeS5sb2cgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZW1iZXJzQ2hhbmdlL2hpZXJhcmNoeS5sb2cKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTBkMGEwZAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21lbWJlcnNDaGFuZ2UvaGllcmFyY2h5LmxvZwpAQCAtMCwwICsxLDE4IEBACitDbGVhbmluZyBvdXRwdXQgZmlsZXM6CitvdXQvcHJvZHVjdGlvbi9IaWVyYXJjaHkvU2VydmljZS5jbGFzcworRW5kIG9mIGZpbGVzCitDb21waWxpbmcgZmlsZXM6CitzcmMvU2VydmljZS5qYXZhCitFbmQgb2YgZmlsZXMKK0NsZWFuaW5nIG91dHB1dCBmaWxlczoKK291dC9wcm9kdWN0aW9uL0hpZXJhcmNoeS9DbGllbnQxJDEuY2xhc3MKK291dC9wcm9kdWN0aW9uL0hpZXJhcmNoeS9DbGllbnQxLmNsYXNzCitvdXQvcHJvZHVjdGlvbi9IaWVyYXJjaHkvQ2xpZW50MiQxLmNsYXNzCitvdXQvcHJvZHVjdGlvbi9IaWVyYXJjaHkvQ2xpZW50Mi5jbGFzcworb3V0L3Byb2R1Y3Rpb24vSGllcmFyY2h5L1NlcnZpY2VBZGFwdGVyLmNsYXNzCitFbmQgb2YgZmlsZXMKK0NvbXBpbGluZyBmaWxlczoKK3NyYy9DbGllbnQxLmphdmEKK3NyYy9DbGllbnQyLmphdmEKK3NyYy9TZXJ2aWNlQWRhcHRlci5qYXZhCitFbmQgb2YgZmlsZXMKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21lbWJlcnNDaGFuZ2UvaGllcmFyY2h5L1NlcnZpY2UuamF2YS5uZXcgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZW1iZXJzQ2hhbmdlL2hpZXJhcmNoeS9TZXJ2aWNlLmphdmEubmV3Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI1OTk2ODUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZW1iZXJzQ2hhbmdlL2hpZXJhcmNoeS9TZXJ2aWNlLmphdmEubmV3CkBAIC0wLDAgKzEsMyBAQAorcHVibGljIGFic3RyYWN0IGNsYXNzIFNlcnZpY2V7CisgIHB1YmxpYyBhYnN0cmFjdCB2b2lkIGZvbyhpbnQgYSk7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWVtYmVyc0NoYW5nZS9oaWVyYXJjaHkvZGF0YS54bWwgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZW1iZXJzQ2hhbmdlL2hpZXJhcmNoeS9kYXRhLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZjIyM2M5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWVtYmVyc0NoYW5nZS9oaWVyYXJjaHkvZGF0YS54bWwKQEAgLTAsMCArMSwxNiBAQAorPHRlc3REYXRhPgorICA8ZGVsZXRlZF9ieV9tYWtlPgorICAgIDxmaWxlIHBhdGg9ImNsYXNzZXMvU2VydmljZS5jbGFzcyIgLz4KKyAgICA8ZmlsZSBwYXRoPSJjbGFzc2VzL0NsaWVudDEuY2xhc3MiIC8+CisgICAgPGZpbGUgcGF0aD0iY2xhc3Nlcy9DbGllbnQxJDEuY2xhc3MiIC8+CisgICAgPGZpbGUgcGF0aD0iY2xhc3Nlcy9DbGllbnQyLmNsYXNzIiAvPgorICAgIDxmaWxlIHBhdGg9ImNsYXNzZXMvQ2xpZW50MiQxLmNsYXNzIiAvPgorICAgIDxmaWxlIHBhdGg9ImNsYXNzZXMvU2VydmljZUFkYXB0ZXIuY2xhc3MiIC8+CisgIDwvZGVsZXRlZF9ieV9tYWtlPgorCisgIDxyZWNvbXBpbGU+CisgICAgPGZpbGUgcGF0aD0ic291cmNlL0NsaWVudDEuamF2YSIgLz4KKyAgICA8ZmlsZSBwYXRoPSJzb3VyY2UvQ2xpZW50Mi5qYXZhIiAvPgorICAgIDxmaWxlIHBhdGg9InNvdXJjZS9TZXJ2aWNlQWRhcHRlci5qYXZhIiAvPgorICA8L3JlY29tcGlsZT4KKzwvdGVzdERhdGE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWVtYmVyc0NoYW5nZS9oaWVyYXJjaHkvc3JjL0NsaWVudDEuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21lbWJlcnNDaGFuZ2UvaGllcmFyY2h5L3NyYy9DbGllbnQxLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzQxNmM0NwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21lbWJlcnNDaGFuZ2UvaGllcmFyY2h5L3NyYy9DbGllbnQxLmphdmEKQEAgLTAsMCArMSw4IEBACitjbGFzcyBDbGllbnQxeworICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisgICAgU2VydmljZSBzZXJ2aWNlID0gbmV3IFNlcnZpY2UoKSB7CisgICAgICBwdWJsaWMgdm9pZCBmb28oKSB7CisgICAgICB9CisgICAgfTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21lbWJlcnNDaGFuZ2UvaGllcmFyY2h5L3NyYy9DbGllbnQyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZW1iZXJzQ2hhbmdlL2hpZXJhcmNoeS9zcmMvQ2xpZW50Mi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM4ZjRjZWIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZW1iZXJzQ2hhbmdlL2hpZXJhcmNoeS9zcmMvQ2xpZW50Mi5qYXZhCkBAIC0wLDAgKzEsOCBAQAorY2xhc3MgQ2xpZW50MnsKKyAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworICAgIFNlcnZpY2Ugc2VydmljZSA9IG5ldyBTZXJ2aWNlQWRhcHRlcigpIHsKKyAgICAgIHB1YmxpYyB2b2lkIGZvbygpIHsKKyAgICAgIH0KKyAgICB9OworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWVtYmVyc0NoYW5nZS9oaWVyYXJjaHkvc3JjL1NlcnZpY2UuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21lbWJlcnNDaGFuZ2UvaGllcmFyY2h5L3NyYy9TZXJ2aWNlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWVlMjk5MAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21lbWJlcnNDaGFuZ2UvaGllcmFyY2h5L3NyYy9TZXJ2aWNlLmphdmEKQEAgLTAsMCArMSwzIEBACitwdWJsaWMgYWJzdHJhY3QgY2xhc3MgU2VydmljZXsKKyAgcHVibGljIGFic3RyYWN0IHZvaWQgZm9vKCk7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWVtYmVyc0NoYW5nZS9oaWVyYXJjaHkvc3JjL1NlcnZpY2VBZGFwdGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZW1iZXJzQ2hhbmdlL2hpZXJhcmNoeS9zcmMvU2VydmljZUFkYXB0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZDkyMzI4Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWVtYmVyc0NoYW5nZS9oaWVyYXJjaHkvc3JjL1NlcnZpY2VBZGFwdGVyLmphdmEKQEAgLTAsMCArMSw0IEBACitwdWJsaWMgY2xhc3MgU2VydmljZUFkYXB0ZXIgZXh0ZW5kcyBTZXJ2aWNleworICBwdWJsaWMgdm9pZCBmb28oKSB7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZW1iZXJzQ2hhbmdlL2hpZXJhcmNoeTIubG9nIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWVtYmVyc0NoYW5nZS9oaWVyYXJjaHkyLmxvZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYzc4YWUxCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWVtYmVyc0NoYW5nZS9oaWVyYXJjaHkyLmxvZwpAQCAtMCwwICsxLDE4IEBACitDbGVhbmluZyBvdXRwdXQgZmlsZXM6CitvdXQvcHJvZHVjdGlvbi9IaWVyYXJjaHkyL1NlcnZpY2UuY2xhc3MKK0VuZCBvZiBmaWxlcworQ29tcGlsaW5nIGZpbGVzOgorc3JjL1NlcnZpY2UuamF2YQorRW5kIG9mIGZpbGVzCitDbGVhbmluZyBvdXRwdXQgZmlsZXM6CitvdXQvcHJvZHVjdGlvbi9IaWVyYXJjaHkyL0NsaWVudDEkMS5jbGFzcworb3V0L3Byb2R1Y3Rpb24vSGllcmFyY2h5Mi9DbGllbnQxLmNsYXNzCitvdXQvcHJvZHVjdGlvbi9IaWVyYXJjaHkyL0NsaWVudDIkMS5jbGFzcworb3V0L3Byb2R1Y3Rpb24vSGllcmFyY2h5Mi9DbGllbnQyLmNsYXNzCitvdXQvcHJvZHVjdGlvbi9IaWVyYXJjaHkyL1NlcnZpY2VBZGFwdGVyLmNsYXNzCitFbmQgb2YgZmlsZXMKK0NvbXBpbGluZyBmaWxlczoKK3NyYy9DbGllbnQxLmphdmEKK3NyYy9DbGllbnQyLmphdmEKK3NyYy9TZXJ2aWNlQWRhcHRlci5qYXZhCitFbmQgb2YgZmlsZXMKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21lbWJlcnNDaGFuZ2UvaGllcmFyY2h5Mi9TZXJ2aWNlLmphdmEubmV3IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWVtYmVyc0NoYW5nZS9oaWVyYXJjaHkyL1NlcnZpY2UuamF2YS5uZXcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmQxMWRjYgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21lbWJlcnNDaGFuZ2UvaGllcmFyY2h5Mi9TZXJ2aWNlLmphdmEubmV3CkBAIC0wLDAgKzEsMyBAQAorcHVibGljIGludGVyZmFjZSBTZXJ2aWNleworICB2b2lkIGZvbyhpbnQgYSk7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWVtYmVyc0NoYW5nZS9oaWVyYXJjaHkyL2RhdGEueG1sIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWVtYmVyc0NoYW5nZS9oaWVyYXJjaHkyL2RhdGEueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNmMjIzYzkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZW1iZXJzQ2hhbmdlL2hpZXJhcmNoeTIvZGF0YS54bWwKQEAgLTAsMCArMSwxNiBAQAorPHRlc3REYXRhPgorICA8ZGVsZXRlZF9ieV9tYWtlPgorICAgIDxmaWxlIHBhdGg9ImNsYXNzZXMvU2VydmljZS5jbGFzcyIgLz4KKyAgICA8ZmlsZSBwYXRoPSJjbGFzc2VzL0NsaWVudDEuY2xhc3MiIC8+CisgICAgPGZpbGUgcGF0aD0iY2xhc3Nlcy9DbGllbnQxJDEuY2xhc3MiIC8+CisgICAgPGZpbGUgcGF0aD0iY2xhc3Nlcy9DbGllbnQyLmNsYXNzIiAvPgorICAgIDxmaWxlIHBhdGg9ImNsYXNzZXMvQ2xpZW50MiQxLmNsYXNzIiAvPgorICAgIDxmaWxlIHBhdGg9ImNsYXNzZXMvU2VydmljZUFkYXB0ZXIuY2xhc3MiIC8+CisgIDwvZGVsZXRlZF9ieV9tYWtlPgorCisgIDxyZWNvbXBpbGU+CisgICAgPGZpbGUgcGF0aD0ic291cmNlL0NsaWVudDEuamF2YSIgLz4KKyAgICA8ZmlsZSBwYXRoPSJzb3VyY2UvQ2xpZW50Mi5qYXZhIiAvPgorICAgIDxmaWxlIHBhdGg9InNvdXJjZS9TZXJ2aWNlQWRhcHRlci5qYXZhIiAvPgorICA8L3JlY29tcGlsZT4KKzwvdGVzdERhdGE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWVtYmVyc0NoYW5nZS9oaWVyYXJjaHkyL3NyYy9DbGllbnQxLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZW1iZXJzQ2hhbmdlL2hpZXJhcmNoeTIvc3JjL0NsaWVudDEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NDE2YzQ3Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWVtYmVyc0NoYW5nZS9oaWVyYXJjaHkyL3NyYy9DbGllbnQxLmphdmEKQEAgLTAsMCArMSw4IEBACitjbGFzcyBDbGllbnQxeworICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisgICAgU2VydmljZSBzZXJ2aWNlID0gbmV3IFNlcnZpY2UoKSB7CisgICAgICBwdWJsaWMgdm9pZCBmb28oKSB7CisgICAgICB9CisgICAgfTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21lbWJlcnNDaGFuZ2UvaGllcmFyY2h5Mi9zcmMvQ2xpZW50Mi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWVtYmVyc0NoYW5nZS9oaWVyYXJjaHkyL3NyYy9DbGllbnQyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzhmNGNlYgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21lbWJlcnNDaGFuZ2UvaGllcmFyY2h5Mi9zcmMvQ2xpZW50Mi5qYXZhCkBAIC0wLDAgKzEsOCBAQAorY2xhc3MgQ2xpZW50MnsKKyAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworICAgIFNlcnZpY2Ugc2VydmljZSA9IG5ldyBTZXJ2aWNlQWRhcHRlcigpIHsKKyAgICAgIHB1YmxpYyB2b2lkIGZvbygpIHsKKyAgICAgIH0KKyAgICB9OworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWVtYmVyc0NoYW5nZS9oaWVyYXJjaHkyL3NyYy9TZXJ2aWNlLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZW1iZXJzQ2hhbmdlL2hpZXJhcmNoeTIvc3JjL1NlcnZpY2UuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZjA0MjFjCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWVtYmVyc0NoYW5nZS9oaWVyYXJjaHkyL3NyYy9TZXJ2aWNlLmphdmEKQEAgLTAsMCArMSwzIEBACitwdWJsaWMgaW50ZXJmYWNlIFNlcnZpY2V7CisgIHZvaWQgZm9vKCk7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWVtYmVyc0NoYW5nZS9oaWVyYXJjaHkyL3NyYy9TZXJ2aWNlQWRhcHRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWVtYmVyc0NoYW5nZS9oaWVyYXJjaHkyL3NyYy9TZXJ2aWNlQWRhcHRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg0NWNhZmIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZW1iZXJzQ2hhbmdlL2hpZXJhcmNoeTIvc3JjL1NlcnZpY2VBZGFwdGVyLmphdmEKQEAgLTAsMCArMSw0IEBACitwdWJsaWMgY2xhc3MgU2VydmljZUFkYXB0ZXIgaW1wbGVtZW50cyBTZXJ2aWNleworICBwdWJsaWMgdm9pZCBmb28oKSB7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZW1iZXJzQ2hhbmdlL21vdmVNZXRob2RUb1N1YmNsYXNzL2J1aWxkLmxvZyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21lbWJlcnNDaGFuZ2UvbW92ZU1ldGhvZFRvU3ViY2xhc3MvYnVpbGQubG9nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg2OTE0ZTBhCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWVtYmVyc0NoYW5nZS9tb3ZlTWV0aG9kVG9TdWJjbGFzcy9idWlsZC5sb2cKQEAgLTAsMCArMSwxNCBAQAorQ2xlYW5pbmcgb3V0cHV0IGZpbGVzOgorb3V0L3Byb2R1Y3Rpb24vTW92ZU1ldGhvZFRvU3ViY2xhc3MvQmFzZS5jbGFzcworb3V0L3Byb2R1Y3Rpb24vTW92ZU1ldGhvZFRvU3ViY2xhc3MvSW1wbC5jbGFzcworRW5kIG9mIGZpbGVzCitDb21waWxpbmcgZmlsZXM6CitzcmMvQmFzZS5qYXZhCitzcmMvSW1wbC5qYXZhCitFbmQgb2YgZmlsZXMKK0NsZWFuaW5nIG91dHB1dCBmaWxlczoKK291dC9wcm9kdWN0aW9uL01vdmVNZXRob2RUb1N1YmNsYXNzL01haW4uY2xhc3MKK0VuZCBvZiBmaWxlcworQ29tcGlsaW5nIGZpbGVzOgorc3JjL01haW4uamF2YQorRW5kIG9mIGZpbGVzCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZW1iZXJzQ2hhbmdlL21vdmVNZXRob2RUb1N1YmNsYXNzL3NyYy9CYXNlLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZW1iZXJzQ2hhbmdlL21vdmVNZXRob2RUb1N1YmNsYXNzL3NyYy9CYXNlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGE5ZjY1MQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21lbWJlcnNDaGFuZ2UvbW92ZU1ldGhvZFRvU3ViY2xhc3Mvc3JjL0Jhc2UuamF2YQpAQCAtMCwwICsxLDYgQEAKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKKworcHVibGljIGNsYXNzIEJhc2UgeworICBwdWJsaWMgdm9pZCBtZXRob2QoQmFzZSBhKSB7CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21lbWJlcnNDaGFuZ2UvbW92ZU1ldGhvZFRvU3ViY2xhc3Mvc3JjL0Jhc2UuamF2YS5uZXcgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZW1iZXJzQ2hhbmdlL21vdmVNZXRob2RUb1N1YmNsYXNzL3NyYy9CYXNlLmphdmEubmV3Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRiZWIxYWQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZW1iZXJzQ2hhbmdlL21vdmVNZXRob2RUb1N1YmNsYXNzL3NyYy9CYXNlLmphdmEubmV3CkBAIC0wLDAgKzEsMiBAQAorcHVibGljIGNsYXNzIEJhc2UgeworfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWVtYmVyc0NoYW5nZS9tb3ZlTWV0aG9kVG9TdWJjbGFzcy9zcmMvSW1wbC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWVtYmVyc0NoYW5nZS9tb3ZlTWV0aG9kVG9TdWJjbGFzcy9zcmMvSW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI2YTM5OGMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZW1iZXJzQ2hhbmdlL21vdmVNZXRob2RUb1N1YmNsYXNzL3NyYy9JbXBsLmphdmEKQEAgLTAsMCArMSwyIEBACitwdWJsaWMgY2xhc3MgSW1wbCBleHRlbmRzIEJhc2UgeworfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWVtYmVyc0NoYW5nZS9tb3ZlTWV0aG9kVG9TdWJjbGFzcy9zcmMvSW1wbC5qYXZhLm5ldyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21lbWJlcnNDaGFuZ2UvbW92ZU1ldGhvZFRvU3ViY2xhc3Mvc3JjL0ltcGwuamF2YS5uZXcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzBmMzcwOQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21lbWJlcnNDaGFuZ2UvbW92ZU1ldGhvZFRvU3ViY2xhc3Mvc3JjL0ltcGwuamF2YS5uZXcKQEAgLTAsMCArMSw2IEBACitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK3B1YmxpYyBjbGFzcyBJbXBsIGV4dGVuZHMgQmFzZSB7CisgIHB1YmxpYyB2b2lkIG1ldGhvZChJbXBsIGEpIHsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWVtYmVyc0NoYW5nZS9tb3ZlTWV0aG9kVG9TdWJjbGFzcy9zcmMvTWFpbi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWVtYmVyc0NoYW5nZS9tb3ZlTWV0aG9kVG9TdWJjbGFzcy9zcmMvTWFpbi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY3NzFiMDYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZW1iZXJzQ2hhbmdlL21vdmVNZXRob2RUb1N1YmNsYXNzL3NyYy9NYWluLmphdmEKQEAgLTAsMCArMSw5IEBACitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKKworcHVibGljIGNsYXNzIE1haW4geworICB7CisgICAgSW1wbCBpbXBsID0gbmV3IEltcGwoKTsKKyAgICBpbXBsLm1ldGhvZChudWxsKTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21lbWJlcnNDaGFuZ2UvcmVtb3ZlQmFzZUltcGxlbWVudGF0aW9uLmxvZyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21lbWJlcnNDaGFuZ2UvcmVtb3ZlQmFzZUltcGxlbWVudGF0aW9uLmxvZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMTZjYTk5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWVtYmVyc0NoYW5nZS9yZW1vdmVCYXNlSW1wbGVtZW50YXRpb24ubG9nCkBAIC0wLDAgKzEsMTIgQEAKK0NsZWFuaW5nIG91dHB1dCBmaWxlczoKK291dC9wcm9kdWN0aW9uL1JlbW92ZUJhc2VJbXBsZW1lbnRhdGlvbi9BLmNsYXNzCitFbmQgb2YgZmlsZXMKK0NvbXBpbGluZyBmaWxlczoKK3NyYy9BLmphdmEKK0VuZCBvZiBmaWxlcworQ2xlYW5pbmcgb3V0cHV0IGZpbGVzOgorb3V0L3Byb2R1Y3Rpb24vUmVtb3ZlQmFzZUltcGxlbWVudGF0aW9uL0IuY2xhc3MKK0VuZCBvZiBmaWxlcworQ29tcGlsaW5nIGZpbGVzOgorc3JjL0IuamF2YQorRW5kIG9mIGZpbGVzCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZW1iZXJzQ2hhbmdlL3JlbW92ZUJhc2VJbXBsZW1lbnRhdGlvbi9BLmphdmEubmV3IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWVtYmVyc0NoYW5nZS9yZW1vdmVCYXNlSW1wbGVtZW50YXRpb24vQS5qYXZhLm5ldwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNzk4MmVkCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWVtYmVyc0NoYW5nZS9yZW1vdmVCYXNlSW1wbGVtZW50YXRpb24vQS5qYXZhLm5ldwpAQCAtMCwwICsxLDQgQEAKK2ltcG9ydCBqYXZhLmF3dC5ldmVudC4qOworCitwdWJsaWMgYWJzdHJhY3QgY2xhc3MgQSBpbXBsZW1lbnRzIEFjdGlvbkxpc3RlbmVyIHsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZW1iZXJzQ2hhbmdlL3JlbW92ZUJhc2VJbXBsZW1lbnRhdGlvbi9kYXRhLnhtbCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21lbWJlcnNDaGFuZ2UvcmVtb3ZlQmFzZUltcGxlbWVudGF0aW9uL2RhdGEueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRlNTBhOWEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZW1iZXJzQ2hhbmdlL3JlbW92ZUJhc2VJbXBsZW1lbnRhdGlvbi9kYXRhLnhtbApAQCAtMCwwICsxLDEwIEBACis8dGVzdERhdGE+CisgIDxkZWxldGVkX2J5X21ha2U+CisgICAgPGZpbGUgcGF0aD0iY2xhc3Nlcy9BLmNsYXNzIiAvPgorICAgIDxmaWxlIHBhdGg9ImNsYXNzZXMvQi5jbGFzcyIgLz4KKyAgPC9kZWxldGVkX2J5X21ha2U+CisKKyAgPHJlY29tcGlsZT4KKyAgICA8ZmlsZSBwYXRoPSJzb3VyY2UvQi5qYXZhIiAvPgorICA8L3JlY29tcGlsZT4KKzwvdGVzdERhdGE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWVtYmVyc0NoYW5nZS9yZW1vdmVCYXNlSW1wbGVtZW50YXRpb24vc3JjL0EuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21lbWJlcnNDaGFuZ2UvcmVtb3ZlQmFzZUltcGxlbWVudGF0aW9uL3NyYy9BLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2JjYjVkMAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21lbWJlcnNDaGFuZ2UvcmVtb3ZlQmFzZUltcGxlbWVudGF0aW9uL3NyYy9BLmphdmEKQEAgLTAsMCArMSw1IEBACitpbXBvcnQgamF2YS5hd3QuZXZlbnQuKjsKKworcHVibGljIGFic3RyYWN0IGNsYXNzIEEgaW1wbGVtZW50cyBBY3Rpb25MaXN0ZW5lciB7CisgICAgcHVibGljIGZpbmFsIHZvaWQgYWN0aW9uUGVyZm9ybWVkKEFjdGlvbkV2ZW50IGUpIHt9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWVtYmVyc0NoYW5nZS9yZW1vdmVCYXNlSW1wbGVtZW50YXRpb24vc3JjL0IuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21lbWJlcnNDaGFuZ2UvcmVtb3ZlQmFzZUltcGxlbWVudGF0aW9uL3NyYy9CLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDIyYzdmMgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21lbWJlcnNDaGFuZ2UvcmVtb3ZlQmFzZUltcGxlbWVudGF0aW9uL3NyYy9CLmphdmEKQEAgLTAsMCArMSw0IEBACitpbXBvcnQgamF2YS5hd3QuZXZlbnQuKjsKKworcHVibGljIGNsYXNzIEIgZXh0ZW5kcyBBIHsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZW1iZXJzQ2hhbmdlL3JlbW92ZUhpZGluZ0ZpZWxkLmxvZyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21lbWJlcnNDaGFuZ2UvcmVtb3ZlSGlkaW5nRmllbGQubG9nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYyZjQ1NTcKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZW1iZXJzQ2hhbmdlL3JlbW92ZUhpZGluZ0ZpZWxkLmxvZwpAQCAtMCwwICsxLDEzIEBACitDbGVhbmluZyBvdXRwdXQgZmlsZXM6CitvdXQvcHJvZHVjdGlvbi9SZW1vdmVIaWRpbmdGaWVsZC9CYXNlQWN0aW9uLmNsYXNzCitFbmQgb2YgZmlsZXMKK0NvbXBpbGluZyBmaWxlczoKK3NyYy9CYXNlQWN0aW9uLmphdmEKK0VuZCBvZiBmaWxlcworQ2xlYW5pbmcgb3V0cHV0IGZpbGVzOgorb3V0L3Byb2R1Y3Rpb24vUmVtb3ZlSGlkaW5nRmllbGQvQ2xpZW50JDEuY2xhc3MKK291dC9wcm9kdWN0aW9uL1JlbW92ZUhpZGluZ0ZpZWxkL0NsaWVudC5jbGFzcworRW5kIG9mIGZpbGVzCitDb21waWxpbmcgZmlsZXM6CitzcmMvQ2xpZW50LmphdmEKK0VuZCBvZiBmaWxlcwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWVtYmVyc0NoYW5nZS9yZW1vdmVIaWRpbmdGaWVsZC9CYXNlQWN0aW9uLmphdmEubmV3IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWVtYmVyc0NoYW5nZS9yZW1vdmVIaWRpbmdGaWVsZC9CYXNlQWN0aW9uLmphdmEubmV3Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmViOGI1MTkwCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWVtYmVyc0NoYW5nZS9yZW1vdmVIaWRpbmdGaWVsZC9CYXNlQWN0aW9uLmphdmEubmV3CkBAIC0wLDAgKzEsNSBAQAorcHVibGljIGFic3RyYWN0IGNsYXNzIEJhc2VBY3Rpb24geworICBwdWJsaWMgYWJzdHJhY3Qgdm9pZCBhY3Rpb24oKTsKKworCit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWVtYmVyc0NoYW5nZS9yZW1vdmVIaWRpbmdGaWVsZC9kYXRhLnhtbCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21lbWJlcnNDaGFuZ2UvcmVtb3ZlSGlkaW5nRmllbGQvZGF0YS54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDI4YzA1YQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21lbWJlcnNDaGFuZ2UvcmVtb3ZlSGlkaW5nRmllbGQvZGF0YS54bWwKQEAgLTAsMCArMSwxMiBAQAorPHRlc3REYXRhPgorICA8ZGVsZXRlZF9ieV9tYWtlPgorICAgIDxmaWxlIHBhdGg9ImNsYXNzZXMvQmFzZUFjdGlvbi5jbGFzcyIgLz4KKyAgICA8ZmlsZSBwYXRoPSJjbGFzc2VzL0NsaWVudC5jbGFzcyIgLz4KKyAgICA8ZmlsZSBwYXRoPSJjbGFzc2VzL0NsaWVudCQxLmNsYXNzIiAvPgorICA8L2RlbGV0ZWRfYnlfbWFrZT4KKworICA8cmVjb21waWxlPgorICAgIDxmaWxlIHBhdGg9InNvdXJjZS9DbGllbnQuamF2YSIgLz4KKyAgPC9yZWNvbXBpbGU+CisKKzwvdGVzdERhdGE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWVtYmVyc0NoYW5nZS9yZW1vdmVIaWRpbmdGaWVsZC9zcmMvQmFzZUFjdGlvbi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWVtYmVyc0NoYW5nZS9yZW1vdmVIaWRpbmdGaWVsZC9zcmMvQmFzZUFjdGlvbi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJlY2MwZjUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZW1iZXJzQ2hhbmdlL3JlbW92ZUhpZGluZ0ZpZWxkL3NyYy9CYXNlQWN0aW9uLmphdmEKQEAgLTAsMCArMSw1IEBACitwdWJsaWMgYWJzdHJhY3QgY2xhc3MgQmFzZUFjdGlvbiB7CisgIGludCBmaWVsZCA9IDk5OTsKKworICBwdWJsaWMgYWJzdHJhY3Qgdm9pZCBhY3Rpb24oKTsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZW1iZXJzQ2hhbmdlL3JlbW92ZUhpZGluZ0ZpZWxkL3NyYy9CYXNlQ2xpZW50LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZW1iZXJzQ2hhbmdlL3JlbW92ZUhpZGluZ0ZpZWxkL3NyYy9CYXNlQ2xpZW50LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTU3NTM2YwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21lbWJlcnNDaGFuZ2UvcmVtb3ZlSGlkaW5nRmllbGQvc3JjL0Jhc2VDbGllbnQuamF2YQpAQCAtMCwwICsxLDMgQEAKK3B1YmxpYyBjbGFzcyBCYXNlQ2xpZW50IHsKKyAgaW50IGZpZWxkID0gNzc3OworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21lbWJlcnNDaGFuZ2UvcmVtb3ZlSGlkaW5nRmllbGQvc3JjL0NsaWVudC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWVtYmVyc0NoYW5nZS9yZW1vdmVIaWRpbmdGaWVsZC9zcmMvQ2xpZW50LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODhlZDMwOAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21lbWJlcnNDaGFuZ2UvcmVtb3ZlSGlkaW5nRmllbGQvc3JjL0NsaWVudC5qYXZhCkBAIC0wLDAgKzEsOSBAQAorcHVibGljIGNsYXNzIENsaWVudCBleHRlbmRzIEJhc2VDbGllbnR7CisgIHB1YmxpYyB2b2lkIGNhbGN1bGF0aW9uKCkgeworICAgIG5ldyBCYXNlQWN0aW9uKCkgeworICAgICAgIHB1YmxpYyB2b2lkIGFjdGlvbigpIHsKKyAgICAgICAgICBpbnQgZGF0YSA9IGZpZWxkOworICAgICAgIH0KKyAgICB9LmFjdGlvbigpOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWVtYmVyc0NoYW5nZS9yZW1vdmVIaWRpbmdNZXRob2QubG9nIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWVtYmVyc0NoYW5nZS9yZW1vdmVIaWRpbmdNZXRob2QubG9nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBmN2FkZGMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZW1iZXJzQ2hhbmdlL3JlbW92ZUhpZGluZ01ldGhvZC5sb2cKQEAgLTAsMCArMSwxMyBAQAorQ2xlYW5pbmcgb3V0cHV0IGZpbGVzOgorb3V0L3Byb2R1Y3Rpb24vUmVtb3ZlSGlkaW5nTWV0aG9kL0Jhc2VBY3Rpb24uY2xhc3MKK0VuZCBvZiBmaWxlcworQ29tcGlsaW5nIGZpbGVzOgorc3JjL0Jhc2VBY3Rpb24uamF2YQorRW5kIG9mIGZpbGVzCitDbGVhbmluZyBvdXRwdXQgZmlsZXM6CitvdXQvcHJvZHVjdGlvbi9SZW1vdmVIaWRpbmdNZXRob2QvQ2xpZW50JDEuY2xhc3MKK291dC9wcm9kdWN0aW9uL1JlbW92ZUhpZGluZ01ldGhvZC9DbGllbnQuY2xhc3MKK0VuZCBvZiBmaWxlcworQ29tcGlsaW5nIGZpbGVzOgorc3JjL0NsaWVudC5qYXZhCitFbmQgb2YgZmlsZXMKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21lbWJlcnNDaGFuZ2UvcmVtb3ZlSGlkaW5nTWV0aG9kL0Jhc2VBY3Rpb24uamF2YS5uZXcgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZW1iZXJzQ2hhbmdlL3JlbW92ZUhpZGluZ01ldGhvZC9CYXNlQWN0aW9uLmphdmEubmV3Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE1MDViZDYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZW1iZXJzQ2hhbmdlL3JlbW92ZUhpZGluZ01ldGhvZC9CYXNlQWN0aW9uLmphdmEubmV3CkBAIC0wLDAgKzEsMyBAQAorcHVibGljIGFic3RyYWN0IGNsYXNzIEJhc2VBY3Rpb24geworICBwdWJsaWMgYWJzdHJhY3Qgdm9pZCBhY3Rpb24oKTsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZW1iZXJzQ2hhbmdlL3JlbW92ZUhpZGluZ01ldGhvZC9kYXRhLnhtbCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21lbWJlcnNDaGFuZ2UvcmVtb3ZlSGlkaW5nTWV0aG9kL2RhdGEueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQyOGMwNWEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZW1iZXJzQ2hhbmdlL3JlbW92ZUhpZGluZ01ldGhvZC9kYXRhLnhtbApAQCAtMCwwICsxLDEyIEBACis8dGVzdERhdGE+CisgIDxkZWxldGVkX2J5X21ha2U+CisgICAgPGZpbGUgcGF0aD0iY2xhc3Nlcy9CYXNlQWN0aW9uLmNsYXNzIiAvPgorICAgIDxmaWxlIHBhdGg9ImNsYXNzZXMvQ2xpZW50LmNsYXNzIiAvPgorICAgIDxmaWxlIHBhdGg9ImNsYXNzZXMvQ2xpZW50JDEuY2xhc3MiIC8+CisgIDwvZGVsZXRlZF9ieV9tYWtlPgorCisgIDxyZWNvbXBpbGU+CisgICAgPGZpbGUgcGF0aD0ic291cmNlL0NsaWVudC5qYXZhIiAvPgorICA8L3JlY29tcGlsZT4KKworPC90ZXN0RGF0YT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZW1iZXJzQ2hhbmdlL3JlbW92ZUhpZGluZ01ldGhvZC9zcmMvQmFzZUFjdGlvbi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWVtYmVyc0NoYW5nZS9yZW1vdmVIaWRpbmdNZXRob2Qvc3JjL0Jhc2VBY3Rpb24uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMTY2MzEzCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWVtYmVyc0NoYW5nZS9yZW1vdmVIaWRpbmdNZXRob2Qvc3JjL0Jhc2VBY3Rpb24uamF2YQpAQCAtMCwwICsxLDcgQEAKK3B1YmxpYyBhYnN0cmFjdCBjbGFzcyBCYXNlQWN0aW9uIHsKKyAgcHVibGljIGFic3RyYWN0IHZvaWQgYWN0aW9uKCk7CisKKyAgcHVibGljIGludCBnZXREYXRhKGludCBwYXJhbSkgeworICAgICByZXR1cm4gMTA7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZW1iZXJzQ2hhbmdlL3JlbW92ZUhpZGluZ01ldGhvZC9zcmMvQmFzZUNsaWVudC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWVtYmVyc0NoYW5nZS9yZW1vdmVIaWRpbmdNZXRob2Qvc3JjL0Jhc2VDbGllbnQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jODJkOWRiCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWVtYmVyc0NoYW5nZS9yZW1vdmVIaWRpbmdNZXRob2Qvc3JjL0Jhc2VDbGllbnQuamF2YQpAQCAtMCwwICsxLDUgQEAKK3B1YmxpYyBjbGFzcyBCYXNlQ2xpZW50IHsKKyAgcHVibGljIGludCBnZXREYXRhKCkgeworICAgICByZXR1cm4gMTA7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZW1iZXJzQ2hhbmdlL3JlbW92ZUhpZGluZ01ldGhvZC9zcmMvQ2xpZW50LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZW1iZXJzQ2hhbmdlL3JlbW92ZUhpZGluZ01ldGhvZC9zcmMvQ2xpZW50LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2QzMjg4MgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21lbWJlcnNDaGFuZ2UvcmVtb3ZlSGlkaW5nTWV0aG9kL3NyYy9DbGllbnQuamF2YQpAQCAtMCwwICsxLDkgQEAKK3B1YmxpYyBjbGFzcyBDbGllbnQgZXh0ZW5kcyBCYXNlQ2xpZW50eworICBwdWJsaWMgdm9pZCBjYWxjdWxhdGlvbigpIHsKKyAgICBuZXcgQmFzZUFjdGlvbigpIHsKKyAgICAgICBwdWJsaWMgdm9pZCBhY3Rpb24oKSB7CisgICAgICAgICAgaW50IGRhdGEgPSBnZXREYXRhKDcpOworICAgICAgIH0KKyAgICB9LmFjdGlvbigpOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWVtYmVyc0NoYW5nZS9yZW1vdmVUaHJvd3NJbkJhc2VNZXRob2QubG9nIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWVtYmVyc0NoYW5nZS9yZW1vdmVUaHJvd3NJbkJhc2VNZXRob2QubG9nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJlYWZkZTAKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZW1iZXJzQ2hhbmdlL3JlbW92ZVRocm93c0luQmFzZU1ldGhvZC5sb2cKQEAgLTAsMCArMSwxMiBAQAorQ2xlYW5pbmcgb3V0cHV0IGZpbGVzOgorb3V0L3Byb2R1Y3Rpb24vUmVtb3ZlVGhyb3dzSW5CYXNlTWV0aG9kL1Rocm93aW5nVG9wLmNsYXNzCitFbmQgb2YgZmlsZXMKK0NvbXBpbGluZyBmaWxlczoKK3NyYy9UaHJvd2luZ1RvcC5qYXZhCitFbmQgb2YgZmlsZXMKK0NsZWFuaW5nIG91dHB1dCBmaWxlczoKK291dC9wcm9kdWN0aW9uL1JlbW92ZVRocm93c0luQmFzZU1ldGhvZC9UaHJvd2luZ0JvdHRvbS5jbGFzcworRW5kIG9mIGZpbGVzCitDb21waWxpbmcgZmlsZXM6CitzcmMvVGhyb3dpbmdCb3R0b20uamF2YQorRW5kIG9mIGZpbGVzCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZW1iZXJzQ2hhbmdlL3JlbW92ZVRocm93c0luQmFzZU1ldGhvZC9UaHJvd2luZ1RvcC5qYXZhLm5ldyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21lbWJlcnNDaGFuZ2UvcmVtb3ZlVGhyb3dzSW5CYXNlTWV0aG9kL1Rocm93aW5nVG9wLmphdmEubmV3Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1Y2ZlMDkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZW1iZXJzQ2hhbmdlL3JlbW92ZVRocm93c0luQmFzZU1ldGhvZC9UaHJvd2luZ1RvcC5qYXZhLm5ldwpAQCAtMCwwICsxLDQgQEAKK3B1YmxpYyBjbGFzcyBUaHJvd2luZ1RvcCB7CisgICAgcHVibGljIHZvaWQgc3BvaWwoKSB7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWVtYmVyc0NoYW5nZS9yZW1vdmVUaHJvd3NJbkJhc2VNZXRob2QvZGF0YS54bWwgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZW1iZXJzQ2hhbmdlL3JlbW92ZVRocm93c0luQmFzZU1ldGhvZC9kYXRhLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNzAzMTI3Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWVtYmVyc0NoYW5nZS9yZW1vdmVUaHJvd3NJbkJhc2VNZXRob2QvZGF0YS54bWwKQEAgLTAsMCArMSwxMiBAQAorPHRlc3REYXRhPgorCisgIDxkZWxldGVkX2J5X21ha2U+CisgICAgPGZpbGUgcGF0aD0iY2xhc3Nlcy9UaHJvd2luZ1RvcC5jbGFzcyIgLz4KKyAgICA8ZmlsZSBwYXRoPSJjbGFzc2VzL1Rocm93aW5nQm90dG9tLmNsYXNzIiAvPgorICA8L2RlbGV0ZWRfYnlfbWFrZT4KKworICA8cmVjb21waWxlPgorICAgIDxmaWxlIHBhdGg9InNvdXJjZS9UaHJvd2luZ0JvdHRvbS5qYXZhIiAvPgorICA8L3JlY29tcGlsZT4KKworPC90ZXN0RGF0YT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZW1iZXJzQ2hhbmdlL3JlbW92ZVRocm93c0luQmFzZU1ldGhvZC9zcmMvQ2hlY2tlZC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWVtYmVyc0NoYW5nZS9yZW1vdmVUaHJvd3NJbkJhc2VNZXRob2Qvc3JjL0NoZWNrZWQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41M2RjNDJiCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWVtYmVyc0NoYW5nZS9yZW1vdmVUaHJvd3NJbkJhc2VNZXRob2Qvc3JjL0NoZWNrZWQuamF2YQpAQCAtMCwwICsxLDIgQEAKK3B1YmxpYyBjbGFzcyBDaGVja2VkIGV4dGVuZHMgRXhjZXB0aW9uIHsKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21lbWJlcnNDaGFuZ2UvcmVtb3ZlVGhyb3dzSW5CYXNlTWV0aG9kL3NyYy9UaHJvd2luZ0JvdHRvbS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWVtYmVyc0NoYW5nZS9yZW1vdmVUaHJvd3NJbkJhc2VNZXRob2Qvc3JjL1Rocm93aW5nQm90dG9tLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWQyODA1MwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21lbWJlcnNDaGFuZ2UvcmVtb3ZlVGhyb3dzSW5CYXNlTWV0aG9kL3NyYy9UaHJvd2luZ0JvdHRvbS5qYXZhCkBAIC0wLDAgKzEsNSBAQAorcHVibGljIGNsYXNzIFRocm93aW5nQm90dG9tIGV4dGVuZHMgVGhyb3dpbmdUb3B7CisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIHZvaWQgc3BvaWwoKSB0aHJvd3MgQ2hlY2tlZCB7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWVtYmVyc0NoYW5nZS9yZW1vdmVUaHJvd3NJbkJhc2VNZXRob2Qvc3JjL1Rocm93aW5nVG9wLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZW1iZXJzQ2hhbmdlL3JlbW92ZVRocm93c0luQmFzZU1ldGhvZC9zcmMvVGhyb3dpbmdUb3AuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OTgyYWRhCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWVtYmVyc0NoYW5nZS9yZW1vdmVUaHJvd3NJbkJhc2VNZXRob2Qvc3JjL1Rocm93aW5nVG9wLmphdmEKQEAgLTAsMCArMSw0IEBACitwdWJsaWMgY2xhc3MgVGhyb3dpbmdUb3AgeworICAgIHB1YmxpYyB2b2lkIHNwb2lsKCkgdGhyb3dzIENoZWNrZWQgeworICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21lbWJlcnNDaGFuZ2UvcmVuYW1lTWV0aG9kLmxvZyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21lbWJlcnNDaGFuZ2UvcmVuYW1lTWV0aG9kLmxvZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NWMzNjUyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWVtYmVyc0NoYW5nZS9yZW5hbWVNZXRob2QubG9nCkBAIC0wLDAgKzEsMTIgQEAKK0NsZWFuaW5nIG91dHB1dCBmaWxlczoKK291dC9wcm9kdWN0aW9uL1JlbmFtZU1ldGhvZC9wYWNrYWdlQS9TZXJ2ZXIuY2xhc3MKK0VuZCBvZiBmaWxlcworQ29tcGlsaW5nIGZpbGVzOgorc3JjL3BhY2thZ2VBL1NlcnZlci5qYXZhCitFbmQgb2YgZmlsZXMKK0NsZWFuaW5nIG91dHB1dCBmaWxlczoKK291dC9wcm9kdWN0aW9uL1JlbmFtZU1ldGhvZC9wYWNrYWdlQS9DbGllbnQuY2xhc3MKK0VuZCBvZiBmaWxlcworQ29tcGlsaW5nIGZpbGVzOgorc3JjL3BhY2thZ2VBL0NsaWVudC5qYXZhCitFbmQgb2YgZmlsZXMKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21lbWJlcnNDaGFuZ2UvcmVuYW1lTWV0aG9kL2RhdGEueG1sIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWVtYmVyc0NoYW5nZS9yZW5hbWVNZXRob2QvZGF0YS54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTY1OWY2ZQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21lbWJlcnNDaGFuZ2UvcmVuYW1lTWV0aG9kL2RhdGEueG1sCkBAIC0wLDAgKzEsMTUgQEAKKzx0ZXN0RGF0YT4KKworICA8ZGVsZXRlPgorICA8L2RlbGV0ZT4KKworICA8ZGVsZXRlZF9ieV9tYWtlPgorICAgIDxmaWxlIHBhdGg9ImNsYXNzZXMvcGFja2FnZUEvU2VydmVyLmNsYXNzIiAvPgorICAgIDxmaWxlIHBhdGg9ImNsYXNzZXMvcGFja2FnZUEvQ2xpZW50LmNsYXNzIiAvPgorICA8L2RlbGV0ZWRfYnlfbWFrZT4KKworICA8cmVjb21waWxlPgorICAgIDxmaWxlIHBhdGg9InNvdXJjZS9wYWNrYWdlQS9DbGllbnQuamF2YSIgLz4KKyAgPC9yZWNvbXBpbGU+CisKKzwvdGVzdERhdGE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWVtYmVyc0NoYW5nZS9yZW5hbWVNZXRob2Qvc3JjL3BhY2thZ2VBL0NsaWVudC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWVtYmVyc0NoYW5nZS9yZW5hbWVNZXRob2Qvc3JjL3BhY2thZ2VBL0NsaWVudC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNlZjU0MmYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZW1iZXJzQ2hhbmdlL3JlbmFtZU1ldGhvZC9zcmMvcGFja2FnZUEvQ2xpZW50LmphdmEKQEAgLTAsMCArMSwxMiBAQAorLyoqCisgKiBjcmVhdGVkIGF0IEphbiAyMiwgMjAwMgorICogQGF1dGhvciBKZWthCisgKi8KK3BhY2thZ2UgcGFja2FnZUE7CisKK3B1YmxpYyBjbGFzcyBDbGllbnQgeworICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisgICAgU2VydmVyIHNlcnZlciA9IG5ldyBTZXJ2ZXIoKTsKKyAgICBzZXJ2ZXIubWV0aG9kKCk7CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21lbWJlcnNDaGFuZ2UvcmVuYW1lTWV0aG9kL3NyYy9wYWNrYWdlQS9TZXJ2ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21lbWJlcnNDaGFuZ2UvcmVuYW1lTWV0aG9kL3NyYy9wYWNrYWdlQS9TZXJ2ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MTBjODdkCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWVtYmVyc0NoYW5nZS9yZW5hbWVNZXRob2Qvc3JjL3BhY2thZ2VBL1NlcnZlci5qYXZhCkBAIC0wLDAgKzEsMTEgQEAKKy8qKgorICogY3JlYXRlZCBhdCBKYW4gMjIsIDIwMDIKKyAqIEBhdXRob3IgSmVrYQorICovCitwYWNrYWdlIHBhY2thZ2VBOworCitwdWJsaWMgY2xhc3MgU2VydmVyIHsKKyAgcHVibGljIHZvaWQgbWV0aG9kKCkgeworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU2VydmVyLm1ldGhvZCIpOworICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZW1iZXJzQ2hhbmdlL3JlbmFtZU1ldGhvZC9zcmMvcGFja2FnZUEvU2VydmVyLmphdmEubmV3IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWVtYmVyc0NoYW5nZS9yZW5hbWVNZXRob2Qvc3JjL3BhY2thZ2VBL1NlcnZlci5qYXZhLm5ldwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ODUxMTMwCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWVtYmVyc0NoYW5nZS9yZW5hbWVNZXRob2Qvc3JjL3BhY2thZ2VBL1NlcnZlci5qYXZhLm5ldwpAQCAtMCwwICsxLDExIEBACisvKioKKyAqIGNyZWF0ZWQgYXQgSmFuIDIyLCAyMDAyCisgKiBAYXV0aG9yIEpla2EKKyAqLworcGFja2FnZSBwYWNrYWdlQTsKKworcHVibGljIGNsYXNzIFNlcnZlciB7CisgIHB1YmxpYyB2b2lkIG1ldGhvZDEoKSB7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJTZXJ2ZXIubWV0aG9kIik7CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21lbWJlcnNDaGFuZ2UvdGhyb3dzTGlzdERpZmZlcnNJbkJhc2VBbmREZXJpdmVkLmxvZyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21lbWJlcnNDaGFuZ2UvdGhyb3dzTGlzdERpZmZlcnNJbkJhc2VBbmREZXJpdmVkLmxvZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MjRlNjgxCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWVtYmVyc0NoYW5nZS90aHJvd3NMaXN0RGlmZmVyc0luQmFzZUFuZERlcml2ZWQubG9nCkBAIC0wLDAgKzEsMTIgQEAKK0NsZWFuaW5nIG91dHB1dCBmaWxlczoKK291dC9wcm9kdWN0aW9uL1Rocm93c0xpc3REaWZmZXJzSW5CYXNlQW5kRGVyaXZlZC9CYXNlU2VydmVyLmNsYXNzCitFbmQgb2YgZmlsZXMKK0NvbXBpbGluZyBmaWxlczoKK3NyYy9CYXNlU2VydmVyLmphdmEKK0VuZCBvZiBmaWxlcworQ2xlYW5pbmcgb3V0cHV0IGZpbGVzOgorb3V0L3Byb2R1Y3Rpb24vVGhyb3dzTGlzdERpZmZlcnNJbkJhc2VBbmREZXJpdmVkL1NlcnZlci5jbGFzcworRW5kIG9mIGZpbGVzCitDb21waWxpbmcgZmlsZXM6CitzcmMvU2VydmVyLmphdmEKK0VuZCBvZiBmaWxlcwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWVtYmVyc0NoYW5nZS90aHJvd3NMaXN0RGlmZmVyc0luQmFzZUFuZERlcml2ZWQvQmFzZVNlcnZlci5qYXZhLm5ldyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21lbWJlcnNDaGFuZ2UvdGhyb3dzTGlzdERpZmZlcnNJbkJhc2VBbmREZXJpdmVkL0Jhc2VTZXJ2ZXIuamF2YS5uZXcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjBkYTg1YQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21lbWJlcnNDaGFuZ2UvdGhyb3dzTGlzdERpZmZlcnNJbkJhc2VBbmREZXJpdmVkL0Jhc2VTZXJ2ZXIuamF2YS5uZXcKQEAgLTAsMCArMSw1IEBACitwdWJsaWMgY2xhc3MgQmFzZVNlcnZlciB7CisgIHB1YmxpYyBJbnRlZ2VyIG1ldGhvZCgpIHRocm93cyBFeGNlcHRpb24yIHsKKyAgICByZXR1cm4gbmV3IEludGVnZXIoMCk7CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21lbWJlcnNDaGFuZ2UvdGhyb3dzTGlzdERpZmZlcnNJbkJhc2VBbmREZXJpdmVkL2RhdGEueG1sIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWVtYmVyc0NoYW5nZS90aHJvd3NMaXN0RGlmZmVyc0luQmFzZUFuZERlcml2ZWQvZGF0YS54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTU5NzgxZQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21lbWJlcnNDaGFuZ2UvdGhyb3dzTGlzdERpZmZlcnNJbkJhc2VBbmREZXJpdmVkL2RhdGEueG1sCkBAIC0wLDAgKzEsMTIgQEAKKzx0ZXN0RGF0YT4KKworICA8ZGVsZXRlZF9ieV9tYWtlPgorICAgIDxmaWxlIHBhdGg9ImNsYXNzZXMvQmFzZVNlcnZlci5jbGFzcyIgLz4KKyAgICA8ZmlsZSBwYXRoPSJjbGFzc2VzL1NlcnZlci5jbGFzcyIgLz4KKyAgPC9kZWxldGVkX2J5X21ha2U+CisKKyAgPHJlY29tcGlsZT4KKyAgICA8ZmlsZSBwYXRoPSJzb3VyY2UvU2VydmVyLmphdmEiIC8+CisgIDwvcmVjb21waWxlPgorCis8L3Rlc3REYXRhPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21lbWJlcnNDaGFuZ2UvdGhyb3dzTGlzdERpZmZlcnNJbkJhc2VBbmREZXJpdmVkL3NyYy9CYXNlU2VydmVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZW1iZXJzQ2hhbmdlL3Rocm93c0xpc3REaWZmZXJzSW5CYXNlQW5kRGVyaXZlZC9zcmMvQmFzZVNlcnZlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMzZjliN2IKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZW1iZXJzQ2hhbmdlL3Rocm93c0xpc3REaWZmZXJzSW5CYXNlQW5kRGVyaXZlZC9zcmMvQmFzZVNlcnZlci5qYXZhCkBAIC0wLDAgKzEsMiBAQAorcHVibGljIGNsYXNzIEJhc2VTZXJ2ZXIgeworfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWVtYmVyc0NoYW5nZS90aHJvd3NMaXN0RGlmZmVyc0luQmFzZUFuZERlcml2ZWQvc3JjL0V4Y2VwdGlvbjEuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21lbWJlcnNDaGFuZ2UvdGhyb3dzTGlzdERpZmZlcnNJbkJhc2VBbmREZXJpdmVkL3NyYy9FeGNlcHRpb24xLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmY1N2I3ZgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21lbWJlcnNDaGFuZ2UvdGhyb3dzTGlzdERpZmZlcnNJbkJhc2VBbmREZXJpdmVkL3NyYy9FeGNlcHRpb24xLmphdmEKQEAgLTAsMCArMSwyIEBACitwdWJsaWMgY2xhc3MgRXhjZXB0aW9uMSBleHRlbmRzIEV4Y2VwdGlvbiB7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWVtYmVyc0NoYW5nZS90aHJvd3NMaXN0RGlmZmVyc0luQmFzZUFuZERlcml2ZWQvc3JjL0V4Y2VwdGlvbjIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21lbWJlcnNDaGFuZ2UvdGhyb3dzTGlzdERpZmZlcnNJbkJhc2VBbmREZXJpdmVkL3NyYy9FeGNlcHRpb24yLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzc4YWViYgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21lbWJlcnNDaGFuZ2UvdGhyb3dzTGlzdERpZmZlcnNJbkJhc2VBbmREZXJpdmVkL3NyYy9FeGNlcHRpb24yLmphdmEKQEAgLTAsMCArMSwyIEBACitwdWJsaWMgY2xhc3MgRXhjZXB0aW9uMiBleHRlbmRzIEV4Y2VwdGlvbiB7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWVtYmVyc0NoYW5nZS90aHJvd3NMaXN0RGlmZmVyc0luQmFzZUFuZERlcml2ZWQvc3JjL1NlcnZlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWVtYmVyc0NoYW5nZS90aHJvd3NMaXN0RGlmZmVyc0luQmFzZUFuZERlcml2ZWQvc3JjL1NlcnZlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE0MzBhYjkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZW1iZXJzQ2hhbmdlL3Rocm93c0xpc3REaWZmZXJzSW5CYXNlQW5kRGVyaXZlZC9zcmMvU2VydmVyLmphdmEKQEAgLTAsMCArMSw1IEBACitwdWJsaWMgY2xhc3MgU2VydmVyIGV4dGVuZHMgQmFzZVNlcnZlciB7CisgIHByb3RlY3RlZCBJbnRlZ2VyIG1ldGhvZCgpIHRocm93cyBFeGNlcHRpb24xIHsKKyAgICByZXR1cm4gbmV3IEludGVnZXIoMTApOworICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZXRob2RNb2RpZmllcnMvZGVjQ29uc3RydWN0b3JBY2Nlc3MubG9nIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWV0aG9kTW9kaWZpZXJzL2RlY0NvbnN0cnVjdG9yQWNjZXNzLmxvZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZDYwM2JjCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWV0aG9kTW9kaWZpZXJzL2RlY0NvbnN0cnVjdG9yQWNjZXNzLmxvZwpAQCAtMCwwICsxLDEyIEBACitDbGVhbmluZyBvdXRwdXQgZmlsZXM6CitvdXQvcHJvZHVjdGlvbi9EZWNDb25zdHJ1Y3RvckFjY2Vzcy9pbXBsL1NlcnZlci5jbGFzcworRW5kIG9mIGZpbGVzCitDb21waWxpbmcgZmlsZXM6CitzcmMvaW1wbC9TZXJ2ZXIuamF2YQorRW5kIG9mIGZpbGVzCitDbGVhbmluZyBvdXRwdXQgZmlsZXM6CitvdXQvcHJvZHVjdGlvbi9EZWNDb25zdHJ1Y3RvckFjY2Vzcy9DbGllbnQuY2xhc3MKK0VuZCBvZiBmaWxlcworQ29tcGlsaW5nIGZpbGVzOgorc3JjL0NsaWVudC5qYXZhCitFbmQgb2YgZmlsZXMKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21ldGhvZE1vZGlmaWVycy9kZWNDb25zdHJ1Y3RvckFjY2Vzcy9kYXRhLnhtbCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21ldGhvZE1vZGlmaWVycy9kZWNDb25zdHJ1Y3RvckFjY2Vzcy9kYXRhLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jN2ZkNWQ0Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWV0aG9kTW9kaWZpZXJzL2RlY0NvbnN0cnVjdG9yQWNjZXNzL2RhdGEueG1sCkBAIC0wLDAgKzEsMTAgQEAKKzx0ZXN0RGF0YT4KKyAgPGRlbGV0ZWRfYnlfbWFrZT4KKyAgICA8ZmlsZSBwYXRoPSJjbGFzc2VzL2ltcGwvU2VydmVyLmNsYXNzIiAvPgorICAgIDxmaWxlIHBhdGg9ImNsYXNzZXMvQ2xpZW50LmNsYXNzIiAvPgorICA8L2RlbGV0ZWRfYnlfbWFrZT4KKworICA8cmVjb21waWxlPgorICAgIDxmaWxlIHBhdGg9InNvdXJjZS9DbGllbnQuamF2YSIgLz4KKyAgPC9yZWNvbXBpbGU+Cis8L3Rlc3REYXRhPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21ldGhvZE1vZGlmaWVycy9kZWNDb25zdHJ1Y3RvckFjY2Vzcy9zcmMvQ2xpZW50LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZXRob2RNb2RpZmllcnMvZGVjQ29uc3RydWN0b3JBY2Nlc3Mvc3JjL0NsaWVudC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM3M2Q0YTMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZXRob2RNb2RpZmllcnMvZGVjQ29uc3RydWN0b3JBY2Nlc3Mvc3JjL0NsaWVudC5qYXZhCkBAIC0wLDAgKzEsNiBAQAoraW1wb3J0IGltcGwuKjsKK2NsYXNzIENsaWVudCB7CisgIFNlcnZlciBmYWN0b3J5KCkgeworICAgIHJldHVybiBuZXcgU2VydmVyKCk7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZXRob2RNb2RpZmllcnMvZGVjQ29uc3RydWN0b3JBY2Nlc3Mvc3JjL2ltcGwvU2VydmVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZXRob2RNb2RpZmllcnMvZGVjQ29uc3RydWN0b3JBY2Nlc3Mvc3JjL2ltcGwvU2VydmVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTc3ZDYyZgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21ldGhvZE1vZGlmaWVycy9kZWNDb25zdHJ1Y3RvckFjY2Vzcy9zcmMvaW1wbC9TZXJ2ZXIuamF2YQpAQCAtMCwwICsxLDMgQEAKK3BhY2thZ2UgaW1wbDsKK3B1YmxpYyBjbGFzcyBTZXJ2ZXIgeworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21ldGhvZE1vZGlmaWVycy9kZWNDb25zdHJ1Y3RvckFjY2Vzcy9zcmMvaW1wbC9TZXJ2ZXIuamF2YS5uZXcgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZXRob2RNb2RpZmllcnMvZGVjQ29uc3RydWN0b3JBY2Nlc3Mvc3JjL2ltcGwvU2VydmVyLmphdmEubmV3Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU1MWIyMjgKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZXRob2RNb2RpZmllcnMvZGVjQ29uc3RydWN0b3JBY2Nlc3Mvc3JjL2ltcGwvU2VydmVyLmphdmEubmV3CkBAIC0wLDAgKzEsNSBAQAorcGFja2FnZSBpbXBsOworcHVibGljIGNsYXNzIFNlcnZlciB7CisgIFNlcnZlcigpIHsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21ldGhvZE1vZGlmaWVycy9pbmNBY2Nlc3MubG9nIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWV0aG9kTW9kaWZpZXJzL2luY0FjY2Vzcy5sb2cKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2Q0N2MxMQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21ldGhvZE1vZGlmaWVycy9pbmNBY2Nlc3MubG9nCkBAIC0wLDAgKzEsMTIgQEAKK0NsZWFuaW5nIG91dHB1dCBmaWxlczoKK291dC9wcm9kdWN0aW9uL0luY0FjY2Vzcy9CYXNlLmNsYXNzCitFbmQgb2YgZmlsZXMKK0NvbXBpbGluZyBmaWxlczoKK3NyYy9CYXNlLmphdmEKK0VuZCBvZiBmaWxlcworQ2xlYW5pbmcgb3V0cHV0IGZpbGVzOgorb3V0L3Byb2R1Y3Rpb24vSW5jQWNjZXNzL0Rlcml2ZWQuY2xhc3MKK0VuZCBvZiBmaWxlcworQ29tcGlsaW5nIGZpbGVzOgorc3JjL0Rlcml2ZWQuamF2YQorRW5kIG9mIGZpbGVzCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZXRob2RNb2RpZmllcnMvaW5jQWNjZXNzL0Jhc2UuamF2YS5uZXcgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZXRob2RNb2RpZmllcnMvaW5jQWNjZXNzL0Jhc2UuamF2YS5uZXcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjZjNjFkZQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21ldGhvZE1vZGlmaWVycy9pbmNBY2Nlc3MvQmFzZS5qYXZhLm5ldwpAQCAtMCwwICsxLDMgQEAKK2NsYXNzIEJhc2UgeworICBwdWJsaWMgdm9pZCBmb28oKSB7fQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21ldGhvZE1vZGlmaWVycy9pbmNBY2Nlc3MvZGF0YS54bWwgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZXRob2RNb2RpZmllcnMvaW5jQWNjZXNzL2RhdGEueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI1MTk3OWI2Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWV0aG9kTW9kaWZpZXJzL2luY0FjY2Vzcy9kYXRhLnhtbApAQCAtMCwwICsxLDEwIEBACis8dGVzdERhdGE+CisgIDxkZWxldGVkX2J5X21ha2U+CisgICAgPGZpbGUgcGF0aD0iY2xhc3Nlcy9CYXNlLmNsYXNzIiAvPgorICAgIDxmaWxlIHBhdGg9ImNsYXNzZXMvRGVyaXZlZC5jbGFzcyIgLz4KKyAgPC9kZWxldGVkX2J5X21ha2U+CisKKyAgPHJlY29tcGlsZT4KKyAgICA8ZmlsZSBwYXRoPSJzb3VyY2UvRGVyaXZlZC5qYXZhIiAvPgorICA8L3JlY29tcGlsZT4KKzwvdGVzdERhdGE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWV0aG9kTW9kaWZpZXJzL2luY0FjY2Vzcy9zcmMvQmFzZS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWV0aG9kTW9kaWZpZXJzL2luY0FjY2Vzcy9zcmMvQmFzZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBiZjZjNzcKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZXRob2RNb2RpZmllcnMvaW5jQWNjZXNzL3NyYy9CYXNlLmphdmEKQEAgLTAsMCArMSwzIEBACitjbGFzcyBCYXNlIHsKKyAgcHJvdGVjdGVkIHZvaWQgZm9vKCkge30KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZXRob2RNb2RpZmllcnMvaW5jQWNjZXNzL3NyYy9EZXJpdmVkLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZXRob2RNb2RpZmllcnMvaW5jQWNjZXNzL3NyYy9EZXJpdmVkLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTcwNmVlMgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21ldGhvZE1vZGlmaWVycy9pbmNBY2Nlc3Mvc3JjL0Rlcml2ZWQuamF2YQpAQCAtMCwwICsxLDMgQEAKK2NsYXNzIERlcml2ZWQgZXh0ZW5kcyBCYXNlIHsKKyAgcHJvdGVjdGVkIHZvaWQgZm9vKCkge30KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZXRob2RNb2RpZmllcnMvc2V0QWJzdHJhY3QubG9nIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWV0aG9kTW9kaWZpZXJzL3NldEFic3RyYWN0LmxvZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MzIwMmZjCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWV0aG9kTW9kaWZpZXJzL3NldEFic3RyYWN0LmxvZwpAQCAtMCwwICsxLDE1IEBACitDbGVhbmluZyBvdXRwdXQgZmlsZXM6CitvdXQvcHJvZHVjdGlvbi9TZXRBYnN0cmFjdC9TdXBlci5jbGFzcworRW5kIG9mIGZpbGVzCitDb21waWxpbmcgZmlsZXM6CitzcmMvU3VwZXIuamF2YQorRW5kIG9mIGZpbGVzCitDbGVhbmluZyBvdXRwdXQgZmlsZXM6CitvdXQvcHJvZHVjdGlvbi9TZXRBYnN0cmFjdC9Bbm9uRGVyaXZlZCQxLmNsYXNzCitvdXQvcHJvZHVjdGlvbi9TZXRBYnN0cmFjdC9Bbm9uRGVyaXZlZC5jbGFzcworb3V0L3Byb2R1Y3Rpb24vU2V0QWJzdHJhY3QvRGVyaXZlZC5jbGFzcworRW5kIG9mIGZpbGVzCitDb21waWxpbmcgZmlsZXM6CitzcmMvQW5vbkRlcml2ZWQuamF2YQorc3JjL0Rlcml2ZWQuamF2YQorRW5kIG9mIGZpbGVzCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZXRob2RNb2RpZmllcnMvc2V0QWJzdHJhY3QvU3VwZXIuamF2YS5uZXcgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZXRob2RNb2RpZmllcnMvc2V0QWJzdHJhY3QvU3VwZXIuamF2YS5uZXcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzE5YWUxYQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21ldGhvZE1vZGlmaWVycy9zZXRBYnN0cmFjdC9TdXBlci5qYXZhLm5ldwpAQCAtMCwwICsxLDMgQEAKK2Fic3RyYWN0IGNsYXNzIFN1cGVyIHsKKyAgYWJzdHJhY3Qgdm9pZCBvdXQoKTsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZXRob2RNb2RpZmllcnMvc2V0QWJzdHJhY3QvZGF0YS54bWwgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZXRob2RNb2RpZmllcnMvc2V0QWJzdHJhY3QvZGF0YS54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmJhMWQwZgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21ldGhvZE1vZGlmaWVycy9zZXRBYnN0cmFjdC9kYXRhLnhtbApAQCAtMCwwICsxLDEzIEBACis8dGVzdERhdGE+CisgIDxkZWxldGVkX2J5X21ha2U+CisgICAgPGZpbGUgcGF0aD0iY2xhc3Nlcy9TdXBlci5jbGFzcyIgLz4KKyAgICA8ZmlsZSBwYXRoPSJjbGFzc2VzL0Rlcml2ZWQuY2xhc3MiIC8+CisgICAgPGZpbGUgcGF0aD0iY2xhc3Nlcy9Bbm9uRGVyaXZlZC5jbGFzcyIgLz4KKyAgICA8ZmlsZSBwYXRoPSJjbGFzc2VzL0Fub25EZXJpdmVkJDEuY2xhc3MiIC8+CisgIDwvZGVsZXRlZF9ieV9tYWtlPgorCisgIDxyZWNvbXBpbGU+CisgICAgPGZpbGUgcGF0aD0ic291cmNlL0Rlcml2ZWQuamF2YSIgLz4KKyAgICA8ZmlsZSBwYXRoPSJzb3VyY2UvQW5vbkRlcml2ZWQuamF2YSIgLz4KKyAgPC9yZWNvbXBpbGU+Cis8L3Rlc3REYXRhPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21ldGhvZE1vZGlmaWVycy9zZXRBYnN0cmFjdC9zcmMvQW5vbkRlcml2ZWQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21ldGhvZE1vZGlmaWVycy9zZXRBYnN0cmFjdC9zcmMvQW5vbkRlcml2ZWQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMmE4MGFlCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWV0aG9kTW9kaWZpZXJzL3NldEFic3RyYWN0L3NyYy9Bbm9uRGVyaXZlZC5qYXZhCkBAIC0wLDAgKzEsNSBAQAorY2xhc3MgQW5vbkRlcml2ZWQgeworICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisgICAgbmV3IFN1cGVyKCl7fTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21ldGhvZE1vZGlmaWVycy9zZXRBYnN0cmFjdC9zcmMvRGVyaXZlZC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWV0aG9kTW9kaWZpZXJzL3NldEFic3RyYWN0L3NyYy9EZXJpdmVkLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzMwZjFmOQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21ldGhvZE1vZGlmaWVycy9zZXRBYnN0cmFjdC9zcmMvRGVyaXZlZC5qYXZhCkBAIC0wLDAgKzEsNCBAQAorY2xhc3MgRGVyaXZlZCBleHRlbmRzIFN1cGVyeworICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZXRob2RNb2RpZmllcnMvc2V0QWJzdHJhY3Qvc3JjL1N1cGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZXRob2RNb2RpZmllcnMvc2V0QWJzdHJhY3Qvc3JjL1N1cGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzViY2I5ZAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21ldGhvZE1vZGlmaWVycy9zZXRBYnN0cmFjdC9zcmMvU3VwZXIuamF2YQpAQCAtMCwwICsxLDUgQEAKK2Fic3RyYWN0IGNsYXNzIFN1cGVyIHsKKyAgdm9pZCBvdXQoKSB7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJvdXQiKTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21ldGhvZE1vZGlmaWVycy9zZXRGaW5hbC5sb2cgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZXRob2RNb2RpZmllcnMvc2V0RmluYWwubG9nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIzMmYwMDgKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZXRob2RNb2RpZmllcnMvc2V0RmluYWwubG9nCkBAIC0wLDAgKzEsMTIgQEAKK0NsZWFuaW5nIG91dHB1dCBmaWxlczoKK291dC9wcm9kdWN0aW9uL1NldEZpbmFsL1N1cGVyLmNsYXNzCitFbmQgb2YgZmlsZXMKK0NvbXBpbGluZyBmaWxlczoKK3NyYy9TdXBlci5qYXZhCitFbmQgb2YgZmlsZXMKK0NsZWFuaW5nIG91dHB1dCBmaWxlczoKK291dC9wcm9kdWN0aW9uL1NldEZpbmFsL0Rlcml2ZWQuY2xhc3MKK0VuZCBvZiBmaWxlcworQ29tcGlsaW5nIGZpbGVzOgorc3JjL0Rlcml2ZWQuamF2YQorRW5kIG9mIGZpbGVzCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZXRob2RNb2RpZmllcnMvc2V0RmluYWwvU3VwZXIuamF2YS5uZXcgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZXRob2RNb2RpZmllcnMvc2V0RmluYWwvU3VwZXIuamF2YS5uZXcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDhlZmI3MwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21ldGhvZE1vZGlmaWVycy9zZXRGaW5hbC9TdXBlci5qYXZhLm5ldwpAQCAtMCwwICsxLDQgQEAKK2NsYXNzIFN1cGVyIHsKKyAgZmluYWwgdm9pZCBvdXQoKSB7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZXRob2RNb2RpZmllcnMvc2V0RmluYWwvZGF0YS54bWwgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZXRob2RNb2RpZmllcnMvc2V0RmluYWwvZGF0YS54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGE1ZDllNQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21ldGhvZE1vZGlmaWVycy9zZXRGaW5hbC9kYXRhLnhtbApAQCAtMCwwICsxLDEwIEBACis8dGVzdERhdGE+CisgIDxkZWxldGVkX2J5X21ha2U+CisgICAgPGZpbGUgcGF0aD0iY2xhc3Nlcy9TdXBlci5jbGFzcyIgLz4KKyAgICA8ZmlsZSBwYXRoPSJjbGFzc2VzL0Rlcml2ZWQuY2xhc3MiIC8+CisgIDwvZGVsZXRlZF9ieV9tYWtlPgorCisgIDxyZWNvbXBpbGU+CisgICAgPGZpbGUgcGF0aD0ic291cmNlL0Rlcml2ZWQuamF2YSIgLz4KKyAgPC9yZWNvbXBpbGU+Cis8L3Rlc3REYXRhPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21ldGhvZE1vZGlmaWVycy9zZXRGaW5hbC9zcmMvQ2xpZW50LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZXRob2RNb2RpZmllcnMvc2V0RmluYWwvc3JjL0NsaWVudC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVmMmFjZWMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZXRob2RNb2RpZmllcnMvc2V0RmluYWwvc3JjL0NsaWVudC5qYXZhCkBAIC0wLDAgKzEsNSBAQAorY2xhc3MgQ2xpZW50eworICB7CisgICAgbmV3IFN1cGVyKCkub3V0KCk7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZXRob2RNb2RpZmllcnMvc2V0RmluYWwvc3JjL0Rlcml2ZWQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21ldGhvZE1vZGlmaWVycy9zZXRGaW5hbC9zcmMvRGVyaXZlZC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg3MDNjNWQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZXRob2RNb2RpZmllcnMvc2V0RmluYWwvc3JjL0Rlcml2ZWQuamF2YQpAQCAtMCwwICsxLDUgQEAKK2NsYXNzIERlcml2ZWQgZXh0ZW5kcyBTdXBlcnsKKyAgdm9pZCBvdXQoKSB7CisgICAvLyB0aGlzIG1ldGhvZCBvdmVycmlkZXMgU3VwZXIub3V0KCkKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21ldGhvZE1vZGlmaWVycy9zZXRGaW5hbC9zcmMvU3VwZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21ldGhvZE1vZGlmaWVycy9zZXRGaW5hbC9zcmMvU3VwZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNGZhZWI5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWV0aG9kTW9kaWZpZXJzL3NldEZpbmFsL3NyYy9TdXBlci5qYXZhCkBAIC0wLDAgKzEsNCBAQAorY2xhc3MgU3VwZXIgeworICB2b2lkIG91dCgpIHsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21ldGhvZE1vZGlmaWVycy9zZXRQcml2YXRlLmxvZyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21ldGhvZE1vZGlmaWVycy9zZXRQcml2YXRlLmxvZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZDY3YmM3Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWV0aG9kTW9kaWZpZXJzL3NldFByaXZhdGUubG9nCkBAIC0wLDAgKzEsMTIgQEAKK0NsZWFuaW5nIG91dHB1dCBmaWxlczoKK291dC9wcm9kdWN0aW9uL1NldFByaXZhdGUvQS5jbGFzcworRW5kIG9mIGZpbGVzCitDb21waWxpbmcgZmlsZXM6CitzcmMvQS5qYXZhCitFbmQgb2YgZmlsZXMKK0NsZWFuaW5nIG91dHB1dCBmaWxlczoKK291dC9wcm9kdWN0aW9uL1NldFByaXZhdGUvQi5jbGFzcworRW5kIG9mIGZpbGVzCitDb21waWxpbmcgZmlsZXM6CitzcmMvQi5qYXZhCitFbmQgb2YgZmlsZXMKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21ldGhvZE1vZGlmaWVycy9zZXRQcml2YXRlL0EuamF2YS5uZXcgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZXRob2RNb2RpZmllcnMvc2V0UHJpdmF0ZS9BLmphdmEubmV3Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM2NGZhMDUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZXRob2RNb2RpZmllcnMvc2V0UHJpdmF0ZS9BLmphdmEubmV3CkBAIC0wLDAgKzEsNSBAQAorY2xhc3MgQSB7CisgICBwcml2YXRlIHZvaWQgZigpIHsKKworICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21ldGhvZE1vZGlmaWVycy9zZXRQcml2YXRlL3NyYy9BLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZXRob2RNb2RpZmllcnMvc2V0UHJpdmF0ZS9zcmMvQS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk3M2YyNWUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZXRob2RNb2RpZmllcnMvc2V0UHJpdmF0ZS9zcmMvQS5qYXZhCkBAIC0wLDAgKzEsNSBAQAorY2xhc3MgQSB7CisgICAgdm9pZCBmICgpeworCisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21ldGhvZE1vZGlmaWVycy9zZXRQcml2YXRlL3NyYy9CLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZXRob2RNb2RpZmllcnMvc2V0UHJpdmF0ZS9zcmMvQi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZmNWU3MzgKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZXRob2RNb2RpZmllcnMvc2V0UHJpdmF0ZS9zcmMvQi5qYXZhCkBAIC0wLDAgKzEsNSBAQAorY2xhc3MgQiB7CisgICB2b2lkIGYgKEEgYSkgeworICAgICAgIGEuZigpOworICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21ldGhvZE1vZGlmaWVycy9zZXRQcm90ZWN0ZWQubG9nIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWV0aG9kTW9kaWZpZXJzL3NldFByb3RlY3RlZC5sb2cKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzY1ZGE5MwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21ldGhvZE1vZGlmaWVycy9zZXRQcm90ZWN0ZWQubG9nCkBAIC0wLDAgKzEsMTIgQEAKK0NsZWFuaW5nIG91dHB1dCBmaWxlczoKK291dC9wcm9kdWN0aW9uL1NldFByb3RlY3RlZC9BLmNsYXNzCitFbmQgb2YgZmlsZXMKK0NvbXBpbGluZyBmaWxlczoKK3NyYy9BLmphdmEKK0VuZCBvZiBmaWxlcworQ2xlYW5pbmcgb3V0cHV0IGZpbGVzOgorb3V0L3Byb2R1Y3Rpb24vU2V0UHJvdGVjdGVkL0IuY2xhc3MKK0VuZCBvZiBmaWxlcworQ29tcGlsaW5nIGZpbGVzOgorc3JjL0IuamF2YQorRW5kIG9mIGZpbGVzCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZXRob2RNb2RpZmllcnMvc2V0UHJvdGVjdGVkL0EuamF2YS5uZXcgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZXRob2RNb2RpZmllcnMvc2V0UHJvdGVjdGVkL0EuamF2YS5uZXcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2JiY2M1ZQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21ldGhvZE1vZGlmaWVycy9zZXRQcm90ZWN0ZWQvQS5qYXZhLm5ldwpAQCAtMCwwICsxLDUgQEAKK2NsYXNzIEEgeworICAgcHJvdGVjdGVkIHZvaWQgZigpIHsKKworICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21ldGhvZE1vZGlmaWVycy9zZXRQcm90ZWN0ZWQvc3JjL0EuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21ldGhvZE1vZGlmaWVycy9zZXRQcm90ZWN0ZWQvc3JjL0EuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NzNmMjVlCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWV0aG9kTW9kaWZpZXJzL3NldFByb3RlY3RlZC9zcmMvQS5qYXZhCkBAIC0wLDAgKzEsNSBAQAorY2xhc3MgQSB7CisgICAgdm9pZCBmICgpeworCisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21ldGhvZE1vZGlmaWVycy9zZXRQcm90ZWN0ZWQvc3JjL0IuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21ldGhvZE1vZGlmaWVycy9zZXRQcm90ZWN0ZWQvc3JjL0IuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZjVlNzM4Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWV0aG9kTW9kaWZpZXJzL3NldFByb3RlY3RlZC9zcmMvQi5qYXZhCkBAIC0wLDAgKzEsNSBAQAorY2xhc3MgQiB7CisgICB2b2lkIGYgKEEgYSkgeworICAgICAgIGEuZigpOworICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21ldGhvZE1vZGlmaWVycy9zZXRQcm90ZWN0ZWQvc3JjL0MuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21ldGhvZE1vZGlmaWVycy9zZXRQcm90ZWN0ZWQvc3JjL0MuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZDBhNjZiCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWV0aG9kTW9kaWZpZXJzL3NldFByb3RlY3RlZC9zcmMvQy5qYXZhCkBAIC0wLDAgKzEsNSBAQAorY2xhc3MgQyBleHRlbmRzIEEgeworICAgIHZvaWQgZygpeworICAgICAgICBmKCk7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21ldGhvZE1vZGlmaWVycy9zZXRTdGF0aWMubG9nIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWV0aG9kTW9kaWZpZXJzL3NldFN0YXRpYy5sb2cKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWRkMzcxMDAKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZXRob2RNb2RpZmllcnMvc2V0U3RhdGljLmxvZwpAQCAtMCwwICsxLDE0IEBACitDbGVhbmluZyBvdXRwdXQgZmlsZXM6CitvdXQvcHJvZHVjdGlvbi9TZXRTdGF0aWMvQS5jbGFzcworRW5kIG9mIGZpbGVzCitDb21waWxpbmcgZmlsZXM6CitzcmMvQS5qYXZhCitFbmQgb2YgZmlsZXMKK0NsZWFuaW5nIG91dHB1dCBmaWxlczoKK291dC9wcm9kdWN0aW9uL1NldFN0YXRpYy9CLmNsYXNzCitvdXQvcHJvZHVjdGlvbi9TZXRTdGF0aWMvQy5jbGFzcworRW5kIG9mIGZpbGVzCitDb21waWxpbmcgZmlsZXM6CitzcmMvQi5qYXZhCitzcmMvQy5qYXZhCitFbmQgb2YgZmlsZXMKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21ldGhvZE1vZGlmaWVycy9zZXRTdGF0aWMvQS5qYXZhLm5ldyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21ldGhvZE1vZGlmaWVycy9zZXRTdGF0aWMvQS5qYXZhLm5ldwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMWI4ZWYzCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWV0aG9kTW9kaWZpZXJzL3NldFN0YXRpYy9BLmphdmEubmV3CkBAIC0wLDAgKzEsNSBAQAorY2xhc3MgQSB7CisgICAgc3RhdGljIHZvaWQgZigpeworCisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21ldGhvZE1vZGlmaWVycy9zZXRTdGF0aWMvc3JjL0EuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21ldGhvZE1vZGlmaWVycy9zZXRTdGF0aWMvc3JjL0EuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZTQzOTNiCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWV0aG9kTW9kaWZpZXJzL3NldFN0YXRpYy9zcmMvQS5qYXZhCkBAIC0wLDAgKzEsNSBAQAorY2xhc3MgQSB7CisgICAgdm9pZCBmKCl7CisKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWV0aG9kTW9kaWZpZXJzL3NldFN0YXRpYy9zcmMvQi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWV0aG9kTW9kaWZpZXJzL3NldFN0YXRpYy9zcmMvQi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZmYTU2MzMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZXRob2RNb2RpZmllcnMvc2V0U3RhdGljL3NyYy9CLmphdmEKQEAgLTAsMCArMSwzIEBACitjbGFzcyBCIGV4dGVuZHMgQSB7CisgICAgdm9pZCBmICgpe30KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZXRob2RNb2RpZmllcnMvc2V0U3RhdGljL3NyYy9DLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZXRob2RNb2RpZmllcnMvc2V0U3RhdGljL3NyYy9DLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWVmYjhjMgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21ldGhvZE1vZGlmaWVycy9zZXRTdGF0aWMvc3JjL0MuamF2YQpAQCAtMCwwICsxLDYgQEAKK2NsYXNzIEN7CisgICAgdm9pZCBnIChBIGEsIEIgYil7CisgICAgICAgIGEuZigpOworICAgICAgICBiLmYoKTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWV0aG9kTW9kaWZpZXJzL3Vuc2V0RmluYWwubG9nIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWV0aG9kTW9kaWZpZXJzL3Vuc2V0RmluYWwubG9nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRkMmJiMGYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZXRob2RNb2RpZmllcnMvdW5zZXRGaW5hbC5sb2cKQEAgLTAsMCArMSw2IEBACitDbGVhbmluZyBvdXRwdXQgZmlsZXM6CitvdXQvcHJvZHVjdGlvbi9VbnNldEZpbmFsL1NlcnZlci5jbGFzcworRW5kIG9mIGZpbGVzCitDb21waWxpbmcgZmlsZXM6CitzcmMvU2VydmVyLmphdmEKK0VuZCBvZiBmaWxlcwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWV0aG9kTW9kaWZpZXJzL3Vuc2V0RmluYWwvU2VydmVyLmphdmEubmV3IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWV0aG9kTW9kaWZpZXJzL3Vuc2V0RmluYWwvU2VydmVyLmphdmEubmV3Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUwNGE0Y2YKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZXRob2RNb2RpZmllcnMvdW5zZXRGaW5hbC9TZXJ2ZXIuamF2YS5uZXcKQEAgLTAsMCArMSw0IEBACitjbGFzcyBTZXJ2ZXIgeworICB2b2lkIGZvbygpIHsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21ldGhvZE1vZGlmaWVycy91bnNldEZpbmFsL2RhdGEueG1sIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWV0aG9kTW9kaWZpZXJzL3Vuc2V0RmluYWwvZGF0YS54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDExZWJlNwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21ldGhvZE1vZGlmaWVycy91bnNldEZpbmFsL2RhdGEueG1sCkBAIC0wLDAgKzEsOCBAQAorPHRlc3REYXRhPgorICA8ZGVsZXRlZF9ieV9tYWtlPgorICAgIDxmaWxlIHBhdGg9ImNsYXNzZXMvU2VydmVyLmNsYXNzIiAvPgorICA8L2RlbGV0ZWRfYnlfbWFrZT4KKworICA8cmVjb21waWxlPgorICA8L3JlY29tcGlsZT4KKzwvdGVzdERhdGE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWV0aG9kTW9kaWZpZXJzL3Vuc2V0RmluYWwvc3JjL0NsaWVudC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWV0aG9kTW9kaWZpZXJzL3Vuc2V0RmluYWwvc3JjL0NsaWVudC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUxYTU5ZTAKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZXRob2RNb2RpZmllcnMvdW5zZXRGaW5hbC9zcmMvQ2xpZW50LmphdmEKQEAgLTAsMCArMSw1IEBACitjbGFzcyBDbGllbnR7CisgIHsKKyAgICBuZXcgU2VydmVyKCkuZm9vKCk7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZXRob2RNb2RpZmllcnMvdW5zZXRGaW5hbC9zcmMvU2VydmVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZXRob2RNb2RpZmllcnMvdW5zZXRGaW5hbC9zcmMvU2VydmVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTQ2NjI4NAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21ldGhvZE1vZGlmaWVycy91bnNldEZpbmFsL3NyYy9TZXJ2ZXIuamF2YQpAQCAtMCwwICsxLDQgQEAKK2NsYXNzIFNlcnZlciB7CisgIGZpbmFsIHZvaWQgZm9vKCkgeworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWV0aG9kTW9kaWZpZXJzL3Vuc2V0U3RhdGljLmxvZyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21ldGhvZE1vZGlmaWVycy91bnNldFN0YXRpYy5sb2cKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzYwZjRkMQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21ldGhvZE1vZGlmaWVycy91bnNldFN0YXRpYy5sb2cKQEAgLTAsMCArMSwxMiBAQAorQ2xlYW5pbmcgb3V0cHV0IGZpbGVzOgorb3V0L3Byb2R1Y3Rpb24vVW5zZXRTdGF0aWMvQmFzZS5jbGFzcworRW5kIG9mIGZpbGVzCitDb21waWxpbmcgZmlsZXM6CitzcmMvQmFzZS5qYXZhCitFbmQgb2YgZmlsZXMKK0NsZWFuaW5nIG91dHB1dCBmaWxlczoKK291dC9wcm9kdWN0aW9uL1Vuc2V0U3RhdGljL0NsaWVudC5jbGFzcworRW5kIG9mIGZpbGVzCitDb21waWxpbmcgZmlsZXM6CitzcmMvQ2xpZW50LmphdmEKK0VuZCBvZiBmaWxlcwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWV0aG9kTW9kaWZpZXJzL3Vuc2V0U3RhdGljL0Jhc2UuamF2YS5uZXcgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZXRob2RNb2RpZmllcnMvdW5zZXRTdGF0aWMvQmFzZS5qYXZhLm5ldwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NjY3ZTI2Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWV0aG9kTW9kaWZpZXJzL3Vuc2V0U3RhdGljL0Jhc2UuamF2YS5uZXcKQEAgLTAsMCArMSw1IEBACitjbGFzcyBCYXNlIHsKKyAgY2hhciBtZXRob2QoKSB7CisgICAgcmV0dXJuICdhJzsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21ldGhvZE1vZGlmaWVycy91bnNldFN0YXRpYy9kYXRhLnhtbCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21ldGhvZE1vZGlmaWVycy91bnNldFN0YXRpYy9kYXRhLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYmEzMzY0Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWV0aG9kTW9kaWZpZXJzL3Vuc2V0U3RhdGljL2RhdGEueG1sCkBAIC0wLDAgKzEsMTAgQEAKKzx0ZXN0RGF0YT4KKyAgPGRlbGV0ZWRfYnlfbWFrZT4KKyAgICA8ZmlsZSBwYXRoPSJjbGFzc2VzL0Jhc2UuY2xhc3MiIC8+CisgICAgPGZpbGUgcGF0aD0iY2xhc3Nlcy9DbGllbnQuY2xhc3MiIC8+CisgIDwvZGVsZXRlZF9ieV9tYWtlPgorCisgIDxyZWNvbXBpbGU+CisgICAgPGZpbGUgcGF0aD0ic291cmNlL0NsaWVudC5qYXZhIiAvPgorICA8L3JlY29tcGlsZT4KKzwvdGVzdERhdGE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWV0aG9kTW9kaWZpZXJzL3Vuc2V0U3RhdGljL3NyYy9CYXNlLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZXRob2RNb2RpZmllcnMvdW5zZXRTdGF0aWMvc3JjL0Jhc2UuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MmE2ZTMwCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWV0aG9kTW9kaWZpZXJzL3Vuc2V0U3RhdGljL3NyYy9CYXNlLmphdmEKQEAgLTAsMCArMSw1IEBACitjbGFzcyBCYXNlIHsKKyAgc3RhdGljIGNoYXIgbWV0aG9kKCkgeworICAgIHJldHVybiAnYSc7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZXRob2RNb2RpZmllcnMvdW5zZXRTdGF0aWMvc3JjL0NsaWVudC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWV0aG9kTW9kaWZpZXJzL3Vuc2V0U3RhdGljL3NyYy9DbGllbnQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYmFmYzFkCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWV0aG9kTW9kaWZpZXJzL3Vuc2V0U3RhdGljL3NyYy9DbGllbnQuamF2YQpAQCAtMCwwICsxLDUgQEAKK2NsYXNzIENsaWVudCB7CisgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oQmFzZS5tZXRob2QoKSk7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZXRob2RQcm9wZXJ0aWVzL2FkZFRocm93cy5sb2cgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZXRob2RQcm9wZXJ0aWVzL2FkZFRocm93cy5sb2cKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGE2ZTE2YQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21ldGhvZFByb3BlcnRpZXMvYWRkVGhyb3dzLmxvZwpAQCAtMCwwICsxLDEyIEBACitDbGVhbmluZyBvdXRwdXQgZmlsZXM6CitvdXQvcHJvZHVjdGlvbi9BZGRUaHJvd3MvcGFja2FnZUEvU2VydmVyLmNsYXNzCitFbmQgb2YgZmlsZXMKK0NvbXBpbGluZyBmaWxlczoKK3NyYy9wYWNrYWdlQS9TZXJ2ZXIuamF2YQorRW5kIG9mIGZpbGVzCitDbGVhbmluZyBvdXRwdXQgZmlsZXM6CitvdXQvcHJvZHVjdGlvbi9BZGRUaHJvd3MvcGFja2FnZUEvQ2xpZW50LmNsYXNzCitFbmQgb2YgZmlsZXMKK0NvbXBpbGluZyBmaWxlczoKK3NyYy9wYWNrYWdlQS9DbGllbnQuamF2YQorRW5kIG9mIGZpbGVzCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZXRob2RQcm9wZXJ0aWVzL2FkZFRocm93cy9kYXRhLnhtbCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21ldGhvZFByb3BlcnRpZXMvYWRkVGhyb3dzL2RhdGEueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU2MmI3MmQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZXRob2RQcm9wZXJ0aWVzL2FkZFRocm93cy9kYXRhLnhtbApAQCAtMCwwICsxLDE1IEBACis8dGVzdERhdGE+CisKKyAgPGRlbGV0ZT4KKyAgPC9kZWxldGU+CisKKyAgPGRlbGV0ZWRfYnlfbWFrZT4KKyAgICA8ZmlsZSBwYXRoPSJjbGFzc2VzL3BhY2thZ2VBL1NlcnZlci5jbGFzcyIgLz4KKyAgICA8ZmlsZSBwYXRoPSJjbGFzc2VzL3BhY2thZ2VBL0NsaWVudC5jbGFzcyIgLz4KKyAgPC9kZWxldGVkX2J5X21ha2U+CisKKyAgPHJlY29tcGlsZT4KKyAgICA8ZmlsZSBwYXRoPSJzb3VyY2UvcGFja2FnZUEvQ2xpZW50LmphdmEiIC8+CisgIDwvcmVjb21waWxlPgorCis8L3Rlc3REYXRhPgpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWV0aG9kUHJvcGVydGllcy9hZGRUaHJvd3Mvc3JjL3BhY2thZ2VBL0NsaWVudC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWV0aG9kUHJvcGVydGllcy9hZGRUaHJvd3Mvc3JjL3BhY2thZ2VBL0NsaWVudC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNlZjU0MmYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZXRob2RQcm9wZXJ0aWVzL2FkZFRocm93cy9zcmMvcGFja2FnZUEvQ2xpZW50LmphdmEKQEAgLTAsMCArMSwxMiBAQAorLyoqCisgKiBjcmVhdGVkIGF0IEphbiAyMiwgMjAwMgorICogQGF1dGhvciBKZWthCisgKi8KK3BhY2thZ2UgcGFja2FnZUE7CisKK3B1YmxpYyBjbGFzcyBDbGllbnQgeworICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisgICAgU2VydmVyIHNlcnZlciA9IG5ldyBTZXJ2ZXIoKTsKKyAgICBzZXJ2ZXIubWV0aG9kKCk7CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21ldGhvZFByb3BlcnRpZXMvYWRkVGhyb3dzL3NyYy9wYWNrYWdlQS9TZXJ2ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21ldGhvZFByb3BlcnRpZXMvYWRkVGhyb3dzL3NyYy9wYWNrYWdlQS9TZXJ2ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MTBjODdkCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWV0aG9kUHJvcGVydGllcy9hZGRUaHJvd3Mvc3JjL3BhY2thZ2VBL1NlcnZlci5qYXZhCkBAIC0wLDAgKzEsMTEgQEAKKy8qKgorICogY3JlYXRlZCBhdCBKYW4gMjIsIDIwMDIKKyAqIEBhdXRob3IgSmVrYQorICovCitwYWNrYWdlIHBhY2thZ2VBOworCitwdWJsaWMgY2xhc3MgU2VydmVyIHsKKyAgcHVibGljIHZvaWQgbWV0aG9kKCkgeworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU2VydmVyLm1ldGhvZCIpOworICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZXRob2RQcm9wZXJ0aWVzL2FkZFRocm93cy9zcmMvcGFja2FnZUEvU2VydmVyLmphdmEubmV3IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWV0aG9kUHJvcGVydGllcy9hZGRUaHJvd3Mvc3JjL3BhY2thZ2VBL1NlcnZlci5qYXZhLm5ldwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZjM2MzhhCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWV0aG9kUHJvcGVydGllcy9hZGRUaHJvd3Mvc3JjL3BhY2thZ2VBL1NlcnZlci5qYXZhLm5ldwpAQCAtMCwwICsxLDExIEBACisvKioKKyAqIGNyZWF0ZWQgYXQgSmFuIDIyLCAyMDAyCisgKiBAYXV0aG9yIEpla2EKKyAqLworcGFja2FnZSBwYWNrYWdlQTsKKworcHVibGljIGNsYXNzIFNlcnZlciB7CisgIHB1YmxpYyB2b2lkIG1ldGhvZCgpIHRocm93cyBFeGNlcHRpb24geworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU2VydmVyLm1ldGhvZCIpOworICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZXRob2RQcm9wZXJ0aWVzL2NoYW5nZVJldHVyblR5cGUubG9nIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWV0aG9kUHJvcGVydGllcy9jaGFuZ2VSZXR1cm5UeXBlLmxvZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYTYyMmRhCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWV0aG9kUHJvcGVydGllcy9jaGFuZ2VSZXR1cm5UeXBlLmxvZwpAQCAtMCwwICsxLDE0IEBACitDbGVhbmluZyBvdXRwdXQgZmlsZXM6CitvdXQvcHJvZHVjdGlvbi9DaGFuZ2VSZXR1cm5UeXBlL0Jhc2UuY2xhc3MKK0VuZCBvZiBmaWxlcworQ29tcGlsaW5nIGZpbGVzOgorc3JjL0Jhc2UuamF2YQorRW5kIG9mIGZpbGVzCitDbGVhbmluZyBvdXRwdXQgZmlsZXM6CitvdXQvcHJvZHVjdGlvbi9DaGFuZ2VSZXR1cm5UeXBlL0NsaWVudC5jbGFzcworb3V0L3Byb2R1Y3Rpb24vQ2hhbmdlUmV0dXJuVHlwZS9EZXJpdmVkLmNsYXNzCitFbmQgb2YgZmlsZXMKK0NvbXBpbGluZyBmaWxlczoKK3NyYy9DbGllbnQuamF2YQorc3JjL0Rlcml2ZWQuamF2YQorRW5kIG9mIGZpbGVzCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZXRob2RQcm9wZXJ0aWVzL2NoYW5nZVJldHVyblR5cGUvQmFzZS5qYXZhLm5ldyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21ldGhvZFByb3BlcnRpZXMvY2hhbmdlUmV0dXJuVHlwZS9CYXNlLmphdmEubmV3Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk5ZDFmYjQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZXRob2RQcm9wZXJ0aWVzL2NoYW5nZVJldHVyblR5cGUvQmFzZS5qYXZhLm5ldwpAQCAtMCwwICsxLDUgQEAKK2NsYXNzIEJhc2UgeworICBwdWJsaWMgU3RyaW5nW10gZm9vKCkgeworICAgIHJldHVybiBuZXcgU3RyaW5nW117IkJhc2UuZm9vKCkifTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21ldGhvZFByb3BlcnRpZXMvY2hhbmdlUmV0dXJuVHlwZS9kYXRhLnhtbCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21ldGhvZFByb3BlcnRpZXMvY2hhbmdlUmV0dXJuVHlwZS9kYXRhLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMzA0NWEzCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWV0aG9kUHJvcGVydGllcy9jaGFuZ2VSZXR1cm5UeXBlL2RhdGEueG1sCkBAIC0wLDAgKzEsMTQgQEAKKzx0ZXN0RGF0YT4KKworICA8ZGVsZXRlZF9ieV9tYWtlPgorICAgIDxmaWxlIHBhdGg9ImNsYXNzZXMvQmFzZS5jbGFzcyIgLz4KKyAgICA8ZmlsZSBwYXRoPSJjbGFzc2VzL0NsaWVudC5jbGFzcyIgLz4KKyAgICA8ZmlsZSBwYXRoPSJjbGFzc2VzL0Rlcml2ZWQuY2xhc3MiIC8+CisgIDwvZGVsZXRlZF9ieV9tYWtlPgorCisgIDxyZWNvbXBpbGU+CisgICAgPGZpbGUgcGF0aD0ic291cmNlL0NsaWVudC5qYXZhIiAvPgorICAgIDxmaWxlIHBhdGg9InNvdXJjZS9EZXJpdmVkLmphdmEiIC8+CisgIDwvcmVjb21waWxlPgorCis8L3Rlc3REYXRhPgpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWV0aG9kUHJvcGVydGllcy9jaGFuZ2VSZXR1cm5UeXBlL3NyYy9CYXNlLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZXRob2RQcm9wZXJ0aWVzL2NoYW5nZVJldHVyblR5cGUvc3JjL0Jhc2UuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kM2U3ODZhCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWV0aG9kUHJvcGVydGllcy9jaGFuZ2VSZXR1cm5UeXBlL3NyYy9CYXNlLmphdmEKQEAgLTAsMCArMSw1IEBACitjbGFzcyBCYXNlIHsKKyAgcHVibGljIFN0cmluZyBmb28oKSB7CisgICAgcmV0dXJuICJCYXNlLmZvbygpIjsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21ldGhvZFByb3BlcnRpZXMvY2hhbmdlUmV0dXJuVHlwZS9zcmMvQ2xpZW50LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZXRob2RQcm9wZXJ0aWVzL2NoYW5nZVJldHVyblR5cGUvc3JjL0NsaWVudC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjllZWVmZTcKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZXRob2RQcm9wZXJ0aWVzL2NoYW5nZVJldHVyblR5cGUvc3JjL0NsaWVudC5qYXZhCkBAIC0wLDAgKzEsNSBAQAorY2xhc3MgQ2xpZW50IHsKKyAgcHVibGljIHZvaWQgZm9vKCkgeworICAgIFN0cmluZyBzID0gbmV3IEJhc2UoKS5mb28oKTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21ldGhvZFByb3BlcnRpZXMvY2hhbmdlUmV0dXJuVHlwZS9zcmMvRGVyaXZlZC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWV0aG9kUHJvcGVydGllcy9jaGFuZ2VSZXR1cm5UeXBlL3NyYy9EZXJpdmVkLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTNmOTE5MAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21ldGhvZFByb3BlcnRpZXMvY2hhbmdlUmV0dXJuVHlwZS9zcmMvRGVyaXZlZC5qYXZhCkBAIC0wLDAgKzEsNSBAQAorY2xhc3MgRGVyaXZlZCBleHRlbmRzIEJhc2UgeworICBwdWJsaWMgU3RyaW5nIGZvbygpIHsKKyAgICByZXR1cm4gIkRlcml2ZWQuZm9vKCkiOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWV0aG9kUHJvcGVydGllcy9jaGFuZ2VSZXR1cm5UeXBlMS5sb2cgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZXRob2RQcm9wZXJ0aWVzL2NoYW5nZVJldHVyblR5cGUxLmxvZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZTY4YWNmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWV0aG9kUHJvcGVydGllcy9jaGFuZ2VSZXR1cm5UeXBlMS5sb2cKQEAgLTAsMCArMSwxMiBAQAorQ2xlYW5pbmcgb3V0cHV0IGZpbGVzOgorb3V0L3Byb2R1Y3Rpb24vQ2hhbmdlUmV0dXJuVHlwZTEvQmFzZS5jbGFzcworRW5kIG9mIGZpbGVzCitDb21waWxpbmcgZmlsZXM6CitzcmMvQmFzZS5qYXZhCitFbmQgb2YgZmlsZXMKK0NsZWFuaW5nIG91dHB1dCBmaWxlczoKK291dC9wcm9kdWN0aW9uL0NoYW5nZVJldHVyblR5cGUxL0NsaWVudC5jbGFzcworRW5kIG9mIGZpbGVzCitDb21waWxpbmcgZmlsZXM6CitzcmMvQ2xpZW50LmphdmEKK0VuZCBvZiBmaWxlcwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWV0aG9kUHJvcGVydGllcy9jaGFuZ2VSZXR1cm5UeXBlMS9CYXNlLmphdmEubmV3IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWV0aG9kUHJvcGVydGllcy9jaGFuZ2VSZXR1cm5UeXBlMS9CYXNlLmphdmEubmV3Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMwN2I0YWIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZXRob2RQcm9wZXJ0aWVzL2NoYW5nZVJldHVyblR5cGUxL0Jhc2UuamF2YS5uZXcKQEAgLTAsMCArMSw1IEBACitjbGFzcyBCYXNlIHsKKyAgcHVibGljIHN0YXRpYyBTdHJpbmdbXSBmb28oKSB7CisgICAgcmV0dXJuIG5ldyBTdHJpbmdbXXsiQmFzZS5mb28oKSJ9OworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWV0aG9kUHJvcGVydGllcy9jaGFuZ2VSZXR1cm5UeXBlMS9kYXRhLnhtbCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21ldGhvZFByb3BlcnRpZXMvY2hhbmdlUmV0dXJuVHlwZTEvZGF0YS54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTcyYTFhYQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21ldGhvZFByb3BlcnRpZXMvY2hhbmdlUmV0dXJuVHlwZTEvZGF0YS54bWwKQEAgLTAsMCArMSwxMiBAQAorPHRlc3REYXRhPgorCisgIDxkZWxldGVkX2J5X21ha2U+CisgICAgPGZpbGUgcGF0aD0iY2xhc3Nlcy9CYXNlLmNsYXNzIiAvPgorICAgIDxmaWxlIHBhdGg9ImNsYXNzZXMvQ2xpZW50LmNsYXNzIiAvPgorICA8L2RlbGV0ZWRfYnlfbWFrZT4KKworICA8cmVjb21waWxlPgorICAgIDxmaWxlIHBhdGg9InNvdXJjZS9DbGllbnQuamF2YSIgLz4KKyAgPC9yZWNvbXBpbGU+CisKKzwvdGVzdERhdGE+CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZXRob2RQcm9wZXJ0aWVzL2NoYW5nZVJldHVyblR5cGUxL3NyYy9CYXNlLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZXRob2RQcm9wZXJ0aWVzL2NoYW5nZVJldHVyblR5cGUxL3NyYy9CYXNlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmQ0YmVlOAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21ldGhvZFByb3BlcnRpZXMvY2hhbmdlUmV0dXJuVHlwZTEvc3JjL0Jhc2UuamF2YQpAQCAtMCwwICsxLDUgQEAKK2NsYXNzIEJhc2UgeworICBwdWJsaWMgc3RhdGljIFN0cmluZyBmb28oKSB7CisgICAgcmV0dXJuICJCYXNlLmZvbygpIjsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21ldGhvZFByb3BlcnRpZXMvY2hhbmdlUmV0dXJuVHlwZTEvc3JjL0NsaWVudC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWV0aG9kUHJvcGVydGllcy9jaGFuZ2VSZXR1cm5UeXBlMS9zcmMvQ2xpZW50LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGJhNjM5NAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21ldGhvZFByb3BlcnRpZXMvY2hhbmdlUmV0dXJuVHlwZTEvc3JjL0NsaWVudC5qYXZhCkBAIC0wLDAgKzEsNSBAQAorY2xhc3MgQ2xpZW50IHsKKyAgcHVibGljIHZvaWQgZm9vKCkgeworICAgIFN0cmluZyBzID0gQmFzZS5mb28oKTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21ldGhvZFByb3BlcnRpZXMvY2hhbmdlU2lnbmF0dXJlLmxvZyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21ldGhvZFByb3BlcnRpZXMvY2hhbmdlU2lnbmF0dXJlLmxvZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZjQ1OTU3Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWV0aG9kUHJvcGVydGllcy9jaGFuZ2VTaWduYXR1cmUubG9nCkBAIC0wLDAgKzEsMTIgQEAKK0NsZWFuaW5nIG91dHB1dCBmaWxlczoKK291dC9wcm9kdWN0aW9uL0NoYW5nZVNpZ25hdHVyZS9TZXJ2ZXIuY2xhc3MKK0VuZCBvZiBmaWxlcworQ29tcGlsaW5nIGZpbGVzOgorc3JjL1NlcnZlci5qYXZhCitFbmQgb2YgZmlsZXMKK0NsZWFuaW5nIG91dHB1dCBmaWxlczoKK291dC9wcm9kdWN0aW9uL0NoYW5nZVNpZ25hdHVyZS9DbGllbnQuY2xhc3MKK0VuZCBvZiBmaWxlcworQ29tcGlsaW5nIGZpbGVzOgorc3JjL0NsaWVudC5qYXZhCitFbmQgb2YgZmlsZXMKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21ldGhvZFByb3BlcnRpZXMvY2hhbmdlU2lnbmF0dXJlL1NlcnZlci5qYXZhLm5ldyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21ldGhvZFByb3BlcnRpZXMvY2hhbmdlU2lnbmF0dXJlL1NlcnZlci5qYXZhLm5ldwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNDQ1MWU0Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWV0aG9kUHJvcGVydGllcy9jaGFuZ2VTaWduYXR1cmUvU2VydmVyLmphdmEubmV3CkBAIC0wLDAgKzEsNCBAQAorcHVibGljIGNsYXNzIFNlcnZlciB7CisgIHB1YmxpYyBTZXJ2ZXIobG9uZyBiKSB7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZXRob2RQcm9wZXJ0aWVzL2NoYW5nZVNpZ25hdHVyZS9kYXRhLnhtbCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21ldGhvZFByb3BlcnRpZXMvY2hhbmdlU2lnbmF0dXJlL2RhdGEueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUyMDllMDkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZXRob2RQcm9wZXJ0aWVzL2NoYW5nZVNpZ25hdHVyZS9kYXRhLnhtbApAQCAtMCwwICsxLDEyIEBACis8dGVzdERhdGE+CisKKyAgPGRlbGV0ZWRfYnlfbWFrZT4KKyAgICA8ZmlsZSBwYXRoPSJjbGFzc2VzL1NlcnZlci5jbGFzcyIgLz4KKyAgICA8ZmlsZSBwYXRoPSJjbGFzc2VzL0NsaWVudC5jbGFzcyIgLz4KKyAgPC9kZWxldGVkX2J5X21ha2U+CisKKyAgPHJlY29tcGlsZT4KKyAgICA8ZmlsZSBwYXRoPSJzb3VyY2UvQ2xpZW50LmphdmEiIC8+CisgIDwvcmVjb21waWxlPgorCis8L3Rlc3REYXRhPgpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWV0aG9kUHJvcGVydGllcy9jaGFuZ2VTaWduYXR1cmUvc3JjL0NsaWVudC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWV0aG9kUHJvcGVydGllcy9jaGFuZ2VTaWduYXR1cmUvc3JjL0NsaWVudC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFiYzlkYmEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZXRob2RQcm9wZXJ0aWVzL2NoYW5nZVNpZ25hdHVyZS9zcmMvQ2xpZW50LmphdmEKQEAgLTAsMCArMSw1IEBACitjbGFzcyBDbGllbnQgeworICBwdWJsaWMgdm9pZCBmb28oKSB7CisgICAgbmV3IFNlcnZlcigxMCk7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZXRob2RQcm9wZXJ0aWVzL2NoYW5nZVNpZ25hdHVyZS9zcmMvU2VydmVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZXRob2RQcm9wZXJ0aWVzL2NoYW5nZVNpZ25hdHVyZS9zcmMvU2VydmVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGE3ZmYzOAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21ldGhvZFByb3BlcnRpZXMvY2hhbmdlU2lnbmF0dXJlL3NyYy9TZXJ2ZXIuamF2YQpAQCAtMCwwICsxLDQgQEAKK2NsYXNzIFNlcnZlciB7CisgIHB1YmxpYyBTZXJ2ZXIoaW50IGEpIHsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21ldGhvZFByb3BlcnRpZXMvY2hhbmdlU2lnbmF0dXJlMS5sb2cgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZXRob2RQcm9wZXJ0aWVzL2NoYW5nZVNpZ25hdHVyZTEubG9nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcwMWI1NDkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZXRob2RQcm9wZXJ0aWVzL2NoYW5nZVNpZ25hdHVyZTEubG9nCkBAIC0wLDAgKzEsMTIgQEAKK0NsZWFuaW5nIG91dHB1dCBmaWxlczoKK291dC9wcm9kdWN0aW9uL0NoYW5nZVNpZ25hdHVyZTEvU2VydmVyLmNsYXNzCitFbmQgb2YgZmlsZXMKK0NvbXBpbGluZyBmaWxlczoKK3NyYy9TZXJ2ZXIuamF2YQorRW5kIG9mIGZpbGVzCitDbGVhbmluZyBvdXRwdXQgZmlsZXM6CitvdXQvcHJvZHVjdGlvbi9DaGFuZ2VTaWduYXR1cmUxL0NsaWVudC5jbGFzcworRW5kIG9mIGZpbGVzCitDb21waWxpbmcgZmlsZXM6CitzcmMvQ2xpZW50LmphdmEKK0VuZCBvZiBmaWxlcwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWV0aG9kUHJvcGVydGllcy9jaGFuZ2VTaWduYXR1cmUxL1NlcnZlci5qYXZhLm5ldyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21ldGhvZFByb3BlcnRpZXMvY2hhbmdlU2lnbmF0dXJlMS9TZXJ2ZXIuamF2YS5uZXcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzgxODljNAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21ldGhvZFByb3BlcnRpZXMvY2hhbmdlU2lnbmF0dXJlMS9TZXJ2ZXIuamF2YS5uZXcKQEAgLTAsMCArMSw0IEBACitwdWJsaWMgY2xhc3MgU2VydmVyIHsKKyAgcHVibGljIFNlcnZlcihJZmFjZUltcGwgaSkgeworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWV0aG9kUHJvcGVydGllcy9jaGFuZ2VTaWduYXR1cmUxL2RhdGEueG1sIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWV0aG9kUHJvcGVydGllcy9jaGFuZ2VTaWduYXR1cmUxL2RhdGEueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUyMDllMDkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZXRob2RQcm9wZXJ0aWVzL2NoYW5nZVNpZ25hdHVyZTEvZGF0YS54bWwKQEAgLTAsMCArMSwxMiBAQAorPHRlc3REYXRhPgorCisgIDxkZWxldGVkX2J5X21ha2U+CisgICAgPGZpbGUgcGF0aD0iY2xhc3Nlcy9TZXJ2ZXIuY2xhc3MiIC8+CisgICAgPGZpbGUgcGF0aD0iY2xhc3Nlcy9DbGllbnQuY2xhc3MiIC8+CisgIDwvZGVsZXRlZF9ieV9tYWtlPgorCisgIDxyZWNvbXBpbGU+CisgICAgPGZpbGUgcGF0aD0ic291cmNlL0NsaWVudC5qYXZhIiAvPgorICA8L3JlY29tcGlsZT4KKworPC90ZXN0RGF0YT4KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21ldGhvZFByb3BlcnRpZXMvY2hhbmdlU2lnbmF0dXJlMS9zcmMvQ2xpZW50LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZXRob2RQcm9wZXJ0aWVzL2NoYW5nZVNpZ25hdHVyZTEvc3JjL0NsaWVudC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhmYjFlNWUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZXRob2RQcm9wZXJ0aWVzL2NoYW5nZVNpZ25hdHVyZTEvc3JjL0NsaWVudC5qYXZhCkBAIC0wLDAgKzEsNSBAQAorY2xhc3MgQ2xpZW50IHsKKyAgcHVibGljIHZvaWQgZm9vKCkgeworICAgIG5ldyBTZXJ2ZXIoSWZhY2VJbXBsLmNyZWF0ZSgpKTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21ldGhvZFByb3BlcnRpZXMvY2hhbmdlU2lnbmF0dXJlMS9zcmMvSWZhY2UuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21ldGhvZFByb3BlcnRpZXMvY2hhbmdlU2lnbmF0dXJlMS9zcmMvSWZhY2UuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNTAwMTNjCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWV0aG9kUHJvcGVydGllcy9jaGFuZ2VTaWduYXR1cmUxL3NyYy9JZmFjZS5qYXZhCkBAIC0wLDAgKzEsMyBAQAorcHVibGljIGludGVyZmFjZSBJZmFjZSB7CisgIHZvaWQgZigpOworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21ldGhvZFByb3BlcnRpZXMvY2hhbmdlU2lnbmF0dXJlMS9zcmMvSWZhY2VJbXBsLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZXRob2RQcm9wZXJ0aWVzL2NoYW5nZVNpZ25hdHVyZTEvc3JjL0lmYWNlSW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAxNWEwZTEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9tZXRob2RQcm9wZXJ0aWVzL2NoYW5nZVNpZ25hdHVyZTEvc3JjL0lmYWNlSW1wbC5qYXZhCkBAIC0wLDAgKzEsOCBAQAorcHVibGljIGNsYXNzIElmYWNlSW1wbCBpbXBsZW1lbnRzIElmYWNlIHsKKworICBwdWJsaWMgc3RhdGljIElmYWNlSW1wbCBjcmVhdGUoKSB7CisgICAgcmV0dXJuIG5ldyBJZmFjZUltcGwoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIGYoKSB7fQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21ldGhvZFByb3BlcnRpZXMvY2hhbmdlU2lnbmF0dXJlMS9zcmMvTWFpbi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWV0aG9kUHJvcGVydGllcy9jaGFuZ2VTaWduYXR1cmUxL3NyYy9NYWluLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzZmMTVmMgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21ldGhvZFByb3BlcnRpZXMvY2hhbmdlU2lnbmF0dXJlMS9zcmMvTWFpbi5qYXZhCkBAIC0wLDAgKzEsNSBAQAorcHVibGljIGNsYXNzIE1haW4geworICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisgICAgbmV3IENsaWVudCgpLmZvbygpOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvbWV0aG9kUHJvcGVydGllcy9jaGFuZ2VTaWduYXR1cmUxL3NyYy9TZXJ2ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21ldGhvZFByb3BlcnRpZXMvY2hhbmdlU2lnbmF0dXJlMS9zcmMvU2VydmVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTU4ZDc3MgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL21ldGhvZFByb3BlcnRpZXMvY2hhbmdlU2lnbmF0dXJlMS9zcmMvU2VydmVyLmphdmEKQEAgLTAsMCArMSw0IEBACitjbGFzcyBTZXJ2ZXIgeworICBwdWJsaWMgU2VydmVyKElmYWNlIGkpIHsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL3BhY2thZ2VJbmZvL3BhY2thZ2VJbmZvTm9SZWNvbXBpbGUubG9nIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvcGFja2FnZUluZm8vcGFja2FnZUluZm9Ob1JlY29tcGlsZS5sb2cKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY5ZGUyOQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL3BhY2thZ2VJbmZvL3BhY2thZ2VJbmZvTm9SZWNvbXBpbGUubG9nCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9wYWNrYWdlSW5mby9wYWNrYWdlSW5mb05vUmVjb21waWxlL3NyYy9wMS9wYWNrYWdlLWluZm8uamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL3BhY2thZ2VJbmZvL3BhY2thZ2VJbmZvTm9SZWNvbXBpbGUvc3JjL3AxL3BhY2thZ2UtaW5mby5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjMzEyZjYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9wYWNrYWdlSW5mby9wYWNrYWdlSW5mb05vUmVjb21waWxlL3NyYy9wMS9wYWNrYWdlLWluZm8uamF2YQpAQCAtMCwwICsxIEBACitwYWNrYWdlIHAxOwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL3BhY2thZ2VJbmZvL3BhY2thZ2VJbmZvTm9SZWNvbXBpbGUyLmxvZyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL3BhY2thZ2VJbmZvL3BhY2thZ2VJbmZvTm9SZWNvbXBpbGUyLmxvZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjlkZTI5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvcGFja2FnZUluZm8vcGFja2FnZUluZm9Ob1JlY29tcGlsZTIubG9nCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9wYWNrYWdlSW5mby9wYWNrYWdlSW5mb05vUmVjb21waWxlMi9zcmMvcDEvYW5ub3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL3BhY2thZ2VJbmZvL3BhY2thZ2VJbmZvTm9SZWNvbXBpbGUyL3NyYy9wMS9hbm5vdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc3NGQ0MDEzCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvcGFja2FnZUluZm8vcGFja2FnZUluZm9Ob1JlY29tcGlsZTIvc3JjL3AxL2Fubm90LmphdmEKQEAgLTAsMCArMSw0IEBACitwYWNrYWdlIHAxOworCitwdWJsaWMgQGludGVyZmFjZSBhbm5vdCB7Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9wYWNrYWdlSW5mby9wYWNrYWdlSW5mb05vUmVjb21waWxlMi9zcmMvcDEvcGFja2FnZS1pbmZvLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9wYWNrYWdlSW5mby9wYWNrYWdlSW5mb05vUmVjb21waWxlMi9zcmMvcDEvcGFja2FnZS1pbmZvLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTZkMTcyNQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL3BhY2thZ2VJbmZvL3BhY2thZ2VJbmZvTm9SZWNvbXBpbGUyL3NyYy9wMS9wYWNrYWdlLWluZm8uamF2YQpAQCAtMCwwICsxIEBACitAYW5ub3QgcGFja2FnZSBwMTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9wYWNrYWdlSW5mby9wYWNrYWdlSW5mb1JlY29tcGlsZU9uQ29uc3RhbnRDaGFuZ2UubG9nIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvcGFja2FnZUluZm8vcGFja2FnZUluZm9SZWNvbXBpbGVPbkNvbnN0YW50Q2hhbmdlLmxvZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jY2VmMzNjCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvcGFja2FnZUluZm8vcGFja2FnZUluZm9SZWNvbXBpbGVPbkNvbnN0YW50Q2hhbmdlLmxvZwpAQCAtMCwwICsxLDE2IEBACitDbGVhbmluZyBvdXRwdXQgZmlsZXM6CitvdXQvcHJvZHVjdGlvbi9QYWNrYWdlSW5mb1JlY29tcGlsZU9uQ29uc3RhbnRDaGFuZ2UvYnVnL05hbWVzcGFjZS5jbGFzcworRW5kIG9mIGZpbGVzCitDb21waWxpbmcgZmlsZXM6CitzcmMvYnVnL05hbWVzcGFjZS5qYXZhCitFbmQgb2YgZmlsZXMKK0NsZWFuaW5nIG91dHB1dCBmaWxlczoKK291dC9wcm9kdWN0aW9uL1BhY2thZ2VJbmZvUmVjb21waWxlT25Db25zdGFudENoYW5nZS9idWcvQW5uLmNsYXNzCitvdXQvcHJvZHVjdGlvbi9QYWNrYWdlSW5mb1JlY29tcGlsZU9uQ29uc3RhbnRDaGFuZ2UvYnVnL05hbWVzcGFjZS5jbGFzcworb3V0L3Byb2R1Y3Rpb24vUGFja2FnZUluZm9SZWNvbXBpbGVPbkNvbnN0YW50Q2hhbmdlL2J1Zy9wYWNrYWdlLWluZm8uY2xhc3MKK0VuZCBvZiBmaWxlcworQ29tcGlsaW5nIGZpbGVzOgorc3JjL2J1Zy9Bbm4uamF2YQorc3JjL2J1Zy9OYW1lc3BhY2UuamF2YQorc3JjL2J1Zy9wYWNrYWdlLWluZm8uamF2YQorRW5kIG9mIGZpbGVzCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9wYWNrYWdlSW5mby9wYWNrYWdlSW5mb1JlY29tcGlsZU9uQ29uc3RhbnRDaGFuZ2Uvc3JjL2J1Zy9Bbm4uamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL3BhY2thZ2VJbmZvL3BhY2thZ2VJbmZvUmVjb21waWxlT25Db25zdGFudENoYW5nZS9zcmMvYnVnL0Fubi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJlNGRkMmQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9wYWNrYWdlSW5mby9wYWNrYWdlSW5mb1JlY29tcGlsZU9uQ29uc3RhbnRDaGFuZ2Uvc3JjL2J1Zy9Bbm4uamF2YQpAQCAtMCwwICsxLDEyIEBACitwYWNrYWdlIGJ1ZzsKKworaW1wb3J0IGphdmEubGFuZy5hbm5vdGF0aW9uLlJldGVudGlvbjsKK2ltcG9ydCBqYXZhLmxhbmcuYW5ub3RhdGlvbi5UYXJnZXQ7CisKK2ltcG9ydCBzdGF0aWMgamF2YS5sYW5nLmFubm90YXRpb24uRWxlbWVudFR5cGUuKjsKK2ltcG9ydCBzdGF0aWMgamF2YS5sYW5nLmFubm90YXRpb24uUmV0ZW50aW9uUG9saWN5Lio7CisKK0BSZXRlbnRpb24oUlVOVElNRSkgQFRhcmdldCh7UEFDS0FHRX0pCitwdWJsaWMgQGludGVyZmFjZSBBbm4geworICAgIFN0cmluZyBuYW1lc3BhY2UoKSBkZWZhdWx0ICIiOworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL3BhY2thZ2VJbmZvL3BhY2thZ2VJbmZvUmVjb21waWxlT25Db25zdGFudENoYW5nZS9zcmMvYnVnL05hbWVzcGFjZS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvcGFja2FnZUluZm8vcGFja2FnZUluZm9SZWNvbXBpbGVPbkNvbnN0YW50Q2hhbmdlL3NyYy9idWcvTmFtZXNwYWNlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTdlMzk1OQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL3BhY2thZ2VJbmZvL3BhY2thZ2VJbmZvUmVjb21waWxlT25Db25zdGFudENoYW5nZS9zcmMvYnVnL05hbWVzcGFjZS5qYXZhCkBAIC0wLDAgKzEsNSBAQAorcGFja2FnZSBidWc7CisKK3B1YmxpYyBjbGFzcyBOYW1lc3BhY2UgeworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFVSSSA9ICJ1cmkiOworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL3BhY2thZ2VJbmZvL3BhY2thZ2VJbmZvUmVjb21waWxlT25Db25zdGFudENoYW5nZS9zcmMvYnVnL05hbWVzcGFjZS5qYXZhLm5ldyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL3BhY2thZ2VJbmZvL3BhY2thZ2VJbmZvUmVjb21waWxlT25Db25zdGFudENoYW5nZS9zcmMvYnVnL05hbWVzcGFjZS5qYXZhLm5ldwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MTRlMjA1Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvcGFja2FnZUluZm8vcGFja2FnZUluZm9SZWNvbXBpbGVPbkNvbnN0YW50Q2hhbmdlL3NyYy9idWcvTmFtZXNwYWNlLmphdmEubmV3CkBAIC0wLDAgKzEsNSBAQAorcGFja2FnZSBidWc7CisKK3B1YmxpYyBjbGFzcyBOYW1lc3BhY2UgeworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFVSSSA9ICJ1cmkyIjsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9wYWNrYWdlSW5mby9wYWNrYWdlSW5mb1JlY29tcGlsZU9uQ29uc3RhbnRDaGFuZ2Uvc3JjL2J1Zy9wYWNrYWdlLWluZm8uamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL3BhY2thZ2VJbmZvL3BhY2thZ2VJbmZvUmVjb21waWxlT25Db25zdGFudENoYW5nZS9zcmMvYnVnL3BhY2thZ2UtaW5mby5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE4YjE5ZWYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC9wYWNrYWdlSW5mby9wYWNrYWdlSW5mb1JlY29tcGlsZU9uQ29uc3RhbnRDaGFuZ2Uvc3JjL2J1Zy9wYWNrYWdlLWluZm8uamF2YQpAQCAtMCwwICsxLDIgQEAKK0BidWcuQW5uKG5hbWVzcGFjZSA9IE5hbWVzcGFjZS5VUkkpCitwYWNrYWdlIGJ1ZzsKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL3VpRGVzaWduZXIvc2ltcGxlL2J1aWxkLmxvZyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL3VpRGVzaWduZXIvc2ltcGxlL2J1aWxkLmxvZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZjgzNjI0Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvdWlEZXNpZ25lci9zaW1wbGUvYnVpbGQubG9nCkBAIC0wLDAgKzEsNiBAQAorQ29tcGlsaW5nIGZpbGVzOgorc3JjL3h4eC9NeUZvcm0uamF2YQorRW5kIG9mIGZpbGVzCitDb21waWxpbmcgZm9ybXM6CitzcmMveHh4L015Rm9ybS5mb3JtCitFbmQgb2YgZmlsZXMKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL3VpRGVzaWduZXIvc2ltcGxlL3NyYy94eHgvTXlGb3JtLmZvcm0gYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC91aURlc2lnbmVyL3NpbXBsZS9zcmMveHh4L015Rm9ybS5mb3JtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMwNGQ5NDYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZVNlcnZlci9pbmNyZW1lbnRhbC91aURlc2lnbmVyL3NpbXBsZS9zcmMveHh4L015Rm9ybS5mb3JtCkBAIC0wLDAgKzEsMTIgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8Zm9ybSB4bWxucz0iaHR0cDovL3d3dy5pbnRlbGxpai5jb20vdWlkZXNpZ25lci9mb3JtLyIgdmVyc2lvbj0iMSIgYmluZC10by1jbGFzcz0ieHh4Lk15Rm9ybSI+CisgIDxncmlkIGlkPSIyN2RjNiIgYmluZGluZz0ibXlSb290UGFuZWwiIGxheW91dC1tYW5hZ2VyPSJHcmlkTGF5b3V0TWFuYWdlciIgcm93LWNvdW50PSIxIiBjb2x1bW4tY291bnQ9IjEiIHNhbWUtc2l6ZS1ob3Jpem9udGFsbHk9ImZhbHNlIiBzYW1lLXNpemUtdmVydGljYWxseT0iZmFsc2UiIGhnYXA9Ii0xIiB2Z2FwPSItMSI+CisgICAgPG1hcmdpbiB0b3A9IjAiIGxlZnQ9IjAiIGJvdHRvbT0iMCIgcmlnaHQ9IjAiLz4KKyAgICA8Y29uc3RyYWludHM+CisgICAgICA8eHkgeD0iMjAiIHk9IjIwIiB3aWR0aD0iNTAwIiBoZWlnaHQ9IjQwMCIvPgorICAgIDwvY29uc3RyYWludHM+CisgICAgPHByb3BlcnRpZXMvPgorICAgIDxib3JkZXIgdHlwZT0ibm9uZSIvPgorICAgIDxjaGlsZHJlbi8+CisgIDwvZ3JpZD4KKzwvZm9ybT4KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL3VpRGVzaWduZXIvc2ltcGxlL3NyYy94eHgvTXlGb3JtLmZvcm0ubmV3IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvdWlEZXNpZ25lci9zaW1wbGUvc3JjL3h4eC9NeUZvcm0uZm9ybS5uZXcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTI4NmFhNwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL3VpRGVzaWduZXIvc2ltcGxlL3NyYy94eHgvTXlGb3JtLmZvcm0ubmV3CkBAIC0wLDAgKzEsMTQgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8Zm9ybSB4bWxucz0iaHR0cDovL3d3dy5pbnRlbGxpai5jb20vdWlkZXNpZ25lci9mb3JtLyIgdmVyc2lvbj0iMSIgYmluZC10by1jbGFzcz0ieHh4Lk15Rm9ybSI+CisgIDxncmlkIGlkPSIyN2RjNiIgYmluZGluZz0ibXlSb290UGFuZWwiIGxheW91dC1tYW5hZ2VyPSJHcmlkTGF5b3V0TWFuYWdlciIgcm93LWNvdW50PSIxIiBjb2x1bW4tY291bnQ9IjEiIHNhbWUtc2l6ZS1ob3Jpem9udGFsbHk9ImZhbHNlIiBzYW1lLXNpemUtdmVydGljYWxseT0iZmFsc2UiIGhnYXA9Ii0xIiB2Z2FwPSItMSI+CisgICAgPG1hcmdpbiB0b3A9IjAiIGxlZnQ9IjAiIGJvdHRvbT0iMCIgcmlnaHQ9IjAiLz4KKyAgICA8Y29uc3RyYWludHM+CisgICAgICA8eHkgeD0iMjAiIHk9IjIwIiB3aWR0aD0iNTAwIiBoZWlnaHQ9IjQwMCIvPgorICAgIDwvY29uc3RyYWludHM+CisgICAgPHByb3BlcnRpZXM+CisgICAgICA8ZW5hYmxlZCB2YWx1ZT0iZmFsc2UiLz4KKyAgICA8L3Byb3BlcnRpZXM+CisgICAgPGJvcmRlciB0eXBlPSJub25lIi8+CisgICAgPGNoaWxkcmVuLz4KKyAgPC9ncmlkPgorPC9mb3JtPgpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVTZXJ2ZXIvaW5jcmVtZW50YWwvdWlEZXNpZ25lci9zaW1wbGUvc3JjL3h4eC9NeUZvcm0uamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL3VpRGVzaWduZXIvc2ltcGxlL3NyYy94eHgvTXlGb3JtLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWI3MzAxNAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlU2VydmVyL2luY3JlbWVudGFsL3VpRGVzaWduZXIvc2ltcGxlL3NyYy94eHgvTXlGb3JtLmphdmEKQEAgLTAsMCArMSwyNiBAQAorLyoKKyAqIENvcHlyaWdodCAyMDAwLTIwMTIgSmV0QnJhaW5zIHMuci5vLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KK3BhY2thZ2UgeHh4OworCitpbXBvcnQgamF2YXguc3dpbmcuKjsKKworcHVibGljIGNsYXNzIE15Rm9ybSB7CisgIHByaXZhdGUgSlBhbmVsIG15Um9vdFBhbmVsOworCisgIHB1YmxpYyBKUGFuZWwgZ2V0TXlSb290UGFuZWwoKSB7CisgICAgcmV0dXJuIG15Um9vdFBhbmVsOworICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZXIvbm90TnVsbFZlcmlmaWNhdGlvbi9Db25zdHJ1Y3RvclBhcmFtLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZXIvbm90TnVsbFZlcmlmaWNhdGlvbi9Db25zdHJ1Y3RvclBhcmFtLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDk5YWNiZAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlci9ub3ROdWxsVmVyaWZpY2F0aW9uL0NvbnN0cnVjdG9yUGFyYW0uamF2YQpAQCAtMCwwICsxLDYgQEAKK2ltcG9ydCBvcmcuamV0YnJhaW5zLmFubm90YXRpb25zLk5vdE51bGw7CisKK3B1YmxpYyBjbGFzcyBDb25zdHJ1Y3RvclBhcmFtIHsKKyAgcHVibGljIENvbnN0cnVjdG9yUGFyYW0oQE5vdE51bGwgT2JqZWN0IG8pIHsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlci9ub3ROdWxsVmVyaWZpY2F0aW9uL0VudW1Db25zdHJ1Y3Rvci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVyL25vdE51bGxWZXJpZmljYXRpb24vRW51bUNvbnN0cnVjdG9yLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGM3ODQyMwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlci9ub3ROdWxsVmVyaWZpY2F0aW9uL0VudW1Db25zdHJ1Y3Rvci5qYXZhCkBAIC0wLDAgKzEsMTEgQEAKK2ltcG9ydCBvcmcuamV0YnJhaW5zLmFubm90YXRpb25zLk5vdE51bGw7CisKK3B1YmxpYyBlbnVtIEVudW1Db25zdHJ1Y3RvciB7CisgICAgVmFsdWUoImxhYmVsIik7CisKKyAgICBwcml2YXRlIGZpbmFsIFN0cmluZyBsYWJlbDsKKworICAgIEVudW1Db25zdHJ1Y3RvcihATm90TnVsbCBTdHJpbmcgbGFiZWwpIHsKKyAgICAgICAgdGhpcy5sYWJlbCA9IGxhYmVsOworICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlci9ub3ROdWxsVmVyaWZpY2F0aW9uL0VudW1Db25zdHJ1Y3RvclNlY29uZFBhcmFtLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZXIvbm90TnVsbFZlcmlmaWNhdGlvbi9FbnVtQ29uc3RydWN0b3JTZWNvbmRQYXJhbS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIwODFiNWYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZXIvbm90TnVsbFZlcmlmaWNhdGlvbi9FbnVtQ29uc3RydWN0b3JTZWNvbmRQYXJhbS5qYXZhCkBAIC0wLDAgKzEsMjMgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwMC0yMDEwIEpldEJyYWlucyBzLnIuby4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCitpbXBvcnQgb3JnLmpldGJyYWlucy5hbm5vdGF0aW9ucy5Ob3ROdWxsOworCitwdWJsaWMgZW51bSBFbnVtQ29uc3RydWN0b3JTZWNvbmRQYXJhbSB7CisgICAgVmFsdWUoIjEiLCAiMiIpOworCisgICAgRW51bUNvbnN0cnVjdG9yU2Vjb25kUGFyYW0oU3RyaW5nIHMxLCBATm90TnVsbCBTdHJpbmcgczIpIHsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZXIvbm90TnVsbFZlcmlmaWNhdGlvbi9NdWx0aXBsZVJldHVybnMuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlci9ub3ROdWxsVmVyaWZpY2F0aW9uL011bHRpcGxlUmV0dXJucy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYxNDQ2YTYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZXIvbm90TnVsbFZlcmlmaWNhdGlvbi9NdWx0aXBsZVJldHVybnMuamF2YQpAQCAtMCwwICsxLDkgQEAKK2ltcG9ydCBvcmcuamV0YnJhaW5zLmFubm90YXRpb25zLk5vdE51bGw7CisKK3B1YmxpYyBjbGFzcyBNdWx0aXBsZVJldHVybnMgeworICBATm90TnVsbCBwdWJsaWMgT2JqZWN0IHRlc3QoaW50IGkpIHsKKyAgICBpZiAoaSA9PSAwKSByZXR1cm4gbnVsbDsKKyAgICBpZiAoaSA9PSAxKSByZXR1cm4gbnVsbDsKKyAgICByZXR1cm4gbnVsbDsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlci9ub3ROdWxsVmVyaWZpY2F0aW9uL05vblN0YXRpY0lubmVyQ2xhc3MuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlci9ub3ROdWxsVmVyaWZpY2F0aW9uL05vblN0YXRpY0lubmVyQ2xhc3MuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMzYxM2ZhCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVyL25vdE51bGxWZXJpZmljYXRpb24vTm9uU3RhdGljSW5uZXJDbGFzcy5qYXZhCkBAIC0wLDAgKzEsMTIgQEAKK2ltcG9ydCBvcmcuamV0YnJhaW5zLmFubm90YXRpb25zLk5vdE51bGw7CisKK3B1YmxpYyBjbGFzcyBOb25TdGF0aWNJbm5lckNsYXNzIHsKKyAgcHVibGljIE5vblN0YXRpY0lubmVyQ2xhc3MoKSB7CisgICAgbmV3IElubmVyKCIiKTsKKyAgfQorCisgIHB1YmxpYyBjbGFzcyBJbm5lciB7CisgICAgcHVibGljIElubmVyKEBOb3ROdWxsIFN0cmluZyBzKSB7CisgICAgfQorICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZXIvbm90TnVsbFZlcmlmaWNhdGlvbi9TaW1wbGVQYXJhbS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVyL25vdE51bGxWZXJpZmljYXRpb24vU2ltcGxlUGFyYW0uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMjFmOTZlCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVyL25vdE51bGxWZXJpZmljYXRpb24vU2ltcGxlUGFyYW0uamF2YQpAQCAtMCwwICsxLDYgQEAKK2ltcG9ydCBvcmcuamV0YnJhaW5zLmFubm90YXRpb25zLk5vdE51bGw7CisKK3B1YmxpYyBjbGFzcyBTaW1wbGVQYXJhbSB7CisgIHB1YmxpYyB2b2lkIHRlc3QoQE5vdE51bGwgT2JqZWN0IG8pIHsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlci9ub3ROdWxsVmVyaWZpY2F0aW9uL1NpbXBsZVJldHVybi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVyL25vdE51bGxWZXJpZmljYXRpb24vU2ltcGxlUmV0dXJuLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWE4NWFkOQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlci9ub3ROdWxsVmVyaWZpY2F0aW9uL1NpbXBsZVJldHVybi5qYXZhCkBAIC0wLDAgKzEsNyBAQAoraW1wb3J0IG9yZy5qZXRicmFpbnMuYW5ub3RhdGlvbnMuTm90TnVsbDsKKworcHVibGljIGNsYXNzIFNpbXBsZVJldHVybiB7CisgIEBOb3ROdWxsIHB1YmxpYyBPYmplY3QgdGVzdCgpIHsKKyAgICByZXR1cm4gbnVsbDsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlci9ub3ROdWxsVmVyaWZpY2F0aW9uL1N0YXRpY0lubmVyQ2xhc3MuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb21waWxlci9ub3ROdWxsVmVyaWZpY2F0aW9uL1N0YXRpY0lubmVyQ2xhc3MuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMDgxMDkwCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVyL25vdE51bGxWZXJpZmljYXRpb24vU3RhdGljSW5uZXJDbGFzcy5qYXZhCkBAIC0wLDAgKzEsMTIgQEAKK2ltcG9ydCBvcmcuamV0YnJhaW5zLmFubm90YXRpb25zLk5vdE51bGw7CisKK3B1YmxpYyBjbGFzcyBTdGF0aWNJbm5lckNsYXNzIHsKKyAgcHVibGljIFN0YXRpY0lubmVyQ2xhc3MoKSB7CisgICAgbmV3IElubmVyKCIiKTsKKyAgfQorCisgIHB1YmxpYyBzdGF0aWMgY2xhc3MgSW5uZXIgeworICAgIHB1YmxpYyBJbm5lcihATm90TnVsbCBTdHJpbmcgcykgeworICAgIH0KKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVyL25vdE51bGxWZXJpZmljYXRpb24vYW5ub3RhdGlvbnMuamFyIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvbXBpbGVyL25vdE51bGxWZXJpZmljYXRpb24vYW5ub3RhdGlvbnMuamFyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1ODYwZDgKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29tcGlsZXIvbm90TnVsbFZlcmlmaWNhdGlvbi9hbm5vdGF0aW9ucy5qYXIKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvcmUvbG9hZGluZ1Rlc3QvLmlkZWEvLm5hbWUgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29yZS9sb2FkaW5nVGVzdC8uaWRlYS8ubmFtZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZWNkYTA4Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvcmUvbG9hZGluZ1Rlc3QvLmlkZWEvLm5hbWUKQEAgLTAsMCArMSBAQAorbG9hZGluZ1Rlc3QKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29yZS9sb2FkaW5nVGVzdC8uaWRlYS9jb21waWxlci54bWwgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29yZS9sb2FkaW5nVGVzdC8uaWRlYS9jb21waWxlci54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTFiNDFjNQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb3JlL2xvYWRpbmdUZXN0Ly5pZGVhL2NvbXBpbGVyLnhtbApAQCAtMCwwICsxLDIxIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHByb2plY3QgdmVyc2lvbj0iNCI+CisgIDxjb21wb25lbnQgbmFtZT0iQ29tcGlsZXJDb25maWd1cmF0aW9uIj4KKyAgICA8b3B0aW9uIG5hbWU9IkRFRkFVTFRfQ09NUElMRVIiIHZhbHVlPSJKYXZhYyIgLz4KKyAgICA8cmVzb3VyY2VFeHRlbnNpb25zIC8+CisgICAgPHdpbGRjYXJkUmVzb3VyY2VQYXR0ZXJucz4KKyAgICAgIDxlbnRyeSBuYW1lPSI/Ki5wcm9wZXJ0aWVzIiAvPgorICAgICAgPGVudHJ5IG5hbWU9Ij8qLnhtbCIgLz4KKyAgICAgIDxlbnRyeSBuYW1lPSI/Ki5naWYiIC8+CisgICAgICA8ZW50cnkgbmFtZT0iPyoucG5nIiAvPgorICAgICAgPGVudHJ5IG5hbWU9Ij8qLmpwZWciIC8+CisgICAgICA8ZW50cnkgbmFtZT0iPyouanBnIiAvPgorICAgICAgPGVudHJ5IG5hbWU9Ij8qLmh0bWwiIC8+CisgICAgICA8ZW50cnkgbmFtZT0iPyouZHRkIiAvPgorICAgICAgPGVudHJ5IG5hbWU9Ij8qLnRsZCIgLz4KKyAgICAgIDxlbnRyeSBuYW1lPSI/Ki5mdGwiIC8+CisgICAgPC93aWxkY2FyZFJlc291cmNlUGF0dGVybnM+CisgICAgPGFubm90YXRpb25Qcm9jZXNzaW5nIGVuYWJsZWQ9ImZhbHNlIiB1c2VDbGFzc3BhdGg9InRydWUiIC8+CisgIDwvY29tcG9uZW50PgorPC9wcm9qZWN0PgorCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29yZS9sb2FkaW5nVGVzdC8uaWRlYS9jb3B5cmlnaHQvcHJvZmlsZXNfc2V0dGluZ3MueG1sIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvcmUvbG9hZGluZ1Rlc3QvLmlkZWEvY29weXJpZ2h0L3Byb2ZpbGVzX3NldHRpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNTcyNTcxCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvcmUvbG9hZGluZ1Rlc3QvLmlkZWEvY29weXJpZ2h0L3Byb2ZpbGVzX3NldHRpbmdzLnhtbApAQCAtMCwwICsxLDUgQEAKKzxjb21wb25lbnQgbmFtZT0iQ29weXJpZ2h0TWFuYWdlciI+CisgIDxzZXR0aW5ncyBkZWZhdWx0PSIiPgorICAgIDxtb2R1bGUyY29weXJpZ2h0IC8+CisgIDwvc2V0dGluZ3M+Cis8L2NvbXBvbmVudD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29yZS9sb2FkaW5nVGVzdC8uaWRlYS9lbmNvZGluZ3MueG1sIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvcmUvbG9hZGluZ1Rlc3QvLmlkZWEvZW5jb2RpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMjA2ZDcwCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvcmUvbG9hZGluZ1Rlc3QvLmlkZWEvZW5jb2RpbmdzLnhtbApAQCAtMCwwICsxLDUgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8cHJvamVjdCB2ZXJzaW9uPSI0Ij4KKyAgPGNvbXBvbmVudCBuYW1lPSJFbmNvZGluZyIgdXNlVVRGR3Vlc3Npbmc9InRydWUiIG5hdGl2ZTJBc2NpaUZvclByb3BlcnRpZXNGaWxlcz0iZmFsc2UiIC8+Cis8L3Byb2plY3Q+CisKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb3JlL2xvYWRpbmdUZXN0Ly5pZGVhL2xpYnJhcmllcy9hbm5vdGF0aW9ucy54bWwgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29yZS9sb2FkaW5nVGVzdC8uaWRlYS9saWJyYXJpZXMvYW5ub3RhdGlvbnMueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA5ZGI2MDkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29yZS9sb2FkaW5nVGVzdC8uaWRlYS9saWJyYXJpZXMvYW5ub3RhdGlvbnMueG1sCkBAIC0wLDAgKzEsOSBAQAorPGNvbXBvbmVudCBuYW1lPSJsaWJyYXJ5VGFibGUiPgorICA8bGlicmFyeSBuYW1lPSJhbm5vdGF0aW9ucyI+CisgICAgPENMQVNTRVM+CisgICAgICA8cm9vdCB1cmw9ImphcjovLyRQUk9KRUNUX0RJUiQvYW5ub3RhdGlvbnMuamFyIS8iIC8+CisgICAgPC9DTEFTU0VTPgorICAgIDxKQVZBRE9DIC8+CisgICAgPFNPVVJDRVMgLz4KKyAgPC9saWJyYXJ5PgorPC9jb21wb25lbnQ+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvcmUvbG9hZGluZ1Rlc3QvLmlkZWEvbWlzYy54bWwgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29yZS9sb2FkaW5nVGVzdC8uaWRlYS9taXNjLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mODk4ZTY0Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvcmUvbG9hZGluZ1Rlc3QvLmlkZWEvbWlzYy54bWwKQEAgLTAsMCArMSw3OSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxwcm9qZWN0IHZlcnNpb249IjQiPgorICA8Y29tcG9uZW50IG5hbWU9IkFudENvbmZpZ3VyYXRpb24iPgorICAgIDxkZWZhdWx0QW50IGJ1bmRsZWRBbnQ9InRydWUiIC8+CisgIDwvY29tcG9uZW50PgorICA8Y29tcG9uZW50IG5hbWU9IlByb2plY3RLZXkiPgorICAgIDxvcHRpb24gbmFtZT0ic3RhdGUiIHZhbHVlPSJwcm9qZWN0Oi8vZjgyOTExOGQtZDQ2Ny00YzMxLWIxZTQtZTQ2NGM1MTJiODRiIiAvPgorICA8L2NvbXBvbmVudD4KKyAgPGNvbXBvbmVudCBuYW1lPSJQcm9qZWN0UmVzb3VyY2VzIj4KKyAgICA8ZGVmYXVsdC1odG1sLWRvY3R5cGU+aHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbDwvZGVmYXVsdC1odG1sLWRvY3R5cGU+CisgIDwvY29tcG9uZW50PgorICA8Y29tcG9uZW50IG5hbWU9IlByb2plY3RSb290TWFuYWdlciIgdmVyc2lvbj0iMiIgbGFuZ3VhZ2VMZXZlbD0iSkRLXzFfMyIgYXNzZXJ0LWtleXdvcmQ9ImZhbHNlIiBqZGstMTU9ImZhbHNlIiBwcm9qZWN0LWpkay1uYW1lPSIxLjYiIHByb2plY3QtamRrLXR5cGU9IkphdmFTREsiPgorICAgIDxvdXRwdXQgdXJsPSJmaWxlOi8vJFBST0pFQ1RfRElSJC9vdXQiIC8+CisgIDwvY29tcG9uZW50PgorICA8Y29tcG9uZW50IG5hbWU9IlB5Q29uc29sZU9wdGlvbnNQcm92aWRlciI+CisgICAgPG9wdGlvbiBuYW1lPSJteVB5dGhvbkNvbnNvbGVTdGF0ZSI+CisgICAgICA8UHlDb25zb2xlU2V0dGluZ3MgLz4KKyAgICA8L29wdGlvbj4KKyAgICA8b3B0aW9uIG5hbWU9Im15RGphbmdvQ29uc29sZVN0YXRlIj4KKyAgICAgIDxQeUNvbnNvbGVTZXR0aW5ncyAvPgorICAgIDwvb3B0aW9uPgorICA8L2NvbXBvbmVudD4KKyAgPGNvbXBvbmVudCBuYW1lPSJTdm5Db25maWd1cmF0aW9uIiBtYXhBbm5vdGF0ZVJldmlzaW9ucz0iNTAwIj4KKyAgICA8b3B0aW9uIG5hbWU9IlVTRVIiIHZhbHVlPSIiIC8+CisgICAgPG9wdGlvbiBuYW1lPSJQQVNTV09SRCIgdmFsdWU9IiIgLz4KKyAgICA8b3B0aW9uIG5hbWU9Im15U1NIQ29ubmVjdGlvblRpbWVvdXQiIHZhbHVlPSIzMDAwMCIgLz4KKyAgICA8b3B0aW9uIG5hbWU9Im15U1NIUmVhZFRpbWVvdXQiIHZhbHVlPSIzMDAwMCIgLz4KKyAgICA8b3B0aW9uIG5hbWU9IkxBU1RfTUVSR0VEX1JFVklTSU9OIiAvPgorICAgIDxvcHRpb24gbmFtZT0iTUVSR0VfRFJZX1JVTiIgdmFsdWU9ImZhbHNlIiAvPgorICAgIDxvcHRpb24gbmFtZT0iTUVSR0VfRElGRl9VU0VfQU5DRVNUUlkiIHZhbHVlPSJ0cnVlIiAvPgorICAgIDxvcHRpb24gbmFtZT0iVVBEQVRFX0xPQ0tfT05fREVNQU5EIiB2YWx1ZT0iZmFsc2UiIC8+CisgICAgPG9wdGlvbiBuYW1lPSJJR05PUkVfU1BBQ0VTX0lOX01FUkdFIiB2YWx1ZT0iZmFsc2UiIC8+CisgICAgPG9wdGlvbiBuYW1lPSJERVRFQ1RfTkVTVEVEX0NPUElFUyIgdmFsdWU9InRydWUiIC8+CisgICAgPG9wdGlvbiBuYW1lPSJDSEVDS19ORVNURURfRk9SX1FVSUNLX01FUkdFIiB2YWx1ZT0iZmFsc2UiIC8+CisgICAgPG9wdGlvbiBuYW1lPSJJR05PUkVfU1BBQ0VTX0lOX0FOTk9UQVRFIiB2YWx1ZT0idHJ1ZSIgLz4KKyAgICA8b3B0aW9uIG5hbWU9IlNIT1dfTUVSR0VfU09VUkNFU19JTl9BTk5PVEFURSIgdmFsdWU9InRydWUiIC8+CisgICAgPG9wdGlvbiBuYW1lPSJGT1JDRV9VUERBVEUiIHZhbHVlPSJmYWxzZSIgLz4KKyAgICA8bXlJc1VzZURlZmF1bHRQcm94eT5mYWxzZTwvbXlJc1VzZURlZmF1bHRQcm94eT4KKyAgPC9jb21wb25lbnQ+CisgIDxjb21wb25lbnQgbmFtZT0iVnNzQ29uZmlndXJhdGlvbiI+CisgICAgPG9wdGlvbiBuYW1lPSJDTElFTlRfUEFUSCIgdmFsdWU9IiIgLz4KKyAgICA8b3B0aW9uIG5hbWU9IlNSQ1NBRkVJTklfUEFUSCIgdmFsdWU9IiIgLz4KKyAgICA8b3B0aW9uIG5hbWU9IlVTRVJfTkFNRSIgdmFsdWU9IiIgLz4KKyAgICA8b3B0aW9uIG5hbWU9IlBXRCIgdmFsdWU9IiIgLz4KKyAgICA8Q2hlY2tvdXRPcHRpb25zPgorICAgICAgPG9wdGlvbiBuYW1lPSJDT01NRU5UIiB2YWx1ZT0iIiAvPgorICAgICAgPG9wdGlvbiBuYW1lPSJET19OT1RfR0VUX0xBVEVTVF9WRVJTSU9OIiB2YWx1ZT0iZmFsc2UiIC8+CisgICAgICA8b3B0aW9uIG5hbWU9IlJFUExBQ0VfV1JJVEFCTEUiIHZhbHVlPSJmYWxzZSIgLz4KKyAgICAgIDxvcHRpb24gbmFtZT0iUkVDVVJTSVZFIiB2YWx1ZT0iZmFsc2UiIC8+CisgICAgPC9DaGVja291dE9wdGlvbnM+CisgICAgPENoZWNraW5PcHRpb25zPgorICAgICAgPG9wdGlvbiBuYW1lPSJDT01NRU5UIiB2YWx1ZT0iIiAvPgorICAgICAgPG9wdGlvbiBuYW1lPSJLRUVQX0NIRUNLRURfT1VUIiB2YWx1ZT0iZmFsc2UiIC8+CisgICAgICA8b3B0aW9uIG5hbWU9IlJFQ1VSU0lWRSIgdmFsdWU9ImZhbHNlIiAvPgorICAgIDwvQ2hlY2tpbk9wdGlvbnM+CisgICAgPEFkZE9wdGlvbnM+CisgICAgICA8b3B0aW9uIG5hbWU9IlNUT1JFX09OTFlfTEFURVNUX1ZFUlNJT04iIHZhbHVlPSJmYWxzZSIgLz4KKyAgICAgIDxvcHRpb24gbmFtZT0iQ0hFQ0tfT1VUX0lNTUVESUFURUxZIiB2YWx1ZT0iZmFsc2UiIC8+CisgICAgPC9BZGRPcHRpb25zPgorICAgIDxVbmRvY2hlY2tvdXRPcHRpb25zPgorICAgICAgPG9wdGlvbiBuYW1lPSJNQUtFX1dSSVRBQkxFIiB2YWx1ZT0iZmFsc2UiIC8+CisgICAgICA8b3B0aW9uIG5hbWU9IlJFUExBQ0VfTE9DQUxfQ09QWSIgdmFsdWU9IjIiIC8+CisgICAgICA8b3B0aW9uIG5hbWU9IlJFQ1VSU0lWRSIgdmFsdWU9ImZhbHNlIiAvPgorICAgIDwvVW5kb2NoZWNrb3V0T3B0aW9ucz4KKyAgICA8R2V0T3B0aW9ucz4KKyAgICAgIDxvcHRpb24gbmFtZT0iUkVQTEFDRV9XUklUQUJMRSIgdmFsdWU9IjAiIC8+CisgICAgICA8b3B0aW9uIG5hbWU9Ik1BS0VfV1JJVEFCTEUiIHZhbHVlPSJmYWxzZSIgLz4KKyAgICAgIDxvcHRpb24gbmFtZT0iQU5TV0VSX05FR0FUSVZFTFkiIHZhbHVlPSJmYWxzZSIgLz4KKyAgICAgIDxvcHRpb24gbmFtZT0iQU5TV0VSX1BPU0lUSVZFTFkiIHZhbHVlPSJmYWxzZSIgLz4KKyAgICAgIDxvcHRpb24gbmFtZT0iUkVDVVJTSVZFIiB2YWx1ZT0iZmFsc2UiIC8+CisgICAgICA8b3B0aW9uIG5hbWU9IlZFUlNJT04iIC8+CisgICAgPC9HZXRPcHRpb25zPgorICA8L2NvbXBvbmVudD4KKyAgPGNvbXBvbmVudCBuYW1lPSJhbnRXb3Jrc3BhY2VDb25maWd1cmF0aW9uIj4KKyAgICA8b3B0aW9uIG5hbWU9IklTX0FVVE9TQ1JPTExfVE9fU09VUkNFIiB2YWx1ZT0iZmFsc2UiIC8+CisgICAgPG9wdGlvbiBuYW1lPSJGSUxURVJfVEFSR0VUUyIgdmFsdWU9ImZhbHNlIiAvPgorICA8L2NvbXBvbmVudD4KKzwvcHJvamVjdD4KKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvcmUvbG9hZGluZ1Rlc3QvLmlkZWEvbW9kdWxlcy54bWwgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29yZS9sb2FkaW5nVGVzdC8uaWRlYS9tb2R1bGVzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yY2M3MjRhCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvcmUvbG9hZGluZ1Rlc3QvLmlkZWEvbW9kdWxlcy54bWwKQEAgLTAsMCArMSw5IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHByb2plY3QgdmVyc2lvbj0iNCI+CisgIDxjb21wb25lbnQgbmFtZT0iUHJvamVjdE1vZHVsZU1hbmFnZXIiPgorICAgIDxtb2R1bGVzPgorICAgICAgPG1vZHVsZSBmaWxldXJsPSJmaWxlOi8vJFBST0pFQ1RfRElSJC9sb2FkaW5nVGVzdC5pbWwiIGZpbGVwYXRoPSIkUFJPSkVDVF9ESVIkL2xvYWRpbmdUZXN0LmltbCIgLz4KKyAgICA8L21vZHVsZXM+CisgIDwvY29tcG9uZW50PgorPC9wcm9qZWN0PgorCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29yZS9sb2FkaW5nVGVzdC8uaWRlYS9zY29wZXMvc2NvcGVfc2V0dGluZ3MueG1sIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvcmUvbG9hZGluZ1Rlc3QvLmlkZWEvc2NvcGVzL3Njb3BlX3NldHRpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MjIwMDNiCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvcmUvbG9hZGluZ1Rlc3QvLmlkZWEvc2NvcGVzL3Njb3BlX3NldHRpbmdzLnhtbApAQCAtMCwwICsxLDUgQEAKKzxjb21wb25lbnQgbmFtZT0iRGVwZW5kZW5jeVZhbGlkYXRpb25NYW5hZ2VyIj4KKyAgPHN0YXRlPgorICAgIDxvcHRpb24gbmFtZT0iU0tJUF9JTVBPUlRfU1RBVEVNRU5UUyIgdmFsdWU9ImZhbHNlIiAvPgorICA8L3N0YXRlPgorPC9jb21wb25lbnQ+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvcmUvbG9hZGluZ1Rlc3QvLmlkZWEvdWlEZXNpZ25lci54bWwgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29yZS9sb2FkaW5nVGVzdC8uaWRlYS91aURlc2lnbmVyLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYjAwMDIwCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvcmUvbG9hZGluZ1Rlc3QvLmlkZWEvdWlEZXNpZ25lci54bWwKQEAgLTAsMCArMSwxMjUgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8cHJvamVjdCB2ZXJzaW9uPSI0Ij4KKyAgPGNvbXBvbmVudCBuYW1lPSJQYWxldHRlMiI+CisgICAgPGdyb3VwIG5hbWU9IlN3aW5nIj4KKyAgICAgIDxpdGVtIGNsYXNzPSJjb20uaW50ZWxsaWoudWlEZXNpZ25lci5IU3BhY2VyIiB0b29sdGlwLXRleHQ9Ikhvcml6b250YWwgU3BhY2VyIiBpY29uPSIvY29tL2ludGVsbGlqL3VpRGVzaWduZXIvaWNvbnMvaHNwYWNlci5wbmciIHJlbW92YWJsZT0iZmFsc2UiIGF1dG8tY3JlYXRlLWJpbmRpbmc9ImZhbHNlIiBjYW4tYXR0YWNoLWxhYmVsPSJmYWxzZSI+CisgICAgICAgIDxkZWZhdWx0LWNvbnN0cmFpbnRzIHZzaXplLXBvbGljeT0iMSIgaHNpemUtcG9saWN5PSI2IiBhbmNob3I9IjAiIGZpbGw9IjEiIC8+CisgICAgICA8L2l0ZW0+CisgICAgICA8aXRlbSBjbGFzcz0iY29tLmludGVsbGlqLnVpRGVzaWduZXIuVlNwYWNlciIgdG9vbHRpcC10ZXh0PSJWZXJ0aWNhbCBTcGFjZXIiIGljb249Ii9jb20vaW50ZWxsaWovdWlEZXNpZ25lci9pY29ucy92c3BhY2VyLnBuZyIgcmVtb3ZhYmxlPSJmYWxzZSIgYXV0by1jcmVhdGUtYmluZGluZz0iZmFsc2UiIGNhbi1hdHRhY2gtbGFiZWw9ImZhbHNlIj4KKyAgICAgICAgPGRlZmF1bHQtY29uc3RyYWludHMgdnNpemUtcG9saWN5PSI2IiBoc2l6ZS1wb2xpY3k9IjEiIGFuY2hvcj0iMCIgZmlsbD0iMiIgLz4KKyAgICAgIDwvaXRlbT4KKyAgICAgIDxpdGVtIGNsYXNzPSJqYXZheC5zd2luZy5KUGFuZWwiIGljb249Ii9jb20vaW50ZWxsaWovdWlEZXNpZ25lci9pY29ucy9wYW5lbC5wbmciIHJlbW92YWJsZT0iZmFsc2UiIGF1dG8tY3JlYXRlLWJpbmRpbmc9ImZhbHNlIiBjYW4tYXR0YWNoLWxhYmVsPSJmYWxzZSI+CisgICAgICAgIDxkZWZhdWx0LWNvbnN0cmFpbnRzIHZzaXplLXBvbGljeT0iMyIgaHNpemUtcG9saWN5PSIzIiBhbmNob3I9IjAiIGZpbGw9IjMiIC8+CisgICAgICA8L2l0ZW0+CisgICAgICA8aXRlbSBjbGFzcz0iamF2YXguc3dpbmcuSlNjcm9sbFBhbmUiIGljb249Ii9jb20vaW50ZWxsaWovdWlEZXNpZ25lci9pY29ucy9zY3JvbGxQYW5lLnBuZyIgcmVtb3ZhYmxlPSJmYWxzZSIgYXV0by1jcmVhdGUtYmluZGluZz0iZmFsc2UiIGNhbi1hdHRhY2gtbGFiZWw9InRydWUiPgorICAgICAgICA8ZGVmYXVsdC1jb25zdHJhaW50cyB2c2l6ZS1wb2xpY3k9IjciIGhzaXplLXBvbGljeT0iNyIgYW5jaG9yPSIwIiBmaWxsPSIzIiAvPgorICAgICAgPC9pdGVtPgorICAgICAgPGl0ZW0gY2xhc3M9ImphdmF4LnN3aW5nLkpCdXR0b24iIGljb249Ii9jb20vaW50ZWxsaWovdWlEZXNpZ25lci9pY29ucy9idXR0b24ucG5nIiByZW1vdmFibGU9ImZhbHNlIiBhdXRvLWNyZWF0ZS1iaW5kaW5nPSJ0cnVlIiBjYW4tYXR0YWNoLWxhYmVsPSJmYWxzZSI+CisgICAgICAgIDxkZWZhdWx0LWNvbnN0cmFpbnRzIHZzaXplLXBvbGljeT0iMCIgaHNpemUtcG9saWN5PSIzIiBhbmNob3I9IjAiIGZpbGw9IjEiIC8+CisgICAgICAgIDxpbml0aWFsLXZhbHVlcz4KKyAgICAgICAgICA8cHJvcGVydHkgbmFtZT0idGV4dCIgdmFsdWU9IkJ1dHRvbiIgLz4KKyAgICAgICAgPC9pbml0aWFsLXZhbHVlcz4KKyAgICAgIDwvaXRlbT4KKyAgICAgIDxpdGVtIGNsYXNzPSJqYXZheC5zd2luZy5KUmFkaW9CdXR0b24iIGljb249Ii9jb20vaW50ZWxsaWovdWlEZXNpZ25lci9pY29ucy9yYWRpb0J1dHRvbi5wbmciIHJlbW92YWJsZT0iZmFsc2UiIGF1dG8tY3JlYXRlLWJpbmRpbmc9InRydWUiIGNhbi1hdHRhY2gtbGFiZWw9ImZhbHNlIj4KKyAgICAgICAgPGRlZmF1bHQtY29uc3RyYWludHMgdnNpemUtcG9saWN5PSIwIiBoc2l6ZS1wb2xpY3k9IjMiIGFuY2hvcj0iOCIgZmlsbD0iMCIgLz4KKyAgICAgICAgPGluaXRpYWwtdmFsdWVzPgorICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ0ZXh0IiB2YWx1ZT0iUmFkaW9CdXR0b24iIC8+CisgICAgICAgIDwvaW5pdGlhbC12YWx1ZXM+CisgICAgICA8L2l0ZW0+CisgICAgICA8aXRlbSBjbGFzcz0iamF2YXguc3dpbmcuSkNoZWNrQm94IiBpY29uPSIvY29tL2ludGVsbGlqL3VpRGVzaWduZXIvaWNvbnMvY2hlY2tCb3gucG5nIiByZW1vdmFibGU9ImZhbHNlIiBhdXRvLWNyZWF0ZS1iaW5kaW5nPSJ0cnVlIiBjYW4tYXR0YWNoLWxhYmVsPSJmYWxzZSI+CisgICAgICAgIDxkZWZhdWx0LWNvbnN0cmFpbnRzIHZzaXplLXBvbGljeT0iMCIgaHNpemUtcG9saWN5PSIzIiBhbmNob3I9IjgiIGZpbGw9IjAiIC8+CisgICAgICAgIDxpbml0aWFsLXZhbHVlcz4KKyAgICAgICAgICA8cHJvcGVydHkgbmFtZT0idGV4dCIgdmFsdWU9IkNoZWNrQm94IiAvPgorICAgICAgICA8L2luaXRpYWwtdmFsdWVzPgorICAgICAgPC9pdGVtPgorICAgICAgPGl0ZW0gY2xhc3M9ImphdmF4LnN3aW5nLkpMYWJlbCIgaWNvbj0iL2NvbS9pbnRlbGxpai91aURlc2lnbmVyL2ljb25zL2xhYmVsLnBuZyIgcmVtb3ZhYmxlPSJmYWxzZSIgYXV0by1jcmVhdGUtYmluZGluZz0iZmFsc2UiIGNhbi1hdHRhY2gtbGFiZWw9ImZhbHNlIj4KKyAgICAgICAgPGRlZmF1bHQtY29uc3RyYWludHMgdnNpemUtcG9saWN5PSIwIiBoc2l6ZS1wb2xpY3k9IjAiIGFuY2hvcj0iOCIgZmlsbD0iMCIgLz4KKyAgICAgICAgPGluaXRpYWwtdmFsdWVzPgorICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ0ZXh0IiB2YWx1ZT0iTGFiZWwiIC8+CisgICAgICAgIDwvaW5pdGlhbC12YWx1ZXM+CisgICAgICA8L2l0ZW0+CisgICAgICA8aXRlbSBjbGFzcz0iamF2YXguc3dpbmcuSlRleHRGaWVsZCIgaWNvbj0iL2NvbS9pbnRlbGxpai91aURlc2lnbmVyL2ljb25zL3RleHRGaWVsZC5wbmciIHJlbW92YWJsZT0iZmFsc2UiIGF1dG8tY3JlYXRlLWJpbmRpbmc9InRydWUiIGNhbi1hdHRhY2gtbGFiZWw9InRydWUiPgorICAgICAgICA8ZGVmYXVsdC1jb25zdHJhaW50cyB2c2l6ZS1wb2xpY3k9IjAiIGhzaXplLXBvbGljeT0iNiIgYW5jaG9yPSI4IiBmaWxsPSIxIj4KKyAgICAgICAgICA8cHJlZmVycmVkLXNpemUgd2lkdGg9IjE1MCIgaGVpZ2h0PSItMSIgLz4KKyAgICAgICAgPC9kZWZhdWx0LWNvbnN0cmFpbnRzPgorICAgICAgPC9pdGVtPgorICAgICAgPGl0ZW0gY2xhc3M9ImphdmF4LnN3aW5nLkpQYXNzd29yZEZpZWxkIiBpY29uPSIvY29tL2ludGVsbGlqL3VpRGVzaWduZXIvaWNvbnMvcGFzc3dvcmRGaWVsZC5wbmciIHJlbW92YWJsZT0iZmFsc2UiIGF1dG8tY3JlYXRlLWJpbmRpbmc9InRydWUiIGNhbi1hdHRhY2gtbGFiZWw9InRydWUiPgorICAgICAgICA8ZGVmYXVsdC1jb25zdHJhaW50cyB2c2l6ZS1wb2xpY3k9IjAiIGhzaXplLXBvbGljeT0iNiIgYW5jaG9yPSI4IiBmaWxsPSIxIj4KKyAgICAgICAgICA8cHJlZmVycmVkLXNpemUgd2lkdGg9IjE1MCIgaGVpZ2h0PSItMSIgLz4KKyAgICAgICAgPC9kZWZhdWx0LWNvbnN0cmFpbnRzPgorICAgICAgPC9pdGVtPgorICAgICAgPGl0ZW0gY2xhc3M9ImphdmF4LnN3aW5nLkpGb3JtYXR0ZWRUZXh0RmllbGQiIGljb249Ii9jb20vaW50ZWxsaWovdWlEZXNpZ25lci9pY29ucy9mb3JtYXR0ZWRUZXh0RmllbGQucG5nIiByZW1vdmFibGU9ImZhbHNlIiBhdXRvLWNyZWF0ZS1iaW5kaW5nPSJ0cnVlIiBjYW4tYXR0YWNoLWxhYmVsPSJ0cnVlIj4KKyAgICAgICAgPGRlZmF1bHQtY29uc3RyYWludHMgdnNpemUtcG9saWN5PSIwIiBoc2l6ZS1wb2xpY3k9IjYiIGFuY2hvcj0iOCIgZmlsbD0iMSI+CisgICAgICAgICAgPHByZWZlcnJlZC1zaXplIHdpZHRoPSIxNTAiIGhlaWdodD0iLTEiIC8+CisgICAgICAgIDwvZGVmYXVsdC1jb25zdHJhaW50cz4KKyAgICAgIDwvaXRlbT4KKyAgICAgIDxpdGVtIGNsYXNzPSJqYXZheC5zd2luZy5KVGV4dEFyZWEiIGljb249Ii9jb20vaW50ZWxsaWovdWlEZXNpZ25lci9pY29ucy90ZXh0QXJlYS5wbmciIHJlbW92YWJsZT0iZmFsc2UiIGF1dG8tY3JlYXRlLWJpbmRpbmc9InRydWUiIGNhbi1hdHRhY2gtbGFiZWw9InRydWUiPgorICAgICAgICA8ZGVmYXVsdC1jb25zdHJhaW50cyB2c2l6ZS1wb2xpY3k9IjYiIGhzaXplLXBvbGljeT0iNiIgYW5jaG9yPSIwIiBmaWxsPSIzIj4KKyAgICAgICAgICA8cHJlZmVycmVkLXNpemUgd2lkdGg9IjE1MCIgaGVpZ2h0PSI1MCIgLz4KKyAgICAgICAgPC9kZWZhdWx0LWNvbnN0cmFpbnRzPgorICAgICAgPC9pdGVtPgorICAgICAgPGl0ZW0gY2xhc3M9ImphdmF4LnN3aW5nLkpUZXh0UGFuZSIgaWNvbj0iL2NvbS9pbnRlbGxpai91aURlc2lnbmVyL2ljb25zL3RleHRQYW5lLnBuZyIgcmVtb3ZhYmxlPSJmYWxzZSIgYXV0by1jcmVhdGUtYmluZGluZz0idHJ1ZSIgY2FuLWF0dGFjaC1sYWJlbD0idHJ1ZSI+CisgICAgICAgIDxkZWZhdWx0LWNvbnN0cmFpbnRzIHZzaXplLXBvbGljeT0iNiIgaHNpemUtcG9saWN5PSI2IiBhbmNob3I9IjAiIGZpbGw9IjMiPgorICAgICAgICAgIDxwcmVmZXJyZWQtc2l6ZSB3aWR0aD0iMTUwIiBoZWlnaHQ9IjUwIiAvPgorICAgICAgICA8L2RlZmF1bHQtY29uc3RyYWludHM+CisgICAgICA8L2l0ZW0+CisgICAgICA8aXRlbSBjbGFzcz0iamF2YXguc3dpbmcuSkVkaXRvclBhbmUiIGljb249Ii9jb20vaW50ZWxsaWovdWlEZXNpZ25lci9pY29ucy9lZGl0b3JQYW5lLnBuZyIgcmVtb3ZhYmxlPSJmYWxzZSIgYXV0by1jcmVhdGUtYmluZGluZz0idHJ1ZSIgY2FuLWF0dGFjaC1sYWJlbD0idHJ1ZSI+CisgICAgICAgIDxkZWZhdWx0LWNvbnN0cmFpbnRzIHZzaXplLXBvbGljeT0iNiIgaHNpemUtcG9saWN5PSI2IiBhbmNob3I9IjAiIGZpbGw9IjMiPgorICAgICAgICAgIDxwcmVmZXJyZWQtc2l6ZSB3aWR0aD0iMTUwIiBoZWlnaHQ9IjUwIiAvPgorICAgICAgICA8L2RlZmF1bHQtY29uc3RyYWludHM+CisgICAgICA8L2l0ZW0+CisgICAgICA8aXRlbSBjbGFzcz0iamF2YXguc3dpbmcuSkNvbWJvQm94IiBpY29uPSIvY29tL2ludGVsbGlqL3VpRGVzaWduZXIvaWNvbnMvY29tYm9Cb3gucG5nIiByZW1vdmFibGU9ImZhbHNlIiBhdXRvLWNyZWF0ZS1iaW5kaW5nPSJ0cnVlIiBjYW4tYXR0YWNoLWxhYmVsPSJ0cnVlIj4KKyAgICAgICAgPGRlZmF1bHQtY29uc3RyYWludHMgdnNpemUtcG9saWN5PSIwIiBoc2l6ZS1wb2xpY3k9IjIiIGFuY2hvcj0iOCIgZmlsbD0iMSIgLz4KKyAgICAgIDwvaXRlbT4KKyAgICAgIDxpdGVtIGNsYXNzPSJqYXZheC5zd2luZy5KVGFibGUiIGljb249Ii9jb20vaW50ZWxsaWovdWlEZXNpZ25lci9pY29ucy90YWJsZS5wbmciIHJlbW92YWJsZT0iZmFsc2UiIGF1dG8tY3JlYXRlLWJpbmRpbmc9InRydWUiIGNhbi1hdHRhY2gtbGFiZWw9ImZhbHNlIj4KKyAgICAgICAgPGRlZmF1bHQtY29uc3RyYWludHMgdnNpemUtcG9saWN5PSI2IiBoc2l6ZS1wb2xpY3k9IjYiIGFuY2hvcj0iMCIgZmlsbD0iMyI+CisgICAgICAgICAgPHByZWZlcnJlZC1zaXplIHdpZHRoPSIxNTAiIGhlaWdodD0iNTAiIC8+CisgICAgICAgIDwvZGVmYXVsdC1jb25zdHJhaW50cz4KKyAgICAgIDwvaXRlbT4KKyAgICAgIDxpdGVtIGNsYXNzPSJqYXZheC5zd2luZy5KTGlzdCIgaWNvbj0iL2NvbS9pbnRlbGxpai91aURlc2lnbmVyL2ljb25zL2xpc3QucG5nIiByZW1vdmFibGU9ImZhbHNlIiBhdXRvLWNyZWF0ZS1iaW5kaW5nPSJ0cnVlIiBjYW4tYXR0YWNoLWxhYmVsPSJmYWxzZSI+CisgICAgICAgIDxkZWZhdWx0LWNvbnN0cmFpbnRzIHZzaXplLXBvbGljeT0iNiIgaHNpemUtcG9saWN5PSIyIiBhbmNob3I9IjAiIGZpbGw9IjMiPgorICAgICAgICAgIDxwcmVmZXJyZWQtc2l6ZSB3aWR0aD0iMTUwIiBoZWlnaHQ9IjUwIiAvPgorICAgICAgICA8L2RlZmF1bHQtY29uc3RyYWludHM+CisgICAgICA8L2l0ZW0+CisgICAgICA8aXRlbSBjbGFzcz0iamF2YXguc3dpbmcuSlRyZWUiIGljb249Ii9jb20vaW50ZWxsaWovdWlEZXNpZ25lci9pY29ucy90cmVlLnBuZyIgcmVtb3ZhYmxlPSJmYWxzZSIgYXV0by1jcmVhdGUtYmluZGluZz0idHJ1ZSIgY2FuLWF0dGFjaC1sYWJlbD0iZmFsc2UiPgorICAgICAgICA8ZGVmYXVsdC1jb25zdHJhaW50cyB2c2l6ZS1wb2xpY3k9IjYiIGhzaXplLXBvbGljeT0iNiIgYW5jaG9yPSIwIiBmaWxsPSIzIj4KKyAgICAgICAgICA8cHJlZmVycmVkLXNpemUgd2lkdGg9IjE1MCIgaGVpZ2h0PSI1MCIgLz4KKyAgICAgICAgPC9kZWZhdWx0LWNvbnN0cmFpbnRzPgorICAgICAgPC9pdGVtPgorICAgICAgPGl0ZW0gY2xhc3M9ImphdmF4LnN3aW5nLkpUYWJiZWRQYW5lIiBpY29uPSIvY29tL2ludGVsbGlqL3VpRGVzaWduZXIvaWNvbnMvdGFiYmVkUGFuZS5wbmciIHJlbW92YWJsZT0iZmFsc2UiIGF1dG8tY3JlYXRlLWJpbmRpbmc9InRydWUiIGNhbi1hdHRhY2gtbGFiZWw9ImZhbHNlIj4KKyAgICAgICAgPGRlZmF1bHQtY29uc3RyYWludHMgdnNpemUtcG9saWN5PSIzIiBoc2l6ZS1wb2xpY3k9IjMiIGFuY2hvcj0iMCIgZmlsbD0iMyI+CisgICAgICAgICAgPHByZWZlcnJlZC1zaXplIHdpZHRoPSIyMDAiIGhlaWdodD0iMjAwIiAvPgorICAgICAgICA8L2RlZmF1bHQtY29uc3RyYWludHM+CisgICAgICA8L2l0ZW0+CisgICAgICA8aXRlbSBjbGFzcz0iamF2YXguc3dpbmcuSlNwbGl0UGFuZSIgaWNvbj0iL2NvbS9pbnRlbGxpai91aURlc2lnbmVyL2ljb25zL3NwbGl0UGFuZS5wbmciIHJlbW92YWJsZT0iZmFsc2UiIGF1dG8tY3JlYXRlLWJpbmRpbmc9ImZhbHNlIiBjYW4tYXR0YWNoLWxhYmVsPSJmYWxzZSI+CisgICAgICAgIDxkZWZhdWx0LWNvbnN0cmFpbnRzIHZzaXplLXBvbGljeT0iMyIgaHNpemUtcG9saWN5PSIzIiBhbmNob3I9IjAiIGZpbGw9IjMiPgorICAgICAgICAgIDxwcmVmZXJyZWQtc2l6ZSB3aWR0aD0iMjAwIiBoZWlnaHQ9IjIwMCIgLz4KKyAgICAgICAgPC9kZWZhdWx0LWNvbnN0cmFpbnRzPgorICAgICAgPC9pdGVtPgorICAgICAgPGl0ZW0gY2xhc3M9ImphdmF4LnN3aW5nLkpTcGlubmVyIiBpY29uPSIvY29tL2ludGVsbGlqL3VpRGVzaWduZXIvaWNvbnMvc3Bpbm5lci5wbmciIHJlbW92YWJsZT0iZmFsc2UiIGF1dG8tY3JlYXRlLWJpbmRpbmc9InRydWUiIGNhbi1hdHRhY2gtbGFiZWw9InRydWUiPgorICAgICAgICA8ZGVmYXVsdC1jb25zdHJhaW50cyB2c2l6ZS1wb2xpY3k9IjAiIGhzaXplLXBvbGljeT0iNiIgYW5jaG9yPSI4IiBmaWxsPSIxIiAvPgorICAgICAgPC9pdGVtPgorICAgICAgPGl0ZW0gY2xhc3M9ImphdmF4LnN3aW5nLkpTbGlkZXIiIGljb249Ii9jb20vaW50ZWxsaWovdWlEZXNpZ25lci9pY29ucy9zbGlkZXIucG5nIiByZW1vdmFibGU9ImZhbHNlIiBhdXRvLWNyZWF0ZS1iaW5kaW5nPSJ0cnVlIiBjYW4tYXR0YWNoLWxhYmVsPSJmYWxzZSI+CisgICAgICAgIDxkZWZhdWx0LWNvbnN0cmFpbnRzIHZzaXplLXBvbGljeT0iMCIgaHNpemUtcG9saWN5PSI2IiBhbmNob3I9IjgiIGZpbGw9IjEiIC8+CisgICAgICA8L2l0ZW0+CisgICAgICA8aXRlbSBjbGFzcz0iamF2YXguc3dpbmcuSlNlcGFyYXRvciIgaWNvbj0iL2NvbS9pbnRlbGxpai91aURlc2lnbmVyL2ljb25zL3NlcGFyYXRvci5wbmciIHJlbW92YWJsZT0iZmFsc2UiIGF1dG8tY3JlYXRlLWJpbmRpbmc9ImZhbHNlIiBjYW4tYXR0YWNoLWxhYmVsPSJmYWxzZSI+CisgICAgICAgIDxkZWZhdWx0LWNvbnN0cmFpbnRzIHZzaXplLXBvbGljeT0iNiIgaHNpemUtcG9saWN5PSI2IiBhbmNob3I9IjAiIGZpbGw9IjMiIC8+CisgICAgICA8L2l0ZW0+CisgICAgICA8aXRlbSBjbGFzcz0iamF2YXguc3dpbmcuSlByb2dyZXNzQmFyIiBpY29uPSIvY29tL2ludGVsbGlqL3VpRGVzaWduZXIvaWNvbnMvcHJvZ3Jlc3NiYXIucG5nIiByZW1vdmFibGU9ImZhbHNlIiBhdXRvLWNyZWF0ZS1iaW5kaW5nPSJ0cnVlIiBjYW4tYXR0YWNoLWxhYmVsPSJmYWxzZSI+CisgICAgICAgIDxkZWZhdWx0LWNvbnN0cmFpbnRzIHZzaXplLXBvbGljeT0iMCIgaHNpemUtcG9saWN5PSI2IiBhbmNob3I9IjAiIGZpbGw9IjEiIC8+CisgICAgICA8L2l0ZW0+CisgICAgICA8aXRlbSBjbGFzcz0iamF2YXguc3dpbmcuSlRvb2xCYXIiIGljb249Ii9jb20vaW50ZWxsaWovdWlEZXNpZ25lci9pY29ucy90b29sYmFyLnBuZyIgcmVtb3ZhYmxlPSJmYWxzZSIgYXV0by1jcmVhdGUtYmluZGluZz0iZmFsc2UiIGNhbi1hdHRhY2gtbGFiZWw9ImZhbHNlIj4KKyAgICAgICAgPGRlZmF1bHQtY29uc3RyYWludHMgdnNpemUtcG9saWN5PSIwIiBoc2l6ZS1wb2xpY3k9IjYiIGFuY2hvcj0iMCIgZmlsbD0iMSI+CisgICAgICAgICAgPHByZWZlcnJlZC1zaXplIHdpZHRoPSItMSIgaGVpZ2h0PSIyMCIgLz4KKyAgICAgICAgPC9kZWZhdWx0LWNvbnN0cmFpbnRzPgorICAgICAgPC9pdGVtPgorICAgICAgPGl0ZW0gY2xhc3M9ImphdmF4LnN3aW5nLkpUb29sQmFyJFNlcGFyYXRvciIgaWNvbj0iL2NvbS9pbnRlbGxpai91aURlc2lnbmVyL2ljb25zL3Rvb2xiYXJTZXBhcmF0b3IucG5nIiByZW1vdmFibGU9ImZhbHNlIiBhdXRvLWNyZWF0ZS1iaW5kaW5nPSJmYWxzZSIgY2FuLWF0dGFjaC1sYWJlbD0iZmFsc2UiPgorICAgICAgICA8ZGVmYXVsdC1jb25zdHJhaW50cyB2c2l6ZS1wb2xpY3k9IjAiIGhzaXplLXBvbGljeT0iMCIgYW5jaG9yPSIwIiBmaWxsPSIxIiAvPgorICAgICAgPC9pdGVtPgorICAgICAgPGl0ZW0gY2xhc3M9ImphdmF4LnN3aW5nLkpTY3JvbGxCYXIiIGljb249Ii9jb20vaW50ZWxsaWovdWlEZXNpZ25lci9pY29ucy9zY3JvbGxiYXIucG5nIiByZW1vdmFibGU9ImZhbHNlIiBhdXRvLWNyZWF0ZS1iaW5kaW5nPSJ0cnVlIiBjYW4tYXR0YWNoLWxhYmVsPSJmYWxzZSI+CisgICAgICAgIDxkZWZhdWx0LWNvbnN0cmFpbnRzIHZzaXplLXBvbGljeT0iNiIgaHNpemUtcG9saWN5PSIwIiBhbmNob3I9IjAiIGZpbGw9IjIiIC8+CisgICAgICA8L2l0ZW0+CisgICAgPC9ncm91cD4KKyAgPC9jb21wb25lbnQ+Cis8L3Byb2plY3Q+CisKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9jb3JlL2xvYWRpbmdUZXN0Ly5pZGVhL3Zjcy54bWwgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29yZS9sb2FkaW5nVGVzdC8uaWRlYS92Y3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRlZjZhNmEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29yZS9sb2FkaW5nVGVzdC8uaWRlYS92Y3MueG1sCkBAIC0wLDAgKzEsNyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxwcm9qZWN0IHZlcnNpb249IjQiPgorICA8Y29tcG9uZW50IG5hbWU9IlZjc0RpcmVjdG9yeU1hcHBpbmdzIj4KKyAgICA8bWFwcGluZyBkaXJlY3Rvcnk9IiIgdmNzPSIiIC8+CisgIDwvY29tcG9uZW50PgorPC9wcm9qZWN0PgorCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29yZS9sb2FkaW5nVGVzdC8uaWRlYS93b3Jrc3BhY2UueG1sIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvcmUvbG9hZGluZ1Rlc3QvLmlkZWEvd29ya3NwYWNlLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOWU2N2Y2Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvcmUvbG9hZGluZ1Rlc3QvLmlkZWEvd29ya3NwYWNlLnhtbApAQCAtMCwwICsxLDM2MCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxwcm9qZWN0IHZlcnNpb249IjQiPgorICA8Y29tcG9uZW50IG5hbWU9IkNoYW5nZUxpc3RNYW5hZ2VyIj4KKyAgICA8bGlzdCBkZWZhdWx0PSJ0cnVlIiBpZD0iYmUyM2RhNDktNzcyOS00MDhlLTljM2EtZGUxNTkwNmYyYWEzIiBuYW1lPSJEZWZhdWx0IiBjb21tZW50PSIiIC8+CisgICAgPGlnbm9yZWQgcGF0aD0ibG9hZGluZ1Rlc3QuaXdzIiAvPgorICAgIDxpZ25vcmVkIHBhdGg9Ii5pZGVhL3dvcmtzcGFjZS54bWwiIC8+CisgICAgPG9wdGlvbiBuYW1lPSJUUkFDS0lOR19FTkFCTEVEIiB2YWx1ZT0idHJ1ZSIgLz4KKyAgICA8b3B0aW9uIG5hbWU9IlNIT1dfRElBTE9HIiB2YWx1ZT0iZmFsc2UiIC8+CisgICAgPG9wdGlvbiBuYW1lPSJISUdITElHSFRfQ09ORkxJQ1RTIiB2YWx1ZT0idHJ1ZSIgLz4KKyAgICA8b3B0aW9uIG5hbWU9IkhJR0hMSUdIVF9OT05fQUNUSVZFX0NIQU5HRUxJU1QiIHZhbHVlPSJmYWxzZSIgLz4KKyAgICA8b3B0aW9uIG5hbWU9IkxBU1RfUkVTT0xVVElPTiIgdmFsdWU9IklHTk9SRSIgLz4KKyAgPC9jb21wb25lbnQ+CisgIDxjb21wb25lbnQgbmFtZT0iQ2hhbmdlc1ZpZXdNYW5hZ2VyIiBmbGF0dGVuZWRfdmlldz0idHJ1ZSIgc2hvd19pZ25vcmVkPSJmYWxzZSIgLz4KKyAgPGNvbXBvbmVudCBuYW1lPSJDcmVhdGVQYXRjaENvbW1pdEV4ZWN1dG9yIj4KKyAgICA8b3B0aW9uIG5hbWU9IlBBVENIX1BBVEgiIHZhbHVlPSIiIC8+CisgIDwvY29tcG9uZW50PgorICA8Y29tcG9uZW50IG5hbWU9IkRhZW1vbkNvZGVBbmFseXplciI+CisgICAgPGRpc2FibGVfaGludHMgLz4KKyAgPC9jb21wb25lbnQ+CisgIDxjb21wb25lbnQgbmFtZT0iRGVidWdnZXJNYW5hZ2VyIj4KKyAgICA8YnJlYWtwb2ludF9hbnk+CisgICAgICA8YnJlYWtwb2ludD4KKyAgICAgICAgPG9wdGlvbiBuYW1lPSJOT1RJRllfQ0FVR0hUIiB2YWx1ZT0idHJ1ZSIgLz4KKyAgICAgICAgPG9wdGlvbiBuYW1lPSJOT1RJRllfVU5DQVVHSFQiIHZhbHVlPSJ0cnVlIiAvPgorICAgICAgICA8b3B0aW9uIG5hbWU9IkVOQUJMRUQiIHZhbHVlPSJmYWxzZSIgLz4KKyAgICAgICAgPG9wdGlvbiBuYW1lPSJMT0dfRU5BQkxFRCIgdmFsdWU9ImZhbHNlIiAvPgorICAgICAgICA8b3B0aW9uIG5hbWU9IkxPR19FWFBSRVNTSU9OX0VOQUJMRUQiIHZhbHVlPSJmYWxzZSIgLz4KKyAgICAgICAgPG9wdGlvbiBuYW1lPSJTVVNQRU5EX1BPTElDWSIgdmFsdWU9IlN1c3BlbmRBbGwiIC8+CisgICAgICAgIDxvcHRpb24gbmFtZT0iQ09VTlRfRklMVEVSX0VOQUJMRUQiIHZhbHVlPSJmYWxzZSIgLz4KKyAgICAgICAgPG9wdGlvbiBuYW1lPSJDT1VOVF9GSUxURVIiIHZhbHVlPSIwIiAvPgorICAgICAgICA8b3B0aW9uIG5hbWU9IkNPTkRJVElPTl9FTkFCTEVEIiB2YWx1ZT0iZmFsc2UiIC8+CisgICAgICAgIDxvcHRpb24gbmFtZT0iQ0xBU1NfRklMVEVSU19FTkFCTEVEIiB2YWx1ZT0iZmFsc2UiIC8+CisgICAgICAgIDxvcHRpb24gbmFtZT0iSU5TVEFOQ0VfRklMVEVSU19FTkFCTEVEIiB2YWx1ZT0iZmFsc2UiIC8+CisgICAgICAgIDxvcHRpb24gbmFtZT0iQ09ORElUSU9OIiB2YWx1ZT0iIiAvPgorICAgICAgICA8b3B0aW9uIG5hbWU9IkxPR19NRVNTQUdFIiB2YWx1ZT0iIiAvPgorICAgICAgPC9icmVha3BvaW50PgorICAgICAgPGJyZWFrcG9pbnQ+CisgICAgICAgIDxvcHRpb24gbmFtZT0iTk9USUZZX0NBVUdIVCIgdmFsdWU9InRydWUiIC8+CisgICAgICAgIDxvcHRpb24gbmFtZT0iTk9USUZZX1VOQ0FVR0hUIiB2YWx1ZT0idHJ1ZSIgLz4KKyAgICAgICAgPG9wdGlvbiBuYW1lPSJFTkFCTEVEIiB2YWx1ZT0iZmFsc2UiIC8+CisgICAgICAgIDxvcHRpb24gbmFtZT0iTE9HX0VOQUJMRUQiIHZhbHVlPSJmYWxzZSIgLz4KKyAgICAgICAgPG9wdGlvbiBuYW1lPSJMT0dfRVhQUkVTU0lPTl9FTkFCTEVEIiB2YWx1ZT0iZmFsc2UiIC8+CisgICAgICAgIDxvcHRpb24gbmFtZT0iU1VTUEVORF9QT0xJQ1kiIHZhbHVlPSJTdXNwZW5kQWxsIiAvPgorICAgICAgICA8b3B0aW9uIG5hbWU9IkNPVU5UX0ZJTFRFUl9FTkFCTEVEIiB2YWx1ZT0iZmFsc2UiIC8+CisgICAgICAgIDxvcHRpb24gbmFtZT0iQ09VTlRfRklMVEVSIiB2YWx1ZT0iMCIgLz4KKyAgICAgICAgPG9wdGlvbiBuYW1lPSJDT05ESVRJT05fRU5BQkxFRCIgdmFsdWU9ImZhbHNlIiAvPgorICAgICAgICA8b3B0aW9uIG5hbWU9IkNMQVNTX0ZJTFRFUlNfRU5BQkxFRCIgdmFsdWU9ImZhbHNlIiAvPgorICAgICAgICA8b3B0aW9uIG5hbWU9IklOU1RBTkNFX0ZJTFRFUlNfRU5BQkxFRCIgdmFsdWU9ImZhbHNlIiAvPgorICAgICAgICA8b3B0aW9uIG5hbWU9IkNPTkRJVElPTiIgdmFsdWU9IiIgLz4KKyAgICAgICAgPG9wdGlvbiBuYW1lPSJMT0dfTUVTU0FHRSIgdmFsdWU9IiIgLz4KKyAgICAgIDwvYnJlYWtwb2ludD4KKyAgICA8L2JyZWFrcG9pbnRfYW55PgorICAgIDxicmVha3BvaW50X3J1bGVzIC8+CisgICAgPHVpX3Byb3BlcnRpZXMgLz4KKyAgPC9jb21wb25lbnQ+CisgIDxjb21wb25lbnQgbmFtZT0iRmF2b3JpdGVzTWFuYWdlciI+CisgICAgPGZhdm9yaXRlc19saXN0IG5hbWU9ImxvYWRpbmdUZXN0IiAvPgorICA8L2NvbXBvbmVudD4KKyAgPGNvbXBvbmVudCBuYW1lPSJGaWxlRWRpdG9yTWFuYWdlciI+CisgICAgPGxlYWY+CisgICAgICA8ZmlsZSBsZWFmLWZpbGUtbmFtZT0ibG9hZGluZ1Rlc3QuaW1sIiBwaW5uZWQ9ImZhbHNlIiBjdXJyZW50PSJ0cnVlIiBjdXJyZW50LWluLXRhYj0idHJ1ZSI+CisgICAgICAgIDxlbnRyeSBmaWxlPSJmaWxlOi8vJFBST0pFQ1RfRElSJC9sb2FkaW5nVGVzdC5pbWwiPgorICAgICAgICAgIDxwcm92aWRlciBzZWxlY3RlZD0idHJ1ZSIgZWRpdG9yLXR5cGUtaWQ9InRleHQtZWRpdG9yIj4KKyAgICAgICAgICAgIDxzdGF0ZSBsaW5lPSIxMCIgY29sdW1uPSIwIiBzZWxlY3Rpb24tc3RhcnQ9IjM2OCIgc2VsZWN0aW9uLWVuZD0iMzY4IiB2ZXJ0aWNhbC1zY3JvbGwtcHJvcG9ydGlvbj0iMC4yMjcyNzI3MyI+CisgICAgICAgICAgICAgIDxmb2xkaW5nIC8+CisgICAgICAgICAgICA8L3N0YXRlPgorICAgICAgICAgIDwvcHJvdmlkZXI+CisgICAgICAgIDwvZW50cnk+CisgICAgICA8L2ZpbGU+CisgICAgPC9sZWFmPgorICA8L2NvbXBvbmVudD4KKyAgPGNvbXBvbmVudCBuYW1lPSJGaW5kTWFuYWdlciI+CisgICAgPEZpbmRVc2FnZXNNYW5hZ2VyPgorICAgICAgPHNldHRpbmcgbmFtZT0iT1BFTl9ORVdfVEFCIiB2YWx1ZT0iZmFsc2UiIC8+CisgICAgPC9GaW5kVXNhZ2VzTWFuYWdlcj4KKyAgPC9jb21wb25lbnQ+CisgIDxjb21wb25lbnQgbmFtZT0iR2l0LlNldHRpbmdzIj4KKyAgICA8b3B0aW9uIG5hbWU9IkxJTkVfU0VQQVJBVE9SU19DT05WRVJTSU9OIiB2YWx1ZT0iQVNLIiAvPgorICA8L2NvbXBvbmVudD4KKyAgPGNvbXBvbmVudCBuYW1lPSJJZGVEb2N1bWVudEhpc3RvcnkiPgorICAgIDxvcHRpb24gbmFtZT0iY2hhbmdlZEZpbGVzIj4KKyAgICAgIDxsaXN0PgorICAgICAgICA8b3B0aW9uIHZhbHVlPSIkUFJPSkVDVF9ESVIkL2xvYWRpbmdUZXN0LmltbCIgLz4KKyAgICAgIDwvbGlzdD4KKyAgICA8L29wdGlvbj4KKyAgPC9jb21wb25lbnQ+CisgIDxjb21wb25lbnQgbmFtZT0iUGhwV29ya3NwYWNlUHJvamVjdENvbmZpZ3VyYXRpb24iIGJhY2t3YXJkX2NvbXBhdGliaWxpdHlfcGVyZm9ybWVkPSJ0cnVlIiAvPgorICA8Y29tcG9uZW50IG5hbWU9IlByb2plY3RGcmFtZUJvdW5kcyI+CisgICAgPG9wdGlvbiBuYW1lPSJ4IiB2YWx1ZT0iMTk3IiAvPgorICAgIDxvcHRpb24gbmFtZT0ieSIgdmFsdWU9IjEzMyIgLz4KKyAgICA8b3B0aW9uIG5hbWU9IndpZHRoIiB2YWx1ZT0iMTYzOSIgLz4KKyAgICA8b3B0aW9uIG5hbWU9ImhlaWdodCIgdmFsdWU9IjkzMyIgLz4KKyAgPC9jb21wb25lbnQ+CisgIDxjb21wb25lbnQgbmFtZT0iUHJvamVjdExldmVsVmNzTWFuYWdlciIgc2V0dGluZ3NFZGl0ZWRNYW51YWxseT0iZmFsc2UiPgorICAgIDxPcHRpb25zU2V0dGluZyB2YWx1ZT0idHJ1ZSIgaWQ9IkFkZCIgLz4KKyAgICA8T3B0aW9uc1NldHRpbmcgdmFsdWU9InRydWUiIGlkPSJSZW1vdmUiIC8+CisgICAgPE9wdGlvbnNTZXR0aW5nIHZhbHVlPSJ0cnVlIiBpZD0iQ2hlY2tvdXQiIC8+CisgICAgPE9wdGlvbnNTZXR0aW5nIHZhbHVlPSJ0cnVlIiBpZD0iVXBkYXRlIiAvPgorICAgIDxPcHRpb25zU2V0dGluZyB2YWx1ZT0idHJ1ZSIgaWQ9IlN0YXR1cyIgLz4KKyAgICA8T3B0aW9uc1NldHRpbmcgdmFsdWU9InRydWUiIGlkPSJFZGl0IiAvPgorICAgIDxPcHRpb25zU2V0dGluZyB2YWx1ZT0idHJ1ZSIgaWQ9IlVuZG8gQ2hlY2sgT3V0IiAvPgorICAgIDxPcHRpb25zU2V0dGluZyB2YWx1ZT0idHJ1ZSIgaWQ9IkdldCBMYXRlc3QgVmVyc2lvbiIgLz4KKyAgICA8Q29uZmlybWF0aW9uc1NldHRpbmcgdmFsdWU9IjAiIGlkPSJBZGQiIC8+CisgICAgPENvbmZpcm1hdGlvbnNTZXR0aW5nIHZhbHVlPSIwIiBpZD0iUmVtb3ZlIiAvPgorICA8L2NvbXBvbmVudD4KKyAgPGNvbXBvbmVudCBuYW1lPSJQcm9qZWN0UmVsb2FkU3RhdGUiPgorICAgIDxvcHRpb24gbmFtZT0iU1RBVEUiIHZhbHVlPSIwIiAvPgorICA8L2NvbXBvbmVudD4KKyAgPGNvbXBvbmVudCBuYW1lPSJQcm9qZWN0VmlldyI+CisgICAgPG5hdmlnYXRvciBjdXJyZW50Vmlldz0iUHJvamVjdFBhbmUiIHByb3BvcnRpb25zPSIiIHZlcnNpb249IjEiIHNwbGl0dGVyUHJvcG9ydGlvbj0iMC41Ij4KKyAgICAgIDxmbGF0dGVuUGFja2FnZXMgLz4KKyAgICAgIDxzaG93TWVtYmVycyAvPgorICAgICAgPHNob3dNb2R1bGVzIC8+CisgICAgICA8c2hvd0xpYnJhcnlDb250ZW50cyAvPgorICAgICAgPGhpZGVFbXB0eVBhY2thZ2VzIC8+CisgICAgICA8YWJicmV2aWF0ZVBhY2thZ2VOYW1lcyAvPgorICAgICAgPGF1dG9zY3JvbGxUb1NvdXJjZSAvPgorICAgICAgPGF1dG9zY3JvbGxGcm9tU291cmNlIC8+CisgICAgICA8c29ydEJ5VHlwZSAvPgorICAgIDwvbmF2aWdhdG9yPgorICAgIDxwYW5lcz4KKyAgICAgIDxwYW5lIGlkPSJQYWNrYWdlc1BhbmUiIC8+CisgICAgICA8cGFuZSBpZD0iU2NvcGUiIC8+CisgICAgICA8cGFuZSBpZD0iUHJvamVjdFBhbmUiPgorICAgICAgICA8c3ViUGFuZT4KKyAgICAgICAgICA8UEFUSD4KKyAgICAgICAgICAgIDxQQVRIX0VMRU1FTlQ+CisgICAgICAgICAgICAgIDxvcHRpb24gbmFtZT0ibXlJdGVtSWQiIHZhbHVlPSJsb2FkaW5nVGVzdCIgLz4KKyAgICAgICAgICAgICAgPG9wdGlvbiBuYW1lPSJteUl0ZW1UeXBlIiB2YWx1ZT0iY29tLmludGVsbGlqLmlkZS5wcm9qZWN0Vmlldy5pbXBsLm5vZGVzLlByb2plY3RWaWV3UHJvamVjdE5vZGUiIC8+CisgICAgICAgICAgICA8L1BBVEhfRUxFTUVOVD4KKyAgICAgICAgICA8L1BBVEg+CisgICAgICAgICAgPFBBVEg+CisgICAgICAgICAgICA8UEFUSF9FTEVNRU5UPgorICAgICAgICAgICAgICA8b3B0aW9uIG5hbWU9Im15SXRlbUlkIiB2YWx1ZT0ibG9hZGluZ1Rlc3QiIC8+CisgICAgICAgICAgICAgIDxvcHRpb24gbmFtZT0ibXlJdGVtVHlwZSIgdmFsdWU9ImNvbS5pbnRlbGxpai5pZGUucHJvamVjdFZpZXcuaW1wbC5ub2Rlcy5Qcm9qZWN0Vmlld1Byb2plY3ROb2RlIiAvPgorICAgICAgICAgICAgPC9QQVRIX0VMRU1FTlQ+CisgICAgICAgICAgICA8UEFUSF9FTEVNRU5UPgorICAgICAgICAgICAgICA8b3B0aW9uIG5hbWU9Im15SXRlbUlkIiB2YWx1ZT0ibG9hZGluZ1Rlc3QiIC8+CisgICAgICAgICAgICAgIDxvcHRpb24gbmFtZT0ibXlJdGVtVHlwZSIgdmFsdWU9ImNvbS5pbnRlbGxpai5pZGUucHJvamVjdFZpZXcuaW1wbC5ub2Rlcy5Qc2lEaXJlY3RvcnlOb2RlIiAvPgorICAgICAgICAgICAgPC9QQVRIX0VMRU1FTlQ+CisgICAgICAgICAgPC9QQVRIPgorICAgICAgICA8L3N1YlBhbmU+CisgICAgICA8L3BhbmU+CisgICAgPC9wYW5lcz4KKyAgPC9jb21wb25lbnQ+CisgIDxjb21wb25lbnQgbmFtZT0iUHJvcGVydGllc0NvbXBvbmVudCI+CisgICAgPHByb3BlcnR5IG5hbWU9IkdvVG9GaWxlLmluY2x1ZGVKYXZhRmlsZXMiIHZhbHVlPSJmYWxzZSIgLz4KKyAgICA8cHJvcGVydHkgbmFtZT0icHJvamVjdC5zdHJ1Y3R1cmUubGFzdC5lZGl0ZWQiIHZhbHVlPSJNb2R1bGVzIiAvPgorICAgIDxwcm9wZXJ0eSBuYW1lPSJwcm9qZWN0LnN0cnVjdHVyZS5wcm9wb3J0aW9uIiB2YWx1ZT0iMC4wIiAvPgorICAgIDxwcm9wZXJ0eSBuYW1lPSJvcHRpb25zLnNwbGl0dGVyLm1haW4ucHJvcG9ydGlvbnMiIHZhbHVlPSIwLjMiIC8+CisgICAgPHByb3BlcnR5IG5hbWU9Im9wdGlvbnMubGFzdFNlbGVjdGVkIiB2YWx1ZT0icHJlZmVyZW5jZXMucGx1Z2luTWFuYWdlciIgLz4KKyAgICA8cHJvcGVydHkgbmFtZT0iTWVtYmVyQ2hvb3Nlci5zb3J0ZWQiIHZhbHVlPSJmYWxzZSIgLz4KKyAgICA8cHJvcGVydHkgbmFtZT0ibGFzdF9vcGVuZWRfZmlsZV9wYXRoIiB2YWx1ZT0iJFBST0pFQ1RfRElSJCIgLz4KKyAgICA8cHJvcGVydHkgbmFtZT0icHJvamVjdC5zdHJ1Y3R1cmUuc2lkZS5wcm9wb3J0aW9uIiB2YWx1ZT0iMC4yIiAvPgorICAgIDxwcm9wZXJ0eSBuYW1lPSJNZW1iZXJDaG9vc2VyLmNvcHlKYXZhZG9jIiB2YWx1ZT0iZmFsc2UiIC8+CisgICAgPHByb3BlcnR5IG5hbWU9IkdvVG9DbGFzcy50b1NhdmVJbmNsdWRlTGlicmFyaWVzIiB2YWx1ZT0iZmFsc2UiIC8+CisgICAgPHByb3BlcnR5IG5hbWU9IldlYlNlcnZlclRvb2xXaW5kb3dGYWN0b3J5U3RhdGUiIHZhbHVlPSJmYWxzZSIgLz4KKyAgICA8cHJvcGVydHkgbmFtZT0iTWVtYmVyQ2hvb3Nlci5zaG93Q2xhc3NlcyIgdmFsdWU9InRydWUiIC8+CisgICAgPHByb3BlcnR5IG5hbWU9IkdvVG9DbGFzcy5pbmNsdWRlTGlicmFyaWVzIiB2YWx1ZT0iZmFsc2UiIC8+CisgICAgPHByb3BlcnR5IG5hbWU9Im9wdGlvbnMuc2VhcmNoVmlzaWJsZSIgdmFsdWU9InRydWUiIC8+CisgICAgPHByb3BlcnR5IG5hbWU9Im9wdGlvbnMuc3BsaXR0ZXIuZGV0YWlscy5wcm9wb3J0aW9ucyIgdmFsdWU9IjAuMiIgLz4KKyAgPC9jb21wb25lbnQ+CisgIDxjb21wb25lbnQgbmFtZT0iUnVuTWFuYWdlciI+CisgICAgPGxpc3Qgc2l6ZT0iMCIgLz4KKyAgICA8Y29uZmlndXJhdGlvbiBuYW1lPSImbHQ7dGVtcGxhdGUmZ3Q7IiB0eXBlPSJXZWJBcHAiIGRlZmF1bHQ9InRydWUiIHNlbGVjdGVkPSJmYWxzZSI+CisgICAgICA8SG9zdD5sb2NhbGhvc3Q8L0hvc3Q+CisgICAgICA8UG9ydD41MDUwPC9Qb3J0PgorICAgIDwvY29uZmlndXJhdGlvbj4KKyAgPC9jb21wb25lbnQ+CisgIDxjb21wb25lbnQgbmFtZT0iU2hlbHZlQ2hhbmdlc01hbmFnZXIiIHNob3dfcmVjeWNsZWQ9ImZhbHNlIiAvPgorICA8Y29tcG9uZW50IG5hbWU9IlRhc2tNYW5hZ2VyIj4KKyAgICA8dGFzayBhY3RpdmU9InRydWUiIGlkPSJEZWZhdWx0IiBzdW1tYXJ5PSJEZWZhdWx0IHRhc2siPgorICAgICAgPGNoYW5nZWxpc3QgaWQ9ImJlMjNkYTQ5LTc3MjktNDA4ZS05YzNhLWRlMTU5MDZmMmFhMyIgbmFtZT0iRGVmYXVsdCIgY29tbWVudD0iIiAvPgorICAgICAgPGNyZWF0ZWQ+MTMzNzM1OTMwNjY2MjwvY3JlYXRlZD4KKyAgICAgIDx1cGRhdGVkPjEzMzczNTkzMDY2NjI8L3VwZGF0ZWQ+CisgICAgPC90YXNrPgorICAgIDxzZXJ2ZXJzIC8+CisgIDwvY29tcG9uZW50PgorICA8Y29tcG9uZW50IG5hbWU9IlRvb2xXaW5kb3dNYW5hZ2VyIj4KKyAgICA8ZnJhbWUgeD0iMTk3IiB5PSIxMzMiIHdpZHRoPSIxNjM5IiBoZWlnaHQ9IjkzMyIgZXh0ZW5kZWQtc3RhdGU9IjAiIC8+CisgICAgPGVkaXRvciBhY3RpdmU9ImZhbHNlIiAvPgorICAgIDxsYXlvdXQ+CisgICAgICA8d2luZG93X2luZm8gaWQ9IkRhdGEgU291cmNlcyIgYWN0aXZlPSJmYWxzZSIgYW5jaG9yPSJyaWdodCIgYXV0b19oaWRlPSJmYWxzZSIgaW50ZXJuYWxfdHlwZT0iRE9DS0VEIiB0eXBlPSJET0NLRUQiIHZpc2libGU9ImZhbHNlIiB3ZWlnaHQ9IjAuMzMiIHNpZGVXZWlnaHQ9IjAuNSIgb3JkZXI9IjMiIHNpZGVfdG9vbD0iZmFsc2UiIGNvbnRlbnRfdWk9InRhYnMiIC8+CisgICAgICA8d2luZG93X2luZm8gaWQ9IkNoYW5nZXMiIGFjdGl2ZT0iZmFsc2UiIGFuY2hvcj0iYm90dG9tIiBhdXRvX2hpZGU9ImZhbHNlIiBpbnRlcm5hbF90eXBlPSJET0NLRUQiIHR5cGU9IkRPQ0tFRCIgdmlzaWJsZT0iZmFsc2UiIHdlaWdodD0iMC4zMyIgc2lkZVdlaWdodD0iMC41IiBvcmRlcj0iNyIgc2lkZV90b29sPSJmYWxzZSIgY29udGVudF91aT0idGFicyIgLz4KKyAgICAgIDx3aW5kb3dfaW5mbyBpZD0iSmV0R3JhZGxlIiBhY3RpdmU9ImZhbHNlIiBhbmNob3I9InJpZ2h0IiBhdXRvX2hpZGU9ImZhbHNlIiBpbnRlcm5hbF90eXBlPSJET0NLRUQiIHR5cGU9IkRPQ0tFRCIgdmlzaWJsZT0iZmFsc2UiIHdlaWdodD0iMC4zMyIgc2lkZVdlaWdodD0iMC41IiBvcmRlcj0iMyIgc2lkZV90b29sPSJmYWxzZSIgY29udGVudF91aT0idGFicyIgLz4KKyAgICAgIDx3aW5kb3dfaW5mbyBpZD0iUGFsZXR0ZSIgYWN0aXZlPSJmYWxzZSIgYW5jaG9yPSJyaWdodCIgYXV0b19oaWRlPSJmYWxzZSIgaW50ZXJuYWxfdHlwZT0iRE9DS0VEIiB0eXBlPSJET0NLRUQiIHZpc2libGU9ImZhbHNlIiB3ZWlnaHQ9IjAuMzMiIHNpZGVXZWlnaHQ9IjAuNSIgb3JkZXI9IjMiIHNpZGVfdG9vbD0iZmFsc2UiIGNvbnRlbnRfdWk9InRhYnMiIC8+CisgICAgICA8d2luZG93X2luZm8gaWQ9IkFudCBCdWlsZCIgYWN0aXZlPSJmYWxzZSIgYW5jaG9yPSJyaWdodCIgYXV0b19oaWRlPSJmYWxzZSIgaW50ZXJuYWxfdHlwZT0iRE9DS0VEIiB0eXBlPSJET0NLRUQiIHZpc2libGU9ImZhbHNlIiB3ZWlnaHQ9IjAuMjUiIHNpZGVXZWlnaHQ9IjAuNSIgb3JkZXI9IjEiIHNpZGVfdG9vbD0iZmFsc2UiIGNvbnRlbnRfdWk9InRhYnMiIC8+CisgICAgICA8d2luZG93X2luZm8gaWQ9IkRlYnVnIiBhY3RpdmU9ImZhbHNlIiBhbmNob3I9ImJvdHRvbSIgYXV0b19oaWRlPSJmYWxzZSIgaW50ZXJuYWxfdHlwZT0iRE9DS0VEIiB0eXBlPSJET0NLRUQiIHZpc2libGU9ImZhbHNlIiB3ZWlnaHQ9IjAuNCIgc2lkZVdlaWdodD0iMC41IiBvcmRlcj0iMyIgc2lkZV90b29sPSJmYWxzZSIgY29udGVudF91aT0idGFicyIgLz4KKyAgICAgIDx3aW5kb3dfaW5mbyBpZD0iRXZlbnQgTG9nIiBhY3RpdmU9ImZhbHNlIiBhbmNob3I9ImJvdHRvbSIgYXV0b19oaWRlPSJmYWxzZSIgaW50ZXJuYWxfdHlwZT0iRE9DS0VEIiB0eXBlPSJET0NLRUQiIHZpc2libGU9ImZhbHNlIiB3ZWlnaHQ9IjAuMzMiIHNpZGVXZWlnaHQ9IjAuNSIgb3JkZXI9IjciIHNpZGVfdG9vbD0idHJ1ZSIgY29udGVudF91aT0idGFicyIgLz4KKyAgICAgIDx3aW5kb3dfaW5mbyBpZD0iRmF2b3JpdGVzIiBhY3RpdmU9ImZhbHNlIiBhbmNob3I9ImxlZnQiIGF1dG9faGlkZT0iZmFsc2UiIGludGVybmFsX3R5cGU9IkRPQ0tFRCIgdHlwZT0iRE9DS0VEIiB2aXNpYmxlPSJmYWxzZSIgd2VpZ2h0PSIwLjMzIiBzaWRlV2VpZ2h0PSIwLjUiIG9yZGVyPSIyIiBzaWRlX3Rvb2w9InRydWUiIGNvbnRlbnRfdWk9InRhYnMiIC8+CisgICAgICA8d2luZG93X2luZm8gaWQ9IlZlcnNpb24gQ29udHJvbCIgYWN0aXZlPSJmYWxzZSIgYW5jaG9yPSJib3R0b20iIGF1dG9faGlkZT0iZmFsc2UiIGludGVybmFsX3R5cGU9IkRPQ0tFRCIgdHlwZT0iRE9DS0VEIiB2aXNpYmxlPSJmYWxzZSIgd2VpZ2h0PSIwLjMzIiBzaWRlV2VpZ2h0PSIwLjUiIG9yZGVyPSI3IiBzaWRlX3Rvb2w9ImZhbHNlIiBjb250ZW50X3VpPSJ0YWJzIiAvPgorICAgICAgPHdpbmRvd19pbmZvIGlkPSJUT0RPIiBhY3RpdmU9ImZhbHNlIiBhbmNob3I9ImJvdHRvbSIgYXV0b19oaWRlPSJmYWxzZSIgaW50ZXJuYWxfdHlwZT0iRE9DS0VEIiB0eXBlPSJET0NLRUQiIHZpc2libGU9ImZhbHNlIiB3ZWlnaHQ9IjAuMzMiIHNpZGVXZWlnaHQ9IjAuNSIgb3JkZXI9IjYiIHNpZGVfdG9vbD0iZmFsc2UiIGNvbnRlbnRfdWk9InRhYnMiIC8+CisgICAgICA8d2luZG93X2luZm8gaWQ9IlN0cnVjdHVyZSIgYWN0aXZlPSJmYWxzZSIgYW5jaG9yPSJsZWZ0IiBhdXRvX2hpZGU9ImZhbHNlIiBpbnRlcm5hbF90eXBlPSJET0NLRUQiIHR5cGU9IkRPQ0tFRCIgdmlzaWJsZT0iZmFsc2UiIHdlaWdodD0iMC4yNSIgc2lkZVdlaWdodD0iMC41IiBvcmRlcj0iMSIgc2lkZV90b29sPSJ0cnVlIiBjb250ZW50X3VpPSJ0YWJzIiAvPgorICAgICAgPHdpbmRvd19pbmZvIGlkPSJNYXZlbiBQcm9qZWN0cyIgYWN0aXZlPSJmYWxzZSIgYW5jaG9yPSJyaWdodCIgYXV0b19oaWRlPSJmYWxzZSIgaW50ZXJuYWxfdHlwZT0iRE9DS0VEIiB0eXBlPSJET0NLRUQiIHZpc2libGU9ImZhbHNlIiB3ZWlnaHQ9IjAuMzMiIHNpZGVXZWlnaHQ9IjAuNSIgb3JkZXI9IjMiIHNpZGVfdG9vbD0iZmFsc2UiIGNvbnRlbnRfdWk9InRhYnMiIC8+CisgICAgICA8d2luZG93X2luZm8gaWQ9IkNvbW1hbmRlciIgYWN0aXZlPSJmYWxzZSIgYW5jaG9yPSJyaWdodCIgYXV0b19oaWRlPSJmYWxzZSIgaW50ZXJuYWxfdHlwZT0iRE9DS0VEIiB0eXBlPSJET0NLRUQiIHZpc2libGU9ImZhbHNlIiB3ZWlnaHQ9IjAuNCIgc2lkZVdlaWdodD0iMC41IiBvcmRlcj0iMCIgc2lkZV90b29sPSJmYWxzZSIgY29udGVudF91aT0idGFicyIgLz4KKyAgICAgIDx3aW5kb3dfaW5mbyBpZD0iQXBwbGljYXRpb24gU2VydmVycyIgYWN0aXZlPSJmYWxzZSIgYW5jaG9yPSJib3R0b20iIGF1dG9faGlkZT0iZmFsc2UiIGludGVybmFsX3R5cGU9IkRPQ0tFRCIgdHlwZT0iRE9DS0VEIiB2aXNpYmxlPSJmYWxzZSIgd2VpZ2h0PSIwLjMzIiBzaWRlV2VpZ2h0PSIwLjUiIG9yZGVyPSI3IiBzaWRlX3Rvb2w9ImZhbHNlIiBjb250ZW50X3VpPSJ0YWJzIiAvPgorICAgICAgPHdpbmRvd19pbmZvIGlkPSJQcm9qZWN0IiBhY3RpdmU9ImZhbHNlIiBhbmNob3I9ImxlZnQiIGF1dG9faGlkZT0iZmFsc2UiIGludGVybmFsX3R5cGU9IkRPQ0tFRCIgdHlwZT0iRE9DS0VEIiB2aXNpYmxlPSJ0cnVlIiB3ZWlnaHQ9IjAuMjQ5ODQxNDciIHNpZGVXZWlnaHQ9IjAuNSIgb3JkZXI9IjAiIHNpZGVfdG9vbD0iZmFsc2UiIGNvbnRlbnRfdWk9ImNvbWJvIiAvPgorICAgICAgPHdpbmRvd19pbmZvIGlkPSJSdW4iIGFjdGl2ZT0iZmFsc2UiIGFuY2hvcj0iYm90dG9tIiBhdXRvX2hpZGU9ImZhbHNlIiBpbnRlcm5hbF90eXBlPSJET0NLRUQiIHR5cGU9IkRPQ0tFRCIgdmlzaWJsZT0iZmFsc2UiIHdlaWdodD0iMC4zMyIgc2lkZVdlaWdodD0iMC41IiBvcmRlcj0iMiIgc2lkZV90b29sPSJmYWxzZSIgY29udGVudF91aT0idGFicyIgLz4KKyAgICAgIDx3aW5kb3dfaW5mbyBpZD0iSnNUZXN0RHJpdmVyIFNlcnZlciIgYWN0aXZlPSJmYWxzZSIgYW5jaG9yPSJib3R0b20iIGF1dG9faGlkZT0iZmFsc2UiIGludGVybmFsX3R5cGU9IkRPQ0tFRCIgdHlwZT0iRE9DS0VEIiB2aXNpYmxlPSJmYWxzZSIgd2VpZ2h0PSIwLjMzIiBzaWRlV2VpZ2h0PSIwLjUiIG9yZGVyPSI3IiBzaWRlX3Rvb2w9ImZhbHNlIiBjb250ZW50X3VpPSJ0YWJzIiAvPgorICAgICAgPHdpbmRvd19pbmZvIGlkPSJDdnMiIGFjdGl2ZT0iZmFsc2UiIGFuY2hvcj0iYm90dG9tIiBhdXRvX2hpZGU9ImZhbHNlIiBpbnRlcm5hbF90eXBlPSJET0NLRUQiIHR5cGU9IkRPQ0tFRCIgdmlzaWJsZT0iZmFsc2UiIHdlaWdodD0iMC4yNSIgc2lkZVdlaWdodD0iMC41IiBvcmRlcj0iNCIgc2lkZV90b29sPSJmYWxzZSIgY29udGVudF91aT0idGFicyIgLz4KKyAgICAgIDx3aW5kb3dfaW5mbyBpZD0iTWVzc2FnZSIgYWN0aXZlPSJmYWxzZSIgYW5jaG9yPSJib3R0b20iIGF1dG9faGlkZT0iZmFsc2UiIGludGVybmFsX3R5cGU9IkRPQ0tFRCIgdHlwZT0iRE9DS0VEIiB2aXNpYmxlPSJmYWxzZSIgd2VpZ2h0PSIwLjMzIiBzaWRlV2VpZ2h0PSIwLjUiIG9yZGVyPSIwIiBzaWRlX3Rvb2w9ImZhbHNlIiBjb250ZW50X3VpPSJ0YWJzIiAvPgorICAgICAgPHdpbmRvd19pbmZvIGlkPSJGaW5kIiBhY3RpdmU9ImZhbHNlIiBhbmNob3I9ImJvdHRvbSIgYXV0b19oaWRlPSJmYWxzZSIgaW50ZXJuYWxfdHlwZT0iRE9DS0VEIiB0eXBlPSJET0NLRUQiIHZpc2libGU9ImZhbHNlIiB3ZWlnaHQ9IjAuMzMiIHNpZGVXZWlnaHQ9IjAuNSIgb3JkZXI9IjEiIHNpZGVfdG9vbD0iZmFsc2UiIGNvbnRlbnRfdWk9InRhYnMiIC8+CisgICAgICA8d2luZG93X2luZm8gaWQ9IkhpZXJhcmNoeSIgYWN0aXZlPSJmYWxzZSIgYW5jaG9yPSJyaWdodCIgYXV0b19oaWRlPSJmYWxzZSIgaW50ZXJuYWxfdHlwZT0iRE9DS0VEIiB0eXBlPSJET0NLRUQiIHZpc2libGU9ImZhbHNlIiB3ZWlnaHQ9IjAuMjUiIHNpZGVXZWlnaHQ9IjAuNSIgb3JkZXI9IjIiIHNpZGVfdG9vbD0iZmFsc2UiIGNvbnRlbnRfdWk9ImNvbWJvIiAvPgorICAgICAgPHdpbmRvd19pbmZvIGlkPSJJbnNwZWN0aW9uIiBhY3RpdmU9ImZhbHNlIiBhbmNob3I9ImJvdHRvbSIgYXV0b19oaWRlPSJmYWxzZSIgaW50ZXJuYWxfdHlwZT0iRE9DS0VEIiB0eXBlPSJET0NLRUQiIHZpc2libGU9ImZhbHNlIiB3ZWlnaHQ9IjAuNCIgc2lkZVdlaWdodD0iMC41IiBvcmRlcj0iNSIgc2lkZV90b29sPSJmYWxzZSIgY29udGVudF91aT0idGFicyIgLz4KKyAgICA8L2xheW91dD4KKyAgPC9jb21wb25lbnQ+CisgIDxjb21wb25lbnQgbmFtZT0iVmNzQ29udGVudEFubm90YXRpb25TZXR0aW5ncyI+CisgICAgPG9wdGlvbiBuYW1lPSJteUxpbWl0IiB2YWx1ZT0iMjY3ODQwMDAwMCIgLz4KKyAgPC9jb21wb25lbnQ+CisgIDxjb21wb25lbnQgbmFtZT0iVmNzTWFuYWdlckNvbmZpZ3VyYXRpb24iPgorICAgIDxvcHRpb24gbmFtZT0iT0ZGRVJfTU9WRV9UT19BTk9USEVSX0NIQU5HRUxJU1RfT05fUEFSVElBTF9DT01NSVQiIHZhbHVlPSJ0cnVlIiAvPgorICAgIDxvcHRpb24gbmFtZT0iQ0hFQ0tfQ09ERV9TTUVMTFNfQkVGT1JFX1BST0pFQ1RfQ09NTUlUIiB2YWx1ZT0idHJ1ZSIgLz4KKyAgICA8b3B0aW9uIG5hbWU9IkNIRUNLX05FV19UT0RPIiB2YWx1ZT0idHJ1ZSIgLz4KKyAgICA8b3B0aW9uIG5hbWU9Im15VG9kb1BhbmVsU2V0dGluZ3MiPgorICAgICAgPHZhbHVlPgorICAgICAgICA8YXJlLXBhY2thZ2VzLXNob3duIHZhbHVlPSJmYWxzZSIgLz4KKyAgICAgICAgPGFyZS1tb2R1bGVzLXNob3duIHZhbHVlPSJmYWxzZSIgLz4KKyAgICAgICAgPGZsYXR0ZW4tcGFja2FnZXMgdmFsdWU9ImZhbHNlIiAvPgorICAgICAgICA8aXMtYXV0b3Njcm9sbC10by1zb3VyY2UgdmFsdWU9ImZhbHNlIiAvPgorICAgICAgPC92YWx1ZT4KKyAgICA8L29wdGlvbj4KKyAgICA8b3B0aW9uIG5hbWU9IlBFUkZPUk1fVVBEQVRFX0lOX0JBQ0tHUk9VTkQiIHZhbHVlPSJ0cnVlIiAvPgorICAgIDxvcHRpb24gbmFtZT0iUEVSRk9STV9DT01NSVRfSU5fQkFDS0dST1VORCIgdmFsdWU9InRydWUiIC8+CisgICAgPG9wdGlvbiBuYW1lPSJQRVJGT1JNX0VESVRfSU5fQkFDS0dST1VORCIgdmFsdWU9InRydWUiIC8+CisgICAgPG9wdGlvbiBuYW1lPSJQRVJGT1JNX0NIRUNLT1VUX0lOX0JBQ0tHUk9VTkQiIHZhbHVlPSJ0cnVlIiAvPgorICAgIDxvcHRpb24gbmFtZT0iUEVSRk9STV9BRERfUkVNT1ZFX0lOX0JBQ0tHUk9VTkQiIHZhbHVlPSJ0cnVlIiAvPgorICAgIDxvcHRpb24gbmFtZT0iUEVSRk9STV9ST0xMQkFDS19JTl9CQUNLR1JPVU5EIiB2YWx1ZT0iZmFsc2UiIC8+CisgICAgPG9wdGlvbiBuYW1lPSJDSEVDS19MT0NBTExZX0NIQU5HRURfQ09ORkxJQ1RTX0lOX0JBQ0tHUk9VTkQiIHZhbHVlPSJmYWxzZSIgLz4KKyAgICA8b3B0aW9uIG5hbWU9IkVOQUJMRV9CQUNLR1JPVU5EX1BST0NFU1NFUyIgdmFsdWU9ImZhbHNlIiAvPgorICAgIDxvcHRpb24gbmFtZT0iQ0hBTkdFRF9PTl9TRVJWRVJfSU5URVJWQUwiIHZhbHVlPSI2MCIgLz4KKyAgICA8b3B0aW9uIG5hbWU9IlNIT1dfT05MWV9DSEFOR0VEX0lOX1NFTEVDVElPTl9ESUZGIiB2YWx1ZT0idHJ1ZSIgLz4KKyAgICA8b3B0aW9uIG5hbWU9IkNIRUNLX0NPTU1JVF9NRVNTQUdFX1NQRUxMSU5HIiB2YWx1ZT0idHJ1ZSIgLz4KKyAgICA8b3B0aW9uIG5hbWU9IkRFRkFVTFRfUEFUQ0hfRVhURU5TSU9OIiB2YWx1ZT0icGF0Y2giIC8+CisgICAgPG9wdGlvbiBuYW1lPSJTSE9SVF9ESUZGX0hPUklTT05UQUxMWSIgdmFsdWU9InRydWUiIC8+CisgICAgPG9wdGlvbiBuYW1lPSJTSE9SVF9ESUZGX0VYVFJBX0xJTkVTIiB2YWx1ZT0iMiIgLz4KKyAgICA8b3B0aW9uIG5hbWU9IlNPRlRfV1JBUFNfSU5fU0hPUlRfRElGRiIgdmFsdWU9InRydWUiIC8+CisgICAgPG9wdGlvbiBuYW1lPSJJTkNMVURFX1RFWFRfSU5UT19QQVRDSCIgdmFsdWU9ImZhbHNlIiAvPgorICAgIDxvcHRpb24gbmFtZT0iSU5DTFVERV9URVhUX0lOVE9fU0hFTEYiIHZhbHVlPSJmYWxzZSIgLz4KKyAgICA8b3B0aW9uIG5hbWU9IkNSRUFURV9QQVRDSF9FWFBBTkRfREVUQUlMU19ERUZBVUxUIiB2YWx1ZT0idHJ1ZSIgLz4KKyAgICA8b3B0aW9uIG5hbWU9IlNIT1dfRklMRV9ISVNUT1JZX0RFVEFJTFMiIHZhbHVlPSJ0cnVlIiAvPgorICAgIDxvcHRpb24gbmFtZT0iU0hPV19WQ1NfRVJST1JfTk9USUZJQ0FUSU9OUyIgdmFsdWU9InRydWUiIC8+CisgICAgPG9wdGlvbiBuYW1lPSJDSEFOR0VfREVUQUlMU19PTiIgdmFsdWU9ImZhbHNlIiAvPgorICAgIDxvcHRpb24gbmFtZT0iRk9SQ0VfTk9OX0VNUFRZX0NPTU1FTlQiIHZhbHVlPSJmYWxzZSIgLz4KKyAgICA8b3B0aW9uIG5hbWU9IkNMRUFSX0lOSVRJQUxfQ09NTUlUX01FU1NBR0UiIHZhbHVlPSJmYWxzZSIgLz4KKyAgICA8b3B0aW9uIG5hbWU9IkxBU1RfQ09NTUlUX01FU1NBR0UiIC8+CisgICAgPG9wdGlvbiBuYW1lPSJNQUtFX05FV19DSEFOR0VMSVNUX0FDVElWRSIgdmFsdWU9ImZhbHNlIiAvPgorICAgIDxvcHRpb24gbmFtZT0iT1BUSU1JWkVfSU1QT1JUU19CRUZPUkVfUFJPSkVDVF9DT01NSVQiIHZhbHVlPSJmYWxzZSIgLz4KKyAgICA8b3B0aW9uIG5hbWU9IkNIRUNLX0ZJTEVTX1VQX1RPX0RBVEVfQkVGT1JFX0NPTU1JVCIgdmFsdWU9ImZhbHNlIiAvPgorICAgIDxvcHRpb24gbmFtZT0iUkVGT1JNQVRfQkVGT1JFX1BST0pFQ1RfQ09NTUlUIiB2YWx1ZT0iZmFsc2UiIC8+CisgICAgPG9wdGlvbiBuYW1lPSJSRUZPUk1BVF9CRUZPUkVfRklMRV9DT01NSVQiIHZhbHVlPSJmYWxzZSIgLz4KKyAgICA8b3B0aW9uIG5hbWU9IkZJTEVfSElTVE9SWV9ESUFMT0dfQ09NTUVOVFNfU1BMSVRURVJfUFJPUE9SVElPTiIgdmFsdWU9IjAuOCIgLz4KKyAgICA8b3B0aW9uIG5hbWU9IkZJTEVfSElTVE9SWV9ESUFMT0dfU1BMSVRURVJfUFJPUE9SVElPTiIgdmFsdWU9IjAuNSIgLz4KKyAgICA8b3B0aW9uIG5hbWU9IkFDVElWRV9WQ1NfTkFNRSIgLz4KKyAgICA8b3B0aW9uIG5hbWU9IlVQREFURV9HUk9VUF9CWV9QQUNLQUdFUyIgdmFsdWU9ImZhbHNlIiAvPgorICAgIDxvcHRpb24gbmFtZT0iVVBEQVRFX0dST1VQX0JZX0NIQU5HRUxJU1QiIHZhbHVlPSJmYWxzZSIgLz4KKyAgICA8b3B0aW9uIG5hbWU9IlNIT1dfRklMRV9ISVNUT1JZX0FTX1RSRUUiIHZhbHVlPSJmYWxzZSIgLz4KKyAgICA8b3B0aW9uIG5hbWU9IkZJTEVfSElTVE9SWV9TUExJVFRFUl9QUk9QT1JUSU9OIiB2YWx1ZT0iMC42IiAvPgorICA8L2NvbXBvbmVudD4KKyAgPGNvbXBvbmVudCBuYW1lPSJYRGVidWdnZXJNYW5hZ2VyIj4KKyAgICA8YnJlYWtwb2ludC1tYW5hZ2VyIC8+CisgIDwvY29tcG9uZW50PgorICA8Y29tcG9uZW50IG5hbWU9ImVkaXRvckhpc3RvcnlNYW5hZ2VyIj4KKyAgICA8ZW50cnkgZmlsZT0iZmlsZTovLyRQUk9KRUNUX0RJUiQvbG9hZGluZ1Rlc3QuaW1sIj4KKyAgICAgIDxwcm92aWRlciBzZWxlY3RlZD0idHJ1ZSIgZWRpdG9yLXR5cGUtaWQ9InRleHQtZWRpdG9yIj4KKyAgICAgICAgPHN0YXRlIGxpbmU9IjEwIiBjb2x1bW49IjAiIHNlbGVjdGlvbi1zdGFydD0iMzY4IiBzZWxlY3Rpb24tZW5kPSIzNjgiIHZlcnRpY2FsLXNjcm9sbC1wcm9wb3J0aW9uPSIwLjIyNzI3MjczIj4KKyAgICAgICAgICA8Zm9sZGluZyAvPgorICAgICAgICA8L3N0YXRlPgorICAgICAgPC9wcm92aWRlcj4KKyAgICA8L2VudHJ5PgorICA8L2NvbXBvbmVudD4KKyAgPGNvbXBvbmVudCBuYW1lPSJtYXN0ZXJEZXRhaWxzIj4KKyAgICA8c3RhdGVzPgorICAgICAgPHN0YXRlIGtleT0iQXJ0aWZhY3RzU3RydWN0dXJlQ29uZmlndXJhYmxlLlVJIj4KKyAgICAgICAgPHNldHRpbmdzPgorICAgICAgICAgIDxhcnRpZmFjdC1lZGl0b3IgLz4KKyAgICAgICAgICA8c3BsaXR0ZXItcHJvcG9ydGlvbnM+CisgICAgICAgICAgICA8b3B0aW9uIG5hbWU9InByb3BvcnRpb25zIj4KKyAgICAgICAgICAgICAgPGxpc3Q+CisgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iMC4yIiAvPgorICAgICAgICAgICAgICA8L2xpc3Q+CisgICAgICAgICAgICA8L29wdGlvbj4KKyAgICAgICAgICA8L3NwbGl0dGVyLXByb3BvcnRpb25zPgorICAgICAgICA8L3NldHRpbmdzPgorICAgICAgPC9zdGF0ZT4KKyAgICAgIDxzdGF0ZSBrZXk9IkZhY2V0U3RydWN0dXJlQ29uZmlndXJhYmxlLlVJIj4KKyAgICAgICAgPHNldHRpbmdzPgorICAgICAgICAgIDxsYXN0LWVkaXRlZD5ObyBmYWNldHMgYXJlIGNvbmZpZ3VyZWQ8L2xhc3QtZWRpdGVkPgorICAgICAgICAgIDxzcGxpdHRlci1wcm9wb3J0aW9ucz4KKyAgICAgICAgICAgIDxvcHRpb24gbmFtZT0icHJvcG9ydGlvbnMiPgorICAgICAgICAgICAgICA8bGlzdD4KKyAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSIwLjIiIC8+CisgICAgICAgICAgICAgIDwvbGlzdD4KKyAgICAgICAgICAgIDwvb3B0aW9uPgorICAgICAgICAgIDwvc3BsaXR0ZXItcHJvcG9ydGlvbnM+CisgICAgICAgIDwvc2V0dGluZ3M+CisgICAgICA8L3N0YXRlPgorICAgICAgPHN0YXRlIGtleT0iR2xvYmFsTGlicmFyaWVzQ29uZmlndXJhYmxlLlVJIj4KKyAgICAgICAgPHNldHRpbmdzPgorICAgICAgICAgIDxsYXN0LWVkaXRlZD5hY3RzLWFzLXRhZ2dhYmxlLW9uICh2Mi4wLjYsIHJ1YnktMS44LjctcDMzNCkgW2dlbV08L2xhc3QtZWRpdGVkPgorICAgICAgICAgIDxzcGxpdHRlci1wcm9wb3J0aW9ucz4KKyAgICAgICAgICAgIDxvcHRpb24gbmFtZT0icHJvcG9ydGlvbnMiPgorICAgICAgICAgICAgICA8bGlzdD4KKyAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSIwLjIiIC8+CisgICAgICAgICAgICAgIDwvbGlzdD4KKyAgICAgICAgICAgIDwvb3B0aW9uPgorICAgICAgICAgIDwvc3BsaXR0ZXItcHJvcG9ydGlvbnM+CisgICAgICAgIDwvc2V0dGluZ3M+CisgICAgICA8L3N0YXRlPgorICAgICAgPHN0YXRlIGtleT0iSmRrTGlzdENvbmZpZ3VyYWJsZS5VSSI+CisgICAgICAgIDxzZXR0aW5ncz4KKyAgICAgICAgICA8bGFzdC1lZGl0ZWQ+MS42PC9sYXN0LWVkaXRlZD4KKyAgICAgICAgICA8c3BsaXR0ZXItcHJvcG9ydGlvbnM+CisgICAgICAgICAgICA8b3B0aW9uIG5hbWU9InByb3BvcnRpb25zIj4KKyAgICAgICAgICAgICAgPGxpc3Q+CisgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iMC4yIiAvPgorICAgICAgICAgICAgICA8L2xpc3Q+CisgICAgICAgICAgICA8L29wdGlvbj4KKyAgICAgICAgICA8L3NwbGl0dGVyLXByb3BvcnRpb25zPgorICAgICAgICA8L3NldHRpbmdzPgorICAgICAgPC9zdGF0ZT4KKyAgICAgIDxzdGF0ZSBrZXk9Ik1vZHVsZVN0cnVjdHVyZUNvbmZpZ3VyYWJsZS5VSSI+CisgICAgICAgIDxzZXR0aW5ncz4KKyAgICAgICAgICA8bGFzdC1lZGl0ZWQ+bG9hZGluZ1Rlc3Q8L2xhc3QtZWRpdGVkPgorICAgICAgICAgIDxzcGxpdHRlci1wcm9wb3J0aW9ucz4KKyAgICAgICAgICAgIDxvcHRpb24gbmFtZT0icHJvcG9ydGlvbnMiPgorICAgICAgICAgICAgICA8bGlzdD4KKyAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSIwLjIiIC8+CisgICAgICAgICAgICAgIDwvbGlzdD4KKyAgICAgICAgICAgIDwvb3B0aW9uPgorICAgICAgICAgIDwvc3BsaXR0ZXItcHJvcG9ydGlvbnM+CisgICAgICAgIDwvc2V0dGluZ3M+CisgICAgICA8L3N0YXRlPgorICAgICAgPHN0YXRlIGtleT0iUHJvamVjdEpES3MuVUkiPgorICAgICAgICA8c2V0dGluZ3M+CisgICAgICAgICAgPGxhc3QtZWRpdGVkPjEuNjwvbGFzdC1lZGl0ZWQ+CisgICAgICAgICAgPHNwbGl0dGVyLXByb3BvcnRpb25zPgorICAgICAgICAgICAgPG9wdGlvbiBuYW1lPSJwcm9wb3J0aW9ucyI+CisgICAgICAgICAgICAgIDxsaXN0PgorICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9IjAuMjAwMDAwMDIiIC8+CisgICAgICAgICAgICAgIDwvbGlzdD4KKyAgICAgICAgICAgIDwvb3B0aW9uPgorICAgICAgICAgIDwvc3BsaXR0ZXItcHJvcG9ydGlvbnM+CisgICAgICAgIDwvc2V0dGluZ3M+CisgICAgICA8L3N0YXRlPgorICAgICAgPHN0YXRlIGtleT0iUHJvamVjdExpYnJhcmllc0NvbmZpZ3VyYWJsZS5VSSI+CisgICAgICAgIDxzZXR0aW5ncz4KKyAgICAgICAgICA8bGFzdC1lZGl0ZWQ+YW5ub3RhdGlvbnM8L2xhc3QtZWRpdGVkPgorICAgICAgICAgIDxzcGxpdHRlci1wcm9wb3J0aW9ucz4KKyAgICAgICAgICAgIDxvcHRpb24gbmFtZT0icHJvcG9ydGlvbnMiPgorICAgICAgICAgICAgICA8bGlzdD4KKyAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSIwLjIiIC8+CisgICAgICAgICAgICAgIDwvbGlzdD4KKyAgICAgICAgICAgIDwvb3B0aW9uPgorICAgICAgICAgIDwvc3BsaXR0ZXItcHJvcG9ydGlvbnM+CisgICAgICAgIDwvc2V0dGluZ3M+CisgICAgICA8L3N0YXRlPgorICAgIDwvc3RhdGVzPgorICA8L2NvbXBvbmVudD4KKzwvcHJvamVjdD4KKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvcmUvbG9hZGluZ1Rlc3QvYW5ub3RhdGlvbnMuamFyIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvcmUvbG9hZGluZ1Rlc3QvYW5ub3RhdGlvbnMuamFyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQzYWU0YWIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29yZS9sb2FkaW5nVGVzdC9hbm5vdGF0aW9ucy5qYXIKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvcmUvbG9hZGluZ1Rlc3QvbG9hZGluZ1Rlc3QuaW1sIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2NvcmUvbG9hZGluZ1Rlc3QvbG9hZGluZ1Rlc3QuaW1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBjNTM1ODAKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvY29yZS9sb2FkaW5nVGVzdC9sb2FkaW5nVGVzdC5pbWwKQEAgLTAsMCArMSwxMCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxtb2R1bGUgdHlwZT0iSkFWQV9NT0RVTEUiIHZlcnNpb249IjQiPgorICA8Y29tcG9uZW50IG5hbWU9Ik5ld01vZHVsZVJvb3RNYW5hZ2VyIiBpbmhlcml0LWNvbXBpbGVyLW91dHB1dD0idHJ1ZSI+CisgICAgPGV4Y2x1ZGUtb3V0cHV0IC8+CisgICAgPGNvbnRlbnQgdXJsPSJmaWxlOi8vJE1PRFVMRV9ESVIkIiAvPgorICAgIDxvcmRlckVudHJ5IHR5cGU9InNvdXJjZUZvbGRlciIgZm9yVGVzdHM9ImZhbHNlIiAvPgorICAgIDxvcmRlckVudHJ5IHR5cGU9ImxpYnJhcnkiIG5hbWU9ImFubm90YXRpb25zIiBsZXZlbD0icHJvamVjdCIgLz4KKyAgPC9jb21wb25lbnQ+Cis8L21vZHVsZT4KKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2RlcGVuZGVuY2llcy9jeWNsZS9ub0N5Y2xlL2NvbS9hL0EuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9kZXBlbmRlbmNpZXMvY3ljbGUvbm9DeWNsZS9jb20vYS9BLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTNkYjc4OQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9kZXBlbmRlbmNpZXMvY3ljbGUvbm9DeWNsZS9jb20vYS9BLmphdmEKQEAgLTAsMCArMSw0IEBACitwYWNrYWdlIGNvbS5hOworcHVibGljIGNsYXNzIEF7CisKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvZGVwZW5kZW5jaWVzL2N5Y2xlL25vQ3ljbGUvY29tL2IvQi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2RlcGVuZGVuY2llcy9jeWNsZS9ub0N5Y2xlL2NvbS9iL0IuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNmVjODRlCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2RlcGVuZGVuY2llcy9jeWNsZS9ub0N5Y2xlL2NvbS9iL0IuamF2YQpAQCAtMCwwICsxLDUgQEAKK3BhY2thZ2UgY29tLmI7CitpbXBvcnQgY29tLmEuQTsKK3B1YmxpYyBjbGFzcyBCeworQSBhYSA9IG5ldyBBKCk7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2RlcGVuZGVuY2llcy9jeWNsZS9wYWNrYWdlU2NvcGUxL2NvbS9hL0EuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9kZXBlbmRlbmNpZXMvY3ljbGUvcGFja2FnZVNjb3BlMS9jb20vYS9BLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWQ1OGM1MwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9kZXBlbmRlbmNpZXMvY3ljbGUvcGFja2FnZVNjb3BlMS9jb20vYS9BLmphdmEKQEAgLTAsMCArMSw1IEBACitwYWNrYWdlIGNvbS5hOworaW1wb3J0IGNvbS5iLkI7CitwdWJsaWMgY2xhc3MgQXsKKyAgQiBiID0gbmV3IEIoKTsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvZGVwZW5kZW5jaWVzL2N5Y2xlL3BhY2thZ2VTY29wZTEvY29tL2IvQi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2RlcGVuZGVuY2llcy9jeWNsZS9wYWNrYWdlU2NvcGUxL2NvbS9iL0IuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NDlhMGEzCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2RlcGVuZGVuY2llcy9jeWNsZS9wYWNrYWdlU2NvcGUxL2NvbS9iL0IuamF2YQpAQCAtMCwwICsxLDUgQEAKK3BhY2thZ2UgY29tLmI7CitpbXBvcnQgY29tLmEuQTsKK3B1YmxpYyBjbGFzcyBCeworICBBIGEgPSBuZXcgQSgpOworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9kZXBlbmRlbmNpZXMvY3ljbGUvcGFja2FnZVNjb3BlMi9jb20vc3Vic2NvcGUxL2EvQS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2RlcGVuZGVuY2llcy9jeWNsZS9wYWNrYWdlU2NvcGUyL2NvbS9zdWJzY29wZTEvYS9BLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjU4YTk4YQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9kZXBlbmRlbmNpZXMvY3ljbGUvcGFja2FnZVNjb3BlMi9jb20vc3Vic2NvcGUxL2EvQS5qYXZhCkBAIC0wLDAgKzEsNSBAQAorcGFja2FnZSBjb20uc3Vic2NvcGUxLmE7CitpbXBvcnQgY29tLnN1YnNjb3BlMS5iLkI7CitwdWJsaWMgY2xhc3MgQXsKK0IgYiA9IG5ldyBCKCk7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2RlcGVuZGVuY2llcy9jeWNsZS9wYWNrYWdlU2NvcGUyL2NvbS9zdWJzY29wZTEvYi9CLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvZGVwZW5kZW5jaWVzL2N5Y2xlL3BhY2thZ2VTY29wZTIvY29tL3N1YnNjb3BlMS9iL0IuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMWNiM2UwCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2RlcGVuZGVuY2llcy9jeWNsZS9wYWNrYWdlU2NvcGUyL2NvbS9zdWJzY29wZTEvYi9CLmphdmEKQEAgLTAsMCArMSw1IEBACitwYWNrYWdlIGNvbS5zdWJzY29wZTEuYjsKK2ltcG9ydCBjb20uc3Vic2NvcGUxLmEuQTsKK3B1YmxpYyBjbGFzcyBCeworQSBhID0gbmV3IEEoKTsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvZGVwZW5kZW5jaWVzL2N5Y2xlL3BhY2thZ2VTY29wZTIvY29tL3N1YnNjb3BlMi9jL0MuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9kZXBlbmRlbmNpZXMvY3ljbGUvcGFja2FnZVNjb3BlMi9jb20vc3Vic2NvcGUyL2MvQy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFlZDQ5MDcKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvZGVwZW5kZW5jaWVzL2N5Y2xlL3BhY2thZ2VTY29wZTIvY29tL3N1YnNjb3BlMi9jL0MuamF2YQpAQCAtMCwwICsxLDUgQEAKK3BhY2thZ2UgY29tLnN1YnNjb3BlMi5jOworaW1wb3J0IGNvbS5zdWJzY29wZTIuZC5EOworcHVibGljIGNsYXNzIEN7CitEIGQgPSBuZXcgRCgpOworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9kZXBlbmRlbmNpZXMvY3ljbGUvcGFja2FnZVNjb3BlMi9jb20vc3Vic2NvcGUyL2QvRC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2RlcGVuZGVuY2llcy9jeWNsZS9wYWNrYWdlU2NvcGUyL2NvbS9zdWJzY29wZTIvZC9ELmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGJlODMyNgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9kZXBlbmRlbmNpZXMvY3ljbGUvcGFja2FnZVNjb3BlMi9jb20vc3Vic2NvcGUyL2QvRC5qYXZhCkBAIC0wLDAgKzEsNSBAQAorcGFja2FnZSBjb20uc3Vic2NvcGUyLmQ7CitpbXBvcnQgY29tLnN1YnNjb3BlMi5jLkM7CitwdWJsaWMgY2xhc3MgRHsKK0MgYyA9IG5ldyBDKCk7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2RlcGVuZGVuY2llcy9jeWNsZS90MS9jb20vYS9BLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvZGVwZW5kZW5jaWVzL2N5Y2xlL3QxL2NvbS9hL0EuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZDU4YzUzCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2RlcGVuZGVuY2llcy9jeWNsZS90MS9jb20vYS9BLmphdmEKQEAgLTAsMCArMSw1IEBACitwYWNrYWdlIGNvbS5hOworaW1wb3J0IGNvbS5iLkI7CitwdWJsaWMgY2xhc3MgQXsKKyAgQiBiID0gbmV3IEIoKTsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvZGVwZW5kZW5jaWVzL2N5Y2xlL3QxL2NvbS9iL0IuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9kZXBlbmRlbmNpZXMvY3ljbGUvdDEvY29tL2IvQi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU0OWEwYTMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvZGVwZW5kZW5jaWVzL2N5Y2xlL3QxL2NvbS9iL0IuamF2YQpAQCAtMCwwICsxLDUgQEAKK3BhY2thZ2UgY29tLmI7CitpbXBvcnQgY29tLmEuQTsKK3B1YmxpYyBjbGFzcyBCeworICBBIGEgPSBuZXcgQSgpOworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9kZXBlbmRlbmNpZXMvY3ljbGUvdDIvY29tL2EvQS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2RlcGVuZGVuY2llcy9jeWNsZS90Mi9jb20vYS9BLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjI0YTJmMAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9kZXBlbmRlbmNpZXMvY3ljbGUvdDIvY29tL2EvQS5qYXZhCkBAIC0wLDAgKzEsNSBAQAorcGFja2FnZSBjb20uYTsKK2ltcG9ydCBjb20uYi5COworcHVibGljIGNsYXNzIEF7CitCIGIgPSBuZXcgQigpOworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9kZXBlbmRlbmNpZXMvY3ljbGUvdDIvY29tL2IvQi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2RlcGVuZGVuY2llcy9jeWNsZS90Mi9jb20vYi9CLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzg5MzQ0MQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9kZXBlbmRlbmNpZXMvY3ljbGUvdDIvY29tL2IvQi5qYXZhCkBAIC0wLDAgKzEsNSBAQAorcGFja2FnZSBjb20uYjsKK2ltcG9ydCBjb20uYS5BOworcHVibGljIGNsYXNzIEJ7CitBIGEgPSBuZXcgQSgpOworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9kZXBlbmRlbmNpZXMvY3ljbGUvdDIvY29tL2MvQy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2RlcGVuZGVuY2llcy9jeWNsZS90Mi9jb20vYy9DLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmZkMGViYQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9kZXBlbmRlbmNpZXMvY3ljbGUvdDIvY29tL2MvQy5qYXZhCkBAIC0wLDAgKzEsNSBAQAorcGFja2FnZSBjb20uYzsKK2ltcG9ydCBjb20uZC5EOworcHVibGljIGNsYXNzIEN7CitEIGQgPSBuZXcgRCgpOworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9kZXBlbmRlbmNpZXMvY3ljbGUvdDIvY29tL2QvRC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2RlcGVuZGVuY2llcy9jeWNsZS90Mi9jb20vZC9ELmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTMyOTg0MQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9kZXBlbmRlbmNpZXMvY3ljbGUvdDIvY29tL2QvRC5qYXZhCkBAIC0wLDAgKzEsNSBAQAorcGFja2FnZSBjb20uZDsKK2ltcG9ydCBjb20uYy5DOworcHVibGljIGNsYXNzIER7CitDIGMgPSBuZXcgQygpOworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9kZXBlbmRlbmNpZXMvY3ljbGUvdDMvY29tL2EvQS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2RlcGVuZGVuY2llcy9jeWNsZS90My9jb20vYS9BLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGRlNzQ0NwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9kZXBlbmRlbmNpZXMvY3ljbGUvdDMvY29tL2EvQS5qYXZhCkBAIC0wLDAgKzEsNSBAQAorcGFja2FnZSBjb20uYTsKK2ltcG9ydCBjb20uYy5DOworcHVibGljIGNsYXNzIEF7CitDIGMgPSBuZXcgQygpOworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9kZXBlbmRlbmNpZXMvY3ljbGUvdDMvY29tL2IvQi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2RlcGVuZGVuY2llcy9jeWNsZS90My9jb20vYi9CLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWZhNmEzZgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9kZXBlbmRlbmNpZXMvY3ljbGUvdDMvY29tL2IvQi5qYXZhCkBAIC0wLDAgKzEsNyBAQAorcGFja2FnZSBjb20uYjsKK2ltcG9ydCBjb20uYS5BOworaW1wb3J0IGNvbS5kLkQ7CitwdWJsaWMgY2xhc3MgQnsKK0EgYSA9IG5ldyBBKCk7CitEIGQgPSBuZXcgRCgpOworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9kZXBlbmRlbmNpZXMvY3ljbGUvdDMvY29tL2MvQy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2RlcGVuZGVuY2llcy9jeWNsZS90My9jb20vYy9DLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmFlOGMwYwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9kZXBlbmRlbmNpZXMvY3ljbGUvdDMvY29tL2MvQy5qYXZhCkBAIC0wLDAgKzEsNSBAQAorcGFja2FnZSBjb20uYzsKK2ltcG9ydCBjb20uYi5COworcHVibGljIGNsYXNzIEN7CitCIGIgPSBuZXcgQigpOworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9kZXBlbmRlbmNpZXMvY3ljbGUvdDMvY29tL2QvRC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2RlcGVuZGVuY2llcy9jeWNsZS90My9jb20vZC9ELmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjBmOTcxNgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9kZXBlbmRlbmNpZXMvY3ljbGUvdDMvY29tL2QvRC5qYXZhCkBAIC0wLDAgKzEsNSBAQAorcGFja2FnZSBjb20uZDsKK2ltcG9ydCBjb20uYi5COworcHVibGljIGNsYXNzIER7CitCIGIgPSBuZXcgQigpOworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9kZXBlbmRlbmNpZXMvY3ljbGUvdDQvY29tL2EvQS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2RlcGVuZGVuY2llcy9jeWNsZS90NC9jb20vYS9BLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjI0Yjc3OQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9kZXBlbmRlbmNpZXMvY3ljbGUvdDQvY29tL2EvQS5qYXZhCkBAIC0wLDAgKzEsNyBAQAorcGFja2FnZSBjb20uYTsKK2ltcG9ydCBjb20uYi5COworaW1wb3J0IGNvbS5jLkM7CitwdWJsaWMgY2xhc3MgQXsKK0IgYiA9IG5ldyBCKCk7CitDIGMgPSBuZXcgQygpOworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9kZXBlbmRlbmNpZXMvY3ljbGUvdDQvY29tL2IvQi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2RlcGVuZGVuY2llcy9jeWNsZS90NC9jb20vYi9CLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzg5MzQ0MQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9kZXBlbmRlbmNpZXMvY3ljbGUvdDQvY29tL2IvQi5qYXZhCkBAIC0wLDAgKzEsNSBAQAorcGFja2FnZSBjb20uYjsKK2ltcG9ydCBjb20uYS5BOworcHVibGljIGNsYXNzIEJ7CitBIGEgPSBuZXcgQSgpOworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9kZXBlbmRlbmNpZXMvY3ljbGUvdDQvY29tL2MvQy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2RlcGVuZGVuY2llcy9jeWNsZS90NC9jb20vYy9DLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmZkMGViYQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9kZXBlbmRlbmNpZXMvY3ljbGUvdDQvY29tL2MvQy5qYXZhCkBAIC0wLDAgKzEsNSBAQAorcGFja2FnZSBjb20uYzsKK2ltcG9ydCBjb20uZC5EOworcHVibGljIGNsYXNzIEN7CitEIGQgPSBuZXcgRCgpOworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9kZXBlbmRlbmNpZXMvY3ljbGUvdDQvY29tL2QvRC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2RlcGVuZGVuY2llcy9jeWNsZS90NC9jb20vZC9ELmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjA3YTkyMAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9kZXBlbmRlbmNpZXMvY3ljbGUvdDQvY29tL2QvRC5qYXZhCkBAIC0wLDAgKzEsNSBAQAorcGFja2FnZSBjb20uZDsKK2ltcG9ydCBjb20uYS5BOworcHVibGljIGNsYXNzIER7CitBIGEgPSBuZXcgQSgpOworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9kZXBlbmRlbmNpZXMvY3ljbGUvdDUvY29tL2EvQS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2RlcGVuZGVuY2llcy9jeWNsZS90NS9jb20vYS9BLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGRlNzQ0NwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9kZXBlbmRlbmNpZXMvY3ljbGUvdDUvY29tL2EvQS5qYXZhCkBAIC0wLDAgKzEsNSBAQAorcGFja2FnZSBjb20uYTsKK2ltcG9ydCBjb20uYy5DOworcHVibGljIGNsYXNzIEF7CitDIGMgPSBuZXcgQygpOworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9kZXBlbmRlbmNpZXMvY3ljbGUvdDUvY29tL2IvQi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2RlcGVuZGVuY2llcy9jeWNsZS90NS9jb20vYi9CLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWZhNmEzZgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9kZXBlbmRlbmNpZXMvY3ljbGUvdDUvY29tL2IvQi5qYXZhCkBAIC0wLDAgKzEsNyBAQAorcGFja2FnZSBjb20uYjsKK2ltcG9ydCBjb20uYS5BOworaW1wb3J0IGNvbS5kLkQ7CitwdWJsaWMgY2xhc3MgQnsKK0EgYSA9IG5ldyBBKCk7CitEIGQgPSBuZXcgRCgpOworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9kZXBlbmRlbmNpZXMvY3ljbGUvdDUvY29tL2MvQy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2RlcGVuZGVuY2llcy9jeWNsZS90NS9jb20vYy9DLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmFlOGMwYwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9kZXBlbmRlbmNpZXMvY3ljbGUvdDUvY29tL2MvQy5qYXZhCkBAIC0wLDAgKzEsNSBAQAorcGFja2FnZSBjb20uYzsKK2ltcG9ydCBjb20uYi5COworcHVibGljIGNsYXNzIEN7CitCIGIgPSBuZXcgQigpOworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9kZXBlbmRlbmNpZXMvY3ljbGUvdDUvY29tL2QvRC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2RlcGVuZGVuY2llcy9jeWNsZS90NS9jb20vZC9ELmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjBmOTcxNgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9kZXBlbmRlbmNpZXMvY3ljbGUvdDUvY29tL2QvRC5qYXZhCkBAIC0wLDAgKzEsNSBAQAorcGFja2FnZSBjb20uZDsKK2ltcG9ydCBjb20uYi5COworcHVibGljIGNsYXNzIER7CitCIGIgPSBuZXcgQigpOworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9kZXBlbmRlbmNpZXMvY3ljbGUvdDYvY29tL2EvQS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2RlcGVuZGVuY2llcy9jeWNsZS90Ni9jb20vYS9BLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmFiODE4ZAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9kZXBlbmRlbmNpZXMvY3ljbGUvdDYvY29tL2EvQS5qYXZhCkBAIC0wLDAgKzEsNSBAQAorcGFja2FnZSBjb20uYTsKK2ltcG9ydCBjb20uYi5CMTsKK3B1YmxpYyBjbGFzcyBBeworICBCMSBiID0gbmV3IEIxKCk7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2RlcGVuZGVuY2llcy9jeWNsZS90Ni9jb20vYi9CMS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2RlcGVuZGVuY2llcy9jeWNsZS90Ni9jb20vYi9CMS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNiZDU1MGMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvZGVwZW5kZW5jaWVzL2N5Y2xlL3Q2L2NvbS9iL0IxLmphdmEKQEAgLTAsMCArMSw0IEBACitwYWNrYWdlIGNvbS5iOworcHVibGljIGNsYXNzIEIxeworCit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2RlcGVuZGVuY2llcy9jeWNsZS90Ni9jb20vYi9CMi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2RlcGVuZGVuY2llcy9jeWNsZS90Ni9jb20vYi9CMi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM4YjhjOWQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvZGVwZW5kZW5jaWVzL2N5Y2xlL3Q2L2NvbS9iL0IyLmphdmEKQEAgLTAsMCArMSw1IEBACitwYWNrYWdlIGNvbS5iOworaW1wb3J0IGNvbS5jLkM7CitwdWJsaWMgY2xhc3MgQjJ7CitDIGNjPSBuZXcgQygpOworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9kZXBlbmRlbmNpZXMvY3ljbGUvdDYvY29tL2MvQy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2RlcGVuZGVuY2llcy9jeWNsZS90Ni9jb20vYy9DLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzdjMzQ2NQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9kZXBlbmRlbmNpZXMvY3ljbGUvdDYvY29tL2MvQy5qYXZhCkBAIC0wLDAgKzEsNSBAQAorcGFja2FnZSBjb20uYzsKK2ltcG9ydCBjb20uYS5BOworcHVibGljIGNsYXNzIEN7CitBIGFhID0gbmV3IEEoKTsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvZGVwZW5kZW5jaWVzL2RlcGVuZGVuY2llcy9zcmMvY29tL3BhY2thZ2UxL0NsYXNzMS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2RlcGVuZGVuY2llcy9kZXBlbmRlbmNpZXMvc3JjL2NvbS9wYWNrYWdlMS9DbGFzczEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZjdjNDA0Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2RlcGVuZGVuY2llcy9kZXBlbmRlbmNpZXMvc3JjL2NvbS9wYWNrYWdlMS9DbGFzczEuamF2YQpAQCAtMCwwICsxLDUgQEAKK3BhY2thZ2UgY29tLnBhY2thZ2UxOworCitwdWJsaWMgY2xhc3MgQ2xhc3MxIHsKKyAgcHJpdmF0ZSBDbGFzczIgbXlDbGFzczsgIAorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9kZXBlbmRlbmNpZXMvZGVwZW5kZW5jaWVzL3NyYy9jb20vcGFja2FnZTEvQ2xhc3MyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvZGVwZW5kZW5jaWVzL2RlcGVuZGVuY2llcy9zcmMvY29tL3BhY2thZ2UxL0NsYXNzMi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU4ZjU4YTQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvZGVwZW5kZW5jaWVzL2RlcGVuZGVuY2llcy9zcmMvY29tL3BhY2thZ2UxL0NsYXNzMi5qYXZhCkBAIC0wLDAgKzEsNCBAQAorcGFja2FnZSBjb20ucGFja2FnZTE7CisKK3B1YmxpYyBjbGFzcyBDbGFzczIgeworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9kZXBlbmRlbmNpZXMvc2VhcmNoL2JhY2t3YXJkUGFja2FnZVNjb3BlL2NvbS9hL0EuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9kZXBlbmRlbmNpZXMvc2VhcmNoL2JhY2t3YXJkUGFja2FnZVNjb3BlL2NvbS9hL0EuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NTRhNzQzCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2RlcGVuZGVuY2llcy9zZWFyY2gvYmFja3dhcmRQYWNrYWdlU2NvcGUvY29tL2EvQS5qYXZhCkBAIC0wLDAgKzEsNSBAQAorcGFja2FnZSBjb20uYTsKK3B1YmxpYyBjbGFzcyBBeworICBwdWJsaWMgdm9pZCBhYSgpeworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2RlcGVuZGVuY2llcy9zZWFyY2gvYmFja3dhcmRQYWNrYWdlU2NvcGUvY29tL2EvQy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2RlcGVuZGVuY2llcy9zZWFyY2gvYmFja3dhcmRQYWNrYWdlU2NvcGUvY29tL2EvQy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVlNWMxMzEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvZGVwZW5kZW5jaWVzL3NlYXJjaC9iYWNrd2FyZFBhY2thZ2VTY29wZS9jb20vYS9DLmphdmEKQEAgLTAsMCArMSw3IEBACitwYWNrYWdlIGNvbS5hOworcHVibGljIGNsYXNzIEN7CisgIEEgbXlBID0gbmV3IEEgKCk7CisgIHB1YmxpYyB2b2lkIGNjKCl7CisgICAgbXlBLmFhKCk7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvZGVwZW5kZW5jaWVzL3NlYXJjaC9iYWNrd2FyZFBhY2thZ2VTY29wZS9jb20vYi9CLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvZGVwZW5kZW5jaWVzL3NlYXJjaC9iYWNrd2FyZFBhY2thZ2VTY29wZS9jb20vYi9CLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzQ5YWEyMAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9kZXBlbmRlbmNpZXMvc2VhcmNoL2JhY2t3YXJkUGFja2FnZVNjb3BlL2NvbS9iL0IuamF2YQpAQCAtMCwwICsxLDEwIEBACitwYWNrYWdlIGNvbS5iOworaW1wb3J0IGNvbS5hLio7CitjbGFzcyBCeworICBBIG15QSA9IG5ldyBBKCk7CisgIEMgbXlDID0gbmV3IEMoKTsKKyAgdm9pZCBiYigpeworICAgIG15QS5hYSgpOworICAgIG15Qy5jYygpOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2RlcGVuZGVuY2llcy9zZWFyY2gvZm9yd2FyZFBhY2thZ2VTY29wZS9jb20vYS9BLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvZGVwZW5kZW5jaWVzL3NlYXJjaC9mb3J3YXJkUGFja2FnZVNjb3BlL2NvbS9hL0EuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NTRhNzQzCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2RlcGVuZGVuY2llcy9zZWFyY2gvZm9yd2FyZFBhY2thZ2VTY29wZS9jb20vYS9BLmphdmEKQEAgLTAsMCArMSw1IEBACitwYWNrYWdlIGNvbS5hOworcHVibGljIGNsYXNzIEF7CisgIHB1YmxpYyB2b2lkIGFhKCl7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvZGVwZW5kZW5jaWVzL3NlYXJjaC9mb3J3YXJkUGFja2FnZVNjb3BlL2NvbS9iL0IuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9kZXBlbmRlbmNpZXMvc2VhcmNoL2ZvcndhcmRQYWNrYWdlU2NvcGUvY29tL2IvQi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRiNDJjNzAKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvZGVwZW5kZW5jaWVzL3NlYXJjaC9mb3J3YXJkUGFja2FnZVNjb3BlL2NvbS9iL0IuamF2YQpAQCAtMCwwICsxLDggQEAKK3BhY2thZ2UgY29tLmI7CitpbXBvcnQgY29tLmEuQTsKK3B1YmxpYyBjbGFzcyBCeworICBBIG15QSA9IG5ldyBBKCk7CisgIHB1YmxpYyB2b2lkIGJiKCl7CisgICAgbXlBLmFhKCk7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvZGVwZW5kZW5jaWVzL3NlYXJjaC9mb3J3YXJkUGFja2FnZVNjb3BlL2NvbS9iL0MuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9kZXBlbmRlbmNpZXMvc2VhcmNoL2ZvcndhcmRQYWNrYWdlU2NvcGUvY29tL2IvQy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFhZDRkNDEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvZGVwZW5kZW5jaWVzL3NlYXJjaC9mb3J3YXJkUGFja2FnZVNjb3BlL2NvbS9iL0MuamF2YQpAQCAtMCwwICsxLDggQEAKK3BhY2thZ2UgY29tLmI7CitpbXBvcnQgY29tLmEuQTsKK3B1YmxpYyBjbGFzcyBDeworICBBIG15QSA9IG5ldyBBKCk7CisgIHB1YmxpYyB2b2lkIGNjKCl7CisgICAgbXlBLmFhKCk7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvZGVwZW5kZW5jaWVzL3NlYXJjaC9mb3J3YXJkU2ltcGxlL0EuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9kZXBlbmRlbmNpZXMvc2VhcmNoL2ZvcndhcmRTaW1wbGUvQS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM2ZDIwMWEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvZGVwZW5kZW5jaWVzL3NlYXJjaC9mb3J3YXJkU2ltcGxlL0EuamF2YQpAQCAtMCwwICsxLDYgQEAKK3B1YmxpYyBjbGFzcyBBeworICBCIG15QiA9IG5ldyBCKCk7CisgIHZvaWQgYWEoKXsKKyAgICBteUIuYmIoKTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9kZXBlbmRlbmNpZXMvc2VhcmNoL2ZvcndhcmRTaW1wbGUvQi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2RlcGVuZGVuY2llcy9zZWFyY2gvZm9yd2FyZFNpbXBsZS9CLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODRmMzY1NQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9kZXBlbmRlbmNpZXMvc2VhcmNoL2ZvcndhcmRTaW1wbGUvQi5qYXZhCkBAIC0wLDAgKzEsNCBAQAorcHVibGljIGNsYXNzIEJ7CisgIHB1YmxpYyB2b2lkIGJiKCl7ICAgICAKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9maWxlU3RydWN0dXJlL2ZpbHRlcmluZy9Bbm9ueW1vdXNUeXBlLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvZmlsZVN0cnVjdHVyZS9maWx0ZXJpbmcvQW5vbnltb3VzVHlwZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxNzMxZGEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvZmlsZVN0cnVjdHVyZS9maWx0ZXJpbmcvQW5vbnltb3VzVHlwZS5qYXZhCkBAIC0wLDAgKzEsOCBAQAoraW1wb3J0IGphdmEuYXd0Lio7CisKK2NsYXNzIEFub255bW91c1R5cGU8Y2FyZXQ+IHsKKyAgaW50IG51bTsKKyAgdm9pZCBmb28oKSB7CisgICAgbmV3IGphdmEuYXd0LlBvaW50KCl7fTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9maWxlU3RydWN0dXJlL2ZpbHRlcmluZy9Bbm9ueW1vdXNUeXBlLnRyZWUgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvZmlsZVN0cnVjdHVyZS9maWx0ZXJpbmcvQW5vbnltb3VzVHlwZS50cmVlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI1OGIxYTIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvZmlsZVN0cnVjdHVyZS9maWx0ZXJpbmcvQW5vbnltb3VzVHlwZS50cmVlCkBAIC0wLDAgKzEsNCBAQAorLUFub255bW91c1R5cGUuamF2YQorIC1Bbm9ueW1vdXNUeXBlCisgIC1mb28oKTogdm9pZAorICAgWyQxXQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9maWxlU3RydWN0dXJlL2ZpbHRlcmluZy9DYW1lbC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2ZpbGVTdHJ1Y3R1cmUvZmlsdGVyaW5nL0NhbWVsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzA3OTRmNwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9maWxlU3RydWN0dXJlL2ZpbHRlcmluZy9DYW1lbC5qYXZhCkBAIC0wLDAgKzEsNyBAQAorY2xhc3MgQ2FtZWw8Y2FyZXQ+IHsKKyAgdm9pZCBkb1NvbWV0aGluZygpe30KKyAgdm9pZCBkb1NvbWV0aGluZ1dpdGgoKXt9CisgIHZvaWQgZG9Tb21ldGhpbmdXaXRoTXlIZWFkKCl7fQorICB2b2lkIGdldFNvbWVIZWFkKCl7fQorICB2b2lkIGdldFNvbWVBcnRIZWFkZXIoKXt9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2ZpbGVTdHJ1Y3R1cmUvZmlsdGVyaW5nL0NhbWVsLnRyZWUgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvZmlsZVN0cnVjdHVyZS9maWx0ZXJpbmcvQ2FtZWwudHJlZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kN2QyY2FiCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2ZpbGVTdHJ1Y3R1cmUvZmlsdGVyaW5nL0NhbWVsLnRyZWUKQEAgLTAsMCArMSw1IEBACistQ2FtZWwuamF2YQorIC1DYW1lbAorICBbZG9Tb21ldGhpbmdXaXRoTXlIZWFkKCk6IHZvaWRdCisgIGdldFNvbWVBcnRIZWFkZXIoKTogdm9pZAorICBnZXRTb21lSGVhZCgpOiB2b2lkClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2ZpbGVTdHJ1Y3R1cmUvZmlsdGVyaW5nL0NhbWVsMi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2ZpbGVTdHJ1Y3R1cmUvZmlsdGVyaW5nL0NhbWVsMi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEzMGRhMTMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvZmlsZVN0cnVjdHVyZS9maWx0ZXJpbmcvQ2FtZWwyLmphdmEKQEAgLTAsMCArMSw3IEBACitjbGFzcyBDYW1lbDI8Y2FyZXQ+IHsKKyAgdm9pZCBkb1NvbWV0aGluZygpe30KKyAgdm9pZCBkb1NvbWV0aGluZ1dpdGgoKXt9CisgIHZvaWQgZG9Tb21ldGhpbmdXaXRoTXlIZWFkKCl7fQorICB2b2lkIGRvU29tZUhlYWQoKXt9CisgIHZvaWQgZG9Tb21lQXJ0SGVhZGVyKCl7fQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9maWxlU3RydWN0dXJlL2ZpbHRlcmluZy9DYW1lbDIudHJlZSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9maWxlU3RydWN0dXJlL2ZpbHRlcmluZy9DYW1lbDIudHJlZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zM2RiYWE4Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2ZpbGVTdHJ1Y3R1cmUvZmlsdGVyaW5nL0NhbWVsMi50cmVlCkBAIC0wLDAgKzEsNSBAQAorLUNhbWVsMi5qYXZhCisgLUNhbWVsMgorICBkb1NvbWVBcnRIZWFkZXIoKTogdm9pZAorICBbZG9Tb21lSGVhZCgpOiB2b2lkXQorICBkb1NvbWV0aGluZ1dpdGhNeUhlYWQoKTogdm9pZApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9maWxlU3RydWN0dXJlL2ZpbHRlcmluZy9SZXR1cm5WYWx1ZS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2ZpbGVTdHJ1Y3R1cmUvZmlsdGVyaW5nL1JldHVyblZhbHVlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDk5ZmQ3MgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9maWxlU3RydWN0dXJlL2ZpbHRlcmluZy9SZXR1cm5WYWx1ZS5qYXZhCkBAIC0wLDAgKzEsMTAgQEAKK2ltcG9ydCBqYXZhLmF3dC4qOworCitjbGFzcyBSZXR1cm5WYWx1ZSB7CisgIHZvaWQgYWFhKCl7PGNhcmV0Pn0KKyAgUG9pbnQgZ2V0TG9jYXRpb25PblNjcmVlbigpe30KKyAgUG9pbnQgZ2V0UG9pbnQoKXt9CisgIHZvaWQgZmZmMigpe30KKyAgdm9pZCBmZmYzKCl7fQorICB2b2lkIGZmZjQoKXt9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2ZpbGVTdHJ1Y3R1cmUvZmlsdGVyaW5nL1JldHVyblZhbHVlLnRyZWUgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvZmlsZVN0cnVjdHVyZS9maWx0ZXJpbmcvUmV0dXJuVmFsdWUudHJlZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NjlhZGRkCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2ZpbGVTdHJ1Y3R1cmUvZmlsdGVyaW5nL1JldHVyblZhbHVlLnRyZWUKQEAgLTAsMCArMSw0IEBACistUmV0dXJuVmFsdWUuamF2YQorIC1SZXR1cm5WYWx1ZQorICBnZXRMb2NhdGlvbk9uU2NyZWVuKCk6IFBvaW50CisgIFtnZXRQb2ludCgpOiBQb2ludF0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvZmlsZVN0cnVjdHVyZS9maWx0ZXJpbmcvU2VsZWN0TGVhZkZpcnN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvZmlsZVN0cnVjdHVyZS9maWx0ZXJpbmcvU2VsZWN0TGVhZkZpcnN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDVlZGE0ZQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9maWxlU3RydWN0dXJlL2ZpbHRlcmluZy9TZWxlY3RMZWFmRmlyc3QuamF2YQpAQCAtMCwwICsxLDEzIEBACitjbGFzcyBTZWxlY3RMZWFmRmlyc3QgeworICB2b2lkIGFhYSgpe30KKyAgPGNhcmV0PgorICB2b2lkIGJiYigpe30KKyAgdm9pZCBjbGVhcigpe30KKyAgdm9pZCB6enooKXt9CisgIGNsYXNzIENsZWFyQ2xhc3MgeworICAgIHZvaWQga2trKCl7fQorICAgIHZvaWQgd3d3KCl7fQorICAgIHZvaWQgY2xlYXIoKXt9CisgICAgdm9pZCB5eXkoKXt9CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvZmlsZVN0cnVjdHVyZS9maWx0ZXJpbmcvU2VsZWN0TGVhZkZpcnN0LnRyZWUgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvZmlsZVN0cnVjdHVyZS9maWx0ZXJpbmcvU2VsZWN0TGVhZkZpcnN0LnRyZWUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2EzMjI2MgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9maWxlU3RydWN0dXJlL2ZpbHRlcmluZy9TZWxlY3RMZWFmRmlyc3QudHJlZQpAQCAtMCwwICsxLDUgQEAKKy1TZWxlY3RMZWFmRmlyc3QuamF2YQorIC1TZWxlY3RMZWFmRmlyc3QKKyAgW2NsZWFyKCk6IHZvaWRdCisgIC1DbGVhckNsYXNzCisgICBjbGVhcigpOiB2b2lkClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2ZpbGVTdHJ1Y3R1cmUvZmlsdGVyaW5nL1NlbGVjdExlYWZGaXJzdDIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9maWxlU3RydWN0dXJlL2ZpbHRlcmluZy9TZWxlY3RMZWFmRmlyc3QyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDZkNTA1MgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9maWxlU3RydWN0dXJlL2ZpbHRlcmluZy9TZWxlY3RMZWFmRmlyc3QyLmphdmEKQEAgLTAsMCArMSwxMyBAQAorY2xhc3MgU2VsZWN0TGVhZkZpcnN0MiB7CisgIHZvaWQgYWFhKCl7fQorICB2b2lkIGJiYigpe30KKyAgdm9pZCBjbGVhcigpe30KKyAgdm9pZCB6enooKXt9CisgIGNsYXNzIENsZWFyQ2xhc3MgeworICAgIHZvaWQga2trKCl7fQorICAgIDxjYXJldD4KKyAgICB2b2lkIHd3dygpe30KKyAgICB2b2lkIGNsZWFyKCl7fQorICAgIHZvaWQgeXl5KCl7fQorICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2ZpbGVTdHJ1Y3R1cmUvZmlsdGVyaW5nL1NlbGVjdExlYWZGaXJzdDIudHJlZSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9maWxlU3RydWN0dXJlL2ZpbHRlcmluZy9TZWxlY3RMZWFmRmlyc3QyLnRyZWUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjliYzk1ZgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9maWxlU3RydWN0dXJlL2ZpbHRlcmluZy9TZWxlY3RMZWFmRmlyc3QyLnRyZWUKQEAgLTAsMCArMSw1IEBACistU2VsZWN0TGVhZkZpcnN0Mi5qYXZhCisgLVNlbGVjdExlYWZGaXJzdDIKKyAgY2xlYXIoKTogdm9pZAorICAtQ2xlYXJDbGFzcworICAgW2NsZWFyKCk6IHZvaWRdClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2ZpbGVTdHJ1Y3R1cmUvZmlsdGVyaW5nL1NlbGVjdExlYWZGaXJzdDMuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9maWxlU3RydWN0dXJlL2ZpbHRlcmluZy9TZWxlY3RMZWFmRmlyc3QzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmU0ZDZiNAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9maWxlU3RydWN0dXJlL2ZpbHRlcmluZy9TZWxlY3RMZWFmRmlyc3QzLmphdmEKQEAgLTAsMCArMSwxMyBAQAorY2xhc3MgU2VsZWN0TGVhZkZpcnN0MyB7CisgIGludDxjYXJldD4gbnVtOworICB2b2lkIGFhYSgpe30KKyAgdm9pZCBiYmIoKXt9CisgIHZvaWQgY2xlYXIoKXt9CisgIHZvaWQgenp6KCl7fQorICBjbGFzcyBDbGVhckNsYXNzIHsKKyAgICB2b2lkIGtraygpe30KKyAgICB2b2lkIHd3dygpe30KKyAgICB2b2lkIGNsZWFyKCl7fQorICAgIHZvaWQgeXl5KCl7fQorICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2ZpbGVTdHJ1Y3R1cmUvZmlsdGVyaW5nL1NlbGVjdExlYWZGaXJzdDMudHJlZSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9maWxlU3RydWN0dXJlL2ZpbHRlcmluZy9TZWxlY3RMZWFmRmlyc3QzLnRyZWUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzJjYWYyYwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9maWxlU3RydWN0dXJlL2ZpbHRlcmluZy9TZWxlY3RMZWFmRmlyc3QzLnRyZWUKQEAgLTAsMCArMSw1IEBACistU2VsZWN0TGVhZkZpcnN0My5qYXZhCisgLVNlbGVjdExlYWZGaXJzdDMKKyAgW2NsZWFyKCk6IHZvaWRdCisgIC1DbGVhckNsYXNzCisgICBjbGVhcigpOiB2b2lkClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2ZpbGVTdHJ1Y3R1cmUvZmlsdGVyaW5nL1NlbGVjdExlYWZGaXJzdDQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9maWxlU3RydWN0dXJlL2ZpbHRlcmluZy9TZWxlY3RMZWFmRmlyc3Q0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGNhZjNmMQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9maWxlU3RydWN0dXJlL2ZpbHRlcmluZy9TZWxlY3RMZWFmRmlyc3Q0LmphdmEKQEAgLTAsMCArMSwxMiBAQAorY2xhc3MgU2VsZWN0TGVhZkZpcnN0NCB7CisgIHZvaWQgYWFhKCl7fQorICB2b2lkIGJiYigpe30KKyAgdm9pZCBjbGVhcigpe30KKyAgdm9pZCB6enooKXt9CisgIGNsYXNzIENsZWFyQ2xhc3MgeworICAgIHZvaWQ8Y2FyZXQ+IGtraygpe30KKyAgICB2b2lkIHd3dygpe30KKyAgICB2b2lkIGNsZWFyKCl7fQorICAgIHZvaWQgeXl5KCl7fQorICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2ZpbGVTdHJ1Y3R1cmUvZmlsdGVyaW5nL1NlbGVjdExlYWZGaXJzdDQudHJlZSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9maWxlU3RydWN0dXJlL2ZpbHRlcmluZy9TZWxlY3RMZWFmRmlyc3Q0LnRyZWUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTJiNTBmYgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9maWxlU3RydWN0dXJlL2ZpbHRlcmluZy9TZWxlY3RMZWFmRmlyc3Q0LnRyZWUKQEAgLTAsMCArMSw1IEBACistU2VsZWN0TGVhZkZpcnN0NC5qYXZhCisgLVNlbGVjdExlYWZGaXJzdDQKKyAgY2xlYXIoKTogdm9pZAorICAtQ2xlYXJDbGFzcworICAgW2NsZWFyKCk6IHZvaWRdClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2ZpbGVTdHJ1Y3R1cmUvZmlsdGVyaW5nL1NpbXBsZS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2ZpbGVTdHJ1Y3R1cmUvZmlsdGVyaW5nL1NpbXBsZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI0YTYyZTkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvZmlsZVN0cnVjdHVyZS9maWx0ZXJpbmcvU2ltcGxlLmphdmEKQEAgLTAsMCArMSw4IEBACitjbGFzcyBTaW1wbGU8Y2FyZXQ+IHsKKyAgdm9pZCBhYWEoKXt9CisgIHZvaWQgYmJiKCl7fQorICB2b2lkIGZmZigpe30KKyAgdm9pZCBmZmYyKCl7fQorICB2b2lkIGZmZjMoKXt9CisgIHZvaWQgZmZmNCgpe30KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9maWxlU3RydWN0dXJlL2ZpbHRlcmluZy9TaW1wbGUudHJlZSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9maWxlU3RydWN0dXJlL2ZpbHRlcmluZy9TaW1wbGUudHJlZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZjk0MWQ3Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2ZpbGVTdHJ1Y3R1cmUvZmlsdGVyaW5nL1NpbXBsZS50cmVlCkBAIC0wLDAgKzEsNiBAQAorLVNpbXBsZS5qYXZhCisgLVNpbXBsZQorICBbZmZmKCk6IHZvaWRdCisgIGZmZjIoKTogdm9pZAorICBmZmYzKCk6IHZvaWQKKyAgZmZmNCgpOiB2b2lkCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvZmlsZVN0cnVjdHVyZS9oaWVyYXJjaHkvQW5vbnltb3VzQXNDb25zdGFudEluSW50ZXJmYWNlLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvZmlsZVN0cnVjdHVyZS9oaWVyYXJjaHkvQW5vbnltb3VzQXNDb25zdGFudEluSW50ZXJmYWNlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzVhYjdkZAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9maWxlU3RydWN0dXJlL2hpZXJhcmNoeS9Bbm9ueW1vdXNBc0NvbnN0YW50SW5JbnRlcmZhY2UuamF2YQpAQCAtMCwwICsxLDIyIEBACisvKgorICogQ29weXJpZ2h0IDIwMDAtMjAxMiBKZXRCcmFpbnMgcy5yLm8uCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworY2xhc3MgQW5vbnltb3VzQXNDb25zdGFudEluSW50ZXJmYWNlIHsKKyAgaW50IG51bSA9IDU7CisKKyAgdm9pZCBnZXRBTWV0aG9kKCkgeworICAgIEJ1Z2d5IGJ1Z2d5ID0gbmV3IEJ1Z2d5KCl7PGNhcmV0Pn07CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvZmlsZVN0cnVjdHVyZS9oaWVyYXJjaHkvQW5vbnltb3VzQXNDb25zdGFudEluSW50ZXJmYWNlLnRyZWUgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvZmlsZVN0cnVjdHVyZS9oaWVyYXJjaHkvQW5vbnltb3VzQXNDb25zdGFudEluSW50ZXJmYWNlLnRyZWUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmRlM2ZhOAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9maWxlU3RydWN0dXJlL2hpZXJhcmNoeS9Bbm9ueW1vdXNBc0NvbnN0YW50SW5JbnRlcmZhY2UudHJlZQpAQCAtMCwwICsxLDIzIEBACistQW5vbnltb3VzQXNDb25zdGFudEluSW50ZXJmYWNlLmphdmEKKyAtQW5vbnltb3VzQXNDb25zdGFudEluSW50ZXJmYWNlCisgIC1nZXRBTWV0aG9kKCk6IHZvaWQKKyAgIC0kMQorICAgIGdldEEoKTogdm9pZAorICAgIGdldEExKCk6IHZvaWQKKyAgICBnZXRBMigpOiB2b2lkCisgICAgZ2V0QTMoKTogdm9pZAorICAgIGdldEE0KCk6IHZvaWQKKyAgICBnZXRBNSgpOiB2b2lkCisgICAgZ2V0QTYoKTogdm9pZAorICAgIGdldEE3KCk6IHZvaWQKKyAgICBnZXRBOCgpOiB2b2lkCisgICAgLURFRkFVTFQ6IEJ1Z2d5SW50ZXJmYWNlID0gbmV3IEJ1Z2d5SW50ZXJmYWNlKCkgey4uLn0KKyAgICAgLSQxCisgICAgICBbZ2V0QTEoKTogdm9pZF0KKyAgICAgIGdldEEyKCk6IHZvaWQKKyAgICAgIGdldEEzKCk6IHZvaWQKKyAgICAgIGdldEE0KCk6IHZvaWQKKyAgICAgIGdldEE1KCk6IHZvaWQKKyAgICAgIGdldEE2KCk6IHZvaWQKKyAgICAgIGdldEE3KCk6IHZvaWQKKyAgICAgIGdldEE4KCk6IHZvaWQKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvZmlsZVN0cnVjdHVyZS9oaWVyYXJjaHkvQW5vbnltb3VzSGFzaENvZGUuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9maWxlU3RydWN0dXJlL2hpZXJhcmNoeS9Bbm9ueW1vdXNIYXNoQ29kZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUxMThiNzkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvZmlsZVN0cnVjdHVyZS9oaWVyYXJjaHkvQW5vbnltb3VzSGFzaENvZGUuamF2YQpAQCAtMCwwICsxLDIyIEBACisvKgorICogQ29weXJpZ2h0IDIwMDAtMjAxMiBKZXRCcmFpbnMgcy5yLm8uCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworaW1wb3J0IGphdmEubGFuZy5PYmplY3Q7CisKK3B1YmxpYyBjbGFzcyBBPGNhcmV0PiBleHRlbmRzIE9iamVjdCB7CisgIHZvaWQgZm9vKCkgeworICAgIE9iamVjdCBteU9iamVjdCA9IG5ldyBPYmplY3QoKXt9OworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2ZpbGVTdHJ1Y3R1cmUvaGllcmFyY2h5L0Fub255bW91c0hhc2hDb2RlLnRyZWUgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvZmlsZVN0cnVjdHVyZS9oaWVyYXJjaHkvQW5vbnltb3VzSGFzaENvZGUudHJlZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOTI3MTUzCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2ZpbGVTdHJ1Y3R1cmUvaGllcmFyY2h5L0Fub255bW91c0hhc2hDb2RlLnRyZWUKQEAgLTAsMCArMSwzIEBACistQW5vbnltb3VzSGFzaENvZGUuamF2YQorIC1BCisgIFtoYXNoQ29kZSgpOiBpbnRdClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2ZpbGVTdHJ1Y3R1cmUvaGllcmFyY2h5L0J1Z2d5LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvZmlsZVN0cnVjdHVyZS9oaWVyYXJjaHkvQnVnZ3kuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yODM5YTkzCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2ZpbGVTdHJ1Y3R1cmUvaGllcmFyY2h5L0J1Z2d5LmphdmEKQEAgLTAsMCArMSwzMyBAQAorLyoKKyAqIENvcHlyaWdodCAyMDAwLTIwMTIgSmV0QnJhaW5zIHMuci5vLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KK2ltcG9ydCBqYXZhLmxhbmcuT2JqZWN0OworCitjbGFzcyBCdWdneSBleHRlbmRzIE9iamVjdCBpbXBsZW1lbnRzIEJ1Z2d5SW50ZXJmYWNlIHsKKyAgcHVibGljIHZvaWQgZ2V0QSgpe30KKyAgcHVibGljIHZvaWQgZ2V0Qigpe30KKyAgcHVibGljIHZvaWQgZ2V0Qygpe30KKyAgcHVibGljIHZvaWQgZ2V0RCgpe30KKyAgcHVibGljIHZvaWQgZ2V0RSgpe30KKyAgcHVibGljIHZvaWQgZ2V0Rigpe30KKyAgcHVibGljIHZvaWQgZ2V0QTEoKXt9CisgIHB1YmxpYyB2b2lkIGdldEEyKCl7fQorICBwdWJsaWMgdm9pZCBnZXRBMygpe30KKyAgcHVibGljIHZvaWQgZ2V0QTQoKXt9CisgIHB1YmxpYyB2b2lkIGdldEE1KCl7fQorICBwdWJsaWMgdm9pZCBnZXRBNigpe30KKyAgcHVibGljIHZvaWQgZ2V0QTcoKXt9CisgIHB1YmxpYyB2b2lkIGdldEE4KCl7fQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9maWxlU3RydWN0dXJlL2hpZXJhcmNoeS9CdWdneUludGVyZmFjZS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2ZpbGVTdHJ1Y3R1cmUvaGllcmFyY2h5L0J1Z2d5SW50ZXJmYWNlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmRmOTBkMwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9maWxlU3RydWN0dXJlL2hpZXJhcmNoeS9CdWdneUludGVyZmFjZS5qYXZhCkBAIC0wLDAgKzEsMzggQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwMC0yMDEyIEpldEJyYWlucyBzLnIuby4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCitpbXBvcnQgamF2YS5sYW5nLk92ZXJyaWRlOworCitpbnRlcmZhY2UgIEJ1Z2d5SW50ZXJmYWNlIHsKKyAgQnVnZ3lJbnRlcmZhY2UgREVGQVVMVCA9IG5ldyBCdWdneUludGVyZmFjZSgpIHsKKyAgICBwdWJsaWMgdm9pZCBnZXRBMSgpe307CisgICAgcHVibGljIHZvaWQgZ2V0QTIoKXt9OworICAgIHB1YmxpYyB2b2lkIGdldEEzKCl7fTsKKyAgICBwdWJsaWMgdm9pZCBnZXRBNCgpe307CisgICAgcHVibGljIHZvaWQgZ2V0QTUoKXt9OworICAgIHB1YmxpYyB2b2lkIGdldEE2KCl7fTsKKyAgICBwdWJsaWMgdm9pZCBnZXRBNygpe307CisgICAgcHVibGljIHZvaWQgZ2V0QTgoKXt9OworICB9CisKKyAgdm9pZCBnZXRBMSgpOworICB2b2lkIGdldEEyKCk7CisgIHZvaWQgZ2V0QTMoKTsKKyAgdm9pZCBnZXRBNCgpOworICB2b2lkIGdldEE1KCk7CisgIHZvaWQgZ2V0QTYoKTsKKyAgdm9pZCBnZXRBNygpOworICB2b2lkIGdldEE4KCk7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2ZpbGVTdHJ1Y3R1cmUvaGllcmFyY2h5L09iamVjdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2ZpbGVTdHJ1Y3R1cmUvaGllcmFyY2h5L09iamVjdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRhNGQ1YjgKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvZmlsZVN0cnVjdHVyZS9oaWVyYXJjaHkvT2JqZWN0LmphdmEKQEAgLTAsMCArMSw0MiBAQAorLyoKKyAqIENvcHlyaWdodCAyMDAwLTIwMTIgSmV0QnJhaW5zIHMuci5vLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KK3B1YmxpYyBjbGFzcyBPYmplY3QgeworICBwcml2YXRlIHN0YXRpYyBuYXRpdmUgdm9pZCByZWdpc3Rlck5hdGl2ZXMoKTsKKworICBzdGF0aWMge3JlZ2lzdGVyTmF0aXZlcygpO30KKworICBwdWJsaWMgZmluYWwgbmF0aXZlIENsYXNzPD8+IGdldENsYXNzKCk7CisKKyAgcHVibGljIG5hdGl2ZSBpbnQgaGFzaENvZGUoKTsKKworICBwdWJsaWMgYm9vbGVhbiBlcXVhbHMoT2JqZWN0IG9iaikge3JldHVybiBmYWxzZTt9CisKKyAgcHJvdGVjdGVkIG5hdGl2ZSBPYmplY3QgY2xvbmUoKSB0aHJvd3MgQ2xvbmVOb3RTdXBwb3J0ZWRFeGNlcHRpb247CisKKyAgcHVibGljIFN0cmluZyB0b1N0cmluZygpIHtyZXR1cm4gbnVsbDt9CisKKyAgcHVibGljIGZpbmFsIG5hdGl2ZSB2b2lkIG5vdGlmeSgpOworCisgIHB1YmxpYyBmaW5hbCBuYXRpdmUgdm9pZCBub3RpZnlBbGwoKTsKKworICBwdWJsaWMgZmluYWwgbmF0aXZlIHZvaWQgd2FpdChsb25nIHRpbWVvdXQpIHRocm93cyBJbnRlcnJ1cHRlZEV4Y2VwdGlvbjsKKworICBwdWJsaWMgZmluYWwgdm9pZCB3YWl0KGxvbmcgdGltZW91dCwgaW50IG5hbm9zKSB0aHJvd3MgSW50ZXJydXB0ZWRFeGNlcHRpb24ge30KKworICBwdWJsaWMgZmluYWwgdm9pZCB3YWl0KCkgdGhyb3dzIEludGVycnVwdGVkRXhjZXB0aW9uIHt9CisKKyAgcHJvdGVjdGVkIHZvaWQgZmluYWxpemUoKSB0aHJvd3MgVGhyb3dhYmxlIHsgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9maWxlU3RydWN0dXJlL2hpZXJhcmNoeS9TaW1wbGUuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9maWxlU3RydWN0dXJlL2hpZXJhcmNoeS9TaW1wbGUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZjk4YWEyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2ZpbGVTdHJ1Y3R1cmUvaGllcmFyY2h5L1NpbXBsZS5qYXZhCkBAIC0wLDAgKzEsMjAgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwMC0yMDEyIEpldEJyYWlucyBzLnIuby4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCitjbGFzcyBTaW1wbGUgZXh0ZW5kcyBPYmplY3QgeworICB2b2lkIGFhYSgpe30KKyAgdm9pZCBiYmIoKXs8Y2FyZXQ+fQorICB2b2lkIGZmZigpe30KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvZmlsZVN0cnVjdHVyZS9oaWVyYXJjaHkvU2ltcGxlLnRyZWUgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvZmlsZVN0cnVjdHVyZS9oaWVyYXJjaHkvU2ltcGxlLnRyZWUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzM0YmRlMQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9maWxlU3RydWN0dXJlL2hpZXJhcmNoeS9TaW1wbGUudHJlZQpAQCAtMCwwICsxLDE2IEBACistU2ltcGxlLmphdmEKKyAtU2ltcGxlCisgIGFhYSgpOiB2b2lkCisgIGJiYigpOiB2b2lkCisgIGNsb25lKCk6IE9iamVjdAorICBlcXVhbHMoT2JqZWN0KTogYm9vbGVhbgorICBbZmZmKCk6IHZvaWRdCisgIGZpbmFsaXplKCk6IHZvaWQKKyAgZ2V0Q2xhc3MoKTogQ2xhc3M8Pz4KKyAgaGFzaENvZGUoKTogaW50CisgIG5vdGlmeSgpOiB2b2lkCisgIG5vdGlmeUFsbCgpOiB2b2lkCisgIHRvU3RyaW5nKCk6IFN0cmluZworICB3YWl0KCk6IHZvaWQKKyAgd2FpdChsb25nKTogdm9pZAorICB3YWl0KGxvbmcsIGludCk6IHZvaWQKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9maWxlU3RydWN0dXJlL3NlbGVjdGlvbi9Bbm9ueW1vdXMuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9maWxlU3RydWN0dXJlL3NlbGVjdGlvbi9Bbm9ueW1vdXMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NTA0YmYwCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2ZpbGVTdHJ1Y3R1cmUvc2VsZWN0aW9uL0Fub255bW91cy5qYXZhCkBAIC0wLDAgKzEsOCBAQAorY2xhc3MgQW5vbnltb3VzIHsKKyAgaW50IG51bTE7CisgIGludCBudW0yOworICBPYmplY3QgbyA9IG5ldyBPYmplY3QoKXs8Y2FyZXQ+fTsKKworICBBbm9ueW1vdXMoKSB7fQorICB2b2lkIGZvbygpIHt9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2ZpbGVTdHJ1Y3R1cmUvc2VsZWN0aW9uL0Fub255bW91cy50cmVlIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2ZpbGVTdHJ1Y3R1cmUvc2VsZWN0aW9uL0Fub255bW91cy50cmVlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJmNzRmOWEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvZmlsZVN0cnVjdHVyZS9zZWxlY3Rpb24vQW5vbnltb3VzLnRyZWUKQEAgLTAsMCArMSw4IEBACistQW5vbnltb3VzLmphdmEKKyAtQW5vbnltb3VzCisgIEFub255bW91cygpCisgIGZvbygpOiB2b2lkCisgIG51bTE6IGludAorICBudW0yOiBpbnQKKyAgLVtvOiBPYmplY3QgPSBuZXcgT2JqZWN0KCkgey4uLn1dCisgICAkMQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9maWxlU3RydWN0dXJlL3NlbGVjdGlvbi9Bbm9ueW1vdXNJbkFub255bW91cy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2ZpbGVTdHJ1Y3R1cmUvc2VsZWN0aW9uL0Fub255bW91c0luQW5vbnltb3VzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWJmZWZmNwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9maWxlU3RydWN0dXJlL3NlbGVjdGlvbi9Bbm9ueW1vdXNJbkFub255bW91cy5qYXZhCkBAIC0wLDAgKzEsMTUgQEAKK2NsYXNzIEFub255bW91c0luQW5vbnltb3VzIHsKKyAgaW50IG51bTE7CisgIGludCBudW0yOworCisgIEFub255bW91c0luQW5vbnltb3VzKCkge30KKyAgdm9pZCBmb28oKSB7CisgICAgbmV3IE9iamVjdCgpIHsKKyAgICAgICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgeworICAgICAgICAgcmV0dXJuIG5ldyBPYmplY3QoKXsKKyAgICAgICAgICAgdm9pZCBtZXRob2QoKSB7PGNhcmV0Pn0KKyAgICAgICAgIH0udG9TdHJpbmcoKTsKKyAgICAgICB9CisgICAgfTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9maWxlU3RydWN0dXJlL3NlbGVjdGlvbi9Bbm9ueW1vdXNJbkFub255bW91cy50cmVlIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2ZpbGVTdHJ1Y3R1cmUvc2VsZWN0aW9uL0Fub255bW91c0luQW5vbnltb3VzLnRyZWUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWNkZTg2OQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9maWxlU3RydWN0dXJlL3NlbGVjdGlvbi9Bbm9ueW1vdXNJbkFub255bW91cy50cmVlCkBAIC0wLDAgKzEsMTAgQEAKKy1Bbm9ueW1vdXNJbkFub255bW91cy5qYXZhCisgLUFub255bW91c0luQW5vbnltb3VzCisgIEFub255bW91c0luQW5vbnltb3VzKCkKKyAgLWZvbygpOiB2b2lkCisgICAtJDEKKyAgICAtdG9TdHJpbmcoKTogU3RyaW5nCisgICAgIC0kMQorICAgICAgW21ldGhvZCgpOiB2b2lkXQorICBudW0xOiBpbnQKKyAgbnVtMjogaW50ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2ZpbGVTdHJ1Y3R1cmUvc2VsZWN0aW9uL0NvbnN0cnVjdG9yLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvZmlsZVN0cnVjdHVyZS9zZWxlY3Rpb24vQ29uc3RydWN0b3IuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NWE1ZjAyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2ZpbGVTdHJ1Y3R1cmUvc2VsZWN0aW9uL0NvbnN0cnVjdG9yLmphdmEKQEAgLTAsMCArMSw3IEBACitjbGFzcyBDb25zdHJ1Y3RvciB7CisgIGludCBudW0xOworICBpbnQgbnVtMjsKKworICBDb25zdHJ1Y3RvcigpIHs8Y2FyZXQ+fQorICB2b2lkIGZvbygpIHt9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2ZpbGVTdHJ1Y3R1cmUvc2VsZWN0aW9uL0NvbnN0cnVjdG9yLnRyZWUgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvZmlsZVN0cnVjdHVyZS9zZWxlY3Rpb24vQ29uc3RydWN0b3IudHJlZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYjU3YzkwCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2ZpbGVTdHJ1Y3R1cmUvc2VsZWN0aW9uL0NvbnN0cnVjdG9yLnRyZWUKQEAgLTAsMCArMSw2IEBACistQ29uc3RydWN0b3IuamF2YQorIC1Db25zdHJ1Y3RvcgorICBbQ29uc3RydWN0b3IoKV0KKyAgZm9vKCk6IHZvaWQKKyAgbnVtMTogaW50CisgIG51bTI6IGludApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9maWxlU3RydWN0dXJlL3NlbGVjdGlvbi9GaWVsZC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2ZpbGVTdHJ1Y3R1cmUvc2VsZWN0aW9uL0ZpZWxkLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzVlNWZlYQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9maWxlU3RydWN0dXJlL3NlbGVjdGlvbi9GaWVsZC5qYXZhCkBAIC0wLDAgKzEsNyBAQAorY2xhc3MgRmllbGQgeworICBpbnQgbnVtMTsKKyAgaW50IDxjYXJldD5udW0yOworCisgIEZpZWxkKCkge30KKyAgdm9pZCBmb28oKSB7fQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9maWxlU3RydWN0dXJlL3NlbGVjdGlvbi9GaWVsZC50cmVlIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2ZpbGVTdHJ1Y3R1cmUvc2VsZWN0aW9uL0ZpZWxkLnRyZWUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjg5MTdjNwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9maWxlU3RydWN0dXJlL3NlbGVjdGlvbi9GaWVsZC50cmVlCkBAIC0wLDAgKzEsNiBAQAorLUZpZWxkLmphdmEKKyAtRmllbGQKKyAgRmllbGQoKQorICBmb28oKTogdm9pZAorICBudW0xOiBpbnQKKyAgW251bTI6IGludF0KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9maWxlU3RydWN0dXJlL3NlbGVjdGlvbi9JbnNpZGVDbGFzcy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2ZpbGVTdHJ1Y3R1cmUvc2VsZWN0aW9uL0luc2lkZUNsYXNzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWZjMDZjMGUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvZmlsZVN0cnVjdHVyZS9zZWxlY3Rpb24vSW5zaWRlQ2xhc3MuamF2YQpAQCAtMCwwICsxLDcgQEAKK2NsYXNzIEluc2lkZUNsYXNzIHsKKyAgaW50IG51bTE7CisgIGludCBudW0yOworICA8Y2FyZXQ+CisgIEluc2lkZUNsYXNzKCkge30KKyAgdm9pZCBmb28oKSB7fQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9maWxlU3RydWN0dXJlL3NlbGVjdGlvbi9JbnNpZGVDbGFzcy50cmVlIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2ZpbGVTdHJ1Y3R1cmUvc2VsZWN0aW9uL0luc2lkZUNsYXNzLnRyZWUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjZjZGMzNAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9maWxlU3RydWN0dXJlL3NlbGVjdGlvbi9JbnNpZGVDbGFzcy50cmVlCkBAIC0wLDAgKzEsNiBAQAorLUluc2lkZUNsYXNzLmphdmEKKyAtW0luc2lkZUNsYXNzXQorICBJbnNpZGVDbGFzcygpCisgIGZvbygpOiB2b2lkCisgIG51bTE6IGludAorICBudW0yOiBpbnQKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvZmlsZVN0cnVjdHVyZS9zZWxlY3Rpb24vTWV0aG9kLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvZmlsZVN0cnVjdHVyZS9zZWxlY3Rpb24vTWV0aG9kLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDFlNDdlMQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9maWxlU3RydWN0dXJlL3NlbGVjdGlvbi9NZXRob2QuamF2YQpAQCAtMCwwICsxLDcgQEAKK2NsYXNzIE1ldGhvZCB7CisgIGludCBudW0xOworICBpbnQgbnVtMjsKKworICBNZXRob2QoKSB7fQorICB2b2lkIGZvbygpIHs8Y2FyZXQ+fQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9maWxlU3RydWN0dXJlL3NlbGVjdGlvbi9NZXRob2QudHJlZSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9maWxlU3RydWN0dXJlL3NlbGVjdGlvbi9NZXRob2QudHJlZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMTY2NWNjCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2ZpbGVTdHJ1Y3R1cmUvc2VsZWN0aW9uL01ldGhvZC50cmVlCkBAIC0wLDAgKzEsNiBAQAorLU1ldGhvZC5qYXZhCisgLU1ldGhvZAorICBNZXRob2QoKQorICBbZm9vKCk6IHZvaWRdCisgIG51bTE6IGludAorICBudW0yOiBpbnQKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvZmluZC9maW5kSW5DbGFzc0hpZXJhcmNoeS9zcmMvQS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2ZpbmQvZmluZEluQ2xhc3NIaWVyYXJjaHkvc3JjL0EuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yODVmNTUxCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2ZpbmQvZmluZEluQ2xhc3NIaWVyYXJjaHkvc3JjL0EuamF2YQpAQCAtMCwwICsxLDE4IEBACitwdWJsaWMgY2xhc3MgQSB7CisgIHZvaWQgZm9vKE9iamVjdCBvKSB7CisgICAgaWYgKG8gaW5zdGFuY2VvZiBTdHJpbmcpe30KKyAgfQorfQorCitjbGFzcyBBSW1wbCBleHRlbmRzIEEgeworICB2b2lkIGZvbyhPYmplY3QgbykgeworICAgIGlmIChvIGluc3RhbmNlb2YgU3RyaW5nKXt9CisgIH0KK30KKworY2xhc3MgQiB7CisgIHZvaWQgYmFyKE9iamVjdCBvKSB7CisgICAgaWYgKG8gaW5zdGFuY2VvZiBTdHJpbmcpe30KKyAgfQorfQorCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvZmluZC9maW5kSW5QYXRoL3NyYy9zLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvZmluZC9maW5kSW5QYXRoL3NyYy9zLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDIzMDYwMQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9maW5kL2ZpbmRJblBhdGgvc3JjL3MuamF2YQpAQCAtMCwwICsxLDMgQEAKK2NsYXNzIHMgeworIFN0cmluZyBzID0gInh4Lnl5IjsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvZmluZC9maW5kSW5QYXRoL3NyYy94L2RkLnByb3BlcnRpZXMgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvZmluZC9maW5kSW5QYXRoL3NyYy94L2RkLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjJlOWI4MgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9maW5kL2ZpbmRJblBhdGgvc3JjL3gvZGQucHJvcGVydGllcwpAQCAtMCwwICsxLDMgQEAKK3h4Lnl5PXp6enoKK2FhYS5iYmI9enp6CitjY2NjPWMKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvZmluZC9maW5kTWFuYWdlci9zcmMvdGVzdC9GaW5kVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2ZpbmQvZmluZE1hbmFnZXIvc3JjL3Rlc3QvRmluZFRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42Y2Q1OWZmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2ZpbmQvZmluZE1hbmFnZXIvc3JjL3Rlc3QvRmluZFRlc3QuamF2YQpAQCAtMCwwICsxLDExIEBACitwYWNrYWdlIHRlc3Q7CitwdWJsaWMgY2xhc3MgRmluZFRlc3QgeworICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIgZG9uZSIpOworLy9kb25lCisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiZG9uZSIpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIiBkb25lIik7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiIGRvbmUyIik7CisvL2RvbmUhCisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9maW5kL2ZpbmRNYW5hZ2VyL3NyYzEvdGVzdHMvRmluZFRlc3RzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvZmluZC9maW5kTWFuYWdlci9zcmMxL3Rlc3RzL0ZpbmRUZXN0cy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY1N2JlY2QKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvZmluZC9maW5kTWFuYWdlci9zcmMxL3Rlc3RzL0ZpbmRUZXN0cy5qYXZhCkBAIC0wLDAgKzEsMTEgQEAKK3BhY2thZ2UgdGVzdHM7CitwdWJsaWMgY2xhc3MgRmluZFRlc3RzIHsKKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiIGRvbmUiKTsKKy8vZG9uZQorICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImRvbmUiKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIgZG9uZSIpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIiBkb25lMiIpOworLy9kb25lIQorICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvZmluZC9saWJVbmRlclByb2plY3QvbGliL0IuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9maW5kL2xpYlVuZGVyUHJvamVjdC9saWIvQi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYzNGIzMTgKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvZmluZC9saWJVbmRlclByb2plY3QvbGliL0IuamF2YQpAQCAtMCwwICsxIEBACisvLyBUYXJnZXRXb3JkClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2ZpbmQvbGliVW5kZXJQcm9qZWN0L3NyYy9BLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvZmluZC9saWJVbmRlclByb2plY3Qvc3JjL0EuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MzRiMzE4Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2ZpbmQvbGliVW5kZXJQcm9qZWN0L3NyYy9BLmphdmEKQEAgLTAsMCArMSBAQAorLy8gVGFyZ2V0V29yZApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pZGUvZmlsZVRlbXBsYXRlcy8xLm91dC50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaWRlL2ZpbGVUZW1wbGF0ZXMvMS5vdXQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNjYmUxNDMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaWRlL2ZpbGVUZW1wbGF0ZXMvMS5vdXQudHh0CkBAIC0wLDAgKzEsOSBAQAorIC8qCisgKiAkQXV0aG9yJAorICogJElkJAorICogQGF1dGhvciBNaXNoYSBZYWtvdmxldgorICogQHZlcnNpb24gJFJldmlzaW9uJAorKi8KK3BhY2thZ2UgY29tLmlkZWE7CitwdWJsaWMgY2xhc3MgTXlDbGFzcyB7Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaWRlL2ZpbGVUZW1wbGF0ZXMvMS5wcm9wLnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pZGUvZmlsZVRlbXBsYXRlcy8xLnByb3AudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQxYWM5YjYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaWRlL2ZpbGVUZW1wbGF0ZXMvMS5wcm9wLnR4dApAQCAtMCwwICsxLDMgQEAKK0F1dGhvcj1NaXNoYSBZYWtvdmxldgorUEFDS0FHRV9OQU1FPWNvbS5pZGVhCitOYW1lPU15Q2xhc3MKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pZGUvZmlsZVRlbXBsYXRlcy8xLnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pZGUvZmlsZVRlbXBsYXRlcy8xLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zM2E4NmI2Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2lkZS9maWxlVGVtcGxhdGVzLzEudHh0CkBAIC0wLDAgKzEsOSBAQAorIC8qCisgKiBcJEF1dGhvciQKKyAqICRJZCQKKyAqIEBhdXRob3IgJEF1dGhvcgorICogQHZlcnNpb24gJFJldmlzaW9uJAorKi8KK3BhY2thZ2UgJHtQQUNLQUdFX05BTUV9OworcHVibGljIGNsYXNzICR7TmFtZX0geworfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2lkZS9maWxlVGVtcGxhdGVzLzIub3V0LnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pZGUvZmlsZVRlbXBsYXRlcy8yLm91dC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWJiNmU2YgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pZGUvZmlsZVRlbXBsYXRlcy8yLm91dC50eHQKQEAgLTAsMCArMSw1IEBACisvLyBNeUNsYXNzLmphdmEKKy8vICRBdXRob3IkCisvLyBDcmVhdGVkIG9uIDMxLURlYy0yMDAyIGJ5IG15YWtvdmxldgorcGFja2FnZSBjb20uaWRlYTsKK3B1YmxpYyBjbGFzcyBNeUNsYXNzIHsgfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2lkZS9maWxlVGVtcGxhdGVzLzIucHJvcC50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaWRlL2ZpbGVUZW1wbGF0ZXMvMi5wcm9wLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNWIwOTRhCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2lkZS9maWxlVGVtcGxhdGVzLzIucHJvcC50eHQKQEAgLTAsMCArMSw0IEBACitOQU1FPU15Q2xhc3MKK0RBVEU9MzEtRGVjLTIwMDIKK1VTRVI9bXlha292bGV2CitQQUNLQUdFX05BTUU9Y29tLmlkZWEKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pZGUvZmlsZVRlbXBsYXRlcy8yLnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pZGUvZmlsZVRlbXBsYXRlcy8yLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iODEyODg1Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2lkZS9maWxlVGVtcGxhdGVzLzIudHh0CkBAIC0wLDAgKzEsNSBAQAorLy8gJHtOQU1FfS5qYXZhCisvLyAkQXV0aG9yJAorLy8gQ3JlYXRlZCBvbiAkREFURSBieSAkVVNFUgorcGFja2FnZSAkUEFDS0FHRV9OQU1FOworcHVibGljIGNsYXNzICROQU1FIHsgfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2lkZS9maWxlVGVtcGxhdGVzLzMub3V0LnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pZGUvZmlsZVRlbXBsYXRlcy8zLm91dC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjNjNTM2OQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pZGUvZmlsZVRlbXBsYXRlcy8zLm91dC50eHQKQEAgLTAsMCArMSw4IEBACitwYWNrYWdlIGNvbS5pZGVhOworCisvKgorICogJExvZyQKKyAqIEB2ZXJzaW9uICRJZCQKKyAqLworcHVibGljIGNsYXNzIE15Q2xhc3MgeworfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2lkZS9maWxlVGVtcGxhdGVzLzMucHJvcC50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaWRlL2ZpbGVUZW1wbGF0ZXMvMy5wcm9wLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZDk1MjQxCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2lkZS9maWxlVGVtcGxhdGVzLzMucHJvcC50eHQKQEAgLTAsMCArMSwyIEBACitOQU1FPU15Q2xhc3MKK1BBQ0tBR0VfTkFNRT1jb20uaWRlYQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2lkZS9maWxlVGVtcGxhdGVzLzMudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2lkZS9maWxlVGVtcGxhdGVzLzMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMzMzYwZDcKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaWRlL2ZpbGVUZW1wbGF0ZXMvMy50eHQKQEAgLTAsMCArMSw4IEBACitwYWNrYWdlICR7UEFDS0FHRV9OQU1FfTsKKworLyoKKyAqICRMb2ckCisgKiBAdmVyc2lvbiAkSWQkCisgKi8KK3B1YmxpYyBjbGFzcyAke05BTUV9IHsKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pZGUvZmlsZVRlbXBsYXRlcy80Lm91dC50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaWRlL2ZpbGVUZW1wbGF0ZXMvNC5vdXQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBhNzI0YTQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaWRlL2ZpbGVUZW1wbGF0ZXMvNC5vdXQudHh0CkBAIC0wLDAgKzEsMiBAQAorPGM6b3V0IHZhbHVlPSIke21vZGVsLm5hbWV9Ii8+CisKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pZGUvZmlsZVRlbXBsYXRlcy80LnByb3AudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2lkZS9maWxlVGVtcGxhdGVzLzQucHJvcC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTM5NTk3ZgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pZGUvZmlsZVRlbXBsYXRlcy80LnByb3AudHh0CkBAIC0wLDAgKzEsMiBAQAorCisKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pZGUvZmlsZVRlbXBsYXRlcy80LnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pZGUvZmlsZVRlbXBsYXRlcy80LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYTcyNGE0Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2lkZS9maWxlVGVtcGxhdGVzLzQudHh0CkBAIC0wLDAgKzEsMiBAQAorPGM6b3V0IHZhbHVlPSIke21vZGVsLm5hbWV9Ii8+CisKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pZGUvZmlsZVRlbXBsYXRlcy81Lm91dC50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaWRlL2ZpbGVUZW1wbGF0ZXMvNS5vdXQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI1NGE0YTAKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaWRlL2ZpbGVUZW1wbGF0ZXMvNS5vdXQudHh0CkBAIC0wLDAgKzEsMTMgQEAKKyAvKgorICogdmVuJAorICogJElkJAorICogQGF1dGhvciB2ZW4KKyAqIEB2ZXJzaW9uICRSZXZpc2lvbiQKKyAqIFRoaXMgaXMgYSBmaWxlIGhlYWRlcgorKi8KK3BhY2thZ2UgY29tLmlkZWE7CitwdWJsaWMgY2xhc3MgTXlDbGFzcyB7CisgIC8vIFdoYXQgYSB3b25kZXJmdWwgd29ybGQhCisgIC8vIHZlbgorICAvLyAke215Lm5hbWV9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaWRlL2ZpbGVUZW1wbGF0ZXMvNS5wcm9wLnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pZGUvZmlsZVRlbXBsYXRlcy81LnByb3AudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYzMjUyNTAKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaWRlL2ZpbGVUZW1wbGF0ZXMvNS5wcm9wLnR4dApAQCAtMCwwICsxLDMgQEAKK0F1dGhvcj12ZW4KK1BBQ0tBR0VfTkFNRT1jb20uaWRlYQorTmFtZT1NeUNsYXNzCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaWRlL2ZpbGVUZW1wbGF0ZXMvNS50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaWRlL2ZpbGVUZW1wbGF0ZXMvNS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTBmODM2MjEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaWRlL2ZpbGVUZW1wbGF0ZXMvNS50eHQKQEAgLTAsMCArMSw3IEBACisjcGFyc2UoImluY2x1ZGUxLmluYy50eHQiKQorcGFja2FnZSAke1BBQ0tBR0VfTkFNRX07CitwdWJsaWMgY2xhc3MgJHtOYW1lfSB7CisgIC8vIFdoYXQgYSB3b25kZXJmdWwgd29ybGQhCisgIC8vICRBdXRob3IKKyAgLy8gJHtteS5uYW1lfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2lkZS9maWxlVGVtcGxhdGVzL2luY2x1ZGUxLmluYy50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaWRlL2ZpbGVUZW1wbGF0ZXMvaW5jbHVkZTEuaW5jLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYmU4YWE4Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2lkZS9maWxlVGVtcGxhdGVzL2luY2x1ZGUxLmluYy50eHQKQEAgLTAsMCArMSw3IEBACisgLyoKKyAqICRBdXRob3IkCisgKiAkSWQkCisgKiBAYXV0aG9yICRBdXRob3IKKyAqIEB2ZXJzaW9uICRSZXZpc2lvbiQKKyAqIFRoaXMgaXMgYSBmaWxlIGhlYWRlcgorKi8KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pZGUvaGllcmFyY2h5L2NhbGwvSWRlYURldjQxMDA1L0EuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pZGUvaGllcmFyY2h5L2NhbGwvSWRlYURldjQxMDA1L0EuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMDA3NjlmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2lkZS9oaWVyYXJjaHkvY2FsbC9JZGVhRGV2NDEwMDUvQS5qYXZhCkBAIC0wLDAgKzEsNiBAQAorY2xhc3MgQSB7CisgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKyAgICBEIGQgPSBuZXcgRCgpOworICAgIGQueHl6enkoKTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2lkZS9oaWVyYXJjaHkvY2FsbC9JZGVhRGV2NDEwMDUvQi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2lkZS9oaWVyYXJjaHkvY2FsbC9JZGVhRGV2NDEwMDUvQi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgwNWU5OWIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaWRlL2hpZXJhcmNoeS9jYWxsL0lkZWFEZXY0MTAwNS9CLmphdmEKQEAgLTAsMCArMSw0IEBACitjbGFzcyBCIHsKKyAgcHVibGljIHZvaWQgeHl6enkoKSB7CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pZGUvaGllcmFyY2h5L2NhbGwvSWRlYURldjQxMDA1L0QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pZGUvaGllcmFyY2h5L2NhbGwvSWRlYURldjQxMDA1L0QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zODExMzRmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2lkZS9oaWVyYXJjaHkvY2FsbC9JZGVhRGV2NDEwMDUvRC5qYXZhCkBAIC0wLDAgKzEsMiBAQAorY2xhc3MgRCBleHRlbmRzIEIgeworfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2lkZS9oaWVyYXJjaHkvY2FsbC9JZGVhRGV2NDEwMDUvSWRlYURldjQxMDA1X3ZlcmlmaWNhdGlvbi54bWwgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaWRlL2hpZXJhcmNoeS9jYWxsL0lkZWFEZXY0MTAwNS9JZGVhRGV2NDEwMDVfdmVyaWZpY2F0aW9uLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NmUyOTU0Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2lkZS9oaWVyYXJjaHkvY2FsbC9JZGVhRGV2NDEwMDUvSWRlYURldjQxMDA1X3ZlcmlmaWNhdGlvbi54bWwKQEAgLTAsMCArMSw0IEBACis8bm9kZSB0ZXh0PSJCLnh5enp5KCkgICgpIiBiYXNlPSJ0cnVlIj4KKyAgPG5vZGUgdGV4dD0iQS5tYWluKFN0cmluZ1tdKSAgKCkiPgorICA8L25vZGU+Cis8L25vZGU+CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaWRlL2hpZXJhcmNoeS9jYWxsL0lkZWFEZXY0MTAwNV9Jbmhlcml0YW5jZS9BLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaWRlL2hpZXJhcmNoeS9jYWxsL0lkZWFEZXY0MTAwNV9Jbmhlcml0YW5jZS9BLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDI1NTdhNzkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaWRlL2hpZXJhcmNoeS9jYWxsL0lkZWFEZXY0MTAwNV9Jbmhlcml0YW5jZS9BLmphdmEKQEAgLTAsMCArMSw5IEBACitjbGFzcyBBIHsKKyAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworICAgIEQgZCA9IG5ldyBEKCk7CisgICAgZC54eXp6eSgpOworCisgICAgQyBjID0gbmV3IEMoKTsKKyAgICBjLnh5enp5KCk7CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pZGUvaGllcmFyY2h5L2NhbGwvSWRlYURldjQxMDA1X0luaGVyaXRhbmNlL0IuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pZGUvaGllcmFyY2h5L2NhbGwvSWRlYURldjQxMDA1X0luaGVyaXRhbmNlL0IuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MDVlOTliCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2lkZS9oaWVyYXJjaHkvY2FsbC9JZGVhRGV2NDEwMDVfSW5oZXJpdGFuY2UvQi5qYXZhCkBAIC0wLDAgKzEsNCBAQAorY2xhc3MgQiB7CisgIHB1YmxpYyB2b2lkIHh5enp5KCkgeworICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaWRlL2hpZXJhcmNoeS9jYWxsL0lkZWFEZXY0MTAwNV9Jbmhlcml0YW5jZS9DLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaWRlL2hpZXJhcmNoeS9jYWxsL0lkZWFEZXY0MTAwNV9Jbmhlcml0YW5jZS9DLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmU0Y2ZjMQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pZGUvaGllcmFyY2h5L2NhbGwvSWRlYURldjQxMDA1X0luaGVyaXRhbmNlL0MuamF2YQpAQCAtMCwwICsxLDIgQEAKK2NsYXNzIEMgZXh0ZW5kcyBCIHsKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pZGUvaGllcmFyY2h5L2NhbGwvSWRlYURldjQxMDA1X0luaGVyaXRhbmNlL0QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pZGUvaGllcmFyY2h5L2NhbGwvSWRlYURldjQxMDA1X0luaGVyaXRhbmNlL0QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZjEwNDExCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2lkZS9oaWVyYXJjaHkvY2FsbC9JZGVhRGV2NDEwMDVfSW5oZXJpdGFuY2UvRC5qYXZhCkBAIC0wLDAgKzEsNCBAQAorY2xhc3MgRCBleHRlbmRzIEIgeworICBwdWJsaWMgdm9pZCB4eXp6eSgpIHsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2lkZS9oaWVyYXJjaHkvY2FsbC9JZGVhRGV2NDEwMDVfSW5oZXJpdGFuY2UvSWRlYURldjQxMDA1X0luaGVyaXRhbmNlX3ZlcmlmaWNhdGlvbi54bWwgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaWRlL2hpZXJhcmNoeS9jYWxsL0lkZWFEZXY0MTAwNV9Jbmhlcml0YW5jZS9JZGVhRGV2NDEwMDVfSW5oZXJpdGFuY2VfdmVyaWZpY2F0aW9uLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNjdmOTU0Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2lkZS9oaWVyYXJjaHkvY2FsbC9JZGVhRGV2NDEwMDVfSW5oZXJpdGFuY2UvSWRlYURldjQxMDA1X0luaGVyaXRhbmNlX3ZlcmlmaWNhdGlvbi54bWwKQEAgLTAsMCArMSw0IEBACis8bm9kZSB0ZXh0PSJELnh5enp5KCkgICgpIiBiYXNlPSJ0cnVlIj4KKyAgPG5vZGUgdGV4dD0iQS5tYWluKFN0cmluZ1tdKSgyIHVzYWdlcykgICgpIj4KKyAgPC9ub2RlPgorPC9ub2RlPgpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2lkZS9oaWVyYXJjaHkvY2FsbC9JZGVhRGV2NDEwMDVfU2libGluZy9BLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaWRlL2hpZXJhcmNoeS9jYWxsL0lkZWFEZXY0MTAwNV9TaWJsaW5nL0EuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMjU1N2E3OQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pZGUvaGllcmFyY2h5L2NhbGwvSWRlYURldjQxMDA1X1NpYmxpbmcvQS5qYXZhCkBAIC0wLDAgKzEsOSBAQAorY2xhc3MgQSB7CisgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKyAgICBEIGQgPSBuZXcgRCgpOworICAgIGQueHl6enkoKTsKKworICAgIEMgYyA9IG5ldyBDKCk7CisgICAgYy54eXp6eSgpOworICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaWRlL2hpZXJhcmNoeS9jYWxsL0lkZWFEZXY0MTAwNV9TaWJsaW5nL0IuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pZGUvaGllcmFyY2h5L2NhbGwvSWRlYURldjQxMDA1X1NpYmxpbmcvQi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgwNWU5OWIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaWRlL2hpZXJhcmNoeS9jYWxsL0lkZWFEZXY0MTAwNV9TaWJsaW5nL0IuamF2YQpAQCAtMCwwICsxLDQgQEAKK2NsYXNzIEIgeworICBwdWJsaWMgdm9pZCB4eXp6eSgpIHsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2lkZS9oaWVyYXJjaHkvY2FsbC9JZGVhRGV2NDEwMDVfU2libGluZy9DLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaWRlL2hpZXJhcmNoeS9jYWxsL0lkZWFEZXY0MTAwNV9TaWJsaW5nL0MuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYTE2ZGQxCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2lkZS9oaWVyYXJjaHkvY2FsbC9JZGVhRGV2NDEwMDVfU2libGluZy9DLmphdmEKQEAgLTAsMCArMSw0IEBACitjbGFzcyBDIGV4dGVuZHMgQiB7CisgIHB1YmxpYyB2b2lkIHh5enp5KCkgeworICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaWRlL2hpZXJhcmNoeS9jYWxsL0lkZWFEZXY0MTAwNV9TaWJsaW5nL0QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pZGUvaGllcmFyY2h5L2NhbGwvSWRlYURldjQxMDA1X1NpYmxpbmcvRC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVmMTA0MTEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaWRlL2hpZXJhcmNoeS9jYWxsL0lkZWFEZXY0MTAwNV9TaWJsaW5nL0QuamF2YQpAQCAtMCwwICsxLDQgQEAKK2NsYXNzIEQgZXh0ZW5kcyBCIHsKKyAgcHVibGljIHZvaWQgeHl6enkoKSB7CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pZGUvaGllcmFyY2h5L2NhbGwvSWRlYURldjQxMDA1X1NpYmxpbmcvSWRlYURldjQxMDA1X1NpYmxpbmdfdmVyaWZpY2F0aW9uLnhtbCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pZGUvaGllcmFyY2h5L2NhbGwvSWRlYURldjQxMDA1X1NpYmxpbmcvSWRlYURldjQxMDA1X1NpYmxpbmdfdmVyaWZpY2F0aW9uLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMjZjZjAwCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2lkZS9oaWVyYXJjaHkvY2FsbC9JZGVhRGV2NDEwMDVfU2libGluZy9JZGVhRGV2NDEwMDVfU2libGluZ192ZXJpZmljYXRpb24ueG1sCkBAIC0wLDAgKzEsNCBAQAorPG5vZGUgdGV4dD0iRC54eXp6eSgpICAoKSIgYmFzZT0idHJ1ZSI+CisgIDxub2RlIHRleHQ9IkEubWFpbihTdHJpbmdbXSkgICgpIj4KKyAgPC9ub2RlPgorPC9ub2RlPgpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2lkZS9oaWVyYXJjaHkvY2FsbC9JZGVhRGV2NDEwMDVfU2libGluZ1VuZGVySW5oZXJpdGFuY2UvQS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2lkZS9oaWVyYXJjaHkvY2FsbC9JZGVhRGV2NDEwMDVfU2libGluZ1VuZGVySW5oZXJpdGFuY2UvQS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU3NjhiNWUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaWRlL2hpZXJhcmNoeS9jYWxsL0lkZWFEZXY0MTAwNV9TaWJsaW5nVW5kZXJJbmhlcml0YW5jZS9BLmphdmEKQEAgLTAsMCArMSw5IEBACitjbGFzcyBBIHsKKyAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworICAgIEQgZCA9IG5ldyBEKCk7CisgICAgZC54eXp6eSgpOworCisgICAgQ0NoaWxkIGMgPSBuZXcgQ0NoaWxkKCk7CisgICAgYy54eXp6eSgpOworICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaWRlL2hpZXJhcmNoeS9jYWxsL0lkZWFEZXY0MTAwNV9TaWJsaW5nVW5kZXJJbmhlcml0YW5jZS9CLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaWRlL2hpZXJhcmNoeS9jYWxsL0lkZWFEZXY0MTAwNV9TaWJsaW5nVW5kZXJJbmhlcml0YW5jZS9CLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODA1ZTk5YgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pZGUvaGllcmFyY2h5L2NhbGwvSWRlYURldjQxMDA1X1NpYmxpbmdVbmRlckluaGVyaXRhbmNlL0IuamF2YQpAQCAtMCwwICsxLDQgQEAKK2NsYXNzIEIgeworICBwdWJsaWMgdm9pZCB4eXp6eSgpIHsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2lkZS9oaWVyYXJjaHkvY2FsbC9JZGVhRGV2NDEwMDVfU2libGluZ1VuZGVySW5oZXJpdGFuY2UvQy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2lkZS9oaWVyYXJjaHkvY2FsbC9JZGVhRGV2NDEwMDVfU2libGluZ1VuZGVySW5oZXJpdGFuY2UvQy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFhMTZkZDEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaWRlL2hpZXJhcmNoeS9jYWxsL0lkZWFEZXY0MTAwNV9TaWJsaW5nVW5kZXJJbmhlcml0YW5jZS9DLmphdmEKQEAgLTAsMCArMSw0IEBACitjbGFzcyBDIGV4dGVuZHMgQiB7CisgIHB1YmxpYyB2b2lkIHh5enp5KCkgeworICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaWRlL2hpZXJhcmNoeS9jYWxsL0lkZWFEZXY0MTAwNV9TaWJsaW5nVW5kZXJJbmhlcml0YW5jZS9DQ2hpbGQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pZGUvaGllcmFyY2h5L2NhbGwvSWRlYURldjQxMDA1X1NpYmxpbmdVbmRlckluaGVyaXRhbmNlL0NDaGlsZC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQxZWY3ZTgKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaWRlL2hpZXJhcmNoeS9jYWxsL0lkZWFEZXY0MTAwNV9TaWJsaW5nVW5kZXJJbmhlcml0YW5jZS9DQ2hpbGQuamF2YQpAQCAtMCwwICsxLDIgQEAKK2NsYXNzIENDaGlsZCBleHRlbmRzIEMgeworfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2lkZS9oaWVyYXJjaHkvY2FsbC9JZGVhRGV2NDEwMDVfU2libGluZ1VuZGVySW5oZXJpdGFuY2UvRC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2lkZS9oaWVyYXJjaHkvY2FsbC9JZGVhRGV2NDEwMDVfU2libGluZ1VuZGVySW5oZXJpdGFuY2UvRC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVmMTA0MTEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaWRlL2hpZXJhcmNoeS9jYWxsL0lkZWFEZXY0MTAwNV9TaWJsaW5nVW5kZXJJbmhlcml0YW5jZS9ELmphdmEKQEAgLTAsMCArMSw0IEBACitjbGFzcyBEIGV4dGVuZHMgQiB7CisgIHB1YmxpYyB2b2lkIHh5enp5KCkgeworICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaWRlL2hpZXJhcmNoeS9jYWxsL0lkZWFEZXY0MTAwNV9TaWJsaW5nVW5kZXJJbmhlcml0YW5jZS9JZGVhRGV2NDEwMDVfU2libGluZ1VuZGVySW5oZXJpdGFuY2VfdmVyaWZpY2F0aW9uLnhtbCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pZGUvaGllcmFyY2h5L2NhbGwvSWRlYURldjQxMDA1X1NpYmxpbmdVbmRlckluaGVyaXRhbmNlL0lkZWFEZXY0MTAwNV9TaWJsaW5nVW5kZXJJbmhlcml0YW5jZV92ZXJpZmljYXRpb24ueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAyNmNmMDAKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaWRlL2hpZXJhcmNoeS9jYWxsL0lkZWFEZXY0MTAwNV9TaWJsaW5nVW5kZXJJbmhlcml0YW5jZS9JZGVhRGV2NDEwMDVfU2libGluZ1VuZGVySW5oZXJpdGFuY2VfdmVyaWZpY2F0aW9uLnhtbApAQCAtMCwwICsxLDQgQEAKKzxub2RlIHRleHQ9IkQueHl6enkoKSAgKCkiIGJhc2U9InRydWUiPgorICA8bm9kZSB0ZXh0PSJBLm1haW4oU3RyaW5nW10pICAoKSI+CisgIDwvbm9kZT4KKzwvbm9kZT4KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pZGUvaGllcmFyY2h5L2NhbGwvSWRlYURldjQxMjMyL0EuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pZGUvaGllcmFyY2h5L2NhbGwvSWRlYURldjQxMjMyL0EuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NzM0MDIwCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2lkZS9oaWVyYXJjaHkvY2FsbC9JZGVhRGV2NDEyMzIvQS5qYXZhCkBAIC0wLDAgKzEsNCBAQAorY2xhc3MgQSB7CisgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKCkgeworICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaWRlL2hpZXJhcmNoeS9jYWxsL0lkZWFEZXY0MTIzMi9CLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaWRlL2hpZXJhcmNoeS9jYWxsL0lkZWFEZXY0MTIzMi9CLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmU0MTJkMgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pZGUvaGllcmFyY2h5L2NhbGwvSWRlYURldjQxMjMyL0IuamF2YQpAQCAtMCwwICsxLDUgQEAKK2NsYXNzIEIgeworICBwdWJsaWMgdm9pZCB4eXp6eSgpIHsKKyAgICBBLm1haW4oKTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2lkZS9oaWVyYXJjaHkvY2FsbC9JZGVhRGV2NDEyMzIvSWRlYURldjQxMjMyX3ZlcmlmaWNhdGlvbi54bWwgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaWRlL2hpZXJhcmNoeS9jYWxsL0lkZWFEZXY0MTIzMi9JZGVhRGV2NDEyMzJfdmVyaWZpY2F0aW9uLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMzJmNmI4Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2lkZS9oaWVyYXJjaHkvY2FsbC9JZGVhRGV2NDEyMzIvSWRlYURldjQxMjMyX3ZlcmlmaWNhdGlvbi54bWwKQEAgLTAsMCArMSw0IEBACis8bm9kZSB0ZXh0PSJBLm1haW4oKSAgKCkiIGJhc2U9InRydWUiPgorICA8bm9kZSB0ZXh0PSJCLnh5enp5KCkgICgpIj4KKyAgPC9ub2RlPgorPC9ub2RlPgpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2lkZS9wbHVnaW5zL3BsdWdpbkRlc2NyaXB0b3IvYXNwLmphciBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pZGUvcGx1Z2lucy9wbHVnaW5EZXNjcmlwdG9yL2FzcC5qYXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjlhMWM2ZAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pZGUvcGx1Z2lucy9wbHVnaW5EZXNjcmlwdG9yL2FzcC5qYXIKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2lkZS9wbHVnaW5zL3BsdWdpbkRlc2NyaXB0b3IvcmVzb3VyY2VzX2VuLmphciBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pZGUvcGx1Z2lucy9wbHVnaW5EZXNjcmlwdG9yL3Jlc291cmNlc19lbi5qYXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjE0MjY0ZgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pZGUvcGx1Z2lucy9wbHVnaW5EZXNjcmlwdG9yL3Jlc291cmNlc19lbi5qYXIKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2lkZS9wbHVnaW5zL3Jlb3JkZXJKYXJzL2Fubm90YXRpb25zLmphciBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pZGUvcGx1Z2lucy9yZW9yZGVySmFycy9hbm5vdGF0aW9ucy5qYXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWYwYjk3YgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pZGUvcGx1Z2lucy9yZW9yZGVySmFycy9hbm5vdGF0aW9ucy5qYXIKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2lkZS9wbHVnaW5zL3Jlb3JkZXJKYXJzL29yZGVyLnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pZGUvcGx1Z2lucy9yZW9yZGVySmFycy9vcmRlci50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzE3M2UyZQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pZGUvcGx1Z2lucy9yZW9yZGVySmFycy9vcmRlci50eHQKQEAgLTAsMCArMSwyIEBACitvcmcvamV0YnJhaW5zL2Fubm90YXRpb25zL051bGxhYmxlLmNsYXNzOi9hbm5vdGF0aW9ucy5qYXIKK29yZy9qZXRicmFpbnMvYW5ub3RhdGlvbnMvTm90TnVsbC5jbGFzczovYW5ub3RhdGlvbnMuamFyCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaWRlL3BsdWdpbnMvcmVvcmRlckphcnMvemttLmphciBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pZGUvcGx1Z2lucy9yZW9yZGVySmFycy96a20uamFyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMxZDY2MjAKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaWRlL3BsdWdpbnMvcmVvcmRlckphcnMvemttLmphcgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaWRlL3BsdWdpbnMvcmVvcmRlckphcnMvemttT3JkZXIudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2lkZS9wbHVnaW5zL3Jlb3JkZXJKYXJzL3prbU9yZGVyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44N2UxNTQxCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2lkZS9wbHVnaW5zL3Jlb3JkZXJKYXJzL3prbU9yZGVyLnR4dApAQCAtMCwwICsxIEBACitjb20vaW50ZWxsaWovemttL1pLTUJ1bmRsZS5jbGFzczovemttLmphcgpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2lkZS9zb3VyY2VSb290RGV0ZWN0aW9uL2RlZmF1bHRQYWNrYWdlL3NyYy9NeUNsYXNzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaWRlL3NvdXJjZVJvb3REZXRlY3Rpb24vZGVmYXVsdFBhY2thZ2Uvc3JjL015Q2xhc3MuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNzE3ZWE0Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2lkZS9zb3VyY2VSb290RGV0ZWN0aW9uL2RlZmF1bHRQYWNrYWdlL3NyYy9NeUNsYXNzLmphdmEKQEAgLTAsMCArMSwyIEBACitwdWJsaWMgY2xhc3MgTXlDbGFzcyB7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2lkZS9zb3VyY2VSb290RGV0ZWN0aW9uL2RlZmF1bHRQYWNrYWdlV2l0aEltcG9ydC9zcmMvTXlDbGFzcy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2lkZS9zb3VyY2VSb290RGV0ZWN0aW9uL2RlZmF1bHRQYWNrYWdlV2l0aEltcG9ydC9zcmMvTXlDbGFzcy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmExZjhiNTkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaWRlL3NvdXJjZVJvb3REZXRlY3Rpb24vZGVmYXVsdFBhY2thZ2VXaXRoSW1wb3J0L3NyYy9NeUNsYXNzLmphdmEKQEAgLTAsMCArMSw5IEBACitpbXBvcnQgamF2YS51dGlsLio7CisvL2FhYQoraW1wb3J0IGphdmEuaW8uT3V0cHV0U3RyZWFtOworCisvKioKKyAqIG15IGNsYXNzCisgKi8KK3B1YmxpYyBjbGFzcyBNeUNsYXNzIHsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaWRlL3NvdXJjZVJvb3REZXRlY3Rpb24vZ2FyYmFnZS9FbXB0eUNsYXNzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaWRlL3NvdXJjZVJvb3REZXRlY3Rpb24vZ2FyYmFnZS9FbXB0eUNsYXNzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY5ZGUyOQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pZGUvc291cmNlUm9vdERldGVjdGlvbi9nYXJiYWdlL0VtcHR5Q2xhc3MuamF2YQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2lkZS9zb3VyY2VSb290RGV0ZWN0aW9uL2dhcmJhZ2UvR2FyYmFnZS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2lkZS9zb3VyY2VSb290RGV0ZWN0aW9uL2dhcmJhZ2UvR2FyYmFnZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ1OGFkYjAKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaWRlL3NvdXJjZVJvb3REZXRlY3Rpb24vZ2FyYmFnZS9HYXJiYWdlLmphdmEKQEAgLTAsMCArMSBAQAorZ2FyYmFnZQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pZGUvc291cmNlUm9vdERldGVjdGlvbi9zaW1wbGUvc3JjL3BhY2svTXlDbGFzcy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2lkZS9zb3VyY2VSb290RGV0ZWN0aW9uL3NpbXBsZS9zcmMvcGFjay9NeUNsYXNzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTU3OGU0NgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pZGUvc291cmNlUm9vdERldGVjdGlvbi9zaW1wbGUvc3JjL3BhY2svTXlDbGFzcy5qYXZhCkBAIC0wLDAgKzEsNSBAQAorLy9jb21tZW50CitwYWNrYWdlIHBhY2s7CisKK3B1YmxpYyBjbGFzcyBNeUNsYXNzIHsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaWRlL3NvdXJjZVJvb3REZXRlY3Rpb24vdHdvUm9vdHMvc3JjMS9hYmMvTXlDbGFzcy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2lkZS9zb3VyY2VSb290RGV0ZWN0aW9uL3R3b1Jvb3RzL3NyYzEvYWJjL015Q2xhc3MuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NTgxZjY4Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2lkZS9zb3VyY2VSb290RGV0ZWN0aW9uL3R3b1Jvb3RzL3NyYzEvYWJjL015Q2xhc3MuamF2YQpAQCAtMCwwICsxLDMgQEAKK3BhY2thZ2UgYWJjOworCitjbGFzcyBNeUNsYXNze30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaWRlL3NvdXJjZVJvb3REZXRlY3Rpb24vdHdvUm9vdHMvc3JjMi9DbGFzczIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pZGUvc291cmNlUm9vdERldGVjdGlvbi90d29Sb290cy9zcmMyL0NsYXNzMi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMxMDlhMzYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaWRlL3NvdXJjZVJvb3REZXRlY3Rpb24vdHdvUm9vdHMvc3JjMi9DbGFzczIuamF2YQpAQCAtMCwwICsxLDMgQEAKK3BhY2thZ2UgeHl6OworCitwdWJsaWMgY2xhc3MgQ2xhc3Mye30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaWRlL3NvdXJjZVJvb3REZXRlY3Rpb24vd2l0aFByZWZpeC9NeUNsYXNzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaWRlL3NvdXJjZVJvb3REZXRlY3Rpb24vd2l0aFByZWZpeC9NeUNsYXNzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTJiMjZlNQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pZGUvc291cmNlUm9vdERldGVjdGlvbi93aXRoUHJlZml4L015Q2xhc3MuamF2YQpAQCAtMCwwICsxLDQgQEAKK3BhY2thZ2UgeHh4Lnl5eTsKKworcHVibGljIGNsYXNzIE15Q2xhc3MgeworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2NhbkJlRmluYWwvU0NSNjA3My9leHBlY3RlZC54bWwgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9jYW5CZUZpbmFsL1NDUjYwNzMvZXhwZWN0ZWQueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNiMzRjNTYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9jYW5CZUZpbmFsL1NDUjYwNzMvZXhwZWN0ZWQueG1sCkBAIC0wLDAgKzEsOSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxwcm9ibGVtcz4KKyAgPHByb2JsZW0+CisgICAgPGZpbGU+QS5qYXZhPC9maWxlPgorICAgIDxsaW5lPjI8L2xpbmU+CisgICAgPGRlc2NyaXB0aW9uPmZpbmFsPC9kZXNjcmlwdGlvbj4KKyAgPC9wcm9ibGVtPgorPC9wcm9ibGVtcz4KKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vY2FuQmVGaW5hbC9TQ1I2MDczL3NyYy9BLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9jYW5CZUZpbmFsL1NDUjYwNzMvc3JjL0EuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NzA1NTE3Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vY2FuQmVGaW5hbC9TQ1I2MDczL3NyYy9BLmphdmEKQEAgLTAsMCArMSw2IEBACitmaW5hbCBjbGFzcyBBIHsKKyAgICBpbnQgYjsKKyAgICBBKGludCBjKSB7CisgICAgICAgIGI9YzsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9jYW5CZUZpbmFsL1NDUjY3ODEvZXhwZWN0ZWQueG1sIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vY2FuQmVGaW5hbC9TQ1I2NzgxL2V4cGVjdGVkLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYjM0YzU2Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vY2FuQmVGaW5hbC9TQ1I2NzgxL2V4cGVjdGVkLnhtbApAQCAtMCwwICsxLDkgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8cHJvYmxlbXM+CisgIDxwcm9ibGVtPgorICAgIDxmaWxlPkEuamF2YTwvZmlsZT4KKyAgICA8bGluZT4yPC9saW5lPgorICAgIDxkZXNjcmlwdGlvbj5maW5hbDwvZGVzY3JpcHRpb24+CisgIDwvcHJvYmxlbT4KKzwvcHJvYmxlbXM+CisKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2NhbkJlRmluYWwvU0NSNjc4MS9zcmMvQS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vY2FuQmVGaW5hbC9TQ1I2NzgxL3NyYy9BLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWFjNDliYwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2NhbkJlRmluYWwvU0NSNjc4MS9zcmMvQS5qYXZhCkBAIC0wLDAgKzEsMTIgQEAKK2ZpbmFsIGNsYXNzIEEgeworICAgIGludCBtOworICAgIGludCBrOworICAgIEEoKSB7CisgICAgICAgIGs9MDsKKyAgICAgICAgbT0wOworICAgIH0KKyAgICBBKGludCBuKSB7CisgICAgICAgIHRoaXMoKTsKKyAgICAgICAgaz1uOworICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2NhbkJlRmluYWwvU0NSNjg0NS9leHBlY3RlZC54bWwgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9jYW5CZUZpbmFsL1NDUjY4NDUvZXhwZWN0ZWQueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ3MDRkNTgKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9jYW5CZUZpbmFsL1NDUjY4NDUvZXhwZWN0ZWQueG1sCkBAIC0wLDAgKzEsNCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxwcm9ibGVtcz4KKzwvcHJvYmxlbXM+CisKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2NhbkJlRmluYWwvU0NSNjg0NS9zcmMvQS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vY2FuQmVGaW5hbC9TQ1I2ODQ1L3NyYy9BLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTc3MjhiOQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2NhbkJlRmluYWwvU0NSNjg0NS9zcmMvQS5qYXZhCkBAIC0wLDAgKzEsMyBAQAorZmluYWwgY2xhc3MgQSB7CisgICAgaW50IGs7Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9jYW5CZUZpbmFsL1NDUjY4NjEvZXhwZWN0ZWQueG1sIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vY2FuQmVGaW5hbC9TQ1I2ODYxL2V4cGVjdGVkLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYjM0YzU2Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vY2FuQmVGaW5hbC9TQ1I2ODYxL2V4cGVjdGVkLnhtbApAQCAtMCwwICsxLDkgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8cHJvYmxlbXM+CisgIDxwcm9ibGVtPgorICAgIDxmaWxlPkEuamF2YTwvZmlsZT4KKyAgICA8bGluZT4yPC9saW5lPgorICAgIDxkZXNjcmlwdGlvbj5maW5hbDwvZGVzY3JpcHRpb24+CisgIDwvcHJvYmxlbT4KKzwvcHJvYmxlbXM+CisKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2NhbkJlRmluYWwvU0NSNjg2MS9zcmMvQS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vY2FuQmVGaW5hbC9TQ1I2ODYxL3NyYy9BLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDc5ZTFhYgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2NhbkJlRmluYWwvU0NSNjg2MS9zcmMvQS5qYXZhCkBAIC0wLDAgKzEsMTIgQEAKK2ZpbmFsIGNsYXNzIEEgeworICAgIGludCBrOworICAgIGludCBtOworIHsKKyAgayA9IDA7CisgIG0gPSAwOworIH0KKworIEEoKSB7CisgICBtID0gMDsKKyB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9jYW5CZUZpbmFsL1NDUjc3MzcvZXhwZWN0ZWQueG1sIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vY2FuQmVGaW5hbC9TQ1I3NzM3L2V4cGVjdGVkLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNzA0ZDU4Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vY2FuQmVGaW5hbC9TQ1I3NzM3L2V4cGVjdGVkLnhtbApAQCAtMCwwICsxLDQgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8cHJvYmxlbXM+Cis8L3Byb2JsZW1zPgorCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9jYW5CZUZpbmFsL1NDUjc3MzcvZXh0X3NyYy9CLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9jYW5CZUZpbmFsL1NDUjc3MzcvZXh0X3NyYy9CLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTI2YjMyNwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2NhbkJlRmluYWwvU0NSNzczNy9leHRfc3JjL0IuamF2YQpAQCAtMCwwICsxLDYgQEAKKy8vIEIuamF2YQorY2xhc3MgQiBleHRlbmRzIEEgeworICAgIHB1YmxpYyBmaW5hbCB2b2lkIHJ1bigpIHsKKyAgICB9Cit9CisKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2NhbkJlRmluYWwvU0NSNzczNy9zcmMvQS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vY2FuQmVGaW5hbC9TQ1I3NzM3L3NyYy9BLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWVlMjhjOAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2NhbkJlRmluYWwvU0NSNzczNy9zcmMvQS5qYXZhCkBAIC0wLDAgKzEsNiBAQAorLy8gQS5qYXZhCitjbGFzcyBBIGltcGxlbWVudHMgUnVubmFibGUgeworICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKKyAgICB9Cit9CisKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2NhbkJlRmluYWwvZmllbGRBbmRUcnlCbG9jay9leHBlY3RlZC54bWwgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9jYW5CZUZpbmFsL2ZpZWxkQW5kVHJ5QmxvY2svZXhwZWN0ZWQueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlhYzg3OWQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9jYW5CZUZpbmFsL2ZpZWxkQW5kVHJ5QmxvY2svZXhwZWN0ZWQueG1sCkBAIC0wLDAgKzEsMyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxwcm9ibGVtcyAvPgorCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9jYW5CZUZpbmFsL2ZpZWxkQW5kVHJ5QmxvY2svc3JjL0Zvby5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vY2FuQmVGaW5hbC9maWVsZEFuZFRyeUJsb2NrL3NyYy9Gb28uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MzQxYjIyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vY2FuQmVGaW5hbC9maWVsZEFuZFRyeUJsb2NrL3NyYy9Gb28uamF2YQpAQCAtMCwwICsxLDEwIEBACitwdWJsaWMgZmluYWwgY2xhc3MgRm9vIHsKKyAgIHByaXZhdGUgU3RyaW5nIHM7CisgCisgICBwdWJsaWMgRm9vKCkgeworICAgICAgICB0cnkgeworICAgICAgICAgICAgcyA9ICJ0ZXN0IjsKKyAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgfQorICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9jYW5CZUZpbmFsL2ZpZWxkQXNzaWdubWVudHNzSW5Jbml0aWFsaXplci9leHBlY3RlZC54bWwgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9jYW5CZUZpbmFsL2ZpZWxkQXNzaWdubWVudHNzSW5Jbml0aWFsaXplci9leHBlY3RlZC54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDcwNGQ1OAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2NhbkJlRmluYWwvZmllbGRBc3NpZ25tZW50c3NJbkluaXRpYWxpemVyL2V4cGVjdGVkLnhtbApAQCAtMCwwICsxLDQgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8cHJvYmxlbXM+Cis8L3Byb2JsZW1zPgorCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9jYW5CZUZpbmFsL2ZpZWxkQXNzaWdubWVudHNzSW5Jbml0aWFsaXplci9zcmMvRm9vLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9jYW5CZUZpbmFsL2ZpZWxkQXNzaWdubWVudHNzSW5Jbml0aWFsaXplci9zcmMvRm9vLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzc4MDg2NgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2NhbkJlRmluYWwvZmllbGRBc3NpZ25tZW50c3NJbkluaXRpYWxpemVyL3NyYy9Gb28uamF2YQpAQCAtMCwwICsxLDcgQEAKK2ZpbmFsIGNsYXNzIEZvbyB7CisgIHN0YXRpYyBib29sZWFuIGZsYWc7CisgIHN0YXRpYyB7CisgICAgZmxhZyA9IHRydWU7CisgICAgZmxhZyA9IGZhbHNlOworICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9jYW5CZUZpbmFsL2ZpZWxkcy9leHBlY3RlZC54bWwgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9jYW5CZUZpbmFsL2ZpZWxkcy9leHBlY3RlZC54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTQyZjA1MwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2NhbkJlRmluYWwvZmllbGRzL2V4cGVjdGVkLnhtbApAQCAtMCwwICsxLDkgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8cHJvYmxlbXM+ICAKKyAgPHByb2JsZW0+CisgICAgPGZpbGU+Rm9vLmphdmE8L2ZpbGU+CisgICAgPGxpbmU+MzwvbGluZT4KKyAgICA8ZGVzY3JpcHRpb24+ZmluYWw8L2Rlc2NyaXB0aW9uPgorICA8L3Byb2JsZW0+Cis8L3Byb2JsZW1zPgorCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9jYW5CZUZpbmFsL2ZpZWxkcy9zcmMvRm9vLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9jYW5CZUZpbmFsL2ZpZWxkcy9zcmMvRm9vLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTA5N2FiNQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2NhbkJlRmluYWwvZmllbGRzL3NyYy9Gb28uamF2YQpAQCAtMCwwICsxLDIzIEBACitwdWJsaWMgZmluYWwgY2xhc3MgRm9vIHsKKyAgIHByaXZhdGUgT2JqZWN0IGYxID0gbmV3IE9iamVjdCgpOyAvLyBDYW4gYmUgZmluYWwgYnV0IHVudXNlZAorICAgcHJpdmF0ZSBPYmplY3QgZjI7ICAvLyBDYW4gYmUgZmluYWwKKyAgIHByaXZhdGUgT2JqZWN0IGYzOyAgLy8gQ2Fubm90IGJlIGZpbmFsCisgICBwcml2YXRlIE9iamVjdCBmNDsgIC8vIGNhbm5vdAorICAgcHJpdmF0ZSBPYmplY3QgZjUgPSBuZXcgT2JqZWN0KCk7ICAvLyBjYW5ub3QKKworIAorICAgcHVibGljIEZvbygpIHsKKyAgICAgICAgZjIgPSBuZXcgT2JqZWN0KCk7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBmMyA9ICJ0ZXN0IjsKKyAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgfQorICAgICAgICBmNSA9IG5ldyBPYmplY3QoKTsKKyAgIH0KKworICAgcHVibGljIEZvbyhpbnQgaSkgeworICAgICAgIGYyID0gbmV3IE9iamVjdCgpOworICAgICAgIGY0ID0gbmV3IE9iamVjdCgpOworICAgICAgIGY1ID0gbmV3IE9iamVjdCgpOworICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2NhbkJlRmluYWwvZmllbGRzUmVhZGluZy9leHBlY3RlZC54bWwgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9jYW5CZUZpbmFsL2ZpZWxkc1JlYWRpbmcvZXhwZWN0ZWQueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE0MmYwNTMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9jYW5CZUZpbmFsL2ZpZWxkc1JlYWRpbmcvZXhwZWN0ZWQueG1sCkBAIC0wLDAgKzEsOSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxwcm9ibGVtcz4gIAorICA8cHJvYmxlbT4KKyAgICA8ZmlsZT5Gb28uamF2YTwvZmlsZT4KKyAgICA8bGluZT4zPC9saW5lPgorICAgIDxkZXNjcmlwdGlvbj5maW5hbDwvZGVzY3JpcHRpb24+CisgIDwvcHJvYmxlbT4KKzwvcHJvYmxlbXM+CisKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2NhbkJlRmluYWwvZmllbGRzUmVhZGluZy9zcmMvRm9vLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9jYW5CZUZpbmFsL2ZpZWxkc1JlYWRpbmcvc3JjL0Zvby5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlkNWEyOTgKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9jYW5CZUZpbmFsL2ZpZWxkc1JlYWRpbmcvc3JjL0Zvby5qYXZhCkBAIC0wLDAgKzEsMjcgQEAKK3B1YmxpYyBmaW5hbCBjbGFzcyBGb28geworICAgcHJpdmF0ZSBPYmplY3QgZjEgPSBuZXcgT2JqZWN0KCk7IC8vIENhbiBiZSBmaW5hbCBidXQgdW51c2VkCisgICBwcml2YXRlIE9iamVjdCBmMjsgIC8vIENhbiBiZSBmaW5hbAorICAgcHJpdmF0ZSBPYmplY3QgZjM7ICAvLyBDYW5ub3QgYmUgZmluYWwKKyAgIHByaXZhdGUgT2JqZWN0IGY0OyAgLy8gY2Fubm90CisgICBwcml2YXRlIE9iamVjdCBmNSA9IG5ldyBPYmplY3QoKTsgIC8vIGNhbm5vdAorCisgCisgICBwdWJsaWMgRm9vKCkgeworICAgICAgICBmMiA9IG5ldyBPYmplY3QoKTsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIGYzID0gInRlc3QiOworICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgICAgICB9CisgICAgICAgIGY1ID0gbmV3IE9iamVjdCgpOworICAgfQorCisgICBwdWJsaWMgRm9vKGludCBpKSB7CisgICAgICAgZjIgPSBuZXcgT2JqZWN0KCk7CisgICAgICAgZjQgPSBuZXcgT2JqZWN0KCk7CisgICAgICAgZjUgPSBuZXcgT2JqZWN0KCk7CisgICB9CisKKyAgIHB1YmxpYyBPYmplY3QgZ2V0RjIoKXsKKyAgICAgcmV0dXJuIGYyOworICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2NhbkJlRmluYWwvbWV0aG9kSW5oZXJpdGFuY2UvZXhwZWN0ZWQueG1sIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vY2FuQmVGaW5hbC9tZXRob2RJbmhlcml0YW5jZS9leHBlY3RlZC54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWFjODc5ZAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2NhbkJlRmluYWwvbWV0aG9kSW5oZXJpdGFuY2UvZXhwZWN0ZWQueG1sCkBAIC0wLDAgKzEsMyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxwcm9ibGVtcyAvPgorCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9jYW5CZUZpbmFsL21ldGhvZEluaGVyaXRhbmNlL3NyYy9hLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9jYW5CZUZpbmFsL21ldGhvZEluaGVyaXRhbmNlL3NyYy9hLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTkxYWMwMgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2NhbkJlRmluYWwvbWV0aG9kSW5oZXJpdGFuY2Uvc3JjL2EuamF2YQpAQCAtMCwwICsxLDEwIEBACitwdWJsaWMgZmluYWwgY2xhc3MgYSB7CisgIHB1YmxpYyBmaW5hbCB2b2lkIGZvbygpIHsKKyAgfQorfQorCitmaW5hbCBjbGFzcyBiIGV4dGVuZHMgYSB7CisgIHB1YmxpYyB2b2lkIGZvbygpIHt9Cit9CisKKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vY2FuQmVGaW5hbC9wcml2YXRlSW5uZXJzL2V4cGVjdGVkLnhtbCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2NhbkJlRmluYWwvcHJpdmF0ZUlubmVycy9leHBlY3RlZC54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDgxNDhmMAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2NhbkJlRmluYWwvcHJpdmF0ZUlubmVycy9leHBlY3RlZC54bWwKQEAgLTAsMCArMSw5IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHByb2JsZW1zPgorICA8cHJvYmxlbT4KKyAgICA8ZmlsZT5Gb28uamF2YTwvZmlsZT4KKyAgICA8bGluZT44PC9saW5lPgorICAgIDxkZXNjcmlwdGlvbj5EZWNsYXJhdGlvbiBjYW4gaGF2ZSBmaW5hbCBtb2RpZmllcjwvZGVzY3JpcHRpb24+CisgIDwvcHJvYmxlbT4KKzwvcHJvYmxlbXM+CisKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2NhbkJlRmluYWwvcHJpdmF0ZUlubmVycy9zcmMvRm9vLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9jYW5CZUZpbmFsL3ByaXZhdGVJbm5lcnMvc3JjL0Zvby5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIyNTdmMDAKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9jYW5CZUZpbmFsL3ByaXZhdGVJbm5lcnMvc3JjL0Zvby5qYXZhCkBAIC0wLDAgKzEsMTAgQEAKK3B1YmxpYyBmaW5hbCBjbGFzcyBGb28geworICBwcml2YXRlIGNsYXNzIElubmVyU3VwZXIgeworICB9CisKKyAgcHJpdmF0ZSBmaW5hbCBjbGFzcyBJbm5lckluaGVyaXRvcjEgZXh0ZW5kcyBJbm5lclN1cGVyIHsKKyAgfQorCisgIHByaXZhdGUgY2xhc3MgSW5uZXJJbmhlcml0b3IyIGV4dGVuZHMgSW5uZXJTdXBlciB7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9jYW5CZUZpbmFsL3NpbXBsZUNsYXNzSW5oZXJpdGFuY2UvZXhwZWN0ZWQueG1sIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vY2FuQmVGaW5hbC9zaW1wbGVDbGFzc0luaGVyaXRhbmNlL2V4cGVjdGVkLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YWM4NzlkCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vY2FuQmVGaW5hbC9zaW1wbGVDbGFzc0luaGVyaXRhbmNlL2V4cGVjdGVkLnhtbApAQCAtMCwwICsxLDMgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8cHJvYmxlbXMgLz4KKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vY2FuQmVGaW5hbC9zaW1wbGVDbGFzc0luaGVyaXRhbmNlL3NyYy9Gb28uamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2NhbkJlRmluYWwvc2ltcGxlQ2xhc3NJbmhlcml0YW5jZS9zcmMvRm9vLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjIwYjY3ZgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2NhbkJlRmluYWwvc2ltcGxlQ2xhc3NJbmhlcml0YW5jZS9zcmMvRm9vLmphdmEKQEAgLTAsMCArMSw1IEBACitwdWJsaWMgZmluYWwgY2xhc3MgRm9vIGV4dGVuZHMgQmFyIHsKK30KKworY2xhc3MgQmFyIHsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9jYW5CZUZpbmFsL3NpbXBsZUNsYXNzSW5oZXJpdGFuY2UxL2V4cGVjdGVkLnhtbCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2NhbkJlRmluYWwvc2ltcGxlQ2xhc3NJbmhlcml0YW5jZTEvZXhwZWN0ZWQueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQzN2RmMDkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9jYW5CZUZpbmFsL3NpbXBsZUNsYXNzSW5oZXJpdGFuY2UxL2V4cGVjdGVkLnhtbApAQCAtMCwwICsxLDkgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8cHJvYmxlbXM+CisgIDxwcm9ibGVtPgorICAgIDxmaWxlPkZvby5qYXZhPC9maWxlPgorICAgIDxsaW5lPjE8L2xpbmU+CisgICAgPGRlc2NyaXB0aW9uPkRlY2xhcmF0aW9uIGNhbiBoYXZlIGZpbmFsIG1vZGlmaWVyPC9kZXNjcmlwdGlvbj4KKyAgPC9wcm9ibGVtPgorPC9wcm9ibGVtcz4KKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vY2FuQmVGaW5hbC9zaW1wbGVDbGFzc0luaGVyaXRhbmNlMS9zcmMvRm9vLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9jYW5CZUZpbmFsL3NpbXBsZUNsYXNzSW5oZXJpdGFuY2UxL3NyYy9Gb28uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYzBkNDQyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vY2FuQmVGaW5hbC9zaW1wbGVDbGFzc0luaGVyaXRhbmNlMS9zcmMvRm9vLmphdmEKQEAgLTAsMCArMSw1IEBACitwdWJsaWMgY2xhc3MgRm9vIGV4dGVuZHMgQmFyIHsKK30KKworY2xhc3MgQmFyIHsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9jYW5CZUZpbmFsL3NpbXBsZUNsYXNzSW5oZXJpdGFuY2VGaWVsZC9leHBlY3RlZC54bWwgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9jYW5CZUZpbmFsL3NpbXBsZUNsYXNzSW5oZXJpdGFuY2VGaWVsZC9leHBlY3RlZC54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWFjODc5ZAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2NhbkJlRmluYWwvc2ltcGxlQ2xhc3NJbmhlcml0YW5jZUZpZWxkL2V4cGVjdGVkLnhtbApAQCAtMCwwICsxLDMgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8cHJvYmxlbXMgLz4KKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vY2FuQmVGaW5hbC9zaW1wbGVDbGFzc0luaGVyaXRhbmNlRmllbGQvc3JjL0Zvby5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vY2FuQmVGaW5hbC9zaW1wbGVDbGFzc0luaGVyaXRhbmNlRmllbGQvc3JjL0Zvby5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ1NzcyZjUzCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vY2FuQmVGaW5hbC9zaW1wbGVDbGFzc0luaGVyaXRhbmNlRmllbGQvc3JjL0Zvby5qYXZhCkBAIC0wLDAgKzEsMzEgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwMC0yMDExIEpldEJyYWlucyBzLnIuby4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCitwdWJsaWMgY2xhc3MgQSB7CisgICAgcHJvdGVjdGVkIFN0cmluZyBteVN0cmluZzsKKyAgICBwcm90ZWN0ZWQgU3RyaW5nIG15QW5vdGhlclN0cmluZzsKKworICAgIHB1YmxpYyBBKFN0cmluZyBzKSB7CisgICAgICAgIG15U3RyaW5nID0gczsKKyAgICB9Cit9CisKK2ZpbmFsIGNsYXNzIEFJbXBsIGV4dGVuZHMgQSB7CisgICAgcHVibGljIEFJbXBsKFN0cmluZyBzKSB7CisgICAgICAgIHN1cGVyKHMpOworICAgICAgICBteVN0cmluZyA9IHMgKyAiIjsKKyAgICAgICAgbXlBbm90aGVyU3RyaW5nID0gczsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9jYW5CZUZpbmFsL3N0YXRpY0NsYXNzSW5pdGlhbGl6ZXIvZXhwZWN0ZWQueG1sIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vY2FuQmVGaW5hbC9zdGF0aWNDbGFzc0luaXRpYWxpemVyL2V4cGVjdGVkLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYzI3MmFiCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vY2FuQmVGaW5hbC9zdGF0aWNDbGFzc0luaXRpYWxpemVyL2V4cGVjdGVkLnhtbApAQCAtMCwwICsxLDMgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8cHJvYmxlbXMvPgorCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9jYW5CZUZpbmFsL3N0YXRpY0NsYXNzSW5pdGlhbGl6ZXIvc3JjL0Zvby5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vY2FuQmVGaW5hbC9zdGF0aWNDbGFzc0luaXRpYWxpemVyL3NyYy9Gb28uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNDFhN2JhCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vY2FuQmVGaW5hbC9zdGF0aWNDbGFzc0luaXRpYWxpemVyL3NyYy9Gb28uamF2YQpAQCAtMCwwICsxLDIxIEBACitmaW5hbCBjbGFzcyBUZXN0IHsKKyAgICBzdGF0aWMgZmluYWwgVGVzdCBBID0gbmV3IFRlc3QoKTsKKworICAgIHByaXZhdGUgaW50IGkgPSA5OTsKKworICAgIHN0YXRpYyB7CisgICAgICAgIEEuaSA9IDEwOworICAgIH0KK30KKworZW51bSBUZXN0MSB7CisgICAgQSwgQiwgQzsKKworICAgIHByaXZhdGUgaW50IGkgPSA5OTsKKworICAgIHN0YXRpYyB7CisgICAgICAgIEEuaSA9IDEwOworICAgICAgICBCLmkgPSAyMDsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKEEuaSk7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2NhbkJlRmluYWwvc3RhdGljRmllbGRzL2V4cGVjdGVkLnhtbCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2NhbkJlRmluYWwvc3RhdGljRmllbGRzL2V4cGVjdGVkLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45Njk2OWQzCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vY2FuQmVGaW5hbC9zdGF0aWNGaWVsZHMvZXhwZWN0ZWQueG1sCkBAIC0wLDAgKzEsOSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxwcm9ibGVtcz4gIAorICA8cHJvYmxlbT4KKyAgICA8ZmlsZT5Gb28uamF2YTwvZmlsZT4KKyAgICA8bGluZT4yPC9saW5lPgorICAgIDxkZXNjcmlwdGlvbj5maW5hbDwvZGVzY3JpcHRpb24+CisgIDwvcHJvYmxlbT4KKzwvcHJvYmxlbXM+CisKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2NhbkJlRmluYWwvc3RhdGljRmllbGRzL3NyYy9Gb28uamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2NhbkJlRmluYWwvc3RhdGljRmllbGRzL3NyYy9Gb28uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOTZlMjAxCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vY2FuQmVGaW5hbC9zdGF0aWNGaWVsZHMvc3JjL0Zvby5qYXZhCkBAIC0wLDAgKzEsMTMgQEAKK3B1YmxpYyBmaW5hbCBjbGFzcyBGb28geworICAgIHByaXZhdGUgc3RhdGljIE9iamVjdCBmMSA9IG5ldyBPYmplY3QoKTsgLy8gQ2FuIGJlIGZpbmFsIGJ1dCB1bnVzZWQKKyAgICBwcml2YXRlIHN0YXRpYyBPYmplY3Qgb2JqZWN0OyAvLyBjYW4ndCBiZSBmaW5hbAorICAKKyAgICBGb28oKSB7CisgICAgICAgIG9iamVjdCA9IG5ldyBPYmplY3QoKTsKKyAgICB9CisgIAorICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKEZvby5mMSk7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihGb28ub2JqZWN0KTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vY29udmVydGVyL29wdGlvbnMvb3B0aW9ucy5hZnRlci54bWwgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9jb252ZXJ0ZXIvb3B0aW9ucy9vcHRpb25zLmFmdGVyLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNzZiOGZlCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vY29udmVydGVyL29wdGlvbnMvb3B0aW9ucy5hZnRlci54bWwKQEAgLTAsMCArMSwyMCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxjb25maWc+CisgIDxwcm9maWxlcz4KKyAgICA8cHJvZmlsZSB2ZXJzaW9uPSIxLjAiIGlzX2xvY2tlZD0iZmFsc2UiPgorICAgICAgPG9wdGlvbiBuYW1lPSJteU5hbWUiIHZhbHVlPSJQcm9qZWN0IERlZmF1bHQiIC8+CisgICAgICA8b3B0aW9uIG5hbWU9Im15TG9jYWwiIHZhbHVlPSJmYWxzZSIgLz4KKyAgICA8L3Byb2ZpbGU+CisgICAgPHByb2ZpbGUgdmVyc2lvbj0iMS4wIiBpc19sb2NrZWQ9ImZhbHNlIj4KKyAgICAgIDxvcHRpb24gbmFtZT0ibXlOYW1lIiB2YWx1ZT0icDEiIC8+CisgICAgICA8b3B0aW9uIG5hbWU9Im15TG9jYWwiIHZhbHVlPSJmYWxzZSIgLz4KKyAgICAgIDxpbnNwZWN0aW9uX3Rvb2wgY2xhc3M9IkNvbnN0YW50Q29uZGl0aW9ucyIgZW5hYmxlZD0idHJ1ZSIgbGV2ZWw9IldBUk5JTkciIGVuYWJsZWRfYnlfZGVmYXVsdD0idHJ1ZSI+CisgICAgICAgIDxvcHRpb24gbmFtZT0iU1VHR0VTVF9OVUxMQUJMRV9BTk5PVEFUSU9OUyIgdmFsdWU9InRydWUiIC8+CisgICAgICAgIDxvcHRpb24gbmFtZT0iRE9OVF9SRVBPUlRfVFJVRV9BU1NFUlRfU1RBVEVNRU5UUyIgdmFsdWU9InRydWUiIC8+CisgICAgICA8L2luc3BlY3Rpb25fdG9vbD4KKyAgICA8L3Byb2ZpbGU+CisgIDwvcHJvZmlsZXM+CisgIDxvcHRpb24gbmFtZT0iUFJPSkVDVF9QUk9GSUxFIiB2YWx1ZT0icDEiIC8+CisgIDxvcHRpb24gbmFtZT0iVVNFX1BST0pFQ1RfUFJPRklMRSIgdmFsdWU9InRydWUiIC8+CisgIDx2ZXJzaW9uIHZhbHVlPSIxLjAiIC8+Cis8L2NvbmZpZz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9jb252ZXJ0ZXIvb3B0aW9ucy9vcHRpb25zLmlwciBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2NvbnZlcnRlci9vcHRpb25zL29wdGlvbnMuaXByCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg5NDA2ZTkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9jb252ZXJ0ZXIvb3B0aW9ucy9vcHRpb25zLmlwcgpAQCAtMCwwICsxLDI3NiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxwcm9qZWN0IHJlbGF0aXZlUGF0aHM9ImZhbHNlIiB2ZXJzaW9uPSI0Ij4KKyAgPGNvbXBvbmVudCBuYW1lPSJBbnRDb25maWd1cmF0aW9uIj4KKyAgICA8ZGVmYXVsdEFudCBidW5kbGVkQW50PSJ0cnVlIiAvPgorICA8L2NvbXBvbmVudD4KKyAgPGNvbXBvbmVudCBuYW1lPSJCdWlsZEphclByb2plY3RTZXR0aW5ncyI+CisgICAgPG9wdGlvbiBuYW1lPSJCVUlMRF9KQVJTX09OX01BS0UiIHZhbHVlPSJmYWxzZSIgLz4KKyAgPC9jb21wb25lbnQ+CisgIDxjb21wb25lbnQgbmFtZT0iQ29kZVN0eWxlU2V0dGluZ3NNYW5hZ2VyIj4KKyAgICA8b3B0aW9uIG5hbWU9IlBFUl9QUk9KRUNUX1NFVFRJTkdTIiAvPgorICAgIDxvcHRpb24gbmFtZT0iVVNFX1BFUl9QUk9KRUNUX1NFVFRJTkdTIiB2YWx1ZT0iZmFsc2UiIC8+CisgIDwvY29tcG9uZW50PgorICA8Y29tcG9uZW50IG5hbWU9IkNvbXBpbGVyQ29uZmlndXJhdGlvbiI+CisgICAgPG9wdGlvbiBuYW1lPSJERUZBVUxUX0NPTVBJTEVSIiB2YWx1ZT0iSmF2YWMiIC8+CisgICAgPG9wdGlvbiBuYW1lPSJERVBMT1lfQUZURVJfTUFLRSIgdmFsdWU9IjAiIC8+CisgICAgPHJlc291cmNlRXh0ZW5zaW9ucz4KKyAgICAgIDxlbnRyeSBuYW1lPSIuK1wuKHByb3BlcnRpZXN8eG1sfGh0bWx8ZHRkfHRsZCkiIC8+CisgICAgICA8ZW50cnkgbmFtZT0iLitcLihnaWZ8cG5nfGpwZWd8anBnKSIgLz4KKyAgICA8L3Jlc291cmNlRXh0ZW5zaW9ucz4KKyAgICA8d2lsZGNhcmRSZXNvdXJjZVBhdHRlcm5zPgorICAgICAgPGVudHJ5IG5hbWU9Ij8qLnByb3BlcnRpZXMiIC8+CisgICAgICA8ZW50cnkgbmFtZT0iPyoueG1sIiAvPgorICAgICAgPGVudHJ5IG5hbWU9Ij8qLmdpZiIgLz4KKyAgICAgIDxlbnRyeSBuYW1lPSI/Ki5wbmciIC8+CisgICAgICA8ZW50cnkgbmFtZT0iPyouanBlZyIgLz4KKyAgICAgIDxlbnRyeSBuYW1lPSI/Ki5qcGciIC8+CisgICAgICA8ZW50cnkgbmFtZT0iPyouaHRtbCIgLz4KKyAgICAgIDxlbnRyeSBuYW1lPSI/Ki5kdGQiIC8+CisgICAgICA8ZW50cnkgbmFtZT0iPyoudGxkIiAvPgorICAgICAgPGVudHJ5IG5hbWU9Ij8qLmZ0bCIgLz4KKyAgICA8L3dpbGRjYXJkUmVzb3VyY2VQYXR0ZXJucz4KKyAgPC9jb21wb25lbnQ+CisgIDxjb21wb25lbnQgbmFtZT0iQ29weXJpZ2h0TWFuYWdlciIgZGVmYXVsdD0iIj4KKyAgICA8bW9kdWxlMmNvcHlyaWdodCAvPgorICA8L2NvbXBvbmVudD4KKyAgPGNvbXBvbmVudCBuYW1lPSJEYXRhU291cmNlTWFuYWdlckltcGwiPgorICAgIDxleHRlcm5hbGl6ZWQgLz4KKyAgPC9jb21wb25lbnQ+CisgIDxjb21wb25lbnQgbmFtZT0iRGVwZW5kZW5jeVZhbGlkYXRpb25NYW5hZ2VyIj4KKyAgICA8b3B0aW9uIG5hbWU9IlNLSVBfSU1QT1JUX1NUQVRFTUVOVFMiIHZhbHVlPSJmYWxzZSIgLz4KKyAgPC9jb21wb25lbnQ+CisgIDxjb21wb25lbnQgbmFtZT0iRWNsaXBzZUNvbXBpbGVyU2V0dGluZ3MiPgorICAgIDxvcHRpb24gbmFtZT0iREVCVUdHSU5HX0lORk8iIHZhbHVlPSJ0cnVlIiAvPgorICAgIDxvcHRpb24gbmFtZT0iR0VORVJBVEVfTk9fV0FSTklOR1MiIHZhbHVlPSJ0cnVlIiAvPgorICAgIDxvcHRpb24gbmFtZT0iREVQUkVDQVRJT04iIHZhbHVlPSJmYWxzZSIgLz4KKyAgICA8b3B0aW9uIG5hbWU9IkFERElUSU9OQUxfT1BUSU9OU19TVFJJTkciIHZhbHVlPSIiIC8+CisgICAgPG9wdGlvbiBuYW1lPSJNQVhJTVVNX0hFQVBfU0laRSIgdmFsdWU9IjEyOCIgLz4KKyAgPC9jb21wb25lbnQ+CisgIDxjb21wb25lbnQgbmFtZT0iRWNsaXBzZUVtYmVkZGVkQ29tcGlsZXJTZXR0aW5ncyI+CisgICAgPG9wdGlvbiBuYW1lPSJERUJVR0dJTkdfSU5GTyIgdmFsdWU9InRydWUiIC8+CisgICAgPG9wdGlvbiBuYW1lPSJHRU5FUkFURV9OT19XQVJOSU5HUyIgdmFsdWU9InRydWUiIC8+CisgICAgPG9wdGlvbiBuYW1lPSJERVBSRUNBVElPTiIgdmFsdWU9ImZhbHNlIiAvPgorICAgIDxvcHRpb24gbmFtZT0iQURESVRJT05BTF9PUFRJT05TX1NUUklORyIgdmFsdWU9IiIgLz4KKyAgICA8b3B0aW9uIG5hbWU9Ik1BWElNVU1fSEVBUF9TSVpFIiB2YWx1ZT0iMTI4IiAvPgorICA8L2NvbXBvbmVudD4KKyAgPGNvbXBvbmVudCBuYW1lPSJFbmNvZGluZyIgdXNlVVRGR3Vlc3Npbmc9InRydWUiIG5hdGl2ZTJBc2NpaUZvclByb3BlcnRpZXNGaWxlcz0iZmFsc2UiIC8+CisgIDxjb21wb25lbnQgbmFtZT0iRW50cnlQb2ludHNNYW5hZ2VyIj4KKyAgICA8ZW50cnlfcG9pbnRzIHZlcnNpb249IjIuMCIgLz4KKyAgPC9jb21wb25lbnQ+CisgIDxjb21wb25lbnQgbmFtZT0iSW5zcGVjdGlvblByb2plY3RQcm9maWxlTWFuYWdlciI+CisgICAgPG9wdGlvbiBuYW1lPSJQUk9KRUNUX1BST0ZJTEUiIHZhbHVlPSJwMSIgLz4KKyAgICA8cHJvZmlsZXM+CisgICAgICA8cHJvZmlsZSB2ZXJzaW9uPSIxLjAiIGlzX2xvY2tlZD0iZmFsc2UiPgorICAgICAgICA8b3B0aW9uIG5hbWU9Im15TmFtZSIgdmFsdWU9IlByb2plY3QgRGVmYXVsdCIgLz4KKyAgICAgICAgPG9wdGlvbiBuYW1lPSJteUxvY2FsIiB2YWx1ZT0iZmFsc2UiIC8+CisgICAgICA8L3Byb2ZpbGU+CisgICAgICA8cHJvZmlsZSB2ZXJzaW9uPSIxLjAiIGlzX2xvY2tlZD0iZmFsc2UiPgorICAgICAgICA8b3B0aW9uIG5hbWU9Im15TmFtZSIgdmFsdWU9InAxIiAvPgorICAgICAgICA8b3B0aW9uIG5hbWU9Im15TG9jYWwiIHZhbHVlPSJmYWxzZSIgLz4KKyAgICAgICAgPGluc3BlY3Rpb25fdG9vbCBjbGFzcz0iQ29uc3RhbnRDb25kaXRpb25zIiBsZXZlbD0iV0FSTklORyIgZW5hYmxlZD0idHJ1ZSI+CisgICAgICAgICAgICA8b3B0aW9uIG5hbWU9IlNVR0dFU1RfTlVMTEFCTEVfQU5OT1RBVElPTlMiIHZhbHVlPSJ0cnVlIiAvPgorICAgICAgICAgICAgPG9wdGlvbiBuYW1lPSJET05UX1JFUE9SVF9UUlVFX0FTU0VSVF9TVEFURU1FTlRTIiB2YWx1ZT0idHJ1ZSIgLz4KKyAgICAgICAgPC9pbnNwZWN0aW9uX3Rvb2w+CisgICAgICA8L3Byb2ZpbGU+CisgICAgPC9wcm9maWxlcz4KKyAgICA8bGlzdCBzaXplPSI1Ij4KKyAgICAgIDxpdGVtIGluZGV4PSIwIiBjbGFzcz0iamF2YS5sYW5nLlN0cmluZyIgaXRlbXZhbHVlPSJUWVBPIiAvPgorICAgICAgPGl0ZW0gaW5kZXg9IjEiIGNsYXNzPSJqYXZhLmxhbmcuU3RyaW5nIiBpdGVtdmFsdWU9IlNFUlZFUiBQUk9CTEVNIiAvPgorICAgICAgPGl0ZW0gaW5kZXg9IjIiIGNsYXNzPSJqYXZhLmxhbmcuU3RyaW5nIiBpdGVtdmFsdWU9IklORk8iIC8+CisgICAgICA8aXRlbSBpbmRleD0iMyIgY2xhc3M9ImphdmEubGFuZy5TdHJpbmciIGl0ZW12YWx1ZT0iV0FSTklORyIgLz4KKyAgICAgIDxpdGVtIGluZGV4PSI0IiBjbGFzcz0iamF2YS5sYW5nLlN0cmluZyIgaXRlbXZhbHVlPSJFUlJPUiIgLz4KKyAgICA8L2xpc3Q+CisgIDwvY29tcG9uZW50PgorICA8Y29tcG9uZW50IG5hbWU9IkphdmFjU2V0dGluZ3MiPgorICAgIDxvcHRpb24gbmFtZT0iREVCVUdHSU5HX0lORk8iIHZhbHVlPSJ0cnVlIiAvPgorICAgIDxvcHRpb24gbmFtZT0iR0VORVJBVEVfTk9fV0FSTklOR1MiIHZhbHVlPSJmYWxzZSIgLz4KKyAgICA8b3B0aW9uIG5hbWU9IkRFUFJFQ0FUSU9OIiB2YWx1ZT0idHJ1ZSIgLz4KKyAgICA8b3B0aW9uIG5hbWU9IkFERElUSU9OQUxfT1BUSU9OU19TVFJJTkciIHZhbHVlPSIiIC8+CisgICAgPG9wdGlvbiBuYW1lPSJNQVhJTVVNX0hFQVBfU0laRSIgdmFsdWU9IjEyOCIgLz4KKyAgPC9jb21wb25lbnQ+CisgIDxjb21wb25lbnQgbmFtZT0iSmF2YWRvY0dlbmVyYXRpb25NYW5hZ2VyIj4KKyAgICA8b3B0aW9uIG5hbWU9Ik9VVFBVVF9ESVJFQ1RPUlkiIC8+CisgICAgPG9wdGlvbiBuYW1lPSJPUFRJT05fU0NPUEUiIHZhbHVlPSJwcm90ZWN0ZWQiIC8+CisgICAgPG9wdGlvbiBuYW1lPSJPUFRJT05fSElFUkFSQ0hZIiB2YWx1ZT0idHJ1ZSIgLz4KKyAgICA8b3B0aW9uIG5hbWU9Ik9QVElPTl9OQVZJR0FUT1IiIHZhbHVlPSJ0cnVlIiAvPgorICAgIDxvcHRpb24gbmFtZT0iT1BUSU9OX0lOREVYIiB2YWx1ZT0idHJ1ZSIgLz4KKyAgICA8b3B0aW9uIG5hbWU9Ik9QVElPTl9TRVBBUkFURV9JTkRFWCIgdmFsdWU9InRydWUiIC8+CisgICAgPG9wdGlvbiBuYW1lPSJPUFRJT05fRE9DVU1FTlRfVEFHX1VTRSIgdmFsdWU9ImZhbHNlIiAvPgorICAgIDxvcHRpb24gbmFtZT0iT1BUSU9OX0RPQ1VNRU5UX1RBR19BVVRIT1IiIHZhbHVlPSJmYWxzZSIgLz4KKyAgICA8b3B0aW9uIG5hbWU9Ik9QVElPTl9ET0NVTUVOVF9UQUdfVkVSU0lPTiIgdmFsdWU9ImZhbHNlIiAvPgorICAgIDxvcHRpb24gbmFtZT0iT1BUSU9OX0RPQ1VNRU5UX1RBR19ERVBSRUNBVEVEIiB2YWx1ZT0idHJ1ZSIgLz4KKyAgICA8b3B0aW9uIG5hbWU9Ik9QVElPTl9ERVBSRUNBVEVEX0xJU1QiIHZhbHVlPSJ0cnVlIiAvPgorICAgIDxvcHRpb24gbmFtZT0iT1RIRVJfT1BUSU9OUyIgdmFsdWU9IiIgLz4KKyAgICA8b3B0aW9uIG5hbWU9IkhFQVBfU0laRSIgLz4KKyAgICA8b3B0aW9uIG5hbWU9IkxPQ0FMRSIgLz4KKyAgICA8b3B0aW9uIG5hbWU9Ik9QRU5fSU5fQlJPV1NFUiIgdmFsdWU9InRydWUiIC8+CisgIDwvY29tcG9uZW50PgorICA8Y29tcG9uZW50IG5hbWU9Ikppa2VzU2V0dGluZ3MiPgorICAgIDxvcHRpb24gbmFtZT0iSklLRVNfUEFUSCIgdmFsdWU9IiIgLz4KKyAgICA8b3B0aW9uIG5hbWU9IkRFQlVHR0lOR19JTkZPIiB2YWx1ZT0idHJ1ZSIgLz4KKyAgICA8b3B0aW9uIG5hbWU9IkRFUFJFQ0FUSU9OIiB2YWx1ZT0idHJ1ZSIgLz4KKyAgICA8b3B0aW9uIG5hbWU9IkdFTkVSQVRFX05PX1dBUk5JTkdTIiB2YWx1ZT0iZmFsc2UiIC8+CisgICAgPG9wdGlvbiBuYW1lPSJJU19FTUFDU19FUlJPUlNfTU9ERSIgdmFsdWU9InRydWUiIC8+CisgICAgPG9wdGlvbiBuYW1lPSJBRERJVElPTkFMX09QVElPTlNfU1RSSU5HIiB2YWx1ZT0iIiAvPgorICA8L2NvbXBvbmVudD4KKyAgPGNvbXBvbmVudCBuYW1lPSJQYWxldHRlMiI+CisgICAgPGdyb3VwIG5hbWU9IlN3aW5nIj4KKyAgICAgIDxpdGVtIGNsYXNzPSJjb20uaW50ZWxsaWoudWlEZXNpZ25lci5IU3BhY2VyIiB0b29sdGlwLXRleHQ9Ikhvcml6b250YWwgU3BhY2VyIiBpY29uPSIvY29tL2ludGVsbGlqL3VpRGVzaWduZXIvaWNvbnMvaHNwYWNlci5wbmciIHJlbW92YWJsZT0iZmFsc2UiIGF1dG8tY3JlYXRlLWJpbmRpbmc9ImZhbHNlIiBjYW4tYXR0YWNoLWxhYmVsPSJmYWxzZSI+CisgICAgICAgIDxkZWZhdWx0LWNvbnN0cmFpbnRzIHZzaXplLXBvbGljeT0iMSIgaHNpemUtcG9saWN5PSI2IiBhbmNob3I9IjAiIGZpbGw9IjEiIC8+CisgICAgICA8L2l0ZW0+CisgICAgICA8aXRlbSBjbGFzcz0iY29tLmludGVsbGlqLnVpRGVzaWduZXIuVlNwYWNlciIgdG9vbHRpcC10ZXh0PSJWZXJ0aWNhbCBTcGFjZXIiIGljb249Ii9jb20vaW50ZWxsaWovdWlEZXNpZ25lci9pY29ucy92c3BhY2VyLnBuZyIgcmVtb3ZhYmxlPSJmYWxzZSIgYXV0by1jcmVhdGUtYmluZGluZz0iZmFsc2UiIGNhbi1hdHRhY2gtbGFiZWw9ImZhbHNlIj4KKyAgICAgICAgPGRlZmF1bHQtY29uc3RyYWludHMgdnNpemUtcG9saWN5PSI2IiBoc2l6ZS1wb2xpY3k9IjEiIGFuY2hvcj0iMCIgZmlsbD0iMiIgLz4KKyAgICAgIDwvaXRlbT4KKyAgICAgIDxpdGVtIGNsYXNzPSJqYXZheC5zd2luZy5KUGFuZWwiIGljb249Ii9jb20vaW50ZWxsaWovdWlEZXNpZ25lci9pY29ucy9wYW5lbC5wbmciIHJlbW92YWJsZT0iZmFsc2UiIGF1dG8tY3JlYXRlLWJpbmRpbmc9ImZhbHNlIiBjYW4tYXR0YWNoLWxhYmVsPSJmYWxzZSI+CisgICAgICAgIDxkZWZhdWx0LWNvbnN0cmFpbnRzIHZzaXplLXBvbGljeT0iMyIgaHNpemUtcG9saWN5PSIzIiBhbmNob3I9IjAiIGZpbGw9IjMiIC8+CisgICAgICA8L2l0ZW0+CisgICAgICA8aXRlbSBjbGFzcz0iamF2YXguc3dpbmcuSlNjcm9sbFBhbmUiIGljb249Ii9jb20vaW50ZWxsaWovdWlEZXNpZ25lci9pY29ucy9zY3JvbGxQYW5lLnBuZyIgcmVtb3ZhYmxlPSJmYWxzZSIgYXV0by1jcmVhdGUtYmluZGluZz0iZmFsc2UiIGNhbi1hdHRhY2gtbGFiZWw9InRydWUiPgorICAgICAgICA8ZGVmYXVsdC1jb25zdHJhaW50cyB2c2l6ZS1wb2xpY3k9IjciIGhzaXplLXBvbGljeT0iNyIgYW5jaG9yPSIwIiBmaWxsPSIzIiAvPgorICAgICAgPC9pdGVtPgorICAgICAgPGl0ZW0gY2xhc3M9ImphdmF4LnN3aW5nLkpCdXR0b24iIGljb249Ii9jb20vaW50ZWxsaWovdWlEZXNpZ25lci9pY29ucy9idXR0b24ucG5nIiByZW1vdmFibGU9ImZhbHNlIiBhdXRvLWNyZWF0ZS1iaW5kaW5nPSJ0cnVlIiBjYW4tYXR0YWNoLWxhYmVsPSJmYWxzZSI+CisgICAgICAgIDxkZWZhdWx0LWNvbnN0cmFpbnRzIHZzaXplLXBvbGljeT0iMCIgaHNpemUtcG9saWN5PSIzIiBhbmNob3I9IjAiIGZpbGw9IjEiIC8+CisgICAgICAgIDxpbml0aWFsLXZhbHVlcz4KKyAgICAgICAgICA8cHJvcGVydHkgbmFtZT0idGV4dCIgdmFsdWU9IkJ1dHRvbiIgLz4KKyAgICAgICAgPC9pbml0aWFsLXZhbHVlcz4KKyAgICAgIDwvaXRlbT4KKyAgICAgIDxpdGVtIGNsYXNzPSJqYXZheC5zd2luZy5KUmFkaW9CdXR0b24iIGljb249Ii9jb20vaW50ZWxsaWovdWlEZXNpZ25lci9pY29ucy9yYWRpb0J1dHRvbi5wbmciIHJlbW92YWJsZT0iZmFsc2UiIGF1dG8tY3JlYXRlLWJpbmRpbmc9InRydWUiIGNhbi1hdHRhY2gtbGFiZWw9ImZhbHNlIj4KKyAgICAgICAgPGRlZmF1bHQtY29uc3RyYWludHMgdnNpemUtcG9saWN5PSIwIiBoc2l6ZS1wb2xpY3k9IjMiIGFuY2hvcj0iOCIgZmlsbD0iMCIgLz4KKyAgICAgICAgPGluaXRpYWwtdmFsdWVzPgorICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ0ZXh0IiB2YWx1ZT0iUmFkaW9CdXR0b24iIC8+CisgICAgICAgIDwvaW5pdGlhbC12YWx1ZXM+CisgICAgICA8L2l0ZW0+CisgICAgICA8aXRlbSBjbGFzcz0iamF2YXguc3dpbmcuSkNoZWNrQm94IiBpY29uPSIvY29tL2ludGVsbGlqL3VpRGVzaWduZXIvaWNvbnMvY2hlY2tCb3gucG5nIiByZW1vdmFibGU9ImZhbHNlIiBhdXRvLWNyZWF0ZS1iaW5kaW5nPSJ0cnVlIiBjYW4tYXR0YWNoLWxhYmVsPSJmYWxzZSI+CisgICAgICAgIDxkZWZhdWx0LWNvbnN0cmFpbnRzIHZzaXplLXBvbGljeT0iMCIgaHNpemUtcG9saWN5PSIzIiBhbmNob3I9IjgiIGZpbGw9IjAiIC8+CisgICAgICAgIDxpbml0aWFsLXZhbHVlcz4KKyAgICAgICAgICA8cHJvcGVydHkgbmFtZT0idGV4dCIgdmFsdWU9IkNoZWNrQm94IiAvPgorICAgICAgICA8L2luaXRpYWwtdmFsdWVzPgorICAgICAgPC9pdGVtPgorICAgICAgPGl0ZW0gY2xhc3M9ImphdmF4LnN3aW5nLkpMYWJlbCIgaWNvbj0iL2NvbS9pbnRlbGxpai91aURlc2lnbmVyL2ljb25zL2xhYmVsLnBuZyIgcmVtb3ZhYmxlPSJmYWxzZSIgYXV0by1jcmVhdGUtYmluZGluZz0iZmFsc2UiIGNhbi1hdHRhY2gtbGFiZWw9ImZhbHNlIj4KKyAgICAgICAgPGRlZmF1bHQtY29uc3RyYWludHMgdnNpemUtcG9saWN5PSIwIiBoc2l6ZS1wb2xpY3k9IjAiIGFuY2hvcj0iOCIgZmlsbD0iMCIgLz4KKyAgICAgICAgPGluaXRpYWwtdmFsdWVzPgorICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ0ZXh0IiB2YWx1ZT0iTGFiZWwiIC8+CisgICAgICAgIDwvaW5pdGlhbC12YWx1ZXM+CisgICAgICA8L2l0ZW0+CisgICAgICA8aXRlbSBjbGFzcz0iamF2YXguc3dpbmcuSlRleHRGaWVsZCIgaWNvbj0iL2NvbS9pbnRlbGxpai91aURlc2lnbmVyL2ljb25zL3RleHRGaWVsZC5wbmciIHJlbW92YWJsZT0iZmFsc2UiIGF1dG8tY3JlYXRlLWJpbmRpbmc9InRydWUiIGNhbi1hdHRhY2gtbGFiZWw9InRydWUiPgorICAgICAgICA8ZGVmYXVsdC1jb25zdHJhaW50cyB2c2l6ZS1wb2xpY3k9IjAiIGhzaXplLXBvbGljeT0iNiIgYW5jaG9yPSI4IiBmaWxsPSIxIj4KKyAgICAgICAgICA8cHJlZmVycmVkLXNpemUgd2lkdGg9IjE1MCIgaGVpZ2h0PSItMSIgLz4KKyAgICAgICAgPC9kZWZhdWx0LWNvbnN0cmFpbnRzPgorICAgICAgPC9pdGVtPgorICAgICAgPGl0ZW0gY2xhc3M9ImphdmF4LnN3aW5nLkpQYXNzd29yZEZpZWxkIiBpY29uPSIvY29tL2ludGVsbGlqL3VpRGVzaWduZXIvaWNvbnMvcGFzc3dvcmRGaWVsZC5wbmciIHJlbW92YWJsZT0iZmFsc2UiIGF1dG8tY3JlYXRlLWJpbmRpbmc9InRydWUiIGNhbi1hdHRhY2gtbGFiZWw9InRydWUiPgorICAgICAgICA8ZGVmYXVsdC1jb25zdHJhaW50cyB2c2l6ZS1wb2xpY3k9IjAiIGhzaXplLXBvbGljeT0iNiIgYW5jaG9yPSI4IiBmaWxsPSIxIj4KKyAgICAgICAgICA8cHJlZmVycmVkLXNpemUgd2lkdGg9IjE1MCIgaGVpZ2h0PSItMSIgLz4KKyAgICAgICAgPC9kZWZhdWx0LWNvbnN0cmFpbnRzPgorICAgICAgPC9pdGVtPgorICAgICAgPGl0ZW0gY2xhc3M9ImphdmF4LnN3aW5nLkpGb3JtYXR0ZWRUZXh0RmllbGQiIGljb249Ii9jb20vaW50ZWxsaWovdWlEZXNpZ25lci9pY29ucy9mb3JtYXR0ZWRUZXh0RmllbGQucG5nIiByZW1vdmFibGU9ImZhbHNlIiBhdXRvLWNyZWF0ZS1iaW5kaW5nPSJ0cnVlIiBjYW4tYXR0YWNoLWxhYmVsPSJ0cnVlIj4KKyAgICAgICAgPGRlZmF1bHQtY29uc3RyYWludHMgdnNpemUtcG9saWN5PSIwIiBoc2l6ZS1wb2xpY3k9IjYiIGFuY2hvcj0iOCIgZmlsbD0iMSI+CisgICAgICAgICAgPHByZWZlcnJlZC1zaXplIHdpZHRoPSIxNTAiIGhlaWdodD0iLTEiIC8+CisgICAgICAgIDwvZGVmYXVsdC1jb25zdHJhaW50cz4KKyAgICAgIDwvaXRlbT4KKyAgICAgIDxpdGVtIGNsYXNzPSJqYXZheC5zd2luZy5KVGV4dEFyZWEiIGljb249Ii9jb20vaW50ZWxsaWovdWlEZXNpZ25lci9pY29ucy90ZXh0QXJlYS5wbmciIHJlbW92YWJsZT0iZmFsc2UiIGF1dG8tY3JlYXRlLWJpbmRpbmc9InRydWUiIGNhbi1hdHRhY2gtbGFiZWw9InRydWUiPgorICAgICAgICA8ZGVmYXVsdC1jb25zdHJhaW50cyB2c2l6ZS1wb2xpY3k9IjYiIGhzaXplLXBvbGljeT0iNiIgYW5jaG9yPSIwIiBmaWxsPSIzIj4KKyAgICAgICAgICA8cHJlZmVycmVkLXNpemUgd2lkdGg9IjE1MCIgaGVpZ2h0PSI1MCIgLz4KKyAgICAgICAgPC9kZWZhdWx0LWNvbnN0cmFpbnRzPgorICAgICAgPC9pdGVtPgorICAgICAgPGl0ZW0gY2xhc3M9ImphdmF4LnN3aW5nLkpUZXh0UGFuZSIgaWNvbj0iL2NvbS9pbnRlbGxpai91aURlc2lnbmVyL2ljb25zL3RleHRQYW5lLnBuZyIgcmVtb3ZhYmxlPSJmYWxzZSIgYXV0by1jcmVhdGUtYmluZGluZz0idHJ1ZSIgY2FuLWF0dGFjaC1sYWJlbD0idHJ1ZSI+CisgICAgICAgIDxkZWZhdWx0LWNvbnN0cmFpbnRzIHZzaXplLXBvbGljeT0iNiIgaHNpemUtcG9saWN5PSI2IiBhbmNob3I9IjAiIGZpbGw9IjMiPgorICAgICAgICAgIDxwcmVmZXJyZWQtc2l6ZSB3aWR0aD0iMTUwIiBoZWlnaHQ9IjUwIiAvPgorICAgICAgICA8L2RlZmF1bHQtY29uc3RyYWludHM+CisgICAgICA8L2l0ZW0+CisgICAgICA8aXRlbSBjbGFzcz0iamF2YXguc3dpbmcuSkVkaXRvclBhbmUiIGljb249Ii9jb20vaW50ZWxsaWovdWlEZXNpZ25lci9pY29ucy9lZGl0b3JQYW5lLnBuZyIgcmVtb3ZhYmxlPSJmYWxzZSIgYXV0by1jcmVhdGUtYmluZGluZz0idHJ1ZSIgY2FuLWF0dGFjaC1sYWJlbD0idHJ1ZSI+CisgICAgICAgIDxkZWZhdWx0LWNvbnN0cmFpbnRzIHZzaXplLXBvbGljeT0iNiIgaHNpemUtcG9saWN5PSI2IiBhbmNob3I9IjAiIGZpbGw9IjMiPgorICAgICAgICAgIDxwcmVmZXJyZWQtc2l6ZSB3aWR0aD0iMTUwIiBoZWlnaHQ9IjUwIiAvPgorICAgICAgICA8L2RlZmF1bHQtY29uc3RyYWludHM+CisgICAgICA8L2l0ZW0+CisgICAgICA8aXRlbSBjbGFzcz0iamF2YXguc3dpbmcuSkNvbWJvQm94IiBpY29uPSIvY29tL2ludGVsbGlqL3VpRGVzaWduZXIvaWNvbnMvY29tYm9Cb3gucG5nIiByZW1vdmFibGU9ImZhbHNlIiBhdXRvLWNyZWF0ZS1iaW5kaW5nPSJ0cnVlIiBjYW4tYXR0YWNoLWxhYmVsPSJ0cnVlIj4KKyAgICAgICAgPGRlZmF1bHQtY29uc3RyYWludHMgdnNpemUtcG9saWN5PSIwIiBoc2l6ZS1wb2xpY3k9IjIiIGFuY2hvcj0iOCIgZmlsbD0iMSIgLz4KKyAgICAgIDwvaXRlbT4KKyAgICAgIDxpdGVtIGNsYXNzPSJqYXZheC5zd2luZy5KVGFibGUiIGljb249Ii9jb20vaW50ZWxsaWovdWlEZXNpZ25lci9pY29ucy90YWJsZS5wbmciIHJlbW92YWJsZT0iZmFsc2UiIGF1dG8tY3JlYXRlLWJpbmRpbmc9InRydWUiIGNhbi1hdHRhY2gtbGFiZWw9ImZhbHNlIj4KKyAgICAgICAgPGRlZmF1bHQtY29uc3RyYWludHMgdnNpemUtcG9saWN5PSI2IiBoc2l6ZS1wb2xpY3k9IjYiIGFuY2hvcj0iMCIgZmlsbD0iMyI+CisgICAgICAgICAgPHByZWZlcnJlZC1zaXplIHdpZHRoPSIxNTAiIGhlaWdodD0iNTAiIC8+CisgICAgICAgIDwvZGVmYXVsdC1jb25zdHJhaW50cz4KKyAgICAgIDwvaXRlbT4KKyAgICAgIDxpdGVtIGNsYXNzPSJqYXZheC5zd2luZy5KTGlzdCIgaWNvbj0iL2NvbS9pbnRlbGxpai91aURlc2lnbmVyL2ljb25zL2xpc3QucG5nIiByZW1vdmFibGU9ImZhbHNlIiBhdXRvLWNyZWF0ZS1iaW5kaW5nPSJ0cnVlIiBjYW4tYXR0YWNoLWxhYmVsPSJmYWxzZSI+CisgICAgICAgIDxkZWZhdWx0LWNvbnN0cmFpbnRzIHZzaXplLXBvbGljeT0iNiIgaHNpemUtcG9saWN5PSIyIiBhbmNob3I9IjAiIGZpbGw9IjMiPgorICAgICAgICAgIDxwcmVmZXJyZWQtc2l6ZSB3aWR0aD0iMTUwIiBoZWlnaHQ9IjUwIiAvPgorICAgICAgICA8L2RlZmF1bHQtY29uc3RyYWludHM+CisgICAgICA8L2l0ZW0+CisgICAgICA8aXRlbSBjbGFzcz0iamF2YXguc3dpbmcuSlRyZWUiIGljb249Ii9jb20vaW50ZWxsaWovdWlEZXNpZ25lci9pY29ucy90cmVlLnBuZyIgcmVtb3ZhYmxlPSJmYWxzZSIgYXV0by1jcmVhdGUtYmluZGluZz0idHJ1ZSIgY2FuLWF0dGFjaC1sYWJlbD0iZmFsc2UiPgorICAgICAgICA8ZGVmYXVsdC1jb25zdHJhaW50cyB2c2l6ZS1wb2xpY3k9IjYiIGhzaXplLXBvbGljeT0iNiIgYW5jaG9yPSIwIiBmaWxsPSIzIj4KKyAgICAgICAgICA8cHJlZmVycmVkLXNpemUgd2lkdGg9IjE1MCIgaGVpZ2h0PSI1MCIgLz4KKyAgICAgICAgPC9kZWZhdWx0LWNvbnN0cmFpbnRzPgorICAgICAgPC9pdGVtPgorICAgICAgPGl0ZW0gY2xhc3M9ImphdmF4LnN3aW5nLkpUYWJiZWRQYW5lIiBpY29uPSIvY29tL2ludGVsbGlqL3VpRGVzaWduZXIvaWNvbnMvdGFiYmVkUGFuZS5wbmciIHJlbW92YWJsZT0iZmFsc2UiIGF1dG8tY3JlYXRlLWJpbmRpbmc9InRydWUiIGNhbi1hdHRhY2gtbGFiZWw9ImZhbHNlIj4KKyAgICAgICAgPGRlZmF1bHQtY29uc3RyYWludHMgdnNpemUtcG9saWN5PSIzIiBoc2l6ZS1wb2xpY3k9IjMiIGFuY2hvcj0iMCIgZmlsbD0iMyI+CisgICAgICAgICAgPHByZWZlcnJlZC1zaXplIHdpZHRoPSIyMDAiIGhlaWdodD0iMjAwIiAvPgorICAgICAgICA8L2RlZmF1bHQtY29uc3RyYWludHM+CisgICAgICA8L2l0ZW0+CisgICAgICA8aXRlbSBjbGFzcz0iamF2YXguc3dpbmcuSlNwbGl0UGFuZSIgaWNvbj0iL2NvbS9pbnRlbGxpai91aURlc2lnbmVyL2ljb25zL3NwbGl0UGFuZS5wbmciIHJlbW92YWJsZT0iZmFsc2UiIGF1dG8tY3JlYXRlLWJpbmRpbmc9ImZhbHNlIiBjYW4tYXR0YWNoLWxhYmVsPSJmYWxzZSI+CisgICAgICAgIDxkZWZhdWx0LWNvbnN0cmFpbnRzIHZzaXplLXBvbGljeT0iMyIgaHNpemUtcG9saWN5PSIzIiBhbmNob3I9IjAiIGZpbGw9IjMiPgorICAgICAgICAgIDxwcmVmZXJyZWQtc2l6ZSB3aWR0aD0iMjAwIiBoZWlnaHQ9IjIwMCIgLz4KKyAgICAgICAgPC9kZWZhdWx0LWNvbnN0cmFpbnRzPgorICAgICAgPC9pdGVtPgorICAgICAgPGl0ZW0gY2xhc3M9ImphdmF4LnN3aW5nLkpTcGlubmVyIiBpY29uPSIvY29tL2ludGVsbGlqL3VpRGVzaWduZXIvaWNvbnMvc3Bpbm5lci5wbmciIHJlbW92YWJsZT0iZmFsc2UiIGF1dG8tY3JlYXRlLWJpbmRpbmc9InRydWUiIGNhbi1hdHRhY2gtbGFiZWw9InRydWUiPgorICAgICAgICA8ZGVmYXVsdC1jb25zdHJhaW50cyB2c2l6ZS1wb2xpY3k9IjAiIGhzaXplLXBvbGljeT0iNiIgYW5jaG9yPSI4IiBmaWxsPSIxIiAvPgorICAgICAgPC9pdGVtPgorICAgICAgPGl0ZW0gY2xhc3M9ImphdmF4LnN3aW5nLkpTbGlkZXIiIGljb249Ii9jb20vaW50ZWxsaWovdWlEZXNpZ25lci9pY29ucy9zbGlkZXIucG5nIiByZW1vdmFibGU9ImZhbHNlIiBhdXRvLWNyZWF0ZS1iaW5kaW5nPSJ0cnVlIiBjYW4tYXR0YWNoLWxhYmVsPSJmYWxzZSI+CisgICAgICAgIDxkZWZhdWx0LWNvbnN0cmFpbnRzIHZzaXplLXBvbGljeT0iMCIgaHNpemUtcG9saWN5PSI2IiBhbmNob3I9IjgiIGZpbGw9IjEiIC8+CisgICAgICA8L2l0ZW0+CisgICAgICA8aXRlbSBjbGFzcz0iamF2YXguc3dpbmcuSlNlcGFyYXRvciIgaWNvbj0iL2NvbS9pbnRlbGxpai91aURlc2lnbmVyL2ljb25zL3NlcGFyYXRvci5wbmciIHJlbW92YWJsZT0iZmFsc2UiIGF1dG8tY3JlYXRlLWJpbmRpbmc9ImZhbHNlIiBjYW4tYXR0YWNoLWxhYmVsPSJmYWxzZSI+CisgICAgICAgIDxkZWZhdWx0LWNvbnN0cmFpbnRzIHZzaXplLXBvbGljeT0iNiIgaHNpemUtcG9saWN5PSI2IiBhbmNob3I9IjAiIGZpbGw9IjMiIC8+CisgICAgICA8L2l0ZW0+CisgICAgICA8aXRlbSBjbGFzcz0iamF2YXguc3dpbmcuSlByb2dyZXNzQmFyIiBpY29uPSIvY29tL2ludGVsbGlqL3VpRGVzaWduZXIvaWNvbnMvcHJvZ3Jlc3NiYXIucG5nIiByZW1vdmFibGU9ImZhbHNlIiBhdXRvLWNyZWF0ZS1iaW5kaW5nPSJ0cnVlIiBjYW4tYXR0YWNoLWxhYmVsPSJmYWxzZSI+CisgICAgICAgIDxkZWZhdWx0LWNvbnN0cmFpbnRzIHZzaXplLXBvbGljeT0iMCIgaHNpemUtcG9saWN5PSI2IiBhbmNob3I9IjAiIGZpbGw9IjEiIC8+CisgICAgICA8L2l0ZW0+CisgICAgICA8aXRlbSBjbGFzcz0iamF2YXguc3dpbmcuSlRvb2xCYXIiIGljb249Ii9jb20vaW50ZWxsaWovdWlEZXNpZ25lci9pY29ucy90b29sYmFyLnBuZyIgcmVtb3ZhYmxlPSJmYWxzZSIgYXV0by1jcmVhdGUtYmluZGluZz0iZmFsc2UiIGNhbi1hdHRhY2gtbGFiZWw9ImZhbHNlIj4KKyAgICAgICAgPGRlZmF1bHQtY29uc3RyYWludHMgdnNpemUtcG9saWN5PSIwIiBoc2l6ZS1wb2xpY3k9IjYiIGFuY2hvcj0iMCIgZmlsbD0iMSI+CisgICAgICAgICAgPHByZWZlcnJlZC1zaXplIHdpZHRoPSItMSIgaGVpZ2h0PSIyMCIgLz4KKyAgICAgICAgPC9kZWZhdWx0LWNvbnN0cmFpbnRzPgorICAgICAgPC9pdGVtPgorICAgICAgPGl0ZW0gY2xhc3M9ImphdmF4LnN3aW5nLkpUb29sQmFyJFNlcGFyYXRvciIgaWNvbj0iL2NvbS9pbnRlbGxpai91aURlc2lnbmVyL2ljb25zL3Rvb2xiYXJTZXBhcmF0b3IucG5nIiByZW1vdmFibGU9ImZhbHNlIiBhdXRvLWNyZWF0ZS1iaW5kaW5nPSJmYWxzZSIgY2FuLWF0dGFjaC1sYWJlbD0iZmFsc2UiPgorICAgICAgICA8ZGVmYXVsdC1jb25zdHJhaW50cyB2c2l6ZS1wb2xpY3k9IjAiIGhzaXplLXBvbGljeT0iMCIgYW5jaG9yPSIwIiBmaWxsPSIxIiAvPgorICAgICAgPC9pdGVtPgorICAgICAgPGl0ZW0gY2xhc3M9ImphdmF4LnN3aW5nLkpTY3JvbGxCYXIiIGljb249Ii9jb20vaW50ZWxsaWovdWlEZXNpZ25lci9pY29ucy9zY3JvbGxiYXIucG5nIiByZW1vdmFibGU9ImZhbHNlIiBhdXRvLWNyZWF0ZS1iaW5kaW5nPSJ0cnVlIiBjYW4tYXR0YWNoLWxhYmVsPSJmYWxzZSI+CisgICAgICAgIDxkZWZhdWx0LWNvbnN0cmFpbnRzIHZzaXplLXBvbGljeT0iNiIgaHNpemUtcG9saWN5PSIwIiBhbmNob3I9IjAiIGZpbGw9IjIiIC8+CisgICAgICA8L2l0ZW0+CisgICAgPC9ncm91cD4KKyAgPC9jb21wb25lbnQ+CisgIDxjb21wb25lbnQgbmFtZT0iUHJvamVjdERldGFpbHMiPgorICAgIDxvcHRpb24gbmFtZT0icHJvamVjdE5hbWUiIHZhbHVlPSJ0ZXN0bmciIC8+CisgIDwvY29tcG9uZW50PgorICA8Y29tcG9uZW50IG5hbWU9IlByb2plY3RGaWxlVmVyc2lvbiIgY29udmVydGVkPSJ0cnVlIj4KKyAgICA8Y29udmVydGVyIGlkPSJqYXZhZWUtbW9kdWxlcyIgLz4KKyAgICA8Y29udmVydGVyIGlkPSJyb3ItbW9kdWxlcyIgLz4KKyAgICA8Y29udmVydGVyIGlkPSJTZWxlbmFSdW5Db25mVG9EaWFuYSIgLz4KKyAgPC9jb21wb25lbnQ+CisgIDxjb21wb25lbnQgbmFtZT0iUHJvamVjdEtleSI+CisgICAgPG9wdGlvbiBuYW1lPSJzdGF0ZSIgdmFsdWU9InByb2plY3Q6Ly9DOlxhbm5hXHRlc3RuZ1x0ZXN0bmcuaXByIiAvPgorICA8L2NvbXBvbmVudD4KKyAgPGNvbXBvbmVudCBuYW1lPSJQcm9qZWN0TW9kdWxlTWFuYWdlciI+CisgICAgPG1vZHVsZXM+CisgICAgICA8bW9kdWxlIGZpbGV1cmw9ImZpbGU6Ly8kUFJPSkVDVF9ESVIkL3Rlc3RuZy5pbWwiIGZpbGVwYXRoPSIkUFJPSkVDVF9ESVIkL3Rlc3RuZy5pbWwiIC8+CisgICAgICA8bW9kdWxlIGZpbGV1cmw9ImZpbGU6Ly8kUFJPSkVDVF9ESVIkL3Rlc3RuZy1jaGlsZC90ZXN0bmctY2hpbGQuaW1sIiBmaWxlcGF0aD0iJFBST0pFQ1RfRElSJC90ZXN0bmctY2hpbGQvdGVzdG5nLWNoaWxkLmltbCIgLz4KKyAgICA8L21vZHVsZXM+CisgIDwvY29tcG9uZW50PgorICA8Y29tcG9uZW50IG5hbWU9IlByb2plY3RSb290TWFuYWdlciIgdmVyc2lvbj0iMiIgbGFuZ3VhZ2VMZXZlbD0iSkRLXzFfNSIgYXNzZXJ0LWtleXdvcmQ9InRydWUiIGpkay0xNT0idHJ1ZSIgcHJvamVjdC1qZGstbmFtZT0iMS42IiBwcm9qZWN0LWpkay10eXBlPSJKYXZhU0RLIj4KKyAgICA8b3V0cHV0IHVybD0iZmlsZTovLyRQUk9KRUNUX0RJUiQvb3V0IiAvPgorICA8L2NvbXBvbmVudD4KKyAgPGNvbXBvbmVudCBuYW1lPSJSZXNvdXJjZU1hbmFnZXJDb250YWluZXIiPgorICAgIDxvcHRpb24gbmFtZT0ibXlSZXNvdXJjZUJ1bmRsZXMiPgorICAgICAgPHZhbHVlPgorICAgICAgICA8bGlzdCBzaXplPSIwIiAvPgorICAgICAgPC92YWx1ZT4KKyAgICA8L29wdGlvbj4KKyAgPC9jb21wb25lbnQ+CisgIDxjb21wb25lbnQgbmFtZT0iUm1pY1NldHRpbmdzIj4KKyAgICA8b3B0aW9uIG5hbWU9IklTX0VBTkFCTEVEIiB2YWx1ZT0iZmFsc2UiIC8+CisgICAgPG9wdGlvbiBuYW1lPSJERUJVR0dJTkdfSU5GTyIgdmFsdWU9InRydWUiIC8+CisgICAgPG9wdGlvbiBuYW1lPSJHRU5FUkFURV9OT19XQVJOSU5HUyIgdmFsdWU9ImZhbHNlIiAvPgorICAgIDxvcHRpb24gbmFtZT0iR0VORVJBVEVfSUlPUF9TVFVCUyIgdmFsdWU9ImZhbHNlIiAvPgorICAgIDxvcHRpb24gbmFtZT0iQURESVRJT05BTF9PUFRJT05TX1NUUklORyIgdmFsdWU9IiIgLz4KKyAgPC9jb21wb25lbnQ+CisgIDxjb21wb25lbnQgbmFtZT0iV2ViU2VydmljZXNQbHVnaW4iIGFkZFJlcXVpcmVkTGlicmFyaWVzPSJ0cnVlIiAvPgorICA8VXNlZFBhdGhNYWNyb3M+CisgICAgPG1hY3JvIG5hbWU9InBwIiBkZXNjcmlwdGlvbj0iIiAvPgorICA8L1VzZWRQYXRoTWFjcm9zPgorPC9wcm9qZWN0PgorCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9jb252ZXJ0ZXIvc2NvcGUvb3B0aW9ucy5hZnRlci54bWwgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9jb252ZXJ0ZXIvc2NvcGUvb3B0aW9ucy5hZnRlci54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmExODk4OAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2NvbnZlcnRlci9zY29wZS9vcHRpb25zLmFmdGVyLnhtbApAQCAtMCwwICsxLDI0IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPGNvbmZpZz4KKyAgPHByb2ZpbGVzPgorICAgIDxwcm9maWxlIHZlcnNpb249IjEuMCIgaXNfbG9ja2VkPSJmYWxzZSI+CisgICAgICA8b3B0aW9uIG5hbWU9Im15TmFtZSIgdmFsdWU9IlByb2plY3QgRGVmYXVsdCIgLz4KKyAgICAgIDxvcHRpb24gbmFtZT0ibXlMb2NhbCIgdmFsdWU9ImZhbHNlIiAvPgorICAgIDwvcHJvZmlsZT4KKyAgICA8cHJvZmlsZSB2ZXJzaW9uPSIxLjAiIGlzX2xvY2tlZD0iZmFsc2UiPgorICAgICAgPG9wdGlvbiBuYW1lPSJteU5hbWUiIHZhbHVlPSJwMSIgLz4KKyAgICAgIDxvcHRpb24gbmFtZT0ibXlMb2NhbCIgdmFsdWU9ImZhbHNlIiAvPgorICAgICAgPGluc3BlY3Rpb25fdG9vbCBjbGFzcz0iQ29uc3RhbnRDb25kaXRpb25zIiBlbmFibGVkPSJ0cnVlIiBsZXZlbD0iV0FSTklORyIgZW5hYmxlZF9ieV9kZWZhdWx0PSJ0cnVlIj4KKyAgICAgICAgPHNjb3BlIG5hbWU9IlByb2R1Y3Rpb24iIGxldmVsPSJXQVJOSU5HIiBlbmFibGVkPSJ0cnVlIj4KKyAgICAgICAgICA8b3B0aW9uIG5hbWU9IlNVR0dFU1RfTlVMTEFCTEVfQU5OT1RBVElPTlMiIHZhbHVlPSJmYWxzZSIgLz4KKyAgICAgICAgICA8b3B0aW9uIG5hbWU9IkRPTlRfUkVQT1JUX1RSVUVfQVNTRVJUX1NUQVRFTUVOVFMiIHZhbHVlPSJmYWxzZSIgLz4KKyAgICAgICAgPC9zY29wZT4KKyAgICAgICAgPG9wdGlvbiBuYW1lPSJTVUdHRVNUX05VTExBQkxFX0FOTk9UQVRJT05TIiB2YWx1ZT0idHJ1ZSIgLz4KKyAgICAgICAgPG9wdGlvbiBuYW1lPSJET05UX1JFUE9SVF9UUlVFX0FTU0VSVF9TVEFURU1FTlRTIiB2YWx1ZT0idHJ1ZSIgLz4KKyAgICAgIDwvaW5zcGVjdGlvbl90b29sPgorICAgIDwvcHJvZmlsZT4KKyAgPC9wcm9maWxlcz4KKyAgPG9wdGlvbiBuYW1lPSJQUk9KRUNUX1BST0ZJTEUiIHZhbHVlPSJwMSIgLz4KKyAgPG9wdGlvbiBuYW1lPSJVU0VfUFJPSkVDVF9QUk9GSUxFIiB2YWx1ZT0idHJ1ZSIgLz4KKyAgPHZlcnNpb24gdmFsdWU9IjEuMCIgLz4KKzwvY29uZmlnPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2NvbnZlcnRlci9zY29wZS9vcHRpb25zLmlwciBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2NvbnZlcnRlci9zY29wZS9vcHRpb25zLmlwcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZWM5MGU2Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vY29udmVydGVyL3Njb3BlL29wdGlvbnMuaXByCkBAIC0wLDAgKzEsMjc4IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHByb2plY3QgcmVsYXRpdmVQYXRocz0iZmFsc2UiIHZlcnNpb249IjQiPgorICA8Y29tcG9uZW50IG5hbWU9IkFudENvbmZpZ3VyYXRpb24iPgorICAgIDxkZWZhdWx0QW50IGJ1bmRsZWRBbnQ9InRydWUiIC8+CisgIDwvY29tcG9uZW50PgorICA8Y29tcG9uZW50IG5hbWU9IkJ1aWxkSmFyUHJvamVjdFNldHRpbmdzIj4KKyAgICA8b3B0aW9uIG5hbWU9IkJVSUxEX0pBUlNfT05fTUFLRSIgdmFsdWU9ImZhbHNlIiAvPgorICA8L2NvbXBvbmVudD4KKyAgPGNvbXBvbmVudCBuYW1lPSJDb2RlU3R5bGVTZXR0aW5nc01hbmFnZXIiPgorICAgIDxvcHRpb24gbmFtZT0iUEVSX1BST0pFQ1RfU0VUVElOR1MiIC8+CisgICAgPG9wdGlvbiBuYW1lPSJVU0VfUEVSX1BST0pFQ1RfU0VUVElOR1MiIHZhbHVlPSJmYWxzZSIgLz4KKyAgPC9jb21wb25lbnQ+CisgIDxjb21wb25lbnQgbmFtZT0iQ29tcGlsZXJDb25maWd1cmF0aW9uIj4KKyAgICA8b3B0aW9uIG5hbWU9IkRFRkFVTFRfQ09NUElMRVIiIHZhbHVlPSJKYXZhYyIgLz4KKyAgICA8b3B0aW9uIG5hbWU9IkRFUExPWV9BRlRFUl9NQUtFIiB2YWx1ZT0iMCIgLz4KKyAgICA8cmVzb3VyY2VFeHRlbnNpb25zPgorICAgICAgPGVudHJ5IG5hbWU9Ii4rXC4ocHJvcGVydGllc3x4bWx8aHRtbHxkdGR8dGxkKSIgLz4KKyAgICAgIDxlbnRyeSBuYW1lPSIuK1wuKGdpZnxwbmd8anBlZ3xqcGcpIiAvPgorICAgIDwvcmVzb3VyY2VFeHRlbnNpb25zPgorICAgIDx3aWxkY2FyZFJlc291cmNlUGF0dGVybnM+CisgICAgICA8ZW50cnkgbmFtZT0iPyoucHJvcGVydGllcyIgLz4KKyAgICAgIDxlbnRyeSBuYW1lPSI/Ki54bWwiIC8+CisgICAgICA8ZW50cnkgbmFtZT0iPyouZ2lmIiAvPgorICAgICAgPGVudHJ5IG5hbWU9Ij8qLnBuZyIgLz4KKyAgICAgIDxlbnRyeSBuYW1lPSI/Ki5qcGVnIiAvPgorICAgICAgPGVudHJ5IG5hbWU9Ij8qLmpwZyIgLz4KKyAgICAgIDxlbnRyeSBuYW1lPSI/Ki5odG1sIiAvPgorICAgICAgPGVudHJ5IG5hbWU9Ij8qLmR0ZCIgLz4KKyAgICAgIDxlbnRyeSBuYW1lPSI/Ki50bGQiIC8+CisgICAgICA8ZW50cnkgbmFtZT0iPyouZnRsIiAvPgorICAgIDwvd2lsZGNhcmRSZXNvdXJjZVBhdHRlcm5zPgorICA8L2NvbXBvbmVudD4KKyAgPGNvbXBvbmVudCBuYW1lPSJDb3B5cmlnaHRNYW5hZ2VyIiBkZWZhdWx0PSIiPgorICAgIDxtb2R1bGUyY29weXJpZ2h0IC8+CisgIDwvY29tcG9uZW50PgorICA8Y29tcG9uZW50IG5hbWU9IkRhdGFTb3VyY2VNYW5hZ2VySW1wbCI+CisgICAgPGV4dGVybmFsaXplZCAvPgorICA8L2NvbXBvbmVudD4KKyAgPGNvbXBvbmVudCBuYW1lPSJEZXBlbmRlbmN5VmFsaWRhdGlvbk1hbmFnZXIiPgorICAgIDxvcHRpb24gbmFtZT0iU0tJUF9JTVBPUlRfU1RBVEVNRU5UUyIgdmFsdWU9ImZhbHNlIiAvPgorICA8L2NvbXBvbmVudD4KKyAgPGNvbXBvbmVudCBuYW1lPSJFY2xpcHNlQ29tcGlsZXJTZXR0aW5ncyI+CisgICAgPG9wdGlvbiBuYW1lPSJERUJVR0dJTkdfSU5GTyIgdmFsdWU9InRydWUiIC8+CisgICAgPG9wdGlvbiBuYW1lPSJHRU5FUkFURV9OT19XQVJOSU5HUyIgdmFsdWU9InRydWUiIC8+CisgICAgPG9wdGlvbiBuYW1lPSJERVBSRUNBVElPTiIgdmFsdWU9ImZhbHNlIiAvPgorICAgIDxvcHRpb24gbmFtZT0iQURESVRJT05BTF9PUFRJT05TX1NUUklORyIgdmFsdWU9IiIgLz4KKyAgICA8b3B0aW9uIG5hbWU9Ik1BWElNVU1fSEVBUF9TSVpFIiB2YWx1ZT0iMTI4IiAvPgorICA8L2NvbXBvbmVudD4KKyAgPGNvbXBvbmVudCBuYW1lPSJFY2xpcHNlRW1iZWRkZWRDb21waWxlclNldHRpbmdzIj4KKyAgICA8b3B0aW9uIG5hbWU9IkRFQlVHR0lOR19JTkZPIiB2YWx1ZT0idHJ1ZSIgLz4KKyAgICA8b3B0aW9uIG5hbWU9IkdFTkVSQVRFX05PX1dBUk5JTkdTIiB2YWx1ZT0idHJ1ZSIgLz4KKyAgICA8b3B0aW9uIG5hbWU9IkRFUFJFQ0FUSU9OIiB2YWx1ZT0iZmFsc2UiIC8+CisgICAgPG9wdGlvbiBuYW1lPSJBRERJVElPTkFMX09QVElPTlNfU1RSSU5HIiB2YWx1ZT0iIiAvPgorICAgIDxvcHRpb24gbmFtZT0iTUFYSU1VTV9IRUFQX1NJWkUiIHZhbHVlPSIxMjgiIC8+CisgIDwvY29tcG9uZW50PgorICA8Y29tcG9uZW50IG5hbWU9IkVuY29kaW5nIiB1c2VVVEZHdWVzc2luZz0idHJ1ZSIgbmF0aXZlMkFzY2lpRm9yUHJvcGVydGllc0ZpbGVzPSJmYWxzZSIgLz4KKyAgPGNvbXBvbmVudCBuYW1lPSJFbnRyeVBvaW50c01hbmFnZXIiPgorICAgIDxlbnRyeV9wb2ludHMgdmVyc2lvbj0iMi4wIiAvPgorICA8L2NvbXBvbmVudD4KKyAgPGNvbXBvbmVudCBuYW1lPSJJbnNwZWN0aW9uUHJvamVjdFByb2ZpbGVNYW5hZ2VyIj4KKyAgICA8b3B0aW9uIG5hbWU9IlBST0pFQ1RfUFJPRklMRSIgdmFsdWU9InAxIiAvPgorICAgIDxzY29wZXM+CisgICAgICA8c2NvcGUgcHJvZmlsZT0iUHJvamVjdCBEZWZhdWx0IiBuYW1lPSJQcm9kdWN0aW9uIiAvPgorICAgIDwvc2NvcGVzPgorICAgIDxwcm9maWxlcz4KKyAgICAgIDxwcm9maWxlIHZlcnNpb249IjEuMCIgaXNfbG9ja2VkPSJmYWxzZSI+CisgICAgICAgIDxvcHRpb24gbmFtZT0ibXlOYW1lIiB2YWx1ZT0iUHJvamVjdCBEZWZhdWx0IiAvPgorICAgICAgICA8b3B0aW9uIG5hbWU9Im15TG9jYWwiIHZhbHVlPSJmYWxzZSIgLz4KKyAgICAgIDwvcHJvZmlsZT4KKyAgICAgIDxwcm9maWxlIHZlcnNpb249IjEuMCIgaXNfbG9ja2VkPSJmYWxzZSI+CisgICAgICAgIDxvcHRpb24gbmFtZT0ibXlOYW1lIiB2YWx1ZT0icDEiIC8+CisgICAgICAgIDxvcHRpb24gbmFtZT0ibXlMb2NhbCIgdmFsdWU9ImZhbHNlIiAvPgorICAgICAgICA8aW5zcGVjdGlvbl90b29sIGNsYXNzPSJDb25zdGFudENvbmRpdGlvbnMiIGxldmVsPSJXQVJOSU5HIiBlbmFibGVkPSJ0cnVlIj4KKyAgICAgICAgICAgIDxvcHRpb24gbmFtZT0iU1VHR0VTVF9OVUxMQUJMRV9BTk5PVEFUSU9OUyIgdmFsdWU9InRydWUiIC8+CisgICAgICAgICAgICA8b3B0aW9uIG5hbWU9IkRPTlRfUkVQT1JUX1RSVUVfQVNTRVJUX1NUQVRFTUVOVFMiIHZhbHVlPSJ0cnVlIiAvPgorICAgICAgICA8L2luc3BlY3Rpb25fdG9vbD4KKyAgICAgIDwvcHJvZmlsZT4KKyAgICA8L3Byb2ZpbGVzPgorICAgIDxsaXN0IHNpemU9IjUiPgorICAgICAgPGl0ZW0gaW5kZXg9IjAiIGNsYXNzPSJqYXZhLmxhbmcuU3RyaW5nIiBpdGVtdmFsdWU9IlRZUE8iIC8+CisgICAgICA8aXRlbSBpbmRleD0iMSIgY2xhc3M9ImphdmEubGFuZy5TdHJpbmciIGl0ZW12YWx1ZT0iU0VSVkVSIFBST0JMRU0iIC8+CisgICAgICA8aXRlbSBpbmRleD0iMiIgY2xhc3M9ImphdmEubGFuZy5TdHJpbmciIGl0ZW12YWx1ZT0iSU5GTyIgLz4KKyAgICAgIDxpdGVtIGluZGV4PSIzIiBjbGFzcz0iamF2YS5sYW5nLlN0cmluZyIgaXRlbXZhbHVlPSJXQVJOSU5HIiAvPgorICAgICAgPGl0ZW0gaW5kZXg9IjQiIGNsYXNzPSJqYXZhLmxhbmcuU3RyaW5nIiBpdGVtdmFsdWU9IkVSUk9SIiAvPgorICAgIDwvbGlzdD4KKyAgPC9jb21wb25lbnQ+CisgIDxjb21wb25lbnQgbmFtZT0iSmF2YWNTZXR0aW5ncyI+CisgICAgPG9wdGlvbiBuYW1lPSJERUJVR0dJTkdfSU5GTyIgdmFsdWU9InRydWUiIC8+CisgICAgPG9wdGlvbiBuYW1lPSJHRU5FUkFURV9OT19XQVJOSU5HUyIgdmFsdWU9ImZhbHNlIiAvPgorICAgIDxvcHRpb24gbmFtZT0iREVQUkVDQVRJT04iIHZhbHVlPSJ0cnVlIiAvPgorICAgIDxvcHRpb24gbmFtZT0iQURESVRJT05BTF9PUFRJT05TX1NUUklORyIgdmFsdWU9IiIgLz4KKyAgICA8b3B0aW9uIG5hbWU9Ik1BWElNVU1fSEVBUF9TSVpFIiB2YWx1ZT0iMTI4IiAvPgorICA8L2NvbXBvbmVudD4KKyAgPGNvbXBvbmVudCBuYW1lPSJKYXZhZG9jR2VuZXJhdGlvbk1hbmFnZXIiPgorICAgIDxvcHRpb24gbmFtZT0iT1VUUFVUX0RJUkVDVE9SWSIgLz4KKyAgICA8b3B0aW9uIG5hbWU9Ik9QVElPTl9TQ09QRSIgdmFsdWU9InByb3RlY3RlZCIgLz4KKyAgICA8b3B0aW9uIG5hbWU9Ik9QVElPTl9ISUVSQVJDSFkiIHZhbHVlPSJ0cnVlIiAvPgorICAgIDxvcHRpb24gbmFtZT0iT1BUSU9OX05BVklHQVRPUiIgdmFsdWU9InRydWUiIC8+CisgICAgPG9wdGlvbiBuYW1lPSJPUFRJT05fSU5ERVgiIHZhbHVlPSJ0cnVlIiAvPgorICAgIDxvcHRpb24gbmFtZT0iT1BUSU9OX1NFUEFSQVRFX0lOREVYIiB2YWx1ZT0idHJ1ZSIgLz4KKyAgICA8b3B0aW9uIG5hbWU9Ik9QVElPTl9ET0NVTUVOVF9UQUdfVVNFIiB2YWx1ZT0iZmFsc2UiIC8+CisgICAgPG9wdGlvbiBuYW1lPSJPUFRJT05fRE9DVU1FTlRfVEFHX0FVVEhPUiIgdmFsdWU9ImZhbHNlIiAvPgorICAgIDxvcHRpb24gbmFtZT0iT1BUSU9OX0RPQ1VNRU5UX1RBR19WRVJTSU9OIiB2YWx1ZT0iZmFsc2UiIC8+CisgICAgPG9wdGlvbiBuYW1lPSJPUFRJT05fRE9DVU1FTlRfVEFHX0RFUFJFQ0FURUQiIHZhbHVlPSJ0cnVlIiAvPgorICAgIDxvcHRpb24gbmFtZT0iT1BUSU9OX0RFUFJFQ0FURURfTElTVCIgdmFsdWU9InRydWUiIC8+CisgICAgPG9wdGlvbiBuYW1lPSJPVEhFUl9PUFRJT05TIiB2YWx1ZT0iIiAvPgorICAgIDxvcHRpb24gbmFtZT0iSEVBUF9TSVpFIiAvPgorICAgIDxvcHRpb24gbmFtZT0iTE9DQUxFIiAvPgorICAgIDxvcHRpb24gbmFtZT0iT1BFTl9JTl9CUk9XU0VSIiB2YWx1ZT0idHJ1ZSIgLz4KKyAgPC9jb21wb25lbnQ+CisgIDxjb21wb25lbnQgbmFtZT0iSmlrZXNTZXR0aW5ncyI+CisgICAgPG9wdGlvbiBuYW1lPSJKSUtFU19QQVRIIiB2YWx1ZT0iIiAvPgorICAgIDxvcHRpb24gbmFtZT0iREVCVUdHSU5HX0lORk8iIHZhbHVlPSJ0cnVlIiAvPgorICAgIDxvcHRpb24gbmFtZT0iREVQUkVDQVRJT04iIHZhbHVlPSJ0cnVlIiAvPgorICAgIDxvcHRpb24gbmFtZT0iR0VORVJBVEVfTk9fV0FSTklOR1MiIHZhbHVlPSJmYWxzZSIgLz4KKyAgICA8b3B0aW9uIG5hbWU9IklTX0VNQUNTX0VSUk9SU19NT0RFIiB2YWx1ZT0idHJ1ZSIgLz4KKyAgICA8b3B0aW9uIG5hbWU9IkFERElUSU9OQUxfT1BUSU9OU19TVFJJTkciIHZhbHVlPSIiIC8+CisgIDwvY29tcG9uZW50PgorICA8Y29tcG9uZW50IG5hbWU9IlBhbGV0dGUyIj4KKyAgICA8Z3JvdXAgbmFtZT0iU3dpbmciPgorICAgICAgPGl0ZW0gY2xhc3M9ImNvbS5pbnRlbGxpai51aURlc2lnbmVyLkhTcGFjZXIiIHRvb2x0aXAtdGV4dD0iSG9yaXpvbnRhbCBTcGFjZXIiIGljb249Ii9jb20vaW50ZWxsaWovdWlEZXNpZ25lci9pY29ucy9oc3BhY2VyLnBuZyIgcmVtb3ZhYmxlPSJmYWxzZSIgYXV0by1jcmVhdGUtYmluZGluZz0iZmFsc2UiIGNhbi1hdHRhY2gtbGFiZWw9ImZhbHNlIj4KKyAgICAgICAgPGRlZmF1bHQtY29uc3RyYWludHMgdnNpemUtcG9saWN5PSIxIiBoc2l6ZS1wb2xpY3k9IjYiIGFuY2hvcj0iMCIgZmlsbD0iMSIgLz4KKyAgICAgIDwvaXRlbT4KKyAgICAgIDxpdGVtIGNsYXNzPSJjb20uaW50ZWxsaWoudWlEZXNpZ25lci5WU3BhY2VyIiB0b29sdGlwLXRleHQ9IlZlcnRpY2FsIFNwYWNlciIgaWNvbj0iL2NvbS9pbnRlbGxpai91aURlc2lnbmVyL2ljb25zL3ZzcGFjZXIucG5nIiByZW1vdmFibGU9ImZhbHNlIiBhdXRvLWNyZWF0ZS1iaW5kaW5nPSJmYWxzZSIgY2FuLWF0dGFjaC1sYWJlbD0iZmFsc2UiPgorICAgICAgICA8ZGVmYXVsdC1jb25zdHJhaW50cyB2c2l6ZS1wb2xpY3k9IjYiIGhzaXplLXBvbGljeT0iMSIgYW5jaG9yPSIwIiBmaWxsPSIyIiAvPgorICAgICAgPC9pdGVtPgorICAgICAgPGl0ZW0gY2xhc3M9ImphdmF4LnN3aW5nLkpQYW5lbCIgaWNvbj0iL2NvbS9pbnRlbGxpai91aURlc2lnbmVyL2ljb25zL3BhbmVsLnBuZyIgcmVtb3ZhYmxlPSJmYWxzZSIgYXV0by1jcmVhdGUtYmluZGluZz0iZmFsc2UiIGNhbi1hdHRhY2gtbGFiZWw9ImZhbHNlIj4KKyAgICAgICAgPGRlZmF1bHQtY29uc3RyYWludHMgdnNpemUtcG9saWN5PSIzIiBoc2l6ZS1wb2xpY3k9IjMiIGFuY2hvcj0iMCIgZmlsbD0iMyIgLz4KKyAgICAgIDwvaXRlbT4KKyAgICAgIDxpdGVtIGNsYXNzPSJqYXZheC5zd2luZy5KU2Nyb2xsUGFuZSIgaWNvbj0iL2NvbS9pbnRlbGxpai91aURlc2lnbmVyL2ljb25zL3Njcm9sbFBhbmUucG5nIiByZW1vdmFibGU9ImZhbHNlIiBhdXRvLWNyZWF0ZS1iaW5kaW5nPSJmYWxzZSIgY2FuLWF0dGFjaC1sYWJlbD0idHJ1ZSI+CisgICAgICAgIDxkZWZhdWx0LWNvbnN0cmFpbnRzIHZzaXplLXBvbGljeT0iNyIgaHNpemUtcG9saWN5PSI3IiBhbmNob3I9IjAiIGZpbGw9IjMiIC8+CisgICAgICA8L2l0ZW0+CisgICAgICA8aXRlbSBjbGFzcz0iamF2YXguc3dpbmcuSkJ1dHRvbiIgaWNvbj0iL2NvbS9pbnRlbGxpai91aURlc2lnbmVyL2ljb25zL2J1dHRvbi5wbmciIHJlbW92YWJsZT0iZmFsc2UiIGF1dG8tY3JlYXRlLWJpbmRpbmc9InRydWUiIGNhbi1hdHRhY2gtbGFiZWw9ImZhbHNlIj4KKyAgICAgICAgPGRlZmF1bHQtY29uc3RyYWludHMgdnNpemUtcG9saWN5PSIwIiBoc2l6ZS1wb2xpY3k9IjMiIGFuY2hvcj0iMCIgZmlsbD0iMSIgLz4KKyAgICAgICAgPGluaXRpYWwtdmFsdWVzPgorICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ0ZXh0IiB2YWx1ZT0iQnV0dG9uIiAvPgorICAgICAgICA8L2luaXRpYWwtdmFsdWVzPgorICAgICAgPC9pdGVtPgorICAgICAgPGl0ZW0gY2xhc3M9ImphdmF4LnN3aW5nLkpSYWRpb0J1dHRvbiIgaWNvbj0iL2NvbS9pbnRlbGxpai91aURlc2lnbmVyL2ljb25zL3JhZGlvQnV0dG9uLnBuZyIgcmVtb3ZhYmxlPSJmYWxzZSIgYXV0by1jcmVhdGUtYmluZGluZz0idHJ1ZSIgY2FuLWF0dGFjaC1sYWJlbD0iZmFsc2UiPgorICAgICAgICA8ZGVmYXVsdC1jb25zdHJhaW50cyB2c2l6ZS1wb2xpY3k9IjAiIGhzaXplLXBvbGljeT0iMyIgYW5jaG9yPSI4IiBmaWxsPSIwIiAvPgorICAgICAgICA8aW5pdGlhbC12YWx1ZXM+CisgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InRleHQiIHZhbHVlPSJSYWRpb0J1dHRvbiIgLz4KKyAgICAgICAgPC9pbml0aWFsLXZhbHVlcz4KKyAgICAgIDwvaXRlbT4KKyAgICAgIDxpdGVtIGNsYXNzPSJqYXZheC5zd2luZy5KQ2hlY2tCb3giIGljb249Ii9jb20vaW50ZWxsaWovdWlEZXNpZ25lci9pY29ucy9jaGVja0JveC5wbmciIHJlbW92YWJsZT0iZmFsc2UiIGF1dG8tY3JlYXRlLWJpbmRpbmc9InRydWUiIGNhbi1hdHRhY2gtbGFiZWw9ImZhbHNlIj4KKyAgICAgICAgPGRlZmF1bHQtY29uc3RyYWludHMgdnNpemUtcG9saWN5PSIwIiBoc2l6ZS1wb2xpY3k9IjMiIGFuY2hvcj0iOCIgZmlsbD0iMCIgLz4KKyAgICAgICAgPGluaXRpYWwtdmFsdWVzPgorICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ0ZXh0IiB2YWx1ZT0iQ2hlY2tCb3giIC8+CisgICAgICAgIDwvaW5pdGlhbC12YWx1ZXM+CisgICAgICA8L2l0ZW0+CisgICAgICA8aXRlbSBjbGFzcz0iamF2YXguc3dpbmcuSkxhYmVsIiBpY29uPSIvY29tL2ludGVsbGlqL3VpRGVzaWduZXIvaWNvbnMvbGFiZWwucG5nIiByZW1vdmFibGU9ImZhbHNlIiBhdXRvLWNyZWF0ZS1iaW5kaW5nPSJmYWxzZSIgY2FuLWF0dGFjaC1sYWJlbD0iZmFsc2UiPgorICAgICAgICA8ZGVmYXVsdC1jb25zdHJhaW50cyB2c2l6ZS1wb2xpY3k9IjAiIGhzaXplLXBvbGljeT0iMCIgYW5jaG9yPSI4IiBmaWxsPSIwIiAvPgorICAgICAgICA8aW5pdGlhbC12YWx1ZXM+CisgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InRleHQiIHZhbHVlPSJMYWJlbCIgLz4KKyAgICAgICAgPC9pbml0aWFsLXZhbHVlcz4KKyAgICAgIDwvaXRlbT4KKyAgICAgIDxpdGVtIGNsYXNzPSJqYXZheC5zd2luZy5KVGV4dEZpZWxkIiBpY29uPSIvY29tL2ludGVsbGlqL3VpRGVzaWduZXIvaWNvbnMvdGV4dEZpZWxkLnBuZyIgcmVtb3ZhYmxlPSJmYWxzZSIgYXV0by1jcmVhdGUtYmluZGluZz0idHJ1ZSIgY2FuLWF0dGFjaC1sYWJlbD0idHJ1ZSI+CisgICAgICAgIDxkZWZhdWx0LWNvbnN0cmFpbnRzIHZzaXplLXBvbGljeT0iMCIgaHNpemUtcG9saWN5PSI2IiBhbmNob3I9IjgiIGZpbGw9IjEiPgorICAgICAgICAgIDxwcmVmZXJyZWQtc2l6ZSB3aWR0aD0iMTUwIiBoZWlnaHQ9Ii0xIiAvPgorICAgICAgICA8L2RlZmF1bHQtY29uc3RyYWludHM+CisgICAgICA8L2l0ZW0+CisgICAgICA8aXRlbSBjbGFzcz0iamF2YXguc3dpbmcuSlBhc3N3b3JkRmllbGQiIGljb249Ii9jb20vaW50ZWxsaWovdWlEZXNpZ25lci9pY29ucy9wYXNzd29yZEZpZWxkLnBuZyIgcmVtb3ZhYmxlPSJmYWxzZSIgYXV0by1jcmVhdGUtYmluZGluZz0idHJ1ZSIgY2FuLWF0dGFjaC1sYWJlbD0idHJ1ZSI+CisgICAgICAgIDxkZWZhdWx0LWNvbnN0cmFpbnRzIHZzaXplLXBvbGljeT0iMCIgaHNpemUtcG9saWN5PSI2IiBhbmNob3I9IjgiIGZpbGw9IjEiPgorICAgICAgICAgIDxwcmVmZXJyZWQtc2l6ZSB3aWR0aD0iMTUwIiBoZWlnaHQ9Ii0xIiAvPgorICAgICAgICA8L2RlZmF1bHQtY29uc3RyYWludHM+CisgICAgICA8L2l0ZW0+CisgICAgICA8aXRlbSBjbGFzcz0iamF2YXguc3dpbmcuSkZvcm1hdHRlZFRleHRGaWVsZCIgaWNvbj0iL2NvbS9pbnRlbGxpai91aURlc2lnbmVyL2ljb25zL2Zvcm1hdHRlZFRleHRGaWVsZC5wbmciIHJlbW92YWJsZT0iZmFsc2UiIGF1dG8tY3JlYXRlLWJpbmRpbmc9InRydWUiIGNhbi1hdHRhY2gtbGFiZWw9InRydWUiPgorICAgICAgICA8ZGVmYXVsdC1jb25zdHJhaW50cyB2c2l6ZS1wb2xpY3k9IjAiIGhzaXplLXBvbGljeT0iNiIgYW5jaG9yPSI4IiBmaWxsPSIxIj4KKyAgICAgICAgICA8cHJlZmVycmVkLXNpemUgd2lkdGg9IjE1MCIgaGVpZ2h0PSItMSIgLz4KKyAgICAgICAgPC9kZWZhdWx0LWNvbnN0cmFpbnRzPgorICAgICAgPC9pdGVtPgorICAgICAgPGl0ZW0gY2xhc3M9ImphdmF4LnN3aW5nLkpUZXh0QXJlYSIgaWNvbj0iL2NvbS9pbnRlbGxpai91aURlc2lnbmVyL2ljb25zL3RleHRBcmVhLnBuZyIgcmVtb3ZhYmxlPSJmYWxzZSIgYXV0by1jcmVhdGUtYmluZGluZz0idHJ1ZSIgY2FuLWF0dGFjaC1sYWJlbD0idHJ1ZSI+CisgICAgICAgIDxkZWZhdWx0LWNvbnN0cmFpbnRzIHZzaXplLXBvbGljeT0iNiIgaHNpemUtcG9saWN5PSI2IiBhbmNob3I9IjAiIGZpbGw9IjMiPgorICAgICAgICAgIDxwcmVmZXJyZWQtc2l6ZSB3aWR0aD0iMTUwIiBoZWlnaHQ9IjUwIiAvPgorICAgICAgICA8L2RlZmF1bHQtY29uc3RyYWludHM+CisgICAgICA8L2l0ZW0+CisgICAgICA8aXRlbSBjbGFzcz0iamF2YXguc3dpbmcuSlRleHRQYW5lIiBpY29uPSIvY29tL2ludGVsbGlqL3VpRGVzaWduZXIvaWNvbnMvdGV4dFBhbmUucG5nIiByZW1vdmFibGU9ImZhbHNlIiBhdXRvLWNyZWF0ZS1iaW5kaW5nPSJ0cnVlIiBjYW4tYXR0YWNoLWxhYmVsPSJ0cnVlIj4KKyAgICAgICAgPGRlZmF1bHQtY29uc3RyYWludHMgdnNpemUtcG9saWN5PSI2IiBoc2l6ZS1wb2xpY3k9IjYiIGFuY2hvcj0iMCIgZmlsbD0iMyI+CisgICAgICAgICAgPHByZWZlcnJlZC1zaXplIHdpZHRoPSIxNTAiIGhlaWdodD0iNTAiIC8+CisgICAgICAgIDwvZGVmYXVsdC1jb25zdHJhaW50cz4KKyAgICAgIDwvaXRlbT4KKyAgICAgIDxpdGVtIGNsYXNzPSJqYXZheC5zd2luZy5KRWRpdG9yUGFuZSIgaWNvbj0iL2NvbS9pbnRlbGxpai91aURlc2lnbmVyL2ljb25zL2VkaXRvclBhbmUucG5nIiByZW1vdmFibGU9ImZhbHNlIiBhdXRvLWNyZWF0ZS1iaW5kaW5nPSJ0cnVlIiBjYW4tYXR0YWNoLWxhYmVsPSJ0cnVlIj4KKyAgICAgICAgPGRlZmF1bHQtY29uc3RyYWludHMgdnNpemUtcG9saWN5PSI2IiBoc2l6ZS1wb2xpY3k9IjYiIGFuY2hvcj0iMCIgZmlsbD0iMyI+CisgICAgICAgICAgPHByZWZlcnJlZC1zaXplIHdpZHRoPSIxNTAiIGhlaWdodD0iNTAiIC8+CisgICAgICAgIDwvZGVmYXVsdC1jb25zdHJhaW50cz4KKyAgICAgIDwvaXRlbT4KKyAgICAgIDxpdGVtIGNsYXNzPSJqYXZheC5zd2luZy5KQ29tYm9Cb3giIGljb249Ii9jb20vaW50ZWxsaWovdWlEZXNpZ25lci9pY29ucy9jb21ib0JveC5wbmciIHJlbW92YWJsZT0iZmFsc2UiIGF1dG8tY3JlYXRlLWJpbmRpbmc9InRydWUiIGNhbi1hdHRhY2gtbGFiZWw9InRydWUiPgorICAgICAgICA8ZGVmYXVsdC1jb25zdHJhaW50cyB2c2l6ZS1wb2xpY3k9IjAiIGhzaXplLXBvbGljeT0iMiIgYW5jaG9yPSI4IiBmaWxsPSIxIiAvPgorICAgICAgPC9pdGVtPgorICAgICAgPGl0ZW0gY2xhc3M9ImphdmF4LnN3aW5nLkpUYWJsZSIgaWNvbj0iL2NvbS9pbnRlbGxpai91aURlc2lnbmVyL2ljb25zL3RhYmxlLnBuZyIgcmVtb3ZhYmxlPSJmYWxzZSIgYXV0by1jcmVhdGUtYmluZGluZz0idHJ1ZSIgY2FuLWF0dGFjaC1sYWJlbD0iZmFsc2UiPgorICAgICAgICA8ZGVmYXVsdC1jb25zdHJhaW50cyB2c2l6ZS1wb2xpY3k9IjYiIGhzaXplLXBvbGljeT0iNiIgYW5jaG9yPSIwIiBmaWxsPSIzIj4KKyAgICAgICAgICA8cHJlZmVycmVkLXNpemUgd2lkdGg9IjE1MCIgaGVpZ2h0PSI1MCIgLz4KKyAgICAgICAgPC9kZWZhdWx0LWNvbnN0cmFpbnRzPgorICAgICAgPC9pdGVtPgorICAgICAgPGl0ZW0gY2xhc3M9ImphdmF4LnN3aW5nLkpMaXN0IiBpY29uPSIvY29tL2ludGVsbGlqL3VpRGVzaWduZXIvaWNvbnMvbGlzdC5wbmciIHJlbW92YWJsZT0iZmFsc2UiIGF1dG8tY3JlYXRlLWJpbmRpbmc9InRydWUiIGNhbi1hdHRhY2gtbGFiZWw9ImZhbHNlIj4KKyAgICAgICAgPGRlZmF1bHQtY29uc3RyYWludHMgdnNpemUtcG9saWN5PSI2IiBoc2l6ZS1wb2xpY3k9IjIiIGFuY2hvcj0iMCIgZmlsbD0iMyI+CisgICAgICAgICAgPHByZWZlcnJlZC1zaXplIHdpZHRoPSIxNTAiIGhlaWdodD0iNTAiIC8+CisgICAgICAgIDwvZGVmYXVsdC1jb25zdHJhaW50cz4KKyAgICAgIDwvaXRlbT4KKyAgICAgIDxpdGVtIGNsYXNzPSJqYXZheC5zd2luZy5KVHJlZSIgaWNvbj0iL2NvbS9pbnRlbGxpai91aURlc2lnbmVyL2ljb25zL3RyZWUucG5nIiByZW1vdmFibGU9ImZhbHNlIiBhdXRvLWNyZWF0ZS1iaW5kaW5nPSJ0cnVlIiBjYW4tYXR0YWNoLWxhYmVsPSJmYWxzZSI+CisgICAgICAgIDxkZWZhdWx0LWNvbnN0cmFpbnRzIHZzaXplLXBvbGljeT0iNiIgaHNpemUtcG9saWN5PSI2IiBhbmNob3I9IjAiIGZpbGw9IjMiPgorICAgICAgICAgIDxwcmVmZXJyZWQtc2l6ZSB3aWR0aD0iMTUwIiBoZWlnaHQ9IjUwIiAvPgorICAgICAgICA8L2RlZmF1bHQtY29uc3RyYWludHM+CisgICAgICA8L2l0ZW0+CisgICAgICA8aXRlbSBjbGFzcz0iamF2YXguc3dpbmcuSlRhYmJlZFBhbmUiIGljb249Ii9jb20vaW50ZWxsaWovdWlEZXNpZ25lci9pY29ucy90YWJiZWRQYW5lLnBuZyIgcmVtb3ZhYmxlPSJmYWxzZSIgYXV0by1jcmVhdGUtYmluZGluZz0idHJ1ZSIgY2FuLWF0dGFjaC1sYWJlbD0iZmFsc2UiPgorICAgICAgICA8ZGVmYXVsdC1jb25zdHJhaW50cyB2c2l6ZS1wb2xpY3k9IjMiIGhzaXplLXBvbGljeT0iMyIgYW5jaG9yPSIwIiBmaWxsPSIzIj4KKyAgICAgICAgICA8cHJlZmVycmVkLXNpemUgd2lkdGg9IjIwMCIgaGVpZ2h0PSIyMDAiIC8+CisgICAgICAgIDwvZGVmYXVsdC1jb25zdHJhaW50cz4KKyAgICAgIDwvaXRlbT4KKyAgICAgIDxpdGVtIGNsYXNzPSJqYXZheC5zd2luZy5KU3BsaXRQYW5lIiBpY29uPSIvY29tL2ludGVsbGlqL3VpRGVzaWduZXIvaWNvbnMvc3BsaXRQYW5lLnBuZyIgcmVtb3ZhYmxlPSJmYWxzZSIgYXV0by1jcmVhdGUtYmluZGluZz0iZmFsc2UiIGNhbi1hdHRhY2gtbGFiZWw9ImZhbHNlIj4KKyAgICAgICAgPGRlZmF1bHQtY29uc3RyYWludHMgdnNpemUtcG9saWN5PSIzIiBoc2l6ZS1wb2xpY3k9IjMiIGFuY2hvcj0iMCIgZmlsbD0iMyI+CisgICAgICAgICAgPHByZWZlcnJlZC1zaXplIHdpZHRoPSIyMDAiIGhlaWdodD0iMjAwIiAvPgorICAgICAgICA8L2RlZmF1bHQtY29uc3RyYWludHM+CisgICAgICA8L2l0ZW0+CisgICAgICA8aXRlbSBjbGFzcz0iamF2YXguc3dpbmcuSlNwaW5uZXIiIGljb249Ii9jb20vaW50ZWxsaWovdWlEZXNpZ25lci9pY29ucy9zcGlubmVyLnBuZyIgcmVtb3ZhYmxlPSJmYWxzZSIgYXV0by1jcmVhdGUtYmluZGluZz0idHJ1ZSIgY2FuLWF0dGFjaC1sYWJlbD0idHJ1ZSI+CisgICAgICAgIDxkZWZhdWx0LWNvbnN0cmFpbnRzIHZzaXplLXBvbGljeT0iMCIgaHNpemUtcG9saWN5PSI2IiBhbmNob3I9IjgiIGZpbGw9IjEiIC8+CisgICAgICA8L2l0ZW0+CisgICAgICA8aXRlbSBjbGFzcz0iamF2YXguc3dpbmcuSlNsaWRlciIgaWNvbj0iL2NvbS9pbnRlbGxpai91aURlc2lnbmVyL2ljb25zL3NsaWRlci5wbmciIHJlbW92YWJsZT0iZmFsc2UiIGF1dG8tY3JlYXRlLWJpbmRpbmc9InRydWUiIGNhbi1hdHRhY2gtbGFiZWw9ImZhbHNlIj4KKyAgICAgICAgPGRlZmF1bHQtY29uc3RyYWludHMgdnNpemUtcG9saWN5PSIwIiBoc2l6ZS1wb2xpY3k9IjYiIGFuY2hvcj0iOCIgZmlsbD0iMSIgLz4KKyAgICAgIDwvaXRlbT4KKyAgICAgIDxpdGVtIGNsYXNzPSJqYXZheC5zd2luZy5KU2VwYXJhdG9yIiBpY29uPSIvY29tL2ludGVsbGlqL3VpRGVzaWduZXIvaWNvbnMvc2VwYXJhdG9yLnBuZyIgcmVtb3ZhYmxlPSJmYWxzZSIgYXV0by1jcmVhdGUtYmluZGluZz0iZmFsc2UiIGNhbi1hdHRhY2gtbGFiZWw9ImZhbHNlIj4KKyAgICAgICAgPGRlZmF1bHQtY29uc3RyYWludHMgdnNpemUtcG9saWN5PSI2IiBoc2l6ZS1wb2xpY3k9IjYiIGFuY2hvcj0iMCIgZmlsbD0iMyIgLz4KKyAgICAgIDwvaXRlbT4KKyAgICAgIDxpdGVtIGNsYXNzPSJqYXZheC5zd2luZy5KUHJvZ3Jlc3NCYXIiIGljb249Ii9jb20vaW50ZWxsaWovdWlEZXNpZ25lci9pY29ucy9wcm9ncmVzc2Jhci5wbmciIHJlbW92YWJsZT0iZmFsc2UiIGF1dG8tY3JlYXRlLWJpbmRpbmc9InRydWUiIGNhbi1hdHRhY2gtbGFiZWw9ImZhbHNlIj4KKyAgICAgICAgPGRlZmF1bHQtY29uc3RyYWludHMgdnNpemUtcG9saWN5PSIwIiBoc2l6ZS1wb2xpY3k9IjYiIGFuY2hvcj0iMCIgZmlsbD0iMSIgLz4KKyAgICAgIDwvaXRlbT4KKyAgICAgIDxpdGVtIGNsYXNzPSJqYXZheC5zd2luZy5KVG9vbEJhciIgaWNvbj0iL2NvbS9pbnRlbGxpai91aURlc2lnbmVyL2ljb25zL3Rvb2xiYXIucG5nIiByZW1vdmFibGU9ImZhbHNlIiBhdXRvLWNyZWF0ZS1iaW5kaW5nPSJmYWxzZSIgY2FuLWF0dGFjaC1sYWJlbD0iZmFsc2UiPgorICAgICAgICA8ZGVmYXVsdC1jb25zdHJhaW50cyB2c2l6ZS1wb2xpY3k9IjAiIGhzaXplLXBvbGljeT0iNiIgYW5jaG9yPSIwIiBmaWxsPSIxIj4KKyAgICAgICAgICA8cHJlZmVycmVkLXNpemUgd2lkdGg9Ii0xIiBoZWlnaHQ9IjIwIiAvPgorICAgICAgICA8L2RlZmF1bHQtY29uc3RyYWludHM+CisgICAgICA8L2l0ZW0+CisgICAgICA8aXRlbSBjbGFzcz0iamF2YXguc3dpbmcuSlRvb2xCYXIkU2VwYXJhdG9yIiBpY29uPSIvY29tL2ludGVsbGlqL3VpRGVzaWduZXIvaWNvbnMvdG9vbGJhclNlcGFyYXRvci5wbmciIHJlbW92YWJsZT0iZmFsc2UiIGF1dG8tY3JlYXRlLWJpbmRpbmc9ImZhbHNlIiBjYW4tYXR0YWNoLWxhYmVsPSJmYWxzZSI+CisgICAgICAgIDxkZWZhdWx0LWNvbnN0cmFpbnRzIHZzaXplLXBvbGljeT0iMCIgaHNpemUtcG9saWN5PSIwIiBhbmNob3I9IjAiIGZpbGw9IjEiIC8+CisgICAgICA8L2l0ZW0+CisgICAgICA8aXRlbSBjbGFzcz0iamF2YXguc3dpbmcuSlNjcm9sbEJhciIgaWNvbj0iL2NvbS9pbnRlbGxpai91aURlc2lnbmVyL2ljb25zL3Njcm9sbGJhci5wbmciIHJlbW92YWJsZT0iZmFsc2UiIGF1dG8tY3JlYXRlLWJpbmRpbmc9InRydWUiIGNhbi1hdHRhY2gtbGFiZWw9ImZhbHNlIj4KKyAgICAgICAgPGRlZmF1bHQtY29uc3RyYWludHMgdnNpemUtcG9saWN5PSI2IiBoc2l6ZS1wb2xpY3k9IjAiIGFuY2hvcj0iMCIgZmlsbD0iMiIgLz4KKyAgICAgIDwvaXRlbT4KKyAgICA8L2dyb3VwPgorICA8L2NvbXBvbmVudD4KKyAgPGNvbXBvbmVudCBuYW1lPSJQcm9qZWN0RGV0YWlscyI+CisgICAgPG9wdGlvbiBuYW1lPSJwcm9qZWN0TmFtZSIgdmFsdWU9InRlc3RuZyIgLz4KKyAgPC9jb21wb25lbnQ+CisgIDxjb21wb25lbnQgbmFtZT0iUHJvamVjdEZpbGVWZXJzaW9uIiBjb252ZXJ0ZWQ9InRydWUiPgorICAgIDxjb252ZXJ0ZXIgaWQ9ImphdmFlZS1tb2R1bGVzIiAvPgorICAgIDxjb252ZXJ0ZXIgaWQ9InJvci1tb2R1bGVzIiAvPgorICAgIDxjb252ZXJ0ZXIgaWQ9IlNlbGVuYVJ1bkNvbmZUb0RpYW5hIiAvPgorICA8L2NvbXBvbmVudD4KKyAgPGNvbXBvbmVudCBuYW1lPSJQcm9qZWN0S2V5Ij4KKyAgICA8b3B0aW9uIG5hbWU9InN0YXRlIiB2YWx1ZT0icHJvamVjdDovL0M6XGFubmFcdGVzdG5nXHRlc3RuZy5pcHIiIC8+CisgIDwvY29tcG9uZW50PgorICA8Y29tcG9uZW50IG5hbWU9IlByb2plY3RNb2R1bGVNYW5hZ2VyIj4KKyAgICA8bW9kdWxlcz4KKyAgICAgIDxtb2R1bGUgZmlsZXVybD0iZmlsZTovLyRQUk9KRUNUX0RJUiQvdGVzdG5nLmltbCIgZmlsZXBhdGg9IiRQUk9KRUNUX0RJUiQvdGVzdG5nLmltbCIgLz4KKyAgICAgIDxtb2R1bGUgZmlsZXVybD0iZmlsZTovLyRQUk9KRUNUX0RJUiQvdGVzdG5nLWNoaWxkL3Rlc3RuZy1jaGlsZC5pbWwiIGZpbGVwYXRoPSIkUFJPSkVDVF9ESVIkL3Rlc3RuZy1jaGlsZC90ZXN0bmctY2hpbGQuaW1sIiAvPgorICAgIDwvbW9kdWxlcz4KKyAgPC9jb21wb25lbnQ+CisgIDxjb21wb25lbnQgbmFtZT0iUHJvamVjdFJvb3RNYW5hZ2VyIiB2ZXJzaW9uPSIyIiBsYW5ndWFnZUxldmVsPSJKREtfMV81IiBhc3NlcnQta2V5d29yZD0idHJ1ZSIgamRrLTE1PSJ0cnVlIiBwcm9qZWN0LWpkay1uYW1lPSIxLjYiIHByb2plY3QtamRrLXR5cGU9IkphdmFTREsiPgorICAgIDxvdXRwdXQgdXJsPSJmaWxlOi8vJFBST0pFQ1RfRElSJC9vdXQiIC8+CisgIDwvY29tcG9uZW50PgorICA8Y29tcG9uZW50IG5hbWU9IlJlc291cmNlTWFuYWdlckNvbnRhaW5lciI+CisgICAgPG9wdGlvbiBuYW1lPSJteVJlc291cmNlQnVuZGxlcyI+CisgICAgICA8dmFsdWU+CisgICAgICAgIDxsaXN0IHNpemU9IjAiIC8+CisgICAgICA8L3ZhbHVlPgorICAgIDwvb3B0aW9uPgorICA8L2NvbXBvbmVudD4KKyAgPGNvbXBvbmVudCBuYW1lPSJSbWljU2V0dGluZ3MiPgorICAgIDxvcHRpb24gbmFtZT0iSVNfRUFOQUJMRUQiIHZhbHVlPSJmYWxzZSIgLz4KKyAgICA8b3B0aW9uIG5hbWU9IkRFQlVHR0lOR19JTkZPIiB2YWx1ZT0idHJ1ZSIgLz4KKyAgICA8b3B0aW9uIG5hbWU9IkdFTkVSQVRFX05PX1dBUk5JTkdTIiB2YWx1ZT0iZmFsc2UiIC8+CisgICAgPG9wdGlvbiBuYW1lPSJHRU5FUkFURV9JSU9QX1NUVUJTIiB2YWx1ZT0iZmFsc2UiIC8+CisgICAgPG9wdGlvbiBuYW1lPSJBRERJVElPTkFMX09QVElPTlNfU1RSSU5HIiB2YWx1ZT0iIiAvPgorICA8L2NvbXBvbmVudD4KKyAgPGNvbXBvbmVudCBuYW1lPSJXZWJTZXJ2aWNlc1BsdWdpbiIgYWRkUmVxdWlyZWRMaWJyYXJpZXM9InRydWUiIC8+CisgIDxVc2VkUGF0aE1hY3Jvcz4KKyAgICA8bWFjcm8gbmFtZT0icHAiIGRlc2NyaXB0aW9uPSIiIC8+CisgIDwvVXNlZFBhdGhNYWNyb3M+Cis8L3Byb2plY3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGF0YUZsb3cvQWxleEJ1Zy9leHBlY3RlZC54bWwgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kYXRhRmxvdy9BbGV4QnVnL2V4cGVjdGVkLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OTZhMzE1Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGF0YUZsb3cvQWxleEJ1Zy9leHBlY3RlZC54bWwKQEAgLTAsMCArMSwyIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHByb2JsZW1zIC8+CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kYXRhRmxvdy9BbGV4QnVnL3NyYy9UZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kYXRhRmxvdy9BbGV4QnVnL3NyYy9UZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTk1M2E2YQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RhdGFGbG93L0FsZXhCdWcvc3JjL1Rlc3QuamF2YQpAQCAtMCwwICsxLDcgQEAKK3B1YmxpYyBjbGFzcyBUZXN0IHsKKyAgcHVibGljIFN0cmluZyBmb28oU3RyaW5nIHBhdGgpIHsKKyAgICBTdHJpbmcgc210aCA9IG5ldyBTdHJpbmcocGF0aCk7CisgICAgaWYgKHBhdGggPT0gbnVsbCkgcmV0dXJuIG51bGw7CisgICAgcmV0dXJuIHNtdGg7CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RhdGFGbG93L0FycmF5QWNjZXNzRG9lc250Q2FuY2VsQW5hbHlzaXMvZXhwZWN0ZWQueG1sIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGF0YUZsb3cvQXJyYXlBY2Nlc3NEb2VzbnRDYW5jZWxBbmFseXNpcy9leHBlY3RlZC54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDA1NzhlMQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RhdGFGbG93L0FycmF5QWNjZXNzRG9lc250Q2FuY2VsQW5hbHlzaXMvZXhwZWN0ZWQueG1sCkBAIC0wLDAgKzEsOCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxwcm9ibGVtcz4KKzxwcm9ibGVtPgorICA8ZmlsZT5UZXN0LmphdmE8L2ZpbGU+CisgIDxsaW5lPjk8L2xpbmU+CisgIDxkZXNjcmlwdGlvbj5QYXNzaW5nIG51bGwgYXJndW1lbnQgdG8gcGFyYW1ldGVyIGFubm90YXRlZCBhcyBATm90TnVsbDwvZGVzY3JpcHRpb24+Cis8L3Byb2JsZW0+Cis8L3Byb2JsZW1zPgpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGF0YUZsb3cvQXJyYXlBY2Nlc3NEb2VzbnRDYW5jZWxBbmFseXNpcy9zcmMvVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGF0YUZsb3cvQXJyYXlBY2Nlc3NEb2VzbnRDYW5jZWxBbmFseXNpcy9zcmMvVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZiMzg0ZTIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kYXRhRmxvdy9BcnJheUFjY2Vzc0RvZXNudENhbmNlbEFuYWx5c2lzL3NyYy9UZXN0LmphdmEKQEAgLTAsMCArMSwxMSBAQAoraW1wb3J0IG9yZy5qZXRicmFpbnMuYW5ub3RhdGlvbnMuKjsKKworcHVibGljIGNsYXNzIFRlc3QgeworICBwcml2YXRlIHN0YXRpYyB2b2lkIGZvbyhATm90TnVsbCBTdHJpbmcgc210aCkgeworICB9CisKKyAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworICAgIFN0cmluZyBzID0gYXJnc1swXTsKKyAgICBmb28obnVsbCk7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kYXRhRmxvdy9BcnJheUFjY2Vzc05QRS9leHBlY3RlZC54bWwgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kYXRhRmxvdy9BcnJheUFjY2Vzc05QRS9leHBlY3RlZC54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjE3ODYzYQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RhdGFGbG93L0FycmF5QWNjZXNzTlBFL2V4cGVjdGVkLnhtbApAQCAtMCwwICsxLDggQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8cHJvYmxlbXM+Cis8cHJvYmxlbT4KKyAgPGZpbGU+VGVzdC5qYXZhPC9maWxlPgorICA8bGluZT41PC9saW5lPgorICA8ZGVzY3JpcHRpb24+QXJyYXkgYWNjZXNzICZsdDtjb2RlJmd0O3BhdGhbMF0mbHQ7L2NvZGUmZ3Q7IG1heSBwcm9kdWNlICZsdDtjb2RlJmd0O2phdmEubGFuZy5OdWxsUG9pbnRlckV4Y2VwdGlvbiZsdDsvY29kZSZndDs8L2Rlc2NyaXB0aW9uPgorPC9wcm9ibGVtPgorPC9wcm9ibGVtcz4KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RhdGFGbG93L0FycmF5QWNjZXNzTlBFL3NyYy9UZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kYXRhRmxvdy9BcnJheUFjY2Vzc05QRS9zcmMvVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJmYjRhODIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kYXRhRmxvdy9BcnJheUFjY2Vzc05QRS9zcmMvVGVzdC5qYXZhCkBAIC0wLDAgKzEsOSBAQAorcHVibGljIGNsYXNzIFRlc3QgeworICBwdWJsaWMgU3RyaW5nIGZvbyhTdHJpbmdbXSBwYXRoKSB7CisgICAgaWYgKHBhdGggIT0gbnVsbCkgcmV0dXJuIG51bGw7CisgICAKKyAgICBTdHJpbmcgcCA9IHBhdGhbMF07CisKKyAgICByZXR1cm4gIiI7CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RhdGFGbG93L0JveGluZ05hTi9leHBlY3RlZC54bWwgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kYXRhRmxvdy9Cb3hpbmdOYU4vZXhwZWN0ZWQueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM4NTljN2QKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kYXRhRmxvdy9Cb3hpbmdOYU4vZXhwZWN0ZWQueG1sCkBAIC0wLDAgKzEsNjMgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8cHJvYmxlbXM+CisgIDxwcm9ibGVtPgorICAgIDxmaWxlPlRlc3QuamF2YTwvZmlsZT4KKyAgICA8bGluZT42PC9saW5lPgorICAgIDxtZXRob2Q+CisgICAgICA8bmFtZT52b2lkIG1haW4oU3RyaW5nW10gYXJncyk8L25hbWU+CisgICAgICA8ZGlzcGxheV9uYW1lPm1haW4oU3RyaW5nW10pPC9kaXNwbGF5X25hbWU+CisgICAgICA8cGFja2FnZT4mbHQ7ZGVmYXVsdCZndDs8L3BhY2thZ2U+CisgICAgICA8Y2xhc3M+CisgICAgICAgIDxuYW1lPkRvdWJsZVRyb3VibGU8L25hbWU+CisgICAgICAgIDxkaXNwbGF5X25hbWU+RG91YmxlVHJvdWJsZTwvZGlzcGxheV9uYW1lPgorICAgICAgPC9jbGFzcz4KKyAgICA8L21ldGhvZD4KKyAgICA8ZGVzY3JpcHRpb24+Q29uZGl0aW9uICZsdDtjb2RlJmd0O2IgPT0gRG91YmxlLk5hTiZsdDsvY29kZSZndDsgaXMgYWx3YXlzICZsdDtjb2RlJmd0O2ZhbHNlJmx0Oy9jb2RlJmd0Oy48L2Rlc2NyaXB0aW9uPgorICA8L3Byb2JsZW0+CisKKyAgPHByb2JsZW0+CisgICAgPGZpbGU+VGVzdC5qYXZhPC9maWxlPgorICAgIDxsaW5lPjExPC9saW5lPgorICAgIDxtZXRob2Q+CisgICAgICA8bmFtZT52b2lkIG1haW4oU3RyaW5nW10gYXJncyk8L25hbWU+CisgICAgICA8ZGlzcGxheV9uYW1lPm1haW4oU3RyaW5nW10pPC9kaXNwbGF5X25hbWU+CisgICAgICA8cGFja2FnZT4mbHQ7ZGVmYXVsdCZndDs8L3BhY2thZ2U+CisgICAgICA8Y2xhc3M+CisgICAgICAgIDxuYW1lPkRvdWJsZVRyb3VibGU8L25hbWU+CisgICAgICAgIDxkaXNwbGF5X25hbWU+RG91YmxlVHJvdWJsZTwvZGlzcGxheV9uYW1lPgorICAgICAgPC9jbGFzcz4KKyAgICA8L21ldGhvZD4KKyAgICA8ZGVzY3JpcHRpb24+Q29uZGl0aW9uICZsdDtjb2RlJmd0O0Zsb2F0Lk5hTiAhPSBGbG9hdC5OYU4mbHQ7L2NvZGUmZ3Q7IGlzIGFsd2F5cyAmbHQ7Y29kZSZndDt0cnVlJmx0Oy9jb2RlJmd0Oy48L2Rlc2NyaXB0aW9uPgorICA8L3Byb2JsZW0+CisKKyAgPHByb2JsZW0+CisgICAgPGZpbGU+VGVzdC5qYXZhPC9maWxlPgorICAgIDxsaW5lPjE4PC9saW5lPgorICAgIDxtZXRob2Q+CisgICAgICA8bmFtZT52b2lkIG1haW4oU3RyaW5nW10gYXJncyk8L25hbWU+CisgICAgICA8ZGlzcGxheV9uYW1lPm1haW4oU3RyaW5nW10pPC9kaXNwbGF5X25hbWU+CisgICAgICA8cGFja2FnZT4mbHQ7ZGVmYXVsdCZndDs8L3BhY2thZ2U+CisgICAgICA8Y2xhc3M+CisgICAgICAgIDxuYW1lPkRvdWJsZVRyb3VibGU8L25hbWU+CisgICAgICAgIDxkaXNwbGF5X25hbWU+RG91YmxlVHJvdWJsZTwvZGlzcGxheV9uYW1lPgorICAgICAgPC9jbGFzcz4KKyAgICA8L21ldGhvZD4KKyAgICA8ZGVzY3JpcHRpb24+Q29uZGl0aW9uICZsdDtjb2RlJmd0O0RvdWJsZS5OYU4gPT0gYSZsdDsvY29kZSZndDsgaXMgYWx3YXlzICZsdDtjb2RlJmd0O2ZhbHNlJmx0Oy9jb2RlJmd0Oy48L2Rlc2NyaXB0aW9uPgorICA8L3Byb2JsZW0+CisKKyAgPHByb2JsZW0+CisgICAgPGZpbGU+VGVzdC5qYXZhPC9maWxlPgorICAgIDxsaW5lPjE5PC9saW5lPgorICAgIDxtZXRob2Q+CisgICAgICA8bmFtZT52b2lkIG1haW4oU3RyaW5nW10gYXJncyk8L25hbWU+CisgICAgICA8ZGlzcGxheV9uYW1lPm1haW4oU3RyaW5nW10pPC9kaXNwbGF5X25hbWU+CisgICAgICA8cGFja2FnZT4mbHQ7ZGVmYXVsdCZndDs8L3BhY2thZ2U+CisgICAgICA8Y2xhc3M+CisgICAgICAgIDxuYW1lPkRvdWJsZVRyb3VibGU8L25hbWU+CisgICAgICAgIDxkaXNwbGF5X25hbWU+RG91YmxlVHJvdWJsZTwvZGlzcGxheV9uYW1lPgorICAgICAgPC9jbGFzcz4KKyAgICA8L21ldGhvZD4KKyAgICA8ZGVzY3JpcHRpb24+Q29uZGl0aW9uICZsdDtjb2RlJmd0O2IgPT0gYSZsdDsvY29kZSZndDsgaXMgYWx3YXlzICZsdDtjb2RlJmd0O2ZhbHNlJmx0Oy9jb2RlJmd0Oy48L2Rlc2NyaXB0aW9uPgorICA8L3Byb2JsZW0+Cis8L3Byb2JsZW1zPgorCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kYXRhRmxvdy9Cb3hpbmdOYU4vc3JjL1Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RhdGFGbG93L0JveGluZ05hTi9zcmMvVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM0OTViYmIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kYXRhRmxvdy9Cb3hpbmdOYU4vc3JjL1Rlc3QuamF2YQpAQCAtMCwwICsxLDIyIEBACitwdWJsaWMgY2xhc3MgRG91YmxlVHJvdWJsZSB7CisgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworICAgICAgICB7CisgICAgICAgIERvdWJsZSBhID0gRG91YmxlLk5hTjsKKyAgICAgICAgZG91YmxlIGIgPSBhOy8vRG91YmxlLk5hTjsKKyAgICAgICAgaWYgKGIgPT0gRG91YmxlLk5hTikgeworICAgICAgICAgICAgOworICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAoRmxvYXQuTmFOICE9IEZsb2F0Lk5hTikgeworCisgICAgICAgIH0KKworICAgICAgICB7CisgICAgICAgICAgZG91YmxlIGEgPSBEb3VibGUuTmFOOworICAgICAgICAgIGRvdWJsZSBiID0gRG91YmxlLk5hTjsKKyAgICAgICAgICBpZiAoRG91YmxlLk5hTiA9PSBhKSB7fQorICAgICAgICAgIGlmIChiID09IGEpIHt9CisgICAgICAgIH0KKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kYXRhRmxvdy9DYXRjaFBhcmFtZXRlckNhbnRCZU51bGwvZXhwZWN0ZWQueG1sIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGF0YUZsb3cvQ2F0Y2hQYXJhbWV0ZXJDYW50QmVOdWxsL2V4cGVjdGVkLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wODFlOGZhCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGF0YUZsb3cvQ2F0Y2hQYXJhbWV0ZXJDYW50QmVOdWxsL2V4cGVjdGVkLnhtbApAQCAtMCwwICsxLDEzIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHByb2JsZW1zPgorICA8cHJvYmxlbT4KKyAgICA8ZmlsZT5UZXN0LmphdmE8L2ZpbGU+CisgICAgPGxpbmU+ODwvbGluZT4KKyAgICA8ZGVzY3JpcHRpb24+Q29uZGl0aW9uICdlID09IG51bGwnIGlzIGFsd2F5cyBmYWxzZTwvZGVzY3JpcHRpb24+CisgIDwvcHJvYmxlbT4KKyAgPHByb2JsZW0+CisgICAgPGZpbGU+VGVzdC5qYXZhPC9maWxlPgorICAgIDxsaW5lPjExPC9saW5lPgorICAgIDxkZXNjcmlwdGlvbj5Db25kaXRpb24gJ2UgaW5zdGFuY2VvZiBGaWxlTm90Rm91bmRFeGNlcHRpb24nIGlzIGFsd2F5cyBmYWxzZTwvZGVzY3JpcHRpb24+CisgIDwvcHJvYmxlbT4KKzwvcHJvYmxlbXM+CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kYXRhRmxvdy9DYXRjaFBhcmFtZXRlckNhbnRCZU51bGwvc3JjL1Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RhdGFGbG93L0NhdGNoUGFyYW1ldGVyQ2FudEJlTnVsbC9zcmMvVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQwOGZiYWMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kYXRhRmxvdy9DYXRjaFBhcmFtZXRlckNhbnRCZU51bGwvc3JjL1Rlc3QuamF2YQpAQCAtMCwwICsxLDE2IEBACitpbXBvcnQgamF2YS5pby4qOworCitwdWJsaWMgY2xhc3MgRm9vIHsKKyAgcHVibGljIHZvaWQgZm9vKCkgeworICAgIHRyeSB7CisgICAgICB0aHJvdyBuZXcgRU9GRXhjZXB0aW9uKCJhYWEiKTsKKyAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgICAgaWYgKGUgPT0gbnVsbCkgeworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNhbid0IGJlIGhlcmUuIik7CisgICAgICB9CisgICAgICBpZiAoZSBpbnN0YW5jZW9mIEZpbGVOb3RGb3VuZEV4Y2VwdGlvbikgeworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNhbid0IGJlIGhlcmUuIik7CisgICAgICB9CisgICAgfQorICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGF0YUZsb3cvQ2hlY2tlZEV4Y2VwdGlvbkRvbWluYW5jZS9leHBlY3RlZC54bWwgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kYXRhRmxvdy9DaGVja2VkRXhjZXB0aW9uRG9taW5hbmNlL2V4cGVjdGVkLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYzI3MmFiCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGF0YUZsb3cvQ2hlY2tlZEV4Y2VwdGlvbkRvbWluYW5jZS9leHBlY3RlZC54bWwKQEAgLTAsMCArMSwzIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHByb2JsZW1zLz4KKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGF0YUZsb3cvQ2hlY2tlZEV4Y2VwdGlvbkRvbWluYW5jZS9zcmMvVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGF0YUZsb3cvQ2hlY2tlZEV4Y2VwdGlvbkRvbWluYW5jZS9zcmMvVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRhMGE2OTAKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kYXRhRmxvdy9DaGVja2VkRXhjZXB0aW9uRG9taW5hbmNlL3NyYy9UZXN0LmphdmEKQEAgLTAsMCArMSwyNCBAQAorIHB1YmxpYyBjbGFzcyBDaGVja2VkRXhjZXB0aW9uRG9taW5hbmNlIHsKKyAgIHByaXZhdGUgc3RhdGljIGNsYXNzIENoZWNrZWRFeGNlcHRpb24gZXh0ZW5kcyBFeGNlcHRpb24ge30KKworICAgcHVibGljIHN0YXRpYyB2b2lkIGZvbygpIHsKKyAgICAgYm9vbGVhbiBmbGFnID0gdHJ1ZTsKKworICAgICB0cnkgeworICAgICAgIGJhcigpOworICAgICB9CisgICAgIGNhdGNoIChDaGVja2VkRXhjZXB0aW9uIGUpIHsKKyAgICAgICBmbGFnID0gZmFsc2U7CisgICAgIH0KKyAgICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgIH0KKworICAgICBpZiAoZmxhZykgeyAvLyBUaGlzIHNob3VsZCBub3QgYmUgaGlnaGxpZ2h0ZWQgYXMgYWx3YXlzIHRydWU7CisgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJNdXN0IG5vdCBoYXBwZW4iKTsKKyAgICAgfQorICAgfQorCisgICBwdWJsaWMgc3RhdGljIHZvaWQgYmFyKCkgdGhyb3dzIENoZWNrZWRFeGNlcHRpb24geworICAgICB0aHJvdyBuZXcgQ2hlY2tlZEV4Y2VwdGlvbigpOworICAgfQorIH0KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RhdGFGbG93L0NvbmRpdGlvbkZhbHNlQW5kTlBFL2V4cGVjdGVkLnhtbCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RhdGFGbG93L0NvbmRpdGlvbkZhbHNlQW5kTlBFL2V4cGVjdGVkLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZWY0ZDZhCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGF0YUZsb3cvQ29uZGl0aW9uRmFsc2VBbmROUEUvZXhwZWN0ZWQueG1sCkBAIC0wLDAgKzEsMTggQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8cHJvYmxlbXM+CisgIDxwcm9ibGVtPgorICAgIDxmaWxlPlRlc3QuamF2YTwvZmlsZT4KKyAgICA8bGluZT45PC9saW5lPgorICAgIDxkZXNjcmlwdGlvbj5NZXRob2QgaW52b2NhdGlvbiAnZm9vKCkuZm9vKCknIG1heSBwcm9kdWNlIE51bGxQb2ludGVyRXhjZXB0aW9uPC9kZXNjcmlwdGlvbj4KKyAgPC9wcm9ibGVtPgorICA8cHJvYmxlbT4KKyAgICA8ZmlsZT5UZXN0LmphdmE8L2ZpbGU+CisgICAgPGxpbmU+MTA8L2xpbmU+CisgICAgPGRlc2NyaXB0aW9uPk1ldGhvZCBpbnZvY2F0aW9uICdmb28oKS5mb28oKScgbWF5IHByb2R1Y2UgTnVsbFBvaW50ZXJFeGNlcHRpb248L2Rlc2NyaXB0aW9uPgorICA8L3Byb2JsZW0+CisgIDxwcm9ibGVtPgorICAgIDxmaWxlPlRlc3QuamF2YTwvZmlsZT4KKyAgICA8bGluZT4xMDwvbGluZT4KKyAgICA8ZGVzY3JpcHRpb24+TWV0aG9kIGludm9jYXRpb24gJ2ZvbygpLmZvbygpLmZvbygpJyBtYXkgcHJvZHVjZSBOdWxsUG9pbnRlckV4Y2VwdGlvbjwvZGVzY3JpcHRpb24+CisgIDwvcHJvYmxlbT4KKzwvcHJvYmxlbXM+CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kYXRhRmxvdy9Db25kaXRpb25GYWxzZUFuZE5QRS9zcmMvVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGF0YUZsb3cvQ29uZGl0aW9uRmFsc2VBbmROUEUvc3JjL1Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYjAyOWFjCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGF0YUZsb3cvQ29uZGl0aW9uRmFsc2VBbmROUEUvc3JjL1Rlc3QuamF2YQpAQCAtMCwwICsxLDE0IEBACitpbXBvcnQgb3JnLmpldGJyYWlucy5hbm5vdGF0aW9ucy5OdWxsYWJsZTsKK3B1YmxpYyBjbGFzcyBGb28geworICAgIEBOdWxsYWJsZSBGb28gZm9vKCkgeworICAgICAgICByZXR1cm4gbnVsbDsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBiYXIoKSB7CisgICAgICAgIGlmIChmb28oKSAhPSBudWxsICYmCisgICAgICAgICAgZm9vKCkuZm9vKCkgIT0gbnVsbCAmJgorICAgICAgICAgIGZvbygpLmZvbygpLmZvbygpICE9IG51bGwpIHsKKworICAgICAgICB9CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGF0YUZsb3cvQ29uc3RhbnRzRGlmZmVyZW50VHlwZXMvZXhwZWN0ZWQueG1sIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGF0YUZsb3cvQ29uc3RhbnRzRGlmZmVyZW50VHlwZXMvZXhwZWN0ZWQueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJhMDhjNTAKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kYXRhRmxvdy9Db25zdGFudHNEaWZmZXJlbnRUeXBlcy9leHBlY3RlZC54bWwKQEAgLTAsMCArMSw0NyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxwcm9ibGVtcz4KKyAgPHByb2JsZW0+CisgICAgPGZpbGU+VGVzdC5qYXZhPC9maWxlPgorICAgIDxsaW5lPjQ8L2xpbmU+CisgICAgPG1ldGhvZD4KKyAgICAgIDxuYW1lPnZvaWQgZigpPC9uYW1lPgorICAgICAgPGRpc3BsYXlfbmFtZT5mKCk8L2Rpc3BsYXlfbmFtZT4KKyAgICAgIDxwYWNrYWdlPiZsdDtkZWZhdWx0Jmd0OzwvcGFja2FnZT4KKyAgICAgIDxjbGFzcz4KKyAgICAgICAgPG5hbWU+VGVzdDwvbmFtZT4KKyAgICAgICAgPGRpc3BsYXlfbmFtZT5UZXN0PC9kaXNwbGF5X25hbWU+CisgICAgICA8L2NsYXNzPgorICAgIDwvbWV0aG9kPgorICAgIDxkZXNjcmlwdGlvbj5Db25kaXRpb24gJmx0O2NvZGUmZ3Q7TCA9PSA1Jmx0Oy9jb2RlJmd0OyBpcyBhbHdheXMgJmx0O2NvZGUmZ3Q7dHJ1ZSZsdDsvY29kZSZndDs8L2Rlc2NyaXB0aW9uPgorICA8L3Byb2JsZW0+CisKKyAgPHByb2JsZW0+CisgICAgPGZpbGU+VGVzdC5qYXZhPC9maWxlPgorICAgIDxsaW5lPjk8L2xpbmU+CisgICAgPG1ldGhvZD4KKyAgICAgIDxuYW1lPnZvaWQgZigpPC9uYW1lPgorICAgICAgPGRpc3BsYXlfbmFtZT5mKCk8L2Rpc3BsYXlfbmFtZT4KKyAgICAgIDxwYWNrYWdlPiZsdDtkZWZhdWx0Jmd0OzwvcGFja2FnZT4KKyAgICAgIDxjbGFzcz4KKyAgICAgICAgPG5hbWU+VGVzdDwvbmFtZT4KKyAgICAgICAgPGRpc3BsYXlfbmFtZT5UZXN0PC9kaXNwbGF5X25hbWU+CisgICAgICA8L2NsYXNzPgorICAgIDwvbWV0aG9kPgorICAgIDxkZXNjcmlwdGlvbj5Db25kaXRpb24gJmx0O2NvZGUmZ3Q7bCA9PSAwZiZsdDsvY29kZSZndDsgaXMgYWx3YXlzICZsdDtjb2RlJmd0O3RydWUmbHQ7L2NvZGUmZ3Q7PC9kZXNjcmlwdGlvbj4KKyAgPC9wcm9ibGVtPgorCisgIDxwcm9ibGVtPgorICAgIDxmaWxlPlRlc3QuamF2YTwvZmlsZT4KKyAgICA8bGluZT4xNDwvbGluZT4KKyAgICA8bWV0aG9kPgorICAgICAgPG5hbWU+dm9pZCBmKCk8L25hbWU+CisgICAgICA8ZGlzcGxheV9uYW1lPmYoKTwvZGlzcGxheV9uYW1lPgorICAgICAgPHBhY2thZ2U+Jmx0O2RlZmF1bHQmZ3Q7PC9wYWNrYWdlPgorICAgICAgPGNsYXNzPgorICAgICAgICA8bmFtZT5UZXN0PC9uYW1lPgorICAgICAgICA8ZGlzcGxheV9uYW1lPlRlc3Q8L2Rpc3BsYXlfbmFtZT4KKyAgICAgIDwvY2xhc3M+CisgICAgPC9tZXRob2Q+CisgICAgPGRlc2NyaXB0aW9uPkNvbmRpdGlvbiAmbHQ7Y29kZSZndDtjID09IDFMJmx0Oy9jb2RlJmd0OyBpcyBhbHdheXMgJmx0O2NvZGUmZ3Q7dHJ1ZSZsdDsvY29kZSZndDs8L2Rlc2NyaXB0aW9uPgorICA8L3Byb2JsZW0+Cis8L3Byb2JsZW1zPgpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGF0YUZsb3cvQ29uc3RhbnRzRGlmZmVyZW50VHlwZXMvc3JjL1Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RhdGFGbG93L0NvbnN0YW50c0RpZmZlcmVudFR5cGVzL3NyYy9UZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDQ3Y2Q0ZQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RhdGFGbG93L0NvbnN0YW50c0RpZmZlcmVudFR5cGVzL3NyYy9UZXN0LmphdmEKQEAgLTAsMCArMSwxOSBAQAorcHVibGljIGNsYXNzIFRlc3QgeworIHZvaWQgZigpIHsKKyAgICAgICAgIExvbmcgTCA9IDVMOworICAgICAgICAgaWYgKEwgPT0gNSkgeworICAgICAgICAgICAgIDsKKyAgICAgICAgIH0KKworICAgICAgICAgbG9uZyBsID0gMDsKKyAgICAgICAgIGlmIChsID09IDBmKSB7CisgICAgICAgICAgOworICAgICAgICAgfQorCisgICAgICAgICBjaGFyIGMgPSAxOworICAgICAgICAgaWYgKGMgPT0gMUwpIHsKKyAgICAgICAgICAgOworICAgICAgICAgfQorICAgICAgICAgCisgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RhdGFGbG93L0ZpZWxkc0ZsYXNoaW5nL2V4cGVjdGVkLnhtbCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RhdGFGbG93L0ZpZWxkc0ZsYXNoaW5nL2V4cGVjdGVkLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZTlkNWVmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGF0YUZsb3cvRmllbGRzRmxhc2hpbmcvZXhwZWN0ZWQueG1sCkBAIC0wLDAgKzEsOCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxwcm9ibGVtcz4KKyAgPHByb2JsZW0+CisgICAgPGZpbGU+VGVzdC5qYXZhPC9maWxlPgorICAgIDxsaW5lPjE4PC9saW5lPgorICAgIDxkZXNjcmlwdGlvbj5Bcmd1bWVudCAnb2JqJyBtaWdodCBiZSBudWxsPC9kZXNjcmlwdGlvbj4KKyAgPC9wcm9ibGVtPgorPC9wcm9ibGVtcz4KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RhdGFGbG93L0ZpZWxkc0ZsYXNoaW5nL3NyYy9UZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kYXRhRmxvdy9GaWVsZHNGbGFzaGluZy9zcmMvVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk0M2Q5ZGUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kYXRhRmxvdy9GaWVsZHNGbGFzaGluZy9zcmMvVGVzdC5qYXZhCkBAIC0wLDAgKzEsNTEgQEAKK2ltcG9ydCBvcmcuamV0YnJhaW5zLmFubm90YXRpb25zLio7CisKK3B1YmxpYyBjbGFzcyBUZXN0TnVsbGFibGVJbnRlcnZlbmluZyAgIC8vIFNlZSBodHRwOi8vd3d3LmpldGJyYWlucy5uZXQvamlyYS9icm93c2UvSURFQS0yODQ1Cit7CisgICAgQE51bGxhYmxlIE9iamVjdCBvYmo7CisKKyAgICBwdWJsaWMgVGVzdE51bGxhYmxlSW50ZXJ2ZW5pbmcoZmluYWwgQE51bGxhYmxlIE9iamVjdCBvYmopIHsKKyAgICAgICAgdGhpcy5vYmogPSBvYmo7CisgICAgfQorCisgICAgQE51bGxhYmxlIE9iamVjdCBmb28oKSB7IHJldHVybiBudWxsOyB9CisgICAgdm9pZCBub3RudWxsKEBOb3ROdWxsIE9iamVjdCBhcmcpIHt9CisKKyAgICB2b2lkIHRlc3QxKCkgeworICAgICAgICBpZiAob2JqICE9IG51bGwpIHsKKyAgICAgICAgICAgIC8vIE1ldGhvZCBpbnRlcnZlbmluZywgbWlnaHQgY2hhbmdlIG9iajsgc2hvdWxkIGhhdmUgd2FybmluZyAoT0spCisgICAgICAgICAgICBvYmogPSBmb28oKTsKKyAgICAgICAgICAgIG5vdG51bGwob2JqKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHZvaWQgdGVzdDIoKSB7CisgICAgICAgIGlmIChvYmogIT0gbnVsbCkgeworICAgICAgICAgICAgLy8gU2ltcGxlIGFzc2lnbm1lbnQgaW50ZXJ2ZW5pbmcsIG5vIG1ldGhvZCBjYWxscyBhbmQgbm90aGluZworICAgICAgICAgICAgLy8gaW52b2x2aW5nIG9iai4uLgorICAgICAgICAgICAgLy8gU2hvdWxkIGJlIG5vIHdhcm5pbmcsIGJ1dCB0aGVyZSBpcworICAgICAgICAgICAgaW50IHggPSAxMDsKKyAgICAgICAgICAgIG5vdG51bGwob2JqKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHZvaWQgdGVzdDMoKSB7CisgICAgICAgIGlmIChvYmogIT0gbnVsbCkgeworICAgICAgICAgICAgLy8gQ29uc3RydWN0b3IgY2FsbCBpbnRlcnZlbmluZzsgZm9yIGFsbCB3ZSBrbm93LCB0aGlzIGNvdWxkCisgICAgICAgICAgICAvLyBjaGFuZ2Ugb2JqIHRocm91Z2ggc29tZSBzdHJhbmdlIGludGVyYWN0aW9uIChjb25zdHJ1Y3RvcgorICAgICAgICAgICAgLy8gY2FsbHMgc3RhdGljIG1ldGhvZCB3aGljaCBoYXMgYWNjZXNzIHRvIHRoaXMgb2JqZWN0IHdoaWNoCisgICAgICAgICAgICAvLyB0aGVuIGNoYW5nZXMgb2JqKS4gU2hvdWxkIGJlIGEgd2FybmluZyAoT0spLgorICAgICAgICAgICAgVGVzdE51bGxhYmxlSW50ZXJ2ZW5pbmcgb2JqMiA9IG5ldyBUZXN0TnVsbGFibGVJbnRlcnZlbmluZyhudWxsKTsKKyAgICAgICAgICAgIG5vdG51bGwob2JqKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHZvaWQgdGVzdDQoKSB7CisgICAgICAgIGlmIChvYmogIT0gbnVsbCkgeworICAgICAgICAgICAgLy8gQXJyYXkgY29uc3RydWN0aW9uIGNhbm5vdCBjaGFuZ2Ugb3RoZXIgb2JqZWN0cworICAgICAgICAgICAgLy8gU2hvdWxkIGJlIG5vIHdhcm5pbmcsIGJ1dCB0aGVyZSBpcworICAgICAgICAgICAgT2JqZWN0W10gYXJyID0gbmV3IE9iamVjdFs1XTsKKyAgICAgICAgICAgIG5vdG51bGwob2JqKTsKKyAgICAgICAgfQorICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RhdGFGbG93L0ZvckVhY2hOUEUvZXhwZWN0ZWQueG1sIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGF0YUZsb3cvRm9yRWFjaE5QRS9leHBlY3RlZC54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODBkNDI5YwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RhdGFGbG93L0ZvckVhY2hOUEUvZXhwZWN0ZWQueG1sCkBAIC0wLDAgKzEsOCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxwcm9ibGVtcz4KKzxwcm9ibGVtPgorICA8ZmlsZT5UZXN0LmphdmE8L2ZpbGU+CisgIDxsaW5lPjQ8L2xpbmU+CisgIDxkZXNjcmlwdGlvbj5EZXJlZmVyZW5jZSBvZiAncGF0aCcgbWF5IHByb2R1Y2UgamF2YS5sYW5nLk51bGxQb2ludGVyRXhjZXB0aW9uPC9kZXNjcmlwdGlvbj4KKzwvcHJvYmxlbT4KKzwvcHJvYmxlbXM+CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kYXRhRmxvdy9Gb3JFYWNoTlBFL3NyYy9UZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kYXRhRmxvdy9Gb3JFYWNoTlBFL3NyYy9UZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWFjYTkwMgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RhdGFGbG93L0ZvckVhY2hOUEUvc3JjL1Rlc3QuamF2YQpAQCAtMCwwICsxLDggQEAKK3B1YmxpYyBjbGFzcyBUZXN0IHsKKyAgcHVibGljIFN0cmluZyBmb28oU3RyaW5nW10gcGF0aCkgeworICAgIGlmIChwYXRoICE9IG51bGwpIHJldHVybiBudWxsOworICAgIGZvciAoU3RyaW5nIHA6IHBhdGgpIHt9CisKKyAgICByZXR1cm4gIiI7CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RhdGFGbG93L0ZvcmVhY2hGbG93L2V4cGVjdGVkLnhtbCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RhdGFGbG93L0ZvcmVhY2hGbG93L2V4cGVjdGVkLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYzI3MmFiCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGF0YUZsb3cvRm9yZWFjaEZsb3cvZXhwZWN0ZWQueG1sCkBAIC0wLDAgKzEsMyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxwcm9ibGVtcy8+CisKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RhdGFGbG93L0ZvcmVhY2hGbG93L3NyYy9OcGUuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RhdGFGbG93L0ZvcmVhY2hGbG93L3NyYy9OcGUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MGE1NGMzCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGF0YUZsb3cvRm9yZWFjaEZsb3cvc3JjL05wZS5qYXZhCkBAIC0wLDAgKzEsMjEgQEAKK3B1YmxpYyBjbGFzcyBOcGUgeworICAgT2JqZWN0IGZvbyhPYmplY3RbXSBvYmpzKSB7CisgICAgICBib29sZWFuIHNraXAgPSB0cnVlOworICAgICAgZm9yIChPYmplY3QgbyA6IG9ianMpIHsKKyAgICAgICAgaWYgKG8gaW5zdGFuY2VvZiBTdHJpbmcpIHsKKyAgICAgICAgICBza2lwID0gZmFsc2U7CisgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAgICBpZiAoc2tpcCkgeworICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIGJhcigpOworICAgICAgfQorCisgICAgICByZXR1cm4gIiI7CisgICB9CisKKyAgIHZvaWQgYmFyKCkgeworICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RhdGFGbG93L0dlbmVyaWNJbnN0YW5jZW9mL2V4cGVjdGVkLnhtbCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RhdGFGbG93L0dlbmVyaWNJbnN0YW5jZW9mL2V4cGVjdGVkLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZjQ3NWJiCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGF0YUZsb3cvR2VuZXJpY0luc3RhbmNlb2YvZXhwZWN0ZWQueG1sCkBAIC0wLDAgKzEsOSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxwcm9ibGVtcz4KKyAgPHByb2JsZW0+CisgICAgPGZpbGU+R2VuZXJpY0luc3RhbmNlb2YuamF2YTwvZmlsZT4KKyAgICA8bGluZT44PC9saW5lPgorICAgIDxkZXNjcmlwdGlvbj5Db25kaXRpb24gaXMgYWx3YXlzIHRydWU8L2Rlc2NyaXB0aW9uPgorICA8L3Byb2JsZW0+Cis8L3Byb2JsZW1zPgorCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kYXRhRmxvdy9HZW5lcmljSW5zdGFuY2VvZi9zcmMvR2VuZXJpY0luc3RhbmNlb2YuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RhdGFGbG93L0dlbmVyaWNJbnN0YW5jZW9mL3NyYy9HZW5lcmljSW5zdGFuY2VvZi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY5Y2Y3NzcKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kYXRhRmxvdy9HZW5lcmljSW5zdGFuY2VvZi9zcmMvR2VuZXJpY0luc3RhbmNlb2YuamF2YQpAQCAtMCwwICsxLDEyIEBACitjbGFzcyBHZW5lcmljPFQ+IHsKKyAgR2VuZXJpYygpIHt9Cit9CisKK2NsYXNzIFRlc3QgeworICB2b2lkIGZvbyAoKSB7CisgICAgR2VuZXJpYyBnID0gbmV3IEdlbmVyaWMgKCk7CisgICAgaWYgKGcgaW5zdGFuY2VvZiBHZW5lcmljPFN0cmluZz4pIHsKKyAgICAgIHJldHVybjsKKyAgICB9CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kYXRhRmxvdy9JREVBMTg0MC9leHBlY3RlZC54bWwgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kYXRhRmxvdy9JREVBMTg0MC9leHBlY3RlZC54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzcwYjBmYQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RhdGFGbG93L0lERUExODQwL2V4cGVjdGVkLnhtbApAQCAtMCwwICsxLDkgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8cHJvYmxlbXM+CisgIDxwcm9ibGVtPgorICAgIDxmaWxlPk5wZS5qYXZhPC9maWxlPgorICAgIDxsaW5lPjEwPC9saW5lPgorICAgIDxkZXNjcmlwdGlvbj5Bcmd1bWVudCAnbnVsbCcgaXMgcHJvYmFibHkgbnVsbDwvZGVzY3JpcHRpb24+CisgIDwvcHJvYmxlbT4KKzwvcHJvYmxlbXM+CisKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RhdGFGbG93L0lERUExODQwL3NyYy9Xcm9uZ1BhcmFtZXRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGF0YUZsb3cvSURFQTE4NDAvc3JjL1dyb25nUGFyYW1ldGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTM5YTgxZgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RhdGFGbG93L0lERUExODQwL3NyYy9Xcm9uZ1BhcmFtZXRlci5qYXZhCkBAIC0wLDAgKzEsMTIgQEAKK3B1YmxpYyBjbGFzcyBXcm9uZ1BhcmFtZXRlciB7CisgIHB1YmxpYyBib29sZWFuIHJlc29sdmVBY3Rpb24oQE5vdE51bGwgT2JqZWN0IGFjdGlvbiwgQE5vdE51bGwgT2JqZWN0IGNvbWJhdGFudCwgQE5vdE51bGwgT2JqZWN0IHVzZXJJbnB1dFByb3ZpZGVyKSB7CisgICAgcmV0dXJuIGZhbHNlOworICB9CisKKyAgcHVibGljIHZvaWQgZm9vKCkgeworICAgIHJlc29sdmVBY3Rpb24oCisgICAgICBuZXcgT2JqZWN0KCksCisgICAgICBuZXcgT2JqZWN0KCksCisgICAgICBudWxsKTsgLy8gTGFzdCBwYXJhbWV0ZXIgc2hvdWxkIGJlIGhpZ2hsaWdodGVkCisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kYXRhRmxvdy9JREVBREVWMTA0ODkvZXhwZWN0ZWQueG1sIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGF0YUZsb3cvSURFQURFVjEwNDg5L2V4cGVjdGVkLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYjYyNTZmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGF0YUZsb3cvSURFQURFVjEwNDg5L2V4cGVjdGVkLnhtbApAQCAtMCwwICsxLDEzIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHByb2JsZW1zPgorICA8cHJvYmxlbT4KKyAgICA8ZmlsZT5JREVBREVWMTA0ODkuamF2YTwvZmlsZT4KKyAgICA8bGluZT4xMDwvbGluZT4KKyAgICA8ZGVzY3JpcHRpb24+TWV0aG9kIGludm9jYXRpb24gJ3MubGVuZ3RoKCknIG1heSBwcm9kdWNlIE51bGxQb2ludGVyRXhjZXB0aW9uPC9kZXNjcmlwdGlvbj4KKyAgPC9wcm9ibGVtPgorICA8cHJvYmxlbT4KKyAgICA8ZmlsZT5JREVBREVWMTA0ODkuamF2YTwvZmlsZT4KKyAgICA8bGluZT4xMjwvbGluZT4KKyAgICA8ZGVzY3JpcHRpb24+TWV0aG9kIGludm9jYXRpb24gJ3MubGVuZ3RoKCknIG1heSBwcm9kdWNlIE51bGxQb2ludGVyRXhjZXB0aW9uPC9kZXNjcmlwdGlvbj4KKyAgPC9wcm9ibGVtPgorPC9wcm9ibGVtcz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kYXRhRmxvdy9JREVBREVWMTA0ODkvc3JjL0lERUFERVYxMDQ4OS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGF0YUZsb3cvSURFQURFVjEwNDg5L3NyYy9JREVBREVWMTA0ODkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MDI1OTQ3Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGF0YUZsb3cvSURFQURFVjEwNDg5L3NyYy9JREVBREVWMTA0ODkuamF2YQpAQCAtMCwwICsxLDIzIEBACitjbGFzcyBJREVBREVWMTA0ODkgeworICAgIHN0YXRpYyBTdHJpbmcgZ2V0UygpIHsKKyAgICAgICAgcmV0dXJuIG51bGw7CisgICAgfQorCisgICAgc3RhdGljIHZvaWQgZigpIHsKKyAgICAgICAgU3RyaW5nIHMgPSBnZXRTKCk7CisgICAgICAgIGlmIChzICE9IG51bGwpIHMubGVuZ3RoKCk7CisgICAgICAgIGlmIChmb28oKSkgeworICAgICAgICAgIGludFtdIGkxID0gbmV3IGludCBbcy5sZW5ndGgoKV07CisgICAgICAgIH0gZWxzZSBpZiAoZm9vKCkpIHsKKyAgICAgICAgICBpbnRbXSBpMiA9IG5ldyBpbnQgW10ge3MubGVuZ3RoKCl9OworICAgICAgICB9IGVsc2UgaWYgKGZvbygpKSB7CisgICAgICAgICAgaW50W11bXSBpMyA9IG5ldyBpbnQgWyhzID0gIiIpLmxlbmd0aCgpXVtzLmxlbmd0aCgpXTsKKyAgICAgICAgfSBlbHNleworICAgICAgICAgIGludFtdIGk0ID0gbmV3IGludFtdIHsocyA9ICIiKS5sZW5ndGgoKSwgcy5sZW5ndGgoKX07CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwcml2YXRlIHN0YXRpYyBib29sZWFuIGZvbygpIHsKKyAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGF0YUZsb3cvSURFQURFVjExMDMzL2V4cGVjdGVkLnhtbCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RhdGFGbG93L0lERUFERVYxMTAzMy9leHBlY3RlZC54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDcwNGQ5MQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RhdGFGbG93L0lERUFERVYxMTAzMy9leHBlY3RlZC54bWwKQEAgLTAsMCArMSwyIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHByb2JsZW1zLz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kYXRhRmxvdy9JREVBREVWMTEwMzMvc3JjL1JpZ2h0QXNzb2NpYXRpdmVBc3NpZ25tZW50LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kYXRhRmxvdy9JREVBREVWMTEwMzMvc3JjL1JpZ2h0QXNzb2NpYXRpdmVBc3NpZ25tZW50LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzNiMWFmZgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RhdGFGbG93L0lERUFERVYxMTAzMy9zcmMvUmlnaHRBc3NvY2lhdGl2ZUFzc2lnbm1lbnQuamF2YQpAQCAtMCwwICsxLDYgQEAKK3B1YmxpYyBjbGFzcyBOb25jb25zdGFudENvbmRpdGlvbiB7CisJdm9pZCB0ZXN0KGJvb2xlYW4gZmxhZykgeworCQlpZiAoZmxhZyA9PSAoZmxhZyA9IHRydWUpKSB7CisJCX0KKwl9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGF0YUZsb3cvSURFQURFVjEzMTUzL2V4cGVjdGVkLnhtbCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RhdGFGbG93L0lERUFERVYxMzE1My9leHBlY3RlZC54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODA4ZjA1YwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RhdGFGbG93L0lERUFERVYxMzE1My9leHBlY3RlZC54bWwKQEAgLTAsMCArMSw4IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHByb2JsZW1zPgorICA8cHJvYmxlbT4KKyAgICA8ZmlsZT5OcGUuamF2YTwvZmlsZT4KKyAgICA8bGluZT45PC9saW5lPgorICAgIDxkZXNjcmlwdGlvbj5Db25kaXRpb24gJ2ZvbyAhPSBudWxsJyBpcyBhbHdheXMgJ3RydWUnPC9kZXNjcmlwdGlvbj4KKyAgPC9wcm9ibGVtPgorPC9wcm9ibGVtcz4KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RhdGFGbG93L0lERUFERVYxMzE1My9zcmMvTnBlLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kYXRhRmxvdy9JREVBREVWMTMxNTMvc3JjL05wZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjOTFiZTUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kYXRhRmxvdy9JREVBREVWMTMxNTMvc3JjL05wZS5qYXZhCkBAIC0wLDAgKzEsMTIgQEAKK2ltcG9ydCBvcmcuamV0YnJhaW5zLmFubm90YXRpb25zLio7CisKK2ltcG9ydCBqYXZhLnV0aWwuKjsKKworY2xhc3MgVGVzdCB7CisgICB2b2lkIGZvbygpIHsKKyAgICAgU3RyaW5nW10gZGF0YSA9IG5ldyBTdHJpbmdbXSB7ImFicyIsICJkZWYifTsKKyAgICAgZm9yIChATm90TnVsbCBTdHJpbmcgZm9vOiBkYXRhKSB7CisgICAgICAgYXNzZXJ0IGZvbyAhPSBudWxsOyAvLyBDb25kaXRpb24gYWx3YXlzIHRydWUKKyAgICAgfQorICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RhdGFGbG93L0lERUFERVYxMzE1Ni9leHBlY3RlZC54bWwgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kYXRhRmxvdy9JREVBREVWMTMxNTYvZXhwZWN0ZWQueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM2M2M5MjUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kYXRhRmxvdy9JREVBREVWMTMxNTYvZXhwZWN0ZWQueG1sCkBAIC0wLDAgKzEsMiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxwcm9ibGVtcy8+CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kYXRhRmxvdy9JREVBREVWMTMxNTYvc3JjL05wZS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGF0YUZsb3cvSURFQURFVjEzMTU2L3NyYy9OcGUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOTY1ODc1Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGF0YUZsb3cvSURFQURFVjEzMTU2L3NyYy9OcGUuamF2YQpAQCAtMCwwICsxLDE1IEBACitpbXBvcnQgb3JnLmpldGJyYWlucy5hbm5vdGF0aW9ucy4qOworCitjbGFzcyBGb28geworICBwdWJsaWMgdm9pZCB4KCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKKyAgICAgQE51bGxhYmxlIFN0cmluZyBmb28gPSAiIjsKKyAgICAgd2hpbGUgKGZvby5sZW5ndGgoKSA9PSAwKSB7CisgICAgICAgZm9vID0geSgpOworICAgICAgIGlmIChmb28gPT0gbnVsbCkgdGhyb3cgbmV3IElPRXhjZXB0aW9uKCJmb28iKTsKKyAgICAgfQorICB9CisgIAorICBwdWJsaWMgU3RyaW5nIHkoKSB7CisgICAgIHJldHVybiAiIjsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGF0YUZsb3cvSURFQURFVjE1NTgzL2V4cGVjdGVkLnhtbCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RhdGFGbG93L0lERUFERVYxNTU4My9leHBlY3RlZC54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2RlNmY4NwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RhdGFGbG93L0lERUFERVYxNTU4My9leHBlY3RlZC54bWwKQEAgLTAsMCArMSwxOCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxwcm9ibGVtcz4KKyAgPHByb2JsZW0+CisgICAgPGZpbGU+TnBlLmphdmE8L2ZpbGU+CisgICAgPGxpbmU+MTQ8L2xpbmU+CisgICAgPGRlc2NyaXB0aW9uPidsZW5ndGgnIG1heSBwcm9kdWNlICdOdWxsUG9pbnRlckV4Y2VwdGlvbic8L2Rlc2NyaXB0aW9uPgorICA8L3Byb2JsZW0+CisgIDxwcm9ibGVtPgorICAgIDxmaWxlPk5wZS5qYXZhPC9maWxlPgorICAgIDxsaW5lPjE4PC9saW5lPgorICAgIDxkZXNjcmlwdGlvbj4nbGVuZ3RoJyBtYXkgcHJvZHVjZSAnTnVsbFBvaW50ZXJFeGNlcHRpb24nPC9kZXNjcmlwdGlvbj4KKyAgPC9wcm9ibGVtPgorICA8cHJvYmxlbT4KKyAgICA8ZmlsZT5OcGUuamF2YTwvZmlsZT4KKyAgICA8bGluZT4yNzwvbGluZT4KKyAgICA8ZGVzY3JpcHRpb24+J2xlbmd0aCcgbWF5IHByb2R1Y2UgJ051bGxQb2ludGVyRXhjZXB0aW9uJzwvZGVzY3JpcHRpb24+CisgIDwvcHJvYmxlbT4KKzwvcHJvYmxlbXM+CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kYXRhRmxvdy9JREVBREVWMTU1ODMvc3JjL05wZS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGF0YUZsb3cvSURFQURFVjE1NTgzL3NyYy9OcGUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMjEzNjYyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGF0YUZsb3cvSURFQURFVjE1NTgzL3NyYy9OcGUuamF2YQpAQCAtMCwwICsxLDMxIEBACitpbXBvcnQgb3JnLmpldGJyYWlucy5hbm5vdGF0aW9ucy4qOworCitpbXBvcnQgamF2YS51dGlsLio7CisKK2NsYXNzIFRlc3QgeworICAgIEBOdWxsYWJsZQorICAgIHB1YmxpYyBTdHJpbmcgZ2V0U3RyaW5nKFN0cmluZyBzKSB7CisgICAgICAgIHJldHVybiBudWxsOworICAgIH0KKworICAgIHZvaWQgdGVzdChDb2xsZWN0aW9uPFN0cmluZz4gZm9vcykgeworICAgICAgICBUZXN0IHQgPSBuZXcgVGVzdCgpOworCisgICAgICAgIGZpbmFsIGludCBpID0gdC5nZXRTdHJpbmcoImZvbyIpLmxlbmd0aCgpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImkgPSAiICsgaSk7CisKKyAgICAgICAgZm9yIChTdHJpbmcgZm9vIDogZm9vcykgeworICAgICAgICAgICAgZmluYWwgaW50IGogPSB0LmdldFN0cmluZyhmb28pLmxlbmd0aCgpOworICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJpID0gIiArIGopOworICAgICAgICB9CisgICAgfQorCisgICAgdm9pZCB0ZXN0MihDb2xsZWN0aW9uPFN0cmluZz4gZm9vcykgeworICAgICAgICBUZXN0IHQgPSBuZXcgVGVzdCgpOworCisgICAgICAgIGZvciAoSXRlcmF0b3I8U3RyaW5nPiBpdGVyYXRvciA9IGZvb3MuaXRlcmF0b3IoKTsgaXRlcmF0b3IuaGFzTmV4dCgpOykgeworICAgICAgICAgICAgZmluYWwgaW50IGkgPSBnZXRTdHJpbmcoaXRlcmF0b3IubmV4dCgpKS5sZW5ndGgoKTsKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiaSA9ICIgKyBpKTsKKyAgICAgICAgfQorICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kYXRhRmxvdy9JREVBREVWMTU3NS9leHBlY3RlZC54bWwgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kYXRhRmxvdy9JREVBREVWMTU3NS9leHBlY3RlZC54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTE0MTVmYgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RhdGFGbG93L0lERUFERVYxNTc1L2V4cGVjdGVkLnhtbApAQCAtMCwwICsxLDggQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8cHJvYmxlbXM+CisgIDxwcm9ibGVtPgorICAgIDxmaWxlPlRlc3QuamF2YTwvZmlsZT4KKyAgICA8bGluZT40PC9saW5lPgorICAgIDxkZXNjcmlwdGlvbj5Db25kaXRpb24gJ3Rlc3QnIGF0IHRoZSBsZWZ0IHNpZGUgaXMgYWx3YXlzICd0cnVlJzwvZGVzY3JpcHRpb24+CisgIDwvcHJvYmxlbT4KKzwvcHJvYmxlbXM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGF0YUZsb3cvSURFQURFVjE1NzUvc3JjL1Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RhdGFGbG93L0lERUFERVYxNTc1L3NyYy9UZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzM1ZmUwOQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RhdGFGbG93L0lERUFERVYxNTc1L3NyYy9UZXN0LmphdmEKQEAgLTAsMCArMSw2IEBACitjbGFzcyBUZXN0R2VuZXJpY3NJbnN0YW5jZW9mIHsKKyAgICBwdWJsaWMgdm9pZCBmb28oT2JqZWN0IG8pIHsKKyAgICAgIGJvb2xlYW4gdGVzdCA9IHRydWU7CisgICAgICB0ZXN0ICY9IG8uaGFzaENvZGUoKSA+IDM7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGF0YUZsb3cvSURFQURFVjI2MDUvZXhwZWN0ZWQueG1sIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGF0YUZsb3cvSURFQURFVjI2MDUvZXhwZWN0ZWQueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEzZTczNmUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kYXRhRmxvdy9JREVBREVWMjYwNS9leHBlY3RlZC54bWwKQEAgLTAsMCArMSw4NiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxwcm9ibGVtcz4KKyAgPHByb2JsZW0+CisgICAgPGZpbGU+QW5kQXNzaWduLmphdmE8L2ZpbGU+CisgICAgPGxpbmU+MTk8L2xpbmU+CisgICAgPGRlc2NyaXB0aW9uPkNvbmRpdGlvbiBpcyBhbHdheXMgdHJ1ZTwvZGVzY3JpcHRpb24+CisgIDwvcHJvYmxlbT4KKyAgPHByb2JsZW0+CisgICAgPGZpbGU+QW5kQXNzaWduLmphdmE8L2ZpbGU+CisgICAgPGxpbmU+MjY8L2xpbmU+CisgICAgPGRlc2NyaXB0aW9uPkNvbmRpdGlvbiBpcyBhbHdheXMgZmFsc2U8L2Rlc2NyaXB0aW9uPgorICA8L3Byb2JsZW0+CisgIDxwcm9ibGVtPgorICAgIDxmaWxlPkFuZEFzc2lnbi5qYXZhPC9maWxlPgorICAgIDxsaW5lPjMzPC9saW5lPgorICAgIDxkZXNjcmlwdGlvbj5Db25kaXRpb24gaXMgYWx3YXlzIGZhbHNlPC9kZXNjcmlwdGlvbj4KKyAgPC9wcm9ibGVtPgorICA8cHJvYmxlbT4KKyAgICA8ZmlsZT5BbmRBc3NpZ24uamF2YTwvZmlsZT4KKyAgICA8bGluZT40MDwvbGluZT4KKyAgICA8ZGVzY3JpcHRpb24+Q29uZGl0aW9uIGlzIGFsd2F5cyBmYWxzZTwvZGVzY3JpcHRpb24+CisgIDwvcHJvYmxlbT4KKyAgPHByb2JsZW0+CisgICAgPGZpbGU+QW5kQXNzaWduLmphdmE8L2ZpbGU+CisgICAgPGxpbmU+NDc8L2xpbmU+CisgICAgPGRlc2NyaXB0aW9uPkNvbmRpdGlvbiBpcyBhbHdheXMgdHJ1ZTwvZGVzY3JpcHRpb24+CisgIDwvcHJvYmxlbT4KKyAgPHByb2JsZW0+CisgICAgPGZpbGU+QW5kQXNzaWduLmphdmE8L2ZpbGU+CisgICAgPGxpbmU+NTQ8L2xpbmU+CisgICAgPGRlc2NyaXB0aW9uPkNvbmRpdGlvbiBpcyBhbHdheXMgdHJ1ZTwvZGVzY3JpcHRpb24+CisgIDwvcHJvYmxlbT4KKyAgPHByb2JsZW0+CisgICAgPGZpbGU+QW5kQXNzaWduLmphdmE8L2ZpbGU+CisgICAgPGxpbmU+NjE8L2xpbmU+CisgICAgPGRlc2NyaXB0aW9uPkNvbmRpdGlvbiBpcyBhbHdheXMgdHJ1ZTwvZGVzY3JpcHRpb24+CisgIDwvcHJvYmxlbT4KKyAgPHByb2JsZW0+CisgICAgPGZpbGU+QW5kQXNzaWduLmphdmE8L2ZpbGU+CisgICAgPGxpbmU+Njg8L2xpbmU+CisgICAgPGRlc2NyaXB0aW9uPkNvbmRpdGlvbiBpcyBhbHdheXMgZmFsc2U8L2Rlc2NyaXB0aW9uPgorICA8L3Byb2JsZW0+CisKKworCisgIDxwcm9ibGVtPgorICAgIDxmaWxlPkFuZEFzc2lnbi5qYXZhPC9maWxlPgorICAgIDxsaW5lPjE3PC9saW5lPgorICAgIDxkZXNjcmlwdGlvbj5sZWZ0IGFsd2F5cyB0cnVlPC9kZXNjcmlwdGlvbj4KKyAgPC9wcm9ibGVtPgorICA8cHJvYmxlbT4KKyAgICA8ZmlsZT5BbmRBc3NpZ24uamF2YTwvZmlsZT4KKyAgICA8bGluZT4yNDwvbGluZT4KKyAgICA8ZGVzY3JpcHRpb24+bGVmdCBhbHdheXMgdHJ1ZTwvZGVzY3JpcHRpb24+CisgIDwvcHJvYmxlbT4KKyAgPHByb2JsZW0+CisgICAgPGZpbGU+QW5kQXNzaWduLmphdmE8L2ZpbGU+CisgICAgPGxpbmU+MzE8L2xpbmU+CisgICAgPGRlc2NyaXB0aW9uPmxlZnQgYWx3YXlzIGZhbHNlPC9kZXNjcmlwdGlvbj4KKyAgPC9wcm9ibGVtPgorICA8cHJvYmxlbT4KKyAgICA8ZmlsZT5BbmRBc3NpZ24uamF2YTwvZmlsZT4KKyAgICA8bGluZT4zODwvbGluZT4KKyAgICA8ZGVzY3JpcHRpb24+bGVmdCBhbHdheXMgZmFsc2U8L2Rlc2NyaXB0aW9uPgorICA8L3Byb2JsZW0+CisgIDxwcm9ibGVtPgorICAgIDxmaWxlPkFuZEFzc2lnbi5qYXZhPC9maWxlPgorICAgIDxsaW5lPjQ1PC9saW5lPgorICAgIDxkZXNjcmlwdGlvbj5sZWZ0IGFsd2F5cyB0cnVlPC9kZXNjcmlwdGlvbj4KKyAgPC9wcm9ibGVtPgorICA8cHJvYmxlbT4KKyAgICA8ZmlsZT5BbmRBc3NpZ24uamF2YTwvZmlsZT4KKyAgICA8bGluZT41MjwvbGluZT4KKyAgICA8ZGVzY3JpcHRpb24+bGVmdCBhbHdheXMgdHJ1ZTwvZGVzY3JpcHRpb24+CisgIDwvcHJvYmxlbT4KKyAgPHByb2JsZW0+CisgICAgPGZpbGU+QW5kQXNzaWduLmphdmE8L2ZpbGU+CisgICAgPGxpbmU+NTk8L2xpbmU+CisgICAgPGRlc2NyaXB0aW9uPmxlZnQgYWx3YXlzIGZhbHNlPC9kZXNjcmlwdGlvbj4KKyAgPC9wcm9ibGVtPgorICA8cHJvYmxlbT4KKyAgICA8ZmlsZT5BbmRBc3NpZ24uamF2YTwvZmlsZT4KKyAgICA8bGluZT42NjwvbGluZT4KKyAgICA8ZGVzY3JpcHRpb24+bGVmdCBhbHdheXMgZmFsc2U8L2Rlc2NyaXB0aW9uPgorICA8L3Byb2JsZW0+Cis8L3Byb2JsZW1zPgpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGF0YUZsb3cvSURFQURFVjI2MDUvc3JjL0FuZEFzc2lnbi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGF0YUZsb3cvSURFQURFVjI2MDUvc3JjL0FuZEFzc2lnbi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk5ZjhjNDUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kYXRhRmxvdy9JREVBREVWMjYwNS9zcmMvQW5kQXNzaWduLmphdmEKQEAgLTAsMCArMSw3MiBAQAorcHVibGljIGNsYXNzIEFuZEFzc2lnbiB7CisgIHB1YmxpYyB2b2lkIGZvbyhib29sZWFuIHJlc3VsdCwgT2JqZWN0IGFjYykgeworICAgIHJlc3VsdCAmPSB2ZXJpZnkocmVzdWx0ID8gYWNjIDogbnVsbCk7CisgIH0KKworICBwdWJsaWMgYm9vbGVhbiB2ZXJpZnkoT2JqZWN0IG8pIHsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4obyk7CisgICAgcmV0dXJuIHRydWU7CisgIH0KKworICBwdWJsaWMgdm9pZCBwb3NpdGl2ZXMoKSB7CisgICAgIGJvb2xlYW4gdCA9IHRydWU7CisgICAgIGJvb2xlYW4gZiA9IGZhbHNlOworICAgICBib29sZWFuIHI7CisKKyAgICAgciA9IHQ7CisgICAgIHIgJj0gdDsgICAgICAgICAgICAgICAgICAgICAgLy8gQWx3YXlzIHRydWUKKworICAgICBpZiAocikgeyAgICAgICAgICAgICAgICAgICAgIC8vIEFsd2F5cyB0cnVlCisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiZm9vIik7CisgICAgIH0KKworICAgICByID0gdDsKKyAgICAgciAmPSBmOyAgICAgICAgICAgICAgICAgICAgICAvLyBBbHdheXMgdHJ1ZQorCisgICAgIGlmIChyKSB7ICAgICAgICAgICAgICAgICAgICAgLy8gQWx3YXlzIGZhbHNlCisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiZm9vIik7CisgICAgIH0KKworICAgICByID0gZjsKKyAgICAgciAmPSB0OyAgICAgICAgICAgICAgICAgICAgICAvLyBBbHdheXMgZmFsc2UKKworICAgICBpZiAocikgeyAgICAgICAgICAgICAgICAgICAgIC8vIEFsd2F5cyBmYWxzZQorICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImZvbyIpOworICAgICB9CisKKyAgICAgciA9IGY7CisgICAgIHIgJj0gZjsgICAgICAgICAgICAgICAgICAgICAgLy8gQWx3YXlzIGZhbHNlCisKKyAgICAgaWYgKHIpIHsgICAgICAgICAgICAgICAgICAgICAvLyBBbHdheXMgZmFsc2UKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJmb28iKTsKKyAgICAgfQorCisgICAgIHIgPSB0OworICAgICByIHw9IHQgICAgICAgICAgICAgICAgICAgICAgIC8vIEFsd2F5cyB0cnVlCisKKyAgICAgaWYgKHIpIHsgICAgICAgICAgICAgICAgICAgICAvLyBBbHdheXMgdHJ1ZQorICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImZvbyIpOworICAgICB9CisKKyAgICAgciA9IHQ7CisgICAgIHIgfD0gZiAgICAgICAgICAgICAgICAgICAgICAgLy8gQWx3YXlzIHRydWUKKworICAgICBpZiAocikgeyAgICAgICAgICAgICAgICAgICAgIC8vIEFsd2F5cyB0cnVlCisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiZm9vIik7CisgICAgIH0KKworICAgICByID0gZjsKKyAgICAgciB8PSB0ICAgICAgICAgICAgICAgICAgICAgICAvLyBBbHdheXMgZmFsc2UKKworICAgICBpZiAocikgeyAgICAgICAgICAgICAgICAgICAgIC8vIEFsd2F5cyB0cnVlCisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiZm9vIik7CisgICAgIH0KKworICAgICByID0gZjsKKyAgICAgciB8PSBmICAgICAgICAgICAgICAgICAgICAgIC8vIEFsd2F5cyBmYWxzZQorCisgICAgIGlmIChyKSB7ICAgICAgICAgICAgICAgICAgICAgLy8gQWx3YXlzIGZhbHNlCisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiZm9vIik7CisgICAgIH0KKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RhdGFGbG93L0lERUFERVY3NDUxOC9leHBlY3RlZC54bWwgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kYXRhRmxvdy9JREVBREVWNzQ1MTgvZXhwZWN0ZWQueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAzODk2ZWUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kYXRhRmxvdy9JREVBREVWNzQ1MTgvZXhwZWN0ZWQueG1sCkBAIC0wLDAgKzEsMTAgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8cHJvYmxlbXM+CisgIDxwcm9ibGVtPgorICAgIDxmaWxlPk5vV2FybmluZ3MuamF2YTwvZmlsZT4KKyAgICA8bGluZT45PC9saW5lPgorICAgIDxwcm9ibGVtX2NsYXNzIHNldmVyaXR5PSJXQVJOSU5HIiBhdHRyaWJ1dGVfa2V5PSJXQVJOSU5HX0FUVFJJQlVURVMiPkNvbnN0YW50IGNvbmRpdGlvbnMgJmFtcDsgZXhjZXB0aW9uczwvcHJvYmxlbV9jbGFzcz4KKyAgICA8ZGVzY3JpcHRpb24+Q29uZGl0aW9uICZsdDtjb2RlJmd0O2kgPT0gMSZsdDsvY29kZSZndDsgaXMgYWx3YXlzICZsdDtjb2RlJmd0O3RydWUmbHQ7L2NvZGUmZ3Q7IHdoZW4gcmVhY2hlZDwvZGVzY3JpcHRpb24+CisgIDwvcHJvYmxlbT4KKzwvcHJvYmxlbXM+CisKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RhdGFGbG93L0lERUFERVY3NDUxOC9zcmMvTm9XYXJuaW5ncy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGF0YUZsb3cvSURFQURFVjc0NTE4L3NyYy9Ob1dhcm5pbmdzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjhlNGM1MgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RhdGFGbG93L0lERUFERVY3NDUxOC9zcmMvTm9XYXJuaW5ncy5qYXZhCkBAIC0wLDAgKzEsMjEgQEAKK2ltcG9ydCBqYXZhLnV0aWwuKjsKKworcHVibGljIGNsYXNzIE5vV2FybmluZ3MgeworICAgIHB1YmxpYyB2b2lkIGYoKSB7CisgICAgICAgIGludCBpID0gMTsKKworICAgICAgICBib29sZWFuIGIgPSB0cnVlOworICAgICAgICB3aGlsZSAodHJ1ZSkgeworICAgICAgICAgICAgaWYgKGIgJiYgaSA9PSAxKSB7CisgICAgICAgICAgICAgICAgYiA9IGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgaSA9IGcoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgCisgICAgcHVibGljIGludCBnKCkgeworICAgICAgcmV0dXJuIDE7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGF0YUZsb3cvSURFQURFVjc0NTE4XzIvZXhwZWN0ZWQueG1sIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGF0YUZsb3cvSURFQURFVjc0NTE4XzIvZXhwZWN0ZWQueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVjMjcyYWIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kYXRhRmxvdy9JREVBREVWNzQ1MThfMi9leHBlY3RlZC54bWwKQEAgLTAsMCArMSwzIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHByb2JsZW1zLz4KKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGF0YUZsb3cvSURFQURFVjc0NTE4XzIvc3JjL1NhbXBsZS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGF0YUZsb3cvSURFQURFVjc0NTE4XzIvc3JjL1NhbXBsZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMzZjhmN2YKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kYXRhRmxvdy9JREVBREVWNzQ1MThfMi9zcmMvU2FtcGxlLmphdmEKQEAgLTAsMCArMSwxNyBAQAorcHVibGljIGFic3RyYWN0IGNsYXNzIE5vV2FybmluZ3MgeworICAgIHB1YmxpYyB2b2lkIGYoKSB7CisgICAgICBib29sZWFuIEEgPSBmYWxzZTsKKyAgICAgIGJvb2xlYW4gQiA9IGZhbHNlOworCisgICAgICB3aGlsZSAodHJ1ZSkgeworICAgICAgICAgIGJvb2xlYW4gZiA9IGcoKTsKKyAgICAgICAgICBBID0gQSB8fCBmOworICAgICAgICAgIEIgPSBCIHx8ICFmOworICAgICAgICAgIGlmIChBICYmIEIpIHsKKyAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisgIAorICAgIHB1YmxpYyBhYnN0cmFjdCBib29sZWFuIGcoKTsKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RhdGFGbG93L0lERUFERVY3NzgxOS9leHBlY3RlZC54bWwgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kYXRhRmxvdy9JREVBREVWNzc4MTkvZXhwZWN0ZWQueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVjMjcyYWIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kYXRhRmxvdy9JREVBREVWNzc4MTkvZXhwZWN0ZWQueG1sCkBAIC0wLDAgKzEsMyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxwcm9ibGVtcy8+CisKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RhdGFGbG93L0lERUFERVY3NzgxOS9zcmMvTm9XYXJuaW5ncy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGF0YUZsb3cvSURFQURFVjc3ODE5L3NyYy9Ob1dhcm5pbmdzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTZiMTU3NgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RhdGFGbG93L0lERUFERVY3NzgxOS9zcmMvTm9XYXJuaW5ncy5qYXZhCkBAIC0wLDAgKzEsMTIgQEAKK2ltcG9ydCBvcmcuamV0YnJhaW5zLmFubm90YXRpb25zLio7CisKK3B1YmxpYyBjbGFzcyBUZXN0IHsKKyAgcHVibGljIEBOdWxsYWJsZSBTdHJpbmcgZm9vOworICAKKyAgcHVibGljIHZvaWQgdGVzdCgpIHsKKyAgICAKKyAgICBpZiAoZm9vICE9IG51bGwgJiYgZm9vLmxlbmd0aCgpID4gMSkgeworICAgICAgU3lzdGVtLm91dC5wcmludGxuKGZvby5sZW5ndGgoKSk7CisgICAgfQorICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kYXRhRmxvdy9JREVBREVWNzgzNzAvZXhwZWN0ZWQueG1sIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGF0YUZsb3cvSURFQURFVjc4MzcwL2V4cGVjdGVkLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYzI3MmFiCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGF0YUZsb3cvSURFQURFVjc4MzcwL2V4cGVjdGVkLnhtbApAQCAtMCwwICsxLDMgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8cHJvYmxlbXMvPgorCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kYXRhRmxvdy9JREVBREVWNzgzNzAvc3JjL05vV2FybmluZ3MuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RhdGFGbG93L0lERUFERVY3ODM3MC9zcmMvTm9XYXJuaW5ncy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFjZTJkMDYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kYXRhRmxvdy9JREVBREVWNzgzNzAvc3JjL05vV2FybmluZ3MuamF2YQpAQCAtMCwwICsxLDggQEAKK2ltcG9ydCBvcmcuamV0YnJhaW5zLmFubm90YXRpb25zLk51bGxhYmxlOworCitwdWJsaWMgY2xhc3MgTm9XYXJuaW5ncyB7CisgICAgaW50IGYoQE51bGxhYmxlIFN0cmluZyB2YWx1ZSkgIHsKKyAgICAgICAgdmFsdWUgPSB2YWx1ZSA9PSBudWxsID8gIiIgOiB2YWx1ZTsKKyAgICAgICAgcmV0dXJuIHZhbHVlLmhhc2hDb2RlKCk7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGF0YUZsb3cvSW5zdGFuY2VvZi9leHBlY3RlZC54bWwgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kYXRhRmxvdy9JbnN0YW5jZW9mL2V4cGVjdGVkLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MDk3Zjc0Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGF0YUZsb3cvSW5zdGFuY2VvZi9leHBlY3RlZC54bWwKQEAgLTAsMCArMSw5IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHByb2JsZW1zPgorICA8cHJvYmxlbT4KKyAgICA8ZmlsZT5Gb28uamF2YTwvZmlsZT4KKyAgICA8bGluZT4xMDwvbGluZT4KKyAgICA8ZGVzY3JpcHRpb24+Q29uZGl0aW9uICdvIGluc3RhbmNlb2YgQicgaXMgYWx3YXlzIGZhbHNlPC9kZXNjcmlwdGlvbj4KKyAgPC9wcm9ibGVtPgorPC9wcm9ibGVtcz4KKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGF0YUZsb3cvSW5zdGFuY2VvZi9zcmMvRm9vLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kYXRhRmxvdy9JbnN0YW5jZW9mL3NyYy9Gb28uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMTYxNzAzCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGF0YUZsb3cvSW5zdGFuY2VvZi9zcmMvRm9vLmphdmEKQEAgLTAsMCArMSwxNCBAQAorY2xhc3MgQSB7Cit9CisKKworY2xhc3MgQiBleHRlbmRzIEEgeworfQorCitjbGFzcyBDIHsKKyAgIHZvaWQgZm9vKE9iamVjdCBvKSB7CisgICAgICAgaWYgKG8gaW5zdGFuY2VvZiBBIHx8IG8gaW5zdGFuY2VvZiBCKSB7CisgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU29tZXRoaW5nIik7CisgICAgICAgfQorICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RhdGFGbG93L05vdE51bGxBcnJheS9leHBlY3RlZC54bWwgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kYXRhRmxvdy9Ob3ROdWxsQXJyYXkvZXhwZWN0ZWQueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc5NmEzMTUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kYXRhRmxvdy9Ob3ROdWxsQXJyYXkvZXhwZWN0ZWQueG1sCkBAIC0wLDAgKzEsMiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxwcm9ibGVtcyAvPgpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGF0YUZsb3cvTm90TnVsbEFycmF5L3NyYy9UZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kYXRhRmxvdy9Ob3ROdWxsQXJyYXkvc3JjL1Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOTY3MTU1Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGF0YUZsb3cvTm90TnVsbEFycmF5L3NyYy9UZXN0LmphdmEKQEAgLTAsMCArMSwxNSBAQAoraW1wb3J0IG9yZy5qZXRicmFpbnMuYW5ub3RhdGlvbnMuTnVsbGFibGU7CitpbXBvcnQgb3JnLmpldGJyYWlucy5hbm5vdGF0aW9ucy5Ob3ROdWxsOworCitwdWJsaWMgY2xhc3MgVGVzdE5QRWFmdGVyTmV3IHsKKyAgQE51bGxhYmxlIE9iamVjdFtdIGFycjsKKyAgdm9pZCB0ZXN0KEBOb3ROdWxsIE9iamVjdFtdIG5vdG51bGwpIHsKKyAgICAgIGFyciA9IG5vdG51bGw7CisgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oYXJyLmxlbmd0aCk7CisgIH0KKworICB2b2lkIHRlc3QoKSB7CisgICAgICBhcnIgPSBuZXcgT2JqZWN0WzVdOworICAgICAgU3lzdGVtLm91dC5wcmludGxuKGFyci5sZW5ndGgpOworICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kYXRhRmxvdy9Ob3ROdWxsTG9jYWxWYXJpYWJsZS9leHBlY3RlZC54bWwgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kYXRhRmxvdy9Ob3ROdWxsTG9jYWxWYXJpYWJsZS9leHBlY3RlZC54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDY2MWUyMwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RhdGFGbG93L05vdE51bGxMb2NhbFZhcmlhYmxlL2V4cGVjdGVkLnhtbApAQCAtMCwwICsxLDggQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8cHJvYmxlbXM+CisgIDxwcm9ibGVtPgorICAgIDxmaWxlPk5wZS5qYXZhPC9maWxlPgorICAgIDxsaW5lPjc8L2xpbmU+CisgICAgPGRlc2NyaXB0aW9uPkNvbmRpdGlvbiAnbyA9PSBudWxsJyBpcyBhbHdheXMgZmFsc2U8L2Rlc2NyaXB0aW9uPgorICA8L3Byb2JsZW0+Cis8L3Byb2JsZW1zPgpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGF0YUZsb3cvTm90TnVsbExvY2FsVmFyaWFibGUvc3JjL05wZS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGF0YUZsb3cvTm90TnVsbExvY2FsVmFyaWFibGUvc3JjL05wZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM5MzNmNWIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kYXRhRmxvdy9Ob3ROdWxsTG9jYWxWYXJpYWJsZS9zcmMvTnBlLmphdmEKQEAgLTAsMCArMSwxMCBAQAoraW1wb3J0IG9yZy5qZXRicmFpbnMuYW5ub3RhdGlvbnMuTm90TnVsbDsKK2ltcG9ydCBvcmcuamV0YnJhaW5zLmFubm90YXRpb25zLk51bGxhYmxlOworCitwdWJsaWMgY2xhc3MgTnBlIHsKKyAgIHZvaWQgYmFyKCkgeworICAgICBmaW5hbCBATm90TnVsbCBPYmplY3QgbyA9IGNhbGwoKTsKKyAgICAgaWYgKG8gPT0gbnVsbCkge30KKyAgIH0KKyAgIE9iamVjdCBjYWxsKCkge3JldHVybiBuZXcgT2JqZWN0KCk7fQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RhdGFGbG93L05vdE51bGxhYmxlL2V4cGVjdGVkLnhtbCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RhdGFGbG93L05vdE51bGxhYmxlL2V4cGVjdGVkLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOGM4NWZjCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGF0YUZsb3cvTm90TnVsbGFibGUvZXhwZWN0ZWQueG1sCkBAIC0wLDAgKzEsOSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxwcm9ibGVtcz4KKyAgPHByb2JsZW0+CisgICAgPGZpbGU+TnBlLmphdmE8L2ZpbGU+CisgICAgPGxpbmU+MTA8L2xpbmU+CisgICAgPGRlc2NyaXB0aW9uPkNvbmRpdGlvbiAnbyA9PSBudWxsJyBpcyBhbHdheXMgZmFsc2U8L2Rlc2NyaXB0aW9uPgorICA8L3Byb2JsZW0+Cis8L3Byb2JsZW1zPgorCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kYXRhRmxvdy9Ob3ROdWxsYWJsZS9zcmMvTnBlLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kYXRhRmxvdy9Ob3ROdWxsYWJsZS9zcmMvTnBlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDU1M2I1MwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RhdGFGbG93L05vdE51bGxhYmxlL3NyYy9OcGUuamF2YQpAQCAtMCwwICsxLDEyIEBACitpbXBvcnQgb3JnLmpldGJyYWlucy5hbm5vdGF0aW9ucy5Ob3ROdWxsOworCitwdWJsaWMgY2xhc3MgTnBlIHsKKyAgIEBOb3ROdWxsIE9iamVjdCBmb28oKSB7CisgICAgIHJldHVybiBuZXcgT2JqZWN0KCk7CisgICB9CisKKyAgIHZvaWQgYmFyKCkgeworICAgICBPYmplY3QgbyA9IGZvbygpOworICAgICBpZiAobyA9PSBudWxsKSBTeXN0ZW0ub3V0LnByaW50bG4oIkNhbid0IGJlIik7CisgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGF0YUZsb3cvTm90TnVsbGFibGVQYXJhbWV0ZXIvZXhwZWN0ZWQueG1sIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGF0YUZsb3cvTm90TnVsbGFibGVQYXJhbWV0ZXIvZXhwZWN0ZWQueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQxOTlhZTEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kYXRhRmxvdy9Ob3ROdWxsYWJsZVBhcmFtZXRlci9leHBlY3RlZC54bWwKQEAgLTAsMCArMSw5IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHByb2JsZW1zPgorICA8cHJvYmxlbT4KKyAgICA8ZmlsZT5OcGUuamF2YTwvZmlsZT4KKyAgICA8bGluZT45PC9saW5lPgorICAgIDxkZXNjcmlwdGlvbj5QYXNzaW5nIG51bGwgYXJndW1lbnQgdG8gcGFyYW1ldGVyIGFubm90YXRlZCBhcyBATm90TnVsbDwvZGVzY3JpcHRpb24+CisgIDwvcHJvYmxlbT4KKzwvcHJvYmxlbXM+CisKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RhdGFGbG93L05vdE51bGxhYmxlUGFyYW1ldGVyL3NyYy9OcGUuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RhdGFGbG93L05vdE51bGxhYmxlUGFyYW1ldGVyL3NyYy9OcGUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOGEyYTZmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGF0YUZsb3cvTm90TnVsbGFibGVQYXJhbWV0ZXIvc3JjL05wZS5qYXZhCkBAIC0wLDAgKzEsMTEgQEAKK2ltcG9ydCBvcmcuamV0YnJhaW5zLmFubm90YXRpb25zLk5vdE51bGw7CisKK3B1YmxpYyBjbGFzcyBOcGUgeworICAgT2JqZWN0IGZvbyhATm90TnVsbCBPYmplY3QgbykgeworICAgICByZXR1cm4gbzsKKyAgIH0KKworICAgdm9pZCBiYXIoKSB7CisgICAgIE9iamVjdCBvID0gZm9vKG51bGwpOyAvLyBudWxsIHNob3VsZCBub3QgYmUgcGFzc2VkIGhlcmUuCisgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGF0YUZsb3cvTm90TnVsbGFibGVQYXJhbWV0ZXIyL2V4cGVjdGVkLnhtbCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RhdGFGbG93L05vdE51bGxhYmxlUGFyYW1ldGVyMi9leHBlY3RlZC54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2VhNjVlNwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RhdGFGbG93L05vdE51bGxhYmxlUGFyYW1ldGVyMi9leHBlY3RlZC54bWwKQEAgLTAsMCArMSw5IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHByb2JsZW1zPgorICA8cHJvYmxlbT4KKyAgICA8ZmlsZT5OcGUuamF2YTwvZmlsZT4KKyAgICA8bGluZT41PC9saW5lPgorICAgIDxkZXNjcmlwdGlvbj5Db25kaXRpb24gJ28gPT0gbnVsbCcgaXMgYWx3YXlzIGZhbHNlPC9kZXNjcmlwdGlvbj4KKyAgPC9wcm9ibGVtPgorPC9wcm9ibGVtcz4KKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGF0YUZsb3cvTm90TnVsbGFibGVQYXJhbWV0ZXIyL3NyYy9OcGUuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RhdGFGbG93L05vdE51bGxhYmxlUGFyYW1ldGVyMi9zcmMvTnBlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODIwYWMwOQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RhdGFGbG93L05vdE51bGxhYmxlUGFyYW1ldGVyMi9zcmMvTnBlLmphdmEKQEAgLTAsMCArMSwxMCBAQAoraW1wb3J0IG9yZy5qZXRicmFpbnMuYW5ub3RhdGlvbnMuTm90TnVsbDsKKworcHVibGljIGNsYXNzIE5wZSB7CisgICBPYmplY3QgZm9vKEBOb3ROdWxsIE9iamVjdCBvKSB7CisgICAgIGlmIChvID09IG51bGwpIHsKKyAgICAgICAvLyBTaG91bGQgbm90IGdldCB0aGVyZS4KKyAgICAgfQorICAgICByZXR1cm4gbzsKKyAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kYXRhRmxvdy9OdWxsYWJsZS9leHBlY3RlZC54bWwgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kYXRhRmxvdy9OdWxsYWJsZS9leHBlY3RlZC54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTkyNDUzNAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RhdGFGbG93L051bGxhYmxlL2V4cGVjdGVkLnhtbApAQCAtMCwwICsxLDggQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8cHJvYmxlbXM+CisgIDxwcm9ibGVtPgorICAgIDxmaWxlPk5wZS5qYXZhPC9maWxlPgorICAgIDxsaW5lPjE0PC9saW5lPgorICAgIDxkZXNjcmlwdGlvbj5Bcmd1bWVudCAnbnVsbGFibGUoKScgbWlnaHQgYmUgbnVsbDwvZGVzY3JpcHRpb24+CisgIDwvcHJvYmxlbT4KKzwvcHJvYmxlbXM+CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kYXRhRmxvdy9OdWxsYWJsZS9zcmMvTnBlLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kYXRhRmxvdy9OdWxsYWJsZS9zcmMvTnBlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWQ3MTY2NAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RhdGFGbG93L051bGxhYmxlL3NyYy9OcGUuamF2YQpAQCAtMCwwICsxLDE2IEBACitpbXBvcnQgb3JnLmpldGJyYWlucy5hbm5vdGF0aW9ucy5Ob3ROdWxsOworaW1wb3J0IG9yZy5qZXRicmFpbnMuYW5ub3RhdGlvbnMuTnVsbGFibGU7CisKK3B1YmxpYyBjbGFzcyBOcGUgeworICAgT2JqZWN0IGZvbyhATm90TnVsbCBPYmplY3QgbykgeworICAgICByZXR1cm4gbzsKKyAgIH0KKworICAgQE51bGxhYmxlIE9iamVjdCBudWxsYWJsZSgpIHsKKyAgICAgcmV0dXJuIG51bGw7CisgICB9CisKKyAgIHZvaWQgYmFyKCkgeworICAgICBPYmplY3QgbyA9IGZvbyhudWxsYWJsZSgpKTsgLy8gbnVsbCBzaG91bGQgbm90IGJlIHBhc3NlZCBoZXJlLgorICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RhdGFGbG93L051bGxhYmxlQXNzaWdubWVudC9leHBlY3RlZC54bWwgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kYXRhRmxvdy9OdWxsYWJsZUFzc2lnbm1lbnQvZXhwZWN0ZWQueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdjMmNlYWMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kYXRhRmxvdy9OdWxsYWJsZUFzc2lnbm1lbnQvZXhwZWN0ZWQueG1sCkBAIC0wLDAgKzEsMTMgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8cHJvYmxlbXM+CisgIDxwcm9ibGVtPgorICAgIDxmaWxlPk5wZS5qYXZhPC9maWxlPgorICAgIDxsaW5lPjEyPC9saW5lPgorICAgIDxkZXNjcmlwdGlvbj5FeHByZXNzaW9uICdvJyBtaWdodCBldmFsdWF0ZSB0byBudWxsPC9kZXNjcmlwdGlvbj4KKyAgPC9wcm9ibGVtPgorICA8cHJvYmxlbT4KKyAgICA8ZmlsZT5OcGUuamF2YTwvZmlsZT4KKyAgICA8bGluZT4xMzwvbGluZT4KKyAgICA8ZGVzY3JpcHRpb24+RXhwcmVzc2lvbiAnbycgbWlnaHQgZXZhbHVhdGUgdG8gbnVsbDwvZGVzY3JpcHRpb24+CisgIDwvcHJvYmxlbT4KKzwvcHJvYmxlbXM+CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kYXRhRmxvdy9OdWxsYWJsZUFzc2lnbm1lbnQvc3JjL05wZS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGF0YUZsb3cvTnVsbGFibGVBc3NpZ25tZW50L3NyYy9OcGUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYWU1MDYxCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGF0YUZsb3cvTnVsbGFibGVBc3NpZ25tZW50L3NyYy9OcGUuamF2YQpAQCAtMCwwICsxLDE1IEBACitpbXBvcnQgb3JnLmpldGJyYWlucy5hbm5vdGF0aW9ucy5Ob3ROdWxsOworaW1wb3J0IG9yZy5qZXRicmFpbnMuYW5ub3RhdGlvbnMuTnVsbGFibGU7CisKK3B1YmxpYyBjbGFzcyBOcGUgeworICAgQE5vdE51bGwgT2JqZWN0IGFGaWVsZDsKKyAgIEBOdWxsYWJsZSBPYmplY3QgbnVsbGFibGUoKSB7CisgICAgIHJldHVybiBudWxsOworICAgfQorCisgICB2b2lkIGJhcigpIHsKKyAgICAgT2JqZWN0IG8gPSBudWxsYWJsZSgpOworICAgICBhRmllbGQgPSBvOworICAgICBATm90TnVsbCBPYmplY3QgYUxvY2FsVmFyaWFibGUgPSBvOworICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RhdGFGbG93L051bGxhYmxlTG9jYWxWYXJpYWJsZS9leHBlY3RlZC54bWwgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kYXRhRmxvdy9OdWxsYWJsZUxvY2FsVmFyaWFibGUvZXhwZWN0ZWQueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgzMzAyYjEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kYXRhRmxvdy9OdWxsYWJsZUxvY2FsVmFyaWFibGUvZXhwZWN0ZWQueG1sCkBAIC0wLDAgKzEsOCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxwcm9ibGVtcz4KKyAgPHByb2JsZW0+CisgICAgPGZpbGU+TnBlLmphdmE8L2ZpbGU+CisgICAgPGxpbmU+NzwvbGluZT4KKyAgICA8ZGVzY3JpcHRpb24+J28uaGFzaENvZGUoKScgbWF5IHByb2R1Y2UgTnVsbFBvaW50ZXJFeGNlcHRpb248L2Rlc2NyaXB0aW9uPgorICA8L3Byb2JsZW0+Cis8L3Byb2JsZW1zPgpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGF0YUZsb3cvTnVsbGFibGVMb2NhbFZhcmlhYmxlL3NyYy9OcGUuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RhdGFGbG93L051bGxhYmxlTG9jYWxWYXJpYWJsZS9zcmMvTnBlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2UyMzI4NQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RhdGFGbG93L051bGxhYmxlTG9jYWxWYXJpYWJsZS9zcmMvTnBlLmphdmEKQEAgLTAsMCArMSwxMyBAQAoraW1wb3J0IG9yZy5qZXRicmFpbnMuYW5ub3RhdGlvbnMuTm90TnVsbDsKK2ltcG9ydCBvcmcuamV0YnJhaW5zLmFubm90YXRpb25zLk51bGxhYmxlOworCitwdWJsaWMgY2xhc3MgTnBlIHsKKyAgIHZvaWQgYmFyKCkgeworICAgICBmaW5hbCBATnVsbGFibGUgT2JqZWN0IG8gPSBmb28oKTsKKyAgICAgby5oYXNoQ29kZSgpOyAvLyBOUEUKKyAgIH0KKworICAgQE51bGxhYmxlIE9iamVjdCBmb28oKSB7CisgICAgIHJldHVybiBudWxsOworICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGF0YUZsb3cvTnVsbGFibGVQcm9ibGVtVGhyb3VnaENhc3QvZXhwZWN0ZWQueG1sIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGF0YUZsb3cvTnVsbGFibGVQcm9ibGVtVGhyb3VnaENhc3QvZXhwZWN0ZWQueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI3ZWI1ZTgKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kYXRhRmxvdy9OdWxsYWJsZVByb2JsZW1UaHJvdWdoQ2FzdC9leHBlY3RlZC54bWwKQEAgLTAsMCArMSw4IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHByb2JsZW1zPgorICA8cHJvYmxlbT4KKyAgICA8ZmlsZT5OcGUuamF2YTwvZmlsZT4KKyAgICA8bGluZT42PC9saW5lPgorICAgIDxkZXNjcmlwdGlvbj5NZXRob2QgaW52b2NhdGlvbiAmbHQ7Y29kZSZndDsoKFNvbWVJbnRlcmZhY2VJbXBsKXgpLmJhcigpJmx0Oy9jb2RlJmd0OyBtYXkgcHJvZHVjZSAmbHQ7Y29kZSZndDtqYXZhLmxhbmcuTnVsbFBvaW50ZXJFeGNlcHRpb24mbHQ7L2NvZGUmZ3Q7PC9kZXNjcmlwdGlvbj4KKyAgPC9wcm9ibGVtPgorPC9wcm9ibGVtcz4KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RhdGFGbG93L051bGxhYmxlUHJvYmxlbVRocm91Z2hDYXN0L3NyYy9OcGUuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RhdGFGbG93L051bGxhYmxlUHJvYmxlbVRocm91Z2hDYXN0L3NyYy9OcGUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OTM3NTkxCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGF0YUZsb3cvTnVsbGFibGVQcm9ibGVtVGhyb3VnaENhc3Qvc3JjL05wZS5qYXZhCkBAIC0wLDAgKzEsMTggQEAKK2ltcG9ydCBvcmcuamV0YnJhaW5zLmFubm90YXRpb25zLk51bGxhYmxlOworCitwdWJsaWMgY2xhc3MgTnBlIHsKKyAgCisgIHZvaWQgZm9vKEBOdWxsYWJsZSBTb21lSW50ZXJmYWNlIHgpIHsKKyAgICAoKFNvbWVJbnRlcmZhY2VJbXBsKXgpLmJhcigpOworICB9CisKKyAgaW50ZXJmYWNlIFNvbWVJbnRlcmZhY2UgeworICAgIHZvaWQgYmFyKCk7CisgIH0KKworICBjbGFzcyBTb21lSW50ZXJmYWNlSW1wbCBpbXBsZW1lbnRzIFNvbWVJbnRlcmZhY2UgeworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyB2b2lkIGJhcigpIHsKKyAgICB9CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kYXRhRmxvdy9OdWxsYWJsZVJldHVybi9leHBlY3RlZC54bWwgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kYXRhRmxvdy9OdWxsYWJsZVJldHVybi9leHBlY3RlZC54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmRkM2VhMAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RhdGFGbG93L051bGxhYmxlUmV0dXJuL2V4cGVjdGVkLnhtbApAQCAtMCwwICsxLDggQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8cHJvYmxlbXM+CisgIDxwcm9ibGVtPgorICAgIDxmaWxlPk5wZS5qYXZhPC9maWxlPgorICAgIDxsaW5lPjY8L2xpbmU+CisgICAgPGRlc2NyaXB0aW9uPm51bGwgaXMgcmV0dXJuZWQ8L2Rlc2NyaXB0aW9uPgorICA8L3Byb2JsZW0+Cis8L3Byb2JsZW1zPgpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGF0YUZsb3cvTnVsbGFibGVSZXR1cm4vc3JjL05wZS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGF0YUZsb3cvTnVsbGFibGVSZXR1cm4vc3JjL05wZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYyODA2YTAKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kYXRhRmxvdy9OdWxsYWJsZVJldHVybi9zcmMvTnBlLmphdmEKQEAgLTAsMCArMSw4IEBACitpbXBvcnQgb3JnLmpldGJyYWlucy5hbm5vdGF0aW9ucy5Ob3ROdWxsOworaW1wb3J0IG9yZy5qZXRicmFpbnMuYW5ub3RhdGlvbnMuTnVsbGFibGU7CisKK3B1YmxpYyBjbGFzcyBOcGUgeworICAgQE5vdE51bGwgT2JqZWN0IGZvbygpIHsKKyAgICAgcmV0dXJuIG51bGw7CisgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGF0YUZsb3cvTnVsbGFibGVSZXR1cm4xL2V4cGVjdGVkLnhtbCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RhdGFGbG93L051bGxhYmxlUmV0dXJuMS9leHBlY3RlZC54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWM0NThlYQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RhdGFGbG93L051bGxhYmxlUmV0dXJuMS9leHBlY3RlZC54bWwKQEAgLTAsMCArMSw4IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHByb2JsZW1zPgorICA8cHJvYmxlbT4KKyAgICA8ZmlsZT5UZXN0LmphdmE8L2ZpbGU+CisgICAgPGxpbmU+ODwvbGluZT4KKyAgICA8ZGVzY3JpcHRpb24+RXhwcmVzc2lvbiAncmVzJyBtaWdodCBldmFsdWF0ZSB0byBudWxsIGJ1dCBpcyByZXR1cm5lZCBieSB0aGUgbWV0aG9kIGRlY2xhcmVkIGFzIEBOb3ROdWxsPC9kZXNjcmlwdGlvbj4KKyAgPC9wcm9ibGVtPgorPC9wcm9ibGVtcz4KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RhdGFGbG93L051bGxhYmxlUmV0dXJuMS9zcmMvVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGF0YUZsb3cvTnVsbGFibGVSZXR1cm4xL3NyYy9UZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGE3M2NkMgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RhdGFGbG93L051bGxhYmxlUmV0dXJuMS9zcmMvVGVzdC5qYXZhCkBAIC0wLDAgKzEsMTAgQEAKK2ltcG9ydCBvcmcuamV0YnJhaW5zLmFubm90YXRpb25zLk5vdE51bGw7CitpbXBvcnQgb3JnLmpldGJyYWlucy5hbm5vdGF0aW9ucy5OdWxsYWJsZTsKKworY2xhc3MgVGVzdCB7CisgIEBOb3ROdWxsIE9iamVjdCBmb28oKSB7CisgICAgT2JqZWN0IHJlczsKKyAgICByZXMgPSBudWxsOworICAgIHJldHVybiByZXM7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kYXRhRmxvdy9OdWxsYWJsZVRocm91Z2hDYXN0L2V4cGVjdGVkLnhtbCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RhdGFGbG93L051bGxhYmxlVGhyb3VnaENhc3QvZXhwZWN0ZWQueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRhM2FmNTYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kYXRhRmxvdy9OdWxsYWJsZVRocm91Z2hDYXN0L2V4cGVjdGVkLnhtbApAQCAtMCwwICsxLDggQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8cHJvYmxlbXM+CisgIDxwcm9ibGVtPgorICAgIDxmaWxlPk5wZS5qYXZhPC9maWxlPgorICAgIDxsaW5lPjE0PC9saW5lPgorICAgIDxkZXNjcmlwdGlvbj5Bcmd1bWVudCAnKE9iamVjdCludWxsYWJsZSgpJyBtaWdodCBiZSBudWxsPC9kZXNjcmlwdGlvbj4KKyAgPC9wcm9ibGVtPgorPC9wcm9ibGVtcz4KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RhdGFGbG93L051bGxhYmxlVGhyb3VnaENhc3Qvc3JjL05wZS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGF0YUZsb3cvTnVsbGFibGVUaHJvdWdoQ2FzdC9zcmMvTnBlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmJhZjJhZAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RhdGFGbG93L051bGxhYmxlVGhyb3VnaENhc3Qvc3JjL05wZS5qYXZhCkBAIC0wLDAgKzEsMTYgQEAKK2ltcG9ydCBvcmcuamV0YnJhaW5zLmFubm90YXRpb25zLk5vdE51bGw7CitpbXBvcnQgb3JnLmpldGJyYWlucy5hbm5vdGF0aW9ucy5OdWxsYWJsZTsKKworcHVibGljIGNsYXNzIE5wZSB7CisgICBPYmplY3QgZm9vKEBOb3ROdWxsIE9iamVjdCBvKSB7CisgICAgIHJldHVybiBvOworICAgfQorCisgICBATnVsbGFibGUgT2JqZWN0IG51bGxhYmxlKCkgeworICAgICByZXR1cm4gbnVsbDsKKyAgIH0KKworICAgdm9pZCBiYXIoKSB7CisgICAgIE9iamVjdCBvID0gZm9vKChPYmplY3QpbnVsbGFibGUoKSk7IC8vIG51bGwgc2hvdWxkIG5vdCBiZSBwYXNzZWQgaGVyZS4KKyAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kYXRhRmxvdy9OdWxsYWJsZVRocm91Z2hWYXJpYWJsZS9leHBlY3RlZC54bWwgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kYXRhRmxvdy9OdWxsYWJsZVRocm91Z2hWYXJpYWJsZS9leHBlY3RlZC54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTgzNzYxNAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RhdGFGbG93L051bGxhYmxlVGhyb3VnaFZhcmlhYmxlL2V4cGVjdGVkLnhtbApAQCAtMCwwICsxLDggQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8cHJvYmxlbXM+CisgIDxwcm9ibGVtPgorICAgIDxmaWxlPk5wZS5qYXZhPC9maWxlPgorICAgIDxsaW5lPjE1PC9saW5lPgorICAgIDxkZXNjcmlwdGlvbj5Bcmd1bWVudCAnbycgbWlnaHQgYmUgbnVsbDwvZGVzY3JpcHRpb24+CisgIDwvcHJvYmxlbT4KKzwvcHJvYmxlbXM+CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kYXRhRmxvdy9OdWxsYWJsZVRocm91Z2hWYXJpYWJsZS9zcmMvTnBlLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kYXRhRmxvdy9OdWxsYWJsZVRocm91Z2hWYXJpYWJsZS9zcmMvTnBlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODE3YTRjMgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RhdGFGbG93L051bGxhYmxlVGhyb3VnaFZhcmlhYmxlL3NyYy9OcGUuamF2YQpAQCAtMCwwICsxLDE3IEBACitpbXBvcnQgb3JnLmpldGJyYWlucy5hbm5vdGF0aW9ucy5Ob3ROdWxsOworaW1wb3J0IG9yZy5qZXRicmFpbnMuYW5ub3RhdGlvbnMuTnVsbGFibGU7CisKK3B1YmxpYyBjbGFzcyBOcGUgeworICAgT2JqZWN0IGZvbyhATm90TnVsbCBPYmplY3QgbykgeworICAgICByZXR1cm4gbzsKKyAgIH0KKworICAgQE51bGxhYmxlIE9iamVjdCBudWxsYWJsZSgpIHsKKyAgICAgcmV0dXJuIG51bGw7CisgICB9CisKKyAgIHZvaWQgYmFyKCkgeworICAgICBPYmplY3QgbyA9IG51bGxhYmxlKCk7CisgICAgIGZvbyhvKTsgLy8gbnVsbCBzaG91bGQgbm90IGJlIHBhc3NlZCBoZXJlCisgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGF0YUZsb3cvTnVsbGFibGVUaHJvdWdoVmFyaWFibGVTaG91bGROb3RCZVJlcG9ydGVkL2V4cGVjdGVkLnhtbCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RhdGFGbG93L051bGxhYmxlVGhyb3VnaFZhcmlhYmxlU2hvdWxkTm90QmVSZXBvcnRlZC9leHBlY3RlZC54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzYzYzkyNQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RhdGFGbG93L051bGxhYmxlVGhyb3VnaFZhcmlhYmxlU2hvdWxkTm90QmVSZXBvcnRlZC9leHBlY3RlZC54bWwKQEAgLTAsMCArMSwyIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHByb2JsZW1zLz4KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RhdGFGbG93L051bGxhYmxlVGhyb3VnaFZhcmlhYmxlU2hvdWxkTm90QmVSZXBvcnRlZC9zcmMvTnBlLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kYXRhRmxvdy9OdWxsYWJsZVRocm91Z2hWYXJpYWJsZVNob3VsZE5vdEJlUmVwb3J0ZWQvc3JjL05wZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc3YjEyMjIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kYXRhRmxvdy9OdWxsYWJsZVRocm91Z2hWYXJpYWJsZVNob3VsZE5vdEJlUmVwb3J0ZWQvc3JjL05wZS5qYXZhCkBAIC0wLDAgKzEsMTkgQEAKK2ltcG9ydCBvcmcuamV0YnJhaW5zLmFubm90YXRpb25zLk5vdE51bGw7CitpbXBvcnQgb3JnLmpldGJyYWlucy5hbm5vdGF0aW9ucy5OdWxsYWJsZTsKKworcHVibGljIGNsYXNzIE5wZSB7CisgICBPYmplY3QgZm9vKEBOb3ROdWxsIE9iamVjdCBvKSB7CisgICAgIHJldHVybiBvOworICAgfQorCisgICBATnVsbGFibGUgT2JqZWN0IG51bGxhYmxlKCkgeworICAgICByZXR1cm4gbnVsbDsKKyAgIH0KKworICAgdm9pZCBiYXIoKSB7CisgICAgIE9iamVjdCBvID0gbnVsbGFibGUoKTsKKyAgICAgaWYgKG8gIT0gbnVsbCkgeworICAgICAgIGZvbyhvKTsgLy8gT0ssIG8gY2FuJ3QgYmUgbnVsbC4KKyAgICAgfQorICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RhdGFGbG93L1BsdXNPblN0cmluZ3MvZXhwZWN0ZWQueG1sIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGF0YUZsb3cvUGx1c09uU3RyaW5ncy9leHBlY3RlZC54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDVhOTdmZgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RhdGFGbG93L1BsdXNPblN0cmluZ3MvZXhwZWN0ZWQueG1sCkBAIC0wLDAgKzEsOCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxwcm9ibGVtcz4KKyAgPHByb2JsZW0+CisgICAgPGZpbGU+VGVzdC5qYXZhPC9maWxlPgorICAgIDxsaW5lPjY8L2xpbmU+CisgICAgPGRlc2NyaXB0aW9uPkNvbmRpdGlvbiAnYyA9PSBudWxsJyBpcyBhbHdheXMgZmFsc2U8L2Rlc2NyaXB0aW9uPgorICA8L3Byb2JsZW0+Cis8L3Byb2JsZW1zPgpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGF0YUZsb3cvUGx1c09uU3RyaW5ncy9zcmMvVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGF0YUZsb3cvUGx1c09uU3RyaW5ncy9zcmMvVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU5ZWE3NGUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kYXRhRmxvdy9QbHVzT25TdHJpbmdzL3NyYy9UZXN0LmphdmEKQEAgLTAsMCArMSwxMCBAQAoraW1wb3J0IGphdmEuaW8uKjsKKworcHVibGljIGNsYXNzIEZvbyB7CisgIHB1YmxpYyB2b2lkIGZvbyhPYmplY3QgYSwgU3RyaW5nIGIpIHsKKyAgICAgU3RyaW5nIGMgPSBhICsgYjsKKyAgICAgaWYgKGMgPT0gbnVsbCkgeworICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDYW4ndCBiZSEiKTsKKyAgICAgfQorICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGF0YUZsb3cvUmVncmVzc2lvbkJ5UHRpL2V4cGVjdGVkLnhtbCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RhdGFGbG93L1JlZ3Jlc3Npb25CeVB0aS9leHBlY3RlZC54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWMyNzJhYgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RhdGFGbG93L1JlZ3Jlc3Npb25CeVB0aS9leHBlY3RlZC54bWwKQEAgLTAsMCArMSwzIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHByb2JsZW1zLz4KKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGF0YUZsb3cvUmVncmVzc2lvbkJ5UHRpL3NyYy9Ob1dhcm5pbmdzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kYXRhRmxvdy9SZWdyZXNzaW9uQnlQdGkvc3JjL05vV2FybmluZ3MuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZTMzYzYyOAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RhdGFGbG93L1JlZ3Jlc3Npb25CeVB0aS9zcmMvTm9XYXJuaW5ncy5qYXZhCkBAIC0wLDAgKzEsMzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwMC0yMDExIEpldEJyYWlucyBzLnIuby4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCitwdWJsaWMgY2xhc3MgQUFBIHsKKyBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisKKyAgIGZvciAoaW50IGkgPSAwOyBpIDwgYXJncy5sZW5ndGg7IGkrKykgeworICAgICBmaW5hbCBTdHJpbmcgZWxlbWVudCA9IGFyZ3NbaV07CisKKyAgICAgaWYgKGkgPT0gMSkgeworICAgICAgIGlmIChlbGVtZW50ICE9IG51bGwpIHsgLy8gISEhISEgV1JPTkc6IGVsZW1lbnRbMV0gPT0gbnVsbAorICAgICAgICAgcmV0dXJuOworICAgICAgIH0KKyAgICAgfQorICAgICBlbHNlIGlmIChlbGVtZW50ID09IG51bGwpIHsKKyAgICAgICByZXR1cm47CisgICAgIH0KKyAgIH0KKyB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kYXRhRmxvdy9TQ1IxMzYyNi9leHBlY3RlZC54bWwgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kYXRhRmxvdy9TQ1IxMzYyNi9leHBlY3RlZC54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmU2YjM2ZAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RhdGFGbG93L1NDUjEzNjI2L2V4cGVjdGVkLnhtbApAQCAtMCwwICsxLDE0IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHByb2JsZW1zPgorICA8cHJvYmxlbT4KKyAgICA8ZmlsZT5UZXN0LmphdmE8L2ZpbGU+CisgICAgPGxpbmU+MTQ8L2xpbmU+CisgICAgPGRlc2NyaXB0aW9uPkNvbmRpdGlvbiAnIWEgJmFtcDsmYW1wOyBiJyBhbHdheXMgZmFsc2U8L2Rlc2NyaXB0aW9uPgorICA8L3Byb2JsZW0+CisgIDxwcm9ibGVtPgorICAgIDxmaWxlPlRlc3QuamF2YTwvZmlsZT4KKyAgICA8bGluZT4xNDwvbGluZT4KKyAgICA8ZGVzY3JpcHRpb24+Q29uZGl0aW9uICchYScgYWx3YXlzIGZhbHNlPC9kZXNjcmlwdGlvbj4KKyAgPC9wcm9ibGVtPgorPC9wcm9ibGVtcz4KKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGF0YUZsb3cvU0NSMTM2MjYvc3JjL1Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RhdGFGbG93L1NDUjEzNjI2L3NyYy9UZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDYxN2NmNwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RhdGFGbG93L1NDUjEzNjI2L3NyYy9UZXN0LmphdmEKQEAgLTAsMCArMSwxNiBAQAorY2xhc3MgVGVzdAoreworY2xhc3MgVGVzdAoreworICAgIHB1YmxpYyB2b2lkIHgoKQorICAgIHsKKyAgICAgICAgYm9vbGVhbiBhID0gZmFsc2U7CisgICAgICAgIGJvb2xlYW4gYiA9IHRydWU7CisKKyAgICAgICAgZG8KKyAgICAgICAgeworICAgICAgICAgICAgYSA9IHRydWU7CisgICAgICAgIH0KKyAgICAgICAgd2hpbGUoICFhICYmIGIgKTsKKyAgICB9Cit9fQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGF0YUZsb3cvU0NSMTM3MDIvZXhwZWN0ZWQueG1sIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGF0YUZsb3cvU0NSMTM3MDIvZXhwZWN0ZWQueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlhYzg3OWQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kYXRhRmxvdy9TQ1IxMzcwMi9leHBlY3RlZC54bWwKQEAgLTAsMCArMSwzIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHByb2JsZW1zIC8+CisKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RhdGFGbG93L1NDUjEzNzAyL3NyYy9Gb28uamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RhdGFGbG93L1NDUjEzNzAyL3NyYy9Gb28uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NGMzMWE2Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGF0YUZsb3cvU0NSMTM3MDIvc3JjL0Zvby5qYXZhCkBAIC0wLDAgKzEsNSBAQAorcHVibGljIGNsYXNzIEZvbyB7CisgICBwdWJsaWMgdm9pZCBmb28oKSB7CisgICAgICBkbyB7fSB3aGlsZShmYWxzZSk7CisgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGF0YUZsb3cvU0NSMTM4NzEvZXhwZWN0ZWQueG1sIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGF0YUZsb3cvU0NSMTM4NzEvZXhwZWN0ZWQueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlhYzg3OWQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kYXRhRmxvdy9TQ1IxMzg3MS9leHBlY3RlZC54bWwKQEAgLTAsMCArMSwzIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHByb2JsZW1zIC8+CisKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RhdGFGbG93L1NDUjEzODcxL3NyYy9BYWEuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RhdGFGbG93L1NDUjEzODcxL3NyYy9BYWEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OTNmNTMxCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGF0YUZsb3cvU0NSMTM4NzEvc3JjL0FhYS5qYXZhCkBAIC0wLDAgKzEsMTIgQEAKK3B1YmxpYyBjbGFzcyBBYWEgeworICBPYmplY3QgZ2V0T2JqZWN0KCkgeworICAgIHJldHVybiBudWxsOworICB9CisgIAorICB2b2lkIGYoKSB7CisgICAgT2JqZWN0IG9iaiA9IGdldE9iamVjdCgpOworICAgIGlmIChvYmogaW5zdGFuY2VvZiBBYWEgfHwgb2JqID09IG51bGwpIHsKKyAgICAgIEFhYSBhID0gKEFhYSkgb2JqOyAvLyBpbnNwZWN0aW9uIHJlcG9ydHMgdGhhdCBDbGFzc0Nhc3RFeGNlcHRpb24gY2FuIGJlIHRocm93bgorICAgIH0KKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RhdGFGbG93L1NDUjE0MzE0L2V4cGVjdGVkLnhtbCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RhdGFGbG93L1NDUjE0MzE0L2V4cGVjdGVkLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOTI5MzlhCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGF0YUZsb3cvU0NSMTQzMTQvZXhwZWN0ZWQueG1sCkBAIC0wLDAgKzEsOSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxwcm9ibGVtcz4KKyAgPHByb2JsZW0+CisgICAgPGZpbGU+RmluYWxseS5qYXZhPC9maWxlPgorICAgIDxsaW5lPjk8L2xpbmU+CisgICAgPGRlc2NyaXB0aW9uPk1ldGhvZCBpbnZvY2F0aW9uICdvLmhhc2hDb2RlKCknIG1heSBwcm9kdWNlIGphdmEubGFuZy5OdWxsUG9pbnRlckV4Y2VwdGlvbjwvZGVzY3JpcHRpb24+CisgIDwvcHJvYmxlbT4KKzwvcHJvYmxlbXM+CisKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RhdGFGbG93L1NDUjE0MzE0L3NyYy9GaW5hbGx5LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kYXRhRmxvdy9TQ1IxNDMxNC9zcmMvRmluYWxseS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJkOGIwNDgKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kYXRhRmxvdy9TQ1IxNDMxNC9zcmMvRmluYWxseS5qYXZhCkBAIC0wLDAgKzEsMzcgQEAKK2ltcG9ydCBqYXZhLmlvLio7CisKK3B1YmxpYyBjbGFzcyBGaW5hbGx5IHsKKyAgIHB1YmxpYyB2b2lkIGZvbyhPYmplY3QgbykgeworICAgICB0cnkgeworICAgICAgIGlmIChvID09IG51bGwpIHJldHVybjsKKyAgICAgfQorICAgICBmaW5hbGx5IHsKKyAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oby5oYXNoQ29kZSgpKTsgLy8gRXJyb3IgaGVyZS4KKyAgICAgfQorICAgICBTeXN0ZW0ub3V0LnByaW50bG4oby5oYXNoQ29kZSgpKTsgLy8gTm8gZXJyb3IgaGVyZS4KKyAgIH0KKworICAgcHVibGljIHZvaWQgYmFyKE9iamVjdCBvKSB7CisgICAgICBib29sZWFuIHJlYXJyYW5nZUNoaWxkcmVuID0gZmFsc2U7CisgICAgICBPYmplY3QgdHlwZVBhdHRlcm47CisgICAgICB0cnkgeworICAgICAgICB0eXBlUGF0dGVybiA9IHBhcnNlVHlwZVBhdHRlcm4oKTsKKyAgICAgIH0gY2F0Y2ggKEZpbGVOb3RGb3VuZEV4Y2VwdGlvbiBmb2xsb3dzRmFpbHVyZSkgeworICAgICAgICBpZiAobyAhPSBudWxsKSB7CisgICAgICAgICAgdHlwZVBhdHRlcm4gPSBmb2xsb3dzRmFpbHVyZS5nZXRQYXJzaW5nUmVzdWx0KCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgdGhyb3cgZm9sbG93c0ZhaWx1cmU7CisgICAgICAgIH0KKworICAgICAgICByZWFycmFuZ2VDaGlsZHJlbiA9IHRydWU7CisgICAgICB9CisKKyAgICAgIGlmIChyZWFycmFuZ2VDaGlsZHJlbikgeworICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDYW4gYmUgaGVyZS4iKTsKKyAgICAgIH0KKyAgIH0KKworICAgT2JqZWN0IHBhcnNlVHlwZVBhdHRlcm4oKSB0aHJvd3MgSU9FeGNlcHRpb24geworICAgICAgcmV0dXJuIG51bGw7CisgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGF0YUZsb3cvU0NSMTQ4MTkvZXhwZWN0ZWQueG1sIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGF0YUZsb3cvU0NSMTQ4MTkvZXhwZWN0ZWQueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgwN2M5Y2EKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kYXRhRmxvdy9TQ1IxNDgxOS9leHBlY3RlZC54bWwKQEAgLTAsMCArMSwxOSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxwcm9ibGVtcz4KKyAgPHByb2JsZW0+CisgICAgPGZpbGU+VGVzdC5qYXZhPC9maWxlPgorICAgIDxsaW5lPjM8L2xpbmU+CisgICAgPGRlc2NyaXB0aW9uPkNvbmRpdGlvbiAndCBpbnN0YW5jZW9mIFRlc3QnIGlzIHJlZHVuZGFudDwvZGVzY3JpcHRpb24+CisgIDwvcHJvYmxlbT4KKyAgPHByb2JsZW0+CisgICAgPGZpbGU+VGVzdC5qYXZhPC9maWxlPgorICAgIDxsaW5lPjk8L2xpbmU+CisgICAgPGRlc2NyaXB0aW9uPkNvbmRpdGlvbiAndCBpbnN0YW5jZW9mIFRlc3QnIGFsd2F5cyB0cnVlPC9kZXNjcmlwdGlvbj4KKyAgPC9wcm9ibGVtPgorICA8cHJvYmxlbT4KKyAgICA8ZmlsZT5UZXN0LmphdmE8L2ZpbGU+CisgICAgPGxpbmU+MTQ8L2xpbmU+CisgICAgPGRlc2NyaXB0aW9uPkNvbmRpdGlvbiAnZm9vKG51bGwpIGluc3RhbmNlb2YgVGVzdCcgaXMgcmVkdW5kYW50PC9kZXNjcmlwdGlvbj4KKyAgPC9wcm9ibGVtPgorPC9wcm9ibGVtcz4KKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGF0YUZsb3cvU0NSMTQ4MTkvc3JjL1Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RhdGFGbG93L1NDUjE0ODE5L3NyYy9UZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGFmMTQ1MAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RhdGFGbG93L1NDUjE0ODE5L3NyYy9UZXN0LmphdmEKQEAgLTAsMCArMSwxNyBAQAorcHVibGljIGNsYXNzIFRlc3QgeworICBwdWJsaWMgVGVzdCBmb28oVGVzdCB0KSB7CisgICAgIGlmICh0IGluc3RhbmNlb2YgVGVzdCkgeyAvLyByZWR1bmRhbnQgaW5zdGFuY2VvZiBlcnJvciBoZXJlLiB0IGNhbiBiZSBudWxsCisgICAgICAgZm9vKG51bGwpOworICAgICB9CisgIH0KKyAgcHVibGljIE9iamVjdCBiYXIoVGVzdCB0KSB7CisgICAgIGlmICh0ID09IG51bGwpIHJldHVybjsKKyAgICAgaWYgKHQgaW5zdGFuY2VvZiBUZXN0KSB7IC8vIGFsd2F5cyB0cnVlIGVycm9yIGhlcmUuIHQgY2FuJ3QgYmUgbnVsbAorICAgICAgIGZvbyhudWxsKTsKKyAgICAgfQorCisgICAgIGlmIChiYXIobnVsbCkgaW5zdGFuY2VvZiBUZXN0KSByZXR1cm4gbnVsbDsgIC8vIG5vIGVycm9yIGhlcmUuCisgICAgIGlmIChmb28obnVsbCkgaW5zdGFuY2VvZiBUZXN0KSByZXR1cm4gbnVsbDsgIC8vIHJlZHVuZGFudCBpbnN0YW5jZW9mIGVycm9yIGhlcmUuIGZvbyhudWxsKSBjYW4gYmUgbnVsbAorICAgICByZXR1cm4gbnVsbDsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RhdGFGbG93L1NDUjE1MTYyL2V4cGVjdGVkLnhtbCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RhdGFGbG93L1NDUjE1MTYyL2V4cGVjdGVkLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZjJlZTM1Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGF0YUZsb3cvU0NSMTUxNjIvZXhwZWN0ZWQueG1sCkBAIC0wLDAgKzEsOSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxwcm9ibGVtcz4KKyAgPHByb2JsZW0+CisgICAgPGZpbGU+TnVsbFRlc3QuamF2YTwvZmlsZT4KKyAgICA8bGluZT42PC9saW5lPgorICAgIDxkZXNjcmlwdGlvbj5EZXJlZmVyZW5jZSBvZiAndCcgbWF5IHByb2R1Y2UgamF2YS5sYW5nLk51bGxQb2ludGVyRXhjZXB0aW9uPC9kZXNjcmlwdGlvbj4KKyAgPC9wcm9ibGVtPgorPC9wcm9ibGVtcz4KKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGF0YUZsb3cvU0NSMTUxNjIvc3JjL051bGxUZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kYXRhRmxvdy9TQ1IxNTE2Mi9zcmMvTnVsbFRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNTk4ZTc1Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGF0YUZsb3cvU0NSMTUxNjIvc3JjL051bGxUZXN0LmphdmEKQEAgLTAsMCArMSw5IEBACitwdWJsaWMgY2xhc3MgTnVsbFRlc3QgeworICAgIGludCBtOworICAgIHZvaWQgZigpIHt9OworICAgIHB1YmxpYyB2b2lkIHgoKSB7CisgICAgICAgIE51bGxUZXN0IHQgPSBudWxsOworICAgICAgICB0Lm0gPSAxMjsKKyAgICAgICAgdC5mKCk7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RhdGFGbG93L1NDUjE1NDA2L2V4cGVjdGVkLnhtbCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RhdGFGbG93L1NDUjE1NDA2L2V4cGVjdGVkLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYzI3MmFiCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGF0YUZsb3cvU0NSMTU0MDYvZXhwZWN0ZWQueG1sCkBAIC0wLDAgKzEsMyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxwcm9ibGVtcy8+CisKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RhdGFGbG93L1NDUjE1NDA2L3NyYy9Db2RlRmxvd1Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RhdGFGbG93L1NDUjE1NDA2L3NyYy9Db2RlRmxvd1Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMjk1M2Q3Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGF0YUZsb3cvU0NSMTU0MDYvc3JjL0NvZGVGbG93VGVzdC5qYXZhCkBAIC0wLDAgKzEsMzEgQEAKK2ltcG9ydCBvcmcuamV0YnJhaW5zLmFubm90YXRpb25zLk5vdE51bGw7CisKK3B1YmxpYyBjbGFzcyBDb2RlRmxvd1Rlc3QgeworICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbiAoU3RyaW5nW10gYXJncykgeworICAgIFN0cmluZyBzdHJpbmc7CisgICAgRXhjZXB0aW9uIGV4Y2VwdGlvbjsKKyAgICB0cnkgeworICAgICAgc3RyaW5nID0gZ2V0U3RyaW5nKCk7CisgICAgICBleGNlcHRpb24gPSBudWxsOworICAgIH0gY2F0Y2ggKFNvbWVFeGNlcHRpb24gZTEpIHsKKyAgICAgIHN0cmluZyA9IG51bGw7CisgICAgICBleGNlcHRpb24gPSBlMTsKKyAgICB9CisKKyAgICBpZiAoc3RyaW5nICE9IG51bGwpCisgICAgICBTeXN0ZW0ub3V0LnByaW50bG4gKCJOb3QgbnVsbCIpOworICAgIGVsc2UKKyAgICAgIGV4Y2VwdGlvbi5wcmludFN0YWNrVHJhY2UoKTsKKyAgfQorCisgIEBOb3ROdWxsIAorICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgZ2V0U3RyaW5nICgpIHRocm93cyBTb21lRXhjZXB0aW9uIHsKKyAgICBpZiAoTWF0aC5yYW5kb20oKSA8IDAuNSkKKyAgICAgIHRocm93IG5ldyBTb21lRXhjZXB0aW9uKCk7CisgICAgZWxzZQorICAgICAgcmV0dXJuICIiOworICB9CisKKyAgcHJpdmF0ZSBzdGF0aWMgY2xhc3MgU29tZUV4Y2VwdGlvbiBleHRlbmRzIEV4Y2VwdGlvbiB7CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RhdGFGbG93L1NDUjE4MTg2L2V4cGVjdGVkLnhtbCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RhdGFGbG93L1NDUjE4MTg2L2V4cGVjdGVkLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNjNjOTI1Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGF0YUZsb3cvU0NSMTgxODYvZXhwZWN0ZWQueG1sCkBAIC0wLDAgKzEsMiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxwcm9ibGVtcy8+CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kYXRhRmxvdy9TQ1IxODE4Ni9zcmMvVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGF0YUZsb3cvU0NSMTgxODYvc3JjL1Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYmVhMzk3Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGF0YUZsb3cvU0NSMTgxODYvc3JjL1Rlc3QuamF2YQpAQCAtMCwwICsxLDYxIEBACitpbXBvcnQgamF2YS5zcWwuKjsKKworcHVibGljIGNsYXNzIFRlc3QgeworCisgIC8qKgorICAgKiBM5GR0IGRlbiBEYXRlbnNhdHouCisgICAqLworICBwcml2YXRlIGJvb2xlYW4gbG9hZFZhbHVlcyhUcmFuc2FjdGlvbiB0cmFuc2FjdGlvbikgeworICAgIHRyeSB7CisgICAgICBib29sZWFuIHJlcz1mYWxzZTsKKyAgICAgIFByZXBhcmVkU3RhdGVtZW50IHN0bXQ9dHJhbnNhY3Rpb24uZGlydHkoKSA/IHRyYW5zYWN0aW9uLmRic3RvcmUoKS5zdG10R2V0RGlydHkodGhpcykgOiB0cmFuc2FjdGlvbi5kYnN0b3JlKCkuc3RtdEdldENsZWFuKHRoaXMpOworICAgICAgaWYgKHN0bXQ9PW51bGwpIHJldHVybiBmYWxzZTsKKyAgICAgIHN5bmNocm9uaXplZChzdG10KSB7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgdHJhbnNhY3Rpb24uZGJtYW5hZ2VyLmRic3RvcmUoKS5sb2Fkc0NvdW50Kys7CisgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIGZpbGxQSFBLKHN0bXQsIHRyYW5zYWN0aW9uKTsKKyAgICAgICAgICB9IGNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgREJNYW5hZ2VyLnJlc2V0VGhyZWFkKHN0bXQpOworICAgICAgICAgICAgdGhyb3cgZTsKKyAgICAgICAgICB9CisgICAgICAgICAgUmVzdWx0U2V0IHJzPXN0bXQuZXhlY3V0ZVF1ZXJ5KCk7CisgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIGlmIChycy5uZXh0KCkpIHsKKyAgICAgICAgICAgICAgbG9hZE9yZGVyZWQocnMpOworICAgICAgICAgICAgICByZXM9dHJ1ZTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAodHJhbnNhY3Rpb24uZGJtYW5hZ2VyLmFjY2Vzc0NvbW1pdEJ1ZygpKSB7CisgICAgICAgICAgICAgIC8vIFNjaGVpbnQgbWFuY2htYWwgaW4gQWNjZXNzIHp1IHBhc3NpZXJlbi4uLi4KKyAgICAgICAgICAgICAgUHJlcGFyZWRTdGF0ZW1lbnQgc3RtdDE9dHJhbnNhY3Rpb24uZGlydHkoKSA/IHN0bXRHZXREaXJ0eSh0cmFuc2FjdGlvbi5kYnN0b3JlKCkpIDogc3RtdEdldENsZWFuKHRyYW5zYWN0aW9uLmRic3RvcmUoKSk7CisgICAgICAgICAgICAgIHN5bmNocm9uaXplZChzdG10MSkKKyAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGZpbGxQSFBLKHN0bXQxLCB0cmFuc2FjdGlvbik7CisgICAgICAgICAgICAgICAgUmVzdWx0U2V0IHJzMT1zdG10MS5leGVjdXRlUXVlcnkoKTsKKyAgICAgICAgICAgICAgICBpZiAocnMxLm5leHQoKSkgeworICAgICAgICAgICAgICAgICAgRGJnLnB3KCJTZWNvbmQgdHJ5IHRvIGxvYWQgb2JqZWN0IHJldHVybnMgYW4gb2JqZWN0OiAiK3RvU3RyaW5nKCkrIj8/PyIpOworICAgICAgICAgICAgICAgICAgbG9hZE9yZGVyZWQocnMxKTsKKyAgICAgICAgICAgICAgICAgIHJlcz10cnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByczEuY2xvc2UoKTsKKyAgICAgICAgICAgICAgICBzdG10MS5jbG9zZSgpOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgfSBmaW5hbGx5IHsKKyAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgIHJzLmNsb3NlKCk7CisgICAgICAgICAgICB9IGNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgICBEYmcucHcoZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgfQorICAgICAgICB9IGNhdGNoIChTUUxFeGNlcHRpb24gZSkgeworICAgICAgICAgIGhhbmRsZVNRTEV4Y2VwdGlvbihlLCBzdG10KTsKKyAgICAgICAgfQorICAgICAgfQorICAgICAgaWYgKHJlcykgbG9hZEJsb2JzKHRyYW5zYWN0aW9uKTsKKyAgICAgIHJldHVybiByZXM7CisgICAgfSBjYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKKyAgICAgIHRocm93IG5ldyBFeGNlcHRpb25CYWcoZSk7CisgICAgfQorICB9CisKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RhdGFGbG93L1NDUjM5OTUwL2V4cGVjdGVkLnhtbCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RhdGFGbG93L1NDUjM5OTUwL2V4cGVjdGVkLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOTUzZGQ3Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGF0YUZsb3cvU0NSMzk5NTAvZXhwZWN0ZWQueG1sCkBAIC0wLDAgKzEsMiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxwcm9ibGVtcyAvPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RhdGFGbG93L1NDUjM5OTUwL3NyYy9UZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kYXRhRmxvdy9TQ1IzOTk1MC9zcmMvVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMzMWQ3Y2YKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kYXRhRmxvdy9TQ1IzOTk1MC9zcmMvVGVzdC5qYXZhCkBAIC0wLDAgKzEsMTIgQEAKK2ludGVyZmFjZSBJbnRlciB7fQorCitjbGFzcyBJbXBsIGltcGxlbWVudHMgSW50ZXIge30KKworY2xhc3MgVGVzdEdlbmVyaWNzSW5zdGFuY2VvZjxJIGV4dGVuZHMgSW50ZXI+Cit7CisgICAgSSBtZW1iZXI7CisKKyAgICB7CisgICAgICBib29sZWFuIHRlc3QgPSBtZW1iZXIgaW5zdGFuY2VvZiBJbXBsOworICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RhdGFGbG93L1N0cmFuZ2VBcnJheUluZGV4T3V0T2ZCb3VuZHMvZXhwZWN0ZWQueG1sIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGF0YUZsb3cvU3RyYW5nZUFycmF5SW5kZXhPdXRPZkJvdW5kcy9leHBlY3RlZC54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDk1M2RkNwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RhdGFGbG93L1N0cmFuZ2VBcnJheUluZGV4T3V0T2ZCb3VuZHMvZXhwZWN0ZWQueG1sCkBAIC0wLDAgKzEsMiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxwcm9ibGVtcyAvPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RhdGFGbG93L1N0cmFuZ2VBcnJheUluZGV4T3V0T2ZCb3VuZHMvc3JjL1Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RhdGFGbG93L1N0cmFuZ2VBcnJheUluZGV4T3V0T2ZCb3VuZHMvc3JjL1Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYzAzZWVhCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGF0YUZsb3cvU3RyYW5nZUFycmF5SW5kZXhPdXRPZkJvdW5kcy9zcmMvVGVzdC5qYXZhCkBAIC0wLDAgKzEsMzQgQEAKK3B1YmxpYyBjbGFzcyBUZXN0IHsKKyAgcHVibGljIHZvaWQgZm9vKCkgeworICAgIFByb3BlcnRpZXMgcHJvcGVydGllcyA9IG5ldyBQcm9wZXJ0aWVzKCk7CisgICAgSW5wdXRTdHJlYW0gaW5TdHJlYW0gPSBudWxsOworICAgIHRyeSB7CisgICAgICByZW1vdmVDdXN0b21QcmVmaXhGcm9tUHJvcGVydGllcyhwcm9wZXJ0aWVzRmlsZSk7CisKKyAgICAgIGluU3RyZWFtID0gbmV3IEZpbGVJbnB1dFN0cmVhbShwcm9wZXJ0aWVzRmlsZSk7CisgICAgICBwcm9wZXJ0aWVzLmxvYWQoaW5TdHJlYW0pOworCisgICAgICBFbnVtZXJhdGlvbjw/PiBwcm9wZXJ0eU5hbWVzID0gcHJvcGVydGllcy5wcm9wZXJ0eU5hbWVzKCk7CisgICAgICB3aGlsZSAocHJvcGVydHlOYW1lcy5oYXNNb3JlRWxlbWVudHMoKSkgeworICAgICAgICBTdHJpbmcgbmFtZSA9IChTdHJpbmcpIHByb3BlcnR5TmFtZXMubmV4dEVsZW1lbnQoKTsKKworICAgICAgICBzZXRWYWx1ZShuYW1lLCBwcm9wZXJ0aWVzLmdldFByb3BlcnR5KG5hbWUpKTsKKyAgICAgIH0KKworICAgIH0gY2F0Y2ggKEZpbGVOb3RGb3VuZEV4Y2VwdGlvbiBlKSB7CisgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oZS5nZXRNZXNzYWdlKCkpOworICAgICAgU3lzdGVtLmV4aXQoLTEpOworICAgIH0KKyAgICBjYXRjaCAoSU9FeGNlcHRpb24gZSkgeworICAgICAgTE9HLmVycm9yKGUuZ2V0TWVzc2FnZSgpLCBlKTsKKyAgICB9IGZpbmFsbHkgeworICAgICAgaWYgKGluU3RyZWFtICE9IG51bGwpIHsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICBpblN0cmVhbS5jbG9zZSgpOworICAgICAgICB9IGNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgTE9HLmluZm8oZSk7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kYXRhRmxvdy9Td2l0Y2hFbnVtQ2FzZXMvZXhwZWN0ZWQueG1sIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGF0YUZsb3cvU3dpdGNoRW51bUNhc2VzL2V4cGVjdGVkLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNTkyY2NkCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGF0YUZsb3cvU3dpdGNoRW51bUNhc2VzL2V4cGVjdGVkLnhtbApAQCAtMCwwICsxLDggQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8cHJvYmxlbXM+CisgIDxwcm9ibGVtPgorICAgIDxmaWxlPlRlc3QuamF2YTwvZmlsZT4KKyAgICA8bGluZT43MjwvbGluZT4KKyAgICA8ZGVzY3JpcHRpb24+TWV0aG9kIGludm9jYXRpb24gJmx0O2NvZGUmZ3Q7Zm9vLmxlbmd0aCgpJmx0Oy9jb2RlJmd0OyBtYXkgcHJvZHVjZSAmbHQ7Y29kZSZndDtqYXZhLmxhbmcuTnVsbFBvaW50ZXJFeGNlcHRpb24mbHQ7L2NvZGUmZ3Q7PC9kZXNjcmlwdGlvbj4KKyAgPC9wcm9ibGVtPgorPC9wcm9ibGVtcz4KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RhdGFGbG93L1N3aXRjaEVudW1DYXNlcy9zcmMvVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGF0YUZsb3cvU3dpdGNoRW51bUNhc2VzL3NyYy9UZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGIyYjA1NQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RhdGFGbG93L1N3aXRjaEVudW1DYXNlcy9zcmMvVGVzdC5qYXZhCkBAIC0wLDAgKzEsNzggQEAKK3B1YmxpYyBjbGFzcyBUZXN0IHsKKyAgdm9pZCB3aXRoRGVmYXVsdFdpdGhvdXRCcmVhayhNeUVudW0gZSkgeworICAgIFN0cmluZyBmb28gPSBudWxsOworICAgIHN3aXRjaCAoZSkgeworICAgICAgY2FzZSBGT086CisgICAgICAgIGZvbyA9ICJmb28iOworICAgICAgY2FzZSBCQVI6CisgICAgICAgIGZvbyA9ICJiYXIiOworICAgICAgZGVmYXVsdDoKKyAgICAgICAgZm9vID0gImRlZmF1bHQiOworICAgIH0KKyAgICBpbnQgbCA9IGZvby5sZW5ndGgoKTsKKyAgfQorCisgIHZvaWQgd2l0aERlZmF1bHRXaXRoQnJlYWsoTXlFbnVtIGUpIHsKKyAgICBTdHJpbmcgZm9vID0gbnVsbDsKKyAgICBzd2l0Y2ggKGUpIHsKKyAgICAgIGNhc2UgRk9POgorICAgICAgICBmb28gPSAiZm9vIjsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEJBUjoKKyAgICAgICAgZm9vID0gImJhciI7CisgICAgICAgIGJyZWFrOworICAgICAgZGVmYXVsdDoKKyAgICAgICAgZm9vID0gImRlZmF1bHQiOworICAgIH0KKyAgICBpbnQgbCA9IGZvby5sZW5ndGgoKTsKKyAgfQorCisgIHZvaWQgd2l0aERlZmF1bHRXaXRob3V0QmFyKE15RW51bSBlKSB7CisgICAgU3RyaW5nIGZvbyA9IG51bGw7CisgICAgc3dpdGNoIChlKSB7CisgICAgICBjYXNlIEZPTzoKKyAgICAgICAgZm9vID0gImZvbyI7CisgICAgICAgIGJyZWFrOworICAgICAgZGVmYXVsdDoKKyAgICAgICAgZm9vID0gImRlZmF1bHQiOworICAgIH0KKyAgICBpbnQgbCA9IGZvby5sZW5ndGgoKTsKKyAgfQorCisgIHZvaWQgd2l0aG91dERlZmF1bHRXaXRoQnJlYWsoTXlFbnVtIGUpIHsKKyAgICBTdHJpbmcgZm9vID0gbnVsbDsKKyAgICBzd2l0Y2ggKGUpIHsKKyAgICAgIGNhc2UgRk9POgorICAgICAgICBmb28gPSAiZm9vIjsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEJBUjoKKyAgICAgICAgZm9vID0gImJhciI7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBpbnQgbCA9IGZvby5sZW5ndGgoKTsKKyAgfQorCisgIHZvaWQgd2l0aG91dERlZmF1bHRXaXRob3V0QnJlYWsoTXlFbnVtIGUpIHsKKyAgICBTdHJpbmcgZm9vID0gbnVsbDsKKyAgICBzd2l0Y2ggKGUpIHsKKyAgICAgIGNhc2UgRk9POgorICAgICAgICBmb28gPSAiZm9vIjsKKyAgICAgIGNhc2UgQkFSOgorICAgICAgICBmb28gPSAiYmFyIjsKKyAgICB9CisgICAgaW50IGwgPSBmb28ubGVuZ3RoKCk7CisgIH0KKworICB2b2lkIHdpdGhvdXREZWZhdWx0V2l0aG91dEJhcihNeUVudW0gZSkgeworICAgIFN0cmluZyBmb28gPSBudWxsOworICAgIHN3aXRjaCAoZSkgeworICAgICAgY2FzZSBGT086CisgICAgICAgIGZvbyA9ICJmb28iOworICAgIH0KKyAgICBpbnQgbCA9IGZvby5sZW5ndGgoKTsKKyAgfQorfQorCitlbnVtIE15RW51bSB7CisgIEZPTywgQkFSOworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RhdGFGbG93L1N3aXRjaFF1YWxpZmllclByb2R1Y2VzTlBFL2V4cGVjdGVkLnhtbCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RhdGFGbG93L1N3aXRjaFF1YWxpZmllclByb2R1Y2VzTlBFL2V4cGVjdGVkLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NWQ3NWRhCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGF0YUZsb3cvU3dpdGNoUXVhbGlmaWVyUHJvZHVjZXNOUEUvZXhwZWN0ZWQueG1sCkBAIC0wLDAgKzEsOCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxwcm9ibGVtcz4KKzxwcm9ibGVtPgorICA8ZmlsZT5UZXN0LmphdmE8L2ZpbGU+CisgIDxsaW5lPjEwPC9saW5lPgorICA8ZGVzY3JpcHRpb24+RGVyZWZlcmVuY2Ugb2YgJ2dldEUoKScgbWF5IHByb2R1Y2UgJ051bGxQb2ludGVyRXhjZXB0aW9uJzwvZGVzY3JpcHRpb24+Cis8L3Byb2JsZW0+Cis8L3Byb2JsZW1zPgpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGF0YUZsb3cvU3dpdGNoUXVhbGlmaWVyUHJvZHVjZXNOUEUvc3JjL1Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RhdGFGbG93L1N3aXRjaFF1YWxpZmllclByb2R1Y2VzTlBFL3NyYy9UZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjAxMDVkMAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RhdGFGbG93L1N3aXRjaFF1YWxpZmllclByb2R1Y2VzTlBFL3NyYy9UZXN0LmphdmEKQEAgLTAsMCArMSwxNSBAQAoraW1wb3J0IG9yZy5qZXRicmFpbnMuYW5ub3RhdGlvbnMuTnVsbGFibGU7CisKK3B1YmxpYyBjbGFzcyBUZXN0IHsKKyAgICBlbnVtIEUgeyBBLCBCIH0KKworICAgIEBOdWxsYWJsZQorICAgIHN0YXRpYyBFIGdldEUoKSB7IHJldHVybiBudWxsOyB9CisKKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisgICAgICAgIHN3aXRjaCAoZ2V0RSgpKSB7ICAvLyA8PDwgc2hvdWxkIGJlIGhpZ2hsaWdodGVkIGFzIHBvdGVudGlhbCBOUEUKKyAgICAgICAgICAgIGNhc2UgQToKKyAgICAgICAgICAgIGNhc2UgQjoKKyAgICAgICAgfQorICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kYXRhRmxvdy9UcnlXaXRoUmVzb3VyY2VzSW5zdGFuY2VPZi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGF0YUZsb3cvVHJ5V2l0aFJlc291cmNlc0luc3RhbmNlT2YuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMmFjNGE4Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGF0YUZsb3cvVHJ5V2l0aFJlc291cmNlc0luc3RhbmNlT2YuamF2YQpAQCAtMCwwICsxLDMwIEBACitjbGFzcyBUZXN0IHsKKyAgc3RhdGljIGNsYXNzIFJlc291cmNlZnVsRXhjZXB0aW9uMSBleHRlbmRzIEV4Y2VwdGlvbiB7IH0KKyAgc3RhdGljIGNsYXNzIFJlc291cmNlZnVsRXhjZXB0aW9uMiBleHRlbmRzIEV4Y2VwdGlvbiB7IH0KKyAgc3RhdGljIGNsYXNzIFJlc291cmNlZnVsRXhjZXB0aW9uMyBleHRlbmRzIEV4Y2VwdGlvbiB7IH0KKworICBzdGF0aWMgY2xhc3MgRXhjZXB0aW9uYWxSZXNvdXJjZSBpbXBsZW1lbnRzIEF1dG9DbG9zZWFibGUgeworICAgIEBPdmVycmlkZSBwdWJsaWMgdm9pZCBjbG9zZSgpIHRocm93cyBSZXNvdXJjZWZ1bEV4Y2VwdGlvbjEgeyB9CisgIH0KKworICBFeGNlcHRpb25hbFJlc291cmNlIHByb3ZpZGVFeGNlcHRpb25hbFJlc291cmNlKCkgdGhyb3dzIFJlc291cmNlZnVsRXhjZXB0aW9uMiB7CisgICAgcmV0dXJuIG5ldyBFeGNlcHRpb25hbFJlc291cmNlKCk7CisgIH0KKworICB2b2lkIG0oKSB7CisgICAgdHJ5IChFeGNlcHRpb25hbFJlc291cmNlIHIgPSBwcm92aWRlRXhjZXB0aW9uYWxSZXNvdXJjZSgpKSB7CisgICAgICBTeXN0ZW0ub3V0LnByaW50bG4ocik7CisgICAgfQorICAgIGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgICAgaWYgKGUgaW5zdGFuY2VvZiBSZXNvdXJjZWZ1bEV4Y2VwdGlvbjEpIHsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIxIik7CisgICAgICB9CisgICAgICBlbHNlIGlmIChlIGluc3RhbmNlb2YgUmVzb3VyY2VmdWxFeGNlcHRpb24yKSB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiMiIpOworICAgICAgfQorICAgICAgZWxzZSBpZiAoPHdhcm5pbmcgZGVzY3I9IkNvbmRpdGlvbiAnZSBpbnN0YW5jZW9mIFJlc291cmNlZnVsRXhjZXB0aW9uMycgaXMgYWx3YXlzICdmYWxzZSciPmUgaW5zdGFuY2VvZiBSZXNvdXJjZWZ1bEV4Y2VwdGlvbjM8L3dhcm5pbmc+KSB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiMyIpOworICAgICAgfQorICAgIH0KKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RhdGFGbG93L1RyeVdpdGhSZXNvdXJjZXNOdWxsYWJpbGl0eS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGF0YUZsb3cvVHJ5V2l0aFJlc291cmNlc051bGxhYmlsaXR5LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODA0MzVkZgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RhdGFGbG93L1RyeVdpdGhSZXNvdXJjZXNOdWxsYWJpbGl0eS5qYXZhCkBAIC0wLDAgKzEsMjIgQEAKK2NsYXNzIFRlc3QgeworICBzdGF0aWMgY2xhc3MgTXlSZXNvdXJjZSBpbXBsZW1lbnRzIEF1dG9DbG9zZWFibGUgeworICAgIEBPdmVycmlkZSBwdWJsaWMgdm9pZCBjbG9zZSgpIHsgfQorICB9CisKKyAgaW50ZXJmYWNlIE15UmVzb3VyY2VQcm92aWRlciB7CisgICAgTXlSZXNvdXJjZSBnZXRSZXNvdXJjZSgpOworICB9CisKKyAgdm9pZCBtMSgpIHRocm93cyBFeGNlcHRpb24geworICAgIE15UmVzb3VyY2VQcm92aWRlciBwcm92aWRlciA9IG51bGw7CisgICAgdHJ5IChNeVJlc291cmNlIHIgPSA8d2FybmluZyBkZXNjcj0iTWV0aG9kIGludm9jYXRpb24gJ3Byb3ZpZGVyLmdldFJlc291cmNlKCknIG1heSBwcm9kdWNlICdqYXZhLmxhbmcuTnVsbFBvaW50ZXJFeGNlcHRpb24nIj5wcm92aWRlci5nZXRSZXNvdXJjZSgpPC93YXJuaW5nPikgeworICAgICAgU3lzdGVtLm91dC5wcmludGxuKHIpOworICAgIH0KKyAgfQorCisgIHZvaWQgbTIoKSB7CisgICAgdHJ5IChNeVJlc291cmNlIHIgPSBudWxsKSB7CisgICAgICBTeXN0ZW0ub3V0LnByaW50bG4ocik7CisgICAgfQorICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGF0YUZsb3cvWW9sZUJ1Zy9leHBlY3RlZC54bWwgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kYXRhRmxvdy9Zb2xlQnVnL2V4cGVjdGVkLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MTEzNjkxCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGF0YUZsb3cvWW9sZUJ1Zy9leHBlY3RlZC54bWwKQEAgLTAsMCArMSw4IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHByb2JsZW1zPgorICA8cHJvYmxlbT4KKyAgICA8ZmlsZT5UZXN0LmphdmE8L2ZpbGU+CisgICAgPGxpbmU+OTwvbGluZT4KKyAgICA8ZGVzY3JpcHRpb24+J2ZvbygpICE9IG51bGwnIGlzIGFsd2F5cyB0cnVlPC9kZXNjcmlwdGlvbj4KKyAgPC9wcm9ibGVtPgorPC9wcm9ibGVtcz4KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RhdGFGbG93L1lvbGVCdWcvc3JjL1Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RhdGFGbG93L1lvbGVCdWcvc3JjL1Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZTgzNzU2Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGF0YUZsb3cvWW9sZUJ1Zy9zcmMvVGVzdC5qYXZhCkBAIC0wLDAgKzEsMTEgQEAKK2ltcG9ydCBvcmcuamV0YnJhaW5zLmFubm90YXRpb25zLio7CitwdWJsaWMgY2xhc3MgVGVzdCB7CisgICAgQE5vdE51bGwKKyAgICBwdWJsaWMgT2JqZWN0IGZvbygpIHsKKyAgICAgICAgcmV0dXJuIG5ldyBPYmplY3QoKTsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBxcXEoKSB7CisgICAgICAgIGludCBjID0gZm9vKCkgIT0gbnVsbCA/IGZvbygpLmhhc2hDb2RlKCkgOiAwOworICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RhdGFGbG93L2FuZEVxL2V4cGVjdGVkLnhtbCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RhdGFGbG93L2FuZEVxL2V4cGVjdGVkLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MGViYzllCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGF0YUZsb3cvYW5kRXEvZXhwZWN0ZWQueG1sCkBAIC0wLDAgKzEsOCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxwcm9ibGVtcz4KKyAgPHByb2JsZW0+CisgICAgPGZpbGU+VGVzdC5qYXZhPC9maWxlPgorICAgIDxsaW5lPjQ8L2xpbmU+CisgICAgPGRlc2NyaXB0aW9uPnIgaXMgYWx3YXlzIHRydWU8L2Rlc2NyaXB0aW9uPgorICA8L3Byb2JsZW0+Cis8L3Byb2JsZW1zPgpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGF0YUZsb3cvYW5kRXEvc3JjL1Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RhdGFGbG93L2FuZEVxL3NyYy9UZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODkxOWYxNQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RhdGFGbG93L2FuZEVxL3NyYy9UZXN0LmphdmEKQEAgLTAsMCArMSw4IEBACitwdWJsaWMgY2xhc3MgVGVzdCB7CisgIHB1YmxpYyB2b2lkIGZvbyhib29sZWFuIHgsIGJvb2xlYW4geSwgYm9vbGVhbiB6KSB7CisgICAgYm9vbGVhbiByID0gdHJ1ZTsKKyAgICByICY9IHg7CisgICAgciAmPSB5OworICAgIHIgJj0gejsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RhdGFGbG93L2F1dG9ib3hpbmcvZXhwZWN0ZWQueG1sIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGF0YUZsb3cvYXV0b2JveGluZy9leHBlY3RlZC54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDdkNjhlNQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RhdGFGbG93L2F1dG9ib3hpbmcvZXhwZWN0ZWQueG1sCkBAIC0wLDAgKzEsMzQ1IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHByb2JsZW1zPgorPHByb2JsZW0+CisgIDxmaWxlPlRlc3QuamF2YTwvZmlsZT4KKyAgPGxpbmU+NTwvbGluZT4KKyAgPG1ldGhvZD4KKyAgICA8bmFtZT52b2lkIGYoaW50IGspPC9uYW1lPgorICAgIDxkaXNwbGF5X25hbWU+ZihpbnQpPC9kaXNwbGF5X25hbWU+CisgICAgPHBhY2thZ2U+Jmx0O2RlZmF1bHQmZ3Q7PC9wYWNrYWdlPgorICAgIDxjbGFzcz4KKyAgICAgIDxuYW1lPkF1dG88L25hbWU+CisgICAgICA8ZGlzcGxheV9uYW1lPkF1dG88L2Rpc3BsYXlfbmFtZT4KKyAgICA8L2NsYXNzPgorICA8L21ldGhvZD4KKyAgPHByb2JsZW1fY2xhc3M+Q29uc3RhbnQgY29uZGl0aW9ucyAmYW1wOyBleGNlcHRpb25zPC9wcm9ibGVtX2NsYXNzPgorICA8ZGVzY3JpcHRpb24+Q29uZGl0aW9uICZsdDtjb2RlJmd0O2k9PWombHQ7L2NvZGUmZ3Q7IGlzIGFsd2F5cyAmbHQ7Y29kZSZndDt0cnVlJmx0Oy9jb2RlJmd0OzwvZGVzY3JpcHRpb24+Cis8L3Byb2JsZW0+CisKKworPHByb2JsZW0+CisgIDxmaWxlPlRlc3QuamF2YTwvZmlsZT4KKyAgPGxpbmU+OTwvbGluZT4KKyAgPG1ldGhvZD4KKyAgICA8bmFtZT52b2lkIGYoaW50IGspPC9uYW1lPgorICAgIDxkaXNwbGF5X25hbWU+ZihpbnQpPC9kaXNwbGF5X25hbWU+CisgICAgPHBhY2thZ2U+Jmx0O2RlZmF1bHQmZ3Q7PC9wYWNrYWdlPgorICAgIDxjbGFzcz4KKyAgICAgIDxuYW1lPkF1dG88L25hbWU+CisgICAgICA8ZGlzcGxheV9uYW1lPkF1dG88L2Rpc3BsYXlfbmFtZT4KKyAgICA8L2NsYXNzPgorICA8L21ldGhvZD4KKyAgPHByb2JsZW1fY2xhc3M+Q29uc3RhbnQgY29uZGl0aW9ucyAmYW1wOyBleGNlcHRpb25zPC9wcm9ibGVtX2NsYXNzPgorICA8ZGVzY3JpcHRpb24+Q29uZGl0aW9uICZsdDtjb2RlJmd0O2k9PWoyJmx0Oy9jb2RlJmd0OyBpcyBhbHdheXMgJmx0O2NvZGUmZ3Q7ZmFsc2UmbHQ7L2NvZGUmZ3Q7PC9kZXNjcmlwdGlvbj4KKzwvcHJvYmxlbT4KKworCis8cHJvYmxlbT4KKyAgPGZpbGU+VGVzdC5qYXZhPC9maWxlPgorICA8bGluZT4xMjwvbGluZT4KKyAgPG1ldGhvZD4KKyAgICA8bmFtZT52b2lkIGYoaW50IGspPC9uYW1lPgorICAgIDxkaXNwbGF5X25hbWU+ZihpbnQpPC9kaXNwbGF5X25hbWU+CisgICAgPHBhY2thZ2U+Jmx0O2RlZmF1bHQmZ3Q7PC9wYWNrYWdlPgorICAgIDxjbGFzcz4KKyAgICAgIDxuYW1lPkF1dG88L25hbWU+CisgICAgICA8ZGlzcGxheV9uYW1lPkF1dG88L2Rpc3BsYXlfbmFtZT4KKyAgICA8L2NsYXNzPgorICA8L21ldGhvZD4KKyAgPHByb2JsZW1fY2xhc3M+Q29uc3RhbnQgY29uZGl0aW9ucyAmYW1wOyBleGNlcHRpb25zPC9wcm9ibGVtX2NsYXNzPgorICA8ZGVzY3JpcHRpb24+Q29uZGl0aW9uICZsdDtjb2RlJmd0O2k9PTAmbHQ7L2NvZGUmZ3Q7IGlzIGFsd2F5cyAmbHQ7Y29kZSZndDt0cnVlJmx0Oy9jb2RlJmd0OzwvZGVzY3JpcHRpb24+Cis8L3Byb2JsZW0+CisKKworPHByb2JsZW0+CisgIDxmaWxlPlRlc3QuamF2YTwvZmlsZT4KKyAgPGxpbmU+MTU8L2xpbmU+CisgIDxtZXRob2Q+CisgICAgPG5hbWU+dm9pZCBmKGludCBrKTwvbmFtZT4KKyAgICA8ZGlzcGxheV9uYW1lPmYoaW50KTwvZGlzcGxheV9uYW1lPgorICAgIDxwYWNrYWdlPiZsdDtkZWZhdWx0Jmd0OzwvcGFja2FnZT4KKyAgICA8Y2xhc3M+CisgICAgICA8bmFtZT5BdXRvPC9uYW1lPgorICAgICAgPGRpc3BsYXlfbmFtZT5BdXRvPC9kaXNwbGF5X25hbWU+CisgICAgPC9jbGFzcz4KKyAgPC9tZXRob2Q+CisgIDxwcm9ibGVtX2NsYXNzPkNvbnN0YW50IGNvbmRpdGlvbnMgJmFtcDsgZXhjZXB0aW9uczwvcHJvYmxlbV9jbGFzcz4KKyAgPGRlc2NyaXB0aW9uPkNvbmRpdGlvbiAmbHQ7Y29kZSZndDtpPT0xJmx0Oy9jb2RlJmd0OyBpcyBhbHdheXMgJmx0O2NvZGUmZ3Q7ZmFsc2UmbHQ7L2NvZGUmZ3Q7PC9kZXNjcmlwdGlvbj4KKzwvcHJvYmxlbT4KKworICA8cHJvYmxlbT4KKyAgICA8ZmlsZT5UZXN0LmphdmE8L2ZpbGU+CisgICAgPGxpbmU+MjI8L2xpbmU+CisgICAgPG1ldGhvZD4KKyAgICAgIDxuYW1lPnZvaWQgZihpbnQgayk8L25hbWU+CisgICAgICA8ZGlzcGxheV9uYW1lPmYoaW50KTwvZGlzcGxheV9uYW1lPgorICAgICAgPHBhY2thZ2U+Jmx0O2RlZmF1bHQmZ3Q7PC9wYWNrYWdlPgorICAgICAgPGNsYXNzPgorICAgICAgICA8bmFtZT5BdXRvPC9uYW1lPgorICAgICAgICA8ZGlzcGxheV9uYW1lPkF1dG88L2Rpc3BsYXlfbmFtZT4KKyAgICAgIDwvY2xhc3M+CisgICAgPC9tZXRob2Q+CisgICAgPHByb2JsZW1fY2xhc3M+Q29uc3RhbnQgY29uZGl0aW9ucyAmYW1wOyBleGNlcHRpb25zPC9wcm9ibGVtX2NsYXNzPgorICAgIDxkZXNjcmlwdGlvbj5Db25kaXRpb24gJmx0O2NvZGUmZ3Q7YmlnMT09MzMzJmx0Oy9jb2RlJmd0OyBpcyBhbHdheXMgJmx0O2NvZGUmZ3Q7dHJ1ZSZsdDsvY29kZSZndDs8L2Rlc2NyaXB0aW9uPgorICA8L3Byb2JsZW0+CisKKworCisgIDxwcm9ibGVtPgorICAgIDxmaWxlPlRlc3QuamF2YTwvZmlsZT4KKyAgICA8bGluZT4yNDwvbGluZT4KKyAgICA8bWV0aG9kPgorICAgICAgPG5hbWU+dm9pZCBmKGludCBrKTwvbmFtZT4KKyAgICAgIDxkaXNwbGF5X25hbWU+ZihpbnQpPC9kaXNwbGF5X25hbWU+CisgICAgICA8cGFja2FnZT4mbHQ7ZGVmYXVsdCZndDs8L3BhY2thZ2U+CisgICAgICA8Y2xhc3M+CisgICAgICAgIDxuYW1lPkF1dG88L25hbWU+CisgICAgICAgIDxkaXNwbGF5X25hbWU+QXV0bzwvZGlzcGxheV9uYW1lPgorICAgICAgPC9jbGFzcz4KKyAgICA8L21ldGhvZD4KKyAgICA8cHJvYmxlbV9jbGFzcz5Db25zdGFudCBjb25kaXRpb25zICZhbXA7IGV4Y2VwdGlvbnM8L3Byb2JsZW1fY2xhc3M+CisgICAgPGRlc2NyaXB0aW9uPkNvbmRpdGlvbiAmbHQ7Y29kZSZndDszMzMgPT0gYmlnMiZsdDsvY29kZSZndDsgaXMgYWx3YXlzICZsdDtjb2RlJmd0O3RydWUmbHQ7L2NvZGUmZ3Q7PC9kZXNjcmlwdGlvbj4KKyAgPC9wcm9ibGVtPgorCisKKworICA8cHJvYmxlbT4KKyAgICA8ZmlsZT5UZXN0LmphdmE8L2ZpbGU+CisgICAgPGxpbmU+MjY8L2xpbmU+CisgICAgPG1ldGhvZD4KKyAgICAgIDxuYW1lPnZvaWQgZihpbnQgayk8L25hbWU+CisgICAgICA8ZGlzcGxheV9uYW1lPmYoaW50KTwvZGlzcGxheV9uYW1lPgorICAgICAgPHBhY2thZ2U+Jmx0O2RlZmF1bHQmZ3Q7PC9wYWNrYWdlPgorICAgICAgPGNsYXNzPgorICAgICAgICA8bmFtZT5BdXRvPC9uYW1lPgorICAgICAgICA8ZGlzcGxheV9uYW1lPkF1dG88L2Rpc3BsYXlfbmFtZT4KKyAgICAgIDwvY2xhc3M+CisgICAgPC9tZXRob2Q+CisgICAgPHByb2JsZW1fY2xhc3M+Q29uc3RhbnQgY29uZGl0aW9ucyAmYW1wOyBleGNlcHRpb25zPC9wcm9ibGVtX2NsYXNzPgorICAgIDxkZXNjcmlwdGlvbj5Db25kaXRpb24gJmx0O2NvZGUmZ3Q7MzMzPT0zMzMmbHQ7L2NvZGUmZ3Q7IGlzIGFsd2F5cyAmbHQ7Y29kZSZndDt0cnVlJmx0Oy9jb2RlJmd0OzwvZGVzY3JpcHRpb24+CisgIDwvcHJvYmxlbT4KKworCisKKyAgPHByb2JsZW0+CisgICAgPGZpbGU+VGVzdC5qYXZhPC9maWxlPgorICAgIDxsaW5lPjI4PC9saW5lPgorICAgIDxtZXRob2Q+CisgICAgICA8bmFtZT52b2lkIGYoaW50IGspPC9uYW1lPgorICAgICAgPGRpc3BsYXlfbmFtZT5mKGludCk8L2Rpc3BsYXlfbmFtZT4KKyAgICAgIDxwYWNrYWdlPiZsdDtkZWZhdWx0Jmd0OzwvcGFja2FnZT4KKyAgICAgIDxjbGFzcz4KKyAgICAgICAgPG5hbWU+QXV0bzwvbmFtZT4KKyAgICAgICAgPGRpc3BsYXlfbmFtZT5BdXRvPC9kaXNwbGF5X25hbWU+CisgICAgICA8L2NsYXNzPgorICAgIDwvbWV0aG9kPgorICAgIDxwcm9ibGVtX2NsYXNzPkNvbnN0YW50IGNvbmRpdGlvbnMgJmFtcDsgZXhjZXB0aW9uczwvcHJvYmxlbV9jbGFzcz4KKyAgICA8ZGVzY3JpcHRpb24+Q29uZGl0aW9uICZsdDtjb2RlJmd0O2JpZzE9PWJpZzImbHQ7L2NvZGUmZ3Q7IGlzIGFsd2F5cyAmbHQ7Y29kZSZndDtmYWxzZSZsdDsvY29kZSZndDs8L2Rlc2NyaXB0aW9uPgorICA8L3Byb2JsZW0+CisKKworCisgIDxwcm9ibGVtPgorICAgIDxmaWxlPlRlc3QuamF2YTwvZmlsZT4KKyAgICA8bGluZT4zMjwvbGluZT4KKyAgICA8bWV0aG9kPgorICAgICAgPG5hbWU+dm9pZCBmKGludCBrKTwvbmFtZT4KKyAgICAgIDxkaXNwbGF5X25hbWU+ZihpbnQpPC9kaXNwbGF5X25hbWU+CisgICAgICA8cGFja2FnZT4mbHQ7ZGVmYXVsdCZndDs8L3BhY2thZ2U+CisgICAgICA8Y2xhc3M+CisgICAgICAgIDxuYW1lPkF1dG88L25hbWU+CisgICAgICAgIDxkaXNwbGF5X25hbWU+QXV0bzwvZGlzcGxheV9uYW1lPgorICAgICAgPC9jbGFzcz4KKyAgICA8L21ldGhvZD4KKyAgICA8cHJvYmxlbV9jbGFzcz5Db25zdGFudCBjb25kaXRpb25zICZhbXA7IGV4Y2VwdGlvbnM8L3Byb2JsZW1fY2xhc3M+CisgICAgPGRlc2NyaXB0aW9uPkNvbmRpdGlvbiAmbHQ7Y29kZSZndDtwcmltPT1iaWcyJmx0Oy9jb2RlJmd0OyBpcyBhbHdheXMgJmx0O2NvZGUmZ3Q7dHJ1ZSZsdDsvY29kZSZndDs8L2Rlc2NyaXB0aW9uPgorICA8L3Byb2JsZW0+CisKKworCisgIDxwcm9ibGVtPgorICAgIDxmaWxlPlRlc3QuamF2YTwvZmlsZT4KKyAgICA8bGluZT4zNjwvbGluZT4KKyAgICA8bWV0aG9kPgorICAgICAgPG5hbWU+dm9pZCBmKGludCBrKTwvbmFtZT4KKyAgICAgIDxkaXNwbGF5X25hbWU+ZihpbnQpPC9kaXNwbGF5X25hbWU+CisgICAgICA8cGFja2FnZT4mbHQ7ZGVmYXVsdCZndDs8L3BhY2thZ2U+CisgICAgICA8Y2xhc3M+CisgICAgICAgIDxuYW1lPkF1dG88L25hbWU+CisgICAgICAgIDxkaXNwbGF5X25hbWU+QXV0bzwvZGlzcGxheV9uYW1lPgorICAgICAgPC9jbGFzcz4KKyAgICA8L21ldGhvZD4KKyAgICA8cHJvYmxlbV9jbGFzcz5Db25zdGFudCBjb25kaXRpb25zICZhbXA7IGV4Y2VwdGlvbnM8L3Byb2JsZW1fY2xhc3M+CisgICAgPGRlc2NyaXB0aW9uPkNvbmRpdGlvbiAmbHQ7Y29kZSZndDtiaWcxID09IDAmbHQ7L2NvZGUmZ3Q7IGlzIGFsd2F5cyAmbHQ7Y29kZSZndDtmYWxzZSZsdDsvY29kZSZndDs8L2Rlc2NyaXB0aW9uPgorICA8L3Byb2JsZW0+CisKKworCisgIDxwcm9ibGVtPgorICAgIDxmaWxlPlRlc3QuamF2YTwvZmlsZT4KKyAgICA8bGluZT4zOTwvbGluZT4KKyAgICA8bWV0aG9kPgorICAgICAgPG5hbWU+dm9pZCBmKGludCBrKTwvbmFtZT4KKyAgICAgIDxkaXNwbGF5X25hbWU+ZihpbnQpPC9kaXNwbGF5X25hbWU+CisgICAgICA8cGFja2FnZT4mbHQ7ZGVmYXVsdCZndDs8L3BhY2thZ2U+CisgICAgICA8Y2xhc3M+CisgICAgICAgIDxuYW1lPkF1dG88L25hbWU+CisgICAgICAgIDxkaXNwbGF5X25hbWU+QXV0bzwvZGlzcGxheV9uYW1lPgorICAgICAgPC9jbGFzcz4KKyAgICA8L21ldGhvZD4KKyAgICA8cHJvYmxlbV9jbGFzcz5Db25zdGFudCBjb25kaXRpb25zICZhbXA7IGV4Y2VwdGlvbnM8L3Byb2JsZW1fY2xhc3M+CisgICAgPGRlc2NyaXB0aW9uPkNvbmRpdGlvbiAmbHQ7Y29kZSZndDtiaWcxID09IDMzMiZsdDsvY29kZSZndDsgaXMgYWx3YXlzICZsdDtjb2RlJmd0O2ZhbHNlJmx0Oy9jb2RlJmd0OzwvZGVzY3JpcHRpb24+CisgIDwvcHJvYmxlbT4KKworCisKKyAgPHByb2JsZW0+CisgICAgPGZpbGU+VGVzdC5qYXZhPC9maWxlPgorICAgIDxsaW5lPjQ0PC9saW5lPgorICAgIDxtZXRob2Q+CisgICAgICA8bmFtZT52b2lkIGYoaW50IGspPC9uYW1lPgorICAgICAgPGRpc3BsYXlfbmFtZT5mKGludCk8L2Rpc3BsYXlfbmFtZT4KKyAgICAgIDxwYWNrYWdlPiZsdDtkZWZhdWx0Jmd0OzwvcGFja2FnZT4KKyAgICAgIDxjbGFzcz4KKyAgICAgICAgPG5hbWU+QXV0bzwvbmFtZT4KKyAgICAgICAgPGRpc3BsYXlfbmFtZT5BdXRvPC9kaXNwbGF5X25hbWU+CisgICAgICA8L2NsYXNzPgorICAgIDwvbWV0aG9kPgorICAgIDxwcm9ibGVtX2NsYXNzPkNvbnN0YW50IGNvbmRpdGlvbnMgJmFtcDsgZXhjZXB0aW9uczwvcHJvYmxlbV9jbGFzcz4KKyAgICA8ZGVzY3JpcHRpb24+Q29uZGl0aW9uICZsdDtjb2RlJmd0O2M9PTEyMzQmbHQ7L2NvZGUmZ3Q7IGlzIGFsd2F5cyAmbHQ7Y29kZSZndDt0cnVlJmx0Oy9jb2RlJmd0OzwvZGVzY3JpcHRpb24+CisgIDwvcHJvYmxlbT4KKworCisKKyAgPHByb2JsZW0+CisgICAgPGZpbGU+VGVzdC5qYXZhPC9maWxlPgorICAgIDxsaW5lPjQ3PC9saW5lPgorICAgIDxtZXRob2Q+CisgICAgICA8bmFtZT52b2lkIGYoaW50IGspPC9uYW1lPgorICAgICAgPGRpc3BsYXlfbmFtZT5mKGludCk8L2Rpc3BsYXlfbmFtZT4KKyAgICAgIDxwYWNrYWdlPiZsdDtkZWZhdWx0Jmd0OzwvcGFja2FnZT4KKyAgICAgIDxjbGFzcz4KKyAgICAgICAgPG5hbWU+QXV0bzwvbmFtZT4KKyAgICAgICAgPGRpc3BsYXlfbmFtZT5BdXRvPC9kaXNwbGF5X25hbWU+CisgICAgICA8L2NsYXNzPgorICAgIDwvbWV0aG9kPgorICAgIDxwcm9ibGVtX2NsYXNzPkNvbnN0YW50IGNvbmRpdGlvbnMgJmFtcDsgZXhjZXB0aW9uczwvcHJvYmxlbV9jbGFzcz4KKyAgICA8ZGVzY3JpcHRpb24+Q29uZGl0aW9uICZsdDtjb2RlJmd0O2M9PTEyNCZsdDsvY29kZSZndDsgaXMgYWx3YXlzICZsdDtjb2RlJmd0O2ZhbHNlJmx0Oy9jb2RlJmd0OzwvZGVzY3JpcHRpb24+CisgIDwvcHJvYmxlbT4KKworCisKKyAgPHByb2JsZW0+CisgICAgPGZpbGU+VGVzdC5qYXZhPC9maWxlPgorICAgIDxsaW5lPjUxPC9saW5lPgorICAgIDxtZXRob2Q+CisgICAgICA8bmFtZT52b2lkIGYoaW50IGspPC9uYW1lPgorICAgICAgPGRpc3BsYXlfbmFtZT5mKGludCk8L2Rpc3BsYXlfbmFtZT4KKyAgICAgIDxwYWNrYWdlPiZsdDtkZWZhdWx0Jmd0OzwvcGFja2FnZT4KKyAgICAgIDxjbGFzcz4KKyAgICAgICAgPG5hbWU+QXV0bzwvbmFtZT4KKyAgICAgICAgPGRpc3BsYXlfbmFtZT5BdXRvPC9kaXNwbGF5X25hbWU+CisgICAgICA8L2NsYXNzPgorICAgIDwvbWV0aG9kPgorICAgIDxwcm9ibGVtX2NsYXNzPkNvbnN0YW50IGNvbmRpdGlvbnMgJmFtcDsgZXhjZXB0aW9uczwvcHJvYmxlbV9jbGFzcz4KKyAgICA8ZGVzY3JpcHRpb24+Q29uZGl0aW9uICZsdDtjb2RlJmd0O2M9PTEyMzQmbHQ7L2NvZGUmZ3Q7IGlzIGFsd2F5cyAmbHQ7Y29kZSZndDtmYWxzZSZsdDsvY29kZSZndDs8L2Rlc2NyaXB0aW9uPgorICA8L3Byb2JsZW0+CisKKworCisgIDxwcm9ibGVtPgorICAgIDxmaWxlPlRlc3QuamF2YTwvZmlsZT4KKyAgICA8bGluZT41NDwvbGluZT4KKyAgICA8bWV0aG9kPgorICAgICAgPG5hbWU+dm9pZCBmKGludCBrKTwvbmFtZT4KKyAgICAgIDxkaXNwbGF5X25hbWU+ZihpbnQpPC9kaXNwbGF5X25hbWU+CisgICAgICA8cGFja2FnZT4mbHQ7ZGVmYXVsdCZndDs8L3BhY2thZ2U+CisgICAgICA8Y2xhc3M+CisgICAgICAgIDxuYW1lPkF1dG88L25hbWU+CisgICAgICAgIDxkaXNwbGF5X25hbWU+QXV0bzwvZGlzcGxheV9uYW1lPgorICAgICAgPC9jbGFzcz4KKyAgICA8L21ldGhvZD4KKyAgICA8cHJvYmxlbV9jbGFzcz5Db25zdGFudCBjb25kaXRpb25zICZhbXA7IGV4Y2VwdGlvbnM8L3Byb2JsZW1fY2xhc3M+CisgICAgPGRlc2NyaXB0aW9uPkNvbmRpdGlvbiAmbHQ7Y29kZSZndDtjPT1jJmx0Oy9jb2RlJmd0OyBpcyBhbHdheXMgJmx0O2NvZGUmZ3Q7dHJ1ZSZsdDsvY29kZSZndDs8L2Rlc2NyaXB0aW9uPgorICA8L3Byb2JsZW0+CisKKworCisgIDxwcm9ibGVtPgorICAgIDxmaWxlPlRlc3QuamF2YTwvZmlsZT4KKyAgICA8bGluZT41ODwvbGluZT4KKyAgICA8bWV0aG9kPgorICAgICAgPG5hbWU+dm9pZCBmKGludCBrKTwvbmFtZT4KKyAgICAgIDxkaXNwbGF5X25hbWU+ZihpbnQpPC9kaXNwbGF5X25hbWU+CisgICAgICA8cGFja2FnZT4mbHQ7ZGVmYXVsdCZndDs8L3BhY2thZ2U+CisgICAgICA8Y2xhc3M+CisgICAgICAgIDxuYW1lPkF1dG88L25hbWU+CisgICAgICAgIDxkaXNwbGF5X25hbWU+QXV0bzwvZGlzcGxheV9uYW1lPgorICAgICAgPC9jbGFzcz4KKyAgICA8L21ldGhvZD4KKyAgICA8cHJvYmxlbV9jbGFzcz5Db25zdGFudCBjb25kaXRpb25zICZhbXA7IGV4Y2VwdGlvbnM8L3Byb2JsZW1fY2xhc3M+CisgICAgPGRlc2NyaXB0aW9uPkNvbmRpdGlvbiAmbHQ7Y29kZSZndDtjPT1jMiZsdDsvY29kZSZndDsgaXMgYWx3YXlzICZsdDtjb2RlJmd0O3RydWUmbHQ7L2NvZGUmZ3Q7PC9kZXNjcmlwdGlvbj4KKyAgPC9wcm9ibGVtPgorCisgIDxwcm9ibGVtPgorICAgIDxmaWxlPlRlc3QuamF2YTwvZmlsZT4KKyAgICA8bGluZT43MzwvbGluZT4KKyAgICA8bWV0aG9kPgorICAgICAgPG5hbWU+dm9pZCBjYW5CZVN0YXRpYyhpbnQgeCk8L25hbWU+CisgICAgICA8ZGlzcGxheV9uYW1lPmNhbkJlU3RhdGljKGludCk8L2Rpc3BsYXlfbmFtZT4KKyAgICAgIDxwYWNrYWdlPiZsdDtkZWZhdWx0Jmd0OzwvcGFja2FnZT4KKyAgICAgIDxjbGFzcz4KKyAgICAgICAgPG5hbWU+YWFhPC9uYW1lPgorICAgICAgICA8ZGlzcGxheV9uYW1lPmFhYTwvZGlzcGxheV9uYW1lPgorICAgICAgPC9jbGFzcz4KKyAgICA8L21ldGhvZD4KKyAgICA8cHJvYmxlbV9jbGFzcz5Db25zdGFudCBjb25kaXRpb25zICZhbXA7IGV4Y2VwdGlvbnM8L3Byb2JsZW1fY2xhc3M+CisgICAgPGRlc2NyaXB0aW9uPkNvbmRpdGlvbiAmbHQ7Y29kZSZndDthID09IDUmbHQ7L2NvZGUmZ3Q7IGlzIGFsd2F5cyAmbHQ7Y29kZSZndDtmYWxzZSZsdDsvY29kZSZndDs8L2Rlc2NyaXB0aW9uPgorICA8L3Byb2JsZW0+CisgIDxwcm9ibGVtPgorICAgIDxmaWxlPlRlc3QuamF2YTwvZmlsZT4KKyAgICA8bGluZT44MzwvbGluZT4KKyAgICA8bWV0aG9kPgorICAgICAgPG5hbWU+dm9pZCBmKGludCBwKTwvbmFtZT4KKyAgICAgIDxkaXNwbGF5X25hbWU+ZihpbnQpPC9kaXNwbGF5X25hbWU+CisgICAgICA8cGFja2FnZT4mbHQ7ZGVmYXVsdCZndDs8L3BhY2thZ2U+CisgICAgICA8Y2xhc3M+CisgICAgICAgIDxuYW1lPmFhYTwvbmFtZT4KKyAgICAgICAgPGRpc3BsYXlfbmFtZT5hYWE8L2Rpc3BsYXlfbmFtZT4KKyAgICAgIDwvY2xhc3M+CisgICAgPC9tZXRob2Q+CisgICAgPHByb2JsZW1fY2xhc3M+Q29uc3RhbnQgY29uZGl0aW9ucyAmYW1wOyBleGNlcHRpb25zPC9wcm9ibGVtX2NsYXNzPgorICAgIDxkZXNjcmlwdGlvbj5Db25kaXRpb24gJmx0O2NvZGUmZ3Q7aTEgPT0gaTImbHQ7L2NvZGUmZ3Q7IGlzIGFsd2F5cyAmbHQ7Y29kZSZndDt0cnVlJmx0Oy9jb2RlJmd0OzwvZGVzY3JpcHRpb24+CisgIDwvcHJvYmxlbT4KKworICA8IS0tCisgIDxwcm9ibGVtPgorICAgIDxmaWxlPlRlc3QuamF2YTwvZmlsZT4KKyAgICA8bGluZT4xMDM8L2xpbmU+CisgICAgPGRlc2NyaXB0aW9uPidyPT1yMScgaXMgYWx3YXlzIGZhbHNlPC9kZXNjcmlwdGlvbj4KKyAgPC9wcm9ibGVtPgorICAtLT4KKworICA8cHJvYmxlbT4KKyAgICA8ZmlsZT5UZXN0LmphdmE8L2ZpbGU+CisgICAgPGxpbmU+MTA3PC9saW5lPgorICAgIDxkZXNjcmlwdGlvbj4ncjI9PXIzJyBpcyBhbHdheXMgZmFsc2U8L2Rlc2NyaXB0aW9uPgorICA8L3Byb2JsZW0+CisKKworICA8IS0tCisgIDxwcm9ibGVtPgorICAgIDxmaWxlPlRlc3QuamF2YTwvZmlsZT4KKyAgICA8bGluZT4xMTI8L2xpbmU+CisgICAgPGRlc2NyaXB0aW9uPidmcj09ZnIxJyBpcyBhbHdheXMgZmFsc2U8L2Rlc2NyaXB0aW9uPgorICA8L3Byb2JsZW0+CisgIC0tPgorCisKKyAgPHByb2JsZW0+CisgICAgPGZpbGU+VGVzdC5qYXZhPC9maWxlPgorICAgIDxsaW5lPjExNjwvbGluZT4KKyAgICA8ZGVzY3JpcHRpb24+J2ZyMj09ZnIzJyBpcyBhbHdheXMgZmFsc2U8L2Rlc2NyaXB0aW9uPgorICA8L3Byb2JsZW0+CisKKzwvcHJvYmxlbXM+CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kYXRhRmxvdy9hdXRvYm94aW5nL3NyYy9UZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kYXRhRmxvdy9hdXRvYm94aW5nL3NyYy9UZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzgxMzlkZQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RhdGFGbG93L2F1dG9ib3hpbmcvc3JjL1Rlc3QuamF2YQpAQCAtMCwwICsxLDExOSBAQAorcHVibGljIGNsYXNzIEF1dG8geworICAgIHZvaWQgZihpbnQgaykgeworICAgICAgICBJbnRlZ2VyIGkgPSAwOworICAgICAgICBJbnRlZ2VyIGo9MDsgICAgCisgICAgICAgIGlmIChpPT1qKSB7CisKKyAgICAgICAgfQorICAgICAgICBJbnRlZ2VyIGoyID0gMTsKKyAgICAgICAgaWYgKGk9PWoyKSB7CisgICAgICAgICAgICAKKyAgICAgICAgfQorICAgICAgICBpZiAoaT09MCkgeworICAgICAgICAgICAgCisgICAgICAgIH0KKyAgICAgICAgaWYgKGk9PTEpIHsKKyAgICAgICAgICAgIAorICAgICAgICB9CisKKyAgICAgICAgLy8vLy8vLy8vLy8vLy8vLy8vCisgICAgICAgIEludGVnZXIgYmlnMSA9IDMzMzsKKyAgICAgICAgSW50ZWdlciBiaWcyPSAgMzMzOworICAgICAgICBpZiAoYmlnMT09MzMzKSB7CisgICAgICAgIH0KKyAgICAgICAgaWYgKDMzMyA9PSBiaWcyKSB7CisgICAgICAgIH0KKyAgICAgICAgaWYgKDMzMz09MzMzKSB7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGJpZzE9PWJpZzIpIHsKKworICAgICAgICB9CisgICAgICAgIGludCBwcmltID0gYmlnMTsKKyAgICAgICAgaWYgKHByaW09PWJpZzIpIHsKKworICAgICAgICB9CisKKyAgICAgICAgaWYgKGJpZzEgPT0gMCkgeworCisgICAgICAgIH0KKyAgICAgICAgaWYgKGJpZzEgPT0gMzMyKSB7CisKKyAgICAgICAgfQorCisgICAgICAgIENoYXJhY3RlciBjID0gMTIzNDsKKyAgICAgICAgaWYgKGM9PTEyMzQpIHsKKworICAgICAgICB9CisgICAgICAgIGlmIChjPT0xMjQpIHsKKworICAgICAgICB9CisgICAgICAgIGMgPSAxOworICAgICAgICBpZiAoYz09MTIzNCkgeworCisgICAgICAgIH0KKyAgICAgICAgaWYgKGM9PWMpIHsKKworICAgICAgICB9CisgICAgICAgIENoYXJhY3RlciBjMiA9IDE7CisgICAgICAgIGlmIChjPT1jMikgeworCisgICAgICAgIH0KKyAgICB9Cit9CitjbGFzcyBhYWEgeworICBpbnQgYTsKKyAgaW50IGI7CisgIHZvaWQgY2FuQmVTdGF0aWMoaW50IHgpIHsKKyAgICAgIGZvciAoaW50IGk9MDtpPDEwO2krKykgeworICAgICAgIGEgPSBpOworICAgICAgfQorCisgICAgICBhID0gNDsKKworICAgIGlmIChhID09IDUpIHsKKyAgICB9CisgIH0KKworCisgICAgdm9pZCBmKGludCBwKSB7CisgICAgICAgIHsKKyAgICAgICAgICAgIGludCBpID0gMTsKKyAgICAgICAgICAgIEludGVnZXIgaTEgPSBpOworICAgICAgICAgICAgSW50ZWdlciBpMiA9IGk7CisgICAgICAgICAgICBpZiAoaTEgPT0gaTIpIHsKKworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHsKKyAgICAgICAgICAgIGludCBpID0gcDsKKyAgICAgICAgICAgIEludGVnZXIgaTEgPSBpOworICAgICAgICAgICAgSW50ZWdlciBpMiA9IGk7CisgICAgICAgICAgICBpZiAoaTEgPT0gaTIpIHsKKworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCit9CitjbGFzcyBVc2VzRG91YmxlQW5kRmxvYXQgeworICAgIHZvaWQgZigpIHsKKyAgICAgICAgZG91YmxlIGRkID0gMTAuMDsKKyAgICAgICAgRG91YmxlIHIgPSBkZDsKKyAgICAgICAgRG91YmxlIHIxID0gZGQ7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiKHI9PXIxKSBpcyAiKyhyPT1yMSkpOworCisgICAgICAgIERvdWJsZSByMiA9IDEwLjA7CisgICAgICAgIERvdWJsZSByMyA9IDEwLjA7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiKHIyPT1yMykgaXMgIisocjI9PXIzKSk7CisKKyAgICAgICAgZmxvYXQgZmQgPSAxMC4wZjsKKyAgICAgICAgRmxvYXQgZnIgPSBmZDsKKyAgICAgICAgRmxvYXQgZnIxID0gZmQ7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiKHI9PXIxKSBpcyAiKyhmcj09ZnIxKSk7CisKKyAgICAgICAgRmxvYXQgZnIyID0gMTAuMGY7CisgICAgICAgIEZsb2F0IGZyMyA9IDEwLjBmOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIihyMj09cjMpIGlzICIrKGZyMj09ZnIzKSk7CisgICAgCisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RhdGFGbG93L2JveGluZ0Jvb2xlYW4vZXhwZWN0ZWQueG1sIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGF0YUZsb3cvYm94aW5nQm9vbGVhbi9leHBlY3RlZC54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDA0ZWEyOAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RhdGFGbG93L2JveGluZ0Jvb2xlYW4vZXhwZWN0ZWQueG1sCkBAIC0wLDAgKzEsMzkgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8cHJvYmxlbXM+CisgIDxwcm9ibGVtPgorICAgIDxmaWxlPlRlc3QuamF2YTwvZmlsZT4KKyAgICA8bGluZT4xNDwvbGluZT4KKyAgICA8ZGVzY3JpcHRpb24+Q29uZGl0aW9uICZsdDtjb2RlJmd0O2MmbHQ7L2NvZGUmZ3Q7IGlzIGFsd2F5cyAmbHQ7Y29kZSZndDtmYWxzZSZsdDsvY29kZSZndDsuPC9kZXNjcmlwdGlvbj4KKyAgPC9wcm9ibGVtPgorCisgIDxwcm9ibGVtPgorICAgIDxmaWxlPlRlc3QuamF2YTwvZmlsZT4KKyAgICA8bGluZT4yMDwvbGluZT4KKyAgICA8ZGVzY3JpcHRpb24+Q29uZGl0aW9uICZsdDtjb2RlJmd0O2MmbHQ7L2NvZGUmZ3Q7IGlzIGFsd2F5cyAmbHQ7Y29kZSZndDt0cnVlJmx0Oy9jb2RlJmd0Oy48L2Rlc2NyaXB0aW9uPgorICA8L3Byb2JsZW0+CisKKyAgPHByb2JsZW0+CisgICAgPGZpbGU+VGVzdC5qYXZhPC9maWxlPgorICAgIDxsaW5lPjMzPC9saW5lPgorICAgIDxkZXNjcmlwdGlvbj5Db25kaXRpb24gJmx0O2NvZGUmZ3Q7byZsdDsvY29kZSZndDsgaXMgYWx3YXlzICZsdDtjb2RlJmd0O3RydWUmbHQ7L2NvZGUmZ3Q7LjwvZGVzY3JpcHRpb24+CisgIDwvcHJvYmxlbT4KKworICA8cHJvYmxlbT4KKyAgICA8ZmlsZT5UZXN0LmphdmE8L2ZpbGU+CisgICAgPGxpbmU+Mzk8L2xpbmU+CisgICAgPGRlc2NyaXB0aW9uPkNvbmRpdGlvbiAmbHQ7Y29kZSZndDtvJmx0Oy9jb2RlJmd0OyBpcyBhbHdheXMgJmx0O2NvZGUmZ3Q7ZmFsc2UmbHQ7L2NvZGUmZ3Q7LjwvZGVzY3JpcHRpb24+CisgIDwvcHJvYmxlbT4KKworICA8cHJvYmxlbT4KKyAgICA8ZmlsZT5UZXN0LmphdmE8L2ZpbGU+CisgICAgPGxpbmU+NDU8L2xpbmU+CisgICAgPGRlc2NyaXB0aW9uPkNvbmRpdGlvbiAmbHQ7Y29kZSZndDtvJmx0Oy9jb2RlJmd0OyBpcyBhbHdheXMgJmx0O2NvZGUmZ3Q7dHJ1ZSZsdDsvY29kZSZndDsuPC9kZXNjcmlwdGlvbj4KKyAgPC9wcm9ibGVtPgorCisgIDxwcm9ibGVtPgorICAgIDxmaWxlPlRlc3QuamF2YTwvZmlsZT4KKyAgICA8bGluZT41MTwvbGluZT4KKyAgICA8ZGVzY3JpcHRpb24+Q29uZGl0aW9uICZsdDtjb2RlJmd0O28mbHQ7L2NvZGUmZ3Q7IGF0IHRoZSBsZWZ0IHNpZGUgb2YgYXNzaWdubWVudCBleHByZXNzaW9uIGlzIGFsd2F5cyAmbHQ7Y29kZSZndDtmYWxzZSZsdDsvY29kZSZndDsuIENhbiBiZSBzaW1wbGlmaWVkIHRvIG5vcm1hbCBhc3NpZ25tZW50LjwvZGVzY3JpcHRpb24+CisgIDwvcHJvYmxlbT4KKworPC9wcm9ibGVtcz4KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RhdGFGbG93L2JveGluZ0Jvb2xlYW4vc3JjL1Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RhdGFGbG93L2JveGluZ0Jvb2xlYW4vc3JjL1Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNWUzOGVkCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGF0YUZsb3cvYm94aW5nQm9vbGVhbi9zcmMvVGVzdC5qYXZhCkBAIC0wLDAgKzEsNTUgQEAKK3B1YmxpYyBjbGFzcyBTIHsKKyAgICB2b2lkIGYoQm9vbGVhbiBvdmVycmlkZSkgeworCisgICAgICAgIGlmIChvdmVycmlkZSA9PSBudWxsKSB7CisgICAgICAgICAgICAvL2RvU29tZXRoaW5nKCk7CisgICAgICAgIH0gZWxzZSBpZiAob3ZlcnJpZGUpIHsgICAgLy8gYWx3YXlzIGZhbHNlPworICAgICAgICAgICAgLy9kb092ZXJyaWRlKCk7CisgICAgICAgIH0KKworICAgIH0KKyAgICAgICAgcHVibGljIHZvaWQgdGUwKGJvb2xlYW4gYil7CisgICAgICAgICAgICBCb29sZWFuIGMgPSBmYWxzZTsKKyAgICAvLyAgICAgICAgaWYgKGIpIGMgPSB0cnVlOworICAgICAgICAgICAgaWYgKGMpIHsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBwdWJsaWMgdm9pZCB0ZTEoYm9vbGVhbiBiKXsKKyAgICAgICAgICAgIEJvb2xlYW4gYyA9IHRydWU7CisgICAgLy8gICAgICAgIGlmIChiKSBjID0gdHJ1ZTsKKyAgICAgICAgICAgIGlmIChjKSB7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcHVibGljIHZvaWQgdGUyKGJvb2xlYW4gYil7CisgICAgICAgICAgICBCb29sZWFuIGMgPSBmYWxzZTsKKyAgICAgICAgICAgIGlmIChiKSBjID0gdHJ1ZTsKKyAgICAgICAgICAgIGlmIChjKSB7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgIHB1YmxpYyB2b2lkIHRlMyhib29sZWFuIGIpeworICAgICAgICBCb29sZWFuIGMgPSBCb29sZWFuLkZBTFNFOworICAgICAgICBib29sZWFuIG8gPSAhYzsKKyAgICAgICAgaWYgKG8pIHsKKyAgICAgICAgfQorICAgIH0KKyAgICBwdWJsaWMgdm9pZCB0ZTQoYm9vbGVhbiBiKXsKKyAgICAgICAgQm9vbGVhbiBjID0gQm9vbGVhbi5GQUxTRTsKKyAgICAgICAgYm9vbGVhbiBvID0gYzsKKyAgICAgICAgaWYgKG8pIHsKKyAgICAgICAgfQorICAgIH0KKyAgICBwdWJsaWMgdm9pZCB0ZTUoYm9vbGVhbiBiKXsKKyAgICAgICAgQm9vbGVhbiBjID0gQm9vbGVhbi5UUlVFOworICAgICAgICBib29sZWFuIG8gPSBifHxjOworICAgICAgICBpZiAobykgeworICAgICAgICB9CisgICAgfQorICAgIHB1YmxpYyB2b2lkIHRlNihib29sZWFuIGIpeworICAgICAgICBCb29sZWFuIGMgPSBCb29sZWFuLlRSVUU7CisgICAgICAgIGJvb2xlYW4gbyA9ICFjOworICAgICAgICBvIHw9IGMmYjsKKyAgICAgICAgaWYgKG8pIHsKKyAgICAgICAgfQorICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RhdGFGbG93L2Nhc2VBbmROcGUvZXhwZWN0ZWQueG1sIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGF0YUZsb3cvY2FzZUFuZE5wZS9leHBlY3RlZC54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTgzZWY3YgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RhdGFGbG93L2Nhc2VBbmROcGUvZXhwZWN0ZWQueG1sCkBAIC0wLDAgKzEsMjQgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8cHJvYmxlbXM+CisgIDxwcm9ibGVtPgorICAgIDxmaWxlPkNhc2VBbmROcGUuamF2YTwvZmlsZT4KKyAgICA8bGluZT43OTwvbGluZT4KKyAgICA8ZGVzY3JpcHRpb24+Q29uZGl0aW9uICdhICE9IG51bGwnIGlzIGFsd2F5cyB0cnVlPC9kZXNjcmlwdGlvbj4KKyAgPC9wcm9ibGVtPgorICA8cHJvYmxlbT4KKyAgICA8ZmlsZT5DYXNlQW5kTnBlLmphdmE8L2ZpbGU+CisgICAgPGxpbmU+MjY8L2xpbmU+CisgICAgPGRlc2NyaXB0aW9uPk1ldGhvZCBpbnZvY2F0aW9uICdvLmVxdWFscyhvKScgbWF5IHByb2R1Y2UgTnVsbFBvaW50ZXJFeGNlcHRpb248L2Rlc2NyaXB0aW9uPgorICA8L3Byb2JsZW0+CisgIDxwcm9ibGVtPgorICAgIDxmaWxlPkNhc2VBbmROcGUuamF2YTwvZmlsZT4KKyAgICA8bGluZT40ODwvbGluZT4KKyAgICA8ZGVzY3JpcHRpb24+U3dpdGNoIGxhYmVsICdjYXNlIDE6JyBpcyB1bnJlYWNoYWJsZTwvZGVzY3JpcHRpb24+CisgIDwvcHJvYmxlbT4KKyAgPHByb2JsZW0+CisgICAgPGZpbGU+Q2FzZUFuZE5wZS5qYXZhPC9maWxlPgorICAgIDxsaW5lPjQ5PC9saW5lPgorICAgIDxkZXNjcmlwdGlvbj5Td2l0Y2ggbGFiZWwgJ2Nhc2UgMjonIGlzIHVucmVhY2hhYmxlPC9kZXNjcmlwdGlvbj4KKyAgPC9wcm9ibGVtPgorPC9wcm9ibGVtcz4KKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGF0YUZsb3cvY2FzZUFuZE5wZS9zcmMvQ2FzZUFuZE5wZS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGF0YUZsb3cvY2FzZUFuZE5wZS9zcmMvQ2FzZUFuZE5wZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkxNjQzZDUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kYXRhRmxvdy9jYXNlQW5kTnBlL3NyYy9DYXNlQW5kTnBlLmphdmEKQEAgLTAsMCArMSwxMjIgQEAKKy8qCisgKiBDcmVhdGVkIGJ5IEludGVsbGlKIElERUEuCisgKiBVc2VyOiBtYXgKKyAqIERhdGU6IEphbiA0LCAyMDAyCisgKiBUaW1lOiA0OjAxOjIxIFBNCisgKiBUbyBjaGFuZ2UgdGVtcGxhdGUgZm9yIG5ldyBpbnRlcmZhY2UgdXNlCisgKiBDb2RlIFN0eWxlIHwgQ2xhc3MgVGVtcGxhdGVzIG9wdGlvbnMgKFRvb2xzIHwgSURFIE9wdGlvbnMpLgorICovCitwYWNrYWdlIHRlc3QuZGVhZGNvZGU7CisKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworCitwdWJsaWMgY2xhc3MgYWFhIHsKKyAgaW50IGE7CisgIGludCBiOworCisgIHZvaWQgeChpbnQgaSwgT2JqZWN0IG8pIHsKKyAgICBpZiAobyA9PSBudWxsKSB7CisgICAgICBpID0gMjsKKyAgICB9CisKKyAgICBpZiAobyBpbnN0YW5jZW9mIFN0cmluZykgeworICAgICAgby5lcXVhbHMobyk7CisgICAgfQorCisgICAgby5lcXVhbHMobyk7CisKKyAgICBpZiAoaSA9PSAzKSB7CisgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIiIpOworICAgIH0KKyAgICBpZiAoaSA9PSAzKSB7CisgICAgICBvLmVxdWFscyhvKTsKKyAgICAgIG8uZXF1YWxzKG8pOworICAgIH0KKworICAgIG8uZXF1YWxzKG8pOworCisKKyAgICBpZiAoaSA9PSAyKSB7CisgICAgICBpID0gNjsKKyAgICB9IGVsc2UgeworICAgICAgaSA9IDU7CisgICAgfQorCisgICAgLy9TeXN0ZW0uZXhpdCgwKTsKKworICAgIHN3aXRjaChpKSB7CisgICAgICBjYXNlIDE6IFN5c3RlbS5vdXQucHJpbnRsbigiMSBub3QgcmVhY2hhYmxlIik7IGJyZWFrOworICAgICAgY2FzZSAyOiBTeXN0ZW0ub3V0LnByaW50bG4oIjIgbm90IHJlYWNoYWJsZSIpOyBicmVhazsKKyAgICAgIGNhc2UgNjogU3lzdGVtLm91dC5wcmludGxuKCI2IHJlYWNoYWJsZSIpOyBicmVhazsKKyAgICAgIGNhc2UgNTogU3lzdGVtLm91dC5wcmludGxuKCI1IHJlYWNoYWJsZSIpOyBicmVhazsKKyAgICAgIGRlZmF1bHQ6IFN5c3RlbS5vdXQucHJpbnRsbigiRGVmYXVsdCBub3QgcmVhY2hhYmxlIik7IGJyZWFrOworICAgIH0KKyAgICBpbnQgaiA9IDA7CisKKyAgICBmb3IgKDsgaSA8IDU7IGkrKywgaisrKSB7fQorICB9CisKKyAgdm9pZCBjYW5CZVN0YXRpYygpIHsKKyAgICBmb3IgKGludCBpID0gMTU7IGkgPj0gMDsgLS1pKQorICAgIHsKKyAgICAgIGlmICgoaT09NCkgfHwgKGk9PTEwKSkKKyAgICAgIHsKKyAgICAgICAgLy9hY3R1YWwgYmxvY2sgYm9keSByZW1vdmVkCisgICAgICB9CisgICAgfQorCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudWxsOyBpKyspIHsKKyAgICAgIGEgPSBpOworICAgICAgdGhpcy5hID0gaTsKKyAgICB9CisKKyAgICBpZiAoYSAhPSBiICYmIGEgIT0gNSkgeworICAgICAgYSA9IDM7CisgICAgfSBlbHNlIHsKKyAgICAgIGEgPSA0OworICAgIH0KKworICAgIGlmIChhICE9IG51bGwgJiYgYSBpbnN0YW5jZW9mIGFhYSkgeworICAgICAgaWYgKHRydWUpIHsKKyAgICAgICAgLy9hID0gbmV3IGFhYSgpOworICAgICAgfQorICAgIH0KKworICAgIGEgPSA2ICsgMTsKKyAgfQorfQorCisKK2NsYXNzIFRlc3QKK3sKKyAgcHVibGljIHN0YXRpYyBpbnQgbXl1bnVzZWRmaWVsZDEgPSAwOworICAvLyAtLVJlY3ljbGUgQmluICgzLzI5LzAyIDY6NDQgUE0pcHVibGljIHN0YXRpYyBpbnQgbXl1bnVzZWRmaWVsZDIgPSAwOworICBwdWJsaWMgc3RhdGljIGludCBteXVudXNlZGZpZWxkMyA9IDA7CisgIC8vIC0tUmVjeWNsZSBCaW4gKDMvMjkvMDIgNjo0NCBQTSlwdWJsaWMgc3RhdGljIGludCBteXVudXNlZGZpZWxkNCA9IDA7CisgIHB1YmxpYyBzdGF0aWMgaW50IG15dW51c2VkZmllbGQ1ID0gMDsKKworCisgICAgIHZvaWQgdGVzdE1ldGhvZDEoKSB0aHJvd3MgSU9FeGNlcHRpb24ge30KKyAgICAgdm9pZCB0ZXN0TWV0aG9kMigpIHRocm93cyBJT0V4Y2VwdGlvbiB7fQorCisgICAgIHB1YmxpYyB2b2lkIG1haW4oU3RyaW5nIGFyZ3ZbXSkKKyAgICAgeworICAgICAgICAgIGJvb2xlYW4gY2FsbGluZ01ldGhvZDEgPSBmYWxzZTsKKyAgICAgICAgICB0cnkKKyAgICAgICAgICB7CisgICAgICAgICAgICBpbnQgaSA9IChpbnQpIDA7CisgICAgICAgICAgICAgICBjYWxsaW5nTWV0aG9kMSA9IHRydWU7CisgICAgICAgICAgICAgICB0ZXN0TWV0aG9kMSgpOworICAgICAgICAgICAgICAgY2FsbGluZ01ldGhvZDEgPSBmYWxzZTsKKyAgICAgICAgICAgICAgIHRlc3RNZXRob2QyKCk7CisgICAgICAgICAgfQorICAgICAgICAgIGNhdGNoIChJT0V4Y2VwdGlvbiBlKQorICAgICAgICAgIHsKKyAgICAgICAgICAgICAgIGlmIChjYWxsaW5nTWV0aG9kMSkKKyAgICAgICAgICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJFcnJvciB3aGlsZSBjYWxsaW5nIG1ldGhvZCAxIik7CisgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiRXJyb3Igd2hpbGUgY2FsbGluZyBtZXRob2QgMiIpOworICAgICAgICAgIH0KKyAgICAgfQorfQorCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kYXRhRmxvdy9jY2UvZXhwZWN0ZWQueG1sIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGF0YUZsb3cvY2NlL2V4cGVjdGVkLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NTY3ZDVkCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGF0YUZsb3cvY2NlL2V4cGVjdGVkLnhtbApAQCAtMCwwICsxLDkgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8cHJvYmxlbXM+CisgIDxwcm9ibGVtPgorICAgIDxmaWxlPkNjZS5qYXZhPC9maWxlPgorICAgIDxsaW5lPjEyPC9saW5lPgorICAgIDxkZXNjcmlwdGlvbj5tYXkgcHJvZHVjZSBDbGFzc0Nhc3RFeGNlcHRpb248L2Rlc2NyaXB0aW9uPgorICA8L3Byb2JsZW0+Cis8L3Byb2JsZW1zPgorCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kYXRhRmxvdy9jY2Uvc3JjL0NjZS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGF0YUZsb3cvY2NlL3NyYy9DY2UuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOGJjOTZlCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGF0YUZsb3cvY2NlL3NyYy9DY2UuamF2YQpAQCAtMCwwICsxLDE5IEBACitjbGFzcyBBIHsKK30KKworY2xhc3MgQiB7Cit9CisKK3B1YmxpYyBjbGFzcyBDY2UgeworICAgcHVibGljIHZvaWQgYSgpIHsKKyAgICAgIE9iamVjdCBvID0gZ2V0T2JqZWN0KCk7CisKKyAgICAgIGlmIChvIGluc3RhbmNlb2YgQSkgeworICAgICAgICBCIGIgPSAoQikgbzsKKyAgICAgIH0KKyAgIH0KKworICAgT2JqZWN0IGdldE9iamVjdCgpIHsKKyAgICAgcmV0dXJuIG5ldyBBKCk7CisgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGF0YUZsb3cvY29tcGlsZVRpbWVDb25zdC9leHBlY3RlZC54bWwgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kYXRhRmxvdy9jb21waWxlVGltZUNvbnN0L2V4cGVjdGVkLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YjQxODVkCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGF0YUZsb3cvY29tcGlsZVRpbWVDb25zdC9leHBlY3RlZC54bWwKQEAgLTAsMCArMSwyNCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxwcm9ibGVtcz4KKzxwcm9ibGVtPgorICA8ZmlsZT5UZXN0LmphdmE8L2ZpbGU+CisgIDxsaW5lPjY8L2xpbmU+CisgIDxtZXRob2Q+CisgICAgPG5hbWU+dm9pZCBmb28oYm9vbGVhbiBwYXJhbSk8L25hbWU+CisgICAgPGRpc3BsYXlfbmFtZT5mb28oYm9vbGVhbik8L2Rpc3BsYXlfbmFtZT4KKyAgICA8cGFja2FnZT4mbHQ7ZGVmYXVsdCZndDs8L3BhY2thZ2U+CisgICAgPGNsYXNzPgorICAgICAgPG5hbWU+WTwvbmFtZT4KKyAgICAgIDxkaXNwbGF5X25hbWU+WTwvZGlzcGxheV9uYW1lPgorICAgIDwvY2xhc3M+CisgIDwvbWV0aG9kPgorICA8cHJvYmxlbV9jbGFzcz5Db25zdGFudCBjb25kaXRpb25zICZhbXA7IGV4Y2VwdGlvbnM8L3Byb2JsZW1fY2xhc3M+CisgIDxkZXNjcmlwdGlvbj5Db25kaXRpb24gJmx0O2NvZGUmZ3Q7YiZsdDsvY29kZSZndDsgaXMgYWx3YXlzICZsdDtjb2RlJmd0O3RydWUmbHQ7L2NvZGUmZ3Q7LjwvZGVzY3JpcHRpb24+Cis8L3Byb2JsZW0+CisgIDxwcm9ibGVtPgorICAgIDxmaWxlPlRlc3QuamF2YTwvZmlsZT4KKyAgICA8bGluZT41PC9saW5lPgorICAgIDxwcm9ibGVtX2NsYXNzIHNldmVyaXR5PSJXQVJOSU5HIiBhdHRyaWJ1dGVfa2V5PSJXQVJOSU5HX0FUVFJJQlVURVMiPkNvbnN0YW50IGNvbmRpdGlvbnMgJmFtcDsgZXhjZXB0aW9uczwvcHJvYmxlbV9jbGFzcz4KKyAgICA8ZGVzY3JpcHRpb24+Q29uZGl0aW9uICZsdDtjb2RlJmd0O0NPTlNUJmx0Oy9jb2RlJmd0OyBpcyBhbHdheXMgJmx0O2NvZGUmZ3Q7dHJ1ZSZsdDsvY29kZSZndDs8L2Rlc2NyaXB0aW9uPgorICA8L3Byb2JsZW0+Cis8L3Byb2JsZW1zPgpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGF0YUZsb3cvY29tcGlsZVRpbWVDb25zdC9zcmMvVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGF0YUZsb3cvY29tcGlsZVRpbWVDb25zdC9zcmMvVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBkMzAyYTcKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kYXRhRmxvdy9jb21waWxlVGltZUNvbnN0L3NyYy9UZXN0LmphdmEKQEAgLTAsMCArMSw5IEBACitwdWJsaWMgY2xhc3MgWSB7ICAgCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgYm9vbGVhbiBDT05TVCA9IHRydWU7CisKKyAgICBwdWJsaWMgdm9pZCBmb28oYm9vbGVhbiBwYXJhbSkgeworICAgICAgICBib29sZWFuIGIgPSBDT05TVCB8fCBwYXJhbTsKKyAgICAgICAgaWYgKGIpIHsKKyAgICAgICAgfQorICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RhdGFGbG93L2NvbnN0YW50RXhwci9leHBlY3RlZC54bWwgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kYXRhRmxvdy9jb25zdGFudEV4cHIvZXhwZWN0ZWQueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhlMTY5MzIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kYXRhRmxvdy9jb25zdGFudEV4cHIvZXhwZWN0ZWQueG1sCkBAIC0wLDAgKzEsOCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxwcm9ibGVtcz4KKyAgPHByb2JsZW0+CisgICAgPGZpbGU+VGVzdC5qYXZhPC9maWxlPgorICAgIDxsaW5lPjY8L2xpbmU+CisgICAgPGRlc2NyaXB0aW9uPkNvbmRpdGlvbiAnaSA9PSBqJyBpcyBhbHdheXMgdHJ1ZTwvZGVzY3JpcHRpb24+CisgIDwvcHJvYmxlbT4KKzwvcHJvYmxlbXM+CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kYXRhRmxvdy9jb25zdGFudEV4cHIvc3JjL1Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RhdGFGbG93L2NvbnN0YW50RXhwci9zcmMvVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRlYzkyMDUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kYXRhRmxvdy9jb25zdGFudEV4cHIvc3JjL1Rlc3QuamF2YQpAQCAtMCwwICsxLDkgQEAKK3B1YmxpYyBjbGFzcyBUZXN0IHsKKyAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IENPTlNUID0gMy8yICsgMCoxOworICBwdWJsaWMgdm9pZCBmb28oKSB7CisgICAgaW50IGkgPSAwOworICAgIGludCBqID0gMiArIChDT05TVCkgLSA2LzI7CisgICAgaWYgKGkgPT0gaikgeworICAgIH0KKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RhdGFGbG93L2V4Y2VwdGlvbkNGRy9leHBlY3RlZC54bWwgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kYXRhRmxvdy9leGNlcHRpb25DRkcvZXhwZWN0ZWQueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlhYzg3OWQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kYXRhRmxvdy9leGNlcHRpb25DRkcvZXhwZWN0ZWQueG1sCkBAIC0wLDAgKzEsMyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxwcm9ibGVtcyAvPgorCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kYXRhRmxvdy9leGNlcHRpb25DRkcvc3JjL0V4Y2VwdGlvbkNGRy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGF0YUZsb3cvZXhjZXB0aW9uQ0ZHL3NyYy9FeGNlcHRpb25DRkcuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NTlmZDFmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGF0YUZsb3cvZXhjZXB0aW9uQ0ZHL3NyYy9FeGNlcHRpb25DRkcuamF2YQpAQCAtMCwwICsxLDM0IEBACitpbXBvcnQgamF2YS5pby4qOworCitjbGFzcyBUZXN0Cit7CisgIHB1YmxpYyBzdGF0aWMgaW50IG15dW51c2VkZmllbGQxID0gMDsKKyAgLy8gLS1SZWN5Y2xlIEJpbiAoMy8yOS8wMiA2OjQ0IFBNKXB1YmxpYyBzdGF0aWMgaW50IG15dW51c2VkZmllbGQyID0gMDsKKyAgcHVibGljIHN0YXRpYyBpbnQgbXl1bnVzZWRmaWVsZDMgPSAwOworICAvLyAtLVJlY3ljbGUgQmluICgzLzI5LzAyIDY6NDQgUE0pcHVibGljIHN0YXRpYyBpbnQgbXl1bnVzZWRmaWVsZDQgPSAwOworICBwdWJsaWMgc3RhdGljIGludCBteXVudXNlZGZpZWxkNSA9IDA7CisKKworICAgICB2b2lkIHRlc3RNZXRob2QxKCkgdGhyb3dzIElPRXhjZXB0aW9uIHt9CisgICAgIHZvaWQgdGVzdE1ldGhvZDIoKSB0aHJvd3MgSU9FeGNlcHRpb24ge30KKworICAgICBwdWJsaWMgdm9pZCBtYWluKFN0cmluZyBhcmd2W10pCisgICAgIHsKKyAgICAgICAgICBib29sZWFuIGNhbGxpbmdNZXRob2QxID0gZmFsc2U7CisgICAgICAgICAgdHJ5CisgICAgICAgICAgeworICAgICAgICAgICAgaW50IGkgPSAoaW50KSAwOworICAgICAgICAgICAgICAgY2FsbGluZ01ldGhvZDEgPSB0cnVlOworICAgICAgICAgICAgICAgdGVzdE1ldGhvZDEoKTsKKyAgICAgICAgICAgICAgIGNhbGxpbmdNZXRob2QxID0gZmFsc2U7CisgICAgICAgICAgICAgICB0ZXN0TWV0aG9kMigpOworICAgICAgICAgIH0KKyAgICAgICAgICBjYXRjaCAoSU9FeGNlcHRpb24gZSkKKyAgICAgICAgICB7CisgICAgICAgICAgICAgICBpZiAoY2FsbGluZ01ldGhvZDEpCisgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiRXJyb3Igd2hpbGUgY2FsbGluZyBtZXRob2QgMSIpOworICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIkVycm9yIHdoaWxlIGNhbGxpbmcgbWV0aG9kIDIiKTsKKyAgICAgICAgICB9CisgICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RhdGFGbG93L2ZpbmFsRmllbGRzL2V4cGVjdGVkLnhtbCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RhdGFGbG93L2ZpbmFsRmllbGRzL2V4cGVjdGVkLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OTZhMzE1Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGF0YUZsb3cvZmluYWxGaWVsZHMvZXhwZWN0ZWQueG1sCkBAIC0wLDAgKzEsMiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxwcm9ibGVtcyAvPgpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGF0YUZsb3cvZmluYWxGaWVsZHMvc3JjL1Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RhdGFGbG93L2ZpbmFsRmllbGRzL3NyYy9UZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWNjMjM3MgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RhdGFGbG93L2ZpbmFsRmllbGRzL3NyYy9UZXN0LmphdmEKQEAgLTAsMCArMSwxNiBAQAoraW1wb3J0IG9yZy5qZXRicmFpbnMuYW5ub3RhdGlvbnMuTnVsbGFibGU7CisKK3B1YmxpYyBjbGFzcyBUZXN0IHsKKyAgQE51bGxhYmxlIHB1YmxpYyBmaW5hbCBTdHJpbmcgbzsKKworICBwdWJsaWMgVGVzdChTdHJpbmcgcSkgeyBvID0gcTsgfQorCisgIHB1YmxpYyB2b2lkIHRlc3QoKSB7CisgICAgaWYgKG8gIT0gbnVsbCkgeworICAgICAgYmFyKCk7CisgICAgICBvLmhhc2hDb2RlKCk7CisgICAgfQorICB9CisKKyAgcHVibGljIHZvaWQgYmFyKCkge30KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kYXRhRmxvdy9maXh0dXJlL0FublJlcG9ydC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGF0YUZsb3cvZml4dHVyZS9Bbm5SZXBvcnQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MTFiNDFjCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGF0YUZsb3cvZml4dHVyZS9Bbm5SZXBvcnQuamF2YQpAQCAtMCwwICsxLDIxIEBACitpbXBvcnQgb3JnLmpldGJyYWlucy5hbm5vdGF0aW9ucy5Ob3ROdWxsOworCitwdWJsaWMgY2xhc3MgQVNEIHsKKyAgc3RhdGljIHZvaWQgZm9vKE9iamVjdCBhbnkpIHsKKyAgICBib29sZWFuIGEgPSBmYWxzZTsKKyAgICBib29sZWFuIGIgPSBmYWxzZTsKKyAgICB3aGlsZSAodHJ1ZSkgeworICAgICAgYm9vbGVhbiB0cmcgPSBiYXIoKSA9PSBhbnk7CisKKyAgICAgIGEgPSBhIHx8IHRyZzsKKyAgICAgIGIgPSBiIHx8ICF0cmc7CisKKyAgICAgIGlmIChiICYmIGEpIGJyZWFrOworICAgIH0KKyAgfQorCisgIEBOb3ROdWxsCisgIHN0YXRpYyBPYmplY3QgYmFyKCkgeworICAgIHJldHVybiBuZXcgT2JqZWN0KCk7CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RhdGFGbG93L2ZpeHR1cmUvQW5ub3RhdGVkVHlwZVBhcmFtZXRlcnMuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RhdGFGbG93L2ZpeHR1cmUvQW5ub3RhdGVkVHlwZVBhcmFtZXRlcnMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOTgyYjBjCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGF0YUZsb3cvZml4dHVyZS9Bbm5vdGF0ZWRUeXBlUGFyYW1ldGVycy5qYXZhCkBAIC0wLDAgKzEsMzIgQEAKK2ltcG9ydCBmb28uTm90TnVsbDsKK2ltcG9ydCBmb28uTnVsbGFibGU7CisKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworY2xhc3MgVGVzdCB7CisgIHByaXZhdGUgc3RhdGljIHZvaWQgdGVzdChMaXN0PEBOb3ROdWxsIE9iamVjdD4gbGlzdCkgeworICAgIGlmICg8d2FybmluZyBkZXNjcj0iQ29uZGl0aW9uICdsaXN0LmdldCgwKSA9PSBudWxsJyBpcyBhbHdheXMgJ2ZhbHNlJyI+bGlzdC5nZXQoMCkgPT0gbnVsbDwvd2FybmluZz4pIHsKKyAgICAgIHJldHVybjsKKyAgICB9CisgICAgbGlzdC5hZGQoPHdhcm5pbmcgZGVzY3I9IlBhc3NpbmcgJ251bGwnIGFyZ3VtZW50IHRvIHBhcmFtZXRlciBhbm5vdGF0ZWQgYXMgQE5vdE51bGwiPm51bGw8L3dhcm5pbmc+KTsKKyAgfQorICBwcml2YXRlIHN0YXRpYyB2b2lkIHRlc3QyKExpc3Q8QE51bGxhYmxlIE9iamVjdD4gbGlzdCkgeworICAgIGlmIChsaXN0LmdldCgwKSA9PSBudWxsKSB7CisgICAgICByZXR1cm47CisgICAgfQorICAgIGxpc3QuYWRkKG51bGwpOworICB9CisKKyAgcHJpdmF0ZSBzdGF0aWMgdm9pZCB0ZXN0MyhSZWY8QE5vdE51bGwgT2JqZWN0PiByZWYpIHsKKyAgICBpZiAoPHdhcm5pbmcgZGVzY3I9IkNvbmRpdGlvbiAncmVmLnZhbHVlID09IG51bGwnIGlzIGFsd2F5cyAnZmFsc2UnIj5yZWYudmFsdWUgPT0gbnVsbDwvd2FybmluZz4pIHsKKyAgICAgIHJldHVybjsKKyAgICB9CisgICAgcmVmLnZhbHVlID0gPHdhcm5pbmcgZGVzY3I9IidudWxsJyBpcyBhc3NpZ25lZCB0byBhIHZhcmlhYmxlIHRoYXQgaXMgYW5ub3RhdGVkIHdpdGggQE5vdE51bGwiPm51bGw8L3dhcm5pbmc+OworICB9CisKKworfQorCitjbGFzcyBSZWY8VD4geworICBUIHZhbHVlOworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RhdGFGbG93L2ZpeHR1cmUvQXNzZXJ0RmFpbEluQ2F0Y2guamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RhdGFGbG93L2ZpeHR1cmUvQXNzZXJ0RmFpbEluQ2F0Y2guamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45M2ZjZjZkCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGF0YUZsb3cvZml4dHVyZS9Bc3NlcnRGYWlsSW5DYXRjaC5qYXZhCkBAIC0wLDAgKzEsMjQgQEAKK2ltcG9ydCBvcmcuamV0YnJhaW5zLmFubm90YXRpb25zLk5vdE51bGw7CitpbXBvcnQgb3JnLmp1bml0LkFzc2VydDsKKworY2xhc3MgVGVzdCB7CisKKyAgcHVibGljIHN0YXRpYyB2b2lkIGZvbygpIHsKKyAgICBTdHJpbmcgcmVzdWx0ID0gbnVsbDsKKyAgICB0cnkgeworICAgICAgcmVzdWx0ID0gY3JlYXRlU3RyaW5nKCk7CisgICAgfQorICAgIGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgICAgQXNzZXJ0LmZhaWwoKTsKKyAgICB9CisgICAgZmluYWxseSB7CisgICAgICBpZiAocmVzdWx0ID09IG51bGwpIHsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJBbmFseXNpcyBmYWlsZWQhIik7CisgICAgICB9CisgICAgfQorICB9CisKKyAgcHJpdmF0ZSBzdGF0aWMgQE5vdE51bGwgU3RyaW5nIGNyZWF0ZVN0cmluZygpIHsKKyAgICB0aHJvdyBuZXcgTnVsbFBvaW50ZXJFeGNlcHRpb24oKTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RhdGFGbG93L2ZpeHR1cmUvQXNzaWduaW5nQ2xhc3NMaXRlcmFsVG9OdWxsYWJsZS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGF0YUZsb3cvZml4dHVyZS9Bc3NpZ25pbmdDbGFzc0xpdGVyYWxUb051bGxhYmxlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTRlNDRlYQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RhdGFGbG93L2ZpeHR1cmUvQXNzaWduaW5nQ2xhc3NMaXRlcmFsVG9OdWxsYWJsZS5qYXZhCkBAIC0wLDAgKzEsMTQgQEAKK2ltcG9ydCBvcmcuamV0YnJhaW5zLmFubm90YXRpb25zLk5vdE51bGw7CitpbXBvcnQgb3JnLmpldGJyYWlucy5hbm5vdGF0aW9ucy5OdWxsYWJsZTsKKworcHVibGljIGNsYXNzIEJyb2tlbkFsaWdubWVudCB7CisKKyAgcHVibGljIHZvaWQgbWFpbihTdHJpbmcuLi4gYXJncykgeworICAgIEBOdWxsYWJsZSBDbGFzcyBvYmplY3QgPSBPYmplY3QuY2xhc3M7CisgICAgb3V0cHV0MihvYmplY3QpOworICB9CisKKyAgcHVibGljIHN0YXRpYyB2b2lkIG91dHB1dDIoQE5vdE51bGwgT2JqZWN0IHZhbHVlKSB7CisgICAgU3lzdGVtLm91dC5wcmludGxuKHZhbHVlKTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RhdGFGbG93L2ZpeHR1cmUvQXNzaWduaW5nVW5rbm93blRvTnVsbGFibGUuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RhdGFGbG93L2ZpeHR1cmUvQXNzaWduaW5nVW5rbm93blRvTnVsbGFibGUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOGQxYTFlCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGF0YUZsb3cvZml4dHVyZS9Bc3NpZ25pbmdVbmtub3duVG9OdWxsYWJsZS5qYXZhCkBAIC0wLDAgKzEsMTIgQEAKK2ltcG9ydCBvcmcuamV0YnJhaW5zLmFubm90YXRpb25zLk51bGxhYmxlOworCitwdWJsaWMgY2xhc3MgQnJva2VuQWxpZ25tZW50IHsKKworICBTdHJpbmcgdW5rbm93bihTdHJpbmcgcykgeyByZXR1cm4gczsgfQorCisgIHB1YmxpYyB2b2lkIGV4YW1wbGUoQE51bGxhYmxlIFN0cmluZyB2YWx1ZSkgeworICAgIHZhbHVlID0gdW5rbm93big8d2FybmluZyBkZXNjcj0iQXJndW1lbnQgJ3ZhbHVlJyBtaWdodCBiZSBudWxsIGJ1dCBwYXNzZWQgdG8gbm9uIGFubm90YXRlZCBwYXJhbWV0ZXIiPnZhbHVlPC93YXJuaW5nPik7CisgICAgaWYgKHZhbHVlLmNvbnRhaW5zKCIlIikpIHsKKyAgICB9CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kYXRhRmxvdy9maXh0dXJlL0JpZ01ldGhvZE5vdENvbXBsZXguamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RhdGFGbG93L2ZpeHR1cmUvQmlnTWV0aG9kTm90Q29tcGxleC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhhMWZmNDQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kYXRhRmxvdy9maXh0dXJlL0JpZ01ldGhvZE5vdENvbXBsZXguamF2YQpAQCAtMCwwICsxLDU2IEBACitwdWJsaWMgYWJzdHJhY3QgY2xhc3MgREREIHsKKyAgYWJzdHJhY3QgYm9vbGVhbiBjb25kaXRpb24oKTsKKyAgYWJzdHJhY3QgT2JqZWN0IGZvbygpOworICBhYnN0cmFjdCBPYmplY3QgYmFyKCk7CisKKyAgdm9pZCB0ZXN0KE9iamVjdCBvLCBEREQgYW5vdGhlcikgeworICAgIHRyeSB7CisgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oY29uZGl0aW9uKCkgJiYgZXF1YWxzKG8pID8gYW5vdGhlci5mb28oKSA6IGFub3RoZXIuYmFyKCkpOworICAgICAgU3lzdGVtLm91dC5wcmludGxuKGNvbmRpdGlvbigpICYmIGVxdWFscyhvKSA/IGFub3RoZXIuZm9vKCkgOiBhbm90aGVyLmJhcigpKTsKKyAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihjb25kaXRpb24oKSAmJiBlcXVhbHMobykgPyBhbm90aGVyLmZvbygpIDogYW5vdGhlci5iYXIoKSk7CisgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oY29uZGl0aW9uKCkgJiYgZXF1YWxzKG8pID8gYW5vdGhlci5mb28oKSA6IGFub3RoZXIuYmFyKCkpOworICAgICAgU3lzdGVtLm91dC5wcmludGxuKGNvbmRpdGlvbigpICYmIGVxdWFscyhvKSA/IGFub3RoZXIuZm9vKCkgOiBhbm90aGVyLmJhcigpKTsKKyAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihjb25kaXRpb24oKSAmJiBlcXVhbHMobykgPyBhbm90aGVyLmZvbygpIDogYW5vdGhlci5iYXIoKSk7CisgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oY29uZGl0aW9uKCkgJiYgZXF1YWxzKG8pID8gYW5vdGhlci5mb28oKSA6IGFub3RoZXIuYmFyKCkpOworICAgICAgU3lzdGVtLm91dC5wcmludGxuKGNvbmRpdGlvbigpICYmIGVxdWFscyhvKSA/IGFub3RoZXIuZm9vKCkgOiBhbm90aGVyLmJhcigpKTsKKyAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihjb25kaXRpb24oKSAmJiBlcXVhbHMobykgPyBhbm90aGVyLmZvbygpIDogYW5vdGhlci5iYXIoKSk7CisgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oY29uZGl0aW9uKCkgJiYgZXF1YWxzKG8pID8gYW5vdGhlci5mb28oKSA6IGFub3RoZXIuYmFyKCkpOworICAgICAgU3lzdGVtLm91dC5wcmludGxuKGNvbmRpdGlvbigpICYmIGVxdWFscyhvKSA/IGFub3RoZXIuZm9vKCkgOiBhbm90aGVyLmJhcigpKTsKKyAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihjb25kaXRpb24oKSAmJiBlcXVhbHMobykgPyBhbm90aGVyLmZvbygpIDogYW5vdGhlci5iYXIoKSk7CisgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oY29uZGl0aW9uKCkgJiYgZXF1YWxzKG8pID8gYW5vdGhlci5mb28oKSA6IGFub3RoZXIuYmFyKCkpOworICAgICAgU3lzdGVtLm91dC5wcmludGxuKGNvbmRpdGlvbigpICYmIGVxdWFscyhvKSA/IGFub3RoZXIuZm9vKCkgOiBhbm90aGVyLmJhcigpKTsKKyAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihjb25kaXRpb24oKSAmJiBlcXVhbHMobykgPyBhbm90aGVyLmZvbygpIDogYW5vdGhlci5iYXIoKSk7CisgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oY29uZGl0aW9uKCkgJiYgZXF1YWxzKG8pID8gYW5vdGhlci5mb28oKSA6IGFub3RoZXIuYmFyKCkpOworICAgICAgU3lzdGVtLm91dC5wcmludGxuKGNvbmRpdGlvbigpICYmIGVxdWFscyhvKSA/IGFub3RoZXIuZm9vKCkgOiBhbm90aGVyLmJhcigpKTsKKyAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihjb25kaXRpb24oKSAmJiBlcXVhbHMobykgPyBhbm90aGVyLmZvbygpIDogYW5vdGhlci5iYXIoKSk7CisgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oY29uZGl0aW9uKCkgJiYgZXF1YWxzKG8pID8gYW5vdGhlci5mb28oKSA6IGFub3RoZXIuYmFyKCkpOworICAgICAgU3lzdGVtLm91dC5wcmludGxuKGNvbmRpdGlvbigpICYmIGVxdWFscyhvKSA/IGFub3RoZXIuZm9vKCkgOiBhbm90aGVyLmJhcigpKTsKKyAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihjb25kaXRpb24oKSAmJiBlcXVhbHMobykgPyBhbm90aGVyLmZvbygpIDogYW5vdGhlci5iYXIoKSk7CisgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oY29uZGl0aW9uKCkgJiYgZXF1YWxzKG8pID8gYW5vdGhlci5mb28oKSA6IGFub3RoZXIuYmFyKCkpOworICAgICAgU3lzdGVtLm91dC5wcmludGxuKGNvbmRpdGlvbigpICYmIGVxdWFscyhvKSA/IGFub3RoZXIuZm9vKCkgOiBhbm90aGVyLmJhcigpKTsKKyAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihjb25kaXRpb24oKSAmJiBlcXVhbHMobykgPyBhbm90aGVyLmZvbygpIDogYW5vdGhlci5iYXIoKSk7CisgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oY29uZGl0aW9uKCkgJiYgZXF1YWxzKG8pID8gYW5vdGhlci5mb28oKSA6IGFub3RoZXIuYmFyKCkpOworICAgICAgU3lzdGVtLm91dC5wcmludGxuKGNvbmRpdGlvbigpICYmIGVxdWFscyhvKSA/IGFub3RoZXIuZm9vKCkgOiBhbm90aGVyLmJhcigpKTsKKyAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihjb25kaXRpb24oKSAmJiBlcXVhbHMobykgPyBhbm90aGVyLmZvbygpIDogYW5vdGhlci5iYXIoKSk7CisgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oY29uZGl0aW9uKCkgJiYgZXF1YWxzKG8pID8gYW5vdGhlci5mb28oKSA6IGFub3RoZXIuYmFyKCkpOworICAgICAgU3lzdGVtLm91dC5wcmludGxuKGNvbmRpdGlvbigpICYmIGVxdWFscyhvKSA/IGFub3RoZXIuZm9vKCkgOiBhbm90aGVyLmJhcigpKTsKKyAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihjb25kaXRpb24oKSAmJiBlcXVhbHMobykgPyBhbm90aGVyLmZvbygpIDogYW5vdGhlci5iYXIoKSk7CisgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oY29uZGl0aW9uKCkgJiYgZXF1YWxzKG8pID8gYW5vdGhlci5mb28oKSA6IGFub3RoZXIuYmFyKCkpOworICAgICAgU3lzdGVtLm91dC5wcmludGxuKGNvbmRpdGlvbigpICYmIGVxdWFscyhvKSA/IGFub3RoZXIuZm9vKCkgOiBhbm90aGVyLmJhcigpKTsKKyAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihjb25kaXRpb24oKSAmJiBlcXVhbHMobykgPyBhbm90aGVyLmZvbygpIDogYW5vdGhlci5iYXIoKSk7CisgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oY29uZGl0aW9uKCkgJiYgZXF1YWxzKG8pID8gYW5vdGhlci5mb28oKSA6IGFub3RoZXIuYmFyKCkpOworICAgICAgU3lzdGVtLm91dC5wcmludGxuKGNvbmRpdGlvbigpICYmIGVxdWFscyhvKSA/IGFub3RoZXIuZm9vKCkgOiBhbm90aGVyLmJhcigpKTsKKyAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihjb25kaXRpb24oKSAmJiBlcXVhbHMobykgPyBhbm90aGVyLmZvbygpIDogYW5vdGhlci5iYXIoKSk7CisgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oY29uZGl0aW9uKCkgJiYgZXF1YWxzKG8pID8gYW5vdGhlci5mb28oKSA6IGFub3RoZXIuYmFyKCkpOworICAgICAgU3lzdGVtLm91dC5wcmludGxuKGNvbmRpdGlvbigpICYmIGVxdWFscyhvKSA/IGFub3RoZXIuZm9vKCkgOiBhbm90aGVyLmJhcigpKTsKKyAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihjb25kaXRpb24oKSAmJiBlcXVhbHMobykgPyBhbm90aGVyLmZvbygpIDogYW5vdGhlci5iYXIoKSk7CisgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oY29uZGl0aW9uKCkgJiYgZXF1YWxzKG8pID8gYW5vdGhlci5mb28oKSA6IGFub3RoZXIuYmFyKCkpOworICAgICAgU3lzdGVtLm91dC5wcmludGxuKGNvbmRpdGlvbigpICYmIGVxdWFscyhvKSA/IGFub3RoZXIuZm9vKCkgOiBhbm90aGVyLmJhcigpKTsKKyAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihjb25kaXRpb24oKSAmJiBlcXVhbHMobykgPyBhbm90aGVyLmZvbygpIDogYW5vdGhlci5iYXIoKSk7CisgICAgfQorICAgIGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgICAgU3lzdGVtLm91dC5wcmludGxuKGUpOworICAgIH0KKyAgfQorCit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kYXRhRmxvdy9maXh0dXJlL0JveGluZzEyOC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGF0YUZsb3cvZml4dHVyZS9Cb3hpbmcxMjguamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYmRkNWE0Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGF0YUZsb3cvZml4dHVyZS9Cb3hpbmcxMjguamF2YQpAQCAtMCwwICsxLDExIEBACitjbGFzcyBGb28geworICBwdWJsaWMgdm9pZCBmb28oKSB7CisgICAgSW50ZWdlciBhID0gMTI4OworICAgIEludGVnZXIgYiA9IChpbnQpIGE7Ly8gY2FzdCBpcyBuZWNlc3NhcnkgYmVjYXVzZSBuZXcgb2JqZWN0IGlzIGNyZWF0ZWQKKyAgICBJbnRlZ2VyIGMgPSAxMjg7CisKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oYSA9PSBiKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oPHdhcm5pbmcgZGVzY3I9IkNvbmRpdGlvbiAnYSA9PSBjJyBpcyBhbHdheXMgJ2ZhbHNlJyI+YSA9PSBjPC93YXJuaW5nPik7CisgIH0KKworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RhdGFGbG93L2ZpeHR1cmUvQnVpbGRSZWdleHBOb3RDb21wbGV4LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kYXRhRmxvdy9maXh0dXJlL0J1aWxkUmVnZXhwTm90Q29tcGxleC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY2NTVkZWEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kYXRhRmxvdy9maXh0dXJlL0J1aWxkUmVnZXhwTm90Q29tcGxleC5qYXZhCkBAIC0wLDAgKzEsMTYgQEAKK2NsYXNzIFggIHsKKworICBwdWJsaWMgc3RhdGljIHZvaWQgYnVpbGRSZWdleHAoU3RyaW5nIHBhdHRlcm4sIGludCBleGFjdFByZWZpeExlbiwgYm9vbGVhbiBmb3JDb21wbGV0aW9uKSB7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCFmb3JDb21wbGV0aW9uICYmIHBhdHRlcm4uZW5kc1dpdGgoIiAiKSk7CisgICAgU3lzdGVtLm91dC5wcmludGxuKGV4YWN0UHJlZml4TGVuID09IDApOworICAgIGJvb2xlYW4gcHJldklzVXBwZXJjYXNlID0gZmFsc2U7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBwYXR0ZXJuLmxlbmd0aCgpOyBpKyspIHsKKyAgICAgIGZpbmFsIGNoYXIgYyA9IHBhdHRlcm4uY2hhckF0KGkpOworICAgICAgaWYgKGMgPT0gJyonKSB7IH0KKyAgICAgIGVsc2UgaWYgKGMgPT0gJyAnKSB7IH0KKyAgICAgIGVsc2UgaWYgKGMgPT0gJzonIHx8IHByZXZJc1VwcGVyY2FzZSkgeyB9CisgICAgfQorCisgIH0KKworfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGF0YUZsb3cvZml4dHVyZS9DYW5CZU51bGxEb2VzbnRJbXBseUlzTnVsbC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGF0YUZsb3cvZml4dHVyZS9DYW5CZU51bGxEb2VzbnRJbXBseUlzTnVsbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU2ZjU3NzEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kYXRhRmxvdy9maXh0dXJlL0NhbkJlTnVsbERvZXNudEltcGx5SXNOdWxsLmphdmEKQEAgLTAsMCArMSwxNCBAQAoraW1wb3J0IG9yZy5qZXRicmFpbnMuYW5ub3RhdGlvbnMuTnVsbGFibGU7CisKK3B1YmxpYyBjbGFzcyBEREQgeworICBpbnQgdGVzdChib29sZWFuIHQpIHsKKyAgICBpZiAodCAmJiA8d2FybmluZyBkZXNjcj0iRGVyZWZlcmVuY2Ugb2YgJ2ZmZigpJyBtYXkgcHJvZHVjZSAnamF2YS5sYW5nLk51bGxQb2ludGVyRXhjZXB0aW9uJyI+ZmZmKCk8L3dhcm5pbmc+Lmxlbmd0aCA9PSAxKSB7CisgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgcmV0dXJuIDE7CisgIH0KKworICBwdWJsaWMgQE51bGxhYmxlIERERFtdIGZmZigpIHsKKyAgICByZXR1cm4gbmV3IERERFs4XTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGF0YUZsb3cvZml4dHVyZS9DYXRjaFJ1bnRpbWVFeGNlcHRpb24uamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RhdGFGbG93L2ZpeHR1cmUvQ2F0Y2hSdW50aW1lRXhjZXB0aW9uLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTkzYjNiYwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RhdGFGbG93L2ZpeHR1cmUvQ2F0Y2hSdW50aW1lRXhjZXB0aW9uLmphdmEKQEAgLTAsMCArMSw0OCBAQAoraW1wb3J0IG9yZy5qZXRicmFpbnMuYW5ub3RhdGlvbnMuTm90TnVsbDsKKworcHVibGljIGNsYXNzIEJyb2tlbkFsaWdubWVudCB7CisKKyAgQE5vdE51bGwKKyAgT2JqZWN0IHRlc3QxKCkgeworICAgIHRyeSB7CisgICAgICBiYXIoPHdhcm5pbmcgZGVzY3I9IlBhc3NpbmcgJ251bGwnIGFyZ3VtZW50IHRvIHBhcmFtZXRlciBhbm5vdGF0ZWQgYXMgQE5vdE51bGwiPm51bGw8L3dhcm5pbmc+KTsKKyAgICAgIHJldHVybiA8d2FybmluZyBkZXNjcj0iJ251bGwnIGlzIHJldHVybmVkIGJ5IHRoZSBtZXRob2QgZGVjbGFyZWQgYXMgQE5vdE51bGwiPm51bGw8L3dhcm5pbmc+OworICAgIH0KKyAgICBjYXRjaCAoUnVudGltZUV4Y2VwdGlvbiBlKSB7CisgICAgICByZXR1cm4gPHdhcm5pbmcgZGVzY3I9IidudWxsJyBpcyByZXR1cm5lZCBieSB0aGUgbWV0aG9kIGRlY2xhcmVkIGFzIEBOb3ROdWxsIj5udWxsPC93YXJuaW5nPjsKKyAgICB9CisgIH0KKworICBATm90TnVsbAorICBPYmplY3QgdGVzdDIoKSB7CisgICAgdHJ5IHsKKyAgICAgIGJhcig8d2FybmluZyBkZXNjcj0iUGFzc2luZyAnbnVsbCcgYXJndW1lbnQgdG8gcGFyYW1ldGVyIGFubm90YXRlZCBhcyBATm90TnVsbCI+bnVsbDwvd2FybmluZz4pOworICAgICAgcmV0dXJuIDx3YXJuaW5nIGRlc2NyPSInbnVsbCcgaXMgcmV0dXJuZWQgYnkgdGhlIG1ldGhvZCBkZWNsYXJlZCBhcyBATm90TnVsbCI+bnVsbDwvd2FybmluZz47CisgICAgfQorICAgIGNhdGNoIChJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gfCBJbGxlZ2FsU3RhdGVFeGNlcHRpb24gZSkgeworICAgICAgcmV0dXJuIDx3YXJuaW5nIGRlc2NyPSInbnVsbCcgaXMgcmV0dXJuZWQgYnkgdGhlIG1ldGhvZCBkZWNsYXJlZCBhcyBATm90TnVsbCI+bnVsbDwvd2FybmluZz47CisgICAgfQorICB9CisKKyAgQE5vdE51bGwKKyAgT2JqZWN0IHRlc3QzKCkgeworICAgIHRyeSB7CisgICAgICBiYXIoPHdhcm5pbmcgZGVzY3I9IlBhc3NpbmcgJ251bGwnIGFyZ3VtZW50IHRvIHBhcmFtZXRlciBhbm5vdGF0ZWQgYXMgQE5vdE51bGwiPm51bGw8L3dhcm5pbmc+KTsKKyAgICAgIHJldHVybiA8d2FybmluZyBkZXNjcj0iJ251bGwnIGlzIHJldHVybmVkIGJ5IHRoZSBtZXRob2QgZGVjbGFyZWQgYXMgQE5vdE51bGwiPm51bGw8L3dhcm5pbmc+OworICAgIH0KKyAgICBjYXRjaCAoQXNzZXJ0aW9uRXJyb3IgfCBJbGxlZ2FsU3RhdGVFeGNlcHRpb24gZSkgeworICAgICAgcmV0dXJuIDx3YXJuaW5nIGRlc2NyPSInbnVsbCcgaXMgcmV0dXJuZWQgYnkgdGhlIG1ldGhvZCBkZWNsYXJlZCBhcyBATm90TnVsbCI+bnVsbDwvd2FybmluZz47CisgICAgfQorICB9CisKKyAgcHVibGljIHZvaWQgYmFyKEBOb3ROdWxsIE9iamVjdCBmb28pIHsKKyAgICBhc3NlcnQgPHdhcm5pbmcgZGVzY3I9IkNvbmRpdGlvbiAnZm9vICE9IG51bGwnIGlzIGFsd2F5cyAndHJ1ZSciPmZvbyAhPSBudWxsPC93YXJuaW5nPjsKKyAgfQorCisgIHB1YmxpYyB2b2lkIGJhcjIoQE5vdE51bGwgT2JqZWN0IGZvbykgeworICAgIGFzc2VydCA8d2FybmluZyBkZXNjcj0iQ29uZGl0aW9uICdmb28gIT0gbnVsbCcgaXMgYWx3YXlzICd0cnVlJyI+Zm9vICE9IG51bGw8L3dhcm5pbmc+OworICAgIHRyeSB7IH0KKyAgICBjYXRjaCAoamF2YS5sYW5nLlJ1bnRpbWVFeGNlcHRpb24gZXgpIHsgfQorICB9CisKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kYXRhRmxvdy9maXh0dXJlL0NoYWluZWRGaW5hbEZpZWxkQWNjZXNzb3JzRGZhLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kYXRhRmxvdy9maXh0dXJlL0NoYWluZWRGaW5hbEZpZWxkQWNjZXNzb3JzRGZhLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGNmOGJiZAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RhdGFGbG93L2ZpeHR1cmUvQ2hhaW5lZEZpbmFsRmllbGRBY2Nlc3NvcnNEZmEuamF2YQpAQCAtMCwwICsxLDg0IEBACitpbXBvcnQgb3JnLmpldGJyYWlucy5hbm5vdGF0aW9ucy5OdWxsYWJsZTsKKworaW1wb3J0IGphdmEubGFuZy5TdHJpbmc7CisKK3B1YmxpYyBjbGFzcyBCcm9rZW5BbGlnbm1lbnQgeworCisgIHZvaWQgbWFpbihEYXRhIGRhdGEpIHsKKyAgICBpZiAoZGF0YS5nZXRUZXh0KCkgIT0gbnVsbCkgeworICAgICAgU3lzdGVtLm91dC5wcmludGxuKGRhdGEuZ2V0VGV4dCgpLmhhc2hDb2RlKCkpOworICAgIH0KKworICAgIGRhdGEgPSBuZXcgRGF0YShudWxsLCA8d2FybmluZyBkZXNjcj0iUGFzc2luZyAnbnVsbCcgYXJndW1lbnQgdG8gbm9uIGFubm90YXRlZCBwYXJhbWV0ZXIiPm51bGw8L3dhcm5pbmc+KTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oPHdhcm5pbmcgZGVzY3I9Ik1ldGhvZCBpbnZvY2F0aW9uICdkYXRhLmdldFRleHQoKS5oYXNoQ29kZSgpJyBtYXkgcHJvZHVjZSAnamF2YS5sYW5nLk51bGxQb2ludGVyRXhjZXB0aW9uJyI+ZGF0YS5nZXRUZXh0KCkuaGFzaENvZGUoKTwvd2FybmluZz4pOworCisgICAgaWYgKGRhdGEuaW5uZXIoKSAhPSBudWxsKSB7CisgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oZGF0YS5pbm5lcigpLmhhc2hDb2RlKCkpOworICAgICAgU3lzdGVtLm91dC5wcmludGxuKDx3YXJuaW5nIGRlc2NyPSJNZXRob2QgaW52b2NhdGlvbiAnZGF0YS5pbm5lcigpLmdldFRleHQoKS5oYXNoQ29kZSgpJyBtYXkgcHJvZHVjZSAnamF2YS5sYW5nLk51bGxQb2ludGVyRXhjZXB0aW9uJyI+ZGF0YS5pbm5lcigpLmdldFRleHQoKS5oYXNoQ29kZSgpPC93YXJuaW5nPik7CisgICAgICBpZiAoZGF0YS5pbm5lcigpICE9IG51bGwpIHsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKGRhdGEuaW5uZXIoKS5oYXNoQ29kZSgpKTsKKyAgICAgIH0KKworICAgICAgZGF0YSA9IG5ldyBEYXRhKG51bGwsIDx3YXJuaW5nIGRlc2NyPSJQYXNzaW5nICdudWxsJyBhcmd1bWVudCB0byBub24gYW5ub3RhdGVkIHBhcmFtZXRlciI+bnVsbDwvd2FybmluZz4pOworICAgICAgU3lzdGVtLm91dC5wcmludGxuKDx3YXJuaW5nIGRlc2NyPSJNZXRob2QgaW52b2NhdGlvbiAnZGF0YS5pbm5lcigpLmhhc2hDb2RlKCknIG1heSBwcm9kdWNlICdqYXZhLmxhbmcuTnVsbFBvaW50ZXJFeGNlcHRpb24nIj5kYXRhLmlubmVyKCkuaGFzaENvZGUoKTwvd2FybmluZz4pOworICAgIH0KKyAgfQorCisgIHZvaWQgbWFpbjIoRGF0YSBkYXRhKSB7CisgICAgaWYgKGRhdGEuaW5uZXIoKSAhPSBudWxsICYmIGRhdGEuaW5uZXIoKS5nZXRUZXh0KCkgIT0gbnVsbCkgeworICAgICAgU3lzdGVtLm91dC5wcmludGxuKGRhdGEuaW5uZXIoKS5oYXNoQ29kZSgpKTsKKyAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihkYXRhLmlubmVyKCkuZ2V0VGV4dCgpLmhhc2hDb2RlKCkpOworICAgIH0KKyAgfQorCisgIHZvaWQgbWFpbjMoRGF0YSBkYXRhKSB7CisgICAgaWYgKGRhdGEuaW5uZXJPdmVycmlkZGVuKCkgIT0gbnVsbCkgeworICAgICAgU3lzdGVtLm91dC5wcmludGxuKGRhdGEuaW5uZXJPdmVycmlkZGVuKCkuaGFzaENvZGUoKSk7CisgICAgfQorICAgIGlmIChkYXRhLnNvbWV0aGluZygpICE9IG51bGwpIHsKKyAgICAgIFN5c3RlbS5vdXQucHJpbnRsbig8d2FybmluZyBkZXNjcj0iTWV0aG9kIGludm9jYXRpb24gJ2RhdGEuc29tZXRoaW5nKCkuaGFzaENvZGUoKScgbWF5IHByb2R1Y2UgJ2phdmEubGFuZy5OdWxsUG9pbnRlckV4Y2VwdGlvbiciPmRhdGEuc29tZXRoaW5nKCkuaGFzaENvZGUoKTwvd2FybmluZz4pOworICAgIH0KKyAgfQorCisgIHByaXZhdGUgc3RhdGljIGNsYXNzIERhdGEgeworICAgIEBOdWxsYWJsZSBmaW5hbCBTdHJpbmcgdGV4dDsKKyAgICBATnVsbGFibGUgZmluYWwgRGF0YSBpbm5lcjsKKworICAgIERhdGEoQE51bGxhYmxlIFN0cmluZyB0ZXh0LCBEYXRhIGlubmVyKSB7CisgICAgICB0aGlzLnRleHQgPSB0ZXh0OworICAgICAgdGhpcy5pbm5lciA9IGlubmVyOworICAgIH0KKworICAgIEBOdWxsYWJsZQorICAgIHB1YmxpYyBTdHJpbmcgZ2V0VGV4dCgpIHsKKyAgICAgIHJldHVybiB0ZXh0OworICAgIH0KKworICAgIEBOdWxsYWJsZQorICAgIHB1YmxpYyBEYXRhIGlubmVyKCkgeworICAgICAgcmV0dXJuIGlubmVyOworICAgIH0KKworICAgIEBOdWxsYWJsZQorICAgIHB1YmxpYyBEYXRhIGlubmVyT3ZlcnJpZGRlbigpIHsKKyAgICAgIHJldHVybiBpbm5lcjsKKyAgICB9CisKKyAgICBATnVsbGFibGUKKyAgICBwdWJsaWMgU3RyaW5nIHNvbWV0aGluZygpIHsKKyAgICAgIHJldHVybiBuZXcgU3RyaW5nKCk7CisgICAgfQorICB9CisKKyAgY2xhc3MgRGF0YUltcGwgZXh0ZW5kcyBEYXRhIHsKKyAgICBEYXRhSW1wbChATnVsbGFibGUgU3RyaW5nIHRleHQsIERhdGEgaW5uZXIpIHsKKyAgICAgIHN1cGVyKHRleHQsIGlubmVyKTsKKyAgICB9CisKKyAgICBATnVsbGFibGUKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgRGF0YSBpbm5lck92ZXJyaWRkZW4oKSB7CisgICAgICByZXR1cm4gc3VwZXIuaW5uZXJPdmVycmlkZGVuKCk7CisgICAgfQorICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGF0YUZsb3cvZml4dHVyZS9DaGFpbmVkRmluYWxGaWVsZHNEZmEuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RhdGFGbG93L2ZpeHR1cmUvQ2hhaW5lZEZpbmFsRmllbGRzRGZhLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDA5NmQ4MgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RhdGFGbG93L2ZpeHR1cmUvQ2hhaW5lZEZpbmFsRmllbGRzRGZhLmphdmEKQEAgLTAsMCArMSw0MCBAQAoraW1wb3J0IG9yZy5qZXRicmFpbnMuYW5ub3RhdGlvbnMuTnVsbGFibGU7CitwdWJsaWMgY2xhc3MgQnJva2VuQWxpZ25tZW50IHsKKworICB2b2lkIG1haW4oRGF0YSBkYXRhKSB7CisgICAgaWYgKGRhdGEudGV4dCAhPSBudWxsKSB7CisgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oZGF0YS50ZXh0Lmhhc2hDb2RlKCkpOworICAgIH0KKworICAgIGRhdGEgPSBuZXcgRGF0YShudWxsLCA8d2FybmluZyBkZXNjcj0iUGFzc2luZyAnbnVsbCcgYXJndW1lbnQgdG8gbm9uIGFubm90YXRlZCBwYXJhbWV0ZXIiPm51bGw8L3dhcm5pbmc+KTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oPHdhcm5pbmcgZGVzY3I9Ik1ldGhvZCBpbnZvY2F0aW9uICdkYXRhLnRleHQuaGFzaENvZGUoKScgbWF5IHByb2R1Y2UgJ2phdmEubGFuZy5OdWxsUG9pbnRlckV4Y2VwdGlvbiciPmRhdGEudGV4dC5oYXNoQ29kZSgpPC93YXJuaW5nPik7CisKKyAgICBpZiAoZGF0YS5pbm5lciAhPSBudWxsKSB7CisgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oZGF0YS5pbm5lci5oYXNoQ29kZSgpKTsKKyAgICAgIFN5c3RlbS5vdXQucHJpbnRsbig8d2FybmluZyBkZXNjcj0iTWV0aG9kIGludm9jYXRpb24gJ2RhdGEuaW5uZXIudGV4dC5oYXNoQ29kZSgpJyBtYXkgcHJvZHVjZSAnamF2YS5sYW5nLk51bGxQb2ludGVyRXhjZXB0aW9uJyI+ZGF0YS5pbm5lci50ZXh0Lmhhc2hDb2RlKCk8L3dhcm5pbmc+KTsKKyAgICAgIGlmICg8d2FybmluZyBkZXNjcj0iQ29uZGl0aW9uICdkYXRhLmlubmVyICE9IG51bGwnIGlzIGFsd2F5cyAndHJ1ZSciPmRhdGEuaW5uZXIgIT0gbnVsbDwvd2FybmluZz4pIHsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKGRhdGEuaW5uZXIuaGFzaENvZGUoKSk7CisgICAgICB9CisKKyAgICAgIGRhdGEgPSBuZXcgRGF0YShudWxsLCA8d2FybmluZyBkZXNjcj0iUGFzc2luZyAnbnVsbCcgYXJndW1lbnQgdG8gbm9uIGFubm90YXRlZCBwYXJhbWV0ZXIiPm51bGw8L3dhcm5pbmc+KTsKKyAgICAgIFN5c3RlbS5vdXQucHJpbnRsbig8d2FybmluZyBkZXNjcj0iTWV0aG9kIGludm9jYXRpb24gJ2RhdGEuaW5uZXIuaGFzaENvZGUoKScgbWF5IHByb2R1Y2UgJ2phdmEubGFuZy5OdWxsUG9pbnRlckV4Y2VwdGlvbiciPmRhdGEuaW5uZXIuaGFzaENvZGUoKTwvd2FybmluZz4pOworICAgIH0KKyAgfQorCisgIHZvaWQgbWFpbjIoRGF0YSBkYXRhKSB7CisgICAgaWYgKGRhdGEuaW5uZXIgIT0gbnVsbCAmJiBkYXRhLmlubmVyLnRleHQgIT0gbnVsbCkgeworICAgICAgU3lzdGVtLm91dC5wcmludGxuKGRhdGEuaW5uZXIuaGFzaENvZGUoKSk7CisgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oZGF0YS5pbm5lci50ZXh0Lmhhc2hDb2RlKCkpOworICAgIH0KKyAgfQorCisgIHByaXZhdGUgc3RhdGljIGNsYXNzIERhdGEgeworICAgIEBOdWxsYWJsZSBwdWJsaWMgZmluYWwgU3RyaW5nIHRleHQ7CisgICAgQE51bGxhYmxlIHB1YmxpYyBmaW5hbCBEYXRhIGlubmVyOworCisgICAgRGF0YShATnVsbGFibGUgU3RyaW5nIHRleHQsIERhdGEgaW5uZXIpIHsKKyAgICAgIHRoaXMudGV4dCA9IHRleHQ7CisgICAgICB0aGlzLmlubmVyID0gaW5uZXI7CisgICAgfQorICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGF0YUZsb3cvZml4dHVyZS9DaGVja0ZpZWxkSW5pdGlhbGl6ZXJzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kYXRhRmxvdy9maXh0dXJlL0NoZWNrRmllbGRJbml0aWFsaXplcnMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNmE4N2FjCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGF0YUZsb3cvZml4dHVyZS9DaGVja0ZpZWxkSW5pdGlhbGl6ZXJzLmphdmEKQEAgLTAsMCArMSwxMyBAQAoraW1wb3J0IG9yZy5qZXRicmFpbnMuYW5ub3RhdGlvbnMuTm90TnVsbDsKK2ltcG9ydCBvcmcuamV0YnJhaW5zLmFubm90YXRpb25zLk51bGxhYmxlOworCisKK2NsYXNzIEZvbyB7CisgIEBOdWxsYWJsZSBzdGF0aWMgT2JqZWN0IGZvbygpIHsgcmV0dXJuIG51bGw7IH0KKyAgc3RhdGljIFN0cmluZyBiYXIoQE5vdE51bGwgT2JqZWN0IGFyZykgeyByZXR1cm4gIiI7IH0KK30KK2NsYXNzIEJhciB7CisgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIHMgPSBGb28uYmFyKDx3YXJuaW5nIGRlc2NyPSJBcmd1bWVudCAnRm9vLmZvbygpJyBtaWdodCBiZSBudWxsIj5Gb28uZm9vKCk8L3dhcm5pbmc+KTsKKyAgQE5vdE51bGwgcHVibGljIHN0YXRpYyBPYmplY3QgbyA9IDx3YXJuaW5nIGRlc2NyPSJFeHByZXNzaW9uICdGb28uZm9vKCknIG1pZ2h0IGV2YWx1YXRlIHRvIG51bGwgYnV0IGlzIGFzc2lnbmVkIHRvIGEgdmFyaWFibGUgdGhhdCBpcyBhbm5vdGF0ZWQgd2l0aCBATm90TnVsbCI+Rm9vLmZvbygpPC93YXJuaW5nPjsKKworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RhdGFGbG93L2ZpeHR1cmUvQ29tcGFyaW5nVG9Ob3ROdWxsU2hvdWxkTm90QWZmZWN0TnVsbGl0eS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGF0YUZsb3cvZml4dHVyZS9Db21wYXJpbmdUb05vdE51bGxTaG91bGROb3RBZmZlY3ROdWxsaXR5LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjQ0YjZmOAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RhdGFGbG93L2ZpeHR1cmUvQ29tcGFyaW5nVG9Ob3ROdWxsU2hvdWxkTm90QWZmZWN0TnVsbGl0eS5qYXZhCkBAIC0wLDAgKzEsMjYgQEAKK2ltcG9ydCBvcmcuamV0YnJhaW5zLmFubm90YXRpb25zLk5vdE51bGw7CisKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKKworcHVibGljIGNsYXNzIEJhcjMgeworCisgIEBOb3ROdWxsCisgIE9iamVjdCBnZXRPYmooKSB7CisgICAgcmV0dXJuIG5ldyBPYmplY3QoKTsKKyAgfQorCisgIHZvaWQgZm9vKENvbGxlY3Rpb248T2JqZWN0PiBjb2xsZWN0aW9uKSB7CisgICAgaWYgKCFjb2xsZWN0aW9uLmlzRW1wdHkoKSkgeworICAgICAgT2JqZWN0IGZpcnN0ID0gY29sbGVjdGlvbi5pdGVyYXRvcigpLm5leHQoKTsKKyAgICAgIGlmIChmaXJzdCAhPSBnZXRPYmooKSB8fCBjb2xsZWN0aW9uLnNpemUoKSA+IDApIHsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKGZpcnN0Lmhhc2hDb2RlKCkpOworICAgICAgfQorICAgICAgaWYgKGZpcnN0ID09IGdldE9iaigpIHx8IGNvbGxlY3Rpb24uc2l6ZSgpID4gMCkgeworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oZmlyc3QuaGFzaENvZGUoKSk7CisgICAgICB9CisgICAgICBpZiAoZmlyc3QgPT0gbnVsbCkgeworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oPHdhcm5pbmcgZGVzY3I9Ik1ldGhvZCBpbnZvY2F0aW9uICdmaXJzdC5oYXNoQ29kZSgpJyBtYXkgcHJvZHVjZSAnamF2YS5sYW5nLk51bGxQb2ludGVyRXhjZXB0aW9uJyI+Zmlyc3QuaGFzaENvZGUoKTwvd2FybmluZz4pOworICAgICAgfQorICAgIH0KKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RhdGFGbG93L2ZpeHR1cmUvQ29uc3RhbnREb3VibGVDb21wYXJpc29ucy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGF0YUZsb3cvZml4dHVyZS9Db25zdGFudERvdWJsZUNvbXBhcmlzb25zLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjEyNmFjMQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RhdGFGbG93L2ZpeHR1cmUvQ29uc3RhbnREb3VibGVDb21wYXJpc29ucy5qYXZhCkBAIC0wLDAgKzEsMTEgQEAKK2NsYXNzIEZvbyB7CisKKyAgcHJpdmF0ZSB2b2lkIGZvbygpIHsKKyAgICBkb3VibGUgZCA9IERvdWJsZS5NSU5fVkFMVUU7CisgICAgd2hpbGUgKHRydWUpIHsKKyAgICAgIGlmIChkID09IERvdWJsZS5NSU5fVkFMVUUpIHsKKyAgICAgICAgZCA9IDA7CisgICAgICB9CisgICAgfQorICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGF0YUZsb3cvZml4dHVyZS9Db250aW51ZUZsdXNoZXNMb29wVmFyaWFibGUuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RhdGFGbG93L2ZpeHR1cmUvQ29udGludWVGbHVzaGVzTG9vcFZhcmlhYmxlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDMyODUyMQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RhdGFGbG93L2ZpeHR1cmUvQ29udGludWVGbHVzaGVzTG9vcFZhcmlhYmxlLmphdmEKQEAgLTAsMCArMSwyOCBAQAoraW1wb3J0IG9yZy5qZXRicmFpbnMuYW5ub3RhdGlvbnMuTm90TnVsbDsKK2ltcG9ydCBvcmcuamV0YnJhaW5zLmFubm90YXRpb25zLk51bGxhYmxlOworCitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOworaW1wb3J0IGphdmEuc3FsLlNRTEV4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuTWFwOworCitwdWJsaWMgY2xhc3MgTWFpbiB7CisgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGVzY2FwZUFuZFVuZXNjYXBlU3ltYm9scyhTdHJpbmcgcywgU3RyaW5nQnVpbGRlciBidWlsZGVyKSB7CisgICAgYm9vbGVhbiBlc2NhcGVkID0gZmFsc2U7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzLmxlbmd0aCgpOyBpKyspIHsKKyAgICAgIGZpbmFsIGNoYXIgY2ggPSBzLmNoYXJBdChpKTsKKyAgICAgIGlmIChlc2NhcGVkKSB7CisgICAgICAgIGlmIChjaD09J24nKSBidWlsZGVyLmFwcGVuZCgnXG4nKTsKKyAgICAgICAgaWYgKDx3YXJuaW5nIGRlc2NyPSJDb25kaXRpb24gJ2VzY2FwZWQnIGlzIGFsd2F5cyAndHJ1ZSciPmVzY2FwZWQ8L3dhcm5pbmc+KSBicmVhazsKKyAgICAgICAgZXNjYXBlZCA9IGZhbHNlOworICAgICAgICBjb250aW51ZTsKKyAgICAgIH0KKyAgICAgIGlmIChjaCA9PSAnXFwnKSB7CisgICAgICAgIGVzY2FwZWQgPSB0cnVlOworICAgICAgICBjb250aW51ZTsKKyAgICAgIH0KKyAgICAgIGJ1aWxkZXIuYXBwZW5kKGNoKTsKKyAgICB9CisgICAgcmV0dXJuIGJ1aWxkZXIudG9TdHJpbmcoKTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RhdGFGbG93L2ZpeHR1cmUvRXF1YWxzQ29uc3RhbnQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RhdGFGbG93L2ZpeHR1cmUvRXF1YWxzQ29uc3RhbnQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNGQxYTE1Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGF0YUZsb3cvZml4dHVyZS9FcXVhbHNDb25zdGFudC5qYXZhCkBAIC0wLDAgKzEsMTAgQEAKK2ltcG9ydCBvcmcuamV0YnJhaW5zLmFubm90YXRpb25zLio7CitjbGFzcyBDbGFzczEgeworICBwdWJsaWMgdm9pZCBmKEBOdWxsYWJsZSBPYmplY3QgbykgeworICAgIG8gPSBvICE9IG51bGwgPyBvIDogQ2xhc3MyLk87CisgICAgby50b1N0cmluZygpOworICB9Cit9CitjbGFzcyBDbGFzczIgeworICBzdGF0aWMgZmluYWwgT2JqZWN0IE8gPSBuZXcgT2JqZWN0KCk7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGF0YUZsb3cvZml4dHVyZS9FcXVhbHNFbnVtQ29uc3RhbnQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RhdGFGbG93L2ZpeHR1cmUvRXF1YWxzRW51bUNvbnN0YW50LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjBlN2I1OQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RhdGFGbG93L2ZpeHR1cmUvRXF1YWxzRW51bUNvbnN0YW50LmphdmEKQEAgLTAsMCArMSwxMyBAQAoraW1wb3J0IG9yZy5qZXRicmFpbnMuYW5ub3RhdGlvbnMuKjsKK2NsYXNzIFRlc3RJREVBV2FybiB7CisgIHZvaWQgbWV0aG9kKEBOdWxsYWJsZSBNeUVudW0gZSkgeworICAgIGlmIChlICE9IE15RW51bS5mb28pIHtyZXR1cm47fQorICAgIFN5c3RlbS5vdXQucHJpbnRsbihlLmhhc2hDb2RlKCkpOworICB9CisgIHZvaWQgbWV0aG9kMihATnVsbGFibGUgTXlFbnVtIGUpIHsKKyAgICBpZiAoZSA9PSBNeUVudW0uZm9vKSB7CisgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oZS5oYXNoQ29kZSgpKTsKKyAgICB9CisgIH0KK30KK2VudW0gTXlFbnVtIHsgZm9vLCBiYXIgfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RhdGFGbG93L2ZpeHR1cmUvRXF1YWxzSW1wbGllc05vdE51bGwuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RhdGFGbG93L2ZpeHR1cmUvRXF1YWxzSW1wbGllc05vdE51bGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MzI3NjQ0Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGF0YUZsb3cvZml4dHVyZS9FcXVhbHNJbXBsaWVzTm90TnVsbC5qYXZhCkBAIC0wLDAgKzEsMjQgQEAKK2ltcG9ydCBvcmcuamV0YnJhaW5zLmFubm90YXRpb25zLk5vdE51bGw7CisKK2NsYXNzIFRlc3QgeworICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisgICAgT2JqZWN0IGZpcnN0ID0gbnVsbDsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IDEwOyBpKyspIHsKKyAgICAgIGlmICghImIiLmVxdWFscyhmaXJzdCkpIHsKKyAgICAgICAgZmlyc3QgPSAiYiI7CisgICAgICB9CisgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oZmlyc3QudG9TdHJpbmcoKSk7CisgICAgfQorICB9CisKKyAgcHVibGljIHZvaWQgYnVnZ3lJbnNwZWN0aW9uRXhhbXBsZShPYmplY3QgcGFyZW50Tm9kZSkgeworICAgIGZpbmFsIFN0cmluZyBwYXJlbnROYW1lID0gcGFyZW50Tm9kZSA9PSBudWxsID8gbnVsbCA6IHBhcmVudE5vZGUudG9TdHJpbmcoKTsKKyAgICBpZiAoIlRvcGljcyIuZXF1YWxzKHBhcmVudE5hbWUpKSB7CisgICAgICBTeXN0ZW0ub3V0LnByaW50bG4ocGFyZW50Tm9kZS50b1N0cmluZygpKTsKKyAgICB9IGVsc2UgaWYgKCJRdWV1ZXMiLmVxdWFscyhwYXJlbnROYW1lKSkgeworICAgICAgU3lzdGVtLm91dC5wcmludGxuKHBhcmVudE5vZGUudG9TdHJpbmcoKSk7CisgICAgfQorICAgIFN5c3RlbS5vdXQucHJpbnRsbig8d2FybmluZyBkZXNjcj0iTWV0aG9kIGludm9jYXRpb24gJ3BhcmVudE5vZGUudG9TdHJpbmcoKScgbWF5IHByb2R1Y2UgJ2phdmEubGFuZy5OdWxsUG9pbnRlckV4Y2VwdGlvbiciPnBhcmVudE5vZGUudG9TdHJpbmcoKTwvd2FybmluZz4pOworICB9CisKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kYXRhRmxvdy9maXh0dXJlL0VxdWFsc05vdE51bGwuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RhdGFGbG93L2ZpeHR1cmUvRXF1YWxzTm90TnVsbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA0NTljOTAKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kYXRhRmxvdy9maXh0dXJlL0VxdWFsc05vdE51bGwuamF2YQpAQCAtMCwwICsxLDc3IEBACitpbXBvcnQgb3JnLmpldGJyYWlucy5hbm5vdGF0aW9ucy5Ob3ROdWxsOworaW1wb3J0IG9yZy5qZXRicmFpbnMuYW5ub3RhdGlvbnMuTnVsbGFibGU7CisKK3B1YmxpYyBjbGFzcyBNYWluIHsKKyAgQE5vdE51bGwKKyAgcHJpdmF0ZSBPYmplY3QgdGVzdDEoQE5vdE51bGwgT2JqZWN0IGRlZlZhbCwgQE51bGxhYmxlIGZpbmFsIE9iamVjdCB2YWwpIHsKKyAgICByZXR1cm4gZGVmVmFsOworICB9CisgIEBOb3ROdWxsCisgIHByaXZhdGUgT2JqZWN0IHRlc3QxMShATm90TnVsbCBPYmplY3QgZGVmVmFsLCBATnVsbGFibGUgZmluYWwgT2JqZWN0IHZhbCkgeworICAgIGlmICh2YWwgIT0gbnVsbCkgeworICAgICAgcmV0dXJuIHZhbDsKKyAgICB9CisgICAgcmV0dXJuIGRlZlZhbDsKKyAgfQorICBATm90TnVsbAorICBwcml2YXRlIE9iamVjdCB0ZXN0NShATm90TnVsbCBPYmplY3QgZGVmVmFsLCBATnVsbGFibGUgZmluYWwgT2JqZWN0IHZhbCkgeworICAgIGlmIChkZWZWYWwgPT0gdmFsKSB7CisgICAgICByZXR1cm4gdmFsOworICAgIH0KKyAgICByZXR1cm4gZGVmVmFsOworICB9CisgIEBOb3ROdWxsCisgIHByaXZhdGUgT2JqZWN0IHRlc3Q2KEBOb3ROdWxsIE9iamVjdCBkZWZWYWwsIEBOdWxsYWJsZSBmaW5hbCBPYmplY3QgdmFsKSB7CisgICAgaWYgKHZhbCA9PSBkZWZWYWwpIHsKKyAgICAgIHJldHVybiB2YWw7CisgICAgfQorICAgIHJldHVybiBkZWZWYWw7CisgIH0KKyAgQE5vdE51bGwKKyAgcHJpdmF0ZSBPYmplY3QgdGVzdDcoQE5vdE51bGwgT2JqZWN0IGRlZlZhbCwgQE51bGxhYmxlIGZpbmFsIE9iamVjdCB2YWwpIHsKKyAgICBpZiAoPHdhcm5pbmcgZGVzY3I9Ik1ldGhvZCBpbnZvY2F0aW9uICd2YWwuZXF1YWxzKGRlZlZhbCknIG1heSBwcm9kdWNlICdqYXZhLmxhbmcuTnVsbFBvaW50ZXJFeGNlcHRpb24nIj52YWwuZXF1YWxzKGRlZlZhbCk8L3dhcm5pbmc+KSB7CisgICAgICByZXR1cm4gZGVmVmFsOworICAgIH0KKyAgICByZXR1cm4gZGVmVmFsOworICB9CisgIEBOb3ROdWxsCisgIHByaXZhdGUgT2JqZWN0IHRlc3Q4KEBOb3ROdWxsIE9iamVjdCBkZWZWYWwsIEBOdWxsYWJsZSBmaW5hbCBPYmplY3QgdmFsKSB7CisgICAgaWYgKGRlZlZhbC5lcXVhbHModmFsKSkgeworICAgICAgcmV0dXJuIHZhbDsKKyAgICB9CisgICAgcmV0dXJuIGRlZlZhbDsKKyAgfQorICBATm90TnVsbCBwcml2YXRlIE9iamVjdCB0ZXN0OShATm90TnVsbCBPYmplY3QgZGVmVmFsLCBATnVsbGFibGUgZmluYWwgT2JqZWN0IHZhbCkgeworICAgIGlmIChlcXVhbHModmFsKSkgeworICAgICAgcmV0dXJuIHZhbDsKKyAgICB9CisgICAgcmV0dXJuIGRlZlZhbDsKKyAgfQorICBATm90TnVsbCBwcml2YXRlIE9iamVjdCB0ZXN0MTAoQE5vdE51bGwgT2JqZWN0IGRlZlZhbCwgQE51bGxhYmxlIGZpbmFsIE9iamVjdCB2YWwpIHsKKyAgICBpZiAodmFsICE9IG51bGwpIHsKKyAgICAgIHJldHVybiB2YWw7CisgICAgfQorICAgIGlmIChkZWZWYWwuZXF1YWxzKHZhbCkpIHsKKyAgICAgIHJldHVybiB2YWw7CisgICAgfQorICAgIHJldHVybiBkZWZWYWw7CisgIH0KKworICBATm90TnVsbAorICBwcml2YXRlIHN0YXRpYyBPYmplY3QgdGVzdChATm90TnVsbCBPYmplY3QgZGVmVmFsLCBATnVsbGFibGUgZmluYWwgT2JqZWN0IHZhbCkgeworICAgIGlmICh2YWwgIT0gbnVsbCkgeworICAgICAgcmV0dXJuIHZhbDsKKyAgICB9CisgICAgaWYgKDx3YXJuaW5nIGRlc2NyPSJDb25kaXRpb24gJ2RlZlZhbCA9PSB2YWwnIGlzIGFsd2F5cyAnZmFsc2UnIj5kZWZWYWwgPT0gdmFsPC93YXJuaW5nPikgeworICAgICAgcmV0dXJuIHZhbDsKKyAgICB9CisgICAgaWYgKDx3YXJuaW5nIGRlc2NyPSJDb25kaXRpb24gJ3ZhbCA9PSBkZWZWYWwnIGlzIGFsd2F5cyAnZmFsc2UnIj52YWwgPT0gZGVmVmFsPC93YXJuaW5nPikgeworICAgICAgcmV0dXJuIHZhbDsKKyAgICB9CisgICAgaWYgKGRlZlZhbC5lcXVhbHModmFsKSkgeworICAgICAgcmV0dXJuIHZhbDsKKyAgICB9CisgICAgcmV0dXJuIGRlZlZhbDsKKyAgfQorCit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGF0YUZsb3cvZml4dHVyZS9GaWVsZENoYW5nZWRCZXR3ZWVuU3luY2hyb25pemVkQmxvY2tzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kYXRhRmxvdy9maXh0dXJlL0ZpZWxkQ2hhbmdlZEJldHdlZW5TeW5jaHJvbml6ZWRCbG9ja3MuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MTFlM2EwCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGF0YUZsb3cvZml4dHVyZS9GaWVsZENoYW5nZWRCZXR3ZWVuU3luY2hyb25pemVkQmxvY2tzLmphdmEKQEAgLTAsMCArMSwyMCBAQAorcHVibGljIGNsYXNzIEJhciB7CisgIHByaXZhdGUgT2JqZWN0IGZpZWxkOworICBwcml2YXRlIGZpbmFsIE9iamVjdCBsb2NrID0gbmV3IE9iamVjdCgpOworCisgIHB1YmxpYyB2b2lkIG1haW4oKSB7CisgICAgc3luY2hyb25pemVkIChsb2NrKSB7CisgICAgICBpZiAoZmllbGQgIT0gbnVsbCkgeworICAgICAgICByZXR1cm47CisgICAgICB9CisgICAgfQorICAgIHN5bmNocm9uaXplZCAobG9jaykgeworICAgICAgaWYgKGZpZWxkICE9IG51bGwpIHsKKyAgICAgICAgcmV0dXJuOworICAgICAgfQorICAgICAgaWYgKDx3YXJuaW5nIGRlc2NyPSJDb25kaXRpb24gJ2ZpZWxkID09IG51bGwnIGlzIGFsd2F5cyAndHJ1ZSciPmZpZWxkID09IG51bGw8L3dhcm5pbmc+KSB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigpOworICAgICAgfQorICAgIH0KKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGF0YUZsb3cvZml4dHVyZS9GaWVsZEluQW5vbnltb3VzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kYXRhRmxvdy9maXh0dXJlL0ZpZWxkSW5Bbm9ueW1vdXMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MmQ0YTVkCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGF0YUZsb3cvZml4dHVyZS9GaWVsZEluQW5vbnltb3VzLmphdmEKQEAgLTAsMCArMSwzNiBAQAorY2xhc3MgWm9vMiB7CisgIHByaXZhdGUgYm9vbGVhbiBjb25kaXRpb247CisgIHByaXZhdGUgZmluYWwgYm9vbGVhbiBjb25kaXRpb24yOworCisgIFpvbzIoYm9vbGVhbiBjb25kaXRpb24yKSB7CisgICAgdGhpcy5jb25kaXRpb24yID0gY29uZGl0aW9uMjsKKyAgfQorCisgIFJ1bm5hYmxlIGZvbygpIHsKKyAgICBpZiAoIWNvbmRpdGlvbikgeworICAgICAgcmV0dXJuIG5ldyBSdW5uYWJsZSgpIHsKKworICAgICAgICBwdWJsaWMgdm9pZCBydW4oKSB7CisgICAgICAgICAgaWYgKGNvbmRpdGlvbikgeworICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJhYWEiKTsKKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIH07CisgICAgfQorICAgIGlmICghY29uZGl0aW9uMikgeworICAgICAgcmV0dXJuIG5ldyBSdW5uYWJsZSgpIHsKKworICAgICAgICBwdWJsaWMgdm9pZCBydW4oKSB7CisgICAgICAgICAgaWYgKDx3YXJuaW5nIGRlc2NyPSJDb25kaXRpb24gJ2NvbmRpdGlvbjInIGlzIGFsd2F5cyAnZmFsc2UnIj5jb25kaXRpb24yPC93YXJuaW5nPikgeworICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJhYWEiKTsKKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIH07CisgICAgfQorICAgIHJldHVybiA8d2FybmluZyBkZXNjcj0iJ251bGwnIGlzIHJldHVybmVkIGJ5IHRoZSBtZXRob2Qgd2hpY2ggaXNuJ3QgZGVjbGFyZWQgYXMgQE51bGxhYmxlIj5udWxsPC93YXJuaW5nPjsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHNldENvbmRpdGlvbihib29sZWFuIGNvbmRpdGlvbikgeworICAgIHRoaXMuY29uZGl0aW9uID0gY29uZGl0aW9uOworICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kYXRhRmxvdy9maXh0dXJlL0ZpZWxkSW5pdGlhbGl6ZXJJbkFub255bW91cy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGF0YUZsb3cvZml4dHVyZS9GaWVsZEluaXRpYWxpemVySW5Bbm9ueW1vdXMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZWRkZjM4Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGF0YUZsb3cvZml4dHVyZS9GaWVsZEluaXRpYWxpemVySW5Bbm9ueW1vdXMuamF2YQpAQCAtMCwwICsxLDE4IEBACitpbXBvcnQgb3JnLmpldGJyYWlucy5hbm5vdGF0aW9ucy5OdWxsYWJsZTsKKworY2xhc3MgWm9vMiB7CisKKyAgdm9pZCBmb28oQE51bGxhYmxlIE9iamVjdCBmb28pIHsKKyAgICBpZiAoZm9vID09IG51bGwpIHsKKyAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBuZXcgUnVubmFibGUoKSB7CisgICAgICBpbnQgaGMgPSBmb28uaGFzaENvZGUoKTsKKworICAgICAgcHVibGljIHZvaWQgcnVuKCkgeworICAgICAgfQorICAgIH0ucnVuKCk7CisgIH0KKworfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGF0YUZsb3cvZml4dHVyZS9GaW5hbEZpZWxkc0RpZmZlcmVudEluc3RhbmNlcy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGF0YUZsb3cvZml4dHVyZS9GaW5hbEZpZWxkc0RpZmZlcmVudEluc3RhbmNlcy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVmNDAzZTcKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kYXRhRmxvdy9maXh0dXJlL0ZpbmFsRmllbGRzRGlmZmVyZW50SW5zdGFuY2VzLmphdmEKQEAgLTAsMCArMSwyMSBAQAorcHVibGljIGNsYXNzIEJyb2tlbkFsaWdubWVudCB7CisKKyAgcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBkb21pbmF0ZXMoZmluYWwgV2F0Y2hSZXF1ZXN0SW1wbCByZXF1ZXN0LCBmaW5hbCBXYXRjaFJlcXVlc3RJbXBsIG90aGVyKSB7CisgICAgaWYgKHJlcXVlc3QubXlUb1dhdGNoUmVjdXJzaXZlbHkpIHsKKyAgICAgIHJldHVybiBvdGhlci5teVJvb3RQYXRoLnN0YXJ0c1dpdGgocmVxdWVzdC5teVJvb3RQYXRoKTsKKyAgICB9CisKKyAgICByZXR1cm4gIW90aGVyLm15VG9XYXRjaFJlY3Vyc2l2ZWx5ICYmIHJlcXVlc3QubXlSb290UGF0aC5lcXVhbHMob3RoZXIubXlSb290UGF0aCk7CisgIH0KKworICBwcml2YXRlIHN0YXRpYyBjbGFzcyBXYXRjaFJlcXVlc3RJbXBsIHsKKyAgICBwcml2YXRlIGZpbmFsIGJvb2xlYW4gbXlUb1dhdGNoUmVjdXJzaXZlbHk7CisgICAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgbXlSb290UGF0aCA9ICIiOworCisgICAgcHJpdmF0ZSBXYXRjaFJlcXVlc3RJbXBsKGJvb2xlYW4gdG9XYXRjaFJlY3Vyc2l2ZWx5KSB7CisgICAgICBteVRvV2F0Y2hSZWN1cnNpdmVseSA9IHRvV2F0Y2hSZWN1cnNpdmVseTsKKyAgICB9CisKKyAgfQorCit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGF0YUZsb3cvZml4dHVyZS9GaW5hbEZpZWxkc0luaXRpYWxpemVkQnlBbm5vdGF0ZWRQYXJhbWV0ZXJzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kYXRhRmxvdy9maXh0dXJlL0ZpbmFsRmllbGRzSW5pdGlhbGl6ZWRCeUFubm90YXRlZFBhcmFtZXRlcnMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYjdkMGI0Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGF0YUZsb3cvZml4dHVyZS9GaW5hbEZpZWxkc0luaXRpYWxpemVkQnlBbm5vdGF0ZWRQYXJhbWV0ZXJzLmphdmEKQEAgLTAsMCArMSwzMCBAQAoraW1wb3J0IG9yZy5qZXRicmFpbnMuYW5ub3RhdGlvbnMuTm90TnVsbDsKK2ltcG9ydCBvcmcuamV0YnJhaW5zLmFubm90YXRpb25zLk51bGxhYmxlOworCitpbXBvcnQgamF2YS5sYW5nLk9iamVjdDsKKworcHVibGljIGNsYXNzIERvbyB7CisgIHByaXZhdGUgZmluYWwgT2JqZWN0IG15QTsKKyAgcHJpdmF0ZSBmaW5hbCBPYmplY3QgbXlCOworICBwcml2YXRlIGZpbmFsIE9iamVjdCBteUM7CisKKyAgcHVibGljIERvbyhATnVsbGFibGUgT2JqZWN0IG15QSwgQE5vdE51bGwgT2JqZWN0IG15QiwgT2JqZWN0IGMpIHsKKyAgICB0aGlzLm15QSA9IG15QTsKKyAgICB0aGlzLm15QiA9IG15QjsKKyAgICBteUMgPSBjOworICB9CisKKyAgaW50IGJhcigpIHsKKyAgICByZXR1cm4gbXlDLmhhc2hDb2RlKCk7CisgIH0KKworCisgIGludCBmb28oKSB7CisgICAgaWYgKDx3YXJuaW5nIGRlc2NyPSJDb25kaXRpb24gJ215QiAhPSBudWxsJyBpcyBhbHdheXMgJ3RydWUnIj5teUIgIT0gbnVsbDwvd2FybmluZz4gJiYKKyAgICA8d2FybmluZyBkZXNjcj0iTWV0aG9kIGludm9jYXRpb24gJ215QS5lcXVhbHMobXlCKScgbWF5IHByb2R1Y2UgJ2phdmEubGFuZy5OdWxsUG9pbnRlckV4Y2VwdGlvbiciPm15QS5lcXVhbHMobXlCKTwvd2FybmluZz4pIHsKKyAgICAgIHJldHVybiAyOworICAgIH0KKworICAgIHJldHVybiBteUEuaGFzaENvZGUoKTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGF0YUZsb3cvZml4dHVyZS9GaW5hbExvb3BWYXJpYWJsZUluc3RhbmNlb2YuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RhdGFGbG93L2ZpeHR1cmUvRmluYWxMb29wVmFyaWFibGVJbnN0YW5jZW9mLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjYwY2FkOQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RhdGFGbG93L2ZpeHR1cmUvRmluYWxMb29wVmFyaWFibGVJbnN0YW5jZW9mLmphdmEKQEAgLTAsMCArMSwxNiBAQAorcHVibGljIGNsYXNzIFRlc3QgeworCisgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKE9iamVjdFtdIGFyZ3MpIHRocm93cyBFeGNlcHRpb24geworICAgIGJvb2xlYW4gZWx2aXNMaXZlcyA9IGZhbHNlOworICAgIGZvciAoZmluYWwgT2JqZWN0IG8gOiBhcmdzKSB7CisgICAgICBpZiAobyBpbnN0YW5jZW9mIEludGVnZXIpIHsKKyAgICAgICAgZWx2aXNMaXZlcyA9IHRydWU7CisgICAgICB9IGVsc2UgeworICAgICAgICBpZiAoZWx2aXNMaXZlcykgeworICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiRWx2aXMgaXMgYWxpdmUhIik7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisgIH0KKworfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGF0YUZsb3cvZml4dHVyZS9HZW5lcmF0ZWRFcXVhbHMuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RhdGFGbG93L2ZpeHR1cmUvR2VuZXJhdGVkRXF1YWxzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjI1YjQ1MgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RhdGFGbG93L2ZpeHR1cmUvR2VuZXJhdGVkRXF1YWxzLmphdmEKQEAgLTAsMCArMSwyMCBAQAorcHVibGljIGNsYXNzIEJhciB7CisgIGludCBmb287CisKKyAgQE92ZXJyaWRlCisgIHB1YmxpYyBib29sZWFuIGVxdWFscyhPYmplY3QgbykgeworICAgIGlmICh0aGlzID09IG8pIHJldHVybiB0cnVlOworICAgIGlmICghKG8gaW5zdGFuY2VvZiBCYXIpKSByZXR1cm4gZmFsc2U7CisKKyAgICBCYXIgYmFyID0gKEJhcikgbzsKKworICAgIGlmIChmb28gIT0gYmFyLmZvbykgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIHRydWU7CisgIH0KKworICBAT3ZlcnJpZGUKKyAgcHVibGljIGludCBoYXNoQ29kZSgpIHsKKyAgICByZXR1cm4gZm9vOworICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kYXRhRmxvdy9maXh0dXJlL0dyZWF0ZXJJc05vdEVxdWFscy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGF0YUZsb3cvZml4dHVyZS9HcmVhdGVySXNOb3RFcXVhbHMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZTdjYzVkCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGF0YUZsb3cvZml4dHVyZS9HcmVhdGVySXNOb3RFcXVhbHMuamF2YQpAQCAtMCwwICsxLDggQEAKK2NsYXNzIFpvbzIgeworICB2b2lkIGZvbyhqYXZhLnV0aWwuTGlzdFtdIGRlYWxzSW5mbykgeworICAgIGZpbmFsIGludCBkZWFsc051bWJlciA9IGRlYWxzSW5mbyAhPSBudWxsICYmIGRlYWxzSW5mby5sZW5ndGggPT0gMiA/IGRlYWxzSW5mb1swXS5zaXplKCkgOiAwOworICAgIGlmIChkZWFsc051bWJlciA+IDApIHsKKyAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihkZWFsc0luZm9bMF0uZ2V0KDApKTsKKyAgICB9CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RhdGFGbG93L2ZpeHR1cmUvSURFQTg0NDg5LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kYXRhRmxvdy9maXh0dXJlL0lERUE4NDQ4OS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIwMjMwYTcKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kYXRhRmxvdy9maXh0dXJlL0lERUE4NDQ4OS5qYXZhCkBAIC0wLDAgKzEsMTEgQEAKK2NsYXNzIE1haW4geworICBzdGF0aWMgY2xhc3MgVXNlciB7CisgICAgcHVibGljIGludCBSZWdpc3RyYXRpb25TdGF0ZTsKKyAgfQorCisgIHB1YmxpYyBzdGF0aWMgdm9pZCBmdW4oVXNlciB1c2VyKSB7CisgICAgaWYgKCh1c2VyLlJlZ2lzdHJhdGlvblN0YXRlID09IDUgfHwgdXNlci5SZWdpc3RyYXRpb25TdGF0ZSA9PSAxMCkgPT0gdHJ1ZSkgeworCisgICAgfQorICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kYXRhRmxvdy9maXh0dXJlL0xhc3RDb25zdGFudENvbmRpdGlvbkluQW5kLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kYXRhRmxvdy9maXh0dXJlL0xhc3RDb25zdGFudENvbmRpdGlvbkluQW5kLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmUyN2FhNzEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kYXRhRmxvdy9maXh0dXJlL0xhc3RDb25zdGFudENvbmRpdGlvbkluQW5kLmphdmEKQEAgLTAsMCArMSwxNCBAQAorY2xhc3MgRnVuIHsKKyAgcHJpdmF0ZSB2b2lkIHBhcnNlRGVjbGFyYXRvcihPYmplY3QgYnVpbGRlciwgYm9vbGVhbiBpc1R1cGxlKSB7CisgICAgaWYgKCFpc1R1cGxlKSB7CisgICAgICByZXR1cm47CisgICAgfQorICAgIGVsc2UgeworICAgICAgaWYgKHNtdGgoKSAmJiA8d2FybmluZyBkZXNjcj0iQ29uZGl0aW9uICdpc1R1cGxlJyBpcyBhbHdheXMgJ3RydWUnIHdoZW4gcmVhY2hlZCI+aXNUdXBsZTwvd2FybmluZz4pIHsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCk7CisgICAgICB9CisgICAgfQorICB9CisKKyAgYm9vbGVhbiBzbXRoKCkgeyByZXR1cm4gdHJ1ZTsgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RhdGFGbG93L2ZpeHR1cmUvTG9jYWxDbGFzcy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGF0YUZsb3cvZml4dHVyZS9Mb2NhbENsYXNzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzYxOTZlYwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RhdGFGbG93L2ZpeHR1cmUvTG9jYWxDbGFzcy5qYXZhCkBAIC0wLDAgKzEsMTcgQEAKK2ltcG9ydCBvcmcuamV0YnJhaW5zLmFubm90YXRpb25zLk5vdE51bGw7CitpbXBvcnQgb3JnLmpldGJyYWlucy5hbm5vdGF0aW9ucy5OdWxsYWJsZTsKKworY2xhc3MgVGVzdCB7CisgIHZvaWQgZihATnVsbGFibGUgZmluYWwgT2JqZWN0IHgpIHsKKyAgICBpZiAoeCAhPSBudWxsKSB7CisgICAgICBjbGFzcyBDIHsKKyAgICAgICAgQyhATm90TnVsbCBPYmplY3QgeCkgeworICAgICAgICB9CisKKyAgICAgICAgQygpIHsKKyAgICAgICAgICB0aGlzKHgpOworICAgICAgICB9CisgICAgICB9CisgICAgfQorICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGF0YUZsb3cvZml4dHVyZS9NZXRob2RDYWxsRmx1c2hlc0ZpZWxkLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kYXRhRmxvdy9maXh0dXJlL01ldGhvZENhbGxGbHVzaGVzRmllbGQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNDNjNzZlCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGF0YUZsb3cvZml4dHVyZS9NZXRob2RDYWxsRmx1c2hlc0ZpZWxkLmphdmEKQEAgLTAsMCArMSwyMSBAQAoraW1wb3J0IG9yZy5qZXRicmFpbnMuYW5ub3RhdGlvbnMuTnVsbGFibGU7CisKK2NsYXNzIEZ1biB7CisgIEBOdWxsYWJsZQorICBwcml2YXRlIE9iamVjdCBmb287CisKKyAgcHVibGljIEZ1bigpIHsKKyAgICBmb28gPSBuZXcgT2JqZWN0KCk7CisgICAgbWFrZU1hZ2ljKCk7CisKKyAgICBpZiAobnVsbCA9PSBmb28pIHsKKyAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiaGVsbG8iKTsKKyAgICB9CisKKyAgfQorCisgIHByaXZhdGUgdm9pZCBtYWtlTWFnaWMoKSB7CisgICAgZm9vID0gbnVsbDsKKyAgfQorCit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGF0YUZsb3cvZml4dHVyZS9NdWx0aUNhdGNoLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kYXRhRmxvdy9maXh0dXJlL011bHRpQ2F0Y2guamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZmZjNGExCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGF0YUZsb3cvZml4dHVyZS9NdWx0aUNhdGNoLmphdmEKQEAgLTAsMCArMSwzOCBAQAorLyoKKyAqIENvcHlyaWdodCAyMDAwLTIwMTIgSmV0QnJhaW5zIHMuci5vLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KK2ltcG9ydCBvcmcuamV0YnJhaW5zLmFubm90YXRpb25zLk5vdE51bGw7CitpbXBvcnQgb3JnLmpldGJyYWlucy5hbm5vdGF0aW9ucy5OdWxsYWJsZTsKKworaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CitpbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLnNxbC5TUUxFeGNlcHRpb247CitpbXBvcnQgamF2YS51dGlsLk1hcDsKKworY2xhc3MgTXVsdGljYXRjaCB7CisgIEBOb3ROdWxsCisgIHB1YmxpYyBNYXAgdGVzdChTdHJpbmcgbmFtZSkgeworICAgIHRyeSAoSW5wdXRTdHJlYW0gcyA9IGJ1aWxkKCkpIHsKKyAgICAgIHJldHVybiA8d2FybmluZyBkZXNjcj0iJ251bGwnIGlzIHJldHVybmVkIGJ5IHRoZSBtZXRob2QgZGVjbGFyZWQgYXMgQE5vdE51bGwiPm51bGw8L3dhcm5pbmc+OworICAgIH0gY2F0Y2ggKFNRTEV4Y2VwdGlvbiB8IElPRXhjZXB0aW9uIGUpIHsKKyAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKGUpOworICAgIH0KKyAgfQorCisgIHByaXZhdGUgSW5wdXRTdHJlYW0gYnVpbGQoKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKKyAgICByZXR1cm4gPHdhcm5pbmcgZGVzY3I9IidudWxsJyBpcyByZXR1cm5lZCBieSB0aGUgbWV0aG9kIHdoaWNoIGlzbid0IGRlY2xhcmVkIGFzIEBOdWxsYWJsZSI+bnVsbDwvd2FybmluZz47CisgIH0KKworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RhdGFGbG93L2ZpeHR1cmUvTXV0YWJsZU5vdEFubm90YXRlZEZpZWxkc1RyZWF0bWVudC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGF0YUZsb3cvZml4dHVyZS9NdXRhYmxlTm90QW5ub3RhdGVkRmllbGRzVHJlYXRtZW50LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTdjNjdlMAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RhdGFGbG93L2ZpeHR1cmUvTXV0YWJsZU5vdEFubm90YXRlZEZpZWxkc1RyZWF0bWVudC5qYXZhCkBAIC0wLDAgKzEsNjggQEAKK2ltcG9ydCBvcmcuamV0YnJhaW5zLmFubm90YXRpb25zLk51bGxhYmxlOworCitjbGFzcyBGb28geworICBPYmplY3QgZGF0YTsKKworICB2b2lkIGNoZWNrTm90TnVsbEFuZFVzZShGb28gZikgeworICAgIGlmIChmLmRhdGEgIT0gbnVsbCkgeworICAgICAgU3lzdGVtLm91dC5wcmludGxuKGYuZGF0YS5oYXNoQ29kZSgpKTsKKyAgICB9CisgIH0KKworICB2b2lkIGNoZWNrTnVsbEFuZFJldHVybihGb28gZikgeworICAgIGlmIChmLmRhdGEgPT0gbnVsbCkgeworICAgICAgcmV0dXJuOworICAgIH0KKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oZi5kYXRhLmhhc2hDb2RlKCkpOworICB9CisKKyAgdm9pZCB3YXJuV2hlbldyb25nQ2hlY2soKSB7CisgICAgaWYgKGRhdGEgIT0gbnVsbCkgeworICAgICAgcmV0dXJuOworICAgIH0KKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oPHdhcm5pbmcgZGVzY3I9Ik1ldGhvZCBpbnZvY2F0aW9uICdkYXRhLmhhc2hDb2RlKCknIG1heSBwcm9kdWNlICdqYXZhLmxhbmcuTnVsbFBvaW50ZXJFeGNlcHRpb24nIj5kYXRhLmhhc2hDb2RlKCk8L3dhcm5pbmc+KTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oZGF0YS5oYXNoQ29kZSgpKTsKKyAgfQorCisgIHZvaWQgZG9udFdhcm5XaGVuTm90Q2hlY2tlZChGb28gZikgeworICAgIFN5c3RlbS5vdXQucHJpbnRsbihmLmRhdGEuaGFzaENvZGUoKSk7CisgIH0KKyAgCisgIHZvaWQgZG9udFdhcm5XaGVuTm90Q2hlY2tlZFRoaXMoKSB7CisgICAgU3lzdGVtLm91dC5wcmludGxuKGRhdGEuaGFzaENvZGUoKSk7CisgIH0KKyAgCisgIHZvaWQgZG9udFdhcm5XaGVuRG91YmxlQ2hlY2tlZChGb28gZikgeworICAgIGlmIChmLmRhdGEgPT0gbnVsbCkgeworICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAoZi5kYXRhID09IG51bGwpIHsKKyAgICAgIHJldHVybjsKKyAgICB9CisgICAgU3lzdGVtLm91dC5wcmludGxuKGYuZGF0YS5oYXNoQ29kZSgpKTsKKyAgfQorCisgIHZvaWQgZG9udFdhcm5XaGVuRG91YmxlQ2hlY2tlZF9UaGlzX1N5bmNocm9uaXplZCgpIHsKKyAgICBpZiAoZGF0YSA9PSBudWxsKSB7CisgICAgICByZXR1cm47CisgICAgfQorICAgIHN5bmNocm9uaXplZCAodGhpcykgeworICAgICAgaWYgKGRhdGEgPT0gbnVsbCkgeworICAgICAgICByZXR1cm47CisgICAgICB9CisgICAgfQorICAgIFN5c3RlbS5vdXQucHJpbnRsbihkYXRhLmhhc2hDb2RlKCkpOworICB9CisgIAorICB2b2lkIGRvbnRXYXJuV2hlbkRvdWJsZUNoZWNrZWRfVGhpc19XaXRoTWV0aG9kQ2FsbCgpIHsKKyAgICBpZiAoZGF0YSA9PSBudWxsKSB7CisgICAgICByZXR1cm47CisgICAgfQorICAgIFN5c3RlbS5vdXQucHJpbnRsbihkYXRhLmhhc2hDb2RlKCkpOworICAgIGlmIChkYXRhID09IG51bGwpIHsKKyAgICAgIHJldHVybjsKKyAgICB9CisgICAgU3lzdGVtLm91dC5wcmludGxuKGRhdGEuaGFzaENvZGUoKSk7CisgIH0KKworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RhdGFGbG93L2ZpeHR1cmUvTXV0YWJsZU51bGxhYmxlRmllbGRzVHJlYXRtZW50LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kYXRhRmxvdy9maXh0dXJlL011dGFibGVOdWxsYWJsZUZpZWxkc1RyZWF0bWVudC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVlMmIxODEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kYXRhRmxvdy9maXh0dXJlL011dGFibGVOdWxsYWJsZUZpZWxkc1RyZWF0bWVudC5qYXZhCkBAIC0wLDAgKzEsNzAgQEAKK2ltcG9ydCBvcmcuamV0YnJhaW5zLmFubm90YXRpb25zLk51bGxhYmxlOworCitjbGFzcyBGb28geworICBATnVsbGFibGUgT2JqZWN0IGRhdGE7CisKKyAgdm9pZCBjaGVja05vdE51bGxBbmRVc2UoRm9vIGYpIHsKKyAgICBpZiAoZi5kYXRhICE9IG51bGwpIHsKKyAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihmLmRhdGEuaGFzaENvZGUoKSk7CisgICAgfQorICB9CisKKyAgdm9pZCBjaGVja051bGxBbmRSZXR1cm4oRm9vIGYpIHsKKyAgICBpZiAoZi5kYXRhID09IG51bGwpIHsKKyAgICAgIHJldHVybjsKKyAgICB9CisgICAgU3lzdGVtLm91dC5wcmludGxuKGYuZGF0YS5oYXNoQ29kZSgpKTsKKyAgfQorCisgIHZvaWQgd2FybldoZW5Xcm9uZ0NoZWNrKCkgeworICAgIGlmIChkYXRhICE9IG51bGwpIHsKKyAgICAgIHJldHVybjsKKyAgICB9CisgICAgU3lzdGVtLm91dC5wcmludGxuKDx3YXJuaW5nIGRlc2NyPSJNZXRob2QgaW52b2NhdGlvbiAnZGF0YS5oYXNoQ29kZSgpJyBtYXkgcHJvZHVjZSAnamF2YS5sYW5nLk51bGxQb2ludGVyRXhjZXB0aW9uJyI+ZGF0YS5oYXNoQ29kZSgpPC93YXJuaW5nPik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKGRhdGEuaGFzaENvZGUoKSk7CisgIH0KKworICB2b2lkIHdhcm5XaGVuTm90Q2hlY2tlZE9uY2UoRm9vIGYpIHsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oPHdhcm5pbmcgZGVzY3I9Ik1ldGhvZCBpbnZvY2F0aW9uICdmLmRhdGEuaGFzaENvZGUoKScgbWF5IHByb2R1Y2UgJ2phdmEubGFuZy5OdWxsUG9pbnRlckV4Y2VwdGlvbiciPmYuZGF0YS5oYXNoQ29kZSgpPC93YXJuaW5nPik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKGYuZGF0YS5oYXNoQ29kZSgpKTsKKyAgfQorICAKKyAgdm9pZCB3YXJuV2hlbk5vdENoZWNrZWRUaGlzT25jZSgpIHsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oPHdhcm5pbmcgZGVzY3I9Ik1ldGhvZCBpbnZvY2F0aW9uICdkYXRhLmhhc2hDb2RlKCknIG1heSBwcm9kdWNlICdqYXZhLmxhbmcuTnVsbFBvaW50ZXJFeGNlcHRpb24nIj5kYXRhLmhhc2hDb2RlKCk8L3dhcm5pbmc+KTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oZGF0YS5oYXNoQ29kZSgpKTsKKyAgfQorICAKKyAgdm9pZCBkb250V2FybldoZW5Eb3VibGVDaGVja2VkKEZvbyBmKSB7CisgICAgaWYgKGYuZGF0YSA9PSBudWxsKSB7CisgICAgICByZXR1cm47CisgICAgfQorICAgIGlmIChmLmRhdGEgPT0gbnVsbCkgeworICAgICAgcmV0dXJuOworICAgIH0KKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oZi5kYXRhLmhhc2hDb2RlKCkpOworICB9CisKKyAgdm9pZCBkb250V2FybldoZW5Eb3VibGVDaGVja2VkX1RoaXNfU3luY2hyb25pemVkKCkgeworICAgIGlmIChkYXRhID09IG51bGwpIHsKKyAgICAgIHJldHVybjsKKyAgICB9CisgICAgc3luY2hyb25pemVkICh0aGlzKSB7CisgICAgICBpZiAoZGF0YSA9PSBudWxsKSB7CisgICAgICAgIHJldHVybjsKKyAgICAgIH0KKyAgICB9CisgICAgU3lzdGVtLm91dC5wcmludGxuKGRhdGEuaGFzaENvZGUoKSk7CisgIH0KKyAgCisgIHZvaWQgZG9udFdhcm5XaGVuRG91YmxlQ2hlY2tlZF9UaGlzX1dpdGhNZXRob2RDYWxsKCkgeworICAgIGlmIChkYXRhID09IG51bGwpIHsKKyAgICAgIHJldHVybjsKKyAgICB9CisgICAgU3lzdGVtLm91dC5wcmludGxuKGRhdGEuaGFzaENvZGUoKSk7CisgICAgaWYgKGRhdGEgPT0gbnVsbCkgeworICAgICAgcmV0dXJuOworICAgIH0KKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oZGF0YS5oYXNoQ29kZSgpKTsKKyAgfQorCit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGF0YUZsb3cvZml4dHVyZS9NdXRhYmxlVm9sYXRpbGVOdWxsYWJsZUZpZWxkc1RyZWF0bWVudC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGF0YUZsb3cvZml4dHVyZS9NdXRhYmxlVm9sYXRpbGVOdWxsYWJsZUZpZWxkc1RyZWF0bWVudC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU1Y2RhYzEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kYXRhRmxvdy9maXh0dXJlL011dGFibGVWb2xhdGlsZU51bGxhYmxlRmllbGRzVHJlYXRtZW50LmphdmEKQEAgLTAsMCArMSw2OCBAQAoraW1wb3J0IG9yZy5qZXRicmFpbnMuYW5ub3RhdGlvbnMuTnVsbGFibGU7CisKK2NsYXNzIEZvbyB7CisgIEBOdWxsYWJsZSB2b2xhdGlsZSBPYmplY3QgZGF0YTsKKworICB2b2lkIGNoZWNrTm90TnVsbEFuZFVzZShGb28gZikgeworICAgIGlmIChmLmRhdGEgIT0gbnVsbCkgeworICAgICAgU3lzdGVtLm91dC5wcmludGxuKDx3YXJuaW5nIGRlc2NyPSJNZXRob2QgaW52b2NhdGlvbiAnZi5kYXRhLmhhc2hDb2RlKCknIG1heSBwcm9kdWNlICdqYXZhLmxhbmcuTnVsbFBvaW50ZXJFeGNlcHRpb24nIj5mLmRhdGEuaGFzaENvZGUoKTwvd2FybmluZz4pOworICAgIH0KKyAgfQorCisgIHZvaWQgY2hlY2tOdWxsQW5kUmV0dXJuKEZvbyBmKSB7CisgICAgaWYgKGYuZGF0YSA9PSBudWxsKSB7CisgICAgICByZXR1cm47CisgICAgfQorICAgIFN5c3RlbS5vdXQucHJpbnRsbig8d2FybmluZyBkZXNjcj0iTWV0aG9kIGludm9jYXRpb24gJ2YuZGF0YS5oYXNoQ29kZSgpJyBtYXkgcHJvZHVjZSAnamF2YS5sYW5nLk51bGxQb2ludGVyRXhjZXB0aW9uJyI+Zi5kYXRhLmhhc2hDb2RlKCk8L3dhcm5pbmc+KTsKKyAgfQorCisgIHZvaWQgd2FybldoZW5Xcm9uZ0NoZWNrKCkgeworICAgIGlmIChkYXRhICE9IG51bGwpIHsKKyAgICAgIHJldHVybjsKKyAgICB9CisgICAgU3lzdGVtLm91dC5wcmludGxuKDx3YXJuaW5nIGRlc2NyPSJNZXRob2QgaW52b2NhdGlvbiAnZGF0YS5oYXNoQ29kZSgpJyBtYXkgcHJvZHVjZSAnamF2YS5sYW5nLk51bGxQb2ludGVyRXhjZXB0aW9uJyI+ZGF0YS5oYXNoQ29kZSgpPC93YXJuaW5nPik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKDx3YXJuaW5nIGRlc2NyPSJNZXRob2QgaW52b2NhdGlvbiAnZGF0YS5oYXNoQ29kZSgpJyBtYXkgcHJvZHVjZSAnamF2YS5sYW5nLk51bGxQb2ludGVyRXhjZXB0aW9uJyI+ZGF0YS5oYXNoQ29kZSgpPC93YXJuaW5nPik7CisgIH0KKworICB2b2lkIHdhcm5XaGVuTm90Q2hlY2tlZChGb28gZikgeworICAgIFN5c3RlbS5vdXQucHJpbnRsbig8d2FybmluZyBkZXNjcj0iTWV0aG9kIGludm9jYXRpb24gJ2YuZGF0YS5oYXNoQ29kZSgpJyBtYXkgcHJvZHVjZSAnamF2YS5sYW5nLk51bGxQb2ludGVyRXhjZXB0aW9uJyI+Zi5kYXRhLmhhc2hDb2RlKCk8L3dhcm5pbmc+KTsKKyAgfQorICAKKyAgdm9pZCB3YXJuV2hlbk5vdENoZWNrZWRUaGlzKCkgeworICAgIFN5c3RlbS5vdXQucHJpbnRsbig8d2FybmluZyBkZXNjcj0iTWV0aG9kIGludm9jYXRpb24gJ2RhdGEuaGFzaENvZGUoKScgbWF5IHByb2R1Y2UgJ2phdmEubGFuZy5OdWxsUG9pbnRlckV4Y2VwdGlvbiciPmRhdGEuaGFzaENvZGUoKTwvd2FybmluZz4pOworICB9CisgIAorICB2b2lkIGRvbnRXYXJuV2hlbkRvdWJsZUNoZWNrZWQoRm9vIGYpIHsKKyAgICBpZiAoZi5kYXRhID09IG51bGwpIHsKKyAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKGYuZGF0YSA9PSBudWxsKSB7CisgICAgICByZXR1cm47CisgICAgfQorICAgIFN5c3RlbS5vdXQucHJpbnRsbig8d2FybmluZyBkZXNjcj0iTWV0aG9kIGludm9jYXRpb24gJ2YuZGF0YS5oYXNoQ29kZSgpJyBtYXkgcHJvZHVjZSAnamF2YS5sYW5nLk51bGxQb2ludGVyRXhjZXB0aW9uJyI+Zi5kYXRhLmhhc2hDb2RlKCk8L3dhcm5pbmc+KTsKKyAgfQorCisgIHZvaWQgZG9udFdhcm5XaGVuRG91YmxlQ2hlY2tlZF9UaGlzX1N5bmNocm9uaXplZCgpIHsKKyAgICBpZiAoZGF0YSA9PSBudWxsKSB7CisgICAgICByZXR1cm47CisgICAgfQorICAgIHN5bmNocm9uaXplZCAodGhpcykgeworICAgICAgaWYgKGRhdGEgPT0gbnVsbCkgeworICAgICAgICByZXR1cm47CisgICAgICB9CisgICAgfQorICAgIFN5c3RlbS5vdXQucHJpbnRsbig8d2FybmluZz5kYXRhLmhhc2hDb2RlKCk8L3dhcm5pbmc+KTsKKyAgfQorICAKKyAgdm9pZCBkb250V2FybldoZW5Eb3VibGVDaGVja2VkX1RoaXNfV2l0aE1ldGhvZENhbGwoKSB7CisgICAgaWYgKGRhdGEgPT0gbnVsbCkgeworICAgICAgcmV0dXJuOworICAgIH0KKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oPHdhcm5pbmc+ZGF0YS5oYXNoQ29kZSgpPC93YXJuaW5nPik7CisgICAgaWYgKGRhdGEgPT0gbnVsbCkgeworICAgICAgcmV0dXJuOworICAgIH0KKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oPHdhcm5pbmc+ZGF0YS5oYXNoQ29kZSgpPC93YXJuaW5nPik7CisgIH0KKworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RhdGFGbG93L2ZpeHR1cmUvTm90RXF1YWxzRG9lc250SW1wbHlOb3ROdWxsaXR5LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kYXRhRmxvdy9maXh0dXJlL05vdEVxdWFsc0RvZXNudEltcGx5Tm90TnVsbGl0eS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU3NDU4NWMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kYXRhRmxvdy9maXh0dXJlL05vdEVxdWFsc0RvZXNudEltcGx5Tm90TnVsbGl0eS5qYXZhCkBAIC0wLDAgKzEsMjEgQEAKK2ltcG9ydCBvcmcuamV0YnJhaW5zLmFubm90YXRpb25zLk51bGxhYmxlOworY2xhc3MgVGVzdElERUFXYXJuIHsKKyAgdm9pZCB0ZXN0KGphdmEudXRpbC5NYXA8T2JqZWN0LCBPYmplY3Q+IHZhbHVlcykgeworICAgIGJvb2xlYW4gY29uZGl0aW9uID0gZmFsc2U7CisgICAgT2JqZWN0IHRhcmdldCA9IGdldFRhcmdldCgpOworICAgIGZvciAoT2JqZWN0IG8gOiB2YWx1ZXMudmFsdWVzKCkpIHsKKyAgICAgIGlmIChvICE9IG51bGwgJiYgbyAhPSB0YXJnZXQpIHsKKyAgICAgICAgY29uZGl0aW9uID0gdHJ1ZTsKKyAgICAgIH0KKyAgICB9CisgICAgaWYgKCFjb25kaXRpb24gfHwgdGFyZ2V0ID09IG51bGwpIHsKKyAgICAgIFN5c3RlbS5vdXQucHJpbnRsbih0YXJnZXQpOworICAgIH0KKyAgfQorCisgIEBOdWxsYWJsZQorICBwdWJsaWMgT2JqZWN0IGdldFRhcmdldCgpIHsKKyAgICByZXR1cm4gbnVsbDsKKyAgfQorCit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kYXRhRmxvdy9maXh0dXJlL05vdEdyZWF0ZXJJc05vdEVxdWFscy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGF0YUZsb3cvZml4dHVyZS9Ob3RHcmVhdGVySXNOb3RFcXVhbHMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NTI4ZmNkCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGF0YUZsb3cvZml4dHVyZS9Ob3RHcmVhdGVySXNOb3RFcXVhbHMuamF2YQpAQCAtMCwwICsxLDM4IEBACitpbXBvcnQgb3JnLmpldGJyYWlucy5hbm5vdGF0aW9ucy5Ob3ROdWxsOworCitpbXBvcnQgamF2YS5pby5GaWxlOworCitjbGFzcyBab28yIHsKKyAgcHVibGljIHN0YXRpYyBib29sZWFuIHN0YXJ0c1dpdGgoQE5vdE51bGwgU3RyaW5nIHBhdGgsIEBOb3ROdWxsIFN0cmluZyBzdGFydCwgZmluYWwgYm9vbGVhbiBjYXNlU2Vuc2l0aXZlKSB7CisgICAgZmluYWwgaW50IGxlbmd0aDEgPSBwYXRoLmxlbmd0aCgpOworICAgIGZpbmFsIGludCBsZW5ndGgyID0gc3RhcnQubGVuZ3RoKCk7CisgICAgaWYgKGxlbmd0aDIgPT0gMCkgcmV0dXJuIHRydWU7CisgICAgaWYgKGxlbmd0aDIgPiBsZW5ndGgxKSByZXR1cm4gZmFsc2U7CisgICAgaWYgKCFwYXRoLnJlZ2lvbk1hdGNoZXMoIWNhc2VTZW5zaXRpdmUsIDAsIHN0YXJ0LCAwLCBsZW5ndGgyKSkgcmV0dXJuIGZhbHNlOworICAgIGlmIChsZW5ndGgxID09IGxlbmd0aDIpIHJldHVybiB0cnVlOworICAgIGNoYXIgbGFzdDIgPSBzdGFydC5jaGFyQXQobGVuZ3RoMiAtIDEpOworICAgIGNoYXIgbmV4dDE7CisgICAgaWYgKGxhc3QyID09ICcvJyB8fCBsYXN0MiA9PSBGaWxlLnNlcGFyYXRvckNoYXIpIHsKKyAgICAgIG5leHQxID0gcGF0aC5jaGFyQXQobGVuZ3RoMiAtIDEpOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgIG5leHQxID0gcGF0aC5jaGFyQXQobGVuZ3RoMik7CisgICAgfQorICAgIHJldHVybiBuZXh0MSA9PSAnLycgfHwgbmV4dDEgPT0gRmlsZS5zZXBhcmF0b3JDaGFyOworICB9CisgIHZvaWQgZm9vKFNvbWUgbWUsIFNvbWUgb3RoZXIpIHsKKyAgICBpZiAobWUuZGVwdGggPCBvdGhlci5kZXB0aCkgeworICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJsZXNzIik7CisgICAgfSBlbHNlIGlmIChvdGhlci5kZXB0aCA+IG1lLmRlcHRoKSB7CisgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIm1vcmUiKTsKKyAgICB9CisgIH0KK30KKworY2xhc3MgU29tZSB7CisgIGZpbmFsIGludCBkZXB0aDsKKworICBTb21lKGludCBkZXB0aCkgeworICAgIHRoaXMuZGVwdGggPSBkZXB0aDsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RhdGFGbG93L2ZpeHR1cmUvTnVsbENoZWNrRG9lc250QWZmZWN0VW5jaGVja2VkQ2FzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGF0YUZsb3cvZml4dHVyZS9OdWxsQ2hlY2tEb2VzbnRBZmZlY3RVbmNoZWNrZWRDYXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmY4NTY0OAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RhdGFGbG93L2ZpeHR1cmUvTnVsbENoZWNrRG9lc250QWZmZWN0VW5jaGVja2VkQ2FzdC5qYXZhCkBAIC0wLDAgKzEsMTUgQEAKK3B1YmxpYyBjbGFzcyBEYXRhRmxvd0J1ZyB7CisKKyAgcHVibGljIGludCBhZGQyKE9iamVjdCBsZWZ0LCBPYmplY3QgcmlnaHQpIHsKKyAgICBpZiAobGVmdCAhPSBudWxsICYmICEobGVmdCBpbnN0YW5jZW9mIFN0cmluZykpIHsKKyAgICAgIHJldHVybiAoKDx3YXJuaW5nIGRlc2NyPSJDYXN0aW5nICdsZWZ0JyB0byAnU3RyaW5nJyBtYXkgcHJvZHVjZSAnamF2YS5sYW5nLkNsYXNzQ2FzdEV4Y2VwdGlvbiciPlN0cmluZzwvd2FybmluZz4pIGxlZnQpLmxlbmd0aCgpOworCisgICAgfQorICAgIGlmICghKHJpZ2h0IGluc3RhbmNlb2YgU3RyaW5nKSkgeworICAgICAgcmV0dXJuICgoPHdhcm5pbmcgZGVzY3I9IkNhc3RpbmcgJ3JpZ2h0JyB0byAnU3RyaW5nJyBtYXkgcHJvZHVjZSAnamF2YS5sYW5nLkNsYXNzQ2FzdEV4Y2VwdGlvbiciPlN0cmluZzwvd2FybmluZz4pIHJpZ2h0KS5sZW5ndGgoKTsKKworICAgIH0KKyAgICByZXR1cm4gMjsKKyAgfQorCit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGF0YUZsb3cvZml4dHVyZS9OdWxsYWJsZUFub255bW91c01ldGhvZC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGF0YUZsb3cvZml4dHVyZS9OdWxsYWJsZUFub255bW91c01ldGhvZC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJkODJjOGIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kYXRhRmxvdy9maXh0dXJlL051bGxhYmxlQW5vbnltb3VzTWV0aG9kLmphdmEKQEAgLTAsMCArMSwxOCBAQAoraW1wb3J0IG9yZy5qZXRicmFpbnMuYW5ub3RhdGlvbnMuTnVsbGFibGU7CisKK3B1YmxpYyBjbGFzcyBCYXIgeworCisgICAgdm9pZCBuYXZpZ2F0ZVRvKCkgeworICAgICAgICBDb21wdXRhYmxlIGMgPSBuZXcgQ29tcHV0YWJsZSgpIHsKKyAgICAgICAgICAgIEBOdWxsYWJsZSAgCisgICAgICAgICAgICBwdWJsaWMgT2JqZWN0IGNvbXB1dGUoKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgICAgICB9CisgICAgICAgIH07CisgICAgfQorCit9CisKK2ludGVyZmFjZSBDb21wdXRhYmxlIHsKKyAgICBATnVsbGFibGUgT2JqZWN0IGNvbXB1dGUoKTsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kYXRhRmxvdy9maXh0dXJlL051bGxhYmxlQW5vbnltb3VzUGFyYW1ldGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kYXRhRmxvdy9maXh0dXJlL051bGxhYmxlQW5vbnltb3VzUGFyYW1ldGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODZjNTI3ZQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RhdGFGbG93L2ZpeHR1cmUvTnVsbGFibGVBbm9ueW1vdXNQYXJhbWV0ZXIuamF2YQpAQCAtMCwwICsxLDE3IEBACitpbXBvcnQgb3JnLmpldGJyYWlucy5hbm5vdGF0aW9ucy5OdWxsYWJsZTsKKworcHVibGljIGNsYXNzIEJhciB7CisKKyAgICB2b2lkIG5hdmlnYXRlVG8oZmluYWxATnVsbGFibGUgT2JqZWN0IHApIHsKKyAgICAgIGlmIChwID09IG51bGwpIHsKKyAgICAgICAgcmV0dXJuOworICAgICAgfQorCisgICAgICAgIFJ1bm5hYmxlIGMgPSBuZXcgUnVubmFibGUoKSB7CisgICAgICAgICAgICBwdWJsaWMgdm9pZCBydW4oKSB7CisgICAgICAgICAgICAgICAgcC5oYXNoQ29kZSgpOworICAgICAgICAgICAgfQorICAgICAgICB9OworICAgIH0KKworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RhdGFGbG93L2ZpeHR1cmUvTnVsbGFibGVBbm9ueW1vdXNWb2xhdGlsZS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGF0YUZsb3cvZml4dHVyZS9OdWxsYWJsZUFub255bW91c1ZvbGF0aWxlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzk3ZGQwYgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RhdGFGbG93L2ZpeHR1cmUvTnVsbGFibGVBbm9ueW1vdXNWb2xhdGlsZS5qYXZhCkBAIC0wLDAgKzEsMjYgQEAKK2ltcG9ydCBqYXZheC5zd2luZy4qOworCitjbGFzcyBUZXN0IHsKKyAgICBwdWJsaWMgdm9pZCBzZXRPYmooT2JqZWN0IG9iaikgeworICAgICAgICB0aGlzLm9iaiA9IG9iajsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCB0ZXN0KCkgeworICAgICAgICBvYmogPSBuZXcgT2JqZWN0KCk7CisgICAgICAgIGphdmF4LnN3aW5nLlN3aW5nVXRpbGl0aWVzLmludm9rZUxhdGVyKG5ldyBSdW5uYWJsZSgpIHsKKyAgICAgICAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKKyAgICAgICAgICAgICAgICBPYmplY3QgbyA9IG9iajsKKyAgICAgICAgICAgICAgICBpZiAobyAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigieCIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfSk7CisgICAgICAgIGZpbmFsIE9iamVjdCB1ID0gbmV3IE9iamVjdCgpOworICAgICAgICBpZiAoPHdhcm5pbmcgZGVzY3I9IkNvbmRpdGlvbiAndSAhPSBudWxsJyBpcyBhbHdheXMgJ3RydWUnIj51ICE9IG51bGw8L3dhcm5pbmc+KSB7CisgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJ5Iik7CisgICAgICAgIH0KKyAgICAgICAgb2JqID0gbnVsbDsKKyAgICB9CisKKyAgICBwcml2YXRlIHZvbGF0aWxlIE9iamVjdCBvYmo7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGF0YUZsb3cvZml4dHVyZS9OdWxsYWJsZUFub255bW91c1ZvbGF0aWxlTm90TnVsbC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGF0YUZsb3cvZml4dHVyZS9OdWxsYWJsZUFub255bW91c1ZvbGF0aWxlTm90TnVsbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI1YTBlMDMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kYXRhRmxvdy9maXh0dXJlL051bGxhYmxlQW5vbnltb3VzVm9sYXRpbGVOb3ROdWxsLmphdmEKQEAgLTAsMCArMSwyNCBAQAoraW1wb3J0IG9yZy5qZXRicmFpbnMuYW5ub3RhdGlvbnMuTm90TnVsbDsKKworaW1wb3J0IGphdmF4LnN3aW5nLio7CisKK2NsYXNzIFRlc3QgeworICAgIHB1YmxpYyB2b2lkIHNldE9iaihPYmplY3Qgb2JqKSB7CisgICAgICAgIHRoaXMub2JqID0gb2JqOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIHRlc3QoKSB7CisgICAgICAgIG9iaiA9IG5ldyBPYmplY3QoKTsKKyAgICAgICAgU3dpbmdVdGlsaXRpZXMuaW52b2tlTGF0ZXIobmV3IFJ1bm5hYmxlKCkgeworICAgICAgICAgICAgcHVibGljIHZvaWQgcnVuKCkgeworICAgICAgICAgICAgICAgIE9iamVjdCBvID0gb2JqOworICAgICAgICAgICAgICAgIGlmICg8d2FybmluZyBkZXNjcj0iQ29uZGl0aW9uICdvICE9IG51bGwnIGlzIGFsd2F5cyAndHJ1ZSciPm8gIT0gbnVsbDwvd2FybmluZz4pIHsKKyAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJ4Iik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9KTsKKyAgICAgIG9iaiA9IDx3YXJuaW5nIGRlc2NyPSInbnVsbCcgaXMgYXNzaWduZWQgdG8gYSB2YXJpYWJsZSB0aGF0IGlzIGFubm90YXRlZCB3aXRoIEBOb3ROdWxsIj5udWxsPC93YXJuaW5nPjsKKyAgICB9CisKKyAgICBATm90TnVsbCBwcml2YXRlIHZvbGF0aWxlIE9iamVjdCBvYmo7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGF0YUZsb3cvZml4dHVyZS9OdWxsYWJsZUZpZWxkLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kYXRhRmxvdy9maXh0dXJlL051bGxhYmxlRmllbGQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYTM0MWQzCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGF0YUZsb3cvZml4dHVyZS9OdWxsYWJsZUZpZWxkLmphdmEKQEAgLTAsMCArMSw5IEBACitpbXBvcnQgb3JnLmpldGJyYWlucy5hbm5vdGF0aW9ucy5OdWxsYWJsZTsKKworcHVibGljIGNsYXNzIERERCB7CisgIEBOdWxsYWJsZQorICBTdHJpbmcgZmllbGQ7CisgIGludCB0ZXN0KCkgeworICAgIHJldHVybiA8d2FybmluZyBkZXNjcj0iTWV0aG9kIGludm9jYXRpb24gJ25ldyBEREQoKS5maWVsZC5oYXNoQ29kZSgpJyBtYXkgcHJvZHVjZSAnamF2YS5sYW5nLk51bGxQb2ludGVyRXhjZXB0aW9uJyI+bmV3IERERCgpLmZpZWxkLmhhc2hDb2RlKCk8L3dhcm5pbmc+OworICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kYXRhRmxvdy9maXh0dXJlL051bGxhYmxlRm9yZWFjaFZhcmlhYmxlLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kYXRhRmxvdy9maXh0dXJlL051bGxhYmxlRm9yZWFjaFZhcmlhYmxlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGZhMWM2NAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RhdGFGbG93L2ZpeHR1cmUvTnVsbGFibGVGb3JlYWNoVmFyaWFibGUuamF2YQpAQCAtMCwwICsxLDIwIEBACitpbXBvcnQgZm9vLk51bGxhYmxlOworCitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworcHVibGljIGNsYXNzIEZvbyB7CisgIHZvaWQgZm9vMShMaXN0PEludGVnZXI+IGxpc3QpIHsKKyAgICBmb3IgKEBOdWxsYWJsZSBJbnRlZ2VyIGkgOiBsaXN0KSB7CisgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oPHdhcm5pbmcgZGVzY3I9Ik1ldGhvZCBpbnZvY2F0aW9uICdpLmludFZhbHVlKCknIG1heSBwcm9kdWNlICdqYXZhLmxhbmcuTnVsbFBvaW50ZXJFeGNlcHRpb24nIj5pLmludFZhbHVlKCk8L3dhcm5pbmc+KTsKKyAgICB9CisgIH0KKyAgdm9pZCBmb28yKExpc3Q8QE51bGxhYmxlIEludGVnZXI+IGxpc3QpIHsKKyAgICBmb3IgKEBOdWxsYWJsZSBJbnRlZ2VyIGkgOiBsaXN0KSB7CisgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oPHdhcm5pbmcgZGVzY3I9Ik1ldGhvZCBpbnZvY2F0aW9uICdpLmludFZhbHVlKCknIG1heSBwcm9kdWNlICdqYXZhLmxhbmcuTnVsbFBvaW50ZXJFeGNlcHRpb24nIj5pLmludFZhbHVlKCk8L3dhcm5pbmc+KTsKKyAgICB9CisgIH0KKworfQorCisKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RhdGFGbG93L2ZpeHR1cmUvUGFzc2luZ051bGxhYmxlSW50b1ZhcmFyZy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGF0YUZsb3cvZml4dHVyZS9QYXNzaW5nTnVsbGFibGVJbnRvVmFyYXJnLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2I3NDZhZjgKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kYXRhRmxvdy9maXh0dXJlL1Bhc3NpbmdOdWxsYWJsZUludG9WYXJhcmcuamF2YQpAQCAtMCwwICsxLDEwIEBACitpbXBvcnQgb3JnLmpldGJyYWlucy5hbm5vdGF0aW9ucy5Ob3ROdWxsOworCitjbGFzcyBUZXN0IHsKKyAgcHVibGljIHN0YXRpYyB2b2lkIHRlc3QoQE5vdE51bGwgT2JqZWN0Li4uIG9iamVjdHMpIHsgfQorCisgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKyAgICBPYmplY3QgbyA9IG51bGw7CisgICAgdGVzdChvKTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RhdGFGbG93L2ZpeHR1cmUvUHJlc2VydmVOdWxsYWJsZU9uVW5jaGVja2VkQ2FzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGF0YUZsb3cvZml4dHVyZS9QcmVzZXJ2ZU51bGxhYmxlT25VbmNoZWNrZWRDYXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjA2M2QxMgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RhdGFGbG93L2ZpeHR1cmUvUHJlc2VydmVOdWxsYWJsZU9uVW5jaGVja2VkQ2FzdC5qYXZhCkBAIC0wLDAgKzEsMTYgQEAKK2ltcG9ydCBvcmcuamV0YnJhaW5zLmFubm90YXRpb25zLk5vdE51bGw7CisKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitwdWJsaWMgY2xhc3MgQnJva2VuQWxpZ25tZW50IHsKKyAgdm9pZCB0KCkgeworICAgIEBOb3ROdWxsIENvbGxlY3Rpb24gbGlzdCA9IG5ldyBBcnJheUxpc3QoKTsKKyAgICBMaXN0PFN0cmluZz4gc3RyaW5ncyA9IChMaXN0PFN0cmluZz4pIGxpc3Q7CisgICAgaWYgKDx3YXJuaW5nIGRlc2NyPSJDb25kaXRpb24gJ3N0cmluZ3MgIT0gbnVsbCcgaXMgYWx3YXlzICd0cnVlJyI+c3RyaW5ncyAhPSBudWxsPC93YXJuaW5nPikgeworICAgICAgaW50IGZvbyA9IDQyOworICAgIH0KKyAgfQorCit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGF0YUZsb3cvZml4dHVyZS9SZXR1cm5pbmdOdWxsRnJvbVZvaWRNZXRob2QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RhdGFGbG93L2ZpeHR1cmUvUmV0dXJuaW5nTnVsbEZyb21Wb2lkTWV0aG9kLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTU0NGJmMQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RhdGFGbG93L2ZpeHR1cmUvUmV0dXJuaW5nTnVsbEZyb21Wb2lkTWV0aG9kLmphdmEKQEAgLTAsMCArMSw2IEBACitwdWJsaWMgY2xhc3MgQnJva2VuQWxpZ25tZW50IHsKKworICBWb2lkIHRlc3QoKSB7CisgICAgcmV0dXJuIG51bGw7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kYXRhRmxvdy9maXh0dXJlL1NraXBBc3NlcnRpb25zLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kYXRhRmxvdy9maXh0dXJlL1NraXBBc3NlcnRpb25zLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDg2ZmRjYgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RhdGFGbG93L2ZpeHR1cmUvU2tpcEFzc2VydGlvbnMuamF2YQpAQCAtMCwwICsxLDIxIEBACitpbXBvcnQgb3JnLmpldGJyYWlucy5hbm5vdGF0aW9ucy5Ob3ROdWxsOworCitjbGFzcyBUZXN0IHsKKyAgcHJpdmF0ZSBzdGF0aWMgdm9pZCB0ZXN0KEBOb3ROdWxsIE9iamVjdCBmb28pIHsKKyAgICBhc3NlcnQgZm9vICE9IG51bGw7CisgIH0KKworICBwcml2YXRlIHN0YXRpYyB2b2lkIHRlc3QyKEBOb3ROdWxsIE9iamVjdCBmb28pIHsKKyAgICBpZiAoZm9vID09IG51bGwpIHsKKyAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oKTsKKyAgICB9CisgIH0KKyAgcHJpdmF0ZSBzdGF0aWMgdm9pZCB0ZXN0MyhATm90TnVsbCBPYmplY3QgZm9vKSB7CisgICAgaWYgKGZvbyA9PSBudWxsKSB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCk7CisgIH0KKworICBwcml2YXRlIHN0YXRpYyB2b2lkIHRlc3Q0KEBOb3ROdWxsIE9iamVjdCBmb28pIHsKKyAgICBpZiAoPHdhcm5pbmcgZGVzY3I9IkNvbmRpdGlvbiAnZm9vICE9IG51bGwnIGlzIGFsd2F5cyAndHJ1ZSciPmZvbyAhPSBudWxsPC93YXJuaW5nPikgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigpOworICB9CisKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kYXRhRmxvdy9maXh0dXJlL1N0cmluZ1Rlcm5hcnlBbHdheXNUcnVlLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kYXRhRmxvdy9maXh0dXJlL1N0cmluZ1Rlcm5hcnlBbHdheXNUcnVlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTMyNTVkOWEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kYXRhRmxvdy9maXh0dXJlL1N0cmluZ1Rlcm5hcnlBbHdheXNUcnVlLmphdmEKQEAgLTAsMCArMSwxMiBAQAorY2xhc3MgRm9vIHsKKyAgcHVibGljIHZvaWQgZm9vKCkgeworICAgIGZpbmFsIGJvb2xlYW4gZmxhZyA9IHRydWU7CisKKyAgICBiYXIoPHdhcm5pbmcgZGVzY3I9IkNvbmRpdGlvbiAnZmxhZycgaXMgYWx3YXlzICd0cnVlJyI+ZmxhZzwvd2FybmluZz4gPyAiYSIgOiAiYiIsCisgICAgICA8d2FybmluZyBkZXNjcj0iQ29uZGl0aW9uICdmbGFnJyBpcyBhbHdheXMgJ3RydWUnIj5mbGFnPC93YXJuaW5nPiA/IG5ldyBTdHJpbmdbXXsiYWEifSA6IG5ldyBTdHJpbmdbXXsiYmIifQorICAgICk7CisgIH0KKworICB2b2lkIGJhcihTdHJpbmcgYiwgU3RyaW5nW10gYSkgeworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGF0YUZsb3cvZml4dHVyZS9TeW1tZXRyaWNVbmNoZWNrZWRDYXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kYXRhRmxvdy9maXh0dXJlL1N5bW1ldHJpY1VuY2hlY2tlZENhc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YzEwODdiCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGF0YUZsb3cvZml4dHVyZS9TeW1tZXRyaWNVbmNoZWNrZWRDYXN0LmphdmEKQEAgLTAsMCArMSwyMiBAQAoraW1wb3J0IGphdmEudXRpbC5EYXRlOworCitwdWJsaWMgY2xhc3MgRGF0YUZsb3dCdWcgeworCisgIHByaXZhdGUgc3RhdGljIGJvb2xlYW4gaXNOdW1iZXJhYmxlKE9iamVjdCBvKSB7CisgICAgcmV0dXJuIG8gaW5zdGFuY2VvZiBOdW1iZXI7CisgIH0KKworICBwdWJsaWMgT2JqZWN0IGFkZChPYmplY3QgbGVmdCwgT2JqZWN0IHJpZ2h0KSB7CisgICAgaWYgKGxlZnQgIT0gbnVsbCAmJiByaWdodCAhPSBudWxsICYmIChsZWZ0IGluc3RhbmNlb2YgRGF0ZSB8fCByaWdodCBpbnN0YW5jZW9mIERhdGUpKSB7CisgICAgICBpZiAoaXNOdW1iZXJhYmxlKGxlZnQpKSB7CisgICAgICAgIHJldHVybiAoKDx3YXJuaW5nIGRlc2NyPSJDYXN0aW5nICdyaWdodCcgdG8gJ0RhdGUnIG1heSBwcm9kdWNlICdqYXZhLmxhbmcuQ2xhc3NDYXN0RXhjZXB0aW9uJyI+RGF0ZTwvd2FybmluZz4pIHJpZ2h0KS5nZXRUaW1lKCk7CisgICAgICB9CisKKyAgICAgIGlmIChpc051bWJlcmFibGUocmlnaHQpKSB7CisgICAgICAgIHJldHVybiAoKDx3YXJuaW5nIGRlc2NyPSJDYXN0aW5nICdsZWZ0JyB0byAnRGF0ZScgbWF5IHByb2R1Y2UgJ2phdmEubGFuZy5DbGFzc0Nhc3RFeGNlcHRpb24nIj5EYXRlPC93YXJuaW5nPikgbGVmdCkuZ2V0VGltZSgpOworICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gbmV3IE9iamVjdCgpOworICB9CisKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kYXRhRmxvdy9maXh0dXJlL1N5bmNocm9uaXppbmdPbk51bGxhYmxlLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kYXRhRmxvdy9maXh0dXJlL1N5bmNocm9uaXppbmdPbk51bGxhYmxlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2E4M2RmNgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RhdGFGbG93L2ZpeHR1cmUvU3luY2hyb25pemluZ09uTnVsbGFibGUuamF2YQpAQCAtMCwwICsxLDEwIEBACitpbXBvcnQgb3JnLmpldGJyYWlucy5hbm5vdGF0aW9ucy5OdWxsYWJsZTsKKworcHVibGljIGNsYXNzIEJyb2tlbkFsaWdubWVudCB7CisKKyAgdm9pZCB0ZXN0KEBOdWxsYWJsZSBPYmplY3QgbikgeworICAgIHN5bmNocm9uaXplZCAoPHdhcm5pbmcgZGVzY3I9IkRlcmVmZXJlbmNlIG9mICduJyBtYXkgcHJvZHVjZSAnamF2YS5sYW5nLk51bGxQb2ludGVyRXhjZXB0aW9uJyI+bjwvd2FybmluZz4pIHsKKworICAgIH0KKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RhdGFGbG93L2ZpeHR1cmUvVGVybmFyeUluV2hpbGVOb3RDb21wbGV4LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kYXRhRmxvdy9maXh0dXJlL1Rlcm5hcnlJbldoaWxlTm90Q29tcGxleC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmExYjJhZmYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kYXRhRmxvdy9maXh0dXJlL1Rlcm5hcnlJbldoaWxlTm90Q29tcGxleC5qYXZhCkBAIC0wLDAgKzEsMjUgQEAKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworcHVibGljIGNsYXNzIEZvbyB7CisgIHB1YmxpYyB2b2lkIG1hdGNoQWZ0ZXJGcmFnbWVudChpbnQgcGF0dGVybkluZGV4LCBpbnQgbWF0Y2hMZW4pIHsKKyAgICBpbnQgc3RhciA9IHBhdHRlcm5JbmRleCA8IG1hdGNoTGVuID8gbWF0Y2hMZW4gOiAtMTsKKyAgICB3aGlsZSAobWF0Y2hMZW4gPiAwKSB7CisgICAgICBpbnQgaSA9IG1hdGNoTGVuID09IHN0YXIgPyBtYXRjaExlbiA6IHN0YXI7CisgICAgfQorICB9CisKKyAgcHVibGljIHZvaWQgbWF0Y2hBZnRlckZyYWdtZW50Qm94ZWQoSW50ZWdlciBwYXR0ZXJuSW5kZXgsIEludGVnZXIgbWF0Y2hMZW4pIHsKKyAgICBJbnRlZ2VyIHN0YXIgPSBwYXR0ZXJuSW5kZXggPCBtYXRjaExlbiA/IG1hdGNoTGVuIDogLTE7CisgICAgd2hpbGUgKG1hdGNoTGVuID4gMCkgeworICAgICAgSW50ZWdlciBpID0gbWF0Y2hMZW4gPT0gc3RhciA/IG1hdGNoTGVuIDogc3RhcjsKKyAgICB9CisgIH0KKworICBwdWJsaWMgdm9pZCBtYXRjaEFmdGVyRnJhZ21lbnRTZW1pQm94ZWQoSW50ZWdlciBwYXR0ZXJuSW5kZXgsIEludGVnZXIgbWF0Y2hMZW4pIHsKKyAgICBpbnQgc3RhciA9IHBhdHRlcm5JbmRleCA8IG1hdGNoTGVuID8gbWF0Y2hMZW4gOiAtMTsKKyAgICB3aGlsZSAobWF0Y2hMZW4gPiAwKSB7CisgICAgICBJbnRlZ2VyIGkgPSBtYXRjaExlbiA9PSBzdGFyID8gbWF0Y2hMZW4gOiBzdGFyOworICAgIH0KKyAgfQorCit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kYXRhRmxvdy9maXh0dXJlL1RoaXNGaWVsZEdldHRlcnMuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RhdGFGbG93L2ZpeHR1cmUvVGhpc0ZpZWxkR2V0dGVycy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM3MzJiMTgKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kYXRhRmxvdy9maXh0dXJlL1RoaXNGaWVsZEdldHRlcnMuamF2YQpAQCAtMCwwICsxLDIzIEBACitjbGFzcyBUZXN0IHsKKworICBwcml2YXRlIGludCBjb3VudDE7CisgIHByaXZhdGUgaW50IGNvdW50MjsKKworICBwdWJsaWMgdm9pZCB0ZXN0KCkgeworICAgIGludCBvbGRDb3VudDEgPSBnZXRDb3VudDEoKTsKKyAgICBpbnQgb2xkQ291bnQyID0gZ2V0Q291bnQyKCk7CisgICAgY291bnQxKys7CisgICAgaWYgKG9sZENvdW50MSAhPSBnZXRDb3VudDEoKSB8fCBvbGRDb3VudDIgIT0gZ2V0Q291bnQyKCkpIHsKKyAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiY2hhbmdlZCIpOworICAgIH0KKyAgfQorCisgIHByaXZhdGUgaW50IGdldENvdW50MSgpIHsKKyAgICByZXR1cm4gY291bnQxOworICB9CisKKyAgcHJpdmF0ZSBpbnQgZ2V0Q291bnQyKCkgeworICAgIHJldHVybiBjb3VudDI7CisgIH0KKworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RhdGFGbG93L2ZpeHR1cmUvVHJhbnNpZW50RmluYWxGaWVsZC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGF0YUZsb3cvZml4dHVyZS9UcmFuc2llbnRGaW5hbEZpZWxkLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDJiZTc3ZAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RhdGFGbG93L2ZpeHR1cmUvVHJhbnNpZW50RmluYWxGaWVsZC5qYXZhCkBAIC0wLDAgKzEsMTEgQEAKK2ZpbmFsIGNsYXNzIEFsaXZlIGltcGxlbWVudHMgamF2YS5pby5TZXJpYWxpemFibGUgeworICBwcml2YXRlIHRyYW5zaWVudCBmaW5hbCBPYmplY3QgZWx2aXMgPSBuZXcgT2JqZWN0KCk7CisgIEBPdmVycmlkZQorICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgeworICAgIGlmIChlbHZpcyAhPSBudWxsKSB7CisgICAgICByZXR1cm4gInVoLWh1aC1odWgiOworICAgIH0gZWxzZSB7CisgICAgICByZXR1cm4gInRoZSBraW5nIGlzIGRlYWQiOworICAgIH0KKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RhdGFGbG93L2ZpeHR1cmUvVHJ5Q2F0Y2hJbkZvck5vdENvbXBsZXguamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RhdGFGbG93L2ZpeHR1cmUvVHJ5Q2F0Y2hJbkZvck5vdENvbXBsZXguamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MDk3NDkxCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGF0YUZsb3cvZml4dHVyZS9UcnlDYXRjaEluRm9yTm90Q29tcGxleC5qYXZhCkBAIC0wLDAgKzEsMTIgQEAKK3B1YmxpYyBjbGFzcyBCYXIgeworICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisgICAgZm9yIChTdHJpbmcgcyA6IGFyZ3MpIHsKKyAgICAgIHRyeSB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihzKTsKKyAgICAgIH0KKyAgICAgIGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oZSk7CisgICAgICB9CisgICAgfQorICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kYXRhRmxvdy9maXh0dXJlL1RyeUluQW5vbnltb3VzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kYXRhRmxvdy9maXh0dXJlL1RyeUluQW5vbnltb3VzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjYxZDVjZDQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kYXRhRmxvdy9maXh0dXJlL1RyeUluQW5vbnltb3VzLmphdmEKQEAgLTAsMCArMSwyMSBAQAorcHVibGljIGNsYXNzIEJhciB7CisKKyAgICB2b2lkIHN1Ym1pdChSdW5uYWJsZSByKSB7IH0KKyAgICBTdHJpbmdbXSBmb29zKCkgeyByZXR1cm4gbmV3IFN0cmluZ1swXTsgfQorCisgICAgdm9pZCBuYXZpZ2F0ZVRvKCkgeworICAgICAgICBzdWJtaXQobmV3IFJ1bm5hYmxlKCkgeworICAgICAgICAgICAgcHVibGljIHZvaWQgcnVuKCkgeworICAgICAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgICAgIGZvciAoT2JqZWN0IG5leHQgOiBmb29zKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuZXh0ICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBjYXRjaCAoVGhyb3dhYmxlIHRoKSB7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9KTsKKyAgICB9CisKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RhdGFGbG93L2ZpeHR1cmUvVW5rbm93bkZsb2F0TWF5QmVOYU4uamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RhdGFGbG93L2ZpeHR1cmUvVW5rbm93bkZsb2F0TWF5QmVOYU4uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYzI5ZWJjCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGF0YUZsb3cvZml4dHVyZS9Vbmtub3duRmxvYXRNYXlCZU5hTi5qYXZhCkBAIC0wLDAgKzEsMTUgQEAKK2NsYXNzIEZ1biB7CisgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHRocm93cyBFeGNlcHRpb24geworICAgIGZsb2F0IGYxID0gRmxvYXQucGFyc2VGbG9hdCgiTmFOIik7CisgICAgaWYgKGYxID09IGYxKSB7CisgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIkVMVklTIExJVkVTISIpOworICAgIH0KKyAgICBmbG9hdCBmMiA9IEZsb2F0Lk5hTjsKKyAgICAvLyBXYXJuaW5nOiAgQ29uZGl0aW9uICdmMiA9PSBmMicgaXMgYWx3YXlzICdmYWxzZScKKyAgICAvLyBDb3JyZWN0LCBidXQgaWYgeW91IGV4dHJhY3QgdGhlIGFzc2lnbm1lbnQgdG8gYSBtZXRob2QgdGhlIGluc3BlY3Rpb24gZmxpcHMKKyAgICBpZiAoPHdhcm5pbmcgZGVzY3I9IkNvbmRpdGlvbiAnZjIgPT0gZjInIGlzIGFsd2F5cyAnZmFsc2UnIj5mMiA9PSBmMjwvd2FybmluZz4pIHsKKyAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiRUxWSVMgTElWRVMhIik7CisgICAgfQorICB9CisKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kYXRhRmxvdy9maXh0dXJlL1Zpc2l0RmluYWxseU9uY2UuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RhdGFGbG93L2ZpeHR1cmUvVmlzaXRGaW5hbGx5T25jZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdlNzBlYjcKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kYXRhRmxvdy9maXh0dXJlL1Zpc2l0RmluYWxseU9uY2UuamF2YQpAQCAtMCwwICsxLDM5IEBACitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKKworY2xhc3MgVGVzdElERUFXYXJuIHsKKyAgcHJpdmF0ZSBDb25uZWN0aW9uIF9jb25uZWN0aW9uOworCisgIHB1YmxpYyB2b2lkIHdhcm4oKSB0aHJvd3MgSU9FeGNlcHRpb24geworICAgIHRyeSB7CisgICAgICBpZiAoX2Nvbm5lY3Rpb24gIT0gbnVsbCkgeworICAgICAgICB0cnkgeworICAgICAgICAgIF9jb25uZWN0aW9uLmNvbW1pdCgpOworICAgICAgICB9IGZpbmFsbHkgeworICAgICAgICAgIF9jb25uZWN0aW9uLmNsb3NlKCk7CisgICAgICAgICAgX2Nvbm5lY3Rpb24gPSBudWxsOworICAgICAgICB9CisgICAgICB9CisgICAgfSBjYXRjaCAoSU9FeGNlcHRpb24gZSkgeworICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oZSk7CisgICAgfQorICB9CisKKyAgcHVibGljIHZvaWQgd2FybjIoKSB0aHJvd3MgSU9FeGNlcHRpb24geworICAgIGlmIChfY29ubmVjdGlvbiA9PSBudWxsKSByZXR1cm47CisgICAgdHJ5IHsKKyAgICAgIHRyeSB7CisgICAgICAgIF9jb25uZWN0aW9uLmNvbW1pdCgpOworICAgICAgfSBmaW5hbGx5IHsKKyAgICAgICAgX2Nvbm5lY3Rpb24uY2xvc2UoKTsKKyAgICAgICAgX2Nvbm5lY3Rpb24gPSBudWxsOworICAgICAgfQorICAgIH0gY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKyAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKGUpOworICAgIH0KKyAgfQorCisgIGludGVyZmFjZSBDb25uZWN0aW9uIHsKKyAgICB2b2lkIGNvbW1pdCgpIHRocm93cyBJT0V4Y2VwdGlvbjsKKyAgICB2b2lkIGNsb3NlKCkgdGhyb3dzIElPRXhjZXB0aW9uOworICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kYXRhRmxvdy9pbnN0L2V4cGVjdGVkLnhtbCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RhdGFGbG93L2luc3QvZXhwZWN0ZWQueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ5MGFhNTIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kYXRhRmxvdy9pbnN0L2V4cGVjdGVkLnhtbApAQCAtMCwwICsxLDkgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8cHJvYmxlbXM+CisgIDxwcm9ibGVtPgorICAgIDxmaWxlPkluc3QuamF2YTwvZmlsZT4KKyAgICA8bGluZT4xNjwvbGluZT4KKyAgICA8ZGVzY3JpcHRpb24+Q29uZGl0aW9uICdhIGluc3RhbmNlb2YgQScgaXMgYWx3YXlzIHRydWU8L2Rlc2NyaXB0aW9uPgorICA8L3Byb2JsZW0+Cis8L3Byb2JsZW1zPgorCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kYXRhRmxvdy9pbnN0L3NyYy9JbnN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kYXRhRmxvdy9pbnN0L3NyYy9JbnN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWJlNWZjZgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RhdGFGbG93L2luc3Qvc3JjL0luc3QuamF2YQpAQCAtMCwwICsxLDI3IEBACitjbGFzcyBBIHsKKworfQorCitjbGFzcyBCIGV4dGVuZHMgQSB7CisKK30KKworcHVibGljIGNsYXNzIEluc3QgeworICAgIHB1YmxpYyB2b2lkIHgoKSB7CisgICAgICAgIE9iamVjdCBhID0gbmV3IE9iamVjdCgpOworCisKKyAgICAgICAgaWYgKGEgaW5zdGFuY2VvZiBCKSB7CisgICAgICAgICAgICBBIGFhID0oQSkgYTsKKyAgICAgICAgICAgIGlmIChhIGluc3RhbmNlb2YgQSkgeworICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSGVIZSIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKGFhKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHB1YmxpYyB2b2lkIHkoT2JqZWN0IGEpIHsKKyAgICAgICAgaWYgKGEgaW5zdGFuY2VvZiBBKSB7fQorICAgICAgICBpZiAoYSBpbnN0YW5jZW9mIEIpIHt9CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGF0YUZsb3cvbnBlMS9leHBlY3RlZC54bWwgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kYXRhRmxvdy9ucGUxL2V4cGVjdGVkLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYzg5ZjEzCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGF0YUZsb3cvbnBlMS9leHBlY3RlZC54bWwKQEAgLTAsMCArMSw5IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHByb2JsZW1zPgorICA8cHJvYmxlbT4KKyAgICA8ZmlsZT5OcGUuamF2YTwvZmlsZT4KKyAgICA8bGluZT43PC9saW5lPgorICAgIDxkZXNjcmlwdGlvbj5NZXRob2QgaW52b2NhdGlvbiAnby5lcXVhbHMoKScgcHJvZHVjZSBOdWxsUG9pbnRlckV4Y2VwdGlvbjwvZGVzY3JpcHRpb24+CisgIDwvcHJvYmxlbT4KKzwvcHJvYmxlbXM+CisKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RhdGFGbG93L25wZTEvc3JjL05wZS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGF0YUZsb3cvbnBlMS9zcmMvTnBlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTAxNTJlMDUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kYXRhRmxvdy9ucGUxL3NyYy9OcGUuamF2YQpAQCAtMCwwICsxLDkgQEAKK3B1YmxpYyBjbGFzcyBOcGUgeworICBwdWJsaWMgdm9pZCBhKE9iamVjdCBvKSB7CisgICAgaWYgKG8gIT0gbnVsbCkgeworICAgICAgLy8gRG8gc29tZXRoaW5nCisgICAgfQorCisgICAgby5lcXVhbHMoKTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RhdGFGbG93L251bGxhYmxlRmllbGQvZXhwZWN0ZWQueG1sIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGF0YUZsb3cvbnVsbGFibGVGaWVsZC9leHBlY3RlZC54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzU1Y2NiMQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RhdGFGbG93L251bGxhYmxlRmllbGQvZXhwZWN0ZWQueG1sCkBAIC0wLDAgKzEsOSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxwcm9ibGVtcz4KKyAgPHByb2JsZW0+CisgICAgPGZpbGU+VGVzdC5qYXZhPC9maWxlPgorICAgIDxsaW5lPjY8L2xpbmU+CisgICAgPGRlc2NyaXB0aW9uPidzLmVxdWFscyhzKScgbWF5IHByb2R1Y2UgTnVsbFBvaW50ZXJFeGNlcHRpb248L2Rlc2NyaXB0aW9uPgorICA8L3Byb2JsZW0+Cis8L3Byb2JsZW1zPgorCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kYXRhRmxvdy9udWxsYWJsZUZpZWxkL3NyYy9UZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kYXRhRmxvdy9udWxsYWJsZUZpZWxkL3NyYy9UZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGRjMGRiZQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RhdGFGbG93L251bGxhYmxlRmllbGQvc3JjL1Rlc3QuamF2YQpAQCAtMCwwICsxLDggQEAKK3B1YmxpYyBjbGFzcyBUZXN0IHsKKyAgcHVibGljIFN0cmluZyBzOworCisgIHB1YmxpYyB2b2lkIGZvbygpIHsKKyAgICAgcyA9IG51bGw7CisgICAgIGJvb2xlYW4gYiA9IHMuZXF1YWxzKHMpOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGF0YUZsb3cvb3JCdWcvZXhwZWN0ZWQueG1sIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGF0YUZsb3cvb3JCdWcvZXhwZWN0ZWQueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVjMjcyYWIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kYXRhRmxvdy9vckJ1Zy9leHBlY3RlZC54bWwKQEAgLTAsMCArMSwzIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHByb2JsZW1zLz4KKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGF0YUZsb3cvb3JCdWcvc3JjL1Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RhdGFGbG93L29yQnVnL3NyYy9UZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjg5ZTI0ZAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RhdGFGbG93L29yQnVnL3NyYy9UZXN0LmphdmEKQEAgLTAsMCArMSw4IEBACitwdWJsaWMgY2xhc3MgVGVzdCB7CisgIHB1YmxpYyBib29sZWFuIGFiYyhPYmplY3QgbzEsIE9iamVjdCBvMikgeworICAgIGlmIChvMSA9PSBudWxsIHx8IG8yID09IG51bGwpIHsKKyAgICAgIHJldHVybiBvMSA9PSBvMjsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGF0YUZsb3cvc2NySURFQTEvZXhwZWN0ZWQueG1sIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGF0YUZsb3cvc2NySURFQTEvZXhwZWN0ZWQueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA5NTNkZDcKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kYXRhRmxvdy9zY3JJREVBMS9leHBlY3RlZC54bWwKQEAgLTAsMCArMSwyIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHByb2JsZW1zIC8+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGF0YUZsb3cvc2NySURFQTEvc3JjL1Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RhdGFGbG93L3NjcklERUExL3NyYy9UZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmQ0NDRhOQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RhdGFGbG93L3NjcklERUExL3NyYy9UZXN0LmphdmEKQEAgLTAsMCArMSwxNiBAQAoraW1wb3J0IGphdmEuaW8uRmlsZU91dHB1dFN0cmVhbTsKKworY2xhc3MgVGVzdCB7CisgICAgc3RhdGljIHZvaWQgZm9vKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIEZpbGVPdXRwdXRTdHJlYW0gZm9zID0gbnVsbDsKKworICAgICAgICB0cnkgeworICAgICAgICAgICAgZm9zID0gbmV3IEZpbGVPdXRwdXRTdHJlYW0oImM6XFxteWZpbGUiKTsKKyAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCJPaCwgZGVhciBtZS4iLCBleCk7CisgICAgICAgIH0gZmluYWxseSB7CisgICAgICAgICAgICBpZiAoZm9zICE9IG51bGwpIHsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RhdGFGbG93L3RoaXNJbnN0YW5jZW9mL2V4cGVjdGVkLnhtbCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RhdGFGbG93L3RoaXNJbnN0YW5jZW9mL2V4cGVjdGVkLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZjZmNDk2Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGF0YUZsb3cvdGhpc0luc3RhbmNlb2YvZXhwZWN0ZWQueG1sCkBAIC0wLDAgKzEsOCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxwcm9ibGVtcz4KKyAgPHByb2JsZW0+CisgICAgPGZpbGU+VGVzdC5qYXZhPC9maWxlPgorICAgIDxsaW5lPjM8L2xpbmU+CisgICAgPGRlc2NyaXB0aW9uPid0aGlzIGluc3RhbmNlb2YgT2JqZWN0JyBpcyBhbHdheXMgdHJ1ZTwvZGVzY3JpcHRpb24+CisgIDwvcHJvYmxlbT4KKzwvcHJvYmxlbXM+CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kYXRhRmxvdy90aGlzSW5zdGFuY2VvZi9zcmMvVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGF0YUZsb3cvdGhpc0luc3RhbmNlb2Yvc3JjL1Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNzJkZDZkCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGF0YUZsb3cvdGhpc0luc3RhbmNlb2Yvc3JjL1Rlc3QuamF2YQpAQCAtMCwwICsxLDUgQEAKK3B1YmxpYyBjbGFzcyBUZXN0IHsKKyAgIHB1YmxpYyB2b2lkIGZvbygpIHsKKyAgICAgIGJvb2xlYW4gYiA9IHRoaXMgaW5zdGFuY2VvZiBPYmplY3Q7CisgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGF0YUZsb3cvdW5ib3hpbmdOUEUvZXhwZWN0ZWQueG1sIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGF0YUZsb3cvdW5ib3hpbmdOUEUvZXhwZWN0ZWQueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAwMDE2OGUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kYXRhRmxvdy91bmJveGluZ05QRS9leHBlY3RlZC54bWwKQEAgLTAsMCArMSwzODcgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8cHJvYmxlbXM+Cis8cHJvYmxlbT4KKyAgPGZpbGU+VGVzdC5qYXZhPC9maWxlPgorICA8bGluZT45NTwvbGluZT4KKyAgPG1ldGhvZD4KKyAgICA8bmFtZT5pbnQgZihpbnQgayk8L25hbWU+CisgICAgPGRpc3BsYXlfbmFtZT5mKGludCk8L2Rpc3BsYXlfbmFtZT4KKyAgICA8cGFja2FnZT4mbHQ7ZGVmYXVsdCZndDs8L3BhY2thZ2U+CisgICAgPGNsYXNzPgorICAgICAgPG5hbWU+QXV0bzwvbmFtZT4KKyAgICAgIDxkaXNwbGF5X25hbWU+QXV0bzwvZGlzcGxheV9uYW1lPgorICAgIDwvY2xhc3M+CisgIDwvbWV0aG9kPgorICA8cHJvYmxlbV9jbGFzcz5Db25zdGFudCBjb25kaXRpb25zICZhbXA7IGV4Y2VwdGlvbnM8L3Byb2JsZW1fY2xhc3M+CisgIDxkZXNjcmlwdGlvbj5VbmJveGluZyBvZiAmbHQ7Y29kZSZndDtpJmx0Oy9jb2RlJmd0OyBtYXkgcHJvZHVjZSAmbHQ7Y29kZSZndDtqYXZhLmxhbmcuTnVsbFBvaW50ZXJFeGNlcHRpb24mbHQ7L2NvZGUmZ3Q7LjwvZGVzY3JpcHRpb24+Cis8L3Byb2JsZW0+CisKKworCis8cHJvYmxlbT4KKyAgPGZpbGU+VGVzdC5qYXZhPC9maWxlPgorICA8bGluZT45MTwvbGluZT4KKyAgPG1ldGhvZD4KKyAgICA8bmFtZT5pbnQgZihpbnQgayk8L25hbWU+CisgICAgPGRpc3BsYXlfbmFtZT5mKGludCk8L2Rpc3BsYXlfbmFtZT4KKyAgICA8cGFja2FnZT4mbHQ7ZGVmYXVsdCZndDs8L3BhY2thZ2U+CisgICAgPGNsYXNzPgorICAgICAgPG5hbWU+QXV0bzwvbmFtZT4KKyAgICAgIDxkaXNwbGF5X25hbWU+QXV0bzwvZGlzcGxheV9uYW1lPgorICAgIDwvY2xhc3M+CisgIDwvbWV0aG9kPgorICA8cHJvYmxlbV9jbGFzcz5Db25zdGFudCBjb25kaXRpb25zICZhbXA7IGV4Y2VwdGlvbnM8L3Byb2JsZW1fY2xhc3M+CisgIDxkZXNjcmlwdGlvbj5VbmJveGluZyBvZiAmbHQ7Y29kZSZndDtpJmx0Oy9jb2RlJmd0OyBtYXkgcHJvZHVjZSAmbHQ7Y29kZSZndDtqYXZhLmxhbmcuTnVsbFBvaW50ZXJFeGNlcHRpb24mbHQ7L2NvZGUmZ3Q7LjwvZGVzY3JpcHRpb24+Cis8L3Byb2JsZW0+CisKKworCis8cHJvYmxlbT4KKyAgPGZpbGU+VGVzdC5qYXZhPC9maWxlPgorICA8bGluZT4zMTwvbGluZT4KKyAgPG1ldGhvZD4KKyAgICA8bmFtZT5pbnQgZihpbnQgayk8L25hbWU+CisgICAgPGRpc3BsYXlfbmFtZT5mKGludCk8L2Rpc3BsYXlfbmFtZT4KKyAgICA8cGFja2FnZT4mbHQ7ZGVmYXVsdCZndDs8L3BhY2thZ2U+CisgICAgPGNsYXNzPgorICAgICAgPG5hbWU+QXV0bzwvbmFtZT4KKyAgICAgIDxkaXNwbGF5X25hbWU+QXV0bzwvZGlzcGxheV9uYW1lPgorICAgIDwvY2xhc3M+CisgIDwvbWV0aG9kPgorICA8cHJvYmxlbV9jbGFzcz5Db25zdGFudCBjb25kaXRpb25zICZhbXA7IGV4Y2VwdGlvbnM8L3Byb2JsZW1fY2xhc3M+CisgIDxkZXNjcmlwdGlvbj5VbmJveGluZyBvZiAmbHQ7Y29kZSZndDtpJmx0Oy9jb2RlJmd0OyBtYXkgcHJvZHVjZSAmbHQ7Y29kZSZndDtqYXZhLmxhbmcuTnVsbFBvaW50ZXJFeGNlcHRpb24mbHQ7L2NvZGUmZ3Q7LjwvZGVzY3JpcHRpb24+Cis8L3Byb2JsZW0+CisKKworCis8cHJvYmxlbT4KKyAgPGZpbGU+VGVzdC5qYXZhPC9maWxlPgorICA8bGluZT44NzwvbGluZT4KKyAgPG1ldGhvZD4KKyAgICA8bmFtZT5pbnQgZihpbnQgayk8L25hbWU+CisgICAgPGRpc3BsYXlfbmFtZT5mKGludCk8L2Rpc3BsYXlfbmFtZT4KKyAgICA8cGFja2FnZT4mbHQ7ZGVmYXVsdCZndDs8L3BhY2thZ2U+CisgICAgPGNsYXNzPgorICAgICAgPG5hbWU+QXV0bzwvbmFtZT4KKyAgICAgIDxkaXNwbGF5X25hbWU+QXV0bzwvZGlzcGxheV9uYW1lPgorICAgIDwvY2xhc3M+CisgIDwvbWV0aG9kPgorICA8cHJvYmxlbV9jbGFzcz5Db25zdGFudCBjb25kaXRpb25zICZhbXA7IGV4Y2VwdGlvbnM8L3Byb2JsZW1fY2xhc3M+CisgIDxkZXNjcmlwdGlvbj5VbmJveGluZyBvZiAmbHQ7Y29kZSZndDtpJmx0Oy9jb2RlJmd0OyBtYXkgcHJvZHVjZSAmbHQ7Y29kZSZndDtqYXZhLmxhbmcuTnVsbFBvaW50ZXJFeGNlcHRpb24mbHQ7L2NvZGUmZ3Q7LjwvZGVzY3JpcHRpb24+Cis8L3Byb2JsZW0+CisKKworCis8cHJvYmxlbT4KKyAgPGZpbGU+VGVzdC5qYXZhPC9maWxlPgorICA8bGluZT4xNDwvbGluZT4KKyAgPG1ldGhvZD4KKyAgICA8bmFtZT5pbnQgZihpbnQgayk8L25hbWU+CisgICAgPGRpc3BsYXlfbmFtZT5mKGludCk8L2Rpc3BsYXlfbmFtZT4KKyAgICA8cGFja2FnZT4mbHQ7ZGVmYXVsdCZndDs8L3BhY2thZ2U+CisgICAgPGNsYXNzPgorICAgICAgPG5hbWU+QXV0bzwvbmFtZT4KKyAgICAgIDxkaXNwbGF5X25hbWU+QXV0bzwvZGlzcGxheV9uYW1lPgorICAgIDwvY2xhc3M+CisgIDwvbWV0aG9kPgorICA8cHJvYmxlbV9jbGFzcz5Db25zdGFudCBjb25kaXRpb25zICZhbXA7IGV4Y2VwdGlvbnM8L3Byb2JsZW1fY2xhc3M+CisgIDxkZXNjcmlwdGlvbj5VbmJveGluZyBvZiAmbHQ7Y29kZSZndDtpJmx0Oy9jb2RlJmd0OyBtYXkgcHJvZHVjZSAmbHQ7Y29kZSZndDtqYXZhLmxhbmcuTnVsbFBvaW50ZXJFeGNlcHRpb24mbHQ7L2NvZGUmZ3Q7LjwvZGVzY3JpcHRpb24+Cis8L3Byb2JsZW0+CisKKworCis8cHJvYmxlbT4KKyAgPGZpbGU+VGVzdC5qYXZhPC9maWxlPgorICA8bGluZT43NTwvbGluZT4KKyAgPG1ldGhvZD4KKyAgICA8bmFtZT5pbnQgZihpbnQgayk8L25hbWU+CisgICAgPGRpc3BsYXlfbmFtZT5mKGludCk8L2Rpc3BsYXlfbmFtZT4KKyAgICA8cGFja2FnZT4mbHQ7ZGVmYXVsdCZndDs8L3BhY2thZ2U+CisgICAgPGNsYXNzPgorICAgICAgPG5hbWU+QXV0bzwvbmFtZT4KKyAgICAgIDxkaXNwbGF5X25hbWU+QXV0bzwvZGlzcGxheV9uYW1lPgorICAgIDwvY2xhc3M+CisgIDwvbWV0aG9kPgorICA8cHJvYmxlbV9jbGFzcz5Db25zdGFudCBjb25kaXRpb25zICZhbXA7IGV4Y2VwdGlvbnM8L3Byb2JsZW1fY2xhc3M+CisgIDxkZXNjcmlwdGlvbj5VbmJveGluZyBvZiAmbHQ7Y29kZSZndDtpJmx0Oy9jb2RlJmd0OyBtYXkgcHJvZHVjZSAmbHQ7Y29kZSZndDtqYXZhLmxhbmcuTnVsbFBvaW50ZXJFeGNlcHRpb24mbHQ7L2NvZGUmZ3Q7LjwvZGVzY3JpcHRpb24+Cis8L3Byb2JsZW0+CisKKworCis8cHJvYmxlbT4KKyAgPGZpbGU+VGVzdC5qYXZhPC9maWxlPgorICA8bGluZT44MzwvbGluZT4KKyAgPG1ldGhvZD4KKyAgICA8bmFtZT5pbnQgZihpbnQgayk8L25hbWU+CisgICAgPGRpc3BsYXlfbmFtZT5mKGludCk8L2Rpc3BsYXlfbmFtZT4KKyAgICA8cGFja2FnZT4mbHQ7ZGVmYXVsdCZndDs8L3BhY2thZ2U+CisgICAgPGNsYXNzPgorICAgICAgPG5hbWU+QXV0bzwvbmFtZT4KKyAgICAgIDxkaXNwbGF5X25hbWU+QXV0bzwvZGlzcGxheV9uYW1lPgorICAgIDwvY2xhc3M+CisgIDwvbWV0aG9kPgorICA8cHJvYmxlbV9jbGFzcz5Db25zdGFudCBjb25kaXRpb25zICZhbXA7IGV4Y2VwdGlvbnM8L3Byb2JsZW1fY2xhc3M+CisgIDxkZXNjcmlwdGlvbj5VbmJveGluZyBvZiAmbHQ7Y29kZSZndDtpJmx0Oy9jb2RlJmd0OyBtYXkgcHJvZHVjZSAmbHQ7Y29kZSZndDtqYXZhLmxhbmcuTnVsbFBvaW50ZXJFeGNlcHRpb24mbHQ7L2NvZGUmZ3Q7LjwvZGVzY3JpcHRpb24+Cis8L3Byb2JsZW0+CisKKworCis8cHJvYmxlbT4KKyAgPGZpbGU+VGVzdC5qYXZhPC9maWxlPgorICA8bGluZT40NTwvbGluZT4KKyAgPG1ldGhvZD4KKyAgICA8bmFtZT5pbnQgZihpbnQgayk8L25hbWU+CisgICAgPGRpc3BsYXlfbmFtZT5mKGludCk8L2Rpc3BsYXlfbmFtZT4KKyAgICA8cGFja2FnZT4mbHQ7ZGVmYXVsdCZndDs8L3BhY2thZ2U+CisgICAgPGNsYXNzPgorICAgICAgPG5hbWU+QXV0bzwvbmFtZT4KKyAgICAgIDxkaXNwbGF5X25hbWU+QXV0bzwvZGlzcGxheV9uYW1lPgorICAgIDwvY2xhc3M+CisgIDwvbWV0aG9kPgorICA8cHJvYmxlbV9jbGFzcz5Db25zdGFudCBjb25kaXRpb25zICZhbXA7IGV4Y2VwdGlvbnM8L3Byb2JsZW1fY2xhc3M+CisgIDxkZXNjcmlwdGlvbj5VbmJveGluZyBvZiAmbHQ7Y29kZSZndDtpJmx0Oy9jb2RlJmd0OyBtYXkgcHJvZHVjZSAmbHQ7Y29kZSZndDtqYXZhLmxhbmcuTnVsbFBvaW50ZXJFeGNlcHRpb24mbHQ7L2NvZGUmZ3Q7LjwvZGVzY3JpcHRpb24+Cis8L3Byb2JsZW0+CisKKworCis8cHJvYmxlbT4KKyAgPGZpbGU+VGVzdC5qYXZhPC9maWxlPgorICA8bGluZT42NzwvbGluZT4KKyAgPG1ldGhvZD4KKyAgICA8bmFtZT5pbnQgZihpbnQgayk8L25hbWU+CisgICAgPGRpc3BsYXlfbmFtZT5mKGludCk8L2Rpc3BsYXlfbmFtZT4KKyAgICA8cGFja2FnZT4mbHQ7ZGVmYXVsdCZndDs8L3BhY2thZ2U+CisgICAgPGNsYXNzPgorICAgICAgPG5hbWU+QXV0bzwvbmFtZT4KKyAgICAgIDxkaXNwbGF5X25hbWU+QXV0bzwvZGlzcGxheV9uYW1lPgorICAgIDwvY2xhc3M+CisgIDwvbWV0aG9kPgorICA8cHJvYmxlbV9jbGFzcz5Db25zdGFudCBjb25kaXRpb25zICZhbXA7IGV4Y2VwdGlvbnM8L3Byb2JsZW1fY2xhc3M+CisgIDxkZXNjcmlwdGlvbj5VbmJveGluZyBvZiAmbHQ7Y29kZSZndDtpJmx0Oy9jb2RlJmd0OyBtYXkgcHJvZHVjZSAmbHQ7Y29kZSZndDtqYXZhLmxhbmcuTnVsbFBvaW50ZXJFeGNlcHRpb24mbHQ7L2NvZGUmZ3Q7LjwvZGVzY3JpcHRpb24+Cis8L3Byb2JsZW0+CisKKworCis8cHJvYmxlbT4KKyAgPGZpbGU+VGVzdC5qYXZhPC9maWxlPgorICA8bGluZT43MTwvbGluZT4KKyAgPG1ldGhvZD4KKyAgICA8bmFtZT5pbnQgZihpbnQgayk8L25hbWU+CisgICAgPGRpc3BsYXlfbmFtZT5mKGludCk8L2Rpc3BsYXlfbmFtZT4KKyAgICA8cGFja2FnZT4mbHQ7ZGVmYXVsdCZndDs8L3BhY2thZ2U+CisgICAgPGNsYXNzPgorICAgICAgPG5hbWU+QXV0bzwvbmFtZT4KKyAgICAgIDxkaXNwbGF5X25hbWU+QXV0bzwvZGlzcGxheV9uYW1lPgorICAgIDwvY2xhc3M+CisgIDwvbWV0aG9kPgorICA8cHJvYmxlbV9jbGFzcz5Db25zdGFudCBjb25kaXRpb25zICZhbXA7IGV4Y2VwdGlvbnM8L3Byb2JsZW1fY2xhc3M+CisgIDxkZXNjcmlwdGlvbj5VbmJveGluZyBvZiAmbHQ7Y29kZSZndDtpJmx0Oy9jb2RlJmd0OyBtYXkgcHJvZHVjZSAmbHQ7Y29kZSZndDtqYXZhLmxhbmcuTnVsbFBvaW50ZXJFeGNlcHRpb24mbHQ7L2NvZGUmZ3Q7LjwvZGVzY3JpcHRpb24+Cis8L3Byb2JsZW0+CisKKworCis8cHJvYmxlbT4KKyAgPGZpbGU+VGVzdC5qYXZhPC9maWxlPgorICA8bGluZT44PC9saW5lPgorICA8bWV0aG9kPgorICAgIDxuYW1lPmludCBmKGludCBrKTwvbmFtZT4KKyAgICA8ZGlzcGxheV9uYW1lPmYoaW50KTwvZGlzcGxheV9uYW1lPgorICAgIDxwYWNrYWdlPiZsdDtkZWZhdWx0Jmd0OzwvcGFja2FnZT4KKyAgICA8Y2xhc3M+CisgICAgICA8bmFtZT5BdXRvPC9uYW1lPgorICAgICAgPGRpc3BsYXlfbmFtZT5BdXRvPC9kaXNwbGF5X25hbWU+CisgICAgPC9jbGFzcz4KKyAgPC9tZXRob2Q+CisgIDxwcm9ibGVtX2NsYXNzPkNvbnN0YW50IGNvbmRpdGlvbnMgJmFtcDsgZXhjZXB0aW9uczwvcHJvYmxlbV9jbGFzcz4KKyAgPGRlc2NyaXB0aW9uPlVuYm94aW5nIG9mICZsdDtjb2RlJmd0O2kmbHQ7L2NvZGUmZ3Q7IG1heSBwcm9kdWNlICZsdDtjb2RlJmd0O2phdmEubGFuZy5OdWxsUG9pbnRlckV4Y2VwdGlvbiZsdDsvY29kZSZndDsuPC9kZXNjcmlwdGlvbj4KKzwvcHJvYmxlbT4KKworCisKKzxwcm9ibGVtPgorICA8ZmlsZT5UZXN0LmphdmE8L2ZpbGU+CisgIDxsaW5lPjc5PC9saW5lPgorICA8bWV0aG9kPgorICAgIDxuYW1lPmludCBmKGludCBrKTwvbmFtZT4KKyAgICA8ZGlzcGxheV9uYW1lPmYoaW50KTwvZGlzcGxheV9uYW1lPgorICAgIDxwYWNrYWdlPiZsdDtkZWZhdWx0Jmd0OzwvcGFja2FnZT4KKyAgICA8Y2xhc3M+CisgICAgICA8bmFtZT5BdXRvPC9uYW1lPgorICAgICAgPGRpc3BsYXlfbmFtZT5BdXRvPC9kaXNwbGF5X25hbWU+CisgICAgPC9jbGFzcz4KKyAgPC9tZXRob2Q+CisgIDxwcm9ibGVtX2NsYXNzPkNvbnN0YW50IGNvbmRpdGlvbnMgJmFtcDsgZXhjZXB0aW9uczwvcHJvYmxlbV9jbGFzcz4KKyAgPGRlc2NyaXB0aW9uPlVuYm94aW5nIG9mICZsdDtjb2RlJmd0O2kmbHQ7L2NvZGUmZ3Q7IG1heSBwcm9kdWNlICZsdDtjb2RlJmd0O2phdmEubGFuZy5OdWxsUG9pbnRlckV4Y2VwdGlvbiZsdDsvY29kZSZndDsuPC9kZXNjcmlwdGlvbj4KKzwvcHJvYmxlbT4KKworCisKKzxwcm9ibGVtPgorICA8ZmlsZT5UZXN0LmphdmE8L2ZpbGU+CisgIDxsaW5lPjIyPC9saW5lPgorICA8bWV0aG9kPgorICAgIDxuYW1lPmludCBmKGludCBrKTwvbmFtZT4KKyAgICA8ZGlzcGxheV9uYW1lPmYoaW50KTwvZGlzcGxheV9uYW1lPgorICAgIDxwYWNrYWdlPiZsdDtkZWZhdWx0Jmd0OzwvcGFja2FnZT4KKyAgICA8Y2xhc3M+CisgICAgICA8bmFtZT5BdXRvPC9uYW1lPgorICAgICAgPGRpc3BsYXlfbmFtZT5BdXRvPC9kaXNwbGF5X25hbWU+CisgICAgPC9jbGFzcz4KKyAgPC9tZXRob2Q+CisgIDxwcm9ibGVtX2NsYXNzPkNvbnN0YW50IGNvbmRpdGlvbnMgJmFtcDsgZXhjZXB0aW9uczwvcHJvYmxlbV9jbGFzcz4KKyAgPGRlc2NyaXB0aW9uPlVuYm94aW5nIG9mICZsdDtjb2RlJmd0O2kmbHQ7L2NvZGUmZ3Q7IG1heSBwcm9kdWNlICZsdDtjb2RlJmd0O2phdmEubGFuZy5OdWxsUG9pbnRlckV4Y2VwdGlvbiZsdDsvY29kZSZndDsuPC9kZXNjcmlwdGlvbj4KKzwvcHJvYmxlbT4KKworCisKKzxwcm9ibGVtPgorICA8ZmlsZT5UZXN0LmphdmE8L2ZpbGU+CisgIDxsaW5lPjUwPC9saW5lPgorICA8bWV0aG9kPgorICAgIDxuYW1lPmludCBmKGludCBrKTwvbmFtZT4KKyAgICA8ZGlzcGxheV9uYW1lPmYoaW50KTwvZGlzcGxheV9uYW1lPgorICAgIDxwYWNrYWdlPiZsdDtkZWZhdWx0Jmd0OzwvcGFja2FnZT4KKyAgICA8Y2xhc3M+CisgICAgICA8bmFtZT5BdXRvPC9uYW1lPgorICAgICAgPGRpc3BsYXlfbmFtZT5BdXRvPC9kaXNwbGF5X25hbWU+CisgICAgPC9jbGFzcz4KKyAgPC9tZXRob2Q+CisgIDxwcm9ibGVtX2NsYXNzPkNvbnN0YW50IGNvbmRpdGlvbnMgJmFtcDsgZXhjZXB0aW9uczwvcHJvYmxlbV9jbGFzcz4KKyAgPGRlc2NyaXB0aW9uPlVuYm94aW5nIG9mICZsdDtjb2RlJmd0O2kmbHQ7L2NvZGUmZ3Q7IG1heSBwcm9kdWNlICZsdDtjb2RlJmd0O2phdmEubGFuZy5OdWxsUG9pbnRlckV4Y2VwdGlvbiZsdDsvY29kZSZndDsuPC9kZXNjcmlwdGlvbj4KKzwvcHJvYmxlbT4KKworCisKKzxwcm9ibGVtPgorICA8ZmlsZT5UZXN0LmphdmE8L2ZpbGU+CisgIDxsaW5lPjU2PC9saW5lPgorICA8bWV0aG9kPgorICAgIDxuYW1lPmludCBmKGludCBrKTwvbmFtZT4KKyAgICA8ZGlzcGxheV9uYW1lPmYoaW50KTwvZGlzcGxheV9uYW1lPgorICAgIDxwYWNrYWdlPiZsdDtkZWZhdWx0Jmd0OzwvcGFja2FnZT4KKyAgICA8Y2xhc3M+CisgICAgICA8bmFtZT5BdXRvPC9uYW1lPgorICAgICAgPGRpc3BsYXlfbmFtZT5BdXRvPC9kaXNwbGF5X25hbWU+CisgICAgPC9jbGFzcz4KKyAgPC9tZXRob2Q+CisgIDxwcm9ibGVtX2NsYXNzPkNvbnN0YW50IGNvbmRpdGlvbnMgJmFtcDsgZXhjZXB0aW9uczwvcHJvYmxlbV9jbGFzcz4KKyAgPGRlc2NyaXB0aW9uPlVuYm94aW5nIG9mICZsdDtjb2RlJmd0O2kmbHQ7L2NvZGUmZ3Q7IG1heSBwcm9kdWNlICZsdDtjb2RlJmd0O2phdmEubGFuZy5OdWxsUG9pbnRlckV4Y2VwdGlvbiZsdDsvY29kZSZndDsuPC9kZXNjcmlwdGlvbj4KKzwvcHJvYmxlbT4KKworCisKKzxwcm9ibGVtPgorICA8ZmlsZT5UZXN0LmphdmE8L2ZpbGU+CisgIDxsaW5lPjI2PC9saW5lPgorICA8bWV0aG9kPgorICAgIDxuYW1lPmludCBmKGludCBrKTwvbmFtZT4KKyAgICA8ZGlzcGxheV9uYW1lPmYoaW50KTwvZGlzcGxheV9uYW1lPgorICAgIDxwYWNrYWdlPiZsdDtkZWZhdWx0Jmd0OzwvcGFja2FnZT4KKyAgICA8Y2xhc3M+CisgICAgICA8bmFtZT5BdXRvPC9uYW1lPgorICAgICAgPGRpc3BsYXlfbmFtZT5BdXRvPC9kaXNwbGF5X25hbWU+CisgICAgPC9jbGFzcz4KKyAgPC9tZXRob2Q+CisgIDxwcm9ibGVtX2NsYXNzPkNvbnN0YW50IGNvbmRpdGlvbnMgJmFtcDsgZXhjZXB0aW9uczwvcHJvYmxlbV9jbGFzcz4KKyAgPGRlc2NyaXB0aW9uPlVuYm94aW5nIG9mICZsdDtjb2RlJmd0O2kmbHQ7L2NvZGUmZ3Q7IG1heSBwcm9kdWNlICZsdDtjb2RlJmd0O2phdmEubGFuZy5OdWxsUG9pbnRlckV4Y2VwdGlvbiZsdDsvY29kZSZndDsuPC9kZXNjcmlwdGlvbj4KKzwvcHJvYmxlbT4KKworCisKKzxwcm9ibGVtPgorICA8ZmlsZT5UZXN0LmphdmE8L2ZpbGU+CisgIDxsaW5lPjk5PC9saW5lPgorICA8bWV0aG9kPgorICAgIDxuYW1lPmludCBmKGludCBrKTwvbmFtZT4KKyAgICA8ZGlzcGxheV9uYW1lPmYoaW50KTwvZGlzcGxheV9uYW1lPgorICAgIDxwYWNrYWdlPiZsdDtkZWZhdWx0Jmd0OzwvcGFja2FnZT4KKyAgICA8Y2xhc3M+CisgICAgICA8bmFtZT5BdXRvPC9uYW1lPgorICAgICAgPGRpc3BsYXlfbmFtZT5BdXRvPC9kaXNwbGF5X25hbWU+CisgICAgPC9jbGFzcz4KKyAgPC9tZXRob2Q+CisgIDxwcm9ibGVtX2NsYXNzPkNvbnN0YW50IGNvbmRpdGlvbnMgJmFtcDsgZXhjZXB0aW9uczwvcHJvYmxlbV9jbGFzcz4KKyAgPGRlc2NyaXB0aW9uPlVuYm94aW5nIG9mICZsdDtjb2RlJmd0O2kmbHQ7L2NvZGUmZ3Q7IG1heSBwcm9kdWNlICZsdDtjb2RlJmd0O2phdmEubGFuZy5OdWxsUG9pbnRlckV4Y2VwdGlvbiZsdDsvY29kZSZndDsuPC9kZXNjcmlwdGlvbj4KKzwvcHJvYmxlbT4KKworCisKKzxwcm9ibGVtPgorICA8ZmlsZT5UZXN0LmphdmE8L2ZpbGU+CisgIDxsaW5lPjM1PC9saW5lPgorICA8bWV0aG9kPgorICAgIDxuYW1lPmludCBmKGludCBrKTwvbmFtZT4KKyAgICA8ZGlzcGxheV9uYW1lPmYoaW50KTwvZGlzcGxheV9uYW1lPgorICAgIDxwYWNrYWdlPiZsdDtkZWZhdWx0Jmd0OzwvcGFja2FnZT4KKyAgICA8Y2xhc3M+CisgICAgICA8bmFtZT5BdXRvPC9uYW1lPgorICAgICAgPGRpc3BsYXlfbmFtZT5BdXRvPC9kaXNwbGF5X25hbWU+CisgICAgPC9jbGFzcz4KKyAgPC9tZXRob2Q+CisgIDxwcm9ibGVtX2NsYXNzPkNvbnN0YW50IGNvbmRpdGlvbnMgJmFtcDsgZXhjZXB0aW9uczwvcHJvYmxlbV9jbGFzcz4KKyAgPGRlc2NyaXB0aW9uPlVuYm94aW5nIG9mICZsdDtjb2RlJmd0O2kmbHQ7L2NvZGUmZ3Q7IG1heSBwcm9kdWNlICZsdDtjb2RlJmd0O2phdmEubGFuZy5OdWxsUG9pbnRlckV4Y2VwdGlvbiZsdDsvY29kZSZndDsuPC9kZXNjcmlwdGlvbj4KKzwvcHJvYmxlbT4KKworCisKKzxwcm9ibGVtPgorICA8ZmlsZT5UZXN0LmphdmE8L2ZpbGU+CisgIDxsaW5lPjQwPC9saW5lPgorICA8bWV0aG9kPgorICAgIDxuYW1lPmludCBmKGludCBrKTwvbmFtZT4KKyAgICA8ZGlzcGxheV9uYW1lPmYoaW50KTwvZGlzcGxheV9uYW1lPgorICAgIDxwYWNrYWdlPiZsdDtkZWZhdWx0Jmd0OzwvcGFja2FnZT4KKyAgICA8Y2xhc3M+CisgICAgICA8bmFtZT5BdXRvPC9uYW1lPgorICAgICAgPGRpc3BsYXlfbmFtZT5BdXRvPC9kaXNwbGF5X25hbWU+CisgICAgPC9jbGFzcz4KKyAgPC9tZXRob2Q+CisgIDxwcm9ibGVtX2NsYXNzPkNvbnN0YW50IGNvbmRpdGlvbnMgJmFtcDsgZXhjZXB0aW9uczwvcHJvYmxlbV9jbGFzcz4KKyAgPGRlc2NyaXB0aW9uPlVuYm94aW5nIG9mICZsdDtjb2RlJmd0O2kmbHQ7L2NvZGUmZ3Q7IG1heSBwcm9kdWNlICZsdDtjb2RlJmd0O2phdmEubGFuZy5OdWxsUG9pbnRlckV4Y2VwdGlvbiZsdDsvY29kZSZndDsuPC9kZXNjcmlwdGlvbj4KKzwvcHJvYmxlbT4KKworCisKKzxwcm9ibGVtPgorICA8ZmlsZT5UZXN0LmphdmE8L2ZpbGU+CisgIDxsaW5lPjYxPC9saW5lPgorICA8bWV0aG9kPgorICAgIDxuYW1lPmludCBmKGludCBrKTwvbmFtZT4KKyAgICA8ZGlzcGxheV9uYW1lPmYoaW50KTwvZGlzcGxheV9uYW1lPgorICAgIDxwYWNrYWdlPiZsdDtkZWZhdWx0Jmd0OzwvcGFja2FnZT4KKyAgICA8Y2xhc3M+CisgICAgICA8bmFtZT5BdXRvPC9uYW1lPgorICAgICAgPGRpc3BsYXlfbmFtZT5BdXRvPC9kaXNwbGF5X25hbWU+CisgICAgPC9jbGFzcz4KKyAgPC9tZXRob2Q+CisgIDxwcm9ibGVtX2NsYXNzPkNvbnN0YW50IGNvbmRpdGlvbnMgJmFtcDsgZXhjZXB0aW9uczwvcHJvYmxlbV9jbGFzcz4KKyAgPGRlc2NyaXB0aW9uPlVuYm94aW5nIG9mICZsdDtjb2RlJmd0O2kmbHQ7L2NvZGUmZ3Q7IG1heSBwcm9kdWNlICZsdDtjb2RlJmd0O2phdmEubGFuZy5OdWxsUG9pbnRlckV4Y2VwdGlvbiZsdDsvY29kZSZndDsuPC9kZXNjcmlwdGlvbj4KKzwvcHJvYmxlbT4KKworCisKKzxwcm9ibGVtPgorICA8ZmlsZT5UZXN0LmphdmE8L2ZpbGU+CisgIDxsaW5lPjE4PC9saW5lPgorICA8bWV0aG9kPgorICAgIDxuYW1lPmludCBmKGludCBrKTwvbmFtZT4KKyAgICA8ZGlzcGxheV9uYW1lPmYoaW50KTwvZGlzcGxheV9uYW1lPgorICAgIDxwYWNrYWdlPiZsdDtkZWZhdWx0Jmd0OzwvcGFja2FnZT4KKyAgICA8Y2xhc3M+CisgICAgICA8bmFtZT5BdXRvPC9uYW1lPgorICAgICAgPGRpc3BsYXlfbmFtZT5BdXRvPC9kaXNwbGF5X25hbWU+CisgICAgPC9jbGFzcz4KKyAgPC9tZXRob2Q+CisgIDxwcm9ibGVtX2NsYXNzPkNvbnN0YW50IGNvbmRpdGlvbnMgJmFtcDsgZXhjZXB0aW9uczwvcHJvYmxlbV9jbGFzcz4KKyAgPGRlc2NyaXB0aW9uPlVuYm94aW5nIG9mICZsdDtjb2RlJmd0O2kmbHQ7L2NvZGUmZ3Q7IG1heSBwcm9kdWNlICZsdDtjb2RlJmd0O2phdmEubGFuZy5OdWxsUG9pbnRlckV4Y2VwdGlvbiZsdDsvY29kZSZndDsuPC9kZXNjcmlwdGlvbj4KKzwvcHJvYmxlbT4KKworICA8cHJvYmxlbT4KKyAgICA8ZmlsZT5UZXN0LmphdmE8L2ZpbGU+CisgICAgPGxpbmU+Njc8L2xpbmU+CisgICAgPHBhY2thZ2U+Jmx0O2RlZmF1bHQmZ3Q7PC9wYWNrYWdlPgorICAgIDxwcm9ibGVtX2NsYXNzIHNldmVyaXR5PSJXQVJOSU5HIiBhdHRyaWJ1dGVfa2V5PSJXQVJOSU5HX0FUVFJJQlVURVMiPkNvbnN0YW50IGNvbmRpdGlvbnMgJmFtcDsgZXhjZXB0aW9uczwvcHJvYmxlbV9jbGFzcz4KKyAgICA8ZGVzY3JpcHRpb24+Q29uZGl0aW9uICZsdDtjb2RlJmd0O2kmbHQ7L2NvZGUmZ3Q7IGlzIGFsd2F5cyAmbHQ7Y29kZSZndDt0cnVlJmx0Oy9jb2RlJmd0OyB3aGVuIHJlYWNoZWQ8L2Rlc2NyaXB0aW9uPgorICA8L3Byb2JsZW0+CisKKzwvcHJvYmxlbXM+CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kYXRhRmxvdy91bmJveGluZ05QRS9zcmMvVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGF0YUZsb3cvdW5ib3hpbmdOUEUvc3JjL1Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YWYwYmUwCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGF0YUZsb3cvdW5ib3hpbmdOUEUvc3JjL1Rlc3QuamF2YQpAQCAtMCwwICsxLDEwNCBAQAorY2xhc3MgQXV0byB7CisgICAgcHVibGljIEF1dG8oaW50IGspIHsKKyAgICB9CisKKyAgICBpbnQgZihpbnQgaykgeworICAgICAgICB7CisgICAgICAgICAgICBJbnRlZ2VyIGkgPSBudWxsOworICAgICAgICAgICAgaWYgKGk+MCkgeworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgeworICAgICAgICAgICAgSW50ZWdlciBpID0gbnVsbDsKKyAgICAgICAgICAgIGludCBpMSA9IChpbnQpIGk7CisgICAgICAgIH0KKyAgICAgICAgeworICAgICAgICAgICAgSW50ZWdlciBpID0gbnVsbDsKKyAgICAgICAgICAgIGludCBpMSA9IGkraTsKKyAgICAgICAgfQorICAgICAgICB7CisgICAgICAgICAgICBJbnRlZ2VyIGkgPSBudWxsOworICAgICAgICAgICAgaW50IGkxID0gaSsrOworICAgICAgICB9CisgICAgICAgIHsKKyAgICAgICAgICAgIEludGVnZXIgaSA9IG51bGw7CisgICAgICAgICAgICBJbnRlZ2VyIGkxID0gaSsrOworICAgICAgICB9CisgICAgICAgIHsKKyAgICAgICAgICAgIEludGVnZXIgaSA9IG51bGw7CisgICAgICAgICAgICBpbnRbXSBpYSA9IG5ldyBpbnRbMF07CisgICAgICAgICAgICBpbnQgaTIgPSBpYVtpXTsKKyAgICAgICAgfQorICAgICAgICB7CisgICAgICAgICAgICBJbnRlZ2VyIGkgPSBudWxsOworICAgICAgICAgICAgaW50W10gaTIgPSB7aX07CisgICAgICAgIH0KKyAgICAgICAgeworICAgICAgICAgICAgQm9vbGVhbiBpID0gbnVsbDsKKyAgICAgICAgICAgIGJvb2xlYW4gaTIgPSB0aGlzPT10aGlzOworICAgICAgICAgICAgaTIgJj0gaTsKKyAgICAgICAgfQorICAgICAgICB7CisgICAgICAgICAgICBCb29sZWFuIGkgPSBudWxsOworICAgICAgICAgICAgYm9vbGVhbiBpMiA9IHRoaXM9PXRoaXM7CisgICAgICAgICAgICBpMiB8PSBpOworICAgICAgICB9CisgICAgICAgIHsKKyAgICAgICAgICAgIEJvb2xlYW4gaSA9IG51bGw7CisgICAgICAgICAgICBib29sZWFuIGkyID0gdGhpcz09dGhpczsKKyAgICAgICAgICAgIGkyID0gIWk7CisgICAgICAgIH0KKworICAgICAgICB7CisgICAgICAgICAgICBJbnRlZ2VyIGkgPSBudWxsOworICAgICAgICAgICAgaWYgKHRoaXM9PXRoaXMpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gaTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICB7CisgICAgICAgICAgICBJbnRlZ2VyIGkgPSBudWxsOworICAgICAgICAgICAgc3dpdGNoKGkpIHsKKyAgICAgICAgICAgICAgICBjYXNlIDA6CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgeworICAgICAgICAgICAgQm9vbGVhbiBpID0gbnVsbDsKKyAgICAgICAgICAgIGJvb2xlYW4gaTIgPSBpICYmIGk7CisgICAgICAgIH0KKyAgICAgICAgeworICAgICAgICAgICAgQm9vbGVhbiBpID0gbnVsbDsKKyAgICAgICAgICAgIGJvb2xlYW4gaTIgPSBpIHwgaTsKKyAgICAgICAgfQorICAgICAgICB7CisgICAgICAgICAgICBCb29sZWFuIGkgPSBudWxsOworICAgICAgICAgICAgYm9vbGVhbiBpMiA9IHRydWUgXiBpOworICAgICAgICB9CisgICAgICAgIHsKKyAgICAgICAgICAgIEJvb2xlYW4gaSA9IG51bGw7CisgICAgICAgICAgICBib29sZWFuIGkyID0gaSA/IHRydWUgOiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICB7CisgICAgICAgICAgICBJbnRlZ2VyIGkgPSBudWxsOworICAgICAgICAgICAgZihpKTsKKyAgICAgICAgfQorICAgICAgICB7CisgICAgICAgICAgICBJbnRlZ2VyIGkgPSBudWxsOworICAgICAgICAgICAgbmV3IEF1dG8oaSk7CisgICAgICAgIH0KKyAgICAgICAgeworICAgICAgICAgICAgSW50ZWdlciBpID0gbnVsbDsKKyAgICAgICAgICAgIGkrKzsKKyAgICAgICAgfQorICAgICAgICB7CisgICAgICAgICAgICBJbnRlZ2VyIGkgPSBudWxsOworICAgICAgICAgICAgLS1pOworICAgICAgICB9CisgICAgICAgIHsKKyAgICAgICAgICAgIEJvb2xlYW4gaSA9IG51bGw7CisgICAgICAgICAgICBCb29sZWFuIGkyID0gIWk7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gMDsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kYXRhRmxvdy93cm9uZ0VxdWFsVHlwZXMvZXhwZWN0ZWQueG1sIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGF0YUZsb3cvd3JvbmdFcXVhbFR5cGVzL2V4cGVjdGVkLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YWM4NzlkCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGF0YUZsb3cvd3JvbmdFcXVhbFR5cGVzL2V4cGVjdGVkLnhtbApAQCAtMCwwICsxLDMgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8cHJvYmxlbXMgLz4KKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGF0YUZsb3cvd3JvbmdFcXVhbFR5cGVzL3NyYy9UZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kYXRhRmxvdy93cm9uZ0VxdWFsVHlwZXMvc3JjL1Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNTE0YjE5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGF0YUZsb3cvd3JvbmdFcXVhbFR5cGVzL3NyYy9UZXN0LmphdmEKQEAgLTAsMCArMSw4IEBACitpbXBvcnQgamF2YS51dGlsLkNhbGVuZGFyOworCitwdWJsaWMgY2xhc3MgVGVzdCB7CisgIHB1YmxpYyB2b2lkIGZvbyhPYmplY3QgYykgeworICAgIGlmIChjIGluc3RhbmNlb2YgQ2FsZW5kYXIpIHJldHVybjsgICAgCisgICAgaWYgKGMgPT0gQ2FsZW5kYXIuZ2V0SW5zdGFuY2UoKSkge30KKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RhdGFGbG93L3hvci9leHBlY3RlZC54bWwgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kYXRhRmxvdy94b3IvZXhwZWN0ZWQueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc5NmEzMTUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kYXRhRmxvdy94b3IvZXhwZWN0ZWQueG1sCkBAIC0wLDAgKzEsMiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxwcm9ibGVtcyAvPgpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGF0YUZsb3cveG9yL3NyYy9UZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kYXRhRmxvdy94b3Ivc3JjL1Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNGQ0NTg0Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGF0YUZsb3cveG9yL3NyYy9UZXN0LmphdmEKQEAgLTAsMCArMSw4IEBACitwdWJsaWMgY2xhc3MgVGVzdCB7CisgIHB1YmxpYyBzdGF0aWMgdm9pZCB0ZXN0KGZpbmFsIE9iamVjdCBhLCBmaW5hbCBPYmplY3QgYikgeworCWlmICgoYSA9PSBudWxsIF4gYiA9PSBudWxsKQorCQl8fCAoYSAhPSBudWxsICYmIGEuaGFzaENvZGUoKSAhPSBiLmhhc2hDb2RlKCkpKSB7CisJCVN5c3RlbS5vdXQucHJpbnRsbigiYWFhIik7CisJfQorICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGVhZENvZGUvU0NSNjA2Ny9leHBlY3RlZC54bWwgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kZWFkQ29kZS9TQ1I2MDY3L2V4cGVjdGVkLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZDcwNjdlCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGVhZENvZGUvU0NSNjA2Ny9leHBlY3RlZC54bWwKQEAgLTAsMCArMSw5IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHByb2JsZW1zPgorICA8cHJvYmxlbT4KKyAgICA8ZmlsZT5BLmphdmE8L2ZpbGU+CisgICAgPGxpbmU+MjwvbGluZT4KKyAgICA8ZGVzY3JpcHRpb24+Q29uc3RydWN0b3IgaXMgbmV2ZXIgdXNlZDwvZGVzY3JpcHRpb24+CisgIDwvcHJvYmxlbT4KKzwvcHJvYmxlbXM+CisKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RlYWRDb2RlL1NDUjYwNjcvZXh0X3NyYy9CLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kZWFkQ29kZS9TQ1I2MDY3L2V4dF9zcmMvQi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhiYjBlNTkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kZWFkQ29kZS9TQ1I2MDY3L2V4dF9zcmMvQi5qYXZhCkBAIC0wLDAgKzEsNCBAQAorY2xhc3MgQiB7CisgICAgQSBhPW5ldyBBKDApOworfQorCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kZWFkQ29kZS9TQ1I2MDY3L3NyYy9BLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kZWFkQ29kZS9TQ1I2MDY3L3NyYy9BLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDgzNDJjNQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RlYWRDb2RlL1NDUjYwNjcvc3JjL0EuamF2YQpAQCAtMCwwICsxLDggQEAKK2NsYXNzIEEgeworICAgIEEoKSB7CisgICAgfQorICAgIEEoaW50IGspIHsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKGspOworICAgIH0KK30KKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGVhZENvZGUvU0NSOTY5MC9leHBlY3RlZC54bWwgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kZWFkQ29kZS9TQ1I5NjkwL2V4cGVjdGVkLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNzA0ZDU4Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGVhZENvZGUvU0NSOTY5MC9leHBlY3RlZC54bWwKQEAgLTAsMCArMSw0IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHByb2JsZW1zPgorPC9wcm9ibGVtcz4KKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGVhZENvZGUvU0NSOTY5MC9leHRfc3JjL0IuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RlYWRDb2RlL1NDUjk2OTAvZXh0X3NyYy9CLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTAzNzM2MgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RlYWRDb2RlL1NDUjk2OTAvZXh0X3NyYy9CLmphdmEKQEAgLTAsMCArMSwzIEBACitjbGFzcyBCIGV4dGVuZHMgQSB7Cit9CisKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RlYWRDb2RlL1NDUjk2OTAvc3JjL0EuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RlYWRDb2RlL1NDUjk2OTAvc3JjL0EuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YTY0ZWNkCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGVhZENvZGUvU0NSOTY5MC9zcmMvQS5qYXZhCkBAIC0wLDAgKzEsNSBAQAorYWJzdHJhY3QgY2xhc3MgQSB7CisgICAgQSgpIHsKKyAgICB9Cit9CisKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RlYWRDb2RlL2Fic3RyYWN0Q2xhc3NXaXRoU2VyaWFsaXphYmxlU3ViY2xhc3Nlcy9leHBlY3RlZC54bWwgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kZWFkQ29kZS9hYnN0cmFjdENsYXNzV2l0aFNlcmlhbGl6YWJsZVN1YmNsYXNzZXMvZXhwZWN0ZWQueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc5ZTFhMGYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kZWFkQ29kZS9hYnN0cmFjdENsYXNzV2l0aFNlcmlhbGl6YWJsZVN1YmNsYXNzZXMvZXhwZWN0ZWQueG1sCkBAIC0wLDAgKzEsNCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxwcm9ibGVtcz4gIAorPC9wcm9ibGVtcz4KKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGVhZENvZGUvYWJzdHJhY3RDbGFzc1dpdGhTZXJpYWxpemFibGVTdWJjbGFzc2VzL3NyYy9UZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kZWFkQ29kZS9hYnN0cmFjdENsYXNzV2l0aFNlcmlhbGl6YWJsZVN1YmNsYXNzZXMvc3JjL1Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOTJiNzM4Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGVhZENvZGUvYWJzdHJhY3RDbGFzc1dpdGhTZXJpYWxpemFibGVTdWJjbGFzc2VzL3NyYy9UZXN0LmphdmEKQEAgLTAsMCArMSwxMyBAQAoraW1wb3J0IGphdmEuaW8uKjsKKworcHVibGljIGFic3RyYWN0IGNsYXNzIEEgeworICBwcm90ZWN0ZWQgT2JqZWN0IHJlYWRSZXNvbHZlKCkgdGhyb3dzIE9iamVjdFN0cmVhbUV4Y2VwdGlvbiB7CisgICAgcmV0dXJuIG51bGw7CisgIH0KK30KKworY2xhc3MgQUltcGwgZXh0ZW5kcyBBIGltcGxlbWVudHMgU2VyaWFsaXphYmxlIHsKKyAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworICAgIFN5c3RlbS5vdXQucHJpbnRsbihuZXcgQUltcGwoKS50b1N0cmluZygpKTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RlYWRDb2RlL2FkZGl0aW9uYWxBbm5vdGF0aW9ucy9leHBlY3RlZC54bWwgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kZWFkQ29kZS9hZGRpdGlvbmFsQW5ub3RhdGlvbnMvZXhwZWN0ZWQueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc5ZTFhMGYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kZWFkQ29kZS9hZGRpdGlvbmFsQW5ub3RhdGlvbnMvZXhwZWN0ZWQueG1sCkBAIC0wLDAgKzEsNCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxwcm9ibGVtcz4gIAorPC9wcm9ibGVtcz4KKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGVhZENvZGUvYWRkaXRpb25hbEFubm90YXRpb25zL3NyYy9UZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kZWFkQ29kZS9hZGRpdGlvbmFsQW5ub3RhdGlvbnMvc3JjL1Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMmVlOWQ3Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGVhZENvZGUvYWRkaXRpb25hbEFubm90YXRpb25zL3NyYy9UZXN0LmphdmEKQEAgLTAsMCArMSw5IEBACitAQW5ub3RhdGVkCitwdWJsaWMgY2xhc3MgVGVzdCB7CisgIEBBbm5vdGF0ZWQKKyAgcHVibGljIHZvaWQgZm9vKCl7fQorCisgIEBBbm5vdGF0ZWQKKyAgcHVibGljIGludCBteVB1YmxpY0ZpZWxkOworCit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGVhZENvZGUvYW5ub3RhdGlvbkludGVyZmFjZS9leHBlY3RlZC54bWwgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kZWFkQ29kZS9hbm5vdGF0aW9uSW50ZXJmYWNlL2V4cGVjdGVkLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OWUxYTBmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGVhZENvZGUvYW5ub3RhdGlvbkludGVyZmFjZS9leHBlY3RlZC54bWwKQEAgLTAsMCArMSw0IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHByb2JsZW1zPiAgCis8L3Byb2JsZW1zPgorCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kZWFkQ29kZS9hbm5vdGF0aW9uSW50ZXJmYWNlL3NyYy9UZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kZWFkQ29kZS9hbm5vdGF0aW9uSW50ZXJmYWNlL3NyYy9UZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDI4NjVkMQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RlYWRDb2RlL2Fubm90YXRpb25JbnRlcmZhY2Uvc3JjL1Rlc3QuamF2YQpAQCAtMCwwICsxLDYgQEAKK2ltcG9ydCBqYXZhLmxhbmcuYW5ub3RhdGlvbi4qOworCitAVGFyZ2V0KHtFbGVtZW50VHlwZS5NRVRIT0QsIEVsZW1lbnRUeXBlLkZJRUxELCBFbGVtZW50VHlwZS5QQVJBTUVURVIsIEVsZW1lbnRUeXBlLkxPQ0FMX1ZBUklBQkxFfSkKK3B1YmxpYyBAaW50ZXJmYWNlIFRlc3QgeworICBTdHJpbmcgdmFsdWUoKSBkZWZhdWx0ICIiOworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RlYWRDb2RlL2NoYWluT2ZDYWxscy9leHBlY3RlZC54bWwgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kZWFkQ29kZS9jaGFpbk9mQ2FsbHMvZXhwZWN0ZWQueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc5ZTFhMGYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kZWFkQ29kZS9jaGFpbk9mQ2FsbHMvZXhwZWN0ZWQueG1sCkBAIC0wLDAgKzEsNCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxwcm9ibGVtcz4gIAorPC9wcm9ibGVtcz4KKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGVhZENvZGUvY2hhaW5PZkNhbGxzL3NyYy9BLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kZWFkQ29kZS9jaGFpbk9mQ2FsbHMvc3JjL0EuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MjQwZDdmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGVhZENvZGUvY2hhaW5PZkNhbGxzL3NyYy9BLmphdmEKQEAgLTAsMCArMSw1IEBACitwdWJsaWMgY2xhc3MgQSB7CisgIHB1YmxpYyBBKCkgeworCisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kZWFkQ29kZS9jaGFpbk9mQ2FsbHMvc3JjL0IuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RlYWRDb2RlL2NoYWluT2ZDYWxscy9zcmMvQi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY2MTlkNWUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kZWFkQ29kZS9jaGFpbk9mQ2FsbHMvc3JjL0IuamF2YQpAQCAtMCwwICsxLDUgQEAKK3B1YmxpYyBjbGFzcyBCIGltcGxlbWVudHMgSXsKKyAgcHVibGljIHZvaWQgcHJvamVjdE9wZW5lZCgpIHsKKyAgICBuZXcgQSgpOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGVhZENvZGUvY2hhaW5PZkNhbGxzL3NyYy9JLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kZWFkQ29kZS9jaGFpbk9mQ2FsbHMvc3JjL0kuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMDA1ODFhCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGVhZENvZGUvY2hhaW5PZkNhbGxzL3NyYy9JLmphdmEKQEAgLTAsMCArMSwzIEBACitwdWJsaWMgaW50ZXJmYWNlIEkgeworICAgdm9pZCBwcm9qZWN0T3BlbmVkKCk7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGVhZENvZGUvY2hhaW5PZkNhbGxzL3NyYy9UZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kZWFkQ29kZS9jaGFpbk9mQ2FsbHMvc3JjL1Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMGM3YjA3Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGVhZENvZGUvY2hhaW5PZkNhbGxzL3NyYy9UZXN0LmphdmEKQEAgLTAsMCArMSw2IEBACitjbGFzcyBUZXN0IHsKKyAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncyl7CisgICAgSSBpID0gbnVsbDsKKyAgICBpLnByb2plY3RPcGVuZWQoKTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RlYWRDb2RlL2NoYWluT2ZDYWxscy9zcmMvY29tcHMueG1sIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGVhZENvZGUvY2hhaW5PZkNhbGxzL3NyYy9jb21wcy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjkzY2EzYQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RlYWRDb2RlL2NoYWluT2ZDYWxscy9zcmMvY29tcHMueG1sCkBAIC0wLDAgKzEgQEAKKzxjb21wb25lbnQ+QjwvY29tcG9uZW50PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RlYWRDb2RlL2NoYWluT2ZTdXBwcmVzc2lvbnMvZXhwZWN0ZWQueG1sIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGVhZENvZGUvY2hhaW5PZlN1cHByZXNzaW9ucy9leHBlY3RlZC54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzllMWEwZgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RlYWRDb2RlL2NoYWluT2ZTdXBwcmVzc2lvbnMvZXhwZWN0ZWQueG1sCkBAIC0wLDAgKzEsNCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxwcm9ibGVtcz4gIAorPC9wcm9ibGVtcz4KKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGVhZENvZGUvY2hhaW5PZlN1cHByZXNzaW9ucy9zcmMvQS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGVhZENvZGUvY2hhaW5PZlN1cHByZXNzaW9ucy9zcmMvQS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk5N2UxNDIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kZWFkQ29kZS9jaGFpbk9mU3VwcHJlc3Npb25zL3NyYy9BLmphdmEKQEAgLTAsMCArMSwxOCBAQAorcHVibGljIGNsYXNzIEEgeworICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKyAgICAgIG5ldyBBKCk7CisgICAgfQorCisgICAgcHJpdmF0ZSB2b2lkIGEoKXsKKyAgICB9CisKKyAgICBwcml2YXRlIHZvaWQgYigpeworICAgICAgYSgpOworICAgIH0KKworICAgIEBqYXZhLmxhbmcuU3VwcHJlc3NXYXJuaW5ncyh7IlVudXNlZERlY2xhcmF0aW9uIn0pCisgICAgcHJpdmF0ZSB2b2lkIGMoKXsKKyAgICAgIGIoKTsKKyAgICB9Cit9CisKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RlYWRDb2RlL2NsYXNzTGl0ZXJhbFJlZi9leHBlY3RlZC54bWwgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kZWFkQ29kZS9jbGFzc0xpdGVyYWxSZWYvZXhwZWN0ZWQueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJkYWZjNTIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kZWFkQ29kZS9jbGFzc0xpdGVyYWxSZWYvZXhwZWN0ZWQueG1sCkBAIC0wLDAgKzEsNCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxwcm9ibGVtcy8+CisKKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGVhZENvZGUvY2xhc3NMaXRlcmFsUmVmL3NyYy9UZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kZWFkQ29kZS9jbGFzc0xpdGVyYWxSZWYvc3JjL1Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMzUwMDE5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGVhZENvZGUvY2xhc3NMaXRlcmFsUmVmL3NyYy9UZXN0LmphdmEKQEAgLTAsMCArMSwxMiBAQAoraW1wb3J0IGphdmEubGFuZy5DbGFzczsKK2ltcG9ydCBqYXZhLmxhbmcuU3RyaW5nOworCitwdWJsaWMgY2xhc3MgVGVzdCB7CisgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKyAgICBUZXN0LmNsYXNzLmdldERlY2xhcmVkQ29uc3RydWN0b3IoU3RyaW5nLmNsYXNzKS5uZXdJbnN0YW5jZSgiRm9vIik7CisgIH0KKworICBwdWJsaWMgVGVzdChTdHJpbmcgcGFyYW0pIHsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlRoaXMgaXMgdXNlZCEiKTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGVhZENvZGUvY29uc3RydWN0b3JDYWxscy9leHBlY3RlZC54bWwgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kZWFkQ29kZS9jb25zdHJ1Y3RvckNhbGxzL2V4cGVjdGVkLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OWUxYTBmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGVhZENvZGUvY29uc3RydWN0b3JDYWxscy9leHBlY3RlZC54bWwKQEAgLTAsMCArMSw0IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHByb2JsZW1zPiAgCis8L3Byb2JsZW1zPgorCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kZWFkQ29kZS9jb25zdHJ1Y3RvckNhbGxzL3NyYy9BLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kZWFkQ29kZS9jb25zdHJ1Y3RvckNhbGxzL3NyYy9BLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjAxOTk5YQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RlYWRDb2RlL2NvbnN0cnVjdG9yQ2FsbHMvc3JjL0EuamF2YQpAQCAtMCwwICsxLDQgQEAKK3B1YmxpYyBjbGFzcyBBIHsKKyAgcHVibGljIEEoaW50IGkpIHsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RlYWRDb2RlL2NvbnN0cnVjdG9yQ2FsbHMvc3JjL0IuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RlYWRDb2RlL2NvbnN0cnVjdG9yQ2FsbHMvc3JjL0IuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43N2MxNDJkCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGVhZENvZGUvY29uc3RydWN0b3JDYWxscy9zcmMvQi5qYXZhCkBAIC0wLDAgKzEsNSBAQAorcHVibGljIGNsYXNzIEIgeworICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKXsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4obmV3IEEoMSkpOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGVhZENvZGUvY29uc3RydWN0b3JDYWxsczEvZXhwZWN0ZWQueG1sIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGVhZENvZGUvY29uc3RydWN0b3JDYWxsczEvZXhwZWN0ZWQueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc5ZTFhMGYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kZWFkQ29kZS9jb25zdHJ1Y3RvckNhbGxzMS9leHBlY3RlZC54bWwKQEAgLTAsMCArMSw0IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHByb2JsZW1zPiAgCis8L3Byb2JsZW1zPgorCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kZWFkQ29kZS9jb25zdHJ1Y3RvckNhbGxzMS9zcmMvVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGVhZENvZGUvY29uc3RydWN0b3JDYWxsczEvc3JjL1Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYjRjNGZiCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGVhZENvZGUvY29uc3RydWN0b3JDYWxsczEvc3JjL1Rlc3QuamF2YQpAQCAtMCwwICsxLDkgQEAKK3B1YmxpYyBjbGFzcyBUZXN0IHsKKyAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncyl7CisgICAgU3lzdGVtLm91dC5wcmludGxuKG5ldyBBKDEpKTsKKyAgfQorICAKKyAgcHJpdmF0ZSBjbGFzcyBBIHsKKyAgICBwdWJsaWMgQShpbnQgaSl7fQorICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGVhZENvZGUvY29uc3RydWN0b3JSZWFjaGFibGVGcm9tRmllbGRJbml0aWFsaXplci9leHBlY3RlZC54bWwgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kZWFkQ29kZS9jb25zdHJ1Y3RvclJlYWNoYWJsZUZyb21GaWVsZEluaXRpYWxpemVyL2V4cGVjdGVkLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OWUxYTBmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGVhZENvZGUvY29uc3RydWN0b3JSZWFjaGFibGVGcm9tRmllbGRJbml0aWFsaXplci9leHBlY3RlZC54bWwKQEAgLTAsMCArMSw0IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHByb2JsZW1zPiAgCis8L3Byb2JsZW1zPgorCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kZWFkQ29kZS9jb25zdHJ1Y3RvclJlYWNoYWJsZUZyb21GaWVsZEluaXRpYWxpemVyL3NyYy90ZXN0L0FNYXRjaGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kZWFkQ29kZS9jb25zdHJ1Y3RvclJlYWNoYWJsZUZyb21GaWVsZEluaXRpYWxpemVyL3NyYy90ZXN0L0FNYXRjaGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTM0ZDFmZAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RlYWRDb2RlL2NvbnN0cnVjdG9yUmVhY2hhYmxlRnJvbUZpZWxkSW5pdGlhbGl6ZXIvc3JjL3Rlc3QvQU1hdGNoZXIuamF2YQpAQCAtMCwwICsxLDggQEAKK3BhY2thZ2UgdGVzdDsKKworcHVibGljIGNsYXNzIEFNYXRjaGVyIGltcGxlbWVudHMgTWF0Y2hlcnsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBCcmFjZVBhaXIgW10gIFBBSVJTID0gbmV3IEJyYWNlUGFpcltde25ldyBCcmFjZVBhaXIoKX07CisgICAgcHVibGljIEJyYWNlUGFpcltdIGdldFBhaXJzKCkgeworICAgICAgICByZXR1cm4gUEFJUlM7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGVhZENvZGUvY29uc3RydWN0b3JSZWFjaGFibGVGcm9tRmllbGRJbml0aWFsaXplci9zcmMvdGVzdC9CcmFjZVBhaXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RlYWRDb2RlL2NvbnN0cnVjdG9yUmVhY2hhYmxlRnJvbUZpZWxkSW5pdGlhbGl6ZXIvc3JjL3Rlc3QvQnJhY2VQYWlyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWU0NDRhMwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RlYWRDb2RlL2NvbnN0cnVjdG9yUmVhY2hhYmxlRnJvbUZpZWxkSW5pdGlhbGl6ZXIvc3JjL3Rlc3QvQnJhY2VQYWlyLmphdmEKQEAgLTAsMCArMSw3IEBACitwYWNrYWdlIHRlc3Q7CisKK3B1YmxpYyBjbGFzcyBCcmFjZVBhaXIgeworCisgICAgcHVibGljIEJyYWNlUGFpcigpIHsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kZWFkQ29kZS9jb25zdHJ1Y3RvclJlYWNoYWJsZUZyb21GaWVsZEluaXRpYWxpemVyL3NyYy90ZXN0L01hdGNoZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RlYWRDb2RlL2NvbnN0cnVjdG9yUmVhY2hhYmxlRnJvbUZpZWxkSW5pdGlhbGl6ZXIvc3JjL3Rlc3QvTWF0Y2hlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFkMzcwZGUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kZWFkQ29kZS9jb25zdHJ1Y3RvclJlYWNoYWJsZUZyb21GaWVsZEluaXRpYWxpemVyL3NyYy90ZXN0L01hdGNoZXIuamF2YQpAQCAtMCwwICsxLDUgQEAKK3BhY2thZ2UgdGVzdDsKKworcHVibGljIGludGVyZmFjZSBNYXRjaGVyIHsKKyAgICBCcmFjZVBhaXJbXSBnZXRQYWlycygpOworfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGVhZENvZGUvY29uc3RydWN0b3JSZWFjaGFibGVGcm9tRmllbGRJbml0aWFsaXplci9zcmMvdGVzdC9UZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kZWFkQ29kZS9jb25zdHJ1Y3RvclJlYWNoYWJsZUZyb21GaWVsZEluaXRpYWxpemVyL3NyYy90ZXN0L1Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNTRkYjNkCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGVhZENvZGUvY29uc3RydWN0b3JSZWFjaGFibGVGcm9tRmllbGRJbml0aWFsaXplci9zcmMvdGVzdC9UZXN0LmphdmEKQEAgLTAsMCArMSwxMiBAQAorcGFja2FnZSB0ZXN0OworCitwdWJsaWMgY2xhc3MgVGVzdCB7CisKKyAgICBwdWJsaWMgVGVzdChNYXRjaGVyIG0pIHsKKyAgICAgICAgQnJhY2VQYWlyW10gYnJhY2VQYWlycyA9IG0uZ2V0UGFpcnMoKTsKKyAgICB9CisKKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihuZXcgVGVzdChuZXcgQU1hdGNoZXIoKSkpOworICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RlYWRDb2RlL2VudW1JbnN0YW50aWF0aW9uL2V4cGVjdGVkLnhtbCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RlYWRDb2RlL2VudW1JbnN0YW50aWF0aW9uL2V4cGVjdGVkLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OWUxYTBmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGVhZENvZGUvZW51bUluc3RhbnRpYXRpb24vZXhwZWN0ZWQueG1sCkBAIC0wLDAgKzEsNCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxwcm9ibGVtcz4gIAorPC9wcm9ibGVtcz4KKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGVhZENvZGUvZW51bUluc3RhbnRpYXRpb24vZXh0X3NyYy9UZXN0MS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGVhZENvZGUvZW51bUluc3RhbnRpYXRpb24vZXh0X3NyYy9UZXN0MS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFkMWVlNTgKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kZWFkQ29kZS9lbnVtSW5zdGFudGlhdGlvbi9leHRfc3JjL1Rlc3QxLmphdmEKQEAgLTAsMCArMSw3IEBACitwdWJsaWMgY2xhc3MgVGVzdDEgeworICB2b2lkIGZvbygpIHsKKyAgICBpZiAoVGVzdC5GSVJTVC5pbnZlcnQoKSAhPSBUZXN0LlNFQ09ORCkgeworICAgICAgLy9hc3NlcnQKKyAgICB9CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RlYWRDb2RlL2VudW1JbnN0YW50aWF0aW9uL3NyYy9UZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kZWFkQ29kZS9lbnVtSW5zdGFudGlhdGlvbi9zcmMvVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBkYjM5ODQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kZWFkQ29kZS9lbnVtSW5zdGFudGlhdGlvbi9zcmMvVGVzdC5qYXZhCkBAIC0wLDAgKzEsOCBAQAorcHVibGljIGVudW0gVGVzdAoreworICAgIEZJUlNULCBTRUNPTkQ7CisKKyAgICBwdWJsaWMgVGVzdCBpbnZlcnQoKSB7CisgICAgICAgIHJldHVybiB0aGlzID09IEZJUlNUID8gU0VDT05EIDogRklSU1Q7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RlYWRDb2RlL2VudW1WYWx1ZXMvZXhwZWN0ZWQueG1sIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGVhZENvZGUvZW51bVZhbHVlcy9leHBlY3RlZC54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzllMWEwZgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RlYWRDb2RlL2VudW1WYWx1ZXMvZXhwZWN0ZWQueG1sCkBAIC0wLDAgKzEsNCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxwcm9ibGVtcz4gIAorPC9wcm9ibGVtcz4KKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGVhZENvZGUvZW51bVZhbHVlcy9zcmMvVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGVhZENvZGUvZW51bVZhbHVlcy9zcmMvVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMxMGJiNTIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kZWFkQ29kZS9lbnVtVmFsdWVzL3NyYy9UZXN0LmphdmEKQEAgLTAsMCArMSwyMiBAQAorcHVibGljIGNsYXNzIFVudXNlZERlY2xCdWcgeworCisgICAgcHVibGljIHN0YXRpYyBlbnVtIENvbmNlcm4geworICAgICAgICAvLyBUaGVzZSBmaWVsZHMgYXJlIHVzZWQhICBKdXN0IGJlY2F1c2UgSSBkb24ndCBtZW50aW9uIHRoZW0gYnkgbmFtZQorICAgICAgICAvLyBkb2Vzbid0IG1lYW4gdGhleSBhcmVuJ3QgdXNlZCEKKyAgICAgICAgLy8gSURFQSB0ZWxscyBtZSBJIG5lZWQ6IEBTdXBwcmVzc1dhcm5pbmdzKHsiVW51c2VkRGVjbGFyYXRpb24ifSkKKyAgICAgICAgTE9XLAorICAgICAgICBNRURJVU0sCisgICAgICAgIEhJR0g7CisgICAgfTsKKworICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDb25jZXJucyBhcmU6Iik7CisKKyAgICAgICAgLy8gSW52b2tpbmcgQ29uY2Vybi52YWx1ZXMoKSBzaG91bGQgY291bnQgYXMgdXNpbmcgYWxsIHRoZSBmaWVsZHMgaW4gdGhlCisgICAgICAgIC8vIGVudW0uCisgICAgICAgIGZvciAoQ29uY2VybiBjb25jZXJuIDogQ29uY2Vybi52YWx1ZXMoKSkgeworICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludCgiXHQiKTsKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihjb25jZXJuKTsKKyAgICAgICAgfSAvLyBlbmQgZm9yCisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RlYWRDb2RlL2Zvcm1Vc2FnZS9leHBlY3RlZC54bWwgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kZWFkQ29kZS9mb3JtVXNhZ2UvZXhwZWN0ZWQueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVlOTMzNDkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kZWFkQ29kZS9mb3JtVXNhZ2UvZXhwZWN0ZWQueG1sCkBAIC0wLDAgKzEsMyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxwcm9ibGVtcz4KKzwvcHJvYmxlbXM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGVhZENvZGUvZm9ybVVzYWdlL3NyYy9wMS9Gb3JtLmZvcm0gYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kZWFkQ29kZS9mb3JtVXNhZ2Uvc3JjL3AxL0Zvcm0uZm9ybQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZTgzNTlkCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGVhZENvZGUvZm9ybVVzYWdlL3NyYy9wMS9Gb3JtLmZvcm0KQEAgLTAsMCArMSwxMiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxmb3JtIHhtbG5zPSJodHRwOi8vd3d3LmludGVsbGlqLmNvbS91aWRlc2lnbmVyL2Zvcm0vIiB2ZXJzaW9uPSIxIiBiaW5kLXRvLWNsYXNzPSJwMS5Gb3JtIj4KKyAgPGNvbXBvbmVudCBpZD0iNTY2YTYiIGNsYXNzPSJqYXZheC5zd2luZy5KTGFiZWwiIGJpbmRpbmc9Im15TGFiZWwiPgorICAgIDxjb25zdHJhaW50cz4KKyAgICAgIDx4eSB4PSIxNjciIHk9IjExNiIgd2lkdGg9IjMzIiBoZWlnaHQ9IjE2Ii8+CisgICAgICA8Z3JpZCByb3c9IjAiIGNvbHVtbj0iMCIgcm93LXNwYW49IjEiIGNvbC1zcGFuPSIxIiB2c2l6ZS1wb2xpY3k9IjAiIGhzaXplLXBvbGljeT0iMCIgYW5jaG9yPSI4IiBmaWxsPSIwIi8+CisgICAgPC9jb25zdHJhaW50cz4KKyAgICA8cHJvcGVydGllcz4KKyAgICAgIDx0ZXh0IHZhbHVlPSJMYWJlbCIvPgorICAgIDwvcHJvcGVydGllcz4KKyAgPC9jb21wb25lbnQ+Cis8L2Zvcm0+CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kZWFkQ29kZS9mb3JtVXNhZ2Uvc3JjL3AxL0Zvcm0uamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RlYWRDb2RlL2Zvcm1Vc2FnZS9zcmMvcDEvRm9ybS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJiZTkxZjYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kZWFkQ29kZS9mb3JtVXNhZ2Uvc3JjL3AxL0Zvcm0uamF2YQpAQCAtMCwwICsxLDggQEAKK3BhY2thZ2UgcDE7CisKK3B1YmxpYyBjbGFzcyBGb3JtIHsKKyAgICBwcml2YXRlIEpMYWJlbCBteUxhYmVsOworCisgICAgcHJpdmF0ZSB2b2lkIGNyZWF0ZVVJQ29tcG9uZW50cygpIHsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGVhZENvZGUvanVuaXRBYnN0cmFjdENsYXNzV2l0aEluaGVyaXRvci9leHBlY3RlZC54bWwgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kZWFkQ29kZS9qdW5pdEFic3RyYWN0Q2xhc3NXaXRoSW5oZXJpdG9yL2V4cGVjdGVkLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNjNjOTI1Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGVhZENvZGUvanVuaXRBYnN0cmFjdENsYXNzV2l0aEluaGVyaXRvci9leHBlY3RlZC54bWwKQEAgLTAsMCArMSwyIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHByb2JsZW1zLz4KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RlYWRDb2RlL2p1bml0QWJzdHJhY3RDbGFzc1dpdGhJbmhlcml0b3Ivc3JjL0NoaWxkVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGVhZENvZGUvanVuaXRBYnN0cmFjdENsYXNzV2l0aEluaGVyaXRvci9zcmMvQ2hpbGRUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjQ4NDFhZAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RlYWRDb2RlL2p1bml0QWJzdHJhY3RDbGFzc1dpdGhJbmhlcml0b3Ivc3JjL0NoaWxkVGVzdC5qYXZhCkBAIC0wLDAgKzEgQEAKK3B1YmxpYyBjbGFzcyBDaGlsZFRlc3QgZXh0ZW5kcyBBYnN0cmFjdFRlc3Qge30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kZWFkQ29kZS9qdW5pdEFic3RyYWN0Q2xhc3NXaXRoSW5oZXJpdG9yL3NyYy9UZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kZWFkQ29kZS9qdW5pdEFic3RyYWN0Q2xhc3NXaXRoSW5oZXJpdG9yL3NyYy9UZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTAyODRhOQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RlYWRDb2RlL2p1bml0QWJzdHJhY3RDbGFzc1dpdGhJbmhlcml0b3Ivc3JjL1Rlc3QuamF2YQpAQCAtMCwwICsxLDQgQEAKK3B1YmxpYyBhYnN0cmFjdCBjbGFzcyBBYnN0cmFjdFRlc3QgeworICBAb3JnLmp1bml0LlRlc3QKKyAgcHVibGljIHZvaWQgdGVzdFNtdGgoKSB7fQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RlYWRDb2RlL2p1bml0QWJzdHJhY3RDbGFzc1dpdGhvdXRJbmhlcml0b3IvZXhwZWN0ZWQueG1sIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGVhZENvZGUvanVuaXRBYnN0cmFjdENsYXNzV2l0aG91dEluaGVyaXRvci9leHBlY3RlZC54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTMwNzVhYgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RlYWRDb2RlL2p1bml0QWJzdHJhY3RDbGFzc1dpdGhvdXRJbmhlcml0b3IvZXhwZWN0ZWQueG1sCkBAIC0wLDAgKzEsOSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxwcm9ibGVtcz4KKyAgPHByb2JsZW0+CisgICAgPGZpbGU+VGVzdC5qYXZhPC9maWxlPgorICAgIDxsaW5lPjM8L2xpbmU+CisgICAgPGVudHJ5X3BvaW50IFRZUEU9Im1ldGhvZCIgRlFOQU1FPSJBYnN0cmFjdFRlc3Qgdm9pZCB0ZXN0U210aCgpIi8+CisgICAgPGRlc2NyaXB0aW9uPk1ldGhvZCBpcyBuZXZlciB1c2VkLjwvZGVzY3JpcHRpb24+CisgIDwvcHJvYmxlbT4KKzwvcHJvYmxlbXM+CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kZWFkQ29kZS9qdW5pdEFic3RyYWN0Q2xhc3NXaXRob3V0SW5oZXJpdG9yL3NyYy9UZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kZWFkQ29kZS9qdW5pdEFic3RyYWN0Q2xhc3NXaXRob3V0SW5oZXJpdG9yL3NyYy9UZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTAyODRhOQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RlYWRDb2RlL2p1bml0QWJzdHJhY3RDbGFzc1dpdGhvdXRJbmhlcml0b3Ivc3JjL1Rlc3QuamF2YQpAQCAtMCwwICsxLDQgQEAKK3B1YmxpYyBhYnN0cmFjdCBjbGFzcyBBYnN0cmFjdFRlc3QgeworICBAb3JnLmp1bml0LlRlc3QKKyAgcHVibGljIHZvaWQgdGVzdFNtdGgoKSB7fQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RlYWRDb2RlL2p1bml0RW50cnlQb2ludC9leHBlY3RlZC54bWwgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kZWFkQ29kZS9qdW5pdEVudHJ5UG9pbnQvZXhwZWN0ZWQueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZlMjBiZGQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kZWFkQ29kZS9qdW5pdEVudHJ5UG9pbnQvZXhwZWN0ZWQueG1sCkBAIC0wLDAgKzEsMTYgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8cHJvYmxlbXM+CisgIDxwcm9ibGVtPgorICAgIDxmaWxlPlRlc3QuamF2YTwvZmlsZT4KKyAgICA8bGluZT4xNDwvbGluZT4KKyAgICA8ZW50cnlfcG9pbnQgVFlQRT0ibWV0aG9kIiBGUU5BTUU9IlRlc3Qgdm9pZCBub3RBVGVzdCgpIi8+CisgICAgPGRlc2NyaXB0aW9uPk1ldGhvZCBpcyBuZXZlciB1c2VkLjwvZGVzY3JpcHRpb24+CisgIDwvcHJvYmxlbT4KKyAgPHByb2JsZW0+CisgICAgPGZpbGU+VGVzdC5qYXZhPC9maWxlPgorICAgIDxsaW5lPjg8L2xpbmU+CisgICAgPGVudHJ5X3BvaW50IFRZUEU9Im1ldGhvZCIgRlFOQU1FPSJUZXN0IHZvaWQgdGVzdFNtdGgoKSIvPgorICAgIDxkZXNjcmlwdGlvbj5NZXRob2QgaXMgbmV2ZXIgdXNlZC48L2Rlc2NyaXB0aW9uPgorICA8L3Byb2JsZW0+Cis8L3Byb2JsZW1zPgorCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kZWFkQ29kZS9qdW5pdEVudHJ5UG9pbnQvc3JjL0EuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RlYWRDb2RlL2p1bml0RW50cnlQb2ludC9zcmMvQS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2OWRlMjkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kZWFkQ29kZS9qdW5pdEVudHJ5UG9pbnQvc3JjL0EuamF2YQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGVhZENvZGUvanVuaXRFbnRyeVBvaW50L3NyYy9JLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kZWFkQ29kZS9qdW5pdEVudHJ5UG9pbnQvc3JjL0kuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMGUxOGRjYgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RlYWRDb2RlL2p1bml0RW50cnlQb2ludC9zcmMvSS5qYXZhCkBAIC0wLDAgKzEsMyBAQAorcHVibGljIGludGVyZmFjZSBJIHsKKyAgQSBjcmVhdGUoKTsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kZWFkQ29kZS9qdW5pdEVudHJ5UG9pbnQvc3JjL0lJbXBsLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kZWFkQ29kZS9qdW5pdEVudHJ5UG9pbnQvc3JjL0lJbXBsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDA0NWFiMAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RlYWRDb2RlL2p1bml0RW50cnlQb2ludC9zcmMvSUltcGwuamF2YQpAQCAtMCwwICsxLDUgQEAKK3B1YmxpYyBjbGFzcyBJSW1wbCBleHRlbmRzIEkgeworICBwdWJsaWMgQSBjcmVhdGUoKSB7CisgICAgcmV0dXJuIG5ldyBBKCk7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kZWFkQ29kZS9qdW5pdEVudHJ5UG9pbnQvc3JjL1Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RlYWRDb2RlL2p1bml0RW50cnlQb2ludC9zcmMvVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjExZWVjMTYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kZWFkQ29kZS9qdW5pdEVudHJ5UG9pbnQvc3JjL1Rlc3QuamF2YQpAQCAtMCwwICsxLDE1IEBACitwdWJsaWMgY2xhc3MgVGVzdCB7CisgIHB1YmxpYyBzdGF0aWMganVuaXQuZnJhbWV3b3JrLlRlc3Qgc3VpdGUoKSB7CisgICAgSSBpID0gbmV3IElJbXBsKCk7CisgICAgQSBhID0gaS5jcmVhdGUoKTsKKyAgICByZXR1cm4gbnVsbDsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RTbXRoKCkge30KKworICBwdWJsaWMgdm9pZCBzZXRVcCgpIHt9CisKKyAgcHVibGljIHZvaWQgdGVhckRvd24oKXt9CisKKyAgcHVibGljIHZvaWQgbm90QVRlc3QoKXt9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGVhZENvZGUvanVuaXRFbnRyeVBvaW50Q3VzdG9tUnVuV2l0aC9leHBlY3RlZC54bWwgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kZWFkQ29kZS9qdW5pdEVudHJ5UG9pbnRDdXN0b21SdW5XaXRoL2V4cGVjdGVkLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNjNjOTI1Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGVhZENvZGUvanVuaXRFbnRyeVBvaW50Q3VzdG9tUnVuV2l0aC9leHBlY3RlZC54bWwKQEAgLTAsMCArMSwyIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHByb2JsZW1zLz4KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RlYWRDb2RlL2p1bml0RW50cnlQb2ludEN1c3RvbVJ1bldpdGgvc3JjL1Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RlYWRDb2RlL2p1bml0RW50cnlQb2ludEN1c3RvbVJ1bldpdGgvc3JjL1Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNGJkNDU5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGVhZENvZGUvanVuaXRFbnRyeVBvaW50Q3VzdG9tUnVuV2l0aC9zcmMvVGVzdC5qYXZhCkBAIC0wLDAgKzEsMTAgQEAKK0BvcmcuanVuaXQucnVubmVyLlJ1bldpdGgoVW5yZXNvbHZlZFJ1bm5lci5jbGFzcykKK3B1YmxpYyBjbGFzcyBUZXN0IHsKKyAgcHVibGljIHZvaWQgdGVzdFNtdGgoKSB7fQorCisgIHB1YmxpYyB2b2lkIHNldFVwKCkge30KKworICBwdWJsaWMgdm9pZCB0ZWFyRG93bigpe30KKworICBwdWJsaWMgdm9pZCBub3RBVGVzdEJ1dENhbkJlUnVubmVkV2l0aEN1c3RvbVJ1bm5lcigpe30KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kZWFkQ29kZS9tdXRhYmxlQ2FsbHMvZXhwZWN0ZWQueG1sIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGVhZENvZGUvbXV0YWJsZUNhbGxzL2V4cGVjdGVkLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OGY0OGFlCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGVhZENvZGUvbXV0YWJsZUNhbGxzL2V4cGVjdGVkLnhtbApAQCAtMCwwICsxLDE2IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHByb2JsZW1zPgorICA8cHJvYmxlbT4KKyAgICA8ZmlsZT5BLmphdmE8L2ZpbGU+CisgICAgPGxpbmU+MjwvbGluZT4KKyAgICA8cHJvYmxlbV9jbGFzcz51bnVzZWQgZGVjbGFyYXRpb248L3Byb2JsZW1fY2xhc3M+CisgICAgPGRlc2NyaXB0aW9uPk1ldGhvZCBoYXMgdXNhZ2UocykgYnV0IHRoZXkgYWxsIGJlbG9uZyB0byByZWN1cnNpdmUgY2FsbHMgY2hhaW4gdGhhdCBoYXMgbm8gbWVtYmVycyByZWFjaGFibGUgZnJvbSBlbnRyeSBwb2ludHMuPC9kZXNjcmlwdGlvbj4KKyAgPC9wcm9ibGVtPgorICA8cHJvYmxlbT4KKyAgICA8ZmlsZT5BLmphdmE8L2ZpbGU+CisgICAgPGxpbmU+NTwvbGluZT4KKyAgICA8cHJvYmxlbV9jbGFzcz51bnVzZWQgZGVjbGFyYXRpb248L3Byb2JsZW1fY2xhc3M+CisgICAgPGRlc2NyaXB0aW9uPk1ldGhvZCBoYXMgdXNhZ2UocykgYnV0IHRoZXkgYWxsIGJlbG9uZyB0byByZWN1cnNpdmUgY2FsbHMgY2hhaW4gdGhhdCBoYXMgbm8gbWVtYmVycyByZWFjaGFibGUgZnJvbSBlbnRyeSBwb2ludHMuPC9kZXNjcmlwdGlvbj4KKyAgPC9wcm9ibGVtPgorPC9wcm9ibGVtcz4KKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGVhZENvZGUvbXV0YWJsZUNhbGxzL3NyYy9BLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kZWFkQ29kZS9tdXRhYmxlQ2FsbHMvc3JjL0EuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOGUzNmNjCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGVhZENvZGUvbXV0YWJsZUNhbGxzL3NyYy9BLmphdmEKQEAgLTAsMCArMSw5IEBACitwdWJsaWMgY2xhc3MgQSB7CisgICBwcml2YXRlIHZvaWQgYSgpeworICAgICBiKCk7CisgICB9CisgICBwcml2YXRlIHZvaWQgYigpeworICAgICBhKCk7CisgICB9Cit9CisKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RlYWRDb2RlL25vbkphdmFSZWZlcmVuY2VzL2V4cGVjdGVkLnhtbCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RlYWRDb2RlL25vbkphdmFSZWZlcmVuY2VzL2V4cGVjdGVkLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NDU0NzgyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGVhZENvZGUvbm9uSmF2YVJlZmVyZW5jZXMvZXhwZWN0ZWQueG1sCkBAIC0wLDAgKzEsOSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxwcm9ibGVtcz4KKyAgPHByb2JsZW0+CisgICAgPGZpbGU+VGVzdC5qYXZhPC9maWxlPgorICAgIDxsaW5lPjI8L2xpbmU+CisgICAgPGRlc2NyaXB0aW9uPkZpZWxkIGhhcyBubyB1c2FnZXMuPC9kZXNjcmlwdGlvbj4KKyAgPC9wcm9ibGVtPgorPC9wcm9ibGVtcz4KKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGVhZENvZGUvbm9uSmF2YVJlZmVyZW5jZXMvZXh0X3NyYy9yZXMueG1sIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGVhZENvZGUvbm9uSmF2YVJlZmVyZW5jZXMvZXh0X3NyYy9yZXMueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM4MDA5YmIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kZWFkQ29kZS9ub25KYXZhUmVmZXJlbmNlcy9leHRfc3JjL3Jlcy54bWwKQEAgLTAsMCArMSBAQAorPHJvb3Q+VGVzdDwvcm9vdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kZWFkQ29kZS9ub25KYXZhUmVmZXJlbmNlcy9zcmMvVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGVhZENvZGUvbm9uSmF2YVJlZmVyZW5jZXMvc3JjL1Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZGE0YTdlCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGVhZENvZGUvbm9uSmF2YVJlZmVyZW5jZXMvc3JjL1Rlc3QuamF2YQpAQCAtMCwwICsxLDMgQEAKK3B1YmxpYyBjbGFzcyBUZXN0IHsKKyAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgTE9HID0gVGVzdC5jbGFzcy5nZXROYW1lKCk7ICAgCit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGVhZENvZGUvcGFja2FnZUxvY2FsL2V4cGVjdGVkLnhtbCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RlYWRDb2RlL3BhY2thZ2VMb2NhbC9leHBlY3RlZC54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzdmMTZlOQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RlYWRDb2RlL3BhY2thZ2VMb2NhbC9leHBlY3RlZC54bWwKQEAgLTAsMCArMSwxMCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxwcm9ibGVtcz4KKyAgPHByb2JsZW0+CisgICAgPGZpbGU+QS5qYXZhPC9maWxlPgorICAgIDxsaW5lPjM8L2xpbmU+CisgICAgPHByb2JsZW1fY2xhc3M+dW51c2VkIGRlY2xhcmF0aW9uPC9wcm9ibGVtX2NsYXNzPgorICAgIDxkZXNjcmlwdGlvbj5DbGFzcyBpcyBub3QgaW5zdGFudGlhdGVkLjwvZGVzY3JpcHRpb24+CisgIDwvcHJvYmxlbT4KKzwvcHJvYmxlbXM+CisKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RlYWRDb2RlL3BhY2thZ2VMb2NhbC9zcmMvQS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGVhZENvZGUvcGFja2FnZUxvY2FsL3NyYy9BLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjlkODY2ZAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RlYWRDb2RlL3BhY2thZ2VMb2NhbC9zcmMvQS5qYXZhCkBAIC0wLDAgKzEsOCBAQAorY2xhc3MgQSB7Cit9CitjbGFzcyBCeworICBwcml2YXRlIHZvaWQgYigpeworICAgIG5ldyBCKCk7CisgIH0KK30KKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGVhZENvZGUvcmVhY2hhYmxlRnJvbUZpZWxkQXJyYXlJbml0aWFsaXplci9leHBlY3RlZC54bWwgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kZWFkQ29kZS9yZWFjaGFibGVGcm9tRmllbGRBcnJheUluaXRpYWxpemVyL2V4cGVjdGVkLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OWUxYTBmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGVhZENvZGUvcmVhY2hhYmxlRnJvbUZpZWxkQXJyYXlJbml0aWFsaXplci9leHBlY3RlZC54bWwKQEAgLTAsMCArMSw0IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHByb2JsZW1zPiAgCis8L3Byb2JsZW1zPgorCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kZWFkQ29kZS9yZWFjaGFibGVGcm9tRmllbGRBcnJheUluaXRpYWxpemVyL3NyYy9JbnRlcmZhY2UuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RlYWRDb2RlL3JlYWNoYWJsZUZyb21GaWVsZEFycmF5SW5pdGlhbGl6ZXIvc3JjL0ludGVyZmFjZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdmYzQ4YWMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kZWFkQ29kZS9yZWFjaGFibGVGcm9tRmllbGRBcnJheUluaXRpYWxpemVyL3NyYy9JbnRlcmZhY2UuamF2YQpAQCAtMCwwICsxLDMgQEAKK2ludGVyZmFjZSBJbnRlcmZhY2UgeworICBpbnRbXSBnZXRGaWVsZCgpOworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RlYWRDb2RlL3JlYWNoYWJsZUZyb21GaWVsZEFycmF5SW5pdGlhbGl6ZXIvc3JjL1Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RlYWRDb2RlL3JlYWNoYWJsZUZyb21GaWVsZEFycmF5SW5pdGlhbGl6ZXIvc3JjL1Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNDI5ZjFlCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGVhZENvZGUvcmVhY2hhYmxlRnJvbUZpZWxkQXJyYXlJbml0aWFsaXplci9zcmMvVGVzdC5qYXZhCkBAIC0wLDAgKzEsMTYgQEAKK3B1YmxpYyBjbGFzcyBUZXN0IGltcGxlbWVudHMgSW50ZXJmYWNleworICAgcHVibGljIHN0YXRpYyBpbnRbXSBteUZpZWxkID0gbmV3IGludFtdIHtpbml0KCl9OworCisgICBwdWJsaWMgc3RhdGljIGludCBpbml0KCkgeworICAgICByZXR1cm4gMTsKKyAgIH0KKyAgIAorICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncyl7CisgICAgIEludGVyZmFjZSBpID0gbmV3IFRlc3QoKTsKKyAgICAgU3lzdGVtLm91dC5wcmludGxuKGkuZ2V0RmllbGQoKSk7CisgICB9CisKKyAgIHB1YmxpYyBpbnRbXSBnZXRGaWVsZCgpIHsKKyAgICAgcmV0dXJuIG15RmllbGQ7CisgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGVhZENvZGUvcmVhY2hhYmxlRnJvbUZpZWxkSW5pdGlhbGl6ZXIvZXhwZWN0ZWQueG1sIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGVhZENvZGUvcmVhY2hhYmxlRnJvbUZpZWxkSW5pdGlhbGl6ZXIvZXhwZWN0ZWQueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc5ZTFhMGYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kZWFkQ29kZS9yZWFjaGFibGVGcm9tRmllbGRJbml0aWFsaXplci9leHBlY3RlZC54bWwKQEAgLTAsMCArMSw0IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHByb2JsZW1zPiAgCis8L3Byb2JsZW1zPgorCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kZWFkQ29kZS9yZWFjaGFibGVGcm9tRmllbGRJbml0aWFsaXplci9zcmMvSW50ZXJmYWNlLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kZWFkQ29kZS9yZWFjaGFibGVGcm9tRmllbGRJbml0aWFsaXplci9zcmMvSW50ZXJmYWNlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmY5NTk4OAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RlYWRDb2RlL3JlYWNoYWJsZUZyb21GaWVsZEluaXRpYWxpemVyL3NyYy9JbnRlcmZhY2UuamF2YQpAQCAtMCwwICsxLDMgQEAKK2ludGVyZmFjZSBJbnRlcmZhY2UgeworICBpbnQgZ2V0RmllbGQoKTsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kZWFkQ29kZS9yZWFjaGFibGVGcm9tRmllbGRJbml0aWFsaXplci9zcmMvVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGVhZENvZGUvcmVhY2hhYmxlRnJvbUZpZWxkSW5pdGlhbGl6ZXIvc3JjL1Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZTU0NzY0Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGVhZENvZGUvcmVhY2hhYmxlRnJvbUZpZWxkSW5pdGlhbGl6ZXIvc3JjL1Rlc3QuamF2YQpAQCAtMCwwICsxLDE2IEBACitwdWJsaWMgY2xhc3MgVGVzdCBpbXBsZW1lbnRzIEludGVyZmFjZXsKKyAgIHB1YmxpYyBpbnQgbXlGaWVsZCA9IGluaXQoKTsKKworICAgcHVibGljIGludCBpbml0KCkgeworICAgICByZXR1cm4gMTsKKyAgIH0KKyAgIAorICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncyl7CisgICAgIEludGVyZmFjZSBpID0gbmV3IFRlc3QoKTsKKyAgICAgU3lzdGVtLm91dC5wcmludGxuKGkuZ2V0RmllbGQoKSk7CisgICB9CisKKyAgIHB1YmxpYyBpbnQgZ2V0RmllbGQoKSB7CisgICAgIHJldHVybiBteUZpZWxkOworICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RlYWRDb2RlL3JlYWNoYWJsZUZyb21NYWluL2V4cGVjdGVkLnhtbCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RlYWRDb2RlL3JlYWNoYWJsZUZyb21NYWluL2V4cGVjdGVkLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OWUxYTBmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGVhZENvZGUvcmVhY2hhYmxlRnJvbU1haW4vZXhwZWN0ZWQueG1sCkBAIC0wLDAgKzEsNCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxwcm9ibGVtcz4gIAorPC9wcm9ibGVtcz4KKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGVhZENvZGUvcmVhY2hhYmxlRnJvbU1haW4vc3JjL0EuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RlYWRDb2RlL3JlYWNoYWJsZUZyb21NYWluL3NyYy9BLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWNjZjI4NgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RlYWRDb2RlL3JlYWNoYWJsZUZyb21NYWluL3NyYy9BLmphdmEKQEAgLTAsMCArMSwxMCBAQAorcHVibGljIGNsYXNzIEEgeworICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKyAgICAgICAgQi5iKCk7CisgICAgfQorICAgIHByaXZhdGUgc3RhdGljIGNsYXNzIEJ7CisgICAgICAgIHB1YmxpYyBzdGF0aWMgQiBiKCl7CisgICAgICAgICAgICByZXR1cm4gbmV3IEIoKTsKKyAgICAgICAgfQorICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RlYWRDb2RlL3JlYWNoYWJsZUZyb21YbWwvZXhwZWN0ZWQueG1sIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGVhZENvZGUvcmVhY2hhYmxlRnJvbVhtbC9leHBlY3RlZC54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzllMWEwZgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RlYWRDb2RlL3JlYWNoYWJsZUZyb21YbWwvZXhwZWN0ZWQueG1sCkBAIC0wLDAgKzEsNCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxwcm9ibGVtcz4gIAorPC9wcm9ibGVtcz4KKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGVhZENvZGUvcmVhY2hhYmxlRnJvbVhtbC9zcmMvQS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGVhZENvZGUvcmVhY2hhYmxlRnJvbVhtbC9zcmMvQS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA5MzMyYWUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kZWFkQ29kZS9yZWFjaGFibGVGcm9tWG1sL3NyYy9BLmphdmEKQEAgLTAsMCArMSw1IEBACitwdWJsaWMgY2xhc3MgQSB7CisgIHB1YmxpYyBBKCkgeworCisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RlYWRDb2RlL3JlYWNoYWJsZUZyb21YbWwvc3JjL2NvbXBzLnhtbCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RlYWRDb2RlL3JlYWNoYWJsZUZyb21YbWwvc3JjL2NvbXBzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MjVkY2FkCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGVhZENvZGUvcmVhY2hhYmxlRnJvbVhtbC9zcmMvY29tcHMueG1sCkBAIC0wLDAgKzEgQEAKKzxjb21wb25lbnQ+QTwvY29tcG9uZW50PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RlYWRDb2RlL3NlcmlhbGl6YWJsZS9leHBlY3RlZC54bWwgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kZWFkQ29kZS9zZXJpYWxpemFibGUvZXhwZWN0ZWQueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVlOTMzNDkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kZWFkQ29kZS9zZXJpYWxpemFibGUvZXhwZWN0ZWQueG1sCkBAIC0wLDAgKzEsMyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxwcm9ibGVtcz4KKzwvcHJvYmxlbXM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGVhZENvZGUvc2VyaWFsaXphYmxlL2V4dF9zcmMvRXh0ZXJuYWwuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RlYWRDb2RlL3NlcmlhbGl6YWJsZS9leHRfc3JjL0V4dGVybmFsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWUxN2JhMQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RlYWRDb2RlL3NlcmlhbGl6YWJsZS9leHRfc3JjL0V4dGVybmFsLmphdmEKQEAgLTAsMCArMSw1IEBACitwdWJsaWMgY2xhc3MgRXh0ZXJuYWwgeworICB7CisgICAgbmV3IFRlc3QoKTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RlYWRDb2RlL3NlcmlhbGl6YWJsZS9zcmMvVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGVhZENvZGUvc2VyaWFsaXphYmxlL3NyYy9UZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWFmYjBlYwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RlYWRDb2RlL3NlcmlhbGl6YWJsZS9zcmMvVGVzdC5qYXZhCkBAIC0wLDAgKzEsNiBAQAorcHVibGljIGNsYXNzIFRlc3QgaW1wbGVtZW50cyBqYXZhLmlvLlNlcmlhbGl6YWJsZSB7CisgIHByaXZhdGUgdm9pZCB3cml0ZU9iamVjdChqYXZhLmlvLk9iamVjdE91dHB1dFN0cmVhbSBvdXQpIHt9CisgIHByaXZhdGUgdm9pZCByZWFkT2JqZWN0KGphdmEuaW8uT2JqZWN0SW5wdXRTdHJlYW0gaW4pIHt9CisgIHB1YmxpYyBPYmplY3Qgd3JpdGVSZXBsYWNlKCkgeyByZXR1cm4gbnVsbDsgfQorICBwdWJsaWMgT2JqZWN0IHJlYWRSZXNvbHZlKCkgeyByZXR1cm4gbnVsbDsgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RlYWRDb2RlL3NpbmdsZXRvbi9leHBlY3RlZC54bWwgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kZWFkQ29kZS9zaW5nbGV0b24vZXhwZWN0ZWQueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ3MDRkNTgKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kZWFkQ29kZS9zaW5nbGV0b24vZXhwZWN0ZWQueG1sCkBAIC0wLDAgKzEsNCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxwcm9ibGVtcz4KKzwvcHJvYmxlbXM+CisKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RlYWRDb2RlL3NpbmdsZXRvbi9zcmMvTWFpbi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGVhZENvZGUvc2luZ2xldG9uL3NyYy9NYWluLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzhmOTBkMgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RlYWRDb2RlL3NpbmdsZXRvbi9zcmMvTWFpbi5qYXZhCkBAIC0wLDAgKzEsNSBAQAorcHVibGljIGNsYXNzIE1haW4geworICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nIGFyZ3NbXSkgeworICAgICAgU2luZ2xldG9uLmdldEluc3RhbmNlKCk7CisgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGVhZENvZGUvc2luZ2xldG9uL3NyYy9TaW5nbGV0b24uamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RlYWRDb2RlL3NpbmdsZXRvbi9zcmMvU2luZ2xldG9uLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTI3ODJkZAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RlYWRDb2RlL3NpbmdsZXRvbi9zcmMvU2luZ2xldG9uLmphdmEKQEAgLTAsMCArMSw3IEBACitwdWJpYyBjbGFzcyBTaW5nbGV0b24geworICAgcHJpdmF0ZSBzdGF0aWMgU2luZ2xldG9uIG91ckluc3RhbmNlID0gbmV3IFNpbmdsZXRvbigpOworCisgICBwdWJsaWMgU2luZ2xldG9uIGdldEluc3RhbmNlKCkgeworICAgICAgcmV0dXJuIG91ckluc3RhbmNlOworICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RlYWRDb2RlL3N0YXRpY01ldGhvZHMvZXhwZWN0ZWQueG1sIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGVhZENvZGUvc3RhdGljTWV0aG9kcy9leHBlY3RlZC54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODAwMTc1MAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RlYWRDb2RlL3N0YXRpY01ldGhvZHMvZXhwZWN0ZWQueG1sCkBAIC0wLDAgKzEsMTAgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8cHJvYmxlbXM+CisgIDxwcm9ibGVtPgorICAgIDxmaWxlPkEuamF2YTwvZmlsZT4KKyAgICA8bGluZT4zPC9saW5lPgorICAgIDxwcm9ibGVtX2NsYXNzPnVudXNlZCBkZWNsYXJhdGlvbjwvcHJvYmxlbV9jbGFzcz4KKyAgICA8ZGVzY3JpcHRpb24+TWV0aG9kIGlzIG5ldmVyIHVzZWQuPC9kZXNjcmlwdGlvbj4KKyAgPC9wcm9ibGVtPgorPC9wcm9ibGVtcz4KKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGVhZENvZGUvc3RhdGljTWV0aG9kcy9zcmMvQS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGVhZENvZGUvc3RhdGljTWV0aG9kcy9zcmMvQS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc4MTE1YmIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kZWFkQ29kZS9zdGF0aWNNZXRob2RzL3NyYy9BLmphdmEKQEAgLTAsMCArMSw3IEBACitwdWJsaWMgY2xhc3MgQSB7CisgIHByaXZhdGUgQSgpe30KKyAgcHVibGljIHN0YXRpYyBBIGdldEluc3RhbmNlKCl7CisgICAgcmV0dXJuIG5ldyBBKCk7CisgIH0KK30KKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGVhZENvZGUvc3VwcHJlc3MvZXhwZWN0ZWQueG1sIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGVhZENvZGUvc3VwcHJlc3MvZXhwZWN0ZWQueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc5ZTFhMGYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kZWFkQ29kZS9zdXBwcmVzcy9leHBlY3RlZC54bWwKQEAgLTAsMCArMSw0IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHByb2JsZW1zPiAgCis8L3Byb2JsZW1zPgorCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kZWFkQ29kZS9zdXBwcmVzcy9leHRfc3JjL0IuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RlYWRDb2RlL3N1cHByZXNzL2V4dF9zcmMvQi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhiYjBlNTkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kZWFkQ29kZS9zdXBwcmVzcy9leHRfc3JjL0IuamF2YQpAQCAtMCwwICsxLDQgQEAKK2NsYXNzIEIgeworICAgIEEgYT1uZXcgQSgwKTsKK30KKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGVhZENvZGUvc3VwcHJlc3Mvc3JjL0EuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RlYWRDb2RlL3N1cHByZXNzL3NyYy9BLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjE4YmMwZAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RlYWRDb2RlL3N1cHByZXNzL3NyYy9BLmphdmEKQEAgLTAsMCArMSw5IEBACitjbGFzcyBBIHsKKyAgICBAamF2YS5sYW5nLlN1cHByZXNzV2FybmluZ3MoeyJVbnVzZWREZWNsYXJhdGlvbiJ9KQorICAgIEEoKSB7CisgICAgfQorICAgIEEoaW50IGspIHsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKGspOworICAgIH0KK30KKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGVhZENvZGUvc3VwcHJlc3MxL2V4cGVjdGVkLnhtbCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RlYWRDb2RlL3N1cHByZXNzMS9leHBlY3RlZC54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzllMWEwZgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RlYWRDb2RlL3N1cHByZXNzMS9leHBlY3RlZC54bWwKQEAgLTAsMCArMSw0IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHByb2JsZW1zPiAgCis8L3Byb2JsZW1zPgorCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kZWFkQ29kZS9zdXBwcmVzczEvc3JjL0EuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RlYWRDb2RlL3N1cHByZXNzMS9zcmMvQS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQzNDE2NWYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kZWFkQ29kZS9zdXBwcmVzczEvc3JjL0EuamF2YQpAQCAtMCwwICsxLDggQEAKK2NsYXNzIEEgeworICAgIEBqYXZhLmxhbmcuU3VwcHJlc3NXYXJuaW5ncyh7IlVudXNlZERlY2xhcmF0aW9uIn0pCisgICAgQSgpIHsKKyAgICAgIG5ldyBCKCk7CisgICAgfQorCit9CisKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RlYWRDb2RlL3N1cHByZXNzMS9zcmMvQi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGVhZENvZGUvc3VwcHJlc3MxL3NyYy9CLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTcxYzJkYwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RlYWRDb2RlL3N1cHByZXNzMS9zcmMvQi5qYXZhCkBAIC0wLDAgKzEsMyBAQAorY2xhc3MgQiB7CisgIEIoKXt9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGVhZENvZGUvc3VwcHJlc3MyL2V4cGVjdGVkLnhtbCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RlYWRDb2RlL3N1cHByZXNzMi9leHBlY3RlZC54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzllMWEwZgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RlYWRDb2RlL3N1cHByZXNzMi9leHBlY3RlZC54bWwKQEAgLTAsMCArMSw0IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHByb2JsZW1zPiAgCis8L3Byb2JsZW1zPgorCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kZWFkQ29kZS9zdXBwcmVzczIvc3JjL0EuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RlYWRDb2RlL3N1cHByZXNzMi9zcmMvQS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBhNmI2OWEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kZWFkQ29kZS9zdXBwcmVzczIvc3JjL0EuamF2YQpAQCAtMCwwICsxLDggQEAKK2NsYXNzIEEgeworICAgIEBqYXZhLmxhbmcuU3VwcHJlc3NXYXJuaW5ncyh7IlVudXNlZERlY2xhcmF0aW9uIn0pCisgICAgQSgpIHsKKyAgICAgIEIgYmIgPSBuZXcgQigpOworICAgIH0KKworfQorCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kZWFkQ29kZS9zdXBwcmVzczIvc3JjL0IuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RlYWRDb2RlL3N1cHByZXNzMi9zcmMvQi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUxMzY3OTQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kZWFkQ29kZS9zdXBwcmVzczIvc3JjL0IuamF2YQpAQCAtMCwwICsxLDMgQEAKK2NsYXNzIEIgeworICAKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kZWFkQ29kZS91c2FnZXNJbkFub255bW91cy9leHBlY3RlZC54bWwgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kZWFkQ29kZS91c2FnZXNJbkFub255bW91cy9leHBlY3RlZC54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzllMWEwZgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RlYWRDb2RlL3VzYWdlc0luQW5vbnltb3VzL2V4cGVjdGVkLnhtbApAQCAtMCwwICsxLDQgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8cHJvYmxlbXM+ICAKKzwvcHJvYmxlbXM+CisKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RlYWRDb2RlL3VzYWdlc0luQW5vbnltb3VzL3NyYy9UZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kZWFkQ29kZS91c2FnZXNJbkFub255bW91cy9zcmMvVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZjMzIwOWMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kZWFkQ29kZS91c2FnZXNJbkFub255bW91cy9zcmMvVGVzdC5qYXZhCkBAIC0wLDAgKzEsMTYgQEAKK3B1YmxpYyBjbGFzcyBNeUNsYXNzIHsKKyAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworICAgIG5ldyBQYXJlbnQobWV0aG9kKCkpIHsKKyAgICB9OworICB9CisKKyAgcHVibGljIHN0YXRpYyBTdHJpbmcgbWV0aG9kKCkgeworICAgIHJldHVybiAiIjsKKyAgfQorCisgIHB1YmxpYyBzdGF0aWMgY2xhc3MgUGFyZW50IHsKKyAgICBwcm90ZWN0ZWQgUGFyZW50KE9iamVjdCBvKSB7CisgICAgICBTeXN0ZW0ub3V0LnByaW50bG4obyk7CisgICAgfQorICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGVmVXNlL0FycmF5TGVuZ3RoL2V4cGVjdGVkLnhtbCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RlZlVzZS9BcnJheUxlbmd0aC9leHBlY3RlZC54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDcwNGQ1OAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RlZlVzZS9BcnJheUxlbmd0aC9leHBlY3RlZC54bWwKQEAgLTAsMCArMSw0IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHByb2JsZW1zPgorPC9wcm9ibGVtcz4KKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGVmVXNlL0FycmF5TGVuZ3RoL3NyYy9Gb28uamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RlZlVzZS9BcnJheUxlbmd0aC9zcmMvRm9vLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjEyNmFlZQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RlZlVzZS9BcnJheUxlbmd0aC9zcmMvRm9vLmphdmEKQEAgLTAsMCArMSw2IEBACitwdWJsaWMgY2xhc3MgRm9vIHsKKyAgcHVibGljIHZvaWQgZm9vKCkgeworICAgIGludFtdIGFycmF5ID0gbmV3IGludFs1XTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGFycmF5Lmxlbmd0aDsgaSsrKSB7fQorICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGVmVXNlL0hhbmcvZXhwZWN0ZWQueG1sIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGVmVXNlL0hhbmcvZXhwZWN0ZWQueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ3MDRkNTgKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kZWZVc2UvSGFuZy9leHBlY3RlZC54bWwKQEAgLTAsMCArMSw0IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHByb2JsZW1zPgorPC9wcm9ibGVtcz4KKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGVmVXNlL0hhbmcvc3JjL0Zvby5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGVmVXNlL0hhbmcvc3JjL0Zvby5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA2YjIwZjgKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kZWZVc2UvSGFuZy9zcmMvRm9vLmphdmEKQEAgLTAsMCArMSwxMDkgQEAKK3B1YmxpYyBjbGFzcyBEZWZVc2UgeworCisgICAgcHJpdmF0ZSBpbnQgZGVmbGF0ZV9mYXN0KGludCBmbHVzaCwgaW50IGxvb2thaGVhZCwgaW50IG1hdGNoX2xlbmd0aCkgeworICAgICAgICAvLyAgICBzaG9ydCBoYXNoX2hlYWQgPSAwOyAvLyBoZWFkIG9mIHRoZSBoYXNoIGNoYWluCisgICAgICAgIGludCBoYXNoX2hlYWQgPSAwOyAvLyBoZWFkIG9mIHRoZSBoYXNoIGNoYWluCisgICAgICAgIGJvb2xlYW4gYmZsdXNoOyAvLyBzZXQgaWYgY3VycmVudCBibG9jayBtdXN0IGJlIGZsdXNoZWQKKworICAgICAgICB3aGlsZSAodHJ1ZSkgeworICAgICAgICAgICAgLy8gTWFrZSBzdXJlIHRoYXQgd2UgYWx3YXlzIGhhdmUgZW5vdWdoIGxvb2thaGVhZCwgZXhjZXB0CisgICAgICAgICAgICAvLyBhdCB0aGUgZW5kIG9mIHRoZSBpbnB1dCBmaWxlLiBXZSBuZWVkIE1BWF9NQVRDSCBieXRlcworICAgICAgICAgICAgLy8gZm9yIHRoZSBuZXh0IG1hdGNoLCBwbHVzIE1JTl9NQVRDSCBieXRlcyB0byBpbnNlcnQgdGhlCisgICAgICAgICAgICAvLyBzdHJpbmcgZm9sbG93aW5nIHRoZSBuZXh0IG1hdGNoLgorICAgICAgICAgICAgaWYgKGxvb2thaGVhZCA8IDEpIHsKKyAgICAgICAgICAgICAgICBpZiAobG9va2FoZWFkIDwgMSAmJiBmbHVzaCA9PSBKWmxpYi5aX05PX0ZMVVNIKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAobG9va2FoZWFkID09IDApIHsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7IC8vIGZsdXNoIHRoZSBjdXJyZW50IGJsb2NrCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBJbnNlcnQgdGhlIHN0cmluZyB3aW5kb3dbc3Ryc3RhcnQgLi4gc3Ryc3RhcnQrMl0gaW4gdGhlCisgICAgICAgICAgICAvLyBkaWN0aW9uYXJ5LCBhbmQgc2V0IGhhc2hfaGVhZCB0byB0aGUgaGVhZCBvZiB0aGUgaGFzaCBjaGFpbjoKKyAgICAgICAgICAgIGlmIChsb29rYWhlYWQgPj0gMCkgeworICAgICAgICAgICAgICAgIGluc19oID0gKGluc19oIDw8IGhhc2hfc2hpZnQgXiB3aW5kb3dbc3Ryc3RhcnQgKyAwIC0gMV0gJiAweGZmKSAmCisgICAgICAgICAgICAgICAgICAgICAgICBoYXNoX21hc2s7CisKKyAgICAgICAgICAgICAgICAvLyBwcmV2W3N0cnN0YXJ0JndfbWFza109aGFzaF9oZWFkPWhlYWRbaW5zX2hdOworICAgICAgICAgICAgICAgIGhhc2hfaGVhZCA9IDB4ZmZmZjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gRmluZCB0aGUgbG9uZ2VzdCBtYXRjaCwgZGlzY2FyZGluZyB0aG9zZSA8PSBwcmV2X2xlbmd0aC4KKyAgICAgICAgICAgIC8vIEF0IHRoaXMgcG9pbnQgd2UgaGF2ZSBhbHdheXMgbWF0Y2hfbGVuZ3RoIDwgTUlOX01BVENICisKKyAgICAgICAgICAgIGlmIChoYXNoX2hlYWQgIT0gMEwgJiYKKyAgICAgICAgICAgICAgICAgICAgKHN0cnN0YXJ0IC0gaGFzaF9oZWFkICYgMHhmZmZmKSA8PSB3X3NpemUgLSAxKSB7CisgICAgICAgICAgICAgICAgLy8gVG8gc2ltcGxpZnkgdGhlIGNvZGUsIHdlIHByZXZlbnQgbWF0Y2hlcyB3aXRoIHRoZSBzdHJpbmcKKyAgICAgICAgICAgICAgICAvLyBvZiB3aW5kb3cgaW5kZXggMCAoaW4gcGFydGljdWxhciB3ZSBoYXZlIHRvIGF2b2lkIGEgbWF0Y2gKKyAgICAgICAgICAgICAgICAvLyBvZiB0aGUgc3RyaW5nIHdpdGggaXRzZWxmIGF0IHRoZSBzdGFydCBvZiB0aGUgaW5wdXQgZmlsZSkuCisgICAgICAgICAgICAgICAgaWYgKHN0cmF0ZWd5ICE9IEpabGliLlpfSFVGRk1BTl9PTkxZKSB7CisgICAgICAgICAgICAgICAgICAgIG1hdGNoX2xlbmd0aCA9IGxvbmdlc3RfbWF0Y2goaGFzaF9oZWFkKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgLy8gbG9uZ2VzdF9tYXRjaCgpIHNldHMgbWF0Y2hfc3RhcnQKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChtYXRjaF9sZW5ndGggPj0gMCkgeworICAgICAgICAgICAgICAgIC8vICAgICAgICBjaGVja19tYXRjaChzdHJzdGFydCwgbWF0Y2hfc3RhcnQsIG1hdGNoX2xlbmd0aCk7CisKKyAgICAgICAgICAgICAgICBiZmx1c2ggPSBfdHJfdGFsbHkoc3Ryc3RhcnQgLSBtYXRjaF9zdGFydCwgbWF0Y2hfbGVuZ3RoIC0KKyAgICAgICAgICAgICAgICAgICAgICAgIDApOworCisgICAgICAgICAgICAgICAgbG9va2FoZWFkIC09IG1hdGNoX2xlbmd0aDsKKworICAgICAgICAgICAgICAgIC8vIEluc2VydCBuZXcgc3RyaW5ncyBpbiB0aGUgaGFzaCB0YWJsZSBvbmx5IGlmIHRoZSBtYXRjaCBsZW5ndGgKKyAgICAgICAgICAgICAgICAvLyBpcyBub3QgdG9vIGxhcmdlLiBUaGlzIHNhdmVzIHRpbWUgYnV0IGRlZ3JhZGVzIGNvbXByZXNzaW9uLgorICAgICAgICAgICAgICAgIGlmIChtYXRjaF9sZW5ndGggPD0gbWF4X2xhenlfbWF0Y2ggJiYgbG9va2FoZWFkID49IDApIHsKKyAgICAgICAgICAgICAgICAgICAgbWF0Y2hfbGVuZ3RoIC0tOyAvLyBzdHJpbmcgYXQgc3Ryc3RhcnQgYWxyZWFkeSBpbiBoYXNoIHRhYmxlCisgICAgICAgICAgICAgICAgICAgIGRvIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0cnN0YXJ0ICsrOworCisgICAgICAgICAgICAgICAgICAgICAgICBpbnNfaCA9IChpbnNfaCA8PCBoYXNoX3NoaWZ0IF4gd2luZG93W3N0cnN0YXJ0ICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCAtIDFdICYgMHhmZikgJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNoX21hc2s7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgcHJldltzdHJzdGFydCZ3X21hc2tdPWhhc2hfaGVhZD1oZWFkW2luc19oXTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGhhc2hfaGVhZCA9IGhlYWRbaW5zX2hdICYgMHhmZmZmOworICAgICAgICAgICAgICAgICAgICAgICAgcHJldltzdHJzdGFydCAmIHdfbWFza10gPSBoZWFkW2luc19oXTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRbaW5zX2hdID0gKHNob3J0KSBzdHJzdGFydDsKKworICAgICAgICAgICAgICAgICAgICAgICAgLy8gc3Ryc3RhcnQgbmV2ZXIgZXhjZWVkcyBXU0laRS1NQVhfTUFUQ0gsIHNvIHRoZXJlIGFyZQorICAgICAgICAgICAgICAgICAgICAgICAgLy8gYWx3YXlzIE1JTl9NQVRDSCBieXRlcyBhaGVhZC4KKyAgICAgICAgICAgICAgICAgICAgfSB3aGlsZSAoLS0gbWF0Y2hfbGVuZ3RoICE9IDApOworICAgICAgICAgICAgICAgICAgICBzdHJzdGFydCArKzsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBzdHJzdGFydCArPSBtYXRjaF9sZW5ndGg7CisgICAgICAgICAgICAgICAgICAgIG1hdGNoX2xlbmd0aCA9IDA7CisgICAgICAgICAgICAgICAgICAgIGluc19oID0gd2luZG93W3N0cnN0YXJ0XSAmIDB4ZmY7CisKKyAgICAgICAgICAgICAgICAgICAgaW5zX2ggPSAoaW5zX2ggPDwgaGFzaF9zaGlmdCBeIHdpbmRvd1tzdHJzdGFydCArIDFdICYgMHhmZikgJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc2hfbWFzazsKKyAgICAgICAgICAgICAgICAgICAgLy8gSWYgbG9va2FoZWFkIDwgTUlOX01BVENILCBpbnNfaCBpcyBnYXJiYWdlLCBidXQgaXQgZG9lcyBub3QKKyAgICAgICAgICAgICAgICAgICAgLy8gbWF0dGVyIHNpbmNlIGl0IHdpbGwgYmUgcmVjb21wdXRlZCBhdCBuZXh0IGRlZmxhdGUgY2FsbC4KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIC8vIE5vIG1hdGNoLCBvdXRwdXQgYSBsaXRlcmFsIGJ5dGUKKworICAgICAgICAgICAgICAgIGJmbHVzaCA9IF90cl90YWxseSgwLCB3aW5kb3dbc3Ryc3RhcnRdICYgMHhmZik7CisgICAgICAgICAgICAgICAgbG9va2FoZWFkIC0tOworICAgICAgICAgICAgICAgIHN0cnN0YXJ0ICsrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGJmbHVzaCkgeworCisgICAgICAgICAgICAgICAgZmx1c2hfYmxvY2tfb25seShmYWxzZSk7CisgICAgICAgICAgICAgICAgaWYgKHN0cm0uYXZhaWxfb3V0ID09IDApIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgZmx1c2hfYmxvY2tfb25seShmbHVzaCA9PSBKWmxpYi5aX0ZJTklTSCk7CisgICAgICAgIGlmIChmbHVzaCA9PSAwKSB7CisgICAgICAgICAgICBpZiAoZmx1c2ggPT0gSlpsaWIuWl9GSU5JU0gpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGZsdXNoID09IEpabGliLlpfRklOSVNIPyAxIDogMDsKKyAgICB9CisKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RlZlVzZS9TQ1IyODAxOS9leHBlY3RlZC54bWwgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kZWZVc2UvU0NSMjgwMTkvZXhwZWN0ZWQueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ3MDRkNTgKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kZWZVc2UvU0NSMjgwMTkvZXhwZWN0ZWQueG1sCkBAIC0wLDAgKzEsNCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxwcm9ibGVtcz4KKzwvcHJvYmxlbXM+CisKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RlZlVzZS9TQ1IyODAxOS9zcmMvQXN5bmNocm9ub3VzSW1hZ2VMb2FkZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RlZlVzZS9TQ1IyODAxOS9zcmMvQXN5bmNocm9ub3VzSW1hZ2VMb2FkZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMDlmOTUwCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGVmVXNlL1NDUjI4MDE5L3NyYy9Bc3luY2hyb25vdXNJbWFnZUxvYWRlci5qYXZhCkBAIC0wLDAgKzEsMTcgQEAKK2ltcG9ydCBqYXZhLnV0aWwuU3RhY2s7CisKK3B1YmxpYyBjbGFzcyBBc3luY2hyb25vdXNJbWFnZUxvYWRlciBleHRlbmRzIFRocmVhZCB7CisgICAgcHJpdmF0ZSBmaW5hbCBTdGFjayBfdGFza3MgPSBuZXcgU3RhY2soKTsKKworICAgIHByaXZhdGUgdm9pZCB0aHJlYWRCb2R5KCkgdGhyb3dzIEludGVycnVwdGVkRXhjZXB0aW9uIHsKKyAgICAgICAgd2hpbGUgKHRydWUpIHsKKyAgICAgICAgICAgIGZpbmFsIFJ1bm5hYmxlIHRhc2s7CisgICAgICAgICAgICBzeW5jaHJvbml6ZWQgKHRoaXMpIHsKKyAgICAgICAgICAgICAgICB3aGlsZSAoX3Rhc2tzLmlzRW1wdHkoKSkKKyAgICAgICAgICAgICAgICAgICAgd2FpdCgpOworICAgICAgICAgICAgICAgIHRhc2sgPSAoUnVubmFibGUpIF90YXNrcy5wb3AoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRhc2sucnVuKCk7CisgICAgICAgIH0KKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kZWZVc2UvU0NSNDAzNjQvZXhwZWN0ZWQueG1sIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGVmVXNlL1NDUjQwMzY0L2V4cGVjdGVkLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OTZhMzE1Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGVmVXNlL1NDUjQwMzY0L2V4cGVjdGVkLnhtbApAQCAtMCwwICsxLDIgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8cHJvYmxlbXMgLz4KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RlZlVzZS9TQ1I0MDM2NC9zcmMvVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGVmVXNlL1NDUjQwMzY0L3NyYy9UZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjA2NmUzYwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RlZlVzZS9TQ1I0MDM2NC9zcmMvVGVzdC5qYXZhCkBAIC0wLDAgKzEsMTYgQEAKK3BhY2thZ2Ugc3Bpa2U7CisKK3B1YmxpYyBjbGFzcyBBCit7CisJcHVibGljIHN0YXRpYyB2b2lkIG1haW4gKFN0cmluZ1tdIGFyZ3MpCisJeworCQlib29sZWFuIHRoZXJlSXNNb3JlVG9QYXJzZTsKKwkJZG8geworCQkJdGhlcmVJc01vcmVUb1BhcnNlID0gYnVpbGROZXh0T2JqZWN0ICgpOworCQl9IHdoaWxlICh0aGVyZUlzTW9yZVRvUGFyc2UpOworCX0KKworCXByaXZhdGUgc3RhdGljIGJvb2xlYW4gYnVpbGROZXh0T2JqZWN0ICgpIHsKKwkJcmV0dXJuIGZhbHNlOworCX0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RlZlVzZS9TQ1I1MTQ0L2V4cGVjdGVkLnhtbCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RlZlVzZS9TQ1I1MTQ0L2V4cGVjdGVkLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YWM4NzlkCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGVmVXNlL1NDUjUxNDQvZXhwZWN0ZWQueG1sCkBAIC0wLDAgKzEsMyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxwcm9ibGVtcyAvPgorCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kZWZVc2UvU0NSNTE0NC9zcmMvQXNzaWduVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGVmVXNlL1NDUjUxNDQvc3JjL0Fzc2lnblRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YTFmZTU4Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGVmVXNlL1NDUjUxNDQvc3JjL0Fzc2lnblRlc3QuamF2YQpAQCAtMCwwICsxLDEwIEBACitwdWJsaWMgY2xhc3MgQXNzaWduVGVzdCB7IAorICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKyAgICAgICAgaW50IGZvbyA9IDA7CisgCisgICAgICAgIHdoaWxlICh0cnVlKSB7CisgICAgICAgICAgICBpZiAoZm9vICE9IDEyKSBTeXN0ZW0ub3V0LnByaW50bG4oIlRlc3QiKTsKKyAgICAgICAgICAgIGlmIChNYXRoLnJhbmRvbSgpID4gMC41KSBmb28gPSAyMjsKKyAgICAgICAgfQorICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RlZlVzZS9TQ1I2ODQzL2V4cGVjdGVkLnhtbCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RlZlVzZS9TQ1I2ODQzL2V4cGVjdGVkLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYTJjMjkxCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGVmVXNlL1NDUjY4NDMvZXhwZWN0ZWQueG1sCkBAIC0wLDAgKzEsMjAgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8cHJvYmxlbXM+CisgIDxwcm9ibGVtPgorICAgIDxmaWxlPk5vdFVzZWRUZXN0LmphdmE8L2ZpbGU+CisgICAgPGxpbmU+MzwvbGluZT4KKyAgICA8ZGVzY3JpcHRpb24+VmFyaWFibGUgaXMgbmV2ZXIgdXNlZDwvZGVzY3JpcHRpb24+CisgIDwvcHJvYmxlbT4KKyAgPHByb2JsZW0+CisgICAgPGZpbGU+Tm90VXNlZFRlc3QuamF2YTwvZmlsZT4KKyAgICA8bGluZT40PC9saW5lPgorICAgIDxkZXNjcmlwdGlvbj5UaGUgdmFsdWUgYXNzaWduZWQgaXMgbmV2ZXIgdXNlZDwvZGVzY3JpcHRpb24+CisgIDwvcHJvYmxlbT4KKyAgPHByb2JsZW0+CisgICAgPGZpbGU+Tm90VXNlZFRlc3QuamF2YTwvZmlsZT4KKyAgICA8bGluZT41PC9saW5lPgorICAgIDxkZXNjcmlwdGlvbj5UaGUgdmFsdWUgYXNzaWduZWQgaXMgbmV2ZXIgdXNlZDwvZGVzY3JpcHRpb24+CisgIDwvcHJvYmxlbT4KKworPC9wcm9ibGVtcz4KKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGVmVXNlL1NDUjY4NDMvc3JjL05vdFVzZWRUZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kZWZVc2UvU0NSNjg0My9zcmMvTm90VXNlZFRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOTYxYjE5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGVmVXNlL1NDUjY4NDMvc3JjL05vdFVzZWRUZXN0LmphdmEKQEAgLTAsMCArMSw3IEBACitwdWJsaWMgY2xhc3MgTm90VXNlZFRlc3QgeyAKKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisJYm9vbGVhbiB1bnVzZWQgPSB0cnVlOworCXVudXNlZCA9IHRydWU7CisJdW51c2VkID0gdHJ1ZTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kZWZVc2UvVXNlZEluQXJyYXlJbml0aWFsaXplci9leHBlY3RlZC54bWwgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kZWZVc2UvVXNlZEluQXJyYXlJbml0aWFsaXplci9leHBlY3RlZC54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDcwNGQ1OAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RlZlVzZS9Vc2VkSW5BcnJheUluaXRpYWxpemVyL2V4cGVjdGVkLnhtbApAQCAtMCwwICsxLDQgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8cHJvYmxlbXM+Cis8L3Byb2JsZW1zPgorCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kZWZVc2UvVXNlZEluQXJyYXlJbml0aWFsaXplci9zcmMvRm9vLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kZWZVc2UvVXNlZEluQXJyYXlJbml0aWFsaXplci9zcmMvRm9vLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjQ2NDNiMTEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kZWZVc2UvVXNlZEluQXJyYXlJbml0aWFsaXplci9zcmMvRm9vLmphdmEKQEAgLTAsMCArMSw3IEBACitwdWJsaWMgY2xhc3MgRm9vIHsKKyAgcHVibGljIHZvaWQgZm9vKCkgeworICAgIGludCBpID0gNAorICAgIGludFtdIGFycmF5ID0gbmV3IGludFtdIHtpfTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGFycmF5Lmxlbmd0aDsgaSsrKSB7fQorICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGVmVXNlL2FycmF5SW5kZXhVc2FnZXMvZXhwZWN0ZWQueG1sIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGVmVXNlL2FycmF5SW5kZXhVc2FnZXMvZXhwZWN0ZWQueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZjYmJhYjQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kZWZVc2UvYXJyYXlJbmRleFVzYWdlcy9leHBlY3RlZC54bWwKQEAgLTAsMCArMSw5IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHByb2JsZW1zPgorICA8cHJvYmxlbT4KKyAgICA8ZmlsZT5Gb28uamF2YTwvZmlsZT4KKyAgICA8bGluZT43PC9saW5lPgorICAgIDxkZXNjcmlwdGlvbj5UaGUgdmFsdWUgY2hhbmdlZCBpcyBuZXZlciB1c2VkPC9kZXNjcmlwdGlvbj4KKyAgPC9wcm9ibGVtPgorPC9wcm9ibGVtcz4KKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGVmVXNlL2FycmF5SW5kZXhVc2FnZXMvc3JjL0Zvby5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGVmVXNlL2FycmF5SW5kZXhVc2FnZXMvc3JjL0Zvby5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJhN2RlY2RkCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGVmVXNlL2FycmF5SW5kZXhVc2FnZXMvc3JjL0Zvby5qYXZhCkBAIC0wLDAgKzEsMTEgQEAKK3B1YmxpYyBjbGFzcyBGb28geworICBpbnQgbXlPZmZzZXQ7CisgIHZvaWQgZm9vKCkgeworICAgIGludCBvZmZzZXQgPSBteU9mZnNldCArIDQ7CisgICAgYnl0ZVtdIGEgPSBuZXcgYnl0ZVsxMF07CisgICAgYnl0ZSBiMSA9IGFbb2Zmc2V0KytdOworICAgIGJ5dGUgYjIgPSBhW29mZnNldCsrXTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oYjEpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbihiMik7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kZWZVc2UvdW51c2VkVmFyaWFibGUvZXhwZWN0ZWQueG1sIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGVmVXNlL3VudXNlZFZhcmlhYmxlL2V4cGVjdGVkLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZTUwOThlCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGVmVXNlL3VudXNlZFZhcmlhYmxlL2V4cGVjdGVkLnhtbApAQCAtMCwwICsxLDkgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8cHJvYmxlbXM+CisgIDxwcm9ibGVtPgorICAgIDxmaWxlPkZvby5qYXZhPC9maWxlPgorICAgIDxsaW5lPjM8L2xpbmU+CisgICAgPGRlc2NyaXB0aW9uPlZhcmlhYmxlIGkgaXMgbmV2ZXIgdXNlZDwvZGVzY3JpcHRpb24+CisgIDwvcHJvYmxlbT4KKzwvcHJvYmxlbXM+CisKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RlZlVzZS91bnVzZWRWYXJpYWJsZS9zcmMvRm9vLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kZWZVc2UvdW51c2VkVmFyaWFibGUvc3JjL0Zvby5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU3MmVjZWMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kZWZVc2UvdW51c2VkVmFyaWFibGUvc3JjL0Zvby5qYXZhCkBAIC0wLDAgKzEsNSBAQAorcHVibGljIGNsYXNzIEZvbyB7CisgIHB1YmxpYyB2b2lkIGZvbygpIHsKKyAgICBpbnQgaTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RlZmF1bHRGaWxlVGVtcGxhdGVVc2FnZS9kZWZhdWx0RmlsZS9leHBlY3RlZC54bWwgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kZWZhdWx0RmlsZVRlbXBsYXRlVXNhZ2UvZGVmYXVsdEZpbGUvZXhwZWN0ZWQueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhhMGQzZDMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kZWZhdWx0RmlsZVRlbXBsYXRlVXNhZ2UvZGVmYXVsdEZpbGUvZXhwZWN0ZWQueG1sCkBAIC0wLDAgKzEsMTE4IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHByb2JsZW1zPgorCis8cHJvYmxlbT4KKyAgPGZpbGU+WC5qYXZhPC9maWxlPgorICA8bGluZT40PC9saW5lPgorICA8cHJvYmxlbV9jbGFzcz5EZWZhdWx0IEZpbGUgVGVtcGxhdGUgVXNhZ2U8L3Byb2JsZW1fY2xhc3M+CisgIDxkZXNjcmlwdGlvbj5EZWZhdWx0IEZpbGUgdGVtcGxhdGU8L2Rlc2NyaXB0aW9uPgorPC9wcm9ibGVtPgorCisgIDxwcm9ibGVtPgorICAgIDxmaWxlPlgyLmphdmE8L2ZpbGU+CisgICAgPGxpbmU+NDwvbGluZT4KKyAgICA8cHJvYmxlbV9jbGFzcz5EZWZhdWx0IEZpbGUgVGVtcGxhdGUgVXNhZ2U8L3Byb2JsZW1fY2xhc3M+CisgICAgPGRlc2NyaXB0aW9uPkRlZmF1bHQgRmlsZSB0ZW1wbGF0ZTwvZGVzY3JpcHRpb24+CisgIDwvcHJvYmxlbT4KKworICA8cHJvYmxlbT4KKyAgPGZpbGU+WC5qYXZhPC9maWxlPgorICA8bGluZT4xNzwvbGluZT4KKyAgPHBhY2thZ2U+eDwvcGFja2FnZT4KKyAgPGNsYXNzPgorICAgIDxuYW1lPlg8L25hbWU+CisgICAgPGRpc3BsYXlfbmFtZT5YPC9kaXNwbGF5X25hbWU+CisgIDwvY2xhc3M+CisgIDxwcm9ibGVtX2NsYXNzPkRlZmF1bHQgRmlsZSBUZW1wbGF0ZSBVc2FnZTwvcHJvYmxlbV9jbGFzcz4KKyAgPGRlc2NyaXB0aW9uPkRlZmF1bHQgRmlsZSB0ZW1wbGF0ZTwvZGVzY3JpcHRpb24+Cis8L3Byb2JsZW0+CisKKzxwcm9ibGVtPgorICA8ZmlsZT5YLmphdmE8L2ZpbGU+CisgIDxsaW5lPjIyPC9saW5lPgorICA8cGFja2FnZT54PC9wYWNrYWdlPgorICA8Y2xhc3M+CisgICAgPG5hbWU+WDwvbmFtZT4KKyAgICA8ZGlzcGxheV9uYW1lPlg8L2Rpc3BsYXlfbmFtZT4KKyAgPC9jbGFzcz4KKyAgPHByb2JsZW1fY2xhc3M+RGVmYXVsdCBGaWxlIFRlbXBsYXRlIFVzYWdlPC9wcm9ibGVtX2NsYXNzPgorICA8ZGVzY3JpcHRpb24+RGVmYXVsdCBGaWxlIHRlbXBsYXRlPC9kZXNjcmlwdGlvbj4KKzwvcHJvYmxlbT4KKworPHByb2JsZW0+CisgIDxmaWxlPlguamF2YTwvZmlsZT4KKyAgPGxpbmU+MzE8L2xpbmU+CisgIDxtZXRob2Q+CisgICAgPG5hbWU+aW50IGhhc2hDb2RlKCk8L25hbWU+CisgICAgPGRpc3BsYXlfbmFtZT5oYXNoQ29kZSgpPC9kaXNwbGF5X25hbWU+CisgICAgPHBhY2thZ2U+eDwvcGFja2FnZT4KKyAgICA8Y2xhc3M+CisgICAgICA8bmFtZT5YPC9uYW1lPgorICAgICAgPGRpc3BsYXlfbmFtZT5YPC9kaXNwbGF5X25hbWU+CisgICAgPC9jbGFzcz4KKyAgPC9tZXRob2Q+CisgIDxwcm9ibGVtX2NsYXNzPkRlZmF1bHQgRmlsZSBUZW1wbGF0ZSBVc2FnZTwvcHJvYmxlbV9jbGFzcz4KKyAgPGRlc2NyaXB0aW9uPkRlZmF1bHQgRmlsZSB0ZW1wbGF0ZTwvZGVzY3JpcHRpb24+Cis8L3Byb2JsZW0+CisKKzxwcm9ibGVtPgorICA8ZmlsZT5YLmphdmE8L2ZpbGU+CisgIDxsaW5lPjI3PC9saW5lPgorICA8bWV0aG9kPgorICAgIDxuYW1lPnZvaWQgZygpPC9uYW1lPgorICAgIDxkaXNwbGF5X25hbWU+ZygpPC9kaXNwbGF5X25hbWU+CisgICAgPHBhY2thZ2U+eDwvcGFja2FnZT4KKyAgICA8Y2xhc3M+CisgICAgICA8bmFtZT5YPC9uYW1lPgorICAgICAgPGRpc3BsYXlfbmFtZT5YPC9kaXNwbGF5X25hbWU+CisgICAgPC9jbGFzcz4KKyAgPC9tZXRob2Q+CisgIDxwcm9ibGVtX2NsYXNzPkRlZmF1bHQgRmlsZSBUZW1wbGF0ZSBVc2FnZTwvcHJvYmxlbV9jbGFzcz4KKyAgPGRlc2NyaXB0aW9uPkRlZmF1bHQgRmlsZSB0ZW1wbGF0ZTwvZGVzY3JpcHRpb24+Cis8L3Byb2JsZW0+CisKKzxwcm9ibGVtPgorICA8ZmlsZT5YLmphdmE8L2ZpbGU+CisgIDxsaW5lPjM1PC9saW5lPgorICA8bWV0aG9kPgorICAgIDxuYW1lPlN0cmluZyB0b1N0cmluZygpPC9uYW1lPgorICAgIDxkaXNwbGF5X25hbWU+dG9TdHJpbmcoKTwvZGlzcGxheV9uYW1lPgorICAgIDxwYWNrYWdlPng8L3BhY2thZ2U+CisgICAgPGNsYXNzPgorICAgICAgPG5hbWU+WDwvbmFtZT4KKyAgICAgIDxkaXNwbGF5X25hbWU+WDwvZGlzcGxheV9uYW1lPgorICAgIDwvY2xhc3M+CisgIDwvbWV0aG9kPgorICA8cHJvYmxlbV9jbGFzcz5EZWZhdWx0IEZpbGUgVGVtcGxhdGUgVXNhZ2U8L3Byb2JsZW1fY2xhc3M+CisgIDxkZXNjcmlwdGlvbj5EZWZhdWx0IEZpbGUgdGVtcGxhdGU8L2Rlc2NyaXB0aW9uPgorPC9wcm9ibGVtPgorCis8cHJvYmxlbT4KKyAgPGZpbGU+WC5qYXZhPC9maWxlPgorICA8bGluZT4zOTwvbGluZT4KKyAgPG1ldGhvZD4KKyAgICA8bmFtZT52b2lkIHJ1bigpPC9uYW1lPgorICAgIDxkaXNwbGF5X25hbWU+cnVuKCk8L2Rpc3BsYXlfbmFtZT4KKyAgICA8cGFja2FnZT54PC9wYWNrYWdlPgorICAgIDxjbGFzcz4KKyAgICAgIDxuYW1lPlg8L25hbWU+CisgICAgICA8ZGlzcGxheV9uYW1lPlg8L2Rpc3BsYXlfbmFtZT4KKyAgICA8L2NsYXNzPgorICA8L21ldGhvZD4KKyAgPHByb2JsZW1fY2xhc3M+RGVmYXVsdCBGaWxlIFRlbXBsYXRlIFVzYWdlPC9wcm9ibGVtX2NsYXNzPgorICA8ZGVzY3JpcHRpb24+RGVmYXVsdCBGaWxlIHRlbXBsYXRlPC9kZXNjcmlwdGlvbj4KKzwvcHJvYmxlbT4KKworICA8cHJvYmxlbT4KKyAgICA8ZmlsZT5YLmphdmE8L2ZpbGU+CisgICAgPGxpbmU+NjM8L2xpbmU+CisgICAgPHBhY2thZ2U+eDwvcGFja2FnZT4KKyAgICA8Y2xhc3M+CisgICAgICA8bmFtZT5YPC9uYW1lPgorICAgICAgPGRpc3BsYXlfbmFtZT5YPC9kaXNwbGF5X25hbWU+CisgICAgPC9jbGFzcz4KKyAgICA8cHJvYmxlbV9jbGFzcz5EZWZhdWx0IEZpbGUgVGVtcGxhdGUgVXNhZ2U8L3Byb2JsZW1fY2xhc3M+CisgICAgPGRlc2NyaXB0aW9uPkRlZmF1bHQgRmlsZSB0ZW1wbGF0ZTwvZGVzY3JpcHRpb24+CisgIDwvcHJvYmxlbT4KKworPC9wcm9ibGVtcz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kZWZhdWx0RmlsZVRlbXBsYXRlVXNhZ2UvZGVmYXVsdEZpbGUvc3JjL3gvWC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGVmYXVsdEZpbGVUZW1wbGF0ZVVzYWdlL2RlZmF1bHRGaWxlL3NyYy94L1guamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMjJjMjJjCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGVmYXVsdEZpbGVUZW1wbGF0ZVVzYWdlL2RlZmF1bHRGaWxlL3NyYy94L1guamF2YQpAQCAtMCwwICsxLDY3IEBACitwYWNrYWdlIHg7CitpbXBvcnQgamF2YS5pby4qOworCisvKioKKyAqIENyZWF0ZWQgd2l0aCBJbnRlbGxpSiBJREVBLgorICogVXNlcjogQWxleGV5CisgKiBEYXRlOiAwMi4xMi4yMDA1CisgKiBUaW1lOiAwOjI0OjE0CisgKiBUbyBjaGFuZ2UgdGhpcyB0ZW1wbGF0ZSB1c2UgRmlsZSB8IFNldHRpbmdzIHwgRmlsZSBUZW1wbGF0ZXMuCisgKi8KK3B1YmxpYyBjbGFzcyBYIGltcGxlbWVudHMgUnVubmFibGV7CisgICAgRmlsZSBmOyAvL2traiBsa2tsIGpqa3V1ZmRmZmZmamtrampoIGtqaCBramhqIGtramgga2poICBpIGsga2oga2oga2xqIGxraiBsa2ogbGtqbCBraiBrbGtsIGtsCisgICAgeworICAgICAgICB0cnkgeworICAgICAgICAgICAgZj1udWxsOworICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsgIC8vVG8gY2hhbmdlIGJvZHkgb2YgY2F0Y2ggc3RhdGVtZW50IHVzZSBGaWxlIHwgU2V0dGluZ3MgfCBGaWxlIFRlbXBsYXRlcy4KKyAgICAgICAgfQorICAgICAgICB0cnkgeworICAgICAgICAgICAgZygpOworICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKKyAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOyAgLy9UbyBjaGFuZ2UgYm9keSBvZiBjYXRjaCBzdGF0ZW1lbnQgdXNlIEZpbGUgfCBTZXR0aW5ncyB8IEZpbGUgVGVtcGxhdGVzLgorICAgICAgICB9CisgICAgfQorCisgICAgcHJpdmF0ZSB2b2lkIGcoKSB0aHJvd3MgRU9GRXhjZXB0aW9uLCBGaWxlTm90Rm91bmRFeGNlcHRpb24geworICAgICAgICAvL1RvIGNoYW5nZSBib2R5IG9mIGNyZWF0ZWQgbWV0aG9kcyB1c2UgRmlsZSB8IFNldHRpbmdzIHwgRmlsZSBUZW1wbGF0ZXMuCisgICAgfQorCisgICAgcHVibGljIGludCBoYXNoQ29kZSgpIHsKKyAgICAgICAgcmV0dXJuIHN1cGVyLmhhc2hDb2RlKCk7ICAgIC8vVG8gY2hhbmdlIGJvZHkgb2Ygb3ZlcnJpZGRlbiBtZXRob2RzIHVzZSBGaWxlIHwgU2V0dGluZ3MgfCBGaWxlIFRlbXBsYXRlcy4KKyAgICB9CisgICAgICAgIAorICAgIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7CisgICAgIHJldHVybiBzdXBlci50b1N0cmluZygpOyAgICAgICAgICAgIC8vVG8gY2hhbmdlIGJvZHkgb2Ygb3ZlcnJpZGRlbiBtZXRob2RzIHVzZSBGaWxlIHwgU2V0dGluZ3MgfCBGaWxlIFRlbXBsYXRlcy4KKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBydW4oKSB7CisgICAgICAgIC8vVG8gY2hhbmdlIGJvZHkgb2YgaW1wbGVtZW50ZWQgbWV0aG9kcyB1c2UgRmlsZSB8IFNldHRpbmdzIHwgRmlsZSBUZW1wbGF0ZXMuCisgICAgfQorCisgICAgcHJpdmF0ZSB2b2lkIG1ldGhvZCgpIHsKKyAgICAgICAgLy8gaGVsbG8KKyAgICB9CisgICAgcHJpdmF0ZSBpbnQgZ2V0aSgpIHsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIHByaXZhdGUgdm9pZCBjYXQoKSB7CisgICAgICB0cnkgeworICAgICAgfQorICAgICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsgLy8gaGV5CisgICAgICB9CisgICAgfQorICAgICBwcm90ZWN0ZWQgdm9pZCBmaW5hbGl6ZSgpIHRocm93cyBUaHJvd2FibGUgeworICAgICAgICAgICAgc3VwZXIuZmluYWxpemUoKTsgICAgCisgICAgIH0KKworICAgIHByaXZhdGUgdm9pZCBtdWx0aSgpIHsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIGcoKTsKKyAgICAgICAgfSBjYXRjaCAoRU9GRXhjZXB0aW9uIHwgRmlsZU5vdEZvdW5kRXhjZXB0aW9uIGV4KSB7CisgICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsgIC8vVG8gY2hhbmdlIGJvZHkgb2YgY2F0Y2ggc3RhdGVtZW50IHVzZSBGaWxlIHwgU2V0dGluZ3MgfCBGaWxlIFRlbXBsYXRlcy4KKyAgICAgICAgfQorICAgIH0KK30KKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGVmYXVsdEZpbGVUZW1wbGF0ZVVzYWdlL2RlZmF1bHRGaWxlL3NyYy94L1gyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kZWZhdWx0RmlsZVRlbXBsYXRlVXNhZ2UvZGVmYXVsdEZpbGUvc3JjL3gvWDIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYzQzNzM3Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGVmYXVsdEZpbGVUZW1wbGF0ZVVzYWdlL2RlZmF1bHRGaWxlL3NyYy94L1gyLmphdmEKQEAgLTAsMCArMSwxMiBAQAorcGFja2FnZSB4OworaW1wb3J0IGphdmEuaW8uKjsKKworLyoqCisgKiBDcmVhdGVkIHdpdGggSW50ZWxsaUogSURFQS4KKyAqIFVzZXI6IEFsZXhleQorICogRGF0ZTogMDIuMTIuMjAwNQorICogVGltZTogMDoyNDoxNAorICogVG8gY2hhbmdlIHRoaXMgdGVtcGxhdGUgdXNlIEZpbGUgfCBTZXR0aW5ncyB8IEZpbGUgVGVtcGxhdGVzLgorICovCitwdWJsaWMgY2xhc3MgWDIgeworfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGVwcmVjYXRpb24vZGVwcmVjYXRlZERlZmF1bHRDb25zdHJ1Y3RvckluU3VwZXIvZXhwZWN0ZWQueG1sIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGVwcmVjYXRpb24vZGVwcmVjYXRlZERlZmF1bHRDb25zdHJ1Y3RvckluU3VwZXIvZXhwZWN0ZWQueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFlNjFlYTgKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kZXByZWNhdGlvbi9kZXByZWNhdGVkRGVmYXVsdENvbnN0cnVjdG9ySW5TdXBlci9leHBlY3RlZC54bWwKQEAgLTAsMCArMSwxNCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxwcm9ibGVtcz4KKyAgPHByb2JsZW0+CisgICAgPGZpbGU+VGVzdC5qYXZhPC9maWxlPgorICAgIDxsaW5lPjU8L2xpbmU+CisgICAgPGRlc2NyaXB0aW9uPkRlZmF1bHQgY29uc3RydWN0b3IgaW4gQyBpcyBkZXByZWNhdGVkPC9kZXNjcmlwdGlvbj4KKyAgPC9wcm9ibGVtPgorICA8cHJvYmxlbT4KKyAgICA8ZmlsZT5UZXN0LmphdmE8L2ZpbGU+CisgICAgPGxpbmU+MTA8L2xpbmU+CisgICAgPGRlc2NyaXB0aW9uPkRlZmF1bHQgY29uc3RydWN0b3IgaW4gQyBpcyBkZXByZWNhdGVkPC9kZXNjcmlwdGlvbj4KKyAgPC9wcm9ibGVtPgorPC9wcm9ibGVtcz4KKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGVwcmVjYXRpb24vZGVwcmVjYXRlZERlZmF1bHRDb25zdHJ1Y3RvckluU3VwZXIvc3JjL1Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RlcHJlY2F0aW9uL2RlcHJlY2F0ZWREZWZhdWx0Q29uc3RydWN0b3JJblN1cGVyL3NyYy9UZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzgwOGMyYwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RlcHJlY2F0aW9uL2RlcHJlY2F0ZWREZWZhdWx0Q29uc3RydWN0b3JJblN1cGVyL3NyYy9UZXN0LmphdmEKQEAgLTAsMCArMSwxMiBAQAorY2xhc3MgQyB7CisgIEBEZXByZWNhdGVkIEMoKSB7IH0KK30KKworY2xhc3MgRCBleHRlbmRzIEMgeworfQorCitjbGFzcyBQIHsKKyAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworICAgIG5ldyBDKCl7fTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RlcHJlY2F0aW9uL2RlcHJlY2F0ZWREZWZhdWx0Q29uc3RydWN0b3JJblN1cGVyTm90Q2FsbGVkL2V4cGVjdGVkLnhtbCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RlcHJlY2F0aW9uL2RlcHJlY2F0ZWREZWZhdWx0Q29uc3RydWN0b3JJblN1cGVyTm90Q2FsbGVkL2V4cGVjdGVkLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYmZjNWEwCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGVwcmVjYXRpb24vZGVwcmVjYXRlZERlZmF1bHRDb25zdHJ1Y3RvckluU3VwZXJOb3RDYWxsZWQvZXhwZWN0ZWQueG1sCkBAIC0wLDAgKzEsOSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxwcm9ibGVtcz4KKyAgPHByb2JsZW0+CisgICAgPGZpbGU+VGVzdC5qYXZhPC9maWxlPgorICAgIDxsaW5lPjY8L2xpbmU+CisgICAgPGRlc2NyaXB0aW9uPkRlZmF1bHQgY29uc3RydWN0b3IgaW4gQyBpcyBkZXByZWNhdGVkPC9kZXNjcmlwdGlvbj4KKyAgPC9wcm9ibGVtPgorPC9wcm9ibGVtcz4KKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGVwcmVjYXRpb24vZGVwcmVjYXRlZERlZmF1bHRDb25zdHJ1Y3RvckluU3VwZXJOb3RDYWxsZWQvc3JjL1Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RlcHJlY2F0aW9uL2RlcHJlY2F0ZWREZWZhdWx0Q29uc3RydWN0b3JJblN1cGVyTm90Q2FsbGVkL3NyYy9UZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzQwZjFkMAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RlcHJlY2F0aW9uL2RlcHJlY2F0ZWREZWZhdWx0Q29uc3RydWN0b3JJblN1cGVyTm90Q2FsbGVkL3NyYy9UZXN0LmphdmEKQEAgLTAsMCArMSw4IEBACitjbGFzcyBDIHsKKyAgQERlcHJlY2F0ZWQgQygpIHsgfQorfQorCitjbGFzcyBEIGV4dGVuZHMgQyB7CisgIEQoKSB7CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RlcHJlY2F0aW9uL2RlcHJlY2F0ZWRGaWVsZC9leHBlY3RlZC54bWwgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kZXByZWNhdGlvbi9kZXByZWNhdGVkRmllbGQvZXhwZWN0ZWQueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ0ZWNmOTEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kZXByZWNhdGlvbi9kZXByZWNhdGVkRmllbGQvZXhwZWN0ZWQueG1sCkBAIC0wLDAgKzEsOSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxwcm9ibGVtcz4KKyAgPHByb2JsZW0+CisgICAgPGZpbGU+VGVzdC5qYXZhPC9maWxlPgorICAgIDxsaW5lPjc8L2xpbmU+CisgICAgPGRlc2NyaXB0aW9uPidiJyBpcyBkZXByZWNhdGVkPC9kZXNjcmlwdGlvbj4KKyAgPC9wcm9ibGVtPgorPC9wcm9ibGVtcz4KKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGVwcmVjYXRpb24vZGVwcmVjYXRlZEZpZWxkL3NyYy9UZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kZXByZWNhdGlvbi9kZXByZWNhdGVkRmllbGQvc3JjL1Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hODA0MjhhOAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RlcHJlY2F0aW9uL2RlcHJlY2F0ZWRGaWVsZC9zcmMvVGVzdC5qYXZhCkBAIC0wLDAgKzEsOSBAQAorcHVibGljIGNsYXNzIFRlc3R7CisgIC8qKgorICAgICogQGRlcHJlY2F0ZWQKKyAgICAqLworICAgIGJvb2xlYW4gYjsKKyAgICBib29sZWFuIGJhcigpeworICAgICAgcmV0dXJuIGI7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RlcHJlY2F0aW9uL2RlcHJlY2F0ZWRJbkltcG9ydC9leHBlY3RlZC54bWwgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kZXByZWNhdGlvbi9kZXByZWNhdGVkSW5JbXBvcnQvZXhwZWN0ZWQueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ3MDRkOTEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kZXByZWNhdGlvbi9kZXByZWNhdGVkSW5JbXBvcnQvZXhwZWN0ZWQueG1sCkBAIC0wLDAgKzEsMiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxwcm9ibGVtcy8+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGVwcmVjYXRpb24vZGVwcmVjYXRlZEluSW1wb3J0L3NyYy9UZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kZXByZWNhdGlvbi9kZXByZWNhdGVkSW5JbXBvcnQvc3JjL1Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNjE5MjIyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGVwcmVjYXRpb24vZGVwcmVjYXRlZEluSW1wb3J0L3NyYy9UZXN0LmphdmEKQEAgLTAsMCArMSwzIEBACitpbXBvcnQgYS5BOworcHVibGljIGNsYXNzIFRlc3QgeworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RlcHJlY2F0aW9uL2RlcHJlY2F0ZWRJbkltcG9ydC9zcmMvYS9BLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kZXByZWNhdGlvbi9kZXByZWNhdGVkSW5JbXBvcnQvc3JjL2EvQS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMyY2Q5ZjQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kZXByZWNhdGlvbi9kZXByZWNhdGVkSW5JbXBvcnQvc3JjL2EvQS5qYXZhCkBAIC0wLDAgKzEsMyBAQAorcGFja2FnZSBhOworQERlcHJlY2F0ZWQKK3B1YmxpYyBjbGFzcyBBIHt9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGVwcmVjYXRpb24vZGVwcmVjYXRlZElubmVyL2V4cGVjdGVkLnhtbCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RlcHJlY2F0aW9uL2RlcHJlY2F0ZWRJbm5lci9leHBlY3RlZC54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDY0ZmVjNAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RlcHJlY2F0aW9uL2RlcHJlY2F0ZWRJbm5lci9leHBlY3RlZC54bWwKQEAgLTAsMCArMSwyOSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxwcm9ibGVtcz4KKyAgPHByb2JsZW0+CisgICAgPGZpbGU+VGVzdC5qYXZhPC9maWxlPgorICAgIDxsaW5lPjExPC9saW5lPgorICAgIDxkZXNjcmlwdGlvbj4nZm9vKCknIGlzIGRlcHJlY2F0ZWQ8L2Rlc2NyaXB0aW9uPgorICA8L3Byb2JsZW0+CisgIDxwcm9ibGVtPgorICAgIDxmaWxlPlRlc3QuamF2YTwvZmlsZT4KKyAgICA8bGluZT4yMjwvbGluZT4KKyAgICA8ZGVzY3JpcHRpb24+J2ZvbygpJyBpcyBkZXByZWNhdGVkPC9kZXNjcmlwdGlvbj4KKyAgPC9wcm9ibGVtPgorICA8cHJvYmxlbT4KKyAgICA8ZmlsZT5UZXN0LmphdmE8L2ZpbGU+CisgICAgPGxpbmU+NDI8L2xpbmU+CisgICAgPGRlc2NyaXB0aW9uPidmb28oKScgaXMgZGVwcmVjYXRlZDwvZGVzY3JpcHRpb24+CisgIDwvcHJvYmxlbT4KKyAgPHByb2JsZW0+CisgICAgPGZpbGU+VGVzdC5qYXZhPC9maWxlPgorICAgIDxsaW5lPjQzPC9saW5lPgorICAgIDxkZXNjcmlwdGlvbj4nZm9vKCknIGlzIGRlcHJlY2F0ZWQ8L2Rlc2NyaXB0aW9uPgorICA8L3Byb2JsZW0+CisgIDxwcm9ibGVtPgorICAgIDxmaWxlPlRlc3QuamF2YTwvZmlsZT4KKyAgICA8bGluZT40MzwvbGluZT4KKyAgICA8ZGVzY3JpcHRpb24+J2ZvbygpJyBpcyBkZXByZWNhdGVkPC9kZXNjcmlwdGlvbj4KKyAgPC9wcm9ibGVtPgorPC9wcm9ibGVtcz4KKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGVwcmVjYXRpb24vZGVwcmVjYXRlZElubmVyL3NyYy9UZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kZXByZWNhdGlvbi9kZXByZWNhdGVkSW5uZXIvc3JjL1Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYWY2ODVmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGVwcmVjYXRpb24vZGVwcmVjYXRlZElubmVyL3NyYy9UZXN0LmphdmEKQEAgLTAsMCArMSw0NyBAQAorcHVibGljIGNsYXNzIFRlc3QgeworICAgIC8qKgorICAgICAqIEBkZXByZWNhdGVkCisgICAgICAqLworICAgYm9vbGVhbiBmb28oKXsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgfQorCisgICBSdW5uYWJsZSBydW5uYWJsZSA9IG5ldyBSdW5uYWJsZSgpIHsKKyAgICAgICBwdWJsaWMgdm9pZCBydW4oKSB7CisgICAgICAgICAgIFRlc3QudGhpcy5mb28oKTsKKyAgICAgICB9CisgICB9OworCisgICBib29sZWFuIGJhcihib29sZWFuIGcpeworICAgICAgIG5ldyBSdW5uYWJsZSgpeworCisgICAgICAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKKyAgICAgICAgICAgICAgbmV3IFJ1bm5hYmxlKCl7CisKKyAgICAgICAgICAgICAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKKyAgICAgICAgICAgICAgICAgICAgICBUZXN0LnRoaXMuZm9vKCk7CisgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIH07CisgICAgICAgICAgIH0KKyAgICAgICB9OworICAgICAgIHJldHVybiBmYWxzZTsKKyAgIH0KKworICAgVGVzdChib29sZWFuIGcsIGJvb2xlYW4gaCl7CisgICAgIGlmIChnICYmIGgpe30KKyAgIH0KKworCisgICAgcHVibGljIFRlc3QoKSB7CisgICAgfQorCisKKworICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKyAgICAgICAgVGVzdCB0ZXN0ID0gbmV3IFRlc3QoKTsKKyAgICAgICAgdGVzdC5iYXIodGVzdC5mb28oKSk7CisgICAgICAgIFRlc3QgeTExID0gbmV3IFRlc3QodGVzdC5mb28oKSwgdGVzdC5iYXIodGVzdC5mb28oKSkpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oeTExKTsKKyAgICB9CisKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RlcHJlY2F0aW9uL2RlcHJlY2F0ZWRNZXRob2QvZXhwZWN0ZWQueG1sIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGVwcmVjYXRpb24vZGVwcmVjYXRlZE1ldGhvZC9leHBlY3RlZC54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjg3Njg3NwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RlcHJlY2F0aW9uL2RlcHJlY2F0ZWRNZXRob2QvZXhwZWN0ZWQueG1sCkBAIC0wLDAgKzEsOSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxwcm9ibGVtcz4KKyAgPHByb2JsZW0+CisgICAgPGZpbGU+VGVzdC5qYXZhPC9maWxlPgorICAgIDxsaW5lPjg8L2xpbmU+CisgICAgPGRlc2NyaXB0aW9uPidmb28oKScgaXMgZGVwcmVjYXRlZDwvZGVzY3JpcHRpb24+CisgIDwvcHJvYmxlbT4KKzwvcHJvYmxlbXM+CisKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RlcHJlY2F0aW9uL2RlcHJlY2F0ZWRNZXRob2Qvc3JjL1Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2RlcHJlY2F0aW9uL2RlcHJlY2F0ZWRNZXRob2Qvc3JjL1Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNDA3ZTgyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZGVwcmVjYXRpb24vZGVwcmVjYXRlZE1ldGhvZC9zcmMvVGVzdC5qYXZhCkBAIC0wLDAgKzEsMTAgQEAKK3B1YmxpYyBjbGFzcyBUZXN0IHsKKyAgLyoqCisgICAqIEBkZXByZWNhdGVkIAorICAgKi8KKyAgdm9pZCBmb28oKXt9CisKKyAgdm9pZCBiYXIoKXsKKyAgICBmb28oKTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2R1cGxpY2F0ZVRocm93cy9zaW1wbGUvZXhwZWN0ZWQueG1sIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZHVwbGljYXRlVGhyb3dzL3NpbXBsZS9leHBlY3RlZC54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYThlNmI5ZQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2R1cGxpY2F0ZVRocm93cy9zaW1wbGUvZXhwZWN0ZWQueG1sCkBAIC0wLDAgKzEsMzAgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8cHJvYmxlbXM+CisgIDxwcm9ibGVtPgorICAgIDxmaWxlPlguamF2YTwvZmlsZT4KKyAgICA8bGluZT41PC9saW5lPgorICAgIDxwcm9ibGVtX2NsYXNzPkR1cGxpY2F0ZSB0aHJvd3M8L3Byb2JsZW1fY2xhc3M+CisgICAgPGRlc2NyaXB0aW9uPkR1cGxpY2F0ZSB0aHJvd3M8L2Rlc2NyaXB0aW9uPgorICA8L3Byb2JsZW0+CisKKyAgPHByb2JsZW0+CisgICAgPGZpbGU+WC5qYXZhPC9maWxlPgorICAgIDxsaW5lPjEwPC9saW5lPgorICAgIDxwcm9ibGVtX2NsYXNzPkR1cGxpY2F0ZSB0aHJvd3M8L3Byb2JsZW1fY2xhc3M+CisgICAgPGRlc2NyaXB0aW9uPlRoZXJlIGlzIGEgbW9yZSBnZW5lcmFsIGV4Y2VwdGlvbiwgJ2phdmEubGFuZy5FeGNlcHRpb24nIGluIHRoZSB0aHJvd3MgbGlzdCBhbHJlYWR5LjwvZGVzY3JpcHRpb24+CisgIDwvcHJvYmxlbT4KKworICA8cHJvYmxlbT4KKyAgICA8ZmlsZT5YLmphdmE8L2ZpbGU+CisgICAgPGxpbmU+MTg8L2xpbmU+CisgICAgPHByb2JsZW1fY2xhc3Mgc2V2ZXJpdHk9IldBUk5JTkciIGF0dHJpYnV0ZV9rZXk9Ik5PVF9VU0VEX0VMRU1FTlRfQVRUUklCVVRFUyI+RHVwbGljYXRlIHRocm93czwvcHJvYmxlbV9jbGFzcz4KKyAgICA8ZGVzY3JpcHRpb24+RHVwbGljYXRlIHRocm93czwvZGVzY3JpcHRpb24+CisgIDwvcHJvYmxlbT4KKworICA8cHJvYmxlbT4KKyAgICA8ZmlsZT5YLmphdmE8L2ZpbGU+CisgICAgPGxpbmU+MTk8L2xpbmU+CisgICAgPHByb2JsZW1fY2xhc3Mgc2V2ZXJpdHk9IldBUk5JTkciIGF0dHJpYnV0ZV9rZXk9Ik5PVF9VU0VEX0VMRU1FTlRfQVRUUklCVVRFUyI+RHVwbGljYXRlIHRocm93czwvcHJvYmxlbV9jbGFzcz4KKyAgICA8ZGVzY3JpcHRpb24+RHVwbGljYXRlIHRocm93czwvZGVzY3JpcHRpb24+CisgIDwvcHJvYmxlbT4KKzwvcHJvYmxlbXM+CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kdXBsaWNhdGVUaHJvd3Mvc2ltcGxlL3NyYy9YLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9kdXBsaWNhdGVUaHJvd3Mvc2ltcGxlL3NyYy9YLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDA4MzMyMgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2R1cGxpY2F0ZVRocm93cy9zaW1wbGUvc3JjL1guamF2YQpAQCAtMCwwICsxLDI0IEBACitpbXBvcnQgamF2YS5pby4qOworCitwdWJsaWMgY2xhc3MgWCB7Cisgdm9pZCBmKCkgdGhyb3dzCisgICAgICAgICAgICBFeGNlcHRpb24sCisgICAgICAgICAgICBFeGNlcHRpb24geworIH0KKyB2b2lkIGYyKCkgdGhyb3dzCisgICAgICAgICAgICBFeGNlcHRpb24sCisgICAgICAgICAgICBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24geworIH0KKyB2b2lkIGYzKCkgdGhyb3dzCisgICAgICAgICAgICBGaWxlTm90Rm91bmRFeGNlcHRpb24sCisgICAgICAgICAgICBFT0ZFeGNlcHRpb24geworIH0KKworICAgICBwdWJsaWMgdm9pZCBUVFQoKSB0aHJvd3MKKyAgICAgRmlsZU5vdEZvdW5kRXhjZXB0aW9uLAorICAgICBFT0ZFeGNlcHRpb24sCisgICAgIEZpbGVOb3RGb3VuZEV4Y2VwdGlvbiwKKyAgICAgRU9GRXhjZXB0aW9uIHsKKyAgICAgfQorCit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZW1wdHlNZXRob2QvU0NSODMyMS9leHBlY3RlZC54bWwgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9lbXB0eU1ldGhvZC9TQ1I4MzIxL2V4cGVjdGVkLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOWEyZDQzCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZW1wdHlNZXRob2QvU0NSODMyMS9leHBlY3RlZC54bWwKQEAgLTAsMCArMSwxOSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxwcm9ibGVtcz4KKyAgPHByb2JsZW0+CisgICAgPGZpbGU+TXlMaXN0ZW5lci5qYXZhPC9maWxlPgorICAgIDxsaW5lPjI8L2xpbmU+CisgICAgPGRlc2NyaXB0aW9uPmVtcHR5PC9kZXNjcmlwdGlvbj4KKyAgPC9wcm9ibGVtPgorICA8cHJvYmxlbT4KKyAgICA8ZmlsZT5NeUxpc3RlbmVyLmphdmE8L2ZpbGU+CisgICAgPGxpbmU+NDwvbGluZT4KKyAgICA8ZGVzY3JpcHRpb24+ZW1wdHk8L2Rlc2NyaXB0aW9uPgorICA8L3Byb2JsZW0+CisgIDxwcm9ibGVtPgorICAgIDxmaWxlPk15QWRhcHRlclVzYWdlLmphdmE8L2ZpbGU+CisgICAgPGxpbmU+MjwvbGluZT4KKyAgICA8ZGVzY3JpcHRpb24+b25seSBjYWxscyBzdXBlcjwvZGVzY3JpcHRpb24+CisgIDwvcHJvYmxlbT4KKzwvcHJvYmxlbXM+CisKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2VtcHR5TWV0aG9kL1NDUjgzMjEvc3JjL015QWRhcHRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZW1wdHlNZXRob2QvU0NSODMyMS9zcmMvTXlBZGFwdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2JhMTAwMgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2VtcHR5TWV0aG9kL1NDUjgzMjEvc3JjL015QWRhcHRlci5qYXZhCkBAIC0wLDAgKzEsNSBAQAorcHVibGljIGNsYXNzIE15QWRhcHRlciBpbXBsZW1lbnRzIE15TGlzdGVuZXIgeworICBwdWJsaWMgdm9pZCBteUxpc3RlbjEoKSB7fQorICBwdWJsaWMgdm9pZCBteUxpc3RlbjIoKSB7fQorICBwdWJsaWMgdm9pZCBteUxpc3RlbjMoKSB7fQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZW1wdHlNZXRob2QvU0NSODMyMS9zcmMvTXlBZGFwdGVyVXNhZ2UuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2VtcHR5TWV0aG9kL1NDUjgzMjEvc3JjL015QWRhcHRlclVzYWdlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTNlNGVjNwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2VtcHR5TWV0aG9kL1NDUjgzMjEvc3JjL015QWRhcHRlclVzYWdlLmphdmEKQEAgLTAsMCArMSw4IEBACitwdWJsaWMgY2xhc3MgTXlBZGFwdGVyVXNhZ2UgZXh0ZW5kcyBNeUFkYXB0ZXIgeworICBwdWJsaWMgdm9pZCBteUxpc3RlbjEoKXsKKyAgICBzdXBlci5teUxpc3RlbjEoKTsKKyAgfQorICBwdWJsaWMgdm9pZCBteUxpc3RlbjIoKXsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oImNvZGUgaGVyZSIpOworICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9lbXB0eU1ldGhvZC9TQ1I4MzIxL3NyYy9NeUxpc3RlbmVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9lbXB0eU1ldGhvZC9TQ1I4MzIxL3NyYy9NeUxpc3RlbmVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWU0ZWM2MwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2VtcHR5TWV0aG9kL1NDUjgzMjEvc3JjL015TGlzdGVuZXIuamF2YQpAQCAtMCwwICsxLDUgQEAKK3B1YmxpYyBpbnRlcmZhY2UgTXlMaXN0ZW5lciB7CisgIHZvaWQgbXlMaXN0ZW4xKCk7CisgIHZvaWQgbXlMaXN0ZW4yKCk7CisgIHZvaWQgbXlMaXN0ZW4zKCk7Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9lbXB0eU1ldGhvZC9leHRlcm5hbE92ZXJyaWRlL2V4cGVjdGVkLnhtbCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2VtcHR5TWV0aG9kL2V4dGVybmFsT3ZlcnJpZGUvZXhwZWN0ZWQueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUxMWY3ODEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9lbXB0eU1ldGhvZC9leHRlcm5hbE92ZXJyaWRlL2V4cGVjdGVkLnhtbApAQCAtMCwwICsxLDE0IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHByb2JsZW1zPgorICA8cHJvYmxlbT4KKyAgICA8ZmlsZT5CYXNlLmphdmE8L2ZpbGU+CisgICAgPGxpbmU+MjwvbGluZT4KKyAgICA8ZGVzY3JpcHRpb24+ZW1wdHk8L2Rlc2NyaXB0aW9uPgorICA8L3Byb2JsZW0+CisgIDxwcm9ibGVtPgorICAgIDxmaWxlPkJhc2UuamF2YTwvZmlsZT4KKyAgICA8bGluZT40PC9saW5lPgorICAgIDxkZXNjcmlwdGlvbj5lbXB0eTwvZGVzY3JpcHRpb24+CisgIDwvcHJvYmxlbT4KKzwvcHJvYmxlbXM+CisKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2VtcHR5TWV0aG9kL2V4dGVybmFsT3ZlcnJpZGUvZXh0X3NyYy9EZXJpdmVkLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9lbXB0eU1ldGhvZC9leHRlcm5hbE92ZXJyaWRlL2V4dF9zcmMvRGVyaXZlZC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU5YjRkM2QKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9lbXB0eU1ldGhvZC9leHRlcm5hbE92ZXJyaWRlL2V4dF9zcmMvRGVyaXZlZC5qYXZhCkBAIC0wLDAgKzEsNSBAQAorcHVibGljIGNsYXNzIERlcml2ZWQgZXh0ZW5kcyBCYXNlIHsKKyAgcHVibGljIHZvaWQgZm9vKCkge30KKyAgcHVibGljIHZvaWQgYmFyKCkgeyBTeXN0ZW0ub3V0LnByaW50bG4oIkhlbGxvIik7IH0KKyAgcHVibGljIHZvaWQgZm9vYmFyKCkgeyBzdXBlci5mb29iYXIoKTsgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2VtcHR5TWV0aG9kL2V4dGVybmFsT3ZlcnJpZGUvc3JjL0Jhc2UuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2VtcHR5TWV0aG9kL2V4dGVybmFsT3ZlcnJpZGUvc3JjL0Jhc2UuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYTk1MGIxCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZW1wdHlNZXRob2QvZXh0ZXJuYWxPdmVycmlkZS9zcmMvQmFzZS5qYXZhCkBAIC0wLDAgKzEsNSBAQAorcHVibGljIGNsYXNzIEJhc2UgeworICAgcHVibGljIHZvaWQgZm9vKCkge30KKyAgIHB1YmxpYyB2b2lkIGJhcigpIHt9CisgICBwdWJsaWMgdm9pZCBmb29iYXIoKSB7fQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2VtcHR5TWV0aG9kL2luQW5vbnltb3VzL2V4cGVjdGVkLnhtbCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2VtcHR5TWV0aG9kL2luQW5vbnltb3VzL2V4cGVjdGVkLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMmM5ZDViCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZW1wdHlNZXRob2QvaW5Bbm9ueW1vdXMvZXhwZWN0ZWQueG1sCkBAIC0wLDAgKzEsMzIgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8cHJvYmxlbXM+CisgIDxwcm9ibGVtPgorICAgIDxmaWxlPlRlc3QuamF2YTwvZmlsZT4KKyAgICA8bGluZT42PC9saW5lPgorICAgIDxlbnRyeV9wb2ludCBUWVBFPSJtZXRob2QiIEZRTkFNRT0iVGVzdCQxIHZvaWQgYSgpIi8+CisgICAgPHByb2JsZW1fY2xhc3M+RW1wdHkgbWV0aG9kPC9wcm9ibGVtX2NsYXNzPgorICAgIDxkZXNjcmlwdGlvbj5UaGUgbWV0aG9kIGlzIGVtcHR5PC9kZXNjcmlwdGlvbj4KKyAgPC9wcm9ibGVtPgorICA8cHJvYmxlbT4KKyAgICA8ZmlsZT5UZXN0LmphdmE8L2ZpbGU+CisgICAgPGxpbmU+MTM8L2xpbmU+CisgICAgPGVudHJ5X3BvaW50IFRZUEU9Im1ldGhvZCIgRlFOQU1FPSJUZXN0JDVBJDEgdm9pZCBhYSgpIi8+CisgICAgPHByb2JsZW1fY2xhc3M+RW1wdHkgbWV0aG9kPC9wcm9ibGVtX2NsYXNzPgorICAgIDxkZXNjcmlwdGlvbj5UaGUgbWV0aG9kIGlzIGVtcHR5PC9kZXNjcmlwdGlvbj4KKyAgPC9wcm9ibGVtPgorICA8cHJvYmxlbT4KKyAgICA8ZmlsZT5UZXN0LmphdmE8L2ZpbGU+CisgICAgPGxpbmU+MjA8L2xpbmU+CisgICAgPGVudHJ5X3BvaW50IFRZUEU9Im1ldGhvZCIgRlFOQU1FPSJUZXN0JDVBJDNBMSQxIHZvaWQgYWExKCkiLz4KKyAgICA8cHJvYmxlbV9jbGFzcz5FbXB0eSBtZXRob2Q8L3Byb2JsZW1fY2xhc3M+CisgICAgPGRlc2NyaXB0aW9uPlRoZSBtZXRob2QgaXMgZW1wdHk8L2Rlc2NyaXB0aW9uPgorICA8L3Byb2JsZW0+CisgIDxwcm9ibGVtPgorICAgIDxmaWxlPlRlc3QuamF2YTwvZmlsZT4KKyAgICA8bGluZT4zMjwvbGluZT4KKyAgICA8ZW50cnlfcG9pbnQgVFlQRT0ibWV0aG9kIiBGUU5BTUU9IlRlc3QuQiQxIHZvaWQgYmIoKSIvPgorICAgIDxwcm9ibGVtX2NsYXNzPkVtcHR5IG1ldGhvZDwvcHJvYmxlbV9jbGFzcz4KKyAgICA8ZGVzY3JpcHRpb24+VGhlIG1ldGhvZCBpcyBlbXB0eTwvZGVzY3JpcHRpb24+CisgIDwvcHJvYmxlbT4KKzwvcHJvYmxlbXM+CisKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2VtcHR5TWV0aG9kL2luQW5vbnltb3VzL3NyYy9UZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9lbXB0eU1ldGhvZC9pbkFub255bW91cy9zcmMvVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYyMmJiZTAKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9lbXB0eU1ldGhvZC9pbkFub255bW91cy9zcmMvVGVzdC5qYXZhCkBAIC0wLDAgKzEsMzYgQEAKK3B1YmxpYyBjbGFzcyBUZXN0IHsKKyAgcHVibGljIHZvaWQgZm9vKCkgeworICAgIFJ1bm5hYmxlIHIgPSBuZXcgUnVubmFibGUoKSB7CisgICAgICBwdWJsaWMgdm9pZCBydW4oKXsKKyAgICAgIH0KKyAgICAgIHByaXZhdGUgdm9pZCBhKCl7fQorICAgIH0KKyAgICBjbGFzcyBBIHsKKyAgICAgIHZvaWQgYSgpeworICAgICAgICBSdW5uYWJsZSBhID0gbmV3IFJ1bm5hYmxlKCkgeworICAgICAgICAgIHB1YmxpYyB2b2lkIHJ1bigpeworICAgICAgICAgIH0KKyAgICAgICAgICBwcml2YXRlIHZvaWQgYWEoKXt9CisgICAgICAgIH0KKyAgICAgICAgY2xhc3MgQTEgeworICAgICAgICAgIHZvaWQgYTEoKXsKKyAgICAgICAgICAgIFJ1bm5hYmxlIGExID0gbmV3IFJ1bm5hYmxlKCkgeworICAgICAgICAgICAgICBwdWJsaWMgdm9pZCBydW4oKXsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICBwcml2YXRlIHZvaWQgYWExKCl7fQorICAgICAgICAgICAgfQorICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKyAgfQorICBjbGFzcyBCIHsKKyAgICB2b2lkIGIoKSB7CisgICAgICBSdW5uYWJsZSBiID0gbmV3IFJ1bm5hYmxlKCkgeworICAgICAgICBwdWJsaWMgdm9pZCBydW4oKXsKKyAgICAgICAgfQorICAgICAgICBwcml2YXRlIHZvaWQgYmIoKXt9CisgICAgICB9CisgICAgfQorICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZW1wdHlNZXRob2Qvc3VwZXJDYWxsL2V4cGVjdGVkLnhtbCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2VtcHR5TWV0aG9kL3N1cGVyQ2FsbC9leHBlY3RlZC54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDc5NjgyNAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2VtcHR5TWV0aG9kL3N1cGVyQ2FsbC9leHBlY3RlZC54bWwKQEAgLTAsMCArMSw5IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHByb2JsZW1zPgorICA8cHJvYmxlbT4KKyAgICA8ZmlsZT5CYXNlLmphdmE8L2ZpbGU+CisgICAgPGxpbmU+MjwvbGluZT4KKyAgICA8ZGVzY3JpcHRpb24+ZW1wdHk8L2Rlc2NyaXB0aW9uPgorICA8L3Byb2JsZW0+Cis8L3Byb2JsZW1zPgorCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9lbXB0eU1ldGhvZC9zdXBlckNhbGwvc3JjL0Jhc2UuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2VtcHR5TWV0aG9kL3N1cGVyQ2FsbC9zcmMvQmFzZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM4Mzk2YzUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9lbXB0eU1ldGhvZC9zdXBlckNhbGwvc3JjL0Jhc2UuamF2YQpAQCAtMCwwICsxLDMgQEAKK3B1YmxpYyBjbGFzcyBCYXNlIHsKKyAgcHVibGljIHZvaWQgZm9vKCkge30KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9lbXB0eU1ldGhvZC9zdXBlckNhbGwvc3JjL0Rlcml2ZWQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2VtcHR5TWV0aG9kL3N1cGVyQ2FsbC9zcmMvRGVyaXZlZC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUwNmExNzUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9lbXB0eU1ldGhvZC9zdXBlckNhbGwvc3JjL0Rlcml2ZWQuamF2YQpAQCAtMCwwICsxLDUgQEAKK3B1YmxpYyBjbGFzcyBEZXJpdmVkIGV4dGVuZHMgQmFzZSB7CisgIHB1YmxpYyB2b2lkIGZvbygpIHsKKyAgICAgc3VwZXIuZm9vKCk7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9lbXB0eU1ldGhvZC9zdXBlckNhbGxCeVJhbmdlL2V4cGVjdGVkLnhtbCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2VtcHR5TWV0aG9kL3N1cGVyQ2FsbEJ5UmFuZ2UvZXhwZWN0ZWQueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJmMmE2YjEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9lbXB0eU1ldGhvZC9zdXBlckNhbGxCeVJhbmdlL2V4cGVjdGVkLnhtbApAQCAtMCwwICsxLDEwIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHByb2JsZW1zPgorICA8cHJvYmxlbT4KKyAgICA8ZmlsZT5CYXNlLmphdmE8L2ZpbGU+CisgICAgPGxpbmU+MjwvbGluZT4KKyAgICA8ZGVzY3JpcHRpb24+ZW1wdHk8L2Rlc2NyaXB0aW9uPgorICAgIDxlbnRyeV9wb2ludCBUWVBFPSJtZXRob2QiIEZRTkFNRT0iQmFzZSB2b2lkIGZvbygpIiAvPgorICA8L3Byb2JsZW0+Cis8L3Byb2JsZW1zPgorCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9lbXB0eU1ldGhvZC9zdXBlckNhbGxCeVJhbmdlL3NyYy9CYXNlLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9lbXB0eU1ldGhvZC9zdXBlckNhbGxCeVJhbmdlL3NyYy9CYXNlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzgzOTZjNQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2VtcHR5TWV0aG9kL3N1cGVyQ2FsbEJ5UmFuZ2Uvc3JjL0Jhc2UuamF2YQpAQCAtMCwwICsxLDMgQEAKK3B1YmxpYyBjbGFzcyBCYXNlIHsKKyAgcHVibGljIHZvaWQgZm9vKCkge30KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9lbXB0eU1ldGhvZC9zdXBlckNhbGxCeVJhbmdlL3NyYy9EZXJpdmVkLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9lbXB0eU1ldGhvZC9zdXBlckNhbGxCeVJhbmdlL3NyYy9EZXJpdmVkLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTA2YTE3NQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2VtcHR5TWV0aG9kL3N1cGVyQ2FsbEJ5UmFuZ2Uvc3JjL0Rlcml2ZWQuamF2YQpAQCAtMCwwICsxLDUgQEAKK3B1YmxpYyBjbGFzcyBEZXJpdmVkIGV4dGVuZHMgQmFzZSB7CisgIHB1YmxpYyB2b2lkIGZvbygpIHsKKyAgICAgc3VwZXIuZm9vKCk7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9lbXB0eU1ldGhvZC9zdXBlckZyb21Bbm90aGVyUGFja2FnZUNhbGwvZXhwZWN0ZWQueG1sIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZW1wdHlNZXRob2Qvc3VwZXJGcm9tQW5vdGhlclBhY2thZ2VDYWxsL2V4cGVjdGVkLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNjNjOTI1Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZW1wdHlNZXRob2Qvc3VwZXJGcm9tQW5vdGhlclBhY2thZ2VDYWxsL2V4cGVjdGVkLnhtbApAQCAtMCwwICsxLDIgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8cHJvYmxlbXMvPgpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZW1wdHlNZXRob2Qvc3VwZXJGcm9tQW5vdGhlclBhY2thZ2VDYWxsL3NyYy9wMS9CYXNlLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9lbXB0eU1ldGhvZC9zdXBlckZyb21Bbm90aGVyUGFja2FnZUNhbGwvc3JjL3AxL0Jhc2UuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NDExZWEwCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZW1wdHlNZXRob2Qvc3VwZXJGcm9tQW5vdGhlclBhY2thZ2VDYWxsL3NyYy9wMS9CYXNlLmphdmEKQEAgLTAsMCArMSw0IEBACitwYWNrYWdlIHAxOworcHVibGljIGNsYXNzIEJhc2UgeworICBwcm90ZWN0ZWQgdm9pZCBmb28oKSB7U3lzdGVtLm91dC5wcmludGxuKCIiKTt9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZW1wdHlNZXRob2Qvc3VwZXJGcm9tQW5vdGhlclBhY2thZ2VDYWxsL3NyYy9wMi9EZXJpdmVkLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9lbXB0eU1ldGhvZC9zdXBlckZyb21Bbm90aGVyUGFja2FnZUNhbGwvc3JjL3AyL0Rlcml2ZWQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZjIwNDRiCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZW1wdHlNZXRob2Qvc3VwZXJGcm9tQW5vdGhlclBhY2thZ2VDYWxsL3NyYy9wMi9EZXJpdmVkLmphdmEKQEAgLTAsMCArMSw3IEBACitwYWNrYWdlIHAyOworaW1wb3J0IHAxOworcHVibGljIGNsYXNzIERlcml2ZWQgZXh0ZW5kcyBCYXNlIHsKKyAgcHJvdGVjdGVkIHZvaWQgZm9vKCkgeworICAgICBzdXBlci5mb28oKTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2VtcHR5TWV0aG9kL3N1cGVyV2l0aG91dFN5bmMvZXhwZWN0ZWQueG1sIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZW1wdHlNZXRob2Qvc3VwZXJXaXRob3V0U3luYy9leHBlY3RlZC54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzYzYzkyNQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2VtcHR5TWV0aG9kL3N1cGVyV2l0aG91dFN5bmMvZXhwZWN0ZWQueG1sCkBAIC0wLDAgKzEsMiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxwcm9ibGVtcy8+CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9lbXB0eU1ldGhvZC9zdXBlcldpdGhvdXRTeW5jL3NyYy9wMS9CYXNlLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9lbXB0eU1ldGhvZC9zdXBlcldpdGhvdXRTeW5jL3NyYy9wMS9CYXNlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDcyY2JlOAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2VtcHR5TWV0aG9kL3N1cGVyV2l0aG91dFN5bmMvc3JjL3AxL0Jhc2UuamF2YQpAQCAtMCwwICsxLDQgQEAKK3BhY2thZ2UgcDE7CitwdWJsaWMgY2xhc3MgQmFzZSB7CisgIHB1YmxpYyB2b2lkIGZvbygpIHtTeXN0ZW0ub3V0LnByaW50bG4oIiIpO30KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9lbXB0eU1ldGhvZC9zdXBlcldpdGhvdXRTeW5jL3NyYy9wMi9EZXJpdmVkLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9lbXB0eU1ldGhvZC9zdXBlcldpdGhvdXRTeW5jL3NyYy9wMi9EZXJpdmVkLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmVhMDYxMgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2VtcHR5TWV0aG9kL3N1cGVyV2l0aG91dFN5bmMvc3JjL3AyL0Rlcml2ZWQuamF2YQpAQCAtMCwwICsxLDcgQEAKK3BhY2thZ2UgcDI7CitpbXBvcnQgcDE7CitwdWJsaWMgY2xhc3MgRGVyaXZlZCBleHRlbmRzIHAxLkJhc2UgeworICBwdWJsaWMgc3luY2hyb25pemVkIHZvaWQgZm9vKCkgeworICAgICBzdXBlci5mb28oKTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2VxdWFsc0FuZEhhc2hjb2RlL2hpZXJhcmNoeS9leHBlY3RlZC54bWwgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9lcXVhbHNBbmRIYXNoY29kZS9oaWVyYXJjaHkvZXhwZWN0ZWQueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ5NWUxYzYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9lcXVhbHNBbmRIYXNoY29kZS9oaWVyYXJjaHkvZXhwZWN0ZWQueG1sCkBAIC0wLDAgKzEsMTMgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8cHJvYmxlbXM+CisgIDxwcm9ibGVtPgorICAgIDxmaWxlPkEuamF2YTwvZmlsZT4KKyAgICA8bGluZT4xPC9saW5lPgorICAgIDxkZXNjcmlwdGlvbj5DbGFzcyBoYXMgJmx0O2NvZGUmZ3Q7ZXF1YWxzKCkmbHQ7L2NvZGUmZ3Q7IGRlZmluZWQgYnV0IGRvZXMgbm90IGRlZmluZSAmbHQ7Y29kZSZndDtoYXNoQ29kZSgpJmx0Oy9jb2RlJmd0Oy48L2Rlc2NyaXB0aW9uPgorICA8L3Byb2JsZW0+CisgIDxwcm9ibGVtPgorICAgIDxmaWxlPkIuamF2YTwvZmlsZT4KKyAgICA8bGluZT4xPC9saW5lPgorICAgIDxkZXNjcmlwdGlvbj5DbGFzcyBoYXMgJmx0O2NvZGUmZ3Q7aGFzaENvZGUoKSZsdDsvY29kZSZndDsgZGVmaW5lZCBidXQgZG9lcyBub3QgZGVmaW5lICZsdDtjb2RlJmd0O2VxdWFscygpJmx0Oy9jb2RlJmd0Oy48L2Rlc2NyaXB0aW9uPgorICA8L3Byb2JsZW0+Cis8L3Byb2JsZW1zPgpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZXF1YWxzQW5kSGFzaGNvZGUvaGllcmFyY2h5L3NyYy9BLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9lcXVhbHNBbmRIYXNoY29kZS9oaWVyYXJjaHkvc3JjL0EuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YmM1MzdiCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZXF1YWxzQW5kSGFzaGNvZGUvaGllcmFyY2h5L3NyYy9BLmphdmEKQEAgLTAsMCArMSw1IEBACitjbGFzcyBBIHsKKyAgICBwdWJsaWMgYm9vbGVhbiBlcXVhbHMoZmluYWwgT2JqZWN0IG8pIHsKKyAgICAgIHJldHVybiB0aGlzID09IG87CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2VxdWFsc0FuZEhhc2hjb2RlL2hpZXJhcmNoeS9zcmMvQi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZXF1YWxzQW5kSGFzaGNvZGUvaGllcmFyY2h5L3NyYy9CLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTFhZDNjNAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2VxdWFsc0FuZEhhc2hjb2RlL2hpZXJhcmNoeS9zcmMvQi5qYXZhCkBAIC0wLDAgKzEsNSBAQAorY2xhc3MgQiBleHRlbmRzIEEgeworICBwdWJsaWMgaW50IGhhc2hDb2RlKCkgeworICAgIHJldHVybiAzMTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2VxdWFsc0FuZEhhc2hjb2RlL2lubmVyQ2xhc3MvZXhwZWN0ZWQueG1sIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZXF1YWxzQW5kSGFzaGNvZGUvaW5uZXJDbGFzcy9leHBlY3RlZC54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTc4ZjExNgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2VxdWFsc0FuZEhhc2hjb2RlL2lubmVyQ2xhc3MvZXhwZWN0ZWQueG1sCkBAIC0wLDAgKzEsOCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxwcm9ibGVtcz4KKyAgPHByb2JsZW0+CisgICAgPGZpbGU+VGVzdC5qYXZhPC9maWxlPgorICAgIDxsaW5lPjI8L2xpbmU+CisgICAgPGRlc2NyaXB0aW9uPkNsYXNzIGhhcyAmbHQ7Y29kZSZndDtlcXVhbHMoKSZsdDsvY29kZSZndDsgZGVmaW5lZCBidXQgZG9lcyBub3QgZGVmaW5lICZsdDtjb2RlJmd0O2hhc2hDb2RlKCkmbHQ7L2NvZGUmZ3Q7LjwvZGVzY3JpcHRpb24+CisgIDwvcHJvYmxlbT4KKzwvcHJvYmxlbXM+CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9lcXVhbHNBbmRIYXNoY29kZS9pbm5lckNsYXNzL3NyYy9UZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9lcXVhbHNBbmRIYXNoY29kZS9pbm5lckNsYXNzL3NyYy9UZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGRlMGRkZgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2VxdWFsc0FuZEhhc2hjb2RlL2lubmVyQ2xhc3Mvc3JjL1Rlc3QuamF2YQpAQCAtMCwwICsxLDcgQEAKK2NsYXNzIFRlc3QgeworICBjbGFzcyBJbm5lciB7CisgICAgcHVibGljIGJvb2xlYW4gZXF1YWxzKGZpbmFsIE9iamVjdCBvKSB7CisgICAgICByZXR1cm4gdGhpcyA9PSBvOworICAgIH0KKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZmllbGRDYW5CZUxvY2FsL2NvbnN0cnVjdG9yL2V4cGVjdGVkLnhtbCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2ZpZWxkQ2FuQmVMb2NhbC9jb25zdHJ1Y3Rvci9leHBlY3RlZC54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTg3ODNkMwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2ZpZWxkQ2FuQmVMb2NhbC9jb25zdHJ1Y3Rvci9leHBlY3RlZC54bWwKQEAgLTAsMCArMSw4IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHByb2JsZW1zPgorICA8cHJvYmxlbT4KKyAgICA8ZmlsZT5UZXN0LmphdmE8L2ZpbGU+CisgICAgPGxpbmU+MjwvbGluZT4KKyAgICA8ZGVzY3JpcHRpb24+RmllbGQgY2FuIGJlIGNvbnZlcnRlZCB0byBhIHZhcmlhYmxlPC9kZXNjcmlwdGlvbj4KKyAgPC9wcm9ibGVtPgorPC9wcm9ibGVtcz4KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2ZpZWxkQ2FuQmVMb2NhbC9jb25zdHJ1Y3Rvci9zcmMvVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZmllbGRDYW5CZUxvY2FsL2NvbnN0cnVjdG9yL3NyYy9UZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzUxYzU3OQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2ZpZWxkQ2FuQmVMb2NhbC9jb25zdHJ1Y3Rvci9zcmMvVGVzdC5qYXZhCkBAIC0wLDAgKzEsMTUgQEAKK2NsYXNzIFRlbXAgeworICAgIHByaXZhdGUgaW50IGxlbmd0aCA9IDEwOworICAgIHByaXZhdGUgaW50W10gYXJyYXk7CisKKyAgICBwdWJsaWMgVGVtcCgpCisgICAgeworICAgICAgICBhcnJheSA9IG5ldyBpbnRbbGVuZ3RoXTsKKyAgICB9CisKKworICAgIHB1YmxpYyBpbnRbXSBnZXRBcnJheSgpCisgICAgeworICAgICAgICByZXR1cm4gYXJyYXk7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2ZpZWxkQ2FuQmVMb2NhbC9maWVsZFVzZWRGb3JXcml0aW5nSW5MYW1iZGEvZXhwZWN0ZWQueG1sIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZmllbGRDYW5CZUxvY2FsL2ZpZWxkVXNlZEZvcldyaXRpbmdJbkxhbWJkYS9leHBlY3RlZC54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTgwYTg4OQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2ZpZWxkQ2FuQmVMb2NhbC9maWVsZFVzZWRGb3JXcml0aW5nSW5MYW1iZGEvZXhwZWN0ZWQueG1sCkBAIC0wLDAgKzEsMyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxwcm9ibGVtcz4KKzwvcHJvYmxlbXM+CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9maWVsZENhbkJlTG9jYWwvZmllbGRVc2VkRm9yV3JpdGluZ0luTGFtYmRhL3NyYy9UZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9maWVsZENhbkJlTG9jYWwvZmllbGRVc2VkRm9yV3JpdGluZ0luTGFtYmRhL3NyYy9UZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzA0Njc0NwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2ZpZWxkQ2FuQmVMb2NhbC9maWVsZFVzZWRGb3JXcml0aW5nSW5MYW1iZGEvc3JjL1Rlc3QuamF2YQpAQCAtMCwwICsxLDEzIEBACitjbGFzcyBUZXN0IHsKKyAgICBwcml2YXRlIGludCBmOworCisgICAgdm9pZCBmb28gKCkgeworICAgICAgICBmID0gMDsKKyAgICAgICAgaW50IGsgPSBmOworICAgIH0KKworICAgIGludCBiYXIgKCkgeworICAgICAgICBmID0gNTsKKyAgICAgICAgcmV0dXJuIGY7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZmllbGRDYW5CZUxvY2FsL2ZpZWxkVXNlZEluQ29uc3RhbnRJbml0aWFsaXphdGlvbi9leHBlY3RlZC54bWwgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9maWVsZENhbkJlTG9jYWwvZmllbGRVc2VkSW5Db25zdGFudEluaXRpYWxpemF0aW9uL2V4cGVjdGVkLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ODBhODg5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZmllbGRDYW5CZUxvY2FsL2ZpZWxkVXNlZEluQ29uc3RhbnRJbml0aWFsaXphdGlvbi9leHBlY3RlZC54bWwKQEAgLTAsMCArMSwzIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHByb2JsZW1zPgorPC9wcm9ibGVtcz4KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2ZpZWxkQ2FuQmVMb2NhbC9maWVsZFVzZWRJbkNvbnN0YW50SW5pdGlhbGl6YXRpb24vc3JjL1Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2ZpZWxkQ2FuQmVMb2NhbC9maWVsZFVzZWRJbkNvbnN0YW50SW5pdGlhbGl6YXRpb24vc3JjL1Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YWRjMzE4Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZmllbGRDYW5CZUxvY2FsL2ZpZWxkVXNlZEluQ29uc3RhbnRJbml0aWFsaXphdGlvbi9zcmMvVGVzdC5qYXZhCkBAIC0wLDAgKzEsOSBAQAorY2xhc3MgVGVzdCB7CisgICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIE9iamVjdCBGT08gPSBuZXcgVGVzdCgpLmZvbzsKKyAgCisgICAgICBwcml2YXRlIGZpbmFsIFN0cmluZyBmb287CisgIAorICAgICAgcHJpdmF0ZSBUZXN0KCkgeworICAgICAgICAgIGZvbyA9ICJzb21lIHRleHQiOworICAgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZmllbGRDYW5CZUxvY2FsL2ZpZWxkV2l0aEltbXV0YWJsZVR5cGUvZXhwZWN0ZWQueG1sIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZmllbGRDYW5CZUxvY2FsL2ZpZWxkV2l0aEltbXV0YWJsZVR5cGUvZXhwZWN0ZWQueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE1MmIwYTEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9maWVsZENhbkJlTG9jYWwvZmllbGRXaXRoSW1tdXRhYmxlVHlwZS9leHBlY3RlZC54bWwKQEAgLTAsMCArMSw4IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHByb2JsZW1zPgorICA8cHJvYmxlbT4KKyAgICA8ZmlsZT5UZXN0LmphdmE8L2ZpbGU+CisgICAgPGxpbmU+MjwvbGluZT4KKyAgICA8ZGVzY3JpcHRpb24+RmllbGQgY2FuIGJlIGNvbnZlcnRlZCB0byBhIGxvY2FsIHZhcmlhYmxlPC9kZXNjcmlwdGlvbj4KKyAgPC9wcm9ibGVtPgorPC9wcm9ibGVtcz4KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2ZpZWxkQ2FuQmVMb2NhbC9maWVsZFdpdGhJbW11dGFibGVUeXBlL3NyYy9UZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9maWVsZENhbkJlTG9jYWwvZmllbGRXaXRoSW1tdXRhYmxlVHlwZS9zcmMvVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA4NDg4YmEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9maWVsZENhbkJlTG9jYWwvZmllbGRXaXRoSW1tdXRhYmxlVHlwZS9zcmMvVGVzdC5qYXZhCkBAIC0wLDAgKzEsOCBAQAorY2xhc3MgVGVzdCB7CisgICAgcHJpdmF0ZSBTdHJpbmcgZiA9ICIiOworCisgICAgdm9pZCBmb28gKCkgeworICAgICAgZi5zdWJzdHJpbmcoMCk7CisgICAgfQorCit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9maWVsZENhbkJlTG9jYWwvaWdub3JlQW5ub3RhdGVkL2V4cGVjdGVkLnhtbCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2ZpZWxkQ2FuQmVMb2NhbC9pZ25vcmVBbm5vdGF0ZWQvZXhwZWN0ZWQueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU4MGE4ODkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9maWVsZENhbkJlTG9jYWwvaWdub3JlQW5ub3RhdGVkL2V4cGVjdGVkLnhtbApAQCAtMCwwICsxLDMgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8cHJvYmxlbXM+Cis8L3Byb2JsZW1zPgpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZmllbGRDYW5CZUxvY2FsL2lnbm9yZUFubm90YXRlZC9zcmMvVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZmllbGRDYW5CZUxvY2FsL2lnbm9yZUFubm90YXRlZC9zcmMvVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZjYTcyOGYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9maWVsZENhbkJlTG9jYWwvaWdub3JlQW5ub3RhdGVkL3NyYy9UZXN0LmphdmEKQEAgLTAsMCArMSw5IEBACitjbGFzcyBUZXN0IHsKKyAgICBARGVwcmVjYXRlZAorICAgIHByaXZhdGUgaW50IGY7CisKKyAgICB2b2lkIGZvbyAoKSB7CisgICAgICAgIGYgPSAwOworICAgICAgICBpbnQgayA9IGY7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZmllbGRDYW5CZUxvY2FsL2lubmVyQ2xhc3NDb25zdHJ1Y3Rvci9leHBlY3RlZC54bWwgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9maWVsZENhbkJlTG9jYWwvaW5uZXJDbGFzc0NvbnN0cnVjdG9yL2V4cGVjdGVkLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NzA0ZDkxCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZmllbGRDYW5CZUxvY2FsL2lubmVyQ2xhc3NDb25zdHJ1Y3Rvci9leHBlY3RlZC54bWwKQEAgLTAsMCArMSwyIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHByb2JsZW1zLz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9maWVsZENhbkJlTG9jYWwvaW5uZXJDbGFzc0NvbnN0cnVjdG9yL3NyYy9UZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9maWVsZENhbkJlTG9jYWwvaW5uZXJDbGFzc0NvbnN0cnVjdG9yL3NyYy9UZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTZkNGI5YwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2ZpZWxkQ2FuQmVMb2NhbC9pbm5lckNsYXNzQ29uc3RydWN0b3Ivc3JjL1Rlc3QuamF2YQpAQCAtMCwwICsxLDExIEBACitwdWJsaWMgY2xhc3MgT3V0ZXIgeworICBwcml2YXRlIGludCB2YWx1ZSA9IDA7CisKKyAgcHVibGljIGNsYXNzIElubmVyIHsKKyAgICBwcml2YXRlIGZpbmFsIGludCBteVZhbHVlOworCisgICAgcHVibGljIElubmVyKCkgeworICAgICAgbXlWYWx1ZSA9IHZhbHVlKys7CisgICAgfQorICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZmllbGRDYW5CZUxvY2FsL2lubmVyQ2xhc3NGaWVsZEluaXRpYWxpemVyL2V4cGVjdGVkLnhtbCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2ZpZWxkQ2FuQmVMb2NhbC9pbm5lckNsYXNzRmllbGRJbml0aWFsaXplci9leHBlY3RlZC54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDcwNGQ5MQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2ZpZWxkQ2FuQmVMb2NhbC9pbm5lckNsYXNzRmllbGRJbml0aWFsaXplci9leHBlY3RlZC54bWwKQEAgLTAsMCArMSwyIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHByb2JsZW1zLz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9maWVsZENhbkJlTG9jYWwvaW5uZXJDbGFzc0ZpZWxkSW5pdGlhbGl6ZXIvc3JjL1Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2ZpZWxkQ2FuQmVMb2NhbC9pbm5lckNsYXNzRmllbGRJbml0aWFsaXplci9zcmMvVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAxOGY2NDkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9maWVsZENhbkJlTG9jYWwvaW5uZXJDbGFzc0ZpZWxkSW5pdGlhbGl6ZXIvc3JjL1Rlc3QuamF2YQpAQCAtMCwwICsxLDcgQEAKK3B1YmxpYyBjbGFzcyBPdXRlciB7CisgIHByaXZhdGUgaW50IHZhbHVlID0gMDsKKworICBwdWJsaWMgY2xhc3MgSW5uZXIgeworICAgIHByaXZhdGUgZmluYWwgaW50IG15VmFsdWUgPSBPdXRlci50aGlzLnZhbHVlOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZmllbGRDYW5CZUxvY2FsL2xvY2FsU3RhdGVWYXIySW5uZXJDbGFzcy9leHBlY3RlZC54bWwgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9maWVsZENhbkJlTG9jYWwvbG9jYWxTdGF0ZVZhcjJJbm5lckNsYXNzL2V4cGVjdGVkLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NzA0ZDkxCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZmllbGRDYW5CZUxvY2FsL2xvY2FsU3RhdGVWYXIySW5uZXJDbGFzcy9leHBlY3RlZC54bWwKQEAgLTAsMCArMSwyIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHByb2JsZW1zLz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9maWVsZENhbkJlTG9jYWwvbG9jYWxTdGF0ZVZhcjJJbm5lckNsYXNzL3NyYy9UZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9maWVsZENhbkJlTG9jYWwvbG9jYWxTdGF0ZVZhcjJJbm5lckNsYXNzL3NyYy9UZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTU1YTRkMQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2ZpZWxkQ2FuQmVMb2NhbC9sb2NhbFN0YXRlVmFyMklubmVyQ2xhc3Mvc3JjL1Rlc3QuamF2YQpAQCAtMCwwICsxLDExIEBACitpbXBvcnQgamF2YS51dGlsLio7CitwdWJsaWMgY2xhc3MgT3V0ZXIgeworICBwcml2YXRlIE1hcDxTdHJpbmcsIFN0cmluZz4gdmFsdWUgPSBuZXcgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4oKTsKKworICBwdWJsaWMgY2xhc3MgSW5uZXIgeworCisgICAgcHVibGljIElubmVyKFN0cmluZyBzKSB7CisgICAgICBpZiAoIXZhbHVlLmNvbnRhaW5zS2V5KHMpKSB2YWx1ZS5wdXQocywgIiIpOworICAgIH0KKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2ZpZWxkQ2FuQmVMb2NhbC9sb2NhbFZhcjJJbm5lckNsYXNzL2V4cGVjdGVkLnhtbCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2ZpZWxkQ2FuQmVMb2NhbC9sb2NhbFZhcjJJbm5lckNsYXNzL2V4cGVjdGVkLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMDY2ZjNkCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZmllbGRDYW5CZUxvY2FsL2xvY2FsVmFyMklubmVyQ2xhc3MvZXhwZWN0ZWQueG1sCkBAIC0wLDAgKzEsOSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxwcm9ibGVtcz4KKyAgPHByb2JsZW0+CisgICAgPGZpbGU+VGVzdC5qYXZhPC9maWxlPgorICAgIDxsaW5lPjI8L2xpbmU+CisgICAgPHByb2JsZW1fY2xhc3Mgc2V2ZXJpdHk9IldBUk5JTkciIGF0dHJpYnV0ZV9rZXk9IldBUk5JTkdfQVRUUklCVVRFUyI+RmllbGQgY2FuIGJlIGxvY2FsPC9wcm9ibGVtX2NsYXNzPgorICAgIDxkZXNjcmlwdGlvbj5GaWVsZCBjYW4gYmUgY29udmVydGVkIHRvIGEgbG9jYWwgdmFyaWFibGU8L2Rlc2NyaXB0aW9uPgorICA8L3Byb2JsZW0+Cis8L3Byb2JsZW1zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2ZpZWxkQ2FuQmVMb2NhbC9sb2NhbFZhcjJJbm5lckNsYXNzL3NyYy9UZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9maWVsZENhbkJlTG9jYWwvbG9jYWxWYXIySW5uZXJDbGFzcy9zcmMvVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ3YjM4ZTAKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9maWVsZENhbkJlTG9jYWwvbG9jYWxWYXIySW5uZXJDbGFzcy9zcmMvVGVzdC5qYXZhCkBAIC0wLDAgKzEsMTEgQEAKK3B1YmxpYyBjbGFzcyBPdXRlciB7CisgIHByaXZhdGUgaW50IHZhbHVlID0gMDsKKworICBwdWJsaWMgY2xhc3MgSW5uZXIgeworICAgIHByaXZhdGUgZmluYWwgaW50IG15VmFsdWU7CisKKyAgICBwdWJsaWMgSW5uZXIoKSB7CisgICAgICBteVZhbHVlID0gdmFsdWU7CisgICAgfQorICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZmllbGRDYW5CZUxvY2FsL25vdENvbnN0YW50SW5pdGlhbGl6ZXIvZXhwZWN0ZWQueG1sIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZmllbGRDYW5CZUxvY2FsL25vdENvbnN0YW50SW5pdGlhbGl6ZXIvZXhwZWN0ZWQueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ3MDRkOTEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9maWVsZENhbkJlTG9jYWwvbm90Q29uc3RhbnRJbml0aWFsaXplci9leHBlY3RlZC54bWwKQEAgLTAsMCArMSwyIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHByb2JsZW1zLz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9maWVsZENhbkJlTG9jYWwvbm90Q29uc3RhbnRJbml0aWFsaXplci9zcmMvVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZmllbGRDYW5CZUxvY2FsL25vdENvbnN0YW50SW5pdGlhbGl6ZXIvc3JjL1Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYmJiNmQyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZmllbGRDYW5CZUxvY2FsL25vdENvbnN0YW50SW5pdGlhbGl6ZXIvc3JjL1Rlc3QuamF2YQpAQCAtMCwwICsxLDE2IEBACitpbXBvcnQgamF2YS51dGlsLio7CisKK3B1YmxpYyBjbGFzcyBPdXRlciB7CisgIHByaXZhdGUgZmluYWwgaW50IHZhbHVlID0gY2FsY1ZhbHVlKCk7CisKKyAgaW50IG15VmFsdWU7CisgIFNldCBzZXQgPSBuZXcgSGFzaFNldCgpOworCisgIGludCBjYWxjVmFsdWUoKSB7CisgICAgcmV0dXJuIHNldC5zaXplKCk7CisgIH0KKworICB2b2lkIGluaXRNeVZhbHVlKCkgeworICAgIG15VmFsdWUgPSB2YWx1ZTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2ZpZWxkQ2FuQmVMb2NhbC9zaW1wbGUvZXhwZWN0ZWQueG1sIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZmllbGRDYW5CZUxvY2FsL3NpbXBsZS9leHBlY3RlZC54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTg3ODNkMwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2ZpZWxkQ2FuQmVMb2NhbC9zaW1wbGUvZXhwZWN0ZWQueG1sCkBAIC0wLDAgKzEsOCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxwcm9ibGVtcz4KKyAgPHByb2JsZW0+CisgICAgPGZpbGU+VGVzdC5qYXZhPC9maWxlPgorICAgIDxsaW5lPjI8L2xpbmU+CisgICAgPGRlc2NyaXB0aW9uPkZpZWxkIGNhbiBiZSBjb252ZXJ0ZWQgdG8gYSB2YXJpYWJsZTwvZGVzY3JpcHRpb24+CisgIDwvcHJvYmxlbT4KKzwvcHJvYmxlbXM+CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9maWVsZENhbkJlTG9jYWwvc2ltcGxlL3NyYy9UZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9maWVsZENhbkJlTG9jYWwvc2ltcGxlL3NyYy9UZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODMzZGU5NwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2ZpZWxkQ2FuQmVMb2NhbC9zaW1wbGUvc3JjL1Rlc3QuamF2YQpAQCAtMCwwICsxLDggQEAKK2NsYXNzIFRlc3QgeworICAgIHByaXZhdGUgaW50IGY7CisKKyAgICB2b2lkIGZvbyAoKSB7CisgICAgICAgIGYgPSAwOworICAgICAgICBpbnQgayA9IGY7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZmllbGRDYW5CZUxvY2FsL3N0YXRlRmllbGQvZXhwZWN0ZWQueG1sIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZmllbGRDYW5CZUxvY2FsL3N0YXRlRmllbGQvZXhwZWN0ZWQueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU4MGE4ODkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9maWVsZENhbkJlTG9jYWwvc3RhdGVGaWVsZC9leHBlY3RlZC54bWwKQEAgLTAsMCArMSwzIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHByb2JsZW1zPgorPC9wcm9ibGVtcz4KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2ZpZWxkQ2FuQmVMb2NhbC9zdGF0ZUZpZWxkL3NyYy9UZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9maWVsZENhbkJlTG9jYWwvc3RhdGVGaWVsZC9zcmMvVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc5Nzc0YzAKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9maWVsZENhbkJlTG9jYWwvc3RhdGVGaWVsZC9zcmMvVGVzdC5qYXZhCkBAIC0wLDAgKzEsOCBAQAoraW1wb3J0IGphdmEudXRpbC4qOworcHVibGljIGNsYXNzIFRlc3QgeworICBwcml2YXRlIGZpbmFsIE1hcDxTdHJpbmcsIFN0cmluZz4gbXlNb2R1bGVUb091dHB1dCA9IG5ldyBIYXNoTWFwPFN0cmluZywgU3RyaW5nPigpOworCisgIHZvaWQgZm9vKCkgeworICAgIGlmIChteU1vZHVsZVRvT3V0cHV0LmNvbnRhaW5zS2V5KG51bGwpKSBteU1vZHVsZVRvT3V0cHV0LnB1dCgiIiwgIiIpOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZmllbGRDYW5CZUxvY2FsL3N0YXRpY0FjY2Vzcy9leHBlY3RlZC54bWwgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9maWVsZENhbkJlTG9jYWwvc3RhdGljQWNjZXNzL2V4cGVjdGVkLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ODBhODg5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZmllbGRDYW5CZUxvY2FsL3N0YXRpY0FjY2Vzcy9leHBlY3RlZC54bWwKQEAgLTAsMCArMSwzIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHByb2JsZW1zPgorPC9wcm9ibGVtcz4KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2ZpZWxkQ2FuQmVMb2NhbC9zdGF0aWNBY2Nlc3Mvc3JjL1Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2ZpZWxkQ2FuQmVMb2NhbC9zdGF0aWNBY2Nlc3Mvc3JjL1Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZGZhODQ1Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZmllbGRDYW5CZUxvY2FsL3N0YXRpY0FjY2Vzcy9zcmMvVGVzdC5qYXZhCkBAIC0wLDAgKzEsOCBAQAorY2xhc3MgVGVzdCB7Citwcml2YXRlIHN0YXRpYyBpbnQgY291bnQgPSAwOworCisJcHVibGljIEZpZWxkQ2FuQmVMb2NhbCgpIHsKKwkJY291bnQgPSBjb3VudCArIDE7CisJfQorCit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9maWVsZENhbkJlTG9jYWwvc3RhdGljRmluYWwvZXhwZWN0ZWQueG1sIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZmllbGRDYW5CZUxvY2FsL3N0YXRpY0ZpbmFsL2V4cGVjdGVkLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ODBhODg5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZmllbGRDYW5CZUxvY2FsL3N0YXRpY0ZpbmFsL2V4cGVjdGVkLnhtbApAQCAtMCwwICsxLDMgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8cHJvYmxlbXM+Cis8L3Byb2JsZW1zPgpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZmllbGRDYW5CZUxvY2FsL3N0YXRpY0ZpbmFsL3NyYy9UZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9maWVsZENhbkJlTG9jYWwvc3RhdGljRmluYWwvc3JjL1Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYTI0ZGJjCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZmllbGRDYW5CZUxvY2FsL3N0YXRpY0ZpbmFsL3NyYy9UZXN0LmphdmEKQEAgLTAsMCArMSwxMSBAQAorY2xhc3MgVGVzdCB7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IGYgPSAwOworCisgICAgdm9pZCBmb28gKCkgeworICAgICAgICBpbnQgayA9IGY7CisgICAgfQorCisgICAgaW50IGJhciAoKSB7CisgICAgICAgIHJldHVybiBmOworICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2ZpZWxkQ2FuQmVMb2NhbC90d29NZXRob2RzL2V4cGVjdGVkLnhtbCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2ZpZWxkQ2FuQmVMb2NhbC90d29NZXRob2RzL2V4cGVjdGVkLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ODBhODg5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZmllbGRDYW5CZUxvY2FsL3R3b01ldGhvZHMvZXhwZWN0ZWQueG1sCkBAIC0wLDAgKzEsMyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxwcm9ibGVtcz4KKzwvcHJvYmxlbXM+CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9maWVsZENhbkJlTG9jYWwvdHdvTWV0aG9kcy9zcmMvVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZmllbGRDYW5CZUxvY2FsL3R3b01ldGhvZHMvc3JjL1Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NGRmNDRlCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZmllbGRDYW5CZUxvY2FsL3R3b01ldGhvZHMvc3JjL1Rlc3QuamF2YQpAQCAtMCwwICsxLDEwIEBACitjbGFzcyBUZXN0IHsKKyAgcHJpdmF0ZSBpbnQgZjsKKworICBwdWJsaWMgdm9pZCBiYXIoKSB7CisgICAgZm9vKCgpIC0+IHtmKys7fSk7CisgIH0KKworICBwcml2YXRlIHZvaWQgZm9vKFJ1bm5hYmxlIHIpIHsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vZ2xvYmFsQ29udGV4dC9Gb28uamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2dsb2JhbENvbnRleHQvRm9vLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGEyYjQ0ZAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2dsb2JhbENvbnRleHQvRm9vLmphdmEKQEAgLTAsMCArMSBAQAorcHVibGljIGNsYXNzIEZvbyB7fQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vamF2YURvY0luc3BlY3Rpb24vZG91YmxlTWlzc2VkVGFncy9leHBlY3RlZC54bWwgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9qYXZhRG9jSW5zcGVjdGlvbi9kb3VibGVNaXNzZWRUYWdzL2V4cGVjdGVkLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44Y2JjMjE0Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vamF2YURvY0luc3BlY3Rpb24vZG91YmxlTWlzc2VkVGFncy9leHBlY3RlZC54bWwKQEAgLTAsMCArMSwxNCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxwcm9ibGVtcz4KKyAgPHByb2JsZW0+CisgICAgPGZpbGU+Rm9vLmphdmE8L2ZpbGU+CisgICAgPGxpbmU+NjwvbGluZT4KKyAgICA8ZGVzY3JpcHRpb24+bWlzc2luZzwvZGVzY3JpcHRpb24+CisgIDwvcHJvYmxlbT4KKyAgPHByb2JsZW0+CisgICAgPGZpbGU+Rm9vLmphdmE8L2ZpbGU+CisgICAgPGxpbmU+NzwvbGluZT4KKyAgICA8ZGVzY3JpcHRpb24+bWlzc2luZzwvZGVzY3JpcHRpb24+CisgIDwvcHJvYmxlbT4KKzwvcHJvYmxlbXM+CisKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2phdmFEb2NJbnNwZWN0aW9uL2RvdWJsZU1pc3NlZFRhZ3Mvc3JjL0Zvby5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vamF2YURvY0luc3BlY3Rpb24vZG91YmxlTWlzc2VkVGFncy9zcmMvRm9vLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDYwNmQ3NAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2phdmFEb2NJbnNwZWN0aW9uL2RvdWJsZU1pc3NlZFRhZ3Mvc3JjL0Zvby5qYXZhCkBAIC0wLDAgKzEsMTAgQEAKKy8qKgorICBAYXV0aG9yIG1lCisqLworcHVibGljIGFic3RyYWN0IGNsYXNzIEZvbyB7CisgIC8qKgorICBAcGFyYW0gaQorICBAcGFyYW0gagorICAqLworICBwdWJsaWMgYWJzdHJhY3Qgdm9pZCBmb28oaW50IGksIGludCBqKTsKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2phdmFEb2NJbnNwZWN0aW9uL2R1cGxpY2F0ZURlcHJlY2F0ZWQvZXhwZWN0ZWQueG1sIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vamF2YURvY0luc3BlY3Rpb24vZHVwbGljYXRlRGVwcmVjYXRlZC9leHBlY3RlZC54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzVjNGZiZgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2phdmFEb2NJbnNwZWN0aW9uL2R1cGxpY2F0ZURlcHJlY2F0ZWQvZXhwZWN0ZWQueG1sCkBAIC0wLDAgKzEsOSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxwcm9ibGVtcz4KKyAgPHByb2JsZW0+CisgICAgPGZpbGU+Rm9vLmphdmE8L2ZpbGU+CisgICAgPGxpbmU+NDwvbGluZT4KKyAgICA8ZGVzY3JpcHRpb24+RHVwbGljYXRlIEBkZXByZWNhdGVkIHRhZzwvZGVzY3JpcHRpb24+CisgIDwvcHJvYmxlbT4KKzwvcHJvYmxlbXM+CisKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2phdmFEb2NJbnNwZWN0aW9uL2R1cGxpY2F0ZURlcHJlY2F0ZWQvc3JjL0Zvby5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vamF2YURvY0luc3BlY3Rpb24vZHVwbGljYXRlRGVwcmVjYXRlZC9zcmMvRm9vLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmU4YjRlNgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2phdmFEb2NJbnNwZWN0aW9uL2R1cGxpY2F0ZURlcHJlY2F0ZWQvc3JjL0Zvby5qYXZhCkBAIC0wLDAgKzEsNyBAQAorLyoqCisgKiBUZXN0LgorICogQGRlcHJlY2F0ZWQgWW91IGJldC4KKyAqIEBkZXByZWNhdGVkIEdvdGNoYS4KKyAqLworY2xhc3MgRm9vIHsKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2phdmFEb2NJbnNwZWN0aW9uL2R1cGxpY2F0ZVBhcmFtL2V4cGVjdGVkLnhtbCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2phdmFEb2NJbnNwZWN0aW9uL2R1cGxpY2F0ZVBhcmFtL2V4cGVjdGVkLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40Mjk1OWU3Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vamF2YURvY0luc3BlY3Rpb24vZHVwbGljYXRlUGFyYW0vZXhwZWN0ZWQueG1sCkBAIC0wLDAgKzEsOSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxwcm9ibGVtcz4KKyAgPHByb2JsZW0+CisgICAgPGZpbGU+Rm9vLmphdmE8L2ZpbGU+CisgICAgPGxpbmU+NTwvbGluZT4KKyAgICA8ZGVzY3JpcHRpb24+RHVwbGljYXRlIEBwYXJhbSB0YWcgZm9yIHBhcmFtZXRlciAncyc8L2Rlc2NyaXB0aW9uPgorICA8L3Byb2JsZW0+Cis8L3Byb2JsZW1zPgorCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9qYXZhRG9jSW5zcGVjdGlvbi9kdXBsaWNhdGVQYXJhbS9zcmMvRm9vLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9qYXZhRG9jSW5zcGVjdGlvbi9kdXBsaWNhdGVQYXJhbS9zcmMvRm9vLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTBmMGZjMgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2phdmFEb2NJbnNwZWN0aW9uL2R1cGxpY2F0ZVBhcmFtL3NyYy9Gb28uamF2YQpAQCAtMCwwICsxLDkgQEAKK2NsYXNzIFRlc3QgeworICAvKioKKyAgICogVGVzdC4KKyAgICogQHBhcmFtIHMgbXkgc3RyaW5nCisgICAqIEBwYXJhbSBzIGFub3RoZXIgc3RyaW5nCisgICAqLworICB2b2lkIHRlc3QoU3RyaW5nIHMpIHsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2phdmFEb2NJbnNwZWN0aW9uL2R1cGxpY2F0ZVJldHVybi9leHBlY3RlZC54bWwgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9qYXZhRG9jSW5zcGVjdGlvbi9kdXBsaWNhdGVSZXR1cm4vZXhwZWN0ZWQueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU5YzExZjYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9qYXZhRG9jSW5zcGVjdGlvbi9kdXBsaWNhdGVSZXR1cm4vZXhwZWN0ZWQueG1sCkBAIC0wLDAgKzEsOCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxwcm9ibGVtcz4KKyAgPHByb2JsZW0+CisgICAgPGZpbGU+Rm9vLmphdmE8L2ZpbGU+CisgICAgPGxpbmU+NTwvbGluZT4KKyAgICA8ZGVzY3JpcHRpb24+RHVwbGljYXRlIEByZXR1cm4gdGFnPC9kZXNjcmlwdGlvbj4KKyAgPC9wcm9ibGVtPgorPC9wcm9ibGVtcz4KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2phdmFEb2NJbnNwZWN0aW9uL2R1cGxpY2F0ZVJldHVybi9zcmMvRm9vLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9qYXZhRG9jSW5zcGVjdGlvbi9kdXBsaWNhdGVSZXR1cm4vc3JjL0Zvby5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJlODEyYTAKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9qYXZhRG9jSW5zcGVjdGlvbi9kdXBsaWNhdGVSZXR1cm4vc3JjL0Zvby5qYXZhCkBAIC0wLDAgKzEsOSBAQAorY2xhc3MgVGVzdCB7CisgIC8qKgorICAgKiBUZXN0LgorICAgKiBAcmV0dXJuIG15IHN0cmluZworICAgKiBAcmV0dXJuIGFub3RoZXIgc3RyaW5nCisgICAqLworICBTdHJpbmcgdGVzdCgpIHsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2phdmFEb2NJbnNwZWN0aW9uL2R1cGxpY2F0ZVNlcmlhbC9leHBlY3RlZC54bWwgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9qYXZhRG9jSW5zcGVjdGlvbi9kdXBsaWNhdGVTZXJpYWwvZXhwZWN0ZWQueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIzNmZiMTUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9qYXZhRG9jSW5zcGVjdGlvbi9kdXBsaWNhdGVTZXJpYWwvZXhwZWN0ZWQueG1sCkBAIC0wLDAgKzEsOSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxwcm9ibGVtcz4KKyAgPHByb2JsZW0+CisgICAgPGZpbGU+Rm9vLmphdmE8L2ZpbGU+CisgICAgPGxpbmU+NTwvbGluZT4KKyAgICA8ZGVzY3JpcHRpb24+RHVwbGljYXRlIEBzZXJpYWwgdGFnPC9kZXNjcmlwdGlvbj4KKyAgPC9wcm9ibGVtPgorPC9wcm9ibGVtcz4KKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vamF2YURvY0luc3BlY3Rpb24vZHVwbGljYXRlU2VyaWFsL3NyYy9Gb28uamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2phdmFEb2NJbnNwZWN0aW9uL2R1cGxpY2F0ZVNlcmlhbC9zcmMvRm9vLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWJjNTRjMwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2phdmFEb2NJbnNwZWN0aW9uL2R1cGxpY2F0ZVNlcmlhbC9zcmMvRm9vLmphdmEKQEAgLTAsMCArMSw4IEBACitjbGFzcyBUZXN0IHsKKyAgLyoqCisgICAqIFRlc3QuCisgICAqIEBzZXJpYWwgc29tZXRoaW5nCisgICAqIEBzZXJpYWwgc29tZXRoaW5nIGVsc2UKKyAgICovCisgICBwcml2YXRlIGludCBhOworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2phdmFEb2NJbnNwZWN0aW9uL2R1cGxpY2F0ZVRocm93cy9leHBlY3RlZC54bWwgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9qYXZhRG9jSW5zcGVjdGlvbi9kdXBsaWNhdGVUaHJvd3MvZXhwZWN0ZWQueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE1MjVhNjgKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9qYXZhRG9jSW5zcGVjdGlvbi9kdXBsaWNhdGVUaHJvd3MvZXhwZWN0ZWQueG1sCkBAIC0wLDAgKzEsOSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxwcm9ibGVtcz4KKyAgPHByb2JsZW0+CisgICAgPGZpbGU+Rm9vLmphdmE8L2ZpbGU+CisgICAgPGxpbmU+NTwvbGluZT4KKyAgICA8ZGVzY3JpcHRpb24+RHVwbGljYXRlIEB0aHJvd3MgdGFnIGZvciBleGNlcHRpb24gJ2phdmEubGFuZy5FeGNlcHRpb24nPC9kZXNjcmlwdGlvbj4KKyAgPC9wcm9ibGVtPgorPC9wcm9ibGVtcz4KKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vamF2YURvY0luc3BlY3Rpb24vZHVwbGljYXRlVGhyb3dzL3NyYy9Gb28uamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2phdmFEb2NJbnNwZWN0aW9uL2R1cGxpY2F0ZVRocm93cy9zcmMvRm9vLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTNmODgxOQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2phdmFEb2NJbnNwZWN0aW9uL2R1cGxpY2F0ZVRocm93cy9zcmMvRm9vLmphdmEKQEAgLTAsMCArMSw5IEBACitjbGFzcyBUZXN0IHsKKyAgLyoqCisgICAqIFRlc3QuCisgICAqIEB0aHJvd3MgamF2YS5sYW5nLkV4Y2VwdGlvbiBpbiBjYXNlIG9mIHByb2JsZW1zCisgICAqIEBleGNlcHRpb24gamF2YS5sYW5nLkV4Y2VwdGlvbiBpbiBjYXNlIG9mIG90aGVyIHByb2JsZW1zCisgICAqLworICB2b2lkIHRlc3QoKSB0aHJvd3MgamF2YS5sYW5nLkV4Y2VwdGlvbiB7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9qYXZhRG9jSW5zcGVjdGlvbi9nZW5lcmljc1BhcmFtcy9leHBlY3RlZC54bWwgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9qYXZhRG9jSW5zcGVjdGlvbi9nZW5lcmljc1BhcmFtcy9leHBlY3RlZC54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzllMWEwZgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2phdmFEb2NJbnNwZWN0aW9uL2dlbmVyaWNzUGFyYW1zL2V4cGVjdGVkLnhtbApAQCAtMCwwICsxLDQgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8cHJvYmxlbXM+ICAKKzwvcHJvYmxlbXM+CisKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2phdmFEb2NJbnNwZWN0aW9uL2dlbmVyaWNzUGFyYW1zL3NyYy9Gb28uamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2phdmFEb2NJbnNwZWN0aW9uL2dlbmVyaWNzUGFyYW1zL3NyYy9Gb28uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NGU0MDNmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vamF2YURvY0luc3BlY3Rpb24vZ2VuZXJpY3NQYXJhbXMvc3JjL0Zvby5qYXZhCkBAIC0wLDAgKzEsOCBAQAorcHVibGljIGNsYXNzIEZvbyB7CisgIC8qKgorICAqZGVzY3JpcHRpb24KKyAgKkBwYXJhbSBpIHRoaXMgaXMgYSBwYXJhbWV0ZXIKKyAgKkBwYXJhbSA8VD4gdHlwZSBvZiBvYmplY3QgdG8gZG8gc29tZXRoaW5nIHdpdGguCisgICovCisgIHB1YmxpYyA8VD4gdm9pZCBmb28oVCBpKXt9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9qYXZhRG9jSW5zcGVjdGlvbi9pZ25vcmVEdXBsaWNhdGVUaHJvd3MvZXhwZWN0ZWQueG1sIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vamF2YURvY0luc3BlY3Rpb24vaWdub3JlRHVwbGljYXRlVGhyb3dzL2V4cGVjdGVkLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNzA0ZDU4Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vamF2YURvY0luc3BlY3Rpb24vaWdub3JlRHVwbGljYXRlVGhyb3dzL2V4cGVjdGVkLnhtbApAQCAtMCwwICsxLDQgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8cHJvYmxlbXM+Cis8L3Byb2JsZW1zPgorCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9qYXZhRG9jSW5zcGVjdGlvbi9pZ25vcmVEdXBsaWNhdGVUaHJvd3Mvc3JjL1Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2phdmFEb2NJbnNwZWN0aW9uL2lnbm9yZUR1cGxpY2F0ZVRocm93cy9zcmMvVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAyYmE1NTkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9qYXZhRG9jSW5zcGVjdGlvbi9pZ25vcmVEdXBsaWNhdGVUaHJvd3Mvc3JjL1Rlc3QuamF2YQpAQCAtMCwwICsxLDkgQEAKK2NsYXNzIFRlc3QgeworLyoqCisgKkB0aHJvd3MgQXJyYXlJbmRleE91dE9mQm91bmRzRXhjZXB0aW9uIGluIHNvbWUgY2FzZQorICpAdGhyb3dzIEFycmF5SW5kZXhPdXRPZkJvdW5kc0V4Y2VwdGlvbiBhbmQgaW4gc29tZSBvdGhlciBjYXNlCisgKi8KKyAgdm9pZCBmb28oKSB0aHJvd3MgQXJyYXlJbmRleE91dE9mQm91bmRzRXhjZXB0aW9uIHsKKworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vamF2YURvY0luc3BlY3Rpb24vbWlzb3JkZXJlZFRocm93c1RhZy9leHBlY3RlZC54bWwgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9qYXZhRG9jSW5zcGVjdGlvbi9taXNvcmRlcmVkVGhyb3dzVGFnL2V4cGVjdGVkLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OWUxYTBmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vamF2YURvY0luc3BlY3Rpb24vbWlzb3JkZXJlZFRocm93c1RhZy9leHBlY3RlZC54bWwKQEAgLTAsMCArMSw0IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHByb2JsZW1zPiAgCis8L3Byb2JsZW1zPgorCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9qYXZhRG9jSW5zcGVjdGlvbi9taXNvcmRlcmVkVGhyb3dzVGFnL3NyYy9UZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9qYXZhRG9jSW5zcGVjdGlvbi9taXNvcmRlcmVkVGhyb3dzVGFnL3NyYy9UZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzFhMzQ3ZQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2phdmFEb2NJbnNwZWN0aW9uL21pc29yZGVyZWRUaHJvd3NUYWcvc3JjL1Rlc3QuamF2YQpAQCAtMCwwICsxLDkgQEAKK3B1YmxpYyBjbGFzcyBUZXN0IHsKKyAgICAvKioKKyAgICAgKiBAdGhyb3dzIGphdmEuaW8uSU9FeGNlcHRpb24gZXhjZXB0aW9uIGluIHNvbWUgY2FzZQorICAgICAqIEB0aHJvd3MgRXhjZXB0aW9uIGV4Y2VwdGlvbiBpbiBvdGhlciBjYXNlCisgICAgICovCisgICAgcHVibGljIHZvaWQgZm9vKCkgdGhyb3dzIEV4Y2VwdGlvbiwgamF2YS5pby5JT0V4Y2VwdGlvbiB7CisKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vamF2YURvY0luc3BlY3Rpb24vbWlzc2VkVGFncy9leHBlY3RlZC54bWwgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9qYXZhRG9jSW5zcGVjdGlvbi9taXNzZWRUYWdzL2V4cGVjdGVkLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OWUxYTBmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vamF2YURvY0luc3BlY3Rpb24vbWlzc2VkVGFncy9leHBlY3RlZC54bWwKQEAgLTAsMCArMSw0IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHByb2JsZW1zPiAgCis8L3Byb2JsZW1zPgorCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9qYXZhRG9jSW5zcGVjdGlvbi9taXNzZWRUYWdzL3NyYy9CYXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2phdmFEb2NJbnNwZWN0aW9uL21pc3NlZFRhZ3Mvc3JjL0Jhci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNlZWMwNDcKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9qYXZhRG9jSW5zcGVjdGlvbi9taXNzZWRUYWdzL3NyYy9CYXIuamF2YQpAQCAtMCwwICsxLDEwIEBACisvKioKKyAgQGF1dGhvciBtZQorKi8KK3B1YmxpYyBjbGFzcyBCYXIgZXh0ZW5kcyBGb28geworICAvKioKKyAgKi8KKyAgcHVibGljIHZvaWQgZm9vKGludCBpKSB7CisgICAgaSsrOworICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9qYXZhRG9jSW5zcGVjdGlvbi9taXNzZWRUYWdzL3NyYy9Gb28uamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2phdmFEb2NJbnNwZWN0aW9uL21pc3NlZFRhZ3Mvc3JjL0Zvby5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBjMjdmOGUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9qYXZhRG9jSW5zcGVjdGlvbi9taXNzZWRUYWdzL3NyYy9Gb28uamF2YQpAQCAtMCwwICsxLDkgQEAKKy8qKgorICBAYXV0aG9yIG1lCisqLworcHVibGljIGFic3RyYWN0IGNsYXNzIEZvbyB7CisgIC8qKgorICBAcGFyYW0gaSB0aGlzIGlzIGEgcGFyYW1ldGVyCisgICovCisgIHB1YmxpYyBhYnN0cmFjdCB2b2lkIGZvbyhpbnQgaSk7Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9qYXZhRG9jSW5zcGVjdGlvbi9taXNzZWRUaHJvd3NUYWcvZXhwZWN0ZWQueG1sIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vamF2YURvY0luc3BlY3Rpb24vbWlzc2VkVGhyb3dzVGFnL2V4cGVjdGVkLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YTEzOTU5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vamF2YURvY0luc3BlY3Rpb24vbWlzc2VkVGhyb3dzVGFnL2V4cGVjdGVkLnhtbApAQCAtMCwwICsxLDIwIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHByb2JsZW1zPgorICA8cHJvYmxlbT4KKyAgPGZpbGU+VGVzdC5qYXZhPC9maWxlPgorICA8bGluZT41PC9saW5lPgorICA8dGV4dF9yYW5nZSBzdGFydD0iNzkiIGVuZD0iODIiIC8+CisgIDxtZXRob2Q+CisgICAgPG5hbWU+dm9pZCBmb28oKTwvbmFtZT4KKyAgICA8ZGlzcGxheV9uYW1lPmZvbygpPC9kaXNwbGF5X25hbWU+CisgICAgPHBhY2thZ2U+Jmx0O2RlZmF1bHQmZ3Q7PC9wYWNrYWdlPgorICAgIDxjbGFzcz4KKyAgICAgIDxuYW1lPlRlc3Q8L25hbWU+CisgICAgICA8ZGlzcGxheV9uYW1lPlRlc3Q8L2Rpc3BsYXlfbmFtZT4KKyAgICA8L2NsYXNzPgorICA8L21ldGhvZD4KKyAgPHByb2JsZW1fY2xhc3Mgc2V2ZXJpdHk9IldBUk5JTkciIGF0dHJpYnV0ZV9rZXk9IldBUk5JTkdfQVRUUklCVVRFUyI+RGVjbGFyYXRpb24gaGFzIGphdmFkb2MgcHJvYmxlbXM8L3Byb2JsZW1fY2xhc3M+CisgIDxkZXNjcmlwdGlvbj5SZXF1aXJlZCB0YWcgJmx0O2NvZGUmZ3Q7QHRocm93cyZsdDsvY29kZSZndDsgamF2YS5pby5JT0V4Y2VwdGlvbiBpcyBtaXNzaW5nPC9kZXNjcmlwdGlvbj4KKzwvcHJvYmxlbT4KKzwvcHJvYmxlbXM+CisKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2phdmFEb2NJbnNwZWN0aW9uL21pc3NlZFRocm93c1RhZy9zcmMvVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vamF2YURvY0luc3BlY3Rpb24vbWlzc2VkVGhyb3dzVGFnL3NyYy9UZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzQxYTlkMQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2phdmFEb2NJbnNwZWN0aW9uL21pc3NlZFRocm93c1RhZy9zcmMvVGVzdC5qYXZhCkBAIC0wLDAgKzEsOCBAQAorY2xhc3MgVGVzdCB7CisvKioKKyAqQHRocm93cyBqYXZhLmxhbmcuQXJyYXlJbmRleE91dE9mQm91bmRzRXhjZXB0aW9uIGluIHNvbWUgY2FzZQorICovCisgIHZvaWQgZm9vKCkgdGhyb3dzIGphdmEuaW8uSU9FeGNlcHRpb24sIGphdmEubGFuZy5BcnJheUluZGV4T3V0T2ZCb3VuZHNFeGNlcHRpb24geworCisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9sb2NhbENhbkJlRmluYWwvU0NSMTE3NTcvZXhwZWN0ZWQueG1sIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vbG9jYWxDYW5CZUZpbmFsL1NDUjExNzU3L2V4cGVjdGVkLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNzA0ZDU4Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vbG9jYWxDYW5CZUZpbmFsL1NDUjExNzU3L2V4cGVjdGVkLnhtbApAQCAtMCwwICsxLDQgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8cHJvYmxlbXM+Cis8L3Byb2JsZW1zPgorCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9sb2NhbENhbkJlRmluYWwvU0NSMTE3NTcvc3JjL1Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2xvY2FsQ2FuQmVGaW5hbC9TQ1IxMTc1Ny9zcmMvVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk4OTE3MjEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9sb2NhbENhbkJlRmluYWwvU0NSMTE3NTcvc3JjL1Rlc3QuamF2YQpAQCAtMCwwICsxLDI0IEBACitwdWJsaWMgY2xhc3MgVGVzdCB7CisgIHB1YmxpYyBpbnQgZmliKGludCBuKSB7CisgICAgc3dpdGNoIChuKSB7CisgICAgY2FzZSAwOgorICAgICAgcmV0dXJuIDA7CisgICAgLy8geW91IGNhbiBjb21tZW50IG91dCB0aGUgbmV4dCB0aHJlZSBsaW5lcyAtLSBzYW1lIHRoaW5nCisgICAgY2FzZSAxOgorICAgIGNhc2UgMjoKKyAgICAgIHJldHVybiAxOworICAgIGRlZmF1bHQ6CisgICAgICBpbnQgYTsKKyAgICAgIGludCBiID0gMTsKKyAgICAgIGludCBjID0gMjsKKyAgICAgIG4gLT0gMzsKKyAgICAgIHdoaWxlIChuLS0gPiAwKSB7CisgICAgICAgIGEgPSBiOworICAgICAgICBiID0gYzsKKyAgICAgICAgYyA9IGEgKyBiOworICAgICAgfQorICAgICAgcmV0dXJuIGM7CisgICAgfQorICB9Cit9CisKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2xvY2FsQ2FuQmVGaW5hbC9TQ1I2NzQ0XzEvZXhwZWN0ZWQueG1sIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vbG9jYWxDYW5CZUZpbmFsL1NDUjY3NDRfMS9leHBlY3RlZC54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDcwNGQ1OAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2xvY2FsQ2FuQmVGaW5hbC9TQ1I2NzQ0XzEvZXhwZWN0ZWQueG1sCkBAIC0wLDAgKzEsNCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxwcm9ibGVtcz4KKzwvcHJvYmxlbXM+CisKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2xvY2FsQ2FuQmVGaW5hbC9TQ1I2NzQ0XzEvc3JjL2Zvby9UZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9sb2NhbENhbkJlRmluYWwvU0NSNjc0NF8xL3NyYy9mb28vVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVlZTQ0MjIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9sb2NhbENhbkJlRmluYWwvU0NSNjc0NF8xL3NyYy9mb28vVGVzdC5qYXZhCkBAIC0wLDAgKzEsNiBAQAorcGFja2FnZSBmb287CisKK3B1YmxpYyBjbGFzcyBUZXN0IHsKKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihmaW5hbCBTdHJpbmdbXSBhcmdzKSB7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2xvY2FsQ2FuQmVGaW5hbC9TQ1I2NzQ0XzIvZXhwZWN0ZWQueG1sIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vbG9jYWxDYW5CZUZpbmFsL1NDUjY3NDRfMi9leHBlY3RlZC54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzg0YjY5OQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2xvY2FsQ2FuQmVGaW5hbC9TQ1I2NzQ0XzIvZXhwZWN0ZWQueG1sCkBAIC0wLDAgKzEsOSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxwcm9ibGVtcz4KKyAgPHByb2JsZW0+CisgICAgPGZpbGU+VGVzdC5qYXZhPC9maWxlPgorICAgIDxsaW5lPjU8L2xpbmU+CisgICAgPGRlc2NyaXB0aW9uPmZpbmFsPC9kZXNjcmlwdGlvbj4KKyAgPC9wcm9ibGVtPgorPC9wcm9ibGVtcz4KKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vbG9jYWxDYW5CZUZpbmFsL1NDUjY3NDRfMi9zcmMvZm9vL1Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2xvY2FsQ2FuQmVGaW5hbC9TQ1I2NzQ0XzIvc3JjL2Zvby9UZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDZmZjJmMwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2xvY2FsQ2FuQmVGaW5hbC9TQ1I2NzQ0XzIvc3JjL2Zvby9UZXN0LmphdmEKQEAgLTAsMCArMSw3IEBACitwYWNrYWdlIGZvbzsKKworcHVibGljIGNsYXNzIFRlc3QgeworICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKGZpbmFsIFN0cmluZ1tdIGFyZ3MpIHsKKwlpbnQgZm9vID0gMTI7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2xvY2FsQ2FuQmVGaW5hbC9TQ1I2NzQ0XzMvZXhwZWN0ZWQueG1sIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vbG9jYWxDYW5CZUZpbmFsL1NDUjY3NDRfMy9leHBlY3RlZC54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDcwNGQ1OAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2xvY2FsQ2FuQmVGaW5hbC9TQ1I2NzQ0XzMvZXhwZWN0ZWQueG1sCkBAIC0wLDAgKzEsNCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxwcm9ibGVtcz4KKzwvcHJvYmxlbXM+CisKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2xvY2FsQ2FuQmVGaW5hbC9TQ1I2NzQ0XzMvc3JjL2Zvby9UZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9sb2NhbENhbkJlRmluYWwvU0NSNjc0NF8zL3NyYy9mb28vVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg0MDA4OTcKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9sb2NhbENhbkJlRmluYWwvU0NSNjc0NF8zL3NyYy9mb28vVGVzdC5qYXZhCkBAIC0wLDAgKzEsNyBAQAorcGFja2FnZSBmb287CisKK3B1YmxpYyBjbGFzcyBUZXN0IHsKKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihmaW5hbCBTdHJpbmdbXSBhcmdzKSB7CisJZmluYWwgaW50IGZvbyA9IDEyOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9sb2NhbENhbkJlRmluYWwvU0NSNjc0NF80L2V4cGVjdGVkLnhtbCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2xvY2FsQ2FuQmVGaW5hbC9TQ1I2NzQ0XzQvZXhwZWN0ZWQueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ3MDRkNTgKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9sb2NhbENhbkJlRmluYWwvU0NSNjc0NF80L2V4cGVjdGVkLnhtbApAQCAtMCwwICsxLDQgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8cHJvYmxlbXM+Cis8L3Byb2JsZW1zPgorCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9sb2NhbENhbkJlRmluYWwvU0NSNjc0NF80L3NyYy9mb28vVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vbG9jYWxDYW5CZUZpbmFsL1NDUjY3NDRfNC9zcmMvZm9vL1Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOGQ3YzM3Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vbG9jYWxDYW5CZUZpbmFsL1NDUjY3NDRfNC9zcmMvZm9vL1Rlc3QuamF2YQpAQCAtMCwwICsxLDggQEAKK3BhY2thZ2UgZm9vOworCitwdWJsaWMgY2xhc3MgVGVzdCB7CisgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oZmluYWwgU3RyaW5nW10gYXJncykgeworCWZpbmFsIGludCBmb28gPSAxMjsKKwlmaW5hbCBpbnQgYmFyID0gMjQ7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2xvY2FsQ2FuQmVGaW5hbC9TQ1I2NzQ0XzUvZXhwZWN0ZWQueG1sIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vbG9jYWxDYW5CZUZpbmFsL1NDUjY3NDRfNS9leHBlY3RlZC54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDcwNGQ1OAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2xvY2FsQ2FuQmVGaW5hbC9TQ1I2NzQ0XzUvZXhwZWN0ZWQueG1sCkBAIC0wLDAgKzEsNCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxwcm9ibGVtcz4KKzwvcHJvYmxlbXM+CisKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2xvY2FsQ2FuQmVGaW5hbC9TQ1I2NzQ0XzUvc3JjL2Zvby9UZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9sb2NhbENhbkJlRmluYWwvU0NSNjc0NF81L3NyYy9mb28vVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgwZmMzNGIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9sb2NhbENhbkJlRmluYWwvU0NSNjc0NF81L3NyYy9mb28vVGVzdC5qYXZhCkBAIC0wLDAgKzEsOSBAQAorcGFja2FnZSBmb287CisKK3B1YmxpYyBjbGFzcyBUZXN0IHsKKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihmaW5hbCBTdHJpbmdbXSBhcmdzKSB7CisJZmluYWwgaW50IGZvbyA9IDEyOworCWZpbmFsIGludCBiYXIgPSAyNDsKKwlmaW5hbCBpbnQgZ2F6b25rID0gNDg7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2xvY2FsQ2FuQmVGaW5hbC9TQ1I2NzQ0XzYvZXhwZWN0ZWQueG1sIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vbG9jYWxDYW5CZUZpbmFsL1NDUjY3NDRfNi9leHBlY3RlZC54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDcwNGQ1OAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2xvY2FsQ2FuQmVGaW5hbC9TQ1I2NzQ0XzYvZXhwZWN0ZWQueG1sCkBAIC0wLDAgKzEsNCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxwcm9ibGVtcz4KKzwvcHJvYmxlbXM+CisKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2xvY2FsQ2FuQmVGaW5hbC9TQ1I2NzQ0XzYvc3JjL2Zvby9UZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9sb2NhbENhbkJlRmluYWwvU0NSNjc0NF82L3NyYy9mb28vVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUwYmRhM2IKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9sb2NhbENhbkJlRmluYWwvU0NSNjc0NF82L3NyYy9mb28vVGVzdC5qYXZhCkBAIC0wLDAgKzEsMTAgQEAKK3BhY2thZ2UgZm9vOworCitwdWJsaWMgY2xhc3MgVGVzdCB7CisgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oZmluYWwgU3RyaW5nW10gYXJncykgeworCWZpbmFsIGludCBmb28gPSAxMjsKKwlmaW5hbCBpbnQgYmFyID0gMjQ7CisJZmluYWwgaW50IGdhem9uayA9IDQ4OworCWZpbmFsIGludCBiYW5hbmEgPSA5NjsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vbG9jYWxDYW5CZUZpbmFsL1NDUjc0MjgvZXhwZWN0ZWQueG1sIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vbG9jYWxDYW5CZUZpbmFsL1NDUjc0MjgvZXhwZWN0ZWQueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYxMzc4MzMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9sb2NhbENhbkJlRmluYWwvU0NSNzQyOC9leHBlY3RlZC54bWwKQEAgLTAsMCArMSwyNCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxwcm9ibGVtcz4KKyAgPHByb2JsZW0+CisgICAgPGZpbGU+SnVuay5qYXZhPC9maWxlPgorICAgIDxsaW5lPjU8L2xpbmU+CisgICAgPGRlc2NyaXB0aW9uPmJhciBmaW5hbDwvZGVzY3JpcHRpb24+CisgIDwvcHJvYmxlbT4KKyAgPHByb2JsZW0+CisgICAgPGZpbGU+SnVuay5qYXZhPC9maWxlPgorICAgIDxsaW5lPjg8L2xpbmU+CisgICAgPGRlc2NyaXB0aW9uPmkgZmluYWw8L2Rlc2NyaXB0aW9uPgorICA8L3Byb2JsZW0+CisgIDxwcm9ibGVtPgorICAgIDxmaWxlPkp1bmsuamF2YTwvZmlsZT4KKyAgICA8bGluZT45PC9saW5lPgorICAgIDxkZXNjcmlwdGlvbj5mb28gZmluYWw8L2Rlc2NyaXB0aW9uPgorICA8L3Byb2JsZW0+CisgIDxwcm9ibGVtPgorICAgIDxmaWxlPkp1bmsuamF2YTwvZmlsZT4KKyAgICA8bGluZT4xNTwvbGluZT4KKyAgICA8ZGVzY3JpcHRpb24+aiBmaW5hbDwvZGVzY3JpcHRpb24+CisgIDwvcHJvYmxlbT4KKzwvcHJvYmxlbXM+CisKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2xvY2FsQ2FuQmVGaW5hbC9TQ1I3NDI4L3NyYy9KdW5rLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9sb2NhbENhbkJlRmluYWwvU0NSNzQyOC9zcmMvSnVuay5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJjMjZjYzQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9sb2NhbENhbkJlRmluYWwvU0NSNzQyOC9zcmMvSnVuay5qYXZhCkBAIC0wLDAgKzEsMjAgQEAKK3B1YmxpYyBmaW5hbCBjbGFzcyBKdW5rCisgICB7CisgICBwdWJsaWMgdm9pZCBzaWxseU1ldGhvZCgpCisgICAgICB7CisgICAgICBTdHJpbmcgYmFyID0gImJhciI7CisgICAgICB0cnkKKyAgICAgICAgIHsKKyAgICAgICAgIGludCBpID0gMTsKKyAgICAgICAgIFN0cmluZyBmb28gPSAiZm9vIjsKKyAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiWyIgKyBiYXIgKyAifCIgKyBpICsgInwiICsgZm9vICsgIl0iKTsKKyAgICAgICAgIC8vdGhyb3cgbmV3IEV4Y2VwdGlvbigpOworICAgICAgICAgfQorICAgICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQorICAgICAgICAgeworICAgICAgICAgaW50IGogPSAyOworICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJqID0gWyIgKyBqICsgIl0iKTsKKyAgICAgICAgIH0KKyAgICAgIH0KKyAgIH0KKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vbG9jYWxDYW5CZUZpbmFsL1NDUjc0MjhfMS9leHBlY3RlZC54bWwgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9sb2NhbENhbkJlRmluYWwvU0NSNzQyOF8xL2V4cGVjdGVkLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMTM3ODMzCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vbG9jYWxDYW5CZUZpbmFsL1NDUjc0MjhfMS9leHBlY3RlZC54bWwKQEAgLTAsMCArMSwyNCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxwcm9ibGVtcz4KKyAgPHByb2JsZW0+CisgICAgPGZpbGU+SnVuay5qYXZhPC9maWxlPgorICAgIDxsaW5lPjU8L2xpbmU+CisgICAgPGRlc2NyaXB0aW9uPmJhciBmaW5hbDwvZGVzY3JpcHRpb24+CisgIDwvcHJvYmxlbT4KKyAgPHByb2JsZW0+CisgICAgPGZpbGU+SnVuay5qYXZhPC9maWxlPgorICAgIDxsaW5lPjg8L2xpbmU+CisgICAgPGRlc2NyaXB0aW9uPmkgZmluYWw8L2Rlc2NyaXB0aW9uPgorICA8L3Byb2JsZW0+CisgIDxwcm9ibGVtPgorICAgIDxmaWxlPkp1bmsuamF2YTwvZmlsZT4KKyAgICA8bGluZT45PC9saW5lPgorICAgIDxkZXNjcmlwdGlvbj5mb28gZmluYWw8L2Rlc2NyaXB0aW9uPgorICA8L3Byb2JsZW0+CisgIDxwcm9ibGVtPgorICAgIDxmaWxlPkp1bmsuamF2YTwvZmlsZT4KKyAgICA8bGluZT4xNTwvbGluZT4KKyAgICA8ZGVzY3JpcHRpb24+aiBmaW5hbDwvZGVzY3JpcHRpb24+CisgIDwvcHJvYmxlbT4KKzwvcHJvYmxlbXM+CisKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2xvY2FsQ2FuQmVGaW5hbC9TQ1I3NDI4XzEvc3JjL0p1bmsuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2xvY2FsQ2FuQmVGaW5hbC9TQ1I3NDI4XzEvc3JjL0p1bmsuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOGIyMDFjCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vbG9jYWxDYW5CZUZpbmFsL1NDUjc0MjhfMS9zcmMvSnVuay5qYXZhCkBAIC0wLDAgKzEsMjQgQEAKK3B1YmxpYyBmaW5hbCBjbGFzcyBKdW5rCisgICB7CisgICBwdWJsaWMgdm9pZCBzaWxseU1ldGhvZCgpCisgICAgICB7CisgICAgICBTdHJpbmcgYmFyID0gImJhciI7CisgICAgICB0cnkKKyAgICAgICAgIHsKKyAgICAgICAgIGludCBpID0gMTsKKyAgICAgICAgIFN0cmluZyBmb28gPSAiZm9vIjsKKyAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiWyIgKyBiYXIgKyAifCIgKyBpICsgInwiICsgZm9vICsgIl0iKTsKKyAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oKTsKKyAgICAgICAgIH0KKyAgICAgIGNhdGNoIChFeGNlcHRpb24gZSkKKyAgICAgICAgIHsKKyAgICAgICAgIGludCBqID0gMjsKKyAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiaiA9IFsiICsgaiArICJdIik7CisgICAgICAgICB9CisgICAgICBmaW5hbGx5CisgICAgICAgICB7CisgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIGZpbmFsbHkiKTsKKyAgICAgICAgIH0KKyAgICAgIH0KKyAgIH0KKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vbG9jYWxDYW5CZUZpbmFsL1NDUjc2MDEvZXhwZWN0ZWQueG1sIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vbG9jYWxDYW5CZUZpbmFsL1NDUjc2MDEvZXhwZWN0ZWQueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIzYjg2MjIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9sb2NhbENhbkJlRmluYWwvU0NSNzYwMS9leHBlY3RlZC54bWwKQEAgLTAsMCArMSw5IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHByb2JsZW1zPgorICA8cHJvYmxlbT4KKyAgICA8ZmlsZT5UZXN0RmluYWwyLmphdmE8L2ZpbGU+CisgICAgPGxpbmU+NDwvbGluZT4KKyAgICA8ZGVzY3JpcHRpb24+aSBmaW5hbDwvZGVzY3JpcHRpb24+CisgIDwvcHJvYmxlbT4KKzwvcHJvYmxlbXM+CisKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2xvY2FsQ2FuQmVGaW5hbC9TQ1I3NjAxL3NyYy9UZXN0RmluYWwyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9sb2NhbENhbkJlRmluYWwvU0NSNzYwMS9zcmMvVGVzdEZpbmFsMi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ3ZTFkMDcKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9sb2NhbENhbkJlRmluYWwvU0NSNzYwMS9zcmMvVGVzdEZpbmFsMi5qYXZhCkBAIC0wLDAgKzEsOCBAQAorcHVibGljIGNsYXNzIFRlc3RGaW5hbDIgeworICAgIHN0YXRpYyB2b2lkIGZvbyhmaW5hbCBib29sZWFuIGIpIHsKKwlpZiAoYikgeworCSAgICBpbnQgaSA9IDEyOworCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oImkgPSAiICsgaSk7CisJfQorICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2xvY2FsQ2FuQmVGaW5hbC9mb3JlYWNoL2V4cGVjdGVkLnhtbCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2xvY2FsQ2FuQmVGaW5hbC9mb3JlYWNoL2V4cGVjdGVkLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYmY3MzNjCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vbG9jYWxDYW5CZUZpbmFsL2ZvcmVhY2gvZXhwZWN0ZWQueG1sCkBAIC0wLDAgKzEsOSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxwcm9ibGVtcz4KKyAgPHByb2JsZW0+CisgICAgPGZpbGU+VGVzdEZpbmFsMi5qYXZhPC9maWxlPgorICAgIDxsaW5lPjM8L2xpbmU+CisgICAgPGRlc2NyaXB0aW9uPmJ4IGZpbmFsPC9kZXNjcmlwdGlvbj4KKyAgPC9wcm9ibGVtPgorPC9wcm9ibGVtcz4KKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vbG9jYWxDYW5CZUZpbmFsL2ZvcmVhY2gvc3JjL1Rlc3RGaW5hbDIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2xvY2FsQ2FuQmVGaW5hbC9mb3JlYWNoL3NyYy9UZXN0RmluYWwyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjcwMDIzNgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2xvY2FsQ2FuQmVGaW5hbC9mb3JlYWNoL3NyYy9UZXN0RmluYWwyLmphdmEKQEAgLTAsMCArMSwxMCBAQAorcHVibGljIGNsYXNzIFRlc3RGaW5hbDIgeworICAgIHN0YXRpYyB2b2lkIGZvbyhmaW5hbCBib29sZWFuW10gYikgeworICAgICAgICBmb3IoYm9vbGVhbiBieCA6IGIpIHsKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiYnggPSAiICsgYngpOworICAgICAgICB9CisgICAgICAgIGZvcihib29sZWFuIGJ5IDogYikgeworICAgICAgICAgICAgYnkgPSBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2xvY2FsQ2FuQmVGaW5hbC9pZi9leHBlY3RlZC54bWwgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9sb2NhbENhbkJlRmluYWwvaWYvZXhwZWN0ZWQueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjExNGRmZDQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9sb2NhbENhbkJlRmluYWwvaWYvZXhwZWN0ZWQueG1sCkBAIC0wLDAgKzEsOSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxwcm9ibGVtcz4KKyAgPHByb2JsZW0+CisgICAgPGZpbGU+VGVzdC5qYXZhPC9maWxlPgorICAgIDxsaW5lPjQ8L2xpbmU+CisgICAgPGRlc2NyaXB0aW9uPmZpbmFsPC9kZXNjcmlwdGlvbj4KKyAgPC9wcm9ibGVtPgorPC9wcm9ibGVtcz4KKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vbG9jYWxDYW5CZUZpbmFsL2lmL3NyYy9UZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9sb2NhbENhbkJlRmluYWwvaWYvc3JjL1Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMzI5ZDYzCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vbG9jYWxDYW5CZUZpbmFsL2lmL3NyYy9UZXN0LmphdmEKQEAgLTAsMCArMSwxMSBAQAorcHVibGljIGNsYXNzIFRlc3R7CisKKyAgcHVibGljIHZvaWQgdCgpIHsKKyAgICBPYmplY3QgdjsKKyAgICBpZiAodHJ1ZSkgeworICAgICAgdiA9IG5ldyBPYmplY3QoKTsgCisgICAgfSBlbHNlIHsKKyAgICAgIHYgPSBuZXcgT2JqZWN0KCk7CisgICAgfQorICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vbG9jYWxDYW5CZUZpbmFsL2luY29tcGxldGVBc3NpZ25tZW50L2V4cGVjdGVkLnhtbCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2xvY2FsQ2FuQmVGaW5hbC9pbmNvbXBsZXRlQXNzaWdubWVudC9leHBlY3RlZC54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2M4YThlZgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2xvY2FsQ2FuQmVGaW5hbC9pbmNvbXBsZXRlQXNzaWdubWVudC9leHBlY3RlZC54bWwKQEAgLTAsMCArMSw5IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHByb2JsZW1zPgorICA8cHJvYmxlbT4KKyAgICA8ZmlsZT5UZXN0LmphdmE8L2ZpbGU+CisgICAgPGxpbmU+NTwvbGluZT4KKyAgICA8ZGVzY3JpcHRpb24+byBmaW5hbDwvZGVzY3JpcHRpb24+CisgIDwvcHJvYmxlbT4KKzwvcHJvYmxlbXM+CisKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2xvY2FsQ2FuQmVGaW5hbC9pbmNvbXBsZXRlQXNzaWdubWVudC9zcmMvVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vbG9jYWxDYW5CZUZpbmFsL2luY29tcGxldGVBc3NpZ25tZW50L3NyYy9UZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWM0YWI5MQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2xvY2FsQ2FuQmVGaW5hbC9pbmNvbXBsZXRlQXNzaWdubWVudC9zcmMvVGVzdC5qYXZhCkBAIC0wLDAgKzEsMTMgQEAKK3B1YmxpYyBjbGFzcyBUZXN0eworCisgIHB1YmxpYyB2b2lkIHQoKSB7CisgICAgT2JqZWN0IHY7CisgICAgT2JqZWN0IG87CisgICAgaWYgKHRydWUpIHsKKyAgICAgIHYgPSBuZXcgT2JqZWN0KCk7IAorICAgICAgbyA9IG5ldyBPYmplY3QoKTsKKyAgICB9IGVsc2UgeworICAgIH0KKyAgICBTeXN0ZW0ub3V0LnByaW50bG4odik7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9sb2NhbENhbkJlRmluYWwvbXVsdGlXcml0ZU5vUmVhZC9leHBlY3RlZC54bWwgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9sb2NhbENhbkJlRmluYWwvbXVsdGlXcml0ZU5vUmVhZC9leHBlY3RlZC54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWFjODc5ZAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2xvY2FsQ2FuQmVGaW5hbC9tdWx0aVdyaXRlTm9SZWFkL2V4cGVjdGVkLnhtbApAQCAtMCwwICsxLDMgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8cHJvYmxlbXMgLz4KKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vbG9jYWxDYW5CZUZpbmFsL211bHRpV3JpdGVOb1JlYWQvc3JjL1Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2xvY2FsQ2FuQmVGaW5hbC9tdWx0aVdyaXRlTm9SZWFkL3NyYy9UZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmEwODQ5MAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2xvY2FsQ2FuQmVGaW5hbC9tdWx0aVdyaXRlTm9SZWFkL3NyYy9UZXN0LmphdmEKQEAgLTAsMCArMSw5IEBACitwdWJsaWMgY2xhc3MgVGVzdHsKKworICBwdWJsaWMgdm9pZCB0KCkgeworICAgIE9iamVjdCB2OworICAgIGZvciAoaW50IGkgPSAwO2k8MTA7aSsrKSB7CisgICAgICB2ID0gbmV3IE9iamVjdCgpOworICAgIH0KKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2xvY2FsQ2FuQmVGaW5hbC9wYXJhbWV0ZXJzL2V4cGVjdGVkLnhtbCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL2xvY2FsQ2FuQmVGaW5hbC9wYXJhbWV0ZXJzL2V4cGVjdGVkLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMWQzYTI5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vbG9jYWxDYW5CZUZpbmFsL3BhcmFtZXRlcnMvZXhwZWN0ZWQueG1sCkBAIC0wLDAgKzEsOSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxwcm9ibGVtcz4KKyAgPHByb2JsZW0+CisgICAgPGZpbGU+VGVzdC5qYXZhPC9maWxlPgorICAgIDxsaW5lPjM8L2xpbmU+CisgICAgPGRlc2NyaXB0aW9uPmFyZ3MgZmluYWw8L2Rlc2NyaXB0aW9uPgorICA8L3Byb2JsZW0+Cis8L3Byb2JsZW1zPgorCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9sb2NhbENhbkJlRmluYWwvcGFyYW1ldGVycy9zcmMvVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vbG9jYWxDYW5CZUZpbmFsL3BhcmFtZXRlcnMvc3JjL1Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMTA0ZDNmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vbG9jYWxDYW5CZUZpbmFsL3BhcmFtZXRlcnMvc3JjL1Rlc3QuamF2YQpAQCAtMCwwICsxLDE5IEBACitwdWJsaWMgY2xhc3MgVGVzdAoreworICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKyAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oYXJnc1swXSk7CisgICAgfQorCisgICAgcHVibGljIHN0YXRpYyB2b2lkIGZvbyhTdHJpbmcgY2Fubm90QmVGaW5hbCkgeworICAgICAgIGNhbm5vdEJlRmluYWwgPSAiIjsKKyAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oY2Fubm90QmVGaW5hbCk7CisgICAgfQorCisgICAgcHVibGljIHN0YXRpYyB2b2lkIGJhcihmaW5hbCBTdHJpbmcgYWxyZWFkeUZpbmFsKSB7CisgICAgICAgU3lzdGVtLm91dC5wcmludGxuKGFscmVhZHlGaW5hbCk7CisgICAgfQorCisgICAgcHVibGljIHN0YXRpYyB2b2lkIGJhcjEoZmluYWwgU3RyaW5nIGFscmVhZHlGaW5hbCkgeworICAgIH0KK30KKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vbWFnaWMvc2ltcGxlL2V4cGVjdGVkLnhtbCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL21hZ2ljL3NpbXBsZS9leHBlY3RlZC54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTI0N2JlOQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL21hZ2ljL3NpbXBsZS9leHBlY3RlZC54bWwKQEAgLTAsMCArMSw0NDkgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8cHJvYmxlbXM+CisgIDwhLS08cHJvYmxlbT4tLT4KKyAgICA8IS0tPGZpbGU+WC5qYXZhPC9maWxlPi0tPgorICAgIDwhLS08bGluZT41PC9saW5lPi0tPgorICAgIDwhLS08cHJvYmxlbV9jbGFzcz5EdXBsaWNhdGUgdGhyb3dzPC9wcm9ibGVtX2NsYXNzPi0tPgorICAgIDwhLS08ZGVzY3JpcHRpb24+RHVwbGljYXRlIHRocm93czwvZGVzY3JpcHRpb24+LS0+CisgIDwhLS08L3Byb2JsZW0+LS0+CisKKyAgPHByb2JsZW0+CisgICAgPGZpbGU+WC5qYXZhPC9maWxlPgorICAgIDxsaW5lPjI5PC9saW5lPgorICAgIAorICAgIAorICAgIAorICAgIDxwcm9ibGVtX2NsYXNzIHNldmVyaXR5PSJXQVJOSU5HIiBhdHRyaWJ1dGVfa2V5PSJXQVJOSU5HX0FUVFJJQlVURVMiPm1hZ2ljIGNvbnN0YW50PC9wcm9ibGVtX2NsYXNzPgorICAgIDxkZXNjcmlwdGlvbj5NdXN0IGJlIG9uZSBvZjogQ29uc3QuWCwgQ29uc3QuWSwgQ29uc3QuWjwvZGVzY3JpcHRpb24+CisgIDwvcHJvYmxlbT4KKyAgCisgIAorICAKKyAgPHByb2JsZW0+CisgICAgPGZpbGU+WC5qYXZhPC9maWxlPgorICAgIDxsaW5lPjMwPC9saW5lPgorICAgIAorICAgIAorICAgIAorICAgIDxwcm9ibGVtX2NsYXNzIHNldmVyaXR5PSJXQVJOSU5HIiBhdHRyaWJ1dGVfa2V5PSJXQVJOSU5HX0FUVFJJQlVURVMiPm1hZ2ljIGNvbnN0YW50PC9wcm9ibGVtX2NsYXNzPgorICAgIDxkZXNjcmlwdGlvbj5NdXN0IGJlIG9uZSBvZjogQ29uc3QuWCwgQ29uc3QuWSwgQ29uc3QuWjwvZGVzY3JpcHRpb24+CisgIDwvcHJvYmxlbT4KKyAgCisgIAorICAKKyAgPHByb2JsZW0+CisgICAgPGZpbGU+WC5qYXZhPC9maWxlPgorICAgIDxsaW5lPjMxPC9saW5lPgorICAgIAorICAgIAorICAgIAorICAgIDxwcm9ibGVtX2NsYXNzIHNldmVyaXR5PSJXQVJOSU5HIiBhdHRyaWJ1dGVfa2V5PSJXQVJOSU5HX0FUVFJJQlVURVMiPm1hZ2ljIGNvbnN0YW50PC9wcm9ibGVtX2NsYXNzPgorICAgIDxkZXNjcmlwdGlvbj5NdXN0IGJlIG9uZSBvZjogQ29uc3QuWCwgQ29uc3QuWSwgQ29uc3QuWjwvZGVzY3JpcHRpb24+CisgIDwvcHJvYmxlbT4KKyAgCisgIAorICAKKyAgPHByb2JsZW0+CisgICAgPGZpbGU+WC5qYXZhPC9maWxlPgorICAgIDxsaW5lPjMzPC9saW5lPgorICAgIAorICAgIAorICAgIAorICAgIDxwcm9ibGVtX2NsYXNzIHNldmVyaXR5PSJXQVJOSU5HIiBhdHRyaWJ1dGVfa2V5PSJXQVJOSU5HX0FUVFJJQlVURVMiPm1hZ2ljIGNvbnN0YW50PC9wcm9ibGVtX2NsYXNzPgorICAgIDxkZXNjcmlwdGlvbj5NdXN0IGJlIG9uZSBvZjogQ29uc3QuWCwgQ29uc3QuWSwgQ29uc3QuWjwvZGVzY3JpcHRpb24+CisgIDwvcHJvYmxlbT4KKyAgCisgIAorICAKKyAgPHByb2JsZW0+CisgICAgPGZpbGU+WC5qYXZhPC9maWxlPgorICAgIDxsaW5lPjM0PC9saW5lPgorICAgIAorICAgIAorICAgIAorICAgIDxwcm9ibGVtX2NsYXNzIHNldmVyaXR5PSJXQVJOSU5HIiBhdHRyaWJ1dGVfa2V5PSJXQVJOSU5HX0FUVFJJQlVURVMiPm1hZ2ljIGNvbnN0YW50PC9wcm9ibGVtX2NsYXNzPgorICAgIDxkZXNjcmlwdGlvbj5NdXN0IGJlIG9uZSBvZjogQ29uc3QuWCwgQ29uc3QuWSwgQ29uc3QuWjwvZGVzY3JpcHRpb24+CisgIDwvcHJvYmxlbT4KKyAgCisgIAorICAKKyAgPHByb2JsZW0+CisgICAgPGZpbGU+WC5qYXZhPC9maWxlPgorICAgIDxsaW5lPjM1PC9saW5lPgorICAgIAorICAgIAorICAgIAorICAgIDxwcm9ibGVtX2NsYXNzIHNldmVyaXR5PSJXQVJOSU5HIiBhdHRyaWJ1dGVfa2V5PSJXQVJOSU5HX0FUVFJJQlVURVMiPm1hZ2ljIGNvbnN0YW50PC9wcm9ibGVtX2NsYXNzPgorICAgIDxkZXNjcmlwdGlvbj5NdXN0IGJlIG9uZSBvZjogQ29uc3QuWCwgQ29uc3QuWSwgQ29uc3QuWjwvZGVzY3JpcHRpb24+CisgIDwvcHJvYmxlbT4KKyAgCisgIAorICAKKyAgPHByb2JsZW0+CisgICAgPGZpbGU+WC5qYXZhPC9maWxlPgorICAgIDxsaW5lPjM2PC9saW5lPgorICAgIAorICAgIAorICAgIAorICAgIDxwcm9ibGVtX2NsYXNzIHNldmVyaXR5PSJXQVJOSU5HIiBhdHRyaWJ1dGVfa2V5PSJXQVJOSU5HX0FUVFJJQlVURVMiPm1hZ2ljIGNvbnN0YW50PC9wcm9ibGVtX2NsYXNzPgorICAgIDxkZXNjcmlwdGlvbj5NdXN0IGJlIG9uZSBvZjogQ29uc3QuWCwgQ29uc3QuWSwgQ29uc3QuWjwvZGVzY3JpcHRpb24+CisgIDwvcHJvYmxlbT4KKyAgCisKKyAgCis8cHJvYmxlbT4KKyAgPGZpbGU+WC5qYXZhPC9maWxlPgorICA8bGluZT41NTwvbGluZT4KKyAgCisgIAorICAKKyAgPHByb2JsZW1fY2xhc3Mgc2V2ZXJpdHk9IldBUk5JTkciIGF0dHJpYnV0ZV9rZXk9IldBUk5JTkdfQVRUUklCVVRFUyI+bWFnaWMgY29uc3RhbnQ8L3Byb2JsZW1fY2xhc3M+CisgIDxkZXNjcmlwdGlvbj5NdXN0IGJlIG9uZSBvZjogQ29uc3QuWCwgQ29uc3QuWSwgQ29uc3QuWjwvZGVzY3JpcHRpb24+Cis8L3Byb2JsZW0+CisKKworCis8cHJvYmxlbT4KKyAgPGZpbGU+WC5qYXZhPC9maWxlPgorICA8bGluZT41NjwvbGluZT4KKyAgCisgIAorICAKKyAgPHByb2JsZW1fY2xhc3Mgc2V2ZXJpdHk9IldBUk5JTkciIGF0dHJpYnV0ZV9rZXk9IldBUk5JTkdfQVRUUklCVVRFUyI+bWFnaWMgY29uc3RhbnQ8L3Byb2JsZW1fY2xhc3M+CisgIDxkZXNjcmlwdGlvbj5NdXN0IGJlIG9uZSBvZjogQ29uc3QuWCwgQ29uc3QuWSwgQ29uc3QuWjwvZGVzY3JpcHRpb24+Cis8L3Byb2JsZW0+CisKKworCis8cHJvYmxlbT4KKyAgPGZpbGU+WC5qYXZhPC9maWxlPgorICA8bGluZT41NzwvbGluZT4KKyAgCisgIAorICAKKyAgPHByb2JsZW1fY2xhc3Mgc2V2ZXJpdHk9IldBUk5JTkciIGF0dHJpYnV0ZV9rZXk9IldBUk5JTkdfQVRUUklCVVRFUyI+bWFnaWMgY29uc3RhbnQ8L3Byb2JsZW1fY2xhc3M+CisgIDxkZXNjcmlwdGlvbj5NdXN0IGJlIG9uZSBvZjogQ29uc3QuWCwgQ29uc3QuWSwgQ29uc3QuWjwvZGVzY3JpcHRpb24+Cis8L3Byb2JsZW0+CisKKworCis8cHJvYmxlbT4KKyAgPGZpbGU+WC5qYXZhPC9maWxlPgorICA8bGluZT41OTwvbGluZT4KKyAgCisgIAorICAKKyAgPHByb2JsZW1fY2xhc3Mgc2V2ZXJpdHk9IldBUk5JTkciIGF0dHJpYnV0ZV9rZXk9IldBUk5JTkdfQVRUUklCVVRFUyI+bWFnaWMgY29uc3RhbnQ8L3Byb2JsZW1fY2xhc3M+CisgIDxkZXNjcmlwdGlvbj5NdXN0IGJlIG9uZSBvZjogQ29uc3QuWCwgQ29uc3QuWSwgQ29uc3QuWjwvZGVzY3JpcHRpb24+Cis8L3Byb2JsZW0+CisKKworCis8cHJvYmxlbT4KKyAgPGZpbGU+WC5qYXZhPC9maWxlPgorICA8bGluZT42MDwvbGluZT4KKyAgCisgIAorICAKKyAgPHByb2JsZW1fY2xhc3Mgc2V2ZXJpdHk9IldBUk5JTkciIGF0dHJpYnV0ZV9rZXk9IldBUk5JTkdfQVRUUklCVVRFUyI+bWFnaWMgY29uc3RhbnQ8L3Byb2JsZW1fY2xhc3M+CisgIDxkZXNjcmlwdGlvbj5NdXN0IGJlIG9uZSBvZjogQ29uc3QuWCwgQ29uc3QuWSwgQ29uc3QuWjwvZGVzY3JpcHRpb24+Cis8L3Byb2JsZW0+CisKKworCis8cHJvYmxlbT4KKyAgPGZpbGU+WC5qYXZhPC9maWxlPgorICA8bGluZT42MTwvbGluZT4KKyAgCisgIAorICAKKyAgPHByb2JsZW1fY2xhc3Mgc2V2ZXJpdHk9IldBUk5JTkciIGF0dHJpYnV0ZV9rZXk9IldBUk5JTkdfQVRUUklCVVRFUyI+bWFnaWMgY29uc3RhbnQ8L3Byb2JsZW1fY2xhc3M+CisgIDxkZXNjcmlwdGlvbj5NdXN0IGJlIG9uZSBvZjogQ29uc3QuWCwgQ29uc3QuWSwgQ29uc3QuWjwvZGVzY3JpcHRpb24+Cis8L3Byb2JsZW0+CisKKworCis8cHJvYmxlbT4KKyAgPGZpbGU+WC5qYXZhPC9maWxlPgorICA8bGluZT42MjwvbGluZT4KKyAgCisgIAorICAKKyAgPHByb2JsZW1fY2xhc3Mgc2V2ZXJpdHk9IldBUk5JTkciIGF0dHJpYnV0ZV9rZXk9IldBUk5JTkdfQVRUUklCVVRFUyI+bWFnaWMgY29uc3RhbnQ8L3Byb2JsZW1fY2xhc3M+CisgIDxkZXNjcmlwdGlvbj5NdXN0IGJlIG9uZSBvZjogQ29uc3QuWCwgQ29uc3QuWSwgQ29uc3QuWjwvZGVzY3JpcHRpb24+Cis8L3Byb2JsZW0+CisKKworPHByb2JsZW0+CisgICA8ZmlsZT5YLmphdmE8L2ZpbGU+CisgICA8bGluZT44MTwvbGluZT4KKyAgIDxwcm9ibGVtX2NsYXNzIHNldmVyaXR5PSJXQVJOSU5HIiBhdHRyaWJ1dGVfa2V5PSJXQVJOSU5HX0FUVFJJQlVURVMiPm1hZ2ljIGNvbnN0YW50PC9wcm9ibGVtX2NsYXNzPgorICAgPGRlc2NyaXB0aW9uPk11c3QgYmUgb25lIG9mOiBDb25zdC5YLCBDb25zdC5ZLCBDb25zdC5aPC9kZXNjcmlwdGlvbj4KKyA8L3Byb2JsZW0+CisKKyAgCisgIDxwcm9ibGVtPgorICAgIDxmaWxlPlguamF2YTwvZmlsZT4KKyAgICA8bGluZT44MjwvbGluZT4KKyAgICAKKyAgICAKKyAgICAKKyAgICA8cHJvYmxlbV9jbGFzcyBzZXZlcml0eT0iV0FSTklORyIgYXR0cmlidXRlX2tleT0iV0FSTklOR19BVFRSSUJVVEVTIj5tYWdpYyBjb25zdGFudDwvcHJvYmxlbV9jbGFzcz4KKyAgICA8ZGVzY3JpcHRpb24+TXVzdCBiZSBvbmUgb2Y6IENvbnN0LlgsIENvbnN0LlksIENvbnN0Llo8L2Rlc2NyaXB0aW9uPgorICA8L3Byb2JsZW0+CisgIAorICAKKyAgCisgIDxwcm9ibGVtPgorICAgIDxmaWxlPlguamF2YTwvZmlsZT4KKyAgICA8bGluZT44MzwvbGluZT4KKyAgICAKKyAgICAKKyAgICAKKyAgICA8cHJvYmxlbV9jbGFzcyBzZXZlcml0eT0iV0FSTklORyIgYXR0cmlidXRlX2tleT0iV0FSTklOR19BVFRSSUJVVEVTIj5tYWdpYyBjb25zdGFudDwvcHJvYmxlbV9jbGFzcz4KKyAgICA8ZGVzY3JpcHRpb24+TXVzdCBiZSBvbmUgb2Y6IENvbnN0LlgsIENvbnN0LlksIENvbnN0Llo8L2Rlc2NyaXB0aW9uPgorICA8L3Byb2JsZW0+CisgIAorICAKKyAgCisgIDxwcm9ibGVtPgorICAgIDxmaWxlPlguamF2YTwvZmlsZT4KKyAgICA8bGluZT44NTwvbGluZT4KKyAgICAKKyAgICAKKyAgICAKKyAgICA8cHJvYmxlbV9jbGFzcyBzZXZlcml0eT0iV0FSTklORyIgYXR0cmlidXRlX2tleT0iV0FSTklOR19BVFRSSUJVVEVTIj5tYWdpYyBjb25zdGFudDwvcHJvYmxlbV9jbGFzcz4KKyAgICA8ZGVzY3JpcHRpb24+TXVzdCBiZSBvbmUgb2Y6IENvbnN0LlgsIENvbnN0LlksIENvbnN0Llo8L2Rlc2NyaXB0aW9uPgorICA8L3Byb2JsZW0+CisgIAorICAKKyAgCisgIDxwcm9ibGVtPgorICAgIDxmaWxlPlguamF2YTwvZmlsZT4KKyAgICA8bGluZT44NjwvbGluZT4KKyAgICAKKyAgICAKKyAgICAKKyAgICA8cHJvYmxlbV9jbGFzcyBzZXZlcml0eT0iV0FSTklORyIgYXR0cmlidXRlX2tleT0iV0FSTklOR19BVFRSSUJVVEVTIj5tYWdpYyBjb25zdGFudDwvcHJvYmxlbV9jbGFzcz4KKyAgICA8ZGVzY3JpcHRpb24+TXVzdCBiZSBvbmUgb2Y6IENvbnN0LlgsIENvbnN0LlksIENvbnN0Llo8L2Rlc2NyaXB0aW9uPgorICA8L3Byb2JsZW0+CisgIAorICAKKyAgCisgIDxwcm9ibGVtPgorICAgIDxmaWxlPlguamF2YTwvZmlsZT4KKyAgICA8bGluZT44NzwvbGluZT4KKyAgICAKKyAgICAKKyAgICAKKyAgICA8cHJvYmxlbV9jbGFzcyBzZXZlcml0eT0iV0FSTklORyIgYXR0cmlidXRlX2tleT0iV0FSTklOR19BVFRSSUJVVEVTIj5tYWdpYyBjb25zdGFudDwvcHJvYmxlbV9jbGFzcz4KKyAgICA8ZGVzY3JpcHRpb24+TXVzdCBiZSBvbmUgb2Y6IENvbnN0LlgsIENvbnN0LlksIENvbnN0Llo8L2Rlc2NyaXB0aW9uPgorICA8L3Byb2JsZW0+CisgIAorICAKKyAgCisgIDxwcm9ibGVtPgorICAgIDxmaWxlPlguamF2YTwvZmlsZT4KKyAgICA8bGluZT44ODwvbGluZT4KKyAgICAKKyAgICAKKyAgICAKKyAgICA8cHJvYmxlbV9jbGFzcyBzZXZlcml0eT0iV0FSTklORyIgYXR0cmlidXRlX2tleT0iV0FSTklOR19BVFRSSUJVVEVTIj5tYWdpYyBjb25zdGFudDwvcHJvYmxlbV9jbGFzcz4KKyAgICA8ZGVzY3JpcHRpb24+TXVzdCBiZSBvbmUgb2Y6IENvbnN0LlgsIENvbnN0LlksIENvbnN0Llo8L2Rlc2NyaXB0aW9uPgorICA8L3Byb2JsZW0+CisgIAorICAKKyAgPHByb2JsZW0+CisgICAgPGZpbGU+WC5qYXZhPC9maWxlPgorICAgIDxsaW5lPjExODwvbGluZT4KKyAgICA8cHJvYmxlbV9jbGFzcyBzZXZlcml0eT0iV0FSTklORyIgYXR0cmlidXRlX2tleT0iV0FSTklOR19BVFRSSUJVVEVTIj5tYWdpYyBjb25zdGFudDwvcHJvYmxlbV9jbGFzcz4KKyAgICA8ZGVzY3JpcHRpb24+TXVzdCBiZSBvbmUgb2Y6IENvbnN0LlgsIENvbnN0LlksIENvbnN0Llo8L2Rlc2NyaXB0aW9uPgorICA8L3Byb2JsZW0+CisKKyA8cHJvYmxlbT4KKyAgIDxmaWxlPlguamF2YTwvZmlsZT4KKyAgIDxsaW5lPjExOTwvbGluZT4KKyAgIDxwcm9ibGVtX2NsYXNzIHNldmVyaXR5PSJXQVJOSU5HIiBhdHRyaWJ1dGVfa2V5PSJXQVJOSU5HX0FUVFJJQlVURVMiPm1hZ2ljIGNvbnN0YW50PC9wcm9ibGVtX2NsYXNzPgorICAgPGRlc2NyaXB0aW9uPk11c3QgYmUgb25lIG9mOiBDb25zdC5YLCBDb25zdC5ZLCBDb25zdC5aPC9kZXNjcmlwdGlvbj4KKyA8L3Byb2JsZW0+CisgCisgCisgCisgPHByb2JsZW0+CisgICA8ZmlsZT5YLmphdmE8L2ZpbGU+CisgICA8bGluZT4xMjI8L2xpbmU+CisgICAKKyAgIAorICAgCisgICA8cHJvYmxlbV9jbGFzcyBzZXZlcml0eT0iV0FSTklORyIgYXR0cmlidXRlX2tleT0iV0FSTklOR19BVFRSSUJVVEVTIj5tYWdpYyBjb25zdGFudDwvcHJvYmxlbV9jbGFzcz4KKyAgIDxkZXNjcmlwdGlvbj5NdXN0IGJlIG9uZSBvZjogQ29uc3QuWCwgQ29uc3QuWSwgQ29uc3QuWjwvZGVzY3JpcHRpb24+CisgPC9wcm9ibGVtPgorIAorIAorIAorIDxwcm9ibGVtPgorICAgPGZpbGU+WC5qYXZhPC9maWxlPgorICAgPGxpbmU+MTIzPC9saW5lPgorICAgCisgICAKKyAgIAorICAgPHByb2JsZW1fY2xhc3Mgc2V2ZXJpdHk9IldBUk5JTkciIGF0dHJpYnV0ZV9rZXk9IldBUk5JTkdfQVRUUklCVVRFUyI+bWFnaWMgY29uc3RhbnQ8L3Byb2JsZW1fY2xhc3M+CisgICA8ZGVzY3JpcHRpb24+TXVzdCBiZSBvbmUgb2Y6IENvbnN0LlgsIENvbnN0LlksIENvbnN0Llo8L2Rlc2NyaXB0aW9uPgorIDwvcHJvYmxlbT4KKyAKKyAKKyAKKyA8cHJvYmxlbT4KKyAgIDxmaWxlPlguamF2YTwvZmlsZT4KKyAgIDxsaW5lPjEyNDwvbGluZT4KKyAgIAorICAgCisgICAKKyAgIDxwcm9ibGVtX2NsYXNzIHNldmVyaXR5PSJXQVJOSU5HIiBhdHRyaWJ1dGVfa2V5PSJXQVJOSU5HX0FUVFJJQlVURVMiPm1hZ2ljIGNvbnN0YW50PC9wcm9ibGVtX2NsYXNzPgorICAgPGRlc2NyaXB0aW9uPk11c3QgYmUgb25lIG9mOiBDb25zdC5YLCBDb25zdC5ZLCBDb25zdC5aPC9kZXNjcmlwdGlvbj4KKyA8L3Byb2JsZW0+CisgCisgCisgCisgPHByb2JsZW0+CisgICA8ZmlsZT5YLmphdmE8L2ZpbGU+CisgICA8bGluZT4xMjU8L2xpbmU+CisgICAKKyAgIAorICAgCisgICA8cHJvYmxlbV9jbGFzcyBzZXZlcml0eT0iV0FSTklORyIgYXR0cmlidXRlX2tleT0iV0FSTklOR19BVFRSSUJVVEVTIj5tYWdpYyBjb25zdGFudDwvcHJvYmxlbV9jbGFzcz4KKyAgIDxkZXNjcmlwdGlvbj5NdXN0IGJlIG9uZSBvZjogQ29uc3QuWCwgQ29uc3QuWSwgQ29uc3QuWjwvZGVzY3JpcHRpb24+CisgPC9wcm9ibGVtPgorIAorCisgIAorCis8cHJvYmxlbT4KKyAgPGZpbGU+WC5qYXZhPC9maWxlPgorICA8bGluZT4xNzM8L2xpbmU+CisgIDxwcm9ibGVtX2NsYXNzIHNldmVyaXR5PSJXQVJOSU5HIiBhdHRyaWJ1dGVfa2V5PSJXQVJOSU5HX0FUVFJJQlVURVMiPm1hZ2ljIGNvbnN0YW50PC9wcm9ibGVtX2NsYXNzPgorICA8ZGVzY3JpcHRpb24+TXVzdCBiZSBvbmUgb2Y6IENvbnN0LlgsIENvbnN0LlksIENvbnN0Llo8L2Rlc2NyaXB0aW9uPgorPC9wcm9ibGVtPgorCisKKworPHByb2JsZW0+CisgIDxmaWxlPlguamF2YTwvZmlsZT4KKyAgPGxpbmU+MTc0PC9saW5lPgorICA8cHJvYmxlbV9jbGFzcyBzZXZlcml0eT0iV0FSTklORyIgYXR0cmlidXRlX2tleT0iV0FSTklOR19BVFRSSUJVVEVTIj5tYWdpYyBjb25zdGFudDwvcHJvYmxlbV9jbGFzcz4KKyAgPGRlc2NyaXB0aW9uPk11c3QgYmUgb25lIG9mOiBDb25zdC5YLCBDb25zdC5ZLCBDb25zdC5aPC9kZXNjcmlwdGlvbj4KKzwvcHJvYmxlbT4KKworCisKKzxwcm9ibGVtPgorICA8ZmlsZT5YLmphdmE8L2ZpbGU+CisgIDxsaW5lPjE3NTwvbGluZT4KKyAgPHByb2JsZW1fY2xhc3Mgc2V2ZXJpdHk9IldBUk5JTkciIGF0dHJpYnV0ZV9rZXk9IldBUk5JTkdfQVRUUklCVVRFUyI+bWFnaWMgY29uc3RhbnQ8L3Byb2JsZW1fY2xhc3M+CisgIDxkZXNjcmlwdGlvbj5NdXN0IGJlIG9uZSBvZjogQ29uc3QuWCwgQ29uc3QuWSwgQ29uc3QuWjwvZGVzY3JpcHRpb24+Cis8L3Byb2JsZW0+CisKKworCis8cHJvYmxlbT4KKyAgPGZpbGU+WC5qYXZhPC9maWxlPgorICA8bGluZT4xNzc8L2xpbmU+CisgIDxwcm9ibGVtX2NsYXNzIHNldmVyaXR5PSJXQVJOSU5HIiBhdHRyaWJ1dGVfa2V5PSJXQVJOSU5HX0FUVFJJQlVURVMiPm1hZ2ljIGNvbnN0YW50PC9wcm9ibGVtX2NsYXNzPgorICA8ZGVzY3JpcHRpb24+TXVzdCBiZSBvbmUgb2Y6IENvbnN0LlgsIENvbnN0LlksIENvbnN0Llo8L2Rlc2NyaXB0aW9uPgorPC9wcm9ibGVtPgorICAKKworPHByb2JsZW0+CisgIDxmaWxlPlguamF2YTwvZmlsZT4KKyAgPGxpbmU+MTc4PC9saW5lPgorICA8cHJvYmxlbV9jbGFzcyBzZXZlcml0eT0iV0FSTklORyIgYXR0cmlidXRlX2tleT0iV0FSTklOR19BVFRSSUJVVEVTIj5tYWdpYyBjb25zdGFudDwvcHJvYmxlbV9jbGFzcz4KKyAgPGRlc2NyaXB0aW9uPk11c3QgYmUgb25lIG9mOiBDb25zdC5YLCBDb25zdC5ZLCBDb25zdC5aPC9kZXNjcmlwdGlvbj4KKzwvcHJvYmxlbT4KKworCisKKzxwcm9ibGVtPgorICA8ZmlsZT5YLmphdmE8L2ZpbGU+CisgIDxsaW5lPjE3OTwvbGluZT4KKyAgPHByb2JsZW1fY2xhc3Mgc2V2ZXJpdHk9IldBUk5JTkciIGF0dHJpYnV0ZV9rZXk9IldBUk5JTkdfQVRUUklCVVRFUyI+bWFnaWMgY29uc3RhbnQ8L3Byb2JsZW1fY2xhc3M+CisgIDxkZXNjcmlwdGlvbj5NdXN0IGJlIG9uZSBvZjogQ29uc3QuWCwgQ29uc3QuWSwgQ29uc3QuWjwvZGVzY3JpcHRpb24+Cis8L3Byb2JsZW0+CisKKworCis8cHJvYmxlbT4KKyAgPGZpbGU+WC5qYXZhPC9maWxlPgorICA8bGluZT4xODA8L2xpbmU+CisgIDxwcm9ibGVtX2NsYXNzIHNldmVyaXR5PSJXQVJOSU5HIiBhdHRyaWJ1dGVfa2V5PSJXQVJOSU5HX0FUVFJJQlVURVMiPm1hZ2ljIGNvbnN0YW50PC9wcm9ibGVtX2NsYXNzPgorICA8ZGVzY3JpcHRpb24+TXVzdCBiZSBvbmUgb2Y6IENvbnN0LlgsIENvbnN0LlksIENvbnN0Llo8L2Rlc2NyaXB0aW9uPgorPC9wcm9ibGVtPgorICAKKworPHByb2JsZW0+CisgIDxmaWxlPlguamF2YTwvZmlsZT4KKyAgIDxsaW5lPjE5MzwvbGluZT4KKyAgIDxwcm9ibGVtX2NsYXNzIHNldmVyaXR5PSJXQVJOSU5HIiBhdHRyaWJ1dGVfa2V5PSJXQVJOSU5HX0FUVFJJQlVURVMiPm1hZ2ljIGNvbnN0YW50PC9wcm9ibGVtX2NsYXNzPgorICAgPGRlc2NyaXB0aW9uPk11c3QgYmUgb25lIG9mOiBDb25zdC5YLCBDb25zdC5ZPC9kZXNjcmlwdGlvbj4KKyA8L3Byb2JsZW0+CisKKworIDxwcm9ibGVtPgorICAgPGZpbGU+WC5qYXZhPC9maWxlPgorICAgPGxpbmU+MTk1PC9saW5lPgorICAgPHByb2JsZW1fY2xhc3Mgc2V2ZXJpdHk9IldBUk5JTkciIGF0dHJpYnV0ZV9rZXk9IldBUk5JTkdfQVRUUklCVVRFUyI+bWFnaWMgY29uc3RhbnQ8L3Byb2JsZW1fY2xhc3M+CisgICA8ZGVzY3JpcHRpb24+TXVzdCBiZSBvbmUgb2Y6IENvbnN0LlgsIENvbnN0Llk8L2Rlc2NyaXB0aW9uPgorIDwvcHJvYmxlbT4KKworICA8cHJvYmxlbT4KKyAgICA8ZmlsZT5YLmphdmE8L2ZpbGU+CisgICAgPGxpbmU+MjI3PC9saW5lPgorICAgIDxwcm9ibGVtX2NsYXNzIHNldmVyaXR5PSJXQVJOSU5HIiBhdHRyaWJ1dGVfa2V5PSJXQVJOSU5HX0FUVFJJQlVURVMiPm1hZ2ljIGNvbnN0YW50PC9wcm9ibGVtX2NsYXNzPgorICAgIDxkZXNjcmlwdGlvbj5NdXN0IGJlIG9uZSBvZjogQ29uc3QuWCwgQ29uc3QuWTwvZGVzY3JpcHRpb24+CisgIDwvcHJvYmxlbT4KKworCisgIDxwcm9ibGVtPgorICAgIDxmaWxlPlguamF2YTwvZmlsZT4KKyAgICA8bGluZT4yMjg8L2xpbmU+CisgICAgPHByb2JsZW1fY2xhc3Mgc2V2ZXJpdHk9IldBUk5JTkciIGF0dHJpYnV0ZV9rZXk9IldBUk5JTkdfQVRUUklCVVRFUyI+bWFnaWMgY29uc3RhbnQ8L3Byb2JsZW1fY2xhc3M+CisgICAgPGRlc2NyaXB0aW9uPk11c3QgYmUgb25lIG9mOiBDb25zdC5YLCBDb25zdC5ZPC9kZXNjcmlwdGlvbj4KKyAgPC9wcm9ibGVtPgorCisKKyAgPHByb2JsZW0+CisgICAgPGZpbGU+WC5qYXZhPC9maWxlPgorICAgIDxsaW5lPjIyOTwvbGluZT4KKyAgICA8cHJvYmxlbV9jbGFzcyBzZXZlcml0eT0iV0FSTklORyIgYXR0cmlidXRlX2tleT0iV0FSTklOR19BVFRSSUJVVEVTIj5tYWdpYyBjb25zdGFudDwvcHJvYmxlbV9jbGFzcz4KKyAgICA8ZGVzY3JpcHRpb24+TXVzdCBiZSBvbmUgb2Y6IENvbnN0LlgsIENvbnN0Llk8L2Rlc2NyaXB0aW9uPgorICA8L3Byb2JsZW0+CisKKworICA8cHJvYmxlbT4KKyAgICA8ZmlsZT5YLmphdmE8L2ZpbGU+CisgICAgPGxpbmU+MjMwPC9saW5lPgorICAgIDxwcm9ibGVtX2NsYXNzIHNldmVyaXR5PSJXQVJOSU5HIiBhdHRyaWJ1dGVfa2V5PSJXQVJOSU5HX0FUVFJJQlVURVMiPm1hZ2ljIGNvbnN0YW50PC9wcm9ibGVtX2NsYXNzPgorICAgIDxkZXNjcmlwdGlvbj5NdXN0IGJlIG9uZSBvZjogQ29uc3QuWCwgQ29uc3QuWTwvZGVzY3JpcHRpb24+CisgIDwvcHJvYmxlbT4KKworICA8cHJvYmxlbT4KKyAgICA8ZmlsZT5YLmphdmE8L2ZpbGU+CisgICAgPGxpbmU+MjMxPC9saW5lPgorICAgIDxwcm9ibGVtX2NsYXNzIHNldmVyaXR5PSJXQVJOSU5HIiBhdHRyaWJ1dGVfa2V5PSJXQVJOSU5HX0FUVFJJQlVURVMiPm1hZ2ljIGNvbnN0YW50PC9wcm9ibGVtX2NsYXNzPgorICAgIDxkZXNjcmlwdGlvbj5NdXN0IGJlIG9uZSBvZjogQ29uc3QuWCwgQ29uc3QuWTwvZGVzY3JpcHRpb24+CisgIDwvcHJvYmxlbT4KKworICA8cHJvYmxlbT4KKyAgICA8ZmlsZT5YLmphdmE8L2ZpbGU+CisgICAgPGxpbmU+MjM4PC9saW5lPgorICAgIDxwcm9ibGVtX2NsYXNzIHNldmVyaXR5PSJXQVJOSU5HIiBhdHRyaWJ1dGVfa2V5PSJXQVJOSU5HX0FUVFJJQlVURVMiPk1hZ2ljIENvbnN0YW50PC9wcm9ibGVtX2NsYXNzPgorICAgIDxkZXNjcmlwdGlvbj5NdXN0IGJlIG9uZSBvZjogQ2FsZW5kYXIuSkFOVUFSWSwgQ2FsZW5kYXIuRkVCUlVBUlksIENhbGVuZGFyLk1BUkNILCBDYWxlbmRhci5BUFJJTCwgQ2FsZW5kYXIuTUFZLCBDYWxlbmRhci5KVU5FLCBDYWxlbmRhci5KVUxZLCBDYWxlbmRhci5BVUdVU1QsIENhbGVuZGFyLlNFUFRFTUJFUiwgQ2FsZW5kYXIuT0NUT0JFUiwgQ2FsZW5kYXIuTk9WRU1CRVIsIENhbGVuZGFyLkRFQ0VNQkVSPC9kZXNjcmlwdGlvbj4KKyAgPC9wcm9ibGVtPgorCisgIDxwcm9ibGVtPgorICAgIDxmaWxlPlguamF2YTwvZmlsZT4KKyAgICA8bGluZT4yMzk8L2xpbmU+CisgICAgPHByb2JsZW1fY2xhc3Mgc2V2ZXJpdHk9IldBUk5JTkciIGF0dHJpYnV0ZV9rZXk9IldBUk5JTkdfQVRUUklCVVRFUyI+TWFnaWMgQ29uc3RhbnQ8L3Byb2JsZW1fY2xhc3M+CisgICAgPGRlc2NyaXB0aW9uPk11c3QgYmUgb25lIG9mOiBTd2luZ0NvbnN0YW50cy5MRUZULCBTd2luZ0NvbnN0YW50cy5DRU5URVIsIFN3aW5nQ29uc3RhbnRzLlJJR0hULCBTd2luZ0NvbnN0YW50cy5MRUFESU5HLCBTd2luZ0NvbnN0YW50cy5UUkFJTElORzwvZGVzY3JpcHRpb24+CisgIDwvcHJvYmxlbT4KKworPC9wcm9ibGVtcz4KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL21hZ2ljL3NpbXBsZS9zcmMvWC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vbWFnaWMvc2ltcGxlL3NyYy9YLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWZjZjgxMgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL21hZ2ljL3NpbXBsZS9zcmMvWC5qYXZhCkBAIC0wLDAgKzEsMjU5IEBACisvKgorICogQ29weXJpZ2h0IDIwMDAtMjAxMSBKZXRCcmFpbnMgcy5yLm8uCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworaW1wb3J0IG9yZy5pbnRlbGxpai5sYW5nLmFubm90YXRpb25zLk1hZ2ljQ29uc3RhbnQ7CisKK2ltcG9ydCBqYXZhLmlvLio7CisKK2NsYXNzIENvbnN0IHsKKyAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgWCA9IDA7CisgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFkgPSAyOworICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBaID0gMzsKK30KK3B1YmxpYyBjbGFzcyBYIHsKKworICB2b2lkIGYoQE1hZ2ljQ29uc3RhbnQoaW50VmFsdWVzPXtDb25zdC5YLCBDb25zdC5ZLCBDb25zdC5afSkgaW50IHgpIHsKKyAgICAvLy8vLy8vLy8vLyBCQUQKKyAgICBmKDApOworICAgIGYoMSk7CisgICAgZihDb25zdC5YIHwgQ29uc3QuWSk7CisgICAgaW50IGkgPSBDb25zdC5YIHwgQ29uc3QuWTsKKyAgICBmKGkpOworICAgIGlmICh4ID09IDMpIHsKKyAgICAgIHggPSAyOworICAgICAgYXNzZXJ0IHggIT0gMTsKKyAgICB9CisKKyAgICAvLy8vLy8vLy8vLy8vLyBHT09ECisgICAgZihDb25zdC5YKTsKKyAgICBmKENvbnN0LlkpOworICAgIGYoQ29uc3QuWik7CisgICAgaW50IGkyID0gdGhpcyA9PSBudWxsID8gQ29uc3QuWCA6IENvbnN0Llk7CisgICAgZihpMik7CisgICAgaWYgKHggPT0gQ29uc3QuWCkgeworICAgICAgeCA9IENvbnN0Llk7CisgICAgICBhc3NlcnQgeCAhPSBDb25zdC5aOworICAgIH0KKworICAgIGYyKHgpOworICB9CisKKyAgdm9pZCBmMihATWFnaWNDb25zdGFudCh2YWx1ZXNGcm9tQ2xhc3MgPUNvbnN0LmNsYXNzKSBpbnQgeCkgeworICAgIC8vLy8vLy8vLy8vIEJBRAorICAgIGYyKDApOworICAgIGYyKDEpOworICAgIGYyKENvbnN0LlggfCBDb25zdC5ZKTsKKyAgICBpbnQgaSA9IENvbnN0LlggfCBDb25zdC5ZOworICAgIGYyKGkpOworICAgIGlmICh4ID09IDMpIHsKKyAgICAgIHggPSAyOworICAgICAgYXNzZXJ0IHggIT0gMTsKKyAgICB9CisKKyAgICAvLy8vLy8vLy8vLy8vLyBHT09ECisgICAgZjIoQ29uc3QuWCk7CisgICAgZjIoQ29uc3QuWSk7CisgICAgZjIoQ29uc3QuWik7CisgICAgaW50IGkyID0gdGhpcyA9PSBudWxsID8gQ29uc3QuWCA6IENvbnN0Llk7CisgICAgZjIoaTIpOworICAgIGlmICh4ID09IENvbnN0LlgpIHsKKyAgICAgIHggPSBDb25zdC5ZOworICAgICAgYXNzZXJ0IHggIT0gQ29uc3QuWjsKKyAgICB9CisKKyAgICBmKHgpOworICB9CisKKyAgdm9pZCBmMyhATWFnaWNDb25zdGFudChmbGFncyA9e0NvbnN0LlgsIENvbnN0LlksIENvbnN0Llp9KSBpbnQgeCkgeworICAgIC8vLy8vLy8vLy8vIEJBRAorICAgIGYzKDIpOworICAgIGYzKDEpOworICAgIGYoQ29uc3QuWCB8IENvbnN0LlkpOworICAgIGludCBpID0gQ29uc3QuWCB8IDQ7CisgICAgZjMoaSk7CisgICAgaWYgKHggPT0gMykgeworICAgICAgeCA9IDI7CisgICAgICBhc3NlcnQgeCAhPSAxOworICAgIH0KKworICAgIC8vLy8vLy8vLy8vLy8vIEdPT0QKKyAgICBmMyhDb25zdC5YKTsKKyAgICBmMyhDb25zdC5ZKTsKKyAgICBmMyhDb25zdC5aKTsKKworICAgIGludCBpMiA9IHRoaXMgPT0gbnVsbCA/IENvbnN0LlggOiBDb25zdC5ZOworICAgIGYzKGkyKTsKKyAgICBpbnQgaXggPSBDb25zdC5YIHwgQ29uc3QuWTsKKyAgICBmMyhpeCk7CisgICAgZjMoMCk7CisgICAgZjMoLTEpOworICAgIGludCBmID0gMDsKKyAgICBpZiAoeCA9PSBDb25zdC5YKSB7CisgICAgICB4ID0gQ29uc3QuWTsKKyAgICAgIGFzc2VydCB4ICE9IENvbnN0Llo7CisgICAgICBmIHw9IENvbnN0Llk7ICBmICY9IENvbnN0LlggJiB+KENvbnN0LlogfCBDb25zdC5YKTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICBmIHw9IENvbnN0Llg7ICBmID0gZiAmIH4oQ29uc3QuWCB8IENvbnN0LlgpOworICAgIH0KKyAgICBmMyhmKTsKKworICAgIGY0KHgpOworICB9CisKKyAgdm9pZCBmNChATWFnaWNDb25zdGFudChmbGFnc0Zyb21DbGFzcyA9Q29uc3QuY2xhc3MpIGludCB4KSB7CisgICAgLy8vLy8vLy8vLy8gQkFECisgICAgZjQoLTMpOworICAgIGY0KDEpOworICAgIGY0KENvbnN0LlggfCBDb25zdC5ZKTsKKyAgICBpbnQgaSA9IENvbnN0LlggfCA0OworICAgIGY0KGkpOworICAgIGlmICh4ID09IDMpIHsKKyAgICAgIHggPSAyOworICAgICAgYXNzZXJ0IHggIT0gMTsKKyAgICB9CisKKyAgICAvLy8vLy8vLy8vLy8vLyBHT09ECisgICAgZjQoQ29uc3QuWCk7CisgICAgZjQoQ29uc3QuWSk7CisgICAgZjQoQ29uc3QuWik7CisKKyAgICBpbnQgaTIgPSB0aGlzID09IG51bGwgPyBDb25zdC5YIDogQ29uc3QuWTsKKyAgICBmNChpMik7CisgICAgaW50IGl4ID0gQ29uc3QuWCB8IENvbnN0Llk7CisgICAgZjQoaXgpOworICAgIGY0KDApOworICAgIGY0KC0xKTsKKyAgICBpbnQgZiA9IDA7CisgICAgaWYgKHggPT0gQ29uc3QuWCkgeworICAgICAgeCA9IENvbnN0Llk7CisgICAgICBhc3NlcnQgeCAhPSBDb25zdC5aOworICAgICAgZiB8PSBDb25zdC5ZOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgIGYgfD0gQ29uc3QuWDsKKyAgICB9CisgICAgZjQoZik7CisKKyAgICBmMyh4KTsKKyAgfQorCisKKyAgY2xhc3MgQWxpYXMgeworICAgIEBNYWdpY0NvbnN0YW50KGludFZhbHVlcz17Q29uc3QuWCwgQ29uc3QuWSwgQ29uc3QuWn0pCisgICAgQGludGVyZmFjZSBJbnRFbnVte30KKworICAgIHZvaWQgZihASW50RW51bSBpbnQgeCkgeworICAgICAgLy8vLy8vLy8vLy8vLy8gR09PRAorICAgICAgZihDb25zdC5YKTsKKyAgICAgIGYoQ29uc3QuWSk7CisgICAgICBmKENvbnN0LlopOworICAgICAgaW50IGkyID0gdGhpcyA9PSBudWxsID8gQ29uc3QuWCA6IENvbnN0Llk7CisgICAgICBmKGkyKTsKKyAgICAgIGlmICh4ID09IENvbnN0LlgpIHsKKyAgICAgICAgeCA9IENvbnN0Llk7CisgICAgICAgIGFzc2VydCB4ICE9IENvbnN0Llo7CisgICAgICB9CisKKyAgICAgIGYyKHgpOworCisgICAgICAvLy8vLy8vLy8vLyBCQUQKKyAgICAgIGYoMCk7CisgICAgICBmKDEpOworICAgICAgZihDb25zdC5YIHwgQ29uc3QuWSk7CisgICAgICBpbnQgaSA9IENvbnN0LlggfCBDb25zdC5ZOworICAgICAgZihpKTsKKyAgICAgIGlmICh4ID09IDMgfHwgZ2V0Q2xhc3MoKS5pc0ludGVyZmFjZSgpKSB7CisgICAgICAgIHggPSAyOworICAgICAgICBhc3NlcnQgeCAhPSAxOworICAgICAgfQorCisgICAgICBmMih4KTsKKyAgICB9CisgIH0KKworICBjbGFzcyBNYWdpY0Fubm9JbnNpZGVBbm5vdGF0aW9uVXNhZ2UgeworICAgIEBpbnRlcmZhY2UgSUlJIHsKKyAgICAgIEBNYWdpY0NvbnN0YW50KGludFZhbHVlcyA9IHtDb25zdC5YLCBDb25zdC5ZfSkgaW50IHZhbCgpOworICAgIH0KKworICAgIC8vIGJhZAorICAgIEBJSUkodmFsID0gMikKKyAgICBpbnQgaDsKKyAgICBASUlJKHZhbCA9IENvbnN0LlggfCBDb25zdC5ZKQorICAgIHZvaWQgZigpe30KKworICAgIC8vIGdvb2QKKyAgICBASUlJKHZhbCA9IENvbnN0LlgpCisgICAgaW50IGgyOworICB9CisKKyAgYWJzdHJhY3QgY2xhc3MgQmVhbkluZm9QYXJzaW5nIHsKKyAgICAvKioKKyAgICAgKiBAc2VlICAgICAgICBqYXZhLmxhbmcuUnVudGltZSNleGl0KGludCkKKyAgICAgKgorICAgICAqIEBiZWFuaW5mbworICAgICAqICAgcHJlZmVycmVkOiB0cnVlCisgICAgICogICAgICAgYm91bmQ6IHRydWUKKyAgICAgKiAgICAgICAgZW51bTogRE9fTk9USElOR19PTl9DTE9TRSBDb25zdC5YCisgICAgICogICAgICAgICAgICAgIEhJREVfT05fQ0xPU0UgICAgICAgQ29uc3QuWQorICAgICAqIGRlc2NyaXB0aW9uOiBUaGUgZnJhbWUncyBkZWZhdWx0IGNsb3NlIG9wZXJhdGlvbi4KKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBzZXRYKGludCBvcGVyYXRpb24pIHsKKworICAgIH0KKworICAgIHB1YmxpYyBhYnN0cmFjdCBpbnQgZ2V0WCgpOworCisgICAgeworICAgICAgLy8gZ29vZAorICAgICAgc2V0WChDb25zdC5YKTsKKyAgICAgIHNldFgoQ29uc3QuWSk7CisgICAgICBpZiAoZ2V0WCgpID09IENvbnN0LlggfHwgZ2V0WCgpID09IENvbnN0LlkpIHt9CisKKyAgICAgIC8vIGJhZAorICAgICAgc2V0WCgwKTsKKyAgICAgIHNldFgoLTEpOworICAgICAgc2V0WChDb25zdC5aKTsKKyAgICAgIGlmIChnZXRYKCkgPT0gMSkge30KKyAgICAgIGlmIChnZXRYKCkgPT0gQ29uc3QuWikge30KKyAgICB9CisKKyAgfQorCisgIGNsYXNzIEV4dGVybmFsQW5ub3RhdGlvbnMgeworICAgIHZvaWQgZigpIHsKKyAgICAgIGphdmEudXRpbC5DYWxlbmRhci5nZXRJbnN0YW5jZSgpLnNldCgyMDAwLDksMCkKKyAgICAgIG5ldyBqYXZheC5zd2luZy5KTGFiZWwoInRleHQiLCAzKTsKKyAgICB9CisgIH0KKyAgc3RhdGljIGNsYXNzIE92ZXJyaWRlWCBleHRlbmRzIFggeworICAgIHZvaWQgZihpbnQgeCkgeworICAgICAgc3VwZXIuZih4KTsKKyAgICB9CisgIH0KKworICB2b2lkIHBsdXNTdXBwb3J0ZWRJbkZsYWdzKEBNYWdpY0NvbnN0YW50KGZsYWdzID17Q29uc3QuWCwgQ29uc3QuWSwgQ29uc3QuWn0pIGludCB4KSB7CisgICAgLy8vLy8vLy8vLy8vLy8gR09PRAorICAgIHBsdXNTdXBwb3J0ZWRJbkZsYWdzKENvbnN0LlggKyBDb25zdC5ZKTsKKyAgICBwbHVzU3VwcG9ydGVkSW5GbGFncyhDb25zdC5aICsgQ29uc3QuWCArIENvbnN0LlkpOworICAgIHBsdXNTdXBwb3J0ZWRJbkZsYWdzKENvbnN0LlogKyAoQ29uc3QuWCArIENvbnN0LlkpKTsKKworICAgIGludCBpeCA9IENvbnN0LlggKyBDb25zdC5ZOworICAgIHBsdXNTdXBwb3J0ZWRJbkZsYWdzKGl4KTsKKyAgICBwbHVzU3VwcG9ydGVkSW5GbGFncygwKTsKKyAgICBwbHVzU3VwcG9ydGVkSW5GbGFncygtMSk7CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL251bGxhYmxlUHJvYmxlbXMvZ2V0dGVyU2V0dGVyUHJvYmxlbXMvZXhwZWN0ZWQueG1sIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vbnVsbGFibGVQcm9ibGVtcy9nZXR0ZXJTZXR0ZXJQcm9ibGVtcy9leHBlY3RlZC54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTgzYjI5YgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL251bGxhYmxlUHJvYmxlbXMvZ2V0dGVyU2V0dGVyUHJvYmxlbXMvZXhwZWN0ZWQueG1sCkBAIC0wLDAgKzEsNzMgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8cHJvYmxlbXM+CisgIDxwcm9ibGVtPgorICAgIDxmaWxlPlRlc3QuamF2YTwvZmlsZT4KKyAgICA8bGluZT4xMTwvbGluZT4KKyAgICA8bWV0aG9kPgorICAgICAgPG5hbWU+dm9pZCBzZXRCKEIgYik8L25hbWU+CisgICAgICA8ZGlzcGxheV9uYW1lPnNldEIoQik8L2Rpc3BsYXlfbmFtZT4KKyAgICAgIDxwYWNrYWdlPiZsdDtkZWZhdWx0Jmd0OzwvcGFja2FnZT4KKyAgICAgIDxjbGFzcz4KKyAgICAgICAgPG5hbWU+QjwvbmFtZT4KKyAgICAgICAgPGRpc3BsYXlfbmFtZT5CPC9kaXNwbGF5X25hbWU+CisgICAgICA8L2NsYXNzPgorICAgIDwvbWV0aG9kPgorICAgIDxwcm9ibGVtX2NsYXNzIHNldmVyaXR5PSJXQVJOSU5HIiBhdHRyaWJ1dGVfa2V5PSJXQVJOSU5HX0FUVFJJQlVURVMiPkBOb3ROdWxsL0BOdWxsYWJsZSBwcm9ibGVtczwvcHJvYmxlbV9jbGFzcz4KKyAgICA8ZGVzY3JpcHRpb24+U2V0dGVyIHBhcmFtZXRlciBmb3IgQE5vdE51bGwgZmllbGQgbWlnaHQgYmUgYW5ub3RhdGVkIEBOb3ROdWxsIGl0c2VsZjwvZGVzY3JpcHRpb24+CisgIDwvcHJvYmxlbT4KKyAgPHByb2JsZW0+CisgICAgPGZpbGU+VGVzdC5qYXZhPC9maWxlPgorICAgIDxsaW5lPjc8L2xpbmU+CisgICAgPG1ldGhvZD4KKyAgICAgIDxuYW1lPkIgZ2V0QigpPC9uYW1lPgorICAgICAgPGRpc3BsYXlfbmFtZT5nZXRCKCk8L2Rpc3BsYXlfbmFtZT4KKyAgICAgIDxwYWNrYWdlPiZsdDtkZWZhdWx0Jmd0OzwvcGFja2FnZT4KKyAgICAgIDxjbGFzcz4KKyAgICAgICAgPG5hbWU+QjwvbmFtZT4KKyAgICAgICAgPGRpc3BsYXlfbmFtZT5CPC9kaXNwbGF5X25hbWU+CisgICAgICA8L2NsYXNzPgorICAgIDwvbWV0aG9kPgorICAgIDxwcm9ibGVtX2NsYXNzIHNldmVyaXR5PSJXQVJOSU5HIiBhdHRyaWJ1dGVfa2V5PSJXQVJOSU5HX0FUVFJJQlVURVMiPkBOb3ROdWxsL0BOdWxsYWJsZSBwcm9ibGVtczwvcHJvYmxlbV9jbGFzcz4KKyAgICA8ZGVzY3JpcHRpb24+R2V0dGVyIGZvciBATm90TnVsbCBmaWVsZCBtaWdodCBiZSBhbm5vdGF0ZWQgQE5vdE51bGwgaXRzZWxmPC9kZXNjcmlwdGlvbj4KKyAgPC9wcm9ibGVtPgorICAKKyAgPHByb2JsZW0+CisgICAgPGZpbGU+VGVzdC5qYXZhPC9maWxlPgorICAgIDxsaW5lPjI1PC9saW5lPgorICAgIDxwcm9ibGVtX2NsYXNzIHNldmVyaXR5PSJXQVJOSU5HIiBhdHRyaWJ1dGVfa2V5PSJXQVJOSU5HX0FUVFJJQlVURVMiPkBOb3ROdWxsL0BOdWxsYWJsZSBwcm9ibGVtczwvcHJvYmxlbV9jbGFzcz4KKyAgICA8ZGVzY3JpcHRpb24+Q29uc3RydWN0b3IgcGFyYW1ldGVyIGZvciBATm90TnVsbCBmaWVsZCBtaWdodCBiZSBhbm5vdGF0ZWQgQE5vdE51bGwgaXRzZWxmPC9kZXNjcmlwdGlvbj4KKyAgPC9wcm9ibGVtPgorCisKKyAgPHByb2JsZW0+CisgICAgPGZpbGU+VGVzdC5qYXZhPC9maWxlPgorICAgIDxsaW5lPjM4PC9saW5lPgorICAgIDxwcm9ibGVtX2NsYXNzIHNldmVyaXR5PSJXQVJOSU5HIiBhdHRyaWJ1dGVfa2V5PSJXQVJOSU5HX0FUVFJJQlVURVMiPkBOb3ROdWxsL0BOdWxsYWJsZSBwcm9ibGVtczwvcHJvYmxlbV9jbGFzcz4KKyAgICA8ZGVzY3JpcHRpb24+U2V0dGVyIHBhcmFtZXRlciBmb3IgQE5vdE51bGwgZmllbGQgbWlnaHQgYmUgYW5ub3RhdGVkIEBOb3ROdWxsIGl0c2VsZjwvZGVzY3JpcHRpb24+CisgIDwvcHJvYmxlbT4KKworCisgIDxwcm9ibGVtPgorICAgIDxmaWxlPlRlc3QuamF2YTwvZmlsZT4KKyAgICA8bGluZT4zNDwvbGluZT4KKyAgICA8cHJvYmxlbV9jbGFzcyBzZXZlcml0eT0iV0FSTklORyIgYXR0cmlidXRlX2tleT0iV0FSTklOR19BVFRSSUJVVEVTIj5ATm90TnVsbC9ATnVsbGFibGUgcHJvYmxlbXM8L3Byb2JsZW1fY2xhc3M+CisgICAgPGRlc2NyaXB0aW9uPkdldHRlciBmb3IgQE5vdE51bGwgZmllbGQgbWlnaHQgYmUgYW5ub3RhdGVkIEBOb3ROdWxsIGl0c2VsZjwvZGVzY3JpcHRpb24+CisgIDwvcHJvYmxlbT4KKworCisgIDxwcm9ibGVtPgorICAgIDxmaWxlPlRlc3QuamF2YTwvZmlsZT4KKyAgICA8bGluZT4yOTwvbGluZT4KKyAgICA8cHJvYmxlbV9jbGFzcyBzZXZlcml0eT0iV0FSTklORyIgYXR0cmlidXRlX2tleT0iV0FSTklOR19BVFRSSUJVVEVTIj5ATm90TnVsbC9ATnVsbGFibGUgcHJvYmxlbXM8L3Byb2JsZW1fY2xhc3M+CisgICAgPGRlc2NyaXB0aW9uPkNvbnN0cnVjdG9yIHBhcmFtZXRlciBmb3IgQE5vdE51bGwgZmllbGQgbWlnaHQgYmUgYW5ub3RhdGVkIEBOb3ROdWxsIGl0c2VsZjwvZGVzY3JpcHRpb24+CisgIDwvcHJvYmxlbT4KKworICA8cHJvYmxlbT4KKyAgICA8ZmlsZT5UZXN0LmphdmE8L2ZpbGU+CisgICAgPGxpbmU+NjM8L2xpbmU+CisgICAgPHByb2JsZW1fY2xhc3Mgc2V2ZXJpdHk9IldBUk5JTkciIGF0dHJpYnV0ZV9rZXk9IldBUk5JTkdfQVRUUklCVVRFUyI+QE5vdE51bGwvQE51bGxhYmxlIHByb2JsZW1zPC9wcm9ibGVtX2NsYXNzPgorICAgIDxkZXNjcmlwdGlvbj5Db25zdHJ1Y3RvciBwYXJhbWV0ZXIgZm9yIEBOb3ROdWxsIGZpZWxkIG1pZ2h0IGJlIGFubm90YXRlZCBATm90TnVsbCBpdHNlbGY8L2Rlc2NyaXB0aW9uPgorICA8L3Byb2JsZW0+CisKKworPC9wcm9ibGVtcz4KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL251bGxhYmxlUHJvYmxlbXMvZ2V0dGVyU2V0dGVyUHJvYmxlbXMvc3JjL1Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL251bGxhYmxlUHJvYmxlbXMvZ2V0dGVyU2V0dGVyUHJvYmxlbXMvc3JjL1Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZmM0N2I0Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vbnVsbGFibGVQcm9ibGVtcy9nZXR0ZXJTZXR0ZXJQcm9ibGVtcy9zcmMvVGVzdC5qYXZhCkBAIC0wLDAgKzEsNjcgQEAKK2ltcG9ydCBvcmcuamV0YnJhaW5zLmFubm90YXRpb25zLk5vdE51bGw7CisKK2NsYXNzIEIgeworICAgICBATm90TnVsbAorICAgICBCIGI7CisKKyAgICBwdWJsaWMgQiBnZXRCKCkgeworICAgICAgICByZXR1cm4gYjsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBzZXRCKEIgYikgeworICAgICAgICB0aGlzLmIgPSBiOworICAgIH0KKworICAgICAgICBATm90TnVsbAorICAgICAgICBwcml2YXRlIFN0cmluZyBidWcgPSAidHJ1ZSI7CisKKyAgICAgICAgcHVibGljIGJvb2xlYW4gZ2V0QnVnKCkgeworICAgICAgICAgICAgcmV0dXJuIEJvb2xlYW4udmFsdWVPZihidWcpOworICAgICAgICB9Cit9CitjbGFzcyBDIHsKKyAgQE5vdE51bGwgQyBjOworCisgIEMoQyBjKSB7CisgICAgdGhpcy5jID0gYzsKKyAgfQorCisgIEMoQE51bGxhYmxlIEMgYywgaW50IGkpIHsKKyAgICB0aGlzLmMgPSBjOworICB9CisKKyAgQE51bGxhYmxlCisgIHB1YmxpYyBDIGdldEMoKSB7CisgICAgcmV0dXJuIGM7CisgIH0KKworICBwdWJsaWMgdm9pZCBzZXRDKEBOdWxsYWJsZSBDIGMpIHsKKyAgICB0aGlzLmMgPSBjOworICB9CisKKyAgQE5vdE51bGwgQyBjMTsKKyAgQG9yZy5qZXRicmFpbnMuYW5ub3RhdGlvbnMuTnVsbGFibGUKKyAgcHVibGljIEMgZ2V0QzEoKSB7CisgICAgaWYgKGMxICE9IG51bGwpIHsKKyAgICAgIHJldHVybiBudWxsOworICAgIH0KKyAgICByZXR1cm4gYzE7CisgIH0KK30KKworY2xhc3MgRCB7CisgICAgQE51bGxhYmxlIExvbmcgbXlMOworCisgICAgRChsb25nIGwpIHsKKyAgICAgIG15TCA9IGw7CisgICAgfQorfQorCitjbGFzcyBFIHsKKyAgZmluYWwgQE5vdE51bGwgQyBjOworCisgIEUoQyBjKSB7CisgICAgdGhpcy5jID0gYzsKKyAgfQorCit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vbnVsbGFibGVQcm9ibGVtcy9qZGsxNC9leHBlY3RlZC54bWwgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9udWxsYWJsZVByb2JsZW1zL2pkazE0L2V4cGVjdGVkLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNzA0ZDU4Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vbnVsbGFibGVQcm9ibGVtcy9qZGsxNC9leHBlY3RlZC54bWwKQEAgLTAsMCArMSw0IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHByb2JsZW1zPgorPC9wcm9ibGVtcz4KKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vbnVsbGFibGVQcm9ibGVtcy9qZGsxNC9zcmMvVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vbnVsbGFibGVQcm9ibGVtcy9qZGsxNC9zcmMvVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmExNDAzY2MKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9udWxsYWJsZVByb2JsZW1zL2pkazE0L3NyYy9UZXN0LmphdmEKQEAgLTAsMCArMSwyNiBAQAoraW1wb3J0IG9yZy5qZXRicmFpbnMuYW5ub3RhdGlvbnMuTm90TnVsbDsKK2ltcG9ydCBvcmcuamV0YnJhaW5zLmFubm90YXRpb25zLk51bGxhYmxlOworCitjbGFzcyBCIHsKKyAgICBwdWJsaWMgdm9pZCBmKEBOb3ROdWxsIFN0cmluZyBwKXt9CisgICAgQE5vdE51bGwKKyAgICBwdWJsaWMgU3RyaW5nIG5uKEBOdWxsYWJsZSBTdHJpbmcgcGFyYW0pIHsKKyAgICAgICAgcmV0dXJuICIiOworICAgIH0KK30KKyAgICAgICAgIAorcHVibGljIGNsYXNzIFkgZXh0ZW5kcyBCIHsKKyAgICBATm90TnVsbCBATnVsbGFibGUgU3RyaW5nIHM7CisgICAgcHVibGljIHZvaWQgZihTdHJpbmcgcCl7fQorICAgICAgIAorICAgICAgICAgIAorICAgIHB1YmxpYyBTdHJpbmcgbm4oQE5vdE51bGwgU3RyaW5nIHBhcmFtKSB7IAorICAgICAgICByZXR1cm4gIiI7CisgICAgfQorICAgIHZvaWQgcChATm90TnVsbCBATnVsbGFibGUgU3RyaW5nIHAyKXt9CisKKworICAgIEBOdWxsYWJsZSBpbnQgZjsKKyAgICBATm90TnVsbCB2b2lkIHZmKCl7fQorICAgIHZvaWQgdChATm90TnVsbCBkb3VibGUgZCl7fQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vbnVsbGFibGVQcm9ibGVtcy9udWxsYWJsZUZpZWxkTm90bnVsbFBhcmFtL2V4cGVjdGVkLnhtbCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL251bGxhYmxlUHJvYmxlbXMvbnVsbGFibGVGaWVsZE5vdG51bGxQYXJhbS9leHBlY3RlZC54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDA3NTgyZQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL251bGxhYmxlUHJvYmxlbXMvbnVsbGFibGVGaWVsZE5vdG51bGxQYXJhbS9leHBlY3RlZC54bWwKQEAgLTAsMCArMSw5IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHByb2JsZW1zPgorICA8cHJvYmxlbT4KKyAgICA8ZmlsZT5UZXN0LmphdmE8L2ZpbGU+CisgICAgPGxpbmU+ODwvbGluZT4KKyAgICA8ZGVzY3JpcHRpb24+Q29uc3RydWN0b3IgcGFyYW1ldGVyIGZvciBATnVsbGFibGUgZmllbGQgaXMgYW5ub3RhdGVkIEBOb3ROdWxsPC9kZXNjcmlwdGlvbj4KKyAgPC9wcm9ibGVtPgorPC9wcm9ibGVtcz4KKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vbnVsbGFibGVQcm9ibGVtcy9udWxsYWJsZUZpZWxkTm90bnVsbFBhcmFtL3NyYy9UZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9udWxsYWJsZVByb2JsZW1zL251bGxhYmxlRmllbGROb3RudWxsUGFyYW0vc3JjL1Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41Y2ViYWI3Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vbnVsbGFibGVQcm9ibGVtcy9udWxsYWJsZUZpZWxkTm90bnVsbFBhcmFtL3NyYy9UZXN0LmphdmEKQEAgLTAsMCArMSwyMSBAQAoraW1wb3J0IG9yZy5qZXRicmFpbnMuYW5ub3RhdGlvbnMuKjsKKworY2xhc3MgVGVzdCB7CisgICAgIEBOdWxsYWJsZSBwcml2YXRlIGZpbmFsIFN0cmluZyBiYXNlRmlsZTsKKyAgICAgQE51bGxhYmxlIHByaXZhdGUgZmluYWwgU3RyaW5nIGJhc2VGaWxlMTsKKworCisgICAgIHB1YmxpYyBUZXN0KEBOb3ROdWxsIFN0cmluZyBiYXNlRmlsZSkgeworICAgICAgICAgdGhpcy5iYXNlRmlsZSA9IGJhc2VGaWxlOworICAgICAgICAgdGhpcy5iYXNlRmlsZTEgPSBudWxsOworICAgICB9CisKKyAgICAgcHVibGljIFRlc3QoQE5vdE51bGwgU3RyaW5nIGJhc2VGaWxlMSwgYm9vbGVhbiBhKSB7CisgICAgICAgICB0aGlzLmJhc2VGaWxlMSA9IGJhc2VGaWxlMTsKKyAgICAgICAgIGlmIChiYXNlRmlsZTEuY29udGFpbnMoImZvbyIpKSB7CisgICAgICAgICAgIHRoaXMuYmFzZUZpbGUgPSBudWxsOworICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgdGhpcy5iYXNlRmlsZSA9IG51bGw7CisgICAgICAgICB9CisgICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9udWxsYWJsZVByb2JsZW1zL292ZXJyaWRkZW5NZXRob2RzL2V4cGVjdGVkLnhtbCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL251bGxhYmxlUHJvYmxlbXMvb3ZlcnJpZGRlbk1ldGhvZHMvZXhwZWN0ZWQueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFjMWY3Y2UKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9udWxsYWJsZVByb2JsZW1zL292ZXJyaWRkZW5NZXRob2RzL2V4cGVjdGVkLnhtbApAQCAtMCwwICsxLDQzIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHByb2JsZW1zPgorPHByb2JsZW0+CisgIDxmaWxlPlRlc3QuamF2YTwvZmlsZT4KKyAgPGxpbmU+MTg8L2xpbmU+CisgIDxwcm9ibGVtX2NsYXNzIHNldmVyaXR5PSJXQVJOSU5HIiBhdHRyaWJ1dGVfa2V5PSJXQVJOSU5HX0FUVFJJQlVURVMiPkBOb3ROdWxsL0BOdWxsYWJsZSBwcm9ibGVtczwvcHJvYmxlbV9jbGFzcz4KKyAgPGRlc2NyaXB0aW9uPk5vdCBhbm5vdGF0ZWQgbWV0aG9kIG92ZXJyaWRlcyBtZXRob2QgYW5ub3RhdGVkIHdpdGggQE5vdE51bGw8L2Rlc2NyaXB0aW9uPgorPC9wcm9ibGVtPgorCis8cHJvYmxlbT4KKyAgPGZpbGU+VGVzdC5qYXZhPC9maWxlPgorICA8bGluZT4xODwvbGluZT4KKyAgPHByb2JsZW1fY2xhc3Mgc2V2ZXJpdHk9IldBUk5JTkciIGF0dHJpYnV0ZV9rZXk9IldBUk5JTkdfQVRUUklCVVRFUyI+QE5vdE51bGwvQE51bGxhYmxlIHByb2JsZW1zPC9wcm9ibGVtX2NsYXNzPgorICA8ZGVzY3JpcHRpb24+Tm90IGFubm90YXRlZCBwYXJhbWV0ZXIgb3ZlcnJpZGVzIEBOb3ROdWxsIHBhcmFtZXRlcjwvZGVzY3JpcHRpb24+Cis8L3Byb2JsZW0+CisKKzxwcm9ibGVtPgorICA8ZmlsZT5UZXN0LmphdmE8L2ZpbGU+CisgIDxsaW5lPjU8L2xpbmU+CisgIDxwcm9ibGVtX2NsYXNzIHNldmVyaXR5PSJXQVJOSU5HIiBhdHRyaWJ1dGVfa2V5PSJXQVJOSU5HX0FUVFJJQlVURVMiPkBOb3ROdWxsL0BOdWxsYWJsZSBwcm9ibGVtczwvcHJvYmxlbV9jbGFzcz4KKyAgPGRlc2NyaXB0aW9uPk92ZXJyaWRkZW4gbWV0aG9kcyBhcmUgbm90IGFubm90YXRlZDwvZGVzY3JpcHRpb24+Cis8L3Byb2JsZW0+CisKKzxwcm9ibGVtPgorICA8ZmlsZT5UZXN0LmphdmE8L2ZpbGU+CisgIDxsaW5lPjY8L2xpbmU+CisgIDxwcm9ibGVtX2NsYXNzIHNldmVyaXR5PSJXQVJOSU5HIiBhdHRyaWJ1dGVfa2V5PSJXQVJOSU5HX0FUVFJJQlVURVMiPkBOb3ROdWxsL0BOdWxsYWJsZSBwcm9ibGVtczwvcHJvYmxlbV9jbGFzcz4KKyAgPGRlc2NyaXB0aW9uPk92ZXJyaWRkZW4gbWV0aG9kIHBhcmFtZXRlcnMgYXJlIG5vdCBhbm5vdGF0ZWQ8L2Rlc2NyaXB0aW9uPgorPC9wcm9ibGVtPgorCis8cHJvYmxlbT4KKyAgPGZpbGU+VGVzdC5qYXZhPC9maWxlPgorICA8bGluZT4xMjwvbGluZT4KKyAgPHByb2JsZW1fY2xhc3Mgc2V2ZXJpdHk9IldBUk5JTkciIGF0dHJpYnV0ZV9rZXk9IldBUk5JTkdfQVRUUklCVVRFUyI+QE5vdE51bGwvQE51bGxhYmxlIHByb2JsZW1zPC9wcm9ibGVtX2NsYXNzPgorICA8ZGVzY3JpcHRpb24+Tm90IGFubm90YXRlZCBtZXRob2Qgb3ZlcnJpZGVzIG1ldGhvZCBhbm5vdGF0ZWQgd2l0aCBATm90TnVsbDwvZGVzY3JpcHRpb24+Cis8L3Byb2JsZW0+CisKKzxwcm9ibGVtPgorICA8ZmlsZT5UZXN0LmphdmE8L2ZpbGU+CisgIDxsaW5lPjEyPC9saW5lPgorICA8cHJvYmxlbV9jbGFzcyBzZXZlcml0eT0iV0FSTklORyIgYXR0cmlidXRlX2tleT0iV0FSTklOR19BVFRSSUJVVEVTIj5ATm90TnVsbC9ATnVsbGFibGUgcHJvYmxlbXM8L3Byb2JsZW1fY2xhc3M+CisgIDxkZXNjcmlwdGlvbj5Ob3QgYW5ub3RhdGVkIHBhcmFtZXRlciBvdmVycmlkZXMgQE5vdE51bGwgcGFyYW1ldGVyPC9kZXNjcmlwdGlvbj4KKzwvcHJvYmxlbT48L3Byb2JsZW1zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL251bGxhYmxlUHJvYmxlbXMvb3ZlcnJpZGRlbk1ldGhvZHMvc3JjL1Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL251bGxhYmxlUHJvYmxlbXMvb3ZlcnJpZGRlbk1ldGhvZHMvc3JjL1Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNDRlYjhjCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vbnVsbGFibGVQcm9ibGVtcy9vdmVycmlkZGVuTWV0aG9kcy9zcmMvVGVzdC5qYXZhCkBAIC0wLDAgKzEsNTMgQEAKK2ltcG9ydCBvcmcuamV0YnJhaW5zLmFubm90YXRpb25zLk5vdE51bGw7CitpbXBvcnQgb3JnLmpldGJyYWlucy5hbm5vdGF0aW9ucy5OdWxsYWJsZTsKKworYWJzdHJhY3QgY2xhc3MgUDIgeworICAgIEBOb3ROdWxsCisgICAgU3RyaW5nIGZvbyhATm90TnVsbCBQIHApIHsKKyAgICAgICAgcmV0dXJuICIiOworICAgIH0KK30KKworY2xhc3MgUFBQIGV4dGVuZHMgUDIgeworICAgIFN0cmluZyBmb28oUCBwKSB7CisgICAgICAgIHJldHVybiBzdXBlci5mb28ocCk7CisgICAgfQorfQorY2xhc3MgUFBQMiBleHRlbmRzIFAyIHsKKworICAgIFN0cmluZyBmb28oUCBwKSB7CisgICAgICAgIHJldHVybiBzdXBlci5mb28ocCk7CisgICAgfQorfQorCisvLy8vLy8vICBpbiBsaWJyYXJ5CitpbnRlcmZhY2UgRm9vIHsKKyAgICBATm90TnVsbAorICAgIFN0cmluZyBnZXRUaXRsZSgpOworfQorY2xhc3MgRm9vSW1wbCBleHRlbmRzIGphdmEuYXd0LkZyYW1lIGltcGxlbWVudHMgRm9vIHsKKy8vICAgIHB1YmxpYyBTdHJpbmcgZ2V0VGl0bGUoKSB7CisvLyAgICAgICAgcmV0dXJuIHN1cGVyLmdldFRpdGxlKCk7ICAgIC8vVG8gY2hhbmdlIGJvZHkgb2Ygb3ZlcnJpZGRlbiBtZXRob2RzIHVzZSBGaWxlIHwgU2V0dGluZ3MgfCBGaWxlIFRlbXBsYXRlcy4KKy8vICAgIH0KK30KKworCitpbnRlcmZhY2UgSTEgeworICBATnVsbGFibGUKKyAgT2JqZWN0IGZvbygpOworfQorCitpbnRlcmZhY2UgSTIgZXh0ZW5kcyBJMSB7CisgIEBOb3ROdWxsCisgIE9iamVjdCBmb28oKTsKK30KKworY2xhc3MgQSBpbXBsZW1lbnRzIEkxIHsKKyAgQE92ZXJyaWRlCisgIHB1YmxpYyBPYmplY3QgZm9vKCkgeworICAgIC8vIHJldHVybnMgc29tZXRoaW5nCisgIH0KK30KKworY2xhc3MgQiBleHRlbmRzIEEgaW1wbGVtZW50cyBJMiB7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vbnVsbGFibGVQcm9ibGVtcy9wcm9ibGVtcy9leHBlY3RlZC54bWwgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9udWxsYWJsZVByb2JsZW1zL3Byb2JsZW1zL2V4cGVjdGVkLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MzQ2ZDM3Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vbnVsbGFibGVQcm9ibGVtcy9wcm9ibGVtcy9leHBlY3RlZC54bWwKQEAgLTAsMCArMSwxNjkgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8cHJvYmxlbXM+Cis8cHJvYmxlbT4KKyAgPGZpbGU+VGVzdC5qYXZhPC9maWxlPgorICA8bGluZT4xNDwvbGluZT4KKyAgPG1ldGhvZD4KKyAgICA8bmFtZT52b2lkIGYoU3RyaW5nIHApPC9uYW1lPgorICAgIDxkaXNwbGF5X25hbWU+ZihTdHJpbmcpPC9kaXNwbGF5X25hbWU+CisgICAgPHBhY2thZ2U+Jmx0O2RlZmF1bHQmZ3Q7PC9wYWNrYWdlPgorICAgIDxjbGFzcz4KKyAgICAgIDxuYW1lPlk8L25hbWU+CisgICAgICA8ZGlzcGxheV9uYW1lPlk8L2Rpc3BsYXlfbmFtZT4KKyAgICA8L2NsYXNzPgorICA8L21ldGhvZD4KKyAgPGRlc2NyaXB0aW9uPk5vdCBhbm5vdGF0ZWQgcGFyYW1ldGVyIG92ZXJyaWRlcyBATm90TnVsbCBwYXJhbWV0ZXI8L2Rlc2NyaXB0aW9uPgorPC9wcm9ibGVtPgorCisKKzxwcm9ibGVtPgorICA8ZmlsZT5UZXN0LmphdmE8L2ZpbGU+CisgIDxsaW5lPjE3PC9saW5lPgorICA8dGV4dF9yYW5nZSBzdGFydD0iMzYxIiBlbmQ9IjM2MyIgLz4KKyAgPG1ldGhvZD4KKyAgICA8bmFtZT5TdHJpbmcgbm4oU3RyaW5nIHBhcmFtKTwvbmFtZT4KKyAgICA8ZGlzcGxheV9uYW1lPm5uKFN0cmluZyk8L2Rpc3BsYXlfbmFtZT4KKyAgICA8cGFja2FnZT4mbHQ7ZGVmYXVsdCZndDs8L3BhY2thZ2U+CisgICAgPGNsYXNzPgorICAgICAgPG5hbWU+WTwvbmFtZT4KKyAgICAgIDxkaXNwbGF5X25hbWU+WTwvZGlzcGxheV9uYW1lPgorICAgIDwvY2xhc3M+CisgIDwvbWV0aG9kPgorICA8ZGVzY3JpcHRpb24+Tm90IGFubm90YXRlZCBtZXRob2Qgb3ZlcnJpZGVzIG1ldGhvZCBhbm5vdGF0ZWQgd2l0aCBATm90TnVsbDwvZGVzY3JpcHRpb24+Cis8L3Byb2JsZW0+CisKKworPHByb2JsZW0+CisgIDxmaWxlPlRlc3QuamF2YTwvZmlsZT4KKyAgPGxpbmU+MTc8L2xpbmU+CisgIDx0ZXh0X3JhbmdlIHN0YXJ0PSIzODAiIGVuZD0iMzg1IiAvPgorICA8bWV0aG9kPgorICAgIDxuYW1lPlN0cmluZyBubihTdHJpbmcgcGFyYW0pPC9uYW1lPgorICAgIDxkaXNwbGF5X25hbWU+bm4oU3RyaW5nKTwvZGlzcGxheV9uYW1lPgorICAgIDxwYWNrYWdlPiZsdDtkZWZhdWx0Jmd0OzwvcGFja2FnZT4KKyAgICA8Y2xhc3M+CisgICAgICA8bmFtZT5ZPC9uYW1lPgorICAgICAgPGRpc3BsYXlfbmFtZT5ZPC9kaXNwbGF5X25hbWU+CisgICAgPC9jbGFzcz4KKyAgPC9tZXRob2Q+CisgIDxkZXNjcmlwdGlvbj5QYXJhbWV0ZXIgYW5ub3RhdGVkIEBOb25OdWxsIG11c3Qgbm90IG92ZXJyaWRlIEBOdWxsYWJsZSBwYXJhbWV0ZXI8L2Rlc2NyaXB0aW9uPgorPC9wcm9ibGVtPgorCisKKzxwcm9ibGVtPgorICA8ZmlsZT5UZXN0LmphdmE8L2ZpbGU+CisgIDxsaW5lPjEzPC9saW5lPgorICA8dGV4dF9yYW5nZSBzdGFydD0iMjkxIiBlbmQ9IjI5MiIgLz4KKyAgPGZpZWxkPgorICAgIDxuYW1lPlN0cmluZyBzPC9uYW1lPgorICAgIDxkaXNwbGF5X25hbWU+czwvZGlzcGxheV9uYW1lPgorICAgIDxwYWNrYWdlPiZsdDtkZWZhdWx0Jmd0OzwvcGFja2FnZT4KKyAgICA8Y2xhc3M+CisgICAgICA8bmFtZT5ZPC9uYW1lPgorICAgICAgPGRpc3BsYXlfbmFtZT5ZPC9kaXNwbGF5X25hbWU+CisgICAgPC9jbGFzcz4KKyAgPC9maWVsZD4KKyAgPGRlc2NyaXB0aW9uPkNhbm5vdCBhbm5vdGF0ZSB3aXRoIGJvdGggQE51bGxhYmxlIGFuZCBATm90TnVsbDwvZGVzY3JpcHRpb24+CisKKzwvcHJvYmxlbT4KKyAgPHByb2JsZW0+CisgICAgPGZpbGU+VGVzdC5qYXZhPC9maWxlPgorICAgIDxsaW5lPjEzPC9saW5lPgorICAgIDxmaWVsZD4KKyAgICAgIDxuYW1lPlN0cmluZyBzPC9uYW1lPgorICAgICAgPGRpc3BsYXlfbmFtZT5zPC9kaXNwbGF5X25hbWU+CisgICAgICA8cGFja2FnZT4mbHQ7ZGVmYXVsdCZndDs8L3BhY2thZ2U+CisgICAgICA8Y2xhc3M+CisgICAgICAgIDxuYW1lPlk8L25hbWU+CisgICAgICAgIDxkaXNwbGF5X25hbWU+WTwvZGlzcGxheV9uYW1lPgorICAgICAgPC9jbGFzcz4KKyAgICA8L2ZpZWxkPgorICAgIDxwcm9ibGVtX2NsYXNzIHNldmVyaXR5PSJXQVJOSU5HIiBhdHRyaWJ1dGVfa2V5PSJXQVJOSU5HX0FUVFJJQlVURVMiPkBOb3ROdWxsL0BOdWxsYWJsZSBwcm9ibGVtczwvcHJvYmxlbV9jbGFzcz4KKyAgICA8ZGVzY3JpcHRpb24+Q2Fubm90IGFubm90YXRlIHdpdGggYm90aCBATnVsbGFibGUgYW5kIEBOb3ROdWxsPC9kZXNjcmlwdGlvbj4KKyAgPC9wcm9ibGVtPgorCisKKzxwcm9ibGVtPgorICA8ZmlsZT5UZXN0LmphdmE8L2ZpbGU+CisgIDxsaW5lPjIwPC9saW5lPgorICA8dGV4dF9yYW5nZSBzdGFydD0iNDUyIiBlbmQ9IjQ1NCIgLz4KKyAgPG1ldGhvZD4KKyAgICA8bmFtZT52b2lkIHAoU3RyaW5nIHAyKTwvbmFtZT4KKyAgICA8ZGlzcGxheV9uYW1lPnAoU3RyaW5nKTwvZGlzcGxheV9uYW1lPgorICAgIDxwYWNrYWdlPiZsdDtkZWZhdWx0Jmd0OzwvcGFja2FnZT4KKyAgICA8Y2xhc3M+CisgICAgICA8bmFtZT5ZPC9uYW1lPgorICAgICAgPGRpc3BsYXlfbmFtZT5ZPC9kaXNwbGF5X25hbWU+CisgICAgPC9jbGFzcz4KKyAgPC9tZXRob2Q+CisgIDxkZXNjcmlwdGlvbj5DYW5ub3QgYW5ub3RhdGUgd2l0aCBib3RoIEBOdWxsYWJsZSBhbmQgQE5vdE51bGw8L2Rlc2NyaXB0aW9uPgorPC9wcm9ibGVtPgorCisgIDxwcm9ibGVtPgorICAgIDxmaWxlPlRlc3QuamF2YTwvZmlsZT4KKyAgICA8bGluZT4yMzwvbGluZT4KKyAgICA8dGV4dF9yYW5nZSBzdGFydD0iNDc2IiBlbmQ9IjQ3NyIgLz4KKyAgICA8ZmllbGQ+CisgICAgICA8bmFtZT5pbnQgZjwvbmFtZT4KKyAgICAgIDxkaXNwbGF5X25hbWU+ZjwvZGlzcGxheV9uYW1lPgorICAgICAgPHBhY2thZ2U+Jmx0O2RlZmF1bHQmZ3Q7PC9wYWNrYWdlPgorICAgICAgPGNsYXNzPgorICAgICAgICA8bmFtZT5ZPC9uYW1lPgorICAgICAgICA8ZGlzcGxheV9uYW1lPlk8L2Rpc3BsYXlfbmFtZT4KKyAgICAgIDwvY2xhc3M+CisgICAgPC9maWVsZD4KKyAgICA8ZGVzY3JpcHRpb24+UHJpbWl0aXZlIHR5cGUgbWVtYmVycyBjYW5ub3QgYmUgTnVsbGFibGUvTm90TnVsbCBhbm5vdGF0ZWQ8L2Rlc2NyaXB0aW9uPgorICA8L3Byb2JsZW0+CisKKyAgPHByb2JsZW0+CisgICAgPGZpbGU+VGVzdC5qYXZhPC9maWxlPgorICAgIDxsaW5lPjI0PC9saW5lPgorICAgIDx0ZXh0X3JhbmdlIHN0YXJ0PSI0OTIiIGVuZD0iNDk2IiAvPgorICAgIDxtZXRob2Q+CisgICAgICA8bmFtZT52b2lkIHZmKCk8L25hbWU+CisgICAgICA8ZGlzcGxheV9uYW1lPnZmKCk8L2Rpc3BsYXlfbmFtZT4KKyAgICAgIDxwYWNrYWdlPiZsdDtkZWZhdWx0Jmd0OzwvcGFja2FnZT4KKyAgICAgIDxjbGFzcz4KKyAgICAgICAgPG5hbWU+WTwvbmFtZT4KKyAgICAgICAgPGRpc3BsYXlfbmFtZT5ZPC9kaXNwbGF5X25hbWU+CisgICAgICA8L2NsYXNzPgorICAgIDwvbWV0aG9kPgorICAgIDxkZXNjcmlwdGlvbj5QcmltaXRpdmUgdHlwZSBtZW1iZXJzIGNhbm5vdCBiZSBOdWxsYWJsZS9Ob3ROdWxsIGFubm90YXRlZDwvZGVzY3JpcHRpb24+CisgIDwvcHJvYmxlbT4KKworCisgIDxwcm9ibGVtPgorICAgIDxmaWxlPlRlc3QuamF2YTwvZmlsZT4KKyAgICA8bGluZT4yNTwvbGluZT4KKyAgICA8dGV4dF9yYW5nZSBzdGFydD0iNTMxIiBlbmQ9IjUzMiIgLz4KKyAgICA8bWV0aG9kPgorICAgICAgPG5hbWU+dm9pZCB0KGRvdWJsZSBkKTwvbmFtZT4KKyAgICAgIDxkaXNwbGF5X25hbWU+dChkb3VibGUpPC9kaXNwbGF5X25hbWU+CisgICAgICA8cGFja2FnZT4mbHQ7ZGVmYXVsdCZndDs8L3BhY2thZ2U+CisgICAgICA8Y2xhc3M+CisgICAgICAgIDxuYW1lPlk8L25hbWU+CisgICAgICAgIDxkaXNwbGF5X25hbWU+WTwvZGlzcGxheV9uYW1lPgorICAgICAgPC9jbGFzcz4KKyAgICA8L21ldGhvZD4KKyAgICA8ZGVzY3JpcHRpb24+UHJpbWl0aXZlIHR5cGUgbWVtYmVycyBjYW5ub3QgYmUgTnVsbGFibGUvTm90TnVsbCBhbm5vdGF0ZWQ8L2Rlc2NyaXB0aW9uPgorICA8L3Byb2JsZW0+CisKKworICA8cHJvYmxlbT4KKyAgICA8ZmlsZT5UZXN0LmphdmE8L2ZpbGU+CisgICAgPGxpbmU+MjA8L2xpbmU+CisgICAgPG1ldGhvZD4KKyAgICAgIDxuYW1lPnZvaWQgcChTdHJpbmcgcDIpPC9uYW1lPgorICAgICAgPG5hbWU+cChTdHJpbmcpPC9uYW1lPgorICAgICAgPHBhY2thZ2U+Jmx0O2RlZmF1bHQmZ3Q7PC9wYWNrYWdlPgorICAgICAgPGNsYXNzPgorICAgICAgICA8bmFtZT5ZPC9uYW1lPgorICAgICAgICA8ZGlzcGxheV9uYW1lPlk8L2Rpc3BsYXlfbmFtZT4KKyAgICAgIDwvY2xhc3M+CisgICAgPC9tZXRob2Q+CisgICAgPHByb2JsZW1fY2xhc3Mgc2V2ZXJpdHk9IldBUk5JTkciIGF0dHJpYnV0ZV9rZXk9IldBUk5JTkdfQVRUUklCVVRFUyI+QE5vdE51bGwvQE51bGxhYmxlIHByb2JsZW1zPC9wcm9ibGVtX2NsYXNzPgorICAgIDxkZXNjcmlwdGlvbj5DYW5ub3QgYW5ub3RhdGUgd2l0aCBib3RoIEBOdWxsYWJsZSBhbmQgQE5vdE51bGw8L2Rlc2NyaXB0aW9uPgorICA8L3Byb2JsZW0+CisKKzwvcHJvYmxlbXM+CisKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL251bGxhYmxlUHJvYmxlbXMvcHJvYmxlbXMvc3JjL1Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL251bGxhYmxlUHJvYmxlbXMvcHJvYmxlbXMvc3JjL1Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMTQwM2NjCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vbnVsbGFibGVQcm9ibGVtcy9wcm9ibGVtcy9zcmMvVGVzdC5qYXZhCkBAIC0wLDAgKzEsMjYgQEAKK2ltcG9ydCBvcmcuamV0YnJhaW5zLmFubm90YXRpb25zLk5vdE51bGw7CitpbXBvcnQgb3JnLmpldGJyYWlucy5hbm5vdGF0aW9ucy5OdWxsYWJsZTsKKworY2xhc3MgQiB7CisgICAgcHVibGljIHZvaWQgZihATm90TnVsbCBTdHJpbmcgcCl7fQorICAgIEBOb3ROdWxsCisgICAgcHVibGljIFN0cmluZyBubihATnVsbGFibGUgU3RyaW5nIHBhcmFtKSB7CisgICAgICAgIHJldHVybiAiIjsKKyAgICB9Cit9CisgICAgICAgICAKK3B1YmxpYyBjbGFzcyBZIGV4dGVuZHMgQiB7CisgICAgQE5vdE51bGwgQE51bGxhYmxlIFN0cmluZyBzOworICAgIHB1YmxpYyB2b2lkIGYoU3RyaW5nIHApe30KKyAgICAgICAKKyAgICAgICAgICAKKyAgICBwdWJsaWMgU3RyaW5nIG5uKEBOb3ROdWxsIFN0cmluZyBwYXJhbSkgeyAKKyAgICAgICAgcmV0dXJuICIiOworICAgIH0KKyAgICB2b2lkIHAoQE5vdE51bGwgQE51bGxhYmxlIFN0cmluZyBwMil7fQorCisKKyAgICBATnVsbGFibGUgaW50IGY7CisgICAgQE5vdE51bGwgdm9pZCB2Zigpe30KKyAgICB2b2lkIHQoQE5vdE51bGwgZG91YmxlIGQpe30KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL251bGxhYmxlUHJvYmxlbXMvcHJvYmxlbXMyL2V4cGVjdGVkLnhtbCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL251bGxhYmxlUHJvYmxlbXMvcHJvYmxlbXMyL2V4cGVjdGVkLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YzA2MDNkCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vbnVsbGFibGVQcm9ibGVtcy9wcm9ibGVtczIvZXhwZWN0ZWQueG1sCkBAIC0wLDAgKzEsODUgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8cHJvYmxlbXM+CisgIDxwcm9ibGVtPgorICAgIDxmaWxlPlRlc3QuamF2YTwvZmlsZT4KKyAgICA8bGluZT4yMzwvbGluZT4KKyAgICA8dGV4dF9yYW5nZSBzdGFydD0iNTU2IiBlbmQ9IjU1NyIgLz4KKyAgICA8bWV0aG9kPgorICAgICAgPG5hbWU+U3RyaW5nIGYoKTwvbmFtZT4KKyAgICAgIDxkaXNwbGF5X25hbWU+ZigpPC9kaXNwbGF5X25hbWU+CisgICAgICA8cGFja2FnZT4mbHQ7ZGVmYXVsdCZndDs8L3BhY2thZ2U+CisgICAgICA8Y2xhc3M+CisgICAgICAgIDxuYW1lPkNDPC9uYW1lPgorICAgICAgICA8ZGlzcGxheV9uYW1lPkNDPC9kaXNwbGF5X25hbWU+CisgICAgICA8L2NsYXNzPgorICAgIDwvbWV0aG9kPgorICAgIDxkZXNjcmlwdGlvbj5DYW5ub3QgYW5ub3RhdGUgd2l0aCBib3RoIEBOdWxsYWJsZSBhbmQgQE5vdE51bGw8L2Rlc2NyaXB0aW9uPgorICA8L3Byb2JsZW0+CisgIDxwcm9ibGVtPgorICAgIDxmaWxlPlRlc3QuamF2YTwvZmlsZT4KKyAgICA8bGluZT4yMzwvbGluZT4KKyAgICA8bWV0aG9kPgorICAgICAgPG5hbWU+U3RyaW5nIGYoKTwvbmFtZT4KKyAgICAgIDxuYW1lPmYoKTwvbmFtZT4KKyAgICAgIDxwYWNrYWdlPiZsdDtkZWZhdWx0Jmd0OzwvcGFja2FnZT4KKyAgICAgIDxjbGFzcz4KKyAgICAgICAgPG5hbWU+Q0M8L25hbWU+CisgICAgICAgIDxkaXNwbGF5X25hbWU+Q0M8L2Rpc3BsYXlfbmFtZT4KKyAgICAgIDwvY2xhc3M+CisgICAgPC9tZXRob2Q+CisgICAgPHByb2JsZW1fY2xhc3Mgc2V2ZXJpdHk9IldBUk5JTkciIGF0dHJpYnV0ZV9rZXk9IldBUk5JTkdfQVRUUklCVVRFUyI+QE5vdE51bGwvQE51bGxhYmxlIHByb2JsZW1zPC9wcm9ibGVtX2NsYXNzPgorICAgIDxkZXNjcmlwdGlvbj5DYW5ub3QgYW5ub3RhdGUgd2l0aCBib3RoIEBOdWxsYWJsZSBhbmQgQE5vdE51bGw8L2Rlc2NyaXB0aW9uPgorICA8L3Byb2JsZW0+CisKKworICA8cHJvYmxlbT4KKyAgICA8ZmlsZT5UZXN0LmphdmE8L2ZpbGU+CisgICAgPGxpbmU+MTY8L2xpbmU+CisgICAgPHRleHRfcmFuZ2Ugc3RhcnQ9IjM2OCIgZW5kPSIzNzMiIC8+CisgICAgPG1ldGhvZD4KKyAgICAgIDxuYW1lPkMgZ2V0QzIoKTwvbmFtZT4KKyAgICAgIDxkaXNwbGF5X25hbWU+Z2V0QzIoKTwvZGlzcGxheV9uYW1lPgorICAgICAgPHBhY2thZ2U+Jmx0O2RlZmF1bHQmZ3Q7PC9wYWNrYWdlPgorICAgICAgPGNsYXNzPgorICAgICAgICA8bmFtZT5DQzwvbmFtZT4KKyAgICAgICAgPGRpc3BsYXlfbmFtZT5DQzwvZGlzcGxheV9uYW1lPgorICAgICAgPC9jbGFzcz4KKyAgICA8L21ldGhvZD4KKyAgICA8ZGVzY3JpcHRpb24+Tm90IGFubm90YXRlZCBtZXRob2Qgb3ZlcnJpZGVzIG1ldGhvZCBhbm5vdGF0ZWQgd2l0aCBATm90TnVsbDwvZGVzY3JpcHRpb24+CisgIDwvcHJvYmxlbT4KKworCisgIDxwcm9ibGVtPgorICAgIDxmaWxlPlRlc3QuamF2YTwvZmlsZT4KKyAgICA8bGluZT4xODwvbGluZT4KKyAgICA8dGV4dF9yYW5nZSBzdGFydD0iNDE3IiBlbmQ9IjQxOCIgLz4KKyAgICA8bWV0aG9kPgorICAgICAgPG5hbWU+dm9pZCBmMShDIHApPC9uYW1lPgorICAgICAgPGRpc3BsYXlfbmFtZT5mMShDKTwvZGlzcGxheV9uYW1lPgorICAgICAgPHBhY2thZ2U+Jmx0O2RlZmF1bHQmZ3Q7PC9wYWNrYWdlPgorICAgICAgPGNsYXNzPgorICAgICAgICA8bmFtZT5DQzwvbmFtZT4KKyAgICAgICAgPGRpc3BsYXlfbmFtZT5DQzwvZGlzcGxheV9uYW1lPgorICAgICAgPC9jbGFzcz4KKyAgICA8L21ldGhvZD4KKyAgICA8ZGVzY3JpcHRpb24+UGFyYW1ldGVyIGFubm90YXRlZCBATm9uTnVsbCBtdXN0IG5vdCBvdmVycmlkZSBATnVsbGFibGUgcGFyYW1ldGVyPC9kZXNjcmlwdGlvbj4KKyAgPC9wcm9ibGVtPgorCisKKyAgPHByb2JsZW0+CisgICAgPGZpbGU+VGVzdC5qYXZhPC9maWxlPgorICAgIDxsaW5lPjE1PC9saW5lPgorICAgIDx0ZXh0X3JhbmdlIHN0YXJ0PSIzMzgiIGVuZD0iMzQyIiAvPgorICAgIDxtZXRob2Q+CisgICAgICA8bmFtZT5DIGdldEMoKTwvbmFtZT4KKyAgICAgIDxkaXNwbGF5X25hbWU+Z2V0QygpPC9kaXNwbGF5X25hbWU+CisgICAgICA8cGFja2FnZT4mbHQ7ZGVmYXVsdCZndDs8L3BhY2thZ2U+CisgICAgICA8Y2xhc3M+CisgICAgICAgIDxuYW1lPkNDPC9uYW1lPgorICAgICAgICA8ZGlzcGxheV9uYW1lPkNDPC9kaXNwbGF5X25hbWU+CisgICAgICA8L2NsYXNzPgorICAgIDwvbWV0aG9kPgorICAgIDxkZXNjcmlwdGlvbj5NZXRob2QgYW5ub3RhdGVkIHdpdGggQE51bGxhYmxlIG11c3Qgbm90IG92ZXJyaWRlIEBOb3ROdWxsIG1ldGhvZDwvZGVzY3JpcHRpb24+CisgIDwvcHJvYmxlbT4KKzwvcHJvYmxlbXM+CisKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL251bGxhYmxlUHJvYmxlbXMvcHJvYmxlbXMyL3NyYy9UZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9udWxsYWJsZVByb2JsZW1zL3Byb2JsZW1zMi9zcmMvVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE2YTA1ZGIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9udWxsYWJsZVByb2JsZW1zL3Byb2JsZW1zMi9zcmMvVGVzdC5qYXZhCkBAIC0wLDAgKzEsMjQgQEAKK2ltcG9ydCBvcmcuamV0YnJhaW5zLmFubm90YXRpb25zLio7CisKK2NsYXNzIEMgeworICBwdWJsaWMgc3RhdGljIEMgQyA9IG51bGw7CisgIEBOb3ROdWxsIHB1YmxpYyBDIGdldEMoKSB7cmV0dXJuIEM7fQorICBATm90TnVsbCBwdWJsaWMgQyBnZXRDMigpIHtyZXR1cm4gQzt9CisKKyAgcHVibGljIHZvaWQgZjEoQE51bGxhYmxlIEMgcCkge30KKyAgcHVibGljIHZvaWQgZjIoQE5vdE51bGwgQyBwKSB7fQorICBwdWJsaWMgdm9pZCBmMyhATnVsbGFibGUgQyBwKSB7fQorICBwdWJsaWMgdm9pZCBmNChATm90TnVsbCBDIHApIHt9Cit9CisKK2NsYXNzIENDIGV4dGVuZHMgQyB7CisgIEBOdWxsYWJsZSBwdWJsaWMgQyBnZXRDKCkge3JldHVybiBDO30KKyAgcHVibGljIEMgZ2V0QzIoKSB7cmV0dXJuIEM7fQorCisgIHB1YmxpYyB2b2lkIGYxKEBOb3ROdWxsIEMgcCkge30KKyAgcHVibGljIHZvaWQgZjIoQE5vdE51bGwgQyBwKSB7fQorICBwdWJsaWMgdm9pZCBmMyhATnVsbGFibGUgQyBwKSB7fQorICBwdWJsaWMgdm9pZCBmNChATnVsbGFibGUgQyBwKSB7fQorCisgIEBOdWxsYWJsZSBATm90TnVsbCBTdHJpbmcgZigpIHsgcmV0dXJuIG51bGw7fQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vbnVtZXJpY092ZXJmbG93L3NpbXBsZS9leHBlY3RlZC54bWwgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9udW1lcmljT3ZlcmZsb3cvc2ltcGxlL2V4cGVjdGVkLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OGQyMmJmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vbnVtZXJpY092ZXJmbG93L3NpbXBsZS9leHBlY3RlZC54bWwKQEAgLTAsMCArMSw2NTAgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8cHJvYmxlbXM+CisgIDxwcm9ibGVtPgorICAgIDxmaWxlPkZvby5qYXZhPC9maWxlPgorICAgIDxsaW5lPjg3PC9saW5lPgorICAgIDxkZXNjcmlwdGlvbj5OdW1lcmljIG92ZXJmbG93IGluIGV4cHJlc3Npb248L2Rlc2NyaXB0aW9uPgorICA8L3Byb2JsZW0+CisKKworICAKKyAgPHByb2JsZW0+CisgICAgPGZpbGU+Rm9vLmphdmE8L2ZpbGU+CisgICAgPGxpbmU+MTY8L2xpbmU+CisgICAgPGRlc2NyaXB0aW9uPk51bWVyaWMgb3ZlcmZsb3cgaW4gZXhwcmVzc2lvbjwvZGVzY3JpcHRpb24+CisgIDwvcHJvYmxlbT4KKworCisgIAorICA8cHJvYmxlbT4KKyAgICA8ZmlsZT5Gb28uamF2YTwvZmlsZT4KKyAgICA8bGluZT4xNzwvbGluZT4KKyAgICAKKyAgICA8ZGVzY3JpcHRpb24+TnVtZXJpYyBvdmVyZmxvdyBpbiBleHByZXNzaW9uPC9kZXNjcmlwdGlvbj4KKyAgPC9wcm9ibGVtPgorCisKKyAgCisgIDxwcm9ibGVtPgorICAgIDxmaWxlPkZvby5qYXZhPC9maWxlPgorICAgIDxsaW5lPjE3PC9saW5lPgorICAgIAorICAgIDxkZXNjcmlwdGlvbj5OdW1lcmljIG92ZXJmbG93IGluIGV4cHJlc3Npb248L2Rlc2NyaXB0aW9uPgorICA8L3Byb2JsZW0+CisKKworICAKKyAgPHByb2JsZW0+CisgICAgPGZpbGU+Rm9vLmphdmE8L2ZpbGU+CisgICAgPGxpbmU+MTg8L2xpbmU+CisgICAgCisgICAgPGRlc2NyaXB0aW9uPk51bWVyaWMgb3ZlcmZsb3cgaW4gZXhwcmVzc2lvbjwvZGVzY3JpcHRpb24+CisgIDwvcHJvYmxlbT4KKworCisgIAorICA8cHJvYmxlbT4KKyAgICA8ZmlsZT5Gb28uamF2YTwvZmlsZT4KKyAgICA8bGluZT4xODwvbGluZT4KKyAgICAKKyAgICA8ZGVzY3JpcHRpb24+TnVtZXJpYyBvdmVyZmxvdyBpbiBleHByZXNzaW9uPC9kZXNjcmlwdGlvbj4KKyAgPC9wcm9ibGVtPgorCisKKyAgCisgIDxwcm9ibGVtPgorICAgIDxmaWxlPkZvby5qYXZhPC9maWxlPgorICAgIDxsaW5lPjE5PC9saW5lPgorICAgIAorICAgIDxkZXNjcmlwdGlvbj5OdW1lcmljIG92ZXJmbG93IGluIGV4cHJlc3Npb248L2Rlc2NyaXB0aW9uPgorICA8L3Byb2JsZW0+CisKKworICAKKyAgPHByb2JsZW0+CisgICAgPGZpbGU+Rm9vLmphdmE8L2ZpbGU+CisgICAgPGxpbmU+MTk8L2xpbmU+CisgICAgCisgICAgPGRlc2NyaXB0aW9uPk51bWVyaWMgb3ZlcmZsb3cgaW4gZXhwcmVzc2lvbjwvZGVzY3JpcHRpb24+CisgIDwvcHJvYmxlbT4KKworCisgIAorICA8cHJvYmxlbT4KKyAgICA8ZmlsZT5Gb28uamF2YTwvZmlsZT4KKyAgICA8bGluZT4yNTwvbGluZT4KKyAgICAKKyAgICA8ZGVzY3JpcHRpb24+TnVtZXJpYyBvdmVyZmxvdyBpbiBleHByZXNzaW9uPC9kZXNjcmlwdGlvbj4KKyAgPC9wcm9ibGVtPgorCisKKyAgCisgIDxwcm9ibGVtPgorICAgIDxmaWxlPkZvby5qYXZhPC9maWxlPgorICAgIDxsaW5lPjI3PC9saW5lPgorICAgIAorICAgIDxkZXNjcmlwdGlvbj5OdW1lcmljIG92ZXJmbG93IGluIGV4cHJlc3Npb248L2Rlc2NyaXB0aW9uPgorICA8L3Byb2JsZW0+CisKKworICAKKyAgPHByb2JsZW0+CisgICAgPGZpbGU+Rm9vLmphdmE8L2ZpbGU+CisgICAgPGxpbmU+Mjc8L2xpbmU+CisgICAgCisgICAgPGRlc2NyaXB0aW9uPk51bWVyaWMgb3ZlcmZsb3cgaW4gZXhwcmVzc2lvbjwvZGVzY3JpcHRpb24+CisgIDwvcHJvYmxlbT4KKworCisgIAorICA8cHJvYmxlbT4KKyAgICA8ZmlsZT5Gb28uamF2YTwvZmlsZT4KKyAgICA8bGluZT4yODwvbGluZT4KKyAgICAKKyAgICA8ZGVzY3JpcHRpb24+TnVtZXJpYyBvdmVyZmxvdyBpbiBleHByZXNzaW9uPC9kZXNjcmlwdGlvbj4KKyAgPC9wcm9ibGVtPgorCisKKyAgCisgIDxwcm9ibGVtPgorICAgIDxmaWxlPkZvby5qYXZhPC9maWxlPgorICAgIDxsaW5lPjI4PC9saW5lPgorICAgIAorICAgIDxkZXNjcmlwdGlvbj5OdW1lcmljIG92ZXJmbG93IGluIGV4cHJlc3Npb248L2Rlc2NyaXB0aW9uPgorICA8L3Byb2JsZW0+CisKKworICAKKyAgPHByb2JsZW0+CisgICAgPGZpbGU+Rm9vLmphdmE8L2ZpbGU+CisgICAgPGxpbmU+Mjk8L2xpbmU+CisgICAgCisgICAgPGRlc2NyaXB0aW9uPk51bWVyaWMgb3ZlcmZsb3cgaW4gZXhwcmVzc2lvbjwvZGVzY3JpcHRpb24+CisgIDwvcHJvYmxlbT4KKworCisgIAorICA8cHJvYmxlbT4KKyAgICA8ZmlsZT5Gb28uamF2YTwvZmlsZT4KKyAgICA8bGluZT4yOTwvbGluZT4KKyAgICAKKyAgICA8ZGVzY3JpcHRpb24+TnVtZXJpYyBvdmVyZmxvdyBpbiBleHByZXNzaW9uPC9kZXNjcmlwdGlvbj4KKyAgPC9wcm9ibGVtPgorCisKKyAgCisgIDxwcm9ibGVtPgorICAgIDxmaWxlPkZvby5qYXZhPC9maWxlPgorICAgIDxsaW5lPjMwPC9saW5lPgorICAgIAorICAgIDxkZXNjcmlwdGlvbj5OdW1lcmljIG92ZXJmbG93IGluIGV4cHJlc3Npb248L2Rlc2NyaXB0aW9uPgorICA8L3Byb2JsZW0+CisKKworICAKKyAgPHByb2JsZW0+CisgICAgPGZpbGU+Rm9vLmphdmE8L2ZpbGU+CisgICAgPGxpbmU+MzA8L2xpbmU+CisgICAgCisgICAgPGRlc2NyaXB0aW9uPk51bWVyaWMgb3ZlcmZsb3cgaW4gZXhwcmVzc2lvbjwvZGVzY3JpcHRpb24+CisgIDwvcHJvYmxlbT4KKworCisgIAorICA8cHJvYmxlbT4KKyAgICA8ZmlsZT5Gb28uamF2YTwvZmlsZT4KKyAgICA8bGluZT4zNDwvbGluZT4KKyAgICAKKyAgICA8ZGVzY3JpcHRpb24+TnVtZXJpYyBvdmVyZmxvdyBpbiBleHByZXNzaW9uPC9kZXNjcmlwdGlvbj4KKyAgPC9wcm9ibGVtPgorCisKKyAgCisgIDxwcm9ibGVtPgorICAgIDxmaWxlPkZvby5qYXZhPC9maWxlPgorICAgIDxsaW5lPjM1PC9saW5lPgorICAgIAorICAgIDxkZXNjcmlwdGlvbj5OdW1lcmljIG92ZXJmbG93IGluIGV4cHJlc3Npb248L2Rlc2NyaXB0aW9uPgorICA8L3Byb2JsZW0+CisKKworICAKKyAgPHByb2JsZW0+CisgICAgPGZpbGU+Rm9vLmphdmE8L2ZpbGU+CisgICAgPGxpbmU+MzU8L2xpbmU+CisgICAgCisgICAgPGRlc2NyaXB0aW9uPk51bWVyaWMgb3ZlcmZsb3cgaW4gZXhwcmVzc2lvbjwvZGVzY3JpcHRpb24+CisgIDwvcHJvYmxlbT4KKworCisgIAorICA8cHJvYmxlbT4KKyAgICA8ZmlsZT5Gb28uamF2YTwvZmlsZT4KKyAgICA8bGluZT4zNjwvbGluZT4KKyAgICAKKyAgICA8ZGVzY3JpcHRpb24+TnVtZXJpYyBvdmVyZmxvdyBpbiBleHByZXNzaW9uPC9kZXNjcmlwdGlvbj4KKyAgPC9wcm9ibGVtPgorCisKKyAgCisgIDxwcm9ibGVtPgorICAgIDxmaWxlPkZvby5qYXZhPC9maWxlPgorICAgIDxsaW5lPjM2PC9saW5lPgorICAgIAorICAgIDxkZXNjcmlwdGlvbj5OdW1lcmljIG92ZXJmbG93IGluIGV4cHJlc3Npb248L2Rlc2NyaXB0aW9uPgorICA8L3Byb2JsZW0+CisKKworICAKKyAgPHByb2JsZW0+CisgICAgPGZpbGU+Rm9vLmphdmE8L2ZpbGU+CisgICAgPGxpbmU+Mzc8L2xpbmU+CisgICAgCisgICAgPGRlc2NyaXB0aW9uPk51bWVyaWMgb3ZlcmZsb3cgaW4gZXhwcmVzc2lvbjwvZGVzY3JpcHRpb24+CisgIDwvcHJvYmxlbT4KKworCisgIAorICA8cHJvYmxlbT4KKyAgICA8ZmlsZT5Gb28uamF2YTwvZmlsZT4KKyAgICA8bGluZT4zNzwvbGluZT4KKyAgICAKKyAgICA8ZGVzY3JpcHRpb24+TnVtZXJpYyBvdmVyZmxvdyBpbiBleHByZXNzaW9uPC9kZXNjcmlwdGlvbj4KKyAgPC9wcm9ibGVtPgorCisKKyAgCisgIDxwcm9ibGVtPgorICAgIDxmaWxlPkZvby5qYXZhPC9maWxlPgorICAgIDxsaW5lPjM4PC9saW5lPgorICAgIAorICAgIDxkZXNjcmlwdGlvbj5OdW1lcmljIG92ZXJmbG93IGluIGV4cHJlc3Npb248L2Rlc2NyaXB0aW9uPgorICA8L3Byb2JsZW0+CisKKworICAKKyAgPHByb2JsZW0+CisgICAgPGZpbGU+Rm9vLmphdmE8L2ZpbGU+CisgICAgPGxpbmU+Mzg8L2xpbmU+CisgICAgCisgICAgPGRlc2NyaXB0aW9uPk51bWVyaWMgb3ZlcmZsb3cgaW4gZXhwcmVzc2lvbjwvZGVzY3JpcHRpb24+CisgIDwvcHJvYmxlbT4KKworCisgIAorICA8cHJvYmxlbT4KKyAgICA8ZmlsZT5Gb28uamF2YTwvZmlsZT4KKyAgICA8bGluZT4zOTwvbGluZT4KKyAgICAKKyAgICA8ZGVzY3JpcHRpb24+TnVtZXJpYyBvdmVyZmxvdyBpbiBleHByZXNzaW9uPC9kZXNjcmlwdGlvbj4KKyAgPC9wcm9ibGVtPgorCisKKyAgCisgIDxwcm9ibGVtPgorICAgIDxmaWxlPkZvby5qYXZhPC9maWxlPgorICAgIDxsaW5lPjM5PC9saW5lPgorICAgIAorICAgIDxkZXNjcmlwdGlvbj5OdW1lcmljIG92ZXJmbG93IGluIGV4cHJlc3Npb248L2Rlc2NyaXB0aW9uPgorICA8L3Byb2JsZW0+CisKKworICAKKyAgPHByb2JsZW0+CisgICAgPGZpbGU+Rm9vLmphdmE8L2ZpbGU+CisgICAgPGxpbmU+NDM8L2xpbmU+CisgICAgCisgICAgPGRlc2NyaXB0aW9uPk51bWVyaWMgb3ZlcmZsb3cgaW4gZXhwcmVzc2lvbjwvZGVzY3JpcHRpb24+CisgIDwvcHJvYmxlbT4KKworCisgIAorICA8cHJvYmxlbT4KKyAgICA8ZmlsZT5Gb28uamF2YTwvZmlsZT4KKyAgICA8bGluZT40MzwvbGluZT4KKyAgICAKKyAgICA8ZGVzY3JpcHRpb24+TnVtZXJpYyBvdmVyZmxvdyBpbiBleHByZXNzaW9uPC9kZXNjcmlwdGlvbj4KKyAgPC9wcm9ibGVtPgorCisKKyAgCisgIDxwcm9ibGVtPgorICAgIDxmaWxlPkZvby5qYXZhPC9maWxlPgorICAgIDxsaW5lPjQ0PC9saW5lPgorICAgIAorICAgIDxkZXNjcmlwdGlvbj5OdW1lcmljIG92ZXJmbG93IGluIGV4cHJlc3Npb248L2Rlc2NyaXB0aW9uPgorICA8L3Byb2JsZW0+CisKKworICAKKyAgPHByb2JsZW0+CisgICAgPGZpbGU+Rm9vLmphdmE8L2ZpbGU+CisgICAgPGxpbmU+NDQ8L2xpbmU+CisgICAgCisgICAgPGRlc2NyaXB0aW9uPk51bWVyaWMgb3ZlcmZsb3cgaW4gZXhwcmVzc2lvbjwvZGVzY3JpcHRpb24+CisgIDwvcHJvYmxlbT4KKworCisgIAorICA8cHJvYmxlbT4KKyAgICA8ZmlsZT5Gb28uamF2YTwvZmlsZT4KKyAgICA8bGluZT40NTwvbGluZT4KKyAgICAKKyAgICA8ZGVzY3JpcHRpb24+TnVtZXJpYyBvdmVyZmxvdyBpbiBleHByZXNzaW9uPC9kZXNjcmlwdGlvbj4KKyAgPC9wcm9ibGVtPgorCisKKyAgCisgIDxwcm9ibGVtPgorICAgIDxmaWxlPkZvby5qYXZhPC9maWxlPgorICAgIDxsaW5lPjQ1PC9saW5lPgorICAgIAorICAgIDxkZXNjcmlwdGlvbj5OdW1lcmljIG92ZXJmbG93IGluIGV4cHJlc3Npb248L2Rlc2NyaXB0aW9uPgorICA8L3Byb2JsZW0+CisKKworICAKKyAgPHByb2JsZW0+CisgICAgPGZpbGU+Rm9vLmphdmE8L2ZpbGU+CisgICAgPGxpbmU+NDc8L2xpbmU+CisgICAgCisgICAgPGRlc2NyaXB0aW9uPk51bWVyaWMgb3ZlcmZsb3cgaW4gZXhwcmVzc2lvbjwvZGVzY3JpcHRpb24+CisgIDwvcHJvYmxlbT4KKworCisgIAorICA8cHJvYmxlbT4KKyAgICA8ZmlsZT5Gb28uamF2YTwvZmlsZT4KKyAgICA8bGluZT40NzwvbGluZT4KKyAgICAKKyAgICA8ZGVzY3JpcHRpb24+TnVtZXJpYyBvdmVyZmxvdyBpbiBleHByZXNzaW9uPC9kZXNjcmlwdGlvbj4KKyAgPC9wcm9ibGVtPgorCisKKyAgCisgIDxwcm9ibGVtPgorICAgIDxmaWxlPkZvby5qYXZhPC9maWxlPgorICAgIDxsaW5lPjQ4PC9saW5lPgorICAgIAorICAgIDxkZXNjcmlwdGlvbj5OdW1lcmljIG92ZXJmbG93IGluIGV4cHJlc3Npb248L2Rlc2NyaXB0aW9uPgorICA8L3Byb2JsZW0+CisKKworICAKKyAgPHByb2JsZW0+CisgICAgPGZpbGU+Rm9vLmphdmE8L2ZpbGU+CisgICAgPGxpbmU+NDg8L2xpbmU+CisgICAgCisgICAgPGRlc2NyaXB0aW9uPk51bWVyaWMgb3ZlcmZsb3cgaW4gZXhwcmVzc2lvbjwvZGVzY3JpcHRpb24+CisgIDwvcHJvYmxlbT4KKworCisgIAorICA8cHJvYmxlbT4KKyAgICA8ZmlsZT5Gb28uamF2YTwvZmlsZT4KKyAgICA8bGluZT41MTwvbGluZT4KKyAgICAKKyAgICA8ZGVzY3JpcHRpb24+TnVtZXJpYyBvdmVyZmxvdyBpbiBleHByZXNzaW9uPC9kZXNjcmlwdGlvbj4KKyAgPC9wcm9ibGVtPgorCisKKyAgCisgIDxwcm9ibGVtPgorICAgIDxmaWxlPkZvby5qYXZhPC9maWxlPgorICAgIDxsaW5lPjUyPC9saW5lPgorICAgIAorICAgIDxkZXNjcmlwdGlvbj5OdW1lcmljIG92ZXJmbG93IGluIGV4cHJlc3Npb248L2Rlc2NyaXB0aW9uPgorICA8L3Byb2JsZW0+CisKKworICAKKyAgPHByb2JsZW0+CisgICAgPGZpbGU+Rm9vLmphdmE8L2ZpbGU+CisgICAgPGxpbmU+NTI8L2xpbmU+CisgICAgCisgICAgPGRlc2NyaXB0aW9uPk51bWVyaWMgb3ZlcmZsb3cgaW4gZXhwcmVzc2lvbjwvZGVzY3JpcHRpb24+CisgIDwvcHJvYmxlbT4KKworCisgIAorICA8cHJvYmxlbT4KKyAgICA8ZmlsZT5Gb28uamF2YTwvZmlsZT4KKyAgICA8bGluZT41MzwvbGluZT4KKyAgICAKKyAgICA8ZGVzY3JpcHRpb24+TnVtZXJpYyBvdmVyZmxvdyBpbiBleHByZXNzaW9uPC9kZXNjcmlwdGlvbj4KKyAgPC9wcm9ibGVtPgorCisKKyAgCisgIDxwcm9ibGVtPgorICAgIDxmaWxlPkZvby5qYXZhPC9maWxlPgorICAgIDxsaW5lPjUzPC9saW5lPgorICAgIAorICAgIDxkZXNjcmlwdGlvbj5OdW1lcmljIG92ZXJmbG93IGluIGV4cHJlc3Npb248L2Rlc2NyaXB0aW9uPgorICA8L3Byb2JsZW0+CisKKworICAKKyAgPHByb2JsZW0+CisgICAgPGZpbGU+Rm9vLmphdmE8L2ZpbGU+CisgICAgPGxpbmU+NTQ8L2xpbmU+CisgICAgCisgICAgPGRlc2NyaXB0aW9uPk51bWVyaWMgb3ZlcmZsb3cgaW4gZXhwcmVzc2lvbjwvZGVzY3JpcHRpb24+CisgIDwvcHJvYmxlbT4KKworCisgIAorICA8cHJvYmxlbT4KKyAgICA8ZmlsZT5Gb28uamF2YTwvZmlsZT4KKyAgICA8bGluZT41NDwvbGluZT4KKyAgICAKKyAgICA8ZGVzY3JpcHRpb24+TnVtZXJpYyBvdmVyZmxvdyBpbiBleHByZXNzaW9uPC9kZXNjcmlwdGlvbj4KKyAgPC9wcm9ibGVtPgorCisKKyAgCisgIDxwcm9ibGVtPgorICAgIDxmaWxlPkZvby5qYXZhPC9maWxlPgorICAgIDxsaW5lPjU1PC9saW5lPgorICAgIAorICAgIDxkZXNjcmlwdGlvbj5OdW1lcmljIG92ZXJmbG93IGluIGV4cHJlc3Npb248L2Rlc2NyaXB0aW9uPgorICA8L3Byb2JsZW0+CisKKworICAKKyAgPHByb2JsZW0+CisgICAgPGZpbGU+Rm9vLmphdmE8L2ZpbGU+CisgICAgPGxpbmU+NTU8L2xpbmU+CisgICAgCisgICAgPGRlc2NyaXB0aW9uPk51bWVyaWMgb3ZlcmZsb3cgaW4gZXhwcmVzc2lvbjwvZGVzY3JpcHRpb24+CisgIDwvcHJvYmxlbT4KKworCisgIAorICA8cHJvYmxlbT4KKyAgICA8ZmlsZT5Gb28uamF2YTwvZmlsZT4KKyAgICA8bGluZT41NjwvbGluZT4KKyAgICAKKyAgICA8ZGVzY3JpcHRpb24+TnVtZXJpYyBvdmVyZmxvdyBpbiBleHByZXNzaW9uPC9kZXNjcmlwdGlvbj4KKyAgPC9wcm9ibGVtPgorCisKKyAgCisgIDxwcm9ibGVtPgorICAgIDxmaWxlPkZvby5qYXZhPC9maWxlPgorICAgIDxsaW5lPjU2PC9saW5lPgorICAgIAorICAgIDxkZXNjcmlwdGlvbj5OdW1lcmljIG92ZXJmbG93IGluIGV4cHJlc3Npb248L2Rlc2NyaXB0aW9uPgorICA8L3Byb2JsZW0+CisKKworICAKKyAgPHByb2JsZW0+CisgICAgPGZpbGU+Rm9vLmphdmE8L2ZpbGU+CisgICAgPGxpbmU+NjA8L2xpbmU+CisgICAgCisgICAgPGRlc2NyaXB0aW9uPk51bWVyaWMgb3ZlcmZsb3cgaW4gZXhwcmVzc2lvbjwvZGVzY3JpcHRpb24+CisgIDwvcHJvYmxlbT4KKworCisgIAorICA8cHJvYmxlbT4KKyAgICA8ZmlsZT5Gb28uamF2YTwvZmlsZT4KKyAgICA8bGluZT42MDwvbGluZT4KKyAgICAKKyAgICA8ZGVzY3JpcHRpb24+TnVtZXJpYyBvdmVyZmxvdyBpbiBleHByZXNzaW9uPC9kZXNjcmlwdGlvbj4KKyAgPC9wcm9ibGVtPgorCisKKyAgCisgIDxwcm9ibGVtPgorICAgIDxmaWxlPkZvby5qYXZhPC9maWxlPgorICAgIDxsaW5lPjYyPC9saW5lPgorICAgIAorICAgIDxkZXNjcmlwdGlvbj5OdW1lcmljIG92ZXJmbG93IGluIGV4cHJlc3Npb248L2Rlc2NyaXB0aW9uPgorICA8L3Byb2JsZW0+CisKKworICAKKyAgPHByb2JsZW0+CisgICAgPGZpbGU+Rm9vLmphdmE8L2ZpbGU+CisgICAgPGxpbmU+NjI8L2xpbmU+CisgICAgCisgICAgPGRlc2NyaXB0aW9uPk51bWVyaWMgb3ZlcmZsb3cgaW4gZXhwcmVzc2lvbjwvZGVzY3JpcHRpb24+CisgIDwvcHJvYmxlbT4KKworCisgIAorICA8cHJvYmxlbT4KKyAgICA8ZmlsZT5Gb28uamF2YTwvZmlsZT4KKyAgICA8bGluZT42MzwvbGluZT4KKyAgICAKKyAgICA8ZGVzY3JpcHRpb24+TnVtZXJpYyBvdmVyZmxvdyBpbiBleHByZXNzaW9uPC9kZXNjcmlwdGlvbj4KKyAgPC9wcm9ibGVtPgorCisKKyAgCisgIDxwcm9ibGVtPgorICAgIDxmaWxlPkZvby5qYXZhPC9maWxlPgorICAgIDxsaW5lPjYzPC9saW5lPgorICAgIAorICAgIDxkZXNjcmlwdGlvbj5OdW1lcmljIG92ZXJmbG93IGluIGV4cHJlc3Npb248L2Rlc2NyaXB0aW9uPgorICA8L3Byb2JsZW0+CisKKworICAKKyAgPHByb2JsZW0+CisgICAgPGZpbGU+Rm9vLmphdmE8L2ZpbGU+CisgICAgPGxpbmU+NjQ8L2xpbmU+CisgICAgCisgICAgPGRlc2NyaXB0aW9uPk51bWVyaWMgb3ZlcmZsb3cgaW4gZXhwcmVzc2lvbjwvZGVzY3JpcHRpb24+CisgIDwvcHJvYmxlbT4KKworCisgIAorICA8cHJvYmxlbT4KKyAgICA8ZmlsZT5Gb28uamF2YTwvZmlsZT4KKyAgICA8bGluZT42NDwvbGluZT4KKyAgICAKKyAgICA8ZGVzY3JpcHRpb24+TnVtZXJpYyBvdmVyZmxvdyBpbiBleHByZXNzaW9uPC9kZXNjcmlwdGlvbj4KKyAgPC9wcm9ibGVtPgorCisKKyAgCisgIDxwcm9ibGVtPgorICAgIDxmaWxlPkZvby5qYXZhPC9maWxlPgorICAgIDxsaW5lPjY1PC9saW5lPgorICAgIAorICAgIDxkZXNjcmlwdGlvbj5OdW1lcmljIG92ZXJmbG93IGluIGV4cHJlc3Npb248L2Rlc2NyaXB0aW9uPgorICA8L3Byb2JsZW0+CisKKworICAKKyAgPHByb2JsZW0+CisgICAgPGZpbGU+Rm9vLmphdmE8L2ZpbGU+CisgICAgPGxpbmU+NjU8L2xpbmU+CisgICAgCisgICAgPGRlc2NyaXB0aW9uPk51bWVyaWMgb3ZlcmZsb3cgaW4gZXhwcmVzc2lvbjwvZGVzY3JpcHRpb24+CisgIDwvcHJvYmxlbT4KKworCisgIAorICA8cHJvYmxlbT4KKyAgICA8ZmlsZT5Gb28uamF2YTwvZmlsZT4KKyAgICA8bGluZT42NzwvbGluZT4KKyAgICAKKyAgICA8ZGVzY3JpcHRpb24+TnVtZXJpYyBvdmVyZmxvdyBpbiBleHByZXNzaW9uPC9kZXNjcmlwdGlvbj4KKyAgPC9wcm9ibGVtPgorCisKKyAgCisgIDxwcm9ibGVtPgorICAgIDxmaWxlPkZvby5qYXZhPC9maWxlPgorICAgIDxsaW5lPjY3PC9saW5lPgorICAgIAorICAgIDxkZXNjcmlwdGlvbj5OdW1lcmljIG92ZXJmbG93IGluIGV4cHJlc3Npb248L2Rlc2NyaXB0aW9uPgorICA8L3Byb2JsZW0+CisKKworICAKKyAgPHByb2JsZW0+CisgICAgPGZpbGU+Rm9vLmphdmE8L2ZpbGU+CisgICAgPGxpbmU+Njg8L2xpbmU+CisgICAgCisgICAgPGRlc2NyaXB0aW9uPk51bWVyaWMgb3ZlcmZsb3cgaW4gZXhwcmVzc2lvbjwvZGVzY3JpcHRpb24+CisgIDwvcHJvYmxlbT4KKworCisgIAorICA8cHJvYmxlbT4KKyAgICA8ZmlsZT5Gb28uamF2YTwvZmlsZT4KKyAgICA8bGluZT42ODwvbGluZT4KKyAgICAKKyAgICA8ZGVzY3JpcHRpb24+TnVtZXJpYyBvdmVyZmxvdyBpbiBleHByZXNzaW9uPC9kZXNjcmlwdGlvbj4KKyAgPC9wcm9ibGVtPgorCisKKyAgCisgIDxwcm9ibGVtPgorICAgIDxmaWxlPkZvby5qYXZhPC9maWxlPgorICAgIDxsaW5lPjY5PC9saW5lPgorICAgIAorICAgIDxkZXNjcmlwdGlvbj5OdW1lcmljIG92ZXJmbG93IGluIGV4cHJlc3Npb248L2Rlc2NyaXB0aW9uPgorICA8L3Byb2JsZW0+CisKKworICAKKyAgPHByb2JsZW0+CisgICAgPGZpbGU+Rm9vLmphdmE8L2ZpbGU+CisgICAgPGxpbmU+Njk8L2xpbmU+CisgICAgCisgICAgPGRlc2NyaXB0aW9uPk51bWVyaWMgb3ZlcmZsb3cgaW4gZXhwcmVzc2lvbjwvZGVzY3JpcHRpb24+CisgIDwvcHJvYmxlbT4KKworCisgIAorICA8cHJvYmxlbT4KKyAgICA8ZmlsZT5Gb28uamF2YTwvZmlsZT4KKyAgICA8bGluZT43MTwvbGluZT4KKyAgICAKKyAgICA8ZGVzY3JpcHRpb24+TnVtZXJpYyBvdmVyZmxvdyBpbiBleHByZXNzaW9uPC9kZXNjcmlwdGlvbj4KKyAgPC9wcm9ibGVtPgorCisKKyAgCisgIDxwcm9ibGVtPgorICAgIDxmaWxlPkZvby5qYXZhPC9maWxlPgorICAgIDxsaW5lPjcxPC9saW5lPgorICAgIAorICAgIDxkZXNjcmlwdGlvbj5OdW1lcmljIG92ZXJmbG93IGluIGV4cHJlc3Npb248L2Rlc2NyaXB0aW9uPgorICA8L3Byb2JsZW0+CisKKworICAKKyAgPHByb2JsZW0+CisgICAgPGZpbGU+Rm9vLmphdmE8L2ZpbGU+CisgICAgPGxpbmU+NzI8L2xpbmU+CisgICAgCisgICAgPGRlc2NyaXB0aW9uPk51bWVyaWMgb3ZlcmZsb3cgaW4gZXhwcmVzc2lvbjwvZGVzY3JpcHRpb24+CisgIDwvcHJvYmxlbT4KKworCisgIAorICA8cHJvYmxlbT4KKyAgICA8ZmlsZT5Gb28uamF2YTwvZmlsZT4KKyAgICA8bGluZT43MjwvbGluZT4KKyAgICAKKyAgICA8ZGVzY3JpcHRpb24+TnVtZXJpYyBvdmVyZmxvdyBpbiBleHByZXNzaW9uPC9kZXNjcmlwdGlvbj4KKyAgPC9wcm9ibGVtPgorCisKKyAgCisgIDxwcm9ibGVtPgorICAgIDxmaWxlPkZvby5qYXZhPC9maWxlPgorICAgIDxsaW5lPjcyPC9saW5lPgorICAgIAorICAgIDxkZXNjcmlwdGlvbj5OdW1lcmljIG92ZXJmbG93IGluIGV4cHJlc3Npb248L2Rlc2NyaXB0aW9uPgorICA8L3Byb2JsZW0+CisKKworICAKKyAgPHByb2JsZW0+CisgICAgPGZpbGU+Rm9vLmphdmE8L2ZpbGU+CisgICAgPGxpbmU+NzI8L2xpbmU+CisgICAgCisgICAgPGRlc2NyaXB0aW9uPk51bWVyaWMgb3ZlcmZsb3cgaW4gZXhwcmVzc2lvbjwvZGVzY3JpcHRpb24+CisgIDwvcHJvYmxlbT4KKworCisgIAorICA8cHJvYmxlbT4KKyAgICA8ZmlsZT5Gb28uamF2YTwvZmlsZT4KKyAgICA8bGluZT43MjwvbGluZT4KKworICAgIDxkZXNjcmlwdGlvbj5OdW1lcmljIG92ZXJmbG93IGluIGV4cHJlc3Npb248L2Rlc2NyaXB0aW9uPgorICA8L3Byb2JsZW0+CisKKworICAKKzwvcHJvYmxlbXM+CisKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL251bWVyaWNPdmVyZmxvdy9zaW1wbGUvc3JjL0Zvby5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vbnVtZXJpY092ZXJmbG93L3NpbXBsZS9zcmMvRm9vLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWFlZDNjNgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL251bWVyaWNPdmVyZmxvdy9zaW1wbGUvc3JjL0Zvby5qYXZhCkBAIC0wLDAgKzEsODggQEAKKy8vIG92ZXJmbG93cyBpbiBjb25zdCBleHByZXNzaW9ucworCisKK2NsYXNzIGMgeworIC8vIEAqIyQmICEgcmVmZXJlbmNlcyBkbyBub3Qgd29yayBpbiBKUkUKKyBzdGF0aWMgZmluYWwgbG9uZyBMT05HX01JTl9WQUxVRSA9IDB4ODAwMDAwMDAwMDAwMDAwMEw7Cisgc3RhdGljIGZpbmFsIGxvbmcgTE9OR19NQVhfVkFMVUUgPSAweDdmZmZmZmZmZmZmZmZmZmZMOworIHN0YXRpYyBmaW5hbCBpbnQgSU5URUdFUl9NSU5fVkFMVUUgPSAweDgwMDAwMDAwOworIHN0YXRpYyBmaW5hbCBpbnQgSU5URUdFUl9NQVhfVkFMVUUgPSAweDdmZmZmZmZmOworIHN0YXRpYyBmaW5hbCBmbG9hdCBGTE9BVF9NSU5fVkFMVUUgPSAxLjRlLTQ1ZjsKKyBzdGF0aWMgZmluYWwgZmxvYXQgRkxPQVRfTUFYX1ZBTFVFID0gMy40MDI4MjM1ZSszOGY7Cisgc3RhdGljIGZpbmFsIGRvdWJsZSBET1VCTEVfTUlOX1ZBTFVFID0gNC45ZS0zMjQ7Cisgc3RhdGljIGZpbmFsIGRvdWJsZSBET1VCTEVfTUFYX1ZBTFVFID0gMS43OTc2OTMxMzQ4NjIzMTU3ZSszMDg7CisKKyB2b2lkIGYoKSB7CisgICBmbG9hdCBmMSA9IDEuMGYgLyAwLjBmOworICAgZjEgPSBGTE9BVF9NQVhfVkFMVUUgKyBGTE9BVF9NQVhfVkFMVUU7CisgICBmMSA9IEZMT0FUX01BWF9WQUxVRSAqIDI7CisgICBmMSA9IDIgLyBGTE9BVF9NSU5fVkFMVUU7CisgICBmMSA9IEZMT0FUX01JTl9WQUxVRSArIDE7CisgICBmMSA9IC0gRkxPQVRfTUlOX1ZBTFVFOworICAgZjEgPSAtRkxPQVRfTUFYX1ZBTFVFOworICAgU3lzdGVtLm91dC5wcmludGxuKGYxKTsKKworICAgZG91YmxlIGQxID0gRE9VQkxFX01BWF9WQUxVRSAtIC1ET1VCTEVfTUFYX1ZBTFVFOworICAgZDEgPSBET1VCTEVfTUFYX1ZBTFVFICsgMTsKKyAgIGQxID0gMiAqIERPVUJMRV9NQVhfVkFMVUU7CisgICBkMSA9IDIgLyBET1VCTEVfTUlOX1ZBTFVFOworICAgZDEgPSAyIC8gMC4wZDsKKyAgIGQxID0gMiAvIDAuMDsKKyAgIFN5c3RlbS5vdXQucHJpbnRsbihkMSk7CisKKworICAgaW50IGkxID0gSU5URUdFUl9NQVhfVkFMVUUgKyAxOworICAgaTEgPSBJTlRFR0VSX01BWF9WQUxVRSAtIDEgKyAyOworICAgaTEgPSBJTlRFR0VSX01BWF9WQUxVRSAtIElOVEVHRVJfTUlOX1ZBTFVFOworICAgaTEgPSAtSU5URUdFUl9NSU5fVkFMVUU7CisgICBpMSA9IElOVEVHRVJfTUlOX1ZBTFVFIC0gMTsKKyAgIGkxID0gSU5URUdFUl9NSU5fVkFMVUUgLSBJTlRFR0VSX01BWF9WQUxVRTsKKyAgIGkxID0gSU5URUdFUl9NSU5fVkFMVUUgKyBJTlRFR0VSX01BWF9WQUxVRTsKKyAgIGkxID0gLSBJTlRFR0VSX01BWF9WQUxVRTsKKyAgIGkxID0gLSAtSU5URUdFUl9NQVhfVkFMVUU7CisgICBpMSA9IElOVEVHRVJfTUlOX1ZBTFVFICogLTE7CisgICBpMSA9IElOVEVHRVJfTUlOX1ZBTFVFICogMjsKKyAgIGkxID0gSU5URUdFUl9NQVhfVkFMVUUgKiAtMjsKKyAgIGkxID0gSU5URUdFUl9NQVhfVkFMVUUgKiAtMTsKKyAgIGkxID0gMiAvIDA7CisgICBpMSA9IElOVEVHRVJfTUlOX1ZBTFVFIC8gLTE7CisgICBTeXN0ZW0ub3V0LnByaW50bG4oaTEpOworCisgICBsb25nIGwxID0gTE9OR19NQVhfVkFMVUUgKyAxOworICAgbDEgPSBMT05HX01BWF9WQUxVRSAtIDEgKyAyOworICAgbDEgPSBMT05HX01BWF9WQUxVRSAtIExPTkdfTUlOX1ZBTFVFOworICAgbDEgPSAtTE9OR19NSU5fVkFMVUU7CisgICBsMSA9IExPTkdfTUlOX1ZBTFVFIC0gMTsKKyAgIGwxID0gTE9OR19NSU5fVkFMVUUgLSBMT05HX01BWF9WQUxVRTsKKyAgIGwxID0gTE9OR19NSU5fVkFMVUUgKyBMT05HX01BWF9WQUxVRTsKKyAgIGwxID0gLSBMT05HX01BWF9WQUxVRTsKKyAgIGwxID0gLSAtTE9OR19NQVhfVkFMVUU7CisgICBsMSA9IC1JTlRFR0VSX01JTl9WQUxVRTsKKyAgIGwxID0gIC0xTCArIElOVEVHRVJfTUlOX1ZBTFVFOworICAgbDEgPSBMT05HX01JTl9WQUxVRSAqIElOVEVHRVJfTUlOX1ZBTFVFOworICAgbDEgPSBMT05HX01JTl9WQUxVRSAqIC0xOworICAgbDEgPSBMT05HX01JTl9WQUxVRSAqIDI7CisgICBsMSA9IExPTkdfTUFYX1ZBTFVFICogLTI7CisgICBsMSA9IElOVEVHRVJfTUlOX1ZBTFVFICogLTFMOworICAgbDEgPSAyIC8gMEw7CisgICBsMSA9IDIgJSAwTDsKKyAgIGwxID0gTE9OR19NSU5fVkFMVUUgLyAtMTsKKworICAgbDEgPSAzMCAqIDI0ICogNjAgKiA2MCAqIDEwMDA7IAorICAgbDEgPSAzMDAwMDAwMCAqIDI0MzIzMjMyMyAqIChMT05HX01BWF9WQUxVRSArMykgLyA1OworCisgICBTeXN0ZW0ub3V0LnByaW50bG4obDEpOworCisKKyAgIAorICAgfQorICAgCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgbG9uZyBNSUxMSVNfUEVSX0RBWSA9IDI0ICogMzYwMCAqIDEwMDA7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgbG9uZyBfN0RBWVMgPSA3ICogTUlMTElTX1BFUl9EQVk7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgbG9uZyBfMzBEQVlTID0gMzAgKiBNSUxMSVNfUEVSX0RBWTsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBsb25nIF8xMDAwREFZUyA9IDEwMDAgKiBNSUxMSVNfUEVSX0RBWTsKKyAgICB7CisgICAgICAgU3lzdGVtLm91dC5wcmludGxuKF8xMDAwREFZUyArIF8zMERBWVMgKyBfN0RBWVMpOworICAgIH0KKyAgICBpbnQgaWlpID0gMiAlIDA7Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9wYXJhbWV0ZXJDYW5CZUxvY2FsL2Zvci9leHBlY3RlZC54bWwgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9wYXJhbWV0ZXJDYW5CZUxvY2FsL2Zvci9leHBlY3RlZC54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWNkZjE1NAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3BhcmFtZXRlckNhbkJlTG9jYWwvZm9yL2V4cGVjdGVkLnhtbApAQCAtMCwwICsxLDggQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8cHJvYmxlbXM+CisgIDxwcm9ibGVtPgorICAgIDxmaWxlPlRlc3QuamF2YTwvZmlsZT4KKyAgICA8bGluZT4yPC9saW5lPgorICAgIDxkZXNjcmlwdGlvbj5QYXJhbWV0ZXIgY2FuIGJlIGNvbnZlcnRlZCB0byBhIHZhcmlhYmxlPC9kZXNjcmlwdGlvbj4KKyAgPC9wcm9ibGVtPgorPC9wcm9ibGVtcz4KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3BhcmFtZXRlckNhbkJlTG9jYWwvZm9yL3NyYy9UZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9wYXJhbWV0ZXJDYW5CZUxvY2FsL2Zvci9zcmMvVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk1NDY3YTYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9wYXJhbWV0ZXJDYW5CZUxvY2FsL2Zvci9zcmMvVGVzdC5qYXZhCkBAIC0wLDAgKzEsOCBAQAorY2xhc3MgVGVtcCB7CisgIHB1YmxpYyBUZW1wKGludCBwKSB7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAxMDsgaSsrKSB7CisgICAgICBwID0gaTsKKyAgICAgIFN5c3RlbS5vdXQucHJpbnQocCk7CisgICAgfQorICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vcGFyYW1ldGVyQ2FuQmVMb2NhbC9pZi9leHBlY3RlZC54bWwgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9wYXJhbWV0ZXJDYW5CZUxvY2FsL2lmL2V4cGVjdGVkLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNmFiZWM2Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vcGFyYW1ldGVyQ2FuQmVMb2NhbC9pZi9leHBlY3RlZC54bWwKQEAgLTAsMCArMSw4IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHByb2JsZW1zPgorICA8cHJvYmxlbT4KKyAgICA8ZmlsZT5UZXN0LmphdmE8L2ZpbGU+CisgICAgPGxpbmU+NDwvbGluZT4KKyAgICA8ZGVzY3JpcHRpb24+UGFyYW1ldGVyIGNhbiBiZSBjb252ZXJ0ZWQgdG8gYSB2YXJpYWJsZTwvZGVzY3JpcHRpb24+CisgIDwvcHJvYmxlbT4KKzwvcHJvYmxlbXM+CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9wYXJhbWV0ZXJDYW5CZUxvY2FsL2lmL3NyYy9UZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9wYXJhbWV0ZXJDYW5CZUxvY2FsL2lmL3NyYy9UZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGFlNjgwMAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3BhcmFtZXRlckNhbkJlTG9jYWwvaWYvc3JjL1Rlc3QuamF2YQpAQCAtMCwwICsxLDEzIEBACitjbGFzcyBUZW1wIHsKKyAgcHVibGljIGJvb2xlYW4gZmxhZzsKKworICB2b2lkIHRlc3QoaW50IHApIHsKKyAgICBpZiAoZmxhZykgeworICAgICAgcCA9IDE7CisgICAgfQorICAgIGVsc2UgeworICAgICAgcCA9IDI7CisgICAgfQorICAgIFN5c3RlbS5vdXQucHJpbnQocCk7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9wYXJhbWV0ZXJDYW5CZUxvY2FsL3JlYWRPbmx5L2V4cGVjdGVkLnhtbCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3BhcmFtZXRlckNhbkJlTG9jYWwvcmVhZE9ubHkvZXhwZWN0ZWQueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ3MDRkOTEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9wYXJhbWV0ZXJDYW5CZUxvY2FsL3JlYWRPbmx5L2V4cGVjdGVkLnhtbApAQCAtMCwwICsxLDIgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8cHJvYmxlbXMvPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3BhcmFtZXRlckNhbkJlTG9jYWwvcmVhZE9ubHkvc3JjL1Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3BhcmFtZXRlckNhbkJlTG9jYWwvcmVhZE9ubHkvc3JjL1Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45Mjk2ZTdlCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vcGFyYW1ldGVyQ2FuQmVMb2NhbC9yZWFkT25seS9zcmMvVGVzdC5qYXZhCkBAIC0wLDAgKzEsOCBAQAorY2xhc3MgVGVzdCB7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBib29sZWFuIG15Rm9vID0gZmFsc2U7CisKKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgZm9vKGludCBwKSB7CisgICAgICAgIGlmICghbXlGb28pIHJldHVybjsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJwID0gIiArIHApOworICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3BhcmFtZXRlckNhbkJlTG9jYWwvc2ltcGxlL2V4cGVjdGVkLnhtbCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3BhcmFtZXRlckNhbkJlTG9jYWwvc2ltcGxlL2V4cGVjdGVkLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hODNhYmQyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vcGFyYW1ldGVyQ2FuQmVMb2NhbC9zaW1wbGUvZXhwZWN0ZWQueG1sCkBAIC0wLDAgKzEsOCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxwcm9ibGVtcz4KKyAgPHByb2JsZW0+CisgICAgPGZpbGU+VGVzdC5qYXZhPC9maWxlPgorICAgIDxsaW5lPjM8L2xpbmU+CisgICAgPGRlc2NyaXB0aW9uPlBhcmFtZXRlciBjYW4gYmUgY29udmVydGVkIHRvIGEgdmFyaWFibGU8L2Rlc2NyaXB0aW9uPgorICA8L3Byb2JsZW0+Cis8L3Byb2JsZW1zPgpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vcGFyYW1ldGVyQ2FuQmVMb2NhbC9zaW1wbGUvc3JjL1Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3BhcmFtZXRlckNhbkJlTG9jYWwvc2ltcGxlL3NyYy9UZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzNlYzQ3YQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3BhcmFtZXRlckNhbkJlTG9jYWwvc2ltcGxlL3NyYy9UZXN0LmphdmEKQEAgLTAsMCArMSw3IEBACitjbGFzcyBUZW1wIHsKKworICB2b2lkIHRlc3QoaW50IHApIHsKKyAgICBwID0gMTsKKyAgICBTeXN0ZW0ub3V0LnByaW50KHApOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vcXVpY2tGaXgvQ29udmVydFBhcmFtZXRlclRvTG9jYWxWYXJpYWJsZS9hZnRlckZvci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vcXVpY2tGaXgvQ29udmVydFBhcmFtZXRlclRvTG9jYWxWYXJpYWJsZS9hZnRlckZvci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNlODcxMWUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9xdWlja0ZpeC9Db252ZXJ0UGFyYW1ldGVyVG9Mb2NhbFZhcmlhYmxlL2FmdGVyRm9yLmphdmEKQEAgLTAsMCArMSw5IEBACisvLyAiQ29udmVydCB0byBsb2NhbCB2YXJpYWJsZSIgInRydWUiCitjbGFzcyBUZW1wIHsKKyAgcHVibGljIFRlbXAoKSB7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAxMDsgaSsrKSB7CisgICAgICAgIDxjYXJldD5pbnQgcCA9IGk7CisgICAgICBTeXN0ZW0ub3V0LnByaW50KHApOworICAgIH0KKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3F1aWNrRml4L0NvbnZlcnRQYXJhbWV0ZXJUb0xvY2FsVmFyaWFibGUvYWZ0ZXJJZi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vcXVpY2tGaXgvQ29udmVydFBhcmFtZXRlclRvTG9jYWxWYXJpYWJsZS9hZnRlcklmLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTZkOGY3NQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3F1aWNrRml4L0NvbnZlcnRQYXJhbWV0ZXJUb0xvY2FsVmFyaWFibGUvYWZ0ZXJJZi5qYXZhCkBAIC0wLDAgKzEsMTUgQEAKKy8vICJDb252ZXJ0IHRvIGxvY2FsIHZhcmlhYmxlIiAidHJ1ZSIKK2NsYXNzIFRlbXAgeworICBwdWJsaWMgYm9vbGVhbiBmbGFnOworCisgIHZvaWQgdGVzdCgpIHsKKyAgICAgIDxjYXJldD5pbnQgcDsKKyAgICAgIGlmIChmbGFnKSB7CisgICAgICBwID0gMTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICBwID0gMjsKKyAgICB9CisgICAgU3lzdGVtLm91dC5wcmludChwKTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3F1aWNrRml4L0NvbnZlcnRQYXJhbWV0ZXJUb0xvY2FsVmFyaWFibGUvYWZ0ZXJTaW1wbGUuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3F1aWNrRml4L0NvbnZlcnRQYXJhbWV0ZXJUb0xvY2FsVmFyaWFibGUvYWZ0ZXJTaW1wbGUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNjkyZmYxCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vcXVpY2tGaXgvQ29udmVydFBhcmFtZXRlclRvTG9jYWxWYXJpYWJsZS9hZnRlclNpbXBsZS5qYXZhCkBAIC0wLDAgKzEsOCBAQAorLy8gIkNvbnZlcnQgdG8gbG9jYWwgdmFyaWFibGUiICJ0cnVlIgorY2xhc3MgVGVtcCB7CisKKyAgdm9pZCB0ZXN0KCkgeworICAgICAgPGNhcmV0PmludCBwID0gMTsKKyAgICBTeXN0ZW0ub3V0LnByaW50KHApOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vcXVpY2tGaXgvQ29udmVydFBhcmFtZXRlclRvTG9jYWxWYXJpYWJsZS9hZnRlclVwZGF0ZUNhbGxlcnMuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3F1aWNrRml4L0NvbnZlcnRQYXJhbWV0ZXJUb0xvY2FsVmFyaWFibGUvYWZ0ZXJVcGRhdGVDYWxsZXJzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmJkYTcxMQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3F1aWNrRml4L0NvbnZlcnRQYXJhbWV0ZXJUb0xvY2FsVmFyaWFibGUvYWZ0ZXJVcGRhdGVDYWxsZXJzLmphdmEKQEAgLTAsMCArMSwxMiBAQAorLy8gIkNvbnZlcnQgdG8gbG9jYWwgdmFyaWFibGUiICJ0cnVlIgorY2xhc3MgVGVtcCB7CisKKyAgdm9pZCBmb28oKSB7CisgICAgICA8Y2FyZXQ+aW50IHggPSA1OworICAgIFN5c3RlbS5vdXQucHJpbnRsbih4KTsKKyAgfQorCisgIHZvaWQgYmFyKCkgeworICAgIGZvbygpOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vcXVpY2tGaXgvQ29udmVydFBhcmFtZXRlclRvTG9jYWxWYXJpYWJsZS9hZnRlclVwZGF0ZUNhbGxlcnMxLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9xdWlja0ZpeC9Db252ZXJ0UGFyYW1ldGVyVG9Mb2NhbFZhcmlhYmxlL2FmdGVyVXBkYXRlQ2FsbGVyczEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOWMwMzE4Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vcXVpY2tGaXgvQ29udmVydFBhcmFtZXRlclRvTG9jYWxWYXJpYWJsZS9hZnRlclVwZGF0ZUNhbGxlcnMxLmphdmEKQEAgLTAsMCArMSwxMiBAQAorLy8gIkNvbnZlcnQgdG8gbG9jYWwgdmFyaWFibGUiICJ0cnVlIgorY2xhc3MgVGVtcCB7CisKKyAgdm9pZCBmb28oaW50IGspIHsKKyAgICAgIGludCB4ID0gNTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oeCk7CisgIH0KKworICB2b2lkIGJhcigpIHsKKyAgICBmb28oNDIpOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vcXVpY2tGaXgvQ29udmVydFBhcmFtZXRlclRvTG9jYWxWYXJpYWJsZS9iZWZvcmVGb3IuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3F1aWNrRml4L0NvbnZlcnRQYXJhbWV0ZXJUb0xvY2FsVmFyaWFibGUvYmVmb3JlRm9yLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTk4YjIzNzgKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9xdWlja0ZpeC9Db252ZXJ0UGFyYW1ldGVyVG9Mb2NhbFZhcmlhYmxlL2JlZm9yZUZvci5qYXZhCkBAIC0wLDAgKzEsOSBAQAorLy8gIkNvbnZlcnQgdG8gbG9jYWwgdmFyaWFibGUiICJ0cnVlIgorY2xhc3MgVGVtcCB7CisgIHB1YmxpYyBUZW1wKGludCA8Y2FyZXQ+cCkgeworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMTA7IGkrKykgeworICAgICAgcCA9IGk7CisgICAgICBTeXN0ZW0ub3V0LnByaW50KHApOworICAgIH0KKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3F1aWNrRml4L0NvbnZlcnRQYXJhbWV0ZXJUb0xvY2FsVmFyaWFibGUvYmVmb3JlSWYuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3F1aWNrRml4L0NvbnZlcnRQYXJhbWV0ZXJUb0xvY2FsVmFyaWFibGUvYmVmb3JlSWYuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZGMzYmIxCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vcXVpY2tGaXgvQ29udmVydFBhcmFtZXRlclRvTG9jYWxWYXJpYWJsZS9iZWZvcmVJZi5qYXZhCkBAIC0wLDAgKzEsMTQgQEAKKy8vICJDb252ZXJ0IHRvIGxvY2FsIHZhcmlhYmxlIiAidHJ1ZSIKK2NsYXNzIFRlbXAgeworICBwdWJsaWMgYm9vbGVhbiBmbGFnOworCisgIHZvaWQgdGVzdChpbnQgPGNhcmV0PnApIHsKKyAgICBpZiAoZmxhZykgeworICAgICAgcCA9IDE7CisgICAgfQorICAgIGVsc2UgeworICAgICAgcCA9IDI7CisgICAgfQorICAgIFN5c3RlbS5vdXQucHJpbnQocCk7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9xdWlja0ZpeC9Db252ZXJ0UGFyYW1ldGVyVG9Mb2NhbFZhcmlhYmxlL2JlZm9yZVNpbXBsZS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vcXVpY2tGaXgvQ29udmVydFBhcmFtZXRlclRvTG9jYWxWYXJpYWJsZS9iZWZvcmVTaW1wbGUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZjAzY2UyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vcXVpY2tGaXgvQ29udmVydFBhcmFtZXRlclRvTG9jYWxWYXJpYWJsZS9iZWZvcmVTaW1wbGUuamF2YQpAQCAtMCwwICsxLDggQEAKKy8vICJDb252ZXJ0IHRvIGxvY2FsIHZhcmlhYmxlIiAidHJ1ZSIKK2NsYXNzIFRlbXAgeworCisgIHZvaWQgdGVzdChpbnQgPGNhcmV0PnApIHsKKyAgICBwID0gMTsKKyAgICBTeXN0ZW0ub3V0LnByaW50KHApOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vcXVpY2tGaXgvQ29udmVydFBhcmFtZXRlclRvTG9jYWxWYXJpYWJsZS9iZWZvcmVVcGRhdGVDYWxsZXJzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9xdWlja0ZpeC9Db252ZXJ0UGFyYW1ldGVyVG9Mb2NhbFZhcmlhYmxlL2JlZm9yZVVwZGF0ZUNhbGxlcnMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NDFkNTAzCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vcXVpY2tGaXgvQ29udmVydFBhcmFtZXRlclRvTG9jYWxWYXJpYWJsZS9iZWZvcmVVcGRhdGVDYWxsZXJzLmphdmEKQEAgLTAsMCArMSwxMiBAQAorLy8gIkNvbnZlcnQgdG8gbG9jYWwgdmFyaWFibGUiICJ0cnVlIgorY2xhc3MgVGVtcCB7CisKKyAgdm9pZCBmb28oaW50IDxjYXJldD54KSB7CisgICAgeCA9IDU7CisgICAgU3lzdGVtLm91dC5wcmludGxuKHgpOworICB9CisKKyAgdm9pZCBiYXIoKSB7CisgICAgZm9vKDIpOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vcXVpY2tGaXgvQ29udmVydFBhcmFtZXRlclRvTG9jYWxWYXJpYWJsZS9iZWZvcmVVcGRhdGVDYWxsZXJzMS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vcXVpY2tGaXgvQ29udmVydFBhcmFtZXRlclRvTG9jYWxWYXJpYWJsZS9iZWZvcmVVcGRhdGVDYWxsZXJzMS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU4NGIzNzMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9xdWlja0ZpeC9Db252ZXJ0UGFyYW1ldGVyVG9Mb2NhbFZhcmlhYmxlL2JlZm9yZVVwZGF0ZUNhbGxlcnMxLmphdmEKQEAgLTAsMCArMSwxMiBAQAorLy8gIkNvbnZlcnQgdG8gbG9jYWwgdmFyaWFibGUiICJ0cnVlIgorY2xhc3MgVGVtcCB7CisKKyAgdm9pZCBmb28oaW50IDxjYXJldD54LCBpbnQgaykgeworICAgIHggPSA1OworICAgIFN5c3RlbS5vdXQucHJpbnRsbih4KTsKKyAgfQorCisgIHZvaWQgYmFyKCkgeworICAgIGZvbygyLCA0Mik7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9xdWlja0ZpeC9TYW1lUGFyYW1ldGVyVmFsdWUvYWZ0ZXIxLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9xdWlja0ZpeC9TYW1lUGFyYW1ldGVyVmFsdWUvYWZ0ZXIxLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmY0NTkyNQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3F1aWNrRml4L1NhbWVQYXJhbWV0ZXJWYWx1ZS9hZnRlcjEuamF2YQpAQCAtMCwwICsxLDYgQEAKKy8vICJmIGZhbHNlIiAidHJ1ZSIKK3B1YmxpYyBjbGFzcyBUZXN0IHsKKyAgdm9pZCBmb28oPGNhcmV0Pil7fQorICB2b2lkIGJhcigpe2ZvbygpO30KKyAgdm9pZCBiYXIxKCl7Zm9vKCk7fQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3F1aWNrRml4L1NhbWVQYXJhbWV0ZXJWYWx1ZS9hZnRlcjIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3F1aWNrRml4L1NhbWVQYXJhbWV0ZXJWYWx1ZS9hZnRlcjIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMDVkZTU0Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vcXVpY2tGaXgvU2FtZVBhcmFtZXRlclZhbHVlL2FmdGVyMi5qYXZhCkBAIC0wLDAgKzEsMTAgQEAKKy8vICJmIGZhbHNlIiAidHJ1ZSIKK3B1YmxpYyBjbGFzcyBUZXN0IHsKKyAgdm9pZCBmb28oPGNhcmV0Pil7CisgICAgaWYgKGZhbHNlKSB7CisgICAgICBTeXN0ZS5vdXQucHJpbnQoZmFsc2UpOworICAgIH0KKyAgfQorICB2b2lkIGJhcigpe2ZvbygpO30KKyAgdm9pZCBiYXIxKCl7Zm9vKCk7fQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3F1aWNrRml4L1NhbWVQYXJhbWV0ZXJWYWx1ZS9hZnRlcjMuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3F1aWNrRml4L1NhbWVQYXJhbWV0ZXJWYWx1ZS9hZnRlcjMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNTY1ZWQ2Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vcXVpY2tGaXgvU2FtZVBhcmFtZXRlclZhbHVlL2FmdGVyMy5qYXZhCkBAIC0wLDAgKzEsMTAgQEAKKy8vICJiIGZhbHNlIiAidHJ1ZSIKK3B1YmxpYyBjbGFzcyBUZXN0IHsKKyAgdm9pZCBmb28oYm9vbGVhbiBmPGNhcmV0Pil7CisgICAgaWYgKGYpIHsKKyAgICAgIFN5c3RlLm91dC5wcmludChmKTsKKyAgICB9CisgIH0KKyAgdm9pZCBiYXIoKXtmb28oZmFsc2UpO30KKyAgdm9pZCBiYXIxKCl7Zm9vKHRydWUpO30KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9xdWlja0ZpeC9TYW1lUGFyYW1ldGVyVmFsdWUvYWZ0ZXI0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9xdWlja0ZpeC9TYW1lUGFyYW1ldGVyVmFsdWUvYWZ0ZXI0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTVlYTkzMAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3F1aWNrRml4L1NhbWVQYXJhbWV0ZXJWYWx1ZS9hZnRlcjQuamF2YQpAQCAtMCwwICsxLDEwIEBACisvLyAiZiBmYWxzZSIgInRydWUiCitwdWJsaWMgY2xhc3MgVGVzdCB7CisgIHZvaWQgZm9vKDxjYXJldD5ib29sZWFuIGIpeworICAgIGlmIChmYWxzZSkgeworICAgICAgU3lzdGUub3V0LnByaW50KGZhbHNlKTsKKyAgICB9CisgIH0KKyAgdm9pZCBiYXIoKXtmb28oZmFsc2UpO30KKyAgdm9pZCBiYXIxKCl7Zm9vKHRydWUpO30KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9xdWlja0ZpeC9TYW1lUGFyYW1ldGVyVmFsdWUvYWZ0ZXI1LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9xdWlja0ZpeC9TYW1lUGFyYW1ldGVyVmFsdWUvYWZ0ZXI1LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTI0NGJiNwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3F1aWNrRml4L1NhbWVQYXJhbWV0ZXJWYWx1ZS9hZnRlcjUuamF2YQpAQCAtMCwwICsxLDEwIEBACisvLyAiZiA1IiAidHJ1ZSIKK3B1YmxpYyBjbGFzcyBUZXN0IHsKKyAgdm9pZCBmb28oPGNhcmV0Pil7CisgICAgaWYgKDUgPT0gNSkgeworICAgICAgU3lzdGUub3V0LnByaW50KDUpOworICAgIH0KKyAgfQorICB2b2lkIGJhcigpe2ZvbygpO30KKyAgdm9pZCBiYXIxKCl7Zm9vKCk7fQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3F1aWNrRml4L1NhbWVQYXJhbWV0ZXJWYWx1ZS9hZnRlcjYuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3F1aWNrRml4L1NhbWVQYXJhbWV0ZXJWYWx1ZS9hZnRlcjYuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZWU4YzdkCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vcXVpY2tGaXgvU2FtZVBhcmFtZXRlclZhbHVlL2FmdGVyNi5qYXZhCkBAIC0wLDAgKzEsOSBAQAorLy8gImYgNSIgInRydWUiCitwdWJsaWMgY2xhc3MgVGVzdCB7CisgIHZvaWQgZm9vKDxjYXJldD4peworICAgIFN5c3RlLm91dC5wcmludChkKG5ldyBpbnRbXXs1fSkpOworICB9CisgIGludCBkKGludFtdIGQpe30KKyAgdm9pZCBiYXIoKXtmb28oKTt9CisgIHZvaWQgYmFyMSgpe2ZvbygpO30KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9xdWlja0ZpeC9TYW1lUGFyYW1ldGVyVmFsdWUvYmVmb3JlMS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vcXVpY2tGaXgvU2FtZVBhcmFtZXRlclZhbHVlL2JlZm9yZTEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YmU0MDVjCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vcXVpY2tGaXgvU2FtZVBhcmFtZXRlclZhbHVlL2JlZm9yZTEuamF2YQpAQCAtMCwwICsxLDYgQEAKKy8vICJmIGZhbHNlIiAidHJ1ZSIKK3B1YmxpYyBjbGFzcyBUZXN0IHsKKyAgdm9pZCBmb28oYm9vbGVhbiA8Y2FyZXQ+Zil7fQorICB2b2lkIGJhcigpe2ZvbyhmYWxzZSk7fQorICB2b2lkIGJhcjEoKXtmb28oZmFsc2UpO30KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9xdWlja0ZpeC9TYW1lUGFyYW1ldGVyVmFsdWUvYmVmb3JlMi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vcXVpY2tGaXgvU2FtZVBhcmFtZXRlclZhbHVlL2JlZm9yZTIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hM2FlNDJiCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vcXVpY2tGaXgvU2FtZVBhcmFtZXRlclZhbHVlL2JlZm9yZTIuamF2YQpAQCAtMCwwICsxLDEwIEBACisvLyAiZiBmYWxzZSIgInRydWUiCitwdWJsaWMgY2xhc3MgVGVzdCB7CisgIHZvaWQgZm9vKGJvb2xlYW4gPGNhcmV0PmYpeworICAgIGlmIChmKSB7CisgICAgICBTeXN0ZS5vdXQucHJpbnQoZik7CisgICAgfQorICB9CisgIHZvaWQgYmFyKCl7Zm9vKGZhbHNlKTt9CisgIHZvaWQgYmFyMSgpe2ZvbyhmYWxzZSk7fQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3F1aWNrRml4L1NhbWVQYXJhbWV0ZXJWYWx1ZS9iZWZvcmUzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9xdWlja0ZpeC9TYW1lUGFyYW1ldGVyVmFsdWUvYmVmb3JlMy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFmM2RiYmUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9xdWlja0ZpeC9TYW1lUGFyYW1ldGVyVmFsdWUvYmVmb3JlMy5qYXZhCkBAIC0wLDAgKzEsMTAgQEAKKy8vICJiIGZhbHNlIiAidHJ1ZSIKK3B1YmxpYyBjbGFzcyBUZXN0IHsKKyAgdm9pZCBmb28oYm9vbGVhbiBmLCBib29sZWFuIDxjYXJldD5iKXsKKyAgICBpZiAoZikgeworICAgICAgU3lzdGUub3V0LnByaW50KGYpOworICAgIH0KKyAgfQorICB2b2lkIGJhcigpe2ZvbyhmYWxzZSwgZmFsc2UpO30KKyAgdm9pZCBiYXIxKCl7Zm9vKHRydWUsIGZhbHNlKTt9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vcXVpY2tGaXgvU2FtZVBhcmFtZXRlclZhbHVlL2JlZm9yZTQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3F1aWNrRml4L1NhbWVQYXJhbWV0ZXJWYWx1ZS9iZWZvcmU0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2Q3OTkyNwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3F1aWNrRml4L1NhbWVQYXJhbWV0ZXJWYWx1ZS9iZWZvcmU0LmphdmEKQEAgLTAsMCArMSwxMCBAQAorLy8gImYgZmFsc2UiICJ0cnVlIgorcHVibGljIGNsYXNzIFRlc3QgeworICB2b2lkIGZvbyhib29sZWFuIDxjYXJldD5mLCBib29sZWFuIGIpeworICAgIGlmIChmKSB7CisgICAgICBTeXN0ZS5vdXQucHJpbnQoZik7CisgICAgfQorICB9CisgIHZvaWQgYmFyKCl7Zm9vKGZhbHNlLCBmYWxzZSk7fQorICB2b2lkIGJhcjEoKXtmb28oZmFsc2UsIHRydWUpO30KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9xdWlja0ZpeC9TYW1lUGFyYW1ldGVyVmFsdWUvYmVmb3JlNS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vcXVpY2tGaXgvU2FtZVBhcmFtZXRlclZhbHVlL2JlZm9yZTUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNzMwNTQ1Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vcXVpY2tGaXgvU2FtZVBhcmFtZXRlclZhbHVlL2JlZm9yZTUuamF2YQpAQCAtMCwwICsxLDEwIEBACisvLyAiZiA1IiAidHJ1ZSIKK3B1YmxpYyBjbGFzcyBUZXN0IHsKKyAgdm9pZCBmb28oaW50IDxjYXJldD5mKXsKKyAgICBpZiAoZiA9PSA1KSB7CisgICAgICBTeXN0ZS5vdXQucHJpbnQoZik7CisgICAgfQorICB9CisgIHZvaWQgYmFyKCl7Zm9vKDUpO30KKyAgdm9pZCBiYXIxKCl7Zm9vKDUpO30KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9xdWlja0ZpeC9TYW1lUGFyYW1ldGVyVmFsdWUvYmVmb3JlNi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vcXVpY2tGaXgvU2FtZVBhcmFtZXRlclZhbHVlL2JlZm9yZTYuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NzJkNDgwCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vcXVpY2tGaXgvU2FtZVBhcmFtZXRlclZhbHVlL2JlZm9yZTYuamF2YQpAQCAtMCwwICsxLDkgQEAKKy8vICJmIDUiICJ0cnVlIgorcHVibGljIGNsYXNzIFRlc3QgeworICB2b2lkIGZvbyhpbnQuLi4gPGNhcmV0PmYpeworICAgIFN5c3RlLm91dC5wcmludChkKGYpKTsKKyAgfQorICBpbnQgZChpbnRbXSBkKXt9CisgIHZvaWQgYmFyKCl7Zm9vKDUpO30KKyAgdm9pZCBiYXIxKCl7Zm9vKDUpO30KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9yZWR1bmRhbnRBcnJheUZvclZhcmFyZ3MvSURFQURFVjE1MjE1L2V4cGVjdGVkLnhtbCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3JlZHVuZGFudEFycmF5Rm9yVmFyYXJncy9JREVBREVWMTUyMTUvZXhwZWN0ZWQueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZlZWM2MWIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9yZWR1bmRhbnRBcnJheUZvclZhcmFyZ3MvSURFQURFVjE1MjE1L2V4cGVjdGVkLnhtbApAQCAtMCwwICsxLDEwIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHByb2JsZW1zPgorPHByb2JsZW0+CisgIDxmaWxlPlRlc3QuamF2YTwvZmlsZT4KKyAgPGxpbmU+MTg8L2xpbmU+CisgIDxwcm9ibGVtX2NsYXNzIHNldmVyaXR5PSJXQVJOSU5HIiBhdHRyaWJ1dGVfa2V5PSJXQVJOSU5HX0FUVFJJQlVURVMiPlJlZHVuZGFudCBhcnJheSBjcmVhdGlvbjwvcHJvYmxlbV9jbGFzcz4KKyAgPGRlc2NyaXB0aW9uPlJlZHVuZGFudCBhcnJheSBjcmVhdGlvbiBmb3IgY2FsbGluZyB2YXJhcmdzIG1ldGhvZDwvZGVzY3JpcHRpb24+Cis8L3Byb2JsZW0+CisgIAorPC9wcm9ibGVtcz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9yZWR1bmRhbnRBcnJheUZvclZhcmFyZ3MvSURFQURFVjE1MjE1L3NyYy9UZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9yZWR1bmRhbnRBcnJheUZvclZhcmFyZ3MvSURFQURFVjE1MjE1L3NyYy9UZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmU1OTA2MgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3JlZHVuZGFudEFycmF5Rm9yVmFyYXJncy9JREVBREVWMTUyMTUvc3JjL1Rlc3QuamF2YQpAQCAtMCwwICsxLDIwIEBACisKK3B1YmxpYyBjbGFzcyBUZXN0IHsKKworICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKyAgICAgICAgZm9vKG5ldyBieXRlW117IDEsIDIsIDMgfSk7CisgICAgfQorCisgICAgcHJpdmF0ZSBzdGF0aWMgdm9pZCBmb28oYnl0ZS4uLiBieXRlcykgeworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlRlc3QuZm9vKGJ5dGUuLi4pIik7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYnl0ZXMubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiYnl0ZXNbIiArIGkgKyAiXSA9ICIgKyBieXRlc1tpXSk7CisgICAgICAgIH0KKyAgICB9CisKKworICAgIAorICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBleHRyYShTdHJpbmcuLi4gYXJncykgeworICAgICAgZXh0cmEobmV3IFN0cmluZ1tdeyJ2dnYiLCJhYWEifSk7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3JlZHVuZGFudEFycmF5Rm9yVmFyYXJncy9JREVBREVWMjU5MjMvZXhwZWN0ZWQueG1sIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vcmVkdW5kYW50QXJyYXlGb3JWYXJhcmdzL0lERUFERVYyNTkyMy9leHBlY3RlZC54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzljMjcxNgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3JlZHVuZGFudEFycmF5Rm9yVmFyYXJncy9JREVBREVWMjU5MjMvZXhwZWN0ZWQueG1sCkBAIC0wLDAgKzEsMTAgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8cHJvYmxlbXM+Cis8cHJvYmxlbT4KKyAgPGZpbGU+VGVzdC5qYXZhPC9maWxlPgorICA8bGluZT43PC9saW5lPgorICA8cHJvYmxlbV9jbGFzcyBzZXZlcml0eT0iV0FSTklORyIgYXR0cmlidXRlX2tleT0iV0FSTklOR19BVFRSSUJVVEVTIj5SZWR1bmRhbnQgYXJyYXkgY3JlYXRpb248L3Byb2JsZW1fY2xhc3M+CisgIDxkZXNjcmlwdGlvbj5SZWR1bmRhbnQgYXJyYXkgY3JlYXRpb24gZm9yIGNhbGxpbmcgdmFyYXJncyBtZXRob2Q8L2Rlc2NyaXB0aW9uPgorPC9wcm9ibGVtPgorCis8L3Byb2JsZW1zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3JlZHVuZGFudEFycmF5Rm9yVmFyYXJncy9JREVBREVWMjU5MjMvc3JjL1Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3JlZHVuZGFudEFycmF5Rm9yVmFyYXJncy9JREVBREVWMjU5MjMvc3JjL1Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZDhjM2IxCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vcmVkdW5kYW50QXJyYXlGb3JWYXJhcmdzL0lERUFERVYyNTkyMy9zcmMvVGVzdC5qYXZhCkBAIC0wLDAgKzEsOSBAQAorCitwdWJsaWMgY2xhc3MgVGVzdCB7CisgICAgcHVibGljIHZvaWQgZm9vKE9iamVjdC4uLiBwYXJhbXMpIHt9CisKKyAgICB7CisgICAgICAgIGZvbyhuZXcgT2JqZWN0WzJdKTsKKyAgICAgICAgZm9vKG5ldyBPYmplY3RbMF0pOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9yZWR1bmRhbnRBcnJheUZvclZhcmFyZ3MvY2hlY2tFbnVtQ29uc3RhbnQvZXhwZWN0ZWQueG1sIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vcmVkdW5kYW50QXJyYXlGb3JWYXJhcmdzL2NoZWNrRW51bUNvbnN0YW50L2V4cGVjdGVkLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNGMwNzJkCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vcmVkdW5kYW50QXJyYXlGb3JWYXJhcmdzL2NoZWNrRW51bUNvbnN0YW50L2V4cGVjdGVkLnhtbApAQCAtMCwwICsxLDkgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8cHJvYmxlbXM+CisgIDxwcm9ibGVtPgorICAgIDxmaWxlPlRlc3QuamF2YTwvZmlsZT4KKyAgICA8bGluZT4zPC9saW5lPgorICAgIDxwcm9ibGVtX2NsYXNzIHNldmVyaXR5PSJXQVJOSU5HIiBhdHRyaWJ1dGVfa2V5PSJXQVJOSU5HX0FUVFJJQlVURVMiPlJlZHVuZGFudCBhcnJheSBjcmVhdGlvbjwvcHJvYmxlbV9jbGFzcz4KKyAgICA8ZGVzY3JpcHRpb24+UmVkdW5kYW50IGFycmF5IGNyZWF0aW9uIGZvciBjYWxsaW5nIHZhcmFyZ3MgbWV0aG9kPC9kZXNjcmlwdGlvbj4KKyAgPC9wcm9ibGVtPgorPC9wcm9ibGVtcz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9yZWR1bmRhbnRBcnJheUZvclZhcmFyZ3MvY2hlY2tFbnVtQ29uc3RhbnQvc3JjL1Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3JlZHVuZGFudEFycmF5Rm9yVmFyYXJncy9jaGVja0VudW1Db25zdGFudC9zcmMvVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFiZWYyMjAKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9yZWR1bmRhbnRBcnJheUZvclZhcmFyZ3MvY2hlY2tFbnVtQ29uc3RhbnQvc3JjL1Rlc3QuamF2YQpAQCAtMCwwICsxLDcgQEAKKworcHVibGljIGVudW0gVGVzdCB7CisgIEEobmV3IFN0cmluZ1tdeyIxIiwgIjIifSk7CisKKyAgVGVzdChTdHJpbmcuLi4gc3MpIHsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3JlZHVuZGFudEFycmF5Rm9yVmFyYXJncy9nZW5lcmljL2V4cGVjdGVkLnhtbCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3JlZHVuZGFudEFycmF5Rm9yVmFyYXJncy9nZW5lcmljL2V4cGVjdGVkLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MDM5NjJlCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vcmVkdW5kYW50QXJyYXlGb3JWYXJhcmdzL2dlbmVyaWMvZXhwZWN0ZWQueG1sCkBAIC0wLDAgKzEsOSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxwcm9ibGVtcz4KKyAgPHByb2JsZW0+CisgICAgPGZpbGU+VGVzdC5qYXZhPC9maWxlPgorICAgIDxsaW5lPjEwPC9saW5lPgorICAgIDxwcm9ibGVtX2NsYXNzIHNldmVyaXR5PSJXQVJOSU5HIiBhdHRyaWJ1dGVfa2V5PSJXQVJOSU5HX0FUVFJJQlVURVMiPlJlZHVuZGFudCBhcnJheSBjcmVhdGlvbjwvcHJvYmxlbV9jbGFzcz4KKyAgICA8ZGVzY3JpcHRpb24+UmVkdW5kYW50IGFycmF5IGNyZWF0aW9uIGZvciBjYWxsaW5nIHZhcmFyZ3MgbWV0aG9kPC9kZXNjcmlwdGlvbj4KKyAgPC9wcm9ibGVtPgorPC9wcm9ibGVtcz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9yZWR1bmRhbnRBcnJheUZvclZhcmFyZ3MvZ2VuZXJpYy9zcmMvVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vcmVkdW5kYW50QXJyYXlGb3JWYXJhcmdzL2dlbmVyaWMvc3JjL1Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZjM4ZGRjCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vcmVkdW5kYW50QXJyYXlGb3JWYXJhcmdzL2dlbmVyaWMvc3JjL1Rlc3QuamF2YQpAQCAtMCwwICsxLDE4IEBACisKK2NsYXNzIFRlc3QgeworICBjbGFzcyBBIHt9CisgIGNsYXNzIEIgZXh0ZW5kcyBBIHt9CisKKyAgdm9pZCBmKCkgeworICAgIEIgYiA9IG5ldyBCKCk7CisgICAgQzxBPiBsID0gYXNDKG5ldyBBW117Yn0pOworICAgIEEgYSA9IG5ldyBBKCk7CisgICAgQzxBPiBtID0gYXNDKG5ldyBBW117YX0pOworICB9CisKKyAgcHVibGljIHN0YXRpYyA8VD4gQzxUPiBhc0MoVC4uLiB0cykgeworICAgIHJldHVybiBudWxsOworICB9CisKKyAgY2xhc3MgQzxUPiB7fQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vcmVkdW5kYW50QXJyYXlGb3JWYXJhcmdzL25lc3RlZEFycmF5L2V4cGVjdGVkLnhtbCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3JlZHVuZGFudEFycmF5Rm9yVmFyYXJncy9uZXN0ZWRBcnJheS9leHBlY3RlZC54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzVlMjhkOAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3JlZHVuZGFudEFycmF5Rm9yVmFyYXJncy9uZXN0ZWRBcnJheS9leHBlY3RlZC54bWwKQEAgLTAsMCArMSwxNyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxwcm9ibGVtcz4KKyAgPHByb2JsZW0+CisgICAgPGZpbGU+VGVzdC5qYXZhPC9maWxlPgorICAgIDxsaW5lPjEzPC9saW5lPgorICAgIDxwcm9ibGVtX2NsYXNzIHNldmVyaXR5PSJXQVJOSU5HIiBhdHRyaWJ1dGVfa2V5PSJXQVJOSU5HX0FUVFJJQlVURVMiPlJlZHVuZGFudCBhcnJheSBjcmVhdGlvbjwvcHJvYmxlbV9jbGFzcz4KKyAgICA8ZGVzY3JpcHRpb24+UmVkdW5kYW50IGFycmF5IGNyZWF0aW9uIGZvciBjYWxsaW5nIHZhcmFyZ3MgbWV0aG9kPC9kZXNjcmlwdGlvbj4KKyAgPC9wcm9ibGVtPgorCisgIDxwcm9ibGVtPgorICAgIDxmaWxlPlRlc3QuamF2YTwvZmlsZT4KKyAgICA8bGluZT4xNDwvbGluZT4KKyAgICA8cHJvYmxlbV9jbGFzcyBzZXZlcml0eT0iV0FSTklORyIgYXR0cmlidXRlX2tleT0iV0FSTklOR19BVFRSSUJVVEVTIj5SZWR1bmRhbnQgYXJyYXkgY3JlYXRpb248L3Byb2JsZW1fY2xhc3M+CisgICAgPGRlc2NyaXB0aW9uPlJlZHVuZGFudCBhcnJheSBjcmVhdGlvbiBmb3IgY2FsbGluZyB2YXJhcmdzIG1ldGhvZDwvZGVzY3JpcHRpb24+CisgIDwvcHJvYmxlbT4KKworPC9wcm9ibGVtcz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9yZWR1bmRhbnRBcnJheUZvclZhcmFyZ3MvbmVzdGVkQXJyYXkvc3JjL1Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3JlZHVuZGFudEFycmF5Rm9yVmFyYXJncy9uZXN0ZWRBcnJheS9zcmMvVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg2M2FjNmYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9yZWR1bmRhbnRBcnJheUZvclZhcmFyZ3MvbmVzdGVkQXJyYXkvc3JjL1Rlc3QuamF2YQpAQCAtMCwwICsxLDE2IEBACitwdWJsaWMgY2xhc3MgSW50ZW50aW9uVGVzdCB7CisgICAgcHVibGljIEludGVudGlvblRlc3QoKSB7fQorCisgICAgcHVibGljIHZvaWQgbWV0aG9kKCBPYmplY3QgLi4uIGFyZ3MgKSB7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYXJncy5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJhcmdzWyIraSsiXSA9ICIgKyBhcmdzW2ldKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHB1YmxpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworICAgICAgICBTdHJpbmdbXSBwYXJhbXMgPSBuZXcgU3RyaW5nW117ICIwIiwgIjEiIH07CisgICAgICAgIG1ldGhvZChuZXcgT2JqZWN0W117cGFyYW1zfSk7CisgICAgICAgIG1ldGhvZChuZXcgT2JqZWN0W117IjIiLCBwYXJhbXN9KTsKKyAgICAgICAgbWV0aG9kKG5ldyBPYmplY3RbXXtwYXJhbXMsIHBhcmFtc30pOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9yZWR1bmRhbnRBcnJheUZvclZhcmFyZ3MvcXVpY2tGaXgvUHJlc2VydmVDb21tZW50cy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vcmVkdW5kYW50QXJyYXlGb3JWYXJhcmdzL3F1aWNrRml4L1ByZXNlcnZlQ29tbWVudHMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NTRiMGE0Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vcmVkdW5kYW50QXJyYXlGb3JWYXJhcmdzL3F1aWNrRml4L1ByZXNlcnZlQ29tbWVudHMuamF2YQpAQCAtMCwwICsxLDggQEAKK2NsYXNzIFRlc3QgeworICB2b2lkIGZvbyhTdHJpbmcuLi4gc3Rycyl7fQorICB2b2lkIGJhcigpIHsKKyAgICBmb28obmV3IFM8Y2FyZXQ+dHJpbmdbXSB7CisgICAgICAiZWR3cWVmd2UiLCAvL215IGNvbW1lbnQKKyAgICB9KTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3JlZHVuZGFudEFycmF5Rm9yVmFyYXJncy9xdWlja0ZpeC9QcmVzZXJ2ZUNvbW1lbnRzX2FmdGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9yZWR1bmRhbnRBcnJheUZvclZhcmFyZ3MvcXVpY2tGaXgvUHJlc2VydmVDb21tZW50c19hZnRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQxMThlNzUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9yZWR1bmRhbnRBcnJheUZvclZhcmFyZ3MvcXVpY2tGaXgvUHJlc2VydmVDb21tZW50c19hZnRlci5qYXZhCkBAIC0wLDAgKzEsNyBAQAorY2xhc3MgVGVzdCB7CisgIHZvaWQgZm9vKFN0cmluZy4uLiBzdHJzKXt9CisgIHZvaWQgYmFyKCkgeworICAgIGZvbygiZWR3cWVmd2UiLCAvL215IGNvbW1lbnQKKyAgICApOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vcmVkdW5kYW50QXJyYXlGb3JWYXJhcmdzL3F1aWNrRml4L1JlbW92ZVRhaWxpbmdDb21tYXMuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3JlZHVuZGFudEFycmF5Rm9yVmFyYXJncy9xdWlja0ZpeC9SZW1vdmVUYWlsaW5nQ29tbWFzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTUyZTk2YwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3JlZHVuZGFudEFycmF5Rm9yVmFyYXJncy9xdWlja0ZpeC9SZW1vdmVUYWlsaW5nQ29tbWFzLmphdmEKQEAgLTAsMCArMSw5IEBACitwdWJsaWMgY2xhc3MgTWFpbiB7CisgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworICAgICAgICBkaXNwbGF5KG5ldyBTPGNhcmV0PnRyaW5nW117CisgICAgICAgICAgICAgICAgImhpIiwKKyAgICAgICAgfSk7CisgICAgfQorCisgICAgcHJpdmF0ZSBzdGF0aWMgdm9pZCBkaXNwbGF5KFN0cmluZy4uLiBtZXNzYWdlcykgeyB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vcmVkdW5kYW50QXJyYXlGb3JWYXJhcmdzL3F1aWNrRml4L1JlbW92ZVRhaWxpbmdDb21tYXNfYWZ0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3JlZHVuZGFudEFycmF5Rm9yVmFyYXJncy9xdWlja0ZpeC9SZW1vdmVUYWlsaW5nQ29tbWFzX2FmdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTVlNWM1ZAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3JlZHVuZGFudEFycmF5Rm9yVmFyYXJncy9xdWlja0ZpeC9SZW1vdmVUYWlsaW5nQ29tbWFzX2FmdGVyLmphdmEKQEAgLTAsMCArMSw3IEBACitwdWJsaWMgY2xhc3MgTWFpbiB7CisgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworICAgICAgICBkaXNwbGF5KCJoaSIpOworICAgIH0KKworICAgIHByaXZhdGUgc3RhdGljIHZvaWQgZGlzcGxheShTdHJpbmcuLi4gbWVzc2FnZXMpIHsgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3JlZHVuZGFudENhc3QvQW1iaWdvdXNQYXJtMS9leHBlY3RlZC54bWwgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9yZWR1bmRhbnRDYXN0L0FtYmlnb3VzUGFybTEvZXhwZWN0ZWQueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEzNDU3NmUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9yZWR1bmRhbnRDYXN0L0FtYmlnb3VzUGFybTEvZXhwZWN0ZWQueG1sCkBAIC0wLDAgKzEsOSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxwcm9ibGVtcz4KKyAgPHByb2JsZW0+CisgICAgPGZpbGU+QW1iaWdvdXNQYXJtMS5qYXZhPC9maWxlPgorICAgIDxsaW5lPjExPC9saW5lPgorICAgIDxkZXNjcmlwdGlvbj5DYXN0aW5nIGMgdG8gQSBpcyByZWR1bmRhbnQ8L2Rlc2NyaXB0aW9uPgorICA8L3Byb2JsZW0+Cis8L3Byb2JsZW1zPgorCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9yZWR1bmRhbnRDYXN0L0FtYmlnb3VzUGFybTEvc3JjL0FtYmlnb3VzUGFybTEuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3JlZHVuZGFudENhc3QvQW1iaWdvdXNQYXJtMS9zcmMvQW1iaWdvdXNQYXJtMS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQyZTkwYzQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9yZWR1bmRhbnRDYXN0L0FtYmlnb3VzUGFybTEvc3JjL0FtYmlnb3VzUGFybTEuamF2YQpAQCAtMCwwICsxLDEzIEBACitpbnRlcmZhY2UgQSB7fQorCitpbnRlcmZhY2UgQiB7fQorCitjbGFzcyBDIGltcGxlbWVudHMgQSwgQiB7fQorCitwdWJsaWMgY2xhc3MgQW1iaWdvdXNQYXJhbWV0ZXIgeworICAgcHVibGljIHZvaWQgdWEoQSBhKSB7fQorCisgICBwdWJsaWMgdm9pZCBjYWxsZXIoQyBjKSB7CisgICAgIHVhKChBKWMpOworICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3JlZHVuZGFudENhc3QvQW1iaWdvdXNQYXJtMi9leHBlY3RlZC54bWwgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9yZWR1bmRhbnRDYXN0L0FtYmlnb3VzUGFybTIvZXhwZWN0ZWQueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQxOTBhNjUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9yZWR1bmRhbnRDYXN0L0FtYmlnb3VzUGFybTIvZXhwZWN0ZWQueG1sCkBAIC0wLDAgKzEsMTQgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8cHJvYmxlbXM+CisgIDxwcm9ibGVtPgorICAgIDxmaWxlPkFtYmlnb3VzUGFybTIuamF2YTwvZmlsZT4KKyAgICA8bGluZT4xNDwvbGluZT4KKyAgICA8ZGVzY3JpcHRpb24+Q2FzdGluZyBjIHRvIEEgaXMgcmVkdW5kYW50PC9kZXNjcmlwdGlvbj4KKyAgPC9wcm9ibGVtPgorICA8cHJvYmxlbT4KKyAgICA8ZmlsZT5BbWJpZ291c1Bhcm0yLmphdmE8L2ZpbGU+CisgICAgPGxpbmU+MTU8L2xpbmU+CisgICAgPGRlc2NyaXB0aW9uPkNhc3RpbmcgYSB0byBBIGlzIHJlZHVuZGFudDwvZGVzY3JpcHRpb24+CisgIDwvcHJvYmxlbT4KKzwvcHJvYmxlbXM+CisKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3JlZHVuZGFudENhc3QvQW1iaWdvdXNQYXJtMi9zcmMvLkFtYmlnb3VzUGFybTIuamF2YS5zd3AgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9yZWR1bmRhbnRDYXN0L0FtYmlnb3VzUGFybTIvc3JjLy5BbWJpZ291c1Bhcm0yLmphdmEuc3dwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE3NDcxZDEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9yZWR1bmRhbnRDYXN0L0FtYmlnb3VzUGFybTIvc3JjLy5BbWJpZ291c1Bhcm0yLmphdmEuc3dwCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3JlZHVuZGFudENhc3QvQW1iaWdvdXNQYXJtMi9zcmMvQW1iaWdvdXNQYXJtMi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vcmVkdW5kYW50Q2FzdC9BbWJpZ291c1Bhcm0yL3NyYy9BbWJpZ291c1Bhcm0yLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzE0YWVlNgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3JlZHVuZGFudENhc3QvQW1iaWdvdXNQYXJtMi9zcmMvQW1iaWdvdXNQYXJtMi5qYXZhCkBAIC0wLDAgKzEsMTcgQEAKK2ludGVyZmFjZSBBIHt9CisKK2ludGVyZmFjZSBCIHt9CisKK2NsYXNzIEMgaW1wbGVtZW50cyBBLCBCIHt9CisKK3B1YmxpYyBjbGFzcyBBbWJpZ291c1BhcmFtZXRlciB7CisgICB2b2lkIG0oQSBhKSB7fQorICAgdm9pZCBtKEIgYikge30KKworICAgcHVibGljIHZvaWQgY2FsbGVyKEMgYykgeworICAgICBtKChBKWMpOworICAgICBtKChBKW51bGwpOworICAgICBBIGEgPSAoQSljOworICAgICBtKChBKWEpOworICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3JlZHVuZGFudENhc3QvQW1iaWdvdXNQYXJtMy9leHBlY3RlZC54bWwgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9yZWR1bmRhbnRDYXN0L0FtYmlnb3VzUGFybTMvZXhwZWN0ZWQueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUyMTE1NTYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9yZWR1bmRhbnRDYXN0L0FtYmlnb3VzUGFybTMvZXhwZWN0ZWQueG1sCkBAIC0wLDAgKzEsOSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxwcm9ibGVtcz4KKyAgPHByb2JsZW0+CisgICAgPGZpbGU+QW1iaWdvdXNQYXJtMy5qYXZhPC9maWxlPgorICAgIDxsaW5lPjEzPC9saW5lPgorICAgIDxkZXNjcmlwdGlvbj5DYXN0aW5nIG51bGwgdG8gQSBpcyByZWR1bmRhbnQ8L2Rlc2NyaXB0aW9uPgorICA8L3Byb2JsZW0+Cis8L3Byb2JsZW1zPgorCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9yZWR1bmRhbnRDYXN0L0FtYmlnb3VzUGFybTMvc3JjL0FtYmlnb3VzUGFybTMuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3JlZHVuZGFudENhc3QvQW1iaWdvdXNQYXJtMy9zcmMvQW1iaWdvdXNQYXJtMy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcwMzU2YzAKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9yZWR1bmRhbnRDYXN0L0FtYmlnb3VzUGFybTMvc3JjL0FtYmlnb3VzUGFybTMuamF2YQpAQCAtMCwwICsxLDE1IEBACitpbnRlcmZhY2UgQSB7fQoraW50ZXJmYWNlIEIge30KKworcHVibGljIGNsYXNzIEFtYmlnb3VzUGFyYW1ldGVyIHsKKyAgIHB1YmxpYyB2b2lkIGYoQSBhKSB7fQorICAgcHVibGljIHZvaWQgZihCIGIpIHt9CisgICBwdWJsaWMgdm9pZCBmKE9iamVjdCBvKSB7fQorCisgICBwdWJsaWMgdm9pZCBnKE9iamVjdCBvKSB7fQorCisgICBwdWJsaWMgdm9pZCBjYWxsZXIoKSB7CisgICAgIGYoKEEpbnVsbCk7CisgICAgIGcoKEEpbnVsbCk7CisgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vcmVkdW5kYW50Q2FzdC9BbWJpZ291c1Bhcm00L2V4cGVjdGVkLnhtbCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3JlZHVuZGFudENhc3QvQW1iaWdvdXNQYXJtNC9leHBlY3RlZC54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWFjODc5ZAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3JlZHVuZGFudENhc3QvQW1iaWdvdXNQYXJtNC9leHBlY3RlZC54bWwKQEAgLTAsMCArMSwzIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHByb2JsZW1zIC8+CisKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3JlZHVuZGFudENhc3QvQW1iaWdvdXNQYXJtNC9zcmMvQW1iaWdvdXNQYXJtNC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vcmVkdW5kYW50Q2FzdC9BbWJpZ291c1Bhcm00L3NyYy9BbWJpZ291c1Bhcm00LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2NhNjA2OQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3JlZHVuZGFudENhc3QvQW1iaWdvdXNQYXJtNC9zcmMvQW1iaWdvdXNQYXJtNC5qYXZhCkBAIC0wLDAgKzEsOCBAQAoraW1wb3J0IGphdmF4LnN3aW5nLio7CitpbXBvcnQgamF2YS5hd3QuKjsKKworcHVibGljIGNsYXNzIEFtYmlnb3VzUGFyYW1ldGVyIHsKKyAgIHB1YmxpYyB2b2lkIGNhbGxlcigpIHsKKyAgICAgbmV3IEpEaWFsb2coKEZyYW1lKW51bGwsICJUaXRsZSIsIHRydWUpOworICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3JlZHVuZGFudENhc3QvQW1iaWdvdXNQYXJtNS9leHBlY3RlZC54bWwgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9yZWR1bmRhbnRDYXN0L0FtYmlnb3VzUGFybTUvZXhwZWN0ZWQueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlhYzg3OWQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9yZWR1bmRhbnRDYXN0L0FtYmlnb3VzUGFybTUvZXhwZWN0ZWQueG1sCkBAIC0wLDAgKzEsMyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxwcm9ibGVtcyAvPgorCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9yZWR1bmRhbnRDYXN0L0FtYmlnb3VzUGFybTUvc3JjL0FtYmlnb3VzUGFybTUuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3JlZHVuZGFudENhc3QvQW1iaWdvdXNQYXJtNS9zcmMvQW1iaWdvdXNQYXJtNS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZiNjE1NTNhODAKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9yZWR1bmRhbnRDYXN0L0FtYmlnb3VzUGFybTUvc3JjL0FtYmlnb3VzUGFybTUuamF2YQpAQCAtMCwwICsxLDggQEAKK2ltcG9ydCBqYXZheC5zd2luZy4qOworaW1wb3J0IGphdmEuYXd0Lio7CisKK3B1YmxpYyBjbGFzcyBBbWJpZ291c1BhcmFtZXRlciB7CisgICBwdWJsaWMgdm9pZCBjYWxsZXIoKSB7CisgICAgIG5ldyBKRGlhbG9nKCAoKEZyYW1lKW51bGwpLCAiVGl0bGUiLCB0cnVlKTsKKyAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9yZWR1bmRhbnRDYXN0L0FueU9mVHdvL2V4cGVjdGVkLnhtbCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3JlZHVuZGFudENhc3QvQW55T2ZUd28vZXhwZWN0ZWQueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlhYzg3OWQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9yZWR1bmRhbnRDYXN0L0FueU9mVHdvL2V4cGVjdGVkLnhtbApAQCAtMCwwICsxLDMgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8cHJvYmxlbXMgLz4KKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vcmVkdW5kYW50Q2FzdC9BbnlPZlR3by9zcmMvQW55T2ZUd28uamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3JlZHVuZGFudENhc3QvQW55T2ZUd28vc3JjL0FueU9mVHdvLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmI5MjJhYwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3JlZHVuZGFudENhc3QvQW55T2ZUd28vc3JjL0FueU9mVHdvLmphdmEKQEAgLTAsMCArMSwxMSBAQAorcGFja2FnZSBjb207CisKK3B1YmxpYyBjbGFzcyBUZXN0IHsKKyAgc3RhdGljIHZvaWQgZihPYmplY3QgcywgT2JqZWN0IG8pe30KKyAgc3RhdGljIHZvaWQgZihTdHJpbmcgcywgU3RyaW5nIG8pe30KKworICB2b2lkIGZvbygpeworICAgIE9iamVjdCBvOworICAgIGYoKFN0cmluZylvLCAoU3RyaW5nKW8pOworICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9yZWR1bmRhbnRDYXN0L0FycmF5QWNjZXNzL2V4cGVjdGVkLnhtbCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3JlZHVuZGFudENhc3QvQXJyYXlBY2Nlc3MvZXhwZWN0ZWQueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlhYzg3OWQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9yZWR1bmRhbnRDYXN0L0FycmF5QWNjZXNzL2V4cGVjdGVkLnhtbApAQCAtMCwwICsxLDMgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8cHJvYmxlbXMgLz4KKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vcmVkdW5kYW50Q2FzdC9BcnJheUFjY2Vzcy9zcmMvQXJyYXlBY2Nlc3MuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3JlZHVuZGFudENhc3QvQXJyYXlBY2Nlc3Mvc3JjL0FycmF5QWNjZXNzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWNiYWEwOAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3JlZHVuZGFudENhc3QvQXJyYXlBY2Nlc3Mvc3JjL0FycmF5QWNjZXNzLmphdmEKQEAgLTAsMCArMSwyNCBAQAoraW1wb3J0IGphdmEudXRpbC4qOworLyoKKyAqIENvcHlyaWdodCAyMDAwLTIwMTIgSmV0QnJhaW5zIHMuci5vLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworY2xhc3MgQSB7CisgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZyBhcmdzKSB7CisgICAgTWFwPFN0cmluZywgT2JqZWN0PiBtYXAgPSBuZXcgSGFzaE1hcDxTdHJpbmcsIE9iamVjdD4oKTsKKyAgICBtYXAucHV0KCJhIiwgbmV3IGludFsxXSk7CisgICAgKChpbnRbXSltYXAuZ2V0KCJhIikpWzBdICs9IDU7CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3JlZHVuZGFudENhc3QvQXNzaWdubWVudDEvZXhwZWN0ZWQueG1sIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vcmVkdW5kYW50Q2FzdC9Bc3NpZ25tZW50MS9leHBlY3RlZC54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzA2Zjg2ZQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3JlZHVuZGFudENhc3QvQXNzaWdubWVudDEvZXhwZWN0ZWQueG1sCkBAIC0wLDAgKzEsOSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxwcm9ibGVtcz4KKyAgPHByb2JsZW0+CisgICAgPGZpbGU+QXNzaWdubWVudDEuamF2YTwvZmlsZT4KKyAgICA8bGluZT40PC9saW5lPgorICAgIDxkZXNjcmlwdGlvbj5DYXN0aW5nIG51bGwgdG8gU3RyaW5nIGlzIHJlZHVuZGFudDwvZGVzY3JpcHRpb24+CisgIDwvcHJvYmxlbT4KKzwvcHJvYmxlbXM+CisKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3JlZHVuZGFudENhc3QvQXNzaWdubWVudDEvc3JjL0Fzc2lnbm1lbnQxLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9yZWR1bmRhbnRDYXN0L0Fzc2lnbm1lbnQxL3NyYy9Bc3NpZ25tZW50MS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBmZjZjNGIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9yZWR1bmRhbnRDYXN0L0Fzc2lnbm1lbnQxL3NyYy9Bc3NpZ25tZW50MS5qYXZhCkBAIC0wLDAgKzEsNiBAQAorY2xhc3MgVGVzdHsKKyAgc3RhdGljIGYoKXsKKyAgICBPYmplY3QgbzsKKyAgICBvID0gKFN0cmluZyludWxsOworICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9yZWR1bmRhbnRDYXN0L0NvbXBhcmluZ1RvTnVsbC9leHBlY3RlZC54bWwgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9yZWR1bmRhbnRDYXN0L0NvbXBhcmluZ1RvTnVsbC9leHBlY3RlZC54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzk0MmYzNwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3JlZHVuZGFudENhc3QvQ29tcGFyaW5nVG9OdWxsL2V4cGVjdGVkLnhtbApAQCAtMCwwICsxLDkgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8cHJvYmxlbXM+CisgIDxwcm9ibGVtPgorICAgIDxmaWxlPlRlc3QuamF2YTwvZmlsZT4KKyAgICA8bGluZT40PC9saW5lPgorICAgIDxkZXNjcmlwdGlvbj5DYXN0aW5nIG8gdG8gU3RyaW5nIGlzIHJlZHVuZGFudDwvZGVzY3JpcHRpb24+CisgIDwvcHJvYmxlbT4KKzwvcHJvYmxlbXM+CisKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3JlZHVuZGFudENhc3QvQ29tcGFyaW5nVG9OdWxsL3NyYy9UZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9yZWR1bmRhbnRDYXN0L0NvbXBhcmluZ1RvTnVsbC9zcmMvVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY4ZDk4MjkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9yZWR1bmRhbnRDYXN0L0NvbXBhcmluZ1RvTnVsbC9zcmMvVGVzdC5qYXZhCkBAIC0wLDAgKzEsNiBAQAorcHVibGljIGNsYXNzIFRlc3QgeworICAgcHVibGljIGJvb2xlYW4gZm9vKCkgeworICAgICAgICBPYmplY3QgbyA9IG51bGw7CisgICAgICAgIHJldHVybiAoU3RyaW5nKSBvID09IG51bGw7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3JlZHVuZGFudENhc3QvRGlmZmVyZW50RmllbGRzL2V4cGVjdGVkLnhtbCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3JlZHVuZGFudENhc3QvRGlmZmVyZW50RmllbGRzL2V4cGVjdGVkLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZTkzMzQ5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vcmVkdW5kYW50Q2FzdC9EaWZmZXJlbnRGaWVsZHMvZXhwZWN0ZWQueG1sCkBAIC0wLDAgKzEsMyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxwcm9ibGVtcz4KKzwvcHJvYmxlbXM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vcmVkdW5kYW50Q2FzdC9EaWZmZXJlbnRGaWVsZHMvc3JjL1Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3JlZHVuZGFudENhc3QvRGlmZmVyZW50RmllbGRzL3NyYy9UZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGYyNWE4MwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3JlZHVuZGFudENhc3QvRGlmZmVyZW50RmllbGRzL3NyYy9UZXN0LmphdmEKQEAgLTAsMCArMSwxMiBAQAorY2xhc3MgWSB7CisgICAgaW50IHNpemUgPSA0OworfQorCitjbGFzcyBaIGV4dGVuZHMgWSB7CisgICAgaW50IHNpemUgPSA1OworCisgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworICAgICAgICBaIHogPSBuZXcgWigpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oInouc2l6ZSA9ICIgKyAoKFkpeikuc2l6ZSk7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3JlZHVuZGFudENhc3QvRG91YmxlQ2FzdDEvZXhwZWN0ZWQueG1sIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vcmVkdW5kYW50Q2FzdC9Eb3VibGVDYXN0MS9leHBlY3RlZC54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODlhNTllYwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3JlZHVuZGFudENhc3QvRG91YmxlQ2FzdDEvZXhwZWN0ZWQueG1sCkBAIC0wLDAgKzEsOSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxwcm9ibGVtcz4KKyAgPHByb2JsZW0+CisgICAgPGZpbGU+RG91YmxlQ2FzdDEuamF2YTwvZmlsZT4KKyAgICA8bGluZT43PC9saW5lPgorICAgIDxkZXNjcmlwdGlvbj5DYXN0aW5nIG8gdG8gTGlzdCBpcyByZWR1bmRhbnQ8L2Rlc2NyaXB0aW9uPgorICA8L3Byb2JsZW0+Cis8L3Byb2JsZW1zPgorCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9yZWR1bmRhbnRDYXN0L0RvdWJsZUNhc3QxL3NyYy9Eb3VibGVDYXN0MS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vcmVkdW5kYW50Q2FzdC9Eb3VibGVDYXN0MS9zcmMvRG91YmxlQ2FzdDEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMDU2OThkCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vcmVkdW5kYW50Q2FzdC9Eb3VibGVDYXN0MS9zcmMvRG91YmxlQ2FzdDEuamF2YQpAQCAtMCwwICsxLDkgQEAKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworCitjbGFzcyBUZXN0eworICBzdGF0aWMgZigpeworICAgIE9iamVjdCBvOworICAgIEFycmF5TGlzdCBsaXN0ID0gKEFycmF5TGlzdCkoTGlzdClvOworICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9yZWR1bmRhbnRDYXN0L0RvdWJsZUNhc3QyL2V4cGVjdGVkLnhtbCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3JlZHVuZGFudENhc3QvRG91YmxlQ2FzdDIvZXhwZWN0ZWQueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU2ODI5ZTEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9yZWR1bmRhbnRDYXN0L0RvdWJsZUNhc3QyL2V4cGVjdGVkLnhtbApAQCAtMCwwICsxLDkgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8cHJvYmxlbXM+CisgIDxwcm9ibGVtPgorICAgIDxmaWxlPkRvdWJsZUNhc3QyLmphdmE8L2ZpbGU+CisgICAgPGxpbmU+NzwvbGluZT4KKyAgICA8ZGVzY3JpcHRpb24+Q2FzdGluZyBvIHRvIExpc3QgaXMgcmVkdW5kYW50PC9kZXNjcmlwdGlvbj4KKyAgPC9wcm9ibGVtPgorPC9wcm9ibGVtcz4KKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vcmVkdW5kYW50Q2FzdC9Eb3VibGVDYXN0Mi9zcmMvRG91YmxlQ2FzdDIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3JlZHVuZGFudENhc3QvRG91YmxlQ2FzdDIvc3JjL0RvdWJsZUNhc3QyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGJiOGI2NAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3JlZHVuZGFudENhc3QvRG91YmxlQ2FzdDIvc3JjL0RvdWJsZUNhc3QyLmphdmEKQEAgLTAsMCArMSw5IEBACitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKKworY2xhc3MgVGVzdHsKKyAgc3RhdGljIGYoKXsKKyAgICBPYmplY3QgbzsKKyAgICBBcnJheUxpc3QgbGlzdCA9IChBcnJheUxpc3QpKChMaXN0KW8pOworICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9yZWR1bmRhbnRDYXN0L0RvdWJsZUNhc3QzL2V4cGVjdGVkLnhtbCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3JlZHVuZGFudENhc3QvRG91YmxlQ2FzdDMvZXhwZWN0ZWQueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU4YzIwMWMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9yZWR1bmRhbnRDYXN0L0RvdWJsZUNhc3QzL2V4cGVjdGVkLnhtbApAQCAtMCwwICsxLDE0IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHByb2JsZW1zPgorICA8cHJvYmxlbT4KKyAgICA8ZmlsZT5Eb3VibGVDYXN0My5qYXZhPC9maWxlPgorICAgIDxsaW5lPjQ8L2xpbmU+CisgICAgPGRlc2NyaXB0aW9uPkNhc3RpbmcgJyhTdHJpbmcpIG8nIHRvIFN0cmluZyBpcyByZWR1bmRhbnQ8L2Rlc2NyaXB0aW9uPgorICA8L3Byb2JsZW0+CisgIDxwcm9ibGVtPgorICAgIDxmaWxlPkRvdWJsZUNhc3QzLmphdmE8L2ZpbGU+CisgICAgPGxpbmU+NDwvbGluZT4KKyAgICA8ZGVzY3JpcHRpb24+Q2FzdGluZyAnbycgdG8gU3RyaW5nIGlzIHJlZHVuZGFudDwvZGVzY3JpcHRpb24+CisgIDwvcHJvYmxlbT4KKzwvcHJvYmxlbXM+CisKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3JlZHVuZGFudENhc3QvRG91YmxlQ2FzdDMvc3JjL0RvdWJsZUNhc3QzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9yZWR1bmRhbnRDYXN0L0RvdWJsZUNhc3QzL3NyYy9Eb3VibGVDYXN0My5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM2ZGE5Y2IKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9yZWR1bmRhbnRDYXN0L0RvdWJsZUNhc3QzL3NyYy9Eb3VibGVDYXN0My5qYXZhCkBAIC0wLDAgKzEsNiBAQAorY2xhc3MgVGVzdHsKKyAgc3RhdGljIGYoKXsKKyAgICBPYmplY3QgbzsKKyAgICBTdHJpbmcgcyA9IChTdHJpbmcpIChTdHJpbmcpIG87CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3JlZHVuZGFudENhc3QvRG91YmxlQ2FzdDQvZXhwZWN0ZWQueG1sIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vcmVkdW5kYW50Q2FzdC9Eb3VibGVDYXN0NC9leHBlY3RlZC54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzBkNWNmZQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3JlZHVuZGFudENhc3QvRG91YmxlQ2FzdDQvZXhwZWN0ZWQueG1sCkBAIC0wLDAgKzEsMTQgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8cHJvYmxlbXM+CisgIDxwcm9ibGVtPgorICAgIDxmaWxlPkRvdWJsZUNhc3Q0LmphdmE8L2ZpbGU+CisgICAgPGxpbmU+NDwvbGluZT4KKyAgICA8ZGVzY3JpcHRpb24+Q2FzdGluZyAnKFN0cmluZykgbycgdG8gT2JqZWN0IGlzIHJlZHVuZGFudDwvZGVzY3JpcHRpb24+CisgIDwvcHJvYmxlbT4KKyAgPHByb2JsZW0+CisgICAgPGZpbGU+RG91YmxlQ2FzdDQuamF2YTwvZmlsZT4KKyAgICA8bGluZT40PC9saW5lPgorICAgIDxkZXNjcmlwdGlvbj5DYXN0aW5nICdvJyB0byBTdHJpbmcgaXMgcmVkdW5kYW50PC9kZXNjcmlwdGlvbj4KKyAgPC9wcm9ibGVtPgorPC9wcm9ibGVtcz4KKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vcmVkdW5kYW50Q2FzdC9Eb3VibGVDYXN0NC9zcmMvRG91YmxlQ2FzdDQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3JlZHVuZGFudENhc3QvRG91YmxlQ2FzdDQvc3JjL0RvdWJsZUNhc3Q0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjRiOTAwOQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3JlZHVuZGFudENhc3QvRG91YmxlQ2FzdDQvc3JjL0RvdWJsZUNhc3Q0LmphdmEKQEAgLTAsMCArMSw2IEBACitjbGFzcyBUZXN0eworICBzdGF0aWMgZigpeworICAgIE9iamVjdCBvOworICAgIE9iamVjdCBvMiA9IChPYmplY3QpIChTdHJpbmcpIG87CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3JlZHVuZGFudENhc3QvRG91YmxlQ2FzdDUvZXhwZWN0ZWQueG1sIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vcmVkdW5kYW50Q2FzdC9Eb3VibGVDYXN0NS9leHBlY3RlZC54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWFjODc5ZAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3JlZHVuZGFudENhc3QvRG91YmxlQ2FzdDUvZXhwZWN0ZWQueG1sCkBAIC0wLDAgKzEsMyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxwcm9ibGVtcyAvPgorCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9yZWR1bmRhbnRDYXN0L0RvdWJsZUNhc3Q1L3NyYy9Eb3VibGVDYXN0NS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vcmVkdW5kYW50Q2FzdC9Eb3VibGVDYXN0NS9zcmMvRG91YmxlQ2FzdDUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMGQ5NzAzCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vcmVkdW5kYW50Q2FzdC9Eb3VibGVDYXN0NS9zcmMvRG91YmxlQ2FzdDUuamF2YQpAQCAtMCwwICsxLDUgQEAKK2NsYXNzIFRlc3R7CisgIHN0YXRpYyBmKGRvdWJsZSBhKXsKKyAgICBkb3VibGUgYiA9IChkb3VibGUpKGludClhIC8gMTAwOworICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9yZWR1bmRhbnRDYXN0L0ZpZWxkQWNjZXNzT25UaGVMZWZ0T2ZBc3NpZ25tZW50L2V4cGVjdGVkLnhtbCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3JlZHVuZGFudENhc3QvRmllbGRBY2Nlc3NPblRoZUxlZnRPZkFzc2lnbm1lbnQvZXhwZWN0ZWQueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJkODAyOGEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9yZWR1bmRhbnRDYXN0L0ZpZWxkQWNjZXNzT25UaGVMZWZ0T2ZBc3NpZ25tZW50L2V4cGVjdGVkLnhtbApAQCAtMCwwICsxLDE2IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHByb2JsZW1zPgorICA8cHJvYmxlbT4KKyAgICA8ZmlsZT5BLmphdmE8L2ZpbGU+CisgICAgPGxpbmU+NjwvbGluZT4KKyAgICA8ZGVzY3JpcHRpb24+Q2FzdGluZyAmbHQ7Y29kZSZndDt0Jmx0Oy9jb2RlJmd0OyB0byAmbHQ7Y29kZSZndDtGb28mbHQ7L2NvZGUmZ3Q7IGlzIHJlZHVuZGFudDwvZGVzY3JpcHRpb24+CisgIDwvcHJvYmxlbT4KKworICA8cHJvYmxlbT4KKyAgICA8ZmlsZT5BLmphdmE8L2ZpbGU+CisgICAgPGxpbmU+NTwvbGluZT4KKyAgICA8ZGVzY3JpcHRpb24+Q2FzdGluZyAmbHQ7Y29kZSZndDt0Jmx0Oy9jb2RlJmd0OyB0byAmbHQ7Y29kZSZndDtGb28mbHQ7L2NvZGUmZ3Q7IGlzIHJlZHVuZGFudDwvZGVzY3JpcHRpb24+CisgIDwvcHJvYmxlbT4KKworPC9wcm9ibGVtcz4KKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vcmVkdW5kYW50Q2FzdC9GaWVsZEFjY2Vzc09uVGhlTGVmdE9mQXNzaWdubWVudC9zcmMvQS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vcmVkdW5kYW50Q2FzdC9GaWVsZEFjY2Vzc09uVGhlTGVmdE9mQXNzaWdubWVudC9zcmMvQS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIzOGY3MTEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9yZWR1bmRhbnRDYXN0L0ZpZWxkQWNjZXNzT25UaGVMZWZ0T2ZBc3NpZ25tZW50L3NyYy9BLmphdmEKQEAgLTAsMCArMSwxMSBAQAorYWJzdHJhY3QgY2xhc3MgRm9vIHsKKyAgcHJvdGVjdGVkIGludCBmaWVsZDsKKworICBwdWJsaWMgaW50IGYoQmFyIHQpeworICAgICgoRm9vKXQpLmZpZWxkID0gMDsKKyAgICByZXR1cm4gKChGb28pdCkuZmllbGQ7CisgIH0KKworfQorCitjbGFzcyBCYXIgZXh0ZW5kcyBGb297fQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3JlZHVuZGFudENhc3QvSURFQURFVjE1MTcwL2V4cGVjdGVkLnhtbCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3JlZHVuZGFudENhc3QvSURFQURFVjE1MTcwL2V4cGVjdGVkLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OTZhMzE1Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vcmVkdW5kYW50Q2FzdC9JREVBREVWMTUxNzAvZXhwZWN0ZWQueG1sCkBAIC0wLDAgKzEsMiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxwcm9ibGVtcyAvPgpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vcmVkdW5kYW50Q2FzdC9JREVBREVWMTUxNzAvc3JjL1Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3JlZHVuZGFudENhc3QvSURFQURFVjE1MTcwL3NyYy9UZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWJkYTQyYwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3JlZHVuZGFudENhc3QvSURFQURFVjE1MTcwL3NyYy9UZXN0LmphdmEKQEAgLTAsMCArMSwxNiBAQAorY2xhc3MgQSB7CisgICAgdm9pZCBmb28oKSB0aHJvd3MgRXhjZXB0aW9uIHt9Cit9CisKK2NsYXNzIEIgZXh0ZW5kcyBBIHsKKyAgICB2b2lkIGZvbygpICB7CisKKyAgICB9Cit9CisKK2NsYXNzIEMgeworICAgIHsKKyAgICAgICAgQSBhID0gbmV3IEIoKTsKKyAgICAgICAgKChCKSBhKS5mb28oKTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vcmVkdW5kYW50Q2FzdC9JREVBREVWMjU2NzUvZXhwZWN0ZWQueG1sIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vcmVkdW5kYW50Q2FzdC9JREVBREVWMjU2NzUvZXhwZWN0ZWQueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM0NDBhNDkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9yZWR1bmRhbnRDYXN0L0lERUFERVYyNTY3NS9leHBlY3RlZC54bWwKQEAgLTAsMCArMSw5IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHByb2JsZW1zPgorICA8cHJvYmxlbT4KKyAgICA8ZmlsZT5BLmphdmE8L2ZpbGU+CisgICAgPGxpbmU+MzwvbGluZT4KKyAgICA8ZGVzY3JpcHRpb24+Q2FzdGluZyAnYXJyYXknIHRvIFN0cmluZ1tdIGlzIHJlZHVuZGFudDwvZGVzY3JpcHRpb24+CisgIDwvcHJvYmxlbT4KKzwvcHJvYmxlbXM+CisKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3JlZHVuZGFudENhc3QvSURFQURFVjI1Njc1L3NyYy9BLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9yZWR1bmRhbnRDYXN0L0lERUFERVYyNTY3NS9zcmMvQS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA3NGEwNDEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9yZWR1bmRhbnRDYXN0L0lERUFERVYyNTY3NS9zcmMvQS5qYXZhCkBAIC0wLDAgKzEsMTUgQEAKK3B1YmxpYyBjbGFzcyBUZXN0IHsKKyAgICBwdWJsaWMgdm9pZCBmb28oT2JqZWN0W10gYXJyYXkpIHsKKyAgICAgICAgKChTdHJpbmdbXSkgYXJyYXkpWzBdID0gIiAiOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIGJhcihTdHJpbmdbXSBhcnJheSkgeworICAgICAgICAoKE9iamVjdFtdKSBhcnJheSlbMF0gPSBuZXcgT2JqZWN0KCk7CisgICAgfQorCisgICAgcHVibGljIE9iamVjdCBvYmo7ICAKKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgc2V0T2JqVmFsdWVJbkFycmF5KFRlc3QgdCwgT2JqZWN0IHZhbCkgeworICAgICAgdC5vYmogPSBuZXcgT2JqZWN0WzFdOworICAgICAgKChPYmplY3RbXSl0Lm9iailbMF0gPSB2YWw7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3JlZHVuZGFudENhc3QvSURFQURFVjY4MTgvZXhwZWN0ZWQueG1sIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vcmVkdW5kYW50Q2FzdC9JREVBREVWNjgxOC9leHBlY3RlZC54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGQxNzhlOQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3JlZHVuZGFudENhc3QvSURFQURFVjY4MTgvZXhwZWN0ZWQueG1sCkBAIC0wLDAgKzEsOSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxwcm9ibGVtcz4KKyAgPHByb2JsZW0+CisgICAgPGZpbGU+QS5qYXZhPC9maWxlPgorICAgIDxsaW5lPjEzPC9saW5lPgorICAgIDxkZXNjcmlwdGlvbj5DYXN0aW5nIHByaWNlcy5nZXQobnVsbCkgdG8gQmlkQXNrIGlzIHJlZHVuZGFudDwvZGVzY3JpcHRpb24+CisgIDwvcHJvYmxlbT4KKzwvcHJvYmxlbXM+CisKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3JlZHVuZGFudENhc3QvSURFQURFVjY4MTgvc3JjL0EuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3JlZHVuZGFudENhc3QvSURFQURFVjY4MTgvc3JjL0EuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMGU2ZmJkCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vcmVkdW5kYW50Q2FzdC9JREVBREVWNjgxOC9zcmMvQS5qYXZhCkBAIC0wLDAgKzEsMTUgQEAKK2NsYXNzIEdldHRlciB7CisgICAgQmlkQXNrIGdldChTdHJpbmcgcykgeworICAgICAgICByZXR1cm4gbnVsbDsKKyAgICB9Cit9CisKK2NsYXNzIEJpZEFzayB7CisgICAgcHVibGljIE9iamVjdCBnZXRPcGVuUXVvdGU7Cit9CisKK3B1YmxpYyBjbGFzcyBBIHsKKyAgICBzdGF0aWMgT2JqZWN0IGYoR2V0dGVyIHByaWNlcykgeworICAgICAgICByZXR1cm4gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCkgPT0gMi4wID8gICAoKEJpZEFzaykgcHJpY2VzLmdldChudWxsKSkuZ2V0T3BlblF1b3RlIDogbnVsbDsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9yZWR1bmRhbnRDYXN0L0luQ29uZGl0aW9uYWwvZXhwZWN0ZWQueG1sIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vcmVkdW5kYW50Q2FzdC9JbkNvbmRpdGlvbmFsL2V4cGVjdGVkLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOTNmYjFjCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vcmVkdW5kYW50Q2FzdC9JbkNvbmRpdGlvbmFsL2V4cGVjdGVkLnhtbApAQCAtMCwwICsxLDkgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8cHJvYmxlbXM+CisgIDxwcm9ibGVtPgorICAgIDxmaWxlPkEuamF2YTwvZmlsZT4KKyAgICA8bGluZT4zPC9saW5lPgorICAgIDxwcm9ibGVtX2NsYXNzIHNldmVyaXR5PSJXQVJOSU5HIiBhdHRyaWJ1dGVfa2V5PSJOT1RfVVNFRF9FTEVNRU5UX0FUVFJJQlVURVMiPlJlZHVuZGFudCB0eXBlIGNhc3Q8L3Byb2JsZW1fY2xhc3M+CisgICAgPGRlc2NyaXB0aW9uPkNhc3RpbmcgJmx0O2NvZGUmZ3Q7bnVsbCZsdDsvY29kZSZndDsgdG8gJmx0O2NvZGUmZ3Q7U3RyaW5nJmx0Oy9jb2RlJmd0OyBpcyByZWR1bmRhbnQ8L2Rlc2NyaXB0aW9uPgorICA8L3Byb2JsZW0+Cis8L3Byb2JsZW1zPgpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vcmVkdW5kYW50Q2FzdC9JbkNvbmRpdGlvbmFsL3NyYy9BLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9yZWR1bmRhbnRDYXN0L0luQ29uZGl0aW9uYWwvc3JjL0EuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNGFjNjBjCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vcmVkdW5kYW50Q2FzdC9JbkNvbmRpdGlvbmFsL3NyYy9BLmphdmEKQEAgLTAsMCArMSw1IEBACitjbGFzcyBBIHsKKyAgIHsKKyAgICAgU3RyaW5nIHMgPSB0cnVlID8gIiIgOiAoU3RyaW5nKSBudWxsOyAvL2Nhc3QgaXMgbmVlZGVkCisgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vcmVkdW5kYW50Q2FzdC9JbkNvbmRpdGlvbmFsUHJlc2VydmVSZXNvbHZlL2V4cGVjdGVkLnhtbCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3JlZHVuZGFudENhc3QvSW5Db25kaXRpb25hbFByZXNlcnZlUmVzb2x2ZS9leHBlY3RlZC54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzM0M2ViMAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3JlZHVuZGFudENhc3QvSW5Db25kaXRpb25hbFByZXNlcnZlUmVzb2x2ZS9leHBlY3RlZC54bWwKQEAgLTAsMCArMSw5IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHByb2JsZW1zPgorICA8cHJvYmxlbT4KKyAgICA8ZmlsZT5BLmphdmE8L2ZpbGU+CisgICAgPGxpbmU+NDwvbGluZT4KKyAgICA8cHJvYmxlbV9jbGFzcyBzZXZlcml0eT0iV0FSTklORyIgYXR0cmlidXRlX2tleT0iTk9UX1VTRURfRUxFTUVOVF9BVFRSSUJVVEVTIj5SZWR1bmRhbnQgdHlwZSBjYXN0PC9wcm9ibGVtX2NsYXNzPgorICAgIDxkZXNjcmlwdGlvbj5DYXN0aW5nICZsdDtjb2RlJmd0O3BhcmFtJmx0Oy9jb2RlJmd0OyB0byAmbHQ7Y29kZSZndDtPYmplY3QmbHQ7L2NvZGUmZ3Q7IGlzIHJlZHVuZGFudDwvZGVzY3JpcHRpb24+CisgIDwvcHJvYmxlbT4KKzwvcHJvYmxlbXM+CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9yZWR1bmRhbnRDYXN0L0luQ29uZGl0aW9uYWxQcmVzZXJ2ZVJlc29sdmUvc3JjL0EuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3JlZHVuZGFudENhc3QvSW5Db25kaXRpb25hbFByZXNlcnZlUmVzb2x2ZS9zcmMvQS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU5ZDk1ZGUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9yZWR1bmRhbnRDYXN0L0luQ29uZGl0aW9uYWxQcmVzZXJ2ZVJlc29sdmUvc3JjL0EuamF2YQpAQCAtMCwwICsxLDEwIEBACitjbGFzcyBBIHsKKyAgdm9pZCBhZGQoT2JqZWN0IG8sIFN0cmluZyBwYXJhbSkgeworICAgIGFkZChvLCBvICE9IG51bGwgPyBudWxsIDogKE9iamVjdCkgcGFyYW0pOworICAgIGFkZChvLCBvID09IG51bGwgPyBuZXcgT2JqZWN0KCkgOiAoT2JqZWN0KSBwYXJhbSk7CisgIH0KKworICB2b2lkIGFkZChPYmplY3QgbywgT2JqZWN0IHBhcmFtKSB7CisKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3JlZHVuZGFudENhc3QvSW5hY2Nlc3NpYmxlL2V4cGVjdGVkLnhtbCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3JlZHVuZGFudENhc3QvSW5hY2Nlc3NpYmxlL2V4cGVjdGVkLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ODBhODg5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vcmVkdW5kYW50Q2FzdC9JbmFjY2Vzc2libGUvZXhwZWN0ZWQueG1sCkBAIC0wLDAgKzEsMyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxwcm9ibGVtcz4KKzwvcHJvYmxlbXM+CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9yZWR1bmRhbnRDYXN0L0luYWNjZXNzaWJsZS9zcmMvVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vcmVkdW5kYW50Q2FzdC9JbmFjY2Vzc2libGUvc3JjL1Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YzM2ZDViCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vcmVkdW5kYW50Q2FzdC9JbmFjY2Vzc2libGUvc3JjL1Rlc3QuamF2YQpAQCAtMCwwICsxLDEyIEBACitjbGFzcyBFbnRyeSB7CisgIHByaXZhdGUgZmluYWwgT2JqZWN0IG9iajsKKyAgcHJvdGVjdGVkIEVudHJ5KERpcmVjdG9yeSBwYXJlbnQpIHsKKyAgICBvYmogPSAoKEVudHJ5KXBhcmVudCkub2JqOyAvL2Nhc3QgaXMgbmVlZGVkIGJlY2F1c2UgJ29iaicgaXMgbm90IHZpc2libGUgd2l0aCAnRGlyZWN0b3J5JyBhY2Nlc3MgY2xhc3MKKyAgfQorfQorCitjbGFzcyBEaXJlY3RvcnkgZXh0ZW5kcyBFbnRyeSB7CisgIHB1YmxpYyBEaXJlY3RvcnkoRGlyZWN0b3J5IHBhcmVudCkgeworICAgIHN1cGVyKHBhcmVudCk7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9yZWR1bmRhbnRDYXN0L0luaXRpYWxpemVyMS9leHBlY3RlZC54bWwgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9yZWR1bmRhbnRDYXN0L0luaXRpYWxpemVyMS9leHBlY3RlZC54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTA1NGU1YgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3JlZHVuZGFudENhc3QvSW5pdGlhbGl6ZXIxL2V4cGVjdGVkLnhtbApAQCAtMCwwICsxLDkgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8cHJvYmxlbXM+CisgIDxwcm9ibGVtPgorICAgIDxmaWxlPkluaXRpYWxpemVyMS5qYXZhPC9maWxlPgorICAgIDxsaW5lPjM8L2xpbmU+CisgICAgPGRlc2NyaXB0aW9uPkNhc3RpbmcgbnVsbCB0byBTdHJpbmcgaXMgcmVkdW5kYW50PC9kZXNjcmlwdGlvbj4KKyAgPC9wcm9ibGVtPgorPC9wcm9ibGVtcz4KKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vcmVkdW5kYW50Q2FzdC9Jbml0aWFsaXplcjEvc3JjL0luaXRpYWxpemVyMS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vcmVkdW5kYW50Q2FzdC9Jbml0aWFsaXplcjEvc3JjL0luaXRpYWxpemVyMS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRlOWJlZjcKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9yZWR1bmRhbnRDYXN0L0luaXRpYWxpemVyMS9zcmMvSW5pdGlhbGl6ZXIxLmphdmEKQEAgLTAsMCArMSw1IEBACitjbGFzcyBUZXN0eworICBzdGF0aWMgZigpeworICAgIE9iamVjdCBvID0gKFN0cmluZyludWxsOworICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9yZWR1bmRhbnRDYXN0L0ludFRvRG91YmxlL2V4cGVjdGVkLnhtbCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3JlZHVuZGFudENhc3QvSW50VG9Eb3VibGUvZXhwZWN0ZWQueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlhYzg3OWQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9yZWR1bmRhbnRDYXN0L0ludFRvRG91YmxlL2V4cGVjdGVkLnhtbApAQCAtMCwwICsxLDMgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8cHJvYmxlbXMgLz4KKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vcmVkdW5kYW50Q2FzdC9JbnRUb0RvdWJsZS9zcmMvVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vcmVkdW5kYW50Q2FzdC9JbnRUb0RvdWJsZS9zcmMvVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA3OTAyNjgKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9yZWR1bmRhbnRDYXN0L0ludFRvRG91YmxlL3NyYy9UZXN0LmphdmEKQEAgLTAsMCArMSw1IEBACitjbGFzcyBBeworICB2b2lkIGYoKXsKKyAgICBkb3VibGUgZCA9IChkb3VibGUpMSAvIDU7CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3JlZHVuZGFudENhc3QvTmVzdGVkQ2FzdC9leHBlY3RlZC54bWwgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9yZWR1bmRhbnRDYXN0L05lc3RlZENhc3QvZXhwZWN0ZWQueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVlNTk0YTIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9yZWR1bmRhbnRDYXN0L05lc3RlZENhc3QvZXhwZWN0ZWQueG1sCkBAIC0wLDAgKzEsOSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxwcm9ibGVtcz4KKyAgPHByb2JsZW0+CisgICAgPGZpbGU+Q2FzdFRlc3QuamF2YTwvZmlsZT4KKyAgICA8bGluZT43PC9saW5lPgorICAgIDxwcm9ibGVtX2NsYXNzIHNldmVyaXR5PSJXQVJOSU5HIiBhdHRyaWJ1dGVfa2V5PSJOT1RfVVNFRF9FTEVNRU5UX0FUVFJJQlVURVMiPlJlZHVuZGFudCB0eXBlIGNhc3Q8L3Byb2JsZW1fY2xhc3M+CisgICAgPGRlc2NyaXB0aW9uPkNhc3RpbmcgJmx0O2NvZGUmZ3Q7Y3QxJmx0Oy9jb2RlJmd0OyB0byAmbHQ7Y29kZSZndDtDYXN0VGVzdCZsdDsvY29kZSZndDsgaXMgcmVkdW5kYW50PC9kZXNjcmlwdGlvbj4KKyAgPC9wcm9ibGVtPgorPC9wcm9ibGVtcz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9yZWR1bmRhbnRDYXN0L05lc3RlZENhc3Qvc3JjL0Nhc3RUZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9yZWR1bmRhbnRDYXN0L05lc3RlZENhc3Qvc3JjL0Nhc3RUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODRiYmFiYgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3JlZHVuZGFudENhc3QvTmVzdGVkQ2FzdC9zcmMvQ2FzdFRlc3QuamF2YQpAQCAtMCwwICsxLDkgQEAKK2NsYXNzIENhc3RUZXN0Cit7CisgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4gKFN0cmluZ1tdIGFyZ3MpIHRocm93cyBDbG9uZU5vdFN1cHBvcnRlZEV4Y2VwdGlvbgorICAgIHsKKyAgICAgICAgQ2FzdFRlc3QgY3QxID0gbmV3IENhc3RUZXN0ICgpOworICAgICAgICAvLyBUaGUgY2FzdCBvZiBjdDEgaXMgb2J2aW91c2x5IHJlZHVuZGFudCAoYWx0aG91Z2ggdGhlIGNhc3Qgb2YgdGhlIHJlc3VsdCBpcyBuZWNlc3NhcnkpCisgICAgICAgIENhc3RUZXN0IGN0MiA9IChDYXN0VGVzdCkgKChDYXN0VGVzdCljdDEpLmNsb25lKCk7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3JlZHVuZGFudENhc3QvTmVzdGVkVGhpbmdzL2V4cGVjdGVkLnhtbCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3JlZHVuZGFudENhc3QvTmVzdGVkVGhpbmdzL2V4cGVjdGVkLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMzgxYzM0Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vcmVkdW5kYW50Q2FzdC9OZXN0ZWRUaGluZ3MvZXhwZWN0ZWQueG1sCkBAIC0wLDAgKzEsOSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxwcm9ibGVtcz4KKyAgPHByb2JsZW0+CisgICAgPGZpbGU+TmVzdGVkVGhpbmdzLmphdmE8L2ZpbGU+CisgICAgPGxpbmU+MTM8L2xpbmU+CisgICAgPGRlc2NyaXB0aW9uPkNhc3RpbmcgIiIgdG8gU3RyaW5nIGlzIHJlZHVuZGFudDwvZGVzY3JpcHRpb24+CisgIDwvcHJvYmxlbT4KKzwvcHJvYmxlbXM+CisKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3JlZHVuZGFudENhc3QvTmVzdGVkVGhpbmdzL3NyYy9OZXN0ZWRUaGluZ3MuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3JlZHVuZGFudENhc3QvTmVzdGVkVGhpbmdzL3NyYy9OZXN0ZWRUaGluZ3MuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYjE5YWY5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vcmVkdW5kYW50Q2FzdC9OZXN0ZWRUaGluZ3Mvc3JjL05lc3RlZFRoaW5ncy5qYXZhCkBAIC0wLDAgKzEsMjYgQEAKK2NsYXNzIFhYWCB7CisgICAgU3RyaW5nIGYoKSB7CisgICAgICAgIG5ldyBSdW5uYWJsZSgpIHsKKyAgICAgICAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKKyAgICAgICAgICAgICAgICBuZXcgUnVubmFibGUoKSB7CisgICAgICAgICAgICAgICAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBSdW5uYWJsZSgpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdWJsaWMgdm9pZCBydW4oKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBSdW5uYWJsZSgpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgUnVubmFibGUoKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBzID0gKFN0cmluZykiIjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICB9CisgICAgICAgIH07CisgICAgICAgIHJldHVybiAiIjsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9yZWR1bmRhbnRDYXN0L05ldzEvZXhwZWN0ZWQueG1sIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vcmVkdW5kYW50Q2FzdC9OZXcxL2V4cGVjdGVkLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMzVmZTY3Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vcmVkdW5kYW50Q2FzdC9OZXcxL2V4cGVjdGVkLnhtbApAQCAtMCwwICsxLDkgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8cHJvYmxlbXM+CisgIDxwcm9ibGVtPgorICAgIDxmaWxlPk5ldzEuamF2YTwvZmlsZT4KKyAgICA8bGluZT41PC9saW5lPgorICAgIDxkZXNjcmlwdGlvbj5DYXN0aW5nIG51bGwgdG8gU3RyaW5nIGlzIHJlZHVuZGFudDwvZGVzY3JpcHRpb24+CisgIDwvcHJvYmxlbT4KKzwvcHJvYmxlbXM+CisKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3JlZHVuZGFudENhc3QvTmV3MS9zcmMvTmV3MS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vcmVkdW5kYW50Q2FzdC9OZXcxL3NyYy9OZXcxLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjFhNjYyNQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3JlZHVuZGFudENhc3QvTmV3MS9zcmMvTmV3MS5qYXZhCkBAIC0wLDAgKzEsNyBAQAorY2xhc3MgVGVzdHsKKyAgVGVzdChPYmplY3Qgbyl7fQorCisgIHN0YXRpYyBmKCl7CisgICAgbmV3IFRlc3QoKFN0cmluZyludWxsKTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vcmVkdW5kYW50Q2FzdC9PbmVPZlR3by9leHBlY3RlZC54bWwgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9yZWR1bmRhbnRDYXN0L09uZU9mVHdvL2V4cGVjdGVkLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMTkwOTZlCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vcmVkdW5kYW50Q2FzdC9PbmVPZlR3by9leHBlY3RlZC54bWwKQEAgLTAsMCArMSw5IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHByb2JsZW1zPgorICA8cHJvYmxlbT4KKyAgICA8ZmlsZT5PbmVPZlR3by5qYXZhPC9maWxlPgorICAgIDxsaW5lPjg8L2xpbmU+CisgICAgPGRlc2NyaXB0aW9uPkNhc3RpbmcgbyB0byBTdHJpbmcgaXMgcmVkdW5kYW50PC9kZXNjcmlwdGlvbj4KKyAgPC9wcm9ibGVtPgorPC9wcm9ibGVtcz4KKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vcmVkdW5kYW50Q2FzdC9PbmVPZlR3by9zcmMvT25lT2ZUd28uamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3JlZHVuZGFudENhc3QvT25lT2ZUd28vc3JjL09uZU9mVHdvLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGZmNjg1MAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3JlZHVuZGFudENhc3QvT25lT2ZUd28vc3JjL09uZU9mVHdvLmphdmEKQEAgLTAsMCArMSwxMCBAQAorcGFja2FnZSBjb207CisKK3B1YmxpYyBjbGFzcyBUZXN0IHsKKyAgc3RhdGljIHZvaWQgZihTdHJpbmcgcywgT2JqZWN0IG8pe30KKworICB2b2lkIGZvbygpeworICAgIE9iamVjdCBvOworICAgIGYoKFN0cmluZylvLCAoU3RyaW5nKW8pOworICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9yZWR1bmRhbnRDYXN0L1ByaW1pdGl2ZUluc2lkZVN5bmNocm9uaXplZC9leHBlY3RlZC54bWwgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9yZWR1bmRhbnRDYXN0L1ByaW1pdGl2ZUluc2lkZVN5bmNocm9uaXplZC9leHBlY3RlZC54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWU5MzM0OQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3JlZHVuZGFudENhc3QvUHJpbWl0aXZlSW5zaWRlU3luY2hyb25pemVkL2V4cGVjdGVkLnhtbApAQCAtMCwwICsxLDMgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8cHJvYmxlbXM+Cis8L3Byb2JsZW1zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3JlZHVuZGFudENhc3QvUHJpbWl0aXZlSW5zaWRlU3luY2hyb25pemVkL3NyYy9DYXN0VGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vcmVkdW5kYW50Q2FzdC9QcmltaXRpdmVJbnNpZGVTeW5jaHJvbml6ZWQvc3JjL0Nhc3RUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWQ2MDdjYgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3JlZHVuZGFudENhc3QvUHJpbWl0aXZlSW5zaWRlU3luY2hyb25pemVkL3NyYy9DYXN0VGVzdC5qYXZhCkBAIC0wLDAgKzEsOCBAQAorY2xhc3MgQ2FzdFRlc3QKK3sKKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbiAoU3RyaW5nW10gYXJncykgdGhyb3dzIENsb25lTm90U3VwcG9ydGVkRXhjZXB0aW9uCisgICAgeworICAgICAgIGludCBpID0gMDsKKyAgICAgICBzeW5jaHJvbml6ZWQgKChPYmplY3QpaSl7fQorICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9yZWR1bmRhbnRDYXN0L1NDUjExNTU1L2V4cGVjdGVkLnhtbCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3JlZHVuZGFudENhc3QvU0NSMTE1NTUvZXhwZWN0ZWQueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlhYzg3OWQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9yZWR1bmRhbnRDYXN0L1NDUjExNTU1L2V4cGVjdGVkLnhtbApAQCAtMCwwICsxLDMgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8cHJvYmxlbXMgLz4KKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vcmVkdW5kYW50Q2FzdC9TQ1IxMTU1NS9zcmMvVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vcmVkdW5kYW50Q2FzdC9TQ1IxMTU1NS9zcmMvVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQzOWE3MGIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9yZWR1bmRhbnRDYXN0L1NDUjExNTU1L3NyYy9UZXN0LmphdmEKQEAgLTAsMCArMSw5IEBACisKK2ltcG9ydCBqYXZhLmF3dC4qOworCitwdWJsaWMgY2xhc3MgVGVzdCB7CisgIHZvaWQgZm9vKCl7CisgICAgQ29tcG9uZW50IGMgPSBudWxsOworICAgICgoRnJhbWUpIGMpLnNob3coKTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vcmVkdW5kYW50Q2FzdC9TQ1IxMzM5Ny9leHBlY3RlZC54bWwgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9yZWR1bmRhbnRDYXN0L1NDUjEzMzk3L2V4cGVjdGVkLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYzI3MmFiCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vcmVkdW5kYW50Q2FzdC9TQ1IxMzM5Ny9leHBlY3RlZC54bWwKQEAgLTAsMCArMSwzIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHByb2JsZW1zLz4KKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vcmVkdW5kYW50Q2FzdC9TQ1IxMzM5Ny9zcmMvVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vcmVkdW5kYW50Q2FzdC9TQ1IxMzM5Ny9zcmMvVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc3MmY0N2MKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9yZWR1bmRhbnRDYXN0L1NDUjEzMzk3L3NyYy9UZXN0LmphdmEKQEAgLTAsMCArMSwyMSBAQAorY2xhc3MgUmVkdW5kYW50Q2FzdFByb2JsZW0geworICAgIHB1YmxpYyBhYnN0cmFjdCBzdGF0aWMgY2xhc3MgVG9wIHsKKyAgICAgICAgcHVibGljIFN0cmluZyBmKE9iamVjdCBvKSB7CisgICAgICAgICAgICByZXR1cm4gIlRvcC5mKE9iamVjdCkiOworICAgICAgICB9CisgICAgfQorIAorICAgIHB1YmxpYyBzdGF0aWMgY2xhc3MgU3ViIGV4dGVuZHMgVG9wIHsKKyAgICAgICAgcHVibGljIFN0cmluZyBmKFN0cmluZyBzKSB7CisgICAgICAgICAgICByZXR1cm4gIk1pZGRsZS5mKFN0cmluZykiOworICAgICAgICB9CisgICAgfQorIAorICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKyAgICAgICAgU3ViIHN1YiA9IG5ldyBTdWIoKTsKKyAgICAgICAgU3RyaW5nIGFTdHJpbmcgPSAiIjsKKyAKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCgoVG9wKXN1YikuZihhU3RyaW5nKSk7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihzdWIuZihhU3RyaW5nKSk7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vcmVkdW5kYW50Q2FzdC9TQ1IxNDUwMi9leHBlY3RlZC54bWwgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9yZWR1bmRhbnRDYXN0L1NDUjE0NTAyL2V4cGVjdGVkLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYTYwZjliCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vcmVkdW5kYW50Q2FzdC9TQ1IxNDUwMi9leHBlY3RlZC54bWwKQEAgLTAsMCArMSw5IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHByb2JsZW1zPgorICA8cHJvYmxlbT4KKyAgICA8ZmlsZT5UZXN0LmphdmE8L2ZpbGU+CisgICAgPGxpbmU+MzwvbGluZT4KKyAgICA8ZGVzY3JpcHRpb24+Q2FzdGluZyBuZXcgVGVzdCgpIHRvIFRlc3QgaXMgcmVkdW5kYW50PC9kZXNjcmlwdGlvbj4KKyAgPC9wcm9ibGVtPgorPC9wcm9ibGVtcz4KKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vcmVkdW5kYW50Q2FzdC9TQ1IxNDUwMi9zcmMvVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vcmVkdW5kYW50Q2FzdC9TQ1IxNDUwMi9zcmMvVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg0NDY2NGMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9yZWR1bmRhbnRDYXN0L1NDUjE0NTAyL3NyYy9UZXN0LmphdmEKQEAgLTAsMCArMSw1IEBACitwdWJsaWMgY2xhc3MgVGVzdCB7CisgICBwdWJsaWMgdm9pZCBmb28oVGVzdCB0KSB7CisgICAgIGZvbygoKFRlc3QpIG5ldyBUZXN0KCkpKTsKKyAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9yZWR1bmRhbnRDYXN0L1NDUjE0NTU5L2V4cGVjdGVkLnhtbCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3JlZHVuZGFudENhc3QvU0NSMTQ1NTkvZXhwZWN0ZWQueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVjMjcyYWIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9yZWR1bmRhbnRDYXN0L1NDUjE0NTU5L2V4cGVjdGVkLnhtbApAQCAtMCwwICsxLDMgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8cHJvYmxlbXMvPgorCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9yZWR1bmRhbnRDYXN0L1NDUjE0NTU5L3NyYy9UZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9yZWR1bmRhbnRDYXN0L1NDUjE0NTU5L3NyYy9UZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjZlYjYwOQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3JlZHVuZGFudENhc3QvU0NSMTQ1NTkvc3JjL1Rlc3QuamF2YQpAQCAtMCwwICsxLDE1IEBACitwdWJsaWMgY2xhc3MgVGVzdCB7CisgIGNsYXNzIFN1cGVyIHsKKyAgICBPYmplY3QgZm9vKCkgeyByZXR1cm4gbmV3IE9iamVjdCgpOyB9CisgIH0KKyAgY2xhc3MgU3ViIGV4dGVuZHMgU3VwZXJ7CisgICAgU3RyaW5nIGZvbygpIHsgcmV0dXJuICIiOyB9CisgIH0KKyAgcHVibGljIFN0cmluZyBnZXQoZmluYWwgU3VwZXIgb2JqKSB7CisgICAgaWYgKG9iaiBpbnN0YW5jZW9mIFN1YikgeworICAgICAgcmV0dXJuICgoU3ViKW9iaikuZm9vKCk7CisgICAgfSBlbHNlIHsKKyAgICAgIHJldHVybiAiVGhlIHZhbHVlIGlzICIgKyBvYmouZm9vKCk7CisgICAgfQorICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vcmVkdW5kYW50Q2FzdC9TQ1IxNTIzNi9leHBlY3RlZC54bWwgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9yZWR1bmRhbnRDYXN0L1NDUjE1MjM2L2V4cGVjdGVkLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYjAzM2U1Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vcmVkdW5kYW50Q2FzdC9TQ1IxNTIzNi9leHBlY3RlZC54bWwKQEAgLTAsMCArMSw4IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHByb2JsZW1zPgorICA8cHJvYmxlbT4KKyAgICA8ZmlsZT5UZXN0LmphdmE8L2ZpbGU+CisgICAgPGxpbmU+MzwvbGluZT4KKyAgICA8ZGVzY3JpcHRpb24+Q2FzdGluZyBzIHRvIFN0cmluZyBpcyByZWR1bmRhbnQ8L2Rlc2NyaXB0aW9uPgorICA8L3Byb2JsZW0+Cis8L3Byb2JsZW1zPgpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vcmVkdW5kYW50Q2FzdC9TQ1IxNTIzNi9zcmMvVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vcmVkdW5kYW50Q2FzdC9TQ1IxNTIzNi9zcmMvVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRiYjVmZTkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9yZWR1bmRhbnRDYXN0L1NDUjE1MjM2L3NyYy9UZXN0LmphdmEKQEAgLTAsMCArMSw1IEBACitwdWJsaWMgY2xhc3MgVGVzdCB7CisgICBwdWJsaWMgdm9pZCB0ZXN0KE9iamVjdCBzKSB7CisgICAgICBPYmplY3QgbyA9ICgoU3RyaW5nKSBzKTsKKyAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9yZWR1bmRhbnRDYXN0L1NDUjY5MDcvZXhwZWN0ZWQueG1sIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vcmVkdW5kYW50Q2FzdC9TQ1I2OTA3L2V4cGVjdGVkLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYTM2YzUyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vcmVkdW5kYW50Q2FzdC9TQ1I2OTA3L2V4cGVjdGVkLnhtbApAQCAtMCwwICsxLDkgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8cHJvYmxlbXM+CisgIDxwcm9ibGVtPgorICAgIDxmaWxlPlRlc3QuamF2YTwvZmlsZT4KKyAgICA8bGluZT43PC9saW5lPgorICAgIDxkZXNjcmlwdGlvbj5DYXN0aW5nIG51bGwgdG8gU3RyaW5nIGlzIHJlZHVuZGFudDwvZGVzY3JpcHRpb24+CisgIDwvcHJvYmxlbT4KKzwvcHJvYmxlbXM+CisKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3JlZHVuZGFudENhc3QvU0NSNjkwNy9zcmMvVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vcmVkdW5kYW50Q2FzdC9TQ1I2OTA3L3NyYy9UZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjc0NzAzMAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3JlZHVuZGFudENhc3QvU0NSNjkwNy9zcmMvVGVzdC5qYXZhCkBAIC0wLDAgKzEsOSBAQAorCitwdWJsaWMgY2xhc3MgVGVzdCB7CisgIHZvaWQgZm9vKFN0cmluZyBtc2cpe30KKyAgdm9pZCBmb28oT2JqZWN0IG8pe30KKworICB2b2lkIG1ldGhvZCgpeworICAgIGZvbygoU3RyaW5nKW51bGwpOworICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9yZWR1bmRhbnRDYXN0L1Nob3J0VG9TaG9ydC9leHBlY3RlZC54bWwgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9yZWR1bmRhbnRDYXN0L1Nob3J0VG9TaG9ydC9leHBlY3RlZC54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTMwYmVhMAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3JlZHVuZGFudENhc3QvU2hvcnRUb1Nob3J0L2V4cGVjdGVkLnhtbApAQCAtMCwwICsxLDkgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8cHJvYmxlbXM+CisgIDxwcm9ibGVtPgorICAgIDxmaWxlPlRlc3QuamF2YTwvZmlsZT4KKyAgICA8bGluZT40PC9saW5lPgorICAgIDxkZXNjcmlwdGlvbj5DYXN0aW5nIHYgdG8gc2hvcnQgaXMgcmVkdW5kYW50PC9kZXNjcmlwdGlvbj4KKyAgPC9wcm9ibGVtPgorPC9wcm9ibGVtcz4KKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vcmVkdW5kYW50Q2FzdC9TaG9ydFRvU2hvcnQvc3JjL1Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3JlZHVuZGFudENhc3QvU2hvcnRUb1Nob3J0L3NyYy9UZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWRlNGFhMwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3JlZHVuZGFudENhc3QvU2hvcnRUb1Nob3J0L3NyYy9UZXN0LmphdmEKQEAgLTAsMCArMSw3IEBACitjbGFzcyBUZXN0eworICBzaG9ydCBmb28oKXsKKyAgICBzaG9ydCB2ID0gMDsKKyAgICBzaG9ydCBzID0gKHNob3J0KXY7CisgICAgcmV0dXJuIHM7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9yZWR1bmRhbnRDYXN0L1Nob3J0VnNJbnQvZXhwZWN0ZWQueG1sIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vcmVkdW5kYW50Q2FzdC9TaG9ydFZzSW50L2V4cGVjdGVkLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YWM4NzlkCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vcmVkdW5kYW50Q2FzdC9TaG9ydFZzSW50L2V4cGVjdGVkLnhtbApAQCAtMCwwICsxLDMgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8cHJvYmxlbXMgLz4KKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vcmVkdW5kYW50Q2FzdC9TaG9ydFZzSW50L3NyYy9TaG9ydFZzSW50LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9yZWR1bmRhbnRDYXN0L1Nob3J0VnNJbnQvc3JjL1Nob3J0VnNJbnQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMGI2OTBkCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vcmVkdW5kYW50Q2FzdC9TaG9ydFZzSW50L3NyYy9TaG9ydFZzSW50LmphdmEKQEAgLTAsMCArMSw4IEBACitjbGFzcyBBeworICBTdHJpbmcgdG9IZXgoaW50IGkpIHt9IAorICBTdHJpbmcgdG9IZXgoc2hvcnQgaSkge30KKworICB2b2lkIGYoKXsKKyAgICBTdHJpbmcgcmVzdWx0ID0gdG9IZXgoKHNob3J0KSdpJyk7CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3JlZHVuZGFudENhc3QvVHJ1bmNhdGlvbi9leHBlY3RlZC54bWwgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9yZWR1bmRhbnRDYXN0L1RydW5jYXRpb24vZXhwZWN0ZWQueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlhYzg3OWQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9yZWR1bmRhbnRDYXN0L1RydW5jYXRpb24vZXhwZWN0ZWQueG1sCkBAIC0wLDAgKzEsMyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxwcm9ibGVtcyAvPgorCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9yZWR1bmRhbnRDYXN0L1RydW5jYXRpb24vc3JjL1Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3JlZHVuZGFudENhc3QvVHJ1bmNhdGlvbi9zcmMvVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY4NzA3ZjYzCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vcmVkdW5kYW50Q2FzdC9UcnVuY2F0aW9uL3NyYy9UZXN0LmphdmEKQEAgLTAsMCArMSw1IEBACitjbGFzcyBBeworICB2b2lkIGYoKXsKKyAgICBkb3VibGUgZCA9IChpbnQpIDEuNTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vcmVkdW5kYW50Q2FzdC9WaXJ0dWFsTWV0aG9kMS9leHBlY3RlZC54bWwgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9yZWR1bmRhbnRDYXN0L1ZpcnR1YWxNZXRob2QxL2V4cGVjdGVkLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMmVkMmI4Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vcmVkdW5kYW50Q2FzdC9WaXJ0dWFsTWV0aG9kMS9leHBlY3RlZC54bWwKQEAgLTAsMCArMSw5IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHByb2JsZW1zPgorICA8cHJvYmxlbT4KKyAgICA8ZmlsZT5WaXJ0dWFsTWV0aG9kMS5qYXZhPC9maWxlPgorICAgIDxsaW5lPjEyPC9saW5lPgorICAgIDxkZXNjcmlwdGlvbj5DYXN0aW5nIGEgQiBpcyByZWR1bmRhbnQ8L2Rlc2NyaXB0aW9uPgorICA8L3Byb2JsZW0+Cis8L3Byb2JsZW1zPgorCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9yZWR1bmRhbnRDYXN0L1ZpcnR1YWxNZXRob2QxL3NyYy9WaXJ0dWFsTWV0aG9kMS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vcmVkdW5kYW50Q2FzdC9WaXJ0dWFsTWV0aG9kMS9zcmMvVmlydHVhbE1ldGhvZDEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNmQxNzQxCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vcmVkdW5kYW50Q2FzdC9WaXJ0dWFsTWV0aG9kMS9zcmMvVmlydHVhbE1ldGhvZDEuamF2YQpAQCAtMCwwICsxLDE0IEBACitjbGFzcyBBeworICB2b2lkIGYoKXt9Cit9CisKK2NsYXNzIEIgZXh0ZW5kcyBBeworICB2b2lkIGYoKXt9Cit9CisKK2NsYXNzIFRlc3R7CisgIHN0YXRpYyBmb28oKXsKKyAgICBBIGE7CisgICAgKChCKWEpLmYoKTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vcmVkdW5kYW50Q2FzdC9WaXJ0dWFsTWV0aG9kMi9leHBlY3RlZC54bWwgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9yZWR1bmRhbnRDYXN0L1ZpcnR1YWxNZXRob2QyL2V4cGVjdGVkLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YWM4NzlkCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vcmVkdW5kYW50Q2FzdC9WaXJ0dWFsTWV0aG9kMi9leHBlY3RlZC54bWwKQEAgLTAsMCArMSwzIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHByb2JsZW1zIC8+CisKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3JlZHVuZGFudENhc3QvVmlydHVhbE1ldGhvZDIvc3JjL1ZpcnR1YWxNZXRob2QyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9yZWR1bmRhbnRDYXN0L1ZpcnR1YWxNZXRob2QyL3NyYy9WaXJ0dWFsTWV0aG9kMi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFiMDI3Y2YKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9yZWR1bmRhbnRDYXN0L1ZpcnR1YWxNZXRob2QyL3NyYy9WaXJ0dWFsTWV0aG9kMi5qYXZhCkBAIC0wLDAgKzEsMTQgQEAKK2NsYXNzIEF7CisgIHByaXZhdGUgdm9pZCBmKCl7fQorfQorCitjbGFzcyBCIGV4dGVuZHMgQXsKKyAgdm9pZCBmKCl7fQorfQorCitjbGFzcyBUZXN0eworICBzdGF0aWMgZm9vKCl7CisgICAgQSBhOworICAgICgoQilhKS5mKCk7CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3JlZHVuZGFudENhc3QvVmlydHVhbE1ldGhvZDMvZXhwZWN0ZWQueG1sIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vcmVkdW5kYW50Q2FzdC9WaXJ0dWFsTWV0aG9kMy9leHBlY3RlZC54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmJmNjYwZAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3JlZHVuZGFudENhc3QvVmlydHVhbE1ldGhvZDMvZXhwZWN0ZWQueG1sCkBAIC0wLDAgKzEsOSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxwcm9ibGVtcz4KKyAgPHByb2JsZW0+CisgICAgPGZpbGU+VmlydHVhbE1ldGhvZDMuamF2YTwvZmlsZT4KKyAgICA8bGluZT40PC9saW5lPgorICAgIDxkZXNjcmlwdGlvbj5DYXN0aW5nIG8gdG8gU3RyaW5nIGlzIHJlZHVuZGFudDwvZGVzY3JpcHRpb24+CisgIDwvcHJvYmxlbT4KKzwvcHJvYmxlbXM+CisKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3JlZHVuZGFudENhc3QvVmlydHVhbE1ldGhvZDMvc3JjL1ZpcnR1YWxNZXRob2QzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9yZWR1bmRhbnRDYXN0L1ZpcnR1YWxNZXRob2QzL3NyYy9WaXJ0dWFsTWV0aG9kMy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjljMTNiMmUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9yZWR1bmRhbnRDYXN0L1ZpcnR1YWxNZXRob2QzL3NyYy9WaXJ0dWFsTWV0aG9kMy5qYXZhCkBAIC0wLDAgKzEsNiBAQAorY2xhc3MgVGVzdHsKKyAgc3RhdGljIGZvbygpeworICAgIE9iamVjdCBvOworICAgIGJvb2xlYW4gcmVzID0gKChTdHJpbmcpbykuZXF1YWxzKG51bGwpOworICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9yZWR1bmRhbnRDYXN0L2dlbmVyaWNzL0JveGluZ0luUmVmL2V4cGVjdGVkLnhtbCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3JlZHVuZGFudENhc3QvZ2VuZXJpY3MvQm94aW5nSW5SZWYvZXhwZWN0ZWQueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU4MGE4ODkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9yZWR1bmRhbnRDYXN0L2dlbmVyaWNzL0JveGluZ0luUmVmL2V4cGVjdGVkLnhtbApAQCAtMCwwICsxLDMgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8cHJvYmxlbXM+Cis8L3Byb2JsZW1zPgpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vcmVkdW5kYW50Q2FzdC9nZW5lcmljcy9Cb3hpbmdJblJlZi9zcmMvVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vcmVkdW5kYW50Q2FzdC9nZW5lcmljcy9Cb3hpbmdJblJlZi9zcmMvVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRkNGRkMmQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9yZWR1bmRhbnRDYXN0L2dlbmVyaWNzL0JveGluZ0luUmVmL3NyYy9UZXN0LmphdmEKQEAgLTAsMCArMSw3IEBACisvL1RoaXMgaXMgYSB0ZXN0IGZvciBKREtfMTUgTGFuZ3VhZ2VMZXZlbAorcHVibGljIGNsYXNzIFRlc3QgeworICAgIHZvaWQgZm9vICgpIHsKKyAgICAgICAgaW50IHggPSA0OworICAgICAgICAoKEludGVnZXIpIHgpLnRvU3RyaW5nKCk7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3JlZHVuZGFudENhc3QvZ2VuZXJpY3MvQ2FzdFRvVW5ib3VuZFdpbGRjYXJkL2V4cGVjdGVkLnhtbCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3JlZHVuZGFudENhc3QvZ2VuZXJpY3MvQ2FzdFRvVW5ib3VuZFdpbGRjYXJkL2V4cGVjdGVkLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NzA0ZDkxCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vcmVkdW5kYW50Q2FzdC9nZW5lcmljcy9DYXN0VG9VbmJvdW5kV2lsZGNhcmQvZXhwZWN0ZWQueG1sCkBAIC0wLDAgKzEsMiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxwcm9ibGVtcy8+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vcmVkdW5kYW50Q2FzdC9nZW5lcmljcy9DYXN0VG9VbmJvdW5kV2lsZGNhcmQvc3JjL1Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3JlZHVuZGFudENhc3QvZ2VuZXJpY3MvQ2FzdFRvVW5ib3VuZFdpbGRjYXJkL3NyYy9UZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmY3ZTQ2ZQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3JlZHVuZGFudENhc3QvZ2VuZXJpY3MvQ2FzdFRvVW5ib3VuZFdpbGRjYXJkL3NyYy9UZXN0LmphdmEKQEAgLTAsMCArMSw5IEBACitpbXBvcnQgamF2YS51dGlsLio7CitpbXBvcnQgamF2YS51dGlsLk1hcDsKKworY2xhc3MgVGVzdCB7CisgIHsKKyAgICBNYXA8TnVtYmVyLCBTdHJpbmc+IG1hcDEgPSBudWxsOworICAgIE1hcDxJbnRlZ2VyLCBTdHJpbmc+IG1hcDIgPSAoTWFwPEludGVnZXIsIFN0cmluZz4pIChNYXA8PywgPz4pIG1hcDE7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9yZWR1bmRhbnRDYXN0L2dlbmVyaWNzL0VudW1Db25zdGFudC9leHBlY3RlZC54bWwgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9yZWR1bmRhbnRDYXN0L2dlbmVyaWNzL0VudW1Db25zdGFudC9leHBlY3RlZC54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzhjODY1YgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3JlZHVuZGFudENhc3QvZ2VuZXJpY3MvRW51bUNvbnN0YW50L2V4cGVjdGVkLnhtbApAQCAtMCwwICsxLDkgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8cHJvYmxlbXM+CisgIDxwcm9ibGVtPgorICAgIDxmaWxlPlRlc3QuamF2YTwvZmlsZT4KKyAgICA8bGluZT4zPC9saW5lPgorICAgIDxwcm9ibGVtX2NsYXNzIHNldmVyaXR5PSJXQVJOSU5HIiBhdHRyaWJ1dGVfa2V5PSJOT1RfVVNFRF9FTEVNRU5UX0FUVFJJQlVURVMiPlJlZHVuZGFudCB0eXBlIGNhc3Q8L3Byb2JsZW1fY2xhc3M+CisgICAgPGRlc2NyaXB0aW9uPkNhc3RpbmcgJmx0O2NvZGUmZ3Q7JnF1b3Q7JnF1b3Q7Jmx0Oy9jb2RlJmd0OyB0byAmbHQ7Y29kZSZndDtTdHJpbmcmbHQ7L2NvZGUmZ3Q7IGlzIHJlZHVuZGFudDwvZGVzY3JpcHRpb24+CisgIDwvcHJvYmxlbT4KKzwvcHJvYmxlbXM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vcmVkdW5kYW50Q2FzdC9nZW5lcmljcy9FbnVtQ29uc3RhbnQvc3JjL1Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3JlZHVuZGFudENhc3QvZ2VuZXJpY3MvRW51bUNvbnN0YW50L3NyYy9UZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWRjYmRjYwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3JlZHVuZGFudENhc3QvZ2VuZXJpY3MvRW51bUNvbnN0YW50L3NyYy9UZXN0LmphdmEKQEAgLTAsMCArMSw3IEBACisKK2VudW0gVGVzdCB7CisgIEEoKFN0cmluZykgIiIpOworCisgIFRlc3QoU3RyaW5nIHMpIHsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3JlZHVuZGFudENhc3QvZ2VuZXJpY3MvSURFQTIyODk5L2V4cGVjdGVkLnhtbCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3JlZHVuZGFudENhc3QvZ2VuZXJpY3MvSURFQTIyODk5L2V4cGVjdGVkLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NzA0ZDkxCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vcmVkdW5kYW50Q2FzdC9nZW5lcmljcy9JREVBMjI4OTkvZXhwZWN0ZWQueG1sCkBAIC0wLDAgKzEsMiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxwcm9ibGVtcy8+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vcmVkdW5kYW50Q2FzdC9nZW5lcmljcy9JREVBMjI4OTkvc3JjL1dyYXBwZXJUb1ByaW1pdGl2ZUNhc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3JlZHVuZGFudENhc3QvZ2VuZXJpY3MvSURFQTIyODk5L3NyYy9XcmFwcGVyVG9QcmltaXRpdmVDYXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmE5YjIxYwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3JlZHVuZGFudENhc3QvZ2VuZXJpY3MvSURFQTIyODk5L3NyYy9XcmFwcGVyVG9QcmltaXRpdmVDYXN0LmphdmEKQEAgLTAsMCArMSwxNSBAQAorcHVibGljIGNsYXNzIFJlZHVuZGFudEludENhc3QKK3sKKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisgICAgICAgIEludGVnZXIgaSA9IDg7CisgICAgICAgIG1ldGhvZCgoaW50KWksIDEpOyAgLy8gaW50IGNhc3QgaXMgbWFya2VkIGFzIHJlZHVuZGFudAorICAgIH0KKworICAgIHN0YXRpYyB2b2lkIG1ldGhvZChPYmplY3QgbywgT2JqZWN0IG8xKSB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigidGhpcyBtZXRob2Qgd29ya3Mgb24gb2JqZWN0cyIpOworICAgIH0KKworICAgIHN0YXRpYyB2b2lkIG1ldGhvZChpbnQgaSwgaW50IGkxKSB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigidGhpcyBtZXRob2Qgd29ya3Mgb24gaW50cyIpOworICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3JlZHVuZGFudENhc3QvZ2VuZXJpY3MvSWdub3JlL2V4cGVjdGVkLnhtbCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3JlZHVuZGFudENhc3QvZ2VuZXJpY3MvSWdub3JlL2V4cGVjdGVkLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNmFlYWFkCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vcmVkdW5kYW50Q2FzdC9nZW5lcmljcy9JZ25vcmUvZXhwZWN0ZWQueG1sCkBAIC0wLDAgKzEsMTQgQEAKKzxwcm9ibGVtcz4KKyAgPHByb2JsZW0+CisgICAgPGZpbGU+VGVzdC5qYXZhPC9maWxlPgorICAgIDxsaW5lPjExPC9saW5lPgorICAgIDxwcm9ibGVtX2NsYXNzIHNldmVyaXR5PSJXQVJOSU5HIiBhdHRyaWJ1dGVfa2V5PSJOT1RfVVNFRF9FTEVNRU5UX0FUVFJJQlVURVMiPlJlZHVuZGFudCB0eXBlIGNhc3Q8L3Byb2JsZW1fY2xhc3M+CisgICAgPGRlc2NyaXB0aW9uPkNhc3RpbmcgJmx0O2NvZGUmZ3Q7dGhpcyZsdDsvY29kZSZndDsgdG8gJmx0O2NvZGUmZ3Q7Q2FzdFByZXZlbnRzTlBFRGV0ZWN0aW9uJmx0Oy9jb2RlJmd0OyBpcyByZWR1bmRhbnQ8L2Rlc2NyaXB0aW9uPgorICA8L3Byb2JsZW0+CisgIDxwcm9ibGVtPgorICAgIDxmaWxlPlN1c3BpY2lvdXMuamF2YTwvZmlsZT4KKyAgICA8bGluZT45PC9saW5lPgorICAgIDxwcm9ibGVtX2NsYXNzIHNldmVyaXR5PSJXQVJOSU5HIiBhdHRyaWJ1dGVfa2V5PSJOT1RfVVNFRF9FTEVNRU5UX0FUVFJJQlVURVMiPlJlZHVuZGFudCB0eXBlIGNhc3Q8L3Byb2JsZW1fY2xhc3M+CisgICAgPGRlc2NyaXB0aW9uPkNhc3RpbmcgJmx0O2NvZGUmZ3Q7c3RyJmx0Oy9jb2RlJmd0OyB0byAmbHQ7Y29kZSZndDtTdHJpbmcmbHQ7L2NvZGUmZ3Q7IGlzIHJlZHVuZGFudDwvZGVzY3JpcHRpb24+CisgIDwvcHJvYmxlbT4KKzwvcHJvYmxlbXM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vcmVkdW5kYW50Q2FzdC9nZW5lcmljcy9JZ25vcmUvc2NyL1N1c3BpY2lvdXMuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3JlZHVuZGFudENhc3QvZ2VuZXJpY3MvSWdub3JlL3Njci9TdXNwaWNpb3VzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDU3MTliMAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3JlZHVuZGFudENhc3QvZ2VuZXJpY3MvSWdub3JlL3Njci9TdXNwaWNpb3VzLmphdmEKQEAgLTAsMCArMSwxMiBAQAoraW1wb3J0IGphdmEudXRpbC5NYXA7CisKK3B1YmxpYyBjbGFzcyBTdXNwaWNpb3VzIHsKKyAgICBNYXA8U3RyaW5nLCBTdHJpbmc+IG1hcDsKKworICAgIHZvaWQgZihPYmplY3Qgcyl7CisgICAgICAgIFN0cmluZyBzdHIgPSAoU3RyaW5nKSBzOworICAgICAgICBtYXAucmVtb3ZlKChTdHJpbmcpcyk7CisgICAgICAgIG1hcC5yZW1vdmUoKFN0cmluZylzdHIpOworICAgIH0KKworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3JlZHVuZGFudENhc3QvZ2VuZXJpY3MvSWdub3JlL3Njci9UZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9yZWR1bmRhbnRDYXN0L2dlbmVyaWNzL0lnbm9yZS9zY3IvVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY3MTJkMzMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9yZWR1bmRhbnRDYXN0L2dlbmVyaWNzL0lnbm9yZS9zY3IvVGVzdC5qYXZhCkBAIC0wLDAgKzEsMjEgQEAKK2ltcG9ydCBvcmcuamV0YnJhaW5zLmFubm90YXRpb25zLk5vdE51bGw7CitpbXBvcnQgb3JnLmpldGJyYWlucy5hbm5vdGF0aW9ucy5OdWxsYWJsZTsKKworY2xhc3MgQ2FzdFByZXZlbnRzTlBFRGV0ZWN0aW9uIHsKKyAgICBATnVsbGFibGUgT2JqZWN0IGdldFBhcmVudCgpIHsKKyAgICAgICAgcmV0dXJuIG51bGw7CisgICAgfQorCisgICAgdm9pZCBmKCkgeworICAgICAgICAoKENoaWxkQ2FzdEltcGwpdGhpcykuZ2V0UGFyZW50KCkudG9TdHJpbmcoKTsKKyAgICAgICAgKChDYXN0UHJldmVudHNOUEVEZXRlY3Rpb24pdGhpcykuZ2V0UGFyZW50KCkudG9TdHJpbmcoKTsKKyAgICB9Cit9CisKK2NsYXNzIENoaWxkQ2FzdEltcGwgZXh0ZW5kcyBDYXN0UHJldmVudHNOUEVEZXRlY3Rpb24geworICAgIEBOb3ROdWxsCisgICAgQE92ZXJyaWRlCisgICAgT2JqZWN0IGdldFBhcmVudCgpIHsKKyAgICAgICAgcmV0dXJuIHN1cGVyLmdldFBhcmVudCgpOyAgICAvL1RvIGNoYW5nZSBib2R5IG9mIG92ZXJyaWRkZW4gbWV0aG9kcyB1c2UgRmlsZSB8IFNldHRpbmdzIHwgRmlsZSBUZW1wbGF0ZXMuCisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3JlZHVuZGFudENhc3QvZ2VuZXJpY3MvSW5mZXJlbmNlMS9leHBlY3RlZC54bWwgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9yZWR1bmRhbnRDYXN0L2dlbmVyaWNzL0luZmVyZW5jZTEvZXhwZWN0ZWQueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU4MGE4ODkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9yZWR1bmRhbnRDYXN0L2dlbmVyaWNzL0luZmVyZW5jZTEvZXhwZWN0ZWQueG1sCkBAIC0wLDAgKzEsMyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxwcm9ibGVtcz4KKzwvcHJvYmxlbXM+CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9yZWR1bmRhbnRDYXN0L2dlbmVyaWNzL0luZmVyZW5jZTEvc3JjL1Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3JlZHVuZGFudENhc3QvZ2VuZXJpY3MvSW5mZXJlbmNlMS9zcmMvVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdlMzgzNmE2Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vcmVkdW5kYW50Q2FzdC9nZW5lcmljcy9JbmZlcmVuY2UxL3NyYy9UZXN0LmphdmEKQEAgLTAsMCArMSwyMCBAQAoraW1wb3J0IGphdmEudXRpbC5NYXA7CitjbGFzcyBUZXN0MiB7CisgICAgcHVibGljIFN0cmluZyBzOworICBwdWJsaWMgdm9pZCBtYWluYShPYmplY3Qga2V5LCBNYXAgcGFyYW1ldGVycykgeworICAgICAgcyA9ICgoU3RyaW5nW10pIHBhcmFtZXRlcnMuZ2V0KGtleSkpWzBdOworICB9Cit9CisKK3B1YmxpYyBjbGFzcyBUZXN0IHsKKyAgICBzdGF0aWMgY2xhc3MgU29tZUNsYXNzIHsKKyAgICAgICAgcHVibGljIDxUPiBUIGdldFgoKSB7CisgICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgfQorICAgIH0KKworICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKyAgICAgICAgLy9jYXN0IGlzIG5lZWRlZCBmb3IgJ1N0cmluZycgdG8gYmUgaW5mZXJlZCEKKyAgICAgICAgU3lzdGVtLmdldFByb3BlcnR5KChTdHJpbmcpbmV3IFNvbWVDbGFzcygpLmdldFgoKSk7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vcmVkdW5kYW50Q2FzdC9nZW5lcmljcy9JbmZlcmVuY2UyL2V4cGVjdGVkLnhtbCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3JlZHVuZGFudENhc3QvZ2VuZXJpY3MvSW5mZXJlbmNlMi9leHBlY3RlZC54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWU5MzM0OQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3JlZHVuZGFudENhc3QvZ2VuZXJpY3MvSW5mZXJlbmNlMi9leHBlY3RlZC54bWwKQEAgLTAsMCArMSwzIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHByb2JsZW1zPgorPC9wcm9ibGVtcz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9yZWR1bmRhbnRDYXN0L2dlbmVyaWNzL0luZmVyZW5jZTIvc3JjL1Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3JlZHVuZGFudENhc3QvZ2VuZXJpY3MvSW5mZXJlbmNlMi9zcmMvVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMxMjFjMDUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9yZWR1bmRhbnRDYXN0L2dlbmVyaWNzL0luZmVyZW5jZTIvc3JjL1Rlc3QuamF2YQpAQCAtMCwwICsxLDMyIEBACitpbXBvcnQgamF2YS51dGlsLkhhc2hTZXQ7CitpbXBvcnQgamF2YS51dGlsLlNldDsKKworZmluYWwgY2xhc3MgUGFpcjxBLCBCPiB7CisgICAgcHVibGljIGZpbmFsIEEgZmlyc3Q7CisgICAgcHVibGljIGZpbmFsIEIgc2Vjb25kOworCisgICAgcHVibGljIFBhaXIoQSBmaXJzdCwgQiBzZWNvbmQpIHsKKyAgICAgICAgdGhpcy5maXJzdCA9IGZpcnN0OworICAgICAgICB0aGlzLnNlY29uZCA9IHNlY29uZDsKKyAgICB9CisKKyAgICBwdWJsaWMgZmluYWwgQSBnZXRGaXJzdCgpIHsKKyAgICAgICAgcmV0dXJuIGZpcnN0OworICAgIH0KKworICAgIHB1YmxpYyBmaW5hbCBCIGdldFNlY29uZCgpIHsKKyAgICAgICAgcmV0dXJuIHNlY29uZDsKKyAgICB9CisKKyAgICBwdWJsaWMgc3RhdGljIDxBLCBCPiBQYWlyPEEsIEI+IGNyZWF0ZShBIGZpcnN0LCBCIHNlY29uZCkgeworICAgICAgICByZXR1cm4gbmV3IFBhaXI8QSwgQj4oZmlyc3QsIHNlY29uZCk7CisgICAgfQorCit9CisKK2NsYXNzIFRlc3QgeworICAgIGZpbmFsIFNldDxTdHJpbmc+IHN0cmluZ3MgPSBuZXcgSGFzaFNldDxTdHJpbmc+KCk7CisgICAgZmluYWwgUGFpcjxTZXQ8U3RyaW5nPiwgU2V0PFN0cmluZz4+IHggPSBCb29sZWFuLlRSVUUuYm9vbGVhblZhbHVlKCkKKyAgICAgICAgICAgID8gUGFpci5jcmVhdGUoc3RyaW5ncywgc3RyaW5ncykKKyAgICAgICAgICAgIDogUGFpci5jcmVhdGUoKChTZXQ8U3RyaW5nPikgIG51bGwpLCAoU2V0PFN0cmluZz4pIG51bGwpOyAvL3RoZXNlIGNhc3RzIGFyZSBub3QgcmVkdW5kYW50Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9yZWR1bmRhbnRDYXN0L2dlbmVyaWNzL0luZmVyZW5jZTMvZXhwZWN0ZWQueG1sIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vcmVkdW5kYW50Q2FzdC9nZW5lcmljcy9JbmZlcmVuY2UzL2V4cGVjdGVkLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zODAyMzZiCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vcmVkdW5kYW50Q2FzdC9nZW5lcmljcy9JbmZlcmVuY2UzL2V4cGVjdGVkLnhtbApAQCAtMCwwICsxLDEzIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHByb2JsZW1zPgorPHByb2JsZW0+CisgIDxmaWxlPlRlc3QuamF2YTwvZmlsZT4KKyAgPGxpbmU+MzE8L2xpbmU+CisgIDxkZXNjcmlwdGlvbj5DYXN0aW5nICdudWxsJyB0byAnU2V0Jmx0O1N0cmluZyZndDsnIGlzIHJlZHVuZGFudDwvZGVzY3JpcHRpb24+Cis8L3Byb2JsZW0+Cis8cHJvYmxlbT4KKyAgPGZpbGU+VGVzdC5qYXZhPC9maWxlPgorICA8bGluZT4zMTwvbGluZT4KKyAgPGRlc2NyaXB0aW9uPkNhc3RpbmcgJ251bGwnIHRvICdTZXQmbHQ7U3RyaW5nJmd0OycgaXMgcmVkdW5kYW50PC9kZXNjcmlwdGlvbj4KKzwvcHJvYmxlbT4KKzwvcHJvYmxlbXM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vcmVkdW5kYW50Q2FzdC9nZW5lcmljcy9JbmZlcmVuY2UzL3NyYy9UZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9yZWR1bmRhbnRDYXN0L2dlbmVyaWNzL0luZmVyZW5jZTMvc3JjL1Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NGNmNmQyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vcmVkdW5kYW50Q2FzdC9nZW5lcmljcy9JbmZlcmVuY2UzL3NyYy9UZXN0LmphdmEKQEAgLTAsMCArMSwzMiBAQAoraW1wb3J0IGphdmEudXRpbC5IYXNoU2V0OworaW1wb3J0IGphdmEudXRpbC5TZXQ7CisKK2ZpbmFsIGNsYXNzIFBhaXI8QSwgQj4geworICAgIHB1YmxpYyBmaW5hbCBBIGZpcnN0OworICAgIHB1YmxpYyBmaW5hbCBCIHNlY29uZDsKKworICAgIHB1YmxpYyBQYWlyKEEgZmlyc3QsIEIgc2Vjb25kKSB7CisgICAgICAgIHRoaXMuZmlyc3QgPSBmaXJzdDsKKyAgICAgICAgdGhpcy5zZWNvbmQgPSBzZWNvbmQ7CisgICAgfQorCisgICAgcHVibGljIGZpbmFsIEEgZ2V0Rmlyc3QoKSB7CisgICAgICAgIHJldHVybiBmaXJzdDsKKyAgICB9CisKKyAgICBwdWJsaWMgZmluYWwgQiBnZXRTZWNvbmQoKSB7CisgICAgICAgIHJldHVybiBzZWNvbmQ7CisgICAgfQorCisgICAgcHVibGljIHN0YXRpYyA8QT4gUGFpcjxBLCBBPiBjcmVhdGUoQSBmaXJzdCwgQSBzZWNvbmQpIHsKKyAgICAgICAgcmV0dXJuIG5ldyBQYWlyPEEsIEE+KGZpcnN0LCBzZWNvbmQpOworICAgIH0KKworfQorCitjbGFzcyBUZXN0IHsKKyAgICBmaW5hbCBTZXQ8U3RyaW5nPiBzdHJpbmdzID0gbmV3IEhhc2hTZXQ8U3RyaW5nPigpOworICAgIGZpbmFsIFBhaXI8U2V0PFN0cmluZz4sIFNldDxTdHJpbmc+PiB4ID0gQm9vbGVhbi5UUlVFLmJvb2xlYW5WYWx1ZSgpCisgICAgICAgICAgICA/IFBhaXIuY3JlYXRlKHN0cmluZ3MsIHN0cmluZ3MpCisgICAgICAgICAgICA6IFBhaXIuY3JlYXRlKCgoU2V0PFN0cmluZz4pICBudWxsKSwgKFNldDxTdHJpbmc+KSBudWxsKTsgLy9ib3RoIGNhc3RzIGFyZSBtYXJrZWQsIGJ1dCBvbmUgaXMgcmVxdWlyZWQgZm9yIGNvcnJlY3QgaW5mZXJlbmNlCit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9yZWR1bmRhbnRDYXN0L2dlbmVyaWNzL0luZmVyZW5jZUZyb21DYXN0L2V4cGVjdGVkLnhtbCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3JlZHVuZGFudENhc3QvZ2VuZXJpY3MvSW5mZXJlbmNlRnJvbUNhc3QvZXhwZWN0ZWQueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRhYWIyYWYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9yZWR1bmRhbnRDYXN0L2dlbmVyaWNzL0luZmVyZW5jZUZyb21DYXN0L2V4cGVjdGVkLnhtbApAQCAtMCwwICsxLDEzIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHByb2JsZW1zPgorICA8cHJvYmxlbT4KKyAgICA8ZmlsZT5UZXN0LmphdmE8L2ZpbGU+CisgICAgPGxpbmU+NTwvbGluZT4KKyAgICA8ZGVzY3JpcHRpb24+Q2FzdGluZyAmbHQ7Y29kZSZndDtnZXRDb21wb25lbnQoJnF1b3Q7YmFyJnF1b3Q7KSZsdDsvY29kZSZndDsgdG8gJmx0O2NvZGUmZ3Q7QmFyJmx0Oy9jb2RlJmd0OyBpcyByZWR1bmRhbnQ8L2Rlc2NyaXB0aW9uPgorICA8L3Byb2JsZW0+CisgIDxwcm9ibGVtPgorICAgIDxmaWxlPlRlc3QuamF2YTwvZmlsZT4KKyAgICA8bGluZT42PC9saW5lPgorICAgIDxkZXNjcmlwdGlvbj5DYXN0aW5nICZsdDtjb2RlJmd0O2dldENvbXBvbmVudCgmcXVvdDtiYXImcXVvdDspJmx0Oy9jb2RlJmd0OyB0byAmbHQ7Y29kZSZndDtCYXImbHQ7L2NvZGUmZ3Q7IGlzIHJlZHVuZGFudDwvZGVzY3JpcHRpb24+CisgIDwvcHJvYmxlbT4KKzwvcHJvYmxlbXM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vcmVkdW5kYW50Q2FzdC9nZW5lcmljcy9JbmZlcmVuY2VGcm9tQ2FzdC9zcmMvVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vcmVkdW5kYW50Q2FzdC9nZW5lcmljcy9JbmZlcmVuY2VGcm9tQ2FzdC9zcmMvVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg1NTI3MjUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9yZWR1bmRhbnRDYXN0L2dlbmVyaWNzL0luZmVyZW5jZUZyb21DYXN0L3NyYy9UZXN0LmphdmEKQEAgLTAsMCArMSwxOCBAQAorY2xhc3MgVGVzdCB7CisKKyAgICB7CisgICAgICAgIGYoKEJhcikgZ2V0Q29tcG9uZW50KCJiYXIiKSk7CisgICAgICAgIGYxKChCYXIpIGdldENvbXBvbmVudCgiYmFyIikpOworICAgICAgICBCYXIgYiA9IChCYXIpIGdldENvbXBvbmVudCgiYmFyIik7CisgICAgfQorCisgICAgcHJpdmF0ZSA8SiBleHRlbmRzIEJhcj4gdm9pZCBmKEogaikge30KKworICAgIHByaXZhdGUgPEo+IHZvaWQgZjEoSiBqKSB7fQorCisgICAgcHJpdmF0ZSA8VD4gVCBnZXRDb21wb25lbnQoU3RyaW5nIG5hbWUpIHsKKyAgICAgICAgcmV0dXJuIG51bGw7CisgICAgfQorCisgICAgc3RhdGljIGNsYXNzIEJhciB7fQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vcmVkdW5kYW50Q2FzdC9nZW5lcmljcy9OdWxsSW5WYXJhcmdzUGFyYW1ldGVyL2V4cGVjdGVkLnhtbCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3JlZHVuZGFudENhc3QvZ2VuZXJpY3MvTnVsbEluVmFyYXJnc1BhcmFtZXRlci9leHBlY3RlZC54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDg5MDZiZAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3JlZHVuZGFudENhc3QvZ2VuZXJpY3MvTnVsbEluVmFyYXJnc1BhcmFtZXRlci9leHBlY3RlZC54bWwKQEAgLTAsMCArMSwxMyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxwcm9ibGVtcz4KKyAgPHByb2JsZW0+CisgICAgPGZpbGU+VGVzdC5qYXZhPC9maWxlPgorICAgIDxsaW5lPjg8L2xpbmU+CisgICAgPGRlc2NyaXB0aW9uPkNhc3RpbmcgbnVsbCB0byBDbGFzc1tdIGlzIHJlZHVuZGFudDwvZGVzY3JpcHRpb24+CisgIDwvcHJvYmxlbT4KKyAgPHByb2JsZW0+CisgICAgPGZpbGU+VGVzdC5qYXZhPC9maWxlPgorICAgIDxsaW5lPjk8L2xpbmU+CisgICAgPGRlc2NyaXB0aW9uPkNhc3RpbmcgbnVsbCB0byBDbGFzc1tdIGlzIHJlZHVuZGFudDwvZGVzY3JpcHRpb24+CisgIDwvcHJvYmxlbT4KKzwvcHJvYmxlbXM+CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9yZWR1bmRhbnRDYXN0L2dlbmVyaWNzL051bGxJblZhcmFyZ3NQYXJhbWV0ZXIvc3JjL1Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3JlZHVuZGFudENhc3QvZ2VuZXJpY3MvTnVsbEluVmFyYXJnc1BhcmFtZXRlci9zcmMvVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMxN2QyNjQ3Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vcmVkdW5kYW50Q2FzdC9nZW5lcmljcy9OdWxsSW5WYXJhcmdzUGFyYW1ldGVyL3NyYy9UZXN0LmphdmEKQEAgLTAsMCArMSwxMSBAQAorY2xhc3MgVGVzdCB7CisgIHZvaWQgZihDbGFzcy4uLiBjbGFzc2VzKSB7CisgIH0KKworICB2b2lkIGcoKSB7CisgICAgZigoKENsYXNzW10pbnVsbCkpOworICAgIGYoKChDbGFzcyludWxsKSk7CisgICAgZigoKENsYXNzKW51bGwpLAorICAgICAgKChDbGFzcyludWxsKSk7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9yZWR1bmRhbnRDYXN0L2dlbmVyaWNzL1Jhd0Nhc3QvZXhwZWN0ZWQueG1sIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vcmVkdW5kYW50Q2FzdC9nZW5lcmljcy9SYXdDYXN0L2V4cGVjdGVkLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NzA0ZDkxCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vcmVkdW5kYW50Q2FzdC9nZW5lcmljcy9SYXdDYXN0L2V4cGVjdGVkLnhtbApAQCAtMCwwICsxLDIgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8cHJvYmxlbXMvPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3JlZHVuZGFudENhc3QvZ2VuZXJpY3MvUmF3Q2FzdC9zcmMvVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vcmVkdW5kYW50Q2FzdC9nZW5lcmljcy9SYXdDYXN0L3NyYy9UZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzM4YTg1NQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3JlZHVuZGFudENhc3QvZ2VuZXJpY3MvUmF3Q2FzdC9zcmMvVGVzdC5qYXZhCkBAIC0wLDAgKzEsMjEgQEAKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuTWFwOworaW1wb3J0IGphdmEudXRpbC5Qcm9wZXJ0aWVzOworCitwdWJsaWMgY2xhc3MgTWFpbiB7CisgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIFByb3BlcnRpZXMgcHJvcGVydGllcyA9IG5ldyBQcm9wZXJ0aWVzKCk7CisKKyAgICAgICAgTWFwPFN0cmluZywgU3RyaW5nPiBtYXAgPSAoTWFwKSBwcm9wZXJ0aWVzOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4obWFwKTsKKyAgICB9Cit9CisKK2ludGVyZmFjZSBJIHt9CitjbGFzcyBDIGltcGxlbWVudHMgSSB7fQorY2xhc3MgVSB7CisgIHZvaWQgZm9vKCkgeworICAgIExpc3Q8Qz4gbGlzdE9mQyA9IG51bGw7CisgICAgTGlzdDxJPiBsaXN0T2ZJID0gKExpc3QpIGxpc3RPZkM7CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3JlZHVuZGFudENhc3QvZ2VuZXJpY3MvUmF3Q2FzdDEvZXhwZWN0ZWQueG1sIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vcmVkdW5kYW50Q2FzdC9nZW5lcmljcy9SYXdDYXN0MS9leHBlY3RlZC54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDcwNGQ5MQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3JlZHVuZGFudENhc3QvZ2VuZXJpY3MvUmF3Q2FzdDEvZXhwZWN0ZWQueG1sCkBAIC0wLDAgKzEsMiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxwcm9ibGVtcy8+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vcmVkdW5kYW50Q2FzdC9nZW5lcmljcy9SYXdDYXN0MS9zcmMvVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vcmVkdW5kYW50Q2FzdC9nZW5lcmljcy9SYXdDYXN0MS9zcmMvVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZmMzAyZGUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9yZWR1bmRhbnRDYXN0L2dlbmVyaWNzL1Jhd0Nhc3QxL3NyYy9UZXN0LmphdmEKQEAgLTAsMCArMSwxMCBAQAorY2xhc3MgVGVzdCB7CisgIHsKKyAgICBjbGFzcyBUeXBlZFF1ZXJ5PFQ+IHt9CisgICAgY2xhc3MgVGVtcG9yYWxEYXRhRFRPPEs+IHt9CisgICAgY2xhc3MgRk9MREVSX0lEIHt9CisKKyAgICBUeXBlZFF1ZXJ5PFRlbXBvcmFsRGF0YURUTz4gaCA9IG51bGw7CisgICAgVHlwZWRRdWVyeTxUZW1wb3JhbERhdGFEVE88Rk9MREVSX0lEPj4gdHlwZWRRdWVyeSA9IChUeXBlZFF1ZXJ5PFRlbXBvcmFsRGF0YURUTzxGT0xERVJfSUQ+PikgKFR5cGVkUXVlcnk8Pz4paDsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3JlZHVuZGFudENhc3QvZ2VuZXJpY3MvUmF3Q2FzdHNUb0F2b2lkSW5jb21wYXRpYmlsaXR5L2V4cGVjdGVkLnhtbCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3JlZHVuZGFudENhc3QvZ2VuZXJpY3MvUmF3Q2FzdHNUb0F2b2lkSW5jb21wYXRpYmlsaXR5L2V4cGVjdGVkLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNjNjOTI1Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vcmVkdW5kYW50Q2FzdC9nZW5lcmljcy9SYXdDYXN0c1RvQXZvaWRJbmNvbXBhdGliaWxpdHkvZXhwZWN0ZWQueG1sCkBAIC0wLDAgKzEsMiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxwcm9ibGVtcy8+CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9yZWR1bmRhbnRDYXN0L2dlbmVyaWNzL1Jhd0Nhc3RzVG9Bdm9pZEluY29tcGF0aWJpbGl0eS9zcmMvQ2FzdENhc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3JlZHVuZGFudENhc3QvZ2VuZXJpY3MvUmF3Q2FzdHNUb0F2b2lkSW5jb21wYXRpYmlsaXR5L3NyYy9DYXN0Q2FzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVmODFkZWYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9yZWR1bmRhbnRDYXN0L2dlbmVyaWNzL1Jhd0Nhc3RzVG9Bdm9pZEluY29tcGF0aWJpbGl0eS9zcmMvQ2FzdENhc3QuamF2YQpAQCAtMCwwICsxLDEzIEBACitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKKworY2xhc3MgUmVkdW5kYW50Q2FzdHMgeworICAgIExpc3Q8VHJhbnNsYXRpbmdDb21waWxlcj4gbXlUcmFuc2xhdG9yczsKKyAgICB2b2lkIHQoKSB7CisgICAgICAgIGIoKExpc3Q8Q29tcGlsZXI+KSAoTGlzdClteVRyYW5zbGF0b3JzKTsKKyAgICB9CisKKyAgICB2b2lkIGIoTGlzdDxDb21waWxlcj4gbCl7fQorfQoraW50ZXJmYWNlIENvbXBpbGVye30KK2ludGVyZmFjZSBUcmFuc2xhdGluZ0NvbXBpbGVyIGV4dGVuZHMgQ29tcGlsZXJ7fQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vcmVkdW5kYW50Q2FzdC9nZW5lcmljcy9SYXdDYXN0c1RvQXZvaWRJbmNvbXBhdGliaWxpdHkvc3JjL1JldHVyblZhbHVlLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9yZWR1bmRhbnRDYXN0L2dlbmVyaWNzL1Jhd0Nhc3RzVG9Bdm9pZEluY29tcGF0aWJpbGl0eS9zcmMvUmV0dXJuVmFsdWUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMzA4NzBiCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vcmVkdW5kYW50Q2FzdC9nZW5lcmljcy9SYXdDYXN0c1RvQXZvaWRJbmNvbXBhdGliaWxpdHkvc3JjL1JldHVyblZhbHVlLmphdmEKQEAgLTAsMCArMSwxNiBAQAoraW50ZXJmYWNlIEdlbmVyaWNWYWx1ZTxUPiB7CisgICAgVCBnZXRWYWx1ZSgpOworfQorCitpbnRlcmZhY2UgR2VuZXJpY0F0dFZhbHVlPFQ+IGV4dGVuZHMgR2VuZXJpY1ZhbHVlPFQ+IHsKK30KKworaW50ZXJmYWNlIFByb3BlcnR5IHsKKyAgICBHZW5lcmljQXR0VmFsdWU8T2JqZWN0PiBnZXRWYWx1ZSgpOworfQorCitjbGFzcyBSZWRDYXN0IHsKKyAgICBwdWJsaWMgR2VuZXJpY1ZhbHVlPFN0cmluZz4gZ2V0RGF0YVNvdXJjZU5hbWUoUHJvcGVydHkgcHJvcGVydHkpIHsKKyAgICAgICAgcmV0dXJuICAoR2VuZXJpY1ZhbHVlKSAgcHJvcGVydHkuZ2V0VmFsdWUoKTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9yZWR1bmRhbnRDYXN0L2dlbmVyaWNzL1R5cGVQYXJhbWV0ZXJBY2Nlc3NDaGVja3NKYXZhNy9leHBlY3RlZC54bWwgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9yZWR1bmRhbnRDYXN0L2dlbmVyaWNzL1R5cGVQYXJhbWV0ZXJBY2Nlc3NDaGVja3NKYXZhNy9leHBlY3RlZC54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDcwNGQ5MQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3JlZHVuZGFudENhc3QvZ2VuZXJpY3MvVHlwZVBhcmFtZXRlckFjY2Vzc0NoZWNrc0phdmE3L2V4cGVjdGVkLnhtbApAQCAtMCwwICsxLDIgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8cHJvYmxlbXMvPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3JlZHVuZGFudENhc3QvZ2VuZXJpY3MvVHlwZVBhcmFtZXRlckFjY2Vzc0NoZWNrc0phdmE3L3NyYy9UeXBlUGFyYW1ldGVyQWNjZXNzQ2hlY2tzSmF2YTcuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3JlZHVuZGFudENhc3QvZ2VuZXJpY3MvVHlwZVBhcmFtZXRlckFjY2Vzc0NoZWNrc0phdmE3L3NyYy9UeXBlUGFyYW1ldGVyQWNjZXNzQ2hlY2tzSmF2YTcuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MmUyNzYzCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vcmVkdW5kYW50Q2FzdC9nZW5lcmljcy9UeXBlUGFyYW1ldGVyQWNjZXNzQ2hlY2tzSmF2YTcvc3JjL1R5cGVQYXJhbWV0ZXJBY2Nlc3NDaGVja3NKYXZhNy5qYXZhCkBAIC0wLDAgKzEsNyBAQAorcHVibGljIGFic3RyYWN0IGNsYXNzIEZvbzxUIGV4dGVuZHMgRm9vPFQ+PiB7CisgIHByaXZhdGUgaW50IGZpZWxkOworCisgIHB1YmxpYyBpbnQgYmFyKFQgdCl7CisgICAgcmV0dXJuICgoRm9vPFQ+KXQpLmZpZWxkOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vcmVkdW5kYW50Q2FzdC9nZW5lcmljcy9XcmFwcGVyVG9QcmltaXRpdmVDYXN0L2V4cGVjdGVkLnhtbCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3JlZHVuZGFudENhc3QvZ2VuZXJpY3MvV3JhcHBlclRvUHJpbWl0aXZlQ2FzdC9leHBlY3RlZC54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzU3NGNjNwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3JlZHVuZGFudENhc3QvZ2VuZXJpY3MvV3JhcHBlclRvUHJpbWl0aXZlQ2FzdC9leHBlY3RlZC54bWwKQEAgLTAsMCArMSw0OCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxwcm9ibGVtcz4KKyAgPHByb2JsZW0+CisgICAgPGZpbGU+V3JhcHBlclRvUHJpbWl0aXZlQ2FzdC5qYXZhPC9maWxlPgorICAgIDxsaW5lPjg8L2xpbmU+CisgICAgPHByb2JsZW1fY2xhc3Mgc2V2ZXJpdHk9IldBUk5JTkciIGF0dHJpYnV0ZV9rZXk9Ik5PVF9VU0VEX0VMRU1FTlRfQVRUUklCVVRFUyI+UmVkdW5kYW50IHR5cGUgY2FzdDwvcHJvYmxlbV9jbGFzcz4KKyAgICA8ZGVzY3JpcHRpb24+Q2FzdGluZyAmbHQ7Y29kZSZndDtKJmx0Oy9jb2RlJmd0OyB0byAmbHQ7Y29kZSZndDtpbnQmbHQ7L2NvZGUmZ3Q7IGlzIHJlZHVuZGFudDwvZGVzY3JpcHRpb24+CisgIDwvcHJvYmxlbT4KKworICA8cHJvYmxlbT4KKyAgICA8ZmlsZT5XcmFwcGVyVG9QcmltaXRpdmVDYXN0LmphdmE8L2ZpbGU+CisgICAgPGxpbmU+OTwvbGluZT4KKyAgICA8cHJvYmxlbV9jbGFzcyBzZXZlcml0eT0iV0FSTklORyIgYXR0cmlidXRlX2tleT0iTk9UX1VTRURfRUxFTUVOVF9BVFRSSUJVVEVTIj5SZWR1bmRhbnQgdHlwZSBjYXN0PC9wcm9ibGVtX2NsYXNzPgorICAgIDxkZXNjcmlwdGlvbj5DYXN0aW5nICZsdDtjb2RlJmd0O0kmbHQ7L2NvZGUmZ3Q7IHRvICZsdDtjb2RlJmd0O2ludCZsdDsvY29kZSZndDsgaXMgcmVkdW5kYW50PC9kZXNjcmlwdGlvbj4KKyAgPC9wcm9ibGVtPgorCisgIDxwcm9ibGVtPgorICAgIDxmaWxlPldyYXBwZXJUb1ByaW1pdGl2ZUNhc3QuamF2YTwvZmlsZT4KKyAgICA8bGluZT4xMjwvbGluZT4KKyAgICA8cHJvYmxlbV9jbGFzcyBzZXZlcml0eT0iV0FSTklORyIgYXR0cmlidXRlX2tleT0iTk9UX1VTRURfRUxFTUVOVF9BVFRSSUJVVEVTIj5SZWR1bmRhbnQgdHlwZSBjYXN0PC9wcm9ibGVtX2NsYXNzPgorICAgIDxkZXNjcmlwdGlvbj5DYXN0aW5nICZsdDtjb2RlJmd0O3AmbHQ7L2NvZGUmZ3Q7IHRvICZsdDtjb2RlJmd0O0ludGVnZXImbHQ7L2NvZGUmZ3Q7IGlzIHJlZHVuZGFudDwvZGVzY3JpcHRpb24+CisgIDwvcHJvYmxlbT4KKworICA8cHJvYmxlbT4KKyAgICA8ZmlsZT5XcmFwcGVyVG9QcmltaXRpdmVDYXN0LmphdmE8L2ZpbGU+CisgICAgPGxpbmU+MTU8L2xpbmU+CisgICAgPHByb2JsZW1fY2xhc3Mgc2V2ZXJpdHk9IldBUk5JTkciIGF0dHJpYnV0ZV9rZXk9Ik5PVF9VU0VEX0VMRU1FTlRfQVRUUklCVVRFUyI+UmVkdW5kYW50IHR5cGUgY2FzdDwvcHJvYmxlbV9jbGFzcz4KKyAgICA8ZGVzY3JpcHRpb24+Q2FzdGluZyAmbHQ7Y29kZSZndDtwJmx0Oy9jb2RlJmd0OyB0byAmbHQ7Y29kZSZndDtJbnRlZ2VyJmx0Oy9jb2RlJmd0OyBpcyByZWR1bmRhbnQ8L2Rlc2NyaXB0aW9uPgorICA8L3Byb2JsZW0+CisKKworICA8cHJvYmxlbT4KKyAgICA8ZmlsZT5XcmFwcGVyVG9QcmltaXRpdmVDYXN0LmphdmE8L2ZpbGU+CisgICAgPGxpbmU+MjQ8L2xpbmU+CisgICAgPHByb2JsZW1fY2xhc3Mgc2V2ZXJpdHk9IldBUk5JTkciIGF0dHJpYnV0ZV9rZXk9Ik5PVF9VU0VEX0VMRU1FTlRfQVRUUklCVVRFUyI+UmVkdW5kYW50IHR5cGUgY2FzdDwvcHJvYmxlbV9jbGFzcz4KKyAgICA8ZGVzY3JpcHRpb24+Q2FzdGluZyAmbHQ7Y29kZSZndDtsbnVtYmVyJmx0Oy9jb2RlJmd0OyB0byAmbHQ7Y29kZSZndDtsb25nJmx0Oy9jb2RlJmd0OyBpcyByZWR1bmRhbnQ8L2Rlc2NyaXB0aW9uPgorICA8L3Byb2JsZW0+CisKKworICA8cHJvYmxlbT4KKyAgICA8ZmlsZT5XcmFwcGVyVG9QcmltaXRpdmVDYXN0LmphdmE8L2ZpbGU+CisgICAgPGxpbmU+MjQ8L2xpbmU+CisgICAgPHByb2JsZW1fY2xhc3Mgc2V2ZXJpdHk9IldBUk5JTkciIGF0dHJpYnV0ZV9rZXk9Ik5PVF9VU0VEX0VMRU1FTlRfQVRUUklCVVRFUyI+UmVkdW5kYW50IHR5cGUgY2FzdDwvcHJvYmxlbV9jbGFzcz4KKyAgICA8ZGVzY3JpcHRpb24+Q2FzdGluZyAmbHQ7Y29kZSZndDtsbnVtYmVyJmx0Oy9jb2RlJmd0OyB0byAmbHQ7Y29kZSZndDtsb25nJmx0Oy9jb2RlJmd0OyBpcyByZWR1bmRhbnQ8L2Rlc2NyaXB0aW9uPgorICA8L3Byb2JsZW0+CisKKzwvcHJvYmxlbXM+CisKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3JlZHVuZGFudENhc3QvZ2VuZXJpY3MvV3JhcHBlclRvUHJpbWl0aXZlQ2FzdC9zcmMvV3JhcHBlclRvUHJpbWl0aXZlQ2FzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vcmVkdW5kYW50Q2FzdC9nZW5lcmljcy9XcmFwcGVyVG9QcmltaXRpdmVDYXN0L3NyYy9XcmFwcGVyVG9QcmltaXRpdmVDYXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmEzZTc3MwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3JlZHVuZGFudENhc3QvZ2VuZXJpY3MvV3JhcHBlclRvUHJpbWl0aXZlQ2FzdC9zcmMvV3JhcHBlclRvUHJpbWl0aXZlQ2FzdC5qYXZhCkBAIC0wLDAgKzEsMzIgQEAKK3B1YmxpYyBjbGFzcyBNYWluIHsKKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisgICAgICAgIEludGVnZXIgSiA9IDQ7CisgICAgICAgIEludGVnZXIgSSA9IG5ldyBJbnRlZ2VyKDQpOworCisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihJID09IEopOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oKGludCkgSSA9PSBKKTsKKyAgICAgICAgaW50IGogPSAoaW50KUo7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigoaW50KSBJID09IGopOworCisgICAgICAgIGludCBwID0gNTU1NTU1OworICAgICAgICBJbnRlZ2VyIFcgPSAoSW50ZWdlcikgcDsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKChJbnRlZ2VyKSBwID09IFcpOworICAgICAgICBpbnQgdyA9IFc7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigoSW50ZWdlcikgcCA9PSB3KTsKKworICAgICAgICBJbnRlZ2VyIHRlc3QgPSAxMDsKKyAgICAgICAgZG91YmxlIGQgPSAoKGRvdWJsZSl0ZXN0LzEwMCk7CisKKyAgICAgICAgRG91YmxlIG51bWJlciA9IERvdWJsZS52YWx1ZU9mKDMpOworICAgICAgICBsb25nIGludGVnZXJQYXJ0ID0gKGxvbmcpIChkb3VibGUpIG51bWJlcjsKKworICAgICAgICBMb25nIGxudW1iZXIgPSBMb25nLnZhbHVlT2YoMyk7CisgICAgICAgIGxvbmcgaW50ZWdlclBhcnRMID0gKGxvbmcpIChsb25nKSBsbnVtYmVyOworICAgIH0KK30KKworY2xhc3MgRm9vPFQ+IHsKKyAgVCBmb28oKSB7CisgICAgcmV0dXJuIChUKShPYmplY3QpMTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vcmVkdW5kYW50Q2FzdC9sYW1iZGEvRXhwZWN0ZWRTdXBlcnR5cGUvZXhwZWN0ZWQueG1sIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vcmVkdW5kYW50Q2FzdC9sYW1iZGEvRXhwZWN0ZWRTdXBlcnR5cGUvZXhwZWN0ZWQueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVlOTMzNDkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9yZWR1bmRhbnRDYXN0L2xhbWJkYS9FeHBlY3RlZFN1cGVydHlwZS9leHBlY3RlZC54bWwKQEAgLTAsMCArMSwzIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHByb2JsZW1zPgorPC9wcm9ibGVtcz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9yZWR1bmRhbnRDYXN0L2xhbWJkYS9FeHBlY3RlZFN1cGVydHlwZS9zcmMvVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vcmVkdW5kYW50Q2FzdC9sYW1iZGEvRXhwZWN0ZWRTdXBlcnR5cGUvc3JjL1Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NzgzMmU0Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vcmVkdW5kYW50Q2FzdC9sYW1iZGEvRXhwZWN0ZWRTdXBlcnR5cGUvc3JjL1Rlc3QuamF2YQpAQCAtMCwwICsxLDMxIEBACisvKgorICogQ29weXJpZ2h0IDIwMDAtMjAxMiBKZXRCcmFpbnMgcy5yLm8uCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworcHVibGljIGNsYXNzIFRlc3QgeworICBpbnRlcmZhY2UgSSB7CisgIH0KKworICBpbnRlcmZhY2UgQmFyIGV4dGVuZHMgSSB7CisgICAgaW50IGNvbXBhcmUoU3RyaW5nIG8xLCBTdHJpbmcgbzIpOworICB9CisKKyAgeworICAgIEkgYmFyMiA9IChCYXIpIChvMSwgbzIpIC0+IDA7CisgICAgZygoQmFyKSAobzEsIG8yKSAtPiAwKTsKKyAgICAoKEJhcikgKG8xLCBvMikgLT4gMCkuZ2V0Q2xhc3MoKTsKKyAgfQorCisgIHZvaWQgZyhJIGkpe30KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9yZWR1bmRhbnRDYXN0L2xhbWJkYS9MYW1iZGFDb250ZXh0L2V4cGVjdGVkLnhtbCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3JlZHVuZGFudENhc3QvbGFtYmRhL0xhbWJkYUNvbnRleHQvZXhwZWN0ZWQueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUzNzNjZGMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9yZWR1bmRhbnRDYXN0L2xhbWJkYS9MYW1iZGFDb250ZXh0L2V4cGVjdGVkLnhtbApAQCAtMCwwICsxLDggQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8cHJvYmxlbXM+CisgIDxwcm9ibGVtPgorICAgIDxmaWxlPlRlc3QuamF2YTwvZmlsZT4KKyAgICA8bGluZT43PC9saW5lPgorICAgIDxkZXNjcmlwdGlvbj5DYXN0aW5nICZsdDtjb2RlJmd0O3MgLSZndDsgcy5lbmRzV2l0aCgmcXVvdDsuamF2YSZxdW90OykmbHQ7L2NvZGUmZ3Q7IHRvICZsdDtjb2RlJmd0O0kmbHQ7L2NvZGUmZ3Q7IGlzIHJlZHVuZGFudDwvZGVzY3JpcHRpb24+CisgIDwvcHJvYmxlbT4KKzwvcHJvYmxlbXM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vcmVkdW5kYW50Q2FzdC9sYW1iZGEvTGFtYmRhQ29udGV4dC9zcmMvVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vcmVkdW5kYW50Q2FzdC9sYW1iZGEvTGFtYmRhQ29udGV4dC9zcmMvVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUxMGQxODQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9yZWR1bmRhbnRDYXN0L2xhbWJkYS9MYW1iZGFDb250ZXh0L3NyYy9UZXN0LmphdmEKQEAgLTAsMCArMSwxMCBAQAorY2xhc3MgVGVzdCB7CisgIGludGVyZmFjZSBJIHsKKyAgICBib29sZWFuIGZvbyhTdHJpbmcgcyk7CisgIH0KKyAgeworICAgICgoSSlzIC0+IHMuZW5kc1dpdGgoIi5qYXZhIikpLmdldENsYXNzKCk7CisgICAgSSBpID0gKEkpcyAtPiBzLmVuZHNXaXRoKCIuamF2YSIpOworICAgIAorICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9yZWR1bmRhbnRDYXN0L2xhbWJkYS9NZXRob2RSZWZDb250ZXh0L2V4cGVjdGVkLnhtbCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3JlZHVuZGFudENhc3QvbGFtYmRhL01ldGhvZFJlZkNvbnRleHQvZXhwZWN0ZWQueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ3MDRkOTEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9yZWR1bmRhbnRDYXN0L2xhbWJkYS9NZXRob2RSZWZDb250ZXh0L2V4cGVjdGVkLnhtbApAQCAtMCwwICsxLDIgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8cHJvYmxlbXMvPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3JlZHVuZGFudENhc3QvbGFtYmRhL01ldGhvZFJlZkNvbnRleHQvc3JjL1Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3JlZHVuZGFudENhc3QvbGFtYmRhL01ldGhvZFJlZkNvbnRleHQvc3JjL1Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iODJmMmNhCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vcmVkdW5kYW50Q2FzdC9sYW1iZGEvTWV0aG9kUmVmQ29udGV4dC9zcmMvVGVzdC5qYXZhCkBAIC0wLDAgKzEsMTMgQEAKK2NsYXNzIFRlc3QgeworICB7CisgICAgICAoKEJhcikgVGVzdDo6bGVuZ3RoKS5fKCIiKTsKKyAgfQorCisgIHB1YmxpYyBzdGF0aWMgSW50ZWdlciBsZW5ndGgoU3RyaW5nIHMpIHsKKyAgICByZXR1cm4gcy5sZW5ndGgoKTsKKyAgfQorCisgIGludGVyZmFjZSBCYXIgeworICAgIEludGVnZXIgXyhTdHJpbmcgcyk7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9yZWR1bmRhbnRTdXBwcmVzcy9kZWZhdWx0RmlsZS9leHBlY3RlZC54bWwgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9yZWR1bmRhbnRTdXBwcmVzcy9kZWZhdWx0RmlsZS9leHBlY3RlZC54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmZkN2Y3YQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3JlZHVuZGFudFN1cHByZXNzL2RlZmF1bHRGaWxlL2V4cGVjdGVkLnhtbApAQCAtMCwwICsxLDYzIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHByb2JsZW1zPgorCisgIDxwcm9ibGVtPgorICAgIDxmaWxlPlguamF2YTwvZmlsZT4KKyAgICA8bGluZT40PC9saW5lPgorICAgIDxwcm9ibGVtX2NsYXNzPlJlZHVuZGFudCBzdXBwcmVzc2lvbjwvcHJvYmxlbV9jbGFzcz4KKyAgICA8ZGVzY3JpcHRpb24+UmVkdW5kYW50IHN1cHByZXNzaW9uPC9kZXNjcmlwdGlvbj4KKyAgICA8ZW50cnlfcG9pbnQgVFlQRT0ibWV0aG9kIiBGUU5BTUU9InguUyB2b2lkIGYoKSIgLz4KKyAgPC9wcm9ibGVtPgorCisgIDxwcm9ibGVtPgorICAgIDxmaWxlPlguamF2YTwvZmlsZT4KKyAgICA8bGluZT40MjwvbGluZT4KKyAgICA8cHJvYmxlbV9jbGFzcz5SZWR1bmRhbnQgc3VwcHJlc3Npb248L3Byb2JsZW1fY2xhc3M+CisgICAgPGRlc2NyaXB0aW9uPlJlZHVuZGFudCBzdXBwcmVzc2lvbjwvZGVzY3JpcHRpb24+CisgICAgPGVudHJ5X3BvaW50IFRZUEU9Im1ldGhvZCIgRlFOQU1FPSJ4LlMgdm9pZCBqKCkiIC8+CisgIDwvcHJvYmxlbT4KKworICA8cHJvYmxlbT4KKyAgICA8ZmlsZT5YLmphdmE8L2ZpbGU+CisgICAgPGxpbmU+NTM8L2xpbmU+CisgICAgPHByb2JsZW1fY2xhc3M+UmVkdW5kYW50IHN1cHByZXNzaW9uPC9wcm9ibGVtX2NsYXNzPgorICAgIDxkZXNjcmlwdGlvbj5SZWR1bmRhbnQgc3VwcHJlc3Npb248L2Rlc2NyaXB0aW9uPgorICAgICA8ZW50cnlfcG9pbnQgVFlQRT0iZmllbGQiIEZRTkFNRT0ieC5TJDNzcyBzIiAvPgorICA8L3Byb2JsZW0+CisKKworICA8cHJvYmxlbT4KKyAgICA8ZmlsZT5YLmphdmE8L2ZpbGU+CisgICAgPGxpbmU+MTk8L2xpbmU+CisgICAgPHByb2JsZW1fY2xhc3M+UmVkdW5kYW50IHN1cHByZXNzaW9uPC9wcm9ibGVtX2NsYXNzPgorICAgIDxkZXNjcmlwdGlvbj5SZWR1bmRhbnQgc3VwcHJlc3Npb248L2Rlc2NyaXB0aW9uPgorICAgIDxlbnRyeV9wb2ludCBUWVBFPSJtZXRob2QiIEZRTkFNRT0ieC5TIHZvaWQgaCgpIiAvPgorICA8L3Byb2JsZW0+CisKKworICA8cHJvYmxlbT4KKyAgICA8ZmlsZT5YLmphdmE8L2ZpbGU+CisgICAgPGxpbmU+MzA8L2xpbmU+CisgICAgPHByb2JsZW1fY2xhc3M+UmVkdW5kYW50IHN1cHByZXNzaW9uPC9wcm9ibGVtX2NsYXNzPgorICAgIDxkZXNjcmlwdGlvbj5SZWR1bmRhbnQgc3VwcHJlc3Npb248L2Rlc2NyaXB0aW9uPgorICAgIDxlbnRyeV9wb2ludCBUWVBFPSJjbGFzcyIgRlFOQU1FPSJ4LlMkMXNzIiAvPgorICA8L3Byb2JsZW0+CisKKworICA8cHJvYmxlbT4KKyAgICA8ZmlsZT5YLmphdmE8L2ZpbGU+CisgICAgPGxpbmU+MTE8L2xpbmU+CisgICAgPHByb2JsZW1fY2xhc3M+UmVkdW5kYW50IHN1cHByZXNzaW9uPC9wcm9ibGVtX2NsYXNzPgorICAgIDxkZXNjcmlwdGlvbj5SZWR1bmRhbnQgc3VwcHJlc3Npb248L2Rlc2NyaXB0aW9uPgorICAgIDxlbnRyeV9wb2ludCBUWVBFPSJtZXRob2QiIEZRTkFNRT0ieC5TIHZvaWQgZygpIiAvPgorICA8L3Byb2JsZW0+CisKKyAgPHByb2JsZW0+CisgICAgPGZpbGU+WC5qYXZhPC9maWxlPgorICAgIDxsaW5lPjY3PC9saW5lPgorICAgIDxwcm9ibGVtX2NsYXNzPlJlZHVuZGFudCBzdXBwcmVzc2lvbjwvcHJvYmxlbV9jbGFzcz4KKyAgICA8ZGVzY3JpcHRpb24+UmVkdW5kYW50IHN1cHByZXNzaW9uPC9kZXNjcmlwdGlvbj4KKyAgICA8ZW50cnlfcG9pbnQgVFlQRT0ibWV0aG9kIiBGUU5BTUU9InguUyB2b2lkIGZvbzEoKSIgLz4KKyAgPC9wcm9ibGVtPgorCis8L3Byb2JsZW1zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3JlZHVuZGFudFN1cHByZXNzL2RlZmF1bHRGaWxlL3NyYy94L1guamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3JlZHVuZGFudFN1cHByZXNzL2RlZmF1bHRGaWxlL3NyYy94L1guamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NWUxYTYzCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vcmVkdW5kYW50U3VwcHJlc3MvZGVmYXVsdEZpbGUvc3JjL3gvWC5qYXZhCkBAIC0wLDAgKzEsNjkgQEAKK3BhY2thZ2UgeDsKKworY2xhc3MgUyB7CisgICAgcHVibGljIHZvaWQgZigpIHsKKyAgICAgICAgLy9ub2luc3BlY3Rpb24gSGFyZENvZGVkU3RyaW5nTGl0ZXJhbAorICAgICAgICBTdHJpbmcgcz1udWxsOworICAgICAgICAvL25vaW5zcGVjdGlvbiBIYXJkQ29kZWRTdHJpbmdMaXRlcmFsCisgICAgICAgIFN0cmluZyBzMj0ic3Nzc3NzcyI7CisgICAgfQorICAgIEBTdXBwcmVzc1dhcm5pbmdzKHsiSGFyZENvZGVkU3RyaW5nTGl0ZXJhbCJ9KQorICAgIHZvaWQgZygpIHsKKyAgICAgICAgU3RyaW5nIHMgPSBudWxsOworICAgIH0KKyAgICBAU3VwcHJlc3NXYXJuaW5ncyh7IkhhcmRDb2RlZFN0cmluZ0xpdGVyYWwifSkKKyAgICB2b2lkIGcyKCkgeworICAgICAgICBTdHJpbmcgcyA9ICJzc3Nzc3NzIjsKKyAgICB9CisKKyAgICB2b2lkIGgoKSB7CisgICAgICAgIEBTdXBwcmVzc1dhcm5pbmdzKHsiSGFyZENvZGVkU3RyaW5nTGl0ZXJhbCJ9KQorICAgICAgICBTdHJpbmcgcyA9IG51bGw7CisgICAgfQorICAgIHZvaWQgaDIoKSB7CisgICAgICAgIEBTdXBwcmVzc1dhcm5pbmdzKHsiSGFyZENvZGVkU3RyaW5nTGl0ZXJhbCJ9KQorICAgICAgICBTdHJpbmcgcyA9ICJzc3Nzc3NzIjsKKyAgICB9CisKKyAgICB2b2lkIGkoKSB7CisgICAgICAgIEBTdXBwcmVzc1dhcm5pbmdzKHsiSGFyZENvZGVkU3RyaW5nTGl0ZXJhbCJ9KQorICAgICAgICBjbGFzcyBzcyB7CisgICAgICAgICAgU3RyaW5nIHMgPSBudWxsOworICAgICAgICB9CisgICAgfQorICAgIHZvaWQgaTIoKSB7CisgICAgICAgIEBTdXBwcmVzc1dhcm5pbmdzKHsiSGFyZENvZGVkU3RyaW5nTGl0ZXJhbCJ9KQorICAgICAgICBjbGFzcyBzcyB7CisgICAgICAgICAgU3RyaW5nIHMgPSAic3Nzc3NzcyI7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKiogQG5vaW5zcGVjdGlvbiBIYXJkQ29kZWRTdHJpbmdMaXRlcmFsICovCisgICAgdm9pZCBqKCkgeworICAgICAgICBTdHJpbmcgcyA9IG51bGw7CisgICAgfQorICAgIC8qKiBAbm9pbnNwZWN0aW9uIEhhcmRDb2RlZFN0cmluZ0xpdGVyYWwgKi8KKyAgICB2b2lkIGoyKCkgeworICAgICAgICBTdHJpbmcgcyA9ICJzc3Nzc3NzIjsKKyAgICB9CisKKyAgICB2b2lkIGsoKSB7CisgICAgICAgIGNsYXNzIHNzIHsKKyAgICAgICAgICAvKiogQG5vaW5zcGVjdGlvbiBIYXJkQ29kZWRTdHJpbmdMaXRlcmFsICovCisgICAgICAgICAgU3RyaW5nIHMgPSBudWxsOworICAgICAgICB9CisgICAgfQorICAgIHZvaWQgazIoKSB7CisgICAgICAgIGNsYXNzIHNzIHsKKyAgICAgICAgICAvKiogQG5vaW5zcGVjdGlvbiBIYXJkQ29kZWRTdHJpbmdMaXRlcmFsICovCisgICAgICAgICAgU3RyaW5nIHMgPSAic3Nzc3NzcyI7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBAU3VwcHJlc3NXYXJuaW5ncyh7IkVtcHR5TWV0aG9kIn0pCisgICAgdm9pZCBmb28oKSB7fQorCisgICAgQFN1cHByZXNzV2FybmluZ3MoeyJFbXB0eU1ldGhvZCJ9KQorICAgIHZvaWQgZm9vMSgpIHtTdHJpbmcgZjt9CisKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3JlZHVuZGFudFN1cHByZXNzL3N1cHByZXNzQWxsL2V4cGVjdGVkLnhtbCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3JlZHVuZGFudFN1cHByZXNzL3N1cHByZXNzQWxsL2V4cGVjdGVkLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZTkzMzQ5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vcmVkdW5kYW50U3VwcHJlc3Mvc3VwcHJlc3NBbGwvZXhwZWN0ZWQueG1sCkBAIC0wLDAgKzEsMyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxwcm9ibGVtcz4KKzwvcHJvYmxlbXM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vcmVkdW5kYW50U3VwcHJlc3Mvc3VwcHJlc3NBbGwvc3JjL3gvWC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vcmVkdW5kYW50U3VwcHJlc3Mvc3VwcHJlc3NBbGwvc3JjL3gvWC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc2NDVlNjAKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9yZWR1bmRhbnRTdXBwcmVzcy9zdXBwcmVzc0FsbC9zcmMveC9YLmphdmEKQEAgLTAsMCArMSw4IEBACitwYWNrYWdlIHg7CisKK3B1YmxpYyBjbGFzcyBTIHsKKyAgQFN1cHByZXNzV2FybmluZ3MoIkFMTCIpCisgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oYXJnc1swXSk7CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3JlZHVuZGFudFRocm93L0ltcGxpY2l0U3VwZXIvZXhwZWN0ZWQueG1sIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vcmVkdW5kYW50VGhyb3cvSW1wbGljaXRTdXBlci9leHBlY3RlZC54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGM1NTcyMwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3JlZHVuZGFudFRocm93L0ltcGxpY2l0U3VwZXIvZXhwZWN0ZWQueG1sCkBAIC0wLDAgKzEsMTkgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tCisgIH4gQ29weXJpZ2h0IDIwMDAtMjAxMCBKZXRCcmFpbnMgcy5yLm8uCisgIH4KKyAgfiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAgfiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgIH4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgIH4KKyAgfiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAgfgorICB+IFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgfiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICB+IFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICB+IFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgfiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAgLS0+Cis8cHJvYmxlbXM+CisKKzwvcHJvYmxlbXM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vcmVkdW5kYW50VGhyb3cvSW1wbGljaXRTdXBlci9zcmMvQS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vcmVkdW5kYW50VGhyb3cvSW1wbGljaXRTdXBlci9zcmMvQS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjliNmM4YzgKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9yZWR1bmRhbnRUaHJvdy9JbXBsaWNpdFN1cGVyL3NyYy9BLmphdmEKQEAgLTAsMCArMSwyMCBAQAorLyoKKyAqIENvcHlyaWdodCAyMDAwLTIwMTIgSmV0QnJhaW5zIHMuci5vLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KK3B1YmxpYyBjbGFzcyBBIHsKKyAgICBwdWJsaWMgQSgpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCJPb3BzIik7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3JlZHVuZGFudFRocm93L0ltcGxpY2l0U3VwZXIvc3JjL0IuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3JlZHVuZGFudFRocm93L0ltcGxpY2l0U3VwZXIvc3JjL0IuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NWFmNzU0Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vcmVkdW5kYW50VGhyb3cvSW1wbGljaXRTdXBlci9zcmMvQi5qYXZhCkBAIC0wLDAgKzEsMjAgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwMC0yMDEyIEpldEJyYWlucyBzLnIuby4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCitwdWJsaWMgY2xhc3MgQiBleHRlbmRzIEEgeworICAgIHB1YmxpYyBCKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIC8vIEltcGxpY2l0IGNhbGwgdG8gc3VwZXIoKQorICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9yZWR1bmRhbnRUaHJvdy9Jbmhlcml0ZWQvZXhwZWN0ZWQueG1sIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vcmVkdW5kYW50VGhyb3cvSW5oZXJpdGVkL2V4cGVjdGVkLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNzA0ZDU4Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vcmVkdW5kYW50VGhyb3cvSW5oZXJpdGVkL2V4cGVjdGVkLnhtbApAQCAtMCwwICsxLDQgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8cHJvYmxlbXM+Cis8L3Byb2JsZW1zPgorCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9yZWR1bmRhbnRUaHJvdy9Jbmhlcml0ZWQvc3JjL1Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3JlZHVuZGFudFRocm93L0luaGVyaXRlZC9zcmMvVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFlZTAzNDMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9yZWR1bmRhbnRUaHJvdy9Jbmhlcml0ZWQvc3JjL1Rlc3QuamF2YQpAQCAtMCwwICsxLDI0IEBACisvKgorICogQ29weXJpZ2h0IDIwMDAtMjAxMiBKZXRCcmFpbnMgcy5yLm8uCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworcHVibGljIGNsYXNzIFRlc3QgeworICB2b2lkIGZvbygpIHRocm93cyBqYXZhLmxhbmcuRXhjZXB0aW9uIHsKKyAgICB0aHJvdyBuZXcgamF2YS5pby5JT0V4Y2VwdGlvbigpOworICB9CisKKyAgdm9pZCBiYXIoKSB0aHJvd3MgamF2YS5pby5JT0V4Y2VwdGlvbiB7CisgICAgdGhyb3cgbmV3IGphdmEubGFuZy5FeGNlcHRpb24oKTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3JlZHVuZGFudFRocm93L1JlbW90ZS9leHBlY3RlZC54bWwgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9yZWR1bmRhbnRUaHJvdy9SZW1vdGUvZXhwZWN0ZWQueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdlZmRkZWEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9yZWR1bmRhbnRUaHJvdy9SZW1vdGUvZXhwZWN0ZWQueG1sCkBAIC0wLDAgKzEsOSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxwcm9ibGVtcz4KKyAgPHByb2JsZW0+CisgICAgPGZpbGU+RS5qYXZhPC9maWxlPgorICAgIDxsaW5lPjE1PC9saW5lPgorICAgIDxkZXNjcmlwdGlvbj5UaGUgZGVjbGFyZWQgZXhjZXB0aW9uICZsdDtjb2RlJmd0O1JlbW90ZUV4Y2VwdGlvbiZsdDsvY29kZSZndDsgaXMgbmV2ZXIgdGhyb3duIGluIG1ldGhvZCBpbXBsZW1lbnRhdGlvbnMuPC9kZXNjcmlwdGlvbj4KKyAgPC9wcm9ibGVtPgorPC9wcm9ibGVtcz4KKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vcmVkdW5kYW50VGhyb3cvUmVtb3RlL3NyYy9FLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9yZWR1bmRhbnRUaHJvdy9SZW1vdGUvc3JjL0UuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NTI3ZWIyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vcmVkdW5kYW50VGhyb3cvUmVtb3RlL3NyYy9FLmphdmEKQEAgLTAsMCArMSwyNCBAQAoraW1wb3J0IGphdmEucm1pLio7CisKK2ludGVyZmFjZSBBIGV4dGVuZHMgUmVtb3RlIHsKKyAgdm9pZCBhKCkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKK30KKworCitjbGFzcyBEIGltcGxlbWVudHMgQSB7CisgIHB1YmxpYyB2b2lkIGEoKSB7CisgIH0KK30KKworCitpbnRlcmZhY2UgTm90UmVtb3RhYmxlIHsKKyAgdm9pZCBhKCkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKK30KKworCitjbGFzcyBETm90UmVtb3RhYmxlIGltcGxlbWVudHMgTm90UmVtb3RhYmxlIHsKKyAgcHVibGljIHZvaWQgYSgpIHsKKyAgfQorfQorCisKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3JlZHVuZGFudFRocm93L1NDUjE0NTQzL2V4cGVjdGVkLnhtbCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3JlZHVuZGFudFRocm93L1NDUjE0NTQzL2V4cGVjdGVkLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNzA0ZDU4Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vcmVkdW5kYW50VGhyb3cvU0NSMTQ1NDMvZXhwZWN0ZWQueG1sCkBAIC0wLDAgKzEsNCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxwcm9ibGVtcz4KKzwvcHJvYmxlbXM+CisKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3JlZHVuZGFudFRocm93L1NDUjE0NTQzL3NyYy9FLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9yZWR1bmRhbnRUaHJvdy9TQ1IxNDU0My9zcmMvRS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM5OTA4ZTAKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9yZWR1bmRhbnRUaHJvdy9TQ1IxNDU0My9zcmMvRS5qYXZhCkBAIC0wLDAgKzEsMTQgQEAKK2NsYXNzIEQgZXh0ZW5kcyBFIHsKKyAKKyAgcHJvdGVjdGVkIHZvaWQgZG9Tb21ldGhpbmcoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCk7CisgIH0KKyAKK30KKyAKKyAKK3B1YmxpYyBhYnN0cmFjdCBjbGFzcyBFIHsKKyAKKyAgcHJvdGVjdGVkIGFic3RyYWN0IHZvaWQgZG9Tb21ldGhpbmcoKSB0aHJvd3MgRXhjZXB0aW9uOworIAorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vcmVkdW5kYW50VGhyb3cvU0NSNjg1OC9leHBlY3RlZC54bWwgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9yZWR1bmRhbnRUaHJvdy9TQ1I2ODU4L2V4cGVjdGVkLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42N2U1MzM2Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vcmVkdW5kYW50VGhyb3cvU0NSNjg1OC9leHBlY3RlZC54bWwKQEAgLTAsMCArMSw5IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHByb2JsZW1zPgorICA8cHJvYmxlbT4KKyAgICA8ZmlsZT5Gb28uamF2YTwvZmlsZT4KKyAgICA8bGluZT40PC9saW5lPgorICAgIDxkZXNjcmlwdGlvbj5JT0V4Y2VwdGlvbjwvZGVzY3JpcHRpb24+CisgIDwvcHJvYmxlbT4KKzwvcHJvYmxlbXM+CisKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3JlZHVuZGFudFRocm93L1NDUjY4NTgvc3JjL0Zvby5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vcmVkdW5kYW50VGhyb3cvU0NSNjg1OC9zcmMvRm9vLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODc5OTk4NwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3JlZHVuZGFudFRocm93L1NDUjY4NTgvc3JjL0Zvby5qYXZhCkBAIC0wLDAgKzEsNiBAQAoraW1wb3J0IGphdmEuaW8uKjsKKworcHVibGljIGNsYXNzIEZvbyB7CisgICBwdWJsaWMgRm9vKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKKyAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9yZWR1bmRhbnRUaHJvdy9TQ1I2ODU4QnlSYW5nZS9leHBlY3RlZC54bWwgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9yZWR1bmRhbnRUaHJvdy9TQ1I2ODU4QnlSYW5nZS9leHBlY3RlZC54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmUzYTE4YwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3JlZHVuZGFudFRocm93L1NDUjY4NThCeVJhbmdlL2V4cGVjdGVkLnhtbApAQCAtMCwwICsxLDEwIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHByb2JsZW1zPgorICA8cHJvYmxlbT4KKyAgICA8ZmlsZT5Gb28uamF2YTwvZmlsZT4KKyAgICA8bGluZT40PC9saW5lPgorICAgIDxkZXNjcmlwdGlvbj5JT0V4Y2VwdGlvbjwvZGVzY3JpcHRpb24+CisgICAgPGVudHJ5X3BvaW50IFRZUEU9Im1ldGhvZCIgRlFOQU1FPSJGb28gRm9vKCkiIC8+CisgIDwvcHJvYmxlbT4KKzwvcHJvYmxlbXM+CisKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3JlZHVuZGFudFRocm93L1NDUjY4NThCeVJhbmdlL3NyYy9Gb28uamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3JlZHVuZGFudFRocm93L1NDUjY4NThCeVJhbmdlL3NyYy9Gb28uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44Nzk5OTg3Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vcmVkdW5kYW50VGhyb3cvU0NSNjg1OEJ5UmFuZ2Uvc3JjL0Zvby5qYXZhCkBAIC0wLDAgKzEsNiBAQAoraW1wb3J0IGphdmEuaW8uKjsKKworcHVibGljIGNsYXNzIEZvbyB7CisgICBwdWJsaWMgRm9vKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKKyAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9yZWR1bmRhbnRUaHJvdy9TQ1I4MzIyL2V4cGVjdGVkLnhtbCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3JlZHVuZGFudFRocm93L1NDUjgzMjIvZXhwZWN0ZWQueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlmY2I2MTcKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9yZWR1bmRhbnRUaHJvdy9TQ1I4MzIyL2V4cGVjdGVkLnhtbApAQCAtMCwwICsxLDkgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8cHJvYmxlbXM+CisgIDxwcm9ibGVtPgorICAgIDxmaWxlPkFuSW50ZXJmYWNlLmphdmE8L2ZpbGU+CisgICAgPGxpbmU+NjwvbGluZT4KKyAgICA8ZGVzY3JpcHRpb24+SU9FeGNlcHRpb248L2Rlc2NyaXB0aW9uPgorICA8L3Byb2JsZW0+Cis8L3Byb2JsZW1zPgorCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9yZWR1bmRhbnRUaHJvdy9TQ1I4MzIyL3NyYy9hUGFja2FnZS9BQ2xhc3MuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3JlZHVuZGFudFRocm93L1NDUjgzMjIvc3JjL2FQYWNrYWdlL0FDbGFzcy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFhYjMyNDIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9yZWR1bmRhbnRUaHJvdy9TQ1I4MzIyL3NyYy9hUGFja2FnZS9BQ2xhc3MuamF2YQpAQCAtMCwwICsxLDEzIEBACitwYWNrYWdlIGFQYWNrYWdlOworCitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKKworcHVibGljIGNsYXNzIEFDbGFzcyBpbXBsZW1lbnRzIEFuSW50ZXJmYWNleworCWludCBhRmllbGRfMTsKKwlpbnQgYUZpZWxkXzI7CisKKwlwdWJsaWMgdm9pZCBtZXRob2RBKGludCBteUludCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKKwkJLy9zb21lIGNvZGUgaGVyZQorCSAgYUZpZWxkXzEgPSAxOworCX0KKyAgfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vcmVkdW5kYW50VGhyb3cvU0NSODMyMi9zcmMvYVBhY2thZ2UvQUNsYXNzVHdvLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9yZWR1bmRhbnRUaHJvdy9TQ1I4MzIyL3NyYy9hUGFja2FnZS9BQ2xhc3NUd28uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZDA1YmRkCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vcmVkdW5kYW50VGhyb3cvU0NSODMyMi9zcmMvYVBhY2thZ2UvQUNsYXNzVHdvLmphdmEKQEAgLTAsMCArMSwxMCBAQAorcGFja2FnZSBhUGFja2FnZTsKKworaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CisKK3B1YmxpYyBjbGFzcyBBQ2xhc3NUd28gaW1wbGVtZW50cyBBbkludGVyZmFjZSB7CisKKwlwdWJsaWMgdm9pZCBtZXRob2RBKGludCBteUludCkgdGhyb3dzIElPRXhjZXB0aW9ueworCSAgLy9zb21lIGNvZGUgaGVyZQorCX0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3JlZHVuZGFudFRocm93L1NDUjgzMjIvc3JjL2FQYWNrYWdlL0FuSW50ZXJmYWNlLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9yZWR1bmRhbnRUaHJvdy9TQ1I4MzIyL3NyYy9hUGFja2FnZS9BbkludGVyZmFjZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVmYjg4MjUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9yZWR1bmRhbnRUaHJvdy9TQ1I4MzIyL3NyYy9hUGFja2FnZS9BbkludGVyZmFjZS5qYXZhCkBAIC0wLDAgKzEsNyBAQAorcGFja2FnZSBhUGFja2FnZTsKKworaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CisKK3B1YmxpYyBpbnRlcmZhY2UgQW5JbnRlcmZhY2UgeworCXZvaWQgbWV0aG9kQShpbnQgbXlJbnQpIHRocm93cyBJT0V4Y2VwdGlvbjsKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3JlZHVuZGFudFRocm93L1NlbGZDYWxsL2V4cGVjdGVkLnhtbCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3JlZHVuZGFudFRocm93L1NlbGZDYWxsL2V4cGVjdGVkLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42N2U1MzM2Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vcmVkdW5kYW50VGhyb3cvU2VsZkNhbGwvZXhwZWN0ZWQueG1sCkBAIC0wLDAgKzEsOSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxwcm9ibGVtcz4KKyAgPHByb2JsZW0+CisgICAgPGZpbGU+Rm9vLmphdmE8L2ZpbGU+CisgICAgPGxpbmU+NDwvbGluZT4KKyAgICA8ZGVzY3JpcHRpb24+SU9FeGNlcHRpb248L2Rlc2NyaXB0aW9uPgorICA8L3Byb2JsZW0+Cis8L3Byb2JsZW1zPgorCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9yZWR1bmRhbnRUaHJvdy9TZWxmQ2FsbC9zcmMvRm9vLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9yZWR1bmRhbnRUaHJvdy9TZWxmQ2FsbC9zcmMvRm9vLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzYwMmQ1ZAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3JlZHVuZGFudFRocm93L1NlbGZDYWxsL3NyYy9Gb28uamF2YQpAQCAtMCwwICsxLDkgQEAKK2ltcG9ydCBqYXZhLmlvLio7CisKK3B1YmxpYyBjbGFzcyBGb28geworICBwdWJsaWMgdm9pZCBmb28oKSB0aHJvd3MgSU9FeGNlcHRpb24geworICAgIGlmICg0ID4gMykgeworICAgICAgZm9vKCk7CisgICAgfQorICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9yZWR1bmRhbnRUaHJvdy9lbnRyeVBvaW50L2V4cGVjdGVkLnhtbCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3JlZHVuZGFudFRocm93L2VudHJ5UG9pbnQvZXhwZWN0ZWQueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU4YWE2N2MKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9yZWR1bmRhbnRUaHJvdy9lbnRyeVBvaW50L2V4cGVjdGVkLnhtbApAQCAtMCwwICsxLDMgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8cHJvYmxlbXM+PC9wcm9ibGVtcz4KKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vcmVkdW5kYW50VGhyb3cvZW50cnlQb2ludC9zcmMvVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vcmVkdW5kYW50VGhyb3cvZW50cnlQb2ludC9zcmMvVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVjYjJiOGYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9yZWR1bmRhbnRUaHJvdy9lbnRyeVBvaW50L3NyYy9UZXN0LmphdmEKQEAgLTAsMCArMSwzIEBACitwdWJsaWMgY2xhc3MgVGVzdCBpbXBsZW1lbnRzIGphdmEuaW8uU2VyaWFsaXphYmxlIHsKKyAgcHVibGljIHZvaWQgcmVhZE9iamVjdChqYXZhLmlvLk9iamVjdElucHV0U3RyZWFtIGluKSB0aHJvd3MgRXhjZXB0aW9uIHt9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vcmVkdW5kYW50VHlwZUFyZ3MvUmV0dXJuUHJpbWl0aXZlVHlwZXMuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3JlZHVuZGFudFR5cGVBcmdzL1JldHVyblByaW1pdGl2ZVR5cGVzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzdjM2I1MgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3JlZHVuZGFudFR5cGVBcmdzL1JldHVyblByaW1pdGl2ZVR5cGVzLmphdmEKQEAgLTAsMCArMSwxMiBAQAoraW1wb3J0IGphdmEudXRpbC5NYXA7CitjbGFzcyBUZXN0IHsKKyAgTWFwIHNvbWVNYXA7CisKKyAgcHVibGljIGludCBnZXRHZXRCYXIoKSB7CisgICAgcmV0dXJuIHRoaXMuPEludGVnZXI+Z2V0Rm9vKCJudW1iZXJPZkNvbmZpZ3VyYXRpb25zIik7CisgIH0KKworICBwcm90ZWN0ZWQgPFQ+IFQgZ2V0Rm9vKFN0cmluZyBrZXkpIHsKKyAgICByZXR1cm4gKFQpc29tZU1hcC5nZXQoa2V5KTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3NhbWVQYXJhbWV0ZXJWYWx1ZS9lbnRyeVBvaW50L2V4cGVjdGVkLnhtbCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3NhbWVQYXJhbWV0ZXJWYWx1ZS9lbnRyeVBvaW50L2V4cGVjdGVkLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOGFhNjdjCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vc2FtZVBhcmFtZXRlclZhbHVlL2VudHJ5UG9pbnQvZXhwZWN0ZWQueG1sCkBAIC0wLDAgKzEsMyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxwcm9ibGVtcz48L3Byb2JsZW1zPgorCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9zYW1lUGFyYW1ldGVyVmFsdWUvZW50cnlQb2ludC9zcmMvVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vc2FtZVBhcmFtZXRlclZhbHVlL2VudHJ5UG9pbnQvc3JjL1Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZWFhNTYwCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vc2FtZVBhcmFtZXRlclZhbHVlL2VudHJ5UG9pbnQvc3JjL1Rlc3QuamF2YQpAQCAtMCwwICsxLDEwIEBACitwdWJsaWMgY2xhc3MgVGVzdCB7CisKKyAgcHVibGljIFRlc3QoKSB7CisgICAgVGVzdC5tYWluKG51bGwpOworICB9CisKKyAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncyl7fQorCisKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9zYW1lUGFyYW1ldGVyVmFsdWUvc2ltcGxlVmFyYXJnL2V4cGVjdGVkLnhtbCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3NhbWVQYXJhbWV0ZXJWYWx1ZS9zaW1wbGVWYXJhcmcvZXhwZWN0ZWQueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJmYTJmN2MKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9zYW1lUGFyYW1ldGVyVmFsdWUvc2ltcGxlVmFyYXJnL2V4cGVjdGVkLnhtbApAQCAtMCwwICsxLDExIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHByb2JsZW1zPgorICA8cHJvYmxlbT4KKyAgICA8ZmlsZT5UZXN0LmphdmE8L2ZpbGU+CisgICAgPGxpbmU+MzwvbGluZT4KKyAgICA8cHJvYmxlbV9jbGFzcz5BY3R1YWwgbWV0aG9kIHBhcmFtZXRlciBpcyB0aGUgc2FtZSBjb25zdGFudDwvcHJvYmxlbV9jbGFzcz4KKyAgICA8ZGVzY3JpcHRpb24+QWN0dWFsIHZhbHVlIG9mIHBhcmFtZXRlcjwvZGVzY3JpcHRpb24+CisgIDwvcHJvYmxlbT4KKzwvcHJvYmxlbXM+CisKKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vc2FtZVBhcmFtZXRlclZhbHVlL3NpbXBsZVZhcmFyZy9zcmMvVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vc2FtZVBhcmFtZXRlclZhbHVlL3NpbXBsZVZhcmFyZy9zcmMvVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc0MDU4ZDgKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9zYW1lUGFyYW1ldGVyVmFsdWUvc2ltcGxlVmFyYXJnL3NyYy9UZXN0LmphdmEKQEAgLTAsMCArMSwxMyBAQAorcHVibGljIGNsYXNzIFRlc3QgeworCisgICBwcml2YXRlIHZvaWQgZm9vKFN0cmluZy4uLiBhcmdzKSB7fQorCisgICBwdWJsaWMgdm9pZCBiYXIoKSB7CisgICAgIGZvbygiZm9vIik7CisgICAgIGZvbygiZm9vIik7CisgICB9CisKKyAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpeworICAgICBuZXcgVGVzdCgpLmJhcigpOworICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3NhbWVQYXJhbWV0ZXJWYWx1ZS92YXJhcmdzL2V4cGVjdGVkLnhtbCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3NhbWVQYXJhbWV0ZXJWYWx1ZS92YXJhcmdzL2V4cGVjdGVkLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOGFhNjdjCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vc2FtZVBhcmFtZXRlclZhbHVlL3ZhcmFyZ3MvZXhwZWN0ZWQueG1sCkBAIC0wLDAgKzEsMyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxwcm9ibGVtcz48L3Byb2JsZW1zPgorCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9zYW1lUGFyYW1ldGVyVmFsdWUvdmFyYXJncy9zcmMvVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vc2FtZVBhcmFtZXRlclZhbHVlL3ZhcmFyZ3Mvc3JjL1Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOWM3Y2Q0Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vc2FtZVBhcmFtZXRlclZhbHVlL3ZhcmFyZ3Mvc3JjL1Rlc3QuamF2YQpAQCAtMCwwICsxLDEzIEBACitwdWJsaWMgY2xhc3MgVGVzdCB7CisKKyAgIHByaXZhdGUgdm9pZCBmb28oU3RyaW5nLi4uIGFyZ3MpIHt9CisKKyAgIHB1YmxpYyB2b2lkIGJhcigpIHsKKyAgICAgZm9vKCJmb28iLCAiYmFyIik7CisgICAgIGZvbygiYmxhIik7CisgICB9CisKKyAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpeworICAgICBuZXcgVGVzdCgpLmJhcigpOworICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3NhbWVQYXJhbWV0ZXJWYWx1ZS93aXRob3V0RGVhZENvZGUvZXhwZWN0ZWQueG1sIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vc2FtZVBhcmFtZXRlclZhbHVlL3dpdGhvdXREZWFkQ29kZS9leHBlY3RlZC54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjNiMmUwMAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3NhbWVQYXJhbWV0ZXJWYWx1ZS93aXRob3V0RGVhZENvZGUvZXhwZWN0ZWQueG1sCkBAIC0wLDAgKzEsMTAgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8cHJvYmxlbXM+CisgIDxwcm9ibGVtPgorICAgIDxmaWxlPlRlc3QuamF2YTwvZmlsZT4KKyAgICA8bGluZT43PC9saW5lPgorICAgIDxwcm9ibGVtX2NsYXNzPkFjdHVhbCBtZXRob2QgcGFyYW1ldGVyIGlzIHRoZSBzYW1lIGNvbnN0YW50PC9wcm9ibGVtX2NsYXNzPgorICAgIDxkZXNjcmlwdGlvbj5BY3R1YWwgdmFsdWUgb2YgcGFyYW1ldGVyPC9kZXNjcmlwdGlvbj4KKyAgPC9wcm9ibGVtPgorPC9wcm9ibGVtcz4KKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vc2FtZVBhcmFtZXRlclZhbHVlL3dpdGhvdXREZWFkQ29kZS9zcmMvVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vc2FtZVBhcmFtZXRlclZhbHVlL3dpdGhvdXREZWFkQ29kZS9zcmMvVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBlYWE1NjAKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9zYW1lUGFyYW1ldGVyVmFsdWUvd2l0aG91dERlYWRDb2RlL3NyYy9UZXN0LmphdmEKQEAgLTAsMCArMSwxMCBAQAorcHVibGljIGNsYXNzIFRlc3QgeworCisgIHB1YmxpYyBUZXN0KCkgeworICAgIFRlc3QubWFpbihudWxsKTsKKyAgfQorCisgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3Mpe30KKworCit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vc2lsbHlBc3NpZ25tZW50L211bHRpcGxlL2V4cGVjdGVkLnhtbCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3NpbGx5QXNzaWdubWVudC9tdWx0aXBsZS9leHBlY3RlZC54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGVhOWYyNQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3NpbGx5QXNzaWdubWVudC9tdWx0aXBsZS9leHBlY3RlZC54bWwKQEAgLTAsMCArMSw0NiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxwcm9ibGVtcz4KKworICA8cHJvYmxlbT4KKyAgICA8ZmlsZT5UZXN0LmphdmE8L2ZpbGU+CisgICAgPGxpbmU+MzwvbGluZT4KKyAgICA8ZGVzY3JpcHRpb24+VmFyaWFibGUgJ2FyZ3MnIGlzIGFzc2lnbmVkIHRvIGl0c2VsZjwvZGVzY3JpcHRpb24+CisgIDwvcHJvYmxlbT4KKworICA8cHJvYmxlbT4KKyAgICA8ZmlsZT5UZXN0LmphdmE8L2ZpbGU+CisgICAgPGxpbmU+NDwvbGluZT4KKyAgICA8ZGVzY3JpcHRpb24+VmFyaWFibGUgJ2onIGlzIGluaXRpYWxpemVkIHdpdGggc2VsZiBhc3NpZ25tZW50PC9kZXNjcmlwdGlvbj4KKyAgPC9wcm9ibGVtPgorCisgIDxwcm9ibGVtPgorICAgIDxmaWxlPlRlc3QuamF2YTwvZmlsZT4KKyAgICA8bGluZT41PC9saW5lPgorICAgIDxkZXNjcmlwdGlvbj5WYXJpYWJsZSAnYXJncycgaXMgYXNzaWduZWQgdG8gaXRzZWxmPC9kZXNjcmlwdGlvbj4KKyAgPC9wcm9ibGVtPgorCisgIDxwcm9ibGVtPgorICAgIDxmaWxlPlRlc3QuamF2YTwvZmlsZT4KKyAgICA8bGluZT44PC9saW5lPgorICAgIDxkZXNjcmlwdGlvbj5WYXJpYWJsZSAneicgaXMgaW5pdGlhbGl6ZWQgd2l0aCBzZWxmIGFzc2lnbm1lbnQ8L2Rlc2NyaXB0aW9uPgorICA8L3Byb2JsZW0+CisKKyAgPHByb2JsZW0+CisgICAgPGZpbGU+VGVzdC5qYXZhPC9maWxlPgorICAgIDxsaW5lPjEzPC9saW5lPgorICAgIDxkZXNjcmlwdGlvbj5WYXJpYWJsZSAneScgaXMgYXNzaWduZWQgdG8gaXRzZWxmPC9kZXNjcmlwdGlvbj4KKyAgPC9wcm9ibGVtPgorCisgIDxwcm9ibGVtPgorICAgIDxmaWxlPlRlc3QuamF2YTwvZmlsZT4KKyAgICA8bGluZT4xNzwvbGluZT4KKyAgICA8ZGVzY3JpcHRpb24+VmFyaWFibGUgJ2gnIGlzIGFzc2lnbmVkIHRvIGl0c2VsZjwvZGVzY3JpcHRpb24+CisgIDwvcHJvYmxlbT4KKworICA8cHJvYmxlbT4KKyAgICA8ZmlsZT5UZXN0LmphdmE8L2ZpbGU+CisgICAgPGxpbmU+MTg8L2xpbmU+CisgICAgPGRlc2NyaXB0aW9uPlZhcmlhYmxlICdoJyBpcyBhc3NpZ25lZCB0byBpdHNlbGY8L2Rlc2NyaXB0aW9uPgorICA8L3Byb2JsZW0+CisKKzwvcHJvYmxlbXM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vc2lsbHlBc3NpZ25tZW50L211bHRpcGxlL3NyYy9UZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9zaWxseUFzc2lnbm1lbnQvbXVsdGlwbGUvc3JjL1Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYjNmZWI1Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vc2lsbHlBc3NpZ25tZW50L211bHRpcGxlL3NyYy9UZXN0LmphdmEKQEAgLTAsMCArMSwyNCBAQAorcHVibGljIGNsYXNzIFRlc3QgZXh0ZW5kcyBTdXBlciB7CisgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworICAgICAgICBhcmdzID0gYXJnczsKKyAgICAgICAgaW50IGogPSAoKGopID0gMSk7CisgICAgICAgIGFyZ3MgPSAoYXJncykgPSBudWxsOworICAgIH0KKworICAgIHByaXZhdGUgZmluYWwgaW50IHogPSB0aGlzLno7CisgICAgcHVibGljIHN0YXRpYyBpbnQgeSA9IEFCQ1YueTsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCB4ID0gQUJDVi54OworCisgICAgc3RhdGljIHZvaWQgZm9vKCkgeworICAgICAgICB5ID0gVGVzdC55OworICAgIH0KKworICAgIHZvaWQgY2FsbCgpIHsKKyAgICAgIGggPSBzdXBlci5oOworICAgICAgaCA9IChoKSA9IDE7CisgICAgfQorfQorY2xhc3MgU3VwZXIgeworICAgIGludCBoOworfQorCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9zaWxseUFzc2lnbm1lbnQvc3VwcHJlc3NlZC9leHBlY3RlZC54bWwgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9zaWxseUFzc2lnbm1lbnQvc3VwcHJlc3NlZC9leHBlY3RlZC54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDcwNGQ5MQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3NpbGx5QXNzaWdubWVudC9zdXBwcmVzc2VkL2V4cGVjdGVkLnhtbApAQCAtMCwwICsxLDIgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8cHJvYmxlbXMvPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3NpbGx5QXNzaWdubWVudC9zdXBwcmVzc2VkL3NyYy9UZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9zaWxseUFzc2lnbm1lbnQvc3VwcHJlc3NlZC9zcmMvVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQxZjRhMGIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9zaWxseUFzc2lnbm1lbnQvc3VwcHJlc3NlZC9zcmMvVGVzdC5qYXZhCkBAIC0wLDAgKzEsMTEgQEAKK3B1YmxpYyBjbGFzcyBUZXN0IHsKKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisgICAgICAgIC8vbm9pbnNwZWN0aW9uIFNpbGx5QXNzaWdubWVudAorICAgICAgICBhcmdzID0gYXJnczsKKyAgICAgICAgaW50IGkgPSAwOworICAgICAgICBpZiAoaSA9PSAwKSB7CisKKyAgICAgICAgfSBlbHNlIC8vbm9pbnNwZWN0aW9uIFNpbGx5QXNzaWdubWVudAorICAgICAgICAgIGkgPT0gaTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9zdXNwaWNpb3VzQ2FsbHMvSWdub3JlQ29udmVydGlibGUuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3N1c3BpY2lvdXNDYWxscy9JZ25vcmVDb252ZXJ0aWJsZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE0MzNiMmIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9zdXNwaWNpb3VzQ2FsbHMvSWdub3JlQ29udmVydGlibGUuamF2YQpAQCAtMCwwICsxLDE2IEBACitpbXBvcnQgamF2YS51dGlsLk1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworCitjbGFzcyBDbGF6eiB7CisgIHZvaWQgZihNYXA8SW50ZWdlcixTdHJpbmc+IG1hcCkgeworICAgIE51bWJlciBuID0gbmV3IEludGVnZXIoMyk7CisgICAgaWYgKG1hcC5jb250YWluc0tleShuKSkgeworICAgICAgcmV0dXJuOworICAgIH0KKyAgfQorCisgIHZvaWQgZm9vKExpc3Q8PyBleHRlbmRzIE51bWJlcj4gYykgeworICAgIGMuY29udGFpbnMoPHdhcm5pbmcgZGVzY3I9IidMaXN0PD8gZXh0ZW5kcyBOdW1iZXI+JyBtYXkgbm90IGNvbnRhaW4gb2JqZWN0cyBvZiB0eXBlICdTdHJpbmcnIj4iIjwvd2FybmluZz4pOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vc3VzcGljaW91c0NhbGxzL1VzZURmYS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vc3VzcGljaW91c0NhbGxzL1VzZURmYS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdiYThjM2QKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9zdXNwaWNpb3VzQ2FsbHMvVXNlRGZhLmphdmEKQEAgLTAsMCArMSwxMSBAQAoraW1wb3J0IGphdmEubGFuZy5JbnRlZ2VyOworaW1wb3J0IGphdmEudXRpbC5NYXA7CisKK2NsYXNzIENsYXp6IHsKKyAgdm9pZCBmKE1hcDxJbnRlZ2VyLCBTdHJpbmc+IG1hcCwgT2JqZWN0IG8pIHsKKyAgICBpZiAobyBpbnN0YW5jZW9mIEludGVnZXIgJiYgbWFwLmNvbnRhaW5zS2V5KG8pKSB7CisgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oKTsKKyAgICB9CisgIH0KKworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3N1c3BpY2lvdXNDYWxscy9XaWxkY2FyZC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vc3VzcGljaW91c0NhbGxzL1dpbGRjYXJkLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTc5ODEwZgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3N1c3BpY2lvdXNDYWxscy9XaWxkY2FyZC5qYXZhCkBAIC0wLDAgKzEsMTIgQEAKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworCitjbGFzcyBDbGF6eiB7CisgICAgdm9pZCBmb28oTGlzdDw/IGV4dGVuZHMgTnVtYmVyPiBsKSB7CisgICAgICBib29sZWFuIGIgPSBsLmNvbnRhaW5zKDx3YXJuaW5nIGRlc2NyPSInTGlzdDw/IGV4dGVuZHMgTnVtYmVyPicgbWF5IG5vdCBjb250YWluIG9iamVjdHMgb2YgdHlwZSAnU3RyaW5nJyI+IiI8L3dhcm5pbmc+KTsgICAgfQorICAgIHZvaWQgYmFyKCkgeworICAgICAgTGlzdDw/IGV4dGVuZHMgQ2xhc3M8Pz4+IGwgPSBuZXcgQXJyYXlMaXN0PENsYXNzPD8+PigpOworICAgICAgQ2xhc3M8Pz4gbyA9IFN0cmluZy5jbGFzczsKKyAgICAgIGludCBpID0gbC5pbmRleE9mKG8pOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9zdXNwaWNpb3VzTmFtZUNvbWJpbmF0aW9uL2Fzc2lnbm1lbnQvZXhwZWN0ZWQueG1sIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vc3VzcGljaW91c05hbWVDb21iaW5hdGlvbi9hc3NpZ25tZW50L2V4cGVjdGVkLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MzU2ZWE1Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vc3VzcGljaW91c05hbWVDb21iaW5hdGlvbi9hc3NpZ25tZW50L2V4cGVjdGVkLnhtbApAQCAtMCwwICsxLDggQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8cHJvYmxlbXM+CisgIDxwcm9ibGVtPgorICAgIDxmaWxlPkFzc2lnbm1lbnQuamF2YTwvZmlsZT4KKyAgICA8bGluZT40PC9saW5lPgorICAgIDxkZXNjcmlwdGlvbj4neCcgc2hvdWxkIHByb2JhYmx5IG5vdCBiZSBhc3NpZ25lZCB0byAneSc8L2Rlc2NyaXB0aW9uPgorICA8L3Byb2JsZW0+Cis8L3Byb2JsZW1zPgpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vc3VzcGljaW91c05hbWVDb21iaW5hdGlvbi9hc3NpZ25tZW50L3NyYy9Bc3NpZ25tZW50LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9zdXNwaWNpb3VzTmFtZUNvbWJpbmF0aW9uL2Fzc2lnbm1lbnQvc3JjL0Fzc2lnbm1lbnQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MTcwYzAwCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vc3VzcGljaW91c05hbWVDb21iaW5hdGlvbi9hc3NpZ25tZW50L3NyYy9Bc3NpZ25tZW50LmphdmEKQEAgLTAsMCArMSw2IEBACitwdWJsaWMgY2xhc3MgQXNzaWdubWVudCB7CisgIHB1YmxpYyB2b2lkIHRlc3QoKSB7CisgICAgaW50IHggPSAwLCB5ID0gMDsKKyAgICB5ID0geDsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vc3VzcGljaW91c05hbWVDb21iaW5hdGlvbi9pbml0aWFsaXplci9leHBlY3RlZC54bWwgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9zdXNwaWNpb3VzTmFtZUNvbWJpbmF0aW9uL2luaXRpYWxpemVyL2V4cGVjdGVkLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYTg1MGRlCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vc3VzcGljaW91c05hbWVDb21iaW5hdGlvbi9pbml0aWFsaXplci9leHBlY3RlZC54bWwKQEAgLTAsMCArMSw4IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHByb2JsZW1zPgorICA8cHJvYmxlbT4KKyAgICA8ZmlsZT5Jbml0aWFsaXplci5qYXZhPC9maWxlPgorICAgIDxsaW5lPjQ8L2xpbmU+CisgICAgPGRlc2NyaXB0aW9uPid4JyBzaG91bGQgcHJvYmFibHkgbm90IGJlIGFzc2lnbmVkIHRvICd5JzwvZGVzY3JpcHRpb24+CisgIDwvcHJvYmxlbT4KKzwvcHJvYmxlbXM+CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9zdXNwaWNpb3VzTmFtZUNvbWJpbmF0aW9uL2luaXRpYWxpemVyL3NyYy9Jbml0aWFsaXplci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vc3VzcGljaW91c05hbWVDb21iaW5hdGlvbi9pbml0aWFsaXplci9zcmMvSW5pdGlhbGl6ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZTE5MjJlCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vc3VzcGljaW91c05hbWVDb21iaW5hdGlvbi9pbml0aWFsaXplci9zcmMvSW5pdGlhbGl6ZXIuamF2YQpAQCAtMCwwICsxLDYgQEAKK3B1YmxpYyBjbGFzcyBJbml0aWFsaXplciB7CisgIHB1YmxpYyB2b2lkIHRlc3QoKSB7CisgICAgaW50IHggPSAwOworICAgIGludCB5ID0geDsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vc3VzcGljaW91c05hbWVDb21iaW5hdGlvbi9wYXJhbWV0ZXIvZXhwZWN0ZWQueG1sIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vc3VzcGljaW91c05hbWVDb21iaW5hdGlvbi9wYXJhbWV0ZXIvZXhwZWN0ZWQueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdiOWE0NWEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi9zdXNwaWNpb3VzTmFtZUNvbWJpbmF0aW9uL3BhcmFtZXRlci9leHBlY3RlZC54bWwKQEAgLTAsMCArMSw4IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHByb2JsZW1zPgorICA8cHJvYmxlbT4KKyAgICA8ZmlsZT5QYXJhbWV0ZXIuamF2YTwvZmlsZT4KKyAgICA8bGluZT40PC9saW5lPgorICAgIDxkZXNjcmlwdGlvbj4nc3RhcnRYJyBzaG91bGQgcHJvYmFibHkgbm90IGJlIHBhc3NlZCBhcyBwYXJhbWV0ZXIgJ3knPC9kZXNjcmlwdGlvbj4KKyAgPC9wcm9ibGVtPgorPC9wcm9ibGVtcz4KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3N1c3BpY2lvdXNOYW1lQ29tYmluYXRpb24vcGFyYW1ldGVyL3NyYy9QYXJhbWV0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3N1c3BpY2lvdXNOYW1lQ29tYmluYXRpb24vcGFyYW1ldGVyL3NyYy9QYXJhbWV0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMmNhYzVlCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vc3VzcGljaW91c05hbWVDb21iaW5hdGlvbi9wYXJhbWV0ZXIvc3JjL1BhcmFtZXRlci5qYXZhCkBAIC0wLDAgKzEsOSBAQAorcHVibGljIGNsYXNzIFBhcmFtZXRlciB7CisgIHB1YmxpYyB2b2lkIHRlc3QoKSB7CisgICAgaW50IHN0YXJ0WCA9IDA7CisgICAgbWV0aG9kKHN0YXJ0WCk7CisgIH0KKworICBwcml2YXRlIHZvaWQgbWV0aG9kKGludCB5KSB7CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3N1c3BpY2lvdXNOYW1lQ29tYmluYXRpb24vcmV0dXJuVmFsdWUvZXhwZWN0ZWQueG1sIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vc3VzcGljaW91c05hbWVDb21iaW5hdGlvbi9yZXR1cm5WYWx1ZS9leHBlY3RlZC54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDdkMmU3NAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3N1c3BpY2lvdXNOYW1lQ29tYmluYXRpb24vcmV0dXJuVmFsdWUvZXhwZWN0ZWQueG1sCkBAIC0wLDAgKzEsOCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxwcm9ibGVtcz4KKyAgPHByb2JsZW0+CisgICAgPGZpbGU+UmV0dXJuVmFsdWUuamF2YTwvZmlsZT4KKyAgICA8bGluZT40PC9saW5lPgorICAgIDxkZXNjcmlwdGlvbj4neScgc2hvdWxkIHByb2JhYmx5IG5vdCBiZSByZXR1cm5lZCBmcm9tIG1ldGhvZCAnZ2V0WCc8L2Rlc2NyaXB0aW9uPgorICA8L3Byb2JsZW0+Cis8L3Byb2JsZW1zPgpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vc3VzcGljaW91c05hbWVDb21iaW5hdGlvbi9yZXR1cm5WYWx1ZS9zcmMvUmV0dXJuVmFsdWUuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3N1c3BpY2lvdXNOYW1lQ29tYmluYXRpb24vcmV0dXJuVmFsdWUvc3JjL1JldHVyblZhbHVlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjYzZDE5MgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3N1c3BpY2lvdXNOYW1lQ29tYmluYXRpb24vcmV0dXJuVmFsdWUvc3JjL1JldHVyblZhbHVlLmphdmEKQEAgLTAsMCArMSw2IEBACitwdWJsaWMgY2xhc3MgUmV0dXJuVmFsdWUgeworICBwdWJsaWMgaW50IGdldFgoKSB7CisgICAgaW50IHk9MDsKKyAgICByZXR1cm4geTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3VudXNlZE1ldGhvZFBhcmFtZXRlci9hcHBNYWluVW51c2VkUGFyYW1zL2V4cGVjdGVkLnhtbCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3VudXNlZE1ldGhvZFBhcmFtZXRlci9hcHBNYWluVW51c2VkUGFyYW1zL2V4cGVjdGVkLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOGFhNjdjCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vdW51c2VkTWV0aG9kUGFyYW1ldGVyL2FwcE1haW5VbnVzZWRQYXJhbXMvZXhwZWN0ZWQueG1sCkBAIC0wLDAgKzEsMyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxwcm9ibGVtcz48L3Byb2JsZW1zPgorCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi91bnVzZWRNZXRob2RQYXJhbWV0ZXIvYXBwTWFpblVudXNlZFBhcmFtcy9zcmMvVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vdW51c2VkTWV0aG9kUGFyYW1ldGVyL2FwcE1haW5VbnVzZWRQYXJhbXMvc3JjL1Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MzhjNmJhCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vdW51c2VkTWV0aG9kUGFyYW1ldGVyL2FwcE1haW5VbnVzZWRQYXJhbXMvc3JjL1Rlc3QuamF2YQpAQCAtMCwwICsxLDQgQEAKK3B1YmxpYyBjbGFzcyBUZXN0IHsKKyAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vdW51c2VkTWV0aG9kUGFyYW1ldGVyL2VudHJ5UG9pbnRVbnVzZWRQYXJhbWV0ZXIvZXhwZWN0ZWQueG1sIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vdW51c2VkTWV0aG9kUGFyYW1ldGVyL2VudHJ5UG9pbnRVbnVzZWRQYXJhbWV0ZXIvZXhwZWN0ZWQueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU4YWE2N2MKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi91bnVzZWRNZXRob2RQYXJhbWV0ZXIvZW50cnlQb2ludFVudXNlZFBhcmFtZXRlci9leHBlY3RlZC54bWwKQEAgLTAsMCArMSwzIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHByb2JsZW1zPjwvcHJvYmxlbXM+CisKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3VudXNlZE1ldGhvZFBhcmFtZXRlci9lbnRyeVBvaW50VW51c2VkUGFyYW1ldGVyL3NyYy9UZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi91bnVzZWRNZXRob2RQYXJhbWV0ZXIvZW50cnlQb2ludFVudXNlZFBhcmFtZXRlci9zcmMvVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVhZDRhMTgKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi91bnVzZWRNZXRob2RQYXJhbWV0ZXIvZW50cnlQb2ludFVudXNlZFBhcmFtZXRlci9zcmMvVGVzdC5qYXZhCkBAIC0wLDAgKzEsNSBAQAorcHVibGljIGNsYXNzIFRlc3QgeworICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKXsKKyAgCisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi91bnVzZWRNZXRob2RQYXJhbWV0ZXIvZmllbGRJbkFub255bW91c0NsYXNzL2V4cGVjdGVkLnhtbCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3VudXNlZE1ldGhvZFBhcmFtZXRlci9maWVsZEluQW5vbnltb3VzQ2xhc3MvZXhwZWN0ZWQueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU4YWE2N2MKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi91bnVzZWRNZXRob2RQYXJhbWV0ZXIvZmllbGRJbkFub255bW91c0NsYXNzL2V4cGVjdGVkLnhtbApAQCAtMCwwICsxLDMgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8cHJvYmxlbXM+PC9wcm9ibGVtcz4KKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vdW51c2VkTWV0aG9kUGFyYW1ldGVyL2ZpZWxkSW5Bbm9ueW1vdXNDbGFzcy9zcmMvVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vdW51c2VkTWV0aG9kUGFyYW1ldGVyL2ZpZWxkSW5Bbm9ueW1vdXNDbGFzcy9zcmMvVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM4NWRjMTEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi91bnVzZWRNZXRob2RQYXJhbWV0ZXIvZmllbGRJbkFub255bW91c0NsYXNzL3NyYy9UZXN0LmphdmEKQEAgLTAsMCArMSw5IEBACitwdWJsaWMgY2xhc3MgVGVzdCB7CisgIHB1YmxpYyBSdW5uYWJsZSBmb28oZmluYWwgaW50IGkpIHsKKyAgICByZXR1cm4gbmV3IFJ1bm5hYmxlKCkgeworICAgICAgcHJpdmF0ZSBpbnQgbXlJbnQgPSBpOyAgICAgIAorICAgICAgcHVibGljIHZvaWQgcnVuKCl7CisgICAgICB9CisgICAgfQorICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vdW51c2VkTWV0aG9kUGFyYW1ldGVyL3VudXNlZFBhcmFtZXRlci9leHBlY3RlZC54bWwgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi91bnVzZWRNZXRob2RQYXJhbWV0ZXIvdW51c2VkUGFyYW1ldGVyL2V4cGVjdGVkLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOTk2YjE3Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vdW51c2VkTWV0aG9kUGFyYW1ldGVyL3VudXNlZFBhcmFtZXRlci9leHBlY3RlZC54bWwKQEAgLTAsMCArMSw5IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHByb2JsZW1zPgorICA8cHJvYmxlbT4KKyAgICA8ZmlsZT5UZXN0LmphdmE8L2ZpbGU+CisgICAgPGxpbmU+MjwvbGluZT4KKyAgICA8ZGVzY3JpcHRpb24+YjwvZGVzY3JpcHRpb24+CisgIDwvcHJvYmxlbT4KKzwvcHJvYmxlbXM+CisKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3VudXNlZE1ldGhvZFBhcmFtZXRlci91bnVzZWRQYXJhbWV0ZXIvc3JjL1Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3VudXNlZE1ldGhvZFBhcmFtZXRlci91bnVzZWRQYXJhbWV0ZXIvc3JjL1Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMDI3NmQ5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vdW51c2VkTWV0aG9kUGFyYW1ldGVyL3VudXNlZFBhcmFtZXRlci9zcmMvVGVzdC5qYXZhCkBAIC0wLDAgKzEsNSBAQAorcHVibGljIGNsYXNzIFRlc3QgeworICBwdWJsaWMgdm9pZCBmb28oYm9vbGVhbiBiKSB7CisKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vdW51c2VkTWV0aG9kUGFyYW1ldGVyL3VzZWRGb3JSZWFkaW5nL2V4cGVjdGVkLnhtbCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3VudXNlZE1ldGhvZFBhcmFtZXRlci91c2VkRm9yUmVhZGluZy9leHBlY3RlZC54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZThhYTY3YwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3VudXNlZE1ldGhvZFBhcmFtZXRlci91c2VkRm9yUmVhZGluZy9leHBlY3RlZC54bWwKQEAgLTAsMCArMSwzIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHByb2JsZW1zPjwvcHJvYmxlbXM+CisKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3VudXNlZE1ldGhvZFBhcmFtZXRlci91c2VkRm9yUmVhZGluZy9zcmMvVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vdW51c2VkTWV0aG9kUGFyYW1ldGVyL3VzZWRGb3JSZWFkaW5nL3NyYy9UZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWI2MGVkNQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3VudXNlZE1ldGhvZFBhcmFtZXRlci91c2VkRm9yUmVhZGluZy9zcmMvVGVzdC5qYXZhCkBAIC0wLDAgKzEsNSBAQAorcHVibGljIGNsYXNzIFRlc3QgeworICBwdWJsaWMgdm9pZCBmb28oYm9vbGVhbiBiKSB7CisgICAgYm9vbGVhbiBmID0gYjsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3VudXNlZFJldHVyblZhbHVlL2hpZXJhcmNoeS9leHBlY3RlZC54bWwgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi91bnVzZWRSZXR1cm5WYWx1ZS9oaWVyYXJjaHkvZXhwZWN0ZWQueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk3NjcxYTgKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi91bnVzZWRSZXR1cm5WYWx1ZS9oaWVyYXJjaHkvZXhwZWN0ZWQueG1sCkBAIC0wLDAgKzEsOCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxwcm9ibGVtcz4KKyAgPHByb2JsZW0+CisgICAgPGZpbGU+SS5qYXZhPC9maWxlPgorICAgIDxsaW5lPjI8L2xpbmU+CisgICAgPGRlc2NyaXB0aW9uPlJldHVybiB2YWx1ZSBvZiB0aGUgbWV0aG9kIGlzIG5ldmVyIHVzZWQ8L2Rlc2NyaXB0aW9uPgorICA8L3Byb2JsZW0+Cis8L3Byb2JsZW1zPgpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vdW51c2VkUmV0dXJuVmFsdWUvaGllcmFyY2h5L3NyYy9CLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi91bnVzZWRSZXR1cm5WYWx1ZS9oaWVyYXJjaHkvc3JjL0IuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMGYyNzllCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vdW51c2VkUmV0dXJuVmFsdWUvaGllcmFyY2h5L3NyYy9CLmphdmEKQEAgLTAsMCArMSwxMCBAQAorY2xhc3MgQiBpbXBsZW1lbnRzIEkgeworICBwdWJsaWMgYm9vbGVhbiBpc1VudXNlZCgpeworICAgIHJldHVybiBmYWxzZTsKKyAgfQorCisgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKyAgICBJIGkgPSBuZXcgQigpOworICAgIGkuaXNVbnVzZWQoKTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3VudXNlZFJldHVyblZhbHVlL2hpZXJhcmNoeS9zcmMvSS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vdW51c2VkUmV0dXJuVmFsdWUvaGllcmFyY2h5L3NyYy9JLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWNhMTM2MQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3VudXNlZFJldHVyblZhbHVlL2hpZXJhcmNoeS9zcmMvSS5qYXZhCkBAIC0wLDAgKzEsMyBAQAoraW50ZXJmYWNlIEkgeworICBib29sZWFuIGlzVW51c2VkKCk7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vdW51c2VkUmV0dXJuVmFsdWUvbmF0aXZlL2V4cGVjdGVkLnhtbCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3VudXNlZFJldHVyblZhbHVlL25hdGl2ZS9leHBlY3RlZC54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWU5YWM0YgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3VudXNlZFJldHVyblZhbHVlL25hdGl2ZS9leHBlY3RlZC54bWwKQEAgLTAsMCArMSw4IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHByb2JsZW1zPgorICA8cHJvYmxlbT4KKyAgICA8ZmlsZT5UZXN0LmphdmE8L2ZpbGU+CisgICAgPGxpbmU+MjwvbGluZT4KKyAgICA8ZGVzY3JpcHRpb24+UmV0dXJuIHZhbHVlIG9mIHRoZSBtZXRob2QgaXMgbmV2ZXIgdXNlZDwvZGVzY3JpcHRpb24+CisgIDwvcHJvYmxlbT4KKzwvcHJvYmxlbXM+CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi91bnVzZWRSZXR1cm5WYWx1ZS9uYXRpdmUvc3JjL1Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3VudXNlZFJldHVyblZhbHVlL25hdGl2ZS9zcmMvVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNjYWUyYzEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi91bnVzZWRSZXR1cm5WYWx1ZS9uYXRpdmUvc3JjL1Rlc3QuamF2YQpAQCAtMCwwICsxLDcgQEAKK2NsYXNzIFRlc3QgeworICBwcml2YXRlIHN0YXRpYyBuYXRpdmUgYm9vbGVhbiBpc1VudXNlZCgpOworCisgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKyAgICBUZXN0LmlzVW51c2VkKCk7CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3VudXNlZFJldHVyblZhbHVlL25vbkxpdGVyYWwvZXhwZWN0ZWQueG1sIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vdW51c2VkUmV0dXJuVmFsdWUvbm9uTGl0ZXJhbC9leHBlY3RlZC54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzkyMmVmOAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3VudXNlZFJldHVyblZhbHVlL25vbkxpdGVyYWwvZXhwZWN0ZWQueG1sCkBAIC0wLDAgKzEsOCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxwcm9ibGVtcz4KKyAgPHByb2JsZW0+CisgICAgPGZpbGU+VGVzdC5qYXZhPC9maWxlPgorICAgIDxsaW5lPjY8L2xpbmU+CisgICAgPGRlc2NyaXB0aW9uPlJldHVybiB2YWx1ZSBvZiB0aGUgbWV0aG9kIGlzIG5ldmVyIHVzZWQ8L2Rlc2NyaXB0aW9uPgorICA8L3Byb2JsZW0+Cis8L3Byb2JsZW1zPgpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vdW51c2VkUmV0dXJuVmFsdWUvbm9uTGl0ZXJhbC9zcmMvVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vdW51c2VkUmV0dXJuVmFsdWUvbm9uTGl0ZXJhbC9zcmMvVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU4N2FjZTUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi91bnVzZWRSZXR1cm5WYWx1ZS9ub25MaXRlcmFsL3NyYy9UZXN0LmphdmEKQEAgLTAsMCArMSwxMyBAQAorY2xhc3MgVGVzdCB7CisgIGJvb2xlYW4gZm9vKCkgeworICAgIHJldHVybiBmYWxzZTsKKyAgfQorCisgIGJvb2xlYW4gaXNVbnVzZWQoKSB7CisgICAgcmV0dXJuICFmb28oKTsKKyAgfQorCisgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKyAgICBuZXcgVGVzdCgpLmlzVW51c2VkKCk7CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3VudXNlZFJldHVyblZhbHVlL3NpbXBsZVNldHRlci9leHBlY3RlZC54bWwgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi91bnVzZWRSZXR1cm5WYWx1ZS9zaW1wbGVTZXR0ZXIvZXhwZWN0ZWQueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ3MDRkOTEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi91bnVzZWRSZXR1cm5WYWx1ZS9zaW1wbGVTZXR0ZXIvZXhwZWN0ZWQueG1sCkBAIC0wLDAgKzEsMiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxwcm9ibGVtcy8+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vdW51c2VkUmV0dXJuVmFsdWUvc2ltcGxlU2V0dGVyL3NyYy9UZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi91bnVzZWRSZXR1cm5WYWx1ZS9zaW1wbGVTZXR0ZXIvc3JjL1Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZGYzOGMxCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vdW51c2VkUmV0dXJuVmFsdWUvc2ltcGxlU2V0dGVyL3NyYy9UZXN0LmphdmEKQEAgLTAsMCArMSwxMyBAQAorY2xhc3MgVGVzdCB7CisgIHByaXZhdGUgU3RyaW5nIG15U3RyOworCisgIHB1YmxpYyBUZXN0IHNldFN0cihTdHJpbmcgc3RyKSB7CisgICAgbXlTdHIgPSBzdHI7CisgICAgcmV0dXJuIHRoaXM7CisgIH0KKworICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisgICAgZmluYWwgVGVzdCB0ZXN0ID0gbmV3IFRlc3QoKTsKKyAgICB0ZXN0LnNldFN0cigiIik7CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3VzYWdlMS41L2NvbnN0cnVjdG9yL2V4cGVjdGVkLnhtbCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3VzYWdlMS41L2NvbnN0cnVjdG9yL2V4cGVjdGVkLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYmRjZmY1Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vdXNhZ2UxLjUvY29uc3RydWN0b3IvZXhwZWN0ZWQueG1sCkBAIC0wLDAgKzEsOSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxwcm9ibGVtcz4KKyAgPHByb2JsZW0+CisgICAgPGZpbGU+VGVzdC5qYXZhPC9maWxlPgorICAgIDxsaW5lPjM8L2xpbmU+CisgICAgPGRlc2NyaXB0aW9uPlVzYWdlIG9mIEFQSSBkb2N1bWVudGVkIGFzIEBzaW5jZSAxLjU8L2Rlc2NyaXB0aW9uPgorICA8L3Byb2JsZW0+Cis8L3Byb2JsZW1zPgorCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi91c2FnZTEuNS9jb25zdHJ1Y3Rvci9zcmMvVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vdXNhZ2UxLjUvY29uc3RydWN0b3Ivc3JjL1Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNTVmY2IyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vdXNhZ2UxLjUvY29uc3RydWN0b3Ivc3JjL1Rlc3QuamF2YQpAQCAtMCwwICsxLDUgQEAKK3B1YmxpYyBjbGFzcyBUZXN0IHsKKyAgdm9pZCBmb28oKSB7CisgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiAoIiIsIG5ldyBSdW50aW1lRXhjZXB0aW9uKCkpOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vdXNhZ2UxLjUvaWdub3JlZC9leHBlY3RlZC54bWwgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi91c2FnZTEuNS9pZ25vcmVkL2V4cGVjdGVkLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NjI1NjM1Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vdXNhZ2UxLjUvaWdub3JlZC9leHBlY3RlZC54bWwKQEAgLTAsMCArMSwyIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHByb2JsZW1zPjwvcHJvYmxlbXM+CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi91c2FnZTEuNS9pZ25vcmVkL3NyYy9UZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi91c2FnZTEuNS9pZ25vcmVkL3NyYy9UZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTMwOWIxYwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3VzYWdlMS41L2lnbm9yZWQvc3JjL1Rlc3QuamF2YQpAQCAtMCwwICsxLDcgQEAKK2ltcG9ydCBqYXZhLmF3dC5nZW9tLkdlbmVyYWxQYXRoOworcHVibGljIGNsYXNzIFRlc3QgeworICB2b2lkIGZvbygpIHsKKyAgICBHZW5lcmFsUGF0aCBwYXRoID0gbmV3IEdlbmVyYWxQYXRoKCk7CisgICAgcGF0aC5tb3ZlVG8oMCwwKTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3Zpc2liaWxpdHkvSURFQURFVjEwMzEyL2V4cGVjdGVkLnhtbCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3Zpc2liaWxpdHkvSURFQURFVjEwMzEyL2V4cGVjdGVkLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OWUxYTBmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vdmlzaWJpbGl0eS9JREVBREVWMTAzMTIvZXhwZWN0ZWQueG1sCkBAIC0wLDAgKzEsNCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxwcm9ibGVtcz4gIAorPC9wcm9ibGVtcz4KKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vdmlzaWJpbGl0eS9JREVBREVWMTAzMTIvZXh0X3NyYy93ZWFrZXIvYi9CLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi92aXNpYmlsaXR5L0lERUFERVYxMDMxMi9leHRfc3JjL3dlYWtlci9iL0IuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZmIxM2FiCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vdmlzaWJpbGl0eS9JREVBREVWMTAzMTIvZXh0X3NyYy93ZWFrZXIvYi9CLmphdmEKQEAgLTAsMCArMSwxMCBAQAorcGFja2FnZSB3ZWFrZXIuYjsKKworaW1wb3J0IHdlYWtlci5hLkE7CisKK3B1YmxpYyBjbGFzcyBCIHsKKworICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKyAgICAgICAgQS5mKCk7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vdmlzaWJpbGl0eS9JREVBREVWMTAzMTIvc3JjL3dlYWtlci9hL0EuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3Zpc2liaWxpdHkvSURFQURFVjEwMzEyL3NyYy93ZWFrZXIvYS9BLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTQxZDFiMQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3Zpc2liaWxpdHkvSURFQURFVjEwMzEyL3NyYy93ZWFrZXIvYS9BLmphdmEKQEAgLTAsMCArMSwxMSBAQAorcGFja2FnZSB3ZWFrZXIuYTsKKworcHVibGljIGNsYXNzIEEgeworCisgICAgcHVibGljIHN0YXRpYyB2b2lkIGYoKSB7CisgICAgfQorCisgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworICAgICAgICBmKCk7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vdmlzaWJpbGl0eS9JREVBREVWMTA4ODMvZXhwZWN0ZWQueG1sIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vdmlzaWJpbGl0eS9JREVBREVWMTA4ODMvZXhwZWN0ZWQueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc5ZTFhMGYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi92aXNpYmlsaXR5L0lERUFERVYxMDg4My9leHBlY3RlZC54bWwKQEAgLTAsMCArMSw0IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHByb2JsZW1zPiAgCis8L3Byb2JsZW1zPgorCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi92aXNpYmlsaXR5L0lERUFERVYxMDg4My9zcmMvQmFyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi92aXNpYmlsaXR5L0lERUFERVYxMDg4My9zcmMvQmFyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWU5Y2UwNwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3Zpc2liaWxpdHkvSURFQURFVjEwODgzL3NyYy9CYXIuamF2YQpAQCAtMCwwICsxLDEyIEBACitwdWJsaWMgY2xhc3MgQmFyIHsKKyAgcHVibGljIHN0YXRpYyBib29sZWFuIGV4ZWN1dGUoYm9vbGVhbiBpc0ZvbykgeworICAgIGlmIChpc0ZvbykgeworICAgICAgcmV0dXJuIG5ldyBGb28oKS5pc1RyYW5zcGFyZW50c09ubHkoKTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworICB9CisKKyAgYm9vbGVhbiBpc1RyYW5zcGFyZW50c09ubHkoKSB7CisgICAgcmV0dXJuIGZhbHNlOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vdmlzaWJpbGl0eS9JREVBREVWMTA4ODMvc3JjL0Zvby5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vdmlzaWJpbGl0eS9JREVBREVWMTA4ODMvc3JjL0Zvby5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEzNjRlMjkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi92aXNpYmlsaXR5L0lERUFERVYxMDg4My9zcmMvRm9vLmphdmEKQEAgLTAsMCArMSwzIEBACitwdWJsaWMgY2xhc3MgRm9vIGV4dGVuZHMgQmFyIHsKKworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3Zpc2liaWxpdHkvU0NSMTE3OTIvZXhwZWN0ZWQueG1sIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vdmlzaWJpbGl0eS9TQ1IxMTc5Mi9leHBlY3RlZC54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDcwNGQ1OAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3Zpc2liaWxpdHkvU0NSMTE3OTIvZXhwZWN0ZWQueG1sCkBAIC0wLDAgKzEsNCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxwcm9ibGVtcz4KKzwvcHJvYmxlbXM+CisKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3Zpc2liaWxpdHkvU0NSMTE3OTIvc3JjL0Zvby5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vdmlzaWJpbGl0eS9TQ1IxMTc5Mi9zcmMvRm9vLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmI1N2ZmOQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3Zpc2liaWxpdHkvU0NSMTE3OTIvc3JjL0Zvby5qYXZhCkBAIC0wLDAgKzEsMTAgQEAKK2NsYXNzIEZvbyB7CisgICAgcHJpdmF0ZSB2b2lkIG1ldGhvZCgpIHsKKyAgICAgICAgZmluYWwgY2xhc3MgTXlDbGFzc3t9CisgICAgICAgIE9iamVjdCBvID0gbmV3IE15Q2xhc3MoKTsKKyAgICB9CisKKyAgICBwcml2YXRlIHZvaWQgZm9vKCkgeworICAgICAgICBtZXRob2QoKTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vdmlzaWJpbGl0eS9TQ1I1MDA4L2V4cGVjdGVkLnhtbCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3Zpc2liaWxpdHkvU0NSNTAwOC9leHBlY3RlZC54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWM4YmM1MwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3Zpc2liaWxpdHkvU0NSNTAwOC9leHBlY3RlZC54bWwKQEAgLTAsMCArMSw5IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHByb2JsZW1zPgorICA8cHJvYmxlbT4KKyAgICA8ZmlsZT5TdXBlckNsYXNzLmphdmE8L2ZpbGU+CisgICAgPGxpbmU+MzwvbGluZT4KKyAgICA8ZGVzY3JpcHRpb24+cGFja2FnZSBsb2NhbDwvZGVzY3JpcHRpb24+CisgIDwvcHJvYmxlbT4KKzwvcHJvYmxlbXM+CisKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3Zpc2liaWxpdHkvU0NSNTAwOC9zcmMvbWFydGkvcDEvU3ViQ2xhc3MuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3Zpc2liaWxpdHkvU0NSNTAwOC9zcmMvbWFydGkvcDEvU3ViQ2xhc3MuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZmQ5MmIyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vdmlzaWJpbGl0eS9TQ1I1MDA4L3NyYy9tYXJ0aS9wMS9TdWJDbGFzcy5qYXZhCkBAIC0wLDAgKzEsNiBAQAorcGFja2FnZSBtYXJ0aS5wMTsKK2NsYXNzIFN1YkNsYXNzIGV4dGVuZHMgU3VwZXJDbGFzc3sKKyAgICBwdWJsaWMgU3ViQ2xhc3MoKSB7CisgICAgICAgIHN1cGVyKCk7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vdmlzaWJpbGl0eS9TQ1I1MDA4L3NyYy9tYXJ0aS9wMS9TdXBlckNsYXNzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi92aXNpYmlsaXR5L1NDUjUwMDgvc3JjL21hcnRpL3AxL1N1cGVyQ2xhc3MuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMjgxNzVkCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vdmlzaWJpbGl0eS9TQ1I1MDA4L3NyYy9tYXJ0aS9wMS9TdXBlckNsYXNzLmphdmEKQEAgLTAsMCArMSw1IEBACitwYWNrYWdlIG1hcnRpLnAxOworY2xhc3MgU3VwZXJDbGFzcyB7CisgICAgcHVibGljIFN1cGVyQ2xhc3MoKSB7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vdmlzaWJpbGl0eS9TQ1I2ODU2L2V4cGVjdGVkLnhtbCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3Zpc2liaWxpdHkvU0NSNjg1Ni9leHBlY3RlZC54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmEyNzg2MwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3Zpc2liaWxpdHkvU0NSNjg1Ni9leHBlY3RlZC54bWwKQEAgLTAsMCArMSwxNCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxwcm9ibGVtcz4KKyAgPHByb2JsZW0+CisgICAgPGZpbGU+QS5qYXZhPC9maWxlPgorICAgIDxsaW5lPjM8L2xpbmU+CisgICAgPGRlc2NyaXB0aW9uPnByaXZhdGU8L2Rlc2NyaXB0aW9uPgorICA8L3Byb2JsZW0+CisgIDxwcm9ibGVtPgorICAgIDxmaWxlPkEuamF2YTwvZmlsZT4KKyAgICA8bGluZT40PC9saW5lPgorICAgIDxkZXNjcmlwdGlvbj5wcml2YXRlPC9kZXNjcmlwdGlvbj4KKyAgPC9wcm9ibGVtPgorPC9wcm9ibGVtcz4KKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vdmlzaWJpbGl0eS9TQ1I2ODU2L3NyYy9BLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi92aXNpYmlsaXR5L1NDUjY4NTYvc3JjL0EuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOWIyNTc1Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vdmlzaWJpbGl0eS9TQ1I2ODU2L3NyYy9BLmphdmEKQEAgLTAsMCArMSwxMyBAQAorY2xhc3MgQSB7CisgICAgQSgpe30gICAgCisgICAgc3RhdGljIGNsYXNzIEIgeworICAgICAgICBpbnQgaz0wOworICAgICAgICB7CisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oayk7CisgICAgICAgIH0KKyAgICB9CisgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworICAgICAgICBuZXcgQigpOworICAgIH0KK30KKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vdmlzaWJpbGl0eS9hbm5vdGF0aW9uVXNhZ2VzL2V4cGVjdGVkLnhtbCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3Zpc2liaWxpdHkvYW5ub3RhdGlvblVzYWdlcy9leHBlY3RlZC54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzllMWEwZgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3Zpc2liaWxpdHkvYW5ub3RhdGlvblVzYWdlcy9leHBlY3RlZC54bWwKQEAgLTAsMCArMSw0IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHByb2JsZW1zPiAgCis8L3Byb2JsZW1zPgorCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi92aXNpYmlsaXR5L2Fubm90YXRpb25Vc2FnZXMvc3JjL09ic2VydmVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi92aXNpYmlsaXR5L2Fubm90YXRpb25Vc2FnZXMvc3JjL09ic2VydmVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWVjMmNkYgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3Zpc2liaWxpdHkvYW5ub3RhdGlvblVzYWdlcy9zcmMvT2JzZXJ2ZXIuamF2YQpAQCAtMCwwICsxLDMgQEAKK3B1YmxpYyBAaW50ZXJmYWNlIE9ic2VydmVyIHsKKyAgICBTdHJpbmcgdmFsdWUoKTsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi92aXNpYmlsaXR5L2Fubm90YXRpb25Vc2FnZXMvc3JjL1Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3Zpc2liaWxpdHkvYW5ub3RhdGlvblVzYWdlcy9zcmMvVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIzYjRiYWEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi92aXNpYmlsaXR5L2Fubm90YXRpb25Vc2FnZXMvc3JjL1Rlc3QuamF2YQpAQCAtMCwwICsxLDYgQEAKK3B1YmxpYyBjbGFzcyBUZXN0IHsKKyAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIENPTlNUID0gImNvbnN0IjsKKyAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpeworICAgIFN5c3RlbS5vdXQucHJpbnRsbihDT05TVCk7CisgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vdmlzaWJpbGl0eS9hbm5vdGF0aW9uVXNhZ2VzL3NyYy9Vc2FnZS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vdmlzaWJpbGl0eS9hbm5vdGF0aW9uVXNhZ2VzL3NyYy9Vc2FnZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBkOTMzZWUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi92aXNpYmlsaXR5L2Fubm90YXRpb25Vc2FnZXMvc3JjL1VzYWdlLmphdmEKQEAgLTAsMCArMSw4IEBACitAT2JzZXJ2ZXIoVGVzdC5DT05TVCkKK2NsYXNzIFVzYWdlIHsKKyAgQE9ic2VydmVyKFRlc3QuQ09OU1QpCisgIGludCBmOworCisgIEBPYnNlcnZlcihUZXN0LkNPTlNUKQorICB2b2lkIGZvbygpe30KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi92aXNpYmlsaXR5L2RlZmF1bHRDb25zdHJ1Y3Rvci9leHBlY3RlZC54bWwgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi92aXNpYmlsaXR5L2RlZmF1bHRDb25zdHJ1Y3Rvci9leHBlY3RlZC54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzllMWEwZgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3Zpc2liaWxpdHkvZGVmYXVsdENvbnN0cnVjdG9yL2V4cGVjdGVkLnhtbApAQCAtMCwwICsxLDQgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8cHJvYmxlbXM+ICAKKzwvcHJvYmxlbXM+CisKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3Zpc2liaWxpdHkvZGVmYXVsdENvbnN0cnVjdG9yL2V4dF9zcmMvcmVzLnhtbCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3Zpc2liaWxpdHkvZGVmYXVsdENvbnN0cnVjdG9yL2V4dF9zcmMvcmVzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zODAwOWJiCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vdmlzaWJpbGl0eS9kZWZhdWx0Q29uc3RydWN0b3IvZXh0X3NyYy9yZXMueG1sCkBAIC0wLDAgKzEgQEAKKzxyb290PlRlc3Q8L3Jvb3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vdmlzaWJpbGl0eS9kZWZhdWx0Q29uc3RydWN0b3Ivc3JjL1Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3Zpc2liaWxpdHkvZGVmYXVsdENvbnN0cnVjdG9yL3NyYy9UZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmMzYTJhNQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3Zpc2liaWxpdHkvZGVmYXVsdENvbnN0cnVjdG9yL3NyYy9UZXN0LmphdmEKQEAgLTAsMCArMSw2IEBACitwdWJsaWMgY2xhc3MgVGVzdCBpbXBsZW1lbnRzIGphdmEubGFuZy5DbG9uYWJsZSB7CisgICBwdWJsaWMgVGVzdCgpe30KKyAgIHB1YmxpYyBPYmplY3QgY2xvbmUoKSB7CisgICAgIHJldHVybiBuZXcgVGVzdCgpOworICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3Zpc2liaWxpdHkvZW51bUNvbnN0YW50c1Zpc2liaWxpdHkvZXhwZWN0ZWQueG1sIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vdmlzaWJpbGl0eS9lbnVtQ29uc3RhbnRzVmlzaWJpbGl0eS9leHBlY3RlZC54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzllMWEwZgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3Zpc2liaWxpdHkvZW51bUNvbnN0YW50c1Zpc2liaWxpdHkvZXhwZWN0ZWQueG1sCkBAIC0wLDAgKzEsNCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxwcm9ibGVtcz4gIAorPC9wcm9ibGVtcz4KKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vdmlzaWJpbGl0eS9lbnVtQ29uc3RhbnRzVmlzaWJpbGl0eS9zcmMvRm9vLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi92aXNpYmlsaXR5L2VudW1Db25zdGFudHNWaXNpYmlsaXR5L3NyYy9Gb28uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NDAzZGE0NwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3Zpc2liaWxpdHkvZW51bUNvbnN0YW50c1Zpc2liaWxpdHkvc3JjL0Zvby5qYXZhCkBAIC0wLDAgKzEsNyBAQAorcHVibGljIGVudW0gRm9vIHsKKyAgQkFSLCBVTlVTRUQ7CisgIAorICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKXsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oQkFSKTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3Zpc2liaWxpdHkvaW1wbGljaXRDb25zdHJ1Y3Rvci9leHBlY3RlZC54bWwgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi92aXNpYmlsaXR5L2ltcGxpY2l0Q29uc3RydWN0b3IvZXhwZWN0ZWQueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc5ZTFhMGYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi92aXNpYmlsaXR5L2ltcGxpY2l0Q29uc3RydWN0b3IvZXhwZWN0ZWQueG1sCkBAIC0wLDAgKzEsNCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxwcm9ibGVtcz4gIAorPC9wcm9ibGVtcz4KKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vdmlzaWJpbGl0eS9pbXBsaWNpdENvbnN0cnVjdG9yL2V4dF9zcmMvcmVzLnhtbCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3Zpc2liaWxpdHkvaW1wbGljaXRDb25zdHJ1Y3Rvci9leHRfc3JjL3Jlcy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzgwMDliYgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3Zpc2liaWxpdHkvaW1wbGljaXRDb25zdHJ1Y3Rvci9leHRfc3JjL3Jlcy54bWwKQEAgLTAsMCArMSBAQAorPHJvb3Q+VGVzdDwvcm9vdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi92aXNpYmlsaXR5L2ltcGxpY2l0Q29uc3RydWN0b3Ivc3JjL1Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3Zpc2liaWxpdHkvaW1wbGljaXRDb25zdHJ1Y3Rvci9zcmMvVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlmNDI2MWEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi92aXNpYmlsaXR5L2ltcGxpY2l0Q29uc3RydWN0b3Ivc3JjL1Rlc3QuamF2YQpAQCAtMCwwICsxLDUgQEAKK3B1YmxpYyBjbGFzcyBUZXN0IGltcGxlbWVudHMgamF2YS5sYW5nLkNsb25hYmxlIHsKKyAgIHB1YmxpYyBPYmplY3QgY2xvbmUoKSB7CisgICAgIHJldHVybiBuZXcgVGVzdCgpOworICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3Zpc2liaWxpdHkvaW5uZXJDb25zdHJ1Y3Rvci9leHBlY3RlZC54bWwgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi92aXNpYmlsaXR5L2lubmVyQ29uc3RydWN0b3IvZXhwZWN0ZWQueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE2ZjI1YWMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi92aXNpYmlsaXR5L2lubmVyQ29uc3RydWN0b3IvZXhwZWN0ZWQueG1sCkBAIC0wLDAgKzEsOSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxwcm9ibGVtcz4KKyAgPHByb2JsZW0+CisgICAgPGZpbGU+Rm9vLmphdmE8L2ZpbGU+CisgICAgPGxpbmU+NDwvbGluZT4KKyAgICA8ZGVzY3JpcHRpb24+cHJpdmF0ZTwvZGVzY3JpcHRpb24+CisgIDwvcHJvYmxlbT4KKzwvcHJvYmxlbXM+CisKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3Zpc2liaWxpdHkvaW5uZXJDb25zdHJ1Y3Rvci9zcmMvRm9vLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi92aXNpYmlsaXR5L2lubmVyQ29uc3RydWN0b3Ivc3JjL0Zvby5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYxNTkwMTYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi92aXNpYmlsaXR5L2lubmVyQ29uc3RydWN0b3Ivc3JjL0Zvby5qYXZhCkBAIC0wLDAgKzEsNyBAQAorY2xhc3MgRm9vIHsKKyAgcHJpdmF0ZSBmaW5hbCBCYXIgYmFyID0gbmV3IEJhcigpOworICBwcml2YXRlIGNsYXNzIEJhciB7CisgICAgcHVibGljIEJhcigpIHsKKyAgICB9CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi92aXNpYmlsaXR5L3BhY2thZ2VMZXZlbFRvcHMvZXhwZWN0ZWQueG1sIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vdmlzaWJpbGl0eS9wYWNrYWdlTGV2ZWxUb3BzL2V4cGVjdGVkLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41M2MxMDViCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vdmlzaWJpbGl0eS9wYWNrYWdlTGV2ZWxUb3BzL2V4cGVjdGVkLnhtbApAQCAtMCwwICsxLDkgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8cHJvYmxlbXM+CisgIDxwcm9ibGVtPgorICAgIDxmaWxlPlBhY2thZ2VMZXZlbFNlcnZlci5qYXZhPC9maWxlPgorICAgIDxsaW5lPjM8L2xpbmU+CisgICAgPGRlc2NyaXB0aW9uPnBhY2thZ2UgbG9jYWw8L2Rlc2NyaXB0aW9uPgorICA8L3Byb2JsZW0+Cis8L3Byb2JsZW1zPgorCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi92aXNpYmlsaXR5L3BhY2thZ2VMZXZlbFRvcHMvc3JjL3BhY2thZ2UxL1BhY2thZ2VMZXZlbFNlcnZlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vdmlzaWJpbGl0eS9wYWNrYWdlTGV2ZWxUb3BzL3NyYy9wYWNrYWdlMS9QYWNrYWdlTGV2ZWxTZXJ2ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NTZmMmI5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vdmlzaWJpbGl0eS9wYWNrYWdlTGV2ZWxUb3BzL3NyYy9wYWNrYWdlMS9QYWNrYWdlTGV2ZWxTZXJ2ZXIuamF2YQpAQCAtMCwwICsxLDUgQEAKK3BhY2thZ2UgcGFja2FnZTE7CisKK3B1YmxpYyBjbGFzcyBQYWNrYWdlTGV2ZWxTZXJ2ZXIgeworICBwdWJsaWMgc3RhdGljIHZvaWQgZm9vKCkge30KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi92aXNpYmlsaXR5L3BhY2thZ2VMZXZlbFRvcHMvc3JjL3BhY2thZ2UxL1B1YmxpY1NlcnZlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vdmlzaWJpbGl0eS9wYWNrYWdlTGV2ZWxUb3BzL3NyYy9wYWNrYWdlMS9QdWJsaWNTZXJ2ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOThkYzBlCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vdmlzaWJpbGl0eS9wYWNrYWdlTGV2ZWxUb3BzL3NyYy9wYWNrYWdlMS9QdWJsaWNTZXJ2ZXIuamF2YQpAQCAtMCwwICsxLDUgQEAKK3BhY2thZ2UgcGFja2FnZTE7CisKK3B1YmxpYyBjbGFzcyBQdWJsaWNTZXJ2ZXIgeworICBwdWJsaWMgc3RhdGljIHZvaWQgZm9vKCkge30KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi92aXNpYmlsaXR5L3BhY2thZ2VMZXZlbFRvcHMvc3JjL3BhY2thZ2UyL0NsaWVudC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vdmlzaWJpbGl0eS9wYWNrYWdlTGV2ZWxUb3BzL3NyYy9wYWNrYWdlMi9DbGllbnQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YjU1ZGUzCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vdmlzaWJpbGl0eS9wYWNrYWdlTGV2ZWxUb3BzL3NyYy9wYWNrYWdlMi9DbGllbnQuamF2YQpAQCAtMCwwICsxLDkgQEAKK3BhY2thZ2UgcGFja2FnZTI7CisKK2ltcG9ydCBwYWNrYWdlMS5QdWJsaWNTZXJ2ZXI7CisKK2NsYXNzIENsaWVudCB7CisgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZyBhcmdzW10pIHsKKyAgICBQdWJsaWNTZXJ2ZXIuZm9vKCk7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi92aXNpYmlsaXR5L3R5cGVBcmd1bWVudHMvZXhwZWN0ZWQueG1sIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vdmlzaWJpbGl0eS90eXBlQXJndW1lbnRzL2V4cGVjdGVkLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYzI3MmFiCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vdmlzaWJpbGl0eS90eXBlQXJndW1lbnRzL2V4cGVjdGVkLnhtbApAQCAtMCwwICsxLDMgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8cHJvYmxlbXMvPgorCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi92aXNpYmlsaXR5L3R5cGVBcmd1bWVudHMvc3JjL0Fic3RyYWN0U2V0dXAuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3Zpc2liaWxpdHkvdHlwZUFyZ3VtZW50cy9zcmMvQWJzdHJhY3RTZXR1cC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRmYzY0MmQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi92aXNpYmlsaXR5L3R5cGVBcmd1bWVudHMvc3JjL0Fic3RyYWN0U2V0dXAuamF2YQpAQCAtMCwwICsxLDE0IEBACitwdWJsaWMgYWJzdHJhY3QgY2xhc3MgQWJzdHJhY3RTZXR1cDxUIGV4dGVuZHMgQWJzdHJhY3RTZXR1cFBhcmFtcz4KK3sKKyAgIHByaXZhdGUgVCBwYXJhbWV0ZXJzOworCisgICBwdWJsaWMgVCBnZXRQYXJhbWV0ZXJzKCkKKyAgIHsKKyAgICAgIHJldHVybiBwYXJhbWV0ZXJzOworICAgfQorCisgICBwcm90ZWN0ZWQgdm9pZCBzZXRQYXJhbWV0ZXJzKFQgcFBhcmFtZXRlcnMpCisgICB7CisgICAgICBwYXJhbWV0ZXJzID0gcFBhcmFtZXRlcnM7CisgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi92aXNpYmlsaXR5L3R5cGVBcmd1bWVudHMvc3JjL0Fic3RyYWN0U2V0dXBQYXJhbXMuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3Zpc2liaWxpdHkvdHlwZUFyZ3VtZW50cy9zcmMvQWJzdHJhY3RTZXR1cFBhcmFtcy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFkYzAxMzcKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi92aXNpYmlsaXR5L3R5cGVBcmd1bWVudHMvc3JjL0Fic3RyYWN0U2V0dXBQYXJhbXMuamF2YQpAQCAtMCwwICsxLDMgQEAKK3B1YmxpYyBjbGFzcyBBYnN0cmFjdFNldHVwUGFyYW1zCit7Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi92aXNpYmlsaXR5L3R5cGVBcmd1bWVudHMvc3JjL0NoaWxkQ2xhc3MuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3Zpc2liaWxpdHkvdHlwZUFyZ3VtZW50cy9zcmMvQ2hpbGRDbGFzcy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRmNjczYjEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi92aXNpYmlsaXR5L3R5cGVBcmd1bWVudHMvc3JjL0NoaWxkQ2xhc3MuamF2YQpAQCAtMCwwICsxLDMzIEBACitwdWJsaWMgZmluYWwgY2xhc3MgQ2hpbGRDbGFzcyBleHRlbmRzIFN1cGVyY2xhc3M8Q2hpbGRDbGFzcy5QYXJhbSwgQ2hpbGRDbGFzcy5TZXR1cD4KK3sKKy8vIC0tLSBGSUVMRFMgLS0tCisKKyAgIHByaXZhdGUgQ2hpbGRDbGFzcygpCisgICB7CisKKworICAgfQorCisvLyAtLS0gT1RIRVIgTUVUSE9EUyAtLS0KKworICAgQE92ZXJyaWRlCisgICBwcm90ZWN0ZWQgU2V0dXAgY3JlYXRlSW5pdGlhbGl6ZXIoKQorICAgeworICAgICAgcmV0dXJuIG5ldyBDaGlsZENsYXNzLlNldHVwKCk7CisgICB9CisKKworICAgY2xhc3MgUGFyYW0gZXh0ZW5kcyBBYnN0cmFjdFNldHVwUGFyYW1zCisgICB7CisgICB9CisKKyAgIHByaXZhdGUgY2xhc3MgU2V0dXAgZXh0ZW5kcyBBYnN0cmFjdFNldHVwPFBhcmFtPgorICAgeworCisgICB9CisKKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7fQorCisgICAgCisKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi92aXNpYmlsaXR5L3R5cGVBcmd1bWVudHMvc3JjL1N1cGVyY2xhc3MuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3Zpc2liaWxpdHkvdHlwZUFyZ3VtZW50cy9zcmMvU3VwZXJjbGFzcy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM4OWM3NDEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi92aXNpYmlsaXR5L3R5cGVBcmd1bWVudHMvc3JjL1N1cGVyY2xhc3MuamF2YQpAQCAtMCwwICsxLDggQEAKK3B1YmxpYyBhYnN0cmFjdCBjbGFzcyBTdXBlcmNsYXNzPFRQYXJhbSBleHRlbmRzIEFic3RyYWN0U2V0dXBQYXJhbXMsIFRTZXR1cCBleHRlbmRzIEFic3RyYWN0U2V0dXA8VFBhcmFtPj4KK3sKKworCisgICBwcm90ZWN0ZWQgYWJzdHJhY3QgVFNldHVwIGNyZWF0ZUluaXRpYWxpemVyKCk7CisKKworfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vdmlzaWJpbGl0eS91c2VkRnJvbUFubm90YXRpb25zRXh0ZW5kc0xpc3QvZXhwZWN0ZWQueG1sIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2luc3BlY3Rpb24vdmlzaWJpbGl0eS91c2VkRnJvbUFubm90YXRpb25zRXh0ZW5kc0xpc3QvZXhwZWN0ZWQueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgxNTMyNDcKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi92aXNpYmlsaXR5L3VzZWRGcm9tQW5ub3RhdGlvbnNFeHRlbmRzTGlzdC9leHBlY3RlZC54bWwKQEAgLTAsMCArMSwyMiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxwcm9ibGVtcz4KKyAgPHByb2JsZW0+CisgICAgPGZpbGU+VGhpc0NsYXNzLmphdmE8L2ZpbGU+CisgICAgPGxpbmU+NTwvbGluZT4KKyAgICA8cHJvYmxlbV9jbGFzcyBzZXZlcml0eT0iV0FSTklORyIgYXR0cmlidXRlX2tleT0iV0FSTklOR19BVFRSSUJVVEVTIj5EZWNsYXJhdGlvbiBhY2Nlc3MgY2FuIGJlIHdlYWtlcjwvcHJvYmxlbV9jbGFzcz4KKyAgICA8aGludHM+CisgICAgICA8aGludCB2YWx1ZT0icGFja2FnZUxvY2FsIiAvPgorICAgIDwvaGludHM+CisgICAgPGRlc2NyaXB0aW9uPkNhbiBiZSBwYWNrYWdlIGxvY2FsPC9kZXNjcmlwdGlvbj4KKyAgPC9wcm9ibGVtPgorICA8cHJvYmxlbT4KKyAgICA8ZmlsZT5UaGlzQ2xhc3MuamF2YTwvZmlsZT4KKyAgICA8bGluZT40PC9saW5lPgorICAgIDxwcm9ibGVtX2NsYXNzIHNldmVyaXR5PSJXQVJOSU5HIiBhdHRyaWJ1dGVfa2V5PSJXQVJOSU5HX0FUVFJJQlVURVMiPkRlY2xhcmF0aW9uIGFjY2VzcyBjYW4gYmUgd2Vha2VyPC9wcm9ibGVtX2NsYXNzPgorICAgIDxoaW50cz4KKyAgICAgIDxoaW50IHZhbHVlPSJwYWNrYWdlTG9jYWwiIC8+CisgICAgPC9oaW50cz4KKyAgICA8ZGVzY3JpcHRpb24+Q2FuIGJlIHBhY2thZ2UgbG9jYWw8L2Rlc2NyaXB0aW9uPgorICA8L3Byb2JsZW0+Cis8L3Byb2JsZW1zPgorCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi92aXNpYmlsaXR5L3VzZWRGcm9tQW5ub3RhdGlvbnNFeHRlbmRzTGlzdC9zcmMvVGhpc0NsYXNzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvaW5zcGVjdGlvbi92aXNpYmlsaXR5L3VzZWRGcm9tQW5ub3RhdGlvbnNFeHRlbmRzTGlzdC9zcmMvVGhpc0NsYXNzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjc0MzNmMgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9pbnNwZWN0aW9uL3Zpc2liaWxpdHkvdXNlZEZyb21Bbm5vdGF0aW9uc0V4dGVuZHNMaXN0L3NyYy9UaGlzQ2xhc3MuamF2YQpAQCAtMCwwICsxLDkgQEAKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworQFN1cHByZXNzV2FybmluZ3MoVGhpc0NsYXNzLlBVQkxJQ0ZJTkFMTkFNRSkKK3B1YmxpYyBjbGFzcyBUaGlzQ2xhc3MgZXh0ZW5kcyBBcnJheUxpc3Q8VGhpc0NsYXNzLkZGPiB7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUFVCTElDRklOQUxOQU1FID0gInN0dWZmIjsKKyAgICBwdWJsaWMgc3RhdGljIGNsYXNzIEZGIHt9CisKKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9saWJSZXNvbHZlL2NsYXNzZXNBbmRTb3VyY2VzL2NsYXNzZXNBbmRTb3VyY2VzLmphciBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9saWJSZXNvbHZlL2NsYXNzZXNBbmRTb3VyY2VzL2NsYXNzZXNBbmRTb3VyY2VzLmphcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNGNmMTE5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2xpYlJlc29sdmUvY2xhc3Nlc0FuZFNvdXJjZXMvY2xhc3Nlc0FuZFNvdXJjZXMuamFyCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9saWJSZXNvbHZlL2luaGVyaXRhbmNlL2Z1bGxMaWJyYXJ5LmphciBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9saWJSZXNvbHZlL2luaGVyaXRhbmNlL2Z1bGxMaWJyYXJ5LmphcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYjhiZTdhCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL2xpYlJlc29sdmUvaW5oZXJpdGFuY2UvZnVsbExpYnJhcnkuamFyCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9saWJSZXNvbHZlL2luaGVyaXRhbmNlL21pZGRsZUJvdHRvbS5qYXIgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvbGliUmVzb2x2ZS9pbmhlcml0YW5jZS9taWRkbGVCb3R0b20uamFyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJmZTNlNTEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvbGliUmVzb2x2ZS9pbmhlcml0YW5jZS9taWRkbGVCb3R0b20uamFyCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9tb2RlbC9Nb2RlbC5pbWwgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvbW9kZWwvTW9kZWwuaW1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ1YzA3NDMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvbW9kZWwvTW9kZWwuaW1sCkBAIC0wLDAgKzEsMTIgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8bW9kdWxlIHR5cGU9IkpBVkFfTU9EVUxFIiB2ZXJzaW9uPSI0Ij4KKyAgPGNvbXBvbmVudCBuYW1lPSJOZXdNb2R1bGVSb290TWFuYWdlciIgaW5oZXJpdC1jb21waWxlci1vdXRwdXQ9InRydWUiPgorICAgIDxleGNsdWRlLW91dHB1dCAvPgorICAgIDxjb250ZW50IHVybD0iZmlsZTovLyRNT0RVTEVfRElSJCI+CisgICAgICA8c291cmNlRm9sZGVyIHVybD0iZmlsZTovLyRNT0RVTEVfRElSJC9zcmMiIGlzVGVzdFNvdXJjZT0iZmFsc2UiIC8+CisgICAgPC9jb250ZW50PgorICAgIDxvcmRlckVudHJ5IHR5cGU9ImluaGVyaXRlZEpkayIgLz4KKyAgICA8b3JkZXJFbnRyeSB0eXBlPSJzb3VyY2VGb2xkZXIiIGZvclRlc3RzPSJmYWxzZSIgLz4KKyAgPC9jb21wb25lbnQ+Cis8L21vZHVsZT4KKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL21vZGVsL21vZGVsLmlwciBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9tb2RlbC9tb2RlbC5pcHIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWJjYzMyZQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9tb2RlbC9tb2RlbC5pcHIKQEAgLTAsMCArMSwxNzcgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8cHJvamVjdCB2ZXJzaW9uPSI0Ij4KKyAgPGNvbXBvbmVudCBuYW1lPSJDb21waWxlckNvbmZpZ3VyYXRpb24iPgorICAgIDxvcHRpb24gbmFtZT0iREVGQVVMVF9DT01QSUxFUiIgdmFsdWU9IkphdmFjIiAvPgorICAgIDxyZXNvdXJjZUV4dGVuc2lvbnMgLz4KKyAgICA8d2lsZGNhcmRSZXNvdXJjZVBhdHRlcm5zPgorICAgICAgPGVudHJ5IG5hbWU9Ij8qLnByb3BlcnRpZXMiIC8+CisgICAgICA8ZW50cnkgbmFtZT0iPyoueG1sIiAvPgorICAgICAgPGVudHJ5IG5hbWU9Ij8qLmdpZiIgLz4KKyAgICAgIDxlbnRyeSBuYW1lPSI/Ki5wbmciIC8+CisgICAgICA8ZW50cnkgbmFtZT0iPyouanBlZyIgLz4KKyAgICAgIDxlbnRyeSBuYW1lPSI/Ki5qcGciIC8+CisgICAgICA8ZW50cnkgbmFtZT0iPyouaHRtbCIgLz4KKyAgICAgIDxlbnRyeSBuYW1lPSI/Ki5kdGQiIC8+CisgICAgICA8ZW50cnkgbmFtZT0iPyoudGxkIiAvPgorICAgICAgPGVudHJ5IG5hbWU9Ij8qLmZ0bCIgLz4KKyAgICA8L3dpbGRjYXJkUmVzb3VyY2VQYXR0ZXJucz4KKyAgICA8YW5ub3RhdGlvblByb2Nlc3NpbmcgZW5hYmxlZD0iZmFsc2UiIHVzZUNsYXNzcGF0aD0idHJ1ZSIgLz4KKyAgPC9jb21wb25lbnQ+CisgIDxjb21wb25lbnQgbmFtZT0iRGVwZW5kZW5jeVZhbGlkYXRpb25NYW5hZ2VyIj4KKyAgICA8b3B0aW9uIG5hbWU9IlNLSVBfSU1QT1JUX1NUQVRFTUVOVFMiIHZhbHVlPSJmYWxzZSIgLz4KKyAgPC9jb21wb25lbnQ+CisgIDxjb21wb25lbnQgbmFtZT0iRW5jb2RpbmciIHVzZVVURkd1ZXNzaW5nPSJ0cnVlIiBuYXRpdmUyQXNjaWlGb3JQcm9wZXJ0aWVzRmlsZXM9ImZhbHNlIiAvPgorICA8Y29tcG9uZW50IG5hbWU9IkVudHJ5UG9pbnRzTWFuYWdlciI+CisgICAgPGVudHJ5X3BvaW50cyB2ZXJzaW9uPSIyLjAiIC8+CisgIDwvY29tcG9uZW50PgorICA8Y29tcG9uZW50IG5hbWU9IlBhbGV0dGUyIj4KKyAgICA8Z3JvdXAgbmFtZT0iU3dpbmciPgorICAgICAgPGl0ZW0gY2xhc3M9ImNvbS5pbnRlbGxpai51aURlc2lnbmVyLkhTcGFjZXIiIHRvb2x0aXAtdGV4dD0iSG9yaXpvbnRhbCBTcGFjZXIiIGljb249Ii9jb20vaW50ZWxsaWovdWlEZXNpZ25lci9pY29ucy9oc3BhY2VyLnBuZyIgcmVtb3ZhYmxlPSJmYWxzZSIgYXV0by1jcmVhdGUtYmluZGluZz0iZmFsc2UiIGNhbi1hdHRhY2gtbGFiZWw9ImZhbHNlIj4KKyAgICAgICAgPGRlZmF1bHQtY29uc3RyYWludHMgdnNpemUtcG9saWN5PSIxIiBoc2l6ZS1wb2xpY3k9IjYiIGFuY2hvcj0iMCIgZmlsbD0iMSIgLz4KKyAgICAgIDwvaXRlbT4KKyAgICAgIDxpdGVtIGNsYXNzPSJjb20uaW50ZWxsaWoudWlEZXNpZ25lci5WU3BhY2VyIiB0b29sdGlwLXRleHQ9IlZlcnRpY2FsIFNwYWNlciIgaWNvbj0iL2NvbS9pbnRlbGxpai91aURlc2lnbmVyL2ljb25zL3ZzcGFjZXIucG5nIiByZW1vdmFibGU9ImZhbHNlIiBhdXRvLWNyZWF0ZS1iaW5kaW5nPSJmYWxzZSIgY2FuLWF0dGFjaC1sYWJlbD0iZmFsc2UiPgorICAgICAgICA8ZGVmYXVsdC1jb25zdHJhaW50cyB2c2l6ZS1wb2xpY3k9IjYiIGhzaXplLXBvbGljeT0iMSIgYW5jaG9yPSIwIiBmaWxsPSIyIiAvPgorICAgICAgPC9pdGVtPgorICAgICAgPGl0ZW0gY2xhc3M9ImphdmF4LnN3aW5nLkpQYW5lbCIgaWNvbj0iL2NvbS9pbnRlbGxpai91aURlc2lnbmVyL2ljb25zL3BhbmVsLnBuZyIgcmVtb3ZhYmxlPSJmYWxzZSIgYXV0by1jcmVhdGUtYmluZGluZz0iZmFsc2UiIGNhbi1hdHRhY2gtbGFiZWw9ImZhbHNlIj4KKyAgICAgICAgPGRlZmF1bHQtY29uc3RyYWludHMgdnNpemUtcG9saWN5PSIzIiBoc2l6ZS1wb2xpY3k9IjMiIGFuY2hvcj0iMCIgZmlsbD0iMyIgLz4KKyAgICAgIDwvaXRlbT4KKyAgICAgIDxpdGVtIGNsYXNzPSJqYXZheC5zd2luZy5KU2Nyb2xsUGFuZSIgaWNvbj0iL2NvbS9pbnRlbGxpai91aURlc2lnbmVyL2ljb25zL3Njcm9sbFBhbmUucG5nIiByZW1vdmFibGU9ImZhbHNlIiBhdXRvLWNyZWF0ZS1iaW5kaW5nPSJmYWxzZSIgY2FuLWF0dGFjaC1sYWJlbD0idHJ1ZSI+CisgICAgICAgIDxkZWZhdWx0LWNvbnN0cmFpbnRzIHZzaXplLXBvbGljeT0iNyIgaHNpemUtcG9saWN5PSI3IiBhbmNob3I9IjAiIGZpbGw9IjMiIC8+CisgICAgICA8L2l0ZW0+CisgICAgICA8aXRlbSBjbGFzcz0iamF2YXguc3dpbmcuSkJ1dHRvbiIgaWNvbj0iL2NvbS9pbnRlbGxpai91aURlc2lnbmVyL2ljb25zL2J1dHRvbi5wbmciIHJlbW92YWJsZT0iZmFsc2UiIGF1dG8tY3JlYXRlLWJpbmRpbmc9InRydWUiIGNhbi1hdHRhY2gtbGFiZWw9ImZhbHNlIj4KKyAgICAgICAgPGRlZmF1bHQtY29uc3RyYWludHMgdnNpemUtcG9saWN5PSIwIiBoc2l6ZS1wb2xpY3k9IjMiIGFuY2hvcj0iMCIgZmlsbD0iMSIgLz4KKyAgICAgICAgPGluaXRpYWwtdmFsdWVzPgorICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ0ZXh0IiB2YWx1ZT0iQnV0dG9uIiAvPgorICAgICAgICA8L2luaXRpYWwtdmFsdWVzPgorICAgICAgPC9pdGVtPgorICAgICAgPGl0ZW0gY2xhc3M9ImphdmF4LnN3aW5nLkpSYWRpb0J1dHRvbiIgaWNvbj0iL2NvbS9pbnRlbGxpai91aURlc2lnbmVyL2ljb25zL3JhZGlvQnV0dG9uLnBuZyIgcmVtb3ZhYmxlPSJmYWxzZSIgYXV0by1jcmVhdGUtYmluZGluZz0idHJ1ZSIgY2FuLWF0dGFjaC1sYWJlbD0iZmFsc2UiPgorICAgICAgICA8ZGVmYXVsdC1jb25zdHJhaW50cyB2c2l6ZS1wb2xpY3k9IjAiIGhzaXplLXBvbGljeT0iMyIgYW5jaG9yPSI4IiBmaWxsPSIwIiAvPgorICAgICAgICA8aW5pdGlhbC12YWx1ZXM+CisgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InRleHQiIHZhbHVlPSJSYWRpb0J1dHRvbiIgLz4KKyAgICAgICAgPC9pbml0aWFsLXZhbHVlcz4KKyAgICAgIDwvaXRlbT4KKyAgICAgIDxpdGVtIGNsYXNzPSJqYXZheC5zd2luZy5KQ2hlY2tCb3giIGljb249Ii9jb20vaW50ZWxsaWovdWlEZXNpZ25lci9pY29ucy9jaGVja0JveC5wbmciIHJlbW92YWJsZT0iZmFsc2UiIGF1dG8tY3JlYXRlLWJpbmRpbmc9InRydWUiIGNhbi1hdHRhY2gtbGFiZWw9ImZhbHNlIj4KKyAgICAgICAgPGRlZmF1bHQtY29uc3RyYWludHMgdnNpemUtcG9saWN5PSIwIiBoc2l6ZS1wb2xpY3k9IjMiIGFuY2hvcj0iOCIgZmlsbD0iMCIgLz4KKyAgICAgICAgPGluaXRpYWwtdmFsdWVzPgorICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ0ZXh0IiB2YWx1ZT0iQ2hlY2tCb3giIC8+CisgICAgICAgIDwvaW5pdGlhbC12YWx1ZXM+CisgICAgICA8L2l0ZW0+CisgICAgICA8aXRlbSBjbGFzcz0iamF2YXguc3dpbmcuSkxhYmVsIiBpY29uPSIvY29tL2ludGVsbGlqL3VpRGVzaWduZXIvaWNvbnMvbGFiZWwucG5nIiByZW1vdmFibGU9ImZhbHNlIiBhdXRvLWNyZWF0ZS1iaW5kaW5nPSJmYWxzZSIgY2FuLWF0dGFjaC1sYWJlbD0iZmFsc2UiPgorICAgICAgICA8ZGVmYXVsdC1jb25zdHJhaW50cyB2c2l6ZS1wb2xpY3k9IjAiIGhzaXplLXBvbGljeT0iMCIgYW5jaG9yPSI4IiBmaWxsPSIwIiAvPgorICAgICAgICA8aW5pdGlhbC12YWx1ZXM+CisgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InRleHQiIHZhbHVlPSJMYWJlbCIgLz4KKyAgICAgICAgPC9pbml0aWFsLXZhbHVlcz4KKyAgICAgIDwvaXRlbT4KKyAgICAgIDxpdGVtIGNsYXNzPSJqYXZheC5zd2luZy5KVGV4dEZpZWxkIiBpY29uPSIvY29tL2ludGVsbGlqL3VpRGVzaWduZXIvaWNvbnMvdGV4dEZpZWxkLnBuZyIgcmVtb3ZhYmxlPSJmYWxzZSIgYXV0by1jcmVhdGUtYmluZGluZz0idHJ1ZSIgY2FuLWF0dGFjaC1sYWJlbD0idHJ1ZSI+CisgICAgICAgIDxkZWZhdWx0LWNvbnN0cmFpbnRzIHZzaXplLXBvbGljeT0iMCIgaHNpemUtcG9saWN5PSI2IiBhbmNob3I9IjgiIGZpbGw9IjEiPgorICAgICAgICAgIDxwcmVmZXJyZWQtc2l6ZSB3aWR0aD0iMTUwIiBoZWlnaHQ9Ii0xIiAvPgorICAgICAgICA8L2RlZmF1bHQtY29uc3RyYWludHM+CisgICAgICA8L2l0ZW0+CisgICAgICA8aXRlbSBjbGFzcz0iamF2YXguc3dpbmcuSlBhc3N3b3JkRmllbGQiIGljb249Ii9jb20vaW50ZWxsaWovdWlEZXNpZ25lci9pY29ucy9wYXNzd29yZEZpZWxkLnBuZyIgcmVtb3ZhYmxlPSJmYWxzZSIgYXV0by1jcmVhdGUtYmluZGluZz0idHJ1ZSIgY2FuLWF0dGFjaC1sYWJlbD0idHJ1ZSI+CisgICAgICAgIDxkZWZhdWx0LWNvbnN0cmFpbnRzIHZzaXplLXBvbGljeT0iMCIgaHNpemUtcG9saWN5PSI2IiBhbmNob3I9IjgiIGZpbGw9IjEiPgorICAgICAgICAgIDxwcmVmZXJyZWQtc2l6ZSB3aWR0aD0iMTUwIiBoZWlnaHQ9Ii0xIiAvPgorICAgICAgICA8L2RlZmF1bHQtY29uc3RyYWludHM+CisgICAgICA8L2l0ZW0+CisgICAgICA8aXRlbSBjbGFzcz0iamF2YXguc3dpbmcuSkZvcm1hdHRlZFRleHRGaWVsZCIgaWNvbj0iL2NvbS9pbnRlbGxpai91aURlc2lnbmVyL2ljb25zL2Zvcm1hdHRlZFRleHRGaWVsZC5wbmciIHJlbW92YWJsZT0iZmFsc2UiIGF1dG8tY3JlYXRlLWJpbmRpbmc9InRydWUiIGNhbi1hdHRhY2gtbGFiZWw9InRydWUiPgorICAgICAgICA8ZGVmYXVsdC1jb25zdHJhaW50cyB2c2l6ZS1wb2xpY3k9IjAiIGhzaXplLXBvbGljeT0iNiIgYW5jaG9yPSI4IiBmaWxsPSIxIj4KKyAgICAgICAgICA8cHJlZmVycmVkLXNpemUgd2lkdGg9IjE1MCIgaGVpZ2h0PSItMSIgLz4KKyAgICAgICAgPC9kZWZhdWx0LWNvbnN0cmFpbnRzPgorICAgICAgPC9pdGVtPgorICAgICAgPGl0ZW0gY2xhc3M9ImphdmF4LnN3aW5nLkpUZXh0QXJlYSIgaWNvbj0iL2NvbS9pbnRlbGxpai91aURlc2lnbmVyL2ljb25zL3RleHRBcmVhLnBuZyIgcmVtb3ZhYmxlPSJmYWxzZSIgYXV0by1jcmVhdGUtYmluZGluZz0idHJ1ZSIgY2FuLWF0dGFjaC1sYWJlbD0idHJ1ZSI+CisgICAgICAgIDxkZWZhdWx0LWNvbnN0cmFpbnRzIHZzaXplLXBvbGljeT0iNiIgaHNpemUtcG9saWN5PSI2IiBhbmNob3I9IjAiIGZpbGw9IjMiPgorICAgICAgICAgIDxwcmVmZXJyZWQtc2l6ZSB3aWR0aD0iMTUwIiBoZWlnaHQ9IjUwIiAvPgorICAgICAgICA8L2RlZmF1bHQtY29uc3RyYWludHM+CisgICAgICA8L2l0ZW0+CisgICAgICA8aXRlbSBjbGFzcz0iamF2YXguc3dpbmcuSlRleHRQYW5lIiBpY29uPSIvY29tL2ludGVsbGlqL3VpRGVzaWduZXIvaWNvbnMvdGV4dFBhbmUucG5nIiByZW1vdmFibGU9ImZhbHNlIiBhdXRvLWNyZWF0ZS1iaW5kaW5nPSJ0cnVlIiBjYW4tYXR0YWNoLWxhYmVsPSJ0cnVlIj4KKyAgICAgICAgPGRlZmF1bHQtY29uc3RyYWludHMgdnNpemUtcG9saWN5PSI2IiBoc2l6ZS1wb2xpY3k9IjYiIGFuY2hvcj0iMCIgZmlsbD0iMyI+CisgICAgICAgICAgPHByZWZlcnJlZC1zaXplIHdpZHRoPSIxNTAiIGhlaWdodD0iNTAiIC8+CisgICAgICAgIDwvZGVmYXVsdC1jb25zdHJhaW50cz4KKyAgICAgIDwvaXRlbT4KKyAgICAgIDxpdGVtIGNsYXNzPSJqYXZheC5zd2luZy5KRWRpdG9yUGFuZSIgaWNvbj0iL2NvbS9pbnRlbGxpai91aURlc2lnbmVyL2ljb25zL2VkaXRvclBhbmUucG5nIiByZW1vdmFibGU9ImZhbHNlIiBhdXRvLWNyZWF0ZS1iaW5kaW5nPSJ0cnVlIiBjYW4tYXR0YWNoLWxhYmVsPSJ0cnVlIj4KKyAgICAgICAgPGRlZmF1bHQtY29uc3RyYWludHMgdnNpemUtcG9saWN5PSI2IiBoc2l6ZS1wb2xpY3k9IjYiIGFuY2hvcj0iMCIgZmlsbD0iMyI+CisgICAgICAgICAgPHByZWZlcnJlZC1zaXplIHdpZHRoPSIxNTAiIGhlaWdodD0iNTAiIC8+CisgICAgICAgIDwvZGVmYXVsdC1jb25zdHJhaW50cz4KKyAgICAgIDwvaXRlbT4KKyAgICAgIDxpdGVtIGNsYXNzPSJqYXZheC5zd2luZy5KQ29tYm9Cb3giIGljb249Ii9jb20vaW50ZWxsaWovdWlEZXNpZ25lci9pY29ucy9jb21ib0JveC5wbmciIHJlbW92YWJsZT0iZmFsc2UiIGF1dG8tY3JlYXRlLWJpbmRpbmc9InRydWUiIGNhbi1hdHRhY2gtbGFiZWw9InRydWUiPgorICAgICAgICA8ZGVmYXVsdC1jb25zdHJhaW50cyB2c2l6ZS1wb2xpY3k9IjAiIGhzaXplLXBvbGljeT0iMiIgYW5jaG9yPSI4IiBmaWxsPSIxIiAvPgorICAgICAgPC9pdGVtPgorICAgICAgPGl0ZW0gY2xhc3M9ImphdmF4LnN3aW5nLkpUYWJsZSIgaWNvbj0iL2NvbS9pbnRlbGxpai91aURlc2lnbmVyL2ljb25zL3RhYmxlLnBuZyIgcmVtb3ZhYmxlPSJmYWxzZSIgYXV0by1jcmVhdGUtYmluZGluZz0idHJ1ZSIgY2FuLWF0dGFjaC1sYWJlbD0iZmFsc2UiPgorICAgICAgICA8ZGVmYXVsdC1jb25zdHJhaW50cyB2c2l6ZS1wb2xpY3k9IjYiIGhzaXplLXBvbGljeT0iNiIgYW5jaG9yPSIwIiBmaWxsPSIzIj4KKyAgICAgICAgICA8cHJlZmVycmVkLXNpemUgd2lkdGg9IjE1MCIgaGVpZ2h0PSI1MCIgLz4KKyAgICAgICAgPC9kZWZhdWx0LWNvbnN0cmFpbnRzPgorICAgICAgPC9pdGVtPgorICAgICAgPGl0ZW0gY2xhc3M9ImphdmF4LnN3aW5nLkpMaXN0IiBpY29uPSIvY29tL2ludGVsbGlqL3VpRGVzaWduZXIvaWNvbnMvbGlzdC5wbmciIHJlbW92YWJsZT0iZmFsc2UiIGF1dG8tY3JlYXRlLWJpbmRpbmc9InRydWUiIGNhbi1hdHRhY2gtbGFiZWw9ImZhbHNlIj4KKyAgICAgICAgPGRlZmF1bHQtY29uc3RyYWludHMgdnNpemUtcG9saWN5PSI2IiBoc2l6ZS1wb2xpY3k9IjIiIGFuY2hvcj0iMCIgZmlsbD0iMyI+CisgICAgICAgICAgPHByZWZlcnJlZC1zaXplIHdpZHRoPSIxNTAiIGhlaWdodD0iNTAiIC8+CisgICAgICAgIDwvZGVmYXVsdC1jb25zdHJhaW50cz4KKyAgICAgIDwvaXRlbT4KKyAgICAgIDxpdGVtIGNsYXNzPSJqYXZheC5zd2luZy5KVHJlZSIgaWNvbj0iL2NvbS9pbnRlbGxpai91aURlc2lnbmVyL2ljb25zL3RyZWUucG5nIiByZW1vdmFibGU9ImZhbHNlIiBhdXRvLWNyZWF0ZS1iaW5kaW5nPSJ0cnVlIiBjYW4tYXR0YWNoLWxhYmVsPSJmYWxzZSI+CisgICAgICAgIDxkZWZhdWx0LWNvbnN0cmFpbnRzIHZzaXplLXBvbGljeT0iNiIgaHNpemUtcG9saWN5PSI2IiBhbmNob3I9IjAiIGZpbGw9IjMiPgorICAgICAgICAgIDxwcmVmZXJyZWQtc2l6ZSB3aWR0aD0iMTUwIiBoZWlnaHQ9IjUwIiAvPgorICAgICAgICA8L2RlZmF1bHQtY29uc3RyYWludHM+CisgICAgICA8L2l0ZW0+CisgICAgICA8aXRlbSBjbGFzcz0iamF2YXguc3dpbmcuSlRhYmJlZFBhbmUiIGljb249Ii9jb20vaW50ZWxsaWovdWlEZXNpZ25lci9pY29ucy90YWJiZWRQYW5lLnBuZyIgcmVtb3ZhYmxlPSJmYWxzZSIgYXV0by1jcmVhdGUtYmluZGluZz0idHJ1ZSIgY2FuLWF0dGFjaC1sYWJlbD0iZmFsc2UiPgorICAgICAgICA8ZGVmYXVsdC1jb25zdHJhaW50cyB2c2l6ZS1wb2xpY3k9IjMiIGhzaXplLXBvbGljeT0iMyIgYW5jaG9yPSIwIiBmaWxsPSIzIj4KKyAgICAgICAgICA8cHJlZmVycmVkLXNpemUgd2lkdGg9IjIwMCIgaGVpZ2h0PSIyMDAiIC8+CisgICAgICAgIDwvZGVmYXVsdC1jb25zdHJhaW50cz4KKyAgICAgIDwvaXRlbT4KKyAgICAgIDxpdGVtIGNsYXNzPSJqYXZheC5zd2luZy5KU3BsaXRQYW5lIiBpY29uPSIvY29tL2ludGVsbGlqL3VpRGVzaWduZXIvaWNvbnMvc3BsaXRQYW5lLnBuZyIgcmVtb3ZhYmxlPSJmYWxzZSIgYXV0by1jcmVhdGUtYmluZGluZz0iZmFsc2UiIGNhbi1hdHRhY2gtbGFiZWw9ImZhbHNlIj4KKyAgICAgICAgPGRlZmF1bHQtY29uc3RyYWludHMgdnNpemUtcG9saWN5PSIzIiBoc2l6ZS1wb2xpY3k9IjMiIGFuY2hvcj0iMCIgZmlsbD0iMyI+CisgICAgICAgICAgPHByZWZlcnJlZC1zaXplIHdpZHRoPSIyMDAiIGhlaWdodD0iMjAwIiAvPgorICAgICAgICA8L2RlZmF1bHQtY29uc3RyYWludHM+CisgICAgICA8L2l0ZW0+CisgICAgICA8aXRlbSBjbGFzcz0iamF2YXguc3dpbmcuSlNwaW5uZXIiIGljb249Ii9jb20vaW50ZWxsaWovdWlEZXNpZ25lci9pY29ucy9zcGlubmVyLnBuZyIgcmVtb3ZhYmxlPSJmYWxzZSIgYXV0by1jcmVhdGUtYmluZGluZz0idHJ1ZSIgY2FuLWF0dGFjaC1sYWJlbD0idHJ1ZSI+CisgICAgICAgIDxkZWZhdWx0LWNvbnN0cmFpbnRzIHZzaXplLXBvbGljeT0iMCIgaHNpemUtcG9saWN5PSI2IiBhbmNob3I9IjgiIGZpbGw9IjEiIC8+CisgICAgICA8L2l0ZW0+CisgICAgICA8aXRlbSBjbGFzcz0iamF2YXguc3dpbmcuSlNsaWRlciIgaWNvbj0iL2NvbS9pbnRlbGxpai91aURlc2lnbmVyL2ljb25zL3NsaWRlci5wbmciIHJlbW92YWJsZT0iZmFsc2UiIGF1dG8tY3JlYXRlLWJpbmRpbmc9InRydWUiIGNhbi1hdHRhY2gtbGFiZWw9ImZhbHNlIj4KKyAgICAgICAgPGRlZmF1bHQtY29uc3RyYWludHMgdnNpemUtcG9saWN5PSIwIiBoc2l6ZS1wb2xpY3k9IjYiIGFuY2hvcj0iOCIgZmlsbD0iMSIgLz4KKyAgICAgIDwvaXRlbT4KKyAgICAgIDxpdGVtIGNsYXNzPSJqYXZheC5zd2luZy5KU2VwYXJhdG9yIiBpY29uPSIvY29tL2ludGVsbGlqL3VpRGVzaWduZXIvaWNvbnMvc2VwYXJhdG9yLnBuZyIgcmVtb3ZhYmxlPSJmYWxzZSIgYXV0by1jcmVhdGUtYmluZGluZz0iZmFsc2UiIGNhbi1hdHRhY2gtbGFiZWw9ImZhbHNlIj4KKyAgICAgICAgPGRlZmF1bHQtY29uc3RyYWludHMgdnNpemUtcG9saWN5PSI2IiBoc2l6ZS1wb2xpY3k9IjYiIGFuY2hvcj0iMCIgZmlsbD0iMyIgLz4KKyAgICAgIDwvaXRlbT4KKyAgICAgIDxpdGVtIGNsYXNzPSJqYXZheC5zd2luZy5KUHJvZ3Jlc3NCYXIiIGljb249Ii9jb20vaW50ZWxsaWovdWlEZXNpZ25lci9pY29ucy9wcm9ncmVzc2Jhci5wbmciIHJlbW92YWJsZT0iZmFsc2UiIGF1dG8tY3JlYXRlLWJpbmRpbmc9InRydWUiIGNhbi1hdHRhY2gtbGFiZWw9ImZhbHNlIj4KKyAgICAgICAgPGRlZmF1bHQtY29uc3RyYWludHMgdnNpemUtcG9saWN5PSIwIiBoc2l6ZS1wb2xpY3k9IjYiIGFuY2hvcj0iMCIgZmlsbD0iMSIgLz4KKyAgICAgIDwvaXRlbT4KKyAgICAgIDxpdGVtIGNsYXNzPSJqYXZheC5zd2luZy5KVG9vbEJhciIgaWNvbj0iL2NvbS9pbnRlbGxpai91aURlc2lnbmVyL2ljb25zL3Rvb2xiYXIucG5nIiByZW1vdmFibGU9ImZhbHNlIiBhdXRvLWNyZWF0ZS1iaW5kaW5nPSJmYWxzZSIgY2FuLWF0dGFjaC1sYWJlbD0iZmFsc2UiPgorICAgICAgICA8ZGVmYXVsdC1jb25zdHJhaW50cyB2c2l6ZS1wb2xpY3k9IjAiIGhzaXplLXBvbGljeT0iNiIgYW5jaG9yPSIwIiBmaWxsPSIxIj4KKyAgICAgICAgICA8cHJlZmVycmVkLXNpemUgd2lkdGg9Ii0xIiBoZWlnaHQ9IjIwIiAvPgorICAgICAgICA8L2RlZmF1bHQtY29uc3RyYWludHM+CisgICAgICA8L2l0ZW0+CisgICAgICA8aXRlbSBjbGFzcz0iamF2YXguc3dpbmcuSlRvb2xCYXIkU2VwYXJhdG9yIiBpY29uPSIvY29tL2ludGVsbGlqL3VpRGVzaWduZXIvaWNvbnMvdG9vbGJhclNlcGFyYXRvci5wbmciIHJlbW92YWJsZT0iZmFsc2UiIGF1dG8tY3JlYXRlLWJpbmRpbmc9ImZhbHNlIiBjYW4tYXR0YWNoLWxhYmVsPSJmYWxzZSI+CisgICAgICAgIDxkZWZhdWx0LWNvbnN0cmFpbnRzIHZzaXplLXBvbGljeT0iMCIgaHNpemUtcG9saWN5PSIwIiBhbmNob3I9IjAiIGZpbGw9IjEiIC8+CisgICAgICA8L2l0ZW0+CisgICAgICA8aXRlbSBjbGFzcz0iamF2YXguc3dpbmcuSlNjcm9sbEJhciIgaWNvbj0iL2NvbS9pbnRlbGxpai91aURlc2lnbmVyL2ljb25zL3Njcm9sbGJhci5wbmciIHJlbW92YWJsZT0iZmFsc2UiIGF1dG8tY3JlYXRlLWJpbmRpbmc9InRydWUiIGNhbi1hdHRhY2gtbGFiZWw9ImZhbHNlIj4KKyAgICAgICAgPGRlZmF1bHQtY29uc3RyYWludHMgdnNpemUtcG9saWN5PSI2IiBoc2l6ZS1wb2xpY3k9IjAiIGFuY2hvcj0iMCIgZmlsbD0iMiIgLz4KKyAgICAgIDwvaXRlbT4KKyAgICA8L2dyb3VwPgorICA8L2NvbXBvbmVudD4KKyAgPGNvbXBvbmVudCBuYW1lPSJQcm9qZWN0TW9kdWxlTWFuYWdlciI+CisgICAgPG1vZHVsZXM+CisgICAgICA8bW9kdWxlIGZpbGV1cmw9ImZpbGU6Ly8kUFJPSkVDVF9ESVIkL01vZGVsLmltbCIgZmlsZXBhdGg9IiRQUk9KRUNUX0RJUiQvTW9kZWwuaW1sIiAvPgorICAgIDwvbW9kdWxlcz4KKyAgPC9jb21wb25lbnQ+CisgIDxjb21wb25lbnQgbmFtZT0iUHJvamVjdFJvb3RNYW5hZ2VyIiB2ZXJzaW9uPSIyIiBsYW5ndWFnZUxldmVsPSJKREtfMV82IiBhc3NlcnQta2V5d29yZD0idHJ1ZSIgamRrLTE1PSJ0cnVlIiBwcm9qZWN0LWpkay1uYW1lPSIxLjcgKDEpIiBwcm9qZWN0LWpkay10eXBlPSJKYXZhU0RLIj4KKyAgICA8b3V0cHV0IHVybD0iZmlsZTovLyRQUk9KRUNUX0RJUiQvb3V0IiAvPgorICA8L2NvbXBvbmVudD4KKyAgPGNvbXBvbmVudCBuYW1lPSJWY3NEaXJlY3RvcnlNYXBwaW5ncyI+CisgICAgPG1hcHBpbmcgZGlyZWN0b3J5PSIiIHZjcz0iIiAvPgorICA8L2NvbXBvbmVudD4KKyAgPGNvbXBvbmVudCBuYW1lPSJXZWJTZXJ2aWNlc1BsdWdpbiIgYWRkUmVxdWlyZWRMaWJyYXJpZXM9InRydWUiIC8+CisgIDxjb21wb25lbnQgbmFtZT0ibWFzdGVyRGV0YWlscyI+CisgICAgPHN0YXRlcz4KKyAgICAgIDxzdGF0ZSBrZXk9IlByb2plY3RKREtzLlVJIj4KKyAgICAgICAgPHNldHRpbmdzPgorICAgICAgICAgIDxsYXN0LWVkaXRlZD4xLjY8L2xhc3QtZWRpdGVkPgorICAgICAgICAgIDxzcGxpdHRlci1wcm9wb3J0aW9ucz4KKyAgICAgICAgICAgIDxvcHRpb24gbmFtZT0icHJvcG9ydGlvbnMiPgorICAgICAgICAgICAgICA8bGlzdD4KKyAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSIwLjIiIC8+CisgICAgICAgICAgICAgIDwvbGlzdD4KKyAgICAgICAgICAgIDwvb3B0aW9uPgorICAgICAgICAgIDwvc3BsaXR0ZXItcHJvcG9ydGlvbnM+CisgICAgICAgIDwvc2V0dGluZ3M+CisgICAgICA8L3N0YXRlPgorICAgIDwvc3RhdGVzPgorICA8L2NvbXBvbmVudD4KKzwvcHJvamVjdD4KKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL21vZGVsL21vZGVsLml3cyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9tb2RlbC9tb2RlbC5pd3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjliNTkzNzkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvbW9kZWwvbW9kZWwuaXdzCkBAIC0wLDAgKzEsMzQwIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHByb2plY3QgdmVyc2lvbj0iNCI+CisgIDxjb21wb25lbnQgbmFtZT0iQ2hhbmdlTGlzdE1hbmFnZXIiPgorICAgIDxsaXN0IGRlZmF1bHQ9InRydWUiIGlkPSIwYzNjNzRhZS0zODFlLTRkNzEtOWY4MC00MzU2YTJhMTYzOGEiIG5hbWU9IkRlZmF1bHQiIGNvbW1lbnQ9IiIgLz4KKyAgICA8aWdub3JlZCBwYXRoPSJtb2RlbC5pd3MiIC8+CisgICAgPGlnbm9yZWQgcGF0aD0iLmlkZWEvd29ya3NwYWNlLnhtbCIgLz4KKyAgICA8b3B0aW9uIG5hbWU9IlRSQUNLSU5HX0VOQUJMRUQiIHZhbHVlPSJ0cnVlIiAvPgorICAgIDxvcHRpb24gbmFtZT0iU0hPV19ESUFMT0ciIHZhbHVlPSJmYWxzZSIgLz4KKyAgICA8b3B0aW9uIG5hbWU9IkhJR0hMSUdIVF9DT05GTElDVFMiIHZhbHVlPSJ0cnVlIiAvPgorICAgIDxvcHRpb24gbmFtZT0iSElHSExJR0hUX05PTl9BQ1RJVkVfQ0hBTkdFTElTVCIgdmFsdWU9ImZhbHNlIiAvPgorICAgIDxvcHRpb24gbmFtZT0iTEFTVF9SRVNPTFVUSU9OIiB2YWx1ZT0iSUdOT1JFIiAvPgorICA8L2NvbXBvbmVudD4KKyAgPGNvbXBvbmVudCBuYW1lPSJDaGFuZ2VzVmlld01hbmFnZXIiIGZsYXR0ZW5lZF92aWV3PSJ0cnVlIiBzaG93X2lnbm9yZWQ9ImZhbHNlIiAvPgorICA8Y29tcG9uZW50IG5hbWU9IkNyZWF0ZVBhdGNoQ29tbWl0RXhlY3V0b3IiPgorICAgIDxvcHRpb24gbmFtZT0iUEFUQ0hfUEFUSCIgdmFsdWU9IiIgLz4KKyAgICA8b3B0aW9uIG5hbWU9IlJFVkVSU0VfUEFUQ0giIHZhbHVlPSJmYWxzZSIgLz4KKyAgPC9jb21wb25lbnQ+CisgIDxjb21wb25lbnQgbmFtZT0iRGFlbW9uQ29kZUFuYWx5emVyIj4KKyAgICA8ZGlzYWJsZV9oaW50cyAvPgorICA8L2NvbXBvbmVudD4KKyAgPGNvbXBvbmVudCBuYW1lPSJEZWJ1Z2dlck1hbmFnZXIiPgorICAgIDxicmVha3BvaW50X2FueT4KKyAgICAgIDxicmVha3BvaW50PgorICAgICAgICA8b3B0aW9uIG5hbWU9Ik5PVElGWV9DQVVHSFQiIHZhbHVlPSJ0cnVlIiAvPgorICAgICAgICA8b3B0aW9uIG5hbWU9Ik5PVElGWV9VTkNBVUdIVCIgdmFsdWU9InRydWUiIC8+CisgICAgICAgIDxvcHRpb24gbmFtZT0iRU5BQkxFRCIgdmFsdWU9ImZhbHNlIiAvPgorICAgICAgICA8b3B0aW9uIG5hbWU9IkxPR19FTkFCTEVEIiB2YWx1ZT0iZmFsc2UiIC8+CisgICAgICAgIDxvcHRpb24gbmFtZT0iTE9HX0VYUFJFU1NJT05fRU5BQkxFRCIgdmFsdWU9ImZhbHNlIiAvPgorICAgICAgICA8b3B0aW9uIG5hbWU9IlNVU1BFTkRfUE9MSUNZIiB2YWx1ZT0iU3VzcGVuZEFsbCIgLz4KKyAgICAgICAgPG9wdGlvbiBuYW1lPSJDT1VOVF9GSUxURVJfRU5BQkxFRCIgdmFsdWU9ImZhbHNlIiAvPgorICAgICAgICA8b3B0aW9uIG5hbWU9IkNPVU5UX0ZJTFRFUiIgdmFsdWU9IjAiIC8+CisgICAgICAgIDxvcHRpb24gbmFtZT0iQ09ORElUSU9OX0VOQUJMRUQiIHZhbHVlPSJmYWxzZSIgLz4KKyAgICAgICAgPG9wdGlvbiBuYW1lPSJDTEFTU19GSUxURVJTX0VOQUJMRUQiIHZhbHVlPSJmYWxzZSIgLz4KKyAgICAgICAgPG9wdGlvbiBuYW1lPSJJTlNUQU5DRV9GSUxURVJTX0VOQUJMRUQiIHZhbHVlPSJmYWxzZSIgLz4KKyAgICAgICAgPG9wdGlvbiBuYW1lPSJDT05ESVRJT04iIHZhbHVlPSIiIC8+CisgICAgICAgIDxvcHRpb24gbmFtZT0iTE9HX01FU1NBR0UiIHZhbHVlPSIiIC8+CisgICAgICA8L2JyZWFrcG9pbnQ+CisgICAgICA8YnJlYWtwb2ludD4KKyAgICAgICAgPG9wdGlvbiBuYW1lPSJOT1RJRllfQ0FVR0hUIiB2YWx1ZT0idHJ1ZSIgLz4KKyAgICAgICAgPG9wdGlvbiBuYW1lPSJOT1RJRllfVU5DQVVHSFQiIHZhbHVlPSJ0cnVlIiAvPgorICAgICAgICA8b3B0aW9uIG5hbWU9IkVOQUJMRUQiIHZhbHVlPSJmYWxzZSIgLz4KKyAgICAgICAgPG9wdGlvbiBuYW1lPSJMT0dfRU5BQkxFRCIgdmFsdWU9ImZhbHNlIiAvPgorICAgICAgICA8b3B0aW9uIG5hbWU9IkxPR19FWFBSRVNTSU9OX0VOQUJMRUQiIHZhbHVlPSJmYWxzZSIgLz4KKyAgICAgICAgPG9wdGlvbiBuYW1lPSJTVVNQRU5EX1BPTElDWSIgdmFsdWU9IlN1c3BlbmRBbGwiIC8+CisgICAgICAgIDxvcHRpb24gbmFtZT0iQ09VTlRfRklMVEVSX0VOQUJMRUQiIHZhbHVlPSJmYWxzZSIgLz4KKyAgICAgICAgPG9wdGlvbiBuYW1lPSJDT1VOVF9GSUxURVIiIHZhbHVlPSIwIiAvPgorICAgICAgICA8b3B0aW9uIG5hbWU9IkNPTkRJVElPTl9FTkFCTEVEIiB2YWx1ZT0iZmFsc2UiIC8+CisgICAgICAgIDxvcHRpb24gbmFtZT0iQ0xBU1NfRklMVEVSU19FTkFCTEVEIiB2YWx1ZT0iZmFsc2UiIC8+CisgICAgICAgIDxvcHRpb24gbmFtZT0iSU5TVEFOQ0VfRklMVEVSU19FTkFCTEVEIiB2YWx1ZT0iZmFsc2UiIC8+CisgICAgICAgIDxvcHRpb24gbmFtZT0iQ09ORElUSU9OIiB2YWx1ZT0iIiAvPgorICAgICAgICA8b3B0aW9uIG5hbWU9IkxPR19NRVNTQUdFIiB2YWx1ZT0iIiAvPgorICAgICAgPC9icmVha3BvaW50PgorICAgIDwvYnJlYWtwb2ludF9hbnk+CisgICAgPGJyZWFrcG9pbnRfcnVsZXMgLz4KKyAgICA8dWlfcHJvcGVydGllcyAvPgorICA8L2NvbXBvbmVudD4KKyAgPGNvbXBvbmVudCBuYW1lPSJGYXZvcml0ZXNNYW5hZ2VyIj4KKyAgICA8ZmF2b3JpdGVzX2xpc3QgbmFtZT0ibW9kZWwiIC8+CisgIDwvY29tcG9uZW50PgorICA8Y29tcG9uZW50IG5hbWU9IkZpbGVFZGl0b3JNYW5hZ2VyIj4KKyAgICA8bGVhZj4KKyAgICAgIDxmaWxlIGxlYWYtZmlsZS1uYW1lPSJBQ2xhc3MuamF2YSIgcGlubmVkPSJmYWxzZSIgY3VycmVudD0idHJ1ZSIgY3VycmVudC1pbi10YWI9InRydWUiPgorICAgICAgICA8ZW50cnkgZmlsZT0iZmlsZTovLyRQUk9KRUNUX0RJUiQvc3JjL3gvQUNsYXNzLmphdmEiPgorICAgICAgICAgIDxwcm92aWRlciBzZWxlY3RlZD0idHJ1ZSIgZWRpdG9yLXR5cGUtaWQ9InRleHQtZWRpdG9yIj4KKyAgICAgICAgICAgIDxzdGF0ZSBsaW5lPSIzIiBjb2x1bW49IjQ5IiBzZWxlY3Rpb24tc3RhcnQ9IjM1IiBzZWxlY3Rpb24tZW5kPSIzNSIgdmVydGljYWwtc2Nyb2xsLXByb3BvcnRpb249IjAuMDE5NDA2MzkzIj4KKyAgICAgICAgICAgICAgPGZvbGRpbmcgLz4KKyAgICAgICAgICAgIDwvc3RhdGU+CisgICAgICAgICAgPC9wcm92aWRlcj4KKyAgICAgICAgPC9lbnRyeT4KKyAgICAgIDwvZmlsZT4KKyAgICA8L2xlYWY+CisgIDwvY29tcG9uZW50PgorICA8Y29tcG9uZW50IG5hbWU9IkdpdC5TZXR0aW5ncyI+CisgICAgPG9wdGlvbiBuYW1lPSJDSEVDS09VVF9JTkNMVURFX1RBR1MiIHZhbHVlPSJmYWxzZSIgLz4KKyAgICA8b3B0aW9uIG5hbWU9IlVQREFURV9DSEFOR0VTX1BPTElDWSIgdmFsdWU9IlNUQVNIIiAvPgorICAgIDxvcHRpb24gbmFtZT0iTElORV9TRVBBUkFUT1JTX0NPTlZFUlNJT04iIHZhbHVlPSJBU0siIC8+CisgIDwvY29tcG9uZW50PgorICA8Y29tcG9uZW50IG5hbWU9IlByb2plY3RGcmFtZUJvdW5kcyI+CisgICAgPG9wdGlvbiBuYW1lPSJ4IiB2YWx1ZT0iMTI3NiIgLz4KKyAgICA8b3B0aW9uIG5hbWU9InkiIHZhbHVlPSItNCIgLz4KKyAgICA8b3B0aW9uIG5hbWU9IndpZHRoIiB2YWx1ZT0iMTI4OCIgLz4KKyAgICA8b3B0aW9uIG5hbWU9ImhlaWdodCIgdmFsdWU9IjEwMzIiIC8+CisgIDwvY29tcG9uZW50PgorICA8Y29tcG9uZW50IG5hbWU9IlByb2plY3RMZXZlbFZjc01hbmFnZXIiIHNldHRpbmdzRWRpdGVkTWFudWFsbHk9ImZhbHNlIj4KKyAgICA8T3B0aW9uc1NldHRpbmcgdmFsdWU9InRydWUiIGlkPSJBZGQiIC8+CisgICAgPE9wdGlvbnNTZXR0aW5nIHZhbHVlPSJ0cnVlIiBpZD0iUmVtb3ZlIiAvPgorICAgIDxPcHRpb25zU2V0dGluZyB2YWx1ZT0idHJ1ZSIgaWQ9IkNoZWNrb3V0IiAvPgorICAgIDxPcHRpb25zU2V0dGluZyB2YWx1ZT0idHJ1ZSIgaWQ9IlVwZGF0ZSIgLz4KKyAgICA8T3B0aW9uc1NldHRpbmcgdmFsdWU9InRydWUiIGlkPSJTdGF0dXMiIC8+CisgICAgPE9wdGlvbnNTZXR0aW5nIHZhbHVlPSJ0cnVlIiBpZD0iRWRpdCIgLz4KKyAgICA8Q29uZmlybWF0aW9uc1NldHRpbmcgdmFsdWU9IjAiIGlkPSJBZGQiIC8+CisgICAgPENvbmZpcm1hdGlvbnNTZXR0aW5nIHZhbHVlPSIwIiBpZD0iUmVtb3ZlIiAvPgorICA8L2NvbXBvbmVudD4KKyAgPGNvbXBvbmVudCBuYW1lPSJQcm9qZWN0UmVsb2FkU3RhdGUiPgorICAgIDxvcHRpb24gbmFtZT0iU1RBVEUiIHZhbHVlPSIwIiAvPgorICA8L2NvbXBvbmVudD4KKyAgPGNvbXBvbmVudCBuYW1lPSJQcm9qZWN0VmlldyI+CisgICAgPG5hdmlnYXRvciBjdXJyZW50Vmlldz0iUHJvamVjdFBhbmUiIHByb3BvcnRpb25zPSIiIHZlcnNpb249IjEiIHNwbGl0dGVyUHJvcG9ydGlvbj0iMC41Ij4KKyAgICAgIDxmbGF0dGVuUGFja2FnZXMgLz4KKyAgICAgIDxzaG93TWVtYmVycyAvPgorICAgICAgPHNob3dNb2R1bGVzIC8+CisgICAgICA8c2hvd0xpYnJhcnlDb250ZW50cyAvPgorICAgICAgPGhpZGVFbXB0eVBhY2thZ2VzIC8+CisgICAgICA8YWJicmV2aWF0ZVBhY2thZ2VOYW1lcyAvPgorICAgICAgPGF1dG9zY3JvbGxUb1NvdXJjZSAvPgorICAgICAgPGF1dG9zY3JvbGxGcm9tU291cmNlIC8+CisgICAgICA8c29ydEJ5VHlwZSAvPgorICAgIDwvbmF2aWdhdG9yPgorICAgIDxwYW5lcz4KKyAgICAgIDxwYW5lIGlkPSJQcm9qZWN0UGFuZSI+CisgICAgICAgIDxzdWJQYW5lPgorICAgICAgICAgIDxQQVRIPgorICAgICAgICAgICAgPFBBVEhfRUxFTUVOVD4KKyAgICAgICAgICAgICAgPG9wdGlvbiBuYW1lPSJteUl0ZW1JZCIgdmFsdWU9Im1vZGVsIiAvPgorICAgICAgICAgICAgICA8b3B0aW9uIG5hbWU9Im15SXRlbVR5cGUiIHZhbHVlPSJjb20uaW50ZWxsaWouaWRlLnByb2plY3RWaWV3LmltcGwubm9kZXMuUHJvamVjdFZpZXdQcm9qZWN0Tm9kZSIgLz4KKyAgICAgICAgICAgIDwvUEFUSF9FTEVNRU5UPgorICAgICAgICAgIDwvUEFUSD4KKyAgICAgICAgICA8UEFUSD4KKyAgICAgICAgICAgIDxQQVRIX0VMRU1FTlQ+CisgICAgICAgICAgICAgIDxvcHRpb24gbmFtZT0ibXlJdGVtSWQiIHZhbHVlPSJtb2RlbCIgLz4KKyAgICAgICAgICAgICAgPG9wdGlvbiBuYW1lPSJteUl0ZW1UeXBlIiB2YWx1ZT0iY29tLmludGVsbGlqLmlkZS5wcm9qZWN0Vmlldy5pbXBsLm5vZGVzLlByb2plY3RWaWV3UHJvamVjdE5vZGUiIC8+CisgICAgICAgICAgICA8L1BBVEhfRUxFTUVOVD4KKyAgICAgICAgICAgIDxQQVRIX0VMRU1FTlQ+CisgICAgICAgICAgICAgIDxvcHRpb24gbmFtZT0ibXlJdGVtSWQiIHZhbHVlPSJtb2RlbCIgLz4KKyAgICAgICAgICAgICAgPG9wdGlvbiBuYW1lPSJteUl0ZW1UeXBlIiB2YWx1ZT0iY29tLmludGVsbGlqLmlkZS5wcm9qZWN0Vmlldy5pbXBsLm5vZGVzLlBzaURpcmVjdG9yeU5vZGUiIC8+CisgICAgICAgICAgICA8L1BBVEhfRUxFTUVOVD4KKyAgICAgICAgICA8L1BBVEg+CisgICAgICAgICAgPFBBVEg+CisgICAgICAgICAgICA8UEFUSF9FTEVNRU5UPgorICAgICAgICAgICAgICA8b3B0aW9uIG5hbWU9Im15SXRlbUlkIiB2YWx1ZT0ibW9kZWwiIC8+CisgICAgICAgICAgICAgIDxvcHRpb24gbmFtZT0ibXlJdGVtVHlwZSIgdmFsdWU9ImNvbS5pbnRlbGxpai5pZGUucHJvamVjdFZpZXcuaW1wbC5ub2Rlcy5Qcm9qZWN0Vmlld1Byb2plY3ROb2RlIiAvPgorICAgICAgICAgICAgPC9QQVRIX0VMRU1FTlQ+CisgICAgICAgICAgICA8UEFUSF9FTEVNRU5UPgorICAgICAgICAgICAgICA8b3B0aW9uIG5hbWU9Im15SXRlbUlkIiB2YWx1ZT0ibW9kZWwiIC8+CisgICAgICAgICAgICAgIDxvcHRpb24gbmFtZT0ibXlJdGVtVHlwZSIgdmFsdWU9ImNvbS5pbnRlbGxpai5pZGUucHJvamVjdFZpZXcuaW1wbC5ub2Rlcy5Qc2lEaXJlY3RvcnlOb2RlIiAvPgorICAgICAgICAgICAgPC9QQVRIX0VMRU1FTlQ+CisgICAgICAgICAgICA8UEFUSF9FTEVNRU5UPgorICAgICAgICAgICAgICA8b3B0aW9uIG5hbWU9Im15SXRlbUlkIiB2YWx1ZT0ic3JjIiAvPgorICAgICAgICAgICAgICA8b3B0aW9uIG5hbWU9Im15SXRlbVR5cGUiIHZhbHVlPSJjb20uaW50ZWxsaWouaWRlLnByb2plY3RWaWV3LmltcGwubm9kZXMuUHNpRGlyZWN0b3J5Tm9kZSIgLz4KKyAgICAgICAgICAgIDwvUEFUSF9FTEVNRU5UPgorICAgICAgICAgICAgPFBBVEhfRUxFTUVOVD4KKyAgICAgICAgICAgICAgPG9wdGlvbiBuYW1lPSJteUl0ZW1JZCIgdmFsdWU9IngiIC8+CisgICAgICAgICAgICAgIDxvcHRpb24gbmFtZT0ibXlJdGVtVHlwZSIgdmFsdWU9ImNvbS5pbnRlbGxpai5pZGUucHJvamVjdFZpZXcuaW1wbC5ub2Rlcy5Qc2lEaXJlY3RvcnlOb2RlIiAvPgorICAgICAgICAgICAgPC9QQVRIX0VMRU1FTlQ+CisgICAgICAgICAgPC9QQVRIPgorICAgICAgICA8L3N1YlBhbmU+CisgICAgICA8L3BhbmU+CisgICAgICA8cGFuZSBpZD0iU2NvcGUiIC8+CisgICAgICA8cGFuZSBpZD0iUGFja2FnZXNQYW5lIiAvPgorICAgIDwvcGFuZXM+CisgIDwvY29tcG9uZW50PgorICA8Y29tcG9uZW50IG5hbWU9IlByb3BlcnRpZXNDb21wb25lbnQiPgorICAgIDxwcm9wZXJ0eSBuYW1lPSJHb1RvRmlsZS5pbmNsdWRlSmF2YUZpbGVzIiB2YWx1ZT0iZmFsc2UiIC8+CisgICAgPHByb3BlcnR5IG5hbWU9IkdvVG9DbGFzcy50b1NhdmVJbmNsdWRlTGlicmFyaWVzIiB2YWx1ZT0iZmFsc2UiIC8+CisgICAgPHByb3BlcnR5IG5hbWU9IldlYlNlcnZlclRvb2xXaW5kb3dGYWN0b3J5U3RhdGUiIHZhbHVlPSJmYWxzZSIgLz4KKyAgICA8cHJvcGVydHkgbmFtZT0iTWVtYmVyQ2hvb3Nlci5zb3J0ZWQiIHZhbHVlPSJmYWxzZSIgLz4KKyAgICA8cHJvcGVydHkgbmFtZT0iTWVtYmVyQ2hvb3Nlci5zaG93Q2xhc3NlcyIgdmFsdWU9InRydWUiIC8+CisgICAgPHByb3BlcnR5IG5hbWU9IkdvVG9DbGFzcy5pbmNsdWRlTGlicmFyaWVzIiB2YWx1ZT0iZmFsc2UiIC8+CisgICAgPHByb3BlcnR5IG5hbWU9Ik1lbWJlckNob29zZXIuY29weUphdmFkb2MiIHZhbHVlPSJmYWxzZSIgLz4KKyAgPC9jb21wb25lbnQ+CisgIDxjb21wb25lbnQgbmFtZT0iUnVuTWFuYWdlciI+CisgICAgPGNvbmZpZ3VyYXRpb24gZGVmYXVsdD0idHJ1ZSIgdHlwZT0iI29yZy5qZXRicmFpbnMuaWRlYS5kZXZraXQucnVuLlBsdWdpbkNvbmZpZ3VyYXRpb25UeXBlIiBmYWN0b3J5TmFtZT0iUGx1Z2luIj4KKyAgICAgIDxtb2R1bGUgbmFtZT0iIiAvPgorICAgICAgPG9wdGlvbiBuYW1lPSJWTV9QQVJBTUVURVJTIiB2YWx1ZT0iLVhteDUxMm0gLVhtczI1Nm0gLVhYOk1heFBlcm1TaXplPTI1MG0iIC8+CisgICAgICA8b3B0aW9uIG5hbWU9IlBST0dSQU1fUEFSQU1FVEVSUyIgLz4KKyAgICAgIDxtZXRob2Q+CisgICAgICAgIDxvcHRpb24gbmFtZT0iQnVpbGRBcnRpZmFjdHMiIGVuYWJsZWQ9ImZhbHNlIiAvPgorICAgICAgICA8b3B0aW9uIG5hbWU9Ik1ha2UiIGVuYWJsZWQ9InRydWUiIC8+CisgICAgICAgIDxvcHRpb24gbmFtZT0iTWF2ZW4uQmVmb3JlUnVuVGFzayIgZW5hYmxlZD0iZmFsc2UiIC8+CisgICAgICAgIDxvcHRpb24gbmFtZT0iUGhpbmdUYXJnZXQiIGVuYWJsZWQ9ImZhbHNlIiAvPgorICAgICAgPC9tZXRob2Q+CisgICAgPC9jb25maWd1cmF0aW9uPgorICAgIDxjb25maWd1cmF0aW9uIGRlZmF1bHQ9InRydWUiIHR5cGU9IlJlbW90ZSIgZmFjdG9yeU5hbWU9IlJlbW90ZSI+CisgICAgICA8b3B0aW9uIG5hbWU9IlVTRV9TT0NLRVRfVFJBTlNQT1JUIiB2YWx1ZT0idHJ1ZSIgLz4KKyAgICAgIDxvcHRpb24gbmFtZT0iU0VSVkVSX01PREUiIHZhbHVlPSJmYWxzZSIgLz4KKyAgICAgIDxvcHRpb24gbmFtZT0iU0hNRU1fQUREUkVTUyIgdmFsdWU9ImphdmFkZWJ1ZyIgLz4KKyAgICAgIDxvcHRpb24gbmFtZT0iSE9TVCIgdmFsdWU9ImxvY2FsaG9zdCIgLz4KKyAgICAgIDxvcHRpb24gbmFtZT0iUE9SVCIgdmFsdWU9IjUwMDUiIC8+CisgICAgICA8bWV0aG9kPgorICAgICAgICA8b3B0aW9uIG5hbWU9IkJ1aWxkQXJ0aWZhY3RzIiBlbmFibGVkPSJmYWxzZSIgLz4KKyAgICAgICAgPG9wdGlvbiBuYW1lPSJNYXZlbi5CZWZvcmVSdW5UYXNrIiBlbmFibGVkPSJmYWxzZSIgLz4KKyAgICAgIDwvbWV0aG9kPgorICAgIDwvY29uZmlndXJhdGlvbj4KKyAgICA8Y29uZmlndXJhdGlvbiBkZWZhdWx0PSJ0cnVlIiB0eXBlPSJBcHBsZXQiIGZhY3RvcnlOYW1lPSJBcHBsZXQiPgorICAgICAgPG1vZHVsZSBuYW1lPSIiIC8+CisgICAgICA8b3B0aW9uIG5hbWU9Ik1BSU5fQ0xBU1NfTkFNRSIgLz4KKyAgICAgIDxvcHRpb24gbmFtZT0iSFRNTF9GSUxFX05BTUUiIC8+CisgICAgICA8b3B0aW9uIG5hbWU9IkhUTUxfVVNFRCIgdmFsdWU9ImZhbHNlIiAvPgorICAgICAgPG9wdGlvbiBuYW1lPSJXSURUSCIgdmFsdWU9IjQwMCIgLz4KKyAgICAgIDxvcHRpb24gbmFtZT0iSEVJR0hUIiB2YWx1ZT0iMzAwIiAvPgorICAgICAgPG9wdGlvbiBuYW1lPSJQT0xJQ1lfRklMRSIgdmFsdWU9IiRBUFBMSUNBVElPTl9IT01FX0RJUiQvYmluL2FwcGxldHZpZXdlci5wb2xpY3kiIC8+CisgICAgICA8b3B0aW9uIG5hbWU9IlZNX1BBUkFNRVRFUlMiIC8+CisgICAgICA8b3B0aW9uIG5hbWU9IkFMVEVSTkFUSVZFX0pSRV9QQVRIX0VOQUJMRUQiIHZhbHVlPSJmYWxzZSIgLz4KKyAgICAgIDxvcHRpb24gbmFtZT0iQUxURVJOQVRJVkVfSlJFX1BBVEgiIC8+CisgICAgICA8bWV0aG9kPgorICAgICAgICA8b3B0aW9uIG5hbWU9IkJ1aWxkQXJ0aWZhY3RzIiBlbmFibGVkPSJmYWxzZSIgLz4KKyAgICAgICAgPG9wdGlvbiBuYW1lPSJNYWtlIiBlbmFibGVkPSJ0cnVlIiAvPgorICAgICAgICA8b3B0aW9uIG5hbWU9Ik1hdmVuLkJlZm9yZVJ1blRhc2siIGVuYWJsZWQ9ImZhbHNlIiAvPgorICAgICAgICA8b3B0aW9uIG5hbWU9IlBoaW5nVGFyZ2V0IiBlbmFibGVkPSJmYWxzZSIgLz4KKyAgICAgIDwvbWV0aG9kPgorICAgIDwvY29uZmlndXJhdGlvbj4KKyAgICA8Y29uZmlndXJhdGlvbiBkZWZhdWx0PSJ0cnVlIiB0eXBlPSJBcHBsaWNhdGlvbiIgZmFjdG9yeU5hbWU9IkFwcGxpY2F0aW9uIj4KKyAgICAgIDxvcHRpb24gbmFtZT0iTUFJTl9DTEFTU19OQU1FIiAvPgorICAgICAgPG9wdGlvbiBuYW1lPSJWTV9QQVJBTUVURVJTIiAvPgorICAgICAgPG9wdGlvbiBuYW1lPSJQUk9HUkFNX1BBUkFNRVRFUlMiIC8+CisgICAgICA8b3B0aW9uIG5hbWU9IldPUktJTkdfRElSRUNUT1JZIiB2YWx1ZT0iJFBST0pFQ1RfRElSJCIgLz4KKyAgICAgIDxvcHRpb24gbmFtZT0iQUxURVJOQVRJVkVfSlJFX1BBVEhfRU5BQkxFRCIgdmFsdWU9ImZhbHNlIiAvPgorICAgICAgPG9wdGlvbiBuYW1lPSJBTFRFUk5BVElWRV9KUkVfUEFUSCIgLz4KKyAgICAgIDxvcHRpb24gbmFtZT0iRU5BQkxFX1NXSU5HX0lOU1BFQ1RPUiIgdmFsdWU9ImZhbHNlIiAvPgorICAgICAgPG9wdGlvbiBuYW1lPSJFTlZfVkFSSUFCTEVTIiAvPgorICAgICAgPG9wdGlvbiBuYW1lPSJQQVNTX1BBUkVOVF9FTlZTIiB2YWx1ZT0idHJ1ZSIgLz4KKyAgICAgIDxtb2R1bGUgbmFtZT0iIiAvPgorICAgICAgPGVudnMgLz4KKyAgICAgIDxtZXRob2Q+CisgICAgICAgIDxvcHRpb24gbmFtZT0iQnVpbGRBcnRpZmFjdHMiIGVuYWJsZWQ9ImZhbHNlIiAvPgorICAgICAgICA8b3B0aW9uIG5hbWU9Ik1ha2UiIGVuYWJsZWQ9InRydWUiIC8+CisgICAgICAgIDxvcHRpb24gbmFtZT0iTWF2ZW4uQmVmb3JlUnVuVGFzayIgZW5hYmxlZD0iZmFsc2UiIC8+CisgICAgICAgIDxvcHRpb24gbmFtZT0iUGhpbmdUYXJnZXQiIGVuYWJsZWQ9ImZhbHNlIiAvPgorICAgICAgPC9tZXRob2Q+CisgICAgPC9jb25maWd1cmF0aW9uPgorICAgIDxjb25maWd1cmF0aW9uIGRlZmF1bHQ9InRydWUiIHR5cGU9IkpVbml0IiBmYWN0b3J5TmFtZT0iSlVuaXQiPgorICAgICAgPG1vZHVsZSBuYW1lPSIiIC8+CisgICAgICA8b3B0aW9uIG5hbWU9IkFMVEVSTkFUSVZFX0pSRV9QQVRIX0VOQUJMRUQiIHZhbHVlPSJmYWxzZSIgLz4KKyAgICAgIDxvcHRpb24gbmFtZT0iQUxURVJOQVRJVkVfSlJFX1BBVEgiIC8+CisgICAgICA8b3B0aW9uIG5hbWU9IlBBQ0tBR0VfTkFNRSIgLz4KKyAgICAgIDxvcHRpb24gbmFtZT0iTUFJTl9DTEFTU19OQU1FIiAvPgorICAgICAgPG9wdGlvbiBuYW1lPSJNRVRIT0RfTkFNRSIgLz4KKyAgICAgIDxvcHRpb24gbmFtZT0iVEVTVF9PQkpFQ1QiIHZhbHVlPSJjbGFzcyIgLz4KKyAgICAgIDxvcHRpb24gbmFtZT0iVk1fUEFSQU1FVEVSUyIgdmFsdWU9Ii1lYSIgLz4KKyAgICAgIDxvcHRpb24gbmFtZT0iUEFSQU1FVEVSUyIgLz4KKyAgICAgIDxvcHRpb24gbmFtZT0iV09SS0lOR19ESVJFQ1RPUlkiIHZhbHVlPSIkUFJPSkVDVF9ESVIkIiAvPgorICAgICAgPG9wdGlvbiBuYW1lPSJFTlZfVkFSSUFCTEVTIiAvPgorICAgICAgPG9wdGlvbiBuYW1lPSJQQVNTX1BBUkVOVF9FTlZTIiB2YWx1ZT0idHJ1ZSIgLz4KKyAgICAgIDxvcHRpb24gbmFtZT0iVEVTVF9TRUFSQ0hfU0NPUEUiPgorICAgICAgICA8dmFsdWUgZGVmYXVsdE5hbWU9Im1vZHVsZVdpdGhEZXBlbmRlbmNpZXMiIC8+CisgICAgICA8L29wdGlvbj4KKyAgICAgIDxlbnZzIC8+CisgICAgICA8cGF0dGVybnMgLz4KKyAgICAgIDxtZXRob2Q+CisgICAgICAgIDxvcHRpb24gbmFtZT0iQnVpbGRBcnRpZmFjdHMiIGVuYWJsZWQ9ImZhbHNlIiAvPgorICAgICAgICA8b3B0aW9uIG5hbWU9Ik1ha2UiIGVuYWJsZWQ9InRydWUiIC8+CisgICAgICAgIDxvcHRpb24gbmFtZT0iTWF2ZW4uQmVmb3JlUnVuVGFzayIgZW5hYmxlZD0iZmFsc2UiIC8+CisgICAgICAgIDxvcHRpb24gbmFtZT0iUGhpbmdUYXJnZXQiIGVuYWJsZWQ9ImZhbHNlIiAvPgorICAgICAgPC9tZXRob2Q+CisgICAgPC9jb25maWd1cmF0aW9uPgorICAgIDxsaXN0IHNpemU9IjAiIC8+CisgICAgPGNvbmZpZ3VyYXRpb24gbmFtZT0iJmx0O3RlbXBsYXRlJmd0OyIgdHlwZT0iV2ViQXBwIiBkZWZhdWx0PSJ0cnVlIiBzZWxlY3RlZD0iZmFsc2UiPgorICAgICAgPEhvc3Q+bG9jYWxob3N0PC9Ib3N0PgorICAgICAgPFBvcnQ+NTA1MDwvUG9ydD4KKyAgICA8L2NvbmZpZ3VyYXRpb24+CisgIDwvY29tcG9uZW50PgorICA8Y29tcG9uZW50IG5hbWU9IlNoZWx2ZUNoYW5nZXNNYW5hZ2VyIiBzaG93X3JlY3ljbGVkPSJmYWxzZSIgLz4KKyAgPGNvbXBvbmVudCBuYW1lPSJUb29sV2luZG93TWFuYWdlciI+CisgICAgPGZyYW1lIHg9IjEyNzYiIHk9Ii00IiB3aWR0aD0iMTI4OCIgaGVpZ2h0PSIxMDMyIiBleHRlbmRlZC1zdGF0ZT0iNiIgLz4KKyAgICA8ZWRpdG9yIGFjdGl2ZT0idHJ1ZSIgLz4KKyAgICA8bGF5b3V0PgorICAgICAgPHdpbmRvd19pbmZvIGlkPSJDaGFuZ2VzIiBhY3RpdmU9ImZhbHNlIiBhbmNob3I9ImJvdHRvbSIgYXV0b19oaWRlPSJmYWxzZSIgaW50ZXJuYWxfdHlwZT0iRE9DS0VEIiB0eXBlPSJET0NLRUQiIHZpc2libGU9ImZhbHNlIiB3ZWlnaHQ9IjAuMzMiIHNpZGVXZWlnaHQ9IjAuNSIgb3JkZXI9Ii0xIiBzaWRlX3Rvb2w9ImZhbHNlIiBjb250ZW50X3VpPSJ0YWJzIiAvPgorICAgICAgPHdpbmRvd19pbmZvIGlkPSJQYWxldHRlIiBhY3RpdmU9ImZhbHNlIiBhbmNob3I9InJpZ2h0IiBhdXRvX2hpZGU9ImZhbHNlIiBpbnRlcm5hbF90eXBlPSJET0NLRUQiIHR5cGU9IkRPQ0tFRCIgdmlzaWJsZT0iZmFsc2UiIHdlaWdodD0iMC4zMyIgc2lkZVdlaWdodD0iMC41IiBvcmRlcj0iLTEiIHNpZGVfdG9vbD0iZmFsc2UiIGNvbnRlbnRfdWk9InRhYnMiIC8+CisgICAgICA8d2luZG93X2luZm8gaWQ9IkRlYnVnIiBhY3RpdmU9ImZhbHNlIiBhbmNob3I9ImJvdHRvbSIgYXV0b19oaWRlPSJmYWxzZSIgaW50ZXJuYWxfdHlwZT0iRE9DS0VEIiB0eXBlPSJET0NLRUQiIHZpc2libGU9ImZhbHNlIiB3ZWlnaHQ9IjAuNCIgc2lkZVdlaWdodD0iMC41IiBvcmRlcj0iMyIgc2lkZV90b29sPSJmYWxzZSIgY29udGVudF91aT0idGFicyIgLz4KKyAgICAgIDx3aW5kb3dfaW5mbyBpZD0iRXZlbnQgTG9nIiBhY3RpdmU9ImZhbHNlIiBhbmNob3I9ImJvdHRvbSIgYXV0b19oaWRlPSJmYWxzZSIgaW50ZXJuYWxfdHlwZT0iRE9DS0VEIiB0eXBlPSJET0NLRUQiIHZpc2libGU9ImZhbHNlIiB3ZWlnaHQ9IjAuMzMiIHNpZGVXZWlnaHQ9IjAuNSIgb3JkZXI9Ii0xIiBzaWRlX3Rvb2w9InRydWUiIGNvbnRlbnRfdWk9InRhYnMiIC8+CisgICAgICA8d2luZG93X2luZm8gaWQ9IkZhdm9yaXRlcyIgYWN0aXZlPSJmYWxzZSIgYW5jaG9yPSJsZWZ0IiBhdXRvX2hpZGU9ImZhbHNlIiBpbnRlcm5hbF90eXBlPSJET0NLRUQiIHR5cGU9IkRPQ0tFRCIgdmlzaWJsZT0iZmFsc2UiIHdlaWdodD0iMC4zMyIgc2lkZVdlaWdodD0iMC41IiBvcmRlcj0iLTEiIHNpZGVfdG9vbD0idHJ1ZSIgY29udGVudF91aT0idGFicyIgLz4KKyAgICAgIDx3aW5kb3dfaW5mbyBpZD0iVmVyc2lvbiBDb250cm9sIiBhY3RpdmU9ImZhbHNlIiBhbmNob3I9ImJvdHRvbSIgYXV0b19oaWRlPSJmYWxzZSIgaW50ZXJuYWxfdHlwZT0iRE9DS0VEIiB0eXBlPSJET0NLRUQiIHZpc2libGU9ImZhbHNlIiB3ZWlnaHQ9IjAuMzMiIHNpZGVXZWlnaHQ9IjAuNSIgb3JkZXI9Ii0xIiBzaWRlX3Rvb2w9ImZhbHNlIiBjb250ZW50X3VpPSJ0YWJzIiAvPgorICAgICAgPHdpbmRvd19pbmZvIGlkPSJUT0RPIiBhY3RpdmU9ImZhbHNlIiBhbmNob3I9ImJvdHRvbSIgYXV0b19oaWRlPSJmYWxzZSIgaW50ZXJuYWxfdHlwZT0iRE9DS0VEIiB0eXBlPSJET0NLRUQiIHZpc2libGU9ImZhbHNlIiB3ZWlnaHQ9IjAuMzMiIHNpZGVXZWlnaHQ9IjAuNSIgb3JkZXI9IjYiIHNpZGVfdG9vbD0iZmFsc2UiIGNvbnRlbnRfdWk9InRhYnMiIC8+CisgICAgICA8d2luZG93X2luZm8gaWQ9IlByb2ZpbGVyIiBhY3RpdmU9ImZhbHNlIiBhbmNob3I9ImJvdHRvbSIgYXV0b19oaWRlPSJmYWxzZSIgaW50ZXJuYWxfdHlwZT0iRE9DS0VEIiB0eXBlPSJET0NLRUQiIHZpc2libGU9ImZhbHNlIiB3ZWlnaHQ9IjAuMzMiIHNpZGVXZWlnaHQ9IjAuNSIgb3JkZXI9Ii0xIiBzaWRlX3Rvb2w9ImZhbHNlIiBjb250ZW50X3VpPSJ0YWJzIiAvPgorICAgICAgPHdpbmRvd19pbmZvIGlkPSJTdHJ1Y3R1cmUiIGFjdGl2ZT0iZmFsc2UiIGFuY2hvcj0ibGVmdCIgYXV0b19oaWRlPSJmYWxzZSIgaW50ZXJuYWxfdHlwZT0iRE9DS0VEIiB0eXBlPSJET0NLRUQiIHZpc2libGU9ImZhbHNlIiB3ZWlnaHQ9IjAuMjUiIHNpZGVXZWlnaHQ9IjAuNSIgb3JkZXI9IjEiIHNpZGVfdG9vbD0idHJ1ZSIgY29udGVudF91aT0idGFicyIgLz4KKyAgICAgIDx3aW5kb3dfaW5mbyBpZD0iTWF2ZW4gUHJvamVjdHMiIGFjdGl2ZT0iZmFsc2UiIGFuY2hvcj0icmlnaHQiIGF1dG9faGlkZT0iZmFsc2UiIGludGVybmFsX3R5cGU9IkRPQ0tFRCIgdHlwZT0iRE9DS0VEIiB2aXNpYmxlPSJmYWxzZSIgd2VpZ2h0PSIwLjMzIiBzaWRlV2VpZ2h0PSIwLjUiIG9yZGVyPSItMSIgc2lkZV90b29sPSJmYWxzZSIgY29udGVudF91aT0idGFicyIgLz4KKyAgICAgIDx3aW5kb3dfaW5mbyBpZD0iQ29tbWFuZGVyIiBhY3RpdmU9ImZhbHNlIiBhbmNob3I9InJpZ2h0IiBhdXRvX2hpZGU9ImZhbHNlIiBpbnRlcm5hbF90eXBlPSJET0NLRUQiIHR5cGU9IkRPQ0tFRCIgdmlzaWJsZT0iZmFsc2UiIHdlaWdodD0iMC40IiBzaWRlV2VpZ2h0PSIwLjUiIG9yZGVyPSIwIiBzaWRlX3Rvb2w9ImZhbHNlIiBjb250ZW50X3VpPSJ0YWJzIiAvPgorICAgICAgPHdpbmRvd19pbmZvIGlkPSJBcHBsaWNhdGlvbiBTZXJ2ZXJzIiBhY3RpdmU9ImZhbHNlIiBhbmNob3I9ImJvdHRvbSIgYXV0b19oaWRlPSJmYWxzZSIgaW50ZXJuYWxfdHlwZT0iRE9DS0VEIiB0eXBlPSJET0NLRUQiIHZpc2libGU9ImZhbHNlIiB3ZWlnaHQ9IjAuMzMiIHNpZGVXZWlnaHQ9IjAuNSIgb3JkZXI9Ii0xIiBzaWRlX3Rvb2w9ImZhbHNlIiBjb250ZW50X3VpPSJ0YWJzIiAvPgorICAgICAgPHdpbmRvd19pbmZvIGlkPSJQcm9qZWN0IiBhY3RpdmU9ImZhbHNlIiBhbmNob3I9ImxlZnQiIGF1dG9faGlkZT0iZmFsc2UiIGludGVybmFsX3R5cGU9IkRPQ0tFRCIgdHlwZT0iRE9DS0VEIiB2aXNpYmxlPSJ0cnVlIiB3ZWlnaHQ9IjAuMjQ5NTkzNSIgc2lkZVdlaWdodD0iMC41IiBvcmRlcj0iMCIgc2lkZV90b29sPSJmYWxzZSIgY29udGVudF91aT0idGFicyIgLz4KKyAgICAgIDx3aW5kb3dfaW5mbyBpZD0iUnVuIiBhY3RpdmU9ImZhbHNlIiBhbmNob3I9ImJvdHRvbSIgYXV0b19oaWRlPSJmYWxzZSIgaW50ZXJuYWxfdHlwZT0iRE9DS0VEIiB0eXBlPSJET0NLRUQiIHZpc2libGU9ImZhbHNlIiB3ZWlnaHQ9IjAuMzMiIHNpZGVXZWlnaHQ9IjAuNSIgb3JkZXI9IjIiIHNpZGVfdG9vbD0iZmFsc2UiIGNvbnRlbnRfdWk9InRhYnMiIC8+CisgICAgICA8d2luZG93X2luZm8gaWQ9IkpzVGVzdERyaXZlciBTZXJ2ZXIiIGFjdGl2ZT0iZmFsc2UiIGFuY2hvcj0iYm90dG9tIiBhdXRvX2hpZGU9ImZhbHNlIiBpbnRlcm5hbF90eXBlPSJET0NLRUQiIHR5cGU9IkRPQ0tFRCIgdmlzaWJsZT0iZmFsc2UiIHdlaWdodD0iMC4zMyIgc2lkZVdlaWdodD0iMC41IiBvcmRlcj0iLTEiIHNpZGVfdG9vbD0iZmFsc2UiIGNvbnRlbnRfdWk9InRhYnMiIC8+CisgICAgICA8d2luZG93X2luZm8gaWQ9IkN2cyIgYWN0aXZlPSJmYWxzZSIgYW5jaG9yPSJib3R0b20iIGF1dG9faGlkZT0iZmFsc2UiIGludGVybmFsX3R5cGU9IkRPQ0tFRCIgdHlwZT0iRE9DS0VEIiB2aXNpYmxlPSJmYWxzZSIgd2VpZ2h0PSIwLjI1IiBzaWRlV2VpZ2h0PSIwLjUiIG9yZGVyPSI0IiBzaWRlX3Rvb2w9ImZhbHNlIiBjb250ZW50X3VpPSJ0YWJzIiAvPgorICAgICAgPHdpbmRvd19pbmZvIGlkPSJNZXNzYWdlIiBhY3RpdmU9ImZhbHNlIiBhbmNob3I9ImJvdHRvbSIgYXV0b19oaWRlPSJmYWxzZSIgaW50ZXJuYWxfdHlwZT0iRE9DS0VEIiB0eXBlPSJET0NLRUQiIHZpc2libGU9ImZhbHNlIiB3ZWlnaHQ9IjAuMzMiIHNpZGVXZWlnaHQ9IjAuNSIgb3JkZXI9IjAiIHNpZGVfdG9vbD0iZmFsc2UiIGNvbnRlbnRfdWk9InRhYnMiIC8+CisgICAgICA8d2luZG93X2luZm8gaWQ9IkZpbmQiIGFjdGl2ZT0iZmFsc2UiIGFuY2hvcj0iYm90dG9tIiBhdXRvX2hpZGU9ImZhbHNlIiBpbnRlcm5hbF90eXBlPSJET0NLRUQiIHR5cGU9IkRPQ0tFRCIgdmlzaWJsZT0iZmFsc2UiIHdlaWdodD0iMC4zMyIgc2lkZVdlaWdodD0iMC41IiBvcmRlcj0iMSIgc2lkZV90b29sPSJmYWxzZSIgY29udGVudF91aT0idGFicyIgLz4KKyAgICAgIDx3aW5kb3dfaW5mbyBpZD0iQW50IEJ1aWxkIiBhY3RpdmU9ImZhbHNlIiBhbmNob3I9InJpZ2h0IiBhdXRvX2hpZGU9ImZhbHNlIiBpbnRlcm5hbF90eXBlPSJET0NLRUQiIHR5cGU9IkRPQ0tFRCIgdmlzaWJsZT0iZmFsc2UiIHdlaWdodD0iMC4yNSIgc2lkZVdlaWdodD0iMC41IiBvcmRlcj0iMSIgc2lkZV90b29sPSJmYWxzZSIgY29udGVudF91aT0idGFicyIgLz4KKyAgICAgIDx3aW5kb3dfaW5mbyBpZD0iSW5zcGVjdGlvbiIgYWN0aXZlPSJmYWxzZSIgYW5jaG9yPSJib3R0b20iIGF1dG9faGlkZT0iZmFsc2UiIGludGVybmFsX3R5cGU9IkRPQ0tFRCIgdHlwZT0iRE9DS0VEIiB2aXNpYmxlPSJmYWxzZSIgd2VpZ2h0PSIwLjQiIHNpZGVXZWlnaHQ9IjAuNSIgb3JkZXI9IjUiIHNpZGVfdG9vbD0iZmFsc2UiIGNvbnRlbnRfdWk9InRhYnMiIC8+CisgICAgICA8d2luZG93X2luZm8gaWQ9IkhpZXJhcmNoeSIgYWN0aXZlPSJmYWxzZSIgYW5jaG9yPSJyaWdodCIgYXV0b19oaWRlPSJmYWxzZSIgaW50ZXJuYWxfdHlwZT0iRE9DS0VEIiB0eXBlPSJET0NLRUQiIHZpc2libGU9ImZhbHNlIiB3ZWlnaHQ9IjAuMjUiIHNpZGVXZWlnaHQ9IjAuNSIgb3JkZXI9IjIiIHNpZGVfdG9vbD0iZmFsc2UiIGNvbnRlbnRfdWk9ImNvbWJvIiAvPgorICAgIDwvbGF5b3V0PgorICA8L2NvbXBvbmVudD4KKyAgPGNvbXBvbmVudCBuYW1lPSJWY3NDb250ZW50QW5ub3RhdGlvblNldHRpbmdzIj4KKyAgICA8b3B0aW9uIG5hbWU9Im15TGltaXQiIHZhbHVlPSIyNjc4NDAwMDAwIiAvPgorICA8L2NvbXBvbmVudD4KKyAgPGNvbXBvbmVudCBuYW1lPSJWY3NNYW5hZ2VyQ29uZmlndXJhdGlvbiI+CisgICAgPG9wdGlvbiBuYW1lPSJPRkZFUl9NT1ZFX1RPX0FOT1RIRVJfQ0hBTkdFTElTVF9PTl9QQVJUSUFMX0NPTU1JVCIgdmFsdWU9InRydWUiIC8+CisgICAgPG9wdGlvbiBuYW1lPSJDSEVDS19DT0RFX1NNRUxMU19CRUZPUkVfUFJPSkVDVF9DT01NSVQiIHZhbHVlPSJ0cnVlIiAvPgorICAgIDxvcHRpb24gbmFtZT0iQ0hFQ0tfTkVXX1RPRE8iIHZhbHVlPSJ0cnVlIiAvPgorICAgIDxvcHRpb24gbmFtZT0ibXlUb2RvUGFuZWxTZXR0aW5ncyI+CisgICAgICA8dmFsdWU+CisgICAgICAgIDxhcmUtcGFja2FnZXMtc2hvd24gdmFsdWU9ImZhbHNlIiAvPgorICAgICAgICA8YXJlLW1vZHVsZXMtc2hvd24gdmFsdWU9ImZhbHNlIiAvPgorICAgICAgICA8ZmxhdHRlbi1wYWNrYWdlcyB2YWx1ZT0iZmFsc2UiIC8+CisgICAgICAgIDxpcy1hdXRvc2Nyb2xsLXRvLXNvdXJjZSB2YWx1ZT0iZmFsc2UiIC8+CisgICAgICA8L3ZhbHVlPgorICAgIDwvb3B0aW9uPgorICAgIDxvcHRpb24gbmFtZT0iUEVSRk9STV9VUERBVEVfSU5fQkFDS0dST1VORCIgdmFsdWU9InRydWUiIC8+CisgICAgPG9wdGlvbiBuYW1lPSJQRVJGT1JNX0NPTU1JVF9JTl9CQUNLR1JPVU5EIiB2YWx1ZT0idHJ1ZSIgLz4KKyAgICA8b3B0aW9uIG5hbWU9IlBFUkZPUk1fRURJVF9JTl9CQUNLR1JPVU5EIiB2YWx1ZT0idHJ1ZSIgLz4KKyAgICA8b3B0aW9uIG5hbWU9IlBFUkZPUk1fQ0hFQ0tPVVRfSU5fQkFDS0dST1VORCIgdmFsdWU9InRydWUiIC8+CisgICAgPG9wdGlvbiBuYW1lPSJQRVJGT1JNX0FERF9SRU1PVkVfSU5fQkFDS0dST1VORCIgdmFsdWU9InRydWUiIC8+CisgICAgPG9wdGlvbiBuYW1lPSJQRVJGT1JNX1JPTExCQUNLX0lOX0JBQ0tHUk9VTkQiIHZhbHVlPSJmYWxzZSIgLz4KKyAgICA8b3B0aW9uIG5hbWU9IkNIRUNLX0xPQ0FMTFlfQ0hBTkdFRF9DT05GTElDVFNfSU5fQkFDS0dST1VORCIgdmFsdWU9ImZhbHNlIiAvPgorICAgIDxvcHRpb24gbmFtZT0iRU5BQkxFX0JBQ0tHUk9VTkRfUFJPQ0VTU0VTIiB2YWx1ZT0iZmFsc2UiIC8+CisgICAgPG9wdGlvbiBuYW1lPSJDSEFOR0VEX09OX1NFUlZFUl9JTlRFUlZBTCIgdmFsdWU9IjYwIiAvPgorICAgIDxvcHRpb24gbmFtZT0iU0hPV19PTkxZX0NIQU5HRURfSU5fU0VMRUNUSU9OX0RJRkYiIHZhbHVlPSJ0cnVlIiAvPgorICAgIDxvcHRpb24gbmFtZT0iQ0hFQ0tfQ09NTUlUX01FU1NBR0VfU1BFTExJTkciIHZhbHVlPSJ0cnVlIiAvPgorICAgIDxvcHRpb24gbmFtZT0iREVGQVVMVF9QQVRDSF9FWFRFTlNJT04iIHZhbHVlPSJwYXRjaCIgLz4KKyAgICA8b3B0aW9uIG5hbWU9IlNIT1JUX0RJRkZfSE9SSVNPTlRBTExZIiB2YWx1ZT0idHJ1ZSIgLz4KKyAgICA8b3B0aW9uIG5hbWU9IlNIT1JUX0RJRkZfRVhUUkFfTElORVMiIHZhbHVlPSIyIiAvPgorICAgIDxvcHRpb24gbmFtZT0iU09GVF9XUkFQU19JTl9TSE9SVF9ESUZGIiB2YWx1ZT0idHJ1ZSIgLz4KKyAgICA8b3B0aW9uIG5hbWU9IklOQ0xVREVfVEVYVF9JTlRPX1BBVENIIiB2YWx1ZT0iZmFsc2UiIC8+CisgICAgPG9wdGlvbiBuYW1lPSJJTkNMVURFX1RFWFRfSU5UT19TSEVMRiIgdmFsdWU9ImZhbHNlIiAvPgorICAgIDxvcHRpb24gbmFtZT0iRk9SQ0VfTk9OX0VNUFRZX0NPTU1FTlQiIHZhbHVlPSJmYWxzZSIgLz4KKyAgICA8b3B0aW9uIG5hbWU9IkxBU1RfQ09NTUlUX01FU1NBR0UiIC8+CisgICAgPG9wdGlvbiBuYW1lPSJNQUtFX05FV19DSEFOR0VMSVNUX0FDVElWRSIgdmFsdWU9InRydWUiIC8+CisgICAgPG9wdGlvbiBuYW1lPSJPUFRJTUlaRV9JTVBPUlRTX0JFRk9SRV9QUk9KRUNUX0NPTU1JVCIgdmFsdWU9ImZhbHNlIiAvPgorICAgIDxvcHRpb24gbmFtZT0iQ0hFQ0tfRklMRVNfVVBfVE9fREFURV9CRUZPUkVfQ09NTUlUIiB2YWx1ZT0iZmFsc2UiIC8+CisgICAgPG9wdGlvbiBuYW1lPSJSRUZPUk1BVF9CRUZPUkVfUFJPSkVDVF9DT01NSVQiIHZhbHVlPSJmYWxzZSIgLz4KKyAgICA8b3B0aW9uIG5hbWU9IlJFRk9STUFUX0JFRk9SRV9GSUxFX0NPTU1JVCIgdmFsdWU9ImZhbHNlIiAvPgorICAgIDxvcHRpb24gbmFtZT0iRklMRV9ISVNUT1JZX0RJQUxPR19DT01NRU5UU19TUExJVFRFUl9QUk9QT1JUSU9OIiB2YWx1ZT0iMC44IiAvPgorICAgIDxvcHRpb24gbmFtZT0iRklMRV9ISVNUT1JZX0RJQUxPR19TUExJVFRFUl9QUk9QT1JUSU9OIiB2YWx1ZT0iMC41IiAvPgorICAgIDxvcHRpb24gbmFtZT0iQUNUSVZFX1ZDU19OQU1FIiAvPgorICAgIDxvcHRpb24gbmFtZT0iVVBEQVRFX0dST1VQX0JZX1BBQ0tBR0VTIiB2YWx1ZT0iZmFsc2UiIC8+CisgICAgPG9wdGlvbiBuYW1lPSJVUERBVEVfR1JPVVBfQllfQ0hBTkdFTElTVCIgdmFsdWU9ImZhbHNlIiAvPgorICAgIDxvcHRpb24gbmFtZT0iU0hPV19GSUxFX0hJU1RPUllfQVNfVFJFRSIgdmFsdWU9ImZhbHNlIiAvPgorICAgIDxvcHRpb24gbmFtZT0iRklMRV9ISVNUT1JZX1NQTElUVEVSX1BST1BPUlRJT04iIHZhbHVlPSIwLjYiIC8+CisgIDwvY29tcG9uZW50PgorICA8Y29tcG9uZW50IG5hbWU9IlhEZWJ1Z2dlck1hbmFnZXIiPgorICAgIDxicmVha3BvaW50LW1hbmFnZXIgLz4KKyAgPC9jb21wb25lbnQ+CisgIDxjb21wb25lbnQgbmFtZT0iZWRpdG9ySGlzdG9yeU1hbmFnZXIiPgorICAgIDxlbnRyeSBmaWxlPSJmaWxlOi8vJFBST0pFQ1RfRElSJC9zcmMveC9BQ2xhc3MuamF2YSI+CisgICAgICA8cHJvdmlkZXIgc2VsZWN0ZWQ9InRydWUiIGVkaXRvci10eXBlLWlkPSJ0ZXh0LWVkaXRvciI+CisgICAgICAgIDxzdGF0ZSBsaW5lPSIzIiBjb2x1bW49IjQ5IiBzZWxlY3Rpb24tc3RhcnQ9IjM1IiBzZWxlY3Rpb24tZW5kPSIzNSIgdmVydGljYWwtc2Nyb2xsLXByb3BvcnRpb249IjAuMDE5NDA2MzkzIj4KKyAgICAgICAgICA8Zm9sZGluZyAvPgorICAgICAgICA8L3N0YXRlPgorICAgICAgPC9wcm92aWRlcj4KKyAgICA8L2VudHJ5PgorICA8L2NvbXBvbmVudD4KKzwvcHJvamVjdD4KKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL21vZGVsL3NyYy94L0FDbGFzcy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL21vZGVsL3NyYy94L0FDbGFzcy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJkMTJlYjIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvbW9kZWwvc3JjL3gvQUNsYXNzLmphdmEKQEAgLTAsMCArMSwxOSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDAwLTIwMTIgSmV0QnJhaW5zIHMuci5vLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KK3BhY2thZ2UgeDsKKworcHVibGljIGNsYXNzIEFDbGFzcyB7Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvbW9kZWwvc3JjL3gvQkNsYXNzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvbW9kZWwvc3JjL3gvQkNsYXNzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDVlMWI2ZAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9tb2RlbC9zcmMveC9CQ2xhc3MuamF2YQpAQCAtMCwwICsxLDE5IEBACisvKgorICogQ29weXJpZ2h0IDIwMDAtMjAxMiBKZXRCcmFpbnMgcy5yLm8uCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworcGFja2FnZSB4OworCitwdWJsaWMgY2xhc3MgQkNsYXNzIHsKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9tb2R1bGVSb290TWFuYWdlci9jb21waWxlck91dHB1dEluaGVyaXRhbmNlL3Rlc3QuaW1sIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL21vZHVsZVJvb3RNYW5hZ2VyL2NvbXBpbGVyT3V0cHV0SW5oZXJpdGFuY2UvdGVzdC5pbWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWQxOTYwNQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9tb2R1bGVSb290TWFuYWdlci9jb21waWxlck91dHB1dEluaGVyaXRhbmNlL3Rlc3QuaW1sCkBAIC0wLDAgKzEsNCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxtb2R1bGUgdmVyc2lvbj0iNCIgcmVsYXRpdmVQYXRocz0idHJ1ZSI+Cis8Y29tcG9uZW50IG5hbWU9Ik5ld01vZHVsZVJvb3RNYW5hZ2VyIiAvPgorPC9tb2R1bGU+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL21vZHVsZVJvb3RNYW5hZ2VyL2NvbnRlbnRXcml0ZS9jbGFzc2VzL2VtcHR5LnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9tb2R1bGVSb290TWFuYWdlci9jb250ZW50V3JpdGUvY2xhc3Nlcy9lbXB0eS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY5ZGUyOQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9tb2R1bGVSb290TWFuYWdlci9jb250ZW50V3JpdGUvY2xhc3Nlcy9lbXB0eS50eHQKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9tb2R1bGVSb290TWFuYWdlci9jb250ZW50V3JpdGUvZXhjbHVkZS9lbXB0eS50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvbW9kdWxlUm9vdE1hbmFnZXIvY29udGVudFdyaXRlL2V4Y2x1ZGUvZW1wdHkudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2OWRlMjkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvbW9kdWxlUm9vdE1hbmFnZXIvY29udGVudFdyaXRlL2V4Y2x1ZGUvZW1wdHkudHh0CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvbW9kdWxlUm9vdE1hbmFnZXIvY29udGVudFdyaXRlL3NvdXJjZS9lbXB0eS50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvbW9kdWxlUm9vdE1hbmFnZXIvY29udGVudFdyaXRlL3NvdXJjZS9lbXB0eS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY5ZGUyOQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9tb2R1bGVSb290TWFuYWdlci9jb250ZW50V3JpdGUvc291cmNlL2VtcHR5LnR4dApkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL21vZHVsZVJvb3RNYW5hZ2VyL2NvbnRlbnRXcml0ZS90ZXN0LmltbCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9tb2R1bGVSb290TWFuYWdlci9jb250ZW50V3JpdGUvdGVzdC5pbWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWQxOTYwNQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9tb2R1bGVSb290TWFuYWdlci9jb250ZW50V3JpdGUvdGVzdC5pbWwKQEAgLTAsMCArMSw0IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPG1vZHVsZSB2ZXJzaW9uPSI0IiByZWxhdGl2ZVBhdGhzPSJ0cnVlIj4KKzxjb21wb25lbnQgbmFtZT0iTmV3TW9kdWxlUm9vdE1hbmFnZXIiIC8+Cis8L21vZHVsZT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvbW9kdWxlUm9vdE1hbmFnZXIvY29udGVudFdyaXRlL3Rlc3RDbGFzc2VzL2VtcHR5LnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9tb2R1bGVSb290TWFuYWdlci9jb250ZW50V3JpdGUvdGVzdENsYXNzZXMvZW1wdHkudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2OWRlMjkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvbW9kdWxlUm9vdE1hbmFnZXIvY29udGVudFdyaXRlL3Rlc3RDbGFzc2VzL2VtcHR5LnR4dApkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL21vZHVsZVJvb3RNYW5hZ2VyL2NvbnRlbnRXcml0ZS90ZXN0U291cmNlL2VtcHR5LnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9tb2R1bGVSb290TWFuYWdlci9jb250ZW50V3JpdGUvdGVzdFNvdXJjZS9lbXB0eS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY5ZGUyOQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9tb2R1bGVSb290TWFuYWdlci9jb250ZW50V3JpdGUvdGVzdFNvdXJjZS9lbXB0eS50eHQKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9tb2R1bGVSb290TWFuYWdlci9jb252ZXJ0b3IzNC9saWJyYXJ5VGFibGUvYWZ0ZXIvYXBwbGljYXRpb25MaWJyYXJpZXMueG1sIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL21vZHVsZVJvb3RNYW5hZ2VyL2NvbnZlcnRvcjM0L2xpYnJhcnlUYWJsZS9hZnRlci9hcHBsaWNhdGlvbkxpYnJhcmllcy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTljNjNmMAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9tb2R1bGVSb290TWFuYWdlci9jb252ZXJ0b3IzNC9saWJyYXJ5VGFibGUvYWZ0ZXIvYXBwbGljYXRpb25MaWJyYXJpZXMueG1sCkBAIC0wLDAgKzEsMTIgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8YXBwbGljYXRpb24+CisgIDxjb21wb25lbnQgbmFtZT0ibGlicmFyeVRhYmxlIj4KKyAgICA8bGlicmFyeSBuYW1lPSJ4eHgiPgorICAgICAgPENMQVNTRVM+CisgICAgICAgIDxyb290IHVybD0iZmlsZTovLy9iaW4iIC8+CisgICAgICA8L0NMQVNTRVM+CisgICAgICA8SkFWQURPQyAvPgorICAgICAgPFNPVVJDRVMgLz4KKyAgICA8L2xpYnJhcnk+CisgIDwvY29tcG9uZW50PgorPC9hcHBsaWNhdGlvbj4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvbW9kdWxlUm9vdE1hbmFnZXIvY29udmVydG9yMzQvbGlicmFyeVRhYmxlL2JlZm9yZS9saWJyYXJ5LnRhYmxlLnhtbCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9tb2R1bGVSb290TWFuYWdlci9jb252ZXJ0b3IzNC9saWJyYXJ5VGFibGUvYmVmb3JlL2xpYnJhcnkudGFibGUueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhjNDgxYjEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvbW9kdWxlUm9vdE1hbmFnZXIvY29udmVydG9yMzQvbGlicmFyeVRhYmxlL2JlZm9yZS9saWJyYXJ5LnRhYmxlLnhtbApAQCAtMCwwICsxLDI3IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPGFwcGxpY2F0aW9uPgorICA8Y29tcG9uZW50IG5hbWU9IlByb2plY3RMaWJyYXJ5VGFibGUiPgorICAgIDxsaWJyYXJ5PgorICAgICAgPG5hbWUgdmFsdWU9Inh4eCIgLz4KKyAgICAgIDxyb290cz4KKyAgICAgICAgPHByb2plY3RQYXRoPgorICAgICAgICAgIDxyb290IHR5cGU9ImNvbXBvc2l0ZSIgLz4KKyAgICAgICAgPC9wcm9qZWN0UGF0aD4KKyAgICAgICAgPHNvdXJjZVBhdGg+CisgICAgICAgICAgPHJvb3QgdHlwZT0iY29tcG9zaXRlIiAvPgorICAgICAgICA8L3NvdXJjZVBhdGg+CisgICAgICAgIDxjbGFzc1BhdGg+CisgICAgICAgICAgPHJvb3QgdHlwZT0iY29tcG9zaXRlIj4KKyAgICAgICAgICAgICA8cm9vdCB0eXBlPSJzaW1wbGUiIHVybD0iZmlsZTovLy9iaW4iIC8+CisgICAgICAgICAgPC9yb290PgorICAgICAgICA8L2NsYXNzUGF0aD4KKyAgICAgICAgPGV4Y2x1ZGVQYXRoPgorICAgICAgICAgIDxyb290IHR5cGU9ImNvbXBvc2l0ZSIgLz4KKyAgICAgICAgPC9leGNsdWRlUGF0aD4KKyAgICAgICAgPGphdmFkb2NQYXRoPgorICAgICAgICAgIDxyb290IHR5cGU9ImNvbXBvc2l0ZSIgLz4KKyAgICAgICAgPC9qYXZhZG9jUGF0aD4KKyAgICAgIDwvcm9vdHM+CisgICAgPC9saWJyYXJ5PgorICA8L2NvbXBvbmVudD4KKzwvYXBwbGljYXRpb24+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL21vZHVsZVJvb3RNYW5hZ2VyL2NvbnZlcnRvcjM0L3NjcjI0NTE3L2FmdGVyL3NlLm1kaC5odG1sLmltbCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9tb2R1bGVSb290TWFuYWdlci9jb252ZXJ0b3IzNC9zY3IyNDUxNy9hZnRlci9zZS5tZGguaHRtbC5pbWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWEyNWY2ZQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9tb2R1bGVSb290TWFuYWdlci9jb252ZXJ0b3IzNC9zY3IyNDUxNy9hZnRlci9zZS5tZGguaHRtbC5pbWwKQEAgLTAsMCArMSwxNSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxtb2R1bGUgdmVyc2lvbj0iNCIgcmVsYXRpdmVQYXRocz0idHJ1ZSI+Cis8Y29tcG9uZW50IG5hbWU9Ik5ld01vZHVsZVJvb3RNYW5hZ2VyIj4KKyAgPGNvbnRlbnQgdXJsPSJmaWxlOi8vJE1PRFVMRV9ESVIkIj4KKyAgICA8c291cmNlRm9sZGVyIGlzVGVzdFNvdXJjZT0iZmFsc2UiIHVybD0iZmlsZTovLyRNT0RVTEVfRElSJC9zcmMiIC8+CisgICAgPHNvdXJjZUZvbGRlciBpc1Rlc3RTb3VyY2U9ImZhbHNlIiB1cmw9ImZpbGU6Ly8kTU9EVUxFX0RJUiQvdGVzdC9zcmMiIC8+CisgIDwvY29udGVudD4KKyAgPG9yZGVyRW50cnkgdHlwZT0iamRrIiBqZGtOYW1lPSJqYXZhIHZlcnNpb24gJnF1b3Q7MS4zLjEmcXVvdDsiIC8+CisgIDxvcmRlckVudHJ5IHR5cGU9InNvdXJjZUZvbGRlciIgLz4KKyAgPG9yZGVyRW50cnkgdHlwZT0ibGlicmFyeSIgbmFtZT0iamFrYXJ0YS1jb21tb25zLWxhbmctMi4wIiBsZXZlbD0iYXBwbGljYXRpb24iIC8+CisgIDxvdXRwdXQgdXJsPSJmaWxlOi8vJE1PRFVMRV9ESVIkL2J1aWxkIiAvPgorICA8b3V0cHV0LXRlc3QgdXJsPSJmaWxlOi8vJE1PRFVMRV9ESVIkL2J1aWxkIiAvPgorICA8ZXhjbHVkZS1vdXRwdXQgLz4KKzwvY29tcG9uZW50PgorPC9tb2R1bGU+CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvbW9kdWxlUm9vdE1hbmFnZXIvY29udmVydG9yMzQvc2NyMjQ1MTcvYWZ0ZXIvc2UubWRoLmh0bWwuaXByIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL21vZHVsZVJvb3RNYW5hZ2VyL2NvbnZlcnRvcjM0L3NjcjI0NTE3L2FmdGVyL3NlLm1kaC5odG1sLmlwcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNjQxNTEyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL21vZHVsZVJvb3RNYW5hZ2VyL2NvbnZlcnRvcjM0L3NjcjI0NTE3L2FmdGVyL3NlLm1kaC5odG1sLmlwcgpAQCAtMCwwICsxLDggQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8cHJvamVjdCB2ZXJzaW9uPSI0IiByZWxhdGl2ZVBhdGhzPSJ0cnVlIj4KKyAgPGNvbXBvbmVudCBuYW1lPSJQcm9qZWN0TW9kdWxlTWFuYWdlciI+CisgICAgPG1vZHVsZXM+CisgICAgICA8bW9kdWxlIGZpbGVwYXRoPSIkUFJPSkVDVF9ESVIkL3NlLm1kaC5odG1sLmltbCIgZmlsZXVybD0iZmlsZTovLyRQUk9KRUNUX0RJUiQvc2UubWRoLmh0bWwuaW1sIiAvPgorICAgIDwvbW9kdWxlcz4KKyAgPC9jb21wb25lbnQ+Cis8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvbW9kdWxlUm9vdE1hbmFnZXIvY29udmVydG9yMzQvc2NyMjQ1MTcvYmVmb3JlL3NlLm1kaC5odG1sLmlwciBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9tb2R1bGVSb290TWFuYWdlci9jb252ZXJ0b3IzNC9zY3IyNDUxNy9iZWZvcmUvc2UubWRoLmh0bWwuaXByCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE2ODBkOGEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvbW9kdWxlUm9vdE1hbmFnZXIvY29udmVydG9yMzQvc2NyMjQ1MTcvYmVmb3JlL3NlLm1kaC5odG1sLmlwcgpAQCAtMCwwICsxLDExMSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxwcm9qZWN0IHZlcnNpb249IjMiIHJlbGF0aXZlUGF0aHM9ImZhbHNlIj4KKyAgPGNvbXBvbmVudCBuYW1lPSJQcm9qZWN0Um9vdE1hbmFnZXIiIHZlcnNpb249IjIiPgorICAgIDxqZGsgbmFtZT0iamF2YSB2ZXJzaW9uICZxdW90OzEuMy4xJnF1b3Q7IiAvPgorICAgIDxsaWJyYXJ5IG5hbWU9Impha2FydGEtY29tbW9ucy1sYW5nLTIuMCIgLz4KKyAgICA8cHJvamVjdFBhdGg+CisgICAgICA8cm9vdCB0eXBlPSJjb21wb3NpdGUiPgorICAgICAgICA8cm9vdCB0eXBlPSJzaW1wbGUiIHVybD0iZmlsZTovLyRQUk9KRUNUX0RJUiQiIC8+CisgICAgICA8L3Jvb3Q+CisgICAgPC9wcm9qZWN0UGF0aD4KKyAgICA8c291cmNlUGF0aD4KKyAgICAgIDxyb290IHR5cGU9ImNvbXBvc2l0ZSI+CisgICAgICAgIDxyb290IHR5cGU9ImpkayIgcm9vdFR5cGU9InNvdXJjZVBhdGgiIG5hbWU9ImphdmEgdmVyc2lvbiAmcXVvdDsxLjMuMSZxdW90OyIgLz4KKyAgICAgICAgPHJvb3QgdHlwZT0ic2ltcGxlIiB1cmw9ImZpbGU6Ly8kUFJPSkVDVF9ESVIkL3NyYyIgLz4KKyAgICAgICAgPHJvb3QgdHlwZT0ic2ltcGxlIiB1cmw9ImZpbGU6Ly8kUFJPSkVDVF9ESVIkL3Rlc3Qvc3JjIiAvPgorICAgICAgICA8cm9vdCB0eXBlPSJsaWJyYXJ5IiByb290VHlwZT0ic291cmNlUGF0aCIgbmFtZT0iamFrYXJ0YS1jb21tb25zLWxhbmctMi4wIiAvPgorICAgICAgPC9yb290PgorICAgIDwvc291cmNlUGF0aD4KKyAgICA8Y2xhc3NQYXRoPgorICAgICAgPHJvb3QgdHlwZT0iY29tcG9zaXRlIj4KKyAgICAgICAgPHJvb3QgdHlwZT0iamRrIiByb290VHlwZT0iY2xhc3NQYXRoIiBuYW1lPSJqYXZhIHZlcnNpb24gJnF1b3Q7MS4zLjEmcXVvdDsiIC8+CisgICAgICAgIDxyb290IHR5cGU9Im91dHB1dCIgLz4KKyAgICAgICAgPHJvb3QgdHlwZT0ibGlicmFyeSIgcm9vdFR5cGU9ImNsYXNzUGF0aCIgbmFtZT0iamFrYXJ0YS1jb21tb25zLWxhbmctMi4wIiAvPgorICAgICAgPC9yb290PgorICAgIDwvY2xhc3NQYXRoPgorICAgIDxleGNsdWRlUGF0aD4KKyAgICAgIDxyb290IHR5cGU9ImNvbXBvc2l0ZSI+CisgICAgICAgIDxyb290IHR5cGU9ImpkayIgcm9vdFR5cGU9ImV4Y2x1ZGVQYXRoIiBuYW1lPSJqYXZhIHZlcnNpb24gJnF1b3Q7MS4zLjEmcXVvdDsiIC8+CisgICAgICAgIDxyb290IHR5cGU9ImV4Y2x1ZGVkT3V0cHV0IiAvPgorICAgICAgPC9yb290PgorICAgIDwvZXhjbHVkZVBhdGg+CisgICAgPGphdmFkb2NQYXRoPgorICAgICAgPHJvb3QgdHlwZT0iY29tcG9zaXRlIj4KKyAgICAgICAgPHJvb3QgdHlwZT0iamRrIiByb290VHlwZT0iamF2YWRvY1BhdGgiIG5hbWU9ImphdmEgdmVyc2lvbiAmcXVvdDsxLjMuMSZxdW90OyIgLz4KKyAgICAgICAgPHJvb3QgdHlwZT0ibGlicmFyeSIgcm9vdFR5cGU9ImphdmFkb2NQYXRoIiBuYW1lPSJqYWthcnRhLWNvbW1vbnMtbGFuZy0yLjAiIC8+CisgICAgICA8L3Jvb3Q+CisgICAgPC9qYXZhZG9jUGF0aD4KKyAgICA8YXNzZXJ0X2tleXdvcmQgZW5hYmxlZD0ibm8iIC8+CisgICAgPGV4Y2x1ZGVfb3V0cHV0IGVuYWJsZWQ9InllcyIgLz4KKyAgPC9jb21wb25lbnQ+CisgIDxjb21wb25lbnQgbmFtZT0iQ29tcGlsZXJDb25maWd1cmF0aW9uIj4KKyAgICA8b3B0aW9uIG5hbWU9IkRFRkFVTFRfQ09NUElMRVIiIHZhbHVlPSJKYXZhYyIgLz4KKyAgICA8b3B0aW9uIG5hbWU9IlNZTkNIUk9OSVpFX09VVFBVVF9ESVJFQ1RPUlkiIHZhbHVlPSJmYWxzZSIgLz4KKyAgICA8b3B0aW9uIG5hbWU9IkRFRkFVTFRfT1VUUFVUX1BBVEgiIHZhbHVlPSIkUFJPSkVDVF9ESVIkL2J1aWxkIiAvPgorICAgIDxvcHRpb24gbmFtZT0iT1VUUFVUX01PREUiIHZhbHVlPSJzaW5nbGUiIC8+CisgICAgPHJlc291cmNlRXh0ZW5zaW9ucyAvPgorICA8L2NvbXBvbmVudD4KKyAgPGNvbXBvbmVudCBuYW1lPSJKYXZhY1NldHRpbmdzIj4KKyAgICA8b3B0aW9uIG5hbWU9IkRFQlVHR0lOR19JTkZPIiB2YWx1ZT0idHJ1ZSIgLz4KKyAgICA8b3B0aW9uIG5hbWU9IkdFTkVSQVRFX05PX1dBUk5JTkdTIiB2YWx1ZT0iZmFsc2UiIC8+CisgICAgPG9wdGlvbiBuYW1lPSJERVBSRUNBVElPTiIgdmFsdWU9InRydWUiIC8+CisgICAgPG9wdGlvbiBuYW1lPSJBRERJVElPTkFMX09QVElPTlNfU1RSSU5HIiB2YWx1ZT0iIiAvPgorICAgIDxvcHRpb24gbmFtZT0iTUFYSU1VTV9IRUFQX1NJWkUiIHZhbHVlPSIxMjgiIC8+CisgIDwvY29tcG9uZW50PgorICA8Y29tcG9uZW50IG5hbWU9Ikppa2VzU2V0dGluZ3MiPgorICAgIDxvcHRpb24gbmFtZT0iSklLRVNfUEFUSCIgdmFsdWU9IiIgLz4KKyAgICA8b3B0aW9uIG5hbWU9IkRFQlVHR0lOR19JTkZPIiB2YWx1ZT0idHJ1ZSIgLz4KKyAgICA8b3B0aW9uIG5hbWU9IkRFUFJFQ0FUSU9OIiB2YWx1ZT0idHJ1ZSIgLz4KKyAgICA8b3B0aW9uIG5hbWU9IkdFTkVSQVRFX05PX1dBUk5JTkdTIiB2YWx1ZT0iZmFsc2UiIC8+CisgICAgPG9wdGlvbiBuYW1lPSJHRU5FUkFURV9NQUtFX0ZJTEVfREVQRU5ERU5DSUVTIiB2YWx1ZT0iZmFsc2UiIC8+CisgICAgPG9wdGlvbiBuYW1lPSJET19GVUxMX0RFUEVOREVOQ0VfQ0hFQ0siIHZhbHVlPSJmYWxzZSIgLz4KKyAgICA8b3B0aW9uIG5hbWU9IklTX0VNQUNTX0VSUk9SU19NT0RFIiB2YWx1ZT0idHJ1ZSIgLz4KKyAgICA8b3B0aW9uIG5hbWU9IkFERElUSU9OQUxfT1BUSU9OU19TVFJJTkciIHZhbHVlPSIiIC8+CisgIDwvY29tcG9uZW50PgorICA8Y29tcG9uZW50IG5hbWU9IkFudENvbmZpZ3VyYXRpb24iPgorICAgIDxvcHRpb24gbmFtZT0iSVNfQVVUT1NDUk9MTF9UT19TT1VSQ0UiIHZhbHVlPSJmYWxzZSIgLz4KKyAgICA8b3B0aW9uIG5hbWU9IkZJTFRFUl9UQVJHRVRTIiB2YWx1ZT0iZmFsc2UiIC8+CisgIDwvY29tcG9uZW50PgorICA8Y29tcG9uZW50IG5hbWU9IkphdmFkb2NHZW5lcmF0aW9uTWFuYWdlciI+CisgICAgPG9wdGlvbiBuYW1lPSJPVVRQVVRfRElSRUNUT1JZIiAvPgorICAgIDxvcHRpb24gbmFtZT0iT1BUSU9OX1NDT1BFIiB2YWx1ZT0icHJvdGVjdGVkIiAvPgorICAgIDxvcHRpb24gbmFtZT0iT1BUSU9OX0hJRVJBUkNIWSIgdmFsdWU9ImZhbHNlIiAvPgorICAgIDxvcHRpb24gbmFtZT0iT1BUSU9OX05BVklHQVRPUiIgdmFsdWU9ImZhbHNlIiAvPgorICAgIDxvcHRpb24gbmFtZT0iT1BUSU9OX0lOREVYIiB2YWx1ZT0iZmFsc2UiIC8+CisgICAgPG9wdGlvbiBuYW1lPSJPUFRJT05fU0VQQVJBVEVfSU5ERVgiIHZhbHVlPSJmYWxzZSIgLz4KKyAgICA8b3B0aW9uIG5hbWU9Ik9QVElPTl9ET0NVTUVOVF9UQUdfVVNFIiB2YWx1ZT0idHJ1ZSIgLz4KKyAgICA8b3B0aW9uIG5hbWU9Ik9QVElPTl9ET0NVTUVOVF9UQUdfQVVUSE9SIiB2YWx1ZT0idHJ1ZSIgLz4KKyAgICA8b3B0aW9uIG5hbWU9Ik9QVElPTl9ET0NVTUVOVF9UQUdfVkVSU0lPTiIgdmFsdWU9InRydWUiIC8+CisgICAgPG9wdGlvbiBuYW1lPSJPUFRJT05fRE9DVU1FTlRfVEFHX0RFUFJFQ0FURUQiIHZhbHVlPSJ0cnVlIiAvPgorICAgIDxvcHRpb24gbmFtZT0iT1BUSU9OX0RFUFJFQ0FURURfTElTVCIgdmFsdWU9InRydWUiIC8+CisgICAgPG9wdGlvbiBuYW1lPSJPVEhFUl9PUFRJT05TIiAvPgorICAgIDxvcHRpb24gbmFtZT0iSEVBUF9TSVpFIiAvPgorICAgIDxvcHRpb24gbmFtZT0iT1BFTl9JTl9CUk9XU0VSIiB2YWx1ZT0iZmFsc2UiIC8+CisgIDwvY29tcG9uZW50PgorICA8Y29tcG9uZW50IG5hbWU9IldlYk1hbmFnZXIiPgorICAgIDxvcHRpb24gZW5hYmxlZD0iZmFsc2UiIC8+CisgIDwvY29tcG9uZW50PgorICA8Y29tcG9uZW50IG5hbWU9IldlYlJvb3RDb250YWluZXIiIC8+CisgIDxjb21wb25lbnQgbmFtZT0iRWpiTWFuYWdlciIgZW5hYmxlZD0iZmFsc2UiIC8+CisgIDxjb21wb25lbnQgbmFtZT0iSlVuaXRQcm9qZWN0U2V0dGluZ3MiPgorICAgIDxvcHRpb24gbmFtZT0iVEVTVF9SVU5ORVIiIHZhbHVlPSJVSSIgLz4KKyAgPC9jb21wb25lbnQ+CisgIDxjb21wb25lbnQgbmFtZT0iRW50cnlQb2ludHNNYW5hZ2VyIj4KKyAgICA8ZW50cnlfcG9pbnRzIC8+CisgIDwvY29tcG9uZW50PgorICA8Y29tcG9uZW50IG5hbWU9IkVqYkFjdGlvbnNDb25maWd1cmF0aW9uIj4KKyAgICA8b3B0aW9uIG5hbWU9Ik5FV19NRVNTQUdFX0JFQU5fTEFTVF9QQUNLQUdFIiB2YWx1ZT0iIiAvPgorICAgIDxvcHRpb24gbmFtZT0iTkVXX0VOVElUWV9CRUFOX0xBU1RfUEFDS0FHRSIgdmFsdWU9IiIgLz4KKyAgICA8b3B0aW9uIG5hbWU9Ik5FV19TRVNTSU9OX0JFQU5fTEFTVF9QQUNLQUdFIiB2YWx1ZT0iIiAvPgorICA8L2NvbXBvbmVudD4KKyAgPGNvbXBvbmVudCBuYW1lPSJDb2RlU3R5bGVNYW5hZ2VyIj4KKyAgICA8b3B0aW9uIG5hbWU9IlVTRV9ERUZBVUxUX0NPREVfU1RZTEVfU0NIRU1FIiB2YWx1ZT0idHJ1ZSIgLz4KKyAgICA8b3B0aW9uIG5hbWU9IkNPREVfU1RZTEVfU0NIRU1FIiB2YWx1ZT0iIiAvPgorICA8L2NvbXBvbmVudD4KKyAgPGNvbXBvbmVudCBuYW1lPSJFeHBvcnRUb0hUTUxTZXR0aW5ncyI+CisgICAgPG9wdGlvbiBuYW1lPSJQUklOVF9MSU5FX05VTUJFUlMiIHZhbHVlPSJmYWxzZSIgLz4KKyAgICA8b3B0aW9uIG5hbWU9Ik9QRU5fSU5fQlJPV1NFUiIgdmFsdWU9ImZhbHNlIiAvPgorICAgIDxvcHRpb24gbmFtZT0iT1VUUFVUX0RJUkVDVE9SWSIgLz4KKyAgPC9jb21wb25lbnQ+Cis8L3Byb2plY3Q+CisKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9tb2R1bGVSb290TWFuYWdlci9jb252ZXJ0b3IzNC9zY3IyNTI5OC9hZnRlci9hcHBsaWNhdGlvbkxpYnJhcmllcy54bWwgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvbW9kdWxlUm9vdE1hbmFnZXIvY29udmVydG9yMzQvc2NyMjUyOTgvYWZ0ZXIvYXBwbGljYXRpb25MaWJyYXJpZXMueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRmMTNmZWYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvbW9kdWxlUm9vdE1hbmFnZXIvY29udmVydG9yMzQvc2NyMjUyOTgvYWZ0ZXIvYXBwbGljYXRpb25MaWJyYXJpZXMueG1sCkBAIC0wLDAgKzEsNzQzIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPGFwcGxpY2F0aW9uPgorICA8Y29tcG9uZW50IG5hbWU9ImxpYnJhcnlUYWJsZSI+CisgICAgPGxpYnJhcnkgbmFtZT0iYWN0aXZhdGlvbiI+CisgICAgICA8Q0xBU1NFUz4KKyAgICAgICAgPHJvb3QgdXJsPSJqYXI6Ly9DOi9saWIvZXh0L2phZi8xXzBfMS9hY3RpdmF0aW9uLmphciEvIiAvPgorICAgICAgPC9DTEFTU0VTPgorICAgICAgPEpBVkFET0M+CisgICAgICAgIDxyb290IHVybD0iZmlsZTovL0M6L2xpYi9leHQvamFmLzFfMF8xL2RvY3MvamF2YWRvY3MiIC8+CisgICAgICA8L0pBVkFET0M+CisgICAgICA8U09VUkNFUyAvPgorICAgIDwvbGlicmFyeT4KKyAgICA8bGlicmFyeSBuYW1lPSJjb21tLTIuMCI+CisgICAgICA8Q0xBU1NFUz4KKyAgICAgICAgPHJvb3QgdXJsPSJqYXI6Ly9DOi9saWIvZXh0L2NvbW0vY29tbS5qYXIhLyIgLz4KKyAgICAgICAgPHJvb3QgdXJsPSJmaWxlOi8vQzovbGliL2V4dC9jb21tIiAvPgorICAgICAgPC9DTEFTU0VTPgorICAgICAgPEpBVkFET0M+CisgICAgICAgIDxyb290IHVybD0iZmlsZTovL0M6L2xpYi9leHQvY29tbS9qYXZhZG9jcyIgLz4KKyAgICAgIDwvSkFWQURPQz4KKyAgICAgIDxTT1VSQ0VTIC8+CisgICAgPC9saWJyYXJ5PgorICAgIDxsaWJyYXJ5IG5hbWU9ImRlbm5pc2x1bmRiZXJnLWNvZGVnZW5lcmF0aW9uLTIuMCI+CisgICAgICA8Q0xBU1NFUz4KKyAgICAgICAgPHJvb3QgdXJsPSJqYXI6Ly9DOi9saWIvZGVubmlzbHVuZGJlcmctY29kZWdlbmVyYXRpb24vUkVMRUFTRS0yXzAvY29kZWdlbmVyYXRpb24uamFyIS8iIC8+CisgICAgICA8L0NMQVNTRVM+CisgICAgICA8SkFWQURPQyAvPgorICAgICAgPFNPVVJDRVMgLz4KKyAgICA8L2xpYnJhcnk+CisgICAgPGxpYnJhcnkgbmFtZT0iZGVubmlzbHVuZGJlcmctc2thdHQtMS4wIj4KKyAgICAgIDxDTEFTU0VTPgorICAgICAgICA8cm9vdCB1cmw9ImphcjovL0M6L2xpYi9kZW5uaXNsdW5kYmVyZy1za2F0dC9SRUxFQVNFLTFfMC9kZW5uaXNsdW5kYmVyZy1za2F0dC5qYXIhLyIgLz4KKyAgICAgIDwvQ0xBU1NFUz4KKyAgICAgIDxKQVZBRE9DPgorICAgICAgICA8cm9vdCB1cmw9ImZpbGU6Ly9DOi9saWIvZGVubmlzbHVuZGJlcmctc2thdHQvUkVMRUFTRS0xXzAvZG9jcy9hcGkiIC8+CisgICAgICA8L0pBVkFET0M+CisgICAgICA8U09VUkNFUyAvPgorICAgIDwvbGlicmFyeT4KKyAgICA8bGlicmFyeSBuYW1lPSJpdGV4dC0xLjAwIj4KKyAgICAgIDxDTEFTU0VTPgorICAgICAgICA8cm9vdCB1cmw9ImphcjovL0M6L2xpYi9leHQvaXRleHQvaXRleHQtMS4wMC5qYXIhLyIgLz4KKyAgICAgIDwvQ0xBU1NFUz4KKyAgICAgIDxKQVZBRE9DIC8+CisgICAgICA8U09VUkNFUyAvPgorICAgIDwvbGlicmFyeT4KKyAgICA8bGlicmFyeSBuYW1lPSJpdGV4dC0xLjAxIj4KKyAgICAgIDxDTEFTU0VTPgorICAgICAgICA8cm9vdCB1cmw9ImphcjovL0M6L2xpYi9leHQvaXRleHQvaXRleHQtMS4wMS5qYXIhLyIgLz4KKyAgICAgIDwvQ0xBU1NFUz4KKyAgICAgIDxKQVZBRE9DIC8+CisgICAgICA8U09VUkNFUyAvPgorICAgIDwvbGlicmFyeT4KKyAgICA8bGlicmFyeSBuYW1lPSJqYWthcnRhLWNvbW1vbnMtbGFuZy0xLjAuMSI+CisgICAgICA8Q0xBU1NFUz4KKyAgICAgICAgPHJvb3QgdXJsPSJqYXI6Ly9DOi9saWIvZXh0L2pha2FydGEtY29tbW9ucy9jb21tb25zLWxhbmctMS4wLjEvY29tbW9ucy1sYW5nLTEuMC4xLmphciEvIiAvPgorICAgICAgPC9DTEFTU0VTPgorICAgICAgPEpBVkFET0M+CisgICAgICAgIDxyb290IHVybD0iZmlsZTovL0M6L2xpYi9leHQvamFrYXJ0YS1jb21tb25zL2NvbW1vbnMtbGFuZy0xLjAuMS9kb2NzL2FwaSIgLz4KKyAgICAgIDwvSkFWQURPQz4KKyAgICAgIDxTT1VSQ0VTIC8+CisgICAgPC9saWJyYXJ5PgorICAgIDxsaWJyYXJ5IG5hbWU9Impha2FydGEtY29tbW9ucy1sYW5nLTIuMCI+CisgICAgICA8Q0xBU1NFUz4KKyAgICAgICAgPHJvb3QgdXJsPSJqYXI6Ly9DOi9saWIvZXh0L2pha2FydGEtY29tbW9ucy9jb21tb25zLWxhbmctMi4wL2NvbW1vbnMtbGFuZy0yLjAuamFyIS8iIC8+CisgICAgICA8L0NMQVNTRVM+CisgICAgICA8SkFWQURPQz4KKyAgICAgICAgPHJvb3QgdXJsPSJmaWxlOi8vQzovbGliL2V4dC9qYWthcnRhLWNvbW1vbnMvY29tbW9ucy1sYW5nLTIuMC9kb2NzL2FwaSIgLz4KKyAgICAgIDwvSkFWQURPQz4KKyAgICAgIDxTT1VSQ0VTIC8+CisgICAgPC9saWJyYXJ5PgorICAgIDxsaWJyYXJ5IG5hbWU9Impha2FydGEtY29tbW9ucy1sb2dnaW5nLTEuMC4yIj4KKyAgICAgIDxDTEFTU0VTPgorICAgICAgICA8cm9vdCB1cmw9ImphcjovL0M6L2xpYi9leHQvamFrYXJ0YS1jb21tb25zL2NvbW1vbnMtbG9nZ2luZy0xLjAuMi9jb21tb25zLWxvZ2dpbmcuamFyIS8iIC8+CisgICAgICA8L0NMQVNTRVM+CisgICAgICA8SkFWQURPQz4KKyAgICAgICAgPHJvb3QgdXJsPSJmaWxlOi8vQzovbGliL2V4dC9qYWthcnRhLWNvbW1vbnMvY29tbW9ucy1sb2dnaW5nLTEuMC4yL2RvY3MvYXBpIiAvPgorICAgICAgPC9KQVZBRE9DPgorICAgICAgPFNPVVJDRVMgLz4KKyAgICA8L2xpYnJhcnk+CisgICAgPGxpYnJhcnkgbmFtZT0iamFrYXJ0YS1jb21tb25zLWxvZ2dpbmctMS4wLjMiPgorICAgICAgPENMQVNTRVM+CisgICAgICAgIDxyb290IHVybD0iamFyOi8vQzovbGliL2V4dC9qYWthcnRhLWNvbW1vbnMvY29tbW9ucy1sb2dnaW5nLTEuMC4zL2NvbW1vbnMtbG9nZ2luZy5qYXIhLyIgLz4KKyAgICAgIDwvQ0xBU1NFUz4KKyAgICAgIDxKQVZBRE9DPgorICAgICAgICA8cm9vdCB1cmw9ImZpbGU6Ly9DOi9saWIvZXh0L2pha2FydGEtY29tbW9ucy9jb21tb25zLWxvZ2dpbmctMS4wLjMvZG9jcy9hcGkiIC8+CisgICAgICA8L0pBVkFET0M+CisgICAgICA8U09VUkNFUyAvPgorICAgIDwvbGlicmFyeT4KKyAgICA8bGlicmFyeSBuYW1lPSJqbmRpIj4KKyAgICAgIDxDTEFTU0VTPgorICAgICAgICA8cm9vdCB1cmw9ImphcjovL0M6L2xpYi9leHQvam5kaS8xXzJfMS9saWIvam5kaS5qYXIhLyIgLz4KKyAgICAgIDwvQ0xBU1NFUz4KKyAgICAgIDxKQVZBRE9DPgorICAgICAgICA8cm9vdCB1cmw9ImZpbGU6Ly9DOi9saWIvZXh0L2puZGkvMV8yXzEvbGRhcC9kb2MvbGRhcGNvbnRyb2xzIiAvPgorICAgICAgICA8cm9vdCB1cmw9ImZpbGU6Ly9DOi9saWIvZXh0L2puZGkvMV8yXzEvbGRhcC9kb2Mvc2FzbCIgLz4KKyAgICAgIDwvSkFWQURPQz4KKyAgICAgIDxTT1VSQ0VTIC8+CisgICAgPC9saWJyYXJ5PgorICAgIDxsaWJyYXJ5IG5hbWU9Impzc2UiPgorICAgICAgPENMQVNTRVM+CisgICAgICAgIDxyb290IHVybD0iamFyOi8vQzovbGliL2V4dC9qc3NlL2xpYi9qY2VydC5qYXIhLyIgLz4KKyAgICAgICAgPHJvb3QgdXJsPSJqYXI6Ly9DOi9saWIvZXh0L2pzc2UvbGliL2puZXQuamFyIS8iIC8+CisgICAgICAgIDxyb290IHVybD0iamFyOi8vQzovbGliL2V4dC9qc3NlL2xpYi9qc3NlLmphciEvIiAvPgorICAgICAgPC9DTEFTU0VTPgorICAgICAgPEpBVkFET0M+CisgICAgICAgIDxyb290IHVybD0iZmlsZTovL0M6L2xpYi9leHQvanNzZS9kb2MvYXBpZG9jIiAvPgorICAgICAgPC9KQVZBRE9DPgorICAgICAgPFNPVVJDRVMgLz4KKyAgICA8L2xpYnJhcnk+CisgICAgPGxpYnJhcnkgbmFtZT0ianN0bC0xLjAiPgorICAgICAgPENMQVNTRVM+CisgICAgICAgIDxyb290IHVybD0iamFyOi8vQzovbGliL2V4dC9qYWthcnRhLXRhZ2xpYnMvc3RhbmRhcmQtMS4wLjMvbGliL2pzdGwuamFyIS8iIC8+CisgICAgICA8L0NMQVNTRVM+CisgICAgICA8SkFWQURPQz4KKyAgICAgICAgPHJvb3QgdXJsPSJmaWxlOi8vQzovbGliL2V4dC9qYWthcnRhLXRhZ2xpYnMvc3RhbmRhcmQtMS4wLjMvamF2YWRvYyIgLz4KKyAgICAgIDwvSkFWQURPQz4KKyAgICAgIDxTT1VSQ0VTIC8+CisgICAgPC9saWJyYXJ5PgorICAgIDxsaWJyYXJ5IG5hbWU9Imp0YSI+CisgICAgICA8Q0xBU1NFUz4KKyAgICAgICAgPHJvb3QgdXJsPSJqYXI6Ly9DOi9saWIvZXh0L2p0YS9qdGEyMC5qYXIhLyIgLz4KKyAgICAgIDwvQ0xBU1NFUz4KKyAgICAgIDxKQVZBRE9DIC8+CisgICAgICA8U09VUkNFUyAvPgorICAgIDwvbGlicmFyeT4KKyAgICA8bGlicmFyeSBuYW1lPSJqdW5pdCI+CisgICAgICA8Q0xBU1NFUz4KKyAgICAgICAgPHJvb3QgdXJsPSJqYXI6Ly9DOi9saWIvZXh0L2p1bml0LzNfOF8xL2p1bml0LmphciEvIiAvPgorICAgICAgPC9DTEFTU0VTPgorICAgICAgPEpBVkFET0M+CisgICAgICAgIDxyb290IHVybD0iZmlsZTovL0M6L2xpYi9leHQvanVuaXQvM184XzEvamF2YWRvYyIgLz4KKyAgICAgIDwvSkFWQURPQz4KKyAgICAgIDxTT1VSQ0VTIC8+CisgICAgPC9saWJyYXJ5PgorICAgIDxsaWJyYXJ5IG5hbWU9ImxvZzRqIj4KKyAgICAgIDxDTEFTU0VTPgorICAgICAgICA8cm9vdCB1cmw9ImphcjovL0M6L2xpYi9leHQvamFrYXJ0YS1sb2c0ai8xLjIuOC9kaXN0L2xpYi9sb2c0ai0xLjIuOC5qYXIhLyIgLz4KKyAgICAgIDwvQ0xBU1NFUz4KKyAgICAgIDxKQVZBRE9DPgorICAgICAgICA8cm9vdCB1cmw9ImZpbGU6Ly9DOi9saWIvZXh0L2pha2FydGEtbG9nNGovMS4yLjgvZG9jcy9hcGkiIC8+CisgICAgICA8L0pBVkFET0M+CisgICAgICA8U09VUkNFUyAvPgorICAgIDwvbGlicmFyeT4KKyAgICA8bGlicmFyeSBuYW1lPSJtYWlsLTEuMS4zIj4KKyAgICAgIDxDTEFTU0VTPgorICAgICAgICA8cm9vdCB1cmw9ImphcjovL0M6L2xpYi9leHQvamF2YW1haWwvamF2YW1haWwtMS4xLjMvbWFpbC5qYXIhLyIgLz4KKyAgICAgIDwvQ0xBU1NFUz4KKyAgICAgIDxKQVZBRE9DPgorICAgICAgICA8cm9vdCB1cmw9ImZpbGU6Ly9DOi9saWIvZXh0L2phdmFtYWlsL2phdmFtYWlsLTEuMS4zL2RvY3MvamF2YWRvY3MiIC8+CisgICAgICA8L0pBVkFET0M+CisgICAgICA8U09VUkNFUyAvPgorICAgIDwvbGlicmFyeT4KKyAgICA8bGlicmFyeSBuYW1lPSJtYWlsLTEuMiI+CisgICAgICA8Q0xBU1NFUz4KKyAgICAgICAgPHJvb3QgdXJsPSJqYXI6Ly9DOi9saWIvZXh0L2phdmFtYWlsL2phdmFtYWlsLTEuMi9tYWlsLmphciEvIiAvPgorICAgICAgPC9DTEFTU0VTPgorICAgICAgPEpBVkFET0M+CisgICAgICAgIDxyb290IHVybD0iZmlsZTovL0M6L2xpYi9leHQvamF2YW1haWwvamF2YW1haWwtMS4yL2RvY3MvamF2YWRvY3MiIC8+CisgICAgICA8L0pBVkFET0M+CisgICAgICA8U09VUkNFUyAvPgorICAgIDwvbGlicmFyeT4KKyAgICA8bGlicmFyeSBuYW1lPSJtZGgtYXBwbGljYXRpb24tMS4xLjMiPgorICAgICAgPENMQVNTRVM+CisgICAgICAgIDxyb290IHVybD0iamFyOi8vQzovbGliL2FwcGxpY2F0aW9uL1JFTEVBU0UtMV8xXzMvYXBwbGljYXRpb24uamFyIS8iIC8+CisgICAgICA8L0NMQVNTRVM+CisgICAgICA8SkFWQURPQz4KKyAgICAgICAgPHJvb3QgdXJsPSJmaWxlOi8vQzovbGliL2FwcGxpY2F0aW9uL1JFTEVBU0UtMV8xXzMvZG9jcy9hcGkiIC8+CisgICAgICA8L0pBVkFET0M+CisgICAgICA8U09VUkNFUyAvPgorICAgIDwvbGlicmFyeT4KKyAgICA8bGlicmFyeSBuYW1lPSJtZGgtYXd0LWFwcGxldC0yLjIuNCI+CisgICAgICA8Q0xBU1NFUz4KKyAgICAgICAgPHJvb3QgdXJsPSJqYXI6Ly9DOi9saWIvYXd0L1JFTEVBU0UtMl8yXzQvYXd0LWFwcGxldC5qYXIhLyIgLz4KKyAgICAgIDwvQ0xBU1NFUz4KKyAgICAgIDxKQVZBRE9DPgorICAgICAgICA8cm9vdCB1cmw9ImZpbGU6Ly9DOi9saWIvYXd0L1JFTEVBU0UtMl8yXzQvZG9jcy9hcGkiIC8+CisgICAgICA8L0pBVkFET0M+CisgICAgICA8U09VUkNFUyAvPgorICAgIDwvbGlicmFyeT4KKyAgICA8bGlicmFyeSBuYW1lPSJtZGgtZGF0YWJhcy0xLjEuMiI+CisgICAgICA8Q0xBU1NFUz4KKyAgICAgICAgPHJvb3QgdXJsPSJqYXI6Ly9DOi9saWIvZGF0YWJhcy9SRUxFQVNFLTFfMV8yL2RhdGFiYXMuamFyIS8iIC8+CisgICAgICA8L0NMQVNTRVM+CisgICAgICA8SkFWQURPQz4KKyAgICAgICAgPHJvb3QgdXJsPSJmaWxlOi8vQzovbGliL2RhdGFiYXMvUkVMRUFTRS0xXzFfMi9kb2NzL2FwaSIgLz4KKyAgICAgIDwvSkFWQURPQz4KKyAgICAgIDxTT1VSQ0VTIC8+CisgICAgPC9saWJyYXJ5PgorICAgIDxsaWJyYXJ5IG5hbWU9Im1kaC1kYXRhYmFzLXV0aWwtMS4xLjEiPgorICAgICAgPENMQVNTRVM+CisgICAgICAgIDxyb290IHVybD0iamFyOi8vQzovbGliL2RhdGFiYXMtdXRpbC9SRUxFQVNFLTFfMV8xL2RhdGFiYXMtdXRpbC5qYXIhLyIgLz4KKyAgICAgIDwvQ0xBU1NFUz4KKyAgICAgIDxKQVZBRE9DIC8+CisgICAgICA8U09VUkNFUyAvPgorICAgIDwvbGlicmFyeT4KKyAgICA8bGlicmFyeSBuYW1lPSJtZGgtZGF0YWJhcy11dGlsLTEuMS4yIj4KKyAgICAgIDxDTEFTU0VTPgorICAgICAgICA8cm9vdCB1cmw9ImphcjovL0M6L2xpYi9kYXRhYmFzLXV0aWwvUkVMRUFTRS0xXzFfMi9kYXRhYmFzLXV0aWwuamFyIS8iIC8+CisgICAgICA8L0NMQVNTRVM+CisgICAgICA8SkFWQURPQz4KKyAgICAgICAgPHJvb3QgdXJsPSJmaWxlOi8vQzovbGliL2RhdGFiYXMtdXRpbC9SRUxFQVNFLTFfMV8yL2RvY3MvYXBpIiAvPgorICAgICAgPC9KQVZBRE9DPgorICAgICAgPFNPVVJDRVMgLz4KKyAgICA8L2xpYnJhcnk+CisgICAgPGxpYnJhcnkgbmFtZT0ibWRoLWRhdGFiYXMtdXRpbC1hcHBsZXQtMS4xLjIiPgorICAgICAgPENMQVNTRVM+CisgICAgICAgIDxyb290IHVybD0iamFyOi8vQzovbGliL2RhdGFiYXMtdXRpbC9SRUxFQVNFLTFfMV8yL2RhdGFiYXMtdXRpbC1hcHBsZXQuamFyIS8iIC8+CisgICAgICA8L0NMQVNTRVM+CisgICAgICA8SkFWQURPQz4KKyAgICAgICAgPHJvb3QgdXJsPSJmaWxlOi8vQzovbGliL2RhdGFiYXMtdXRpbC9SRUxFQVNFLTFfMV8yL2RvY3MvYXBpIiAvPgorICAgICAgPC9KQVZBRE9DPgorICAgICAgPFNPVVJDRVMgLz4KKyAgICA8L2xpYnJhcnk+CisgICAgPGxpYnJhcnkgbmFtZT0ibWRoLWVwb3N0LTEuMC4xIj4KKyAgICAgIDxDTEFTU0VTPgorICAgICAgICA8cm9vdCB1cmw9ImphcjovL0M6L2xpYi9lcG9zdC9SRUxFQVNFLTFfMF8xL2Vwb3N0LmphciEvIiAvPgorICAgICAgPC9DTEFTU0VTPgorICAgICAgPEpBVkFET0MgLz4KKyAgICAgIDxTT1VSQ0VTIC8+CisgICAgPC9saWJyYXJ5PgorICAgIDxsaWJyYXJ5IG5hbWU9Im1kaC1lcG9zdC0xLjEuMSI+CisgICAgICA8Q0xBU1NFUz4KKyAgICAgICAgPHJvb3QgdXJsPSJqYXI6Ly9DOi9saWIvZXBvc3QvUkVMRUFTRS0xXzFfMS9lcG9zdC5qYXIhLyIgLz4KKyAgICAgIDwvQ0xBU1NFUz4KKyAgICAgIDxKQVZBRE9DPgorICAgICAgICA8cm9vdCB1cmw9ImZpbGU6Ly9DOi9saWIvZXBvc3QvUkVMRUFTRS0xXzFfMS9kb2NzL2FwaSIgLz4KKyAgICAgIDwvSkFWQURPQz4KKyAgICAgIDxTT1VSQ0VTIC8+CisgICAgPC9saWJyYXJ5PgorICAgIDxsaWJyYXJ5IG5hbWU9Im1kaC1lcG9zdC0yLjAiPgorICAgICAgPENMQVNTRVM+CisgICAgICAgIDxyb290IHVybD0iamFyOi8vQzovbGliL2Vwb3N0L1JFTEVBU0UtMl8wL3NoYXJlZC9saWIvZXBvc3Qtc2hhcmVkLmphciEvIiAvPgorICAgICAgPC9DTEFTU0VTPgorICAgICAgPEpBVkFET0M+CisgICAgICAgIDxyb290IHVybD0iZmlsZTovL0M6L2xpYi9lcG9zdC9SRUxFQVNFLTJfMC9kb2NzL2FwaSIgLz4KKyAgICAgIDwvSkFWQURPQz4KKyAgICAgIDxTT1VSQ0VTIC8+CisgICAgPC9saWJyYXJ5PgorICAgIDxsaWJyYXJ5IG5hbWU9Im1kaC1odG1sLTEuNi4yIj4KKyAgICAgIDxDTEFTU0VTPgorICAgICAgICA8cm9vdCB1cmw9ImphcjovL0M6L2xpYi9odG1sL1JFTEVBU0UtMV82XzIvaHRtbC5qYXIhLyIgLz4KKyAgICAgIDwvQ0xBU1NFUz4KKyAgICAgIDxKQVZBRE9DIC8+CisgICAgICA8U09VUkNFUyAvPgorICAgIDwvbGlicmFyeT4KKyAgICA8bGlicmFyeSBuYW1lPSJtZGgtaHRtbC0xLjYuNCI+CisgICAgICA8Q0xBU1NFUz4KKyAgICAgICAgPHJvb3QgdXJsPSJqYXI6Ly9DOi9saWIvaHRtbC9SRUxFQVNFLTFfNl80L2h0bWwuamFyIS8iIC8+CisgICAgICA8L0NMQVNTRVM+CisgICAgICA8SkFWQURPQyAvPgorICAgICAgPFNPVVJDRVMgLz4KKyAgICA8L2xpYnJhcnk+CisgICAgPGxpYnJhcnkgbmFtZT0ibWRoLWh0bWwtMi4wLjEiPgorICAgICAgPENMQVNTRVM+CisgICAgICAgIDxyb290IHVybD0iamFyOi8vQzovbGliL2h0bWwvUkVMRUFTRS0yXzBfMS9odG1sLmphciEvIiAvPgorICAgICAgPC9DTEFTU0VTPgorICAgICAgPEpBVkFET0M+CisgICAgICAgIDxyb290IHVybD0iZmlsZTovL0M6L2xpYi9odG1sL1JFTEVBU0UtMl8wXzEvZG9jcy9hcGkiIC8+CisgICAgICA8L0pBVkFET0M+CisgICAgICA8U09VUkNFUyAvPgorICAgIDwvbGlicmFyeT4KKyAgICA8bGlicmFyeSBuYW1lPSJtZGgtaHRtbC0yLjEiPgorICAgICAgPENMQVNTRVM+CisgICAgICAgIDxyb290IHVybD0iamFyOi8vQzovbGliL2h0bWwvUkVMRUFTRS0yXzEvaHRtbC5qYXIhLyIgLz4KKyAgICAgIDwvQ0xBU1NFUz4KKyAgICAgIDxKQVZBRE9DPgorICAgICAgICA8cm9vdCB1cmw9ImZpbGU6Ly9DOi9saWIvaHRtbC9SRUxFQVNFLTJfMS9kb2NzL2FwaSIgLz4KKyAgICAgIDwvSkFWQURPQz4KKyAgICAgIDxTT1VSQ0VTIC8+CisgICAgPC9saWJyYXJ5PgorICAgIDxsaWJyYXJ5IG5hbWU9Im1kaC1sYWRvay0xLjIiPgorICAgICAgPENMQVNTRVM+CisgICAgICAgIDxyb290IHVybD0iamFyOi8vQzovbGliL2xhZG9rL1JFTEVBU0UtMV8yL2xhZG9rLmphciEvIiAvPgorICAgICAgPC9DTEFTU0VTPgorICAgICAgPEpBVkFET0MgLz4KKyAgICAgIDxTT1VSQ0VTIC8+CisgICAgPC9saWJyYXJ5PgorICAgIDxsaWJyYXJ5IG5hbWU9Im1kaC1sYWRvay0xLjMiPgorICAgICAgPENMQVNTRVM+CisgICAgICAgIDxyb290IHVybD0iamFyOi8vQzovbGliL2xhZG9rL1JFTEVBU0UtMV8zL2xhZG9rLmphciEvIiAvPgorICAgICAgPC9DTEFTU0VTPgorICAgICAgPEpBVkFET0MgLz4KKyAgICAgIDxTT1VSQ0VTIC8+CisgICAgPC9saWJyYXJ5PgorICAgIDxsaWJyYXJ5IG5hbWU9Im1kaC1sYWRvay0xLjQiPgorICAgICAgPENMQVNTRVM+CisgICAgICAgIDxyb290IHVybD0iamFyOi8vQzovbGliL2xhZG9rL1JFTEVBU0UtMV80L2xhZG9rLmphciEvIiAvPgorICAgICAgPC9DTEFTU0VTPgorICAgICAgPEpBVkFET0MgLz4KKyAgICAgIDxTT1VSQ0VTIC8+CisgICAgPC9saWJyYXJ5PgorICAgIDxsaWJyYXJ5IG5hbWU9Im1kaC1sYWRvay0yLjAiPgorICAgICAgPENMQVNTRVM+CisgICAgICAgIDxyb290IHVybD0iamFyOi8vQzovbGliL2xhZG9rL1JFTEVBU0UtMl8wL3NoYXJlZC9saWIvbGFkb2stc2hhcmVkLmphciEvIiAvPgorICAgICAgPC9DTEFTU0VTPgorICAgICAgPEpBVkFET0M+CisgICAgICAgIDxyb290IHVybD0iZmlsZTovL0M6L2xpYi9sYWRvay9SRUxFQVNFLTJfMC9zaGFyZWQvZG9jcy9hcGkiIC8+CisgICAgICA8L0pBVkFET0M+CisgICAgICA8U09VUkNFUyAvPgorICAgIDwvbGlicmFyeT4KKyAgICA8bGlicmFyeSBuYW1lPSJtZGgtbGFkb2stMi4xIj4KKyAgICAgIDxDTEFTU0VTPgorICAgICAgICA8cm9vdCB1cmw9ImphcjovL0M6L2xpYi9sYWRvay9SRUxFQVNFLTJfMS9zaGFyZWQvbGliL2xhZG9rLXNoYXJlZC5qYXIhLyIgLz4KKyAgICAgIDwvQ0xBU1NFUz4KKyAgICAgIDxKQVZBRE9DPgorICAgICAgICA8cm9vdCB1cmw9ImZpbGU6Ly9DOi9saWIvbGFkb2svUkVMRUFTRS0yXzEvc2hhcmVkL2RvY3MvYXBpIiAvPgorICAgICAgPC9KQVZBRE9DPgorICAgICAgPFNPVVJDRVMgLz4KKyAgICA8L2xpYnJhcnk+CisgICAgPGxpYnJhcnkgbmFtZT0ibWRoLWxhZG9rLTIuMiI+CisgICAgICA8Q0xBU1NFUz4KKyAgICAgICAgPHJvb3QgdXJsPSJqYXI6Ly9DOi9saWIvbGFkb2svUkVMRUFTRS0yXzIvc2hhcmVkL2xpYi9sYWRvay1zaGFyZWQuamFyIS8iIC8+CisgICAgICA8L0NMQVNTRVM+CisgICAgICA8SkFWQURPQz4KKyAgICAgICAgPHJvb3QgdXJsPSJmaWxlOi8vQzovbGliL2xhZG9rL1JFTEVBU0UtMl8yL3NoYXJlZC9kb2NzL2FwaSIgLz4KKyAgICAgIDwvSkFWQURPQz4KKyAgICAgIDxTT1VSQ0VTIC8+CisgICAgPC9saWJyYXJ5PgorICAgIDxsaWJyYXJ5IG5hbWU9Im1kaC1uZHMtMi4zIj4KKyAgICAgIDxDTEFTU0VTPgorICAgICAgICA8cm9vdCB1cmw9ImphcjovL0M6L2xpYi9uZHMvUkVMRUFTRS0yXzMvbmRzLmphciEvIiAvPgorICAgICAgPC9DTEFTU0VTPgorICAgICAgPEpBVkFET0MgLz4KKyAgICAgIDxTT1VSQ0VTIC8+CisgICAgPC9saWJyYXJ5PgorICAgIDxsaWJyYXJ5IG5hbWU9Im1kaC1uZHMtMi40Ij4KKyAgICAgIDxDTEFTU0VTPgorICAgICAgICA8cm9vdCB1cmw9ImphcjovL0M6L2xpYi9uZHMvUkVMRUFTRS0yXzQvbmRzLmphciEvIiAvPgorICAgICAgPC9DTEFTU0VTPgorICAgICAgPEpBVkFET0M+CisgICAgICAgIDxyb290IHVybD0iZmlsZTovL0M6L2xpYi9uZHMvUkVMRUFTRS0yXzQvZG9jcy9hcGkiIC8+CisgICAgICA8L0pBVkFET0M+CisgICAgICA8U09VUkNFUyAvPgorICAgIDwvbGlicmFyeT4KKyAgICA8bGlicmFyeSBuYW1lPSJtZGgtbmRzLWFkbWluLTIuMyI+CisgICAgICA8Q0xBU1NFUz4KKyAgICAgICAgPHJvb3QgdXJsPSJqYXI6Ly9DOi9saWIvbmRzL1JFTEVBU0UtMl8zL25kcy1hZG1pbi5qYXIhLyIgLz4KKyAgICAgIDwvQ0xBU1NFUz4KKyAgICAgIDxKQVZBRE9DIC8+CisgICAgICA8U09VUkNFUyAvPgorICAgIDwvbGlicmFyeT4KKyAgICA8bGlicmFyeSBuYW1lPSJtZGgtbmRzLWFkbWluLTIuNCI+CisgICAgICA8Q0xBU1NFUz4KKyAgICAgICAgPHJvb3QgdXJsPSJqYXI6Ly9DOi9saWIvbmRzL1JFTEVBU0UtMl80L25kcy1hZG1pbi5qYXIhLyIgLz4KKyAgICAgIDwvQ0xBU1NFUz4KKyAgICAgIDxKQVZBRE9DPgorICAgICAgICA8cm9vdCB1cmw9ImZpbGU6Ly9DOi9saWIvbmRzL1JFTEVBU0UtMl80L2RvY3MvYXBpIiAvPgorICAgICAgPC9KQVZBRE9DPgorICAgICAgPFNPVVJDRVMgLz4KKyAgICA8L2xpYnJhcnk+CisgICAgPGxpYnJhcnkgbmFtZT0ibWRoLW55aGV0LTIuNSI+CisgICAgICA8Q0xBU1NFUz4KKyAgICAgICAgPHJvb3QgdXJsPSJqYXI6Ly9DOi9saWIvbnloZXQvUkVMRUFTRS0yXzUvbnloZXQuamFyIS8iIC8+CisgICAgICA8L0NMQVNTRVM+CisgICAgICA8SkFWQURPQyAvPgorICAgICAgPFNPVVJDRVM+CisgICAgICAgIDxyb290IHVybD0iZmlsZTovL0M6L3JlbGVhc2UvbnloZXQvc3JjIiAvPgorICAgICAgPC9TT1VSQ0VTPgorICAgIDwvbGlicmFyeT4KKyAgICA8bGlicmFyeSBuYW1lPSJtZGgtbnloZXQtMy4wLjEiPgorICAgICAgPENMQVNTRVM+CisgICAgICAgIDxyb290IHVybD0iamFyOi8vQzovbGliL255aGV0L1JFTEVBU0UtM18wXzEvc2hhcmVkL2xpYi9ueWhldC1zaGFyZWQuamFyIS8iIC8+CisgICAgICA8L0NMQVNTRVM+CisgICAgICA8SkFWQURPQz4KKyAgICAgICAgPHJvb3QgdXJsPSJmaWxlOi8vQzovbGliL255aGV0L1JFTEVBU0UtM18wXzEvc2hhcmVkL2RvY3MvYXBpIiAvPgorICAgICAgPC9KQVZBRE9DPgorICAgICAgPFNPVVJDRVMgLz4KKyAgICA8L2xpYnJhcnk+CisgICAgPGxpYnJhcnkgbmFtZT0ibWRoLXBhcy1hZG1pbi0xLjIuMSI+CisgICAgICA8Q0xBU1NFUz4KKyAgICAgICAgPHJvb3QgdXJsPSJqYXI6Ly9DOi9saWIvcGFzL1JFTEVBU0UtMV8yXzEvcGFzLWFkbWluLmphciEvIiAvPgorICAgICAgPC9DTEFTU0VTPgorICAgICAgPEpBVkFET0MgLz4KKyAgICAgIDxTT1VSQ0VTPgorICAgICAgICA8cm9vdCB1cmw9ImZpbGU6Ly9DOi9yZWxlYXNlL3Bhcy9zcmMiIC8+CisgICAgICA8L1NPVVJDRVM+CisgICAgPC9saWJyYXJ5PgorICAgIDxsaWJyYXJ5IG5hbWU9Im1kaC1wYXNzYWdlLWFkbWluLTIuNSI+CisgICAgICA8Q0xBU1NFUz4KKyAgICAgICAgPHJvb3QgdXJsPSJqYXI6Ly9DOi9saWIvcGFzc2FnZS9SRUxFQVNFLTJfNS9wYXNzYWdlLWFkbWluLmphciEvIiAvPgorICAgICAgPC9DTEFTU0VTPgorICAgICAgPEpBVkFET0MgLz4KKyAgICAgIDxTT1VSQ0VTPgorICAgICAgICA8cm9vdCB1cmw9ImZpbGU6Ly9DOi9yZWxlYXNlL3Bhc3NhZ2Uvc3JjIiAvPgorICAgICAgPC9TT1VSQ0VTPgorICAgIDwvbGlicmFyeT4KKyAgICA8bGlicmFyeSBuYW1lPSJtZGgtcGVyc29uYWwtNS4wIj4KKyAgICAgIDxDTEFTU0VTPgorICAgICAgICA8cm9vdCB1cmw9ImphcjovL0M6L2xpYi9wZXJzb25hbC9SRUxFQVNFLTVfMC9zaGFyZWQvbGliL3BlcnNvbmFsLXNoYXJlZC5qYXIhLyIgLz4KKyAgICAgIDwvQ0xBU1NFUz4KKyAgICAgIDxKQVZBRE9DIC8+CisgICAgICA8U09VUkNFUz4KKyAgICAgICAgPHJvb3QgdXJsPSJmaWxlOi8vQzovcmVsZWFzZS9wZXJzb25hbC9zaGFyZWQvc3JjIiAvPgorICAgICAgPC9TT1VSQ0VTPgorICAgIDwvbGlicmFyeT4KKyAgICA8bGlicmFyeSBuYW1lPSJtZGgtcGVyc29uYWwtNS4zIj4KKyAgICAgIDxDTEFTU0VTPgorICAgICAgICA8cm9vdCB1cmw9ImphcjovL0M6L2xpYi9wZXJzb25hbC9SRUxFQVNFLTVfMy9zaGFyZWQvbGliL3BlcnNvbmFsLXNoYXJlZC5qYXIhLyIgLz4KKyAgICAgIDwvQ0xBU1NFUz4KKyAgICAgIDxKQVZBRE9DIC8+CisgICAgICA8U09VUkNFUz4KKyAgICAgICAgPHJvb3QgdXJsPSJmaWxlOi8vQzovcmVsZWFzZS9wZXJzb25hbC9zaGFyZWQvc3JjIiAvPgorICAgICAgPC9TT1VSQ0VTPgorICAgIDwvbGlicmFyeT4KKyAgICA8bGlicmFyeSBuYW1lPSJtZGgtcGVyc29uYWwtNS4zLjEiPgorICAgICAgPENMQVNTRVM+CisgICAgICAgIDxyb290IHVybD0iamFyOi8vQzovbGliL3BlcnNvbmFsL1JFTEVBU0UtNV8zXzEvc2hhcmVkL2xpYi9wZXJzb25hbC1zaGFyZWQuamFyIS8iIC8+CisgICAgICA8L0NMQVNTRVM+CisgICAgICA8SkFWQURPQyAvPgorICAgICAgPFNPVVJDRVM+CisgICAgICAgIDxyb290IHVybD0iZmlsZTovL0M6L3JlbGVhc2UvcGVyc29uYWwvc2hhcmVkL3NyYyIgLz4KKyAgICAgIDwvU09VUkNFUz4KKyAgICA8L2xpYnJhcnk+CisgICAgPGxpYnJhcnkgbmFtZT0ibWRoLXBvcnRhbC0yLjEiPgorICAgICAgPENMQVNTRVM+CisgICAgICAgIDxyb290IHVybD0iamFyOi8vQzovbGliL3BvcnRhbC9SRUxFQVNFLTJfMS9wb3J0YWwvbGliL3BvcnRhbC5qYXIhLyIgLz4KKyAgICAgIDwvQ0xBU1NFUz4KKyAgICAgIDxKQVZBRE9DPgorICAgICAgICA8cm9vdCB1cmw9ImZpbGU6Ly9DOi9saWIvcG9ydGFsL1JFTEVBU0UtMl8xL3BvcnRhbC9kb2NzL2FwaSIgLz4KKyAgICAgIDwvSkFWQURPQz4KKyAgICAgIDxTT1VSQ0VTIC8+CisgICAgPC9saWJyYXJ5PgorICAgIDxsaWJyYXJ5IG5hbWU9Im1kaC1yb2JvdC0xLjEiPgorICAgICAgPENMQVNTRVM+CisgICAgICAgIDxyb290IHVybD0iamFyOi8vQzovbGliL3JvYm90L1JFTEVBU0UtMV8xL3JvYm90LmphciEvIiAvPgorICAgICAgPC9DTEFTU0VTPgorICAgICAgPEpBVkFET0M+CisgICAgICAgIDxyb290IHVybD0iZmlsZTovL0M6L2xpYi9yb2JvdC9SRUxFQVNFLTFfMS9kb2NzL2FwaSIgLz4KKyAgICAgIDwvSkFWQURPQz4KKyAgICAgIDxTT1VSQ0VTIC8+CisgICAgPC9saWJyYXJ5PgorICAgIDxsaWJyYXJ5IG5hbWU9Im1kaC1zY2hlbWEtMi43Ij4KKyAgICAgIDxDTEFTU0VTPgorICAgICAgICA8cm9vdCB1cmw9ImphcjovL0M6L2xpYi9zY2hlbWEvUkVMRUFTRS0yXzcvc2NoZW1hLmphciEvIiAvPgorICAgICAgPC9DTEFTU0VTPgorICAgICAgPEpBVkFET0MgLz4KKyAgICAgIDxTT1VSQ0VTPgorICAgICAgICA8cm9vdCB1cmw9ImZpbGU6Ly9DOi9yZWxlYXNlL3NjaGVtYS9zcmMiIC8+CisgICAgICA8L1NPVVJDRVM+CisgICAgPC9saWJyYXJ5PgorICAgIDxsaWJyYXJ5IG5hbWU9Im1kaC1zY2hlbWEtMy4wLjIiPgorICAgICAgPENMQVNTRVM+CisgICAgICAgIDxyb290IHVybD0iamFyOi8vQzovbGliL3NjaGVtYS9SRUxFQVNFLTNfMF8yL3NoYXJlZC9saWIvc2NoZW1hLXNoYXJlZC5qYXIhLyIgLz4KKyAgICAgIDwvQ0xBU1NFUz4KKyAgICAgIDxKQVZBRE9DPgorICAgICAgICA8cm9vdCB1cmw9ImZpbGU6Ly9DOi9saWIvc2NoZW1hL1JFTEVBU0UtM18wXzIvc2hhcmVkL2RvY3MvYXBpIiAvPgorICAgICAgPC9KQVZBRE9DPgorICAgICAgPFNPVVJDRVMgLz4KKyAgICA8L2xpYnJhcnk+CisgICAgPGxpYnJhcnkgbmFtZT0ibWRoLXNjaGVtYS0zLjAuMyI+CisgICAgICA8Q0xBU1NFUz4KKyAgICAgICAgPHJvb3QgdXJsPSJqYXI6Ly9DOi9saWIvc2NoZW1hL1JFTEVBU0UtM18wXzMvc2hhcmVkL2xpYi9zY2hlbWEtc2hhcmVkLmphciEvIiAvPgorICAgICAgPC9DTEFTU0VTPgorICAgICAgPEpBVkFET0M+CisgICAgICAgIDxyb290IHVybD0iZmlsZTovL0M6L2xpYi9zY2hlbWEvUkVMRUFTRS0zXzBfMy9zaGFyZWQvZG9jcy9hcGkiIC8+CisgICAgICA8L0pBVkFET0M+CisgICAgICA8U09VUkNFUyAvPgorICAgIDwvbGlicmFyeT4KKyAgICA8bGlicmFyeSBuYW1lPSJtZGgtc2VydmxldC0xLjQuMiI+CisgICAgICA8Q0xBU1NFUz4KKyAgICAgICAgPHJvb3QgdXJsPSJqYXI6Ly9DOi9saWIvc2VydmxldC9SRUxFQVNFLTFfNF8yL3NlcnZsZXQuamFyIS8iIC8+CisgICAgICA8L0NMQVNTRVM+CisgICAgICA8SkFWQURPQyAvPgorICAgICAgPFNPVVJDRVMgLz4KKyAgICA8L2xpYnJhcnk+CisgICAgPGxpYnJhcnkgbmFtZT0ibWRoLXNlcnZsZXQtMS40LjMiPgorICAgICAgPENMQVNTRVM+CisgICAgICAgIDxyb290IHVybD0iamFyOi8vQzovbGliL3NlcnZsZXQvUkVMRUFTRS0xXzRfMy9zZXJ2bGV0LmphciEvIiAvPgorICAgICAgPC9DTEFTU0VTPgorICAgICAgPEpBVkFET0MgLz4KKyAgICAgIDxTT1VSQ0VTIC8+CisgICAgPC9saWJyYXJ5PgorICAgIDxsaWJyYXJ5IG5hbWU9Im1kaC1zZXJ2bGV0LTIuMSI+CisgICAgICA8Q0xBU1NFUz4KKyAgICAgICAgPHJvb3QgdXJsPSJqYXI6Ly9DOi9saWIvc2VydmxldC9SRUxFQVNFLTJfMS9zZXJ2bGV0LmphciEvIiAvPgorICAgICAgPC9DTEFTU0VTPgorICAgICAgPEpBVkFET0M+CisgICAgICAgIDxyb290IHVybD0iZmlsZTovL0M6L2xpYi9zZXJ2bGV0L1JFTEVBU0UtMl8xXzEvZG9jcy9hcGkiIC8+CisgICAgICA8L0pBVkFET0M+CisgICAgICA8U09VUkNFUyAvPgorICAgIDwvbGlicmFyeT4KKyAgICA8bGlicmFyeSBuYW1lPSJtZGgtc2VydmxldC0yLjEuMSI+CisgICAgICA8Q0xBU1NFUz4KKyAgICAgICAgPHJvb3QgdXJsPSJqYXI6Ly9DOi9saWIvc2VydmxldC9SRUxFQVNFLTJfMV8xL3NlcnZsZXQuamFyIS8iIC8+CisgICAgICA8L0NMQVNTRVM+CisgICAgICA8SkFWQURPQz4KKyAgICAgICAgPHJvb3QgdXJsPSJmaWxlOi8vQzovbGliL3NlcnZsZXQvUkVMRUFTRS0yXzFfMS9kb2NzL2FwaSIgLz4KKyAgICAgIDwvSkFWQURPQz4KKyAgICAgIDxTT1VSQ0VTIC8+CisgICAgPC9saWJyYXJ5PgorICAgIDxsaWJyYXJ5IG5hbWU9Im1kaC1zaWMtMy4xIj4KKyAgICAgIDxDTEFTU0VTPgorICAgICAgICA8cm9vdCB1cmw9ImphcjovL0M6L2xpYi9zaWMvUkVMRUFTRS0zXzEvc2ljLmphciEvIiAvPgorICAgICAgPC9DTEFTU0VTPgorICAgICAgPEpBVkFET0M+CisgICAgICAgIDxyb290IHVybD0iZmlsZTovL0M6L3JlbGVhc2Uvc2ljL3NyYyIgLz4KKyAgICAgIDwvSkFWQURPQz4KKyAgICAgIDxTT1VSQ0VTIC8+CisgICAgPC9saWJyYXJ5PgorICAgIDxsaWJyYXJ5IG5hbWU9Im1kaC1zaWMtNC4xLjEiPgorICAgICAgPENMQVNTRVM+CisgICAgICAgIDxyb290IHVybD0iamFyOi8vQzovbGliL3NpYy9SRUxFQVNFLTRfMV8xL3NoYXJlZC9saWIvc2ljLXNoYXJlZC5qYXIhLyIgLz4KKyAgICAgIDwvQ0xBU1NFUz4KKyAgICAgIDxKQVZBRE9DPgorICAgICAgICA8cm9vdCB1cmw9ImZpbGU6Ly9DOi9saWIvc2ljL1JFTEVBU0UtNF8xXzEvc2hhcmVkL2RvY3MvYXBpIiAvPgorICAgICAgPC9KQVZBRE9DPgorICAgICAgPFNPVVJDRVMgLz4KKyAgICA8L2xpYnJhcnk+CisgICAgPGxpYnJhcnkgbmFtZT0ibWRoLXNpYy00LjIiPgorICAgICAgPENMQVNTRVM+CisgICAgICAgIDxyb290IHVybD0iamFyOi8vQzovbGliL3NpYy9SRUxFQVNFLTRfMi9zaGFyZWQvbGliL3NpYy1zaGFyZWQuamFyIS8iIC8+CisgICAgICA8L0NMQVNTRVM+CisgICAgICA8SkFWQURPQz4KKyAgICAgICAgPHJvb3QgdXJsPSJmaWxlOi8vQzovbGliL3NpYy9SRUxFQVNFLTRfMi9zaGFyZWQvZG9jcy9hcGkiIC8+CisgICAgICA8L0pBVkFET0M+CisgICAgICA8U09VUkNFUyAvPgorICAgIDwvbGlicmFyeT4KKyAgICA8bGlicmFyeSBuYW1lPSJtZGgtc3R1ZGllaW5mb3JtYXRpb24tMy40Ij4KKyAgICAgIDxDTEFTU0VTPgorICAgICAgICA8cm9vdCB1cmw9ImphcjovL0M6L2xpYi9zdHVkaWVpbmZvcm1hdGlvbi9SRUxFQVNFLTNfNC9zdHVkaWVpbmZvcm1hdGlvbi5qYXIhLyIgLz4KKyAgICAgIDwvQ0xBU1NFUz4KKyAgICAgIDxKQVZBRE9DIC8+CisgICAgICA8U09VUkNFUyAvPgorICAgIDwvbGlicmFyeT4KKyAgICA8bGlicmFyeSBuYW1lPSJtZGgtc3R1ZGllaW5mb3JtYXRpb24tNC4wIj4KKyAgICAgIDxDTEFTU0VTPgorICAgICAgICA8cm9vdCB1cmw9ImphcjovL0M6L2xpYi9zdHVkaWVpbmZvcm1hdGlvbi9SRUxFQVNFLTRfMC9zaGFyZWQvbGliL3N0dWRpZWluZm9ybWF0aW9uLXNoYXJlZC5qYXIhLyIgLz4KKyAgICAgIDwvQ0xBU1NFUz4KKyAgICAgIDxKQVZBRE9DPgorICAgICAgICA8cm9vdCB1cmw9ImZpbGU6Ly9DOi9saWIvc3R1ZGllaW5mb3JtYXRpb24vUkVMRUFTRS00XzAvc2hhcmVkL2RvY3MvYXBpIiAvPgorICAgICAgPC9KQVZBRE9DPgorICAgICAgPFNPVVJDRVMgLz4KKyAgICA8L2xpYnJhcnk+CisgICAgPGxpYnJhcnkgbmFtZT0ibWRoLXN0dWRpZWluZm9ybWF0aW9uLTQuMi4xIj4KKyAgICAgIDxDTEFTU0VTPgorICAgICAgICA8cm9vdCB1cmw9ImphcjovL0M6L2xpYi9zdHVkaWVpbmZvcm1hdGlvbi9SRUxFQVNFLTRfMl8xL3NoYXJlZC9saWIvc3R1ZGllaW5mb3JtYXRpb24tc2hhcmVkLmphciEvIiAvPgorICAgICAgPC9DTEFTU0VTPgorICAgICAgPEpBVkFET0M+CisgICAgICAgIDxyb290IHVybD0iZmlsZTovL0M6L2xpYi9zdHVkaWVpbmZvcm1hdGlvbi9SRUxFQVNFLTRfMl8xL3NoYXJlZC9kb2NzL2FwaSIgLz4KKyAgICAgIDwvSkFWQURPQz4KKyAgICAgIDxTT1VSQ0VTIC8+CisgICAgPC9saWJyYXJ5PgorICAgIDxsaWJyYXJ5IG5hbWU9Im1kaC1zdHVkaWVpbmZvcm1hdGlvbi1hZG1pbi0zLjUuMiI+CisgICAgICA8Q0xBU1NFUz4KKyAgICAgICAgPHJvb3QgdXJsPSJqYXI6Ly9DOi9saWIvc3R1ZGllaW5mb3JtYXRpb24vUkVMRUFTRS0zXzVfMi9zdHVkaWVpbmZvcm1hdGlvbi1hZG1pbi5qYXIhLyIgLz4KKyAgICAgIDwvQ0xBU1NFUz4KKyAgICAgIDxKQVZBRE9DIC8+CisgICAgICA8U09VUkNFUyAvPgorICAgIDwvbGlicmFyeT4KKyAgICA8bGlicmFyeSBuYW1lPSJtZGgtc3dpbmctMS4xIj4KKyAgICAgIDxDTEFTU0VTPgorICAgICAgICA8cm9vdCB1cmw9ImphcjovL0M6L2xpYi9zd2luZy9SRUxFQVNFLTFfMS9zd2luZy5qYXIhLyIgLz4KKyAgICAgIDwvQ0xBU1NFUz4KKyAgICAgIDxKQVZBRE9DPgorICAgICAgICA8cm9vdCB1cmw9ImZpbGU6Ly9DOi9saWIvc3dpbmcvUkVMRUFTRS0xXzEvZG9jcy9hcGkiIC8+CisgICAgICA8L0pBVkFET0M+CisgICAgICA8U09VUkNFUyAvPgorICAgIDwvbGlicmFyeT4KKyAgICA8bGlicmFyeSBuYW1lPSJtZGgtc3dpbmctMS4yIj4KKyAgICAgIDxDTEFTU0VTPgorICAgICAgICA8cm9vdCB1cmw9ImphcjovL0M6L2xpYi9zd2luZy9SRUxFQVNFLTFfMi9zd2luZy5qYXIhLyIgLz4KKyAgICAgIDwvQ0xBU1NFUz4KKyAgICAgIDxKQVZBRE9DPgorICAgICAgICA8cm9vdCB1cmw9ImZpbGU6Ly9DOi9saWIvc3dpbmcvUkVMRUFTRS0xXzIvZG9jcy9hcGkiIC8+CisgICAgICA8L0pBVkFET0M+CisgICAgICA8U09VUkNFUyAvPgorICAgIDwvbGlicmFyeT4KKyAgICA8bGlicmFyeSBuYW1lPSJtZGgtdGFnbGliLWh0bWwtMS41Ij4KKyAgICAgIDxDTEFTU0VTPgorICAgICAgICA8cm9vdCB1cmw9ImphcjovL0M6L2xpYi90YWdsaWIvUkVMRUFTRS0xXzUvaHRtbC9saWIvdGFnbGliLWh0bWwuamFyIS8iIC8+CisgICAgICA8L0NMQVNTRVM+CisgICAgICA8SkFWQURPQz4KKyAgICAgICAgPHJvb3QgdXJsPSJmaWxlOi8vQzovbGliL3RhZ2xpYi9SRUxFQVNFLTFfNS9odG1sL2RvY3MvYXBpIiAvPgorICAgICAgPC9KQVZBRE9DPgorICAgICAgPFNPVVJDRVMgLz4KKyAgICA8L2xpYnJhcnk+CisgICAgPGxpYnJhcnkgbmFtZT0ibWRoLXRhZ2xpYi1odG1sLTEuNiI+CisgICAgICA8Q0xBU1NFUz4KKyAgICAgICAgPHJvb3QgdXJsPSJqYXI6Ly9DOi9saWIvdGFnbGliL1JFTEVBU0UtMV82L2h0bWwvbGliL3RhZ2xpYi1odG1sLmphciEvIiAvPgorICAgICAgPC9DTEFTU0VTPgorICAgICAgPEpBVkFET0M+CisgICAgICAgIDxyb290IHVybD0iZmlsZTovL0M6L2xpYi90YWdsaWIvUkVMRUFTRS0xXzYvaHRtbC9kb2NzL2FwaSIgLz4KKyAgICAgIDwvSkFWQURPQz4KKyAgICAgIDxTT1VSQ0VTIC8+CisgICAgPC9saWJyYXJ5PgorICAgIDxsaWJyYXJ5IG5hbWU9Im1kaC10YWdsaWItc3ByYWstMS41Ij4KKyAgICAgIDxDTEFTU0VTPgorICAgICAgICA8cm9vdCB1cmw9ImphcjovL0M6L2xpYi90YWdsaWIvUkVMRUFTRS0xXzUvc3ByYWsvbGliL3RhZ2xpYi1zcHJhay5qYXIhLyIgLz4KKyAgICAgIDwvQ0xBU1NFUz4KKyAgICAgIDxKQVZBRE9DPgorICAgICAgICA8cm9vdCB1cmw9ImZpbGU6Ly9DOi9saWIvdGFnbGliL1JFTEVBU0UtMV81L3NwcmFrL2RvY3MvYXBpIiAvPgorICAgICAgPC9KQVZBRE9DPgorICAgICAgPFNPVVJDRVMgLz4KKyAgICA8L2xpYnJhcnk+CisgICAgPGxpYnJhcnkgbmFtZT0ibWRoLXRhZ2xpYi1zcHJhay0xLjYiPgorICAgICAgPENMQVNTRVM+CisgICAgICAgIDxyb290IHVybD0iamFyOi8vQzovbGliL3RhZ2xpYi9SRUxFQVNFLTFfNi9zcHJhay9saWIvdGFnbGliLXNwcmFrLmphciEvIiAvPgorICAgICAgPC9DTEFTU0VTPgorICAgICAgPEpBVkFET0M+CisgICAgICAgIDxyb290IHVybD0iZmlsZTovL0M6L2xpYi90YWdsaWIvUkVMRUFTRS0xXzYvc3ByYWsvZG9jcy9hcGkiIC8+CisgICAgICA8L0pBVkFET0M+CisgICAgICA8U09VUkNFUyAvPgorICAgIDwvbGlicmFyeT4KKyAgICA8bGlicmFyeSBuYW1lPSJtZGgtdGFnbGliLXRva2VuLTEuNSI+CisgICAgICA8Q0xBU1NFUz4KKyAgICAgICAgPHJvb3QgdXJsPSJqYXI6Ly9DOi9saWIvdGFnbGliL1JFTEVBU0UtMV81L3Rva2VuL2xpYi90YWdsaWItdG9rZW4uamFyIS8iIC8+CisgICAgICA8L0NMQVNTRVM+CisgICAgICA8SkFWQURPQz4KKyAgICAgICAgPHJvb3QgdXJsPSJmaWxlOi8vQzovbGliL3RhZ2xpYi9SRUxFQVNFLTFfNS90b2tlbi9kb2NzL2FwaSIgLz4KKyAgICAgIDwvSkFWQURPQz4KKyAgICAgIDxTT1VSQ0VTIC8+CisgICAgPC9saWJyYXJ5PgorICAgIDxsaWJyYXJ5IG5hbWU9Im1kaC10YWdsaWItdG9rZW4tMS42Ij4KKyAgICAgIDxDTEFTU0VTPgorICAgICAgICA8cm9vdCB1cmw9ImphcjovL0M6L2xpYi90YWdsaWIvUkVMRUFTRS0xXzYvdG9rZW4vbGliL3RhZ2xpYi10b2tlbi5qYXIhLyIgLz4KKyAgICAgIDwvQ0xBU1NFUz4KKyAgICAgIDxKQVZBRE9DPgorICAgICAgICA8cm9vdCB1cmw9ImZpbGU6Ly9DOi9saWIvdGFnbGliL1JFTEVBU0UtMV82L3Rva2VuL2RvY3MvYXBpIiAvPgorICAgICAgPC9KQVZBRE9DPgorICAgICAgPFNPVVJDRVMgLz4KKyAgICA8L2xpYnJhcnk+CisgICAgPGxpYnJhcnkgbmFtZT0ibWRoLXV0aWwtMi4wLjEiPgorICAgICAgPENMQVNTRVM+CisgICAgICAgIDxyb290IHVybD0iamFyOi8vQzovbGliL3V0aWwvUkVMRUFTRS0yXzBfMS91dGlsLmphciEvIiAvPgorICAgICAgPC9DTEFTU0VTPgorICAgICAgPEpBVkFET0MgLz4KKyAgICAgIDxTT1VSQ0VTIC8+CisgICAgPC9saWJyYXJ5PgorICAgIDxsaWJyYXJ5IG5hbWU9Im1kaC11dGlsLTIuMSI+CisgICAgICA8Q0xBU1NFUz4KKyAgICAgICAgPHJvb3QgdXJsPSJqYXI6Ly9DOi9saWIvdXRpbC9SRUxFQVNFLTJfMS91dGlsLmphciEvIiAvPgorICAgICAgPC9DTEFTU0VTPgorICAgICAgPEpBVkFET0MgLz4KKyAgICAgIDxTT1VSQ0VTIC8+CisgICAgPC9saWJyYXJ5PgorICAgIDxsaWJyYXJ5IG5hbWU9Im1kaC11dGlsLTIuMiI+CisgICAgICA8Q0xBU1NFUz4KKyAgICAgICAgPHJvb3QgdXJsPSJqYXI6Ly9DOi9saWIvdXRpbC9SRUxFQVNFLTJfMi91dGlsLmphciEvIiAvPgorICAgICAgPC9DTEFTU0VTPgorICAgICAgPEpBVkFET0M+CisgICAgICAgIDxyb290IHVybD0iZmlsZTovL0M6L2xpYi91dGlsL1JFTEVBU0UtMl8yL2RvY3MvYXBpIiAvPgorICAgICAgPC9KQVZBRE9DPgorICAgICAgPFNPVVJDRVMgLz4KKyAgICA8L2xpYnJhcnk+CisgICAgPGxpYnJhcnkgbmFtZT0ibWRoLXV0aWwtMi4zIj4KKyAgICAgIDxDTEFTU0VTPgorICAgICAgICA8cm9vdCB1cmw9ImphcjovL0M6L2xpYi91dGlsL1JFTEVBU0UtMl8zL3V0aWwuamFyIS8iIC8+CisgICAgICA8L0NMQVNTRVM+CisgICAgICA8SkFWQURPQz4KKyAgICAgICAgPHJvb3QgdXJsPSJmaWxlOi8vQzovbGliL3V0aWwvUkVMRUFTRS0yXzMvZG9jcy9hcGkiIC8+CisgICAgICA8L0pBVkFET0M+CisgICAgICA8U09VUkNFUyAvPgorICAgIDwvbGlicmFyeT4KKyAgICA8bGlicmFyeSBuYW1lPSJtZGgtdXRpbC0yLjMuMSI+CisgICAgICA8Q0xBU1NFUz4KKyAgICAgICAgPHJvb3QgdXJsPSJqYXI6Ly9DOi9saWIvdXRpbC9SRUxFQVNFLTJfM18xL3V0aWwuamFyIS8iIC8+CisgICAgICA8L0NMQVNTRVM+CisgICAgICA8SkFWQURPQz4KKyAgICAgICAgPHJvb3QgdXJsPSJmaWxlOi8vQzovbGliL3V0aWwvUkVMRUFTRS0yXzNfMS9kb2NzL2FwaSIgLz4KKyAgICAgIDwvSkFWQURPQz4KKyAgICAgIDxTT1VSQ0VTIC8+CisgICAgPC9saWJyYXJ5PgorICAgIDxsaWJyYXJ5IG5hbWU9Im1kaC11dGlsLWFwcGxldC0yLjIiPgorICAgICAgPENMQVNTRVM+CisgICAgICAgIDxyb290IHVybD0iamFyOi8vQzovbGliL3V0aWwvUkVMRUFTRS0yXzIvdXRpbC1hcHBsZXQuamFyIS8iIC8+CisgICAgICA8L0NMQVNTRVM+CisgICAgICA8SkFWQURPQz4KKyAgICAgICAgPHJvb3QgdXJsPSJmaWxlOi8vQzovbGliL3V0aWwvUkVMRUFTRS0yXzIvZG9jcy9hcGkiIC8+CisgICAgICA8L0pBVkFET0M+CisgICAgICA8U09VUkNFUyAvPgorICAgIDwvbGlicmFyeT4KKyAgICA8bGlicmFyeSBuYW1lPSJtZGgtdXRpbC1hcHBsZXQtMi4zLjEiPgorICAgICAgPENMQVNTRVM+CisgICAgICAgIDxyb290IHVybD0iamFyOi8vQzovbGliL3V0aWwvUkVMRUFTRS0yXzNfMS91dGlsLWFwcGxldC5qYXIhLyIgLz4KKyAgICAgIDwvQ0xBU1NFUz4KKyAgICAgIDxKQVZBRE9DPgorICAgICAgICA8cm9vdCB1cmw9ImZpbGU6Ly9DOi9saWIvdXRpbC9SRUxFQVNFLTJfM18xL2RvY3MvYXBpIiAvPgorICAgICAgPC9KQVZBRE9DPgorICAgICAgPFNPVVJDRVMgLz4KKyAgICA8L2xpYnJhcnk+CisgICAgPGxpYnJhcnkgbmFtZT0ibXlzcWwtMi4wIj4KKyAgICAgIDxDTEFTU0VTPgorICAgICAgICA8cm9vdCB1cmw9ImphcjovL0M6L2xpYi9leHQvbXlzcWwvMl8wL215c3FsLmphciEvIiAvPgorICAgICAgPC9DTEFTU0VTPgorICAgICAgPEpBVkFET0MgLz4KKyAgICAgIDxTT1VSQ0VTIC8+CisgICAgPC9saWJyYXJ5PgorICAgIDxsaWJyYXJ5IG5hbWU9Im15c3FsLTMuMCI+CisgICAgICA8Q0xBU1NFUz4KKyAgICAgICAgPHJvb3QgdXJsPSJqYXI6Ly9DOi9saWIvZXh0L215c3FsLzNfMC9teXNxbC5qYXIhLyIgLz4KKyAgICAgIDwvQ0xBU1NFUz4KKyAgICAgIDxKQVZBRE9DIC8+CisgICAgICA8U09VUkNFUyAvPgorICAgIDwvbGlicmFyeT4KKyAgICA8bGlicmFyeSBuYW1lPSJvcmFjbGUiPgorICAgICAgPENMQVNTRVM+CisgICAgICAgIDxyb290IHVybD0iamFyOi8vQzovbGliL2Rpc3QvY2xhc3NlczEyLnppcCEvIiAvPgorICAgICAgPC9DTEFTU0VTPgorICAgICAgPEpBVkFET0MgLz4KKyAgICAgIDxTT1VSQ0VTIC8+CisgICAgPC9saWJyYXJ5PgorICAgIDxsaWJyYXJ5IG5hbWU9Im9yYWNsZS04LjEiPgorICAgICAgPENMQVNTRVM+CisgICAgICAgIDxyb290IHVybD0iamFyOi8vQzovbGliL2V4dC9vcmFjbGUvOF8xL29yYWNsZS5qYXIhLyIgLz4KKyAgICAgIDwvQ0xBU1NFUz4KKyAgICAgIDxKQVZBRE9DIC8+CisgICAgICA8U09VUkNFUyAvPgorICAgIDwvbGlicmFyeT4KKyAgICA8bGlicmFyeSBuYW1lPSJvcnUtMi4wLjEiPgorICAgICAgPENMQVNTRVM+CisgICAgICAgIDxyb290IHVybD0iamFyOi8vQzovbGliL29ydS9SRUxFQVNFLTJfMF8xL29ydS5qYXIhLyIgLz4KKyAgICAgIDwvQ0xBU1NFUz4KKyAgICAgIDxKQVZBRE9DPgorICAgICAgICA8cm9vdCB1cmw9ImZpbGU6Ly9DOi9saWIvb3J1L1JFTEVBU0UtMl8wXzEvZG9jcy9hcGkiIC8+CisgICAgICA8L0pBVkFET0M+CisgICAgICA8U09VUkNFUyAvPgorICAgIDwvbGlicmFyeT4KKyAgICA8bGlicmFyeSBuYW1lPSJzZXJ2bGV0LWFwaS0yLjMiPgorICAgICAgPENMQVNTRVM+CisgICAgICAgIDxyb290IHVybD0iamFyOi8vQzovbGliL2V4dC9zZXJ2bGV0LzJfMy9zZXJ2bGV0LmphciEvIiAvPgorICAgICAgPC9DTEFTU0VTPgorICAgICAgPEpBVkFET0M+CisgICAgICAgIDxyb290IHVybD0iZmlsZTovL0M6L2xpYi9leHQvc2VydmxldC8yXzMvc2VydmxldC0yXzMtZmNzLWRvY3MiIC8+CisgICAgICAgIDxyb290IHVybD0iZmlsZTovL0M6L2xpYi9leHQvc2VydmxldC8yXzMvanNwLTFfMi1mY3MtZG9jcyIgLz4KKyAgICAgIDwvSkFWQURPQz4KKyAgICAgIDxTT1VSQ0VTIC8+CisgICAgPC9saWJyYXJ5PgorICAgIDxsaWJyYXJ5IG5hbWU9Indlc3Rlcm1hcmNrLXZjYWxlbmRhciI+CisgICAgICA8Q0xBU1NFUz4KKyAgICAgICAgPHJvb3QgdXJsPSJqYXI6Ly9DOi9saWIvZXh0L3dlc3Rlcm1hcmNrLXZjYWxlbmRhci93ZXN0ZXJtYXJjay12Y2FsZW5kYXIuamFyIS8iIC8+CisgICAgICA8L0NMQVNTRVM+CisgICAgICA8SkFWQURPQyAvPgorICAgICAgPFNPVVJDRVMgLz4KKyAgICA8L2xpYnJhcnk+CisgICAgPGxpYnJhcnkgbmFtZT0ibG9nNGptb25pdG9yIj4KKyAgICAgIDxDTEFTU0VTPgorICAgICAgICA8cm9vdCB1cmw9ImphcjovL0M6L1Byb2dyYW0vSW50ZWxsaUotSURFQS0zLjAuNS9saWIvbG9nNGptb25pdG9yLmphciEvIiAvPgorICAgICAgPC9DTEFTU0VTPgorICAgICAgPEpBVkFET0MgLz4KKyAgICAgIDxTT1VSQ0VTIC8+CisgICAgPC9saWJyYXJ5PgorICA8L2NvbXBvbmVudD4KKzwvYXBwbGljYXRpb24+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL21vZHVsZVJvb3RNYW5hZ2VyL2NvbnZlcnRvcjM0L3NjcjI1Mjk4L2JlZm9yZS9saWJyYXJ5LnRhYmxlLnhtbCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9tb2R1bGVSb290TWFuYWdlci9jb252ZXJ0b3IzNC9zY3IyNTI5OC9iZWZvcmUvbGlicmFyeS50YWJsZS54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjJjOGJiNwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9tb2R1bGVSb290TWFuYWdlci9jb252ZXJ0b3IzNC9zY3IyNTI5OC9iZWZvcmUvbGlicmFyeS50YWJsZS54bWwKQEAgLTAsMCArMSwyMDQ5IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPGFwcGxpY2F0aW9uPgorICA8Y29tcG9uZW50IG5hbWU9IlByb2plY3RMaWJyYXJ5VGFibGUiPgorICAgIDxsaWJyYXJ5PgorICAgICAgPG5hbWUgdmFsdWU9ImFjdGl2YXRpb24iIC8+CisgICAgICA8cm9vdHM+CisgICAgICAgIDxwcm9qZWN0UGF0aD4KKyAgICAgICAgICA8cm9vdCB0eXBlPSJjb21wb3NpdGUiIC8+CisgICAgICAgIDwvcHJvamVjdFBhdGg+CisgICAgICAgIDxzb3VyY2VQYXRoPgorICAgICAgICAgIDxyb290IHR5cGU9ImNvbXBvc2l0ZSIgLz4KKyAgICAgICAgPC9zb3VyY2VQYXRoPgorICAgICAgICA8Y2xhc3NQYXRoPgorICAgICAgICAgIDxyb290IHR5cGU9ImNvbXBvc2l0ZSI+CisgICAgICAgICAgICA8cm9vdCB0eXBlPSJzaW1wbGUiIHVybD0iamFyOi8vQzovbGliL2V4dC9qYWYvMV8wXzEvYWN0aXZhdGlvbi5qYXIhLyIgLz4KKyAgICAgICAgICA8L3Jvb3Q+CisgICAgICAgIDwvY2xhc3NQYXRoPgorICAgICAgICA8ZXhjbHVkZVBhdGg+CisgICAgICAgICAgPHJvb3QgdHlwZT0iY29tcG9zaXRlIiAvPgorICAgICAgICA8L2V4Y2x1ZGVQYXRoPgorICAgICAgICA8amF2YWRvY1BhdGg+CisgICAgICAgICAgPHJvb3QgdHlwZT0iY29tcG9zaXRlIj4KKyAgICAgICAgICAgIDxyb290IHR5cGU9InNpbXBsZSIgdXJsPSJmaWxlOi8vQzovbGliL2V4dC9qYWYvMV8wXzEvZG9jcy9qYXZhZG9jcyIgLz4KKyAgICAgICAgICA8L3Jvb3Q+CisgICAgICAgIDwvamF2YWRvY1BhdGg+CisgICAgICA8L3Jvb3RzPgorICAgIDwvbGlicmFyeT4KKyAgICA8bGlicmFyeT4KKyAgICAgIDxuYW1lIHZhbHVlPSJjb21tLTIuMCIgLz4KKyAgICAgIDxyb290cz4KKyAgICAgICAgPHByb2plY3RQYXRoPgorICAgICAgICAgIDxyb290IHR5cGU9ImNvbXBvc2l0ZSIgLz4KKyAgICAgICAgPC9wcm9qZWN0UGF0aD4KKyAgICAgICAgPHNvdXJjZVBhdGg+CisgICAgICAgICAgPHJvb3QgdHlwZT0iY29tcG9zaXRlIiAvPgorICAgICAgICA8L3NvdXJjZVBhdGg+CisgICAgICAgIDxjbGFzc1BhdGg+CisgICAgICAgICAgPHJvb3QgdHlwZT0iY29tcG9zaXRlIj4KKyAgICAgICAgICAgIDxyb290IHR5cGU9InNpbXBsZSIgdXJsPSJqYXI6Ly9DOi9saWIvZXh0L2NvbW0vY29tbS5qYXIhLyIgLz4KKyAgICAgICAgICAgIDxyb290IHR5cGU9InNpbXBsZSIgdXJsPSJmaWxlOi8vQzovbGliL2V4dC9jb21tIiAvPgorICAgICAgICAgIDwvcm9vdD4KKyAgICAgICAgPC9jbGFzc1BhdGg+CisgICAgICAgIDxleGNsdWRlUGF0aD4KKyAgICAgICAgICA8cm9vdCB0eXBlPSJjb21wb3NpdGUiIC8+CisgICAgICAgIDwvZXhjbHVkZVBhdGg+CisgICAgICAgIDxqYXZhZG9jUGF0aD4KKyAgICAgICAgICA8cm9vdCB0eXBlPSJjb21wb3NpdGUiPgorICAgICAgICAgICAgPHJvb3QgdHlwZT0ic2ltcGxlIiB1cmw9ImZpbGU6Ly9DOi9saWIvZXh0L2NvbW0vamF2YWRvY3MiIC8+CisgICAgICAgICAgPC9yb290PgorICAgICAgICA8L2phdmFkb2NQYXRoPgorICAgICAgPC9yb290cz4KKyAgICA8L2xpYnJhcnk+CisgICAgPGxpYnJhcnk+CisgICAgICA8bmFtZSB2YWx1ZT0iZGVubmlzbHVuZGJlcmctY29kZWdlbmVyYXRpb24tMi4wIiAvPgorICAgICAgPHJvb3RzPgorICAgICAgICA8cHJvamVjdFBhdGg+CisgICAgICAgICAgPHJvb3QgdHlwZT0iY29tcG9zaXRlIiAvPgorICAgICAgICA8L3Byb2plY3RQYXRoPgorICAgICAgICA8c291cmNlUGF0aD4KKyAgICAgICAgICA8cm9vdCB0eXBlPSJjb21wb3NpdGUiIC8+CisgICAgICAgIDwvc291cmNlUGF0aD4KKyAgICAgICAgPGNsYXNzUGF0aD4KKyAgICAgICAgICA8cm9vdCB0eXBlPSJjb21wb3NpdGUiPgorICAgICAgICAgICAgPHJvb3QgdHlwZT0ic2ltcGxlIiB1cmw9ImphcjovL0M6L2xpYi9kZW5uaXNsdW5kYmVyZy1jb2RlZ2VuZXJhdGlvbi9SRUxFQVNFLTJfMC9jb2RlZ2VuZXJhdGlvbi5qYXIhLyIgLz4KKyAgICAgICAgICA8L3Jvb3Q+CisgICAgICAgIDwvY2xhc3NQYXRoPgorICAgICAgICA8ZXhjbHVkZVBhdGg+CisgICAgICAgICAgPHJvb3QgdHlwZT0iY29tcG9zaXRlIiAvPgorICAgICAgICA8L2V4Y2x1ZGVQYXRoPgorICAgICAgICA8amF2YWRvY1BhdGg+CisgICAgICAgICAgPHJvb3QgdHlwZT0iY29tcG9zaXRlIiAvPgorICAgICAgICA8L2phdmFkb2NQYXRoPgorICAgICAgPC9yb290cz4KKyAgICA8L2xpYnJhcnk+CisgICAgPGxpYnJhcnk+CisgICAgICA8bmFtZSB2YWx1ZT0iZGVubmlzbHVuZGJlcmctc2thdHQtMS4wIiAvPgorICAgICAgPHJvb3RzPgorICAgICAgICA8cHJvamVjdFBhdGg+CisgICAgICAgICAgPHJvb3QgdHlwZT0iY29tcG9zaXRlIiAvPgorICAgICAgICA8L3Byb2plY3RQYXRoPgorICAgICAgICA8c291cmNlUGF0aD4KKyAgICAgICAgICA8cm9vdCB0eXBlPSJjb21wb3NpdGUiIC8+CisgICAgICAgIDwvc291cmNlUGF0aD4KKyAgICAgICAgPGNsYXNzUGF0aD4KKyAgICAgICAgICA8cm9vdCB0eXBlPSJjb21wb3NpdGUiPgorICAgICAgICAgICAgPHJvb3QgdHlwZT0ic2ltcGxlIiB1cmw9ImphcjovL0M6L2xpYi9kZW5uaXNsdW5kYmVyZy1za2F0dC9SRUxFQVNFLTFfMC9kZW5uaXNsdW5kYmVyZy1za2F0dC5qYXIhLyIgLz4KKyAgICAgICAgICA8L3Jvb3Q+CisgICAgICAgIDwvY2xhc3NQYXRoPgorICAgICAgICA8ZXhjbHVkZVBhdGg+CisgICAgICAgICAgPHJvb3QgdHlwZT0iY29tcG9zaXRlIiAvPgorICAgICAgICA8L2V4Y2x1ZGVQYXRoPgorICAgICAgICA8amF2YWRvY1BhdGg+CisgICAgICAgICAgPHJvb3QgdHlwZT0iY29tcG9zaXRlIj4KKyAgICAgICAgICAgIDxyb290IHR5cGU9InNpbXBsZSIgdXJsPSJmaWxlOi8vQzovbGliL2Rlbm5pc2x1bmRiZXJnLXNrYXR0L1JFTEVBU0UtMV8wL2RvY3MvYXBpIiAvPgorICAgICAgICAgIDwvcm9vdD4KKyAgICAgICAgPC9qYXZhZG9jUGF0aD4KKyAgICAgIDwvcm9vdHM+CisgICAgPC9saWJyYXJ5PgorICAgIDxsaWJyYXJ5PgorICAgICAgPG5hbWUgdmFsdWU9Iml0ZXh0LTEuMDAiIC8+CisgICAgICA8cm9vdHM+CisgICAgICAgIDxwcm9qZWN0UGF0aD4KKyAgICAgICAgICA8cm9vdCB0eXBlPSJjb21wb3NpdGUiIC8+CisgICAgICAgIDwvcHJvamVjdFBhdGg+CisgICAgICAgIDxzb3VyY2VQYXRoPgorICAgICAgICAgIDxyb290IHR5cGU9ImNvbXBvc2l0ZSIgLz4KKyAgICAgICAgPC9zb3VyY2VQYXRoPgorICAgICAgICA8Y2xhc3NQYXRoPgorICAgICAgICAgIDxyb290IHR5cGU9ImNvbXBvc2l0ZSI+CisgICAgICAgICAgICA8cm9vdCB0eXBlPSJzaW1wbGUiIHVybD0iamFyOi8vQzovbGliL2V4dC9pdGV4dC9pdGV4dC0xLjAwLmphciEvIiAvPgorICAgICAgICAgIDwvcm9vdD4KKyAgICAgICAgPC9jbGFzc1BhdGg+CisgICAgICAgIDxleGNsdWRlUGF0aD4KKyAgICAgICAgICA8cm9vdCB0eXBlPSJjb21wb3NpdGUiIC8+CisgICAgICAgIDwvZXhjbHVkZVBhdGg+CisgICAgICAgIDxqYXZhZG9jUGF0aD4KKyAgICAgICAgICA8cm9vdCB0eXBlPSJjb21wb3NpdGUiIC8+CisgICAgICAgIDwvamF2YWRvY1BhdGg+CisgICAgICA8L3Jvb3RzPgorICAgIDwvbGlicmFyeT4KKyAgICA8bGlicmFyeT4KKyAgICAgIDxuYW1lIHZhbHVlPSJpdGV4dC0xLjAxIiAvPgorICAgICAgPHJvb3RzPgorICAgICAgICA8cHJvamVjdFBhdGg+CisgICAgICAgICAgPHJvb3QgdHlwZT0iY29tcG9zaXRlIiAvPgorICAgICAgICA8L3Byb2plY3RQYXRoPgorICAgICAgICA8c291cmNlUGF0aD4KKyAgICAgICAgICA8cm9vdCB0eXBlPSJjb21wb3NpdGUiIC8+CisgICAgICAgIDwvc291cmNlUGF0aD4KKyAgICAgICAgPGNsYXNzUGF0aD4KKyAgICAgICAgICA8cm9vdCB0eXBlPSJjb21wb3NpdGUiPgorICAgICAgICAgICAgPHJvb3QgdHlwZT0ic2ltcGxlIiB1cmw9ImphcjovL0M6L2xpYi9leHQvaXRleHQvaXRleHQtMS4wMS5qYXIhLyIgLz4KKyAgICAgICAgICA8L3Jvb3Q+CisgICAgICAgIDwvY2xhc3NQYXRoPgorICAgICAgICA8ZXhjbHVkZVBhdGg+CisgICAgICAgICAgPHJvb3QgdHlwZT0iY29tcG9zaXRlIiAvPgorICAgICAgICA8L2V4Y2x1ZGVQYXRoPgorICAgICAgICA8amF2YWRvY1BhdGg+CisgICAgICAgICAgPHJvb3QgdHlwZT0iY29tcG9zaXRlIiAvPgorICAgICAgICA8L2phdmFkb2NQYXRoPgorICAgICAgPC9yb290cz4KKyAgICA8L2xpYnJhcnk+CisgICAgPGxpYnJhcnk+CisgICAgICA8bmFtZSB2YWx1ZT0iamFrYXJ0YS1jb21tb25zLWxhbmctMS4wLjEiIC8+CisgICAgICA8cm9vdHM+CisgICAgICAgIDxwcm9qZWN0UGF0aD4KKyAgICAgICAgICA8cm9vdCB0eXBlPSJjb21wb3NpdGUiIC8+CisgICAgICAgIDwvcHJvamVjdFBhdGg+CisgICAgICAgIDxzb3VyY2VQYXRoPgorICAgICAgICAgIDxyb290IHR5cGU9ImNvbXBvc2l0ZSIgLz4KKyAgICAgICAgPC9zb3VyY2VQYXRoPgorICAgICAgICA8Y2xhc3NQYXRoPgorICAgICAgICAgIDxyb290IHR5cGU9ImNvbXBvc2l0ZSI+CisgICAgICAgICAgICA8cm9vdCB0eXBlPSJzaW1wbGUiIHVybD0iamFyOi8vQzovbGliL2V4dC9qYWthcnRhLWNvbW1vbnMvY29tbW9ucy1sYW5nLTEuMC4xL2NvbW1vbnMtbGFuZy0xLjAuMS5qYXIhLyIgLz4KKyAgICAgICAgICA8L3Jvb3Q+CisgICAgICAgIDwvY2xhc3NQYXRoPgorICAgICAgICA8ZXhjbHVkZVBhdGg+CisgICAgICAgICAgPHJvb3QgdHlwZT0iY29tcG9zaXRlIiAvPgorICAgICAgICA8L2V4Y2x1ZGVQYXRoPgorICAgICAgICA8amF2YWRvY1BhdGg+CisgICAgICAgICAgPHJvb3QgdHlwZT0iY29tcG9zaXRlIj4KKyAgICAgICAgICAgIDxyb290IHR5cGU9InNpbXBsZSIgdXJsPSJmaWxlOi8vQzovbGliL2V4dC9qYWthcnRhLWNvbW1vbnMvY29tbW9ucy1sYW5nLTEuMC4xL2RvY3MvYXBpIiAvPgorICAgICAgICAgIDwvcm9vdD4KKyAgICAgICAgPC9qYXZhZG9jUGF0aD4KKyAgICAgIDwvcm9vdHM+CisgICAgPC9saWJyYXJ5PgorICAgIDxsaWJyYXJ5PgorICAgICAgPG5hbWUgdmFsdWU9Impha2FydGEtY29tbW9ucy1sYW5nLTIuMCIgLz4KKyAgICAgIDxyb290cz4KKyAgICAgICAgPHByb2plY3RQYXRoPgorICAgICAgICAgIDxyb290IHR5cGU9ImNvbXBvc2l0ZSIgLz4KKyAgICAgICAgPC9wcm9qZWN0UGF0aD4KKyAgICAgICAgPHNvdXJjZVBhdGg+CisgICAgICAgICAgPHJvb3QgdHlwZT0iY29tcG9zaXRlIiAvPgorICAgICAgICA8L3NvdXJjZVBhdGg+CisgICAgICAgIDxjbGFzc1BhdGg+CisgICAgICAgICAgPHJvb3QgdHlwZT0iY29tcG9zaXRlIj4KKyAgICAgICAgICAgIDxyb290IHR5cGU9InNpbXBsZSIgdXJsPSJqYXI6Ly9DOi9saWIvZXh0L2pha2FydGEtY29tbW9ucy9jb21tb25zLWxhbmctMi4wL2NvbW1vbnMtbGFuZy0yLjAuamFyIS8iIC8+CisgICAgICAgICAgPC9yb290PgorICAgICAgICA8L2NsYXNzUGF0aD4KKyAgICAgICAgPGV4Y2x1ZGVQYXRoPgorICAgICAgICAgIDxyb290IHR5cGU9ImNvbXBvc2l0ZSIgLz4KKyAgICAgICAgPC9leGNsdWRlUGF0aD4KKyAgICAgICAgPGphdmFkb2NQYXRoPgorICAgICAgICAgIDxyb290IHR5cGU9ImNvbXBvc2l0ZSI+CisgICAgICAgICAgICA8cm9vdCB0eXBlPSJzaW1wbGUiIHVybD0iZmlsZTovL0M6L2xpYi9leHQvamFrYXJ0YS1jb21tb25zL2NvbW1vbnMtbGFuZy0yLjAvZG9jcy9hcGkiIC8+CisgICAgICAgICAgPC9yb290PgorICAgICAgICA8L2phdmFkb2NQYXRoPgorICAgICAgPC9yb290cz4KKyAgICA8L2xpYnJhcnk+CisgICAgPGxpYnJhcnk+CisgICAgICA8bmFtZSB2YWx1ZT0iamFrYXJ0YS1jb21tb25zLWxvZ2dpbmctMS4wLjIiIC8+CisgICAgICA8cm9vdHM+CisgICAgICAgIDxwcm9qZWN0UGF0aD4KKyAgICAgICAgICA8cm9vdCB0eXBlPSJjb21wb3NpdGUiIC8+CisgICAgICAgIDwvcHJvamVjdFBhdGg+CisgICAgICAgIDxzb3VyY2VQYXRoPgorICAgICAgICAgIDxyb290IHR5cGU9ImNvbXBvc2l0ZSIgLz4KKyAgICAgICAgPC9zb3VyY2VQYXRoPgorICAgICAgICA8Y2xhc3NQYXRoPgorICAgICAgICAgIDxyb290IHR5cGU9ImNvbXBvc2l0ZSI+CisgICAgICAgICAgICA8cm9vdCB0eXBlPSJzaW1wbGUiIHVybD0iamFyOi8vQzovbGliL2V4dC9qYWthcnRhLWNvbW1vbnMvY29tbW9ucy1sb2dnaW5nLTEuMC4yL2NvbW1vbnMtbG9nZ2luZy5qYXIhLyIgLz4KKyAgICAgICAgICA8L3Jvb3Q+CisgICAgICAgIDwvY2xhc3NQYXRoPgorICAgICAgICA8ZXhjbHVkZVBhdGg+CisgICAgICAgICAgPHJvb3QgdHlwZT0iY29tcG9zaXRlIiAvPgorICAgICAgICA8L2V4Y2x1ZGVQYXRoPgorICAgICAgICA8amF2YWRvY1BhdGg+CisgICAgICAgICAgPHJvb3QgdHlwZT0iY29tcG9zaXRlIj4KKyAgICAgICAgICAgIDxyb290IHR5cGU9InNpbXBsZSIgdXJsPSJmaWxlOi8vQzovbGliL2V4dC9qYWthcnRhLWNvbW1vbnMvY29tbW9ucy1sb2dnaW5nLTEuMC4yL2RvY3MvYXBpIiAvPgorICAgICAgICAgIDwvcm9vdD4KKyAgICAgICAgPC9qYXZhZG9jUGF0aD4KKyAgICAgIDwvcm9vdHM+CisgICAgPC9saWJyYXJ5PgorICAgIDxsaWJyYXJ5PgorICAgICAgPG5hbWUgdmFsdWU9Impha2FydGEtY29tbW9ucy1sb2dnaW5nLTEuMC4zIiAvPgorICAgICAgPHJvb3RzPgorICAgICAgICA8cHJvamVjdFBhdGg+CisgICAgICAgICAgPHJvb3QgdHlwZT0iY29tcG9zaXRlIiAvPgorICAgICAgICA8L3Byb2plY3RQYXRoPgorICAgICAgICA8c291cmNlUGF0aD4KKyAgICAgICAgICA8cm9vdCB0eXBlPSJjb21wb3NpdGUiIC8+CisgICAgICAgIDwvc291cmNlUGF0aD4KKyAgICAgICAgPGNsYXNzUGF0aD4KKyAgICAgICAgICA8cm9vdCB0eXBlPSJjb21wb3NpdGUiPgorICAgICAgICAgICAgPHJvb3QgdHlwZT0ic2ltcGxlIiB1cmw9ImphcjovL0M6L2xpYi9leHQvamFrYXJ0YS1jb21tb25zL2NvbW1vbnMtbG9nZ2luZy0xLjAuMy9jb21tb25zLWxvZ2dpbmcuamFyIS8iIC8+CisgICAgICAgICAgPC9yb290PgorICAgICAgICA8L2NsYXNzUGF0aD4KKyAgICAgICAgPGV4Y2x1ZGVQYXRoPgorICAgICAgICAgIDxyb290IHR5cGU9ImNvbXBvc2l0ZSIgLz4KKyAgICAgICAgPC9leGNsdWRlUGF0aD4KKyAgICAgICAgPGphdmFkb2NQYXRoPgorICAgICAgICAgIDxyb290IHR5cGU9ImNvbXBvc2l0ZSI+CisgICAgICAgICAgICA8cm9vdCB0eXBlPSJzaW1wbGUiIHVybD0iZmlsZTovL0M6L2xpYi9leHQvamFrYXJ0YS1jb21tb25zL2NvbW1vbnMtbG9nZ2luZy0xLjAuMy9kb2NzL2FwaSIgLz4KKyAgICAgICAgICA8L3Jvb3Q+CisgICAgICAgIDwvamF2YWRvY1BhdGg+CisgICAgICA8L3Jvb3RzPgorICAgIDwvbGlicmFyeT4KKyAgICA8bGlicmFyeT4KKyAgICAgIDxuYW1lIHZhbHVlPSJqbmRpIiAvPgorICAgICAgPHJvb3RzPgorICAgICAgICA8cHJvamVjdFBhdGg+CisgICAgICAgICAgPHJvb3QgdHlwZT0iY29tcG9zaXRlIiAvPgorICAgICAgICA8L3Byb2plY3RQYXRoPgorICAgICAgICA8c291cmNlUGF0aD4KKyAgICAgICAgICA8cm9vdCB0eXBlPSJjb21wb3NpdGUiIC8+CisgICAgICAgIDwvc291cmNlUGF0aD4KKyAgICAgICAgPGNsYXNzUGF0aD4KKyAgICAgICAgICA8cm9vdCB0eXBlPSJjb21wb3NpdGUiPgorICAgICAgICAgICAgPHJvb3QgdHlwZT0ic2ltcGxlIiB1cmw9ImphcjovL0M6L2xpYi9leHQvam5kaS8xXzJfMS9saWIvam5kaS5qYXIhLyIgLz4KKyAgICAgICAgICA8L3Jvb3Q+CisgICAgICAgIDwvY2xhc3NQYXRoPgorICAgICAgICA8ZXhjbHVkZVBhdGg+CisgICAgICAgICAgPHJvb3QgdHlwZT0iY29tcG9zaXRlIiAvPgorICAgICAgICA8L2V4Y2x1ZGVQYXRoPgorICAgICAgICA8amF2YWRvY1BhdGg+CisgICAgICAgICAgPHJvb3QgdHlwZT0iY29tcG9zaXRlIj4KKyAgICAgICAgICAgIDxyb290IHR5cGU9InNpbXBsZSIgdXJsPSJmaWxlOi8vQzovbGliL2V4dC9qbmRpLzFfMl8xL2xkYXAvZG9jL2xkYXBjb250cm9scyIgLz4KKyAgICAgICAgICAgIDxyb290IHR5cGU9InNpbXBsZSIgdXJsPSJmaWxlOi8vQzovbGliL2V4dC9qbmRpLzFfMl8xL2xkYXAvZG9jL3Nhc2wiIC8+CisgICAgICAgICAgPC9yb290PgorICAgICAgICA8L2phdmFkb2NQYXRoPgorICAgICAgPC9yb290cz4KKyAgICA8L2xpYnJhcnk+CisgICAgPGxpYnJhcnk+CisgICAgICA8bmFtZSB2YWx1ZT0ianNzZSIgLz4KKyAgICAgIDxyb290cz4KKyAgICAgICAgPHByb2plY3RQYXRoPgorICAgICAgICAgIDxyb290IHR5cGU9ImNvbXBvc2l0ZSIgLz4KKyAgICAgICAgPC9wcm9qZWN0UGF0aD4KKyAgICAgICAgPHNvdXJjZVBhdGg+CisgICAgICAgICAgPHJvb3QgdHlwZT0iY29tcG9zaXRlIiAvPgorICAgICAgICA8L3NvdXJjZVBhdGg+CisgICAgICAgIDxjbGFzc1BhdGg+CisgICAgICAgICAgPHJvb3QgdHlwZT0iY29tcG9zaXRlIj4KKyAgICAgICAgICAgIDxyb290IHR5cGU9InNpbXBsZSIgdXJsPSJqYXI6Ly9DOi9saWIvZXh0L2pzc2UvbGliL2pjZXJ0LmphciEvIiAvPgorICAgICAgICAgICAgPHJvb3QgdHlwZT0ic2ltcGxlIiB1cmw9ImphcjovL0M6L2xpYi9leHQvanNzZS9saWIvam5ldC5qYXIhLyIgLz4KKyAgICAgICAgICAgIDxyb290IHR5cGU9InNpbXBsZSIgdXJsPSJqYXI6Ly9DOi9saWIvZXh0L2pzc2UvbGliL2pzc2UuamFyIS8iIC8+CisgICAgICAgICAgPC9yb290PgorICAgICAgICA8L2NsYXNzUGF0aD4KKyAgICAgICAgPGV4Y2x1ZGVQYXRoPgorICAgICAgICAgIDxyb290IHR5cGU9ImNvbXBvc2l0ZSIgLz4KKyAgICAgICAgPC9leGNsdWRlUGF0aD4KKyAgICAgICAgPGphdmFkb2NQYXRoPgorICAgICAgICAgIDxyb290IHR5cGU9ImNvbXBvc2l0ZSI+CisgICAgICAgICAgICA8cm9vdCB0eXBlPSJzaW1wbGUiIHVybD0iZmlsZTovL0M6L2xpYi9leHQvanNzZS9kb2MvYXBpZG9jIiAvPgorICAgICAgICAgIDwvcm9vdD4KKyAgICAgICAgPC9qYXZhZG9jUGF0aD4KKyAgICAgIDwvcm9vdHM+CisgICAgPC9saWJyYXJ5PgorICAgIDxsaWJyYXJ5PgorICAgICAgPG5hbWUgdmFsdWU9ImpzdGwtMS4wIiAvPgorICAgICAgPHJvb3RzPgorICAgICAgICA8cHJvamVjdFBhdGg+CisgICAgICAgICAgPHJvb3QgdHlwZT0iY29tcG9zaXRlIiAvPgorICAgICAgICA8L3Byb2plY3RQYXRoPgorICAgICAgICA8c291cmNlUGF0aD4KKyAgICAgICAgICA8cm9vdCB0eXBlPSJjb21wb3NpdGUiIC8+CisgICAgICAgIDwvc291cmNlUGF0aD4KKyAgICAgICAgPGNsYXNzUGF0aD4KKyAgICAgICAgICA8cm9vdCB0eXBlPSJjb21wb3NpdGUiPgorICAgICAgICAgICAgPHJvb3QgdHlwZT0ic2ltcGxlIiB1cmw9ImphcjovL0M6L2xpYi9leHQvamFrYXJ0YS10YWdsaWJzL3N0YW5kYXJkLTEuMC4zL2xpYi9qc3RsLmphciEvIiAvPgorICAgICAgICAgIDwvcm9vdD4KKyAgICAgICAgPC9jbGFzc1BhdGg+CisgICAgICAgIDxleGNsdWRlUGF0aD4KKyAgICAgICAgICA8cm9vdCB0eXBlPSJjb21wb3NpdGUiIC8+CisgICAgICAgIDwvZXhjbHVkZVBhdGg+CisgICAgICAgIDxqYXZhZG9jUGF0aD4KKyAgICAgICAgICA8cm9vdCB0eXBlPSJjb21wb3NpdGUiPgorICAgICAgICAgICAgPHJvb3QgdHlwZT0ic2ltcGxlIiB1cmw9ImZpbGU6Ly9DOi9saWIvZXh0L2pha2FydGEtdGFnbGlicy9zdGFuZGFyZC0xLjAuMy9qYXZhZG9jIiAvPgorICAgICAgICAgIDwvcm9vdD4KKyAgICAgICAgPC9qYXZhZG9jUGF0aD4KKyAgICAgIDwvcm9vdHM+CisgICAgPC9saWJyYXJ5PgorICAgIDxsaWJyYXJ5PgorICAgICAgPG5hbWUgdmFsdWU9Imp0YSIgLz4KKyAgICAgIDxyb290cz4KKyAgICAgICAgPHByb2plY3RQYXRoPgorICAgICAgICAgIDxyb290IHR5cGU9ImNvbXBvc2l0ZSIgLz4KKyAgICAgICAgPC9wcm9qZWN0UGF0aD4KKyAgICAgICAgPHNvdXJjZVBhdGg+CisgICAgICAgICAgPHJvb3QgdHlwZT0iY29tcG9zaXRlIiAvPgorICAgICAgICA8L3NvdXJjZVBhdGg+CisgICAgICAgIDxjbGFzc1BhdGg+CisgICAgICAgICAgPHJvb3QgdHlwZT0iY29tcG9zaXRlIj4KKyAgICAgICAgICAgIDxyb290IHR5cGU9InNpbXBsZSIgdXJsPSJqYXI6Ly9DOi9saWIvZXh0L2p0YS9qdGEyMC5qYXIhLyIgLz4KKyAgICAgICAgICA8L3Jvb3Q+CisgICAgICAgIDwvY2xhc3NQYXRoPgorICAgICAgICA8ZXhjbHVkZVBhdGg+CisgICAgICAgICAgPHJvb3QgdHlwZT0iY29tcG9zaXRlIiAvPgorICAgICAgICA8L2V4Y2x1ZGVQYXRoPgorICAgICAgICA8amF2YWRvY1BhdGg+CisgICAgICAgICAgPHJvb3QgdHlwZT0iY29tcG9zaXRlIiAvPgorICAgICAgICA8L2phdmFkb2NQYXRoPgorICAgICAgPC9yb290cz4KKyAgICA8L2xpYnJhcnk+CisgICAgPGxpYnJhcnk+CisgICAgICA8bmFtZSB2YWx1ZT0ianVuaXQiIC8+CisgICAgICA8cm9vdHM+CisgICAgICAgIDxwcm9qZWN0UGF0aD4KKyAgICAgICAgICA8cm9vdCB0eXBlPSJjb21wb3NpdGUiIC8+CisgICAgICAgIDwvcHJvamVjdFBhdGg+CisgICAgICAgIDxzb3VyY2VQYXRoPgorICAgICAgICAgIDxyb290IHR5cGU9ImNvbXBvc2l0ZSIgLz4KKyAgICAgICAgPC9zb3VyY2VQYXRoPgorICAgICAgICA8Y2xhc3NQYXRoPgorICAgICAgICAgIDxyb290IHR5cGU9ImNvbXBvc2l0ZSI+CisgICAgICAgICAgICA8cm9vdCB0eXBlPSJzaW1wbGUiIHVybD0iamFyOi8vQzovbGliL2V4dC9qdW5pdC8zXzhfMS9qdW5pdC5qYXIhLyIgLz4KKyAgICAgICAgICA8L3Jvb3Q+CisgICAgICAgIDwvY2xhc3NQYXRoPgorICAgICAgICA8ZXhjbHVkZVBhdGg+CisgICAgICAgICAgPHJvb3QgdHlwZT0iY29tcG9zaXRlIiAvPgorICAgICAgICA8L2V4Y2x1ZGVQYXRoPgorICAgICAgICA8amF2YWRvY1BhdGg+CisgICAgICAgICAgPHJvb3QgdHlwZT0iY29tcG9zaXRlIj4KKyAgICAgICAgICAgIDxyb290IHR5cGU9InNpbXBsZSIgdXJsPSJmaWxlOi8vQzovbGliL2V4dC9qdW5pdC8zXzhfMS9qYXZhZG9jIiAvPgorICAgICAgICAgIDwvcm9vdD4KKyAgICAgICAgPC9qYXZhZG9jUGF0aD4KKyAgICAgIDwvcm9vdHM+CisgICAgPC9saWJyYXJ5PgorICAgIDxsaWJyYXJ5PgorICAgICAgPG5hbWUgdmFsdWU9ImxvZzRqIiAvPgorICAgICAgPHJvb3RzPgorICAgICAgICA8cHJvamVjdFBhdGg+CisgICAgICAgICAgPHJvb3QgdHlwZT0iY29tcG9zaXRlIiAvPgorICAgICAgICA8L3Byb2plY3RQYXRoPgorICAgICAgICA8c291cmNlUGF0aD4KKyAgICAgICAgICA8cm9vdCB0eXBlPSJjb21wb3NpdGUiIC8+CisgICAgICAgIDwvc291cmNlUGF0aD4KKyAgICAgICAgPGNsYXNzUGF0aD4KKyAgICAgICAgICA8cm9vdCB0eXBlPSJjb21wb3NpdGUiPgorICAgICAgICAgICAgPHJvb3QgdHlwZT0ic2ltcGxlIiB1cmw9ImphcjovL0M6L2xpYi9leHQvamFrYXJ0YS1sb2c0ai8xLjIuOC9kaXN0L2xpYi9sb2c0ai0xLjIuOC5qYXIhLyIgLz4KKyAgICAgICAgICA8L3Jvb3Q+CisgICAgICAgIDwvY2xhc3NQYXRoPgorICAgICAgICA8ZXhjbHVkZVBhdGg+CisgICAgICAgICAgPHJvb3QgdHlwZT0iY29tcG9zaXRlIiAvPgorICAgICAgICA8L2V4Y2x1ZGVQYXRoPgorICAgICAgICA8amF2YWRvY1BhdGg+CisgICAgICAgICAgPHJvb3QgdHlwZT0iY29tcG9zaXRlIj4KKyAgICAgICAgICAgIDxyb290IHR5cGU9InNpbXBsZSIgdXJsPSJmaWxlOi8vQzovbGliL2V4dC9qYWthcnRhLWxvZzRqLzEuMi44L2RvY3MvYXBpIiAvPgorICAgICAgICAgIDwvcm9vdD4KKyAgICAgICAgPC9qYXZhZG9jUGF0aD4KKyAgICAgIDwvcm9vdHM+CisgICAgPC9saWJyYXJ5PgorICAgIDxsaWJyYXJ5PgorICAgICAgPG5hbWUgdmFsdWU9Im1haWwtMS4xLjMiIC8+CisgICAgICA8cm9vdHM+CisgICAgICAgIDxwcm9qZWN0UGF0aD4KKyAgICAgICAgICA8cm9vdCB0eXBlPSJjb21wb3NpdGUiIC8+CisgICAgICAgIDwvcHJvamVjdFBhdGg+CisgICAgICAgIDxzb3VyY2VQYXRoPgorICAgICAgICAgIDxyb290IHR5cGU9ImNvbXBvc2l0ZSIgLz4KKyAgICAgICAgPC9zb3VyY2VQYXRoPgorICAgICAgICA8Y2xhc3NQYXRoPgorICAgICAgICAgIDxyb290IHR5cGU9ImNvbXBvc2l0ZSI+CisgICAgICAgICAgICA8cm9vdCB0eXBlPSJzaW1wbGUiIHVybD0iamFyOi8vQzovbGliL2V4dC9qYXZhbWFpbC9qYXZhbWFpbC0xLjEuMy9tYWlsLmphciEvIiAvPgorICAgICAgICAgIDwvcm9vdD4KKyAgICAgICAgPC9jbGFzc1BhdGg+CisgICAgICAgIDxleGNsdWRlUGF0aD4KKyAgICAgICAgICA8cm9vdCB0eXBlPSJjb21wb3NpdGUiIC8+CisgICAgICAgIDwvZXhjbHVkZVBhdGg+CisgICAgICAgIDxqYXZhZG9jUGF0aD4KKyAgICAgICAgICA8cm9vdCB0eXBlPSJjb21wb3NpdGUiPgorICAgICAgICAgICAgPHJvb3QgdHlwZT0ic2ltcGxlIiB1cmw9ImZpbGU6Ly9DOi9saWIvZXh0L2phdmFtYWlsL2phdmFtYWlsLTEuMS4zL2RvY3MvamF2YWRvY3MiIC8+CisgICAgICAgICAgPC9yb290PgorICAgICAgICA8L2phdmFkb2NQYXRoPgorICAgICAgPC9yb290cz4KKyAgICA8L2xpYnJhcnk+CisgICAgPGxpYnJhcnk+CisgICAgICA8bmFtZSB2YWx1ZT0ibWFpbC0xLjIiIC8+CisgICAgICA8cm9vdHM+CisgICAgICAgIDxwcm9qZWN0UGF0aD4KKyAgICAgICAgICA8cm9vdCB0eXBlPSJjb21wb3NpdGUiIC8+CisgICAgICAgIDwvcHJvamVjdFBhdGg+CisgICAgICAgIDxzb3VyY2VQYXRoPgorICAgICAgICAgIDxyb290IHR5cGU9ImNvbXBvc2l0ZSIgLz4KKyAgICAgICAgPC9zb3VyY2VQYXRoPgorICAgICAgICA8Y2xhc3NQYXRoPgorICAgICAgICAgIDxyb290IHR5cGU9ImNvbXBvc2l0ZSI+CisgICAgICAgICAgICA8cm9vdCB0eXBlPSJzaW1wbGUiIHVybD0iamFyOi8vQzovbGliL2V4dC9qYXZhbWFpbC9qYXZhbWFpbC0xLjIvbWFpbC5qYXIhLyIgLz4KKyAgICAgICAgICA8L3Jvb3Q+CisgICAgICAgIDwvY2xhc3NQYXRoPgorICAgICAgICA8ZXhjbHVkZVBhdGg+CisgICAgICAgICAgPHJvb3QgdHlwZT0iY29tcG9zaXRlIiAvPgorICAgICAgICA8L2V4Y2x1ZGVQYXRoPgorICAgICAgICA8amF2YWRvY1BhdGg+CisgICAgICAgICAgPHJvb3QgdHlwZT0iY29tcG9zaXRlIj4KKyAgICAgICAgICAgIDxyb290IHR5cGU9InNpbXBsZSIgdXJsPSJmaWxlOi8vQzovbGliL2V4dC9qYXZhbWFpbC9qYXZhbWFpbC0xLjIvZG9jcy9qYXZhZG9jcyIgLz4KKyAgICAgICAgICA8L3Jvb3Q+CisgICAgICAgIDwvamF2YWRvY1BhdGg+CisgICAgICA8L3Jvb3RzPgorICAgIDwvbGlicmFyeT4KKyAgICA8bGlicmFyeT4KKyAgICAgIDxuYW1lIHZhbHVlPSJtZGgtYXBwbGljYXRpb24tMS4xLjMiIC8+CisgICAgICA8cm9vdHM+CisgICAgICAgIDxwcm9qZWN0UGF0aD4KKyAgICAgICAgICA8cm9vdCB0eXBlPSJjb21wb3NpdGUiIC8+CisgICAgICAgIDwvcHJvamVjdFBhdGg+CisgICAgICAgIDxzb3VyY2VQYXRoPgorICAgICAgICAgIDxyb290IHR5cGU9ImNvbXBvc2l0ZSIgLz4KKyAgICAgICAgPC9zb3VyY2VQYXRoPgorICAgICAgICA8Y2xhc3NQYXRoPgorICAgICAgICAgIDxyb290IHR5cGU9ImNvbXBvc2l0ZSI+CisgICAgICAgICAgICA8cm9vdCB0eXBlPSJzaW1wbGUiIHVybD0iamFyOi8vQzovbGliL2FwcGxpY2F0aW9uL1JFTEVBU0UtMV8xXzMvYXBwbGljYXRpb24uamFyIS8iIC8+CisgICAgICAgICAgPC9yb290PgorICAgICAgICA8L2NsYXNzUGF0aD4KKyAgICAgICAgPGV4Y2x1ZGVQYXRoPgorICAgICAgICAgIDxyb290IHR5cGU9ImNvbXBvc2l0ZSIgLz4KKyAgICAgICAgPC9leGNsdWRlUGF0aD4KKyAgICAgICAgPGphdmFkb2NQYXRoPgorICAgICAgICAgIDxyb290IHR5cGU9ImNvbXBvc2l0ZSI+CisgICAgICAgICAgICA8cm9vdCB0eXBlPSJzaW1wbGUiIHVybD0iZmlsZTovL0M6L2xpYi9hcHBsaWNhdGlvbi9SRUxFQVNFLTFfMV8zL2RvY3MvYXBpIiAvPgorICAgICAgICAgIDwvcm9vdD4KKyAgICAgICAgPC9qYXZhZG9jUGF0aD4KKyAgICAgIDwvcm9vdHM+CisgICAgPC9saWJyYXJ5PgorICAgIDxsaWJyYXJ5PgorICAgICAgPG5hbWUgdmFsdWU9Im1kaC1hd3QtYXBwbGV0LTIuMi40IiAvPgorICAgICAgPHJvb3RzPgorICAgICAgICA8cHJvamVjdFBhdGg+CisgICAgICAgICAgPHJvb3QgdHlwZT0iY29tcG9zaXRlIiAvPgorICAgICAgICA8L3Byb2plY3RQYXRoPgorICAgICAgICA8c291cmNlUGF0aD4KKyAgICAgICAgICA8cm9vdCB0eXBlPSJjb21wb3NpdGUiIC8+CisgICAgICAgIDwvc291cmNlUGF0aD4KKyAgICAgICAgPGNsYXNzUGF0aD4KKyAgICAgICAgICA8cm9vdCB0eXBlPSJjb21wb3NpdGUiPgorICAgICAgICAgICAgPHJvb3QgdHlwZT0ic2ltcGxlIiB1cmw9ImphcjovL0M6L2xpYi9hd3QvUkVMRUFTRS0yXzJfNC9hd3QtYXBwbGV0LmphciEvIiAvPgorICAgICAgICAgIDwvcm9vdD4KKyAgICAgICAgPC9jbGFzc1BhdGg+CisgICAgICAgIDxleGNsdWRlUGF0aD4KKyAgICAgICAgICA8cm9vdCB0eXBlPSJjb21wb3NpdGUiIC8+CisgICAgICAgIDwvZXhjbHVkZVBhdGg+CisgICAgICAgIDxqYXZhZG9jUGF0aD4KKyAgICAgICAgICA8cm9vdCB0eXBlPSJjb21wb3NpdGUiPgorICAgICAgICAgICAgPHJvb3QgdHlwZT0ic2ltcGxlIiB1cmw9ImZpbGU6Ly9DOi9saWIvYXd0L1JFTEVBU0UtMl8yXzQvZG9jcy9hcGkiIC8+CisgICAgICAgICAgPC9yb290PgorICAgICAgICA8L2phdmFkb2NQYXRoPgorICAgICAgPC9yb290cz4KKyAgICA8L2xpYnJhcnk+CisgICAgPGxpYnJhcnk+CisgICAgICA8bmFtZSB2YWx1ZT0ibWRoLWRhdGFiYXMtMS4xLjIiIC8+CisgICAgICA8cm9vdHM+CisgICAgICAgIDxwcm9qZWN0UGF0aD4KKyAgICAgICAgICA8cm9vdCB0eXBlPSJjb21wb3NpdGUiIC8+CisgICAgICAgIDwvcHJvamVjdFBhdGg+CisgICAgICAgIDxzb3VyY2VQYXRoPgorICAgICAgICAgIDxyb290IHR5cGU9ImNvbXBvc2l0ZSIgLz4KKyAgICAgICAgPC9zb3VyY2VQYXRoPgorICAgICAgICA8Y2xhc3NQYXRoPgorICAgICAgICAgIDxyb290IHR5cGU9ImNvbXBvc2l0ZSI+CisgICAgICAgICAgICA8cm9vdCB0eXBlPSJzaW1wbGUiIHVybD0iamFyOi8vQzovbGliL2RhdGFiYXMvUkVMRUFTRS0xXzFfMi9kYXRhYmFzLmphciEvIiAvPgorICAgICAgICAgIDwvcm9vdD4KKyAgICAgICAgPC9jbGFzc1BhdGg+CisgICAgICAgIDxleGNsdWRlUGF0aD4KKyAgICAgICAgICA8cm9vdCB0eXBlPSJjb21wb3NpdGUiIC8+CisgICAgICAgIDwvZXhjbHVkZVBhdGg+CisgICAgICAgIDxqYXZhZG9jUGF0aD4KKyAgICAgICAgICA8cm9vdCB0eXBlPSJjb21wb3NpdGUiPgorICAgICAgICAgICAgPHJvb3QgdHlwZT0ic2ltcGxlIiB1cmw9ImZpbGU6Ly9DOi9saWIvZGF0YWJhcy9SRUxFQVNFLTFfMV8yL2RvY3MvYXBpIiAvPgorICAgICAgICAgIDwvcm9vdD4KKyAgICAgICAgPC9qYXZhZG9jUGF0aD4KKyAgICAgIDwvcm9vdHM+CisgICAgPC9saWJyYXJ5PgorICAgIDxsaWJyYXJ5PgorICAgICAgPG5hbWUgdmFsdWU9Im1kaC1kYXRhYmFzLXV0aWwtMS4xLjEiIC8+CisgICAgICA8cm9vdHM+CisgICAgICAgIDxwcm9qZWN0UGF0aD4KKyAgICAgICAgICA8cm9vdCB0eXBlPSJjb21wb3NpdGUiIC8+CisgICAgICAgIDwvcHJvamVjdFBhdGg+CisgICAgICAgIDxzb3VyY2VQYXRoPgorICAgICAgICAgIDxyb290IHR5cGU9ImNvbXBvc2l0ZSIgLz4KKyAgICAgICAgPC9zb3VyY2VQYXRoPgorICAgICAgICA8Y2xhc3NQYXRoPgorICAgICAgICAgIDxyb290IHR5cGU9ImNvbXBvc2l0ZSI+CisgICAgICAgICAgICA8cm9vdCB0eXBlPSJzaW1wbGUiIHVybD0iamFyOi8vQzovbGliL2RhdGFiYXMtdXRpbC9SRUxFQVNFLTFfMV8xL2RhdGFiYXMtdXRpbC5qYXIhLyIgLz4KKyAgICAgICAgICA8L3Jvb3Q+CisgICAgICAgIDwvY2xhc3NQYXRoPgorICAgICAgICA8ZXhjbHVkZVBhdGg+CisgICAgICAgICAgPHJvb3QgdHlwZT0iY29tcG9zaXRlIiAvPgorICAgICAgICA8L2V4Y2x1ZGVQYXRoPgorICAgICAgICA8amF2YWRvY1BhdGg+CisgICAgICAgICAgPHJvb3QgdHlwZT0iY29tcG9zaXRlIiAvPgorICAgICAgICA8L2phdmFkb2NQYXRoPgorICAgICAgPC9yb290cz4KKyAgICA8L2xpYnJhcnk+CisgICAgPGxpYnJhcnk+CisgICAgICA8bmFtZSB2YWx1ZT0ibWRoLWRhdGFiYXMtdXRpbC0xLjEuMiIgLz4KKyAgICAgIDxyb290cz4KKyAgICAgICAgPHByb2plY3RQYXRoPgorICAgICAgICAgIDxyb290IHR5cGU9ImNvbXBvc2l0ZSIgLz4KKyAgICAgICAgPC9wcm9qZWN0UGF0aD4KKyAgICAgICAgPHNvdXJjZVBhdGg+CisgICAgICAgICAgPHJvb3QgdHlwZT0iY29tcG9zaXRlIiAvPgorICAgICAgICA8L3NvdXJjZVBhdGg+CisgICAgICAgIDxjbGFzc1BhdGg+CisgICAgICAgICAgPHJvb3QgdHlwZT0iY29tcG9zaXRlIj4KKyAgICAgICAgICAgIDxyb290IHR5cGU9InNpbXBsZSIgdXJsPSJqYXI6Ly9DOi9saWIvZGF0YWJhcy11dGlsL1JFTEVBU0UtMV8xXzIvZGF0YWJhcy11dGlsLmphciEvIiAvPgorICAgICAgICAgIDwvcm9vdD4KKyAgICAgICAgPC9jbGFzc1BhdGg+CisgICAgICAgIDxleGNsdWRlUGF0aD4KKyAgICAgICAgICA8cm9vdCB0eXBlPSJjb21wb3NpdGUiIC8+CisgICAgICAgIDwvZXhjbHVkZVBhdGg+CisgICAgICAgIDxqYXZhZG9jUGF0aD4KKyAgICAgICAgICA8cm9vdCB0eXBlPSJjb21wb3NpdGUiPgorICAgICAgICAgICAgPHJvb3QgdHlwZT0ic2ltcGxlIiB1cmw9ImZpbGU6Ly9DOi9saWIvZGF0YWJhcy11dGlsL1JFTEVBU0UtMV8xXzIvZG9jcy9hcGkiIC8+CisgICAgICAgICAgPC9yb290PgorICAgICAgICA8L2phdmFkb2NQYXRoPgorICAgICAgPC9yb290cz4KKyAgICA8L2xpYnJhcnk+CisgICAgPGxpYnJhcnk+CisgICAgICA8bmFtZSB2YWx1ZT0ibWRoLWRhdGFiYXMtdXRpbC1hcHBsZXQtMS4xLjIiIC8+CisgICAgICA8cm9vdHM+CisgICAgICAgIDxwcm9qZWN0UGF0aD4KKyAgICAgICAgICA8cm9vdCB0eXBlPSJjb21wb3NpdGUiIC8+CisgICAgICAgIDwvcHJvamVjdFBhdGg+CisgICAgICAgIDxzb3VyY2VQYXRoPgorICAgICAgICAgIDxyb290IHR5cGU9ImNvbXBvc2l0ZSIgLz4KKyAgICAgICAgPC9zb3VyY2VQYXRoPgorICAgICAgICA8Y2xhc3NQYXRoPgorICAgICAgICAgIDxyb290IHR5cGU9ImNvbXBvc2l0ZSI+CisgICAgICAgICAgICA8cm9vdCB0eXBlPSJzaW1wbGUiIHVybD0iamFyOi8vQzovbGliL2RhdGFiYXMtdXRpbC9SRUxFQVNFLTFfMV8yL2RhdGFiYXMtdXRpbC1hcHBsZXQuamFyIS8iIC8+CisgICAgICAgICAgPC9yb290PgorICAgICAgICA8L2NsYXNzUGF0aD4KKyAgICAgICAgPGV4Y2x1ZGVQYXRoPgorICAgICAgICAgIDxyb290IHR5cGU9ImNvbXBvc2l0ZSIgLz4KKyAgICAgICAgPC9leGNsdWRlUGF0aD4KKyAgICAgICAgPGphdmFkb2NQYXRoPgorICAgICAgICAgIDxyb290IHR5cGU9ImNvbXBvc2l0ZSI+CisgICAgICAgICAgICA8cm9vdCB0eXBlPSJzaW1wbGUiIHVybD0iZmlsZTovL0M6L2xpYi9kYXRhYmFzLXV0aWwvUkVMRUFTRS0xXzFfMi9kb2NzL2FwaSIgLz4KKyAgICAgICAgICA8L3Jvb3Q+CisgICAgICAgIDwvamF2YWRvY1BhdGg+CisgICAgICA8L3Jvb3RzPgorICAgIDwvbGlicmFyeT4KKyAgICA8bGlicmFyeT4KKyAgICAgIDxuYW1lIHZhbHVlPSJtZGgtZXBvc3QtMS4wLjEiIC8+CisgICAgICA8cm9vdHM+CisgICAgICAgIDxwcm9qZWN0UGF0aD4KKyAgICAgICAgICA8cm9vdCB0eXBlPSJjb21wb3NpdGUiIC8+CisgICAgICAgIDwvcHJvamVjdFBhdGg+CisgICAgICAgIDxzb3VyY2VQYXRoPgorICAgICAgICAgIDxyb290IHR5cGU9ImNvbXBvc2l0ZSIgLz4KKyAgICAgICAgPC9zb3VyY2VQYXRoPgorICAgICAgICA8Y2xhc3NQYXRoPgorICAgICAgICAgIDxyb290IHR5cGU9ImNvbXBvc2l0ZSI+CisgICAgICAgICAgICA8cm9vdCB0eXBlPSJzaW1wbGUiIHVybD0iamFyOi8vQzovbGliL2Vwb3N0L1JFTEVBU0UtMV8wXzEvZXBvc3QuamFyIS8iIC8+CisgICAgICAgICAgPC9yb290PgorICAgICAgICA8L2NsYXNzUGF0aD4KKyAgICAgICAgPGV4Y2x1ZGVQYXRoPgorICAgICAgICAgIDxyb290IHR5cGU9ImNvbXBvc2l0ZSIgLz4KKyAgICAgICAgPC9leGNsdWRlUGF0aD4KKyAgICAgICAgPGphdmFkb2NQYXRoPgorICAgICAgICAgIDxyb290IHR5cGU9ImNvbXBvc2l0ZSIgLz4KKyAgICAgICAgPC9qYXZhZG9jUGF0aD4KKyAgICAgIDwvcm9vdHM+CisgICAgPC9saWJyYXJ5PgorICAgIDxsaWJyYXJ5PgorICAgICAgPG5hbWUgdmFsdWU9Im1kaC1lcG9zdC0xLjEuMSIgLz4KKyAgICAgIDxyb290cz4KKyAgICAgICAgPHByb2plY3RQYXRoPgorICAgICAgICAgIDxyb290IHR5cGU9ImNvbXBvc2l0ZSIgLz4KKyAgICAgICAgPC9wcm9qZWN0UGF0aD4KKyAgICAgICAgPHNvdXJjZVBhdGg+CisgICAgICAgICAgPHJvb3QgdHlwZT0iY29tcG9zaXRlIiAvPgorICAgICAgICA8L3NvdXJjZVBhdGg+CisgICAgICAgIDxjbGFzc1BhdGg+CisgICAgICAgICAgPHJvb3QgdHlwZT0iY29tcG9zaXRlIj4KKyAgICAgICAgICAgIDxyb290IHR5cGU9InNpbXBsZSIgdXJsPSJqYXI6Ly9DOi9saWIvZXBvc3QvUkVMRUFTRS0xXzFfMS9lcG9zdC5qYXIhLyIgLz4KKyAgICAgICAgICA8L3Jvb3Q+CisgICAgICAgIDwvY2xhc3NQYXRoPgorICAgICAgICA8ZXhjbHVkZVBhdGg+CisgICAgICAgICAgPHJvb3QgdHlwZT0iY29tcG9zaXRlIiAvPgorICAgICAgICA8L2V4Y2x1ZGVQYXRoPgorICAgICAgICA8amF2YWRvY1BhdGg+CisgICAgICAgICAgPHJvb3QgdHlwZT0iY29tcG9zaXRlIj4KKyAgICAgICAgICAgIDxyb290IHR5cGU9InNpbXBsZSIgdXJsPSJmaWxlOi8vQzovbGliL2Vwb3N0L1JFTEVBU0UtMV8xXzEvZG9jcy9hcGkiIC8+CisgICAgICAgICAgPC9yb290PgorICAgICAgICA8L2phdmFkb2NQYXRoPgorICAgICAgPC9yb290cz4KKyAgICA8L2xpYnJhcnk+CisgICAgPGxpYnJhcnk+CisgICAgICA8bmFtZSB2YWx1ZT0ibWRoLWVwb3N0LTIuMCIgLz4KKyAgICAgIDxyb290cz4KKyAgICAgICAgPHByb2plY3RQYXRoPgorICAgICAgICAgIDxyb290IHR5cGU9ImNvbXBvc2l0ZSIgLz4KKyAgICAgICAgPC9wcm9qZWN0UGF0aD4KKyAgICAgICAgPHNvdXJjZVBhdGg+CisgICAgICAgICAgPHJvb3QgdHlwZT0iY29tcG9zaXRlIiAvPgorICAgICAgICA8L3NvdXJjZVBhdGg+CisgICAgICAgIDxjbGFzc1BhdGg+CisgICAgICAgICAgPHJvb3QgdHlwZT0iY29tcG9zaXRlIj4KKyAgICAgICAgICAgIDxyb290IHR5cGU9InNpbXBsZSIgdXJsPSJqYXI6Ly9DOi9saWIvZXBvc3QvUkVMRUFTRS0yXzAvc2hhcmVkL2xpYi9lcG9zdC1zaGFyZWQuamFyIS8iIC8+CisgICAgICAgICAgPC9yb290PgorICAgICAgICA8L2NsYXNzUGF0aD4KKyAgICAgICAgPGV4Y2x1ZGVQYXRoPgorICAgICAgICAgIDxyb290IHR5cGU9ImNvbXBvc2l0ZSIgLz4KKyAgICAgICAgPC9leGNsdWRlUGF0aD4KKyAgICAgICAgPGphdmFkb2NQYXRoPgorICAgICAgICAgIDxyb290IHR5cGU9ImNvbXBvc2l0ZSI+CisgICAgICAgICAgICA8cm9vdCB0eXBlPSJzaW1wbGUiIHVybD0iZmlsZTovL0M6L2xpYi9lcG9zdC9SRUxFQVNFLTJfMC9kb2NzL2FwaSIgLz4KKyAgICAgICAgICA8L3Jvb3Q+CisgICAgICAgIDwvamF2YWRvY1BhdGg+CisgICAgICA8L3Jvb3RzPgorICAgIDwvbGlicmFyeT4KKyAgICA8bGlicmFyeT4KKyAgICAgIDxuYW1lIHZhbHVlPSJtZGgtaHRtbC0xLjYuMiIgLz4KKyAgICAgIDxyb290cz4KKyAgICAgICAgPHByb2plY3RQYXRoPgorICAgICAgICAgIDxyb290IHR5cGU9ImNvbXBvc2l0ZSIgLz4KKyAgICAgICAgPC9wcm9qZWN0UGF0aD4KKyAgICAgICAgPHNvdXJjZVBhdGg+CisgICAgICAgICAgPHJvb3QgdHlwZT0iY29tcG9zaXRlIiAvPgorICAgICAgICA8L3NvdXJjZVBhdGg+CisgICAgICAgIDxjbGFzc1BhdGg+CisgICAgICAgICAgPHJvb3QgdHlwZT0iY29tcG9zaXRlIj4KKyAgICAgICAgICAgIDxyb290IHR5cGU9InNpbXBsZSIgdXJsPSJqYXI6Ly9DOi9saWIvaHRtbC9SRUxFQVNFLTFfNl8yL2h0bWwuamFyIS8iIC8+CisgICAgICAgICAgPC9yb290PgorICAgICAgICA8L2NsYXNzUGF0aD4KKyAgICAgICAgPGV4Y2x1ZGVQYXRoPgorICAgICAgICAgIDxyb290IHR5cGU9ImNvbXBvc2l0ZSIgLz4KKyAgICAgICAgPC9leGNsdWRlUGF0aD4KKyAgICAgICAgPGphdmFkb2NQYXRoPgorICAgICAgICAgIDxyb290IHR5cGU9ImNvbXBvc2l0ZSIgLz4KKyAgICAgICAgPC9qYXZhZG9jUGF0aD4KKyAgICAgIDwvcm9vdHM+CisgICAgPC9saWJyYXJ5PgorICAgIDxsaWJyYXJ5PgorICAgICAgPG5hbWUgdmFsdWU9Im1kaC1odG1sLTEuNi40IiAvPgorICAgICAgPHJvb3RzPgorICAgICAgICA8cHJvamVjdFBhdGg+CisgICAgICAgICAgPHJvb3QgdHlwZT0iY29tcG9zaXRlIiAvPgorICAgICAgICA8L3Byb2plY3RQYXRoPgorICAgICAgICA8c291cmNlUGF0aD4KKyAgICAgICAgICA8cm9vdCB0eXBlPSJjb21wb3NpdGUiIC8+CisgICAgICAgIDwvc291cmNlUGF0aD4KKyAgICAgICAgPGNsYXNzUGF0aD4KKyAgICAgICAgICA8cm9vdCB0eXBlPSJjb21wb3NpdGUiPgorICAgICAgICAgICAgPHJvb3QgdHlwZT0ic2ltcGxlIiB1cmw9ImphcjovL0M6L2xpYi9odG1sL1JFTEVBU0UtMV82XzQvaHRtbC5qYXIhLyIgLz4KKyAgICAgICAgICA8L3Jvb3Q+CisgICAgICAgIDwvY2xhc3NQYXRoPgorICAgICAgICA8ZXhjbHVkZVBhdGg+CisgICAgICAgICAgPHJvb3QgdHlwZT0iY29tcG9zaXRlIiAvPgorICAgICAgICA8L2V4Y2x1ZGVQYXRoPgorICAgICAgICA8amF2YWRvY1BhdGg+CisgICAgICAgICAgPHJvb3QgdHlwZT0iY29tcG9zaXRlIiAvPgorICAgICAgICA8L2phdmFkb2NQYXRoPgorICAgICAgPC9yb290cz4KKyAgICA8L2xpYnJhcnk+CisgICAgPGxpYnJhcnk+CisgICAgICA8bmFtZSB2YWx1ZT0ibWRoLWh0bWwtMi4wLjEiIC8+CisgICAgICA8cm9vdHM+CisgICAgICAgIDxwcm9qZWN0UGF0aD4KKyAgICAgICAgICA8cm9vdCB0eXBlPSJjb21wb3NpdGUiIC8+CisgICAgICAgIDwvcHJvamVjdFBhdGg+CisgICAgICAgIDxzb3VyY2VQYXRoPgorICAgICAgICAgIDxyb290IHR5cGU9ImNvbXBvc2l0ZSIgLz4KKyAgICAgICAgPC9zb3VyY2VQYXRoPgorICAgICAgICA8Y2xhc3NQYXRoPgorICAgICAgICAgIDxyb290IHR5cGU9ImNvbXBvc2l0ZSI+CisgICAgICAgICAgICA8cm9vdCB0eXBlPSJzaW1wbGUiIHVybD0iamFyOi8vQzovbGliL2h0bWwvUkVMRUFTRS0yXzBfMS9odG1sLmphciEvIiAvPgorICAgICAgICAgIDwvcm9vdD4KKyAgICAgICAgPC9jbGFzc1BhdGg+CisgICAgICAgIDxleGNsdWRlUGF0aD4KKyAgICAgICAgICA8cm9vdCB0eXBlPSJjb21wb3NpdGUiIC8+CisgICAgICAgIDwvZXhjbHVkZVBhdGg+CisgICAgICAgIDxqYXZhZG9jUGF0aD4KKyAgICAgICAgICA8cm9vdCB0eXBlPSJjb21wb3NpdGUiPgorICAgICAgICAgICAgPHJvb3QgdHlwZT0ic2ltcGxlIiB1cmw9ImZpbGU6Ly9DOi9saWIvaHRtbC9SRUxFQVNFLTJfMF8xL2RvY3MvYXBpIiAvPgorICAgICAgICAgIDwvcm9vdD4KKyAgICAgICAgPC9qYXZhZG9jUGF0aD4KKyAgICAgIDwvcm9vdHM+CisgICAgPC9saWJyYXJ5PgorICAgIDxsaWJyYXJ5PgorICAgICAgPG5hbWUgdmFsdWU9Im1kaC1odG1sLTIuMSIgLz4KKyAgICAgIDxyb290cz4KKyAgICAgICAgPHByb2plY3RQYXRoPgorICAgICAgICAgIDxyb290IHR5cGU9ImNvbXBvc2l0ZSIgLz4KKyAgICAgICAgPC9wcm9qZWN0UGF0aD4KKyAgICAgICAgPHNvdXJjZVBhdGg+CisgICAgICAgICAgPHJvb3QgdHlwZT0iY29tcG9zaXRlIiAvPgorICAgICAgICA8L3NvdXJjZVBhdGg+CisgICAgICAgIDxjbGFzc1BhdGg+CisgICAgICAgICAgPHJvb3QgdHlwZT0iY29tcG9zaXRlIj4KKyAgICAgICAgICAgIDxyb290IHR5cGU9InNpbXBsZSIgdXJsPSJqYXI6Ly9DOi9saWIvaHRtbC9SRUxFQVNFLTJfMS9odG1sLmphciEvIiAvPgorICAgICAgICAgIDwvcm9vdD4KKyAgICAgICAgPC9jbGFzc1BhdGg+CisgICAgICAgIDxleGNsdWRlUGF0aD4KKyAgICAgICAgICA8cm9vdCB0eXBlPSJjb21wb3NpdGUiIC8+CisgICAgICAgIDwvZXhjbHVkZVBhdGg+CisgICAgICAgIDxqYXZhZG9jUGF0aD4KKyAgICAgICAgICA8cm9vdCB0eXBlPSJjb21wb3NpdGUiPgorICAgICAgICAgICAgPHJvb3QgdHlwZT0ic2ltcGxlIiB1cmw9ImZpbGU6Ly9DOi9saWIvaHRtbC9SRUxFQVNFLTJfMS9kb2NzL2FwaSIgLz4KKyAgICAgICAgICA8L3Jvb3Q+CisgICAgICAgIDwvamF2YWRvY1BhdGg+CisgICAgICA8L3Jvb3RzPgorICAgIDwvbGlicmFyeT4KKyAgICA8bGlicmFyeT4KKyAgICAgIDxuYW1lIHZhbHVlPSJtZGgtbGFkb2stMS4yIiAvPgorICAgICAgPHJvb3RzPgorICAgICAgICA8cHJvamVjdFBhdGg+CisgICAgICAgICAgPHJvb3QgdHlwZT0iY29tcG9zaXRlIiAvPgorICAgICAgICA8L3Byb2plY3RQYXRoPgorICAgICAgICA8c291cmNlUGF0aD4KKyAgICAgICAgICA8cm9vdCB0eXBlPSJjb21wb3NpdGUiIC8+CisgICAgICAgIDwvc291cmNlUGF0aD4KKyAgICAgICAgPGNsYXNzUGF0aD4KKyAgICAgICAgICA8cm9vdCB0eXBlPSJjb21wb3NpdGUiPgorICAgICAgICAgICAgPHJvb3QgdHlwZT0ic2ltcGxlIiB1cmw9ImphcjovL0M6L2xpYi9sYWRvay9SRUxFQVNFLTFfMi9sYWRvay5qYXIhLyIgLz4KKyAgICAgICAgICA8L3Jvb3Q+CisgICAgICAgIDwvY2xhc3NQYXRoPgorICAgICAgICA8ZXhjbHVkZVBhdGg+CisgICAgICAgICAgPHJvb3QgdHlwZT0iY29tcG9zaXRlIiAvPgorICAgICAgICA8L2V4Y2x1ZGVQYXRoPgorICAgICAgICA8amF2YWRvY1BhdGg+CisgICAgICAgICAgPHJvb3QgdHlwZT0iY29tcG9zaXRlIiAvPgorICAgICAgICA8L2phdmFkb2NQYXRoPgorICAgICAgPC9yb290cz4KKyAgICA8L2xpYnJhcnk+CisgICAgPGxpYnJhcnk+CisgICAgICA8bmFtZSB2YWx1ZT0ibWRoLWxhZG9rLTEuMyIgLz4KKyAgICAgIDxyb290cz4KKyAgICAgICAgPHByb2plY3RQYXRoPgorICAgICAgICAgIDxyb290IHR5cGU9ImNvbXBvc2l0ZSIgLz4KKyAgICAgICAgPC9wcm9qZWN0UGF0aD4KKyAgICAgICAgPHNvdXJjZVBhdGg+CisgICAgICAgICAgPHJvb3QgdHlwZT0iY29tcG9zaXRlIiAvPgorICAgICAgICA8L3NvdXJjZVBhdGg+CisgICAgICAgIDxjbGFzc1BhdGg+CisgICAgICAgICAgPHJvb3QgdHlwZT0iY29tcG9zaXRlIj4KKyAgICAgICAgICAgIDxyb290IHR5cGU9InNpbXBsZSIgdXJsPSJqYXI6Ly9DOi9saWIvbGFkb2svUkVMRUFTRS0xXzMvbGFkb2suamFyIS8iIC8+CisgICAgICAgICAgPC9yb290PgorICAgICAgICA8L2NsYXNzUGF0aD4KKyAgICAgICAgPGV4Y2x1ZGVQYXRoPgorICAgICAgICAgIDxyb290IHR5cGU9ImNvbXBvc2l0ZSIgLz4KKyAgICAgICAgPC9leGNsdWRlUGF0aD4KKyAgICAgICAgPGphdmFkb2NQYXRoPgorICAgICAgICAgIDxyb290IHR5cGU9ImNvbXBvc2l0ZSIgLz4KKyAgICAgICAgPC9qYXZhZG9jUGF0aD4KKyAgICAgIDwvcm9vdHM+CisgICAgPC9saWJyYXJ5PgorICAgIDxsaWJyYXJ5PgorICAgICAgPG5hbWUgdmFsdWU9Im1kaC1sYWRvay0xLjQiIC8+CisgICAgICA8cm9vdHM+CisgICAgICAgIDxwcm9qZWN0UGF0aD4KKyAgICAgICAgICA8cm9vdCB0eXBlPSJjb21wb3NpdGUiIC8+CisgICAgICAgIDwvcHJvamVjdFBhdGg+CisgICAgICAgIDxzb3VyY2VQYXRoPgorICAgICAgICAgIDxyb290IHR5cGU9ImNvbXBvc2l0ZSIgLz4KKyAgICAgICAgPC9zb3VyY2VQYXRoPgorICAgICAgICA8Y2xhc3NQYXRoPgorICAgICAgICAgIDxyb290IHR5cGU9ImNvbXBvc2l0ZSI+CisgICAgICAgICAgICA8cm9vdCB0eXBlPSJzaW1wbGUiIHVybD0iamFyOi8vQzovbGliL2xhZG9rL1JFTEVBU0UtMV80L2xhZG9rLmphciEvIiAvPgorICAgICAgICAgIDwvcm9vdD4KKyAgICAgICAgPC9jbGFzc1BhdGg+CisgICAgICAgIDxleGNsdWRlUGF0aD4KKyAgICAgICAgICA8cm9vdCB0eXBlPSJjb21wb3NpdGUiIC8+CisgICAgICAgIDwvZXhjbHVkZVBhdGg+CisgICAgICAgIDxqYXZhZG9jUGF0aD4KKyAgICAgICAgICA8cm9vdCB0eXBlPSJjb21wb3NpdGUiIC8+CisgICAgICAgIDwvamF2YWRvY1BhdGg+CisgICAgICA8L3Jvb3RzPgorICAgIDwvbGlicmFyeT4KKyAgICA8bGlicmFyeT4KKyAgICAgIDxuYW1lIHZhbHVlPSJtZGgtbGFkb2stMi4wIiAvPgorICAgICAgPHJvb3RzPgorICAgICAgICA8cHJvamVjdFBhdGg+CisgICAgICAgICAgPHJvb3QgdHlwZT0iY29tcG9zaXRlIiAvPgorICAgICAgICA8L3Byb2plY3RQYXRoPgorICAgICAgICA8c291cmNlUGF0aD4KKyAgICAgICAgICA8cm9vdCB0eXBlPSJjb21wb3NpdGUiIC8+CisgICAgICAgIDwvc291cmNlUGF0aD4KKyAgICAgICAgPGNsYXNzUGF0aD4KKyAgICAgICAgICA8cm9vdCB0eXBlPSJjb21wb3NpdGUiPgorICAgICAgICAgICAgPHJvb3QgdHlwZT0ic2ltcGxlIiB1cmw9ImphcjovL0M6L2xpYi9sYWRvay9SRUxFQVNFLTJfMC9zaGFyZWQvbGliL2xhZG9rLXNoYXJlZC5qYXIhLyIgLz4KKyAgICAgICAgICA8L3Jvb3Q+CisgICAgICAgIDwvY2xhc3NQYXRoPgorICAgICAgICA8ZXhjbHVkZVBhdGg+CisgICAgICAgICAgPHJvb3QgdHlwZT0iY29tcG9zaXRlIiAvPgorICAgICAgICA8L2V4Y2x1ZGVQYXRoPgorICAgICAgICA8amF2YWRvY1BhdGg+CisgICAgICAgICAgPHJvb3QgdHlwZT0iY29tcG9zaXRlIj4KKyAgICAgICAgICAgIDxyb290IHR5cGU9InNpbXBsZSIgdXJsPSJmaWxlOi8vQzovbGliL2xhZG9rL1JFTEVBU0UtMl8wL3NoYXJlZC9kb2NzL2FwaSIgLz4KKyAgICAgICAgICA8L3Jvb3Q+CisgICAgICAgIDwvamF2YWRvY1BhdGg+CisgICAgICA8L3Jvb3RzPgorICAgIDwvbGlicmFyeT4KKyAgICA8bGlicmFyeT4KKyAgICAgIDxuYW1lIHZhbHVlPSJtZGgtbGFkb2stMi4xIiAvPgorICAgICAgPHJvb3RzPgorICAgICAgICA8cHJvamVjdFBhdGg+CisgICAgICAgICAgPHJvb3QgdHlwZT0iY29tcG9zaXRlIiAvPgorICAgICAgICA8L3Byb2plY3RQYXRoPgorICAgICAgICA8c291cmNlUGF0aD4KKyAgICAgICAgICA8cm9vdCB0eXBlPSJjb21wb3NpdGUiIC8+CisgICAgICAgIDwvc291cmNlUGF0aD4KKyAgICAgICAgPGNsYXNzUGF0aD4KKyAgICAgICAgICA8cm9vdCB0eXBlPSJjb21wb3NpdGUiPgorICAgICAgICAgICAgPHJvb3QgdHlwZT0ic2ltcGxlIiB1cmw9ImphcjovL0M6L2xpYi9sYWRvay9SRUxFQVNFLTJfMS9zaGFyZWQvbGliL2xhZG9rLXNoYXJlZC5qYXIhLyIgLz4KKyAgICAgICAgICA8L3Jvb3Q+CisgICAgICAgIDwvY2xhc3NQYXRoPgorICAgICAgICA8ZXhjbHVkZVBhdGg+CisgICAgICAgICAgPHJvb3QgdHlwZT0iY29tcG9zaXRlIiAvPgorICAgICAgICA8L2V4Y2x1ZGVQYXRoPgorICAgICAgICA8amF2YWRvY1BhdGg+CisgICAgICAgICAgPHJvb3QgdHlwZT0iY29tcG9zaXRlIj4KKyAgICAgICAgICAgIDxyb290IHR5cGU9InNpbXBsZSIgdXJsPSJmaWxlOi8vQzovbGliL2xhZG9rL1JFTEVBU0UtMl8xL3NoYXJlZC9kb2NzL2FwaSIgLz4KKyAgICAgICAgICA8L3Jvb3Q+CisgICAgICAgIDwvamF2YWRvY1BhdGg+CisgICAgICA8L3Jvb3RzPgorICAgIDwvbGlicmFyeT4KKyAgICA8bGlicmFyeT4KKyAgICAgIDxuYW1lIHZhbHVlPSJtZGgtbGFkb2stMi4yIiAvPgorICAgICAgPHJvb3RzPgorICAgICAgICA8cHJvamVjdFBhdGg+CisgICAgICAgICAgPHJvb3QgdHlwZT0iY29tcG9zaXRlIiAvPgorICAgICAgICA8L3Byb2plY3RQYXRoPgorICAgICAgICA8c291cmNlUGF0aD4KKyAgICAgICAgICA8cm9vdCB0eXBlPSJjb21wb3NpdGUiIC8+CisgICAgICAgIDwvc291cmNlUGF0aD4KKyAgICAgICAgPGNsYXNzUGF0aD4KKyAgICAgICAgICA8cm9vdCB0eXBlPSJjb21wb3NpdGUiPgorICAgICAgICAgICAgPHJvb3QgdHlwZT0ic2ltcGxlIiB1cmw9ImphcjovL0M6L2xpYi9sYWRvay9SRUxFQVNFLTJfMi9zaGFyZWQvbGliL2xhZG9rLXNoYXJlZC5qYXIhLyIgLz4KKyAgICAgICAgICA8L3Jvb3Q+CisgICAgICAgIDwvY2xhc3NQYXRoPgorICAgICAgICA8ZXhjbHVkZVBhdGg+CisgICAgICAgICAgPHJvb3QgdHlwZT0iY29tcG9zaXRlIiAvPgorICAgICAgICA8L2V4Y2x1ZGVQYXRoPgorICAgICAgICA8amF2YWRvY1BhdGg+CisgICAgICAgICAgPHJvb3QgdHlwZT0iY29tcG9zaXRlIj4KKyAgICAgICAgICAgIDxyb290IHR5cGU9InNpbXBsZSIgdXJsPSJmaWxlOi8vQzovbGliL2xhZG9rL1JFTEVBU0UtMl8yL3NoYXJlZC9kb2NzL2FwaSIgLz4KKyAgICAgICAgICA8L3Jvb3Q+CisgICAgICAgIDwvamF2YWRvY1BhdGg+CisgICAgICA8L3Jvb3RzPgorICAgIDwvbGlicmFyeT4KKyAgICA8bGlicmFyeT4KKyAgICAgIDxuYW1lIHZhbHVlPSJtZGgtbmRzLTIuMyIgLz4KKyAgICAgIDxyb290cz4KKyAgICAgICAgPHByb2plY3RQYXRoPgorICAgICAgICAgIDxyb290IHR5cGU9ImNvbXBvc2l0ZSIgLz4KKyAgICAgICAgPC9wcm9qZWN0UGF0aD4KKyAgICAgICAgPHNvdXJjZVBhdGg+CisgICAgICAgICAgPHJvb3QgdHlwZT0iY29tcG9zaXRlIiAvPgorICAgICAgICA8L3NvdXJjZVBhdGg+CisgICAgICAgIDxjbGFzc1BhdGg+CisgICAgICAgICAgPHJvb3QgdHlwZT0iY29tcG9zaXRlIj4KKyAgICAgICAgICAgIDxyb290IHR5cGU9InNpbXBsZSIgdXJsPSJqYXI6Ly9DOi9saWIvbmRzL1JFTEVBU0UtMl8zL25kcy5qYXIhLyIgLz4KKyAgICAgICAgICA8L3Jvb3Q+CisgICAgICAgIDwvY2xhc3NQYXRoPgorICAgICAgICA8ZXhjbHVkZVBhdGg+CisgICAgICAgICAgPHJvb3QgdHlwZT0iY29tcG9zaXRlIiAvPgorICAgICAgICA8L2V4Y2x1ZGVQYXRoPgorICAgICAgICA8amF2YWRvY1BhdGg+CisgICAgICAgICAgPHJvb3QgdHlwZT0iY29tcG9zaXRlIiAvPgorICAgICAgICA8L2phdmFkb2NQYXRoPgorICAgICAgPC9yb290cz4KKyAgICA8L2xpYnJhcnk+CisgICAgPGxpYnJhcnk+CisgICAgICA8bmFtZSB2YWx1ZT0ibWRoLW5kcy0yLjQiIC8+CisgICAgICA8cm9vdHM+CisgICAgICAgIDxwcm9qZWN0UGF0aD4KKyAgICAgICAgICA8cm9vdCB0eXBlPSJjb21wb3NpdGUiIC8+CisgICAgICAgIDwvcHJvamVjdFBhdGg+CisgICAgICAgIDxzb3VyY2VQYXRoPgorICAgICAgICAgIDxyb290IHR5cGU9ImNvbXBvc2l0ZSIgLz4KKyAgICAgICAgPC9zb3VyY2VQYXRoPgorICAgICAgICA8Y2xhc3NQYXRoPgorICAgICAgICAgIDxyb290IHR5cGU9ImNvbXBvc2l0ZSI+CisgICAgICAgICAgICA8cm9vdCB0eXBlPSJzaW1wbGUiIHVybD0iamFyOi8vQzovbGliL25kcy9SRUxFQVNFLTJfNC9uZHMuamFyIS8iIC8+CisgICAgICAgICAgPC9yb290PgorICAgICAgICA8L2NsYXNzUGF0aD4KKyAgICAgICAgPGV4Y2x1ZGVQYXRoPgorICAgICAgICAgIDxyb290IHR5cGU9ImNvbXBvc2l0ZSIgLz4KKyAgICAgICAgPC9leGNsdWRlUGF0aD4KKyAgICAgICAgPGphdmFkb2NQYXRoPgorICAgICAgICAgIDxyb290IHR5cGU9ImNvbXBvc2l0ZSI+CisgICAgICAgICAgICA8cm9vdCB0eXBlPSJzaW1wbGUiIHVybD0iZmlsZTovL0M6L2xpYi9uZHMvUkVMRUFTRS0yXzQvZG9jcy9hcGkiIC8+CisgICAgICAgICAgPC9yb290PgorICAgICAgICA8L2phdmFkb2NQYXRoPgorICAgICAgPC9yb290cz4KKyAgICA8L2xpYnJhcnk+CisgICAgPGxpYnJhcnk+CisgICAgICA8bmFtZSB2YWx1ZT0ibWRoLW5kcy1hZG1pbi0yLjMiIC8+CisgICAgICA8cm9vdHM+CisgICAgICAgIDxwcm9qZWN0UGF0aD4KKyAgICAgICAgICA8cm9vdCB0eXBlPSJjb21wb3NpdGUiIC8+CisgICAgICAgIDwvcHJvamVjdFBhdGg+CisgICAgICAgIDxzb3VyY2VQYXRoPgorICAgICAgICAgIDxyb290IHR5cGU9ImNvbXBvc2l0ZSIgLz4KKyAgICAgICAgPC9zb3VyY2VQYXRoPgorICAgICAgICA8Y2xhc3NQYXRoPgorICAgICAgICAgIDxyb290IHR5cGU9ImNvbXBvc2l0ZSI+CisgICAgICAgICAgICA8cm9vdCB0eXBlPSJzaW1wbGUiIHVybD0iamFyOi8vQzovbGliL25kcy9SRUxFQVNFLTJfMy9uZHMtYWRtaW4uamFyIS8iIC8+CisgICAgICAgICAgPC9yb290PgorICAgICAgICA8L2NsYXNzUGF0aD4KKyAgICAgICAgPGV4Y2x1ZGVQYXRoPgorICAgICAgICAgIDxyb290IHR5cGU9ImNvbXBvc2l0ZSIgLz4KKyAgICAgICAgPC9leGNsdWRlUGF0aD4KKyAgICAgICAgPGphdmFkb2NQYXRoPgorICAgICAgICAgIDxyb290IHR5cGU9ImNvbXBvc2l0ZSIgLz4KKyAgICAgICAgPC9qYXZhZG9jUGF0aD4KKyAgICAgIDwvcm9vdHM+CisgICAgPC9saWJyYXJ5PgorICAgIDxsaWJyYXJ5PgorICAgICAgPG5hbWUgdmFsdWU9Im1kaC1uZHMtYWRtaW4tMi40IiAvPgorICAgICAgPHJvb3RzPgorICAgICAgICA8cHJvamVjdFBhdGg+CisgICAgICAgICAgPHJvb3QgdHlwZT0iY29tcG9zaXRlIiAvPgorICAgICAgICA8L3Byb2plY3RQYXRoPgorICAgICAgICA8c291cmNlUGF0aD4KKyAgICAgICAgICA8cm9vdCB0eXBlPSJjb21wb3NpdGUiIC8+CisgICAgICAgIDwvc291cmNlUGF0aD4KKyAgICAgICAgPGNsYXNzUGF0aD4KKyAgICAgICAgICA8cm9vdCB0eXBlPSJjb21wb3NpdGUiPgorICAgICAgICAgICAgPHJvb3QgdHlwZT0ic2ltcGxlIiB1cmw9ImphcjovL0M6L2xpYi9uZHMvUkVMRUFTRS0yXzQvbmRzLWFkbWluLmphciEvIiAvPgorICAgICAgICAgIDwvcm9vdD4KKyAgICAgICAgPC9jbGFzc1BhdGg+CisgICAgICAgIDxleGNsdWRlUGF0aD4KKyAgICAgICAgICA8cm9vdCB0eXBlPSJjb21wb3NpdGUiIC8+CisgICAgICAgIDwvZXhjbHVkZVBhdGg+CisgICAgICAgIDxqYXZhZG9jUGF0aD4KKyAgICAgICAgICA8cm9vdCB0eXBlPSJjb21wb3NpdGUiPgorICAgICAgICAgICAgPHJvb3QgdHlwZT0ic2ltcGxlIiB1cmw9ImZpbGU6Ly9DOi9saWIvbmRzL1JFTEVBU0UtMl80L2RvY3MvYXBpIiAvPgorICAgICAgICAgIDwvcm9vdD4KKyAgICAgICAgPC9qYXZhZG9jUGF0aD4KKyAgICAgIDwvcm9vdHM+CisgICAgPC9saWJyYXJ5PgorICAgIDxsaWJyYXJ5PgorICAgICAgPG5hbWUgdmFsdWU9Im1kaC1ueWhldC0yLjUiIC8+CisgICAgICA8cm9vdHM+CisgICAgICAgIDxwcm9qZWN0UGF0aD4KKyAgICAgICAgICA8cm9vdCB0eXBlPSJjb21wb3NpdGUiIC8+CisgICAgICAgIDwvcHJvamVjdFBhdGg+CisgICAgICAgIDxzb3VyY2VQYXRoPgorICAgICAgICAgIDxyb290IHR5cGU9ImNvbXBvc2l0ZSI+CisgICAgICAgICAgICA8cm9vdCB0eXBlPSJzaW1wbGUiIHVybD0iZmlsZTovL0M6L3JlbGVhc2UvbnloZXQvc3JjIiAvPgorICAgICAgICAgIDwvcm9vdD4KKyAgICAgICAgPC9zb3VyY2VQYXRoPgorICAgICAgICA8Y2xhc3NQYXRoPgorICAgICAgICAgIDxyb290IHR5cGU9ImNvbXBvc2l0ZSI+CisgICAgICAgICAgICA8cm9vdCB0eXBlPSJzaW1wbGUiIHVybD0iamFyOi8vQzovbGliL255aGV0L1JFTEVBU0UtMl81L255aGV0LmphciEvIiAvPgorICAgICAgICAgIDwvcm9vdD4KKyAgICAgICAgPC9jbGFzc1BhdGg+CisgICAgICAgIDxleGNsdWRlUGF0aD4KKyAgICAgICAgICA8cm9vdCB0eXBlPSJjb21wb3NpdGUiIC8+CisgICAgICAgIDwvZXhjbHVkZVBhdGg+CisgICAgICAgIDxqYXZhZG9jUGF0aD4KKyAgICAgICAgICA8cm9vdCB0eXBlPSJjb21wb3NpdGUiIC8+CisgICAgICAgIDwvamF2YWRvY1BhdGg+CisgICAgICA8L3Jvb3RzPgorICAgIDwvbGlicmFyeT4KKyAgICA8bGlicmFyeT4KKyAgICAgIDxuYW1lIHZhbHVlPSJtZGgtbnloZXQtMy4wLjEiIC8+CisgICAgICA8cm9vdHM+CisgICAgICAgIDxwcm9qZWN0UGF0aD4KKyAgICAgICAgICA8cm9vdCB0eXBlPSJjb21wb3NpdGUiIC8+CisgICAgICAgIDwvcHJvamVjdFBhdGg+CisgICAgICAgIDxzb3VyY2VQYXRoPgorICAgICAgICAgIDxyb290IHR5cGU9ImNvbXBvc2l0ZSIgLz4KKyAgICAgICAgPC9zb3VyY2VQYXRoPgorICAgICAgICA8Y2xhc3NQYXRoPgorICAgICAgICAgIDxyb290IHR5cGU9ImNvbXBvc2l0ZSI+CisgICAgICAgICAgICA8cm9vdCB0eXBlPSJzaW1wbGUiIHVybD0iamFyOi8vQzovbGliL255aGV0L1JFTEVBU0UtM18wXzEvc2hhcmVkL2xpYi9ueWhldC1zaGFyZWQuamFyIS8iIC8+CisgICAgICAgICAgPC9yb290PgorICAgICAgICA8L2NsYXNzUGF0aD4KKyAgICAgICAgPGV4Y2x1ZGVQYXRoPgorICAgICAgICAgIDxyb290IHR5cGU9ImNvbXBvc2l0ZSIgLz4KKyAgICAgICAgPC9leGNsdWRlUGF0aD4KKyAgICAgICAgPGphdmFkb2NQYXRoPgorICAgICAgICAgIDxyb290IHR5cGU9ImNvbXBvc2l0ZSI+CisgICAgICAgICAgICA8cm9vdCB0eXBlPSJzaW1wbGUiIHVybD0iZmlsZTovL0M6L2xpYi9ueWhldC9SRUxFQVNFLTNfMF8xL3NoYXJlZC9kb2NzL2FwaSIgLz4KKyAgICAgICAgICA8L3Jvb3Q+CisgICAgICAgIDwvamF2YWRvY1BhdGg+CisgICAgICA8L3Jvb3RzPgorICAgIDwvbGlicmFyeT4KKyAgICA8bGlicmFyeT4KKyAgICAgIDxuYW1lIHZhbHVlPSJtZGgtcGFzLWFkbWluLTEuMi4xIiAvPgorICAgICAgPHJvb3RzPgorICAgICAgICA8cHJvamVjdFBhdGg+CisgICAgICAgICAgPHJvb3QgdHlwZT0iY29tcG9zaXRlIiAvPgorICAgICAgICA8L3Byb2plY3RQYXRoPgorICAgICAgICA8c291cmNlUGF0aD4KKyAgICAgICAgICA8cm9vdCB0eXBlPSJjb21wb3NpdGUiPgorICAgICAgICAgICAgPHJvb3QgdHlwZT0ic2ltcGxlIiB1cmw9ImZpbGU6Ly9DOi9yZWxlYXNlL3Bhcy9zcmMiIC8+CisgICAgICAgICAgPC9yb290PgorICAgICAgICA8L3NvdXJjZVBhdGg+CisgICAgICAgIDxjbGFzc1BhdGg+CisgICAgICAgICAgPHJvb3QgdHlwZT0iY29tcG9zaXRlIj4KKyAgICAgICAgICAgIDxyb290IHR5cGU9InNpbXBsZSIgdXJsPSJqYXI6Ly9DOi9saWIvcGFzL1JFTEVBU0UtMV8yXzEvcGFzLWFkbWluLmphciEvIiAvPgorICAgICAgICAgIDwvcm9vdD4KKyAgICAgICAgPC9jbGFzc1BhdGg+CisgICAgICAgIDxleGNsdWRlUGF0aD4KKyAgICAgICAgICA8cm9vdCB0eXBlPSJjb21wb3NpdGUiIC8+CisgICAgICAgIDwvZXhjbHVkZVBhdGg+CisgICAgICAgIDxqYXZhZG9jUGF0aD4KKyAgICAgICAgICA8cm9vdCB0eXBlPSJjb21wb3NpdGUiIC8+CisgICAgICAgIDwvamF2YWRvY1BhdGg+CisgICAgICA8L3Jvb3RzPgorICAgIDwvbGlicmFyeT4KKyAgICA8bGlicmFyeT4KKyAgICAgIDxuYW1lIHZhbHVlPSJtZGgtcGFzc2FnZS1hZG1pbi0yLjUiIC8+CisgICAgICA8cm9vdHM+CisgICAgICAgIDxwcm9qZWN0UGF0aD4KKyAgICAgICAgICA8cm9vdCB0eXBlPSJjb21wb3NpdGUiIC8+CisgICAgICAgIDwvcHJvamVjdFBhdGg+CisgICAgICAgIDxzb3VyY2VQYXRoPgorICAgICAgICAgIDxyb290IHR5cGU9ImNvbXBvc2l0ZSI+CisgICAgICAgICAgICA8cm9vdCB0eXBlPSJzaW1wbGUiIHVybD0iZmlsZTovL0M6L3JlbGVhc2UvcGFzc2FnZS9zcmMiIC8+CisgICAgICAgICAgPC9yb290PgorICAgICAgICA8L3NvdXJjZVBhdGg+CisgICAgICAgIDxjbGFzc1BhdGg+CisgICAgICAgICAgPHJvb3QgdHlwZT0iY29tcG9zaXRlIj4KKyAgICAgICAgICAgIDxyb290IHR5cGU9InNpbXBsZSIgdXJsPSJqYXI6Ly9DOi9saWIvcGFzc2FnZS9SRUxFQVNFLTJfNS9wYXNzYWdlLWFkbWluLmphciEvIiAvPgorICAgICAgICAgIDwvcm9vdD4KKyAgICAgICAgPC9jbGFzc1BhdGg+CisgICAgICAgIDxleGNsdWRlUGF0aD4KKyAgICAgICAgICA8cm9vdCB0eXBlPSJjb21wb3NpdGUiIC8+CisgICAgICAgIDwvZXhjbHVkZVBhdGg+CisgICAgICAgIDxqYXZhZG9jUGF0aD4KKyAgICAgICAgICA8cm9vdCB0eXBlPSJjb21wb3NpdGUiIC8+CisgICAgICAgIDwvamF2YWRvY1BhdGg+CisgICAgICA8L3Jvb3RzPgorICAgIDwvbGlicmFyeT4KKyAgICA8bGlicmFyeT4KKyAgICAgIDxuYW1lIHZhbHVlPSJtZGgtcGVyc29uYWwtNS4wIiAvPgorICAgICAgPHJvb3RzPgorICAgICAgICA8cHJvamVjdFBhdGg+CisgICAgICAgICAgPHJvb3QgdHlwZT0iY29tcG9zaXRlIiAvPgorICAgICAgICA8L3Byb2plY3RQYXRoPgorICAgICAgICA8c291cmNlUGF0aD4KKyAgICAgICAgICA8cm9vdCB0eXBlPSJjb21wb3NpdGUiPgorICAgICAgICAgICAgPHJvb3QgdHlwZT0ic2ltcGxlIiB1cmw9ImZpbGU6Ly9DOi9yZWxlYXNlL3BlcnNvbmFsL3NoYXJlZC9zcmMiIC8+CisgICAgICAgICAgPC9yb290PgorICAgICAgICA8L3NvdXJjZVBhdGg+CisgICAgICAgIDxjbGFzc1BhdGg+CisgICAgICAgICAgPHJvb3QgdHlwZT0iY29tcG9zaXRlIj4KKyAgICAgICAgICAgIDxyb290IHR5cGU9InNpbXBsZSIgdXJsPSJqYXI6Ly9DOi9saWIvcGVyc29uYWwvUkVMRUFTRS01XzAvc2hhcmVkL2xpYi9wZXJzb25hbC1zaGFyZWQuamFyIS8iIC8+CisgICAgICAgICAgPC9yb290PgorICAgICAgICA8L2NsYXNzUGF0aD4KKyAgICAgICAgPGV4Y2x1ZGVQYXRoPgorICAgICAgICAgIDxyb290IHR5cGU9ImNvbXBvc2l0ZSIgLz4KKyAgICAgICAgPC9leGNsdWRlUGF0aD4KKyAgICAgICAgPGphdmFkb2NQYXRoPgorICAgICAgICAgIDxyb290IHR5cGU9ImNvbXBvc2l0ZSIgLz4KKyAgICAgICAgPC9qYXZhZG9jUGF0aD4KKyAgICAgIDwvcm9vdHM+CisgICAgPC9saWJyYXJ5PgorICAgIDxsaWJyYXJ5PgorICAgICAgPG5hbWUgdmFsdWU9Im1kaC1wZXJzb25hbC01LjMiIC8+CisgICAgICA8cm9vdHM+CisgICAgICAgIDxwcm9qZWN0UGF0aD4KKyAgICAgICAgICA8cm9vdCB0eXBlPSJjb21wb3NpdGUiIC8+CisgICAgICAgIDwvcHJvamVjdFBhdGg+CisgICAgICAgIDxzb3VyY2VQYXRoPgorICAgICAgICAgIDxyb290IHR5cGU9ImNvbXBvc2l0ZSI+CisgICAgICAgICAgICA8cm9vdCB0eXBlPSJzaW1wbGUiIHVybD0iZmlsZTovL0M6L3JlbGVhc2UvcGVyc29uYWwvc2hhcmVkL3NyYyIgLz4KKyAgICAgICAgICA8L3Jvb3Q+CisgICAgICAgIDwvc291cmNlUGF0aD4KKyAgICAgICAgPGNsYXNzUGF0aD4KKyAgICAgICAgICA8cm9vdCB0eXBlPSJjb21wb3NpdGUiPgorICAgICAgICAgICAgPHJvb3QgdHlwZT0ic2ltcGxlIiB1cmw9ImphcjovL0M6L2xpYi9wZXJzb25hbC9SRUxFQVNFLTVfMy9zaGFyZWQvbGliL3BlcnNvbmFsLXNoYXJlZC5qYXIhLyIgLz4KKyAgICAgICAgICA8L3Jvb3Q+CisgICAgICAgIDwvY2xhc3NQYXRoPgorICAgICAgICA8ZXhjbHVkZVBhdGg+CisgICAgICAgICAgPHJvb3QgdHlwZT0iY29tcG9zaXRlIiAvPgorICAgICAgICA8L2V4Y2x1ZGVQYXRoPgorICAgICAgICA8amF2YWRvY1BhdGg+CisgICAgICAgICAgPHJvb3QgdHlwZT0iY29tcG9zaXRlIiAvPgorICAgICAgICA8L2phdmFkb2NQYXRoPgorICAgICAgPC9yb290cz4KKyAgICA8L2xpYnJhcnk+CisgICAgPGxpYnJhcnk+CisgICAgICA8bmFtZSB2YWx1ZT0ibWRoLXBlcnNvbmFsLTUuMy4xIiAvPgorICAgICAgPHJvb3RzPgorICAgICAgICA8cHJvamVjdFBhdGg+CisgICAgICAgICAgPHJvb3QgdHlwZT0iY29tcG9zaXRlIiAvPgorICAgICAgICA8L3Byb2plY3RQYXRoPgorICAgICAgICA8c291cmNlUGF0aD4KKyAgICAgICAgICA8cm9vdCB0eXBlPSJjb21wb3NpdGUiPgorICAgICAgICAgICAgPHJvb3QgdHlwZT0ic2ltcGxlIiB1cmw9ImZpbGU6Ly9DOi9yZWxlYXNlL3BlcnNvbmFsL3NoYXJlZC9zcmMiIC8+CisgICAgICAgICAgPC9yb290PgorICAgICAgICA8L3NvdXJjZVBhdGg+CisgICAgICAgIDxjbGFzc1BhdGg+CisgICAgICAgICAgPHJvb3QgdHlwZT0iY29tcG9zaXRlIj4KKyAgICAgICAgICAgIDxyb290IHR5cGU9InNpbXBsZSIgdXJsPSJqYXI6Ly9DOi9saWIvcGVyc29uYWwvUkVMRUFTRS01XzNfMS9zaGFyZWQvbGliL3BlcnNvbmFsLXNoYXJlZC5qYXIhLyIgLz4KKyAgICAgICAgICA8L3Jvb3Q+CisgICAgICAgIDwvY2xhc3NQYXRoPgorICAgICAgICA8ZXhjbHVkZVBhdGg+CisgICAgICAgICAgPHJvb3QgdHlwZT0iY29tcG9zaXRlIiAvPgorICAgICAgICA8L2V4Y2x1ZGVQYXRoPgorICAgICAgICA8amF2YWRvY1BhdGg+CisgICAgICAgICAgPHJvb3QgdHlwZT0iY29tcG9zaXRlIiAvPgorICAgICAgICA8L2phdmFkb2NQYXRoPgorICAgICAgPC9yb290cz4KKyAgICA8L2xpYnJhcnk+CisgICAgPGxpYnJhcnk+CisgICAgICA8bmFtZSB2YWx1ZT0ibWRoLXBvcnRhbC0yLjEiIC8+CisgICAgICA8cm9vdHM+CisgICAgICAgIDxwcm9qZWN0UGF0aD4KKyAgICAgICAgICA8cm9vdCB0eXBlPSJjb21wb3NpdGUiIC8+CisgICAgICAgIDwvcHJvamVjdFBhdGg+CisgICAgICAgIDxzb3VyY2VQYXRoPgorICAgICAgICAgIDxyb290IHR5cGU9ImNvbXBvc2l0ZSIgLz4KKyAgICAgICAgPC9zb3VyY2VQYXRoPgorICAgICAgICA8Y2xhc3NQYXRoPgorICAgICAgICAgIDxyb290IHR5cGU9ImNvbXBvc2l0ZSI+CisgICAgICAgICAgICA8cm9vdCB0eXBlPSJzaW1wbGUiIHVybD0iamFyOi8vQzovbGliL3BvcnRhbC9SRUxFQVNFLTJfMS9wb3J0YWwvbGliL3BvcnRhbC5qYXIhLyIgLz4KKyAgICAgICAgICA8L3Jvb3Q+CisgICAgICAgIDwvY2xhc3NQYXRoPgorICAgICAgICA8ZXhjbHVkZVBhdGg+CisgICAgICAgICAgPHJvb3QgdHlwZT0iY29tcG9zaXRlIiAvPgorICAgICAgICA8L2V4Y2x1ZGVQYXRoPgorICAgICAgICA8amF2YWRvY1BhdGg+CisgICAgICAgICAgPHJvb3QgdHlwZT0iY29tcG9zaXRlIj4KKyAgICAgICAgICAgIDxyb290IHR5cGU9InNpbXBsZSIgdXJsPSJmaWxlOi8vQzovbGliL3BvcnRhbC9SRUxFQVNFLTJfMS9wb3J0YWwvZG9jcy9hcGkiIC8+CisgICAgICAgICAgPC9yb290PgorICAgICAgICA8L2phdmFkb2NQYXRoPgorICAgICAgPC9yb290cz4KKyAgICA8L2xpYnJhcnk+CisgICAgPGxpYnJhcnk+CisgICAgICA8bmFtZSB2YWx1ZT0ibWRoLXJvYm90LTEuMSIgLz4KKyAgICAgIDxyb290cz4KKyAgICAgICAgPHByb2plY3RQYXRoPgorICAgICAgICAgIDxyb290IHR5cGU9ImNvbXBvc2l0ZSIgLz4KKyAgICAgICAgPC9wcm9qZWN0UGF0aD4KKyAgICAgICAgPHNvdXJjZVBhdGg+CisgICAgICAgICAgPHJvb3QgdHlwZT0iY29tcG9zaXRlIiAvPgorICAgICAgICA8L3NvdXJjZVBhdGg+CisgICAgICAgIDxjbGFzc1BhdGg+CisgICAgICAgICAgPHJvb3QgdHlwZT0iY29tcG9zaXRlIj4KKyAgICAgICAgICAgIDxyb290IHR5cGU9InNpbXBsZSIgdXJsPSJqYXI6Ly9DOi9saWIvcm9ib3QvUkVMRUFTRS0xXzEvcm9ib3QuamFyIS8iIC8+CisgICAgICAgICAgPC9yb290PgorICAgICAgICA8L2NsYXNzUGF0aD4KKyAgICAgICAgPGV4Y2x1ZGVQYXRoPgorICAgICAgICAgIDxyb290IHR5cGU9ImNvbXBvc2l0ZSIgLz4KKyAgICAgICAgPC9leGNsdWRlUGF0aD4KKyAgICAgICAgPGphdmFkb2NQYXRoPgorICAgICAgICAgIDxyb290IHR5cGU9ImNvbXBvc2l0ZSI+CisgICAgICAgICAgICA8cm9vdCB0eXBlPSJzaW1wbGUiIHVybD0iZmlsZTovL0M6L2xpYi9yb2JvdC9SRUxFQVNFLTFfMS9kb2NzL2FwaSIgLz4KKyAgICAgICAgICA8L3Jvb3Q+CisgICAgICAgIDwvamF2YWRvY1BhdGg+CisgICAgICA8L3Jvb3RzPgorICAgIDwvbGlicmFyeT4KKyAgICA8bGlicmFyeT4KKyAgICAgIDxuYW1lIHZhbHVlPSJtZGgtc2NoZW1hLTIuNyIgLz4KKyAgICAgIDxyb290cz4KKyAgICAgICAgPHByb2plY3RQYXRoPgorICAgICAgICAgIDxyb290IHR5cGU9ImNvbXBvc2l0ZSIgLz4KKyAgICAgICAgPC9wcm9qZWN0UGF0aD4KKyAgICAgICAgPHNvdXJjZVBhdGg+CisgICAgICAgICAgPHJvb3QgdHlwZT0iY29tcG9zaXRlIj4KKyAgICAgICAgICAgIDxyb290IHR5cGU9InNpbXBsZSIgdXJsPSJmaWxlOi8vQzovcmVsZWFzZS9zY2hlbWEvc3JjIiAvPgorICAgICAgICAgIDwvcm9vdD4KKyAgICAgICAgPC9zb3VyY2VQYXRoPgorICAgICAgICA8Y2xhc3NQYXRoPgorICAgICAgICAgIDxyb290IHR5cGU9ImNvbXBvc2l0ZSI+CisgICAgICAgICAgICA8cm9vdCB0eXBlPSJzaW1wbGUiIHVybD0iamFyOi8vQzovbGliL3NjaGVtYS9SRUxFQVNFLTJfNy9zY2hlbWEuamFyIS8iIC8+CisgICAgICAgICAgPC9yb290PgorICAgICAgICA8L2NsYXNzUGF0aD4KKyAgICAgICAgPGV4Y2x1ZGVQYXRoPgorICAgICAgICAgIDxyb290IHR5cGU9ImNvbXBvc2l0ZSIgLz4KKyAgICAgICAgPC9leGNsdWRlUGF0aD4KKyAgICAgICAgPGphdmFkb2NQYXRoPgorICAgICAgICAgIDxyb290IHR5cGU9ImNvbXBvc2l0ZSIgLz4KKyAgICAgICAgPC9qYXZhZG9jUGF0aD4KKyAgICAgIDwvcm9vdHM+CisgICAgPC9saWJyYXJ5PgorICAgIDxsaWJyYXJ5PgorICAgICAgPG5hbWUgdmFsdWU9Im1kaC1zY2hlbWEtMy4wLjIiIC8+CisgICAgICA8cm9vdHM+CisgICAgICAgIDxwcm9qZWN0UGF0aD4KKyAgICAgICAgICA8cm9vdCB0eXBlPSJjb21wb3NpdGUiIC8+CisgICAgICAgIDwvcHJvamVjdFBhdGg+CisgICAgICAgIDxzb3VyY2VQYXRoPgorICAgICAgICAgIDxyb290IHR5cGU9ImNvbXBvc2l0ZSIgLz4KKyAgICAgICAgPC9zb3VyY2VQYXRoPgorICAgICAgICA8Y2xhc3NQYXRoPgorICAgICAgICAgIDxyb290IHR5cGU9ImNvbXBvc2l0ZSI+CisgICAgICAgICAgICA8cm9vdCB0eXBlPSJzaW1wbGUiIHVybD0iamFyOi8vQzovbGliL3NjaGVtYS9SRUxFQVNFLTNfMF8yL3NoYXJlZC9saWIvc2NoZW1hLXNoYXJlZC5qYXIhLyIgLz4KKyAgICAgICAgICA8L3Jvb3Q+CisgICAgICAgIDwvY2xhc3NQYXRoPgorICAgICAgICA8ZXhjbHVkZVBhdGg+CisgICAgICAgICAgPHJvb3QgdHlwZT0iY29tcG9zaXRlIiAvPgorICAgICAgICA8L2V4Y2x1ZGVQYXRoPgorICAgICAgICA8amF2YWRvY1BhdGg+CisgICAgICAgICAgPHJvb3QgdHlwZT0iY29tcG9zaXRlIj4KKyAgICAgICAgICAgIDxyb290IHR5cGU9InNpbXBsZSIgdXJsPSJmaWxlOi8vQzovbGliL3NjaGVtYS9SRUxFQVNFLTNfMF8yL3NoYXJlZC9kb2NzL2FwaSIgLz4KKyAgICAgICAgICA8L3Jvb3Q+CisgICAgICAgIDwvamF2YWRvY1BhdGg+CisgICAgICA8L3Jvb3RzPgorICAgIDwvbGlicmFyeT4KKyAgICA8bGlicmFyeT4KKyAgICAgIDxuYW1lIHZhbHVlPSJtZGgtc2NoZW1hLTMuMC4zIiAvPgorICAgICAgPHJvb3RzPgorICAgICAgICA8cHJvamVjdFBhdGg+CisgICAgICAgICAgPHJvb3QgdHlwZT0iY29tcG9zaXRlIiAvPgorICAgICAgICA8L3Byb2plY3RQYXRoPgorICAgICAgICA8c291cmNlUGF0aD4KKyAgICAgICAgICA8cm9vdCB0eXBlPSJjb21wb3NpdGUiIC8+CisgICAgICAgIDwvc291cmNlUGF0aD4KKyAgICAgICAgPGNsYXNzUGF0aD4KKyAgICAgICAgICA8cm9vdCB0eXBlPSJjb21wb3NpdGUiPgorICAgICAgICAgICAgPHJvb3QgdHlwZT0ic2ltcGxlIiB1cmw9ImphcjovL0M6L2xpYi9zY2hlbWEvUkVMRUFTRS0zXzBfMy9zaGFyZWQvbGliL3NjaGVtYS1zaGFyZWQuamFyIS8iIC8+CisgICAgICAgICAgPC9yb290PgorICAgICAgICA8L2NsYXNzUGF0aD4KKyAgICAgICAgPGV4Y2x1ZGVQYXRoPgorICAgICAgICAgIDxyb290IHR5cGU9ImNvbXBvc2l0ZSIgLz4KKyAgICAgICAgPC9leGNsdWRlUGF0aD4KKyAgICAgICAgPGphdmFkb2NQYXRoPgorICAgICAgICAgIDxyb290IHR5cGU9ImNvbXBvc2l0ZSI+CisgICAgICAgICAgICA8cm9vdCB0eXBlPSJzaW1wbGUiIHVybD0iZmlsZTovL0M6L2xpYi9zY2hlbWEvUkVMRUFTRS0zXzBfMy9zaGFyZWQvZG9jcy9hcGkiIC8+CisgICAgICAgICAgPC9yb290PgorICAgICAgICA8L2phdmFkb2NQYXRoPgorICAgICAgPC9yb290cz4KKyAgICA8L2xpYnJhcnk+CisgICAgPGxpYnJhcnk+CisgICAgICA8bmFtZSB2YWx1ZT0ibWRoLXNlcnZsZXQtMS40LjIiIC8+CisgICAgICA8cm9vdHM+CisgICAgICAgIDxwcm9qZWN0UGF0aD4KKyAgICAgICAgICA8cm9vdCB0eXBlPSJjb21wb3NpdGUiIC8+CisgICAgICAgIDwvcHJvamVjdFBhdGg+CisgICAgICAgIDxzb3VyY2VQYXRoPgorICAgICAgICAgIDxyb290IHR5cGU9ImNvbXBvc2l0ZSIgLz4KKyAgICAgICAgPC9zb3VyY2VQYXRoPgorICAgICAgICA8Y2xhc3NQYXRoPgorICAgICAgICAgIDxyb290IHR5cGU9ImNvbXBvc2l0ZSI+CisgICAgICAgICAgICA8cm9vdCB0eXBlPSJzaW1wbGUiIHVybD0iamFyOi8vQzovbGliL3NlcnZsZXQvUkVMRUFTRS0xXzRfMi9zZXJ2bGV0LmphciEvIiAvPgorICAgICAgICAgIDwvcm9vdD4KKyAgICAgICAgPC9jbGFzc1BhdGg+CisgICAgICAgIDxleGNsdWRlUGF0aD4KKyAgICAgICAgICA8cm9vdCB0eXBlPSJjb21wb3NpdGUiIC8+CisgICAgICAgIDwvZXhjbHVkZVBhdGg+CisgICAgICAgIDxqYXZhZG9jUGF0aD4KKyAgICAgICAgICA8cm9vdCB0eXBlPSJjb21wb3NpdGUiIC8+CisgICAgICAgIDwvamF2YWRvY1BhdGg+CisgICAgICA8L3Jvb3RzPgorICAgIDwvbGlicmFyeT4KKyAgICA8bGlicmFyeT4KKyAgICAgIDxuYW1lIHZhbHVlPSJtZGgtc2VydmxldC0xLjQuMyIgLz4KKyAgICAgIDxyb290cz4KKyAgICAgICAgPHByb2plY3RQYXRoPgorICAgICAgICAgIDxyb290IHR5cGU9ImNvbXBvc2l0ZSIgLz4KKyAgICAgICAgPC9wcm9qZWN0UGF0aD4KKyAgICAgICAgPHNvdXJjZVBhdGg+CisgICAgICAgICAgPHJvb3QgdHlwZT0iY29tcG9zaXRlIiAvPgorICAgICAgICA8L3NvdXJjZVBhdGg+CisgICAgICAgIDxjbGFzc1BhdGg+CisgICAgICAgICAgPHJvb3QgdHlwZT0iY29tcG9zaXRlIj4KKyAgICAgICAgICAgIDxyb290IHR5cGU9InNpbXBsZSIgdXJsPSJqYXI6Ly9DOi9saWIvc2VydmxldC9SRUxFQVNFLTFfNF8zL3NlcnZsZXQuamFyIS8iIC8+CisgICAgICAgICAgPC9yb290PgorICAgICAgICA8L2NsYXNzUGF0aD4KKyAgICAgICAgPGV4Y2x1ZGVQYXRoPgorICAgICAgICAgIDxyb290IHR5cGU9ImNvbXBvc2l0ZSIgLz4KKyAgICAgICAgPC9leGNsdWRlUGF0aD4KKyAgICAgICAgPGphdmFkb2NQYXRoPgorICAgICAgICAgIDxyb290IHR5cGU9ImNvbXBvc2l0ZSIgLz4KKyAgICAgICAgPC9qYXZhZG9jUGF0aD4KKyAgICAgIDwvcm9vdHM+CisgICAgPC9saWJyYXJ5PgorICAgIDxsaWJyYXJ5PgorICAgICAgPG5hbWUgdmFsdWU9Im1kaC1zZXJ2bGV0LTIuMSIgLz4KKyAgICAgIDxyb290cz4KKyAgICAgICAgPHByb2plY3RQYXRoPgorICAgICAgICAgIDxyb290IHR5cGU9ImNvbXBvc2l0ZSIgLz4KKyAgICAgICAgPC9wcm9qZWN0UGF0aD4KKyAgICAgICAgPHNvdXJjZVBhdGg+CisgICAgICAgICAgPHJvb3QgdHlwZT0iY29tcG9zaXRlIiAvPgorICAgICAgICA8L3NvdXJjZVBhdGg+CisgICAgICAgIDxjbGFzc1BhdGg+CisgICAgICAgICAgPHJvb3QgdHlwZT0iY29tcG9zaXRlIj4KKyAgICAgICAgICAgIDxyb290IHR5cGU9InNpbXBsZSIgdXJsPSJqYXI6Ly9DOi9saWIvc2VydmxldC9SRUxFQVNFLTJfMS9zZXJ2bGV0LmphciEvIiAvPgorICAgICAgICAgIDwvcm9vdD4KKyAgICAgICAgPC9jbGFzc1BhdGg+CisgICAgICAgIDxleGNsdWRlUGF0aD4KKyAgICAgICAgICA8cm9vdCB0eXBlPSJjb21wb3NpdGUiIC8+CisgICAgICAgIDwvZXhjbHVkZVBhdGg+CisgICAgICAgIDxqYXZhZG9jUGF0aD4KKyAgICAgICAgICA8cm9vdCB0eXBlPSJjb21wb3NpdGUiPgorICAgICAgICAgICAgPHJvb3QgdHlwZT0ic2ltcGxlIiB1cmw9ImZpbGU6Ly9DOi9saWIvc2VydmxldC9SRUxFQVNFLTJfMV8xL2RvY3MvYXBpIiAvPgorICAgICAgICAgIDwvcm9vdD4KKyAgICAgICAgPC9qYXZhZG9jUGF0aD4KKyAgICAgIDwvcm9vdHM+CisgICAgPC9saWJyYXJ5PgorICAgIDxsaWJyYXJ5PgorICAgICAgPG5hbWUgdmFsdWU9Im1kaC1zZXJ2bGV0LTIuMS4xIiAvPgorICAgICAgPHJvb3RzPgorICAgICAgICA8cHJvamVjdFBhdGg+CisgICAgICAgICAgPHJvb3QgdHlwZT0iY29tcG9zaXRlIiAvPgorICAgICAgICA8L3Byb2plY3RQYXRoPgorICAgICAgICA8c291cmNlUGF0aD4KKyAgICAgICAgICA8cm9vdCB0eXBlPSJjb21wb3NpdGUiIC8+CisgICAgICAgIDwvc291cmNlUGF0aD4KKyAgICAgICAgPGNsYXNzUGF0aD4KKyAgICAgICAgICA8cm9vdCB0eXBlPSJjb21wb3NpdGUiPgorICAgICAgICAgICAgPHJvb3QgdHlwZT0ic2ltcGxlIiB1cmw9ImphcjovL0M6L2xpYi9zZXJ2bGV0L1JFTEVBU0UtMl8xXzEvc2VydmxldC5qYXIhLyIgLz4KKyAgICAgICAgICA8L3Jvb3Q+CisgICAgICAgIDwvY2xhc3NQYXRoPgorICAgICAgICA8ZXhjbHVkZVBhdGg+CisgICAgICAgICAgPHJvb3QgdHlwZT0iY29tcG9zaXRlIiAvPgorICAgICAgICA8L2V4Y2x1ZGVQYXRoPgorICAgICAgICA8amF2YWRvY1BhdGg+CisgICAgICAgICAgPHJvb3QgdHlwZT0iY29tcG9zaXRlIj4KKyAgICAgICAgICAgIDxyb290IHR5cGU9InNpbXBsZSIgdXJsPSJmaWxlOi8vQzovbGliL3NlcnZsZXQvUkVMRUFTRS0yXzFfMS9kb2NzL2FwaSIgLz4KKyAgICAgICAgICA8L3Jvb3Q+CisgICAgICAgIDwvamF2YWRvY1BhdGg+CisgICAgICA8L3Jvb3RzPgorICAgIDwvbGlicmFyeT4KKyAgICA8bGlicmFyeT4KKyAgICAgIDxuYW1lIHZhbHVlPSJtZGgtc2ljLTMuMSIgLz4KKyAgICAgIDxyb290cz4KKyAgICAgICAgPHByb2plY3RQYXRoPgorICAgICAgICAgIDxyb290IHR5cGU9ImNvbXBvc2l0ZSIgLz4KKyAgICAgICAgPC9wcm9qZWN0UGF0aD4KKyAgICAgICAgPHNvdXJjZVBhdGg+CisgICAgICAgICAgPHJvb3QgdHlwZT0iY29tcG9zaXRlIiAvPgorICAgICAgICA8L3NvdXJjZVBhdGg+CisgICAgICAgIDxjbGFzc1BhdGg+CisgICAgICAgICAgPHJvb3QgdHlwZT0iY29tcG9zaXRlIj4KKyAgICAgICAgICAgIDxyb290IHR5cGU9InNpbXBsZSIgdXJsPSJqYXI6Ly9DOi9saWIvc2ljL1JFTEVBU0UtM18xL3NpYy5qYXIhLyIgLz4KKyAgICAgICAgICA8L3Jvb3Q+CisgICAgICAgIDwvY2xhc3NQYXRoPgorICAgICAgICA8ZXhjbHVkZVBhdGg+CisgICAgICAgICAgPHJvb3QgdHlwZT0iY29tcG9zaXRlIiAvPgorICAgICAgICA8L2V4Y2x1ZGVQYXRoPgorICAgICAgICA8amF2YWRvY1BhdGg+CisgICAgICAgICAgPHJvb3QgdHlwZT0iY29tcG9zaXRlIj4KKyAgICAgICAgICAgIDxyb290IHR5cGU9InNpbXBsZSIgdXJsPSJmaWxlOi8vQzovcmVsZWFzZS9zaWMvc3JjIiAvPgorICAgICAgICAgIDwvcm9vdD4KKyAgICAgICAgPC9qYXZhZG9jUGF0aD4KKyAgICAgIDwvcm9vdHM+CisgICAgPC9saWJyYXJ5PgorICAgIDxsaWJyYXJ5PgorICAgICAgPG5hbWUgdmFsdWU9Im1kaC1zaWMtNC4xLjEiIC8+CisgICAgICA8cm9vdHM+CisgICAgICAgIDxwcm9qZWN0UGF0aD4KKyAgICAgICAgICA8cm9vdCB0eXBlPSJjb21wb3NpdGUiIC8+CisgICAgICAgIDwvcHJvamVjdFBhdGg+CisgICAgICAgIDxzb3VyY2VQYXRoPgorICAgICAgICAgIDxyb290IHR5cGU9ImNvbXBvc2l0ZSIgLz4KKyAgICAgICAgPC9zb3VyY2VQYXRoPgorICAgICAgICA8Y2xhc3NQYXRoPgorICAgICAgICAgIDxyb290IHR5cGU9ImNvbXBvc2l0ZSI+CisgICAgICAgICAgICA8cm9vdCB0eXBlPSJzaW1wbGUiIHVybD0iamFyOi8vQzovbGliL3NpYy9SRUxFQVNFLTRfMV8xL3NoYXJlZC9saWIvc2ljLXNoYXJlZC5qYXIhLyIgLz4KKyAgICAgICAgICA8L3Jvb3Q+CisgICAgICAgIDwvY2xhc3NQYXRoPgorICAgICAgICA8ZXhjbHVkZVBhdGg+CisgICAgICAgICAgPHJvb3QgdHlwZT0iY29tcG9zaXRlIiAvPgorICAgICAgICA8L2V4Y2x1ZGVQYXRoPgorICAgICAgICA8amF2YWRvY1BhdGg+CisgICAgICAgICAgPHJvb3QgdHlwZT0iY29tcG9zaXRlIj4KKyAgICAgICAgICAgIDxyb290IHR5cGU9InNpbXBsZSIgdXJsPSJmaWxlOi8vQzovbGliL3NpYy9SRUxFQVNFLTRfMV8xL3NoYXJlZC9kb2NzL2FwaSIgLz4KKyAgICAgICAgICA8L3Jvb3Q+CisgICAgICAgIDwvamF2YWRvY1BhdGg+CisgICAgICA8L3Jvb3RzPgorICAgIDwvbGlicmFyeT4KKyAgICA8bGlicmFyeT4KKyAgICAgIDxuYW1lIHZhbHVlPSJtZGgtc2ljLTQuMiIgLz4KKyAgICAgIDxyb290cz4KKyAgICAgICAgPHByb2plY3RQYXRoPgorICAgICAgICAgIDxyb290IHR5cGU9ImNvbXBvc2l0ZSIgLz4KKyAgICAgICAgPC9wcm9qZWN0UGF0aD4KKyAgICAgICAgPHNvdXJjZVBhdGg+CisgICAgICAgICAgPHJvb3QgdHlwZT0iY29tcG9zaXRlIiAvPgorICAgICAgICA8L3NvdXJjZVBhdGg+CisgICAgICAgIDxjbGFzc1BhdGg+CisgICAgICAgICAgPHJvb3QgdHlwZT0iY29tcG9zaXRlIj4KKyAgICAgICAgICAgIDxyb290IHR5cGU9InNpbXBsZSIgdXJsPSJqYXI6Ly9DOi9saWIvc2ljL1JFTEVBU0UtNF8yL3NoYXJlZC9saWIvc2ljLXNoYXJlZC5qYXIhLyIgLz4KKyAgICAgICAgICA8L3Jvb3Q+CisgICAgICAgIDwvY2xhc3NQYXRoPgorICAgICAgICA8ZXhjbHVkZVBhdGg+CisgICAgICAgICAgPHJvb3QgdHlwZT0iY29tcG9zaXRlIiAvPgorICAgICAgICA8L2V4Y2x1ZGVQYXRoPgorICAgICAgICA8amF2YWRvY1BhdGg+CisgICAgICAgICAgPHJvb3QgdHlwZT0iY29tcG9zaXRlIj4KKyAgICAgICAgICAgIDxyb290IHR5cGU9InNpbXBsZSIgdXJsPSJmaWxlOi8vQzovbGliL3NpYy9SRUxFQVNFLTRfMi9zaGFyZWQvZG9jcy9hcGkiIC8+CisgICAgICAgICAgPC9yb290PgorICAgICAgICA8L2phdmFkb2NQYXRoPgorICAgICAgPC9yb290cz4KKyAgICA8L2xpYnJhcnk+CisgICAgPGxpYnJhcnk+CisgICAgICA8bmFtZSB2YWx1ZT0ibWRoLXN0dWRpZWluZm9ybWF0aW9uLTMuNCIgLz4KKyAgICAgIDxyb290cz4KKyAgICAgICAgPHByb2plY3RQYXRoPgorICAgICAgICAgIDxyb290IHR5cGU9ImNvbXBvc2l0ZSIgLz4KKyAgICAgICAgPC9wcm9qZWN0UGF0aD4KKyAgICAgICAgPHNvdXJjZVBhdGg+CisgICAgICAgICAgPHJvb3QgdHlwZT0iY29tcG9zaXRlIiAvPgorICAgICAgICA8L3NvdXJjZVBhdGg+CisgICAgICAgIDxjbGFzc1BhdGg+CisgICAgICAgICAgPHJvb3QgdHlwZT0iY29tcG9zaXRlIj4KKyAgICAgICAgICAgIDxyb290IHR5cGU9InNpbXBsZSIgdXJsPSJqYXI6Ly9DOi9saWIvc3R1ZGllaW5mb3JtYXRpb24vUkVMRUFTRS0zXzQvc3R1ZGllaW5mb3JtYXRpb24uamFyIS8iIC8+CisgICAgICAgICAgPC9yb290PgorICAgICAgICA8L2NsYXNzUGF0aD4KKyAgICAgICAgPGV4Y2x1ZGVQYXRoPgorICAgICAgICAgIDxyb290IHR5cGU9ImNvbXBvc2l0ZSIgLz4KKyAgICAgICAgPC9leGNsdWRlUGF0aD4KKyAgICAgICAgPGphdmFkb2NQYXRoPgorICAgICAgICAgIDxyb290IHR5cGU9ImNvbXBvc2l0ZSIgLz4KKyAgICAgICAgPC9qYXZhZG9jUGF0aD4KKyAgICAgIDwvcm9vdHM+CisgICAgPC9saWJyYXJ5PgorICAgIDxsaWJyYXJ5PgorICAgICAgPG5hbWUgdmFsdWU9Im1kaC1zdHVkaWVpbmZvcm1hdGlvbi00LjAiIC8+CisgICAgICA8cm9vdHM+CisgICAgICAgIDxwcm9qZWN0UGF0aD4KKyAgICAgICAgICA8cm9vdCB0eXBlPSJjb21wb3NpdGUiIC8+CisgICAgICAgIDwvcHJvamVjdFBhdGg+CisgICAgICAgIDxzb3VyY2VQYXRoPgorICAgICAgICAgIDxyb290IHR5cGU9ImNvbXBvc2l0ZSIgLz4KKyAgICAgICAgPC9zb3VyY2VQYXRoPgorICAgICAgICA8Y2xhc3NQYXRoPgorICAgICAgICAgIDxyb290IHR5cGU9ImNvbXBvc2l0ZSI+CisgICAgICAgICAgICA8cm9vdCB0eXBlPSJzaW1wbGUiIHVybD0iamFyOi8vQzovbGliL3N0dWRpZWluZm9ybWF0aW9uL1JFTEVBU0UtNF8wL3NoYXJlZC9saWIvc3R1ZGllaW5mb3JtYXRpb24tc2hhcmVkLmphciEvIiAvPgorICAgICAgICAgIDwvcm9vdD4KKyAgICAgICAgPC9jbGFzc1BhdGg+CisgICAgICAgIDxleGNsdWRlUGF0aD4KKyAgICAgICAgICA8cm9vdCB0eXBlPSJjb21wb3NpdGUiIC8+CisgICAgICAgIDwvZXhjbHVkZVBhdGg+CisgICAgICAgIDxqYXZhZG9jUGF0aD4KKyAgICAgICAgICA8cm9vdCB0eXBlPSJjb21wb3NpdGUiPgorICAgICAgICAgICAgPHJvb3QgdHlwZT0ic2ltcGxlIiB1cmw9ImZpbGU6Ly9DOi9saWIvc3R1ZGllaW5mb3JtYXRpb24vUkVMRUFTRS00XzAvc2hhcmVkL2RvY3MvYXBpIiAvPgorICAgICAgICAgIDwvcm9vdD4KKyAgICAgICAgPC9qYXZhZG9jUGF0aD4KKyAgICAgIDwvcm9vdHM+CisgICAgPC9saWJyYXJ5PgorICAgIDxsaWJyYXJ5PgorICAgICAgPG5hbWUgdmFsdWU9Im1kaC1zdHVkaWVpbmZvcm1hdGlvbi00LjIuMSIgLz4KKyAgICAgIDxyb290cz4KKyAgICAgICAgPHByb2plY3RQYXRoPgorICAgICAgICAgIDxyb290IHR5cGU9ImNvbXBvc2l0ZSIgLz4KKyAgICAgICAgPC9wcm9qZWN0UGF0aD4KKyAgICAgICAgPHNvdXJjZVBhdGg+CisgICAgICAgICAgPHJvb3QgdHlwZT0iY29tcG9zaXRlIiAvPgorICAgICAgICA8L3NvdXJjZVBhdGg+CisgICAgICAgIDxjbGFzc1BhdGg+CisgICAgICAgICAgPHJvb3QgdHlwZT0iY29tcG9zaXRlIj4KKyAgICAgICAgICAgIDxyb290IHR5cGU9InNpbXBsZSIgdXJsPSJqYXI6Ly9DOi9saWIvc3R1ZGllaW5mb3JtYXRpb24vUkVMRUFTRS00XzJfMS9zaGFyZWQvbGliL3N0dWRpZWluZm9ybWF0aW9uLXNoYXJlZC5qYXIhLyIgLz4KKyAgICAgICAgICA8L3Jvb3Q+CisgICAgICAgIDwvY2xhc3NQYXRoPgorICAgICAgICA8ZXhjbHVkZVBhdGg+CisgICAgICAgICAgPHJvb3QgdHlwZT0iY29tcG9zaXRlIiAvPgorICAgICAgICA8L2V4Y2x1ZGVQYXRoPgorICAgICAgICA8amF2YWRvY1BhdGg+CisgICAgICAgICAgPHJvb3QgdHlwZT0iY29tcG9zaXRlIj4KKyAgICAgICAgICAgIDxyb290IHR5cGU9InNpbXBsZSIgdXJsPSJmaWxlOi8vQzovbGliL3N0dWRpZWluZm9ybWF0aW9uL1JFTEVBU0UtNF8yXzEvc2hhcmVkL2RvY3MvYXBpIiAvPgorICAgICAgICAgIDwvcm9vdD4KKyAgICAgICAgPC9qYXZhZG9jUGF0aD4KKyAgICAgIDwvcm9vdHM+CisgICAgPC9saWJyYXJ5PgorICAgIDxsaWJyYXJ5PgorICAgICAgPG5hbWUgdmFsdWU9Im1kaC1zdHVkaWVpbmZvcm1hdGlvbi1hZG1pbi0zLjUuMiIgLz4KKyAgICAgIDxyb290cz4KKyAgICAgICAgPHByb2plY3RQYXRoPgorICAgICAgICAgIDxyb290IHR5cGU9ImNvbXBvc2l0ZSIgLz4KKyAgICAgICAgPC9wcm9qZWN0UGF0aD4KKyAgICAgICAgPHNvdXJjZVBhdGg+CisgICAgICAgICAgPHJvb3QgdHlwZT0iY29tcG9zaXRlIiAvPgorICAgICAgICA8L3NvdXJjZVBhdGg+CisgICAgICAgIDxjbGFzc1BhdGg+CisgICAgICAgICAgPHJvb3QgdHlwZT0iY29tcG9zaXRlIj4KKyAgICAgICAgICAgIDxyb290IHR5cGU9InNpbXBsZSIgdXJsPSJqYXI6Ly9DOi9saWIvc3R1ZGllaW5mb3JtYXRpb24vUkVMRUFTRS0zXzVfMi9zdHVkaWVpbmZvcm1hdGlvbi1hZG1pbi5qYXIhLyIgLz4KKyAgICAgICAgICA8L3Jvb3Q+CisgICAgICAgIDwvY2xhc3NQYXRoPgorICAgICAgICA8ZXhjbHVkZVBhdGg+CisgICAgICAgICAgPHJvb3QgdHlwZT0iY29tcG9zaXRlIiAvPgorICAgICAgICA8L2V4Y2x1ZGVQYXRoPgorICAgICAgICA8amF2YWRvY1BhdGg+CisgICAgICAgICAgPHJvb3QgdHlwZT0iY29tcG9zaXRlIiAvPgorICAgICAgICA8L2phdmFkb2NQYXRoPgorICAgICAgPC9yb290cz4KKyAgICA8L2xpYnJhcnk+CisgICAgPGxpYnJhcnk+CisgICAgICA8bmFtZSB2YWx1ZT0ibWRoLXN3aW5nLTEuMSIgLz4KKyAgICAgIDxyb290cz4KKyAgICAgICAgPHByb2plY3RQYXRoPgorICAgICAgICAgIDxyb290IHR5cGU9ImNvbXBvc2l0ZSIgLz4KKyAgICAgICAgPC9wcm9qZWN0UGF0aD4KKyAgICAgICAgPHNvdXJjZVBhdGg+CisgICAgICAgICAgPHJvb3QgdHlwZT0iY29tcG9zaXRlIiAvPgorICAgICAgICA8L3NvdXJjZVBhdGg+CisgICAgICAgIDxjbGFzc1BhdGg+CisgICAgICAgICAgPHJvb3QgdHlwZT0iY29tcG9zaXRlIj4KKyAgICAgICAgICAgIDxyb290IHR5cGU9InNpbXBsZSIgdXJsPSJqYXI6Ly9DOi9saWIvc3dpbmcvUkVMRUFTRS0xXzEvc3dpbmcuamFyIS8iIC8+CisgICAgICAgICAgPC9yb290PgorICAgICAgICA8L2NsYXNzUGF0aD4KKyAgICAgICAgPGV4Y2x1ZGVQYXRoPgorICAgICAgICAgIDxyb290IHR5cGU9ImNvbXBvc2l0ZSIgLz4KKyAgICAgICAgPC9leGNsdWRlUGF0aD4KKyAgICAgICAgPGphdmFkb2NQYXRoPgorICAgICAgICAgIDxyb290IHR5cGU9ImNvbXBvc2l0ZSI+CisgICAgICAgICAgICA8cm9vdCB0eXBlPSJzaW1wbGUiIHVybD0iZmlsZTovL0M6L2xpYi9zd2luZy9SRUxFQVNFLTFfMS9kb2NzL2FwaSIgLz4KKyAgICAgICAgICA8L3Jvb3Q+CisgICAgICAgIDwvamF2YWRvY1BhdGg+CisgICAgICA8L3Jvb3RzPgorICAgIDwvbGlicmFyeT4KKyAgICA8bGlicmFyeT4KKyAgICAgIDxuYW1lIHZhbHVlPSJtZGgtc3dpbmctMS4yIiAvPgorICAgICAgPHJvb3RzPgorICAgICAgICA8cHJvamVjdFBhdGg+CisgICAgICAgICAgPHJvb3QgdHlwZT0iY29tcG9zaXRlIiAvPgorICAgICAgICA8L3Byb2plY3RQYXRoPgorICAgICAgICA8c291cmNlUGF0aD4KKyAgICAgICAgICA8cm9vdCB0eXBlPSJjb21wb3NpdGUiIC8+CisgICAgICAgIDwvc291cmNlUGF0aD4KKyAgICAgICAgPGNsYXNzUGF0aD4KKyAgICAgICAgICA8cm9vdCB0eXBlPSJjb21wb3NpdGUiPgorICAgICAgICAgICAgPHJvb3QgdHlwZT0ic2ltcGxlIiB1cmw9ImphcjovL0M6L2xpYi9zd2luZy9SRUxFQVNFLTFfMi9zd2luZy5qYXIhLyIgLz4KKyAgICAgICAgICA8L3Jvb3Q+CisgICAgICAgIDwvY2xhc3NQYXRoPgorICAgICAgICA8ZXhjbHVkZVBhdGg+CisgICAgICAgICAgPHJvb3QgdHlwZT0iY29tcG9zaXRlIiAvPgorICAgICAgICA8L2V4Y2x1ZGVQYXRoPgorICAgICAgICA8amF2YWRvY1BhdGg+CisgICAgICAgICAgPHJvb3QgdHlwZT0iY29tcG9zaXRlIj4KKyAgICAgICAgICAgIDxyb290IHR5cGU9InNpbXBsZSIgdXJsPSJmaWxlOi8vQzovbGliL3N3aW5nL1JFTEVBU0UtMV8yL2RvY3MvYXBpIiAvPgorICAgICAgICAgIDwvcm9vdD4KKyAgICAgICAgPC9qYXZhZG9jUGF0aD4KKyAgICAgIDwvcm9vdHM+CisgICAgPC9saWJyYXJ5PgorICAgIDxsaWJyYXJ5PgorICAgICAgPG5hbWUgdmFsdWU9Im1kaC10YWdsaWItaHRtbC0xLjUiIC8+CisgICAgICA8cm9vdHM+CisgICAgICAgIDxwcm9qZWN0UGF0aD4KKyAgICAgICAgICA8cm9vdCB0eXBlPSJjb21wb3NpdGUiIC8+CisgICAgICAgIDwvcHJvamVjdFBhdGg+CisgICAgICAgIDxzb3VyY2VQYXRoPgorICAgICAgICAgIDxyb290IHR5cGU9ImNvbXBvc2l0ZSIgLz4KKyAgICAgICAgPC9zb3VyY2VQYXRoPgorICAgICAgICA8Y2xhc3NQYXRoPgorICAgICAgICAgIDxyb290IHR5cGU9ImNvbXBvc2l0ZSI+CisgICAgICAgICAgICA8cm9vdCB0eXBlPSJzaW1wbGUiIHVybD0iamFyOi8vQzovbGliL3RhZ2xpYi9SRUxFQVNFLTFfNS9odG1sL2xpYi90YWdsaWItaHRtbC5qYXIhLyIgLz4KKyAgICAgICAgICA8L3Jvb3Q+CisgICAgICAgIDwvY2xhc3NQYXRoPgorICAgICAgICA8ZXhjbHVkZVBhdGg+CisgICAgICAgICAgPHJvb3QgdHlwZT0iY29tcG9zaXRlIiAvPgorICAgICAgICA8L2V4Y2x1ZGVQYXRoPgorICAgICAgICA8amF2YWRvY1BhdGg+CisgICAgICAgICAgPHJvb3QgdHlwZT0iY29tcG9zaXRlIj4KKyAgICAgICAgICAgIDxyb290IHR5cGU9InNpbXBsZSIgdXJsPSJmaWxlOi8vQzovbGliL3RhZ2xpYi9SRUxFQVNFLTFfNS9odG1sL2RvY3MvYXBpIiAvPgorICAgICAgICAgIDwvcm9vdD4KKyAgICAgICAgPC9qYXZhZG9jUGF0aD4KKyAgICAgIDwvcm9vdHM+CisgICAgPC9saWJyYXJ5PgorICAgIDxsaWJyYXJ5PgorICAgICAgPG5hbWUgdmFsdWU9Im1kaC10YWdsaWItaHRtbC0xLjYiIC8+CisgICAgICA8cm9vdHM+CisgICAgICAgIDxwcm9qZWN0UGF0aD4KKyAgICAgICAgICA8cm9vdCB0eXBlPSJjb21wb3NpdGUiIC8+CisgICAgICAgIDwvcHJvamVjdFBhdGg+CisgICAgICAgIDxzb3VyY2VQYXRoPgorICAgICAgICAgIDxyb290IHR5cGU9ImNvbXBvc2l0ZSIgLz4KKyAgICAgICAgPC9zb3VyY2VQYXRoPgorICAgICAgICA8Y2xhc3NQYXRoPgorICAgICAgICAgIDxyb290IHR5cGU9ImNvbXBvc2l0ZSI+CisgICAgICAgICAgICA8cm9vdCB0eXBlPSJzaW1wbGUiIHVybD0iamFyOi8vQzovbGliL3RhZ2xpYi9SRUxFQVNFLTFfNi9odG1sL2xpYi90YWdsaWItaHRtbC5qYXIhLyIgLz4KKyAgICAgICAgICA8L3Jvb3Q+CisgICAgICAgIDwvY2xhc3NQYXRoPgorICAgICAgICA8ZXhjbHVkZVBhdGg+CisgICAgICAgICAgPHJvb3QgdHlwZT0iY29tcG9zaXRlIiAvPgorICAgICAgICA8L2V4Y2x1ZGVQYXRoPgorICAgICAgICA8amF2YWRvY1BhdGg+CisgICAgICAgICAgPHJvb3QgdHlwZT0iY29tcG9zaXRlIj4KKyAgICAgICAgICAgIDxyb290IHR5cGU9InNpbXBsZSIgdXJsPSJmaWxlOi8vQzovbGliL3RhZ2xpYi9SRUxFQVNFLTFfNi9odG1sL2RvY3MvYXBpIiAvPgorICAgICAgICAgIDwvcm9vdD4KKyAgICAgICAgPC9qYXZhZG9jUGF0aD4KKyAgICAgIDwvcm9vdHM+CisgICAgPC9saWJyYXJ5PgorICAgIDxsaWJyYXJ5PgorICAgICAgPG5hbWUgdmFsdWU9Im1kaC10YWdsaWItc3ByYWstMS41IiAvPgorICAgICAgPHJvb3RzPgorICAgICAgICA8cHJvamVjdFBhdGg+CisgICAgICAgICAgPHJvb3QgdHlwZT0iY29tcG9zaXRlIiAvPgorICAgICAgICA8L3Byb2plY3RQYXRoPgorICAgICAgICA8c291cmNlUGF0aD4KKyAgICAgICAgICA8cm9vdCB0eXBlPSJjb21wb3NpdGUiIC8+CisgICAgICAgIDwvc291cmNlUGF0aD4KKyAgICAgICAgPGNsYXNzUGF0aD4KKyAgICAgICAgICA8cm9vdCB0eXBlPSJjb21wb3NpdGUiPgorICAgICAgICAgICAgPHJvb3QgdHlwZT0ic2ltcGxlIiB1cmw9ImphcjovL0M6L2xpYi90YWdsaWIvUkVMRUFTRS0xXzUvc3ByYWsvbGliL3RhZ2xpYi1zcHJhay5qYXIhLyIgLz4KKyAgICAgICAgICA8L3Jvb3Q+CisgICAgICAgIDwvY2xhc3NQYXRoPgorICAgICAgICA8ZXhjbHVkZVBhdGg+CisgICAgICAgICAgPHJvb3QgdHlwZT0iY29tcG9zaXRlIiAvPgorICAgICAgICA8L2V4Y2x1ZGVQYXRoPgorICAgICAgICA8amF2YWRvY1BhdGg+CisgICAgICAgICAgPHJvb3QgdHlwZT0iY29tcG9zaXRlIj4KKyAgICAgICAgICAgIDxyb290IHR5cGU9InNpbXBsZSIgdXJsPSJmaWxlOi8vQzovbGliL3RhZ2xpYi9SRUxFQVNFLTFfNS9zcHJhay9kb2NzL2FwaSIgLz4KKyAgICAgICAgICA8L3Jvb3Q+CisgICAgICAgIDwvamF2YWRvY1BhdGg+CisgICAgICA8L3Jvb3RzPgorICAgIDwvbGlicmFyeT4KKyAgICA8bGlicmFyeT4KKyAgICAgIDxuYW1lIHZhbHVlPSJtZGgtdGFnbGliLXNwcmFrLTEuNiIgLz4KKyAgICAgIDxyb290cz4KKyAgICAgICAgPHByb2plY3RQYXRoPgorICAgICAgICAgIDxyb290IHR5cGU9ImNvbXBvc2l0ZSIgLz4KKyAgICAgICAgPC9wcm9qZWN0UGF0aD4KKyAgICAgICAgPHNvdXJjZVBhdGg+CisgICAgICAgICAgPHJvb3QgdHlwZT0iY29tcG9zaXRlIiAvPgorICAgICAgICA8L3NvdXJjZVBhdGg+CisgICAgICAgIDxjbGFzc1BhdGg+CisgICAgICAgICAgPHJvb3QgdHlwZT0iY29tcG9zaXRlIj4KKyAgICAgICAgICAgIDxyb290IHR5cGU9InNpbXBsZSIgdXJsPSJqYXI6Ly9DOi9saWIvdGFnbGliL1JFTEVBU0UtMV82L3NwcmFrL2xpYi90YWdsaWItc3ByYWsuamFyIS8iIC8+CisgICAgICAgICAgPC9yb290PgorICAgICAgICA8L2NsYXNzUGF0aD4KKyAgICAgICAgPGV4Y2x1ZGVQYXRoPgorICAgICAgICAgIDxyb290IHR5cGU9ImNvbXBvc2l0ZSIgLz4KKyAgICAgICAgPC9leGNsdWRlUGF0aD4KKyAgICAgICAgPGphdmFkb2NQYXRoPgorICAgICAgICAgIDxyb290IHR5cGU9ImNvbXBvc2l0ZSI+CisgICAgICAgICAgICA8cm9vdCB0eXBlPSJzaW1wbGUiIHVybD0iZmlsZTovL0M6L2xpYi90YWdsaWIvUkVMRUFTRS0xXzYvc3ByYWsvZG9jcy9hcGkiIC8+CisgICAgICAgICAgPC9yb290PgorICAgICAgICA8L2phdmFkb2NQYXRoPgorICAgICAgPC9yb290cz4KKyAgICA8L2xpYnJhcnk+CisgICAgPGxpYnJhcnk+CisgICAgICA8bmFtZSB2YWx1ZT0ibWRoLXRhZ2xpYi10b2tlbi0xLjUiIC8+CisgICAgICA8cm9vdHM+CisgICAgICAgIDxwcm9qZWN0UGF0aD4KKyAgICAgICAgICA8cm9vdCB0eXBlPSJjb21wb3NpdGUiIC8+CisgICAgICAgIDwvcHJvamVjdFBhdGg+CisgICAgICAgIDxzb3VyY2VQYXRoPgorICAgICAgICAgIDxyb290IHR5cGU9ImNvbXBvc2l0ZSIgLz4KKyAgICAgICAgPC9zb3VyY2VQYXRoPgorICAgICAgICA8Y2xhc3NQYXRoPgorICAgICAgICAgIDxyb290IHR5cGU9ImNvbXBvc2l0ZSI+CisgICAgICAgICAgICA8cm9vdCB0eXBlPSJzaW1wbGUiIHVybD0iamFyOi8vQzovbGliL3RhZ2xpYi9SRUxFQVNFLTFfNS90b2tlbi9saWIvdGFnbGliLXRva2VuLmphciEvIiAvPgorICAgICAgICAgIDwvcm9vdD4KKyAgICAgICAgPC9jbGFzc1BhdGg+CisgICAgICAgIDxleGNsdWRlUGF0aD4KKyAgICAgICAgICA8cm9vdCB0eXBlPSJjb21wb3NpdGUiIC8+CisgICAgICAgIDwvZXhjbHVkZVBhdGg+CisgICAgICAgIDxqYXZhZG9jUGF0aD4KKyAgICAgICAgICA8cm9vdCB0eXBlPSJjb21wb3NpdGUiPgorICAgICAgICAgICAgPHJvb3QgdHlwZT0ic2ltcGxlIiB1cmw9ImZpbGU6Ly9DOi9saWIvdGFnbGliL1JFTEVBU0UtMV81L3Rva2VuL2RvY3MvYXBpIiAvPgorICAgICAgICAgIDwvcm9vdD4KKyAgICAgICAgPC9qYXZhZG9jUGF0aD4KKyAgICAgIDwvcm9vdHM+CisgICAgPC9saWJyYXJ5PgorICAgIDxsaWJyYXJ5PgorICAgICAgPG5hbWUgdmFsdWU9Im1kaC10YWdsaWItdG9rZW4tMS42IiAvPgorICAgICAgPHJvb3RzPgorICAgICAgICA8cHJvamVjdFBhdGg+CisgICAgICAgICAgPHJvb3QgdHlwZT0iY29tcG9zaXRlIiAvPgorICAgICAgICA8L3Byb2plY3RQYXRoPgorICAgICAgICA8c291cmNlUGF0aD4KKyAgICAgICAgICA8cm9vdCB0eXBlPSJjb21wb3NpdGUiIC8+CisgICAgICAgIDwvc291cmNlUGF0aD4KKyAgICAgICAgPGNsYXNzUGF0aD4KKyAgICAgICAgICA8cm9vdCB0eXBlPSJjb21wb3NpdGUiPgorICAgICAgICAgICAgPHJvb3QgdHlwZT0ic2ltcGxlIiB1cmw9ImphcjovL0M6L2xpYi90YWdsaWIvUkVMRUFTRS0xXzYvdG9rZW4vbGliL3RhZ2xpYi10b2tlbi5qYXIhLyIgLz4KKyAgICAgICAgICA8L3Jvb3Q+CisgICAgICAgIDwvY2xhc3NQYXRoPgorICAgICAgICA8ZXhjbHVkZVBhdGg+CisgICAgICAgICAgPHJvb3QgdHlwZT0iY29tcG9zaXRlIiAvPgorICAgICAgICA8L2V4Y2x1ZGVQYXRoPgorICAgICAgICA8amF2YWRvY1BhdGg+CisgICAgICAgICAgPHJvb3QgdHlwZT0iY29tcG9zaXRlIj4KKyAgICAgICAgICAgIDxyb290IHR5cGU9InNpbXBsZSIgdXJsPSJmaWxlOi8vQzovbGliL3RhZ2xpYi9SRUxFQVNFLTFfNi90b2tlbi9kb2NzL2FwaSIgLz4KKyAgICAgICAgICA8L3Jvb3Q+CisgICAgICAgIDwvamF2YWRvY1BhdGg+CisgICAgICA8L3Jvb3RzPgorICAgIDwvbGlicmFyeT4KKyAgICA8bGlicmFyeT4KKyAgICAgIDxuYW1lIHZhbHVlPSJtZGgtdXRpbC0yLjAuMSIgLz4KKyAgICAgIDxyb290cz4KKyAgICAgICAgPHByb2plY3RQYXRoPgorICAgICAgICAgIDxyb290IHR5cGU9ImNvbXBvc2l0ZSIgLz4KKyAgICAgICAgPC9wcm9qZWN0UGF0aD4KKyAgICAgICAgPHNvdXJjZVBhdGg+CisgICAgICAgICAgPHJvb3QgdHlwZT0iY29tcG9zaXRlIiAvPgorICAgICAgICA8L3NvdXJjZVBhdGg+CisgICAgICAgIDxjbGFzc1BhdGg+CisgICAgICAgICAgPHJvb3QgdHlwZT0iY29tcG9zaXRlIj4KKyAgICAgICAgICAgIDxyb290IHR5cGU9InNpbXBsZSIgdXJsPSJqYXI6Ly9DOi9saWIvdXRpbC9SRUxFQVNFLTJfMF8xL3V0aWwuamFyIS8iIC8+CisgICAgICAgICAgPC9yb290PgorICAgICAgICA8L2NsYXNzUGF0aD4KKyAgICAgICAgPGV4Y2x1ZGVQYXRoPgorICAgICAgICAgIDxyb290IHR5cGU9ImNvbXBvc2l0ZSIgLz4KKyAgICAgICAgPC9leGNsdWRlUGF0aD4KKyAgICAgICAgPGphdmFkb2NQYXRoPgorICAgICAgICAgIDxyb290IHR5cGU9ImNvbXBvc2l0ZSIgLz4KKyAgICAgICAgPC9qYXZhZG9jUGF0aD4KKyAgICAgIDwvcm9vdHM+CisgICAgPC9saWJyYXJ5PgorICAgIDxsaWJyYXJ5PgorICAgICAgPG5hbWUgdmFsdWU9Im1kaC11dGlsLTIuMSIgLz4KKyAgICAgIDxyb290cz4KKyAgICAgICAgPHByb2plY3RQYXRoPgorICAgICAgICAgIDxyb290IHR5cGU9ImNvbXBvc2l0ZSIgLz4KKyAgICAgICAgPC9wcm9qZWN0UGF0aD4KKyAgICAgICAgPHNvdXJjZVBhdGg+CisgICAgICAgICAgPHJvb3QgdHlwZT0iY29tcG9zaXRlIiAvPgorICAgICAgICA8L3NvdXJjZVBhdGg+CisgICAgICAgIDxjbGFzc1BhdGg+CisgICAgICAgICAgPHJvb3QgdHlwZT0iY29tcG9zaXRlIj4KKyAgICAgICAgICAgIDxyb290IHR5cGU9InNpbXBsZSIgdXJsPSJqYXI6Ly9DOi9saWIvdXRpbC9SRUxFQVNFLTJfMS91dGlsLmphciEvIiAvPgorICAgICAgICAgIDwvcm9vdD4KKyAgICAgICAgPC9jbGFzc1BhdGg+CisgICAgICAgIDxleGNsdWRlUGF0aD4KKyAgICAgICAgICA8cm9vdCB0eXBlPSJjb21wb3NpdGUiIC8+CisgICAgICAgIDwvZXhjbHVkZVBhdGg+CisgICAgICAgIDxqYXZhZG9jUGF0aD4KKyAgICAgICAgICA8cm9vdCB0eXBlPSJjb21wb3NpdGUiIC8+CisgICAgICAgIDwvamF2YWRvY1BhdGg+CisgICAgICA8L3Jvb3RzPgorICAgIDwvbGlicmFyeT4KKyAgICA8bGlicmFyeT4KKyAgICAgIDxuYW1lIHZhbHVlPSJtZGgtdXRpbC0yLjIiIC8+CisgICAgICA8cm9vdHM+CisgICAgICAgIDxwcm9qZWN0UGF0aD4KKyAgICAgICAgICA8cm9vdCB0eXBlPSJjb21wb3NpdGUiIC8+CisgICAgICAgIDwvcHJvamVjdFBhdGg+CisgICAgICAgIDxzb3VyY2VQYXRoPgorICAgICAgICAgIDxyb290IHR5cGU9ImNvbXBvc2l0ZSIgLz4KKyAgICAgICAgPC9zb3VyY2VQYXRoPgorICAgICAgICA8Y2xhc3NQYXRoPgorICAgICAgICAgIDxyb290IHR5cGU9ImNvbXBvc2l0ZSI+CisgICAgICAgICAgICA8cm9vdCB0eXBlPSJzaW1wbGUiIHVybD0iamFyOi8vQzovbGliL3V0aWwvUkVMRUFTRS0yXzIvdXRpbC5qYXIhLyIgLz4KKyAgICAgICAgICA8L3Jvb3Q+CisgICAgICAgIDwvY2xhc3NQYXRoPgorICAgICAgICA8ZXhjbHVkZVBhdGg+CisgICAgICAgICAgPHJvb3QgdHlwZT0iY29tcG9zaXRlIiAvPgorICAgICAgICA8L2V4Y2x1ZGVQYXRoPgorICAgICAgICA8amF2YWRvY1BhdGg+CisgICAgICAgICAgPHJvb3QgdHlwZT0iY29tcG9zaXRlIj4KKyAgICAgICAgICAgIDxyb290IHR5cGU9InNpbXBsZSIgdXJsPSJmaWxlOi8vQzovbGliL3V0aWwvUkVMRUFTRS0yXzIvZG9jcy9hcGkiIC8+CisgICAgICAgICAgPC9yb290PgorICAgICAgICA8L2phdmFkb2NQYXRoPgorICAgICAgPC9yb290cz4KKyAgICA8L2xpYnJhcnk+CisgICAgPGxpYnJhcnk+CisgICAgICA8bmFtZSB2YWx1ZT0ibWRoLXV0aWwtMi4zIiAvPgorICAgICAgPHJvb3RzPgorICAgICAgICA8cHJvamVjdFBhdGg+CisgICAgICAgICAgPHJvb3QgdHlwZT0iY29tcG9zaXRlIiAvPgorICAgICAgICA8L3Byb2plY3RQYXRoPgorICAgICAgICA8c291cmNlUGF0aD4KKyAgICAgICAgICA8cm9vdCB0eXBlPSJjb21wb3NpdGUiIC8+CisgICAgICAgIDwvc291cmNlUGF0aD4KKyAgICAgICAgPGNsYXNzUGF0aD4KKyAgICAgICAgICA8cm9vdCB0eXBlPSJjb21wb3NpdGUiPgorICAgICAgICAgICAgPHJvb3QgdHlwZT0ic2ltcGxlIiB1cmw9ImphcjovL0M6L2xpYi91dGlsL1JFTEVBU0UtMl8zL3V0aWwuamFyIS8iIC8+CisgICAgICAgICAgPC9yb290PgorICAgICAgICA8L2NsYXNzUGF0aD4KKyAgICAgICAgPGV4Y2x1ZGVQYXRoPgorICAgICAgICAgIDxyb290IHR5cGU9ImNvbXBvc2l0ZSIgLz4KKyAgICAgICAgPC9leGNsdWRlUGF0aD4KKyAgICAgICAgPGphdmFkb2NQYXRoPgorICAgICAgICAgIDxyb290IHR5cGU9ImNvbXBvc2l0ZSI+CisgICAgICAgICAgICA8cm9vdCB0eXBlPSJzaW1wbGUiIHVybD0iZmlsZTovL0M6L2xpYi91dGlsL1JFTEVBU0UtMl8zL2RvY3MvYXBpIiAvPgorICAgICAgICAgIDwvcm9vdD4KKyAgICAgICAgPC9qYXZhZG9jUGF0aD4KKyAgICAgIDwvcm9vdHM+CisgICAgPC9saWJyYXJ5PgorICAgIDxsaWJyYXJ5PgorICAgICAgPG5hbWUgdmFsdWU9Im1kaC11dGlsLTIuMy4xIiAvPgorICAgICAgPHJvb3RzPgorICAgICAgICA8cHJvamVjdFBhdGg+CisgICAgICAgICAgPHJvb3QgdHlwZT0iY29tcG9zaXRlIiAvPgorICAgICAgICA8L3Byb2plY3RQYXRoPgorICAgICAgICA8c291cmNlUGF0aD4KKyAgICAgICAgICA8cm9vdCB0eXBlPSJjb21wb3NpdGUiIC8+CisgICAgICAgIDwvc291cmNlUGF0aD4KKyAgICAgICAgPGNsYXNzUGF0aD4KKyAgICAgICAgICA8cm9vdCB0eXBlPSJjb21wb3NpdGUiPgorICAgICAgICAgICAgPHJvb3QgdHlwZT0ic2ltcGxlIiB1cmw9ImphcjovL0M6L2xpYi91dGlsL1JFTEVBU0UtMl8zXzEvdXRpbC5qYXIhLyIgLz4KKyAgICAgICAgICA8L3Jvb3Q+CisgICAgICAgIDwvY2xhc3NQYXRoPgorICAgICAgICA8ZXhjbHVkZVBhdGg+CisgICAgICAgICAgPHJvb3QgdHlwZT0iY29tcG9zaXRlIiAvPgorICAgICAgICA8L2V4Y2x1ZGVQYXRoPgorICAgICAgICA8amF2YWRvY1BhdGg+CisgICAgICAgICAgPHJvb3QgdHlwZT0iY29tcG9zaXRlIj4KKyAgICAgICAgICAgIDxyb290IHR5cGU9InNpbXBsZSIgdXJsPSJmaWxlOi8vQzovbGliL3V0aWwvUkVMRUFTRS0yXzNfMS9kb2NzL2FwaSIgLz4KKyAgICAgICAgICA8L3Jvb3Q+CisgICAgICAgIDwvamF2YWRvY1BhdGg+CisgICAgICA8L3Jvb3RzPgorICAgIDwvbGlicmFyeT4KKyAgICA8bGlicmFyeT4KKyAgICAgIDxuYW1lIHZhbHVlPSJtZGgtdXRpbC1hcHBsZXQtMi4yIiAvPgorICAgICAgPHJvb3RzPgorICAgICAgICA8cHJvamVjdFBhdGg+CisgICAgICAgICAgPHJvb3QgdHlwZT0iY29tcG9zaXRlIiAvPgorICAgICAgICA8L3Byb2plY3RQYXRoPgorICAgICAgICA8c291cmNlUGF0aD4KKyAgICAgICAgICA8cm9vdCB0eXBlPSJjb21wb3NpdGUiIC8+CisgICAgICAgIDwvc291cmNlUGF0aD4KKyAgICAgICAgPGNsYXNzUGF0aD4KKyAgICAgICAgICA8cm9vdCB0eXBlPSJjb21wb3NpdGUiPgorICAgICAgICAgICAgPHJvb3QgdHlwZT0ic2ltcGxlIiB1cmw9ImphcjovL0M6L2xpYi91dGlsL1JFTEVBU0UtMl8yL3V0aWwtYXBwbGV0LmphciEvIiAvPgorICAgICAgICAgIDwvcm9vdD4KKyAgICAgICAgPC9jbGFzc1BhdGg+CisgICAgICAgIDxleGNsdWRlUGF0aD4KKyAgICAgICAgICA8cm9vdCB0eXBlPSJjb21wb3NpdGUiIC8+CisgICAgICAgIDwvZXhjbHVkZVBhdGg+CisgICAgICAgIDxqYXZhZG9jUGF0aD4KKyAgICAgICAgICA8cm9vdCB0eXBlPSJjb21wb3NpdGUiPgorICAgICAgICAgICAgPHJvb3QgdHlwZT0ic2ltcGxlIiB1cmw9ImZpbGU6Ly9DOi9saWIvdXRpbC9SRUxFQVNFLTJfMi9kb2NzL2FwaSIgLz4KKyAgICAgICAgICA8L3Jvb3Q+CisgICAgICAgIDwvamF2YWRvY1BhdGg+CisgICAgICA8L3Jvb3RzPgorICAgIDwvbGlicmFyeT4KKyAgICA8bGlicmFyeT4KKyAgICAgIDxuYW1lIHZhbHVlPSJtZGgtdXRpbC1hcHBsZXQtMi4zLjEiIC8+CisgICAgICA8cm9vdHM+CisgICAgICAgIDxwcm9qZWN0UGF0aD4KKyAgICAgICAgICA8cm9vdCB0eXBlPSJjb21wb3NpdGUiIC8+CisgICAgICAgIDwvcHJvamVjdFBhdGg+CisgICAgICAgIDxzb3VyY2VQYXRoPgorICAgICAgICAgIDxyb290IHR5cGU9ImNvbXBvc2l0ZSIgLz4KKyAgICAgICAgPC9zb3VyY2VQYXRoPgorICAgICAgICA8Y2xhc3NQYXRoPgorICAgICAgICAgIDxyb290IHR5cGU9ImNvbXBvc2l0ZSI+CisgICAgICAgICAgICA8cm9vdCB0eXBlPSJzaW1wbGUiIHVybD0iamFyOi8vQzovbGliL3V0aWwvUkVMRUFTRS0yXzNfMS91dGlsLWFwcGxldC5qYXIhLyIgLz4KKyAgICAgICAgICA8L3Jvb3Q+CisgICAgICAgIDwvY2xhc3NQYXRoPgorICAgICAgICA8ZXhjbHVkZVBhdGg+CisgICAgICAgICAgPHJvb3QgdHlwZT0iY29tcG9zaXRlIiAvPgorICAgICAgICA8L2V4Y2x1ZGVQYXRoPgorICAgICAgICA8amF2YWRvY1BhdGg+CisgICAgICAgICAgPHJvb3QgdHlwZT0iY29tcG9zaXRlIj4KKyAgICAgICAgICAgIDxyb290IHR5cGU9InNpbXBsZSIgdXJsPSJmaWxlOi8vQzovbGliL3V0aWwvUkVMRUFTRS0yXzNfMS9kb2NzL2FwaSIgLz4KKyAgICAgICAgICA8L3Jvb3Q+CisgICAgICAgIDwvamF2YWRvY1BhdGg+CisgICAgICA8L3Jvb3RzPgorICAgIDwvbGlicmFyeT4KKyAgICA8bGlicmFyeT4KKyAgICAgIDxuYW1lIHZhbHVlPSJteXNxbC0yLjAiIC8+CisgICAgICA8cm9vdHM+CisgICAgICAgIDxwcm9qZWN0UGF0aD4KKyAgICAgICAgICA8cm9vdCB0eXBlPSJjb21wb3NpdGUiIC8+CisgICAgICAgIDwvcHJvamVjdFBhdGg+CisgICAgICAgIDxzb3VyY2VQYXRoPgorICAgICAgICAgIDxyb290IHR5cGU9ImNvbXBvc2l0ZSIgLz4KKyAgICAgICAgPC9zb3VyY2VQYXRoPgorICAgICAgICA8Y2xhc3NQYXRoPgorICAgICAgICAgIDxyb290IHR5cGU9ImNvbXBvc2l0ZSI+CisgICAgICAgICAgICA8cm9vdCB0eXBlPSJzaW1wbGUiIHVybD0iamFyOi8vQzovbGliL2V4dC9teXNxbC8yXzAvbXlzcWwuamFyIS8iIC8+CisgICAgICAgICAgPC9yb290PgorICAgICAgICA8L2NsYXNzUGF0aD4KKyAgICAgICAgPGV4Y2x1ZGVQYXRoPgorICAgICAgICAgIDxyb290IHR5cGU9ImNvbXBvc2l0ZSIgLz4KKyAgICAgICAgPC9leGNsdWRlUGF0aD4KKyAgICAgICAgPGphdmFkb2NQYXRoPgorICAgICAgICAgIDxyb290IHR5cGU9ImNvbXBvc2l0ZSIgLz4KKyAgICAgICAgPC9qYXZhZG9jUGF0aD4KKyAgICAgIDwvcm9vdHM+CisgICAgPC9saWJyYXJ5PgorICAgIDxsaWJyYXJ5PgorICAgICAgPG5hbWUgdmFsdWU9Im15c3FsLTMuMCIgLz4KKyAgICAgIDxyb290cz4KKyAgICAgICAgPHByb2plY3RQYXRoPgorICAgICAgICAgIDxyb290IHR5cGU9ImNvbXBvc2l0ZSIgLz4KKyAgICAgICAgPC9wcm9qZWN0UGF0aD4KKyAgICAgICAgPHNvdXJjZVBhdGg+CisgICAgICAgICAgPHJvb3QgdHlwZT0iY29tcG9zaXRlIiAvPgorICAgICAgICA8L3NvdXJjZVBhdGg+CisgICAgICAgIDxjbGFzc1BhdGg+CisgICAgICAgICAgPHJvb3QgdHlwZT0iY29tcG9zaXRlIj4KKyAgICAgICAgICAgIDxyb290IHR5cGU9InNpbXBsZSIgdXJsPSJqYXI6Ly9DOi9saWIvZXh0L215c3FsLzNfMC9teXNxbC5qYXIhLyIgLz4KKyAgICAgICAgICA8L3Jvb3Q+CisgICAgICAgIDwvY2xhc3NQYXRoPgorICAgICAgICA8ZXhjbHVkZVBhdGg+CisgICAgICAgICAgPHJvb3QgdHlwZT0iY29tcG9zaXRlIiAvPgorICAgICAgICA8L2V4Y2x1ZGVQYXRoPgorICAgICAgICA8amF2YWRvY1BhdGg+CisgICAgICAgICAgPHJvb3QgdHlwZT0iY29tcG9zaXRlIiAvPgorICAgICAgICA8L2phdmFkb2NQYXRoPgorICAgICAgPC9yb290cz4KKyAgICA8L2xpYnJhcnk+CisgICAgPGxpYnJhcnk+CisgICAgICA8bmFtZSB2YWx1ZT0ib3JhY2xlIiAvPgorICAgICAgPHJvb3RzPgorICAgICAgICA8cHJvamVjdFBhdGg+CisgICAgICAgICAgPHJvb3QgdHlwZT0iY29tcG9zaXRlIiAvPgorICAgICAgICA8L3Byb2plY3RQYXRoPgorICAgICAgICA8c291cmNlUGF0aD4KKyAgICAgICAgICA8cm9vdCB0eXBlPSJjb21wb3NpdGUiIC8+CisgICAgICAgIDwvc291cmNlUGF0aD4KKyAgICAgICAgPGNsYXNzUGF0aD4KKyAgICAgICAgICA8cm9vdCB0eXBlPSJjb21wb3NpdGUiPgorICAgICAgICAgICAgPHJvb3QgdHlwZT0ic2ltcGxlIiB1cmw9ImphcjovL0M6L2xpYi9kaXN0L2NsYXNzZXMxMi56aXAhLyIgLz4KKyAgICAgICAgICA8L3Jvb3Q+CisgICAgICAgIDwvY2xhc3NQYXRoPgorICAgICAgICA8ZXhjbHVkZVBhdGg+CisgICAgICAgICAgPHJvb3QgdHlwZT0iY29tcG9zaXRlIiAvPgorICAgICAgICA8L2V4Y2x1ZGVQYXRoPgorICAgICAgICA8amF2YWRvY1BhdGg+CisgICAgICAgICAgPHJvb3QgdHlwZT0iY29tcG9zaXRlIiAvPgorICAgICAgICA8L2phdmFkb2NQYXRoPgorICAgICAgPC9yb290cz4KKyAgICA8L2xpYnJhcnk+CisgICAgPGxpYnJhcnk+CisgICAgICA8bmFtZSB2YWx1ZT0ib3JhY2xlLTguMSIgLz4KKyAgICAgIDxyb290cz4KKyAgICAgICAgPHByb2plY3RQYXRoPgorICAgICAgICAgIDxyb290IHR5cGU9ImNvbXBvc2l0ZSIgLz4KKyAgICAgICAgPC9wcm9qZWN0UGF0aD4KKyAgICAgICAgPHNvdXJjZVBhdGg+CisgICAgICAgICAgPHJvb3QgdHlwZT0iY29tcG9zaXRlIiAvPgorICAgICAgICA8L3NvdXJjZVBhdGg+CisgICAgICAgIDxjbGFzc1BhdGg+CisgICAgICAgICAgPHJvb3QgdHlwZT0iY29tcG9zaXRlIj4KKyAgICAgICAgICAgIDxyb290IHR5cGU9InNpbXBsZSIgdXJsPSJqYXI6Ly9DOi9saWIvZXh0L29yYWNsZS84XzEvb3JhY2xlLmphciEvIiAvPgorICAgICAgICAgIDwvcm9vdD4KKyAgICAgICAgPC9jbGFzc1BhdGg+CisgICAgICAgIDxleGNsdWRlUGF0aD4KKyAgICAgICAgICA8cm9vdCB0eXBlPSJjb21wb3NpdGUiIC8+CisgICAgICAgIDwvZXhjbHVkZVBhdGg+CisgICAgICAgIDxqYXZhZG9jUGF0aD4KKyAgICAgICAgICA8cm9vdCB0eXBlPSJjb21wb3NpdGUiIC8+CisgICAgICAgIDwvamF2YWRvY1BhdGg+CisgICAgICA8L3Jvb3RzPgorICAgIDwvbGlicmFyeT4KKyAgICA8bGlicmFyeT4KKyAgICAgIDxuYW1lIHZhbHVlPSJvcnUtMi4wLjEiIC8+CisgICAgICA8cm9vdHM+CisgICAgICAgIDxwcm9qZWN0UGF0aD4KKyAgICAgICAgICA8cm9vdCB0eXBlPSJjb21wb3NpdGUiIC8+CisgICAgICAgIDwvcHJvamVjdFBhdGg+CisgICAgICAgIDxzb3VyY2VQYXRoPgorICAgICAgICAgIDxyb290IHR5cGU9ImNvbXBvc2l0ZSIgLz4KKyAgICAgICAgPC9zb3VyY2VQYXRoPgorICAgICAgICA8Y2xhc3NQYXRoPgorICAgICAgICAgIDxyb290IHR5cGU9ImNvbXBvc2l0ZSI+CisgICAgICAgICAgICA8cm9vdCB0eXBlPSJzaW1wbGUiIHVybD0iamFyOi8vQzovbGliL29ydS9SRUxFQVNFLTJfMF8xL29ydS5qYXIhLyIgLz4KKyAgICAgICAgICA8L3Jvb3Q+CisgICAgICAgIDwvY2xhc3NQYXRoPgorICAgICAgICA8ZXhjbHVkZVBhdGg+CisgICAgICAgICAgPHJvb3QgdHlwZT0iY29tcG9zaXRlIiAvPgorICAgICAgICA8L2V4Y2x1ZGVQYXRoPgorICAgICAgICA8amF2YWRvY1BhdGg+CisgICAgICAgICAgPHJvb3QgdHlwZT0iY29tcG9zaXRlIj4KKyAgICAgICAgICAgIDxyb290IHR5cGU9InNpbXBsZSIgdXJsPSJmaWxlOi8vQzovbGliL29ydS9SRUxFQVNFLTJfMF8xL2RvY3MvYXBpIiAvPgorICAgICAgICAgIDwvcm9vdD4KKyAgICAgICAgPC9qYXZhZG9jUGF0aD4KKyAgICAgIDwvcm9vdHM+CisgICAgPC9saWJyYXJ5PgorICAgIDxsaWJyYXJ5PgorICAgICAgPG5hbWUgdmFsdWU9InNlcnZsZXQtYXBpLTIuMyIgLz4KKyAgICAgIDxyb290cz4KKyAgICAgICAgPHByb2plY3RQYXRoPgorICAgICAgICAgIDxyb290IHR5cGU9ImNvbXBvc2l0ZSIgLz4KKyAgICAgICAgPC9wcm9qZWN0UGF0aD4KKyAgICAgICAgPHNvdXJjZVBhdGg+CisgICAgICAgICAgPHJvb3QgdHlwZT0iY29tcG9zaXRlIiAvPgorICAgICAgICA8L3NvdXJjZVBhdGg+CisgICAgICAgIDxjbGFzc1BhdGg+CisgICAgICAgICAgPHJvb3QgdHlwZT0iY29tcG9zaXRlIj4KKyAgICAgICAgICAgIDxyb290IHR5cGU9InNpbXBsZSIgdXJsPSJqYXI6Ly9DOi9saWIvZXh0L3NlcnZsZXQvMl8zL3NlcnZsZXQuamFyIS8iIC8+CisgICAgICAgICAgPC9yb290PgorICAgICAgICA8L2NsYXNzUGF0aD4KKyAgICAgICAgPGV4Y2x1ZGVQYXRoPgorICAgICAgICAgIDxyb290IHR5cGU9ImNvbXBvc2l0ZSIgLz4KKyAgICAgICAgPC9leGNsdWRlUGF0aD4KKyAgICAgICAgPGphdmFkb2NQYXRoPgorICAgICAgICAgIDxyb290IHR5cGU9ImNvbXBvc2l0ZSI+CisgICAgICAgICAgICA8cm9vdCB0eXBlPSJzaW1wbGUiIHVybD0iZmlsZTovL0M6L2xpYi9leHQvc2VydmxldC8yXzMvc2VydmxldC0yXzMtZmNzLWRvY3MiIC8+CisgICAgICAgICAgICA8cm9vdCB0eXBlPSJzaW1wbGUiIHVybD0iZmlsZTovL0M6L2xpYi9leHQvc2VydmxldC8yXzMvanNwLTFfMi1mY3MtZG9jcyIgLz4KKyAgICAgICAgICA8L3Jvb3Q+CisgICAgICAgIDwvamF2YWRvY1BhdGg+CisgICAgICA8L3Jvb3RzPgorICAgIDwvbGlicmFyeT4KKyAgICA8bGlicmFyeT4KKyAgICAgIDxuYW1lIHZhbHVlPSJ3ZXN0ZXJtYXJjay12Y2FsZW5kYXIiIC8+CisgICAgICA8cm9vdHM+CisgICAgICAgIDxwcm9qZWN0UGF0aD4KKyAgICAgICAgICA8cm9vdCB0eXBlPSJjb21wb3NpdGUiIC8+CisgICAgICAgIDwvcHJvamVjdFBhdGg+CisgICAgICAgIDxzb3VyY2VQYXRoPgorICAgICAgICAgIDxyb290IHR5cGU9ImNvbXBvc2l0ZSIgLz4KKyAgICAgICAgPC9zb3VyY2VQYXRoPgorICAgICAgICA8Y2xhc3NQYXRoPgorICAgICAgICAgIDxyb290IHR5cGU9ImNvbXBvc2l0ZSI+CisgICAgICAgICAgICA8cm9vdCB0eXBlPSJzaW1wbGUiIHVybD0iamFyOi8vQzovbGliL2V4dC93ZXN0ZXJtYXJjay12Y2FsZW5kYXIvd2VzdGVybWFyY2stdmNhbGVuZGFyLmphciEvIiAvPgorICAgICAgICAgIDwvcm9vdD4KKyAgICAgICAgPC9jbGFzc1BhdGg+CisgICAgICAgIDxleGNsdWRlUGF0aD4KKyAgICAgICAgICA8cm9vdCB0eXBlPSJjb21wb3NpdGUiIC8+CisgICAgICAgIDwvZXhjbHVkZVBhdGg+CisgICAgICAgIDxqYXZhZG9jUGF0aD4KKyAgICAgICAgICA8cm9vdCB0eXBlPSJjb21wb3NpdGUiIC8+CisgICAgICAgIDwvamF2YWRvY1BhdGg+CisgICAgICA8L3Jvb3RzPgorICAgIDwvbGlicmFyeT4KKyAgICA8bGlicmFyeT4KKyAgICAgIDxuYW1lIHZhbHVlPSJsb2c0am1vbml0b3IiIC8+CisgICAgICA8cm9vdHM+CisgICAgICAgIDxwcm9qZWN0UGF0aD4KKyAgICAgICAgICA8cm9vdCB0eXBlPSJjb21wb3NpdGUiIC8+CisgICAgICAgIDwvcHJvamVjdFBhdGg+CisgICAgICAgIDxzb3VyY2VQYXRoPgorICAgICAgICAgIDxyb290IHR5cGU9ImNvbXBvc2l0ZSIgLz4KKyAgICAgICAgPC9zb3VyY2VQYXRoPgorICAgICAgICA8Y2xhc3NQYXRoPgorICAgICAgICAgIDxyb290IHR5cGU9ImNvbXBvc2l0ZSI+CisgICAgICAgICAgICA8cm9vdCB0eXBlPSJzaW1wbGUiIHVybD0iamFyOi8vQzovUHJvZ3JhbS9JbnRlbGxpSi1JREVBLTMuMC41L2xpYi9sb2c0am1vbml0b3IuamFyIS8iIC8+CisgICAgICAgICAgPC9yb290PgorICAgICAgICA8L2NsYXNzUGF0aD4KKyAgICAgICAgPGV4Y2x1ZGVQYXRoPgorICAgICAgICAgIDxyb290IHR5cGU9ImNvbXBvc2l0ZSIgLz4KKyAgICAgICAgPC9leGNsdWRlUGF0aD4KKyAgICAgICAgPGphdmFkb2NQYXRoPgorICAgICAgICAgIDxyb290IHR5cGU9ImNvbXBvc2l0ZSIgLz4KKyAgICAgICAgPC9qYXZhZG9jUGF0aD4KKyAgICAgIDwvcm9vdHM+CisgICAgPC9saWJyYXJ5PgorICA8L2NvbXBvbmVudD4KKzwvYXBwbGljYXRpb24+CisKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9tb2R1bGVSb290TWFuYWdlci9jb252ZXJ0b3IzNC90ZXN0MS9hZnRlci9wcmouaW1sIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL21vZHVsZVJvb3RNYW5hZ2VyL2NvbnZlcnRvcjM0L3Rlc3QxL2FmdGVyL3Byai5pbWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTk3Mjg1OQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9tb2R1bGVSb290TWFuYWdlci9jb252ZXJ0b3IzNC90ZXN0MS9hZnRlci9wcmouaW1sCkBAIC0wLDAgKzEsMTMgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8bW9kdWxlIHZlcnNpb249IjQiIHJlbGF0aXZlUGF0aHM9InRydWUiPgorPGNvbXBvbmVudCBuYW1lPSJOZXdNb2R1bGVSb290TWFuYWdlciI+CisgIDxjb250ZW50IHVybD0iZmlsZTovLyRNT0RVTEVfRElSJCI+CisgICAgPHNvdXJjZUZvbGRlciBpc1Rlc3RTb3VyY2U9ImZhbHNlIiB1cmw9ImZpbGU6Ly8kTU9EVUxFX0RJUiQvc3JjIiAvPgorICA8L2NvbnRlbnQ+CisgIDxvcmRlckVudHJ5IHR5cGU9InNvdXJjZUZvbGRlciIgLz4KKyAgPG9yZGVyRW50cnkgdHlwZT0iamRrIiBqZGtOYW1lPSJqYXZhIHZlcnNpb24gJnF1b3Q7MS40LjImcXVvdDsiIC8+CisgIDxvdXRwdXQgdXJsPSJmaWxlOi8vJE1PRFVMRV9ESVIkL2NsYXNzZXMiIC8+CisgIDxvdXRwdXQtdGVzdCB1cmw9ImZpbGU6Ly8kTU9EVUxFX0RJUiQvY2xhc3NlcyIgLz4KKyAgPGV4Y2x1ZGUtb3V0cHV0IC8+Cis8L2NvbXBvbmVudD4KKzwvbW9kdWxlPgpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL21vZHVsZVJvb3RNYW5hZ2VyL2NvbnZlcnRvcjM0L3Rlc3QxL2FmdGVyL3Byai5pcHIgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvbW9kdWxlUm9vdE1hbmFnZXIvY29udmVydG9yMzQvdGVzdDEvYWZ0ZXIvcHJqLmlwcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNzU1ODg1Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL21vZHVsZVJvb3RNYW5hZ2VyL2NvbnZlcnRvcjM0L3Rlc3QxL2FmdGVyL3Byai5pcHIKQEAgLTAsMCArMSw5IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHByb2plY3QgdmVyc2lvbj0iNCIgcmVsYXRpdmVQYXRocz0idHJ1ZSI+CisgIDxjb21wb25lbnQgbmFtZT0iUHJvamVjdE1vZHVsZU1hbmFnZXIiPgorICAgIDxtb2R1bGVzPgorICAgICAgPG1vZHVsZSBmaWxlcGF0aD0iJFBST0pFQ1RfRElSJC9wcmouaW1sIiBmaWxldXJsPSJmaWxlOi8vJFBST0pFQ1RfRElSJC9wcmouaW1sIiAvPgorICAgIDwvbW9kdWxlcz4KKyAgPC9jb21wb25lbnQ+Cis8L3Byb2plY3Q+CisKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9tb2R1bGVSb290TWFuYWdlci9jb252ZXJ0b3IzNC90ZXN0MS9iZWZvcmUvcHJqLmlwciBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9tb2R1bGVSb290TWFuYWdlci9jb252ZXJ0b3IzNC90ZXN0MS9iZWZvcmUvcHJqLmlwcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45N2IxNjQxCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL21vZHVsZVJvb3RNYW5hZ2VyL2NvbnZlcnRvcjM0L3Rlc3QxL2JlZm9yZS9wcmouaXByCkBAIC0wLDAgKzEsMTA4IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHByb2plY3QgdmVyc2lvbj0iMyIgcmVsYXRpdmVQYXRocz0iZmFsc2UiPgorICA8Y29tcG9uZW50IG5hbWU9IlByb2plY3RSb290TWFuYWdlciIgdmVyc2lvbj0iMiI+CisgICAgPGpkayBuYW1lPSJqYXZhIHZlcnNpb24gJnF1b3Q7MS40LjImcXVvdDsiIC8+CisgICAgPHByb2plY3RQYXRoPgorICAgICAgPHJvb3QgdHlwZT0iY29tcG9zaXRlIj4KKyAgICAgICAgPHJvb3QgdHlwZT0ic2ltcGxlIiB1cmw9ImZpbGU6Ly8kUFJPSkVDVF9ESVIkIiAvPgorICAgICAgPC9yb290PgorICAgIDwvcHJvamVjdFBhdGg+CisgICAgPHNvdXJjZVBhdGg+CisgICAgICA8cm9vdCB0eXBlPSJjb21wb3NpdGUiPgorICAgICAgICA8cm9vdCB0eXBlPSJzaW1wbGUiIHVybD0iZmlsZTovLyRQUk9KRUNUX0RJUiQvc3JjIiAvPgorICAgICAgICA8cm9vdCB0eXBlPSJqZGsiIHJvb3RUeXBlPSJzb3VyY2VQYXRoIiBuYW1lPSJqYXZhIHZlcnNpb24gJnF1b3Q7MS40LjImcXVvdDsiIC8+CisgICAgICA8L3Jvb3Q+CisgICAgPC9zb3VyY2VQYXRoPgorICAgIDxjbGFzc1BhdGg+CisgICAgICA8cm9vdCB0eXBlPSJjb21wb3NpdGUiPgorICAgICAgICA8cm9vdCB0eXBlPSJvdXRwdXQiIC8+CisgICAgICAgIDxyb290IHR5cGU9ImpkayIgcm9vdFR5cGU9ImNsYXNzUGF0aCIgbmFtZT0iamF2YSB2ZXJzaW9uICZxdW90OzEuNC4yJnF1b3Q7IiAvPgorICAgICAgPC9yb290PgorICAgIDwvY2xhc3NQYXRoPgorICAgIDxleGNsdWRlUGF0aD4KKyAgICAgIDxyb290IHR5cGU9ImNvbXBvc2l0ZSI+CisgICAgICAgIDxyb290IHR5cGU9ImV4Y2x1ZGVkT3V0cHV0IiAvPgorICAgICAgPC9yb290PgorICAgIDwvZXhjbHVkZVBhdGg+CisgICAgPGphdmFkb2NQYXRoPgorICAgICAgPHJvb3QgdHlwZT0iY29tcG9zaXRlIj4KKyAgICAgICAgPHJvb3QgdHlwZT0iamRrIiByb290VHlwZT0iamF2YWRvY1BhdGgiIG5hbWU9ImphdmEgdmVyc2lvbiAmcXVvdDsxLjQuMiZxdW90OyIgLz4KKyAgICAgIDwvcm9vdD4KKyAgICA8L2phdmFkb2NQYXRoPgorICAgIDxhc3NlcnRfa2V5d29yZCBlbmFibGVkPSJubyIgLz4KKyAgICA8ZXhjbHVkZV9vdXRwdXQgZW5hYmxlZD0ieWVzIiAvPgorICA8L2NvbXBvbmVudD4KKyAgPGNvbXBvbmVudCBuYW1lPSJDb21waWxlckNvbmZpZ3VyYXRpb24iPgorICAgIDxvcHRpb24gbmFtZT0iREVGQVVMVF9DT01QSUxFUiIgdmFsdWU9IkphdmFjIiAvPgorICAgIDxvcHRpb24gbmFtZT0iU1lOQ0hST05JWkVfT1VUUFVUX0RJUkVDVE9SWSIgdmFsdWU9ImZhbHNlIiAvPgorICAgIDxvcHRpb24gbmFtZT0iREVGQVVMVF9PVVRQVVRfUEFUSCIgdmFsdWU9IiRQUk9KRUNUX0RJUiQvY2xhc3NlcyIgLz4KKyAgICA8b3B0aW9uIG5hbWU9Ik9VVFBVVF9NT0RFIiB2YWx1ZT0ic2luZ2xlIiAvPgorICAgIDxyZXNvdXJjZUV4dGVuc2lvbnM+CisgICAgICA8ZW50cnkgbmFtZT0iLitcLihwcm9wZXJ0aWVzfHhtbHxodG1sKSIgLz4KKyAgICAgIDxlbnRyeSBuYW1lPSIuK1wuKGdpZnxwbmd8anBlZ3xqcGcpIiAvPgorICAgIDwvcmVzb3VyY2VFeHRlbnNpb25zPgorICA8L2NvbXBvbmVudD4KKyAgPGNvbXBvbmVudCBuYW1lPSJKYXZhY1NldHRpbmdzIj4KKyAgICA8b3B0aW9uIG5hbWU9IkRFQlVHR0lOR19JTkZPIiB2YWx1ZT0idHJ1ZSIgLz4KKyAgICA8b3B0aW9uIG5hbWU9IkdFTkVSQVRFX05PX1dBUk5JTkdTIiB2YWx1ZT0iZmFsc2UiIC8+CisgICAgPG9wdGlvbiBuYW1lPSJERVBSRUNBVElPTiIgdmFsdWU9InRydWUiIC8+CisgICAgPG9wdGlvbiBuYW1lPSJBRERJVElPTkFMX09QVElPTlNfU1RSSU5HIiB2YWx1ZT0iIiAvPgorICAgIDxvcHRpb24gbmFtZT0iTUFYSU1VTV9IRUFQX1NJWkUiIHZhbHVlPSIxMjgiIC8+CisgIDwvY29tcG9uZW50PgorICA8Y29tcG9uZW50IG5hbWU9Ikppa2VzU2V0dGluZ3MiPgorICAgIDxvcHRpb24gbmFtZT0iSklLRVNfUEFUSCIgdmFsdWU9IiIgLz4KKyAgICA8b3B0aW9uIG5hbWU9IkRFQlVHR0lOR19JTkZPIiB2YWx1ZT0idHJ1ZSIgLz4KKyAgICA8b3B0aW9uIG5hbWU9IkRFUFJFQ0FUSU9OIiB2YWx1ZT0idHJ1ZSIgLz4KKyAgICA8b3B0aW9uIG5hbWU9IkdFTkVSQVRFX05PX1dBUk5JTkdTIiB2YWx1ZT0iZmFsc2UiIC8+CisgICAgPG9wdGlvbiBuYW1lPSJHRU5FUkFURV9NQUtFX0ZJTEVfREVQRU5ERU5DSUVTIiB2YWx1ZT0iZmFsc2UiIC8+CisgICAgPG9wdGlvbiBuYW1lPSJET19GVUxMX0RFUEVOREVOQ0VfQ0hFQ0siIHZhbHVlPSJmYWxzZSIgLz4KKyAgICA8b3B0aW9uIG5hbWU9IklTX0VNQUNTX0VSUk9SU19NT0RFIiB2YWx1ZT0idHJ1ZSIgLz4KKyAgICA8b3B0aW9uIG5hbWU9IkFERElUSU9OQUxfT1BUSU9OU19TVFJJTkciIHZhbHVlPSIiIC8+CisgIDwvY29tcG9uZW50PgorICA8Y29tcG9uZW50IG5hbWU9IkFudENvbmZpZ3VyYXRpb24iPgorICAgIDxvcHRpb24gbmFtZT0iSVNfQVVUT1NDUk9MTF9UT19TT1VSQ0UiIHZhbHVlPSJmYWxzZSIgLz4KKyAgICA8b3B0aW9uIG5hbWU9IkZJTFRFUl9UQVJHRVRTIiB2YWx1ZT0iZmFsc2UiIC8+CisgIDwvY29tcG9uZW50PgorICA8Y29tcG9uZW50IG5hbWU9IkphdmFkb2NHZW5lcmF0aW9uTWFuYWdlciI+CisgICAgPG9wdGlvbiBuYW1lPSJPVVRQVVRfRElSRUNUT1JZIiAvPgorICAgIDxvcHRpb24gbmFtZT0iT1BUSU9OX1NDT1BFIiB2YWx1ZT0icHJvdGVjdGVkIiAvPgorICAgIDxvcHRpb24gbmFtZT0iT1BUSU9OX0hJRVJBUkNIWSIgdmFsdWU9InRydWUiIC8+CisgICAgPG9wdGlvbiBuYW1lPSJPUFRJT05fTkFWSUdBVE9SIiB2YWx1ZT0idHJ1ZSIgLz4KKyAgICA8b3B0aW9uIG5hbWU9Ik9QVElPTl9JTkRFWCIgdmFsdWU9InRydWUiIC8+CisgICAgPG9wdGlvbiBuYW1lPSJPUFRJT05fU0VQQVJBVEVfSU5ERVgiIHZhbHVlPSJ0cnVlIiAvPgorICAgIDxvcHRpb24gbmFtZT0iT1BUSU9OX0RPQ1VNRU5UX1RBR19VU0UiIHZhbHVlPSJmYWxzZSIgLz4KKyAgICA8b3B0aW9uIG5hbWU9Ik9QVElPTl9ET0NVTUVOVF9UQUdfQVVUSE9SIiB2YWx1ZT0iZmFsc2UiIC8+CisgICAgPG9wdGlvbiBuYW1lPSJPUFRJT05fRE9DVU1FTlRfVEFHX1ZFUlNJT04iIHZhbHVlPSJmYWxzZSIgLz4KKyAgICA8b3B0aW9uIG5hbWU9Ik9QVElPTl9ET0NVTUVOVF9UQUdfREVQUkVDQVRFRCIgdmFsdWU9InRydWUiIC8+CisgICAgPG9wdGlvbiBuYW1lPSJPUFRJT05fREVQUkVDQVRFRF9MSVNUIiB2YWx1ZT0idHJ1ZSIgLz4KKyAgICA8b3B0aW9uIG5hbWU9Ik9USEVSX09QVElPTlMiIHZhbHVlPSIiIC8+CisgICAgPG9wdGlvbiBuYW1lPSJIRUFQX1NJWkUiIC8+CisgICAgPG9wdGlvbiBuYW1lPSJPUEVOX0lOX0JST1dTRVIiIHZhbHVlPSJ0cnVlIiAvPgorICA8L2NvbXBvbmVudD4KKyAgPGNvbXBvbmVudCBuYW1lPSJXZWJNYW5hZ2VyIj4KKyAgICA8b3B0aW9uIGVuYWJsZWQ9ImZhbHNlIiAvPgorICA8L2NvbXBvbmVudD4KKyAgPGNvbXBvbmVudCBuYW1lPSJXZWJSb290Q29udGFpbmVyIiAvPgorICA8Y29tcG9uZW50IG5hbWU9IkVqYk1hbmFnZXIiIGVuYWJsZWQ9ImZhbHNlIiAvPgorICA8Y29tcG9uZW50IG5hbWU9IkpVbml0UHJvamVjdFNldHRpbmdzIj4KKyAgICA8b3B0aW9uIG5hbWU9IlRFU1RfUlVOTkVSIiB2YWx1ZT0iVUkiIC8+CisgIDwvY29tcG9uZW50PgorICA8Y29tcG9uZW50IG5hbWU9IkVudHJ5UG9pbnRzTWFuYWdlciI+CisgICAgPGVudHJ5X3BvaW50cyAvPgorICA8L2NvbXBvbmVudD4KKyAgPGNvbXBvbmVudCBuYW1lPSJFamJBY3Rpb25zQ29uZmlndXJhdGlvbiI+CisgICAgPG9wdGlvbiBuYW1lPSJORVdfTUVTU0FHRV9CRUFOX0xBU1RfUEFDS0FHRSIgdmFsdWU9IiIgLz4KKyAgICA8b3B0aW9uIG5hbWU9Ik5FV19FTlRJVFlfQkVBTl9MQVNUX1BBQ0tBR0UiIHZhbHVlPSIiIC8+CisgICAgPG9wdGlvbiBuYW1lPSJORVdfU0VTU0lPTl9CRUFOX0xBU1RfUEFDS0FHRSIgdmFsdWU9IiIgLz4KKyAgPC9jb21wb25lbnQ+CisgIDxjb21wb25lbnQgbmFtZT0iQ29kZVN0eWxlTWFuYWdlciI+CisgICAgPG9wdGlvbiBuYW1lPSJVU0VfREVGQVVMVF9DT0RFX1NUWUxFX1NDSEVNRSIgdmFsdWU9InRydWUiIC8+CisgICAgPG9wdGlvbiBuYW1lPSJDT0RFX1NUWUxFX1NDSEVNRSIgdmFsdWU9IiIgLz4KKyAgPC9jb21wb25lbnQ+CisgIDxjb21wb25lbnQgbmFtZT0iRXhwb3J0VG9IVE1MU2V0dGluZ3MiPgorICAgIDxvcHRpb24gbmFtZT0iUFJJTlRfTElORV9OVU1CRVJTIiB2YWx1ZT0iZmFsc2UiIC8+CisgICAgPG9wdGlvbiBuYW1lPSJPUEVOX0lOX0JST1dTRVIiIHZhbHVlPSJmYWxzZSIgLz4KKyAgICA8b3B0aW9uIG5hbWU9Ik9VVFBVVF9ESVJFQ1RPUlkiIC8+CisgIDwvY29tcG9uZW50PgorPC9wcm9qZWN0PgorCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvbW9kdWxlUm9vdE1hbmFnZXIvY29udmVydG9yMzQvdGVzdDIvYWZ0ZXIvcHJqMi5pbWwgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvbW9kdWxlUm9vdE1hbmFnZXIvY29udmVydG9yMzQvdGVzdDIvYWZ0ZXIvcHJqMi5pbWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjcxZWJlNAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9tb2R1bGVSb290TWFuYWdlci9jb252ZXJ0b3IzNC90ZXN0Mi9hZnRlci9wcmoyLmltbApAQCAtMCwwICsxLDIwIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPG1vZHVsZSB2ZXJzaW9uPSI0IiByZWxhdGl2ZVBhdGhzPSJ0cnVlIj4KKzxjb21wb25lbnQgbmFtZT0iTmV3TW9kdWxlUm9vdE1hbmFnZXIiPgorICA8Y29udGVudCB1cmw9ImZpbGU6Ly8kTU9EVUxFX0RJUiQiPgorICAgIDxzb3VyY2VGb2xkZXIgaXNUZXN0U291cmNlPSJmYWxzZSIgdXJsPSJmaWxlOi8vJE1PRFVMRV9ESVIkL3NyYyIgLz4KKyAgPC9jb250ZW50PgorICA8b3JkZXJFbnRyeSB0eXBlPSJtb2R1bGUtbGlicmFyeSI+CisgICAgPGxpYnJhcnk+CisgICAgICA8Q0xBU1NFUz4KKyAgICAgICAgPHJvb3QgdXJsPSJqYXI6Ly8kTU9EVUxFX0RJUiQvb3BlbmFwaS5qYXIhLyIgLz4KKyAgICAgIDwvQ0xBU1NFUz4KKyAgICA8L2xpYnJhcnk+CisgIDwvb3JkZXJFbnRyeT4KKyAgPG9yZGVyRW50cnkgdHlwZT0iamRrIiBqZGtOYW1lPSJqYXZhIHZlcnNpb24gJnF1b3Q7MS40LjImcXVvdDsiIC8+CisgIDxvcmRlckVudHJ5IHR5cGU9InNvdXJjZUZvbGRlciIgLz4KKyAgPG91dHB1dCB1cmw9ImZpbGU6Ly8kTU9EVUxFX0RJUiQvY2xhc3NlcyIgLz4KKyAgPG91dHB1dC10ZXN0IHVybD0iZmlsZTovLyRNT0RVTEVfRElSJC9jbGFzc2VzIiAvPgorICA8ZXhjbHVkZS1vdXRwdXQgLz4KKzwvY29tcG9uZW50PgorPC9tb2R1bGU+CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvbW9kdWxlUm9vdE1hbmFnZXIvY29udmVydG9yMzQvdGVzdDIvYWZ0ZXIvcHJqMi5pcHIgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvbW9kdWxlUm9vdE1hbmFnZXIvY29udmVydG9yMzQvdGVzdDIvYWZ0ZXIvcHJqMi5pcHIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTdkNTcyYgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9tb2R1bGVSb290TWFuYWdlci9jb252ZXJ0b3IzNC90ZXN0Mi9hZnRlci9wcmoyLmlwcgpAQCAtMCwwICsxLDkgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8cHJvamVjdCB2ZXJzaW9uPSI0IiByZWxhdGl2ZVBhdGhzPSJ0cnVlIj4KKyAgPGNvbXBvbmVudCBuYW1lPSJQcm9qZWN0TW9kdWxlTWFuYWdlciI+CisgICAgPG1vZHVsZXM+CisgICAgICA8bW9kdWxlIGZpbGVwYXRoPSIkUFJPSkVDVF9ESVIkL3ByajIuaW1sIiBmaWxldXJsPSJmaWxlOi8vJFBST0pFQ1RfRElSJC9wcmoyLmltbCIvPgorICAgIDwvbW9kdWxlcz4KKyAgPC9jb21wb25lbnQ+Cis8L3Byb2plY3Q+CisKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9tb2R1bGVSb290TWFuYWdlci9jb252ZXJ0b3IzNC90ZXN0Mi9iZWZvcmUvcHJqMi5pcHIgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvbW9kdWxlUm9vdE1hbmFnZXIvY29udmVydG9yMzQvdGVzdDIvYmVmb3JlL3ByajIuaXByCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNkOTBmMWUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvbW9kdWxlUm9vdE1hbmFnZXIvY29udmVydG9yMzQvdGVzdDIvYmVmb3JlL3ByajIuaXByCkBAIC0wLDAgKzEsMTA5IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHByb2plY3QgdmVyc2lvbj0iMyIgcmVsYXRpdmVQYXRocz0iZmFsc2UiPgorICA8Y29tcG9uZW50IG5hbWU9IlByb2plY3RSb290TWFuYWdlciIgdmVyc2lvbj0iMiI+CisgICAgPGpkayBuYW1lPSJqYXZhIHZlcnNpb24gJnF1b3Q7MS40LjImcXVvdDsiIC8+CisgICAgPHByb2plY3RQYXRoPgorICAgICAgPHJvb3QgdHlwZT0iY29tcG9zaXRlIj4KKyAgICAgICAgPHJvb3QgdHlwZT0ic2ltcGxlIiB1cmw9ImZpbGU6Ly8kUFJPSkVDVF9ESVIkIiAvPgorICAgICAgPC9yb290PgorICAgIDwvcHJvamVjdFBhdGg+CisgICAgPHNvdXJjZVBhdGg+CisgICAgICA8cm9vdCB0eXBlPSJjb21wb3NpdGUiPgorICAgICAgICA8cm9vdCB0eXBlPSJzaW1wbGUiIHVybD0iZmlsZTovLyRQUk9KRUNUX0RJUiQvc3JjIiAvPgorICAgICAgICA8cm9vdCB0eXBlPSJqZGsiIHJvb3RUeXBlPSJzb3VyY2VQYXRoIiBuYW1lPSJqYXZhIHZlcnNpb24gJnF1b3Q7MS40LjImcXVvdDsiIC8+CisgICAgICA8L3Jvb3Q+CisgICAgPC9zb3VyY2VQYXRoPgorICAgIDxjbGFzc1BhdGg+CisgICAgICA8cm9vdCB0eXBlPSJjb21wb3NpdGUiPgorICAgICAgICA8cm9vdCB0eXBlPSJzaW1wbGUiIHVybD0iamFyOi8vJFBST0pFQ1RfRElSJC9vcGVuYXBpLmphciEvIiAvPgorICAgICAgICA8cm9vdCB0eXBlPSJqZGsiIHJvb3RUeXBlPSJjbGFzc1BhdGgiIG5hbWU9ImphdmEgdmVyc2lvbiAmcXVvdDsxLjQuMiZxdW90OyIgLz4KKyAgICAgICAgPHJvb3QgdHlwZT0ib3V0cHV0IiAvPgorICAgICAgPC9yb290PgorICAgIDwvY2xhc3NQYXRoPgorICAgIDxleGNsdWRlUGF0aD4KKyAgICAgIDxyb290IHR5cGU9ImNvbXBvc2l0ZSI+CisgICAgICAgIDxyb290IHR5cGU9ImV4Y2x1ZGVkT3V0cHV0IiAvPgorICAgICAgPC9yb290PgorICAgIDwvZXhjbHVkZVBhdGg+CisgICAgPGphdmFkb2NQYXRoPgorICAgICAgPHJvb3QgdHlwZT0iY29tcG9zaXRlIj4KKyAgICAgICAgPHJvb3QgdHlwZT0iamRrIiByb290VHlwZT0iamF2YWRvY1BhdGgiIG5hbWU9ImphdmEgdmVyc2lvbiAmcXVvdDsxLjQuMiZxdW90OyIgLz4KKyAgICAgIDwvcm9vdD4KKyAgICA8L2phdmFkb2NQYXRoPgorICAgIDxhc3NlcnRfa2V5d29yZCBlbmFibGVkPSJubyIgLz4KKyAgICA8ZXhjbHVkZV9vdXRwdXQgZW5hYmxlZD0ieWVzIiAvPgorICA8L2NvbXBvbmVudD4KKyAgPGNvbXBvbmVudCBuYW1lPSJDb21waWxlckNvbmZpZ3VyYXRpb24iPgorICAgIDxvcHRpb24gbmFtZT0iREVGQVVMVF9DT01QSUxFUiIgdmFsdWU9IkphdmFjIiAvPgorICAgIDxvcHRpb24gbmFtZT0iU1lOQ0hST05JWkVfT1VUUFVUX0RJUkVDVE9SWSIgdmFsdWU9ImZhbHNlIiAvPgorICAgIDxvcHRpb24gbmFtZT0iREVGQVVMVF9PVVRQVVRfUEFUSCIgdmFsdWU9IiRQUk9KRUNUX0RJUiQvY2xhc3NlcyIgLz4KKyAgICA8b3B0aW9uIG5hbWU9Ik9VVFBVVF9NT0RFIiB2YWx1ZT0ic2luZ2xlIiAvPgorICAgIDxyZXNvdXJjZUV4dGVuc2lvbnM+CisgICAgICA8ZW50cnkgbmFtZT0iLitcLihwcm9wZXJ0aWVzfHhtbHxodG1sKSIgLz4KKyAgICAgIDxlbnRyeSBuYW1lPSIuK1wuKGdpZnxwbmd8anBlZ3xqcGcpIiAvPgorICAgIDwvcmVzb3VyY2VFeHRlbnNpb25zPgorICA8L2NvbXBvbmVudD4KKyAgPGNvbXBvbmVudCBuYW1lPSJKYXZhY1NldHRpbmdzIj4KKyAgICA8b3B0aW9uIG5hbWU9IkRFQlVHR0lOR19JTkZPIiB2YWx1ZT0idHJ1ZSIgLz4KKyAgICA8b3B0aW9uIG5hbWU9IkdFTkVSQVRFX05PX1dBUk5JTkdTIiB2YWx1ZT0iZmFsc2UiIC8+CisgICAgPG9wdGlvbiBuYW1lPSJERVBSRUNBVElPTiIgdmFsdWU9InRydWUiIC8+CisgICAgPG9wdGlvbiBuYW1lPSJBRERJVElPTkFMX09QVElPTlNfU1RSSU5HIiB2YWx1ZT0iIiAvPgorICAgIDxvcHRpb24gbmFtZT0iTUFYSU1VTV9IRUFQX1NJWkUiIHZhbHVlPSIxMjgiIC8+CisgIDwvY29tcG9uZW50PgorICA8Y29tcG9uZW50IG5hbWU9Ikppa2VzU2V0dGluZ3MiPgorICAgIDxvcHRpb24gbmFtZT0iSklLRVNfUEFUSCIgdmFsdWU9IiIgLz4KKyAgICA8b3B0aW9uIG5hbWU9IkRFQlVHR0lOR19JTkZPIiB2YWx1ZT0idHJ1ZSIgLz4KKyAgICA8b3B0aW9uIG5hbWU9IkRFUFJFQ0FUSU9OIiB2YWx1ZT0idHJ1ZSIgLz4KKyAgICA8b3B0aW9uIG5hbWU9IkdFTkVSQVRFX05PX1dBUk5JTkdTIiB2YWx1ZT0iZmFsc2UiIC8+CisgICAgPG9wdGlvbiBuYW1lPSJHRU5FUkFURV9NQUtFX0ZJTEVfREVQRU5ERU5DSUVTIiB2YWx1ZT0iZmFsc2UiIC8+CisgICAgPG9wdGlvbiBuYW1lPSJET19GVUxMX0RFUEVOREVOQ0VfQ0hFQ0siIHZhbHVlPSJmYWxzZSIgLz4KKyAgICA8b3B0aW9uIG5hbWU9IklTX0VNQUNTX0VSUk9SU19NT0RFIiB2YWx1ZT0idHJ1ZSIgLz4KKyAgICA8b3B0aW9uIG5hbWU9IkFERElUSU9OQUxfT1BUSU9OU19TVFJJTkciIHZhbHVlPSIiIC8+CisgIDwvY29tcG9uZW50PgorICA8Y29tcG9uZW50IG5hbWU9IkFudENvbmZpZ3VyYXRpb24iPgorICAgIDxvcHRpb24gbmFtZT0iSVNfQVVUT1NDUk9MTF9UT19TT1VSQ0UiIHZhbHVlPSJmYWxzZSIgLz4KKyAgICA8b3B0aW9uIG5hbWU9IkZJTFRFUl9UQVJHRVRTIiB2YWx1ZT0iZmFsc2UiIC8+CisgIDwvY29tcG9uZW50PgorICA8Y29tcG9uZW50IG5hbWU9IkphdmFkb2NHZW5lcmF0aW9uTWFuYWdlciI+CisgICAgPG9wdGlvbiBuYW1lPSJPVVRQVVRfRElSRUNUT1JZIiAvPgorICAgIDxvcHRpb24gbmFtZT0iT1BUSU9OX1NDT1BFIiB2YWx1ZT0icHJvdGVjdGVkIiAvPgorICAgIDxvcHRpb24gbmFtZT0iT1BUSU9OX0hJRVJBUkNIWSIgdmFsdWU9InRydWUiIC8+CisgICAgPG9wdGlvbiBuYW1lPSJPUFRJT05fTkFWSUdBVE9SIiB2YWx1ZT0idHJ1ZSIgLz4KKyAgICA8b3B0aW9uIG5hbWU9Ik9QVElPTl9JTkRFWCIgdmFsdWU9InRydWUiIC8+CisgICAgPG9wdGlvbiBuYW1lPSJPUFRJT05fU0VQQVJBVEVfSU5ERVgiIHZhbHVlPSJ0cnVlIiAvPgorICAgIDxvcHRpb24gbmFtZT0iT1BUSU9OX0RPQ1VNRU5UX1RBR19VU0UiIHZhbHVlPSJmYWxzZSIgLz4KKyAgICA8b3B0aW9uIG5hbWU9Ik9QVElPTl9ET0NVTUVOVF9UQUdfQVVUSE9SIiB2YWx1ZT0iZmFsc2UiIC8+CisgICAgPG9wdGlvbiBuYW1lPSJPUFRJT05fRE9DVU1FTlRfVEFHX1ZFUlNJT04iIHZhbHVlPSJmYWxzZSIgLz4KKyAgICA8b3B0aW9uIG5hbWU9Ik9QVElPTl9ET0NVTUVOVF9UQUdfREVQUkVDQVRFRCIgdmFsdWU9InRydWUiIC8+CisgICAgPG9wdGlvbiBuYW1lPSJPUFRJT05fREVQUkVDQVRFRF9MSVNUIiB2YWx1ZT0idHJ1ZSIgLz4KKyAgICA8b3B0aW9uIG5hbWU9Ik9USEVSX09QVElPTlMiIHZhbHVlPSIiIC8+CisgICAgPG9wdGlvbiBuYW1lPSJIRUFQX1NJWkUiIC8+CisgICAgPG9wdGlvbiBuYW1lPSJPUEVOX0lOX0JST1dTRVIiIHZhbHVlPSJ0cnVlIiAvPgorICA8L2NvbXBvbmVudD4KKyAgPGNvbXBvbmVudCBuYW1lPSJXZWJNYW5hZ2VyIj4KKyAgICA8b3B0aW9uIGVuYWJsZWQ9ImZhbHNlIiAvPgorICA8L2NvbXBvbmVudD4KKyAgPGNvbXBvbmVudCBuYW1lPSJXZWJSb290Q29udGFpbmVyIiAvPgorICA8Y29tcG9uZW50IG5hbWU9IkVqYk1hbmFnZXIiIGVuYWJsZWQ9ImZhbHNlIiAvPgorICA8Y29tcG9uZW50IG5hbWU9IkpVbml0UHJvamVjdFNldHRpbmdzIj4KKyAgICA8b3B0aW9uIG5hbWU9IlRFU1RfUlVOTkVSIiB2YWx1ZT0iVUkiIC8+CisgIDwvY29tcG9uZW50PgorICA8Y29tcG9uZW50IG5hbWU9IkVudHJ5UG9pbnRzTWFuYWdlciI+CisgICAgPGVudHJ5X3BvaW50cyAvPgorICA8L2NvbXBvbmVudD4KKyAgPGNvbXBvbmVudCBuYW1lPSJFamJBY3Rpb25zQ29uZmlndXJhdGlvbiI+CisgICAgPG9wdGlvbiBuYW1lPSJORVdfTUVTU0FHRV9CRUFOX0xBU1RfUEFDS0FHRSIgdmFsdWU9IiIgLz4KKyAgICA8b3B0aW9uIG5hbWU9Ik5FV19FTlRJVFlfQkVBTl9MQVNUX1BBQ0tBR0UiIHZhbHVlPSIiIC8+CisgICAgPG9wdGlvbiBuYW1lPSJORVdfU0VTU0lPTl9CRUFOX0xBU1RfUEFDS0FHRSIgdmFsdWU9IiIgLz4KKyAgPC9jb21wb25lbnQ+CisgIDxjb21wb25lbnQgbmFtZT0iQ29kZVN0eWxlTWFuYWdlciI+CisgICAgPG9wdGlvbiBuYW1lPSJVU0VfREVGQVVMVF9DT0RFX1NUWUxFX1NDSEVNRSIgdmFsdWU9InRydWUiIC8+CisgICAgPG9wdGlvbiBuYW1lPSJDT0RFX1NUWUxFX1NDSEVNRSIgdmFsdWU9IiIgLz4KKyAgPC9jb21wb25lbnQ+CisgIDxjb21wb25lbnQgbmFtZT0iRXhwb3J0VG9IVE1MU2V0dGluZ3MiPgorICAgIDxvcHRpb24gbmFtZT0iUFJJTlRfTElORV9OVU1CRVJTIiB2YWx1ZT0iZmFsc2UiIC8+CisgICAgPG9wdGlvbiBuYW1lPSJPUEVOX0lOX0JST1dTRVIiIHZhbHVlPSJmYWxzZSIgLz4KKyAgICA8b3B0aW9uIG5hbWU9Ik9VVFBVVF9ESVJFQ1RPUlkiIC8+CisgIDwvY29tcG9uZW50PgorPC9wcm9qZWN0PgorCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvbW9kdWxlUm9vdE1hbmFnZXIvY29udmVydG9yMzQvdGVzdDMvYWZ0ZXIvcHJqMy5pbWwgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvbW9kdWxlUm9vdE1hbmFnZXIvY29udmVydG9yMzQvdGVzdDMvYWZ0ZXIvcHJqMy5pbWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDc1ODZjYgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9tb2R1bGVSb290TWFuYWdlci9jb252ZXJ0b3IzNC90ZXN0My9hZnRlci9wcmozLmltbApAQCAtMCwwICsxLDE5IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPG1vZHVsZSB2ZXJzaW9uPSI0IiByZWxhdGl2ZVBhdGhzPSJ0cnVlIj4KKzxjb21wb25lbnQgbmFtZT0iTmV3TW9kdWxlUm9vdE1hbmFnZXIiPgorICA8Y29udGVudCB1cmw9ImZpbGU6Ly8kTU9EVUxFX0RJUiQvcDEiPgorICAgIDxzb3VyY2VGb2xkZXIgaXNUZXN0U291cmNlPSJmYWxzZSIgdXJsPSJmaWxlOi8vJE1PRFVMRV9ESVIkL3AxL3NyYyIgLz4KKyAgICA8ZXhjbHVkZUZvbGRlciB1cmw9ImZpbGU6Ly8kTU9EVUxFX0RJUiQvcDEvZXhjbHVkZWQxIiAvPgorICA8L2NvbnRlbnQ+CisgIDxjb250ZW50IHVybD0iZmlsZTovLyRNT0RVTEVfRElSJC9wMiI+CisgICAgPHNvdXJjZUZvbGRlciBpc1Rlc3RTb3VyY2U9ImZhbHNlIiB1cmw9ImZpbGU6Ly8kTU9EVUxFX0RJUiQvcDIvc3JjIiAvPgorICAgIDxleGNsdWRlRm9sZGVyIHVybD0iZmlsZTovLyRNT0RVTEVfRElSJC9wMi9zcmMvZXhjbHVkZWQyIiAvPgorICA8L2NvbnRlbnQ+CisgIDxvcmRlckVudHJ5IHR5cGU9InNvdXJjZUZvbGRlciIgLz4KKyAgPG9yZGVyRW50cnkgdHlwZT0iamRrIiBqZGtOYW1lPSJqYXZhIHZlcnNpb24gJnF1b3Q7MS40LjImcXVvdDsiIC8+CisgIDxvcmRlckVudHJ5IHR5cGU9ImxpYnJhcnkiIG5hbWU9IlhZWiIgbGV2ZWw9ImFwcGxpY2F0aW9uIiAvPgorICA8b3V0cHV0IHVybD0iZmlsZTovLyRNT0RVTEVfRElSJC9jbGFzc2VzIiAvPgorICA8b3V0cHV0LXRlc3QgdXJsPSJmaWxlOi8vJE1PRFVMRV9ESVIkL2NsYXNzZXMiIC8+CisgIDxleGNsdWRlLW91dHB1dCAvPgorPC9jb21wb25lbnQ+Cis8L21vZHVsZT4KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9tb2R1bGVSb290TWFuYWdlci9jb252ZXJ0b3IzNC90ZXN0My9hZnRlci9wcmozLmlwciBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9tb2R1bGVSb290TWFuYWdlci9jb252ZXJ0b3IzNC90ZXN0My9hZnRlci9wcmozLmlwcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNjY2YWY0Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL21vZHVsZVJvb3RNYW5hZ2VyL2NvbnZlcnRvcjM0L3Rlc3QzL2FmdGVyL3ByajMuaXByCkBAIC0wLDAgKzEsOCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxwcm9qZWN0IHZlcnNpb249IjQiIHJlbGF0aXZlUGF0aHM9InRydWUiPgorICA8Y29tcG9uZW50IG5hbWU9IlByb2plY3RNb2R1bGVNYW5hZ2VyIj4KKyAgICA8bW9kdWxlcz4KKyAgICAgIDxtb2R1bGUgZmlsZXBhdGg9IiRQUk9KRUNUX0RJUiQvcHJqMy5pbWwiIGZpbGV1cmw9ImZpbGU6Ly8kUFJPSkVDVF9ESVIkL3ByajMuaW1sIiAvPgorICAgIDwvbW9kdWxlcz4KKyAgPC9jb21wb25lbnQ+Cis8L3Byb2plY3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL21vZHVsZVJvb3RNYW5hZ2VyL2NvbnZlcnRvcjM0L3Rlc3QzL2JlZm9yZS9wcmozLmlwciBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9tb2R1bGVSb290TWFuYWdlci9jb252ZXJ0b3IzNC90ZXN0My9iZWZvcmUvcHJqMy5pcHIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGY0ZjgwMAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9tb2R1bGVSb290TWFuYWdlci9jb252ZXJ0b3IzNC90ZXN0My9iZWZvcmUvcHJqMy5pcHIKQEAgLTAsMCArMSwxMTUgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8cHJvamVjdCB2ZXJzaW9uPSIzIiByZWxhdGl2ZVBhdGhzPSJ0cnVlIj4KKyAgPGNvbXBvbmVudCBuYW1lPSJQcm9qZWN0Um9vdE1hbmFnZXIiIHZlcnNpb249IjIiPgorICAgIDxqZGsgbmFtZT0iamF2YSB2ZXJzaW9uICZxdW90OzEuNC4yJnF1b3Q7IiAvPgorICAgIDxwcm9qZWN0UGF0aD4KKyAgICAgIDxyb290IHR5cGU9ImNvbXBvc2l0ZSI+CisgICAgICAgIDxyb290IHR5cGU9InNpbXBsZSIgdXJsPSJmaWxlOi8vJFBST0pFQ1RfRElSJC9wMSIgLz4KKyAgICAgICAgPHJvb3QgdHlwZT0ic2ltcGxlIiB1cmw9ImZpbGU6Ly8kUFJPSkVDVF9ESVIkL3AyIiAvPgorICAgICAgPC9yb290PgorICAgIDwvcHJvamVjdFBhdGg+CisgICAgPHNvdXJjZVBhdGg+CisgICAgICA8cm9vdCB0eXBlPSJjb21wb3NpdGUiPgorICAgICAgICA8cm9vdCB0eXBlPSJzaW1wbGUiIHVybD0iZmlsZTovLyRQUk9KRUNUX0RJUiQvcDEvc3JjIiAvPgorICAgICAgICA8cm9vdCB0eXBlPSJqZGsiIHJvb3RUeXBlPSJzb3VyY2VQYXRoIiBuYW1lPSJqYXZhIHZlcnNpb24gJnF1b3Q7MS40LjImcXVvdDsiIC8+CisgICAgICAgIDxyb290IHR5cGU9InNpbXBsZSIgdXJsPSJmaWxlOi8vJFBST0pFQ1RfRElSJC9wMi9zcmMiIC8+CisgICAgICAgIDxyb290IHR5cGU9ImxpYnJhcnkiIHJvb3RUeXBlPSJzb3VyY2VQYXRoIiBuYW1lPSJYWVoiIC8+CisgICAgICA8L3Jvb3Q+CisgICAgPC9zb3VyY2VQYXRoPgorICAgIDxjbGFzc1BhdGg+CisgICAgICA8cm9vdCB0eXBlPSJjb21wb3NpdGUiPgorICAgICAgICA8cm9vdCB0eXBlPSJvdXRwdXQiIC8+CisgICAgICAgIDxyb290IHR5cGU9ImpkayIgcm9vdFR5cGU9ImNsYXNzUGF0aCIgbmFtZT0iamF2YSB2ZXJzaW9uICZxdW90OzEuNC4yJnF1b3Q7IiAvPgorICAgICAgICA8cm9vdCB0eXBlPSJsaWJyYXJ5IiByb290VHlwZT0iY2xhc3NQYXRoIiBuYW1lPSJYWVoiIC8+CisgICAgICA8L3Jvb3Q+CisgICAgPC9jbGFzc1BhdGg+CisgICAgPGV4Y2x1ZGVQYXRoPgorICAgICAgPHJvb3QgdHlwZT0iY29tcG9zaXRlIj4KKyAgICAgICAgPHJvb3QgdHlwZT0iZXhjbHVkZWRPdXRwdXQiIC8+CisgICAgICAgIDxyb290IHR5cGU9InNpbXBsZSIgdXJsPSJmaWxlOi8vJFBST0pFQ1RfRElSJC9wMi9zcmMvZXhjbHVkZWQyIiAvPgorICAgICAgICA8cm9vdCB0eXBlPSJzaW1wbGUiIHVybD0iZmlsZTovLyRQUk9KRUNUX0RJUiQvcDEvZXhjbHVkZWQxIiAvPgorICAgICAgICA8cm9vdCB0eXBlPSJzaW1wbGUiIHVybD0iZmlsZTovLyRQUk9KRUNUX0RJUiQvZXhjbHVkZWRUb3AiIC8+CisgICAgICA8L3Jvb3Q+CisgICAgPC9leGNsdWRlUGF0aD4KKyAgICA8amF2YWRvY1BhdGg+CisgICAgICA8cm9vdCB0eXBlPSJjb21wb3NpdGUiPgorICAgICAgICA8cm9vdCB0eXBlPSJqZGsiIHJvb3RUeXBlPSJqYXZhZG9jUGF0aCIgbmFtZT0iamF2YSB2ZXJzaW9uICZxdW90OzEuNC4yJnF1b3Q7IiAvPgorICAgICAgPC9yb290PgorICAgIDwvamF2YWRvY1BhdGg+CisgICAgPGFzc2VydF9rZXl3b3JkIGVuYWJsZWQ9Im5vIiAvPgorICAgIDxleGNsdWRlX291dHB1dCBlbmFibGVkPSJ5ZXMiIC8+CisgIDwvY29tcG9uZW50PgorICA8Y29tcG9uZW50IG5hbWU9IkNvbXBpbGVyQ29uZmlndXJhdGlvbiI+CisgICAgPG9wdGlvbiBuYW1lPSJERUZBVUxUX0NPTVBJTEVSIiB2YWx1ZT0iSmF2YWMiIC8+CisgICAgPG9wdGlvbiBuYW1lPSJTWU5DSFJPTklaRV9PVVRQVVRfRElSRUNUT1JZIiB2YWx1ZT0iZmFsc2UiIC8+CisgICAgPG9wdGlvbiBuYW1lPSJERUZBVUxUX09VVFBVVF9QQVRIIiB2YWx1ZT0iJFBST0pFQ1RfRElSJC9jbGFzc2VzIiAvPgorICAgIDxvcHRpb24gbmFtZT0iT1VUUFVUX01PREUiIHZhbHVlPSJzaW5nbGUiIC8+CisgICAgPHJlc291cmNlRXh0ZW5zaW9ucz4KKyAgICAgIDxlbnRyeSBuYW1lPSIuK1wuKHByb3BlcnRpZXN8eG1sfGh0bWwpIiAvPgorICAgICAgPGVudHJ5IG5hbWU9Ii4rXC4oZ2lmfHBuZ3xqcGVnfGpwZykiIC8+CisgICAgPC9yZXNvdXJjZUV4dGVuc2lvbnM+CisgIDwvY29tcG9uZW50PgorICA8Y29tcG9uZW50IG5hbWU9IkphdmFjU2V0dGluZ3MiPgorICAgIDxvcHRpb24gbmFtZT0iREVCVUdHSU5HX0lORk8iIHZhbHVlPSJ0cnVlIiAvPgorICAgIDxvcHRpb24gbmFtZT0iR0VORVJBVEVfTk9fV0FSTklOR1MiIHZhbHVlPSJmYWxzZSIgLz4KKyAgICA8b3B0aW9uIG5hbWU9IkRFUFJFQ0FUSU9OIiB2YWx1ZT0idHJ1ZSIgLz4KKyAgICA8b3B0aW9uIG5hbWU9IkFERElUSU9OQUxfT1BUSU9OU19TVFJJTkciIHZhbHVlPSIiIC8+CisgICAgPG9wdGlvbiBuYW1lPSJNQVhJTVVNX0hFQVBfU0laRSIgdmFsdWU9IjEyOCIgLz4KKyAgPC9jb21wb25lbnQ+CisgIDxjb21wb25lbnQgbmFtZT0iSmlrZXNTZXR0aW5ncyI+CisgICAgPG9wdGlvbiBuYW1lPSJKSUtFU19QQVRIIiB2YWx1ZT0iIiAvPgorICAgIDxvcHRpb24gbmFtZT0iREVCVUdHSU5HX0lORk8iIHZhbHVlPSJ0cnVlIiAvPgorICAgIDxvcHRpb24gbmFtZT0iREVQUkVDQVRJT04iIHZhbHVlPSJ0cnVlIiAvPgorICAgIDxvcHRpb24gbmFtZT0iR0VORVJBVEVfTk9fV0FSTklOR1MiIHZhbHVlPSJmYWxzZSIgLz4KKyAgICA8b3B0aW9uIG5hbWU9IkdFTkVSQVRFX01BS0VfRklMRV9ERVBFTkRFTkNJRVMiIHZhbHVlPSJmYWxzZSIgLz4KKyAgICA8b3B0aW9uIG5hbWU9IkRPX0ZVTExfREVQRU5ERU5DRV9DSEVDSyIgdmFsdWU9ImZhbHNlIiAvPgorICAgIDxvcHRpb24gbmFtZT0iSVNfRU1BQ1NfRVJST1JTX01PREUiIHZhbHVlPSJ0cnVlIiAvPgorICAgIDxvcHRpb24gbmFtZT0iQURESVRJT05BTF9PUFRJT05TX1NUUklORyIgdmFsdWU9IiIgLz4KKyAgPC9jb21wb25lbnQ+CisgIDxjb21wb25lbnQgbmFtZT0iQW50Q29uZmlndXJhdGlvbiI+CisgICAgPG9wdGlvbiBuYW1lPSJJU19BVVRPU0NST0xMX1RPX1NPVVJDRSIgdmFsdWU9ImZhbHNlIiAvPgorICAgIDxvcHRpb24gbmFtZT0iRklMVEVSX1RBUkdFVFMiIHZhbHVlPSJmYWxzZSIgLz4KKyAgPC9jb21wb25lbnQ+CisgIDxjb21wb25lbnQgbmFtZT0iSmF2YWRvY0dlbmVyYXRpb25NYW5hZ2VyIj4KKyAgICA8b3B0aW9uIG5hbWU9Ik9VVFBVVF9ESVJFQ1RPUlkiIC8+CisgICAgPG9wdGlvbiBuYW1lPSJPUFRJT05fU0NPUEUiIHZhbHVlPSJwcm90ZWN0ZWQiIC8+CisgICAgPG9wdGlvbiBuYW1lPSJPUFRJT05fSElFUkFSQ0hZIiB2YWx1ZT0idHJ1ZSIgLz4KKyAgICA8b3B0aW9uIG5hbWU9Ik9QVElPTl9OQVZJR0FUT1IiIHZhbHVlPSJ0cnVlIiAvPgorICAgIDxvcHRpb24gbmFtZT0iT1BUSU9OX0lOREVYIiB2YWx1ZT0idHJ1ZSIgLz4KKyAgICA8b3B0aW9uIG5hbWU9Ik9QVElPTl9TRVBBUkFURV9JTkRFWCIgdmFsdWU9InRydWUiIC8+CisgICAgPG9wdGlvbiBuYW1lPSJPUFRJT05fRE9DVU1FTlRfVEFHX1VTRSIgdmFsdWU9ImZhbHNlIiAvPgorICAgIDxvcHRpb24gbmFtZT0iT1BUSU9OX0RPQ1VNRU5UX1RBR19BVVRIT1IiIHZhbHVlPSJmYWxzZSIgLz4KKyAgICA8b3B0aW9uIG5hbWU9Ik9QVElPTl9ET0NVTUVOVF9UQUdfVkVSU0lPTiIgdmFsdWU9ImZhbHNlIiAvPgorICAgIDxvcHRpb24gbmFtZT0iT1BUSU9OX0RPQ1VNRU5UX1RBR19ERVBSRUNBVEVEIiB2YWx1ZT0idHJ1ZSIgLz4KKyAgICA8b3B0aW9uIG5hbWU9Ik9QVElPTl9ERVBSRUNBVEVEX0xJU1QiIHZhbHVlPSJ0cnVlIiAvPgorICAgIDxvcHRpb24gbmFtZT0iT1RIRVJfT1BUSU9OUyIgdmFsdWU9IiIgLz4KKyAgICA8b3B0aW9uIG5hbWU9IkhFQVBfU0laRSIgLz4KKyAgICA8b3B0aW9uIG5hbWU9Ik9QRU5fSU5fQlJPV1NFUiIgdmFsdWU9InRydWUiIC8+CisgIDwvY29tcG9uZW50PgorICA8Y29tcG9uZW50IG5hbWU9IldlYk1hbmFnZXIiPgorICAgIDxvcHRpb24gZW5hYmxlZD0iZmFsc2UiIC8+CisgIDwvY29tcG9uZW50PgorICA8Y29tcG9uZW50IG5hbWU9IldlYlJvb3RDb250YWluZXIiIC8+CisgIDxjb21wb25lbnQgbmFtZT0iRWpiTWFuYWdlciIgZW5hYmxlZD0iZmFsc2UiIC8+CisgIDxjb21wb25lbnQgbmFtZT0iSlVuaXRQcm9qZWN0U2V0dGluZ3MiPgorICAgIDxvcHRpb24gbmFtZT0iVEVTVF9SVU5ORVIiIHZhbHVlPSJVSSIgLz4KKyAgPC9jb21wb25lbnQ+CisgIDxjb21wb25lbnQgbmFtZT0iRW50cnlQb2ludHNNYW5hZ2VyIj4KKyAgICA8ZW50cnlfcG9pbnRzIC8+CisgIDwvY29tcG9uZW50PgorICA8Y29tcG9uZW50IG5hbWU9IkVqYkFjdGlvbnNDb25maWd1cmF0aW9uIj4KKyAgICA8b3B0aW9uIG5hbWU9Ik5FV19NRVNTQUdFX0JFQU5fTEFTVF9QQUNLQUdFIiB2YWx1ZT0iIiAvPgorICAgIDxvcHRpb24gbmFtZT0iTkVXX0VOVElUWV9CRUFOX0xBU1RfUEFDS0FHRSIgdmFsdWU9IiIgLz4KKyAgICA8b3B0aW9uIG5hbWU9Ik5FV19TRVNTSU9OX0JFQU5fTEFTVF9QQUNLQUdFIiB2YWx1ZT0iIiAvPgorICA8L2NvbXBvbmVudD4KKyAgPGNvbXBvbmVudCBuYW1lPSJDb2RlU3R5bGVNYW5hZ2VyIj4KKyAgICA8b3B0aW9uIG5hbWU9IlVTRV9ERUZBVUxUX0NPREVfU1RZTEVfU0NIRU1FIiB2YWx1ZT0idHJ1ZSIgLz4KKyAgICA8b3B0aW9uIG5hbWU9IkNPREVfU1RZTEVfU0NIRU1FIiB2YWx1ZT0iIiAvPgorICA8L2NvbXBvbmVudD4KKyAgPGNvbXBvbmVudCBuYW1lPSJFeHBvcnRUb0hUTUxTZXR0aW5ncyI+CisgICAgPG9wdGlvbiBuYW1lPSJQUklOVF9MSU5FX05VTUJFUlMiIHZhbHVlPSJmYWxzZSIgLz4KKyAgICA8b3B0aW9uIG5hbWU9Ik9QRU5fSU5fQlJPV1NFUiIgdmFsdWU9ImZhbHNlIiAvPgorICAgIDxvcHRpb24gbmFtZT0iT1VUUFVUX0RJUkVDVE9SWSIgLz4KKyAgPC9jb21wb25lbnQ+Cis8L3Byb2plY3Q+CisKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9tb2R1bGVSb290TWFuYWdlci9jb252ZXJ0b3IzNC90ZXN0NC9hZnRlci9wcmo0LmltbCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9tb2R1bGVSb290TWFuYWdlci9jb252ZXJ0b3IzNC90ZXN0NC9hZnRlci9wcmo0LmltbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ODMxM2Y4Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL21vZHVsZVJvb3RNYW5hZ2VyL2NvbnZlcnRvcjM0L3Rlc3Q0L2FmdGVyL3ByajQuaW1sCkBAIC0wLDAgKzEsMTEgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8bW9kdWxlIHZlcnNpb249IjQiIHJlbGF0aXZlUGF0aHM9InRydWUiPgorICA8Y29tcG9uZW50IG5hbWU9Ik5ld01vZHVsZVJvb3RNYW5hZ2VyIj4KKyAgICA8Y29udGVudCB1cmw9ImZpbGU6Ly8kTU9EVUxFX0RJUiQiPgorICAgICAgPHNvdXJjZUZvbGRlciBpc1Rlc3RTb3VyY2U9ImZhbHNlIiB1cmw9ImZpbGU6Ly8kTU9EVUxFX0RJUiQvc3JjIiAvPgorICAgIDwvY29udGVudD4KKyAgPG9yZGVyRW50cnkgdHlwZT0ic291cmNlRm9sZGVyIiAvPgorICA8b3JkZXJFbnRyeSB0eXBlPSJqZGsiIGpka05hbWU9ImphdmEgdmVyc2lvbiAmcXVvdDsxLjQuMV8wMiZxdW90OyIgLz4KKyAgPGV4Y2x1ZGUtb3V0cHV0IC8+Cis8L2NvbXBvbmVudD4KKzwvbW9kdWxlPgpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL21vZHVsZVJvb3RNYW5hZ2VyL2NvbnZlcnRvcjM0L3Rlc3Q0L2FmdGVyL3ByajQuaXByIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL21vZHVsZVJvb3RNYW5hZ2VyL2NvbnZlcnRvcjM0L3Rlc3Q0L2FmdGVyL3ByajQuaXByCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYzMGYxNzAKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvbW9kdWxlUm9vdE1hbmFnZXIvY29udmVydG9yMzQvdGVzdDQvYWZ0ZXIvcHJqNC5pcHIKQEAgLTAsMCArMSw4IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHByb2plY3QgdmVyc2lvbj0iNCIgcmVsYXRpdmVQYXRocz0idHJ1ZSI+CisgIDxjb21wb25lbnQgbmFtZT0iUHJvamVjdE1vZHVsZU1hbmFnZXIiPgorICAgIDxtb2R1bGVzPgorICAgICAgPG1vZHVsZSBmaWxlcGF0aD0iJFBST0pFQ1RfRElSJC9wcmo0LmltbCIgZmlsZXVybD0iZmlsZTovLyRQUk9KRUNUX0RJUiQvcHJqNC5pbWwiIC8+CisgICAgPC9tb2R1bGVzPgorICA8L2NvbXBvbmVudD4KKzwvcHJvamVjdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvbW9kdWxlUm9vdE1hbmFnZXIvY29udmVydG9yMzQvdGVzdDQvYmVmb3JlL3ByajQuaXByIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL21vZHVsZVJvb3RNYW5hZ2VyL2NvbnZlcnRvcjM0L3Rlc3Q0L2JlZm9yZS9wcmo0LmlwcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYTBiMzhjCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL21vZHVsZVJvb3RNYW5hZ2VyL2NvbnZlcnRvcjM0L3Rlc3Q0L2JlZm9yZS9wcmo0LmlwcgpAQCAtMCwwICsxLDEwOCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxwcm9qZWN0IHZlcnNpb249IjMiIHJlbGF0aXZlUGF0aHM9InRydWUiPgorICA8Y29tcG9uZW50IG5hbWU9IlByb2plY3RSb290TWFuYWdlciIgdmVyc2lvbj0iMiI+CisgICAgPGpkayBuYW1lPSJqYXZhIHZlcnNpb24gJnF1b3Q7MS40LjFfMDImcXVvdDsiIC8+CisgICAgPHByb2plY3RQYXRoPgorICAgICAgPHJvb3QgdHlwZT0iY29tcG9zaXRlIj4KKyAgICAgICAgPHJvb3QgdHlwZT0ic2ltcGxlIiB1cmw9ImZpbGU6Ly8kUFJPSkVDVF9ESVIkIiAvPgorICAgICAgPC9yb290PgorICAgIDwvcHJvamVjdFBhdGg+CisgICAgPHNvdXJjZVBhdGg+CisgICAgICA8cm9vdCB0eXBlPSJjb21wb3NpdGUiPgorICAgICAgICA8cm9vdCB0eXBlPSJzaW1wbGUiIHVybD0iZmlsZTovLyRQUk9KRUNUX0RJUiQvc3JjIiAvPgorICAgICAgICA8cm9vdCB0eXBlPSJqZGsiIHJvb3RUeXBlPSJzb3VyY2VQYXRoIiBuYW1lPSJqYXZhIHZlcnNpb24gJnF1b3Q7MS40LjFfMDImcXVvdDsiIC8+CisgICAgICA8L3Jvb3Q+CisgICAgPC9zb3VyY2VQYXRoPgorICAgIDxjbGFzc1BhdGg+CisgICAgICA8cm9vdCB0eXBlPSJjb21wb3NpdGUiPgorICAgICAgICA8cm9vdCB0eXBlPSJvdXRwdXQiIC8+CisgICAgICAgIDxyb290IHR5cGU9ImpkayIgcm9vdFR5cGU9ImNsYXNzUGF0aCIgbmFtZT0iamF2YSB2ZXJzaW9uICZxdW90OzEuNC4xXzAyJnF1b3Q7IiAvPgorICAgICAgPC9yb290PgorICAgIDwvY2xhc3NQYXRoPgorICAgIDxleGNsdWRlUGF0aD4KKyAgICAgIDxyb290IHR5cGU9ImNvbXBvc2l0ZSI+CisgICAgICAgIDxyb290IHR5cGU9ImV4Y2x1ZGVkT3V0cHV0IiAvPgorICAgICAgPC9yb290PgorICAgIDwvZXhjbHVkZVBhdGg+CisgICAgPGphdmFkb2NQYXRoPgorICAgICAgPHJvb3QgdHlwZT0iY29tcG9zaXRlIj4KKyAgICAgICAgPHJvb3QgdHlwZT0iamRrIiByb290VHlwZT0iamF2YWRvY1BhdGgiIG5hbWU9ImphdmEgdmVyc2lvbiAmcXVvdDsxLjQuMV8wMiZxdW90OyIgLz4KKyAgICAgIDwvcm9vdD4KKyAgICA8L2phdmFkb2NQYXRoPgorICAgIDxhc3NlcnRfa2V5d29yZCBlbmFibGVkPSJubyIgLz4KKyAgICA8ZXhjbHVkZV9vdXRwdXQgZW5hYmxlZD0ieWVzIiAvPgorICA8L2NvbXBvbmVudD4KKyAgPGNvbXBvbmVudCBuYW1lPSJDb21waWxlckNvbmZpZ3VyYXRpb24iPgorICAgIDxvcHRpb24gbmFtZT0iREVGQVVMVF9DT01QSUxFUiIgdmFsdWU9IkphdmFjIiAvPgorICAgIDxvcHRpb24gbmFtZT0iU1lOQ0hST05JWkVfT1VUUFVUX0RJUkVDVE9SWSIgdmFsdWU9ImZhbHNlIiAvPgorICAgIDxvcHRpb24gbmFtZT0iREVGQVVMVF9PVVRQVVRfUEFUSCIgLz4KKyAgICA8b3B0aW9uIG5hbWU9Ik9VVFBVVF9NT0RFIiB2YWx1ZT0ic2luZ2xlIiAvPgorICAgIDxyZXNvdXJjZUV4dGVuc2lvbnM+CisgICAgICA8ZW50cnkgbmFtZT0iLitcLihwcm9wZXJ0aWVzfHhtbHxodG1sKSIgLz4KKyAgICAgIDxlbnRyeSBuYW1lPSIuK1wuKGdpZnxwbmd8anBlZ3xqcGcpIiAvPgorICAgIDwvcmVzb3VyY2VFeHRlbnNpb25zPgorICA8L2NvbXBvbmVudD4KKyAgPGNvbXBvbmVudCBuYW1lPSJKYXZhY1NldHRpbmdzIj4KKyAgICA8b3B0aW9uIG5hbWU9IkRFQlVHR0lOR19JTkZPIiB2YWx1ZT0idHJ1ZSIgLz4KKyAgICA8b3B0aW9uIG5hbWU9IkdFTkVSQVRFX05PX1dBUk5JTkdTIiB2YWx1ZT0iZmFsc2UiIC8+CisgICAgPG9wdGlvbiBuYW1lPSJERVBSRUNBVElPTiIgdmFsdWU9InRydWUiIC8+CisgICAgPG9wdGlvbiBuYW1lPSJBRERJVElPTkFMX09QVElPTlNfU1RSSU5HIiB2YWx1ZT0iIiAvPgorICAgIDxvcHRpb24gbmFtZT0iTUFYSU1VTV9IRUFQX1NJWkUiIHZhbHVlPSIxMjgiIC8+CisgIDwvY29tcG9uZW50PgorICA8Y29tcG9uZW50IG5hbWU9Ikppa2VzU2V0dGluZ3MiPgorICAgIDxvcHRpb24gbmFtZT0iSklLRVNfUEFUSCIgdmFsdWU9IiIgLz4KKyAgICA8b3B0aW9uIG5hbWU9IkRFQlVHR0lOR19JTkZPIiB2YWx1ZT0idHJ1ZSIgLz4KKyAgICA8b3B0aW9uIG5hbWU9IkRFUFJFQ0FUSU9OIiB2YWx1ZT0idHJ1ZSIgLz4KKyAgICA8b3B0aW9uIG5hbWU9IkdFTkVSQVRFX05PX1dBUk5JTkdTIiB2YWx1ZT0iZmFsc2UiIC8+CisgICAgPG9wdGlvbiBuYW1lPSJHRU5FUkFURV9NQUtFX0ZJTEVfREVQRU5ERU5DSUVTIiB2YWx1ZT0iZmFsc2UiIC8+CisgICAgPG9wdGlvbiBuYW1lPSJET19GVUxMX0RFUEVOREVOQ0VfQ0hFQ0siIHZhbHVlPSJmYWxzZSIgLz4KKyAgICA8b3B0aW9uIG5hbWU9IklTX0VNQUNTX0VSUk9SU19NT0RFIiB2YWx1ZT0idHJ1ZSIgLz4KKyAgICA8b3B0aW9uIG5hbWU9IkFERElUSU9OQUxfT1BUSU9OU19TVFJJTkciIHZhbHVlPSIiIC8+CisgIDwvY29tcG9uZW50PgorICA8Y29tcG9uZW50IG5hbWU9IkFudENvbmZpZ3VyYXRpb24iPgorICAgIDxvcHRpb24gbmFtZT0iSVNfQVVUT1NDUk9MTF9UT19TT1VSQ0UiIHZhbHVlPSJmYWxzZSIgLz4KKyAgICA8b3B0aW9uIG5hbWU9IkZJTFRFUl9UQVJHRVRTIiB2YWx1ZT0iZmFsc2UiIC8+CisgIDwvY29tcG9uZW50PgorICA8Y29tcG9uZW50IG5hbWU9IkphdmFkb2NHZW5lcmF0aW9uTWFuYWdlciI+CisgICAgPG9wdGlvbiBuYW1lPSJPVVRQVVRfRElSRUNUT1JZIiAvPgorICAgIDxvcHRpb24gbmFtZT0iT1BUSU9OX1NDT1BFIiB2YWx1ZT0icHJvdGVjdGVkIiAvPgorICAgIDxvcHRpb24gbmFtZT0iT1BUSU9OX0hJRVJBUkNIWSIgdmFsdWU9InRydWUiIC8+CisgICAgPG9wdGlvbiBuYW1lPSJPUFRJT05fTkFWSUdBVE9SIiB2YWx1ZT0idHJ1ZSIgLz4KKyAgICA8b3B0aW9uIG5hbWU9Ik9QVElPTl9JTkRFWCIgdmFsdWU9InRydWUiIC8+CisgICAgPG9wdGlvbiBuYW1lPSJPUFRJT05fU0VQQVJBVEVfSU5ERVgiIHZhbHVlPSJ0cnVlIiAvPgorICAgIDxvcHRpb24gbmFtZT0iT1BUSU9OX0RPQ1VNRU5UX1RBR19VU0UiIHZhbHVlPSJmYWxzZSIgLz4KKyAgICA8b3B0aW9uIG5hbWU9Ik9QVElPTl9ET0NVTUVOVF9UQUdfQVVUSE9SIiB2YWx1ZT0iZmFsc2UiIC8+CisgICAgPG9wdGlvbiBuYW1lPSJPUFRJT05fRE9DVU1FTlRfVEFHX1ZFUlNJT04iIHZhbHVlPSJmYWxzZSIgLz4KKyAgICA8b3B0aW9uIG5hbWU9Ik9QVElPTl9ET0NVTUVOVF9UQUdfREVQUkVDQVRFRCIgdmFsdWU9InRydWUiIC8+CisgICAgPG9wdGlvbiBuYW1lPSJPUFRJT05fREVQUkVDQVRFRF9MSVNUIiB2YWx1ZT0idHJ1ZSIgLz4KKyAgICA8b3B0aW9uIG5hbWU9Ik9USEVSX09QVElPTlMiIHZhbHVlPSIiIC8+CisgICAgPG9wdGlvbiBuYW1lPSJIRUFQX1NJWkUiIC8+CisgICAgPG9wdGlvbiBuYW1lPSJPUEVOX0lOX0JST1dTRVIiIHZhbHVlPSJ0cnVlIiAvPgorICA8L2NvbXBvbmVudD4KKyAgPGNvbXBvbmVudCBuYW1lPSJXZWJNYW5hZ2VyIj4KKyAgICA8b3B0aW9uIGVuYWJsZWQ9ImZhbHNlIiAvPgorICA8L2NvbXBvbmVudD4KKyAgPGNvbXBvbmVudCBuYW1lPSJXZWJSb290Q29udGFpbmVyIiAvPgorICA8Y29tcG9uZW50IG5hbWU9IkVqYk1hbmFnZXIiIGVuYWJsZWQ9ImZhbHNlIiAvPgorICA8Y29tcG9uZW50IG5hbWU9IkpVbml0UHJvamVjdFNldHRpbmdzIj4KKyAgICA8b3B0aW9uIG5hbWU9IlRFU1RfUlVOTkVSIiB2YWx1ZT0iVUkiIC8+CisgIDwvY29tcG9uZW50PgorICA8Y29tcG9uZW50IG5hbWU9IkVudHJ5UG9pbnRzTWFuYWdlciI+CisgICAgPGVudHJ5X3BvaW50cyAvPgorICA8L2NvbXBvbmVudD4KKyAgPGNvbXBvbmVudCBuYW1lPSJFamJBY3Rpb25zQ29uZmlndXJhdGlvbiI+CisgICAgPG9wdGlvbiBuYW1lPSJORVdfTUVTU0FHRV9CRUFOX0xBU1RfUEFDS0FHRSIgdmFsdWU9IiIgLz4KKyAgICA8b3B0aW9uIG5hbWU9Ik5FV19FTlRJVFlfQkVBTl9MQVNUX1BBQ0tBR0UiIHZhbHVlPSIiIC8+CisgICAgPG9wdGlvbiBuYW1lPSJORVdfU0VTU0lPTl9CRUFOX0xBU1RfUEFDS0FHRSIgdmFsdWU9IiIgLz4KKyAgPC9jb21wb25lbnQ+CisgIDxjb21wb25lbnQgbmFtZT0iQ29kZVN0eWxlTWFuYWdlciI+CisgICAgPG9wdGlvbiBuYW1lPSJVU0VfREVGQVVMVF9DT0RFX1NUWUxFX1NDSEVNRSIgdmFsdWU9InRydWUiIC8+CisgICAgPG9wdGlvbiBuYW1lPSJDT0RFX1NUWUxFX1NDSEVNRSIgdmFsdWU9IiIgLz4KKyAgPC9jb21wb25lbnQ+CisgIDxjb21wb25lbnQgbmFtZT0iRXhwb3J0VG9IVE1MU2V0dGluZ3MiPgorICAgIDxvcHRpb24gbmFtZT0iUFJJTlRfTElORV9OVU1CRVJTIiB2YWx1ZT0iZmFsc2UiIC8+CisgICAgPG9wdGlvbiBuYW1lPSJPUEVOX0lOX0JST1dTRVIiIHZhbHVlPSJmYWxzZSIgLz4KKyAgICA8b3B0aW9uIG5hbWU9Ik9VVFBVVF9ESVJFQ1RPUlkiIC8+CisgIDwvY29tcG9uZW50PgorPC9wcm9qZWN0PgorCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvbW9kdWxlUm9vdE1hbmFnZXIvZXhwb3J0ZWRNb2R1bGVzL0Evc3JjL3AvQS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL21vZHVsZVJvb3RNYW5hZ2VyL2V4cG9ydGVkTW9kdWxlcy9BL3NyYy9wL0EuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNDliYjkwCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL21vZHVsZVJvb3RNYW5hZ2VyL2V4cG9ydGVkTW9kdWxlcy9BL3NyYy9wL0EuamF2YQpAQCAtMCwwICsxLDQgQEAKK3BhY2thZ2UgcDsKKworcHVibGljIGNsYXNzIEEgeworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9tb2R1bGVSb290TWFuYWdlci9leHBvcnRlZE1vZHVsZXMvQi9zcmMvcC9CLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvbW9kdWxlUm9vdE1hbmFnZXIvZXhwb3J0ZWRNb2R1bGVzL0Ivc3JjL3AvQi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIwZTdiZjMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvbW9kdWxlUm9vdE1hbmFnZXIvZXhwb3J0ZWRNb2R1bGVzL0Ivc3JjL3AvQi5qYXZhCkBAIC0wLDAgKzEsNCBAQAorcGFja2FnZSBwOworCitwdWJsaWMgY2xhc3MgQiB7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL21vZHVsZVJvb3RNYW5hZ2VyL2V4cG9ydGVkTW9kdWxlcy9DL3NyYy9wL0MuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9tb2R1bGVSb290TWFuYWdlci9leHBvcnRlZE1vZHVsZXMvQy9zcmMvcC9DLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWUzZTFiNgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9tb2R1bGVSb290TWFuYWdlci9leHBvcnRlZE1vZHVsZXMvQy9zcmMvcC9DLmphdmEKQEAgLTAsMCArMSw0IEBACitwYWNrYWdlIHA7CisKK3B1YmxpYyBjbGFzcyBDIHsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvbW9kdWxlUm9vdE1hbmFnZXIvbW9kdWxlTGlicmFyaWVzL25hbWVkTGliQ2xhc3Nlcy9lbXB0eS50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvbW9kdWxlUm9vdE1hbmFnZXIvbW9kdWxlTGlicmFyaWVzL25hbWVkTGliQ2xhc3Nlcy9lbXB0eS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY5ZGUyOQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9tb2R1bGVSb290TWFuYWdlci9tb2R1bGVMaWJyYXJpZXMvbmFtZWRMaWJDbGFzc2VzL2VtcHR5LnR4dApkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL21vZHVsZVJvb3RNYW5hZ2VyL21vZHVsZUxpYnJhcmllcy90ZXN0LmltbCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9tb2R1bGVSb290TWFuYWdlci9tb2R1bGVMaWJyYXJpZXMvdGVzdC5pbWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWQxOTYwNQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9tb2R1bGVSb290TWFuYWdlci9tb2R1bGVMaWJyYXJpZXMvdGVzdC5pbWwKQEAgLTAsMCArMSw0IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPG1vZHVsZSB2ZXJzaW9uPSI0IiByZWxhdGl2ZVBhdGhzPSJ0cnVlIj4KKzxjb21wb25lbnQgbmFtZT0iTmV3TW9kdWxlUm9vdE1hbmFnZXIiIC8+Cis8L21vZHVsZT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvbW9kdWxlUm9vdE1hbmFnZXIvbW9kdWxlTGlicmFyaWVzL3VubmFtZWRMaWJDbGFzc2VzL2VtcHR5LnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9tb2R1bGVSb290TWFuYWdlci9tb2R1bGVMaWJyYXJpZXMvdW5uYW1lZExpYkNsYXNzZXMvZW1wdHkudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2OWRlMjkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvbW9kdWxlUm9vdE1hbmFnZXIvbW9kdWxlTGlicmFyaWVzL3VubmFtZWRMaWJDbGFzc2VzL2VtcHR5LnR4dApkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL21vZHVsZVJvb3RNYW5hZ2VyL211bHRpTW9kdWxlRWRpdGluZy9yb290c0VkaXRpbmcvYS9zcmMvcS9BLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvbW9kdWxlUm9vdE1hbmFnZXIvbXVsdGlNb2R1bGVFZGl0aW5nL3Jvb3RzRWRpdGluZy9hL3NyYy9xL0EuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOWQ0YWEyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL21vZHVsZVJvb3RNYW5hZ2VyL211bHRpTW9kdWxlRWRpdGluZy9yb290c0VkaXRpbmcvYS9zcmMvcS9BLmphdmEKQEAgLTAsMCArMSw0IEBACitwYWNrYWdlIHE7CisKK2NsYXNzIEEgeworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9tb2R1bGVSb290TWFuYWdlci9tdWx0aU1vZHVsZUVkaXRpbmcvcm9vdHNFZGl0aW5nL2Ivc3JjL2ovQi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL21vZHVsZVJvb3RNYW5hZ2VyL211bHRpTW9kdWxlRWRpdGluZy9yb290c0VkaXRpbmcvYi9zcmMvai9CLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjM2OTI1MGEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvbW9kdWxlUm9vdE1hbmFnZXIvbXVsdGlNb2R1bGVFZGl0aW5nL3Jvb3RzRWRpdGluZy9iL3NyYy9qL0IuamF2YQpAQCAtMCwwICsxLDQgQEAKK3BhY2thZ2UgajsKKworY2xhc3MgQiB7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL21vZHVsZVJvb3RNYW5hZ2VyL3Jvb3RzL3Rlc3QxL2NsYXNzZXMveS50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvbW9kdWxlUm9vdE1hbmFnZXIvcm9vdHMvdGVzdDEvY2xhc3Nlcy95LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMDJkYmYzCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL21vZHVsZVJvb3RNYW5hZ2VyL3Jvb3RzL3Rlc3QxL2NsYXNzZXMveS50eHQKQEAgLTAsMCArMSBAQAorenp6enoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvbW9kdWxlUm9vdE1hbmFnZXIvcm9vdHMvdGVzdDEveC50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvbW9kdWxlUm9vdE1hbmFnZXIvcm9vdHMvdGVzdDEveC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjBjMWJkMAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9tb2R1bGVSb290TWFuYWdlci9yb290cy90ZXN0MS94LnR4dApAQCAtMCwwICsxIEBACitibGFoIGJsYWggYmxhaApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wcm9qZWN0Vmlldy8xL3NyYy9jb20vcGFja2FnZTEvQ2xhc3MyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHJvamVjdFZpZXcvMS9zcmMvY29tL3BhY2thZ2UxL0NsYXNzMi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2OWRlMjkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHJvamVjdFZpZXcvMS9zcmMvY29tL3BhY2thZ2UxL0NsYXNzMi5qYXZhCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHJvamVjdFZpZXcvMS9zcmMvY29tL3BhY2thZ2UxL0Zvcm0xLmZvcm0gYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHJvamVjdFZpZXcvMS9zcmMvY29tL3BhY2thZ2UxL0Zvcm0xLmZvcm0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY5ZGUyOQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wcm9qZWN0Vmlldy8xL3NyYy9jb20vcGFja2FnZTEvRm9ybTEuZm9ybQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3Byb2plY3RWaWV3LzEvc3JjL2NvbS9wYWNrYWdlMS9Gb3JtMS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3Byb2plY3RWaWV3LzEvc3JjL2NvbS9wYWNrYWdlMS9Gb3JtMS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2OWRlMjkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHJvamVjdFZpZXcvMS9zcmMvY29tL3BhY2thZ2UxL0Zvcm0xLmphdmEKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wcm9qZWN0Vmlldy8xL3NyYy9jb20vcGFja2FnZTEvRm9ybTIuZm9ybSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wcm9qZWN0Vmlldy8xL3NyYy9jb20vcGFja2FnZTEvRm9ybTIuZm9ybQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjlkZTI5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3Byb2plY3RWaWV3LzEvc3JjL2NvbS9wYWNrYWdlMS9Gb3JtMi5mb3JtCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHJvamVjdFZpZXcvYW5ub3lpbmdTY3JvbGxpbmcvc3JjL2NvbS9wYWNrYWdlMS9DbGFzczEuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wcm9qZWN0Vmlldy9hbm5veWluZ1Njcm9sbGluZy9zcmMvY29tL3BhY2thZ2UxL0NsYXNzMS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI1MGUzNzQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHJvamVjdFZpZXcvYW5ub3lpbmdTY3JvbGxpbmcvc3JjL2NvbS9wYWNrYWdlMS9DbGFzczEuamF2YQpAQCAtMCwwICsxLDE1IEBACitwYWNrYWdlIGNvbS5wYWNrYWdlMTsKKworcHVibGljIGNsYXNzIENsYXNzMSB7CisgIHByaXZhdGUgYm9vbGVhbiBteUZpZWxkMTsKKyAgcHVibGljIGJvb2xlYW4gbXlGaWVsZDI7CisgIAorICBwdWJsaWMgaW50IGdldFZhbHVlKCl7CisgICByZXR1cm4gMDsKKyAgfQorICAKKyAgcHVibGljIGNsYXNzIElubmVyQ2xhc3N7CisgICAgcHVibGljIGludCBteUlubmVyQ2xhc3NGaWVsZDsKKyAgfQorICAKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wcm9qZWN0Vmlldy9hdXRvc2Nyb2xsRnJvbVNvdXJjZU9uT3BlbmluZy9zcmMvY29tL3BhY2thZ2UxL0NsYXNzMS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3Byb2plY3RWaWV3L2F1dG9zY3JvbGxGcm9tU291cmNlT25PcGVuaW5nL3NyYy9jb20vcGFja2FnZTEvQ2xhc3MxLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTRmZjlkYQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wcm9qZWN0Vmlldy9hdXRvc2Nyb2xsRnJvbVNvdXJjZU9uT3BlbmluZy9zcmMvY29tL3BhY2thZ2UxL0NsYXNzMS5qYXZhCkBAIC0wLDAgKzEsMzAgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwMC0yMDEyIEpldEJyYWlucyBzLnIuby4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCitwYWNrYWdlIGNvbS5wYWNrYWdlMTsKKworcHVibGljIGNsYXNzIENsYXNzMSB7CisgIHByaXZhdGUgYm9vbGVhbiBteUZpZWxkMTsKKyAgcHVibGljIGJvb2xlYW4gbXlGaWVsZDI7CisgIAorICBwdWJsaWMgaW50IGdldFZhbHVlKCl7CisgICByZXR1cm4gMDsKKyAgfQorICAKKyAgcHVibGljIGNsYXNzIElubmVyQ2xhc3N7CisgICAgcHVibGljIGludCBteUlubmVyQ2xhc3NGaWVsZDsKKyAgfQorICAKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wcm9qZWN0Vmlldy9maWxlU3RydWN0dXJlRm9yQ2xhc3Mvc3JjL2NvbS9wYWNrYWdlMS9DbGFzczEuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wcm9qZWN0Vmlldy9maWxlU3RydWN0dXJlRm9yQ2xhc3Mvc3JjL2NvbS9wYWNrYWdlMS9DbGFzczEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZDliOTI2Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3Byb2plY3RWaWV3L2ZpbGVTdHJ1Y3R1cmVGb3JDbGFzcy9zcmMvY29tL3BhY2thZ2UxL0NsYXNzMS5qYXZhCkBAIC0wLDAgKzEsMjIgQEAKK3BhY2thZ2UgY29tLnBhY2thZ2UxOworCitwdWJsaWMgY2xhc3MgQ2xhc3MxIHsKKworICBwcml2YXRlIFN0cmluZyBfbXlGaWVsZDI7CisgIAorCisgIGNsYXNzIElubmVyMnsKKworICB9CisKKyAgaW50IF9teUZpZWxkMTsKKworICBjbGFzcyBJbm5lcjF7CisKKyAgfQorCisgIHByaXZhdGUgdm9pZCBfX21ldGhvZCgpIHsKKworICB9CisKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wcm9qZWN0Vmlldy9nZXRQYXJlbnRPYmplY3Qvc3JjL2NvbS9wYWNrYWdlMS9DbGFzczEuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wcm9qZWN0Vmlldy9nZXRQYXJlbnRPYmplY3Qvc3JjL2NvbS9wYWNrYWdlMS9DbGFzczEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MmQ0ZWE3Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3Byb2plY3RWaWV3L2dldFBhcmVudE9iamVjdC9zcmMvY29tL3BhY2thZ2UxL0NsYXNzMS5qYXZhCkBAIC0wLDAgKzEsMTIgQEAKK3BhY2thZ2UgY29tLnBhY2thZ2UxOworCitwdWJsaWMgY2xhc3MgQ2xhc3MxIHsKKworICBwcml2YXRlIFN0cmluZyBteUZpZWxkOworICAKKyAgcHJpdmF0ZSB2b2lkIG1ldGhvZCgpIHsKKyAgCisgIH0KKyAgCisKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wcm9qZWN0Vmlldy9nZXRQYXJlbnRPYmplY3Qvc3JjL2NvbS9wYWNrYWdlMS9DbGFzczIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wcm9qZWN0Vmlldy9nZXRQYXJlbnRPYmplY3Qvc3JjL2NvbS9wYWNrYWdlMS9DbGFzczIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMGM4OTNjCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3Byb2plY3RWaWV3L2dldFBhcmVudE9iamVjdC9zcmMvY29tL3BhY2thZ2UxL0NsYXNzMi5qYXZhCkBAIC0wLDAgKzEsOCBAQAorcGFja2FnZSBjb20ucGFja2FnZTE7CisKK3B1YmxpYyBjbGFzcyBDbGFzczIgeworfQorCitjbGFzcyBDbGFzczMgeworCit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHJvamVjdFZpZXcvZ2V0UGFyZW50T2JqZWN0L3NyYy9jb20vcGFja2FnZTEvQ2xhc3M0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHJvamVjdFZpZXcvZ2V0UGFyZW50T2JqZWN0L3NyYy9jb20vcGFja2FnZTEvQ2xhc3M0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzNlZWI5MwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wcm9qZWN0Vmlldy9nZXRQYXJlbnRPYmplY3Qvc3JjL2NvbS9wYWNrYWdlMS9DbGFzczQuamF2YQpAQCAtMCwwICsxLDQgQEAKK3BhY2thZ2UgY29tLnBhY2thZ2UxOworCitwdWJsaWMgQ2xhc3M0IHsKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wcm9qZWN0Vmlldy9nZXRQYXJlbnRPYmplY3Qvc3JjL2NvbS9wYWNrYWdlMS9Gb3JtMS5mb3JtIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3Byb2plY3RWaWV3L2dldFBhcmVudE9iamVjdC9zcmMvY29tL3BhY2thZ2UxL0Zvcm0xLmZvcm0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTQwN2ZmZQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wcm9qZWN0Vmlldy9nZXRQYXJlbnRPYmplY3Qvc3JjL2NvbS9wYWNrYWdlMS9Gb3JtMS5mb3JtCkBAIC0wLDAgKzEsMiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxmb3JtIHhtbG5zPSJodHRwOi8vd3d3LmludGVsbGlqLmNvbS91aWRlc2lnbmVyL2Zvcm0vIiB2ZXJzaW9uPSIxIiBiaW5kLXRvLWNsYXNzPSJjb20ucGFja2FnZTEuRm9ybTEiLz4KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wcm9qZWN0Vmlldy9nZXRQYXJlbnRPYmplY3Qvc3JjL2NvbS9wYWNrYWdlMS9Gb3JtMS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3Byb2plY3RWaWV3L2dldFBhcmVudE9iamVjdC9zcmMvY29tL3BhY2thZ2UxL0Zvcm0xLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjRmYjBhZAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wcm9qZWN0Vmlldy9nZXRQYXJlbnRPYmplY3Qvc3JjL2NvbS9wYWNrYWdlMS9Gb3JtMS5qYXZhCkBAIC0wLDAgKzEsNCBAQAorcGFja2FnZSBjb20ucGFja2FnZTE7CisKK3B1YmxpYyBjbGFzcyBGb3JtMSB7Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHJvamVjdFZpZXcvZ2V0UGFyZW50T2JqZWN0L3NyYy9jb20vcGFja2FnZTEvRm9ybTIuZm9ybSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wcm9qZWN0Vmlldy9nZXRQYXJlbnRPYmplY3Qvc3JjL2NvbS9wYWNrYWdlMS9Gb3JtMi5mb3JtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQzNTM1ZjUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHJvamVjdFZpZXcvZ2V0UGFyZW50T2JqZWN0L3NyYy9jb20vcGFja2FnZTEvRm9ybTIuZm9ybQpAQCAtMCwwICsxLDIgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8Zm9ybSB2ZXJzaW9uPSIxIiB4bWxucz0iaHR0cDovL3d3dy5pbnRlbGxpai5jb20vdWlkZXNpZ25lci9mb3JtLyIvPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wcm9qZWN0Vmlldy9wYWNrYWdlVmlldy9zcmMvY29tL3BhY2thZ2UxL0NsYXNzMS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3Byb2plY3RWaWV3L3BhY2thZ2VWaWV3L3NyYy9jb20vcGFja2FnZTEvQ2xhc3MxLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWZjNWYzZgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wcm9qZWN0Vmlldy9wYWNrYWdlVmlldy9zcmMvY29tL3BhY2thZ2UxL0NsYXNzMS5qYXZhCkBAIC0wLDAgKzEsNCBAQAorcGFja2FnZSBjb20ucGFja2FnZTE7CisKK3B1YmxpYyBjbGFzcyBDbGFzczEgeworfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3Byb2plY3RWaWV3L3BhY2thZ2VWaWV3L3NyYy9jb20vcGFja2FnZTEvQ2xhc3MyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHJvamVjdFZpZXcvcGFja2FnZVZpZXcvc3JjL2NvbS9wYWNrYWdlMS9DbGFzczIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMGM4OTNjCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3Byb2plY3RWaWV3L3BhY2thZ2VWaWV3L3NyYy9jb20vcGFja2FnZTEvQ2xhc3MyLmphdmEKQEAgLTAsMCArMSw4IEBACitwYWNrYWdlIGNvbS5wYWNrYWdlMTsKKworcHVibGljIGNsYXNzIENsYXNzMiB7Cit9CisKK2NsYXNzIENsYXNzMyB7CisKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wcm9qZWN0Vmlldy9wYWNrYWdlVmlldy9zcmMvY29tL3BhY2thZ2UxL0NsYXNzNC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3Byb2plY3RWaWV3L3BhY2thZ2VWaWV3L3NyYy9jb20vcGFja2FnZTEvQ2xhc3M0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzNlZWI5MwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wcm9qZWN0Vmlldy9wYWNrYWdlVmlldy9zcmMvY29tL3BhY2thZ2UxL0NsYXNzNC5qYXZhCkBAIC0wLDAgKzEsNCBAQAorcGFja2FnZSBjb20ucGFja2FnZTE7CisKK3B1YmxpYyBDbGFzczQgeworfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3Byb2plY3RWaWV3L3BhY2thZ2VWaWV3L3NyYy9jb20vcGFja2FnZTEvRm9ybTEuZm9ybSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wcm9qZWN0Vmlldy9wYWNrYWdlVmlldy9zcmMvY29tL3BhY2thZ2UxL0Zvcm0xLmZvcm0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTQwN2ZmZQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wcm9qZWN0Vmlldy9wYWNrYWdlVmlldy9zcmMvY29tL3BhY2thZ2UxL0Zvcm0xLmZvcm0KQEAgLTAsMCArMSwyIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPGZvcm0geG1sbnM9Imh0dHA6Ly93d3cuaW50ZWxsaWouY29tL3VpZGVzaWduZXIvZm9ybS8iIHZlcnNpb249IjEiIGJpbmQtdG8tY2xhc3M9ImNvbS5wYWNrYWdlMS5Gb3JtMSIvPgpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3Byb2plY3RWaWV3L3BhY2thZ2VWaWV3L3NyYy9jb20vcGFja2FnZTEvRm9ybTEuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wcm9qZWN0Vmlldy9wYWNrYWdlVmlldy9zcmMvY29tL3BhY2thZ2UxL0Zvcm0xLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjRmYjBhZAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wcm9qZWN0Vmlldy9wYWNrYWdlVmlldy9zcmMvY29tL3BhY2thZ2UxL0Zvcm0xLmphdmEKQEAgLTAsMCArMSw0IEBACitwYWNrYWdlIGNvbS5wYWNrYWdlMTsKKworcHVibGljIGNsYXNzIEZvcm0xIHsKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wcm9qZWN0Vmlldy9wYWNrYWdlVmlldy9zcmMvY29tL3BhY2thZ2UxL0Zvcm0yLmZvcm0gYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHJvamVjdFZpZXcvcGFja2FnZVZpZXcvc3JjL2NvbS9wYWNrYWdlMS9Gb3JtMi5mb3JtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQzNTM1ZjUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHJvamVjdFZpZXcvcGFja2FnZVZpZXcvc3JjL2NvbS9wYWNrYWdlMS9Gb3JtMi5mb3JtCkBAIC0wLDAgKzEsMiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxmb3JtIHZlcnNpb249IjEiIHhtbG5zPSJodHRwOi8vd3d3LmludGVsbGlqLmNvbS91aWRlc2lnbmVyL2Zvcm0vIi8+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3Byb2plY3RWaWV3L3BhY2thZ2VWaWV3L3NyYy9qYXZhL0NsYXNzMS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3Byb2plY3RWaWV3L3BhY2thZ2VWaWV3L3NyYy9qYXZhL0NsYXNzMS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlmYzVmM2YKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHJvamVjdFZpZXcvcGFja2FnZVZpZXcvc3JjL2phdmEvQ2xhc3MxLmphdmEKQEAgLTAsMCArMSw0IEBACitwYWNrYWdlIGNvbS5wYWNrYWdlMTsKKworcHVibGljIGNsYXNzIENsYXNzMSB7Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHJvamVjdFZpZXcvcGFja2FnZVZpZXcvc3JjL2phdmF4L3NlcnZsZXQvQ2xhc3MxLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHJvamVjdFZpZXcvcGFja2FnZVZpZXcvc3JjL2phdmF4L3NlcnZsZXQvQ2xhc3MxLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWZjNWYzZgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wcm9qZWN0Vmlldy9wYWNrYWdlVmlldy9zcmMvamF2YXgvc2VydmxldC9DbGFzczEuamF2YQpAQCAtMCwwICsxLDQgQEAKK3BhY2thZ2UgY29tLnBhY2thZ2UxOworCitwdWJsaWMgY2xhc3MgQ2xhc3MxIHsKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wcm9qZWN0Vmlldy9zZWxlY3RQcm9qZWN0L3NyYy9jb20vcGFja2FnZTEvQ2xhc3MxLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHJvamVjdFZpZXcvc2VsZWN0UHJvamVjdC9zcmMvY29tL3BhY2thZ2UxL0NsYXNzMS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkyZDRlYTcKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHJvamVjdFZpZXcvc2VsZWN0UHJvamVjdC9zcmMvY29tL3BhY2thZ2UxL0NsYXNzMS5qYXZhCkBAIC0wLDAgKzEsMTIgQEAKK3BhY2thZ2UgY29tLnBhY2thZ2UxOworCitwdWJsaWMgY2xhc3MgQ2xhc3MxIHsKKworICBwcml2YXRlIFN0cmluZyBteUZpZWxkOworICAKKyAgcHJpdmF0ZSB2b2lkIG1ldGhvZCgpIHsKKyAgCisgIH0KKyAgCisKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wcm9qZWN0Vmlldy9zZWxlY3RQcm9qZWN0L3NyYy9jb20vcGFja2FnZTEvQ2xhc3MyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHJvamVjdFZpZXcvc2VsZWN0UHJvamVjdC9zcmMvY29tL3BhY2thZ2UxL0NsYXNzMi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAwYzg5M2MKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHJvamVjdFZpZXcvc2VsZWN0UHJvamVjdC9zcmMvY29tL3BhY2thZ2UxL0NsYXNzMi5qYXZhCkBAIC0wLDAgKzEsOCBAQAorcGFja2FnZSBjb20ucGFja2FnZTE7CisKK3B1YmxpYyBjbGFzcyBDbGFzczIgeworfQorCitjbGFzcyBDbGFzczMgeworCit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHJvamVjdFZpZXcvc2VsZWN0UHJvamVjdC9zcmMvY29tL3BhY2thZ2UxL0NsYXNzNC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3Byb2plY3RWaWV3L3NlbGVjdFByb2plY3Qvc3JjL2NvbS9wYWNrYWdlMS9DbGFzczQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43M2VlYjkzCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3Byb2plY3RWaWV3L3NlbGVjdFByb2plY3Qvc3JjL2NvbS9wYWNrYWdlMS9DbGFzczQuamF2YQpAQCAtMCwwICsxLDQgQEAKK3BhY2thZ2UgY29tLnBhY2thZ2UxOworCitwdWJsaWMgQ2xhc3M0IHsKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wcm9qZWN0Vmlldy9zZWxlY3RQcm9qZWN0L3NyYy9jb20vcGFja2FnZTEvRm9ybTEuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wcm9qZWN0Vmlldy9zZWxlY3RQcm9qZWN0L3NyYy9jb20vcGFja2FnZTEvRm9ybTEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNGZiMGFkCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3Byb2plY3RWaWV3L3NlbGVjdFByb2plY3Qvc3JjL2NvbS9wYWNrYWdlMS9Gb3JtMS5qYXZhCkBAIC0wLDAgKzEsNCBAQAorcGFja2FnZSBjb20ucGFja2FnZTE7CisKK3B1YmxpYyBjbGFzcyBGb3JtMSB7Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHJvamVjdFZpZXcvc2hvd0NsYXNzTWVtYmVycy9zcmMvY29tL3BhY2thZ2UxL0NsYXNzMS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3Byb2plY3RWaWV3L3Nob3dDbGFzc01lbWJlcnMvc3JjL2NvbS9wYWNrYWdlMS9DbGFzczEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNTBlMzc0Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3Byb2plY3RWaWV3L3Nob3dDbGFzc01lbWJlcnMvc3JjL2NvbS9wYWNrYWdlMS9DbGFzczEuamF2YQpAQCAtMCwwICsxLDE1IEBACitwYWNrYWdlIGNvbS5wYWNrYWdlMTsKKworcHVibGljIGNsYXNzIENsYXNzMSB7CisgIHByaXZhdGUgYm9vbGVhbiBteUZpZWxkMTsKKyAgcHVibGljIGJvb2xlYW4gbXlGaWVsZDI7CisgIAorICBwdWJsaWMgaW50IGdldFZhbHVlKCl7CisgICByZXR1cm4gMDsKKyAgfQorICAKKyAgcHVibGljIGNsYXNzIElubmVyQ2xhc3N7CisgICAgcHVibGljIGludCBteUlubmVyQ2xhc3NGaWVsZDsKKyAgfQorICAKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wcm9qZWN0Vmlldy9zaG93Q2xhc3NNZW1iZXJzL3NyYy9jb20vcGFja2FnZTEvQ2xhc3MyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHJvamVjdFZpZXcvc2hvd0NsYXNzTWVtYmVycy9zcmMvY29tL3BhY2thZ2UxL0NsYXNzMi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM5ZDJhYWIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHJvamVjdFZpZXcvc2hvd0NsYXNzTWVtYmVycy9zcmMvY29tL3BhY2thZ2UxL0NsYXNzMi5qYXZhCkBAIC0wLDAgKzEsNTMgQEAKK3BhY2thZ2UgY29tLnBhY2thZ2UxOworCitwdWJsaWMgY2xhc3MgQ2xhc3MyIHsKKyAgcHJpdmF0ZSBib29sZWFuIG15RmllbGQxOworICBwdWJsaWMgYm9vbGVhbiBteUZpZWxkMjsKKyAgcHVibGljIGJvb2xlYW4gbXlGaWVsZDM7CisgIHB1YmxpYyBib29sZWFuIG15RmllbGQ0OworCisgIHB1YmxpYyBpbnQgZ2V0VmFsdWUoKSB7CisgICAgcmV0dXJuIDA7CisgIH0KKworICBwdWJsaWMgY2xhc3MgSW5uZXJDbGFzczEgeworICAgIHB1YmxpYyBpbnQgbXlJbm5lckNsYXNzRmllbGQ7CisKKyAgICBwdWJsaWMgY2xhc3MgSW5uZXJDbGFzczEyIHsKKyAgICAgIHB1YmxpYyBpbnQgbXlJbm5lckNsYXNzRmllbGQ7CisKKyAgICAgIHB1YmxpYyBjbGFzcyBJbm5lckNsYXNzMTMgeworICAgICAgICBwdWJsaWMgaW50IG15SW5uZXJDbGFzc0ZpZWxkOworCisgICAgICAgIHB1YmxpYyBjbGFzcyBJbm5lckNsYXNzMTQgeworICAgICAgICAgIHB1YmxpYyBpbnQgbXlJbm5lckNsYXNzRmllbGQ7CisKKyAgICAgICAgICBwdWJsaWMgY2xhc3MgSW5uZXJDbGFzczE1IHsKKyAgICAgICAgICAgIHB1YmxpYyBpbnQgbXlJbm5lckNsYXNzRmllbGQ7CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICB9CisgICAgfQorICB9CisKKyAgcHVibGljIGNsYXNzIElubmVyQ2xhc3MyIHsKKyAgICBwdWJsaWMgaW50IG15SW5uZXJDbGFzc0ZpZWxkOworCisgICAgcHVibGljIGNsYXNzIElubmVyQ2xhc3MyMiB7CisgICAgICBwdWJsaWMgaW50IG15SW5uZXJDbGFzc0ZpZWxkOworCisgICAgICBwdWJsaWMgY2xhc3MgSW5uZXJDbGFzczIzIHsKKyAgICAgICAgcHVibGljIGludCBteUlubmVyQ2xhc3NGaWVsZDsKKworICAgICAgICBwdWJsaWMgY2xhc3MgSW5uZXJDbGFzczI0IHsKKyAgICAgICAgICBwdWJsaWMgaW50IG15RmllbGRUb1NlbGVjdDsKKworICAgICAgICAgIHB1YmxpYyBjbGFzcyBJbm5lckNsYXNzMjUgeworICAgICAgICAgICAgcHVibGljIGludCBteUlubmVyQ2xhc3NGaWVsZDsKKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisgIH0KKworfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3Byb2plY3RWaWV3L3N0YW5kYXJkUHJvdmlkZXJzL3NyYy9jb20vcGFja2FnZTEvQ2xhc3MxLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHJvamVjdFZpZXcvc3RhbmRhcmRQcm92aWRlcnMvc3JjL2NvbS9wYWNrYWdlMS9DbGFzczEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZmM1ZjNmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3Byb2plY3RWaWV3L3N0YW5kYXJkUHJvdmlkZXJzL3NyYy9jb20vcGFja2FnZTEvQ2xhc3MxLmphdmEKQEAgLTAsMCArMSw0IEBACitwYWNrYWdlIGNvbS5wYWNrYWdlMTsKKworcHVibGljIGNsYXNzIENsYXNzMSB7Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHJvamVjdFZpZXcvc3RhbmRhcmRQcm92aWRlcnMvc3JjL2NvbS9wYWNrYWdlMS9DbGFzczIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wcm9qZWN0Vmlldy9zdGFuZGFyZFByb3ZpZGVycy9zcmMvY29tL3BhY2thZ2UxL0NsYXNzMi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAwYzg5M2MKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHJvamVjdFZpZXcvc3RhbmRhcmRQcm92aWRlcnMvc3JjL2NvbS9wYWNrYWdlMS9DbGFzczIuamF2YQpAQCAtMCwwICsxLDggQEAKK3BhY2thZ2UgY29tLnBhY2thZ2UxOworCitwdWJsaWMgY2xhc3MgQ2xhc3MyIHsKK30KKworY2xhc3MgQ2xhc3MzIHsKKworfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3Byb2plY3RWaWV3L3N0YW5kYXJkUHJvdmlkZXJzL3NyYy9jb20vcGFja2FnZTEvQ2xhc3M0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHJvamVjdFZpZXcvc3RhbmRhcmRQcm92aWRlcnMvc3JjL2NvbS9wYWNrYWdlMS9DbGFzczQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43M2VlYjkzCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3Byb2plY3RWaWV3L3N0YW5kYXJkUHJvdmlkZXJzL3NyYy9jb20vcGFja2FnZTEvQ2xhc3M0LmphdmEKQEAgLTAsMCArMSw0IEBACitwYWNrYWdlIGNvbS5wYWNrYWdlMTsKKworcHVibGljIENsYXNzNCB7Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHJvamVjdFZpZXcvc3RhbmRhcmRQcm92aWRlcnMvc3JjL2NvbS9wYWNrYWdlMS9Gb3JtMS5mb3JtIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3Byb2plY3RWaWV3L3N0YW5kYXJkUHJvdmlkZXJzL3NyYy9jb20vcGFja2FnZTEvRm9ybTEuZm9ybQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNDA3ZmZlCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3Byb2plY3RWaWV3L3N0YW5kYXJkUHJvdmlkZXJzL3NyYy9jb20vcGFja2FnZTEvRm9ybTEuZm9ybQpAQCAtMCwwICsxLDIgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8Zm9ybSB4bWxucz0iaHR0cDovL3d3dy5pbnRlbGxpai5jb20vdWlkZXNpZ25lci9mb3JtLyIgdmVyc2lvbj0iMSIgYmluZC10by1jbGFzcz0iY29tLnBhY2thZ2UxLkZvcm0xIi8+CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHJvamVjdFZpZXcvc3RhbmRhcmRQcm92aWRlcnMvc3JjL2NvbS9wYWNrYWdlMS9Gb3JtMS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3Byb2plY3RWaWV3L3N0YW5kYXJkUHJvdmlkZXJzL3NyYy9jb20vcGFja2FnZTEvRm9ybTEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNGZiMGFkCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3Byb2plY3RWaWV3L3N0YW5kYXJkUHJvdmlkZXJzL3NyYy9jb20vcGFja2FnZTEvRm9ybTEuamF2YQpAQCAtMCwwICsxLDQgQEAKK3BhY2thZ2UgY29tLnBhY2thZ2UxOworCitwdWJsaWMgY2xhc3MgRm9ybTEgeworfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3Byb2plY3RWaWV3L3N0YW5kYXJkUHJvdmlkZXJzL3NyYy9jb20vcGFja2FnZTEvRm9ybTIuZm9ybSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wcm9qZWN0Vmlldy9zdGFuZGFyZFByb3ZpZGVycy9zcmMvY29tL3BhY2thZ2UxL0Zvcm0yLmZvcm0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDM1MzVmNQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wcm9qZWN0Vmlldy9zdGFuZGFyZFByb3ZpZGVycy9zcmMvY29tL3BhY2thZ2UxL0Zvcm0yLmZvcm0KQEAgLTAsMCArMSwyIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPGZvcm0gdmVyc2lvbj0iMSIgeG1sbnM9Imh0dHA6Ly93d3cuaW50ZWxsaWouY29tL3VpZGVzaWduZXIvZm9ybS8iLz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHJvamVjdFZpZXcvdG9Eby9zcmMvcGFja2FnZTEvSmF2YUNsYXNzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHJvamVjdFZpZXcvdG9Eby9zcmMvcGFja2FnZTEvSmF2YUNsYXNzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTQ2YjBmMAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wcm9qZWN0Vmlldy90b0RvL3NyYy9wYWNrYWdlMS9KYXZhQ2xhc3MuamF2YQpAQCAtMCwwICsxLDExIEBACitwYWNrYWdlIHNyYy5wYWNrYWdlMTsKKworcHVibGljIGNsYXNzIEphdmFDbGFzcyB7CisKKyAvL3RvZG86IENsYXNzIGJvZHkKKyAgcHJvdGVjdGVkIE9iamVjdCBjbG9uZSgpIHRocm93cyBDbG9uZU5vdFN1cHBvcnRlZEV4Y2VwdGlvbiB7CisvL3RvZG86IE1ldGhvZCBib2R5CisgICAgcmV0dXJuIHN1cGVyLmNsb25lKCk7CisgIH0KKworfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3Byb2plY3RWaWV3L3RvRG8vc3JjL3BhY2thZ2UxL3BhY2thZ2UyL0phdmFDbGFzcy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3Byb2plY3RWaWV3L3RvRG8vc3JjL3BhY2thZ2UxL3BhY2thZ2UyL0phdmFDbGFzcy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRkNzg0MjIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHJvamVjdFZpZXcvdG9Eby9zcmMvcGFja2FnZTEvcGFja2FnZTIvSmF2YUNsYXNzLmphdmEKQEAgLTAsMCArMSwxMSBAQAorcGFja2FnZSBzcmMucGFja2FnZTEucGFja2FnZTI7CisKK3B1YmxpYyBjbGFzcyBKYXZhQ2xhc3MgeworCisgIC8vdG9kbzogQ2xhc3MgYm9keQorICAgcHJvdGVjdGVkIE9iamVjdCBjbG9uZSgpIHRocm93cyBDbG9uZU5vdFN1cHBvcnRlZEV4Y2VwdGlvbiB7CisvL3RvZG86IE1ldGhvZCBib2R5CisgICAgIHJldHVybiBzdXBlci5jbG9uZSgpOworICAgfQorCit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHJvamVjdFZpZXcvdG9Eby9zcmMvcGFja2FnZTMvSmF2YUNsYXNzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHJvamVjdFZpZXcvdG9Eby9zcmMvcGFja2FnZTMvSmF2YUNsYXNzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmM3NzYyNQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wcm9qZWN0Vmlldy90b0RvL3NyYy9wYWNrYWdlMy9KYXZhQ2xhc3MuamF2YQpAQCAtMCwwICsxLDExIEBACitwYWNrYWdlIHNyYy5wYWNrYWdlMzsKKworcHVibGljIGNsYXNzIEphdmFDbGFzcyB7CisKKyAgLy90b2RvOiBDbGFzcyBib2R5CisgICBwcm90ZWN0ZWQgT2JqZWN0IGNsb25lKCkgdGhyb3dzIENsb25lTm90U3VwcG9ydGVkRXhjZXB0aW9uIHsKKy8vdG9kbzogTWV0aG9kIGJvZHkKKyAgICAgcmV0dXJuIHN1cGVyLmNsb25lKCk7CisgICB9CisKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wcm9qZWN0Vmlldy90b0RvL3htbEZpbGUueG1sIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3Byb2plY3RWaWV3L3RvRG8veG1sRmlsZS54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDIwNDBhNAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wcm9qZWN0Vmlldy90b0RvL3htbEZpbGUueG1sCkBAIC0wLDAgKzEsMyBAQAorPHRhZz4KKyAgPCEtLXRvZG8tLT4KKzwvdGFnPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wcm9qZWN0Vmlldy90b0RvMS9zcmMvcGFja2FnZTEvcGFja2FnZTIvSmF2YUNsYXNzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHJvamVjdFZpZXcvdG9EbzEvc3JjL3BhY2thZ2UxL3BhY2thZ2UyL0phdmFDbGFzcy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRkNzg0MjIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHJvamVjdFZpZXcvdG9EbzEvc3JjL3BhY2thZ2UxL3BhY2thZ2UyL0phdmFDbGFzcy5qYXZhCkBAIC0wLDAgKzEsMTEgQEAKK3BhY2thZ2Ugc3JjLnBhY2thZ2UxLnBhY2thZ2UyOworCitwdWJsaWMgY2xhc3MgSmF2YUNsYXNzIHsKKworICAvL3RvZG86IENsYXNzIGJvZHkKKyAgIHByb3RlY3RlZCBPYmplY3QgY2xvbmUoKSB0aHJvd3MgQ2xvbmVOb3RTdXBwb3J0ZWRFeGNlcHRpb24geworLy90b2RvOiBNZXRob2QgYm9keQorICAgICByZXR1cm4gc3VwZXIuY2xvbmUoKTsKKyAgIH0KKworfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3Byb2plY3RWaWV3L3VwZGF0ZVByb2plY3RWaWV3L3NyYy9jb20vcGFja2FnZTEvQ2xhc3MxLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHJvamVjdFZpZXcvdXBkYXRlUHJvamVjdFZpZXcvc3JjL2NvbS9wYWNrYWdlMS9DbGFzczEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZmM1ZjNmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3Byb2plY3RWaWV3L3VwZGF0ZVByb2plY3RWaWV3L3NyYy9jb20vcGFja2FnZTEvQ2xhc3MxLmphdmEKQEAgLTAsMCArMSw0IEBACitwYWNrYWdlIGNvbS5wYWNrYWdlMTsKKworcHVibGljIGNsYXNzIENsYXNzMSB7Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHJvamVjdFZpZXcvdXBkYXRlUHJvamVjdFZpZXcvc3JjL2NvbS9wYWNrYWdlMS9DbGFzczIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wcm9qZWN0Vmlldy91cGRhdGVQcm9qZWN0Vmlldy9zcmMvY29tL3BhY2thZ2UxL0NsYXNzMi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAwYzg5M2MKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHJvamVjdFZpZXcvdXBkYXRlUHJvamVjdFZpZXcvc3JjL2NvbS9wYWNrYWdlMS9DbGFzczIuamF2YQpAQCAtMCwwICsxLDggQEAKK3BhY2thZ2UgY29tLnBhY2thZ2UxOworCitwdWJsaWMgY2xhc3MgQ2xhc3MyIHsKK30KKworY2xhc3MgQ2xhc3MzIHsKKworfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3Byb2plY3RWaWV3L3VwZGF0ZVByb2plY3RWaWV3L3NyYy9jb20vcGFja2FnZTEvQ2xhc3M0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHJvamVjdFZpZXcvdXBkYXRlUHJvamVjdFZpZXcvc3JjL2NvbS9wYWNrYWdlMS9DbGFzczQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43M2VlYjkzCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3Byb2plY3RWaWV3L3VwZGF0ZVByb2plY3RWaWV3L3NyYy9jb20vcGFja2FnZTEvQ2xhc3M0LmphdmEKQEAgLTAsMCArMSw0IEBACitwYWNrYWdlIGNvbS5wYWNrYWdlMTsKKworcHVibGljIENsYXNzNCB7Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHJvamVjdFZpZXcvdXBkYXRlUHJvamVjdFZpZXcvc3JjL2NvbS9wYWNrYWdlMS9Gb3JtMS5mb3JtIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3Byb2plY3RWaWV3L3VwZGF0ZVByb2plY3RWaWV3L3NyYy9jb20vcGFja2FnZTEvRm9ybTEuZm9ybQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNDA3ZmZlCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3Byb2plY3RWaWV3L3VwZGF0ZVByb2plY3RWaWV3L3NyYy9jb20vcGFja2FnZTEvRm9ybTEuZm9ybQpAQCAtMCwwICsxLDIgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8Zm9ybSB4bWxucz0iaHR0cDovL3d3dy5pbnRlbGxpai5jb20vdWlkZXNpZ25lci9mb3JtLyIgdmVyc2lvbj0iMSIgYmluZC10by1jbGFzcz0iY29tLnBhY2thZ2UxLkZvcm0xIi8+CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHJvamVjdFZpZXcvdXBkYXRlUHJvamVjdFZpZXcvc3JjL2NvbS9wYWNrYWdlMS9Gb3JtMS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3Byb2plY3RWaWV3L3VwZGF0ZVByb2plY3RWaWV3L3NyYy9jb20vcGFja2FnZTEvRm9ybTEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNGZiMGFkCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3Byb2plY3RWaWV3L3VwZGF0ZVByb2plY3RWaWV3L3NyYy9jb20vcGFja2FnZTEvRm9ybTEuamF2YQpAQCAtMCwwICsxLDQgQEAKK3BhY2thZ2UgY29tLnBhY2thZ2UxOworCitwdWJsaWMgY2xhc3MgRm9ybTEgeworfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3Byb2plY3RWaWV3L3VwZGF0ZVByb2plY3RWaWV3L3NyYy9jb20vcGFja2FnZTEvRm9ybTIuZm9ybSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wcm9qZWN0Vmlldy91cGRhdGVQcm9qZWN0Vmlldy9zcmMvY29tL3BhY2thZ2UxL0Zvcm0yLmZvcm0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDM1MzVmNQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wcm9qZWN0Vmlldy91cGRhdGVQcm9qZWN0Vmlldy9zcmMvY29tL3BhY2thZ2UxL0Zvcm0yLmZvcm0KQEAgLTAsMCArMSwyIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPGZvcm0gdmVyc2lvbj0iMSIgeG1sbnM9Imh0dHA6Ly93d3cuaW50ZWxsaWouY29tL3VpZGVzaWduZXIvZm9ybS8iLz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHJvamVjdFZpZXcvdXBkYXRpbmdBZnRlclJlbmFtZS9zcmMvY29tL3BhY2thZ2UxL0NsYXNzMi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3Byb2plY3RWaWV3L3VwZGF0aW5nQWZ0ZXJSZW5hbWUvc3JjL2NvbS9wYWNrYWdlMS9DbGFzczIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjlkZTI5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3Byb2plY3RWaWV3L3VwZGF0aW5nQWZ0ZXJSZW5hbWUvc3JjL2NvbS9wYWNrYWdlMS9DbGFzczIuamF2YQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3Byb2plY3RWaWV3L3VwZGF0aW5nQWZ0ZXJSZW5hbWUvc3JjL2NvbS9wYWNrYWdlMS9Gb3JtMS5mb3JtIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3Byb2plY3RWaWV3L3VwZGF0aW5nQWZ0ZXJSZW5hbWUvc3JjL2NvbS9wYWNrYWdlMS9Gb3JtMS5mb3JtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2OWRlMjkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHJvamVjdFZpZXcvdXBkYXRpbmdBZnRlclJlbmFtZS9zcmMvY29tL3BhY2thZ2UxL0Zvcm0xLmZvcm0KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wcm9qZWN0Vmlldy91cGRhdGluZ0FmdGVyUmVuYW1lL3NyYy9jb20vcGFja2FnZTEvRm9ybTEuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wcm9qZWN0Vmlldy91cGRhdGluZ0FmdGVyUmVuYW1lL3NyYy9jb20vcGFja2FnZTEvRm9ybTEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjlkZTI5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3Byb2plY3RWaWV3L3VwZGF0aW5nQWZ0ZXJSZW5hbWUvc3JjL2NvbS9wYWNrYWdlMS9Gb3JtMS5qYXZhCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHJvamVjdFZpZXcvdXBkYXRpbmdBZnRlclJlbmFtZS9zcmMvY29tL3BhY2thZ2UxL0Zvcm0yLmZvcm0gYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHJvamVjdFZpZXcvdXBkYXRpbmdBZnRlclJlbmFtZS9zcmMvY29tL3BhY2thZ2UxL0Zvcm0yLmZvcm0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY5ZGUyOQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wcm9qZWN0Vmlldy91cGRhdGluZ0FmdGVyUmVuYW1lL3NyYy9jb20vcGFja2FnZTEvRm9ybTIuZm9ybQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3Byb2plY3RWaWV3L3htbFN0cnVjdHVyZVZpZXcvZmlsZTEuZHRkIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3Byb2plY3RWaWV3L3htbFN0cnVjdHVyZVZpZXcvZmlsZTEuZHRkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVhMzQ1NTU3Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3Byb2plY3RWaWV3L3htbFN0cnVjdHVyZVZpZXcvZmlsZTEuZHRkCkBAIC0wLDAgKzEsMjEgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IklTTy04ODU5LTEiPz4KKzwhRUxFTUVOVCBteXBsdWdpbiAoaGVscHNldCk+Cis8IUFUVExJU1QgbXlwbHVnaW4KKyAgICB1cmwgQ0RBVEEgI0lNUExJRUQKKyAgICB2ZXJzaW9uIENEQVRBICNJTVBMSUVEPgorPCFFTEVNRU5UIGhlbHBzZXQgRU1QVFk+Cis8IUFUVExJU1QgaGVscHNldAorICBmaWxlIENEQVRBICNSRVFVSVJFRAorICBwYXRoIENEQVRBICNSRVFVSVJFRD4KKworPCFFTlRJVFkgJSBkcmFmdCAnSUdOT1JFJz4KKyA8IUVOVElUWSAlIGZpbmFsICdJTkNMVURFJz4KKworPCFbJWRyYWZ0O1sKKzwhRUxFTUVOVCBib29rIChjb21tZW50cyosIHRpdGxlLCBib2R5LCBzdXBwbGVtZW50cz8pPgorPCFFTEVNRU5UIGNvbW1lbnRzIEVNUFRZPgorXV0+Cis8IVslZmluYWw7WworPCFFTEVNRU5UIGJvb2sgKHByaWNlLHRpdGxlLCBib2R5LCBzdXBwbGVtZW50cz8pPgorPCFFTEVNRU5UIHByaWNlIEVNUFRZPgorXV0+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3Byb2plY3RWaWV3L3htbFN0cnVjdHVyZVZpZXcvZmlsZTEuaHRtbCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wcm9qZWN0Vmlldy94bWxTdHJ1Y3R1cmVWaWV3L2ZpbGUxLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOThkZmY3NQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wcm9qZWN0Vmlldy94bWxTdHJ1Y3R1cmVWaWV3L2ZpbGUxLmh0bWwKQEAgLTAsMCArMSwxMSBAQAorPEhFQUQ+Cis8VElUTEU+Q1NTIEV4YW1wbGU8L1RJVExFPgorPFNUWUxFIFRZUEU9InRleHQvY3NzIj4KKyAgSDEgeyBmb250LXNpemU6IHgtbGFyZ2U7IGNvbG9yOiByZWQgfQorICBIMiB7IGZvbnQtc2l6ZTogbGFyZ2U7IGNvbG9yOiBibHVlIH0KKzwvU1RZTEU+Cis8Qk9EWT4KKyAgPFA+dGV4dAorICA8QlI+dGV4dDIKKzwvQk9EWT4KKzwvSEVBRD4KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wcm9qZWN0Vmlldy94bWxTdHJ1Y3R1cmVWaWV3L2ZpbGUxLnhtbCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wcm9qZWN0Vmlldy94bWxTdHJ1Y3R1cmVWaWV3L2ZpbGUxLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNThmYjBlCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3Byb2plY3RWaWV3L3htbFN0cnVjdHVyZVZpZXcvZmlsZTEueG1sCkBAIC0wLDAgKzEsMTEgQEAKKzxyb290IG5hbWU9IklERUFfWktNIiBkZWZhdWx0PSJhbGxfZGlzdCIgYmFzZWRpcj0iLiI+CisgIDxhIGF0dHIxPSJ2YWx1ZTEiIGF0dHIyPSJ2YWx1ZTIiPgorICAgIHRleHQKKyAgICA8YSBhdHRyMT0idmFsdWUxIiBhdHRyMj0idmFsdWUyIj4KKyAgICAgIHRleHQyCisgICAgPHRleHQ+PCFbQ0RBVEFbVGV4dCB3aXRoCithIG5ldyBsaW5lXV0+PC90ZXh0PiAgICAgIAorICAgICAgPGIvPgorICAgIDwvYT4KKyAgPC9hPgorPC9yb290PgpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3Byb2plY3RWaWV3L3htbFN0cnVjdHVyZVZpZXcvZmlsZTIuZHRkIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3Byb2plY3RWaWV3L3htbFN0cnVjdHVyZVZpZXcvZmlsZTIuZHRkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNkYmFhNTQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHJvamVjdFZpZXcveG1sU3RydWN0dXJlVmlldy9maWxlMi5kdGQKQEAgLTAsMCArMSw0IEBACis8IUVOVElUWSAlIEhUTUxsYXQxIFBVQkxJQworICAiLS8vVzNDLy9FTlRJVElFUyBMYXRpbiAxIGZvciBYSFRNTC8vRU4iCisgICJ4aHRtbC1sYXQxLW1vZGlmaWVkLmVudCI+CislSFRNTGxhdDE7CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHJvamVjdFZpZXcveG1sU3RydWN0dXJlVmlldy9maWxlMi54bWwgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHJvamVjdFZpZXcveG1sU3RydWN0dXJlVmlldy9maWxlMi54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTIzMDZiYwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wcm9qZWN0Vmlldy94bWxTdHJ1Y3R1cmVWaWV3L2ZpbGUyLnhtbApAQCAtMCwwICsxLDggQEAKKzwhRE9DVFlQRSB0aXRsZSAKKyAgWworPCFFTEVNRU5UIHRpdGxlICgjUENEQVRBIHwgYm9keSkqID4KKzwhRUxFTUVOVCBib2R5IEVNUFRZPgorPCFFTEVNRU5UIHN1cHBsZW1lbnRzIEVNUFRZPgorICBdPgorCis8dGl0bGUvPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wcm9qZWN0Vmlldy94bWxTdHJ1Y3R1cmVWaWV3L3hodG1sLWxhdDEtbW9kaWZpZWQuZW50IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3Byb2plY3RWaWV3L3htbFN0cnVjdHVyZVZpZXcveGh0bWwtbGF0MS1tb2RpZmllZC5lbnQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjJiZWU3NwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wcm9qZWN0Vmlldy94bWxTdHJ1Y3R1cmVWaWV3L3hodG1sLWxhdDEtbW9kaWZpZWQuZW50CkBAIC0wLDAgKzEsMiBAQAorPCFFTlRJVFkgbmJzcCAgICImIzE2MDsiPiA8IS0tIG5vLWJyZWFrIHNwYWNlID0gbm9uLWJyZWFraW5nIHNwYWNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFUrMDBBMCBJU09udW0gLS0+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9hcnJheUluZGV4T3V0T2ZCb3VuZHMvc3JjL2JsYS9CbGEuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvYXJyYXlJbmRleE91dE9mQm91bmRzL3NyYy9ibGEvQmxhLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGIwOTU1YwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvYXJyYXlJbmRleE91dE9mQm91bmRzL3NyYy9ibGEvQmxhLmphdmEKQEAgLTAsMCArMSw0IEBACitwYWNrYWdlIGJsYTsKKworcHVibGljIGNsYXNzIEJsYSB7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9hcnJheUluZGV4T3V0T2ZCb3VuZHMvc3JjL2JsYS9CbHUuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvYXJyYXlJbmRleE91dE9mQm91bmRzL3NyYy9ibGEvQmx1LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTMyODNiMgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvYXJyYXlJbmRleE91dE9mQm91bmRzL3NyYy9ibGEvQmx1LmphdmEKQEAgLTAsMCArMSw0IEBACitwYWNrYWdlIGJsYTsKKworcHVibGljIGNsYXNzIEJsdSB7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9jbGFzc1V0aWwvTWFueUNsYXNzZXMuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvY2xhc3NVdGlsL01hbnlDbGFzc2VzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDYxZGZiNAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvY2xhc3NVdGlsL01hbnlDbGFzc2VzLmphdmEKQEAgLTAsMCArMSw0NyBAQAoraW1wb3J0IGphdmEubGFuZy5Db21wYXJhYmxlOworaW1wb3J0IGphdmEubGFuZy5JbnRlZ2VyOworaW1wb3J0IGphdmEubGFuZy5PdmVycmlkZTsKK2ltcG9ydCBqYXZhLmxhbmcuUnVubmFibGU7CisKK3B1YmxpYyBjbGFzcyBNYW55Q2xhc3NlcyB7CisgIHB1YmxpYyB2b2lkIGZvbygpIHsKKyAgICBSdW5uYWJsZSByID0gbmV3IFJ1bm5hYmxlKCkgeworICAgICAgQE92ZXJyaWRlCisgICAgICBwdWJsaWMgdm9pZCBydW4oKSB7CisgICAgICAgIENvbXBhcmFibGU8SW50ZWdlcj4gYyA9IG5ldyBDb21wYXJhYmxlPEludGVnZXI+KCkgeworICAgICAgICAgIEBPdmVycmlkZQorICAgICAgICAgIHB1YmxpYyBpbnQgY29tcGFyZVRvKEludGVnZXIgbykgeworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgfQorICAgICAgICB9OworICAgICAgfQorICAgIH07CisgICAgCisgICAgY2xhc3MgRm9vTG9jYWwgeworICAgICAgUnVubmFibGUgciA9IG5ldyBSdW5uYWJsZSgpIHsKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKKyAgICAgICAgfQorICAgICAgfTsKKyAgICB9CisgIH0KKyAgCisgIHB1YmxpYyB2b2lkIGJhcigpIHsKKyAgICBjbGFzcyBGb29Mb2NhbCBpbXBsZW1lbnRzIFJ1bm5hYmxlIHsKKyAgICAgIEBPdmVycmlkZQorICAgICAgcHVibGljIHZvaWQgcnVuKCkgeworICAgICAgfQorICAgIH0KKyAgfQorICAKKyAgcHVibGljIGNsYXNzIENoaWxkIHsKKyAgICAKKyAgfQorICAKK30KKworY2xhc3MgTG9jYWwgeworICBwdWJsaWMgc3RhdGljIGNsYXNzIFN1YiB7CisKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvY2xzLzEvVGVzdENsYXNzLmNsYXNzIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9jbHMvMS9UZXN0Q2xhc3MuY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWZlOTJlZQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvY2xzLzEvVGVzdENsYXNzLmNsYXNzCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvY2xzLzIvVGVzdENsYXNzLmNsYXNzIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9jbHMvMi9UZXN0Q2xhc3MuY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTE3YzJiNQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvY2xzLzIvVGVzdENsYXNzLmNsYXNzCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvY2xzL21pcnJvci8kQnVja0NsYXNzLnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvY2xzL21pcnJvci8kQnVja0NsYXNzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOTRmNmUzCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9jbHMvbWlycm9yLyRCdWNrQ2xhc3MudHh0CkBAIC0wLDAgKzEsMTEgQEAKKworICAvLyBJbnRlbGxpSiBBUEkgRGVjb21waWxlciBzdHViIHNvdXJjZSBnZW5lcmF0ZWQgZnJvbSBhIGNsYXNzIGZpbGUKKyAgLy8gSW1wbGVtZW50YXRpb24gb2YgbWV0aG9kcyBpcyBub3QgYXZhaWxhYmxlCisKK3BhY2thZ2UgcGtnOworCitjbGFzcyAkQnVja0NsYXNzIHsKKyAgICAkQnVja0NsYXNzKCkgeyAvKiBjb21waWxlZCBjb2RlICovIH0KKworICAgIHN0YXRpYyBwa2cuJEJ1Y2tDbGFzcyBnZXRJbnN0YW5jZSgpIHsgLyogY29tcGlsZWQgY29kZSAqLyB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL2Nscy9taXJyb3IvQW5ub3RhdGlvbnMudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9jbHMvbWlycm9yL0Fubm90YXRpb25zLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YmJlMzg0Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9jbHMvbWlycm9yL0Fubm90YXRpb25zLnR4dApAQCAtMCwwICsxLDU4IEBACisKKyAgLy8gSW50ZWxsaUogQVBJIERlY29tcGlsZXIgc3R1YiBzb3VyY2UgZ2VuZXJhdGVkIGZyb20gYSBjbGFzcyBmaWxlCisgIC8vIEltcGxlbWVudGF0aW9uIG9mIG1ldGhvZHMgaXMgbm90IGF2YWlsYWJsZQorCitwYWNrYWdlIHBrZzsKKworYWJzdHJhY3QgY2xhc3MgQW5ub3RhdGlvbnMgeworICAgIEFubm90YXRpb25zKCkgeyAvKiBjb21waWxlZCBjb2RlICovIH0KKworICAgIEBwa2cuQW5ub3RhdGlvbnMuQTEKKyAgICBhYnN0cmFjdCB2b2lkIG0xKCk7CisKKyAgICBAcGtnLkFubm90YXRpb25zLkEyCisgICAgYWJzdHJhY3Qgdm9pZCBtMmEoKTsKKworICAgIEBwa2cuQW5ub3RhdGlvbnMuQTIoIisiKQorICAgIGFic3RyYWN0IHZvaWQgbTJiKCk7CisKKyAgICBAcGtnLkFubm90YXRpb25zLkEzKGExID0gQHBrZy5Bbm5vdGF0aW9ucy5BMSwgYTIgPSBAcGtnLkFubm90YXRpb25zLkEyKQorICAgIGFic3RyYWN0IHZvaWQgbTMoKTsKKworICAgIEBwa2cuQW5ub3RhdGlvbnMuQTQKKyAgICBhYnN0cmFjdCB2b2lkIG00YSgpOworCisgICAgQHBrZy5Bbm5vdGF0aW9ucy5BNChpZHMgPSB7NDIsIDg0fSkKKyAgICBhYnN0cmFjdCB2b2lkIG00YigpOworCisgICAgc3RhdGljIEBpbnRlcmZhY2UgSW5kZXRlcm1pbmF0ZUFubm8geworICAgICAgICBmbG9hdCBmMSgpIGRlZmF1bHQgLTEuMGYgLyAwLjA7CisKKyAgICAgICAgZmxvYXQgZjIoKSBkZWZhdWx0IDAuMGYgLyAwLjA7CisKKyAgICAgICAgZmxvYXQgZjMoKSBkZWZhdWx0IDEuMGYgLyAwLjA7CisKKyAgICAgICAgZG91YmxlIGQxKCkgZGVmYXVsdCAtMS4wIC8gMC4wOworCisgICAgICAgIGRvdWJsZSBkMigpIGRlZmF1bHQgMC4wZCAvIDAuMDsKKworICAgICAgICBkb3VibGUgZDMoKSBkZWZhdWx0IDEuMCAvIDAuMDsKKyAgICB9CisKKyAgICBzdGF0aWMgQGludGVyZmFjZSBBNCB7CisgICAgICAgIGludFtdIGlkcygpIGRlZmF1bHQge307CisgICAgfQorCisgICAgc3RhdGljIEBpbnRlcmZhY2UgQTMgeworICAgICAgICBwa2cuQW5ub3RhdGlvbnMuQTEgYTEoKTsKKworICAgICAgICBwa2cuQW5ub3RhdGlvbnMuQTIgYTIoKTsKKyAgICB9CisKKyAgICBzdGF0aWMgQGludGVyZmFjZSBBMiB7CisgICAgICAgIGphdmEubGFuZy5TdHJpbmcgdmFsdWUoKSBkZWZhdWx0ICItIjsKKyAgICB9CisKKyAgICBzdGF0aWMgQGludGVyZmFjZSBBMSB7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvY2xzL21pcnJvci9CdWNrQ2xhc3MkLnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvY2xzL21pcnJvci9CdWNrQ2xhc3MkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40M2Y1YTBiCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9jbHMvbWlycm9yL0J1Y2tDbGFzcyQudHh0CkBAIC0wLDAgKzEsMTEgQEAKKworICAvLyBJbnRlbGxpSiBBUEkgRGVjb21waWxlciBzdHViIHNvdXJjZSBnZW5lcmF0ZWQgZnJvbSBhIGNsYXNzIGZpbGUKKyAgLy8gSW1wbGVtZW50YXRpb24gb2YgbWV0aG9kcyBpcyBub3QgYXZhaWxhYmxlCisKK3BhY2thZ2UgcGtnOworCitjbGFzcyBCdWNrQ2xhc3MkIHsKKyAgICBCdWNrQ2xhc3MkKCkgeyAvKiBjb21waWxlZCBjb2RlICovIH0KKworICAgIHN0YXRpYyBwa2cuQnVja0NsYXNzJCBnZXRJbnN0YW5jZSgpIHsgLyogY29tcGlsZWQgY29kZSAqLyB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9jbHMvbWlycm9yL0RlcHJlY2F0ZWQudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9jbHMvbWlycm9yL0RlcHJlY2F0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVmYTMzZmIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL2Nscy9taXJyb3IvRGVwcmVjYXRlZC50eHQKQEAgLTAsMCArMSwyMiBAQAorCisgIC8vIEludGVsbGlKIEFQSSBEZWNvbXBpbGVyIHN0dWIgc291cmNlIGdlbmVyYXRlZCBmcm9tIGEgY2xhc3MgZmlsZQorICAvLyBJbXBsZW1lbnRhdGlvbiBvZiBtZXRob2RzIGlzIG5vdCBhdmFpbGFibGUKKworcGFja2FnZSBwa2c7CisKKy8qKgorICogQGRlcHJlY2F0ZWQKKyAqLworY2xhc3MgRGVwcmVjYXRlZCB7CisgICAgLyoqCisgICAgICogQGRlcHJlY2F0ZWQKKyAgICAgKi8KKyAgICBpbnQgZjsKKworICAgIERlcHJlY2F0ZWQoKSB7IC8qIGNvbXBpbGVkIGNvZGUgKi8gfQorCisgICAgLyoqCisgICAgICogQGRlcHJlY2F0ZWQKKyAgICAgKi8KKyAgICB2b2lkIG0oKSB7IC8qIGNvbXBpbGVkIGNvZGUgKi8gfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvY2xzL21pcnJvci9FQTQwNTY4LnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvY2xzL21pcnJvci9FQTQwNTY4LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YjgyZDgxCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9jbHMvbWlycm9yL0VBNDA1NjgudHh0CkBAIC0wLDAgKzEsMzEgQEAKKworICAvLyBJbnRlbGxpSiBBUEkgRGVjb21waWxlciBzdHViIHNvdXJjZSBnZW5lcmF0ZWQgZnJvbSBhIGNsYXNzIGZpbGUKKyAgLy8gSW1wbGVtZW50YXRpb24gb2YgbWV0aG9kcyBpcyBub3QgYXZhaWxhYmxlCisKK3BhY2thZ2UgY29tLmdvb2dsZS5hbmRyb2lkLm1hcHM7CisKK3B1YmxpYyBjbGFzcyBPdmVybGF5SXRlbSB7CisgICAgcHJvdGVjdGVkIGZpbmFsIGNvbS5nb29nbGUuYW5kcm9pZC5tYXBzLkdlb1BvaW50IG1Qb2ludDsKKyAgICBwcm90ZWN0ZWQgZmluYWwgamF2YS5sYW5nLlN0cmluZyBtVGl0bGU7CisgICAgcHJvdGVjdGVkIGZpbmFsIGphdmEubGFuZy5TdHJpbmcgbVNuaXBwZXQ7CisgICAgcHJvdGVjdGVkIGFuZHJvaWQuZ3JhcGhpY3MuZHJhd2FibGUuRHJhd2FibGUgbU1hcmtlcjsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBJVEVNX1NUQVRFX0ZPQ1VTRURfTUFTSyA9IDQ7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgSVRFTV9TVEFURV9TRUxFQ1RFRF9NQVNLID0gMjsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBJVEVNX1NUQVRFX1BSRVNTRURfTUFTSyA9IDE7CisKKyAgICBwdWJsaWMgT3ZlcmxheUl0ZW0oY29tLmdvb2dsZS5hbmRyb2lkLm1hcHMuR2VvUG9pbnQgZ2VvUG9pbnQsIGphdmEubGFuZy5TdHJpbmcgcywgamF2YS5sYW5nLlN0cmluZyBzMSkgeyAvKiBjb21waWxlZCBjb2RlICovIH0KKworICAgIHB1YmxpYyB2b2lkIHNldE1hcmtlcihhbmRyb2lkLmdyYXBoaWNzLmRyYXdhYmxlLkRyYXdhYmxlIGRyYXdhYmxlKSB7IC8qIGNvbXBpbGVkIGNvZGUgKi8gfQorCisgICAgcHVibGljIGFuZHJvaWQuZ3JhcGhpY3MuZHJhd2FibGUuRHJhd2FibGUgZ2V0TWFya2VyKGludCBpKSB7IC8qIGNvbXBpbGVkIGNvZGUgKi8gfQorCisgICAgcHVibGljIHN0YXRpYyB2b2lkIHNldFN0YXRlKGFuZHJvaWQuZ3JhcGhpY3MuZHJhd2FibGUuRHJhd2FibGUgZHJhd2FibGUsIGludCBpKSB7IC8qIGNvbXBpbGVkIGNvZGUgKi8gfQorCisgICAgcHVibGljIGphdmEubGFuZy5TdHJpbmcgZ2V0VGl0bGUoKSB7IC8qIGNvbXBpbGVkIGNvZGUgKi8gfQorCisgICAgcHVibGljIGphdmEubGFuZy5TdHJpbmcgZ2V0U25pcHBldCgpIHsgLyogY29tcGlsZWQgY29kZSAqLyB9CisKKyAgICBwdWJsaWMgY29tLmdvb2dsZS5hbmRyb2lkLm1hcHMuR2VvUG9pbnQgZ2V0UG9pbnQoKSB7IC8qIGNvbXBpbGVkIGNvZGUgKi8gfQorCisgICAgcHVibGljIGphdmEubGFuZy5TdHJpbmcgcm91dGFibGVBZGRyZXNzKCkgeyAvKiBjb21waWxlZCBjb2RlICovIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL2Nscy9taXJyb3IvRW1wdHlFbnVtLnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvY2xzL21pcnJvci9FbXB0eUVudW0udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgwOGNjNTUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL2Nscy9taXJyb3IvRW1wdHlFbnVtLnR4dApAQCAtMCwwICsxLDE1IEBACisKKyAgLy8gSW50ZWxsaUogQVBJIERlY29tcGlsZXIgc3R1YiBzb3VyY2UgZ2VuZXJhdGVkIGZyb20gYSBjbGFzcyBmaWxlCisgIC8vIEltcGxlbWVudGF0aW9uIG9mIG1ldGhvZHMgaXMgbm90IGF2YWlsYWJsZQorCitwYWNrYWdlIHBrZzsKKworZW51bSBFbXB0eUVudW0geworICAgIDsKKworICAgIHB1YmxpYyBzdGF0aWMgcGtnLkVtcHR5RW51bVtdIHZhbHVlcygpIHsgLyogY29tcGlsZWQgY29kZSAqLyB9CisKKyAgICBwdWJsaWMgc3RhdGljIHBrZy5FbXB0eUVudW0gdmFsdWVPZihqYXZhLmxhbmcuU3RyaW5nIHMpIHsgLyogY29tcGlsZWQgY29kZSAqLyB9CisKKyAgICBwcml2YXRlIEVtcHR5RW51bSgpIHsgLyogY29tcGlsZWQgY29kZSAqLyB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9jbHMvbWlycm9yL0VudW1XaXRoRmllbGRzLnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvY2xzL21pcnJvci9FbnVtV2l0aEZpZWxkcy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODgyM2YxMAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvY2xzL21pcnJvci9FbnVtV2l0aEZpZWxkcy50eHQKQEAgLTAsMCArMSwxOCBAQAorCisgIC8vIEludGVsbGlKIEFQSSBEZWNvbXBpbGVyIHN0dWIgc291cmNlIGdlbmVyYXRlZCBmcm9tIGEgY2xhc3MgZmlsZQorICAvLyBJbXBsZW1lbnRhdGlvbiBvZiBtZXRob2RzIGlzIG5vdCBhdmFpbGFibGUKKworcGFja2FnZSBwa2c7CisKK3B1YmxpYyBlbnVtIEVudW1XaXRoRmllbGRzIHsKKyAgICBFMSwgRTI7CisKKyAgICBwcml2YXRlIGJvb2xlYW4gZjE7CisgICAgc3RhdGljIGJvb2xlYW4gZjI7CisKKyAgICBwdWJsaWMgc3RhdGljIHBrZy5FbnVtV2l0aEZpZWxkc1tdIHZhbHVlcygpIHsgLyogY29tcGlsZWQgY29kZSAqLyB9CisKKyAgICBwdWJsaWMgc3RhdGljIHBrZy5FbnVtV2l0aEZpZWxkcyB2YWx1ZU9mKGphdmEubGFuZy5TdHJpbmcgcykgeyAvKiBjb21waWxlZCBjb2RlICovIH0KKworICAgIHByaXZhdGUgRW51bVdpdGhGaWVsZHMoKSB7IC8qIGNvbXBpbGVkIGNvZGUgKi8gfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvY2xzL21pcnJvci9FeHRNZXRob2RzLnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvY2xzL21pcnJvci9FeHRNZXRob2RzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNWY5ZTU0Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9jbHMvbWlycm9yL0V4dE1ldGhvZHMudHh0CkBAIC0wLDAgKzEsMTEgQEAKKworICAvLyBJbnRlbGxpSiBBUEkgRGVjb21waWxlciBzdHViIHNvdXJjZSBnZW5lcmF0ZWQgZnJvbSBhIGNsYXNzIGZpbGUKKyAgLy8gSW1wbGVtZW50YXRpb24gb2YgbWV0aG9kcyBpcyBub3QgYXZhaWxhYmxlCisKK3BhY2thZ2UgcGtnOworCitpbnRlcmZhY2UgRXh0TWV0aG9kcyB7CisgICAgdm9pZCBtMSgpOworCisgICAgZGVmYXVsdCB2b2lkIG0yKCkgeyAvKiBjb21waWxlZCBjb2RlICovIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvY2xzL21pcnJvci9NZXRob2RSZWNlaXZlci50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL2Nscy9taXJyb3IvTWV0aG9kUmVjZWl2ZXIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM1YjdmYzUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL2Nscy9taXJyb3IvTWV0aG9kUmVjZWl2ZXIudHh0CkBAIC0wLDAgKzEsMTQgQEAKKworICAvLyBJbnRlbGxpSiBBUEkgRGVjb21waWxlciBzdHViIHNvdXJjZSBnZW5lcmF0ZWQgZnJvbSBhIGNsYXNzIGZpbGUKKyAgLy8gSW1wbGVtZW50YXRpb24gb2YgbWV0aG9kcyBpcyBub3QgYXZhaWxhYmxlCisKK3BhY2thZ2UgcGtnOworCitjbGFzcyBNZXRob2RSZWNlaXZlciB7CisgICAgTWV0aG9kUmVjZWl2ZXIoKSB7IC8qIGNvbXBpbGVkIGNvZGUgKi8gfQorCisgICAgdm9pZCBtKGludCBpKSB7IC8qIGNvbXBpbGVkIGNvZGUgKi8gfQorCisgICAgc3RhdGljIEBpbnRlcmZhY2UgQSB7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvY2xzL21pcnJvci9OZXN0ZWQudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9jbHMvbWlycm9yL05lc3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjIyY2RjMQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvY2xzL21pcnJvci9OZXN0ZWQudHh0CkBAIC0wLDAgKzEsMTcgQEAKKworICAvLyBJbnRlbGxpSiBBUEkgRGVjb21waWxlciBzdHViIHNvdXJjZSBnZW5lcmF0ZWQgZnJvbSBhIGNsYXNzIGZpbGUKKyAgLy8gSW1wbGVtZW50YXRpb24gb2YgbWV0aG9kcyBpcyBub3QgYXZhaWxhYmxlCisKK3BhY2thZ2UgcGtnOworCitwdWJsaWMgY2xhc3MgTmVzdGVkIHsKKyAgICBwdWJsaWMgTmVzdGVkKCkgeyAvKiBjb21waWxlZCBjb2RlICovIH0KKworICAgIHB1YmxpYyBzdGF0aWMgY2xhc3MgSW5uZXIxIHsKKyAgICAgICAgcHVibGljIElubmVyMSgpIHsgLyogY29tcGlsZWQgY29kZSAqLyB9CisKKyAgICAgICAgcHVibGljIGNsYXNzIElubmVyMiB7CisgICAgICAgICAgICBwdWJsaWMgSW5uZXIyKCkgeyAvKiBjb21waWxlZCBjb2RlICovIH0KKyAgICAgICAgfQorICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL2Nscy9taXJyb3IvTm9ybWFsQ2xhc3MudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9jbHMvbWlycm9yL05vcm1hbENsYXNzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MjUzMmNlCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9jbHMvbWlycm9yL05vcm1hbENsYXNzLnR4dApAQCAtMCwwICsxLDE3IEBACisKKyAgLy8gSW50ZWxsaUogQVBJIERlY29tcGlsZXIgc3R1YiBzb3VyY2UgZ2VuZXJhdGVkIGZyb20gYSBjbGFzcyBmaWxlCisgIC8vIEltcGxlbWVudGF0aW9uIG9mIG1ldGhvZHMgaXMgbm90IGF2YWlsYWJsZQorCitwYWNrYWdlIHBrZzsKKworY2xhc3MgTm9ybWFsQ2xhc3MgeworICAgIHByaXZhdGUgZmluYWwgamF2YS5sYW5nLk9iamVjdCBvOworCisgICAgTm9ybWFsQ2xhc3MoKSB7IC8qIGNvbXBpbGVkIGNvZGUgKi8gfQorCisgICAgamF2YS5sYW5nLk9iamVjdCBnZXQoKSB7IC8qIGNvbXBpbGVkIGNvZGUgKi8gfQorCisgICAgcHJpdmF0ZSBzdGF0aWMgY2xhc3MgSW5uZXIgeworICAgICAgICBwcml2YXRlIElubmVyKCkgeyAvKiBjb21waWxlZCBjb2RlICovIH0KKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9jbHMvbWlycm9yL1BhcmFtZXRlck5hbWVzLnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvY2xzL21pcnJvci9QYXJhbWV0ZXJOYW1lcy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzFlNmQ0NgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvY2xzL21pcnJvci9QYXJhbWV0ZXJOYW1lcy50eHQKQEAgLTAsMCArMSwxMyBAQAorCisgIC8vIEludGVsbGlKIEFQSSBEZWNvbXBpbGVyIHN0dWIgc291cmNlIGdlbmVyYXRlZCBmcm9tIGEgY2xhc3MgZmlsZQorICAvLyBJbXBsZW1lbnRhdGlvbiBvZiBtZXRob2RzIGlzIG5vdCBhdmFpbGFibGUKKworcGFja2FnZSBwa2c7CisKK3B1YmxpYyBjbGFzcyBQYXJhbWV0ZXJOYW1lcyB7CisgICAgcHVibGljIFBhcmFtZXRlck5hbWVzKCkgeyAvKiBjb21waWxlZCBjb2RlICovIH0KKworICAgIHB1YmxpYyB2b2lkIHRlc3QoaW50IGksIGludCBpMSwgamF2YS5sYW5nLlN0cmluZyBzKSB7IC8qIGNvbXBpbGVkIGNvZGUgKi8gfQorCisgICAgcHJpdmF0ZSB2b2lkIHRlc3RJbXBsKGludCBpLCBpbnQgaTEsIGphdmEubGFuZy5TdHJpbmcgcywgYm9vbGVhbiBiKSB7IC8qIGNvbXBpbGVkIGNvZGUgKi8gfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvY2xzL21pcnJvci9TaW1wbGVFbnVtLnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvY2xzL21pcnJvci9TaW1wbGVFbnVtLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NTQ3NzBhCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9jbHMvbWlycm9yL1NpbXBsZUVudW0udHh0CkBAIC0wLDAgKzEsMTUgQEAKKworICAvLyBJbnRlbGxpSiBBUEkgRGVjb21waWxlciBzdHViIHNvdXJjZSBnZW5lcmF0ZWQgZnJvbSBhIGNsYXNzIGZpbGUKKyAgLy8gSW1wbGVtZW50YXRpb24gb2YgbWV0aG9kcyBpcyBub3QgYXZhaWxhYmxlCisKK3BhY2thZ2UgcGtnOworCitwdWJsaWMgZW51bSBTaW1wbGVFbnVtIHsKKyAgICBFMSwgRTI7CisKKyAgICBwdWJsaWMgc3RhdGljIHBrZy5TaW1wbGVFbnVtW10gdmFsdWVzKCkgeyAvKiBjb21waWxlZCBjb2RlICovIH0KKworICAgIHB1YmxpYyBzdGF0aWMgcGtnLlNpbXBsZUVudW0gdmFsdWVPZihqYXZhLmxhbmcuU3RyaW5nIHMpIHsgLyogY29tcGlsZWQgY29kZSAqLyB9CisKKyAgICBwcml2YXRlIFNpbXBsZUVudW0oKSB7IC8qIGNvbXBpbGVkIGNvZGUgKi8gfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvY2xzL21pcnJvci9wYWNrYWdlLWluZm8udHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9jbHMvbWlycm9yL3BhY2thZ2UtaW5mby50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWMyNWI5ZgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvY2xzL21pcnJvci9wYWNrYWdlLWluZm8udHh0CkBAIC0wLDAgKzEsOSBAQAorCisgIC8vIEludGVsbGlKIEFQSSBEZWNvbXBpbGVyIHN0dWIgc291cmNlIGdlbmVyYXRlZCBmcm9tIGEgY2xhc3MgZmlsZQorICAvLyBJbXBsZW1lbnRhdGlvbiBvZiBtZXRob2RzIGlzIG5vdCBhdmFpbGFibGUKKworcGFja2FnZSBwa2c7CisKK0Bwa2cuUGtnQW5ubworaW50ZXJmYWNlICQkcGFja2FnZS1pbmZvIC8qIFJlYWwgbmFtZSBpcyAncGFja2FnZS1pbmZvJyAqLyB7Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL2Nscy9taXJyb3IvcGtnLyRCdWNrQ2xhc3MuY2xhc3MgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL2Nscy9taXJyb3IvcGtnLyRCdWNrQ2xhc3MuY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmFjNGYzYgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvY2xzL21pcnJvci9wa2cvJEJ1Y2tDbGFzcy5jbGFzcwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL2Nscy9taXJyb3IvcGtnL0Fubm90YXRpb25zJEExLmNsYXNzIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9jbHMvbWlycm9yL3BrZy9Bbm5vdGF0aW9ucyRBMS5jbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MTIwOTYwCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9jbHMvbWlycm9yL3BrZy9Bbm5vdGF0aW9ucyRBMS5jbGFzcwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL2Nscy9taXJyb3IvcGtnL0Fubm90YXRpb25zJEEyLmNsYXNzIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9jbHMvbWlycm9yL3BrZy9Bbm5vdGF0aW9ucyRBMi5jbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZDk0YWZlCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9jbHMvbWlycm9yL3BrZy9Bbm5vdGF0aW9ucyRBMi5jbGFzcwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL2Nscy9taXJyb3IvcGtnL0Fubm90YXRpb25zJEEzLmNsYXNzIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9jbHMvbWlycm9yL3BrZy9Bbm5vdGF0aW9ucyRBMy5jbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MzBjZmQ5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9jbHMvbWlycm9yL3BrZy9Bbm5vdGF0aW9ucyRBMy5jbGFzcwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL2Nscy9taXJyb3IvcGtnL0Fubm90YXRpb25zJEE0LmNsYXNzIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9jbHMvbWlycm9yL3BrZy9Bbm5vdGF0aW9ucyRBNC5jbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNDBhODRjCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9jbHMvbWlycm9yL3BrZy9Bbm5vdGF0aW9ucyRBNC5jbGFzcwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL2Nscy9taXJyb3IvcGtnL0Fubm90YXRpb25zJEluZGV0ZXJtaW5hdGVBbm5vLmNsYXNzIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9jbHMvbWlycm9yL3BrZy9Bbm5vdGF0aW9ucyRJbmRldGVybWluYXRlQW5uby5jbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNzdiNDk5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9jbHMvbWlycm9yL3BrZy9Bbm5vdGF0aW9ucyRJbmRldGVybWluYXRlQW5uby5jbGFzcwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL2Nscy9taXJyb3IvcGtnL0Fubm90YXRpb25zLmNsYXNzIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9jbHMvbWlycm9yL3BrZy9Bbm5vdGF0aW9ucy5jbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wM2YxZjUyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9jbHMvbWlycm9yL3BrZy9Bbm5vdGF0aW9ucy5jbGFzcwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL2Nscy9taXJyb3IvcGtnL0J1Y2tDbGFzcyQuY2xhc3MgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL2Nscy9taXJyb3IvcGtnL0J1Y2tDbGFzcyQuY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGY0ZDJkZQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvY2xzL21pcnJvci9wa2cvQnVja0NsYXNzJC5jbGFzcwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL2Nscy9taXJyb3IvcGtnL0RlcHJlY2F0ZWQuY2xhc3MgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL2Nscy9taXJyb3IvcGtnL0RlcHJlY2F0ZWQuY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODllODdkNQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvY2xzL21pcnJvci9wa2cvRGVwcmVjYXRlZC5jbGFzcwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL2Nscy9taXJyb3IvcGtnL0VBNDA1NjguY2xhc3MgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL2Nscy9taXJyb3IvcGtnL0VBNDA1NjguY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzJiMzJmZAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvY2xzL21pcnJvci9wa2cvRUE0MDU2OC5jbGFzcwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL2Nscy9taXJyb3IvcGtnL0VtcHR5RW51bS5jbGFzcyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvY2xzL21pcnJvci9wa2cvRW1wdHlFbnVtLmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJmZmQxODkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL2Nscy9taXJyb3IvcGtnL0VtcHR5RW51bS5jbGFzcwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL2Nscy9taXJyb3IvcGtnL0VudW1XaXRoRmllbGRzLmNsYXNzIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9jbHMvbWlycm9yL3BrZy9FbnVtV2l0aEZpZWxkcy5jbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wODkyMGZmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9jbHMvbWlycm9yL3BrZy9FbnVtV2l0aEZpZWxkcy5jbGFzcwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL2Nscy9taXJyb3IvcGtnL0V4dE1ldGhvZHMuY2xhc3MgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL2Nscy9taXJyb3IvcGtnL0V4dE1ldGhvZHMuY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjQwNGM3MQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvY2xzL21pcnJvci9wa2cvRXh0TWV0aG9kcy5jbGFzcwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL2Nscy9taXJyb3IvcGtnL01ldGhvZFJlY2VpdmVyJEEuY2xhc3MgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL2Nscy9taXJyb3IvcGtnL01ldGhvZFJlY2VpdmVyJEEuY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODhmZjAyZAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvY2xzL21pcnJvci9wa2cvTWV0aG9kUmVjZWl2ZXIkQS5jbGFzcwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL2Nscy9taXJyb3IvcGtnL01ldGhvZFJlY2VpdmVyLmNsYXNzIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9jbHMvbWlycm9yL3BrZy9NZXRob2RSZWNlaXZlci5jbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNThmZDhlCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9jbHMvbWlycm9yL3BrZy9NZXRob2RSZWNlaXZlci5jbGFzcwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL2Nscy9taXJyb3IvcGtnL05lc3RlZCRJbm5lcjEkSW5uZXIyLmNsYXNzIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9jbHMvbWlycm9yL3BrZy9OZXN0ZWQkSW5uZXIxJElubmVyMi5jbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OWZjYTg3Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9jbHMvbWlycm9yL3BrZy9OZXN0ZWQkSW5uZXIxJElubmVyMi5jbGFzcwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL2Nscy9taXJyb3IvcGtnL05lc3RlZCRJbm5lcjEuY2xhc3MgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL2Nscy9taXJyb3IvcGtnL05lc3RlZCRJbm5lcjEuY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODFiMzE0YQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvY2xzL21pcnJvci9wa2cvTmVzdGVkJElubmVyMS5jbGFzcwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL2Nscy9taXJyb3IvcGtnL05lc3RlZC5jbGFzcyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvY2xzL21pcnJvci9wa2cvTmVzdGVkLmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg1NzQ5OGQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL2Nscy9taXJyb3IvcGtnL05lc3RlZC5jbGFzcwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL2Nscy9taXJyb3IvcGtnL05vcm1hbENsYXNzJDEuY2xhc3MgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL2Nscy9taXJyb3IvcGtnL05vcm1hbENsYXNzJDEuY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODM2OWU1YgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvY2xzL21pcnJvci9wa2cvTm9ybWFsQ2xhc3MkMS5jbGFzcwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL2Nscy9taXJyb3IvcGtnL05vcm1hbENsYXNzJElubmVyLmNsYXNzIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9jbHMvbWlycm9yL3BrZy9Ob3JtYWxDbGFzcyRJbm5lci5jbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MTM3NTE1Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9jbHMvbWlycm9yL3BrZy9Ob3JtYWxDbGFzcyRJbm5lci5jbGFzcwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL2Nscy9taXJyb3IvcGtnL05vcm1hbENsYXNzLmNsYXNzIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9jbHMvbWlycm9yL3BrZy9Ob3JtYWxDbGFzcy5jbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mODE4YjQ5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9jbHMvbWlycm9yL3BrZy9Ob3JtYWxDbGFzcy5jbGFzcwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL2Nscy9taXJyb3IvcGtnL1BhcmFtZXRlck5hbWVzLmNsYXNzIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9jbHMvbWlycm9yL3BrZy9QYXJhbWV0ZXJOYW1lcy5jbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZDkyNjAxCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9jbHMvbWlycm9yL3BrZy9QYXJhbWV0ZXJOYW1lcy5jbGFzcwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL2Nscy9taXJyb3IvcGtnL1BrZ0Fubm8uY2xhc3MgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL2Nscy9taXJyb3IvcGtnL1BrZ0Fubm8uY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTBjYmI1OQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvY2xzL21pcnJvci9wa2cvUGtnQW5uby5jbGFzcwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL2Nscy9taXJyb3IvcGtnL1NpbXBsZUVudW0uY2xhc3MgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL2Nscy9taXJyb3IvcGtnL1NpbXBsZUVudW0uY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDBmMWQwNwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvY2xzL21pcnJvci9wa2cvU2ltcGxlRW51bS5jbGFzcwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL2Nscy9taXJyb3IvcGtnL3BhY2thZ2UtaW5mby5jbGFzcyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvY2xzL21pcnJvci9wa2cvcGFja2FnZS1pbmZvLmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBmYmJlY2YKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL2Nscy9taXJyb3IvcGtnL3BhY2thZ2UtaW5mby5jbGFzcwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL2Nscy9taXJyb3Ivc3JjL3BrZy8kQnVja0NsYXNzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL2Nscy9taXJyb3Ivc3JjL3BrZy8kQnVja0NsYXNzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTc3MzZjYwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvY2xzL21pcnJvci9zcmMvcGtnLyRCdWNrQ2xhc3MuamF2YQpAQCAtMCwwICsxLDUgQEAKK3BhY2thZ2UgcGtnOworCitjbGFzcyAkQnVja0NsYXNzIHsKKyAgc3RhdGljICRCdWNrQ2xhc3MgZ2V0SW5zdGFuY2UoKSB7IHJldHVybiBudWxsOyB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL2Nscy9taXJyb3Ivc3JjL3BrZy9Bbm5vdGF0aW9ucy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9jbHMvbWlycm9yL3NyYy9wa2cvQW5ub3RhdGlvbnMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YWVkYTY4Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9jbHMvbWlycm9yL3NyYy9wa2cvQW5ub3RhdGlvbnMuamF2YQpAQCAtMCwwICsxLDM3IEBACitwYWNrYWdlIHBrZzsKKworYWJzdHJhY3QgY2xhc3MgQW5ub3RhdGlvbnMgeworICBAaW50ZXJmYWNlIEExIHsgfQorCisgIEBpbnRlcmZhY2UgQTIgeworICAgIFN0cmluZyB2YWx1ZSgpIGRlZmF1bHQgIi0iOworICB9CisKKyAgQGludGVyZmFjZSBBMyB7CisgICAgQTEgYTEoKTsKKyAgICBBMiBhMigpOworICB9CisKKyAgQGludGVyZmFjZSBBNCB7CisgICAgaW50W10gaWRzKCkgZGVmYXVsdCB7IH07CisgIH0KKworICBAQTEgYWJzdHJhY3Qgdm9pZCBtMSgpOworCisgIEBBMigpIGFic3RyYWN0IHZvaWQgbTJhKCk7CisgIEBBMigiKyIpIGFic3RyYWN0IHZvaWQgbTJiKCk7CisKKyAgQEEzKGExID0gQEExLCBhMiA9IEBBMikgYWJzdHJhY3Qgdm9pZCBtMygpOworCisgIEBBNCBhYnN0cmFjdCB2b2lkIG00YSgpOworICBAQTQoaWRzID0gezQyLCA4NH0pIGFic3RyYWN0IHZvaWQgbTRiKCk7CisKKyAgQGludGVyZmFjZSBJbmRldGVybWluYXRlQW5ubyB7CisgICAgZmxvYXQgZjEoKSBkZWZhdWx0IEZsb2F0Lk5FR0FUSVZFX0lORklOSVRZOworICAgIGZsb2F0IGYyKCkgZGVmYXVsdCBGbG9hdC5OYU47CisgICAgZmxvYXQgZjMoKSBkZWZhdWx0IEZsb2F0LlBPU0lUSVZFX0lORklOSVRZOworICAgIGRvdWJsZSBkMSgpIGRlZmF1bHQgRG91YmxlLk5FR0FUSVZFX0lORklOSVRZOworICAgIGRvdWJsZSBkMigpIGRlZmF1bHQgRG91YmxlLk5hTjsKKyAgICBkb3VibGUgZDMoKSBkZWZhdWx0IERvdWJsZS5QT1NJVElWRV9JTkZJTklUWTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvY2xzL21pcnJvci9zcmMvcGtnL0J1Y2tDbGFzcyQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvY2xzL21pcnJvci9zcmMvcGtnL0J1Y2tDbGFzcyQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NWVkZDEzCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9jbHMvbWlycm9yL3NyYy9wa2cvQnVja0NsYXNzJC5qYXZhCkBAIC0wLDAgKzEsMTEgQEAKK3BhY2thZ2UgcGtnOworCitjbGFzcyBCdWNrQ2xhc3MkIHsKKyAgQnVja0NsYXNzJCgpIHsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4odGhpcyk7CisgIH0KKworICBzdGF0aWMgQnVja0NsYXNzJCBnZXRJbnN0YW5jZSgpIHsKKyAgICByZXR1cm4gbmV3IEJ1Y2tDbGFzcyQoKTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9jbHMvbWlycm9yL3NyYy9wa2cvRGVwcmVjYXRlZC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9jbHMvbWlycm9yL3NyYy9wa2cvRGVwcmVjYXRlZC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU5M2UwNTc5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9jbHMvbWlycm9yL3NyYy9wa2cvRGVwcmVjYXRlZC5qYXZhCkBAIC0wLDAgKzEsMTAgQEAKK3BhY2thZ2UgcGtnOworCisvKiogQGRlcHJlY2F0ZWQgZG9uJ3QgdXNlICovCitjbGFzcyBEZXByZWNhdGVkIHsKKyAgLyoqIEBkZXByZWNhdGVkIGRvbid0IHVzZSAqLworICBpbnQgZjsKKworICAvKiogQGRlcHJlY2F0ZWQgZG9uJ3QgdXNlICovCisgIHZvaWQgbSgpIHsgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvY2xzL21pcnJvci9zcmMvcGtnL0VtcHR5RW51bS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9jbHMvbWlycm9yL3NyYy9wa2cvRW1wdHlFbnVtLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzc4NGFjOAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvY2xzL21pcnJvci9zcmMvcGtnL0VtcHR5RW51bS5qYXZhCkBAIC0wLDAgKzEsMyBAQAorcGFja2FnZSBwa2c7CisKK2VudW0gRW1wdHlFbnVtIHsgfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvY2xzL21pcnJvci9zcmMvcGtnL0VudW1XaXRoRmllbGRzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL2Nscy9taXJyb3Ivc3JjL3BrZy9FbnVtV2l0aEZpZWxkcy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMyMWQxNjYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL2Nscy9taXJyb3Ivc3JjL3BrZy9FbnVtV2l0aEZpZWxkcy5qYXZhCkBAIC0wLDAgKzEsOCBAQAorcGFja2FnZSBwa2c7CisKK3B1YmxpYyBlbnVtIEVudW1XaXRoRmllbGRzIHsKKyAgRTEsIEUyOworCisgIHByaXZhdGUgYm9vbGVhbiBmMTsKKyAgc3RhdGljIGJvb2xlYW4gZjI7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9jbHMvbWlycm9yL3NyYy9wa2cvRXh0TWV0aG9kcy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9jbHMvbWlycm9yL3NyYy9wa2cvRXh0TWV0aG9kcy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgyYzI4MWIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL2Nscy9taXJyb3Ivc3JjL3BrZy9FeHRNZXRob2RzLmphdmEKQEAgLTAsMCArMSw2IEBACitwYWNrYWdlIHBrZzsKKworaW50ZXJmYWNlIEV4dE1ldGhvZHMgeworICB2b2lkIG0xKCk7CisgIHZvaWQgbTIoKSBkZWZhdWx0IHsgU3lzdGVtLm91dC5wcmludGxuKCJIZWxsbyB0aGVyZS4iKTsgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9jbHMvbWlycm9yL3NyYy9wa2cvTWV0aG9kUmVjZWl2ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvY2xzL21pcnJvci9zcmMvcGtnL01ldGhvZFJlY2VpdmVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWJkYjJjNgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvY2xzL21pcnJvci9zcmMvcGtnL01ldGhvZFJlY2VpdmVyLmphdmEKQEAgLTAsMCArMSw2IEBACitwYWNrYWdlIHBrZzsKKworY2xhc3MgTWV0aG9kUmVjZWl2ZXIgeworICBAaW50ZXJmYWNlIEEgeyB9CisgIHZvaWQgbShAQSBNZXRob2RSZWNlaXZlciB0aGlzLCBpbnQgaSkgeyBTeXN0ZW0ub3V0LnByaW50bG4oImk9IiArIGkpOyB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL2Nscy9taXJyb3Ivc3JjL3BrZy9OZXN0ZWQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvY2xzL21pcnJvci9zcmMvcGtnL05lc3RlZC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkwMWM5NWIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL2Nscy9taXJyb3Ivc3JjL3BrZy9OZXN0ZWQuamF2YQpAQCAtMCwwICsxLDcgQEAKK3BhY2thZ2UgcGtnOworCitwdWJsaWMgY2xhc3MgTmVzdGVkIHsKKyAgcHVibGljIHN0YXRpYyBjbGFzcyBJbm5lcjEgeworICAgIHB1YmxpYyBjbGFzcyBJbm5lcjIgeyB9CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL2Nscy9taXJyb3Ivc3JjL3BrZy9Ob3JtYWxDbGFzcy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9jbHMvbWlycm9yL3NyYy9wa2cvTm9ybWFsQ2xhc3MuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MmYxNDM0Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9jbHMvbWlycm9yL3NyYy9wa2cvTm9ybWFsQ2xhc3MuamF2YQpAQCAtMCwwICsxLDExIEBACitwYWNrYWdlIHBrZzsKKworY2xhc3MgTm9ybWFsQ2xhc3MgeworICBwcml2YXRlIGZpbmFsIE9iamVjdCBvID0gbmV3IElubmVyKCk7CisKKyAgT2JqZWN0IGdldCgpIHsKKyAgICByZXR1cm4gbzsKKyAgfQorCisgIHByaXZhdGUgc3RhdGljIGNsYXNzIElubmVyIHsgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvY2xzL21pcnJvci9zcmMvcGtnL1BhcmFtZXRlck5hbWVzLmNsYXNzIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9jbHMvbWlycm9yL3NyYy9wa2cvUGFyYW1ldGVyTmFtZXMuY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmIxZDQ5NQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvY2xzL21pcnJvci9zcmMvcGtnL1BhcmFtZXRlck5hbWVzLmNsYXNzCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvY2xzL21pcnJvci9zcmMvcGtnL1BhcmFtZXRlck5hbWVzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL2Nscy9taXJyb3Ivc3JjL3BrZy9QYXJhbWV0ZXJOYW1lcy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjczOGYwODcKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL2Nscy9taXJyb3Ivc3JjL3BrZy9QYXJhbWV0ZXJOYW1lcy5qYXZhCkBAIC0wLDAgKzEsMTMgQEAKK3BhY2thZ2UgcGtnOworCitwdWJsaWMgY2xhc3MgUGFyYW1ldGVyTmFtZXMgeworICBwdWJsaWMgdm9pZCB0ZXN0KGludCBpbmRleCwgaW50IGlkLCBTdHJpbmcgbmFtZSkgeworICAgIHRlc3RJbXBsKGluZGV4LCBpZCwgbmFtZSwgdHJ1ZSk7CisgIH0KKworICBwcml2YXRlIHZvaWQgdGVzdEltcGwoaW50IGluZGV4LCBpbnQgaWQsIFN0cmluZyBuYW1lLCBib29sZWFuIHByaW50KSB7CisgICAgaWYgKHByaW50KSB7CisgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlsiICsgaW5kZXggKyAiXSAiICsgaWQgKyAiOiIgKyBuYW1lKTsKKyAgICB9CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL2Nscy9taXJyb3Ivc3JjL3BrZy9Qa2dBbm5vLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL2Nscy9taXJyb3Ivc3JjL3BrZy9Qa2dBbm5vLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDYwOTFmNgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvY2xzL21pcnJvci9zcmMvcGtnL1BrZ0Fubm8uamF2YQpAQCAtMCwwICsxLDMgQEAKK3BhY2thZ2UgcGtnOworCitAaW50ZXJmYWNlIFBrZ0Fubm8geyB9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL2Nscy9taXJyb3Ivc3JjL3BrZy9TaW1wbGVFbnVtLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL2Nscy9taXJyb3Ivc3JjL3BrZy9TaW1wbGVFbnVtLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDU0NjA5ZQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvY2xzL21pcnJvci9zcmMvcGtnL1NpbXBsZUVudW0uamF2YQpAQCAtMCwwICsxLDUgQEAKK3BhY2thZ2UgcGtnOworCitwdWJsaWMgZW51bSBTaW1wbGVFbnVtIHsKKyAgRTEsIEUyCit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9jbHMvbWlycm9yL3NyYy9wa2cvcGFja2FnZS1pbmZvLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL2Nscy9taXJyb3Ivc3JjL3BrZy9wYWNrYWdlLWluZm8uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOTIwNjhhCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9jbHMvbWlycm9yL3NyYy9wa2cvcGFja2FnZS1pbmZvLmphdmEKQEAgLTAsMCArMSwyIEBACitAUGtnQW5ubworcGFja2FnZSBwa2c7CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL2Nscy9zdHViQnVpbGRlci9Bbm5vdGF0ZWRFbnVtQ29uc3RydWN0b3IuY2xhc3MgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL2Nscy9zdHViQnVpbGRlci9Bbm5vdGF0ZWRFbnVtQ29uc3RydWN0b3IuY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODIzZGFjNgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvY2xzL3N0dWJCdWlsZGVyL0Fubm90YXRlZEVudW1Db25zdHJ1Y3Rvci5jbGFzcwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL2Nscy9zdHViQnVpbGRlci9Bbm5vdGF0ZWRFbnVtQ29uc3RydWN0b3IudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9jbHMvc3R1YkJ1aWxkZXIvQW5ub3RhdGVkRW51bUNvbnN0cnVjdG9yLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZWQ4ZjAwCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9jbHMvc3R1YkJ1aWxkZXIvQW5ub3RhdGVkRW51bUNvbnN0cnVjdG9yLnR4dApAQCAtMCwwICsxLDMyIEBACitQc2lKYXZhRmlsZVN0dWIgW10KKyAgUHNpQ2xhc3NTdHViW2VudW0gbmFtZT1Bbm5vdGF0ZWRFbnVtQ29uc3RydWN0b3IgZnFuPUFubm90YXRlZEVudW1Db25zdHJ1Y3Rvcl0KKyAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9MTddCisgICAgUHNpVHlwZVBhcmFtZXRlckxpc3RTdHViCisgICAgUHNpUmVmTGlzdFN0dWJbRVhURU5EU19MSVNUOl0KKyAgICBQc2lSZWZMaXN0U3R1YltJTVBMRU1FTlRTX0xJU1Q6XQorICAgIFBzaUZpZWxkU3R1YltlbnVtY29uc3QgQTpBbm5vdGF0ZWRFbnVtQ29uc3RydWN0b3JdCisgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9MjVdCisgICAgUHNpRmllbGRTdHViW2VudW1jb25zdCBCOkFubm90YXRlZEVudW1Db25zdHJ1Y3Rvcl0KKyAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz0yNV0KKyAgICBQc2lGaWVsZFN0dWJbZW51bWNvbnN0IEM6QW5ub3RhdGVkRW51bUNvbnN0cnVjdG9yXQorICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTI1XQorICAgIFBzaU1ldGhvZFN0dWJbdmFsdWVzOkFubm90YXRlZEVudW1Db25zdHJ1Y3RvcltdXQorICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTldCisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdFN0dWIKKyAgICAgIFBzaVBhcmFtZXRlckxpc3RTdHViCisgICAgICBQc2lSZWZMaXN0U3R1YltUSFJPV1NfTElTVDpdCisgICAgUHNpTWV0aG9kU3R1Ylt2YWx1ZU9mOkFubm90YXRlZEVudW1Db25zdHJ1Y3Rvcl0KKyAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz05XQorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3RTdHViCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgICBQc2lQYXJhbWV0ZXJTdHViW25hbWU6amF2YS5sYW5nLlN0cmluZ10KKyAgICAgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9MF0KKyAgICAgIFBzaVJlZkxpc3RTdHViW1RIUk9XU19MSVNUOl0KKyAgICBQc2lNZXRob2RTdHViW2NvbnMgdmFyYXJncyBBbm5vdGF0ZWRFbnVtQ29uc3RydWN0b3I6dm9pZF0KKyAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz0yXQorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3RTdHViCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgICBQc2lQYXJhbWV0ZXJTdHViW25hbWVzOmphdmEubGFuZy5TdHJpbmcuLi5dCisgICAgICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTBdCisgICAgICAgICAgICBQc2lBbm5vdGF0aW9uU3R1YltAb3JnLmpldGJyYWlucy5hbm5vdGF0aW9ucy5OdWxsYWJsZV0KKyAgICAgIFBzaVJlZkxpc3RTdHViW1RIUk9XU19MSVNUOl0KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvY2xzL3N0dWJCdWlsZGVyL0Fubm90YXRlZE5vblN0YXRpY0lubmVyQ2xhc3NDb25zdHJ1Y3RvciRJbm5lci5jbGFzcyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvY2xzL3N0dWJCdWlsZGVyL0Fubm90YXRlZE5vblN0YXRpY0lubmVyQ2xhc3NDb25zdHJ1Y3RvciRJbm5lci5jbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNTNlYzlkCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9jbHMvc3R1YkJ1aWxkZXIvQW5ub3RhdGVkTm9uU3RhdGljSW5uZXJDbGFzc0NvbnN0cnVjdG9yJElubmVyLmNsYXNzCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvY2xzL3N0dWJCdWlsZGVyL0Fubm90YXRlZE5vblN0YXRpY0lubmVyQ2xhc3NDb25zdHJ1Y3Rvci5jbGFzcyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvY2xzL3N0dWJCdWlsZGVyL0Fubm90YXRlZE5vblN0YXRpY0lubmVyQ2xhc3NDb25zdHJ1Y3Rvci5jbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jY2U2YmQ5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9jbHMvc3R1YkJ1aWxkZXIvQW5ub3RhdGVkTm9uU3RhdGljSW5uZXJDbGFzc0NvbnN0cnVjdG9yLmNsYXNzCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvY2xzL3N0dWJCdWlsZGVyL0Fubm90YXRlZE5vblN0YXRpY0lubmVyQ2xhc3NDb25zdHJ1Y3Rvci50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL2Nscy9zdHViQnVpbGRlci9Bbm5vdGF0ZWROb25TdGF0aWNJbm5lckNsYXNzQ29uc3RydWN0b3IudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNjYTRlNmUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL2Nscy9zdHViQnVpbGRlci9Bbm5vdGF0ZWROb25TdGF0aWNJbm5lckNsYXNzQ29uc3RydWN0b3IudHh0CkBAIC0wLDAgKzEsMjQgQEAKK1BzaUphdmFGaWxlU3R1YiBbXQorICBQc2lDbGFzc1N0dWJbbmFtZT1Bbm5vdGF0ZWROb25TdGF0aWNJbm5lckNsYXNzQ29uc3RydWN0b3IgZnFuPUFubm90YXRlZE5vblN0YXRpY0lubmVyQ2xhc3NDb25zdHJ1Y3Rvcl0KKyAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9MV0KKyAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdFN0dWIKKyAgICBQc2lSZWZMaXN0U3R1YltFWFRFTkRTX0xJU1Q6XQorICAgIFBzaVJlZkxpc3RTdHViW0lNUExFTUVOVFNfTElTVDpdCisgICAgUHNpQ2xhc3NTdHViW25hbWU9SW5uZXIgZnFuPUFubm90YXRlZE5vblN0YXRpY0lubmVyQ2xhc3NDb25zdHJ1Y3Rvci5Jbm5lcl0KKyAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz00MDk2XQorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3RTdHViCisgICAgICBQc2lSZWZMaXN0U3R1YltFWFRFTkRTX0xJU1Q6XQorICAgICAgUHNpUmVmTGlzdFN0dWJbSU1QTEVNRU5UU19MSVNUOl0KKyAgICAgIFBzaU1ldGhvZFN0dWJbY29ucyBJbm5lcjp2b2lkXQorICAgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9MV0KKyAgICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3RTdHViCisgICAgICAgIFBzaVBhcmFtZXRlckxpc3RTdHViCisgICAgICAgICAgUHNpUGFyYW1ldGVyU3R1YltwYXJhbTpqYXZhLmxhbmcuSW50ZWdlcl0KKyAgICAgICAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz0wXQorICAgICAgICAgICAgICBQc2lBbm5vdGF0aW9uU3R1YltAb3JnLmpldGJyYWlucy5hbm5vdGF0aW9ucy5Ob3ROdWxsXQorICAgICAgICBQc2lSZWZMaXN0U3R1YltUSFJPV1NfTElTVDpdCisgICAgUHNpTWV0aG9kU3R1Yltjb25zIEFubm90YXRlZE5vblN0YXRpY0lubmVyQ2xhc3NDb25zdHJ1Y3Rvcjp2b2lkXQorICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTFdCisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdFN0dWIKKyAgICAgIFBzaVBhcmFtZXRlckxpc3RTdHViCisgICAgICBQc2lSZWZMaXN0U3R1YltUSFJPV1NfTElTVDpdCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL2Nscy9zdHViQnVpbGRlci9Eb3VibGVUZXN0LmNsYXNzIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9jbHMvc3R1YkJ1aWxkZXIvRG91YmxlVGVzdC5jbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZmFhOTgyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9jbHMvc3R1YkJ1aWxkZXIvRG91YmxlVGVzdC5jbGFzcwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL2Nscy9zdHViQnVpbGRlci9Eb3VibGVUZXN0LnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvY2xzL3N0dWJCdWlsZGVyL0RvdWJsZVRlc3QudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY2MDZkNjUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL2Nscy9zdHViQnVpbGRlci9Eb3VibGVUZXN0LnR4dApAQCAtMCwwICsxLDIyIEBACitQc2lKYXZhRmlsZVN0dWIgW10KKyAgUHNpQ2xhc3NTdHViW25hbWU9RG91YmxlVGVzdCBmcW49RG91YmxlVGVzdF0KKyAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9MV0KKyAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdFN0dWIKKyAgICBQc2lSZWZMaXN0U3R1YltFWFRFTkRTX0xJU1Q6XQorICAgIFBzaVJlZkxpc3RTdHViW0lNUExFTUVOVFNfTElTVDpdCisgICAgUHNpTWV0aG9kU3R1Yltjb25zIERvdWJsZVRlc3Q6dm9pZF0KKyAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz0xXQorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3RTdHViCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgUHNpUmVmTGlzdFN0dWJbVEhST1dTX0xJU1Q6XQorICAgIFBzaU1ldGhvZFN0dWJbZm9vOnZvaWRdCisgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9NDA5Nl0KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgUHNpUGFyYW1ldGVyTGlzdFN0dWIKKyAgICAgICAgUHNpUGFyYW1ldGVyU3R1YltvbmU6ZG91YmxlXQorICAgICAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz0wXQorICAgICAgICBQc2lQYXJhbWV0ZXJTdHViW3R3bzpkb3VibGVdCisgICAgICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTBdCisgICAgICAgIFBzaVBhcmFtZXRlclN0dWJbdGhyZWU6ZG91YmxlXQorICAgICAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz0wXQorICAgICAgUHNpUmVmTGlzdFN0dWJbVEhST1dTX0xJU1Q6XQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9jbHMvc3R1YkJ1aWxkZXIvTW9kaWZpZXJzLnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvY2xzL3N0dWJCdWlsZGVyL01vZGlmaWVycy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTYwOGVlNwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvY2xzL3N0dWJCdWlsZGVyL01vZGlmaWVycy50eHQKQEAgLTAsMCArMSwyNyBAQAorUHNpSmF2YUZpbGVTdHViIFtwYWNrXQorICBQc2lDbGFzc1N0dWJbbmFtZT1Nb2RpZmllcnMgZnFuPXBhY2suTW9kaWZpZXJzXQorICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz0xXQorICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0U3R1YgorICAgIFBzaVJlZkxpc3RTdHViW0VYVEVORFNfTElTVDpdCisgICAgUHNpUmVmTGlzdFN0dWJbSU1QTEVNRU5UU19MSVNUOl0KKyAgICBQc2lGaWVsZFN0dWJbZjE6aW50XQorICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTEzMF0KKyAgICBQc2lGaWVsZFN0dWJbZjI6aW50XQorICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTY2XQorICAgIFBzaU1ldGhvZFN0dWJbY29ucyBNb2RpZmllcnM6dm9pZF0KKyAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz0xXQorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3RTdHViCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgUHNpUmVmTGlzdFN0dWJbVEhST1dTX0xJU1Q6XQorICAgIFBzaU1ldGhvZFN0dWJbdmFyYXJncyBtMTp2b2lkXQorICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTJdCisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdFN0dWIKKyAgICAgIFBzaVBhcmFtZXRlckxpc3RTdHViCisgICAgICAgIFBzaVBhcmFtZXRlclN0dWJbaTppbnQuLi5dCisgICAgICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTBdCisgICAgICBQc2lSZWZMaXN0U3R1YltUSFJPV1NfTElTVDpdCisgICAgUHNpTWV0aG9kU3R1YlttMjp2b2lkXQorICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTM0XQorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3RTdHViCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgUHNpUmVmTGlzdFN0dWJbVEhST1dTX0xJU1Q6XQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9jbHMvc3R1YkJ1aWxkZXIvTnVsbGFibGUudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9jbHMvc3R1YkJ1aWxkZXIvTnVsbGFibGUudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI3N2ZlMTQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL2Nscy9zdHViQnVpbGRlci9OdWxsYWJsZS50eHQKQEAgLTAsMCArMSwxNCBAQAorUHNpSmF2YUZpbGVTdHViIFtvcmcuamV0YnJhaW5zLmFubm90YXRpb25zXQorICBQc2lDbGFzc1N0dWJbaW50ZXJmYWNlIGFubm90YXRpb24gbmFtZT1OdWxsYWJsZSBmcW49b3JnLmpldGJyYWlucy5hbm5vdGF0aW9ucy5OdWxsYWJsZV0KKyAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9MTAyNV0KKyAgICAgIFBzaUFubm90YXRpb25TdHViW0BqYXZhLmxhbmcuYW5ub3RhdGlvbi5Eb2N1bWVudGVkXQorICAgICAgUHNpQW5ub3RhdGlvblN0dWJbQGphdmEubGFuZy5hbm5vdGF0aW9uLlJldGVudGlvbihqYXZhLmxhbmcuYW5ub3RhdGlvbi5SZXRlbnRpb25Qb2xpY3kuQ0xBU1MpXQorICAgICAgUHNpQW5ub3RhdGlvblN0dWJbQGphdmEubGFuZy5hbm5vdGF0aW9uLlRhcmdldCh7amF2YS5sYW5nLmFubm90YXRpb24uRWxlbWVudFR5cGUuTUVUSE9ELGphdmEubGFuZy5hbm5vdGF0aW9uLkVsZW1lbnRUeXBlLkZJRUxELGphdmEubGFuZy5hbm5vdGF0aW9uLkVsZW1lbnRUeXBlLlBBUkFNRVRFUixqYXZhLmxhbmcuYW5ub3RhdGlvbi5FbGVtZW50VHlwZS5MT0NBTF9WQVJJQUJMRX0pXQorICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0U3R1YgorICAgIFBzaVJlZkxpc3RTdHViW0VYVEVORFNfTElTVDpdCisgICAgUHNpUmVmTGlzdFN0dWJbSU1QTEVNRU5UU19MSVNUOl0KKyAgICBQc2lNZXRob2RTdHViW2Fubm90YXRpb24gdmFsdWU6amF2YS5sYW5nLlN0cmluZyBkZWZhdWx0PSIiXQorICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTEwMjVdCisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdFN0dWIKKyAgICAgIFBzaVBhcmFtZXRlckxpc3RTdHViCisgICAgICBQc2lSZWZMaXN0U3R1YltUSFJPV1NfTElTVDpdCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL2Nscy9zdHViQnVpbGRlci9UZXN0U3VpdGUuY2xhc3MgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL2Nscy9zdHViQnVpbGRlci9UZXN0U3VpdGUuY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjc2NGNhZgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvY2xzL3N0dWJCdWlsZGVyL1Rlc3RTdWl0ZS5jbGFzcwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL2Nscy9zdHViQnVpbGRlci9UZXN0U3VpdGUudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9jbHMvc3R1YkJ1aWxkZXIvVGVzdFN1aXRlLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZDFiMjJhCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9jbHMvc3R1YkJ1aWxkZXIvVGVzdFN1aXRlLnR4dApAQCAtMCwwICsxLDE2MiBAQAorUHNpSmF2YUZpbGVTdHViIFtqdW5pdC5mcmFtZXdvcmtdCisgIFBzaUNsYXNzU3R1YltuYW1lPVRlc3RTdWl0ZSBmcW49anVuaXQuZnJhbWV3b3JrLlRlc3RTdWl0ZV0KKyAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9MV0KKyAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdFN0dWIKKyAgICBQc2lSZWZMaXN0U3R1YltFWFRFTkRTX0xJU1Q6XQorICAgIFBzaVJlZkxpc3RTdHViW0lNUExFTUVOVFNfTElTVDpqdW5pdC5mcmFtZXdvcmsuVGVzdF0KKyAgICBQc2lGaWVsZFN0dWJbZlRlc3RzOmphdmEudXRpbC5WZWN0b3JdCisgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9Ml0KKyAgICBQc2lGaWVsZFN0dWJbZk5hbWU6amF2YS5sYW5nLlN0cmluZ10KKyAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz0yXQorICAgIFBzaU1ldGhvZFN0dWJbY29ucyBUZXN0U3VpdGU6dm9pZF0KKyAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz0xXQorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3RTdHViCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgUHNpUmVmTGlzdFN0dWJbVEhST1dTX0xJU1Q6XQorICAgIFBzaU1ldGhvZFN0dWJbY29ucyBUZXN0U3VpdGU6dm9pZF0KKyAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz0xXQorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3RTdHViCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgICBQc2lQYXJhbWV0ZXJTdHViW3RoZUNsYXNzOmphdmEubGFuZy5DbGFzc10KKyAgICAgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9MF0KKyAgICAgICAgUHNpUGFyYW1ldGVyU3R1YltuYW1lOmphdmEubGFuZy5TdHJpbmddCisgICAgICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTBdCisgICAgICBQc2lSZWZMaXN0U3R1YltUSFJPV1NfTElTVDpdCisgICAgUHNpTWV0aG9kU3R1Yltjb25zIFRlc3RTdWl0ZTp2b2lkXQorICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTFdCisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdFN0dWIKKyAgICAgIFBzaVBhcmFtZXRlckxpc3RTdHViCisgICAgICAgIFBzaVBhcmFtZXRlclN0dWJbdGhlQ2xhc3M6amF2YS5sYW5nLkNsYXNzXQorICAgICAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz0wXQorICAgICAgUHNpUmVmTGlzdFN0dWJbVEhST1dTX0xJU1Q6XQorICAgIFBzaU1ldGhvZFN0dWJbY29ucyBUZXN0U3VpdGU6dm9pZF0KKyAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz0xXQorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3RTdHViCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgICBQc2lQYXJhbWV0ZXJTdHViW25hbWU6amF2YS5sYW5nLlN0cmluZ10KKyAgICAgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9MF0KKyAgICAgIFBzaVJlZkxpc3RTdHViW1RIUk9XU19MSVNUOl0KKyAgICBQc2lNZXRob2RTdHViW2FkZFRlc3Q6dm9pZF0KKyAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz0xXQorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3RTdHViCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgICBQc2lQYXJhbWV0ZXJTdHViW3Rlc3Q6anVuaXQuZnJhbWV3b3JrLlRlc3RdCisgICAgICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTBdCisgICAgICBQc2lSZWZMaXN0U3R1YltUSFJPV1NfTElTVDpdCisgICAgUHNpTWV0aG9kU3R1YlthZGRUZXN0U3VpdGU6dm9pZF0KKyAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz0xXQorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3RTdHViCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgICBQc2lQYXJhbWV0ZXJTdHViW3Rlc3RDbGFzczpqYXZhLmxhbmcuQ2xhc3NdCisgICAgICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTBdCisgICAgICBQc2lSZWZMaXN0U3R1YltUSFJPV1NfTElTVDpdCisgICAgUHNpTWV0aG9kU3R1YlthZGRUZXN0TWV0aG9kOnZvaWRdCisgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9Ml0KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgUHNpUGFyYW1ldGVyTGlzdFN0dWIKKyAgICAgICAgUHNpUGFyYW1ldGVyU3R1YlttOmphdmEubGFuZy5yZWZsZWN0Lk1ldGhvZF0KKyAgICAgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9MF0KKyAgICAgICAgUHNpUGFyYW1ldGVyU3R1YltuYW1lczpqYXZhLnV0aWwuVmVjdG9yXQorICAgICAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz0wXQorICAgICAgICBQc2lQYXJhbWV0ZXJTdHViW3RoZUNsYXNzOmphdmEubGFuZy5DbGFzc10KKyAgICAgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9MF0KKyAgICAgIFBzaVJlZkxpc3RTdHViW1RIUk9XU19MSVNUOl0KKyAgICBQc2lNZXRob2RTdHViW2NyZWF0ZVRlc3Q6anVuaXQuZnJhbWV3b3JrLlRlc3RdCisgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9OV0KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgUHNpUGFyYW1ldGVyTGlzdFN0dWIKKyAgICAgICAgUHNpUGFyYW1ldGVyU3R1Ylt0aGVDbGFzczpqYXZhLmxhbmcuQ2xhc3NdCisgICAgICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTBdCisgICAgICAgIFBzaVBhcmFtZXRlclN0dWJbbmFtZTpqYXZhLmxhbmcuU3RyaW5nXQorICAgICAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz0wXQorICAgICAgUHNpUmVmTGlzdFN0dWJbVEhST1dTX0xJU1Q6XQorICAgIFBzaU1ldGhvZFN0dWJbZXhjZXB0aW9uVG9TdHJpbmc6amF2YS5sYW5nLlN0cmluZ10KKyAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz0xMF0KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgUHNpUGFyYW1ldGVyTGlzdFN0dWIKKyAgICAgICAgUHNpUGFyYW1ldGVyU3R1Ylt0OmphdmEubGFuZy5UaHJvd2FibGVdCisgICAgICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTBdCisgICAgICBQc2lSZWZMaXN0U3R1YltUSFJPV1NfTElTVDpdCisgICAgUHNpTWV0aG9kU3R1Yltjb3VudFRlc3RDYXNlczppbnRdCisgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9MV0KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgUHNpUGFyYW1ldGVyTGlzdFN0dWIKKyAgICAgIFBzaVJlZkxpc3RTdHViW1RIUk9XU19MSVNUOl0KKyAgICBQc2lNZXRob2RTdHViW2dldFRlc3RDb25zdHJ1Y3RvcjpqYXZhLmxhbmcucmVmbGVjdC5Db25zdHJ1Y3Rvcl0KKyAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz05XQorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3RTdHViCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgICBQc2lQYXJhbWV0ZXJTdHViW3RoZUNsYXNzOmphdmEubGFuZy5DbGFzc10KKyAgICAgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9MF0KKyAgICAgIFBzaVJlZkxpc3RTdHViW1RIUk9XU19MSVNUOmphdmEubGFuZy5Ob1N1Y2hNZXRob2RFeGNlcHRpb25dCisgICAgUHNpTWV0aG9kU3R1Yltpc1B1YmxpY1Rlc3RNZXRob2Q6Ym9vbGVhbl0KKyAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz0yXQorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3RTdHViCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgICBQc2lQYXJhbWV0ZXJTdHViW206amF2YS5sYW5nLnJlZmxlY3QuTWV0aG9kXQorICAgICAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz0wXQorICAgICAgUHNpUmVmTGlzdFN0dWJbVEhST1dTX0xJU1Q6XQorICAgIFBzaU1ldGhvZFN0dWJbaXNUZXN0TWV0aG9kOmJvb2xlYW5dCisgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9Ml0KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgUHNpUGFyYW1ldGVyTGlzdFN0dWIKKyAgICAgICAgUHNpUGFyYW1ldGVyU3R1YlttOmphdmEubGFuZy5yZWZsZWN0Lk1ldGhvZF0KKyAgICAgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9MF0KKyAgICAgIFBzaVJlZkxpc3RTdHViW1RIUk9XU19MSVNUOl0KKyAgICBQc2lNZXRob2RTdHViW3J1bjp2b2lkXQorICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTFdCisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdFN0dWIKKyAgICAgIFBzaVBhcmFtZXRlckxpc3RTdHViCisgICAgICAgIFBzaVBhcmFtZXRlclN0dWJbcmVzdWx0Omp1bml0LmZyYW1ld29yay5UZXN0UmVzdWx0XQorICAgICAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz0wXQorICAgICAgUHNpUmVmTGlzdFN0dWJbVEhST1dTX0xJU1Q6XQorICAgIFBzaU1ldGhvZFN0dWJbcnVuVGVzdDp2b2lkXQorICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTFdCisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdFN0dWIKKyAgICAgIFBzaVBhcmFtZXRlckxpc3RTdHViCisgICAgICAgIFBzaVBhcmFtZXRlclN0dWJbdGVzdDpqdW5pdC5mcmFtZXdvcmsuVGVzdF0KKyAgICAgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9MF0KKyAgICAgICAgUHNpUGFyYW1ldGVyU3R1YltyZXN1bHQ6anVuaXQuZnJhbWV3b3JrLlRlc3RSZXN1bHRdCisgICAgICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTBdCisgICAgICBQc2lSZWZMaXN0U3R1YltUSFJPV1NfTElTVDpdCisgICAgUHNpTWV0aG9kU3R1Ylt0ZXN0QXQ6anVuaXQuZnJhbWV3b3JrLlRlc3RdCisgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9MV0KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgUHNpUGFyYW1ldGVyTGlzdFN0dWIKKyAgICAgICAgUHNpUGFyYW1ldGVyU3R1YltpbmRleDppbnRdCisgICAgICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTBdCisgICAgICBQc2lSZWZMaXN0U3R1YltUSFJPV1NfTElTVDpdCisgICAgUHNpTWV0aG9kU3R1Ylt0ZXN0Q291bnQ6aW50XQorICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTFdCisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdFN0dWIKKyAgICAgIFBzaVBhcmFtZXRlckxpc3RTdHViCisgICAgICBQc2lSZWZMaXN0U3R1YltUSFJPV1NfTElTVDpdCisgICAgUHNpTWV0aG9kU3R1Ylt0ZXN0czpqYXZhLnV0aWwuRW51bWVyYXRpb25dCisgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9MV0KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgUHNpUGFyYW1ldGVyTGlzdFN0dWIKKyAgICAgIFBzaVJlZkxpc3RTdHViW1RIUk9XU19MSVNUOl0KKyAgICBQc2lNZXRob2RTdHViW3RvU3RyaW5nOmphdmEubGFuZy5TdHJpbmddCisgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9MV0KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgUHNpUGFyYW1ldGVyTGlzdFN0dWIKKyAgICAgIFBzaVJlZkxpc3RTdHViW1RIUk9XU19MSVNUOl0KKyAgICBQc2lNZXRob2RTdHViW3NldE5hbWU6dm9pZF0KKyAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz0xXQorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3RTdHViCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgICBQc2lQYXJhbWV0ZXJTdHViW25hbWU6amF2YS5sYW5nLlN0cmluZ10KKyAgICAgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9MF0KKyAgICAgIFBzaVJlZkxpc3RTdHViW1RIUk9XU19MSVNUOl0KKyAgICBQc2lNZXRob2RTdHViW2dldE5hbWU6amF2YS5sYW5nLlN0cmluZ10KKyAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz0xXQorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3RTdHViCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgUHNpUmVmTGlzdFN0dWJbVEhST1dTX0xJU1Q6XQorICAgIFBzaU1ldGhvZFN0dWJbd2FybmluZzpqdW5pdC5mcmFtZXdvcmsuVGVzdF0KKyAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz0xMF0KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgUHNpUGFyYW1ldGVyTGlzdFN0dWIKKyAgICAgICAgUHNpUGFyYW1ldGVyU3R1YlttZXNzYWdlOmphdmEubGFuZy5TdHJpbmddCisgICAgICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTBdCisgICAgICBQc2lSZWZMaXN0U3R1YltUSFJPV1NfTElTVDpdCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL2Nscy9zdHViQnVpbGRlci9UaW1lVW5pdC50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL2Nscy9zdHViQnVpbGRlci9UaW1lVW5pdC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmZiYmEzNQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvY2xzL3N0dWJCdWlsZGVyL1RpbWVVbml0LnR4dApAQCAtMCwwICsxLDExOSBAQAorUHNpSmF2YUZpbGVTdHViIFtqYXZhLnV0aWwuY29uY3VycmVudF0KKyAgUHNpQ2xhc3NTdHViW2VudW0gbmFtZT1UaW1lVW5pdCBmcW49amF2YS51dGlsLmNvbmN1cnJlbnQuVGltZVVuaXRdCisgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTE3XQorICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0U3R1YgorICAgIFBzaVJlZkxpc3RTdHViW0VYVEVORFNfTElTVDpdCisgICAgUHNpUmVmTGlzdFN0dWJbSU1QTEVNRU5UU19MSVNUOl0KKyAgICBQc2lGaWVsZFN0dWJbZW51bWNvbnN0IE5BTk9TRUNPTkRTOmphdmEudXRpbC5jb25jdXJyZW50LlRpbWVVbml0XQorICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTI1XQorICAgIFBzaUZpZWxkU3R1YltlbnVtY29uc3QgTUlDUk9TRUNPTkRTOmphdmEudXRpbC5jb25jdXJyZW50LlRpbWVVbml0XQorICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTI1XQorICAgIFBzaUZpZWxkU3R1YltlbnVtY29uc3QgTUlMTElTRUNPTkRTOmphdmEudXRpbC5jb25jdXJyZW50LlRpbWVVbml0XQorICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTI1XQorICAgIFBzaUZpZWxkU3R1YltlbnVtY29uc3QgU0VDT05EUzpqYXZhLnV0aWwuY29uY3VycmVudC5UaW1lVW5pdF0KKyAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz0yNV0KKyAgICBQc2lGaWVsZFN0dWJbaW5kZXg6aW50XQorICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTE4XQorICAgIFBzaUZpZWxkU3R1YlttdWx0aXBsaWVyczppbnRbXV0KKyAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz0yNl0KKyAgICBQc2lGaWVsZFN0dWJbb3ZlcmZsb3dzOmxvbmdbXV0KKyAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz0yNl0KKyAgICBQc2lNZXRob2RTdHViW3ZhbHVlczpqYXZhLnV0aWwuY29uY3VycmVudC5UaW1lVW5pdFtdXQorICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTI1XQorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3RTdHViCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgUHNpUmVmTGlzdFN0dWJbVEhST1dTX0xJU1Q6XQorICAgIFBzaU1ldGhvZFN0dWJbdmFsdWVPZjpqYXZhLnV0aWwuY29uY3VycmVudC5UaW1lVW5pdF0KKyAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz05XQorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3RTdHViCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgICBQc2lQYXJhbWV0ZXJTdHViW3AxOmphdmEubGFuZy5TdHJpbmddCisgICAgICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTBdCisgICAgICBQc2lSZWZMaXN0U3R1YltUSFJPV1NfTElTVDpdCisgICAgUHNpTWV0aG9kU3R1Yltjb25zIFRpbWVVbml0OnZvaWRdCisgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9Ml0KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgUHNpUGFyYW1ldGVyTGlzdFN0dWIKKyAgICAgICAgUHNpUGFyYW1ldGVyU3R1YltwMTppbnRdCisgICAgICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTBdCisgICAgICBQc2lSZWZMaXN0U3R1YltUSFJPV1NfTElTVDpdCisgICAgUHNpTWV0aG9kU3R1Yltkb0NvbnZlcnQ6bG9uZ10KKyAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz0xMF0KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgUHNpUGFyYW1ldGVyTGlzdFN0dWIKKyAgICAgICAgUHNpUGFyYW1ldGVyU3R1YltwMTppbnRdCisgICAgICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTBdCisgICAgICAgIFBzaVBhcmFtZXRlclN0dWJbcDI6bG9uZ10KKyAgICAgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9MF0KKyAgICAgIFBzaVJlZkxpc3RTdHViW1RIUk9XU19MSVNUOl0KKyAgICBQc2lNZXRob2RTdHViW2NvbnZlcnQ6bG9uZ10KKyAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz0xXQorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3RTdHViCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgICBQc2lQYXJhbWV0ZXJTdHViW3AxOmxvbmddCisgICAgICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTBdCisgICAgICAgIFBzaVBhcmFtZXRlclN0dWJbcDI6amF2YS51dGlsLmNvbmN1cnJlbnQuVGltZVVuaXRdCisgICAgICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTBdCisgICAgICBQc2lSZWZMaXN0U3R1YltUSFJPV1NfTElTVDpdCisgICAgUHNpTWV0aG9kU3R1Ylt0b05hbm9zOmxvbmddCisgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9MV0KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgUHNpUGFyYW1ldGVyTGlzdFN0dWIKKyAgICAgICAgUHNpUGFyYW1ldGVyU3R1YltwMTpsb25nXQorICAgICAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz0wXQorICAgICAgUHNpUmVmTGlzdFN0dWJbVEhST1dTX0xJU1Q6XQorICAgIFBzaU1ldGhvZFN0dWJbdG9NaWNyb3M6bG9uZ10KKyAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz0xXQorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3RTdHViCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgICBQc2lQYXJhbWV0ZXJTdHViW3AxOmxvbmddCisgICAgICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTBdCisgICAgICBQc2lSZWZMaXN0U3R1YltUSFJPV1NfTElTVDpdCisgICAgUHNpTWV0aG9kU3R1Ylt0b01pbGxpczpsb25nXQorICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTFdCisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdFN0dWIKKyAgICAgIFBzaVBhcmFtZXRlckxpc3RTdHViCisgICAgICAgIFBzaVBhcmFtZXRlclN0dWJbcDE6bG9uZ10KKyAgICAgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9MF0KKyAgICAgIFBzaVJlZkxpc3RTdHViW1RIUk9XU19MSVNUOl0KKyAgICBQc2lNZXRob2RTdHViW3RvU2Vjb25kczpsb25nXQorICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTFdCisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdFN0dWIKKyAgICAgIFBzaVBhcmFtZXRlckxpc3RTdHViCisgICAgICAgIFBzaVBhcmFtZXRlclN0dWJbcDE6bG9uZ10KKyAgICAgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9MF0KKyAgICAgIFBzaVJlZkxpc3RTdHViW1RIUk9XU19MSVNUOl0KKyAgICBQc2lNZXRob2RTdHViW2V4Y2Vzc05hbm9zOmludF0KKyAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz0yXQorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3RTdHViCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgICBQc2lQYXJhbWV0ZXJTdHViW3AxOmxvbmddCisgICAgICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTBdCisgICAgICAgIFBzaVBhcmFtZXRlclN0dWJbcDI6bG9uZ10KKyAgICAgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9MF0KKyAgICAgIFBzaVJlZkxpc3RTdHViW1RIUk9XU19MSVNUOl0KKyAgICBQc2lNZXRob2RTdHViW3RpbWVkV2FpdDp2b2lkXQorICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTFdCisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdFN0dWIKKyAgICAgIFBzaVBhcmFtZXRlckxpc3RTdHViCisgICAgICAgIFBzaVBhcmFtZXRlclN0dWJbcDE6amF2YS5sYW5nLk9iamVjdF0KKyAgICAgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9MF0KKyAgICAgICAgUHNpUGFyYW1ldGVyU3R1YltwMjpsb25nXQorICAgICAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz0wXQorICAgICAgUHNpUmVmTGlzdFN0dWJbVEhST1dTX0xJU1Q6amF2YS5sYW5nLkludGVycnVwdGVkRXhjZXB0aW9uXQorICAgIFBzaU1ldGhvZFN0dWJbdGltZWRKb2luOnZvaWRdCisgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9MV0KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgUHNpUGFyYW1ldGVyTGlzdFN0dWIKKyAgICAgICAgUHNpUGFyYW1ldGVyU3R1YltwMTpqYXZhLmxhbmcuVGhyZWFkXQorICAgICAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz0wXQorICAgICAgICBQc2lQYXJhbWV0ZXJTdHViW3AyOmxvbmddCisgICAgICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTBdCisgICAgICBQc2lSZWZMaXN0U3R1YltUSFJPV1NfTElTVDpqYXZhLmxhbmcuSW50ZXJydXB0ZWRFeGNlcHRpb25dCisgICAgUHNpTWV0aG9kU3R1YltzbGVlcDp2b2lkXQorICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTFdCisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdFN0dWIKKyAgICAgIFBzaVBhcmFtZXRlckxpc3RTdHViCisgICAgICAgIFBzaVBhcmFtZXRlclN0dWJbcDE6bG9uZ10KKyAgICAgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9MF0KKyAgICAgIFBzaVJlZkxpc3RTdHViW1RIUk9XU19MSVNUOmphdmEubGFuZy5JbnRlcnJ1cHRlZEV4Y2VwdGlvbl0KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvY2xzL3N0dWJCdWlsZGVyL1V0aWxDb2xsZWN0aW9ucy50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL2Nscy9zdHViQnVpbGRlci9VdGlsQ29sbGVjdGlvbnMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ1OGUyZTYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL2Nscy9zdHViQnVpbGRlci9VdGlsQ29sbGVjdGlvbnMudHh0CkBAIC0wLDAgKzEsMjMwMSBAQAorUHNpSmF2YUZpbGVTdHViIFtqYXZhLnV0aWxdCisgIFBzaUNsYXNzU3R1YltuYW1lPUNvbGxlY3Rpb25zIGZxbj1qYXZhLnV0aWwuQ29sbGVjdGlvbnNdCisgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTFdCisgICAgUHNpVHlwZVBhcmFtZXRlckxpc3RTdHViCisgICAgUHNpUmVmTGlzdFN0dWJbRVhURU5EU19MSVNUOl0KKyAgICBQc2lSZWZMaXN0U3R1YltJTVBMRU1FTlRTX0xJU1Q6XQorICAgIFBzaUNsYXNzU3R1YltuYW1lPUNvcGllc0xpc3QgZnFuPWphdmEudXRpbC5Db2xsZWN0aW9ucy5Db3BpZXNMaXN0XQorICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTEwXQorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3RTdHViCisgICAgICAgIFBzaVR5cGVQYXJhbWV0ZXJbRV0KKyAgICAgICAgICBQc2lSZWZMaXN0U3R1YltFWFRFTkRTX0JPVU5EU19MSVNUOl0KKyAgICAgIFBzaVJlZkxpc3RTdHViW0VYVEVORFNfTElTVDpqYXZhLnV0aWwuQWJzdHJhY3RMaXN0PEU+XQorICAgICAgUHNpUmVmTGlzdFN0dWJbSU1QTEVNRU5UU19MSVNUOmphdmEudXRpbC5SYW5kb21BY2Nlc3MsIGphdmEuaW8uU2VyaWFsaXphYmxlXQorICAgICAgUHNpRmllbGRTdHViW3NlcmlhbFZlcnNpb25VSUQ6bG9uZz0yNzM5MDk5MjY4Mzk4NzExODAwTF0KKyAgICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTQxMjBdCisgICAgICBQc2lGaWVsZFN0dWJbbjppbnRdCisgICAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz00MDk2XQorICAgICAgUHNpRmllbGRTdHViW2VsZW1lbnQ6RV0KKyAgICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTQwOTZdCisgICAgICBQc2lNZXRob2RTdHViW2NvbnMgQ29waWVzTGlzdDp2b2lkXQorICAgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9NDA5Nl0KKyAgICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3RTdHViCisgICAgICAgIFBzaVBhcmFtZXRlckxpc3RTdHViCisgICAgICAgICAgUHNpUGFyYW1ldGVyU3R1YltwMTppbnRdCisgICAgICAgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9MF0KKyAgICAgICAgICBQc2lQYXJhbWV0ZXJTdHViW3AyOkVdCisgICAgICAgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9MF0KKyAgICAgICAgUHNpUmVmTGlzdFN0dWJbVEhST1dTX0xJU1Q6XQorICAgICAgUHNpTWV0aG9kU3R1YltzaXplOmludF0KKyAgICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTFdCisgICAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgICBQc2lQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgICBQc2lSZWZMaXN0U3R1YltUSFJPV1NfTElTVDpdCisgICAgICBQc2lNZXRob2RTdHViW2NvbnRhaW5zOmJvb2xlYW5dCisgICAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz0xXQorICAgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdFN0dWIKKyAgICAgICAgUHNpUGFyYW1ldGVyTGlzdFN0dWIKKyAgICAgICAgICBQc2lQYXJhbWV0ZXJTdHViW3AxOmphdmEubGFuZy5PYmplY3RdCisgICAgICAgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9MF0KKyAgICAgICAgUHNpUmVmTGlzdFN0dWJbVEhST1dTX0xJU1Q6XQorICAgICAgUHNpTWV0aG9kU3R1YltnZXQ6RV0KKyAgICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTFdCisgICAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgICBQc2lQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgICAgIFBzaVBhcmFtZXRlclN0dWJbcDE6aW50XQorICAgICAgICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTBdCisgICAgICAgIFBzaVJlZkxpc3RTdHViW1RIUk9XU19MSVNUOl0KKyAgICBQc2lDbGFzc1N0dWJbbmFtZT1FbXB0eUxpc3QgZnFuPWphdmEudXRpbC5Db2xsZWN0aW9ucy5FbXB0eUxpc3RdCisgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9MTBdCisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdFN0dWIKKyAgICAgIFBzaVJlZkxpc3RTdHViW0VYVEVORFNfTElTVDpqYXZhLnV0aWwuQWJzdHJhY3RMaXN0PGphdmEubGFuZy5PYmplY3Q+XQorICAgICAgUHNpUmVmTGlzdFN0dWJbSU1QTEVNRU5UU19MSVNUOmphdmEudXRpbC5SYW5kb21BY2Nlc3MsIGphdmEuaW8uU2VyaWFsaXphYmxlXQorICAgICAgUHNpRmllbGRTdHViW3NlcmlhbFZlcnNpb25VSUQ6bG9uZz04ODQyODQzOTMxMjIxMTM5MTY2TF0KKyAgICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTI2XQorICAgICAgUHNpTWV0aG9kU3R1Yltjb25zIEVtcHR5TGlzdDp2b2lkXQorICAgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9Ml0KKyAgICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3RTdHViCisgICAgICAgIFBzaVBhcmFtZXRlckxpc3RTdHViCisgICAgICAgIFBzaVJlZkxpc3RTdHViW1RIUk9XU19MSVNUOl0KKyAgICAgIFBzaU1ldGhvZFN0dWJbc2l6ZTppbnRdCisgICAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz0xXQorICAgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdFN0dWIKKyAgICAgICAgUHNpUGFyYW1ldGVyTGlzdFN0dWIKKyAgICAgICAgUHNpUmVmTGlzdFN0dWJbVEhST1dTX0xJU1Q6XQorICAgICAgUHNpTWV0aG9kU3R1Yltjb250YWluczpib29sZWFuXQorICAgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9MV0KKyAgICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3RTdHViCisgICAgICAgIFBzaVBhcmFtZXRlckxpc3RTdHViCisgICAgICAgICAgUHNpUGFyYW1ldGVyU3R1YltwMTpqYXZhLmxhbmcuT2JqZWN0XQorICAgICAgICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTBdCisgICAgICAgIFBzaVJlZkxpc3RTdHViW1RIUk9XU19MSVNUOl0KKyAgICAgIFBzaU1ldGhvZFN0dWJbZ2V0OmphdmEubGFuZy5PYmplY3RdCisgICAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz0xXQorICAgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdFN0dWIKKyAgICAgICAgUHNpUGFyYW1ldGVyTGlzdFN0dWIKKyAgICAgICAgICBQc2lQYXJhbWV0ZXJTdHViW3AxOmludF0KKyAgICAgICAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz0wXQorICAgICAgICBQc2lSZWZMaXN0U3R1YltUSFJPV1NfTElTVDpdCisgICAgICBQc2lNZXRob2RTdHViW3JlYWRSZXNvbHZlOmphdmEubGFuZy5PYmplY3RdCisgICAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz0yXQorICAgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdFN0dWIKKyAgICAgICAgUHNpUGFyYW1ldGVyTGlzdFN0dWIKKyAgICAgICAgUHNpUmVmTGlzdFN0dWJbVEhST1dTX0xJU1Q6XQorICAgIFBzaUNsYXNzU3R1YltuYW1lPUVtcHR5TWFwIGZxbj1qYXZhLnV0aWwuQ29sbGVjdGlvbnMuRW1wdHlNYXBdCisgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9MTBdCisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdFN0dWIKKyAgICAgIFBzaVJlZkxpc3RTdHViW0VYVEVORFNfTElTVDpqYXZhLnV0aWwuQWJzdHJhY3RNYXA8amF2YS5sYW5nLk9iamVjdCxqYXZhLmxhbmcuT2JqZWN0Pl0KKyAgICAgIFBzaVJlZkxpc3RTdHViW0lNUExFTUVOVFNfTElTVDpqYXZhLmlvLlNlcmlhbGl6YWJsZV0KKyAgICAgIFBzaUZpZWxkU3R1YltzZXJpYWxWZXJzaW9uVUlEOmxvbmc9NjQyODM0ODA4MTEwNTU5NDMyMExdCisgICAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz0yNl0KKyAgICAgIFBzaU1ldGhvZFN0dWJbY29ucyBFbXB0eU1hcDp2b2lkXQorICAgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9Ml0KKyAgICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3RTdHViCisgICAgICAgIFBzaVBhcmFtZXRlckxpc3RTdHViCisgICAgICAgIFBzaVJlZkxpc3RTdHViW1RIUk9XU19MSVNUOl0KKyAgICAgIFBzaU1ldGhvZFN0dWJbc2l6ZTppbnRdCisgICAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz0xXQorICAgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdFN0dWIKKyAgICAgICAgUHNpUGFyYW1ldGVyTGlzdFN0dWIKKyAgICAgICAgUHNpUmVmTGlzdFN0dWJbVEhST1dTX0xJU1Q6XQorICAgICAgUHNpTWV0aG9kU3R1Yltpc0VtcHR5OmJvb2xlYW5dCisgICAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz0xXQorICAgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdFN0dWIKKyAgICAgICAgUHNpUGFyYW1ldGVyTGlzdFN0dWIKKyAgICAgICAgUHNpUmVmTGlzdFN0dWJbVEhST1dTX0xJU1Q6XQorICAgICAgUHNpTWV0aG9kU3R1Yltjb250YWluc0tleTpib29sZWFuXQorICAgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9MV0KKyAgICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3RTdHViCisgICAgICAgIFBzaVBhcmFtZXRlckxpc3RTdHViCisgICAgICAgICAgUHNpUGFyYW1ldGVyU3R1YltwMTpqYXZhLmxhbmcuT2JqZWN0XQorICAgICAgICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTBdCisgICAgICAgIFBzaVJlZkxpc3RTdHViW1RIUk9XU19MSVNUOl0KKyAgICAgIFBzaU1ldGhvZFN0dWJbY29udGFpbnNWYWx1ZTpib29sZWFuXQorICAgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9MV0KKyAgICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3RTdHViCisgICAgICAgIFBzaVBhcmFtZXRlckxpc3RTdHViCisgICAgICAgICAgUHNpUGFyYW1ldGVyU3R1YltwMTpqYXZhLmxhbmcuT2JqZWN0XQorICAgICAgICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTBdCisgICAgICAgIFBzaVJlZkxpc3RTdHViW1RIUk9XU19MSVNUOl0KKyAgICAgIFBzaU1ldGhvZFN0dWJbZ2V0OmphdmEubGFuZy5PYmplY3RdCisgICAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz0xXQorICAgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdFN0dWIKKyAgICAgICAgUHNpUGFyYW1ldGVyTGlzdFN0dWIKKyAgICAgICAgICBQc2lQYXJhbWV0ZXJTdHViW3AxOmphdmEubGFuZy5PYmplY3RdCisgICAgICAgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9MF0KKyAgICAgICAgUHNpUmVmTGlzdFN0dWJbVEhST1dTX0xJU1Q6XQorICAgICAgUHNpTWV0aG9kU3R1YltrZXlTZXQ6amF2YS51dGlsLlNldDxqYXZhLmxhbmcuT2JqZWN0Pl0KKyAgICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTFdCisgICAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgICBQc2lQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgICBQc2lSZWZMaXN0U3R1YltUSFJPV1NfTElTVDpdCisgICAgICBQc2lNZXRob2RTdHViW3ZhbHVlczpqYXZhLnV0aWwuQ29sbGVjdGlvbjxqYXZhLmxhbmcuT2JqZWN0Pl0KKyAgICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTFdCisgICAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgICBQc2lQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgICBQc2lSZWZMaXN0U3R1YltUSFJPV1NfTElTVDpdCisgICAgICBQc2lNZXRob2RTdHViW2VudHJ5U2V0OmphdmEudXRpbC5TZXQ8amF2YS51dGlsLk1hcC5FbnRyeTxqYXZhLmxhbmcuT2JqZWN0LGphdmEubGFuZy5PYmplY3Q+Pl0KKyAgICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTFdCisgICAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgICBQc2lQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgICBQc2lSZWZMaXN0U3R1YltUSFJPV1NfTElTVDpdCisgICAgICBQc2lNZXRob2RTdHViW2VxdWFsczpib29sZWFuXQorICAgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9MV0KKyAgICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3RTdHViCisgICAgICAgIFBzaVBhcmFtZXRlckxpc3RTdHViCisgICAgICAgICAgUHNpUGFyYW1ldGVyU3R1YltwMTpqYXZhLmxhbmcuT2JqZWN0XQorICAgICAgICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTBdCisgICAgICAgIFBzaVJlZkxpc3RTdHViW1RIUk9XU19MSVNUOl0KKyAgICAgIFBzaU1ldGhvZFN0dWJbaGFzaENvZGU6aW50XQorICAgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9MV0KKyAgICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3RTdHViCisgICAgICAgIFBzaVBhcmFtZXRlckxpc3RTdHViCisgICAgICAgIFBzaVJlZkxpc3RTdHViW1RIUk9XU19MSVNUOl0KKyAgICAgIFBzaU1ldGhvZFN0dWJbcmVhZFJlc29sdmU6amF2YS5sYW5nLk9iamVjdF0KKyAgICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTJdCisgICAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgICBQc2lQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgICBQc2lSZWZMaXN0U3R1YltUSFJPV1NfTElTVDpdCisgICAgUHNpQ2xhc3NTdHViW25hbWU9RW1wdHlTZXQgZnFuPWphdmEudXRpbC5Db2xsZWN0aW9ucy5FbXB0eVNldF0KKyAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz0xMF0KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgUHNpUmVmTGlzdFN0dWJbRVhURU5EU19MSVNUOmphdmEudXRpbC5BYnN0cmFjdFNldDxqYXZhLmxhbmcuT2JqZWN0Pl0KKyAgICAgIFBzaVJlZkxpc3RTdHViW0lNUExFTUVOVFNfTElTVDpqYXZhLmlvLlNlcmlhbGl6YWJsZV0KKyAgICAgIFBzaUZpZWxkU3R1YltzZXJpYWxWZXJzaW9uVUlEOmxvbmc9MTU4MjI5NjMxNTk5MDM2MjkyMExdCisgICAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz0yNl0KKyAgICAgIFBzaU1ldGhvZFN0dWJbY29ucyBFbXB0eVNldDp2b2lkXQorICAgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9Ml0KKyAgICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3RTdHViCisgICAgICAgIFBzaVBhcmFtZXRlckxpc3RTdHViCisgICAgICAgIFBzaVJlZkxpc3RTdHViW1RIUk9XU19MSVNUOl0KKyAgICAgIFBzaU1ldGhvZFN0dWJbaXRlcmF0b3I6amF2YS51dGlsLkl0ZXJhdG9yPGphdmEubGFuZy5PYmplY3Q+XQorICAgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9MV0KKyAgICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3RTdHViCisgICAgICAgIFBzaVBhcmFtZXRlckxpc3RTdHViCisgICAgICAgIFBzaVJlZkxpc3RTdHViW1RIUk9XU19MSVNUOl0KKyAgICAgIFBzaU1ldGhvZFN0dWJbc2l6ZTppbnRdCisgICAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz0xXQorICAgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdFN0dWIKKyAgICAgICAgUHNpUGFyYW1ldGVyTGlzdFN0dWIKKyAgICAgICAgUHNpUmVmTGlzdFN0dWJbVEhST1dTX0xJU1Q6XQorICAgICAgUHNpTWV0aG9kU3R1Yltjb250YWluczpib29sZWFuXQorICAgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9MV0KKyAgICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3RTdHViCisgICAgICAgIFBzaVBhcmFtZXRlckxpc3RTdHViCisgICAgICAgICAgUHNpUGFyYW1ldGVyU3R1YltwMTpqYXZhLmxhbmcuT2JqZWN0XQorICAgICAgICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTBdCisgICAgICAgIFBzaVJlZkxpc3RTdHViW1RIUk9XU19MSVNUOl0KKyAgICAgIFBzaU1ldGhvZFN0dWJbcmVhZFJlc29sdmU6amF2YS5sYW5nLk9iamVjdF0KKyAgICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTJdCisgICAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgICBQc2lQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgICBQc2lSZWZMaXN0U3R1YltUSFJPV1NfTElTVDpdCisgICAgUHNpQ2xhc3NTdHViW25hbWU9UmV2ZXJzZUNvbXBhcmF0b3IgZnFuPWphdmEudXRpbC5Db2xsZWN0aW9ucy5SZXZlcnNlQ29tcGFyYXRvcl0KKyAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz0xMF0KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgICBQc2lUeXBlUGFyYW1ldGVyW1RdCisgICAgICAgICAgUHNpUmVmTGlzdFN0dWJbRVhURU5EU19CT1VORFNfTElTVDpdCisgICAgICBQc2lSZWZMaXN0U3R1YltFWFRFTkRTX0xJU1Q6XQorICAgICAgUHNpUmVmTGlzdFN0dWJbSU1QTEVNRU5UU19MSVNUOmphdmEudXRpbC5Db21wYXJhdG9yPGphdmEubGFuZy5Db21wYXJhYmxlPGphdmEubGFuZy5PYmplY3Q+PiwgamF2YS5pby5TZXJpYWxpemFibGVdCisgICAgICBQc2lGaWVsZFN0dWJbc2VyaWFsVmVyc2lvblVJRDpsb25nPTcyMDcwMzgwNjg0OTQwNjAyNDBMXQorICAgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9MjZdCisgICAgICBQc2lNZXRob2RTdHViW2NvbnMgUmV2ZXJzZUNvbXBhcmF0b3I6dm9pZF0KKyAgICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTJdCisgICAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgICBQc2lQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgICBQc2lSZWZMaXN0U3R1YltUSFJPV1NfTElTVDpdCisgICAgICBQc2lNZXRob2RTdHViW2NvbXBhcmU6aW50XQorICAgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9MV0KKyAgICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3RTdHViCisgICAgICAgIFBzaVBhcmFtZXRlckxpc3RTdHViCisgICAgICAgICAgUHNpUGFyYW1ldGVyU3R1YltwMTpqYXZhLmxhbmcuQ29tcGFyYWJsZTxqYXZhLmxhbmcuT2JqZWN0Pl0KKyAgICAgICAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz0wXQorICAgICAgICAgIFBzaVBhcmFtZXRlclN0dWJbcDI6amF2YS5sYW5nLkNvbXBhcmFibGU8amF2YS5sYW5nLk9iamVjdD5dCisgICAgICAgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9MF0KKyAgICAgICAgUHNpUmVmTGlzdFN0dWJbVEhST1dTX0xJU1Q6XQorICAgIFBzaUNsYXNzU3R1YltuYW1lPVJldmVyc2VDb21wYXJhdG9yMiBmcW49amF2YS51dGlsLkNvbGxlY3Rpb25zLlJldmVyc2VDb21wYXJhdG9yMl0KKyAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz0xMF0KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgICBQc2lUeXBlUGFyYW1ldGVyW1RdCisgICAgICAgICAgUHNpUmVmTGlzdFN0dWJbRVhURU5EU19CT1VORFNfTElTVDpdCisgICAgICBQc2lSZWZMaXN0U3R1YltFWFRFTkRTX0xJU1Q6XQorICAgICAgUHNpUmVmTGlzdFN0dWJbSU1QTEVNRU5UU19MSVNUOmphdmEudXRpbC5Db21wYXJhdG9yPFQ+LCBqYXZhLmlvLlNlcmlhbGl6YWJsZV0KKyAgICAgIFBzaUZpZWxkU3R1YltzZXJpYWxWZXJzaW9uVUlEOmxvbmc9NDM3NDA5MjEzOTg1N0xdCisgICAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz0yNl0KKyAgICAgIFBzaUZpZWxkU3R1YltjbXA6amF2YS51dGlsLkNvbXBhcmF0b3I8VD5dCisgICAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz0yXQorICAgICAgUHNpTWV0aG9kU3R1Yltjb25zIFJldmVyc2VDb21wYXJhdG9yMjp2b2lkXQorICAgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9NDA5Nl0KKyAgICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3RTdHViCisgICAgICAgIFBzaVBhcmFtZXRlckxpc3RTdHViCisgICAgICAgICAgUHNpUGFyYW1ldGVyU3R1YltwMTpqYXZhLnV0aWwuQ29tcGFyYXRvcjxUPl0KKyAgICAgICAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz0wXQorICAgICAgICBQc2lSZWZMaXN0U3R1YltUSFJPV1NfTElTVDpdCisgICAgICBQc2lNZXRob2RTdHViW2NvbXBhcmU6aW50XQorICAgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9MV0KKyAgICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3RTdHViCisgICAgICAgIFBzaVBhcmFtZXRlckxpc3RTdHViCisgICAgICAgICAgUHNpUGFyYW1ldGVyU3R1YltwMTpUXQorICAgICAgICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTBdCisgICAgICAgICAgUHNpUGFyYW1ldGVyU3R1YltwMjpUXQorICAgICAgICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTBdCisgICAgICAgIFBzaVJlZkxpc3RTdHViW1RIUk9XU19MSVNUOl0KKyAgICBQc2lDbGFzc1N0dWJbaW50ZXJmYWNlIG5hbWU9U2VsZkNvbXBhcmFibGUgZnFuPWphdmEudXRpbC5Db2xsZWN0aW9ucy5TZWxmQ29tcGFyYWJsZV0KKyAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz0xMDM0XQorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3RTdHViCisgICAgICBQc2lSZWZMaXN0U3R1YltFWFRFTkRTX0xJU1Q6amF2YS5sYW5nLkNvbXBhcmFibGU8amF2YS51dGlsLkNvbGxlY3Rpb25zLlNlbGZDb21wYXJhYmxlPl0KKyAgICAgIFBzaVJlZkxpc3RTdHViW0lNUExFTUVOVFNfTElTVDpdCisgICAgUHNpQ2xhc3NTdHViW25hbWU9U2luZ2xldG9uTGlzdCBmcW49amF2YS51dGlsLkNvbGxlY3Rpb25zLlNpbmdsZXRvbkxpc3RdCisgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9MTBdCisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdFN0dWIKKyAgICAgICAgUHNpVHlwZVBhcmFtZXRlcltFXQorICAgICAgICAgIFBzaVJlZkxpc3RTdHViW0VYVEVORFNfQk9VTkRTX0xJU1Q6XQorICAgICAgUHNpUmVmTGlzdFN0dWJbRVhURU5EU19MSVNUOmphdmEudXRpbC5BYnN0cmFjdExpc3Q8RT5dCisgICAgICBQc2lSZWZMaXN0U3R1YltJTVBMRU1FTlRTX0xJU1Q6amF2YS51dGlsLlJhbmRvbUFjY2VzcywgamF2YS5pby5TZXJpYWxpemFibGVdCisgICAgICBQc2lGaWVsZFN0dWJbc2VyaWFsVmVyc2lvblVJRDpsb25nPTMwOTM3MzY2MTg3NDA2NTI5NTFMXQorICAgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9NDEyMF0KKyAgICAgIFBzaUZpZWxkU3R1YltlbGVtZW50OkVdCisgICAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz0xOF0KKyAgICAgIFBzaU1ldGhvZFN0dWJbY29ucyBTaW5nbGV0b25MaXN0OnZvaWRdCisgICAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz00MDk2XQorICAgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdFN0dWIKKyAgICAgICAgUHNpUGFyYW1ldGVyTGlzdFN0dWIKKyAgICAgICAgICBQc2lQYXJhbWV0ZXJTdHViW3AxOkVdCisgICAgICAgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9MF0KKyAgICAgICAgUHNpUmVmTGlzdFN0dWJbVEhST1dTX0xJU1Q6XQorICAgICAgUHNpTWV0aG9kU3R1YltzaXplOmludF0KKyAgICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTFdCisgICAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgICBQc2lQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgICBQc2lSZWZMaXN0U3R1YltUSFJPV1NfTElTVDpdCisgICAgICBQc2lNZXRob2RTdHViW2NvbnRhaW5zOmJvb2xlYW5dCisgICAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz0xXQorICAgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdFN0dWIKKyAgICAgICAgUHNpUGFyYW1ldGVyTGlzdFN0dWIKKyAgICAgICAgICBQc2lQYXJhbWV0ZXJTdHViW3AxOmphdmEubGFuZy5PYmplY3RdCisgICAgICAgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9MF0KKyAgICAgICAgUHNpUmVmTGlzdFN0dWJbVEhST1dTX0xJU1Q6XQorICAgICAgUHNpTWV0aG9kU3R1YltnZXQ6RV0KKyAgICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTFdCisgICAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgICBQc2lQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgICAgIFBzaVBhcmFtZXRlclN0dWJbcDE6aW50XQorICAgICAgICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTBdCisgICAgICAgIFBzaVJlZkxpc3RTdHViW1RIUk9XU19MSVNUOl0KKyAgICBQc2lDbGFzc1N0dWJbbmFtZT1TaW5nbGV0b25NYXAgZnFuPWphdmEudXRpbC5Db2xsZWN0aW9ucy5TaW5nbGV0b25NYXBdCisgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9MTBdCisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdFN0dWIKKyAgICAgICAgUHNpVHlwZVBhcmFtZXRlcltLXQorICAgICAgICAgIFBzaVJlZkxpc3RTdHViW0VYVEVORFNfQk9VTkRTX0xJU1Q6XQorICAgICAgICBQc2lUeXBlUGFyYW1ldGVyW1ZdCisgICAgICAgICAgUHNpUmVmTGlzdFN0dWJbRVhURU5EU19CT1VORFNfTElTVDpdCisgICAgICBQc2lSZWZMaXN0U3R1YltFWFRFTkRTX0xJU1Q6amF2YS51dGlsLkFic3RyYWN0TWFwPEssVj5dCisgICAgICBQc2lSZWZMaXN0U3R1YltJTVBMRU1FTlRTX0xJU1Q6amF2YS5pby5TZXJpYWxpemFibGVdCisgICAgICBQc2lDbGFzc1N0dWJbbmFtZT1JbW11dGFibGVFbnRyeSBmcW49amF2YS51dGlsLkNvbGxlY3Rpb25zLlNpbmdsZXRvbk1hcC5JbW11dGFibGVFbnRyeV0KKyAgICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTEwXQorICAgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdFN0dWIKKyAgICAgICAgICBQc2lUeXBlUGFyYW1ldGVyW0tdCisgICAgICAgICAgICBQc2lSZWZMaXN0U3R1YltFWFRFTkRTX0JPVU5EU19MSVNUOl0KKyAgICAgICAgICBQc2lUeXBlUGFyYW1ldGVyW1ZdCisgICAgICAgICAgICBQc2lSZWZMaXN0U3R1YltFWFRFTkRTX0JPVU5EU19MSVNUOl0KKyAgICAgICAgUHNpUmVmTGlzdFN0dWJbRVhURU5EU19MSVNUOl0KKyAgICAgICAgUHNpUmVmTGlzdFN0dWJbSU1QTEVNRU5UU19MSVNUOmphdmEudXRpbC5NYXAuRW50cnk8SyxWPl0KKyAgICAgICAgUHNpRmllbGRTdHViW2s6S10KKyAgICAgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9NDExMl0KKyAgICAgICAgUHNpRmllbGRTdHViW3Y6Vl0KKyAgICAgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9NDExMl0KKyAgICAgICAgUHNpTWV0aG9kU3R1Yltjb25zIEltbXV0YWJsZUVudHJ5OnZvaWRdCisgICAgICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTQwOTZdCisgICAgICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3RTdHViCisgICAgICAgICAgUHNpUGFyYW1ldGVyTGlzdFN0dWIKKyAgICAgICAgICAgIFBzaVBhcmFtZXRlclN0dWJbcDE6S10KKyAgICAgICAgICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTBdCisgICAgICAgICAgICBQc2lQYXJhbWV0ZXJTdHViW3AyOlZdCisgICAgICAgICAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz0wXQorICAgICAgICAgIFBzaVJlZkxpc3RTdHViW1RIUk9XU19MSVNUOl0KKyAgICAgICAgUHNpTWV0aG9kU3R1YltnZXRLZXk6S10KKyAgICAgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9MV0KKyAgICAgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdFN0dWIKKyAgICAgICAgICBQc2lQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgICAgIFBzaVJlZkxpc3RTdHViW1RIUk9XU19MSVNUOl0KKyAgICAgICAgUHNpTWV0aG9kU3R1YltnZXRWYWx1ZTpWXQorICAgICAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz0xXQorICAgICAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgICAgIFBzaVBhcmFtZXRlckxpc3RTdHViCisgICAgICAgICAgUHNpUmVmTGlzdFN0dWJbVEhST1dTX0xJU1Q6XQorICAgICAgICBQc2lNZXRob2RTdHViW3NldFZhbHVlOlZdCisgICAgICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTFdCisgICAgICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3RTdHViCisgICAgICAgICAgUHNpUGFyYW1ldGVyTGlzdFN0dWIKKyAgICAgICAgICAgIFBzaVBhcmFtZXRlclN0dWJbcDE6Vl0KKyAgICAgICAgICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTBdCisgICAgICAgICAgUHNpUmVmTGlzdFN0dWJbVEhST1dTX0xJU1Q6XQorICAgICAgICBQc2lNZXRob2RTdHViW2VxdWFsczpib29sZWFuXQorICAgICAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz0xXQorICAgICAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgICAgIFBzaVBhcmFtZXRlckxpc3RTdHViCisgICAgICAgICAgICBQc2lQYXJhbWV0ZXJTdHViW3AxOmphdmEubGFuZy5PYmplY3RdCisgICAgICAgICAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz0wXQorICAgICAgICAgIFBzaVJlZkxpc3RTdHViW1RIUk9XU19MSVNUOl0KKyAgICAgICAgUHNpTWV0aG9kU3R1YltoYXNoQ29kZTppbnRdCisgICAgICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTFdCisgICAgICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3RTdHViCisgICAgICAgICAgUHNpUGFyYW1ldGVyTGlzdFN0dWIKKyAgICAgICAgICBQc2lSZWZMaXN0U3R1YltUSFJPV1NfTElTVDpdCisgICAgICAgIFBzaU1ldGhvZFN0dWJbdG9TdHJpbmc6amF2YS5sYW5nLlN0cmluZ10KKyAgICAgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9MV0KKyAgICAgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdFN0dWIKKyAgICAgICAgICBQc2lQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgICAgIFBzaVJlZkxpc3RTdHViW1RIUk9XU19MSVNUOl0KKyAgICAgIFBzaUZpZWxkU3R1YltzZXJpYWxWZXJzaW9uVUlEOmxvbmc9LTY5Nzk3MjQ0NzcyMTUwNTI5MTFMXQorICAgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9MjZdCisgICAgICBQc2lGaWVsZFN0dWJbazpLXQorICAgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9MThdCisgICAgICBQc2lGaWVsZFN0dWJbdjpWXQorICAgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9MThdCisgICAgICBQc2lGaWVsZFN0dWJba2V5U2V0OmphdmEudXRpbC5TZXQ8Sz5dCisgICAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz0xMzBdCisgICAgICBQc2lGaWVsZFN0dWJbZW50cnlTZXQ6amF2YS51dGlsLlNldDxqYXZhLnV0aWwuTWFwLkVudHJ5PEssVj4+XQorICAgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9MTMwXQorICAgICAgUHNpRmllbGRTdHViW3ZhbHVlczpqYXZhLnV0aWwuQ29sbGVjdGlvbjxWPl0KKyAgICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTEzMF0KKyAgICAgIFBzaU1ldGhvZFN0dWJbY29ucyBTaW5nbGV0b25NYXA6dm9pZF0KKyAgICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTQwOTZdCisgICAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgICBQc2lQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgICAgIFBzaVBhcmFtZXRlclN0dWJbcDE6S10KKyAgICAgICAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz0wXQorICAgICAgICAgIFBzaVBhcmFtZXRlclN0dWJbcDI6Vl0KKyAgICAgICAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz0wXQorICAgICAgICBQc2lSZWZMaXN0U3R1YltUSFJPV1NfTElTVDpdCisgICAgICBQc2lNZXRob2RTdHViW3NpemU6aW50XQorICAgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9MV0KKyAgICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3RTdHViCisgICAgICAgIFBzaVBhcmFtZXRlckxpc3RTdHViCisgICAgICAgIFBzaVJlZkxpc3RTdHViW1RIUk9XU19MSVNUOl0KKyAgICAgIFBzaU1ldGhvZFN0dWJbaXNFbXB0eTpib29sZWFuXQorICAgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9MV0KKyAgICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3RTdHViCisgICAgICAgIFBzaVBhcmFtZXRlckxpc3RTdHViCisgICAgICAgIFBzaVJlZkxpc3RTdHViW1RIUk9XU19MSVNUOl0KKyAgICAgIFBzaU1ldGhvZFN0dWJbY29udGFpbnNLZXk6Ym9vbGVhbl0KKyAgICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTFdCisgICAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgICBQc2lQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgICAgIFBzaVBhcmFtZXRlclN0dWJbcDE6amF2YS5sYW5nLk9iamVjdF0KKyAgICAgICAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz0wXQorICAgICAgICBQc2lSZWZMaXN0U3R1YltUSFJPV1NfTElTVDpdCisgICAgICBQc2lNZXRob2RTdHViW2NvbnRhaW5zVmFsdWU6Ym9vbGVhbl0KKyAgICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTFdCisgICAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgICBQc2lQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgICAgIFBzaVBhcmFtZXRlclN0dWJbcDE6amF2YS5sYW5nLk9iamVjdF0KKyAgICAgICAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz0wXQorICAgICAgICBQc2lSZWZMaXN0U3R1YltUSFJPV1NfTElTVDpdCisgICAgICBQc2lNZXRob2RTdHViW2dldDpWXQorICAgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9MV0KKyAgICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3RTdHViCisgICAgICAgIFBzaVBhcmFtZXRlckxpc3RTdHViCisgICAgICAgICAgUHNpUGFyYW1ldGVyU3R1YltwMTpqYXZhLmxhbmcuT2JqZWN0XQorICAgICAgICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTBdCisgICAgICAgIFBzaVJlZkxpc3RTdHViW1RIUk9XU19MSVNUOl0KKyAgICAgIFBzaU1ldGhvZFN0dWJba2V5U2V0OmphdmEudXRpbC5TZXQ8Sz5dCisgICAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz0xXQorICAgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdFN0dWIKKyAgICAgICAgUHNpUGFyYW1ldGVyTGlzdFN0dWIKKyAgICAgICAgUHNpUmVmTGlzdFN0dWJbVEhST1dTX0xJU1Q6XQorICAgICAgUHNpTWV0aG9kU3R1YltlbnRyeVNldDpqYXZhLnV0aWwuU2V0PGphdmEudXRpbC5NYXAuRW50cnk8SyxWPj5dCisgICAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz0xXQorICAgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdFN0dWIKKyAgICAgICAgUHNpUGFyYW1ldGVyTGlzdFN0dWIKKyAgICAgICAgUHNpUmVmTGlzdFN0dWJbVEhST1dTX0xJU1Q6XQorICAgICAgUHNpTWV0aG9kU3R1Ylt2YWx1ZXM6amF2YS51dGlsLkNvbGxlY3Rpb248Vj5dCisgICAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz0xXQorICAgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdFN0dWIKKyAgICAgICAgUHNpUGFyYW1ldGVyTGlzdFN0dWIKKyAgICAgICAgUHNpUmVmTGlzdFN0dWJbVEhST1dTX0xJU1Q6XQorICAgIFBzaUNsYXNzU3R1YltuYW1lPVNpbmdsZXRvblNldCBmcW49amF2YS51dGlsLkNvbGxlY3Rpb25zLlNpbmdsZXRvblNldF0KKyAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz0xMF0KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgICBQc2lUeXBlUGFyYW1ldGVyW0VdCisgICAgICAgICAgUHNpUmVmTGlzdFN0dWJbRVhURU5EU19CT1VORFNfTElTVDpdCisgICAgICBQc2lSZWZMaXN0U3R1YltFWFRFTkRTX0xJU1Q6amF2YS51dGlsLkFic3RyYWN0U2V0PEU+XQorICAgICAgUHNpUmVmTGlzdFN0dWJbSU1QTEVNRU5UU19MSVNUOmphdmEuaW8uU2VyaWFsaXphYmxlXQorICAgICAgUHNpRmllbGRTdHViW3NlcmlhbFZlcnNpb25VSUQ6bG9uZz0zMTkzNjg3MjA3NTUwNDMxNjc5TF0KKyAgICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTI2XQorICAgICAgUHNpRmllbGRTdHViW2VsZW1lbnQ6RV0KKyAgICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTE4XQorICAgICAgUHNpTWV0aG9kU3R1Yltjb25zIFNpbmdsZXRvblNldDp2b2lkXQorICAgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9NDA5Nl0KKyAgICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3RTdHViCisgICAgICAgIFBzaVBhcmFtZXRlckxpc3RTdHViCisgICAgICAgICAgUHNpUGFyYW1ldGVyU3R1YltwMTpFXQorICAgICAgICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTBdCisgICAgICAgIFBzaVJlZkxpc3RTdHViW1RIUk9XU19MSVNUOl0KKyAgICAgIFBzaU1ldGhvZFN0dWJbaXRlcmF0b3I6amF2YS51dGlsLkl0ZXJhdG9yPEU+XQorICAgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9MV0KKyAgICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3RTdHViCisgICAgICAgIFBzaVBhcmFtZXRlckxpc3RTdHViCisgICAgICAgIFBzaVJlZkxpc3RTdHViW1RIUk9XU19MSVNUOl0KKyAgICAgIFBzaU1ldGhvZFN0dWJbc2l6ZTppbnRdCisgICAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz0xXQorICAgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdFN0dWIKKyAgICAgICAgUHNpUGFyYW1ldGVyTGlzdFN0dWIKKyAgICAgICAgUHNpUmVmTGlzdFN0dWJbVEhST1dTX0xJU1Q6XQorICAgICAgUHNpTWV0aG9kU3R1Yltjb250YWluczpib29sZWFuXQorICAgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9MV0KKyAgICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3RTdHViCisgICAgICAgIFBzaVBhcmFtZXRlckxpc3RTdHViCisgICAgICAgICAgUHNpUGFyYW1ldGVyU3R1YltwMTpqYXZhLmxhbmcuT2JqZWN0XQorICAgICAgICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTBdCisgICAgICAgIFBzaVJlZkxpc3RTdHViW1RIUk9XU19MSVNUOl0KKyAgICBQc2lDbGFzc1N0dWJbbmFtZT1TeW5jaHJvbml6ZWRDb2xsZWN0aW9uIGZxbj1qYXZhLnV0aWwuQ29sbGVjdGlvbnMuU3luY2hyb25pemVkQ29sbGVjdGlvbl0KKyAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz00MTA0XQorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3RTdHViCisgICAgICAgIFBzaVR5cGVQYXJhbWV0ZXJbRV0KKyAgICAgICAgICBQc2lSZWZMaXN0U3R1YltFWFRFTkRTX0JPVU5EU19MSVNUOl0KKyAgICAgIFBzaVJlZkxpc3RTdHViW0VYVEVORFNfTElTVDpdCisgICAgICBQc2lSZWZMaXN0U3R1YltJTVBMRU1FTlRTX0xJU1Q6amF2YS51dGlsLkNvbGxlY3Rpb248RT4sIGphdmEuaW8uU2VyaWFsaXphYmxlXQorICAgICAgUHNpRmllbGRTdHViW3NlcmlhbFZlcnNpb25VSUQ6bG9uZz0zMDUzOTk1MDMyMDkxMzM1MDkzTF0KKyAgICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTI2XQorICAgICAgUHNpRmllbGRTdHViW2M6amF2YS51dGlsLkNvbGxlY3Rpb248RT5dCisgICAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz00MDk2XQorICAgICAgUHNpRmllbGRTdHViW211dGV4OmphdmEubGFuZy5PYmplY3RdCisgICAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz00MDk2XQorICAgICAgUHNpTWV0aG9kU3R1Yltjb25zIFN5bmNocm9uaXplZENvbGxlY3Rpb246dm9pZF0KKyAgICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTQwOTZdCisgICAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgICBQc2lQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgICAgIFBzaVBhcmFtZXRlclN0dWJbcDE6amF2YS51dGlsLkNvbGxlY3Rpb248RT5dCisgICAgICAgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9MF0KKyAgICAgICAgUHNpUmVmTGlzdFN0dWJbVEhST1dTX0xJU1Q6XQorICAgICAgUHNpTWV0aG9kU3R1Yltjb25zIFN5bmNocm9uaXplZENvbGxlY3Rpb246dm9pZF0KKyAgICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTQwOTZdCisgICAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgICBQc2lQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgICAgIFBzaVBhcmFtZXRlclN0dWJbcDE6amF2YS51dGlsLkNvbGxlY3Rpb248RT5dCisgICAgICAgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9MF0KKyAgICAgICAgICBQc2lQYXJhbWV0ZXJTdHViW3AyOmphdmEubGFuZy5PYmplY3RdCisgICAgICAgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9MF0KKyAgICAgICAgUHNpUmVmTGlzdFN0dWJbVEhST1dTX0xJU1Q6XQorICAgICAgUHNpTWV0aG9kU3R1YltzaXplOmludF0KKyAgICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTFdCisgICAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgICBQc2lQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgICBQc2lSZWZMaXN0U3R1YltUSFJPV1NfTElTVDpdCisgICAgICBQc2lNZXRob2RTdHViW2lzRW1wdHk6Ym9vbGVhbl0KKyAgICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTFdCisgICAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgICBQc2lQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgICBQc2lSZWZMaXN0U3R1YltUSFJPV1NfTElTVDpdCisgICAgICBQc2lNZXRob2RTdHViW2NvbnRhaW5zOmJvb2xlYW5dCisgICAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz0xXQorICAgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdFN0dWIKKyAgICAgICAgUHNpUGFyYW1ldGVyTGlzdFN0dWIKKyAgICAgICAgICBQc2lQYXJhbWV0ZXJTdHViW3AxOmphdmEubGFuZy5PYmplY3RdCisgICAgICAgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9MF0KKyAgICAgICAgUHNpUmVmTGlzdFN0dWJbVEhST1dTX0xJU1Q6XQorICAgICAgUHNpTWV0aG9kU3R1Ylt0b0FycmF5OmphdmEubGFuZy5PYmplY3RbXV0KKyAgICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTFdCisgICAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgICBQc2lQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgICBQc2lSZWZMaXN0U3R1YltUSFJPV1NfTElTVDpdCisgICAgICBQc2lNZXRob2RTdHViW3RvQXJyYXk6VFtdXQorICAgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9MV0KKyAgICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3RTdHViCisgICAgICAgICAgUHNpVHlwZVBhcmFtZXRlcltUXQorICAgICAgICAgICAgUHNpUmVmTGlzdFN0dWJbRVhURU5EU19CT1VORFNfTElTVDpdCisgICAgICAgIFBzaVBhcmFtZXRlckxpc3RTdHViCisgICAgICAgICAgUHNpUGFyYW1ldGVyU3R1YltwMTpUW11dCisgICAgICAgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9MF0KKyAgICAgICAgUHNpUmVmTGlzdFN0dWJbVEhST1dTX0xJU1Q6XQorICAgICAgUHNpTWV0aG9kU3R1YltpdGVyYXRvcjpqYXZhLnV0aWwuSXRlcmF0b3I8RT5dCisgICAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz0xXQorICAgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdFN0dWIKKyAgICAgICAgUHNpUGFyYW1ldGVyTGlzdFN0dWIKKyAgICAgICAgUHNpUmVmTGlzdFN0dWJbVEhST1dTX0xJU1Q6XQorICAgICAgUHNpTWV0aG9kU3R1YlthZGQ6Ym9vbGVhbl0KKyAgICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTFdCisgICAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgICBQc2lQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgICAgIFBzaVBhcmFtZXRlclN0dWJbcDE6RV0KKyAgICAgICAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz0wXQorICAgICAgICBQc2lSZWZMaXN0U3R1YltUSFJPV1NfTElTVDpdCisgICAgICBQc2lNZXRob2RTdHViW3JlbW92ZTpib29sZWFuXQorICAgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9MV0KKyAgICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3RTdHViCisgICAgICAgIFBzaVBhcmFtZXRlckxpc3RTdHViCisgICAgICAgICAgUHNpUGFyYW1ldGVyU3R1YltwMTpqYXZhLmxhbmcuT2JqZWN0XQorICAgICAgICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTBdCisgICAgICAgIFBzaVJlZkxpc3RTdHViW1RIUk9XU19MSVNUOl0KKyAgICAgIFBzaU1ldGhvZFN0dWJbY29udGFpbnNBbGw6Ym9vbGVhbl0KKyAgICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTFdCisgICAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgICBQc2lQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgICAgIFBzaVBhcmFtZXRlclN0dWJbcDE6amF2YS51dGlsLkNvbGxlY3Rpb248Pz5dCisgICAgICAgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9MF0KKyAgICAgICAgUHNpUmVmTGlzdFN0dWJbVEhST1dTX0xJU1Q6XQorICAgICAgUHNpTWV0aG9kU3R1YlthZGRBbGw6Ym9vbGVhbl0KKyAgICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTFdCisgICAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgICBQc2lQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgICAgIFBzaVBhcmFtZXRlclN0dWJbcDE6amF2YS51dGlsLkNvbGxlY3Rpb248PyBleHRlbmRzIEU+XQorICAgICAgICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTBdCisgICAgICAgIFBzaVJlZkxpc3RTdHViW1RIUk9XU19MSVNUOl0KKyAgICAgIFBzaU1ldGhvZFN0dWJbcmVtb3ZlQWxsOmJvb2xlYW5dCisgICAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz0xXQorICAgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdFN0dWIKKyAgICAgICAgUHNpUGFyYW1ldGVyTGlzdFN0dWIKKyAgICAgICAgICBQc2lQYXJhbWV0ZXJTdHViW3AxOmphdmEudXRpbC5Db2xsZWN0aW9uPD8+XQorICAgICAgICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTBdCisgICAgICAgIFBzaVJlZkxpc3RTdHViW1RIUk9XU19MSVNUOl0KKyAgICAgIFBzaU1ldGhvZFN0dWJbcmV0YWluQWxsOmJvb2xlYW5dCisgICAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz0xXQorICAgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdFN0dWIKKyAgICAgICAgUHNpUGFyYW1ldGVyTGlzdFN0dWIKKyAgICAgICAgICBQc2lQYXJhbWV0ZXJTdHViW3AxOmphdmEudXRpbC5Db2xsZWN0aW9uPD8+XQorICAgICAgICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTBdCisgICAgICAgIFBzaVJlZkxpc3RTdHViW1RIUk9XU19MSVNUOl0KKyAgICAgIFBzaU1ldGhvZFN0dWJbY2xlYXI6dm9pZF0KKyAgICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTFdCisgICAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgICBQc2lQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgICBQc2lSZWZMaXN0U3R1YltUSFJPV1NfTElTVDpdCisgICAgICBQc2lNZXRob2RTdHViW3RvU3RyaW5nOmphdmEubGFuZy5TdHJpbmddCisgICAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz0xXQorICAgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdFN0dWIKKyAgICAgICAgUHNpUGFyYW1ldGVyTGlzdFN0dWIKKyAgICAgICAgUHNpUmVmTGlzdFN0dWJbVEhST1dTX0xJU1Q6XQorICAgIFBzaUNsYXNzU3R1YltuYW1lPVN5bmNocm9uaXplZExpc3QgZnFuPWphdmEudXRpbC5Db2xsZWN0aW9ucy5TeW5jaHJvbml6ZWRMaXN0XQorICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTQxMDRdCisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdFN0dWIKKyAgICAgICAgUHNpVHlwZVBhcmFtZXRlcltFXQorICAgICAgICAgIFBzaVJlZkxpc3RTdHViW0VYVEVORFNfQk9VTkRTX0xJU1Q6XQorICAgICAgUHNpUmVmTGlzdFN0dWJbRVhURU5EU19MSVNUOmphdmEudXRpbC5Db2xsZWN0aW9ucy5TeW5jaHJvbml6ZWRDb2xsZWN0aW9uPEU+XQorICAgICAgUHNpUmVmTGlzdFN0dWJbSU1QTEVNRU5UU19MSVNUOmphdmEudXRpbC5MaXN0PEU+XQorICAgICAgUHNpRmllbGRTdHViW3NlcmlhbFZlcnNpb25VSUQ6bG9uZz0tNzc1NDA5MDM3Mjk2Mjk3MTUyNExdCisgICAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz00MTIwXQorICAgICAgUHNpRmllbGRTdHViW2xpc3Q6amF2YS51dGlsLkxpc3Q8RT5dCisgICAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz00MDk2XQorICAgICAgUHNpTWV0aG9kU3R1Yltjb25zIFN5bmNocm9uaXplZExpc3Q6dm9pZF0KKyAgICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTQwOTZdCisgICAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgICBQc2lQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgICAgIFBzaVBhcmFtZXRlclN0dWJbcDE6amF2YS51dGlsLkxpc3Q8RT5dCisgICAgICAgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9MF0KKyAgICAgICAgUHNpUmVmTGlzdFN0dWJbVEhST1dTX0xJU1Q6XQorICAgICAgUHNpTWV0aG9kU3R1Yltjb25zIFN5bmNocm9uaXplZExpc3Q6dm9pZF0KKyAgICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTQwOTZdCisgICAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgICBQc2lQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgICAgIFBzaVBhcmFtZXRlclN0dWJbcDE6amF2YS51dGlsLkxpc3Q8RT5dCisgICAgICAgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9MF0KKyAgICAgICAgICBQc2lQYXJhbWV0ZXJTdHViW3AyOmphdmEubGFuZy5PYmplY3RdCisgICAgICAgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9MF0KKyAgICAgICAgUHNpUmVmTGlzdFN0dWJbVEhST1dTX0xJU1Q6XQorICAgICAgUHNpTWV0aG9kU3R1YltlcXVhbHM6Ym9vbGVhbl0KKyAgICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTFdCisgICAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgICBQc2lQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgICAgIFBzaVBhcmFtZXRlclN0dWJbcDE6amF2YS5sYW5nLk9iamVjdF0KKyAgICAgICAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz0wXQorICAgICAgICBQc2lSZWZMaXN0U3R1YltUSFJPV1NfTElTVDpdCisgICAgICBQc2lNZXRob2RTdHViW2hhc2hDb2RlOmludF0KKyAgICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTFdCisgICAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgICBQc2lQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgICBQc2lSZWZMaXN0U3R1YltUSFJPV1NfTElTVDpdCisgICAgICBQc2lNZXRob2RTdHViW2dldDpFXQorICAgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9MV0KKyAgICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3RTdHViCisgICAgICAgIFBzaVBhcmFtZXRlckxpc3RTdHViCisgICAgICAgICAgUHNpUGFyYW1ldGVyU3R1YltwMTppbnRdCisgICAgICAgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9MF0KKyAgICAgICAgUHNpUmVmTGlzdFN0dWJbVEhST1dTX0xJU1Q6XQorICAgICAgUHNpTWV0aG9kU3R1YltzZXQ6RV0KKyAgICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTFdCisgICAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgICBQc2lQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgICAgIFBzaVBhcmFtZXRlclN0dWJbcDE6aW50XQorICAgICAgICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTBdCisgICAgICAgICAgUHNpUGFyYW1ldGVyU3R1YltwMjpFXQorICAgICAgICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTBdCisgICAgICAgIFBzaVJlZkxpc3RTdHViW1RIUk9XU19MSVNUOl0KKyAgICAgIFBzaU1ldGhvZFN0dWJbYWRkOnZvaWRdCisgICAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz0xXQorICAgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdFN0dWIKKyAgICAgICAgUHNpUGFyYW1ldGVyTGlzdFN0dWIKKyAgICAgICAgICBQc2lQYXJhbWV0ZXJTdHViW3AxOmludF0KKyAgICAgICAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz0wXQorICAgICAgICAgIFBzaVBhcmFtZXRlclN0dWJbcDI6RV0KKyAgICAgICAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz0wXQorICAgICAgICBQc2lSZWZMaXN0U3R1YltUSFJPV1NfTElTVDpdCisgICAgICBQc2lNZXRob2RTdHViW3JlbW92ZTpFXQorICAgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9MV0KKyAgICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3RTdHViCisgICAgICAgIFBzaVBhcmFtZXRlckxpc3RTdHViCisgICAgICAgICAgUHNpUGFyYW1ldGVyU3R1YltwMTppbnRdCisgICAgICAgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9MF0KKyAgICAgICAgUHNpUmVmTGlzdFN0dWJbVEhST1dTX0xJU1Q6XQorICAgICAgUHNpTWV0aG9kU3R1YltpbmRleE9mOmludF0KKyAgICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTFdCisgICAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgICBQc2lQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgICAgIFBzaVBhcmFtZXRlclN0dWJbcDE6amF2YS5sYW5nLk9iamVjdF0KKyAgICAgICAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz0wXQorICAgICAgICBQc2lSZWZMaXN0U3R1YltUSFJPV1NfTElTVDpdCisgICAgICBQc2lNZXRob2RTdHViW2xhc3RJbmRleE9mOmludF0KKyAgICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTFdCisgICAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgICBQc2lQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgICAgIFBzaVBhcmFtZXRlclN0dWJbcDE6amF2YS5sYW5nLk9iamVjdF0KKyAgICAgICAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz0wXQorICAgICAgICBQc2lSZWZMaXN0U3R1YltUSFJPV1NfTElTVDpdCisgICAgICBQc2lNZXRob2RTdHViW2FkZEFsbDpib29sZWFuXQorICAgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9MV0KKyAgICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3RTdHViCisgICAgICAgIFBzaVBhcmFtZXRlckxpc3RTdHViCisgICAgICAgICAgUHNpUGFyYW1ldGVyU3R1YltwMTppbnRdCisgICAgICAgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9MF0KKyAgICAgICAgICBQc2lQYXJhbWV0ZXJTdHViW3AyOmphdmEudXRpbC5Db2xsZWN0aW9uPD8gZXh0ZW5kcyBFPl0KKyAgICAgICAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz0wXQorICAgICAgICBQc2lSZWZMaXN0U3R1YltUSFJPV1NfTElTVDpdCisgICAgICBQc2lNZXRob2RTdHViW2xpc3RJdGVyYXRvcjpqYXZhLnV0aWwuTGlzdEl0ZXJhdG9yPEU+XQorICAgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9MV0KKyAgICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3RTdHViCisgICAgICAgIFBzaVBhcmFtZXRlckxpc3RTdHViCisgICAgICAgIFBzaVJlZkxpc3RTdHViW1RIUk9XU19MSVNUOl0KKyAgICAgIFBzaU1ldGhvZFN0dWJbbGlzdEl0ZXJhdG9yOmphdmEudXRpbC5MaXN0SXRlcmF0b3I8RT5dCisgICAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz0xXQorICAgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdFN0dWIKKyAgICAgICAgUHNpUGFyYW1ldGVyTGlzdFN0dWIKKyAgICAgICAgICBQc2lQYXJhbWV0ZXJTdHViW3AxOmludF0KKyAgICAgICAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz0wXQorICAgICAgICBQc2lSZWZMaXN0U3R1YltUSFJPV1NfTElTVDpdCisgICAgICBQc2lNZXRob2RTdHViW3N1Ykxpc3Q6amF2YS51dGlsLkxpc3Q8RT5dCisgICAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz0xXQorICAgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdFN0dWIKKyAgICAgICAgUHNpUGFyYW1ldGVyTGlzdFN0dWIKKyAgICAgICAgICBQc2lQYXJhbWV0ZXJTdHViW3AxOmludF0KKyAgICAgICAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz0wXQorICAgICAgICAgIFBzaVBhcmFtZXRlclN0dWJbcDI6aW50XQorICAgICAgICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTBdCisgICAgICAgIFBzaVJlZkxpc3RTdHViW1RIUk9XU19MSVNUOl0KKyAgICAgIFBzaU1ldGhvZFN0dWJbcmVhZFJlc29sdmU6amF2YS5sYW5nLk9iamVjdF0KKyAgICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTJdCisgICAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgICBQc2lQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgICBQc2lSZWZMaXN0U3R1YltUSFJPV1NfTElTVDpdCisgICAgUHNpQ2xhc3NTdHViW25hbWU9U3luY2hyb25pemVkTWFwIGZxbj1qYXZhLnV0aWwuQ29sbGVjdGlvbnMuU3luY2hyb25pemVkTWFwXQorICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTEwXQorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3RTdHViCisgICAgICAgIFBzaVR5cGVQYXJhbWV0ZXJbS10KKyAgICAgICAgICBQc2lSZWZMaXN0U3R1YltFWFRFTkRTX0JPVU5EU19MSVNUOl0KKyAgICAgICAgUHNpVHlwZVBhcmFtZXRlcltWXQorICAgICAgICAgIFBzaVJlZkxpc3RTdHViW0VYVEVORFNfQk9VTkRTX0xJU1Q6XQorICAgICAgUHNpUmVmTGlzdFN0dWJbRVhURU5EU19MSVNUOl0KKyAgICAgIFBzaVJlZkxpc3RTdHViW0lNUExFTUVOVFNfTElTVDpqYXZhLnV0aWwuTWFwPEssVj4sIGphdmEuaW8uU2VyaWFsaXphYmxlXQorICAgICAgUHNpRmllbGRTdHViW3NlcmlhbFZlcnNpb25VSUQ6bG9uZz0xOTc4MTk4NDc5NjU5MDIyNzE1TF0KKyAgICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTI2XQorICAgICAgUHNpRmllbGRTdHViW206amF2YS51dGlsLk1hcDxLLFY+XQorICAgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9Ml0KKyAgICAgIFBzaUZpZWxkU3R1YlttdXRleDpqYXZhLmxhbmcuT2JqZWN0XQorICAgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9NDA5Nl0KKyAgICAgIFBzaUZpZWxkU3R1YltrZXlTZXQ6amF2YS51dGlsLlNldDxLPl0KKyAgICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTEzMF0KKyAgICAgIFBzaUZpZWxkU3R1YltlbnRyeVNldDpqYXZhLnV0aWwuU2V0PGphdmEudXRpbC5NYXAuRW50cnk8SyxWPj5dCisgICAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz0xMzBdCisgICAgICBQc2lGaWVsZFN0dWJbdmFsdWVzOmphdmEudXRpbC5Db2xsZWN0aW9uPFY+XQorICAgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9MTMwXQorICAgICAgUHNpTWV0aG9kU3R1Yltjb25zIFN5bmNocm9uaXplZE1hcDp2b2lkXQorICAgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9NDA5Nl0KKyAgICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3RTdHViCisgICAgICAgIFBzaVBhcmFtZXRlckxpc3RTdHViCisgICAgICAgICAgUHNpUGFyYW1ldGVyU3R1YltwMTpqYXZhLnV0aWwuTWFwPEssVj5dCisgICAgICAgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9MF0KKyAgICAgICAgUHNpUmVmTGlzdFN0dWJbVEhST1dTX0xJU1Q6XQorICAgICAgUHNpTWV0aG9kU3R1Yltjb25zIFN5bmNocm9uaXplZE1hcDp2b2lkXQorICAgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9NDA5Nl0KKyAgICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3RTdHViCisgICAgICAgIFBzaVBhcmFtZXRlckxpc3RTdHViCisgICAgICAgICAgUHNpUGFyYW1ldGVyU3R1YltwMTpqYXZhLnV0aWwuTWFwPEssVj5dCisgICAgICAgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9MF0KKyAgICAgICAgICBQc2lQYXJhbWV0ZXJTdHViW3AyOmphdmEubGFuZy5PYmplY3RdCisgICAgICAgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9MF0KKyAgICAgICAgUHNpUmVmTGlzdFN0dWJbVEhST1dTX0xJU1Q6XQorICAgICAgUHNpTWV0aG9kU3R1YltzaXplOmludF0KKyAgICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTFdCisgICAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgICBQc2lQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgICBQc2lSZWZMaXN0U3R1YltUSFJPV1NfTElTVDpdCisgICAgICBQc2lNZXRob2RTdHViW2lzRW1wdHk6Ym9vbGVhbl0KKyAgICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTFdCisgICAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgICBQc2lQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgICBQc2lSZWZMaXN0U3R1YltUSFJPV1NfTElTVDpdCisgICAgICBQc2lNZXRob2RTdHViW2NvbnRhaW5zS2V5OmJvb2xlYW5dCisgICAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz0xXQorICAgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdFN0dWIKKyAgICAgICAgUHNpUGFyYW1ldGVyTGlzdFN0dWIKKyAgICAgICAgICBQc2lQYXJhbWV0ZXJTdHViW3AxOmphdmEubGFuZy5PYmplY3RdCisgICAgICAgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9MF0KKyAgICAgICAgUHNpUmVmTGlzdFN0dWJbVEhST1dTX0xJU1Q6XQorICAgICAgUHNpTWV0aG9kU3R1Yltjb250YWluc1ZhbHVlOmJvb2xlYW5dCisgICAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz0xXQorICAgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdFN0dWIKKyAgICAgICAgUHNpUGFyYW1ldGVyTGlzdFN0dWIKKyAgICAgICAgICBQc2lQYXJhbWV0ZXJTdHViW3AxOmphdmEubGFuZy5PYmplY3RdCisgICAgICAgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9MF0KKyAgICAgICAgUHNpUmVmTGlzdFN0dWJbVEhST1dTX0xJU1Q6XQorICAgICAgUHNpTWV0aG9kU3R1YltnZXQ6Vl0KKyAgICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTFdCisgICAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgICBQc2lQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgICAgIFBzaVBhcmFtZXRlclN0dWJbcDE6amF2YS5sYW5nLk9iamVjdF0KKyAgICAgICAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz0wXQorICAgICAgICBQc2lSZWZMaXN0U3R1YltUSFJPV1NfTElTVDpdCisgICAgICBQc2lNZXRob2RTdHViW3B1dDpWXQorICAgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9MV0KKyAgICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3RTdHViCisgICAgICAgIFBzaVBhcmFtZXRlckxpc3RTdHViCisgICAgICAgICAgUHNpUGFyYW1ldGVyU3R1YltwMTpLXQorICAgICAgICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTBdCisgICAgICAgICAgUHNpUGFyYW1ldGVyU3R1YltwMjpWXQorICAgICAgICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTBdCisgICAgICAgIFBzaVJlZkxpc3RTdHViW1RIUk9XU19MSVNUOl0KKyAgICAgIFBzaU1ldGhvZFN0dWJbcmVtb3ZlOlZdCisgICAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz0xXQorICAgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdFN0dWIKKyAgICAgICAgUHNpUGFyYW1ldGVyTGlzdFN0dWIKKyAgICAgICAgICBQc2lQYXJhbWV0ZXJTdHViW3AxOmphdmEubGFuZy5PYmplY3RdCisgICAgICAgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9MF0KKyAgICAgICAgUHNpUmVmTGlzdFN0dWJbVEhST1dTX0xJU1Q6XQorICAgICAgUHNpTWV0aG9kU3R1YltwdXRBbGw6dm9pZF0KKyAgICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTFdCisgICAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgICBQc2lQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgICAgIFBzaVBhcmFtZXRlclN0dWJbcDE6amF2YS51dGlsLk1hcDw/IGV4dGVuZHMgSyw/IGV4dGVuZHMgVj5dCisgICAgICAgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9MF0KKyAgICAgICAgUHNpUmVmTGlzdFN0dWJbVEhST1dTX0xJU1Q6XQorICAgICAgUHNpTWV0aG9kU3R1YltjbGVhcjp2b2lkXQorICAgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9MV0KKyAgICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3RTdHViCisgICAgICAgIFBzaVBhcmFtZXRlckxpc3RTdHViCisgICAgICAgIFBzaVJlZkxpc3RTdHViW1RIUk9XU19MSVNUOl0KKyAgICAgIFBzaU1ldGhvZFN0dWJba2V5U2V0OmphdmEudXRpbC5TZXQ8Sz5dCisgICAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz0xXQorICAgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdFN0dWIKKyAgICAgICAgUHNpUGFyYW1ldGVyTGlzdFN0dWIKKyAgICAgICAgUHNpUmVmTGlzdFN0dWJbVEhST1dTX0xJU1Q6XQorICAgICAgUHNpTWV0aG9kU3R1YltlbnRyeVNldDpqYXZhLnV0aWwuU2V0PGphdmEudXRpbC5NYXAuRW50cnk8SyxWPj5dCisgICAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz0xXQorICAgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdFN0dWIKKyAgICAgICAgUHNpUGFyYW1ldGVyTGlzdFN0dWIKKyAgICAgICAgUHNpUmVmTGlzdFN0dWJbVEhST1dTX0xJU1Q6XQorICAgICAgUHNpTWV0aG9kU3R1Ylt2YWx1ZXM6amF2YS51dGlsLkNvbGxlY3Rpb248Vj5dCisgICAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz0xXQorICAgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdFN0dWIKKyAgICAgICAgUHNpUGFyYW1ldGVyTGlzdFN0dWIKKyAgICAgICAgUHNpUmVmTGlzdFN0dWJbVEhST1dTX0xJU1Q6XQorICAgICAgUHNpTWV0aG9kU3R1YltlcXVhbHM6Ym9vbGVhbl0KKyAgICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTFdCisgICAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgICBQc2lQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgICAgIFBzaVBhcmFtZXRlclN0dWJbcDE6amF2YS5sYW5nLk9iamVjdF0KKyAgICAgICAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz0wXQorICAgICAgICBQc2lSZWZMaXN0U3R1YltUSFJPV1NfTElTVDpdCisgICAgICBQc2lNZXRob2RTdHViW2hhc2hDb2RlOmludF0KKyAgICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTFdCisgICAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgICBQc2lQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgICBQc2lSZWZMaXN0U3R1YltUSFJPV1NfTElTVDpdCisgICAgICBQc2lNZXRob2RTdHViW3RvU3RyaW5nOmphdmEubGFuZy5TdHJpbmddCisgICAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz0xXQorICAgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdFN0dWIKKyAgICAgICAgUHNpUGFyYW1ldGVyTGlzdFN0dWIKKyAgICAgICAgUHNpUmVmTGlzdFN0dWJbVEhST1dTX0xJU1Q6XQorICAgIFBzaUNsYXNzU3R1YltuYW1lPVN5bmNocm9uaXplZFJhbmRvbUFjY2Vzc0xpc3QgZnFuPWphdmEudXRpbC5Db2xsZWN0aW9ucy5TeW5jaHJvbml6ZWRSYW5kb21BY2Nlc3NMaXN0XQorICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTQxMDRdCisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdFN0dWIKKyAgICAgICAgUHNpVHlwZVBhcmFtZXRlcltFXQorICAgICAgICAgIFBzaVJlZkxpc3RTdHViW0VYVEVORFNfQk9VTkRTX0xJU1Q6XQorICAgICAgUHNpUmVmTGlzdFN0dWJbRVhURU5EU19MSVNUOmphdmEudXRpbC5Db2xsZWN0aW9ucy5TeW5jaHJvbml6ZWRMaXN0PEU+XQorICAgICAgUHNpUmVmTGlzdFN0dWJbSU1QTEVNRU5UU19MSVNUOmphdmEudXRpbC5SYW5kb21BY2Nlc3NdCisgICAgICBQc2lGaWVsZFN0dWJbc2VyaWFsVmVyc2lvblVJRDpsb25nPTE1MzA2NzQ1ODM2MDIzNTg0ODJMXQorICAgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9NDEyMF0KKyAgICAgIFBzaU1ldGhvZFN0dWJbY29ucyBTeW5jaHJvbml6ZWRSYW5kb21BY2Nlc3NMaXN0OnZvaWRdCisgICAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz00MDk2XQorICAgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdFN0dWIKKyAgICAgICAgUHNpUGFyYW1ldGVyTGlzdFN0dWIKKyAgICAgICAgICBQc2lQYXJhbWV0ZXJTdHViW3AxOmphdmEudXRpbC5MaXN0PEU+XQorICAgICAgICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTBdCisgICAgICAgIFBzaVJlZkxpc3RTdHViW1RIUk9XU19MSVNUOl0KKyAgICAgIFBzaU1ldGhvZFN0dWJbY29ucyBTeW5jaHJvbml6ZWRSYW5kb21BY2Nlc3NMaXN0OnZvaWRdCisgICAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz00MDk2XQorICAgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdFN0dWIKKyAgICAgICAgUHNpUGFyYW1ldGVyTGlzdFN0dWIKKyAgICAgICAgICBQc2lQYXJhbWV0ZXJTdHViW3AxOmphdmEudXRpbC5MaXN0PEU+XQorICAgICAgICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTBdCisgICAgICAgICAgUHNpUGFyYW1ldGVyU3R1YltwMjpqYXZhLmxhbmcuT2JqZWN0XQorICAgICAgICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTBdCisgICAgICAgIFBzaVJlZkxpc3RTdHViW1RIUk9XU19MSVNUOl0KKyAgICAgIFBzaU1ldGhvZFN0dWJbc3ViTGlzdDpqYXZhLnV0aWwuTGlzdDxFPl0KKyAgICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTFdCisgICAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgICBQc2lQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgICAgIFBzaVBhcmFtZXRlclN0dWJbcDE6aW50XQorICAgICAgICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTBdCisgICAgICAgICAgUHNpUGFyYW1ldGVyU3R1YltwMjppbnRdCisgICAgICAgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9MF0KKyAgICAgICAgUHNpUmVmTGlzdFN0dWJbVEhST1dTX0xJU1Q6XQorICAgICAgUHNpTWV0aG9kU3R1Ylt3cml0ZVJlcGxhY2U6amF2YS5sYW5nLk9iamVjdF0KKyAgICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTJdCisgICAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgICBQc2lQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgICBQc2lSZWZMaXN0U3R1YltUSFJPV1NfTElTVDpdCisgICAgUHNpQ2xhc3NTdHViW25hbWU9U3luY2hyb25pemVkU2V0IGZxbj1qYXZhLnV0aWwuQ29sbGVjdGlvbnMuU3luY2hyb25pemVkU2V0XQorICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTQxMDRdCisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdFN0dWIKKyAgICAgICAgUHNpVHlwZVBhcmFtZXRlcltFXQorICAgICAgICAgIFBzaVJlZkxpc3RTdHViW0VYVEVORFNfQk9VTkRTX0xJU1Q6XQorICAgICAgUHNpUmVmTGlzdFN0dWJbRVhURU5EU19MSVNUOmphdmEudXRpbC5Db2xsZWN0aW9ucy5TeW5jaHJvbml6ZWRDb2xsZWN0aW9uPEU+XQorICAgICAgUHNpUmVmTGlzdFN0dWJbSU1QTEVNRU5UU19MSVNUOmphdmEudXRpbC5TZXQ8RT5dCisgICAgICBQc2lGaWVsZFN0dWJbc2VyaWFsVmVyc2lvblVJRDpsb25nPTQ4NzQ0NzAwOTY4MjE4NjA0NExdCisgICAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz0yNl0KKyAgICAgIFBzaU1ldGhvZFN0dWJbY29ucyBTeW5jaHJvbml6ZWRTZXQ6dm9pZF0KKyAgICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTQwOTZdCisgICAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgICBQc2lQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgICAgIFBzaVBhcmFtZXRlclN0dWJbcDE6amF2YS51dGlsLlNldDxFPl0KKyAgICAgICAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz0wXQorICAgICAgICBQc2lSZWZMaXN0U3R1YltUSFJPV1NfTElTVDpdCisgICAgICBQc2lNZXRob2RTdHViW2NvbnMgU3luY2hyb25pemVkU2V0OnZvaWRdCisgICAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz00MDk2XQorICAgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdFN0dWIKKyAgICAgICAgUHNpUGFyYW1ldGVyTGlzdFN0dWIKKyAgICAgICAgICBQc2lQYXJhbWV0ZXJTdHViW3AxOmphdmEudXRpbC5TZXQ8RT5dCisgICAgICAgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9MF0KKyAgICAgICAgICBQc2lQYXJhbWV0ZXJTdHViW3AyOmphdmEubGFuZy5PYmplY3RdCisgICAgICAgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9MF0KKyAgICAgICAgUHNpUmVmTGlzdFN0dWJbVEhST1dTX0xJU1Q6XQorICAgICAgUHNpTWV0aG9kU3R1YltlcXVhbHM6Ym9vbGVhbl0KKyAgICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTFdCisgICAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgICBQc2lQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgICAgIFBzaVBhcmFtZXRlclN0dWJbcDE6amF2YS5sYW5nLk9iamVjdF0KKyAgICAgICAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz0wXQorICAgICAgICBQc2lSZWZMaXN0U3R1YltUSFJPV1NfTElTVDpdCisgICAgICBQc2lNZXRob2RTdHViW2hhc2hDb2RlOmludF0KKyAgICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTFdCisgICAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgICBQc2lQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgICBQc2lSZWZMaXN0U3R1YltUSFJPV1NfTElTVDpdCisgICAgUHNpQ2xhc3NTdHViW25hbWU9U3luY2hyb25pemVkU29ydGVkTWFwIGZxbj1qYXZhLnV0aWwuQ29sbGVjdGlvbnMuU3luY2hyb25pemVkU29ydGVkTWFwXQorICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTQxMDRdCisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdFN0dWIKKyAgICAgICAgUHNpVHlwZVBhcmFtZXRlcltLXQorICAgICAgICAgIFBzaVJlZkxpc3RTdHViW0VYVEVORFNfQk9VTkRTX0xJU1Q6XQorICAgICAgICBQc2lUeXBlUGFyYW1ldGVyW1ZdCisgICAgICAgICAgUHNpUmVmTGlzdFN0dWJbRVhURU5EU19CT1VORFNfTElTVDpdCisgICAgICBQc2lSZWZMaXN0U3R1YltFWFRFTkRTX0xJU1Q6amF2YS51dGlsLkNvbGxlY3Rpb25zLlN5bmNocm9uaXplZE1hcDxLLFY+XQorICAgICAgUHNpUmVmTGlzdFN0dWJbSU1QTEVNRU5UU19MSVNUOmphdmEudXRpbC5Tb3J0ZWRNYXA8SyxWPl0KKyAgICAgIFBzaUZpZWxkU3R1YltzZXJpYWxWZXJzaW9uVUlEOmxvbmc9LTg3OTgxNDY3Njk0MTY0ODM3OTNMXQorICAgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9MjZdCisgICAgICBQc2lGaWVsZFN0dWJbc206amF2YS51dGlsLlNvcnRlZE1hcDxLLFY+XQorICAgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9Ml0KKyAgICAgIFBzaU1ldGhvZFN0dWJbY29ucyBTeW5jaHJvbml6ZWRTb3J0ZWRNYXA6dm9pZF0KKyAgICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTQwOTZdCisgICAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgICBQc2lQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgICAgIFBzaVBhcmFtZXRlclN0dWJbcDE6amF2YS51dGlsLlNvcnRlZE1hcDxLLFY+XQorICAgICAgICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTBdCisgICAgICAgIFBzaVJlZkxpc3RTdHViW1RIUk9XU19MSVNUOl0KKyAgICAgIFBzaU1ldGhvZFN0dWJbY29ucyBTeW5jaHJvbml6ZWRTb3J0ZWRNYXA6dm9pZF0KKyAgICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTQwOTZdCisgICAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgICBQc2lQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgICAgIFBzaVBhcmFtZXRlclN0dWJbcDE6amF2YS51dGlsLlNvcnRlZE1hcDxLLFY+XQorICAgICAgICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTBdCisgICAgICAgICAgUHNpUGFyYW1ldGVyU3R1YltwMjpqYXZhLmxhbmcuT2JqZWN0XQorICAgICAgICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTBdCisgICAgICAgIFBzaVJlZkxpc3RTdHViW1RIUk9XU19MSVNUOl0KKyAgICAgIFBzaU1ldGhvZFN0dWJbY29tcGFyYXRvcjpqYXZhLnV0aWwuQ29tcGFyYXRvcjw/IHN1cGVyIEs+XQorICAgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9MV0KKyAgICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3RTdHViCisgICAgICAgIFBzaVBhcmFtZXRlckxpc3RTdHViCisgICAgICAgIFBzaVJlZkxpc3RTdHViW1RIUk9XU19MSVNUOl0KKyAgICAgIFBzaU1ldGhvZFN0dWJbc3ViTWFwOmphdmEudXRpbC5Tb3J0ZWRNYXA8SyxWPl0KKyAgICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTFdCisgICAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgICBQc2lQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgICAgIFBzaVBhcmFtZXRlclN0dWJbcDE6S10KKyAgICAgICAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz0wXQorICAgICAgICAgIFBzaVBhcmFtZXRlclN0dWJbcDI6S10KKyAgICAgICAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz0wXQorICAgICAgICBQc2lSZWZMaXN0U3R1YltUSFJPV1NfTElTVDpdCisgICAgICBQc2lNZXRob2RTdHViW2hlYWRNYXA6amF2YS51dGlsLlNvcnRlZE1hcDxLLFY+XQorICAgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9MV0KKyAgICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3RTdHViCisgICAgICAgIFBzaVBhcmFtZXRlckxpc3RTdHViCisgICAgICAgICAgUHNpUGFyYW1ldGVyU3R1YltwMTpLXQorICAgICAgICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTBdCisgICAgICAgIFBzaVJlZkxpc3RTdHViW1RIUk9XU19MSVNUOl0KKyAgICAgIFBzaU1ldGhvZFN0dWJbdGFpbE1hcDpqYXZhLnV0aWwuU29ydGVkTWFwPEssVj5dCisgICAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz0xXQorICAgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdFN0dWIKKyAgICAgICAgUHNpUGFyYW1ldGVyTGlzdFN0dWIKKyAgICAgICAgICBQc2lQYXJhbWV0ZXJTdHViW3AxOktdCisgICAgICAgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9MF0KKyAgICAgICAgUHNpUmVmTGlzdFN0dWJbVEhST1dTX0xJU1Q6XQorICAgICAgUHNpTWV0aG9kU3R1YltmaXJzdEtleTpLXQorICAgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9MV0KKyAgICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3RTdHViCisgICAgICAgIFBzaVBhcmFtZXRlckxpc3RTdHViCisgICAgICAgIFBzaVJlZkxpc3RTdHViW1RIUk9XU19MSVNUOl0KKyAgICAgIFBzaU1ldGhvZFN0dWJbbGFzdEtleTpLXQorICAgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9MV0KKyAgICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3RTdHViCisgICAgICAgIFBzaVBhcmFtZXRlckxpc3RTdHViCisgICAgICAgIFBzaVJlZkxpc3RTdHViW1RIUk9XU19MSVNUOl0KKyAgICBQc2lDbGFzc1N0dWJbbmFtZT1TeW5jaHJvbml6ZWRTb3J0ZWRTZXQgZnFuPWphdmEudXRpbC5Db2xsZWN0aW9ucy5TeW5jaHJvbml6ZWRTb3J0ZWRTZXRdCisgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9NDEwNF0KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgICBQc2lUeXBlUGFyYW1ldGVyW0VdCisgICAgICAgICAgUHNpUmVmTGlzdFN0dWJbRVhURU5EU19CT1VORFNfTElTVDpdCisgICAgICBQc2lSZWZMaXN0U3R1YltFWFRFTkRTX0xJU1Q6amF2YS51dGlsLkNvbGxlY3Rpb25zLlN5bmNocm9uaXplZFNldDxFPl0KKyAgICAgIFBzaVJlZkxpc3RTdHViW0lNUExFTUVOVFNfTElTVDpqYXZhLnV0aWwuU29ydGVkU2V0PEU+XQorICAgICAgUHNpRmllbGRTdHViW3NlcmlhbFZlcnNpb25VSUQ6bG9uZz04Njk1ODAxMzEwODYyMTI3NDA2TF0KKyAgICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTI2XQorICAgICAgUHNpRmllbGRTdHViW3NzOmphdmEudXRpbC5Tb3J0ZWRTZXQ8RT5dCisgICAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz0yXQorICAgICAgUHNpTWV0aG9kU3R1Yltjb25zIFN5bmNocm9uaXplZFNvcnRlZFNldDp2b2lkXQorICAgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9NDA5Nl0KKyAgICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3RTdHViCisgICAgICAgIFBzaVBhcmFtZXRlckxpc3RTdHViCisgICAgICAgICAgUHNpUGFyYW1ldGVyU3R1YltwMTpqYXZhLnV0aWwuU29ydGVkU2V0PEU+XQorICAgICAgICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTBdCisgICAgICAgIFBzaVJlZkxpc3RTdHViW1RIUk9XU19MSVNUOl0KKyAgICAgIFBzaU1ldGhvZFN0dWJbY29ucyBTeW5jaHJvbml6ZWRTb3J0ZWRTZXQ6dm9pZF0KKyAgICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTQwOTZdCisgICAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgICBQc2lQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgICAgIFBzaVBhcmFtZXRlclN0dWJbcDE6amF2YS51dGlsLlNvcnRlZFNldDxFPl0KKyAgICAgICAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz0wXQorICAgICAgICAgIFBzaVBhcmFtZXRlclN0dWJbcDI6amF2YS5sYW5nLk9iamVjdF0KKyAgICAgICAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz0wXQorICAgICAgICBQc2lSZWZMaXN0U3R1YltUSFJPV1NfTElTVDpdCisgICAgICBQc2lNZXRob2RTdHViW2NvbXBhcmF0b3I6amF2YS51dGlsLkNvbXBhcmF0b3I8PyBzdXBlciBFPl0KKyAgICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTFdCisgICAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgICBQc2lQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgICBQc2lSZWZMaXN0U3R1YltUSFJPV1NfTElTVDpdCisgICAgICBQc2lNZXRob2RTdHViW3N1YlNldDpqYXZhLnV0aWwuU29ydGVkU2V0PEU+XQorICAgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9MV0KKyAgICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3RTdHViCisgICAgICAgIFBzaVBhcmFtZXRlckxpc3RTdHViCisgICAgICAgICAgUHNpUGFyYW1ldGVyU3R1YltwMTpFXQorICAgICAgICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTBdCisgICAgICAgICAgUHNpUGFyYW1ldGVyU3R1YltwMjpFXQorICAgICAgICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTBdCisgICAgICAgIFBzaVJlZkxpc3RTdHViW1RIUk9XU19MSVNUOl0KKyAgICAgIFBzaU1ldGhvZFN0dWJbaGVhZFNldDpqYXZhLnV0aWwuU29ydGVkU2V0PEU+XQorICAgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9MV0KKyAgICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3RTdHViCisgICAgICAgIFBzaVBhcmFtZXRlckxpc3RTdHViCisgICAgICAgICAgUHNpUGFyYW1ldGVyU3R1YltwMTpFXQorICAgICAgICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTBdCisgICAgICAgIFBzaVJlZkxpc3RTdHViW1RIUk9XU19MSVNUOl0KKyAgICAgIFBzaU1ldGhvZFN0dWJbdGFpbFNldDpqYXZhLnV0aWwuU29ydGVkU2V0PEU+XQorICAgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9MV0KKyAgICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3RTdHViCisgICAgICAgIFBzaVBhcmFtZXRlckxpc3RTdHViCisgICAgICAgICAgUHNpUGFyYW1ldGVyU3R1YltwMTpFXQorICAgICAgICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTBdCisgICAgICAgIFBzaVJlZkxpc3RTdHViW1RIUk9XU19MSVNUOl0KKyAgICAgIFBzaU1ldGhvZFN0dWJbZmlyc3Q6RV0KKyAgICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTFdCisgICAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgICBQc2lQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgICBQc2lSZWZMaXN0U3R1YltUSFJPV1NfTElTVDpdCisgICAgICBQc2lNZXRob2RTdHViW2xhc3Q6RV0KKyAgICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTFdCisgICAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgICBQc2lQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgICBQc2lSZWZMaXN0U3R1YltUSFJPV1NfTElTVDpdCisgICAgUHNpQ2xhc3NTdHViW25hbWU9VW5tb2RpZmlhYmxlQ29sbGVjdGlvbiBmcW49amF2YS51dGlsLkNvbGxlY3Rpb25zLlVubW9kaWZpYWJsZUNvbGxlY3Rpb25dCisgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9NDEwNF0KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgICBQc2lUeXBlUGFyYW1ldGVyW0VdCisgICAgICAgICAgUHNpUmVmTGlzdFN0dWJbRVhURU5EU19CT1VORFNfTElTVDpdCisgICAgICBQc2lSZWZMaXN0U3R1YltFWFRFTkRTX0xJU1Q6XQorICAgICAgUHNpUmVmTGlzdFN0dWJbSU1QTEVNRU5UU19MSVNUOmphdmEudXRpbC5Db2xsZWN0aW9uPEU+LCBqYXZhLmlvLlNlcmlhbGl6YWJsZV0KKyAgICAgIFBzaUZpZWxkU3R1YltzZXJpYWxWZXJzaW9uVUlEOmxvbmc9MTgyMDAxNzc1MjU3ODkxNDA3OExdCisgICAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz0yNl0KKyAgICAgIFBzaUZpZWxkU3R1YltjOmphdmEudXRpbC5Db2xsZWN0aW9uPD8gZXh0ZW5kcyBFPl0KKyAgICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTQwOTZdCisgICAgICBQc2lNZXRob2RTdHViW2NvbnMgVW5tb2RpZmlhYmxlQ29sbGVjdGlvbjp2b2lkXQorICAgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9NDA5Nl0KKyAgICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3RTdHViCisgICAgICAgIFBzaVBhcmFtZXRlckxpc3RTdHViCisgICAgICAgICAgUHNpUGFyYW1ldGVyU3R1YltwMTpqYXZhLnV0aWwuQ29sbGVjdGlvbjw/IGV4dGVuZHMgRT5dCisgICAgICAgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9MF0KKyAgICAgICAgUHNpUmVmTGlzdFN0dWJbVEhST1dTX0xJU1Q6XQorICAgICAgUHNpTWV0aG9kU3R1YltzaXplOmludF0KKyAgICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTFdCisgICAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgICBQc2lQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgICBQc2lSZWZMaXN0U3R1YltUSFJPV1NfTElTVDpdCisgICAgICBQc2lNZXRob2RTdHViW2lzRW1wdHk6Ym9vbGVhbl0KKyAgICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTFdCisgICAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgICBQc2lQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgICBQc2lSZWZMaXN0U3R1YltUSFJPV1NfTElTVDpdCisgICAgICBQc2lNZXRob2RTdHViW2NvbnRhaW5zOmJvb2xlYW5dCisgICAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz0xXQorICAgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdFN0dWIKKyAgICAgICAgUHNpUGFyYW1ldGVyTGlzdFN0dWIKKyAgICAgICAgICBQc2lQYXJhbWV0ZXJTdHViW3AxOmphdmEubGFuZy5PYmplY3RdCisgICAgICAgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9MF0KKyAgICAgICAgUHNpUmVmTGlzdFN0dWJbVEhST1dTX0xJU1Q6XQorICAgICAgUHNpTWV0aG9kU3R1Ylt0b0FycmF5OmphdmEubGFuZy5PYmplY3RbXV0KKyAgICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTFdCisgICAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgICBQc2lQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgICBQc2lSZWZMaXN0U3R1YltUSFJPV1NfTElTVDpdCisgICAgICBQc2lNZXRob2RTdHViW3RvQXJyYXk6VFtdXQorICAgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9MV0KKyAgICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3RTdHViCisgICAgICAgICAgUHNpVHlwZVBhcmFtZXRlcltUXQorICAgICAgICAgICAgUHNpUmVmTGlzdFN0dWJbRVhURU5EU19CT1VORFNfTElTVDpdCisgICAgICAgIFBzaVBhcmFtZXRlckxpc3RTdHViCisgICAgICAgICAgUHNpUGFyYW1ldGVyU3R1YltwMTpUW11dCisgICAgICAgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9MF0KKyAgICAgICAgUHNpUmVmTGlzdFN0dWJbVEhST1dTX0xJU1Q6XQorICAgICAgUHNpTWV0aG9kU3R1Ylt0b1N0cmluZzpqYXZhLmxhbmcuU3RyaW5nXQorICAgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9MV0KKyAgICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3RTdHViCisgICAgICAgIFBzaVBhcmFtZXRlckxpc3RTdHViCisgICAgICAgIFBzaVJlZkxpc3RTdHViW1RIUk9XU19MSVNUOl0KKyAgICAgIFBzaU1ldGhvZFN0dWJbaXRlcmF0b3I6amF2YS51dGlsLkl0ZXJhdG9yPEU+XQorICAgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9MV0KKyAgICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3RTdHViCisgICAgICAgIFBzaVBhcmFtZXRlckxpc3RTdHViCisgICAgICAgIFBzaVJlZkxpc3RTdHViW1RIUk9XU19MSVNUOl0KKyAgICAgIFBzaU1ldGhvZFN0dWJbYWRkOmJvb2xlYW5dCisgICAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz0xXQorICAgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdFN0dWIKKyAgICAgICAgUHNpUGFyYW1ldGVyTGlzdFN0dWIKKyAgICAgICAgICBQc2lQYXJhbWV0ZXJTdHViW3AxOkVdCisgICAgICAgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9MF0KKyAgICAgICAgUHNpUmVmTGlzdFN0dWJbVEhST1dTX0xJU1Q6XQorICAgICAgUHNpTWV0aG9kU3R1YltyZW1vdmU6Ym9vbGVhbl0KKyAgICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTFdCisgICAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgICBQc2lQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgICAgIFBzaVBhcmFtZXRlclN0dWJbcDE6amF2YS5sYW5nLk9iamVjdF0KKyAgICAgICAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz0wXQorICAgICAgICBQc2lSZWZMaXN0U3R1YltUSFJPV1NfTElTVDpdCisgICAgICBQc2lNZXRob2RTdHViW2NvbnRhaW5zQWxsOmJvb2xlYW5dCisgICAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz0xXQorICAgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdFN0dWIKKyAgICAgICAgUHNpUGFyYW1ldGVyTGlzdFN0dWIKKyAgICAgICAgICBQc2lQYXJhbWV0ZXJTdHViW3AxOmphdmEudXRpbC5Db2xsZWN0aW9uPD8+XQorICAgICAgICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTBdCisgICAgICAgIFBzaVJlZkxpc3RTdHViW1RIUk9XU19MSVNUOl0KKyAgICAgIFBzaU1ldGhvZFN0dWJbYWRkQWxsOmJvb2xlYW5dCisgICAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz0xXQorICAgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdFN0dWIKKyAgICAgICAgUHNpUGFyYW1ldGVyTGlzdFN0dWIKKyAgICAgICAgICBQc2lQYXJhbWV0ZXJTdHViW3AxOmphdmEudXRpbC5Db2xsZWN0aW9uPD8gZXh0ZW5kcyBFPl0KKyAgICAgICAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz0wXQorICAgICAgICBQc2lSZWZMaXN0U3R1YltUSFJPV1NfTElTVDpdCisgICAgICBQc2lNZXRob2RTdHViW3JlbW92ZUFsbDpib29sZWFuXQorICAgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9MV0KKyAgICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3RTdHViCisgICAgICAgIFBzaVBhcmFtZXRlckxpc3RTdHViCisgICAgICAgICAgUHNpUGFyYW1ldGVyU3R1YltwMTpqYXZhLnV0aWwuQ29sbGVjdGlvbjw/Pl0KKyAgICAgICAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz0wXQorICAgICAgICBQc2lSZWZMaXN0U3R1YltUSFJPV1NfTElTVDpdCisgICAgICBQc2lNZXRob2RTdHViW3JldGFpbkFsbDpib29sZWFuXQorICAgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9MV0KKyAgICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3RTdHViCisgICAgICAgIFBzaVBhcmFtZXRlckxpc3RTdHViCisgICAgICAgICAgUHNpUGFyYW1ldGVyU3R1YltwMTpqYXZhLnV0aWwuQ29sbGVjdGlvbjw/Pl0KKyAgICAgICAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz0wXQorICAgICAgICBQc2lSZWZMaXN0U3R1YltUSFJPV1NfTElTVDpdCisgICAgICBQc2lNZXRob2RTdHViW2NsZWFyOnZvaWRdCisgICAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz0xXQorICAgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdFN0dWIKKyAgICAgICAgUHNpUGFyYW1ldGVyTGlzdFN0dWIKKyAgICAgICAgUHNpUmVmTGlzdFN0dWJbVEhST1dTX0xJU1Q6XQorICAgIFBzaUNsYXNzU3R1YltuYW1lPVVubW9kaWZpYWJsZUxpc3QgZnFuPWphdmEudXRpbC5Db2xsZWN0aW9ucy5Vbm1vZGlmaWFibGVMaXN0XQorICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTQxMDRdCisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdFN0dWIKKyAgICAgICAgUHNpVHlwZVBhcmFtZXRlcltFXQorICAgICAgICAgIFBzaVJlZkxpc3RTdHViW0VYVEVORFNfQk9VTkRTX0xJU1Q6XQorICAgICAgUHNpUmVmTGlzdFN0dWJbRVhURU5EU19MSVNUOmphdmEudXRpbC5Db2xsZWN0aW9ucy5Vbm1vZGlmaWFibGVDb2xsZWN0aW9uPEU+XQorICAgICAgUHNpUmVmTGlzdFN0dWJbSU1QTEVNRU5UU19MSVNUOmphdmEudXRpbC5MaXN0PEU+XQorICAgICAgUHNpRmllbGRTdHViW3NlcmlhbFZlcnNpb25VSUQ6bG9uZz0tMjgzOTY3MzU2MDY1MjQ3NzI4TF0KKyAgICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTQxMjBdCisgICAgICBQc2lGaWVsZFN0dWJbbGlzdDpqYXZhLnV0aWwuTGlzdDw/IGV4dGVuZHMgRT5dCisgICAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz00MDk2XQorICAgICAgUHNpTWV0aG9kU3R1Yltjb25zIFVubW9kaWZpYWJsZUxpc3Q6dm9pZF0KKyAgICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTQwOTZdCisgICAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgICBQc2lQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgICAgIFBzaVBhcmFtZXRlclN0dWJbcDE6amF2YS51dGlsLkxpc3Q8PyBleHRlbmRzIEU+XQorICAgICAgICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTBdCisgICAgICAgIFBzaVJlZkxpc3RTdHViW1RIUk9XU19MSVNUOl0KKyAgICAgIFBzaU1ldGhvZFN0dWJbZXF1YWxzOmJvb2xlYW5dCisgICAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz0xXQorICAgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdFN0dWIKKyAgICAgICAgUHNpUGFyYW1ldGVyTGlzdFN0dWIKKyAgICAgICAgICBQc2lQYXJhbWV0ZXJTdHViW3AxOmphdmEubGFuZy5PYmplY3RdCisgICAgICAgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9MF0KKyAgICAgICAgUHNpUmVmTGlzdFN0dWJbVEhST1dTX0xJU1Q6XQorICAgICAgUHNpTWV0aG9kU3R1YltoYXNoQ29kZTppbnRdCisgICAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz0xXQorICAgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdFN0dWIKKyAgICAgICAgUHNpUGFyYW1ldGVyTGlzdFN0dWIKKyAgICAgICAgUHNpUmVmTGlzdFN0dWJbVEhST1dTX0xJU1Q6XQorICAgICAgUHNpTWV0aG9kU3R1YltnZXQ6RV0KKyAgICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTFdCisgICAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgICBQc2lQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgICAgIFBzaVBhcmFtZXRlclN0dWJbcDE6aW50XQorICAgICAgICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTBdCisgICAgICAgIFBzaVJlZkxpc3RTdHViW1RIUk9XU19MSVNUOl0KKyAgICAgIFBzaU1ldGhvZFN0dWJbc2V0OkVdCisgICAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz0xXQorICAgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdFN0dWIKKyAgICAgICAgUHNpUGFyYW1ldGVyTGlzdFN0dWIKKyAgICAgICAgICBQc2lQYXJhbWV0ZXJTdHViW3AxOmludF0KKyAgICAgICAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz0wXQorICAgICAgICAgIFBzaVBhcmFtZXRlclN0dWJbcDI6RV0KKyAgICAgICAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz0wXQorICAgICAgICBQc2lSZWZMaXN0U3R1YltUSFJPV1NfTElTVDpdCisgICAgICBQc2lNZXRob2RTdHViW2FkZDp2b2lkXQorICAgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9MV0KKyAgICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3RTdHViCisgICAgICAgIFBzaVBhcmFtZXRlckxpc3RTdHViCisgICAgICAgICAgUHNpUGFyYW1ldGVyU3R1YltwMTppbnRdCisgICAgICAgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9MF0KKyAgICAgICAgICBQc2lQYXJhbWV0ZXJTdHViW3AyOkVdCisgICAgICAgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9MF0KKyAgICAgICAgUHNpUmVmTGlzdFN0dWJbVEhST1dTX0xJU1Q6XQorICAgICAgUHNpTWV0aG9kU3R1YltyZW1vdmU6RV0KKyAgICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTFdCisgICAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgICBQc2lQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgICAgIFBzaVBhcmFtZXRlclN0dWJbcDE6aW50XQorICAgICAgICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTBdCisgICAgICAgIFBzaVJlZkxpc3RTdHViW1RIUk9XU19MSVNUOl0KKyAgICAgIFBzaU1ldGhvZFN0dWJbaW5kZXhPZjppbnRdCisgICAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz0xXQorICAgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdFN0dWIKKyAgICAgICAgUHNpUGFyYW1ldGVyTGlzdFN0dWIKKyAgICAgICAgICBQc2lQYXJhbWV0ZXJTdHViW3AxOmphdmEubGFuZy5PYmplY3RdCisgICAgICAgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9MF0KKyAgICAgICAgUHNpUmVmTGlzdFN0dWJbVEhST1dTX0xJU1Q6XQorICAgICAgUHNpTWV0aG9kU3R1YltsYXN0SW5kZXhPZjppbnRdCisgICAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz0xXQorICAgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdFN0dWIKKyAgICAgICAgUHNpUGFyYW1ldGVyTGlzdFN0dWIKKyAgICAgICAgICBQc2lQYXJhbWV0ZXJTdHViW3AxOmphdmEubGFuZy5PYmplY3RdCisgICAgICAgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9MF0KKyAgICAgICAgUHNpUmVmTGlzdFN0dWJbVEhST1dTX0xJU1Q6XQorICAgICAgUHNpTWV0aG9kU3R1YlthZGRBbGw6Ym9vbGVhbl0KKyAgICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTFdCisgICAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgICBQc2lQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgICAgIFBzaVBhcmFtZXRlclN0dWJbcDE6aW50XQorICAgICAgICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTBdCisgICAgICAgICAgUHNpUGFyYW1ldGVyU3R1YltwMjpqYXZhLnV0aWwuQ29sbGVjdGlvbjw/IGV4dGVuZHMgRT5dCisgICAgICAgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9MF0KKyAgICAgICAgUHNpUmVmTGlzdFN0dWJbVEhST1dTX0xJU1Q6XQorICAgICAgUHNpTWV0aG9kU3R1YltsaXN0SXRlcmF0b3I6amF2YS51dGlsLkxpc3RJdGVyYXRvcjxFPl0KKyAgICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTFdCisgICAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgICBQc2lQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgICBQc2lSZWZMaXN0U3R1YltUSFJPV1NfTElTVDpdCisgICAgICBQc2lNZXRob2RTdHViW2xpc3RJdGVyYXRvcjpqYXZhLnV0aWwuTGlzdEl0ZXJhdG9yPEU+XQorICAgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9MV0KKyAgICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3RTdHViCisgICAgICAgIFBzaVBhcmFtZXRlckxpc3RTdHViCisgICAgICAgICAgUHNpUGFyYW1ldGVyU3R1YltwMTppbnRdCisgICAgICAgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9MF0KKyAgICAgICAgUHNpUmVmTGlzdFN0dWJbVEhST1dTX0xJU1Q6XQorICAgICAgUHNpTWV0aG9kU3R1YltzdWJMaXN0OmphdmEudXRpbC5MaXN0PEU+XQorICAgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9MV0KKyAgICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3RTdHViCisgICAgICAgIFBzaVBhcmFtZXRlckxpc3RTdHViCisgICAgICAgICAgUHNpUGFyYW1ldGVyU3R1YltwMTppbnRdCisgICAgICAgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9MF0KKyAgICAgICAgICBQc2lQYXJhbWV0ZXJTdHViW3AyOmludF0KKyAgICAgICAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz0wXQorICAgICAgICBQc2lSZWZMaXN0U3R1YltUSFJPV1NfTElTVDpdCisgICAgICBQc2lNZXRob2RTdHViW3JlYWRSZXNvbHZlOmphdmEubGFuZy5PYmplY3RdCisgICAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz0yXQorICAgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdFN0dWIKKyAgICAgICAgUHNpUGFyYW1ldGVyTGlzdFN0dWIKKyAgICAgICAgUHNpUmVmTGlzdFN0dWJbVEhST1dTX0xJU1Q6XQorICAgIFBzaUNsYXNzU3R1YltuYW1lPVVubW9kaWZpYWJsZU1hcCBmcW49amF2YS51dGlsLkNvbGxlY3Rpb25zLlVubW9kaWZpYWJsZU1hcF0KKyAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz0xMF0KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgICBQc2lUeXBlUGFyYW1ldGVyW0tdCisgICAgICAgICAgUHNpUmVmTGlzdFN0dWJbRVhURU5EU19CT1VORFNfTElTVDpdCisgICAgICAgIFBzaVR5cGVQYXJhbWV0ZXJbVl0KKyAgICAgICAgICBQc2lSZWZMaXN0U3R1YltFWFRFTkRTX0JPVU5EU19MSVNUOl0KKyAgICAgIFBzaVJlZkxpc3RTdHViW0VYVEVORFNfTElTVDpdCisgICAgICBQc2lSZWZMaXN0U3R1YltJTVBMRU1FTlRTX0xJU1Q6amF2YS51dGlsLk1hcDxLLFY+LCBqYXZhLmlvLlNlcmlhbGl6YWJsZV0KKyAgICAgIFBzaUNsYXNzU3R1YltuYW1lPVVubW9kaWZpYWJsZUVudHJ5U2V0IGZxbj1qYXZhLnV0aWwuQ29sbGVjdGlvbnMuVW5tb2RpZmlhYmxlTWFwLlVubW9kaWZpYWJsZUVudHJ5U2V0XQorICAgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9NDEwNF0KKyAgICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3RTdHViCisgICAgICAgICAgUHNpVHlwZVBhcmFtZXRlcltLXQorICAgICAgICAgICAgUHNpUmVmTGlzdFN0dWJbRVhURU5EU19CT1VORFNfTElTVDpdCisgICAgICAgICAgUHNpVHlwZVBhcmFtZXRlcltWXQorICAgICAgICAgICAgUHNpUmVmTGlzdFN0dWJbRVhURU5EU19CT1VORFNfTElTVDpdCisgICAgICAgIFBzaVJlZkxpc3RTdHViW0VYVEVORFNfTElTVDpqYXZhLnV0aWwuQ29sbGVjdGlvbnMuVW5tb2RpZmlhYmxlU2V0PGphdmEudXRpbC5NYXAuRW50cnk8SyxWPj5dCisgICAgICAgIFBzaVJlZkxpc3RTdHViW0lNUExFTUVOVFNfTElTVDpdCisgICAgICAgIFBzaUNsYXNzU3R1YltuYW1lPVVubW9kaWZpYWJsZUVudHJ5IGZxbj1qYXZhLnV0aWwuQ29sbGVjdGlvbnMuVW5tb2RpZmlhYmxlTWFwLlVubW9kaWZpYWJsZUVudHJ5U2V0LlVubW9kaWZpYWJsZUVudHJ5XQorICAgICAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz0xMF0KKyAgICAgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdFN0dWIKKyAgICAgICAgICAgIFBzaVR5cGVQYXJhbWV0ZXJbS10KKyAgICAgICAgICAgICAgUHNpUmVmTGlzdFN0dWJbRVhURU5EU19CT1VORFNfTElTVDpdCisgICAgICAgICAgICBQc2lUeXBlUGFyYW1ldGVyW1ZdCisgICAgICAgICAgICAgIFBzaVJlZkxpc3RTdHViW0VYVEVORFNfQk9VTkRTX0xJU1Q6XQorICAgICAgICAgIFBzaVJlZkxpc3RTdHViW0VYVEVORFNfTElTVDpdCisgICAgICAgICAgUHNpUmVmTGlzdFN0dWJbSU1QTEVNRU5UU19MSVNUOmphdmEudXRpbC5NYXAuRW50cnk8SyxWPl0KKyAgICAgICAgICBQc2lGaWVsZFN0dWJbZTpqYXZhLnV0aWwuTWFwLkVudHJ5PD8gZXh0ZW5kcyBLLD8gZXh0ZW5kcyBWPl0KKyAgICAgICAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz0yXQorICAgICAgICAgIFBzaU1ldGhvZFN0dWJbY29ucyBVbm1vZGlmaWFibGVFbnRyeTp2b2lkXQorICAgICAgICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTQwOTZdCisgICAgICAgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdFN0dWIKKyAgICAgICAgICAgIFBzaVBhcmFtZXRlckxpc3RTdHViCisgICAgICAgICAgICAgIFBzaVBhcmFtZXRlclN0dWJbcDE6amF2YS51dGlsLk1hcC5FbnRyeTw/IGV4dGVuZHMgSyw/IGV4dGVuZHMgVj5dCisgICAgICAgICAgICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTBdCisgICAgICAgICAgICBQc2lSZWZMaXN0U3R1YltUSFJPV1NfTElTVDpdCisgICAgICAgICAgUHNpTWV0aG9kU3R1YltnZXRLZXk6S10KKyAgICAgICAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz0xXQorICAgICAgICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3RTdHViCisgICAgICAgICAgICBQc2lQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgICAgICAgUHNpUmVmTGlzdFN0dWJbVEhST1dTX0xJU1Q6XQorICAgICAgICAgIFBzaU1ldGhvZFN0dWJbZ2V0VmFsdWU6Vl0KKyAgICAgICAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz0xXQorICAgICAgICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3RTdHViCisgICAgICAgICAgICBQc2lQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgICAgICAgUHNpUmVmTGlzdFN0dWJbVEhST1dTX0xJU1Q6XQorICAgICAgICAgIFBzaU1ldGhvZFN0dWJbc2V0VmFsdWU6Vl0KKyAgICAgICAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz0xXQorICAgICAgICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3RTdHViCisgICAgICAgICAgICBQc2lQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgICAgICAgICBQc2lQYXJhbWV0ZXJTdHViW3AxOlZdCisgICAgICAgICAgICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTBdCisgICAgICAgICAgICBQc2lSZWZMaXN0U3R1YltUSFJPV1NfTElTVDpdCisgICAgICAgICAgUHNpTWV0aG9kU3R1YltoYXNoQ29kZTppbnRdCisgICAgICAgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9MV0KKyAgICAgICAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgICAgICAgUHNpUGFyYW1ldGVyTGlzdFN0dWIKKyAgICAgICAgICAgIFBzaVJlZkxpc3RTdHViW1RIUk9XU19MSVNUOl0KKyAgICAgICAgICBQc2lNZXRob2RTdHViW2VxdWFsczpib29sZWFuXQorICAgICAgICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTFdCisgICAgICAgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdFN0dWIKKyAgICAgICAgICAgIFBzaVBhcmFtZXRlckxpc3RTdHViCisgICAgICAgICAgICAgIFBzaVBhcmFtZXRlclN0dWJbcDE6amF2YS5sYW5nLk9iamVjdF0KKyAgICAgICAgICAgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9MF0KKyAgICAgICAgICAgIFBzaVJlZkxpc3RTdHViW1RIUk9XU19MSVNUOl0KKyAgICAgICAgICBQc2lNZXRob2RTdHViW3RvU3RyaW5nOmphdmEubGFuZy5TdHJpbmddCisgICAgICAgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9MV0KKyAgICAgICAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgICAgICAgUHNpUGFyYW1ldGVyTGlzdFN0dWIKKyAgICAgICAgICAgIFBzaVJlZkxpc3RTdHViW1RIUk9XU19MSVNUOl0KKyAgICAgICAgUHNpRmllbGRTdHViW3NlcmlhbFZlcnNpb25VSUQ6bG9uZz03ODU0MzkwNjExNjU3OTQzNzMzTF0KKyAgICAgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9MjZdCisgICAgICAgIFBzaU1ldGhvZFN0dWJbY29ucyBVbm1vZGlmaWFibGVFbnRyeVNldDp2b2lkXQorICAgICAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz00MDk2XQorICAgICAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgICAgIFBzaVBhcmFtZXRlckxpc3RTdHViCisgICAgICAgICAgICBQc2lQYXJhbWV0ZXJTdHViW3AxOmphdmEudXRpbC5TZXQ8PyBleHRlbmRzIGphdmEudXRpbC5NYXAuRW50cnk8PyBleHRlbmRzIEssPyBleHRlbmRzIFY+Pl0KKyAgICAgICAgICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTBdCisgICAgICAgICAgUHNpUmVmTGlzdFN0dWJbVEhST1dTX0xJU1Q6XQorICAgICAgICBQc2lNZXRob2RTdHViW2l0ZXJhdG9yOmphdmEudXRpbC5JdGVyYXRvcjxqYXZhLnV0aWwuTWFwLkVudHJ5PEssVj4+XQorICAgICAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz0xXQorICAgICAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgICAgIFBzaVBhcmFtZXRlckxpc3RTdHViCisgICAgICAgICAgUHNpUmVmTGlzdFN0dWJbVEhST1dTX0xJU1Q6XQorICAgICAgICBQc2lNZXRob2RTdHViW3RvQXJyYXk6amF2YS5sYW5nLk9iamVjdFtdXQorICAgICAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz0xXQorICAgICAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgICAgIFBzaVBhcmFtZXRlckxpc3RTdHViCisgICAgICAgICAgUHNpUmVmTGlzdFN0dWJbVEhST1dTX0xJU1Q6XQorICAgICAgICBQc2lNZXRob2RTdHViW3RvQXJyYXk6VFtdXQorICAgICAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz0xXQorICAgICAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgICAgICAgUHNpVHlwZVBhcmFtZXRlcltUXQorICAgICAgICAgICAgICBQc2lSZWZMaXN0U3R1YltFWFRFTkRTX0JPVU5EU19MSVNUOl0KKyAgICAgICAgICBQc2lQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgICAgICAgUHNpUGFyYW1ldGVyU3R1YltwMTpUW11dCisgICAgICAgICAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz0wXQorICAgICAgICAgIFBzaVJlZkxpc3RTdHViW1RIUk9XU19MSVNUOl0KKyAgICAgICAgUHNpTWV0aG9kU3R1Yltjb250YWluczpib29sZWFuXQorICAgICAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz0xXQorICAgICAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgICAgIFBzaVBhcmFtZXRlckxpc3RTdHViCisgICAgICAgICAgICBQc2lQYXJhbWV0ZXJTdHViW3AxOmphdmEubGFuZy5PYmplY3RdCisgICAgICAgICAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz0wXQorICAgICAgICAgIFBzaVJlZkxpc3RTdHViW1RIUk9XU19MSVNUOl0KKyAgICAgICAgUHNpTWV0aG9kU3R1Yltjb250YWluc0FsbDpib29sZWFuXQorICAgICAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz0xXQorICAgICAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgICAgIFBzaVBhcmFtZXRlckxpc3RTdHViCisgICAgICAgICAgICBQc2lQYXJhbWV0ZXJTdHViW3AxOmphdmEudXRpbC5Db2xsZWN0aW9uPD8+XQorICAgICAgICAgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9MF0KKyAgICAgICAgICBQc2lSZWZMaXN0U3R1YltUSFJPV1NfTElTVDpdCisgICAgICAgIFBzaU1ldGhvZFN0dWJbZXF1YWxzOmJvb2xlYW5dCisgICAgICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTFdCisgICAgICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3RTdHViCisgICAgICAgICAgUHNpUGFyYW1ldGVyTGlzdFN0dWIKKyAgICAgICAgICAgIFBzaVBhcmFtZXRlclN0dWJbcDE6amF2YS5sYW5nLk9iamVjdF0KKyAgICAgICAgICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTBdCisgICAgICAgICAgUHNpUmVmTGlzdFN0dWJbVEhST1dTX0xJU1Q6XQorICAgICAgUHNpRmllbGRTdHViW3NlcmlhbFZlcnNpb25VSUQ6bG9uZz0tMTAzNDIzNDcyODU3NDI4NjAxNExdCisgICAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz0yNl0KKyAgICAgIFBzaUZpZWxkU3R1YlttOmphdmEudXRpbC5NYXA8PyBleHRlbmRzIEssPyBleHRlbmRzIFY+XQorICAgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9MThdCisgICAgICBQc2lGaWVsZFN0dWJba2V5U2V0OmphdmEudXRpbC5TZXQ8Sz5dCisgICAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz0xMzBdCisgICAgICBQc2lGaWVsZFN0dWJbZW50cnlTZXQ6amF2YS51dGlsLlNldDxqYXZhLnV0aWwuTWFwLkVudHJ5PEssVj4+XQorICAgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9MTMwXQorICAgICAgUHNpRmllbGRTdHViW3ZhbHVlczpqYXZhLnV0aWwuQ29sbGVjdGlvbjxWPl0KKyAgICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTEzMF0KKyAgICAgIFBzaU1ldGhvZFN0dWJbY29ucyBVbm1vZGlmaWFibGVNYXA6dm9pZF0KKyAgICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTQwOTZdCisgICAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgICBQc2lQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgICAgIFBzaVBhcmFtZXRlclN0dWJbcDE6amF2YS51dGlsLk1hcDw/IGV4dGVuZHMgSyw/IGV4dGVuZHMgVj5dCisgICAgICAgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9MF0KKyAgICAgICAgUHNpUmVmTGlzdFN0dWJbVEhST1dTX0xJU1Q6XQorICAgICAgUHNpTWV0aG9kU3R1YltzaXplOmludF0KKyAgICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTFdCisgICAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgICBQc2lQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgICBQc2lSZWZMaXN0U3R1YltUSFJPV1NfTElTVDpdCisgICAgICBQc2lNZXRob2RTdHViW2lzRW1wdHk6Ym9vbGVhbl0KKyAgICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTFdCisgICAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgICBQc2lQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgICBQc2lSZWZMaXN0U3R1YltUSFJPV1NfTElTVDpdCisgICAgICBQc2lNZXRob2RTdHViW2NvbnRhaW5zS2V5OmJvb2xlYW5dCisgICAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz0xXQorICAgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdFN0dWIKKyAgICAgICAgUHNpUGFyYW1ldGVyTGlzdFN0dWIKKyAgICAgICAgICBQc2lQYXJhbWV0ZXJTdHViW3AxOmphdmEubGFuZy5PYmplY3RdCisgICAgICAgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9MF0KKyAgICAgICAgUHNpUmVmTGlzdFN0dWJbVEhST1dTX0xJU1Q6XQorICAgICAgUHNpTWV0aG9kU3R1Yltjb250YWluc1ZhbHVlOmJvb2xlYW5dCisgICAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz0xXQorICAgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdFN0dWIKKyAgICAgICAgUHNpUGFyYW1ldGVyTGlzdFN0dWIKKyAgICAgICAgICBQc2lQYXJhbWV0ZXJTdHViW3AxOmphdmEubGFuZy5PYmplY3RdCisgICAgICAgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9MF0KKyAgICAgICAgUHNpUmVmTGlzdFN0dWJbVEhST1dTX0xJU1Q6XQorICAgICAgUHNpTWV0aG9kU3R1YltnZXQ6Vl0KKyAgICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTFdCisgICAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgICBQc2lQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgICAgIFBzaVBhcmFtZXRlclN0dWJbcDE6amF2YS5sYW5nLk9iamVjdF0KKyAgICAgICAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz0wXQorICAgICAgICBQc2lSZWZMaXN0U3R1YltUSFJPV1NfTElTVDpdCisgICAgICBQc2lNZXRob2RTdHViW3B1dDpWXQorICAgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9MV0KKyAgICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3RTdHViCisgICAgICAgIFBzaVBhcmFtZXRlckxpc3RTdHViCisgICAgICAgICAgUHNpUGFyYW1ldGVyU3R1YltwMTpLXQorICAgICAgICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTBdCisgICAgICAgICAgUHNpUGFyYW1ldGVyU3R1YltwMjpWXQorICAgICAgICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTBdCisgICAgICAgIFBzaVJlZkxpc3RTdHViW1RIUk9XU19MSVNUOl0KKyAgICAgIFBzaU1ldGhvZFN0dWJbcmVtb3ZlOlZdCisgICAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz0xXQorICAgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdFN0dWIKKyAgICAgICAgUHNpUGFyYW1ldGVyTGlzdFN0dWIKKyAgICAgICAgICBQc2lQYXJhbWV0ZXJTdHViW3AxOmphdmEubGFuZy5PYmplY3RdCisgICAgICAgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9MF0KKyAgICAgICAgUHNpUmVmTGlzdFN0dWJbVEhST1dTX0xJU1Q6XQorICAgICAgUHNpTWV0aG9kU3R1YltwdXRBbGw6dm9pZF0KKyAgICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTFdCisgICAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgICBQc2lQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgICAgIFBzaVBhcmFtZXRlclN0dWJbcDE6amF2YS51dGlsLk1hcDw/IGV4dGVuZHMgSyw/IGV4dGVuZHMgVj5dCisgICAgICAgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9MF0KKyAgICAgICAgUHNpUmVmTGlzdFN0dWJbVEhST1dTX0xJU1Q6XQorICAgICAgUHNpTWV0aG9kU3R1YltjbGVhcjp2b2lkXQorICAgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9MV0KKyAgICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3RTdHViCisgICAgICAgIFBzaVBhcmFtZXRlckxpc3RTdHViCisgICAgICAgIFBzaVJlZkxpc3RTdHViW1RIUk9XU19MSVNUOl0KKyAgICAgIFBzaU1ldGhvZFN0dWJba2V5U2V0OmphdmEudXRpbC5TZXQ8Sz5dCisgICAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz0xXQorICAgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdFN0dWIKKyAgICAgICAgUHNpUGFyYW1ldGVyTGlzdFN0dWIKKyAgICAgICAgUHNpUmVmTGlzdFN0dWJbVEhST1dTX0xJU1Q6XQorICAgICAgUHNpTWV0aG9kU3R1YltlbnRyeVNldDpqYXZhLnV0aWwuU2V0PGphdmEudXRpbC5NYXAuRW50cnk8SyxWPj5dCisgICAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz0xXQorICAgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdFN0dWIKKyAgICAgICAgUHNpUGFyYW1ldGVyTGlzdFN0dWIKKyAgICAgICAgUHNpUmVmTGlzdFN0dWJbVEhST1dTX0xJU1Q6XQorICAgICAgUHNpTWV0aG9kU3R1Ylt2YWx1ZXM6amF2YS51dGlsLkNvbGxlY3Rpb248Vj5dCisgICAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz0xXQorICAgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdFN0dWIKKyAgICAgICAgUHNpUGFyYW1ldGVyTGlzdFN0dWIKKyAgICAgICAgUHNpUmVmTGlzdFN0dWJbVEhST1dTX0xJU1Q6XQorICAgICAgUHNpTWV0aG9kU3R1YltlcXVhbHM6Ym9vbGVhbl0KKyAgICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTFdCisgICAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgICBQc2lQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgICAgIFBzaVBhcmFtZXRlclN0dWJbcDE6amF2YS5sYW5nLk9iamVjdF0KKyAgICAgICAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz0wXQorICAgICAgICBQc2lSZWZMaXN0U3R1YltUSFJPV1NfTElTVDpdCisgICAgICBQc2lNZXRob2RTdHViW2hhc2hDb2RlOmludF0KKyAgICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTFdCisgICAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgICBQc2lQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgICBQc2lSZWZMaXN0U3R1YltUSFJPV1NfTElTVDpdCisgICAgICBQc2lNZXRob2RTdHViW3RvU3RyaW5nOmphdmEubGFuZy5TdHJpbmddCisgICAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz0xXQorICAgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdFN0dWIKKyAgICAgICAgUHNpUGFyYW1ldGVyTGlzdFN0dWIKKyAgICAgICAgUHNpUmVmTGlzdFN0dWJbVEhST1dTX0xJU1Q6XQorICAgIFBzaUNsYXNzU3R1YltuYW1lPVVubW9kaWZpYWJsZVJhbmRvbUFjY2Vzc0xpc3QgZnFuPWphdmEudXRpbC5Db2xsZWN0aW9ucy5Vbm1vZGlmaWFibGVSYW5kb21BY2Nlc3NMaXN0XQorICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTQxMDRdCisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdFN0dWIKKyAgICAgICAgUHNpVHlwZVBhcmFtZXRlcltFXQorICAgICAgICAgIFBzaVJlZkxpc3RTdHViW0VYVEVORFNfQk9VTkRTX0xJU1Q6XQorICAgICAgUHNpUmVmTGlzdFN0dWJbRVhURU5EU19MSVNUOmphdmEudXRpbC5Db2xsZWN0aW9ucy5Vbm1vZGlmaWFibGVMaXN0PEU+XQorICAgICAgUHNpUmVmTGlzdFN0dWJbSU1QTEVNRU5UU19MSVNUOmphdmEudXRpbC5SYW5kb21BY2Nlc3NdCisgICAgICBQc2lGaWVsZFN0dWJbc2VyaWFsVmVyc2lvblVJRDpsb25nPS0yNTQyMzA4ODM2OTY2MzgyMDAxTF0KKyAgICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTI2XQorICAgICAgUHNpTWV0aG9kU3R1Yltjb25zIFVubW9kaWZpYWJsZVJhbmRvbUFjY2Vzc0xpc3Q6dm9pZF0KKyAgICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTQwOTZdCisgICAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgICBQc2lQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgICAgIFBzaVBhcmFtZXRlclN0dWJbcDE6amF2YS51dGlsLkxpc3Q8PyBleHRlbmRzIEU+XQorICAgICAgICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTBdCisgICAgICAgIFBzaVJlZkxpc3RTdHViW1RIUk9XU19MSVNUOl0KKyAgICAgIFBzaU1ldGhvZFN0dWJbc3ViTGlzdDpqYXZhLnV0aWwuTGlzdDxFPl0KKyAgICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTFdCisgICAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgICBQc2lQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgICAgIFBzaVBhcmFtZXRlclN0dWJbcDE6aW50XQorICAgICAgICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTBdCisgICAgICAgICAgUHNpUGFyYW1ldGVyU3R1YltwMjppbnRdCisgICAgICAgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9MF0KKyAgICAgICAgUHNpUmVmTGlzdFN0dWJbVEhST1dTX0xJU1Q6XQorICAgICAgUHNpTWV0aG9kU3R1Ylt3cml0ZVJlcGxhY2U6amF2YS5sYW5nLk9iamVjdF0KKyAgICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTJdCisgICAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgICBQc2lQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgICBQc2lSZWZMaXN0U3R1YltUSFJPV1NfTElTVDpdCisgICAgUHNpQ2xhc3NTdHViW25hbWU9VW5tb2RpZmlhYmxlU2V0IGZxbj1qYXZhLnV0aWwuQ29sbGVjdGlvbnMuVW5tb2RpZmlhYmxlU2V0XQorICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTQxMDRdCisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdFN0dWIKKyAgICAgICAgUHNpVHlwZVBhcmFtZXRlcltFXQorICAgICAgICAgIFBzaVJlZkxpc3RTdHViW0VYVEVORFNfQk9VTkRTX0xJU1Q6XQorICAgICAgUHNpUmVmTGlzdFN0dWJbRVhURU5EU19MSVNUOmphdmEudXRpbC5Db2xsZWN0aW9ucy5Vbm1vZGlmaWFibGVDb2xsZWN0aW9uPEU+XQorICAgICAgUHNpUmVmTGlzdFN0dWJbSU1QTEVNRU5UU19MSVNUOmphdmEudXRpbC5TZXQ8RT4sIGphdmEuaW8uU2VyaWFsaXphYmxlXQorICAgICAgUHNpRmllbGRTdHViW3NlcmlhbFZlcnNpb25VSUQ6bG9uZz0tOTIxNTA0NzgzMzc3NTAxMzgwM0xdCisgICAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz0yNl0KKyAgICAgIFBzaU1ldGhvZFN0dWJbY29ucyBVbm1vZGlmaWFibGVTZXQ6dm9pZF0KKyAgICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTQwOTZdCisgICAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgICBQc2lQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgICAgIFBzaVBhcmFtZXRlclN0dWJbcDE6amF2YS51dGlsLlNldDw/IGV4dGVuZHMgRT5dCisgICAgICAgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9MF0KKyAgICAgICAgUHNpUmVmTGlzdFN0dWJbVEhST1dTX0xJU1Q6XQorICAgICAgUHNpTWV0aG9kU3R1YltlcXVhbHM6Ym9vbGVhbl0KKyAgICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTFdCisgICAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgICBQc2lQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgICAgIFBzaVBhcmFtZXRlclN0dWJbcDE6amF2YS5sYW5nLk9iamVjdF0KKyAgICAgICAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz0wXQorICAgICAgICBQc2lSZWZMaXN0U3R1YltUSFJPV1NfTElTVDpdCisgICAgICBQc2lNZXRob2RTdHViW2hhc2hDb2RlOmludF0KKyAgICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTFdCisgICAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgICBQc2lQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgICBQc2lSZWZMaXN0U3R1YltUSFJPV1NfTElTVDpdCisgICAgUHNpQ2xhc3NTdHViW25hbWU9VW5tb2RpZmlhYmxlU29ydGVkTWFwIGZxbj1qYXZhLnV0aWwuQ29sbGVjdGlvbnMuVW5tb2RpZmlhYmxlU29ydGVkTWFwXQorICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTQxMDRdCisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdFN0dWIKKyAgICAgICAgUHNpVHlwZVBhcmFtZXRlcltLXQorICAgICAgICAgIFBzaVJlZkxpc3RTdHViW0VYVEVORFNfQk9VTkRTX0xJU1Q6XQorICAgICAgICBQc2lUeXBlUGFyYW1ldGVyW1ZdCisgICAgICAgICAgUHNpUmVmTGlzdFN0dWJbRVhURU5EU19CT1VORFNfTElTVDpdCisgICAgICBQc2lSZWZMaXN0U3R1YltFWFRFTkRTX0xJU1Q6amF2YS51dGlsLkNvbGxlY3Rpb25zLlVubW9kaWZpYWJsZU1hcDxLLFY+XQorICAgICAgUHNpUmVmTGlzdFN0dWJbSU1QTEVNRU5UU19MSVNUOmphdmEudXRpbC5Tb3J0ZWRNYXA8SyxWPiwgamF2YS5pby5TZXJpYWxpemFibGVdCisgICAgICBQc2lGaWVsZFN0dWJbc2VyaWFsVmVyc2lvblVJRDpsb25nPS04ODA2NzQzODE1OTk2NzEzMjA2TF0KKyAgICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTI2XQorICAgICAgUHNpRmllbGRTdHViW3NtOmphdmEudXRpbC5Tb3J0ZWRNYXA8Syw/IGV4dGVuZHMgVj5dCisgICAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz0yXQorICAgICAgUHNpTWV0aG9kU3R1Yltjb25zIFVubW9kaWZpYWJsZVNvcnRlZE1hcDp2b2lkXQorICAgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9NDA5Nl0KKyAgICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3RTdHViCisgICAgICAgIFBzaVBhcmFtZXRlckxpc3RTdHViCisgICAgICAgICAgUHNpUGFyYW1ldGVyU3R1YltwMTpqYXZhLnV0aWwuU29ydGVkTWFwPEssPyBleHRlbmRzIFY+XQorICAgICAgICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTBdCisgICAgICAgIFBzaVJlZkxpc3RTdHViW1RIUk9XU19MSVNUOl0KKyAgICAgIFBzaU1ldGhvZFN0dWJbY29tcGFyYXRvcjpqYXZhLnV0aWwuQ29tcGFyYXRvcjw/IHN1cGVyIEs+XQorICAgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9MV0KKyAgICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3RTdHViCisgICAgICAgIFBzaVBhcmFtZXRlckxpc3RTdHViCisgICAgICAgIFBzaVJlZkxpc3RTdHViW1RIUk9XU19MSVNUOl0KKyAgICAgIFBzaU1ldGhvZFN0dWJbc3ViTWFwOmphdmEudXRpbC5Tb3J0ZWRNYXA8SyxWPl0KKyAgICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTFdCisgICAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgICBQc2lQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgICAgIFBzaVBhcmFtZXRlclN0dWJbcDE6S10KKyAgICAgICAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz0wXQorICAgICAgICAgIFBzaVBhcmFtZXRlclN0dWJbcDI6S10KKyAgICAgICAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz0wXQorICAgICAgICBQc2lSZWZMaXN0U3R1YltUSFJPV1NfTElTVDpdCisgICAgICBQc2lNZXRob2RTdHViW2hlYWRNYXA6amF2YS51dGlsLlNvcnRlZE1hcDxLLFY+XQorICAgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9MV0KKyAgICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3RTdHViCisgICAgICAgIFBzaVBhcmFtZXRlckxpc3RTdHViCisgICAgICAgICAgUHNpUGFyYW1ldGVyU3R1YltwMTpLXQorICAgICAgICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTBdCisgICAgICAgIFBzaVJlZkxpc3RTdHViW1RIUk9XU19MSVNUOl0KKyAgICAgIFBzaU1ldGhvZFN0dWJbdGFpbE1hcDpqYXZhLnV0aWwuU29ydGVkTWFwPEssVj5dCisgICAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz0xXQorICAgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdFN0dWIKKyAgICAgICAgUHNpUGFyYW1ldGVyTGlzdFN0dWIKKyAgICAgICAgICBQc2lQYXJhbWV0ZXJTdHViW3AxOktdCisgICAgICAgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9MF0KKyAgICAgICAgUHNpUmVmTGlzdFN0dWJbVEhST1dTX0xJU1Q6XQorICAgICAgUHNpTWV0aG9kU3R1YltmaXJzdEtleTpLXQorICAgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9MV0KKyAgICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3RTdHViCisgICAgICAgIFBzaVBhcmFtZXRlckxpc3RTdHViCisgICAgICAgIFBzaVJlZkxpc3RTdHViW1RIUk9XU19MSVNUOl0KKyAgICAgIFBzaU1ldGhvZFN0dWJbbGFzdEtleTpLXQorICAgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9MV0KKyAgICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3RTdHViCisgICAgICAgIFBzaVBhcmFtZXRlckxpc3RTdHViCisgICAgICAgIFBzaVJlZkxpc3RTdHViW1RIUk9XU19MSVNUOl0KKyAgICBQc2lDbGFzc1N0dWJbbmFtZT1Vbm1vZGlmaWFibGVTb3J0ZWRTZXQgZnFuPWphdmEudXRpbC5Db2xsZWN0aW9ucy5Vbm1vZGlmaWFibGVTb3J0ZWRTZXRdCisgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9NDEwNF0KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgICBQc2lUeXBlUGFyYW1ldGVyW0VdCisgICAgICAgICAgUHNpUmVmTGlzdFN0dWJbRVhURU5EU19CT1VORFNfTElTVDpdCisgICAgICBQc2lSZWZMaXN0U3R1YltFWFRFTkRTX0xJU1Q6amF2YS51dGlsLkNvbGxlY3Rpb25zLlVubW9kaWZpYWJsZVNldDxFPl0KKyAgICAgIFBzaVJlZkxpc3RTdHViW0lNUExFTUVOVFNfTElTVDpqYXZhLnV0aWwuU29ydGVkU2V0PEU+LCBqYXZhLmlvLlNlcmlhbGl6YWJsZV0KKyAgICAgIFBzaUZpZWxkU3R1YltzZXJpYWxWZXJzaW9uVUlEOmxvbmc9LTQ5MjkxNDk1OTE1OTk5MTExNjVMXQorICAgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9MjZdCisgICAgICBQc2lGaWVsZFN0dWJbc3M6amF2YS51dGlsLlNvcnRlZFNldDxFPl0KKyAgICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTJdCisgICAgICBQc2lNZXRob2RTdHViW2NvbnMgVW5tb2RpZmlhYmxlU29ydGVkU2V0OnZvaWRdCisgICAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz00MDk2XQorICAgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdFN0dWIKKyAgICAgICAgUHNpUGFyYW1ldGVyTGlzdFN0dWIKKyAgICAgICAgICBQc2lQYXJhbWV0ZXJTdHViW3AxOmphdmEudXRpbC5Tb3J0ZWRTZXQ8RT5dCisgICAgICAgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9MF0KKyAgICAgICAgUHNpUmVmTGlzdFN0dWJbVEhST1dTX0xJU1Q6XQorICAgICAgUHNpTWV0aG9kU3R1Yltjb21wYXJhdG9yOmphdmEudXRpbC5Db21wYXJhdG9yPD8gc3VwZXIgRT5dCisgICAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz0xXQorICAgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdFN0dWIKKyAgICAgICAgUHNpUGFyYW1ldGVyTGlzdFN0dWIKKyAgICAgICAgUHNpUmVmTGlzdFN0dWJbVEhST1dTX0xJU1Q6XQorICAgICAgUHNpTWV0aG9kU3R1YltzdWJTZXQ6amF2YS51dGlsLlNvcnRlZFNldDxFPl0KKyAgICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTFdCisgICAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgICBQc2lQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgICAgIFBzaVBhcmFtZXRlclN0dWJbcDE6RV0KKyAgICAgICAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz0wXQorICAgICAgICAgIFBzaVBhcmFtZXRlclN0dWJbcDI6RV0KKyAgICAgICAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz0wXQorICAgICAgICBQc2lSZWZMaXN0U3R1YltUSFJPV1NfTElTVDpdCisgICAgICBQc2lNZXRob2RTdHViW2hlYWRTZXQ6amF2YS51dGlsLlNvcnRlZFNldDxFPl0KKyAgICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTFdCisgICAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgICBQc2lQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgICAgIFBzaVBhcmFtZXRlclN0dWJbcDE6RV0KKyAgICAgICAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz0wXQorICAgICAgICBQc2lSZWZMaXN0U3R1YltUSFJPV1NfTElTVDpdCisgICAgICBQc2lNZXRob2RTdHViW3RhaWxTZXQ6amF2YS51dGlsLlNvcnRlZFNldDxFPl0KKyAgICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTFdCisgICAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgICBQc2lQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgICAgIFBzaVBhcmFtZXRlclN0dWJbcDE6RV0KKyAgICAgICAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz0wXQorICAgICAgICBQc2lSZWZMaXN0U3R1YltUSFJPV1NfTElTVDpdCisgICAgICBQc2lNZXRob2RTdHViW2ZpcnN0OkVdCisgICAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz0xXQorICAgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdFN0dWIKKyAgICAgICAgUHNpUGFyYW1ldGVyTGlzdFN0dWIKKyAgICAgICAgUHNpUmVmTGlzdFN0dWJbVEhST1dTX0xJU1Q6XQorICAgICAgUHNpTWV0aG9kU3R1YltsYXN0OkVdCisgICAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz0xXQorICAgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdFN0dWIKKyAgICAgICAgUHNpUGFyYW1ldGVyTGlzdFN0dWIKKyAgICAgICAgUHNpUmVmTGlzdFN0dWJbVEhST1dTX0xJU1Q6XQorICAgIFBzaUZpZWxkU3R1YltCSU5BUllTRUFSQ0hfVEhSRVNIT0xEOmludD01MDAwXQorICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTI2XQorICAgIFBzaUZpZWxkU3R1YltSRVZFUlNFX1RIUkVTSE9MRDppbnQ9MThdCisgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9MjZdCisgICAgUHNpRmllbGRTdHViW1NIVUZGTEVfVEhSRVNIT0xEOmludD01XQorICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTI2XQorICAgIFBzaUZpZWxkU3R1YltGSUxMX1RIUkVTSE9MRDppbnQ9MjVdCisgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9MjZdCisgICAgUHNpRmllbGRTdHViW1JPVEFURV9USFJFU0hPTEQ6aW50PTEwMF0KKyAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz0yNl0KKyAgICBQc2lGaWVsZFN0dWJbQ09QWV9USFJFU0hPTEQ6aW50PTEwXQorICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTI2XQorICAgIFBzaUZpZWxkU3R1YltSRVBMQUNFQUxMX1RIUkVTSE9MRDppbnQ9MTFdCisgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9MjZdCisgICAgUHNpRmllbGRTdHViW0lOREVYT0ZTVUJMSVNUX1RIUkVTSE9MRDppbnQ9MzVdCisgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9MjZdCisgICAgUHNpRmllbGRTdHViW3I6amF2YS51dGlsLlJhbmRvbV0KKyAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz0xMF0KKyAgICBQc2lGaWVsZFN0dWJbRU1QVFlfU0VUOmphdmEudXRpbC5TZXRdCisgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9MjVdCisgICAgUHNpRmllbGRTdHViW0VNUFRZX0xJU1Q6amF2YS51dGlsLkxpc3RdCisgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9MjVdCisgICAgUHNpRmllbGRTdHViW0VNUFRZX01BUDpqYXZhLnV0aWwuTWFwXQorICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTI1XQorICAgIFBzaUZpZWxkU3R1YltSRVZFUlNFX09SREVSOmphdmEudXRpbC5Db21wYXJhdG9yXQorICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTI2XQorICAgIFBzaU1ldGhvZFN0dWJbY29ucyBDb2xsZWN0aW9uczp2b2lkXQorICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTJdCisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdFN0dWIKKyAgICAgIFBzaVBhcmFtZXRlckxpc3RTdHViCisgICAgICBQc2lSZWZMaXN0U3R1YltUSFJPV1NfTElTVDpdCisgICAgUHNpTWV0aG9kU3R1Yltzb3J0OnZvaWRdCisgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9OV0KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgICBQc2lUeXBlUGFyYW1ldGVyW1RdCisgICAgICAgICAgUHNpUmVmTGlzdFN0dWJbRVhURU5EU19CT1VORFNfTElTVDpqYXZhLmxhbmcuQ29tcGFyYWJsZTw/IHN1cGVyIFQ+XQorICAgICAgUHNpUGFyYW1ldGVyTGlzdFN0dWIKKyAgICAgICAgUHNpUGFyYW1ldGVyU3R1YltwMTpqYXZhLnV0aWwuTGlzdDxUPl0KKyAgICAgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9MF0KKyAgICAgIFBzaVJlZkxpc3RTdHViW1RIUk9XU19MSVNUOl0KKyAgICBQc2lNZXRob2RTdHViW3NvcnQ6dm9pZF0KKyAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz05XQorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3RTdHViCisgICAgICAgIFBzaVR5cGVQYXJhbWV0ZXJbVF0KKyAgICAgICAgICBQc2lSZWZMaXN0U3R1YltFWFRFTkRTX0JPVU5EU19MSVNUOl0KKyAgICAgIFBzaVBhcmFtZXRlckxpc3RTdHViCisgICAgICAgIFBzaVBhcmFtZXRlclN0dWJbcDE6amF2YS51dGlsLkxpc3Q8VD5dCisgICAgICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTBdCisgICAgICAgIFBzaVBhcmFtZXRlclN0dWJbcDI6amF2YS51dGlsLkNvbXBhcmF0b3I8PyBzdXBlciBUPl0KKyAgICAgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9MF0KKyAgICAgIFBzaVJlZkxpc3RTdHViW1RIUk9XU19MSVNUOl0KKyAgICBQc2lNZXRob2RTdHViW2JpbmFyeVNlYXJjaDppbnRdCisgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9OV0KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgICBQc2lUeXBlUGFyYW1ldGVyW1RdCisgICAgICAgICAgUHNpUmVmTGlzdFN0dWJbRVhURU5EU19CT1VORFNfTElTVDpqYXZhLmxhbmcuQ29tcGFyYWJsZTw/IHN1cGVyIFQ+XQorICAgICAgUHNpUGFyYW1ldGVyTGlzdFN0dWIKKyAgICAgICAgUHNpUGFyYW1ldGVyU3R1YltwMTpqYXZhLnV0aWwuTGlzdDw/IGV4dGVuZHMgVD5dCisgICAgICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTBdCisgICAgICAgIFBzaVBhcmFtZXRlclN0dWJbcDI6VF0KKyAgICAgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9MF0KKyAgICAgIFBzaVJlZkxpc3RTdHViW1RIUk9XU19MSVNUOl0KKyAgICBQc2lNZXRob2RTdHViW2luZGV4ZWRCaW5hcnlTZWFyY2g6aW50XQorICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTEwXQorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3RTdHViCisgICAgICAgIFBzaVR5cGVQYXJhbWV0ZXJbVF0KKyAgICAgICAgICBQc2lSZWZMaXN0U3R1YltFWFRFTkRTX0JPVU5EU19MSVNUOmphdmEubGFuZy5Db21wYXJhYmxlPD8gc3VwZXIgVD5dCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgICBQc2lQYXJhbWV0ZXJTdHViW3AxOmphdmEudXRpbC5MaXN0PD8gZXh0ZW5kcyBUPl0KKyAgICAgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9MF0KKyAgICAgICAgUHNpUGFyYW1ldGVyU3R1YltwMjpUXQorICAgICAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz0wXQorICAgICAgUHNpUmVmTGlzdFN0dWJbVEhST1dTX0xJU1Q6XQorICAgIFBzaU1ldGhvZFN0dWJbaXRlcmF0b3JCaW5hcnlTZWFyY2g6aW50XQorICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTEwXQorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3RTdHViCisgICAgICAgIFBzaVR5cGVQYXJhbWV0ZXJbVF0KKyAgICAgICAgICBQc2lSZWZMaXN0U3R1YltFWFRFTkRTX0JPVU5EU19MSVNUOmphdmEubGFuZy5Db21wYXJhYmxlPD8gc3VwZXIgVD5dCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgICBQc2lQYXJhbWV0ZXJTdHViW3AxOmphdmEudXRpbC5MaXN0PD8gZXh0ZW5kcyBUPl0KKyAgICAgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9MF0KKyAgICAgICAgUHNpUGFyYW1ldGVyU3R1YltwMjpUXQorICAgICAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz0wXQorICAgICAgUHNpUmVmTGlzdFN0dWJbVEhST1dTX0xJU1Q6XQorICAgIFBzaU1ldGhvZFN0dWJbZ2V0OlRdCisgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9MTBdCisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdFN0dWIKKyAgICAgICAgUHNpVHlwZVBhcmFtZXRlcltUXQorICAgICAgICAgIFBzaVJlZkxpc3RTdHViW0VYVEVORFNfQk9VTkRTX0xJU1Q6XQorICAgICAgUHNpUGFyYW1ldGVyTGlzdFN0dWIKKyAgICAgICAgUHNpUGFyYW1ldGVyU3R1YltwMTpqYXZhLnV0aWwuTGlzdEl0ZXJhdG9yPD8gZXh0ZW5kcyBUPl0KKyAgICAgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9MF0KKyAgICAgICAgUHNpUGFyYW1ldGVyU3R1YltwMjppbnRdCisgICAgICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTBdCisgICAgICBQc2lSZWZMaXN0U3R1YltUSFJPV1NfTElTVDpdCisgICAgUHNpTWV0aG9kU3R1YltiaW5hcnlTZWFyY2g6aW50XQorICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTldCisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdFN0dWIKKyAgICAgICAgUHNpVHlwZVBhcmFtZXRlcltUXQorICAgICAgICAgIFBzaVJlZkxpc3RTdHViW0VYVEVORFNfQk9VTkRTX0xJU1Q6XQorICAgICAgUHNpUGFyYW1ldGVyTGlzdFN0dWIKKyAgICAgICAgUHNpUGFyYW1ldGVyU3R1YltwMTpqYXZhLnV0aWwuTGlzdDw/IGV4dGVuZHMgVD5dCisgICAgICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTBdCisgICAgICAgIFBzaVBhcmFtZXRlclN0dWJbcDI6VF0KKyAgICAgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9MF0KKyAgICAgICAgUHNpUGFyYW1ldGVyU3R1YltwMzpqYXZhLnV0aWwuQ29tcGFyYXRvcjw/IHN1cGVyIFQ+XQorICAgICAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz0wXQorICAgICAgUHNpUmVmTGlzdFN0dWJbVEhST1dTX0xJU1Q6XQorICAgIFBzaU1ldGhvZFN0dWJbaW5kZXhlZEJpbmFyeVNlYXJjaDppbnRdCisgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9MTBdCisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdFN0dWIKKyAgICAgICAgUHNpVHlwZVBhcmFtZXRlcltUXQorICAgICAgICAgIFBzaVJlZkxpc3RTdHViW0VYVEVORFNfQk9VTkRTX0xJU1Q6XQorICAgICAgUHNpUGFyYW1ldGVyTGlzdFN0dWIKKyAgICAgICAgUHNpUGFyYW1ldGVyU3R1YltwMTpqYXZhLnV0aWwuTGlzdDw/IGV4dGVuZHMgVD5dCisgICAgICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTBdCisgICAgICAgIFBzaVBhcmFtZXRlclN0dWJbcDI6VF0KKyAgICAgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9MF0KKyAgICAgICAgUHNpUGFyYW1ldGVyU3R1YltwMzpqYXZhLnV0aWwuQ29tcGFyYXRvcjw/IHN1cGVyIFQ+XQorICAgICAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz0wXQorICAgICAgUHNpUmVmTGlzdFN0dWJbVEhST1dTX0xJU1Q6XQorICAgIFBzaU1ldGhvZFN0dWJbaXRlcmF0b3JCaW5hcnlTZWFyY2g6aW50XQorICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTEwXQorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3RTdHViCisgICAgICAgIFBzaVR5cGVQYXJhbWV0ZXJbVF0KKyAgICAgICAgICBQc2lSZWZMaXN0U3R1YltFWFRFTkRTX0JPVU5EU19MSVNUOl0KKyAgICAgIFBzaVBhcmFtZXRlckxpc3RTdHViCisgICAgICAgIFBzaVBhcmFtZXRlclN0dWJbcDE6amF2YS51dGlsLkxpc3Q8PyBleHRlbmRzIFQ+XQorICAgICAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz0wXQorICAgICAgICBQc2lQYXJhbWV0ZXJTdHViW3AyOlRdCisgICAgICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTBdCisgICAgICAgIFBzaVBhcmFtZXRlclN0dWJbcDM6amF2YS51dGlsLkNvbXBhcmF0b3I8PyBzdXBlciBUPl0KKyAgICAgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9MF0KKyAgICAgIFBzaVJlZkxpc3RTdHViW1RIUk9XU19MSVNUOl0KKyAgICBQc2lNZXRob2RTdHViW3JldmVyc2U6dm9pZF0KKyAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz05XQorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3RTdHViCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgICBQc2lQYXJhbWV0ZXJTdHViW3AxOmphdmEudXRpbC5MaXN0PD8+XQorICAgICAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz0wXQorICAgICAgUHNpUmVmTGlzdFN0dWJbVEhST1dTX0xJU1Q6XQorICAgIFBzaU1ldGhvZFN0dWJbc2h1ZmZsZTp2b2lkXQorICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTldCisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdFN0dWIKKyAgICAgIFBzaVBhcmFtZXRlckxpc3RTdHViCisgICAgICAgIFBzaVBhcmFtZXRlclN0dWJbcDE6amF2YS51dGlsLkxpc3Q8Pz5dCisgICAgICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTBdCisgICAgICBQc2lSZWZMaXN0U3R1YltUSFJPV1NfTElTVDpdCisgICAgUHNpTWV0aG9kU3R1YltzaHVmZmxlOnZvaWRdCisgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9OV0KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgUHNpUGFyYW1ldGVyTGlzdFN0dWIKKyAgICAgICAgUHNpUGFyYW1ldGVyU3R1YltwMTpqYXZhLnV0aWwuTGlzdDw/Pl0KKyAgICAgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9MF0KKyAgICAgICAgUHNpUGFyYW1ldGVyU3R1YltwMjpqYXZhLnV0aWwuUmFuZG9tXQorICAgICAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz0wXQorICAgICAgUHNpUmVmTGlzdFN0dWJbVEhST1dTX0xJU1Q6XQorICAgIFBzaU1ldGhvZFN0dWJbc3dhcDp2b2lkXQorICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTldCisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdFN0dWIKKyAgICAgIFBzaVBhcmFtZXRlckxpc3RTdHViCisgICAgICAgIFBzaVBhcmFtZXRlclN0dWJbcDE6amF2YS51dGlsLkxpc3Q8Pz5dCisgICAgICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTBdCisgICAgICAgIFBzaVBhcmFtZXRlclN0dWJbcDI6aW50XQorICAgICAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz0wXQorICAgICAgICBQc2lQYXJhbWV0ZXJTdHViW3AzOmludF0KKyAgICAgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9MF0KKyAgICAgIFBzaVJlZkxpc3RTdHViW1RIUk9XU19MSVNUOl0KKyAgICBQc2lNZXRob2RTdHViW3N3YXA6dm9pZF0KKyAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz0xMF0KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgUHNpUGFyYW1ldGVyTGlzdFN0dWIKKyAgICAgICAgUHNpUGFyYW1ldGVyU3R1YltwMTpqYXZhLmxhbmcuT2JqZWN0W11dCisgICAgICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTBdCisgICAgICAgIFBzaVBhcmFtZXRlclN0dWJbcDI6aW50XQorICAgICAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz0wXQorICAgICAgICBQc2lQYXJhbWV0ZXJTdHViW3AzOmludF0KKyAgICAgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9MF0KKyAgICAgIFBzaVJlZkxpc3RTdHViW1RIUk9XU19MSVNUOl0KKyAgICBQc2lNZXRob2RTdHViW2ZpbGw6dm9pZF0KKyAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz05XQorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3RTdHViCisgICAgICAgIFBzaVR5cGVQYXJhbWV0ZXJbVF0KKyAgICAgICAgICBQc2lSZWZMaXN0U3R1YltFWFRFTkRTX0JPVU5EU19MSVNUOl0KKyAgICAgIFBzaVBhcmFtZXRlckxpc3RTdHViCisgICAgICAgIFBzaVBhcmFtZXRlclN0dWJbcDE6amF2YS51dGlsLkxpc3Q8PyBzdXBlciBUPl0KKyAgICAgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9MF0KKyAgICAgICAgUHNpUGFyYW1ldGVyU3R1YltwMjpUXQorICAgICAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz0wXQorICAgICAgUHNpUmVmTGlzdFN0dWJbVEhST1dTX0xJU1Q6XQorICAgIFBzaU1ldGhvZFN0dWJbY29weTp2b2lkXQorICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTldCisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdFN0dWIKKyAgICAgICAgUHNpVHlwZVBhcmFtZXRlcltUXQorICAgICAgICAgIFBzaVJlZkxpc3RTdHViW0VYVEVORFNfQk9VTkRTX0xJU1Q6XQorICAgICAgUHNpUGFyYW1ldGVyTGlzdFN0dWIKKyAgICAgICAgUHNpUGFyYW1ldGVyU3R1YltwMTpqYXZhLnV0aWwuTGlzdDw/IHN1cGVyIFQ+XQorICAgICAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz0wXQorICAgICAgICBQc2lQYXJhbWV0ZXJTdHViW3AyOmphdmEudXRpbC5MaXN0PD8gZXh0ZW5kcyBUPl0KKyAgICAgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9MF0KKyAgICAgIFBzaVJlZkxpc3RTdHViW1RIUk9XU19MSVNUOl0KKyAgICBQc2lNZXRob2RTdHViW21pbjpUXQorICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTldCisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdFN0dWIKKyAgICAgICAgUHNpVHlwZVBhcmFtZXRlcltUXQorICAgICAgICAgIFBzaVJlZkxpc3RTdHViW0VYVEVORFNfQk9VTkRTX0xJU1Q6amF2YS5sYW5nLkNvbXBhcmFibGU8PyBzdXBlciBUPl0KKyAgICAgIFBzaVBhcmFtZXRlckxpc3RTdHViCisgICAgICAgIFBzaVBhcmFtZXRlclN0dWJbcDE6amF2YS51dGlsLkNvbGxlY3Rpb248PyBleHRlbmRzIFQ+XQorICAgICAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz0wXQorICAgICAgUHNpUmVmTGlzdFN0dWJbVEhST1dTX0xJU1Q6XQorICAgIFBzaU1ldGhvZFN0dWJbbWluOlRdCisgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9OV0KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgICBQc2lUeXBlUGFyYW1ldGVyW1RdCisgICAgICAgICAgUHNpUmVmTGlzdFN0dWJbRVhURU5EU19CT1VORFNfTElTVDpdCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgICBQc2lQYXJhbWV0ZXJTdHViW3AxOmphdmEudXRpbC5Db2xsZWN0aW9uPD8gZXh0ZW5kcyBUPl0KKyAgICAgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9MF0KKyAgICAgICAgUHNpUGFyYW1ldGVyU3R1YltwMjpqYXZhLnV0aWwuQ29tcGFyYXRvcjw/IHN1cGVyIFQ+XQorICAgICAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz0wXQorICAgICAgUHNpUmVmTGlzdFN0dWJbVEhST1dTX0xJU1Q6XQorICAgIFBzaU1ldGhvZFN0dWJbbWF4OlRdCisgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9OV0KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgICBQc2lUeXBlUGFyYW1ldGVyW1RdCisgICAgICAgICAgUHNpUmVmTGlzdFN0dWJbRVhURU5EU19CT1VORFNfTElTVDpqYXZhLmxhbmcuQ29tcGFyYWJsZTw/IHN1cGVyIFQ+XQorICAgICAgUHNpUGFyYW1ldGVyTGlzdFN0dWIKKyAgICAgICAgUHNpUGFyYW1ldGVyU3R1YltwMTpqYXZhLnV0aWwuQ29sbGVjdGlvbjw/IGV4dGVuZHMgVD5dCisgICAgICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTBdCisgICAgICBQc2lSZWZMaXN0U3R1YltUSFJPV1NfTElTVDpdCisgICAgUHNpTWV0aG9kU3R1YlttYXg6VF0KKyAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz05XQorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3RTdHViCisgICAgICAgIFBzaVR5cGVQYXJhbWV0ZXJbVF0KKyAgICAgICAgICBQc2lSZWZMaXN0U3R1YltFWFRFTkRTX0JPVU5EU19MSVNUOl0KKyAgICAgIFBzaVBhcmFtZXRlckxpc3RTdHViCisgICAgICAgIFBzaVBhcmFtZXRlclN0dWJbcDE6amF2YS51dGlsLkNvbGxlY3Rpb248PyBleHRlbmRzIFQ+XQorICAgICAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz0wXQorICAgICAgICBQc2lQYXJhbWV0ZXJTdHViW3AyOmphdmEudXRpbC5Db21wYXJhdG9yPD8gc3VwZXIgVD5dCisgICAgICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTBdCisgICAgICBQc2lSZWZMaXN0U3R1YltUSFJPV1NfTElTVDpdCisgICAgUHNpTWV0aG9kU3R1Yltyb3RhdGU6dm9pZF0KKyAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz05XQorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3RTdHViCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgICBQc2lQYXJhbWV0ZXJTdHViW3AxOmphdmEudXRpbC5MaXN0PD8+XQorICAgICAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz0wXQorICAgICAgICBQc2lQYXJhbWV0ZXJTdHViW3AyOmludF0KKyAgICAgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9MF0KKyAgICAgIFBzaVJlZkxpc3RTdHViW1RIUk9XU19MSVNUOl0KKyAgICBQc2lNZXRob2RTdHViW3JvdGF0ZTE6dm9pZF0KKyAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz0xMF0KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgICBQc2lUeXBlUGFyYW1ldGVyW1RdCisgICAgICAgICAgUHNpUmVmTGlzdFN0dWJbRVhURU5EU19CT1VORFNfTElTVDpdCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgICBQc2lQYXJhbWV0ZXJTdHViW3AxOmphdmEudXRpbC5MaXN0PFQ+XQorICAgICAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz0wXQorICAgICAgICBQc2lQYXJhbWV0ZXJTdHViW3AyOmludF0KKyAgICAgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9MF0KKyAgICAgIFBzaVJlZkxpc3RTdHViW1RIUk9XU19MSVNUOl0KKyAgICBQc2lNZXRob2RTdHViW3JvdGF0ZTI6dm9pZF0KKyAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz0xMF0KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgUHNpUGFyYW1ldGVyTGlzdFN0dWIKKyAgICAgICAgUHNpUGFyYW1ldGVyU3R1YltwMTpqYXZhLnV0aWwuTGlzdDw/Pl0KKyAgICAgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9MF0KKyAgICAgICAgUHNpUGFyYW1ldGVyU3R1YltwMjppbnRdCisgICAgICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTBdCisgICAgICBQc2lSZWZMaXN0U3R1YltUSFJPV1NfTElTVDpdCisgICAgUHNpTWV0aG9kU3R1YltyZXBsYWNlQWxsOmJvb2xlYW5dCisgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9OV0KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgICBQc2lUeXBlUGFyYW1ldGVyW1RdCisgICAgICAgICAgUHNpUmVmTGlzdFN0dWJbRVhURU5EU19CT1VORFNfTElTVDpdCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgICBQc2lQYXJhbWV0ZXJTdHViW3AxOmphdmEudXRpbC5MaXN0PFQ+XQorICAgICAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz0wXQorICAgICAgICBQc2lQYXJhbWV0ZXJTdHViW3AyOlRdCisgICAgICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTBdCisgICAgICAgIFBzaVBhcmFtZXRlclN0dWJbcDM6VF0KKyAgICAgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9MF0KKyAgICAgIFBzaVJlZkxpc3RTdHViW1RIUk9XU19MSVNUOl0KKyAgICBQc2lNZXRob2RTdHViW2luZGV4T2ZTdWJMaXN0OmludF0KKyAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz05XQorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3RTdHViCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgICBQc2lQYXJhbWV0ZXJTdHViW3AxOmphdmEudXRpbC5MaXN0PD8+XQorICAgICAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz0wXQorICAgICAgICBQc2lQYXJhbWV0ZXJTdHViW3AyOmphdmEudXRpbC5MaXN0PD8+XQorICAgICAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz0wXQorICAgICAgUHNpUmVmTGlzdFN0dWJbVEhST1dTX0xJU1Q6XQorICAgIFBzaU1ldGhvZFN0dWJbbGFzdEluZGV4T2ZTdWJMaXN0OmludF0KKyAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz05XQorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3RTdHViCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgICBQc2lQYXJhbWV0ZXJTdHViW3AxOmphdmEudXRpbC5MaXN0PD8+XQorICAgICAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz0wXQorICAgICAgICBQc2lQYXJhbWV0ZXJTdHViW3AyOmphdmEudXRpbC5MaXN0PD8+XQorICAgICAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz0wXQorICAgICAgUHNpUmVmTGlzdFN0dWJbVEhST1dTX0xJU1Q6XQorICAgIFBzaU1ldGhvZFN0dWJbdW5tb2RpZmlhYmxlQ29sbGVjdGlvbjpqYXZhLnV0aWwuQ29sbGVjdGlvbjxUPl0KKyAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz05XQorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3RTdHViCisgICAgICAgIFBzaVR5cGVQYXJhbWV0ZXJbVF0KKyAgICAgICAgICBQc2lSZWZMaXN0U3R1YltFWFRFTkRTX0JPVU5EU19MSVNUOl0KKyAgICAgIFBzaVBhcmFtZXRlckxpc3RTdHViCisgICAgICAgIFBzaVBhcmFtZXRlclN0dWJbcDE6amF2YS51dGlsLkNvbGxlY3Rpb248PyBleHRlbmRzIFQ+XQorICAgICAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz0wXQorICAgICAgUHNpUmVmTGlzdFN0dWJbVEhST1dTX0xJU1Q6XQorICAgIFBzaU1ldGhvZFN0dWJbdW5tb2RpZmlhYmxlU2V0OmphdmEudXRpbC5TZXQ8VD5dCisgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9OV0KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgICBQc2lUeXBlUGFyYW1ldGVyW1RdCisgICAgICAgICAgUHNpUmVmTGlzdFN0dWJbRVhURU5EU19CT1VORFNfTElTVDpdCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgICBQc2lQYXJhbWV0ZXJTdHViW3AxOmphdmEudXRpbC5TZXQ8PyBleHRlbmRzIFQ+XQorICAgICAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz0wXQorICAgICAgUHNpUmVmTGlzdFN0dWJbVEhST1dTX0xJU1Q6XQorICAgIFBzaU1ldGhvZFN0dWJbdW5tb2RpZmlhYmxlU29ydGVkU2V0OmphdmEudXRpbC5Tb3J0ZWRTZXQ8VD5dCisgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9OV0KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgICBQc2lUeXBlUGFyYW1ldGVyW1RdCisgICAgICAgICAgUHNpUmVmTGlzdFN0dWJbRVhURU5EU19CT1VORFNfTElTVDpdCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgICBQc2lQYXJhbWV0ZXJTdHViW3AxOmphdmEudXRpbC5Tb3J0ZWRTZXQ8VD5dCisgICAgICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTBdCisgICAgICBQc2lSZWZMaXN0U3R1YltUSFJPV1NfTElTVDpdCisgICAgUHNpTWV0aG9kU3R1Ylt1bm1vZGlmaWFibGVMaXN0OmphdmEudXRpbC5MaXN0PFQ+XQorICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTldCisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdFN0dWIKKyAgICAgICAgUHNpVHlwZVBhcmFtZXRlcltUXQorICAgICAgICAgIFBzaVJlZkxpc3RTdHViW0VYVEVORFNfQk9VTkRTX0xJU1Q6XQorICAgICAgUHNpUGFyYW1ldGVyTGlzdFN0dWIKKyAgICAgICAgUHNpUGFyYW1ldGVyU3R1YltwMTpqYXZhLnV0aWwuTGlzdDw/IGV4dGVuZHMgVD5dCisgICAgICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTBdCisgICAgICBQc2lSZWZMaXN0U3R1YltUSFJPV1NfTElTVDpdCisgICAgUHNpTWV0aG9kU3R1Ylt1bm1vZGlmaWFibGVNYXA6amF2YS51dGlsLk1hcDxLLFY+XQorICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTldCisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdFN0dWIKKyAgICAgICAgUHNpVHlwZVBhcmFtZXRlcltLXQorICAgICAgICAgIFBzaVJlZkxpc3RTdHViW0VYVEVORFNfQk9VTkRTX0xJU1Q6XQorICAgICAgICBQc2lUeXBlUGFyYW1ldGVyW1ZdCisgICAgICAgICAgUHNpUmVmTGlzdFN0dWJbRVhURU5EU19CT1VORFNfTElTVDpdCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgICBQc2lQYXJhbWV0ZXJTdHViW3AxOmphdmEudXRpbC5NYXA8PyBleHRlbmRzIEssPyBleHRlbmRzIFY+XQorICAgICAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz0wXQorICAgICAgUHNpUmVmTGlzdFN0dWJbVEhST1dTX0xJU1Q6XQorICAgIFBzaU1ldGhvZFN0dWJbdW5tb2RpZmlhYmxlU29ydGVkTWFwOmphdmEudXRpbC5Tb3J0ZWRNYXA8SyxWPl0KKyAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz05XQorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3RTdHViCisgICAgICAgIFBzaVR5cGVQYXJhbWV0ZXJbS10KKyAgICAgICAgICBQc2lSZWZMaXN0U3R1YltFWFRFTkRTX0JPVU5EU19MSVNUOl0KKyAgICAgICAgUHNpVHlwZVBhcmFtZXRlcltWXQorICAgICAgICAgIFBzaVJlZkxpc3RTdHViW0VYVEVORFNfQk9VTkRTX0xJU1Q6XQorICAgICAgUHNpUGFyYW1ldGVyTGlzdFN0dWIKKyAgICAgICAgUHNpUGFyYW1ldGVyU3R1YltwMTpqYXZhLnV0aWwuU29ydGVkTWFwPEssPyBleHRlbmRzIFY+XQorICAgICAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz0wXQorICAgICAgUHNpUmVmTGlzdFN0dWJbVEhST1dTX0xJU1Q6XQorICAgIFBzaU1ldGhvZFN0dWJbc3luY2hyb25pemVkQ29sbGVjdGlvbjpqYXZhLnV0aWwuQ29sbGVjdGlvbjxUPl0KKyAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz05XQorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3RTdHViCisgICAgICAgIFBzaVR5cGVQYXJhbWV0ZXJbVF0KKyAgICAgICAgICBQc2lSZWZMaXN0U3R1YltFWFRFTkRTX0JPVU5EU19MSVNUOl0KKyAgICAgIFBzaVBhcmFtZXRlckxpc3RTdHViCisgICAgICAgIFBzaVBhcmFtZXRlclN0dWJbcDE6amF2YS51dGlsLkNvbGxlY3Rpb248VD5dCisgICAgICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTBdCisgICAgICBQc2lSZWZMaXN0U3R1YltUSFJPV1NfTElTVDpdCisgICAgUHNpTWV0aG9kU3R1YltzeW5jaHJvbml6ZWRDb2xsZWN0aW9uOmphdmEudXRpbC5Db2xsZWN0aW9uPFQ+XQorICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTQxMDRdCisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdFN0dWIKKyAgICAgICAgUHNpVHlwZVBhcmFtZXRlcltUXQorICAgICAgICAgIFBzaVJlZkxpc3RTdHViW0VYVEVORFNfQk9VTkRTX0xJU1Q6XQorICAgICAgUHNpUGFyYW1ldGVyTGlzdFN0dWIKKyAgICAgICAgUHNpUGFyYW1ldGVyU3R1YltwMTpqYXZhLnV0aWwuQ29sbGVjdGlvbjxUPl0KKyAgICAgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9MF0KKyAgICAgICAgUHNpUGFyYW1ldGVyU3R1YltwMjpqYXZhLmxhbmcuT2JqZWN0XQorICAgICAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz0wXQorICAgICAgUHNpUmVmTGlzdFN0dWJbVEhST1dTX0xJU1Q6XQorICAgIFBzaU1ldGhvZFN0dWJbc3luY2hyb25pemVkU2V0OmphdmEudXRpbC5TZXQ8VD5dCisgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9OV0KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgICBQc2lUeXBlUGFyYW1ldGVyW1RdCisgICAgICAgICAgUHNpUmVmTGlzdFN0dWJbRVhURU5EU19CT1VORFNfTElTVDpdCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgICBQc2lQYXJhbWV0ZXJTdHViW3AxOmphdmEudXRpbC5TZXQ8VD5dCisgICAgICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTBdCisgICAgICBQc2lSZWZMaXN0U3R1YltUSFJPV1NfTElTVDpdCisgICAgUHNpTWV0aG9kU3R1YltzeW5jaHJvbml6ZWRTZXQ6amF2YS51dGlsLlNldDxUPl0KKyAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz00MTA0XQorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3RTdHViCisgICAgICAgIFBzaVR5cGVQYXJhbWV0ZXJbVF0KKyAgICAgICAgICBQc2lSZWZMaXN0U3R1YltFWFRFTkRTX0JPVU5EU19MSVNUOl0KKyAgICAgIFBzaVBhcmFtZXRlckxpc3RTdHViCisgICAgICAgIFBzaVBhcmFtZXRlclN0dWJbcDE6amF2YS51dGlsLlNldDxUPl0KKyAgICAgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9MF0KKyAgICAgICAgUHNpUGFyYW1ldGVyU3R1YltwMjpqYXZhLmxhbmcuT2JqZWN0XQorICAgICAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz0wXQorICAgICAgUHNpUmVmTGlzdFN0dWJbVEhST1dTX0xJU1Q6XQorICAgIFBzaU1ldGhvZFN0dWJbc3luY2hyb25pemVkU29ydGVkU2V0OmphdmEudXRpbC5Tb3J0ZWRTZXQ8VD5dCisgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9OV0KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgICBQc2lUeXBlUGFyYW1ldGVyW1RdCisgICAgICAgICAgUHNpUmVmTGlzdFN0dWJbRVhURU5EU19CT1VORFNfTElTVDpdCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgICBQc2lQYXJhbWV0ZXJTdHViW3AxOmphdmEudXRpbC5Tb3J0ZWRTZXQ8VD5dCisgICAgICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTBdCisgICAgICBQc2lSZWZMaXN0U3R1YltUSFJPV1NfTElTVDpdCisgICAgUHNpTWV0aG9kU3R1YltzeW5jaHJvbml6ZWRMaXN0OmphdmEudXRpbC5MaXN0PFQ+XQorICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTldCisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdFN0dWIKKyAgICAgICAgUHNpVHlwZVBhcmFtZXRlcltUXQorICAgICAgICAgIFBzaVJlZkxpc3RTdHViW0VYVEVORFNfQk9VTkRTX0xJU1Q6XQorICAgICAgUHNpUGFyYW1ldGVyTGlzdFN0dWIKKyAgICAgICAgUHNpUGFyYW1ldGVyU3R1YltwMTpqYXZhLnV0aWwuTGlzdDxUPl0KKyAgICAgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9MF0KKyAgICAgIFBzaVJlZkxpc3RTdHViW1RIUk9XU19MSVNUOl0KKyAgICBQc2lNZXRob2RTdHViW3N5bmNocm9uaXplZExpc3Q6amF2YS51dGlsLkxpc3Q8VD5dCisgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9NDEwNF0KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgICBQc2lUeXBlUGFyYW1ldGVyW1RdCisgICAgICAgICAgUHNpUmVmTGlzdFN0dWJbRVhURU5EU19CT1VORFNfTElTVDpdCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgICBQc2lQYXJhbWV0ZXJTdHViW3AxOmphdmEudXRpbC5MaXN0PFQ+XQorICAgICAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz0wXQorICAgICAgICBQc2lQYXJhbWV0ZXJTdHViW3AyOmphdmEubGFuZy5PYmplY3RdCisgICAgICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTBdCisgICAgICBQc2lSZWZMaXN0U3R1YltUSFJPV1NfTElTVDpdCisgICAgUHNpTWV0aG9kU3R1YltzeW5jaHJvbml6ZWRNYXA6amF2YS51dGlsLk1hcDxLLFY+XQorICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTldCisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdFN0dWIKKyAgICAgICAgUHNpVHlwZVBhcmFtZXRlcltLXQorICAgICAgICAgIFBzaVJlZkxpc3RTdHViW0VYVEVORFNfQk9VTkRTX0xJU1Q6XQorICAgICAgICBQc2lUeXBlUGFyYW1ldGVyW1ZdCisgICAgICAgICAgUHNpUmVmTGlzdFN0dWJbRVhURU5EU19CT1VORFNfTElTVDpdCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgICBQc2lQYXJhbWV0ZXJTdHViW3AxOmphdmEudXRpbC5NYXA8SyxWPl0KKyAgICAgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9MF0KKyAgICAgIFBzaVJlZkxpc3RTdHViW1RIUk9XU19MSVNUOl0KKyAgICBQc2lNZXRob2RTdHViW3N5bmNocm9uaXplZFNvcnRlZE1hcDpqYXZhLnV0aWwuU29ydGVkTWFwPEssVj5dCisgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9OV0KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgICBQc2lUeXBlUGFyYW1ldGVyW0tdCisgICAgICAgICAgUHNpUmVmTGlzdFN0dWJbRVhURU5EU19CT1VORFNfTElTVDpdCisgICAgICAgIFBzaVR5cGVQYXJhbWV0ZXJbVl0KKyAgICAgICAgICBQc2lSZWZMaXN0U3R1YltFWFRFTkRTX0JPVU5EU19MSVNUOl0KKyAgICAgIFBzaVBhcmFtZXRlckxpc3RTdHViCisgICAgICAgIFBzaVBhcmFtZXRlclN0dWJbcDE6amF2YS51dGlsLlNvcnRlZE1hcDxLLFY+XQorICAgICAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz0wXQorICAgICAgUHNpUmVmTGlzdFN0dWJbVEhST1dTX0xJU1Q6XQorICAgIFBzaU1ldGhvZFN0dWJbY2hlY2tlZENvbGxlY3Rpb246amF2YS51dGlsLkNvbGxlY3Rpb248RT5dCisgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9OV0KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgICBQc2lUeXBlUGFyYW1ldGVyW0VdCisgICAgICAgICAgUHNpUmVmTGlzdFN0dWJbRVhURU5EU19CT1VORFNfTElTVDpdCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgICBQc2lQYXJhbWV0ZXJTdHViW3AxOmphdmEudXRpbC5Db2xsZWN0aW9uPEU+XQorICAgICAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz0wXQorICAgICAgICBQc2lQYXJhbWV0ZXJTdHViW3AyOmphdmEubGFuZy5DbGFzczxFPl0KKyAgICAgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9MF0KKyAgICAgIFBzaVJlZkxpc3RTdHViW1RIUk9XU19MSVNUOl0KKyAgICBQc2lNZXRob2RTdHViW2NoZWNrZWRTZXQ6amF2YS51dGlsLlNldDxFPl0KKyAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz05XQorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3RTdHViCisgICAgICAgIFBzaVR5cGVQYXJhbWV0ZXJbRV0KKyAgICAgICAgICBQc2lSZWZMaXN0U3R1YltFWFRFTkRTX0JPVU5EU19MSVNUOl0KKyAgICAgIFBzaVBhcmFtZXRlckxpc3RTdHViCisgICAgICAgIFBzaVBhcmFtZXRlclN0dWJbcDE6amF2YS51dGlsLlNldDxFPl0KKyAgICAgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9MF0KKyAgICAgICAgUHNpUGFyYW1ldGVyU3R1YltwMjpqYXZhLmxhbmcuQ2xhc3M8RT5dCisgICAgICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTBdCisgICAgICBQc2lSZWZMaXN0U3R1YltUSFJPV1NfTElTVDpdCisgICAgUHNpTWV0aG9kU3R1YltjaGVja2VkU29ydGVkU2V0OmphdmEudXRpbC5Tb3J0ZWRTZXQ8RT5dCisgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9OV0KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgICBQc2lUeXBlUGFyYW1ldGVyW0VdCisgICAgICAgICAgUHNpUmVmTGlzdFN0dWJbRVhURU5EU19CT1VORFNfTElTVDpdCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgICBQc2lQYXJhbWV0ZXJTdHViW3AxOmphdmEudXRpbC5Tb3J0ZWRTZXQ8RT5dCisgICAgICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTBdCisgICAgICAgIFBzaVBhcmFtZXRlclN0dWJbcDI6amF2YS5sYW5nLkNsYXNzPEU+XQorICAgICAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz0wXQorICAgICAgUHNpUmVmTGlzdFN0dWJbVEhST1dTX0xJU1Q6XQorICAgIFBzaU1ldGhvZFN0dWJbY2hlY2tlZExpc3Q6amF2YS51dGlsLkxpc3Q8RT5dCisgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9OV0KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgICBQc2lUeXBlUGFyYW1ldGVyW0VdCisgICAgICAgICAgUHNpUmVmTGlzdFN0dWJbRVhURU5EU19CT1VORFNfTElTVDpdCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgICBQc2lQYXJhbWV0ZXJTdHViW3AxOmphdmEudXRpbC5MaXN0PEU+XQorICAgICAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz0wXQorICAgICAgICBQc2lQYXJhbWV0ZXJTdHViW3AyOmphdmEubGFuZy5DbGFzczxFPl0KKyAgICAgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9MF0KKyAgICAgIFBzaVJlZkxpc3RTdHViW1RIUk9XU19MSVNUOl0KKyAgICBQc2lNZXRob2RTdHViW2NoZWNrZWRNYXA6amF2YS51dGlsLk1hcDxLLFY+XQorICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTldCisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdFN0dWIKKyAgICAgICAgUHNpVHlwZVBhcmFtZXRlcltLXQorICAgICAgICAgIFBzaVJlZkxpc3RTdHViW0VYVEVORFNfQk9VTkRTX0xJU1Q6XQorICAgICAgICBQc2lUeXBlUGFyYW1ldGVyW1ZdCisgICAgICAgICAgUHNpUmVmTGlzdFN0dWJbRVhURU5EU19CT1VORFNfTElTVDpdCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgICBQc2lQYXJhbWV0ZXJTdHViW3AxOmphdmEudXRpbC5NYXA8SyxWPl0KKyAgICAgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9MF0KKyAgICAgICAgUHNpUGFyYW1ldGVyU3R1YltwMjpqYXZhLmxhbmcuQ2xhc3M8Sz5dCisgICAgICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTBdCisgICAgICAgIFBzaVBhcmFtZXRlclN0dWJbcDM6amF2YS5sYW5nLkNsYXNzPFY+XQorICAgICAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz0wXQorICAgICAgUHNpUmVmTGlzdFN0dWJbVEhST1dTX0xJU1Q6XQorICAgIFBzaU1ldGhvZFN0dWJbY2hlY2tlZFNvcnRlZE1hcDpqYXZhLnV0aWwuU29ydGVkTWFwPEssVj5dCisgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9OV0KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgICBQc2lUeXBlUGFyYW1ldGVyW0tdCisgICAgICAgICAgUHNpUmVmTGlzdFN0dWJbRVhURU5EU19CT1VORFNfTElTVDpdCisgICAgICAgIFBzaVR5cGVQYXJhbWV0ZXJbVl0KKyAgICAgICAgICBQc2lSZWZMaXN0U3R1YltFWFRFTkRTX0JPVU5EU19MSVNUOl0KKyAgICAgIFBzaVBhcmFtZXRlckxpc3RTdHViCisgICAgICAgIFBzaVBhcmFtZXRlclN0dWJbcDE6amF2YS51dGlsLlNvcnRlZE1hcDxLLFY+XQorICAgICAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz0wXQorICAgICAgICBQc2lQYXJhbWV0ZXJTdHViW3AyOmphdmEubGFuZy5DbGFzczxLPl0KKyAgICAgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9MF0KKyAgICAgICAgUHNpUGFyYW1ldGVyU3R1YltwMzpqYXZhLmxhbmcuQ2xhc3M8Vj5dCisgICAgICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTBdCisgICAgICBQc2lSZWZMaXN0U3R1YltUSFJPV1NfTElTVDpdCisgICAgUHNpTWV0aG9kU3R1YltlbXB0eVNldDpqYXZhLnV0aWwuU2V0PFQ+XQorICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTI1XQorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3RTdHViCisgICAgICAgIFBzaVR5cGVQYXJhbWV0ZXJbVF0KKyAgICAgICAgICBQc2lSZWZMaXN0U3R1YltFWFRFTkRTX0JPVU5EU19MSVNUOl0KKyAgICAgIFBzaVBhcmFtZXRlckxpc3RTdHViCisgICAgICBQc2lSZWZMaXN0U3R1YltUSFJPV1NfTElTVDpdCisgICAgUHNpTWV0aG9kU3R1YltlbXB0eUxpc3Q6amF2YS51dGlsLkxpc3Q8VD5dCisgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9MjVdCisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdFN0dWIKKyAgICAgICAgUHNpVHlwZVBhcmFtZXRlcltUXQorICAgICAgICAgIFBzaVJlZkxpc3RTdHViW0VYVEVORFNfQk9VTkRTX0xJU1Q6XQorICAgICAgUHNpUGFyYW1ldGVyTGlzdFN0dWIKKyAgICAgIFBzaVJlZkxpc3RTdHViW1RIUk9XU19MSVNUOl0KKyAgICBQc2lNZXRob2RTdHViW2VtcHR5TWFwOmphdmEudXRpbC5NYXA8SyxWPl0KKyAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz0yNV0KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgICBQc2lUeXBlUGFyYW1ldGVyW0tdCisgICAgICAgICAgUHNpUmVmTGlzdFN0dWJbRVhURU5EU19CT1VORFNfTElTVDpdCisgICAgICAgIFBzaVR5cGVQYXJhbWV0ZXJbVl0KKyAgICAgICAgICBQc2lSZWZMaXN0U3R1YltFWFRFTkRTX0JPVU5EU19MSVNUOl0KKyAgICAgIFBzaVBhcmFtZXRlckxpc3RTdHViCisgICAgICBQc2lSZWZMaXN0U3R1YltUSFJPV1NfTElTVDpdCisgICAgUHNpTWV0aG9kU3R1YltzaW5nbGV0b246amF2YS51dGlsLlNldDxUPl0KKyAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz05XQorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3RTdHViCisgICAgICAgIFBzaVR5cGVQYXJhbWV0ZXJbVF0KKyAgICAgICAgICBQc2lSZWZMaXN0U3R1YltFWFRFTkRTX0JPVU5EU19MSVNUOl0KKyAgICAgIFBzaVBhcmFtZXRlckxpc3RTdHViCisgICAgICAgIFBzaVBhcmFtZXRlclN0dWJbcDE6VF0KKyAgICAgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9MF0KKyAgICAgIFBzaVJlZkxpc3RTdHViW1RIUk9XU19MSVNUOl0KKyAgICBQc2lNZXRob2RTdHViW3NpbmdsZXRvbkxpc3Q6amF2YS51dGlsLkxpc3Q8VD5dCisgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9OV0KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgICBQc2lUeXBlUGFyYW1ldGVyW1RdCisgICAgICAgICAgUHNpUmVmTGlzdFN0dWJbRVhURU5EU19CT1VORFNfTElTVDpdCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgICBQc2lQYXJhbWV0ZXJTdHViW3AxOlRdCisgICAgICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTBdCisgICAgICBQc2lSZWZMaXN0U3R1YltUSFJPV1NfTElTVDpdCisgICAgUHNpTWV0aG9kU3R1YltzaW5nbGV0b25NYXA6amF2YS51dGlsLk1hcDxLLFY+XQorICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTldCisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdFN0dWIKKyAgICAgICAgUHNpVHlwZVBhcmFtZXRlcltLXQorICAgICAgICAgIFBzaVJlZkxpc3RTdHViW0VYVEVORFNfQk9VTkRTX0xJU1Q6XQorICAgICAgICBQc2lUeXBlUGFyYW1ldGVyW1ZdCisgICAgICAgICAgUHNpUmVmTGlzdFN0dWJbRVhURU5EU19CT1VORFNfTElTVDpdCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgICBQc2lQYXJhbWV0ZXJTdHViW3AxOktdCisgICAgICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTBdCisgICAgICAgIFBzaVBhcmFtZXRlclN0dWJbcDI6Vl0KKyAgICAgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9MF0KKyAgICAgIFBzaVJlZkxpc3RTdHViW1RIUk9XU19MSVNUOl0KKyAgICBQc2lNZXRob2RTdHViW25Db3BpZXM6amF2YS51dGlsLkxpc3Q8VD5dCisgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9OV0KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgICBQc2lUeXBlUGFyYW1ldGVyW1RdCisgICAgICAgICAgUHNpUmVmTGlzdFN0dWJbRVhURU5EU19CT1VORFNfTElTVDpdCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgICBQc2lQYXJhbWV0ZXJTdHViW3AxOmludF0KKyAgICAgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9MF0KKyAgICAgICAgUHNpUGFyYW1ldGVyU3R1YltwMjpUXQorICAgICAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz0wXQorICAgICAgUHNpUmVmTGlzdFN0dWJbVEhST1dTX0xJU1Q6XQorICAgIFBzaU1ldGhvZFN0dWJbcmV2ZXJzZU9yZGVyOmphdmEudXRpbC5Db21wYXJhdG9yPFQ+XQorICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTldCisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdFN0dWIKKyAgICAgICAgUHNpVHlwZVBhcmFtZXRlcltUXQorICAgICAgICAgIFBzaVJlZkxpc3RTdHViW0VYVEVORFNfQk9VTkRTX0xJU1Q6XQorICAgICAgUHNpUGFyYW1ldGVyTGlzdFN0dWIKKyAgICAgIFBzaVJlZkxpc3RTdHViW1RIUk9XU19MSVNUOl0KKyAgICBQc2lNZXRob2RTdHViW3JldmVyc2VPcmRlcjpqYXZhLnV0aWwuQ29tcGFyYXRvcjxUPl0KKyAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz05XQorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3RTdHViCisgICAgICAgIFBzaVR5cGVQYXJhbWV0ZXJbVF0KKyAgICAgICAgICBQc2lSZWZMaXN0U3R1YltFWFRFTkRTX0JPVU5EU19MSVNUOl0KKyAgICAgIFBzaVBhcmFtZXRlckxpc3RTdHViCisgICAgICAgIFBzaVBhcmFtZXRlclN0dWJbcDE6amF2YS51dGlsLkNvbXBhcmF0b3I8VD5dCisgICAgICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTBdCisgICAgICBQc2lSZWZMaXN0U3R1YltUSFJPV1NfTElTVDpdCisgICAgUHNpTWV0aG9kU3R1YltlbnVtZXJhdGlvbjpqYXZhLnV0aWwuRW51bWVyYXRpb248VD5dCisgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9OV0KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgICBQc2lUeXBlUGFyYW1ldGVyW1RdCisgICAgICAgICAgUHNpUmVmTGlzdFN0dWJbRVhURU5EU19CT1VORFNfTElTVDpdCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgICBQc2lQYXJhbWV0ZXJTdHViW3AxOmphdmEudXRpbC5Db2xsZWN0aW9uPFQ+XQorICAgICAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz0wXQorICAgICAgUHNpUmVmTGlzdFN0dWJbVEhST1dTX0xJU1Q6XQorICAgIFBzaU1ldGhvZFN0dWJbbGlzdDpqYXZhLnV0aWwuQXJyYXlMaXN0PFQ+XQorICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTldCisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdFN0dWIKKyAgICAgICAgUHNpVHlwZVBhcmFtZXRlcltUXQorICAgICAgICAgIFBzaVJlZkxpc3RTdHViW0VYVEVORFNfQk9VTkRTX0xJU1Q6XQorICAgICAgUHNpUGFyYW1ldGVyTGlzdFN0dWIKKyAgICAgICAgUHNpUGFyYW1ldGVyU3R1YltwMTpqYXZhLnV0aWwuRW51bWVyYXRpb248VD5dCisgICAgICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTBdCisgICAgICBQc2lSZWZMaXN0U3R1YltUSFJPV1NfTElTVDpdCisgICAgUHNpTWV0aG9kU3R1YltlcTpib29sZWFuXQorICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTEwXQorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3RTdHViCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgICBQc2lQYXJhbWV0ZXJTdHViW3AxOmphdmEubGFuZy5PYmplY3RdCisgICAgICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTBdCisgICAgICAgIFBzaVBhcmFtZXRlclN0dWJbcDI6amF2YS5sYW5nLk9iamVjdF0KKyAgICAgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9MF0KKyAgICAgIFBzaVJlZkxpc3RTdHViW1RIUk9XU19MSVNUOl0KKyAgICBQc2lNZXRob2RTdHViW2ZyZXF1ZW5jeTppbnRdCisgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9OV0KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgUHNpUGFyYW1ldGVyTGlzdFN0dWIKKyAgICAgICAgUHNpUGFyYW1ldGVyU3R1YltwMTpqYXZhLnV0aWwuQ29sbGVjdGlvbjw/Pl0KKyAgICAgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9MF0KKyAgICAgICAgUHNpUGFyYW1ldGVyU3R1YltwMjpqYXZhLmxhbmcuT2JqZWN0XQorICAgICAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz0wXQorICAgICAgUHNpUmVmTGlzdFN0dWJbVEhST1dTX0xJU1Q6XQorICAgIFBzaU1ldGhvZFN0dWJbZGlzam9pbnQ6Ym9vbGVhbl0KKyAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz05XQorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3RTdHViCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgICBQc2lQYXJhbWV0ZXJTdHViW3AxOmphdmEudXRpbC5Db2xsZWN0aW9uPD8+XQorICAgICAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz0wXQorICAgICAgICBQc2lQYXJhbWV0ZXJTdHViW3AyOmphdmEudXRpbC5Db2xsZWN0aW9uPD8+XQorICAgICAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz0wXQorICAgICAgUHNpUmVmTGlzdFN0dWJbVEhST1dTX0xJU1Q6XQorICAgIFBzaU1ldGhvZFN0dWJbdmFyYXJncyBhZGRBbGw6Ym9vbGVhbl0KKyAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz05XQorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3RTdHViCisgICAgICAgIFBzaVR5cGVQYXJhbWV0ZXJbVF0KKyAgICAgICAgICBQc2lSZWZMaXN0U3R1YltFWFRFTkRTX0JPVU5EU19MSVNUOl0KKyAgICAgIFBzaVBhcmFtZXRlckxpc3RTdHViCisgICAgICAgIFBzaVBhcmFtZXRlclN0dWJbcDE6amF2YS51dGlsLkNvbGxlY3Rpb248PyBzdXBlciBUPl0KKyAgICAgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9MF0KKyAgICAgICAgUHNpUGFyYW1ldGVyU3R1YltwMjpULi4uXQorICAgICAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz0wXQorICAgICAgUHNpUmVmTGlzdFN0dWJbVEhST1dTX0xJU1Q6XQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9jbHMvc3R1YkJ1aWxkZXIvVXRpbEhhc2hNYXAudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9jbHMvc3R1YkJ1aWxkZXIvVXRpbEhhc2hNYXAudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVjMmI5ZDgKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL2Nscy9zdHViQnVpbGRlci9VdGlsSGFzaE1hcC50eHQKQEAgLTAsMCArMSwzMDggQEAKK1BzaUphdmFGaWxlU3R1YiBbamF2YS51dGlsXQorICBQc2lDbGFzc1N0dWJbbmFtZT1IYXNoTWFwIGZxbj1qYXZhLnV0aWwuSGFzaE1hcF0KKyAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9MV0KKyAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdFN0dWIKKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJbS10KKyAgICAgICAgUHNpUmVmTGlzdFN0dWJbRVhURU5EU19CT1VORFNfTElTVDpdCisgICAgICBQc2lUeXBlUGFyYW1ldGVyW1ZdCisgICAgICAgIFBzaVJlZkxpc3RTdHViW0VYVEVORFNfQk9VTkRTX0xJU1Q6XQorICAgIFBzaVJlZkxpc3RTdHViW0VYVEVORFNfTElTVDpqYXZhLnV0aWwuQWJzdHJhY3RNYXA8SyxWPl0KKyAgICBQc2lSZWZMaXN0U3R1YltJTVBMRU1FTlRTX0xJU1Q6amF2YS51dGlsLk1hcDxLLFY+LCBqYXZhLmxhbmcuQ2xvbmVhYmxlLCBqYXZhLmlvLlNlcmlhbGl6YWJsZV0KKyAgICBQc2lGaWVsZFN0dWJbREVGQVVMVF9JTklUSUFMX0NBUEFDSVRZOmludD0xNl0KKyAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz00MTIwXQorICAgIFBzaUZpZWxkU3R1YltNQVhJTVVNX0NBUEFDSVRZOmludD0xMDczNzQxODI0XQorICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTQxMjBdCisgICAgUHNpRmllbGRTdHViW0RFRkFVTFRfTE9BRF9GQUNUT1I6ZmxvYXQ9MC43NWZdCisgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9NDEyMF0KKyAgICBQc2lGaWVsZFN0dWJbdGFibGU6amF2YS51dGlsLkhhc2hNYXAuRW50cnlbXV0KKyAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz00MjI0XQorICAgIFBzaUZpZWxkU3R1YltzaXplOmludF0KKyAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz00MjI0XQorICAgIFBzaUZpZWxkU3R1Ylt0aHJlc2hvbGQ6aW50XQorICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTQwOTZdCisgICAgUHNpRmllbGRTdHViW2xvYWRGYWN0b3I6ZmxvYXRdCisgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9NDExMl0KKyAgICBQc2lGaWVsZFN0dWJbbW9kQ291bnQ6aW50XQorICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTQyODhdCisgICAgUHNpRmllbGRTdHViW05VTExfS0VZOmphdmEubGFuZy5PYmplY3RdCisgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9NDEyMF0KKyAgICBQc2lGaWVsZFN0dWJbZW50cnlTZXQ6amF2YS51dGlsLlNldDxqYXZhLnV0aWwuTWFwLkVudHJ5PEssVj4+XQorICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTEzMF0KKyAgICBQc2lGaWVsZFN0dWJbc2VyaWFsVmVyc2lvblVJRDpsb25nPTM2MjQ5ODgyMDc2MzE4MTI2NUxdCisgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9MjZdCisgICAgUHNpTWV0aG9kU3R1Yltjb25zIEhhc2hNYXA6dm9pZF0KKyAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz0xXQorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3RTdHViCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgICBQc2lQYXJhbWV0ZXJTdHViW3AxOmludF0KKyAgICAgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9MF0KKyAgICAgICAgUHNpUGFyYW1ldGVyU3R1YltwMjpmbG9hdF0KKyAgICAgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9MF0KKyAgICAgIFBzaVJlZkxpc3RTdHViW1RIUk9XU19MSVNUOl0KKyAgICBQc2lNZXRob2RTdHViW2NvbnMgSGFzaE1hcDp2b2lkXQorICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTFdCisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdFN0dWIKKyAgICAgIFBzaVBhcmFtZXRlckxpc3RTdHViCisgICAgICAgIFBzaVBhcmFtZXRlclN0dWJbcDE6aW50XQorICAgICAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz0wXQorICAgICAgUHNpUmVmTGlzdFN0dWJbVEhST1dTX0xJU1Q6XQorICAgIFBzaU1ldGhvZFN0dWJbY29ucyBIYXNoTWFwOnZvaWRdCisgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9MV0KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgUHNpUGFyYW1ldGVyTGlzdFN0dWIKKyAgICAgIFBzaVJlZkxpc3RTdHViW1RIUk9XU19MSVNUOl0KKyAgICBQc2lNZXRob2RTdHViW2NvbnMgSGFzaE1hcDp2b2lkXQorICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTFdCisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdFN0dWIKKyAgICAgIFBzaVBhcmFtZXRlckxpc3RTdHViCisgICAgICAgIFBzaVBhcmFtZXRlclN0dWJbcDE6amF2YS51dGlsLk1hcDw/IGV4dGVuZHMgSyw/IGV4dGVuZHMgVj5dCisgICAgICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTBdCisgICAgICBQc2lSZWZMaXN0U3R1YltUSFJPV1NfTElTVDpdCisgICAgUHNpTWV0aG9kU3R1Yltpbml0OnZvaWRdCisgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9NDA5Nl0KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgUHNpUGFyYW1ldGVyTGlzdFN0dWIKKyAgICAgIFBzaVJlZkxpc3RTdHViW1RIUk9XU19MSVNUOl0KKyAgICBQc2lNZXRob2RTdHViW21hc2tOdWxsOlRdCisgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9NDEwNF0KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgICBQc2lUeXBlUGFyYW1ldGVyW1RdCisgICAgICAgICAgUHNpUmVmTGlzdFN0dWJbRVhURU5EU19CT1VORFNfTElTVDpdCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgICBQc2lQYXJhbWV0ZXJTdHViW3AxOlRdCisgICAgICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTBdCisgICAgICBQc2lSZWZMaXN0U3R1YltUSFJPV1NfTElTVDpdCisgICAgUHNpTWV0aG9kU3R1Ylt1bm1hc2tOdWxsOlRdCisgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9NDEwNF0KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgICBQc2lUeXBlUGFyYW1ldGVyW1RdCisgICAgICAgICAgUHNpUmVmTGlzdFN0dWJbRVhURU5EU19CT1VORFNfTElTVDpdCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgICBQc2lQYXJhbWV0ZXJTdHViW3AxOlRdCisgICAgICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTBdCisgICAgICBQc2lSZWZMaXN0U3R1YltUSFJPV1NfTElTVDpdCisgICAgUHNpTWV0aG9kU3R1YltoYXNoOmludF0KKyAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz00MTA0XQorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3RTdHViCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgICBQc2lQYXJhbWV0ZXJTdHViW3AxOmphdmEubGFuZy5PYmplY3RdCisgICAgICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTBdCisgICAgICBQc2lSZWZMaXN0U3R1YltUSFJPV1NfTElTVDpdCisgICAgUHNpTWV0aG9kU3R1YltlcTpib29sZWFuXQorICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTQxMDRdCisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdFN0dWIKKyAgICAgIFBzaVBhcmFtZXRlckxpc3RTdHViCisgICAgICAgIFBzaVBhcmFtZXRlclN0dWJbcDE6amF2YS5sYW5nLk9iamVjdF0KKyAgICAgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9MF0KKyAgICAgICAgUHNpUGFyYW1ldGVyU3R1YltwMjpqYXZhLmxhbmcuT2JqZWN0XQorICAgICAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz0wXQorICAgICAgUHNpUmVmTGlzdFN0dWJbVEhST1dTX0xJU1Q6XQorICAgIFBzaU1ldGhvZFN0dWJbaW5kZXhGb3I6aW50XQorICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTQxMDRdCisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdFN0dWIKKyAgICAgIFBzaVBhcmFtZXRlckxpc3RTdHViCisgICAgICAgIFBzaVBhcmFtZXRlclN0dWJbcDE6aW50XQorICAgICAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz0wXQorICAgICAgICBQc2lQYXJhbWV0ZXJTdHViW3AyOmludF0KKyAgICAgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9MF0KKyAgICAgIFBzaVJlZkxpc3RTdHViW1RIUk9XU19MSVNUOl0KKyAgICBQc2lNZXRob2RTdHViW3NpemU6aW50XQorICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTFdCisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdFN0dWIKKyAgICAgIFBzaVBhcmFtZXRlckxpc3RTdHViCisgICAgICBQc2lSZWZMaXN0U3R1YltUSFJPV1NfTElTVDpdCisgICAgUHNpTWV0aG9kU3R1Yltpc0VtcHR5OmJvb2xlYW5dCisgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9MV0KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgUHNpUGFyYW1ldGVyTGlzdFN0dWIKKyAgICAgIFBzaVJlZkxpc3RTdHViW1RIUk9XU19MSVNUOl0KKyAgICBQc2lNZXRob2RTdHViW2dldDpWXQorICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTFdCisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdFN0dWIKKyAgICAgIFBzaVBhcmFtZXRlckxpc3RTdHViCisgICAgICAgIFBzaVBhcmFtZXRlclN0dWJbcDE6amF2YS5sYW5nLk9iamVjdF0KKyAgICAgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9MF0KKyAgICAgIFBzaVJlZkxpc3RTdHViW1RIUk9XU19MSVNUOl0KKyAgICBQc2lNZXRob2RTdHViW2NvbnRhaW5zS2V5OmJvb2xlYW5dCisgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9MV0KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgUHNpUGFyYW1ldGVyTGlzdFN0dWIKKyAgICAgICAgUHNpUGFyYW1ldGVyU3R1YltwMTpqYXZhLmxhbmcuT2JqZWN0XQorICAgICAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz0wXQorICAgICAgUHNpUmVmTGlzdFN0dWJbVEhST1dTX0xJU1Q6XQorICAgIFBzaU1ldGhvZFN0dWJbZ2V0RW50cnk6amF2YS51dGlsLkhhc2hNYXAuRW50cnk8SyxWPl0KKyAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz00MDk2XQorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3RTdHViCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgICBQc2lQYXJhbWV0ZXJTdHViW3AxOmphdmEubGFuZy5PYmplY3RdCisgICAgICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTBdCisgICAgICBQc2lSZWZMaXN0U3R1YltUSFJPV1NfTElTVDpdCisgICAgUHNpTWV0aG9kU3R1YltwdXQ6Vl0KKyAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz0xXQorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3RTdHViCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgICBQc2lQYXJhbWV0ZXJTdHViW3AxOktdCisgICAgICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTBdCisgICAgICAgIFBzaVBhcmFtZXRlclN0dWJbcDI6Vl0KKyAgICAgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9MF0KKyAgICAgIFBzaVJlZkxpc3RTdHViW1RIUk9XU19MSVNUOl0KKyAgICBQc2lNZXRob2RTdHViW3B1dEZvckNyZWF0ZTp2b2lkXQorICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTJdCisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdFN0dWIKKyAgICAgIFBzaVBhcmFtZXRlckxpc3RTdHViCisgICAgICAgIFBzaVBhcmFtZXRlclN0dWJbcDE6S10KKyAgICAgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9MF0KKyAgICAgICAgUHNpUGFyYW1ldGVyU3R1YltwMjpWXQorICAgICAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz0wXQorICAgICAgUHNpUmVmTGlzdFN0dWJbVEhST1dTX0xJU1Q6XQorICAgIFBzaU1ldGhvZFN0dWJbcHV0QWxsRm9yQ3JlYXRlOnZvaWRdCisgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9NDA5Nl0KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgUHNpUGFyYW1ldGVyTGlzdFN0dWIKKyAgICAgICAgUHNpUGFyYW1ldGVyU3R1YltwMTpqYXZhLnV0aWwuTWFwPD8gZXh0ZW5kcyBLLD8gZXh0ZW5kcyBWPl0KKyAgICAgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9MF0KKyAgICAgIFBzaVJlZkxpc3RTdHViW1RIUk9XU19MSVNUOl0KKyAgICBQc2lNZXRob2RTdHViW3Jlc2l6ZTp2b2lkXQorICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTQwOTZdCisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdFN0dWIKKyAgICAgIFBzaVBhcmFtZXRlckxpc3RTdHViCisgICAgICAgIFBzaVBhcmFtZXRlclN0dWJbcDE6aW50XQorICAgICAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz0wXQorICAgICAgUHNpUmVmTGlzdFN0dWJbVEhST1dTX0xJU1Q6XQorICAgIFBzaU1ldGhvZFN0dWJbdHJhbnNmZXI6dm9pZF0KKyAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz00MDk2XQorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3RTdHViCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgICBQc2lQYXJhbWV0ZXJTdHViW3AxOmphdmEudXRpbC5IYXNoTWFwLkVudHJ5W11dCisgICAgICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTBdCisgICAgICBQc2lSZWZMaXN0U3R1YltUSFJPV1NfTElTVDpdCisgICAgUHNpTWV0aG9kU3R1YltwdXRBbGw6dm9pZF0KKyAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz0xXQorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3RTdHViCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgICBQc2lQYXJhbWV0ZXJTdHViW3AxOmphdmEudXRpbC5NYXA8PyBleHRlbmRzIEssPyBleHRlbmRzIFY+XQorICAgICAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz0wXQorICAgICAgUHNpUmVmTGlzdFN0dWJbVEhST1dTX0xJU1Q6XQorICAgIFBzaU1ldGhvZFN0dWJbcmVtb3ZlOlZdCisgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9MV0KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgUHNpUGFyYW1ldGVyTGlzdFN0dWIKKyAgICAgICAgUHNpUGFyYW1ldGVyU3R1YltwMTpqYXZhLmxhbmcuT2JqZWN0XQorICAgICAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz0wXQorICAgICAgUHNpUmVmTGlzdFN0dWJbVEhST1dTX0xJU1Q6XQorICAgIFBzaU1ldGhvZFN0dWJbcmVtb3ZlRW50cnlGb3JLZXk6amF2YS51dGlsLkhhc2hNYXAuRW50cnk8SyxWPl0KKyAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz00MDk2XQorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3RTdHViCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgICBQc2lQYXJhbWV0ZXJTdHViW3AxOmphdmEubGFuZy5PYmplY3RdCisgICAgICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTBdCisgICAgICBQc2lSZWZMaXN0U3R1YltUSFJPV1NfTElTVDpdCisgICAgUHNpTWV0aG9kU3R1YltyZW1vdmVNYXBwaW5nOmphdmEudXRpbC5IYXNoTWFwLkVudHJ5PEssVj5dCisgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9NDA5Nl0KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgUHNpUGFyYW1ldGVyTGlzdFN0dWIKKyAgICAgICAgUHNpUGFyYW1ldGVyU3R1YltwMTpqYXZhLmxhbmcuT2JqZWN0XQorICAgICAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz0wXQorICAgICAgUHNpUmVmTGlzdFN0dWJbVEhST1dTX0xJU1Q6XQorICAgIFBzaU1ldGhvZFN0dWJbY2xlYXI6dm9pZF0KKyAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz0xXQorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3RTdHViCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgUHNpUmVmTGlzdFN0dWJbVEhST1dTX0xJU1Q6XQorICAgIFBzaU1ldGhvZFN0dWJbY29udGFpbnNWYWx1ZTpib29sZWFuXQorICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTFdCisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdFN0dWIKKyAgICAgIFBzaVBhcmFtZXRlckxpc3RTdHViCisgICAgICAgIFBzaVBhcmFtZXRlclN0dWJbcDE6amF2YS5sYW5nLk9iamVjdF0KKyAgICAgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9MF0KKyAgICAgIFBzaVJlZkxpc3RTdHViW1RIUk9XU19MSVNUOl0KKyAgICBQc2lNZXRob2RTdHViW2NvbnRhaW5zTnVsbFZhbHVlOmJvb2xlYW5dCisgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9Ml0KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgUHNpUGFyYW1ldGVyTGlzdFN0dWIKKyAgICAgIFBzaVJlZkxpc3RTdHViW1RIUk9XU19MSVNUOl0KKyAgICBQc2lNZXRob2RTdHViW2Nsb25lOmphdmEubGFuZy5PYmplY3RdCisgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9MV0KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgUHNpUGFyYW1ldGVyTGlzdFN0dWIKKyAgICAgIFBzaVJlZkxpc3RTdHViW1RIUk9XU19MSVNUOl0KKyAgICBQc2lNZXRob2RTdHViW2FkZEVudHJ5OnZvaWRdCisgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9NDA5Nl0KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgUHNpUGFyYW1ldGVyTGlzdFN0dWIKKyAgICAgICAgUHNpUGFyYW1ldGVyU3R1YltwMTppbnRdCisgICAgICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTBdCisgICAgICAgIFBzaVBhcmFtZXRlclN0dWJbcDI6S10KKyAgICAgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9MF0KKyAgICAgICAgUHNpUGFyYW1ldGVyU3R1YltwMzpWXQorICAgICAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz0wXQorICAgICAgICBQc2lQYXJhbWV0ZXJTdHViW3A0OmludF0KKyAgICAgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9MF0KKyAgICAgIFBzaVJlZkxpc3RTdHViW1RIUk9XU19MSVNUOl0KKyAgICBQc2lNZXRob2RTdHViW2NyZWF0ZUVudHJ5OnZvaWRdCisgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9NDA5Nl0KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgUHNpUGFyYW1ldGVyTGlzdFN0dWIKKyAgICAgICAgUHNpUGFyYW1ldGVyU3R1YltwMTppbnRdCisgICAgICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTBdCisgICAgICAgIFBzaVBhcmFtZXRlclN0dWJbcDI6S10KKyAgICAgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9MF0KKyAgICAgICAgUHNpUGFyYW1ldGVyU3R1YltwMzpWXQorICAgICAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz0wXQorICAgICAgICBQc2lQYXJhbWV0ZXJTdHViW3A0OmludF0KKyAgICAgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9MF0KKyAgICAgIFBzaVJlZkxpc3RTdHViW1RIUk9XU19MSVNUOl0KKyAgICBQc2lNZXRob2RTdHViW25ld0tleUl0ZXJhdG9yOmphdmEudXRpbC5JdGVyYXRvcjxLPl0KKyAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz00MDk2XQorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3RTdHViCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgUHNpUmVmTGlzdFN0dWJbVEhST1dTX0xJU1Q6XQorICAgIFBzaU1ldGhvZFN0dWJbbmV3VmFsdWVJdGVyYXRvcjpqYXZhLnV0aWwuSXRlcmF0b3I8Vj5dCisgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9NDA5Nl0KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgUHNpUGFyYW1ldGVyTGlzdFN0dWIKKyAgICAgIFBzaVJlZkxpc3RTdHViW1RIUk9XU19MSVNUOl0KKyAgICBQc2lNZXRob2RTdHViW25ld0VudHJ5SXRlcmF0b3I6amF2YS51dGlsLkl0ZXJhdG9yPGphdmEudXRpbC5NYXAuRW50cnk8SyxWPj5dCisgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9NDA5Nl0KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgUHNpUGFyYW1ldGVyTGlzdFN0dWIKKyAgICAgIFBzaVJlZkxpc3RTdHViW1RIUk9XU19MSVNUOl0KKyAgICBQc2lNZXRob2RTdHViW2tleVNldDpqYXZhLnV0aWwuU2V0PEs+XQorICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTFdCisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdFN0dWIKKyAgICAgIFBzaVBhcmFtZXRlckxpc3RTdHViCisgICAgICBQc2lSZWZMaXN0U3R1YltUSFJPV1NfTElTVDpdCisgICAgUHNpTWV0aG9kU3R1Ylt2YWx1ZXM6amF2YS51dGlsLkNvbGxlY3Rpb248Vj5dCisgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9MV0KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgUHNpUGFyYW1ldGVyTGlzdFN0dWIKKyAgICAgIFBzaVJlZkxpc3RTdHViW1RIUk9XU19MSVNUOl0KKyAgICBQc2lNZXRob2RTdHViW2VudHJ5U2V0OmphdmEudXRpbC5TZXQ8amF2YS51dGlsLk1hcC5FbnRyeTxLLFY+Pl0KKyAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz0xXQorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3RTdHViCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgUHNpUmVmTGlzdFN0dWJbVEhST1dTX0xJU1Q6XQorICAgIFBzaU1ldGhvZFN0dWJbd3JpdGVPYmplY3Q6dm9pZF0KKyAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz0yXQorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3RTdHViCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgICBQc2lQYXJhbWV0ZXJTdHViW3AxOmphdmEuaW8uT2JqZWN0T3V0cHV0U3RyZWFtXQorICAgICAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz0wXQorICAgICAgUHNpUmVmTGlzdFN0dWJbVEhST1dTX0xJU1Q6amF2YS5pby5JT0V4Y2VwdGlvbl0KKyAgICBQc2lNZXRob2RTdHViW3JlYWRPYmplY3Q6dm9pZF0KKyAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz0yXQorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3RTdHViCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgICBQc2lQYXJhbWV0ZXJTdHViW3AxOmphdmEuaW8uT2JqZWN0SW5wdXRTdHJlYW1dCisgICAgICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTBdCisgICAgICBQc2lSZWZMaXN0U3R1YltUSFJPV1NfTElTVDpqYXZhLmlvLklPRXhjZXB0aW9uLCBqYXZhLmxhbmcuQ2xhc3NOb3RGb3VuZEV4Y2VwdGlvbl0KKyAgICBQc2lNZXRob2RTdHViW2NhcGFjaXR5OmludF0KKyAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz00MDk2XQorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3RTdHViCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgUHNpUmVmTGlzdFN0dWJbVEhST1dTX0xJU1Q6XQorICAgIFBzaU1ldGhvZFN0dWJbbG9hZEZhY3RvcjpmbG9hdF0KKyAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz00MDk2XQorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3RTdHViCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgUHNpUmVmTGlzdFN0dWJbVEhST1dTX0xJU1Q6XQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9jbHMvc3R1YkJ1aWxkZXIvVXRpbExpc3QudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9jbHMvc3R1YkJ1aWxkZXIvVXRpbExpc3QudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU3NDRjYmUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL2Nscy9zdHViQnVpbGRlci9VdGlsTGlzdC50eHQKQEAgLTAsMCArMSwxNzkgQEAKK1BzaUphdmFGaWxlU3R1YiBbamF2YS51dGlsXQorICBQc2lDbGFzc1N0dWJbaW50ZXJmYWNlIG5hbWU9TGlzdCBmcW49amF2YS51dGlsLkxpc3RdCisgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTEwMjVdCisgICAgUHNpVHlwZVBhcmFtZXRlckxpc3RTdHViCisgICAgICBQc2lUeXBlUGFyYW1ldGVyW0VdCisgICAgICAgIFBzaVJlZkxpc3RTdHViW0VYVEVORFNfQk9VTkRTX0xJU1Q6XQorICAgIFBzaVJlZkxpc3RTdHViW0VYVEVORFNfTElTVDpqYXZhLnV0aWwuQ29sbGVjdGlvbjxFPl0KKyAgICBQc2lSZWZMaXN0U3R1YltJTVBMRU1FTlRTX0xJU1Q6XQorICAgIFBzaU1ldGhvZFN0dWJbc2l6ZTppbnRdCisgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9MTAyNV0KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgUHNpUGFyYW1ldGVyTGlzdFN0dWIKKyAgICAgIFBzaVJlZkxpc3RTdHViW1RIUk9XU19MSVNUOl0KKyAgICBQc2lNZXRob2RTdHViW2lzRW1wdHk6Ym9vbGVhbl0KKyAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz0xMDI1XQorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3RTdHViCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgUHNpUmVmTGlzdFN0dWJbVEhST1dTX0xJU1Q6XQorICAgIFBzaU1ldGhvZFN0dWJbY29udGFpbnM6Ym9vbGVhbl0KKyAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz0xMDI1XQorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3RTdHViCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgICBQc2lQYXJhbWV0ZXJTdHViW3AxOmphdmEubGFuZy5PYmplY3RdCisgICAgICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTBdCisgICAgICBQc2lSZWZMaXN0U3R1YltUSFJPV1NfTElTVDpdCisgICAgUHNpTWV0aG9kU3R1YltpdGVyYXRvcjpqYXZhLnV0aWwuSXRlcmF0b3I8RT5dCisgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9MTAyNV0KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgUHNpUGFyYW1ldGVyTGlzdFN0dWIKKyAgICAgIFBzaVJlZkxpc3RTdHViW1RIUk9XU19MSVNUOl0KKyAgICBQc2lNZXRob2RTdHViW3RvQXJyYXk6amF2YS5sYW5nLk9iamVjdFtdXQorICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTEwMjVdCisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdFN0dWIKKyAgICAgIFBzaVBhcmFtZXRlckxpc3RTdHViCisgICAgICBQc2lSZWZMaXN0U3R1YltUSFJPV1NfTElTVDpdCisgICAgUHNpTWV0aG9kU3R1Ylt0b0FycmF5OlRbXV0KKyAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz0xMDI1XQorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3RTdHViCisgICAgICAgIFBzaVR5cGVQYXJhbWV0ZXJbVF0KKyAgICAgICAgICBQc2lSZWZMaXN0U3R1YltFWFRFTkRTX0JPVU5EU19MSVNUOl0KKyAgICAgIFBzaVBhcmFtZXRlckxpc3RTdHViCisgICAgICAgIFBzaVBhcmFtZXRlclN0dWJbcDE6VFtdXQorICAgICAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz0wXQorICAgICAgUHNpUmVmTGlzdFN0dWJbVEhST1dTX0xJU1Q6XQorICAgIFBzaU1ldGhvZFN0dWJbYWRkOmJvb2xlYW5dCisgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9MTAyNV0KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgUHNpUGFyYW1ldGVyTGlzdFN0dWIKKyAgICAgICAgUHNpUGFyYW1ldGVyU3R1YltwMTpFXQorICAgICAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz0wXQorICAgICAgUHNpUmVmTGlzdFN0dWJbVEhST1dTX0xJU1Q6XQorICAgIFBzaU1ldGhvZFN0dWJbcmVtb3ZlOmJvb2xlYW5dCisgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9MTAyNV0KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgUHNpUGFyYW1ldGVyTGlzdFN0dWIKKyAgICAgICAgUHNpUGFyYW1ldGVyU3R1YltwMTpqYXZhLmxhbmcuT2JqZWN0XQorICAgICAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz0wXQorICAgICAgUHNpUmVmTGlzdFN0dWJbVEhST1dTX0xJU1Q6XQorICAgIFBzaU1ldGhvZFN0dWJbY29udGFpbnNBbGw6Ym9vbGVhbl0KKyAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz0xMDI1XQorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3RTdHViCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgICBQc2lQYXJhbWV0ZXJTdHViW3AxOmphdmEudXRpbC5Db2xsZWN0aW9uPD8+XQorICAgICAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz0wXQorICAgICAgUHNpUmVmTGlzdFN0dWJbVEhST1dTX0xJU1Q6XQorICAgIFBzaU1ldGhvZFN0dWJbYWRkQWxsOmJvb2xlYW5dCisgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9MTAyNV0KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgUHNpUGFyYW1ldGVyTGlzdFN0dWIKKyAgICAgICAgUHNpUGFyYW1ldGVyU3R1YltwMTpqYXZhLnV0aWwuQ29sbGVjdGlvbjw/IGV4dGVuZHMgRT5dCisgICAgICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTBdCisgICAgICBQc2lSZWZMaXN0U3R1YltUSFJPV1NfTElTVDpdCisgICAgUHNpTWV0aG9kU3R1YlthZGRBbGw6Ym9vbGVhbl0KKyAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz0xMDI1XQorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3RTdHViCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgICBQc2lQYXJhbWV0ZXJTdHViW3AxOmludF0KKyAgICAgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9MF0KKyAgICAgICAgUHNpUGFyYW1ldGVyU3R1YltwMjpqYXZhLnV0aWwuQ29sbGVjdGlvbjw/IGV4dGVuZHMgRT5dCisgICAgICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTBdCisgICAgICBQc2lSZWZMaXN0U3R1YltUSFJPV1NfTElTVDpdCisgICAgUHNpTWV0aG9kU3R1YltyZW1vdmVBbGw6Ym9vbGVhbl0KKyAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz0xMDI1XQorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3RTdHViCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgICBQc2lQYXJhbWV0ZXJTdHViW3AxOmphdmEudXRpbC5Db2xsZWN0aW9uPD8+XQorICAgICAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz0wXQorICAgICAgUHNpUmVmTGlzdFN0dWJbVEhST1dTX0xJU1Q6XQorICAgIFBzaU1ldGhvZFN0dWJbcmV0YWluQWxsOmJvb2xlYW5dCisgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9MTAyNV0KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgUHNpUGFyYW1ldGVyTGlzdFN0dWIKKyAgICAgICAgUHNpUGFyYW1ldGVyU3R1YltwMTpqYXZhLnV0aWwuQ29sbGVjdGlvbjw/Pl0KKyAgICAgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9MF0KKyAgICAgIFBzaVJlZkxpc3RTdHViW1RIUk9XU19MSVNUOl0KKyAgICBQc2lNZXRob2RTdHViW2NsZWFyOnZvaWRdCisgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9MTAyNV0KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgUHNpUGFyYW1ldGVyTGlzdFN0dWIKKyAgICAgIFBzaVJlZkxpc3RTdHViW1RIUk9XU19MSVNUOl0KKyAgICBQc2lNZXRob2RTdHViW2VxdWFsczpib29sZWFuXQorICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTEwMjVdCisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdFN0dWIKKyAgICAgIFBzaVBhcmFtZXRlckxpc3RTdHViCisgICAgICAgIFBzaVBhcmFtZXRlclN0dWJbcDE6amF2YS5sYW5nLk9iamVjdF0KKyAgICAgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9MF0KKyAgICAgIFBzaVJlZkxpc3RTdHViW1RIUk9XU19MSVNUOl0KKyAgICBQc2lNZXRob2RTdHViW2hhc2hDb2RlOmludF0KKyAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz0xMDI1XQorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3RTdHViCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgUHNpUmVmTGlzdFN0dWJbVEhST1dTX0xJU1Q6XQorICAgIFBzaU1ldGhvZFN0dWJbZ2V0OkVdCisgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9MTAyNV0KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgUHNpUGFyYW1ldGVyTGlzdFN0dWIKKyAgICAgICAgUHNpUGFyYW1ldGVyU3R1YltwMTppbnRdCisgICAgICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTBdCisgICAgICBQc2lSZWZMaXN0U3R1YltUSFJPV1NfTElTVDpdCisgICAgUHNpTWV0aG9kU3R1YltzZXQ6RV0KKyAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz0xMDI1XQorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3RTdHViCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgICBQc2lQYXJhbWV0ZXJTdHViW3AxOmludF0KKyAgICAgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9MF0KKyAgICAgICAgUHNpUGFyYW1ldGVyU3R1YltwMjpFXQorICAgICAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz0wXQorICAgICAgUHNpUmVmTGlzdFN0dWJbVEhST1dTX0xJU1Q6XQorICAgIFBzaU1ldGhvZFN0dWJbYWRkOnZvaWRdCisgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9MTAyNV0KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgUHNpUGFyYW1ldGVyTGlzdFN0dWIKKyAgICAgICAgUHNpUGFyYW1ldGVyU3R1YltwMTppbnRdCisgICAgICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTBdCisgICAgICAgIFBzaVBhcmFtZXRlclN0dWJbcDI6RV0KKyAgICAgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9MF0KKyAgICAgIFBzaVJlZkxpc3RTdHViW1RIUk9XU19MSVNUOl0KKyAgICBQc2lNZXRob2RTdHViW3JlbW92ZTpFXQorICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTEwMjVdCisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdFN0dWIKKyAgICAgIFBzaVBhcmFtZXRlckxpc3RTdHViCisgICAgICAgIFBzaVBhcmFtZXRlclN0dWJbcDE6aW50XQorICAgICAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz0wXQorICAgICAgUHNpUmVmTGlzdFN0dWJbVEhST1dTX0xJU1Q6XQorICAgIFBzaU1ldGhvZFN0dWJbaW5kZXhPZjppbnRdCisgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9MTAyNV0KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgUHNpUGFyYW1ldGVyTGlzdFN0dWIKKyAgICAgICAgUHNpUGFyYW1ldGVyU3R1YltwMTpqYXZhLmxhbmcuT2JqZWN0XQorICAgICAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz0wXQorICAgICAgUHNpUmVmTGlzdFN0dWJbVEhST1dTX0xJU1Q6XQorICAgIFBzaU1ldGhvZFN0dWJbbGFzdEluZGV4T2Y6aW50XQorICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTEwMjVdCisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdFN0dWIKKyAgICAgIFBzaVBhcmFtZXRlckxpc3RTdHViCisgICAgICAgIFBzaVBhcmFtZXRlclN0dWJbcDE6amF2YS5sYW5nLk9iamVjdF0KKyAgICAgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9MF0KKyAgICAgIFBzaVJlZkxpc3RTdHViW1RIUk9XU19MSVNUOl0KKyAgICBQc2lNZXRob2RTdHViW2xpc3RJdGVyYXRvcjpqYXZhLnV0aWwuTGlzdEl0ZXJhdG9yPEU+XQorICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTEwMjVdCisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdFN0dWIKKyAgICAgIFBzaVBhcmFtZXRlckxpc3RTdHViCisgICAgICBQc2lSZWZMaXN0U3R1YltUSFJPV1NfTElTVDpdCisgICAgUHNpTWV0aG9kU3R1YltsaXN0SXRlcmF0b3I6amF2YS51dGlsLkxpc3RJdGVyYXRvcjxFPl0KKyAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz0xMDI1XQorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3RTdHViCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgICBQc2lQYXJhbWV0ZXJTdHViW3AxOmludF0KKyAgICAgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9MF0KKyAgICAgIFBzaVJlZkxpc3RTdHViW1RIUk9XU19MSVNUOl0KKyAgICBQc2lNZXRob2RTdHViW3N1Ykxpc3Q6amF2YS51dGlsLkxpc3Q8RT5dCisgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9MTAyNV0KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgUHNpUGFyYW1ldGVyTGlzdFN0dWIKKyAgICAgICAgUHNpUGFyYW1ldGVyU3R1YltwMTppbnRdCisgICAgICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTBdCisgICAgICAgIFBzaVBhcmFtZXRlclN0dWJbcDI6aW50XQorICAgICAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz0wXQorICAgICAgUHNpUmVmTGlzdFN0dWJbVEhST1dTX0xJU1Q6XQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9jbHMvc3R1YkJ1aWxkZXIvVXRpbE1hcC50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL2Nscy9zdHViQnVpbGRlci9VdGlsTWFwLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMTMyZjNiCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9jbHMvc3R1YkJ1aWxkZXIvVXRpbE1hcC50eHQKQEAgLTAsMCArMSwxMzQgQEAKK1BzaUphdmFGaWxlU3R1YiBbamF2YS51dGlsXQorICBQc2lDbGFzc1N0dWJbaW50ZXJmYWNlIG5hbWU9TWFwIGZxbj1qYXZhLnV0aWwuTWFwXQorICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz0xMDI1XQorICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgUHNpVHlwZVBhcmFtZXRlcltLXQorICAgICAgICBQc2lSZWZMaXN0U3R1YltFWFRFTkRTX0JPVU5EU19MSVNUOl0KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJbVl0KKyAgICAgICAgUHNpUmVmTGlzdFN0dWJbRVhURU5EU19CT1VORFNfTElTVDpdCisgICAgUHNpUmVmTGlzdFN0dWJbRVhURU5EU19MSVNUOl0KKyAgICBQc2lSZWZMaXN0U3R1YltJTVBMRU1FTlRTX0xJU1Q6XQorICAgIFBzaUNsYXNzU3R1YltpbnRlcmZhY2UgbmFtZT1FbnRyeSBmcW49amF2YS51dGlsLk1hcC5FbnRyeV0KKyAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz0xMDMzXQorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3RTdHViCisgICAgICAgIFBzaVR5cGVQYXJhbWV0ZXJbS10KKyAgICAgICAgICBQc2lSZWZMaXN0U3R1YltFWFRFTkRTX0JPVU5EU19MSVNUOl0KKyAgICAgICAgUHNpVHlwZVBhcmFtZXRlcltWXQorICAgICAgICAgIFBzaVJlZkxpc3RTdHViW0VYVEVORFNfQk9VTkRTX0xJU1Q6XQorICAgICAgUHNpUmVmTGlzdFN0dWJbRVhURU5EU19MSVNUOl0KKyAgICAgIFBzaVJlZkxpc3RTdHViW0lNUExFTUVOVFNfTElTVDpdCisgICAgICBQc2lNZXRob2RTdHViW2dldEtleTpLXQorICAgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9MTAyNV0KKyAgICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3RTdHViCisgICAgICAgIFBzaVBhcmFtZXRlckxpc3RTdHViCisgICAgICAgIFBzaVJlZkxpc3RTdHViW1RIUk9XU19MSVNUOl0KKyAgICAgIFBzaU1ldGhvZFN0dWJbZ2V0VmFsdWU6Vl0KKyAgICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTEwMjVdCisgICAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgICBQc2lQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgICBQc2lSZWZMaXN0U3R1YltUSFJPV1NfTElTVDpdCisgICAgICBQc2lNZXRob2RTdHViW3NldFZhbHVlOlZdCisgICAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz0xMDI1XQorICAgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdFN0dWIKKyAgICAgICAgUHNpUGFyYW1ldGVyTGlzdFN0dWIKKyAgICAgICAgICBQc2lQYXJhbWV0ZXJTdHViW3AxOlZdCisgICAgICAgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9MF0KKyAgICAgICAgUHNpUmVmTGlzdFN0dWJbVEhST1dTX0xJU1Q6XQorICAgICAgUHNpTWV0aG9kU3R1YltlcXVhbHM6Ym9vbGVhbl0KKyAgICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTEwMjVdCisgICAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgICBQc2lQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgICAgIFBzaVBhcmFtZXRlclN0dWJbcDE6amF2YS5sYW5nLk9iamVjdF0KKyAgICAgICAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz0wXQorICAgICAgICBQc2lSZWZMaXN0U3R1YltUSFJPV1NfTElTVDpdCisgICAgICBQc2lNZXRob2RTdHViW2hhc2hDb2RlOmludF0KKyAgICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTEwMjVdCisgICAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgICBQc2lQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgICBQc2lSZWZMaXN0U3R1YltUSFJPV1NfTElTVDpdCisgICAgUHNpTWV0aG9kU3R1YltzaXplOmludF0KKyAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz0xMDI1XQorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3RTdHViCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgUHNpUmVmTGlzdFN0dWJbVEhST1dTX0xJU1Q6XQorICAgIFBzaU1ldGhvZFN0dWJbaXNFbXB0eTpib29sZWFuXQorICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTEwMjVdCisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdFN0dWIKKyAgICAgIFBzaVBhcmFtZXRlckxpc3RTdHViCisgICAgICBQc2lSZWZMaXN0U3R1YltUSFJPV1NfTElTVDpdCisgICAgUHNpTWV0aG9kU3R1Yltjb250YWluc0tleTpib29sZWFuXQorICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTEwMjVdCisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdFN0dWIKKyAgICAgIFBzaVBhcmFtZXRlckxpc3RTdHViCisgICAgICAgIFBzaVBhcmFtZXRlclN0dWJbcDE6amF2YS5sYW5nLk9iamVjdF0KKyAgICAgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9MF0KKyAgICAgIFBzaVJlZkxpc3RTdHViW1RIUk9XU19MSVNUOl0KKyAgICBQc2lNZXRob2RTdHViW2NvbnRhaW5zVmFsdWU6Ym9vbGVhbl0KKyAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz0xMDI1XQorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3RTdHViCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgICBQc2lQYXJhbWV0ZXJTdHViW3AxOmphdmEubGFuZy5PYmplY3RdCisgICAgICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTBdCisgICAgICBQc2lSZWZMaXN0U3R1YltUSFJPV1NfTElTVDpdCisgICAgUHNpTWV0aG9kU3R1YltnZXQ6Vl0KKyAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz0xMDI1XQorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3RTdHViCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgICBQc2lQYXJhbWV0ZXJTdHViW3AxOmphdmEubGFuZy5PYmplY3RdCisgICAgICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTBdCisgICAgICBQc2lSZWZMaXN0U3R1YltUSFJPV1NfTElTVDpdCisgICAgUHNpTWV0aG9kU3R1YltwdXQ6Vl0KKyAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz0xMDI1XQorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3RTdHViCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgICBQc2lQYXJhbWV0ZXJTdHViW3AxOktdCisgICAgICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTBdCisgICAgICAgIFBzaVBhcmFtZXRlclN0dWJbcDI6Vl0KKyAgICAgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9MF0KKyAgICAgIFBzaVJlZkxpc3RTdHViW1RIUk9XU19MSVNUOl0KKyAgICBQc2lNZXRob2RTdHViW3JlbW92ZTpWXQorICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTEwMjVdCisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdFN0dWIKKyAgICAgIFBzaVBhcmFtZXRlckxpc3RTdHViCisgICAgICAgIFBzaVBhcmFtZXRlclN0dWJbcDE6amF2YS5sYW5nLk9iamVjdF0KKyAgICAgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9MF0KKyAgICAgIFBzaVJlZkxpc3RTdHViW1RIUk9XU19MSVNUOl0KKyAgICBQc2lNZXRob2RTdHViW3B1dEFsbDp2b2lkXQorICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTEwMjVdCisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdFN0dWIKKyAgICAgIFBzaVBhcmFtZXRlckxpc3RTdHViCisgICAgICAgIFBzaVBhcmFtZXRlclN0dWJbcDE6amF2YS51dGlsLk1hcDw/IGV4dGVuZHMgSyw/IGV4dGVuZHMgVj5dCisgICAgICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTBdCisgICAgICBQc2lSZWZMaXN0U3R1YltUSFJPV1NfTElTVDpdCisgICAgUHNpTWV0aG9kU3R1YltjbGVhcjp2b2lkXQorICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTEwMjVdCisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdFN0dWIKKyAgICAgIFBzaVBhcmFtZXRlckxpc3RTdHViCisgICAgICBQc2lSZWZMaXN0U3R1YltUSFJPV1NfTElTVDpdCisgICAgUHNpTWV0aG9kU3R1YltrZXlTZXQ6amF2YS51dGlsLlNldDxLPl0KKyAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz0xMDI1XQorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3RTdHViCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgUHNpUmVmTGlzdFN0dWJbVEhST1dTX0xJU1Q6XQorICAgIFBzaU1ldGhvZFN0dWJbdmFsdWVzOmphdmEudXRpbC5Db2xsZWN0aW9uPFY+XQorICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTEwMjVdCisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdFN0dWIKKyAgICAgIFBzaVBhcmFtZXRlckxpc3RTdHViCisgICAgICBQc2lSZWZMaXN0U3R1YltUSFJPV1NfTElTVDpdCisgICAgUHNpTWV0aG9kU3R1YltlbnRyeVNldDpqYXZhLnV0aWwuU2V0PGphdmEudXRpbC5NYXAuRW50cnk8SyxWPj5dCisgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9MTAyNV0KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgUHNpUGFyYW1ldGVyTGlzdFN0dWIKKyAgICAgIFBzaVJlZkxpc3RTdHViW1RIUk9XU19MSVNUOl0KKyAgICBQc2lNZXRob2RTdHViW2VxdWFsczpib29sZWFuXQorICAgICAgUHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTEwMjVdCisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdFN0dWIKKyAgICAgIFBzaVBhcmFtZXRlckxpc3RTdHViCisgICAgICAgIFBzaVBhcmFtZXRlclN0dWJbcDE6amF2YS5sYW5nLk9iamVjdF0KKyAgICAgICAgICBQc2lNb2RpZmllckxpc3RTdHViW21hc2s9MF0KKyAgICAgIFBzaVJlZkxpc3RTdHViW1RIUk9XU19MSVNUOl0KKyAgICBQc2lNZXRob2RTdHViW2hhc2hDb2RlOmludF0KKyAgICAgIFBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz0xMDI1XQorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3RTdHViCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0U3R1YgorICAgICAgUHNpUmVmTGlzdFN0dWJbVEhST1dTX0xJU1Q6XQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9jb25zdGFudFZhbHVlcy9DbGFzc1dpdGhDb25zdGFudHMuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvY29uc3RhbnRWYWx1ZXMvQ2xhc3NXaXRoQ29uc3RhbnRzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzc0YzBjZgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvY29uc3RhbnRWYWx1ZXMvQ2xhc3NXaXRoQ29uc3RhbnRzLmphdmEKQEAgLTAsMCArMSwxOSBAQAorcHVibGljIGNsYXNzIENsYXNzV2l0aENvbnN0YW50cyB7CisgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IElOVF9DT05TVDEgPSAxOworICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBJTlRfQ09OU1QyID0gLTE7CisgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IElOVF9DT05TVDMgPSAtMjE0NzQ4MzY0ODsKKyAgcHVibGljIHN0YXRpYyBmaW5hbCBsb25nIExPTkdfQ09OU1QxID0gMjsKKyAgcHVibGljIHN0YXRpYyBmaW5hbCBsb25nIExPTkdfQ09OU1QyID0gMTAwMDAwMDAwMDAwMEw7CisgIHB1YmxpYyBzdGF0aWMgZmluYWwgbG9uZyBMT05HX0NPTlNUMyA9IC05MjIzMzcyMDM2ODU0Nzc1ODA4TDsKKyAgcHVibGljIHN0YXRpYyBmaW5hbCBzaG9ydCBTSE9SVF9DT05TVCA9IDM7CisgIHB1YmxpYyBzdGF0aWMgZmluYWwgYnl0ZSBCWVRFX0NPTlNUID0gNDsKKyAgcHVibGljIHN0YXRpYyBmaW5hbCBjaGFyIENIQVJfQ09OU1QgPSAnNSc7CisgIHB1YmxpYyBzdGF0aWMgZmluYWwgYm9vbGVhbiBCT09MX0NPTlNUID0gdHJ1ZTsKKyAgcHVibGljIHN0YXRpYyBmaW5hbCBmbG9hdCBGTE9BVF9DT05TVCA9IDEuMjM0ZjsKKyAgcHVibGljIHN0YXRpYyBmaW5hbCBkb3VibGUgRE9VQkxFX0NPTlNUID0gMy40NTY7CisgIHB1YmxpYyBzdGF0aWMgZmluYWwgamF2YS5sYW5nLlN0cmluZyBTVFJJTkdfQ09OU1QgPSAiYVxyXG5cImJjZCI7CisKKyAgcHVibGljIHN0YXRpYyBmaW5hbCBkb3VibGUgZDEgPSBEb3VibGUuUE9TSVRJVkVfSU5GSU5JVFk7CisgIHB1YmxpYyBzdGF0aWMgZmluYWwgZG91YmxlIGQyID0gRG91YmxlLk5FR0FUSVZFX0lORklOSVRZOworICBwdWJsaWMgc3RhdGljIGZpbmFsIGRvdWJsZSBkMyA9IERvdWJsZS5OYU47Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL2NvbnRyb2xGbG93L2Zsb3cwLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL2NvbnRyb2xGbG93L2Zsb3cwLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODI1NTIxMwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvY29udHJvbEZsb3cvZmxvdzAuamF2YQpAQCAtMCwwICsxLDUgQEAKKy8vIExvY2Fsc09yTXlJbnN0YW5jZUZpZWxkc0NvbnRyb2xGbG93UG9saWN5CitwdWJsaWMgY2xhc3MgYSB7CisgIHZvaWQgZigpIHs8Y2FyZXQ+CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL2NvbnRyb2xGbG93L2Zsb3cwLnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvY29udHJvbEZsb3cvZmxvdzAudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdhOTFhMjUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL2NvbnRyb2xGbG93L2Zsb3cwLnR4dApAQCAtMCwwICsxIEBACiswOiBFTVBUWQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvY29udHJvbEZsb3cvZmxvdzEuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvY29udHJvbEZsb3cvZmxvdzEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44Mjg4ZTc3Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9jb250cm9sRmxvdy9mbG93MS5qYXZhCkBAIC0wLDAgKzEsMTAgQEAKKy8vIExvY2Fsc09yTXlJbnN0YW5jZUZpZWxkc0NvbnRyb2xGbG93UG9saWN5CitwdWJsaWMgY2xhc3MgYSB7CisgIHZvaWQgZigpIHs8Y2FyZXQ+CisgICAgaW50IGkgPSAwOworICAgIGlmIChpPT0wKSB7CisgICAgICBpID0gNTsKKyAgICAgIGkgPSA5OworICAgIH0KKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvY29udHJvbEZsb3cvZmxvdzEudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9jb250cm9sRmxvdy9mbG93MS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjI5NzEwZAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvY29udHJvbEZsb3cvZmxvdzEudHh0CkBAIC0wLDAgKzEsNSBAQAorMDogV1JJVEUgaQorMTogUkVBRCBpCisyOiBDT05EX0dPVE8gW0VORF0gNQorMzogV1JJVEUgaQorNDogV1JJVEUgaQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9jb250cm9sRmxvdy9mbG93MTAuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvY29udHJvbEZsb3cvZmxvdzEwLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGMyMGFmZQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvY29udHJvbEZsb3cvZmxvdzEwLmphdmEKQEAgLTAsMCArMSwxNyBAQAorLy8gTG9jYWxzT3JNeUluc3RhbmNlRmllbGRzQ29udHJvbEZsb3dQb2xpY3kKKworCitwdWJsaWMgY2xhc3MgZCB7CisgIHZvaWQgZihkW10gYXNwZWN0cykgeworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYXNwZWN0cy5sZW5ndGg7IGkrKykgezxjYXJldD4KKyAgICAgIGZpbmFsIGludCBsaW5lOworICAgICAgdHJ5IHsKKyAgICAgICAgbGluZSA9IEludGVnZXIucGFyc2VJbnQoIjIiKTsgIC8vIC8KKyAgICAgIH0KKyAgICAgIGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgICAgICBjb250aW51ZTsKKyAgICAgIH0KKyAgICB9CisgIH0KKworfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9jb250cm9sRmxvdy9mbG93MTAudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9jb250cm9sRmxvdy9mbG93MTAudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRhZWU5MjkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL2NvbnRyb2xGbG93L2Zsb3cxMC50eHQKQEAgLTAsMCArMSwxMSBAQAorMDogRU1QVFkKKzE6IENPTkRfVEhST1dfVE8gOAorMjogRU1QVFkKKzM6IFdSSVRFIGxpbmUKKzQ6IENPTkRfVEhST1dfVE8gOAorNTogQ09ORF9USFJPV19UTyA4Cis2OiBDT05EX1RIUk9XX1RPIDgKKzc6IEdPVE8gW0VORF0gMTEKKzg6IFdSSVRFIGUKKzk6IEdPVE8gW0VORF0gMTEKKzEwOiBHT1RPIFtFTkRdIDExClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9jb250cm9sRmxvdy9mbG93MTEuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvY29udHJvbEZsb3cvZmxvdzExLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWNhYTBiYQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvY29udHJvbEZsb3cvZmxvdzExLmphdmEKQEAgLTAsMCArMSwxMSBAQAorLy8gTG9jYWxzT3JNeUluc3RhbmNlRmllbGRzQ29udHJvbEZsb3dQb2xpY3kKKworCitwdWJsaWMgY2xhc3MgYSB7CisgIGludCBmKGJvb2xlYW4gYjEsIGJvb2xlYW4gYjIpIHs8Y2FyZXQ+CisgICAgd2hpbGUgKGIxIHx8IGIyKSB7CisgICAgfQorICAgIHJldHVybiAwOworICB9CisKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvY29udHJvbEZsb3cvZmxvdzExLnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvY29udHJvbEZsb3cvZmxvdzExLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMDQyMDYyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9jb250cm9sRmxvdy9mbG93MTEudHh0CkBAIC0wLDAgKzEsNyBAQAorMDogUkVBRCBiMQorMTogQ09ORF9HT1RPIFtFTkRdIDQKKzI6IFJFQUQgYjIKKzM6IENPTkRfR09UTyBbRU5EXSA2Cis0OiBFTVBUWQorNTogR09UTyBbRU5EXSAwCis2OiBHT1RPIFtFTkRdIDcgUkVUVVJOCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL2NvbnRyb2xGbG93L2Zsb3cxMi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9jb250cm9sRmxvdy9mbG93MTIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZjI5OTE5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9jb250cm9sRmxvdy9mbG93MTIuamF2YQpAQCAtMCwwICsxLDExIEBACisvLyBMb2NhbHNPck15SW5zdGFuY2VGaWVsZHNDb250cm9sRmxvd1BvbGljeQorCisKK3B1YmxpYyBjbGFzcyBhIHsKKyAgaW50IGYoYm9vbGVhbiBiMSwgYm9vbGVhbiBiMikgezxjYXJldD4KKyAgICBkbyB7CisgICAgfSB3aGlsZSAoYjEgfHwgYjIpOworICAgIHJldHVybiAwOworICB9CisKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvY29udHJvbEZsb3cvZmxvdzEyLnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvY29udHJvbEZsb3cvZmxvdzEyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NGViZjZiCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9jb250cm9sRmxvdy9mbG93MTIudHh0CkBAIC0wLDAgKzEsNiBAQAorMDogRU1QVFkKKzE6IFJFQUQgYjEKKzI6IENPTkRfR09UTyBbRU5EXSAwCiszOiBSRUFEIGIyCis0OiBDT05EX0dPVE8gW0VORF0gMAorNTogR09UTyBbRU5EXSA2IFJFVFVSTgpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9jb250cm9sRmxvdy9mbG93MTMuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvY29udHJvbEZsb3cvZmxvdzEzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWI1YTdkOQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvY29udHJvbEZsb3cvZmxvdzEzLmphdmEKQEAgLTAsMCArMSwyMiBAQAorLy8gTG9jYWxzT3JNeUluc3RhbmNlRmllbGRzQ29udHJvbEZsb3dQb2xpY3kKKworaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CisKK2ltcG9ydCBqYXZhLmlvLkVPRkV4Y2VwdGlvbjsKKworcHVibGljIGNsYXNzIGEgeworICAKKyAgaW50IGYoYm9vbGVhbiBiMSwgYm9vbGVhbiBiMikgezxjYXJldD4gICAgICAgIAorICAKKyAgdHJ5IHsKKyAgICAgICAgICAgIHRocm93IG5ldyBJT0V4Y2VwdGlvbigpOworICAgICAgICB9IGNhdGNoIChFT0ZFeGNlcHRpb24gZW9mKSB7CisgICAgICAgICAgICBlb2YucHJpbnRTdGFja1RyYWNlKCk7CisgICAgICAgIH0gY2F0Y2ggKElPRXhjZXB0aW9uIGlvKSB7CisgICAgICAgICAgICBpby5wcmludFN0YWNrVHJhY2UoKTsKKyAgICAgICAgfQorCisgICAgcmV0dXJuIDA7CisgIH0KKworfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9jb250cm9sRmxvdy9mbG93MTMudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9jb250cm9sRmxvdy9mbG93MTMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjliOTA4YjQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL2NvbnRyb2xGbG93L2Zsb3cxMy50eHQKQEAgLTAsMCArMSwxNSBAQAorMDogQ09ORF9USFJPV19UTyAxMAorMTogQ09ORF9USFJPV19UTyA2CisyOiBFTVBUWQorMzogQ09ORF9USFJPV19UTyAxMAorNDogVEhST1dfVE8gNgorNTogR09UTyBbRU5EXSAxNAorNjogV1JJVEUgaW8KKzc6IFJFQUQgaW8KKzg6IEVNUFRZCis5OiBHT1RPIFtFTkRdIDE0CisxMDogV1JJVEUgZW9mCisxMTogUkVBRCBlb2YKKzEyOiBFTVBUWQorMTM6IEdPVE8gW0VORF0gMTQKKzE0OiBHT1RPIFtFTkRdIDE1IFJFVFVSTgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvY29udHJvbEZsb3cvZmxvdzE0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL2NvbnRyb2xGbG93L2Zsb3cxNC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVhYzY1N2YKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL2NvbnRyb2xGbG93L2Zsb3cxNC5qYXZhCkBAIC0wLDAgKzEsMjAgQEAKKy8vIExvY2Fsc09yTXlJbnN0YW5jZUZpZWxkc0NvbnRyb2xGbG93UG9saWN5CisKKworCitwdWJsaWMgY2xhc3MgQiB7CisgICAgcHJvdGVjdGVkIE9iamVjdCBpbnZva2VOZXh0KE9iamVjdCBtaSkKKyAgICAgICB0aHJvd3MgRXhjZXB0aW9uCisgICAgezxjYXJldD4KKyAgICAgICAgICB0cnkgeworICAgICAgICAgICAgIHJldHVybiB0aGlzOworICAgICAgICAgIH0gZmluYWxseSB7CisgICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICB9IGZpbmFsbHkgeworICAgICAgICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisgICAgfQorCisKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvY29udHJvbEZsb3cvZmxvdzE0LnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvY29udHJvbEZsb3cvZmxvdzE0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OGEyM2Q4Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9jb250cm9sRmxvdy9mbG93MTQudHh0CkBAIC0wLDAgKzEsMzAgQEAKKzA6IENPTkRfVEhST1dfVE8gOQorMTogR09UTyBbRU5EXSA3IFJFVFVSTgorMjogQ09ORF9USFJPV19UTyA5CiszOiBDT05EX1RIUk9XX1RPIDkKKzQ6IEdPVE8gW0VORF0gNQorNTogQ0FMTCAxMQorNjogR09UTyBbRU5EXSAzMAorNzogQ0FMTCAxMQorODogR09UTyBbRU5EXSAzMCBSRVRVUk4KKzk6IENBTEwgMTEKKzEwOiBHT1RPIFtFTkRdIDI5CisxMTogQ09ORF9USFJPV19UTyAxOQorMTI6IEVNUFRZCisxMzogQ09ORF9USFJPV19UTyAxOQorMTQ6IEdPVE8gW0VORF0gMTUKKzE1OiBDQUxMIDIxCisxNjogR09UTyBbRU5EXSAyNgorMTc6IENBTEwgMjEKKzE4OiBHT1RPIFtFTkRdIDI3IFJFVFVSTgorMTk6IENBTEwgMjEKKzIwOiBHT1RPIFtFTkRdIDI1CisyMTogR09UTyBbRU5EXSAyMyBSRVRVUk4KKzIyOiBSRVRVUk4gRlJPTSAyMQorMjM6IFJFVFVSTiBGUk9NIDIxIFRPIDE4CisyNDogUkVUVVJOIEZST00gMjEgVE8gMjAKKzI1OiBUSFJPV19UTyAzMAorMjY6IFJFVFVSTiBGUk9NIDExCisyNzogUkVUVVJOIEZST00gMTEgVE8gOAorMjg6IFJFVFVSTiBGUk9NIDExIFRPIDEwCisyOTogVEhST1dfVE8gMzAKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL2NvbnRyb2xGbG93L2Zsb3cxNS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9jb250cm9sRmxvdy9mbG93MTUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MTBmNDRkCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9jb250cm9sRmxvdy9mbG93MTUuamF2YQpAQCAtMCwwICsxLDM3IEBACisvLyBMb2NhbHNPck15SW5zdGFuY2VGaWVsZHNDb250cm9sRmxvd1BvbGljeQorLy8gU0NSIDEyOTI2IAorCitpbXBvcnQgamF2YS5ybWkuUmVtb3RlRXhjZXB0aW9uOworCitwdWJsaWMgY2xhc3MgQiB7CisgICAgcHVibGljIE9iamVjdCBzaG93KE9iamVjdCBvYmopCisgICAgeworICAgICAgICB0cnkKKyAgICAgICAgeworICAgICAgICAgICAgdGhyb3cgbmV3IE51bGxQb2ludGVyRXhjZXB0aW9uKCk7CisgICAgICAgIH0KKyAgICAgICAgY2F0Y2ggKCBOdWxsUG9pbnRlckV4Y2VwdGlvbiBucGUgKQorICAgICAgICB7CisgICAgICAgIH0KKyAgICAgICAgZmluYWxseQorICAgICAgICB7PGNhcmV0PgorICAgICAgICAgICAgaWYgKCBvYmogIT0gbnVsbCApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdHJ5CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUmVtb3RlRXhjZXB0aW9uKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGNhdGNoICggUmVtb3RlRXhjZXB0aW9uIHJlICkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbiggcmUgKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZmluYWxseQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgb2JqID0gbnVsbDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG51bGw7CisgICAgfQorCit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL2NvbnRyb2xGbG93L2Zsb3cxNS50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL2NvbnRyb2xGbG93L2Zsb3cxNS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTFhYWViNwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvY29udHJvbEZsb3cvZmxvdzE1LnR4dApAQCAtMCwwICsxLDI3IEBACiswOiBSRUFEIG9iagorMTogQ09ORF9HT1RPIFtFTkRdIDI3CisyOiBDT05EX1RIUk9XX1RPIDkKKzM6IENPTkRfVEhST1dfVE8gMjAKKzQ6IEVNUFRZCis1OiBUSFJPV19UTyA5Cis2OiBDT05EX1RIUk9XX1RPIDIwCis3OiBDT05EX1RIUk9XX1RPIDIwCis4OiBHT1RPIFtFTkRdIDE2Cis5OiBXUklURSByZQorMTA6IENPTkRfVEhST1dfVE8gMjAKKzExOiBSRUFEIHJlCisxMjogRU1QVFkKKzEzOiBDT05EX1RIUk9XX1RPIDIwCisxNDogQ09ORF9USFJPV19UTyAyMAorMTU6IEdPVE8gW0VORF0gMTYKKzE2OiBDQUxMIDIyCisxNzogR09UTyBbRU5EXSAyNworMTg6IENBTEwgMjIKKzE5OiBHT1RPIFtFTkRdIDI3IFJFVFVSTgorMjA6IENBTEwgMjIKKzIxOiBHT1RPIFtFTkRdIDI2CisyMjogV1JJVEUgb2JqCisyMzogUkVUVVJOIEZST00gMjIKKzI0OiBSRVRVUk4gRlJPTSAyMiBUTyAxOQorMjU6IFJFVFVSTiBGUk9NIDIyIFRPIDIxCisyNjogVEhST1dfVE8gMjcKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL2NvbnRyb2xGbG93L2Zsb3cxNi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9jb250cm9sRmxvdy9mbG93MTYuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YzVhOGNhCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9jb250cm9sRmxvdy9mbG93MTYuamF2YQpAQCAtMCwwICsxLDIwIEBACisvLyBMb2NhbHNPck15SW5zdGFuY2VGaWVsZHNDb250cm9sRmxvd1BvbGljeQoraW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CisKK2NsYXNzIFRlc3RJZGVhOTM5IHsKKyAgICBwdWJsaWMgYm9vbGVhbiB0ZXN0KCkgdGhyb3dzIElPRXhjZXB0aW9uIHs8Y2FyZXQ+CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICByZXR1cm4gZ2V0YSgpOworICAgICAgICB9IGNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigpOworICAgICAgICB9IGZpbmFsbHkgeworICAgICAgICAgICAgZ2V0YSgpOworICAgICAgICB9CisgICAgfQorCisgICAgcHJpdmF0ZSBib29sZWFuIGdldGEoKSB0aHJvd3MgSU9FeGNlcHRpb24geworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKK30KKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9jb250cm9sRmxvdy9mbG93MTYudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9jb250cm9sRmxvdy9mbG93MTYudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQxZDgxZGMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL2NvbnRyb2xGbG93L2Zsb3cxNi50eHQKQEAgLTAsMCArMSwyOCBAQAorMDogQ09ORF9USFJPV19UTyA4CisxOiBDT05EX1RIUk9XX1RPIDE5CisyOiBFTVBUWQorMzogQ09ORF9USFJPV19UTyA4Cis0OiBHT1RPIFtFTkRdIDE3IFJFVFVSTgorNTogQ09ORF9USFJPV19UTyAxOQorNjogQ09ORF9USFJPV19UTyAxOQorNzogR09UTyBbRU5EXSAxNQorODogV1JJVEUgZQorOTogQ09ORF9USFJPV19UTyAxOQorMTA6IEVNUFRZCisxMTogVEhST1dfVE8gMTkKKzEyOiBDT05EX1RIUk9XX1RPIDE5CisxMzogQ09ORF9USFJPV19UTyAxOQorMTQ6IEdPVE8gW0VORF0gMTUKKzE1OiBDQUxMIDIxCisxNjogR09UTyBbRU5EXSAyOAorMTc6IENBTEwgMjEKKzE4OiBHT1RPIFtFTkRdIDI4IFJFVFVSTgorMTk6IENBTEwgMjEKKzIwOiBHT1RPIFtFTkRdIDI3CisyMTogRU1QVFkKKzIyOiBDT05EX1RIUk9XX1RPIDI2CisyMzogUkVUVVJOIEZST00gMjEKKzI0OiBSRVRVUk4gRlJPTSAyMSBUTyAxOAorMjU6IFJFVFVSTiBGUk9NIDIxIFRPIDIwCisyNjogUkVUVVJOIEZST00gMjEgVE8gMjAKKzI3OiBUSFJPV19UTyAyOApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvY29udHJvbEZsb3cvZmxvdzE3LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL2NvbnRyb2xGbG93L2Zsb3cxNy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI5YjlmMGEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL2NvbnRyb2xGbG93L2Zsb3cxNy5qYXZhCkBAIC0wLDAgKzEsMTAgQEAKKy8vIExvY2Fsc09yTXlJbnN0YW5jZUZpZWxkc0NvbnRyb2xGbG93UG9saWN5CitjbGFzcyBUZXN0Rm9yZWFjaCB7CisgIHs8Y2FyZXQ+CisgICAgU3RyaW5nW10gYXJncyA9IG5ldyBTdHJpbmdbMjU2XTsKKworICAgIGZvcihTdHJpbmcgcyA6IGFyZ3MpIHsKKyAgICAgIGZvbyhzKTsKKyAgICB9CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL2NvbnRyb2xGbG93L2Zsb3cxNy50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL2NvbnRyb2xGbG93L2Zsb3cxNy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGM2ZGMwZQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvY29udHJvbEZsb3cvZmxvdzE3LnR4dApAQCAtMCwwICsxLDggQEAKKzA6IEVNUFRZCisxOiBXUklURSBhcmdzCisyOiBSRUFEIGFyZ3MKKzM6IENPTkRfR09UTyBbRU5EXSA4Cis0OiBXUklURSBzCis1OiBSRUFEIHMKKzY6IEVNUFRZCis3OiBHT1RPIFtFTkRdIDMKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL2NvbnRyb2xGbG93L2Zsb3cxOC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9jb250cm9sRmxvdy9mbG93MTguamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOWFlZTczCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9jb250cm9sRmxvdy9mbG93MTguamF2YQpAQCAtMCwwICsxLDE3IEBACisvLyBMb2NhbHNPck15SW5zdGFuY2VGaWVsZHNDb250cm9sRmxvd1BvbGljeQoraW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CitpbXBvcnQgamF2YS5pby5PdXRwdXRTdHJlYW07CitwdWJsaWMgY2xhc3MgT3V0ZXIgeworICAgIHZvaWQgZihPdXRwdXRTdHJlYW0gd3JpdGVyKSB7ICA8Y2FyZXQ+CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgIHRocm93IG5ldyBJT0V4Y2VwdGlvbigpOworICAgICAgICAgICAgfSBmaW5hbGx5IHsKKyAgICAgICAgICAgICAgICB3cml0ZXIuY2xvc2UoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBjYXRjaCAoSU9FeGNlcHRpb24gZSkgeworICAgICAgICAgIGUuaGFzaENvZGUoKTsKKyAgICAgICAgfQorICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvY29udHJvbEZsb3cvZmxvdzE4LnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvY29udHJvbEZsb3cvZmxvdzE4LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kY2FmNzg2Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9jb250cm9sRmxvdy9mbG93MTgudHh0CkBAIC0wLDAgKzEsMjggQEAKKzA6IENPTkRfVEhST1dfVE8gMjQKKzE6IENPTkRfVEhST1dfVE8gMjQKKzI6IENPTkRfVEhST1dfVE8gMTIKKzM6IEVNUFRZCis0OiBUSFJPV19UTyAyNAorNTogQ09ORF9USFJPV19UTyAxMgorNjogQ09ORF9USFJPV19UTyAxMgorNzogR09UTyBbRU5EXSA4Cis4OiBDQUxMIDE0Cis5OiBHT1RPIFtFTkRdIDIzCisxMDogQ0FMTCAxNAorMTE6IEdPVE8gW0VORF0gMjggUkVUVVJOCisxMjogQ0FMTCAxNAorMTM6IEdPVE8gW0VORF0gMjIKKzE0OiBSRUFEIHdyaXRlcgorMTU6IEVNUFRZCisxNjogQ09ORF9USFJPV19UTyAyMQorMTc6IENPTkRfVEhST1dfVE8gMjEKKzE4OiBSRVRVUk4gRlJPTSAxNAorMTk6IFJFVFVSTiBGUk9NIDE0IFRPIDExCisyMDogUkVUVVJOIEZST00gMTQgVE8gMTMKKzIxOiBSRVRVUk4gRlJPTSAxNCBUTyAyNAorMjI6IFRIUk9XX1RPIDI4CisyMzogR09UTyBbRU5EXSAyOAorMjQ6IFdSSVRFIGUKKzI1OiBSRUFEIGUKKzI2OiBFTVBUWQorMjc6IEdPVE8gW0VORF0gMjgKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL2NvbnRyb2xGbG93L2Zsb3cyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL2NvbnRyb2xGbG93L2Zsb3cyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTgwY2IzZQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvY29udHJvbEZsb3cvZmxvdzIuamF2YQpAQCAtMCwwICsxLDkgQEAKKy8vIExvY2Fsc09yTXlJbnN0YW5jZUZpZWxkc0NvbnRyb2xGbG93UG9saWN5CitwdWJsaWMgY2xhc3MgYSB7CisgIHZvaWQgZihpbnQgaSkgezxjYXJldD4KKyAgICB3aGlsZSAoaT09MCkgeworICAgICAgaSA9IDU7CisgICAgICBpZiAoaT09MykgYnJlYWs7CisgICAgfQorICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9jb250cm9sRmxvdy9mbG93Mi50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL2NvbnRyb2xGbG93L2Zsb3cyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZmM2YmRhCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9jb250cm9sRmxvdy9mbG93Mi50eHQKQEAgLTAsMCArMSw3IEBACiswOiBSRUFEIGkKKzE6IENPTkRfR09UTyBbRU5EXSA3CisyOiBXUklURSBpCiszOiBSRUFEIGkKKzQ6IENPTkRfR09UTyBbRU5EXSA2Cis1OiBHT1RPIFtFTkRdIDcKKzY6IEdPVE8gW0VORF0gMApkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9jb250cm9sRmxvdy9mbG93My5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9jb250cm9sRmxvdy9mbG93My5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcwMTZlNjcKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL2NvbnRyb2xGbG93L2Zsb3czLmphdmEKQEAgLTAsMCArMSwxNyBAQAorLy8gTG9jYWxzT3JNeUluc3RhbmNlRmllbGRzQ29udHJvbEZsb3dQb2xpY3kKKworcHVibGljIGNsYXNzIGEgeworICB2b2lkIGYoaW50IGkpIHRocm93cyBFeGNlcHRpb24gezxjYXJldD4KKyAgICAgIGkgPSA1OworICAgICAgdHJ5IHsKKyAgICAgICAgZihpKTsKKyAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgIGkgPSAwOworICAgICAgfQorICAgICAgZmluYWxseSB7CisgICAgICAgIGkgPSA5OworICAgICAgfQorCisKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvY29udHJvbEZsb3cvZmxvdzMudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9jb250cm9sRmxvdy9mbG93My50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWNjYmRlOQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvY29udHJvbEZsb3cvZmxvdzMudHh0CkBAIC0wLDAgKzEsMzAgQEAKKzA6IFdSSVRFIGkKKzE6IENPTkRfVEhST1dfVE8gMTMKKzI6IENPTkRfVEhST1dfVE8gMTMKKzM6IENPTkRfVEhST1dfVE8gMjMKKzQ6IFJFQUQgaQorNTogRU1QVFkKKzY6IENPTkRfVEhST1dfVE8gMTMKKzc6IENPTkRfVEhST1dfVE8gMTMKKzg6IENPTkRfVEhST1dfVE8gMTMKKzk6IENPTkRfVEhST1dfVE8gMjMKKzEwOiBDT05EX1RIUk9XX1RPIDEzCisxMTogQ09ORF9USFJPV19UTyAyMworMTI6IEdPVE8gW0VORF0gMTkKKzEzOiBXUklURSBlCisxNDogQ09ORF9USFJPV19UTyAyMworMTU6IFdSSVRFIGkKKzE2OiBDT05EX1RIUk9XX1RPIDIzCisxNzogQ09ORF9USFJPV19UTyAyMworMTg6IEdPVE8gW0VORF0gMTkKKzE5OiBDQUxMIDI1CisyMDogR09UTyBbRU5EXSAzMAorMjE6IENBTEwgMjUKKzIyOiBHT1RPIFtFTkRdIDMwIFJFVFVSTgorMjM6IENBTEwgMjUKKzI0OiBHT1RPIFtFTkRdIDI5CisyNTogV1JJVEUgaQorMjY6IFJFVFVSTiBGUk9NIDI1CisyNzogUkVUVVJOIEZST00gMjUgVE8gMjIKKzI4OiBSRVRVUk4gRlJPTSAyNSBUTyAyNAorMjk6IFRIUk9XX1RPIDMwClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9jb250cm9sRmxvdy9mbG93NC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9jb250cm9sRmxvdy9mbG93NC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjliMzhmYWYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL2NvbnRyb2xGbG93L2Zsb3c0LmphdmEKQEAgLTAsMCArMSwxMSBAQAorLy8gTG9jYWxzT3JNeUluc3RhbmNlRmllbGRzQ29udHJvbEZsb3dQb2xpY3kKKworcHVibGljIGNsYXNzIGEgeworICB2b2lkIGYoaW50IGkpIHRocm93cyBFeGNlcHRpb24gezxjYXJldD4KKyAgICAgICAgaW50IGsgPTA7CisgICAgICAgIHN3aXRjaCAoaykgeworICAgICAgICAgICAgLy9jYXNlIDA6CisgICAgICAgIH0KKworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9jb250cm9sRmxvdy9mbG93NC50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL2NvbnRyb2xGbG93L2Zsb3c0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OGRmY2M2Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9jb250cm9sRmxvdy9mbG93NC50eHQKQEAgLTAsMCArMSw0IEBACiswOiBXUklURSBrCisxOiBSRUFEIGsKKzI6IEdPVE8gW0VORF0gMworCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL2NvbnRyb2xGbG93L2Zsb3c1LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL2NvbnRyb2xGbG93L2Zsb3c1LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzY4MGFlMwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvY29udHJvbEZsb3cvZmxvdzUuamF2YQpAQCAtMCwwICsxLDEzIEBACisvLyBMb2NhbHNPck15SW5zdGFuY2VGaWVsZHNDb250cm9sRmxvd1BvbGljeQorCitwdWJsaWMgY2xhc3MgYSB7CisgIHZvaWQgZihpbnQgaSkgdGhyb3dzIEV4Y2VwdGlvbiB7PGNhcmV0PgorICAgICAgICBpbnQgayA9MDsKKyAgICAgICAgc3dpdGNoIChrKSB7CisgICAgICAgICAgICBjYXNlIDA6IGs9MDsgYnJlYWs7CisgICAgICAgICAgICBjYXNlIDE6IGs9MTsgYnJlYWs7CisgICAgICAgICAgICBkZWZhdWx0OiBrPTk7IGJyZWFrOworICAgICAgICB9CisKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvY29udHJvbEZsb3cvZmxvdzUudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9jb250cm9sRmxvdy9mbG93NS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDY4OGNlNAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvY29udHJvbEZsb3cvZmxvdzUudHh0CkBAIC0wLDAgKzEsMTIgQEAKKzA6IFdSSVRFIGsKKzE6IFJFQUQgaworMjogQ09ORF9HT1RPIFtFTkRdIDUKKzM6IENPTkRfR09UTyBbRU5EXSA3Cis0OiBDT05EX0dPVE8gW0VORF0gOQorNTogV1JJVEUgaworNjogR09UTyBbRU5EXSAxMQorNzogV1JJVEUgaworODogR09UTyBbRU5EXSAxMQorOTogV1JJVEUgaworMTA6IEdPVE8gW0VORF0gMTEKKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9jb250cm9sRmxvdy9mbG93Ni5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9jb250cm9sRmxvdy9mbG93Ni5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIzM2ZiM2IKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL2NvbnRyb2xGbG93L2Zsb3c2LmphdmEKQEAgLTAsMCArMSwxMyBAQAorLy8gTG9jYWxzT3JNeUluc3RhbmNlRmllbGRzQ29udHJvbEZsb3dQb2xpY3kKKworcHVibGljIGNsYXNzIGEgeworICBib29sZWFuIGM7CisgIHZvaWQgZihpbnQgaSkgdGhyb3dzIEV4Y2VwdGlvbiB7PGNhcmV0PgorICAgICAgICBmb3IgKGludCBpPTA7IGk8MTAwOyBpKyspIHsKKyAgICAgICAgICAgIGlmIChpPT0wKSBicmVhazsKKyAgICAgICAgICAgIGlmIChpPT0xKSBjb250aW51ZTsKKyAgICAgICAgICAgIGMgPSAhYzsKKyAgICAgICAgfQorCisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL2NvbnRyb2xGbG93L2Zsb3c2LnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvY29udHJvbEZsb3cvZmxvdzYudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAxMmY2N2EKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL2NvbnRyb2xGbG93L2Zsb3c2LnR4dApAQCAtMCwwICsxLDE1IEBACiswOiBXUklURSBpCisxOiBSRUFEIGkKKzI6IENPTkRfR09UTyBbRU5EXSAxNAorMzogUkVBRCBpCis0OiBDT05EX0dPVE8gW0VORF0gNgorNTogR09UTyBbRU5EXSAxNAorNjogUkVBRCBpCis3OiBDT05EX0dPVE8gW0VORF0gOQorODogR09UTyBbRU5EXSAxMQorOTogUkVBRCBjCisxMDogV1JJVEUgYworMTE6IFJFQUQgaQorMTI6IFdSSVRFIGkKKzEzOiBHT1RPIFtFTkRdIDEKKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9jb250cm9sRmxvdy9mbG93Ny5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9jb250cm9sRmxvdy9mbG93Ny5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc0OTQyMzYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL2NvbnRyb2xGbG93L2Zsb3c3LmphdmEKQEAgLTAsMCArMSwxMSBAQAorLy8gTG9jYWxzT3JNeUluc3RhbmNlRmllbGRzQ29udHJvbEZsb3dQb2xpY3kKKworcHVibGljIGNsYXNzIGEgeworICBib29sZWFuIGM7CisgIHZvaWQgZihpbnQgaSkgdGhyb3dzIEV4Y2VwdGlvbiB7PGNhcmV0PgorICAgICAgICBkbyB7CisgICAgICAgICAgICBjPSFjOworICAgICAgICB9IHdoaWxlICghYyk7CisKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvY29udHJvbEZsb3cvZmxvdzcudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9jb250cm9sRmxvdy9mbG93Ny50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGM3YmE5YgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvY29udHJvbEZsb3cvZmxvdzcudHh0CkBAIC0wLDAgKzEsNSBAQAorMDogUkVBRCBjCisxOiBXUklURSBjCisyOiBSRUFEIGMKKzM6IENPTkRfR09UTyBbRU5EXSAwCisKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvY29udHJvbEZsb3cvZmxvdzguamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvY29udHJvbEZsb3cvZmxvdzguamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMjA1MjU4Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9jb250cm9sRmxvdy9mbG93OC5qYXZhCkBAIC0wLDAgKzEsMTIgQEAKKy8vIExvY2Fsc09yTXlJbnN0YW5jZUZpZWxkc0NvbnRyb2xGbG93UG9saWN5CisKK3B1YmxpYyBjbGFzcyBhIHsKKyAgYm9vbGVhbiBjOworICB2b2lkIGYoaW50IGkpIHRocm93cyBFeGNlcHRpb24gezxjYXJldD4KKyAgICAgICAgZG8geworICAgICAgICAgICAgaWYgKGMpIGJyZWFrOworICAgICAgICAgICAgYz0hYzsKKyAgICAgICAgICAgIGlmIChjKSBjb250aW51ZTsKKyAgICAgICAgfSB3aGlsZSAoIWMpOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9jb250cm9sRmxvdy9mbG93OC50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL2NvbnRyb2xGbG93L2Zsb3c4LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZTRmYTMwCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9jb250cm9sRmxvdy9mbG93OC50eHQKQEAgLTAsMCArMSwxMCBAQAorMDogUkVBRCBjCisxOiBDT05EX0dPVE8gW0VORF0gMworMjogR09UTyBbRU5EXSAxMAorMzogUkVBRCBjCis0OiBXUklURSBjCis1OiBSRUFEIGMKKzY6IENPTkRfR09UTyBbRU5EXSA4Cis3OiBHT1RPIFtFTkRdIDgKKzg6IFJFQUQgYworOTogQ09ORF9HT1RPIFtFTkRdIDAKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvY29udHJvbEZsb3cvZmxvdzkuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvY29udHJvbEZsb3cvZmxvdzkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZTI0ZDJlCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9jb250cm9sRmxvdy9mbG93OS5qYXZhCkBAIC0wLDAgKzEsMjAgQEAKKy8vIExvY2Fsc09yTXlJbnN0YW5jZUZpZWxkc0NvbnRyb2xGbG93UG9saWN5CisKKworaW1wb3J0IGphdmEuaW8uRmlsZU5vdEZvdW5kRXhjZXB0aW9uOworaW1wb3J0IGphdmEuaW8uRmlsZVJlYWRlcjsKKworY2xhc3MgRXhjZXB0aW9uVGVzdENhc2UgeworCisgICAgdm9pZCBjZjEoaW50IGkpIHs8Y2FyZXQ+CisgICAgICBPYmplY3QgbzsKKyAgICAgIHRyeSB7CisgICAgICAgIG8gPSBuZXcgRmlsZVJlYWRlcigiIik7ICAgLy8KKyAgICAgIH0KKyAgICAgIGNhdGNoIChGaWxlTm90Rm91bmRFeGNlcHRpb24gZSkgeyAvLworICAgICAgfQorICAgICAgZmluYWxseSB7CisgICAgICAgIGlmIChpPT0xKSByZXR1cm47CisgICAgICB9CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvY29udHJvbEZsb3cvZmxvdzkudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9jb250cm9sRmxvdy9mbG93OS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjc2NGQ4ZAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvY29udHJvbEZsb3cvZmxvdzkudHh0CkBAIC0wLDAgKzEsMjcgQEAKKzA6IEVNUFRZCisxOiBDT05EX1RIUk9XX1RPIDkKKzI6IENPTkRfVEhST1dfVE8gMTgKKzM6IENPTkRfVEhST1dfVE8gOQorNDogV1JJVEUgbworNTogQ09ORF9USFJPV19UTyA5Cis2OiBDT05EX1RIUk9XX1RPIDE4Cis3OiBDT05EX1RIUk9XX1RPIDE4Cis4OiBHT1RPIFtFTkRdIDE0Cis5OiBXUklURSBlCisxMDogQ09ORF9USFJPV19UTyAxOAorMTE6IEVNUFRZCisxMjogQ09ORF9USFJPV19UTyAxOAorMTM6IEdPVE8gW0VORF0gMTQKKzE0OiBDQUxMIDIwCisxNTogR09UTyBbRU5EXSAyNworMTY6IENBTEwgMjAKKzE3OiBHT1RPIFtFTkRdIDI3IFJFVFVSTgorMTg6IENBTEwgMjAKKzE5OiBHT1RPIFtFTkRdIDI2CisyMDogUkVBRCBpCisyMTogQ09ORF9HT1RPIFtFTkRdIDIzCisyMjogR09UTyBbRU5EXSAyNCBSRVRVUk4KKzIzOiBSRVRVUk4gRlJPTSAyMAorMjQ6IFJFVFVSTiBGUk9NIDIwIFRPIDE3CisyNTogUkVUVVJOIEZST00gMjAgVE8gMTkKKzI2OiBUSFJPV19UTyAyNwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvY29udHJvbEZsb3cvZmxvd0FuZC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9jb250cm9sRmxvdy9mbG93QW5kLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmY1MjA0NgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvY29udHJvbEZsb3cvZmxvd0FuZC5qYXZhCkBAIC0wLDAgKzEsMTIgQEAKKy8vIExvY2Fsc09yTXlJbnN0YW5jZUZpZWxkc0NvbnRyb2xGbG93UG9saWN5CisKK2ltcG9ydCBqYXZhLmlvLkZpbGVOb3RGb3VuZEV4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLmlvLkZpbGVSZWFkZXI7CisKK2NsYXNzIEV4Y2VwdGlvblRlc3RDYXNlIHsKKworCXB1YmxpYyB2b2lkIGVuc3VyZUFsbEludmFsaWRhdGVUYXNrc0NvbXBsZXRlZChib29sZWFuIGEsIGJvb2xlYW4gYiwgYm9vbGVhbiBjKSB7PGNhcmV0PgorCQlmaW5hbCBib29sZWFuIGRvUHJvZ3Jlc3NUaGluZzsKKwkJZG9Qcm9ncmVzc1RoaW5nID0gYyAmJiBhICYmIGI7CisJfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvY29udHJvbEZsb3cvZmxvd0FuZC50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL2NvbnRyb2xGbG93L2Zsb3dBbmQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY1YWUwNDcKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL2NvbnRyb2xGbG93L2Zsb3dBbmQudHh0CkBAIC0wLDAgKzEsNyBAQAorMDogRU1QVFkKKzE6IFJFQUQgYworMjogQ09ORF9HT1RPIFtFTkRdIDYKKzM6IFJFQUQgYQorNDogQ09ORF9HT1RPIFtFTkRdIDYKKzU6IFJFQUQgYgorNjogV1JJVEUgZG9Qcm9ncmVzc1RoaW5nClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9jb250cm9sRmxvdy9mbG93QW5kMi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9jb250cm9sRmxvdy9mbG93QW5kMi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZhMzBmNTIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL2NvbnRyb2xGbG93L2Zsb3dBbmQyLmphdmEKQEAgLTAsMCArMSwxNSBAQAorLy8gTG9jYWxzT3JNeUluc3RhbmNlRmllbGRzQ29udHJvbEZsb3dQb2xpY3kKKworY2xhc3MgRXhjZXB0aW9uVGVzdENhc2UgeworCXB1YmxpYyBTdHJpbmcgZ2V0SW5kZXhpbmdMZXhlcihmaW5hbCBib29sZWFuIGZpbGUsIGJvb2xlYW4gYjEsIGJvb2xlYW4gYjIpIHs8Y2FyZXQ+CisJCVN0cmluZyBoaWdobGlnaHRlcjsKKworCQlpZiAoZmlsZSAmJiBiMSAmJiBiMikgeworCQkJaGlnaGxpZ2h0ZXIgPSAidGhlbiI7CisJCX0KKwkJZWxzZSB7CisJCQloaWdobGlnaHRlciA9ICJlbHNlIjsKKwkJfQorCQlyZXR1cm4gaGlnaGxpZ2h0ZXI7CisJfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvY29udHJvbEZsb3cvZmxvd0FuZDIudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9jb250cm9sRmxvdy9mbG93QW5kMi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjAzZjViNgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvY29udHJvbEZsb3cvZmxvd0FuZDIudHh0CkBAIC0wLDAgKzEsMTIgQEAKKzA6IEVNUFRZCisxOiBSRUFEIGZpbGUKKzI6IENPTkRfR09UTyBbRUxTRV0gOQorMzogUkVBRCBiMQorNDogQ09ORF9HT1RPIFtFTFNFXSA5Cis1OiBSRUFEIGIyCis2OiBDT05EX0dPVE8gW0VMU0VdIDkKKzc6IFdSSVRFIGhpZ2hsaWdodGVyCis4OiBHT1RPIFtFTkRdIDEwCis5OiBXUklURSBoaWdobGlnaHRlcgorMTA6IFJFQUQgaGlnaGxpZ2h0ZXIKKzExOiBHT1RPIFtFTkRdIDEyIFJFVFVSTgpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9jb250cm9sRmxvdy9mbG93QW5kMy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9jb250cm9sRmxvdy9mbG93QW5kMy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjliN2FjMGYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL2NvbnRyb2xGbG93L2Zsb3dBbmQzLmphdmEKQEAgLTAsMCArMSw5IEBACisvLyBMb2NhbHNPck15SW5zdGFuY2VGaWVsZHNDb250cm9sRmxvd1BvbGljeQorCitjbGFzcyBjIHsKKyAgU3RyaW5nIGNvbnRhaW5lcjsKKyAgdm9pZCBmKCkgezxjYXJldD4KKyAgICBTdHJpbmcgcGFyZW50OworICAgIGlmIChjb250YWluZXIgPT0gbnVsbCAmJiAocGFyZW50ID0gbnVsbCkgIT0gbnVsbCAmJiBwYXJlbnQgIT0gbnVsbCkge30KKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvY29udHJvbEZsb3cvZmxvd0FuZDMudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9jb250cm9sRmxvdy9mbG93QW5kMy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjllODM5MQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvY29udHJvbEZsb3cvZmxvd0FuZDMudHh0CkBAIC0wLDAgKzEsOCBAQAorMDogRU1QVFkKKzE6IFJFQUQgY29udGFpbmVyCisyOiBDT05EX0dPVE8gW0VORF0gOAorMzogV1JJVEUgcGFyZW50Cis0OiBDT05EX0dPVE8gW0VORF0gOAorNTogUkVBRCBwYXJlbnQKKzY6IENPTkRfR09UTyBbRU5EXSA4Cis3OiBFTVBUWQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvY29udHJvbEZsb3cvZmxvd0NvbmRpdGlvbmFsLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL2NvbnRyb2xGbG93L2Zsb3dDb25kaXRpb25hbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZiOWZkOTEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL2NvbnRyb2xGbG93L2Zsb3dDb25kaXRpb25hbC5qYXZhCkBAIC0wLDAgKzEsMTAgQEAKKy8vIExvY2Fsc09yTXlJbnN0YW5jZUZpZWxkc0NvbnRyb2xGbG93UG9saWN5CisKK2NsYXNzIEV4Y2VwdGlvblRlc3RDYXNlIHsKKyAgIHZvaWQgZihib29sZWFuIGEsIGJvb2xlYW4gYikgezxjYXJldD4KKyAgICAgICAgaW50IG47CisgICAgICAgIGlmICgoYSB8fCBhKSAmJiAobiA9IDApID49IDIpIHsKKyAgICAgICAgICAgIG4rKzsgICAvLworICAgICAgICB9CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvY29udHJvbEZsb3cvZmxvd0NvbmRpdGlvbmFsLnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvY29udHJvbEZsb3cvZmxvd0NvbmRpdGlvbmFsLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mM2U3YTg4Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9jb250cm9sRmxvdy9mbG93Q29uZGl0aW9uYWwudHh0CkBAIC0wLDAgKzEsOSBAQAorMDogRU1QVFkKKzE6IFJFQUQgYQorMjogQ09ORF9HT1RPIFtFTkRdIDUKKzM6IFJFQUQgYQorNDogQ09ORF9HT1RPIFtFTkRdIDkKKzU6IFdSSVRFIG4KKzY6IENPTkRfR09UTyBbRU5EXSA5Cis3OiBSRUFEIG4KKzg6IFdSSVRFIG4KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvY29udHJvbEZsb3cvZmxvd05lc3RlZENvbmRpdGlvbmFsLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL2NvbnRyb2xGbG93L2Zsb3dOZXN0ZWRDb25kaXRpb25hbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEwOThlMmUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL2NvbnRyb2xGbG93L2Zsb3dOZXN0ZWRDb25kaXRpb25hbC5qYXZhCkBAIC0wLDAgKzEsMTUgQEAKKy8vIExvY2Fsc09yTXlJbnN0YW5jZUZpZWxkc0NvbnRyb2xGbG93UG9saWN5CisKK2NsYXNzIE15VGVzdCAgeworICAgIHZvaWQgZihPYmplY3QgbywgbG9uZyBjaGlsZHJlblN0YW1wLCBPYmplY3QgbzIpIHs8Y2FyZXQ+CisgICAgICAgIGxvbmcgY3VycmVudFN0YW1wOworICAgICAgICBpZiAoKG8gaW5zdGFuY2VvZiBTdHJpbmcgJiYgY2hpbGRyZW5TdGFtcCAhPSAoY3VycmVudFN0YW1wID0gMCkpCisgICAgICAgICAgICAgICAgfHwKKyAgICAgICAgICAgICAgKG8yIGluc3RhbmNlb2YgSW50ZWdlciAmJiBjaGlsZHJlblN0YW1wICE9IChjdXJyZW50U3RhbXAgPSAxKSkKKyAgICAgICAgICAgKQorICAgICAgICB7CisgICAgICAgICAgY2hpbGRyZW5TdGFtcCA9IGN1cnJlbnRTdGFtcDsKKyAgICAgICAgfQorICAgIH0KKworfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9jb250cm9sRmxvdy9mbG93TmVzdGVkQ29uZGl0aW9uYWwudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9jb250cm9sRmxvdy9mbG93TmVzdGVkQ29uZGl0aW9uYWwudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRjZThhYmYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL2NvbnRyb2xGbG93L2Zsb3dOZXN0ZWRDb25kaXRpb25hbC50eHQKQEAgLTAsMCArMSwxMyBAQAorMDogRU1QVFkKKzE6IFJFQUQgbworMjogQ09ORF9HT1RPIFtFTkRdIDYKKzM6IFJFQUQgY2hpbGRyZW5TdGFtcAorNDogV1JJVEUgY3VycmVudFN0YW1wCis1OiBDT05EX0dPVE8gW1RIRU5dIDExCis2OiBSRUFEIG8yCis3OiBDT05EX0dPVE8gW0VORF0gMTMKKzg6IFJFQUQgY2hpbGRyZW5TdGFtcAorOTogV1JJVEUgY3VycmVudFN0YW1wCisxMDogQ09ORF9HT1RPIFtFTkRdIDEzCisxMTogUkVBRCBjdXJyZW50U3RhbXAKKzEyOiBXUklURSBjaGlsZHJlblN0YW1wClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9mb3JtYXR0ZXIvamF2YS8xLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL2Zvcm1hdHRlci9qYXZhLzEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMDkxNjYyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9mb3JtYXR0ZXIvamF2YS8xLmphdmEKQEAgLTAsMCArMSw1IEBACisgICAgIGNsYXNzIFRlc3QgeworICAgICBjbGFzcyBJbm5lcnsKKyAgICAgaW50IG15RmllbGQ7CisgICAgIH0KKyAgICAgfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvZm9ybWF0dGVyL2phdmEvMV9hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9mb3JtYXR0ZXIvamF2YS8xX2FmdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzdiMjg5NAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvZm9ybWF0dGVyL2phdmEvMV9hZnRlci5qYXZhCkBAIC0wLDAgKzEsNSBAQAorICAgICBjbGFzcyBUZXN0IHsKKyAgICAgY2xhc3MgSW5uZXJ7CisgICAgICAgICBpbnQgbXlGaWVsZDsKKyAgICAgfQorICAgICB9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9mb3JtYXR0ZXIvamF2YS8yLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL2Zvcm1hdHRlci9qYXZhLzIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNjM1MTFmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9mb3JtYXR0ZXIvamF2YS8yLmphdmEKQEAgLTAsMCArMSw2IEBACitjbGFzcyBGb28geworICAgIHZvaWQgZm9vKCkgeworICAgICAgICBmb28oCisgICAgICAgICk7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvZm9ybWF0dGVyL2phdmEvMl9hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9mb3JtYXR0ZXIvamF2YS8yX2FmdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjYzNTExZgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvZm9ybWF0dGVyL2phdmEvMl9hZnRlci5qYXZhCkBAIC0wLDAgKzEsNiBAQAorY2xhc3MgRm9vIHsKKyAgICB2b2lkIGZvbygpIHsKKyAgICAgICAgZm9vKAorICAgICAgICApOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL2Zvcm1hdHRlci9qYXZhLzMuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvZm9ybWF0dGVyL2phdmEvMy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc4NGE4ODAKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL2Zvcm1hdHRlci9qYXZhLzMuamF2YQpAQCAtMCwwICsxLDE1IEBACitwdWJsaWMgY2xhc3MgQSB7CisgICAgcHJpdmF0ZSB2b2lkIGZvbygpIHsKKyAgICAgICAgUnVubmFibGUgYSA9IG5ldyBSdW5uYWJsZSgpIHsKKyAgICAgICAgICAgIHByaXZhdGUgaW50IGE7CisKKyAgICAgICAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKKyAgICAgICAgICAgICAgICBuZXdNZXRob2QoKTsKKyAgICAgICAgICAgIH0KKworcHJpdmF0ZSB2b2lkIG5ld01ldGhvZCgpIHsKKyAgICBhID0gMjsKK30KKyAgICAgICAgfTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9mb3JtYXR0ZXIvamF2YS8zX2FmdGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL2Zvcm1hdHRlci9qYXZhLzNfYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNzI5MTc0Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9mb3JtYXR0ZXIvamF2YS8zX2FmdGVyLmphdmEKQEAgLTAsMCArMSwxNSBAQAorcHVibGljIGNsYXNzIEEgeworICAgIHByaXZhdGUgdm9pZCBmb28oKSB7CisgICAgICAgIFJ1bm5hYmxlIGEgPSBuZXcgUnVubmFibGUoKSB7CisgICAgICAgICAgICBwcml2YXRlIGludCBhOworCisgICAgICAgICAgICBwdWJsaWMgdm9pZCBydW4oKSB7CisgICAgICAgICAgICAgICAgbmV3TWV0aG9kKCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHByaXZhdGUgdm9pZCBuZXdNZXRob2QoKSB7CisgICAgICAgICAgICAgICAgYSA9IDI7CisgICAgICAgICAgICB9CisgICAgICAgIH07CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvZm9ybWF0dGVyL2phdmEvNC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9mb3JtYXR0ZXIvamF2YS80LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmUxNWJjZGMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL2Zvcm1hdHRlci9qYXZhLzQuamF2YQpAQCAtMCwwICsxLDExIEBACitjbGFzcyBGb28gewordm9pZCBmb28oKXsKK3RyeSB7CisgICAgLy8gY29tbWVudCBiZWZvcmUKKyAgICBnKCk7CisgICAgLy8gY29tbWVudCBhZnRlcgorfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICBlLnByaW50U3RhY2tUcmFjZSgpOyAgLy9UbyBjaGFuZ2UgYm9keSBvZiBjYXRjaCBzdGF0ZW1lbnQgdXNlIEZpbGUgfCBTZXR0aW5ncyB8IEZpbGUgVGVtcGxhdGVzLgorfQorfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvZm9ybWF0dGVyL2phdmEvNF9hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9mb3JtYXR0ZXIvamF2YS80X2FmdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmZmNTFhZAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvZm9ybWF0dGVyL2phdmEvNF9hZnRlci5qYXZhCkBAIC0wLDAgKzEsMTEgQEAKK2NsYXNzIEZvbyB7Cit2b2lkIGZvbygpeworICAgIHRyeSB7CisgICAgICAgIC8vIGNvbW1lbnQgYmVmb3JlCisgICAgICAgIGcoKTsKKyAgICAgICAgLy8gY29tbWVudCBhZnRlcgorICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7ICAvL1RvIGNoYW5nZSBib2R5IG9mIGNhdGNoIHN0YXRlbWVudCB1c2UgRmlsZSB8IFNldHRpbmdzIHwgRmlsZSBUZW1wbGF0ZXMuCisgICAgfQorfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvZm9ybWF0dGVyL2phdmEvQWxpZ25Bc3NpZ25tZW50LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL2Zvcm1hdHRlci9qYXZhL0FsaWduQXNzaWdubWVudC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNlZTU1YTUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL2Zvcm1hdHRlci9qYXZhL0FsaWduQXNzaWdubWVudC5qYXZhCkBAIC0wLDAgKzEsOCBAQAorY2xhc3MgRm9veworICAgIHZvaWQgZm9vKCkgeworICAgIHNvbWVWYXJpYWJsZSA9IHggPQorICAgICAgICAgICAgeCArCisgICAgICAgICAgICB5OworICAgIAorICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL2Zvcm1hdHRlci9qYXZhL0FsaWduQXNzaWdubWVudF9hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9mb3JtYXR0ZXIvamF2YS9BbGlnbkFzc2lnbm1lbnRfYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMWM1MzEwCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9mb3JtYXR0ZXIvamF2YS9BbGlnbkFzc2lnbm1lbnRfYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDggQEAKK2NsYXNzIEZvbyB7CisgICAgdm9pZCBmb28oKSB7CisgICAgICAgIHNvbWVWYXJpYWJsZSA9IHggPQorICAgICAgICAgICAgICAgIHggKworICAgICAgICAgICAgICAgIHk7CisKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9mb3JtYXR0ZXIvamF2YS9BbGlnbkZvci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9mb3JtYXR0ZXIvamF2YS9BbGlnbkZvci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc1Y2E4OGYwCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9mb3JtYXR0ZXIvamF2YS9BbGlnbkZvci5qYXZhCkBAIC0wLDAgKzEsMTAgQEAKK2NsYXNzIEZvbyB7CisgICAgdm9pZCBmb28oKXsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkgPCA1OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpKyspIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb1NvbWV0aGluZyhpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgCisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvZm9ybWF0dGVyL2phdmEvQWxpZ25Gb3JfYWZ0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvZm9ybWF0dGVyL2phdmEvQWxpZ25Gb3JfYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNzg2MmRjCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9mb3JtYXR0ZXIvamF2YS9BbGlnbkZvcl9hZnRlci5qYXZhCkBAIC0wLDAgKzEsMTAgQEAKK2NsYXNzIEZvbyB7CisgICAgdm9pZCBmb28oKSB7CisgICAgICAgIGZvciAoaW50IGkgPSAwOworICAgICAgICAgICAgIGkgPCA1OworICAgICAgICAgICAgIGkrKykgeworICAgICAgICAgICAgZG9Tb21ldGhpbmcoaSk7CisgICAgICAgIH0KKworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL2Zvcm1hdHRlci9qYXZhL0FsaWduTXVsdGlMaW5lLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL2Zvcm1hdHRlci9qYXZhL0FsaWduTXVsdGlMaW5lLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGI1MmY1ZAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvZm9ybWF0dGVyL2phdmEvQWxpZ25NdWx0aUxpbmUuamF2YQpAQCAtMCwwICsxLDcgQEAKK2NsYXNzIEZvb3sKKyAgICBwdWJsaWMgdm9pZCBmb28oKXsKKyAgICAgICAgaW50IHNvbWVWYXJpYWJsZSA9ICh5ICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB6CisgICAgICAgICk7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvZm9ybWF0dGVyL2phdmEvQWxpZ25NdWx0aUxpbmVfYWZ0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvZm9ybWF0dGVyL2phdmEvQWxpZ25NdWx0aUxpbmVfYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNGE2MjM1Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9mb3JtYXR0ZXIvamF2YS9BbGlnbk11bHRpTGluZV9hZnRlci5qYXZhCkBAIC0wLDAgKzEsNyBAQAorY2xhc3MgRm9vIHsKKyAgICBwdWJsaWMgdm9pZCBmb28oKSB7CisgICAgICAgIGludCBzb21lVmFyaWFibGUgPSAoeSArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgegorICAgICAgICApOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL2Zvcm1hdHRlci9qYXZhL0Fub255bW91c0lubmVyMi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9mb3JtYXR0ZXIvamF2YS9Bbm9ueW1vdXNJbm5lcjIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZGJjMjlmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9mb3JtYXR0ZXIvamF2YS9Bbm9ueW1vdXNJbm5lcjIuamF2YQpAQCAtMCwwICsxLDcgQEAKK2NsYXNzIEEgeworICAgIEEgSU1QTCA9IG5ldyBBKCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgZihib29sZWFuIGIpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFyKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgIH07Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL2Zvcm1hdHRlci9qYXZhL0Fub255bW91c0lubmVyMl9hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9mb3JtYXR0ZXIvamF2YS9Bbm9ueW1vdXNJbm5lcjJfYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YzkyZTk5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9mb3JtYXR0ZXIvamF2YS9Bbm9ueW1vdXNJbm5lcjJfYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDcgQEAKK2NsYXNzIEEgeworICAgIEEgSU1QTCA9IG5ldyBBKCkgeworICAgICAgICB2b2lkIGYoYm9vbGVhbiBiKSB7CisgICAgICAgICAgICBiYXIoKTsKKyAgICAgICAgfQorICAgIH07Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL2Zvcm1hdHRlci9qYXZhL0Fub255bW91c0lubmVyQ2xhc3Nlcy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9mb3JtYXR0ZXIvamF2YS9Bbm9ueW1vdXNJbm5lckNsYXNzZXMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZjliODQ3Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9mb3JtYXR0ZXIvamF2YS9Bbm9ueW1vdXNJbm5lckNsYXNzZXMuamF2YQpAQCAtMCwwICsxLDE3IEBACitwdWJsaWMgY2xhc3MgQSB7CisgICAgdm9pZCBmKCkgeworICAgICAgICBuZXcgTXkoKSB7CisgICAgICAgIHB1YmxpYyB2b2lkIGYoKSB7CisgICAgICAgICAgICBpbnQgaSA9IDk7CisgICAgICAgICAgICBpbnQgaiA9IDk7CisgICAgICAgIH0KKyAgICB9OworICAgICAgICBuZXcgTXkoKSB7CisgICAgICAgIHB1YmxpYyB2b2lkIGYoKSB7CisgICAgICAgICAgICBsKCk7CisgICAgICAgICAgICBsKCk7CisgICAgICAgIH0KKyAgICB9OworICAgIH0KKworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvZm9ybWF0dGVyL2phdmEvQW5vbnltb3VzSW5uZXJDbGFzc2VzX2FmdGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL2Zvcm1hdHRlci9qYXZhL0Fub255bW91c0lubmVyQ2xhc3Nlc19hZnRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ5YjVhMWMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL2Zvcm1hdHRlci9qYXZhL0Fub255bW91c0lubmVyQ2xhc3Nlc19hZnRlci5qYXZhCkBAIC0wLDAgKzEsMTcgQEAKK3B1YmxpYyBjbGFzcyBBIHsKKyAgICB2b2lkIGYoKSB7CisgICAgICAgIG5ldyBNeSgpIHsKKyAgICAgICAgICAgIHB1YmxpYyB2b2lkIGYoKSB7CisgICAgICAgICAgICAgICAgaW50IGkgPSA5OworICAgICAgICAgICAgICAgIGludCBqID0gOTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfTsKKyAgICAgICAgbmV3IE15KCkgeworICAgICAgICAgICAgcHVibGljIHZvaWQgZigpIHsKKyAgICAgICAgICAgICAgICBsKCk7CisgICAgICAgICAgICAgICAgbCgpOworICAgICAgICAgICAgfQorICAgICAgICB9OworICAgIH0KKworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvZm9ybWF0dGVyL2phdmEvQXNzZXJ0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL2Zvcm1hdHRlci9qYXZhL0Fzc2VydC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM5ZmYzZDUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL2Zvcm1hdHRlci9qYXZhL0Fzc2VydC5qYXZhCkBAIC0wLDAgKzEsNSBAQAorY2xhc3MgRm9vIHsKKyAgICB2b2lkIGZvbyAoKSB7CisgICAgICAgIGFzc2VydCBmYWxzZTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9mb3JtYXR0ZXIvamF2YS9Bc3NlcnRfYWZ0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvZm9ybWF0dGVyL2phdmEvQXNzZXJ0X2FmdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmZkNDU1OQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvZm9ybWF0dGVyL2phdmEvQXNzZXJ0X2FmdGVyLmphdmEKQEAgLTAsMCArMSw1IEBACitjbGFzcyBGb28geworICAgIHZvaWQgZm9vKCkgeworICAgICAgICBhc3NlcnQgZmFsc2U7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvZm9ybWF0dGVyL2phdmEvQmxvY2tzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL2Zvcm1hdHRlci9qYXZhL0Jsb2Nrcy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc1ZjU5MWQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL2Zvcm1hdHRlci9qYXZhL0Jsb2Nrcy5qYXZhCkBAIC0wLDAgKzEsMzQgQEAKK2NsYXNzIEZvbyB7CisgICAgdm9pZCBmb28oKXsKKyAgICAgICAgaWYgKGEpCisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIHdoaWxlKGEpCisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIGRvCisgICAgICAgIHsKKyAgICAgICAgfSB3aGlsZShhKTsKKworCisgICAgICAgIHRyeQorICAgICAgICB7CisgICAgICAgIH0KKyAgICAgICAgY2F0Y2goRXhjZXB0aW9uIGUpCisgICAgICAgIHsKKyAgICAgICAgfQorICAgICAgICBmaW5hbGx5CisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIHN3aXRjaChhKQorICAgICAgICB7CisgICAgICAgIH0KKworICAgICAgICBmb3IoYSkKKyAgICAgICAgeworICAgICAgICB9CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvZm9ybWF0dGVyL2phdmEvQmxvY2tzX2FmdGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL2Zvcm1hdHRlci9qYXZhL0Jsb2Nrc19hZnRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNlMTllYjEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL2Zvcm1hdHRlci9qYXZhL0Jsb2Nrc19hZnRlci5qYXZhCkBAIC0wLDAgKzEsMjQgQEAKK2NsYXNzIEZvbyB7CisgICAgdm9pZCBmb28oKSB7CisgICAgICAgIGlmIChhKSB7CisgICAgICAgIH0KKworICAgICAgICB3aGlsZSAoYSkgeworICAgICAgICB9CisKKyAgICAgICAgZG8geworICAgICAgICB9IHdoaWxlIChhKTsKKworCisgICAgICAgIHRyeSB7CisgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgIH0gZmluYWxseSB7CisgICAgICAgIH0KKworICAgICAgICBzd2l0Y2ggKGEpIHsKKyAgICAgICAgfQorCisgICAgICAgIGZvciAoYSkgeworICAgICAgICB9CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvZm9ybWF0dGVyL2phdmEvQnJlYWtJbnNpZGVJZi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9mb3JtYXR0ZXIvamF2YS9CcmVha0luc2lkZUlmLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDMyZjI2ZAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvZm9ybWF0dGVyL2phdmEvQnJlYWtJbnNpZGVJZi5qYXZhCkBAIC0wLDAgKzEsNyBAQAorY2xhc3MgRm9veworICAgIHB1YmxpYyB2b2lkIGEoKXsKKyAgICAgICAgaWYgKGIpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvZm9ybWF0dGVyL2phdmEvQnJlYWtJbnNpZGVJZl9hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9mb3JtYXR0ZXIvamF2YS9CcmVha0luc2lkZUlmX2FmdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWJkZjcxOQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvZm9ybWF0dGVyL2phdmEvQnJlYWtJbnNpZGVJZl9hZnRlci5qYXZhCkBAIC0wLDAgKzEsNyBAQAorY2xhc3MgRm9vIHsKKyAgICBwdWJsaWMgdm9pZCBhKCkgeworICAgICAgICBpZiAoYikgeworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9mb3JtYXR0ZXIvamF2YS9DYXN0SW5zaWRlRWxzZS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9mb3JtYXR0ZXIvamF2YS9DYXN0SW5zaWRlRWxzZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdjMjEzMGEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL2Zvcm1hdHRlci9qYXZhL0Nhc3RJbnNpZGVFbHNlLmphdmEKQEAgLTAsMCArMSw5IEBACitjbGFzcyBGb28geworICAgIHB1YmxpYyB2b2lkIGZvbygpeworICAgICAgICBpZiAoYSkgeworCisgICAgICAgIH0gZWxzZSB7CisoKFN0cmluZyl2YWx1ZSkKKyAgICAgICAgfQorICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL2Zvcm1hdHRlci9qYXZhL0Nhc3RJbnNpZGVFbHNlX2FmdGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL2Zvcm1hdHRlci9qYXZhL0Nhc3RJbnNpZGVFbHNlX2FmdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzQxM2I4NgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvZm9ybWF0dGVyL2phdmEvQ2FzdEluc2lkZUVsc2VfYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDkgQEAKK2NsYXNzIEZvbyB7CisgIHB1YmxpYyB2b2lkIGZvbygpIHsKKyAgICBpZiAoYSkgeworCisgICAgfSBlbHNlIHsKKyAgICAgICgoU3RyaW5nKSB2YWx1ZSkKKyAgICB9CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL2Zvcm1hdHRlci9qYXZhL0NoYWluZWRNZXRob2RzQWxpZ25tZW50LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL2Zvcm1hdHRlci9qYXZhL0NoYWluZWRNZXRob2RzQWxpZ25tZW50LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDdjMWFiZQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvZm9ybWF0dGVyL2phdmEvQ2hhaW5lZE1ldGhvZHNBbGlnbm1lbnQuamF2YQpAQCAtMCwwICsxLDM3IEBACitjbGFzcyBGb3JtYXR0aW5nVGVzdCB7CisKKyAgICBwcml2YXRlIHN0YXRpYyBGb3JtYXR0aW5nVGVzdCBzdGF0aWNGb287CisKKyAgICBwcml2YXRlIEZvcm1hdHRpbmdUZXN0IGluc3RhbmNlRm9vOworCisgICAgQFN1cHByZXNzV2FybmluZ3MoeyJBY2Nlc3NTdGF0aWNWaWFJbnN0YW5jZSJ9KQorICAgIHB1YmxpYyB2b2lkIHRlc3QoKSB7CisKKyAgICAgICAgLy8gTG9uZyBjaGFpbmVkIG1ldGhvZCBjYWxscyB3aXRoIGluaXRpYWwgaW5zdGFuY2UgdGFyZ2V0IC0gbWV0aG9kIGNhbGxzIGFyZSBhbGlnbmVkIHRvIHRoZSBmaXJzdCBtZXRob2QKKyAgICAgICAgLy8gY2FsbCBwbGFjZS4KKyAgICAgICAgaW5zdGFuY2VGb28uaW5zdGFuY2VNZXRob2RXaXRoUXVpdGVMb25nTmFtZUluZGVlZCgpLnN0YXRpY01ldGhvZFdpdGhRdWl0ZUxvbmdOYW1lSW5kZWVkKCkuaW5zdGFuY2VNZXRob2RXaXRoUXVpdGVMb25nTmFtZUluZGVlZCgpLmluc3RhbmNlTWV0aG9kV2l0aFF1aXRlTG9uZ05hbWVJbmRlZWQoKS5zdGF0aWNNZXRob2RXaXRoUXVpdGVMb25nTmFtZUluZGVlZCgpOworCisgICAgICAgIC8vIExvbmcgY2hhaW5lZCBtZXRob2QgY2FsbHMgd2l0aCBpbml0aWFsIHN0YXRpYyB0YXJnZXQgLSBtZXRob2QgY2FsbHMgYXJlIGFsaWduZWQgdG8gdGhlIGZpcnN0IG1ldGhvZAorICAgICAgICAvLyBjYWxsIHBsYWNlLgorICAgICAgICBzdGF0aWNGb28uaW5zdGFuY2VNZXRob2RXaXRoUXVpdGVMb25nTmFtZUluZGVlZCgpLnN0YXRpY01ldGhvZFdpdGhRdWl0ZUxvbmdOYW1lSW5kZWVkKCkuaW5zdGFuY2VNZXRob2RXaXRoUXVpdGVMb25nTmFtZUluZGVlZCgpLmluc3RhbmNlTWV0aG9kV2l0aFF1aXRlTG9uZ05hbWVJbmRlZWQoKS5zdGF0aWNNZXRob2RXaXRoUXVpdGVMb25nTmFtZUluZGVlZCgpOworCisgICAgICAgIC8vIEludGVybGVhdmVkIG1ldGhvZCBjYWxsIGNoYWlucyAtIGV2ZXJ5IHN1Yi1jaGFpbiBpcyBhbGlnbmVkIHRvIGl0cyBvd24gdGFyZ2V0CisgICAgICAgIGluc3RhbmNlRm9vLmluc3RhbmNlTWV0aG9kV2l0aFF1aXRlTG9uZ05hbWVJbmRlZWQoKS5zdGF0aWNNZXRob2RXaXRoUXVpdGVMb25nTmFtZUluZGVlZCgpLmluc3RhbmNlTWV0aG9kV2l0aFF1aXRlTG9uZ05hbWVJbmRlZWQoKS5pbnN0YW5jZUZvby5pbnN0YW5jZU1ldGhvZFdpdGhRdWl0ZUxvbmdOYW1lSW5kZWVkKCkuc3RhdGljTWV0aG9kV2l0aFF1aXRlTG9uZ05hbWVJbmRlZWQoKS5pbnN0YW5jZU1ldGhvZFdpdGhRdWl0ZUxvbmdOYW1lSW5kZWVkKCk7CisKKyAgICAgICAgLy8gSW50ZXJsZWF2ZWQgbWV0aG9kIGNhbGwgY2hhaW5zIHdpdGggbWFudWFsIGxpbmUgYnJlYWsgLSBldmVyeSBzdWItY2hhaW4gaXMgYWxpZ25lZCB0byBpdHMgb3duCisgICAgICAgIC8vIHRhcmdldCBhbmQgbWFudWFsIGxpbmUgYnJlYWsgaXMgcHJlc2VydmVkLgorICAgICAgICBpbnN0YW5jZUZvby5pbnN0YW5jZU1ldGhvZFdpdGhRdWl0ZUxvbmdOYW1lSW5kZWVkKCkuc3RhdGljTWV0aG9kV2l0aFF1aXRlTG9uZ05hbWVJbmRlZWQoKQorICAgICAgICAgICAgLmluc3RhbmNlRm9vLmluc3RhbmNlTWV0aG9kV2l0aFF1aXRlTG9uZ05hbWVJbmRlZWQoKS5zdGF0aWNNZXRob2RXaXRoUXVpdGVMb25nTmFtZUluZGVlZCgpLmluc3RhbmNlTWV0aG9kV2l0aFF1aXRlTG9uZ05hbWVJbmRlZWQoKTsKKworICAgICAgICAvLyBDaGFpbmVkIGNhbGxzIHdpdGggaW1wbGljaXQgdGFyZ2V0IC0gbWV0aG9kIGNhbGxzIGFyZSBub3QgYWxpZ25lZCBhbmQgdXNlIGNvbnRpbnVhdGlvbiBpbmRlbnQgaW5zdGVhZC4KKyAgICAgICAgaW5zdGFuY2VNZXRob2RXaXRoUXVpdGVMb25nTmFtZUluZGVlZCgpLmluc3RhbmNlTWV0aG9kV2l0aFF1aXRlTG9uZ05hbWVJbmRlZWQoKS5pbnN0YW5jZU1ldGhvZFdpdGhRdWl0ZUxvbmdOYW1lSW5kZWVkKCkuaW5zdGFuY2VNZXRob2RXaXRoUXVpdGVMb25nTmFtZUluZGVlZCgpOworICAgIH0KKworICAgIHB1YmxpYyBGb3JtYXR0aW5nVGVzdCBpbnN0YW5jZU1ldGhvZFdpdGhRdWl0ZUxvbmdOYW1lSW5kZWVkKCkgeworICAgICAgICByZXR1cm4gaW5zdGFuY2VGb287CisgICAgfQorCisgICAgcHVibGljIHN0YXRpYyBGb3JtYXR0aW5nVGVzdCBzdGF0aWNNZXRob2RXaXRoUXVpdGVMb25nTmFtZUluZGVlZCgpIHsKKyAgICAgICAgcmV0dXJuIHN0YXRpY0ZvbzsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL2Zvcm1hdHRlci9qYXZhL0NoYWluZWRNZXRob2RzQWxpZ25tZW50X2FmdGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL2Zvcm1hdHRlci9qYXZhL0NoYWluZWRNZXRob2RzQWxpZ25tZW50X2FmdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGIyMWI5MgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvZm9ybWF0dGVyL2phdmEvQ2hhaW5lZE1ldGhvZHNBbGlnbm1lbnRfYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDQ2IEBACitjbGFzcyBGb3JtYXR0aW5nVGVzdCB7CisKKyAgICBwcml2YXRlIHN0YXRpYyBGb3JtYXR0aW5nVGVzdCBzdGF0aWNGb287CisKKyAgICBwcml2YXRlIEZvcm1hdHRpbmdUZXN0IGluc3RhbmNlRm9vOworCisgICAgQFN1cHByZXNzV2FybmluZ3MoeyJBY2Nlc3NTdGF0aWNWaWFJbnN0YW5jZSJ9KQorICAgIHB1YmxpYyB2b2lkIHRlc3QoKSB7CisKKyAgICAgICAgLy8gTG9uZyBjaGFpbmVkIG1ldGhvZCBjYWxscyB3aXRoIGluaXRpYWwgaW5zdGFuY2UgdGFyZ2V0IC0gbWV0aG9kIGNhbGxzIGFyZSBhbGlnbmVkIHRvIHRoZSBmaXJzdCBtZXRob2QKKyAgICAgICAgLy8gY2FsbCBwbGFjZS4KKyAgICAgICAgaW5zdGFuY2VGb28uaW5zdGFuY2VNZXRob2RXaXRoUXVpdGVMb25nTmFtZUluZGVlZCgpLnN0YXRpY01ldGhvZFdpdGhRdWl0ZUxvbmdOYW1lSW5kZWVkKCkKKyAgICAgICAgICAgICAgICAgICAuaW5zdGFuY2VNZXRob2RXaXRoUXVpdGVMb25nTmFtZUluZGVlZCgpLmluc3RhbmNlTWV0aG9kV2l0aFF1aXRlTG9uZ05hbWVJbmRlZWQoKQorICAgICAgICAgICAgICAgICAgIC5zdGF0aWNNZXRob2RXaXRoUXVpdGVMb25nTmFtZUluZGVlZCgpOworCisgICAgICAgIC8vIExvbmcgY2hhaW5lZCBtZXRob2QgY2FsbHMgd2l0aCBpbml0aWFsIHN0YXRpYyB0YXJnZXQgLSBtZXRob2QgY2FsbHMgYXJlIGFsaWduZWQgdG8gdGhlIGZpcnN0IG1ldGhvZAorICAgICAgICAvLyBjYWxsIHBsYWNlLgorICAgICAgICBzdGF0aWNGb28uaW5zdGFuY2VNZXRob2RXaXRoUXVpdGVMb25nTmFtZUluZGVlZCgpLnN0YXRpY01ldGhvZFdpdGhRdWl0ZUxvbmdOYW1lSW5kZWVkKCkKKyAgICAgICAgICAgICAgICAgLmluc3RhbmNlTWV0aG9kV2l0aFF1aXRlTG9uZ05hbWVJbmRlZWQoKS5pbnN0YW5jZU1ldGhvZFdpdGhRdWl0ZUxvbmdOYW1lSW5kZWVkKCkKKyAgICAgICAgICAgICAgICAgLnN0YXRpY01ldGhvZFdpdGhRdWl0ZUxvbmdOYW1lSW5kZWVkKCk7CisKKyAgICAgICAgLy8gSW50ZXJsZWF2ZWQgbWV0aG9kIGNhbGwgY2hhaW5zIC0gZXZlcnkgc3ViLWNoYWluIGlzIGFsaWduZWQgdG8gaXRzIG93biB0YXJnZXQKKyAgICAgICAgaW5zdGFuY2VGb28uaW5zdGFuY2VNZXRob2RXaXRoUXVpdGVMb25nTmFtZUluZGVlZCgpLnN0YXRpY01ldGhvZFdpdGhRdWl0ZUxvbmdOYW1lSW5kZWVkKCkKKyAgICAgICAgICAgICAgICAgICAuaW5zdGFuY2VNZXRob2RXaXRoUXVpdGVMb25nTmFtZUluZGVlZCgpLmluc3RhbmNlRm9vLmluc3RhbmNlTWV0aG9kV2l0aFF1aXRlTG9uZ05hbWVJbmRlZWQoKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuc3RhdGljTWV0aG9kV2l0aFF1aXRlTG9uZ05hbWVJbmRlZWQoKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuaW5zdGFuY2VNZXRob2RXaXRoUXVpdGVMb25nTmFtZUluZGVlZCgpOworCisgICAgICAgIC8vIEludGVybGVhdmVkIG1ldGhvZCBjYWxsIGNoYWlucyB3aXRoIG1hbnVhbCBsaW5lIGJyZWFrIC0gZXZlcnkgc3ViLWNoYWluIGlzIGFsaWduZWQgdG8gaXRzIG93bgorICAgICAgICAvLyB0YXJnZXQgYW5kIG1hbnVhbCBsaW5lIGJyZWFrIGlzIHByZXNlcnZlZC4KKyAgICAgICAgaW5zdGFuY2VGb28uaW5zdGFuY2VNZXRob2RXaXRoUXVpdGVMb25nTmFtZUluZGVlZCgpLnN0YXRpY01ldGhvZFdpdGhRdWl0ZUxvbmdOYW1lSW5kZWVkKCkKKyAgICAgICAgICAgICAgICAuaW5zdGFuY2VGb28uaW5zdGFuY2VNZXRob2RXaXRoUXVpdGVMb25nTmFtZUluZGVlZCgpLnN0YXRpY01ldGhvZFdpdGhRdWl0ZUxvbmdOYW1lSW5kZWVkKCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAuaW5zdGFuY2VNZXRob2RXaXRoUXVpdGVMb25nTmFtZUluZGVlZCgpOworCisgICAgICAgIC8vIENoYWluZWQgY2FsbHMgd2l0aCBpbXBsaWNpdCB0YXJnZXQgLSBtZXRob2QgY2FsbHMgYXJlIG5vdCBhbGlnbmVkIGFuZCB1c2UgY29udGludWF0aW9uIGluZGVudCBpbnN0ZWFkLgorICAgICAgICBpbnN0YW5jZU1ldGhvZFdpdGhRdWl0ZUxvbmdOYW1lSW5kZWVkKCkuaW5zdGFuY2VNZXRob2RXaXRoUXVpdGVMb25nTmFtZUluZGVlZCgpCisgICAgICAgICAgICAgICAgLmluc3RhbmNlTWV0aG9kV2l0aFF1aXRlTG9uZ05hbWVJbmRlZWQoKS5pbnN0YW5jZU1ldGhvZFdpdGhRdWl0ZUxvbmdOYW1lSW5kZWVkKCk7CisgICAgfQorCisgICAgcHVibGljIEZvcm1hdHRpbmdUZXN0IGluc3RhbmNlTWV0aG9kV2l0aFF1aXRlTG9uZ05hbWVJbmRlZWQoKSB7CisgICAgICAgIHJldHVybiBpbnN0YW5jZUZvbzsKKyAgICB9CisKKyAgICBwdWJsaWMgc3RhdGljIEZvcm1hdHRpbmdUZXN0IHN0YXRpY01ldGhvZFdpdGhRdWl0ZUxvbmdOYW1lSW5kZWVkKCkgeworICAgICAgICByZXR1cm4gc3RhdGljRm9vOworICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvZm9ybWF0dGVyL2phdmEvQ29udGludWUuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvZm9ybWF0dGVyL2phdmEvQ29udGludWUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MTc3YTMyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9mb3JtYXR0ZXIvamF2YS9Db250aW51ZS5qYXZhCkBAIC0wLDAgKzEsNSBAQAorY2xhc3MgQSB7CisgIHZvaWQgZm9vKCkgeworICAgICAgY29udGludWU7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL2Zvcm1hdHRlci9qYXZhL0NvbnRpbnVlX2FmdGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL2Zvcm1hdHRlci9qYXZhL0NvbnRpbnVlX2FmdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGU1YzE4ZAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvZm9ybWF0dGVyL2phdmEvQ29udGludWVfYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDUgQEAKK2NsYXNzIEEgeworICAgIHZvaWQgZm9vKCkgeworICAgICAgICBjb250aW51ZTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9mb3JtYXR0ZXIvamF2YS9Eb3VibGVDYXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL2Zvcm1hdHRlci9qYXZhL0RvdWJsZUNhc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MTNjODZlCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9mb3JtYXR0ZXIvamF2YS9Eb3VibGVDYXN0LmphdmEKQEAgLTAsMCArMSw1IEBACitjbGFzcyBDIHsKKyAgICB7CisgICAgICAgIFN0cmluZyBxID0gKFN0cmluZykgKCAoU3RyaW5nKSJhYmMiICk7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9mb3JtYXR0ZXIvamF2YS9Eb3VibGVDYXN0X2FmdGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL2Zvcm1hdHRlci9qYXZhL0RvdWJsZUNhc3RfYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NzA5NTNkCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9mb3JtYXR0ZXIvamF2YS9Eb3VibGVDYXN0X2FmdGVyLmphdmEKQEAgLTAsMCArMSw1IEBACitjbGFzcyBDIHsKKyAgICB7CisgICAgICAgIFN0cmluZyBxID0gKFN0cmluZykgKChTdHJpbmcpICJhYmMiKTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL2Zvcm1hdHRlci9qYXZhL0ZvckVhY2guamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvZm9ybWF0dGVyL2phdmEvRm9yRWFjaC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdhYTM1MDcKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL2Zvcm1hdHRlci9qYXZhL0ZvckVhY2guamF2YQpAQCAtMCwwICsxLDYgQEAKK2NsYXNzIEMgeworICAgIHsKKyAgICAgICAgZm9yKFN0cmluZyBzICAgOmNvbGxlY3Rpb24pIHsKKyAgICAgICAgfQorICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL2Zvcm1hdHRlci9qYXZhL0ZvckVhY2hfYWZ0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvZm9ybWF0dGVyL2phdmEvRm9yRWFjaF9hZnRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc4ZTgzYTQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL2Zvcm1hdHRlci9qYXZhL0ZvckVhY2hfYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDYgQEAKK2NsYXNzIEMgeworICAgIHsKKyAgICAgICAgZm9yIChTdHJpbmcgcyA6IGNvbGxlY3Rpb24pIHsKKyAgICAgICAgfQorICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL2Zvcm1hdHRlci9qYXZhL0lmLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL2Zvcm1hdHRlci9qYXZhL0lmLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGM3MzQwMgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvZm9ybWF0dGVyL2phdmEvSWYuamF2YQpAQCAtMCwwICsxLDYgQEAKK2NsYXNzIEZvbyB7CisgICAgdm9pZCBmb28oKSB7CisgICAgICAgIGlmIChhKSB7CisgICAgICAgIH0KKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9mb3JtYXR0ZXIvamF2YS9JZkJyYWNlcy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9mb3JtYXR0ZXIvamF2YS9JZkJyYWNlcy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZmMzc1NTMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL2Zvcm1hdHRlci9qYXZhL0lmQnJhY2VzLmphdmEKQEAgLTAsMCArMSw2IEBACitjbGFzcyBGb28geworICAgIHZvaWQgZm9vKCkgeworICAgICAgICBpZiAoYSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9mb3JtYXR0ZXIvamF2YS9JZkJyYWNlc19hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9mb3JtYXR0ZXIvamF2YS9JZkJyYWNlc19hZnRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhlZTI3MjIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL2Zvcm1hdHRlci9qYXZhL0lmQnJhY2VzX2FmdGVyLmphdmEKQEAgLTAsMCArMSw3IEBACitjbGFzcyBGb28geworICAgIHZvaWQgZm9vKCkgeworICAgICAgICBpZiAoYSkgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvZm9ybWF0dGVyL2phdmEvSWZFbHNlLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL2Zvcm1hdHRlci9qYXZhL0lmRWxzZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM5MDJlOTYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL2Zvcm1hdHRlci9qYXZhL0lmRWxzZS5qYXZhCkBAIC0wLDAgKzEsNTkgQEAKK3B1YmxpYyBjbGFzcyBGb28geworICAgIHB1YmxpYyB2b2lkIGZvbyhib29sZWFuIGEsIGludCB4LAorICAgICAgICAgICAgICAgICAgICBpbnQgeSwgaW50IHopIHsKKyAgICAgICAgbGFiZWwxOgorICAgICAgICBkbyB7CisgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgIGlmICh4ID4gMCkgeworICAgICAgICAgICAgICAgICAgICBpbnQgc29tZVZhcmlhYmxlID0gYSA/CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4IDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgaWYgKHggPCAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc29tZVZhcmlhYmxlID0gKHkgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNvbWVWYXJpYWJsZSA9IHggPQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeCArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5OworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWwyOgorICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkgPCA1OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpKyspCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9Tb21ldGhpbmcoaSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBzd2l0Y2ggKGEpIHsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAwOgorICAgICAgICAgICAgICAgICAgICAgICAgZG9DYXNlMCgpOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgICAgICBkb0RlZmF1bHQoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgICAgICBwcm9jZXNzRXhjZXB0aW9uKGUuZ2V0TWVzc2FnZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeCArIHksIHosIGEpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZmluYWxseSB7CisgICAgICAgICAgICAgICAgcHJvY2Vzc0ZpbmFsbHkoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICB3aGlsZSAodHJ1ZSk7CisKKyAgICAgICAgaWYgKDIgPCAzKSByZXR1cm47CisgICAgICAgIGlmICgzIDwgNCkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgZG8geCsrIHdoaWxlICh4IDwgMTAwMDApOworICAgICAgICB3aGlsZSAoeCA8IDUwMDAwKSB4Kys7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgNTsgaSsrKSBTeXN0ZW0ub3V0LnByaW50bG4oaSk7CisgICAgfQorCisgICAgcHJpdmF0ZSBjbGFzcyBJbm5lckNsYXNzIGltcGxlbWVudHMgSTEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSTIgeworICAgICAgICBwdWJsaWMgdm9pZCBiYXIoKSB0aHJvd3MgRTEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFMiB7CisgICAgICAgIH0KKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9mb3JtYXR0ZXIvamF2YS9JZkVsc2VfYWZ0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvZm9ybWF0dGVyL2phdmEvSWZFbHNlX2FmdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWY1ZTRkYgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvZm9ybWF0dGVyL2phdmEvSWZFbHNlX2FmdGVyLmphdmEKQEAgLTAsMCArMSw1OSBAQAorcHVibGljIGNsYXNzIEZvbyB7CisgICAgcHVibGljIHZvaWQgZm9vKGJvb2xlYW4gYSwgaW50IHgsCisgICAgICAgICAgICAgICAgICAgIGludCB5LCBpbnQgeikgeworICAgICAgICBsYWJlbDE6CisgICAgICAgIGRvIHsKKyAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgaWYgKHggPiAwKSB7CisgICAgICAgICAgICAgICAgICAgIGludCBzb21lVmFyaWFibGUgPSBhID8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHggOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBpZiAoeCA8IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGludCBzb21lVmFyaWFibGUgPSAoeSArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHoKKyAgICAgICAgICAgICAgICAgICAgICAgICk7CisgICAgICAgICAgICAgICAgICAgICAgICBzb21lVmFyaWFibGUgPSB4ID0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeCArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbDI6CisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSA8IDU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkrKykgeyBkb1NvbWV0aGluZyhpKTsgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgc3dpdGNoIChhKSB7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgMDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGRvQ2FzZTAoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICAgICAgZG9EZWZhdWx0KCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICAgICAgcHJvY2Vzc0V4Y2VwdGlvbihlLmdldE1lc3NhZ2UoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHggKyB5LCB6LCBhKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGZpbmFsbHkgeworICAgICAgICAgICAgICAgIHByb2Nlc3NGaW5hbGx5KCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgd2hpbGUgKHRydWUpOworCisgICAgICAgIGlmICgyIDwgMykgcmV0dXJuOworICAgICAgICBpZiAoMyA8IDQpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGRvIHgrKyB3aGlsZSAoeCA8IDEwMDAwKTsKKyAgICAgICAgd2hpbGUgKHggPCA1MDAwMCkgeCsrOworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDU7IGkrKykgU3lzdGVtLm91dC5wcmludGxuKGkpOworICAgIH0KKworICAgIHByaXZhdGUgY2xhc3MgSW5uZXJDbGFzcyBpbXBsZW1lbnRzIEkxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEkyIHsKKyAgICAgICAgcHVibGljIHZvaWQgYmFyKCkgdGhyb3dzIEUxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRTIgeworICAgICAgICB9CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvZm9ybWF0dGVyL2phdmEvSWZfYWZ0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvZm9ybWF0dGVyL2phdmEvSWZfYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jODM1ZWI2Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9mb3JtYXR0ZXIvamF2YS9JZl9hZnRlci5qYXZhCkBAIC0wLDAgKzEsNyBAQAorY2xhc3MgRm9vIHsKKyAgICB2b2lkIGZvbygpIHsKKyAgICAgICAgaWYgKGEpCisgICAgICAgIHsKKyAgICAgICAgfQorICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL2Zvcm1hdHRlci9qYXZhL0lubmVyQ2xhc3NBc1BhcmFtZXRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9mb3JtYXR0ZXIvamF2YS9Jbm5lckNsYXNzQXNQYXJhbWV0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNTI0MGYyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9mb3JtYXR0ZXIvamF2YS9Jbm5lckNsYXNzQXNQYXJhbWV0ZXIuamF2YQpAQCAtMCwwICsxLDEwIEBACitjbGFzcyBGb297CitwdWJsaWMgdm9pZCBmb28oKXsKK2Jhcl9jYWxsKG5ldyBSdW5uYWJsZSgpewordm9pZCBydW4oKXsKK2JhcigpOworYmFyKCk7Cit9Cit9KTsKK30KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL2Zvcm1hdHRlci9qYXZhL0lubmVyQ2xhc3NBc1BhcmFtZXRlcl9hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9mb3JtYXR0ZXIvamF2YS9Jbm5lckNsYXNzQXNQYXJhbWV0ZXJfYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZTFiMDgxCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9mb3JtYXR0ZXIvamF2YS9Jbm5lckNsYXNzQXNQYXJhbWV0ZXJfYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDEwIEBACitjbGFzcyBGb28geworICAgIHB1YmxpYyB2b2lkIGZvbygpIHsKKyAgICAgICAgYmFyX2NhbGwobmV3IFJ1bm5hYmxlKCkgeworICAgICAgICAgICAgdm9pZCBydW4oKSB7CisgICAgICAgICAgICAgICAgYmFyKCk7CisgICAgICAgICAgICAgICAgYmFyKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0pOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL2Zvcm1hdHRlci9qYXZhL0phdmFEb2MuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvZm9ybWF0dGVyL2phdmEvSmF2YURvYy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhiOWU2ZTEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL2Zvcm1hdHRlci9qYXZhL0phdmFEb2MuamF2YQpAQCAtMCwwICsxLDEwIEBACitwdWJsaWMgY2xhc3MgVGVzdCB7CisgICAgdm9pZCBhbm90aGVyTWV0aG9kKFN0cmluZyBzKTsKKyAgICBTdHJpbmcgZmllbGQ7CisgICAgLyoqCisgICAgICogQHBhcmFtIGFuT2JqZWN0CisgICAgICovCisgICAgdm9pZCBtZXRob2QoVGVzdCBhbk9iamVjdCwgU3RyaW5nIGZpZWxkMSkgeworICAgICAgICBhbk9iamVjdC5hbm90aGVyTWV0aG9kKGZpZWxkMSk7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvZm9ybWF0dGVyL2phdmEvSmF2YURvY19hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9mb3JtYXR0ZXIvamF2YS9KYXZhRG9jX2FmdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTA1NjlkOAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvZm9ybWF0dGVyL2phdmEvSmF2YURvY19hZnRlci5qYXZhCkBAIC0wLDAgKzEsMTIgQEAKK3B1YmxpYyBjbGFzcyBUZXN0IHsKKyAgICB2b2lkIGFub3RoZXJNZXRob2QoU3RyaW5nIHMpOworCisgICAgU3RyaW5nIGZpZWxkOworCisgICAgLyoqCisgICAgICogQHBhcmFtIGFuT2JqZWN0CisgICAgICovCisgICAgdm9pZCBtZXRob2QoVGVzdCBhbk9iamVjdCwgU3RyaW5nIGZpZWxkMSkgeworICAgICAgICBhbk9iamVjdC5hbm90aGVyTWV0aG9kKGZpZWxkMSk7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvZm9ybWF0dGVyL2phdmEvTGFiZWwuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvZm9ybWF0dGVyL2phdmEvTGFiZWwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MTc4ZDY1Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9mb3JtYXR0ZXIvamF2YS9MYWJlbC5qYXZhCkBAIC0wLDAgKzEsNSBAQAorY2xhc3MgWCB7CisgICAgdm9pZCBZKCkgeworICAgICAgICB6OiBmb3IgKGludCBpID0gMDsgaSA8IDI0OyBpKyspIHt9CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvZm9ybWF0dGVyL2phdmEvTGFiZWxfYWZ0ZXIxLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL2Zvcm1hdHRlci9qYXZhL0xhYmVsX2FmdGVyMS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgwNmVkYTcKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL2Zvcm1hdHRlci9qYXZhL0xhYmVsX2FmdGVyMS5qYXZhCkBAIC0wLDAgKzEsNyBAQAorY2xhc3MgWCB7CisgICAgdm9pZCBZKCkgeworejoKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAyNDsgaSsrKSB7CisgICAgICAgIH0KKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9mb3JtYXR0ZXIvamF2YS9Mb25nQW5ub3RhdGlvbnNBcmVOb3RXcmFwcGVkLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL2Zvcm1hdHRlci9qYXZhL0xvbmdBbm5vdGF0aW9uc0FyZU5vdFdyYXBwZWQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYTViN2ExCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9mb3JtYXR0ZXIvamF2YS9Mb25nQW5ub3RhdGlvbnNBcmVOb3RXcmFwcGVkLmphdmEKQEAgLTAsMCArMSw0IEBACitAWG1sVHlwZShuYW1lID0gInN1Ym1pc3Npb25EYXRhIiwKKyAgICAgICAgcHJvcE9yZGVyID0geyJzdWJtaXNzaW9uSWQiLCAic3VibWl0dGVySWQiLCAiY29udGVzdElkIiwgInN1Ym1pdHRlZERhdGUiLCAic3VibWlzc2lvbkNvbnRlbnQiLCAicGFzc2VkU2NyZWVuaW5nIiwgInBsYWNlbWVudCIsICJwYWlkRm9yIiwgInByaWNlIiwgIm1hcmtlZEZvclB1cmNoYXNlIiwgInJlbW92ZWQifSkKK3B1YmxpYyBjbGFzcyBTdWJtaXNzaW9uRGF0YSB7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9mb3JtYXR0ZXIvamF2YS9Mb25nQW5ub3RhdGlvbnNBcmVOb3RXcmFwcGVkX2FmdGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL2Zvcm1hdHRlci9qYXZhL0xvbmdBbm5vdGF0aW9uc0FyZU5vdFdyYXBwZWRfYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42Y2JiOTIxCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9mb3JtYXR0ZXIvamF2YS9Mb25nQW5ub3RhdGlvbnNBcmVOb3RXcmFwcGVkX2FmdGVyLmphdmEKQEAgLTAsMCArMSw1IEBACitAWG1sVHlwZShuYW1lID0gInN1Ym1pc3Npb25EYXRhIiwKKyAgICAgICAgcHJvcE9yZGVyID0geyJzdWJtaXNzaW9uSWQiLCAic3VibWl0dGVySWQiLCAiY29udGVzdElkIiwgInN1Ym1pdHRlZERhdGUiLCAic3VibWlzc2lvbkNvbnRlbnQiLAorICAgICAgICAgICAgICAgICJwYXNzZWRTY3JlZW5pbmciLCAicGxhY2VtZW50IiwgInBhaWRGb3IiLCAicHJpY2UiLCAibWFya2VkRm9yUHVyY2hhc2UiLCAicmVtb3ZlZCJ9KQorcHVibGljIGNsYXNzIFN1Ym1pc3Npb25EYXRhIHsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL2Zvcm1hdHRlci9qYXZhL01ldGhvZENhbGxJbkFzc2lnbm1lbnQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvZm9ybWF0dGVyL2phdmEvTWV0aG9kQ2FsbEluQXNzaWdubWVudC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVkYTM2MWQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL2Zvcm1hdHRlci9qYXZhL01ldGhvZENhbGxJbkFzc2lnbm1lbnQuamF2YQpAQCAtMCwwICsxLDYgQEAKK2NsYXNzIEZvb3sKKyAgdm9pZCBmb28oKXsKKyAgICBDbGFzc0JhciBiYXIgPQorICAgIGNyZWF0ZUJhcigpOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9mb3JtYXR0ZXIvamF2YS9NZXRob2RDYWxsSW5Bc3NpZ25tZW50X2FmdGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL2Zvcm1hdHRlci9qYXZhL01ldGhvZENhbGxJbkFzc2lnbm1lbnRfYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZjJjNzczCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9mb3JtYXR0ZXIvamF2YS9NZXRob2RDYWxsSW5Bc3NpZ25tZW50X2FmdGVyLmphdmEKQEAgLTAsMCArMSw2IEBACitjbGFzcyBGb28geworICAgIHZvaWQgZm9vKCkgeworICAgICAgICBDbGFzc0JhciBiYXIgPQorICAgICAgICAgICAgICAgIGNyZWF0ZUJhcigpOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL2Zvcm1hdHRlci9qYXZhL05ldy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9mb3JtYXR0ZXIvamF2YS9OZXcuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42Nzk2OWFiCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9mb3JtYXR0ZXIvamF2YS9OZXcuamF2YQpAQCAtMCwwICsxLDYgQEAKK3B1YmxpYyBjbGFzcyBDIHsKKyAgICBDIG91ckMgPQorICAgICAgICAgICAgbmV3IEMoCisgICAgICAgICAgICAgICAgbmV3IEMoKQorICAgICAgICAgICAgICAgICk7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9mb3JtYXR0ZXIvamF2YS9OZXdfYWZ0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvZm9ybWF0dGVyL2phdmEvTmV3X2FmdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2ZjYWViNgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvZm9ybWF0dGVyL2phdmEvTmV3X2FmdGVyLmphdmEKQEAgLTAsMCArMSw2IEBACitwdWJsaWMgY2xhc3MgQyB7CisgICAgQyBvdXJDID0KKyAgICAgICAgICAgIG5ldyBDKAorICAgICAgICAgICAgICAgICAgICBuZXcgQygpCisgICAgICAgICAgICApOworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvZm9ybWF0dGVyL2phdmEvTnVsbE1ldGhvZFBhcmFtZXRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9mb3JtYXR0ZXIvamF2YS9OdWxsTWV0aG9kUGFyYW1ldGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjNlNDYzNQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvZm9ybWF0dGVyL2phdmEvTnVsbE1ldGhvZFBhcmFtZXRlci5qYXZhCkBAIC0wLDAgKzEsNCBAQAorY2xhc3MgQyB7CitwdWJsaWMgc3RhdGljIGZpbmFsIEMxIG91ckMgPQorbmV3IEMyKG5ldyBDMygpLG51bGwsbmV3IEM0KCksbmV3IEM1KCksbmV3IEM2KCksbmV3IEM3KCkpOworfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9mb3JtYXR0ZXIvamF2YS9OdWxsTWV0aG9kUGFyYW1ldGVyX2FmdGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL2Zvcm1hdHRlci9qYXZhL051bGxNZXRob2RQYXJhbWV0ZXJfYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOWRiNzQ3Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9mb3JtYXR0ZXIvamF2YS9OdWxsTWV0aG9kUGFyYW1ldGVyX2FmdGVyLmphdmEKQEAgLTAsMCArMSw5IEBACitjbGFzcyBDIHsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIEMxIG91ckMgPQorICAgICAgICAgICAgbmV3IEMyKG5ldyBDMygpLAorICAgICAgICAgICAgICAgICAgIG51bGwsCisgICAgICAgICAgICAgICAgICAgbmV3IEM0KCksCisgICAgICAgICAgICAgICAgICAgbmV3IEM1KCksCisgICAgICAgICAgICAgICAgICAgbmV3IEM2KCksCisgICAgICAgICAgICAgICAgICAgbmV3IEM3KCkpOworfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9mb3JtYXR0ZXIvamF2YS9QYXJhbWV0ZXJzQWxpZ25tZW50LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL2Zvcm1hdHRlci9qYXZhL1BhcmFtZXRlcnNBbGlnbm1lbnQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNjc3MmE2Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9mb3JtYXR0ZXIvamF2YS9QYXJhbWV0ZXJzQWxpZ25tZW50LmphdmEKQEAgLTAsMCArMSwxMiBAQAorY2xhc3MgRm9veworICAgIHZvaWQgZm9vKCkgeworICAgICAgZmluYWwgSW5kZW50SW5mbyBpbmRlbnRQcm9wZXJ0eSA9IEZvcm1hdHRlci5nZXRJbnN0YW5jZSgpLmdldFdoaXRlU3BhY2VCZWZvcmUobmV3IFBzaUJhc2VkRm9ybWF0dGluZ01vZGVsKGVsZW1lbnQuZ2V0Q29udGFpbmluZ0ZpbGUoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXR0aW5ncyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29kZUZvcm1hdHRlckZhY2FkZS5jcmVhdGVCbG9jayhlbGVtZW50LmdldENvbnRhaW5pbmdGaWxlKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXR0aW5ncyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXR0aW5ncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGVudE9wdGlvbnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkMi5nZXRUZXh0UmFuZ2UoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFsc2UpOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL2Zvcm1hdHRlci9qYXZhL1BhcmFtZXRlcnNBbGlnbm1lbnRfYWZ0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvZm9ybWF0dGVyL2phdmEvUGFyYW1ldGVyc0FsaWdubWVudF9hZnRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBlMGRlZTgKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL2Zvcm1hdHRlci9qYXZhL1BhcmFtZXRlcnNBbGlnbm1lbnRfYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDEyIEBACitjbGFzcyBGb28geworICAgIHZvaWQgZm9vKCkgeworICAgICAgICBmaW5hbCBJbmRlbnRJbmZvIGluZGVudFByb3BlcnR5ID0gRm9ybWF0dGVyLmdldEluc3RhbmNlKCkuZ2V0V2hpdGVTcGFjZUJlZm9yZShuZXcgUHNpQmFzZWRGb3JtYXR0aW5nTW9kZWwoZWxlbWVudC5nZXRDb250YWluaW5nRmlsZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0dGluZ3MpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb2RlRm9ybWF0dGVyRmFjYWRlLmNyZWF0ZUJsb2NrKGVsZW1lbnQuZ2V0Q29udGFpbmluZ0ZpbGUoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXR0aW5ncyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldHRpbmdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRlbnRPcHRpb25zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZDIuZ2V0VGV4dFJhbmdlKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhbHNlKTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9mb3JtYXR0ZXIvamF2YS9TQ1IxMTI5Ni5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9mb3JtYXR0ZXIvamF2YS9TQ1IxMTI5Ni5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYzZjNkNGEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL2Zvcm1hdHRlci9qYXZhL1NDUjExMjk2LmphdmEKQEAgLTAsMCArMSwxNyBAQAorY2xhc3MgQSB7CisvKioKKyAqIFRoZSA8Y29kZT5TdHJpbmc8L2NvZGU+IGNsYXNzIHJlcHJlc2VudHMgY2hhcmFjdGVyIHN0cmluZ3MuIEFsbAorICogc3RyaW5nIGxpdGVyYWxzIGluIEphdmEgcHJvZ3JhbXMsIHN1Y2ggYXMgPGNvZGU+ImFiYyI8L2NvZGU+LCBhcmUKKyAqIGltcGxlbWVudGVkIGFzIGluc3RhbmNlcyBvZiB0aGlzIGNsYXNzLgorICoKKyAqIFNvbWUgdGV4dCBhZnRlciBlbXB0eSBsaW5lCisgKgorICogQGF1dGhvciAgTGVlIEJveW50b24KKyAqIEBhdXRob3IgIEFydGh1ciB2YW4gSG9mZgorICogQHZlcnNpb24gMS4xNTIsIDAyLzAxLzAzCisgKiBAc2luY2UgICBKREsxLjAKKyAqLwordm9pZCBmb28oKSB7CisKK30KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL2Zvcm1hdHRlci9qYXZhL1NDUjExMjk2X2FmdGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL2Zvcm1hdHRlci9qYXZhL1NDUjExMjk2X2FmdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTAyZGM1MAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvZm9ybWF0dGVyL2phdmEvU0NSMTEyOTZfYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDE3IEBACitjbGFzcyBBIHsKKyAgICAvKioKKyAgICAgKiBUaGUgPGNvZGU+U3RyaW5nPC9jb2RlPiBjbGFzcyByZXByZXNlbnRzCisgICAgICogY2hhcmFjdGVyIHN0cmluZ3MuIEFsbCBzdHJpbmcgbGl0ZXJhbHMgaW4gSmF2YQorICAgICAqIHByb2dyYW1zLCBzdWNoIGFzIDxjb2RlPiJhYmMiPC9jb2RlPiwgYXJlCisgICAgICogaW1wbGVtZW50ZWQgYXMgaW5zdGFuY2VzIG9mIHRoaXMgY2xhc3MuCisgICAgICogU29tZSB0ZXh0IGFmdGVyIGVtcHR5IGxpbmUKKyAgICAgKgorICAgICAqIEBhdXRob3IgTGVlIEJveW50b24KKyAgICAgKiBAYXV0aG9yIEFydGh1ciB2YW4gSG9mZgorICAgICAqIEB2ZXJzaW9uIDEuMTUyLCAwMi8wMS8wMworICAgICAqIEBzaW5jZSBKREsxLjAKKyAgICAgKi8KKyAgICB2b2lkIGZvbygpIHsKKworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL2Zvcm1hdHRlci9qYXZhL1NDUjExNC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9mb3JtYXR0ZXIvamF2YS9TQ1IxMTQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNTNhYTUwCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9mb3JtYXR0ZXIvamF2YS9TQ1IxMTQuamF2YQpAQCAtMCwwICsxLDExIEBACitjbGFzcyBGb297CisgICAgdm9pZCBmb28oKSB7Cit0cnkKK3sKKyAgIC8vd2hhdGV2ZXIKK30KK2NhdGNoKEV4Y2VwdGlvbiBleCkKK3sKK30gICAgCisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9mb3JtYXR0ZXIvamF2YS9TQ1IxMTRfYWZ0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvZm9ybWF0dGVyL2phdmEvU0NSMTE0X2FmdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmViOTQyYgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvZm9ybWF0dGVyL2phdmEvU0NSMTE0X2FmdGVyLmphdmEKQEAgLTAsMCArMSwxMSBAQAorY2xhc3MgRm9vIHsKKyAgICB2b2lkIGZvbygpIHsKKyAgICAgICAgdHJ5CisgICAgICAgIHsKKyAgICAgICAgICAgIC8vd2hhdGV2ZXIKKyAgICAgICAgfQorICAgICAgICBjYXRjaCAoRXhjZXB0aW9uIGV4KQorICAgICAgICB7CisgICAgICAgIH0KKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL2Zvcm1hdHRlci9qYXZhL1NDUjExNzk5LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL2Zvcm1hdHRlci9qYXZhL1NDUjExNzk5LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWQxZjM1MwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvZm9ybWF0dGVyL2phdmEvU0NSMTE3OTkuamF2YQpAQCAtMCwwICsxLDczIEBACitwYWNrYWdlIGJyLmNvbS52aXZvLnRvcnBlZGVpcm8ucHVsbC5pbXBsOworCitpbXBvcnQgYnIuY29tLnZpdm8udG9ycGVkZWlyby5wdWxsLk1lbnNhZ2VtUHVsbDsKK2ltcG9ydCBici5jb20udml2by50b3JwZWRlaXJvLnB1bGwuUHVsbERBTzsKK2ltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLmpkYmMuY29yZS5KZGJjVGVtcGxhdGU7CisKK2ltcG9ydCBqYXZheC5zcWwuRGF0YVNvdXJjZTsKKworLyoqCisgKiBJbXBsZW1lbnRhPyBwYWRyP2RlIHtAbGluayBQdWxsREFPfSBxdWUgcmVhbGl6YSB0b2RhcyBhcyBvcGVyYT9zIHV0aWxpemFuZG8gU1FMIGF0cmF2P2RlIHVtIHtAbGluaworICogSmRiY1RlbXBsYXRlfSBkbyBTcHJpbmcgRnJhbWV3b3JrLgorICoKKyAqIEBhdXRob3IgTWFyY3VzIEJyaXRvCisgKi8KK3B1YmxpYyBjbGFzcyBQdWxsREFPSmRiY1RlbXBsYXRlIGltcGxlbWVudHMgUHVsbERBTworeworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBTVEFUVVNfSU5JQ0lBTCA9IC03OworCisgICAgcHJpdmF0ZSBKZGJjVGVtcGxhdGUgdGVtcGxhdGU7CisKKyAgICBwdWJsaWMgU3RyaW5nIGJ1c2NhclVSTFByb3ZlZG9yKFN0cmluZyBwcm92ZWRvcikKKyAgICB7CisgICAgICAgIFN0cmluZyBzcWwgPSAiU0VMRUNUIHVybCBGUk9NIHB1bGxfdXJsIFdIRVJFIHByb3ZlZG9yID0gPyI7CisgICAgICAgIHJldHVybiAoU3RyaW5nKSB0ZW1wbGF0ZS5xdWVyeUZvck9iamVjdChzcWwsIG5ldyBPYmplY3RbXXtwcm92ZWRvcn0sIFN0cmluZy5jbGFzcyk7CisgICAgfQorCisgICAgcHVibGljIExvbmcgaW5zZXJpck1lbnNhZ2VtSGlzdG9yaWNvKE1lbnNhZ2VtUHVsbCBtZW5zYWdlbSkKKyAgICB7CisgICAgICAgIFN0cmluZyBzcWwgPSAiIiArCisgICAgICAgICAgICAiSU5TRVJUIElOVE8gcHVsbF9oaXN0b3JpY28gKFxuIiArCisgICAgICAgICAgICAiICAgIGlkX2xvZyxcbiIgKworICAgICAgICAgICAgIiAgICBwcm92ZWRvcixcbiIgKworICAgICAgICAgICAgIiAgICBvcmlnZW0sXG4iICsKKyAgICAgICAgICAgICIgICAgZGVzdGlubyxcbiIgKworICAgICAgICAgICAgIiAgICBtc2dfb3JpZ2luYWRhLFxuIiArCisgICAgICAgICAgICAiICAgIGNvZF9lcnJvLFxuIiArCisgICAgICAgICAgICAiICAgIGR0X3JlY2VwY2FvXG4iICsKKyAgICAgICAgICAgICIpIFZBTFVFUyAoPywgPywgPywgPywgPywgPywgc3lzZGF0ZSkiOworCisgICAgICAgIExvbmcgaWQgPSBidXNjYXJQcm94aW1vSUQoKTsKKworICAgICAgICB0ZW1wbGF0ZS51cGRhdGUoc3FsLCBuZXcgT2JqZWN0W117aWQsIG1lbnNhZ2VtLmdldENvZGlnb1Byb3ZlZG9yKCksCisgICAgICAgICAgICAgICAgbWVuc2FnZW0uZ2V0TWVuc2FnZW1PcmlnaW5hbCgpLmdldE9yaWdlbSgpLCBtZW5zYWdlbS5nZXRNZW5zYWdlbU9yaWdpbmFsKCkuZ2V0RGVzdGlubygpLAorICAgICAgICAgICAgICAgIG1lbnNhZ2VtLmdldE1lbnNhZ2VtT3JpZ2luYWwoKS5nZXRNZW5zYWdlbSgpLCBTVEFUVVNfSU5JQ0lBTH0pOworCisgICAgICAgIHJldHVybiBpZDsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBhdHVhbGl6YXJNZW5zYWdlbUhpc3RvcmljbyhMb25nIGlkLCBpbnQgc3RhdHVzLCBTdHJpbmcgbWVuc2FnZW0pCisgICAgeworICAgICAgICBTdHJpbmcgc3FsID0gIiIgKworICAgICAgICAgICAgIlVQREFURSBwdWxsX2hpc3Rvcmljb1xuIiArCisgICAgICAgICAgICAiICAgU0VUIGNvZF9lcnJvICAgICA9ID8sXG4iICsKKyAgICAgICAgICAgICIgICAgICAgbXNnX3JlY2ViaWRhID0gPyxcbiIgKworICAgICAgICAgICAgIiAgICAgICBkdF9yZXNwb3N0YSAgPSBTWVNEQVRFXG4iICsKKyAgICAgICAgICAgICIgV0hFUkUgaWRfbG9nICAgICAgID0gPyI7CisKKyAgICAgICAgdGVtcGxhdGUudXBkYXRlKHNxbCwgbmV3IE9iamVjdFtde3N0YXR1cywgbWVuc2FnZW0sIGlkfSk7CisgICAgfQorCisgICAgcHJpdmF0ZSBsb25nIGJ1c2NhclByb3hpbW9JRCgpCisgICAgeworICAgICAgICByZXR1cm4gdGVtcGxhdGUucXVlcnlGb3JMb25nKCJTRUxFQ1Qgc2VxX2lkX2xvZy5uZXh0dmFsIEZST00gZHVhbCIpOworICAgIH0KKworICAgIC8qKgorICAgICAqIEBwYXJhbSBkcyBPIERhdGFTb3VyY2UgdXRpbGl6YWRvIHBhcmEgYWNlc3NvIGFvIGJhbmNvIGRlIGRhZG9zLgorICAgICAqLworICAgIHB1YmxpYyB2b2lkIHNldERhdGFTb3VyY2UoRGF0YVNvdXJjZSBkcykKKyAgICB7CisgICAgICAgIHRoaXMudGVtcGxhdGUgPSBuZXcgSmRiY1RlbXBsYXRlKGRzKTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9mb3JtYXR0ZXIvamF2YS9TQ1IxMTc5OV9hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9mb3JtYXR0ZXIvamF2YS9TQ1IxMTc5OV9hZnRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFkZmZmZDEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL2Zvcm1hdHRlci9qYXZhL1NDUjExNzk5X2FmdGVyLmphdmEKQEAgLTAsMCArMSw3MyBAQAorcGFja2FnZSBici5jb20udml2by50b3JwZWRlaXJvLnB1bGwuaW1wbDsKKworaW1wb3J0IGJyLmNvbS52aXZvLnRvcnBlZGVpcm8ucHVsbC5NZW5zYWdlbVB1bGw7CitpbXBvcnQgYnIuY29tLnZpdm8udG9ycGVkZWlyby5wdWxsLlB1bGxEQU87CitpbXBvcnQgb3JnLnNwcmluZ2ZyYW1ld29yay5qZGJjLmNvcmUuSmRiY1RlbXBsYXRlOworCitpbXBvcnQgamF2YXguc3FsLkRhdGFTb3VyY2U7CisKKy8qKgorICogSW1wbGVtZW50YT8gcGFkcj9kZSB7QGxpbmsgUHVsbERBT30gcXVlIHJlYWxpemEgdG9kYXMgYXMgb3BlcmE/cyB1dGlsaXphbmRvIFNRTCBhdHJhdj9kZSB1bSB7QGxpbmsKKyAqIEpkYmNUZW1wbGF0ZX0gZG8gU3ByaW5nIEZyYW1ld29yay4KKyAqCisgKiBAYXV0aG9yIE1hcmN1cyBCcml0bworICovCitwdWJsaWMgY2xhc3MgUHVsbERBT0pkYmNUZW1wbGF0ZSBpbXBsZW1lbnRzIFB1bGxEQU8KK3sKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgU1RBVFVTX0lOSUNJQUwgPSAtNzsKKworICAgIHByaXZhdGUgSmRiY1RlbXBsYXRlIHRlbXBsYXRlOworCisgICAgcHVibGljIFN0cmluZyBidXNjYXJVUkxQcm92ZWRvcihTdHJpbmcgcHJvdmVkb3IpCisgICAgeworICAgICAgICBTdHJpbmcgc3FsID0gIlNFTEVDVCB1cmwgRlJPTSBwdWxsX3VybCBXSEVSRSBwcm92ZWRvciA9ID8iOworICAgICAgICByZXR1cm4gKFN0cmluZykgdGVtcGxhdGUucXVlcnlGb3JPYmplY3Qoc3FsLCBuZXcgT2JqZWN0W117cHJvdmVkb3J9LCBTdHJpbmcuY2xhc3MpOworICAgIH0KKworICAgIHB1YmxpYyBMb25nIGluc2VyaXJNZW5zYWdlbUhpc3RvcmljbyhNZW5zYWdlbVB1bGwgbWVuc2FnZW0pCisgICAgeworICAgICAgICBTdHJpbmcgc3FsID0gIiIgKworICAgICAgICAgICAgIklOU0VSVCBJTlRPIHB1bGxfaGlzdG9yaWNvIChcbiIgKworICAgICAgICAgICAgIiAgICBpZF9sb2csXG4iICsKKyAgICAgICAgICAgICIgICAgcHJvdmVkb3IsXG4iICsKKyAgICAgICAgICAgICIgICAgb3JpZ2VtLFxuIiArCisgICAgICAgICAgICAiICAgIGRlc3Rpbm8sXG4iICsKKyAgICAgICAgICAgICIgICAgbXNnX29yaWdpbmFkYSxcbiIgKworICAgICAgICAgICAgIiAgICBjb2RfZXJybyxcbiIgKworICAgICAgICAgICAgIiAgICBkdF9yZWNlcGNhb1xuIiArCisgICAgICAgICAgICAiKSBWQUxVRVMgKD8sID8sID8sID8sID8sID8sIHN5c2RhdGUpIjsKKworICAgICAgICBMb25nIGlkID0gYnVzY2FyUHJveGltb0lEKCk7CisKKyAgICAgICAgdGVtcGxhdGUudXBkYXRlKHNxbCwgbmV3IE9iamVjdFtde2lkLCBtZW5zYWdlbS5nZXRDb2RpZ29Qcm92ZWRvcigpLAorICAgICAgICAgICAgbWVuc2FnZW0uZ2V0TWVuc2FnZW1PcmlnaW5hbCgpLmdldE9yaWdlbSgpLCBtZW5zYWdlbS5nZXRNZW5zYWdlbU9yaWdpbmFsKCkuZ2V0RGVzdGlubygpLAorICAgICAgICAgICAgbWVuc2FnZW0uZ2V0TWVuc2FnZW1PcmlnaW5hbCgpLmdldE1lbnNhZ2VtKCksIFNUQVRVU19JTklDSUFMfSk7CisKKyAgICAgICAgcmV0dXJuIGlkOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIGF0dWFsaXphck1lbnNhZ2VtSGlzdG9yaWNvKExvbmcgaWQsIGludCBzdGF0dXMsIFN0cmluZyBtZW5zYWdlbSkKKyAgICB7CisgICAgICAgIFN0cmluZyBzcWwgPSAiIiArCisgICAgICAgICAgICAiVVBEQVRFIHB1bGxfaGlzdG9yaWNvXG4iICsKKyAgICAgICAgICAgICIgICBTRVQgY29kX2Vycm8gICAgID0gPyxcbiIgKworICAgICAgICAgICAgIiAgICAgICBtc2dfcmVjZWJpZGEgPSA/LFxuIiArCisgICAgICAgICAgICAiICAgICAgIGR0X3Jlc3Bvc3RhICA9IFNZU0RBVEVcbiIgKworICAgICAgICAgICAgIiBXSEVSRSBpZF9sb2cgICAgICAgPSA/IjsKKworICAgICAgICB0ZW1wbGF0ZS51cGRhdGUoc3FsLCBuZXcgT2JqZWN0W117c3RhdHVzLCBtZW5zYWdlbSwgaWR9KTsKKyAgICB9CisKKyAgICBwcml2YXRlIGxvbmcgYnVzY2FyUHJveGltb0lEKCkKKyAgICB7CisgICAgICAgIHJldHVybiB0ZW1wbGF0ZS5xdWVyeUZvckxvbmcoIlNFTEVDVCBzZXFfaWRfbG9nLm5leHR2YWwgRlJPTSBkdWFsIik7CisgICAgfQorCisgICAgLyoqCisgICAgICogQHBhcmFtIGRzIE8gRGF0YVNvdXJjZSB1dGlsaXphZG8gcGFyYSBhY2Vzc28gYW8gYmFuY28gZGUgZGFkb3MuCisgICAgICovCisgICAgcHVibGljIHZvaWQgc2V0RGF0YVNvdXJjZShEYXRhU291cmNlIGRzKQorICAgIHsKKyAgICAgICAgdGhpcy50ZW1wbGF0ZSA9IG5ldyBKZGJjVGVtcGxhdGUoZHMpOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL2Zvcm1hdHRlci9qYXZhL1NDUjI1OS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9mb3JtYXR0ZXIvamF2YS9TQ1IyNTkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMzc2NTI2Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9mb3JtYXR0ZXIvamF2YS9TQ1IyNTkuamF2YQpAQCAtMCwwICsxLDYgQEAKK2NsYXNzIEZvbyB7CisgICAgdm9pZCBmb28oKXsKKyAgICAgIGlmIChhKQorICAgICAgICBmb28oKTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9mb3JtYXR0ZXIvamF2YS9TQ1IyNTlfYWZ0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvZm9ybWF0dGVyL2phdmEvU0NSMjU5X2FmdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODZiZTM2NwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvZm9ybWF0dGVyL2phdmEvU0NSMjU5X2FmdGVyLmphdmEKQEAgLTAsMCArMSw3IEBACitjbGFzcyBGb28geworICAgIHZvaWQgZm9vKCl7CisgICAgICAgIGlmIChhKSB7CisgICAgICAgICAgICBmb28oKTsKKyAgICAgICAgfQorICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL2Zvcm1hdHRlci9qYXZhL1NDUjI2MC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9mb3JtYXR0ZXIvamF2YS9TQ1IyNjAuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MTliZDU3Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9mb3JtYXR0ZXIvamF2YS9TQ1IyNjAuamF2YQpAQCAtMCwwICsxLDE2IEBACitjbGFzcyBUZXN0Rm9ybWF0Cit7CisgIHB1YmxpYyB2b2lkIHRlc3QoYm9vbGVhbiBpc0EsIGJvb2xlYW4gaXNCLCBib29sZWFuIGlzQykgeworICAgIGlmIChpc0EpCisgICAgLy8gZG9Tb21ldGhpbmdFbHNlKDEpCisgICAgICBkb1NvbWV0aGluZygxKTsKKyAgICBlbHNlIGlmIChpc0IpCisgICAgLy8gZG9Tb21ldGhpbmdFbHNlKDIpCisgICAgICBkb1NvbWV0aGluZygyKTsKKyAgICBlbHNlIGlmIChpc0MpCisgICAgLy8gZG9Tb21ldGhpbmdFbHNlKDMpCisgICAgICBkb1NvbWV0aGluZygzKTsKKworICB9CisKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL2Zvcm1hdHRlci9qYXZhL1NDUjI2MF9hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9mb3JtYXR0ZXIvamF2YS9TQ1IyNjBfYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZTA3ZmZjCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9mb3JtYXR0ZXIvamF2YS9TQ1IyNjBfYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDE5IEBACitjbGFzcyBUZXN0Rm9ybWF0IHsKKyAgICBwdWJsaWMgdm9pZCB0ZXN0KGJvb2xlYW4gaXNBLCBib29sZWFuIGlzQiwgYm9vbGVhbiBpc0MpIHsKKyAgICAgICAgaWYgKGlzQSkKKyAgICAgICAgLy8gZG9Tb21ldGhpbmdFbHNlKDEpCisgICAgICAgIHsKKyAgICAgICAgICAgIGRvU29tZXRoaW5nKDEpOworICAgICAgICB9IGVsc2UgaWYgKGlzQikKKyAgICAgICAgLy8gZG9Tb21ldGhpbmdFbHNlKDIpCisgICAgICAgIHsKKyAgICAgICAgICAgIGRvU29tZXRoaW5nKDIpOworICAgICAgICB9IGVsc2UgaWYgKGlzQykKKyAgICAgICAgLy8gZG9Tb21ldGhpbmdFbHNlKDMpCisgICAgICAgIHsKKyAgICAgICAgICAgIGRvU29tZXRoaW5nKDMpOworICAgICAgICB9CisKKyAgICB9CisKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL2Zvcm1hdHRlci9qYXZhL1NDUjI3OS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9mb3JtYXR0ZXIvamF2YS9TQ1IyNzkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNmYxMGJiCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9mb3JtYXR0ZXIvamF2YS9TQ1IyNzkuamF2YQpAQCAtMCwwICsxLDYgQEAKK2NsYXNzIEZvbyB7CisgICAgdm9pZCBmb28oKXsKKyAgICAgICAgaWYgKEFBQSA9PSBCQkIgfHwKKyAgICAgICAgICAgIENDQykgY29udGludWU7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvZm9ybWF0dGVyL2phdmEvU0NSMjc5X2FmdGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL2Zvcm1hdHRlci9qYXZhL1NDUjI3OV9hZnRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRlZTQ3N2UKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL2Zvcm1hdHRlci9qYXZhL1NDUjI3OV9hZnRlci5qYXZhCkBAIC0wLDAgKzEsNiBAQAorY2xhc3MgRm9vIHsKKyAgICB2b2lkIGZvbygpIHsKKyAgICAgICAgaWYgKEFBQSA9PSBCQkIgfHwKKyAgICAgICAgICAgIENDQykgY29udGludWU7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvZm9ybWF0dGVyL2phdmEvU0NSMzk1LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL2Zvcm1hdHRlci9qYXZhL1NDUjM5NS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQyMGY3NTMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL2Zvcm1hdHRlci9qYXZhL1NDUjM5NS5qYXZhCkBAIC0wLDAgKzEsNSBAQAorcHVibGljIGNsYXNzIFkgaW1wbGVtZW50cyBYIHsKKyAgICBwdWJsaWMgdm9pZCBkb1NvbWV0aGluZygpIC8vIHRoaXMgZG9lcyBzb21ldGhpbmcKKyAgICB7IAorICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL2Zvcm1hdHRlci9qYXZhL1NDUjM5NV9hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9mb3JtYXR0ZXIvamF2YS9TQ1IzOTVfYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44Yjc4ZGJmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9mb3JtYXR0ZXIvamF2YS9TQ1IzOTVfYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDUgQEAKK3B1YmxpYyBjbGFzcyBZIGltcGxlbWVudHMgWCB7CisgICAgcHVibGljIHZvaWQgZG9Tb21ldGhpbmcoKSAvLyB0aGlzIGRvZXMgc29tZXRoaW5nCisgICAgeworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL2Zvcm1hdHRlci9qYXZhL1NDUjQyOS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9mb3JtYXR0ZXIvamF2YS9TQ1I0MjkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNzgzNTg1Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9mb3JtYXR0ZXIvamF2YS9TQ1I0MjkuamF2YQpAQCAtMCwwICsxLDMyIEBACitjbGFzcyBGb28geworCisKKworCisKKworICAgIHZvaWQgZm9vKCkgeworCisKKworCisKKyAgICAgICAgaW50IGkgPSAwOworCisKKworCisKKyAgICAgICAgaW50IGogPSAwOworCisKKworCisKKyAgICB9CisKKworCisKKworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvZm9ybWF0dGVyL2phdmEvU0NSNDI5X2FmdGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL2Zvcm1hdHRlci9qYXZhL1NDUjQyOV9hZnRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNlYjYyYWUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL2Zvcm1hdHRlci9qYXZhL1NDUjQyOV9hZnRlci5qYXZhCkBAIC0wLDAgKzEsMTYgQEAKK2NsYXNzIEZvbyB7CisKKworICAgIHZvaWQgZm9vKCkgeworCisKKyAgICAgICAgaW50IGkgPSAwOworCisKKyAgICAgICAgaW50IGogPSAwOworCisKKyAgICB9CisKKworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvZm9ybWF0dGVyL2phdmEvU0NSNTAxLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL2Zvcm1hdHRlci9qYXZhL1NDUjUwMS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQxY2I3YjkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL2Zvcm1hdHRlci9qYXZhL1NDUjUwMS5qYXZhCkBAIC0wLDAgKzEsMTMgQEAKK2NsYXNzIEEgeworLy9jb21tZW50MQordm9pZCBtZXRob2QoKQorLy9jb21tZW50MgoreworaWYgKGEpCisvL2NvbW1lbnQzCit7CisvL2NvbW1lbnQ0Cit9CisvL2NvbW1lbnQ1Cit9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9mb3JtYXR0ZXIvamF2YS9TQ1I1MDFfYWZ0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvZm9ybWF0dGVyL2phdmEvU0NSNTAxX2FmdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWZjYmQ5NwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvZm9ybWF0dGVyL2phdmEvU0NSNTAxX2FmdGVyLmphdmEKQEAgLTAsMCArMSwxMyBAQAorY2xhc3MgQSB7CisgICAgLy9jb21tZW50MQorICAgIHZvaWQgbWV0aG9kKCkKKy8vY29tbWVudDIKKyAgICB7CisgICAgICAgIGlmIChhKQorLy9jb21tZW50MworICAgICAgICB7CisvL2NvbW1lbnQ0CisgICAgICAgIH0KKy8vY29tbWVudDUKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9mb3JtYXR0ZXIvamF2YS9TQ1I1NDguamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvZm9ybWF0dGVyL2phdmEvU0NSNTQ4LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmFjYmVkMgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvZm9ybWF0dGVyL2phdmEvU0NSNTQ4LmphdmEKQEAgLTAsMCArMSw4IEBACitjbGFzcyBGb28geworICBwdWJsaWMgdm9pZCBmb28oKXsKKyAgICByZXR1cm4gX3N0YXR1cyA9PSBFbmhhbmNlZE1lbWJlck9yZGVyU3RhdHVzLkVESVRJTkcKK3x8IF9zdGF0dXMgPT0gRW5oYW5jZWRNZW1iZXJPcmRlclN0YXR1cy5SRVNVTUlORworfHwgX3N0YXR1cyA9PSBFbmhhbmNlZE1lbWJlck9yZGVyU3RhdHVzLk9QRU47IAorCisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL2Zvcm1hdHRlci9qYXZhL1NDUjU0OF9hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9mb3JtYXR0ZXIvamF2YS9TQ1I1NDhfYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNzA2MzEyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9mb3JtYXR0ZXIvamF2YS9TQ1I1NDhfYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDggQEAKK2NsYXNzIEZvbyB7CisgICAgcHVibGljIHZvaWQgZm9vKCkgeworICAgICAgICByZXR1cm4gX3N0YXR1cyA9PSBFbmhhbmNlZE1lbWJlck9yZGVyU3RhdHVzLkVESVRJTkcKKyAgICAgICAgICB8fCBfc3RhdHVzID09IEVuaGFuY2VkTWVtYmVyT3JkZXJTdGF0dXMuUkVTVU1JTkcKKyAgICAgICAgICB8fCBfc3RhdHVzID09IEVuaGFuY2VkTWVtYmVyT3JkZXJTdGF0dXMuT1BFTjsKKworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL2Zvcm1hdHRlci9qYXZhL1NDUjg3OS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9mb3JtYXR0ZXIvamF2YS9TQ1I4NzkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MTEwODFmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9mb3JtYXR0ZXIvamF2YS9TQ1I4NzkuamF2YQpAQCAtMCwwICsxLDIzIEBACitjbGFzcyBBIHsKK3ZvaWQgZm9vKCl7Citzd2l0Y2ggKHgpCit7CisKK2Nhc2UgMDoKK3sgLy8gZG9uJ3Qgd2FudCB0aGUgYnJhY2UgaW5kZW50ZWQKKworYnJlYWs7Cit9CisKKworY2FzZSAxOgoreworCiticmVhazsKK30KKworCit9IAorCit9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9mb3JtYXR0ZXIvamF2YS9TQ1I4NzlfYWZ0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvZm9ybWF0dGVyL2phdmEvU0NSODc5X2FmdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWY0MjczMAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvZm9ybWF0dGVyL2phdmEvU0NSODc5X2FmdGVyLmphdmEKQEAgLTAsMCArMSwyMyBAQAorY2xhc3MgQSB7CisgICAgdm9pZCBmb28oKSB7CisgICAgICAgIHN3aXRjaCAoeCkKKyAgICAgICAgeworCisgICAgICAgICAgICBjYXNlIDA6CisgICAgICAgICAgICB7IC8vIGRvbid0IHdhbnQgdGhlIGJyYWNlIGluZGVudGVkCisKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKworCisgICAgICAgICAgICBjYXNlIDE6CisgICAgICAgICAgICB7CisKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKworCisgICAgICAgIH0KKworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL2Zvcm1hdHRlci9qYXZhL1NDUjkxNS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9mb3JtYXR0ZXIvamF2YS9TQ1I5MTUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOWE1ZDY2Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9mb3JtYXR0ZXIvamF2YS9TQ1I5MTUuamF2YQpAQCAtMCwwICsxLDYgQEAKK2NsYXNzIEF7CisgICAgeworICAgICAgICB5ID0geCsrICsgNjsKKyAgICAgICAgeSA9IDYgKyArK3g7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvZm9ybWF0dGVyL2phdmEvU0NSOTE1X2FmdGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL2Zvcm1hdHRlci9qYXZhL1NDUjkxNV9hZnRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ3NzNhMDIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL2Zvcm1hdHRlci9qYXZhL1NDUjkxNV9hZnRlci5qYXZhCkBAIC0wLDAgKzEsNiBAQAorY2xhc3MgQSB7CisgICAgeworICAgICAgICB5ID0geCsrKzY7CisgICAgICAgIHkgPSA2KyArK3g7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvZm9ybWF0dGVyL2phdmEvU0NSOTcwLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL2Zvcm1hdHRlci9qYXZhL1NDUjk3MC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhmYmJjZTEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL2Zvcm1hdHRlci9qYXZhL1NDUjk3MC5qYXZhCkBAIC0wLDAgKzEsNSBAQAorY2xhc3MgRm9vIHsKKyAgICB2b2lkIGZvbyhpbnQgYSwgaW50IGIsIGludCBjLCBpbnQgZCkgdGhyb3dzIEV4Y2VwdGlvbiwgUnVudGltZUV4Y2VwdGlvbnsKKworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL2Zvcm1hdHRlci9qYXZhL1NDUjk3MF9hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9mb3JtYXR0ZXIvamF2YS9TQ1I5NzBfYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lM2MzMzAyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9mb3JtYXR0ZXIvamF2YS9TQ1I5NzBfYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDYgQEAKK2NsYXNzIEZvbyB7CisgICAgdm9pZCBmb28oaW50IGEsIGludCBiLCBpbnQgYywgaW50IGQpCisgICAgICAgICAgICB0aHJvd3MgRXhjZXB0aW9uLCBSdW50aW1lRXhjZXB0aW9uIHsKKworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL2Zvcm1hdHRlci9qYXZhL1NwYWNlcy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9mb3JtYXR0ZXIvamF2YS9TcGFjZXMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYjAxYzMyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9mb3JtYXR0ZXIvamF2YS9TcGFjZXMuamF2YQpAQCAtMCwwICsxLDkgQEAKK2NsYXNzIEZvb3sKKyAgICB2b2lkIGZvbyhpbnQgaSxpbnQgail7CisgICAgICAgIGZvcihpbnQgaT0wO2k8MTtpKyspeworCisgICAgICAgIH0KKyAgICAgICAgaWYoYSl7fQorICAgICAgICBmb28oMSwyKTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9mb3JtYXR0ZXIvamF2YS9TcGFjZXNCZWZvcmVMQnJhY2UuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvZm9ybWF0dGVyL2phdmEvU3BhY2VzQmVmb3JlTEJyYWNlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2IxMmM2NAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvZm9ybWF0dGVyL2phdmEvU3BhY2VzQmVmb3JlTEJyYWNlLmphdmEKQEAgLTAsMCArMSwzNyBAQAorY2xhc3MgRm9veworICAgIHZvaWQgZm9vKCl7CisgICAgICAgIGlmIChhKXsKKworICAgICAgICB9IGVsc2V7CisKKyAgICAgICAgfQorICAgICAgICB3aGlsZSAoYSl7CisKKyAgICAgICAgfQorICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDEwOyBpKyspeworCisgICAgICAgIH0KKworICAgICAgICBkb3sKKworICAgICAgICB9IHdoaWxlICh0cnVlKTsKKworICAgICAgICBzd2l0Y2ggKGEpeworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgdHJ5eworCisgICAgICAgIH0gY2F0Y2ggKEUgZSl7CisKKyAgICAgICAgfSBmaW5hbGx5eworCisgICAgICAgIH0KKworICAgICAgICBzeW5jaHJvbml6ZWQgKHRoaXMpeworCisgICAgICAgIH0KKworICAgICAgICBpbnRbXSBpID0gbmV3IGludFtdezEsIDIsIDN9OworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL2Zvcm1hdHRlci9qYXZhL1NwYWNlc0JlZm9yZUxCcmFjZV9hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9mb3JtYXR0ZXIvamF2YS9TcGFjZXNCZWZvcmVMQnJhY2VfYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40Mjg3MDFjCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9mb3JtYXR0ZXIvamF2YS9TcGFjZXNCZWZvcmVMQnJhY2VfYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDM3IEBACitjbGFzcyBGb28geworICAgIHZvaWQgZm9vKCkgeworICAgICAgICBpZiAoYSkgeworCisgICAgICAgIH0gZWxzZSB7CisKKyAgICAgICAgfQorICAgICAgICB3aGlsZSAoYSkgeworCisgICAgICAgIH0KKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAxMDsgaSsrKSB7CisKKyAgICAgICAgfQorCisgICAgICAgIGRvIHsKKworICAgICAgICB9IHdoaWxlICh0cnVlKTsKKworICAgICAgICBzd2l0Y2ggKGEpIHsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIHRyeSB7CisKKyAgICAgICAgfSBjYXRjaCAoRSBlKSB7CisKKyAgICAgICAgfSBmaW5hbGx5IHsKKworICAgICAgICB9CisKKyAgICAgICAgc3luY2hyb25pemVkICh0aGlzKSB7CisKKyAgICAgICAgfQorCisgICAgICAgIGludFtdIGkgPSBuZXcgaW50W10gezEsIDIsIDN9OworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL2Zvcm1hdHRlci9qYXZhL1NwYWNlc19hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9mb3JtYXR0ZXIvamF2YS9TcGFjZXNfYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNzQ0OWU0Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9mb3JtYXR0ZXIvamF2YS9TcGFjZXNfYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDEwIEBACitjbGFzcyBGb28geworICAgIHZvaWQgZm9vICggaW50IGksIGludCBqICkgeworICAgICAgICBmb3IgKCBpbnQgaSA9IDA7IGkgPCAxOyBpKysgKSB7CisKKyAgICAgICAgfQorICAgICAgICBpZiAoIGEgKSB7CisgICAgICAgIH0KKyAgICAgICAgZm9vICggMSwgMiApOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL2Zvcm1hdHRlci9qYXZhL1N3aXRjaC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9mb3JtYXR0ZXIvamF2YS9Td2l0Y2guamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNTU3ZDM2Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9mb3JtYXR0ZXIvamF2YS9Td2l0Y2guamF2YQpAQCAtMCwwICsxLDExIEBACitjbGFzcyBGb297CisgICAgdm9pZCBmb28oKXsKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKGEpIHsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAwOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9DYXNlMCgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgICAgICAgICBkb0RlZmF1bHQoKTsKKyAgICAgICAgICAgICAgICAgICAgfSAgICAKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9mb3JtYXR0ZXIvamF2YS9Td2l0Y2hfYWZ0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvZm9ybWF0dGVyL2phdmEvU3dpdGNoX2FmdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTE0NjQ4YQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvZm9ybWF0dGVyL2phdmEvU3dpdGNoX2FmdGVyLmphdmEKQEAgLTAsMCArMSwxMSBAQAorY2xhc3MgRm9vIHsKKyAgICB2b2lkIGZvbygpIHsKKyAgICAgICAgc3dpdGNoIChhKSB7CisgICAgICAgICAgICBjYXNlIDA6CisgICAgICAgICAgICAgICAgZG9DYXNlMCgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBkb0RlZmF1bHQoKTsKKyAgICAgICAgfQorICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL2Zvcm1hdHRlci9qYXZhL1N5bmNocm9uaXplZEJsb2NrLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL2Zvcm1hdHRlci9qYXZhL1N5bmNocm9uaXplZEJsb2NrLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTgxOTFiOQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvZm9ybWF0dGVyL2phdmEvU3luY2hyb25pemVkQmxvY2suamF2YQpAQCAtMCwwICsxLDkgQEAKK2NsYXNzIEZvb3sKK3B1YmxpYyB2b2lkIGZvbygpeworTE9HLmJhcigpOworc3luY2hyb25pemVkICh0aGlzKXsKK2JhcigpOworYmFyKCk7Cit9Cit9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9mb3JtYXR0ZXIvamF2YS9TeW5jaHJvbml6ZWRCbG9ja19hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9mb3JtYXR0ZXIvamF2YS9TeW5jaHJvbml6ZWRCbG9ja19hZnRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNlN2Q2OTY3Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9mb3JtYXR0ZXIvamF2YS9TeW5jaHJvbml6ZWRCbG9ja19hZnRlci5qYXZhCkBAIC0wLDAgKzEsOSBAQAorY2xhc3MgRm9vIHsKKyAgICBwdWJsaWMgdm9pZCBmb28oKSB7CisgICAgICAgIExPRy5iYXIoKTsKKyAgICAgICAgc3luY2hyb25pemVkKHRoaXMpeworICAgICAgICAgICAgYmFyKCk7CisgICAgICAgICAgICBiYXIoKTsKKyAgICAgICAgfQorICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL2Zvcm1hdHRlci9qYXZhL1Rlcm5hcnlFeHByZXNzaW9uLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL2Zvcm1hdHRlci9qYXZhL1Rlcm5hcnlFeHByZXNzaW9uLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGZkMDRiYwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvZm9ybWF0dGVyL2phdmEvVGVybmFyeUV4cHJlc3Npb24uamF2YQpAQCAtMCwwICsxLDggQEAKK2NsYXNzIEZvb3sKKyAgICB2b2lkIGZvbygpeworICAgICAgICAgICAgICAgICAgICBpbnQgc29tZVZhcmlhYmxlID0gYSA/CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHggOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5OworCisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvZm9ybWF0dGVyL2phdmEvVGVybmFyeUV4cHJlc3Npb25fRG9Ob3RBbGlnbl9hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9mb3JtYXR0ZXIvamF2YS9UZXJuYXJ5RXhwcmVzc2lvbl9Eb05vdEFsaWduX2FmdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWFhMGI1MgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvZm9ybWF0dGVyL2phdmEvVGVybmFyeUV4cHJlc3Npb25fRG9Ob3RBbGlnbl9hZnRlci5qYXZhCkBAIC0wLDAgKzEsOCBAQAorY2xhc3MgRm9vIHsKKyAgICB2b2lkIGZvbygpIHsKKyAgICAgICAgaW50IHNvbWVWYXJpYWJsZSA9IGEgPworICAgICAgICAgICAgICAgIHggOgorICAgICAgICAgICAgICAgIHk7CisKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9mb3JtYXR0ZXIvamF2YS9UZXJuYXJ5RXhwcmVzc2lvbl9hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9mb3JtYXR0ZXIvamF2YS9UZXJuYXJ5RXhwcmVzc2lvbl9hZnRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgxMzViYzgKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL2Zvcm1hdHRlci9qYXZhL1Rlcm5hcnlFeHByZXNzaW9uX2FmdGVyLmphdmEKQEAgLTAsMCArMSw4IEBACitjbGFzcyBGb28geworICAgIHZvaWQgZm9vKCkgeworICAgICAgICBpbnQgc29tZVZhcmlhYmxlID0gYSA/CisgICAgICAgICAgICAgICAgICAgICAgICAgICB4IDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHk7CisKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9mb3JtYXR0ZXIvamF2YS9UcnlDYXRjaC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9mb3JtYXR0ZXIvamF2YS9UcnlDYXRjaC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgxZGUzNDkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL2Zvcm1hdHRlci9qYXZhL1RyeUNhdGNoLmphdmEKQEAgLTAsMCArMSwxNiBAQAorIGNsYXNzIEN7Cisgdm9pZCBtZXRob2QoKXsKKyAgdHJ5IHsKKyAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpeworICBpbnQgaT0wOworIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKXsKKyBpbnQgaT0wOworIH1jYXRjaCAoRXhjZXB0aW9uIGUpeworIGludCBpPTA7CisgfWNhdGNoIChFeGNlcHRpb24gZSl7CisgaW50IGk9MDsKKyB9Y2F0Y2ggKEV4Y2VwdGlvbiBlKXsKKyBpbnQgaT0wOworIH0KKyB9CisgfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvZm9ybWF0dGVyL2phdmEvVHJ5Q2F0Y2hfYWZ0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvZm9ybWF0dGVyL2phdmEvVHJ5Q2F0Y2hfYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYzVkNzAxCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9mb3JtYXR0ZXIvamF2YS9UcnlDYXRjaF9hZnRlci5qYXZhCkBAIC0wLDAgKzEsMTYgQEAKKyBjbGFzcyBDeworIHZvaWQgbWV0aG9kKCl7CisgIHRyeSB7CisgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgICBpbnQgaSA9IDA7CisgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKXsKKyBpbnQgaT0wOworIH1jYXRjaCAoRXhjZXB0aW9uIGUpeworIGludCBpPTA7CisgfWNhdGNoIChFeGNlcHRpb24gZSl7CisgaW50IGk9MDsKKyB9Y2F0Y2ggKEV4Y2VwdGlvbiBlKXsKKyBpbnQgaT0wOworIH0KKyB9CisgfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvZm9ybWF0dGVyL2phdmEvV3JhcEFzc2VydGlvbi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9mb3JtYXR0ZXIvamF2YS9XcmFwQXNzZXJ0aW9uLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWY3Y2ZkOQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvZm9ybWF0dGVyL2phdmEvV3JhcEFzc2VydGlvbi5qYXZhCkBAIC0wLDAgKzEsNSBAQAorY2xhc3MgRm9veworICAgIHB1YmxpYyB2b2lkIGZvbygpeworICAgICAgICBhc3NlcnRFcXVhbHMobWFwLmdldChuZXcgRmlsZSgiQzpcXFBlcmZvcmNlVGVzdDFcXGNyZWF0ZWQyLnR4dCIpKSwgKTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9mb3JtYXR0ZXIvamF2YS9XcmFwQXNzZXJ0aW9uX2FmdGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL2Zvcm1hdHRlci9qYXZhL1dyYXBBc3NlcnRpb25fYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOWMzMzg4Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9mb3JtYXR0ZXIvamF2YS9XcmFwQXNzZXJ0aW9uX2FmdGVyLmphdmEKQEAgLTAsMCArMSw1IEBACitjbGFzcyBGb28geworICAgIHB1YmxpYyB2b2lkIGZvbygpIHsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKG1hcC5nZXQobmV3IEZpbGUoIkM6XFxQZXJmb3JjZVRlc3QxXFxjcmVhdGVkMi50eHQiKSksICk7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvZ2VuZXJpY3MyMi9jb2xsZWN0LTIuMi5qYXIgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL2dlbmVyaWNzMjIvY29sbGVjdC0yLjIuamFyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE0NTNiYmEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL2dlbmVyaWNzMjIvY29sbGVjdC0yLjIuamFyCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvaW1wbC9iaW5kVG9FbGVtZW50VGVzdC9SZXBsYWNpbmdUeXBlLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL2ltcGwvYmluZFRvRWxlbWVudFRlc3QvUmVwbGFjaW5nVHlwZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFkYjcwY2YKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL2ltcGwvYmluZFRvRWxlbWVudFRlc3QvUmVwbGFjaW5nVHlwZS5qYXZhCkBAIC0wLDAgKzEsNSBAQAoraW1wb3J0IHAxLkE7CisKK2NsYXNzIEMgeworICA8Y2FyZXQ+SSBpID0gbnVsbDsKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvaW1wbC9iaW5kVG9FbGVtZW50VGVzdC9SZXBsYWNpbmdUeXBlLmphdmEuYWZ0ZXIgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL2ltcGwvYmluZFRvRWxlbWVudFRlc3QvUmVwbGFjaW5nVHlwZS5qYXZhLmFmdGVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk4YjhmNDUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL2ltcGwvYmluZFRvRWxlbWVudFRlc3QvUmVwbGFjaW5nVHlwZS5qYXZhLmFmdGVyCkBAIC0wLDAgKzEsNSBAQAoraW1wb3J0IHAxLkE7CisKK2NsYXNzIEMgeworICBwMi5BIGkgPSBudWxsOworfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9pbXBsL2JpbmRUb0VsZW1lbnRUZXN0L1NpbmdsZUNsYXNzSW1wb3J0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL2ltcGwvYmluZFRvRWxlbWVudFRlc3QvU2luZ2xlQ2xhc3NJbXBvcnQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZGI3MGNmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9pbXBsL2JpbmRUb0VsZW1lbnRUZXN0L1NpbmdsZUNsYXNzSW1wb3J0LmphdmEKQEAgLTAsMCArMSw1IEBACitpbXBvcnQgcDEuQTsKKworY2xhc3MgQyB7CisgIDxjYXJldD5JIGkgPSBudWxsOworfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9pbXBsL2JpbmRUb0VsZW1lbnRUZXN0L1NpbmdsZUNsYXNzSW1wb3J0LmphdmEuYWZ0ZXIgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL2ltcGwvYmluZFRvRWxlbWVudFRlc3QvU2luZ2xlQ2xhc3NJbXBvcnQuamF2YS5hZnRlcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OGI4ZjQ1Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9pbXBsL2JpbmRUb0VsZW1lbnRUZXN0L1NpbmdsZUNsYXNzSW1wb3J0LmphdmEuYWZ0ZXIKQEAgLTAsMCArMSw1IEBACitpbXBvcnQgcDEuQTsKKworY2xhc3MgQyB7CisgIHAyLkEgaSA9IG51bGw7Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL2ltcGwvYmluZFRvRWxlbWVudFRlc3QvcHJqL3AxL0EuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvaW1wbC9iaW5kVG9FbGVtZW50VGVzdC9wcmovcDEvQS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVlYzNiZmYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL2ltcGwvYmluZFRvRWxlbWVudFRlc3QvcHJqL3AxL0EuamF2YQpAQCAtMCwwICsxLDQgQEAKK3BhY2thZ2UgcDE7CisKK2NsYXNzIEEgeworfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9pbXBsL2JpbmRUb0VsZW1lbnRUZXN0L3Byai9wMi9BLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL2ltcGwvYmluZFRvRWxlbWVudFRlc3QvcHJqL3AyL0EuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYTlkY2RhCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9pbXBsL2JpbmRUb0VsZW1lbnRUZXN0L3Byai9wMi9BLmphdmEKQEAgLTAsMCArMSw0IEBACitwYWNrYWdlIHAyOworCitjbGFzcyBBIHsKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvaW1wbC9jYWNoZS8xLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL2ltcGwvY2FjaGUvMS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNkNzA4NTgKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL2ltcGwvY2FjaGUvMS5qYXZhCkBAIC0wLDAgKzEgQEAKK2EgYiBjIC8vdG9kbwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvaW1wbC9jYWNoZS8yLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL2ltcGwvY2FjaGUvMi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRkMDRhODMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL2ltcGwvY2FjaGUvMi5qYXZhCkBAIC0wLDAgKzEsMiBAQAorYiBjIGQKKy8vbmV3dG9kbwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvaW1wbC9jYWNoZS8zLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL2ltcGwvY2FjaGUvMy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEwMzNiZTMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL2ltcGwvY2FjaGUvMy5qYXZhCkBAIC0wLDAgKzEsMyBAQAorYyBkIGUKKy8vdG9kbworLy90b2RvClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9pbXBsL2V4dGVuZHNCb3VuZExpc3QvYWRkQm91bmQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvaW1wbC9leHRlbmRzQm91bmRMaXN0L2FkZEJvdW5kLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTY1M2UzYwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvaW1wbC9leHRlbmRzQm91bmRMaXN0L2FkZEJvdW5kLmphdmEKQEAgLTAsMCArMSwyIEBACitjbGFzcyBYPFQ+IHsKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvaW1wbC9leHRlbmRzQm91bmRMaXN0L2FkZEJvdW5kSW5FbmQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvaW1wbC9leHRlbmRzQm91bmRMaXN0L2FkZEJvdW5kSW5FbmQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNjQ4ZjAxCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9pbXBsL2V4dGVuZHNCb3VuZExpc3QvYWRkQm91bmRJbkVuZC5qYXZhCkBAIC0wLDAgKzEsMiBAQAorY2xhc3MgWCA8VCBleHRlbmRzIFJ1bm5hYmxlICYgQ29tcGFyZWFibGU+IHsKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvaW1wbC9leHRlbmRzQm91bmRMaXN0L2FkZEJvdW5kSW5FbmRfYWZ0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvaW1wbC9leHRlbmRzQm91bmRMaXN0L2FkZEJvdW5kSW5FbmRfYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMzc0MzNiCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9pbXBsL2V4dGVuZHNCb3VuZExpc3QvYWRkQm91bmRJbkVuZF9hZnRlci5qYXZhCkBAIC0wLDAgKzEsMiBAQAorY2xhc3MgWCA8VCBleHRlbmRzIFJ1bm5hYmxlICYgQ29tcGFyZWFibGUgJiBDbG9uZWFibGU+IHsKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvaW1wbC9leHRlbmRzQm91bmRMaXN0L2FkZEJvdW5kSW5Gcm9udC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9pbXBsL2V4dGVuZHNCb3VuZExpc3QvYWRkQm91bmRJbkZyb250LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzY0OGYwMQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvaW1wbC9leHRlbmRzQm91bmRMaXN0L2FkZEJvdW5kSW5Gcm9udC5qYXZhCkBAIC0wLDAgKzEsMiBAQAorY2xhc3MgWCA8VCBleHRlbmRzIFJ1bm5hYmxlICYgQ29tcGFyZWFibGU+IHsKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvaW1wbC9leHRlbmRzQm91bmRMaXN0L2FkZEJvdW5kSW5Gcm9udF9hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9pbXBsL2V4dGVuZHNCb3VuZExpc3QvYWRkQm91bmRJbkZyb250X2FmdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTk2ZmY2NwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvaW1wbC9leHRlbmRzQm91bmRMaXN0L2FkZEJvdW5kSW5Gcm9udF9hZnRlci5qYXZhCkBAIC0wLDAgKzEsMiBAQAorY2xhc3MgWCA8VCBleHRlbmRzIENsb25lYWJsZSAmIFJ1bm5hYmxlICYgQ29tcGFyZWFibGU+IHsKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvaW1wbC9leHRlbmRzQm91bmRMaXN0L2FkZEJvdW5kSW5UaGVNaWRkbGUuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvaW1wbC9leHRlbmRzQm91bmRMaXN0L2FkZEJvdW5kSW5UaGVNaWRkbGUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNjQ4ZjAxCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9pbXBsL2V4dGVuZHNCb3VuZExpc3QvYWRkQm91bmRJblRoZU1pZGRsZS5qYXZhCkBAIC0wLDAgKzEsMiBAQAorY2xhc3MgWCA8VCBleHRlbmRzIFJ1bm5hYmxlICYgQ29tcGFyZWFibGU+IHsKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvaW1wbC9leHRlbmRzQm91bmRMaXN0L2FkZEJvdW5kSW5UaGVNaWRkbGVfYWZ0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvaW1wbC9leHRlbmRzQm91bmRMaXN0L2FkZEJvdW5kSW5UaGVNaWRkbGVfYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNjhlYmEyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9pbXBsL2V4dGVuZHNCb3VuZExpc3QvYWRkQm91bmRJblRoZU1pZGRsZV9hZnRlci5qYXZhCkBAIC0wLDAgKzEsMiBAQAorY2xhc3MgWCA8VCBleHRlbmRzIFJ1bm5hYmxlICYgQ2xvbmVhYmxlICYgQ29tcGFyZWFibGU+IHsKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvaW1wbC9leHRlbmRzQm91bmRMaXN0L2FkZEJvdW5kX2FmdGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL2ltcGwvZXh0ZW5kc0JvdW5kTGlzdC9hZGRCb3VuZF9hZnRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlhNjE3NTMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL2ltcGwvZXh0ZW5kc0JvdW5kTGlzdC9hZGRCb3VuZF9hZnRlci5qYXZhCkBAIC0wLDAgKzEsMiBAQAorY2xhc3MgWDxUIGV4dGVuZHMgUnVubmFibGU+IHsKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvaW1wbC9leHRlbmRzQm91bmRMaXN0L3JlbW92ZUJvdW5kRnJvbUVuZC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9pbXBsL2V4dGVuZHNCb3VuZExpc3QvcmVtb3ZlQm91bmRGcm9tRW5kLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWI5YWFmYQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvaW1wbC9leHRlbmRzQm91bmRMaXN0L3JlbW92ZUJvdW5kRnJvbUVuZC5qYXZhCkBAIC0wLDAgKzEsMiBAQAorcHVibGljIGNsYXNzIFg8VCBleHRlbmRzIFJ1bm5hYmxlICYgQ29tcGFyZWFibGU+IHsKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvaW1wbC9leHRlbmRzQm91bmRMaXN0L3JlbW92ZUJvdW5kRnJvbUVuZF9hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9pbXBsL2V4dGVuZHNCb3VuZExpc3QvcmVtb3ZlQm91bmRGcm9tRW5kX2FmdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDI3NTY0YwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvaW1wbC9leHRlbmRzQm91bmRMaXN0L3JlbW92ZUJvdW5kRnJvbUVuZF9hZnRlci5qYXZhCkBAIC0wLDAgKzEsMiBAQAorcHVibGljIGNsYXNzIFg8VCBleHRlbmRzIFJ1bm5hYmxlPiB7Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL2ltcGwvZXh0ZW5kc0JvdW5kTGlzdC9yZW1vdmVCb3VuZEZyb21Gcm9udC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9pbXBsL2V4dGVuZHNCb3VuZExpc3QvcmVtb3ZlQm91bmRGcm9tRnJvbnQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYjlhYWZhCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9pbXBsL2V4dGVuZHNCb3VuZExpc3QvcmVtb3ZlQm91bmRGcm9tRnJvbnQuamF2YQpAQCAtMCwwICsxLDIgQEAKK3B1YmxpYyBjbGFzcyBYPFQgZXh0ZW5kcyBSdW5uYWJsZSAmIENvbXBhcmVhYmxlPiB7Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL2ltcGwvZXh0ZW5kc0JvdW5kTGlzdC9yZW1vdmVCb3VuZEZyb21Gcm9udF9hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9pbXBsL2V4dGVuZHNCb3VuZExpc3QvcmVtb3ZlQm91bmRGcm9tRnJvbnRfYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNDk2M2EyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9pbXBsL2V4dGVuZHNCb3VuZExpc3QvcmVtb3ZlQm91bmRGcm9tRnJvbnRfYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDIgQEAKK3B1YmxpYyBjbGFzcyBYPFQgZXh0ZW5kcyBDb21wYXJlYWJsZT4geworfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9pbXBsL2V4dGVuZHNCb3VuZExpc3QvcmVtb3ZlQm91bmRGcm9tTWlkZGxlLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL2ltcGwvZXh0ZW5kc0JvdW5kTGlzdC9yZW1vdmVCb3VuZEZyb21NaWRkbGUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYTZjZTkzNQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvaW1wbC9leHRlbmRzQm91bmRMaXN0L3JlbW92ZUJvdW5kRnJvbU1pZGRsZS5qYXZhCkBAIC0wLDAgKzEsMiBAQAorcHVibGljIGNsYXNzIFg8VCBleHRlbmRzIFJ1bm5hYmxlICYgQ2xvbmVhYmxlICYgQ29tcGFyZWFibGU+IHsKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvaW1wbC9leHRlbmRzQm91bmRMaXN0L3JlbW92ZUJvdW5kRnJvbU1pZGRsZV9hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9pbXBsL2V4dGVuZHNCb3VuZExpc3QvcmVtb3ZlQm91bmRGcm9tTWlkZGxlX2FmdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWI5YWFmYQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvaW1wbC9leHRlbmRzQm91bmRMaXN0L3JlbW92ZUJvdW5kRnJvbU1pZGRsZV9hZnRlci5qYXZhCkBAIC0wLDAgKzEsMiBAQAorcHVibGljIGNsYXNzIFg8VCBleHRlbmRzIFJ1bm5hYmxlICYgQ29tcGFyZWFibGU+IHsKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvamF2YS9jbHMvQ2xhenouY2xhc3MgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL2phdmEvY2xzL0NsYXp6LmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjExN2VmYmUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL2phdmEvY2xzL0NsYXp6LmNsYXNzCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvbGlicmFyeU9yZGVyL2xpYjEvY2xhc3Nlcy90ZXN0L0EuY2xhc3MgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL2xpYnJhcnlPcmRlci9saWIxL2NsYXNzZXMvdGVzdC9BLmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI3YWIwMDcKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL2xpYnJhcnlPcmRlci9saWIxL2NsYXNzZXMvdGVzdC9BLmNsYXNzCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvbGlicmFyeU9yZGVyL2xpYjEvc3JjL3Rlc3QvQS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9saWJyYXJ5T3JkZXIvbGliMS9zcmMvdGVzdC9BLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjkxZmU2NQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvbGlicmFyeU9yZGVyL2xpYjEvc3JjL3Rlc3QvQS5qYXZhCkBAIC0wLDAgKzEsNSBAQAorcGFja2FnZSB0ZXN0OworY2xhc3MgQSB7CisgIHZvaWQgbWV0aG9kT2ZDbGFzc0Zyb21MaWIxKCkgeworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9saWJyYXJ5T3JkZXIvbGliMi9jbGFzc2VzL3Rlc3QvQS5jbGFzcyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvbGlicmFyeU9yZGVyL2xpYjIvY2xhc3Nlcy90ZXN0L0EuY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTFhNDY0MAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvbGlicmFyeU9yZGVyL2xpYjIvY2xhc3Nlcy90ZXN0L0EuY2xhc3MKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9saWJyYXJ5T3JkZXIvbGliMi9zcmMvdGVzdC9BLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL2xpYnJhcnlPcmRlci9saWIyL3NyYy90ZXN0L0EuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZjU0ODkxCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9saWJyYXJ5T3JkZXIvbGliMi9zcmMvdGVzdC9BLmphdmEKQEAgLTAsMCArMSw1IEBACitwYWNrYWdlIHRlc3Q7CitjbGFzcyBBIHsKKyAgdm9pZCBtZXRob2RPZkNsYXNzRnJvbUxpYjIoKSB7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL25vcm1hbGl6ZURlY2xhcmF0aW9uLzEuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvbm9ybWFsaXplRGVjbGFyYXRpb24vMS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRlMjhkNGUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL25vcm1hbGl6ZURlY2xhcmF0aW9uLzEuamF2YQpAQCAtMCwwICsxLDUgQEAKK2NsYXNzIEF7CisgICAgeworICAgICAgICBBQUFbXSA8dmFyPnhbXSwgeSwgejsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9ub3JtYWxpemVEZWNsYXJhdGlvbi8xX2FmdGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL25vcm1hbGl6ZURlY2xhcmF0aW9uLzFfYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZjIwMzI4Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9ub3JtYWxpemVEZWNsYXJhdGlvbi8xX2FmdGVyLmphdmEKQEAgLTAsMCArMSw3IEBACitjbGFzcyBBeworICAgIHsKKyAgICAgICAgQUFBW11bXSB4OworICAgICAgICBBQUFbXSB5OworICAgICAgICBBQUFbXSB6OworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL25vcm1hbGl6ZURlY2xhcmF0aW9uLzIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvbm9ybWFsaXplRGVjbGFyYXRpb24vMi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM3ODAyMGQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL25vcm1hbGl6ZURlY2xhcmF0aW9uLzIuamF2YQpAQCAtMCwwICsxLDUgQEAKK2NsYXNzIEF7CisgICAgeworICAgICAgICBBQUFbXSA8dmFyPnggW11bXSwgeSwgejsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9ub3JtYWxpemVEZWNsYXJhdGlvbi8yX2FmdGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL25vcm1hbGl6ZURlY2xhcmF0aW9uLzJfYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NzEzZDkzCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9ub3JtYWxpemVEZWNsYXJhdGlvbi8yX2FmdGVyLmphdmEKQEAgLTAsMCArMSw3IEBACitjbGFzcyBBeworICAgIHsKKyAgICAgICAgQUFBW11bXVtdIHggOworICAgICAgICBBQUFbXSB5OworICAgICAgICBBQUFbXSB6OworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL25vcm1hbGl6ZURlY2xhcmF0aW9uL1NDUjY1NDkuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvbm9ybWFsaXplRGVjbGFyYXRpb24vU0NSNjU0OS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU0MzUwNGYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL25vcm1hbGl6ZURlY2xhcmF0aW9uL1NDUjY1NDkuamF2YQpAQCAtMCwwICsxLDUgQEAKK2NsYXNzIEF7CisgICAgeworICAgICAgICBsb25nIDx2YXI+eCwgeTsgLy8gY29tbWVudAorICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL25vcm1hbGl6ZURlY2xhcmF0aW9uL1NDUjY1NDlfYWZ0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvbm9ybWFsaXplRGVjbGFyYXRpb24vU0NSNjU0OV9hZnRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcwMjdlOTMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL25vcm1hbGl6ZURlY2xhcmF0aW9uL1NDUjY1NDlfYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDYgQEAKK2NsYXNzIEF7CisgICAgeworICAgICAgICBsb25nIHg7IC8vIGNvbW1lbnQKKyAgICAgICAgbG9uZyB5OworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL25vcm1hbGl6ZURlY2xhcmF0aW9uL1NDUjk0NjcuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvbm9ybWFsaXplRGVjbGFyYXRpb24vU0NSOTQ2Ny5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMzNjY0OGQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL25vcm1hbGl6ZURlY2xhcmF0aW9uL1NDUjk0NjcuamF2YQpAQCAtMCwwICsxLDUgQEAKK2NsYXNzIEF7CisgICAgeworICAgICAgICBmaW5hbCBpbnQgPHZhcj5hID0gMSwgYiA9IDIsIGMgPSAzOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL25vcm1hbGl6ZURlY2xhcmF0aW9uL1NDUjk0NjdfMS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9ub3JtYWxpemVEZWNsYXJhdGlvbi9TQ1I5NDY3XzEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MTllNTNkCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9ub3JtYWxpemVEZWNsYXJhdGlvbi9TQ1I5NDY3XzEuamF2YQpAQCAtMCwwICsxLDMgQEAKK2NsYXNzIEF7CisgICAgZmluYWwgaW50IDx2YXI+YSA9IDEsIGIgPSAyLCBjID0gMzsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL25vcm1hbGl6ZURlY2xhcmF0aW9uL1NDUjk0NjdfMV9hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9ub3JtYWxpemVEZWNsYXJhdGlvbi9TQ1I5NDY3XzFfYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMWIyZDNhCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9ub3JtYWxpemVEZWNsYXJhdGlvbi9TQ1I5NDY3XzFfYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDUgQEAKK2NsYXNzIEF7CisgICAgZmluYWwgaW50IGEgPSAxOworICAgIGZpbmFsIGludCBiID0gMjsKKyAgICBmaW5hbCBpbnQgYyA9IDM7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9ub3JtYWxpemVEZWNsYXJhdGlvbi9TQ1I5NDY3X2FmdGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL25vcm1hbGl6ZURlY2xhcmF0aW9uL1NDUjk0NjdfYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hY2FjYWI2Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9ub3JtYWxpemVEZWNsYXJhdGlvbi9TQ1I5NDY3X2FmdGVyLmphdmEKQEAgLTAsMCArMSw3IEBACitjbGFzcyBBeworICAgIHsKKyAgICAgICAgZmluYWwgaW50IGEgPSAxOworICAgICAgICBmaW5hbCBpbnQgYiA9IDI7CisgICAgICAgIGZpbmFsIGludCBjID0gMzsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9vcHRpbWl6ZUltcG9ydHMvRW1wdHlJbXBvcnRMaXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL29wdGltaXplSW1wb3J0cy9FbXB0eUltcG9ydExpc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZDJlNDdkCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9vcHRpbWl6ZUltcG9ydHMvRW1wdHlJbXBvcnRMaXN0LmphdmEKQEAgLTAsMCArMSw1IEBACitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKKworY2xhc3MgQSB7Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL29wdGltaXplSW1wb3J0cy9FbXB0eUltcG9ydExpc3RfYWZ0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvb3B0aW1pemVJbXBvcnRzL0VtcHR5SW1wb3J0TGlzdF9hZnRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJlMjQzOWMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL29wdGltaXplSW1wb3J0cy9FbXB0eUltcG9ydExpc3RfYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDIgQEAKK2NsYXNzIEEgeworfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9vcHRpbWl6ZUltcG9ydHMvSURFQURFVjEwNzE2LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL29wdGltaXplSW1wb3J0cy9JREVBREVWMTA3MTYuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYWY2ZTQwCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9vcHRpbWl6ZUltcG9ydHMvSURFQURFVjEwNzE2LmphdmEKQEAgLTAsMCArMSw5IEBACitpbXBvcnQgSWRlYUJ1Zy5Bbm5vOworCitjbGFzcyBJZGVhQnVnIHsKKyAgQGludGVyZmFjZSBBbm5vIHsgfQorfQorCitAQW5ubworcHVibGljIGNsYXNzIElkZWFCdWdVc2VyIGV4dGVuZHMgSWRlYUJ1ZyB7Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL29wdGltaXplSW1wb3J0cy9JREVBREVWMTA3MTZfYWZ0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvb3B0aW1pemVJbXBvcnRzL0lERUFERVYxMDcxNl9hZnRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJhZjZlNDAKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL29wdGltaXplSW1wb3J0cy9JREVBREVWMTA3MTZfYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDkgQEAKK2ltcG9ydCBJZGVhQnVnLkFubm87CisKK2NsYXNzIElkZWFCdWcgeworICBAaW50ZXJmYWNlIEFubm8geyB9Cit9CisKK0BBbm5vCitwdWJsaWMgY2xhc3MgSWRlYUJ1Z1VzZXIgZXh0ZW5kcyBJZGVhQnVnIHsKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvb3B0aW1pemVJbXBvcnRzL05ld0ltcG9ydExpc3RJc0VtcHR5QW5kQ29tbWVudFByZXNlcnZlZC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9vcHRpbWl6ZUltcG9ydHMvTmV3SW1wb3J0TGlzdElzRW1wdHlBbmRDb21tZW50UHJlc2VydmVkLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmJmMGViOAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvb3B0aW1pemVJbXBvcnRzL05ld0ltcG9ydExpc3RJc0VtcHR5QW5kQ29tbWVudFByZXNlcnZlZC5qYXZhCkBAIC0wLDAgKzEsNiBAQAoraW1wb3J0IGphdmEudXRpbC5MaXN0OworLy8gVGhpcyBpcyBhIGNvbW1lbnQKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworCitwdWJsaWMgY2xhc3MgVGVzdCB7Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL29wdGltaXplSW1wb3J0cy9OZXdJbXBvcnRMaXN0SXNFbXB0eUFuZENvbW1lbnRQcmVzZXJ2ZWRfYWZ0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvb3B0aW1pemVJbXBvcnRzL05ld0ltcG9ydExpc3RJc0VtcHR5QW5kQ29tbWVudFByZXNlcnZlZF9hZnRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVkN2RhYjUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL29wdGltaXplSW1wb3J0cy9OZXdJbXBvcnRMaXN0SXNFbXB0eUFuZENvbW1lbnRQcmVzZXJ2ZWRfYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDQgQEAKKy8vIFRoaXMgaXMgYSBjb21tZW50CisKK3B1YmxpYyBjbGFzcyBUZXN0IHsKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvb3B0aW1pemVJbXBvcnRzL05ld0ltcG9ydExpc3RJc0VtcHR5QW5kSmF2YURvY1dpdGhJbnZhbGlkQ29kZVByZXNlcnZlZC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9vcHRpbWl6ZUltcG9ydHMvTmV3SW1wb3J0TGlzdElzRW1wdHlBbmRKYXZhRG9jV2l0aEludmFsaWRDb2RlUHJlc2VydmVkLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWI1NmVlZgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvb3B0aW1pemVJbXBvcnRzL05ld0ltcG9ydExpc3RJc0VtcHR5QW5kSmF2YURvY1dpdGhJbnZhbGlkQ29kZVByZXNlcnZlZC5qYXZhCkBAIC0wLDAgKzEsOCBAQAoraW1wb3J0IGphdmEudXRpbC5MaXN0OworCisvKioKKyAqIEBkZXByZWNhdGVkCisgKi8KKy8KK3B1YmxpYyBjbGFzcyBGb28gIHsKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvb3B0aW1pemVJbXBvcnRzL05ld0ltcG9ydExpc3RJc0VtcHR5QW5kSmF2YURvY1dpdGhJbnZhbGlkQ29kZVByZXNlcnZlZF9hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9vcHRpbWl6ZUltcG9ydHMvTmV3SW1wb3J0TGlzdElzRW1wdHlBbmRKYXZhRG9jV2l0aEludmFsaWRDb2RlUHJlc2VydmVkX2FmdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDU0ODQ1MwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvb3B0aW1pemVJbXBvcnRzL05ld0ltcG9ydExpc3RJc0VtcHR5QW5kSmF2YURvY1dpdGhJbnZhbGlkQ29kZVByZXNlcnZlZF9hZnRlci5qYXZhCkBAIC0wLDAgKzEsNiBAQAorLyoqCisgKiBAZGVwcmVjYXRlZAorICovCisvCitwdWJsaWMgY2xhc3MgRm9vICB7Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL29wdGltaXplSW1wb3J0cy9TQ1IxODM2NC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9vcHRpbWl6ZUltcG9ydHMvU0NSMTgzNjQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOWRkNjU4Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9vcHRpbWl6ZUltcG9ydHMvU0NSMTgzNjQuamF2YQpAQCAtMCwwICsxLDggQEAKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworY2xhc3MgQSB7CisgICAgQjxMaXN0PiBjcmVhdGU7Cit9CisKK2ludGVyZmFjZSBCPFQ+IHsKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvb3B0aW1pemVJbXBvcnRzL1NDUjE4MzY0X2FmdGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL29wdGltaXplSW1wb3J0cy9TQ1IxODM2NF9hZnRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI5ZGQ2NTgKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL29wdGltaXplSW1wb3J0cy9TQ1IxODM2NF9hZnRlci5qYXZhCkBAIC0wLDAgKzEsOCBAQAoraW1wb3J0IGphdmEudXRpbC5MaXN0OworCitjbGFzcyBBIHsKKyAgICBCPExpc3Q+IGNyZWF0ZTsKK30KKworaW50ZXJmYWNlIEI8VD4geworfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9vcHRpbWl6ZUltcG9ydHMvU0NSNjEzOC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9vcHRpbWl6ZUltcG9ydHMvU0NSNjEzOC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFiOTE5YjYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL29wdGltaXplSW1wb3J0cy9TQ1I2MTM4LmphdmEKQEAgLTAsMCArMSw4IEBACitpbXBvcnQgamF2YXguc3dpbmcuKjsKKworY2xhc3MgRm9veworICB7CisgICAgSkNvbXBvbmVudCBjb21wb25lbnQ7CisgICAgY29tcG9uZW50Lm5ldyBBY2Nlc3NpYmxlSkNvbXBvbmVudCgpOworICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL29wdGltaXplSW1wb3J0cy9TQ1I2MTM4X2FmdGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL29wdGltaXplSW1wb3J0cy9TQ1I2MTM4X2FmdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWI5MTliNgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvb3B0aW1pemVJbXBvcnRzL1NDUjYxMzhfYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDggQEAKK2ltcG9ydCBqYXZheC5zd2luZy4qOworCitjbGFzcyBGb297CisgIHsKKyAgICBKQ29tcG9uZW50IGNvbXBvbmVudDsKKyAgICBjb21wb25lbnQubmV3IEFjY2Vzc2libGVKQ29tcG9uZW50KCk7CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvb3B0aW1pemVJbXBvcnRzL1N0YXRpY0ltcG9ydHMxLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL29wdGltaXplSW1wb3J0cy9TdGF0aWNJbXBvcnRzMS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJkMzk0ZWEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL29wdGltaXplSW1wb3J0cy9TdGF0aWNJbXBvcnRzMS5qYXZhCkBAIC0wLDAgKzEsOCBAQAoraW1wb3J0IGphdmEudXRpbC5MaXN0OworaW1wb3J0IHN0YXRpYyBqYXZhLnV0aWwuQXJyYXlzLnNvcnQ7CisKK2NsYXNzIEZvbyB7CisgIHsKKyAgICBzb3J0KG5ldyBJbnRlZ2VyWzBdKTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9vcHRpbWl6ZUltcG9ydHMvU3RhdGljSW1wb3J0czFfYWZ0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvb3B0aW1pemVJbXBvcnRzL1N0YXRpY0ltcG9ydHMxX2FmdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWRkZmU2MQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvb3B0aW1pemVJbXBvcnRzL1N0YXRpY0ltcG9ydHMxX2FmdGVyLmphdmEKQEAgLTAsMCArMSw3IEBACitpbXBvcnQgc3RhdGljIGphdmEudXRpbC5BcnJheXMuc29ydDsKKworY2xhc3MgRm9vIHsKKyAgeworICAgIHNvcnQobmV3IEludGVnZXJbMF0pOworICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL29wdGltaXplSW1wb3J0cy9TdGF0aWNJbXBvcnRzVG9PcHRpbWl6ZS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9vcHRpbWl6ZUltcG9ydHMvU3RhdGljSW1wb3J0c1RvT3B0aW1pemUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZjE3YjRjCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9vcHRpbWl6ZUltcG9ydHMvU3RhdGljSW1wb3J0c1RvT3B0aW1pemUuamF2YQpAQCAtMCwwICsxLDExIEBACitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CitpbXBvcnQgc3RhdGljIGphdmEudXRpbC5BcnJheXMuc29ydDsKK2ltcG9ydCBzdGF0aWMgamF2YS51dGlsLkFycmF5cy5hc0xpc3Q7CitpbXBvcnQgc3RhdGljIGphdmEudXRpbC5BcnJheXMuaW52YWxpZDsKK2ltcG9ydCBzdGF0aWMgaW52YWxpZC4qOworCitjbGFzcyBGb28geworICB7CisgICAgc29ydChuZXcgSW50ZWdlclswXSk7CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvb3B0aW1pemVJbXBvcnRzL1N0YXRpY0ltcG9ydHNUb09wdGltaXplMi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9vcHRpbWl6ZUltcG9ydHMvU3RhdGljSW1wb3J0c1RvT3B0aW1pemUyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTU0ZDkwNzIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL29wdGltaXplSW1wb3J0cy9TdGF0aWNJbXBvcnRzVG9PcHRpbWl6ZTIuamF2YQpAQCAtMCwwICsxLDkgQEAKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKK2ltcG9ydCBzdGF0aWMgamF2YS51dGlsLkFycmF5cy5zb3J0OworaW1wb3J0IHN0YXRpYyBpbnZhbGlkLio7CisKK2NsYXNzIEZvbyB7CisgIHsKKyAgICBzb3J0KG5ldyBsb25nWzBdKTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9vcHRpbWl6ZUltcG9ydHMvU3RhdGljSW1wb3J0c1RvT3B0aW1pemUyX2FmdGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL29wdGltaXplSW1wb3J0cy9TdGF0aWNJbXBvcnRzVG9PcHRpbWl6ZTJfYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMDVhMzdkCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9vcHRpbWl6ZUltcG9ydHMvU3RhdGljSW1wb3J0c1RvT3B0aW1pemUyX2FmdGVyLmphdmEKQEAgLTAsMCArMSw3IEBACitpbXBvcnQgc3RhdGljIGphdmEudXRpbC5BcnJheXMuc29ydDsKKworY2xhc3MgRm9vIHsKKyAgeworICAgIHNvcnQobmV3IGxvbmdbMF0pOworICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL29wdGltaXplSW1wb3J0cy9TdGF0aWNJbXBvcnRzVG9PcHRpbWl6ZU1peGVkLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL29wdGltaXplSW1wb3J0cy9TdGF0aWNJbXBvcnRzVG9PcHRpbWl6ZU1peGVkLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjlmMWM3NwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvb3B0aW1pemVJbXBvcnRzL1N0YXRpY0ltcG9ydHNUb09wdGltaXplTWl4ZWQuamF2YQpAQCAtMCwwICsxLDQxIEBACitwYWNrYWdlIGV4YW1wbGU7CisKK2ltcG9ydCBzdGF0aWMgamF2YS5sYW5nLk1hdGguY29zOworaW1wb3J0IHN0YXRpYyBqYXZhLmxhbmcuTWF0aC5zaW47CitpbXBvcnQgZXhhbXBsZS5JbXBvcnRlZENsYXNzLkkxOworaW1wb3J0IGV4YW1wbGUuSW1wb3J0ZWRDbGFzcy5JMUE7CitpbXBvcnQgc3RhdGljIGV4YW1wbGUuSW1wb3J0ZWRDbGFzcy5CQVpaLkUxOworaW1wb3J0IHN0YXRpYyBleGFtcGxlLkltcG9ydGVkQ2xhc3MuVjsKK2ltcG9ydCBzdGF0aWMgZXhhbXBsZS5JbXBvcnRlZENsYXNzLkZPTzsKK2ltcG9ydCBleGFtcGxlLkltcG9ydGVkQ2xhc3MuQkFSOworCitwdWJsaWMgY2xhc3MgTXlUZXN0IHsKKyAgICBwcm90ZWN0ZWQgTXlUZXN0KCkgeworICAgICAgICBzdXBlcigpOworICAgICAgICBTdHJpbmcgYXogPSBCQVIuQVogKyBWOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oRk9PKTsKKyAgICB9Cit9CisKK2NsYXNzIEltcG9ydGVkQ2xhc3MgeworICAgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIFYgPSAiIjsKKworICAgIHB1YmxpYyBzdGF0aWMgZW51bSBJMSB7CisgICAgICAgIEUxOworICAgIH0KKyAgICBwdWJsaWMgc3RhdGljIGVudW0gSTFBIHsKKyAgICAgICAgRTE7CisgICAgfQorCisgICAgcHVibGljIHN0YXRpYyBlbnVtIEJBUiB7CisgICAgICAgIEUxLCBBWjsKKyAgICB9CisKKyAgICBwdWJsaWMgc3RhdGljIFN0cmluZyBGT08gPSAiIjsKKworICAgIHB1YmxpYyBzdGF0aWMgZW51bSBCQVpaIHsKKyAgICAgICAgRTE7CisgICAgfQorCisKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvb3B0aW1pemVJbXBvcnRzL1N0YXRpY0ltcG9ydHNUb09wdGltaXplTWl4ZWRfYWZ0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvb3B0aW1pemVJbXBvcnRzL1N0YXRpY0ltcG9ydHNUb09wdGltaXplTWl4ZWRfYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MThhMzQ0Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9vcHRpbWl6ZUltcG9ydHMvU3RhdGljSW1wb3J0c1RvT3B0aW1pemVNaXhlZF9hZnRlci5qYXZhCkBAIC0wLDAgKzEsMzcgQEAKK3BhY2thZ2UgZXhhbXBsZTsKKworaW1wb3J0IGV4YW1wbGUuSW1wb3J0ZWRDbGFzcy5CQVI7CisKK2ltcG9ydCBzdGF0aWMgZXhhbXBsZS5JbXBvcnRlZENsYXNzLkZPTzsKK2ltcG9ydCBzdGF0aWMgZXhhbXBsZS5JbXBvcnRlZENsYXNzLlY7CisKK3B1YmxpYyBjbGFzcyBNeVRlc3QgeworICAgIHByb3RlY3RlZCBNeVRlc3QoKSB7CisgICAgICAgIHN1cGVyKCk7CisgICAgICAgIFN0cmluZyBheiA9IEJBUi5BWiArIFY7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihGT08pOworICAgIH0KK30KKworY2xhc3MgSW1wb3J0ZWRDbGFzcyB7CisgICAgcHVibGljIHN0YXRpYyBTdHJpbmcgViA9ICIiOworCisgICAgcHVibGljIHN0YXRpYyBlbnVtIEkxIHsKKyAgICAgICAgRTE7CisgICAgfQorICAgIHB1YmxpYyBzdGF0aWMgZW51bSBJMUEgeworICAgICAgICBFMTsKKyAgICB9CisKKyAgICBwdWJsaWMgc3RhdGljIGVudW0gQkFSIHsKKyAgICAgICAgRTEsIEFaOworICAgIH0KKworICAgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIEZPTyA9ICIiOworCisgICAgcHVibGljIHN0YXRpYyBlbnVtIEJBWlogeworICAgICAgICBFMTsKKyAgICB9CisKKworfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9vcHRpbWl6ZUltcG9ydHMvU3RhdGljSW1wb3J0c1RvT3B0aW1pemVfYWZ0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvb3B0aW1pemVJbXBvcnRzL1N0YXRpY0ltcG9ydHNUb09wdGltaXplX2FmdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWRkZmU2MQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvb3B0aW1pemVJbXBvcnRzL1N0YXRpY0ltcG9ydHNUb09wdGltaXplX2FmdGVyLmphdmEKQEAgLTAsMCArMSw3IEBACitpbXBvcnQgc3RhdGljIGphdmEudXRpbC5BcnJheXMuc29ydDsKKworY2xhc3MgRm9vIHsKKyAgeworICAgIHNvcnQobmV3IEludGVnZXJbMF0pOworICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL29wdGltaXplSW1wb3J0cy9VbnJlc29sdmVkSW1wb3J0cy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9vcHRpbWl6ZUltcG9ydHMvVW5yZXNvbHZlZEltcG9ydHMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMjFlZDk3Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9vcHRpbWl6ZUltcG9ydHMvVW5yZXNvbHZlZEltcG9ydHMuamF2YQpAQCAtMCwwICsxLDExIEBACitpbXBvcnQgeHh4eC5kZGQ7CitpbXBvcnQgY29tLlhYWDsKK2ltcG9ydCB5eXkuY29tLio7CitpbXBvcnQgc3RhdGljIHp6ei55eXkuY29tLkFBQS4qOworaW1wb3J0IHN0YXRpYyB6enoueXl5LmNvbS5CQkI7CisKK2NsYXNzIEZvbyB7CisgIHsKKworICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL29wdGltaXplSW1wb3J0cy9VbnJlc29sdmVkSW1wb3J0czIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvb3B0aW1pemVJbXBvcnRzL1VucmVzb2x2ZWRJbXBvcnRzMi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVmZmU3NDAKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL29wdGltaXplSW1wb3J0cy9VbnJlc29sdmVkSW1wb3J0czIuamF2YQpAQCAtMCwwICsxLDEyIEBACitpbXBvcnQgeHh4eC5kZGQ7CitpbXBvcnQgY29tLlhYWDsKK2ltcG9ydCB5eXkuY29tLio7CitpbXBvcnQgc3RhdGljIHp6ei55eXkuY29tLkFBQS4qOworaW1wb3J0IHN0YXRpYyB6enoueXl5LmNvbS5CQkI7CisKK2NsYXNzIEZvbyB7CisgIHsKKyAgICAvLyBtYXliZSBpdCdzIGZyb20geXl5LmNvbS4qCisgICAgWlpaIHogPSBudWxsOworICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL29wdGltaXplSW1wb3J0cy9VbnJlc29sdmVkSW1wb3J0czJfYWZ0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvb3B0aW1pemVJbXBvcnRzL1VucmVzb2x2ZWRJbXBvcnRzMl9hZnRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBlOTg2NjMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL29wdGltaXplSW1wb3J0cy9VbnJlc29sdmVkSW1wb3J0czJfYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDEwIEBACitpbXBvcnQgeXl5LmNvbS4qOworCitpbXBvcnQgc3RhdGljIHp6ei55eXkuY29tLkFBQS4qOworCitjbGFzcyBGb28geworICB7CisgICAgLy8gbWF5YmUgaXQncyBmcm9tIHl5eS5jb20uKgorICAgIFpaWiB6ID0gbnVsbDsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9vcHRpbWl6ZUltcG9ydHMvVW5yZXNvbHZlZEltcG9ydHNfYWZ0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvb3B0aW1pemVJbXBvcnRzL1VucmVzb2x2ZWRJbXBvcnRzX2FmdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWEwY2NiOAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvb3B0aW1pemVJbXBvcnRzL1VucmVzb2x2ZWRJbXBvcnRzX2FmdGVyLmphdmEKQEAgLTAsMCArMSw1IEBACitjbGFzcyBGb28geworICB7CisKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9hbm5vdGF0aW9uUGFyc2luZy9hbm5vdGF0aW9uL0FycmF5LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2Fubm90YXRpb25QYXJzaW5nL2Fubm90YXRpb24vQXJyYXkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZTFlMjk1Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9hbm5vdGF0aW9uUGFyc2luZy9hbm5vdGF0aW9uL0FycmF5LmphdmEKQEAgLTAsMCArMSBAQAorQEVuZG9yc2Vycyh7IkNoaWxkcmVuIiwgIlVuc2NydXB1bG91cyBkZW50aXNpdHMifSkgcHVibGljIGNsYXNzIExvbGxpbG9wIHt9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9hbm5vdGF0aW9uUGFyc2luZy9hbm5vdGF0aW9uL0FycmF5LnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvYW5ub3RhdGlvblBhcnNpbmcvYW5ub3RhdGlvbi9BcnJheS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTdlZThlZQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvYW5ub3RhdGlvblBhcnNpbmcvYW5ub3RhdGlvbi9BcnJheS50eHQKQEAgLTAsMCArMSwzOSBAQAorUHNpSmF2YUZpbGU6QXJyYXkuamF2YQorICBQc2lJbXBvcnRMaXN0CisgICAgPGVtcHR5IGxpc3Q+CisgIFBzaUNsYXNzOkxvbGxpbG9wCisgICAgUHNpTW9kaWZpZXJMaXN0OkBFbmRvcnNlcnMoeyJDaGlsZHJlbiIsICJVbnNjcnVwdWxvdXMgZGVudGlzaXRzIn0pIHB1YmxpYworICAgICAgUHNpQW5ub3RhdGlvbgorICAgICAgICBQc2lKYXZhVG9rZW46QVQoJ0AnKQorICAgICAgICBQc2lKYXZhQ29kZVJlZmVyZW5jZUVsZW1lbnQ6RW5kb3JzZXJzCisgICAgICAgICAgUHNpSWRlbnRpZmllcjpFbmRvcnNlcnMoJ0VuZG9yc2VycycpCisgICAgICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgIFBzaUFubm90YXRpb25QYXJhbWV0ZXJMaXN0CisgICAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgICBQc2lOYW1lVmFsdWVQYWlyCisgICAgICAgICAgICBQc2lBcnJheUluaXRpYWxpemVyTWVtYmVyVmFsdWU6eyJDaGlsZHJlbiIsICJVbnNjcnVwdWxvdXMgZGVudGlzaXRzIn0KKyAgICAgICAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgICAgICAgIFBzaUxpdGVyYWxFeHByZXNzaW9uOiJDaGlsZHJlbiIKKyAgICAgICAgICAgICAgICBQc2lKYXZhVG9rZW46U1RSSU5HX0xJVEVSQUwoJyJDaGlsZHJlbiInKQorICAgICAgICAgICAgICBQc2lKYXZhVG9rZW46Q09NTUEoJywnKQorICAgICAgICAgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgICAgICAgICAgUHNpTGl0ZXJhbEV4cHJlc3Npb246IlVuc2NydXB1bG91cyBkZW50aXNpdHMiCisgICAgICAgICAgICAgICAgUHNpSmF2YVRva2VuOlNUUklOR19MSVRFUkFMKCciVW5zY3J1cHVsb3VzIGRlbnRpc2l0cyInKQorICAgICAgICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lLZXl3b3JkOnB1YmxpYygncHVibGljJykKKyAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICBQc2lLZXl3b3JkOmNsYXNzKCdjbGFzcycpCisgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgUHNpSWRlbnRpZmllcjpMb2xsaWxvcCgnTG9sbGlsb3AnKQorICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2Fubm90YXRpb25QYXJzaW5nL2Fubm90YXRpb24vQ29tcGxleC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9hbm5vdGF0aW9uUGFyc2luZy9hbm5vdGF0aW9uL0NvbXBsZXguamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NTMwODI4Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9hbm5vdGF0aW9uUGFyc2luZy9hbm5vdGF0aW9uL0NvbXBsZXguamF2YQpAQCAtMCwwICsxLDMgQEAKK2NsYXNzIEZhbnRhc3kgeworICBAQXV0aG9yKGZpcnN0PSJFdWdlbmUiLCBzZWNvbmQ9IldhbXBpcmNoaWsiKSB2b2lkIGNvbXBvc2UgKCkge30gCit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9hbm5vdGF0aW9uUGFyc2luZy9hbm5vdGF0aW9uL0NvbXBsZXgudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9hbm5vdGF0aW9uUGFyc2luZy9hbm5vdGF0aW9uL0NvbXBsZXgudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJmZGE0ZmMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2Fubm90YXRpb25QYXJzaW5nL2Fubm90YXRpb24vQ29tcGxleC50eHQKQEAgLTAsMCArMSw2MCBAQAorUHNpSmF2YUZpbGU6Q29tcGxleC5qYXZhCisgIFBzaUltcG9ydExpc3QKKyAgICA8ZW1wdHkgbGlzdD4KKyAgUHNpQ2xhc3M6RmFudGFzeQorICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaUtleXdvcmQ6Y2xhc3MoJ2NsYXNzJykKKyAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICBQc2lJZGVudGlmaWVyOkZhbnRhc3koJ0ZhbnRhc3knKQorICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcbiAgJykKKyAgICBQc2lNZXRob2Q6Y29tcG9zZQorICAgICAgUHNpTW9kaWZpZXJMaXN0OkBBdXRob3IoZmlyc3Q9IkV1Z2VuZSIsIHNlY29uZD0iV2FtcGlyY2hpayIpCisgICAgICAgIFBzaUFubm90YXRpb24KKyAgICAgICAgICBQc2lKYXZhVG9rZW46QVQoJ0AnKQorICAgICAgICAgIFBzaUphdmFDb2RlUmVmZXJlbmNlRWxlbWVudDpBdXRob3IKKyAgICAgICAgICAgIFBzaUlkZW50aWZpZXI6QXV0aG9yKCdBdXRob3InKQorICAgICAgICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgICBQc2lBbm5vdGF0aW9uUGFyYW1ldGVyTGlzdAorICAgICAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgICAgIFBzaU5hbWVWYWx1ZVBhaXIKKyAgICAgICAgICAgICAgUHNpSWRlbnRpZmllcjpmaXJzdCgnZmlyc3QnKQorICAgICAgICAgICAgICBQc2lKYXZhVG9rZW46RVEoJz0nKQorICAgICAgICAgICAgICBQc2lMaXRlcmFsRXhwcmVzc2lvbjoiRXVnZW5lIgorICAgICAgICAgICAgICAgIFBzaUphdmFUb2tlbjpTVFJJTkdfTElURVJBTCgnIkV1Z2VuZSInKQorICAgICAgICAgICAgUHNpSmF2YVRva2VuOkNPTU1BKCcsJykKKyAgICAgICAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgICAgICAgUHNpTmFtZVZhbHVlUGFpcgorICAgICAgICAgICAgICBQc2lJZGVudGlmaWVyOnNlY29uZCgnc2Vjb25kJykKKyAgICAgICAgICAgICAgUHNpSmF2YVRva2VuOkVRKCc9JykKKyAgICAgICAgICAgICAgUHNpTGl0ZXJhbEV4cHJlc3Npb246IldhbXBpcmNoaWsiCisgICAgICAgICAgICAgICAgUHNpSmF2YVRva2VuOlNUUklOR19MSVRFUkFMKCciV2FtcGlyY2hpayInKQorICAgICAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Y29tcG9zZSgnY29tcG9zZScpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnIFxuJykKKyAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2Fubm90YXRpb25QYXJzaW5nL2Fubm90YXRpb24vRW51bVNtYXJ0VHlwZUNvbXBsZXRpb24uamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvYW5ub3RhdGlvblBhcnNpbmcvYW5ub3RhdGlvbi9FbnVtU21hcnRUeXBlQ29tcGxldGlvbi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU3ZTBjZjIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2Fubm90YXRpb25QYXJzaW5nL2Fubm90YXRpb24vRW51bVNtYXJ0VHlwZUNvbXBsZXRpb24uamF2YQpAQCAtMCwwICsxLDggQEAKK0BQcmVsaW1pbmFyeShBLkIKKyMpIHB1YmxpYyBjbGFzcyBUaW1lVHJhdmVsIHt9CisKK0BQcmVsaW1pbmFyeShhPUEuQgorIykgcHVibGljIGNsYXNzIFRpbWVUcmF2ZWwge30KKworQFByZWxpbWluYXJ5KGE9QS5CCisjLCBiPWMpIHB1YmxpYyBjbGFzcyBUaW1lVHJhdmVsIHt9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9hbm5vdGF0aW9uUGFyc2luZy9hbm5vdGF0aW9uL0VudW1TbWFydFR5cGVDb21wbGV0aW9uLnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvYW5ub3RhdGlvblBhcnNpbmcvYW5ub3RhdGlvbi9FbnVtU21hcnRUeXBlQ29tcGxldGlvbi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWNkYTZiMgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvYW5ub3RhdGlvblBhcnNpbmcvYW5ub3RhdGlvbi9FbnVtU21hcnRUeXBlQ29tcGxldGlvbi50eHQKQEAgLTAsMCArMSwxNDEgQEAKK1BzaUphdmFGaWxlOkVudW1TbWFydFR5cGVDb21wbGV0aW9uLmphdmEKKyAgUHNpSW1wb3J0TGlzdAorICAgIDxlbXB0eSBsaXN0PgorICBQc2lDbGFzczpUaW1lVHJhdmVsCisgICAgUHNpTW9kaWZpZXJMaXN0OkBQcmVsaW1pbmFyeShBLkIKKyMpIHB1YmxpYworICAgICAgUHNpQW5ub3RhdGlvbgorICAgICAgICBQc2lKYXZhVG9rZW46QVQoJ0AnKQorICAgICAgICBQc2lKYXZhQ29kZVJlZmVyZW5jZUVsZW1lbnQ6UHJlbGltaW5hcnkKKyAgICAgICAgICBQc2lJZGVudGlmaWVyOlByZWxpbWluYXJ5KCdQcmVsaW1pbmFyeScpCisgICAgICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgIFBzaUFubm90YXRpb25QYXJhbWV0ZXJMaXN0CisgICAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgICBQc2lOYW1lVmFsdWVQYWlyCisgICAgICAgICAgICBQc2lSZWZlcmVuY2VFeHByZXNzaW9uOkEuQgorICAgICAgICAgICAgICBQc2lSZWZlcmVuY2VFeHByZXNzaW9uOkEKKyAgICAgICAgICAgICAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICAgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgICAgICAgICBQc2lJZGVudGlmaWVyOkEoJ0EnKQorICAgICAgICAgICAgICBQc2lKYXZhVG9rZW46RE9UKCcuJykKKyAgICAgICAgICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICAgICAgICBQc2lJZGVudGlmaWVyOkIoJ0InKQorICAgICAgICAgIFBzaUVycm9yRWxlbWVudDonLCcgb3IgJyknIGV4cGVjdGVkCisgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgICBQc2lXaGl0ZVNwYWNlKCdcbicpCisgICAgICAgICAgUHNpRWxlbWVudChCQURfQ0hBUkFDVEVSKSgnIycpCisgICAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpS2V5d29yZDpwdWJsaWMoJ3B1YmxpYycpCisgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgUHNpS2V5d29yZDpjbGFzcygnY2xhc3MnKQorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaUlkZW50aWZpZXI6VGltZVRyYXZlbCgnVGltZVRyYXZlbCcpCisgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICBQc2lXaGl0ZVNwYWNlKCdcblxuJykKKyAgUHNpQ2xhc3M6VGltZVRyYXZlbAorICAgIFBzaU1vZGlmaWVyTGlzdDpAUHJlbGltaW5hcnkoYT1BLkIKKyMpIHB1YmxpYworICAgICAgUHNpQW5ub3RhdGlvbgorICAgICAgICBQc2lKYXZhVG9rZW46QVQoJ0AnKQorICAgICAgICBQc2lKYXZhQ29kZVJlZmVyZW5jZUVsZW1lbnQ6UHJlbGltaW5hcnkKKyAgICAgICAgICBQc2lJZGVudGlmaWVyOlByZWxpbWluYXJ5KCdQcmVsaW1pbmFyeScpCisgICAgICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgIFBzaUFubm90YXRpb25QYXJhbWV0ZXJMaXN0CisgICAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgICBQc2lOYW1lVmFsdWVQYWlyCisgICAgICAgICAgICBQc2lJZGVudGlmaWVyOmEoJ2EnKQorICAgICAgICAgICAgUHNpSmF2YVRva2VuOkVRKCc9JykKKyAgICAgICAgICAgIFBzaVJlZmVyZW5jZUV4cHJlc3Npb246QS5CCisgICAgICAgICAgICAgIFBzaVJlZmVyZW5jZUV4cHJlc3Npb246QQorICAgICAgICAgICAgICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgICAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICAgICAgICAgIFBzaUlkZW50aWZpZXI6QSgnQScpCisgICAgICAgICAgICAgIFBzaUphdmFUb2tlbjpET1QoJy4nKQorICAgICAgICAgICAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgICAgICAgIFBzaUlkZW50aWZpZXI6QignQicpCisgICAgICAgICAgUHNpRXJyb3JFbGVtZW50OicsJyBvciAnKScgZXhwZWN0ZWQKKyAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuJykKKyAgICAgICAgICBQc2lFbGVtZW50KEJBRF9DSEFSQUNURVIpKCcjJykKKyAgICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lLZXl3b3JkOnB1YmxpYygncHVibGljJykKKyAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICBQc2lLZXl3b3JkOmNsYXNzKCdjbGFzcycpCisgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgUHNpSWRlbnRpZmllcjpUaW1lVHJhdmVsKCdUaW1lVHJhdmVsJykKKyAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgIFBzaVdoaXRlU3BhY2UoJ1xuXG4nKQorICBQc2lDbGFzczpUaW1lVHJhdmVsCisgICAgUHNpTW9kaWZpZXJMaXN0OkBQcmVsaW1pbmFyeShhPUEuQgorIywgYj1jKSBwdWJsaWMKKyAgICAgIFBzaUFubm90YXRpb24KKyAgICAgICAgUHNpSmF2YVRva2VuOkFUKCdAJykKKyAgICAgICAgUHNpSmF2YUNvZGVSZWZlcmVuY2VFbGVtZW50OlByZWxpbWluYXJ5CisgICAgICAgICAgUHNpSWRlbnRpZmllcjpQcmVsaW1pbmFyeSgnUHJlbGltaW5hcnknKQorICAgICAgICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICBQc2lBbm5vdGF0aW9uUGFyYW1ldGVyTGlzdAorICAgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgICAgUHNpTmFtZVZhbHVlUGFpcgorICAgICAgICAgICAgUHNpSWRlbnRpZmllcjphKCdhJykKKyAgICAgICAgICAgIFBzaUphdmFUb2tlbjpFUSgnPScpCisgICAgICAgICAgICBQc2lSZWZlcmVuY2VFeHByZXNzaW9uOkEuQgorICAgICAgICAgICAgICBQc2lSZWZlcmVuY2VFeHByZXNzaW9uOkEKKyAgICAgICAgICAgICAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICAgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgICAgICAgICBQc2lJZGVudGlmaWVyOkEoJ0EnKQorICAgICAgICAgICAgICBQc2lKYXZhVG9rZW46RE9UKCcuJykKKyAgICAgICAgICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICAgICAgICBQc2lJZGVudGlmaWVyOkIoJ0InKQorICAgICAgICAgIFBzaUVycm9yRWxlbWVudDonLCcgb3IgJyknIGV4cGVjdGVkCisgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgICBQc2lXaGl0ZVNwYWNlKCdcbicpCisgICAgICAgICAgUHNpRWxlbWVudChCQURfQ0hBUkFDVEVSKSgnIycpCisgICAgICAgICAgUHNpSmF2YVRva2VuOkNPTU1BKCcsJykKKyAgICAgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgICAgICBQc2lOYW1lVmFsdWVQYWlyCisgICAgICAgICAgICBQc2lJZGVudGlmaWVyOmIoJ2InKQorICAgICAgICAgICAgUHNpSmF2YVRva2VuOkVRKCc9JykKKyAgICAgICAgICAgIFBzaVJlZmVyZW5jZUV4cHJlc3Npb246YworICAgICAgICAgICAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgICAgICAgIFBzaUlkZW50aWZpZXI6YygnYycpCisgICAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpS2V5d29yZDpwdWJsaWMoJ3B1YmxpYycpCisgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgUHNpS2V5d29yZDpjbGFzcygnY2xhc3MnKQorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaUlkZW50aWZpZXI6VGltZVRyYXZlbCgnVGltZVRyYXZlbCcpCisgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvYW5ub3RhdGlvblBhcnNpbmcvYW5ub3RhdGlvbi9FcnJvcnMuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvYW5ub3RhdGlvblBhcnNpbmcvYW5ub3RhdGlvbi9FcnJvcnMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMDBjMzdlCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9hbm5vdGF0aW9uUGFyc2luZy9hbm5vdGF0aW9uL0Vycm9ycy5qYXZhCkBAIC0wLDAgKzEsMiBAQAorQEFubig8ZXJyb3IgZGVzY3I9IkNhbm5vdCBmaW5kIG1ldGhvZCAndmFsdWUnIj4wPC9lcnJvcj4pIGNsYXNzIEQgeworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvYW5ub3RhdGlvblBhcnNpbmcvYW5ub3RhdGlvbi9FcnJvcnMudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9hbm5vdGF0aW9uUGFyc2luZy9hbm5vdGF0aW9uL0Vycm9ycy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWYxZWZkYgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvYW5ub3RhdGlvblBhcnNpbmcvYW5ub3RhdGlvbi9FcnJvcnMudHh0CkBAIC0wLDAgKzEsNzMgQEAKK1BzaUphdmFGaWxlOkVycm9ycy5qYXZhCisgIFBzaUltcG9ydExpc3QKKyAgICA8ZW1wdHkgbGlzdD4KKyAgUHNpQ2xhc3M6RAorICAgIFBzaU1vZGlmaWVyTGlzdDpAQW5uKDxlcnJvciBkZXNjcj0iQ2Fubm90IGZpbmQgbWV0aG9kICd2YWx1ZSciPjA8L2Vycm9yPikKKyAgICAgIFBzaUFubm90YXRpb24KKyAgICAgICAgUHNpSmF2YVRva2VuOkFUKCdAJykKKyAgICAgICAgUHNpSmF2YUNvZGVSZWZlcmVuY2VFbGVtZW50OkFubgorICAgICAgICAgIFBzaUlkZW50aWZpZXI6QW5uKCdBbm4nKQorICAgICAgICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICBQc2lBbm5vdGF0aW9uUGFyYW1ldGVyTGlzdAorICAgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgICAgUHNpTmFtZVZhbHVlUGFpcgorICAgICAgICAgICAgUHNpRXJyb3JFbGVtZW50OlZhbHVlIGV4cGVjdGVkCisgICAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICAgIFBzaUVycm9yRWxlbWVudDonLCcgb3IgJyknIGV4cGVjdGVkCisgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgICBQc2lKYXZhVG9rZW46TFQoJzwnKQorICAgICAgICAgIFBzaU5hbWVWYWx1ZVBhaXIKKyAgICAgICAgICAgIFBzaUlkZW50aWZpZXI6ZXJyb3IoJ2Vycm9yJykKKyAgICAgICAgICAgIFBzaUVycm9yRWxlbWVudDonPScgZXhwZWN0ZWQKKyAgICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgICAgICAgIFBzaVJlZmVyZW5jZUV4cHJlc3Npb246ZGVzY3IKKyAgICAgICAgICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICAgICAgICBQc2lJZGVudGlmaWVyOmRlc2NyKCdkZXNjcicpCisgICAgICAgICAgUHNpRXJyb3JFbGVtZW50OicsJyBvciAnKScgZXhwZWN0ZWQKKyAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICAgIFBzaUphdmFUb2tlbjpFUSgnPScpCisgICAgICAgICAgUHNpTmFtZVZhbHVlUGFpcgorICAgICAgICAgICAgUHNpRXJyb3JFbGVtZW50OklkZW50aWZpZXIgZXhwZWN0ZWQKKyAgICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgICAgICBQc2lFcnJvckVsZW1lbnQ6Jz0nIGV4cGVjdGVkCisgICAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICAgICAgUHNpQmluYXJ5RXhwcmVzc2lvbjoiQ2Fubm90IGZpbmQgbWV0aG9kICd2YWx1ZSciPjA8CisgICAgICAgICAgICAgIFBzaUJpbmFyeUV4cHJlc3Npb246IkNhbm5vdCBmaW5kIG1ldGhvZCAndmFsdWUnIj4wCisgICAgICAgICAgICAgICAgUHNpTGl0ZXJhbEV4cHJlc3Npb246IkNhbm5vdCBmaW5kIG1ldGhvZCAndmFsdWUnIgorICAgICAgICAgICAgICAgICAgUHNpSmF2YVRva2VuOlNUUklOR19MSVRFUkFMKCciQ2Fubm90IGZpbmQgbWV0aG9kICd2YWx1ZSciJykKKyAgICAgICAgICAgICAgICBQc2lKYXZhVG9rZW46R1QoJz4nKQorICAgICAgICAgICAgICAgIFBzaUxpdGVyYWxFeHByZXNzaW9uOjAKKyAgICAgICAgICAgICAgICAgIFBzaUphdmFUb2tlbjpJTlRFR0VSX0xJVEVSQUwoJzAnKQorICAgICAgICAgICAgICBQc2lKYXZhVG9rZW46TFQoJzwnKQorICAgICAgICAgICAgICBQc2lFcnJvckVsZW1lbnQ6RXhwcmVzc2lvbiBleHBlY3RlZAorICAgICAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICAgIFBzaUVycm9yRWxlbWVudDonLCcgb3IgJyknIGV4cGVjdGVkCisgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgICBQc2lKYXZhVG9rZW46RElWKCcvJykKKyAgICAgICAgICBQc2lOYW1lVmFsdWVQYWlyCisgICAgICAgICAgICBQc2lJZGVudGlmaWVyOmVycm9yKCdlcnJvcicpCisgICAgICAgICAgICBQc2lFcnJvckVsZW1lbnQ6Jz0nIGV4cGVjdGVkCisgICAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICAgICAgUHNpRXJyb3JFbGVtZW50OlZhbHVlIGV4cGVjdGVkCisgICAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICAgIFBzaUVycm9yRWxlbWVudDonLCcgb3IgJyknIGV4cGVjdGVkCisgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgICBQc2lKYXZhVG9rZW46R1QoJz4nKQorICAgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgUHNpS2V5d29yZDpjbGFzcygnY2xhc3MnKQorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaUlkZW50aWZpZXI6RCgnRCcpCisgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuJykKKyAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2Fubm90YXRpb25QYXJzaW5nL2Fubm90YXRpb24vTWFya2VyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2Fubm90YXRpb25QYXJzaW5nL2Fubm90YXRpb24vTWFya2VyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmQ4Njc4NgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvYW5ub3RhdGlvblBhcnNpbmcvYW5ub3RhdGlvbi9NYXJrZXIuamF2YQpAQCAtMCwwICsxIEBACitAUHJlbGltaW5hcnkgcHVibGljIGNsYXNzIFRpbWVUcmF2ZWwge30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2Fubm90YXRpb25QYXJzaW5nL2Fubm90YXRpb24vTWFya2VyLnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvYW5ub3RhdGlvblBhcnNpbmcvYW5ub3RhdGlvbi9NYXJrZXIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE0ODNjNmMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2Fubm90YXRpb25QYXJzaW5nL2Fubm90YXRpb24vTWFya2VyLnR4dApAQCAtMCwwICsxLDI4IEBACitQc2lKYXZhRmlsZTpNYXJrZXIuamF2YQorICBQc2lJbXBvcnRMaXN0CisgICAgPGVtcHR5IGxpc3Q+CisgIFBzaUNsYXNzOlRpbWVUcmF2ZWwKKyAgICBQc2lNb2RpZmllckxpc3Q6QFByZWxpbWluYXJ5IHB1YmxpYworICAgICAgUHNpQW5ub3RhdGlvbgorICAgICAgICBQc2lKYXZhVG9rZW46QVQoJ0AnKQorICAgICAgICBQc2lKYXZhQ29kZVJlZmVyZW5jZUVsZW1lbnQ6UHJlbGltaW5hcnkKKyAgICAgICAgICBQc2lJZGVudGlmaWVyOlByZWxpbWluYXJ5KCdQcmVsaW1pbmFyeScpCisgICAgICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgIFBzaUFubm90YXRpb25QYXJhbWV0ZXJMaXN0CisgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUtleXdvcmQ6cHVibGljKCdwdWJsaWMnKQorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaUtleXdvcmQ6Y2xhc3MoJ2NsYXNzJykKKyAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICBQc2lJZGVudGlmaWVyOlRpbWVUcmF2ZWwoJ1RpbWVUcmF2ZWwnKQorICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2Fubm90YXRpb25QYXJzaW5nL2Fubm90YXRpb24vTXVsdGlwbGUuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvYW5ub3RhdGlvblBhcnNpbmcvYW5ub3RhdGlvbi9NdWx0aXBsZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRmNDdmNTIwCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9hbm5vdGF0aW9uUGFyc2luZy9hbm5vdGF0aW9uL011bHRpcGxlLmphdmEKQEAgLTAsMCArMSBAQAorQFByZWxpbWluYXJ5IHB1YmxpYyBAT3RoZXIobmFtZT12YWx1ZSkgY2xhc3MgVGltZVRyYXZlbCB7fQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvYW5ub3RhdGlvblBhcnNpbmcvYW5ub3RhdGlvbi9NdWx0aXBsZS50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2Fubm90YXRpb25QYXJzaW5nL2Fubm90YXRpb24vTXVsdGlwbGUudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE0MmEwZGMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2Fubm90YXRpb25QYXJzaW5nL2Fubm90YXRpb24vTXVsdGlwbGUudHh0CkBAIC0wLDAgKzEsNDUgQEAKK1BzaUphdmFGaWxlOk11bHRpcGxlLmphdmEKKyAgUHNpSW1wb3J0TGlzdAorICAgIDxlbXB0eSBsaXN0PgorICBQc2lDbGFzczpUaW1lVHJhdmVsCisgICAgUHNpTW9kaWZpZXJMaXN0OkBQcmVsaW1pbmFyeSBwdWJsaWMgQE90aGVyKG5hbWU9dmFsdWUpCisgICAgICBQc2lBbm5vdGF0aW9uCisgICAgICAgIFBzaUphdmFUb2tlbjpBVCgnQCcpCisgICAgICAgIFBzaUphdmFDb2RlUmVmZXJlbmNlRWxlbWVudDpQcmVsaW1pbmFyeQorICAgICAgICAgIFBzaUlkZW50aWZpZXI6UHJlbGltaW5hcnkoJ1ByZWxpbWluYXJ5JykKKyAgICAgICAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgUHNpQW5ub3RhdGlvblBhcmFtZXRlckxpc3QKKyAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpS2V5d29yZDpwdWJsaWMoJ3B1YmxpYycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUFubm90YXRpb24KKyAgICAgICAgUHNpSmF2YVRva2VuOkFUKCdAJykKKyAgICAgICAgUHNpSmF2YUNvZGVSZWZlcmVuY2VFbGVtZW50Ok90aGVyCisgICAgICAgICAgUHNpSWRlbnRpZmllcjpPdGhlcignT3RoZXInKQorICAgICAgICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICBQc2lBbm5vdGF0aW9uUGFyYW1ldGVyTGlzdAorICAgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgICAgUHNpTmFtZVZhbHVlUGFpcgorICAgICAgICAgICAgUHNpSWRlbnRpZmllcjpuYW1lKCduYW1lJykKKyAgICAgICAgICAgIFBzaUphdmFUb2tlbjpFUSgnPScpCisgICAgICAgICAgICBQc2lSZWZlcmVuY2VFeHByZXNzaW9uOnZhbHVlCisgICAgICAgICAgICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgICAgICAgUHNpSWRlbnRpZmllcjp2YWx1ZSgndmFsdWUnKQorICAgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgUHNpS2V5d29yZDpjbGFzcygnY2xhc3MnKQorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaUlkZW50aWZpZXI6VGltZVRyYXZlbCgnVGltZVRyYXZlbCcpCisgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvYW5ub3RhdGlvblBhcnNpbmcvYW5ub3RhdGlvbi9OZXN0ZWQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvYW5ub3RhdGlvblBhcnNpbmcvYW5ub3RhdGlvbi9OZXN0ZWQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NTIzYmMzCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9hbm5vdGF0aW9uUGFyc2luZy9hbm5vdGF0aW9uL05lc3RlZC5qYXZhCkBAIC0wLDAgKzEsMyBAQAorY2xhc3MgRmFudGFzeSB7CisgIEBBdXRob3IoQE5hbWUoZmlyc3Q9IkV1Z2VuZSIsIHNlY29uZD0iV2FtcGlyY2hpayIpKSB2b2lkIGNvbXBvc2UgKCkge30gCit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9hbm5vdGF0aW9uUGFyc2luZy9hbm5vdGF0aW9uL05lc3RlZC50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2Fubm90YXRpb25QYXJzaW5nL2Fubm90YXRpb24vTmVzdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YmI4OTI2Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9hbm5vdGF0aW9uUGFyc2luZy9hbm5vdGF0aW9uL05lc3RlZC50eHQKQEAgLTAsMCArMSw3MCBAQAorUHNpSmF2YUZpbGU6TmVzdGVkLmphdmEKKyAgUHNpSW1wb3J0TGlzdAorICAgIDxlbXB0eSBsaXN0PgorICBQc2lDbGFzczpGYW50YXN5CisgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpS2V5d29yZDpjbGFzcygnY2xhc3MnKQorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaUlkZW50aWZpZXI6RmFudGFzeSgnRmFudGFzeScpCisgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuICAnKQorICAgIFBzaU1ldGhvZDpjb21wb3NlCisgICAgICBQc2lNb2RpZmllckxpc3Q6QEF1dGhvcihATmFtZShmaXJzdD0iRXVnZW5lIiwgc2Vjb25kPSJXYW1waXJjaGlrIikpCisgICAgICAgIFBzaUFubm90YXRpb24KKyAgICAgICAgICBQc2lKYXZhVG9rZW46QVQoJ0AnKQorICAgICAgICAgIFBzaUphdmFDb2RlUmVmZXJlbmNlRWxlbWVudDpBdXRob3IKKyAgICAgICAgICAgIFBzaUlkZW50aWZpZXI6QXV0aG9yKCdBdXRob3InKQorICAgICAgICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgICBQc2lBbm5vdGF0aW9uUGFyYW1ldGVyTGlzdAorICAgICAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgICAgIFBzaU5hbWVWYWx1ZVBhaXIKKyAgICAgICAgICAgICAgUHNpQW5ub3RhdGlvbgorICAgICAgICAgICAgICAgIFBzaUphdmFUb2tlbjpBVCgnQCcpCisgICAgICAgICAgICAgICAgUHNpSmF2YUNvZGVSZWZlcmVuY2VFbGVtZW50Ok5hbWUKKyAgICAgICAgICAgICAgICAgIFBzaUlkZW50aWZpZXI6TmFtZSgnTmFtZScpCisgICAgICAgICAgICAgICAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICAgICAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICAgICAgICAgIFBzaUFubm90YXRpb25QYXJhbWV0ZXJMaXN0CisgICAgICAgICAgICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICAgICAgICAgICAgUHNpTmFtZVZhbHVlUGFpcgorICAgICAgICAgICAgICAgICAgICBQc2lJZGVudGlmaWVyOmZpcnN0KCdmaXJzdCcpCisgICAgICAgICAgICAgICAgICAgIFBzaUphdmFUb2tlbjpFUSgnPScpCisgICAgICAgICAgICAgICAgICAgIFBzaUxpdGVyYWxFeHByZXNzaW9uOiJFdWdlbmUiCisgICAgICAgICAgICAgICAgICAgICAgUHNpSmF2YVRva2VuOlNUUklOR19MSVRFUkFMKCciRXVnZW5lIicpCisgICAgICAgICAgICAgICAgICBQc2lKYXZhVG9rZW46Q09NTUEoJywnKQorICAgICAgICAgICAgICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICAgICAgICAgICAgICBQc2lOYW1lVmFsdWVQYWlyCisgICAgICAgICAgICAgICAgICAgIFBzaUlkZW50aWZpZXI6c2Vjb25kKCdzZWNvbmQnKQorICAgICAgICAgICAgICAgICAgICBQc2lKYXZhVG9rZW46RVEoJz0nKQorICAgICAgICAgICAgICAgICAgICBQc2lMaXRlcmFsRXhwcmVzc2lvbjoiV2FtcGlyY2hpayIKKyAgICAgICAgICAgICAgICAgICAgICBQc2lKYXZhVG9rZW46U1RSSU5HX0xJVEVSQUwoJyJXYW1waXJjaGlrIicpCisgICAgICAgICAgICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Y29tcG9zZSgnY29tcG9zZScpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnIFxuJykKKyAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2Fubm90YXRpb25QYXJzaW5nL2Fubm90YXRpb24vUGFja2FnZUFubm90YXRpb24uamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvYW5ub3RhdGlvblBhcnNpbmcvYW5ub3RhdGlvbi9QYWNrYWdlQW5ub3RhdGlvbi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEyZWM4ZmYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2Fubm90YXRpb25QYXJzaW5nL2Fubm90YXRpb24vUGFja2FnZUFubm90YXRpb24uamF2YQpAQCAtMCwwICsxIEBACitAQW5ub3RhdGlvbiBwYWNrYWdlIFA7ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9hbm5vdGF0aW9uUGFyc2luZy9hbm5vdGF0aW9uL1BhY2thZ2VBbm5vdGF0aW9uLnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvYW5ub3RhdGlvblBhcnNpbmcvYW5ub3RhdGlvbi9QYWNrYWdlQW5ub3RhdGlvbi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzY4ODYyYgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvYW5ub3RhdGlvblBhcnNpbmcvYW5ub3RhdGlvbi9QYWNrYWdlQW5ub3RhdGlvbi50eHQKQEAgLTAsMCArMSwyMSBAQAorUHNpSmF2YUZpbGU6UGFja2FnZUFubm90YXRpb24uamF2YQorICBQc2lQYWNrYWdlU3RhdGVtZW50OlAKKyAgICBQc2lNb2RpZmllckxpc3Q6QEFubm90YXRpb24KKyAgICAgIFBzaUFubm90YXRpb24KKyAgICAgICAgUHNpSmF2YVRva2VuOkFUKCdAJykKKyAgICAgICAgUHNpSmF2YUNvZGVSZWZlcmVuY2VFbGVtZW50OkFubm90YXRpb24KKyAgICAgICAgICBQc2lJZGVudGlmaWVyOkFubm90YXRpb24oJ0Fubm90YXRpb24nKQorICAgICAgICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICBQc2lBbm5vdGF0aW9uUGFyYW1ldGVyTGlzdAorICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaUtleXdvcmQ6cGFja2FnZSgncGFja2FnZScpCisgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgUHNpSmF2YUNvZGVSZWZlcmVuY2VFbGVtZW50OlAKKyAgICAgIFBzaUlkZW50aWZpZXI6UCgnUCcpCisgICAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaUphdmFUb2tlbjpTRU1JQ09MT04oJzsnKQorICBQc2lJbXBvcnRMaXN0CisgICAgPGVtcHR5IGxpc3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9hbm5vdGF0aW9uUGFyc2luZy9hbm5vdGF0aW9uL1BhcmFtZXRlckFubm90YXRpb24uamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvYW5ub3RhdGlvblBhcnNpbmcvYW5ub3RhdGlvbi9QYXJhbWV0ZXJBbm5vdGF0aW9uLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODE2ZGQ2ZAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvYW5ub3RhdGlvblBhcnNpbmcvYW5ub3RhdGlvbi9QYXJhbWV0ZXJBbm5vdGF0aW9uLmphdmEKQEAgLTAsMCArMSw0IEBACitwdWJsaWMgY2xhc3MgQW5ub3RhdGVkIHsKKyAgICB2b2lkIGZvbyAoQEFubm90YXRpb24odmFsdWU9NzcpIGludCBwYXJhbSkgeworICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvYW5ub3RhdGlvblBhcnNpbmcvYW5ub3RhdGlvbi9QYXJhbWV0ZXJBbm5vdGF0aW9uLnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvYW5ub3RhdGlvblBhcnNpbmcvYW5ub3RhdGlvbi9QYXJhbWV0ZXJBbm5vdGF0aW9uLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMzUwMDYyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9hbm5vdGF0aW9uUGFyc2luZy9hbm5vdGF0aW9uL1BhcmFtZXRlckFubm90YXRpb24udHh0CkBAIC0wLDAgKzEsNjIgQEAKK1BzaUphdmFGaWxlOlBhcmFtZXRlckFubm90YXRpb24uamF2YQorICBQc2lJbXBvcnRMaXN0CisgICAgPGVtcHR5IGxpc3Q+CisgIFBzaUNsYXNzOkFubm90YXRlZAorICAgIFBzaU1vZGlmaWVyTGlzdDpwdWJsaWMKKyAgICAgIFBzaUtleXdvcmQ6cHVibGljKCdwdWJsaWMnKQorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaUtleXdvcmQ6Y2xhc3MoJ2NsYXNzJykKKyAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICBQc2lJZGVudGlmaWVyOkFubm90YXRlZCgnQW5ub3RhdGVkJykKKyAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgUHNpV2hpdGVTcGFjZSgnXG4gICAgJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OihAQW5ub3RhdGlvbih2YWx1ZT03NykgaW50IHBhcmFtKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lQYXJhbWV0ZXI6cGFyYW0KKyAgICAgICAgICBQc2lNb2RpZmllckxpc3Q6QEFubm90YXRpb24odmFsdWU9NzcpCisgICAgICAgICAgICBQc2lBbm5vdGF0aW9uCisgICAgICAgICAgICAgIFBzaUphdmFUb2tlbjpBVCgnQCcpCisgICAgICAgICAgICAgIFBzaUphdmFDb2RlUmVmZXJlbmNlRWxlbWVudDpBbm5vdGF0aW9uCisgICAgICAgICAgICAgICAgUHNpSWRlbnRpZmllcjpBbm5vdGF0aW9uKCdBbm5vdGF0aW9uJykKKyAgICAgICAgICAgICAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICAgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgICAgICAgUHNpQW5ub3RhdGlvblBhcmFtZXRlckxpc3QKKyAgICAgICAgICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICAgICAgICAgIFBzaU5hbWVWYWx1ZVBhaXIKKyAgICAgICAgICAgICAgICAgIFBzaUlkZW50aWZpZXI6dmFsdWUoJ3ZhbHVlJykKKyAgICAgICAgICAgICAgICAgIFBzaUphdmFUb2tlbjpFUSgnPScpCisgICAgICAgICAgICAgICAgICBQc2lMaXRlcmFsRXhwcmVzc2lvbjo3NworICAgICAgICAgICAgICAgICAgICBQc2lKYXZhVG9rZW46SU5URUdFUl9MSVRFUkFMKCc3NycpCisgICAgICAgICAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgICAgICBQc2lUeXBlRWxlbWVudDppbnQKKyAgICAgICAgICAgIFBzaUtleXdvcmQ6aW50KCdpbnQnKQorICAgICAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgICAgIFBzaUlkZW50aWZpZXI6cGFyYW0oJ3BhcmFtJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gICAgJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG4nKQorICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvYW5ub3RhdGlvblBhcnNpbmcvYW5ub3RhdGlvbi9QYXJhbWV0ZXJpemVkTWV0aG9kLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2Fubm90YXRpb25QYXJzaW5nL2Fubm90YXRpb24vUGFyYW1ldGVyaXplZE1ldGhvZC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVhNWYzOTEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2Fubm90YXRpb25QYXJzaW5nL2Fubm90YXRpb24vUGFyYW1ldGVyaXplZE1ldGhvZC5qYXZhCkBAIC0wLDAgKzEsNSBAQAorY2xhc3MgVGVzdGVyIHsKKyAgQE51bGxhYmxlIDxUPiBUIGJhcigpIHsKKyAgICByZXR1cm4gbnVsbDsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvYW5ub3RhdGlvblBhcnNpbmcvYW5ub3RhdGlvbi9QYXJhbWV0ZXJpemVkTWV0aG9kLnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvYW5ub3RhdGlvblBhcnNpbmcvYW5ub3RhdGlvbi9QYXJhbWV0ZXJpemVkTWV0aG9kLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNzZkNzhjCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9hbm5vdGF0aW9uUGFyc2luZy9hbm5vdGF0aW9uL1BhcmFtZXRlcml6ZWRNZXRob2QudHh0CkBAIC0wLDAgKzEsNjMgQEAKK1BzaUphdmFGaWxlOlBhcmFtZXRlcml6ZWRNZXRob2QuamF2YQorICBQc2lJbXBvcnRMaXN0CisgICAgPGVtcHR5IGxpc3Q+CisgIFBzaUNsYXNzOlRlc3RlcgorICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaUtleXdvcmQ6Y2xhc3MoJ2NsYXNzJykKKyAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICBQc2lJZGVudGlmaWVyOlRlc3RlcignVGVzdGVyJykKKyAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgUHNpV2hpdGVTcGFjZSgnXG4gICcpCisgICAgUHNpTWV0aG9kOmJhcgorICAgICAgUHNpTW9kaWZpZXJMaXN0OkBOdWxsYWJsZQorICAgICAgICBQc2lBbm5vdGF0aW9uCisgICAgICAgICAgUHNpSmF2YVRva2VuOkFUKCdAJykKKyAgICAgICAgICBQc2lKYXZhQ29kZVJlZmVyZW5jZUVsZW1lbnQ6TnVsbGFibGUKKyAgICAgICAgICAgIFBzaUlkZW50aWZpZXI6TnVsbGFibGUoJ051bGxhYmxlJykKKyAgICAgICAgICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgICAgUHNpQW5ub3RhdGlvblBhcmFtZXRlckxpc3QKKyAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICBQc2lKYXZhVG9rZW46TFQoJzwnKQorICAgICAgICBQc2lUeXBlUGFyYW1ldGVyOlQKKyAgICAgICAgICBQc2lJZGVudGlmaWVyOlQoJ1QnKQorICAgICAgICAgIFBzaUVsZW1lbnQoRVhURU5EU19CT1VORF9MSVNUKQorICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgIFBzaUphdmFUb2tlbjpHVCgnPicpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaVR5cGVFbGVtZW50OlQKKyAgICAgICAgUHNpSmF2YUNvZGVSZWZlcmVuY2VFbGVtZW50OlQKKyAgICAgICAgICBQc2lJZGVudGlmaWVyOlQoJ1QnKQorICAgICAgICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmJhcignYmFyJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gICAgJykKKyAgICAgICAgUHNpUmV0dXJuU3RhdGVtZW50CisgICAgICAgICAgUHNpS2V5d29yZDpyZXR1cm4oJ3JldHVybicpCisgICAgICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICAgICAgUHNpTGl0ZXJhbEV4cHJlc3Npb246bnVsbAorICAgICAgICAgICAgUHNpSmF2YVRva2VuOk5VTExfS0VZV09SRCgnbnVsbCcpCisgICAgICAgICAgUHNpSmF2YVRva2VuOlNFTUlDT0xPTignOycpCisgICAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICAnKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcbicpCisgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9hbm5vdGF0aW9uUGFyc2luZy9hbm5vdGF0aW9uL1F1YWxpZmllZEFubm90YXRpb24uamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvYW5ub3RhdGlvblBhcnNpbmcvYW5ub3RhdGlvbi9RdWFsaWZpZWRBbm5vdGF0aW9uLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmVlNWYyNgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvYW5ub3RhdGlvblBhcnNpbmcvYW5ub3RhdGlvbi9RdWFsaWZpZWRBbm5vdGF0aW9uLmphdmEKQEAgLTAsMCArMSwzIEBACitpbnRlcmZhY2UgUHNpRWxlbWVudCB7CisgIEBvcmcuamV0YnJhaW5zLmFubm90YXRpb25zLk51bGxhYmxlIDxUPiBUIGdldENvcHlhYmxlVXNlckRhdGEoS2V5PFQ+IGtleSk7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9hbm5vdGF0aW9uUGFyc2luZy9hbm5vdGF0aW9uL1F1YWxpZmllZEFubm90YXRpb24udHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9hbm5vdGF0aW9uUGFyc2luZy9hbm5vdGF0aW9uL1F1YWxpZmllZEFubm90YXRpb24udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY3YzEzMDgKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2Fubm90YXRpb25QYXJzaW5nL2Fubm90YXRpb24vUXVhbGlmaWVkQW5ub3RhdGlvbi50eHQKQEAgLTAsMCArMSw4MyBAQAorUHNpSmF2YUZpbGU6UXVhbGlmaWVkQW5ub3RhdGlvbi5qYXZhCisgIFBzaUltcG9ydExpc3QKKyAgICA8ZW1wdHkgbGlzdD4KKyAgUHNpQ2xhc3M6UHNpRWxlbWVudAorICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaUtleXdvcmQ6aW50ZXJmYWNlKCdpbnRlcmZhY2UnKQorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaUlkZW50aWZpZXI6UHNpRWxlbWVudCgnUHNpRWxlbWVudCcpCisgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuICAnKQorICAgIFBzaU1ldGhvZDpnZXRDb3B5YWJsZVVzZXJEYXRhCisgICAgICBQc2lNb2RpZmllckxpc3Q6QG9yZy5qZXRicmFpbnMuYW5ub3RhdGlvbnMuTnVsbGFibGUKKyAgICAgICAgUHNpQW5ub3RhdGlvbgorICAgICAgICAgIFBzaUphdmFUb2tlbjpBVCgnQCcpCisgICAgICAgICAgUHNpSmF2YUNvZGVSZWZlcmVuY2VFbGVtZW50Om9yZy5qZXRicmFpbnMuYW5ub3RhdGlvbnMuTnVsbGFibGUKKyAgICAgICAgICAgIFBzaUphdmFDb2RlUmVmZXJlbmNlRWxlbWVudDpvcmcuamV0YnJhaW5zLmFubm90YXRpb25zCisgICAgICAgICAgICAgIFBzaUphdmFDb2RlUmVmZXJlbmNlRWxlbWVudDpvcmcuamV0YnJhaW5zCisgICAgICAgICAgICAgICAgUHNpSmF2YUNvZGVSZWZlcmVuY2VFbGVtZW50Om9yZworICAgICAgICAgICAgICAgICAgUHNpSWRlbnRpZmllcjpvcmcoJ29yZycpCisgICAgICAgICAgICAgICAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICAgICAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICAgICAgICAgIFBzaUphdmFUb2tlbjpET1QoJy4nKQorICAgICAgICAgICAgICAgIFBzaUlkZW50aWZpZXI6amV0YnJhaW5zKCdqZXRicmFpbnMnKQorICAgICAgICAgICAgICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgICAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICAgICAgICBQc2lKYXZhVG9rZW46RE9UKCcuJykKKyAgICAgICAgICAgICAgUHNpSWRlbnRpZmllcjphbm5vdGF0aW9ucygnYW5ub3RhdGlvbnMnKQorICAgICAgICAgICAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgICAgICBQc2lKYXZhVG9rZW46RE9UKCcuJykKKyAgICAgICAgICAgIFBzaUlkZW50aWZpZXI6TnVsbGFibGUoJ051bGxhYmxlJykKKyAgICAgICAgICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgICAgUHNpQW5ub3RhdGlvblBhcmFtZXRlckxpc3QKKyAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICBQc2lKYXZhVG9rZW46TFQoJzwnKQorICAgICAgICBQc2lUeXBlUGFyYW1ldGVyOlQKKyAgICAgICAgICBQc2lJZGVudGlmaWVyOlQoJ1QnKQorICAgICAgICAgIFBzaUVsZW1lbnQoRVhURU5EU19CT1VORF9MSVNUKQorICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgIFBzaUphdmFUb2tlbjpHVCgnPicpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaVR5cGVFbGVtZW50OlQKKyAgICAgICAgUHNpSmF2YUNvZGVSZWZlcmVuY2VFbGVtZW50OlQKKyAgICAgICAgICBQc2lJZGVudGlmaWVyOlQoJ1QnKQorICAgICAgICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmdldENvcHlhYmxlVXNlckRhdGEoJ2dldENvcHlhYmxlVXNlckRhdGEnKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooS2V5PFQ+IGtleSkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpUGFyYW1ldGVyOmtleQorICAgICAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICAgIFBzaVR5cGVFbGVtZW50OktleTxUPgorICAgICAgICAgICAgUHNpSmF2YUNvZGVSZWZlcmVuY2VFbGVtZW50OktleTxUPgorICAgICAgICAgICAgICBQc2lJZGVudGlmaWVyOktleSgnS2V5JykKKyAgICAgICAgICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICAgICAgICAgIFBzaUphdmFUb2tlbjpMVCgnPCcpCisgICAgICAgICAgICAgICAgUHNpVHlwZUVsZW1lbnQ6VAorICAgICAgICAgICAgICAgICAgUHNpSmF2YUNvZGVSZWZlcmVuY2VFbGVtZW50OlQKKyAgICAgICAgICAgICAgICAgICAgUHNpSWRlbnRpZmllcjpUKCdUJykKKyAgICAgICAgICAgICAgICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICAgICAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICAgICAgICAgIFBzaUphdmFUb2tlbjpHVCgnPicpCisgICAgICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICAgICAgUHNpSWRlbnRpZmllcjprZXkoJ2tleScpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpSmF2YVRva2VuOlNFTUlDT0xPTignOycpCisgICAgUHNpV2hpdGVTcGFjZSgnXG4nKQorICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvYW5ub3RhdGlvblBhcnNpbmcvYW5ub3RhdGlvbi9TaW1wbGUxLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2Fubm90YXRpb25QYXJzaW5nL2Fubm90YXRpb24vU2ltcGxlMS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZhOTBiZjYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2Fubm90YXRpb25QYXJzaW5nL2Fubm90YXRpb24vU2ltcGxlMS5qYXZhCkBAIC0wLDAgKzEgQEAKK3B1YmxpYyBAQ29weXJpZ2h0KCJibGEtYmxhLWJsYSIpIGNsYXNzIFRpbWVUcmF2ZWwge30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2Fubm90YXRpb25QYXJzaW5nL2Fubm90YXRpb24vU2ltcGxlMS50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2Fubm90YXRpb25QYXJzaW5nL2Fubm90YXRpb24vU2ltcGxlMS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzIxMzAxNwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvYW5ub3RhdGlvblBhcnNpbmcvYW5ub3RhdGlvbi9TaW1wbGUxLnR4dApAQCAtMCwwICsxLDMyIEBACitQc2lKYXZhRmlsZTpTaW1wbGUxLmphdmEKKyAgUHNpSW1wb3J0TGlzdAorICAgIDxlbXB0eSBsaXN0PgorICBQc2lDbGFzczpUaW1lVHJhdmVsCisgICAgUHNpTW9kaWZpZXJMaXN0OnB1YmxpYyBAQ29weXJpZ2h0KCJibGEtYmxhLWJsYSIpCisgICAgICBQc2lLZXl3b3JkOnB1YmxpYygncHVibGljJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpQW5ub3RhdGlvbgorICAgICAgICBQc2lKYXZhVG9rZW46QVQoJ0AnKQorICAgICAgICBQc2lKYXZhQ29kZVJlZmVyZW5jZUVsZW1lbnQ6Q29weXJpZ2h0CisgICAgICAgICAgUHNpSWRlbnRpZmllcjpDb3B5cmlnaHQoJ0NvcHlyaWdodCcpCisgICAgICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgIFBzaUFubm90YXRpb25QYXJhbWV0ZXJMaXN0CisgICAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgICBQc2lOYW1lVmFsdWVQYWlyCisgICAgICAgICAgICBQc2lMaXRlcmFsRXhwcmVzc2lvbjoiYmxhLWJsYS1ibGEiCisgICAgICAgICAgICAgIFBzaUphdmFUb2tlbjpTVFJJTkdfTElURVJBTCgnImJsYS1ibGEtYmxhIicpCisgICAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICBQc2lLZXl3b3JkOmNsYXNzKCdjbGFzcycpCisgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgUHNpSWRlbnRpZmllcjpUaW1lVHJhdmVsKCdUaW1lVHJhdmVsJykKKyAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9hbm5vdGF0aW9uUGFyc2luZy9hbm5vdGF0aW9uL1NpbXBsZTIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvYW5ub3RhdGlvblBhcnNpbmcvYW5ub3RhdGlvbi9TaW1wbGUyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWIzMTZhMgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvYW5ub3RhdGlvblBhcnNpbmcvYW5ub3RhdGlvbi9TaW1wbGUyLmphdmEKQEAgLTAsMCArMSBAQAorcHVibGljIEBDb3B5cmlnaHQodHJlYXRlZEFzVmFsdWUpIGNsYXNzIFRpbWVUcmF2ZWwge30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2Fubm90YXRpb25QYXJzaW5nL2Fubm90YXRpb24vU2ltcGxlMi50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2Fubm90YXRpb25QYXJzaW5nL2Fubm90YXRpb24vU2ltcGxlMi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjQyMjExYQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvYW5ub3RhdGlvblBhcnNpbmcvYW5ub3RhdGlvbi9TaW1wbGUyLnR4dApAQCAtMCwwICsxLDM0IEBACitQc2lKYXZhRmlsZTpTaW1wbGUyLmphdmEKKyAgUHNpSW1wb3J0TGlzdAorICAgIDxlbXB0eSBsaXN0PgorICBQc2lDbGFzczpUaW1lVHJhdmVsCisgICAgUHNpTW9kaWZpZXJMaXN0OnB1YmxpYyBAQ29weXJpZ2h0KHRyZWF0ZWRBc1ZhbHVlKQorICAgICAgUHNpS2V5d29yZDpwdWJsaWMoJ3B1YmxpYycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUFubm90YXRpb24KKyAgICAgICAgUHNpSmF2YVRva2VuOkFUKCdAJykKKyAgICAgICAgUHNpSmF2YUNvZGVSZWZlcmVuY2VFbGVtZW50OkNvcHlyaWdodAorICAgICAgICAgIFBzaUlkZW50aWZpZXI6Q29weXJpZ2h0KCdDb3B5cmlnaHQnKQorICAgICAgICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICBQc2lBbm5vdGF0aW9uUGFyYW1ldGVyTGlzdAorICAgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgICAgUHNpTmFtZVZhbHVlUGFpcgorICAgICAgICAgICAgUHNpUmVmZXJlbmNlRXhwcmVzc2lvbjp0cmVhdGVkQXNWYWx1ZQorICAgICAgICAgICAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgICAgICAgIFBzaUlkZW50aWZpZXI6dHJlYXRlZEFzVmFsdWUoJ3RyZWF0ZWRBc1ZhbHVlJykKKyAgICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaUtleXdvcmQ6Y2xhc3MoJ2NsYXNzJykKKyAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICBQc2lJZGVudGlmaWVyOlRpbWVUcmF2ZWwoJ1RpbWVUcmF2ZWwnKQorICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2Fubm90YXRpb25QYXJzaW5nL2Fubm90YXRpb24vVHlwZUFubm8uamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvYW5ub3RhdGlvblBhcnNpbmcvYW5ub3RhdGlvbi9UeXBlQW5uby5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdiZDdiZjYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2Fubm90YXRpb25QYXJzaW5nL2Fubm90YXRpb24vVHlwZUFubm8uamF2YQpAQCAtMCwwICsxLDkgQEAKK2NsYXNzIEM8QEQgVCBleHRlbmRzIEBGIE9iamVjdD4gZXh0ZW5kcyBARiBPYmplY3QgeworICBARiBpbnQgQEZbXSBtZXRob2RmKCkgdGhyb3dzIEBGIEV4Y2VwdGlvbiB7CisgICAgYSA9IHRoaXMgaW5zdGFuY2VvZiBARiBDOworICAgIEM8QEYgQEcgQz4gYyA9IG5ldyBAUSBDPEBGIEM+KCk7CisgICAgYyA9IChARiBPYmplY3QpYzsKKyAgICBDbGFzcyBjID0gQFRBIFN0cmluZy5jbGFzczsKKyAgICBARiBDLmZpZWxkKys7CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvYW5ub3RhdGlvblBhcnNpbmcvYW5ub3RhdGlvbi9UeXBlQW5uby50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2Fubm90YXRpb25QYXJzaW5nL2Fubm90YXRpb24vVHlwZUFubm8udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIxNmEwM2EKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2Fubm90YXRpb25QYXJzaW5nL2Fubm90YXRpb24vVHlwZUFubm8udHh0CkBAIC0wLDAgKzEsMzE1IEBACitQc2lKYXZhRmlsZTpUeXBlQW5uby5qYXZhCisgIFBzaUltcG9ydExpc3QKKyAgICA8ZW1wdHkgbGlzdD4KKyAgUHNpQ2xhc3M6QworICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaUtleXdvcmQ6Y2xhc3MoJ2NsYXNzJykKKyAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICBQc2lJZGVudGlmaWVyOkMoJ0MnKQorICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICBQc2lKYXZhVG9rZW46TFQoJzwnKQorICAgICAgUHNpVHlwZVBhcmFtZXRlcjpUCisgICAgICAgIFBzaUFubm90YXRpb24KKyAgICAgICAgICBQc2lKYXZhVG9rZW46QVQoJ0AnKQorICAgICAgICAgIFBzaUphdmFDb2RlUmVmZXJlbmNlRWxlbWVudDpECisgICAgICAgICAgICBQc2lJZGVudGlmaWVyOkQoJ0QnKQorICAgICAgICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgICBQc2lBbm5vdGF0aW9uUGFyYW1ldGVyTGlzdAorICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgICBQc2lJZGVudGlmaWVyOlQoJ1QnKQorICAgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgICAgUHNpRWxlbWVudChFWFRFTkRTX0JPVU5EX0xJU1QpCisgICAgICAgICAgUHNpS2V5d29yZDpleHRlbmRzKCdleHRlbmRzJykKKyAgICAgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgICAgICBQc2lKYXZhQ29kZVJlZmVyZW5jZUVsZW1lbnQ6QEYgT2JqZWN0CisgICAgICAgICAgICBQc2lBbm5vdGF0aW9uCisgICAgICAgICAgICAgIFBzaUphdmFUb2tlbjpBVCgnQCcpCisgICAgICAgICAgICAgIFBzaUphdmFDb2RlUmVmZXJlbmNlRWxlbWVudDpGCisgICAgICAgICAgICAgICAgUHNpSWRlbnRpZmllcjpGKCdGJykKKyAgICAgICAgICAgICAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICAgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgICAgICAgUHNpQW5ub3RhdGlvblBhcmFtZXRlckxpc3QKKyAgICAgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgICAgICAgUHNpSWRlbnRpZmllcjpPYmplY3QoJ09iamVjdCcpCisgICAgICAgICAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpSmF2YVRva2VuOkdUKCc+JykKKyAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICBQc2lLZXl3b3JkOmV4dGVuZHMoJ2V4dGVuZHMnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lKYXZhQ29kZVJlZmVyZW5jZUVsZW1lbnQ6QEYgT2JqZWN0CisgICAgICAgIFBzaUFubm90YXRpb24KKyAgICAgICAgICBQc2lKYXZhVG9rZW46QVQoJ0AnKQorICAgICAgICAgIFBzaUphdmFDb2RlUmVmZXJlbmNlRWxlbWVudDpGCisgICAgICAgICAgICBQc2lJZGVudGlmaWVyOkYoJ0YnKQorICAgICAgICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgICBQc2lBbm5vdGF0aW9uUGFyYW1ldGVyTGlzdAorICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgICBQc2lJZGVudGlmaWVyOk9iamVjdCgnT2JqZWN0JykKKyAgICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuICAnKQorICAgIFBzaU1ldGhvZDptZXRob2RmCisgICAgICBQc2lNb2RpZmllckxpc3Q6QEYKKyAgICAgICAgUHNpQW5ub3RhdGlvbgorICAgICAgICAgIFBzaUphdmFUb2tlbjpBVCgnQCcpCisgICAgICAgICAgUHNpSmF2YUNvZGVSZWZlcmVuY2VFbGVtZW50OkYKKyAgICAgICAgICAgIFBzaUlkZW50aWZpZXI6RignRicpCisgICAgICAgICAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICAgIFBzaUFubm90YXRpb25QYXJhbWV0ZXJMaXN0CisgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lUeXBlRWxlbWVudDppbnQgQEZbXQorICAgICAgICBQc2lUeXBlRWxlbWVudDppbnQKKyAgICAgICAgICBQc2lLZXl3b3JkOmludCgnaW50JykKKyAgICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICAgIFBzaUFubm90YXRpb24KKyAgICAgICAgICBQc2lKYXZhVG9rZW46QVQoJ0AnKQorICAgICAgICAgIFBzaUphdmFDb2RlUmVmZXJlbmNlRWxlbWVudDpGCisgICAgICAgICAgICBQc2lJZGVudGlmaWVyOkYoJ0YnKQorICAgICAgICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgICBQc2lBbm5vdGF0aW9uUGFyYW1ldGVyTGlzdAorICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0tFVCgnWycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0tFVCgnXScpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6bWV0aG9kZignbWV0aG9kZicpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgUHNpS2V5d29yZDp0aHJvd3MoJ3Rocm93cycpCisgICAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgICBQc2lKYXZhQ29kZVJlZmVyZW5jZUVsZW1lbnQ6QEYgRXhjZXB0aW9uCisgICAgICAgICAgUHNpQW5ub3RhdGlvbgorICAgICAgICAgICAgUHNpSmF2YVRva2VuOkFUKCdAJykKKyAgICAgICAgICAgIFBzaUphdmFDb2RlUmVmZXJlbmNlRWxlbWVudDpGCisgICAgICAgICAgICAgIFBzaUlkZW50aWZpZXI6RignRicpCisgICAgICAgICAgICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgICAgIFBzaUFubm90YXRpb25QYXJhbWV0ZXJMaXN0CisgICAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgICAgIFBzaUlkZW50aWZpZXI6RXhjZXB0aW9uKCdFeGNlcHRpb24nKQorICAgICAgICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICAgICcpCisgICAgICAgIFBzaUV4cHJlc3Npb25TdGF0ZW1lbnQKKyAgICAgICAgICBQc2lBc3NpZ25tZW50RXhwcmVzc2lvbjphID0gdGhpcyBpbnN0YW5jZW9mIEBGIEMKKyAgICAgICAgICAgIFBzaVJlZmVyZW5jZUV4cHJlc3Npb246YQorICAgICAgICAgICAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgICAgICAgIFBzaUlkZW50aWZpZXI6YSgnYScpCisgICAgICAgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgICAgICAgIFBzaUphdmFUb2tlbjpFUSgnPScpCisgICAgICAgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgICAgICAgIFBzaUluc3RhbmNlb2ZFeHByZXNzaW9uOnRoaXMgaW5zdGFuY2VvZiBARiBDCisgICAgICAgICAgICAgIFBzaVRoaXNFeHByZXNzaW9uOnRoaXMKKyAgICAgICAgICAgICAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICAgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgICAgICAgICBQc2lLZXl3b3JkOnRoaXMoJ3RoaXMnKQorICAgICAgICAgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgICAgICAgICAgUHNpS2V5d29yZDppbnN0YW5jZW9mKCdpbnN0YW5jZW9mJykKKyAgICAgICAgICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICAgICAgICAgIFBzaVR5cGVFbGVtZW50OkBGIEMKKyAgICAgICAgICAgICAgICBQc2lBbm5vdGF0aW9uCisgICAgICAgICAgICAgICAgICBQc2lKYXZhVG9rZW46QVQoJ0AnKQorICAgICAgICAgICAgICAgICAgUHNpSmF2YUNvZGVSZWZlcmVuY2VFbGVtZW50OkYKKyAgICAgICAgICAgICAgICAgICAgUHNpSWRlbnRpZmllcjpGKCdGJykKKyAgICAgICAgICAgICAgICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICAgICAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICAgICAgICAgICAgUHNpQW5ub3RhdGlvblBhcmFtZXRlckxpc3QKKyAgICAgICAgICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgICAgICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICAgICAgICAgICAgUHNpSmF2YUNvZGVSZWZlcmVuY2VFbGVtZW50OkMKKyAgICAgICAgICAgICAgICAgIFBzaUlkZW50aWZpZXI6QygnQycpCisgICAgICAgICAgICAgICAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICAgICAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICAgIFBzaUphdmFUb2tlbjpTRU1JQ09MT04oJzsnKQorICAgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAgICAnKQorICAgICAgICBQc2lEZWNsYXJhdGlvblN0YXRlbWVudAorICAgICAgICAgIFBzaUxvY2FsVmFyaWFibGU6YworICAgICAgICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgICAgIFBzaVR5cGVFbGVtZW50OkM8QEYgQEcgQz4KKyAgICAgICAgICAgICAgUHNpSmF2YUNvZGVSZWZlcmVuY2VFbGVtZW50OkM8QEYgQEcgQz4KKyAgICAgICAgICAgICAgICBQc2lJZGVudGlmaWVyOkMoJ0MnKQorICAgICAgICAgICAgICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgICAgICAgICAgICAgIFBzaUphdmFUb2tlbjpMVCgnPCcpCisgICAgICAgICAgICAgICAgICBQc2lUeXBlRWxlbWVudDpARiBARyBDCisgICAgICAgICAgICAgICAgICAgIFBzaUFubm90YXRpb24KKyAgICAgICAgICAgICAgICAgICAgICBQc2lKYXZhVG9rZW46QVQoJ0AnKQorICAgICAgICAgICAgICAgICAgICAgIFBzaUphdmFDb2RlUmVmZXJlbmNlRWxlbWVudDpGCisgICAgICAgICAgICAgICAgICAgICAgICBQc2lJZGVudGlmaWVyOkYoJ0YnKQorICAgICAgICAgICAgICAgICAgICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgICBQc2lBbm5vdGF0aW9uUGFyYW1ldGVyTGlzdAorICAgICAgICAgICAgICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgICAgICAgICAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgICAgICAgICAgICAgICBQc2lBbm5vdGF0aW9uCisgICAgICAgICAgICAgICAgICAgICAgUHNpSmF2YVRva2VuOkFUKCdAJykKKyAgICAgICAgICAgICAgICAgICAgICBQc2lKYXZhQ29kZVJlZmVyZW5jZUVsZW1lbnQ6RworICAgICAgICAgICAgICAgICAgICAgICAgUHNpSWRlbnRpZmllcjpHKCdHJykKKyAgICAgICAgICAgICAgICAgICAgICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgICAgICAgICAgICAgICAgUHNpQW5ub3RhdGlvblBhcmFtZXRlckxpc3QKKyAgICAgICAgICAgICAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICAgICAgICAgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgICAgICAgICAgICAgICAgUHNpSmF2YUNvZGVSZWZlcmVuY2VFbGVtZW50OkMKKyAgICAgICAgICAgICAgICAgICAgICBQc2lJZGVudGlmaWVyOkMoJ0MnKQorICAgICAgICAgICAgICAgICAgICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgICAgICAgICAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICAgICAgICAgICAgUHNpSmF2YVRva2VuOkdUKCc+JykKKyAgICAgICAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgICAgICAgUHNpSWRlbnRpZmllcjpjKCdjJykKKyAgICAgICAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgICAgICAgUHNpSmF2YVRva2VuOkVRKCc9JykKKyAgICAgICAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgICAgICAgUHNpTmV3RXhwcmVzc2lvbjpuZXcgQFEgQzxARiBDPigpCisgICAgICAgICAgICAgIFBzaUtleXdvcmQ6bmV3KCduZXcnKQorICAgICAgICAgICAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgICAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgICAgICAgICBQc2lKYXZhQ29kZVJlZmVyZW5jZUVsZW1lbnQ6QFEgQzxARiBDPgorICAgICAgICAgICAgICAgIFBzaUFubm90YXRpb24KKyAgICAgICAgICAgICAgICAgIFBzaUphdmFUb2tlbjpBVCgnQCcpCisgICAgICAgICAgICAgICAgICBQc2lKYXZhQ29kZVJlZmVyZW5jZUVsZW1lbnQ6UQorICAgICAgICAgICAgICAgICAgICBQc2lJZGVudGlmaWVyOlEoJ1EnKQorICAgICAgICAgICAgICAgICAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICAgICAgICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgICAgICAgICAgICBQc2lBbm5vdGF0aW9uUGFyYW1ldGVyTGlzdAorICAgICAgICAgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgICAgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgICAgICAgICAgICBQc2lJZGVudGlmaWVyOkMoJ0MnKQorICAgICAgICAgICAgICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgICAgICAgICAgICAgIFBzaUphdmFUb2tlbjpMVCgnPCcpCisgICAgICAgICAgICAgICAgICBQc2lUeXBlRWxlbWVudDpARiBDCisgICAgICAgICAgICAgICAgICAgIFBzaUFubm90YXRpb24KKyAgICAgICAgICAgICAgICAgICAgICBQc2lKYXZhVG9rZW46QVQoJ0AnKQorICAgICAgICAgICAgICAgICAgICAgIFBzaUphdmFDb2RlUmVmZXJlbmNlRWxlbWVudDpGCisgICAgICAgICAgICAgICAgICAgICAgICBQc2lJZGVudGlmaWVyOkYoJ0YnKQorICAgICAgICAgICAgICAgICAgICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgICBQc2lBbm5vdGF0aW9uUGFyYW1ldGVyTGlzdAorICAgICAgICAgICAgICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgICAgICAgICAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgICAgICAgICAgICAgICBQc2lKYXZhQ29kZVJlZmVyZW5jZUVsZW1lbnQ6QworICAgICAgICAgICAgICAgICAgICAgIFBzaUlkZW50aWZpZXI6QygnQycpCisgICAgICAgICAgICAgICAgICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICAgICAgICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgICAgICAgICAgICBQc2lKYXZhVG9rZW46R1QoJz4nKQorICAgICAgICAgICAgICBQc2lFeHByZXNzaW9uTGlzdAorICAgICAgICAgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgICAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgICAgICAgIFBzaUphdmFUb2tlbjpTRU1JQ09MT04oJzsnKQorICAgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAgICAnKQorICAgICAgICBQc2lFeHByZXNzaW9uU3RhdGVtZW50CisgICAgICAgICAgUHNpQXNzaWdubWVudEV4cHJlc3Npb246YyA9IChARiBPYmplY3QpYworICAgICAgICAgICAgUHNpUmVmZXJlbmNlRXhwcmVzc2lvbjpjCisgICAgICAgICAgICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgICAgICAgUHNpSWRlbnRpZmllcjpjKCdjJykKKyAgICAgICAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgICAgICAgUHNpSmF2YVRva2VuOkVRKCc9JykKKyAgICAgICAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgICAgICAgUHNpVHlwZUNhc3RFeHByZXNzaW9uOihARiBPYmplY3QpYworICAgICAgICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICAgICAgICBQc2lUeXBlRWxlbWVudDpARiBPYmplY3QKKyAgICAgICAgICAgICAgICBQc2lBbm5vdGF0aW9uCisgICAgICAgICAgICAgICAgICBQc2lKYXZhVG9rZW46QVQoJ0AnKQorICAgICAgICAgICAgICAgICAgUHNpSmF2YUNvZGVSZWZlcmVuY2VFbGVtZW50OkYKKyAgICAgICAgICAgICAgICAgICAgUHNpSWRlbnRpZmllcjpGKCdGJykKKyAgICAgICAgICAgICAgICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICAgICAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICAgICAgICAgICAgUHNpQW5ub3RhdGlvblBhcmFtZXRlckxpc3QKKyAgICAgICAgICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgICAgICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICAgICAgICAgICAgUHNpSmF2YUNvZGVSZWZlcmVuY2VFbGVtZW50Ok9iamVjdAorICAgICAgICAgICAgICAgICAgUHNpSWRlbnRpZmllcjpPYmplY3QoJ09iamVjdCcpCisgICAgICAgICAgICAgICAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICAgICAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgICAgICAgICBQc2lSZWZlcmVuY2VFeHByZXNzaW9uOmMKKyAgICAgICAgICAgICAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICAgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgICAgICAgICBQc2lJZGVudGlmaWVyOmMoJ2MnKQorICAgICAgICAgIFBzaUphdmFUb2tlbjpTRU1JQ09MT04oJzsnKQorICAgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAgICAnKQorICAgICAgICBQc2lEZWNsYXJhdGlvblN0YXRlbWVudAorICAgICAgICAgIFBzaUxvY2FsVmFyaWFibGU6YworICAgICAgICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgICAgIFBzaVR5cGVFbGVtZW50OkNsYXNzCisgICAgICAgICAgICAgIFBzaUphdmFDb2RlUmVmZXJlbmNlRWxlbWVudDpDbGFzcworICAgICAgICAgICAgICAgIFBzaUlkZW50aWZpZXI6Q2xhc3MoJ0NsYXNzJykKKyAgICAgICAgICAgICAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICAgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgICAgICAgUHNpSWRlbnRpZmllcjpjKCdjJykKKyAgICAgICAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgICAgICAgUHNpSmF2YVRva2VuOkVRKCc9JykKKyAgICAgICAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgICAgICAgUHNpQ2xhc3NPYmplY3RBY2Nlc3NFeHByZXNzaW9uOkBUQSBTdHJpbmcuY2xhc3MKKyAgICAgICAgICAgICAgUHNpVHlwZUVsZW1lbnQ6QFRBIFN0cmluZworICAgICAgICAgICAgICAgIFBzaUFubm90YXRpb24KKyAgICAgICAgICAgICAgICAgIFBzaUphdmFUb2tlbjpBVCgnQCcpCisgICAgICAgICAgICAgICAgICBQc2lKYXZhQ29kZVJlZmVyZW5jZUVsZW1lbnQ6VEEKKyAgICAgICAgICAgICAgICAgICAgUHNpSWRlbnRpZmllcjpUQSgnVEEnKQorICAgICAgICAgICAgICAgICAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICAgICAgICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgICAgICAgICAgICBQc2lBbm5vdGF0aW9uUGFyYW1ldGVyTGlzdAorICAgICAgICAgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgICAgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgICAgICAgICAgICBQc2lKYXZhQ29kZVJlZmVyZW5jZUVsZW1lbnQ6U3RyaW5nCisgICAgICAgICAgICAgICAgICBQc2lJZGVudGlmaWVyOlN0cmluZygnU3RyaW5nJykKKyAgICAgICAgICAgICAgICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgICAgICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgICAgICAgIFBzaUphdmFUb2tlbjpET1QoJy4nKQorICAgICAgICAgICAgICBQc2lLZXl3b3JkOmNsYXNzKCdjbGFzcycpCisgICAgICAgICAgICBQc2lKYXZhVG9rZW46U0VNSUNPTE9OKCc7JykKKyAgICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gICAgJykKKyAgICAgICAgUHNpRXhwcmVzc2lvblN0YXRlbWVudAorICAgICAgICAgIFBzaVBvc3RmaXhFeHByZXNzaW9uOkBGIEMuZmllbGQrKworICAgICAgICAgICAgUHNpUmVmZXJlbmNlRXhwcmVzc2lvbjpARiBDLmZpZWxkCisgICAgICAgICAgICAgIFBzaVJlZmVyZW5jZUV4cHJlc3Npb246QEYgQworICAgICAgICAgICAgICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgICAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICAgICAgICAgIFBzaUFubm90YXRpb24KKyAgICAgICAgICAgICAgICAgIFBzaUphdmFUb2tlbjpBVCgnQCcpCisgICAgICAgICAgICAgICAgICBQc2lKYXZhQ29kZVJlZmVyZW5jZUVsZW1lbnQ6RgorICAgICAgICAgICAgICAgICAgICBQc2lJZGVudGlmaWVyOkYoJ0YnKQorICAgICAgICAgICAgICAgICAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICAgICAgICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgICAgICAgICAgICBQc2lBbm5vdGF0aW9uUGFyYW1ldGVyTGlzdAorICAgICAgICAgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgICAgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgICAgICAgICAgICBQc2lJZGVudGlmaWVyOkMoJ0MnKQorICAgICAgICAgICAgICBQc2lKYXZhVG9rZW46RE9UKCcuJykKKyAgICAgICAgICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICAgICAgICBQc2lJZGVudGlmaWVyOmZpZWxkKCdmaWVsZCcpCisgICAgICAgICAgICBQc2lKYXZhVG9rZW46UExVU1BMVVMoJysrJykKKyAgICAgICAgICBQc2lKYXZhVG9rZW46U0VNSUNPTE9OKCc7JykKKyAgICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gICcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuJykKKyAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvYW5ub3RhdGlvblBhcnNpbmcvZGVjbGFyYXRpb24vRGVmYXVsdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9hbm5vdGF0aW9uUGFyc2luZy9kZWNsYXJhdGlvbi9EZWZhdWx0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTgzNzczNQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvYW5ub3RhdGlvblBhcnNpbmcvZGVjbGFyYXRpb24vRGVmYXVsdC5qYXZhCkBAIC0wLDAgKzEsMyBAQAorQGludGVyZmFjZSBBbm5vdGF0aW9uIHsKKyAgQ2xhc3MgZm9vICgpIGRlZmF1bHQgU3RyaW5nLmNsYXNzOworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvYW5ub3RhdGlvblBhcnNpbmcvZGVjbGFyYXRpb24vRGVmYXVsdC50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2Fubm90YXRpb25QYXJzaW5nL2RlY2xhcmF0aW9uL0RlZmF1bHQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEwY2FmOGYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2Fubm90YXRpb25QYXJzaW5nL2RlY2xhcmF0aW9uL0RlZmF1bHQudHh0CkBAIC0wLDAgKzEsNTEgQEAKK1BzaUphdmFGaWxlOkRlZmF1bHQuamF2YQorICBQc2lJbXBvcnRMaXN0CisgICAgPGVtcHR5IGxpc3Q+CisgIFBzaUNsYXNzOkFubm90YXRpb24KKyAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lKYXZhVG9rZW46QVQoJ0AnKQorICAgIFBzaUtleXdvcmQ6aW50ZXJmYWNlKCdpbnRlcmZhY2UnKQorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaUlkZW50aWZpZXI6QW5ub3RhdGlvbignQW5ub3RhdGlvbicpCisgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuICAnKQorICAgIFBzaUFubm90YXRpb25NZXRob2Q6Zm9vCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDpDbGFzcworICAgICAgICBQc2lKYXZhQ29kZVJlZmVyZW5jZUVsZW1lbnQ6Q2xhc3MKKyAgICAgICAgICBQc2lJZGVudGlmaWVyOkNsYXNzKCdDbGFzcycpCisgICAgICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lLZXl3b3JkOmRlZmF1bHQoJ2RlZmF1bHQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lDbGFzc09iamVjdEFjY2Vzc0V4cHJlc3Npb246U3RyaW5nLmNsYXNzCisgICAgICAgIFBzaVR5cGVFbGVtZW50OlN0cmluZworICAgICAgICAgIFBzaUphdmFDb2RlUmVmZXJlbmNlRWxlbWVudDpTdHJpbmcKKyAgICAgICAgICAgIFBzaUlkZW50aWZpZXI6U3RyaW5nKCdTdHJpbmcnKQorICAgICAgICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgUHNpSmF2YVRva2VuOkRPVCgnLicpCisgICAgICAgIFBzaUtleXdvcmQ6Y2xhc3MoJ2NsYXNzJykKKyAgICAgIFBzaUphdmFUb2tlbjpTRU1JQ09MT04oJzsnKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuJykKKyAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2Fubm90YXRpb25QYXJzaW5nL2RlY2xhcmF0aW9uL0lubmVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2Fubm90YXRpb25QYXJzaW5nL2RlY2xhcmF0aW9uL0lubmVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzA4ODIxMgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvYW5ub3RhdGlvblBhcnNpbmcvZGVjbGFyYXRpb24vSW5uZXIuamF2YQpAQCAtMCwwICsxLDUgQEAKK2NsYXNzIEFubm90YXRpb24geworICBAaW50ZXJmYWNlIElubmVyIHsKKyAgICBkb3VibGUgYmFyICgpIGRlZmF1bHQgMC4wOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9hbm5vdGF0aW9uUGFyc2luZy9kZWNsYXJhdGlvbi9Jbm5lci50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2Fubm90YXRpb25QYXJzaW5nL2RlY2xhcmF0aW9uL0lubmVyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kODRjOGE3Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9hbm5vdGF0aW9uUGFyc2luZy9kZWNsYXJhdGlvbi9Jbm5lci50eHQKQEAgLTAsMCArMSw1OSBAQAorUHNpSmF2YUZpbGU6SW5uZXIuamF2YQorICBQc2lJbXBvcnRMaXN0CisgICAgPGVtcHR5IGxpc3Q+CisgIFBzaUNsYXNzOkFubm90YXRpb24KKyAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lLZXl3b3JkOmNsYXNzKCdjbGFzcycpCisgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgUHNpSWRlbnRpZmllcjpBbm5vdGF0aW9uKCdBbm5vdGF0aW9uJykKKyAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgUHNpV2hpdGVTcGFjZSgnXG4gICcpCisgICAgUHNpQ2xhc3M6SW5uZXIKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lKYXZhVG9rZW46QVQoJ0AnKQorICAgICAgUHNpS2V5d29yZDppbnRlcmZhY2UoJ2ludGVyZmFjZScpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6SW5uZXIoJ0lubmVyJykKKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gICAgJykKKyAgICAgIFBzaUFubm90YXRpb25NZXRob2Q6YmFyCisgICAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgUHNpVHlwZUVsZW1lbnQ6ZG91YmxlCisgICAgICAgICAgUHNpS2V5d29yZDpkb3VibGUoJ2RvdWJsZScpCisgICAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgICBQc2lJZGVudGlmaWVyOmJhcignYmFyJykKKyAgICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICAgIFBzaUtleXdvcmQ6ZGVmYXVsdCgnZGVmYXVsdCcpCisgICAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgICBQc2lMaXRlcmFsRXhwcmVzc2lvbjowLjAKKyAgICAgICAgICBQc2lKYXZhVG9rZW46RE9VQkxFX0xJVEVSQUwoJzAuMCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpTRU1JQ09MT04oJzsnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gICcpCisgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcbicpCisgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9hbm5vdGF0aW9uUGFyc2luZy9kZWNsYXJhdGlvbi9OZXN0ZWQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvYW5ub3RhdGlvblBhcnNpbmcvZGVjbGFyYXRpb24vTmVzdGVkLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2EwNjY3YwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvYW5ub3RhdGlvblBhcnNpbmcvZGVjbGFyYXRpb24vTmVzdGVkLmphdmEKQEAgLTAsMCArMSw3IEBACitAaW50ZXJmYWNlIEFubm90YXRpb24geworICBDbGFzcyBmb28gKCkgZGVmYXVsdCBTdHJpbmcuY2xhc3M7CisKKyAgQGludGVyZmFjZSBJbm5lciB7CisgICAgU3RyaW5nIGJhciAoKSBkZWZhdWx0ICI8dW5zcGVjaWZpZWQ+IjsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvYW5ub3RhdGlvblBhcnNpbmcvZGVjbGFyYXRpb24vTmVzdGVkLnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvYW5ub3RhdGlvblBhcnNpbmcvZGVjbGFyYXRpb24vTmVzdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMjAzMGVhCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9hbm5vdGF0aW9uUGFyc2luZy9kZWNsYXJhdGlvbi9OZXN0ZWQudHh0CkBAIC0wLDAgKzEsOTQgQEAKK1BzaUphdmFGaWxlOk5lc3RlZC5qYXZhCisgIFBzaUltcG9ydExpc3QKKyAgICA8ZW1wdHkgbGlzdD4KKyAgUHNpQ2xhc3M6QW5ub3RhdGlvbgorICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaUphdmFUb2tlbjpBVCgnQCcpCisgICAgUHNpS2V5d29yZDppbnRlcmZhY2UoJ2ludGVyZmFjZScpCisgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgUHNpSWRlbnRpZmllcjpBbm5vdGF0aW9uKCdBbm5vdGF0aW9uJykKKyAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgUHNpV2hpdGVTcGFjZSgnXG4gICcpCisgICAgUHNpQW5ub3RhdGlvbk1ldGhvZDpmb28KKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OkNsYXNzCisgICAgICAgIFBzaUphdmFDb2RlUmVmZXJlbmNlRWxlbWVudDpDbGFzcworICAgICAgICAgIFBzaUlkZW50aWZpZXI6Q2xhc3MoJ0NsYXNzJykKKyAgICAgICAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUtleXdvcmQ6ZGVmYXVsdCgnZGVmYXVsdCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUNsYXNzT2JqZWN0QWNjZXNzRXhwcmVzc2lvbjpTdHJpbmcuY2xhc3MKKyAgICAgICAgUHNpVHlwZUVsZW1lbnQ6U3RyaW5nCisgICAgICAgICAgUHNpSmF2YUNvZGVSZWZlcmVuY2VFbGVtZW50OlN0cmluZworICAgICAgICAgICAgUHNpSWRlbnRpZmllcjpTdHJpbmcoJ1N0cmluZycpCisgICAgICAgICAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICBQc2lKYXZhVG9rZW46RE9UKCcuJykKKyAgICAgICAgUHNpS2V5d29yZDpjbGFzcygnY2xhc3MnKQorICAgICAgUHNpSmF2YVRva2VuOlNFTUlDT0xPTignOycpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAgJykKKyAgICBQc2lDbGFzczpJbm5lcgorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUphdmFUb2tlbjpBVCgnQCcpCisgICAgICBQc2lLZXl3b3JkOmludGVyZmFjZSgnaW50ZXJmYWNlJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpJbm5lcignSW5uZXInKQorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAgICAnKQorICAgICAgUHNpQW5ub3RhdGlvbk1ldGhvZDpiYXIKKyAgICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICBQc2lUeXBlRWxlbWVudDpTdHJpbmcKKyAgICAgICAgICBQc2lKYXZhQ29kZVJlZmVyZW5jZUVsZW1lbnQ6U3RyaW5nCisgICAgICAgICAgICBQc2lJZGVudGlmaWVyOlN0cmluZygnU3RyaW5nJykKKyAgICAgICAgICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgICBQc2lJZGVudGlmaWVyOmJhcignYmFyJykKKyAgICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICAgIFBzaUtleXdvcmQ6ZGVmYXVsdCgnZGVmYXVsdCcpCisgICAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgICBQc2lMaXRlcmFsRXhwcmVzc2lvbjoiPHVuc3BlY2lmaWVkPiIKKyAgICAgICAgICBQc2lKYXZhVG9rZW46U1RSSU5HX0xJVEVSQUwoJyI8dW5zcGVjaWZpZWQ+IicpCisgICAgICAgIFBzaUphdmFUb2tlbjpTRU1JQ09MT04oJzsnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gICcpCisgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcbicpCisgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9hbm5vdGF0aW9uUGFyc2luZy9kZWNsYXJhdGlvbi9PdGhlck1lbWJlcnMuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvYW5ub3RhdGlvblBhcnNpbmcvZGVjbGFyYXRpb24vT3RoZXJNZW1iZXJzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjcyNzRiM2UKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2Fubm90YXRpb25QYXJzaW5nL2RlY2xhcmF0aW9uL090aGVyTWVtYmVycy5qYXZhCkBAIC0wLDAgKzEsNyBAQAorQGludGVyZmFjZSBBbm5vdGF0aW9uIHsKKyAgQ2xhc3MgZm9vICgpIGRlZmF1bHQgU3RyaW5nLmNsYXNzOworICBpbnQgZmllbGQ7CisgIHZvaWQgbSgpIHt9CisgIGNsYXNzIEMge30KKyAgaW50ZXJmYWNlIEkge30KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2Fubm90YXRpb25QYXJzaW5nL2RlY2xhcmF0aW9uL090aGVyTWVtYmVycy50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2Fubm90YXRpb25QYXJzaW5nL2RlY2xhcmF0aW9uL090aGVyTWVtYmVycy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTdkOWRkZAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvYW5ub3RhdGlvblBhcnNpbmcvZGVjbGFyYXRpb24vT3RoZXJNZW1iZXJzLnR4dApAQCAtMCwwICsxLDExMSBAQAorUHNpSmF2YUZpbGU6T3RoZXJNZW1iZXJzLmphdmEKKyAgUHNpSW1wb3J0TGlzdAorICAgIDxlbXB0eSBsaXN0PgorICBQc2lDbGFzczpBbm5vdGF0aW9uCisgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpSmF2YVRva2VuOkFUKCdAJykKKyAgICBQc2lLZXl3b3JkOmludGVyZmFjZSgnaW50ZXJmYWNlJykKKyAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICBQc2lJZGVudGlmaWVyOkFubm90YXRpb24oJ0Fubm90YXRpb24nKQorICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcbiAgJykKKyAgICBQc2lBbm5vdGF0aW9uTWV0aG9kOmZvbworICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6Q2xhc3MKKyAgICAgICAgUHNpSmF2YUNvZGVSZWZlcmVuY2VFbGVtZW50OkNsYXNzCisgICAgICAgICAgUHNpSWRlbnRpZmllcjpDbGFzcygnQ2xhc3MnKQorICAgICAgICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpS2V5d29yZDpkZWZhdWx0KCdkZWZhdWx0JykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpQ2xhc3NPYmplY3RBY2Nlc3NFeHByZXNzaW9uOlN0cmluZy5jbGFzcworICAgICAgICBQc2lUeXBlRWxlbWVudDpTdHJpbmcKKyAgICAgICAgICBQc2lKYXZhQ29kZVJlZmVyZW5jZUVsZW1lbnQ6U3RyaW5nCisgICAgICAgICAgICBQc2lJZGVudGlmaWVyOlN0cmluZygnU3RyaW5nJykKKyAgICAgICAgICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgIFBzaUphdmFUb2tlbjpET1QoJy4nKQorICAgICAgICBQc2lLZXl3b3JkOmNsYXNzKCdjbGFzcycpCisgICAgICBQc2lKYXZhVG9rZW46U0VNSUNPTE9OKCc7JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcbiAgJykKKyAgICBQc2lGaWVsZDpmaWVsZAorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OmludAorICAgICAgICBQc2lLZXl3b3JkOmludCgnaW50JykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmaWVsZCgnZmllbGQnKQorICAgICAgUHNpSmF2YVRva2VuOlNFTUlDT0xPTignOycpCisgICAgUHNpV2hpdGVTcGFjZSgnXG4gICcpCisgICAgUHNpQW5ub3RhdGlvbk1ldGhvZDptCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6bSgnbScpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuICAnKQorICAgIFBzaUNsYXNzOkMKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lLZXl3b3JkOmNsYXNzKCdjbGFzcycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6QygnQycpCisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuICAnKQorICAgIFBzaUNsYXNzOkkKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lLZXl3b3JkOmludGVyZmFjZSgnaW50ZXJmYWNlJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpJKCdJJykKKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG4nKQorICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvYW5ub3RhdGlvblBhcnNpbmcvZGVjbGFyYXRpb24vU2ltcGxlLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2Fubm90YXRpb25QYXJzaW5nL2RlY2xhcmF0aW9uL1NpbXBsZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFjMTY0OGUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2Fubm90YXRpb25QYXJzaW5nL2RlY2xhcmF0aW9uL1NpbXBsZS5qYXZhCkBAIC0wLDAgKzEsNSBAQAoraW1wb3J0IGphdmEudXRpbC4qOworCitwdWJsaWMgQGludGVyZmFjZSBBbm5vdGF0aW9uIHsKKyAgaW50IGZvbyAoKTsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2Fubm90YXRpb25QYXJzaW5nL2RlY2xhcmF0aW9uL1NpbXBsZS50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2Fubm90YXRpb25QYXJzaW5nL2RlY2xhcmF0aW9uL1NpbXBsZS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2Q4ODYyYQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvYW5ub3RhdGlvblBhcnNpbmcvZGVjbGFyYXRpb24vU2ltcGxlLnR4dApAQCAtMCwwICsxLDUzIEBACitQc2lKYXZhRmlsZTpTaW1wbGUuamF2YQorICBQc2lJbXBvcnRMaXN0CisgICAgUHNpSW1wb3J0U3RhdGVtZW50CisgICAgICBQc2lLZXl3b3JkOmltcG9ydCgnaW1wb3J0JykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSmF2YUNvZGVSZWZlcmVuY2VFbGVtZW50OmphdmEudXRpbAorICAgICAgICBQc2lKYXZhQ29kZVJlZmVyZW5jZUVsZW1lbnQ6amF2YQorICAgICAgICAgIFBzaUlkZW50aWZpZXI6amF2YSgnamF2YScpCisgICAgICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgIFBzaUphdmFUb2tlbjpET1QoJy4nKQorICAgICAgICBQc2lJZGVudGlmaWVyOnV0aWwoJ3V0aWwnKQorICAgICAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lKYXZhVG9rZW46RE9UKCcuJykKKyAgICAgIFBzaUphdmFUb2tlbjpBU1RFUklTSygnKicpCisgICAgICBQc2lKYXZhVG9rZW46U0VNSUNPTE9OKCc7JykKKyAgUHNpV2hpdGVTcGFjZSgnXG5cbicpCisgIFBzaUNsYXNzOkFubm90YXRpb24KKyAgICBQc2lNb2RpZmllckxpc3Q6cHVibGljCisgICAgICBQc2lLZXl3b3JkOnB1YmxpYygncHVibGljJykKKyAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICBQc2lKYXZhVG9rZW46QVQoJ0AnKQorICAgIFBzaUtleXdvcmQ6aW50ZXJmYWNlKCdpbnRlcmZhY2UnKQorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaUlkZW50aWZpZXI6QW5ub3RhdGlvbignQW5ub3RhdGlvbicpCisgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuICAnKQorICAgIFBzaUFubm90YXRpb25NZXRob2Q6Zm9vCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDppbnQKKyAgICAgICAgUHNpS2V5d29yZDppbnQoJ2ludCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpSmF2YVRva2VuOlNFTUlDT0xPTignOycpCisgICAgUHNpV2hpdGVTcGFjZSgnXG4nKQorICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvY29tbW9uUGFyc2luZy9JbXBvcnRMaXN0QnVnLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2NvbW1vblBhcnNpbmcvSW1wb3J0TGlzdEJ1Zy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc2YmYyODkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2NvbW1vblBhcnNpbmcvSW1wb3J0TGlzdEJ1Zy5qYXZhCkBAIC0wLDAgKzEsMiBAQAorLyoqLy8qKioqKiovY2xhc3MgQUNsYXNzeworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvY29tbW9uUGFyc2luZy9JbXBvcnRMaXN0QnVnLnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvY29tbW9uUGFyc2luZy9JbXBvcnRMaXN0QnVnLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMThlOWEzCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9jb21tb25QYXJzaW5nL0ltcG9ydExpc3RCdWcudHh0CkBAIC0wLDAgKzEsMjIgQEAKK1BzaUphdmFGaWxlOkltcG9ydExpc3RCdWcuamF2YQorICBQc2lDb21tZW50KENfU1RZTEVfQ09NTUVOVCkoJy8qKi8nKQorICBQc2lJbXBvcnRMaXN0CisgICAgPGVtcHR5IGxpc3Q+CisgIFBzaUNsYXNzOkFDbGFzcworICAgIFBzaURvY0NvbW1lbnQKKyAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqKioqLycpCisgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpS2V5d29yZDpjbGFzcygnY2xhc3MnKQorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaUlkZW50aWZpZXI6QUNsYXNzKCdBQ2xhc3MnKQorICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcbicpCisgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2NvbW1vblBhcnNpbmcvSW5jb21wbGV0ZUNvZGVCbG9jay5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9jb21tb25QYXJzaW5nL0luY29tcGxldGVDb2RlQmxvY2suamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MDA2MWE4Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9jb21tb25QYXJzaW5nL0luY29tcGxldGVDb2RlQmxvY2suamF2YQpAQCAtMCwwICsxLDUgQEAKK2NsYXNzIEEgeworICAgIHZvaWQgbWV0aG9kKCkgeworICAgICAgICA8aWRlbnRpZmllcgorICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2NvbW1vblBhcnNpbmcvSW5jb21wbGV0ZUNvZGVCbG9jay50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2NvbW1vblBhcnNpbmcvSW5jb21wbGV0ZUNvZGVCbG9jay50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTRlNzM2OQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvY29tbW9uUGFyc2luZy9JbmNvbXBsZXRlQ29kZUJsb2NrLnR4dApAQCAtMCwwICsxLDQ5IEBACitQc2lKYXZhRmlsZTpJbmNvbXBsZXRlQ29kZUJsb2NrLmphdmEKKyAgUHNpSW1wb3J0TGlzdAorICAgIDxlbXB0eSBsaXN0PgorICBQc2lDbGFzczpBCisgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpS2V5d29yZDpjbGFzcygnY2xhc3MnKQorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaUlkZW50aWZpZXI6QSgnQScpCisgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuICAgICcpCisgICAgUHNpTWV0aG9kOm1ldGhvZAorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOm1ldGhvZCgnbWV0aG9kJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gICAgICAgICcpCisgICAgICAgIFBzaUVycm9yRWxlbWVudDpVbmV4cGVjdGVkIHRva2VuCisgICAgICAgICAgUHNpSmF2YVRva2VuOkxUKCc8JykKKyAgICAgICAgUHNpRXhwcmVzc2lvblN0YXRlbWVudAorICAgICAgICAgIFBzaVJlZmVyZW5jZUV4cHJlc3Npb246aWRlbnRpZmllcgorICAgICAgICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgICAgIFBzaUlkZW50aWZpZXI6aWRlbnRpZmllcignaWRlbnRpZmllcicpCisgICAgICAgICAgUHNpRXJyb3JFbGVtZW50Oic7JyBleHBlY3RlZAorICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICAgICcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuJykKKyAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvY29tbW9uUGFyc2luZy9JbmNvbXBsZXRlRm9yLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2NvbW1vblBhcnNpbmcvSW5jb21wbGV0ZUZvci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRhNDhkMWUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2NvbW1vblBhcnNpbmcvSW5jb21wbGV0ZUZvci5qYXZhCkBAIC0wLDAgKzEsMTIgQEAKK2ltcG9ydCBqYXZhLnV0aWwuKjsKKworY2xhc3MgQmFyR29vIHt9CisKK2NsYXNzIEZvbyB7CisgICAgeworICAgICAgICBMaXN0PEJhckdvbz4gZ29vczsKKyAgICAgICAgZm9yIChCYXJHb28gIDogZ29vcykgeworCit9CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvY29tbW9uUGFyc2luZy9JbmNvbXBsZXRlRm9yLnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvY29tbW9uUGFyc2luZy9JbmNvbXBsZXRlRm9yLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMjViMzcwCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9jb21tb25QYXJzaW5nL0luY29tcGxldGVGb3IudHh0CkBAIC0wLDAgKzEsMTAzIEBACitQc2lKYXZhRmlsZTpJbmNvbXBsZXRlRm9yLmphdmEKKyAgUHNpSW1wb3J0TGlzdAorICAgIFBzaUltcG9ydFN0YXRlbWVudAorICAgICAgUHNpS2V5d29yZDppbXBvcnQoJ2ltcG9ydCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUphdmFDb2RlUmVmZXJlbmNlRWxlbWVudDpqYXZhLnV0aWwKKyAgICAgICAgUHNpSmF2YUNvZGVSZWZlcmVuY2VFbGVtZW50OmphdmEKKyAgICAgICAgICBQc2lJZGVudGlmaWVyOmphdmEoJ2phdmEnKQorICAgICAgICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICBQc2lKYXZhVG9rZW46RE9UKCcuJykKKyAgICAgICAgUHNpSWRlbnRpZmllcjp1dGlsKCd1dGlsJykKKyAgICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpSmF2YVRva2VuOkRPVCgnLicpCisgICAgICBQc2lKYXZhVG9rZW46QVNURVJJU0soJyonKQorICAgICAgUHNpSmF2YVRva2VuOlNFTUlDT0xPTignOycpCisgIFBzaVdoaXRlU3BhY2UoJ1xuXG4nKQorICBQc2lDbGFzczpCYXJHb28KKyAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lLZXl3b3JkOmNsYXNzKCdjbGFzcycpCisgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgUHNpSWRlbnRpZmllcjpCYXJHb28oJ0JhckdvbycpCisgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICBQc2lXaGl0ZVNwYWNlKCdcblxuJykKKyAgUHNpQ2xhc3M6Rm9vCisgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpS2V5d29yZDpjbGFzcygnY2xhc3MnKQorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaUlkZW50aWZpZXI6Rm9vKCdGb28nKQorICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcbiAgICAnKQorICAgIFBzaUNsYXNzSW5pdGlhbGl6ZXIKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICAgICAgICAnKQorICAgICAgICBQc2lEZWNsYXJhdGlvblN0YXRlbWVudAorICAgICAgICAgIFBzaUxvY2FsVmFyaWFibGU6Z29vcworICAgICAgICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgICAgIFBzaVR5cGVFbGVtZW50Okxpc3Q8QmFyR29vPgorICAgICAgICAgICAgICBQc2lKYXZhQ29kZVJlZmVyZW5jZUVsZW1lbnQ6TGlzdDxCYXJHb28+CisgICAgICAgICAgICAgICAgUHNpSWRlbnRpZmllcjpMaXN0KCdMaXN0JykKKyAgICAgICAgICAgICAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICAgICAgICAgICAgICBQc2lKYXZhVG9rZW46TFQoJzwnKQorICAgICAgICAgICAgICAgICAgUHNpVHlwZUVsZW1lbnQ6QmFyR29vCisgICAgICAgICAgICAgICAgICAgIFBzaUphdmFDb2RlUmVmZXJlbmNlRWxlbWVudDpCYXJHb28KKyAgICAgICAgICAgICAgICAgICAgICBQc2lJZGVudGlmaWVyOkJhckdvbygnQmFyR29vJykKKyAgICAgICAgICAgICAgICAgICAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICAgICAgICAgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgICAgICAgICAgIFBzaUphdmFUb2tlbjpHVCgnPicpCisgICAgICAgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgICAgICAgIFBzaUlkZW50aWZpZXI6Z29vcygnZ29vcycpCisgICAgICAgICAgICBQc2lKYXZhVG9rZW46U0VNSUNPTE9OKCc7JykKKyAgICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gICAgICAgICcpCisgICAgICAgIFBzaUZvclN0YXRlbWVudAorICAgICAgICAgIFBzaUtleXdvcmQ6Zm9yKCdmb3InKQorICAgICAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgICAgUHNpTGFiZWxlZFN0YXRlbWVudAorICAgICAgICAgICAgUHNpSWRlbnRpZmllcjpCYXJHb28oJ0JhckdvbycpCisgICAgICAgICAgICBQc2lXaGl0ZVNwYWNlKCcgICcpCisgICAgICAgICAgICBQc2lKYXZhVG9rZW46Q09MT04oJzonKQorICAgICAgICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICAgICAgICBQc2lFeHByZXNzaW9uU3RhdGVtZW50CisgICAgICAgICAgICAgIFBzaVJlZmVyZW5jZUV4cHJlc3Npb246Z29vcworICAgICAgICAgICAgICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgICAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICAgICAgICAgIFBzaUlkZW50aWZpZXI6Z29vcygnZ29vcycpCisgICAgICAgICAgICAgIFBzaUVycm9yRWxlbWVudDonOycgZXhwZWN0ZWQKKyAgICAgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgICBQc2lFcnJvckVsZW1lbnQ6JzsnIGV4cGVjdGVkCisgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgICAgIFBzaUJsb2NrU3RhdGVtZW50CisgICAgICAgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgICAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4nKQorICAgICAgICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gICAgJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG4nKQorICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvY29tbW9uUGFyc2luZy9SZWZQYXJhbXNBZnRlckVycm9yLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2NvbW1vblBhcnNpbmcvUmVmUGFyYW1zQWZ0ZXJFcnJvci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkzMWQxMDEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2NvbW1vblBhcnNpbmcvUmVmUGFyYW1zQWZ0ZXJFcnJvci5qYXZhCkBAIC0wLDAgKzEsMyBAQAorY2xhc3MgQyB7CisgIEJDU1NDaGlsZC48ZXJyb3IgZGVzY3I9IiI+QkNTU0NTZXJ2aWNlQ2xhc3NSZWY8L2Vycm9yPiBmZCA9IG51bGw7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9jb21tb25QYXJzaW5nL1JlZlBhcmFtc0FmdGVyRXJyb3IudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9jb21tb25QYXJzaW5nL1JlZlBhcmFtc0FmdGVyRXJyb3IudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZkMzk0YWEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2NvbW1vblBhcnNpbmcvUmVmUGFyYW1zQWZ0ZXJFcnJvci50eHQKQEAgLTAsMCArMSwxMDAgQEAKK1BzaUphdmFGaWxlOlJlZlBhcmFtc0FmdGVyRXJyb3IuamF2YQorICBQc2lJbXBvcnRMaXN0CisgICAgPGVtcHR5IGxpc3Q+CisgIFBzaUNsYXNzOkMKKyAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lLZXl3b3JkOmNsYXNzKCdjbGFzcycpCisgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgUHNpSWRlbnRpZmllcjpDKCdDJykKKyAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgUHNpV2hpdGVTcGFjZSgnXG4gICcpCisgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpVHlwZUVsZW1lbnQ6QkNTU0NoaWxkLgorICAgICAgUHNpSmF2YUNvZGVSZWZlcmVuY2VFbGVtZW50OkJDU1NDaGlsZC4KKyAgICAgICAgUHNpSmF2YUNvZGVSZWZlcmVuY2VFbGVtZW50OkJDU1NDaGlsZAorICAgICAgICAgIFBzaUlkZW50aWZpZXI6QkNTU0NoaWxkKCdCQ1NTQ2hpbGQnKQorICAgICAgICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICBQc2lKYXZhVG9rZW46RE9UKCcuJykKKyAgICAgICAgUHNpRXJyb3JFbGVtZW50OklkZW50aWZpZXIgZXhwZWN0ZWQKKyAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaUVycm9yRWxlbWVudDpJZGVudGlmaWVyIGV4cGVjdGVkCisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lFcnJvckVsZW1lbnQ6VW5leHBlY3RlZCB0b2tlbgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgUHNpSmF2YVRva2VuOkxUKCc8JykKKyAgICAgICAgUHNpVHlwZVBhcmFtZXRlcjplcnJvcgorICAgICAgICAgIFBzaUlkZW50aWZpZXI6ZXJyb3IoJ2Vycm9yJykKKyAgICAgICAgICBQc2lFbGVtZW50KEVYVEVORFNfQk9VTkRfTElTVCkKKyAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICBQc2lFcnJvckVsZW1lbnQ6Jz4nIGV4cGVjdGVkLgorICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaVR5cGVFbGVtZW50OmRlc2NyCisgICAgICBQc2lKYXZhQ29kZVJlZmVyZW5jZUVsZW1lbnQ6ZGVzY3IKKyAgICAgICAgUHNpSWRlbnRpZmllcjpkZXNjcignZGVzY3InKQorICAgICAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpRXJyb3JFbGVtZW50OklkZW50aWZpZXIgZXhwZWN0ZWQKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaUVycm9yRWxlbWVudDpVbmV4cGVjdGVkIHRva2VuCisgICAgICBQc2lKYXZhVG9rZW46RVEoJz0nKQorICAgICAgUHNpSmF2YVRva2VuOlNUUklOR19MSVRFUkFMKCciIicpCisgICAgICBQc2lKYXZhVG9rZW46R1QoJz4nKQorICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVR5cGVFbGVtZW50OkJDU1NDU2VydmljZUNsYXNzUmVmPAorICAgICAgUHNpSmF2YUNvZGVSZWZlcmVuY2VFbGVtZW50OkJDU1NDU2VydmljZUNsYXNzUmVmPAorICAgICAgICBQc2lJZGVudGlmaWVyOkJDU1NDU2VydmljZUNsYXNzUmVmKCdCQ1NTQ1NlcnZpY2VDbGFzc1JlZicpCisgICAgICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgICAgICBQc2lKYXZhVG9rZW46TFQoJzwnKQorICAgICAgICAgIFBzaUVycm9yRWxlbWVudDpJZGVudGlmaWVyIGV4cGVjdGVkCisgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgICBQc2lFcnJvckVsZW1lbnQ6Jz4nIG9yICcsJyBleHBlY3RlZC4KKyAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaUVycm9yRWxlbWVudDpJZGVudGlmaWVyIGV4cGVjdGVkCisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lFcnJvckVsZW1lbnQ6VW5leHBlY3RlZCB0b2tlbgorICAgICAgUHNpSmF2YVRva2VuOkRJVignLycpCisgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpVHlwZUVsZW1lbnQ6ZXJyb3IKKyAgICAgIFBzaUphdmFDb2RlUmVmZXJlbmNlRWxlbWVudDplcnJvcgorICAgICAgICBQc2lJZGVudGlmaWVyOmVycm9yKCdlcnJvcicpCisgICAgICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lFcnJvckVsZW1lbnQ6SWRlbnRpZmllciBleHBlY3RlZAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpRXJyb3JFbGVtZW50OlVuZXhwZWN0ZWQgdG9rZW4KKyAgICAgIFBzaUphdmFUb2tlbjpHVCgnPicpCisgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpVHlwZUVsZW1lbnQ6ZmQKKyAgICAgIFBzaUphdmFDb2RlUmVmZXJlbmNlRWxlbWVudDpmZAorICAgICAgICBQc2lJZGVudGlmaWVyOmZkKCdmZCcpCisgICAgICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lFcnJvckVsZW1lbnQ6SWRlbnRpZmllciBleHBlY3RlZAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgUHNpRXJyb3JFbGVtZW50OlVuZXhwZWN0ZWQgdG9rZW4KKyAgICAgIFBzaUphdmFUb2tlbjpFUSgnPScpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUphdmFUb2tlbjpOVUxMX0tFWVdPUkQoJ251bGwnKQorICAgIFBzaUphdmFUb2tlbjpTRU1JQ09MT04oJzsnKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuJykKKyAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2NvbW1vblBhcnNpbmcvU0NSNTIwMi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9jb21tb25QYXJzaW5nL1NDUjUyMDIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZDk5YmI1Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9jb21tb25QYXJzaW5nL1NDUjUyMDIuamF2YQpAQCAtMCwwICsxLDYgQEAKK2NsYXNzIEZyZWV6ZVRlc3QgeworCXZvaWQgdGVzdCgpIHsKKwkJU3RyaW5nLmNsYXNzLgorCQlTdHJpbmdbXSBzdHJpbmdzOworCX0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvY29tbW9uUGFyc2luZy9TQ1I1MjAyLnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvY29tbW9uUGFyc2luZy9TQ1I1MjAyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMzRkMmE3Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9jb21tb25QYXJzaW5nL1NDUjUyMDIudHh0CkBAIC0wLDAgKzEsNjkgQEAKK1BzaUphdmFGaWxlOlNDUjUyMDIuamF2YQorICBQc2lJbXBvcnRMaXN0CisgICAgPGVtcHR5IGxpc3Q+CisgIFBzaUNsYXNzOkZyZWV6ZVRlc3QKKyAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lLZXl3b3JkOmNsYXNzKCdjbGFzcycpCisgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgUHNpSWRlbnRpZmllcjpGcmVlemVUZXN0KCdGcmVlemVUZXN0JykKKyAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cdCcpCisgICAgUHNpTWV0aG9kOnRlc3QKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjp0ZXN0KCd0ZXN0JykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpV2hpdGVTcGFjZSgnXG5cdFx0JykKKyAgICAgICAgUHNpRXhwcmVzc2lvblN0YXRlbWVudAorICAgICAgICAgIFBzaVJlZmVyZW5jZUV4cHJlc3Npb246U3RyaW5nLmNsYXNzLgorCQlTdHJpbmcKKyAgICAgICAgICAgIFBzaUNsYXNzT2JqZWN0QWNjZXNzRXhwcmVzc2lvbjpTdHJpbmcuY2xhc3MKKyAgICAgICAgICAgICAgUHNpVHlwZUVsZW1lbnQ6U3RyaW5nCisgICAgICAgICAgICAgICAgUHNpSmF2YUNvZGVSZWZlcmVuY2VFbGVtZW50OlN0cmluZworICAgICAgICAgICAgICAgICAgUHNpSWRlbnRpZmllcjpTdHJpbmcoJ1N0cmluZycpCisgICAgICAgICAgICAgICAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICAgICAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICAgICAgICBQc2lKYXZhVG9rZW46RE9UKCcuJykKKyAgICAgICAgICAgICAgUHNpS2V5d29yZDpjbGFzcygnY2xhc3MnKQorICAgICAgICAgICAgUHNpSmF2YVRva2VuOkRPVCgnLicpCisgICAgICAgICAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICAgICAgUHNpV2hpdGVTcGFjZSgnXG5cdFx0JykKKyAgICAgICAgICAgIFBzaUlkZW50aWZpZXI6U3RyaW5nKCdTdHJpbmcnKQorICAgICAgICAgIFBzaUVycm9yRWxlbWVudDonOycgZXhwZWN0ZWQKKyAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICBQc2lFcnJvckVsZW1lbnQ6VW5leHBlY3RlZCB0b2tlbgorICAgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0tFVCgnWycpCisgICAgICAgIFBzaUVycm9yRWxlbWVudDpVbmV4cGVjdGVkIHRva2VuCisgICAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDS0VUKCddJykKKyAgICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICAgIFBzaUV4cHJlc3Npb25TdGF0ZW1lbnQKKyAgICAgICAgICBQc2lSZWZlcmVuY2VFeHByZXNzaW9uOnN0cmluZ3MKKyAgICAgICAgICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgICAgICBQc2lJZGVudGlmaWVyOnN0cmluZ3MoJ3N0cmluZ3MnKQorICAgICAgICAgIFBzaUphdmFUb2tlbjpTRU1JQ09MT04oJzsnKQorICAgICAgICBQc2lXaGl0ZVNwYWNlKCdcblx0JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG4nKQorICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvY29tbW9uUGFyc2luZy9VbmNsb3NlZENvbW1lbnQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvY29tbW9uUGFyc2luZy9VbmNsb3NlZENvbW1lbnQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MzE0MWI5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9jb21tb25QYXJzaW5nL1VuY2xvc2VkQ29tbWVudC5qYXZhCkBAIC0wLDAgKzEsNyBAQAorLy8gdW5jbG9zZWQgY29tbWVudAorLyoKKworaW1wb3J0IGphdmEuaW8uKjsKKworY2xhc3MgYSB7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9jb21tb25QYXJzaW5nL1VuY2xvc2VkQ29tbWVudC50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2NvbW1vblBhcnNpbmcvVW5jbG9zZWRDb21tZW50LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMjk2ZDhlCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9jb21tb25QYXJzaW5nL1VuY2xvc2VkQ29tbWVudC50eHQKQEAgLTAsMCArMSw2IEBACitQc2lKYXZhRmlsZTpVbmNsb3NlZENvbW1lbnQuamF2YQorICBQc2lDb21tZW50KEVORF9PRl9MSU5FX0NPTU1FTlQpKCcvLyB1bmNsb3NlZCBjb21tZW50JykKKyAgUHNpV2hpdGVTcGFjZSgnXG4nKQorICBQc2lDb21tZW50KENfU1RZTEVfQ09NTUVOVCkoJy8qXG5cbmltcG9ydCBqYXZhLmlvLio7XG5cbmNsYXNzIGEge1xufScpCisgIFBzaUltcG9ydExpc3QKKyAgICA8ZW1wdHkgbGlzdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2RlY2xhcmF0aW9uUGFyc2luZy9jbGFzcy9FbXB0eUltcG9ydExpc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZGVjbGFyYXRpb25QYXJzaW5nL2NsYXNzL0VtcHR5SW1wb3J0TGlzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM0YWZhYmMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2RlY2xhcmF0aW9uUGFyc2luZy9jbGFzcy9FbXB0eUltcG9ydExpc3QuamF2YQpAQCAtMCwwICsxLDQgQEAKKy8qKgorKi8KK3B1YmxpYyBhYnN0cmFjdCBjbGFzcyBUZXN0IHsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2RlY2xhcmF0aW9uUGFyc2luZy9jbGFzcy9FbXB0eUltcG9ydExpc3QudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9kZWNsYXJhdGlvblBhcnNpbmcvY2xhc3MvRW1wdHlJbXBvcnRMaXN0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYmQyMjM5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9kZWNsYXJhdGlvblBhcnNpbmcvY2xhc3MvRW1wdHlJbXBvcnRMaXN0LnR4dApAQCAtMCwwICsxLDI3IEBACitQc2lKYXZhRmlsZTpFbXB0eUltcG9ydExpc3QuamF2YQorICBQc2lJbXBvcnRMaXN0CisgICAgPGVtcHR5IGxpc3Q+CisgIFBzaUNsYXNzOlRlc3QKKyAgICBQc2lEb2NDb21tZW50CisgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuJykKKyAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuJykKKyAgICBQc2lNb2RpZmllckxpc3Q6cHVibGljIGFic3RyYWN0CisgICAgICBQc2lLZXl3b3JkOnB1YmxpYygncHVibGljJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpS2V5d29yZDphYnN0cmFjdCgnYWJzdHJhY3QnKQorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaUtleXdvcmQ6Y2xhc3MoJ2NsYXNzJykKKyAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICBQc2lJZGVudGlmaWVyOlRlc3QoJ1Rlc3QnKQorICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcbicpCisgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9kZWNsYXJhdGlvblBhcnNpbmcvY2xhc3MvRW51bTEuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZGVjbGFyYXRpb25QYXJzaW5nL2NsYXNzL0VudW0xLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjFiMTExOAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZGVjbGFyYXRpb25QYXJzaW5nL2NsYXNzL0VudW0xLmphdmEKQEAgLTAsMCArMSwyIEBACitwdWJsaWMgZW51bSBPdXJFbnVtIHsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2RlY2xhcmF0aW9uUGFyc2luZy9jbGFzcy9FbnVtMS50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2RlY2xhcmF0aW9uUGFyc2luZy9jbGFzcy9FbnVtMS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGQxZWQyYwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZGVjbGFyYXRpb25QYXJzaW5nL2NsYXNzL0VudW0xLnR4dApAQCAtMCwwICsxLDIwIEBACitQc2lKYXZhRmlsZTpFbnVtMS5qYXZhCisgIFBzaUltcG9ydExpc3QKKyAgICA8ZW1wdHkgbGlzdD4KKyAgUHNpQ2xhc3M6T3VyRW51bQorICAgIFBzaU1vZGlmaWVyTGlzdDpwdWJsaWMKKyAgICAgIFBzaUtleXdvcmQ6cHVibGljKCdwdWJsaWMnKQorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaUtleXdvcmQ6ZW51bSgnZW51bScpCisgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgUHNpSWRlbnRpZmllcjpPdXJFbnVtKCdPdXJFbnVtJykKKyAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgUHNpV2hpdGVTcGFjZSgnXG4nKQorICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZGVjbGFyYXRpb25QYXJzaW5nL2NsYXNzL0VudW0yLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2RlY2xhcmF0aW9uUGFyc2luZy9jbGFzcy9FbnVtMi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE5MjczZTkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2RlY2xhcmF0aW9uUGFyc2luZy9jbGFzcy9FbnVtMi5qYXZhCkBAIC0wLDAgKzEsMiBAQAorZW51bSBPdXJFbnVtIHsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2RlY2xhcmF0aW9uUGFyc2luZy9jbGFzcy9FbnVtMi50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2RlY2xhcmF0aW9uUGFyc2luZy9jbGFzcy9FbnVtMi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWYyMzg3NgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZGVjbGFyYXRpb25QYXJzaW5nL2NsYXNzL0VudW0yLnR4dApAQCAtMCwwICsxLDE5IEBACitQc2lKYXZhRmlsZTpFbnVtMi5qYXZhCisgIFBzaUltcG9ydExpc3QKKyAgICA8ZW1wdHkgbGlzdD4KKyAgUHNpQ2xhc3M6T3VyRW51bQorICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaUtleXdvcmQ6ZW51bSgnZW51bScpCisgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgUHNpSWRlbnRpZmllcjpPdXJFbnVtKCdPdXJFbnVtJykKKyAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgUHNpV2hpdGVTcGFjZSgnXG4nKQorICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZGVjbGFyYXRpb25QYXJzaW5nL2NsYXNzL0VudW1XaXRoQW5ub3RhdGVkQ29uc3RhbnRzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2RlY2xhcmF0aW9uUGFyc2luZy9jbGFzcy9FbnVtV2l0aEFubm90YXRlZENvbnN0YW50cy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlhYThlM2MKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2RlY2xhcmF0aW9uUGFyc2luZy9jbGFzcy9FbnVtV2l0aEFubm90YXRlZENvbnN0YW50cy5qYXZhCkBAIC0wLDAgKzEsMyBAQAorZW51bSBPdXJFbnVtIHsKKyAgQEFOTk9UQVRJT04gQSgxMCkKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2RlY2xhcmF0aW9uUGFyc2luZy9jbGFzcy9FbnVtV2l0aEFubm90YXRlZENvbnN0YW50cy50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2RlY2xhcmF0aW9uUGFyc2luZy9jbGFzcy9FbnVtV2l0aEFubm90YXRlZENvbnN0YW50cy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2Q2ZjQyZAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZGVjbGFyYXRpb25QYXJzaW5nL2NsYXNzL0VudW1XaXRoQW5ub3RhdGVkQ29uc3RhbnRzLnR4dApAQCAtMCwwICsxLDM3IEBACitQc2lKYXZhRmlsZTpFbnVtV2l0aEFubm90YXRlZENvbnN0YW50cy5qYXZhCisgIFBzaUltcG9ydExpc3QKKyAgICA8ZW1wdHkgbGlzdD4KKyAgUHNpQ2xhc3M6T3VyRW51bQorICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaUtleXdvcmQ6ZW51bSgnZW51bScpCisgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgUHNpSWRlbnRpZmllcjpPdXJFbnVtKCdPdXJFbnVtJykKKyAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgUHNpV2hpdGVTcGFjZSgnXG4gICcpCisgICAgUHNpRW51bUNvbnN0YW50OkEKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDpAQU5OT1RBVElPTgorICAgICAgICBQc2lBbm5vdGF0aW9uCisgICAgICAgICAgUHNpSmF2YVRva2VuOkFUKCdAJykKKyAgICAgICAgICBQc2lKYXZhQ29kZVJlZmVyZW5jZUVsZW1lbnQ6QU5OT1RBVElPTgorICAgICAgICAgICAgUHNpSWRlbnRpZmllcjpBTk5PVEFUSU9OKCdBTk5PVEFUSU9OJykKKyAgICAgICAgICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgICAgUHNpQW5ub3RhdGlvblBhcmFtZXRlckxpc3QKKyAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOkEoJ0EnKQorICAgICAgUHNpRXhwcmVzc2lvbkxpc3QKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpTGl0ZXJhbEV4cHJlc3Npb246MTAKKyAgICAgICAgICBQc2lKYXZhVG9rZW46SU5URUdFUl9MSVRFUkFMKCcxMCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG4nKQorICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZGVjbGFyYXRpb25QYXJzaW5nL2NsYXNzL0VudW1XaXRoQ29uc3RhbnRzMS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9kZWNsYXJhdGlvblBhcnNpbmcvY2xhc3MvRW51bVdpdGhDb25zdGFudHMxLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2ZjOTZmYwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZGVjbGFyYXRpb25QYXJzaW5nL2NsYXNzL0VudW1XaXRoQ29uc3RhbnRzMS5qYXZhCkBAIC0wLDAgKzEsMyBAQAorcHVibGljIGVudW0gT3VyRW51bSB7CisgIDsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2RlY2xhcmF0aW9uUGFyc2luZy9jbGFzcy9FbnVtV2l0aENvbnN0YW50czEudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9kZWNsYXJhdGlvblBhcnNpbmcvY2xhc3MvRW51bVdpdGhDb25zdGFudHMxLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZTljMmNkCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9kZWNsYXJhdGlvblBhcnNpbmcvY2xhc3MvRW51bVdpdGhDb25zdGFudHMxLnR4dApAQCAtMCwwICsxLDIyIEBACitQc2lKYXZhRmlsZTpFbnVtV2l0aENvbnN0YW50czEuamF2YQorICBQc2lJbXBvcnRMaXN0CisgICAgPGVtcHR5IGxpc3Q+CisgIFBzaUNsYXNzOk91ckVudW0KKyAgICBQc2lNb2RpZmllckxpc3Q6cHVibGljCisgICAgICBQc2lLZXl3b3JkOnB1YmxpYygncHVibGljJykKKyAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICBQc2lLZXl3b3JkOmVudW0oJ2VudW0nKQorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaUlkZW50aWZpZXI6T3VyRW51bSgnT3VyRW51bScpCisgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuICAnKQorICAgIFBzaUphdmFUb2tlbjpTRU1JQ09MT04oJzsnKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuJykKKyAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2RlY2xhcmF0aW9uUGFyc2luZy9jbGFzcy9FbnVtV2l0aENvbnN0YW50czIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZGVjbGFyYXRpb25QYXJzaW5nL2NsYXNzL0VudW1XaXRoQ29uc3RhbnRzMi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcxZWZjZDMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2RlY2xhcmF0aW9uUGFyc2luZy9jbGFzcy9FbnVtV2l0aENvbnN0YW50czIuamF2YQpAQCAtMCwwICsxLDMgQEAKK3B1YmxpYyBlbnVtIE91ckVudW0geworICBSRUQsIEdSRUVOLCBCTFVFOworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZGVjbGFyYXRpb25QYXJzaW5nL2NsYXNzL0VudW1XaXRoQ29uc3RhbnRzMi50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2RlY2xhcmF0aW9uUGFyc2luZy9jbGFzcy9FbnVtV2l0aENvbnN0YW50czIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZmYWE2MDQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2RlY2xhcmF0aW9uUGFyc2luZy9jbGFzcy9FbnVtV2l0aENvbnN0YW50czIudHh0CkBAIC0wLDAgKzEsNDQgQEAKK1BzaUphdmFGaWxlOkVudW1XaXRoQ29uc3RhbnRzMi5qYXZhCisgIFBzaUltcG9ydExpc3QKKyAgICA8ZW1wdHkgbGlzdD4KKyAgUHNpQ2xhc3M6T3VyRW51bQorICAgIFBzaU1vZGlmaWVyTGlzdDpwdWJsaWMKKyAgICAgIFBzaUtleXdvcmQ6cHVibGljKCdwdWJsaWMnKQorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaUtleXdvcmQ6ZW51bSgnZW51bScpCisgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgUHNpSWRlbnRpZmllcjpPdXJFbnVtKCdPdXJFbnVtJykKKyAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgUHNpV2hpdGVTcGFjZSgnXG4gICcpCisgICAgUHNpRW51bUNvbnN0YW50OlJFRAorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUlkZW50aWZpZXI6UkVEKCdSRUQnKQorICAgICAgUHNpRXhwcmVzc2lvbkxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpSmF2YVRva2VuOkNPTU1BKCcsJykKKyAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICBQc2lFbnVtQ29uc3RhbnQ6R1JFRU4KKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lJZGVudGlmaWVyOkdSRUVOKCdHUkVFTicpCisgICAgICBQc2lFeHByZXNzaW9uTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lKYXZhVG9rZW46Q09NTUEoJywnKQorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaUVudW1Db25zdGFudDpCTFVFCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpSWRlbnRpZmllcjpCTFVFKCdCTFVFJykKKyAgICAgIFBzaUV4cHJlc3Npb25MaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaUphdmFUb2tlbjpTRU1JQ09MT04oJzsnKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuJykKKyAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2RlY2xhcmF0aW9uUGFyc2luZy9jbGFzcy9FbnVtV2l0aENvbnN0YW50czMuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZGVjbGFyYXRpb25QYXJzaW5nL2NsYXNzL0VudW1XaXRoQ29uc3RhbnRzMy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE5NTJiMmQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2RlY2xhcmF0aW9uUGFyc2luZy9jbGFzcy9FbnVtV2l0aENvbnN0YW50czMuamF2YQpAQCAtMCwwICsxLDMgQEAKK3B1YmxpYyBlbnVtIE91ckVudW0geworICBSRUQsIEdSRUVOLCBCTFVFCit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9kZWNsYXJhdGlvblBhcnNpbmcvY2xhc3MvRW51bVdpdGhDb25zdGFudHMzLnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZGVjbGFyYXRpb25QYXJzaW5nL2NsYXNzL0VudW1XaXRoQ29uc3RhbnRzMy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGNkYTA1OAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZGVjbGFyYXRpb25QYXJzaW5nL2NsYXNzL0VudW1XaXRoQ29uc3RhbnRzMy50eHQKQEAgLTAsMCArMSw0MyBAQAorUHNpSmF2YUZpbGU6RW51bVdpdGhDb25zdGFudHMzLmphdmEKKyAgUHNpSW1wb3J0TGlzdAorICAgIDxlbXB0eSBsaXN0PgorICBQc2lDbGFzczpPdXJFbnVtCisgICAgUHNpTW9kaWZpZXJMaXN0OnB1YmxpYworICAgICAgUHNpS2V5d29yZDpwdWJsaWMoJ3B1YmxpYycpCisgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgUHNpS2V5d29yZDplbnVtKCdlbnVtJykKKyAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICBQc2lJZGVudGlmaWVyOk91ckVudW0oJ091ckVudW0nKQorICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcbiAgJykKKyAgICBQc2lFbnVtQ29uc3RhbnQ6UkVECisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpSWRlbnRpZmllcjpSRUQoJ1JFRCcpCisgICAgICBQc2lFeHByZXNzaW9uTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lKYXZhVG9rZW46Q09NTUEoJywnKQorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaUVudW1Db25zdGFudDpHUkVFTgorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUlkZW50aWZpZXI6R1JFRU4oJ0dSRUVOJykKKyAgICAgIFBzaUV4cHJlc3Npb25MaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaUphdmFUb2tlbjpDT01NQSgnLCcpCisgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgUHNpRW51bUNvbnN0YW50OkJMVUUKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lJZGVudGlmaWVyOkJMVUUoJ0JMVUUnKQorICAgICAgUHNpRXhwcmVzc2lvbkxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpV2hpdGVTcGFjZSgnXG4nKQorICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZGVjbGFyYXRpb25QYXJzaW5nL2NsYXNzL0VudW1XaXRoQ29uc3RhbnRzNC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9kZWNsYXJhdGlvblBhcnNpbmcvY2xhc3MvRW51bVdpdGhDb25zdGFudHM0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzY3ZDM1ZAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZGVjbGFyYXRpb25QYXJzaW5nL2NsYXNzL0VudW1XaXRoQ29uc3RhbnRzNC5qYXZhCkBAIC0wLDAgKzEsMyBAQAorcHVibGljIGVudW0gT3VyRW51bSB7CisgIFJFRCwgR1JFRU4sIEJMVUUsCit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9kZWNsYXJhdGlvblBhcnNpbmcvY2xhc3MvRW51bVdpdGhDb25zdGFudHM0LnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZGVjbGFyYXRpb25QYXJzaW5nL2NsYXNzL0VudW1XaXRoQ29uc3RhbnRzNC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTMzOGY5NgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZGVjbGFyYXRpb25QYXJzaW5nL2NsYXNzL0VudW1XaXRoQ29uc3RhbnRzNC50eHQKQEAgLTAsMCArMSw0NCBAQAorUHNpSmF2YUZpbGU6RW51bVdpdGhDb25zdGFudHM0LmphdmEKKyAgUHNpSW1wb3J0TGlzdAorICAgIDxlbXB0eSBsaXN0PgorICBQc2lDbGFzczpPdXJFbnVtCisgICAgUHNpTW9kaWZpZXJMaXN0OnB1YmxpYworICAgICAgUHNpS2V5d29yZDpwdWJsaWMoJ3B1YmxpYycpCisgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgUHNpS2V5d29yZDplbnVtKCdlbnVtJykKKyAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICBQc2lJZGVudGlmaWVyOk91ckVudW0oJ091ckVudW0nKQorICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcbiAgJykKKyAgICBQc2lFbnVtQ29uc3RhbnQ6UkVECisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpSWRlbnRpZmllcjpSRUQoJ1JFRCcpCisgICAgICBQc2lFeHByZXNzaW9uTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lKYXZhVG9rZW46Q09NTUEoJywnKQorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaUVudW1Db25zdGFudDpHUkVFTgorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUlkZW50aWZpZXI6R1JFRU4oJ0dSRUVOJykKKyAgICAgIFBzaUV4cHJlc3Npb25MaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaUphdmFUb2tlbjpDT01NQSgnLCcpCisgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgUHNpRW51bUNvbnN0YW50OkJMVUUKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lJZGVudGlmaWVyOkJMVUUoJ0JMVUUnKQorICAgICAgUHNpRXhwcmVzc2lvbkxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpSmF2YVRva2VuOkNPTU1BKCcsJykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcbicpCisgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9kZWNsYXJhdGlvblBhcnNpbmcvY2xhc3MvRW51bVdpdGhDb25zdGFudHM1LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2RlY2xhcmF0aW9uUGFyc2luZy9jbGFzcy9FbnVtV2l0aENvbnN0YW50czUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mN2IwYzIyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9kZWNsYXJhdGlvblBhcnNpbmcvY2xhc3MvRW51bVdpdGhDb25zdGFudHM1LmphdmEKQEAgLTAsMCArMSw2IEBACitwdWJsaWMgZW51bSBPdXJFbnVtIHsKKyAgUkVELCBHUkVFTiwgQkxVRQorCisgIE91ckVudW0oKSB7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2RlY2xhcmF0aW9uUGFyc2luZy9jbGFzcy9FbnVtV2l0aENvbnN0YW50czUudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9kZWNsYXJhdGlvblBhcnNpbmcvY2xhc3MvRW51bVdpdGhDb25zdGFudHM1LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNjEyNTAwCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9kZWNsYXJhdGlvblBhcnNpbmcvY2xhc3MvRW51bVdpdGhDb25zdGFudHM1LnR4dApAQCAtMCwwICsxLDYyIEBACitQc2lKYXZhRmlsZTpFbnVtV2l0aENvbnN0YW50czUuamF2YQorICBQc2lJbXBvcnRMaXN0CisgICAgPGVtcHR5IGxpc3Q+CisgIFBzaUNsYXNzOk91ckVudW0KKyAgICBQc2lNb2RpZmllckxpc3Q6cHVibGljCisgICAgICBQc2lLZXl3b3JkOnB1YmxpYygncHVibGljJykKKyAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICBQc2lLZXl3b3JkOmVudW0oJ2VudW0nKQorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaUlkZW50aWZpZXI6T3VyRW51bSgnT3VyRW51bScpCisgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuICAnKQorICAgIFBzaUVudW1Db25zdGFudDpSRUQKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lJZGVudGlmaWVyOlJFRCgnUkVEJykKKyAgICAgIFBzaUV4cHJlc3Npb25MaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaUphdmFUb2tlbjpDT01NQSgnLCcpCisgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgUHNpRW51bUNvbnN0YW50OkdSRUVOCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpSWRlbnRpZmllcjpHUkVFTignR1JFRU4nKQorICAgICAgUHNpRXhwcmVzc2lvbkxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpSmF2YVRva2VuOkNPTU1BKCcsJykKKyAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICBQc2lFbnVtQ29uc3RhbnQ6QkxVRQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUlkZW50aWZpZXI6QkxVRSgnQkxVRScpCisgICAgICBQc2lFeHByZXNzaW9uTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lFcnJvckVsZW1lbnQ6JywnIG9yICc7JyBleHBlY3RlZAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAgJykKKyAgICBQc2lNZXRob2Q6T3VyRW51bQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpSWRlbnRpZmllcjpPdXJFbnVtKCdPdXJFbnVtJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gICcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuJykKKyAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2RlY2xhcmF0aW9uUGFyc2luZy9jbGFzcy9FbnVtV2l0aENvbnN0YW50czYuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZGVjbGFyYXRpb25QYXJzaW5nL2NsYXNzL0VudW1XaXRoQ29uc3RhbnRzNi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJkZDBjMmMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2RlY2xhcmF0aW9uUGFyc2luZy9jbGFzcy9FbnVtV2l0aENvbnN0YW50czYuamF2YQpAQCAtMCwwICsxLDMgQEAKK3B1YmxpYyBlbnVtIE91ckVudW0geworICBSRUQoMCksIEdSRUVOKDEpLCBCTFVFKDIpOworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZGVjbGFyYXRpb25QYXJzaW5nL2NsYXNzL0VudW1XaXRoQ29uc3RhbnRzNi50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2RlY2xhcmF0aW9uUGFyc2luZy9jbGFzcy9FbnVtV2l0aENvbnN0YW50czYudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRmODRlZjMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2RlY2xhcmF0aW9uUGFyc2luZy9jbGFzcy9FbnVtV2l0aENvbnN0YW50czYudHh0CkBAIC0wLDAgKzEsNTMgQEAKK1BzaUphdmFGaWxlOkVudW1XaXRoQ29uc3RhbnRzNi5qYXZhCisgIFBzaUltcG9ydExpc3QKKyAgICA8ZW1wdHkgbGlzdD4KKyAgUHNpQ2xhc3M6T3VyRW51bQorICAgIFBzaU1vZGlmaWVyTGlzdDpwdWJsaWMKKyAgICAgIFBzaUtleXdvcmQ6cHVibGljKCdwdWJsaWMnKQorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaUtleXdvcmQ6ZW51bSgnZW51bScpCisgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgUHNpSWRlbnRpZmllcjpPdXJFbnVtKCdPdXJFbnVtJykKKyAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgUHNpV2hpdGVTcGFjZSgnXG4gICcpCisgICAgUHNpRW51bUNvbnN0YW50OlJFRAorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUlkZW50aWZpZXI6UkVEKCdSRUQnKQorICAgICAgUHNpRXhwcmVzc2lvbkxpc3QKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpTGl0ZXJhbEV4cHJlc3Npb246MAorICAgICAgICAgIFBzaUphdmFUb2tlbjpJTlRFR0VSX0xJVEVSQUwoJzAnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgIFBzaUphdmFUb2tlbjpDT01NQSgnLCcpCisgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgUHNpRW51bUNvbnN0YW50OkdSRUVOCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpSWRlbnRpZmllcjpHUkVFTignR1JFRU4nKQorICAgICAgUHNpRXhwcmVzc2lvbkxpc3QKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpTGl0ZXJhbEV4cHJlc3Npb246MQorICAgICAgICAgIFBzaUphdmFUb2tlbjpJTlRFR0VSX0xJVEVSQUwoJzEnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgIFBzaUphdmFUb2tlbjpDT01NQSgnLCcpCisgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgUHNpRW51bUNvbnN0YW50OkJMVUUKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lJZGVudGlmaWVyOkJMVUUoJ0JMVUUnKQorICAgICAgUHNpRXhwcmVzc2lvbkxpc3QKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpTGl0ZXJhbEV4cHJlc3Npb246MgorICAgICAgICAgIFBzaUphdmFUb2tlbjpJTlRFR0VSX0xJVEVSQUwoJzInKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgIFBzaUphdmFUb2tlbjpTRU1JQ09MT04oJzsnKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuJykKKyAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2RlY2xhcmF0aW9uUGFyc2luZy9jbGFzcy9FbnVtV2l0aEltcG9ydC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9kZWNsYXJhdGlvblBhcnNpbmcvY2xhc3MvRW51bVdpdGhJbXBvcnQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZmM5NmZjCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9kZWNsYXJhdGlvblBhcnNpbmcvY2xhc3MvRW51bVdpdGhJbXBvcnQuamF2YQpAQCAtMCwwICsxLDMgQEAKK3B1YmxpYyBlbnVtIE91ckVudW0geworICA7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9kZWNsYXJhdGlvblBhcnNpbmcvY2xhc3MvRW51bVdpdGhJbXBvcnQudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9kZWNsYXJhdGlvblBhcnNpbmcvY2xhc3MvRW51bVdpdGhJbXBvcnQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRmZjhhMWQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2RlY2xhcmF0aW9uUGFyc2luZy9jbGFzcy9FbnVtV2l0aEltcG9ydC50eHQKQEAgLTAsMCArMSwyMiBAQAorUHNpSmF2YUZpbGU6RW51bVdpdGhJbXBvcnQuamF2YQorICBQc2lJbXBvcnRMaXN0CisgICAgPGVtcHR5IGxpc3Q+CisgIFBzaUNsYXNzOk91ckVudW0KKyAgICBQc2lNb2RpZmllckxpc3Q6cHVibGljCisgICAgICBQc2lLZXl3b3JkOnB1YmxpYygncHVibGljJykKKyAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICBQc2lLZXl3b3JkOmVudW0oJ2VudW0nKQorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaUlkZW50aWZpZXI6T3VyRW51bSgnT3VyRW51bScpCisgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuICAnKQorICAgIFBzaUphdmFUb2tlbjpTRU1JQ09MT04oJzsnKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuJykKKyAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2RlY2xhcmF0aW9uUGFyc2luZy9jbGFzcy9FbnVtV2l0aEluaXRpYWxpemVkQ29uc3RhbnRzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2RlY2xhcmF0aW9uUGFyc2luZy9jbGFzcy9FbnVtV2l0aEluaXRpYWxpemVkQ29uc3RhbnRzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGE4ZDA3YQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZGVjbGFyYXRpb25QYXJzaW5nL2NsYXNzL0VudW1XaXRoSW5pdGlhbGl6ZWRDb25zdGFudHMuamF2YQpAQCAtMCwwICsxLDYgQEAKK2VudW0gT3VyRW51bSB7CisgIEEoMTApIHsgfSwKKyAgQiB7CisgICAgdm9pZCBtZXRob2QoKSB7fQorICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9kZWNsYXJhdGlvblBhcnNpbmcvY2xhc3MvRW51bVdpdGhJbml0aWFsaXplZENvbnN0YW50cy50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2RlY2xhcmF0aW9uUGFyc2luZy9jbGFzcy9FbnVtV2l0aEluaXRpYWxpemVkQ29uc3RhbnRzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NTNmNGMyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9kZWNsYXJhdGlvblBhcnNpbmcvY2xhc3MvRW51bVdpdGhJbml0aWFsaXplZENvbnN0YW50cy50eHQKQEAgLTAsMCArMSw2NiBAQAorUHNpSmF2YUZpbGU6RW51bVdpdGhJbml0aWFsaXplZENvbnN0YW50cy5qYXZhCisgIFBzaUltcG9ydExpc3QKKyAgICA8ZW1wdHkgbGlzdD4KKyAgUHNpQ2xhc3M6T3VyRW51bQorICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaUtleXdvcmQ6ZW51bSgnZW51bScpCisgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgUHNpSWRlbnRpZmllcjpPdXJFbnVtKCdPdXJFbnVtJykKKyAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgUHNpV2hpdGVTcGFjZSgnXG4gICcpCisgICAgUHNpRW51bUNvbnN0YW50OkEKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lJZGVudGlmaWVyOkEoJ0EnKQorICAgICAgUHNpRXhwcmVzc2lvbkxpc3QKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpTGl0ZXJhbEV4cHJlc3Npb246MTAKKyAgICAgICAgICBQc2lKYXZhVG9rZW46SU5URUdFUl9MSVRFUkFMKCcxMCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUFub255bW91c0NsYXNzIChQc2lFbnVtQ29uc3RhbnRJbml0aWFsaXplckltcGwpKToKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lKYXZhVG9rZW46Q09NTUEoJywnKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuICAnKQorICAgIFBzaUVudW1Db25zdGFudDpCCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpSWRlbnRpZmllcjpCKCdCJykKKyAgICAgIFBzaUV4cHJlc3Npb25MaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lBbm9ueW1vdXNDbGFzcyAoUHNpRW51bUNvbnN0YW50SW5pdGlhbGl6ZXJJbXBsKSk6CisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAgICAnKQorICAgICAgICBQc2lNZXRob2Q6bWV0aG9kCisgICAgICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICAgICAgUHNpSWRlbnRpZmllcjptZXRob2QoJ21ldGhvZCcpCisgICAgICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAgJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG4nKQorICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZGVjbGFyYXRpb25QYXJzaW5nL2NsYXNzL0VudW1XaXRob3V0Q29uc3RhbnRzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2RlY2xhcmF0aW9uUGFyc2luZy9jbGFzcy9FbnVtV2l0aG91dENvbnN0YW50cy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVmZGFkODMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2RlY2xhcmF0aW9uUGFyc2luZy9jbGFzcy9FbnVtV2l0aG91dENvbnN0YW50cy5qYXZhCkBAIC0wLDAgKzEsMyBAQAorcHVibGljIGVudW0gT3VyRW51bSB7CisgIHByaXZhdGUgQQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZGVjbGFyYXRpb25QYXJzaW5nL2NsYXNzL0VudW1XaXRob3V0Q29uc3RhbnRzLnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZGVjbGFyYXRpb25QYXJzaW5nL2NsYXNzL0VudW1XaXRob3V0Q29uc3RhbnRzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZTYxZjNiCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9kZWNsYXJhdGlvblBhcnNpbmcvY2xhc3MvRW51bVdpdGhvdXRDb25zdGFudHMudHh0CkBAIC0wLDAgKzEsMzMgQEAKK1BzaUphdmFGaWxlOkVudW1XaXRob3V0Q29uc3RhbnRzLmphdmEKKyAgUHNpSW1wb3J0TGlzdAorICAgIDxlbXB0eSBsaXN0PgorICBQc2lDbGFzczpPdXJFbnVtCisgICAgUHNpTW9kaWZpZXJMaXN0OnB1YmxpYworICAgICAgUHNpS2V5d29yZDpwdWJsaWMoJ3B1YmxpYycpCisgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgUHNpS2V5d29yZDplbnVtKCdlbnVtJykKKyAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICBQc2lJZGVudGlmaWVyOk91ckVudW0oJ091ckVudW0nKQorICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICBQc2lFcnJvckVsZW1lbnQ6JzsnIGV4cGVjdGVkCisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lXaGl0ZVNwYWNlKCdcbiAgJykKKyAgICBQc2lNb2RpZmllckxpc3Q6cHJpdmF0ZQorICAgICAgUHNpS2V5d29yZDpwcml2YXRlKCdwcml2YXRlJykKKyAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICBQc2lUeXBlRWxlbWVudDpBCisgICAgICBQc2lKYXZhQ29kZVJlZmVyZW5jZUVsZW1lbnQ6QQorICAgICAgICBQc2lJZGVudGlmaWVyOkEoJ0EnKQorICAgICAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpRXJyb3JFbGVtZW50OklkZW50aWZpZXIgZXhwZWN0ZWQKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVdoaXRlU3BhY2UoJ1xuJykKKyAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2RlY2xhcmF0aW9uUGFyc2luZy9jbGFzcy9FcnJvcnMwLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2RlY2xhcmF0aW9uUGFyc2luZy9jbGFzcy9FcnJvcnMwLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTE5MWUyYgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZGVjbGFyYXRpb25QYXJzaW5nL2NsYXNzL0Vycm9yczAuamF2YQpAQCAtMCwwICsxIEBACitwdWJsaWMgY2xhc3MgPGNhcmV0PkIge30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2RlY2xhcmF0aW9uUGFyc2luZy9jbGFzcy9FcnJvcnMwLnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZGVjbGFyYXRpb25QYXJzaW5nL2NsYXNzL0Vycm9yczAudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ5NGJiYWZkCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9kZWNsYXJhdGlvblBhcnNpbmcvY2xhc3MvRXJyb3JzMC50eHQKQEAgLTAsMCArMSwyNiBAQAorUHNpSmF2YUZpbGU6RXJyb3JzMC5qYXZhCisgIFBzaUltcG9ydExpc3QKKyAgICA8ZW1wdHkgbGlzdD4KKyAgUHNpTW9kaWZpZXJMaXN0OnB1YmxpYworICAgIFBzaUtleXdvcmQ6cHVibGljKCdwdWJsaWMnKQorICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgUHNpS2V5d29yZDpjbGFzcygnY2xhc3MnKQorICBQc2lFcnJvckVsZW1lbnQ6SWRlbnRpZmllciBleHBlY3RlZAorICAgIDxlbXB0eSBsaXN0PgorICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgUHNpTW9kaWZpZXJMaXN0OgorICAgIDxlbXB0eSBsaXN0PgorICBQc2lFcnJvckVsZW1lbnQ6J2NsYXNzJyBvciAnaW50ZXJmYWNlJyBleHBlY3RlZAorICAgIDxlbXB0eSBsaXN0PgorICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgIFBzaUphdmFUb2tlbjpMVCgnPCcpCisgICAgUHNpVHlwZVBhcmFtZXRlcjpjYXJldAorICAgICAgUHNpSWRlbnRpZmllcjpjYXJldCgnY2FyZXQnKQorICAgICAgUHNpRWxlbWVudChFWFRFTkRTX0JPVU5EX0xJU1QpCisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaUphdmFUb2tlbjpHVCgnPicpCisgIFBzaUVycm9yRWxlbWVudDonY2xhc3MnIG9yICdpbnRlcmZhY2UnIGV4cGVjdGVkCisgICAgUHNpSWRlbnRpZmllcjpCKCdCJykKKyAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2RlY2xhcmF0aW9uUGFyc2luZy9jbGFzcy9FcnJvcnMxLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2RlY2xhcmF0aW9uUGFyc2luZy9jbGFzcy9FcnJvcnMxLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGIxZGU2ZgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZGVjbGFyYXRpb25QYXJzaW5nL2NsYXNzL0Vycm9yczEuamF2YQpAQCAtMCwwICsxLDQgQEAKKy8vICJSZXBsYWNlIEltcGxlbWVudHMgd2l0aCBTdGF0aWMgSW1wb3J0IiAidHJ1ZSIKK2ludGVyZmFjZSBJPGNhcmV0Pm4geworICAgIGludCBGT08gPSAwOworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZGVjbGFyYXRpb25QYXJzaW5nL2NsYXNzL0Vycm9yczEudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9kZWNsYXJhdGlvblBhcnNpbmcvY2xhc3MvRXJyb3JzMS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjk4ZGMwZAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZGVjbGFyYXRpb25QYXJzaW5nL2NsYXNzL0Vycm9yczEudHh0CkBAIC0wLDAgKzEsNDIgQEAKK1BzaUphdmFGaWxlOkVycm9yczEuamF2YQorICBQc2lJbXBvcnRMaXN0CisgICAgPGVtcHR5IGxpc3Q+CisgIFBzaUNsYXNzOkkKKyAgICBQc2lDb21tZW50KEVORF9PRl9MSU5FX0NPTU1FTlQpKCcvLyAiUmVwbGFjZSBJbXBsZW1lbnRzIHdpdGggU3RhdGljIEltcG9ydCIgInRydWUiJykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcbicpCisgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpS2V5d29yZDppbnRlcmZhY2UoJ2ludGVyZmFjZScpCisgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgUHNpSWRlbnRpZmllcjpJKCdJJykKKyAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgUHNpSmF2YVRva2VuOkxUKCc8JykKKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXI6Y2FyZXQKKyAgICAgICAgUHNpSWRlbnRpZmllcjpjYXJldCgnY2FyZXQnKQorICAgICAgICBQc2lFbGVtZW50KEVYVEVORFNfQk9VTkRfTElTVCkKKyAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUphdmFUb2tlbjpHVCgnPicpCisgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpRXJyb3JFbGVtZW50Oid7JyBleHBlY3RlZAorICAgICAgUHNpSWRlbnRpZmllcjpuKCduJykKKyAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcbiAgICAnKQorICAgIFBzaUZpZWxkOkZPTworICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OmludAorICAgICAgICBQc2lLZXl3b3JkOmludCgnaW50JykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpGT08oJ0ZPTycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUphdmFUb2tlbjpFUSgnPScpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUxpdGVyYWxFeHByZXNzaW9uOjAKKyAgICAgICAgUHNpSmF2YVRva2VuOklOVEVHRVJfTElURVJBTCgnMCcpCisgICAgICBQc2lKYXZhVG9rZW46U0VNSUNPTE9OKCc7JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcbicpCisgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9kZWNsYXJhdGlvblBhcnNpbmcvY2xhc3MvRXJyb3JzMi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9kZWNsYXJhdGlvblBhcnNpbmcvY2xhc3MvRXJyb3JzMi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYyYzRjODkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2RlY2xhcmF0aW9uUGFyc2luZy9jbGFzcy9FcnJvcnMyLmphdmEKQEAgLTAsMCArMSwzIEBACitwdWJsaWMgY2xhc3MgTWFpbiB7CitAaW50ZXJmYWNlIDxjYXJldD4KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2RlY2xhcmF0aW9uUGFyc2luZy9jbGFzcy9FcnJvcnMyLnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZGVjbGFyYXRpb25QYXJzaW5nL2NsYXNzL0Vycm9yczIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY0ZmY1NzMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2RlY2xhcmF0aW9uUGFyc2luZy9jbGFzcy9FcnJvcnMyLnR4dApAQCAtMCwwICsxLDM4IEBACitQc2lKYXZhRmlsZTpFcnJvcnMyLmphdmEKKyAgUHNpSW1wb3J0TGlzdAorICAgIDxlbXB0eSBsaXN0PgorICBQc2lDbGFzczpNYWluCisgICAgUHNpTW9kaWZpZXJMaXN0OnB1YmxpYworICAgICAgUHNpS2V5d29yZDpwdWJsaWMoJ3B1YmxpYycpCisgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgUHNpS2V5d29yZDpjbGFzcygnY2xhc3MnKQorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaUlkZW50aWZpZXI6TWFpbignTWFpbicpCisgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuJykKKyAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lKYXZhVG9rZW46QVQoJ0AnKQorICAgIFBzaUtleXdvcmQ6aW50ZXJmYWNlKCdpbnRlcmZhY2UnKQorICAgIFBzaUVycm9yRWxlbWVudDpJZGVudGlmaWVyIGV4cGVjdGVkCisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lFcnJvckVsZW1lbnQ6SWRlbnRpZmllciBvciB0eXBlIGV4cGVjdGVkCisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICBQc2lKYXZhVG9rZW46TFQoJzwnKQorICAgICAgICBQc2lUeXBlUGFyYW1ldGVyOmNhcmV0CisgICAgICAgICAgUHNpSWRlbnRpZmllcjpjYXJldCgnY2FyZXQnKQorICAgICAgICAgIFBzaUVsZW1lbnQoRVhURU5EU19CT1VORF9MSVNUKQorICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgIFBzaUphdmFUb2tlbjpHVCgnPicpCisgICAgUHNpV2hpdGVTcGFjZSgnXG4nKQorICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZGVjbGFyYXRpb25QYXJzaW5nL2NsYXNzL0Vycm9yczMuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZGVjbGFyYXRpb25QYXJzaW5nL2NsYXNzL0Vycm9yczMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jM2ZlMWNjCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9kZWNsYXJhdGlvblBhcnNpbmcvY2xhc3MvRXJyb3JzMy5qYXZhCkBAIC0wLDAgKzEsNSBAQAorY2xhc3MgQyB7CisgIHB1YmxpYyBPYmplY3QgZmEoaW50IHRvRGVsZXRlKSBzZGZza2RsZmFiY2RhdmNkIHsKKyAgICByZXR1cm4gbnVsbDsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZGVjbGFyYXRpb25QYXJzaW5nL2NsYXNzL0Vycm9yczMudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9kZWNsYXJhdGlvblBhcnNpbmcvY2xhc3MvRXJyb3JzMy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjcxZWIzMAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZGVjbGFyYXRpb25QYXJzaW5nL2NsYXNzL0Vycm9yczMudHh0CkBAIC0wLDAgKzEsNjAgQEAKK1BzaUphdmFGaWxlOkVycm9yczMuamF2YQorICBQc2lJbXBvcnRMaXN0CisgICAgPGVtcHR5IGxpc3Q+CisgIFBzaUNsYXNzOkMKKyAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lLZXl3b3JkOmNsYXNzKCdjbGFzcycpCisgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgUHNpSWRlbnRpZmllcjpDKCdDJykKKyAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgUHNpV2hpdGVTcGFjZSgnXG4gICcpCisgICAgUHNpTWV0aG9kOmZhCisgICAgICBQc2lNb2RpZmllckxpc3Q6cHVibGljCisgICAgICAgIFBzaUtleXdvcmQ6cHVibGljKCdwdWJsaWMnKQorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaVR5cGVFbGVtZW50Ok9iamVjdAorICAgICAgICBQc2lKYXZhQ29kZVJlZmVyZW5jZUVsZW1lbnQ6T2JqZWN0CisgICAgICAgICAgUHNpSWRlbnRpZmllcjpPYmplY3QoJ09iamVjdCcpCisgICAgICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6ZmEoJ2ZhJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KGludCB0b0RlbGV0ZSkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpUGFyYW1ldGVyOnRvRGVsZXRlCisgICAgICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgICAgUHNpVHlwZUVsZW1lbnQ6aW50CisgICAgICAgICAgICBQc2lLZXl3b3JkOmludCgnaW50JykKKyAgICAgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgICAgICBQc2lJZGVudGlmaWVyOnRvRGVsZXRlKCd0b0RlbGV0ZScpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lFcnJvckVsZW1lbnQ6J3snIG9yICc7JyBleHBlY3RlZAorICAgICAgICBQc2lJZGVudGlmaWVyOnNkZnNrZGxmYWJjZGF2Y2QoJ3NkZnNrZGxmYWJjZGF2Y2QnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICAgICcpCisgICAgICAgIFBzaVJldHVyblN0YXRlbWVudAorICAgICAgICAgIFBzaUtleXdvcmQ6cmV0dXJuKCdyZXR1cm4nKQorICAgICAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgICAgIFBzaUxpdGVyYWxFeHByZXNzaW9uOm51bGwKKyAgICAgICAgICAgIFBzaUphdmFUb2tlbjpOVUxMX0tFWVdPUkQoJ251bGwnKQorICAgICAgICAgIFBzaUphdmFUb2tlbjpTRU1JQ09MT04oJzsnKQorICAgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAgJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG4nKQorICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZGVjbGFyYXRpb25QYXJzaW5nL2NsYXNzL0Vycm9yczQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZGVjbGFyYXRpb25QYXJzaW5nL2NsYXNzL0Vycm9yczQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43M2UzMThlCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9kZWNsYXJhdGlvblBhcnNpbmcvY2xhc3MvRXJyb3JzNC5qYXZhCkBAIC0wLDAgKzEsNiBAQAorY2xhc3MgT3V0T2ZNZW1vcnlFeGNlcHRpb25EZW1vIHsKKyAgICB2b2lkIG1haW4oKSB7CisgICAgICAgIExpc3Q8T2JqZWN0PiBsaXN0ID0gbmV3IExpbmtlZAorICAgICAgICBARGVwcmVjYXRlZCBMaXN0PE9iamVjdD4oKTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2RlY2xhcmF0aW9uUGFyc2luZy9jbGFzcy9FcnJvcnM0LnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZGVjbGFyYXRpb25QYXJzaW5nL2NsYXNzL0Vycm9yczQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgzODAyNTMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2RlY2xhcmF0aW9uUGFyc2luZy9jbGFzcy9FcnJvcnM0LnR4dApAQCAtMCwwICsxLDEwNCBAQAorUHNpSmF2YUZpbGU6RXJyb3JzNC5qYXZhCisgIFBzaUltcG9ydExpc3QKKyAgICA8ZW1wdHkgbGlzdD4KKyAgUHNpQ2xhc3M6T3V0T2ZNZW1vcnlFeGNlcHRpb25EZW1vCisgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpS2V5d29yZDpjbGFzcygnY2xhc3MnKQorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaUlkZW50aWZpZXI6T3V0T2ZNZW1vcnlFeGNlcHRpb25EZW1vKCdPdXRPZk1lbW9yeUV4Y2VwdGlvbkRlbW8nKQorICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcbiAgICAnKQorICAgIFBzaU1ldGhvZDptYWluCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6bWFpbignbWFpbicpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICAgICAgICAnKQorICAgICAgICBQc2lEZWNsYXJhdGlvblN0YXRlbWVudAorICAgICAgICAgIFBzaUxvY2FsVmFyaWFibGU6bGlzdAorICAgICAgICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgICAgIFBzaVR5cGVFbGVtZW50Okxpc3Q8T2JqZWN0PgorICAgICAgICAgICAgICBQc2lKYXZhQ29kZVJlZmVyZW5jZUVsZW1lbnQ6TGlzdDxPYmplY3Q+CisgICAgICAgICAgICAgICAgUHNpSWRlbnRpZmllcjpMaXN0KCdMaXN0JykKKyAgICAgICAgICAgICAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICAgICAgICAgICAgICBQc2lKYXZhVG9rZW46TFQoJzwnKQorICAgICAgICAgICAgICAgICAgUHNpVHlwZUVsZW1lbnQ6T2JqZWN0CisgICAgICAgICAgICAgICAgICAgIFBzaUphdmFDb2RlUmVmZXJlbmNlRWxlbWVudDpPYmplY3QKKyAgICAgICAgICAgICAgICAgICAgICBQc2lJZGVudGlmaWVyOk9iamVjdCgnT2JqZWN0JykKKyAgICAgICAgICAgICAgICAgICAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICAgICAgICAgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgICAgICAgICAgIFBzaUphdmFUb2tlbjpHVCgnPicpCisgICAgICAgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgICAgICAgIFBzaUlkZW50aWZpZXI6bGlzdCgnbGlzdCcpCisgICAgICAgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgICAgICAgIFBzaUphdmFUb2tlbjpFUSgnPScpCisgICAgICAgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgICAgICAgIFBzaU5ld0V4cHJlc3Npb246bmV3IExpbmtlZAorICAgICAgICAgICAgICBQc2lLZXl3b3JkOm5ldygnbmV3JykKKyAgICAgICAgICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICAgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgICAgICAgICAgUHNpSmF2YUNvZGVSZWZlcmVuY2VFbGVtZW50OkxpbmtlZAorICAgICAgICAgICAgICAgIFBzaUlkZW50aWZpZXI6TGlua2VkKCdMaW5rZWQnKQorICAgICAgICAgICAgICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgICAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICAgICAgICBQc2lFcnJvckVsZW1lbnQ6JygnIG9yICdbJyBleHBlY3RlZAorICAgICAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICAgICAgUHNpRXJyb3JFbGVtZW50Oic7JyBleHBlY3RlZAorICAgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gICAgICAgICcpCisgICAgICAgIFBzaURlY2xhcmF0aW9uU3RhdGVtZW50CisgICAgICAgICAgUHNpVHlwZUVsZW1lbnQ6QERlcHJlY2F0ZWQgTGlzdDxPYmplY3Q+CisgICAgICAgICAgICBQc2lBbm5vdGF0aW9uCisgICAgICAgICAgICAgIFBzaUphdmFUb2tlbjpBVCgnQCcpCisgICAgICAgICAgICAgIFBzaUphdmFDb2RlUmVmZXJlbmNlRWxlbWVudDpEZXByZWNhdGVkCisgICAgICAgICAgICAgICAgUHNpSWRlbnRpZmllcjpEZXByZWNhdGVkKCdEZXByZWNhdGVkJykKKyAgICAgICAgICAgICAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICAgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgICAgICAgUHNpQW5ub3RhdGlvblBhcmFtZXRlckxpc3QKKyAgICAgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgICAgICAgUHNpSmF2YUNvZGVSZWZlcmVuY2VFbGVtZW50Okxpc3Q8T2JqZWN0PgorICAgICAgICAgICAgICBQc2lJZGVudGlmaWVyOkxpc3QoJ0xpc3QnKQorICAgICAgICAgICAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICAgICAgICAgICAgUHNpSmF2YVRva2VuOkxUKCc8JykKKyAgICAgICAgICAgICAgICBQc2lUeXBlRWxlbWVudDpPYmplY3QKKyAgICAgICAgICAgICAgICAgIFBzaUphdmFDb2RlUmVmZXJlbmNlRWxlbWVudDpPYmplY3QKKyAgICAgICAgICAgICAgICAgICAgUHNpSWRlbnRpZmllcjpPYmplY3QoJ09iamVjdCcpCisgICAgICAgICAgICAgICAgICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgICAgICAgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgICAgICAgICBQc2lKYXZhVG9rZW46R1QoJz4nKQorICAgICAgICAgIFBzaUVycm9yRWxlbWVudDpJZGVudGlmaWVyIGV4cGVjdGVkCisgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgUHNpRXhwcmVzc2lvblN0YXRlbWVudAorICAgICAgICAgIFBzaVBhcmVudGhlc2l6ZWRFeHByZXNzaW9uOigpCisgICAgICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICAgICAgUHNpRXJyb3JFbGVtZW50OkV4cHJlc3Npb24gZXhwZWN0ZWQKKyAgICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgICAgIFBzaUphdmFUb2tlbjpTRU1JQ09MT04oJzsnKQorICAgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAgICAnKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcbicpCisgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9kZWNsYXJhdGlvblBhcnNpbmcvY2xhc3MvRXJyb3JzNS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9kZWNsYXJhdGlvblBhcnNpbmcvY2xhc3MvRXJyb3JzNS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE4OGRiNmIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2RlY2xhcmF0aW9uUGFyc2luZy9jbGFzcy9FcnJvcnM1LmphdmEKQEAgLTAsMCArMSwyMiBAQAorLyoKKyAqIENvcHlyaWdodCAyMDAwLTIwMTIgSmV0QnJhaW5zIHMuci5vLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KK3ByaXZhdGUgc3RhdGljIGNsYXNzIE15IGV4dGVuZHMgSkNvbXBvbmVudCB7CisgIHByaXZhdGUgTXkoTWFwPFN0cmluZywgTGlzdDxPYmplY3Q+PiBwYXJhbSkgeworICAgIHNldEJvcmRlcihudWxsKTsKKyAgICBwYXJhbQorICAgIGxpc3QoKTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZGVjbGFyYXRpb25QYXJzaW5nL2NsYXNzL0Vycm9yczUudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9kZWNsYXJhdGlvblBhcnNpbmcvY2xhc3MvRXJyb3JzNS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTNlZTUxMQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZGVjbGFyYXRpb25QYXJzaW5nL2NsYXNzL0Vycm9yczUudHh0CkBAIC0wLDAgKzEsMTA5IEBACitQc2lKYXZhRmlsZTpFcnJvcnM1LmphdmEKKyAgUHNpSW1wb3J0TGlzdAorICAgIDxlbXB0eSBsaXN0PgorICBQc2lDbGFzczpNeQorICAgIFBzaUNvbW1lbnQoQ19TVFlMRV9DT01NRU5UKSgnLypcbiAqIENvcHlyaWdodCAyMDAwLTIwMTIgSmV0QnJhaW5zIHMuci5vLlxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi8nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuJykKKyAgICBQc2lNb2RpZmllckxpc3Q6cHJpdmF0ZSBzdGF0aWMKKyAgICAgIFBzaUtleXdvcmQ6cHJpdmF0ZSgncHJpdmF0ZScpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUtleXdvcmQ6c3RhdGljKCdzdGF0aWMnKQorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaUtleXdvcmQ6Y2xhc3MoJ2NsYXNzJykKKyAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICBQc2lJZGVudGlmaWVyOk15KCdNeScpCisgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgIFBzaUtleXdvcmQ6ZXh0ZW5kcygnZXh0ZW5kcycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUphdmFDb2RlUmVmZXJlbmNlRWxlbWVudDpKQ29tcG9uZW50CisgICAgICAgIFBzaUlkZW50aWZpZXI6SkNvbXBvbmVudCgnSkNvbXBvbmVudCcpCisgICAgICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcbiAgJykKKyAgICBQc2lNZXRob2Q6TXkKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDpwcml2YXRlCisgICAgICAgIFBzaUtleXdvcmQ6cHJpdmF0ZSgncHJpdmF0ZScpCisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpNeSgnTXknKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooTWFwPFN0cmluZywgTGlzdDxPYmplY3Q+PiBwYXJhbSkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpUGFyYW1ldGVyOnBhcmFtCisgICAgICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgICAgUHNpVHlwZUVsZW1lbnQ6TWFwPFN0cmluZywgTGlzdDxPYmplY3Q+PgorICAgICAgICAgICAgUHNpSmF2YUNvZGVSZWZlcmVuY2VFbGVtZW50Ok1hcDxTdHJpbmcsIExpc3Q8T2JqZWN0Pj4KKyAgICAgICAgICAgICAgUHNpSWRlbnRpZmllcjpNYXAoJ01hcCcpCisgICAgICAgICAgICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgICAgICAgICAgICBQc2lKYXZhVG9rZW46TFQoJzwnKQorICAgICAgICAgICAgICAgIFBzaVR5cGVFbGVtZW50OlN0cmluZworICAgICAgICAgICAgICAgICAgUHNpSmF2YUNvZGVSZWZlcmVuY2VFbGVtZW50OlN0cmluZworICAgICAgICAgICAgICAgICAgICBQc2lJZGVudGlmaWVyOlN0cmluZygnU3RyaW5nJykKKyAgICAgICAgICAgICAgICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICAgICAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICAgICAgICAgIFBzaUphdmFUb2tlbjpDT01NQSgnLCcpCisgICAgICAgICAgICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICAgICAgICAgICAgUHNpVHlwZUVsZW1lbnQ6TGlzdDxPYmplY3Q+CisgICAgICAgICAgICAgICAgICBQc2lKYXZhQ29kZVJlZmVyZW5jZUVsZW1lbnQ6TGlzdDxPYmplY3Q+CisgICAgICAgICAgICAgICAgICAgIFBzaUlkZW50aWZpZXI6TGlzdCgnTGlzdCcpCisgICAgICAgICAgICAgICAgICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgICAgICAgICAgICAgICAgICBQc2lKYXZhVG9rZW46TFQoJzwnKQorICAgICAgICAgICAgICAgICAgICAgIFBzaVR5cGVFbGVtZW50Ok9iamVjdAorICAgICAgICAgICAgICAgICAgICAgICAgUHNpSmF2YUNvZGVSZWZlcmVuY2VFbGVtZW50Ok9iamVjdAorICAgICAgICAgICAgICAgICAgICAgICAgICBQc2lJZGVudGlmaWVyOk9iamVjdCgnT2JqZWN0JykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICAgICAgICAgICAgICAgIFBzaUphdmFUb2tlbjpHVCgnPicpCisgICAgICAgICAgICAgICAgUHNpSmF2YVRva2VuOkdUKCc+JykKKyAgICAgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgICAgICBQc2lJZGVudGlmaWVyOnBhcmFtKCdwYXJhbScpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICAgICcpCisgICAgICAgIFBzaUV4cHJlc3Npb25TdGF0ZW1lbnQKKyAgICAgICAgICBQc2lNZXRob2RDYWxsRXhwcmVzc2lvbjpzZXRCb3JkZXIobnVsbCkKKyAgICAgICAgICAgIFBzaVJlZmVyZW5jZUV4cHJlc3Npb246c2V0Qm9yZGVyCisgICAgICAgICAgICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgICAgICAgUHNpSWRlbnRpZmllcjpzZXRCb3JkZXIoJ3NldEJvcmRlcicpCisgICAgICAgICAgICBQc2lFeHByZXNzaW9uTGlzdAorICAgICAgICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICAgICAgICBQc2lMaXRlcmFsRXhwcmVzc2lvbjpudWxsCisgICAgICAgICAgICAgICAgUHNpSmF2YVRva2VuOk5VTExfS0VZV09SRCgnbnVsbCcpCisgICAgICAgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICAgICAgUHNpSmF2YVRva2VuOlNFTUlDT0xPTignOycpCisgICAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICAgICcpCisgICAgICAgIFBzaUV4cHJlc3Npb25TdGF0ZW1lbnQKKyAgICAgICAgICBQc2lSZWZlcmVuY2VFeHByZXNzaW9uOnBhcmFtCisgICAgICAgICAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICAgICAgUHNpSWRlbnRpZmllcjpwYXJhbSgncGFyYW0nKQorICAgICAgICAgIFBzaUVycm9yRWxlbWVudDonOycgZXhwZWN0ZWQKKyAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAgICAnKQorICAgICAgICBQc2lFeHByZXNzaW9uU3RhdGVtZW50CisgICAgICAgICAgUHNpTWV0aG9kQ2FsbEV4cHJlc3Npb246bGlzdCgpCisgICAgICAgICAgICBQc2lSZWZlcmVuY2VFeHByZXNzaW9uOmxpc3QKKyAgICAgICAgICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICAgICAgICBQc2lJZGVudGlmaWVyOmxpc3QoJ2xpc3QnKQorICAgICAgICAgICAgUHNpRXhwcmVzc2lvbkxpc3QKKyAgICAgICAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgICAgICBQc2lKYXZhVG9rZW46U0VNSUNPTE9OKCc7JykKKyAgICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gICcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuJykKKyAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2RlY2xhcmF0aW9uUGFyc2luZy9jbGFzcy9FeHRyYUNsb3NpbmdCcmFjZUluTWV0aG9kLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2RlY2xhcmF0aW9uUGFyc2luZy9jbGFzcy9FeHRyYUNsb3NpbmdCcmFjZUluTWV0aG9kLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDM4NWI1NQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZGVjbGFyYXRpb25QYXJzaW5nL2NsYXNzL0V4dHJhQ2xvc2luZ0JyYWNlSW5NZXRob2QuamF2YQpAQCAtMCwwICsxLDEwIEBACitjbGFzcyBGb28geworICAgcHVibGljIHZvaWQgdGVzdFNvbWV0aGluZygpIHsKKyAgICAgfQorICAgfQorCisgICBwdWJsaWMgdm9pZCB0ZXN0U29tZXRoaW5nKCkgeworCisgICB9CisKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2RlY2xhcmF0aW9uUGFyc2luZy9jbGFzcy9FeHRyYUNsb3NpbmdCcmFjZUluTWV0aG9kLnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZGVjbGFyYXRpb25QYXJzaW5nL2NsYXNzL0V4dHJhQ2xvc2luZ0JyYWNlSW5NZXRob2QudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY0M2FlZGIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2RlY2xhcmF0aW9uUGFyc2luZy9jbGFzcy9FeHRyYUNsb3NpbmdCcmFjZUluTWV0aG9kLnR4dApAQCAtMCwwICsxLDY1IEBACitQc2lKYXZhRmlsZTpFeHRyYUNsb3NpbmdCcmFjZUluTWV0aG9kLmphdmEKKyAgUHNpSW1wb3J0TGlzdAorICAgIDxlbXB0eSBsaXN0PgorICBQc2lDbGFzczpGb28KKyAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lLZXl3b3JkOmNsYXNzKCdjbGFzcycpCisgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgUHNpSWRlbnRpZmllcjpGb28oJ0ZvbycpCisgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuICAgJykKKyAgICBQc2lNZXRob2Q6dGVzdFNvbWV0aGluZworICAgICAgUHNpTW9kaWZpZXJMaXN0OnB1YmxpYworICAgICAgICBQc2lLZXl3b3JkOnB1YmxpYygncHVibGljJykKKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6dGVzdFNvbWV0aGluZygndGVzdFNvbWV0aGluZycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICAgICAnKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcbiAgICcpCisgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpRXJyb3JFbGVtZW50OidjbGFzcycgb3IgJ2ludGVyZmFjZScgZXhwZWN0ZWQKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gICAnKQorICAgIFBzaU1ldGhvZDp0ZXN0U29tZXRoaW5nCisgICAgICBQc2lNb2RpZmllckxpc3Q6cHVibGljCisgICAgICAgIFBzaUtleXdvcmQ6cHVibGljKCdwdWJsaWMnKQorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjp0ZXN0U29tZXRoaW5nKCd0ZXN0U29tZXRoaW5nJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAgICcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4nKQorICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZGVjbGFyYXRpb25QYXJzaW5nL2NsYXNzL0V4dHJhT3BlbmluZ0JyYWNlSW5NZXRob2QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZGVjbGFyYXRpb25QYXJzaW5nL2NsYXNzL0V4dHJhT3BlbmluZ0JyYWNlSW5NZXRob2QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYTI3YWY3Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9kZWNsYXJhdGlvblBhcnNpbmcvY2xhc3MvRXh0cmFPcGVuaW5nQnJhY2VJbk1ldGhvZC5qYXZhCkBAIC0wLDAgKzEsMTIgQEAKK3BhY2thZ2UgZm9vOworCitwdWJsaWMgY2xhc3MgRm9vIHsKKyAgIHB1YmxpYyB2b2lkIHRlc3RTb21ldGhpbmcoKSB7CisgICAgIHsKKyAgIH0KKworICAgcHVibGljIHZvaWQgdGVzdFNvbWV0aGluZygpIHsKKworICAgfQorCit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9kZWNsYXJhdGlvblBhcnNpbmcvY2xhc3MvRXh0cmFPcGVuaW5nQnJhY2VJbk1ldGhvZC50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2RlY2xhcmF0aW9uUGFyc2luZy9jbGFzcy9FeHRyYU9wZW5pbmdCcmFjZUluTWV0aG9kLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMDcwZDFlCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9kZWNsYXJhdGlvblBhcnNpbmcvY2xhc3MvRXh0cmFPcGVuaW5nQnJhY2VJbk1ldGhvZC50eHQKQEAgLTAsMCArMSw3NyBAQAorUHNpSmF2YUZpbGU6RXh0cmFPcGVuaW5nQnJhY2VJbk1ldGhvZC5qYXZhCisgIFBzaVBhY2thZ2VTdGF0ZW1lbnQ6Zm9vCisgICAgUHNpS2V5d29yZDpwYWNrYWdlKCdwYWNrYWdlJykKKyAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICBQc2lKYXZhQ29kZVJlZmVyZW5jZUVsZW1lbnQ6Zm9vCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpSmF2YVRva2VuOlNFTUlDT0xPTignOycpCisgIFBzaVdoaXRlU3BhY2UoJ1xuXG4nKQorICBQc2lJbXBvcnRMaXN0CisgICAgPGVtcHR5IGxpc3Q+CisgIFBzaUNsYXNzOkZvbworICAgIFBzaU1vZGlmaWVyTGlzdDpwdWJsaWMKKyAgICAgIFBzaUtleXdvcmQ6cHVibGljKCdwdWJsaWMnKQorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaUtleXdvcmQ6Y2xhc3MoJ2NsYXNzJykKKyAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICBQc2lJZGVudGlmaWVyOkZvbygnRm9vJykKKyAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgUHNpV2hpdGVTcGFjZSgnXG4gICAnKQorICAgIFBzaU1ldGhvZDp0ZXN0U29tZXRoaW5nCisgICAgICBQc2lNb2RpZmllckxpc3Q6cHVibGljCisgICAgICAgIFBzaUtleXdvcmQ6cHVibGljKCdwdWJsaWMnKQorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjp0ZXN0U29tZXRoaW5nKCd0ZXN0U29tZXRoaW5nJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gICAgICcpCisgICAgICAgIFBzaUJsb2NrU3RhdGVtZW50CisgICAgICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICAgJykKKyAgICAgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgICAgICBQc2lFcnJvckVsZW1lbnQ6J30nIGV4cGVjdGVkCisgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gICAnKQorICAgIFBzaU1ldGhvZDp0ZXN0U29tZXRoaW5nCisgICAgICBQc2lNb2RpZmllckxpc3Q6cHVibGljCisgICAgICAgIFBzaUtleXdvcmQ6cHVibGljKCdwdWJsaWMnKQorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjp0ZXN0U29tZXRoaW5nKCd0ZXN0U29tZXRoaW5nJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAgICcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4nKQorICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZGVjbGFyYXRpb25QYXJzaW5nL2NsYXNzL0ZvckVycm9yLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2RlY2xhcmF0aW9uUGFyc2luZy9jbGFzcy9Gb3JFcnJvci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcxMTY1ZDcKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2RlY2xhcmF0aW9uUGFyc2luZy9jbGFzcy9Gb3JFcnJvci5qYXZhCkBAIC0wLDAgKzEsNSBAQAorY2xhc3MgVGVzdHsKKyAgeworICAgIGZvcihpbnQgaSA9IDA7IGkgPCAxMDs8RU9MRXJyb3IvPgorICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9kZWNsYXJhdGlvblBhcnNpbmcvY2xhc3MvRm9yRXJyb3IudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9kZWNsYXJhdGlvblBhcnNpbmcvY2xhc3MvRm9yRXJyb3IudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ0NzJmOGQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2RlY2xhcmF0aW9uUGFyc2luZy9jbGFzcy9Gb3JFcnJvci50eHQKQEAgLTAsMCArMSw3NSBAQAorUHNpSmF2YUZpbGU6Rm9yRXJyb3IuamF2YQorICBQc2lJbXBvcnRMaXN0CisgICAgPGVtcHR5IGxpc3Q+CisgIFBzaUNsYXNzOlRlc3QKKyAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lLZXl3b3JkOmNsYXNzKCdjbGFzcycpCisgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgUHNpSWRlbnRpZmllcjpUZXN0KCdUZXN0JykKKyAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgUHNpV2hpdGVTcGFjZSgnXG4gICcpCisgICAgUHNpQ2xhc3NJbml0aWFsaXplcgorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gICAgJykKKyAgICAgICAgUHNpRm9yU3RhdGVtZW50CisgICAgICAgICAgUHNpS2V5d29yZDpmb3IoJ2ZvcicpCisgICAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgICBQc2lEZWNsYXJhdGlvblN0YXRlbWVudAorICAgICAgICAgICAgUHNpTG9jYWxWYXJpYWJsZTppCisgICAgICAgICAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgICAgICAgUHNpVHlwZUVsZW1lbnQ6aW50CisgICAgICAgICAgICAgICAgUHNpS2V5d29yZDppbnQoJ2ludCcpCisgICAgICAgICAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgICAgICAgICBQc2lJZGVudGlmaWVyOmkoJ2knKQorICAgICAgICAgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgICAgICAgICAgUHNpSmF2YVRva2VuOkVRKCc9JykKKyAgICAgICAgICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICAgICAgICAgIFBzaUxpdGVyYWxFeHByZXNzaW9uOjAKKyAgICAgICAgICAgICAgICBQc2lKYXZhVG9rZW46SU5URUdFUl9MSVRFUkFMKCcwJykKKyAgICAgICAgICAgICAgUHNpSmF2YVRva2VuOlNFTUlDT0xPTignOycpCisgICAgICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICAgICAgUHNpQmluYXJ5RXhwcmVzc2lvbjppIDwgMTAKKyAgICAgICAgICAgIFBzaVJlZmVyZW5jZUV4cHJlc3Npb246aQorICAgICAgICAgICAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgICAgICAgIFBzaUlkZW50aWZpZXI6aSgnaScpCisgICAgICAgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgICAgICAgIFBzaUphdmFUb2tlbjpMVCgnPCcpCisgICAgICAgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgICAgICAgIFBzaUxpdGVyYWxFeHByZXNzaW9uOjEwCisgICAgICAgICAgICAgIFBzaUphdmFUb2tlbjpJTlRFR0VSX0xJVEVSQUwoJzEwJykKKyAgICAgICAgICBQc2lKYXZhVG9rZW46U0VNSUNPTE9OKCc7JykKKyAgICAgICAgICBQc2lFcnJvckVsZW1lbnQ6JyknIGV4cGVjdGVkCisgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgUHNpRXJyb3JFbGVtZW50OlVuZXhwZWN0ZWQgdG9rZW4KKyAgICAgICAgICBQc2lKYXZhVG9rZW46TFQoJzwnKQorICAgICAgICBQc2lFeHByZXNzaW9uU3RhdGVtZW50CisgICAgICAgICAgUHNpQmluYXJ5RXhwcmVzc2lvbjpFT0xFcnJvci8+CisgICAgICAgICAgICBQc2lCaW5hcnlFeHByZXNzaW9uOkVPTEVycm9yLworICAgICAgICAgICAgICBQc2lSZWZlcmVuY2VFeHByZXNzaW9uOkVPTEVycm9yCisgICAgICAgICAgICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgICAgICAgICAgUHNpSWRlbnRpZmllcjpFT0xFcnJvcignRU9MRXJyb3InKQorICAgICAgICAgICAgICBQc2lKYXZhVG9rZW46RElWKCcvJykKKyAgICAgICAgICAgICAgUHNpRXJyb3JFbGVtZW50OkV4cHJlc3Npb24gZXhwZWN0ZWQKKyAgICAgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgICAgIFBzaUphdmFUb2tlbjpHVCgnPicpCisgICAgICAgICAgICBQc2lFcnJvckVsZW1lbnQ6RXhwcmVzc2lvbiBleHBlY3RlZAorICAgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgICBQc2lFcnJvckVsZW1lbnQ6JzsnIGV4cGVjdGVkCisgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gICcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuJykKKyAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZGVjbGFyYXRpb25QYXJzaW5nL2NsYXNzL0luY29tcGxldGVBbm5vdGF0aW9uLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2RlY2xhcmF0aW9uUGFyc2luZy9jbGFzcy9JbmNvbXBsZXRlQW5ub3RhdGlvbi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ4ZGJkNjQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2RlY2xhcmF0aW9uUGFyc2luZy9jbGFzcy9JbmNvbXBsZXRlQW5ub3RhdGlvbi5qYXZhCkBAIC0wLDAgKzEsNyBAQAorcGFja2FnZSBmb287CisKK3B1YmxpYyBjbGFzcyBGb28geworICAgcHVibGljIHZvaWQgdGVzdFNvbWV0aGluZygpOworCisgICBATnVsbAorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZGVjbGFyYXRpb25QYXJzaW5nL2NsYXNzL0luY29tcGxldGVBbm5vdGF0aW9uLnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZGVjbGFyYXRpb25QYXJzaW5nL2NsYXNzL0luY29tcGxldGVBbm5vdGF0aW9uLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NWRiYTM0Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9kZWNsYXJhdGlvblBhcnNpbmcvY2xhc3MvSW5jb21wbGV0ZUFubm90YXRpb24udHh0CkBAIC0wLDAgKzEsNTggQEAKK1BzaUphdmFGaWxlOkluY29tcGxldGVBbm5vdGF0aW9uLmphdmEKKyAgUHNpUGFja2FnZVN0YXRlbWVudDpmb28KKyAgICBQc2lLZXl3b3JkOnBhY2thZ2UoJ3BhY2thZ2UnKQorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaUphdmFDb2RlUmVmZXJlbmNlRWxlbWVudDpmb28KKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lKYXZhVG9rZW46U0VNSUNPTE9OKCc7JykKKyAgUHNpV2hpdGVTcGFjZSgnXG5cbicpCisgIFBzaUltcG9ydExpc3QKKyAgICA8ZW1wdHkgbGlzdD4KKyAgUHNpQ2xhc3M6Rm9vCisgICAgUHNpTW9kaWZpZXJMaXN0OnB1YmxpYworICAgICAgUHNpS2V5d29yZDpwdWJsaWMoJ3B1YmxpYycpCisgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgUHNpS2V5d29yZDpjbGFzcygnY2xhc3MnKQorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaUlkZW50aWZpZXI6Rm9vKCdGb28nKQorICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcbiAgICcpCisgICAgUHNpTWV0aG9kOnRlc3RTb21ldGhpbmcKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDpwdWJsaWMKKyAgICAgICAgUHNpS2V5d29yZDpwdWJsaWMoJ3B1YmxpYycpCisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOnRlc3RTb21ldGhpbmcoJ3Rlc3RTb21ldGhpbmcnKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUphdmFUb2tlbjpTRU1JQ09MT04oJzsnKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gICAnKQorICAgIFBzaU1vZGlmaWVyTGlzdDpATnVsbAorICAgICAgUHNpQW5ub3RhdGlvbgorICAgICAgICBQc2lKYXZhVG9rZW46QVQoJ0AnKQorICAgICAgICBQc2lKYXZhQ29kZVJlZmVyZW5jZUVsZW1lbnQ6TnVsbAorICAgICAgICAgIFBzaUlkZW50aWZpZXI6TnVsbCgnTnVsbCcpCisgICAgICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgIFBzaUFubm90YXRpb25QYXJhbWV0ZXJMaXN0CisgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpRXJyb3JFbGVtZW50OklkZW50aWZpZXIgb3IgdHlwZSBleHBlY3RlZAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpV2hpdGVTcGFjZSgnXG4nKQorICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZGVjbGFyYXRpb25QYXJzaW5nL2NsYXNzL0xvbmdDbGFzcy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9kZWNsYXJhdGlvblBhcnNpbmcvY2xhc3MvTG9uZ0NsYXNzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDQ2N2M1MwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZGVjbGFyYXRpb25QYXJzaW5nL2NsYXNzL0xvbmdDbGFzcy5qYXZhCkBAIC0wLDAgKzEsMzA0NTEgQEAKK2NsYXNzIEF7CisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorIAorIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KKworIC8qKiovCisgdm9pZCBmb28oKXt9CisKKyAvKioqLworIHZvaWQgZm9vKCl7fQorCisgLyoqKi8KKyB2b2lkIGZvbygpe30KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2RlY2xhcmF0aW9uUGFyc2luZy9jbGFzcy9Mb25nQ2xhc3MudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9kZWNsYXJhdGlvblBhcnNpbmcvY2xhc3MvTG9uZ0NsYXNzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NTA3ODc4Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9kZWNsYXJhdGlvblBhcnNpbmcvY2xhc3MvTG9uZ0NsYXNzLnR4dApAQCAtMCwwICsxLDIyMzYyNiBAQAorUHNpSmF2YUZpbGU6TG9uZ0NsYXNzLmphdmEKKyAgUHNpSW1wb3J0TGlzdAorICAgIDxlbXB0eSBsaXN0PgorICBQc2lDbGFzczpBCisgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpS2V5d29yZDpjbGFzcygnY2xhc3MnKQorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaUlkZW50aWZpZXI6QSgnQScpCisgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcbiBcbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG4nKQorICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZGVjbGFyYXRpb25QYXJzaW5nL2NsYXNzL05vQ2xhc3MuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZGVjbGFyYXRpb25QYXJzaW5nL2NsYXNzL05vQ2xhc3MuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MWU5NjVhCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9kZWNsYXJhdGlvblBhcnNpbmcvY2xhc3MvTm9DbGFzcy5qYXZhCkBAIC0wLDAgKzEsNCBAQAoraW1wb3J0IGEuYjsKKworcHVibGljIENsYXNzTmFtZXsKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZGVjbGFyYXRpb25QYXJzaW5nL2NsYXNzL05vQ2xhc3MudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9kZWNsYXJhdGlvblBhcnNpbmcvY2xhc3MvTm9DbGFzcy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODg1OTM4NGYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2RlY2xhcmF0aW9uUGFyc2luZy9jbGFzcy9Ob0NsYXNzLnR4dApAQCAtMCwwICsxLDI2IEBACitQc2lKYXZhRmlsZTpOb0NsYXNzLmphdmEKKyAgUHNpSW1wb3J0TGlzdAorICAgIFBzaUltcG9ydFN0YXRlbWVudAorICAgICAgUHNpS2V5d29yZDppbXBvcnQoJ2ltcG9ydCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUphdmFDb2RlUmVmZXJlbmNlRWxlbWVudDphLmIKKyAgICAgICAgUHNpSmF2YUNvZGVSZWZlcmVuY2VFbGVtZW50OmEKKyAgICAgICAgICBQc2lJZGVudGlmaWVyOmEoJ2EnKQorICAgICAgICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICBQc2lKYXZhVG9rZW46RE9UKCcuJykKKyAgICAgICAgUHNpSWRlbnRpZmllcjpiKCdiJykKKyAgICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpSmF2YVRva2VuOlNFTUlDT0xPTignOycpCisgIFBzaVdoaXRlU3BhY2UoJ1xuXG4nKQorICBQc2lNb2RpZmllckxpc3Q6cHVibGljCisgICAgUHNpS2V5d29yZDpwdWJsaWMoJ3B1YmxpYycpCisgIFBzaUVycm9yRWxlbWVudDonY2xhc3MnIG9yICdpbnRlcmZhY2UnIGV4cGVjdGVkCisgICAgPGVtcHR5IGxpc3Q+CisgIFBzaVdoaXRlU3BhY2UoJyAnKQorICBQc2lFcnJvckVsZW1lbnQ6J2NsYXNzJyBvciAnaW50ZXJmYWNlJyBleHBlY3RlZAorICAgIFBzaUlkZW50aWZpZXI6Q2xhc3NOYW1lKCdDbGFzc05hbWUnKQorICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuJykKKyAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2RlY2xhcmF0aW9uUGFyc2luZy9jbGFzcy9Ob1R5cGUuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZGVjbGFyYXRpb25QYXJzaW5nL2NsYXNzL05vVHlwZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjExMWRlNDUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2RlY2xhcmF0aW9uUGFyc2luZy9jbGFzcy9Ob1R5cGUuamF2YQpAQCAtMCwwICsxLDMgQEAKK2NsYXNzIENsYXNzTmFtZXsKKyAgbmV3IFgoKTsKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZGVjbGFyYXRpb25QYXJzaW5nL2NsYXNzL05vVHlwZS50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2RlY2xhcmF0aW9uUGFyc2luZy9jbGFzcy9Ob1R5cGUudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjExNGY0YzQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2RlY2xhcmF0aW9uUGFyc2luZy9jbGFzcy9Ob1R5cGUudHh0CkBAIC0wLDAgKzEsMzQgQEAKK1BzaUphdmFGaWxlOk5vVHlwZS5qYXZhCisgIFBzaUltcG9ydExpc3QKKyAgICA8ZW1wdHkgbGlzdD4KKyAgUHNpQ2xhc3M6Q2xhc3NOYW1lCisgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpS2V5d29yZDpjbGFzcygnY2xhc3MnKQorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaUlkZW50aWZpZXI6Q2xhc3NOYW1lKCdDbGFzc05hbWUnKQorICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcbiAgJykKKyAgICBQc2lFcnJvckVsZW1lbnQ6VW5leHBlY3RlZCB0b2tlbgorICAgICAgUHNpS2V5d29yZDpuZXcoJ25ldycpCisgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgUHNpTWV0aG9kOlgKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUlkZW50aWZpZXI6WCgnWCcpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpSmF2YVRva2VuOlNFTUlDT0xPTignOycpCisgICAgUHNpV2hpdGVTcGFjZSgnXG4nKQorICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9kZWNsYXJhdGlvblBhcnNpbmcvY2xhc3MvUGFyYW1ldHJpemVkQ2xhc3MuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZGVjbGFyYXRpb25QYXJzaW5nL2NsYXNzL1BhcmFtZXRyaXplZENsYXNzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmVkYWEzNQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZGVjbGFyYXRpb25QYXJzaW5nL2NsYXNzL1BhcmFtZXRyaXplZENsYXNzLmphdmEKQEAgLTAsMCArMSwzIEBACitwdWJsaWMgY2xhc3MgQSA8VCBleHRlbmRzIGphdmEudXRpbC5MaXN0PiB7CisgIFQgeDsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2RlY2xhcmF0aW9uUGFyc2luZy9jbGFzcy9QYXJhbWV0cml6ZWRDbGFzcy50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2RlY2xhcmF0aW9uUGFyc2luZy9jbGFzcy9QYXJhbWV0cml6ZWRDbGFzcy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDdlNmIyNQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZGVjbGFyYXRpb25QYXJzaW5nL2NsYXNzL1BhcmFtZXRyaXplZENsYXNzLnR4dApAQCAtMCwwICsxLDU0IEBACitQc2lKYXZhRmlsZTpQYXJhbWV0cml6ZWRDbGFzcy5qYXZhCisgIFBzaUltcG9ydExpc3QKKyAgICA8ZW1wdHkgbGlzdD4KKyAgUHNpQ2xhc3M6QQorICAgIFBzaU1vZGlmaWVyTGlzdDpwdWJsaWMKKyAgICAgIFBzaUtleXdvcmQ6cHVibGljKCdwdWJsaWMnKQorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaUtleXdvcmQ6Y2xhc3MoJ2NsYXNzJykKKyAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICBQc2lJZGVudGlmaWVyOkEoJ0EnKQorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICBQc2lKYXZhVG9rZW46TFQoJzwnKQorICAgICAgUHNpVHlwZVBhcmFtZXRlcjpUCisgICAgICAgIFBzaUlkZW50aWZpZXI6VCgnVCcpCisgICAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgICBQc2lFbGVtZW50KEVYVEVORFNfQk9VTkRfTElTVCkKKyAgICAgICAgICBQc2lLZXl3b3JkOmV4dGVuZHMoJ2V4dGVuZHMnKQorICAgICAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgICAgIFBzaUphdmFDb2RlUmVmZXJlbmNlRWxlbWVudDpqYXZhLnV0aWwuTGlzdAorICAgICAgICAgICAgUHNpSmF2YUNvZGVSZWZlcmVuY2VFbGVtZW50OmphdmEudXRpbAorICAgICAgICAgICAgICBQc2lKYXZhQ29kZVJlZmVyZW5jZUVsZW1lbnQ6amF2YQorICAgICAgICAgICAgICAgIFBzaUlkZW50aWZpZXI6amF2YSgnamF2YScpCisgICAgICAgICAgICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgICAgICAgIFBzaUphdmFUb2tlbjpET1QoJy4nKQorICAgICAgICAgICAgICBQc2lJZGVudGlmaWVyOnV0aWwoJ3V0aWwnKQorICAgICAgICAgICAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgICAgICBQc2lKYXZhVG9rZW46RE9UKCcuJykKKyAgICAgICAgICAgIFBzaUlkZW50aWZpZXI6TGlzdCgnTGlzdCcpCisgICAgICAgICAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpSmF2YVRva2VuOkdUKCc+JykKKyAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcbiAgJykKKyAgICBQc2lGaWVsZDp4CisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6VAorICAgICAgICBQc2lKYXZhQ29kZVJlZmVyZW5jZUVsZW1lbnQ6VAorICAgICAgICAgIFBzaUlkZW50aWZpZXI6VCgnVCcpCisgICAgICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6eCgneCcpCisgICAgICBQc2lKYXZhVG9rZW46U0VNSUNPTE9OKCc7JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcbicpCisgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9kZWNsYXJhdGlvblBhcnNpbmcvY2xhc3MvUGluZXMuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZGVjbGFyYXRpb25QYXJzaW5nL2NsYXNzL1BpbmVzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjc5MWRmMgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZGVjbGFyYXRpb25QYXJzaW5nL2NsYXNzL1BpbmVzLmphdmEKQEAgLTAsMCArMSw1IEBACitjbGFzcyBBPFQgZXh0ZW5kcyBMaXN0PFN0cmluZz4+IGV4dGVuZHMgTGlzdDxMaXN0PEludGVnZXI+PiB7CisgICAgaW50IG1ldGhvZChUIHgpICB7CisgICAgICAgIHJldHVybiB4LnNpemUoKSA+PiAyOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2RlY2xhcmF0aW9uUGFyc2luZy9jbGFzcy9QaW5lcy50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2RlY2xhcmF0aW9uUGFyc2luZy9jbGFzcy9QaW5lcy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjkwZmQyNQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZGVjbGFyYXRpb25QYXJzaW5nL2NsYXNzL1BpbmVzLnR4dApAQCAtMCwwICsxLDEwOCBAQAorUHNpSmF2YUZpbGU6UGluZXMuamF2YQorICBQc2lJbXBvcnRMaXN0CisgICAgPGVtcHR5IGxpc3Q+CisgIFBzaUNsYXNzOkEKKyAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lLZXl3b3JkOmNsYXNzKCdjbGFzcycpCisgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgUHNpSWRlbnRpZmllcjpBKCdBJykKKyAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgUHNpSmF2YVRva2VuOkxUKCc8JykKKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXI6VAorICAgICAgICBQc2lJZGVudGlmaWVyOlQoJ1QnKQorICAgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgICAgUHNpRWxlbWVudChFWFRFTkRTX0JPVU5EX0xJU1QpCisgICAgICAgICAgUHNpS2V5d29yZDpleHRlbmRzKCdleHRlbmRzJykKKyAgICAgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgICAgICBQc2lKYXZhQ29kZVJlZmVyZW5jZUVsZW1lbnQ6TGlzdDxTdHJpbmc+CisgICAgICAgICAgICBQc2lJZGVudGlmaWVyOkxpc3QoJ0xpc3QnKQorICAgICAgICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICAgICAgICBQc2lKYXZhVG9rZW46TFQoJzwnKQorICAgICAgICAgICAgICBQc2lUeXBlRWxlbWVudDpTdHJpbmcKKyAgICAgICAgICAgICAgICBQc2lKYXZhQ29kZVJlZmVyZW5jZUVsZW1lbnQ6U3RyaW5nCisgICAgICAgICAgICAgICAgICBQc2lJZGVudGlmaWVyOlN0cmluZygnU3RyaW5nJykKKyAgICAgICAgICAgICAgICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgICAgICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgICAgICAgIFBzaUphdmFUb2tlbjpHVCgnPicpCisgICAgICBQc2lKYXZhVG9rZW46R1QoJz4nKQorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgIFBzaUtleXdvcmQ6ZXh0ZW5kcygnZXh0ZW5kcycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUphdmFDb2RlUmVmZXJlbmNlRWxlbWVudDpMaXN0PExpc3Q8SW50ZWdlcj4+CisgICAgICAgIFBzaUlkZW50aWZpZXI6TGlzdCgnTGlzdCcpCisgICAgICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgICAgICBQc2lKYXZhVG9rZW46TFQoJzwnKQorICAgICAgICAgIFBzaVR5cGVFbGVtZW50Okxpc3Q8SW50ZWdlcj4KKyAgICAgICAgICAgIFBzaUphdmFDb2RlUmVmZXJlbmNlRWxlbWVudDpMaXN0PEludGVnZXI+CisgICAgICAgICAgICAgIFBzaUlkZW50aWZpZXI6TGlzdCgnTGlzdCcpCisgICAgICAgICAgICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgICAgICAgICAgICBQc2lKYXZhVG9rZW46TFQoJzwnKQorICAgICAgICAgICAgICAgIFBzaVR5cGVFbGVtZW50OkludGVnZXIKKyAgICAgICAgICAgICAgICAgIFBzaUphdmFDb2RlUmVmZXJlbmNlRWxlbWVudDpJbnRlZ2VyCisgICAgICAgICAgICAgICAgICAgIFBzaUlkZW50aWZpZXI6SW50ZWdlcignSW50ZWdlcicpCisgICAgICAgICAgICAgICAgICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgICAgICAgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgICAgICAgICBQc2lKYXZhVG9rZW46R1QoJz4nKQorICAgICAgICAgIFBzaUphdmFUb2tlbjpHVCgnPicpCisgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgUHNpV2hpdGVTcGFjZSgnXG4gICAgJykKKyAgICBQc2lNZXRob2Q6bWV0aG9kCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDppbnQKKyAgICAgICAgUHNpS2V5d29yZDppbnQoJ2ludCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6bWV0aG9kKCdtZXRob2QnKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooVCB4KQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lQYXJhbWV0ZXI6eAorICAgICAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICAgIFBzaVR5cGVFbGVtZW50OlQKKyAgICAgICAgICAgIFBzaUphdmFDb2RlUmVmZXJlbmNlRWxlbWVudDpUCisgICAgICAgICAgICAgIFBzaUlkZW50aWZpZXI6VCgnVCcpCisgICAgICAgICAgICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgICAgICBQc2lJZGVudGlmaWVyOngoJ3gnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAgJykKKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gICAgICAgICcpCisgICAgICAgIFBzaVJldHVyblN0YXRlbWVudAorICAgICAgICAgIFBzaUtleXdvcmQ6cmV0dXJuKCdyZXR1cm4nKQorICAgICAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgICAgIFBzaUJpbmFyeUV4cHJlc3Npb246eC5zaXplKCkgPj4gMgorICAgICAgICAgICAgUHNpTWV0aG9kQ2FsbEV4cHJlc3Npb246eC5zaXplKCkKKyAgICAgICAgICAgICAgUHNpUmVmZXJlbmNlRXhwcmVzc2lvbjp4LnNpemUKKyAgICAgICAgICAgICAgICBQc2lSZWZlcmVuY2VFeHByZXNzaW9uOngKKyAgICAgICAgICAgICAgICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgICAgICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgICAgICAgICAgICBQc2lJZGVudGlmaWVyOngoJ3gnKQorICAgICAgICAgICAgICAgIFBzaUphdmFUb2tlbjpET1QoJy4nKQorICAgICAgICAgICAgICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgICAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICAgICAgICAgIFBzaUlkZW50aWZpZXI6c2l6ZSgnc2l6ZScpCisgICAgICAgICAgICAgIFBzaUV4cHJlc3Npb25MaXN0CisgICAgICAgICAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICAgICAgICBQc2lKYXZhVG9rZW46R1RHVCgnPj4nKQorICAgICAgICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICAgICAgICBQc2lMaXRlcmFsRXhwcmVzc2lvbjoyCisgICAgICAgICAgICAgIFBzaUphdmFUb2tlbjpJTlRFR0VSX0xJVEVSQUwoJzInKQorICAgICAgICAgIFBzaUphdmFUb2tlbjpTRU1JQ09MT04oJzsnKQorICAgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAgICAnKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcbicpCisgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9kZWNsYXJhdGlvblBhcnNpbmcvY2xhc3MvU2VtaWNvbG9uLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2RlY2xhcmF0aW9uUGFyc2luZy9jbGFzcy9TZW1pY29sb24uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZGRjZGExCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9kZWNsYXJhdGlvblBhcnNpbmcvY2xhc3MvU2VtaWNvbG9uLmphdmEKQEAgLTAsMCArMSw2IEBACitjbGFzcyBDbGFzc05hbWV7CisgIHZvaWQgZigpeworICB9OworICB2b2lkIGcoKXsKKyAgfTsKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZGVjbGFyYXRpb25QYXJzaW5nL2NsYXNzL1NlbWljb2xvbi50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2RlY2xhcmF0aW9uUGFyc2luZy9jbGFzcy9TZW1pY29sb24udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRkODY2YjQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2RlY2xhcmF0aW9uUGFyc2luZy9jbGFzcy9TZW1pY29sb24udHh0CkBAIC0wLDAgKzEsNTggQEAKK1BzaUphdmFGaWxlOlNlbWljb2xvbi5qYXZhCisgIFBzaUltcG9ydExpc3QKKyAgICA8ZW1wdHkgbGlzdD4KKyAgUHNpQ2xhc3M6Q2xhc3NOYW1lCisgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpS2V5d29yZDpjbGFzcygnY2xhc3MnKQorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaUlkZW50aWZpZXI6Q2xhc3NOYW1lKCdDbGFzc05hbWUnKQorICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcbiAgJykKKyAgICBQc2lNZXRob2Q6ZgorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmYoJ2YnKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gICcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaUphdmFUb2tlbjpTRU1JQ09MT04oJzsnKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuICAnKQorICAgIFBzaU1ldGhvZDpnCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6ZygnZycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAgJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpSmF2YVRva2VuOlNFTUlDT0xPTignOycpCisgICAgUHNpV2hpdGVTcGFjZSgnXG4nKQorICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9kZWNsYXJhdGlvblBhcnNpbmcvY2xhc3MvU2VtaWNvbG9uMi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9kZWNsYXJhdGlvblBhcnNpbmcvY2xhc3MvU2VtaWNvbG9uMi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRhYTk5MDkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2RlY2xhcmF0aW9uUGFyc2luZy9jbGFzcy9TZW1pY29sb24yLmphdmEKQEAgLTAsMCArMSwyIEBACitjbGFzcyBDbGFzc05hbWV7Cit9OwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9kZWNsYXJhdGlvblBhcnNpbmcvY2xhc3MvU2VtaWNvbG9uMi50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2RlY2xhcmF0aW9uUGFyc2luZy9jbGFzcy9TZW1pY29sb24yLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZWI0ZWQwCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9kZWNsYXJhdGlvblBhcnNpbmcvY2xhc3MvU2VtaWNvbG9uMi50eHQKQEAgLTAsMCArMSwxOSBAQAorUHNpSmF2YUZpbGU6U2VtaWNvbG9uMi5qYXZhCisgIFBzaUltcG9ydExpc3QKKyAgICA8ZW1wdHkgbGlzdD4KKyAgUHNpQ2xhc3M6Q2xhc3NOYW1lCisgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpS2V5d29yZDpjbGFzcygnY2xhc3MnKQorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaUlkZW50aWZpZXI6Q2xhc3NOYW1lKCdDbGFzc05hbWUnKQorICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcbicpCisgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgIFBzaUphdmFUb2tlbjpTRU1JQ09MT04oJzsnKQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9kZWNsYXJhdGlvblBhcnNpbmcvY29tbWVudEJpbmRpbmcvQmluZEJlZm9yZTEuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZGVjbGFyYXRpb25QYXJzaW5nL2NvbW1lbnRCaW5kaW5nL0JpbmRCZWZvcmUxLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmJiOGU3ZAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZGVjbGFyYXRpb25QYXJzaW5nL2NvbW1lbnRCaW5kaW5nL0JpbmRCZWZvcmUxLmphdmEKQEAgLTAsMCArMSw0IEBACitjbGFzcyBBeworICAvLyBjb21tZW50CisgIGludCBmaWVsZDsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2RlY2xhcmF0aW9uUGFyc2luZy9jb21tZW50QmluZGluZy9CaW5kQmVmb3JlMS50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2RlY2xhcmF0aW9uUGFyc2luZy9jb21tZW50QmluZGluZy9CaW5kQmVmb3JlMS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODQ4OWU1YgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZGVjbGFyYXRpb25QYXJzaW5nL2NvbW1lbnRCaW5kaW5nL0JpbmRCZWZvcmUxLnR4dApAQCAtMCwwICsxLDI5IEBACitQc2lKYXZhRmlsZTpCaW5kQmVmb3JlMS5qYXZhCisgIFBzaUltcG9ydExpc3QKKyAgICA8ZW1wdHkgbGlzdD4KKyAgUHNpQ2xhc3M6QQorICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaUtleXdvcmQ6Y2xhc3MoJ2NsYXNzJykKKyAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICBQc2lJZGVudGlmaWVyOkEoJ0EnKQorICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcbiAgJykKKyAgICBQc2lGaWVsZDpmaWVsZAorICAgICAgUHNpQ29tbWVudChFTkRfT0ZfTElORV9DT01NRU5UKSgnLy8gY29tbWVudCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAgJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDppbnQKKyAgICAgICAgUHNpS2V5d29yZDppbnQoJ2ludCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6ZmllbGQoJ2ZpZWxkJykKKyAgICAgIFBzaUphdmFUb2tlbjpTRU1JQ09MT04oJzsnKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuJykKKyAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZGVjbGFyYXRpb25QYXJzaW5nL2NvbW1lbnRCaW5kaW5nL0JpbmRCZWZvcmUyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2RlY2xhcmF0aW9uUGFyc2luZy9jb21tZW50QmluZGluZy9CaW5kQmVmb3JlMi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNhOGE5MTEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2RlY2xhcmF0aW9uUGFyc2luZy9jb21tZW50QmluZGluZy9CaW5kQmVmb3JlMi5qYXZhCkBAIC0wLDAgKzEsNSBAQAorY2xhc3MgQXsKKyAgLy8gY29tbWVudAorCisgIGludCBmaWVsZDsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2RlY2xhcmF0aW9uUGFyc2luZy9jb21tZW50QmluZGluZy9CaW5kQmVmb3JlMi50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2RlY2xhcmF0aW9uUGFyc2luZy9jb21tZW50QmluZGluZy9CaW5kQmVmb3JlMi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjkyMjRhNgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZGVjbGFyYXRpb25QYXJzaW5nL2NvbW1lbnRCaW5kaW5nL0JpbmRCZWZvcmUyLnR4dApAQCAtMCwwICsxLDI5IEBACitQc2lKYXZhRmlsZTpCaW5kQmVmb3JlMi5qYXZhCisgIFBzaUltcG9ydExpc3QKKyAgICA8ZW1wdHkgbGlzdD4KKyAgUHNpQ2xhc3M6QQorICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaUtleXdvcmQ6Y2xhc3MoJ2NsYXNzJykKKyAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICBQc2lJZGVudGlmaWVyOkEoJ0EnKQorICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcbiAgJykKKyAgICBQc2lDb21tZW50KEVORF9PRl9MSU5FX0NPTU1FTlQpKCcvLyBjb21tZW50JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICAnKQorICAgIFBzaUZpZWxkOmZpZWxkCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6aW50CisgICAgICAgIFBzaUtleXdvcmQ6aW50KCdpbnQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZpZWxkKCdmaWVsZCcpCisgICAgICBQc2lKYXZhVG9rZW46U0VNSUNPTE9OKCc7JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcbicpCisgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2RlY2xhcmF0aW9uUGFyc2luZy9jb21tZW50QmluZGluZy9CaW5kQmVmb3JlMy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9kZWNsYXJhdGlvblBhcnNpbmcvY29tbWVudEJpbmRpbmcvQmluZEJlZm9yZTMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMTA0YmJjCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9kZWNsYXJhdGlvblBhcnNpbmcvY29tbWVudEJpbmRpbmcvQmluZEJlZm9yZTMuamF2YQpAQCAtMCwwICsxLDMgQEAKK2NsYXNzIEF7IC8vIGNvbW1lbnQKKyAgaW50IGZpZWxkOworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZGVjbGFyYXRpb25QYXJzaW5nL2NvbW1lbnRCaW5kaW5nL0JpbmRCZWZvcmUzLnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZGVjbGFyYXRpb25QYXJzaW5nL2NvbW1lbnRCaW5kaW5nL0JpbmRCZWZvcmUzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45Mzg4YWY3Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9kZWNsYXJhdGlvblBhcnNpbmcvY29tbWVudEJpbmRpbmcvQmluZEJlZm9yZTMudHh0CkBAIC0wLDAgKzEsMjkgQEAKK1BzaUphdmFGaWxlOkJpbmRCZWZvcmUzLmphdmEKKyAgUHNpSW1wb3J0TGlzdAorICAgIDxlbXB0eSBsaXN0PgorICBQc2lDbGFzczpBCisgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpS2V5d29yZDpjbGFzcygnY2xhc3MnKQorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaUlkZW50aWZpZXI6QSgnQScpCisgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaUNvbW1lbnQoRU5EX09GX0xJTkVfQ09NTUVOVCkoJy8vIGNvbW1lbnQnKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuICAnKQorICAgIFBzaUZpZWxkOmZpZWxkCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6aW50CisgICAgICAgIFBzaUtleXdvcmQ6aW50KCdpbnQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZpZWxkKCdmaWVsZCcpCisgICAgICBQc2lKYXZhVG9rZW46U0VNSUNPTE9OKCc7JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcbicpCisgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2RlY2xhcmF0aW9uUGFyc2luZy9jb21tZW50QmluZGluZy9CaW5kQmVmb3JlM2EuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZGVjbGFyYXRpb25QYXJzaW5nL2NvbW1lbnRCaW5kaW5nL0JpbmRCZWZvcmUzYS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdiYTE3MDYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2RlY2xhcmF0aW9uUGFyc2luZy9jb21tZW50QmluZGluZy9CaW5kQmVmb3JlM2EuamF2YQpAQCAtMCwwICsxLDMgQEAKK2NsYXNzIEF7Ly8gY29tbWVudAorICBpbnQgZmllbGQ7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9kZWNsYXJhdGlvblBhcnNpbmcvY29tbWVudEJpbmRpbmcvQmluZEJlZm9yZTNhLnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZGVjbGFyYXRpb25QYXJzaW5nL2NvbW1lbnRCaW5kaW5nL0JpbmRCZWZvcmUzYS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODUyNjJiYgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZGVjbGFyYXRpb25QYXJzaW5nL2NvbW1lbnRCaW5kaW5nL0JpbmRCZWZvcmUzYS50eHQKQEAgLTAsMCArMSwyOCBAQAorUHNpSmF2YUZpbGU6QmluZEJlZm9yZTNhLmphdmEKKyAgUHNpSW1wb3J0TGlzdAorICAgIDxlbXB0eSBsaXN0PgorICBQc2lDbGFzczpBCisgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpS2V5d29yZDpjbGFzcygnY2xhc3MnKQorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaUlkZW50aWZpZXI6QSgnQScpCisgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgIFBzaUNvbW1lbnQoRU5EX09GX0xJTkVfQ09NTUVOVCkoJy8vIGNvbW1lbnQnKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuICAnKQorICAgIFBzaUZpZWxkOmZpZWxkCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6aW50CisgICAgICAgIFBzaUtleXdvcmQ6aW50KCdpbnQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZpZWxkKCdmaWVsZCcpCisgICAgICBQc2lKYXZhVG9rZW46U0VNSUNPTE9OKCc7JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcbicpCisgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2RlY2xhcmF0aW9uUGFyc2luZy9jb21tZW50QmluZGluZy9CaW5kQmVmb3JlNC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9kZWNsYXJhdGlvblBhcnNpbmcvY29tbWVudEJpbmRpbmcvQmluZEJlZm9yZTQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MjQxMWQ3Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9kZWNsYXJhdGlvblBhcnNpbmcvY29tbWVudEJpbmRpbmcvQmluZEJlZm9yZTQuamF2YQpAQCAtMCwwICsxLDYgQEAKK2NsYXNzIEF7CisgIC8vIGNvbW1lbnQgMQorICAvLyBjb21tZW50IDIKKyAgLy8gY29tbWVudCAzCisgIGludCBmaWVsZDsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2RlY2xhcmF0aW9uUGFyc2luZy9jb21tZW50QmluZGluZy9CaW5kQmVmb3JlNC50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2RlY2xhcmF0aW9uUGFyc2luZy9jb21tZW50QmluZGluZy9CaW5kQmVmb3JlNC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTE3ZjI2MwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZGVjbGFyYXRpb25QYXJzaW5nL2NvbW1lbnRCaW5kaW5nL0JpbmRCZWZvcmU0LnR4dApAQCAtMCwwICsxLDMzIEBACitQc2lKYXZhRmlsZTpCaW5kQmVmb3JlNC5qYXZhCisgIFBzaUltcG9ydExpc3QKKyAgICA8ZW1wdHkgbGlzdD4KKyAgUHNpQ2xhc3M6QQorICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaUtleXdvcmQ6Y2xhc3MoJ2NsYXNzJykKKyAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICBQc2lJZGVudGlmaWVyOkEoJ0EnKQorICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcbiAgJykKKyAgICBQc2lGaWVsZDpmaWVsZAorICAgICAgUHNpQ29tbWVudChFTkRfT0ZfTElORV9DT01NRU5UKSgnLy8gY29tbWVudCAxJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICAnKQorICAgICAgUHNpQ29tbWVudChFTkRfT0ZfTElORV9DT01NRU5UKSgnLy8gY29tbWVudCAyJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICAnKQorICAgICAgUHNpQ29tbWVudChFTkRfT0ZfTElORV9DT01NRU5UKSgnLy8gY29tbWVudCAzJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OmludAorICAgICAgICBQc2lLZXl3b3JkOmludCgnaW50JykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmaWVsZCgnZmllbGQnKQorICAgICAgUHNpSmF2YVRva2VuOlNFTUlDT0xPTignOycpCisgICAgUHNpV2hpdGVTcGFjZSgnXG4nKQorICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9kZWNsYXJhdGlvblBhcnNpbmcvY29tbWVudEJpbmRpbmcvQmluZEJlZm9yZTUuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZGVjbGFyYXRpb25QYXJzaW5nL2NvbW1lbnRCaW5kaW5nL0JpbmRCZWZvcmU1LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjEwZDk1NgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZGVjbGFyYXRpb25QYXJzaW5nL2NvbW1lbnRCaW5kaW5nL0JpbmRCZWZvcmU1LmphdmEKQEAgLTAsMCArMSw1IEBACisvKiogZG9jICovCitjbGFzcyBDIHsKKyAgLy8gcGxhaW4KKyAgaW50IGY7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9kZWNsYXJhdGlvblBhcnNpbmcvY29tbWVudEJpbmRpbmcvQmluZEJlZm9yZTUudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9kZWNsYXJhdGlvblBhcnNpbmcvY29tbWVudEJpbmRpbmcvQmluZEJlZm9yZTUudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY3MjQ3NzYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2RlY2xhcmF0aW9uUGFyc2luZy9jb21tZW50QmluZGluZy9CaW5kQmVmb3JlNS50eHQKQEAgLTAsMCArMSwzNiBAQAorUHNpSmF2YUZpbGU6QmluZEJlZm9yZTUuamF2YQorICBQc2lJbXBvcnRMaXN0CisgICAgPGVtcHR5IGxpc3Q+CisgIFBzaUNsYXNzOkMKKyAgICBQc2lEb2NDb21tZW50CisgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfREFUQSgnZG9jICcpCisgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcbicpCisgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpS2V5d29yZDpjbGFzcygnY2xhc3MnKQorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaUlkZW50aWZpZXI6QygnQycpCisgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuICAnKQorICAgIFBzaUZpZWxkOmYKKyAgICAgIFBzaUNvbW1lbnQoRU5EX09GX0xJTkVfQ09NTUVOVCkoJy8vIHBsYWluJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OmludAorICAgICAgICBQc2lLZXl3b3JkOmludCgnaW50JykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmKCdmJykKKyAgICAgIFBzaUphdmFUb2tlbjpTRU1JQ09MT04oJzsnKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuJykKKyAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2RlY2xhcmF0aW9uUGFyc2luZy9jb21tZW50QmluZGluZy9CaW5kQmVmb3JlQ2xhc3MxLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2RlY2xhcmF0aW9uUGFyc2luZy9jb21tZW50QmluZGluZy9CaW5kQmVmb3JlQ2xhc3MxLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmMxMGIyOQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZGVjbGFyYXRpb25QYXJzaW5nL2NvbW1lbnRCaW5kaW5nL0JpbmRCZWZvcmVDbGFzczEuamF2YQpAQCAtMCwwICsxLDQgQEAKK3BhY2thZ2UgcDsKKworLy8gY29tbWVudAorY2xhc3MgQSB7IH0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2RlY2xhcmF0aW9uUGFyc2luZy9jb21tZW50QmluZGluZy9CaW5kQmVmb3JlQ2xhc3MxLnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZGVjbGFyYXRpb25QYXJzaW5nL2NvbW1lbnRCaW5kaW5nL0JpbmRCZWZvcmVDbGFzczEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMxM2NiYmEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2RlY2xhcmF0aW9uUGFyc2luZy9jb21tZW50QmluZGluZy9CaW5kQmVmb3JlQ2xhc3MxLnR4dApAQCAtMCwwICsxLDMwIEBACitQc2lKYXZhRmlsZTpCaW5kQmVmb3JlQ2xhc3MxLmphdmEKKyAgUHNpUGFja2FnZVN0YXRlbWVudDpwCisgICAgUHNpS2V5d29yZDpwYWNrYWdlKCdwYWNrYWdlJykKKyAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICBQc2lKYXZhQ29kZVJlZmVyZW5jZUVsZW1lbnQ6cAorICAgICAgUHNpSWRlbnRpZmllcjpwKCdwJykKKyAgICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpSmF2YVRva2VuOlNFTUlDT0xPTignOycpCisgIFBzaVdoaXRlU3BhY2UoJ1xuXG4nKQorICBQc2lJbXBvcnRMaXN0CisgICAgPGVtcHR5IGxpc3Q+CisgIFBzaUNsYXNzOkEKKyAgICBQc2lDb21tZW50KEVORF9PRl9MSU5FX0NPTU1FTlQpKCcvLyBjb21tZW50JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcbicpCisgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpS2V5d29yZDpjbGFzcygnY2xhc3MnKQorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaUlkZW50aWZpZXI6QSgnQScpCisgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZGVjbGFyYXRpb25QYXJzaW5nL2NvbW1lbnRCaW5kaW5nL0JpbmRCZWZvcmVDbGFzczIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZGVjbGFyYXRpb25QYXJzaW5nL2NvbW1lbnRCaW5kaW5nL0JpbmRCZWZvcmVDbGFzczIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZDc0MmM5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9kZWNsYXJhdGlvblBhcnNpbmcvY29tbWVudEJpbmRpbmcvQmluZEJlZm9yZUNsYXNzMi5qYXZhCkBAIC0wLDAgKzEsMiBAQAorLy8gY29tbWVudAorY2xhc3MgQSB7IH0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2RlY2xhcmF0aW9uUGFyc2luZy9jb21tZW50QmluZGluZy9CaW5kQmVmb3JlQ2xhc3MyLnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZGVjbGFyYXRpb25QYXJzaW5nL2NvbW1lbnRCaW5kaW5nL0JpbmRCZWZvcmVDbGFzczIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVmYWFkZDAKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2RlY2xhcmF0aW9uUGFyc2luZy9jb21tZW50QmluZGluZy9CaW5kQmVmb3JlQ2xhc3MyLnR4dApAQCAtMCwwICsxLDIxIEBACitQc2lKYXZhRmlsZTpCaW5kQmVmb3JlQ2xhc3MyLmphdmEKKyAgUHNpSW1wb3J0TGlzdAorICAgIDxlbXB0eSBsaXN0PgorICBQc2lDbGFzczpBCisgICAgUHNpQ29tbWVudChFTkRfT0ZfTElORV9DT01NRU5UKSgnLy8gY29tbWVudCcpCisgICAgUHNpV2hpdGVTcGFjZSgnXG4nKQorICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaUtleXdvcmQ6Y2xhc3MoJ2NsYXNzJykKKyAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICBQc2lJZGVudGlmaWVyOkEoJ0EnKQorICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2RlY2xhcmF0aW9uUGFyc2luZy9jb21tZW50QmluZGluZy9CaW5kQmVmb3JlQ2xhc3MzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2RlY2xhcmF0aW9uUGFyc2luZy9jb21tZW50QmluZGluZy9CaW5kQmVmb3JlQ2xhc3MzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWRjNTBjNgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZGVjbGFyYXRpb25QYXJzaW5nL2NvbW1lbnRCaW5kaW5nL0JpbmRCZWZvcmVDbGFzczMuamF2YQpAQCAtMCwwICsxLDMgQEAKKy8vIGNvbW1lbnQKKworY2xhc3MgQSB7IH0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2RlY2xhcmF0aW9uUGFyc2luZy9jb21tZW50QmluZGluZy9CaW5kQmVmb3JlQ2xhc3MzLnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZGVjbGFyYXRpb25QYXJzaW5nL2NvbW1lbnRCaW5kaW5nL0JpbmRCZWZvcmVDbGFzczMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ4Mzg0NGUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2RlY2xhcmF0aW9uUGFyc2luZy9jb21tZW50QmluZGluZy9CaW5kQmVmb3JlQ2xhc3MzLnR4dApAQCAtMCwwICsxLDIxIEBACitQc2lKYXZhRmlsZTpCaW5kQmVmb3JlQ2xhc3MzLmphdmEKKyAgUHNpQ29tbWVudChFTkRfT0ZfTElORV9DT01NRU5UKSgnLy8gY29tbWVudCcpCisgIFBzaVdoaXRlU3BhY2UoJ1xuXG4nKQorICBQc2lJbXBvcnRMaXN0CisgICAgPGVtcHR5IGxpc3Q+CisgIFBzaUNsYXNzOkEKKyAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lLZXl3b3JkOmNsYXNzKCdjbGFzcycpCisgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgUHNpSWRlbnRpZmllcjpBKCdBJykKKyAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9kZWNsYXJhdGlvblBhcnNpbmcvY29tbWVudEJpbmRpbmcvQmluZEJlZm9yZUNsYXNzNC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9kZWNsYXJhdGlvblBhcnNpbmcvY29tbWVudEJpbmRpbmcvQmluZEJlZm9yZUNsYXNzNC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFiMDVjOTAKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2RlY2xhcmF0aW9uUGFyc2luZy9jb21tZW50QmluZGluZy9CaW5kQmVmb3JlQ2xhc3M0LmphdmEKQEAgLTAsMCArMSwyIEBACitwYWNrYWdlIHA7Ly8gY29tbWVudAorY2xhc3MgQSB7IH0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2RlY2xhcmF0aW9uUGFyc2luZy9jb21tZW50QmluZGluZy9CaW5kQmVmb3JlQ2xhc3M0LnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZGVjbGFyYXRpb25QYXJzaW5nL2NvbW1lbnRCaW5kaW5nL0JpbmRCZWZvcmVDbGFzczQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxMmRkNmEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2RlY2xhcmF0aW9uUGFyc2luZy9jb21tZW50QmluZGluZy9CaW5kQmVmb3JlQ2xhc3M0LnR4dApAQCAtMCwwICsxLDI5IEBACitQc2lKYXZhRmlsZTpCaW5kQmVmb3JlQ2xhc3M0LmphdmEKKyAgUHNpUGFja2FnZVN0YXRlbWVudDpwCisgICAgUHNpS2V5d29yZDpwYWNrYWdlKCdwYWNrYWdlJykKKyAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICBQc2lKYXZhQ29kZVJlZmVyZW5jZUVsZW1lbnQ6cAorICAgICAgUHNpSWRlbnRpZmllcjpwKCdwJykKKyAgICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpSmF2YVRva2VuOlNFTUlDT0xPTignOycpCisgICAgUHNpQ29tbWVudChFTkRfT0ZfTElORV9DT01NRU5UKSgnLy8gY29tbWVudCcpCisgIFBzaVdoaXRlU3BhY2UoJ1xuJykKKyAgUHNpSW1wb3J0TGlzdAorICAgIDxlbXB0eSBsaXN0PgorICBQc2lDbGFzczpBCisgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpS2V5d29yZDpjbGFzcygnY2xhc3MnKQorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaUlkZW50aWZpZXI6QSgnQScpCisgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZGVjbGFyYXRpb25QYXJzaW5nL2NvbW1lbnRCaW5kaW5nL0JpbmRCZWZvcmVDbGFzczUuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZGVjbGFyYXRpb25QYXJzaW5nL2NvbW1lbnRCaW5kaW5nL0JpbmRCZWZvcmVDbGFzczUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNmJmN2JiCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9kZWNsYXJhdGlvblBhcnNpbmcvY29tbWVudEJpbmRpbmcvQmluZEJlZm9yZUNsYXNzNS5qYXZhCkBAIC0wLDAgKzEsMyBAQAorLy8gY29tbWVudCAxCisvLyBjb21tZW50IDIKK2NsYXNzIEEgeyB9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9kZWNsYXJhdGlvblBhcnNpbmcvY29tbWVudEJpbmRpbmcvQmluZEJlZm9yZUNsYXNzNS50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2RlY2xhcmF0aW9uUGFyc2luZy9jb21tZW50QmluZGluZy9CaW5kQmVmb3JlQ2xhc3M1LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMTg3MTBmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9kZWNsYXJhdGlvblBhcnNpbmcvY29tbWVudEJpbmRpbmcvQmluZEJlZm9yZUNsYXNzNS50eHQKQEAgLTAsMCArMSwyMyBAQAorUHNpSmF2YUZpbGU6QmluZEJlZm9yZUNsYXNzNS5qYXZhCisgIFBzaUltcG9ydExpc3QKKyAgICA8ZW1wdHkgbGlzdD4KKyAgUHNpQ2xhc3M6QQorICAgIFBzaUNvbW1lbnQoRU5EX09GX0xJTkVfQ09NTUVOVCkoJy8vIGNvbW1lbnQgMScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG4nKQorICAgIFBzaUNvbW1lbnQoRU5EX09GX0xJTkVfQ09NTUVOVCkoJy8vIGNvbW1lbnQgMicpCisgICAgUHNpV2hpdGVTcGFjZSgnXG4nKQorICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaUtleXdvcmQ6Y2xhc3MoJ2NsYXNzJykKKyAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICBQc2lJZGVudGlmaWVyOkEoJ0EnKQorICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2RlY2xhcmF0aW9uUGFyc2luZy9jb21tZW50QmluZGluZy9CaW5kQmVmb3JlQ2xhc3M2LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2RlY2xhcmF0aW9uUGFyc2luZy9jb21tZW50QmluZGluZy9CaW5kQmVmb3JlQ2xhc3M2LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmZmYWM4NgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZGVjbGFyYXRpb25QYXJzaW5nL2NvbW1lbnRCaW5kaW5nL0JpbmRCZWZvcmVDbGFzczYuamF2YQpAQCAtMCwwICsxIEBACisvKiBjb21tZW50ICovY2xhc3MgQSB7IH0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2RlY2xhcmF0aW9uUGFyc2luZy9jb21tZW50QmluZGluZy9CaW5kQmVmb3JlQ2xhc3M2LnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZGVjbGFyYXRpb25QYXJzaW5nL2NvbW1lbnRCaW5kaW5nL0JpbmRCZWZvcmVDbGFzczYudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAzMjUwMDAKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2RlY2xhcmF0aW9uUGFyc2luZy9jb21tZW50QmluZGluZy9CaW5kQmVmb3JlQ2xhc3M2LnR4dApAQCAtMCwwICsxLDIwIEBACitQc2lKYXZhRmlsZTpCaW5kQmVmb3JlQ2xhc3M2LmphdmEKKyAgUHNpSW1wb3J0TGlzdAorICAgIDxlbXB0eSBsaXN0PgorICBQc2lDbGFzczpBCisgICAgUHNpQ29tbWVudChDX1NUWUxFX0NPTU1FTlQpKCcvKiBjb21tZW50ICovJykKKyAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lLZXl3b3JkOmNsYXNzKCdjbGFzcycpCisgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgUHNpSWRlbnRpZmllcjpBKCdBJykKKyAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9kZWNsYXJhdGlvblBhcnNpbmcvZmllbGQvQ29tcGxleEluaXRpYWxpemVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2RlY2xhcmF0aW9uUGFyc2luZy9maWVsZC9Db21wbGV4SW5pdGlhbGl6ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOTUwMjhhCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9kZWNsYXJhdGlvblBhcnNpbmcvZmllbGQvQ29tcGxleEluaXRpYWxpemVyLmphdmEKQEAgLTAsMCArMSwzIEBACitwdWJsaWMgY2xhc3MgU3lzdGVtSW5mbyB7CisgIHB1YmxpYyBzdGF0aWMgZmluYWwgYm9vbGVhbiBpc0tERSA9IFNVTl9ERVNLVE9QICE9IG51bGwgJiYgU1VOX0RFU0tUT1AudG9Mb3dlckNhc2UoKS5pbmRleE9mKCJrZGUiKSA+PSAwOworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZGVjbGFyYXRpb25QYXJzaW5nL2ZpZWxkL0NvbXBsZXhJbml0aWFsaXplci50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2RlY2xhcmF0aW9uUGFyc2luZy9maWVsZC9Db21wbGV4SW5pdGlhbGl6ZXIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUzM2RlNTYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2RlY2xhcmF0aW9uUGFyc2luZy9maWVsZC9Db21wbGV4SW5pdGlhbGl6ZXIudHh0CkBAIC0wLDAgKzEsODEgQEAKK1BzaUphdmFGaWxlOkNvbXBsZXhJbml0aWFsaXplci5qYXZhCisgIFBzaUltcG9ydExpc3QKKyAgICA8ZW1wdHkgbGlzdD4KKyAgUHNpQ2xhc3M6U3lzdGVtSW5mbworICAgIFBzaU1vZGlmaWVyTGlzdDpwdWJsaWMKKyAgICAgIFBzaUtleXdvcmQ6cHVibGljKCdwdWJsaWMnKQorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaUtleXdvcmQ6Y2xhc3MoJ2NsYXNzJykKKyAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICBQc2lJZGVudGlmaWVyOlN5c3RlbUluZm8oJ1N5c3RlbUluZm8nKQorICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcbiAgJykKKyAgICBQc2lGaWVsZDppc0tERQorICAgICAgUHNpTW9kaWZpZXJMaXN0OnB1YmxpYyBzdGF0aWMgZmluYWwKKyAgICAgICAgUHNpS2V5d29yZDpwdWJsaWMoJ3B1YmxpYycpCisgICAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgICBQc2lLZXl3b3JkOnN0YXRpYygnc3RhdGljJykKKyAgICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICAgIFBzaUtleXdvcmQ6ZmluYWwoJ2ZpbmFsJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpVHlwZUVsZW1lbnQ6Ym9vbGVhbgorICAgICAgICBQc2lLZXl3b3JkOmJvb2xlYW4oJ2Jvb2xlYW4nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmlzS0RFKCdpc0tERScpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUphdmFUb2tlbjpFUSgnPScpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUJpbmFyeUV4cHJlc3Npb246U1VOX0RFU0tUT1AgIT0gbnVsbCAmJiBTVU5fREVTS1RPUC50b0xvd2VyQ2FzZSgpLmluZGV4T2YoImtkZSIpID49IDAKKyAgICAgICAgUHNpQmluYXJ5RXhwcmVzc2lvbjpTVU5fREVTS1RPUCAhPSBudWxsCisgICAgICAgICAgUHNpUmVmZXJlbmNlRXhwcmVzc2lvbjpTVU5fREVTS1RPUAorICAgICAgICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgICAgIFBzaUlkZW50aWZpZXI6U1VOX0RFU0tUT1AoJ1NVTl9ERVNLVE9QJykKKyAgICAgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgICAgICBQc2lKYXZhVG9rZW46TkUoJyE9JykKKyAgICAgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgICAgICBQc2lMaXRlcmFsRXhwcmVzc2lvbjpudWxsCisgICAgICAgICAgICBQc2lKYXZhVG9rZW46TlVMTF9LRVlXT1JEKCdudWxsJykKKyAgICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICAgIFBzaUphdmFUb2tlbjpBTkRBTkQoJyYmJykKKyAgICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICAgIFBzaUJpbmFyeUV4cHJlc3Npb246U1VOX0RFU0tUT1AudG9Mb3dlckNhc2UoKS5pbmRleE9mKCJrZGUiKSA+PSAwCisgICAgICAgICAgUHNpTWV0aG9kQ2FsbEV4cHJlc3Npb246U1VOX0RFU0tUT1AudG9Mb3dlckNhc2UoKS5pbmRleE9mKCJrZGUiKQorICAgICAgICAgICAgUHNpUmVmZXJlbmNlRXhwcmVzc2lvbjpTVU5fREVTS1RPUC50b0xvd2VyQ2FzZSgpLmluZGV4T2YKKyAgICAgICAgICAgICAgUHNpTWV0aG9kQ2FsbEV4cHJlc3Npb246U1VOX0RFU0tUT1AudG9Mb3dlckNhc2UoKQorICAgICAgICAgICAgICAgIFBzaVJlZmVyZW5jZUV4cHJlc3Npb246U1VOX0RFU0tUT1AudG9Mb3dlckNhc2UKKyAgICAgICAgICAgICAgICAgIFBzaVJlZmVyZW5jZUV4cHJlc3Npb246U1VOX0RFU0tUT1AKKyAgICAgICAgICAgICAgICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICAgICAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICAgICAgICAgICAgICBQc2lJZGVudGlmaWVyOlNVTl9ERVNLVE9QKCdTVU5fREVTS1RPUCcpCisgICAgICAgICAgICAgICAgICBQc2lKYXZhVG9rZW46RE9UKCcuJykKKyAgICAgICAgICAgICAgICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgICAgICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgICAgICAgICAgICBQc2lJZGVudGlmaWVyOnRvTG93ZXJDYXNlKCd0b0xvd2VyQ2FzZScpCisgICAgICAgICAgICAgICAgUHNpRXhwcmVzc2lvbkxpc3QKKyAgICAgICAgICAgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgICAgICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgICAgICAgICBQc2lKYXZhVG9rZW46RE9UKCcuJykKKyAgICAgICAgICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICAgICAgICBQc2lJZGVudGlmaWVyOmluZGV4T2YoJ2luZGV4T2YnKQorICAgICAgICAgICAgUHNpRXhwcmVzc2lvbkxpc3QKKyAgICAgICAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgICAgICAgUHNpTGl0ZXJhbEV4cHJlc3Npb246ImtkZSIKKyAgICAgICAgICAgICAgICBQc2lKYXZhVG9rZW46U1RSSU5HX0xJVEVSQUwoJyJrZGUiJykKKyAgICAgICAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgICAgICBQc2lKYXZhVG9rZW46R0UoJz49JykKKyAgICAgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgICAgICBQc2lMaXRlcmFsRXhwcmVzc2lvbjowCisgICAgICAgICAgICBQc2lKYXZhVG9rZW46SU5URUdFUl9MSVRFUkFMKCcwJykKKyAgICAgIFBzaUphdmFUb2tlbjpTRU1JQ09MT04oJzsnKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuJykKKyAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2RlY2xhcmF0aW9uUGFyc2luZy9maWVsZC9FcnJvcnMuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZGVjbGFyYXRpb25QYXJzaW5nL2ZpZWxkL0Vycm9ycy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUzM2IwZGUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2RlY2xhcmF0aW9uUGFyc2luZy9maWVsZC9FcnJvcnMuamF2YQpAQCAtMCwwICsxLDMgQEAKK2NsYXNzIFRlc3QgeworICBpbnRbMF07Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9kZWNsYXJhdGlvblBhcnNpbmcvZmllbGQvRXJyb3JzLnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZGVjbGFyYXRpb25QYXJzaW5nL2ZpZWxkL0Vycm9ycy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDQyNDQxNgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZGVjbGFyYXRpb25QYXJzaW5nL2ZpZWxkL0Vycm9ycy50eHQKQEAgLTAsMCArMSwzMSBAQAorUHNpSmF2YUZpbGU6RXJyb3JzLmphdmEKKyAgUHNpSW1wb3J0TGlzdAorICAgIDxlbXB0eSBsaXN0PgorICBQc2lDbGFzczpUZXN0CisgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpS2V5d29yZDpjbGFzcygnY2xhc3MnKQorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaUlkZW50aWZpZXI6VGVzdCgnVGVzdCcpCisgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuICAnKQorICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVR5cGVFbGVtZW50OmludAorICAgICAgUHNpS2V5d29yZDppbnQoJ2ludCcpCisgICAgUHNpRXJyb3JFbGVtZW50OklkZW50aWZpZXIgZXhwZWN0ZWQKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaUVycm9yRWxlbWVudDpVbmV4cGVjdGVkIHRva2VuCisgICAgICBQc2lKYXZhVG9rZW46TEJSQUNLRVQoJ1snKQorICAgICAgUHNpSmF2YVRva2VuOklOVEVHRVJfTElURVJBTCgnMCcpCisgICAgICBQc2lKYXZhVG9rZW46UkJSQUNLRVQoJ10nKQorICAgIFBzaUphdmFUb2tlbjpTRU1JQ09MT04oJzsnKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuJykKKyAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2RlY2xhcmF0aW9uUGFyc2luZy9maWVsZC9NaXNzaW5nSW5pdGlhbGl6ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZGVjbGFyYXRpb25QYXJzaW5nL2ZpZWxkL01pc3NpbmdJbml0aWFsaXplci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhhMjI2YmI1MwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZGVjbGFyYXRpb25QYXJzaW5nL2ZpZWxkL01pc3NpbmdJbml0aWFsaXplci5qYXZhCkBAIC0wLDAgKzEsMyBAQAorY2xhc3MgVGVzdHsKKyAgaW50IGZpZWxkID0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2RlY2xhcmF0aW9uUGFyc2luZy9maWVsZC9NaXNzaW5nSW5pdGlhbGl6ZXIudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9kZWNsYXJhdGlvblBhcnNpbmcvZmllbGQvTWlzc2luZ0luaXRpYWxpemVyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NzAyNmVkCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9kZWNsYXJhdGlvblBhcnNpbmcvZmllbGQvTWlzc2luZ0luaXRpYWxpemVyLnR4dApAQCAtMCwwICsxLDMwIEBACitQc2lKYXZhRmlsZTpNaXNzaW5nSW5pdGlhbGl6ZXIuamF2YQorICBQc2lJbXBvcnRMaXN0CisgICAgPGVtcHR5IGxpc3Q+CisgIFBzaUNsYXNzOlRlc3QKKyAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lLZXl3b3JkOmNsYXNzKCdjbGFzcycpCisgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgUHNpSWRlbnRpZmllcjpUZXN0KCdUZXN0JykKKyAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgUHNpV2hpdGVTcGFjZSgnXG4gICcpCisgICAgUHNpRmllbGQ6ZmllbGQKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDppbnQKKyAgICAgICAgUHNpS2V5d29yZDppbnQoJ2ludCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6ZmllbGQoJ2ZpZWxkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSmF2YVRva2VuOkVRKCc9JykKKyAgICAgIFBzaUVycm9yRWxlbWVudDpFeHByZXNzaW9uIGV4cGVjdGVkCisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVdoaXRlU3BhY2UoJ1xuJykKKyAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZGVjbGFyYXRpb25QYXJzaW5nL2ZpZWxkL01pc3NpbmdJbml0aWFsaXplckV4cHJlc3Npb24uamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZGVjbGFyYXRpb25QYXJzaW5nL2ZpZWxkL01pc3NpbmdJbml0aWFsaXplckV4cHJlc3Npb24uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNWNlMTMyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9kZWNsYXJhdGlvblBhcnNpbmcvZmllbGQvTWlzc2luZ0luaXRpYWxpemVyRXhwcmVzc2lvbi5qYXZhCkBAIC0wLDAgKzEsMyBAQAorY2xhc3MgVGVzdHsKKyAgaW50IGZpZWxkPTsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2RlY2xhcmF0aW9uUGFyc2luZy9maWVsZC9NaXNzaW5nSW5pdGlhbGl6ZXJFeHByZXNzaW9uLnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZGVjbGFyYXRpb25QYXJzaW5nL2ZpZWxkL01pc3NpbmdJbml0aWFsaXplckV4cHJlc3Npb24udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI2YjM5NzEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2RlY2xhcmF0aW9uUGFyc2luZy9maWVsZC9NaXNzaW5nSW5pdGlhbGl6ZXJFeHByZXNzaW9uLnR4dApAQCAtMCwwICsxLDMwIEBACitQc2lKYXZhRmlsZTpNaXNzaW5nSW5pdGlhbGl6ZXJFeHByZXNzaW9uLmphdmEKKyAgUHNpSW1wb3J0TGlzdAorICAgIDxlbXB0eSBsaXN0PgorICBQc2lDbGFzczpUZXN0CisgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpS2V5d29yZDpjbGFzcygnY2xhc3MnKQorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaUlkZW50aWZpZXI6VGVzdCgnVGVzdCcpCisgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuICAnKQorICAgIFBzaUZpZWxkOmZpZWxkCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6aW50CisgICAgICAgIFBzaUtleXdvcmQ6aW50KCdpbnQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZpZWxkKCdmaWVsZCcpCisgICAgICBQc2lKYXZhVG9rZW46RVEoJz0nKQorICAgICAgUHNpRXJyb3JFbGVtZW50OkV4cHJlc3Npb24gZXhwZWN0ZWQKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lKYXZhVG9rZW46U0VNSUNPTE9OKCc7JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcbicpCisgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9kZWNsYXJhdGlvblBhcnNpbmcvZmllbGQvTXVsdGkuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZGVjbGFyYXRpb25QYXJzaW5nL2ZpZWxkL011bHRpLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDFjZjJiOAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZGVjbGFyYXRpb25QYXJzaW5nL2ZpZWxkL011bHRpLmphdmEKQEAgLTAsMCArMSwzIEBACitjbGFzcyBUZXN0eworICBpbnQgZmllbGQxID0gMCwgZmllbGQyOworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZGVjbGFyYXRpb25QYXJzaW5nL2ZpZWxkL011bHRpLnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZGVjbGFyYXRpb25QYXJzaW5nL2ZpZWxkL011bHRpLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYzVmNzNiCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9kZWNsYXJhdGlvblBhcnNpbmcvZmllbGQvTXVsdGkudHh0CkBAIC0wLDAgKzEsMzYgQEAKK1BzaUphdmFGaWxlOk11bHRpLmphdmEKKyAgUHNpSW1wb3J0TGlzdAorICAgIDxlbXB0eSBsaXN0PgorICBQc2lDbGFzczpUZXN0CisgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpS2V5d29yZDpjbGFzcygnY2xhc3MnKQorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaUlkZW50aWZpZXI6VGVzdCgnVGVzdCcpCisgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuICAnKQorICAgIFBzaUZpZWxkOmZpZWxkMQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OmludAorICAgICAgICBQc2lLZXl3b3JkOmludCgnaW50JykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmaWVsZDEoJ2ZpZWxkMScpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUphdmFUb2tlbjpFUSgnPScpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUxpdGVyYWxFeHByZXNzaW9uOjAKKyAgICAgICAgUHNpSmF2YVRva2VuOklOVEVHRVJfTElURVJBTCgnMCcpCisgICAgUHNpSmF2YVRva2VuOkNPTU1BKCcsJykKKyAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICBQc2lGaWVsZDpmaWVsZDIKKyAgICAgIFBzaUlkZW50aWZpZXI6ZmllbGQyKCdmaWVsZDInKQorICAgICAgUHNpSmF2YVRva2VuOlNFTUlDT0xPTignOycpCisgICAgUHNpV2hpdGVTcGFjZSgnXG4nKQorICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9kZWNsYXJhdGlvblBhcnNpbmcvZmllbGQvTXVsdGlMaW5lVW5jbG9zZWQwLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2RlY2xhcmF0aW9uUGFyc2luZy9maWVsZC9NdWx0aUxpbmVVbmNsb3NlZDAuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MjdiNTBmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9kZWNsYXJhdGlvblBhcnNpbmcvZmllbGQvTXVsdGlMaW5lVW5jbG9zZWQwLmphdmEKQEAgLTAsMCArMSw0IEBACitjbGFzcyBUZXN0eworICBpbnQgCisgIE9iamVjdCBtZXRob2QoKXt9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9kZWNsYXJhdGlvblBhcnNpbmcvZmllbGQvTXVsdGlMaW5lVW5jbG9zZWQwLnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZGVjbGFyYXRpb25QYXJzaW5nL2ZpZWxkL011bHRpTGluZVVuY2xvc2VkMC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDlhMTEyOAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZGVjbGFyYXRpb25QYXJzaW5nL2ZpZWxkL011bHRpTGluZVVuY2xvc2VkMC50eHQKQEAgLTAsMCArMSw0NiBAQAorUHNpSmF2YUZpbGU6TXVsdGlMaW5lVW5jbG9zZWQwLmphdmEKKyAgUHNpSW1wb3J0TGlzdAorICAgIDxlbXB0eSBsaXN0PgorICBQc2lDbGFzczpUZXN0CisgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpS2V5d29yZDpjbGFzcygnY2xhc3MnKQorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaUlkZW50aWZpZXI6VGVzdCgnVGVzdCcpCisgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuICAnKQorICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVR5cGVFbGVtZW50OmludAorICAgICAgUHNpS2V5d29yZDppbnQoJ2ludCcpCisgICAgUHNpRXJyb3JFbGVtZW50OklkZW50aWZpZXIgZXhwZWN0ZWQKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVdoaXRlU3BhY2UoJyBcbiAgJykKKyAgICBQc2lNZXRob2Q6bWV0aG9kCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDpPYmplY3QKKyAgICAgICAgUHNpSmF2YUNvZGVSZWZlcmVuY2VFbGVtZW50Ok9iamVjdAorICAgICAgICAgIFBzaUlkZW50aWZpZXI6T2JqZWN0KCdPYmplY3QnKQorICAgICAgICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOm1ldGhvZCgnbWV0aG9kJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuJykKKyAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2RlY2xhcmF0aW9uUGFyc2luZy9maWVsZC9NdWx0aUxpbmVVbmNsb3NlZDEuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZGVjbGFyYXRpb25QYXJzaW5nL2ZpZWxkL011bHRpTGluZVVuY2xvc2VkMS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ4NDFmNzUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2RlY2xhcmF0aW9uUGFyc2luZy9maWVsZC9NdWx0aUxpbmVVbmNsb3NlZDEuamF2YQpAQCAtMCwwICsxLDQgQEAKK2NsYXNzIEMgeworICBTdHJpbmcgdWlUZXN0MSA9IG5ldyBTdHJpbmcoIlRlc3QxIiksCisgICAgICAgICB1aVRlc3QyPGNhcmV0PiA9IG5ldyBTdHJpbmcoIlRlc3QyIik7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9kZWNsYXJhdGlvblBhcnNpbmcvZmllbGQvTXVsdGlMaW5lVW5jbG9zZWQxLnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZGVjbGFyYXRpb25QYXJzaW5nL2ZpZWxkL011bHRpTGluZVVuY2xvc2VkMS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmZlNDcwNAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZGVjbGFyYXRpb25QYXJzaW5nL2ZpZWxkL011bHRpTGluZVVuY2xvc2VkMS50eHQKQEAgLTAsMCArMSw4NiBAQAorUHNpSmF2YUZpbGU6TXVsdGlMaW5lVW5jbG9zZWQxLmphdmEKKyAgUHNpSW1wb3J0TGlzdAorICAgIDxlbXB0eSBsaXN0PgorICBQc2lDbGFzczpDCisgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpS2V5d29yZDpjbGFzcygnY2xhc3MnKQorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaUlkZW50aWZpZXI6QygnQycpCisgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuICAnKQorICAgIFBzaUZpZWxkOnVpVGVzdDEKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDpTdHJpbmcKKyAgICAgICAgUHNpSmF2YUNvZGVSZWZlcmVuY2VFbGVtZW50OlN0cmluZworICAgICAgICAgIFBzaUlkZW50aWZpZXI6U3RyaW5nKCdTdHJpbmcnKQorICAgICAgICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOnVpVGVzdDEoJ3VpVGVzdDEnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lKYXZhVG9rZW46RVEoJz0nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lOZXdFeHByZXNzaW9uOm5ldyBTdHJpbmcoIlRlc3QxIikKKyAgICAgICAgUHNpS2V5d29yZDpuZXcoJ25ldycpCisgICAgICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICAgIFBzaUphdmFDb2RlUmVmZXJlbmNlRWxlbWVudDpTdHJpbmcKKyAgICAgICAgICBQc2lJZGVudGlmaWVyOlN0cmluZygnU3RyaW5nJykKKyAgICAgICAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgUHNpRXhwcmVzc2lvbkxpc3QKKyAgICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICAgIFBzaUxpdGVyYWxFeHByZXNzaW9uOiJUZXN0MSIKKyAgICAgICAgICAgIFBzaUphdmFUb2tlbjpTVFJJTkdfTElURVJBTCgnIlRlc3QxIicpCisgICAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICBQc2lKYXZhVG9rZW46Q09NTUEoJywnKQorICAgIFBzaUVycm9yRWxlbWVudDpJZGVudGlmaWVyIGV4cGVjdGVkCisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lXaGl0ZVNwYWNlKCdcbiAgICAgICAgICcpCisgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpVHlwZUVsZW1lbnQ6dWlUZXN0MjxjYXJldD4KKyAgICAgIFBzaUphdmFDb2RlUmVmZXJlbmNlRWxlbWVudDp1aVRlc3QyPGNhcmV0PgorICAgICAgICBQc2lJZGVudGlmaWVyOnVpVGVzdDIoJ3VpVGVzdDInKQorICAgICAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICAgICAgUHNpSmF2YVRva2VuOkxUKCc8JykKKyAgICAgICAgICBQc2lUeXBlRWxlbWVudDpjYXJldAorICAgICAgICAgICAgUHNpSmF2YUNvZGVSZWZlcmVuY2VFbGVtZW50OmNhcmV0CisgICAgICAgICAgICAgIFBzaUlkZW50aWZpZXI6Y2FyZXQoJ2NhcmV0JykKKyAgICAgICAgICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICAgIFBzaUphdmFUb2tlbjpHVCgnPicpCisgICAgUHNpRXJyb3JFbGVtZW50OklkZW50aWZpZXIgZXhwZWN0ZWQKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaUVycm9yRWxlbWVudDpVbmV4cGVjdGVkIHRva2VuCisgICAgICBQc2lKYXZhVG9rZW46RVEoJz0nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lLZXl3b3JkOm5ldygnbmV3JykKKyAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICBQc2lNZXRob2Q6U3RyaW5nCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lJZGVudGlmaWVyOlN0cmluZygnU3RyaW5nJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCJUZXN0MiIpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUVycm9yRWxlbWVudDpQYXJhbWV0ZXIgZXhwZWN0ZWQKKyAgICAgICAgICBQc2lKYXZhVG9rZW46U1RSSU5HX0xJVEVSQUwoJyJUZXN0MiInKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUphdmFUb2tlbjpTRU1JQ09MT04oJzsnKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuJykKKyAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2RlY2xhcmF0aW9uUGFyc2luZy9maWVsZC9TaW1wbGUuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZGVjbGFyYXRpb25QYXJzaW5nL2ZpZWxkL1NpbXBsZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmExNjgzYTIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2RlY2xhcmF0aW9uUGFyc2luZy9maWVsZC9TaW1wbGUuamF2YQpAQCAtMCwwICsxLDMgQEAKK2NsYXNzIFRlc3R7CisgIGludCBmaWVsZCA9IDA7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9kZWNsYXJhdGlvblBhcnNpbmcvZmllbGQvU2ltcGxlLnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZGVjbGFyYXRpb25QYXJzaW5nL2ZpZWxkL1NpbXBsZS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmUxMjgwNgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZGVjbGFyYXRpb25QYXJzaW5nL2ZpZWxkL1NpbXBsZS50eHQKQEAgLTAsMCArMSwzMiBAQAorUHNpSmF2YUZpbGU6U2ltcGxlLmphdmEKKyAgUHNpSW1wb3J0TGlzdAorICAgIDxlbXB0eSBsaXN0PgorICBQc2lDbGFzczpUZXN0CisgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpS2V5d29yZDpjbGFzcygnY2xhc3MnKQorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaUlkZW50aWZpZXI6VGVzdCgnVGVzdCcpCisgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuICAnKQorICAgIFBzaUZpZWxkOmZpZWxkCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6aW50CisgICAgICAgIFBzaUtleXdvcmQ6aW50KCdpbnQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZpZWxkKCdmaWVsZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUphdmFUb2tlbjpFUSgnPScpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUxpdGVyYWxFeHByZXNzaW9uOjAKKyAgICAgICAgUHNpSmF2YVRva2VuOklOVEVHRVJfTElURVJBTCgnMCcpCisgICAgICBQc2lKYXZhVG9rZW46U0VNSUNPTE9OKCc7JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcbicpCisgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2RlY2xhcmF0aW9uUGFyc2luZy9maWVsZC9VbmNsb3NlZEJyYWNrZXQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZGVjbGFyYXRpb25QYXJzaW5nL2ZpZWxkL1VuY2xvc2VkQnJhY2tldC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ3OTVlYjUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2RlY2xhcmF0aW9uUGFyc2luZy9maWVsZC9VbmNsb3NlZEJyYWNrZXQuamF2YQpAQCAtMCwwICsxLDMgQEAKK2NsYXNzIFRlc3R7CisgIGludCBmaWVsZFsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2RlY2xhcmF0aW9uUGFyc2luZy9maWVsZC9VbmNsb3NlZEJyYWNrZXQudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9kZWNsYXJhdGlvblBhcnNpbmcvZmllbGQvVW5jbG9zZWRCcmFja2V0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZWEzNzRjZgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZGVjbGFyYXRpb25QYXJzaW5nL2ZpZWxkL1VuY2xvc2VkQnJhY2tldC50eHQKQEAgLTAsMCArMSwyOSBAQAorUHNpSmF2YUZpbGU6VW5jbG9zZWRCcmFja2V0LmphdmEKKyAgUHNpSW1wb3J0TGlzdAorICAgIDxlbXB0eSBsaXN0PgorICBQc2lDbGFzczpUZXN0CisgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpS2V5d29yZDpjbGFzcygnY2xhc3MnKQorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaUlkZW50aWZpZXI6VGVzdCgnVGVzdCcpCisgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuICAnKQorICAgIFBzaUZpZWxkOmZpZWxkCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6aW50CisgICAgICAgIFBzaUtleXdvcmQ6aW50KCdpbnQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZpZWxkKCdmaWVsZCcpCisgICAgICBQc2lKYXZhVG9rZW46TEJSQUNLRVQoJ1snKQorICAgICAgUHNpRXJyb3JFbGVtZW50OiddJyBleHBlY3RlZAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lXaGl0ZVNwYWNlKCdcbicpCisgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2RlY2xhcmF0aW9uUGFyc2luZy9maWVsZC9VbmNsb3NlZENvbW1hLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2RlY2xhcmF0aW9uUGFyc2luZy9maWVsZC9VbmNsb3NlZENvbW1hLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOThhMTVmMgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZGVjbGFyYXRpb25QYXJzaW5nL2ZpZWxkL1VuY2xvc2VkQ29tbWEuamF2YQpAQCAtMCwwICsxLDMgQEAKK2NsYXNzIFRlc3R7CisgIGludCBmaWVsZCwKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2RlY2xhcmF0aW9uUGFyc2luZy9maWVsZC9VbmNsb3NlZENvbW1hLnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZGVjbGFyYXRpb25QYXJzaW5nL2ZpZWxkL1VuY2xvc2VkQ29tbWEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ2ZjUyZDgKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2RlY2xhcmF0aW9uUGFyc2luZy9maWVsZC9VbmNsb3NlZENvbW1hLnR4dApAQCAtMCwwICsxLDI5IEBACitQc2lKYXZhRmlsZTpVbmNsb3NlZENvbW1hLmphdmEKKyAgUHNpSW1wb3J0TGlzdAorICAgIDxlbXB0eSBsaXN0PgorICBQc2lDbGFzczpUZXN0CisgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpS2V5d29yZDpjbGFzcygnY2xhc3MnKQorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaUlkZW50aWZpZXI6VGVzdCgnVGVzdCcpCisgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuICAnKQorICAgIFBzaUZpZWxkOmZpZWxkCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6aW50CisgICAgICAgIFBzaUtleXdvcmQ6aW50KCdpbnQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZpZWxkKCdmaWVsZCcpCisgICAgUHNpSmF2YVRva2VuOkNPTU1BKCcsJykKKyAgICBQc2lFcnJvckVsZW1lbnQ6SWRlbnRpZmllciBleHBlY3RlZAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpV2hpdGVTcGFjZSgnXG4nKQorICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9kZWNsYXJhdGlvblBhcnNpbmcvZmllbGQvVW5jbG9zZWRTZW1pY29sb24uamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZGVjbGFyYXRpb25QYXJzaW5nL2ZpZWxkL1VuY2xvc2VkU2VtaWNvbG9uLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTY0NTMyMQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZGVjbGFyYXRpb25QYXJzaW5nL2ZpZWxkL1VuY2xvc2VkU2VtaWNvbG9uLmphdmEKQEAgLTAsMCArMSwzIEBACitjbGFzcyBUZXN0eworICBpbnQgZmllbGQKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2RlY2xhcmF0aW9uUGFyc2luZy9maWVsZC9VbmNsb3NlZFNlbWljb2xvbi50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2RlY2xhcmF0aW9uUGFyc2luZy9maWVsZC9VbmNsb3NlZFNlbWljb2xvbi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGIxNjA0OAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZGVjbGFyYXRpb25QYXJzaW5nL2ZpZWxkL1VuY2xvc2VkU2VtaWNvbG9uLnR4dApAQCAtMCwwICsxLDI4IEBACitQc2lKYXZhRmlsZTpVbmNsb3NlZFNlbWljb2xvbi5qYXZhCisgIFBzaUltcG9ydExpc3QKKyAgICA8ZW1wdHkgbGlzdD4KKyAgUHNpQ2xhc3M6VGVzdAorICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaUtleXdvcmQ6Y2xhc3MoJ2NsYXNzJykKKyAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICBQc2lJZGVudGlmaWVyOlRlc3QoJ1Rlc3QnKQorICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcbiAgJykKKyAgICBQc2lGaWVsZDpmaWVsZAorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OmludAorICAgICAgICBQc2lLZXl3b3JkOmludCgnaW50JykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmaWVsZCgnZmllbGQnKQorICAgICAgUHNpRXJyb3JFbGVtZW50Oic7JyBleHBlY3RlZAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lXaGl0ZVNwYWNlKCdcbicpCisgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2RlY2xhcmF0aW9uUGFyc2luZy9tZXRob2QvQ29tcGxldGlvbkhhY2suamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZGVjbGFyYXRpb25QYXJzaW5nL21ldGhvZC9Db21wbGV0aW9uSGFjay5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg5NjBlMzgKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2RlY2xhcmF0aW9uUGFyc2luZy9tZXRob2QvQ29tcGxldGlvbkhhY2suamF2YQpAQCAtMCwwICsxLDQgQEAKK2NsYXNzIEEgeworICA8WCBJbnRlbGxpSklkZWFSdWxleno+CisgIFN0cmluZyBzID0gIiI7Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2RlY2xhcmF0aW9uUGFyc2luZy9tZXRob2QvQ29tcGxldGlvbkhhY2sudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9kZWNsYXJhdGlvblBhcnNpbmcvbWV0aG9kL0NvbXBsZXRpb25IYWNrLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZTYwMWYzCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9kZWNsYXJhdGlvblBhcnNpbmcvbWV0aG9kL0NvbXBsZXRpb25IYWNrLnR4dApAQCAtMCwwICsxLDQ4IEBACitQc2lKYXZhRmlsZTpDb21wbGV0aW9uSGFjay5qYXZhCisgIFBzaUltcG9ydExpc3QKKyAgICA8ZW1wdHkgbGlzdD4KKyAgUHNpQ2xhc3M6QQorICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaUtleXdvcmQ6Y2xhc3MoJ2NsYXNzJykKKyAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICBQc2lJZGVudGlmaWVyOkEoJ0EnKQorICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcbiAgJykKKyAgICBQc2lGaWVsZDpzCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpRXJyb3JFbGVtZW50OlVuZXhwZWN0ZWQgdG9rZW4KKyAgICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgICBQc2lKYXZhVG9rZW46TFQoJzwnKQorICAgICAgICAgIFBzaVR5cGVQYXJhbWV0ZXI6WAorICAgICAgICAgICAgUHNpSWRlbnRpZmllcjpYKCdYJykKKyAgICAgICAgICAgIFBzaUVsZW1lbnQoRVhURU5EU19CT1VORF9MSVNUKQorICAgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgICAgICBQc2lFcnJvckVsZW1lbnQ6VW5leHBlY3RlZCBpZGVudGlmaWVyCisgICAgICAgICAgICBQc2lJZGVudGlmaWVyOkludGVsbGlKSWRlYVJ1bGV6eignSW50ZWxsaUpJZGVhUnVsZXp6JykKKyAgICAgICAgICBQc2lKYXZhVG9rZW46R1QoJz4nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gICcpCisgICAgICBQc2lUeXBlRWxlbWVudDpTdHJpbmcKKyAgICAgICAgUHNpSmF2YUNvZGVSZWZlcmVuY2VFbGVtZW50OlN0cmluZworICAgICAgICAgIFBzaUlkZW50aWZpZXI6U3RyaW5nKCdTdHJpbmcnKQorICAgICAgICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOnMoJ3MnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lKYXZhVG9rZW46RVEoJz0nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lMaXRlcmFsRXhwcmVzc2lvbjoiIgorICAgICAgICBQc2lKYXZhVG9rZW46U1RSSU5HX0xJVEVSQUwoJyIiJykKKyAgICAgIFBzaUphdmFUb2tlbjpTRU1JQ09MT04oJzsnKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuJykKKyAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2RlY2xhcmF0aW9uUGFyc2luZy9tZXRob2QvQ29tcGxldGlvbkhhY2sxLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2RlY2xhcmF0aW9uUGFyc2luZy9tZXRob2QvQ29tcGxldGlvbkhhY2sxLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmNkZDUxYQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZGVjbGFyYXRpb25QYXJzaW5nL21ldGhvZC9Db21wbGV0aW9uSGFjazEuamF2YQpAQCAtMCwwICsxLDQgQEAKK2NsYXNzIEEgeworICA8WAorICBTdHJpbmcgcyA9ICIiOworfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9kZWNsYXJhdGlvblBhcnNpbmcvbWV0aG9kL0NvbXBsZXRpb25IYWNrMS50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2RlY2xhcmF0aW9uUGFyc2luZy9tZXRob2QvQ29tcGxldGlvbkhhY2sxLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZTIyZWUxCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9kZWNsYXJhdGlvblBhcnNpbmcvbWV0aG9kL0NvbXBsZXRpb25IYWNrMS50eHQKQEAgLTAsMCArMSw0NiBAQAorUHNpSmF2YUZpbGU6Q29tcGxldGlvbkhhY2sxLmphdmEKKyAgUHNpSW1wb3J0TGlzdAorICAgIDxlbXB0eSBsaXN0PgorICBQc2lDbGFzczpBCisgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpS2V5d29yZDpjbGFzcygnY2xhc3MnKQorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaUlkZW50aWZpZXI6QSgnQScpCisgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuICAnKQorICAgIFBzaUZpZWxkOnMKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lFcnJvckVsZW1lbnQ6VW5leHBlY3RlZCB0b2tlbgorICAgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICAgIFBzaUphdmFUb2tlbjpMVCgnPCcpCisgICAgICAgICAgUHNpVHlwZVBhcmFtZXRlcjpYCisgICAgICAgICAgICBQc2lJZGVudGlmaWVyOlgoJ1gnKQorICAgICAgICAgICAgUHNpRWxlbWVudChFWFRFTkRTX0JPVU5EX0xJU1QpCisgICAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICAgIFBzaUVycm9yRWxlbWVudDonPicgZXhwZWN0ZWQuCisgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICAnKQorICAgICAgUHNpVHlwZUVsZW1lbnQ6U3RyaW5nCisgICAgICAgIFBzaUphdmFDb2RlUmVmZXJlbmNlRWxlbWVudDpTdHJpbmcKKyAgICAgICAgICBQc2lJZGVudGlmaWVyOlN0cmluZygnU3RyaW5nJykKKyAgICAgICAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpzKCdzJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSmF2YVRva2VuOkVRKCc9JykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpTGl0ZXJhbEV4cHJlc3Npb246IiIKKyAgICAgICAgUHNpSmF2YVRva2VuOlNUUklOR19MSVRFUkFMKCciIicpCisgICAgICBQc2lKYXZhVG9rZW46U0VNSUNPTE9OKCc7JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcbicpCisgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9kZWNsYXJhdGlvblBhcnNpbmcvbWV0aG9kL0Vycm9yczAuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZGVjbGFyYXRpb25QYXJzaW5nL21ldGhvZC9FcnJvcnMwLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDAyYTM1MwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZGVjbGFyYXRpb25QYXJzaW5nL21ldGhvZC9FcnJvcnMwLmphdmEKQEAgLTAsMCArMSw5IEBACisvLyBpbGxlZ2FsIG1vZGlmaWVyIGNvbWJpbmF0aW9ucworCithYnN0cmFjdCBwdWJsaWMgY2xhc3MgYSB7CisgIHB1YmxpYyBzdGF0aWMgPGVycm9yIGRlc2NyPSIyIj5wcm90ZWN0ZWQgaW50IGYxID0gMDsgCit9CisKK2NsYXNzIGZmIHsKKyAKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2RlY2xhcmF0aW9uUGFyc2luZy9tZXRob2QvRXJyb3JzMC50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2RlY2xhcmF0aW9uUGFyc2luZy9tZXRob2QvRXJyb3JzMC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTE4YTcwNQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZGVjbGFyYXRpb25QYXJzaW5nL21ldGhvZC9FcnJvcnMwLnR4dApAQCAtMCwwICsxLDgyIEBACitQc2lKYXZhRmlsZTpFcnJvcnMwLmphdmEKKyAgUHNpQ29tbWVudChFTkRfT0ZfTElORV9DT01NRU5UKSgnLy8gaWxsZWdhbCBtb2RpZmllciBjb21iaW5hdGlvbnMnKQorICBQc2lXaGl0ZVNwYWNlKCdcblxuJykKKyAgUHNpSW1wb3J0TGlzdAorICAgIDxlbXB0eSBsaXN0PgorICBQc2lDbGFzczphCisgICAgUHNpTW9kaWZpZXJMaXN0OmFic3RyYWN0IHB1YmxpYworICAgICAgUHNpS2V5d29yZDphYnN0cmFjdCgnYWJzdHJhY3QnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lLZXl3b3JkOnB1YmxpYygncHVibGljJykKKyAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICBQc2lLZXl3b3JkOmNsYXNzKCdjbGFzcycpCisgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgUHNpSWRlbnRpZmllcjphKCdhJykKKyAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgUHNpV2hpdGVTcGFjZSgnXG4gICcpCisgICAgUHNpTW9kaWZpZXJMaXN0OnB1YmxpYyBzdGF0aWMKKyAgICAgIFBzaUtleXdvcmQ6cHVibGljKCdwdWJsaWMnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lLZXl3b3JkOnN0YXRpYygnc3RhdGljJykKKyAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICBQc2lFcnJvckVsZW1lbnQ6VW5leHBlY3RlZCB0b2tlbgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgUHNpSmF2YVRva2VuOkxUKCc8JykKKyAgICAgICAgUHNpVHlwZVBhcmFtZXRlcjplcnJvcgorICAgICAgICAgIFBzaUlkZW50aWZpZXI6ZXJyb3IoJ2Vycm9yJykKKyAgICAgICAgICBQc2lFbGVtZW50KEVYVEVORFNfQk9VTkRfTElTVCkKKyAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICBQc2lFcnJvckVsZW1lbnQ6Jz4nIGV4cGVjdGVkLgorICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaVR5cGVFbGVtZW50OmRlc2NyCisgICAgICBQc2lKYXZhQ29kZVJlZmVyZW5jZUVsZW1lbnQ6ZGVzY3IKKyAgICAgICAgUHNpSWRlbnRpZmllcjpkZXNjcignZGVzY3InKQorICAgICAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpRXJyb3JFbGVtZW50OklkZW50aWZpZXIgZXhwZWN0ZWQKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaUVycm9yRWxlbWVudDpVbmV4cGVjdGVkIHRva2VuCisgICAgICBQc2lKYXZhVG9rZW46RVEoJz0nKQorICAgICAgUHNpSmF2YVRva2VuOlNUUklOR19MSVRFUkFMKCciMiInKQorICAgICAgUHNpSmF2YVRva2VuOkdUKCc+JykKKyAgICBQc2lGaWVsZDpmMQorICAgICAgUHNpTW9kaWZpZXJMaXN0OnByb3RlY3RlZAorICAgICAgICBQc2lLZXl3b3JkOnByb3RlY3RlZCgncHJvdGVjdGVkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpVHlwZUVsZW1lbnQ6aW50CisgICAgICAgIFBzaUtleXdvcmQ6aW50KCdpbnQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmYxKCdmMScpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUphdmFUb2tlbjpFUSgnPScpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUxpdGVyYWxFeHByZXNzaW9uOjAKKyAgICAgICAgUHNpSmF2YVRva2VuOklOVEVHRVJfTElURVJBTCgnMCcpCisgICAgICBQc2lKYXZhVG9rZW46U0VNSUNPTE9OKCc7JykKKyAgICBQc2lXaGl0ZVNwYWNlKCcgXG4nKQorICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICBQc2lXaGl0ZVNwYWNlKCdcblxuJykKKyAgUHNpQ2xhc3M6ZmYKKyAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lLZXl3b3JkOmNsYXNzKCdjbGFzcycpCisgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgUHNpSWRlbnRpZmllcjpmZignZmYnKQorICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcbiBcbicpCisgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2RlY2xhcmF0aW9uUGFyc2luZy9tZXRob2QvRXJyb3JzMS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9kZWNsYXJhdGlvblBhcnNpbmcvbWV0aG9kL0Vycm9yczEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZWNmMTg0Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9kZWNsYXJhdGlvblBhcnNpbmcvbWV0aG9kL0Vycm9yczEuamF2YQpAQCAtMCwwICsxLDYgQEAKKworPGVycm9yIGRlc2NyPSJNb2RpZmllciAncHJpdmF0ZScgbm90IGFsbG93ZWQgaGVyZSI+cHJpdmF0ZTwvZXJyb3I+IAorPGVycm9yIGRlc2NyPSJNb2RpZmllciAnc3RhdGljJyBub3QgYWxsb3dlZCBoZXJlIj5zdGF0aWM8L2Vycm9yPgorPGVycm9yIGRlc2NyPSJNb2RpZmllciAndm9sYXRpbGUnIG5vdCBhbGxvd2VkIGhlcmUiPnZvbGF0aWxlPC9lcnJvcj4KK2NsYXNzIGEgeworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZGVjbGFyYXRpb25QYXJzaW5nL21ldGhvZC9FcnJvcnMxLnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZGVjbGFyYXRpb25QYXJzaW5nL21ldGhvZC9FcnJvcnMxLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MDc1YTk4Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9kZWNsYXJhdGlvblBhcnNpbmcvbWV0aG9kL0Vycm9yczEudHh0CkBAIC0wLDAgKzEsMTE4IEBACitQc2lKYXZhRmlsZTpFcnJvcnMxLmphdmEKKyAgUHNpSW1wb3J0TGlzdAorICAgIDxlbXB0eSBsaXN0PgorICBQc2lNb2RpZmllckxpc3Q6CisgICAgPGVtcHR5IGxpc3Q+CisgIFBzaUVycm9yRWxlbWVudDonY2xhc3MnIG9yICdpbnRlcmZhY2UnIGV4cGVjdGVkCisgICAgPGVtcHR5IGxpc3Q+CisgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgUHNpSmF2YVRva2VuOkxUKCc8JykKKyAgICBQc2lUeXBlUGFyYW1ldGVyOmVycm9yCisgICAgICBQc2lJZGVudGlmaWVyOmVycm9yKCdlcnJvcicpCisgICAgICBQc2lFbGVtZW50KEVYVEVORFNfQk9VTkRfTElTVCkKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpRXJyb3JFbGVtZW50Oic+JyBleHBlY3RlZC4KKyAgICAgIDxlbXB0eSBsaXN0PgorICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgUHNpRXJyb3JFbGVtZW50OidjbGFzcycgb3IgJ2ludGVyZmFjZScgZXhwZWN0ZWQKKyAgICBQc2lJZGVudGlmaWVyOmRlc2NyKCdkZXNjcicpCisgICAgUHNpSmF2YVRva2VuOkVRKCc9JykKKyAgICBQc2lKYXZhVG9rZW46U1RSSU5HX0xJVEVSQUwoJyJNb2RpZmllciAncHJpdmF0ZScgbm90IGFsbG93ZWQgaGVyZSInKQorICAgIFBzaUphdmFUb2tlbjpHVCgnPicpCisgIFBzaU1vZGlmaWVyTGlzdDpwcml2YXRlCisgICAgUHNpS2V5d29yZDpwcml2YXRlKCdwcml2YXRlJykKKyAgUHNpRXJyb3JFbGVtZW50OidjbGFzcycgb3IgJ2ludGVyZmFjZScgZXhwZWN0ZWQKKyAgICA8ZW1wdHkgbGlzdD4KKyAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICBQc2lKYXZhVG9rZW46TFQoJzwnKQorICAgIFBzaUVycm9yRWxlbWVudDpUeXBlIHBhcmFtZXRlciBleHBlY3RlZAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpRXJyb3JFbGVtZW50Oic+JyBleHBlY3RlZC4KKyAgICAgIDxlbXB0eSBsaXN0PgorICBQc2lFcnJvckVsZW1lbnQ6J2NsYXNzJyBvciAnaW50ZXJmYWNlJyBleHBlY3RlZAorICAgIFBzaUphdmFUb2tlbjpESVYoJy8nKQorICAgIFBzaUlkZW50aWZpZXI6ZXJyb3IoJ2Vycm9yJykKKyAgICBQc2lKYXZhVG9rZW46R1QoJz4nKQorICBQc2lXaGl0ZVNwYWNlKCcgXG4nKQorICBQc2lNb2RpZmllckxpc3Q6CisgICAgPGVtcHR5IGxpc3Q+CisgIFBzaUVycm9yRWxlbWVudDonY2xhc3MnIG9yICdpbnRlcmZhY2UnIGV4cGVjdGVkCisgICAgPGVtcHR5IGxpc3Q+CisgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgUHNpSmF2YVRva2VuOkxUKCc8JykKKyAgICBQc2lUeXBlUGFyYW1ldGVyOmVycm9yCisgICAgICBQc2lJZGVudGlmaWVyOmVycm9yKCdlcnJvcicpCisgICAgICBQc2lFbGVtZW50KEVYVEVORFNfQk9VTkRfTElTVCkKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpRXJyb3JFbGVtZW50Oic+JyBleHBlY3RlZC4KKyAgICAgIDxlbXB0eSBsaXN0PgorICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgUHNpRXJyb3JFbGVtZW50OidjbGFzcycgb3IgJ2ludGVyZmFjZScgZXhwZWN0ZWQKKyAgICBQc2lJZGVudGlmaWVyOmRlc2NyKCdkZXNjcicpCisgICAgUHNpSmF2YVRva2VuOkVRKCc9JykKKyAgICBQc2lKYXZhVG9rZW46U1RSSU5HX0xJVEVSQUwoJyJNb2RpZmllciAnc3RhdGljJyBub3QgYWxsb3dlZCBoZXJlIicpCisgICAgUHNpSmF2YVRva2VuOkdUKCc+JykKKyAgUHNpTW9kaWZpZXJMaXN0OnN0YXRpYworICAgIFBzaUtleXdvcmQ6c3RhdGljKCdzdGF0aWMnKQorICBQc2lFcnJvckVsZW1lbnQ6J2NsYXNzJyBvciAnaW50ZXJmYWNlJyBleHBlY3RlZAorICAgIDxlbXB0eSBsaXN0PgorICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgIFBzaUphdmFUb2tlbjpMVCgnPCcpCisgICAgUHNpRXJyb3JFbGVtZW50OlR5cGUgcGFyYW1ldGVyIGV4cGVjdGVkCisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lFcnJvckVsZW1lbnQ6Jz4nIGV4cGVjdGVkLgorICAgICAgPGVtcHR5IGxpc3Q+CisgIFBzaUVycm9yRWxlbWVudDonY2xhc3MnIG9yICdpbnRlcmZhY2UnIGV4cGVjdGVkCisgICAgUHNpSmF2YVRva2VuOkRJVignLycpCisgICAgUHNpSWRlbnRpZmllcjplcnJvcignZXJyb3InKQorICAgIFBzaUphdmFUb2tlbjpHVCgnPicpCisgIFBzaVdoaXRlU3BhY2UoJ1xuJykKKyAgUHNpTW9kaWZpZXJMaXN0OgorICAgIDxlbXB0eSBsaXN0PgorICBQc2lFcnJvckVsZW1lbnQ6J2NsYXNzJyBvciAnaW50ZXJmYWNlJyBleHBlY3RlZAorICAgIDxlbXB0eSBsaXN0PgorICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgIFBzaUphdmFUb2tlbjpMVCgnPCcpCisgICAgUHNpVHlwZVBhcmFtZXRlcjplcnJvcgorICAgICAgUHNpSWRlbnRpZmllcjplcnJvcignZXJyb3InKQorICAgICAgUHNpRWxlbWVudChFWFRFTkRTX0JPVU5EX0xJU1QpCisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaUVycm9yRWxlbWVudDonPicgZXhwZWN0ZWQuCisgICAgICA8ZW1wdHkgbGlzdD4KKyAgUHNpV2hpdGVTcGFjZSgnICcpCisgIFBzaUVycm9yRWxlbWVudDonY2xhc3MnIG9yICdpbnRlcmZhY2UnIGV4cGVjdGVkCisgICAgUHNpSWRlbnRpZmllcjpkZXNjcignZGVzY3InKQorICAgIFBzaUphdmFUb2tlbjpFUSgnPScpCisgICAgUHNpSmF2YVRva2VuOlNUUklOR19MSVRFUkFMKCciTW9kaWZpZXIgJ3ZvbGF0aWxlJyBub3QgYWxsb3dlZCBoZXJlIicpCisgICAgUHNpSmF2YVRva2VuOkdUKCc+JykKKyAgUHNpTW9kaWZpZXJMaXN0OnZvbGF0aWxlCisgICAgUHNpS2V5d29yZDp2b2xhdGlsZSgndm9sYXRpbGUnKQorICBQc2lFcnJvckVsZW1lbnQ6J2NsYXNzJyBvciAnaW50ZXJmYWNlJyBleHBlY3RlZAorICAgIDxlbXB0eSBsaXN0PgorICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgIFBzaUphdmFUb2tlbjpMVCgnPCcpCisgICAgUHNpRXJyb3JFbGVtZW50OlR5cGUgcGFyYW1ldGVyIGV4cGVjdGVkCisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lFcnJvckVsZW1lbnQ6Jz4nIGV4cGVjdGVkLgorICAgICAgPGVtcHR5IGxpc3Q+CisgIFBzaUVycm9yRWxlbWVudDonY2xhc3MnIG9yICdpbnRlcmZhY2UnIGV4cGVjdGVkCisgICAgUHNpSmF2YVRva2VuOkRJVignLycpCisgICAgUHNpSWRlbnRpZmllcjplcnJvcignZXJyb3InKQorICAgIFBzaUphdmFUb2tlbjpHVCgnPicpCisgIFBzaVdoaXRlU3BhY2UoJ1xuJykKKyAgUHNpQ2xhc3M6YQorICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaUtleXdvcmQ6Y2xhc3MoJ2NsYXNzJykKKyAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICBQc2lJZGVudGlmaWVyOmEoJ2EnKQorICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcbicpCisgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9kZWNsYXJhdGlvblBhcnNpbmcvbWV0aG9kL0Vycm9yczIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZGVjbGFyYXRpb25QYXJzaW5nL21ldGhvZC9FcnJvcnMyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDVkNGNlNgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZGVjbGFyYXRpb25QYXJzaW5nL21ldGhvZC9FcnJvcnMyLmphdmEKQEAgLTAsMCArMSw1IEBACitwdWJsaWMgY2xhc3MgVGVzdHQgeworICBAPGNhcmV0PkNvbmZpZ3VyYXRpb24oYWZ0ZXJUZXN0Q2xhc3M9dHJ1ZSkKKyAgcHVibGljIHZvaWQgYWZ0ZXIxKCkgeworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9kZWNsYXJhdGlvblBhcnNpbmcvbWV0aG9kL0Vycm9yczIudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9kZWNsYXJhdGlvblBhcnNpbmcvbWV0aG9kL0Vycm9yczIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZkZDkwMTUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2RlY2xhcmF0aW9uUGFyc2luZy9tZXRob2QvRXJyb3JzMi50eHQKQEAgLTAsMCArMSw3NyBAQAorUHNpSmF2YUZpbGU6RXJyb3JzMi5qYXZhCisgIFBzaUltcG9ydExpc3QKKyAgICA8ZW1wdHkgbGlzdD4KKyAgUHNpQ2xhc3M6VGVzdHQKKyAgICBQc2lNb2RpZmllckxpc3Q6cHVibGljCisgICAgICBQc2lLZXl3b3JkOnB1YmxpYygncHVibGljJykKKyAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICBQc2lLZXl3b3JkOmNsYXNzKCdjbGFzcycpCisgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgUHNpSWRlbnRpZmllcjpUZXN0dCgnVGVzdHQnKQorICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcbiAgJykKKyAgICBQc2lNZXRob2Q6Q29uZmlndXJhdGlvbgorICAgICAgUHNpTW9kaWZpZXJMaXN0OkAKKyAgICAgICAgUHNpQW5ub3RhdGlvbgorICAgICAgICAgIFBzaUphdmFUb2tlbjpBVCgnQCcpCisgICAgICAgICAgUHNpRXJyb3JFbGVtZW50OkNsYXNzIHJlZmVyZW5jZSBleHBlY3RlZAorICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgICAgUHNpQW5ub3RhdGlvblBhcmFtZXRlckxpc3QKKyAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgUHNpSmF2YVRva2VuOkxUKCc8JykKKyAgICAgICAgUHNpVHlwZVBhcmFtZXRlcjpjYXJldAorICAgICAgICAgIFBzaUlkZW50aWZpZXI6Y2FyZXQoJ2NhcmV0JykKKyAgICAgICAgICBQc2lFbGVtZW50KEVYVEVORFNfQk9VTkRfTElTVCkKKyAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICBQc2lKYXZhVG9rZW46R1QoJz4nKQorICAgICAgUHNpSWRlbnRpZmllcjpDb25maWd1cmF0aW9uKCdDb25maWd1cmF0aW9uJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KGFmdGVyVGVzdENsYXNzPXRydWUpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgUHNpVHlwZUVsZW1lbnQ6YWZ0ZXJUZXN0Q2xhc3MKKyAgICAgICAgICBQc2lKYXZhQ29kZVJlZmVyZW5jZUVsZW1lbnQ6YWZ0ZXJUZXN0Q2xhc3MKKyAgICAgICAgICAgIFBzaUlkZW50aWZpZXI6YWZ0ZXJUZXN0Q2xhc3MoJ2FmdGVyVGVzdENsYXNzJykKKyAgICAgICAgICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgIFBzaUVycm9yRWxlbWVudDpJZGVudGlmaWVyIGV4cGVjdGVkCisgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgIFBzaUVycm9yRWxlbWVudDonLCcgZXhwZWN0ZWQKKyAgICAgICAgICBQc2lKYXZhVG9rZW46RVEoJz0nKQorICAgICAgICAgIFBzaUphdmFUb2tlbjpUUlVFX0tFWVdPUkQoJ3RydWUnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUVycm9yRWxlbWVudDoneycgb3IgJzsnIGV4cGVjdGVkCisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVdoaXRlU3BhY2UoJ1xuICAnKQorICAgIFBzaU1ldGhvZDphZnRlcjEKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDpwdWJsaWMKKyAgICAgICAgUHNpS2V5d29yZDpwdWJsaWMoJ3B1YmxpYycpCisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmFmdGVyMSgnYWZ0ZXIxJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gICcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuJykKKyAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2RlY2xhcmF0aW9uUGFyc2luZy9tZXRob2QvRXJyb3JzMy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9kZWNsYXJhdGlvblBhcnNpbmcvbWV0aG9kL0Vycm9yczMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOGVhZGFiCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9kZWNsYXJhdGlvblBhcnNpbmcvbWV0aG9kL0Vycm9yczMuamF2YQpAQCAtMCwwICsxLDMgQEAKK3B1YmxpYyBjbGFzcyBUZXN0IHsKKyAgIHZvaWQgZm9vKDxjYXJldD4KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2RlY2xhcmF0aW9uUGFyc2luZy9tZXRob2QvRXJyb3JzMy50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2RlY2xhcmF0aW9uUGFyc2luZy9tZXRob2QvRXJyb3JzMy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGEwZTI2OQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZGVjbGFyYXRpb25QYXJzaW5nL21ldGhvZC9FcnJvcnMzLnR4dApAQCAtMCwwICsxLDUxIEBACitQc2lKYXZhRmlsZTpFcnJvcnMzLmphdmEKKyAgUHNpSW1wb3J0TGlzdAorICAgIDxlbXB0eSBsaXN0PgorICBQc2lDbGFzczpUZXN0CisgICAgUHNpTW9kaWZpZXJMaXN0OnB1YmxpYworICAgICAgUHNpS2V5d29yZDpwdWJsaWMoJ3B1YmxpYycpCisgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgUHNpS2V5d29yZDpjbGFzcygnY2xhc3MnKQorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaUlkZW50aWZpZXI6VGVzdCgnVGVzdCcpCisgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuICAgJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooPGNhcmV0PgorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lFcnJvckVsZW1lbnQ6UGFyYW1ldGVyIGV4cGVjdGVkCisgICAgICAgICAgUHNpSmF2YVRva2VuOkxUKCc8JykKKyAgICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICBQc2lUeXBlRWxlbWVudDpjYXJldAorICAgICAgICAgIFBzaUphdmFDb2RlUmVmZXJlbmNlRWxlbWVudDpjYXJldAorICAgICAgICAgICAgUHNpSWRlbnRpZmllcjpjYXJldCgnY2FyZXQnKQorICAgICAgICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgUHNpRXJyb3JFbGVtZW50OklkZW50aWZpZXIgZXhwZWN0ZWQKKyAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgUHNpRXJyb3JFbGVtZW50OicsJyBleHBlY3RlZAorICAgICAgICAgIFBzaUphdmFUb2tlbjpHVCgnPicpCisgICAgICAgIFBzaUVycm9yRWxlbWVudDonKScgZXhwZWN0ZWQKKyAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lFcnJvckVsZW1lbnQ6J3snIG9yICc7JyBleHBlY3RlZAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lXaGl0ZVNwYWNlKCdcbicpCisgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9kZWNsYXJhdGlvblBhcnNpbmcvbWV0aG9kL0dlbmVyaWNNZXRob2QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZGVjbGFyYXRpb25QYXJzaW5nL21ldGhvZC9HZW5lcmljTWV0aG9kLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGUzYWE5YQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZGVjbGFyYXRpb25QYXJzaW5nL21ldGhvZC9HZW5lcmljTWV0aG9kLmphdmEKQEAgLTAsMCArMSw4IEBACitwdWJsaWMgY2xhc3MgVGVzdCB7CisgICAgcHVibGljIHN0YXRpYyA8RT4gdGVzdCgpIHsKKyAgICB9CisgICAgPEU+IHZvaWQgdGVzdDEoKSB7CisgICAgfQorICAgIDxFMSBleHRlbmRzIEludGVnZXIsIEUyIGV4dGVuZHMgUnVubmFibGU+IFN0cmluZyB0ZXN0MigpIHsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9kZWNsYXJhdGlvblBhcnNpbmcvbWV0aG9kL0dlbmVyaWNNZXRob2QudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9kZWNsYXJhdGlvblBhcnNpbmcvbWV0aG9kL0dlbmVyaWNNZXRob2QudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRmYzRkNzMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2RlY2xhcmF0aW9uUGFyc2luZy9tZXRob2QvR2VuZXJpY01ldGhvZC50eHQKQEAgLTAsMCArMSwxMTkgQEAKK1BzaUphdmFGaWxlOkdlbmVyaWNNZXRob2QuamF2YQorICBQc2lJbXBvcnRMaXN0CisgICAgPGVtcHR5IGxpc3Q+CisgIFBzaUNsYXNzOlRlc3QKKyAgICBQc2lNb2RpZmllckxpc3Q6cHVibGljCisgICAgICBQc2lLZXl3b3JkOnB1YmxpYygncHVibGljJykKKyAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICBQc2lLZXl3b3JkOmNsYXNzKCdjbGFzcycpCisgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgUHNpSWRlbnRpZmllcjpUZXN0KCdUZXN0JykKKyAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgUHNpV2hpdGVTcGFjZSgnXG4gICAgJykKKyAgICBQc2lNZXRob2Q6dGVzdAorICAgICAgUHNpTW9kaWZpZXJMaXN0OnB1YmxpYyBzdGF0aWMKKyAgICAgICAgUHNpS2V5d29yZDpwdWJsaWMoJ3B1YmxpYycpCisgICAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgICBQc2lLZXl3b3JkOnN0YXRpYygnc3RhdGljJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgUHNpSmF2YVRva2VuOkxUKCc8JykKKyAgICAgICAgUHNpVHlwZVBhcmFtZXRlcjpFCisgICAgICAgICAgUHNpSWRlbnRpZmllcjpFKCdFJykKKyAgICAgICAgICBQc2lFbGVtZW50KEVYVEVORFNfQk9VTkRfTElTVCkKKyAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICBQc2lKYXZhVG9rZW46R1QoJz4nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOnRlc3QoJ3Rlc3QnKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAgICAnKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcbiAgICAnKQorICAgIFBzaU1ldGhvZDp0ZXN0MQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIFBzaUphdmFUb2tlbjpMVCgnPCcpCisgICAgICAgIFBzaVR5cGVQYXJhbWV0ZXI6RQorICAgICAgICAgIFBzaUlkZW50aWZpZXI6RSgnRScpCisgICAgICAgICAgUHNpRWxlbWVudChFWFRFTkRTX0JPVU5EX0xJU1QpCisgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgUHNpSmF2YVRva2VuOkdUKCc+JykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOnRlc3QxKCd0ZXN0MScpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICAgICcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuICAgICcpCisgICAgUHNpTWV0aG9kOnRlc3QyCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgUHNpSmF2YVRva2VuOkxUKCc8JykKKyAgICAgICAgUHNpVHlwZVBhcmFtZXRlcjpFMQorICAgICAgICAgIFBzaUlkZW50aWZpZXI6RTEoJ0UxJykKKyAgICAgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgICAgICBQc2lFbGVtZW50KEVYVEVORFNfQk9VTkRfTElTVCkKKyAgICAgICAgICAgIFBzaUtleXdvcmQ6ZXh0ZW5kcygnZXh0ZW5kcycpCisgICAgICAgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgICAgICAgIFBzaUphdmFDb2RlUmVmZXJlbmNlRWxlbWVudDpJbnRlZ2VyCisgICAgICAgICAgICAgIFBzaUlkZW50aWZpZXI6SW50ZWdlcignSW50ZWdlcicpCisgICAgICAgICAgICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgUHNpSmF2YVRva2VuOkNPTU1BKCcsJykKKyAgICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICAgIFBzaVR5cGVQYXJhbWV0ZXI6RTIKKyAgICAgICAgICBQc2lJZGVudGlmaWVyOkUyKCdFMicpCisgICAgICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICAgICAgUHNpRWxlbWVudChFWFRFTkRTX0JPVU5EX0xJU1QpCisgICAgICAgICAgICBQc2lLZXl3b3JkOmV4dGVuZHMoJ2V4dGVuZHMnKQorICAgICAgICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICAgICAgICBQc2lKYXZhQ29kZVJlZmVyZW5jZUVsZW1lbnQ6UnVubmFibGUKKyAgICAgICAgICAgICAgUHNpSWRlbnRpZmllcjpSdW5uYWJsZSgnUnVubmFibGUnKQorICAgICAgICAgICAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgIFBzaUphdmFUb2tlbjpHVCgnPicpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaVR5cGVFbGVtZW50OlN0cmluZworICAgICAgICBQc2lKYXZhQ29kZVJlZmVyZW5jZUVsZW1lbnQ6U3RyaW5nCisgICAgICAgICAgUHNpSWRlbnRpZmllcjpTdHJpbmcoJ1N0cmluZycpCisgICAgICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6dGVzdDIoJ3Rlc3QyJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gICAgJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG4nKQorICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9kZWNsYXJhdGlvblBhcnNpbmcvbWV0aG9kL0dlbmVyaWNNZXRob2RFcnJvcnMuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZGVjbGFyYXRpb25QYXJzaW5nL21ldGhvZC9HZW5lcmljTWV0aG9kRXJyb3JzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWY4OWFmNgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZGVjbGFyYXRpb25QYXJzaW5nL21ldGhvZC9HZW5lcmljTWV0aG9kRXJyb3JzLmphdmEKQEAgLTAsMCArMSw0IEBACitwdWJsaWMgY2xhc3MgVGVzdCB7CisgICAgPEVycm9yIHNzcyAvPiB0ZXN0IDxlcnJvcj4oKSB7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZGVjbGFyYXRpb25QYXJzaW5nL21ldGhvZC9HZW5lcmljTWV0aG9kRXJyb3JzLnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZGVjbGFyYXRpb25QYXJzaW5nL21ldGhvZC9HZW5lcmljTWV0aG9kRXJyb3JzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iODAzZWM3Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9kZWNsYXJhdGlvblBhcnNpbmcvbWV0aG9kL0dlbmVyaWNNZXRob2RFcnJvcnMudHh0CkBAIC0wLDAgKzEsNjYgQEAKK1BzaUphdmFGaWxlOkdlbmVyaWNNZXRob2RFcnJvcnMuamF2YQorICBQc2lJbXBvcnRMaXN0CisgICAgPGVtcHR5IGxpc3Q+CisgIFBzaUNsYXNzOlRlc3QKKyAgICBQc2lNb2RpZmllckxpc3Q6cHVibGljCisgICAgICBQc2lLZXl3b3JkOnB1YmxpYygncHVibGljJykKKyAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICBQc2lLZXl3b3JkOmNsYXNzKCdjbGFzcycpCisgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgUHNpSWRlbnRpZmllcjpUZXN0KCdUZXN0JykKKyAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgUHNpV2hpdGVTcGFjZSgnXG4gICAgJykKKyAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lFcnJvckVsZW1lbnQ6VW5leHBlY3RlZCB0b2tlbgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgUHNpSmF2YVRva2VuOkxUKCc8JykKKyAgICAgICAgUHNpVHlwZVBhcmFtZXRlcjpFcnJvcgorICAgICAgICAgIFBzaUlkZW50aWZpZXI6RXJyb3IoJ0Vycm9yJykKKyAgICAgICAgICBQc2lFbGVtZW50KEVYVEVORFNfQk9VTkRfTElTVCkKKyAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICBQc2lFcnJvckVsZW1lbnQ6Jz4nIGV4cGVjdGVkLgorICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaVR5cGVFbGVtZW50OnNzcworICAgICAgUHNpSmF2YUNvZGVSZWZlcmVuY2VFbGVtZW50OnNzcworICAgICAgICBQc2lJZGVudGlmaWVyOnNzcygnc3NzJykKKyAgICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaUVycm9yRWxlbWVudDpJZGVudGlmaWVyIGV4cGVjdGVkCisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICBQc2lFcnJvckVsZW1lbnQ6VW5leHBlY3RlZCB0b2tlbgorICAgICAgUHNpSmF2YVRva2VuOkRJVignLycpCisgICAgICBQc2lKYXZhVG9rZW46R1QoJz4nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lKYXZhQ29kZVJlZmVyZW5jZUVsZW1lbnQ6dGVzdCA8ZXJyb3I+CisgICAgICAgIFBzaUlkZW50aWZpZXI6dGVzdCgndGVzdCcpCisgICAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICAgICAgUHNpSmF2YVRva2VuOkxUKCc8JykKKyAgICAgICAgICBQc2lUeXBlRWxlbWVudDplcnJvcgorICAgICAgICAgICAgUHNpSmF2YUNvZGVSZWZlcmVuY2VFbGVtZW50OmVycm9yCisgICAgICAgICAgICAgIFBzaUlkZW50aWZpZXI6ZXJyb3IoJ2Vycm9yJykKKyAgICAgICAgICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICAgIFBzaUphdmFUb2tlbjpHVCgnPicpCisgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICBQc2lDbGFzc0luaXRpYWxpemVyCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAgICAnKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcbicpCisgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9kZWNsYXJhdGlvblBhcnNpbmcvbWV0aG9kL05vTG9jYWxNZXRob2QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZGVjbGFyYXRpb25QYXJzaW5nL21ldGhvZC9Ob0xvY2FsTWV0aG9kLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjA0Mzk5MgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZGVjbGFyYXRpb25QYXJzaW5nL21ldGhvZC9Ob0xvY2FsTWV0aG9kLmphdmEKQEAgLTAsMCArMSw2IEBACitjbGFzcyBBeworICB7CisgICAgYS5iCisgICAgZm9vKCk7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2RlY2xhcmF0aW9uUGFyc2luZy9tZXRob2QvTm9Mb2NhbE1ldGhvZC50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2RlY2xhcmF0aW9uUGFyc2luZy9tZXRob2QvTm9Mb2NhbE1ldGhvZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjQ0YjJiNQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZGVjbGFyYXRpb25QYXJzaW5nL21ldGhvZC9Ob0xvY2FsTWV0aG9kLnR4dApAQCAtMCwwICsxLDUwIEBACitQc2lKYXZhRmlsZTpOb0xvY2FsTWV0aG9kLmphdmEKKyAgUHNpSW1wb3J0TGlzdAorICAgIDxlbXB0eSBsaXN0PgorICBQc2lDbGFzczpBCisgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpS2V5d29yZDpjbGFzcygnY2xhc3MnKQorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaUlkZW50aWZpZXI6QSgnQScpCisgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuICAnKQorICAgIFBzaUNsYXNzSW5pdGlhbGl6ZXIKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICAgICcpCisgICAgICAgIFBzaUV4cHJlc3Npb25TdGF0ZW1lbnQKKyAgICAgICAgICBQc2lSZWZlcmVuY2VFeHByZXNzaW9uOmEuYgorICAgICAgICAgICAgUHNpUmVmZXJlbmNlRXhwcmVzc2lvbjphCisgICAgICAgICAgICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgICAgICAgUHNpSWRlbnRpZmllcjphKCdhJykKKyAgICAgICAgICAgIFBzaUphdmFUb2tlbjpET1QoJy4nKQorICAgICAgICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgICAgIFBzaUlkZW50aWZpZXI6YignYicpCisgICAgICAgICAgUHNpRXJyb3JFbGVtZW50Oic7JyBleHBlY3RlZAorICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICAgICcpCisgICAgICAgIFBzaUV4cHJlc3Npb25TdGF0ZW1lbnQKKyAgICAgICAgICBQc2lNZXRob2RDYWxsRXhwcmVzc2lvbjpmb28oKQorICAgICAgICAgICAgUHNpUmVmZXJlbmNlRXhwcmVzc2lvbjpmb28KKyAgICAgICAgICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICAgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgICAgICAgIFBzaUV4cHJlc3Npb25MaXN0CisgICAgICAgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICAgICAgUHNpSmF2YVRva2VuOlNFTUlDT0xPTignOycpCisgICAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICAnKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcbicpCisgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9kZWNsYXJhdGlvblBhcnNpbmcvbWV0aG9kL05vcm1hbDEuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZGVjbGFyYXRpb25QYXJzaW5nL21ldGhvZC9Ob3JtYWwxLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGU0Y2EwNwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZGVjbGFyYXRpb25QYXJzaW5nL21ldGhvZC9Ob3JtYWwxLmphdmEKQEAgLTAsMCArMSw0IEBACitjbGFzcyBBeworICB2b2lkIGYoKXsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZGVjbGFyYXRpb25QYXJzaW5nL21ldGhvZC9Ob3JtYWwxLnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZGVjbGFyYXRpb25QYXJzaW5nL21ldGhvZC9Ob3JtYWwxLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NWVhNTFmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9kZWNsYXJhdGlvblBhcnNpbmcvbWV0aG9kL05vcm1hbDEudHh0CkBAIC0wLDAgKzEsMzcgQEAKK1BzaUphdmFGaWxlOk5vcm1hbDEuamF2YQorICBQc2lJbXBvcnRMaXN0CisgICAgPGVtcHR5IGxpc3Q+CisgIFBzaUNsYXNzOkEKKyAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lLZXl3b3JkOmNsYXNzKCdjbGFzcycpCisgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgUHNpSWRlbnRpZmllcjpBKCdBJykKKyAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgUHNpV2hpdGVTcGFjZSgnXG4gICcpCisgICAgUHNpTWV0aG9kOmYKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmKCdmJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICAnKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcbicpCisgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2RlY2xhcmF0aW9uUGFyc2luZy9tZXRob2QvTm9ybWFsMi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9kZWNsYXJhdGlvblBhcnNpbmcvbWV0aG9kL05vcm1hbDIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMGJjMjlmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9kZWNsYXJhdGlvblBhcnNpbmcvbWV0aG9kL05vcm1hbDIuamF2YQpAQCAtMCwwICsxLDMgQEAKK2NsYXNzIEF7CisgIHZvaWQgZigpOworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZGVjbGFyYXRpb25QYXJzaW5nL21ldGhvZC9Ob3JtYWwyLnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZGVjbGFyYXRpb25QYXJzaW5nL21ldGhvZC9Ob3JtYWwyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kODYzMzBhCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9kZWNsYXJhdGlvblBhcnNpbmcvbWV0aG9kL05vcm1hbDIudHh0CkBAIC0wLDAgKzEsMzQgQEAKK1BzaUphdmFGaWxlOk5vcm1hbDIuamF2YQorICBQc2lJbXBvcnRMaXN0CisgICAgPGVtcHR5IGxpc3Q+CisgIFBzaUNsYXNzOkEKKyAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lLZXl3b3JkOmNsYXNzKCdjbGFzcycpCisgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgUHNpSWRlbnRpZmllcjpBKCdBJykKKyAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgUHNpV2hpdGVTcGFjZSgnXG4gICcpCisgICAgUHNpTWV0aG9kOmYKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmKCdmJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lKYXZhVG9rZW46U0VNSUNPTE9OKCc7JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcbicpCisgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2RlY2xhcmF0aW9uUGFyc2luZy9tZXRob2QvVW5jbG9zZWQxLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2RlY2xhcmF0aW9uUGFyc2luZy9tZXRob2QvVW5jbG9zZWQxLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzU2ZjU4NgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZGVjbGFyYXRpb25QYXJzaW5nL21ldGhvZC9VbmNsb3NlZDEuamF2YQpAQCAtMCwwICsxLDMgQEAKK2NsYXNzIEF7CisgIHZvaWQgZigpCit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9kZWNsYXJhdGlvblBhcnNpbmcvbWV0aG9kL1VuY2xvc2VkMS50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2RlY2xhcmF0aW9uUGFyc2luZy9tZXRob2QvVW5jbG9zZWQxLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZmEwZDg2Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9kZWNsYXJhdGlvblBhcnNpbmcvbWV0aG9kL1VuY2xvc2VkMS50eHQKQEAgLTAsMCArMSwzNSBAQAorUHNpSmF2YUZpbGU6VW5jbG9zZWQxLmphdmEKKyAgUHNpSW1wb3J0TGlzdAorICAgIDxlbXB0eSBsaXN0PgorICBQc2lDbGFzczpBCisgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpS2V5d29yZDpjbGFzcygnY2xhc3MnKQorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaUlkZW50aWZpZXI6QSgnQScpCisgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuICAnKQorICAgIFBzaU1ldGhvZDpmCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6ZignZicpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpRXJyb3JFbGVtZW50Oid7JyBvciAnOycgZXhwZWN0ZWQKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpV2hpdGVTcGFjZSgnXG4nKQorICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9kZWNsYXJhdGlvblBhcnNpbmcvbWV0aG9kL1VuY2xvc2VkMi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9kZWNsYXJhdGlvblBhcnNpbmcvbWV0aG9kL1VuY2xvc2VkMi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQzNzBmZTQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2RlY2xhcmF0aW9uUGFyc2luZy9tZXRob2QvVW5jbG9zZWQyLmphdmEKQEAgLTAsMCArMSwzIEBACitjbGFzcyBBeworICB2b2lkIGYoCit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9kZWNsYXJhdGlvblBhcnNpbmcvbWV0aG9kL1VuY2xvc2VkMi50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2RlY2xhcmF0aW9uUGFyc2luZy9tZXRob2QvVW5jbG9zZWQyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NWZiYWE0Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9kZWNsYXJhdGlvblBhcnNpbmcvbWV0aG9kL1VuY2xvc2VkMi50eHQKQEAgLTAsMCArMSwzNiBAQAorUHNpSmF2YUZpbGU6VW5jbG9zZWQyLmphdmEKKyAgUHNpSW1wb3J0TGlzdAorICAgIDxlbXB0eSBsaXN0PgorICBQc2lDbGFzczpBCisgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpS2V5d29yZDpjbGFzcygnY2xhc3MnKQorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaUlkZW50aWZpZXI6QSgnQScpCisgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuICAnKQorICAgIFBzaU1ldGhvZDpmCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6ZignZicpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpRXJyb3JFbGVtZW50OicpJyBleHBlY3RlZAorICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUVycm9yRWxlbWVudDoneycgb3IgJzsnIGV4cGVjdGVkCisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVdoaXRlU3BhY2UoJ1xuJykKKyAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2RlY2xhcmF0aW9uUGFyc2luZy9tZXRob2QvVW5jbG9zZWQzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2RlY2xhcmF0aW9uUGFyc2luZy9tZXRob2QvVW5jbG9zZWQzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmM0MGEwMQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZGVjbGFyYXRpb25QYXJzaW5nL21ldGhvZC9VbmNsb3NlZDMuamF2YQpAQCAtMCwwICsxLDQgQEAKK2NsYXNzIEF7CisgIHZvaWQgZigpCisgIHZvaWQgZygpOworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZGVjbGFyYXRpb25QYXJzaW5nL21ldGhvZC9VbmNsb3NlZDMudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9kZWNsYXJhdGlvblBhcnNpbmcvbWV0aG9kL1VuY2xvc2VkMy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmQwMzM4MQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZGVjbGFyYXRpb25QYXJzaW5nL21ldGhvZC9VbmNsb3NlZDMudHh0CkBAIC0wLDAgKzEsNTEgQEAKK1BzaUphdmFGaWxlOlVuY2xvc2VkMy5qYXZhCisgIFBzaUltcG9ydExpc3QKKyAgICA8ZW1wdHkgbGlzdD4KKyAgUHNpQ2xhc3M6QQorICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaUtleXdvcmQ6Y2xhc3MoJ2NsYXNzJykKKyAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICBQc2lJZGVudGlmaWVyOkEoJ0EnKQorICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcbiAgJykKKyAgICBQc2lNZXRob2Q6ZgorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmYoJ2YnKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUVycm9yRWxlbWVudDoneycgb3IgJzsnIGV4cGVjdGVkCisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVdoaXRlU3BhY2UoJ1xuICAnKQorICAgIFBzaU1ldGhvZDpnCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6ZygnZycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpSmF2YVRva2VuOlNFTUlDT0xPTignOycpCisgICAgUHNpV2hpdGVTcGFjZSgnXG4nKQorICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9kZWNsYXJhdGlvblBhcnNpbmcvbWV0aG9kL1VuY2xvc2VkNC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9kZWNsYXJhdGlvblBhcnNpbmcvbWV0aG9kL1VuY2xvc2VkNC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI2N2E1Y2YKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2RlY2xhcmF0aW9uUGFyc2luZy9tZXRob2QvVW5jbG9zZWQ0LmphdmEKQEAgLTAsMCArMSwzIEBACitjbGFzcyBBeworICB2b2lkIGYoaW50IGEKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2RlY2xhcmF0aW9uUGFyc2luZy9tZXRob2QvVW5jbG9zZWQ0LnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZGVjbGFyYXRpb25QYXJzaW5nL21ldGhvZC9VbmNsb3NlZDQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMxMTQ2YTU4Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9kZWNsYXJhdGlvblBhcnNpbmcvbWV0aG9kL1VuY2xvc2VkNC50eHQKQEAgLTAsMCArMSw0MyBAQAorUHNpSmF2YUZpbGU6VW5jbG9zZWQ0LmphdmEKKyAgUHNpSW1wb3J0TGlzdAorICAgIDxlbXB0eSBsaXN0PgorICBQc2lDbGFzczpBCisgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpS2V5d29yZDpjbGFzcygnY2xhc3MnKQorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaUlkZW50aWZpZXI6QSgnQScpCisgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuICAnKQorICAgIFBzaU1ldGhvZDpmCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6ZignZicpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OihpbnQgYQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lQYXJhbWV0ZXI6YQorICAgICAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICAgIFBzaVR5cGVFbGVtZW50OmludAorICAgICAgICAgICAgUHNpS2V5d29yZDppbnQoJ2ludCcpCisgICAgICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICAgICAgUHNpSWRlbnRpZmllcjphKCdhJykKKyAgICAgICAgUHNpRXJyb3JFbGVtZW50OicpJyBleHBlY3RlZAorICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUVycm9yRWxlbWVudDoneycgb3IgJzsnIGV4cGVjdGVkCisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVdoaXRlU3BhY2UoJ1xuJykKKyAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2RlY2xhcmF0aW9uUGFyc2luZy9tZXRob2QvVW5jbG9zZWQ1LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2RlY2xhcmF0aW9uUGFyc2luZy9tZXRob2QvVW5jbG9zZWQ1LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGJmZjhkOAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZGVjbGFyYXRpb25QYXJzaW5nL21ldGhvZC9VbmNsb3NlZDUuamF2YQpAQCAtMCwwICsxLDMgQEAKK2NsYXNzIEF7CisgIHZvaWQgZihpbnQgYSwsCit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9kZWNsYXJhdGlvblBhcnNpbmcvbWV0aG9kL1VuY2xvc2VkNS50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2RlY2xhcmF0aW9uUGFyc2luZy9tZXRob2QvVW5jbG9zZWQ1LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNzc0NDY4Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9kZWNsYXJhdGlvblBhcnNpbmcvbWV0aG9kL1VuY2xvc2VkNS50eHQKQEAgLTAsMCArMSw0NyBAQAorUHNpSmF2YUZpbGU6VW5jbG9zZWQ1LmphdmEKKyAgUHNpSW1wb3J0TGlzdAorICAgIDxlbXB0eSBsaXN0PgorICBQc2lDbGFzczpBCisgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpS2V5d29yZDpjbGFzcygnY2xhc3MnKQorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaUlkZW50aWZpZXI6QSgnQScpCisgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuICAnKQorICAgIFBzaU1ldGhvZDpmCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6ZignZicpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OihpbnQgYSwsCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaVBhcmFtZXRlcjphCisgICAgICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgICAgUHNpVHlwZUVsZW1lbnQ6aW50CisgICAgICAgICAgICBQc2lLZXl3b3JkOmludCgnaW50JykKKyAgICAgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgICAgICBQc2lJZGVudGlmaWVyOmEoJ2EnKQorICAgICAgICBQc2lKYXZhVG9rZW46Q09NTUEoJywnKQorICAgICAgICBQc2lFcnJvckVsZW1lbnQ6UGFyYW1ldGVyIGV4cGVjdGVkCisgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgIFBzaUphdmFUb2tlbjpDT01NQSgnLCcpCisgICAgICAgIFBzaUVycm9yRWxlbWVudDpJZGVudGlmaWVyIG9yIHR5cGUgZXhwZWN0ZWQKKyAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lFcnJvckVsZW1lbnQ6J3snIG9yICc7JyBleHBlY3RlZAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lXaGl0ZVNwYWNlKCdcbicpCisgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9kZWNsYXJhdGlvblBhcnNpbmcvbWV0aG9kL1VuY2xvc2VkNi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9kZWNsYXJhdGlvblBhcnNpbmcvbWV0aG9kL1VuY2xvc2VkNi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY1NTcyMTQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2RlY2xhcmF0aW9uUGFyc2luZy9tZXRob2QvVW5jbG9zZWQ2LmphdmEKQEAgLTAsMCArMSwzIEBACitjbGFzcyBBeworICB2b2lkIGYoaW50IGEsKTsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2RlY2xhcmF0aW9uUGFyc2luZy9tZXRob2QvVW5jbG9zZWQ2LnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZGVjbGFyYXRpb25QYXJzaW5nL21ldGhvZC9VbmNsb3NlZDYudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE2NTNiZDcKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2RlY2xhcmF0aW9uUGFyc2luZy9tZXRob2QvVW5jbG9zZWQ2LnR4dApAQCAtMCwwICsxLDQ0IEBACitQc2lKYXZhRmlsZTpVbmNsb3NlZDYuamF2YQorICBQc2lJbXBvcnRMaXN0CisgICAgPGVtcHR5IGxpc3Q+CisgIFBzaUNsYXNzOkEKKyAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lLZXl3b3JkOmNsYXNzKCdjbGFzcycpCisgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgUHNpSWRlbnRpZmllcjpBKCdBJykKKyAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgUHNpV2hpdGVTcGFjZSgnXG4gICcpCisgICAgUHNpTWV0aG9kOmYKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmKCdmJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KGludCBhLCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpUGFyYW1ldGVyOmEKKyAgICAgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgICBQc2lUeXBlRWxlbWVudDppbnQKKyAgICAgICAgICAgIFBzaUtleXdvcmQ6aW50KCdpbnQnKQorICAgICAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgICAgIFBzaUlkZW50aWZpZXI6YSgnYScpCisgICAgICAgIFBzaUphdmFUb2tlbjpDT01NQSgnLCcpCisgICAgICAgIFBzaUVycm9yRWxlbWVudDpJZGVudGlmaWVyIG9yIHR5cGUgZXhwZWN0ZWQKKyAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lKYXZhVG9rZW46U0VNSUNPTE9OKCc7JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcbicpCisgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2RlY2xhcmF0aW9uUGFyc2luZy9tZXRob2QvV2lsZGNhcmRQYXJzaW5nLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2RlY2xhcmF0aW9uUGFyc2luZy9tZXRob2QvV2lsZGNhcmRQYXJzaW5nLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWU0Njg2YgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZGVjbGFyYXRpb25QYXJzaW5nL21ldGhvZC9XaWxkY2FyZFBhcnNpbmcuamF2YQpAQCAtMCwwICsxLDYgQEAKK2NsYXNzIEMgeworICAgIExpc3Q8PyBleHRlbmRzIEI+IHgoQ29sbGVjdGlvbjw/IHN1cGVyIEI+IHgpIHsKKyAgICAgICAgWDw/PiB4ID0gbmV3IFg8Qj4oKTsKKyAgICAgICAgWDw/IHN1cGVyIFo8PyBleHRlbmRzIEI+PiBrOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2RlY2xhcmF0aW9uUGFyc2luZy9tZXRob2QvV2lsZGNhcmRQYXJzaW5nLnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZGVjbGFyYXRpb25QYXJzaW5nL21ldGhvZC9XaWxkY2FyZFBhcnNpbmcudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdiMmMyNGUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2RlY2xhcmF0aW9uUGFyc2luZy9tZXRob2QvV2lsZGNhcmRQYXJzaW5nLnR4dApAQCAtMCwwICsxLDE0NiBAQAorUHNpSmF2YUZpbGU6V2lsZGNhcmRQYXJzaW5nLmphdmEKKyAgUHNpSW1wb3J0TGlzdAorICAgIDxlbXB0eSBsaXN0PgorICBQc2lDbGFzczpDCisgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpS2V5d29yZDpjbGFzcygnY2xhc3MnKQorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaUlkZW50aWZpZXI6QygnQycpCisgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuICAgICcpCisgICAgUHNpTWV0aG9kOngKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50Okxpc3Q8PyBleHRlbmRzIEI+CisgICAgICAgIFBzaUphdmFDb2RlUmVmZXJlbmNlRWxlbWVudDpMaXN0PD8gZXh0ZW5kcyBCPgorICAgICAgICAgIFBzaUlkZW50aWZpZXI6TGlzdCgnTGlzdCcpCisgICAgICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICAgICAgUHNpSmF2YVRva2VuOkxUKCc8JykKKyAgICAgICAgICAgIFBzaVR5cGVFbGVtZW50Oj8gZXh0ZW5kcyBCCisgICAgICAgICAgICAgIFBzaUphdmFUb2tlbjpRVUVTVCgnPycpCisgICAgICAgICAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgICAgICAgICBQc2lLZXl3b3JkOmV4dGVuZHMoJ2V4dGVuZHMnKQorICAgICAgICAgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgICAgICAgICAgUHNpVHlwZUVsZW1lbnQ6QgorICAgICAgICAgICAgICAgIFBzaUphdmFDb2RlUmVmZXJlbmNlRWxlbWVudDpCCisgICAgICAgICAgICAgICAgICBQc2lJZGVudGlmaWVyOkIoJ0InKQorICAgICAgICAgICAgICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICAgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgICAgIFBzaUphdmFUb2tlbjpHVCgnPicpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6eCgneCcpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OihDb2xsZWN0aW9uPD8gc3VwZXIgQj4geCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpUGFyYW1ldGVyOngKKyAgICAgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgICBQc2lUeXBlRWxlbWVudDpDb2xsZWN0aW9uPD8gc3VwZXIgQj4KKyAgICAgICAgICAgIFBzaUphdmFDb2RlUmVmZXJlbmNlRWxlbWVudDpDb2xsZWN0aW9uPD8gc3VwZXIgQj4KKyAgICAgICAgICAgICAgUHNpSWRlbnRpZmllcjpDb2xsZWN0aW9uKCdDb2xsZWN0aW9uJykKKyAgICAgICAgICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICAgICAgICAgIFBzaUphdmFUb2tlbjpMVCgnPCcpCisgICAgICAgICAgICAgICAgUHNpVHlwZUVsZW1lbnQ6PyBzdXBlciBCCisgICAgICAgICAgICAgICAgICBQc2lKYXZhVG9rZW46UVVFU1QoJz8nKQorICAgICAgICAgICAgICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICAgICAgICAgICAgICBQc2lLZXl3b3JkOnN1cGVyKCdzdXBlcicpCisgICAgICAgICAgICAgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgICAgICAgICAgICAgIFBzaVR5cGVFbGVtZW50OkIKKyAgICAgICAgICAgICAgICAgICAgUHNpSmF2YUNvZGVSZWZlcmVuY2VFbGVtZW50OkIKKyAgICAgICAgICAgICAgICAgICAgICBQc2lJZGVudGlmaWVyOkIoJ0InKQorICAgICAgICAgICAgICAgICAgICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgICAgICAgICAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICAgICAgICAgIFBzaUphdmFUb2tlbjpHVCgnPicpCisgICAgICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICAgICAgUHNpSWRlbnRpZmllcjp4KCd4JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gICAgICAgICcpCisgICAgICAgIFBzaURlY2xhcmF0aW9uU3RhdGVtZW50CisgICAgICAgICAgUHNpTG9jYWxWYXJpYWJsZTp4CisgICAgICAgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICAgICAgUHNpVHlwZUVsZW1lbnQ6WDw/PgorICAgICAgICAgICAgICBQc2lKYXZhQ29kZVJlZmVyZW5jZUVsZW1lbnQ6WDw/PgorICAgICAgICAgICAgICAgIFBzaUlkZW50aWZpZXI6WCgnWCcpCisgICAgICAgICAgICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICAgICAgICAgICAgUHNpSmF2YVRva2VuOkxUKCc8JykKKyAgICAgICAgICAgICAgICAgIFBzaVR5cGVFbGVtZW50Oj8KKyAgICAgICAgICAgICAgICAgICAgUHNpSmF2YVRva2VuOlFVRVNUKCc/JykKKyAgICAgICAgICAgICAgICAgIFBzaUphdmFUb2tlbjpHVCgnPicpCisgICAgICAgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgICAgICAgIFBzaUlkZW50aWZpZXI6eCgneCcpCisgICAgICAgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgICAgICAgIFBzaUphdmFUb2tlbjpFUSgnPScpCisgICAgICAgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgICAgICAgIFBzaU5ld0V4cHJlc3Npb246bmV3IFg8Qj4oKQorICAgICAgICAgICAgICBQc2lLZXl3b3JkOm5ldygnbmV3JykKKyAgICAgICAgICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICAgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgICAgICAgICAgUHNpSmF2YUNvZGVSZWZlcmVuY2VFbGVtZW50Olg8Qj4KKyAgICAgICAgICAgICAgICBQc2lJZGVudGlmaWVyOlgoJ1gnKQorICAgICAgICAgICAgICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgICAgICAgICAgICAgIFBzaUphdmFUb2tlbjpMVCgnPCcpCisgICAgICAgICAgICAgICAgICBQc2lUeXBlRWxlbWVudDpCCisgICAgICAgICAgICAgICAgICAgIFBzaUphdmFDb2RlUmVmZXJlbmNlRWxlbWVudDpCCisgICAgICAgICAgICAgICAgICAgICAgUHNpSWRlbnRpZmllcjpCKCdCJykKKyAgICAgICAgICAgICAgICAgICAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICAgICAgICAgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgICAgICAgICAgIFBzaUphdmFUb2tlbjpHVCgnPicpCisgICAgICAgICAgICAgIFBzaUV4cHJlc3Npb25MaXN0CisgICAgICAgICAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgICAgICAgUHNpSmF2YVRva2VuOlNFTUlDT0xPTignOycpCisgICAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICAgICAgICAnKQorICAgICAgICBQc2lEZWNsYXJhdGlvblN0YXRlbWVudAorICAgICAgICAgIFBzaUxvY2FsVmFyaWFibGU6aworICAgICAgICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgICAgIFBzaVR5cGVFbGVtZW50Olg8PyBzdXBlciBaPD8gZXh0ZW5kcyBCPj4KKyAgICAgICAgICAgICAgUHNpSmF2YUNvZGVSZWZlcmVuY2VFbGVtZW50Olg8PyBzdXBlciBaPD8gZXh0ZW5kcyBCPj4KKyAgICAgICAgICAgICAgICBQc2lJZGVudGlmaWVyOlgoJ1gnKQorICAgICAgICAgICAgICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgICAgICAgICAgICAgIFBzaUphdmFUb2tlbjpMVCgnPCcpCisgICAgICAgICAgICAgICAgICBQc2lUeXBlRWxlbWVudDo/IHN1cGVyIFo8PyBleHRlbmRzIEI+CisgICAgICAgICAgICAgICAgICAgIFBzaUphdmFUb2tlbjpRVUVTVCgnPycpCisgICAgICAgICAgICAgICAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgICAgICAgICAgICAgICBQc2lLZXl3b3JkOnN1cGVyKCdzdXBlcicpCisgICAgICAgICAgICAgICAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgICAgICAgICAgICAgICBQc2lUeXBlRWxlbWVudDpaPD8gZXh0ZW5kcyBCPgorICAgICAgICAgICAgICAgICAgICAgIFBzaUphdmFDb2RlUmVmZXJlbmNlRWxlbWVudDpaPD8gZXh0ZW5kcyBCPgorICAgICAgICAgICAgICAgICAgICAgICAgUHNpSWRlbnRpZmllcjpaKCdaJykKKyAgICAgICAgICAgICAgICAgICAgICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgICAgICAgICAgICAgICAgICAgICAgUHNpSmF2YVRva2VuOkxUKCc8JykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgUHNpVHlwZUVsZW1lbnQ6PyBleHRlbmRzIEIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBQc2lKYXZhVG9rZW46UVVFU1QoJz8nKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBzaUtleXdvcmQ6ZXh0ZW5kcygnZXh0ZW5kcycpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHNpVHlwZUVsZW1lbnQ6QgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHNpSmF2YUNvZGVSZWZlcmVuY2VFbGVtZW50OkIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHNpSWRlbnRpZmllcjpCKCdCJykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICAgICAgICAgICAgICAgICAgICBQc2lKYXZhVG9rZW46R1QoJz4nKQorICAgICAgICAgICAgICAgICAgUHNpSmF2YVRva2VuOkdUKCc+JykKKyAgICAgICAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgICAgICAgUHNpSWRlbnRpZmllcjprKCdrJykKKyAgICAgICAgICAgIFBzaUphdmFUb2tlbjpTRU1JQ09MT04oJzsnKQorICAgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAgICAnKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcbicpCisgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2V4cHJlc3Npb25QYXJzaW5nL0FuZDAuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZXhwcmVzc2lvblBhcnNpbmcvQW5kMC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNjZjEwMGMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2V4cHJlc3Npb25QYXJzaW5nL0FuZDAuamF2YQpAQCAtMCwwICsxLDUgQEAKK2NsYXNzIEZvb3sKKyAgeworICAgIHJldHVybiBhICYgYiAmIGM7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2V4cHJlc3Npb25QYXJzaW5nL0FuZDAudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9leHByZXNzaW9uUGFyc2luZy9BbmQwLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNjM4OGE5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9leHByZXNzaW9uUGFyc2luZy9BbmQwLnR4dApAQCAtMCwwICsxLDUwIEBACitQc2lKYXZhRmlsZTpBbmQwLmphdmEKKyAgUHNpSW1wb3J0TGlzdAorICAgIDxlbXB0eSBsaXN0PgorICBQc2lDbGFzczpGb28KKyAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lLZXl3b3JkOmNsYXNzKCdjbGFzcycpCisgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgUHNpSWRlbnRpZmllcjpGb28oJ0ZvbycpCisgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuICAnKQorICAgIFBzaUNsYXNzSW5pdGlhbGl6ZXIKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICAgICcpCisgICAgICAgIFBzaVJldHVyblN0YXRlbWVudAorICAgICAgICAgIFBzaUtleXdvcmQ6cmV0dXJuKCdyZXR1cm4nKQorICAgICAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgICAgIFBzaVBvbHlhZGljRXhwcmVzc2lvbjogYSAmIGIgJiBjCisgICAgICAgICAgICBQc2lSZWZlcmVuY2VFeHByZXNzaW9uOmEKKyAgICAgICAgICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICAgICAgICBQc2lJZGVudGlmaWVyOmEoJ2EnKQorICAgICAgICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICAgICAgICBQc2lKYXZhVG9rZW46QU5EKCcmJykKKyAgICAgICAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgICAgICAgUHNpUmVmZXJlbmNlRXhwcmVzc2lvbjpiCisgICAgICAgICAgICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgICAgICAgUHNpSWRlbnRpZmllcjpiKCdiJykKKyAgICAgICAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgICAgICAgUHNpSmF2YVRva2VuOkFORCgnJicpCisgICAgICAgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgICAgICAgIFBzaVJlZmVyZW5jZUV4cHJlc3Npb246YworICAgICAgICAgICAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgICAgICAgIFBzaUlkZW50aWZpZXI6YygnYycpCisgICAgICAgICAgUHNpSmF2YVRva2VuOlNFTUlDT0xPTignOycpCisgICAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICAnKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcbicpCisgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2V4cHJlc3Npb25QYXJzaW5nL0FuZDEuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZXhwcmVzc2lvblBhcnNpbmcvQW5kMS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ2MmQ5NGUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2V4cHJlc3Npb25QYXJzaW5nL0FuZDEuamF2YQpAQCAtMCwwICsxLDUgQEAKK2NsYXNzIEZvb3sKKyAgeworICAgICBhICYKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZXhwcmVzc2lvblBhcnNpbmcvQW5kMS50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2V4cHJlc3Npb25QYXJzaW5nL0FuZDEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc3YjIwZmUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2V4cHJlc3Npb25QYXJzaW5nL0FuZDEudHh0CkBAIC0wLDAgKzEsMzkgQEAKK1BzaUphdmFGaWxlOkFuZDEuamF2YQorICBQc2lJbXBvcnRMaXN0CisgICAgPGVtcHR5IGxpc3Q+CisgIFBzaUNsYXNzOkZvbworICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaUtleXdvcmQ6Y2xhc3MoJ2NsYXNzJykKKyAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICBQc2lJZGVudGlmaWVyOkZvbygnRm9vJykKKyAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgUHNpV2hpdGVTcGFjZSgnXG4gICcpCisgICAgUHNpQ2xhc3NJbml0aWFsaXplcgorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gICAgICcpCisgICAgICAgIFBzaUV4cHJlc3Npb25TdGF0ZW1lbnQKKyAgICAgICAgICBQc2lCaW5hcnlFeHByZXNzaW9uOmEgJgorICAgICAgICAgICAgUHNpUmVmZXJlbmNlRXhwcmVzc2lvbjphCisgICAgICAgICAgICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgICAgICAgUHNpSWRlbnRpZmllcjphKCdhJykKKyAgICAgICAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgICAgICAgUHNpSmF2YVRva2VuOkFORCgnJicpCisgICAgICAgICAgICBQc2lFcnJvckVsZW1lbnQ6RXhwcmVzc2lvbiBleHBlY3RlZAorICAgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgICBQc2lFcnJvckVsZW1lbnQ6JzsnIGV4cGVjdGVkCisgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gICcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuJykKKyAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2V4cHJlc3Npb25QYXJzaW5nL0Fub255bW91czIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZXhwcmVzc2lvblBhcnNpbmcvQW5vbnltb3VzMi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEwMGMyYWUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2V4cHJlc3Npb25QYXJzaW5nL0Fub255bW91czIuamF2YQpAQCAtMCwwICsxLDE3IEBACisvLyAiQ29weSAnYScgdG8gdGVtcCBmaW5hbCB2YXJpYWJsZSIgInRydWUiCitwdWJsaWMgY2xhc3MgRG91YmxlVHJvdWJsZSB7CisgICAgcHVibGljIHZvaWQgdGVzdCgpIHsKKyAgICAgICAgaW50IGEgPSAxOworICAgICAgICBhID0gMjsKKyAgICAgICAgY2xhc3MgcyB7CisgICAgICAgICAgcHVibGljIHZvaWQgcnVuKCkgeworICAgICAgICAgICAgbmV3IFJ1bm5hYmxlKCkgeworICAgICAgICAgICAgICBwdWJsaWMgdm9pZCBydW4oKSB7CisgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKGEpOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9LnJ1bigpOworICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgfQorCit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2V4cHJlc3Npb25QYXJzaW5nL0Fub255bW91czIudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9leHByZXNzaW9uUGFyc2luZy9Bbm9ueW1vdXMyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMzFlZDAzCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9leHByZXNzaW9uUGFyc2luZy9Bbm9ueW1vdXMyLnR4dApAQCAtMCwwICsxLDE5NyBAQAorUHNpSmF2YUZpbGU6QW5vbnltb3VzMi5qYXZhCisgIFBzaUltcG9ydExpc3QKKyAgICA8ZW1wdHkgbGlzdD4KKyAgUHNpQ2xhc3M6RG91YmxlVHJvdWJsZQorICAgIFBzaUNvbW1lbnQoRU5EX09GX0xJTkVfQ09NTUVOVCkoJy8vICJDb3B5ICdhJyB0byB0ZW1wIGZpbmFsIHZhcmlhYmxlIiAidHJ1ZSInKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuJykKKyAgICBQc2lNb2RpZmllckxpc3Q6cHVibGljCisgICAgICBQc2lLZXl3b3JkOnB1YmxpYygncHVibGljJykKKyAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICBQc2lLZXl3b3JkOmNsYXNzKCdjbGFzcycpCisgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgUHNpSWRlbnRpZmllcjpEb3VibGVUcm91YmxlKCdEb3VibGVUcm91YmxlJykKKyAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgUHNpV2hpdGVTcGFjZSgnXG4gICAgJykKKyAgICBQc2lNZXRob2Q6dGVzdAorICAgICAgUHNpTW9kaWZpZXJMaXN0OnB1YmxpYworICAgICAgICBQc2lLZXl3b3JkOnB1YmxpYygncHVibGljJykKKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6dGVzdCgndGVzdCcpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICAgICAgICAnKQorICAgICAgICBQc2lEZWNsYXJhdGlvblN0YXRlbWVudAorICAgICAgICAgIFBzaUxvY2FsVmFyaWFibGU6YQorICAgICAgICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgICAgIFBzaVR5cGVFbGVtZW50OmludAorICAgICAgICAgICAgICBQc2lLZXl3b3JkOmludCgnaW50JykKKyAgICAgICAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgICAgICAgUHNpSWRlbnRpZmllcjphKCdhJykKKyAgICAgICAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgICAgICAgUHNpSmF2YVRva2VuOkVRKCc9JykKKyAgICAgICAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgICAgICAgUHNpTGl0ZXJhbEV4cHJlc3Npb246MQorICAgICAgICAgICAgICBQc2lKYXZhVG9rZW46SU5URUdFUl9MSVRFUkFMKCcxJykKKyAgICAgICAgICAgIFBzaUphdmFUb2tlbjpTRU1JQ09MT04oJzsnKQorICAgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAgICAgICAgJykKKyAgICAgICAgUHNpRXhwcmVzc2lvblN0YXRlbWVudAorICAgICAgICAgIFBzaUFzc2lnbm1lbnRFeHByZXNzaW9uOmEgPSAyCisgICAgICAgICAgICBQc2lSZWZlcmVuY2VFeHByZXNzaW9uOmEKKyAgICAgICAgICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICAgICAgICBQc2lJZGVudGlmaWVyOmEoJ2EnKQorICAgICAgICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICAgICAgICBQc2lKYXZhVG9rZW46RVEoJz0nKQorICAgICAgICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICAgICAgICBQc2lMaXRlcmFsRXhwcmVzc2lvbjoyCisgICAgICAgICAgICAgIFBzaUphdmFUb2tlbjpJTlRFR0VSX0xJVEVSQUwoJzInKQorICAgICAgICAgIFBzaUphdmFUb2tlbjpTRU1JQ09MT04oJzsnKQorICAgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAgICAgICAgJykKKyAgICAgICAgUHNpRGVjbGFyYXRpb25TdGF0ZW1lbnQKKyAgICAgICAgICBQc2lDbGFzczpzCisgICAgICAgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICAgICAgUHNpS2V5d29yZDpjbGFzcygnY2xhc3MnKQorICAgICAgICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICAgICAgICBQc2lJZGVudGlmaWVyOnMoJ3MnKQorICAgICAgICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAgICAgICAgICAnKQorICAgICAgICAgICAgUHNpTWV0aG9kOnJ1bgorICAgICAgICAgICAgICBQc2lNb2RpZmllckxpc3Q6cHVibGljCisgICAgICAgICAgICAgICAgUHNpS2V5d29yZDpwdWJsaWMoJ3B1YmxpYycpCisgICAgICAgICAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgICAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgICAgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgICAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgICAgICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICAgICAgICAgIFBzaUlkZW50aWZpZXI6cnVuKCdydW4nKQorICAgICAgICAgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgICAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgICAgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgICAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgICAgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgICAgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAgICAgICAgICAgICcpCisgICAgICAgICAgICAgICAgUHNpRXhwcmVzc2lvblN0YXRlbWVudAorICAgICAgICAgICAgICAgICAgUHNpTWV0aG9kQ2FsbEV4cHJlc3Npb246bmV3IFJ1bm5hYmxlKCkgeworICAgICAgICAgICAgICBwdWJsaWMgdm9pZCBydW4oKSB7CisgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKGEpOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9LnJ1bigpCisgICAgICAgICAgICAgICAgICAgIFBzaVJlZmVyZW5jZUV4cHJlc3Npb246bmV3IFJ1bm5hYmxlKCkgeworICAgICAgICAgICAgICBwdWJsaWMgdm9pZCBydW4oKSB7CisgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKGEpOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9LnJ1bgorICAgICAgICAgICAgICAgICAgICAgIFBzaU5ld0V4cHJlc3Npb246bmV3IFJ1bm5hYmxlKCkgeworICAgICAgICAgICAgICBwdWJsaWMgdm9pZCBydW4oKSB7CisgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKGEpOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBQc2lLZXl3b3JkOm5ldygnbmV3JykKKyAgICAgICAgICAgICAgICAgICAgICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgICAgICAgICAgICAgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgICAgICAgICAgICAgICAgICAgIFBzaUFub255bW91c0NsYXNzCisgICAgICAgICAgICAgICAgICAgICAgICAgIFBzaUphdmFDb2RlUmVmZXJlbmNlRWxlbWVudDpSdW5uYWJsZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBzaUlkZW50aWZpZXI6UnVubmFibGUoJ1J1bm5hYmxlJykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgUHNpRXhwcmVzc2lvbkxpc3QKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICAgICAgICAgICAgICAgICAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgICAgICAgICAgICAgICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gICAgICAgICAgICAgICcpCisgICAgICAgICAgICAgICAgICAgICAgICAgIFBzaU1ldGhvZDpydW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBQc2lNb2RpZmllckxpc3Q6cHVibGljCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQc2lLZXl3b3JkOnB1YmxpYygncHVibGljJykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBQc2lJZGVudGlmaWVyOnJ1bigncnVuJykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gICAgICAgICAgICAgICAgJykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBzaUV4cHJlc3Npb25TdGF0ZW1lbnQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHNpTWV0aG9kQ2FsbEV4cHJlc3Npb246U3lzdGVtLm91dC5wcmludGxuKGEpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHNpUmVmZXJlbmNlRXhwcmVzc2lvbjpTeXN0ZW0ub3V0LnByaW50bG4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBzaVJlZmVyZW5jZUV4cHJlc3Npb246U3lzdGVtLm91dAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQc2lSZWZlcmVuY2VFeHByZXNzaW9uOlN5c3RlbQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBzaUlkZW50aWZpZXI6U3lzdGVtKCdTeXN0ZW0nKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQc2lKYXZhVG9rZW46RE9UKCcuJykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQc2lJZGVudGlmaWVyOm91dCgnb3V0JykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBzaUphdmFUb2tlbjpET1QoJy4nKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBzaUlkZW50aWZpZXI6cHJpbnRsbigncHJpbnRsbicpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHNpRXhwcmVzc2lvbkxpc3QKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQc2lSZWZlcmVuY2VFeHByZXNzaW9uOmEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQc2lJZGVudGlmaWVyOmEoJ2EnKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHNpSmF2YVRva2VuOlNFTUlDT0xPTignOycpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAgICAgICAgICAgICAgJykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgICAgICAgICAgICAgICAgICAgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAgICAgICAgICAgICcpCisgICAgICAgICAgICAgICAgICAgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgICAgICAgICAgICAgICAgICAgIFBzaUphdmFUb2tlbjpET1QoJy4nKQorICAgICAgICAgICAgICAgICAgICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgICAgICAgICAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICAgICAgICAgICAgICAgIFBzaUlkZW50aWZpZXI6cnVuKCdydW4nKQorICAgICAgICAgICAgICAgICAgICBQc2lFeHByZXNzaW9uTGlzdAorICAgICAgICAgICAgICAgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgICAgICAgICAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgICAgICAgICAgICAgIFBzaUphdmFUb2tlbjpTRU1JQ09MT04oJzsnKQorICAgICAgICAgICAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICAgICAgICAgICcpCisgICAgICAgICAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgICAgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAgICAgICAgJykKKyAgICAgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAgICAgICcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4nKQorICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZXhwcmVzc2lvblBhcnNpbmcvQW5vbnltb3VzRXJyb3JzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2V4cHJlc3Npb25QYXJzaW5nL0Fub255bW91c0Vycm9ycy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU0ODhmNGQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2V4cHJlc3Npb25QYXJzaW5nL0Fub255bW91c0Vycm9ycy5qYXZhCkBAIC0wLDAgKzEsNSBAQAorY2xhc3MgVGVzdCB7CisgICAgdm9pZCBtZXRob2QoKSB7CisgICAgICAgIG5ldyBhKCkgeyBzdGF0aWMgPGVycm9yPiBpbnQgaTsgfTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9leHByZXNzaW9uUGFyc2luZy9Bbm9ueW1vdXNFcnJvcnMudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9leHByZXNzaW9uUGFyc2luZy9Bbm9ueW1vdXNFcnJvcnMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNlMzY3NTMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2V4cHJlc3Npb25QYXJzaW5nL0Fub255bW91c0Vycm9ycy50eHQKQEAgLTAsMCArMSw3OCBAQAorUHNpSmF2YUZpbGU6QW5vbnltb3VzRXJyb3JzLmphdmEKKyAgUHNpSW1wb3J0TGlzdAorICAgIDxlbXB0eSBsaXN0PgorICBQc2lDbGFzczpUZXN0CisgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpS2V5d29yZDpjbGFzcygnY2xhc3MnKQorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaUlkZW50aWZpZXI6VGVzdCgnVGVzdCcpCisgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuICAgICcpCisgICAgUHNpTWV0aG9kOm1ldGhvZAorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOm1ldGhvZCgnbWV0aG9kJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gICAgICAgICcpCisgICAgICAgIFBzaUV4cHJlc3Npb25TdGF0ZW1lbnQKKyAgICAgICAgICBQc2lOZXdFeHByZXNzaW9uOm5ldyBhKCkgeyBzdGF0aWMgPGVycm9yPiBpbnQgaTsgfQorICAgICAgICAgICAgUHNpS2V5d29yZDpuZXcoJ25ldycpCisgICAgICAgICAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICAgICAgICBQc2lBbm9ueW1vdXNDbGFzcworICAgICAgICAgICAgICBQc2lKYXZhQ29kZVJlZmVyZW5jZUVsZW1lbnQ6YQorICAgICAgICAgICAgICAgIFBzaUlkZW50aWZpZXI6YSgnYScpCisgICAgICAgICAgICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgICAgICAgIFBzaUV4cHJlc3Npb25MaXN0CisgICAgICAgICAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgICAgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgICAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgICAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgICAgICAgICBQc2lGaWVsZDppCisgICAgICAgICAgICAgICAgUHNpTW9kaWZpZXJMaXN0OnN0YXRpYworICAgICAgICAgICAgICAgICAgUHNpS2V5d29yZDpzdGF0aWMoJ3N0YXRpYycpCisgICAgICAgICAgICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICAgICAgICAgICAgUHNpRXJyb3JFbGVtZW50OlVuZXhwZWN0ZWQgdG9rZW4KKyAgICAgICAgICAgICAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgICAgICAgICAgICAgIFBzaUphdmFUb2tlbjpMVCgnPCcpCisgICAgICAgICAgICAgICAgICAgIFBzaVR5cGVQYXJhbWV0ZXI6ZXJyb3IKKyAgICAgICAgICAgICAgICAgICAgICBQc2lJZGVudGlmaWVyOmVycm9yKCdlcnJvcicpCisgICAgICAgICAgICAgICAgICAgICAgUHNpRWxlbWVudChFWFRFTkRTX0JPVU5EX0xJU1QpCisgICAgICAgICAgICAgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgUHNpSmF2YVRva2VuOkdUKCc+JykKKyAgICAgICAgICAgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgICAgICAgICAgICBQc2lUeXBlRWxlbWVudDppbnQKKyAgICAgICAgICAgICAgICAgIFBzaUtleXdvcmQ6aW50KCdpbnQnKQorICAgICAgICAgICAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgICAgICAgICAgIFBzaUlkZW50aWZpZXI6aSgnaScpCisgICAgICAgICAgICAgICAgUHNpSmF2YVRva2VuOlNFTUlDT0xPTignOycpCisgICAgICAgICAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICAgICAgICBQc2lKYXZhVG9rZW46U0VNSUNPTE9OKCc7JykKKyAgICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gICAgJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG4nKQorICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZXhwcmVzc2lvblBhcnNpbmcvQW5vbnltb3VzRXJyb3JzMS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9leHByZXNzaW9uUGFyc2luZy9Bbm9ueW1vdXNFcnJvcnMxLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjczODMyNwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZXhwcmVzc2lvblBhcnNpbmcvQW5vbnltb3VzRXJyb3JzMS5qYXZhCkBAIC0wLDAgKzEsMjkgQEAKK3B1YmxpYyBjbGFzcyBhIHsKKyAgdm9pZCBmMSgpIAorICB7CisgICAgbmV3IGEoKSB7CisgICAgPGVycm9yIGRlc2NyPSJJbm5lciBjbGFzc2VzIGNhbm5vdCBoYXZlIHN0YXRpYyBkZWNsYXJhdGlvbnMiPnN0YXRpYzwvZXJyb3I+CisgICAgICBpbnQgaTsKKworICAgIC8vIGNvbXBpbGUgdGltZSBjb25zdGFudCBpcyBPSworICAgIHN0YXRpYyBmaW5hbCBpbnQgZjEgPSAzIDwgNCA/IChhLml4PT01ID8gIDEgOiAzKSAvIDQgKyAxOCA6IDA7CisKKyAgICAvLyBpdHMgbm90IGEgY29tcGlsZSB0aW1lIGNvbnN0YW50CisgICAgPGVycm9yIGRlc2NyPSJJbm5lciBjbGFzc2VzIGNhbm5vdCBoYXZlIHN0YXRpYyBkZWNsYXJhdGlvbnMiPnN0YXRpYzwvZXJyb3I+CisgICAgICBmaW5hbCBPYmplY3QgbyA9IG51bGw7CisKKyAgICA8ZXJyb3IgZGVzY3I9IklubmVyIGNsYXNzZXMgY2Fubm90IGhhdmUgc3RhdGljIGRlY2xhcmF0aW9ucyI+c3RhdGljPC9lcnJvcj4KKyAgICAgIGZpbmFsIGludCBmMiA9IHggaW5zdGFuY2VvZiBJbnRlZ2VyID8gMSA6IDA7CisKKyAgICA8ZXJyb3IgZGVzY3I9IklubmVyIGNsYXNzZXMgY2Fubm90IGhhdmUgc3RhdGljIGRlY2xhcmF0aW9ucyI+c3RhdGljPC9lcnJvcj4KKyAgICAgIGNsYXNzIGFfaWNfYzIge30KKworICAgIDxlcnJvciBkZXNjcj0iSW5uZXIgY2xhc3NlcyBjYW5ub3QgaGF2ZSBzdGF0aWMgZGVjbGFyYXRpb25zIj5zdGF0aWM8L2Vycm9yPgorICAgICAgaW50IGFfaWNfbTIoU3RyaW5nIHMpIHsgcmV0dXJuIDA7IH0KKyAgICAvLyBzdGF0aWMgaW5pdGlhbGl6ZXIKKyAgICA8ZXJyb3IgZGVzY3I9IklubmVyIGNsYXNzZXMgY2Fubm90IGhhdmUgc3RhdGljIGRlY2xhcmF0aW9ucyI+c3RhdGljPC9lcnJvcj4KKyAgICB7fQorICAgIH07CisgIH0KK30KKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9leHByZXNzaW9uUGFyc2luZy9Bbm9ueW1vdXNFcnJvcnMxLnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZXhwcmVzc2lvblBhcnNpbmcvQW5vbnltb3VzRXJyb3JzMS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWUxZTM0MwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZXhwcmVzc2lvblBhcnNpbmcvQW5vbnltb3VzRXJyb3JzMS50eHQKQEAgLTAsMCArMSw1NTkgQEAKK1BzaUphdmFGaWxlOkFub255bW91c0Vycm9yczEuamF2YQorICBQc2lJbXBvcnRMaXN0CisgICAgPGVtcHR5IGxpc3Q+CisgIFBzaUNsYXNzOmEKKyAgICBQc2lNb2RpZmllckxpc3Q6cHVibGljCisgICAgICBQc2lLZXl3b3JkOnB1YmxpYygncHVibGljJykKKyAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICBQc2lLZXl3b3JkOmNsYXNzKCdjbGFzcycpCisgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgUHNpSWRlbnRpZmllcjphKCdhJykKKyAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgUHNpV2hpdGVTcGFjZSgnXG4gICcpCisgICAgUHNpTWV0aG9kOmYxCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6ZjEoJ2YxJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lXaGl0ZVNwYWNlKCcgXG4gICcpCisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICAgICcpCisgICAgICAgIFBzaUV4cHJlc3Npb25TdGF0ZW1lbnQKKyAgICAgICAgICBQc2lOZXdFeHByZXNzaW9uOm5ldyBhKCkgeworICAgIDxlcnJvciBkZXNjcj0iSW5uZXIgY2xhc3NlcyBjYW5ub3QgaGF2ZSBzdGF0aWMgZGVjbGFyYXRpb25zIj5zdGF0aWM8L2Vycm9yPgorICAgICAgaW50IGk7CisKKyAgICAvLyBjb21waWxlIHRpbWUgY29uc3RhbnQgaXMgT0sKKyAgICBzdGF0aWMgZmluYWwgaW50IGYxID0gMyA8IDQgPyAoYS5peD09NSA/ICAxIDogMykgLyA0ICsgMTggOiAwOworCisgICAgLy8gaXRzIG5vdCBhIGNvbXBpbGUgdGltZSBjb25zdGFudAorICAgIDxlcnJvciBkZXNjcj0iSW5uZXIgY2xhc3NlcyBjYW5ub3QgaGF2ZSBzdGF0aWMgZGVjbGFyYXRpb25zIj5zdGF0aWM8L2Vycm9yPgorICAgICAgZmluYWwgT2JqZWN0IG8gPSBudWxsOworCisgICAgPGVycm9yIGRlc2NyPSJJbm5lciBjbGFzc2VzIGNhbm5vdCBoYXZlIHN0YXRpYyBkZWNsYXJhdGlvbnMiPnN0YXRpYzwvZXJyb3I+CisgICAgICBmaW5hbCBpbnQgZjIgPSB4IGluc3RhbmNlb2YgSW50ZWdlciA/IDEgOiAwOworCisgICAgPGVycm9yIGRlc2NyPSJJbm5lciBjbGFzc2VzIGNhbm5vdCBoYXZlIHN0YXRpYyBkZWNsYXJhdGlvbnMiPnN0YXRpYzwvZXJyb3I+CisgICAgICBjbGFzcyBhX2ljX2MyIHt9CisKKyAgICA8ZXJyb3IgZGVzY3I9IklubmVyIGNsYXNzZXMgY2Fubm90IGhhdmUgc3RhdGljIGRlY2xhcmF0aW9ucyI+c3RhdGljPC9lcnJvcj4KKyAgICAgIGludCBhX2ljX20yKFN0cmluZyBzKSB7IHJldHVybiAwOyB9CisgICAgLy8gc3RhdGljIGluaXRpYWxpemVyCisgICAgPGVycm9yIGRlc2NyPSJJbm5lciBjbGFzc2VzIGNhbm5vdCBoYXZlIHN0YXRpYyBkZWNsYXJhdGlvbnMiPnN0YXRpYzwvZXJyb3I+CisgICAge30KKyAgICB9CisgICAgICAgICAgICBQc2lLZXl3b3JkOm5ldygnbmV3JykKKyAgICAgICAgICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgICAgICAgIFBzaUFub255bW91c0NsYXNzCisgICAgICAgICAgICAgIFBzaUphdmFDb2RlUmVmZXJlbmNlRWxlbWVudDphCisgICAgICAgICAgICAgICAgUHNpSWRlbnRpZmllcjphKCdhJykKKyAgICAgICAgICAgICAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICAgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgICAgICAgUHNpRXhwcmVzc2lvbkxpc3QKKyAgICAgICAgICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICAgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICAgICAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gICAgJykKKyAgICAgICAgICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICAgICAgICBQc2lFcnJvckVsZW1lbnQ6VW5leHBlY3RlZCB0b2tlbgorICAgICAgICAgICAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgICAgICAgICAgICBQc2lKYXZhVG9rZW46TFQoJzwnKQorICAgICAgICAgICAgICAgICAgUHNpVHlwZVBhcmFtZXRlcjplcnJvcgorICAgICAgICAgICAgICAgICAgICBQc2lJZGVudGlmaWVyOmVycm9yKCdlcnJvcicpCisgICAgICAgICAgICAgICAgICAgIFBzaUVsZW1lbnQoRVhURU5EU19CT1VORF9MSVNUKQorICAgICAgICAgICAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICAgICAgICAgICAgUHNpRXJyb3JFbGVtZW50Oic+JyBleHBlY3RlZC4KKyAgICAgICAgICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgICAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgICAgICAgICBQc2lUeXBlRWxlbWVudDpkZXNjcgorICAgICAgICAgICAgICAgIFBzaUphdmFDb2RlUmVmZXJlbmNlRWxlbWVudDpkZXNjcgorICAgICAgICAgICAgICAgICAgUHNpSWRlbnRpZmllcjpkZXNjcignZGVzY3InKQorICAgICAgICAgICAgICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICAgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgICAgICAgUHNpRXJyb3JFbGVtZW50OklkZW50aWZpZXIgZXhwZWN0ZWQKKyAgICAgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgICAgICAgUHNpRXJyb3JFbGVtZW50OlVuZXhwZWN0ZWQgdG9rZW4KKyAgICAgICAgICAgICAgICBQc2lKYXZhVG9rZW46RVEoJz0nKQorICAgICAgICAgICAgICAgIFBzaUphdmFUb2tlbjpTVFJJTkdfTElURVJBTCgnIklubmVyIGNsYXNzZXMgY2Fubm90IGhhdmUgc3RhdGljIGRlY2xhcmF0aW9ucyInKQorICAgICAgICAgICAgICAgIFBzaUphdmFUb2tlbjpHVCgnPicpCisgICAgICAgICAgICAgIFBzaU1vZGlmaWVyTGlzdDpzdGF0aWMKKyAgICAgICAgICAgICAgICBQc2lLZXl3b3JkOnN0YXRpYygnc3RhdGljJykKKyAgICAgICAgICAgICAgUHNpRXJyb3JFbGVtZW50OklkZW50aWZpZXIgb3IgdHlwZSBleHBlY3RlZAorICAgICAgICAgICAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgICAgICAgICAgICBQc2lKYXZhVG9rZW46TFQoJzwnKQorICAgICAgICAgICAgICAgICAgUHNpRXJyb3JFbGVtZW50OlR5cGUgcGFyYW1ldGVyIGV4cGVjdGVkCisgICAgICAgICAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICAgICAgICAgICAgUHNpRXJyb3JFbGVtZW50Oic+JyBleHBlY3RlZC4KKyAgICAgICAgICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgICAgICAgIFBzaUVycm9yRWxlbWVudDpVbmV4cGVjdGVkIHRva2VuCisgICAgICAgICAgICAgICAgUHNpSmF2YVRva2VuOkRJVignLycpCisgICAgICAgICAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgICAgICAgUHNpVHlwZUVsZW1lbnQ6ZXJyb3IKKyAgICAgICAgICAgICAgICBQc2lKYXZhQ29kZVJlZmVyZW5jZUVsZW1lbnQ6ZXJyb3IKKyAgICAgICAgICAgICAgICAgIFBzaUlkZW50aWZpZXI6ZXJyb3IoJ2Vycm9yJykKKyAgICAgICAgICAgICAgICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgICAgICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgICAgICAgIFBzaUVycm9yRWxlbWVudDpJZGVudGlmaWVyIGV4cGVjdGVkCisgICAgICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgICAgICAgIFBzaUVycm9yRWxlbWVudDpVbmV4cGVjdGVkIHRva2VuCisgICAgICAgICAgICAgICAgUHNpSmF2YVRva2VuOkdUKCc+JykKKyAgICAgICAgICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gICAgICAnKQorICAgICAgICAgICAgICBQc2lGaWVsZDppCisgICAgICAgICAgICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgICAgICAgICAgUHNpVHlwZUVsZW1lbnQ6aW50CisgICAgICAgICAgICAgICAgICBQc2lLZXl3b3JkOmludCgnaW50JykKKyAgICAgICAgICAgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgICAgICAgICAgICBQc2lJZGVudGlmaWVyOmkoJ2knKQorICAgICAgICAgICAgICAgIFBzaUphdmFUb2tlbjpTRU1JQ09MT04oJzsnKQorICAgICAgICAgICAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICAgICcpCisgICAgICAgICAgICAgIFBzaUZpZWxkOmYxCisgICAgICAgICAgICAgICAgUHNpQ29tbWVudChFTkRfT0ZfTElORV9DT01NRU5UKSgnLy8gY29tcGlsZSB0aW1lIGNvbnN0YW50IGlzIE9LJykKKyAgICAgICAgICAgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAgICAnKQorICAgICAgICAgICAgICAgIFBzaU1vZGlmaWVyTGlzdDpzdGF0aWMgZmluYWwKKyAgICAgICAgICAgICAgICAgIFBzaUtleXdvcmQ6c3RhdGljKCdzdGF0aWMnKQorICAgICAgICAgICAgICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICAgICAgICAgICAgICBQc2lLZXl3b3JkOmZpbmFsKCdmaW5hbCcpCisgICAgICAgICAgICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICAgICAgICAgICAgUHNpVHlwZUVsZW1lbnQ6aW50CisgICAgICAgICAgICAgICAgICBQc2lLZXl3b3JkOmludCgnaW50JykKKyAgICAgICAgICAgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgICAgICAgICAgICBQc2lJZGVudGlmaWVyOmYxKCdmMScpCisgICAgICAgICAgICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICAgICAgICAgICAgUHNpSmF2YVRva2VuOkVRKCc9JykKKyAgICAgICAgICAgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgICAgICAgICAgICBQc2lDb25kaXRpb25hbEV4cHJlc3Npb246MyA8IDQgPyAoYS5peD09NSA/ICAxIDogMykgLyA0ICsgMTggOiAwCisgICAgICAgICAgICAgICAgICBQc2lCaW5hcnlFeHByZXNzaW9uOjMgPCA0CisgICAgICAgICAgICAgICAgICAgIFBzaUxpdGVyYWxFeHByZXNzaW9uOjMKKyAgICAgICAgICAgICAgICAgICAgICBQc2lKYXZhVG9rZW46SU5URUdFUl9MSVRFUkFMKCczJykKKyAgICAgICAgICAgICAgICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICAgICAgICAgICAgICAgIFBzaUphdmFUb2tlbjpMVCgnPCcpCisgICAgICAgICAgICAgICAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgICAgICAgICAgICAgICBQc2lMaXRlcmFsRXhwcmVzc2lvbjo0CisgICAgICAgICAgICAgICAgICAgICAgUHNpSmF2YVRva2VuOklOVEVHRVJfTElURVJBTCgnNCcpCisgICAgICAgICAgICAgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgICAgICAgICAgICAgIFBzaUphdmFUb2tlbjpRVUVTVCgnPycpCisgICAgICAgICAgICAgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgICAgICAgICAgICAgIFBzaUJpbmFyeUV4cHJlc3Npb246KGEuaXg9PTUgPyAgMSA6IDMpIC8gNCArIDE4CisgICAgICAgICAgICAgICAgICAgIFBzaUJpbmFyeUV4cHJlc3Npb246KGEuaXg9PTUgPyAgMSA6IDMpIC8gNAorICAgICAgICAgICAgICAgICAgICAgIFBzaVBhcmVudGhlc2l6ZWRFeHByZXNzaW9uOihhLml4PT01ID8gIDEgOiAzKQorICAgICAgICAgICAgICAgICAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgICAgICAgICAgICAgICAgIFBzaUNvbmRpdGlvbmFsRXhwcmVzc2lvbjphLml4PT01ID8gIDEgOiAzCisgICAgICAgICAgICAgICAgICAgICAgICAgIFBzaUJpbmFyeUV4cHJlc3Npb246YS5peD09NQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBzaVJlZmVyZW5jZUV4cHJlc3Npb246YS5peAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHNpUmVmZXJlbmNlRXhwcmVzc2lvbjphCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHNpSWRlbnRpZmllcjphKCdhJykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBzaUphdmFUb2tlbjpET1QoJy4nKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBzaUlkZW50aWZpZXI6aXgoJ2l4JykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBQc2lKYXZhVG9rZW46RVFFUSgnPT0nKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBzaUxpdGVyYWxFeHByZXNzaW9uOjUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBzaUphdmFUb2tlbjpJTlRFR0VSX0xJVEVSQUwoJzUnKQorICAgICAgICAgICAgICAgICAgICAgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgUHNpSmF2YVRva2VuOlFVRVNUKCc/JykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgUHNpV2hpdGVTcGFjZSgnICAnKQorICAgICAgICAgICAgICAgICAgICAgICAgICBQc2lMaXRlcmFsRXhwcmVzc2lvbjoxCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHNpSmF2YVRva2VuOklOVEVHRVJfTElURVJBTCgnMScpCisgICAgICAgICAgICAgICAgICAgICAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgICAgICAgICAgICAgICAgICAgICBQc2lKYXZhVG9rZW46Q09MT04oJzonKQorICAgICAgICAgICAgICAgICAgICAgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgUHNpTGl0ZXJhbEV4cHJlc3Npb246MworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBzaUphdmFUb2tlbjpJTlRFR0VSX0xJVEVSQUwoJzMnKQorICAgICAgICAgICAgICAgICAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgICAgICAgICAgICAgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgICAgICAgICAgICAgICAgICBQc2lKYXZhVG9rZW46RElWKCcvJykKKyAgICAgICAgICAgICAgICAgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgICAgICAgICAgICAgICAgICBQc2lMaXRlcmFsRXhwcmVzc2lvbjo0CisgICAgICAgICAgICAgICAgICAgICAgICBQc2lKYXZhVG9rZW46SU5URUdFUl9MSVRFUkFMKCc0JykKKyAgICAgICAgICAgICAgICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICAgICAgICAgICAgICAgIFBzaUphdmFUb2tlbjpQTFVTKCcrJykKKyAgICAgICAgICAgICAgICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICAgICAgICAgICAgICAgIFBzaUxpdGVyYWxFeHByZXNzaW9uOjE4CisgICAgICAgICAgICAgICAgICAgICAgUHNpSmF2YVRva2VuOklOVEVHRVJfTElURVJBTCgnMTgnKQorICAgICAgICAgICAgICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICAgICAgICAgICAgICBQc2lKYXZhVG9rZW46Q09MT04oJzonKQorICAgICAgICAgICAgICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICAgICAgICAgICAgICBQc2lMaXRlcmFsRXhwcmVzc2lvbjowCisgICAgICAgICAgICAgICAgICAgIFBzaUphdmFUb2tlbjpJTlRFR0VSX0xJVEVSQUwoJzAnKQorICAgICAgICAgICAgICAgIFBzaUphdmFUb2tlbjpTRU1JQ09MT04oJzsnKQorICAgICAgICAgICAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICAgICcpCisgICAgICAgICAgICAgIFBzaUNvbW1lbnQoRU5EX09GX0xJTkVfQ09NTUVOVCkoJy8vIGl0cyBub3QgYSBjb21waWxlIHRpbWUgY29uc3RhbnQnKQorICAgICAgICAgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAgICAnKQorICAgICAgICAgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgICAgICAgIFBzaUVycm9yRWxlbWVudDpVbmV4cGVjdGVkIHRva2VuCisgICAgICAgICAgICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgICAgICAgICAgIFBzaUphdmFUb2tlbjpMVCgnPCcpCisgICAgICAgICAgICAgICAgICBQc2lUeXBlUGFyYW1ldGVyOmVycm9yCisgICAgICAgICAgICAgICAgICAgIFBzaUlkZW50aWZpZXI6ZXJyb3IoJ2Vycm9yJykKKyAgICAgICAgICAgICAgICAgICAgUHNpRWxlbWVudChFWFRFTkRTX0JPVU5EX0xJU1QpCisgICAgICAgICAgICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgICAgICAgICAgICBQc2lFcnJvckVsZW1lbnQ6Jz4nIGV4cGVjdGVkLgorICAgICAgICAgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICAgICAgICAgIFBzaVR5cGVFbGVtZW50OmRlc2NyCisgICAgICAgICAgICAgICAgUHNpSmF2YUNvZGVSZWZlcmVuY2VFbGVtZW50OmRlc2NyCisgICAgICAgICAgICAgICAgICBQc2lJZGVudGlmaWVyOmRlc2NyKCdkZXNjcicpCisgICAgICAgICAgICAgICAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICAgICAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICAgICAgICBQc2lFcnJvckVsZW1lbnQ6SWRlbnRpZmllciBleHBlY3RlZAorICAgICAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICAgICAgICBQc2lFcnJvckVsZW1lbnQ6VW5leHBlY3RlZCB0b2tlbgorICAgICAgICAgICAgICAgIFBzaUphdmFUb2tlbjpFUSgnPScpCisgICAgICAgICAgICAgICAgUHNpSmF2YVRva2VuOlNUUklOR19MSVRFUkFMKCciSW5uZXIgY2xhc3NlcyBjYW5ub3QgaGF2ZSBzdGF0aWMgZGVjbGFyYXRpb25zIicpCisgICAgICAgICAgICAgICAgUHNpSmF2YVRva2VuOkdUKCc+JykKKyAgICAgICAgICAgICAgUHNpTW9kaWZpZXJMaXN0OnN0YXRpYworICAgICAgICAgICAgICAgIFBzaUtleXdvcmQ6c3RhdGljKCdzdGF0aWMnKQorICAgICAgICAgICAgICBQc2lFcnJvckVsZW1lbnQ6SWRlbnRpZmllciBvciB0eXBlIGV4cGVjdGVkCisgICAgICAgICAgICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgICAgICAgICAgIFBzaUphdmFUb2tlbjpMVCgnPCcpCisgICAgICAgICAgICAgICAgICBQc2lFcnJvckVsZW1lbnQ6VHlwZSBwYXJhbWV0ZXIgZXhwZWN0ZWQKKyAgICAgICAgICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgICAgICAgICAgICBQc2lFcnJvckVsZW1lbnQ6Jz4nIGV4cGVjdGVkLgorICAgICAgICAgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgICAgICAgUHNpRXJyb3JFbGVtZW50OlVuZXhwZWN0ZWQgdG9rZW4KKyAgICAgICAgICAgICAgICBQc2lKYXZhVG9rZW46RElWKCcvJykKKyAgICAgICAgICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICAgICAgICBQc2lUeXBlRWxlbWVudDplcnJvcgorICAgICAgICAgICAgICAgIFBzaUphdmFDb2RlUmVmZXJlbmNlRWxlbWVudDplcnJvcgorICAgICAgICAgICAgICAgICAgUHNpSWRlbnRpZmllcjplcnJvcignZXJyb3InKQorICAgICAgICAgICAgICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICAgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgICAgICAgUHNpRXJyb3JFbGVtZW50OklkZW50aWZpZXIgZXhwZWN0ZWQKKyAgICAgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgICAgICAgUHNpRXJyb3JFbGVtZW50OlVuZXhwZWN0ZWQgdG9rZW4KKyAgICAgICAgICAgICAgICBQc2lKYXZhVG9rZW46R1QoJz4nKQorICAgICAgICAgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAgICAgICcpCisgICAgICAgICAgICAgIFBzaUZpZWxkOm8KKyAgICAgICAgICAgICAgICBQc2lNb2RpZmllckxpc3Q6ZmluYWwKKyAgICAgICAgICAgICAgICAgIFBzaUtleXdvcmQ6ZmluYWwoJ2ZpbmFsJykKKyAgICAgICAgICAgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgICAgICAgICAgICBQc2lUeXBlRWxlbWVudDpPYmplY3QKKyAgICAgICAgICAgICAgICAgIFBzaUphdmFDb2RlUmVmZXJlbmNlRWxlbWVudDpPYmplY3QKKyAgICAgICAgICAgICAgICAgICAgUHNpSWRlbnRpZmllcjpPYmplY3QoJ09iamVjdCcpCisgICAgICAgICAgICAgICAgICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgICAgICAgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgICAgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgICAgICAgICAgICBQc2lJZGVudGlmaWVyOm8oJ28nKQorICAgICAgICAgICAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgICAgICAgICAgIFBzaUphdmFUb2tlbjpFUSgnPScpCisgICAgICAgICAgICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICAgICAgICAgICAgUHNpTGl0ZXJhbEV4cHJlc3Npb246bnVsbAorICAgICAgICAgICAgICAgICAgUHNpSmF2YVRva2VuOk5VTExfS0VZV09SRCgnbnVsbCcpCisgICAgICAgICAgICAgICAgUHNpSmF2YVRva2VuOlNFTUlDT0xPTignOycpCisgICAgICAgICAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gICAgJykKKyAgICAgICAgICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICAgICAgICBQc2lFcnJvckVsZW1lbnQ6VW5leHBlY3RlZCB0b2tlbgorICAgICAgICAgICAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgICAgICAgICAgICBQc2lKYXZhVG9rZW46TFQoJzwnKQorICAgICAgICAgICAgICAgICAgUHNpVHlwZVBhcmFtZXRlcjplcnJvcgorICAgICAgICAgICAgICAgICAgICBQc2lJZGVudGlmaWVyOmVycm9yKCdlcnJvcicpCisgICAgICAgICAgICAgICAgICAgIFBzaUVsZW1lbnQoRVhURU5EU19CT1VORF9MSVNUKQorICAgICAgICAgICAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICAgICAgICAgICAgUHNpRXJyb3JFbGVtZW50Oic+JyBleHBlY3RlZC4KKyAgICAgICAgICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgICAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgICAgICAgICBQc2lUeXBlRWxlbWVudDpkZXNjcgorICAgICAgICAgICAgICAgIFBzaUphdmFDb2RlUmVmZXJlbmNlRWxlbWVudDpkZXNjcgorICAgICAgICAgICAgICAgICAgUHNpSWRlbnRpZmllcjpkZXNjcignZGVzY3InKQorICAgICAgICAgICAgICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICAgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgICAgICAgUHNpRXJyb3JFbGVtZW50OklkZW50aWZpZXIgZXhwZWN0ZWQKKyAgICAgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgICAgICAgUHNpRXJyb3JFbGVtZW50OlVuZXhwZWN0ZWQgdG9rZW4KKyAgICAgICAgICAgICAgICBQc2lKYXZhVG9rZW46RVEoJz0nKQorICAgICAgICAgICAgICAgIFBzaUphdmFUb2tlbjpTVFJJTkdfTElURVJBTCgnIklubmVyIGNsYXNzZXMgY2Fubm90IGhhdmUgc3RhdGljIGRlY2xhcmF0aW9ucyInKQorICAgICAgICAgICAgICAgIFBzaUphdmFUb2tlbjpHVCgnPicpCisgICAgICAgICAgICAgIFBzaU1vZGlmaWVyTGlzdDpzdGF0aWMKKyAgICAgICAgICAgICAgICBQc2lLZXl3b3JkOnN0YXRpYygnc3RhdGljJykKKyAgICAgICAgICAgICAgUHNpRXJyb3JFbGVtZW50OklkZW50aWZpZXIgb3IgdHlwZSBleHBlY3RlZAorICAgICAgICAgICAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgICAgICAgICAgICBQc2lKYXZhVG9rZW46TFQoJzwnKQorICAgICAgICAgICAgICAgICAgUHNpRXJyb3JFbGVtZW50OlR5cGUgcGFyYW1ldGVyIGV4cGVjdGVkCisgICAgICAgICAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICAgICAgICAgICAgUHNpRXJyb3JFbGVtZW50Oic+JyBleHBlY3RlZC4KKyAgICAgICAgICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgICAgICAgIFBzaUVycm9yRWxlbWVudDpVbmV4cGVjdGVkIHRva2VuCisgICAgICAgICAgICAgICAgUHNpSmF2YVRva2VuOkRJVignLycpCisgICAgICAgICAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgICAgICAgUHNpVHlwZUVsZW1lbnQ6ZXJyb3IKKyAgICAgICAgICAgICAgICBQc2lKYXZhQ29kZVJlZmVyZW5jZUVsZW1lbnQ6ZXJyb3IKKyAgICAgICAgICAgICAgICAgIFBzaUlkZW50aWZpZXI6ZXJyb3IoJ2Vycm9yJykKKyAgICAgICAgICAgICAgICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgICAgICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgICAgICAgIFBzaUVycm9yRWxlbWVudDpJZGVudGlmaWVyIGV4cGVjdGVkCisgICAgICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgICAgICAgIFBzaUVycm9yRWxlbWVudDpVbmV4cGVjdGVkIHRva2VuCisgICAgICAgICAgICAgICAgUHNpSmF2YVRva2VuOkdUKCc+JykKKyAgICAgICAgICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gICAgICAnKQorICAgICAgICAgICAgICBQc2lGaWVsZDpmMgorICAgICAgICAgICAgICAgIFBzaU1vZGlmaWVyTGlzdDpmaW5hbAorICAgICAgICAgICAgICAgICAgUHNpS2V5d29yZDpmaW5hbCgnZmluYWwnKQorICAgICAgICAgICAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgICAgICAgICAgIFBzaVR5cGVFbGVtZW50OmludAorICAgICAgICAgICAgICAgICAgUHNpS2V5d29yZDppbnQoJ2ludCcpCisgICAgICAgICAgICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICAgICAgICAgICAgUHNpSWRlbnRpZmllcjpmMignZjInKQorICAgICAgICAgICAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgICAgICAgICAgIFBzaUphdmFUb2tlbjpFUSgnPScpCisgICAgICAgICAgICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICAgICAgICAgICAgUHNpQ29uZGl0aW9uYWxFeHByZXNzaW9uOnggaW5zdGFuY2VvZiBJbnRlZ2VyID8gMSA6IDAKKyAgICAgICAgICAgICAgICAgIFBzaUluc3RhbmNlb2ZFeHByZXNzaW9uOnggaW5zdGFuY2VvZiBJbnRlZ2VyCisgICAgICAgICAgICAgICAgICAgIFBzaVJlZmVyZW5jZUV4cHJlc3Npb246eAorICAgICAgICAgICAgICAgICAgICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgICAgICAgICAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICAgICAgICAgICAgICAgIFBzaUlkZW50aWZpZXI6eCgneCcpCisgICAgICAgICAgICAgICAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgICAgICAgICAgICAgICBQc2lLZXl3b3JkOmluc3RhbmNlb2YoJ2luc3RhbmNlb2YnKQorICAgICAgICAgICAgICAgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgICAgICAgICAgICAgICAgUHNpVHlwZUVsZW1lbnQ6SW50ZWdlcgorICAgICAgICAgICAgICAgICAgICAgIFBzaUphdmFDb2RlUmVmZXJlbmNlRWxlbWVudDpJbnRlZ2VyCisgICAgICAgICAgICAgICAgICAgICAgICBQc2lJZGVudGlmaWVyOkludGVnZXIoJ0ludGVnZXInKQorICAgICAgICAgICAgICAgICAgICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgICAgICAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgICAgICAgICAgICAgUHNpSmF2YVRva2VuOlFVRVNUKCc/JykKKyAgICAgICAgICAgICAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgICAgICAgICAgICAgUHNpTGl0ZXJhbEV4cHJlc3Npb246MQorICAgICAgICAgICAgICAgICAgICBQc2lKYXZhVG9rZW46SU5URUdFUl9MSVRFUkFMKCcxJykKKyAgICAgICAgICAgICAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgICAgICAgICAgICAgUHNpSmF2YVRva2VuOkNPTE9OKCc6JykKKyAgICAgICAgICAgICAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgICAgICAgICAgICAgUHNpTGl0ZXJhbEV4cHJlc3Npb246MAorICAgICAgICAgICAgICAgICAgICBQc2lKYXZhVG9rZW46SU5URUdFUl9MSVRFUkFMKCcwJykKKyAgICAgICAgICAgICAgICBQc2lKYXZhVG9rZW46U0VNSUNPTE9OKCc7JykKKyAgICAgICAgICAgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAgICAnKQorICAgICAgICAgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgICAgICAgIFBzaUVycm9yRWxlbWVudDpVbmV4cGVjdGVkIHRva2VuCisgICAgICAgICAgICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgICAgICAgICAgIFBzaUphdmFUb2tlbjpMVCgnPCcpCisgICAgICAgICAgICAgICAgICBQc2lUeXBlUGFyYW1ldGVyOmVycm9yCisgICAgICAgICAgICAgICAgICAgIFBzaUlkZW50aWZpZXI6ZXJyb3IoJ2Vycm9yJykKKyAgICAgICAgICAgICAgICAgICAgUHNpRWxlbWVudChFWFRFTkRTX0JPVU5EX0xJU1QpCisgICAgICAgICAgICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgICAgICAgICAgICBQc2lFcnJvckVsZW1lbnQ6Jz4nIGV4cGVjdGVkLgorICAgICAgICAgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICAgICAgICAgIFBzaVR5cGVFbGVtZW50OmRlc2NyCisgICAgICAgICAgICAgICAgUHNpSmF2YUNvZGVSZWZlcmVuY2VFbGVtZW50OmRlc2NyCisgICAgICAgICAgICAgICAgICBQc2lJZGVudGlmaWVyOmRlc2NyKCdkZXNjcicpCisgICAgICAgICAgICAgICAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICAgICAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICAgICAgICBQc2lFcnJvckVsZW1lbnQ6SWRlbnRpZmllciBleHBlY3RlZAorICAgICAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICAgICAgICBQc2lFcnJvckVsZW1lbnQ6VW5leHBlY3RlZCB0b2tlbgorICAgICAgICAgICAgICAgIFBzaUphdmFUb2tlbjpFUSgnPScpCisgICAgICAgICAgICAgICAgUHNpSmF2YVRva2VuOlNUUklOR19MSVRFUkFMKCciSW5uZXIgY2xhc3NlcyBjYW5ub3QgaGF2ZSBzdGF0aWMgZGVjbGFyYXRpb25zIicpCisgICAgICAgICAgICAgICAgUHNpSmF2YVRva2VuOkdUKCc+JykKKyAgICAgICAgICAgICAgUHNpTW9kaWZpZXJMaXN0OnN0YXRpYworICAgICAgICAgICAgICAgIFBzaUtleXdvcmQ6c3RhdGljKCdzdGF0aWMnKQorICAgICAgICAgICAgICBQc2lFcnJvckVsZW1lbnQ6SWRlbnRpZmllciBvciB0eXBlIGV4cGVjdGVkCisgICAgICAgICAgICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgICAgICAgICAgIFBzaUphdmFUb2tlbjpMVCgnPCcpCisgICAgICAgICAgICAgICAgICBQc2lFcnJvckVsZW1lbnQ6VHlwZSBwYXJhbWV0ZXIgZXhwZWN0ZWQKKyAgICAgICAgICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgICAgICAgICAgICBQc2lFcnJvckVsZW1lbnQ6Jz4nIGV4cGVjdGVkLgorICAgICAgICAgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgICAgICAgUHNpRXJyb3JFbGVtZW50OlVuZXhwZWN0ZWQgdG9rZW4KKyAgICAgICAgICAgICAgICBQc2lKYXZhVG9rZW46RElWKCcvJykKKyAgICAgICAgICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICAgICAgICBQc2lUeXBlRWxlbWVudDplcnJvcgorICAgICAgICAgICAgICAgIFBzaUphdmFDb2RlUmVmZXJlbmNlRWxlbWVudDplcnJvcgorICAgICAgICAgICAgICAgICAgUHNpSWRlbnRpZmllcjplcnJvcignZXJyb3InKQorICAgICAgICAgICAgICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICAgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgICAgICAgUHNpRXJyb3JFbGVtZW50OklkZW50aWZpZXIgZXhwZWN0ZWQKKyAgICAgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgICAgICAgUHNpRXJyb3JFbGVtZW50OlVuZXhwZWN0ZWQgdG9rZW4KKyAgICAgICAgICAgICAgICBQc2lKYXZhVG9rZW46R1QoJz4nKQorICAgICAgICAgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAgICAgICcpCisgICAgICAgICAgICAgIFBzaUNsYXNzOmFfaWNfYzIKKyAgICAgICAgICAgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgICAgICAgICBQc2lLZXl3b3JkOmNsYXNzKCdjbGFzcycpCisgICAgICAgICAgICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICAgICAgICAgICAgUHNpSWRlbnRpZmllcjphX2ljX2MyKCdhX2ljX2MyJykKKyAgICAgICAgICAgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgICAgICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgICAgICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgICAgICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICAgICAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgICAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgICAgICAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4gICAgJykKKyAgICAgICAgICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICAgICAgICBQc2lFcnJvckVsZW1lbnQ6VW5leHBlY3RlZCB0b2tlbgorICAgICAgICAgICAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgICAgICAgICAgICBQc2lKYXZhVG9rZW46TFQoJzwnKQorICAgICAgICAgICAgICAgICAgUHNpVHlwZVBhcmFtZXRlcjplcnJvcgorICAgICAgICAgICAgICAgICAgICBQc2lJZGVudGlmaWVyOmVycm9yKCdlcnJvcicpCisgICAgICAgICAgICAgICAgICAgIFBzaUVsZW1lbnQoRVhURU5EU19CT1VORF9MSVNUKQorICAgICAgICAgICAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICAgICAgICAgICAgUHNpRXJyb3JFbGVtZW50Oic+JyBleHBlY3RlZC4KKyAgICAgICAgICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgICAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgICAgICAgICBQc2lUeXBlRWxlbWVudDpkZXNjcgorICAgICAgICAgICAgICAgIFBzaUphdmFDb2RlUmVmZXJlbmNlRWxlbWVudDpkZXNjcgorICAgICAgICAgICAgICAgICAgUHNpSWRlbnRpZmllcjpkZXNjcignZGVzY3InKQorICAgICAgICAgICAgICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICAgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgICAgICAgUHNpRXJyb3JFbGVtZW50OklkZW50aWZpZXIgZXhwZWN0ZWQKKyAgICAgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgICAgICAgUHNpRXJyb3JFbGVtZW50OlVuZXhwZWN0ZWQgdG9rZW4KKyAgICAgICAgICAgICAgICBQc2lKYXZhVG9rZW46RVEoJz0nKQorICAgICAgICAgICAgICAgIFBzaUphdmFUb2tlbjpTVFJJTkdfTElURVJBTCgnIklubmVyIGNsYXNzZXMgY2Fubm90IGhhdmUgc3RhdGljIGRlY2xhcmF0aW9ucyInKQorICAgICAgICAgICAgICAgIFBzaUphdmFUb2tlbjpHVCgnPicpCisgICAgICAgICAgICAgIFBzaU1vZGlmaWVyTGlzdDpzdGF0aWMKKyAgICAgICAgICAgICAgICBQc2lLZXl3b3JkOnN0YXRpYygnc3RhdGljJykKKyAgICAgICAgICAgICAgUHNpRXJyb3JFbGVtZW50OklkZW50aWZpZXIgb3IgdHlwZSBleHBlY3RlZAorICAgICAgICAgICAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgICAgICAgICAgICBQc2lKYXZhVG9rZW46TFQoJzwnKQorICAgICAgICAgICAgICAgICAgUHNpRXJyb3JFbGVtZW50OlR5cGUgcGFyYW1ldGVyIGV4cGVjdGVkCisgICAgICAgICAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICAgICAgICAgICAgUHNpRXJyb3JFbGVtZW50Oic+JyBleHBlY3RlZC4KKyAgICAgICAgICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgICAgICAgIFBzaUVycm9yRWxlbWVudDpVbmV4cGVjdGVkIHRva2VuCisgICAgICAgICAgICAgICAgUHNpSmF2YVRva2VuOkRJVignLycpCisgICAgICAgICAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgICAgICAgUHNpVHlwZUVsZW1lbnQ6ZXJyb3IKKyAgICAgICAgICAgICAgICBQc2lKYXZhQ29kZVJlZmVyZW5jZUVsZW1lbnQ6ZXJyb3IKKyAgICAgICAgICAgICAgICAgIFBzaUlkZW50aWZpZXI6ZXJyb3IoJ2Vycm9yJykKKyAgICAgICAgICAgICAgICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgICAgICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgICAgICAgIFBzaUVycm9yRWxlbWVudDpJZGVudGlmaWVyIGV4cGVjdGVkCisgICAgICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgICAgICAgIFBzaUVycm9yRWxlbWVudDpVbmV4cGVjdGVkIHRva2VuCisgICAgICAgICAgICAgICAgUHNpSmF2YVRva2VuOkdUKCc+JykKKyAgICAgICAgICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gICAgICAnKQorICAgICAgICAgICAgICBQc2lNZXRob2Q6YV9pY19tMgorICAgICAgICAgICAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICAgICAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgICAgICAgICBQc2lUeXBlRWxlbWVudDppbnQKKyAgICAgICAgICAgICAgICAgIFBzaUtleXdvcmQ6aW50KCdpbnQnKQorICAgICAgICAgICAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgICAgICAgICAgIFBzaUlkZW50aWZpZXI6YV9pY19tMignYV9pY19tMicpCisgICAgICAgICAgICAgICAgUHNpUGFyYW1ldGVyTGlzdDooU3RyaW5nIHMpCisgICAgICAgICAgICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICAgICAgICAgICAgUHNpUGFyYW1ldGVyOnMKKyAgICAgICAgICAgICAgICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICAgICAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICAgICAgICAgICAgICBQc2lUeXBlRWxlbWVudDpTdHJpbmcKKyAgICAgICAgICAgICAgICAgICAgICBQc2lKYXZhQ29kZVJlZmVyZW5jZUVsZW1lbnQ6U3RyaW5nCisgICAgICAgICAgICAgICAgICAgICAgICBQc2lJZGVudGlmaWVyOlN0cmluZygnU3RyaW5nJykKKyAgICAgICAgICAgICAgICAgICAgICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgICAgICAgICAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgICAgICAgICAgICAgICBQc2lJZGVudGlmaWVyOnMoJ3MnKQorICAgICAgICAgICAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgICAgICAgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgICAgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgICAgICAgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgICAgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICAgICAgICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICAgICAgICAgICAgICBQc2lSZXR1cm5TdGF0ZW1lbnQKKyAgICAgICAgICAgICAgICAgICAgUHNpS2V5d29yZDpyZXR1cm4oJ3JldHVybicpCisgICAgICAgICAgICAgICAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgICAgICAgICAgICAgICBQc2lMaXRlcmFsRXhwcmVzc2lvbjowCisgICAgICAgICAgICAgICAgICAgICAgUHNpSmF2YVRva2VuOklOVEVHRVJfTElURVJBTCgnMCcpCisgICAgICAgICAgICAgICAgICAgIFBzaUphdmFUb2tlbjpTRU1JQ09MT04oJzsnKQorICAgICAgICAgICAgICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICAgICAgICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICAgICAgICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gICAgJykKKyAgICAgICAgICAgICAgUHNpQ29tbWVudChFTkRfT0ZfTElORV9DT01NRU5UKSgnLy8gc3RhdGljIGluaXRpYWxpemVyJykKKyAgICAgICAgICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gICAgJykKKyAgICAgICAgICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICAgICAgICBQc2lFcnJvckVsZW1lbnQ6VW5leHBlY3RlZCB0b2tlbgorICAgICAgICAgICAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgICAgICAgICAgICBQc2lKYXZhVG9rZW46TFQoJzwnKQorICAgICAgICAgICAgICAgICAgUHNpVHlwZVBhcmFtZXRlcjplcnJvcgorICAgICAgICAgICAgICAgICAgICBQc2lJZGVudGlmaWVyOmVycm9yKCdlcnJvcicpCisgICAgICAgICAgICAgICAgICAgIFBzaUVsZW1lbnQoRVhURU5EU19CT1VORF9MSVNUKQorICAgICAgICAgICAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICAgICAgICAgICAgUHNpRXJyb3JFbGVtZW50Oic+JyBleHBlY3RlZC4KKyAgICAgICAgICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgICAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgICAgICAgICBQc2lUeXBlRWxlbWVudDpkZXNjcgorICAgICAgICAgICAgICAgIFBzaUphdmFDb2RlUmVmZXJlbmNlRWxlbWVudDpkZXNjcgorICAgICAgICAgICAgICAgICAgUHNpSWRlbnRpZmllcjpkZXNjcignZGVzY3InKQorICAgICAgICAgICAgICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICAgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgICAgICAgUHNpRXJyb3JFbGVtZW50OklkZW50aWZpZXIgZXhwZWN0ZWQKKyAgICAgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgICAgICAgUHNpRXJyb3JFbGVtZW50OlVuZXhwZWN0ZWQgdG9rZW4KKyAgICAgICAgICAgICAgICBQc2lKYXZhVG9rZW46RVEoJz0nKQorICAgICAgICAgICAgICAgIFBzaUphdmFUb2tlbjpTVFJJTkdfTElURVJBTCgnIklubmVyIGNsYXNzZXMgY2Fubm90IGhhdmUgc3RhdGljIGRlY2xhcmF0aW9ucyInKQorICAgICAgICAgICAgICAgIFBzaUphdmFUb2tlbjpHVCgnPicpCisgICAgICAgICAgICAgIFBzaU1vZGlmaWVyTGlzdDpzdGF0aWMKKyAgICAgICAgICAgICAgICBQc2lLZXl3b3JkOnN0YXRpYygnc3RhdGljJykKKyAgICAgICAgICAgICAgUHNpRXJyb3JFbGVtZW50OklkZW50aWZpZXIgb3IgdHlwZSBleHBlY3RlZAorICAgICAgICAgICAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgICAgICAgICAgICBQc2lKYXZhVG9rZW46TFQoJzwnKQorICAgICAgICAgICAgICAgICAgUHNpRXJyb3JFbGVtZW50OlR5cGUgcGFyYW1ldGVyIGV4cGVjdGVkCisgICAgICAgICAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICAgICAgICAgICAgUHNpRXJyb3JFbGVtZW50Oic+JyBleHBlY3RlZC4KKyAgICAgICAgICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgICAgICAgIFBzaUVycm9yRWxlbWVudDpVbmV4cGVjdGVkIHRva2VuCisgICAgICAgICAgICAgICAgUHNpSmF2YVRva2VuOkRJVignLycpCisgICAgICAgICAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgICAgICAgUHNpVHlwZUVsZW1lbnQ6ZXJyb3IKKyAgICAgICAgICAgICAgICBQc2lKYXZhQ29kZVJlZmVyZW5jZUVsZW1lbnQ6ZXJyb3IKKyAgICAgICAgICAgICAgICAgIFBzaUlkZW50aWZpZXI6ZXJyb3IoJ2Vycm9yJykKKyAgICAgICAgICAgICAgICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgICAgICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgICAgICAgIFBzaUVycm9yRWxlbWVudDpJZGVudGlmaWVyIGV4cGVjdGVkCisgICAgICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgICAgICAgIFBzaUVycm9yRWxlbWVudDpVbmV4cGVjdGVkIHRva2VuCisgICAgICAgICAgICAgICAgUHNpSmF2YVRva2VuOkdUKCc+JykKKyAgICAgICAgICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gICAgJykKKyAgICAgICAgICAgICAgUHNpQ2xhc3NJbml0aWFsaXplcgorICAgICAgICAgICAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICAgICAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICAgICAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgICAgICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICAgICAgICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gICAgJykKKyAgICAgICAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgICAgICAgUHNpSmF2YVRva2VuOlNFTUlDT0xPTignOycpCisgICAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICAnKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcbicpCisgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9leHByZXNzaW9uUGFyc2luZy9Bbm9ueW1vdXNXaXRoVHlwZVBhcmFtcy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9leHByZXNzaW9uUGFyc2luZy9Bbm9ueW1vdXNXaXRoVHlwZVBhcmFtcy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgzMGYxMjUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2V4cHJlc3Npb25QYXJzaW5nL0Fub255bW91c1dpdGhUeXBlUGFyYW1zLmphdmEKQEAgLTAsMCArMSw3IEBACitjbGFzcyBUZXN0IHsKKyAgICB2b2lkIG1ldGhvZCgpIHsKKyAgICAgICAgbmV3IGE8VD4oKSB7CisgICAgICAgICAgdm9pZCBhKCkge30KKyAgICAgICAgfTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9leHByZXNzaW9uUGFyc2luZy9Bbm9ueW1vdXNXaXRoVHlwZVBhcmFtcy50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2V4cHJlc3Npb25QYXJzaW5nL0Fub255bW91c1dpdGhUeXBlUGFyYW1zLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNzE4ZGMwCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9leHByZXNzaW9uUGFyc2luZy9Bbm9ueW1vdXNXaXRoVHlwZVBhcmFtcy50eHQKQEAgLTAsMCArMSw4NiBAQAorUHNpSmF2YUZpbGU6QW5vbnltb3VzV2l0aFR5cGVQYXJhbXMuamF2YQorICBQc2lJbXBvcnRMaXN0CisgICAgPGVtcHR5IGxpc3Q+CisgIFBzaUNsYXNzOlRlc3QKKyAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lLZXl3b3JkOmNsYXNzKCdjbGFzcycpCisgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgUHNpSWRlbnRpZmllcjpUZXN0KCdUZXN0JykKKyAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgUHNpV2hpdGVTcGFjZSgnXG4gICAgJykKKyAgICBQc2lNZXRob2Q6bWV0aG9kCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6bWV0aG9kKCdtZXRob2QnKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAgICAgICAgJykKKyAgICAgICAgUHNpRXhwcmVzc2lvblN0YXRlbWVudAorICAgICAgICAgIFBzaU5ld0V4cHJlc3Npb246bmV3IGE8VD4oKSB7CisgICAgICAgICAgdm9pZCBhKCkge30KKyAgICAgICAgfQorICAgICAgICAgICAgUHNpS2V5d29yZDpuZXcoJ25ldycpCisgICAgICAgICAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICAgICAgICBQc2lBbm9ueW1vdXNDbGFzcworICAgICAgICAgICAgICBQc2lKYXZhQ29kZVJlZmVyZW5jZUVsZW1lbnQ6YTxUPgorICAgICAgICAgICAgICAgIFBzaUlkZW50aWZpZXI6YSgnYScpCisgICAgICAgICAgICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICAgICAgICAgICAgUHNpSmF2YVRva2VuOkxUKCc8JykKKyAgICAgICAgICAgICAgICAgIFBzaVR5cGVFbGVtZW50OlQKKyAgICAgICAgICAgICAgICAgICAgUHNpSmF2YUNvZGVSZWZlcmVuY2VFbGVtZW50OlQKKyAgICAgICAgICAgICAgICAgICAgICBQc2lJZGVudGlmaWVyOlQoJ1QnKQorICAgICAgICAgICAgICAgICAgICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgICAgICAgICAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICAgICAgICAgICAgUHNpSmF2YVRva2VuOkdUKCc+JykKKyAgICAgICAgICAgICAgUHNpRXhwcmVzc2lvbkxpc3QKKyAgICAgICAgICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICAgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICAgICAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gICAgICAgICAgJykKKyAgICAgICAgICAgICAgUHNpTWV0aG9kOmEKKyAgICAgICAgICAgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgICAgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgICAgICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICAgICAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgICAgICAgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgICAgICAgICAgICBQc2lJZGVudGlmaWVyOmEoJ2EnKQorICAgICAgICAgICAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgICAgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgICAgICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgICAgICAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICAgICAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgICAgICAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICAgICAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgICAgICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICAgICAgICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gICAgICAgICcpCisgICAgICAgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgICAgICAgIFBzaUphdmFUb2tlbjpTRU1JQ09MT04oJzsnKQorICAgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAgICAnKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcbicpCisgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9leHByZXNzaW9uUGFyc2luZy9BcnJheUluaXRpYWxpemVyMC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9leHByZXNzaW9uUGFyc2luZy9BcnJheUluaXRpYWxpemVyMC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjZDMyNmYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2V4cHJlc3Npb25QYXJzaW5nL0FycmF5SW5pdGlhbGl6ZXIwLmphdmEKQEAgLTAsMCArMSwzIEBACitjbGFzcyBBeworICBpbnQgYSA9IHsgfTsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2V4cHJlc3Npb25QYXJzaW5nL0FycmF5SW5pdGlhbGl6ZXIwLnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZXhwcmVzc2lvblBhcnNpbmcvQXJyYXlJbml0aWFsaXplcjAudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdmN2I4OTYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2V4cHJlc3Npb25QYXJzaW5nL0FycmF5SW5pdGlhbGl6ZXIwLnR4dApAQCAtMCwwICsxLDM0IEBACitQc2lKYXZhRmlsZTpBcnJheUluaXRpYWxpemVyMC5qYXZhCisgIFBzaUltcG9ydExpc3QKKyAgICA8ZW1wdHkgbGlzdD4KKyAgUHNpQ2xhc3M6QQorICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaUtleXdvcmQ6Y2xhc3MoJ2NsYXNzJykKKyAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICBQc2lJZGVudGlmaWVyOkEoJ0EnKQorICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcbiAgJykKKyAgICBQc2lGaWVsZDphCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6aW50CisgICAgICAgIFBzaUtleXdvcmQ6aW50KCdpbnQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmEoJ2EnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lKYXZhVG9rZW46RVEoJz0nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lBcnJheUluaXRpYWxpemVyRXhwcmVzc2lvbjp7IH0KKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICAgIFBzaUphdmFUb2tlbjpTRU1JQ09MT04oJzsnKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuJykKKyAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZXhwcmVzc2lvblBhcnNpbmcvQXJyYXlJbml0aWFsaXplcjEuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZXhwcmVzc2lvblBhcnNpbmcvQXJyYXlJbml0aWFsaXplcjEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZTE3YmVhYQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZXhwcmVzc2lvblBhcnNpbmcvQXJyYXlJbml0aWFsaXplcjEuamF2YQpAQCAtMCwwICsxLDMgQEAKK2NsYXNzIEF7CisgIGludCBhID0geyAxIH07Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9leHByZXNzaW9uUGFyc2luZy9BcnJheUluaXRpYWxpemVyMS50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2V4cHJlc3Npb25QYXJzaW5nL0FycmF5SW5pdGlhbGl6ZXIxLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNzE2NjY3Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9leHByZXNzaW9uUGFyc2luZy9BcnJheUluaXRpYWxpemVyMS50eHQKQEAgLTAsMCArMSwzNyBAQAorUHNpSmF2YUZpbGU6QXJyYXlJbml0aWFsaXplcjEuamF2YQorICBQc2lJbXBvcnRMaXN0CisgICAgPGVtcHR5IGxpc3Q+CisgIFBzaUNsYXNzOkEKKyAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lLZXl3b3JkOmNsYXNzKCdjbGFzcycpCisgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgUHNpSWRlbnRpZmllcjpBKCdBJykKKyAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgUHNpV2hpdGVTcGFjZSgnXG4gICcpCisgICAgUHNpRmllbGQ6YQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OmludAorICAgICAgICBQc2lLZXl3b3JkOmludCgnaW50JykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjphKCdhJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSmF2YVRva2VuOkVRKCc9JykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpQXJyYXlJbml0aWFsaXplckV4cHJlc3Npb246eyAxIH0KKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgICBQc2lMaXRlcmFsRXhwcmVzc2lvbjoxCisgICAgICAgICAgUHNpSmF2YVRva2VuOklOVEVHRVJfTElURVJBTCgnMScpCisgICAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICAgIFBzaUphdmFUb2tlbjpTRU1JQ09MT04oJzsnKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuJykKKyAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZXhwcmVzc2lvblBhcnNpbmcvQXJyYXlJbml0aWFsaXplcjIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZXhwcmVzc2lvblBhcnNpbmcvQXJyYXlJbml0aWFsaXplcjIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZjA4ZGIxCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9leHByZXNzaW9uUGFyc2luZy9BcnJheUluaXRpYWxpemVyMi5qYXZhCkBAIC0wLDAgKzEsMyBAQAorY2xhc3MgQXsKKyAgaW50IGEgPSB7IDEsIH07Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9leHByZXNzaW9uUGFyc2luZy9BcnJheUluaXRpYWxpemVyMi50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2V4cHJlc3Npb25QYXJzaW5nL0FycmF5SW5pdGlhbGl6ZXIyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYTYwOTFmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9leHByZXNzaW9uUGFyc2luZy9BcnJheUluaXRpYWxpemVyMi50eHQKQEAgLTAsMCArMSwzOCBAQAorUHNpSmF2YUZpbGU6QXJyYXlJbml0aWFsaXplcjIuamF2YQorICBQc2lJbXBvcnRMaXN0CisgICAgPGVtcHR5IGxpc3Q+CisgIFBzaUNsYXNzOkEKKyAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lLZXl3b3JkOmNsYXNzKCdjbGFzcycpCisgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgUHNpSWRlbnRpZmllcjpBKCdBJykKKyAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgUHNpV2hpdGVTcGFjZSgnXG4gICcpCisgICAgUHNpRmllbGQ6YQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OmludAorICAgICAgICBQc2lLZXl3b3JkOmludCgnaW50JykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjphKCdhJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSmF2YVRva2VuOkVRKCc9JykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpQXJyYXlJbml0aWFsaXplckV4cHJlc3Npb246eyAxLCB9CisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgICAgUHNpTGl0ZXJhbEV4cHJlc3Npb246MQorICAgICAgICAgIFBzaUphdmFUb2tlbjpJTlRFR0VSX0xJVEVSQUwoJzEnKQorICAgICAgICBQc2lKYXZhVG9rZW46Q09NTUEoJywnKQorICAgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgICBQc2lKYXZhVG9rZW46U0VNSUNPTE9OKCc7JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcbicpCisgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2V4cHJlc3Npb25QYXJzaW5nL0FycmF5SW5pdGlhbGl6ZXIzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2V4cHJlc3Npb25QYXJzaW5nL0FycmF5SW5pdGlhbGl6ZXIzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDA1YjM4NAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZXhwcmVzc2lvblBhcnNpbmcvQXJyYXlJbml0aWFsaXplcjMuamF2YQpAQCAtMCwwICsxLDMgQEAKK2NsYXNzIEF7CisgIGludCBhID0geyAxLDIgfTsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2V4cHJlc3Npb25QYXJzaW5nL0FycmF5SW5pdGlhbGl6ZXIzLnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZXhwcmVzc2lvblBhcnNpbmcvQXJyYXlJbml0aWFsaXplcjMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVkZWJmZGMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2V4cHJlc3Npb25QYXJzaW5nL0FycmF5SW5pdGlhbGl6ZXIzLnR4dApAQCAtMCwwICsxLDQwIEBACitQc2lKYXZhRmlsZTpBcnJheUluaXRpYWxpemVyMy5qYXZhCisgIFBzaUltcG9ydExpc3QKKyAgICA8ZW1wdHkgbGlzdD4KKyAgUHNpQ2xhc3M6QQorICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaUtleXdvcmQ6Y2xhc3MoJ2NsYXNzJykKKyAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICBQc2lJZGVudGlmaWVyOkEoJ0EnKQorICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcbiAgJykKKyAgICBQc2lGaWVsZDphCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6aW50CisgICAgICAgIFBzaUtleXdvcmQ6aW50KCdpbnQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmEoJ2EnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lKYXZhVG9rZW46RVEoJz0nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lBcnJheUluaXRpYWxpemVyRXhwcmVzc2lvbjp7IDEsMiB9CisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgICAgUHNpTGl0ZXJhbEV4cHJlc3Npb246MQorICAgICAgICAgIFBzaUphdmFUb2tlbjpJTlRFR0VSX0xJVEVSQUwoJzEnKQorICAgICAgICBQc2lKYXZhVG9rZW46Q09NTUEoJywnKQorICAgICAgICBQc2lMaXRlcmFsRXhwcmVzc2lvbjoyCisgICAgICAgICAgUHNpSmF2YVRva2VuOklOVEVHRVJfTElURVJBTCgnMicpCisgICAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICAgIFBzaUphdmFUb2tlbjpTRU1JQ09MT04oJzsnKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuJykKKyAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZXhwcmVzc2lvblBhcnNpbmcvQXJyYXlJbml0aWFsaXplcjQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZXhwcmVzc2lvblBhcnNpbmcvQXJyYXlJbml0aWFsaXplcjQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYzcyN2Q2Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9leHByZXNzaW9uUGFyc2luZy9BcnJheUluaXRpYWxpemVyNC5qYXZhCkBAIC0wLDAgKzEsMyBAQAorY2xhc3MgQXsKKyAgaW50IGEgPSB7IDEgMiB9OworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZXhwcmVzc2lvblBhcnNpbmcvQXJyYXlJbml0aWFsaXplcjQudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9leHByZXNzaW9uUGFyc2luZy9BcnJheUluaXRpYWxpemVyNC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmRhZDVlOAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZXhwcmVzc2lvblBhcnNpbmcvQXJyYXlJbml0aWFsaXplcjQudHh0CkBAIC0wLDAgKzEsNDIgQEAKK1BzaUphdmFGaWxlOkFycmF5SW5pdGlhbGl6ZXI0LmphdmEKKyAgUHNpSW1wb3J0TGlzdAorICAgIDxlbXB0eSBsaXN0PgorICBQc2lDbGFzczpBCisgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpS2V5d29yZDpjbGFzcygnY2xhc3MnKQorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaUlkZW50aWZpZXI6QSgnQScpCisgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuICAnKQorICAgIFBzaUZpZWxkOmEKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDppbnQKKyAgICAgICAgUHNpS2V5d29yZDppbnQoJ2ludCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6YSgnYScpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUphdmFUb2tlbjpFUSgnPScpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUFycmF5SW5pdGlhbGl6ZXJFeHByZXNzaW9uOnsgMSAyIH0KKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgICBQc2lMaXRlcmFsRXhwcmVzc2lvbjoxCisgICAgICAgICAgUHNpSmF2YVRva2VuOklOVEVHRVJfTElURVJBTCgnMScpCisgICAgICAgIFBzaUVycm9yRWxlbWVudDonLCcgZXhwZWN0ZWQKKyAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICAgIFBzaUxpdGVyYWxFeHByZXNzaW9uOjIKKyAgICAgICAgICBQc2lKYXZhVG9rZW46SU5URUdFUl9MSVRFUkFMKCcyJykKKyAgICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgICAgUHNpSmF2YVRva2VuOlNFTUlDT0xPTignOycpCisgICAgUHNpV2hpdGVTcGFjZSgnXG4nKQorICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9leHByZXNzaW9uUGFyc2luZy9BcnJheUluaXRpYWxpemVyNS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9leHByZXNzaW9uUGFyc2luZy9BcnJheUluaXRpYWxpemVyNS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhkZTc0YjIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2V4cHJlc3Npb25QYXJzaW5nL0FycmF5SW5pdGlhbGl6ZXI1LmphdmEKQEAgLTAsMCArMSwzIEBACitjbGFzcyBBeworICBpbnQgYSA9IHsgeyB9OworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZXhwcmVzc2lvblBhcnNpbmcvQXJyYXlJbml0aWFsaXplcjUudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9leHByZXNzaW9uUGFyc2luZy9BcnJheUluaXRpYWxpemVyNS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTczZmZjNwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZXhwcmVzc2lvblBhcnNpbmcvQXJyYXlJbml0aWFsaXplcjUudHh0CkBAIC0wLDAgKzEsNDEgQEAKK1BzaUphdmFGaWxlOkFycmF5SW5pdGlhbGl6ZXI1LmphdmEKKyAgUHNpSW1wb3J0TGlzdAorICAgIDxlbXB0eSBsaXN0PgorICBQc2lDbGFzczpBCisgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpS2V5d29yZDpjbGFzcygnY2xhc3MnKQorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaUlkZW50aWZpZXI6QSgnQScpCisgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuICAnKQorICAgIFBzaUZpZWxkOmEKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDppbnQKKyAgICAgICAgUHNpS2V5d29yZDppbnQoJ2ludCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6YSgnYScpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUphdmFUb2tlbjpFUSgnPScpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUFycmF5SW5pdGlhbGl6ZXJFeHByZXNzaW9uOnsgeyB9CisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgICAgUHNpQXJyYXlJbml0aWFsaXplckV4cHJlc3Npb246eyB9CisgICAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgICAgIFBzaUVycm9yRWxlbWVudDonLCcgZXhwZWN0ZWQKKyAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgUHNpRXJyb3JFbGVtZW50Oid9JyBleHBlY3RlZAorICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpSmF2YVRva2VuOlNFTUlDT0xPTignOycpCisgICAgUHNpV2hpdGVTcGFjZSgnXG4nKQorICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZXhwcmVzc2lvblBhcnNpbmcvQXJyYXlJbml0aWFsaXplcjYuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZXhwcmVzc2lvblBhcnNpbmcvQXJyYXlJbml0aWFsaXplcjYuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMGNkNjRmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9leHByZXNzaW9uUGFyc2luZy9BcnJheUluaXRpYWxpemVyNi5qYXZhCkBAIC0wLDAgKzEsMyBAQAorY2xhc3MgQXsKKyAgaW50IGEgPSB7ICAsICB9OworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZXhwcmVzc2lvblBhcnNpbmcvQXJyYXlJbml0aWFsaXplcjYudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9leHByZXNzaW9uUGFyc2luZy9BcnJheUluaXRpYWxpemVyNi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDU1ZDczYwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZXhwcmVzc2lvblBhcnNpbmcvQXJyYXlJbml0aWFsaXplcjYudHh0CkBAIC0wLDAgKzEsMzYgQEAKK1BzaUphdmFGaWxlOkFycmF5SW5pdGlhbGl6ZXI2LmphdmEKKyAgUHNpSW1wb3J0TGlzdAorICAgIDxlbXB0eSBsaXN0PgorICBQc2lDbGFzczpBCisgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpS2V5d29yZDpjbGFzcygnY2xhc3MnKQorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaUlkZW50aWZpZXI6QSgnQScpCisgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuICAnKQorICAgIFBzaUZpZWxkOmEKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDppbnQKKyAgICAgICAgUHNpS2V5d29yZDppbnQoJ2ludCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6YSgnYScpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUphdmFUb2tlbjpFUSgnPScpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUFycmF5SW5pdGlhbGl6ZXJFeHByZXNzaW9uOnsgICwgIH0KKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaVdoaXRlU3BhY2UoJyAgJykKKyAgICAgICAgUHNpSmF2YVRva2VuOkNPTU1BKCcsJykKKyAgICAgICAgUHNpV2hpdGVTcGFjZSgnICAnKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICAgIFBzaUphdmFUb2tlbjpTRU1JQ09MT04oJzsnKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuJykKKyAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2V4cHJlc3Npb25QYXJzaW5nL0FycmF5SW5pdGlhbGl6ZXI3LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2V4cHJlc3Npb25QYXJzaW5nL0FycmF5SW5pdGlhbGl6ZXI3LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDJjZmY4MQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZXhwcmVzc2lvblBhcnNpbmcvQXJyYXlJbml0aWFsaXplcjcuamF2YQpAQCAtMCwwICsxLDQgQEAKK2NsYXNzIEF7CisgIGludCBhID0geworICAsICA3fTsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2V4cHJlc3Npb25QYXJzaW5nL0FycmF5SW5pdGlhbGl6ZXI3LnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZXhwcmVzc2lvblBhcnNpbmcvQXJyYXlJbml0aWFsaXplcjcudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMwYzEyZmMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2V4cHJlc3Npb25QYXJzaW5nL0FycmF5SW5pdGlhbGl6ZXI3LnR4dApAQCAtMCwwICsxLDQxIEBACitQc2lKYXZhRmlsZTpBcnJheUluaXRpYWxpemVyNy5qYXZhCisgIFBzaUltcG9ydExpc3QKKyAgICA8ZW1wdHkgbGlzdD4KKyAgUHNpQ2xhc3M6QQorICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaUtleXdvcmQ6Y2xhc3MoJ2NsYXNzJykKKyAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICBQc2lJZGVudGlmaWVyOkEoJ0EnKQorICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcbiAgJykKKyAgICBQc2lGaWVsZDphCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6aW50CisgICAgICAgIFBzaUtleXdvcmQ6aW50KCdpbnQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmEoJ2EnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lKYXZhVG9rZW46RVEoJz0nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lBcnJheUluaXRpYWxpemVyRXhwcmVzc2lvbjp7CisgICwgIDd9CisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lFcnJvckVsZW1lbnQ6RXhwcmVzc2lvbiBleHBlY3RlZAorICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAgJykKKyAgICAgICAgUHNpSmF2YVRva2VuOkNPTU1BKCcsJykKKyAgICAgICAgUHNpV2hpdGVTcGFjZSgnICAnKQorICAgICAgICBQc2lMaXRlcmFsRXhwcmVzc2lvbjo3CisgICAgICAgICAgUHNpSmF2YVRva2VuOklOVEVHRVJfTElURVJBTCgnNycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgICAgUHNpSmF2YVRva2VuOlNFTUlDT0xPTignOycpCisgICAgUHNpV2hpdGVTcGFjZSgnXG4nKQorICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZXhwcmVzc2lvblBhcnNpbmcvQXNzaWdubWVudDAuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZXhwcmVzc2lvblBhcnNpbmcvQXNzaWdubWVudDAuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYjljNjEzCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9leHByZXNzaW9uUGFyc2luZy9Bc3NpZ25tZW50MC5qYXZhCkBAIC0wLDAgKzEsNSBAQAorY2xhc3MgRm9veworICB7CisgICAgYSA9IDA7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2V4cHJlc3Npb25QYXJzaW5nL0Fzc2lnbm1lbnQwLnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZXhwcmVzc2lvblBhcnNpbmcvQXNzaWdubWVudDAudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEyODhlZDQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2V4cHJlc3Npb25QYXJzaW5nL0Fzc2lnbm1lbnQwLnR4dApAQCAtMCwwICsxLDM5IEBACitQc2lKYXZhRmlsZTpBc3NpZ25tZW50MC5qYXZhCisgIFBzaUltcG9ydExpc3QKKyAgICA8ZW1wdHkgbGlzdD4KKyAgUHNpQ2xhc3M6Rm9vCisgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpS2V5d29yZDpjbGFzcygnY2xhc3MnKQorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaUlkZW50aWZpZXI6Rm9vKCdGb28nKQorICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcbiAgJykKKyAgICBQc2lDbGFzc0luaXRpYWxpemVyCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAgICAnKQorICAgICAgICBQc2lFeHByZXNzaW9uU3RhdGVtZW50CisgICAgICAgICAgUHNpQXNzaWdubWVudEV4cHJlc3Npb246YSA9IDAKKyAgICAgICAgICAgIFBzaVJlZmVyZW5jZUV4cHJlc3Npb246YQorICAgICAgICAgICAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgICAgICAgIFBzaUlkZW50aWZpZXI6YSgnYScpCisgICAgICAgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgICAgICAgIFBzaUphdmFUb2tlbjpFUSgnPScpCisgICAgICAgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgICAgICAgIFBzaUxpdGVyYWxFeHByZXNzaW9uOjAKKyAgICAgICAgICAgICAgUHNpSmF2YVRva2VuOklOVEVHRVJfTElURVJBTCgnMCcpCisgICAgICAgICAgUHNpSmF2YVRva2VuOlNFTUlDT0xPTignOycpCisgICAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICAnKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcbicpCisgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9leHByZXNzaW9uUGFyc2luZy9Bc3NpZ25tZW50MS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9leHByZXNzaW9uUGFyc2luZy9Bc3NpZ25tZW50MS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY4MzU1N2IKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2V4cHJlc3Npb25QYXJzaW5nL0Fzc2lnbm1lbnQxLmphdmEKQEAgLTAsMCArMSw1IEBACitjbGFzcyBGb297CisgIHsKKyAgICBhID0KKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZXhwcmVzc2lvblBhcnNpbmcvQXNzaWdubWVudDEudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9leHByZXNzaW9uUGFyc2luZy9Bc3NpZ25tZW50MS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTBmODFmYWMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2V4cHJlc3Npb25QYXJzaW5nL0Fzc2lnbm1lbnQxLnR4dApAQCAtMCwwICsxLDM5IEBACitQc2lKYXZhRmlsZTpBc3NpZ25tZW50MS5qYXZhCisgIFBzaUltcG9ydExpc3QKKyAgICA8ZW1wdHkgbGlzdD4KKyAgUHNpQ2xhc3M6Rm9vCisgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpS2V5d29yZDpjbGFzcygnY2xhc3MnKQorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaUlkZW50aWZpZXI6Rm9vKCdGb28nKQorICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcbiAgJykKKyAgICBQc2lDbGFzc0luaXRpYWxpemVyCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAgICAnKQorICAgICAgICBQc2lFeHByZXNzaW9uU3RhdGVtZW50CisgICAgICAgICAgUHNpQXNzaWdubWVudEV4cHJlc3Npb246YSA9CisgICAgICAgICAgICBQc2lSZWZlcmVuY2VFeHByZXNzaW9uOmEKKyAgICAgICAgICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICAgICAgICBQc2lJZGVudGlmaWVyOmEoJ2EnKQorICAgICAgICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICAgICAgICBQc2lKYXZhVG9rZW46RVEoJz0nKQorICAgICAgICAgICAgUHNpRXJyb3JFbGVtZW50OkV4cHJlc3Npb24gZXhwZWN0ZWQKKyAgICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgICAgUHNpRXJyb3JFbGVtZW50Oic7JyBleHBlY3RlZAorICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICAnKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcbicpCisgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9leHByZXNzaW9uUGFyc2luZy9DYXN0MC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9leHByZXNzaW9uUGFyc2luZy9DYXN0MC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmViZDc3YjMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2V4cHJlc3Npb25QYXJzaW5nL0Nhc3QwLmphdmEKQEAgLTAsMCArMSw1IEBACitjbGFzcyBGb297CisgIHsKKyAgICByZXR1cm4gKFR5cGUpdmFyOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9leHByZXNzaW9uUGFyc2luZy9DYXN0MC50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2V4cHJlc3Npb25QYXJzaW5nL0Nhc3QwLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MWY5ZTg2Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9leHByZXNzaW9uUGFyc2luZy9DYXN0MC50eHQKQEAgLTAsMCArMSw0MyBAQAorUHNpSmF2YUZpbGU6Q2FzdDAuamF2YQorICBQc2lJbXBvcnRMaXN0CisgICAgPGVtcHR5IGxpc3Q+CisgIFBzaUNsYXNzOkZvbworICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaUtleXdvcmQ6Y2xhc3MoJ2NsYXNzJykKKyAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICBQc2lJZGVudGlmaWVyOkZvbygnRm9vJykKKyAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgUHNpV2hpdGVTcGFjZSgnXG4gICcpCisgICAgUHNpQ2xhc3NJbml0aWFsaXplcgorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gICAgJykKKyAgICAgICAgUHNpUmV0dXJuU3RhdGVtZW50CisgICAgICAgICAgUHNpS2V5d29yZDpyZXR1cm4oJ3JldHVybicpCisgICAgICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICAgICAgUHNpVHlwZUNhc3RFeHByZXNzaW9uOihUeXBlKXZhcgorICAgICAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgICAgIFBzaVR5cGVFbGVtZW50OlR5cGUKKyAgICAgICAgICAgICAgUHNpSmF2YUNvZGVSZWZlcmVuY2VFbGVtZW50OlR5cGUKKyAgICAgICAgICAgICAgICBQc2lJZGVudGlmaWVyOlR5cGUoJ1R5cGUnKQorICAgICAgICAgICAgICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgICAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgICAgICAgIFBzaVJlZmVyZW5jZUV4cHJlc3Npb246dmFyCisgICAgICAgICAgICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgICAgICAgUHNpSWRlbnRpZmllcjp2YXIoJ3ZhcicpCisgICAgICAgICAgUHNpSmF2YVRva2VuOlNFTUlDT0xPTignOycpCisgICAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICAnKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcbicpCisgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9leHByZXNzaW9uUGFyc2luZy9Db25kMC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9leHByZXNzaW9uUGFyc2luZy9Db25kMC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkyY2M5YzYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2V4cHJlc3Npb25QYXJzaW5nL0NvbmQwLmphdmEKQEAgLTAsMCArMSw1IEBACitjbGFzcyBGb297CisgIHsKKyAgICByZXR1cm4gY29uZCA/IHRydWUgOiBmYWxzZTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZXhwcmVzc2lvblBhcnNpbmcvQ29uZDAudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9leHByZXNzaW9uUGFyc2luZy9Db25kMC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzAwODM2NQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZXhwcmVzc2lvblBhcnNpbmcvQ29uZDAudHh0CkBAIC0wLDAgKzEsNDYgQEAKK1BzaUphdmFGaWxlOkNvbmQwLmphdmEKKyAgUHNpSW1wb3J0TGlzdAorICAgIDxlbXB0eSBsaXN0PgorICBQc2lDbGFzczpGb28KKyAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lLZXl3b3JkOmNsYXNzKCdjbGFzcycpCisgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgUHNpSWRlbnRpZmllcjpGb28oJ0ZvbycpCisgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuICAnKQorICAgIFBzaUNsYXNzSW5pdGlhbGl6ZXIKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICAgICcpCisgICAgICAgIFBzaVJldHVyblN0YXRlbWVudAorICAgICAgICAgIFBzaUtleXdvcmQ6cmV0dXJuKCdyZXR1cm4nKQorICAgICAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgICAgIFBzaUNvbmRpdGlvbmFsRXhwcmVzc2lvbjpjb25kID8gdHJ1ZSA6IGZhbHNlCisgICAgICAgICAgICBQc2lSZWZlcmVuY2VFeHByZXNzaW9uOmNvbmQKKyAgICAgICAgICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICAgICAgICBQc2lJZGVudGlmaWVyOmNvbmQoJ2NvbmQnKQorICAgICAgICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICAgICAgICBQc2lKYXZhVG9rZW46UVVFU1QoJz8nKQorICAgICAgICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICAgICAgICBQc2lMaXRlcmFsRXhwcmVzc2lvbjp0cnVlCisgICAgICAgICAgICAgIFBzaUphdmFUb2tlbjpUUlVFX0tFWVdPUkQoJ3RydWUnKQorICAgICAgICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICAgICAgICBQc2lKYXZhVG9rZW46Q09MT04oJzonKQorICAgICAgICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICAgICAgICBQc2lMaXRlcmFsRXhwcmVzc2lvbjpmYWxzZQorICAgICAgICAgICAgICBQc2lKYXZhVG9rZW46RkFMU0VfS0VZV09SRCgnZmFsc2UnKQorICAgICAgICAgIFBzaUphdmFUb2tlbjpTRU1JQ09MT04oJzsnKQorICAgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAgJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG4nKQorICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZXhwcmVzc2lvblBhcnNpbmcvQ29uZDEuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZXhwcmVzc2lvblBhcnNpbmcvQ29uZDEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45Nzk4Mjg5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9leHByZXNzaW9uUGFyc2luZy9Db25kMS5qYXZhCkBAIC0wLDAgKzEsNSBAQAorY2xhc3MgRm9veworICB7CisgICAgcmV0dXJuIGNvbmQgPworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9leHByZXNzaW9uUGFyc2luZy9Db25kMS50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2V4cHJlc3Npb25QYXJzaW5nL0NvbmQxLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MjQwMDUwCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9leHByZXNzaW9uUGFyc2luZy9Db25kMS50eHQKQEAgLTAsMCArMSw0MSBAQAorUHNpSmF2YUZpbGU6Q29uZDEuamF2YQorICBQc2lJbXBvcnRMaXN0CisgICAgPGVtcHR5IGxpc3Q+CisgIFBzaUNsYXNzOkZvbworICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaUtleXdvcmQ6Y2xhc3MoJ2NsYXNzJykKKyAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICBQc2lJZGVudGlmaWVyOkZvbygnRm9vJykKKyAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgUHNpV2hpdGVTcGFjZSgnXG4gICcpCisgICAgUHNpQ2xhc3NJbml0aWFsaXplcgorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gICAgJykKKyAgICAgICAgUHNpUmV0dXJuU3RhdGVtZW50CisgICAgICAgICAgUHNpS2V5d29yZDpyZXR1cm4oJ3JldHVybicpCisgICAgICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICAgICAgUHNpQ29uZGl0aW9uYWxFeHByZXNzaW9uOmNvbmQgPworICAgICAgICAgICAgUHNpUmVmZXJlbmNlRXhwcmVzc2lvbjpjb25kCisgICAgICAgICAgICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgICAgICAgUHNpSWRlbnRpZmllcjpjb25kKCdjb25kJykKKyAgICAgICAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgICAgICAgUHNpSmF2YVRva2VuOlFVRVNUKCc/JykKKyAgICAgICAgICAgIFBzaUVycm9yRWxlbWVudDpFeHByZXNzaW9uIGV4cGVjdGVkCisgICAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICAgIFBzaUVycm9yRWxlbWVudDonOycgZXhwZWN0ZWQKKyAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAgJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG4nKQorICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZXhwcmVzc2lvblBhcnNpbmcvQ29uZDIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZXhwcmVzc2lvblBhcnNpbmcvQ29uZDIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYTk3ZjA4Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9leHByZXNzaW9uUGFyc2luZy9Db25kMi5qYXZhCkBAIC0wLDAgKzEsNSBAQAorY2xhc3MgRm9veworICB7CisgICAgcmV0dXJuIGNvbmQgPyB0cnVlCisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2V4cHJlc3Npb25QYXJzaW5nL0NvbmQyLnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZXhwcmVzc2lvblBhcnNpbmcvQ29uZDIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNiMzIwZTcKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2V4cHJlc3Npb25QYXJzaW5nL0NvbmQyLnR4dApAQCAtMCwwICsxLDQ0IEBACitQc2lKYXZhRmlsZTpDb25kMi5qYXZhCisgIFBzaUltcG9ydExpc3QKKyAgICA8ZW1wdHkgbGlzdD4KKyAgUHNpQ2xhc3M6Rm9vCisgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpS2V5d29yZDpjbGFzcygnY2xhc3MnKQorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaUlkZW50aWZpZXI6Rm9vKCdGb28nKQorICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcbiAgJykKKyAgICBQc2lDbGFzc0luaXRpYWxpemVyCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAgICAnKQorICAgICAgICBQc2lSZXR1cm5TdGF0ZW1lbnQKKyAgICAgICAgICBQc2lLZXl3b3JkOnJldHVybigncmV0dXJuJykKKyAgICAgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgICAgICBQc2lDb25kaXRpb25hbEV4cHJlc3Npb246Y29uZCA/IHRydWUKKyAgICAgICAgICAgIFBzaVJlZmVyZW5jZUV4cHJlc3Npb246Y29uZAorICAgICAgICAgICAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgICAgICAgIFBzaUlkZW50aWZpZXI6Y29uZCgnY29uZCcpCisgICAgICAgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgICAgICAgIFBzaUphdmFUb2tlbjpRVUVTVCgnPycpCisgICAgICAgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgICAgICAgIFBzaUxpdGVyYWxFeHByZXNzaW9uOnRydWUKKyAgICAgICAgICAgICAgUHNpSmF2YVRva2VuOlRSVUVfS0VZV09SRCgndHJ1ZScpCisgICAgICAgICAgICBQc2lFcnJvckVsZW1lbnQ6JzonIGV4cGVjdGVkCisgICAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICAgIFBzaUVycm9yRWxlbWVudDonOycgZXhwZWN0ZWQKKyAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAgJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG4nKQorICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZXhwcmVzc2lvblBhcnNpbmcvQ29uZDMuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZXhwcmVzc2lvblBhcnNpbmcvQ29uZDMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YTVhNDM5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9leHByZXNzaW9uUGFyc2luZy9Db25kMy5qYXZhCkBAIC0wLDAgKzEsNSBAQAorY2xhc3MgRm9veworICB7CisgICAgcmV0dXJuIGNvbmQgPyB0cnVlIDoKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZXhwcmVzc2lvblBhcnNpbmcvQ29uZDMudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9leHByZXNzaW9uUGFyc2luZy9Db25kMy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzhmNzJiOQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZXhwcmVzc2lvblBhcnNpbmcvQ29uZDMudHh0CkBAIC0wLDAgKzEsNDYgQEAKK1BzaUphdmFGaWxlOkNvbmQzLmphdmEKKyAgUHNpSW1wb3J0TGlzdAorICAgIDxlbXB0eSBsaXN0PgorICBQc2lDbGFzczpGb28KKyAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lLZXl3b3JkOmNsYXNzKCdjbGFzcycpCisgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgUHNpSWRlbnRpZmllcjpGb28oJ0ZvbycpCisgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuICAnKQorICAgIFBzaUNsYXNzSW5pdGlhbGl6ZXIKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICAgICcpCisgICAgICAgIFBzaVJldHVyblN0YXRlbWVudAorICAgICAgICAgIFBzaUtleXdvcmQ6cmV0dXJuKCdyZXR1cm4nKQorICAgICAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgICAgIFBzaUNvbmRpdGlvbmFsRXhwcmVzc2lvbjpjb25kID8gdHJ1ZSA6CisgICAgICAgICAgICBQc2lSZWZlcmVuY2VFeHByZXNzaW9uOmNvbmQKKyAgICAgICAgICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICAgICAgICBQc2lJZGVudGlmaWVyOmNvbmQoJ2NvbmQnKQorICAgICAgICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICAgICAgICBQc2lKYXZhVG9rZW46UVVFU1QoJz8nKQorICAgICAgICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICAgICAgICBQc2lMaXRlcmFsRXhwcmVzc2lvbjp0cnVlCisgICAgICAgICAgICAgIFBzaUphdmFUb2tlbjpUUlVFX0tFWVdPUkQoJ3RydWUnKQorICAgICAgICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICAgICAgICBQc2lKYXZhVG9rZW46Q09MT04oJzonKQorICAgICAgICAgICAgUHNpRXJyb3JFbGVtZW50OkV4cHJlc3Npb24gZXhwZWN0ZWQKKyAgICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgICAgUHNpRXJyb3JFbGVtZW50Oic7JyBleHBlY3RlZAorICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICAnKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcbicpCisgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9leHByZXNzaW9uUGFyc2luZy9Db25kQW5kMC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9leHByZXNzaW9uUGFyc2luZy9Db25kQW5kMC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNkNmI5ZDgKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2V4cHJlc3Npb25QYXJzaW5nL0NvbmRBbmQwLmphdmEKQEAgLTAsMCArMSw1IEBACitjbGFzcyBGb297CisgIHsKKyAgICByZXR1cm4gYSAmJiBiICYmIGM7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2V4cHJlc3Npb25QYXJzaW5nL0NvbmRBbmQwLnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZXhwcmVzc2lvblBhcnNpbmcvQ29uZEFuZDAudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM4M2U3MTAKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2V4cHJlc3Npb25QYXJzaW5nL0NvbmRBbmQwLnR4dApAQCAtMCwwICsxLDUwIEBACitQc2lKYXZhRmlsZTpDb25kQW5kMC5qYXZhCisgIFBzaUltcG9ydExpc3QKKyAgICA8ZW1wdHkgbGlzdD4KKyAgUHNpQ2xhc3M6Rm9vCisgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpS2V5d29yZDpjbGFzcygnY2xhc3MnKQorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaUlkZW50aWZpZXI6Rm9vKCdGb28nKQorICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcbiAgJykKKyAgICBQc2lDbGFzc0luaXRpYWxpemVyCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAgICAnKQorICAgICAgICBQc2lSZXR1cm5TdGF0ZW1lbnQKKyAgICAgICAgICBQc2lLZXl3b3JkOnJldHVybigncmV0dXJuJykKKyAgICAgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgICAgICBQc2lQb2x5YWRpY0V4cHJlc3Npb246IGEgJiYgYiAmJiBjCisgICAgICAgICAgICBQc2lSZWZlcmVuY2VFeHByZXNzaW9uOmEKKyAgICAgICAgICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICAgICAgICBQc2lJZGVudGlmaWVyOmEoJ2EnKQorICAgICAgICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICAgICAgICBQc2lKYXZhVG9rZW46QU5EQU5EKCcmJicpCisgICAgICAgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgICAgICAgIFBzaVJlZmVyZW5jZUV4cHJlc3Npb246YgorICAgICAgICAgICAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgICAgICAgIFBzaUlkZW50aWZpZXI6YignYicpCisgICAgICAgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgICAgICAgIFBzaUphdmFUb2tlbjpBTkRBTkQoJyYmJykKKyAgICAgICAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgICAgICAgUHNpUmVmZXJlbmNlRXhwcmVzc2lvbjpjCisgICAgICAgICAgICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgICAgICAgUHNpSWRlbnRpZmllcjpjKCdjJykKKyAgICAgICAgICBQc2lKYXZhVG9rZW46U0VNSUNPTE9OKCc7JykKKyAgICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gICcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuJykKKyAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZXhwcmVzc2lvblBhcnNpbmcvQ29uZEFuZDEuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZXhwcmVzc2lvblBhcnNpbmcvQ29uZEFuZDEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZjA1ODkzCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9leHByZXNzaW9uUGFyc2luZy9Db25kQW5kMS5qYXZhCkBAIC0wLDAgKzEsNSBAQAorY2xhc3MgRm9veworICB7CisgICAgIGEgJiYKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZXhwcmVzc2lvblBhcnNpbmcvQ29uZEFuZDEudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9leHByZXNzaW9uUGFyc2luZy9Db25kQW5kMS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTE3MzU1YQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZXhwcmVzc2lvblBhcnNpbmcvQ29uZEFuZDEudHh0CkBAIC0wLDAgKzEsMzkgQEAKK1BzaUphdmFGaWxlOkNvbmRBbmQxLmphdmEKKyAgUHNpSW1wb3J0TGlzdAorICAgIDxlbXB0eSBsaXN0PgorICBQc2lDbGFzczpGb28KKyAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lLZXl3b3JkOmNsYXNzKCdjbGFzcycpCisgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgUHNpSWRlbnRpZmllcjpGb28oJ0ZvbycpCisgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuICAnKQorICAgIFBzaUNsYXNzSW5pdGlhbGl6ZXIKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICAgICAnKQorICAgICAgICBQc2lFeHByZXNzaW9uU3RhdGVtZW50CisgICAgICAgICAgUHNpQmluYXJ5RXhwcmVzc2lvbjphICYmCisgICAgICAgICAgICBQc2lSZWZlcmVuY2VFeHByZXNzaW9uOmEKKyAgICAgICAgICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICAgICAgICBQc2lJZGVudGlmaWVyOmEoJ2EnKQorICAgICAgICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICAgICAgICBQc2lKYXZhVG9rZW46QU5EQU5EKCcmJicpCisgICAgICAgICAgICBQc2lFcnJvckVsZW1lbnQ6RXhwcmVzc2lvbiBleHBlY3RlZAorICAgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgICBQc2lFcnJvckVsZW1lbnQ6JzsnIGV4cGVjdGVkCisgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gICcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuJykKKyAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2V4cHJlc3Npb25QYXJzaW5nL0NvbmRPcjAuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZXhwcmVzc2lvblBhcnNpbmcvQ29uZE9yMC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM1YWRjNjgKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2V4cHJlc3Npb25QYXJzaW5nL0NvbmRPcjAuamF2YQpAQCAtMCwwICsxLDUgQEAKK2NsYXNzIEZvb3sKKyAgeworICAgIHJldHVybiBhIHx8IGIgfHwgYzsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZXhwcmVzc2lvblBhcnNpbmcvQ29uZE9yMC50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2V4cHJlc3Npb25QYXJzaW5nL0NvbmRPcjAudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkyNmE4YmYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2V4cHJlc3Npb25QYXJzaW5nL0NvbmRPcjAudHh0CkBAIC0wLDAgKzEsNTAgQEAKK1BzaUphdmFGaWxlOkNvbmRPcjAuamF2YQorICBQc2lJbXBvcnRMaXN0CisgICAgPGVtcHR5IGxpc3Q+CisgIFBzaUNsYXNzOkZvbworICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaUtleXdvcmQ6Y2xhc3MoJ2NsYXNzJykKKyAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICBQc2lJZGVudGlmaWVyOkZvbygnRm9vJykKKyAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgUHNpV2hpdGVTcGFjZSgnXG4gICcpCisgICAgUHNpQ2xhc3NJbml0aWFsaXplcgorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gICAgJykKKyAgICAgICAgUHNpUmV0dXJuU3RhdGVtZW50CisgICAgICAgICAgUHNpS2V5d29yZDpyZXR1cm4oJ3JldHVybicpCisgICAgICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICAgICAgUHNpUG9seWFkaWNFeHByZXNzaW9uOiBhIHx8IGIgfHwgYworICAgICAgICAgICAgUHNpUmVmZXJlbmNlRXhwcmVzc2lvbjphCisgICAgICAgICAgICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgICAgICAgUHNpSWRlbnRpZmllcjphKCdhJykKKyAgICAgICAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgICAgICAgUHNpSmF2YVRva2VuOk9ST1IoJ3x8JykKKyAgICAgICAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgICAgICAgUHNpUmVmZXJlbmNlRXhwcmVzc2lvbjpiCisgICAgICAgICAgICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgICAgICAgUHNpSWRlbnRpZmllcjpiKCdiJykKKyAgICAgICAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgICAgICAgUHNpSmF2YVRva2VuOk9ST1IoJ3x8JykKKyAgICAgICAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgICAgICAgUHNpUmVmZXJlbmNlRXhwcmVzc2lvbjpjCisgICAgICAgICAgICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgICAgICAgUHNpSWRlbnRpZmllcjpjKCdjJykKKyAgICAgICAgICBQc2lKYXZhVG9rZW46U0VNSUNPTE9OKCc7JykKKyAgICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gICcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuJykKKyAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZXhwcmVzc2lvblBhcnNpbmcvQ29uZE9yMS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9leHByZXNzaW9uUGFyc2luZy9Db25kT3IxLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGVjNzJjZQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZXhwcmVzc2lvblBhcnNpbmcvQ29uZE9yMS5qYXZhCkBAIC0wLDAgKzEsNSBAQAorY2xhc3MgRm9veworICB7CisgICAgIGEgfHwKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZXhwcmVzc2lvblBhcnNpbmcvQ29uZE9yMS50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2V4cHJlc3Npb25QYXJzaW5nL0NvbmRPcjEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI4NmU0Y2QKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2V4cHJlc3Npb25QYXJzaW5nL0NvbmRPcjEudHh0CkBAIC0wLDAgKzEsMzkgQEAKK1BzaUphdmFGaWxlOkNvbmRPcjEuamF2YQorICBQc2lJbXBvcnRMaXN0CisgICAgPGVtcHR5IGxpc3Q+CisgIFBzaUNsYXNzOkZvbworICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaUtleXdvcmQ6Y2xhc3MoJ2NsYXNzJykKKyAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICBQc2lJZGVudGlmaWVyOkZvbygnRm9vJykKKyAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgUHNpV2hpdGVTcGFjZSgnXG4gICcpCisgICAgUHNpQ2xhc3NJbml0aWFsaXplcgorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gICAgICcpCisgICAgICAgIFBzaUV4cHJlc3Npb25TdGF0ZW1lbnQKKyAgICAgICAgICBQc2lCaW5hcnlFeHByZXNzaW9uOmEgfHwKKyAgICAgICAgICAgIFBzaVJlZmVyZW5jZUV4cHJlc3Npb246YQorICAgICAgICAgICAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgICAgICAgIFBzaUlkZW50aWZpZXI6YSgnYScpCisgICAgICAgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgICAgICAgIFBzaUphdmFUb2tlbjpPUk9SKCd8fCcpCisgICAgICAgICAgICBQc2lFcnJvckVsZW1lbnQ6RXhwcmVzc2lvbiBleHBlY3RlZAorICAgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgICBQc2lFcnJvckVsZW1lbnQ6JzsnIGV4cGVjdGVkCisgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gICcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuJykKKyAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2V4cHJlc3Npb25QYXJzaW5nL0V4cHJMaXN0MC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9leHByZXNzaW9uUGFyc2luZy9FeHByTGlzdDAuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMzg2OWI0Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9leHByZXNzaW9uUGFyc2luZy9FeHByTGlzdDAuamF2YQpAQCAtMCwwICsxLDUgQEAKK2NsYXNzIEZvb3sKKyAgeworICAgIGYoMSwyKTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZXhwcmVzc2lvblBhcnNpbmcvRXhwckxpc3QwLnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZXhwcmVzc2lvblBhcnNpbmcvRXhwckxpc3QwLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NjE4MjFmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9leHByZXNzaW9uUGFyc2luZy9FeHByTGlzdDAudHh0CkBAIC0wLDAgKzEsNDIgQEAKK1BzaUphdmFGaWxlOkV4cHJMaXN0MC5qYXZhCisgIFBzaUltcG9ydExpc3QKKyAgICA8ZW1wdHkgbGlzdD4KKyAgUHNpQ2xhc3M6Rm9vCisgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpS2V5d29yZDpjbGFzcygnY2xhc3MnKQorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaUlkZW50aWZpZXI6Rm9vKCdGb28nKQorICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcbiAgJykKKyAgICBQc2lDbGFzc0luaXRpYWxpemVyCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAgICAnKQorICAgICAgICBQc2lFeHByZXNzaW9uU3RhdGVtZW50CisgICAgICAgICAgUHNpTWV0aG9kQ2FsbEV4cHJlc3Npb246ZigxLDIpCisgICAgICAgICAgICBQc2lSZWZlcmVuY2VFeHByZXNzaW9uOmYKKyAgICAgICAgICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICAgICAgICBQc2lJZGVudGlmaWVyOmYoJ2YnKQorICAgICAgICAgICAgUHNpRXhwcmVzc2lvbkxpc3QKKyAgICAgICAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgICAgICAgUHNpTGl0ZXJhbEV4cHJlc3Npb246MQorICAgICAgICAgICAgICAgIFBzaUphdmFUb2tlbjpJTlRFR0VSX0xJVEVSQUwoJzEnKQorICAgICAgICAgICAgICBQc2lKYXZhVG9rZW46Q09NTUEoJywnKQorICAgICAgICAgICAgICBQc2lMaXRlcmFsRXhwcmVzc2lvbjoyCisgICAgICAgICAgICAgICAgUHNpSmF2YVRva2VuOklOVEVHRVJfTElURVJBTCgnMicpCisgICAgICAgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICAgICAgUHNpSmF2YVRva2VuOlNFTUlDT0xPTignOycpCisgICAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICAnKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcbicpCisgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9leHByZXNzaW9uUGFyc2luZy9FeHByTGlzdDEuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZXhwcmVzc2lvblBhcnNpbmcvRXhwckxpc3QxLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODhmMGIyZQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZXhwcmVzc2lvblBhcnNpbmcvRXhwckxpc3QxLmphdmEKQEAgLTAsMCArMSw1IEBACitjbGFzcyBGb297CisgIHsKKyAgICBmKAorICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9leHByZXNzaW9uUGFyc2luZy9FeHByTGlzdDEudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9leHByZXNzaW9uUGFyc2luZy9FeHByTGlzdDEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYxOWM5ZjYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2V4cHJlc3Npb25QYXJzaW5nL0V4cHJMaXN0MS50eHQKQEAgLTAsMCArMSw0MCBAQAorUHNpSmF2YUZpbGU6RXhwckxpc3QxLmphdmEKKyAgUHNpSW1wb3J0TGlzdAorICAgIDxlbXB0eSBsaXN0PgorICBQc2lDbGFzczpGb28KKyAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lLZXl3b3JkOmNsYXNzKCdjbGFzcycpCisgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgUHNpSWRlbnRpZmllcjpGb28oJ0ZvbycpCisgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuICAnKQorICAgIFBzaUNsYXNzSW5pdGlhbGl6ZXIKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICAgICcpCisgICAgICAgIFBzaUV4cHJlc3Npb25TdGF0ZW1lbnQKKyAgICAgICAgICBQc2lNZXRob2RDYWxsRXhwcmVzc2lvbjpmKAorICAKKyAgICAgICAgICAgIFBzaVJlZmVyZW5jZUV4cHJlc3Npb246ZgorICAgICAgICAgICAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgICAgICAgIFBzaUlkZW50aWZpZXI6ZignZicpCisgICAgICAgICAgICBQc2lFeHByZXNzaW9uTGlzdAorICAgICAgICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICAgICAgICBQc2lFcnJvckVsZW1lbnQ6JyknIGV4cGVjdGVkCisgICAgICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgICAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICAnKQorICAgICAgICAgIFBzaUVycm9yRWxlbWVudDonOycgZXhwZWN0ZWQKKyAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcbicpCisgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9leHByZXNzaW9uUGFyc2luZy9FeHByTGlzdDIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZXhwcmVzc2lvblBhcnNpbmcvRXhwckxpc3QyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWFlN2FiYgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZXhwcmVzc2lvblBhcnNpbmcvRXhwckxpc3QyLmphdmEKQEAgLTAsMCArMSw1IEBACitjbGFzcyBGb297CisgIHsKKyAgICBmKDEKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZXhwcmVzc2lvblBhcnNpbmcvRXhwckxpc3QyLnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZXhwcmVzc2lvblBhcnNpbmcvRXhwckxpc3QyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZjQxOGFhCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9leHByZXNzaW9uUGFyc2luZy9FeHByTGlzdDIudHh0CkBAIC0wLDAgKzEsNDIgQEAKK1BzaUphdmFGaWxlOkV4cHJMaXN0Mi5qYXZhCisgIFBzaUltcG9ydExpc3QKKyAgICA8ZW1wdHkgbGlzdD4KKyAgUHNpQ2xhc3M6Rm9vCisgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpS2V5d29yZDpjbGFzcygnY2xhc3MnKQorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaUlkZW50aWZpZXI6Rm9vKCdGb28nKQorICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcbiAgJykKKyAgICBQc2lDbGFzc0luaXRpYWxpemVyCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAgICAnKQorICAgICAgICBQc2lFeHByZXNzaW9uU3RhdGVtZW50CisgICAgICAgICAgUHNpTWV0aG9kQ2FsbEV4cHJlc3Npb246ZigxCisgIAorICAgICAgICAgICAgUHNpUmVmZXJlbmNlRXhwcmVzc2lvbjpmCisgICAgICAgICAgICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgICAgICAgUHNpSWRlbnRpZmllcjpmKCdmJykKKyAgICAgICAgICAgIFBzaUV4cHJlc3Npb25MaXN0CisgICAgICAgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgICAgICAgIFBzaUxpdGVyYWxFeHByZXNzaW9uOjEKKyAgICAgICAgICAgICAgICBQc2lKYXZhVG9rZW46SU5URUdFUl9MSVRFUkFMKCcxJykKKyAgICAgICAgICAgICAgUHNpRXJyb3JFbGVtZW50OicpJyBleHBlY3RlZAorICAgICAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICAgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAgJykKKyAgICAgICAgICBQc2lFcnJvckVsZW1lbnQ6JzsnIGV4cGVjdGVkCisgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG4nKQorICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZXhwcmVzc2lvblBhcnNpbmcvRXhwckxpc3QzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2V4cHJlc3Npb25QYXJzaW5nL0V4cHJMaXN0My5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJjMmY5NjkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2V4cHJlc3Npb25QYXJzaW5nL0V4cHJMaXN0My5qYXZhCkBAIC0wLDAgKzEsNSBAQAorY2xhc3MgRm9veworICB7CisgICAgZigxLAorICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9leHByZXNzaW9uUGFyc2luZy9FeHByTGlzdDMudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9leHByZXNzaW9uUGFyc2luZy9FeHByTGlzdDMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQzYWFmNzgKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2V4cHJlc3Npb25QYXJzaW5nL0V4cHJMaXN0My50eHQKQEAgLTAsMCArMSw0NyBAQAorUHNpSmF2YUZpbGU6RXhwckxpc3QzLmphdmEKKyAgUHNpSW1wb3J0TGlzdAorICAgIDxlbXB0eSBsaXN0PgorICBQc2lDbGFzczpGb28KKyAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lLZXl3b3JkOmNsYXNzKCdjbGFzcycpCisgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgUHNpSWRlbnRpZmllcjpGb28oJ0ZvbycpCisgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuICAnKQorICAgIFBzaUNsYXNzSW5pdGlhbGl6ZXIKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICAgICcpCisgICAgICAgIFBzaUV4cHJlc3Npb25TdGF0ZW1lbnQKKyAgICAgICAgICBQc2lNZXRob2RDYWxsRXhwcmVzc2lvbjpmKDEsCisgIAorICAgICAgICAgICAgUHNpUmVmZXJlbmNlRXhwcmVzc2lvbjpmCisgICAgICAgICAgICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgICAgICAgUHNpSWRlbnRpZmllcjpmKCdmJykKKyAgICAgICAgICAgIFBzaUV4cHJlc3Npb25MaXN0CisgICAgICAgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgICAgICAgIFBzaUxpdGVyYWxFeHByZXNzaW9uOjEKKyAgICAgICAgICAgICAgICBQc2lKYXZhVG9rZW46SU5URUdFUl9MSVRFUkFMKCcxJykKKyAgICAgICAgICAgICAgUHNpSmF2YVRva2VuOkNPTU1BKCcsJykKKyAgICAgICAgICAgICAgUHNpRXJyb3JFbGVtZW50OkV4cHJlc3Npb24gZXhwZWN0ZWQKKyAgICAgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgICAgICAgUHNpRXhwcmVzc2lvbihlbXB0eSkKKyAgICAgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgICAgICAgUHNpRXJyb3JFbGVtZW50OicpJyBleHBlY3RlZAorICAgICAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICAgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAgJykKKyAgICAgICAgICBQc2lFcnJvckVsZW1lbnQ6JzsnIGV4cGVjdGVkCisgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG4nKQorICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZXhwcmVzc2lvblBhcnNpbmcvRXhwckxpc3Q0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2V4cHJlc3Npb25QYXJzaW5nL0V4cHJMaXN0NC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMxNGU2YmQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2V4cHJlc3Npb25QYXJzaW5nL0V4cHJMaXN0NC5qYXZhCkBAIC0wLDAgKzEsNSBAQAorY2xhc3MgRm9veworICB7CisgICAgZigxLCk7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2V4cHJlc3Npb25QYXJzaW5nL0V4cHJMaXN0NC50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2V4cHJlc3Npb25QYXJzaW5nL0V4cHJMaXN0NC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjcwNWE4MgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZXhwcmVzc2lvblBhcnNpbmcvRXhwckxpc3Q0LnR4dApAQCAtMCwwICsxLDQ0IEBACitQc2lKYXZhRmlsZTpFeHByTGlzdDQuamF2YQorICBQc2lJbXBvcnRMaXN0CisgICAgPGVtcHR5IGxpc3Q+CisgIFBzaUNsYXNzOkZvbworICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaUtleXdvcmQ6Y2xhc3MoJ2NsYXNzJykKKyAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICBQc2lJZGVudGlmaWVyOkZvbygnRm9vJykKKyAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgUHNpV2hpdGVTcGFjZSgnXG4gICcpCisgICAgUHNpQ2xhc3NJbml0aWFsaXplcgorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gICAgJykKKyAgICAgICAgUHNpRXhwcmVzc2lvblN0YXRlbWVudAorICAgICAgICAgIFBzaU1ldGhvZENhbGxFeHByZXNzaW9uOmYoMSwpCisgICAgICAgICAgICBQc2lSZWZlcmVuY2VFeHByZXNzaW9uOmYKKyAgICAgICAgICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICAgICAgICBQc2lJZGVudGlmaWVyOmYoJ2YnKQorICAgICAgICAgICAgUHNpRXhwcmVzc2lvbkxpc3QKKyAgICAgICAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgICAgICAgUHNpTGl0ZXJhbEV4cHJlc3Npb246MQorICAgICAgICAgICAgICAgIFBzaUphdmFUb2tlbjpJTlRFR0VSX0xJVEVSQUwoJzEnKQorICAgICAgICAgICAgICBQc2lKYXZhVG9rZW46Q09NTUEoJywnKQorICAgICAgICAgICAgICBQc2lFcnJvckVsZW1lbnQ6RXhwcmVzc2lvbiBleHBlY3RlZAorICAgICAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICAgICAgICBQc2lFeHByZXNzaW9uKGVtcHR5KQorICAgICAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgICAgIFBzaUphdmFUb2tlbjpTRU1JQ09MT04oJzsnKQorICAgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAgJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG4nKQorICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZXhwcmVzc2lvblBhcnNpbmcvRXhwckxpc3Q1LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2V4cHJlc3Npb25QYXJzaW5nL0V4cHJMaXN0NS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYyYTAzMmEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2V4cHJlc3Npb25QYXJzaW5nL0V4cHJMaXN0NS5qYXZhCkBAIC0wLDAgKzEsNSBAQAorY2xhc3MgRm9veworICB7CisgICAgZigxLCwyKTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZXhwcmVzc2lvblBhcnNpbmcvRXhwckxpc3Q1LnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZXhwcmVzc2lvblBhcnNpbmcvRXhwckxpc3Q1LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZWNiMDE1Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9leHByZXNzaW9uUGFyc2luZy9FeHByTGlzdDUudHh0CkBAIC0wLDAgKzEsNDcgQEAKK1BzaUphdmFGaWxlOkV4cHJMaXN0NS5qYXZhCisgIFBzaUltcG9ydExpc3QKKyAgICA8ZW1wdHkgbGlzdD4KKyAgUHNpQ2xhc3M6Rm9vCisgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpS2V5d29yZDpjbGFzcygnY2xhc3MnKQorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaUlkZW50aWZpZXI6Rm9vKCdGb28nKQorICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcbiAgJykKKyAgICBQc2lDbGFzc0luaXRpYWxpemVyCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAgICAnKQorICAgICAgICBQc2lFeHByZXNzaW9uU3RhdGVtZW50CisgICAgICAgICAgUHNpTWV0aG9kQ2FsbEV4cHJlc3Npb246ZigxLCwyKQorICAgICAgICAgICAgUHNpUmVmZXJlbmNlRXhwcmVzc2lvbjpmCisgICAgICAgICAgICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgICAgICAgUHNpSWRlbnRpZmllcjpmKCdmJykKKyAgICAgICAgICAgIFBzaUV4cHJlc3Npb25MaXN0CisgICAgICAgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgICAgICAgIFBzaUxpdGVyYWxFeHByZXNzaW9uOjEKKyAgICAgICAgICAgICAgICBQc2lKYXZhVG9rZW46SU5URUdFUl9MSVRFUkFMKCcxJykKKyAgICAgICAgICAgICAgUHNpSmF2YVRva2VuOkNPTU1BKCcsJykKKyAgICAgICAgICAgICAgUHNpRXJyb3JFbGVtZW50OkV4cHJlc3Npb24gZXhwZWN0ZWQKKyAgICAgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgICAgICAgUHNpRXhwcmVzc2lvbihlbXB0eSkKKyAgICAgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgICAgICAgUHNpSmF2YVRva2VuOkNPTU1BKCcsJykKKyAgICAgICAgICAgICAgUHNpTGl0ZXJhbEV4cHJlc3Npb246MgorICAgICAgICAgICAgICAgIFBzaUphdmFUb2tlbjpJTlRFR0VSX0xJVEVSQUwoJzInKQorICAgICAgICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgICAgIFBzaUphdmFUb2tlbjpTRU1JQ09MT04oJzsnKQorICAgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAgJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG4nKQorICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZXhwcmVzc2lvblBhcnNpbmcvRXhwckxpc3Q2LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2V4cHJlc3Npb25QYXJzaW5nL0V4cHJMaXN0Ni5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRiNmJhNDAKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2V4cHJlc3Npb25QYXJzaW5nL0V4cHJMaXN0Ni5qYXZhCkBAIC0wLDAgKzEsNSBAQAorY2xhc3MgRm9veworICB7CisgICAgZigsMik7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2V4cHJlc3Npb25QYXJzaW5nL0V4cHJMaXN0Ni50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2V4cHJlc3Npb25QYXJzaW5nL0V4cHJMaXN0Ni50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTc3ZmRiMQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZXhwcmVzc2lvblBhcnNpbmcvRXhwckxpc3Q2LnR4dApAQCAtMCwwICsxLDQ0IEBACitQc2lKYXZhRmlsZTpFeHByTGlzdDYuamF2YQorICBQc2lJbXBvcnRMaXN0CisgICAgPGVtcHR5IGxpc3Q+CisgIFBzaUNsYXNzOkZvbworICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaUtleXdvcmQ6Y2xhc3MoJ2NsYXNzJykKKyAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICBQc2lJZGVudGlmaWVyOkZvbygnRm9vJykKKyAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgUHNpV2hpdGVTcGFjZSgnXG4gICcpCisgICAgUHNpQ2xhc3NJbml0aWFsaXplcgorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gICAgJykKKyAgICAgICAgUHNpRXhwcmVzc2lvblN0YXRlbWVudAorICAgICAgICAgIFBzaU1ldGhvZENhbGxFeHByZXNzaW9uOmYoLDIpCisgICAgICAgICAgICBQc2lSZWZlcmVuY2VFeHByZXNzaW9uOmYKKyAgICAgICAgICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICAgICAgICBQc2lJZGVudGlmaWVyOmYoJ2YnKQorICAgICAgICAgICAgUHNpRXhwcmVzc2lvbkxpc3QKKyAgICAgICAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgICAgICAgUHNpRXJyb3JFbGVtZW50OkV4cHJlc3Npb24gZXhwZWN0ZWQKKyAgICAgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgICAgICAgUHNpRXhwcmVzc2lvbihlbXB0eSkKKyAgICAgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgICAgICAgUHNpSmF2YVRva2VuOkNPTU1BKCcsJykKKyAgICAgICAgICAgICAgUHNpTGl0ZXJhbEV4cHJlc3Npb246MgorICAgICAgICAgICAgICAgIFBzaUphdmFUb2tlbjpJTlRFR0VSX0xJVEVSQUwoJzInKQorICAgICAgICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgICAgIFBzaUphdmFUb2tlbjpTRU1JQ09MT04oJzsnKQorICAgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAgJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG4nKQorICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZXhwcmVzc2lvblBhcnNpbmcvR0UuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZXhwcmVzc2lvblBhcnNpbmcvR0UuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44M2UyNmY4Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9leHByZXNzaW9uUGFyc2luZy9HRS5qYXZhCkBAIC0wLDAgKzEsNyBAQAorY2xhc3MgVGVzdCB7CisgICAgYm9vbGVhbiBtZXRob2QoKSB7CisgICAgICAgIGludCB4ID0gODsKKyAgICAgICAgeCA+Pj0gMjsKKyAgICAgICAgcmV0dXJuIDEgPj0gMjsKKyAgICB9Cit9IApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZXhwcmVzc2lvblBhcnNpbmcvR0UudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9leHByZXNzaW9uUGFyc2luZy9HRS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjM3YmRjMQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZXhwcmVzc2lvblBhcnNpbmcvR0UudHh0CkBAIC0wLDAgKzEsODAgQEAKK1BzaUphdmFGaWxlOkdFLmphdmEKKyAgUHNpSW1wb3J0TGlzdAorICAgIDxlbXB0eSBsaXN0PgorICBQc2lDbGFzczpUZXN0CisgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpS2V5d29yZDpjbGFzcygnY2xhc3MnKQorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaUlkZW50aWZpZXI6VGVzdCgnVGVzdCcpCisgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuICAgICcpCisgICAgUHNpTWV0aG9kOm1ldGhvZAorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6Ym9vbGVhbgorICAgICAgICBQc2lLZXl3b3JkOmJvb2xlYW4oJ2Jvb2xlYW4nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOm1ldGhvZCgnbWV0aG9kJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gICAgICAgICcpCisgICAgICAgIFBzaURlY2xhcmF0aW9uU3RhdGVtZW50CisgICAgICAgICAgUHNpTG9jYWxWYXJpYWJsZTp4CisgICAgICAgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICAgICAgUHNpVHlwZUVsZW1lbnQ6aW50CisgICAgICAgICAgICAgIFBzaUtleXdvcmQ6aW50KCdpbnQnKQorICAgICAgICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICAgICAgICBQc2lJZGVudGlmaWVyOngoJ3gnKQorICAgICAgICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICAgICAgICBQc2lKYXZhVG9rZW46RVEoJz0nKQorICAgICAgICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICAgICAgICBQc2lMaXRlcmFsRXhwcmVzc2lvbjo4CisgICAgICAgICAgICAgIFBzaUphdmFUb2tlbjpJTlRFR0VSX0xJVEVSQUwoJzgnKQorICAgICAgICAgICAgUHNpSmF2YVRva2VuOlNFTUlDT0xPTignOycpCisgICAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICAgICAgICAnKQorICAgICAgICBQc2lFeHByZXNzaW9uU3RhdGVtZW50CisgICAgICAgICAgUHNpQXNzaWdubWVudEV4cHJlc3Npb246eCA+Pj0gMgorICAgICAgICAgICAgUHNpUmVmZXJlbmNlRXhwcmVzc2lvbjp4CisgICAgICAgICAgICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgICAgICAgUHNpSWRlbnRpZmllcjp4KCd4JykKKyAgICAgICAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgICAgICAgUHNpSmF2YVRva2VuOkdUR1RFUSgnPj49JykKKyAgICAgICAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgICAgICAgUHNpTGl0ZXJhbEV4cHJlc3Npb246MgorICAgICAgICAgICAgICBQc2lKYXZhVG9rZW46SU5URUdFUl9MSVRFUkFMKCcyJykKKyAgICAgICAgICBQc2lKYXZhVG9rZW46U0VNSUNPTE9OKCc7JykKKyAgICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gICAgICAgICcpCisgICAgICAgIFBzaVJldHVyblN0YXRlbWVudAorICAgICAgICAgIFBzaUtleXdvcmQ6cmV0dXJuKCdyZXR1cm4nKQorICAgICAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgICAgIFBzaUJpbmFyeUV4cHJlc3Npb246MSA+PSAyCisgICAgICAgICAgICBQc2lMaXRlcmFsRXhwcmVzc2lvbjoxCisgICAgICAgICAgICAgIFBzaUphdmFUb2tlbjpJTlRFR0VSX0xJVEVSQUwoJzEnKQorICAgICAgICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICAgICAgICBQc2lKYXZhVG9rZW46R0UoJz49JykKKyAgICAgICAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgICAgICAgUHNpTGl0ZXJhbEV4cHJlc3Npb246MgorICAgICAgICAgICAgICBQc2lKYXZhVG9rZW46SU5URUdFUl9MSVRFUkFMKCcyJykKKyAgICAgICAgICBQc2lKYXZhVG9rZW46U0VNSUNPTE9OKCc7JykKKyAgICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gICAgJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG4nKQorICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZXhwcmVzc2lvblBhcnNpbmcvSWxsZWdhbFdpbGRjYXJkLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2V4cHJlc3Npb25QYXJzaW5nL0lsbGVnYWxXaWxkY2FyZC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNmNGUwZjYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2V4cHJlc3Npb25QYXJzaW5nL0lsbGVnYWxXaWxkY2FyZC5qYXZhCkBAIC0wLDAgKzEsNSBAQAorY2xhc3MgRm9vIHsKKyAgeworICAgIHRoaXMuPD8+Zm9vKCk7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2V4cHJlc3Npb25QYXJzaW5nL0lsbGVnYWxXaWxkY2FyZC50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2V4cHJlc3Npb25QYXJzaW5nL0lsbGVnYWxXaWxkY2FyZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjRlNmQxZQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZXhwcmVzc2lvblBhcnNpbmcvSWxsZWdhbFdpbGRjYXJkLnR4dApAQCAtMCwwICsxLDQ2IEBACitQc2lKYXZhRmlsZTpJbGxlZ2FsV2lsZGNhcmQuamF2YQorICBQc2lJbXBvcnRMaXN0CisgICAgPGVtcHR5IGxpc3Q+CisgIFBzaUNsYXNzOkZvbworICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaUtleXdvcmQ6Y2xhc3MoJ2NsYXNzJykKKyAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICBQc2lJZGVudGlmaWVyOkZvbygnRm9vJykKKyAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgUHNpV2hpdGVTcGFjZSgnXG4gICcpCisgICAgUHNpQ2xhc3NJbml0aWFsaXplcgorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gICAgJykKKyAgICAgICAgUHNpRXhwcmVzc2lvblN0YXRlbWVudAorICAgICAgICAgIFBzaU1ldGhvZENhbGxFeHByZXNzaW9uOnRoaXMuPD8+Zm9vKCkKKyAgICAgICAgICAgIFBzaVJlZmVyZW5jZUV4cHJlc3Npb246dGhpcy48Pz5mb28KKyAgICAgICAgICAgICAgUHNpVGhpc0V4cHJlc3Npb246dGhpcworICAgICAgICAgICAgICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgICAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICAgICAgICAgIFBzaUtleXdvcmQ6dGhpcygndGhpcycpCisgICAgICAgICAgICAgIFBzaUphdmFUb2tlbjpET1QoJy4nKQorICAgICAgICAgICAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICAgICAgICAgICAgUHNpSmF2YVRva2VuOkxUKCc8JykKKyAgICAgICAgICAgICAgICBQc2lFcnJvckVsZW1lbnQ6VW5leHBlY3RlZCB3aWxkY2FyZAorICAgICAgICAgICAgICAgICAgUHNpSmF2YVRva2VuOlFVRVNUKCc/JykKKyAgICAgICAgICAgICAgICBQc2lKYXZhVG9rZW46R1QoJz4nKQorICAgICAgICAgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgICAgICAgIFBzaUV4cHJlc3Npb25MaXN0CisgICAgICAgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICAgICAgUHNpSmF2YVRva2VuOlNFTUlDT0xPTignOycpCisgICAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICAnKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcbicpCisgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9leHByZXNzaW9uUGFyc2luZy9JbmNvbXBsZXRlQ2FzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9leHByZXNzaW9uUGFyc2luZy9JbmNvbXBsZXRlQ2FzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmViYTc5ODEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2V4cHJlc3Npb25QYXJzaW5nL0luY29tcGxldGVDYXN0LmphdmEKQEAgLTAsMCArMSw1IEBACitjbGFzcyBUZXN0IHsKKyAgICBib29sZWFuIG1ldGhvZCgpIHsKKyAgICAgICAgZigoQXJyYXlMaXN0PFN0cmluZz4pICk7CisgICAgfQorfSAKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2V4cHJlc3Npb25QYXJzaW5nL0luY29tcGxldGVDYXN0LnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZXhwcmVzc2lvblBhcnNpbmcvSW5jb21wbGV0ZUNhc3QudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBlZjViNGEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2V4cHJlc3Npb25QYXJzaW5nL0luY29tcGxldGVDYXN0LnR4dApAQCAtMCwwICsxLDY3IEBACitQc2lKYXZhRmlsZTpJbmNvbXBsZXRlQ2FzdC5qYXZhCisgIFBzaUltcG9ydExpc3QKKyAgICA8ZW1wdHkgbGlzdD4KKyAgUHNpQ2xhc3M6VGVzdAorICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaUtleXdvcmQ6Y2xhc3MoJ2NsYXNzJykKKyAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICBQc2lJZGVudGlmaWVyOlRlc3QoJ1Rlc3QnKQorICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcbiAgICAnKQorICAgIFBzaU1ldGhvZDptZXRob2QKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OmJvb2xlYW4KKyAgICAgICAgUHNpS2V5d29yZDpib29sZWFuKCdib29sZWFuJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjptZXRob2QoJ21ldGhvZCcpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICAgICAgICAnKQorICAgICAgICBQc2lFeHByZXNzaW9uU3RhdGVtZW50CisgICAgICAgICAgUHNpTWV0aG9kQ2FsbEV4cHJlc3Npb246ZigoQXJyYXlMaXN0PFN0cmluZz4pICkKKyAgICAgICAgICAgIFBzaVJlZmVyZW5jZUV4cHJlc3Npb246ZgorICAgICAgICAgICAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgICAgICAgIFBzaUlkZW50aWZpZXI6ZignZicpCisgICAgICAgICAgICBQc2lFeHByZXNzaW9uTGlzdAorICAgICAgICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICAgICAgICBQc2lUeXBlQ2FzdEV4cHJlc3Npb246KEFycmF5TGlzdDxTdHJpbmc+KQorICAgICAgICAgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgICAgICAgICAgUHNpVHlwZUVsZW1lbnQ6QXJyYXlMaXN0PFN0cmluZz4KKyAgICAgICAgICAgICAgICAgIFBzaUphdmFDb2RlUmVmZXJlbmNlRWxlbWVudDpBcnJheUxpc3Q8U3RyaW5nPgorICAgICAgICAgICAgICAgICAgICBQc2lJZGVudGlmaWVyOkFycmF5TGlzdCgnQXJyYXlMaXN0JykKKyAgICAgICAgICAgICAgICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICAgICAgICAgICAgICAgIFBzaUphdmFUb2tlbjpMVCgnPCcpCisgICAgICAgICAgICAgICAgICAgICAgUHNpVHlwZUVsZW1lbnQ6U3RyaW5nCisgICAgICAgICAgICAgICAgICAgICAgICBQc2lKYXZhQ29kZVJlZmVyZW5jZUVsZW1lbnQ6U3RyaW5nCisgICAgICAgICAgICAgICAgICAgICAgICAgIFBzaUlkZW50aWZpZXI6U3RyaW5nKCdTdHJpbmcnKQorICAgICAgICAgICAgICAgICAgICAgICAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgICAgICAgICAgICAgICAgUHNpSmF2YVRva2VuOkdUKCc+JykKKyAgICAgICAgICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgICAgICAgICAgIFBzaUVycm9yRWxlbWVudDpFeHByZXNzaW9uIGV4cGVjdGVkCisgICAgICAgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICAgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICAgICAgUHNpSmF2YVRva2VuOlNFTUlDT0xPTignOycpCisgICAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICAgICcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuJykKKyAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2V4cHJlc3Npb25QYXJzaW5nL0luY29tcGxldGVEZWNsLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2V4cHJlc3Npb25QYXJzaW5nL0luY29tcGxldGVEZWNsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjZiNzBhMwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZXhwcmVzc2lvblBhcnNpbmcvSW5jb21wbGV0ZURlY2wuamF2YQpAQCAtMCwwICsxLDUgQEAKK2NsYXNzIFggeworICAgIHZvaWQgbWV0aG9kKCkgeworICAgICAgICBMaXN0PEludGVnZXI+CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZXhwcmVzc2lvblBhcnNpbmcvSW5jb21wbGV0ZURlY2wudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9leHByZXNzaW9uUGFyc2luZy9JbmNvbXBsZXRlRGVjbC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDZjOTAzMQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZXhwcmVzc2lvblBhcnNpbmcvSW5jb21wbGV0ZURlY2wudHh0CkBAIC0wLDAgKzEsNTQgQEAKK1BzaUphdmFGaWxlOkluY29tcGxldGVEZWNsLmphdmEKKyAgUHNpSW1wb3J0TGlzdAorICAgIDxlbXB0eSBsaXN0PgorICBQc2lDbGFzczpYCisgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpS2V5d29yZDpjbGFzcygnY2xhc3MnKQorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaUlkZW50aWZpZXI6WCgnWCcpCisgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuICAgICcpCisgICAgUHNpTWV0aG9kOm1ldGhvZAorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOm1ldGhvZCgnbWV0aG9kJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gICAgICAgICcpCisgICAgICAgIFBzaURlY2xhcmF0aW9uU3RhdGVtZW50CisgICAgICAgICAgUHNpVHlwZUVsZW1lbnQ6TGlzdDxJbnRlZ2VyPgorICAgICAgICAgICAgUHNpSmF2YUNvZGVSZWZlcmVuY2VFbGVtZW50Okxpc3Q8SW50ZWdlcj4KKyAgICAgICAgICAgICAgUHNpSWRlbnRpZmllcjpMaXN0KCdMaXN0JykKKyAgICAgICAgICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICAgICAgICAgIFBzaUphdmFUb2tlbjpMVCgnPCcpCisgICAgICAgICAgICAgICAgUHNpVHlwZUVsZW1lbnQ6SW50ZWdlcgorICAgICAgICAgICAgICAgICAgUHNpSmF2YUNvZGVSZWZlcmVuY2VFbGVtZW50OkludGVnZXIKKyAgICAgICAgICAgICAgICAgICAgUHNpSWRlbnRpZmllcjpJbnRlZ2VyKCdJbnRlZ2VyJykKKyAgICAgICAgICAgICAgICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICAgICAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICAgICAgICAgIFBzaUphdmFUb2tlbjpHVCgnPicpCisgICAgICAgICAgUHNpRXJyb3JFbGVtZW50OklkZW50aWZpZXIgZXhwZWN0ZWQKKyAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAgICAnKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcbicpCisgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2V4cHJlc3Npb25QYXJzaW5nL0luc3RhbmNlT2YwLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2V4cHJlc3Npb25QYXJzaW5nL0luc3RhbmNlT2YwLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDI2YzFlNgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZXhwcmVzc2lvblBhcnNpbmcvSW5zdGFuY2VPZjAuamF2YQpAQCAtMCwwICsxLDUgQEAKK2NsYXNzIEZvb3sKKyAgeworICAgIHJldHVybiBhIGluc3RhbmNlb2YgU3RyaW5nOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9leHByZXNzaW9uUGFyc2luZy9JbnN0YW5jZU9mMC50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2V4cHJlc3Npb25QYXJzaW5nL0luc3RhbmNlT2YwLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NTMyMzNkCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9leHByZXNzaW9uUGFyc2luZy9JbnN0YW5jZU9mMC50eHQKQEAgLTAsMCArMSw0NCBAQAorUHNpSmF2YUZpbGU6SW5zdGFuY2VPZjAuamF2YQorICBQc2lJbXBvcnRMaXN0CisgICAgPGVtcHR5IGxpc3Q+CisgIFBzaUNsYXNzOkZvbworICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaUtleXdvcmQ6Y2xhc3MoJ2NsYXNzJykKKyAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICBQc2lJZGVudGlmaWVyOkZvbygnRm9vJykKKyAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgUHNpV2hpdGVTcGFjZSgnXG4gICcpCisgICAgUHNpQ2xhc3NJbml0aWFsaXplcgorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gICAgJykKKyAgICAgICAgUHNpUmV0dXJuU3RhdGVtZW50CisgICAgICAgICAgUHNpS2V5d29yZDpyZXR1cm4oJ3JldHVybicpCisgICAgICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICAgICAgUHNpSW5zdGFuY2VvZkV4cHJlc3Npb246YSBpbnN0YW5jZW9mIFN0cmluZworICAgICAgICAgICAgUHNpUmVmZXJlbmNlRXhwcmVzc2lvbjphCisgICAgICAgICAgICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgICAgICAgUHNpSWRlbnRpZmllcjphKCdhJykKKyAgICAgICAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgICAgICAgUHNpS2V5d29yZDppbnN0YW5jZW9mKCdpbnN0YW5jZW9mJykKKyAgICAgICAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgICAgICAgUHNpVHlwZUVsZW1lbnQ6U3RyaW5nCisgICAgICAgICAgICAgIFBzaUphdmFDb2RlUmVmZXJlbmNlRWxlbWVudDpTdHJpbmcKKyAgICAgICAgICAgICAgICBQc2lJZGVudGlmaWVyOlN0cmluZygnU3RyaW5nJykKKyAgICAgICAgICAgICAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICAgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgICBQc2lKYXZhVG9rZW46U0VNSUNPTE9OKCc7JykKKyAgICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gICcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuJykKKyAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2V4cHJlc3Npb25QYXJzaW5nL0luc3RhbmNlT2YxLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2V4cHJlc3Npb25QYXJzaW5nL0luc3RhbmNlT2YxLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWZiZTQ2MgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZXhwcmVzc2lvblBhcnNpbmcvSW5zdGFuY2VPZjEuamF2YQpAQCAtMCwwICsxLDUgQEAKK2NsYXNzIEZvb3sKKyAgeworICAgIHJldHVybiBhIGluc3RhbmNlb2YKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZXhwcmVzc2lvblBhcnNpbmcvSW5zdGFuY2VPZjEudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9leHByZXNzaW9uUGFyc2luZy9JbnN0YW5jZU9mMS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGUyNTk4MwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZXhwcmVzc2lvblBhcnNpbmcvSW5zdGFuY2VPZjEudHh0CkBAIC0wLDAgKzEsNDEgQEAKK1BzaUphdmFGaWxlOkluc3RhbmNlT2YxLmphdmEKKyAgUHNpSW1wb3J0TGlzdAorICAgIDxlbXB0eSBsaXN0PgorICBQc2lDbGFzczpGb28KKyAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lLZXl3b3JkOmNsYXNzKCdjbGFzcycpCisgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgUHNpSWRlbnRpZmllcjpGb28oJ0ZvbycpCisgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuICAnKQorICAgIFBzaUNsYXNzSW5pdGlhbGl6ZXIKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICAgICcpCisgICAgICAgIFBzaVJldHVyblN0YXRlbWVudAorICAgICAgICAgIFBzaUtleXdvcmQ6cmV0dXJuKCdyZXR1cm4nKQorICAgICAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgICAgIFBzaUluc3RhbmNlb2ZFeHByZXNzaW9uOmEgaW5zdGFuY2VvZgorICAgICAgICAgICAgUHNpUmVmZXJlbmNlRXhwcmVzc2lvbjphCisgICAgICAgICAgICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgICAgICAgUHNpSWRlbnRpZmllcjphKCdhJykKKyAgICAgICAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgICAgICAgUHNpS2V5d29yZDppbnN0YW5jZW9mKCdpbnN0YW5jZW9mJykKKyAgICAgICAgICAgIFBzaUVycm9yRWxlbWVudDpUeXBlIGV4cGVjdGVkCisgICAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICAgIFBzaUVycm9yRWxlbWVudDonOycgZXhwZWN0ZWQKKyAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAgJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG4nKQorICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZXhwcmVzc2lvblBhcnNpbmcvTmV3MC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9leHByZXNzaW9uUGFyc2luZy9OZXcwLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmQ0NTNjOAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZXhwcmVzc2lvblBhcnNpbmcvTmV3MC5qYXZhCkBAIC0wLDAgKzEsNSBAQAorY2xhc3MgRm9veworICB7CisgICAgbmV3IEEoKTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZXhwcmVzc2lvblBhcnNpbmcvTmV3MC50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2V4cHJlc3Npb25QYXJzaW5nL05ldzAudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjllNWY1YmUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2V4cHJlc3Npb25QYXJzaW5nL05ldzAudHh0CkBAIC0wLDAgKzEsNDEgQEAKK1BzaUphdmFGaWxlOk5ldzAuamF2YQorICBQc2lJbXBvcnRMaXN0CisgICAgPGVtcHR5IGxpc3Q+CisgIFBzaUNsYXNzOkZvbworICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaUtleXdvcmQ6Y2xhc3MoJ2NsYXNzJykKKyAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICBQc2lJZGVudGlmaWVyOkZvbygnRm9vJykKKyAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgUHNpV2hpdGVTcGFjZSgnXG4gICcpCisgICAgUHNpQ2xhc3NJbml0aWFsaXplcgorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gICAgJykKKyAgICAgICAgUHNpRXhwcmVzc2lvblN0YXRlbWVudAorICAgICAgICAgIFBzaU5ld0V4cHJlc3Npb246bmV3IEEoKQorICAgICAgICAgICAgUHNpS2V5d29yZDpuZXcoJ25ldycpCisgICAgICAgICAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICAgICAgICBQc2lKYXZhQ29kZVJlZmVyZW5jZUVsZW1lbnQ6QQorICAgICAgICAgICAgICBQc2lJZGVudGlmaWVyOkEoJ0EnKQorICAgICAgICAgICAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgICAgICBQc2lFeHByZXNzaW9uTGlzdAorICAgICAgICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgICAgIFBzaUphdmFUb2tlbjpTRU1JQ09MT04oJzsnKQorICAgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAgJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG4nKQorICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9leHByZXNzaW9uUGFyc2luZy9OZXcxLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2V4cHJlc3Npb25QYXJzaW5nL05ldzEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iM2UzMTAwCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9leHByZXNzaW9uUGFyc2luZy9OZXcxLmphdmEKQEAgLTAsMCArMSw1IEBACitjbGFzcyBGb297CisgIHsKKyAgICBuZXcgQVsxXVtdOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9leHByZXNzaW9uUGFyc2luZy9OZXcxLnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZXhwcmVzc2lvblBhcnNpbmcvTmV3MS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGQ4ODQ3NAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZXhwcmVzc2lvblBhcnNpbmcvTmV3MS50eHQKQEAgLTAsMCArMSw0NCBAQAorUHNpSmF2YUZpbGU6TmV3MS5qYXZhCisgIFBzaUltcG9ydExpc3QKKyAgICA8ZW1wdHkgbGlzdD4KKyAgUHNpQ2xhc3M6Rm9vCisgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpS2V5d29yZDpjbGFzcygnY2xhc3MnKQorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaUlkZW50aWZpZXI6Rm9vKCdGb28nKQorICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcbiAgJykKKyAgICBQc2lDbGFzc0luaXRpYWxpemVyCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAgICAnKQorICAgICAgICBQc2lFeHByZXNzaW9uU3RhdGVtZW50CisgICAgICAgICAgUHNpTmV3RXhwcmVzc2lvbjpuZXcgQVsxXVtdCisgICAgICAgICAgICBQc2lLZXl3b3JkOm5ldygnbmV3JykKKyAgICAgICAgICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgICAgICAgIFBzaUphdmFDb2RlUmVmZXJlbmNlRWxlbWVudDpBCisgICAgICAgICAgICAgIFBzaUlkZW50aWZpZXI6QSgnQScpCisgICAgICAgICAgICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0tFVCgnWycpCisgICAgICAgICAgICBQc2lMaXRlcmFsRXhwcmVzc2lvbjoxCisgICAgICAgICAgICAgIFBzaUphdmFUb2tlbjpJTlRFR0VSX0xJVEVSQUwoJzEnKQorICAgICAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDS0VUKCddJykKKyAgICAgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0tFVCgnWycpCisgICAgICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNLRVQoJ10nKQorICAgICAgICAgIFBzaUphdmFUb2tlbjpTRU1JQ09MT04oJzsnKQorICAgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAgJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG4nKQorICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZXhwcmVzc2lvblBhcnNpbmcvTmV3MTAuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZXhwcmVzc2lvblBhcnNpbmcvTmV3MTAuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YmRjMDM0Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9leHByZXNzaW9uUGFyc2luZy9OZXcxMC5qYXZhCkBAIC0wLDAgKzEsNSBAQAorY2xhc3MgRm9veworICB7CisgICAgbmV3IGludCgpCisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2V4cHJlc3Npb25QYXJzaW5nL05ldzEwLnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZXhwcmVzc2lvblBhcnNpbmcvTmV3MTAudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE0NWMwNjUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2V4cHJlc3Npb25QYXJzaW5nL05ldzEwLnR4dApAQCAtMCwwICsxLDQ2IEBACitQc2lKYXZhRmlsZTpOZXcxMC5qYXZhCisgIFBzaUltcG9ydExpc3QKKyAgICA8ZW1wdHkgbGlzdD4KKyAgUHNpQ2xhc3M6Rm9vCisgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpS2V5d29yZDpjbGFzcygnY2xhc3MnKQorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaUlkZW50aWZpZXI6Rm9vKCdGb28nKQorICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcbiAgJykKKyAgICBQc2lDbGFzc0luaXRpYWxpemVyCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAgICAnKQorICAgICAgICBQc2lFeHByZXNzaW9uU3RhdGVtZW50CisgICAgICAgICAgUHNpTmV3RXhwcmVzc2lvbjpuZXcgaW50CisgICAgICAgICAgICBQc2lLZXl3b3JkOm5ldygnbmV3JykKKyAgICAgICAgICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgICAgICAgIFBzaUtleXdvcmQ6aW50KCdpbnQnKQorICAgICAgICAgICAgUHNpRXJyb3JFbGVtZW50OidbJyBleHBlY3RlZAorICAgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgICBQc2lFcnJvckVsZW1lbnQ6JzsnIGV4cGVjdGVkCisgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgUHNpRXhwcmVzc2lvblN0YXRlbWVudAorICAgICAgICAgIFBzaVBhcmVudGhlc2l6ZWRFeHByZXNzaW9uOigpCisgICAgICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICAgICAgUHNpRXJyb3JFbGVtZW50OkV4cHJlc3Npb24gZXhwZWN0ZWQKKyAgICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgICAgIFBzaUVycm9yRWxlbWVudDonOycgZXhwZWN0ZWQKKyAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAgJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG4nKQorICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZXhwcmVzc2lvblBhcnNpbmcvTmV3MTEuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZXhwcmVzc2lvblBhcnNpbmcvTmV3MTEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMDBkMjM3Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9leHByZXNzaW9uUGFyc2luZy9OZXcxMS5qYXZhCkBAIC0wLDAgKzEsNSBAQAorY2xhc3MgQXsKKyAgeworICAgIHJldHVybiBuZXcgU3RyaW5nWzA7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2V4cHJlc3Npb25QYXJzaW5nL05ldzExLnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZXhwcmVzc2lvblBhcnNpbmcvTmV3MTEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNjNWJmOTIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2V4cHJlc3Npb25QYXJzaW5nL05ldzExLnR4dApAQCAtMCwwICsxLDQ1IEBACitQc2lKYXZhRmlsZTpOZXcxMS5qYXZhCisgIFBzaUltcG9ydExpc3QKKyAgICA8ZW1wdHkgbGlzdD4KKyAgUHNpQ2xhc3M6QQorICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaUtleXdvcmQ6Y2xhc3MoJ2NsYXNzJykKKyAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICBQc2lJZGVudGlmaWVyOkEoJ0EnKQorICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcbiAgJykKKyAgICBQc2lDbGFzc0luaXRpYWxpemVyCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAgICAnKQorICAgICAgICBQc2lSZXR1cm5TdGF0ZW1lbnQKKyAgICAgICAgICBQc2lLZXl3b3JkOnJldHVybigncmV0dXJuJykKKyAgICAgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgICAgICBQc2lOZXdFeHByZXNzaW9uOm5ldyBTdHJpbmdbMAorICAgICAgICAgICAgUHNpS2V5d29yZDpuZXcoJ25ldycpCisgICAgICAgICAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICAgICAgICBQc2lKYXZhQ29kZVJlZmVyZW5jZUVsZW1lbnQ6U3RyaW5nCisgICAgICAgICAgICAgIFBzaUlkZW50aWZpZXI6U3RyaW5nKCdTdHJpbmcnKQorICAgICAgICAgICAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNLRVQoJ1snKQorICAgICAgICAgICAgUHNpTGl0ZXJhbEV4cHJlc3Npb246MAorICAgICAgICAgICAgICBQc2lKYXZhVG9rZW46SU5URUdFUl9MSVRFUkFMKCcwJykKKyAgICAgICAgICAgIFBzaUVycm9yRWxlbWVudDonXScgZXhwZWN0ZWQKKyAgICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgICAgUHNpSmF2YVRva2VuOlNFTUlDT0xPTignOycpCisgICAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICAnKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcbicpCisgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9leHByZXNzaW9uUGFyc2luZy9OZXcxMi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9leHByZXNzaW9uUGFyc2luZy9OZXcxMi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFlMTJiYmQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2V4cHJlc3Npb25QYXJzaW5nL05ldzEyLmphdmEKQEAgLTAsMCArMSw1IEBACitjbGFzcyBGb297CisgIHsKKyAgICBuZXcgaW50WzFdWzJdOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9leHByZXNzaW9uUGFyc2luZy9OZXcxMi50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2V4cHJlc3Npb25QYXJzaW5nL05ldzEyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNmE4NDI4Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9leHByZXNzaW9uUGFyc2luZy9OZXcxMi50eHQKQEAgLTAsMCArMSw0MyBAQAorUHNpSmF2YUZpbGU6TmV3MTIuamF2YQorICBQc2lJbXBvcnRMaXN0CisgICAgPGVtcHR5IGxpc3Q+CisgIFBzaUNsYXNzOkZvbworICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaUtleXdvcmQ6Y2xhc3MoJ2NsYXNzJykKKyAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICBQc2lJZGVudGlmaWVyOkZvbygnRm9vJykKKyAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgUHNpV2hpdGVTcGFjZSgnXG4gICcpCisgICAgUHNpQ2xhc3NJbml0aWFsaXplcgorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gICAgJykKKyAgICAgICAgUHNpRXhwcmVzc2lvblN0YXRlbWVudAorICAgICAgICAgIFBzaU5ld0V4cHJlc3Npb246bmV3IGludFsxXVsyXQorICAgICAgICAgICAgUHNpS2V5d29yZDpuZXcoJ25ldycpCisgICAgICAgICAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICAgICAgICBQc2lLZXl3b3JkOmludCgnaW50JykKKyAgICAgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0tFVCgnWycpCisgICAgICAgICAgICBQc2lMaXRlcmFsRXhwcmVzc2lvbjoxCisgICAgICAgICAgICAgIFBzaUphdmFUb2tlbjpJTlRFR0VSX0xJVEVSQUwoJzEnKQorICAgICAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDS0VUKCddJykKKyAgICAgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0tFVCgnWycpCisgICAgICAgICAgICBQc2lMaXRlcmFsRXhwcmVzc2lvbjoyCisgICAgICAgICAgICAgIFBzaUphdmFUb2tlbjpJTlRFR0VSX0xJVEVSQUwoJzInKQorICAgICAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDS0VUKCddJykKKyAgICAgICAgICBQc2lKYXZhVG9rZW46U0VNSUNPTE9OKCc7JykKKyAgICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gICcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuJykKKyAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2V4cHJlc3Npb25QYXJzaW5nL05ldzEzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2V4cHJlc3Npb25QYXJzaW5nL05ldzEzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmY4NzI4ZgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZXhwcmVzc2lvblBhcnNpbmcvTmV3MTMuamF2YQpAQCAtMCwwICsxLDUgQEAKK2NsYXNzIEZvb3sKKyAgeworICAgIG5ldyBpbnRbMV1bXVsyXTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZXhwcmVzc2lvblBhcnNpbmcvTmV3MTMudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9leHByZXNzaW9uUGFyc2luZy9OZXcxMy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTg2NTc1ZQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZXhwcmVzc2lvblBhcnNpbmcvTmV3MTMudHh0CkBAIC0wLDAgKzEsNTQgQEAKK1BzaUphdmFGaWxlOk5ldzEzLmphdmEKKyAgUHNpSW1wb3J0TGlzdAorICAgIDxlbXB0eSBsaXN0PgorICBQc2lDbGFzczpGb28KKyAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lLZXl3b3JkOmNsYXNzKCdjbGFzcycpCisgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgUHNpSWRlbnRpZmllcjpGb28oJ0ZvbycpCisgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuICAnKQorICAgIFBzaUNsYXNzSW5pdGlhbGl6ZXIKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICAgICcpCisgICAgICAgIFBzaUV4cHJlc3Npb25TdGF0ZW1lbnQKKyAgICAgICAgICBQc2lOZXdFeHByZXNzaW9uOm5ldyBpbnRbMV1bXVsKKyAgICAgICAgICAgIFBzaUtleXdvcmQ6bmV3KCduZXcnKQorICAgICAgICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgICAgICAgUHNpS2V5d29yZDppbnQoJ2ludCcpCisgICAgICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNLRVQoJ1snKQorICAgICAgICAgICAgUHNpTGl0ZXJhbEV4cHJlc3Npb246MQorICAgICAgICAgICAgICBQc2lKYXZhVG9rZW46SU5URUdFUl9MSVRFUkFMKCcxJykKKyAgICAgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0tFVCgnXScpCisgICAgICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNLRVQoJ1snKQorICAgICAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDS0VUKCddJykKKyAgICAgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0tFVCgnWycpCisgICAgICAgICAgICBQc2lFcnJvckVsZW1lbnQ6J10nIGV4cGVjdGVkCisgICAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICAgIFBzaUVycm9yRWxlbWVudDonOycgZXhwZWN0ZWQKKyAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICBQc2lFeHByZXNzaW9uU3RhdGVtZW50CisgICAgICAgICAgUHNpTGl0ZXJhbEV4cHJlc3Npb246MgorICAgICAgICAgICAgUHNpSmF2YVRva2VuOklOVEVHRVJfTElURVJBTCgnMicpCisgICAgICAgICAgUHNpRXJyb3JFbGVtZW50Oic7JyBleHBlY3RlZAorICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgIFBzaUVycm9yRWxlbWVudDpVbmV4cGVjdGVkIHRva2VuCisgICAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDS0VUKCddJykKKyAgICAgICAgUHNpRW1wdHlTdGF0ZW1lbnQKKyAgICAgICAgICBQc2lKYXZhVG9rZW46U0VNSUNPTE9OKCc7JykKKyAgICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gICcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuJykKKyAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2V4cHJlc3Npb25QYXJzaW5nL05ldzE0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2V4cHJlc3Npb25QYXJzaW5nL05ldzE0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjFiNmMzYQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZXhwcmVzc2lvblBhcnNpbmcvTmV3MTQuamF2YQpAQCAtMCwwICsxLDUgQEAKK2NsYXNzIEZvb3sKKyAgeworICAgIFEubmV3IEEoKTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZXhwcmVzc2lvblBhcnNpbmcvTmV3MTQudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9leHByZXNzaW9uUGFyc2luZy9OZXcxNC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjMxYmVmMgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZXhwcmVzc2lvblBhcnNpbmcvTmV3MTQudHh0CkBAIC0wLDAgKzEsNDYgQEAKK1BzaUphdmFGaWxlOk5ldzE0LmphdmEKKyAgUHNpSW1wb3J0TGlzdAorICAgIDxlbXB0eSBsaXN0PgorICBQc2lDbGFzczpGb28KKyAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lLZXl3b3JkOmNsYXNzKCdjbGFzcycpCisgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgUHNpSWRlbnRpZmllcjpGb28oJ0ZvbycpCisgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuICAnKQorICAgIFBzaUNsYXNzSW5pdGlhbGl6ZXIKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICAgICcpCisgICAgICAgIFBzaUV4cHJlc3Npb25TdGF0ZW1lbnQKKyAgICAgICAgICBQc2lOZXdFeHByZXNzaW9uOlEubmV3IEEoKQorICAgICAgICAgICAgUHNpUmVmZXJlbmNlRXhwcmVzc2lvbjpRCisgICAgICAgICAgICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgICAgICAgUHNpSWRlbnRpZmllcjpRKCdRJykKKyAgICAgICAgICAgIFBzaUphdmFUb2tlbjpET1QoJy4nKQorICAgICAgICAgICAgUHNpS2V5d29yZDpuZXcoJ25ldycpCisgICAgICAgICAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICAgICAgICBQc2lKYXZhQ29kZVJlZmVyZW5jZUVsZW1lbnQ6QQorICAgICAgICAgICAgICBQc2lJZGVudGlmaWVyOkEoJ0EnKQorICAgICAgICAgICAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgICAgICBQc2lFeHByZXNzaW9uTGlzdAorICAgICAgICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgICAgIFBzaUphdmFUb2tlbjpTRU1JQ09MT04oJzsnKQorICAgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAgJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG4nKQorICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZXhwcmVzc2lvblBhcnNpbmcvTmV3MTUuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZXhwcmVzc2lvblBhcnNpbmcvTmV3MTUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xN2YzYzU5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9leHByZXNzaW9uUGFyc2luZy9OZXcxNS5qYXZhCkBAIC0wLDAgKzEsNSBAQAorY2xhc3MgRm9vIHsKKyAgeworICAgIG5ldyBBPD4oKTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZXhwcmVzc2lvblBhcnNpbmcvTmV3MTUudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9leHByZXNzaW9uUGFyc2luZy9OZXcxNS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGJjZjMwZjgKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2V4cHJlc3Npb25QYXJzaW5nL05ldzE1LnR4dApAQCAtMCwwICsxLDQ2IEBACitQc2lKYXZhRmlsZTpOZXcxNS5qYXZhCisgIFBzaUltcG9ydExpc3QKKyAgICA8ZW1wdHkgbGlzdD4KKyAgUHNpQ2xhc3M6Rm9vCisgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpS2V5d29yZDpjbGFzcygnY2xhc3MnKQorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaUlkZW50aWZpZXI6Rm9vKCdGb28nKQorICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcbiAgJykKKyAgICBQc2lDbGFzc0luaXRpYWxpemVyCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAgICAnKQorICAgICAgICBQc2lFeHByZXNzaW9uU3RhdGVtZW50CisgICAgICAgICAgUHNpTmV3RXhwcmVzc2lvbjpuZXcgQTw+KCkKKyAgICAgICAgICAgIFBzaUtleXdvcmQ6bmV3KCduZXcnKQorICAgICAgICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgICAgICAgUHNpSmF2YUNvZGVSZWZlcmVuY2VFbGVtZW50OkE8PgorICAgICAgICAgICAgICBQc2lJZGVudGlmaWVyOkEoJ0EnKQorICAgICAgICAgICAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICAgICAgICAgICAgUHNpSmF2YVRva2VuOkxUKCc8JykKKyAgICAgICAgICAgICAgICBQc2lUeXBlRWxlbWVudDoKKyAgICAgICAgICAgICAgICAgIFBzaVR5cGVFbGVtZW50OkRJQU1PTkQKKyAgICAgICAgICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgICAgICAgICAgUHNpSmF2YVRva2VuOkdUKCc+JykKKyAgICAgICAgICAgIFBzaUV4cHJlc3Npb25MaXN0CisgICAgICAgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICAgICAgUHNpSmF2YVRva2VuOlNFTUlDT0xPTignOycpCisgICAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICAnKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcbicpCisgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9leHByZXNzaW9uUGFyc2luZy9OZXcyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2V4cHJlc3Npb25QYXJzaW5nL05ldzIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MzkwYTg3Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9leHByZXNzaW9uUGFyc2luZy9OZXcyLmphdmEKQEAgLTAsMCArMSw1IEBACitjbGFzcyBGb297CisgIHsKKyAgICBuZXcgQVtdOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9leHByZXNzaW9uUGFyc2luZy9OZXcyLnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZXhwcmVzc2lvblBhcnNpbmcvTmV3Mi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDdlNjBhNwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZXhwcmVzc2lvblBhcnNpbmcvTmV3Mi50eHQKQEAgLTAsMCArMSw0MiBAQAorUHNpSmF2YUZpbGU6TmV3Mi5qYXZhCisgIFBzaUltcG9ydExpc3QKKyAgICA8ZW1wdHkgbGlzdD4KKyAgUHNpQ2xhc3M6Rm9vCisgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpS2V5d29yZDpjbGFzcygnY2xhc3MnKQorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaUlkZW50aWZpZXI6Rm9vKCdGb28nKQorICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcbiAgJykKKyAgICBQc2lDbGFzc0luaXRpYWxpemVyCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAgICAnKQorICAgICAgICBQc2lFeHByZXNzaW9uU3RhdGVtZW50CisgICAgICAgICAgUHNpTmV3RXhwcmVzc2lvbjpuZXcgQVtdCisgICAgICAgICAgICBQc2lLZXl3b3JkOm5ldygnbmV3JykKKyAgICAgICAgICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgICAgICAgIFBzaUphdmFDb2RlUmVmZXJlbmNlRWxlbWVudDpBCisgICAgICAgICAgICAgIFBzaUlkZW50aWZpZXI6QSgnQScpCisgICAgICAgICAgICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0tFVCgnWycpCisgICAgICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNLRVQoJ10nKQorICAgICAgICAgICAgUHNpRXJyb3JFbGVtZW50OkFycmF5IGluaXRpYWxpemVyIGV4cGVjdGVkCisgICAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICAgIFBzaUphdmFUb2tlbjpTRU1JQ09MT04oJzsnKQorICAgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAgJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG4nKQorICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZXhwcmVzc2lvblBhcnNpbmcvTmV3My5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9leHByZXNzaW9uUGFyc2luZy9OZXczLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGQzOTJhOQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZXhwcmVzc2lvblBhcnNpbmcvTmV3My5qYXZhCkBAIC0wLDAgKzEsNSBAQAorY2xhc3MgRm9veworICB7CisgICAgbmV3IEFbXVsxXTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZXhwcmVzc2lvblBhcnNpbmcvTmV3My50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2V4cHJlc3Npb25QYXJzaW5nL05ldzMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM1M2ZlMWUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2V4cHJlc3Npb25QYXJzaW5nL05ldzMudHh0CkBAIC0wLDAgKzEsNTMgQEAKK1BzaUphdmFGaWxlOk5ldzMuamF2YQorICBQc2lJbXBvcnRMaXN0CisgICAgPGVtcHR5IGxpc3Q+CisgIFBzaUNsYXNzOkZvbworICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaUtleXdvcmQ6Y2xhc3MoJ2NsYXNzJykKKyAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICBQc2lJZGVudGlmaWVyOkZvbygnRm9vJykKKyAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgUHNpV2hpdGVTcGFjZSgnXG4gICcpCisgICAgUHNpQ2xhc3NJbml0aWFsaXplcgorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gICAgJykKKyAgICAgICAgUHNpRXhwcmVzc2lvblN0YXRlbWVudAorICAgICAgICAgIFBzaU5ld0V4cHJlc3Npb246bmV3IEFbXVsKKyAgICAgICAgICAgIFBzaUtleXdvcmQ6bmV3KCduZXcnKQorICAgICAgICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgICAgICAgUHNpSmF2YUNvZGVSZWZlcmVuY2VFbGVtZW50OkEKKyAgICAgICAgICAgICAgUHNpSWRlbnRpZmllcjpBKCdBJykKKyAgICAgICAgICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDS0VUKCdbJykKKyAgICAgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0tFVCgnXScpCisgICAgICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNLRVQoJ1snKQorICAgICAgICAgICAgUHNpRXJyb3JFbGVtZW50OiddJyBleHBlY3RlZAorICAgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgICBQc2lFcnJvckVsZW1lbnQ6JzsnIGV4cGVjdGVkCisgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgUHNpRXhwcmVzc2lvblN0YXRlbWVudAorICAgICAgICAgIFBzaUxpdGVyYWxFeHByZXNzaW9uOjEKKyAgICAgICAgICAgIFBzaUphdmFUb2tlbjpJTlRFR0VSX0xJVEVSQUwoJzEnKQorICAgICAgICAgIFBzaUVycm9yRWxlbWVudDonOycgZXhwZWN0ZWQKKyAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICBQc2lFcnJvckVsZW1lbnQ6VW5leHBlY3RlZCB0b2tlbgorICAgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0tFVCgnXScpCisgICAgICAgIFBzaUVtcHR5U3RhdGVtZW50CisgICAgICAgICAgUHNpSmF2YVRva2VuOlNFTUlDT0xPTignOycpCisgICAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICAnKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcbicpCisgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9leHByZXNzaW9uUGFyc2luZy9OZXc0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2V4cHJlc3Npb25QYXJzaW5nL05ldzQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ODY3ZTdhCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9leHByZXNzaW9uUGFyc2luZy9OZXc0LmphdmEKQEAgLTAsMCArMSw1IEBACitjbGFzcyBGb297CisgIHsKKyAgICBuZXcgQVtdW117bnVsbH07CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2V4cHJlc3Npb25QYXJzaW5nL05ldzQudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9leHByZXNzaW9uUGFyc2luZy9OZXc0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NmIxMzQ4Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9leHByZXNzaW9uUGFyc2luZy9OZXc0LnR4dApAQCAtMCwwICsxLDQ3IEBACitQc2lKYXZhRmlsZTpOZXc0LmphdmEKKyAgUHNpSW1wb3J0TGlzdAorICAgIDxlbXB0eSBsaXN0PgorICBQc2lDbGFzczpGb28KKyAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lLZXl3b3JkOmNsYXNzKCdjbGFzcycpCisgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgUHNpSWRlbnRpZmllcjpGb28oJ0ZvbycpCisgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuICAnKQorICAgIFBzaUNsYXNzSW5pdGlhbGl6ZXIKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICAgICcpCisgICAgICAgIFBzaUV4cHJlc3Npb25TdGF0ZW1lbnQKKyAgICAgICAgICBQc2lOZXdFeHByZXNzaW9uOm5ldyBBW11bXXtudWxsfQorICAgICAgICAgICAgUHNpS2V5d29yZDpuZXcoJ25ldycpCisgICAgICAgICAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICAgICAgICBQc2lKYXZhQ29kZVJlZmVyZW5jZUVsZW1lbnQ6QQorICAgICAgICAgICAgICBQc2lJZGVudGlmaWVyOkEoJ0EnKQorICAgICAgICAgICAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNLRVQoJ1snKQorICAgICAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDS0VUKCddJykKKyAgICAgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0tFVCgnWycpCisgICAgICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNLRVQoJ10nKQorICAgICAgICAgICAgUHNpQXJyYXlJbml0aWFsaXplckV4cHJlc3Npb246e251bGx9CisgICAgICAgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICAgICAgICBQc2lMaXRlcmFsRXhwcmVzc2lvbjpudWxsCisgICAgICAgICAgICAgICAgUHNpSmF2YVRva2VuOk5VTExfS0VZV09SRCgnbnVsbCcpCisgICAgICAgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgICAgICAgIFBzaUphdmFUb2tlbjpTRU1JQ09MT04oJzsnKQorICAgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAgJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG4nKQorICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZXhwcmVzc2lvblBhcnNpbmcvTmV3NS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9leHByZXNzaW9uUGFyc2luZy9OZXc1LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTk0Yzk0NAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZXhwcmVzc2lvblBhcnNpbmcvTmV3NS5qYXZhCkBAIC0wLDAgKzEsNSBAQAorY2xhc3MgRm9veworICB7CisgICAgbmV3IEFbMV17bnVsbH07CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2V4cHJlc3Npb25QYXJzaW5nL05ldzUudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9leHByZXNzaW9uUGFyc2luZy9OZXc1LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NWE2YmExCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9leHByZXNzaW9uUGFyc2luZy9OZXc1LnR4dApAQCAtMCwwICsxLDU0IEBACitQc2lKYXZhRmlsZTpOZXc1LmphdmEKKyAgUHNpSW1wb3J0TGlzdAorICAgIDxlbXB0eSBsaXN0PgorICBQc2lDbGFzczpGb28KKyAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lLZXl3b3JkOmNsYXNzKCdjbGFzcycpCisgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgUHNpSWRlbnRpZmllcjpGb28oJ0ZvbycpCisgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuICAnKQorICAgIFBzaUNsYXNzSW5pdGlhbGl6ZXIKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICAgICcpCisgICAgICAgIFBzaUV4cHJlc3Npb25TdGF0ZW1lbnQKKyAgICAgICAgICBQc2lOZXdFeHByZXNzaW9uOm5ldyBBWzFdCisgICAgICAgICAgICBQc2lLZXl3b3JkOm5ldygnbmV3JykKKyAgICAgICAgICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgICAgICAgIFBzaUphdmFDb2RlUmVmZXJlbmNlRWxlbWVudDpBCisgICAgICAgICAgICAgIFBzaUlkZW50aWZpZXI6QSgnQScpCisgICAgICAgICAgICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0tFVCgnWycpCisgICAgICAgICAgICBQc2lMaXRlcmFsRXhwcmVzc2lvbjoxCisgICAgICAgICAgICAgIFBzaUphdmFUb2tlbjpJTlRFR0VSX0xJVEVSQUwoJzEnKQorICAgICAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDS0VUKCddJykKKyAgICAgICAgICBQc2lFcnJvckVsZW1lbnQ6JzsnIGV4cGVjdGVkCisgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgUHNpQmxvY2tTdGF0ZW1lbnQKKyAgICAgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICAgICAgUHNpRXhwcmVzc2lvblN0YXRlbWVudAorICAgICAgICAgICAgICBQc2lMaXRlcmFsRXhwcmVzc2lvbjpudWxsCisgICAgICAgICAgICAgICAgUHNpSmF2YVRva2VuOk5VTExfS0VZV09SRCgnbnVsbCcpCisgICAgICAgICAgICAgIFBzaUVycm9yRWxlbWVudDonOycgZXhwZWN0ZWQKKyAgICAgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgICAgICBQc2lFbXB0eVN0YXRlbWVudAorICAgICAgICAgIFBzaUphdmFUb2tlbjpTRU1JQ09MT04oJzsnKQorICAgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAgJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG4nKQorICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZXhwcmVzc2lvblBhcnNpbmcvTmV3Ni5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9leHByZXNzaW9uUGFyc2luZy9OZXc2LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmRiMDI2ZQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZXhwcmVzc2lvblBhcnNpbmcvTmV3Ni5qYXZhCkBAIC0wLDAgKzEsNSBAQAorY2xhc3MgRm9veworICB7CisgICAgbmV3CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2V4cHJlc3Npb25QYXJzaW5nL05ldzYudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9leHByZXNzaW9uUGFyc2luZy9OZXc2LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MmZhNTAwCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9leHByZXNzaW9uUGFyc2luZy9OZXc2LnR4dApAQCAtMCwwICsxLDM2IEBACitQc2lKYXZhRmlsZTpOZXc2LmphdmEKKyAgUHNpSW1wb3J0TGlzdAorICAgIDxlbXB0eSBsaXN0PgorICBQc2lDbGFzczpGb28KKyAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lLZXl3b3JkOmNsYXNzKCdjbGFzcycpCisgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgUHNpSWRlbnRpZmllcjpGb28oJ0ZvbycpCisgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuICAnKQorICAgIFBzaUNsYXNzSW5pdGlhbGl6ZXIKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICAgICcpCisgICAgICAgIFBzaUV4cHJlc3Npb25TdGF0ZW1lbnQKKyAgICAgICAgICBQc2lOZXdFeHByZXNzaW9uOm5ldworICAgICAgICAgICAgUHNpS2V5d29yZDpuZXcoJ25ldycpCisgICAgICAgICAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICAgICAgUHNpRXJyb3JFbGVtZW50OklkZW50aWZpZXIgZXhwZWN0ZWQKKyAgICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgICAgUHNpRXJyb3JFbGVtZW50Oic7JyBleHBlY3RlZAorICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICAnKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcbicpCisgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9leHByZXNzaW9uUGFyc2luZy9OZXc3LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2V4cHJlc3Npb25QYXJzaW5nL05ldzcuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNWJiNmY1Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9leHByZXNzaW9uUGFyc2luZy9OZXc3LmphdmEKQEAgLTAsMCArMSw1IEBACitjbGFzcyBGb297CisgIHsKKyAgICBuZXcgQQorICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9leHByZXNzaW9uUGFyc2luZy9OZXc3LnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZXhwcmVzc2lvblBhcnNpbmcvTmV3Ny50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWY2YmExOQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZXhwcmVzc2lvblBhcnNpbmcvTmV3Ny50eHQKQEAgLTAsMCArMSw0MSBAQAorUHNpSmF2YUZpbGU6TmV3Ny5qYXZhCisgIFBzaUltcG9ydExpc3QKKyAgICA8ZW1wdHkgbGlzdD4KKyAgUHNpQ2xhc3M6Rm9vCisgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpS2V5d29yZDpjbGFzcygnY2xhc3MnKQorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaUlkZW50aWZpZXI6Rm9vKCdGb28nKQorICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcbiAgJykKKyAgICBQc2lDbGFzc0luaXRpYWxpemVyCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAgICAnKQorICAgICAgICBQc2lFeHByZXNzaW9uU3RhdGVtZW50CisgICAgICAgICAgUHNpTmV3RXhwcmVzc2lvbjpuZXcgQQorICAgICAgICAgICAgUHNpS2V5d29yZDpuZXcoJ25ldycpCisgICAgICAgICAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICAgICAgICBQc2lKYXZhQ29kZVJlZmVyZW5jZUVsZW1lbnQ6QQorICAgICAgICAgICAgICBQc2lJZGVudGlmaWVyOkEoJ0EnKQorICAgICAgICAgICAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgICAgICBQc2lFcnJvckVsZW1lbnQ6JygnIG9yICdbJyBleHBlY3RlZAorICAgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgICBQc2lFcnJvckVsZW1lbnQ6JzsnIGV4cGVjdGVkCisgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gICcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuJykKKyAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2V4cHJlc3Npb25QYXJzaW5nL05ldzguamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZXhwcmVzc2lvblBhcnNpbmcvTmV3OC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc5ZTYxMjAKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2V4cHJlc3Npb25QYXJzaW5nL05ldzguamF2YQpAQCAtMCwwICsxLDUgQEAKK2NsYXNzIEZvb3sKKyAgeworICAgIG5ldyBBWworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9leHByZXNzaW9uUGFyc2luZy9OZXc4LnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZXhwcmVzc2lvblBhcnNpbmcvTmV3OC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWRkMDU0MwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZXhwcmVzc2lvblBhcnNpbmcvTmV3OC50eHQKQEAgLTAsMCArMSw0MiBAQAorUHNpSmF2YUZpbGU6TmV3OC5qYXZhCisgIFBzaUltcG9ydExpc3QKKyAgICA8ZW1wdHkgbGlzdD4KKyAgUHNpQ2xhc3M6Rm9vCisgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpS2V5d29yZDpjbGFzcygnY2xhc3MnKQorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaUlkZW50aWZpZXI6Rm9vKCdGb28nKQorICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcbiAgJykKKyAgICBQc2lDbGFzc0luaXRpYWxpemVyCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAgICAnKQorICAgICAgICBQc2lFeHByZXNzaW9uU3RhdGVtZW50CisgICAgICAgICAgUHNpTmV3RXhwcmVzc2lvbjpuZXcgQVsKKyAgICAgICAgICAgIFBzaUtleXdvcmQ6bmV3KCduZXcnKQorICAgICAgICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgICAgICAgUHNpSmF2YUNvZGVSZWZlcmVuY2VFbGVtZW50OkEKKyAgICAgICAgICAgICAgUHNpSWRlbnRpZmllcjpBKCdBJykKKyAgICAgICAgICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDS0VUKCdbJykKKyAgICAgICAgICAgIFBzaUVycm9yRWxlbWVudDonXScgZXhwZWN0ZWQKKyAgICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgICAgUHNpRXJyb3JFbGVtZW50Oic7JyBleHBlY3RlZAorICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICAnKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcbicpCisgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9leHByZXNzaW9uUGFyc2luZy9OZXc5LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2V4cHJlc3Npb25QYXJzaW5nL05ldzkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNGM3NWQwCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9leHByZXNzaW9uUGFyc2luZy9OZXc5LmphdmEKQEAgLTAsMCArMSw1IEBACitjbGFzcyBGb297CisgIHsKKyAgICBuZXcgaW50CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2V4cHJlc3Npb25QYXJzaW5nL05ldzkudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9leHByZXNzaW9uUGFyc2luZy9OZXc5LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NjkyNGM4Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9leHByZXNzaW9uUGFyc2luZy9OZXc5LnR4dApAQCAtMCwwICsxLDM4IEBACitQc2lKYXZhRmlsZTpOZXc5LmphdmEKKyAgUHNpSW1wb3J0TGlzdAorICAgIDxlbXB0eSBsaXN0PgorICBQc2lDbGFzczpGb28KKyAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lLZXl3b3JkOmNsYXNzKCdjbGFzcycpCisgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgUHNpSWRlbnRpZmllcjpGb28oJ0ZvbycpCisgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuICAnKQorICAgIFBzaUNsYXNzSW5pdGlhbGl6ZXIKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICAgICcpCisgICAgICAgIFBzaUV4cHJlc3Npb25TdGF0ZW1lbnQKKyAgICAgICAgICBQc2lOZXdFeHByZXNzaW9uOm5ldyBpbnQKKyAgICAgICAgICAgIFBzaUtleXdvcmQ6bmV3KCduZXcnKQorICAgICAgICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgICAgICAgUHNpS2V5d29yZDppbnQoJ2ludCcpCisgICAgICAgICAgICBQc2lFcnJvckVsZW1lbnQ6J1snIGV4cGVjdGVkCisgICAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICAgIFBzaUVycm9yRWxlbWVudDonOycgZXhwZWN0ZWQKKyAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAgJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG4nKQorICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZXhwcmVzc2lvblBhcnNpbmcvTmV3SW5FeHByTGlzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9leHByZXNzaW9uUGFyc2luZy9OZXdJbkV4cHJMaXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDZkY2QzYQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZXhwcmVzc2lvblBhcnNpbmcvTmV3SW5FeHByTGlzdC5qYXZhCkBAIC0wLDAgKzEsNSBAQAorY2xhc3MgRm9veworICB7CisgICAgY2FsbChuZXcgKTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZXhwcmVzc2lvblBhcnNpbmcvTmV3SW5FeHByTGlzdC50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2V4cHJlc3Npb25QYXJzaW5nL05ld0luRXhwckxpc3QudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUyY2RiNjgKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2V4cHJlc3Npb25QYXJzaW5nL05ld0luRXhwckxpc3QudHh0CkBAIC0wLDAgKzEsNDUgQEAKK1BzaUphdmFGaWxlOk5ld0luRXhwckxpc3QuamF2YQorICBQc2lJbXBvcnRMaXN0CisgICAgPGVtcHR5IGxpc3Q+CisgIFBzaUNsYXNzOkZvbworICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaUtleXdvcmQ6Y2xhc3MoJ2NsYXNzJykKKyAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICBQc2lJZGVudGlmaWVyOkZvbygnRm9vJykKKyAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgUHNpV2hpdGVTcGFjZSgnXG4gICcpCisgICAgUHNpQ2xhc3NJbml0aWFsaXplcgorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gICAgJykKKyAgICAgICAgUHNpRXhwcmVzc2lvblN0YXRlbWVudAorICAgICAgICAgIFBzaU1ldGhvZENhbGxFeHByZXNzaW9uOmNhbGwobmV3ICkKKyAgICAgICAgICAgIFBzaVJlZmVyZW5jZUV4cHJlc3Npb246Y2FsbAorICAgICAgICAgICAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgICAgICAgIFBzaUlkZW50aWZpZXI6Y2FsbCgnY2FsbCcpCisgICAgICAgICAgICBQc2lFeHByZXNzaW9uTGlzdAorICAgICAgICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICAgICAgICBQc2lOZXdFeHByZXNzaW9uOm5ldworICAgICAgICAgICAgICAgIFBzaUtleXdvcmQ6bmV3KCduZXcnKQorICAgICAgICAgICAgICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgICAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICAgICAgICAgIFBzaUVycm9yRWxlbWVudDpJZGVudGlmaWVyIGV4cGVjdGVkCisgICAgICAgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICAgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICAgICAgUHNpSmF2YVRva2VuOlNFTUlDT0xPTignOycpCisgICAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICAnKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcbicpCisgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9leHByZXNzaW9uUGFyc2luZy9Ob3QwLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2V4cHJlc3Npb25QYXJzaW5nL05vdDAuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOWVlODNlCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9leHByZXNzaW9uUGFyc2luZy9Ob3QwLmphdmEKQEAgLTAsMCArMSw1IEBACitjbGFzcyBGb297CisgIHsKKyAgICByZXR1cm4gISFhOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9leHByZXNzaW9uUGFyc2luZy9Ob3QwLnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZXhwcmVzc2lvblBhcnNpbmcvTm90MC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGJiNDE5MAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZXhwcmVzc2lvblBhcnNpbmcvTm90MC50eHQKQEAgLTAsMCArMSwzOSBAQAorUHNpSmF2YUZpbGU6Tm90MC5qYXZhCisgIFBzaUltcG9ydExpc3QKKyAgICA8ZW1wdHkgbGlzdD4KKyAgUHNpQ2xhc3M6Rm9vCisgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpS2V5d29yZDpjbGFzcygnY2xhc3MnKQorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaUlkZW50aWZpZXI6Rm9vKCdGb28nKQorICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcbiAgJykKKyAgICBQc2lDbGFzc0luaXRpYWxpemVyCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAgICAnKQorICAgICAgICBQc2lSZXR1cm5TdGF0ZW1lbnQKKyAgICAgICAgICBQc2lLZXl3b3JkOnJldHVybigncmV0dXJuJykKKyAgICAgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgICAgICBQc2lQcmVmaXhFeHByZXNzaW9uOiEhYQorICAgICAgICAgICAgUHNpSmF2YVRva2VuOkVYQ0woJyEnKQorICAgICAgICAgICAgUHNpUHJlZml4RXhwcmVzc2lvbjohYQorICAgICAgICAgICAgICBQc2lKYXZhVG9rZW46RVhDTCgnIScpCisgICAgICAgICAgICAgIFBzaVJlZmVyZW5jZUV4cHJlc3Npb246YQorICAgICAgICAgICAgICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgICAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICAgICAgICAgIFBzaUlkZW50aWZpZXI6YSgnYScpCisgICAgICAgICAgUHNpSmF2YVRva2VuOlNFTUlDT0xPTignOycpCisgICAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICAnKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcbicpCisgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9leHByZXNzaW9uUGFyc2luZy9Ob3QxLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2V4cHJlc3Npb25QYXJzaW5nL05vdDEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMmRmNzYzCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9leHByZXNzaW9uUGFyc2luZy9Ob3QxLmphdmEKQEAgLTAsMCArMSw1IEBACitjbGFzcyBGb297CisgIHsKKyAgICByZXR1cm4gIQorICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9leHByZXNzaW9uUGFyc2luZy9Ob3QxLnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZXhwcmVzc2lvblBhcnNpbmcvTm90MS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmVjYjE4NgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZXhwcmVzc2lvblBhcnNpbmcvTm90MS50eHQKQEAgLTAsMCArMSwzNiBAQAorUHNpSmF2YUZpbGU6Tm90MS5qYXZhCisgIFBzaUltcG9ydExpc3QKKyAgICA8ZW1wdHkgbGlzdD4KKyAgUHNpQ2xhc3M6Rm9vCisgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpS2V5d29yZDpjbGFzcygnY2xhc3MnKQorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaUlkZW50aWZpZXI6Rm9vKCdGb28nKQorICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcbiAgJykKKyAgICBQc2lDbGFzc0luaXRpYWxpemVyCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAgICAnKQorICAgICAgICBQc2lSZXR1cm5TdGF0ZW1lbnQKKyAgICAgICAgICBQc2lLZXl3b3JkOnJldHVybigncmV0dXJuJykKKyAgICAgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgICAgICBQc2lQcmVmaXhFeHByZXNzaW9uOiEKKyAgICAgICAgICAgIFBzaUphdmFUb2tlbjpFWENMKCchJykKKyAgICAgICAgICAgIFBzaUVycm9yRWxlbWVudDpFeHByZXNzaW9uIGV4cGVjdGVkCisgICAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICAgIFBzaUVycm9yRWxlbWVudDonOycgZXhwZWN0ZWQKKyAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAgJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG4nKQorICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9leHByZXNzaW9uUGFyc2luZy9PcjAuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZXhwcmVzc2lvblBhcnNpbmcvT3IwLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjI4ZTE4NgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZXhwcmVzc2lvblBhcnNpbmcvT3IwLmphdmEKQEAgLTAsMCArMSw1IEBACitjbGFzcyBGb297CisgIHsKKyAgICByZXR1cm4gYSB8IGIgfCBjOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9leHByZXNzaW9uUGFyc2luZy9PcjAudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9leHByZXNzaW9uUGFyc2luZy9PcjAudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ1M2VmOGEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2V4cHJlc3Npb25QYXJzaW5nL09yMC50eHQKQEAgLTAsMCArMSw1MCBAQAorUHNpSmF2YUZpbGU6T3IwLmphdmEKKyAgUHNpSW1wb3J0TGlzdAorICAgIDxlbXB0eSBsaXN0PgorICBQc2lDbGFzczpGb28KKyAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lLZXl3b3JkOmNsYXNzKCdjbGFzcycpCisgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgUHNpSWRlbnRpZmllcjpGb28oJ0ZvbycpCisgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuICAnKQorICAgIFBzaUNsYXNzSW5pdGlhbGl6ZXIKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICAgICcpCisgICAgICAgIFBzaVJldHVyblN0YXRlbWVudAorICAgICAgICAgIFBzaUtleXdvcmQ6cmV0dXJuKCdyZXR1cm4nKQorICAgICAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgICAgIFBzaVBvbHlhZGljRXhwcmVzc2lvbjogYSB8IGIgfCBjCisgICAgICAgICAgICBQc2lSZWZlcmVuY2VFeHByZXNzaW9uOmEKKyAgICAgICAgICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICAgICAgICBQc2lJZGVudGlmaWVyOmEoJ2EnKQorICAgICAgICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICAgICAgICBQc2lKYXZhVG9rZW46T1IoJ3wnKQorICAgICAgICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICAgICAgICBQc2lSZWZlcmVuY2VFeHByZXNzaW9uOmIKKyAgICAgICAgICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICAgICAgICBQc2lJZGVudGlmaWVyOmIoJ2InKQorICAgICAgICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICAgICAgICBQc2lKYXZhVG9rZW46T1IoJ3wnKQorICAgICAgICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICAgICAgICBQc2lSZWZlcmVuY2VFeHByZXNzaW9uOmMKKyAgICAgICAgICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICAgICAgICBQc2lJZGVudGlmaWVyOmMoJ2MnKQorICAgICAgICAgIFBzaUphdmFUb2tlbjpTRU1JQ09MT04oJzsnKQorICAgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAgJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG4nKQorICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9leHByZXNzaW9uUGFyc2luZy9PcjEuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZXhwcmVzc2lvblBhcnNpbmcvT3IxLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWRjMTUzMgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZXhwcmVzc2lvblBhcnNpbmcvT3IxLmphdmEKQEAgLTAsMCArMSw1IEBACitjbGFzcyBGb297CisgIHsKKyAgICAgYSB8CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2V4cHJlc3Npb25QYXJzaW5nL09yMS50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2V4cHJlc3Npb25QYXJzaW5nL09yMS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTBhNTczZQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZXhwcmVzc2lvblBhcnNpbmcvT3IxLnR4dApAQCAtMCwwICsxLDM5IEBACitQc2lKYXZhRmlsZTpPcjEuamF2YQorICBQc2lJbXBvcnRMaXN0CisgICAgPGVtcHR5IGxpc3Q+CisgIFBzaUNsYXNzOkZvbworICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaUtleXdvcmQ6Y2xhc3MoJ2NsYXNzJykKKyAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICBQc2lJZGVudGlmaWVyOkZvbygnRm9vJykKKyAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgUHNpV2hpdGVTcGFjZSgnXG4gICcpCisgICAgUHNpQ2xhc3NJbml0aWFsaXplcgorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gICAgICcpCisgICAgICAgIFBzaUV4cHJlc3Npb25TdGF0ZW1lbnQKKyAgICAgICAgICBQc2lCaW5hcnlFeHByZXNzaW9uOmEgfAorICAgICAgICAgICAgUHNpUmVmZXJlbmNlRXhwcmVzc2lvbjphCisgICAgICAgICAgICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgICAgICAgUHNpSWRlbnRpZmllcjphKCdhJykKKyAgICAgICAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgICAgICAgUHNpSmF2YVRva2VuOk9SKCd8JykKKyAgICAgICAgICAgIFBzaUVycm9yRWxlbWVudDpFeHByZXNzaW9uIGV4cGVjdGVkCisgICAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICAgIFBzaUVycm9yRWxlbWVudDonOycgZXhwZWN0ZWQKKyAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAgJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG4nKQorICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZXhwcmVzc2lvblBhcnNpbmcvUGFyZW50aC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9leHByZXNzaW9uUGFyc2luZy9QYXJlbnRoLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2EzMDEwNwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZXhwcmVzc2lvblBhcnNpbmcvUGFyZW50aC5qYXZhCkBAIC0wLDAgKzEsNSBAQAorY2xhc3MgRm9veworICB7CisgICAgaW50IGggPSAoYyk7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2V4cHJlc3Npb25QYXJzaW5nL1BhcmVudGgudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9leHByZXNzaW9uUGFyc2luZy9QYXJlbnRoLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYTM4NTVhCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9leHByZXNzaW9uUGFyc2luZy9QYXJlbnRoLnR4dApAQCAtMCwwICsxLDQ2IEBACitQc2lKYXZhRmlsZTpQYXJlbnRoLmphdmEKKyAgUHNpSW1wb3J0TGlzdAorICAgIDxlbXB0eSBsaXN0PgorICBQc2lDbGFzczpGb28KKyAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lLZXl3b3JkOmNsYXNzKCdjbGFzcycpCisgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgUHNpSWRlbnRpZmllcjpGb28oJ0ZvbycpCisgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuICAnKQorICAgIFBzaUNsYXNzSW5pdGlhbGl6ZXIKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICAgICcpCisgICAgICAgIFBzaURlY2xhcmF0aW9uU3RhdGVtZW50CisgICAgICAgICAgUHNpTG9jYWxWYXJpYWJsZTpoCisgICAgICAgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICAgICAgUHNpVHlwZUVsZW1lbnQ6aW50CisgICAgICAgICAgICAgIFBzaUtleXdvcmQ6aW50KCdpbnQnKQorICAgICAgICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICAgICAgICBQc2lJZGVudGlmaWVyOmgoJ2gnKQorICAgICAgICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICAgICAgICBQc2lKYXZhVG9rZW46RVEoJz0nKQorICAgICAgICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICAgICAgICBQc2lQYXJlbnRoZXNpemVkRXhwcmVzc2lvbjooYykKKyAgICAgICAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgICAgICAgUHNpUmVmZXJlbmNlRXhwcmVzc2lvbjpjCisgICAgICAgICAgICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgICAgICAgICAgUHNpSWRlbnRpZmllcjpjKCdjJykKKyAgICAgICAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgICAgICAgIFBzaUphdmFUb2tlbjpTRU1JQ09MT04oJzsnKQorICAgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAgJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG4nKQorICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZXhwcmVzc2lvblBhcnNpbmcvUGFyZW50aDEuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZXhwcmVzc2lvblBhcnNpbmcvUGFyZW50aDEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYjkxZTY1Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9leHByZXNzaW9uUGFyc2luZy9QYXJlbnRoMS5qYXZhCkBAIC0wLDAgKzEsNSBAQAorY2xhc3MgRm9veworICB7CisgICAgKHRoaXMpLmYtLTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZXhwcmVzc2lvblBhcnNpbmcvUGFyZW50aDEudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9leHByZXNzaW9uUGFyc2luZy9QYXJlbnRoMS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmNjYmVkNgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZXhwcmVzc2lvblBhcnNpbmcvUGFyZW50aDEudHh0CkBAIC0wLDAgKzEsNDMgQEAKK1BzaUphdmFGaWxlOlBhcmVudGgxLmphdmEKKyAgUHNpSW1wb3J0TGlzdAorICAgIDxlbXB0eSBsaXN0PgorICBQc2lDbGFzczpGb28KKyAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lLZXl3b3JkOmNsYXNzKCdjbGFzcycpCisgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgUHNpSWRlbnRpZmllcjpGb28oJ0ZvbycpCisgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuICAnKQorICAgIFBzaUNsYXNzSW5pdGlhbGl6ZXIKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICAgICcpCisgICAgICAgIFBzaUV4cHJlc3Npb25TdGF0ZW1lbnQKKyAgICAgICAgICBQc2lQb3N0Zml4RXhwcmVzc2lvbjoodGhpcykuZi0tCisgICAgICAgICAgICBQc2lSZWZlcmVuY2VFeHByZXNzaW9uOih0aGlzKS5mCisgICAgICAgICAgICAgIFBzaVBhcmVudGhlc2l6ZWRFeHByZXNzaW9uOih0aGlzKQorICAgICAgICAgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgICAgICAgICAgUHNpVGhpc0V4cHJlc3Npb246dGhpcworICAgICAgICAgICAgICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICAgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgICAgICAgICAgIFBzaUtleXdvcmQ6dGhpcygndGhpcycpCisgICAgICAgICAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgICAgICAgICAgUHNpSmF2YVRva2VuOkRPVCgnLicpCisgICAgICAgICAgICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgICAgICAgUHNpSWRlbnRpZmllcjpmKCdmJykKKyAgICAgICAgICAgIFBzaUphdmFUb2tlbjpNSU5VU01JTlVTKCctLScpCisgICAgICAgICAgUHNpSmF2YVRva2VuOlNFTUlDT0xPTignOycpCisgICAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICAnKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcbicpCisgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9leHByZXNzaW9uUGFyc2luZy9QaW5lc0luUmVmZXJlbmNlRXhwcmVzc2lvbjAuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZXhwcmVzc2lvblBhcnNpbmcvUGluZXNJblJlZmVyZW5jZUV4cHJlc3Npb24wLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTdiNWQxOAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZXhwcmVzc2lvblBhcnNpbmcvUGluZXNJblJlZmVyZW5jZUV4cHJlc3Npb24wLmphdmEKQEAgLTAsMCArMSw1IEBACitjbGFzcyBGb28geworICB7CisgICAgQ29sbGVjdGlvbnMuPFN0cmluZz5zb3J0KG51bGwpOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9leHByZXNzaW9uUGFyc2luZy9QaW5lc0luUmVmZXJlbmNlRXhwcmVzc2lvbjAudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9leHByZXNzaW9uUGFyc2luZy9QaW5lc0luUmVmZXJlbmNlRXhwcmVzc2lvbjAudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2MjlhMzIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2V4cHJlc3Npb25QYXJzaW5nL1BpbmVzSW5SZWZlcmVuY2VFeHByZXNzaW9uMC50eHQKQEAgLTAsMCArMSw1MSBAQAorUHNpSmF2YUZpbGU6UGluZXNJblJlZmVyZW5jZUV4cHJlc3Npb24wLmphdmEKKyAgUHNpSW1wb3J0TGlzdAorICAgIDxlbXB0eSBsaXN0PgorICBQc2lDbGFzczpGb28KKyAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lLZXl3b3JkOmNsYXNzKCdjbGFzcycpCisgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgUHNpSWRlbnRpZmllcjpGb28oJ0ZvbycpCisgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuICAnKQorICAgIFBzaUNsYXNzSW5pdGlhbGl6ZXIKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICAgICcpCisgICAgICAgIFBzaUV4cHJlc3Npb25TdGF0ZW1lbnQKKyAgICAgICAgICBQc2lNZXRob2RDYWxsRXhwcmVzc2lvbjpDb2xsZWN0aW9ucy48U3RyaW5nPnNvcnQobnVsbCkKKyAgICAgICAgICAgIFBzaVJlZmVyZW5jZUV4cHJlc3Npb246Q29sbGVjdGlvbnMuPFN0cmluZz5zb3J0CisgICAgICAgICAgICAgIFBzaVJlZmVyZW5jZUV4cHJlc3Npb246Q29sbGVjdGlvbnMKKyAgICAgICAgICAgICAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICAgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgICAgICAgICBQc2lJZGVudGlmaWVyOkNvbGxlY3Rpb25zKCdDb2xsZWN0aW9ucycpCisgICAgICAgICAgICAgIFBzaUphdmFUb2tlbjpET1QoJy4nKQorICAgICAgICAgICAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICAgICAgICAgICAgUHNpSmF2YVRva2VuOkxUKCc8JykKKyAgICAgICAgICAgICAgICBQc2lUeXBlRWxlbWVudDpTdHJpbmcKKyAgICAgICAgICAgICAgICAgIFBzaUphdmFDb2RlUmVmZXJlbmNlRWxlbWVudDpTdHJpbmcKKyAgICAgICAgICAgICAgICAgICAgUHNpSWRlbnRpZmllcjpTdHJpbmcoJ1N0cmluZycpCisgICAgICAgICAgICAgICAgICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgICAgICAgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgICAgICAgICBQc2lKYXZhVG9rZW46R1QoJz4nKQorICAgICAgICAgICAgICBQc2lJZGVudGlmaWVyOnNvcnQoJ3NvcnQnKQorICAgICAgICAgICAgUHNpRXhwcmVzc2lvbkxpc3QKKyAgICAgICAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgICAgICAgUHNpTGl0ZXJhbEV4cHJlc3Npb246bnVsbAorICAgICAgICAgICAgICAgIFBzaUphdmFUb2tlbjpOVUxMX0tFWVdPUkQoJ251bGwnKQorICAgICAgICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgICAgIFBzaUphdmFUb2tlbjpTRU1JQ09MT04oJzsnKQorICAgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAgJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG4nKQorICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZXhwcmVzc2lvblBhcnNpbmcvUGluZXNJblJlZmVyZW5jZUV4cHJlc3Npb24xLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2V4cHJlc3Npb25QYXJzaW5nL1BpbmVzSW5SZWZlcmVuY2VFeHByZXNzaW9uMS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg5ZDZmNjQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2V4cHJlc3Npb25QYXJzaW5nL1BpbmVzSW5SZWZlcmVuY2VFeHByZXNzaW9uMS5qYXZhCkBAIC0wLDAgKzEsNSBAQAorY2xhc3MgRm9vIHsKKyAgeworICAgIHRoaXMuPFN0cmluZz5zb3J0KG51bGwpOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9leHByZXNzaW9uUGFyc2luZy9QaW5lc0luUmVmZXJlbmNlRXhwcmVzc2lvbjEudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9leHByZXNzaW9uUGFyc2luZy9QaW5lc0luUmVmZXJlbmNlRXhwcmVzc2lvbjEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAzYWUxYzMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2V4cHJlc3Npb25QYXJzaW5nL1BpbmVzSW5SZWZlcmVuY2VFeHByZXNzaW9uMS50eHQKQEAgLTAsMCArMSw1MiBAQAorUHNpSmF2YUZpbGU6UGluZXNJblJlZmVyZW5jZUV4cHJlc3Npb24xLmphdmEKKyAgUHNpSW1wb3J0TGlzdAorICAgIDxlbXB0eSBsaXN0PgorICBQc2lDbGFzczpGb28KKyAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lLZXl3b3JkOmNsYXNzKCdjbGFzcycpCisgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgUHNpSWRlbnRpZmllcjpGb28oJ0ZvbycpCisgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuICAnKQorICAgIFBzaUNsYXNzSW5pdGlhbGl6ZXIKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICAgICcpCisgICAgICAgIFBzaUV4cHJlc3Npb25TdGF0ZW1lbnQKKyAgICAgICAgICBQc2lNZXRob2RDYWxsRXhwcmVzc2lvbjp0aGlzLjxTdHJpbmc+c29ydChudWxsKQorICAgICAgICAgICAgUHNpUmVmZXJlbmNlRXhwcmVzc2lvbjp0aGlzLjxTdHJpbmc+c29ydAorICAgICAgICAgICAgICBQc2lUaGlzRXhwcmVzc2lvbjp0aGlzCisgICAgICAgICAgICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgICAgICAgICAgUHNpS2V5d29yZDp0aGlzKCd0aGlzJykKKyAgICAgICAgICAgICAgUHNpSmF2YVRva2VuOkRPVCgnLicpCisgICAgICAgICAgICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgICAgICAgICAgICBQc2lKYXZhVG9rZW46TFQoJzwnKQorICAgICAgICAgICAgICAgIFBzaVR5cGVFbGVtZW50OlN0cmluZworICAgICAgICAgICAgICAgICAgUHNpSmF2YUNvZGVSZWZlcmVuY2VFbGVtZW50OlN0cmluZworICAgICAgICAgICAgICAgICAgICBQc2lJZGVudGlmaWVyOlN0cmluZygnU3RyaW5nJykKKyAgICAgICAgICAgICAgICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICAgICAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICAgICAgICAgIFBzaUphdmFUb2tlbjpHVCgnPicpCisgICAgICAgICAgICAgIFBzaUlkZW50aWZpZXI6c29ydCgnc29ydCcpCisgICAgICAgICAgICBQc2lFeHByZXNzaW9uTGlzdAorICAgICAgICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICAgICAgICBQc2lMaXRlcmFsRXhwcmVzc2lvbjpudWxsCisgICAgICAgICAgICAgICAgUHNpSmF2YVRva2VuOk5VTExfS0VZV09SRCgnbnVsbCcpCisgICAgICAgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICAgICAgUHNpSmF2YVRva2VuOlNFTUlDT0xPTignOycpCisgICAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICAnKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcbicpCisgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9leHByZXNzaW9uUGFyc2luZy9QcmltaXRpdmVBcnJheUNsYXNzT2JqZWN0QWNjZXNzRXJyb3IuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZXhwcmVzc2lvblBhcnNpbmcvUHJpbWl0aXZlQXJyYXlDbGFzc09iamVjdEFjY2Vzc0Vycm9yLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWE0NmNmMAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZXhwcmVzc2lvblBhcnNpbmcvUHJpbWl0aXZlQXJyYXlDbGFzc09iamVjdEFjY2Vzc0Vycm9yLmphdmEKQEAgLTAsMCArMSw1IEBACitjbGFzcyBDIHsKKyAgeworICAgIGludFtdLmNsYTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZXhwcmVzc2lvblBhcnNpbmcvUHJpbWl0aXZlQXJyYXlDbGFzc09iamVjdEFjY2Vzc0Vycm9yLnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZXhwcmVzc2lvblBhcnNpbmcvUHJpbWl0aXZlQXJyYXlDbGFzc09iamVjdEFjY2Vzc0Vycm9yLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41Y2UwZGM2Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9leHByZXNzaW9uUGFyc2luZy9QcmltaXRpdmVBcnJheUNsYXNzT2JqZWN0QWNjZXNzRXJyb3IudHh0CkBAIC0wLDAgKzEsNDMgQEAKK1BzaUphdmFGaWxlOlByaW1pdGl2ZUFycmF5Q2xhc3NPYmplY3RBY2Nlc3NFcnJvci5qYXZhCisgIFBzaUltcG9ydExpc3QKKyAgICA8ZW1wdHkgbGlzdD4KKyAgUHNpQ2xhc3M6QworICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaUtleXdvcmQ6Y2xhc3MoJ2NsYXNzJykKKyAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICBQc2lJZGVudGlmaWVyOkMoJ0MnKQorICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcbiAgJykKKyAgICBQc2lDbGFzc0luaXRpYWxpemVyCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAgICAnKQorICAgICAgICBQc2lFeHByZXNzaW9uU3RhdGVtZW50CisgICAgICAgICAgUHNpUmVmZXJlbmNlRXhwcmVzc2lvbjppbnRbXS5jbGEKKyAgICAgICAgICAgIFBzaUNsYXNzT2JqZWN0QWNjZXNzRXhwcmVzc2lvbjppbnRbXQorICAgICAgICAgICAgICBQc2lUeXBlRWxlbWVudDppbnRbXQorICAgICAgICAgICAgICAgIFBzaVR5cGVFbGVtZW50OmludAorICAgICAgICAgICAgICAgICAgUHNpS2V5d29yZDppbnQoJ2ludCcpCisgICAgICAgICAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDS0VUKCdbJykKKyAgICAgICAgICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNLRVQoJ10nKQorICAgICAgICAgICAgICBQc2lFcnJvckVsZW1lbnQ6LmNsYXNzIGV4cGVjdGVkCisgICAgICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgICAgICBQc2lKYXZhVG9rZW46RE9UKCcuJykKKyAgICAgICAgICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgICAgICBQc2lJZGVudGlmaWVyOmNsYSgnY2xhJykKKyAgICAgICAgICBQc2lKYXZhVG9rZW46U0VNSUNPTE9OKCc7JykKKyAgICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gICcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuJykKKyAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2V4cHJlc3Npb25QYXJzaW5nL1ByaW1pdGl2ZUNsYXNzT2JqZWN0QWNjZXNzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2V4cHJlc3Npb25QYXJzaW5nL1ByaW1pdGl2ZUNsYXNzT2JqZWN0QWNjZXNzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWQ3ZGM4MwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZXhwcmVzc2lvblBhcnNpbmcvUHJpbWl0aXZlQ2xhc3NPYmplY3RBY2Nlc3MuamF2YQpAQCAtMCwwICsxLDUgQEAKK2NsYXNzIEMgeworICB7CisgICAgaW50LmNsYXNzOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9leHByZXNzaW9uUGFyc2luZy9QcmltaXRpdmVDbGFzc09iamVjdEFjY2Vzcy50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2V4cHJlc3Npb25QYXJzaW5nL1ByaW1pdGl2ZUNsYXNzT2JqZWN0QWNjZXNzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNjY0YmIwCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9leHByZXNzaW9uUGFyc2luZy9QcmltaXRpdmVDbGFzc09iamVjdEFjY2Vzcy50eHQKQEAgLTAsMCArMSwzNSBAQAorUHNpSmF2YUZpbGU6UHJpbWl0aXZlQ2xhc3NPYmplY3RBY2Nlc3MuamF2YQorICBQc2lJbXBvcnRMaXN0CisgICAgPGVtcHR5IGxpc3Q+CisgIFBzaUNsYXNzOkMKKyAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lLZXl3b3JkOmNsYXNzKCdjbGFzcycpCisgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgUHNpSWRlbnRpZmllcjpDKCdDJykKKyAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgUHNpV2hpdGVTcGFjZSgnXG4gICcpCisgICAgUHNpQ2xhc3NJbml0aWFsaXplcgorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gICAgJykKKyAgICAgICAgUHNpRXhwcmVzc2lvblN0YXRlbWVudAorICAgICAgICAgIFBzaUNsYXNzT2JqZWN0QWNjZXNzRXhwcmVzc2lvbjppbnQuY2xhc3MKKyAgICAgICAgICAgIFBzaVR5cGVFbGVtZW50OmludAorICAgICAgICAgICAgICBQc2lLZXl3b3JkOmludCgnaW50JykKKyAgICAgICAgICAgIFBzaUphdmFUb2tlbjpET1QoJy4nKQorICAgICAgICAgICAgUHNpS2V5d29yZDpjbGFzcygnY2xhc3MnKQorICAgICAgICAgIFBzaUphdmFUb2tlbjpTRU1JQ09MT04oJzsnKQorICAgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAgJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG4nKQorICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZXhwcmVzc2lvblBhcnNpbmcvUHJpbWl0aXZlQ2xhc3NPYmplY3RBY2Nlc3NFcnJvci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9leHByZXNzaW9uUGFyc2luZy9QcmltaXRpdmVDbGFzc09iamVjdEFjY2Vzc0Vycm9yLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTk2ZDU4NwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZXhwcmVzc2lvblBhcnNpbmcvUHJpbWl0aXZlQ2xhc3NPYmplY3RBY2Nlc3NFcnJvci5qYXZhCkBAIC0wLDAgKzEsNSBAQAorY2xhc3MgQyB7CisgIHsKKyAgICBpbnQuY2xhOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9leHByZXNzaW9uUGFyc2luZy9QcmltaXRpdmVDbGFzc09iamVjdEFjY2Vzc0Vycm9yLnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZXhwcmVzc2lvblBhcnNpbmcvUHJpbWl0aXZlQ2xhc3NPYmplY3RBY2Nlc3NFcnJvci50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmM4NmJlMgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZXhwcmVzc2lvblBhcnNpbmcvUHJpbWl0aXZlQ2xhc3NPYmplY3RBY2Nlc3NFcnJvci50eHQKQEAgLTAsMCArMSw0MCBAQAorUHNpSmF2YUZpbGU6UHJpbWl0aXZlQ2xhc3NPYmplY3RBY2Nlc3NFcnJvci5qYXZhCisgIFBzaUltcG9ydExpc3QKKyAgICA8ZW1wdHkgbGlzdD4KKyAgUHNpQ2xhc3M6QworICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaUtleXdvcmQ6Y2xhc3MoJ2NsYXNzJykKKyAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICBQc2lJZGVudGlmaWVyOkMoJ0MnKQorICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcbiAgJykKKyAgICBQc2lDbGFzc0luaXRpYWxpemVyCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAgICAnKQorICAgICAgICBQc2lFeHByZXNzaW9uU3RhdGVtZW50CisgICAgICAgICAgUHNpUmVmZXJlbmNlRXhwcmVzc2lvbjppbnQuY2xhCisgICAgICAgICAgICBQc2lDbGFzc09iamVjdEFjY2Vzc0V4cHJlc3Npb246aW50CisgICAgICAgICAgICAgIFBzaVR5cGVFbGVtZW50OmludAorICAgICAgICAgICAgICAgIFBzaUtleXdvcmQ6aW50KCdpbnQnKQorICAgICAgICAgICAgICBQc2lFcnJvckVsZW1lbnQ6LmNsYXNzIGV4cGVjdGVkCisgICAgICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgICAgICBQc2lKYXZhVG9rZW46RE9UKCcuJykKKyAgICAgICAgICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgICAgICBQc2lJZGVudGlmaWVyOmNsYSgnY2xhJykKKyAgICAgICAgICBQc2lKYXZhVG9rZW46U0VNSUNPTE9OKCc7JykKKyAgICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gICcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuJykKKyAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2V4cHJlc3Npb25QYXJzaW5nL1F1YWxpZmllZFN1cGVyTWV0aG9kQ2FsbC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9leHByZXNzaW9uUGFyc2luZy9RdWFsaWZpZWRTdXBlck1ldGhvZENhbGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NzEzYTdiCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9leHByZXNzaW9uUGFyc2luZy9RdWFsaWZpZWRTdXBlck1ldGhvZENhbGwuamF2YQpAQCAtMCwwICsxLDUgQEAKK2NsYXNzIEMgZXh0ZW5kcyBELkUgeworICBDKCkgeworICAgICBuZXcgRCgpLnN1cGVyKDApOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9leHByZXNzaW9uUGFyc2luZy9RdWFsaWZpZWRTdXBlck1ldGhvZENhbGwudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9leHByZXNzaW9uUGFyc2luZy9RdWFsaWZpZWRTdXBlck1ldGhvZENhbGwudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAyY2IxMWYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2V4cHJlc3Npb25QYXJzaW5nL1F1YWxpZmllZFN1cGVyTWV0aG9kQ2FsbC50eHQKQEAgLTAsMCArMSw3MSBAQAorUHNpSmF2YUZpbGU6UXVhbGlmaWVkU3VwZXJNZXRob2RDYWxsLmphdmEKKyAgUHNpSW1wb3J0TGlzdAorICAgIDxlbXB0eSBsaXN0PgorICBQc2lDbGFzczpDCisgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpS2V5d29yZDpjbGFzcygnY2xhc3MnKQorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaUlkZW50aWZpZXI6QygnQycpCisgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgIFBzaUtleXdvcmQ6ZXh0ZW5kcygnZXh0ZW5kcycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUphdmFDb2RlUmVmZXJlbmNlRWxlbWVudDpELkUKKyAgICAgICAgUHNpSmF2YUNvZGVSZWZlcmVuY2VFbGVtZW50OkQKKyAgICAgICAgICBQc2lJZGVudGlmaWVyOkQoJ0QnKQorICAgICAgICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICBQc2lKYXZhVG9rZW46RE9UKCcuJykKKyAgICAgICAgUHNpSWRlbnRpZmllcjpFKCdFJykKKyAgICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuICAnKQorICAgIFBzaU1ldGhvZDpDCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lJZGVudGlmaWVyOkMoJ0MnKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAgICAgJykKKyAgICAgICAgUHNpRXhwcmVzc2lvblN0YXRlbWVudAorICAgICAgICAgIFBzaU1ldGhvZENhbGxFeHByZXNzaW9uOm5ldyBEKCkuc3VwZXIoMCkKKyAgICAgICAgICAgIFBzaVJlZmVyZW5jZUV4cHJlc3Npb246bmV3IEQoKS5zdXBlcgorICAgICAgICAgICAgICBQc2lOZXdFeHByZXNzaW9uOm5ldyBEKCkKKyAgICAgICAgICAgICAgICBQc2lLZXl3b3JkOm5ldygnbmV3JykKKyAgICAgICAgICAgICAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICAgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgICAgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgICAgICAgICAgICBQc2lKYXZhQ29kZVJlZmVyZW5jZUVsZW1lbnQ6RAorICAgICAgICAgICAgICAgICAgUHNpSWRlbnRpZmllcjpEKCdEJykKKyAgICAgICAgICAgICAgICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgICAgICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgICAgICAgICAgUHNpRXhwcmVzc2lvbkxpc3QKKyAgICAgICAgICAgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgICAgICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgICAgICAgICBQc2lKYXZhVG9rZW46RE9UKCcuJykKKyAgICAgICAgICAgICAgUHNpS2V5d29yZDpzdXBlcignc3VwZXInKQorICAgICAgICAgICAgUHNpRXhwcmVzc2lvbkxpc3QKKyAgICAgICAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgICAgICAgUHNpTGl0ZXJhbEV4cHJlc3Npb246MAorICAgICAgICAgICAgICAgIFBzaUphdmFUb2tlbjpJTlRFR0VSX0xJVEVSQUwoJzAnKQorICAgICAgICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgICAgIFBzaUphdmFUb2tlbjpTRU1JQ09MT04oJzsnKQorICAgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAgJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG4nKQorICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZXhwcmVzc2lvblBhcnNpbmcvUXVhbGlmaWVkU3VwZXJNZXRob2RDYWxsMS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9leHByZXNzaW9uUGFyc2luZy9RdWFsaWZpZWRTdXBlck1ldGhvZENhbGwxLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzU1MzQyNQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZXhwcmVzc2lvblBhcnNpbmcvUXVhbGlmaWVkU3VwZXJNZXRob2RDYWxsMS5qYXZhCkBAIC0wLDAgKzEsNSBAQAorY2xhc3MgQyBleHRlbmRzIEQuRSB7CisgIEMoRCBkKSB7CisgICAgIGQuc3VwZXIoMCk7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2V4cHJlc3Npb25QYXJzaW5nL1F1YWxpZmllZFN1cGVyTWV0aG9kQ2FsbDEudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9leHByZXNzaW9uUGFyc2luZy9RdWFsaWZpZWRTdXBlck1ldGhvZENhbGwxLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYWFjMGRlCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9leHByZXNzaW9uUGFyc2luZy9RdWFsaWZpZWRTdXBlck1ldGhvZENhbGwxLnR4dApAQCAtMCwwICsxLDczIEBACitQc2lKYXZhRmlsZTpRdWFsaWZpZWRTdXBlck1ldGhvZENhbGwxLmphdmEKKyAgUHNpSW1wb3J0TGlzdAorICAgIDxlbXB0eSBsaXN0PgorICBQc2lDbGFzczpDCisgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpS2V5d29yZDpjbGFzcygnY2xhc3MnKQorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaUlkZW50aWZpZXI6QygnQycpCisgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgIFBzaUtleXdvcmQ6ZXh0ZW5kcygnZXh0ZW5kcycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUphdmFDb2RlUmVmZXJlbmNlRWxlbWVudDpELkUKKyAgICAgICAgUHNpSmF2YUNvZGVSZWZlcmVuY2VFbGVtZW50OkQKKyAgICAgICAgICBQc2lJZGVudGlmaWVyOkQoJ0QnKQorICAgICAgICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICBQc2lKYXZhVG9rZW46RE9UKCcuJykKKyAgICAgICAgUHNpSWRlbnRpZmllcjpFKCdFJykKKyAgICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuICAnKQorICAgIFBzaU1ldGhvZDpDCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lJZGVudGlmaWVyOkMoJ0MnKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooRCBkKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lQYXJhbWV0ZXI6ZAorICAgICAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICAgIFBzaVR5cGVFbGVtZW50OkQKKyAgICAgICAgICAgIFBzaUphdmFDb2RlUmVmZXJlbmNlRWxlbWVudDpECisgICAgICAgICAgICAgIFBzaUlkZW50aWZpZXI6RCgnRCcpCisgICAgICAgICAgICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgICAgICBQc2lJZGVudGlmaWVyOmQoJ2QnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAgICAgJykKKyAgICAgICAgUHNpRXhwcmVzc2lvblN0YXRlbWVudAorICAgICAgICAgIFBzaU1ldGhvZENhbGxFeHByZXNzaW9uOmQuc3VwZXIoMCkKKyAgICAgICAgICAgIFBzaVJlZmVyZW5jZUV4cHJlc3Npb246ZC5zdXBlcgorICAgICAgICAgICAgICBQc2lSZWZlcmVuY2VFeHByZXNzaW9uOmQKKyAgICAgICAgICAgICAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICAgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgICAgICAgICBQc2lJZGVudGlmaWVyOmQoJ2QnKQorICAgICAgICAgICAgICBQc2lKYXZhVG9rZW46RE9UKCcuJykKKyAgICAgICAgICAgICAgUHNpS2V5d29yZDpzdXBlcignc3VwZXInKQorICAgICAgICAgICAgUHNpRXhwcmVzc2lvbkxpc3QKKyAgICAgICAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgICAgICAgUHNpTGl0ZXJhbEV4cHJlc3Npb246MAorICAgICAgICAgICAgICAgIFBzaUphdmFUb2tlbjpJTlRFR0VSX0xJVEVSQUwoJzAnKQorICAgICAgICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgICAgIFBzaUphdmFUb2tlbjpTRU1JQ09MT04oJzsnKQorICAgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAgJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG4nKQorICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZXhwcmVzc2lvblBhcnNpbmcvU2hpZnRSaWdodC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9leHByZXNzaW9uUGFyc2luZy9TaGlmdFJpZ2h0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzkzNjczYgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZXhwcmVzc2lvblBhcnNpbmcvU2hpZnRSaWdodC5qYXZhCkBAIC0wLDAgKzEsNSBAQAorY2xhc3MgVGVzdCB7CisgICAgYm9vbGVhbiBtZXRob2QoKSB7CisgICAgICAgIHggPj49IDI7CisgICAgfQorfSAKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2V4cHJlc3Npb25QYXJzaW5nL1NoaWZ0UmlnaHQudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9leHByZXNzaW9uUGFyc2luZy9TaGlmdFJpZ2h0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMWRmNmYzCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9leHByZXNzaW9uUGFyc2luZy9TaGlmdFJpZ2h0LnR4dApAQCAtMCwwICsxLDUyIEBACitQc2lKYXZhRmlsZTpTaGlmdFJpZ2h0LmphdmEKKyAgUHNpSW1wb3J0TGlzdAorICAgIDxlbXB0eSBsaXN0PgorICBQc2lDbGFzczpUZXN0CisgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpS2V5d29yZDpjbGFzcygnY2xhc3MnKQorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaUlkZW50aWZpZXI6VGVzdCgnVGVzdCcpCisgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuICAgICcpCisgICAgUHNpTWV0aG9kOm1ldGhvZAorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6Ym9vbGVhbgorICAgICAgICBQc2lLZXl3b3JkOmJvb2xlYW4oJ2Jvb2xlYW4nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOm1ldGhvZCgnbWV0aG9kJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gICAgICAgICcpCisgICAgICAgIFBzaUV4cHJlc3Npb25TdGF0ZW1lbnQKKyAgICAgICAgICBQc2lBc3NpZ25tZW50RXhwcmVzc2lvbjp4ID4+PSAyCisgICAgICAgICAgICBQc2lSZWZlcmVuY2VFeHByZXNzaW9uOngKKyAgICAgICAgICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICAgICAgICBQc2lJZGVudGlmaWVyOngoJ3gnKQorICAgICAgICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICAgICAgICBQc2lKYXZhVG9rZW46R1RHVEVRKCc+Pj0nKQorICAgICAgICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICAgICAgICBQc2lMaXRlcmFsRXhwcmVzc2lvbjoyCisgICAgICAgICAgICAgIFBzaUphdmFUb2tlbjpJTlRFR0VSX0xJVEVSQUwoJzInKQorICAgICAgICAgIFBzaUphdmFUb2tlbjpTRU1JQ09MT04oJzsnKQorICAgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAgICAnKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcbicpCisgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9leHByZXNzaW9uUGFyc2luZy9TdXBlck1ldGhvZENhbGxUeXBlUGFyYW1ldGVyTGlzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9leHByZXNzaW9uUGFyc2luZy9TdXBlck1ldGhvZENhbGxUeXBlUGFyYW1ldGVyTGlzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVjMTVkZDQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2V4cHJlc3Npb25QYXJzaW5nL1N1cGVyTWV0aG9kQ2FsbFR5cGVQYXJhbWV0ZXJMaXN0LmphdmEKQEAgLTAsMCArMSw1IEBACitjbGFzcyBFIHsKKyAgICB2b2lkIGZmZigpIHsKKyAgICAgICAgc3VwZXIoKTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2V4cHJlc3Npb25QYXJzaW5nL1N1cGVyTWV0aG9kQ2FsbFR5cGVQYXJhbWV0ZXJMaXN0LnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZXhwcmVzc2lvblBhcnNpbmcvU3VwZXJNZXRob2RDYWxsVHlwZVBhcmFtZXRlckxpc3QudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdmZGY5NmU5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9leHByZXNzaW9uUGFyc2luZy9TdXBlck1ldGhvZENhbGxUeXBlUGFyYW1ldGVyTGlzdC50eHQKQEAgLTAsMCArMSw1MCBAQAorUHNpSmF2YUZpbGU6U3VwZXJNZXRob2RDYWxsVHlwZVBhcmFtZXRlckxpc3QuamF2YQorICBQc2lJbXBvcnRMaXN0CisgICAgPGVtcHR5IGxpc3Q+CisgIFBzaUNsYXNzOkUKKyAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lLZXl3b3JkOmNsYXNzKCdjbGFzcycpCisgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgUHNpSWRlbnRpZmllcjpFKCdFJykKKyAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgUHNpV2hpdGVTcGFjZSgnXG4gICAgJykKKyAgICBQc2lNZXRob2Q6ZmZmCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6ZmZmKCdmZmYnKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAgICAgICAgJykKKyAgICAgICAgUHNpRXhwcmVzc2lvblN0YXRlbWVudAorICAgICAgICAgIFBzaU1ldGhvZENhbGxFeHByZXNzaW9uOnN1cGVyKCkKKyAgICAgICAgICAgIFBzaVJlZmVyZW5jZUV4cHJlc3Npb246c3VwZXIKKyAgICAgICAgICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICAgICAgICBQc2lLZXl3b3JkOnN1cGVyKCdzdXBlcicpCisgICAgICAgICAgICBQc2lFeHByZXNzaW9uTGlzdAorICAgICAgICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgICAgIFBzaUphdmFUb2tlbjpTRU1JQ09MT04oJzsnKQorICAgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAgICAnKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcbicpCisgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9leHByZXNzaW9uUGFyc2luZy9Yb3IwLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2V4cHJlc3Npb25QYXJzaW5nL1hvcjAuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYzcyZTJiCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9leHByZXNzaW9uUGFyc2luZy9Yb3IwLmphdmEKQEAgLTAsMCArMSw1IEBACitjbGFzcyBGb297CisgIHsKKyAgICByZXR1cm4gYSBeIGIgXiBjOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9leHByZXNzaW9uUGFyc2luZy9Yb3IwLnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZXhwcmVzc2lvblBhcnNpbmcvWG9yMC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmQ5MzAzNgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvZXhwcmVzc2lvblBhcnNpbmcvWG9yMC50eHQKQEAgLTAsMCArMSw1MCBAQAorUHNpSmF2YUZpbGU6WG9yMC5qYXZhCisgIFBzaUltcG9ydExpc3QKKyAgICA8ZW1wdHkgbGlzdD4KKyAgUHNpQ2xhc3M6Rm9vCisgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpS2V5d29yZDpjbGFzcygnY2xhc3MnKQorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaUlkZW50aWZpZXI6Rm9vKCdGb28nKQorICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcbiAgJykKKyAgICBQc2lDbGFzc0luaXRpYWxpemVyCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAgICAnKQorICAgICAgICBQc2lSZXR1cm5TdGF0ZW1lbnQKKyAgICAgICAgICBQc2lLZXl3b3JkOnJldHVybigncmV0dXJuJykKKyAgICAgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgICAgICBQc2lQb2x5YWRpY0V4cHJlc3Npb246IGEgXiBiIF4gYworICAgICAgICAgICAgUHNpUmVmZXJlbmNlRXhwcmVzc2lvbjphCisgICAgICAgICAgICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgICAgICAgUHNpSWRlbnRpZmllcjphKCdhJykKKyAgICAgICAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgICAgICAgUHNpSmF2YVRva2VuOlhPUignXicpCisgICAgICAgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgICAgICAgIFBzaVJlZmVyZW5jZUV4cHJlc3Npb246YgorICAgICAgICAgICAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgICAgICAgIFBzaUlkZW50aWZpZXI6YignYicpCisgICAgICAgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgICAgICAgIFBzaUphdmFUb2tlbjpYT1IoJ14nKQorICAgICAgICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICAgICAgICBQc2lSZWZlcmVuY2VFeHByZXNzaW9uOmMKKyAgICAgICAgICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICAgICAgICBQc2lJZGVudGlmaWVyOmMoJ2MnKQorICAgICAgICAgIFBzaUphdmFUb2tlbjpTRU1JQ09MT04oJzsnKQorICAgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAgJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG4nKQorICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9leHByZXNzaW9uUGFyc2luZy9Yb3IxLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2V4cHJlc3Npb25QYXJzaW5nL1hvcjEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZWQ5M2E5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9leHByZXNzaW9uUGFyc2luZy9Yb3IxLmphdmEKQEAgLTAsMCArMSw1IEBACitjbGFzcyBGb297CisgIHsKKyAgICAgYSBeCisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2V4cHJlc3Npb25QYXJzaW5nL1hvcjEudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9leHByZXNzaW9uUGFyc2luZy9Yb3IxLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYjY4MTEyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9leHByZXNzaW9uUGFyc2luZy9Yb3IxLnR4dApAQCAtMCwwICsxLDM5IEBACitQc2lKYXZhRmlsZTpYb3IxLmphdmEKKyAgUHNpSW1wb3J0TGlzdAorICAgIDxlbXB0eSBsaXN0PgorICBQc2lDbGFzczpGb28KKyAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lLZXl3b3JkOmNsYXNzKCdjbGFzcycpCisgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgUHNpSWRlbnRpZmllcjpGb28oJ0ZvbycpCisgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuICAnKQorICAgIFBzaUNsYXNzSW5pdGlhbGl6ZXIKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICAgICAnKQorICAgICAgICBQc2lFeHByZXNzaW9uU3RhdGVtZW50CisgICAgICAgICAgUHNpQmluYXJ5RXhwcmVzc2lvbjphIF4KKyAgICAgICAgICAgIFBzaVJlZmVyZW5jZUV4cHJlc3Npb246YQorICAgICAgICAgICAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgICAgICAgIFBzaUlkZW50aWZpZXI6YSgnYScpCisgICAgICAgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgICAgICAgIFBzaUphdmFUb2tlbjpYT1IoJ14nKQorICAgICAgICAgICAgUHNpRXJyb3JFbGVtZW50OkV4cHJlc3Npb24gZXhwZWN0ZWQKKyAgICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgICAgUHNpRXJyb3JFbGVtZW50Oic7JyBleHBlY3RlZAorICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICAnKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcbicpCisgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9pbXBvcnRQYXJzaW5nL1N0YXRpY0ltcG9ydC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9pbXBvcnRQYXJzaW5nL1N0YXRpY0ltcG9ydC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc4OGJlYWMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2ltcG9ydFBhcnNpbmcvU3RhdGljSW1wb3J0LmphdmEKQEAgLTAsMCArMSBAQAoraW1wb3J0IHN0YXRpYyBqYXZhLnV0aWwuQXJyYXlzLio7ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9pbXBvcnRQYXJzaW5nL1N0YXRpY0ltcG9ydC50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2ltcG9ydFBhcnNpbmcvU3RhdGljSW1wb3J0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZGMzODYyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9pbXBvcnRQYXJzaW5nL1N0YXRpY0ltcG9ydC50eHQKQEAgLTAsMCArMSwyNCBAQAorUHNpSmF2YUZpbGU6U3RhdGljSW1wb3J0LmphdmEKKyAgUHNpSW1wb3J0TGlzdAorICAgIFBzaUltcG9ydFN0YXRpY1N0YXRlbWVudAorICAgICAgUHNpS2V5d29yZDppbXBvcnQoJ2ltcG9ydCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUtleXdvcmQ6c3RhdGljKCdzdGF0aWMnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lKYXZhQ29kZVJlZmVyZW5jZUVsZW1lbnQ6amF2YS51dGlsLkFycmF5cworICAgICAgICBQc2lKYXZhQ29kZVJlZmVyZW5jZUVsZW1lbnQ6amF2YS51dGlsCisgICAgICAgICAgUHNpSmF2YUNvZGVSZWZlcmVuY2VFbGVtZW50OmphdmEKKyAgICAgICAgICAgIFBzaUlkZW50aWZpZXI6amF2YSgnamF2YScpCisgICAgICAgICAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICAgIFBzaUphdmFUb2tlbjpET1QoJy4nKQorICAgICAgICAgIFBzaUlkZW50aWZpZXI6dXRpbCgndXRpbCcpCisgICAgICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgIFBzaUphdmFUb2tlbjpET1QoJy4nKQorICAgICAgICBQc2lJZGVudGlmaWVyOkFycmF5cygnQXJyYXlzJykKKyAgICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpSmF2YVRva2VuOkRPVCgnLicpCisgICAgICBQc2lKYXZhVG9rZW46QVNURVJJU0soJyonKQorICAgICAgUHNpSmF2YVRva2VuOlNFTUlDT0xPTignOycpClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9pbXBvcnRQYXJzaW5nL1N0YXRpY0ltcG9ydDEuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvaW1wb3J0UGFyc2luZy9TdGF0aWNJbXBvcnQxLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDVhODBhOAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvaW1wb3J0UGFyc2luZy9TdGF0aWNJbXBvcnQxLmphdmEKQEAgLTAsMCArMSBAQAoraW1wb3J0IHN0YXRpYyBqYXZhLnV0aWwuQXJyYXlzLnNvcnQ7ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9pbXBvcnRQYXJzaW5nL1N0YXRpY0ltcG9ydDEudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9pbXBvcnRQYXJzaW5nL1N0YXRpY0ltcG9ydDEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhlNWFlZTgKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2ltcG9ydFBhcnNpbmcvU3RhdGljSW1wb3J0MS50eHQKQEAgLTAsMCArMSwyNyBAQAorUHNpSmF2YUZpbGU6U3RhdGljSW1wb3J0MS5qYXZhCisgIFBzaUltcG9ydExpc3QKKyAgICBQc2lJbXBvcnRTdGF0aWNTdGF0ZW1lbnQKKyAgICAgIFBzaUtleXdvcmQ6aW1wb3J0KCdpbXBvcnQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lLZXl3b3JkOnN0YXRpYygnc3RhdGljJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSW1wb3J0U3RhdGljUmVmZXJlbmNlRWxlbWVudDpqYXZhLnV0aWwuQXJyYXlzLnNvcnQKKyAgICAgICAgUHNpSmF2YUNvZGVSZWZlcmVuY2VFbGVtZW50OmphdmEudXRpbC5BcnJheXMKKyAgICAgICAgICBQc2lKYXZhQ29kZVJlZmVyZW5jZUVsZW1lbnQ6amF2YS51dGlsCisgICAgICAgICAgICBQc2lKYXZhQ29kZVJlZmVyZW5jZUVsZW1lbnQ6amF2YQorICAgICAgICAgICAgICBQc2lJZGVudGlmaWVyOmphdmEoJ2phdmEnKQorICAgICAgICAgICAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgICAgICBQc2lKYXZhVG9rZW46RE9UKCcuJykKKyAgICAgICAgICAgIFBzaUlkZW50aWZpZXI6dXRpbCgndXRpbCcpCisgICAgICAgICAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICAgIFBzaUphdmFUb2tlbjpET1QoJy4nKQorICAgICAgICAgIFBzaUlkZW50aWZpZXI6QXJyYXlzKCdBcnJheXMnKQorICAgICAgICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICBQc2lKYXZhVG9rZW46RE9UKCcuJykKKyAgICAgICAgUHNpSWRlbnRpZmllcjpzb3J0KCdzb3J0JykKKyAgICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpSmF2YVRva2VuOlNFTUlDT0xPTignOycpClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9pbXBvcnRQYXJzaW5nL1VuY2xvc2VkMC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9pbXBvcnRQYXJzaW5nL1VuY2xvc2VkMC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVmY2E5OTYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2ltcG9ydFBhcnNpbmcvVW5jbG9zZWQwLmphdmEKQEAgLTAsMCArMSBAQAoraW1wb3J0ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9pbXBvcnRQYXJzaW5nL1VuY2xvc2VkMC50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2ltcG9ydFBhcnNpbmcvVW5jbG9zZWQwLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZjlhNDI3Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9pbXBvcnRQYXJzaW5nL1VuY2xvc2VkMC50eHQKQEAgLTAsMCArMSw2IEBACitQc2lKYXZhRmlsZTpVbmNsb3NlZDAuamF2YQorICBQc2lJbXBvcnRMaXN0CisgICAgUHNpSW1wb3J0U3RhdGVtZW50CisgICAgICBQc2lLZXl3b3JkOmltcG9ydCgnaW1wb3J0JykKKyAgICAgIFBzaUVycm9yRWxlbWVudDpJZGVudGlmaWVyIGV4cGVjdGVkCisgICAgICAgIDxlbXB0eSBsaXN0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvaW1wb3J0UGFyc2luZy9VbmNsb3NlZDEuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvaW1wb3J0UGFyc2luZy9VbmNsb3NlZDEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNDVlM2QxCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9pbXBvcnRQYXJzaW5nL1VuY2xvc2VkMS5qYXZhCkBAIC0wLDAgKzEgQEAKK2ltcG9ydCBqYXZhLmF3dC4qClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9pbXBvcnRQYXJzaW5nL1VuY2xvc2VkMS50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2ltcG9ydFBhcnNpbmcvVW5jbG9zZWQxLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYTMyNDY2Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9pbXBvcnRQYXJzaW5nL1VuY2xvc2VkMS50eHQKQEAgLTAsMCArMSwxOCBAQAorUHNpSmF2YUZpbGU6VW5jbG9zZWQxLmphdmEKKyAgUHNpSW1wb3J0TGlzdAorICAgIFBzaUltcG9ydFN0YXRlbWVudAorICAgICAgUHNpS2V5d29yZDppbXBvcnQoJ2ltcG9ydCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUphdmFDb2RlUmVmZXJlbmNlRWxlbWVudDpqYXZhLmF3dAorICAgICAgICBQc2lKYXZhQ29kZVJlZmVyZW5jZUVsZW1lbnQ6amF2YQorICAgICAgICAgIFBzaUlkZW50aWZpZXI6amF2YSgnamF2YScpCisgICAgICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgIFBzaUphdmFUb2tlbjpET1QoJy4nKQorICAgICAgICBQc2lJZGVudGlmaWVyOmF3dCgnYXd0JykKKyAgICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpSmF2YVRva2VuOkRPVCgnLicpCisgICAgICBQc2lKYXZhVG9rZW46QVNURVJJU0soJyonKQorICAgICAgUHNpRXJyb3JFbGVtZW50Oic7JyBleHBlY3RlZAorICAgICAgICA8ZW1wdHkgbGlzdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2ltcG9ydFBhcnNpbmcvVW5jbG9zZWQyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2ltcG9ydFBhcnNpbmcvVW5jbG9zZWQyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzNkMjA1NgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvaW1wb3J0UGFyc2luZy9VbmNsb3NlZDIuamF2YQpAQCAtMCwwICsxIEBACitpbXBvcnQgamF2YS5hd3QuClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9pbXBvcnRQYXJzaW5nL1VuY2xvc2VkMi50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2ltcG9ydFBhcnNpbmcvVW5jbG9zZWQyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NTBlYTNlCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9pbXBvcnRQYXJzaW5nL1VuY2xvc2VkMi50eHQKQEAgLTAsMCArMSwxNyBAQAorUHNpSmF2YUZpbGU6VW5jbG9zZWQyLmphdmEKKyAgUHNpSW1wb3J0TGlzdAorICAgIFBzaUltcG9ydFN0YXRlbWVudAorICAgICAgUHNpS2V5d29yZDppbXBvcnQoJ2ltcG9ydCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUphdmFDb2RlUmVmZXJlbmNlRWxlbWVudDpqYXZhLmF3dAorICAgICAgICBQc2lKYXZhQ29kZVJlZmVyZW5jZUVsZW1lbnQ6amF2YQorICAgICAgICAgIFBzaUlkZW50aWZpZXI6amF2YSgnamF2YScpCisgICAgICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgIFBzaUphdmFUb2tlbjpET1QoJy4nKQorICAgICAgICBQc2lJZGVudGlmaWVyOmF3dCgnYXd0JykKKyAgICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpSmF2YVRva2VuOkRPVCgnLicpCisgICAgICBQc2lFcnJvckVsZW1lbnQ6SWRlbnRpZmllciBvciAnKicgZXhwZWN0ZWQKKyAgICAgICAgPGVtcHR5IGxpc3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9qYXZhZG9jUGFyc2luZy9BZGphY2VudDAxLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2phdmFkb2NQYXJzaW5nL0FkamFjZW50MDEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNzBhNmY2Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9qYXZhZG9jUGFyc2luZy9BZGphY2VudDAxLmphdmEKQEAgLTAsMCArMSw1IEBACisvKioKKyAqIG5hbWV7bmFtZX0gYWJje31kZmcKKyAqLworY2xhc3MgWHt9CisgCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2phdmFkb2NQYXJzaW5nL0FkamFjZW50MDEudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9qYXZhZG9jUGFyc2luZy9BZGphY2VudDAxLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNTAyMzIyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9qYXZhZG9jUGFyc2luZy9BZGphY2VudDAxLnR4dApAQCAtMCwwICsxLDMyIEBACitQc2lKYXZhRmlsZTpBZGphY2VudDAxLmphdmEKKyAgUHNpSW1wb3J0TGlzdAorICAgIDxlbXB0eSBsaXN0PgorICBQc2lDbGFzczpYCisgICAgUHNpRG9jQ29tbWVudAorICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfTEVBRElOR19BU1RFUklTS1MoJyonKQorICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfREFUQSgnIG5hbWUnKQorICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfREFUQSgneycpCisgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9EQVRBKCduYW1lJykKKyAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0RBVEEoJ30nKQorICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfREFUQSgnIGFiYycpCisgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9EQVRBKCd7JykKKyAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0RBVEEoJ30nKQorICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfREFUQSgnZGZnJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcbicpCisgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpS2V5d29yZDpjbGFzcygnY2xhc3MnKQorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaUlkZW50aWZpZXI6WCgnWCcpCisgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvamF2YWRvY1BhcnNpbmcvRXhjZXB0aW9uMC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9qYXZhZG9jUGFyc2luZy9FeGNlcHRpb24wLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTVjYWVmNwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvamF2YWRvY1BhcnNpbmcvRXhjZXB0aW9uMC5qYXZhCkBAIC0wLDAgKzEsNiBAQAorY2xhc3MgVGVzdCB7CisgICAgLyoqCisgICAgICogIEB0aHJvd3MgamF2YS5sYW5nLkV4Y2VwdGlvbgorICAgICAqLworICAgICBwdWJsaWMgdm9pZCBmb28oKSB7fQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvamF2YWRvY1BhcnNpbmcvRXhjZXB0aW9uMC50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2phdmFkb2NQYXJzaW5nL0V4Y2VwdGlvbjAudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIzOTM1NjYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2phdmFkb2NQYXJzaW5nL0V4Y2VwdGlvbjAudHh0CkBAIC0wLDAgKzEsNjYgQEAKK1BzaUphdmFGaWxlOkV4Y2VwdGlvbjAuamF2YQorICBQc2lJbXBvcnRMaXN0CisgICAgPGVtcHR5IGxpc3Q+CisgIFBzaUNsYXNzOlRlc3QKKyAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lLZXl3b3JkOmNsYXNzKCdjbGFzcycpCisgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgUHNpSWRlbnRpZmllcjpUZXN0KCdUZXN0JykKKyAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgUHNpV2hpdGVTcGFjZSgnXG4gICAgJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAgICAgJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfTEVBRElOR19BU1RFUklTS1MoJyonKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9EQVRBKCcgICcpCisgICAgICAgIFBzaURvY1RhZzpAdGhyb3dzCisgICAgICAgICAgUHNpRG9jVG9rZW46RE9DX1RBR19OQU1FKCdAdGhyb3dzJykKKyAgICAgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgICAgICBQc2lFbGVtZW50KERPQ19UQUdfVkFMVUVfRUxFTUVOVCkKKyAgICAgICAgICAgIFBzaUVsZW1lbnQoRE9DX1JFRkVSRU5DRV9IT0xERVIpCisgICAgICAgICAgICAgIFBzaUphdmFDb2RlUmVmZXJlbmNlRWxlbWVudDpqYXZhLmxhbmcuRXhjZXB0aW9uCisgICAgICAgICAgICAgICAgUHNpSmF2YUNvZGVSZWZlcmVuY2VFbGVtZW50OmphdmEubGFuZworICAgICAgICAgICAgICAgICAgUHNpSmF2YUNvZGVSZWZlcmVuY2VFbGVtZW50OmphdmEKKyAgICAgICAgICAgICAgICAgICAgUHNpSWRlbnRpZmllcjpqYXZhKCdqYXZhJykKKyAgICAgICAgICAgICAgICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICAgICAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICAgICAgICAgICAgUHNpSmF2YVRva2VuOkRPVCgnLicpCisgICAgICAgICAgICAgICAgICBQc2lJZGVudGlmaWVyOmxhbmcoJ2xhbmcnKQorICAgICAgICAgICAgICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICAgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgICAgICAgICBQc2lKYXZhVG9rZW46RE9UKCcuJykKKyAgICAgICAgICAgICAgICBQc2lJZGVudGlmaWVyOkV4Y2VwdGlvbignRXhjZXB0aW9uJykKKyAgICAgICAgICAgICAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICAgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gICAgICcpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gICAgICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6cHVibGljCisgICAgICAgIFBzaUtleXdvcmQ6cHVibGljKCdwdWJsaWMnKQorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuJykKKyAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2phdmFkb2NQYXJzaW5nL0lERUFERVZfNDE0MDMuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvamF2YWRvY1BhcnNpbmcvSURFQURFVl80MTQwMy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNmMTU3NjMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2phdmFkb2NQYXJzaW5nL0lERUFERVZfNDE0MDMuamF2YQpAQCAtMCwwICsxLDggQEAKK3B1YmxpYyBjbGFzcyBCYXIgeworLy8gQ29tbWVudAorLyoqCitqYXZhZG9jCisqLworcHVibGljIGNsYXNzIEZvbyB7Cit9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2phdmFkb2NQYXJzaW5nL0lERUFERVZfNDE0MDMudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9qYXZhZG9jUGFyc2luZy9JREVBREVWXzQxNDAzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xODZlZTExCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9qYXZhZG9jUGFyc2luZy9JREVBREVWXzQxNDAzLnR4dApAQCAtMCwwICsxLDQ3IEBACitQc2lKYXZhRmlsZTpJREVBREVWXzQxNDAzLmphdmEKKyAgUHNpSW1wb3J0TGlzdAorICAgIDxlbXB0eSBsaXN0PgorICBQc2lDbGFzczpCYXIKKyAgICBQc2lNb2RpZmllckxpc3Q6cHVibGljCisgICAgICBQc2lLZXl3b3JkOnB1YmxpYygncHVibGljJykKKyAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICBQc2lLZXl3b3JkOmNsYXNzKCdjbGFzcycpCisgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgUHNpSWRlbnRpZmllcjpCYXIoJ0JhcicpCisgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuJykKKyAgICBQc2lDb21tZW50KEVORF9PRl9MSU5FX0NPTU1FTlQpKCcvLyBDb21tZW50JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcbicpCisgICAgUHNpQ2xhc3M6Rm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lXaGl0ZVNwYWNlKCdcbicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0RBVEEoJ2phdmFkb2MnKQorICAgICAgICBQc2lXaGl0ZVNwYWNlKCdcbicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4nKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OnB1YmxpYworICAgICAgICBQc2lLZXl3b3JkOnB1YmxpYygncHVibGljJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpS2V5d29yZDpjbGFzcygnY2xhc3MnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOkZvbygnRm9vJykKKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4nKQorICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG4nKQorICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvamF2YWRvY1BhcnNpbmcvSW5saW5lVGFnMC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9qYXZhZG9jUGFyc2luZy9JbmxpbmVUYWcwLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTVhOTBiMgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvamF2YWRvY1BhcnNpbmcvSW5saW5lVGFnMC5qYXZhCkBAIC0wLDAgKzEsNCBAQAorLyoqCisgKiBUZXh0IFRleHQge0BsaW5rIHNvbWUgdGFnfQorICovCitjbGFzcyBDe30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2phdmFkb2NQYXJzaW5nL0lubGluZVRhZzAudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9qYXZhZG9jUGFyc2luZy9JbmxpbmVUYWcwLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYjFjOTBiCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9qYXZhZG9jUGFyc2luZy9JbmxpbmVUYWcwLnR4dApAQCAtMCwwICsxLDM3IEBACitQc2lKYXZhRmlsZTpJbmxpbmVUYWcwLmphdmEKKyAgUHNpSW1wb3J0TGlzdAorICAgIDxlbXB0eSBsaXN0PgorICBQc2lDbGFzczpDCisgICAgUHNpRG9jQ29tbWVudAorICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfTEVBRElOR19BU1RFUklTS1MoJyonKQorICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfREFUQSgnIFRleHQgVGV4dCAnKQorICAgICAgUHNpSW5saW5lRG9jVGFnOkBsaW5rCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19JTkxJTkVfVEFHX1NUQVJUKCd7JykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX1RBR19OQU1FKCdAbGluaycpCisgICAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgICBQc2lFbGVtZW50KERPQ19SRUZFUkVOQ0VfSE9MREVSKQorICAgICAgICAgIFBzaUphdmFDb2RlUmVmZXJlbmNlRWxlbWVudDpzb21lCisgICAgICAgICAgICBQc2lJZGVudGlmaWVyOnNvbWUoJ3NvbWUnKQorICAgICAgICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0RBVEEoJ3RhZycpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19JTkxJTkVfVEFHX0VORCgnfScpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgUHNpV2hpdGVTcGFjZSgnXG4nKQorICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaUtleXdvcmQ6Y2xhc3MoJ2NsYXNzJykKKyAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICBQc2lJZGVudGlmaWVyOkMoJ0MnKQorICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2phdmFkb2NQYXJzaW5nL0lubGluZVRhZzEuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvamF2YWRvY1BhcnNpbmcvSW5saW5lVGFnMS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJiNDhmN2YKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2phdmFkb2NQYXJzaW5nL0lubGluZVRhZzEuamF2YQpAQCAtMCwwICsxLDUgQEAKKy8qKgorICogVGV4dCBUZXh0IHtAbGluayAjc29tZWZ1bmMoU3RyaW5nLAorICogU3RyaW5nLCBTdHJpbmcpfQorICovCitjbGFzcyBDe30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2phdmFkb2NQYXJzaW5nL0lubGluZVRhZzEudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9qYXZhZG9jUGFyc2luZy9JbmxpbmVUYWcxLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOTc1ZDZhCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9qYXZhZG9jUGFyc2luZy9JbmxpbmVUYWcxLnR4dApAQCAtMCwwICsxLDYwIEBACitQc2lKYXZhRmlsZTpJbmxpbmVUYWcxLmphdmEKKyAgUHNpSW1wb3J0TGlzdAorICAgIDxlbXB0eSBsaXN0PgorICBQc2lDbGFzczpDCisgICAgUHNpRG9jQ29tbWVudAorICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfTEVBRElOR19BU1RFUklTS1MoJyonKQorICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfREFUQSgnIFRleHQgVGV4dCAnKQorICAgICAgUHNpSW5saW5lRG9jVGFnOkBsaW5rCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19JTkxJTkVfVEFHX1NUQVJUKCd7JykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX1RBR19OQU1FKCdAbGluaycpCisgICAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgICBQc2lFbGVtZW50KERPQ19NRVRIT0RfT1JfRklFTERfUkVGKQorICAgICAgICAgIFBzaURvY1Rva2VuOkRPQ19UQUdfVkFMVUVfU0hBUlBfVE9LRU4oJyMnKQorICAgICAgICAgIFBzaURvY1Rva2VuOkRPQ19UQUdfVkFMVUVfVE9LRU4oJ3NvbWVmdW5jJykKKyAgICAgICAgICBQc2lEb2NUb2tlbjpET0NfVEFHX1ZBTFVFX0xQQVJFTignKCcpCisgICAgICAgICAgUHNpRWxlbWVudChET0NfVEFHX1ZBTFVFX0VMRU1FTlQpCisgICAgICAgICAgICBQc2lFbGVtZW50KERPQ19UWVBFX0hPTERFUikKKyAgICAgICAgICAgICAgUHNpVHlwZUVsZW1lbnQ6U3RyaW5nCisgICAgICAgICAgICAgICAgUHNpSmF2YUNvZGVSZWZlcmVuY2VFbGVtZW50OlN0cmluZworICAgICAgICAgICAgICAgICAgUHNpSWRlbnRpZmllcjpTdHJpbmcoJ1N0cmluZycpCisgICAgICAgICAgICAgICAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICAgICAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICAgICAgUHNpRG9jVG9rZW46RE9DX1RBR19WQUxVRV9DT01NQSgnLCcpCisgICAgICAgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfTEVBRElOR19BU1RFUklTS1MoJyonKQorICAgICAgICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICAgICAgICBQc2lFbGVtZW50KERPQ19UWVBFX0hPTERFUikKKyAgICAgICAgICAgICAgUHNpVHlwZUVsZW1lbnQ6U3RyaW5nCisgICAgICAgICAgICAgICAgUHNpSmF2YUNvZGVSZWZlcmVuY2VFbGVtZW50OlN0cmluZworICAgICAgICAgICAgICAgICAgUHNpSWRlbnRpZmllcjpTdHJpbmcoJ1N0cmluZycpCisgICAgICAgICAgICAgICAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICAgICAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICAgICAgUHNpRG9jVG9rZW46RE9DX1RBR19WQUxVRV9DT01NQSgnLCcpCisgICAgICAgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgICAgICAgIFBzaUVsZW1lbnQoRE9DX1RZUEVfSE9MREVSKQorICAgICAgICAgICAgICBQc2lUeXBlRWxlbWVudDpTdHJpbmcKKyAgICAgICAgICAgICAgICBQc2lKYXZhQ29kZVJlZmVyZW5jZUVsZW1lbnQ6U3RyaW5nCisgICAgICAgICAgICAgICAgICBQc2lJZGVudGlmaWVyOlN0cmluZygnU3RyaW5nJykKKyAgICAgICAgICAgICAgICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgICAgICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgICAgUHNpRG9jVG9rZW46RE9DX1RBR19WQUxVRV9SUEFSRU4oJyknKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfSU5MSU5FX1RBR19FTkQoJ30nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuJykKKyAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lLZXl3b3JkOmNsYXNzKCdjbGFzcycpCisgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgUHNpSWRlbnRpZmllcjpDKCdDJykKKyAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9qYXZhZG9jUGFyc2luZy9JbmxpbmVUYWcyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2phdmFkb2NQYXJzaW5nL0lubGluZVRhZzIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NzE1ZWE5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9qYXZhZG9jUGFyc2luZy9JbmxpbmVUYWcyLmphdmEKQEAgLTAsMCArMSw0IEBACisvKioKKyAqIFRleHQgVGV4dCB7QGxpbmsgI3NvbWVmdW5jKFN0cmluZywgU3RyaW5nLCBTdHJpbmcpfQorICovCitjbGFzcyBDe30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2phdmFkb2NQYXJzaW5nL0lubGluZVRhZzIudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9qYXZhZG9jUGFyc2luZy9JbmxpbmVUYWcyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MTY1Yjg5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9qYXZhZG9jUGFyc2luZy9JbmxpbmVUYWcyLnR4dApAQCAtMCwwICsxLDU4IEBACitQc2lKYXZhRmlsZTpJbmxpbmVUYWcyLmphdmEKKyAgUHNpSW1wb3J0TGlzdAorICAgIDxlbXB0eSBsaXN0PgorICBQc2lDbGFzczpDCisgICAgUHNpRG9jQ29tbWVudAorICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfTEVBRElOR19BU1RFUklTS1MoJyonKQorICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfREFUQSgnIFRleHQgVGV4dCAnKQorICAgICAgUHNpSW5saW5lRG9jVGFnOkBsaW5rCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19JTkxJTkVfVEFHX1NUQVJUKCd7JykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX1RBR19OQU1FKCdAbGluaycpCisgICAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgICBQc2lFbGVtZW50KERPQ19NRVRIT0RfT1JfRklFTERfUkVGKQorICAgICAgICAgIFBzaURvY1Rva2VuOkRPQ19UQUdfVkFMVUVfU0hBUlBfVE9LRU4oJyMnKQorICAgICAgICAgIFBzaURvY1Rva2VuOkRPQ19UQUdfVkFMVUVfVE9LRU4oJ3NvbWVmdW5jJykKKyAgICAgICAgICBQc2lEb2NUb2tlbjpET0NfVEFHX1ZBTFVFX0xQQVJFTignKCcpCisgICAgICAgICAgUHNpRWxlbWVudChET0NfVEFHX1ZBTFVFX0VMRU1FTlQpCisgICAgICAgICAgICBQc2lFbGVtZW50KERPQ19UWVBFX0hPTERFUikKKyAgICAgICAgICAgICAgUHNpVHlwZUVsZW1lbnQ6U3RyaW5nCisgICAgICAgICAgICAgICAgUHNpSmF2YUNvZGVSZWZlcmVuY2VFbGVtZW50OlN0cmluZworICAgICAgICAgICAgICAgICAgUHNpSWRlbnRpZmllcjpTdHJpbmcoJ1N0cmluZycpCisgICAgICAgICAgICAgICAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICAgICAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICAgICAgUHNpRG9jVG9rZW46RE9DX1RBR19WQUxVRV9DT01NQSgnLCcpCisgICAgICAgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgICAgICAgIFBzaUVsZW1lbnQoRE9DX1RZUEVfSE9MREVSKQorICAgICAgICAgICAgICBQc2lUeXBlRWxlbWVudDpTdHJpbmcKKyAgICAgICAgICAgICAgICBQc2lKYXZhQ29kZVJlZmVyZW5jZUVsZW1lbnQ6U3RyaW5nCisgICAgICAgICAgICAgICAgICBQc2lJZGVudGlmaWVyOlN0cmluZygnU3RyaW5nJykKKyAgICAgICAgICAgICAgICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgICAgICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgICAgICBQc2lEb2NUb2tlbjpET0NfVEFHX1ZBTFVFX0NPTU1BKCcsJykKKyAgICAgICAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgICAgICAgUHNpRWxlbWVudChET0NfVFlQRV9IT0xERVIpCisgICAgICAgICAgICAgIFBzaVR5cGVFbGVtZW50OlN0cmluZworICAgICAgICAgICAgICAgIFBzaUphdmFDb2RlUmVmZXJlbmNlRWxlbWVudDpTdHJpbmcKKyAgICAgICAgICAgICAgICAgIFBzaUlkZW50aWZpZXI6U3RyaW5nKCdTdHJpbmcnKQorICAgICAgICAgICAgICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICAgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgICBQc2lEb2NUb2tlbjpET0NfVEFHX1ZBTFVFX1JQQVJFTignKScpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19JTkxJTkVfVEFHX0VORCgnfScpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgUHNpV2hpdGVTcGFjZSgnXG4nKQorICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaUtleXdvcmQ6Y2xhc3MoJ2NsYXNzJykKKyAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICBQc2lJZGVudGlmaWVyOkMoJ0MnKQorICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2phdmFkb2NQYXJzaW5nL0lubGluZVRhZzMuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvamF2YWRvY1BhcnNpbmcvSW5saW5lVGFnMy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIwM2JlZjAKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2phdmFkb2NQYXJzaW5nL0lubGluZVRhZzMuamF2YQpAQCAtMCwwICsxLDQgQEAKKy8qKgorICogVGV4dCBUZXh0IHtAbGluayAjc29tZWZ1bmMoU3RyaW5nLCBTdHJpbmcsIFN0cmluZykge317e3tJbm5lciBicmFjZXN9fSB9fQorICovCitjbGFzcyBDe30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvamF2YWRvY1BhcnNpbmcvSW5saW5lVGFnMy50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2phdmFkb2NQYXJzaW5nL0lubGluZVRhZzMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZiNTkxZjQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2phdmFkb2NQYXJzaW5nL0lubGluZVRhZzMudHh0CkBAIC0wLDAgKzEsNjkgQEAKK1BzaUphdmFGaWxlOklubGluZVRhZzMuamF2YQorICBQc2lJbXBvcnRMaXN0CisgICAgPGVtcHR5IGxpc3Q+CisgIFBzaUNsYXNzOkMKKyAgICBQc2lEb2NDb21tZW50CisgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9MRUFESU5HX0FTVEVSSVNLUygnKicpCisgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9EQVRBKCcgVGV4dCBUZXh0ICcpCisgICAgICBQc2lJbmxpbmVEb2NUYWc6QGxpbmsKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0lOTElORV9UQUdfU1RBUlQoJ3snKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfVEFHX05BTUUoJ0BsaW5rJykKKyAgICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICAgIFBzaUVsZW1lbnQoRE9DX01FVEhPRF9PUl9GSUVMRF9SRUYpCisgICAgICAgICAgUHNpRG9jVG9rZW46RE9DX1RBR19WQUxVRV9TSEFSUF9UT0tFTignIycpCisgICAgICAgICAgUHNpRG9jVG9rZW46RE9DX1RBR19WQUxVRV9UT0tFTignc29tZWZ1bmMnKQorICAgICAgICAgIFBzaURvY1Rva2VuOkRPQ19UQUdfVkFMVUVfTFBBUkVOKCcoJykKKyAgICAgICAgICBQc2lFbGVtZW50KERPQ19UQUdfVkFMVUVfRUxFTUVOVCkKKyAgICAgICAgICAgIFBzaUVsZW1lbnQoRE9DX1RZUEVfSE9MREVSKQorICAgICAgICAgICAgICBQc2lUeXBlRWxlbWVudDpTdHJpbmcKKyAgICAgICAgICAgICAgICBQc2lKYXZhQ29kZVJlZmVyZW5jZUVsZW1lbnQ6U3RyaW5nCisgICAgICAgICAgICAgICAgICBQc2lJZGVudGlmaWVyOlN0cmluZygnU3RyaW5nJykKKyAgICAgICAgICAgICAgICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgICAgICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgICAgICBQc2lEb2NUb2tlbjpET0NfVEFHX1ZBTFVFX0NPTU1BKCcsJykKKyAgICAgICAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgICAgICAgUHNpRWxlbWVudChET0NfVFlQRV9IT0xERVIpCisgICAgICAgICAgICAgIFBzaVR5cGVFbGVtZW50OlN0cmluZworICAgICAgICAgICAgICAgIFBzaUphdmFDb2RlUmVmZXJlbmNlRWxlbWVudDpTdHJpbmcKKyAgICAgICAgICAgICAgICAgIFBzaUlkZW50aWZpZXI6U3RyaW5nKCdTdHJpbmcnKQorICAgICAgICAgICAgICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICAgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgICAgIFBzaURvY1Rva2VuOkRPQ19UQUdfVkFMVUVfQ09NTUEoJywnKQorICAgICAgICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICAgICAgICBQc2lFbGVtZW50KERPQ19UWVBFX0hPTERFUikKKyAgICAgICAgICAgICAgUHNpVHlwZUVsZW1lbnQ6U3RyaW5nCisgICAgICAgICAgICAgICAgUHNpSmF2YUNvZGVSZWZlcmVuY2VFbGVtZW50OlN0cmluZworICAgICAgICAgICAgICAgICAgUHNpSWRlbnRpZmllcjpTdHJpbmcoJ1N0cmluZycpCisgICAgICAgICAgICAgICAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICAgICAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICAgIFBzaURvY1Rva2VuOkRPQ19UQUdfVkFMVUVfUlBBUkVOKCcpJykKKyAgICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0RBVEEoJ3snKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9EQVRBKCd9JykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfREFUQSgneycpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0RBVEEoJ3snKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9EQVRBKCd7JykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfREFUQSgnSW5uZXIgYnJhY2VzJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfREFUQSgnfScpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0RBVEEoJ30nKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9EQVRBKCcgJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfREFUQSgnfScpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19JTkxJTkVfVEFHX0VORCgnfScpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgUHNpV2hpdGVTcGFjZSgnXG4nKQorICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaUtleXdvcmQ6Y2xhc3MoJ2NsYXNzJykKKyAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICBQc2lJZGVudGlmaWVyOkMoJ0MnKQorICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2phdmFkb2NQYXJzaW5nL0phdmFkb2MwLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2phdmFkb2NQYXJzaW5nL0phdmFkb2MwLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTRkMDNmYQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvamF2YWRvY1BhcnNpbmcvSmF2YWRvYzAuamF2YQpAQCAtMCwwICsxLDQgQEAKKy8qKgorICogSmF2YWRvYworICovCitjbGFzcyBDe30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2phdmFkb2NQYXJzaW5nL0phdmFkb2MwLnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvamF2YWRvY1BhcnNpbmcvSmF2YWRvYzAudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQxYmNkZjAKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2phdmFkb2NQYXJzaW5nL0phdmFkb2MwLnR4dApAQCAtMCwwICsxLDI1IEBACitQc2lKYXZhRmlsZTpKYXZhZG9jMC5qYXZhCisgIFBzaUltcG9ydExpc3QKKyAgICA8ZW1wdHkgbGlzdD4KKyAgUHNpQ2xhc3M6QworICAgIFBzaURvY0NvbW1lbnQKKyAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0xFQURJTkdfQVNURVJJU0tTKCcqJykKKyAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0RBVEEoJyBKYXZhZG9jJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcbicpCisgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpS2V5d29yZDpjbGFzcygnY2xhc3MnKQorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaUlkZW50aWZpZXI6QygnQycpCisgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9qYXZhZG9jUGFyc2luZy9KYXZhZG9jMS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9qYXZhZG9jUGFyc2luZy9KYXZhZG9jMS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcwNjhjZGUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2phdmFkb2NQYXJzaW5nL0phdmFkb2MxLmphdmEKQEAgLTAsMCArMSBAQAorLyoqLwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvamF2YWRvY1BhcnNpbmcvSmF2YWRvYzEudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9qYXZhZG9jUGFyc2luZy9KYXZhZG9jMS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2M2YjAzOQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvamF2YWRvY1BhcnNpbmcvSmF2YWRvYzEudHh0CkBAIC0wLDAgKzEsNCBAQAorUHNpSmF2YUZpbGU6SmF2YWRvYzEuamF2YQorICBQc2lDb21tZW50KENfU1RZTEVfQ09NTUVOVCkoJy8qKi8nKQorICBQc2lJbXBvcnRMaXN0CisgICAgPGVtcHR5IGxpc3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9qYXZhZG9jUGFyc2luZy9MaW5rUGxhaW5UYWcwLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2phdmFkb2NQYXJzaW5nL0xpbmtQbGFpblRhZzAuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OGRjZmJlCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9qYXZhZG9jUGFyc2luZy9MaW5rUGxhaW5UYWcwLmphdmEKQEAgLTAsMCArMSw0IEBACisvKioKKyAqIHtAbGlua3BsYWluIGphdmEubGFuZy5TdHJpbmcgdGV4dH0KKyAqLworY2xhc3MgQ3t9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9qYXZhZG9jUGFyc2luZy9MaW5rUGxhaW5UYWcwLnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvamF2YWRvY1BhcnNpbmcvTGlua1BsYWluVGFnMC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTQyMWQ3OAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvamF2YWRvY1BhcnNpbmcvTGlua1BsYWluVGFnMC50eHQKQEAgLTAsMCArMSw0NyBAQAorUHNpSmF2YUZpbGU6TGlua1BsYWluVGFnMC5qYXZhCisgIFBzaUltcG9ydExpc3QKKyAgICA8ZW1wdHkgbGlzdD4KKyAgUHNpQ2xhc3M6QworICAgIFBzaURvY0NvbW1lbnQKKyAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0xFQURJTkdfQVNURVJJU0tTKCcqJykKKyAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0RBVEEoJyAnKQorICAgICAgUHNpSW5saW5lRG9jVGFnOkBsaW5rcGxhaW4KKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0lOTElORV9UQUdfU1RBUlQoJ3snKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfVEFHX05BTUUoJ0BsaW5rcGxhaW4nKQorICAgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgICAgUHNpRWxlbWVudChET0NfUkVGRVJFTkNFX0hPTERFUikKKyAgICAgICAgICBQc2lKYXZhQ29kZVJlZmVyZW5jZUVsZW1lbnQ6amF2YS5sYW5nLlN0cmluZworICAgICAgICAgICAgUHNpSmF2YUNvZGVSZWZlcmVuY2VFbGVtZW50OmphdmEubGFuZworICAgICAgICAgICAgICBQc2lKYXZhQ29kZVJlZmVyZW5jZUVsZW1lbnQ6amF2YQorICAgICAgICAgICAgICAgIFBzaUlkZW50aWZpZXI6amF2YSgnamF2YScpCisgICAgICAgICAgICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgICAgICAgIFBzaUphdmFUb2tlbjpET1QoJy4nKQorICAgICAgICAgICAgICBQc2lJZGVudGlmaWVyOmxhbmcoJ2xhbmcnKQorICAgICAgICAgICAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgICAgICBQc2lKYXZhVG9rZW46RE9UKCcuJykKKyAgICAgICAgICAgIFBzaUlkZW50aWZpZXI6U3RyaW5nKCdTdHJpbmcnKQorICAgICAgICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0RBVEEoJ3RleHQnKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfSU5MSU5FX1RBR19FTkQoJ30nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuJykKKyAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lLZXl3b3JkOmNsYXNzKCdjbGFzcycpCisgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgUHNpSWRlbnRpZmllcjpDKCdDJykKKyAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9qYXZhZG9jUGFyc2luZy9MaW5rUGxhaW5UYWcxLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2phdmFkb2NQYXJzaW5nL0xpbmtQbGFpblRhZzEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOTU2NDk0Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9qYXZhZG9jUGFyc2luZy9MaW5rUGxhaW5UYWcxLmphdmEKQEAgLTAsMCArMSw0IEBACisvKioKKyAqIHtAbGlua3BsYWluIGphdmEubGFuZy5TdHJpbmcjZXF1YWxzKGphdmEubGFuZy5PYmplY3QpIHRleHR9CisgKi8KK2NsYXNzIEN7fQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvamF2YWRvY1BhcnNpbmcvTGlua1BsYWluVGFnMS50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2phdmFkb2NQYXJzaW5nL0xpbmtQbGFpblRhZzEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ3ZjZhMjIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2phdmFkb2NQYXJzaW5nL0xpbmtQbGFpblRhZzEudHh0CkBAIC0wLDAgKzEsNjkgQEAKK1BzaUphdmFGaWxlOkxpbmtQbGFpblRhZzEuamF2YQorICBQc2lJbXBvcnRMaXN0CisgICAgPGVtcHR5IGxpc3Q+CisgIFBzaUNsYXNzOkMKKyAgICBQc2lEb2NDb21tZW50CisgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9MRUFESU5HX0FTVEVSSVNLUygnKicpCisgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9EQVRBKCcgJykKKyAgICAgIFBzaUlubGluZURvY1RhZzpAbGlua3BsYWluCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19JTkxJTkVfVEFHX1NUQVJUKCd7JykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX1RBR19OQU1FKCdAbGlua3BsYWluJykKKyAgICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICAgIFBzaUVsZW1lbnQoRE9DX01FVEhPRF9PUl9GSUVMRF9SRUYpCisgICAgICAgICAgUHNpRWxlbWVudChET0NfUkVGRVJFTkNFX0hPTERFUikKKyAgICAgICAgICAgIFBzaUphdmFDb2RlUmVmZXJlbmNlRWxlbWVudDpqYXZhLmxhbmcuU3RyaW5nCisgICAgICAgICAgICAgIFBzaUphdmFDb2RlUmVmZXJlbmNlRWxlbWVudDpqYXZhLmxhbmcKKyAgICAgICAgICAgICAgICBQc2lKYXZhQ29kZVJlZmVyZW5jZUVsZW1lbnQ6amF2YQorICAgICAgICAgICAgICAgICAgUHNpSWRlbnRpZmllcjpqYXZhKCdqYXZhJykKKyAgICAgICAgICAgICAgICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgICAgICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgICAgICAgICAgUHNpSmF2YVRva2VuOkRPVCgnLicpCisgICAgICAgICAgICAgICAgUHNpSWRlbnRpZmllcjpsYW5nKCdsYW5nJykKKyAgICAgICAgICAgICAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICAgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgICAgICAgUHNpSmF2YVRva2VuOkRPVCgnLicpCisgICAgICAgICAgICAgIFBzaUlkZW50aWZpZXI6U3RyaW5nKCdTdHJpbmcnKQorICAgICAgICAgICAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgICAgUHNpRG9jVG9rZW46RE9DX1RBR19WQUxVRV9TSEFSUF9UT0tFTignIycpCisgICAgICAgICAgUHNpRG9jVG9rZW46RE9DX1RBR19WQUxVRV9UT0tFTignZXF1YWxzJykKKyAgICAgICAgICBQc2lEb2NUb2tlbjpET0NfVEFHX1ZBTFVFX0xQQVJFTignKCcpCisgICAgICAgICAgUHNpRWxlbWVudChET0NfVEFHX1ZBTFVFX0VMRU1FTlQpCisgICAgICAgICAgICBQc2lFbGVtZW50KERPQ19UWVBFX0hPTERFUikKKyAgICAgICAgICAgICAgUHNpVHlwZUVsZW1lbnQ6amF2YS5sYW5nLk9iamVjdAorICAgICAgICAgICAgICAgIFBzaUphdmFDb2RlUmVmZXJlbmNlRWxlbWVudDpqYXZhLmxhbmcuT2JqZWN0CisgICAgICAgICAgICAgICAgICBQc2lKYXZhQ29kZVJlZmVyZW5jZUVsZW1lbnQ6amF2YS5sYW5nCisgICAgICAgICAgICAgICAgICAgIFBzaUphdmFDb2RlUmVmZXJlbmNlRWxlbWVudDpqYXZhCisgICAgICAgICAgICAgICAgICAgICAgUHNpSWRlbnRpZmllcjpqYXZhKCdqYXZhJykKKyAgICAgICAgICAgICAgICAgICAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICAgICAgICAgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgUHNpSmF2YVRva2VuOkRPVCgnLicpCisgICAgICAgICAgICAgICAgICAgIFBzaUlkZW50aWZpZXI6bGFuZygnbGFuZycpCisgICAgICAgICAgICAgICAgICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgICAgICAgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgICAgICAgICAgIFBzaUphdmFUb2tlbjpET1QoJy4nKQorICAgICAgICAgICAgICAgICAgUHNpSWRlbnRpZmllcjpPYmplY3QoJ09iamVjdCcpCisgICAgICAgICAgICAgICAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICAgICAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICAgIFBzaURvY1Rva2VuOkRPQ19UQUdfVkFMVUVfUlBBUkVOKCcpJykKKyAgICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0RBVEEoJ3RleHQnKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfSU5MSU5FX1RBR19FTkQoJ30nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuJykKKyAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lLZXl3b3JkOmNsYXNzKCdjbGFzcycpCisgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgUHNpSWRlbnRpZmllcjpDKCdDJykKKyAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9qYXZhZG9jUGFyc2luZy9MaW5rUGxhaW5UYWcyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2phdmFkb2NQYXJzaW5nL0xpbmtQbGFpblRhZzIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NTJlYTQ2Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9qYXZhZG9jUGFyc2luZy9MaW5rUGxhaW5UYWcyLmphdmEKQEAgLTAsMCArMSw0IEBACisvKioKKyAqIEBsaW5rcGxhaW4gamF2YS5sYW5nLlN0cmluZyNlcXVhbHMoamF2YS5sYW5nLk9iamVjdCkgdGV4dAorICovCitjbGFzcyBDe30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2phdmFkb2NQYXJzaW5nL0xpbmtQbGFpblRhZzIudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9qYXZhZG9jUGFyc2luZy9MaW5rUGxhaW5UYWcyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OWUyZWMzCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9qYXZhZG9jUGFyc2luZy9MaW5rUGxhaW5UYWcyLnR4dApAQCAtMCwwICsxLDM3IEBACitQc2lKYXZhRmlsZTpMaW5rUGxhaW5UYWcyLmphdmEKKyAgUHNpSW1wb3J0TGlzdAorICAgIDxlbXB0eSBsaXN0PgorICBQc2lDbGFzczpDCisgICAgUHNpRG9jQ29tbWVudAorICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfTEVBRElOR19BU1RFUklTS1MoJyonKQorICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfREFUQSgnICcpCisgICAgICBQc2lEb2NUYWc6QGxpbmtwbGFpbgorICAgICAgICBQc2lEb2NUb2tlbjpET0NfVEFHX05BTUUoJ0BsaW5rcGxhaW4nKQorICAgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgICAgUHNpRWxlbWVudChET0NfVEFHX1ZBTFVFX0VMRU1FTlQpCisgICAgICAgICAgUHNpRG9jVG9rZW46RE9DX1RBR19WQUxVRV9UT0tFTignamF2YS5sYW5nLlN0cmluZycpCisgICAgICAgICAgUHNpRG9jVG9rZW46RE9DX1RBR19WQUxVRV9TSEFSUF9UT0tFTignIycpCisgICAgICAgICAgUHNpRG9jVG9rZW46RE9DX1RBR19WQUxVRV9UT0tFTignZXF1YWxzJykKKyAgICAgICAgICBQc2lEb2NUb2tlbjpET0NfVEFHX1ZBTFVFX0xQQVJFTignKCcpCisgICAgICAgICAgUHNpRG9jVG9rZW46RE9DX1RBR19WQUxVRV9UT0tFTignamF2YS5sYW5nLk9iamVjdCcpCisgICAgICAgICAgUHNpRG9jVG9rZW46RE9DX1RBR19WQUxVRV9SUEFSRU4oJyknKQorICAgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfREFUQSgndGV4dCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgUHNpV2hpdGVTcGFjZSgnXG4nKQorICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaUtleXdvcmQ6Y2xhc3MoJ2NsYXNzJykKKyAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICBQc2lJZGVudGlmaWVyOkMoJ0MnKQorICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvamF2YWRvY1BhcnNpbmcvTGlua1RhZzAuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvamF2YWRvY1BhcnNpbmcvTGlua1RhZzAuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ODM3ODM2ZgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvamF2YWRvY1BhcnNpbmcvTGlua1RhZzAuamF2YQpAQCAtMCwwICsxLDQgQEAKKy8qKgorICoge0BsaW5rIGphdmEubGFuZy5TdHJpbmcgdGV4dH0KKyAqLworY2xhc3MgQ3t9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9qYXZhZG9jUGFyc2luZy9MaW5rVGFnMC50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2phdmFkb2NQYXJzaW5nL0xpbmtUYWcwLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NjZjZjQ0Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9qYXZhZG9jUGFyc2luZy9MaW5rVGFnMC50eHQKQEAgLTAsMCArMSw0NyBAQAorUHNpSmF2YUZpbGU6TGlua1RhZzAuamF2YQorICBQc2lJbXBvcnRMaXN0CisgICAgPGVtcHR5IGxpc3Q+CisgIFBzaUNsYXNzOkMKKyAgICBQc2lEb2NDb21tZW50CisgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9MRUFESU5HX0FTVEVSSVNLUygnKicpCisgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9EQVRBKCcgJykKKyAgICAgIFBzaUlubGluZURvY1RhZzpAbGluaworICAgICAgICBQc2lEb2NUb2tlbjpET0NfSU5MSU5FX1RBR19TVEFSVCgneycpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19UQUdfTkFNRSgnQGxpbmsnKQorICAgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgICAgUHNpRWxlbWVudChET0NfUkVGRVJFTkNFX0hPTERFUikKKyAgICAgICAgICBQc2lKYXZhQ29kZVJlZmVyZW5jZUVsZW1lbnQ6amF2YS5sYW5nLlN0cmluZworICAgICAgICAgICAgUHNpSmF2YUNvZGVSZWZlcmVuY2VFbGVtZW50OmphdmEubGFuZworICAgICAgICAgICAgICBQc2lKYXZhQ29kZVJlZmVyZW5jZUVsZW1lbnQ6amF2YQorICAgICAgICAgICAgICAgIFBzaUlkZW50aWZpZXI6amF2YSgnamF2YScpCisgICAgICAgICAgICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgICAgICAgIFBzaUphdmFUb2tlbjpET1QoJy4nKQorICAgICAgICAgICAgICBQc2lJZGVudGlmaWVyOmxhbmcoJ2xhbmcnKQorICAgICAgICAgICAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgICAgICBQc2lKYXZhVG9rZW46RE9UKCcuJykKKyAgICAgICAgICAgIFBzaUlkZW50aWZpZXI6U3RyaW5nKCdTdHJpbmcnKQorICAgICAgICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0RBVEEoJ3RleHQnKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfSU5MSU5FX1RBR19FTkQoJ30nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuJykKKyAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lLZXl3b3JkOmNsYXNzKCdjbGFzcycpCisgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgUHNpSWRlbnRpZmllcjpDKCdDJykKKyAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9qYXZhZG9jUGFyc2luZy9MaW5rVGFnMS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9qYXZhZG9jUGFyc2luZy9MaW5rVGFnMS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmExYzhlZDkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2phdmFkb2NQYXJzaW5nL0xpbmtUYWcxLmphdmEKQEAgLTAsMCArMSw0IEBACisvKioKKyAqIHtAbGluayBqYXZhLmxhbmcuU3RyaW5nI2VxdWFscyhqYXZhLmxhbmcuT2JqZWN0KSB0ZXh0fQorICovCitjbGFzcyBDe30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2phdmFkb2NQYXJzaW5nL0xpbmtUYWcxLnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvamF2YWRvY1BhcnNpbmcvTGlua1RhZzEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY1ZmRlNGYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2phdmFkb2NQYXJzaW5nL0xpbmtUYWcxLnR4dApAQCAtMCwwICsxLDY5IEBACitQc2lKYXZhRmlsZTpMaW5rVGFnMS5qYXZhCisgIFBzaUltcG9ydExpc3QKKyAgICA8ZW1wdHkgbGlzdD4KKyAgUHNpQ2xhc3M6QworICAgIFBzaURvY0NvbW1lbnQKKyAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0xFQURJTkdfQVNURVJJU0tTKCcqJykKKyAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0RBVEEoJyAnKQorICAgICAgUHNpSW5saW5lRG9jVGFnOkBsaW5rCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19JTkxJTkVfVEFHX1NUQVJUKCd7JykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX1RBR19OQU1FKCdAbGluaycpCisgICAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgICBQc2lFbGVtZW50KERPQ19NRVRIT0RfT1JfRklFTERfUkVGKQorICAgICAgICAgIFBzaUVsZW1lbnQoRE9DX1JFRkVSRU5DRV9IT0xERVIpCisgICAgICAgICAgICBQc2lKYXZhQ29kZVJlZmVyZW5jZUVsZW1lbnQ6amF2YS5sYW5nLlN0cmluZworICAgICAgICAgICAgICBQc2lKYXZhQ29kZVJlZmVyZW5jZUVsZW1lbnQ6amF2YS5sYW5nCisgICAgICAgICAgICAgICAgUHNpSmF2YUNvZGVSZWZlcmVuY2VFbGVtZW50OmphdmEKKyAgICAgICAgICAgICAgICAgIFBzaUlkZW50aWZpZXI6amF2YSgnamF2YScpCisgICAgICAgICAgICAgICAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICAgICAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICAgICAgICAgIFBzaUphdmFUb2tlbjpET1QoJy4nKQorICAgICAgICAgICAgICAgIFBzaUlkZW50aWZpZXI6bGFuZygnbGFuZycpCisgICAgICAgICAgICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgICAgICAgIFBzaUphdmFUb2tlbjpET1QoJy4nKQorICAgICAgICAgICAgICBQc2lJZGVudGlmaWVyOlN0cmluZygnU3RyaW5nJykKKyAgICAgICAgICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICAgIFBzaURvY1Rva2VuOkRPQ19UQUdfVkFMVUVfU0hBUlBfVE9LRU4oJyMnKQorICAgICAgICAgIFBzaURvY1Rva2VuOkRPQ19UQUdfVkFMVUVfVE9LRU4oJ2VxdWFscycpCisgICAgICAgICAgUHNpRG9jVG9rZW46RE9DX1RBR19WQUxVRV9MUEFSRU4oJygnKQorICAgICAgICAgIFBzaUVsZW1lbnQoRE9DX1RBR19WQUxVRV9FTEVNRU5UKQorICAgICAgICAgICAgUHNpRWxlbWVudChET0NfVFlQRV9IT0xERVIpCisgICAgICAgICAgICAgIFBzaVR5cGVFbGVtZW50OmphdmEubGFuZy5PYmplY3QKKyAgICAgICAgICAgICAgICBQc2lKYXZhQ29kZVJlZmVyZW5jZUVsZW1lbnQ6amF2YS5sYW5nLk9iamVjdAorICAgICAgICAgICAgICAgICAgUHNpSmF2YUNvZGVSZWZlcmVuY2VFbGVtZW50OmphdmEubGFuZworICAgICAgICAgICAgICAgICAgICBQc2lKYXZhQ29kZVJlZmVyZW5jZUVsZW1lbnQ6amF2YQorICAgICAgICAgICAgICAgICAgICAgIFBzaUlkZW50aWZpZXI6amF2YSgnamF2YScpCisgICAgICAgICAgICAgICAgICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICAgICAgICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgICAgICAgICAgICAgIFBzaUphdmFUb2tlbjpET1QoJy4nKQorICAgICAgICAgICAgICAgICAgICBQc2lJZGVudGlmaWVyOmxhbmcoJ2xhbmcnKQorICAgICAgICAgICAgICAgICAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICAgICAgICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgICAgICAgICAgICBQc2lKYXZhVG9rZW46RE9UKCcuJykKKyAgICAgICAgICAgICAgICAgIFBzaUlkZW50aWZpZXI6T2JqZWN0KCdPYmplY3QnKQorICAgICAgICAgICAgICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICAgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgICBQc2lEb2NUb2tlbjpET0NfVEFHX1ZBTFVFX1JQQVJFTignKScpCisgICAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9EQVRBKCd0ZXh0JykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0lOTElORV9UQUdfRU5EKCd9JykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcbicpCisgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpS2V5d29yZDpjbGFzcygnY2xhc3MnKQorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaUlkZW50aWZpZXI6QygnQycpCisgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvamF2YWRvY1BhcnNpbmcvTGlua1RhZzIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvamF2YWRvY1BhcnNpbmcvTGlua1RhZzIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYTFhMmMyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9qYXZhZG9jUGFyc2luZy9MaW5rVGFnMi5qYXZhCkBAIC0wLDAgKzEsNCBAQAorLyoqCisgKiBAbGluayBqYXZhLmxhbmcuU3RyaW5nI2VxdWFscyhqYXZhLmxhbmcuT2JqZWN0KSB0ZXh0CisgKi8KK2NsYXNzIEN7fQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvamF2YWRvY1BhcnNpbmcvTGlua1RhZzIudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9qYXZhZG9jUGFyc2luZy9MaW5rVGFnMi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWY0Y2Y3ZAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvamF2YWRvY1BhcnNpbmcvTGlua1RhZzIudHh0CkBAIC0wLDAgKzEsMzcgQEAKK1BzaUphdmFGaWxlOkxpbmtUYWcyLmphdmEKKyAgUHNpSW1wb3J0TGlzdAorICAgIDxlbXB0eSBsaXN0PgorICBQc2lDbGFzczpDCisgICAgUHNpRG9jQ29tbWVudAorICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfTEVBRElOR19BU1RFUklTS1MoJyonKQorICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfREFUQSgnICcpCisgICAgICBQc2lEb2NUYWc6QGxpbmsKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX1RBR19OQU1FKCdAbGluaycpCisgICAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgICBQc2lFbGVtZW50KERPQ19UQUdfVkFMVUVfRUxFTUVOVCkKKyAgICAgICAgICBQc2lEb2NUb2tlbjpET0NfVEFHX1ZBTFVFX1RPS0VOKCdqYXZhLmxhbmcuU3RyaW5nJykKKyAgICAgICAgICBQc2lEb2NUb2tlbjpET0NfVEFHX1ZBTFVFX1NIQVJQX1RPS0VOKCcjJykKKyAgICAgICAgICBQc2lEb2NUb2tlbjpET0NfVEFHX1ZBTFVFX1RPS0VOKCdlcXVhbHMnKQorICAgICAgICAgIFBzaURvY1Rva2VuOkRPQ19UQUdfVkFMVUVfTFBBUkVOKCcoJykKKyAgICAgICAgICBQc2lEb2NUb2tlbjpET0NfVEFHX1ZBTFVFX1RPS0VOKCdqYXZhLmxhbmcuT2JqZWN0JykKKyAgICAgICAgICBQc2lEb2NUb2tlbjpET0NfVEFHX1ZBTFVFX1JQQVJFTignKScpCisgICAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9EQVRBKCd0ZXh0JykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcbicpCisgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpS2V5d29yZDpjbGFzcygnY2xhc3MnKQorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaUlkZW50aWZpZXI6QygnQycpCisgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9qYXZhZG9jUGFyc2luZy9MaW5rVGFnMy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9qYXZhZG9jUGFyc2luZy9MaW5rVGFnMy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVlYjlkZDQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2phdmFkb2NQYXJzaW5nL0xpbmtUYWczLmphdmEKQEAgLTAsMCArMSw3IEBACisvKioKKyAqIEhlbGxvISB7QGxpbmsKKyAqICNmb28oKX0gdGV4dAorICovCitwdWJsaWMgY2xhc3MgQ3sKK3B1YmxpYyB2b2lkIGZvbygpIHt9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9qYXZhZG9jUGFyc2luZy9MaW5rVGFnMy50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2phdmFkb2NQYXJzaW5nL0xpbmtUYWczLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMWVhNTFjCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9qYXZhZG9jUGFyc2luZy9MaW5rVGFnMy50eHQKQEAgLTAsMCArMSw2MiBAQAorUHNpSmF2YUZpbGU6TGlua1RhZzMuamF2YQorICBQc2lJbXBvcnRMaXN0CisgICAgPGVtcHR5IGxpc3Q+CisgIFBzaUNsYXNzOkMKKyAgICBQc2lEb2NDb21tZW50CisgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9MRUFESU5HX0FTVEVSSVNLUygnKicpCisgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9EQVRBKCcgSGVsbG8hICcpCisgICAgICBQc2lJbmxpbmVEb2NUYWc6QGxpbmsKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0lOTElORV9UQUdfU1RBUlQoJ3snKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfVEFHX05BTUUoJ0BsaW5rJykKKyAgICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfTEVBRElOR19BU1RFUklTS1MoJyonKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9EQVRBKCcgJykKKyAgICAgICAgUHNpRWxlbWVudChET0NfTUVUSE9EX09SX0ZJRUxEX1JFRikKKyAgICAgICAgICBQc2lEb2NUb2tlbjpET0NfVEFHX1ZBTFVFX1NIQVJQX1RPS0VOKCcjJykKKyAgICAgICAgICBQc2lEb2NUb2tlbjpET0NfVEFHX1ZBTFVFX1RPS0VOKCdmb28nKQorICAgICAgICAgIFBzaURvY1Rva2VuOkRPQ19UQUdfVkFMVUVfTFBBUkVOKCcoJykKKyAgICAgICAgICBQc2lFbGVtZW50KERPQ19UQUdfVkFMVUVfRUxFTUVOVCkKKyAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICAgIFBzaURvY1Rva2VuOkRPQ19UQUdfVkFMVUVfUlBBUkVOKCcpJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0lOTElORV9UQUdfRU5EKCd9JykKKyAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0RBVEEoJyB0ZXh0JykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcbicpCisgICAgUHNpTW9kaWZpZXJMaXN0OnB1YmxpYworICAgICAgUHNpS2V5d29yZDpwdWJsaWMoJ3B1YmxpYycpCisgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgUHNpS2V5d29yZDpjbGFzcygnY2xhc3MnKQorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaUlkZW50aWZpZXI6QygnQycpCisgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lNb2RpZmllckxpc3Q6cHVibGljCisgICAgICAgIFBzaUtleXdvcmQ6cHVibGljKCdwdWJsaWMnKQorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuJykKKyAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2phdmFkb2NQYXJzaW5nL0xpbmtUYWc0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2phdmFkb2NQYXJzaW5nL0xpbmtUYWc0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTBhYWUwYwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvamF2YWRvY1BhcnNpbmcvTGlua1RhZzQuamF2YQpAQCAtMCwwICsxLDcgQEAKKy8qKgorICogSGVsbG8hIHtAbGluaworICojZm9vKCl9IHRleHQKKyAqLworcHVibGljIGNsYXNzIEN7CitwdWJsaWMgdm9pZCBmb28oKSB7fQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvamF2YWRvY1BhcnNpbmcvTGlua1RhZzQudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9qYXZhZG9jUGFyc2luZy9MaW5rVGFnNC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTA4ZDAxMgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvamF2YWRvY1BhcnNpbmcvTGlua1RhZzQudHh0CkBAIC0wLDAgKzEsNjEgQEAKK1BzaUphdmFGaWxlOkxpbmtUYWc0LmphdmEKKyAgUHNpSW1wb3J0TGlzdAorICAgIDxlbXB0eSBsaXN0PgorICBQc2lDbGFzczpDCisgICAgUHNpRG9jQ29tbWVudAorICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfTEVBRElOR19BU1RFUklTS1MoJyonKQorICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfREFUQSgnIEhlbGxvISAnKQorICAgICAgUHNpSW5saW5lRG9jVGFnOkBsaW5rCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19JTkxJTkVfVEFHX1NUQVJUKCd7JykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX1RBR19OQU1FKCdAbGluaycpCisgICAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0xFQURJTkdfQVNURVJJU0tTKCcqJykKKyAgICAgICAgUHNpRWxlbWVudChET0NfTUVUSE9EX09SX0ZJRUxEX1JFRikKKyAgICAgICAgICBQc2lEb2NUb2tlbjpET0NfVEFHX1ZBTFVFX1NIQVJQX1RPS0VOKCcjJykKKyAgICAgICAgICBQc2lEb2NUb2tlbjpET0NfVEFHX1ZBTFVFX1RPS0VOKCdmb28nKQorICAgICAgICAgIFBzaURvY1Rva2VuOkRPQ19UQUdfVkFMVUVfTFBBUkVOKCcoJykKKyAgICAgICAgICBQc2lFbGVtZW50KERPQ19UQUdfVkFMVUVfRUxFTUVOVCkKKyAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICAgIFBzaURvY1Rva2VuOkRPQ19UQUdfVkFMVUVfUlBBUkVOKCcpJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0lOTElORV9UQUdfRU5EKCd9JykKKyAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0RBVEEoJyB0ZXh0JykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcbicpCisgICAgUHNpTW9kaWZpZXJMaXN0OnB1YmxpYworICAgICAgUHNpS2V5d29yZDpwdWJsaWMoJ3B1YmxpYycpCisgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgUHNpS2V5d29yZDpjbGFzcygnY2xhc3MnKQorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaUlkZW50aWZpZXI6QygnQycpCisgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lNb2RpZmllckxpc3Q6cHVibGljCisgICAgICAgIFBzaUtleXdvcmQ6cHVibGljKCdwdWJsaWMnKQorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuJykKKyAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2phdmFkb2NQYXJzaW5nL0xpbmtUYWc1LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2phdmFkb2NQYXJzaW5nL0xpbmtUYWc1LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzkwMDY1YTQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2phdmFkb2NQYXJzaW5nL0xpbmtUYWc1LmphdmEKQEAgLTAsMCArMSw3IEBACisvKioKKyAqIEhlbGxvISB7QGxpbmsKKyAjZm9vKCl9IHRleHQKKyAqLworcHVibGljIGNsYXNzIEN7CitwdWJsaWMgdm9pZCBmb28oKSB7fQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvamF2YWRvY1BhcnNpbmcvTGlua1RhZzUudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9qYXZhZG9jUGFyc2luZy9MaW5rVGFnNS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmFlZWJiMQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvamF2YWRvY1BhcnNpbmcvTGlua1RhZzUudHh0CkBAIC0wLDAgKzEsNjAgQEAKK1BzaUphdmFGaWxlOkxpbmtUYWc1LmphdmEKKyAgUHNpSW1wb3J0TGlzdAorICAgIDxlbXB0eSBsaXN0PgorICBQc2lDbGFzczpDCisgICAgUHNpRG9jQ29tbWVudAorICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfTEVBRElOR19BU1RFUklTS1MoJyonKQorICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfREFUQSgnIEhlbGxvISAnKQorICAgICAgUHNpSW5saW5lRG9jVGFnOkBsaW5rCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19JTkxJTkVfVEFHX1NUQVJUKCd7JykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX1RBR19OQU1FKCdAbGluaycpCisgICAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICAgIFBzaUVsZW1lbnQoRE9DX01FVEhPRF9PUl9GSUVMRF9SRUYpCisgICAgICAgICAgUHNpRG9jVG9rZW46RE9DX1RBR19WQUxVRV9TSEFSUF9UT0tFTignIycpCisgICAgICAgICAgUHNpRG9jVG9rZW46RE9DX1RBR19WQUxVRV9UT0tFTignZm9vJykKKyAgICAgICAgICBQc2lEb2NUb2tlbjpET0NfVEFHX1ZBTFVFX0xQQVJFTignKCcpCisgICAgICAgICAgUHNpRWxlbWVudChET0NfVEFHX1ZBTFVFX0VMRU1FTlQpCisgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgICBQc2lEb2NUb2tlbjpET0NfVEFHX1ZBTFVFX1JQQVJFTignKScpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19JTkxJTkVfVEFHX0VORCgnfScpCisgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9EQVRBKCcgdGV4dCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgUHNpV2hpdGVTcGFjZSgnXG4nKQorICAgIFBzaU1vZGlmaWVyTGlzdDpwdWJsaWMKKyAgICAgIFBzaUtleXdvcmQ6cHVibGljKCdwdWJsaWMnKQorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaUtleXdvcmQ6Y2xhc3MoJ2NsYXNzJykKKyAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICBQc2lJZGVudGlmaWVyOkMoJ0MnKQorICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcbicpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpTW9kaWZpZXJMaXN0OnB1YmxpYworICAgICAgICBQc2lLZXl3b3JkOnB1YmxpYygncHVibGljJykKKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcbicpCisgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9qYXZhZG9jUGFyc2luZy9MaW5rVGFnNi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9qYXZhZG9jUGFyc2luZy9MaW5rVGFnNi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY3NjY3OTcKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2phdmFkb2NQYXJzaW5nL0xpbmtUYWc2LmphdmEKQEAgLTAsMCArMSw3IEBACisvKioKKyAqIEhlbGxvISB7QGxpbmsKKyNmb28oKX0gdGV4dAorICovCitwdWJsaWMgY2xhc3MgQ3sKK3B1YmxpYyB2b2lkIGZvbygpIHt9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9qYXZhZG9jUGFyc2luZy9MaW5rVGFnNi50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2phdmFkb2NQYXJzaW5nL0xpbmtUYWc2LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xY2MxNzY0Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9qYXZhZG9jUGFyc2luZy9MaW5rVGFnNi50eHQKQEAgLTAsMCArMSw2MCBAQAorUHNpSmF2YUZpbGU6TGlua1RhZzYuamF2YQorICBQc2lJbXBvcnRMaXN0CisgICAgPGVtcHR5IGxpc3Q+CisgIFBzaUNsYXNzOkMKKyAgICBQc2lEb2NDb21tZW50CisgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9MRUFESU5HX0FTVEVSSVNLUygnKicpCisgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9EQVRBKCcgSGVsbG8hICcpCisgICAgICBQc2lJbmxpbmVEb2NUYWc6QGxpbmsKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0lOTElORV9UQUdfU1RBUlQoJ3snKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfVEFHX05BTUUoJ0BsaW5rJykKKyAgICAgICAgUHNpV2hpdGVTcGFjZSgnXG4nKQorICAgICAgICBQc2lFbGVtZW50KERPQ19NRVRIT0RfT1JfRklFTERfUkVGKQorICAgICAgICAgIFBzaURvY1Rva2VuOkRPQ19UQUdfVkFMVUVfU0hBUlBfVE9LRU4oJyMnKQorICAgICAgICAgIFBzaURvY1Rva2VuOkRPQ19UQUdfVkFMVUVfVE9LRU4oJ2ZvbycpCisgICAgICAgICAgUHNpRG9jVG9rZW46RE9DX1RBR19WQUxVRV9MUEFSRU4oJygnKQorICAgICAgICAgIFBzaUVsZW1lbnQoRE9DX1RBR19WQUxVRV9FTEVNRU5UKQorICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgICAgUHNpRG9jVG9rZW46RE9DX1RBR19WQUxVRV9SUEFSRU4oJyknKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfSU5MSU5FX1RBR19FTkQoJ30nKQorICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfREFUQSgnIHRleHQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuJykKKyAgICBQc2lNb2RpZmllckxpc3Q6cHVibGljCisgICAgICBQc2lLZXl3b3JkOnB1YmxpYygncHVibGljJykKKyAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICBQc2lLZXl3b3JkOmNsYXNzKCdjbGFzcycpCisgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgUHNpSWRlbnRpZmllcjpDKCdDJykKKyAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgUHNpV2hpdGVTcGFjZSgnXG4nKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaU1vZGlmaWVyTGlzdDpwdWJsaWMKKyAgICAgICAgUHNpS2V5d29yZDpwdWJsaWMoJ3B1YmxpYycpCisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG4nKQorICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvamF2YWRvY1BhcnNpbmcvUGFyYW1UYWcwLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2phdmFkb2NQYXJzaW5nL1BhcmFtVGFnMC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRlM2VlYjMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2phdmFkb2NQYXJzaW5nL1BhcmFtVGFnMC5qYXZhCkBAIC0wLDAgKzEsOCBAQAorY2xhc3MgQyB7CisgIC8qKgorICAgKiBKYXZhZG9jCisgICAqIEBwYXJhbSBwMQorICAgKiBAcGFyYW0gcDIKKyAgICovCisgIHZvaWQgbSgpIHsgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvamF2YWRvY1BhcnNpbmcvUGFyYW1UYWcwLnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvamF2YWRvY1BhcnNpbmcvUGFyYW1UYWcwLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MDQyODY3Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9qYXZhZG9jUGFyc2luZy9QYXJhbVRhZzAudHh0CkBAIC0wLDAgKzEsNjMgQEAKK1BzaUphdmFGaWxlOlBhcmFtVGFnMC5qYXZhCisgIFBzaUltcG9ydExpc3QKKyAgICA8ZW1wdHkgbGlzdD4KKyAgUHNpQ2xhc3M6QworICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaUtleXdvcmQ6Y2xhc3MoJ2NsYXNzJykKKyAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICBQc2lJZGVudGlmaWVyOkMoJ0MnKQorICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcbiAgJykKKyAgICBQc2lNZXRob2Q6bQorICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gICAnKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9MRUFESU5HX0FTVEVSSVNLUygnKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0RBVEEoJyBKYXZhZG9jJykKKyAgICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gICAnKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9MRUFESU5HX0FTVEVSSVNLUygnKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0RBVEEoJyAnKQorICAgICAgICBQc2lEb2NUYWc6QHBhcmFtCisgICAgICAgICAgUHNpRG9jVG9rZW46RE9DX1RBR19OQU1FKCdAcGFyYW0nKQorICAgICAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgICAgIFBzaUVsZW1lbnQoRE9DX1BBUkFNRVRFUl9SRUYpCisgICAgICAgICAgICBQc2lEb2NUb2tlbjpET0NfVEFHX1ZBTFVFX1RPS0VOKCdwMScpCisgICAgICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gICAnKQorICAgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0xFQURJTkdfQVNURVJJU0tTKCcqJykKKyAgICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9EQVRBKCcgJykKKyAgICAgICAgUHNpRG9jVGFnOkBwYXJhbQorICAgICAgICAgIFBzaURvY1Rva2VuOkRPQ19UQUdfTkFNRSgnQHBhcmFtJykKKyAgICAgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgICAgICBQc2lFbGVtZW50KERPQ19QQVJBTUVURVJfUkVGKQorICAgICAgICAgICAgUHNpRG9jVG9rZW46RE9DX1RBR19WQUxVRV9UT0tFTigncDInKQorICAgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAgICcpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6bSgnbScpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcbicpCisgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9qYXZhZG9jUGFyc2luZy9QYXJhbVRhZzEuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvamF2YWRvY1BhcnNpbmcvUGFyYW1UYWcxLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWMwMmQ5NQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvamF2YWRvY1BhcnNpbmcvUGFyYW1UYWcxLmphdmEKQEAgLTAsMCArMSw3IEBACitjbGFzcyBGb28geworICAgIC8qKgorICAgICAqCisgICAgICogQHBhcmFtIHkKKyAgICAgKi8KKyAgICAgcHVibGljIHZvaWQgZm9vKFN0cmluZyB5KSB7fQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvamF2YWRvY1BhcnNpbmcvUGFyYW1UYWcxLnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvamF2YWRvY1BhcnNpbmcvUGFyYW1UYWcxLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MGI4MWRjMgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvamF2YWRvY1BhcnNpbmcvUGFyYW1UYWcxLnR4dApAQCAtMCwwICsxLDY0IEBACitQc2lKYXZhRmlsZTpQYXJhbVRhZzEuamF2YQorICBQc2lJbXBvcnRMaXN0CisgICAgPGVtcHR5IGxpc3Q+CisgIFBzaUNsYXNzOkZvbworICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaUtleXdvcmQ6Y2xhc3MoJ2NsYXNzJykKKyAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICBQc2lJZGVudGlmaWVyOkZvbygnRm9vJykKKyAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgUHNpV2hpdGVTcGFjZSgnXG4gICAgJykKKyAgICBQc2lNZXRob2Q6Zm9vCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAgICAgJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfTEVBRElOR19BU1RFUklTS1MoJyonKQorICAgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAgICAgJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfTEVBRElOR19BU1RFUklTS1MoJyonKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9EQVRBKCcgJykKKyAgICAgICAgUHNpRG9jVGFnOkBwYXJhbQorICAgICAgICAgIFBzaURvY1Rva2VuOkRPQ19UQUdfTkFNRSgnQHBhcmFtJykKKyAgICAgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgICAgICBQc2lFbGVtZW50KERPQ19QQVJBTUVURVJfUkVGKQorICAgICAgICAgICAgUHNpRG9jVG9rZW46RE9DX1RBR19WQUxVRV9UT0tFTigneScpCisgICAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICAgICAnKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICAgICAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OnB1YmxpYworICAgICAgICBQc2lLZXl3b3JkOnB1YmxpYygncHVibGljJykKKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooU3RyaW5nIHkpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaVBhcmFtZXRlcjp5CisgICAgICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgICAgUHNpVHlwZUVsZW1lbnQ6U3RyaW5nCisgICAgICAgICAgICBQc2lKYXZhQ29kZVJlZmVyZW5jZUVsZW1lbnQ6U3RyaW5nCisgICAgICAgICAgICAgIFBzaUlkZW50aWZpZXI6U3RyaW5nKCdTdHJpbmcnKQorICAgICAgICAgICAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICAgICAgUHNpSWRlbnRpZmllcjp5KCd5JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG4nKQorICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvamF2YWRvY1BhcnNpbmcvUGFyYW1ldGVybGVzc1RhZy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9qYXZhZG9jUGFyc2luZy9QYXJhbWV0ZXJsZXNzVGFnLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTgzMmExZQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvamF2YWRvY1BhcnNpbmcvUGFyYW1ldGVybGVzc1RhZy5qYXZhCkBAIC0wLDAgKzEsNSBAQAorLyoqCisgKiBAc2VyaWFsCisgKiBAc2VlIGphdmEubGFuZy5TdHJpbmcgCisgKi8KK2NsYXNzIEN7fQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvamF2YWRvY1BhcnNpbmcvUGFyYW1ldGVybGVzc1RhZy50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2phdmFkb2NQYXJzaW5nL1BhcmFtZXRlcmxlc3NUYWcudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFkYWNlZTYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2phdmFkb2NQYXJzaW5nL1BhcmFtZXRlcmxlc3NUYWcudHh0CkBAIC0wLDAgKzEsNDggQEAKK1BzaUphdmFGaWxlOlBhcmFtZXRlcmxlc3NUYWcuamF2YQorICBQc2lJbXBvcnRMaXN0CisgICAgPGVtcHR5IGxpc3Q+CisgIFBzaUNsYXNzOkMKKyAgICBQc2lEb2NDb21tZW50CisgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9MRUFESU5HX0FTVEVSSVNLUygnKicpCisgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9EQVRBKCcgJykKKyAgICAgIFBzaURvY1RhZzpAc2VyaWFsCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19UQUdfTkFNRSgnQHNlcmlhbCcpCisgICAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0xFQURJTkdfQVNURVJJU0tTKCcqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfREFUQSgnICcpCisgICAgICBQc2lEb2NUYWc6QHNlZQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfVEFHX05BTUUoJ0BzZWUnKQorICAgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgICAgUHNpRWxlbWVudChET0NfUkVGRVJFTkNFX0hPTERFUikKKyAgICAgICAgICBQc2lKYXZhQ29kZVJlZmVyZW5jZUVsZW1lbnQ6amF2YS5sYW5nLlN0cmluZworICAgICAgICAgICAgUHNpSmF2YUNvZGVSZWZlcmVuY2VFbGVtZW50OmphdmEubGFuZworICAgICAgICAgICAgICBQc2lKYXZhQ29kZVJlZmVyZW5jZUVsZW1lbnQ6amF2YQorICAgICAgICAgICAgICAgIFBzaUlkZW50aWZpZXI6amF2YSgnamF2YScpCisgICAgICAgICAgICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgICAgICAgIFBzaUphdmFUb2tlbjpET1QoJy4nKQorICAgICAgICAgICAgICBQc2lJZGVudGlmaWVyOmxhbmcoJ2xhbmcnKQorICAgICAgICAgICAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgICAgICBQc2lKYXZhVG9rZW46RE9UKCcuJykKKyAgICAgICAgICAgIFBzaUlkZW50aWZpZXI6U3RyaW5nKCdTdHJpbmcnKQorICAgICAgICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVdoaXRlU3BhY2UoJyBcbiAnKQorICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgUHNpV2hpdGVTcGFjZSgnXG4nKQorICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaUtleXdvcmQ6Y2xhc3MoJ2NsYXNzJykKKyAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICBQc2lJZGVudGlmaWVyOkMoJ0MnKQorICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2phdmFkb2NQYXJzaW5nL1NlZVRhZzAuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvamF2YWRvY1BhcnNpbmcvU2VlVGFnMC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdiYzlhNWIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2phdmFkb2NQYXJzaW5nL1NlZVRhZzAuamF2YQpAQCAtMCwwICsxLDQgQEAKKy8qKgorICogQHNlZSBqYXZhLmxhbmcuU3RyaW5nIAorICovCitjbGFzcyBDe30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2phdmFkb2NQYXJzaW5nL1NlZVRhZzAudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9qYXZhZG9jUGFyc2luZy9TZWVUYWcwLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YThhM2MzCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9qYXZhZG9jUGFyc2luZy9TZWVUYWcwLnR4dApAQCAtMCwwICsxLDQzIEBACitQc2lKYXZhRmlsZTpTZWVUYWcwLmphdmEKKyAgUHNpSW1wb3J0TGlzdAorICAgIDxlbXB0eSBsaXN0PgorICBQc2lDbGFzczpDCisgICAgUHNpRG9jQ29tbWVudAorICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfTEVBRElOR19BU1RFUklTS1MoJyonKQorICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfREFUQSgnICcpCisgICAgICBQc2lEb2NUYWc6QHNlZQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfVEFHX05BTUUoJ0BzZWUnKQorICAgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgICAgUHNpRWxlbWVudChET0NfUkVGRVJFTkNFX0hPTERFUikKKyAgICAgICAgICBQc2lKYXZhQ29kZVJlZmVyZW5jZUVsZW1lbnQ6amF2YS5sYW5nLlN0cmluZworICAgICAgICAgICAgUHNpSmF2YUNvZGVSZWZlcmVuY2VFbGVtZW50OmphdmEubGFuZworICAgICAgICAgICAgICBQc2lKYXZhQ29kZVJlZmVyZW5jZUVsZW1lbnQ6amF2YQorICAgICAgICAgICAgICAgIFBzaUlkZW50aWZpZXI6amF2YSgnamF2YScpCisgICAgICAgICAgICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgICAgICAgIFBzaUphdmFUb2tlbjpET1QoJy4nKQorICAgICAgICAgICAgICBQc2lJZGVudGlmaWVyOmxhbmcoJ2xhbmcnKQorICAgICAgICAgICAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgICAgICBQc2lKYXZhVG9rZW46RE9UKCcuJykKKyAgICAgICAgICAgIFBzaUlkZW50aWZpZXI6U3RyaW5nKCdTdHJpbmcnKQorICAgICAgICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVdoaXRlU3BhY2UoJyBcbiAnKQorICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgUHNpV2hpdGVTcGFjZSgnXG4nKQorICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaUtleXdvcmQ6Y2xhc3MoJ2NsYXNzJykKKyAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICBQc2lJZGVudGlmaWVyOkMoJ0MnKQorICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2phdmFkb2NQYXJzaW5nL1NlZVRhZzEuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvamF2YWRvY1BhcnNpbmcvU2VlVGFnMS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNjNTVjMjUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2phdmFkb2NQYXJzaW5nL1NlZVRhZzEuamF2YQpAQCAtMCwwICsxLDQgQEAKKy8qKgorICogQHNlZSBqYXZhLmxhbmcuU3RyaW5nIFRoZSBTdHJpbmcgY2xhc3MgIAorICovCitjbGFzcyBDe30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2phdmFkb2NQYXJzaW5nL1NlZVRhZzEudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9qYXZhZG9jUGFyc2luZy9TZWVUYWcxLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yODYzMGRkCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9qYXZhZG9jUGFyc2luZy9TZWVUYWcxLnR4dApAQCAtMCwwICsxLDQ1IEBACitQc2lKYXZhRmlsZTpTZWVUYWcxLmphdmEKKyAgUHNpSW1wb3J0TGlzdAorICAgIDxlbXB0eSBsaXN0PgorICBQc2lDbGFzczpDCisgICAgUHNpRG9jQ29tbWVudAorICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfTEVBRElOR19BU1RFUklTS1MoJyonKQorICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfREFUQSgnICcpCisgICAgICBQc2lEb2NUYWc6QHNlZQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfVEFHX05BTUUoJ0BzZWUnKQorICAgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgICAgUHNpRWxlbWVudChET0NfUkVGRVJFTkNFX0hPTERFUikKKyAgICAgICAgICBQc2lKYXZhQ29kZVJlZmVyZW5jZUVsZW1lbnQ6amF2YS5sYW5nLlN0cmluZworICAgICAgICAgICAgUHNpSmF2YUNvZGVSZWZlcmVuY2VFbGVtZW50OmphdmEubGFuZworICAgICAgICAgICAgICBQc2lKYXZhQ29kZVJlZmVyZW5jZUVsZW1lbnQ6amF2YQorICAgICAgICAgICAgICAgIFBzaUlkZW50aWZpZXI6amF2YSgnamF2YScpCisgICAgICAgICAgICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgICAgICAgIFBzaUphdmFUb2tlbjpET1QoJy4nKQorICAgICAgICAgICAgICBQc2lJZGVudGlmaWVyOmxhbmcoJ2xhbmcnKQorICAgICAgICAgICAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgICAgICBQc2lKYXZhVG9rZW46RE9UKCcuJykKKyAgICAgICAgICAgIFBzaUlkZW50aWZpZXI6U3RyaW5nKCdTdHJpbmcnKQorICAgICAgICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0RBVEEoJ1RoZSBTdHJpbmcgY2xhc3MgICcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgUHNpV2hpdGVTcGFjZSgnXG4nKQorICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaUtleXdvcmQ6Y2xhc3MoJ2NsYXNzJykKKyAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICBQc2lJZGVudGlmaWVyOkMoJ0MnKQorICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2phdmFkb2NQYXJzaW5nL1NlZVRhZzEwLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2phdmFkb2NQYXJzaW5nL1NlZVRhZzEwLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTZkNWE4MwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvamF2YWRvY1BhcnNpbmcvU2VlVGFnMTAuamF2YQpAQCAtMCwwICsxLDQgQEAKKy8qKgorICogQHNlZSBjb20uZm9vLk15Q2xhc3MjZXF1YWxzKGphdmEubGFuZy5PYmplY3QsIGphdmEubGFuZy5PYmplY3QpCisgKi8KK2NsYXNzIEN7fQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvamF2YWRvY1BhcnNpbmcvU2VlVGFnMTAudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9qYXZhZG9jUGFyc2luZy9TZWVUYWcxMC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTViMmY3ZgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvamF2YWRvY1BhcnNpbmcvU2VlVGFnMTAudHh0CkBAIC0wLDAgKzEsODMgQEAKK1BzaUphdmFGaWxlOlNlZVRhZzEwLmphdmEKKyAgUHNpSW1wb3J0TGlzdAorICAgIDxlbXB0eSBsaXN0PgorICBQc2lDbGFzczpDCisgICAgUHNpRG9jQ29tbWVudAorICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfTEVBRElOR19BU1RFUklTS1MoJyonKQorICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfREFUQSgnICcpCisgICAgICBQc2lEb2NUYWc6QHNlZQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfVEFHX05BTUUoJ0BzZWUnKQorICAgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgICAgUHNpRWxlbWVudChET0NfTUVUSE9EX09SX0ZJRUxEX1JFRikKKyAgICAgICAgICBQc2lFbGVtZW50KERPQ19SRUZFUkVOQ0VfSE9MREVSKQorICAgICAgICAgICAgUHNpSmF2YUNvZGVSZWZlcmVuY2VFbGVtZW50OmNvbS5mb28uTXlDbGFzcworICAgICAgICAgICAgICBQc2lKYXZhQ29kZVJlZmVyZW5jZUVsZW1lbnQ6Y29tLmZvbworICAgICAgICAgICAgICAgIFBzaUphdmFDb2RlUmVmZXJlbmNlRWxlbWVudDpjb20KKyAgICAgICAgICAgICAgICAgIFBzaUlkZW50aWZpZXI6Y29tKCdjb20nKQorICAgICAgICAgICAgICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICAgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgICAgICAgICBQc2lKYXZhVG9rZW46RE9UKCcuJykKKyAgICAgICAgICAgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgICAgICAgICAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICAgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgICAgICAgUHNpSmF2YVRva2VuOkRPVCgnLicpCisgICAgICAgICAgICAgIFBzaUlkZW50aWZpZXI6TXlDbGFzcygnTXlDbGFzcycpCisgICAgICAgICAgICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgICBQc2lEb2NUb2tlbjpET0NfVEFHX1ZBTFVFX1NIQVJQX1RPS0VOKCcjJykKKyAgICAgICAgICBQc2lEb2NUb2tlbjpET0NfVEFHX1ZBTFVFX1RPS0VOKCdlcXVhbHMnKQorICAgICAgICAgIFBzaURvY1Rva2VuOkRPQ19UQUdfVkFMVUVfTFBBUkVOKCcoJykKKyAgICAgICAgICBQc2lFbGVtZW50KERPQ19UQUdfVkFMVUVfRUxFTUVOVCkKKyAgICAgICAgICAgIFBzaUVsZW1lbnQoRE9DX1RZUEVfSE9MREVSKQorICAgICAgICAgICAgICBQc2lUeXBlRWxlbWVudDpqYXZhLmxhbmcuT2JqZWN0CisgICAgICAgICAgICAgICAgUHNpSmF2YUNvZGVSZWZlcmVuY2VFbGVtZW50OmphdmEubGFuZy5PYmplY3QKKyAgICAgICAgICAgICAgICAgIFBzaUphdmFDb2RlUmVmZXJlbmNlRWxlbWVudDpqYXZhLmxhbmcKKyAgICAgICAgICAgICAgICAgICAgUHNpSmF2YUNvZGVSZWZlcmVuY2VFbGVtZW50OmphdmEKKyAgICAgICAgICAgICAgICAgICAgICBQc2lJZGVudGlmaWVyOmphdmEoJ2phdmEnKQorICAgICAgICAgICAgICAgICAgICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgICAgICAgICAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICAgICAgICAgICAgICBQc2lKYXZhVG9rZW46RE9UKCcuJykKKyAgICAgICAgICAgICAgICAgICAgUHNpSWRlbnRpZmllcjpsYW5nKCdsYW5nJykKKyAgICAgICAgICAgICAgICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICAgICAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICAgICAgICAgICAgUHNpSmF2YVRva2VuOkRPVCgnLicpCisgICAgICAgICAgICAgICAgICBQc2lJZGVudGlmaWVyOk9iamVjdCgnT2JqZWN0JykKKyAgICAgICAgICAgICAgICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgICAgICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgICAgICBQc2lEb2NUb2tlbjpET0NfVEFHX1ZBTFVFX0NPTU1BKCcsJykKKyAgICAgICAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgICAgICAgUHNpRWxlbWVudChET0NfVFlQRV9IT0xERVIpCisgICAgICAgICAgICAgIFBzaVR5cGVFbGVtZW50OmphdmEubGFuZy5PYmplY3QKKyAgICAgICAgICAgICAgICBQc2lKYXZhQ29kZVJlZmVyZW5jZUVsZW1lbnQ6amF2YS5sYW5nLk9iamVjdAorICAgICAgICAgICAgICAgICAgUHNpSmF2YUNvZGVSZWZlcmVuY2VFbGVtZW50OmphdmEubGFuZworICAgICAgICAgICAgICAgICAgICBQc2lKYXZhQ29kZVJlZmVyZW5jZUVsZW1lbnQ6amF2YQorICAgICAgICAgICAgICAgICAgICAgIFBzaUlkZW50aWZpZXI6amF2YSgnamF2YScpCisgICAgICAgICAgICAgICAgICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICAgICAgICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgICAgICAgICAgICAgIFBzaUphdmFUb2tlbjpET1QoJy4nKQorICAgICAgICAgICAgICAgICAgICBQc2lJZGVudGlmaWVyOmxhbmcoJ2xhbmcnKQorICAgICAgICAgICAgICAgICAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICAgICAgICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgICAgICAgICAgICBQc2lKYXZhVG9rZW46RE9UKCcuJykKKyAgICAgICAgICAgICAgICAgIFBzaUlkZW50aWZpZXI6T2JqZWN0KCdPYmplY3QnKQorICAgICAgICAgICAgICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICAgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgICBQc2lEb2NUb2tlbjpET0NfVEFHX1ZBTFVFX1JQQVJFTignKScpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgUHNpV2hpdGVTcGFjZSgnXG4nKQorICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaUtleXdvcmQ6Y2xhc3MoJ2NsYXNzJykKKyAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICBQc2lJZGVudGlmaWVyOkMoJ0MnKQorICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2phdmFkb2NQYXJzaW5nL1NlZVRhZzExLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2phdmFkb2NQYXJzaW5nL1NlZVRhZzExLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTEzZGVmMgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvamF2YWRvY1BhcnNpbmcvU2VlVGFnMTEuamF2YQpAQCAtMCwwICsxLDQgQEAKKy8qKgorICogQHNlZSAgICAgICAgamF2YS5sYW5nLk9iamVjdCN3YWl0KCkKKyAqLworY2xhc3MgQ3t9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9qYXZhZG9jUGFyc2luZy9TZWVUYWcxMS50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2phdmFkb2NQYXJzaW5nL1NlZVRhZzExLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNThkNzZiCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9qYXZhZG9jUGFyc2luZy9TZWVUYWcxMS50eHQKQEAgLTAsMCArMSw1MCBAQAorUHNpSmF2YUZpbGU6U2VlVGFnMTEuamF2YQorICBQc2lJbXBvcnRMaXN0CisgICAgPGVtcHR5IGxpc3Q+CisgIFBzaUNsYXNzOkMKKyAgICBQc2lEb2NDb21tZW50CisgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9MRUFESU5HX0FTVEVSSVNLUygnKicpCisgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9EQVRBKCcgJykKKyAgICAgIFBzaURvY1RhZzpAc2VlCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19UQUdfTkFNRSgnQHNlZScpCisgICAgICAgIFBzaVdoaXRlU3BhY2UoJyAgICAgICAgJykKKyAgICAgICAgUHNpRWxlbWVudChET0NfTUVUSE9EX09SX0ZJRUxEX1JFRikKKyAgICAgICAgICBQc2lFbGVtZW50KERPQ19SRUZFUkVOQ0VfSE9MREVSKQorICAgICAgICAgICAgUHNpSmF2YUNvZGVSZWZlcmVuY2VFbGVtZW50OmphdmEubGFuZy5PYmplY3QKKyAgICAgICAgICAgICAgUHNpSmF2YUNvZGVSZWZlcmVuY2VFbGVtZW50OmphdmEubGFuZworICAgICAgICAgICAgICAgIFBzaUphdmFDb2RlUmVmZXJlbmNlRWxlbWVudDpqYXZhCisgICAgICAgICAgICAgICAgICBQc2lJZGVudGlmaWVyOmphdmEoJ2phdmEnKQorICAgICAgICAgICAgICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICAgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgICAgICAgICBQc2lKYXZhVG9rZW46RE9UKCcuJykKKyAgICAgICAgICAgICAgICBQc2lJZGVudGlmaWVyOmxhbmcoJ2xhbmcnKQorICAgICAgICAgICAgICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgICAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICAgICAgICBQc2lKYXZhVG9rZW46RE9UKCcuJykKKyAgICAgICAgICAgICAgUHNpSWRlbnRpZmllcjpPYmplY3QoJ09iamVjdCcpCisgICAgICAgICAgICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgICBQc2lEb2NUb2tlbjpET0NfVEFHX1ZBTFVFX1NIQVJQX1RPS0VOKCcjJykKKyAgICAgICAgICBQc2lEb2NUb2tlbjpET0NfVEFHX1ZBTFVFX1RPS0VOKCd3YWl0JykKKyAgICAgICAgICBQc2lEb2NUb2tlbjpET0NfVEFHX1ZBTFVFX0xQQVJFTignKCcpCisgICAgICAgICAgUHNpRWxlbWVudChET0NfVEFHX1ZBTFVFX0VMRU1FTlQpCisgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgICBQc2lEb2NUb2tlbjpET0NfVEFHX1ZBTFVFX1JQQVJFTignKScpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgUHNpV2hpdGVTcGFjZSgnXG4nKQorICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaUtleXdvcmQ6Y2xhc3MoJ2NsYXNzJykKKyAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICBQc2lJZGVudGlmaWVyOkMoJ0MnKQorICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2phdmFkb2NQYXJzaW5nL1NlZVRhZzEyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2phdmFkb2NQYXJzaW5nL1NlZVRhZzEyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzI4ODAwYgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvamF2YWRvY1BhcnNpbmcvU2VlVGFnMTIuamF2YQpAQCAtMCwwICsxLDQgQEAKKy8qKgorICogQHNlZSAjd2FpdCgpCisgKi8KK2NsYXNzIEN7fQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvamF2YWRvY1BhcnNpbmcvU2VlVGFnMTIudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9qYXZhZG9jUGFyc2luZy9TZWVUYWcxMi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWM0ZGQ2MgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvamF2YWRvY1BhcnNpbmcvU2VlVGFnMTIudHh0CkBAIC0wLDAgKzEsMzUgQEAKK1BzaUphdmFGaWxlOlNlZVRhZzEyLmphdmEKKyAgUHNpSW1wb3J0TGlzdAorICAgIDxlbXB0eSBsaXN0PgorICBQc2lDbGFzczpDCisgICAgUHNpRG9jQ29tbWVudAorICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfTEVBRElOR19BU1RFUklTS1MoJyonKQorICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfREFUQSgnICcpCisgICAgICBQc2lEb2NUYWc6QHNlZQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfVEFHX05BTUUoJ0BzZWUnKQorICAgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgICAgUHNpRWxlbWVudChET0NfTUVUSE9EX09SX0ZJRUxEX1JFRikKKyAgICAgICAgICBQc2lEb2NUb2tlbjpET0NfVEFHX1ZBTFVFX1NIQVJQX1RPS0VOKCcjJykKKyAgICAgICAgICBQc2lEb2NUb2tlbjpET0NfVEFHX1ZBTFVFX1RPS0VOKCd3YWl0JykKKyAgICAgICAgICBQc2lEb2NUb2tlbjpET0NfVEFHX1ZBTFVFX0xQQVJFTignKCcpCisgICAgICAgICAgUHNpRWxlbWVudChET0NfVEFHX1ZBTFVFX0VMRU1FTlQpCisgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgICBQc2lEb2NUb2tlbjpET0NfVEFHX1ZBTFVFX1JQQVJFTignKScpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgUHNpV2hpdGVTcGFjZSgnXG4nKQorICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaUtleXdvcmQ6Y2xhc3MoJ2NsYXNzJykKKyAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICBQc2lJZGVudGlmaWVyOkMoJ0MnKQorICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2phdmFkb2NQYXJzaW5nL1NlZVRhZzEzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2phdmFkb2NQYXJzaW5nL1NlZVRhZzEzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGNkZGExZAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvamF2YWRvY1BhcnNpbmcvU2VlVGFnMTMuamF2YQpAQCAtMCwwICsxLDQgQEAKKy8qKgorICogQHNlZSA8YSBocmVmPSJwYWNrYWdlLXN1bW1hcnkuaHRtbCNjaGFyZW5jIj5DaGFyYWN0ZXIgZW5jb2RpbmdzPC9hPgorICovCitjbGFzcyBDe30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2phdmFkb2NQYXJzaW5nL1NlZVRhZzEzLnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvamF2YWRvY1BhcnNpbmcvU2VlVGFnMTMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVhYmZhN2UKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2phdmFkb2NQYXJzaW5nL1NlZVRhZzEzLnR4dApAQCAtMCwwICsxLDI5IEBACitQc2lKYXZhRmlsZTpTZWVUYWcxMy5qYXZhCisgIFBzaUltcG9ydExpc3QKKyAgICA8ZW1wdHkgbGlzdD4KKyAgUHNpQ2xhc3M6QworICAgIFBzaURvY0NvbW1lbnQKKyAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0xFQURJTkdfQVNURVJJU0tTKCcqJykKKyAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0RBVEEoJyAnKQorICAgICAgUHNpRG9jVGFnOkBzZWUKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX1RBR19OQU1FKCdAc2VlJykKKyAgICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0RBVEEoJzxhIGhyZWY9InBhY2thZ2Utc3VtbWFyeS5odG1sI2NoYXJlbmMiPkNoYXJhY3RlciBlbmNvZGluZ3M8L2E+JykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcbicpCisgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpS2V5d29yZDpjbGFzcygnY2xhc3MnKQorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaUlkZW50aWZpZXI6QygnQycpCisgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvamF2YWRvY1BhcnNpbmcvU2VlVGFnMTQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvamF2YWRvY1BhcnNpbmcvU2VlVGFnMTQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYmY4NWExCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9qYXZhZG9jUGFyc2luZy9TZWVUYWcxNC5qYXZhCkBAIC0wLDAgKzEsNCBAQAorLyoqCisgKiBAc2VlIGphdmEubGFuZy5TdHJpbmdCdWZmZXIjYXBwZW5kKGNoYXJbXSkKKyAqLworY2xhc3MgQ3t9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9qYXZhZG9jUGFyc2luZy9TZWVUYWcxNC50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2phdmFkb2NQYXJzaW5nL1NlZVRhZzE0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOGY5MDQ3Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9qYXZhZG9jUGFyc2luZy9TZWVUYWcxNC50eHQKQEAgLTAsMCArMSw1NSBAQAorUHNpSmF2YUZpbGU6U2VlVGFnMTQuamF2YQorICBQc2lJbXBvcnRMaXN0CisgICAgPGVtcHR5IGxpc3Q+CisgIFBzaUNsYXNzOkMKKyAgICBQc2lEb2NDb21tZW50CisgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9MRUFESU5HX0FTVEVSSVNLUygnKicpCisgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9EQVRBKCcgJykKKyAgICAgIFBzaURvY1RhZzpAc2VlCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19UQUdfTkFNRSgnQHNlZScpCisgICAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgICBQc2lFbGVtZW50KERPQ19NRVRIT0RfT1JfRklFTERfUkVGKQorICAgICAgICAgIFBzaUVsZW1lbnQoRE9DX1JFRkVSRU5DRV9IT0xERVIpCisgICAgICAgICAgICBQc2lKYXZhQ29kZVJlZmVyZW5jZUVsZW1lbnQ6amF2YS5sYW5nLlN0cmluZ0J1ZmZlcgorICAgICAgICAgICAgICBQc2lKYXZhQ29kZVJlZmVyZW5jZUVsZW1lbnQ6amF2YS5sYW5nCisgICAgICAgICAgICAgICAgUHNpSmF2YUNvZGVSZWZlcmVuY2VFbGVtZW50OmphdmEKKyAgICAgICAgICAgICAgICAgIFBzaUlkZW50aWZpZXI6amF2YSgnamF2YScpCisgICAgICAgICAgICAgICAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICAgICAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICAgICAgICAgIFBzaUphdmFUb2tlbjpET1QoJy4nKQorICAgICAgICAgICAgICAgIFBzaUlkZW50aWZpZXI6bGFuZygnbGFuZycpCisgICAgICAgICAgICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgICAgICAgIFBzaUphdmFUb2tlbjpET1QoJy4nKQorICAgICAgICAgICAgICBQc2lJZGVudGlmaWVyOlN0cmluZ0J1ZmZlcignU3RyaW5nQnVmZmVyJykKKyAgICAgICAgICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICAgIFBzaURvY1Rva2VuOkRPQ19UQUdfVkFMVUVfU0hBUlBfVE9LRU4oJyMnKQorICAgICAgICAgIFBzaURvY1Rva2VuOkRPQ19UQUdfVkFMVUVfVE9LRU4oJ2FwcGVuZCcpCisgICAgICAgICAgUHNpRG9jVG9rZW46RE9DX1RBR19WQUxVRV9MUEFSRU4oJygnKQorICAgICAgICAgIFBzaUVsZW1lbnQoRE9DX1RBR19WQUxVRV9FTEVNRU5UKQorICAgICAgICAgICAgUHNpRWxlbWVudChET0NfVFlQRV9IT0xERVIpCisgICAgICAgICAgICAgIFBzaVR5cGVFbGVtZW50OmNoYXJbXQorICAgICAgICAgICAgICAgIFBzaVR5cGVFbGVtZW50OmNoYXIKKyAgICAgICAgICAgICAgICAgIFBzaUtleXdvcmQ6Y2hhcignY2hhcicpCisgICAgICAgICAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDS0VUKCdbJykKKyAgICAgICAgICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNLRVQoJ10nKQorICAgICAgICAgIFBzaURvY1Rva2VuOkRPQ19UQUdfVkFMVUVfUlBBUkVOKCcpJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcbicpCisgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpS2V5d29yZDpjbGFzcygnY2xhc3MnKQorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaUlkZW50aWZpZXI6QygnQycpCisgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvamF2YWRvY1BhcnNpbmcvU2VlVGFnMTUuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvamF2YWRvY1BhcnNpbmcvU2VlVGFnMTUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMTVmZDQxCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9qYXZhZG9jUGFyc2luZy9TZWVUYWcxNS5qYXZhCkBAIC0wLDAgKzEsNCBAQAorLyoqCisgKiBAc2VlIGphdmEubGFuZy5TdHJpbmdCdWZmZXIjYXBwZW5kKGphdmEubGFuZy5PYmplY3QgYXJnMSwgamF2YS5sYW5nLlN0cmluZyBhcmcyKQorICovCitjbGFzcyBDe30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2phdmFkb2NQYXJzaW5nL1NlZVRhZzE1LnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvamF2YWRvY1BhcnNpbmcvU2VlVGFnMTUudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZhNzliODUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2phdmFkb2NQYXJzaW5nL1NlZVRhZzE1LnR4dApAQCAtMCwwICsxLDg3IEBACitQc2lKYXZhRmlsZTpTZWVUYWcxNS5qYXZhCisgIFBzaUltcG9ydExpc3QKKyAgICA8ZW1wdHkgbGlzdD4KKyAgUHNpQ2xhc3M6QworICAgIFBzaURvY0NvbW1lbnQKKyAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0xFQURJTkdfQVNURVJJU0tTKCcqJykKKyAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0RBVEEoJyAnKQorICAgICAgUHNpRG9jVGFnOkBzZWUKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX1RBR19OQU1FKCdAc2VlJykKKyAgICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICAgIFBzaUVsZW1lbnQoRE9DX01FVEhPRF9PUl9GSUVMRF9SRUYpCisgICAgICAgICAgUHNpRWxlbWVudChET0NfUkVGRVJFTkNFX0hPTERFUikKKyAgICAgICAgICAgIFBzaUphdmFDb2RlUmVmZXJlbmNlRWxlbWVudDpqYXZhLmxhbmcuU3RyaW5nQnVmZmVyCisgICAgICAgICAgICAgIFBzaUphdmFDb2RlUmVmZXJlbmNlRWxlbWVudDpqYXZhLmxhbmcKKyAgICAgICAgICAgICAgICBQc2lKYXZhQ29kZVJlZmVyZW5jZUVsZW1lbnQ6amF2YQorICAgICAgICAgICAgICAgICAgUHNpSWRlbnRpZmllcjpqYXZhKCdqYXZhJykKKyAgICAgICAgICAgICAgICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgICAgICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgICAgICAgICAgUHNpSmF2YVRva2VuOkRPVCgnLicpCisgICAgICAgICAgICAgICAgUHNpSWRlbnRpZmllcjpsYW5nKCdsYW5nJykKKyAgICAgICAgICAgICAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICAgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgICAgICAgUHNpSmF2YVRva2VuOkRPVCgnLicpCisgICAgICAgICAgICAgIFBzaUlkZW50aWZpZXI6U3RyaW5nQnVmZmVyKCdTdHJpbmdCdWZmZXInKQorICAgICAgICAgICAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgICAgUHNpRG9jVG9rZW46RE9DX1RBR19WQUxVRV9TSEFSUF9UT0tFTignIycpCisgICAgICAgICAgUHNpRG9jVG9rZW46RE9DX1RBR19WQUxVRV9UT0tFTignYXBwZW5kJykKKyAgICAgICAgICBQc2lEb2NUb2tlbjpET0NfVEFHX1ZBTFVFX0xQQVJFTignKCcpCisgICAgICAgICAgUHNpRWxlbWVudChET0NfVEFHX1ZBTFVFX0VMRU1FTlQpCisgICAgICAgICAgICBQc2lFbGVtZW50KERPQ19UWVBFX0hPTERFUikKKyAgICAgICAgICAgICAgUHNpVHlwZUVsZW1lbnQ6amF2YS5sYW5nLk9iamVjdAorICAgICAgICAgICAgICAgIFBzaUphdmFDb2RlUmVmZXJlbmNlRWxlbWVudDpqYXZhLmxhbmcuT2JqZWN0CisgICAgICAgICAgICAgICAgICBQc2lKYXZhQ29kZVJlZmVyZW5jZUVsZW1lbnQ6amF2YS5sYW5nCisgICAgICAgICAgICAgICAgICAgIFBzaUphdmFDb2RlUmVmZXJlbmNlRWxlbWVudDpqYXZhCisgICAgICAgICAgICAgICAgICAgICAgUHNpSWRlbnRpZmllcjpqYXZhKCdqYXZhJykKKyAgICAgICAgICAgICAgICAgICAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICAgICAgICAgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgUHNpSmF2YVRva2VuOkRPVCgnLicpCisgICAgICAgICAgICAgICAgICAgIFBzaUlkZW50aWZpZXI6bGFuZygnbGFuZycpCisgICAgICAgICAgICAgICAgICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgICAgICAgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgICAgICAgICAgIFBzaUphdmFUb2tlbjpET1QoJy4nKQorICAgICAgICAgICAgICAgICAgUHNpSWRlbnRpZmllcjpPYmplY3QoJ09iamVjdCcpCisgICAgICAgICAgICAgICAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICAgICAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICAgICAgICBQc2lEb2NUb2tlbjpET0NfVEFHX1ZBTFVFX1RPS0VOKCdhcmcxJykKKyAgICAgICAgICAgIFBzaURvY1Rva2VuOkRPQ19UQUdfVkFMVUVfQ09NTUEoJywnKQorICAgICAgICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICAgICAgICBQc2lFbGVtZW50KERPQ19UWVBFX0hPTERFUikKKyAgICAgICAgICAgICAgUHNpVHlwZUVsZW1lbnQ6amF2YS5sYW5nLlN0cmluZworICAgICAgICAgICAgICAgIFBzaUphdmFDb2RlUmVmZXJlbmNlRWxlbWVudDpqYXZhLmxhbmcuU3RyaW5nCisgICAgICAgICAgICAgICAgICBQc2lKYXZhQ29kZVJlZmVyZW5jZUVsZW1lbnQ6amF2YS5sYW5nCisgICAgICAgICAgICAgICAgICAgIFBzaUphdmFDb2RlUmVmZXJlbmNlRWxlbWVudDpqYXZhCisgICAgICAgICAgICAgICAgICAgICAgUHNpSWRlbnRpZmllcjpqYXZhKCdqYXZhJykKKyAgICAgICAgICAgICAgICAgICAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICAgICAgICAgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgUHNpSmF2YVRva2VuOkRPVCgnLicpCisgICAgICAgICAgICAgICAgICAgIFBzaUlkZW50aWZpZXI6bGFuZygnbGFuZycpCisgICAgICAgICAgICAgICAgICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgICAgICAgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgICAgICAgICAgIFBzaUphdmFUb2tlbjpET1QoJy4nKQorICAgICAgICAgICAgICAgICAgUHNpSWRlbnRpZmllcjpTdHJpbmcoJ1N0cmluZycpCisgICAgICAgICAgICAgICAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICAgICAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICAgICAgICBQc2lEb2NUb2tlbjpET0NfVEFHX1ZBTFVFX1RPS0VOKCdhcmcyJykKKyAgICAgICAgICBQc2lEb2NUb2tlbjpET0NfVEFHX1ZBTFVFX1JQQVJFTignKScpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgUHNpV2hpdGVTcGFjZSgnXG4nKQorICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaUtleXdvcmQ6Y2xhc3MoJ2NsYXNzJykKKyAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICBQc2lJZGVudGlmaWVyOkMoJ0MnKQorICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2phdmFkb2NQYXJzaW5nL1NlZVRhZzE2LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2phdmFkb2NQYXJzaW5nL1NlZVRhZzE2LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmQ3NDhlNgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvamF2YWRvY1BhcnNpbmcvU2VlVGFnMTYuamF2YQpAQCAtMCwwICsxLDQgQEAKKy8qKgorICogQHNlZSBTdHJpbmcjZXF1YWxzKGludCwgaW50LCBieXRlW10sIGludCkKKyAqLworY2xhc3MgQ3t9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9qYXZhZG9jUGFyc2luZy9TZWVUYWcxNi50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2phdmFkb2NQYXJzaW5nL1NlZVRhZzE2LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZDFmYTI2Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9qYXZhZG9jUGFyc2luZy9TZWVUYWcxNi50eHQKQEAgLTAsMCArMSw2MCBAQAorUHNpSmF2YUZpbGU6U2VlVGFnMTYuamF2YQorICBQc2lJbXBvcnRMaXN0CisgICAgPGVtcHR5IGxpc3Q+CisgIFBzaUNsYXNzOkMKKyAgICBQc2lEb2NDb21tZW50CisgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9MRUFESU5HX0FTVEVSSVNLUygnKicpCisgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9EQVRBKCcgJykKKyAgICAgIFBzaURvY1RhZzpAc2VlCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19UQUdfTkFNRSgnQHNlZScpCisgICAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgICBQc2lFbGVtZW50KERPQ19NRVRIT0RfT1JfRklFTERfUkVGKQorICAgICAgICAgIFBzaUVsZW1lbnQoRE9DX1JFRkVSRU5DRV9IT0xERVIpCisgICAgICAgICAgICBQc2lKYXZhQ29kZVJlZmVyZW5jZUVsZW1lbnQ6U3RyaW5nCisgICAgICAgICAgICAgIFBzaUlkZW50aWZpZXI6U3RyaW5nKCdTdHJpbmcnKQorICAgICAgICAgICAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgICAgUHNpRG9jVG9rZW46RE9DX1RBR19WQUxVRV9TSEFSUF9UT0tFTignIycpCisgICAgICAgICAgUHNpRG9jVG9rZW46RE9DX1RBR19WQUxVRV9UT0tFTignZXF1YWxzJykKKyAgICAgICAgICBQc2lEb2NUb2tlbjpET0NfVEFHX1ZBTFVFX0xQQVJFTignKCcpCisgICAgICAgICAgUHNpRWxlbWVudChET0NfVEFHX1ZBTFVFX0VMRU1FTlQpCisgICAgICAgICAgICBQc2lFbGVtZW50KERPQ19UWVBFX0hPTERFUikKKyAgICAgICAgICAgICAgUHNpVHlwZUVsZW1lbnQ6aW50CisgICAgICAgICAgICAgICAgUHNpS2V5d29yZDppbnQoJ2ludCcpCisgICAgICAgICAgICBQc2lEb2NUb2tlbjpET0NfVEFHX1ZBTFVFX0NPTU1BKCcsJykKKyAgICAgICAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgICAgICAgUHNpRWxlbWVudChET0NfVFlQRV9IT0xERVIpCisgICAgICAgICAgICAgIFBzaVR5cGVFbGVtZW50OmludAorICAgICAgICAgICAgICAgIFBzaUtleXdvcmQ6aW50KCdpbnQnKQorICAgICAgICAgICAgUHNpRG9jVG9rZW46RE9DX1RBR19WQUxVRV9DT01NQSgnLCcpCisgICAgICAgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgICAgICAgIFBzaUVsZW1lbnQoRE9DX1RZUEVfSE9MREVSKQorICAgICAgICAgICAgICBQc2lUeXBlRWxlbWVudDpieXRlW10KKyAgICAgICAgICAgICAgICBQc2lUeXBlRWxlbWVudDpieXRlCisgICAgICAgICAgICAgICAgICBQc2lLZXl3b3JkOmJ5dGUoJ2J5dGUnKQorICAgICAgICAgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0tFVCgnWycpCisgICAgICAgICAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDS0VUKCddJykKKyAgICAgICAgICAgIFBzaURvY1Rva2VuOkRPQ19UQUdfVkFMVUVfQ09NTUEoJywnKQorICAgICAgICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICAgICAgICBQc2lFbGVtZW50KERPQ19UWVBFX0hPTERFUikKKyAgICAgICAgICAgICAgUHNpVHlwZUVsZW1lbnQ6aW50CisgICAgICAgICAgICAgICAgUHNpS2V5d29yZDppbnQoJ2ludCcpCisgICAgICAgICAgUHNpRG9jVG9rZW46RE9DX1RBR19WQUxVRV9SUEFSRU4oJyknKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuJykKKyAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lLZXl3b3JkOmNsYXNzKCdjbGFzcycpCisgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgUHNpSWRlbnRpZmllcjpDKCdDJykKKyAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9qYXZhZG9jUGFyc2luZy9TZWVUYWcyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2phdmFkb2NQYXJzaW5nL1NlZVRhZzIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45Yjc4NDE4Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9qYXZhZG9jUGFyc2luZy9TZWVUYWcyLmphdmEKQEAgLTAsMCArMSw0IEBACisvKioKKyAqIEBzZWUgU3RyaW5nIAorICovCitjbGFzcyBDe30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2phdmFkb2NQYXJzaW5nL1NlZVRhZzIudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9qYXZhZG9jUGFyc2luZy9TZWVUYWcyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZjBmOWYzCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9qYXZhZG9jUGFyc2luZy9TZWVUYWcyLnR4dApAQCAtMCwwICsxLDMzIEBACitQc2lKYXZhRmlsZTpTZWVUYWcyLmphdmEKKyAgUHNpSW1wb3J0TGlzdAorICAgIDxlbXB0eSBsaXN0PgorICBQc2lDbGFzczpDCisgICAgUHNpRG9jQ29tbWVudAorICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfTEVBRElOR19BU1RFUklTS1MoJyonKQorICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfREFUQSgnICcpCisgICAgICBQc2lEb2NUYWc6QHNlZQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfVEFHX05BTUUoJ0BzZWUnKQorICAgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgICAgUHNpRWxlbWVudChET0NfUkVGRVJFTkNFX0hPTERFUikKKyAgICAgICAgICBQc2lKYXZhQ29kZVJlZmVyZW5jZUVsZW1lbnQ6U3RyaW5nCisgICAgICAgICAgICBQc2lJZGVudGlmaWVyOlN0cmluZygnU3RyaW5nJykKKyAgICAgICAgICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lXaGl0ZVNwYWNlKCcgXG4gJykKKyAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuJykKKyAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lLZXl3b3JkOmNsYXNzKCdjbGFzcycpCisgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgUHNpSWRlbnRpZmllcjpDKCdDJykKKyAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9qYXZhZG9jUGFyc2luZy9TZWVUYWczLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2phdmFkb2NQYXJzaW5nL1NlZVRhZzMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZWQ0ZjA3Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9qYXZhZG9jUGFyc2luZy9TZWVUYWczLmphdmEKQEAgLTAsMCArMSw0IEBACisvKioKKyAqIEBzZWUgU3RyaW5nI2VxdWFscyhPYmplY3QpCisgKi8KK2NsYXNzIEN7fQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvamF2YWRvY1BhcnNpbmcvU2VlVGFnMy50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2phdmFkb2NQYXJzaW5nL1NlZVRhZzMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYwMThjNWEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2phdmFkb2NQYXJzaW5nL1NlZVRhZzMudHh0CkBAIC0wLDAgKzEsNDUgQEAKK1BzaUphdmFGaWxlOlNlZVRhZzMuamF2YQorICBQc2lJbXBvcnRMaXN0CisgICAgPGVtcHR5IGxpc3Q+CisgIFBzaUNsYXNzOkMKKyAgICBQc2lEb2NDb21tZW50CisgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9MRUFESU5HX0FTVEVSSVNLUygnKicpCisgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9EQVRBKCcgJykKKyAgICAgIFBzaURvY1RhZzpAc2VlCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19UQUdfTkFNRSgnQHNlZScpCisgICAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgICBQc2lFbGVtZW50KERPQ19NRVRIT0RfT1JfRklFTERfUkVGKQorICAgICAgICAgIFBzaUVsZW1lbnQoRE9DX1JFRkVSRU5DRV9IT0xERVIpCisgICAgICAgICAgICBQc2lKYXZhQ29kZVJlZmVyZW5jZUVsZW1lbnQ6U3RyaW5nCisgICAgICAgICAgICAgIFBzaUlkZW50aWZpZXI6U3RyaW5nKCdTdHJpbmcnKQorICAgICAgICAgICAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgICAgUHNpRG9jVG9rZW46RE9DX1RBR19WQUxVRV9TSEFSUF9UT0tFTignIycpCisgICAgICAgICAgUHNpRG9jVG9rZW46RE9DX1RBR19WQUxVRV9UT0tFTignZXF1YWxzJykKKyAgICAgICAgICBQc2lEb2NUb2tlbjpET0NfVEFHX1ZBTFVFX0xQQVJFTignKCcpCisgICAgICAgICAgUHNpRWxlbWVudChET0NfVEFHX1ZBTFVFX0VMRU1FTlQpCisgICAgICAgICAgICBQc2lFbGVtZW50KERPQ19UWVBFX0hPTERFUikKKyAgICAgICAgICAgICAgUHNpVHlwZUVsZW1lbnQ6T2JqZWN0CisgICAgICAgICAgICAgICAgUHNpSmF2YUNvZGVSZWZlcmVuY2VFbGVtZW50Ok9iamVjdAorICAgICAgICAgICAgICAgICAgUHNpSWRlbnRpZmllcjpPYmplY3QoJ09iamVjdCcpCisgICAgICAgICAgICAgICAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICAgICAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICAgIFBzaURvY1Rva2VuOkRPQ19UQUdfVkFMVUVfUlBBUkVOKCcpJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcbicpCisgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpS2V5d29yZDpjbGFzcygnY2xhc3MnKQorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaUlkZW50aWZpZXI6QygnQycpCisgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvamF2YWRvY1BhcnNpbmcvU2VlVGFnNC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9qYXZhZG9jUGFyc2luZy9TZWVUYWc0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzgzZWI0NwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvamF2YWRvY1BhcnNpbmcvU2VlVGFnNC5qYXZhCkBAIC0wLDAgKzEsNCBAQAorLyoqCisgKiBAc2VlIFN0cmluZyNlcXVhbHMKKyAqLworY2xhc3MgQ3t9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9qYXZhZG9jUGFyc2luZy9TZWVUYWc0LnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvamF2YWRvY1BhcnNpbmcvU2VlVGFnNC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjgzZmYxNgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvamF2YWRvY1BhcnNpbmcvU2VlVGFnNC50eHQKQEAgLTAsMCArMSwzNiBAQAorUHNpSmF2YUZpbGU6U2VlVGFnNC5qYXZhCisgIFBzaUltcG9ydExpc3QKKyAgICA8ZW1wdHkgbGlzdD4KKyAgUHNpQ2xhc3M6QworICAgIFBzaURvY0NvbW1lbnQKKyAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0xFQURJTkdfQVNURVJJU0tTKCcqJykKKyAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0RBVEEoJyAnKQorICAgICAgUHNpRG9jVGFnOkBzZWUKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX1RBR19OQU1FKCdAc2VlJykKKyAgICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICAgIFBzaUVsZW1lbnQoRE9DX01FVEhPRF9PUl9GSUVMRF9SRUYpCisgICAgICAgICAgUHNpRWxlbWVudChET0NfUkVGRVJFTkNFX0hPTERFUikKKyAgICAgICAgICAgIFBzaUphdmFDb2RlUmVmZXJlbmNlRWxlbWVudDpTdHJpbmcKKyAgICAgICAgICAgICAgUHNpSWRlbnRpZmllcjpTdHJpbmcoJ1N0cmluZycpCisgICAgICAgICAgICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgICBQc2lEb2NUb2tlbjpET0NfVEFHX1ZBTFVFX1NIQVJQX1RPS0VOKCcjJykKKyAgICAgICAgICBQc2lEb2NUb2tlbjpET0NfVEFHX1ZBTFVFX1RPS0VOKCdlcXVhbHMnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuJykKKyAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lLZXl3b3JkOmNsYXNzKCdjbGFzcycpCisgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgUHNpSWRlbnRpZmllcjpDKCdDJykKKyAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9qYXZhZG9jUGFyc2luZy9TZWVUYWc1LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2phdmFkb2NQYXJzaW5nL1NlZVRhZzUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYzQ2ZmEyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9qYXZhZG9jUGFyc2luZy9TZWVUYWc1LmphdmEKQEAgLTAsMCArMSw0IEBACisvKioKKyAqIEBzZWUgamF2YS5sYW5nLk9iamVjdCN3YWl0KGxvbmcpCisgKi8KK2NsYXNzIEN7fQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvamF2YWRvY1BhcnNpbmcvU2VlVGFnNS50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2phdmFkb2NQYXJzaW5nL1NlZVRhZzUudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk5MDNlN2MKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2phdmFkb2NQYXJzaW5nL1NlZVRhZzUudHh0CkBAIC0wLDAgKzEsNTIgQEAKK1BzaUphdmFGaWxlOlNlZVRhZzUuamF2YQorICBQc2lJbXBvcnRMaXN0CisgICAgPGVtcHR5IGxpc3Q+CisgIFBzaUNsYXNzOkMKKyAgICBQc2lEb2NDb21tZW50CisgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9MRUFESU5HX0FTVEVSSVNLUygnKicpCisgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9EQVRBKCcgJykKKyAgICAgIFBzaURvY1RhZzpAc2VlCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19UQUdfTkFNRSgnQHNlZScpCisgICAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgICBQc2lFbGVtZW50KERPQ19NRVRIT0RfT1JfRklFTERfUkVGKQorICAgICAgICAgIFBzaUVsZW1lbnQoRE9DX1JFRkVSRU5DRV9IT0xERVIpCisgICAgICAgICAgICBQc2lKYXZhQ29kZVJlZmVyZW5jZUVsZW1lbnQ6amF2YS5sYW5nLk9iamVjdAorICAgICAgICAgICAgICBQc2lKYXZhQ29kZVJlZmVyZW5jZUVsZW1lbnQ6amF2YS5sYW5nCisgICAgICAgICAgICAgICAgUHNpSmF2YUNvZGVSZWZlcmVuY2VFbGVtZW50OmphdmEKKyAgICAgICAgICAgICAgICAgIFBzaUlkZW50aWZpZXI6amF2YSgnamF2YScpCisgICAgICAgICAgICAgICAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICAgICAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICAgICAgICAgIFBzaUphdmFUb2tlbjpET1QoJy4nKQorICAgICAgICAgICAgICAgIFBzaUlkZW50aWZpZXI6bGFuZygnbGFuZycpCisgICAgICAgICAgICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgICAgICAgIFBzaUphdmFUb2tlbjpET1QoJy4nKQorICAgICAgICAgICAgICBQc2lJZGVudGlmaWVyOk9iamVjdCgnT2JqZWN0JykKKyAgICAgICAgICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICAgIFBzaURvY1Rva2VuOkRPQ19UQUdfVkFMVUVfU0hBUlBfVE9LRU4oJyMnKQorICAgICAgICAgIFBzaURvY1Rva2VuOkRPQ19UQUdfVkFMVUVfVE9LRU4oJ3dhaXQnKQorICAgICAgICAgIFBzaURvY1Rva2VuOkRPQ19UQUdfVkFMVUVfTFBBUkVOKCcoJykKKyAgICAgICAgICBQc2lFbGVtZW50KERPQ19UQUdfVkFMVUVfRUxFTUVOVCkKKyAgICAgICAgICAgIFBzaUVsZW1lbnQoRE9DX1RZUEVfSE9MREVSKQorICAgICAgICAgICAgICBQc2lUeXBlRWxlbWVudDpsb25nCisgICAgICAgICAgICAgICAgUHNpS2V5d29yZDpsb25nKCdsb25nJykKKyAgICAgICAgICBQc2lEb2NUb2tlbjpET0NfVEFHX1ZBTFVFX1JQQVJFTignKScpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgUHNpV2hpdGVTcGFjZSgnXG4nKQorICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaUtleXdvcmQ6Y2xhc3MoJ2NsYXNzJykKKyAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICBQc2lJZGVudGlmaWVyOkMoJ0MnKQorICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2phdmFkb2NQYXJzaW5nL1NlZVRhZzYuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvamF2YWRvY1BhcnNpbmcvU2VlVGFnNi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBhNjZlMDkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2phdmFkb2NQYXJzaW5nL1NlZVRhZzYuamF2YQpAQCAtMCwwICsxLDQgQEAKKy8qKgorICogQHNlZSBDaGFyYWN0ZXIjTUFYX1JBRElYCisgKi8KK2NsYXNzIEN7fQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvamF2YWRvY1BhcnNpbmcvU2VlVGFnNi50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2phdmFkb2NQYXJzaW5nL1NlZVRhZzYudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNhYzNhZTAKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2phdmFkb2NQYXJzaW5nL1NlZVRhZzYudHh0CkBAIC0wLDAgKzEsMzYgQEAKK1BzaUphdmFGaWxlOlNlZVRhZzYuamF2YQorICBQc2lJbXBvcnRMaXN0CisgICAgPGVtcHR5IGxpc3Q+CisgIFBzaUNsYXNzOkMKKyAgICBQc2lEb2NDb21tZW50CisgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9MRUFESU5HX0FTVEVSSVNLUygnKicpCisgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9EQVRBKCcgJykKKyAgICAgIFBzaURvY1RhZzpAc2VlCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19UQUdfTkFNRSgnQHNlZScpCisgICAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgICBQc2lFbGVtZW50KERPQ19NRVRIT0RfT1JfRklFTERfUkVGKQorICAgICAgICAgIFBzaUVsZW1lbnQoRE9DX1JFRkVSRU5DRV9IT0xERVIpCisgICAgICAgICAgICBQc2lKYXZhQ29kZVJlZmVyZW5jZUVsZW1lbnQ6Q2hhcmFjdGVyCisgICAgICAgICAgICAgIFBzaUlkZW50aWZpZXI6Q2hhcmFjdGVyKCdDaGFyYWN0ZXInKQorICAgICAgICAgICAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgICAgUHNpRG9jVG9rZW46RE9DX1RBR19WQUxVRV9TSEFSUF9UT0tFTignIycpCisgICAgICAgICAgUHNpRG9jVG9rZW46RE9DX1RBR19WQUxVRV9UT0tFTignTUFYX1JBRElYJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcbicpCisgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpS2V5d29yZDpjbGFzcygnY2xhc3MnKQorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaUlkZW50aWZpZXI6QygnQycpCisgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvamF2YWRvY1BhcnNpbmcvU2VlVGFnNy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9qYXZhZG9jUGFyc2luZy9TZWVUYWc3LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2FhMDk3YgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvamF2YWRvY1BhcnNpbmcvU2VlVGFnNy5qYXZhCkBAIC0wLDAgKzEsNCBAQAorLyoqCisgKiBAc2VlIDxhIGhyZWY9InNwZWMuaHRtbCI+SmF2YSBTcGVjPC9hPgorICovCitjbGFzcyBDe30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2phdmFkb2NQYXJzaW5nL1NlZVRhZzcudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9qYXZhZG9jUGFyc2luZy9TZWVUYWc3LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45Y2QyMThkCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9qYXZhZG9jUGFyc2luZy9TZWVUYWc3LnR4dApAQCAtMCwwICsxLDI5IEBACitQc2lKYXZhRmlsZTpTZWVUYWc3LmphdmEKKyAgUHNpSW1wb3J0TGlzdAorICAgIDxlbXB0eSBsaXN0PgorICBQc2lDbGFzczpDCisgICAgUHNpRG9jQ29tbWVudAorICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfTEVBRElOR19BU1RFUklTS1MoJyonKQorICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfREFUQSgnICcpCisgICAgICBQc2lEb2NUYWc6QHNlZQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfVEFHX05BTUUoJ0BzZWUnKQorICAgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfREFUQSgnPGEgaHJlZj0ic3BlYy5odG1sIj5KYXZhIFNwZWM8L2E+JykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcbicpCisgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpS2V5d29yZDpjbGFzcygnY2xhc3MnKQorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaUlkZW50aWZpZXI6QygnQycpCisgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvamF2YWRvY1BhcnNpbmcvU2VlVGFnOC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9qYXZhZG9jUGFyc2luZy9TZWVUYWc4LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGZkNTE3MQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvamF2YWRvY1BhcnNpbmcvU2VlVGFnOC5qYXZhCkBAIC0wLDAgKzEsNCBAQAorLyoqCisgKiBAc2VlICJUaGUgSmF2YSBQcm9ncmFtbWluZyBMYW5ndWFnZSIgCisgKi8KK2NsYXNzIEN7fQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvamF2YWRvY1BhcnNpbmcvU2VlVGFnOC50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2phdmFkb2NQYXJzaW5nL1NlZVRhZzgudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI2MTc1ZjUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2phdmFkb2NQYXJzaW5nL1NlZVRhZzgudHh0CkBAIC0wLDAgKzEsMjkgQEAKK1BzaUphdmFGaWxlOlNlZVRhZzguamF2YQorICBQc2lJbXBvcnRMaXN0CisgICAgPGVtcHR5IGxpc3Q+CisgIFBzaUNsYXNzOkMKKyAgICBQc2lEb2NDb21tZW50CisgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9MRUFESU5HX0FTVEVSSVNLUygnKicpCisgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9EQVRBKCcgJykKKyAgICAgIFBzaURvY1RhZzpAc2VlCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19UQUdfTkFNRSgnQHNlZScpCisgICAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9EQVRBKCciVGhlIEphdmEgUHJvZ3JhbW1pbmcgTGFuZ3VhZ2UiICcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgUHNpV2hpdGVTcGFjZSgnXG4nKQorICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaUtleXdvcmQ6Y2xhc3MoJ2NsYXNzJykKKyAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICBQc2lJZGVudGlmaWVyOkMoJ0MnKQorICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2phdmFkb2NQYXJzaW5nL1NlZVRhZzkuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvamF2YWRvY1BhcnNpbmcvU2VlVGFnOS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVkZTAzMDIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2phdmFkb2NQYXJzaW5nL1NlZVRhZzkuamF2YQpAQCAtMCwwICsxLDQgQEAKKy8qKgorICogQHNlZSBlcXVhbHMobG9uZywgbG9uZykKKyAqLworY2xhc3MgQ3t9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9qYXZhZG9jUGFyc2luZy9TZWVUYWc5LnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvamF2YWRvY1BhcnNpbmcvU2VlVGFnOS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2IyYjEwYQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvamF2YWRvY1BhcnNpbmcvU2VlVGFnOS50eHQKQEAgLTAsMCArMSw0NCBAQAorUHNpSmF2YUZpbGU6U2VlVGFnOS5qYXZhCisgIFBzaUltcG9ydExpc3QKKyAgICA8ZW1wdHkgbGlzdD4KKyAgUHNpQ2xhc3M6QworICAgIFBzaURvY0NvbW1lbnQKKyAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0xFQURJTkdfQVNURVJJU0tTKCcqJykKKyAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0RBVEEoJyAnKQorICAgICAgUHNpRG9jVGFnOkBzZWUKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX1RBR19OQU1FKCdAc2VlJykKKyAgICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICAgIFBzaUVsZW1lbnQoRE9DX1JFRkVSRU5DRV9IT0xERVIpCisgICAgICAgICAgUHNpSmF2YUNvZGVSZWZlcmVuY2VFbGVtZW50OmVxdWFscworICAgICAgICAgICAgUHNpSWRlbnRpZmllcjplcXVhbHMoJ2VxdWFscycpCisgICAgICAgICAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICBQc2lFbGVtZW50KERPQ19UQUdfVkFMVUVfRUxFTUVOVCkKKyAgICAgICAgICBQc2lEb2NUb2tlbjpET0NfVEFHX1ZBTFVFX0xQQVJFTignKCcpCisgICAgICAgIFBzaUVsZW1lbnQoRE9DX1JFRkVSRU5DRV9IT0xERVIpCisgICAgICAgICAgUHNpS2V5d29yZDpsb25nKCdsb25nJykKKyAgICAgICAgUHNpRWxlbWVudChET0NfVEFHX1ZBTFVFX0VMRU1FTlQpCisgICAgICAgICAgUHNpRG9jVG9rZW46RE9DX1RBR19WQUxVRV9DT01NQSgnLCcpCisgICAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgICBQc2lFbGVtZW50KERPQ19SRUZFUkVOQ0VfSE9MREVSKQorICAgICAgICAgIFBzaUtleXdvcmQ6bG9uZygnbG9uZycpCisgICAgICAgIFBzaUVsZW1lbnQoRE9DX1RBR19WQUxVRV9FTEVNRU5UKQorICAgICAgICAgIFBzaURvY1Rva2VuOkRPQ19UQUdfVkFMVUVfUlBBUkVOKCcpJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcbicpCisgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpS2V5d29yZDpjbGFzcygnY2xhc3MnKQorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaUlkZW50aWZpZXI6QygnQycpCisgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvamF2YWRvY1BhcnNpbmcvU2VwYXJhdGVkMDEuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvamF2YWRvY1BhcnNpbmcvU2VwYXJhdGVkMDEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMDFlYTdiCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9qYXZhZG9jUGFyc2luZy9TZXBhcmF0ZWQwMS5qYXZhCkBAIC0wLDAgKzEsOCBAQAorY2xhc3MgWHsKKyAgLyoqCisgICAqIFRoZSBtZXRob2QuCisgICAqLworICAvLyBDb21tZW50CisgIC8qIEFub3RoZXIgY29tbWVudCAqLworICB2b2lkIGYoKXt9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2phdmFkb2NQYXJzaW5nL1NlcGFyYXRlZDAxLnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvamF2YWRvY1BhcnNpbmcvU2VwYXJhdGVkMDEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU1M2M4MDAKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2phdmFkb2NQYXJzaW5nL1NlcGFyYXRlZDAxLnR4dApAQCAtMCwwICsxLDQ4IEBACitQc2lKYXZhRmlsZTpTZXBhcmF0ZWQwMS5qYXZhCisgIFBzaUltcG9ydExpc3QKKyAgICA8ZW1wdHkgbGlzdD4KKyAgUHNpQ2xhc3M6WAorICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaUtleXdvcmQ6Y2xhc3MoJ2NsYXNzJykKKyAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICBQc2lJZGVudGlmaWVyOlgoJ1gnKQorICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcbiAgJykKKyAgICBQc2lNZXRob2Q6ZgorICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gICAnKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9MRUFESU5HX0FTVEVSSVNLUygnKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0RBVEEoJyBUaGUgbWV0aG9kLicpCisgICAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICAgJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAgJykKKyAgICAgIFBzaUNvbW1lbnQoRU5EX09GX0xJTkVfQ09NTUVOVCkoJy8vIENvbW1lbnQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gICcpCisgICAgICBQc2lDb21tZW50KENfU1RZTEVfQ09NTUVOVCkoJy8qIEFub3RoZXIgY29tbWVudCAqLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAgJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmKCdmJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuJykKKyAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2phdmFkb2NQYXJzaW5nL1N5bWJvbHMwMS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9qYXZhZG9jUGFyc2luZy9TeW1ib2xzMDEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MTc1N2IwCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9qYXZhZG9jUGFyc2luZy9TeW1ib2xzMDEuamF2YQpAQCAtMCwwICsxLDUgQEAKKy8qKgorICogfmAhQCMkJV4mKigpXyt8XD0tfXtbXSI6Oyc/PjwsLi8KKyAqLworCitjbGFzcyBYe30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvamF2YWRvY1BhcnNpbmcvU3ltYm9sczAxLnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvamF2YWRvY1BhcnNpbmcvU3ltYm9sczAxLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NjFjYzM3Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9qYXZhZG9jUGFyc2luZy9TeW1ib2xzMDEudHh0CkBAIC0wLDAgKzEsMjggQEAKK1BzaUphdmFGaWxlOlN5bWJvbHMwMS5qYXZhCisgIFBzaUltcG9ydExpc3QKKyAgICA8ZW1wdHkgbGlzdD4KKyAgUHNpQ2xhc3M6WAorICAgIFBzaURvY0NvbW1lbnQKKyAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0xFQURJTkdfQVNURVJJU0tTKCcqJykKKyAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0RBVEEoJyB+YCFAIyQlXiYqKClfK3xcPS0nKQorICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfREFUQSgnfScpCisgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9EQVRBKCd7JykKKyAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0RBVEEoJ1tdIjo7Jz8+PCwuLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbicpCisgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpS2V5d29yZDpjbGFzcygnY2xhc3MnKQorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaUlkZW50aWZpZXI6WCgnWCcpCisgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvamF2YWRvY1BhcnNpbmcvU3ltYm9sczAyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2phdmFkb2NQYXJzaW5nL1N5bWJvbHMwMi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM2YTZkMzIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2phdmFkb2NQYXJzaW5nL1N5bWJvbHMwMi5qYXZhCkBAIC0wLDAgKzEsNSBAQAorLyoqCisgKiBAc2VlIE9iamVjdCB+YCFAIyQlXiYqKClfK3xcPS19e1tdIjo7Jz8+PCwuLworICovCisKK2NsYXNzIFh7fQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9qYXZhZG9jUGFyc2luZy9TeW1ib2xzMDIudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9qYXZhZG9jUGFyc2luZy9TeW1ib2xzMDIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc5NmY0ZjcKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2phdmFkb2NQYXJzaW5nL1N5bWJvbHMwMi50eHQKQEAgLTAsMCArMSwzOCBAQAorUHNpSmF2YUZpbGU6U3ltYm9sczAyLmphdmEKKyAgUHNpSW1wb3J0TGlzdAorICAgIDxlbXB0eSBsaXN0PgorICBQc2lDbGFzczpYCisgICAgUHNpRG9jQ29tbWVudAorICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfTEVBRElOR19BU1RFUklTS1MoJyonKQorICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfREFUQSgnICcpCisgICAgICBQc2lEb2NUYWc6QHNlZQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfVEFHX05BTUUoJ0BzZWUnKQorICAgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgICAgUHNpRWxlbWVudChET0NfUkVGRVJFTkNFX0hPTERFUikKKyAgICAgICAgICBQc2lKYXZhQ29kZVJlZmVyZW5jZUVsZW1lbnQ6T2JqZWN0CisgICAgICAgICAgICBQc2lJZGVudGlmaWVyOk9iamVjdCgnT2JqZWN0JykKKyAgICAgICAgICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9EQVRBKCd+YCFAIyQlXiYqKClfK3xcPS0nKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9EQVRBKCd9JykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfREFUQSgneycpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0RBVEEoJ1tdIjo7Jz8+PCwuLycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbicpCisgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpS2V5d29yZDpjbGFzcygnY2xhc3MnKQorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaUlkZW50aWZpZXI6WCgnWCcpCisgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvamF2YWRvY1BhcnNpbmcvU3ltYm9sczAzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2phdmFkb2NQYXJzaW5nL1N5bWJvbHMwMy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc1YzhjOWEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2phdmFkb2NQYXJzaW5nL1N5bWJvbHMwMy5qYXZhCkBAIC0wLDAgKzEsNSBAQAorLyoqCisgKiB7QGxpbmsgT2JqZWN0IH5gIUAjJCVeJiooKV8rfFw9LX17W10iOjsnPz48LC4vCisgKi8KKworY2xhc3MgWHt9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2phdmFkb2NQYXJzaW5nL1N5bWJvbHMwMy50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2phdmFkb2NQYXJzaW5nL1N5bWJvbHMwMy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjRlYjA2NgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvamF2YWRvY1BhcnNpbmcvU3ltYm9sczAzLnR4dApAQCAtMCwwICsxLDM5IEBACitQc2lKYXZhRmlsZTpTeW1ib2xzMDMuamF2YQorICBQc2lJbXBvcnRMaXN0CisgICAgPGVtcHR5IGxpc3Q+CisgIFBzaUNsYXNzOlgKKyAgICBQc2lEb2NDb21tZW50CisgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9MRUFESU5HX0FTVEVSSVNLUygnKicpCisgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9EQVRBKCcgJykKKyAgICAgIFBzaUlubGluZURvY1RhZzpAbGluaworICAgICAgICBQc2lEb2NUb2tlbjpET0NfSU5MSU5FX1RBR19TVEFSVCgneycpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19UQUdfTkFNRSgnQGxpbmsnKQorICAgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgICAgUHNpRWxlbWVudChET0NfUkVGRVJFTkNFX0hPTERFUikKKyAgICAgICAgICBQc2lKYXZhQ29kZVJlZmVyZW5jZUVsZW1lbnQ6T2JqZWN0CisgICAgICAgICAgICBQc2lJZGVudGlmaWVyOk9iamVjdCgnT2JqZWN0JykKKyAgICAgICAgICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9EQVRBKCd+YCFAIyQlXiYqKClfK3xcPS0nKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfSU5MSU5FX1RBR19FTkQoJ30nKQorICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfREFUQSgneycpCisgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9EQVRBKCdbXSI6Oyc/PjwsLi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4nKQorICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaUtleXdvcmQ6Y2xhc3MoJ2NsYXNzJykKKyAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICBQc2lJZGVudGlmaWVyOlgoJ1gnKQorICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2phdmFkb2NQYXJzaW5nL1N5bWJvbHMwNC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9qYXZhZG9jUGFyc2luZy9TeW1ib2xzMDQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZWZjNjc5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9qYXZhZG9jUGFyc2luZy9TeW1ib2xzMDQuamF2YQpAQCAtMCwwICsxLDUgQEAKKy8qKgorICoge0BsaW5rIE9iamVjdCB+YCFAIyQlXiYqKClfK3xcPS17fVtdIjo7Jz8+PCwuLworICovCisKK2NsYXNzIFh7fQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9qYXZhZG9jUGFyc2luZy9TeW1ib2xzMDQudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9qYXZhZG9jUGFyc2luZy9TeW1ib2xzMDQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY3NWM0MDMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2phdmFkb2NQYXJzaW5nL1N5bWJvbHMwNC50eHQKQEAgLTAsMCArMSwzOSBAQAorUHNpSmF2YUZpbGU6U3ltYm9sczA0LmphdmEKKyAgUHNpSW1wb3J0TGlzdAorICAgIDxlbXB0eSBsaXN0PgorICBQc2lDbGFzczpYCisgICAgUHNpRG9jQ29tbWVudAorICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfTEVBRElOR19BU1RFUklTS1MoJyonKQorICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfREFUQSgnICcpCisgICAgICBQc2lJbmxpbmVEb2NUYWc6QGxpbmsKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0lOTElORV9UQUdfU1RBUlQoJ3snKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfVEFHX05BTUUoJ0BsaW5rJykKKyAgICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICAgIFBzaUVsZW1lbnQoRE9DX1JFRkVSRU5DRV9IT0xERVIpCisgICAgICAgICAgUHNpSmF2YUNvZGVSZWZlcmVuY2VFbGVtZW50Ok9iamVjdAorICAgICAgICAgICAgUHNpSWRlbnRpZmllcjpPYmplY3QoJ09iamVjdCcpCisgICAgICAgICAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfREFUQSgnfmAhQCMkJV4mKigpXyt8XD0tJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfREFUQSgneycpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0RBVEEoJ30nKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9EQVRBKCdbXSI6Oyc/PjwsLi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4nKQorICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaUtleXdvcmQ6Y2xhc3MoJ2NsYXNzJykKKyAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICBQc2lJZGVudGlmaWVyOlgoJ1gnKQorICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2phdmFkb2NQYXJzaW5nL1N5bWJvbHMwNS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9qYXZhZG9jUGFyc2luZy9TeW1ib2xzMDUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zODNlMzY2NwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvamF2YWRvY1BhcnNpbmcvU3ltYm9sczA1LmphdmEKQEAgLTAsMCArMSw1IEBACisvKioKKyAqIHtAbGluayBPYmplY3QgfmAhQCMkJV4mKigpXyt8XD0te31bXSI6Oyc/PjwsLi99IFllcyEKKyAqLworCitjbGFzcyBYe30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvamF2YWRvY1BhcnNpbmcvU3ltYm9sczA1LnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvamF2YWRvY1BhcnNpbmcvU3ltYm9sczA1LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NTliOWI2Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9qYXZhZG9jUGFyc2luZy9TeW1ib2xzMDUudHh0CkBAIC0wLDAgKzEsNDEgQEAKK1BzaUphdmFGaWxlOlN5bWJvbHMwNS5qYXZhCisgIFBzaUltcG9ydExpc3QKKyAgICA8ZW1wdHkgbGlzdD4KKyAgUHNpQ2xhc3M6WAorICAgIFBzaURvY0NvbW1lbnQKKyAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0xFQURJTkdfQVNURVJJU0tTKCcqJykKKyAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0RBVEEoJyAnKQorICAgICAgUHNpSW5saW5lRG9jVGFnOkBsaW5rCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19JTkxJTkVfVEFHX1NUQVJUKCd7JykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX1RBR19OQU1FKCdAbGluaycpCisgICAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgICBQc2lFbGVtZW50KERPQ19SRUZFUkVOQ0VfSE9MREVSKQorICAgICAgICAgIFBzaUphdmFDb2RlUmVmZXJlbmNlRWxlbWVudDpPYmplY3QKKyAgICAgICAgICAgIFBzaUlkZW50aWZpZXI6T2JqZWN0KCdPYmplY3QnKQorICAgICAgICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0RBVEEoJ35gIUAjJCVeJiooKV8rfFw9LScpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0RBVEEoJ3snKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9EQVRBKCd9JykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfREFUQSgnW10iOjsnPz48LC4vJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0lOTElORV9UQUdfRU5EKCd9JykKKyAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0RBVEEoJyBZZXMhJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuJykKKyAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lLZXl3b3JkOmNsYXNzKCdjbGFzcycpCisgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgUHNpSWRlbnRpZmllcjpYKCdYJykKKyAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9qYXZhZG9jUGFyc2luZy9UYWcwLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2phdmFkb2NQYXJzaW5nL1RhZzAuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNWE2ZGI5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9qYXZhZG9jUGFyc2luZy9UYWcwLmphdmEKQEAgLTAsMCArMSw0IEBACisvKioKKyAqIEBwYXJhbSBwYXJhbQorICovCitjbGFzcyBDe30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2phdmFkb2NQYXJzaW5nL1RhZzAudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9qYXZhZG9jUGFyc2luZy9UYWcwLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZjZhNGIxCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9qYXZhZG9jUGFyc2luZy9UYWcwLnR4dApAQCAtMCwwICsxLDMwIEBACitQc2lKYXZhRmlsZTpUYWcwLmphdmEKKyAgUHNpSW1wb3J0TGlzdAorICAgIDxlbXB0eSBsaXN0PgorICBQc2lDbGFzczpDCisgICAgUHNpRG9jQ29tbWVudAorICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfTEVBRElOR19BU1RFUklTS1MoJyonKQorICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfREFUQSgnICcpCisgICAgICBQc2lEb2NUYWc6QHBhcmFtCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19UQUdfTkFNRSgnQHBhcmFtJykKKyAgICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICAgIFBzaUVsZW1lbnQoRE9DX1BBUkFNRVRFUl9SRUYpCisgICAgICAgICAgUHNpRG9jVG9rZW46RE9DX1RBR19WQUxVRV9UT0tFTigncGFyYW0nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuJykKKyAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lLZXl3b3JkOmNsYXNzKCdjbGFzcycpCisgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgUHNpSWRlbnRpZmllcjpDKCdDJykKKyAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2phdmFkb2NQYXJzaW5nL1RhZzEuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvamF2YWRvY1BhcnNpbmcvVGFnMS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFjMjJiNGUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2phdmFkb2NQYXJzaW5nL1RhZzEuamF2YQpAQCAtMCwwICsxLDQgQEAKKy8qKgorICogQHBhcmFtCisgKi8KK2NsYXNzIEN7fQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvamF2YWRvY1BhcnNpbmcvVGFnMS50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2phdmFkb2NQYXJzaW5nL1RhZzEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEwNTFmMmQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2phdmFkb2NQYXJzaW5nL1RhZzEudHh0CkBAIC0wLDAgKzEsMjcgQEAKK1BzaUphdmFGaWxlOlRhZzEuamF2YQorICBQc2lJbXBvcnRMaXN0CisgICAgPGVtcHR5IGxpc3Q+CisgIFBzaUNsYXNzOkMKKyAgICBQc2lEb2NDb21tZW50CisgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9MRUFESU5HX0FTVEVSSVNLUygnKicpCisgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9EQVRBKCcgJykKKyAgICAgIFBzaURvY1RhZzpAcGFyYW0KKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX1RBR19OQU1FKCdAcGFyYW0nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuJykKKyAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lLZXl3b3JkOmNsYXNzKCdjbGFzcycpCisgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgUHNpSWRlbnRpZmllcjpDKCdDJykKKyAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2phdmFkb2NQYXJzaW5nL1RhZzIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvamF2YWRvY1BhcnNpbmcvVGFnMi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ3ODFlZWIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2phdmFkb2NQYXJzaW5nL1RhZzIuamF2YQpAQCAtMCwwICsxLDYgQEAKKy8qKgorICogQHBhcmFtIHZhbHVlIHZhbHVlIHZhbHVlCisgKiAJdmFsdWUJdmFsdWUKKyAqIEByZXR1cm4gdmFsdWUgdmFsdWUKKyAqLworY2xhc3MgQ3t9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9qYXZhZG9jUGFyc2luZy9UYWcyLnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvamF2YWRvY1BhcnNpbmcvVGFnMi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODMzMDhiYwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvamF2YWRvY1BhcnNpbmcvVGFnMi50eHQKQEAgLTAsMCArMSw0NSBAQAorUHNpSmF2YUZpbGU6VGFnMi5qYXZhCisgIFBzaUltcG9ydExpc3QKKyAgICA8ZW1wdHkgbGlzdD4KKyAgUHNpQ2xhc3M6QworICAgIFBzaURvY0NvbW1lbnQKKyAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0xFQURJTkdfQVNURVJJU0tTKCcqJykKKyAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0RBVEEoJyAnKQorICAgICAgUHNpRG9jVGFnOkBwYXJhbQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfVEFHX05BTUUoJ0BwYXJhbScpCisgICAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgICBQc2lFbGVtZW50KERPQ19QQVJBTUVURVJfUkVGKQorICAgICAgICAgIFBzaURvY1Rva2VuOkRPQ19UQUdfVkFMVUVfVE9LRU4oJ3ZhbHVlJykKKyAgICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0RBVEEoJ3ZhbHVlIHZhbHVlJykKKyAgICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfTEVBRElOR19BU1RFUklTS1MoJyonKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9EQVRBKCcgXHR2YWx1ZVx0dmFsdWUnKQorICAgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9MRUFESU5HX0FTVEVSSVNLUygnKicpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0RBVEEoJyAnKQorICAgICAgUHNpRG9jVGFnOkByZXR1cm4KKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX1RBR19OQU1FKCdAcmV0dXJuJykKKyAgICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICAgIFBzaUVsZW1lbnQoRE9DX1RBR19WQUxVRV9FTEVNRU5UKQorICAgICAgICAgIFBzaURvY1Rva2VuOkRPQ19UQUdfVkFMVUVfVE9LRU4oJ3ZhbHVlJykKKyAgICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0RBVEEoJ3ZhbHVlJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcbicpCisgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpS2V5d29yZDpjbGFzcygnY2xhc3MnKQorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaUlkZW50aWZpZXI6QygnQycpCisgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9qYXZhZG9jUGFyc2luZy9UYWczLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2phdmFkb2NQYXJzaW5nL1RhZzMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYWM5NGFkMQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvamF2YWRvY1BhcnNpbmcvVGFnMy5qYXZhCkBAIC0wLDAgKzEsNSBAQAorLyoqCisgKiBTZWUge0BsaW5rIHNvbWVMaW5rfQorICogQHBhcmFtIHNlZSB7QGxpbmsgLi4ufQorICovCitjbGFzcyBDe30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2phdmFkb2NQYXJzaW5nL1RhZzMudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9qYXZhZG9jUGFyc2luZy9UYWczLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZTFmNTUxCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9qYXZhZG9jUGFyc2luZy9UYWczLnR4dApAQCAtMCwwICsxLDUxIEBACitQc2lKYXZhRmlsZTpUYWczLmphdmEKKyAgUHNpSW1wb3J0TGlzdAorICAgIDxlbXB0eSBsaXN0PgorICBQc2lDbGFzczpDCisgICAgUHNpRG9jQ29tbWVudAorICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfTEVBRElOR19BU1RFUklTS1MoJyonKQorICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfREFUQSgnIFNlZSAnKQorICAgICAgUHNpSW5saW5lRG9jVGFnOkBsaW5rCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19JTkxJTkVfVEFHX1NUQVJUKCd7JykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX1RBR19OQU1FKCdAbGluaycpCisgICAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgICBQc2lFbGVtZW50KERPQ19SRUZFUkVOQ0VfSE9MREVSKQorICAgICAgICAgIFBzaUphdmFDb2RlUmVmZXJlbmNlRWxlbWVudDpzb21lTGluaworICAgICAgICAgICAgUHNpSWRlbnRpZmllcjpzb21lTGluaygnc29tZUxpbmsnKQorICAgICAgICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0lOTElORV9UQUdfRU5EKCd9JykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9MRUFESU5HX0FTVEVSSVNLUygnKicpCisgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9EQVRBKCcgJykKKyAgICAgIFBzaURvY1RhZzpAcGFyYW0KKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX1RBR19OQU1FKCdAcGFyYW0nKQorICAgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgICAgUHNpRWxlbWVudChET0NfUEFSQU1FVEVSX1JFRikKKyAgICAgICAgICBQc2lEb2NUb2tlbjpET0NfVEFHX1ZBTFVFX1RPS0VOKCdzZWUnKQorICAgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgICAgUHNpSW5saW5lRG9jVGFnOkBsaW5rCisgICAgICAgICAgUHNpRG9jVG9rZW46RE9DX0lOTElORV9UQUdfU1RBUlQoJ3snKQorICAgICAgICAgIFBzaURvY1Rva2VuOkRPQ19UQUdfTkFNRSgnQGxpbmsnKQorICAgICAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgICAgIFBzaUVsZW1lbnQoRE9DX1JFRkVSRU5DRV9IT0xERVIpCisgICAgICAgICAgICBQc2lKYXZhVG9rZW46RUxMSVBTSVMoJy4uLicpCisgICAgICAgICAgUHNpRG9jVG9rZW46RE9DX0lOTElORV9UQUdfRU5EKCd9JykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcbicpCisgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpS2V5d29yZDpjbGFzcygnY2xhc3MnKQorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaUlkZW50aWZpZXI6QygnQycpCisgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvamF2YWRvY1BhcnNpbmcvVGFnNC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9qYXZhZG9jUGFyc2luZy9UYWc0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmNhNDA5MwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvamF2YWRvY1BhcnNpbmcvVGFnNC5qYXZhCkBAIC0wLDAgKzEsNyBAQAorY2xhc3MgVGVzdCB7CisgICAgLyoqCisgICAgICogIEBwYXJhbSBwYXJhbSBzb21lIHBhcmFtCisgICAgICovCisgICAgcHVibGljIHZvaWQgZm9vKGludCBwYXJhbSkgeworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2phdmFkb2NQYXJzaW5nL1RhZzQudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9qYXZhZG9jUGFyc2luZy9UYWc0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYTYxYWViCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9qYXZhZG9jUGFyc2luZy9UYWc0LnR4dApAQCAtMCwwICsxLDYyIEBACitQc2lKYXZhRmlsZTpUYWc0LmphdmEKKyAgUHNpSW1wb3J0TGlzdAorICAgIDxlbXB0eSBsaXN0PgorICBQc2lDbGFzczpUZXN0CisgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpS2V5d29yZDpjbGFzcygnY2xhc3MnKQorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaUlkZW50aWZpZXI6VGVzdCgnVGVzdCcpCisgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuICAgICcpCisgICAgUHNpTWV0aG9kOmZvbworICAgICAgUHNpRG9jQ29tbWVudAorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gICAgICcpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0xFQURJTkdfQVNURVJJU0tTKCcqJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfREFUQSgnICAnKQorICAgICAgICBQc2lEb2NUYWc6QHBhcmFtCisgICAgICAgICAgUHNpRG9jVG9rZW46RE9DX1RBR19OQU1FKCdAcGFyYW0nKQorICAgICAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgICAgIFBzaUVsZW1lbnQoRE9DX1BBUkFNRVRFUl9SRUYpCisgICAgICAgICAgICBQc2lEb2NUb2tlbjpET0NfVEFHX1ZBTFVFX1RPS0VOKCdwYXJhbScpCisgICAgICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfREFUQSgnc29tZSBwYXJhbScpCisgICAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICAgICAnKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICAgICcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6cHVibGljCisgICAgICAgIFBzaUtleXdvcmQ6cHVibGljKCdwdWJsaWMnKQorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OihpbnQgcGFyYW0pCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaVBhcmFtZXRlcjpwYXJhbQorICAgICAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICAgIFBzaVR5cGVFbGVtZW50OmludAorICAgICAgICAgICAgUHNpS2V5d29yZDppbnQoJ2ludCcpCisgICAgICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICAgICAgUHNpSWRlbnRpZmllcjpwYXJhbSgncGFyYW0nKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAgICAnKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcbicpCisgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2phdmFkb2NQYXJzaW5nL1RhZzUuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvamF2YWRvY1BhcnNpbmcvVGFnNS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRlZjc5MWYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2phdmFkb2NQYXJzaW5nL1RhZzUuamF2YQpAQCAtMCwwICsxLDQgQEAKKy8qKgorICogIEBlamI6YmVhbiB0aGlzIGlzIGFuIEVKQiAgCisgKi8KK2NsYXNzIFRlc3QgeyB9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9qYXZhZG9jUGFyc2luZy9UYWc1LnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvamF2YWRvY1BhcnNpbmcvVGFnNS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzZhOWI4MAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvamF2YWRvY1BhcnNpbmcvVGFnNS50eHQKQEAgLTAsMCArMSwzNCBAQAorUHNpSmF2YUZpbGU6VGFnNS5qYXZhCisgIFBzaUltcG9ydExpc3QKKyAgICA8ZW1wdHkgbGlzdD4KKyAgUHNpQ2xhc3M6VGVzdAorICAgIFBzaURvY0NvbW1lbnQKKyAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0xFQURJTkdfQVNURVJJU0tTKCcqJykKKyAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0RBVEEoJyAgJykKKyAgICAgIFBzaURvY1RhZzpAZWpiOmJlYW4KKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX1RBR19OQU1FKCdAZWpiOmJlYW4nKQorICAgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgICAgUHNpRWxlbWVudChET0NfVEFHX1ZBTFVFX0VMRU1FTlQpCisgICAgICAgICAgUHNpRG9jVG9rZW46RE9DX1RBR19WQUxVRV9UT0tFTigndGhpcycpCisgICAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9EQVRBKCdpcyBhbiBFSkIgICcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgICAgUHNpV2hpdGVTcGFjZSgnXG4nKQorICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaUtleXdvcmQ6Y2xhc3MoJ2NsYXNzJykKKyAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICBQc2lJZGVudGlmaWVyOlRlc3QoJ1Rlc3QnKQorICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvamF2YWRvY1BhcnNpbmcvVHlwZVBhcmFtLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2phdmFkb2NQYXJzaW5nL1R5cGVQYXJhbS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk3ZGZhMWQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2phdmFkb2NQYXJzaW5nL1R5cGVQYXJhbS5qYXZhCkBAIC0wLDAgKzEsNSBAQAorLyoqCisgKiBAcGFyYW0gPFY+CisgKi8KK3B1YmxpYyBpbnRlcmZhY2UgRnV0dXJlPFY+IHsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2phdmFkb2NQYXJzaW5nL1R5cGVQYXJhbS50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2phdmFkb2NQYXJzaW5nL1R5cGVQYXJhbS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2QwYTRiZmUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL2phdmFkb2NQYXJzaW5nL1R5cGVQYXJhbS50eHQKQEAgLTAsMCArMSw0MCBAQAorUHNpSmF2YUZpbGU6VHlwZVBhcmFtLmphdmEKKyAgUHNpSW1wb3J0TGlzdAorICAgIDxlbXB0eSBsaXN0PgorICBQc2lDbGFzczpGdXR1cmUKKyAgICBQc2lEb2NDb21tZW50CisgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9MRUFESU5HX0FTVEVSSVNLUygnKicpCisgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9EQVRBKCcgJykKKyAgICAgIFBzaURvY1RhZzpAcGFyYW0KKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX1RBR19OQU1FKCdAcGFyYW0nKQorICAgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgICAgUHNpRWxlbWVudChET0NfUEFSQU1FVEVSX1JFRikKKyAgICAgICAgICBQc2lEb2NUb2tlbjpET0NfVEFHX1ZBTFVFX0xUKCc8JykKKyAgICAgICAgICBQc2lEb2NUb2tlbjpET0NfVEFHX1ZBTFVFX1RPS0VOKCdWJykKKyAgICAgICAgICBQc2lEb2NUb2tlbjpET0NfVEFHX1ZBTFVFX0dUKCc+JykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcbicpCisgICAgUHNpTW9kaWZpZXJMaXN0OnB1YmxpYworICAgICAgUHNpS2V5d29yZDpwdWJsaWMoJ3B1YmxpYycpCisgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgUHNpS2V5d29yZDppbnRlcmZhY2UoJ2ludGVyZmFjZScpCisgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgUHNpSWRlbnRpZmllcjpGdXR1cmUoJ0Z1dHVyZScpCisgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgIFBzaUphdmFUb2tlbjpMVCgnPCcpCisgICAgICBQc2lUeXBlUGFyYW1ldGVyOlYKKyAgICAgICAgUHNpSWRlbnRpZmllcjpWKCdWJykKKyAgICAgICAgUHNpRWxlbWVudChFWFRFTkRTX0JPVU5EX0xJU1QpCisgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lKYXZhVG9rZW46R1QoJz4nKQorICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuJykKKyAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL3N0YXRlbWVudFBhcnNpbmcvYXNzZXJ0L05vcm1hbDEuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvc3RhdGVtZW50UGFyc2luZy9hc3NlcnQvTm9ybWFsMS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYzMTBjOWYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL3N0YXRlbWVudFBhcnNpbmcvYXNzZXJ0L05vcm1hbDEuamF2YQpAQCAtMCwwICsxLDUgQEAKK2NsYXNzIEZvb3sKKyAgeworICAgIGFzc2VydCBjb25kOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9zdGF0ZW1lbnRQYXJzaW5nL2Fzc2VydC9Ob3JtYWwxLnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvc3RhdGVtZW50UGFyc2luZy9hc3NlcnQvTm9ybWFsMS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjQwNTdmZgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvc3RhdGVtZW50UGFyc2luZy9hc3NlcnQvTm9ybWFsMS50eHQKQEAgLTAsMCArMSwzNSBAQAorUHNpSmF2YUZpbGU6Tm9ybWFsMS5qYXZhCisgIFBzaUltcG9ydExpc3QKKyAgICA8ZW1wdHkgbGlzdD4KKyAgUHNpQ2xhc3M6Rm9vCisgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpS2V5d29yZDpjbGFzcygnY2xhc3MnKQorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaUlkZW50aWZpZXI6Rm9vKCdGb28nKQorICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcbiAgJykKKyAgICBQc2lDbGFzc0luaXRpYWxpemVyCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAgICAnKQorICAgICAgICBQc2lBc3NlcnRTdGF0ZW1lbnQKKyAgICAgICAgICBQc2lLZXl3b3JkOmFzc2VydCgnYXNzZXJ0JykKKyAgICAgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgICAgICBQc2lSZWZlcmVuY2VFeHByZXNzaW9uOmNvbmQKKyAgICAgICAgICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgICAgICBQc2lJZGVudGlmaWVyOmNvbmQoJ2NvbmQnKQorICAgICAgICAgIFBzaUphdmFUb2tlbjpTRU1JQ09MT04oJzsnKQorICAgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAgJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG4nKQorICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvc3RhdGVtZW50UGFyc2luZy9hc3NlcnQvTm9ybWFsMi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9zdGF0ZW1lbnRQYXJzaW5nL2Fzc2VydC9Ob3JtYWwyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzc3ZjYwZQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvc3RhdGVtZW50UGFyc2luZy9hc3NlcnQvTm9ybWFsMi5qYXZhCkBAIC0wLDAgKzEsNSBAQAorY2xhc3MgRm9veworICB7CisgICAgYXNzZXJ0IGNvbmQgOiBtZXNzYWdlOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9zdGF0ZW1lbnRQYXJzaW5nL2Fzc2VydC9Ob3JtYWwyLnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvc3RhdGVtZW50UGFyc2luZy9hc3NlcnQvTm9ybWFsMi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzk2NWY4NgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvc3RhdGVtZW50UGFyc2luZy9hc3NlcnQvTm9ybWFsMi50eHQKQEAgLTAsMCArMSw0MiBAQAorUHNpSmF2YUZpbGU6Tm9ybWFsMi5qYXZhCisgIFBzaUltcG9ydExpc3QKKyAgICA8ZW1wdHkgbGlzdD4KKyAgUHNpQ2xhc3M6Rm9vCisgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpS2V5d29yZDpjbGFzcygnY2xhc3MnKQorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaUlkZW50aWZpZXI6Rm9vKCdGb28nKQorICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcbiAgJykKKyAgICBQc2lDbGFzc0luaXRpYWxpemVyCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAgICAnKQorICAgICAgICBQc2lBc3NlcnRTdGF0ZW1lbnQKKyAgICAgICAgICBQc2lLZXl3b3JkOmFzc2VydCgnYXNzZXJ0JykKKyAgICAgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgICAgICBQc2lSZWZlcmVuY2VFeHByZXNzaW9uOmNvbmQKKyAgICAgICAgICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgICAgICBQc2lJZGVudGlmaWVyOmNvbmQoJ2NvbmQnKQorICAgICAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgICAgIFBzaUphdmFUb2tlbjpDT0xPTignOicpCisgICAgICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICAgICAgUHNpUmVmZXJlbmNlRXhwcmVzc2lvbjptZXNzYWdlCisgICAgICAgICAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICAgICAgUHNpSWRlbnRpZmllcjptZXNzYWdlKCdtZXNzYWdlJykKKyAgICAgICAgICBQc2lKYXZhVG9rZW46U0VNSUNPTE9OKCc7JykKKyAgICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gICcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuJykKKyAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL3N0YXRlbWVudFBhcnNpbmcvYXNzaWdubWVudC9TaW1wbGUuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvc3RhdGVtZW50UGFyc2luZy9hc3NpZ25tZW50L1NpbXBsZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZiYjA3MDkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL3N0YXRlbWVudFBhcnNpbmcvYXNzaWdubWVudC9TaW1wbGUuamF2YQpAQCAtMCwwICsxLDYgQEAKK2NsYXNzIEF7CisgIHsKKyAgICBpbnRbXSBhOworICAgIGFbMF0gPSAwOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9zdGF0ZW1lbnRQYXJzaW5nL2Fzc2lnbm1lbnQvU2ltcGxlLnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvc3RhdGVtZW50UGFyc2luZy9hc3NpZ25tZW50L1NpbXBsZS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTMzNjZmOAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvc3RhdGVtZW50UGFyc2luZy9hc3NpZ25tZW50L1NpbXBsZS50eHQKQEAgLTAsMCArMSw1NyBAQAorUHNpSmF2YUZpbGU6U2ltcGxlLmphdmEKKyAgUHNpSW1wb3J0TGlzdAorICAgIDxlbXB0eSBsaXN0PgorICBQc2lDbGFzczpBCisgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpS2V5d29yZDpjbGFzcygnY2xhc3MnKQorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaUlkZW50aWZpZXI6QSgnQScpCisgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuICAnKQorICAgIFBzaUNsYXNzSW5pdGlhbGl6ZXIKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICAgICcpCisgICAgICAgIFBzaURlY2xhcmF0aW9uU3RhdGVtZW50CisgICAgICAgICAgUHNpTG9jYWxWYXJpYWJsZTphCisgICAgICAgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICAgICAgUHNpVHlwZUVsZW1lbnQ6aW50W10KKyAgICAgICAgICAgICAgUHNpVHlwZUVsZW1lbnQ6aW50CisgICAgICAgICAgICAgICAgUHNpS2V5d29yZDppbnQoJ2ludCcpCisgICAgICAgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0tFVCgnWycpCisgICAgICAgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0tFVCgnXScpCisgICAgICAgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgICAgICAgIFBzaUlkZW50aWZpZXI6YSgnYScpCisgICAgICAgICAgICBQc2lKYXZhVG9rZW46U0VNSUNPTE9OKCc7JykKKyAgICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gICAgJykKKyAgICAgICAgUHNpRXhwcmVzc2lvblN0YXRlbWVudAorICAgICAgICAgIFBzaUFzc2lnbm1lbnRFeHByZXNzaW9uOmFbMF0gPSAwCisgICAgICAgICAgICBQc2lBcnJheUFjY2Vzc0V4cHJlc3Npb246YVswXQorICAgICAgICAgICAgICBQc2lSZWZlcmVuY2VFeHByZXNzaW9uOmEKKyAgICAgICAgICAgICAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICAgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgICAgICAgICBQc2lJZGVudGlmaWVyOmEoJ2EnKQorICAgICAgICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNLRVQoJ1snKQorICAgICAgICAgICAgICBQc2lMaXRlcmFsRXhwcmVzc2lvbjowCisgICAgICAgICAgICAgICAgUHNpSmF2YVRva2VuOklOVEVHRVJfTElURVJBTCgnMCcpCisgICAgICAgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0tFVCgnXScpCisgICAgICAgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgICAgICAgIFBzaUphdmFUb2tlbjpFUSgnPScpCisgICAgICAgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgICAgICAgIFBzaUxpdGVyYWxFeHByZXNzaW9uOjAKKyAgICAgICAgICAgICAgUHNpSmF2YVRva2VuOklOVEVHRVJfTElURVJBTCgnMCcpCisgICAgICAgICAgUHNpSmF2YVRva2VuOlNFTUlDT0xPTignOycpCisgICAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICAnKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcbicpCisgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9zdGF0ZW1lbnRQYXJzaW5nL2NvZGVCbG9jay9Bbm9ueW1vdXNJblNtYXJ0Q29tcGxldGlvbi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9zdGF0ZW1lbnRQYXJzaW5nL2NvZGVCbG9jay9Bbm9ueW1vdXNJblNtYXJ0Q29tcGxldGlvbi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjczYWI4MTcKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL3N0YXRlbWVudFBhcnNpbmcvY29kZUJsb2NrL0Fub255bW91c0luU21hcnRDb21wbGV0aW9uLmphdmEKQEAgLTAsMCArMSwxNiBAQAoraW1wb3J0IHBrZy5Gb287CisKK2NsYXNzIEJhciB7CisKKyAgcHVibGljIHZvaWQgZm9vKCkgeworICAgIG5ldyBGb28oaGFzaAorIykge307CisKK25ldyBGb28oaGFzaAorIywgYmFyKSB7fTsKKyAKKyAgbmV3IEZvbyhoYXNoCisjeCkge307CisKK30KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL3N0YXRlbWVudFBhcnNpbmcvY29kZUJsb2NrL0Fub255bW91c0luU21hcnRDb21wbGV0aW9uLnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvc3RhdGVtZW50UGFyc2luZy9jb2RlQmxvY2svQW5vbnltb3VzSW5TbWFydENvbXBsZXRpb24udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM5YTY0NTAKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL3N0YXRlbWVudFBhcnNpbmcvY29kZUJsb2NrL0Fub255bW91c0luU21hcnRDb21wbGV0aW9uLnR4dApAQCAtMCwwICsxLDE1NyBAQAorUHNpSmF2YUZpbGU6QW5vbnltb3VzSW5TbWFydENvbXBsZXRpb24uamF2YQorICBQc2lJbXBvcnRMaXN0CisgICAgUHNpSW1wb3J0U3RhdGVtZW50CisgICAgICBQc2lLZXl3b3JkOmltcG9ydCgnaW1wb3J0JykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSmF2YUNvZGVSZWZlcmVuY2VFbGVtZW50OnBrZy5Gb28KKyAgICAgICAgUHNpSmF2YUNvZGVSZWZlcmVuY2VFbGVtZW50OnBrZworICAgICAgICAgIFBzaUlkZW50aWZpZXI6cGtnKCdwa2cnKQorICAgICAgICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICBQc2lKYXZhVG9rZW46RE9UKCcuJykKKyAgICAgICAgUHNpSWRlbnRpZmllcjpGb28oJ0ZvbycpCisgICAgICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUphdmFUb2tlbjpTRU1JQ09MT04oJzsnKQorICBQc2lXaGl0ZVNwYWNlKCdcblxuJykKKyAgUHNpQ2xhc3M6QmFyCisgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpS2V5d29yZDpjbGFzcygnY2xhc3MnKQorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaUlkZW50aWZpZXI6QmFyKCdCYXInKQorICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcblxuICAnKQorICAgIFBzaU1ldGhvZDpmb28KKyAgICAgIFBzaU1vZGlmaWVyTGlzdDpwdWJsaWMKKyAgICAgICAgUHNpS2V5d29yZDpwdWJsaWMoJ3B1YmxpYycpCisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gICAgJykKKyAgICAgICAgUHNpRXhwcmVzc2lvblN0YXRlbWVudAorICAgICAgICAgIFBzaU5ld0V4cHJlc3Npb246bmV3IEZvbyhoYXNoCisjKSB7fQorICAgICAgICAgICAgUHNpS2V5d29yZDpuZXcoJ25ldycpCisgICAgICAgICAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICAgICAgICBQc2lBbm9ueW1vdXNDbGFzcworICAgICAgICAgICAgICBQc2lKYXZhQ29kZVJlZmVyZW5jZUVsZW1lbnQ6Rm9vCisgICAgICAgICAgICAgICAgUHNpSWRlbnRpZmllcjpGb28oJ0ZvbycpCisgICAgICAgICAgICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgICAgICAgIFBzaUV4cHJlc3Npb25MaXN0CisgICAgICAgICAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgICAgICAgICBQc2lSZWZlcmVuY2VFeHByZXNzaW9uOmhhc2gKKyAgICAgICAgICAgICAgICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgICAgICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgICAgICAgICAgICBQc2lJZGVudGlmaWVyOmhhc2goJ2hhc2gnKQorICAgICAgICAgICAgICAgIFBzaUVycm9yRWxlbWVudDonLCcgb3IgJyknIGV4cGVjdGVkCisgICAgICAgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgICAgICAgICBQc2lFeHByZXNzaW9uKGVtcHR5KQorICAgICAgICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgICAgICAgICAgUHNpV2hpdGVTcGFjZSgnXG4nKQorICAgICAgICAgICAgICAgIFBzaUVsZW1lbnQoQkFEX0NIQVJBQ1RFUikoJyMnKQorICAgICAgICAgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICAgICAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgICAgICAgUHNpSmF2YVRva2VuOlNFTUlDT0xPTignOycpCisgICAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4nKQorICAgICAgICBQc2lFeHByZXNzaW9uU3RhdGVtZW50CisgICAgICAgICAgUHNpTmV3RXhwcmVzc2lvbjpuZXcgRm9vKGhhc2gKKyMsIGJhcikge30KKyAgICAgICAgICAgIFBzaUtleXdvcmQ6bmV3KCduZXcnKQorICAgICAgICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgICAgICAgUHNpQW5vbnltb3VzQ2xhc3MKKyAgICAgICAgICAgICAgUHNpSmF2YUNvZGVSZWZlcmVuY2VFbGVtZW50OkZvbworICAgICAgICAgICAgICAgIFBzaUlkZW50aWZpZXI6Rm9vKCdGb28nKQorICAgICAgICAgICAgICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgICAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICAgICAgICBQc2lFeHByZXNzaW9uTGlzdAorICAgICAgICAgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgICAgICAgICAgUHNpUmVmZXJlbmNlRXhwcmVzc2lvbjpoYXNoCisgICAgICAgICAgICAgICAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICAgICAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICAgICAgICAgICAgUHNpSWRlbnRpZmllcjpoYXNoKCdoYXNoJykKKyAgICAgICAgICAgICAgICBQc2lFcnJvckVsZW1lbnQ6JywnIG9yICcpJyBleHBlY3RlZAorICAgICAgICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgICAgICAgICAgUHNpRXhwcmVzc2lvbihlbXB0eSkKKyAgICAgICAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICAgICAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuJykKKyAgICAgICAgICAgICAgICBQc2lFbGVtZW50KEJBRF9DSEFSQUNURVIpKCcjJykKKyAgICAgICAgICAgICAgICBQc2lKYXZhVG9rZW46Q09NTUEoJywnKQorICAgICAgICAgICAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgICAgICAgICAgIFBzaVJlZmVyZW5jZUV4cHJlc3Npb246YmFyCisgICAgICAgICAgICAgICAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICAgICAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICAgICAgICAgICAgUHNpSWRlbnRpZmllcjpiYXIoJ2JhcicpCisgICAgICAgICAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgICAgICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICAgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICAgICAgICBQc2lKYXZhVG9rZW46U0VNSUNPTE9OKCc7JykKKyAgICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gXG4gICcpCisgICAgICAgIFBzaUV4cHJlc3Npb25TdGF0ZW1lbnQKKyAgICAgICAgICBQc2lOZXdFeHByZXNzaW9uOm5ldyBGb28oaGFzaAorI3gpIHt9CisgICAgICAgICAgICBQc2lLZXl3b3JkOm5ldygnbmV3JykKKyAgICAgICAgICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgICAgICAgIFBzaUFub255bW91c0NsYXNzCisgICAgICAgICAgICAgIFBzaUphdmFDb2RlUmVmZXJlbmNlRWxlbWVudDpGb28KKyAgICAgICAgICAgICAgICBQc2lJZGVudGlmaWVyOkZvbygnRm9vJykKKyAgICAgICAgICAgICAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICAgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgICAgICAgUHNpRXhwcmVzc2lvbkxpc3QKKyAgICAgICAgICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICAgICAgICAgIFBzaVJlZmVyZW5jZUV4cHJlc3Npb246aGFzaAorICAgICAgICAgICAgICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICAgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgICAgICAgICAgIFBzaUlkZW50aWZpZXI6aGFzaCgnaGFzaCcpCisgICAgICAgICAgICAgICAgUHNpRXJyb3JFbGVtZW50OicsJyBvciAnKScgZXhwZWN0ZWQKKyAgICAgICAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICAgICAgICAgIFBzaUV4cHJlc3Npb24oZW1wdHkpCisgICAgICAgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgICAgICAgICBQc2lXaGl0ZVNwYWNlKCdcbicpCisgICAgICAgICAgICAgICAgUHNpRWxlbWVudChCQURfQ0hBUkFDVEVSKSgnIycpCisgICAgICAgICAgICAgICAgUHNpRXJyb3JFbGVtZW50OicsJyBvciAnKScgZXhwZWN0ZWQKKyAgICAgICAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICAgICAgICAgIFBzaUV4cHJlc3Npb24oZW1wdHkpCisgICAgICAgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgICAgICAgICBQc2lSZWZlcmVuY2VFeHByZXNzaW9uOngKKyAgICAgICAgICAgICAgICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgICAgICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgICAgICAgICAgICBQc2lJZGVudGlmaWVyOngoJ3gnKQorICAgICAgICAgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICAgICAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgICAgICAgUHNpSmF2YVRva2VuOlNFTUlDT0xPTignOycpCisgICAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuXG4nKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcbicpCisgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9zdGF0ZW1lbnRQYXJzaW5nL2NvZGVCbG9jay9TaW1wbGUuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvc3RhdGVtZW50UGFyc2luZy9jb2RlQmxvY2svU2ltcGxlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDVlYzIyMgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvc3RhdGVtZW50UGFyc2luZy9jb2RlQmxvY2svU2ltcGxlLmphdmEKQEAgLTAsMCArMSw0IEBACitjbGFzcyBBeworICB7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL3N0YXRlbWVudFBhcnNpbmcvY29kZUJsb2NrL1NpbXBsZS50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL3N0YXRlbWVudFBhcnNpbmcvY29kZUJsb2NrL1NpbXBsZS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTRhZmYyOQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvc3RhdGVtZW50UGFyc2luZy9jb2RlQmxvY2svU2ltcGxlLnR4dApAQCAtMCwwICsxLDI2IEBACitQc2lKYXZhRmlsZTpTaW1wbGUuamF2YQorICBQc2lJbXBvcnRMaXN0CisgICAgPGVtcHR5IGxpc3Q+CisgIFBzaUNsYXNzOkEKKyAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lLZXl3b3JkOmNsYXNzKCdjbGFzcycpCisgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgUHNpSWRlbnRpZmllcjpBKCdBJykKKyAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgUHNpV2hpdGVTcGFjZSgnXG4gICcpCisgICAgUHNpQ2xhc3NJbml0aWFsaXplcgorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gICcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuJykKKyAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvc3RhdGVtZW50UGFyc2luZy9kby13aGlsZS9Ob3JtYWwuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvc3RhdGVtZW50UGFyc2luZy9kby13aGlsZS9Ob3JtYWwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NmFkMDUxCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9zdGF0ZW1lbnRQYXJzaW5nL2RvLXdoaWxlL05vcm1hbC5qYXZhCkBAIC0wLDAgKzEsNSBAQAorY2xhc3MgQXsKKyAgeworICAgIGRve313aGlsZSh0cnVlKTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9zdGF0ZW1lbnRQYXJzaW5nL2RvLXdoaWxlL05vcm1hbC50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL3N0YXRlbWVudFBhcnNpbmcvZG8td2hpbGUvTm9ybWFsLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZDA5YTY3Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9zdGF0ZW1lbnRQYXJzaW5nL2RvLXdoaWxlL05vcm1hbC50eHQKQEAgLTAsMCArMSwzOSBAQAorUHNpSmF2YUZpbGU6Tm9ybWFsLmphdmEKKyAgUHNpSW1wb3J0TGlzdAorICAgIDxlbXB0eSBsaXN0PgorICBQc2lDbGFzczpBCisgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpS2V5d29yZDpjbGFzcygnY2xhc3MnKQorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaUlkZW50aWZpZXI6QSgnQScpCisgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuICAnKQorICAgIFBzaUNsYXNzSW5pdGlhbGl6ZXIKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICAgICcpCisgICAgICAgIFBzaURvV2hpbGVTdGF0ZW1lbnQKKyAgICAgICAgICBQc2lLZXl3b3JkOmRvKCdkbycpCisgICAgICAgICAgUHNpQmxvY2tTdGF0ZW1lbnQKKyAgICAgICAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgICAgICAgUHNpS2V5d29yZDp3aGlsZSgnd2hpbGUnKQorICAgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgICAgUHNpTGl0ZXJhbEV4cHJlc3Npb246dHJ1ZQorICAgICAgICAgICAgUHNpSmF2YVRva2VuOlRSVUVfS0VZV09SRCgndHJ1ZScpCisgICAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgICAgICBQc2lKYXZhVG9rZW46U0VNSUNPTE9OKCc7JykKKyAgICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gICcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuJykKKyAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvc3RhdGVtZW50UGFyc2luZy9kby13aGlsZS9VbmNvbXBsZXRlMS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9zdGF0ZW1lbnRQYXJzaW5nL2RvLXdoaWxlL1VuY29tcGxldGUxLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzAzYzk5OQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvc3RhdGVtZW50UGFyc2luZy9kby13aGlsZS9VbmNvbXBsZXRlMS5qYXZhCkBAIC0wLDAgKzEsNSBAQAorY2xhc3MgQXsKKyAgeworICAgIGRvCisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvc3RhdGVtZW50UGFyc2luZy9kby13aGlsZS9VbmNvbXBsZXRlMS50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL3N0YXRlbWVudFBhcnNpbmcvZG8td2hpbGUvVW5jb21wbGV0ZTEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU1Y2YzZDQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL3N0YXRlbWVudFBhcnNpbmcvZG8td2hpbGUvVW5jb21wbGV0ZTEudHh0CkBAIC0wLDAgKzEsMzEgQEAKK1BzaUphdmFGaWxlOlVuY29tcGxldGUxLmphdmEKKyAgUHNpSW1wb3J0TGlzdAorICAgIDxlbXB0eSBsaXN0PgorICBQc2lDbGFzczpBCisgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpS2V5d29yZDpjbGFzcygnY2xhc3MnKQorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaUlkZW50aWZpZXI6QSgnQScpCisgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuICAnKQorICAgIFBzaUNsYXNzSW5pdGlhbGl6ZXIKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICAgICcpCisgICAgICAgIFBzaURvV2hpbGVTdGF0ZW1lbnQKKyAgICAgICAgICBQc2lLZXl3b3JkOmRvKCdkbycpCisgICAgICAgICAgUHNpRXJyb3JFbGVtZW50OlN0YXRlbWVudCBleHBlY3RlZAorICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICAnKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcbicpCisgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL3N0YXRlbWVudFBhcnNpbmcvZG8td2hpbGUvVW5jb21wbGV0ZTIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvc3RhdGVtZW50UGFyc2luZy9kby13aGlsZS9VbmNvbXBsZXRlMi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE5MzVkMDgKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL3N0YXRlbWVudFBhcnNpbmcvZG8td2hpbGUvVW5jb21wbGV0ZTIuamF2YQpAQCAtMCwwICsxLDUgQEAKK2NsYXNzIEF7CisgIHsKKyAgICBkbyBmb28oKTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9zdGF0ZW1lbnRQYXJzaW5nL2RvLXdoaWxlL1VuY29tcGxldGUyLnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvc3RhdGVtZW50UGFyc2luZy9kby13aGlsZS9VbmNvbXBsZXRlMi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWRjMzY2MwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvc3RhdGVtZW50UGFyc2luZy9kby13aGlsZS9VbmNvbXBsZXRlMi50eHQKQEAgLTAsMCArMSw0MiBAQAorUHNpSmF2YUZpbGU6VW5jb21wbGV0ZTIuamF2YQorICBQc2lJbXBvcnRMaXN0CisgICAgPGVtcHR5IGxpc3Q+CisgIFBzaUNsYXNzOkEKKyAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lLZXl3b3JkOmNsYXNzKCdjbGFzcycpCisgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgUHNpSWRlbnRpZmllcjpBKCdBJykKKyAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgUHNpV2hpdGVTcGFjZSgnXG4gICcpCisgICAgUHNpQ2xhc3NJbml0aWFsaXplcgorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gICAgJykKKyAgICAgICAgUHNpRG9XaGlsZVN0YXRlbWVudAorICAgICAgICAgIFBzaUtleXdvcmQ6ZG8oJ2RvJykKKyAgICAgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgICAgICBQc2lFeHByZXNzaW9uU3RhdGVtZW50CisgICAgICAgICAgICBQc2lNZXRob2RDYWxsRXhwcmVzc2lvbjpmb28oKQorICAgICAgICAgICAgICBQc2lSZWZlcmVuY2VFeHByZXNzaW9uOmZvbworICAgICAgICAgICAgICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgICAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICAgICAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgICAgICAgICBQc2lFeHByZXNzaW9uTGlzdAorICAgICAgICAgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgICAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgICAgICAgIFBzaUphdmFUb2tlbjpTRU1JQ09MT04oJzsnKQorICAgICAgICAgIFBzaUVycm9yRWxlbWVudDond2hpbGUnIGV4cGVjdGVkCisgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gICcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuJykKKyAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL3N0YXRlbWVudFBhcnNpbmcvZG8td2hpbGUvVW5jb21wbGV0ZTMuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvc3RhdGVtZW50UGFyc2luZy9kby13aGlsZS9VbmNvbXBsZXRlMy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRjNTQxMmEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL3N0YXRlbWVudFBhcnNpbmcvZG8td2hpbGUvVW5jb21wbGV0ZTMuamF2YQpAQCAtMCwwICsxLDUgQEAKK2NsYXNzIEF7CisgIHsKKyAgICBkbyBmb28oKTsgd2hpbGUKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9zdGF0ZW1lbnRQYXJzaW5nL2RvLXdoaWxlL1VuY29tcGxldGUzLnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvc3RhdGVtZW50UGFyc2luZy9kby13aGlsZS9VbmNvbXBsZXRlMy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDIyYTQ4NAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvc3RhdGVtZW50UGFyc2luZy9kby13aGlsZS9VbmNvbXBsZXRlMy50eHQKQEAgLTAsMCArMSw0NCBAQAorUHNpSmF2YUZpbGU6VW5jb21wbGV0ZTMuamF2YQorICBQc2lJbXBvcnRMaXN0CisgICAgPGVtcHR5IGxpc3Q+CisgIFBzaUNsYXNzOkEKKyAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lLZXl3b3JkOmNsYXNzKCdjbGFzcycpCisgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgUHNpSWRlbnRpZmllcjpBKCdBJykKKyAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgUHNpV2hpdGVTcGFjZSgnXG4gICcpCisgICAgUHNpQ2xhc3NJbml0aWFsaXplcgorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gICAgJykKKyAgICAgICAgUHNpRG9XaGlsZVN0YXRlbWVudAorICAgICAgICAgIFBzaUtleXdvcmQ6ZG8oJ2RvJykKKyAgICAgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgICAgICBQc2lFeHByZXNzaW9uU3RhdGVtZW50CisgICAgICAgICAgICBQc2lNZXRob2RDYWxsRXhwcmVzc2lvbjpmb28oKQorICAgICAgICAgICAgICBQc2lSZWZlcmVuY2VFeHByZXNzaW9uOmZvbworICAgICAgICAgICAgICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgICAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICAgICAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgICAgICAgICBQc2lFeHByZXNzaW9uTGlzdAorICAgICAgICAgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgICAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgICAgICAgIFBzaUphdmFUb2tlbjpTRU1JQ09MT04oJzsnKQorICAgICAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgICAgIFBzaUtleXdvcmQ6d2hpbGUoJ3doaWxlJykKKyAgICAgICAgICBQc2lFcnJvckVsZW1lbnQ6JygnIGV4cGVjdGVkCisgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gICcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuJykKKyAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL3N0YXRlbWVudFBhcnNpbmcvZG8td2hpbGUvVW5jb21wbGV0ZTQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvc3RhdGVtZW50UGFyc2luZy9kby13aGlsZS9VbmNvbXBsZXRlNC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFkOWYwMmEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL3N0YXRlbWVudFBhcnNpbmcvZG8td2hpbGUvVW5jb21wbGV0ZTQuamF2YQpAQCAtMCwwICsxLDUgQEAKK2NsYXNzIEF7CisgIHsKKyAgICBkbyBmb28oKTsgd2hpbGUoCisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvc3RhdGVtZW50UGFyc2luZy9kby13aGlsZS9VbmNvbXBsZXRlNC50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL3N0YXRlbWVudFBhcnNpbmcvZG8td2hpbGUvVW5jb21wbGV0ZTQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUwMGE0MjEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL3N0YXRlbWVudFBhcnNpbmcvZG8td2hpbGUvVW5jb21wbGV0ZTQudHh0CkBAIC0wLDAgKzEsNDUgQEAKK1BzaUphdmFGaWxlOlVuY29tcGxldGU0LmphdmEKKyAgUHNpSW1wb3J0TGlzdAorICAgIDxlbXB0eSBsaXN0PgorICBQc2lDbGFzczpBCisgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpS2V5d29yZDpjbGFzcygnY2xhc3MnKQorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaUlkZW50aWZpZXI6QSgnQScpCisgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuICAnKQorICAgIFBzaUNsYXNzSW5pdGlhbGl6ZXIKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICAgICcpCisgICAgICAgIFBzaURvV2hpbGVTdGF0ZW1lbnQKKyAgICAgICAgICBQc2lLZXl3b3JkOmRvKCdkbycpCisgICAgICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICAgICAgUHNpRXhwcmVzc2lvblN0YXRlbWVudAorICAgICAgICAgICAgUHNpTWV0aG9kQ2FsbEV4cHJlc3Npb246Zm9vKCkKKyAgICAgICAgICAgICAgUHNpUmVmZXJlbmNlRXhwcmVzc2lvbjpmb28KKyAgICAgICAgICAgICAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICAgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgICAgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgICAgICAgICAgUHNpRXhwcmVzc2lvbkxpc3QKKyAgICAgICAgICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICAgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICAgICAgICBQc2lKYXZhVG9rZW46U0VNSUNPTE9OKCc7JykKKyAgICAgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgICAgICBQc2lLZXl3b3JkOndoaWxlKCd3aGlsZScpCisgICAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgICBQc2lFcnJvckVsZW1lbnQ6RXhwcmVzc2lvbiBleHBlY3RlZAorICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICAnKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcbicpCisgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9zdGF0ZW1lbnRQYXJzaW5nL2RvLXdoaWxlL1VuY29tcGxldGU1LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL3N0YXRlbWVudFBhcnNpbmcvZG8td2hpbGUvVW5jb21wbGV0ZTUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OWEyYzliCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9zdGF0ZW1lbnRQYXJzaW5nL2RvLXdoaWxlL1VuY29tcGxldGU1LmphdmEKQEAgLTAsMCArMSw1IEBACitjbGFzcyBBeworICB7CisgICAgZG8gZm9vKCk7IHdoaWxlKCk7CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvc3RhdGVtZW50UGFyc2luZy9kby13aGlsZS9VbmNvbXBsZXRlNS50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL3N0YXRlbWVudFBhcnNpbmcvZG8td2hpbGUvVW5jb21wbGV0ZTUudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc5YmQyODQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL3N0YXRlbWVudFBhcnNpbmcvZG8td2hpbGUvVW5jb21wbGV0ZTUudHh0CkBAIC0wLDAgKzEsNDcgQEAKK1BzaUphdmFGaWxlOlVuY29tcGxldGU1LmphdmEKKyAgUHNpSW1wb3J0TGlzdAorICAgIDxlbXB0eSBsaXN0PgorICBQc2lDbGFzczpBCisgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpS2V5d29yZDpjbGFzcygnY2xhc3MnKQorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaUlkZW50aWZpZXI6QSgnQScpCisgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuICAnKQorICAgIFBzaUNsYXNzSW5pdGlhbGl6ZXIKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICAgICcpCisgICAgICAgIFBzaURvV2hpbGVTdGF0ZW1lbnQKKyAgICAgICAgICBQc2lLZXl3b3JkOmRvKCdkbycpCisgICAgICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICAgICAgUHNpRXhwcmVzc2lvblN0YXRlbWVudAorICAgICAgICAgICAgUHNpTWV0aG9kQ2FsbEV4cHJlc3Npb246Zm9vKCkKKyAgICAgICAgICAgICAgUHNpUmVmZXJlbmNlRXhwcmVzc2lvbjpmb28KKyAgICAgICAgICAgICAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICAgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgICAgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgICAgICAgICAgUHNpRXhwcmVzc2lvbkxpc3QKKyAgICAgICAgICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICAgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICAgICAgICBQc2lKYXZhVG9rZW46U0VNSUNPTE9OKCc7JykKKyAgICAgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgICAgICBQc2lLZXl3b3JkOndoaWxlKCd3aGlsZScpCisgICAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgICBQc2lFcnJvckVsZW1lbnQ6RXhwcmVzc2lvbiBleHBlY3RlZAorICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgICAgICBQc2lKYXZhVG9rZW46U0VNSUNPTE9OKCc7JykKKyAgICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gICcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuJykKKyAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL3N0YXRlbWVudFBhcnNpbmcvZG8td2hpbGUvVW5jb21wbGV0ZTYuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvc3RhdGVtZW50UGFyc2luZy9kby13aGlsZS9VbmNvbXBsZXRlNi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRjMTliNzYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL3N0YXRlbWVudFBhcnNpbmcvZG8td2hpbGUvVW5jb21wbGV0ZTYuamF2YQpAQCAtMCwwICsxLDYgQEAKK2NsYXNzIEF7CisgIHsKKyAgICBkbyBmb28oKTsgd2hpbGUoCisgICAgZygpOworICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL3N0YXRlbWVudFBhcnNpbmcvZG8td2hpbGUvVW5jb21wbGV0ZTYudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9zdGF0ZW1lbnRQYXJzaW5nL2RvLXdoaWxlL1VuY29tcGxldGU2LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOTkwOGM2Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9zdGF0ZW1lbnRQYXJzaW5nL2RvLXdoaWxlL1VuY29tcGxldGU2LnR4dApAQCAtMCwwICsxLDU2IEBACitQc2lKYXZhRmlsZTpVbmNvbXBsZXRlNi5qYXZhCisgIFBzaUltcG9ydExpc3QKKyAgICA8ZW1wdHkgbGlzdD4KKyAgUHNpQ2xhc3M6QQorICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaUtleXdvcmQ6Y2xhc3MoJ2NsYXNzJykKKyAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICBQc2lJZGVudGlmaWVyOkEoJ0EnKQorICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcbiAgJykKKyAgICBQc2lDbGFzc0luaXRpYWxpemVyCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAgICAnKQorICAgICAgICBQc2lEb1doaWxlU3RhdGVtZW50CisgICAgICAgICAgUHNpS2V5d29yZDpkbygnZG8nKQorICAgICAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgICAgIFBzaUV4cHJlc3Npb25TdGF0ZW1lbnQKKyAgICAgICAgICAgIFBzaU1ldGhvZENhbGxFeHByZXNzaW9uOmZvbygpCisgICAgICAgICAgICAgIFBzaVJlZmVyZW5jZUV4cHJlc3Npb246Zm9vCisgICAgICAgICAgICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgICAgICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICAgICAgICAgIFBzaUV4cHJlc3Npb25MaXN0CisgICAgICAgICAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgICAgICAgUHNpSmF2YVRva2VuOlNFTUlDT0xPTignOycpCisgICAgICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICAgICAgUHNpS2V5d29yZDp3aGlsZSgnd2hpbGUnKQorICAgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgICAgUHNpRXJyb3JFbGVtZW50OkV4cHJlc3Npb24gZXhwZWN0ZWQKKyAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAgICAnKQorICAgICAgICBQc2lFeHByZXNzaW9uU3RhdGVtZW50CisgICAgICAgICAgUHNpTWV0aG9kQ2FsbEV4cHJlc3Npb246ZygpCisgICAgICAgICAgICBQc2lSZWZlcmVuY2VFeHByZXNzaW9uOmcKKyAgICAgICAgICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICAgICAgICBQc2lJZGVudGlmaWVyOmcoJ2cnKQorICAgICAgICAgICAgUHNpRXhwcmVzc2lvbkxpc3QKKyAgICAgICAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgICAgICBQc2lKYXZhVG9rZW46U0VNSUNPTE9OKCc7JykKKyAgICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gICcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuJykKKyAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL3N0YXRlbWVudFBhcnNpbmcvZG8td2hpbGUvVW5jb21wbGV0ZTcuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvc3RhdGVtZW50UGFyc2luZy9kby13aGlsZS9VbmNvbXBsZXRlNy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg5NDQ0NTMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL3N0YXRlbWVudFBhcnNpbmcvZG8td2hpbGUvVW5jb21wbGV0ZTcuamF2YQpAQCAtMCwwICsxLDUgQEAKK2NsYXNzIEF7CisgIHsKKyAgICBkbyBmb28oKTsgd2hpbGUoY29uZCkKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9zdGF0ZW1lbnRQYXJzaW5nL2RvLXdoaWxlL1VuY29tcGxldGU3LnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvc3RhdGVtZW50UGFyc2luZy9kby13aGlsZS9VbmNvbXBsZXRlNy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjcwN2I5ZgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvc3RhdGVtZW50UGFyc2luZy9kby13aGlsZS9VbmNvbXBsZXRlNy50eHQKQEAgLTAsMCArMSw1MCBAQAorUHNpSmF2YUZpbGU6VW5jb21wbGV0ZTcuamF2YQorICBQc2lJbXBvcnRMaXN0CisgICAgPGVtcHR5IGxpc3Q+CisgIFBzaUNsYXNzOkEKKyAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lLZXl3b3JkOmNsYXNzKCdjbGFzcycpCisgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgUHNpSWRlbnRpZmllcjpBKCdBJykKKyAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgUHNpV2hpdGVTcGFjZSgnXG4gICcpCisgICAgUHNpQ2xhc3NJbml0aWFsaXplcgorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gICAgJykKKyAgICAgICAgUHNpRG9XaGlsZVN0YXRlbWVudAorICAgICAgICAgIFBzaUtleXdvcmQ6ZG8oJ2RvJykKKyAgICAgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgICAgICBQc2lFeHByZXNzaW9uU3RhdGVtZW50CisgICAgICAgICAgICBQc2lNZXRob2RDYWxsRXhwcmVzc2lvbjpmb28oKQorICAgICAgICAgICAgICBQc2lSZWZlcmVuY2VFeHByZXNzaW9uOmZvbworICAgICAgICAgICAgICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgICAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICAgICAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgICAgICAgICBQc2lFeHByZXNzaW9uTGlzdAorICAgICAgICAgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgICAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgICAgICAgIFBzaUphdmFUb2tlbjpTRU1JQ09MT04oJzsnKQorICAgICAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgICAgIFBzaUtleXdvcmQ6d2hpbGUoJ3doaWxlJykKKyAgICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICAgIFBzaVJlZmVyZW5jZUV4cHJlc3Npb246Y29uZAorICAgICAgICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgICAgIFBzaUlkZW50aWZpZXI6Y29uZCgnY29uZCcpCisgICAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgICAgICBQc2lFcnJvckVsZW1lbnQ6JzsnIGV4cGVjdGVkCisgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gICcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuJykKKyAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL3N0YXRlbWVudFBhcnNpbmcvZm9yL0ZvckVhY2gxLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL3N0YXRlbWVudFBhcnNpbmcvZm9yL0ZvckVhY2gxLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTIxNGJmYwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvc3RhdGVtZW50UGFyc2luZy9mb3IvRm9yRWFjaDEuamF2YQpAQCAtMCwwICsxLDUgQEAKK2NsYXNzIEZvbyB7CisgIHsKKyAgICBmb3IoT2JqZWN0IG8gOiBtYXAuZW50cnlTZXQoKSkgOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9zdGF0ZW1lbnRQYXJzaW5nL2Zvci9Gb3JFYWNoMS50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL3N0YXRlbWVudFBhcnNpbmcvZm9yL0ZvckVhY2gxLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNGRjMzMwCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9zdGF0ZW1lbnRQYXJzaW5nL2Zvci9Gb3JFYWNoMS50eHQKQEAgLTAsMCArMSw2MSBAQAorUHNpSmF2YUZpbGU6Rm9yRWFjaDEuamF2YQorICBQc2lJbXBvcnRMaXN0CisgICAgPGVtcHR5IGxpc3Q+CisgIFBzaUNsYXNzOkZvbworICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaUtleXdvcmQ6Y2xhc3MoJ2NsYXNzJykKKyAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICBQc2lJZGVudGlmaWVyOkZvbygnRm9vJykKKyAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgUHNpV2hpdGVTcGFjZSgnXG4gICcpCisgICAgUHNpQ2xhc3NJbml0aWFsaXplcgorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gICAgJykKKyAgICAgICAgUHNpRm9yZWFjaFN0YXRlbWVudAorICAgICAgICAgIFBzaUtleXdvcmQ6Zm9yKCdmb3InKQorICAgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgICAgUHNpUGFyYW1ldGVyOm8KKyAgICAgICAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgICAgICBQc2lUeXBlRWxlbWVudDpPYmplY3QKKyAgICAgICAgICAgICAgUHNpSmF2YUNvZGVSZWZlcmVuY2VFbGVtZW50Ok9iamVjdAorICAgICAgICAgICAgICAgIFBzaUlkZW50aWZpZXI6T2JqZWN0KCdPYmplY3QnKQorICAgICAgICAgICAgICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgICAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICAgICAgICBQc2lJZGVudGlmaWVyOm8oJ28nKQorICAgICAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgICAgIFBzaUphdmFUb2tlbjpDT0xPTignOicpCisgICAgICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICAgICAgUHNpTWV0aG9kQ2FsbEV4cHJlc3Npb246bWFwLmVudHJ5U2V0KCkKKyAgICAgICAgICAgIFBzaVJlZmVyZW5jZUV4cHJlc3Npb246bWFwLmVudHJ5U2V0CisgICAgICAgICAgICAgIFBzaVJlZmVyZW5jZUV4cHJlc3Npb246bWFwCisgICAgICAgICAgICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgICAgICAgICAgUHNpSWRlbnRpZmllcjptYXAoJ21hcCcpCisgICAgICAgICAgICAgIFBzaUphdmFUb2tlbjpET1QoJy4nKQorICAgICAgICAgICAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgICAgICAgIFBzaUlkZW50aWZpZXI6ZW50cnlTZXQoJ2VudHJ5U2V0JykKKyAgICAgICAgICAgIFBzaUV4cHJlc3Npb25MaXN0CisgICAgICAgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgICAgICBQc2lFbXB0eVN0YXRlbWVudAorICAgICAgICAgICAgUHNpSmF2YVRva2VuOlNFTUlDT0xPTignOycpCisgICAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICAnKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcbicpCisgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9zdGF0ZW1lbnRQYXJzaW5nL2Zvci9Ob3JtYWwxLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL3N0YXRlbWVudFBhcnNpbmcvZm9yL05vcm1hbDEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44Y2I2ZjQxCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9zdGF0ZW1lbnRQYXJzaW5nL2Zvci9Ob3JtYWwxLmphdmEKQEAgLTAsMCArMSw2IEBACitjbGFzcyBGb297CisgIHsKKyAgICBmb3IoaW50IGkgPSAwOyBpIDwgMTA7IGkrKykKKyAgICAgIDsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvc3RhdGVtZW50UGFyc2luZy9mb3IvTm9ybWFsMS50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL3N0YXRlbWVudFBhcnNpbmcvZm9yL05vcm1hbDEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJlOWEyZTUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL3N0YXRlbWVudFBhcnNpbmcvZm9yL05vcm1hbDEudHh0CkBAIC0wLDAgKzEsNjggQEAKK1BzaUphdmFGaWxlOk5vcm1hbDEuamF2YQorICBQc2lJbXBvcnRMaXN0CisgICAgPGVtcHR5IGxpc3Q+CisgIFBzaUNsYXNzOkZvbworICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaUtleXdvcmQ6Y2xhc3MoJ2NsYXNzJykKKyAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICBQc2lJZGVudGlmaWVyOkZvbygnRm9vJykKKyAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgUHNpV2hpdGVTcGFjZSgnXG4gICcpCisgICAgUHNpQ2xhc3NJbml0aWFsaXplcgorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gICAgJykKKyAgICAgICAgUHNpRm9yU3RhdGVtZW50CisgICAgICAgICAgUHNpS2V5d29yZDpmb3IoJ2ZvcicpCisgICAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgICBQc2lEZWNsYXJhdGlvblN0YXRlbWVudAorICAgICAgICAgICAgUHNpTG9jYWxWYXJpYWJsZTppCisgICAgICAgICAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgICAgICAgUHNpVHlwZUVsZW1lbnQ6aW50CisgICAgICAgICAgICAgICAgUHNpS2V5d29yZDppbnQoJ2ludCcpCisgICAgICAgICAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgICAgICAgICBQc2lJZGVudGlmaWVyOmkoJ2knKQorICAgICAgICAgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgICAgICAgICAgUHNpSmF2YVRva2VuOkVRKCc9JykKKyAgICAgICAgICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICAgICAgICAgIFBzaUxpdGVyYWxFeHByZXNzaW9uOjAKKyAgICAgICAgICAgICAgICBQc2lKYXZhVG9rZW46SU5URUdFUl9MSVRFUkFMKCcwJykKKyAgICAgICAgICAgICAgUHNpSmF2YVRva2VuOlNFTUlDT0xPTignOycpCisgICAgICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICAgICAgUHNpQmluYXJ5RXhwcmVzc2lvbjppIDwgMTAKKyAgICAgICAgICAgIFBzaVJlZmVyZW5jZUV4cHJlc3Npb246aQorICAgICAgICAgICAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgICAgICAgIFBzaUlkZW50aWZpZXI6aSgnaScpCisgICAgICAgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgICAgICAgIFBzaUphdmFUb2tlbjpMVCgnPCcpCisgICAgICAgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgICAgICAgIFBzaUxpdGVyYWxFeHByZXNzaW9uOjEwCisgICAgICAgICAgICAgIFBzaUphdmFUb2tlbjpJTlRFR0VSX0xJVEVSQUwoJzEwJykKKyAgICAgICAgICBQc2lKYXZhVG9rZW46U0VNSUNPTE9OKCc7JykKKyAgICAgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgICAgICBQc2lFeHByZXNzaW9uU3RhdGVtZW50CisgICAgICAgICAgICBQc2lQb3N0Zml4RXhwcmVzc2lvbjppKysKKyAgICAgICAgICAgICAgUHNpUmVmZXJlbmNlRXhwcmVzc2lvbjppCisgICAgICAgICAgICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgICAgICAgICAgUHNpSWRlbnRpZmllcjppKCdpJykKKyAgICAgICAgICAgICAgUHNpSmF2YVRva2VuOlBMVVNQTFVTKCcrKycpCisgICAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAgICAgICcpCisgICAgICAgICAgUHNpRW1wdHlTdGF0ZW1lbnQKKyAgICAgICAgICAgIFBzaUphdmFUb2tlbjpTRU1JQ09MT04oJzsnKQorICAgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAgJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG4nKQorICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvc3RhdGVtZW50UGFyc2luZy9mb3IvTm9ybWFsMi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9zdGF0ZW1lbnRQYXJzaW5nL2Zvci9Ob3JtYWwyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGU0OGJlNgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvc3RhdGVtZW50UGFyc2luZy9mb3IvTm9ybWFsMi5qYXZhCkBAIC0wLDAgKzEsNSBAQAorY2xhc3MgRm9veworICB7CisgICAgZm9yKCA7IDsgKSBmb28oKTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvc3RhdGVtZW50UGFyc2luZy9mb3IvTm9ybWFsMi50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL3N0YXRlbWVudFBhcnNpbmcvZm9yL05vcm1hbDIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQyNGJkNWQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL3N0YXRlbWVudFBhcnNpbmcvZm9yL05vcm1hbDIudHh0CkBAIC0wLDAgKzEsNDggQEAKK1BzaUphdmFGaWxlOk5vcm1hbDIuamF2YQorICBQc2lJbXBvcnRMaXN0CisgICAgPGVtcHR5IGxpc3Q+CisgIFBzaUNsYXNzOkZvbworICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaUtleXdvcmQ6Y2xhc3MoJ2NsYXNzJykKKyAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICBQc2lJZGVudGlmaWVyOkZvbygnRm9vJykKKyAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgUHNpV2hpdGVTcGFjZSgnXG4gICcpCisgICAgUHNpQ2xhc3NJbml0aWFsaXplcgorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gICAgJykKKyAgICAgICAgUHNpRm9yU3RhdGVtZW50CisgICAgICAgICAgUHNpS2V5d29yZDpmb3IoJ2ZvcicpCisgICAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgICAgICBQc2lFbXB0eVN0YXRlbWVudAorICAgICAgICAgICAgUHNpSmF2YVRva2VuOlNFTUlDT0xPTignOycpCisgICAgICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICAgICAgUHNpSmF2YVRva2VuOlNFTUlDT0xPTignOycpCisgICAgICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgICAgICBQc2lFeHByZXNzaW9uU3RhdGVtZW50CisgICAgICAgICAgICBQc2lNZXRob2RDYWxsRXhwcmVzc2lvbjpmb28oKQorICAgICAgICAgICAgICBQc2lSZWZlcmVuY2VFeHByZXNzaW9uOmZvbworICAgICAgICAgICAgICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgICAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICAgICAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgICAgICAgICBQc2lFeHByZXNzaW9uTGlzdAorICAgICAgICAgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgICAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgICAgICAgIFBzaUphdmFUb2tlbjpTRU1JQ09MT04oJzsnKQorICAgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAgJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG4nKQorICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvc3RhdGVtZW50UGFyc2luZy9mb3IvVW5jb21wbGV0ZTEuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvc3RhdGVtZW50UGFyc2luZy9mb3IvVW5jb21wbGV0ZTEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZmRkNWVhCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9zdGF0ZW1lbnRQYXJzaW5nL2Zvci9VbmNvbXBsZXRlMS5qYXZhCkBAIC0wLDAgKzEsNSBAQAorY2xhc3MgRm9veworICB7CisgICAgZm9yCisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL3N0YXRlbWVudFBhcnNpbmcvZm9yL1VuY29tcGxldGUxLnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvc3RhdGVtZW50UGFyc2luZy9mb3IvVW5jb21wbGV0ZTEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU3YTdmYzQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL3N0YXRlbWVudFBhcnNpbmcvZm9yL1VuY29tcGxldGUxLnR4dApAQCAtMCwwICsxLDMxIEBACitQc2lKYXZhRmlsZTpVbmNvbXBsZXRlMS5qYXZhCisgIFBzaUltcG9ydExpc3QKKyAgICA8ZW1wdHkgbGlzdD4KKyAgUHNpQ2xhc3M6Rm9vCisgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpS2V5d29yZDpjbGFzcygnY2xhc3MnKQorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaUlkZW50aWZpZXI6Rm9vKCdGb28nKQorICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcbiAgJykKKyAgICBQc2lDbGFzc0luaXRpYWxpemVyCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAgICAnKQorICAgICAgICBQc2lGb3JTdGF0ZW1lbnQKKyAgICAgICAgICBQc2lLZXl3b3JkOmZvcignZm9yJykKKyAgICAgICAgICBQc2lFcnJvckVsZW1lbnQ6JygnIGV4cGVjdGVkCisgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gICcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuJykKKyAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvc3RhdGVtZW50UGFyc2luZy9mb3IvVW5jb21wbGV0ZTEwLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL3N0YXRlbWVudFBhcnNpbmcvZm9yL1VuY29tcGxldGUxMC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQyZWVkYjUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL3N0YXRlbWVudFBhcnNpbmcvZm9yL1VuY29tcGxldGUxMC5qYXZhCkBAIC0wLDAgKzEsNSBAQAorY2xhc3MgRm9veworICB7CisgICAgZm9yKGludCBpID0gMDsgaSA8IDApIGZvbygpOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9zdGF0ZW1lbnRQYXJzaW5nL2Zvci9VbmNvbXBsZXRlMTAudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9zdGF0ZW1lbnRQYXJzaW5nL2Zvci9VbmNvbXBsZXRlMTAudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgyOWRiMDkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL3N0YXRlbWVudFBhcnNpbmcvZm9yL1VuY29tcGxldGUxMC50eHQKQEAgLTAsMCArMSw2OSBAQAorUHNpSmF2YUZpbGU6VW5jb21wbGV0ZTEwLmphdmEKKyAgUHNpSW1wb3J0TGlzdAorICAgIDxlbXB0eSBsaXN0PgorICBQc2lDbGFzczpGb28KKyAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lLZXl3b3JkOmNsYXNzKCdjbGFzcycpCisgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgUHNpSWRlbnRpZmllcjpGb28oJ0ZvbycpCisgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuICAnKQorICAgIFBzaUNsYXNzSW5pdGlhbGl6ZXIKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICAgICcpCisgICAgICAgIFBzaUZvclN0YXRlbWVudAorICAgICAgICAgIFBzaUtleXdvcmQ6Zm9yKCdmb3InKQorICAgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgICAgUHNpRGVjbGFyYXRpb25TdGF0ZW1lbnQKKyAgICAgICAgICAgIFBzaUxvY2FsVmFyaWFibGU6aQorICAgICAgICAgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgICAgICAgIFBzaVR5cGVFbGVtZW50OmludAorICAgICAgICAgICAgICAgIFBzaUtleXdvcmQ6aW50KCdpbnQnKQorICAgICAgICAgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgICAgICAgICAgUHNpSWRlbnRpZmllcjppKCdpJykKKyAgICAgICAgICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICAgICAgICAgIFBzaUphdmFUb2tlbjpFUSgnPScpCisgICAgICAgICAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgICAgICAgICBQc2lMaXRlcmFsRXhwcmVzc2lvbjowCisgICAgICAgICAgICAgICAgUHNpSmF2YVRva2VuOklOVEVHRVJfTElURVJBTCgnMCcpCisgICAgICAgICAgICAgIFBzaUphdmFUb2tlbjpTRU1JQ09MT04oJzsnKQorICAgICAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgICAgIFBzaUJpbmFyeUV4cHJlc3Npb246aSA8IDAKKyAgICAgICAgICAgIFBzaVJlZmVyZW5jZUV4cHJlc3Npb246aQorICAgICAgICAgICAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgICAgICAgIFBzaUlkZW50aWZpZXI6aSgnaScpCisgICAgICAgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgICAgICAgIFBzaUphdmFUb2tlbjpMVCgnPCcpCisgICAgICAgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgICAgICAgIFBzaUxpdGVyYWxFeHByZXNzaW9uOjAKKyAgICAgICAgICAgICAgUHNpSmF2YVRva2VuOklOVEVHRVJfTElURVJBTCgnMCcpCisgICAgICAgICAgUHNpRXJyb3JFbGVtZW50Oic7JyBleHBlY3RlZAorICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgICAgICBQc2lFeHByZXNzaW9uU3RhdGVtZW50CisgICAgICAgICAgICBQc2lNZXRob2RDYWxsRXhwcmVzc2lvbjpmb28oKQorICAgICAgICAgICAgICBQc2lSZWZlcmVuY2VFeHByZXNzaW9uOmZvbworICAgICAgICAgICAgICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgICAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICAgICAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgICAgICAgICBQc2lFeHByZXNzaW9uTGlzdAorICAgICAgICAgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgICAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgICAgICAgIFBzaUphdmFUb2tlbjpTRU1JQ09MT04oJzsnKQorICAgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAgJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG4nKQorICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvc3RhdGVtZW50UGFyc2luZy9mb3IvVW5jb21wbGV0ZTIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvc3RhdGVtZW50UGFyc2luZy9mb3IvVW5jb21wbGV0ZTIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYjQ0ZjMxCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9zdGF0ZW1lbnRQYXJzaW5nL2Zvci9VbmNvbXBsZXRlMi5qYXZhCkBAIC0wLDAgKzEsNSBAQAorY2xhc3MgRm9veworICB7CisgICAgZm9yKAorICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9zdGF0ZW1lbnRQYXJzaW5nL2Zvci9VbmNvbXBsZXRlMi50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL3N0YXRlbWVudFBhcnNpbmcvZm9yL1VuY29tcGxldGUyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYWE5N2RmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9zdGF0ZW1lbnRQYXJzaW5nL2Zvci9VbmNvbXBsZXRlMi50eHQKQEAgLTAsMCArMSwzMiBAQAorUHNpSmF2YUZpbGU6VW5jb21wbGV0ZTIuamF2YQorICBQc2lJbXBvcnRMaXN0CisgICAgPGVtcHR5IGxpc3Q+CisgIFBzaUNsYXNzOkZvbworICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaUtleXdvcmQ6Y2xhc3MoJ2NsYXNzJykKKyAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICBQc2lJZGVudGlmaWVyOkZvbygnRm9vJykKKyAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgUHNpV2hpdGVTcGFjZSgnXG4gICcpCisgICAgUHNpQ2xhc3NJbml0aWFsaXplcgorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gICAgJykKKyAgICAgICAgUHNpRm9yU3RhdGVtZW50CisgICAgICAgICAgUHNpS2V5d29yZDpmb3IoJ2ZvcicpCisgICAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgICBQc2lFcnJvckVsZW1lbnQ6U3RhdGVtZW50IGV4cGVjdGVkCisgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gICcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuJykKKyAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvc3RhdGVtZW50UGFyc2luZy9mb3IvVW5jb21wbGV0ZTMuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvc3RhdGVtZW50UGFyc2luZy9mb3IvVW5jb21wbGV0ZTMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NjA5NGRjCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9zdGF0ZW1lbnRQYXJzaW5nL2Zvci9VbmNvbXBsZXRlMy5qYXZhCkBAIC0wLDAgKzEsNSBAQAorY2xhc3MgRm9veworICB7CisgICAgZm9yKGludCBpID0gMDsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvc3RhdGVtZW50UGFyc2luZy9mb3IvVW5jb21wbGV0ZTMudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9zdGF0ZW1lbnRQYXJzaW5nL2Zvci9VbmNvbXBsZXRlMy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGMyMDAwNAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvc3RhdGVtZW50UGFyc2luZy9mb3IvVW5jb21wbGV0ZTMudHh0CkBAIC0wLDAgKzEsNDYgQEAKK1BzaUphdmFGaWxlOlVuY29tcGxldGUzLmphdmEKKyAgUHNpSW1wb3J0TGlzdAorICAgIDxlbXB0eSBsaXN0PgorICBQc2lDbGFzczpGb28KKyAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lLZXl3b3JkOmNsYXNzKCdjbGFzcycpCisgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgUHNpSWRlbnRpZmllcjpGb28oJ0ZvbycpCisgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuICAnKQorICAgIFBzaUNsYXNzSW5pdGlhbGl6ZXIKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICAgICcpCisgICAgICAgIFBzaUZvclN0YXRlbWVudAorICAgICAgICAgIFBzaUtleXdvcmQ6Zm9yKCdmb3InKQorICAgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgICAgUHNpRGVjbGFyYXRpb25TdGF0ZW1lbnQKKyAgICAgICAgICAgIFBzaUxvY2FsVmFyaWFibGU6aQorICAgICAgICAgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgICAgICAgIFBzaVR5cGVFbGVtZW50OmludAorICAgICAgICAgICAgICAgIFBzaUtleXdvcmQ6aW50KCdpbnQnKQorICAgICAgICAgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgICAgICAgICAgUHNpSWRlbnRpZmllcjppKCdpJykKKyAgICAgICAgICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICAgICAgICAgIFBzaUphdmFUb2tlbjpFUSgnPScpCisgICAgICAgICAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgICAgICAgICBQc2lMaXRlcmFsRXhwcmVzc2lvbjowCisgICAgICAgICAgICAgICAgUHNpSmF2YVRva2VuOklOVEVHRVJfTElURVJBTCgnMCcpCisgICAgICAgICAgICAgIFBzaUphdmFUb2tlbjpTRU1JQ09MT04oJzsnKQorICAgICAgICAgIFBzaUVycm9yRWxlbWVudDonOycgZXhwZWN0ZWQKKyAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAgJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG4nKQorICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9zdGF0ZW1lbnRQYXJzaW5nL2Zvci9VbmNvbXBsZXRlNC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9zdGF0ZW1lbnRQYXJzaW5nL2Zvci9VbmNvbXBsZXRlNC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAwY2FlMjAKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL3N0YXRlbWVudFBhcnNpbmcvZm9yL1VuY29tcGxldGU0LmphdmEKQEAgLTAsMCArMSw1IEBACitjbGFzcyBGb297CisgIHsKKyAgICBmb3IoaW50IGkgPSAwOyBpIDwgMTAKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvc3RhdGVtZW50UGFyc2luZy9mb3IvVW5jb21wbGV0ZTQudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9zdGF0ZW1lbnRQYXJzaW5nL2Zvci9VbmNvbXBsZXRlNC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODk1ZGE0MAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvc3RhdGVtZW50UGFyc2luZy9mb3IvVW5jb21wbGV0ZTQudHh0CkBAIC0wLDAgKzEsNTcgQEAKK1BzaUphdmFGaWxlOlVuY29tcGxldGU0LmphdmEKKyAgUHNpSW1wb3J0TGlzdAorICAgIDxlbXB0eSBsaXN0PgorICBQc2lDbGFzczpGb28KKyAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lLZXl3b3JkOmNsYXNzKCdjbGFzcycpCisgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgUHNpSWRlbnRpZmllcjpGb28oJ0ZvbycpCisgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuICAnKQorICAgIFBzaUNsYXNzSW5pdGlhbGl6ZXIKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICAgICcpCisgICAgICAgIFBzaUZvclN0YXRlbWVudAorICAgICAgICAgIFBzaUtleXdvcmQ6Zm9yKCdmb3InKQorICAgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgICAgUHNpRGVjbGFyYXRpb25TdGF0ZW1lbnQKKyAgICAgICAgICAgIFBzaUxvY2FsVmFyaWFibGU6aQorICAgICAgICAgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgICAgICAgIFBzaVR5cGVFbGVtZW50OmludAorICAgICAgICAgICAgICAgIFBzaUtleXdvcmQ6aW50KCdpbnQnKQorICAgICAgICAgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgICAgICAgICAgUHNpSWRlbnRpZmllcjppKCdpJykKKyAgICAgICAgICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICAgICAgICAgIFBzaUphdmFUb2tlbjpFUSgnPScpCisgICAgICAgICAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgICAgICAgICBQc2lMaXRlcmFsRXhwcmVzc2lvbjowCisgICAgICAgICAgICAgICAgUHNpSmF2YVRva2VuOklOVEVHRVJfTElURVJBTCgnMCcpCisgICAgICAgICAgICAgIFBzaUphdmFUb2tlbjpTRU1JQ09MT04oJzsnKQorICAgICAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgICAgIFBzaUJpbmFyeUV4cHJlc3Npb246aSA8IDEwCisgICAgICAgICAgICBQc2lSZWZlcmVuY2VFeHByZXNzaW9uOmkKKyAgICAgICAgICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICAgICAgICBQc2lJZGVudGlmaWVyOmkoJ2knKQorICAgICAgICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICAgICAgICBQc2lKYXZhVG9rZW46TFQoJzwnKQorICAgICAgICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICAgICAgICBQc2lMaXRlcmFsRXhwcmVzc2lvbjoxMAorICAgICAgICAgICAgICBQc2lKYXZhVG9rZW46SU5URUdFUl9MSVRFUkFMKCcxMCcpCisgICAgICAgICAgUHNpRXJyb3JFbGVtZW50Oic7JyBleHBlY3RlZAorICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICAnKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcbicpCisgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9zdGF0ZW1lbnRQYXJzaW5nL2Zvci9VbmNvbXBsZXRlNS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9zdGF0ZW1lbnRQYXJzaW5nL2Zvci9VbmNvbXBsZXRlNS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA3YmViODAKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL3N0YXRlbWVudFBhcnNpbmcvZm9yL1VuY29tcGxldGU1LmphdmEKQEAgLTAsMCArMSw1IEBACitjbGFzcyBGb297CisgIHsKKyAgICBmb3IoaW50IGkgPSAwOyBpIDwgMTA7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL3N0YXRlbWVudFBhcnNpbmcvZm9yL1VuY29tcGxldGU1LnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvc3RhdGVtZW50UGFyc2luZy9mb3IvVW5jb21wbGV0ZTUudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM5ZWVlMDgKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL3N0YXRlbWVudFBhcnNpbmcvZm9yL1VuY29tcGxldGU1LnR4dApAQCAtMCwwICsxLDU4IEBACitQc2lKYXZhRmlsZTpVbmNvbXBsZXRlNS5qYXZhCisgIFBzaUltcG9ydExpc3QKKyAgICA8ZW1wdHkgbGlzdD4KKyAgUHNpQ2xhc3M6Rm9vCisgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpS2V5d29yZDpjbGFzcygnY2xhc3MnKQorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaUlkZW50aWZpZXI6Rm9vKCdGb28nKQorICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcbiAgJykKKyAgICBQc2lDbGFzc0luaXRpYWxpemVyCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAgICAnKQorICAgICAgICBQc2lGb3JTdGF0ZW1lbnQKKyAgICAgICAgICBQc2lLZXl3b3JkOmZvcignZm9yJykKKyAgICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICAgIFBzaURlY2xhcmF0aW9uU3RhdGVtZW50CisgICAgICAgICAgICBQc2lMb2NhbFZhcmlhYmxlOmkKKyAgICAgICAgICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICAgICAgICBQc2lUeXBlRWxlbWVudDppbnQKKyAgICAgICAgICAgICAgICBQc2lLZXl3b3JkOmludCgnaW50JykKKyAgICAgICAgICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICAgICAgICAgIFBzaUlkZW50aWZpZXI6aSgnaScpCisgICAgICAgICAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgICAgICAgICBQc2lKYXZhVG9rZW46RVEoJz0nKQorICAgICAgICAgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgICAgICAgICAgUHNpTGl0ZXJhbEV4cHJlc3Npb246MAorICAgICAgICAgICAgICAgIFBzaUphdmFUb2tlbjpJTlRFR0VSX0xJVEVSQUwoJzAnKQorICAgICAgICAgICAgICBQc2lKYXZhVG9rZW46U0VNSUNPTE9OKCc7JykKKyAgICAgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgICAgICBQc2lCaW5hcnlFeHByZXNzaW9uOmkgPCAxMAorICAgICAgICAgICAgUHNpUmVmZXJlbmNlRXhwcmVzc2lvbjppCisgICAgICAgICAgICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgICAgICAgUHNpSWRlbnRpZmllcjppKCdpJykKKyAgICAgICAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgICAgICAgUHNpSmF2YVRva2VuOkxUKCc8JykKKyAgICAgICAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgICAgICAgUHNpTGl0ZXJhbEV4cHJlc3Npb246MTAKKyAgICAgICAgICAgICAgUHNpSmF2YVRva2VuOklOVEVHRVJfTElURVJBTCgnMTAnKQorICAgICAgICAgIFBzaUphdmFUb2tlbjpTRU1JQ09MT04oJzsnKQorICAgICAgICAgIFBzaUVycm9yRWxlbWVudDonKScgZXhwZWN0ZWQKKyAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAgJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG4nKQorICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvc3RhdGVtZW50UGFyc2luZy9mb3IvVW5jb21wbGV0ZTYuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvc3RhdGVtZW50UGFyc2luZy9mb3IvVW5jb21wbGV0ZTYuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYWZlYWRiCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9zdGF0ZW1lbnRQYXJzaW5nL2Zvci9VbmNvbXBsZXRlNi5qYXZhCkBAIC0wLDAgKzEsNSBAQAorY2xhc3MgRm9veworICB7CisgICAgZm9yKGludCBpID0gMDsgaSA8IDEwOyBpKysKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvc3RhdGVtZW50UGFyc2luZy9mb3IvVW5jb21wbGV0ZTYudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9zdGF0ZW1lbnRQYXJzaW5nL2Zvci9VbmNvbXBsZXRlNi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTlkZjIzMgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvc3RhdGVtZW50UGFyc2luZy9mb3IvVW5jb21wbGV0ZTYudHh0CkBAIC0wLDAgKzEsNjYgQEAKK1BzaUphdmFGaWxlOlVuY29tcGxldGU2LmphdmEKKyAgUHNpSW1wb3J0TGlzdAorICAgIDxlbXB0eSBsaXN0PgorICBQc2lDbGFzczpGb28KKyAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lLZXl3b3JkOmNsYXNzKCdjbGFzcycpCisgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgUHNpSWRlbnRpZmllcjpGb28oJ0ZvbycpCisgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuICAnKQorICAgIFBzaUNsYXNzSW5pdGlhbGl6ZXIKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICAgICcpCisgICAgICAgIFBzaUZvclN0YXRlbWVudAorICAgICAgICAgIFBzaUtleXdvcmQ6Zm9yKCdmb3InKQorICAgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgICAgUHNpRGVjbGFyYXRpb25TdGF0ZW1lbnQKKyAgICAgICAgICAgIFBzaUxvY2FsVmFyaWFibGU6aQorICAgICAgICAgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgICAgICAgIFBzaVR5cGVFbGVtZW50OmludAorICAgICAgICAgICAgICAgIFBzaUtleXdvcmQ6aW50KCdpbnQnKQorICAgICAgICAgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgICAgICAgICAgUHNpSWRlbnRpZmllcjppKCdpJykKKyAgICAgICAgICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICAgICAgICAgIFBzaUphdmFUb2tlbjpFUSgnPScpCisgICAgICAgICAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgICAgICAgICBQc2lMaXRlcmFsRXhwcmVzc2lvbjowCisgICAgICAgICAgICAgICAgUHNpSmF2YVRva2VuOklOVEVHRVJfTElURVJBTCgnMCcpCisgICAgICAgICAgICAgIFBzaUphdmFUb2tlbjpTRU1JQ09MT04oJzsnKQorICAgICAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgICAgIFBzaUJpbmFyeUV4cHJlc3Npb246aSA8IDEwCisgICAgICAgICAgICBQc2lSZWZlcmVuY2VFeHByZXNzaW9uOmkKKyAgICAgICAgICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICAgICAgICBQc2lJZGVudGlmaWVyOmkoJ2knKQorICAgICAgICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICAgICAgICBQc2lKYXZhVG9rZW46TFQoJzwnKQorICAgICAgICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICAgICAgICBQc2lMaXRlcmFsRXhwcmVzc2lvbjoxMAorICAgICAgICAgICAgICBQc2lKYXZhVG9rZW46SU5URUdFUl9MSVRFUkFMKCcxMCcpCisgICAgICAgICAgUHNpSmF2YVRva2VuOlNFTUlDT0xPTignOycpCisgICAgICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICAgICAgUHNpRXhwcmVzc2lvblN0YXRlbWVudAorICAgICAgICAgICAgUHNpUG9zdGZpeEV4cHJlc3Npb246aSsrCisgICAgICAgICAgICAgIFBzaVJlZmVyZW5jZUV4cHJlc3Npb246aQorICAgICAgICAgICAgICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgICAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICAgICAgICAgIFBzaUlkZW50aWZpZXI6aSgnaScpCisgICAgICAgICAgICAgIFBzaUphdmFUb2tlbjpQTFVTUExVUygnKysnKQorICAgICAgICAgIFBzaUVycm9yRWxlbWVudDonKScgZXhwZWN0ZWQKKyAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAgJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG4nKQorICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvc3RhdGVtZW50UGFyc2luZy9mb3IvVW5jb21wbGV0ZTcuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvc3RhdGVtZW50UGFyc2luZy9mb3IvVW5jb21wbGV0ZTcuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yODQ5ZGExCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9zdGF0ZW1lbnRQYXJzaW5nL2Zvci9VbmNvbXBsZXRlNy5qYXZhCkBAIC0wLDAgKzEsNSBAQAorY2xhc3MgRm9veworICB7CisgICAgZm9yKGludCBpID0gMDsgaSA8IDEwOyBpKyspCisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL3N0YXRlbWVudFBhcnNpbmcvZm9yL1VuY29tcGxldGU3LnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvc3RhdGVtZW50UGFyc2luZy9mb3IvVW5jb21wbGV0ZTcudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZhMWU5YWMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL3N0YXRlbWVudFBhcnNpbmcvZm9yL1VuY29tcGxldGU3LnR4dApAQCAtMCwwICsxLDY3IEBACitQc2lKYXZhRmlsZTpVbmNvbXBsZXRlNy5qYXZhCisgIFBzaUltcG9ydExpc3QKKyAgICA8ZW1wdHkgbGlzdD4KKyAgUHNpQ2xhc3M6Rm9vCisgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpS2V5d29yZDpjbGFzcygnY2xhc3MnKQorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaUlkZW50aWZpZXI6Rm9vKCdGb28nKQorICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcbiAgJykKKyAgICBQc2lDbGFzc0luaXRpYWxpemVyCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAgICAnKQorICAgICAgICBQc2lGb3JTdGF0ZW1lbnQKKyAgICAgICAgICBQc2lLZXl3b3JkOmZvcignZm9yJykKKyAgICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICAgIFBzaURlY2xhcmF0aW9uU3RhdGVtZW50CisgICAgICAgICAgICBQc2lMb2NhbFZhcmlhYmxlOmkKKyAgICAgICAgICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICAgICAgICBQc2lUeXBlRWxlbWVudDppbnQKKyAgICAgICAgICAgICAgICBQc2lLZXl3b3JkOmludCgnaW50JykKKyAgICAgICAgICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICAgICAgICAgIFBzaUlkZW50aWZpZXI6aSgnaScpCisgICAgICAgICAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgICAgICAgICBQc2lKYXZhVG9rZW46RVEoJz0nKQorICAgICAgICAgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgICAgICAgICAgUHNpTGl0ZXJhbEV4cHJlc3Npb246MAorICAgICAgICAgICAgICAgIFBzaUphdmFUb2tlbjpJTlRFR0VSX0xJVEVSQUwoJzAnKQorICAgICAgICAgICAgICBQc2lKYXZhVG9rZW46U0VNSUNPTE9OKCc7JykKKyAgICAgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgICAgICBQc2lCaW5hcnlFeHByZXNzaW9uOmkgPCAxMAorICAgICAgICAgICAgUHNpUmVmZXJlbmNlRXhwcmVzc2lvbjppCisgICAgICAgICAgICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgICAgICAgUHNpSWRlbnRpZmllcjppKCdpJykKKyAgICAgICAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgICAgICAgUHNpSmF2YVRva2VuOkxUKCc8JykKKyAgICAgICAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgICAgICAgUHNpTGl0ZXJhbEV4cHJlc3Npb246MTAKKyAgICAgICAgICAgICAgUHNpSmF2YVRva2VuOklOVEVHRVJfTElURVJBTCgnMTAnKQorICAgICAgICAgIFBzaUphdmFUb2tlbjpTRU1JQ09MT04oJzsnKQorICAgICAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgICAgIFBzaUV4cHJlc3Npb25TdGF0ZW1lbnQKKyAgICAgICAgICAgIFBzaVBvc3RmaXhFeHByZXNzaW9uOmkrKworICAgICAgICAgICAgICBQc2lSZWZlcmVuY2VFeHByZXNzaW9uOmkKKyAgICAgICAgICAgICAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICAgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgICAgICAgICBQc2lJZGVudGlmaWVyOmkoJ2knKQorICAgICAgICAgICAgICBQc2lKYXZhVG9rZW46UExVU1BMVVMoJysrJykKKyAgICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgICAgIFBzaUVycm9yRWxlbWVudDpTdGF0ZW1lbnQgZXhwZWN0ZWQKKyAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAgJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG4nKQorICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvc3RhdGVtZW50UGFyc2luZy9mb3IvVW5jb21wbGV0ZTguamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvc3RhdGVtZW50UGFyc2luZy9mb3IvVW5jb21wbGV0ZTguamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MjExNzg4Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9zdGF0ZW1lbnRQYXJzaW5nL2Zvci9VbmNvbXBsZXRlOC5qYXZhCkBAIC0wLDAgKzEsNSBAQAorY2xhc3MgRm9veworICB7CisgICAgZm9yKCkgZm9vKCk7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL3N0YXRlbWVudFBhcnNpbmcvZm9yL1VuY29tcGxldGU4LnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvc3RhdGVtZW50UGFyc2luZy9mb3IvVW5jb21wbGV0ZTgudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEzNzA0MTUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL3N0YXRlbWVudFBhcnNpbmcvZm9yL1VuY29tcGxldGU4LnR4dApAQCAtMCwwICsxLDQ0IEBACitQc2lKYXZhRmlsZTpVbmNvbXBsZXRlOC5qYXZhCisgIFBzaUltcG9ydExpc3QKKyAgICA8ZW1wdHkgbGlzdD4KKyAgUHNpQ2xhc3M6Rm9vCisgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpS2V5d29yZDpjbGFzcygnY2xhc3MnKQorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaUlkZW50aWZpZXI6Rm9vKCdGb28nKQorICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcbiAgJykKKyAgICBQc2lDbGFzc0luaXRpYWxpemVyCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAgICAnKQorICAgICAgICBQc2lGb3JTdGF0ZW1lbnQKKyAgICAgICAgICBQc2lLZXl3b3JkOmZvcignZm9yJykKKyAgICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICAgIFBzaUVycm9yRWxlbWVudDpTdGF0ZW1lbnQgZXhwZWN0ZWQKKyAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICAgICAgUHNpRXhwcmVzc2lvblN0YXRlbWVudAorICAgICAgICAgICAgUHNpTWV0aG9kQ2FsbEV4cHJlc3Npb246Zm9vKCkKKyAgICAgICAgICAgICAgUHNpUmVmZXJlbmNlRXhwcmVzc2lvbjpmb28KKyAgICAgICAgICAgICAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICAgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgICAgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgICAgICAgICAgUHNpRXhwcmVzc2lvbkxpc3QKKyAgICAgICAgICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICAgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICAgICAgICBQc2lKYXZhVG9rZW46U0VNSUNPTE9OKCc7JykKKyAgICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gICcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuJykKKyAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL3N0YXRlbWVudFBhcnNpbmcvZm9yL1VuY29tcGxldGU5LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL3N0YXRlbWVudFBhcnNpbmcvZm9yL1VuY29tcGxldGU5LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2NhN2QyYwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvc3RhdGVtZW50UGFyc2luZy9mb3IvVW5jb21wbGV0ZTkuamF2YQpAQCAtMCwwICsxLDUgQEAKK2NsYXNzIEZvb3sKKyAgeworICAgIGZvcihpbnQgaSA9IDA7KSBmb28oKTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvc3RhdGVtZW50UGFyc2luZy9mb3IvVW5jb21wbGV0ZTkudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9zdGF0ZW1lbnRQYXJzaW5nL2Zvci9VbmNvbXBsZXRlOS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2ViYzYxNgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvc3RhdGVtZW50UGFyc2luZy9mb3IvVW5jb21wbGV0ZTkudHh0CkBAIC0wLDAgKzEsNTggQEAKK1BzaUphdmFGaWxlOlVuY29tcGxldGU5LmphdmEKKyAgUHNpSW1wb3J0TGlzdAorICAgIDxlbXB0eSBsaXN0PgorICBQc2lDbGFzczpGb28KKyAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lLZXl3b3JkOmNsYXNzKCdjbGFzcycpCisgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgUHNpSWRlbnRpZmllcjpGb28oJ0ZvbycpCisgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuICAnKQorICAgIFBzaUNsYXNzSW5pdGlhbGl6ZXIKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICAgICcpCisgICAgICAgIFBzaUZvclN0YXRlbWVudAorICAgICAgICAgIFBzaUtleXdvcmQ6Zm9yKCdmb3InKQorICAgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgICAgUHNpRGVjbGFyYXRpb25TdGF0ZW1lbnQKKyAgICAgICAgICAgIFBzaUxvY2FsVmFyaWFibGU6aQorICAgICAgICAgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgICAgICAgIFBzaVR5cGVFbGVtZW50OmludAorICAgICAgICAgICAgICAgIFBzaUtleXdvcmQ6aW50KCdpbnQnKQorICAgICAgICAgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgICAgICAgICAgUHNpSWRlbnRpZmllcjppKCdpJykKKyAgICAgICAgICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICAgICAgICAgIFBzaUphdmFUb2tlbjpFUSgnPScpCisgICAgICAgICAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgICAgICAgICBQc2lMaXRlcmFsRXhwcmVzc2lvbjowCisgICAgICAgICAgICAgICAgUHNpSmF2YVRva2VuOklOVEVHRVJfTElURVJBTCgnMCcpCisgICAgICAgICAgICAgIFBzaUphdmFUb2tlbjpTRU1JQ09MT04oJzsnKQorICAgICAgICAgIFBzaUVycm9yRWxlbWVudDonOycgZXhwZWN0ZWQKKyAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICAgICAgUHNpRXhwcmVzc2lvblN0YXRlbWVudAorICAgICAgICAgICAgUHNpTWV0aG9kQ2FsbEV4cHJlc3Npb246Zm9vKCkKKyAgICAgICAgICAgICAgUHNpUmVmZXJlbmNlRXhwcmVzc2lvbjpmb28KKyAgICAgICAgICAgICAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICAgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgICAgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgICAgICAgICAgUHNpRXhwcmVzc2lvbkxpc3QKKyAgICAgICAgICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICAgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICAgICAgICBQc2lKYXZhVG9rZW46U0VNSUNPTE9OKCc7JykKKyAgICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gICcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuJykKKyAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL3N0YXRlbWVudFBhcnNpbmcvZ2VuZXJpY3NQYXJzaW5nL0Zvci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9zdGF0ZW1lbnRQYXJzaW5nL2dlbmVyaWNzUGFyc2luZy9Gb3IuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MTljMGNmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9zdGF0ZW1lbnRQYXJzaW5nL2dlbmVyaWNzUGFyc2luZy9Gb3IuamF2YQpAQCAtMCwwICsxLDcgQEAKK2NsYXNzIFRlc3QgeworICAgIHZvaWQgbWV0aG9kKCkgeworICAgICAgICBmb3IoSXRlcmF0b3I8U3RyaW5nPiBpdCA9IG51bGw7IGl0Lmhhc05leHQoKTspIHsKKyAgICAgICAgICAgIFN0cmluZyBzID0gaXQubmV4dCgpOworICAgICAgICB9CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvc3RhdGVtZW50UGFyc2luZy9nZW5lcmljc1BhcnNpbmcvRm9yLnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvc3RhdGVtZW50UGFyc2luZy9nZW5lcmljc1BhcnNpbmcvRm9yLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMTZkY2NjCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9zdGF0ZW1lbnRQYXJzaW5nL2dlbmVyaWNzUGFyc2luZy9Gb3IudHh0CkBAIC0wLDAgKzEsMTE3IEBACitQc2lKYXZhRmlsZTpGb3IuamF2YQorICBQc2lJbXBvcnRMaXN0CisgICAgPGVtcHR5IGxpc3Q+CisgIFBzaUNsYXNzOlRlc3QKKyAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lLZXl3b3JkOmNsYXNzKCdjbGFzcycpCisgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgUHNpSWRlbnRpZmllcjpUZXN0KCdUZXN0JykKKyAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgUHNpV2hpdGVTcGFjZSgnXG4gICAgJykKKyAgICBQc2lNZXRob2Q6bWV0aG9kCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6bWV0aG9kKCdtZXRob2QnKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAgICAgICAgJykKKyAgICAgICAgUHNpRm9yU3RhdGVtZW50CisgICAgICAgICAgUHNpS2V5d29yZDpmb3IoJ2ZvcicpCisgICAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgICBQc2lEZWNsYXJhdGlvblN0YXRlbWVudAorICAgICAgICAgICAgUHNpTG9jYWxWYXJpYWJsZTppdAorICAgICAgICAgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgICAgICAgIFBzaVR5cGVFbGVtZW50Okl0ZXJhdG9yPFN0cmluZz4KKyAgICAgICAgICAgICAgICBQc2lKYXZhQ29kZVJlZmVyZW5jZUVsZW1lbnQ6SXRlcmF0b3I8U3RyaW5nPgorICAgICAgICAgICAgICAgICAgUHNpSWRlbnRpZmllcjpJdGVyYXRvcignSXRlcmF0b3InKQorICAgICAgICAgICAgICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICAgICAgICAgICAgICBQc2lKYXZhVG9rZW46TFQoJzwnKQorICAgICAgICAgICAgICAgICAgICBQc2lUeXBlRWxlbWVudDpTdHJpbmcKKyAgICAgICAgICAgICAgICAgICAgICBQc2lKYXZhQ29kZVJlZmVyZW5jZUVsZW1lbnQ6U3RyaW5nCisgICAgICAgICAgICAgICAgICAgICAgICBQc2lJZGVudGlmaWVyOlN0cmluZygnU3RyaW5nJykKKyAgICAgICAgICAgICAgICAgICAgICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgICAgICAgICAgICAgIFBzaUphdmFUb2tlbjpHVCgnPicpCisgICAgICAgICAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgICAgICAgICBQc2lJZGVudGlmaWVyOml0KCdpdCcpCisgICAgICAgICAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgICAgICAgICBQc2lKYXZhVG9rZW46RVEoJz0nKQorICAgICAgICAgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgICAgICAgICAgUHNpTGl0ZXJhbEV4cHJlc3Npb246bnVsbAorICAgICAgICAgICAgICAgIFBzaUphdmFUb2tlbjpOVUxMX0tFWVdPUkQoJ251bGwnKQorICAgICAgICAgICAgICBQc2lKYXZhVG9rZW46U0VNSUNPTE9OKCc7JykKKyAgICAgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgICAgICBQc2lNZXRob2RDYWxsRXhwcmVzc2lvbjppdC5oYXNOZXh0KCkKKyAgICAgICAgICAgIFBzaVJlZmVyZW5jZUV4cHJlc3Npb246aXQuaGFzTmV4dAorICAgICAgICAgICAgICBQc2lSZWZlcmVuY2VFeHByZXNzaW9uOml0CisgICAgICAgICAgICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgICAgICAgICAgUHNpSWRlbnRpZmllcjppdCgnaXQnKQorICAgICAgICAgICAgICBQc2lKYXZhVG9rZW46RE9UKCcuJykKKyAgICAgICAgICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICAgICAgICBQc2lJZGVudGlmaWVyOmhhc05leHQoJ2hhc05leHQnKQorICAgICAgICAgICAgUHNpRXhwcmVzc2lvbkxpc3QKKyAgICAgICAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgICAgICBQc2lKYXZhVG9rZW46U0VNSUNPTE9OKCc7JykKKyAgICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgICAgIFBzaUJsb2NrU3RhdGVtZW50CisgICAgICAgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgICAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICAgICAgICAgICAgJykKKyAgICAgICAgICAgICAgUHNpRGVjbGFyYXRpb25TdGF0ZW1lbnQKKyAgICAgICAgICAgICAgICBQc2lMb2NhbFZhcmlhYmxlOnMKKyAgICAgICAgICAgICAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgICAgICAgICAgICBQc2lUeXBlRWxlbWVudDpTdHJpbmcKKyAgICAgICAgICAgICAgICAgICAgUHNpSmF2YUNvZGVSZWZlcmVuY2VFbGVtZW50OlN0cmluZworICAgICAgICAgICAgICAgICAgICAgIFBzaUlkZW50aWZpZXI6U3RyaW5nKCdTdHJpbmcnKQorICAgICAgICAgICAgICAgICAgICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgICAgICAgICAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICAgICAgICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICAgICAgICAgICAgICBQc2lJZGVudGlmaWVyOnMoJ3MnKQorICAgICAgICAgICAgICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICAgICAgICAgICAgICBQc2lKYXZhVG9rZW46RVEoJz0nKQorICAgICAgICAgICAgICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICAgICAgICAgICAgICBQc2lNZXRob2RDYWxsRXhwcmVzc2lvbjppdC5uZXh0KCkKKyAgICAgICAgICAgICAgICAgICAgUHNpUmVmZXJlbmNlRXhwcmVzc2lvbjppdC5uZXh0CisgICAgICAgICAgICAgICAgICAgICAgUHNpUmVmZXJlbmNlRXhwcmVzc2lvbjppdAorICAgICAgICAgICAgICAgICAgICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgICAgIFBzaUlkZW50aWZpZXI6aXQoJ2l0JykKKyAgICAgICAgICAgICAgICAgICAgICBQc2lKYXZhVG9rZW46RE9UKCcuJykKKyAgICAgICAgICAgICAgICAgICAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICAgICAgICAgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgICBQc2lJZGVudGlmaWVyOm5leHQoJ25leHQnKQorICAgICAgICAgICAgICAgICAgICBQc2lFeHByZXNzaW9uTGlzdAorICAgICAgICAgICAgICAgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgICAgICAgICAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgICAgICAgICAgICAgIFBzaUphdmFUb2tlbjpTRU1JQ09MT04oJzsnKQorICAgICAgICAgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAgICAgICAgJykKKyAgICAgICAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICAgICcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuJykKKyAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL3N0YXRlbWVudFBhcnNpbmcvZ2VuZXJpY3NQYXJzaW5nL0xvY2FsVmFyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL3N0YXRlbWVudFBhcnNpbmcvZ2VuZXJpY3NQYXJzaW5nL0xvY2FsVmFyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzAwM2M1YgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvc3RhdGVtZW50UGFyc2luZy9nZW5lcmljc1BhcnNpbmcvTG9jYWxWYXIuamF2YQpAQCAtMCwwICsxLDUgQEAKK2NsYXNzIFRlc3QgeworICAgIHZvaWQgbWV0aG9kKCkgeworICAgICAgICBMaXN0PEludGVnZXI+IGxpc3Q7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvc3RhdGVtZW50UGFyc2luZy9nZW5lcmljc1BhcnNpbmcvTG9jYWxWYXIudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9zdGF0ZW1lbnRQYXJzaW5nL2dlbmVyaWNzUGFyc2luZy9Mb2NhbFZhci50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDI5ZGI5NwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvc3RhdGVtZW50UGFyc2luZy9nZW5lcmljc1BhcnNpbmcvTG9jYWxWYXIudHh0CkBAIC0wLDAgKzEsNTggQEAKK1BzaUphdmFGaWxlOkxvY2FsVmFyLmphdmEKKyAgUHNpSW1wb3J0TGlzdAorICAgIDxlbXB0eSBsaXN0PgorICBQc2lDbGFzczpUZXN0CisgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpS2V5d29yZDpjbGFzcygnY2xhc3MnKQorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaUlkZW50aWZpZXI6VGVzdCgnVGVzdCcpCisgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuICAgICcpCisgICAgUHNpTWV0aG9kOm1ldGhvZAorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOm1ldGhvZCgnbWV0aG9kJykKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gICAgICAgICcpCisgICAgICAgIFBzaURlY2xhcmF0aW9uU3RhdGVtZW50CisgICAgICAgICAgUHNpTG9jYWxWYXJpYWJsZTpsaXN0CisgICAgICAgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICAgICAgUHNpVHlwZUVsZW1lbnQ6TGlzdDxJbnRlZ2VyPgorICAgICAgICAgICAgICBQc2lKYXZhQ29kZVJlZmVyZW5jZUVsZW1lbnQ6TGlzdDxJbnRlZ2VyPgorICAgICAgICAgICAgICAgIFBzaUlkZW50aWZpZXI6TGlzdCgnTGlzdCcpCisgICAgICAgICAgICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICAgICAgICAgICAgUHNpSmF2YVRva2VuOkxUKCc8JykKKyAgICAgICAgICAgICAgICAgIFBzaVR5cGVFbGVtZW50OkludGVnZXIKKyAgICAgICAgICAgICAgICAgICAgUHNpSmF2YUNvZGVSZWZlcmVuY2VFbGVtZW50OkludGVnZXIKKyAgICAgICAgICAgICAgICAgICAgICBQc2lJZGVudGlmaWVyOkludGVnZXIoJ0ludGVnZXInKQorICAgICAgICAgICAgICAgICAgICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgICAgICAgICAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICAgICAgICAgICAgUHNpSmF2YVRva2VuOkdUKCc+JykKKyAgICAgICAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgICAgICAgUHNpSWRlbnRpZmllcjpsaXN0KCdsaXN0JykKKyAgICAgICAgICAgIFBzaUphdmFUb2tlbjpTRU1JQ09MT04oJzsnKQorICAgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAgICAnKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcbicpCisgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL3N0YXRlbWVudFBhcnNpbmcvaWYvTm9ybWFsTm9FbHNlLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL3N0YXRlbWVudFBhcnNpbmcvaWYvTm9ybWFsTm9FbHNlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTQ1NzY4YgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvc3RhdGVtZW50UGFyc2luZy9pZi9Ob3JtYWxOb0Vsc2UuamF2YQpAQCAtMCwwICsxLDUgQEAKK2NsYXNzIEZvb3sKKyAgeworICAgIGlmIChhKSBmMSgpOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9zdGF0ZW1lbnRQYXJzaW5nL2lmL05vcm1hbE5vRWxzZS50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL3N0YXRlbWVudFBhcnNpbmcvaWYvTm9ybWFsTm9FbHNlLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYTJlY2UyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9zdGF0ZW1lbnRQYXJzaW5nL2lmL05vcm1hbE5vRWxzZS50eHQKQEAgLTAsMCArMSw0NyBAQAorUHNpSmF2YUZpbGU6Tm9ybWFsTm9FbHNlLmphdmEKKyAgUHNpSW1wb3J0TGlzdAorICAgIDxlbXB0eSBsaXN0PgorICBQc2lDbGFzczpGb28KKyAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lLZXl3b3JkOmNsYXNzKCdjbGFzcycpCisgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgUHNpSWRlbnRpZmllcjpGb28oJ0ZvbycpCisgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuICAnKQorICAgIFBzaUNsYXNzSW5pdGlhbGl6ZXIKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICAgICcpCisgICAgICAgIFBzaUlmU3RhdGVtZW50CisgICAgICAgICAgUHNpS2V5d29yZDppZignaWYnKQorICAgICAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgICAgUHNpUmVmZXJlbmNlRXhwcmVzc2lvbjphCisgICAgICAgICAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICAgICAgUHNpSWRlbnRpZmllcjphKCdhJykKKyAgICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgICAgIFBzaUV4cHJlc3Npb25TdGF0ZW1lbnQKKyAgICAgICAgICAgIFBzaU1ldGhvZENhbGxFeHByZXNzaW9uOmYxKCkKKyAgICAgICAgICAgICAgUHNpUmVmZXJlbmNlRXhwcmVzc2lvbjpmMQorICAgICAgICAgICAgICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgICAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICAgICAgICAgIFBzaUlkZW50aWZpZXI6ZjEoJ2YxJykKKyAgICAgICAgICAgICAgUHNpRXhwcmVzc2lvbkxpc3QKKyAgICAgICAgICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICAgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICAgICAgICBQc2lKYXZhVG9rZW46U0VNSUNPTE9OKCc7JykKKyAgICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gICcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuJykKKyAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL3N0YXRlbWVudFBhcnNpbmcvaWYvTm9ybWFsV2l0aEVsc2UuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvc3RhdGVtZW50UGFyc2luZy9pZi9Ob3JtYWxXaXRoRWxzZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk4NzNlYWQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL3N0YXRlbWVudFBhcnNpbmcvaWYvTm9ybWFsV2l0aEVsc2UuamF2YQpAQCAtMCwwICsxLDUgQEAKK2NsYXNzIEZvb3sKKyAgeworICAgIGlmIChhKXsgZjEoKTsgfSBlbHNleyBmMigpOyB9CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL3N0YXRlbWVudFBhcnNpbmcvaWYvTm9ybWFsV2l0aEVsc2UudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9zdGF0ZW1lbnRQYXJzaW5nL2lmL05vcm1hbFdpdGhFbHNlLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNWJmNjFjCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9zdGF0ZW1lbnRQYXJzaW5nL2lmL05vcm1hbFdpdGhFbHNlLnR4dApAQCAtMCwwICsxLDcwIEBACitQc2lKYXZhRmlsZTpOb3JtYWxXaXRoRWxzZS5qYXZhCisgIFBzaUltcG9ydExpc3QKKyAgICA8ZW1wdHkgbGlzdD4KKyAgUHNpQ2xhc3M6Rm9vCisgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpS2V5d29yZDpjbGFzcygnY2xhc3MnKQorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaUlkZW50aWZpZXI6Rm9vKCdGb28nKQorICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcbiAgJykKKyAgICBQc2lDbGFzc0luaXRpYWxpemVyCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAgICAnKQorICAgICAgICBQc2lJZlN0YXRlbWVudAorICAgICAgICAgIFBzaUtleXdvcmQ6aWYoJ2lmJykKKyAgICAgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICAgIFBzaVJlZmVyZW5jZUV4cHJlc3Npb246YQorICAgICAgICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgICAgIFBzaUlkZW50aWZpZXI6YSgnYScpCisgICAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgICAgICBQc2lCbG9ja1N0YXRlbWVudAorICAgICAgICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICAgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgICAgICAgICAgUHNpRXhwcmVzc2lvblN0YXRlbWVudAorICAgICAgICAgICAgICAgIFBzaU1ldGhvZENhbGxFeHByZXNzaW9uOmYxKCkKKyAgICAgICAgICAgICAgICAgIFBzaVJlZmVyZW5jZUV4cHJlc3Npb246ZjEKKyAgICAgICAgICAgICAgICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICAgICAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICAgICAgICAgICAgICBQc2lJZGVudGlmaWVyOmYxKCdmMScpCisgICAgICAgICAgICAgICAgICBQc2lFeHByZXNzaW9uTGlzdAorICAgICAgICAgICAgICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICAgICAgICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgICAgICAgICAgIFBzaUphdmFUb2tlbjpTRU1JQ09MT04oJzsnKQorICAgICAgICAgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgICAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICAgICAgUHNpS2V5d29yZDplbHNlKCdlbHNlJykKKyAgICAgICAgICBQc2lCbG9ja1N0YXRlbWVudAorICAgICAgICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICAgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgICAgICAgICAgUHNpRXhwcmVzc2lvblN0YXRlbWVudAorICAgICAgICAgICAgICAgIFBzaU1ldGhvZENhbGxFeHByZXNzaW9uOmYyKCkKKyAgICAgICAgICAgICAgICAgIFBzaVJlZmVyZW5jZUV4cHJlc3Npb246ZjIKKyAgICAgICAgICAgICAgICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICAgICAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICAgICAgICAgICAgICBQc2lJZGVudGlmaWVyOmYyKCdmMicpCisgICAgICAgICAgICAgICAgICBQc2lFeHByZXNzaW9uTGlzdAorICAgICAgICAgICAgICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICAgICAgICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgICAgICAgICAgIFBzaUphdmFUb2tlbjpTRU1JQ09MT04oJzsnKQorICAgICAgICAgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgICAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICAnKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcbicpCisgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9zdGF0ZW1lbnRQYXJzaW5nL2lmL1VuY29tcGxldGUxLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL3N0YXRlbWVudFBhcnNpbmcvaWYvVW5jb21wbGV0ZTEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNTczYjQ5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9zdGF0ZW1lbnRQYXJzaW5nL2lmL1VuY29tcGxldGUxLmphdmEKQEAgLTAsMCArMSw1IEBACitjbGFzcyBGb297CisgIHsKKyAgICBpZgorICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9zdGF0ZW1lbnRQYXJzaW5nL2lmL1VuY29tcGxldGUxLnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvc3RhdGVtZW50UGFyc2luZy9pZi9VbmNvbXBsZXRlMS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjZjYzRmYwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvc3RhdGVtZW50UGFyc2luZy9pZi9VbmNvbXBsZXRlMS50eHQKQEAgLTAsMCArMSwzMSBAQAorUHNpSmF2YUZpbGU6VW5jb21wbGV0ZTEuamF2YQorICBQc2lJbXBvcnRMaXN0CisgICAgPGVtcHR5IGxpc3Q+CisgIFBzaUNsYXNzOkZvbworICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaUtleXdvcmQ6Y2xhc3MoJ2NsYXNzJykKKyAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICBQc2lJZGVudGlmaWVyOkZvbygnRm9vJykKKyAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgUHNpV2hpdGVTcGFjZSgnXG4gICcpCisgICAgUHNpQ2xhc3NJbml0aWFsaXplcgorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gICAgJykKKyAgICAgICAgUHNpSWZTdGF0ZW1lbnQKKyAgICAgICAgICBQc2lLZXl3b3JkOmlmKCdpZicpCisgICAgICAgICAgUHNpRXJyb3JFbGVtZW50OicoJyBleHBlY3RlZAorICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICAnKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcbicpCisgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL3N0YXRlbWVudFBhcnNpbmcvaWYvVW5jb21wbGV0ZTIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvc3RhdGVtZW50UGFyc2luZy9pZi9VbmNvbXBsZXRlMi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBkNjRmZmUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL3N0YXRlbWVudFBhcnNpbmcvaWYvVW5jb21wbGV0ZTIuamF2YQpAQCAtMCwwICsxLDUgQEAKK2NsYXNzIEZvb3sKKyAgeworICAgIGlmICgKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvc3RhdGVtZW50UGFyc2luZy9pZi9VbmNvbXBsZXRlMi50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL3N0YXRlbWVudFBhcnNpbmcvaWYvVW5jb21wbGV0ZTIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ0OTgzNDAKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL3N0YXRlbWVudFBhcnNpbmcvaWYvVW5jb21wbGV0ZTIudHh0CkBAIC0wLDAgKzEsMzMgQEAKK1BzaUphdmFGaWxlOlVuY29tcGxldGUyLmphdmEKKyAgUHNpSW1wb3J0TGlzdAorICAgIDxlbXB0eSBsaXN0PgorICBQc2lDbGFzczpGb28KKyAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lLZXl3b3JkOmNsYXNzKCdjbGFzcycpCisgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgUHNpSWRlbnRpZmllcjpGb28oJ0ZvbycpCisgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuICAnKQorICAgIFBzaUNsYXNzSW5pdGlhbGl6ZXIKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICAgICcpCisgICAgICAgIFBzaUlmU3RhdGVtZW50CisgICAgICAgICAgUHNpS2V5d29yZDppZignaWYnKQorICAgICAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgICAgUHNpRXJyb3JFbGVtZW50OkV4cHJlc3Npb24gZXhwZWN0ZWQKKyAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAgJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG4nKQorICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9zdGF0ZW1lbnRQYXJzaW5nL2lmL1VuY29tcGxldGUzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL3N0YXRlbWVudFBhcnNpbmcvaWYvVW5jb21wbGV0ZTMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYjhhMjgyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9zdGF0ZW1lbnRQYXJzaW5nL2lmL1VuY29tcGxldGUzLmphdmEKQEAgLTAsMCArMSw2IEBACitjbGFzcyBGb297CisgIHsKKyAgICBpZiAoCisgICAgZm9vKCk7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL3N0YXRlbWVudFBhcnNpbmcvaWYvVW5jb21wbGV0ZTMudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9zdGF0ZW1lbnRQYXJzaW5nL2lmL1VuY29tcGxldGUzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOWZhYjhlCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9zdGF0ZW1lbnRQYXJzaW5nL2lmL1VuY29tcGxldGUzLnR4dApAQCAtMCwwICsxLDQ0IEBACitQc2lKYXZhRmlsZTpVbmNvbXBsZXRlMy5qYXZhCisgIFBzaUltcG9ydExpc3QKKyAgICA8ZW1wdHkgbGlzdD4KKyAgUHNpQ2xhc3M6Rm9vCisgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpS2V5d29yZDpjbGFzcygnY2xhc3MnKQorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaUlkZW50aWZpZXI6Rm9vKCdGb28nKQorICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcbiAgJykKKyAgICBQc2lDbGFzc0luaXRpYWxpemVyCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAgICAnKQorICAgICAgICBQc2lJZlN0YXRlbWVudAorICAgICAgICAgIFBzaUtleXdvcmQ6aWYoJ2lmJykKKyAgICAgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICAgIFBzaUVycm9yRWxlbWVudDpFeHByZXNzaW9uIGV4cGVjdGVkCisgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gICAgJykKKyAgICAgICAgUHNpRXhwcmVzc2lvblN0YXRlbWVudAorICAgICAgICAgIFBzaU1ldGhvZENhbGxFeHByZXNzaW9uOmZvbygpCisgICAgICAgICAgICBQc2lSZWZlcmVuY2VFeHByZXNzaW9uOmZvbworICAgICAgICAgICAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgICAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgICAgICAgUHNpRXhwcmVzc2lvbkxpc3QKKyAgICAgICAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgICAgICBQc2lKYXZhVG9rZW46U0VNSUNPTE9OKCc7JykKKyAgICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gICcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuJykKKyAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL3N0YXRlbWVudFBhcnNpbmcvaWYvVW5jb21wbGV0ZTQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvc3RhdGVtZW50UGFyc2luZy9pZi9VbmNvbXBsZXRlNC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc5ZjliYjIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL3N0YXRlbWVudFBhcnNpbmcvaWYvVW5jb21wbGV0ZTQuamF2YQpAQCAtMCwwICsxLDUgQEAKK2NsYXNzIEZvb3sKKyAgeworICAgIGlmIChjb25kCisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL3N0YXRlbWVudFBhcnNpbmcvaWYvVW5jb21wbGV0ZTQudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9zdGF0ZW1lbnRQYXJzaW5nL2lmL1VuY29tcGxldGU0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNTE5NDQ4Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9zdGF0ZW1lbnRQYXJzaW5nL2lmL1VuY29tcGxldGU0LnR4dApAQCAtMCwwICsxLDM3IEBACitQc2lKYXZhRmlsZTpVbmNvbXBsZXRlNC5qYXZhCisgIFBzaUltcG9ydExpc3QKKyAgICA8ZW1wdHkgbGlzdD4KKyAgUHNpQ2xhc3M6Rm9vCisgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpS2V5d29yZDpjbGFzcygnY2xhc3MnKQorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaUlkZW50aWZpZXI6Rm9vKCdGb28nKQorICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcbiAgJykKKyAgICBQc2lDbGFzc0luaXRpYWxpemVyCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAgICAnKQorICAgICAgICBQc2lJZlN0YXRlbWVudAorICAgICAgICAgIFBzaUtleXdvcmQ6aWYoJ2lmJykKKyAgICAgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICAgIFBzaVJlZmVyZW5jZUV4cHJlc3Npb246Y29uZAorICAgICAgICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgICAgIFBzaUlkZW50aWZpZXI6Y29uZCgnY29uZCcpCisgICAgICAgICAgUHNpRXJyb3JFbGVtZW50OicpJyBleHBlY3RlZAorICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICAnKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcbicpCisgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9zdGF0ZW1lbnRQYXJzaW5nL2lmL1VuY29tcGxldGU1LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL3N0YXRlbWVudFBhcnNpbmcvaWYvVW5jb21wbGV0ZTUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMTllNjAxCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9zdGF0ZW1lbnRQYXJzaW5nL2lmL1VuY29tcGxldGU1LmphdmEKQEAgLTAsMCArMSw1IEBACitjbGFzcyBGb297CisgIHsKKyAgICBpZiAoY29uZCkKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvc3RhdGVtZW50UGFyc2luZy9pZi9VbmNvbXBsZXRlNS50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL3N0YXRlbWVudFBhcnNpbmcvaWYvVW5jb21wbGV0ZTUudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBhYTkyNGEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL3N0YXRlbWVudFBhcnNpbmcvaWYvVW5jb21wbGV0ZTUudHh0CkBAIC0wLDAgKzEsMzggQEAKK1BzaUphdmFGaWxlOlVuY29tcGxldGU1LmphdmEKKyAgUHNpSW1wb3J0TGlzdAorICAgIDxlbXB0eSBsaXN0PgorICBQc2lDbGFzczpGb28KKyAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lLZXl3b3JkOmNsYXNzKCdjbGFzcycpCisgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgUHNpSWRlbnRpZmllcjpGb28oJ0ZvbycpCisgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuICAnKQorICAgIFBzaUNsYXNzSW5pdGlhbGl6ZXIKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICAgICcpCisgICAgICAgIFBzaUlmU3RhdGVtZW50CisgICAgICAgICAgUHNpS2V5d29yZDppZignaWYnKQorICAgICAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgICAgUHNpUmVmZXJlbmNlRXhwcmVzc2lvbjpjb25kCisgICAgICAgICAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICAgICAgUHNpSWRlbnRpZmllcjpjb25kKCdjb25kJykKKyAgICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgICAgIFBzaUVycm9yRWxlbWVudDpTdGF0ZW1lbnQgZXhwZWN0ZWQKKyAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAgJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG4nKQorICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvc3RhdGVtZW50UGFyc2luZy9pZi9VbmNvbXBsZXRlNi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9zdGF0ZW1lbnRQYXJzaW5nL2lmL1VuY29tcGxldGU2LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjRhMjc4MQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvc3RhdGVtZW50UGFyc2luZy9pZi9VbmNvbXBsZXRlNi5qYXZhCkBAIC0wLDAgKzEsNSBAQAorY2xhc3MgRm9veworICB7CisgICAgaWYgKCkgZm9vKCk7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL3N0YXRlbWVudFBhcnNpbmcvaWYvVW5jb21wbGV0ZTYudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9zdGF0ZW1lbnRQYXJzaW5nL2lmL1VuY29tcGxldGU2LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOTM2OWFhCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9zdGF0ZW1lbnRQYXJzaW5nL2lmL1VuY29tcGxldGU2LnR4dApAQCAtMCwwICsxLDQ1IEBACitQc2lKYXZhRmlsZTpVbmNvbXBsZXRlNi5qYXZhCisgIFBzaUltcG9ydExpc3QKKyAgICA8ZW1wdHkgbGlzdD4KKyAgUHNpQ2xhc3M6Rm9vCisgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpS2V5d29yZDpjbGFzcygnY2xhc3MnKQorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaUlkZW50aWZpZXI6Rm9vKCdGb28nKQorICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcbiAgJykKKyAgICBQc2lDbGFzc0luaXRpYWxpemVyCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAgICAnKQorICAgICAgICBQc2lJZlN0YXRlbWVudAorICAgICAgICAgIFBzaUtleXdvcmQ6aWYoJ2lmJykKKyAgICAgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICAgIFBzaUVycm9yRWxlbWVudDpFeHByZXNzaW9uIGV4cGVjdGVkCisgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgICAgIFBzaUV4cHJlc3Npb25TdGF0ZW1lbnQKKyAgICAgICAgICAgIFBzaU1ldGhvZENhbGxFeHByZXNzaW9uOmZvbygpCisgICAgICAgICAgICAgIFBzaVJlZmVyZW5jZUV4cHJlc3Npb246Zm9vCisgICAgICAgICAgICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgICAgICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICAgICAgICAgIFBzaUV4cHJlc3Npb25MaXN0CisgICAgICAgICAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgICAgICAgUHNpSmF2YVRva2VuOlNFTUlDT0xPTignOycpCisgICAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICAnKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcbicpCisgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9zdGF0ZW1lbnRQYXJzaW5nL2lmL1VuY29tcGxldGU3LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL3N0YXRlbWVudFBhcnNpbmcvaWYvVW5jb21wbGV0ZTcuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZGRkYjg0Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9zdGF0ZW1lbnRQYXJzaW5nL2lmL1VuY29tcGxldGU3LmphdmEKQEAgLTAsMCArMSw1IEBACitjbGFzcyBGb297CisgIHsKKyAgICBpZiAoY29uZCkgZm9vKCk7IGVsc2UKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvc3RhdGVtZW50UGFyc2luZy9pZi9VbmNvbXBsZXRlNy50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL3N0YXRlbWVudFBhcnNpbmcvaWYvVW5jb21wbGV0ZTcudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA0MmJmMmUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL3N0YXRlbWVudFBhcnNpbmcvaWYvVW5jb21wbGV0ZTcudHh0CkBAIC0wLDAgKzEsNTEgQEAKK1BzaUphdmFGaWxlOlVuY29tcGxldGU3LmphdmEKKyAgUHNpSW1wb3J0TGlzdAorICAgIDxlbXB0eSBsaXN0PgorICBQc2lDbGFzczpGb28KKyAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lLZXl3b3JkOmNsYXNzKCdjbGFzcycpCisgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgUHNpSWRlbnRpZmllcjpGb28oJ0ZvbycpCisgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuICAnKQorICAgIFBzaUNsYXNzSW5pdGlhbGl6ZXIKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICAgICcpCisgICAgICAgIFBzaUlmU3RhdGVtZW50CisgICAgICAgICAgUHNpS2V5d29yZDppZignaWYnKQorICAgICAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgICAgUHNpUmVmZXJlbmNlRXhwcmVzc2lvbjpjb25kCisgICAgICAgICAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICAgICAgUHNpSWRlbnRpZmllcjpjb25kKCdjb25kJykKKyAgICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgICAgIFBzaUV4cHJlc3Npb25TdGF0ZW1lbnQKKyAgICAgICAgICAgIFBzaU1ldGhvZENhbGxFeHByZXNzaW9uOmZvbygpCisgICAgICAgICAgICAgIFBzaVJlZmVyZW5jZUV4cHJlc3Npb246Zm9vCisgICAgICAgICAgICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgICAgICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICAgICAgICAgIFBzaUV4cHJlc3Npb25MaXN0CisgICAgICAgICAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgICAgICAgUHNpSmF2YVRva2VuOlNFTUlDT0xPTignOycpCisgICAgICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICAgICAgUHNpS2V5d29yZDplbHNlKCdlbHNlJykKKyAgICAgICAgICBQc2lFcnJvckVsZW1lbnQ6U3RhdGVtZW50IGV4cGVjdGVkCisgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gICcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuJykKKyAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL3N0YXRlbWVudFBhcnNpbmcvbGFiZWwvU2ltcGxlLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL3N0YXRlbWVudFBhcnNpbmcvbGFiZWwvU2ltcGxlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTI4NzhkYQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvc3RhdGVtZW50UGFyc2luZy9sYWJlbC9TaW1wbGUuamF2YQpAQCAtMCwwICsxLDYgQEAKK2NsYXNzIEF7CisgIHsKK0xvb3A6CisgIHdoaWxlKHRydWUpIDsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvc3RhdGVtZW50UGFyc2luZy9sYWJlbC9TaW1wbGUudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9zdGF0ZW1lbnRQYXJzaW5nL2xhYmVsL1NpbXBsZS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTg1MDhkMgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvc3RhdGVtZW50UGFyc2luZy9sYWJlbC9TaW1wbGUudHh0CkBAIC0wLDAgKzEsNDAgQEAKK1BzaUphdmFGaWxlOlNpbXBsZS5qYXZhCisgIFBzaUltcG9ydExpc3QKKyAgICA8ZW1wdHkgbGlzdD4KKyAgUHNpQ2xhc3M6QQorICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaUtleXdvcmQ6Y2xhc3MoJ2NsYXNzJykKKyAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICBQc2lJZGVudGlmaWVyOkEoJ0EnKQorICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcbiAgJykKKyAgICBQc2lDbGFzc0luaXRpYWxpemVyCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lXaGl0ZVNwYWNlKCdcbicpCisgICAgICAgIFBzaUxhYmVsZWRTdGF0ZW1lbnQKKyAgICAgICAgICBQc2lJZGVudGlmaWVyOkxvb3AoJ0xvb3AnKQorICAgICAgICAgIFBzaUphdmFUb2tlbjpDT0xPTignOicpCisgICAgICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gICcpCisgICAgICAgICAgUHNpV2hpbGVTdGF0ZW1lbnQKKyAgICAgICAgICAgIFBzaUtleXdvcmQ6d2hpbGUoJ3doaWxlJykKKyAgICAgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgICAgICBQc2lMaXRlcmFsRXhwcmVzc2lvbjp0cnVlCisgICAgICAgICAgICAgIFBzaUphdmFUb2tlbjpUUlVFX0tFWVdPUkQoJ3RydWUnKQorICAgICAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgICAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgICAgICAgUHNpRW1wdHlTdGF0ZW1lbnQKKyAgICAgICAgICAgICAgUHNpSmF2YVRva2VuOlNFTUlDT0xPTignOycpCisgICAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICAnKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcbicpCisgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL3N0YXRlbWVudFBhcnNpbmcvcmV0dXJuL05vcm1hbE5vUmVzdWx0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL3N0YXRlbWVudFBhcnNpbmcvcmV0dXJuL05vcm1hbE5vUmVzdWx0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDZjYzJiYgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvc3RhdGVtZW50UGFyc2luZy9yZXR1cm4vTm9ybWFsTm9SZXN1bHQuamF2YQpAQCAtMCwwICsxLDUgQEAKK2NsYXNzIEZvb3sKKyAgeworICAgIHJldHVybjsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvc3RhdGVtZW50UGFyc2luZy9yZXR1cm4vTm9ybWFsTm9SZXN1bHQudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9zdGF0ZW1lbnRQYXJzaW5nL3JldHVybi9Ob3JtYWxOb1Jlc3VsdC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmY2ZGIzMmUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL3N0YXRlbWVudFBhcnNpbmcvcmV0dXJuL05vcm1hbE5vUmVzdWx0LnR4dApAQCAtMCwwICsxLDMwIEBACitQc2lKYXZhRmlsZTpOb3JtYWxOb1Jlc3VsdC5qYXZhCisgIFBzaUltcG9ydExpc3QKKyAgICA8ZW1wdHkgbGlzdD4KKyAgUHNpQ2xhc3M6Rm9vCisgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpS2V5d29yZDpjbGFzcygnY2xhc3MnKQorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaUlkZW50aWZpZXI6Rm9vKCdGb28nKQorICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcbiAgJykKKyAgICBQc2lDbGFzc0luaXRpYWxpemVyCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAgICAnKQorICAgICAgICBQc2lSZXR1cm5TdGF0ZW1lbnQKKyAgICAgICAgICBQc2lLZXl3b3JkOnJldHVybigncmV0dXJuJykKKyAgICAgICAgICBQc2lKYXZhVG9rZW46U0VNSUNPTE9OKCc7JykKKyAgICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gICcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuJykKKyAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvc3RhdGVtZW50UGFyc2luZy9yZXR1cm4vTm9ybWFsV2l0aFJlc3VsdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9zdGF0ZW1lbnRQYXJzaW5nL3JldHVybi9Ob3JtYWxXaXRoUmVzdWx0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjc2YWFmNAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvc3RhdGVtZW50UGFyc2luZy9yZXR1cm4vTm9ybWFsV2l0aFJlc3VsdC5qYXZhCkBAIC0wLDAgKzEsNSBAQAorY2xhc3MgRm9veworICB7CisgICAgcmV0dXJuIDEwOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9zdGF0ZW1lbnRQYXJzaW5nL3JldHVybi9Ob3JtYWxXaXRoUmVzdWx0LnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvc3RhdGVtZW50UGFyc2luZy9yZXR1cm4vTm9ybWFsV2l0aFJlc3VsdC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzEzMWE0NAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvc3RhdGVtZW50UGFyc2luZy9yZXR1cm4vTm9ybWFsV2l0aFJlc3VsdC50eHQKQEAgLTAsMCArMSwzMyBAQAorUHNpSmF2YUZpbGU6Tm9ybWFsV2l0aFJlc3VsdC5qYXZhCisgIFBzaUltcG9ydExpc3QKKyAgICA8ZW1wdHkgbGlzdD4KKyAgUHNpQ2xhc3M6Rm9vCisgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpS2V5d29yZDpjbGFzcygnY2xhc3MnKQorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaUlkZW50aWZpZXI6Rm9vKCdGb28nKQorICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcbiAgJykKKyAgICBQc2lDbGFzc0luaXRpYWxpemVyCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAgICAnKQorICAgICAgICBQc2lSZXR1cm5TdGF0ZW1lbnQKKyAgICAgICAgICBQc2lLZXl3b3JkOnJldHVybigncmV0dXJuJykKKyAgICAgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgICAgICBQc2lMaXRlcmFsRXhwcmVzc2lvbjoxMAorICAgICAgICAgICAgUHNpSmF2YVRva2VuOklOVEVHRVJfTElURVJBTCgnMTAnKQorICAgICAgICAgIFBzaUphdmFUb2tlbjpTRU1JQ09MT04oJzsnKQorICAgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAgJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG4nKQorICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9zdGF0ZW1lbnRQYXJzaW5nL3JldHVybi9VbmNvbXBsZXRlMS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9zdGF0ZW1lbnRQYXJzaW5nL3JldHVybi9VbmNvbXBsZXRlMS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYxOWJiMTgKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL3N0YXRlbWVudFBhcnNpbmcvcmV0dXJuL1VuY29tcGxldGUxLmphdmEKQEAgLTAsMCArMSw1IEBACitjbGFzcyBGb297CisgIHsKKyAgICByZXR1cm4KKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvc3RhdGVtZW50UGFyc2luZy9yZXR1cm4vVW5jb21wbGV0ZTEudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9zdGF0ZW1lbnRQYXJzaW5nL3JldHVybi9VbmNvbXBsZXRlMS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTIwYjc3NwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvc3RhdGVtZW50UGFyc2luZy9yZXR1cm4vVW5jb21wbGV0ZTEudHh0CkBAIC0wLDAgKzEsMzEgQEAKK1BzaUphdmFGaWxlOlVuY29tcGxldGUxLmphdmEKKyAgUHNpSW1wb3J0TGlzdAorICAgIDxlbXB0eSBsaXN0PgorICBQc2lDbGFzczpGb28KKyAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lLZXl3b3JkOmNsYXNzKCdjbGFzcycpCisgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgUHNpSWRlbnRpZmllcjpGb28oJ0ZvbycpCisgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuICAnKQorICAgIFBzaUNsYXNzSW5pdGlhbGl6ZXIKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICAgICcpCisgICAgICAgIFBzaVJldHVyblN0YXRlbWVudAorICAgICAgICAgIFBzaUtleXdvcmQ6cmV0dXJuKCdyZXR1cm4nKQorICAgICAgICAgIFBzaUVycm9yRWxlbWVudDonOycgZXhwZWN0ZWQKKyAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAgJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG4nKQorICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9zdGF0ZW1lbnRQYXJzaW5nL3JldHVybi9VbmNvbXBsZXRlMi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9zdGF0ZW1lbnRQYXJzaW5nL3JldHVybi9VbmNvbXBsZXRlMi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA0NmU1ZWUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL3N0YXRlbWVudFBhcnNpbmcvcmV0dXJuL1VuY29tcGxldGUyLmphdmEKQEAgLTAsMCArMSw1IEBACitjbGFzcyBGb297CisgIHsKKyAgICByZXR1cm4gYQorICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9zdGF0ZW1lbnRQYXJzaW5nL3JldHVybi9VbmNvbXBsZXRlMi50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL3N0YXRlbWVudFBhcnNpbmcvcmV0dXJuL1VuY29tcGxldGUyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNmFjYjA5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9zdGF0ZW1lbnRQYXJzaW5nL3JldHVybi9VbmNvbXBsZXRlMi50eHQKQEAgLTAsMCArMSwzNiBAQAorUHNpSmF2YUZpbGU6VW5jb21wbGV0ZTIuamF2YQorICBQc2lJbXBvcnRMaXN0CisgICAgPGVtcHR5IGxpc3Q+CisgIFBzaUNsYXNzOkZvbworICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaUtleXdvcmQ6Y2xhc3MoJ2NsYXNzJykKKyAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICBQc2lJZGVudGlmaWVyOkZvbygnRm9vJykKKyAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgUHNpV2hpdGVTcGFjZSgnXG4gICcpCisgICAgUHNpQ2xhc3NJbml0aWFsaXplcgorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gICAgJykKKyAgICAgICAgUHNpUmV0dXJuU3RhdGVtZW50CisgICAgICAgICAgUHNpS2V5d29yZDpyZXR1cm4oJ3JldHVybicpCisgICAgICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICAgICAgUHNpUmVmZXJlbmNlRXhwcmVzc2lvbjphCisgICAgICAgICAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICAgICAgUHNpSWRlbnRpZmllcjphKCdhJykKKyAgICAgICAgICBQc2lFcnJvckVsZW1lbnQ6JzsnIGV4cGVjdGVkCisgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gICcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuJykKKyAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL3N0YXRlbWVudFBhcnNpbmcvc3dpdGNoL05vcm1hbC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9zdGF0ZW1lbnRQYXJzaW5nL3N3aXRjaC9Ob3JtYWwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZjAyNGE1Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9zdGF0ZW1lbnRQYXJzaW5nL3N3aXRjaC9Ob3JtYWwuamF2YQpAQCAtMCwwICsxLDUgQEAKK2NsYXNzIEF7CisgIHsKKyAgICBzd2l0Y2gobyl7fQorICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9zdGF0ZW1lbnRQYXJzaW5nL3N3aXRjaC9Ob3JtYWwudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9zdGF0ZW1lbnRQYXJzaW5nL3N3aXRjaC9Ob3JtYWwudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYxMzhkZGMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL3N0YXRlbWVudFBhcnNpbmcvc3dpdGNoL05vcm1hbC50eHQKQEAgLTAsMCArMSwzOCBAQAorUHNpSmF2YUZpbGU6Tm9ybWFsLmphdmEKKyAgUHNpSW1wb3J0TGlzdAorICAgIDxlbXB0eSBsaXN0PgorICBQc2lDbGFzczpBCisgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpS2V5d29yZDpjbGFzcygnY2xhc3MnKQorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaUlkZW50aWZpZXI6QSgnQScpCisgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuICAnKQorICAgIFBzaUNsYXNzSW5pdGlhbGl6ZXIKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICAgICcpCisgICAgICAgIFBzaVN3aXRjaFN0YXRlbWVudAorICAgICAgICAgIFBzaUtleXdvcmQ6c3dpdGNoKCdzd2l0Y2gnKQorICAgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgICAgUHNpUmVmZXJlbmNlRXhwcmVzc2lvbjpvCisgICAgICAgICAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICAgICAgUHNpSWRlbnRpZmllcjpvKCdvJykKKyAgICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gICcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuJykKKyAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL3N0YXRlbWVudFBhcnNpbmcvc3dpdGNoL1VuY29tcGxldGUxLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL3N0YXRlbWVudFBhcnNpbmcvc3dpdGNoL1VuY29tcGxldGUxLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDk5MDcxNmMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL3N0YXRlbWVudFBhcnNpbmcvc3dpdGNoL1VuY29tcGxldGUxLmphdmEKQEAgLTAsMCArMSw1IEBACitjbGFzcyBBeworICB7CisgICAgc3dpdGNoCisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL3N0YXRlbWVudFBhcnNpbmcvc3dpdGNoL1VuY29tcGxldGUxLnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvc3RhdGVtZW50UGFyc2luZy9zd2l0Y2gvVW5jb21wbGV0ZTEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFmZGFkZjEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL3N0YXRlbWVudFBhcnNpbmcvc3dpdGNoL1VuY29tcGxldGUxLnR4dApAQCAtMCwwICsxLDMxIEBACitQc2lKYXZhRmlsZTpVbmNvbXBsZXRlMS5qYXZhCisgIFBzaUltcG9ydExpc3QKKyAgICA8ZW1wdHkgbGlzdD4KKyAgUHNpQ2xhc3M6QQorICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaUtleXdvcmQ6Y2xhc3MoJ2NsYXNzJykKKyAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICBQc2lJZGVudGlmaWVyOkEoJ0EnKQorICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcbiAgJykKKyAgICBQc2lDbGFzc0luaXRpYWxpemVyCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAgICAnKQorICAgICAgICBQc2lTd2l0Y2hTdGF0ZW1lbnQKKyAgICAgICAgICBQc2lLZXl3b3JkOnN3aXRjaCgnc3dpdGNoJykKKyAgICAgICAgICBQc2lFcnJvckVsZW1lbnQ6JygnIGV4cGVjdGVkCisgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gICcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuJykKKyAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvc3RhdGVtZW50UGFyc2luZy9zd2l0Y2gvVW5jb21wbGV0ZTIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvc3RhdGVtZW50UGFyc2luZy9zd2l0Y2gvVW5jb21wbGV0ZTIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hODU4Mzg1Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9zdGF0ZW1lbnRQYXJzaW5nL3N3aXRjaC9VbmNvbXBsZXRlMi5qYXZhCkBAIC0wLDAgKzEsNSBAQAorY2xhc3MgQXsKKyAgeworICAgIHN3aXRjaCgKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvc3RhdGVtZW50UGFyc2luZy9zd2l0Y2gvVW5jb21wbGV0ZTIudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9zdGF0ZW1lbnRQYXJzaW5nL3N3aXRjaC9VbmNvbXBsZXRlMi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjgyYWY4MQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvc3RhdGVtZW50UGFyc2luZy9zd2l0Y2gvVW5jb21wbGV0ZTIudHh0CkBAIC0wLDAgKzEsMzIgQEAKK1BzaUphdmFGaWxlOlVuY29tcGxldGUyLmphdmEKKyAgUHNpSW1wb3J0TGlzdAorICAgIDxlbXB0eSBsaXN0PgorICBQc2lDbGFzczpBCisgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpS2V5d29yZDpjbGFzcygnY2xhc3MnKQorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaUlkZW50aWZpZXI6QSgnQScpCisgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuICAnKQorICAgIFBzaUNsYXNzSW5pdGlhbGl6ZXIKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICAgICcpCisgICAgICAgIFBzaVN3aXRjaFN0YXRlbWVudAorICAgICAgICAgIFBzaUtleXdvcmQ6c3dpdGNoKCdzd2l0Y2gnKQorICAgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgICAgUHNpRXJyb3JFbGVtZW50OkV4cHJlc3Npb24gZXhwZWN0ZWQKKyAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAgJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG4nKQorICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9zdGF0ZW1lbnRQYXJzaW5nL3N3aXRjaC9VbmNvbXBsZXRlMy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9zdGF0ZW1lbnRQYXJzaW5nL3N3aXRjaC9VbmNvbXBsZXRlMy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjczOGIzMTIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL3N0YXRlbWVudFBhcnNpbmcvc3dpdGNoL1VuY29tcGxldGUzLmphdmEKQEAgLTAsMCArMSw1IEBACitjbGFzcyBBeworICB7CisgICAgc3dpdGNoKG8KKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvc3RhdGVtZW50UGFyc2luZy9zd2l0Y2gvVW5jb21wbGV0ZTMudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9zdGF0ZW1lbnRQYXJzaW5nL3N3aXRjaC9VbmNvbXBsZXRlMy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjUzMmFkZAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvc3RhdGVtZW50UGFyc2luZy9zd2l0Y2gvVW5jb21wbGV0ZTMudHh0CkBAIC0wLDAgKzEsMzYgQEAKK1BzaUphdmFGaWxlOlVuY29tcGxldGUzLmphdmEKKyAgUHNpSW1wb3J0TGlzdAorICAgIDxlbXB0eSBsaXN0PgorICBQc2lDbGFzczpBCisgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpS2V5d29yZDpjbGFzcygnY2xhc3MnKQorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaUlkZW50aWZpZXI6QSgnQScpCisgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuICAnKQorICAgIFBzaUNsYXNzSW5pdGlhbGl6ZXIKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICAgICcpCisgICAgICAgIFBzaVN3aXRjaFN0YXRlbWVudAorICAgICAgICAgIFBzaUtleXdvcmQ6c3dpdGNoKCdzd2l0Y2gnKQorICAgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgICAgUHNpUmVmZXJlbmNlRXhwcmVzc2lvbjpvCisgICAgICAgICAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICAgICAgUHNpSWRlbnRpZmllcjpvKCdvJykKKyAgICAgICAgICBQc2lFcnJvckVsZW1lbnQ6JyknIGV4cGVjdGVkCisgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gICcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuJykKKyAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL3N0YXRlbWVudFBhcnNpbmcvc3dpdGNoL1VuY29tcGxldGU0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL3N0YXRlbWVudFBhcnNpbmcvc3dpdGNoL1VuY29tcGxldGU0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjMwNTJlZQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvc3RhdGVtZW50UGFyc2luZy9zd2l0Y2gvVW5jb21wbGV0ZTQuamF2YQpAQCAtMCwwICsxLDUgQEAKK2NsYXNzIEF7CisgIHsKKyAgICBzd2l0Y2gobykKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvc3RhdGVtZW50UGFyc2luZy9zd2l0Y2gvVW5jb21wbGV0ZTQudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9zdGF0ZW1lbnRQYXJzaW5nL3N3aXRjaC9VbmNvbXBsZXRlNC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDAzMWM4ZgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvc3RhdGVtZW50UGFyc2luZy9zd2l0Y2gvVW5jb21wbGV0ZTQudHh0CkBAIC0wLDAgKzEsMzcgQEAKK1BzaUphdmFGaWxlOlVuY29tcGxldGU0LmphdmEKKyAgUHNpSW1wb3J0TGlzdAorICAgIDxlbXB0eSBsaXN0PgorICBQc2lDbGFzczpBCisgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpS2V5d29yZDpjbGFzcygnY2xhc3MnKQorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaUlkZW50aWZpZXI6QSgnQScpCisgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuICAnKQorICAgIFBzaUNsYXNzSW5pdGlhbGl6ZXIKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICAgICcpCisgICAgICAgIFBzaVN3aXRjaFN0YXRlbWVudAorICAgICAgICAgIFBzaUtleXdvcmQ6c3dpdGNoKCdzd2l0Y2gnKQorICAgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgICAgUHNpUmVmZXJlbmNlRXhwcmVzc2lvbjpvCisgICAgICAgICAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICAgICAgUHNpSWRlbnRpZmllcjpvKCdvJykKKyAgICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgICAgIFBzaUVycm9yRWxlbWVudDoneycgZXhwZWN0ZWQKKyAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAgJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG4nKQorICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvc3RhdGVtZW50UGFyc2luZy9zd2l0Y2gvVW5jb21wbGV0ZTUuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvc3RhdGVtZW50UGFyc2luZy9zd2l0Y2gvVW5jb21wbGV0ZTUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YWRjY2M0Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9zdGF0ZW1lbnRQYXJzaW5nL3N3aXRjaC9VbmNvbXBsZXRlNS5qYXZhCkBAIC0wLDAgKzEsNSBAQAorY2xhc3MgQXsKKyAgeworICAgIHN3aXRjaCgpe30KKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvc3RhdGVtZW50UGFyc2luZy9zd2l0Y2gvVW5jb21wbGV0ZTUudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9zdGF0ZW1lbnRQYXJzaW5nL3N3aXRjaC9VbmNvbXBsZXRlNS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2NhMzQ2YgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvc3RhdGVtZW50UGFyc2luZy9zd2l0Y2gvVW5jb21wbGV0ZTUudHh0CkBAIC0wLDAgKzEsMzYgQEAKK1BzaUphdmFGaWxlOlVuY29tcGxldGU1LmphdmEKKyAgUHNpSW1wb3J0TGlzdAorICAgIDxlbXB0eSBsaXN0PgorICBQc2lDbGFzczpBCisgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpS2V5d29yZDpjbGFzcygnY2xhc3MnKQorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaUlkZW50aWZpZXI6QSgnQScpCisgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuICAnKQorICAgIFBzaUNsYXNzSW5pdGlhbGl6ZXIKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICAgICcpCisgICAgICAgIFBzaVN3aXRjaFN0YXRlbWVudAorICAgICAgICAgIFBzaUtleXdvcmQ6c3dpdGNoKCdzd2l0Y2gnKQorICAgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgICAgUHNpRXJyb3JFbGVtZW50OkV4cHJlc3Npb24gZXhwZWN0ZWQKKyAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAgJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG4nKQorICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9zdGF0ZW1lbnRQYXJzaW5nL3N3aXRjaC9VbmNvbXBsZXRlNi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9zdGF0ZW1lbnRQYXJzaW5nL3N3aXRjaC9VbmNvbXBsZXRlNi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ0MDY3MTQwCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9zdGF0ZW1lbnRQYXJzaW5nL3N3aXRjaC9VbmNvbXBsZXRlNi5qYXZhCkBAIC0wLDAgKzEsNiBAQAorY2xhc3MgQXsKKyAgeworICAgIHN3aXRjaCgKKyAgICBmb28oKTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvc3RhdGVtZW50UGFyc2luZy9zd2l0Y2gvVW5jb21wbGV0ZTYudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9zdGF0ZW1lbnRQYXJzaW5nL3N3aXRjaC9VbmNvbXBsZXRlNi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWYzMWY1NQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvc3RhdGVtZW50UGFyc2luZy9zd2l0Y2gvVW5jb21wbGV0ZTYudHh0CkBAIC0wLDAgKzEsNDMgQEAKK1BzaUphdmFGaWxlOlVuY29tcGxldGU2LmphdmEKKyAgUHNpSW1wb3J0TGlzdAorICAgIDxlbXB0eSBsaXN0PgorICBQc2lDbGFzczpBCisgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpS2V5d29yZDpjbGFzcygnY2xhc3MnKQorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaUlkZW50aWZpZXI6QSgnQScpCisgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuICAnKQorICAgIFBzaUNsYXNzSW5pdGlhbGl6ZXIKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICAgICcpCisgICAgICAgIFBzaVN3aXRjaFN0YXRlbWVudAorICAgICAgICAgIFBzaUtleXdvcmQ6c3dpdGNoKCdzd2l0Y2gnKQorICAgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgICAgUHNpRXJyb3JFbGVtZW50OkV4cHJlc3Npb24gZXhwZWN0ZWQKKyAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAgICAnKQorICAgICAgICBQc2lFeHByZXNzaW9uU3RhdGVtZW50CisgICAgICAgICAgUHNpTWV0aG9kQ2FsbEV4cHJlc3Npb246Zm9vKCkKKyAgICAgICAgICAgIFBzaVJlZmVyZW5jZUV4cHJlc3Npb246Zm9vCisgICAgICAgICAgICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICAgICAgICBQc2lFeHByZXNzaW9uTGlzdAorICAgICAgICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgICAgIFBzaUphdmFUb2tlbjpTRU1JQ09MT04oJzsnKQorICAgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAgJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG4nKQorICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvc3RhdGVtZW50UGFyc2luZy9zeW5jaHJvbml6ZWQvTm9ybWFsLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL3N0YXRlbWVudFBhcnNpbmcvc3luY2hyb25pemVkL05vcm1hbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZhMTg5NzIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL3N0YXRlbWVudFBhcnNpbmcvc3luY2hyb25pemVkL05vcm1hbC5qYXZhCkBAIC0wLDAgKzEsNSBAQAorY2xhc3MgQXsKKyAgeworICAgIHN5bmNocm9uaXplZChvKXt9CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL3N0YXRlbWVudFBhcnNpbmcvc3luY2hyb25pemVkL05vcm1hbC50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL3N0YXRlbWVudFBhcnNpbmcvc3luY2hyb25pemVkL05vcm1hbC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmNiOTA5OAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvc3RhdGVtZW50UGFyc2luZy9zeW5jaHJvbml6ZWQvTm9ybWFsLnR4dApAQCAtMCwwICsxLDM4IEBACitQc2lKYXZhRmlsZTpOb3JtYWwuamF2YQorICBQc2lJbXBvcnRMaXN0CisgICAgPGVtcHR5IGxpc3Q+CisgIFBzaUNsYXNzOkEKKyAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lLZXl3b3JkOmNsYXNzKCdjbGFzcycpCisgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgUHNpSWRlbnRpZmllcjpBKCdBJykKKyAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgUHNpV2hpdGVTcGFjZSgnXG4gICcpCisgICAgUHNpQ2xhc3NJbml0aWFsaXplcgorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gICAgJykKKyAgICAgICAgUHNpU3luY2hyb25pemVkU3RhdGVtZW50CisgICAgICAgICAgUHNpS2V5d29yZDpzeW5jaHJvbml6ZWQoJ3N5bmNocm9uaXplZCcpCisgICAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgICBQc2lSZWZlcmVuY2VFeHByZXNzaW9uOm8KKyAgICAgICAgICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgICAgICBQc2lJZGVudGlmaWVyOm8oJ28nKQorICAgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAgJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG4nKQorICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvc3RhdGVtZW50UGFyc2luZy9zeW5jaHJvbml6ZWQvVW5jb21wbGV0ZTEuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvc3RhdGVtZW50UGFyc2luZy9zeW5jaHJvbml6ZWQvVW5jb21wbGV0ZTEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMTgzMGJjCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9zdGF0ZW1lbnRQYXJzaW5nL3N5bmNocm9uaXplZC9VbmNvbXBsZXRlMS5qYXZhCkBAIC0wLDAgKzEsNSBAQAorY2xhc3MgQXsKKyAgeworICAgIHN5bmNocm9uaXplZAorICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9zdGF0ZW1lbnRQYXJzaW5nL3N5bmNocm9uaXplZC9VbmNvbXBsZXRlMS50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL3N0YXRlbWVudFBhcnNpbmcvc3luY2hyb25pemVkL1VuY29tcGxldGUxLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMWNlMjA0Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9zdGF0ZW1lbnRQYXJzaW5nL3N5bmNocm9uaXplZC9VbmNvbXBsZXRlMS50eHQKQEAgLTAsMCArMSwzMSBAQAorUHNpSmF2YUZpbGU6VW5jb21wbGV0ZTEuamF2YQorICBQc2lJbXBvcnRMaXN0CisgICAgPGVtcHR5IGxpc3Q+CisgIFBzaUNsYXNzOkEKKyAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lLZXl3b3JkOmNsYXNzKCdjbGFzcycpCisgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgUHNpSWRlbnRpZmllcjpBKCdBJykKKyAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgUHNpV2hpdGVTcGFjZSgnXG4gICcpCisgICAgUHNpQ2xhc3NJbml0aWFsaXplcgorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gICAgJykKKyAgICAgICAgUHNpU3luY2hyb25pemVkU3RhdGVtZW50CisgICAgICAgICAgUHNpS2V5d29yZDpzeW5jaHJvbml6ZWQoJ3N5bmNocm9uaXplZCcpCisgICAgICAgICAgUHNpRXJyb3JFbGVtZW50OicoJyBleHBlY3RlZAorICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICAnKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcbicpCisgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL3N0YXRlbWVudFBhcnNpbmcvc3luY2hyb25pemVkL1VuY29tcGxldGUyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL3N0YXRlbWVudFBhcnNpbmcvc3luY2hyb25pemVkL1VuY29tcGxldGUyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzEwZWZjOAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvc3RhdGVtZW50UGFyc2luZy9zeW5jaHJvbml6ZWQvVW5jb21wbGV0ZTIuamF2YQpAQCAtMCwwICsxLDUgQEAKK2NsYXNzIEF7CisgIHsKKyAgICBzeW5jaHJvbml6ZWQoCisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL3N0YXRlbWVudFBhcnNpbmcvc3luY2hyb25pemVkL1VuY29tcGxldGUyLnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvc3RhdGVtZW50UGFyc2luZy9zeW5jaHJvbml6ZWQvVW5jb21wbGV0ZTIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA0NDRlOTEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL3N0YXRlbWVudFBhcnNpbmcvc3luY2hyb25pemVkL1VuY29tcGxldGUyLnR4dApAQCAtMCwwICsxLDMyIEBACitQc2lKYXZhRmlsZTpVbmNvbXBsZXRlMi5qYXZhCisgIFBzaUltcG9ydExpc3QKKyAgICA8ZW1wdHkgbGlzdD4KKyAgUHNpQ2xhc3M6QQorICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaUtleXdvcmQ6Y2xhc3MoJ2NsYXNzJykKKyAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICBQc2lJZGVudGlmaWVyOkEoJ0EnKQorICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcbiAgJykKKyAgICBQc2lDbGFzc0luaXRpYWxpemVyCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAgICAnKQorICAgICAgICBQc2lTeW5jaHJvbml6ZWRTdGF0ZW1lbnQKKyAgICAgICAgICBQc2lLZXl3b3JkOnN5bmNocm9uaXplZCgnc3luY2hyb25pemVkJykKKyAgICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICAgIFBzaUVycm9yRWxlbWVudDpFeHByZXNzaW9uIGV4cGVjdGVkCisgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gICcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuJykKKyAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvc3RhdGVtZW50UGFyc2luZy9zeW5jaHJvbml6ZWQvVW5jb21wbGV0ZTMuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvc3RhdGVtZW50UGFyc2luZy9zeW5jaHJvbml6ZWQvVW5jb21wbGV0ZTMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYzVjYzljCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9zdGF0ZW1lbnRQYXJzaW5nL3N5bmNocm9uaXplZC9VbmNvbXBsZXRlMy5qYXZhCkBAIC0wLDAgKzEsNSBAQAorY2xhc3MgQXsKKyAgeworICAgIHN5bmNocm9uaXplZChvCisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL3N0YXRlbWVudFBhcnNpbmcvc3luY2hyb25pemVkL1VuY29tcGxldGUzLnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvc3RhdGVtZW50UGFyc2luZy9zeW5jaHJvbml6ZWQvVW5jb21wbGV0ZTMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgzZTBjY2QKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL3N0YXRlbWVudFBhcnNpbmcvc3luY2hyb25pemVkL1VuY29tcGxldGUzLnR4dApAQCAtMCwwICsxLDM2IEBACitQc2lKYXZhRmlsZTpVbmNvbXBsZXRlMy5qYXZhCisgIFBzaUltcG9ydExpc3QKKyAgICA8ZW1wdHkgbGlzdD4KKyAgUHNpQ2xhc3M6QQorICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaUtleXdvcmQ6Y2xhc3MoJ2NsYXNzJykKKyAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICBQc2lJZGVudGlmaWVyOkEoJ0EnKQorICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcbiAgJykKKyAgICBQc2lDbGFzc0luaXRpYWxpemVyCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAgICAnKQorICAgICAgICBQc2lTeW5jaHJvbml6ZWRTdGF0ZW1lbnQKKyAgICAgICAgICBQc2lLZXl3b3JkOnN5bmNocm9uaXplZCgnc3luY2hyb25pemVkJykKKyAgICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICAgIFBzaVJlZmVyZW5jZUV4cHJlc3Npb246bworICAgICAgICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgICAgIFBzaUlkZW50aWZpZXI6bygnbycpCisgICAgICAgICAgUHNpRXJyb3JFbGVtZW50OicpJyBleHBlY3RlZAorICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICAnKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcbicpCisgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9zdGF0ZW1lbnRQYXJzaW5nL3N5bmNocm9uaXplZC9VbmNvbXBsZXRlNC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9zdGF0ZW1lbnRQYXJzaW5nL3N5bmNocm9uaXplZC9VbmNvbXBsZXRlNC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI2ZjIxNTEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL3N0YXRlbWVudFBhcnNpbmcvc3luY2hyb25pemVkL1VuY29tcGxldGU0LmphdmEKQEAgLTAsMCArMSw1IEBACitjbGFzcyBBeworICB7CisgICAgc3luY2hyb25pemVkKG8pCisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL3N0YXRlbWVudFBhcnNpbmcvc3luY2hyb25pemVkL1VuY29tcGxldGU0LnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvc3RhdGVtZW50UGFyc2luZy9zeW5jaHJvbml6ZWQvVW5jb21wbGV0ZTQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM5ZWRjYWQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL3N0YXRlbWVudFBhcnNpbmcvc3luY2hyb25pemVkL1VuY29tcGxldGU0LnR4dApAQCAtMCwwICsxLDM3IEBACitQc2lKYXZhRmlsZTpVbmNvbXBsZXRlNC5qYXZhCisgIFBzaUltcG9ydExpc3QKKyAgICA8ZW1wdHkgbGlzdD4KKyAgUHNpQ2xhc3M6QQorICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaUtleXdvcmQ6Y2xhc3MoJ2NsYXNzJykKKyAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICBQc2lJZGVudGlmaWVyOkEoJ0EnKQorICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcbiAgJykKKyAgICBQc2lDbGFzc0luaXRpYWxpemVyCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAgICAnKQorICAgICAgICBQc2lTeW5jaHJvbml6ZWRTdGF0ZW1lbnQKKyAgICAgICAgICBQc2lLZXl3b3JkOnN5bmNocm9uaXplZCgnc3luY2hyb25pemVkJykKKyAgICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICAgIFBzaVJlZmVyZW5jZUV4cHJlc3Npb246bworICAgICAgICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgICAgIFBzaUlkZW50aWZpZXI6bygnbycpCisgICAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgICAgICBQc2lFcnJvckVsZW1lbnQ6J3snIGV4cGVjdGVkCisgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gICcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuJykKKyAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL3N0YXRlbWVudFBhcnNpbmcvc3luY2hyb25pemVkL1VuY29tcGxldGU1LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL3N0YXRlbWVudFBhcnNpbmcvc3luY2hyb25pemVkL1VuY29tcGxldGU1LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzU0NDFlZgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvc3RhdGVtZW50UGFyc2luZy9zeW5jaHJvbml6ZWQvVW5jb21wbGV0ZTUuamF2YQpAQCAtMCwwICsxLDUgQEAKK2NsYXNzIEF7CisgIHsKKyAgICBzeW5jaHJvbml6ZWQoKXt9CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL3N0YXRlbWVudFBhcnNpbmcvc3luY2hyb25pemVkL1VuY29tcGxldGU1LnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvc3RhdGVtZW50UGFyc2luZy9zeW5jaHJvbml6ZWQvVW5jb21wbGV0ZTUudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVkODg5OWMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL3N0YXRlbWVudFBhcnNpbmcvc3luY2hyb25pemVkL1VuY29tcGxldGU1LnR4dApAQCAtMCwwICsxLDM2IEBACitQc2lKYXZhRmlsZTpVbmNvbXBsZXRlNS5qYXZhCisgIFBzaUltcG9ydExpc3QKKyAgICA8ZW1wdHkgbGlzdD4KKyAgUHNpQ2xhc3M6QQorICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaUtleXdvcmQ6Y2xhc3MoJ2NsYXNzJykKKyAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICBQc2lJZGVudGlmaWVyOkEoJ0EnKQorICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcbiAgJykKKyAgICBQc2lDbGFzc0luaXRpYWxpemVyCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAgICAnKQorICAgICAgICBQc2lTeW5jaHJvbml6ZWRTdGF0ZW1lbnQKKyAgICAgICAgICBQc2lLZXl3b3JkOnN5bmNocm9uaXplZCgnc3luY2hyb25pemVkJykKKyAgICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICAgIFBzaUVycm9yRWxlbWVudDpFeHByZXNzaW9uIGV4cGVjdGVkCisgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gICcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuJykKKyAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvc3RhdGVtZW50UGFyc2luZy9zeW5jaHJvbml6ZWQvVW5jb21wbGV0ZTYuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvc3RhdGVtZW50UGFyc2luZy9zeW5jaHJvbml6ZWQvVW5jb21wbGV0ZTYuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMjRmNzU5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9zdGF0ZW1lbnRQYXJzaW5nL3N5bmNocm9uaXplZC9VbmNvbXBsZXRlNi5qYXZhCkBAIC0wLDAgKzEsNiBAQAorY2xhc3MgQXsKKyAgeworICAgIHN5bmNocm9uaXplZCgKKyAgICBmb28oKTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvc3RhdGVtZW50UGFyc2luZy9zeW5jaHJvbml6ZWQvVW5jb21wbGV0ZTYudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9zdGF0ZW1lbnRQYXJzaW5nL3N5bmNocm9uaXplZC9VbmNvbXBsZXRlNi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGRkNjMxZQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvc3RhdGVtZW50UGFyc2luZy9zeW5jaHJvbml6ZWQvVW5jb21wbGV0ZTYudHh0CkBAIC0wLDAgKzEsNDMgQEAKK1BzaUphdmFGaWxlOlVuY29tcGxldGU2LmphdmEKKyAgUHNpSW1wb3J0TGlzdAorICAgIDxlbXB0eSBsaXN0PgorICBQc2lDbGFzczpBCisgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpS2V5d29yZDpjbGFzcygnY2xhc3MnKQorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaUlkZW50aWZpZXI6QSgnQScpCisgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuICAnKQorICAgIFBzaUNsYXNzSW5pdGlhbGl6ZXIKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICAgICcpCisgICAgICAgIFBzaVN5bmNocm9uaXplZFN0YXRlbWVudAorICAgICAgICAgIFBzaUtleXdvcmQ6c3luY2hyb25pemVkKCdzeW5jaHJvbml6ZWQnKQorICAgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgICAgUHNpRXJyb3JFbGVtZW50OkV4cHJlc3Npb24gZXhwZWN0ZWQKKyAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAgICAnKQorICAgICAgICBQc2lFeHByZXNzaW9uU3RhdGVtZW50CisgICAgICAgICAgUHNpTWV0aG9kQ2FsbEV4cHJlc3Npb246Zm9vKCkKKyAgICAgICAgICAgIFBzaVJlZmVyZW5jZUV4cHJlc3Npb246Zm9vCisgICAgICAgICAgICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICAgICAgICBQc2lFeHByZXNzaW9uTGlzdAorICAgICAgICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgICAgIFBzaUphdmFUb2tlbjpTRU1JQ09MT04oJzsnKQorICAgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAgJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG4nKQorICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvc3RhdGVtZW50UGFyc2luZy90aHJvdy9Ob3JtYWwuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvc3RhdGVtZW50UGFyc2luZy90aHJvdy9Ob3JtYWwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YTM2ODM3Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9zdGF0ZW1lbnRQYXJzaW5nL3Rocm93L05vcm1hbC5qYXZhCkBAIC0wLDAgKzEsNSBAQAorY2xhc3MgQXsKKyAgeworICAgIHRocm93IGU7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL3N0YXRlbWVudFBhcnNpbmcvdGhyb3cvTm9ybWFsLnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvc3RhdGVtZW50UGFyc2luZy90aHJvdy9Ob3JtYWwudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdmOGYzOGMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL3N0YXRlbWVudFBhcnNpbmcvdGhyb3cvTm9ybWFsLnR4dApAQCAtMCwwICsxLDM1IEBACitQc2lKYXZhRmlsZTpOb3JtYWwuamF2YQorICBQc2lJbXBvcnRMaXN0CisgICAgPGVtcHR5IGxpc3Q+CisgIFBzaUNsYXNzOkEKKyAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lLZXl3b3JkOmNsYXNzKCdjbGFzcycpCisgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgUHNpSWRlbnRpZmllcjpBKCdBJykKKyAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgUHNpV2hpdGVTcGFjZSgnXG4gICcpCisgICAgUHNpQ2xhc3NJbml0aWFsaXplcgorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gICAgJykKKyAgICAgICAgUHNpVGhyb3dTdGF0ZW1lbnQKKyAgICAgICAgICBQc2lLZXl3b3JkOnRocm93KCd0aHJvdycpCisgICAgICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICAgICAgUHNpUmVmZXJlbmNlRXhwcmVzc2lvbjplCisgICAgICAgICAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICAgICAgUHNpSWRlbnRpZmllcjplKCdlJykKKyAgICAgICAgICBQc2lKYXZhVG9rZW46U0VNSUNPTE9OKCc7JykKKyAgICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gICcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuJykKKyAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL3N0YXRlbWVudFBhcnNpbmcvdGhyb3cvVW5jb21wbGV0ZTEuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvc3RhdGVtZW50UGFyc2luZy90aHJvdy9VbmNvbXBsZXRlMS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ2YjUxZWMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL3N0YXRlbWVudFBhcnNpbmcvdGhyb3cvVW5jb21wbGV0ZTEuamF2YQpAQCAtMCwwICsxLDUgQEAKK2NsYXNzIEF7CisgIHsKKyAgICB0aHJvdworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9zdGF0ZW1lbnRQYXJzaW5nL3Rocm93L1VuY29tcGxldGUxLnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvc3RhdGVtZW50UGFyc2luZy90aHJvdy9VbmNvbXBsZXRlMS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzg1YjRlYwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvc3RhdGVtZW50UGFyc2luZy90aHJvdy9VbmNvbXBsZXRlMS50eHQKQEAgLTAsMCArMSwzMSBAQAorUHNpSmF2YUZpbGU6VW5jb21wbGV0ZTEuamF2YQorICBQc2lJbXBvcnRMaXN0CisgICAgPGVtcHR5IGxpc3Q+CisgIFBzaUNsYXNzOkEKKyAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lLZXl3b3JkOmNsYXNzKCdjbGFzcycpCisgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgUHNpSWRlbnRpZmllcjpBKCdBJykKKyAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgUHNpV2hpdGVTcGFjZSgnXG4gICcpCisgICAgUHNpQ2xhc3NJbml0aWFsaXplcgorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gICAgJykKKyAgICAgICAgUHNpVGhyb3dTdGF0ZW1lbnQKKyAgICAgICAgICBQc2lLZXl3b3JkOnRocm93KCd0aHJvdycpCisgICAgICAgICAgUHNpRXJyb3JFbGVtZW50OkV4cHJlc3Npb24gZXhwZWN0ZWQKKyAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAgJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG4nKQorICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9zdGF0ZW1lbnRQYXJzaW5nL3Rocm93L1VuY29tcGxldGUyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL3N0YXRlbWVudFBhcnNpbmcvdGhyb3cvVW5jb21wbGV0ZTIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45Nzk2MTllCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9zdGF0ZW1lbnRQYXJzaW5nL3Rocm93L1VuY29tcGxldGUyLmphdmEKQEAgLTAsMCArMSw1IEBACitjbGFzcyBBeworICB7CisgICAgdGhyb3cgZQorICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9zdGF0ZW1lbnRQYXJzaW5nL3Rocm93L1VuY29tcGxldGUyLnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvc3RhdGVtZW50UGFyc2luZy90aHJvdy9VbmNvbXBsZXRlMi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDllM2NhOAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvc3RhdGVtZW50UGFyc2luZy90aHJvdy9VbmNvbXBsZXRlMi50eHQKQEAgLTAsMCArMSwzNiBAQAorUHNpSmF2YUZpbGU6VW5jb21wbGV0ZTIuamF2YQorICBQc2lJbXBvcnRMaXN0CisgICAgPGVtcHR5IGxpc3Q+CisgIFBzaUNsYXNzOkEKKyAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lLZXl3b3JkOmNsYXNzKCdjbGFzcycpCisgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgUHNpSWRlbnRpZmllcjpBKCdBJykKKyAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgUHNpV2hpdGVTcGFjZSgnXG4gICcpCisgICAgUHNpQ2xhc3NJbml0aWFsaXplcgorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gICAgJykKKyAgICAgICAgUHNpVGhyb3dTdGF0ZW1lbnQKKyAgICAgICAgICBQc2lLZXl3b3JkOnRocm93KCd0aHJvdycpCisgICAgICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICAgICAgUHNpUmVmZXJlbmNlRXhwcmVzc2lvbjplCisgICAgICAgICAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICAgICAgUHNpSWRlbnRpZmllcjplKCdlJykKKyAgICAgICAgICBQc2lFcnJvckVsZW1lbnQ6JzsnIGV4cGVjdGVkCisgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gICcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuJykKKyAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL3N0YXRlbWVudFBhcnNpbmcvdHJ5L0luY29tcGxldGUxLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL3N0YXRlbWVudFBhcnNpbmcvdHJ5L0luY29tcGxldGUxLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2Q4MDY0YgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvc3RhdGVtZW50UGFyc2luZy90cnkvSW5jb21wbGV0ZTEuamF2YQpAQCAtMCwwICsxLDUgQEAKK2NsYXNzIEF7CisgIHsKKyAgICB0cnkKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvc3RhdGVtZW50UGFyc2luZy90cnkvSW5jb21wbGV0ZTEudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9zdGF0ZW1lbnRQYXJzaW5nL3RyeS9JbmNvbXBsZXRlMS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWJkMTRjZgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvc3RhdGVtZW50UGFyc2luZy90cnkvSW5jb21wbGV0ZTEudHh0CkBAIC0wLDAgKzEsMzEgQEAKK1BzaUphdmFGaWxlOkluY29tcGxldGUxLmphdmEKKyAgUHNpSW1wb3J0TGlzdAorICAgIDxlbXB0eSBsaXN0PgorICBQc2lDbGFzczpBCisgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpS2V5d29yZDpjbGFzcygnY2xhc3MnKQorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaUlkZW50aWZpZXI6QSgnQScpCisgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuICAnKQorICAgIFBzaUNsYXNzSW5pdGlhbGl6ZXIKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICAgICcpCisgICAgICAgIFBzaVRyeVN0YXRlbWVudAorICAgICAgICAgIFBzaUtleXdvcmQ6dHJ5KCd0cnknKQorICAgICAgICAgIFBzaUVycm9yRWxlbWVudDoneycgZXhwZWN0ZWQKKyAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAgJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG4nKQorICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9zdGF0ZW1lbnRQYXJzaW5nL3RyeS9JbmNvbXBsZXRlMi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9zdGF0ZW1lbnRQYXJzaW5nL3RyeS9JbmNvbXBsZXRlMi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI2MmJiZGMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL3N0YXRlbWVudFBhcnNpbmcvdHJ5L0luY29tcGxldGUyLmphdmEKQEAgLTAsMCArMSw1IEBACitjbGFzcyBBeworICB7CisgICAgdHJ5e30KKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvc3RhdGVtZW50UGFyc2luZy90cnkvSW5jb21wbGV0ZTIudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9zdGF0ZW1lbnRQYXJzaW5nL3RyeS9JbmNvbXBsZXRlMi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODVjNGM1NQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvc3RhdGVtZW50UGFyc2luZy90cnkvSW5jb21wbGV0ZTIudHh0CkBAIC0wLDAgKzEsMzQgQEAKK1BzaUphdmFGaWxlOkluY29tcGxldGUyLmphdmEKKyAgUHNpSW1wb3J0TGlzdAorICAgIDxlbXB0eSBsaXN0PgorICBQc2lDbGFzczpBCisgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpS2V5d29yZDpjbGFzcygnY2xhc3MnKQorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaUlkZW50aWZpZXI6QSgnQScpCisgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuICAnKQorICAgIFBzaUNsYXNzSW5pdGlhbGl6ZXIKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICAgICcpCisgICAgICAgIFBzaVRyeVN0YXRlbWVudAorICAgICAgICAgIFBzaUtleXdvcmQ6dHJ5KCd0cnknKQorICAgICAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICAgICAgICBQc2lFcnJvckVsZW1lbnQ6J2NhdGNoJyBvciAnZmluYWxseScgZXhwZWN0ZWQKKyAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAgJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG4nKQorICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9zdGF0ZW1lbnRQYXJzaW5nL3RyeS9JbmNvbXBsZXRlMy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9zdGF0ZW1lbnRQYXJzaW5nL3RyeS9JbmNvbXBsZXRlMy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBlN2YzNDMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL3N0YXRlbWVudFBhcnNpbmcvdHJ5L0luY29tcGxldGUzLmphdmEKQEAgLTAsMCArMSw1IEBACitjbGFzcyBBeworICB7CisgICAgdHJ5e31jYXRjaAorICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9zdGF0ZW1lbnRQYXJzaW5nL3RyeS9JbmNvbXBsZXRlMy50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL3N0YXRlbWVudFBhcnNpbmcvdHJ5L0luY29tcGxldGUzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZDU4ZGQ2Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9zdGF0ZW1lbnRQYXJzaW5nL3RyeS9JbmNvbXBsZXRlMy50eHQKQEAgLTAsMCArMSwzNiBAQAorUHNpSmF2YUZpbGU6SW5jb21wbGV0ZTMuamF2YQorICBQc2lJbXBvcnRMaXN0CisgICAgPGVtcHR5IGxpc3Q+CisgIFBzaUNsYXNzOkEKKyAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lLZXl3b3JkOmNsYXNzKCdjbGFzcycpCisgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgUHNpSWRlbnRpZmllcjpBKCdBJykKKyAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgUHNpV2hpdGVTcGFjZSgnXG4gICcpCisgICAgUHNpQ2xhc3NJbml0aWFsaXplcgorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gICAgJykKKyAgICAgICAgUHNpVHJ5U3RhdGVtZW50CisgICAgICAgICAgUHNpS2V5d29yZDp0cnkoJ3RyeScpCisgICAgICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgICAgICAgIFBzaUNhdGNoU2VjdGlvbgorICAgICAgICAgICAgUHNpS2V5d29yZDpjYXRjaCgnY2F0Y2gnKQorICAgICAgICAgICAgUHNpRXJyb3JFbGVtZW50OicoJyBleHBlY3RlZAorICAgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gICcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuJykKKyAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL3N0YXRlbWVudFBhcnNpbmcvdHJ5L0luY29tcGxldGU0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL3N0YXRlbWVudFBhcnNpbmcvdHJ5L0luY29tcGxldGU0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2Q4MzA5MQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvc3RhdGVtZW50UGFyc2luZy90cnkvSW5jb21wbGV0ZTQuamF2YQpAQCAtMCwwICsxLDUgQEAKK2NsYXNzIEF7CisgIHsKKyAgICB0cnl7fWNhdGNoKAorICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9zdGF0ZW1lbnRQYXJzaW5nL3RyeS9JbmNvbXBsZXRlNC50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL3N0YXRlbWVudFBhcnNpbmcvdHJ5L0luY29tcGxldGU0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMjEzYTI1Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9zdGF0ZW1lbnRQYXJzaW5nL3RyeS9JbmNvbXBsZXRlNC50eHQKQEAgLTAsMCArMSwzOSBAQAorUHNpSmF2YUZpbGU6SW5jb21wbGV0ZTQuamF2YQorICBQc2lJbXBvcnRMaXN0CisgICAgPGVtcHR5IGxpc3Q+CisgIFBzaUNsYXNzOkEKKyAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lLZXl3b3JkOmNsYXNzKCdjbGFzcycpCisgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgUHNpSWRlbnRpZmllcjpBKCdBJykKKyAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgUHNpV2hpdGVTcGFjZSgnXG4gICcpCisgICAgUHNpQ2xhc3NJbml0aWFsaXplcgorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gICAgJykKKyAgICAgICAgUHNpVHJ5U3RhdGVtZW50CisgICAgICAgICAgUHNpS2V5d29yZDp0cnkoJ3RyeScpCisgICAgICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgICAgICAgIFBzaUNhdGNoU2VjdGlvbgorICAgICAgICAgICAgUHNpS2V5d29yZDpjYXRjaCgnY2F0Y2gnKQorICAgICAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgICAgIFBzaUVycm9yRWxlbWVudDpQYXJhbWV0ZXIgZXhwZWN0ZWQKKyAgICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgICAgICBQc2lFcnJvckVsZW1lbnQ6JyknIGV4cGVjdGVkCisgICAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAgJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG4nKQorICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvc3RhdGVtZW50UGFyc2luZy90cnkvSW5jb21wbGV0ZTUuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvc3RhdGVtZW50UGFyc2luZy90cnkvSW5jb21wbGV0ZTUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MDE4YjFiCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9zdGF0ZW1lbnRQYXJzaW5nL3RyeS9JbmNvbXBsZXRlNS5qYXZhCkBAIC0wLDAgKzEsNSBAQAorY2xhc3MgQXsKKyAgeworICAgIHRyeXt9Y2F0Y2goRQorICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9zdGF0ZW1lbnRQYXJzaW5nL3RyeS9JbmNvbXBsZXRlNS50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL3N0YXRlbWVudFBhcnNpbmcvdHJ5L0luY29tcGxldGU1LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYjEzYzczCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9zdGF0ZW1lbnRQYXJzaW5nL3RyeS9JbmNvbXBsZXRlNS50eHQKQEAgLTAsMCArMSw0NiBAQAorUHNpSmF2YUZpbGU6SW5jb21wbGV0ZTUuamF2YQorICBQc2lJbXBvcnRMaXN0CisgICAgPGVtcHR5IGxpc3Q+CisgIFBzaUNsYXNzOkEKKyAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lLZXl3b3JkOmNsYXNzKCdjbGFzcycpCisgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgUHNpSWRlbnRpZmllcjpBKCdBJykKKyAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgUHNpV2hpdGVTcGFjZSgnXG4gICcpCisgICAgUHNpQ2xhc3NJbml0aWFsaXplcgorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gICAgJykKKyAgICAgICAgUHNpVHJ5U3RhdGVtZW50CisgICAgICAgICAgUHNpS2V5d29yZDp0cnkoJ3RyeScpCisgICAgICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgICAgICAgIFBzaUNhdGNoU2VjdGlvbgorICAgICAgICAgICAgUHNpS2V5d29yZDpjYXRjaCgnY2F0Y2gnKQorICAgICAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgICAgICBQc2lUeXBlRWxlbWVudDpFCisgICAgICAgICAgICAgIFBzaUphdmFDb2RlUmVmZXJlbmNlRWxlbWVudDpFCisgICAgICAgICAgICAgICAgUHNpSWRlbnRpZmllcjpFKCdFJykKKyAgICAgICAgICAgICAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICAgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgICAgIFBzaUVycm9yRWxlbWVudDpJZGVudGlmaWVyIGV4cGVjdGVkCisgICAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICAgICAgUHNpRXJyb3JFbGVtZW50OicpJyBleHBlY3RlZAorICAgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gICcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuJykKKyAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL3N0YXRlbWVudFBhcnNpbmcvdHJ5L0luY29tcGxldGU2LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL3N0YXRlbWVudFBhcnNpbmcvdHJ5L0luY29tcGxldGU2LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjUyZTEwMAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvc3RhdGVtZW50UGFyc2luZy90cnkvSW5jb21wbGV0ZTYuamF2YQpAQCAtMCwwICsxLDUgQEAKK2NsYXNzIEF7CisgIHsKKyAgICB0cnl7fWNhdGNoKEUgZQorICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9zdGF0ZW1lbnRQYXJzaW5nL3RyeS9JbmNvbXBsZXRlNi50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL3N0YXRlbWVudFBhcnNpbmcvdHJ5L0luY29tcGxldGU2LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZmVjYjAwCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9zdGF0ZW1lbnRQYXJzaW5nL3RyeS9JbmNvbXBsZXRlNi50eHQKQEAgLTAsMCArMSw0NyBAQAorUHNpSmF2YUZpbGU6SW5jb21wbGV0ZTYuamF2YQorICBQc2lJbXBvcnRMaXN0CisgICAgPGVtcHR5IGxpc3Q+CisgIFBzaUNsYXNzOkEKKyAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lLZXl3b3JkOmNsYXNzKCdjbGFzcycpCisgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgUHNpSWRlbnRpZmllcjpBKCdBJykKKyAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgUHNpV2hpdGVTcGFjZSgnXG4gICcpCisgICAgUHNpQ2xhc3NJbml0aWFsaXplcgorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gICAgJykKKyAgICAgICAgUHNpVHJ5U3RhdGVtZW50CisgICAgICAgICAgUHNpS2V5d29yZDp0cnkoJ3RyeScpCisgICAgICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgICAgICAgIFBzaUNhdGNoU2VjdGlvbgorICAgICAgICAgICAgUHNpS2V5d29yZDpjYXRjaCgnY2F0Y2gnKQorICAgICAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgICAgIFBzaVBhcmFtZXRlcjplCisgICAgICAgICAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgICAgICAgUHNpVHlwZUVsZW1lbnQ6RQorICAgICAgICAgICAgICAgIFBzaUphdmFDb2RlUmVmZXJlbmNlRWxlbWVudDpFCisgICAgICAgICAgICAgICAgICBQc2lJZGVudGlmaWVyOkUoJ0UnKQorICAgICAgICAgICAgICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICAgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICAgICAgICAgIFBzaUlkZW50aWZpZXI6ZSgnZScpCisgICAgICAgICAgICBQc2lFcnJvckVsZW1lbnQ6JyknIGV4cGVjdGVkCisgICAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAgJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG4nKQorICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvc3RhdGVtZW50UGFyc2luZy90cnkvSW5jb21wbGV0ZTcuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvc3RhdGVtZW50UGFyc2luZy90cnkvSW5jb21wbGV0ZTcuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NTNlMzdjCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9zdGF0ZW1lbnRQYXJzaW5nL3RyeS9JbmNvbXBsZXRlNy5qYXZhCkBAIC0wLDAgKzEsNSBAQAorY2xhc3MgQXsKKyAgeworICAgIHRyeXt9Y2F0Y2goRSBlKQorICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9zdGF0ZW1lbnRQYXJzaW5nL3RyeS9JbmNvbXBsZXRlNy50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL3N0YXRlbWVudFBhcnNpbmcvdHJ5L0luY29tcGxldGU3LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYTY2ODcyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9zdGF0ZW1lbnRQYXJzaW5nL3RyeS9JbmNvbXBsZXRlNy50eHQKQEAgLTAsMCArMSw0OCBAQAorUHNpSmF2YUZpbGU6SW5jb21wbGV0ZTcuamF2YQorICBQc2lJbXBvcnRMaXN0CisgICAgPGVtcHR5IGxpc3Q+CisgIFBzaUNsYXNzOkEKKyAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lLZXl3b3JkOmNsYXNzKCdjbGFzcycpCisgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgUHNpSWRlbnRpZmllcjpBKCdBJykKKyAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgUHNpV2hpdGVTcGFjZSgnXG4gICcpCisgICAgUHNpQ2xhc3NJbml0aWFsaXplcgorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gICAgJykKKyAgICAgICAgUHNpVHJ5U3RhdGVtZW50CisgICAgICAgICAgUHNpS2V5d29yZDp0cnkoJ3RyeScpCisgICAgICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgICAgICAgIFBzaUNhdGNoU2VjdGlvbgorICAgICAgICAgICAgUHNpS2V5d29yZDpjYXRjaCgnY2F0Y2gnKQorICAgICAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgICAgIFBzaVBhcmFtZXRlcjplCisgICAgICAgICAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgICAgICAgUHNpVHlwZUVsZW1lbnQ6RQorICAgICAgICAgICAgICAgIFBzaUphdmFDb2RlUmVmZXJlbmNlRWxlbWVudDpFCisgICAgICAgICAgICAgICAgICBQc2lJZGVudGlmaWVyOkUoJ0UnKQorICAgICAgICAgICAgICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICAgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICAgICAgICAgIFBzaUlkZW50aWZpZXI6ZSgnZScpCisgICAgICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgICAgICAgUHNpRXJyb3JFbGVtZW50Oid7JyBleHBlY3RlZAorICAgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gICcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuJykKKyAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL3N0YXRlbWVudFBhcnNpbmcvdHJ5L0luY29tcGxldGU4LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL3N0YXRlbWVudFBhcnNpbmcvdHJ5L0luY29tcGxldGU4LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzQ0MWU3MwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvc3RhdGVtZW50UGFyc2luZy90cnkvSW5jb21wbGV0ZTguamF2YQpAQCAtMCwwICsxLDUgQEAKK2NsYXNzIEF7CisgIHsKKyAgICB0cnl7fWZpbmFsbHkKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvc3RhdGVtZW50UGFyc2luZy90cnkvSW5jb21wbGV0ZTgudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9zdGF0ZW1lbnRQYXJzaW5nL3RyeS9JbmNvbXBsZXRlOC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTQ5YWIzYmMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL3N0YXRlbWVudFBhcnNpbmcvdHJ5L0luY29tcGxldGU4LnR4dApAQCAtMCwwICsxLDM1IEBACitQc2lKYXZhRmlsZTpJbmNvbXBsZXRlOC5qYXZhCisgIFBzaUltcG9ydExpc3QKKyAgICA8ZW1wdHkgbGlzdD4KKyAgUHNpQ2xhc3M6QQorICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaUtleXdvcmQ6Y2xhc3MoJ2NsYXNzJykKKyAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICBQc2lJZGVudGlmaWVyOkEoJ0EnKQorICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcbiAgJykKKyAgICBQc2lDbGFzc0luaXRpYWxpemVyCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAgICAnKQorICAgICAgICBQc2lUcnlTdGF0ZW1lbnQKKyAgICAgICAgICBQc2lLZXl3b3JkOnRyeSgndHJ5JykKKyAgICAgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgICAgICAgUHNpS2V5d29yZDpmaW5hbGx5KCdmaW5hbGx5JykKKyAgICAgICAgICBQc2lFcnJvckVsZW1lbnQ6J3snIGV4cGVjdGVkCisgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gICcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuJykKKyAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvc3RhdGVtZW50UGFyc2luZy90cnkvSW5jb21wbGV0ZTkuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvc3RhdGVtZW50UGFyc2luZy90cnkvSW5jb21wbGV0ZTkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZDkyM2E5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9zdGF0ZW1lbnRQYXJzaW5nL3RyeS9JbmNvbXBsZXRlOS5qYXZhCkBAIC0wLDAgKzEsNSBAQAorY2xhc3MgQXsKKyAgeworICAgIHRyeXt9Y2F0Y2goRXwgZSl7fQorICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9zdGF0ZW1lbnRQYXJzaW5nL3RyeS9JbmNvbXBsZXRlOS50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL3N0YXRlbWVudFBhcnNpbmcvdHJ5L0luY29tcGxldGU5LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYTkwYTI4Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9zdGF0ZW1lbnRQYXJzaW5nL3RyeS9JbmNvbXBsZXRlOS50eHQKQEAgLTAsMCArMSw1NiBAQAorUHNpSmF2YUZpbGU6SW5jb21wbGV0ZTkuamF2YQorICBQc2lJbXBvcnRMaXN0CisgICAgPGVtcHR5IGxpc3Q+CisgIFBzaUNsYXNzOkEKKyAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lLZXl3b3JkOmNsYXNzKCdjbGFzcycpCisgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgUHNpSWRlbnRpZmllcjpBKCdBJykKKyAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgUHNpV2hpdGVTcGFjZSgnXG4gICcpCisgICAgUHNpQ2xhc3NJbml0aWFsaXplcgorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gICAgJykKKyAgICAgICAgUHNpVHJ5U3RhdGVtZW50CisgICAgICAgICAgUHNpS2V5d29yZDp0cnkoJ3RyeScpCisgICAgICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgICAgICAgIFBzaUNhdGNoU2VjdGlvbgorICAgICAgICAgICAgUHNpS2V5d29yZDpjYXRjaCgnY2F0Y2gnKQorICAgICAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgICAgICBQc2lUeXBlRWxlbWVudDpFfCBlCisgICAgICAgICAgICAgIFBzaVR5cGVFbGVtZW50OkUKKyAgICAgICAgICAgICAgICBQc2lKYXZhQ29kZVJlZmVyZW5jZUVsZW1lbnQ6RQorICAgICAgICAgICAgICAgICAgUHNpSWRlbnRpZmllcjpFKCdFJykKKyAgICAgICAgICAgICAgICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgICAgICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgICAgICAgIFBzaUphdmFUb2tlbjpPUignfCcpCisgICAgICAgICAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgICAgICAgICBQc2lUeXBlRWxlbWVudDplCisgICAgICAgICAgICAgICAgUHNpSmF2YUNvZGVSZWZlcmVuY2VFbGVtZW50OmUKKyAgICAgICAgICAgICAgICAgIFBzaUlkZW50aWZpZXI6ZSgnZScpCisgICAgICAgICAgICAgICAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICAgICAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICAgICAgUHNpRXJyb3JFbGVtZW50OklkZW50aWZpZXIgZXhwZWN0ZWQKKyAgICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gICcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuJykKKyAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL3N0YXRlbWVudFBhcnNpbmcvdHJ5L05vcm1hbDEuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvc3RhdGVtZW50UGFyc2luZy90cnkvTm9ybWFsMS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIzODIwMzIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL3N0YXRlbWVudFBhcnNpbmcvdHJ5L05vcm1hbDEuamF2YQpAQCAtMCwwICsxLDUgQEAKK2NsYXNzIEF7CisgIHsKKyAgICB0cnl7fWNhdGNoKEUgZSl7fQorICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9zdGF0ZW1lbnRQYXJzaW5nL3RyeS9Ob3JtYWwxLnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvc3RhdGVtZW50UGFyc2luZy90cnkvTm9ybWFsMS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTg2Nzk1ZmMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL3N0YXRlbWVudFBhcnNpbmcvdHJ5L05vcm1hbDEudHh0CkBAIC0wLDAgKzEsNDkgQEAKK1BzaUphdmFGaWxlOk5vcm1hbDEuamF2YQorICBQc2lJbXBvcnRMaXN0CisgICAgPGVtcHR5IGxpc3Q+CisgIFBzaUNsYXNzOkEKKyAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lLZXl3b3JkOmNsYXNzKCdjbGFzcycpCisgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgUHNpSWRlbnRpZmllcjpBKCdBJykKKyAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgUHNpV2hpdGVTcGFjZSgnXG4gICcpCisgICAgUHNpQ2xhc3NJbml0aWFsaXplcgorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gICAgJykKKyAgICAgICAgUHNpVHJ5U3RhdGVtZW50CisgICAgICAgICAgUHNpS2V5d29yZDp0cnkoJ3RyeScpCisgICAgICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgICAgICAgIFBzaUNhdGNoU2VjdGlvbgorICAgICAgICAgICAgUHNpS2V5d29yZDpjYXRjaCgnY2F0Y2gnKQorICAgICAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgICAgIFBzaVBhcmFtZXRlcjplCisgICAgICAgICAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgICAgICAgUHNpVHlwZUVsZW1lbnQ6RQorICAgICAgICAgICAgICAgIFBzaUphdmFDb2RlUmVmZXJlbmNlRWxlbWVudDpFCisgICAgICAgICAgICAgICAgICBQc2lJZGVudGlmaWVyOkUoJ0UnKQorICAgICAgICAgICAgICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICAgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICAgICAgICAgIFBzaUlkZW50aWZpZXI6ZSgnZScpCisgICAgICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gICcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuJykKKyAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL3N0YXRlbWVudFBhcnNpbmcvdHJ5L05vcm1hbDIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvc3RhdGVtZW50UGFyc2luZy90cnkvTm9ybWFsMi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBkNWViZDgKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL3N0YXRlbWVudFBhcnNpbmcvdHJ5L05vcm1hbDIuamF2YQpAQCAtMCwwICsxLDUgQEAKK2NsYXNzIEF7CisgIHsKKyAgICB0cnl7fWNhdGNoKEUgZSl7fWZpbmFsbHl7fQorICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9zdGF0ZW1lbnRQYXJzaW5nL3RyeS9Ob3JtYWwyLnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvc3RhdGVtZW50UGFyc2luZy90cnkvTm9ybWFsMi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzFlZTczZAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvc3RhdGVtZW50UGFyc2luZy90cnkvTm9ybWFsMi50eHQKQEAgLTAsMCArMSw1MyBAQAorUHNpSmF2YUZpbGU6Tm9ybWFsMi5qYXZhCisgIFBzaUltcG9ydExpc3QKKyAgICA8ZW1wdHkgbGlzdD4KKyAgUHNpQ2xhc3M6QQorICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaUtleXdvcmQ6Y2xhc3MoJ2NsYXNzJykKKyAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICBQc2lJZGVudGlmaWVyOkEoJ0EnKQorICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcbiAgJykKKyAgICBQc2lDbGFzc0luaXRpYWxpemVyCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAgICAnKQorICAgICAgICBQc2lUcnlTdGF0ZW1lbnQKKyAgICAgICAgICBQc2lLZXl3b3JkOnRyeSgndHJ5JykKKyAgICAgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgICAgICAgUHNpQ2F0Y2hTZWN0aW9uCisgICAgICAgICAgICBQc2lLZXl3b3JkOmNhdGNoKCdjYXRjaCcpCisgICAgICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICAgICAgUHNpUGFyYW1ldGVyOmUKKyAgICAgICAgICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICAgICAgICBQc2lUeXBlRWxlbWVudDpFCisgICAgICAgICAgICAgICAgUHNpSmF2YUNvZGVSZWZlcmVuY2VFbGVtZW50OkUKKyAgICAgICAgICAgICAgICAgIFBzaUlkZW50aWZpZXI6RSgnRScpCisgICAgICAgICAgICAgICAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICAgICAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICAgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgICAgICAgICAgUHNpSWRlbnRpZmllcjplKCdlJykKKyAgICAgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICAgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgICAgICAgIFBzaUtleXdvcmQ6ZmluYWxseSgnZmluYWxseScpCisgICAgICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAgJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG4nKQorICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvc3RhdGVtZW50UGFyc2luZy90cnkvTm9ybWFsMy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9zdGF0ZW1lbnRQYXJzaW5nL3RyeS9Ob3JtYWwzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODA4NGM3ZgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvc3RhdGVtZW50UGFyc2luZy90cnkvTm9ybWFsMy5qYXZhCkBAIC0wLDAgKzEsNSBAQAorY2xhc3MgQXsKKyAgeworICAgIHRyeXt9ZmluYWxseXt9CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL3N0YXRlbWVudFBhcnNpbmcvdHJ5L05vcm1hbDMudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9zdGF0ZW1lbnRQYXJzaW5nL3RyeS9Ob3JtYWwzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OTA3YzI2Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9zdGF0ZW1lbnRQYXJzaW5nL3RyeS9Ob3JtYWwzLnR4dApAQCAtMCwwICsxLDM2IEBACitQc2lKYXZhRmlsZTpOb3JtYWwzLmphdmEKKyAgUHNpSW1wb3J0TGlzdAorICAgIDxlbXB0eSBsaXN0PgorICBQc2lDbGFzczpBCisgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpS2V5d29yZDpjbGFzcygnY2xhc3MnKQorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaUlkZW50aWZpZXI6QSgnQScpCisgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuICAnKQorICAgIFBzaUNsYXNzSW5pdGlhbGl6ZXIKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICAgICcpCisgICAgICAgIFBzaVRyeVN0YXRlbWVudAorICAgICAgICAgIFBzaUtleXdvcmQ6dHJ5KCd0cnknKQorICAgICAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICAgICAgICBQc2lLZXl3b3JkOmZpbmFsbHkoJ2ZpbmFsbHknKQorICAgICAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gICcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuJykKKyAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvc3RhdGVtZW50UGFyc2luZy90cnkvTm9ybWFsNC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9zdGF0ZW1lbnRQYXJzaW5nL3RyeS9Ob3JtYWw0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTc1YTgzNQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvc3RhdGVtZW50UGFyc2luZy90cnkvTm9ybWFsNC5qYXZhCkBAIC0wLDAgKzEsNSBAQAorY2xhc3MgQXsKKyAgeworICAgIHRyeXt9Y2F0Y2goRTF8RTIgZSl7fQorICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9zdGF0ZW1lbnRQYXJzaW5nL3RyeS9Ob3JtYWw0LnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvc3RhdGVtZW50UGFyc2luZy90cnkvTm9ybWFsNC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzFkNWFhNAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvc3RhdGVtZW50UGFyc2luZy90cnkvTm9ybWFsNC50eHQKQEAgLTAsMCArMSw1NiBAQAorUHNpSmF2YUZpbGU6Tm9ybWFsNC5qYXZhCisgIFBzaUltcG9ydExpc3QKKyAgICA8ZW1wdHkgbGlzdD4KKyAgUHNpQ2xhc3M6QQorICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaUtleXdvcmQ6Y2xhc3MoJ2NsYXNzJykKKyAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICBQc2lJZGVudGlmaWVyOkEoJ0EnKQorICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcbiAgJykKKyAgICBQc2lDbGFzc0luaXRpYWxpemVyCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAgICAnKQorICAgICAgICBQc2lUcnlTdGF0ZW1lbnQKKyAgICAgICAgICBQc2lLZXl3b3JkOnRyeSgndHJ5JykKKyAgICAgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgICAgICAgUHNpQ2F0Y2hTZWN0aW9uCisgICAgICAgICAgICBQc2lLZXl3b3JkOmNhdGNoKCdjYXRjaCcpCisgICAgICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICAgICAgUHNpUGFyYW1ldGVyOmUKKyAgICAgICAgICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICAgICAgICBQc2lUeXBlRWxlbWVudDpFMXxFMgorICAgICAgICAgICAgICAgIFBzaVR5cGVFbGVtZW50OkUxCisgICAgICAgICAgICAgICAgICBQc2lKYXZhQ29kZVJlZmVyZW5jZUVsZW1lbnQ6RTEKKyAgICAgICAgICAgICAgICAgICAgUHNpSWRlbnRpZmllcjpFMSgnRTEnKQorICAgICAgICAgICAgICAgICAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICAgICAgICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgICAgICAgICAgUHNpSmF2YVRva2VuOk9SKCd8JykKKyAgICAgICAgICAgICAgICBQc2lUeXBlRWxlbWVudDpFMgorICAgICAgICAgICAgICAgICAgUHNpSmF2YUNvZGVSZWZlcmVuY2VFbGVtZW50OkUyCisgICAgICAgICAgICAgICAgICAgIFBzaUlkZW50aWZpZXI6RTIoJ0UyJykKKyAgICAgICAgICAgICAgICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICAgICAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICAgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgICAgICAgICAgUHNpSWRlbnRpZmllcjplKCdlJykKKyAgICAgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICAgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAgJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG4nKQorICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvc3RhdGVtZW50UGFyc2luZy93aGlsZS9Ob3JtYWwuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvc3RhdGVtZW50UGFyc2luZy93aGlsZS9Ob3JtYWwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZmM4ZjgzCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9zdGF0ZW1lbnRQYXJzaW5nL3doaWxlL05vcm1hbC5qYXZhCkBAIC0wLDAgKzEsNSBAQAorY2xhc3MgRm9veworICB7CisgICAgd2hpbGUgKHRydWUpIGZvbygpOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9zdGF0ZW1lbnRQYXJzaW5nL3doaWxlL05vcm1hbC50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL3N0YXRlbWVudFBhcnNpbmcvd2hpbGUvTm9ybWFsLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYzRiYmNmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9zdGF0ZW1lbnRQYXJzaW5nL3doaWxlL05vcm1hbC50eHQKQEAgLTAsMCArMSw0NSBAQAorUHNpSmF2YUZpbGU6Tm9ybWFsLmphdmEKKyAgUHNpSW1wb3J0TGlzdAorICAgIDxlbXB0eSBsaXN0PgorICBQc2lDbGFzczpGb28KKyAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lLZXl3b3JkOmNsYXNzKCdjbGFzcycpCisgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgUHNpSWRlbnRpZmllcjpGb28oJ0ZvbycpCisgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuICAnKQorICAgIFBzaUNsYXNzSW5pdGlhbGl6ZXIKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICAgICcpCisgICAgICAgIFBzaVdoaWxlU3RhdGVtZW50CisgICAgICAgICAgUHNpS2V5d29yZDp3aGlsZSgnd2hpbGUnKQorICAgICAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgICAgUHNpTGl0ZXJhbEV4cHJlc3Npb246dHJ1ZQorICAgICAgICAgICAgUHNpSmF2YVRva2VuOlRSVUVfS0VZV09SRCgndHJ1ZScpCisgICAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgICAgICBQc2lFeHByZXNzaW9uU3RhdGVtZW50CisgICAgICAgICAgICBQc2lNZXRob2RDYWxsRXhwcmVzc2lvbjpmb28oKQorICAgICAgICAgICAgICBQc2lSZWZlcmVuY2VFeHByZXNzaW9uOmZvbworICAgICAgICAgICAgICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgICAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICAgICAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgICAgICAgICBQc2lFeHByZXNzaW9uTGlzdAorICAgICAgICAgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgICAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgICAgICAgIFBzaUphdmFUb2tlbjpTRU1JQ09MT04oJzsnKQorICAgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAgJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG4nKQorICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvc3RhdGVtZW50UGFyc2luZy93aGlsZS9VbmNvbXBsZXRlMS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9zdGF0ZW1lbnRQYXJzaW5nL3doaWxlL1VuY29tcGxldGUxLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjU1Y2Q3ZAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvc3RhdGVtZW50UGFyc2luZy93aGlsZS9VbmNvbXBsZXRlMS5qYXZhCkBAIC0wLDAgKzEsNSBAQAorY2xhc3MgRm9veworICB7CisgICAgd2hpbGUKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvc3RhdGVtZW50UGFyc2luZy93aGlsZS9VbmNvbXBsZXRlMS50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL3N0YXRlbWVudFBhcnNpbmcvd2hpbGUvVW5jb21wbGV0ZTEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFiZmNmMDIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL3N0YXRlbWVudFBhcnNpbmcvd2hpbGUvVW5jb21wbGV0ZTEudHh0CkBAIC0wLDAgKzEsMzEgQEAKK1BzaUphdmFGaWxlOlVuY29tcGxldGUxLmphdmEKKyAgUHNpSW1wb3J0TGlzdAorICAgIDxlbXB0eSBsaXN0PgorICBQc2lDbGFzczpGb28KKyAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lLZXl3b3JkOmNsYXNzKCdjbGFzcycpCisgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgUHNpSWRlbnRpZmllcjpGb28oJ0ZvbycpCisgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuICAnKQorICAgIFBzaUNsYXNzSW5pdGlhbGl6ZXIKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICAgICcpCisgICAgICAgIFBzaVdoaWxlU3RhdGVtZW50CisgICAgICAgICAgUHNpS2V5d29yZDp3aGlsZSgnd2hpbGUnKQorICAgICAgICAgIFBzaUVycm9yRWxlbWVudDonKCcgZXhwZWN0ZWQKKyAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAgJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpV2hpdGVTcGFjZSgnXG4nKQorICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9zdGF0ZW1lbnRQYXJzaW5nL3doaWxlL1VuY29tcGxldGUyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL3N0YXRlbWVudFBhcnNpbmcvd2hpbGUvVW5jb21wbGV0ZTIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMzdlNzZhCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9zdGF0ZW1lbnRQYXJzaW5nL3doaWxlL1VuY29tcGxldGUyLmphdmEKQEAgLTAsMCArMSw1IEBACitjbGFzcyBGb297CisgIHsKKyAgICB3aGlsZSAoCisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL3N0YXRlbWVudFBhcnNpbmcvd2hpbGUvVW5jb21wbGV0ZTIudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9zdGF0ZW1lbnRQYXJzaW5nL3doaWxlL1VuY29tcGxldGUyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNDhiZGYxCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9zdGF0ZW1lbnRQYXJzaW5nL3doaWxlL1VuY29tcGxldGUyLnR4dApAQCAtMCwwICsxLDMzIEBACitQc2lKYXZhRmlsZTpVbmNvbXBsZXRlMi5qYXZhCisgIFBzaUltcG9ydExpc3QKKyAgICA8ZW1wdHkgbGlzdD4KKyAgUHNpQ2xhc3M6Rm9vCisgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpS2V5d29yZDpjbGFzcygnY2xhc3MnKQorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaUlkZW50aWZpZXI6Rm9vKCdGb28nKQorICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcbiAgJykKKyAgICBQc2lDbGFzc0luaXRpYWxpemVyCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAgICAnKQorICAgICAgICBQc2lXaGlsZVN0YXRlbWVudAorICAgICAgICAgIFBzaUtleXdvcmQ6d2hpbGUoJ3doaWxlJykKKyAgICAgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICAgIFBzaUVycm9yRWxlbWVudDpFeHByZXNzaW9uIGV4cGVjdGVkCisgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gICcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuJykKKyAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvc3RhdGVtZW50UGFyc2luZy93aGlsZS9VbmNvbXBsZXRlMy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9zdGF0ZW1lbnRQYXJzaW5nL3doaWxlL1VuY29tcGxldGUzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzNkNGUyZQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvc3RhdGVtZW50UGFyc2luZy93aGlsZS9VbmNvbXBsZXRlMy5qYXZhCkBAIC0wLDAgKzEsNiBAQAorY2xhc3MgRm9veworICB7CisgICAgd2hpbGUoCisgICAgZm9vKCk7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL3N0YXRlbWVudFBhcnNpbmcvd2hpbGUvVW5jb21wbGV0ZTMudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9zdGF0ZW1lbnRQYXJzaW5nL3doaWxlL1VuY29tcGxldGUzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MmZiY2Q2Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9zdGF0ZW1lbnRQYXJzaW5nL3doaWxlL1VuY29tcGxldGUzLnR4dApAQCAtMCwwICsxLDQzIEBACitQc2lKYXZhRmlsZTpVbmNvbXBsZXRlMy5qYXZhCisgIFBzaUltcG9ydExpc3QKKyAgICA8ZW1wdHkgbGlzdD4KKyAgUHNpQ2xhc3M6Rm9vCisgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpS2V5d29yZDpjbGFzcygnY2xhc3MnKQorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaUlkZW50aWZpZXI6Rm9vKCdGb28nKQorICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcbiAgJykKKyAgICBQc2lDbGFzc0luaXRpYWxpemVyCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAgICAnKQorICAgICAgICBQc2lXaGlsZVN0YXRlbWVudAorICAgICAgICAgIFBzaUtleXdvcmQ6d2hpbGUoJ3doaWxlJykKKyAgICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICAgIFBzaUVycm9yRWxlbWVudDpFeHByZXNzaW9uIGV4cGVjdGVkCisgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gICAgJykKKyAgICAgICAgUHNpRXhwcmVzc2lvblN0YXRlbWVudAorICAgICAgICAgIFBzaU1ldGhvZENhbGxFeHByZXNzaW9uOmZvbygpCisgICAgICAgICAgICBQc2lSZWZlcmVuY2VFeHByZXNzaW9uOmZvbworICAgICAgICAgICAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgICAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgICAgICAgUHNpRXhwcmVzc2lvbkxpc3QKKyAgICAgICAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgICAgICBQc2lKYXZhVG9rZW46U0VNSUNPTE9OKCc7JykKKyAgICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gICcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuJykKKyAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL3N0YXRlbWVudFBhcnNpbmcvd2hpbGUvVW5jb21wbGV0ZTQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvc3RhdGVtZW50UGFyc2luZy93aGlsZS9VbmNvbXBsZXRlNC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBmYmU3M2YKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL3N0YXRlbWVudFBhcnNpbmcvd2hpbGUvVW5jb21wbGV0ZTQuamF2YQpAQCAtMCwwICsxLDUgQEAKK2NsYXNzIEZvb3sKKyAgeworICAgIHdoaWxlKGNvbmQKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvc3RhdGVtZW50UGFyc2luZy93aGlsZS9VbmNvbXBsZXRlNC50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL3N0YXRlbWVudFBhcnNpbmcvd2hpbGUvVW5jb21wbGV0ZTQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBlYjg0MTgKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL3N0YXRlbWVudFBhcnNpbmcvd2hpbGUvVW5jb21wbGV0ZTQudHh0CkBAIC0wLDAgKzEsMzYgQEAKK1BzaUphdmFGaWxlOlVuY29tcGxldGU0LmphdmEKKyAgUHNpSW1wb3J0TGlzdAorICAgIDxlbXB0eSBsaXN0PgorICBQc2lDbGFzczpGb28KKyAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lLZXl3b3JkOmNsYXNzKCdjbGFzcycpCisgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgUHNpSWRlbnRpZmllcjpGb28oJ0ZvbycpCisgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuICAnKQorICAgIFBzaUNsYXNzSW5pdGlhbGl6ZXIKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICAgICcpCisgICAgICAgIFBzaVdoaWxlU3RhdGVtZW50CisgICAgICAgICAgUHNpS2V5d29yZDp3aGlsZSgnd2hpbGUnKQorICAgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgICAgUHNpUmVmZXJlbmNlRXhwcmVzc2lvbjpjb25kCisgICAgICAgICAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICAgICAgUHNpSWRlbnRpZmllcjpjb25kKCdjb25kJykKKyAgICAgICAgICBQc2lFcnJvckVsZW1lbnQ6JyknIGV4cGVjdGVkCisgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gICcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuJykKKyAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL3N0YXRlbWVudFBhcnNpbmcvd2hpbGUvVW5jb21wbGV0ZTUuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvc3RhdGVtZW50UGFyc2luZy93aGlsZS9VbmNvbXBsZXRlNS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZlNDJiZTEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL3N0YXRlbWVudFBhcnNpbmcvd2hpbGUvVW5jb21wbGV0ZTUuamF2YQpAQCAtMCwwICsxLDUgQEAKK2NsYXNzIEZvb3sKKyAgeworICAgIHdoaWxlKGNvbmQpCisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL3N0YXRlbWVudFBhcnNpbmcvd2hpbGUvVW5jb21wbGV0ZTUudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9zdGF0ZW1lbnRQYXJzaW5nL3doaWxlL1VuY29tcGxldGU1LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMWQ3NWY1Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9zdGF0ZW1lbnRQYXJzaW5nL3doaWxlL1VuY29tcGxldGU1LnR4dApAQCAtMCwwICsxLDM3IEBACitQc2lKYXZhRmlsZTpVbmNvbXBsZXRlNS5qYXZhCisgIFBzaUltcG9ydExpc3QKKyAgICA8ZW1wdHkgbGlzdD4KKyAgUHNpQ2xhc3M6Rm9vCisgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpS2V5d29yZDpjbGFzcygnY2xhc3MnKQorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaUlkZW50aWZpZXI6Rm9vKCdGb28nKQorICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcbiAgJykKKyAgICBQc2lDbGFzc0luaXRpYWxpemVyCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAgICAnKQorICAgICAgICBQc2lXaGlsZVN0YXRlbWVudAorICAgICAgICAgIFBzaUtleXdvcmQ6d2hpbGUoJ3doaWxlJykKKyAgICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICAgIFBzaVJlZmVyZW5jZUV4cHJlc3Npb246Y29uZAorICAgICAgICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgICAgIFBzaUlkZW50aWZpZXI6Y29uZCgnY29uZCcpCisgICAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgICAgICBQc2lFcnJvckVsZW1lbnQ6U3RhdGVtZW50IGV4cGVjdGVkCisgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gICcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuJykKKyAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL3N0YXRlbWVudFBhcnNpbmcvd2hpbGUvVW5jb21wbGV0ZTYuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLWZ1bGwvc3RhdGVtZW50UGFyc2luZy93aGlsZS9VbmNvbXBsZXRlNi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMxOTgxM2QKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL3N0YXRlbWVudFBhcnNpbmcvd2hpbGUvVW5jb21wbGV0ZTYuamF2YQpAQCAtMCwwICsxLDUgQEAKK2NsYXNzIEZvb3sKKyAgeworICAgIHdoaWxlKCkgZm9vKCk7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1mdWxsL3N0YXRlbWVudFBhcnNpbmcvd2hpbGUvVW5jb21wbGV0ZTYudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9zdGF0ZW1lbnRQYXJzaW5nL3doaWxlL1VuY29tcGxldGU2LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYTdiM2FmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItZnVsbC9zdGF0ZW1lbnRQYXJzaW5nL3doaWxlL1VuY29tcGxldGU2LnR4dApAQCAtMCwwICsxLDQ0IEBACitQc2lKYXZhRmlsZTpVbmNvbXBsZXRlNi5qYXZhCisgIFBzaUltcG9ydExpc3QKKyAgICA8ZW1wdHkgbGlzdD4KKyAgUHNpQ2xhc3M6Rm9vCisgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpS2V5d29yZDpjbGFzcygnY2xhc3MnKQorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaUlkZW50aWZpZXI6Rm9vKCdGb28nKQorICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcbiAgJykKKyAgICBQc2lDbGFzc0luaXRpYWxpemVyCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQ29kZUJsb2NrCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAgICAnKQorICAgICAgICBQc2lXaGlsZVN0YXRlbWVudAorICAgICAgICAgIFBzaUtleXdvcmQ6d2hpbGUoJ3doaWxlJykKKyAgICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICAgIFBzaUVycm9yRWxlbWVudDpFeHByZXNzaW9uIGV4cGVjdGVkCisgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgICAgIFBzaUV4cHJlc3Npb25TdGF0ZW1lbnQKKyAgICAgICAgICAgIFBzaU1ldGhvZENhbGxFeHByZXNzaW9uOmZvbygpCisgICAgICAgICAgICAgIFBzaVJlZmVyZW5jZUV4cHJlc3Npb246Zm9vCisgICAgICAgICAgICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgICAgICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICAgICAgICAgIFBzaUV4cHJlc3Npb25MaXN0CisgICAgICAgICAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgICAgICAgUHNpSmF2YVRva2VuOlNFTUlDT0xPTignOycpCisgICAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICAnKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcbicpCisgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9hbm5vdGF0aW9ucy9BcnJheS50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL2Fubm90YXRpb25zL0FycmF5LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NTI1MjEzCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9hbm5vdGF0aW9ucy9BcnJheS50eHQKQEAgLTAsMCArMSwyMCBAQAorUHNpSmF2YUZpbGU6QXJyYXkuamF2YQorICBQc2lBbm5vdGF0aW9uCisgICAgUHNpSmF2YVRva2VuOkFUKCdAJykKKyAgICBQc2lKYXZhQ29kZVJlZmVyZW5jZUVsZW1lbnQ6RW5kb3JzZXJzCisgICAgICBQc2lJZGVudGlmaWVyOkVuZG9yc2VycygnRW5kb3JzZXJzJykKKyAgICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpQW5ub3RhdGlvblBhcmFtZXRlckxpc3QKKyAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICBQc2lOYW1lVmFsdWVQYWlyCisgICAgICAgIFBzaUFycmF5SW5pdGlhbGl6ZXJNZW1iZXJWYWx1ZTp7IkNoaWxkcmVuIiwgIlVuc2NydXB1bG91cyBkZW50aXN0cyJ9CisgICAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgICAgUHNpTGl0ZXJhbEV4cHJlc3Npb246IkNoaWxkcmVuIgorICAgICAgICAgICAgUHNpSmF2YVRva2VuOlNUUklOR19MSVRFUkFMKCciQ2hpbGRyZW4iJykKKyAgICAgICAgICBQc2lKYXZhVG9rZW46Q09NTUEoJywnKQorICAgICAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgICAgIFBzaUxpdGVyYWxFeHByZXNzaW9uOiJVbnNjcnVwdWxvdXMgZGVudGlzdHMiCisgICAgICAgICAgICBQc2lKYXZhVG9rZW46U1RSSU5HX0xJVEVSQUwoJyJVbnNjcnVwdWxvdXMgZGVudGlzdHMiJykKKyAgICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL2Fubm90YXRpb25zL0NvbXBsZXgudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9hbm5vdGF0aW9ucy9Db21wbGV4LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MjExYzBhCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9hbm5vdGF0aW9ucy9Db21wbGV4LnR4dApAQCAtMCwwICsxLDIyIEBACitQc2lKYXZhRmlsZTpDb21wbGV4LmphdmEKKyAgUHNpQW5ub3RhdGlvbgorICAgIFBzaUphdmFUb2tlbjpBVCgnQCcpCisgICAgUHNpSmF2YUNvZGVSZWZlcmVuY2VFbGVtZW50OkF1dGhvcgorICAgICAgUHNpSWRlbnRpZmllcjpBdXRob3IoJ0F1dGhvcicpCisgICAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaUFubm90YXRpb25QYXJhbWV0ZXJMaXN0CisgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgUHNpTmFtZVZhbHVlUGFpcgorICAgICAgICBQc2lJZGVudGlmaWVyOmZpcnN0KCdmaXJzdCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpFUSgnPScpCisgICAgICAgIFBzaUxpdGVyYWxFeHByZXNzaW9uOiJFdWdlbmUiCisgICAgICAgICAgUHNpSmF2YVRva2VuOlNUUklOR19MSVRFUkFMKCciRXVnZW5lIicpCisgICAgICBQc2lKYXZhVG9rZW46Q09NTUEoJywnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lOYW1lVmFsdWVQYWlyCisgICAgICAgIFBzaUlkZW50aWZpZXI6c2Vjb25kKCdzZWNvbmQnKQorICAgICAgICBQc2lKYXZhVG9rZW46RVEoJz0nKQorICAgICAgICBQc2lMaXRlcmFsRXhwcmVzc2lvbjoiV2FtcGlyY2hpayIKKyAgICAgICAgICBQc2lKYXZhVG9rZW46U1RSSU5HX0xJVEVSQUwoJyJXYW1waXJjaGlrIicpCisgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9hbm5vdGF0aW9ucy9FeHRyYUNvbW1hSW5MaXN0LnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvYW5ub3RhdGlvbnMvRXh0cmFDb21tYUluTGlzdC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzU4ZmMxOQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvYW5ub3RhdGlvbnMvRXh0cmFDb21tYUluTGlzdC50eHQKQEAgLTAsMCArMSwyMSBAQAorUHNpSmF2YUZpbGU6RXh0cmFDb21tYUluTGlzdC5qYXZhCisgIFBzaUFubm90YXRpb24KKyAgICBQc2lKYXZhVG9rZW46QVQoJ0AnKQorICAgIFBzaUphdmFDb2RlUmVmZXJlbmNlRWxlbWVudDpBbm5vCisgICAgICBQc2lJZGVudGlmaWVyOkFubm8oJ0Fubm8nKQorICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lBbm5vdGF0aW9uUGFyYW1ldGVyTGlzdAorICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgIFBzaU5hbWVWYWx1ZVBhaXIKKyAgICAgICAgUHNpQXJyYXlJbml0aWFsaXplck1lbWJlclZhbHVlOnswLCAxLH0KKyAgICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgICBQc2lMaXRlcmFsRXhwcmVzc2lvbjowCisgICAgICAgICAgICBQc2lKYXZhVG9rZW46SU5URUdFUl9MSVRFUkFMKCcwJykKKyAgICAgICAgICBQc2lKYXZhVG9rZW46Q09NTUEoJywnKQorICAgICAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgICAgIFBzaUxpdGVyYWxFeHByZXNzaW9uOjEKKyAgICAgICAgICAgIFBzaUphdmFUb2tlbjpJTlRFR0VSX0xJVEVSQUwoJzEnKQorICAgICAgICAgIFBzaUphdmFUb2tlbjpDT01NQSgnLCcpCisgICAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9hbm5vdGF0aW9ucy9GaXJzdE5hbWVNaXNzZWQudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9hbm5vdGF0aW9ucy9GaXJzdE5hbWVNaXNzZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcxMWMyZmEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL2Fubm90YXRpb25zL0ZpcnN0TmFtZU1pc3NlZC50eHQKQEAgLTAsMCArMSwyNiBAQAorUHNpSmF2YUZpbGU6Rmlyc3ROYW1lTWlzc2VkLmphdmEKKyAgUHNpQW5ub3RhdGlvbgorICAgIFBzaUphdmFUb2tlbjpBVCgnQCcpCisgICAgUHNpSmF2YUNvZGVSZWZlcmVuY2VFbGVtZW50OkFubm8KKyAgICAgIFBzaUlkZW50aWZpZXI6QW5ubygnQW5ubycpCisgICAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaUFubm90YXRpb25QYXJhbWV0ZXJMaXN0CisgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgUHNpTmFtZVZhbHVlUGFpcgorICAgICAgICBQc2lSZWZlcmVuY2VFeHByZXNzaW9uOnZhbHVlMQorICAgICAgICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICAgIFBzaUlkZW50aWZpZXI6dmFsdWUxKCd2YWx1ZTEnKQorICAgICAgUHNpRXJyb3JFbGVtZW50OkFubm90YXRpb24gYXR0cmlidXRlIG11c3QgYmUgb2YgdGhlIGZvcm0gJ25hbWU9dmFsdWUnCisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpSmF2YVRva2VuOkNPTU1BKCcsJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpTmFtZVZhbHVlUGFpcgorICAgICAgICBQc2lJZGVudGlmaWVyOnBhcmFtMigncGFyYW0yJykKKyAgICAgICAgUHNpSmF2YVRva2VuOkVRKCc9JykKKyAgICAgICAgUHNpUmVmZXJlbmNlRXhwcmVzc2lvbjp2YWx1ZTIKKyAgICAgICAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgICBQc2lJZGVudGlmaWVyOnZhbHVlMigndmFsdWUyJykKKyAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL2Fubm90YXRpb25zL01hcmtlci50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL2Fubm90YXRpb25zL01hcmtlci50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2EyOGJjNAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvYW5ub3RhdGlvbnMvTWFya2VyLnR4dApAQCAtMCwwICsxLDkgQEAKK1BzaUphdmFGaWxlOk1hcmtlci5qYXZhCisgIFBzaUFubm90YXRpb24KKyAgICBQc2lKYXZhVG9rZW46QVQoJ0AnKQorICAgIFBzaUphdmFDb2RlUmVmZXJlbmNlRWxlbWVudDpQcmVsaW1pbmFyeQorICAgICAgUHNpSWRlbnRpZmllcjpQcmVsaW1pbmFyeSgnUHJlbGltaW5hcnknKQorICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lBbm5vdGF0aW9uUGFyYW1ldGVyTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL2Fubm90YXRpb25zL011bHRpcGxlLnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvYW5ub3RhdGlvbnMvTXVsdGlwbGUudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVlZjJiYWYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL2Fubm90YXRpb25zL011bHRpcGxlLnR4dApAQCAtMCwwICsxLDI2IEBACitQc2lKYXZhRmlsZTpNdWx0aXBsZS5qYXZhCisgIFBzaUFubm90YXRpb24KKyAgICBQc2lKYXZhVG9rZW46QVQoJ0AnKQorICAgIFBzaUphdmFDb2RlUmVmZXJlbmNlRWxlbWVudDpQcmVsaW1pbmFyeQorICAgICAgUHNpSWRlbnRpZmllcjpQcmVsaW1pbmFyeSgnUHJlbGltaW5hcnknKQorICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lBbm5vdGF0aW9uUGFyYW1ldGVyTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgIFBzaVdoaXRlU3BhY2UoJyAnKQorICBQc2lBbm5vdGF0aW9uCisgICAgUHNpSmF2YVRva2VuOkFUKCdAJykKKyAgICBQc2lKYXZhQ29kZVJlZmVyZW5jZUVsZW1lbnQ6T3RoZXIKKyAgICAgIFBzaUlkZW50aWZpZXI6T3RoZXIoJ090aGVyJykKKyAgICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpQW5ub3RhdGlvblBhcmFtZXRlckxpc3QKKyAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICBQc2lOYW1lVmFsdWVQYWlyCisgICAgICAgIFBzaUlkZW50aWZpZXI6bmFtZSgnbmFtZScpCisgICAgICAgIFBzaUphdmFUb2tlbjpFUSgnPScpCisgICAgICAgIFBzaVJlZmVyZW5jZUV4cHJlc3Npb246dmFsdWUKKyAgICAgICAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgICBQc2lJZGVudGlmaWVyOnZhbHVlKCd2YWx1ZScpCisgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvYW5ub3RhdGlvbnMvTmVzdGVkLnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvYW5ub3RhdGlvbnMvTmVzdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOGNmZTQ0Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9hbm5vdGF0aW9ucy9OZXN0ZWQudHh0CkBAIC0wLDAgKzEsMzIgQEAKK1BzaUphdmFGaWxlOk5lc3RlZC5qYXZhCisgIFBzaUFubm90YXRpb24KKyAgICBQc2lKYXZhVG9rZW46QVQoJ0AnKQorICAgIFBzaUphdmFDb2RlUmVmZXJlbmNlRWxlbWVudDpBdXRob3IKKyAgICAgIFBzaUlkZW50aWZpZXI6QXV0aG9yKCdBdXRob3InKQorICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lBbm5vdGF0aW9uUGFyYW1ldGVyTGlzdAorICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgIFBzaU5hbWVWYWx1ZVBhaXIKKyAgICAgICAgUHNpQW5ub3RhdGlvbgorICAgICAgICAgIFBzaUphdmFUb2tlbjpBVCgnQCcpCisgICAgICAgICAgUHNpSmF2YUNvZGVSZWZlcmVuY2VFbGVtZW50Ok5hbWUKKyAgICAgICAgICAgIFBzaUlkZW50aWZpZXI6TmFtZSgnTmFtZScpCisgICAgICAgICAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICAgIFBzaUFubm90YXRpb25QYXJhbWV0ZXJMaXN0CisgICAgICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICAgICAgUHNpTmFtZVZhbHVlUGFpcgorICAgICAgICAgICAgICBQc2lJZGVudGlmaWVyOmZpcnN0KCdmaXJzdCcpCisgICAgICAgICAgICAgIFBzaUphdmFUb2tlbjpFUSgnPScpCisgICAgICAgICAgICAgIFBzaUxpdGVyYWxFeHByZXNzaW9uOiJFdWdlbmUiCisgICAgICAgICAgICAgICAgUHNpSmF2YVRva2VuOlNUUklOR19MSVRFUkFMKCciRXVnZW5lIicpCisgICAgICAgICAgICBQc2lKYXZhVG9rZW46Q09NTUEoJywnKQorICAgICAgICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICAgICAgICBQc2lOYW1lVmFsdWVQYWlyCisgICAgICAgICAgICAgIFBzaUlkZW50aWZpZXI6c2Vjb25kKCdzZWNvbmQnKQorICAgICAgICAgICAgICBQc2lKYXZhVG9rZW46RVEoJz0nKQorICAgICAgICAgICAgICBQc2lMaXRlcmFsRXhwcmVzc2lvbjoiV2FtcGlyY2hpayIKKyAgICAgICAgICAgICAgICBQc2lKYXZhVG9rZW46U1RSSU5HX0xJVEVSQUwoJyJXYW1waXJjaGlrIicpCisgICAgICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvYW5ub3RhdGlvbnMvUGFyYW1ldGVyaXplZEFubm90YXRpb24udHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9hbm5vdGF0aW9ucy9QYXJhbWV0ZXJpemVkQW5ub3RhdGlvbi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTE4NDMxMwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvYW5ub3RhdGlvbnMvUGFyYW1ldGVyaXplZEFubm90YXRpb24udHh0CkBAIC0wLDAgKzEsMTMgQEAKK1BzaUphdmFGaWxlOlBhcmFtZXRlcml6ZWRBbm5vdGF0aW9uLmphdmEKKyAgUHNpQW5ub3RhdGlvbgorICAgIFBzaUphdmFUb2tlbjpBVCgnQCcpCisgICAgUHNpSmF2YUNvZGVSZWZlcmVuY2VFbGVtZW50Ok51bGxhYmxlCisgICAgICBQc2lJZGVudGlmaWVyOk51bGxhYmxlKCdOdWxsYWJsZScpCisgICAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaUFubm90YXRpb25QYXJhbWV0ZXJMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgUHNpRXJyb3JFbGVtZW50OlVucGFyc2VkIHRva2VucworICAgIFBzaUphdmFUb2tlbjpMVCgnPCcpCisgICAgUHNpSWRlbnRpZmllcjpUKCdUJykKKyAgICBQc2lKYXZhVG9rZW46R1QoJz4nKQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9hbm5vdGF0aW9ucy9RdWFsaWZpZWRBbm5vdGF0aW9uLnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvYW5ub3RhdGlvbnMvUXVhbGlmaWVkQW5ub3RhdGlvbi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDczZGRmZQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvYW5ub3RhdGlvbnMvUXVhbGlmaWVkQW5ub3RhdGlvbi50eHQKQEAgLTAsMCArMSwyNCBAQAorUHNpSmF2YUZpbGU6UXVhbGlmaWVkQW5ub3RhdGlvbi5qYXZhCisgIFBzaUFubm90YXRpb24KKyAgICBQc2lKYXZhVG9rZW46QVQoJ0AnKQorICAgIFBzaUphdmFDb2RlUmVmZXJlbmNlRWxlbWVudDpvcmcuamV0YnJhaW5zLmFubm90YXRpb25zLk51bGxhYmxlCisgICAgICBQc2lKYXZhQ29kZVJlZmVyZW5jZUVsZW1lbnQ6b3JnLmpldGJyYWlucy5hbm5vdGF0aW9ucworICAgICAgICBQc2lKYXZhQ29kZVJlZmVyZW5jZUVsZW1lbnQ6b3JnLmpldGJyYWlucworICAgICAgICAgIFBzaUphdmFDb2RlUmVmZXJlbmNlRWxlbWVudDpvcmcKKyAgICAgICAgICAgIFBzaUlkZW50aWZpZXI6b3JnKCdvcmcnKQorICAgICAgICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgICBQc2lKYXZhVG9rZW46RE9UKCcuJykKKyAgICAgICAgICBQc2lJZGVudGlmaWVyOmpldGJyYWlucygnamV0YnJhaW5zJykKKyAgICAgICAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgUHNpSmF2YVRva2VuOkRPVCgnLicpCisgICAgICAgIFBzaUlkZW50aWZpZXI6YW5ub3RhdGlvbnMoJ2Fubm90YXRpb25zJykKKyAgICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpSmF2YVRva2VuOkRPVCgnLicpCisgICAgICBQc2lJZGVudGlmaWVyOk51bGxhYmxlKCdOdWxsYWJsZScpCisgICAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaUFubm90YXRpb25QYXJhbWV0ZXJMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvYW5ub3RhdGlvbnMvU2ltcGxlMC50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL2Fubm90YXRpb25zL1NpbXBsZTAudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ4NjU0OWIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL2Fubm90YXRpb25zL1NpbXBsZTAudHh0CkBAIC0wLDAgKzEsMTMgQEAKK1BzaUphdmFGaWxlOlNpbXBsZTAuamF2YQorICBQc2lBbm5vdGF0aW9uCisgICAgUHNpSmF2YVRva2VuOkFUKCdAJykKKyAgICBQc2lKYXZhQ29kZVJlZmVyZW5jZUVsZW1lbnQ6Q29weXJpZ2h0CisgICAgICBQc2lJZGVudGlmaWVyOkNvcHlyaWdodCgnQ29weXJpZ2h0JykKKyAgICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpQW5ub3RhdGlvblBhcmFtZXRlckxpc3QKKyAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICBQc2lOYW1lVmFsdWVQYWlyCisgICAgICAgIFBzaUxpdGVyYWxFeHByZXNzaW9uOiJibGEtYmxhLWJsYSIKKyAgICAgICAgICBQc2lKYXZhVG9rZW46U1RSSU5HX0xJVEVSQUwoJyJibGEtYmxhLWJsYSInKQorICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvYW5ub3RhdGlvbnMvU2ltcGxlMS50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL2Fubm90YXRpb25zL1NpbXBsZTEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA3OGQwNjkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL2Fubm90YXRpb25zL1NpbXBsZTEudHh0CkBAIC0wLDAgKzEsMTUgQEAKK1BzaUphdmFGaWxlOlNpbXBsZTEuamF2YQorICBQc2lBbm5vdGF0aW9uCisgICAgUHNpSmF2YVRva2VuOkFUKCdAJykKKyAgICBQc2lKYXZhQ29kZVJlZmVyZW5jZUVsZW1lbnQ6Q29weXJpZ2h0CisgICAgICBQc2lJZGVudGlmaWVyOkNvcHlyaWdodCgnQ29weXJpZ2h0JykKKyAgICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpQW5ub3RhdGlvblBhcmFtZXRlckxpc3QKKyAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICBQc2lOYW1lVmFsdWVQYWlyCisgICAgICAgIFBzaVJlZmVyZW5jZUV4cHJlc3Npb246dHJlYXRlZEFzVmFsdWUKKyAgICAgICAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgICBQc2lJZGVudGlmaWVyOnRyZWF0ZWRBc1ZhbHVlKCd0cmVhdGVkQXNWYWx1ZScpCisgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9kZWNsYXJhdGlvbnMvQW5ub0RlY2xhcmF0aW9uLnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvZGVjbGFyYXRpb25zL0Fubm9EZWNsYXJhdGlvbi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDg3NjMzMwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvZGVjbGFyYXRpb25zL0Fubm9EZWNsYXJhdGlvbi50eHQKQEAgLTAsMCArMSwyMiBAQAorUHNpSmF2YUZpbGU6QW5ub0RlY2xhcmF0aW9uLmphdmEKKyAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgIFBzaVdoaXRlU3BhY2UoJyAnKQorICBQc2lDbGFzczpBbm5vdGF0aW9uCisgICAgUHNpTW9kaWZpZXJMaXN0OnB1YmxpYworICAgICAgUHNpS2V5d29yZDpwdWJsaWMoJ3B1YmxpYycpCisgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgUHNpSmF2YVRva2VuOkFUKCdAJykKKyAgICBQc2lLZXl3b3JkOmludGVyZmFjZSgnaW50ZXJmYWNlJykKKyAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICBQc2lJZGVudGlmaWVyOkFubm90YXRpb24oJ0Fubm90YXRpb24nKQorICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgUHNpV2hpdGVTcGFjZSgnICcpCisgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvZGVjbGFyYXRpb25zL0Fubm9EZWZhdWx0LnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvZGVjbGFyYXRpb25zL0Fubm9EZWZhdWx0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZDhlNDM1Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9kZWNsYXJhdGlvbnMvQW5ub0RlZmF1bHQudHh0CkBAIC0wLDAgKzEsMzUgQEAKK1BzaUphdmFGaWxlOkFubm9EZWZhdWx0LmphdmEKKyAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgIFBzaVdoaXRlU3BhY2UoJyAnKQorICBQc2lBbm5vdGF0aW9uTWV0aG9kOmZvbworICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lUeXBlRWxlbWVudDpDbGFzcworICAgICAgUHNpSmF2YUNvZGVSZWZlcmVuY2VFbGVtZW50OkNsYXNzCisgICAgICAgIFBzaUlkZW50aWZpZXI6Q2xhc3MoJ0NsYXNzJykKKyAgICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaUtleXdvcmQ6ZGVmYXVsdCgnZGVmYXVsdCcpCisgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgUHNpQ2xhc3NPYmplY3RBY2Nlc3NFeHByZXNzaW9uOlN0cmluZy5jbGFzcworICAgICAgUHNpVHlwZUVsZW1lbnQ6U3RyaW5nCisgICAgICAgIFBzaUphdmFDb2RlUmVmZXJlbmNlRWxlbWVudDpTdHJpbmcKKyAgICAgICAgICBQc2lJZGVudGlmaWVyOlN0cmluZygnU3RyaW5nJykKKyAgICAgICAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUphdmFUb2tlbjpET1QoJy4nKQorICAgICAgUHNpS2V5d29yZDpjbGFzcygnY2xhc3MnKQorICAgIFBzaUphdmFUb2tlbjpTRU1JQ09MT04oJzsnKQorICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9kZWNsYXJhdGlvbnMvQW5ub0lubmVyLnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvZGVjbGFyYXRpb25zL0Fubm9Jbm5lci50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjVjZDg1OAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvZGVjbGFyYXRpb25zL0Fubm9Jbm5lci50eHQKQEAgLTAsMCArMSw0NCBAQAorUHNpSmF2YUZpbGU6QW5ub0lubmVyLmphdmEKKyAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgIFBzaVdoaXRlU3BhY2UoJyAnKQorICBQc2lDbGFzczpJbm5lcgorICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaUphdmFUb2tlbjpBVCgnQCcpCisgICAgUHNpS2V5d29yZDppbnRlcmZhY2UoJ2ludGVyZmFjZScpCisgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgUHNpSWRlbnRpZmllcjpJbm5lcignSW5uZXInKQorICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICBQc2lBbm5vdGF0aW9uTWV0aG9kOmJhcgorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6ZG91YmxlCisgICAgICAgIFBzaUtleXdvcmQ6ZG91YmxlKCdkb3VibGUnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmJhcignYmFyJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpS2V5d29yZDpkZWZhdWx0KCdkZWZhdWx0JykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpTGl0ZXJhbEV4cHJlc3Npb246MC4wCisgICAgICAgIFBzaUphdmFUb2tlbjpET1VCTEVfTElURVJBTCgnMC4wJykKKyAgICAgIFBzaUphdmFUb2tlbjpTRU1JQ09MT04oJzsnKQorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9kZWNsYXJhdGlvbnMvQW5ub05lc3RlZC50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL2RlY2xhcmF0aW9ucy9Bbm5vTmVzdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMGFhYmEwCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9kZWNsYXJhdGlvbnMvQW5ub05lc3RlZC50eHQKQEAgLTAsMCArMSw0NyBAQAorUHNpSmF2YUZpbGU6QW5ub05lc3RlZC5qYXZhCisgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgUHNpQ2xhc3M6SW5uZXIKKyAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lKYXZhVG9rZW46QVQoJ0AnKQorICAgIFBzaUtleXdvcmQ6aW50ZXJmYWNlKCdpbnRlcmZhY2UnKQorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaUlkZW50aWZpZXI6SW5uZXIoJ0lubmVyJykKKyAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgUHNpQW5ub3RhdGlvbk1ldGhvZDpiYXIKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OlN0cmluZworICAgICAgICBQc2lKYXZhQ29kZVJlZmVyZW5jZUVsZW1lbnQ6U3RyaW5nCisgICAgICAgICAgUHNpSWRlbnRpZmllcjpTdHJpbmcoJ1N0cmluZycpCisgICAgICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6YmFyKCdiYXInKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lLZXl3b3JkOmRlZmF1bHQoJ2RlZmF1bHQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lMaXRlcmFsRXhwcmVzc2lvbjoiPHVuc3BlY2lmaWVkPiIKKyAgICAgICAgUHNpSmF2YVRva2VuOlNUUklOR19MSVRFUkFMKCciPHVuc3BlY2lmaWVkPiInKQorICAgICAgUHNpSmF2YVRva2VuOlNFTUlDT0xPTignOycpCisgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgIFBzaVdoaXRlU3BhY2UoJyAnKQorICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL2RlY2xhcmF0aW9ucy9Bbm5vT3RoZXJNZW1iZXJzLnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvZGVjbGFyYXRpb25zL0Fubm9PdGhlck1lbWJlcnMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY5ZWFiNmIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL2RlY2xhcmF0aW9ucy9Bbm5vT3RoZXJNZW1iZXJzLnR4dApAQCAtMCwwICsxLDY0IEBACitQc2lKYXZhRmlsZTpBbm5vT3RoZXJNZW1iZXJzLmphdmEKKyAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgIFBzaVdoaXRlU3BhY2UoJyAnKQorICBQc2lGaWVsZDpmaWVsZAorICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVR5cGVFbGVtZW50OmludAorICAgICAgUHNpS2V5d29yZDppbnQoJ2ludCcpCisgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgUHNpSWRlbnRpZmllcjpmaWVsZCgnZmllbGQnKQorICAgIFBzaUphdmFUb2tlbjpTRU1JQ09MT04oJzsnKQorICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICBQc2lBbm5vdGF0aW9uTWV0aG9kOm0KKyAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICBQc2lJZGVudGlmaWVyOm0oJ20nKQorICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaUNvZGVCbG9jaworICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgUHNpQ2xhc3M6QworICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaUtleXdvcmQ6Y2xhc3MoJ2NsYXNzJykKKyAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICBQc2lJZGVudGlmaWVyOkMoJ0MnKQorICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgUHNpQ2xhc3M6SQorICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaUtleXdvcmQ6aW50ZXJmYWNlKCdpbnRlcmZhY2UnKQorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaUlkZW50aWZpZXI6SSgnSScpCisgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9kZWNsYXJhdGlvbnMvQW5ub1NpbXBsZS50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL2RlY2xhcmF0aW9ucy9Bbm5vU2ltcGxlLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYmJlMWNlCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9kZWNsYXJhdGlvbnMvQW5ub1NpbXBsZS50eHQKQEAgLTAsMCArMSwyMSBAQAorUHNpSmF2YUZpbGU6QW5ub1NpbXBsZS5qYXZhCisgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgUHNpQW5ub3RhdGlvbk1ldGhvZDpmb28KKyAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpVHlwZUVsZW1lbnQ6aW50CisgICAgICBQc2lLZXl3b3JkOmludCgnaW50JykKKyAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lKYXZhVG9rZW46U0VNSUNPTE9OKCc7JykKKyAgUHNpV2hpdGVTcGFjZSgnICcpCisgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvZGVjbGFyYXRpb25zL0NsYXNzSW5pdC50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL2RlY2xhcmF0aW9ucy9DbGFzc0luaXQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ0M2EzZjQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL2RlY2xhcmF0aW9ucy9DbGFzc0luaXQudHh0CkBAIC0wLDAgKzEsMTQgQEAKK1BzaUphdmFGaWxlOkNsYXNzSW5pdC5qYXZhCisgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgUHNpQ2xhc3NJbml0aWFsaXplcgorICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaUNvZGVCbG9jaworICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUNvbW1lbnQoQ19TVFlMRV9DT01NRU5UKSgnLypjb21tZW50Ki8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgUHNpV2hpdGVTcGFjZSgnICcpCisgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvZGVjbGFyYXRpb25zL0NvbXBsZXRpb25IYWNrMC50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL2RlY2xhcmF0aW9ucy9Db21wbGV0aW9uSGFjazAudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdiOWNmY2MKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL2RlY2xhcmF0aW9ucy9Db21wbGV0aW9uSGFjazAudHh0CkBAIC0wLDAgKzEsMzMgQEAKK1BzaUphdmFGaWxlOkNvbXBsZXRpb25IYWNrMC5qYXZhCisgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgUHNpRmllbGQ6cworICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaUVycm9yRWxlbWVudDpVbmV4cGVjdGVkIHRva2VuCisgICAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgICBQc2lKYXZhVG9rZW46TFQoJzwnKQorICAgICAgICBQc2lUeXBlUGFyYW1ldGVyOlgKKyAgICAgICAgICBQc2lJZGVudGlmaWVyOlgoJ1gnKQorICAgICAgICAgIFBzaUVsZW1lbnQoRVhURU5EU19CT1VORF9MSVNUKQorICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgICBQc2lFcnJvckVsZW1lbnQ6VW5leHBlY3RlZCBpZGVudGlmaWVyCisgICAgICAgICAgUHNpSWRlbnRpZmllcjpJbnRlbGxpSklkZWFSdWxlenooJ0ludGVsbGlKSWRlYVJ1bGV6eicpCisgICAgICAgIFBzaUphdmFUb2tlbjpHVCgnPicpCisgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICBQc2lUeXBlRWxlbWVudDpTdHJpbmcKKyAgICAgIFBzaUphdmFDb2RlUmVmZXJlbmNlRWxlbWVudDpTdHJpbmcKKyAgICAgICAgUHNpSWRlbnRpZmllcjpTdHJpbmcoJ1N0cmluZycpCisgICAgICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICBQc2lJZGVudGlmaWVyOnMoJ3MnKQorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaUphdmFUb2tlbjpFUSgnPScpCisgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgUHNpTGl0ZXJhbEV4cHJlc3Npb246IiIKKyAgICAgIFBzaUphdmFUb2tlbjpTVFJJTkdfTElURVJBTCgnIiInKQorICAgIFBzaUphdmFUb2tlbjpTRU1JQ09MT04oJzsnKQorICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9kZWNsYXJhdGlvbnMvQ29tcGxldGlvbkhhY2sxLnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvZGVjbGFyYXRpb25zL0NvbXBsZXRpb25IYWNrMS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTI3ODI3NwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvZGVjbGFyYXRpb25zL0NvbXBsZXRpb25IYWNrMS50eHQKQEAgLTAsMCArMSwzMSBAQAorUHNpSmF2YUZpbGU6Q29tcGxldGlvbkhhY2sxLmphdmEKKyAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgIFBzaVdoaXRlU3BhY2UoJyAnKQorICBQc2lGaWVsZDpzCisgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpRXJyb3JFbGVtZW50OlVuZXhwZWN0ZWQgdG9rZW4KKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIFBzaUphdmFUb2tlbjpMVCgnPCcpCisgICAgICAgIFBzaVR5cGVQYXJhbWV0ZXI6WAorICAgICAgICAgIFBzaUlkZW50aWZpZXI6WCgnWCcpCisgICAgICAgICAgUHNpRWxlbWVudChFWFRFTkRTX0JPVU5EX0xJU1QpCisgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgUHNpRXJyb3JFbGVtZW50Oic+JyBleHBlY3RlZC4KKyAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgIFBzaVR5cGVFbGVtZW50OlN0cmluZworICAgICAgUHNpSmF2YUNvZGVSZWZlcmVuY2VFbGVtZW50OlN0cmluZworICAgICAgICBQc2lJZGVudGlmaWVyOlN0cmluZygnU3RyaW5nJykKKyAgICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaUlkZW50aWZpZXI6cygncycpCisgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgUHNpSmF2YVRva2VuOkVRKCc9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICBQc2lMaXRlcmFsRXhwcmVzc2lvbjoiIgorICAgICAgUHNpSmF2YVRva2VuOlNUUklOR19MSVRFUkFMKCciIicpCisgICAgUHNpSmF2YVRva2VuOlNFTUlDT0xPTignOycpCisgIFBzaVdoaXRlU3BhY2UoJyAnKQorICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL2RlY2xhcmF0aW9ucy9Db21wbGV0aW9uSGFjazIudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9kZWNsYXJhdGlvbnMvQ29tcGxldGlvbkhhY2syLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YzQzYjZiCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9kZWNsYXJhdGlvbnMvQ29tcGxldGlvbkhhY2syLnR4dApAQCAtMCwwICsxLDI1IEBACitQc2lKYXZhRmlsZTpDb21wbGV0aW9uSGFjazIuamF2YQorICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgUHNpV2hpdGVTcGFjZSgnICcpCisgIFBzaUFubm90YXRpb25NZXRob2Q6Zm9vCisgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVR5cGVFbGVtZW50OlN0cmluZworICAgICAgUHNpSmF2YUNvZGVSZWZlcmVuY2VFbGVtZW50OlN0cmluZworICAgICAgICBQc2lJZGVudGlmaWVyOlN0cmluZygnU3RyaW5nJykKKyAgICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaUVycm9yRWxlbWVudDoneycgb3IgJzsnIGV4cGVjdGVkCisgICAgICBQc2lJZGVudGlmaWVyOmRlZignZGVmJykKKyAgUHNpV2hpdGVTcGFjZSgnICcpCisgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvZGVjbGFyYXRpb25zL0NvbnN0cnVjdG9yQnJhY2tldHMudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9kZWNsYXJhdGlvbnMvQ29uc3RydWN0b3JCcmFja2V0cy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjk4MzdjZQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvZGVjbGFyYXRpb25zL0NvbnN0cnVjdG9yQnJhY2tldHMudHh0CkBAIC0wLDAgKzEsMjUgQEAKK1BzaUphdmFGaWxlOkNvbnN0cnVjdG9yQnJhY2tldHMuamF2YQorICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgUHNpV2hpdGVTcGFjZSgnICcpCisgIFBzaU1ldGhvZDpBCisgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaUlkZW50aWZpZXI6QSgnQScpCisgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgUHNpRXJyb3JFbGVtZW50Oic7JyBleHBlY3RlZAorICAgICAgUHNpSmF2YVRva2VuOkxCUkFDS0VUKCdbJykKKyAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0tFVCgnXScpCisgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgUHNpQ29kZUJsb2NrCisgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgIFBzaVdoaXRlU3BhY2UoJyAnKQorICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL2RlY2xhcmF0aW9ucy9FbXB0eUJvZHkwLnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvZGVjbGFyYXRpb25zL0VtcHR5Qm9keTAudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE4MzE2NjkzCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9kZWNsYXJhdGlvbnMvRW1wdHlCb2R5MC50eHQKQEAgLTAsMCArMSw0IEBACitQc2lKYXZhRmlsZTpFbXB0eUJvZHkwLmphdmEKKyAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgIFBzaVdoaXRlU3BhY2UoJyAnKQorICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvZGVjbGFyYXRpb25zL0VtcHR5Qm9keTEudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9kZWNsYXJhdGlvbnMvRW1wdHlCb2R5MS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjA5ODhhZAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvZGVjbGFyYXRpb25zL0VtcHR5Qm9keTEudHh0CkBAIC0wLDAgKzEsNSBAQAorUHNpSmF2YUZpbGU6RW1wdHlCb2R5MS5qYXZhCisgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICBQc2lFcnJvckVsZW1lbnQ6J30nIGV4cGVjdGVkCisgICAgPGVtcHR5IGxpc3Q+CisgIFBzaVdoaXRlU3BhY2UoJyAnKQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvZGVjbGFyYXRpb25zL0VtcHR5Qm9keTIudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9kZWNsYXJhdGlvbnMvRW1wdHlCb2R5Mi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjNhNjY0MQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvZGVjbGFyYXRpb25zL0VtcHR5Qm9keTIudHh0CkBAIC0wLDAgKzEsMTYgQEAKK1BzaUphdmFGaWxlOkVtcHR5Qm9keTIuamF2YQorICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgUHNpV2hpdGVTcGFjZSgnICcpCisgIFBzaU1vZGlmaWVyTGlzdDpATnVsbAorICAgIFBzaUFubm90YXRpb24KKyAgICAgIFBzaUphdmFUb2tlbjpBVCgnQCcpCisgICAgICBQc2lKYXZhQ29kZVJlZmVyZW5jZUVsZW1lbnQ6TnVsbAorICAgICAgICBQc2lJZGVudGlmaWVyOk51bGwoJ051bGwnKQorICAgICAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lBbm5vdGF0aW9uUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgUHNpRXJyb3JFbGVtZW50OklkZW50aWZpZXIgb3IgdHlwZSBleHBlY3RlZAorICAgIDxlbXB0eSBsaXN0PgorICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9kZWNsYXJhdGlvbnMvRW51bUJvZHkwLnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvZGVjbGFyYXRpb25zL0VudW1Cb2R5MC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTIyMWQ2NQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvZGVjbGFyYXRpb25zL0VudW1Cb2R5MC50eHQKQEAgLTAsMCArMSw2IEBACitQc2lKYXZhRmlsZTpFbnVtQm9keTAuamF2YQorICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgUHNpV2hpdGVTcGFjZSgnICcpCisgIFBzaUphdmFUb2tlbjpTRU1JQ09MT04oJzsnKQorICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL2RlY2xhcmF0aW9ucy9FbnVtQm9keTEudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9kZWNsYXJhdGlvbnMvRW51bUJvZHkxLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNGIxNmJjCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9kZWNsYXJhdGlvbnMvRW51bUJvZHkxLnR4dApAQCAtMCwwICsxLDI4IEBACitQc2lKYXZhRmlsZTpFbnVtQm9keTEuamF2YQorICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgUHNpV2hpdGVTcGFjZSgnICcpCisgIFBzaUVudW1Db25zdGFudDpSRUQKKyAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lJZGVudGlmaWVyOlJFRCgnUkVEJykKKyAgICBQc2lFeHByZXNzaW9uTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgIFBzaUphdmFUb2tlbjpDT01NQSgnLCcpCisgIFBzaVdoaXRlU3BhY2UoJyAnKQorICBQc2lFbnVtQ29uc3RhbnQ6R1JFRU4KKyAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lJZGVudGlmaWVyOkdSRUVOKCdHUkVFTicpCisgICAgUHNpRXhwcmVzc2lvbkxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICBQc2lKYXZhVG9rZW46Q09NTUEoJywnKQorICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgUHNpRW51bUNvbnN0YW50OkJMVUUKKyAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lJZGVudGlmaWVyOkJMVUUoJ0JMVUUnKQorICAgIFBzaUV4cHJlc3Npb25MaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgUHNpSmF2YVRva2VuOlNFTUlDT0xPTignOycpCisgIFBzaVdoaXRlU3BhY2UoJyAnKQorICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL2RlY2xhcmF0aW9ucy9FbnVtQm9keTIudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9kZWNsYXJhdGlvbnMvRW51bUJvZHkyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZTY0NzEzCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9kZWNsYXJhdGlvbnMvRW51bUJvZHkyLnR4dApAQCAtMCwwICsxLDI3IEBACitQc2lKYXZhRmlsZTpFbnVtQm9keTIuamF2YQorICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgUHNpV2hpdGVTcGFjZSgnICcpCisgIFBzaUVudW1Db25zdGFudDpSRUQKKyAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lJZGVudGlmaWVyOlJFRCgnUkVEJykKKyAgICBQc2lFeHByZXNzaW9uTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgIFBzaUphdmFUb2tlbjpDT01NQSgnLCcpCisgIFBzaVdoaXRlU3BhY2UoJyAnKQorICBQc2lFbnVtQ29uc3RhbnQ6R1JFRU4KKyAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lJZGVudGlmaWVyOkdSRUVOKCdHUkVFTicpCisgICAgUHNpRXhwcmVzc2lvbkxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICBQc2lKYXZhVG9rZW46Q09NTUEoJywnKQorICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgUHNpRW51bUNvbnN0YW50OkJMVUUKKyAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lJZGVudGlmaWVyOkJMVUUoJ0JMVUUnKQorICAgIFBzaUV4cHJlc3Npb25MaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgUHNpV2hpdGVTcGFjZSgnICcpCisgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvZGVjbGFyYXRpb25zL0VudW1Cb2R5My50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL2RlY2xhcmF0aW9ucy9FbnVtQm9keTMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVhMGQ0NTYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL2RlY2xhcmF0aW9ucy9FbnVtQm9keTMudHh0CkBAIC0wLDAgKzEsMjggQEAKK1BzaUphdmFGaWxlOkVudW1Cb2R5My5qYXZhCisgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgUHNpRW51bUNvbnN0YW50OlJFRAorICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaUlkZW50aWZpZXI6UkVEKCdSRUQnKQorICAgIFBzaUV4cHJlc3Npb25MaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgUHNpSmF2YVRva2VuOkNPTU1BKCcsJykKKyAgUHNpV2hpdGVTcGFjZSgnICcpCisgIFBzaUVudW1Db25zdGFudDpHUkVFTgorICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaUlkZW50aWZpZXI6R1JFRU4oJ0dSRUVOJykKKyAgICBQc2lFeHByZXNzaW9uTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgIFBzaUphdmFUb2tlbjpDT01NQSgnLCcpCisgIFBzaVdoaXRlU3BhY2UoJyAnKQorICBQc2lFbnVtQ29uc3RhbnQ6QkxVRQorICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaUlkZW50aWZpZXI6QkxVRSgnQkxVRScpCisgICAgUHNpRXhwcmVzc2lvbkxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICBQc2lKYXZhVG9rZW46Q09NTUEoJywnKQorICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9kZWNsYXJhdGlvbnMvRW51bUJvZHk0LnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvZGVjbGFyYXRpb25zL0VudW1Cb2R5NC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjIwZWM5MAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvZGVjbGFyYXRpb25zL0VudW1Cb2R5NC50eHQKQEAgLTAsMCArMSwzNyBAQAorUHNpSmF2YUZpbGU6RW51bUJvZHk0LmphdmEKKyAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgIFBzaVdoaXRlU3BhY2UoJyAnKQorICBQc2lFbnVtQ29uc3RhbnQ6UkVECisgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpSWRlbnRpZmllcjpSRUQoJ1JFRCcpCisgICAgUHNpRXhwcmVzc2lvbkxpc3QKKyAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICBQc2lMaXRlcmFsRXhwcmVzc2lvbjowCisgICAgICAgIFBzaUphdmFUb2tlbjpJTlRFR0VSX0xJVEVSQUwoJzAnKQorICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgUHNpSmF2YVRva2VuOkNPTU1BKCcsJykKKyAgUHNpV2hpdGVTcGFjZSgnICcpCisgIFBzaUVudW1Db25zdGFudDpHUkVFTgorICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaUlkZW50aWZpZXI6R1JFRU4oJ0dSRUVOJykKKyAgICBQc2lFeHByZXNzaW9uTGlzdAorICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgIFBzaUxpdGVyYWxFeHByZXNzaW9uOjEKKyAgICAgICAgUHNpSmF2YVRva2VuOklOVEVHRVJfTElURVJBTCgnMScpCisgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICBQc2lKYXZhVG9rZW46Q09NTUEoJywnKQorICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgUHNpRW51bUNvbnN0YW50OkJMVUUKKyAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lJZGVudGlmaWVyOkJMVUUoJ0JMVUUnKQorICAgIFBzaUV4cHJlc3Npb25MaXN0CisgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgUHNpTGl0ZXJhbEV4cHJlc3Npb246MgorICAgICAgICBQc2lKYXZhVG9rZW46SU5URUdFUl9MSVRFUkFMKCcyJykKKyAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgIFBzaUphdmFUb2tlbjpTRU1JQ09MT04oJzsnKQorICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9kZWNsYXJhdGlvbnMvRW51bUJvZHk1LnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvZGVjbGFyYXRpb25zL0VudW1Cb2R5NS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTczZjM0NwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvZGVjbGFyYXRpb25zL0VudW1Cb2R5NS50eHQKQEAgLTAsMCArMSwyMiBAQAorUHNpSmF2YUZpbGU6RW51bUJvZHk1LmphdmEKKyAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgIFBzaVdoaXRlU3BhY2UoJyAnKQorICBQc2lFbnVtQ29uc3RhbnQ6QQorICAgIFBzaU1vZGlmaWVyTGlzdDpAQU5OT1RBVElPTgorICAgICAgUHNpQW5ub3RhdGlvbgorICAgICAgICBQc2lKYXZhVG9rZW46QVQoJ0AnKQorICAgICAgICBQc2lKYXZhQ29kZVJlZmVyZW5jZUVsZW1lbnQ6QU5OT1RBVElPTgorICAgICAgICAgIFBzaUlkZW50aWZpZXI6QU5OT1RBVElPTignQU5OT1RBVElPTicpCisgICAgICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgIFBzaUFubm90YXRpb25QYXJhbWV0ZXJMaXN0CisgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgUHNpSWRlbnRpZmllcjpBKCdBJykKKyAgICBQc2lFeHByZXNzaW9uTGlzdAorICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgIFBzaUxpdGVyYWxFeHByZXNzaW9uOjEwCisgICAgICAgIFBzaUphdmFUb2tlbjpJTlRFR0VSX0xJVEVSQUwoJzEwJykKKyAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgIFBzaVdoaXRlU3BhY2UoJyAnKQorICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL2RlY2xhcmF0aW9ucy9FbnVtQm9keTYudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9kZWNsYXJhdGlvbnMvRW51bUJvZHk2LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMDE5OWQ1Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9kZWNsYXJhdGlvbnMvRW51bUJvZHk2LnR4dApAQCAtMCwwICsxLDQ1IEBACitQc2lKYXZhRmlsZTpFbnVtQm9keTYuamF2YQorICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgUHNpV2hpdGVTcGFjZSgnICcpCisgIFBzaUVudW1Db25zdGFudDpSRUQKKyAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lJZGVudGlmaWVyOlJFRCgnUkVEJykKKyAgICBQc2lFeHByZXNzaW9uTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgIFBzaUphdmFUb2tlbjpDT01NQSgnLCcpCisgIFBzaVdoaXRlU3BhY2UoJyAnKQorICBQc2lFbnVtQ29uc3RhbnQ6R1JFRU4KKyAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lJZGVudGlmaWVyOkdSRUVOKCdHUkVFTicpCisgICAgUHNpRXhwcmVzc2lvbkxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICBQc2lKYXZhVG9rZW46Q09NTUEoJywnKQorICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgUHNpRW51bUNvbnN0YW50OkJMVUUKKyAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lJZGVudGlmaWVyOkJMVUUoJ0JMVUUnKQorICAgIFBzaUV4cHJlc3Npb25MaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgUHNpRXJyb3JFbGVtZW50OicsJyBvciAnOycgZXhwZWN0ZWQKKyAgICA8ZW1wdHkgbGlzdD4KKyAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgUHNpTWV0aG9kOk91ckVudW0KKyAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpSWRlbnRpZmllcjpPdXJFbnVtKCdPdXJFbnVtJykKKyAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICBQc2lDb2RlQmxvY2sKKyAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgIFBzaVdoaXRlU3BhY2UoJyAnKQorICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL2RlY2xhcmF0aW9ucy9FbnVtU21hcnRUeXBlQ29tcGxldGlvbi50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL2RlY2xhcmF0aW9ucy9FbnVtU21hcnRUeXBlQ29tcGxldGlvbi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTAyZjY0ZAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvZGVjbGFyYXRpb25zL0VudW1TbWFydFR5cGVDb21wbGV0aW9uLnR4dApAQCAtMCwwICsxLDE0MyBAQAorUHNpSmF2YUZpbGU6RW51bVNtYXJ0VHlwZUNvbXBsZXRpb24uamF2YQorICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgUHNpV2hpdGVTcGFjZSgnICcpCisgIFBzaUNsYXNzOlRpbWVUcmF2ZWwKKyAgICBQc2lNb2RpZmllckxpc3Q6QFByZWxpbWluYXJ5KEEuQgorIykgcHVibGljCisgICAgICBQc2lBbm5vdGF0aW9uCisgICAgICAgIFBzaUphdmFUb2tlbjpBVCgnQCcpCisgICAgICAgIFBzaUphdmFDb2RlUmVmZXJlbmNlRWxlbWVudDpQcmVsaW1pbmFyeQorICAgICAgICAgIFBzaUlkZW50aWZpZXI6UHJlbGltaW5hcnkoJ1ByZWxpbWluYXJ5JykKKyAgICAgICAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgUHNpQW5ub3RhdGlvblBhcmFtZXRlckxpc3QKKyAgICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICAgIFBzaU5hbWVWYWx1ZVBhaXIKKyAgICAgICAgICAgIFBzaVJlZmVyZW5jZUV4cHJlc3Npb246QS5CCisgICAgICAgICAgICAgIFBzaVJlZmVyZW5jZUV4cHJlc3Npb246QQorICAgICAgICAgICAgICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgICAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICAgICAgICAgIFBzaUlkZW50aWZpZXI6QSgnQScpCisgICAgICAgICAgICAgIFBzaUphdmFUb2tlbjpET1QoJy4nKQorICAgICAgICAgICAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgICAgICAgIFBzaUlkZW50aWZpZXI6QignQicpCisgICAgICAgICAgUHNpRXJyb3JFbGVtZW50OicsJyBvciAnKScgZXhwZWN0ZWQKKyAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuJykKKyAgICAgICAgICBQc2lFbGVtZW50KEJBRF9DSEFSQUNURVIpKCcjJykKKyAgICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lLZXl3b3JkOnB1YmxpYygncHVibGljJykKKyAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICBQc2lLZXl3b3JkOmNsYXNzKCdjbGFzcycpCisgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgUHNpSWRlbnRpZmllcjpUaW1lVHJhdmVsKCdUaW1lVHJhdmVsJykKKyAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgIFBzaVdoaXRlU3BhY2UoJ1xuICAnKQorICBQc2lDbGFzczpUaW1lVHJhdmVsCisgICAgUHNpTW9kaWZpZXJMaXN0OkBQcmVsaW1pbmFyeShhPUEuQgorIykgcHVibGljCisgICAgICBQc2lBbm5vdGF0aW9uCisgICAgICAgIFBzaUphdmFUb2tlbjpBVCgnQCcpCisgICAgICAgIFBzaUphdmFDb2RlUmVmZXJlbmNlRWxlbWVudDpQcmVsaW1pbmFyeQorICAgICAgICAgIFBzaUlkZW50aWZpZXI6UHJlbGltaW5hcnkoJ1ByZWxpbWluYXJ5JykKKyAgICAgICAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgUHNpQW5ub3RhdGlvblBhcmFtZXRlckxpc3QKKyAgICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICAgIFBzaU5hbWVWYWx1ZVBhaXIKKyAgICAgICAgICAgIFBzaUlkZW50aWZpZXI6YSgnYScpCisgICAgICAgICAgICBQc2lKYXZhVG9rZW46RVEoJz0nKQorICAgICAgICAgICAgUHNpUmVmZXJlbmNlRXhwcmVzc2lvbjpBLkIKKyAgICAgICAgICAgICAgUHNpUmVmZXJlbmNlRXhwcmVzc2lvbjpBCisgICAgICAgICAgICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgICAgICAgICAgUHNpSWRlbnRpZmllcjpBKCdBJykKKyAgICAgICAgICAgICAgUHNpSmF2YVRva2VuOkRPVCgnLicpCisgICAgICAgICAgICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgICAgICAgUHNpSWRlbnRpZmllcjpCKCdCJykKKyAgICAgICAgICBQc2lFcnJvckVsZW1lbnQ6JywnIG9yICcpJyBleHBlY3RlZAorICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgICAgUHNpV2hpdGVTcGFjZSgnXG4nKQorICAgICAgICAgIFBzaUVsZW1lbnQoQkFEX0NIQVJBQ1RFUikoJyMnKQorICAgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUtleXdvcmQ6cHVibGljKCdwdWJsaWMnKQorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaUtleXdvcmQ6Y2xhc3MoJ2NsYXNzJykKKyAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICBQc2lJZGVudGlmaWVyOlRpbWVUcmF2ZWwoJ1RpbWVUcmF2ZWwnKQorICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgUHNpV2hpdGVTcGFjZSgnXG4gICcpCisgIFBzaUNsYXNzOlRpbWVUcmF2ZWwKKyAgICBQc2lNb2RpZmllckxpc3Q6QFByZWxpbWluYXJ5KGE9QS5CCisjLCBiPWMpIHB1YmxpYworICAgICAgUHNpQW5ub3RhdGlvbgorICAgICAgICBQc2lKYXZhVG9rZW46QVQoJ0AnKQorICAgICAgICBQc2lKYXZhQ29kZVJlZmVyZW5jZUVsZW1lbnQ6UHJlbGltaW5hcnkKKyAgICAgICAgICBQc2lJZGVudGlmaWVyOlByZWxpbWluYXJ5KCdQcmVsaW1pbmFyeScpCisgICAgICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgIFBzaUFubm90YXRpb25QYXJhbWV0ZXJMaXN0CisgICAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgICBQc2lOYW1lVmFsdWVQYWlyCisgICAgICAgICAgICBQc2lJZGVudGlmaWVyOmEoJ2EnKQorICAgICAgICAgICAgUHNpSmF2YVRva2VuOkVRKCc9JykKKyAgICAgICAgICAgIFBzaVJlZmVyZW5jZUV4cHJlc3Npb246QS5CCisgICAgICAgICAgICAgIFBzaVJlZmVyZW5jZUV4cHJlc3Npb246QQorICAgICAgICAgICAgICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgICAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICAgICAgICAgIFBzaUlkZW50aWZpZXI6QSgnQScpCisgICAgICAgICAgICAgIFBzaUphdmFUb2tlbjpET1QoJy4nKQorICAgICAgICAgICAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgICAgICAgIFBzaUlkZW50aWZpZXI6QignQicpCisgICAgICAgICAgUHNpRXJyb3JFbGVtZW50OicsJyBvciAnKScgZXhwZWN0ZWQKKyAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuJykKKyAgICAgICAgICBQc2lFbGVtZW50KEJBRF9DSEFSQUNURVIpKCcjJykKKyAgICAgICAgICBQc2lKYXZhVG9rZW46Q09NTUEoJywnKQorICAgICAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgICAgIFBzaU5hbWVWYWx1ZVBhaXIKKyAgICAgICAgICAgIFBzaUlkZW50aWZpZXI6YignYicpCisgICAgICAgICAgICBQc2lKYXZhVG9rZW46RVEoJz0nKQorICAgICAgICAgICAgUHNpUmVmZXJlbmNlRXhwcmVzc2lvbjpjCisgICAgICAgICAgICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgICAgICAgUHNpSWRlbnRpZmllcjpjKCdjJykKKyAgICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lLZXl3b3JkOnB1YmxpYygncHVibGljJykKKyAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICBQc2lLZXl3b3JkOmNsYXNzKCdjbGFzcycpCisgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgUHNpSWRlbnRpZmllcjpUaW1lVHJhdmVsKCdUaW1lVHJhdmVsJykKKyAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgIFBzaVdoaXRlU3BhY2UoJyAnKQorICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL2RlY2xhcmF0aW9ucy9FbnVtV2l0aEluaXRpYWxpemVkQ29uc3RhbnRzLnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvZGVjbGFyYXRpb25zL0VudW1XaXRoSW5pdGlhbGl6ZWRDb25zdGFudHMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI4N2I1NTIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL2RlY2xhcmF0aW9ucy9FbnVtV2l0aEluaXRpYWxpemVkQ29uc3RhbnRzLnR4dApAQCAtMCwwICsxLDUxIEBACitQc2lKYXZhRmlsZTpFbnVtV2l0aEluaXRpYWxpemVkQ29uc3RhbnRzLmphdmEKKyAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgIFBzaVdoaXRlU3BhY2UoJyAnKQorICBQc2lFbnVtQ29uc3RhbnQ6QQorICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaUlkZW50aWZpZXI6QSgnQScpCisgICAgUHNpRXhwcmVzc2lvbkxpc3QKKyAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICBQc2lMaXRlcmFsRXhwcmVzc2lvbjoxMAorICAgICAgICBQc2lKYXZhVG9rZW46SU5URUdFUl9MSVRFUkFMKCcxMCcpCisgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaUFub255bW91c0NsYXNzIChQc2lFbnVtQ29uc3RhbnRJbml0aWFsaXplckltcGwpKToKKyAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgUHNpSmF2YVRva2VuOkNPTU1BKCcsJykKKyAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgUHNpRW51bUNvbnN0YW50OkIKKyAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lJZGVudGlmaWVyOkIoJ0InKQorICAgIFBzaUV4cHJlc3Npb25MaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICBQc2lBbm9ueW1vdXNDbGFzcyAoUHNpRW51bUNvbnN0YW50SW5pdGlhbGl6ZXJJbXBsKSk6CisgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpTWV0aG9kOm1ldGhvZAorICAgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgICAgUHNpSWRlbnRpZmllcjptZXRob2QoJ21ldGhvZCcpCisgICAgICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgUHNpV2hpdGVTcGFjZSgnICcpCisgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvZGVjbGFyYXRpb25zL0VudW1XaXRob3V0Q29uc3RhbnRzLnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvZGVjbGFyYXRpb25zL0VudW1XaXRob3V0Q29uc3RhbnRzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NWIwYTY2Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9kZWNsYXJhdGlvbnMvRW51bVdpdGhvdXRDb25zdGFudHMudHh0CkBAIC0wLDAgKzEsMTcgQEAKK1BzaUphdmFGaWxlOkVudW1XaXRob3V0Q29uc3RhbnRzLmphdmEKKyAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgIFBzaUVycm9yRWxlbWVudDonOycgZXhwZWN0ZWQKKyAgICA8ZW1wdHkgbGlzdD4KKyAgUHNpV2hpdGVTcGFjZSgnICcpCisgIFBzaU1vZGlmaWVyTGlzdDpwcml2YXRlCisgICAgUHNpS2V5d29yZDpwcml2YXRlKCdwcml2YXRlJykKKyAgUHNpV2hpdGVTcGFjZSgnICcpCisgIFBzaVR5cGVFbGVtZW50OkEKKyAgICBQc2lKYXZhQ29kZVJlZmVyZW5jZUVsZW1lbnQ6QQorICAgICAgUHNpSWRlbnRpZmllcjpBKCdBJykKKyAgICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgIFBzaUVycm9yRWxlbWVudDpJZGVudGlmaWVyIGV4cGVjdGVkCisgICAgPGVtcHR5IGxpc3Q+CisgIFBzaVdoaXRlU3BhY2UoJyAnKQorICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL2RlY2xhcmF0aW9ucy9FcnJvcnMudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9kZWNsYXJhdGlvbnMvRXJyb3JzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MDkzNzlmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9kZWNsYXJhdGlvbnMvRXJyb3JzLnR4dApAQCAtMCwwICsxLDQ1IEBACitQc2lKYXZhRmlsZTpFcnJvcnMuamF2YQorICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgUHNpV2hpdGVTcGFjZSgnICcpCisgIFBzaU1vZGlmaWVyTGlzdDpwdWJsaWMgc3RhdGljCisgICAgUHNpS2V5d29yZDpwdWJsaWMoJ3B1YmxpYycpCisgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgUHNpS2V5d29yZDpzdGF0aWMoJ3N0YXRpYycpCisgIFBzaVdoaXRlU3BhY2UoJyAnKQorICBQc2lFcnJvckVsZW1lbnQ6VW5leHBlY3RlZCB0b2tlbgorICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICBQc2lKYXZhVG9rZW46TFQoJzwnKQorICAgICAgUHNpVHlwZVBhcmFtZXRlcjplcnJvcgorICAgICAgICBQc2lJZGVudGlmaWVyOmVycm9yKCdlcnJvcicpCisgICAgICAgIFBzaUVsZW1lbnQoRVhURU5EU19CT1VORF9MSVNUKQorICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpRXJyb3JFbGVtZW50Oic+JyBleHBlY3RlZC4KKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgIFBzaVdoaXRlU3BhY2UoJyAnKQorICBQc2lUeXBlRWxlbWVudDpkZXNjcgorICAgIFBzaUphdmFDb2RlUmVmZXJlbmNlRWxlbWVudDpkZXNjcgorICAgICAgUHNpSWRlbnRpZmllcjpkZXNjcignZGVzY3InKQorICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgUHNpRXJyb3JFbGVtZW50OklkZW50aWZpZXIgZXhwZWN0ZWQKKyAgICA8ZW1wdHkgbGlzdD4KKyAgUHNpRXJyb3JFbGVtZW50OlVuZXhwZWN0ZWQgdG9rZW4KKyAgICBQc2lKYXZhVG9rZW46RVEoJz0nKQorICAgIFBzaUphdmFUb2tlbjpTVFJJTkdfTElURVJBTCgnIjIiJykKKyAgICBQc2lKYXZhVG9rZW46R1QoJz4nKQorICBQc2lGaWVsZDpmMQorICAgIFBzaU1vZGlmaWVyTGlzdDpwcm90ZWN0ZWQKKyAgICAgIFBzaUtleXdvcmQ6cHJvdGVjdGVkKCdwcm90ZWN0ZWQnKQorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaVR5cGVFbGVtZW50OmludAorICAgICAgUHNpS2V5d29yZDppbnQoJ2ludCcpCisgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgUHNpSWRlbnRpZmllcjpmMSgnZjEnKQorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaUphdmFUb2tlbjpFUSgnPScpCisgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgUHNpTGl0ZXJhbEV4cHJlc3Npb246MAorICAgICAgUHNpSmF2YVRva2VuOklOVEVHRVJfTElURVJBTCgnMCcpCisgICAgUHNpSmF2YVRva2VuOlNFTUlDT0xPTignOycpCisgIFBzaVdoaXRlU3BhY2UoJyAnKQorICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvZGVjbGFyYXRpb25zL0V4dGVuc2lvbi50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL2RlY2xhcmF0aW9ucy9FeHRlbnNpb24udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhlODc2YTQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL2RlY2xhcmF0aW9ucy9FeHRlbnNpb24udHh0CkBAIC0wLDAgKzEsMzkgQEAKK1BzaUphdmFGaWxlOkV4dGVuc2lvbi5qYXZhCisgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgUHNpTWV0aG9kOmYKKyAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpVHlwZUVsZW1lbnQ6aW50CisgICAgICBQc2lLZXl3b3JkOmludCgnaW50JykKKyAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICBQc2lJZGVudGlmaWVyOmYoJ2YnKQorICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgIFBzaUtleXdvcmQ6dGhyb3dzKCd0aHJvd3MnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lKYXZhQ29kZVJlZmVyZW5jZUVsZW1lbnQ6RQorICAgICAgICBQc2lJZGVudGlmaWVyOkUoJ0UnKQorICAgICAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgUHNpS2V5d29yZDpkZWZhdWx0KCdkZWZhdWx0JykKKyAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICBQc2lDb2RlQmxvY2sKKyAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lSZXR1cm5TdGF0ZW1lbnQKKyAgICAgICAgUHNpS2V5d29yZDpyZXR1cm4oJ3JldHVybicpCisgICAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgICBQc2lMaXRlcmFsRXhwcmVzc2lvbjo0MgorICAgICAgICAgIFBzaUphdmFUb2tlbjpJTlRFR0VSX0xJVEVSQUwoJzQyJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlNFTUlDT0xPTignOycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL2RlY2xhcmF0aW9ucy9FeHRyYVNlbWljb2xvbi50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL2RlY2xhcmF0aW9ucy9FeHRyYVNlbWljb2xvbi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjQ0NGRiNQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvZGVjbGFyYXRpb25zL0V4dHJhU2VtaWNvbG9uLnR4dApAQCAtMCwwICsxLDIyIEBACitQc2lKYXZhRmlsZTpFeHRyYVNlbWljb2xvbi5qYXZhCisgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgUHNpQ2xhc3M6QworICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaUtleXdvcmQ6Y2xhc3MoJ2NsYXNzJykKKyAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICBQc2lJZGVudGlmaWVyOkMoJ0MnKQorICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgUHNpSmF2YVRva2VuOlNFTUlDT0xPTignOycpCisgIFBzaVdoaXRlU3BhY2UoJyAnKQorICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvZGVjbGFyYXRpb25zL0ZpZWxkTXVsdGkudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9kZWNsYXJhdGlvbnMvRmllbGRNdWx0aS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjIxMzhkNgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvZGVjbGFyYXRpb25zL0ZpZWxkTXVsdGkudHh0CkBAIC0wLDAgKzEsMjIgQEAKK1BzaUphdmFGaWxlOkZpZWxkTXVsdGkuamF2YQorICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgUHNpV2hpdGVTcGFjZSgnICcpCisgIFBzaUZpZWxkOmZpZWxkMQorICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVR5cGVFbGVtZW50OmludAorICAgICAgUHNpS2V5d29yZDppbnQoJ2ludCcpCisgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgUHNpSWRlbnRpZmllcjpmaWVsZDEoJ2ZpZWxkMScpCisgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgUHNpSmF2YVRva2VuOkVRKCc9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICBQc2lMaXRlcmFsRXhwcmVzc2lvbjowCisgICAgICBQc2lKYXZhVG9rZW46SU5URUdFUl9MSVRFUkFMKCcwJykKKyAgUHNpSmF2YVRva2VuOkNPTU1BKCcsJykKKyAgUHNpV2hpdGVTcGFjZSgnICcpCisgIFBzaUZpZWxkOmZpZWxkMgorICAgIFBzaUlkZW50aWZpZXI6ZmllbGQyKCdmaWVsZDInKQorICAgIFBzaUphdmFUb2tlbjpTRU1JQ09MT04oJzsnKQorICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL2RlY2xhcmF0aW9ucy9GaWVsZFNpbXBsZS50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL2RlY2xhcmF0aW9ucy9GaWVsZFNpbXBsZS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTlkYzI4ZgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvZGVjbGFyYXRpb25zL0ZpZWxkU2ltcGxlLnR4dApAQCAtMCwwICsxLDE4IEBACitQc2lKYXZhRmlsZTpGaWVsZFNpbXBsZS5qYXZhCisgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgUHNpRmllbGQ6ZmllbGQKKyAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lUeXBlRWxlbWVudDppbnQKKyAgICAgIFBzaUtleXdvcmQ6aW50KCdpbnQnKQorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaUlkZW50aWZpZXI6ZmllbGQoJ2ZpZWxkJykKKyAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICBQc2lKYXZhVG9rZW46RVEoJz0nKQorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaUxpdGVyYWxFeHByZXNzaW9uOjAKKyAgICAgIFBzaUphdmFUb2tlbjpJTlRFR0VSX0xJVEVSQUwoJzAnKQorICAgIFBzaUphdmFUb2tlbjpTRU1JQ09MT04oJzsnKQorICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL2RlY2xhcmF0aW9ucy9HZW5lcmljTWV0aG9kLnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvZGVjbGFyYXRpb25zL0dlbmVyaWNNZXRob2QudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc1MDRmMzYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL2RlY2xhcmF0aW9ucy9HZW5lcmljTWV0aG9kLnR4dApAQCAtMCwwICsxLDkxIEBACitQc2lKYXZhRmlsZTpHZW5lcmljTWV0aG9kLmphdmEKKyAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgIFBzaVdoaXRlU3BhY2UoJyAnKQorICBQc2lNZXRob2Q6dGVzdAorICAgIFBzaU1vZGlmaWVyTGlzdDpwdWJsaWMgc3RhdGljCisgICAgICBQc2lLZXl3b3JkOnB1YmxpYygncHVibGljJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpS2V5d29yZDpzdGF0aWMoJ3N0YXRpYycpCisgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgIFBzaUphdmFUb2tlbjpMVCgnPCcpCisgICAgICBQc2lUeXBlUGFyYW1ldGVyOkUKKyAgICAgICAgUHNpSWRlbnRpZmllcjpFKCdFJykKKyAgICAgICAgUHNpRWxlbWVudChFWFRFTkRTX0JPVU5EX0xJU1QpCisgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lKYXZhVG9rZW46R1QoJz4nKQorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaUlkZW50aWZpZXI6dGVzdCgndGVzdCcpCisgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpSmF2YVRva2VuOlNFTUlDT0xPTignOycpCisgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgIFBzaU1ldGhvZDp0ZXN0MQorICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICBQc2lKYXZhVG9rZW46TFQoJzwnKQorICAgICAgUHNpVHlwZVBhcmFtZXRlcjpFCisgICAgICAgIFBzaUlkZW50aWZpZXI6RSgnRScpCisgICAgICAgIFBzaUVsZW1lbnQoRVhURU5EU19CT1VORF9MSVNUKQorICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpSmF2YVRva2VuOkdUKCc+JykKKyAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaUlkZW50aWZpZXI6dGVzdDEoJ3Rlc3QxJykKKyAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lKYXZhVG9rZW46U0VNSUNPTE9OKCc7JykKKyAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgUHNpTWV0aG9kOnRlc3QyCisgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgIFBzaUphdmFUb2tlbjpMVCgnPCcpCisgICAgICBQc2lUeXBlUGFyYW1ldGVyOkUxCisgICAgICAgIFBzaUlkZW50aWZpZXI6RTEoJ0UxJykKKyAgICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICAgIFBzaUVsZW1lbnQoRVhURU5EU19CT1VORF9MSVNUKQorICAgICAgICAgIFBzaUtleXdvcmQ6ZXh0ZW5kcygnZXh0ZW5kcycpCisgICAgICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICAgICAgUHNpSmF2YUNvZGVSZWZlcmVuY2VFbGVtZW50OkludGVnZXIKKyAgICAgICAgICAgIFBzaUlkZW50aWZpZXI6SW50ZWdlcignSW50ZWdlcicpCisgICAgICAgICAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpSmF2YVRva2VuOkNPTU1BKCcsJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpVHlwZVBhcmFtZXRlcjpFMgorICAgICAgICBQc2lJZGVudGlmaWVyOkUyKCdFMicpCisgICAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgICBQc2lFbGVtZW50KEVYVEVORFNfQk9VTkRfTElTVCkKKyAgICAgICAgICBQc2lLZXl3b3JkOmV4dGVuZHMoJ2V4dGVuZHMnKQorICAgICAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgICAgIFBzaUphdmFDb2RlUmVmZXJlbmNlRWxlbWVudDpSdW5uYWJsZQorICAgICAgICAgICAgUHNpSWRlbnRpZmllcjpSdW5uYWJsZSgnUnVubmFibGUnKQorICAgICAgICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUphdmFUb2tlbjpHVCgnPicpCisgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgUHNpVHlwZUVsZW1lbnQ6U3RyaW5nCisgICAgICBQc2lKYXZhQ29kZVJlZmVyZW5jZUVsZW1lbnQ6U3RyaW5nCisgICAgICAgIFBzaUlkZW50aWZpZXI6U3RyaW5nKCdTdHJpbmcnKQorICAgICAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgUHNpSWRlbnRpZmllcjp0ZXN0MigndGVzdDInKQorICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaUphdmFUb2tlbjpTRU1JQ09MT04oJzsnKQorICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL2RlY2xhcmF0aW9ucy9HZW5lcmljTWV0aG9kRXJyb3JzLnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvZGVjbGFyYXRpb25zL0dlbmVyaWNNZXRob2RFcnJvcnMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjViZTUwNDcKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL2RlY2xhcmF0aW9ucy9HZW5lcmljTWV0aG9kRXJyb3JzLnR4dApAQCAtMCwwICsxLDQzIEBACitQc2lKYXZhRmlsZTpHZW5lcmljTWV0aG9kRXJyb3JzLmphdmEKKyAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgIFBzaVdoaXRlU3BhY2UoJyAnKQorICBQc2lNb2RpZmllckxpc3Q6CisgICAgPGVtcHR5IGxpc3Q+CisgIFBzaUVycm9yRWxlbWVudDpVbmV4cGVjdGVkIHRva2VuCisgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgIFBzaUphdmFUb2tlbjpMVCgnPCcpCisgICAgICBQc2lUeXBlUGFyYW1ldGVyOkVycm9yCisgICAgICAgIFBzaUlkZW50aWZpZXI6RXJyb3IoJ0Vycm9yJykKKyAgICAgICAgUHNpRWxlbWVudChFWFRFTkRTX0JPVU5EX0xJU1QpCisgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lFcnJvckVsZW1lbnQ6Jz4nIGV4cGVjdGVkLgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgUHNpV2hpdGVTcGFjZSgnICcpCisgIFBzaVR5cGVFbGVtZW50OnNzcworICAgIFBzaUphdmFDb2RlUmVmZXJlbmNlRWxlbWVudDpzc3MKKyAgICAgIFBzaUlkZW50aWZpZXI6c3NzKCdzc3MnKQorICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgUHNpRXJyb3JFbGVtZW50OklkZW50aWZpZXIgZXhwZWN0ZWQKKyAgICA8ZW1wdHkgbGlzdD4KKyAgUHNpV2hpdGVTcGFjZSgnICcpCisgIFBzaUVycm9yRWxlbWVudDpVbmV4cGVjdGVkIHRva2VuCisgICAgUHNpSmF2YVRva2VuOkRJVignLycpCisgICAgUHNpSmF2YVRva2VuOkdUKCc+JykKKyAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICBQc2lKYXZhQ29kZVJlZmVyZW5jZUVsZW1lbnQ6dGVzdCA8ZXJyb3I+CisgICAgICBQc2lJZGVudGlmaWVyOnRlc3QoJ3Rlc3QnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICAgIFBzaUphdmFUb2tlbjpMVCgnPCcpCisgICAgICAgIFBzaVR5cGVFbGVtZW50OmVycm9yCisgICAgICAgICAgUHNpSmF2YUNvZGVSZWZlcmVuY2VFbGVtZW50OmVycm9yCisgICAgICAgICAgICBQc2lJZGVudGlmaWVyOmVycm9yKCdlcnJvcicpCisgICAgICAgICAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICBQc2lKYXZhVG9rZW46R1QoJz4nKQorICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgUHNpSmF2YVRva2VuOlNFTUlDT0xPTignOycpCisgIFBzaVdoaXRlU3BhY2UoJyAnKQorICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL2RlY2xhcmF0aW9ucy9JbmNvbXBsZXRlQW5ub3RhdGlvbi50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL2RlY2xhcmF0aW9ucy9JbmNvbXBsZXRlQW5ub3RhdGlvbi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDU2N2FhYgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvZGVjbGFyYXRpb25zL0luY29tcGxldGVBbm5vdGF0aW9uLnR4dApAQCAtMCwwICsxLDUxIEBACitQc2lKYXZhRmlsZTpJbmNvbXBsZXRlQW5ub3RhdGlvbi5qYXZhCisgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgUHNpQ2xhc3M6Rm9vCisgICAgUHNpTW9kaWZpZXJMaXN0OnB1YmxpYworICAgICAgUHNpS2V5d29yZDpwdWJsaWMoJ3B1YmxpYycpCisgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgUHNpS2V5d29yZDpjbGFzcygnY2xhc3MnKQorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaUlkZW50aWZpZXI6Rm9vKCdGb28nKQorICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICBQc2lNZXRob2Q6dGVzdFNvbWV0aGluZworICAgICAgUHNpTW9kaWZpZXJMaXN0OnB1YmxpYworICAgICAgICBQc2lLZXl3b3JkOnB1YmxpYygncHVibGljJykKKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6dGVzdFNvbWV0aGluZygndGVzdFNvbWV0aGluZycpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpSmF2YVRva2VuOlNFTUlDT0xPTignOycpCisgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgUHNpTW9kaWZpZXJMaXN0OkBOdWxsCisgICAgICBQc2lBbm5vdGF0aW9uCisgICAgICAgIFBzaUphdmFUb2tlbjpBVCgnQCcpCisgICAgICAgIFBzaUphdmFDb2RlUmVmZXJlbmNlRWxlbWVudDpOdWxsCisgICAgICAgICAgUHNpSWRlbnRpZmllcjpOdWxsKCdOdWxsJykKKyAgICAgICAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgUHNpQW5ub3RhdGlvblBhcmFtZXRlckxpc3QKKyAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lFcnJvckVsZW1lbnQ6SWRlbnRpZmllciBvciB0eXBlIGV4cGVjdGVkCisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgUHNpV2hpdGVTcGFjZSgnICcpCisgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvZGVjbGFyYXRpb25zL01ldGhvZE5vcm1hbDAudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9kZWNsYXJhdGlvbnMvTWV0aG9kTm9ybWFsMC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzlmOWFkNQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvZGVjbGFyYXRpb25zL01ldGhvZE5vcm1hbDAudHh0CkBAIC0wLDAgKzEsMjMgQEAKK1BzaUphdmFGaWxlOk1ldGhvZE5vcm1hbDAuamF2YQorICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgUHNpV2hpdGVTcGFjZSgnICcpCisgIFBzaU1ldGhvZDpmCisgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgUHNpSWRlbnRpZmllcjpmKCdmJykKKyAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICBQc2lDb2RlQmxvY2sKKyAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgIFBzaVdoaXRlU3BhY2UoJyAnKQorICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL2RlY2xhcmF0aW9ucy9NZXRob2ROb3JtYWwxLnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvZGVjbGFyYXRpb25zL01ldGhvZE5vcm1hbDEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIxNDZiOWIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL2RlY2xhcmF0aW9ucy9NZXRob2ROb3JtYWwxLnR4dApAQCAtMCwwICsxLDIwIEBACitQc2lKYXZhRmlsZTpNZXRob2ROb3JtYWwxLmphdmEKKyAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgIFBzaVdoaXRlU3BhY2UoJyAnKQorICBQc2lNZXRob2Q6ZgorICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaUlkZW50aWZpZXI6ZignZicpCisgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpSmF2YVRva2VuOlNFTUlDT0xPTignOycpCisgIFBzaVdoaXRlU3BhY2UoJyAnKQorICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL2RlY2xhcmF0aW9ucy9NZXRob2ROb3JtYWwyLnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvZGVjbGFyYXRpb25zL01ldGhvZE5vcm1hbDIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVhM2FiNDgKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL2RlY2xhcmF0aW9ucy9NZXRob2ROb3JtYWwyLnR4dApAQCAtMCwwICsxLDI3IEBACitQc2lKYXZhRmlsZTpNZXRob2ROb3JtYWwyLmphdmEKKyAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgIFBzaVdoaXRlU3BhY2UoJyAnKQorICBQc2lNZXRob2Q6ZgorICAgIFBzaU1vZGlmaWVyTGlzdDpkZWZhdWx0IHB1YmxpYworICAgICAgUHNpS2V5d29yZDpkZWZhdWx0KCdkZWZhdWx0JykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpS2V5d29yZDpwdWJsaWMoJ3B1YmxpYycpCisgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgUHNpSWRlbnRpZmllcjpmKCdmJykKKyAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICBQc2lDb2RlQmxvY2sKKyAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgUHNpV2hpdGVTcGFjZSgnICcpCisgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9kZWNsYXJhdGlvbnMvTWlzc2luZ0luaXRpYWxpemVyLnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvZGVjbGFyYXRpb25zL01pc3NpbmdJbml0aWFsaXplci50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWQ5YjNiMgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvZGVjbGFyYXRpb25zL01pc3NpbmdJbml0aWFsaXplci50eHQKQEAgLTAsMCArMSwxNiBAQAorUHNpSmF2YUZpbGU6TWlzc2luZ0luaXRpYWxpemVyLmphdmEKKyAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgIFBzaVdoaXRlU3BhY2UoJyAnKQorICBQc2lGaWVsZDpmaWVsZAorICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVR5cGVFbGVtZW50OmludAorICAgICAgUHNpS2V5d29yZDppbnQoJ2ludCcpCisgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgUHNpSWRlbnRpZmllcjpmaWVsZCgnZmllbGQnKQorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaUphdmFUb2tlbjpFUSgnPScpCisgICAgUHNpRXJyb3JFbGVtZW50OkV4cHJlc3Npb24gZXhwZWN0ZWQKKyAgICAgIDxlbXB0eSBsaXN0PgorICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL2RlY2xhcmF0aW9ucy9NaXNzaW5nSW5pdGlhbGl6ZXJFeHByZXNzaW9uLnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvZGVjbGFyYXRpb25zL01pc3NpbmdJbml0aWFsaXplckV4cHJlc3Npb24udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU3ZGFjNjUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL2RlY2xhcmF0aW9ucy9NaXNzaW5nSW5pdGlhbGl6ZXJFeHByZXNzaW9uLnR4dApAQCAtMCwwICsxLDE2IEBACitQc2lKYXZhRmlsZTpNaXNzaW5nSW5pdGlhbGl6ZXJFeHByZXNzaW9uLmphdmEKKyAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgIFBzaVdoaXRlU3BhY2UoJyAnKQorICBQc2lGaWVsZDpmaWVsZAorICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVR5cGVFbGVtZW50OmludAorICAgICAgUHNpS2V5d29yZDppbnQoJ2ludCcpCisgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgUHNpSWRlbnRpZmllcjpmaWVsZCgnZmllbGQnKQorICAgIFBzaUphdmFUb2tlbjpFUSgnPScpCisgICAgUHNpRXJyb3JFbGVtZW50OkV4cHJlc3Npb24gZXhwZWN0ZWQKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaUphdmFUb2tlbjpTRU1JQ09MT04oJzsnKQorICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9kZWNsYXJhdGlvbnMvTXVsdGlMaW5lVW5jbG9zZWQudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9kZWNsYXJhdGlvbnMvTXVsdGlMaW5lVW5jbG9zZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBmMzU5ODYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL2RlY2xhcmF0aW9ucy9NdWx0aUxpbmVVbmNsb3NlZC50eHQKQEAgLTAsMCArMSwyMyBAQAorUHNpSmF2YUZpbGU6TXVsdGlMaW5lVW5jbG9zZWQuamF2YQorICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgUHNpV2hpdGVTcGFjZSgnICcpCisgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICA8ZW1wdHkgbGlzdD4KKyAgUHNpVHlwZUVsZW1lbnQ6aW50CisgICAgUHNpS2V5d29yZDppbnQoJ2ludCcpCisgIFBzaUVycm9yRWxlbWVudDpJZGVudGlmaWVyIGV4cGVjdGVkCisgICAgPGVtcHR5IGxpc3Q+CisgIFBzaVdoaXRlU3BhY2UoJyBcbiAnKQorICBQc2lGaWVsZDpvCisgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpVHlwZUVsZW1lbnQ6T2JqZWN0CisgICAgICBQc2lKYXZhQ29kZVJlZmVyZW5jZUVsZW1lbnQ6T2JqZWN0CisgICAgICAgIFBzaUlkZW50aWZpZXI6T2JqZWN0KCdPYmplY3QnKQorICAgICAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgUHNpSWRlbnRpZmllcjpvKCdvJykKKyAgICBQc2lKYXZhVG9rZW46U0VNSUNPTE9OKCc7JykKKyAgUHNpV2hpdGVTcGFjZSgnICcpCisgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvZGVjbGFyYXRpb25zL05vVHlwZS50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL2RlY2xhcmF0aW9ucy9Ob1R5cGUudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU1MDdjMzZiCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9kZWNsYXJhdGlvbnMvTm9UeXBlLnR4dApAQCAtMCwwICsxLDIwIEBACitQc2lKYXZhRmlsZTpOb1R5cGUuamF2YQorICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgUHNpV2hpdGVTcGFjZSgnICcpCisgIFBzaUVycm9yRWxlbWVudDpVbmV4cGVjdGVkIHRva2VuCisgICAgUHNpS2V5d29yZDpuZXcoJ25ldycpCisgIFBzaVdoaXRlU3BhY2UoJyAnKQorICBQc2lNZXRob2Q6WAorICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lJZGVudGlmaWVyOlgoJ1gnKQorICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaUphdmFUb2tlbjpTRU1JQ09MT04oJzsnKQorICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL2RlY2xhcmF0aW9ucy9QYXJhbWV0ZXJBbm5vdGF0aW9uLnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvZGVjbGFyYXRpb25zL1BhcmFtZXRlckFubm90YXRpb24udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMyODNjYTQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL2RlY2xhcmF0aW9ucy9QYXJhbWV0ZXJBbm5vdGF0aW9uLnR4dApAQCAtMCwwICsxLDQ1IEBACitQc2lKYXZhRmlsZTpQYXJhbWV0ZXJBbm5vdGF0aW9uLmphdmEKKyAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgIFBzaVdoaXRlU3BhY2UoJyAnKQorICBQc2lNZXRob2Q6Zm9vCisgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgUHNpUGFyYW1ldGVyTGlzdDooQEFubm90YXRpb24odmFsdWU9NzcpIGludCBwYXJhbSkKKyAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICBQc2lQYXJhbWV0ZXI6cGFyYW0KKyAgICAgICAgUHNpTW9kaWZpZXJMaXN0OkBBbm5vdGF0aW9uKHZhbHVlPTc3KQorICAgICAgICAgIFBzaUFubm90YXRpb24KKyAgICAgICAgICAgIFBzaUphdmFUb2tlbjpBVCgnQCcpCisgICAgICAgICAgICBQc2lKYXZhQ29kZVJlZmVyZW5jZUVsZW1lbnQ6QW5ub3RhdGlvbgorICAgICAgICAgICAgICBQc2lJZGVudGlmaWVyOkFubm90YXRpb24oJ0Fubm90YXRpb24nKQorICAgICAgICAgICAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgICAgICBQc2lBbm5vdGF0aW9uUGFyYW1ldGVyTGlzdAorICAgICAgICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICAgICAgICBQc2lOYW1lVmFsdWVQYWlyCisgICAgICAgICAgICAgICAgUHNpSWRlbnRpZmllcjp2YWx1ZSgndmFsdWUnKQorICAgICAgICAgICAgICAgIFBzaUphdmFUb2tlbjpFUSgnPScpCisgICAgICAgICAgICAgICAgUHNpTGl0ZXJhbEV4cHJlc3Npb246NzcKKyAgICAgICAgICAgICAgICAgIFBzaUphdmFUb2tlbjpJTlRFR0VSX0xJVEVSQUwoJzc3JykKKyAgICAgICAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICAgIFBzaVR5cGVFbGVtZW50OmludAorICAgICAgICAgIFBzaUtleXdvcmQ6aW50KCdpbnQnKQorICAgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgICAgUHNpSWRlbnRpZmllcjpwYXJhbSgncGFyYW0nKQorICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICBQc2lDb2RlQmxvY2sKKyAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgIFBzaVdoaXRlU3BhY2UoJyAnKQorICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL2RlY2xhcmF0aW9ucy9QYXJhbWV0ZXJpemVkQ2xhc3MudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9kZWNsYXJhdGlvbnMvUGFyYW1ldGVyaXplZENsYXNzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNjJjMGM4Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9kZWNsYXJhdGlvbnMvUGFyYW1ldGVyaXplZENsYXNzLnR4dApAQCAtMCwwICsxLDQ0IEBACitQc2lKYXZhRmlsZTpQYXJhbWV0ZXJpemVkQ2xhc3MuamF2YQorICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgUHNpV2hpdGVTcGFjZSgnICcpCisgIFBzaUNsYXNzOkEKKyAgICBQc2lNb2RpZmllckxpc3Q6cHVibGljCisgICAgICBQc2lLZXl3b3JkOnB1YmxpYygncHVibGljJykKKyAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICBQc2lLZXl3b3JkOmNsYXNzKCdjbGFzcycpCisgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgUHNpSWRlbnRpZmllcjpBKCdBJykKKyAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgUHNpSmF2YVRva2VuOkxUKCc8JykKKyAgICAgIFBzaVR5cGVQYXJhbWV0ZXI6VAorICAgICAgICBQc2lJZGVudGlmaWVyOlQoJ1QnKQorICAgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgICAgUHNpRWxlbWVudChFWFRFTkRTX0JPVU5EX0xJU1QpCisgICAgICAgICAgUHNpS2V5d29yZDpleHRlbmRzKCdleHRlbmRzJykKKyAgICAgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgICAgICBQc2lKYXZhQ29kZVJlZmVyZW5jZUVsZW1lbnQ6amF2YS51dGlsLkxpc3QKKyAgICAgICAgICAgIFBzaUphdmFDb2RlUmVmZXJlbmNlRWxlbWVudDpqYXZhLnV0aWwKKyAgICAgICAgICAgICAgUHNpSmF2YUNvZGVSZWZlcmVuY2VFbGVtZW50OmphdmEKKyAgICAgICAgICAgICAgICBQc2lJZGVudGlmaWVyOmphdmEoJ2phdmEnKQorICAgICAgICAgICAgICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgICAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICAgICAgICBQc2lKYXZhVG9rZW46RE9UKCcuJykKKyAgICAgICAgICAgICAgUHNpSWRlbnRpZmllcjp1dGlsKCd1dGlsJykKKyAgICAgICAgICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICAgICAgUHNpSmF2YVRva2VuOkRPVCgnLicpCisgICAgICAgICAgICBQc2lJZGVudGlmaWVyOkxpc3QoJ0xpc3QnKQorICAgICAgICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUphdmFUb2tlbjpHVCgnPicpCisgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgIFBzaVdoaXRlU3BhY2UoJyAnKQorICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL2RlY2xhcmF0aW9ucy9QYXJhbWV0ZXJpemVkTWV0aG9kLnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvZGVjbGFyYXRpb25zL1BhcmFtZXRlcml6ZWRNZXRob2QudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAxMjgyNjQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL2RlY2xhcmF0aW9ucy9QYXJhbWV0ZXJpemVkTWV0aG9kLnR4dApAQCAtMCwwICsxLDQwIEBACitQc2lKYXZhRmlsZTpQYXJhbWV0ZXJpemVkTWV0aG9kLmphdmEKKyAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgIFBzaVdoaXRlU3BhY2UoJyAnKQorICBQc2lNZXRob2Q6YmFyCisgICAgUHNpTW9kaWZpZXJMaXN0OkBOdWxsYWJsZQorICAgICAgUHNpQW5ub3RhdGlvbgorICAgICAgICBQc2lKYXZhVG9rZW46QVQoJ0AnKQorICAgICAgICBQc2lKYXZhQ29kZVJlZmVyZW5jZUVsZW1lbnQ6TnVsbGFibGUKKyAgICAgICAgICBQc2lJZGVudGlmaWVyOk51bGxhYmxlKCdOdWxsYWJsZScpCisgICAgICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgIFBzaUFubm90YXRpb25QYXJhbWV0ZXJMaXN0CisgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgIFBzaUphdmFUb2tlbjpMVCgnPCcpCisgICAgICBQc2lUeXBlUGFyYW1ldGVyOlQKKyAgICAgICAgUHNpSWRlbnRpZmllcjpUKCdUJykKKyAgICAgICAgUHNpRWxlbWVudChFWFRFTkRTX0JPVU5EX0xJU1QpCisgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lKYXZhVG9rZW46R1QoJz4nKQorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaVR5cGVFbGVtZW50OlQKKyAgICAgIFBzaUphdmFDb2RlUmVmZXJlbmNlRWxlbWVudDpUCisgICAgICAgIFBzaUlkZW50aWZpZXI6VCgnVCcpCisgICAgICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICBQc2lJZGVudGlmaWVyOmJhcignYmFyJykKKyAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICBQc2lDb2RlQmxvY2sKKyAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgIFBzaVdoaXRlU3BhY2UoJyAnKQorICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL2RlY2xhcmF0aW9ucy9QaW5lcy50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL2RlY2xhcmF0aW9ucy9QaW5lcy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWZiZTQwZQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvZGVjbGFyYXRpb25zL1BpbmVzLnR4dApAQCAtMCwwICsxLDU2IEBACitQc2lKYXZhRmlsZTpQaW5lcy5qYXZhCisgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgUHNpQ2xhc3M6QQorICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaUtleXdvcmQ6Y2xhc3MoJ2NsYXNzJykKKyAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICBQc2lJZGVudGlmaWVyOkEoJ0EnKQorICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICBQc2lKYXZhVG9rZW46TFQoJzwnKQorICAgICAgUHNpVHlwZVBhcmFtZXRlcjpUCisgICAgICAgIFBzaUlkZW50aWZpZXI6VCgnVCcpCisgICAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgICBQc2lFbGVtZW50KEVYVEVORFNfQk9VTkRfTElTVCkKKyAgICAgICAgICBQc2lLZXl3b3JkOmV4dGVuZHMoJ2V4dGVuZHMnKQorICAgICAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgICAgIFBzaUphdmFDb2RlUmVmZXJlbmNlRWxlbWVudDpMaXN0PFN0cmluZz4KKyAgICAgICAgICAgIFBzaUlkZW50aWZpZXI6TGlzdCgnTGlzdCcpCisgICAgICAgICAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICAgICAgICAgIFBzaUphdmFUb2tlbjpMVCgnPCcpCisgICAgICAgICAgICAgIFBzaVR5cGVFbGVtZW50OlN0cmluZworICAgICAgICAgICAgICAgIFBzaUphdmFDb2RlUmVmZXJlbmNlRWxlbWVudDpTdHJpbmcKKyAgICAgICAgICAgICAgICAgIFBzaUlkZW50aWZpZXI6U3RyaW5nKCdTdHJpbmcnKQorICAgICAgICAgICAgICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICAgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgICAgICAgUHNpSmF2YVRva2VuOkdUKCc+JykKKyAgICAgIFBzaUphdmFUb2tlbjpHVCgnPicpCisgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgUHNpS2V5d29yZDpleHRlbmRzKCdleHRlbmRzJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSmF2YUNvZGVSZWZlcmVuY2VFbGVtZW50Okxpc3Q8TGlzdDxJbnRlZ2VyPj4KKyAgICAgICAgUHNpSWRlbnRpZmllcjpMaXN0KCdMaXN0JykKKyAgICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICAgIFBzaUphdmFUb2tlbjpMVCgnPCcpCisgICAgICAgICAgUHNpVHlwZUVsZW1lbnQ6TGlzdDxJbnRlZ2VyPgorICAgICAgICAgICAgUHNpSmF2YUNvZGVSZWZlcmVuY2VFbGVtZW50Okxpc3Q8SW50ZWdlcj4KKyAgICAgICAgICAgICAgUHNpSWRlbnRpZmllcjpMaXN0KCdMaXN0JykKKyAgICAgICAgICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICAgICAgICAgIFBzaUphdmFUb2tlbjpMVCgnPCcpCisgICAgICAgICAgICAgICAgUHNpVHlwZUVsZW1lbnQ6SW50ZWdlcgorICAgICAgICAgICAgICAgICAgUHNpSmF2YUNvZGVSZWZlcmVuY2VFbGVtZW50OkludGVnZXIKKyAgICAgICAgICAgICAgICAgICAgUHNpSWRlbnRpZmllcjpJbnRlZ2VyKCdJbnRlZ2VyJykKKyAgICAgICAgICAgICAgICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICAgICAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICAgICAgICAgIFBzaUphdmFUb2tlbjpHVCgnPicpCisgICAgICAgICAgUHNpSmF2YVRva2VuOkdUKCc+JykKKyAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgUHNpV2hpdGVTcGFjZSgnICcpCisgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvZGVjbGFyYXRpb25zL1NlbWljb2xvbnMudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9kZWNsYXJhdGlvbnMvU2VtaWNvbG9ucy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDMyN2MwMQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvZGVjbGFyYXRpb25zL1NlbWljb2xvbnMudHh0CkBAIC0wLDAgKzEsNDQgQEAKK1BzaUphdmFGaWxlOlNlbWljb2xvbnMuamF2YQorICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgUHNpV2hpdGVTcGFjZSgnICcpCisgIFBzaU1ldGhvZDpmCisgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgUHNpSWRlbnRpZmllcjpmKCdmJykKKyAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICBQc2lDb2RlQmxvY2sKKyAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgIFBzaUphdmFUb2tlbjpTRU1JQ09MT04oJzsnKQorICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgUHNpTWV0aG9kOmcKKyAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICBQc2lJZGVudGlmaWVyOmcoJ2cnKQorICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaUNvZGVCbG9jaworICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgUHNpSmF2YVRva2VuOlNFTUlDT0xPTignOycpCisgIFBzaVdoaXRlU3BhY2UoJyAnKQorICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvZGVjbGFyYXRpb25zL1R5cGVBbm5vLnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvZGVjbGFyYXRpb25zL1R5cGVBbm5vLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNDRjZWE3Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9kZWNsYXJhdGlvbnMvVHlwZUFubm8udHh0CkBAIC0wLDAgKzEsMzE3IEBACitQc2lKYXZhRmlsZTpUeXBlQW5uby5qYXZhCisgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgUHNpQ2xhc3M6QworICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaUtleXdvcmQ6Y2xhc3MoJ2NsYXNzJykKKyAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICBQc2lJZGVudGlmaWVyOkMoJ0MnKQorICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICBQc2lKYXZhVG9rZW46TFQoJzwnKQorICAgICAgUHNpVHlwZVBhcmFtZXRlcjpUCisgICAgICAgIFBzaUFubm90YXRpb24KKyAgICAgICAgICBQc2lKYXZhVG9rZW46QVQoJ0AnKQorICAgICAgICAgIFBzaUphdmFDb2RlUmVmZXJlbmNlRWxlbWVudDpECisgICAgICAgICAgICBQc2lJZGVudGlmaWVyOkQoJ0QnKQorICAgICAgICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgICBQc2lBbm5vdGF0aW9uUGFyYW1ldGVyTGlzdAorICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgICBQc2lJZGVudGlmaWVyOlQoJ1QnKQorICAgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgICAgUHNpRWxlbWVudChFWFRFTkRTX0JPVU5EX0xJU1QpCisgICAgICAgICAgUHNpS2V5d29yZDpleHRlbmRzKCdleHRlbmRzJykKKyAgICAgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgICAgICBQc2lKYXZhQ29kZVJlZmVyZW5jZUVsZW1lbnQ6QEYgT2JqZWN0CisgICAgICAgICAgICBQc2lBbm5vdGF0aW9uCisgICAgICAgICAgICAgIFBzaUphdmFUb2tlbjpBVCgnQCcpCisgICAgICAgICAgICAgIFBzaUphdmFDb2RlUmVmZXJlbmNlRWxlbWVudDpGCisgICAgICAgICAgICAgICAgUHNpSWRlbnRpZmllcjpGKCdGJykKKyAgICAgICAgICAgICAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICAgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgICAgICAgUHNpQW5ub3RhdGlvblBhcmFtZXRlckxpc3QKKyAgICAgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgICAgICAgUHNpSWRlbnRpZmllcjpPYmplY3QoJ09iamVjdCcpCisgICAgICAgICAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpSmF2YVRva2VuOkdUKCc+JykKKyAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICBQc2lLZXl3b3JkOmV4dGVuZHMoJ2V4dGVuZHMnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lKYXZhQ29kZVJlZmVyZW5jZUVsZW1lbnQ6QEYgT2JqZWN0CisgICAgICAgIFBzaUFubm90YXRpb24KKyAgICAgICAgICBQc2lKYXZhVG9rZW46QVQoJ0AnKQorICAgICAgICAgIFBzaUphdmFDb2RlUmVmZXJlbmNlRWxlbWVudDpGCisgICAgICAgICAgICBQc2lJZGVudGlmaWVyOkYoJ0YnKQorICAgICAgICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgICBQc2lBbm5vdGF0aW9uUGFyYW1ldGVyTGlzdAorICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgICBQc2lJZGVudGlmaWVyOk9iamVjdCgnT2JqZWN0JykKKyAgICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuICAnKQorICAgIFBzaU1ldGhvZDptZXRob2QKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDpARgorICAgICAgICBQc2lBbm5vdGF0aW9uCisgICAgICAgICAgUHNpSmF2YVRva2VuOkFUKCdAJykKKyAgICAgICAgICBQc2lKYXZhQ29kZVJlZmVyZW5jZUVsZW1lbnQ6RgorICAgICAgICAgICAgUHNpSWRlbnRpZmllcjpGKCdGJykKKyAgICAgICAgICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgICAgUHNpQW5ub3RhdGlvblBhcmFtZXRlckxpc3QKKyAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaVR5cGVFbGVtZW50OmludCBARltdCisgICAgICAgIFBzaVR5cGVFbGVtZW50OmludAorICAgICAgICAgIFBzaUtleXdvcmQ6aW50KCdpbnQnKQorICAgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgICAgUHNpQW5ub3RhdGlvbgorICAgICAgICAgIFBzaUphdmFUb2tlbjpBVCgnQCcpCisgICAgICAgICAgUHNpSmF2YUNvZGVSZWZlcmVuY2VFbGVtZW50OkYKKyAgICAgICAgICAgIFBzaUlkZW50aWZpZXI6RignRicpCisgICAgICAgICAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICAgIFBzaUFubm90YXRpb25QYXJhbWV0ZXJMaXN0CisgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDS0VUKCdbJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDS0VUKCddJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjptZXRob2QoJ21ldGhvZCcpCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgICAgUHNpS2V5d29yZDp0aHJvd3MoJ3Rocm93cycpCisgICAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgICBQc2lKYXZhQ29kZVJlZmVyZW5jZUVsZW1lbnQ6QEYgRXhjZXB0aW9uCisgICAgICAgICAgUHNpQW5ub3RhdGlvbgorICAgICAgICAgICAgUHNpSmF2YVRva2VuOkFUKCdAJykKKyAgICAgICAgICAgIFBzaUphdmFDb2RlUmVmZXJlbmNlRWxlbWVudDpGCisgICAgICAgICAgICAgIFBzaUlkZW50aWZpZXI6RignRicpCisgICAgICAgICAgICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgICAgIFBzaUFubm90YXRpb25QYXJhbWV0ZXJMaXN0CisgICAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgICAgIFBzaUlkZW50aWZpZXI6RXhjZXB0aW9uKCdFeGNlcHRpb24nKQorICAgICAgICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICAgICcpCisgICAgICAgIFBzaUV4cHJlc3Npb25TdGF0ZW1lbnQKKyAgICAgICAgICBQc2lBc3NpZ25tZW50RXhwcmVzc2lvbjphID0gdGhpcyBpbnN0YW5jZW9mIEBGIEMKKyAgICAgICAgICAgIFBzaVJlZmVyZW5jZUV4cHJlc3Npb246YQorICAgICAgICAgICAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgICAgICAgIFBzaUlkZW50aWZpZXI6YSgnYScpCisgICAgICAgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgICAgICAgIFBzaUphdmFUb2tlbjpFUSgnPScpCisgICAgICAgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgICAgICAgIFBzaUluc3RhbmNlb2ZFeHByZXNzaW9uOnRoaXMgaW5zdGFuY2VvZiBARiBDCisgICAgICAgICAgICAgIFBzaVRoaXNFeHByZXNzaW9uOnRoaXMKKyAgICAgICAgICAgICAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICAgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgICAgICAgICBQc2lLZXl3b3JkOnRoaXMoJ3RoaXMnKQorICAgICAgICAgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgICAgICAgICAgUHNpS2V5d29yZDppbnN0YW5jZW9mKCdpbnN0YW5jZW9mJykKKyAgICAgICAgICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICAgICAgICAgIFBzaVR5cGVFbGVtZW50OkBGIEMKKyAgICAgICAgICAgICAgICBQc2lBbm5vdGF0aW9uCisgICAgICAgICAgICAgICAgICBQc2lKYXZhVG9rZW46QVQoJ0AnKQorICAgICAgICAgICAgICAgICAgUHNpSmF2YUNvZGVSZWZlcmVuY2VFbGVtZW50OkYKKyAgICAgICAgICAgICAgICAgICAgUHNpSWRlbnRpZmllcjpGKCdGJykKKyAgICAgICAgICAgICAgICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICAgICAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICAgICAgICAgICAgUHNpQW5ub3RhdGlvblBhcmFtZXRlckxpc3QKKyAgICAgICAgICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgICAgICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICAgICAgICAgICAgUHNpSmF2YUNvZGVSZWZlcmVuY2VFbGVtZW50OkMKKyAgICAgICAgICAgICAgICAgIFBzaUlkZW50aWZpZXI6QygnQycpCisgICAgICAgICAgICAgICAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICAgICAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICAgIFBzaUphdmFUb2tlbjpTRU1JQ09MT04oJzsnKQorICAgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAgICAnKQorICAgICAgICBQc2lEZWNsYXJhdGlvblN0YXRlbWVudAorICAgICAgICAgIFBzaUxvY2FsVmFyaWFibGU6YworICAgICAgICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgICAgIFBzaVR5cGVFbGVtZW50OkM8QEYgQEcgQz4KKyAgICAgICAgICAgICAgUHNpSmF2YUNvZGVSZWZlcmVuY2VFbGVtZW50OkM8QEYgQEcgQz4KKyAgICAgICAgICAgICAgICBQc2lJZGVudGlmaWVyOkMoJ0MnKQorICAgICAgICAgICAgICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgICAgICAgICAgICAgIFBzaUphdmFUb2tlbjpMVCgnPCcpCisgICAgICAgICAgICAgICAgICBQc2lUeXBlRWxlbWVudDpARiBARyBDCisgICAgICAgICAgICAgICAgICAgIFBzaUFubm90YXRpb24KKyAgICAgICAgICAgICAgICAgICAgICBQc2lKYXZhVG9rZW46QVQoJ0AnKQorICAgICAgICAgICAgICAgICAgICAgIFBzaUphdmFDb2RlUmVmZXJlbmNlRWxlbWVudDpGCisgICAgICAgICAgICAgICAgICAgICAgICBQc2lJZGVudGlmaWVyOkYoJ0YnKQorICAgICAgICAgICAgICAgICAgICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgICBQc2lBbm5vdGF0aW9uUGFyYW1ldGVyTGlzdAorICAgICAgICAgICAgICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgICAgICAgICAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgICAgICAgICAgICAgICBQc2lBbm5vdGF0aW9uCisgICAgICAgICAgICAgICAgICAgICAgUHNpSmF2YVRva2VuOkFUKCdAJykKKyAgICAgICAgICAgICAgICAgICAgICBQc2lKYXZhQ29kZVJlZmVyZW5jZUVsZW1lbnQ6RworICAgICAgICAgICAgICAgICAgICAgICAgUHNpSWRlbnRpZmllcjpHKCdHJykKKyAgICAgICAgICAgICAgICAgICAgICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgICAgICAgICAgICAgICAgUHNpQW5ub3RhdGlvblBhcmFtZXRlckxpc3QKKyAgICAgICAgICAgICAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICAgICAgICAgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgICAgICAgICAgICAgICAgUHNpSmF2YUNvZGVSZWZlcmVuY2VFbGVtZW50OkMKKyAgICAgICAgICAgICAgICAgICAgICBQc2lJZGVudGlmaWVyOkMoJ0MnKQorICAgICAgICAgICAgICAgICAgICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgICAgICAgICAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICAgICAgICAgICAgUHNpSmF2YVRva2VuOkdUKCc+JykKKyAgICAgICAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgICAgICAgUHNpSWRlbnRpZmllcjpjKCdjJykKKyAgICAgICAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgICAgICAgUHNpSmF2YVRva2VuOkVRKCc9JykKKyAgICAgICAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgICAgICAgUHNpTmV3RXhwcmVzc2lvbjpuZXcgQFEgQzxARiBDPigpCisgICAgICAgICAgICAgIFBzaUtleXdvcmQ6bmV3KCduZXcnKQorICAgICAgICAgICAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgICAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgICAgICAgICBQc2lKYXZhQ29kZVJlZmVyZW5jZUVsZW1lbnQ6QFEgQzxARiBDPgorICAgICAgICAgICAgICAgIFBzaUFubm90YXRpb24KKyAgICAgICAgICAgICAgICAgIFBzaUphdmFUb2tlbjpBVCgnQCcpCisgICAgICAgICAgICAgICAgICBQc2lKYXZhQ29kZVJlZmVyZW5jZUVsZW1lbnQ6UQorICAgICAgICAgICAgICAgICAgICBQc2lJZGVudGlmaWVyOlEoJ1EnKQorICAgICAgICAgICAgICAgICAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICAgICAgICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgICAgICAgICAgICBQc2lBbm5vdGF0aW9uUGFyYW1ldGVyTGlzdAorICAgICAgICAgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgICAgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgICAgICAgICAgICBQc2lJZGVudGlmaWVyOkMoJ0MnKQorICAgICAgICAgICAgICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgICAgICAgICAgICAgIFBzaUphdmFUb2tlbjpMVCgnPCcpCisgICAgICAgICAgICAgICAgICBQc2lUeXBlRWxlbWVudDpARiBDCisgICAgICAgICAgICAgICAgICAgIFBzaUFubm90YXRpb24KKyAgICAgICAgICAgICAgICAgICAgICBQc2lKYXZhVG9rZW46QVQoJ0AnKQorICAgICAgICAgICAgICAgICAgICAgIFBzaUphdmFDb2RlUmVmZXJlbmNlRWxlbWVudDpGCisgICAgICAgICAgICAgICAgICAgICAgICBQc2lJZGVudGlmaWVyOkYoJ0YnKQorICAgICAgICAgICAgICAgICAgICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgICBQc2lBbm5vdGF0aW9uUGFyYW1ldGVyTGlzdAorICAgICAgICAgICAgICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgICAgICAgICAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgICAgICAgICAgICAgICBQc2lKYXZhQ29kZVJlZmVyZW5jZUVsZW1lbnQ6QworICAgICAgICAgICAgICAgICAgICAgIFBzaUlkZW50aWZpZXI6QygnQycpCisgICAgICAgICAgICAgICAgICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICAgICAgICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgICAgICAgICAgICBQc2lKYXZhVG9rZW46R1QoJz4nKQorICAgICAgICAgICAgICBQc2lFeHByZXNzaW9uTGlzdAorICAgICAgICAgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgICAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgICAgICAgIFBzaUphdmFUb2tlbjpTRU1JQ09MT04oJzsnKQorICAgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAgICAnKQorICAgICAgICBQc2lFeHByZXNzaW9uU3RhdGVtZW50CisgICAgICAgICAgUHNpQXNzaWdubWVudEV4cHJlc3Npb246YyA9IChARiBPYmplY3QpYworICAgICAgICAgICAgUHNpUmVmZXJlbmNlRXhwcmVzc2lvbjpjCisgICAgICAgICAgICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgICAgICAgUHNpSWRlbnRpZmllcjpjKCdjJykKKyAgICAgICAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgICAgICAgUHNpSmF2YVRva2VuOkVRKCc9JykKKyAgICAgICAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgICAgICAgUHNpVHlwZUNhc3RFeHByZXNzaW9uOihARiBPYmplY3QpYworICAgICAgICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICAgICAgICBQc2lUeXBlRWxlbWVudDpARiBPYmplY3QKKyAgICAgICAgICAgICAgICBQc2lBbm5vdGF0aW9uCisgICAgICAgICAgICAgICAgICBQc2lKYXZhVG9rZW46QVQoJ0AnKQorICAgICAgICAgICAgICAgICAgUHNpSmF2YUNvZGVSZWZlcmVuY2VFbGVtZW50OkYKKyAgICAgICAgICAgICAgICAgICAgUHNpSWRlbnRpZmllcjpGKCdGJykKKyAgICAgICAgICAgICAgICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICAgICAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICAgICAgICAgICAgUHNpQW5ub3RhdGlvblBhcmFtZXRlckxpc3QKKyAgICAgICAgICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgICAgICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICAgICAgICAgICAgUHNpSmF2YUNvZGVSZWZlcmVuY2VFbGVtZW50Ok9iamVjdAorICAgICAgICAgICAgICAgICAgUHNpSWRlbnRpZmllcjpPYmplY3QoJ09iamVjdCcpCisgICAgICAgICAgICAgICAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICAgICAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgICAgICAgICBQc2lSZWZlcmVuY2VFeHByZXNzaW9uOmMKKyAgICAgICAgICAgICAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICAgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgICAgICAgICBQc2lJZGVudGlmaWVyOmMoJ2MnKQorICAgICAgICAgIFBzaUphdmFUb2tlbjpTRU1JQ09MT04oJzsnKQorICAgICAgICBQc2lXaGl0ZVNwYWNlKCdcbiAgICAnKQorICAgICAgICBQc2lEZWNsYXJhdGlvblN0YXRlbWVudAorICAgICAgICAgIFBzaUxvY2FsVmFyaWFibGU6YworICAgICAgICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgICAgIFBzaVR5cGVFbGVtZW50OkNsYXNzCisgICAgICAgICAgICAgIFBzaUphdmFDb2RlUmVmZXJlbmNlRWxlbWVudDpDbGFzcworICAgICAgICAgICAgICAgIFBzaUlkZW50aWZpZXI6Q2xhc3MoJ0NsYXNzJykKKyAgICAgICAgICAgICAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICAgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgICAgICAgUHNpSWRlbnRpZmllcjpjKCdjJykKKyAgICAgICAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgICAgICAgUHNpSmF2YVRva2VuOkVRKCc9JykKKyAgICAgICAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgICAgICAgUHNpQ2xhc3NPYmplY3RBY2Nlc3NFeHByZXNzaW9uOkBUQSBTdHJpbmcuY2xhc3MKKyAgICAgICAgICAgICAgUHNpVHlwZUVsZW1lbnQ6QFRBIFN0cmluZworICAgICAgICAgICAgICAgIFBzaUFubm90YXRpb24KKyAgICAgICAgICAgICAgICAgIFBzaUphdmFUb2tlbjpBVCgnQCcpCisgICAgICAgICAgICAgICAgICBQc2lKYXZhQ29kZVJlZmVyZW5jZUVsZW1lbnQ6VEEKKyAgICAgICAgICAgICAgICAgICAgUHNpSWRlbnRpZmllcjpUQSgnVEEnKQorICAgICAgICAgICAgICAgICAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICAgICAgICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgICAgICAgICAgICBQc2lBbm5vdGF0aW9uUGFyYW1ldGVyTGlzdAorICAgICAgICAgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgICAgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgICAgICAgICAgICBQc2lKYXZhQ29kZVJlZmVyZW5jZUVsZW1lbnQ6U3RyaW5nCisgICAgICAgICAgICAgICAgICBQc2lJZGVudGlmaWVyOlN0cmluZygnU3RyaW5nJykKKyAgICAgICAgICAgICAgICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgICAgICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgICAgICAgIFBzaUphdmFUb2tlbjpET1QoJy4nKQorICAgICAgICAgICAgICBQc2lLZXl3b3JkOmNsYXNzKCdjbGFzcycpCisgICAgICAgICAgICBQc2lKYXZhVG9rZW46U0VNSUNPTE9OKCc7JykKKyAgICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gICAgJykKKyAgICAgICAgUHNpRXhwcmVzc2lvblN0YXRlbWVudAorICAgICAgICAgIFBzaVBvc3RmaXhFeHByZXNzaW9uOkBGIEMuZmllbGQrKworICAgICAgICAgICAgUHNpUmVmZXJlbmNlRXhwcmVzc2lvbjpARiBDLmZpZWxkCisgICAgICAgICAgICAgIFBzaVJlZmVyZW5jZUV4cHJlc3Npb246QEYgQworICAgICAgICAgICAgICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgICAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICAgICAgICAgIFBzaUFubm90YXRpb24KKyAgICAgICAgICAgICAgICAgIFBzaUphdmFUb2tlbjpBVCgnQCcpCisgICAgICAgICAgICAgICAgICBQc2lKYXZhQ29kZVJlZmVyZW5jZUVsZW1lbnQ6RgorICAgICAgICAgICAgICAgICAgICBQc2lJZGVudGlmaWVyOkYoJ0YnKQorICAgICAgICAgICAgICAgICAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICAgICAgICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgICAgICAgICAgICBQc2lBbm5vdGF0aW9uUGFyYW1ldGVyTGlzdAorICAgICAgICAgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgICAgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgICAgICAgICAgICBQc2lJZGVudGlmaWVyOkMoJ0MnKQorICAgICAgICAgICAgICBQc2lKYXZhVG9rZW46RE9UKCcuJykKKyAgICAgICAgICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICAgICAgICBQc2lJZGVudGlmaWVyOmZpZWxkKCdmaWVsZCcpCisgICAgICAgICAgICBQc2lKYXZhVG9rZW46UExVU1BMVVMoJysrJykKKyAgICAgICAgICBQc2lKYXZhVG9rZW46U0VNSUNPTE9OKCc7JykKKyAgICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gICcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuJykKKyAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgUHNpV2hpdGVTcGFjZSgnICcpCisgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvZGVjbGFyYXRpb25zL1VuY2xvc2VkMC50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL2RlY2xhcmF0aW9ucy9VbmNsb3NlZDAudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkzNTNmMDUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL2RlY2xhcmF0aW9ucy9VbmNsb3NlZDAudHh0CkBAIC0wLDAgKzEsMjEgQEAKK1BzaUphdmFGaWxlOlVuY2xvc2VkMC5qYXZhCisgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgUHNpTWV0aG9kOmYKKyAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpVHlwZUVsZW1lbnQ6dm9pZAorICAgICAgUHNpS2V5d29yZDp2b2lkKCd2b2lkJykKKyAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICBQc2lJZGVudGlmaWVyOmYoJ2YnKQorICAgIFBzaVBhcmFtZXRlckxpc3Q6KCkKKyAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaUVycm9yRWxlbWVudDoneycgb3IgJzsnIGV4cGVjdGVkCisgICAgICA8ZW1wdHkgbGlzdD4KKyAgUHNpV2hpdGVTcGFjZSgnICcpCisgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9kZWNsYXJhdGlvbnMvVW5jbG9zZWQxLnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvZGVjbGFyYXRpb25zL1VuY2xvc2VkMS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzdiNDE1OQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvZGVjbGFyYXRpb25zL1VuY2xvc2VkMS50eHQKQEAgLTAsMCArMSwyMiBAQAorUHNpSmF2YUZpbGU6VW5jbG9zZWQxLmphdmEKKyAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgIFBzaVdoaXRlU3BhY2UoJyAnKQorICBQc2lNZXRob2Q6ZgorICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaUlkZW50aWZpZXI6ZignZicpCisgICAgUHNpUGFyYW1ldGVyTGlzdDooCisgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgUHNpRXJyb3JFbGVtZW50OicpJyBleHBlY3RlZAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lFcnJvckVsZW1lbnQ6J3snIG9yICc7JyBleHBlY3RlZAorICAgICAgPGVtcHR5IGxpc3Q+CisgIFBzaVdoaXRlU3BhY2UoJyAnKQorICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL2RlY2xhcmF0aW9ucy9VbmNsb3NlZDIudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9kZWNsYXJhdGlvbnMvVW5jbG9zZWQyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMmEwZGZlCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9kZWNsYXJhdGlvbnMvVW5jbG9zZWQyLnR4dApAQCAtMCwwICsxLDM3IEBACitQc2lKYXZhRmlsZTpVbmNsb3NlZDIuamF2YQorICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgUHNpV2hpdGVTcGFjZSgnICcpCisgIFBzaU1ldGhvZDpmCisgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgUHNpSWRlbnRpZmllcjpmKCdmJykKKyAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lFcnJvckVsZW1lbnQ6J3snIG9yICc7JyBleHBlY3RlZAorICAgICAgPGVtcHR5IGxpc3Q+CisgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgIFBzaU1ldGhvZDpnCisgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgUHNpSWRlbnRpZmllcjpnKCdnJykKKyAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lKYXZhVG9rZW46U0VNSUNPTE9OKCc7JykKKyAgUHNpV2hpdGVTcGFjZSgnICcpCisgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9kZWNsYXJhdGlvbnMvVW5jbG9zZWQzLnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvZGVjbGFyYXRpb25zL1VuY2xvc2VkMy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODJjYWExYwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvZGVjbGFyYXRpb25zL1VuY2xvc2VkMy50eHQKQEAgLTAsMCArMSwyOSBAQAorUHNpSmF2YUZpbGU6VW5jbG9zZWQzLmphdmEKKyAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgIFBzaVdoaXRlU3BhY2UoJyAnKQorICBQc2lNZXRob2Q6ZgorICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaUlkZW50aWZpZXI6ZignZicpCisgICAgUHNpUGFyYW1ldGVyTGlzdDooaW50IGEKKyAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICBQc2lQYXJhbWV0ZXI6YQorICAgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgIFBzaVR5cGVFbGVtZW50OmludAorICAgICAgICAgIFBzaUtleXdvcmQ6aW50KCdpbnQnKQorICAgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgICAgUHNpSWRlbnRpZmllcjphKCdhJykKKyAgICAgIFBzaUVycm9yRWxlbWVudDonKScgZXhwZWN0ZWQKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpRXJyb3JFbGVtZW50Oid7JyBvciAnOycgZXhwZWN0ZWQKKyAgICAgIDxlbXB0eSBsaXN0PgorICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9kZWNsYXJhdGlvbnMvVW5jbG9zZWQ0LnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvZGVjbGFyYXRpb25zL1VuY2xvc2VkNC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDdmZmVlYQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvZGVjbGFyYXRpb25zL1VuY2xvc2VkNC50eHQKQEAgLTAsMCArMSwzMyBAQAorUHNpSmF2YUZpbGU6VW5jbG9zZWQ0LmphdmEKKyAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgIFBzaVdoaXRlU3BhY2UoJyAnKQorICBQc2lNZXRob2Q6ZgorICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaUlkZW50aWZpZXI6ZignZicpCisgICAgUHNpUGFyYW1ldGVyTGlzdDooaW50IGEsLAorICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgIFBzaVBhcmFtZXRlcjphCisgICAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgUHNpVHlwZUVsZW1lbnQ6aW50CisgICAgICAgICAgUHNpS2V5d29yZDppbnQoJ2ludCcpCisgICAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgICBQc2lJZGVudGlmaWVyOmEoJ2EnKQorICAgICAgUHNpSmF2YVRva2VuOkNPTU1BKCcsJykKKyAgICAgIFBzaUVycm9yRWxlbWVudDpQYXJhbWV0ZXIgZXhwZWN0ZWQKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lKYXZhVG9rZW46Q09NTUEoJywnKQorICAgICAgUHNpRXJyb3JFbGVtZW50OklkZW50aWZpZXIgb3IgdHlwZSBleHBlY3RlZAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lFcnJvckVsZW1lbnQ6J3snIG9yICc7JyBleHBlY3RlZAorICAgICAgPGVtcHR5IGxpc3Q+CisgIFBzaVdoaXRlU3BhY2UoJyAnKQorICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL2RlY2xhcmF0aW9ucy9VbmNsb3NlZDUudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9kZWNsYXJhdGlvbnMvVW5jbG9zZWQ1LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMDE2NmQ4Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9kZWNsYXJhdGlvbnMvVW5jbG9zZWQ1LnR4dApAQCAtMCwwICsxLDMwIEBACitQc2lKYXZhRmlsZTpVbmNsb3NlZDUuamF2YQorICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgUHNpV2hpdGVTcGFjZSgnICcpCisgIFBzaU1ldGhvZDpmCisgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgUHNpSWRlbnRpZmllcjpmKCdmJykKKyAgICBQc2lQYXJhbWV0ZXJMaXN0OihpbnQgYSwpCisgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgUHNpUGFyYW1ldGVyOmEKKyAgICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICBQc2lUeXBlRWxlbWVudDppbnQKKyAgICAgICAgICBQc2lLZXl3b3JkOmludCgnaW50JykKKyAgICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICAgIFBzaUlkZW50aWZpZXI6YSgnYScpCisgICAgICBQc2lKYXZhVG9rZW46Q09NTUEoJywnKQorICAgICAgUHNpRXJyb3JFbGVtZW50OklkZW50aWZpZXIgb3IgdHlwZSBleHBlY3RlZAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpSmF2YVRva2VuOlNFTUlDT0xPTignOycpCisgIFBzaVdoaXRlU3BhY2UoJyAnKQorICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvZGVjbGFyYXRpb25zL1VuY2xvc2VkNi50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL2RlY2xhcmF0aW9ucy9VbmNsb3NlZDYudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUxZTFiNjUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL2RlY2xhcmF0aW9ucy9VbmNsb3NlZDYudHh0CkBAIC0wLDAgKzEsMjUgQEAKK1BzaUphdmFGaWxlOlVuY2xvc2VkNi5qYXZhCisgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgUHNpQW5ub3RhdGlvbk1ldGhvZDpmCisgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgUHNpSWRlbnRpZmllcjpmKCdmJykKKyAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICBQc2lLZXl3b3JkOmRlZmF1bHQoJ2RlZmF1bHQnKQorICAgIFBzaUVycm9yRWxlbWVudDpWYWx1ZSBleHBlY3RlZAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgUHNpSmF2YVRva2VuOlNFTUlDT0xPTignOycpCisgIFBzaVdoaXRlU3BhY2UoJyAnKQorICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvZGVjbGFyYXRpb25zL1VuY2xvc2VkNy50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL2RlY2xhcmF0aW9ucy9VbmNsb3NlZDcudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEyOGMwNzEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL2RlY2xhcmF0aW9ucy9VbmNsb3NlZDcudHh0CkBAIC0wLDAgKzEsMzcgQEAKK1BzaUphdmFGaWxlOlVuY2xvc2VkNy5qYXZhCisgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgUHNpQW5ub3RhdGlvbk1ldGhvZDpmCisgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgUHNpSWRlbnRpZmllcjpmKCdmJykKKyAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICBQc2lLZXl3b3JkOmRlZmF1bHQoJ2RlZmF1bHQnKQorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaUFycmF5SW5pdGlhbGl6ZXJNZW1iZXJWYWx1ZTp7CisgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgIFBzaUVycm9yRWxlbWVudDpWYWx1ZSBleHBlY3RlZAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUVycm9yRWxlbWVudDonfScgZXhwZWN0ZWQKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpRXJyb3JFbGVtZW50Oid7JyBvciAnOycgZXhwZWN0ZWQKKyAgICAgIDxlbXB0eSBsaXN0PgorICBQc2lFcnJvckVsZW1lbnQ6VW5leHBlY3RlZCB0b2tlbgorICAgIFBzaUtleXdvcmQ6cmV0dXJuKCdyZXR1cm4nKQorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaUphdmFUb2tlbjpJTlRFR0VSX0xJVEVSQUwoJzQyJykKKyAgUHNpSmF2YVRva2VuOlNFTUlDT0xPTignOycpCisgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgUHNpRXJyb3JFbGVtZW50OlVucGFyc2VkIHRva2VucworICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9kZWNsYXJhdGlvbnMvVW5jbG9zZWQ4LnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvZGVjbGFyYXRpb25zL1VuY2xvc2VkOC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTUwNWI4MwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvZGVjbGFyYXRpb25zL1VuY2xvc2VkOC50eHQKQEAgLTAsMCArMSwyMyBAQAorUHNpSmF2YUZpbGU6VW5jbG9zZWQ4LmphdmEKKyAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgIFBzaVdoaXRlU3BhY2UoJyAnKQorICBQc2lNZXRob2Q6ZgorICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaUlkZW50aWZpZXI6ZignZicpCisgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgUHNpS2V5d29yZDpkZWZhdWx0KCdkZWZhdWx0JykKKyAgICBQc2lFcnJvckVsZW1lbnQ6J3snIG9yICc7JyBleHBlY3RlZAorICAgICAgPGVtcHR5IGxpc3Q+CisgIFBzaVdoaXRlU3BhY2UoJyAnKQorICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvZGVjbGFyYXRpb25zL1VuY2xvc2VkOS50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL2RlY2xhcmF0aW9ucy9VbmNsb3NlZDkudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUxZGY1OGY1Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9kZWNsYXJhdGlvbnMvVW5jbG9zZWQ5LnR4dApAQCAtMCwwICsxLDI1IEBACitQc2lKYXZhRmlsZTpVbmNsb3NlZDkuamF2YQorICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgUHNpV2hpdGVTcGFjZSgnICcpCisgIFBzaU1ldGhvZDpmCisgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVR5cGVFbGVtZW50OnZvaWQKKyAgICAgIFBzaUtleXdvcmQ6dm9pZCgndm9pZCcpCisgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgUHNpSWRlbnRpZmllcjpmKCdmJykKKyAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICBQc2lLZXl3b3JkOmRlZmF1bHQoJ2RlZmF1bHQnKQorICAgIFBzaUVycm9yRWxlbWVudDoneycgZXhwZWN0ZWQKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaUphdmFUb2tlbjpTRU1JQ09MT04oJzsnKQorICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL2RlY2xhcmF0aW9ucy9VbmNsb3NlZEJyYWNrZXQudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9kZWNsYXJhdGlvbnMvVW5jbG9zZWRCcmFja2V0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMTcxMTljCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9kZWNsYXJhdGlvbnMvVW5jbG9zZWRCcmFja2V0LnR4dApAQCAtMCwwICsxLDE1IEBACitQc2lKYXZhRmlsZTpVbmNsb3NlZEJyYWNrZXQuamF2YQorICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgUHNpV2hpdGVTcGFjZSgnICcpCisgIFBzaUZpZWxkOmZpZWxkCisgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpVHlwZUVsZW1lbnQ6aW50CisgICAgICBQc2lLZXl3b3JkOmludCgnaW50JykKKyAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICBQc2lJZGVudGlmaWVyOmZpZWxkKCdmaWVsZCcpCisgICAgUHNpSmF2YVRva2VuOkxCUkFDS0VUKCdbJykKKyAgICBQc2lFcnJvckVsZW1lbnQ6J10nIGV4cGVjdGVkCisgICAgICA8ZW1wdHkgbGlzdD4KKyAgUHNpV2hpdGVTcGFjZSgnICcpCisgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9kZWNsYXJhdGlvbnMvVW5jbG9zZWRDb21tYS50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL2RlY2xhcmF0aW9ucy9VbmNsb3NlZENvbW1hLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44M2Y5ZTMyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9kZWNsYXJhdGlvbnMvVW5jbG9zZWRDb21tYS50eHQKQEAgLTAsMCArMSwxNSBAQAorUHNpSmF2YUZpbGU6VW5jbG9zZWRDb21tYS5qYXZhCisgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgUHNpRmllbGQ6ZmllbGQKKyAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lUeXBlRWxlbWVudDppbnQKKyAgICAgIFBzaUtleXdvcmQ6aW50KCdpbnQnKQorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaUlkZW50aWZpZXI6ZmllbGQoJ2ZpZWxkJykKKyAgUHNpSmF2YVRva2VuOkNPTU1BKCcsJykKKyAgUHNpRXJyb3JFbGVtZW50OklkZW50aWZpZXIgZXhwZWN0ZWQKKyAgICA8ZW1wdHkgbGlzdD4KKyAgUHNpV2hpdGVTcGFjZSgnICcpCisgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvZGVjbGFyYXRpb25zL1VuY2xvc2VkU2VtaWNvbG9uLnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvZGVjbGFyYXRpb25zL1VuY2xvc2VkU2VtaWNvbG9uLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMTg1ZTk4Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9kZWNsYXJhdGlvbnMvVW5jbG9zZWRTZW1pY29sb24udHh0CkBAIC0wLDAgKzEsMTQgQEAKK1BzaUphdmFGaWxlOlVuY2xvc2VkU2VtaWNvbG9uLmphdmEKKyAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgIFBzaVdoaXRlU3BhY2UoJyAnKQorICBQc2lGaWVsZDpmaWVsZAorICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVR5cGVFbGVtZW50OmludAorICAgICAgUHNpS2V5d29yZDppbnQoJ2ludCcpCisgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgUHNpSWRlbnRpZmllcjpmaWVsZCgnZmllbGQnKQorICAgIFBzaUVycm9yRWxlbWVudDonOycgZXhwZWN0ZWQKKyAgICAgIDxlbXB0eSBsaXN0PgorICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL2RlY2xhcmF0aW9ucy9WYXJBcmdCcmFja2V0cy50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL2RlY2xhcmF0aW9ucy9WYXJBcmdCcmFja2V0cy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGExMTc2NwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvZGVjbGFyYXRpb25zL1ZhckFyZ0JyYWNrZXRzLnR4dApAQCAtMCwwICsxLDMyIEBACitQc2lKYXZhRmlsZTpWYXJBcmdCcmFja2V0cy5qYXZhCisgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgUHNpTWV0aG9kOmZvbworICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lUeXBlRWxlbWVudDp2b2lkCisgICAgICBQc2lLZXl3b3JkOnZvaWQoJ3ZvaWQnKQorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgIFBzaVBhcmFtZXRlckxpc3Q6KGludC4uLiB4W10pCisgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgUHNpUGFyYW1ldGVyOngKKyAgICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICBQc2lUeXBlRWxlbWVudDppbnQuLi4KKyAgICAgICAgICBQc2lUeXBlRWxlbWVudDppbnQKKyAgICAgICAgICAgIFBzaUtleXdvcmQ6aW50KCdpbnQnKQorICAgICAgICAgIFBzaUphdmFUb2tlbjpFTExJUFNJUygnLi4uJykKKyAgICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICAgIFBzaUlkZW50aWZpZXI6eCgneCcpCisgICAgICAgIFBzaUVycm9yRWxlbWVudDonKScgZXhwZWN0ZWQKKyAgICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNLRVQoJ1snKQorICAgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0tFVCgnXScpCisgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaUphdmFUb2tlbjpTRU1JQ09MT04oJzsnKQorICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9kZWNsYXJhdGlvbnMvV2lsZGNhcmRQYXJzaW5nLnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvZGVjbGFyYXRpb25zL1dpbGRjYXJkUGFyc2luZy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjQzMzg5NgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvZGVjbGFyYXRpb25zL1dpbGRjYXJkUGFyc2luZy50eHQKQEAgLTAsMCArMSw1NSBAQAorUHNpSmF2YUZpbGU6V2lsZGNhcmRQYXJzaW5nLmphdmEKKyAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgIFBzaVdoaXRlU3BhY2UoJyAnKQorICBQc2lNZXRob2Q6eAorICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lUeXBlRWxlbWVudDpMaXN0PD8gZXh0ZW5kcyBCPgorICAgICAgUHNpSmF2YUNvZGVSZWZlcmVuY2VFbGVtZW50Okxpc3Q8PyBleHRlbmRzIEI+CisgICAgICAgIFBzaUlkZW50aWZpZXI6TGlzdCgnTGlzdCcpCisgICAgICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgICAgICBQc2lKYXZhVG9rZW46TFQoJzwnKQorICAgICAgICAgIFBzaVR5cGVFbGVtZW50Oj8gZXh0ZW5kcyBCCisgICAgICAgICAgICBQc2lKYXZhVG9rZW46UVVFU1QoJz8nKQorICAgICAgICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICAgICAgICBQc2lLZXl3b3JkOmV4dGVuZHMoJ2V4dGVuZHMnKQorICAgICAgICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICAgICAgICBQc2lUeXBlRWxlbWVudDpCCisgICAgICAgICAgICAgIFBzaUphdmFDb2RlUmVmZXJlbmNlRWxlbWVudDpCCisgICAgICAgICAgICAgICAgUHNpSWRlbnRpZmllcjpCKCdCJykKKyAgICAgICAgICAgICAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICAgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgICBQc2lKYXZhVG9rZW46R1QoJz4nKQorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaUlkZW50aWZpZXI6eCgneCcpCisgICAgUHNpUGFyYW1ldGVyTGlzdDooQ29sbGVjdGlvbjw/IHN1cGVyIEI+IHgpCisgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgUHNpUGFyYW1ldGVyOngKKyAgICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICBQc2lUeXBlRWxlbWVudDpDb2xsZWN0aW9uPD8gc3VwZXIgQj4KKyAgICAgICAgICBQc2lKYXZhQ29kZVJlZmVyZW5jZUVsZW1lbnQ6Q29sbGVjdGlvbjw/IHN1cGVyIEI+CisgICAgICAgICAgICBQc2lJZGVudGlmaWVyOkNvbGxlY3Rpb24oJ0NvbGxlY3Rpb24nKQorICAgICAgICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICAgICAgICBQc2lKYXZhVG9rZW46TFQoJzwnKQorICAgICAgICAgICAgICBQc2lUeXBlRWxlbWVudDo/IHN1cGVyIEIKKyAgICAgICAgICAgICAgICBQc2lKYXZhVG9rZW46UVVFU1QoJz8nKQorICAgICAgICAgICAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgICAgICAgICAgIFBzaUtleXdvcmQ6c3VwZXIoJ3N1cGVyJykKKyAgICAgICAgICAgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgICAgICAgICAgICBQc2lUeXBlRWxlbWVudDpCCisgICAgICAgICAgICAgICAgICBQc2lKYXZhQ29kZVJlZmVyZW5jZUVsZW1lbnQ6QgorICAgICAgICAgICAgICAgICAgICBQc2lJZGVudGlmaWVyOkIoJ0InKQorICAgICAgICAgICAgICAgICAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICAgICAgICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgICAgICAgIFBzaUphdmFUb2tlbjpHVCgnPicpCisgICAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgICBQc2lJZGVudGlmaWVyOngoJ3gnKQorICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lKYXZhVG9rZW46U0VNSUNPTE9OKCc7JykKKyAgUHNpV2hpdGVTcGFjZSgnICcpCisgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvZXhwcmVzc2lvbnMvQW1iaWd1b3VzTGFtYmRhRXhwcmVzc2lvbi50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL2V4cHJlc3Npb25zL0FtYmlndW91c0xhbWJkYUV4cHJlc3Npb24udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVkOWRlYzcKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL2V4cHJlc3Npb25zL0FtYmlndW91c0xhbWJkYUV4cHJlc3Npb24udHh0CkBAIC0wLDAgKzEsNTIgQEAKK1BzaUphdmFGaWxlOkFtYmlndW91c0xhbWJkYUV4cHJlc3Npb24uamF2YQorICBQc2lNZXRob2RDYWxsRXhwcmVzc2lvbjpmKCAoeCkgPCB5ICwgeiA+ICh3KSAtPiB2ICkKKyAgICBQc2lSZWZlcmVuY2VFeHByZXNzaW9uOmYKKyAgICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lJZGVudGlmaWVyOmYoJ2YnKQorICAgIFBzaUV4cHJlc3Npb25MaXN0CisgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lCaW5hcnlFeHByZXNzaW9uOih4KSA8IHkKKyAgICAgICAgUHNpUGFyZW50aGVzaXplZEV4cHJlc3Npb246KHgpCisgICAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgICBQc2lSZWZlcmVuY2VFeHByZXNzaW9uOngKKyAgICAgICAgICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgICAgICBQc2lJZGVudGlmaWVyOngoJ3gnKQorICAgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgICBQc2lKYXZhVG9rZW46TFQoJzwnKQorICAgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgICAgUHNpUmVmZXJlbmNlRXhwcmVzc2lvbjp5CisgICAgICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgICAgUHNpSWRlbnRpZmllcjp5KCd5JykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSmF2YVRva2VuOkNPTU1BKCcsJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpQmluYXJ5RXhwcmVzc2lvbjp6ID4gKHcpIC0+IHYKKyAgICAgICAgUHNpUmVmZXJlbmNlRXhwcmVzc2lvbjp6CisgICAgICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgICAgUHNpSWRlbnRpZmllcjp6KCd6JykKKyAgICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICAgIFBzaUphdmFUb2tlbjpHVCgnPicpCisgICAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgICBQc2lMYW1iZGFFeHByZXNzaW9uOih3KSAtPiB2CisgICAgICAgICAgUHNpUGFyYW1ldGVyTGlzdDoodykKKyAgICAgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgICAgICBQc2lQYXJhbWV0ZXI6dworICAgICAgICAgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgICAgICAgIFBzaUlkZW50aWZpZXI6dygndycpCisgICAgICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgICAgIFBzaUphdmFUb2tlbjpBUlJPVygnLT4nKQorICAgICAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgICAgIFBzaVJlZmVyZW5jZUV4cHJlc3Npb246dgorICAgICAgICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgICAgIFBzaUlkZW50aWZpZXI6digndicpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9leHByZXNzaW9ucy9BcnJheUluaXRpYWxpemVyMC50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL2V4cHJlc3Npb25zL0FycmF5SW5pdGlhbGl6ZXIwLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MDhkMGRhCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9leHByZXNzaW9ucy9BcnJheUluaXRpYWxpemVyMC50eHQKQEAgLTAsMCArMSw1IEBACitQc2lKYXZhRmlsZTpBcnJheUluaXRpYWxpemVyMC5qYXZhCisgIFBzaUFycmF5SW5pdGlhbGl6ZXJFeHByZXNzaW9uOnsgfQorICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9leHByZXNzaW9ucy9BcnJheUluaXRpYWxpemVyMS50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL2V4cHJlc3Npb25zL0FycmF5SW5pdGlhbGl6ZXIxLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yM2E3MTQzCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9leHByZXNzaW9ucy9BcnJheUluaXRpYWxpemVyMS50eHQKQEAgLTAsMCArMSw4IEBACitQc2lKYXZhRmlsZTpBcnJheUluaXRpYWxpemVyMS5qYXZhCisgIFBzaUFycmF5SW5pdGlhbGl6ZXJFeHByZXNzaW9uOnsgMSB9CisgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgUHNpTGl0ZXJhbEV4cHJlc3Npb246MQorICAgICAgUHNpSmF2YVRva2VuOklOVEVHRVJfTElURVJBTCgnMScpCisgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL2V4cHJlc3Npb25zL0FycmF5SW5pdGlhbGl6ZXIyLnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvZXhwcmVzc2lvbnMvQXJyYXlJbml0aWFsaXplcjIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM1YTQwYWQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL2V4cHJlc3Npb25zL0FycmF5SW5pdGlhbGl6ZXIyLnR4dApAQCAtMCwwICsxLDkgQEAKK1BzaUphdmFGaWxlOkFycmF5SW5pdGlhbGl6ZXIyLmphdmEKKyAgUHNpQXJyYXlJbml0aWFsaXplckV4cHJlc3Npb246eyAxLCB9CisgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgUHNpTGl0ZXJhbEV4cHJlc3Npb246MQorICAgICAgUHNpSmF2YVRva2VuOklOVEVHRVJfTElURVJBTCgnMScpCisgICAgUHNpSmF2YVRva2VuOkNPTU1BKCcsJykKKyAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvZXhwcmVzc2lvbnMvQXJyYXlJbml0aWFsaXplcjMudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9leHByZXNzaW9ucy9BcnJheUluaXRpYWxpemVyMy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzFhZjQ5ZAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvZXhwcmVzc2lvbnMvQXJyYXlJbml0aWFsaXplcjMudHh0CkBAIC0wLDAgKzEsMTEgQEAKK1BzaUphdmFGaWxlOkFycmF5SW5pdGlhbGl6ZXIzLmphdmEKKyAgUHNpQXJyYXlJbml0aWFsaXplckV4cHJlc3Npb246eyAxLDIgfQorICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaUxpdGVyYWxFeHByZXNzaW9uOjEKKyAgICAgIFBzaUphdmFUb2tlbjpJTlRFR0VSX0xJVEVSQUwoJzEnKQorICAgIFBzaUphdmFUb2tlbjpDT01NQSgnLCcpCisgICAgUHNpTGl0ZXJhbEV4cHJlc3Npb246MgorICAgICAgUHNpSmF2YVRva2VuOklOVEVHRVJfTElURVJBTCgnMicpCisgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL2V4cHJlc3Npb25zL0FycmF5SW5pdGlhbGl6ZXI0LnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvZXhwcmVzc2lvbnMvQXJyYXlJbml0aWFsaXplcjQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU4YjM0ZWIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL2V4cHJlc3Npb25zL0FycmF5SW5pdGlhbGl6ZXI0LnR4dApAQCAtMCwwICsxLDEzIEBACitQc2lKYXZhRmlsZTpBcnJheUluaXRpYWxpemVyNC5qYXZhCisgIFBzaUFycmF5SW5pdGlhbGl6ZXJFeHByZXNzaW9uOnsgMSAyIH0KKyAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICBQc2lMaXRlcmFsRXhwcmVzc2lvbjoxCisgICAgICBQc2lKYXZhVG9rZW46SU5URUdFUl9MSVRFUkFMKCcxJykKKyAgICBQc2lFcnJvckVsZW1lbnQ6JywnIGV4cGVjdGVkCisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICBQc2lMaXRlcmFsRXhwcmVzc2lvbjoyCisgICAgICBQc2lKYXZhVG9rZW46SU5URUdFUl9MSVRFUkFMKCcyJykKKyAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvZXhwcmVzc2lvbnMvQXJyYXlJbml0aWFsaXplcjUudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9leHByZXNzaW9ucy9BcnJheUluaXRpYWxpemVyNS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDYxM2VjYwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvZXhwcmVzc2lvbnMvQXJyYXlJbml0aWFsaXplcjUudHh0CkBAIC0wLDAgKzEsMTIgQEAKK1BzaUphdmFGaWxlOkFycmF5SW5pdGlhbGl6ZXI1LmphdmEKKyAgUHNpQXJyYXlJbml0aWFsaXplckV4cHJlc3Npb246eyB7IH0KKyAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICBQc2lBcnJheUluaXRpYWxpemVyRXhwcmVzc2lvbjp7IH0KKyAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lFcnJvckVsZW1lbnQ6JywnIGV4cGVjdGVkCisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lFcnJvckVsZW1lbnQ6J30nIGV4cGVjdGVkCisgICAgICA8ZW1wdHkgbGlzdD4KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvZXhwcmVzc2lvbnMvQXJyYXlJbml0aWFsaXplcjYudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9leHByZXNzaW9ucy9BcnJheUluaXRpYWxpemVyNi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmRiYTFhNgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvZXhwcmVzc2lvbnMvQXJyYXlJbml0aWFsaXplcjYudHh0CkBAIC0wLDAgKzEsNyBAQAorUHNpSmF2YUZpbGU6QXJyYXlJbml0aWFsaXplcjYuamF2YQorICBQc2lBcnJheUluaXRpYWxpemVyRXhwcmVzc2lvbjp7ICAsICB9CisgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgUHNpV2hpdGVTcGFjZSgnICAnKQorICAgIFBzaUphdmFUb2tlbjpDT01NQSgnLCcpCisgICAgUHNpV2hpdGVTcGFjZSgnICAnKQorICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9leHByZXNzaW9ucy9BcnJheUluaXRpYWxpemVyNy50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL2V4cHJlc3Npb25zL0FycmF5SW5pdGlhbGl6ZXI3LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMzMxMzJiCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9leHByZXNzaW9ucy9BcnJheUluaXRpYWxpemVyNy50eHQKQEAgLTAsMCArMSwxNiBAQAorUHNpSmF2YUZpbGU6QXJyYXlJbml0aWFsaXplcjcuamF2YQorICBQc2lBcnJheUluaXRpYWxpemVyRXhwcmVzc2lvbjp7ICAsICAsIDcgfQorICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgIFBzaUVycm9yRWxlbWVudDpFeHByZXNzaW9uIGV4cGVjdGVkCisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lXaGl0ZVNwYWNlKCcgICcpCisgICAgUHNpSmF2YVRva2VuOkNPTU1BKCcsJykKKyAgICBQc2lFcnJvckVsZW1lbnQ6RXhwcmVzc2lvbiBleHBlY3RlZAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpV2hpdGVTcGFjZSgnICAnKQorICAgIFBzaUphdmFUb2tlbjpDT01NQSgnLCcpCisgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgUHNpTGl0ZXJhbEV4cHJlc3Npb246NworICAgICAgUHNpSmF2YVRva2VuOklOVEVHRVJfTElURVJBTCgnNycpCisgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL2V4cHJlc3Npb25zL0Fzc2lnbm1lbnQwLnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvZXhwcmVzc2lvbnMvQXNzaWdubWVudDAudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkyYThlNzAKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL2V4cHJlc3Npb25zL0Fzc2lnbm1lbnQwLnR4dApAQCAtMCwwICsxLDExIEBACitQc2lKYXZhRmlsZTpBc3NpZ25tZW50MC5qYXZhCisgIFBzaUFzc2lnbm1lbnRFeHByZXNzaW9uOmEgPSAwCisgICAgUHNpUmVmZXJlbmNlRXhwcmVzc2lvbjphCisgICAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpSWRlbnRpZmllcjphKCdhJykKKyAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICBQc2lKYXZhVG9rZW46RVEoJz0nKQorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaUxpdGVyYWxFeHByZXNzaW9uOjAKKyAgICAgIFBzaUphdmFUb2tlbjpJTlRFR0VSX0xJVEVSQUwoJzAnKQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9leHByZXNzaW9ucy9Bc3NpZ25tZW50MS50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL2V4cHJlc3Npb25zL0Fzc2lnbm1lbnQxLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZTQwMDFlCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9leHByZXNzaW9ucy9Bc3NpZ25tZW50MS50eHQKQEAgLTAsMCArMSwxMCBAQAorUHNpSmF2YUZpbGU6QXNzaWdubWVudDEuamF2YQorICBQc2lBc3NpZ25tZW50RXhwcmVzc2lvbjphID0KKyAgICBQc2lSZWZlcmVuY2VFeHByZXNzaW9uOmEKKyAgICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lJZGVudGlmaWVyOmEoJ2EnKQorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaUphdmFUb2tlbjpFUSgnPScpCisgICAgUHNpRXJyb3JFbGVtZW50OkV4cHJlc3Npb24gZXhwZWN0ZWQKKyAgICAgIDxlbXB0eSBsaXN0PgpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9leHByZXNzaW9ucy9CaW5hcnkwLnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvZXhwcmVzc2lvbnMvQmluYXJ5MC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjg1ZjVlNgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvZXhwcmVzc2lvbnMvQmluYXJ5MC50eHQKQEAgLTAsMCArMSwxMyBAQAorUHNpSmF2YUZpbGU6QmluYXJ5MC5qYXZhCisgIFBzaUJpbmFyeUV4cHJlc3Npb246YSArIGIKKyAgICBQc2lSZWZlcmVuY2VFeHByZXNzaW9uOmEKKyAgICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lJZGVudGlmaWVyOmEoJ2EnKQorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaUphdmFUb2tlbjpQTFVTKCcrJykKKyAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICBQc2lSZWZlcmVuY2VFeHByZXNzaW9uOmIKKyAgICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lJZGVudGlmaWVyOmIoJ2InKQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9leHByZXNzaW9ucy9CaW5hcnkxLnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvZXhwcmVzc2lvbnMvQmluYXJ5MS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDFiZGNjYwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvZXhwcmVzc2lvbnMvQmluYXJ5MS50eHQKQEAgLTAsMCArMSwxMyBAQAorUHNpSmF2YUZpbGU6QmluYXJ5MS5qYXZhCisgIFBzaUJpbmFyeUV4cHJlc3Npb246YSA8IGIKKyAgICBQc2lSZWZlcmVuY2VFeHByZXNzaW9uOmEKKyAgICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lJZGVudGlmaWVyOmEoJ2EnKQorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaUphdmFUb2tlbjpMVCgnPCcpCisgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgUHNpUmVmZXJlbmNlRXhwcmVzc2lvbjpiCisgICAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpSWRlbnRpZmllcjpiKCdiJykKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvZXhwcmVzc2lvbnMvQmluYXJ5Mi50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL2V4cHJlc3Npb25zL0JpbmFyeTIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY5ZTYwMzgKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL2V4cHJlc3Npb25zL0JpbmFyeTIudHh0CkBAIC0wLDAgKzEsMTggQEAKK1BzaUphdmFGaWxlOkJpbmFyeTIuamF2YQorICBQc2lBc3NpZ25tZW50RXhwcmVzc2lvbjphID4gPSBiCisgICAgUHNpQmluYXJ5RXhwcmVzc2lvbjphID4KKyAgICAgIFBzaVJlZmVyZW5jZUV4cHJlc3Npb246YQorICAgICAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgIFBzaUlkZW50aWZpZXI6YSgnYScpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUphdmFUb2tlbjpHVCgnPicpCisgICAgICBQc2lFcnJvckVsZW1lbnQ6RXhwcmVzc2lvbiBleHBlY3RlZAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICBQc2lKYXZhVG9rZW46RVEoJz0nKQorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaVJlZmVyZW5jZUV4cHJlc3Npb246YgorICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUlkZW50aWZpZXI6YignYicpClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9leHByZXNzaW9ucy9CaW5hcnkzLnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvZXhwcmVzc2lvbnMvQmluYXJ5My50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWU1YTA3MQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvZXhwcmVzc2lvbnMvQmluYXJ5My50eHQKQEAgLTAsMCArMSwxOCBAQAorUHNpSmF2YUZpbGU6QmluYXJ5My5qYXZhCisgIFBzaUFzc2lnbm1lbnRFeHByZXNzaW9uOmEgPi8qKi89IGIKKyAgICBQc2lCaW5hcnlFeHByZXNzaW9uOmEgPgorICAgICAgUHNpUmVmZXJlbmNlRXhwcmVzc2lvbjphCisgICAgICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgUHNpSWRlbnRpZmllcjphKCdhJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSmF2YVRva2VuOkdUKCc+JykKKyAgICAgIFBzaUVycm9yRWxlbWVudDpFeHByZXNzaW9uIGV4cGVjdGVkCisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaUNvbW1lbnQoQ19TVFlMRV9DT01NRU5UKSgnLyoqLycpCisgICAgUHNpSmF2YVRva2VuOkVRKCc9JykKKyAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICBQc2lSZWZlcmVuY2VFeHByZXNzaW9uOmIKKyAgICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lJZGVudGlmaWVyOmIoJ2InKQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvZXhwcmVzc2lvbnMvQ2FzdC50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL2V4cHJlc3Npb25zL0Nhc3QudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhiY2JlNzkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL2V4cHJlc3Npb25zL0Nhc3QudHh0CkBAIC0wLDAgKzEsMTMgQEAKK1BzaUphdmFGaWxlOkNhc3QuamF2YQorICBQc2lUeXBlQ2FzdEV4cHJlc3Npb246KFR5cGUpdmFyCisgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICBQc2lUeXBlRWxlbWVudDpUeXBlCisgICAgICBQc2lKYXZhQ29kZVJlZmVyZW5jZUVsZW1lbnQ6VHlwZQorICAgICAgICBQc2lJZGVudGlmaWVyOlR5cGUoJ1R5cGUnKQorICAgICAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICBQc2lSZWZlcmVuY2VFeHByZXNzaW9uOnZhcgorICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUlkZW50aWZpZXI6dmFyKCd2YXInKQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9leHByZXNzaW9ucy9DaGFpbmVkQ2xhc3NPYmplY3RBY2Nlc3MudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9leHByZXNzaW9ucy9DaGFpbmVkQ2xhc3NPYmplY3RBY2Nlc3MudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNmYzdjMmYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL2V4cHJlc3Npb25zL0NoYWluZWRDbGFzc09iamVjdEFjY2Vzcy50eHQKQEAgLTAsMCArMSwxOSBAQAorUHNpSmF2YUZpbGU6Q2hhaW5lZENsYXNzT2JqZWN0QWNjZXNzLmphdmEKKyAgUHNpUmVmZXJlbmNlRXhwcmVzc2lvbjpBLmNsYXNzLkIKKyAgICBQc2lDbGFzc09iamVjdEFjY2Vzc0V4cHJlc3Npb246QS5jbGFzcworICAgICAgUHNpVHlwZUVsZW1lbnQ6QQorICAgICAgICBQc2lKYXZhQ29kZVJlZmVyZW5jZUVsZW1lbnQ6QQorICAgICAgICAgIFBzaUlkZW50aWZpZXI6QSgnQScpCisgICAgICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lKYXZhVG9rZW46RE9UKCcuJykKKyAgICAgIFBzaUtleXdvcmQ6Y2xhc3MoJ2NsYXNzJykKKyAgICBQc2lKYXZhVG9rZW46RE9UKCcuJykKKyAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lJZGVudGlmaWVyOkIoJ0InKQorICBQc2lKYXZhVG9rZW46RE9UKCcuJykKKyAgUHNpRXJyb3JFbGVtZW50OklkZW50aWZpZXIgZXhwZWN0ZWQKKyAgICA8ZW1wdHkgbGlzdD4KKyAgUHNpRXJyb3JFbGVtZW50OlVucGFyc2VkIHRva2VucworICAgIFBzaUtleXdvcmQ6Y2xhc3MoJ2NsYXNzJykKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL2V4cHJlc3Npb25zL0NoYWluZWRUaGlzT2JqZWN0QWNjZXNzLnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvZXhwcmVzc2lvbnMvQ2hhaW5lZFRoaXNPYmplY3RBY2Nlc3MudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJmNmI1NjAKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL2V4cHJlc3Npb25zL0NoYWluZWRUaGlzT2JqZWN0QWNjZXNzLnR4dApAQCAtMCwwICsxLDE2IEBACitQc2lKYXZhRmlsZTpDaGFpbmVkVGhpc09iamVjdEFjY2Vzcy5qYXZhCisgIFBzaVJlZmVyZW5jZUV4cHJlc3Npb246QS50aGlzLkIKKyAgICBQc2lUaGlzRXhwcmVzc2lvbjpBLnRoaXMKKyAgICAgIFBzaUphdmFDb2RlUmVmZXJlbmNlRWxlbWVudDpBCisgICAgICAgIFBzaUlkZW50aWZpZXI6QSgnQScpCisgICAgICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUphdmFUb2tlbjpET1QoJy4nKQorICAgICAgUHNpS2V5d29yZDp0aGlzKCd0aGlzJykKKyAgICBQc2lKYXZhVG9rZW46RE9UKCcuJykKKyAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lJZGVudGlmaWVyOkIoJ0InKQorICBQc2lFcnJvckVsZW1lbnQ6VW5wYXJzZWQgdG9rZW5zCisgICAgUHNpSmF2YVRva2VuOkRPVCgnLicpCisgICAgUHNpS2V5d29yZDp0aGlzKCd0aGlzJykKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL2V4cHJlc3Npb25zL0NvbmQwLnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvZXhwcmVzc2lvbnMvQ29uZDAudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI5MWFjMzEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL2V4cHJlc3Npb25zL0NvbmQwLnR4dApAQCAtMCwwICsxLDE2IEBACitQc2lKYXZhRmlsZTpDb25kMC5qYXZhCisgIFBzaUNvbmRpdGlvbmFsRXhwcmVzc2lvbjpjb25kID8gdHJ1ZSA6IGZhbHNlCisgICAgUHNpUmVmZXJlbmNlRXhwcmVzc2lvbjpjb25kCisgICAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpSWRlbnRpZmllcjpjb25kKCdjb25kJykKKyAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICBQc2lKYXZhVG9rZW46UVVFU1QoJz8nKQorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaUxpdGVyYWxFeHByZXNzaW9uOnRydWUKKyAgICAgIFBzaUphdmFUb2tlbjpUUlVFX0tFWVdPUkQoJ3RydWUnKQorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaUphdmFUb2tlbjpDT0xPTignOicpCisgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgUHNpTGl0ZXJhbEV4cHJlc3Npb246ZmFsc2UKKyAgICAgIFBzaUphdmFUb2tlbjpGQUxTRV9LRVlXT1JEKCdmYWxzZScpCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL2V4cHJlc3Npb25zL0NvbmQxLnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvZXhwcmVzc2lvbnMvQ29uZDEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU0NGRkY2UKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL2V4cHJlc3Npb25zL0NvbmQxLnR4dApAQCAtMCwwICsxLDEwIEBACitQc2lKYXZhRmlsZTpDb25kMS5qYXZhCisgIFBzaUNvbmRpdGlvbmFsRXhwcmVzc2lvbjpjb25kID8KKyAgICBQc2lSZWZlcmVuY2VFeHByZXNzaW9uOmNvbmQKKyAgICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lJZGVudGlmaWVyOmNvbmQoJ2NvbmQnKQorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaUphdmFUb2tlbjpRVUVTVCgnPycpCisgICAgUHNpRXJyb3JFbGVtZW50OkV4cHJlc3Npb24gZXhwZWN0ZWQKKyAgICAgIDxlbXB0eSBsaXN0PgpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9leHByZXNzaW9ucy9Db25kMi50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL2V4cHJlc3Npb25zL0NvbmQyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NWU3ZTY4Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9leHByZXNzaW9ucy9Db25kMi50eHQKQEAgLTAsMCArMSwxMyBAQAorUHNpSmF2YUZpbGU6Q29uZDIuamF2YQorICBQc2lDb25kaXRpb25hbEV4cHJlc3Npb246Y29uZCA/IHRydWUKKyAgICBQc2lSZWZlcmVuY2VFeHByZXNzaW9uOmNvbmQKKyAgICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lJZGVudGlmaWVyOmNvbmQoJ2NvbmQnKQorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaUphdmFUb2tlbjpRVUVTVCgnPycpCisgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgUHNpTGl0ZXJhbEV4cHJlc3Npb246dHJ1ZQorICAgICAgUHNpSmF2YVRva2VuOlRSVUVfS0VZV09SRCgndHJ1ZScpCisgICAgUHNpRXJyb3JFbGVtZW50Oic6JyBleHBlY3RlZAorICAgICAgPGVtcHR5IGxpc3Q+CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL2V4cHJlc3Npb25zL0NvbmQzLnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvZXhwcmVzc2lvbnMvQ29uZDMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUwZjlkODIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL2V4cHJlc3Npb25zL0NvbmQzLnR4dApAQCAtMCwwICsxLDE1IEBACitQc2lKYXZhRmlsZTpDb25kMy5qYXZhCisgIFBzaUNvbmRpdGlvbmFsRXhwcmVzc2lvbjpjb25kID8gdHJ1ZSA6CisgICAgUHNpUmVmZXJlbmNlRXhwcmVzc2lvbjpjb25kCisgICAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpSWRlbnRpZmllcjpjb25kKCdjb25kJykKKyAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICBQc2lKYXZhVG9rZW46UVVFU1QoJz8nKQorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaUxpdGVyYWxFeHByZXNzaW9uOnRydWUKKyAgICAgIFBzaUphdmFUb2tlbjpUUlVFX0tFWVdPUkQoJ3RydWUnKQorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaUphdmFUb2tlbjpDT0xPTignOicpCisgICAgUHNpRXJyb3JFbGVtZW50OkV4cHJlc3Npb24gZXhwZWN0ZWQKKyAgICAgIDxlbXB0eSBsaXN0PgpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9leHByZXNzaW9ucy9Db25kT3IwLnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvZXhwcmVzc2lvbnMvQ29uZE9yMC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDVkZjg5ZAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvZXhwcmVzc2lvbnMvQ29uZE9yMC50eHQKQEAgLTAsMCArMSwyMCBAQAorUHNpSmF2YUZpbGU6Q29uZE9yMC5qYXZhCisgIFBzaVBvbHlhZGljRXhwcmVzc2lvbjogYSB8fCBiIHx8IGMKKyAgICBQc2lSZWZlcmVuY2VFeHByZXNzaW9uOmEKKyAgICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lJZGVudGlmaWVyOmEoJ2EnKQorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaUphdmFUb2tlbjpPUk9SKCd8fCcpCisgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgUHNpUmVmZXJlbmNlRXhwcmVzc2lvbjpiCisgICAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpSWRlbnRpZmllcjpiKCdiJykKKyAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICBQc2lKYXZhVG9rZW46T1JPUignfHwnKQorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaVJlZmVyZW5jZUV4cHJlc3Npb246YworICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUlkZW50aWZpZXI6YygnYycpClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9leHByZXNzaW9ucy9Db25kT3IxLnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvZXhwcmVzc2lvbnMvQ29uZE9yMS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmQxN2JkOQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvZXhwcmVzc2lvbnMvQ29uZE9yMS50eHQKQEAgLTAsMCArMSwxMCBAQAorUHNpSmF2YUZpbGU6Q29uZE9yMS5qYXZhCisgIFBzaUJpbmFyeUV4cHJlc3Npb246YSB8fAorICAgIFBzaVJlZmVyZW5jZUV4cHJlc3Npb246YQorICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUlkZW50aWZpZXI6YSgnYScpCisgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgUHNpSmF2YVRva2VuOk9ST1IoJ3x8JykKKyAgICBQc2lFcnJvckVsZW1lbnQ6RXhwcmVzc2lvbiBleHBlY3RlZAorICAgICAgPGVtcHR5IGxpc3Q+CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL2V4cHJlc3Npb25zL0V4cHJMaXN0MC50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL2V4cHJlc3Npb25zL0V4cHJMaXN0MC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTlkZmUzOQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvZXhwcmVzc2lvbnMvRXhwckxpc3QwLnR4dApAQCAtMCwwICsxLDE0IEBACitQc2lKYXZhRmlsZTpFeHByTGlzdDAuamF2YQorICBQc2lNZXRob2RDYWxsRXhwcmVzc2lvbjpmKDEsMikKKyAgICBQc2lSZWZlcmVuY2VFeHByZXNzaW9uOmYKKyAgICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lJZGVudGlmaWVyOmYoJ2YnKQorICAgIFBzaUV4cHJlc3Npb25MaXN0CisgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgUHNpTGl0ZXJhbEV4cHJlc3Npb246MQorICAgICAgICBQc2lKYXZhVG9rZW46SU5URUdFUl9MSVRFUkFMKCcxJykKKyAgICAgIFBzaUphdmFUb2tlbjpDT01NQSgnLCcpCisgICAgICBQc2lMaXRlcmFsRXhwcmVzc2lvbjoyCisgICAgICAgIFBzaUphdmFUb2tlbjpJTlRFR0VSX0xJVEVSQUwoJzInKQorICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvZXhwcmVzc2lvbnMvRXhwckxpc3QxLnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvZXhwcmVzc2lvbnMvRXhwckxpc3QxLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYjI3MTY1Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9leHByZXNzaW9ucy9FeHByTGlzdDEudHh0CkBAIC0wLDAgKzEsMTAgQEAKK1BzaUphdmFGaWxlOkV4cHJMaXN0MS5qYXZhCisgIFBzaU1ldGhvZENhbGxFeHByZXNzaW9uOmYoCisgICAgUHNpUmVmZXJlbmNlRXhwcmVzc2lvbjpmCisgICAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpSWRlbnRpZmllcjpmKCdmJykKKyAgICBQc2lFeHByZXNzaW9uTGlzdAorICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgIFBzaUVycm9yRWxlbWVudDonKScgZXhwZWN0ZWQKKyAgICAgICAgPGVtcHR5IGxpc3Q+CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL2V4cHJlc3Npb25zL0V4cHJMaXN0Mi50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL2V4cHJlc3Npb25zL0V4cHJMaXN0Mi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWM1YTEzYgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvZXhwcmVzc2lvbnMvRXhwckxpc3QyLnR4dApAQCAtMCwwICsxLDEyIEBACitQc2lKYXZhRmlsZTpFeHByTGlzdDIuamF2YQorICBQc2lNZXRob2RDYWxsRXhwcmVzc2lvbjpmKDEKKyAgICBQc2lSZWZlcmVuY2VFeHByZXNzaW9uOmYKKyAgICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lJZGVudGlmaWVyOmYoJ2YnKQorICAgIFBzaUV4cHJlc3Npb25MaXN0CisgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgUHNpTGl0ZXJhbEV4cHJlc3Npb246MQorICAgICAgICBQc2lKYXZhVG9rZW46SU5URUdFUl9MSVRFUkFMKCcxJykKKyAgICAgIFBzaUVycm9yRWxlbWVudDonKScgZXhwZWN0ZWQKKyAgICAgICAgPGVtcHR5IGxpc3Q+CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL2V4cHJlc3Npb25zL0V4cHJMaXN0My50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL2V4cHJlc3Npb25zL0V4cHJMaXN0My50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGFiM2NiZAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvZXhwcmVzc2lvbnMvRXhwckxpc3QzLnR4dApAQCAtMCwwICsxLDE3IEBACitQc2lKYXZhRmlsZTpFeHByTGlzdDMuamF2YQorICBQc2lNZXRob2RDYWxsRXhwcmVzc2lvbjpmKDEsCisgICAgUHNpUmVmZXJlbmNlRXhwcmVzc2lvbjpmCisgICAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpSWRlbnRpZmllcjpmKCdmJykKKyAgICBQc2lFeHByZXNzaW9uTGlzdAorICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgIFBzaUxpdGVyYWxFeHByZXNzaW9uOjEKKyAgICAgICAgUHNpSmF2YVRva2VuOklOVEVHRVJfTElURVJBTCgnMScpCisgICAgICBQc2lKYXZhVG9rZW46Q09NTUEoJywnKQorICAgICAgUHNpRXJyb3JFbGVtZW50OkV4cHJlc3Npb24gZXhwZWN0ZWQKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lFeHByZXNzaW9uKGVtcHR5KQorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUVycm9yRWxlbWVudDonKScgZXhwZWN0ZWQKKyAgICAgICAgPGVtcHR5IGxpc3Q+CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL2V4cHJlc3Npb25zL0V4cHJMaXN0NC50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL2V4cHJlc3Npb25zL0V4cHJMaXN0NC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGYxZDUzMwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvZXhwcmVzc2lvbnMvRXhwckxpc3Q0LnR4dApAQCAtMCwwICsxLDE2IEBACitQc2lKYXZhRmlsZTpFeHByTGlzdDQuamF2YQorICBQc2lNZXRob2RDYWxsRXhwcmVzc2lvbjpmKDEsKQorICAgIFBzaVJlZmVyZW5jZUV4cHJlc3Npb246ZgorICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUlkZW50aWZpZXI6ZignZicpCisgICAgUHNpRXhwcmVzc2lvbkxpc3QKKyAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICBQc2lMaXRlcmFsRXhwcmVzc2lvbjoxCisgICAgICAgIFBzaUphdmFUb2tlbjpJTlRFR0VSX0xJVEVSQUwoJzEnKQorICAgICAgUHNpSmF2YVRva2VuOkNPTU1BKCcsJykKKyAgICAgIFBzaUVycm9yRWxlbWVudDpFeHByZXNzaW9uIGV4cGVjdGVkCisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpRXhwcmVzc2lvbihlbXB0eSkKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9leHByZXNzaW9ucy9FeHByTGlzdDUudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9leHByZXNzaW9ucy9FeHByTGlzdDUudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc5ZGI3NmIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL2V4cHJlc3Npb25zL0V4cHJMaXN0NS50eHQKQEAgLTAsMCArMSwxOSBAQAorUHNpSmF2YUZpbGU6RXhwckxpc3Q1LmphdmEKKyAgUHNpTWV0aG9kQ2FsbEV4cHJlc3Npb246ZigxLCwyKQorICAgIFBzaVJlZmVyZW5jZUV4cHJlc3Npb246ZgorICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUlkZW50aWZpZXI6ZignZicpCisgICAgUHNpRXhwcmVzc2lvbkxpc3QKKyAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICBQc2lMaXRlcmFsRXhwcmVzc2lvbjoxCisgICAgICAgIFBzaUphdmFUb2tlbjpJTlRFR0VSX0xJVEVSQUwoJzEnKQorICAgICAgUHNpSmF2YVRva2VuOkNPTU1BKCcsJykKKyAgICAgIFBzaUVycm9yRWxlbWVudDpFeHByZXNzaW9uIGV4cGVjdGVkCisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpRXhwcmVzc2lvbihlbXB0eSkKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lKYXZhVG9rZW46Q09NTUEoJywnKQorICAgICAgUHNpTGl0ZXJhbEV4cHJlc3Npb246MgorICAgICAgICBQc2lKYXZhVG9rZW46SU5URUdFUl9MSVRFUkFMKCcyJykKKyAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL2V4cHJlc3Npb25zL0V4cHJMaXN0Ni50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL2V4cHJlc3Npb25zL0V4cHJMaXN0Ni50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGFmYTA4MgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvZXhwcmVzc2lvbnMvRXhwckxpc3Q2LnR4dApAQCAtMCwwICsxLDE2IEBACitQc2lKYXZhRmlsZTpFeHByTGlzdDYuamF2YQorICBQc2lNZXRob2RDYWxsRXhwcmVzc2lvbjpmKCwyKQorICAgIFBzaVJlZmVyZW5jZUV4cHJlc3Npb246ZgorICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUlkZW50aWZpZXI6ZignZicpCisgICAgUHNpRXhwcmVzc2lvbkxpc3QKKyAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICBQc2lFcnJvckVsZW1lbnQ6RXhwcmVzc2lvbiBleHBlY3RlZAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUV4cHJlc3Npb24oZW1wdHkpCisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpSmF2YVRva2VuOkNPTU1BKCcsJykKKyAgICAgIFBzaUxpdGVyYWxFeHByZXNzaW9uOjIKKyAgICAgICAgUHNpSmF2YVRva2VuOklOVEVHRVJfTElURVJBTCgnMicpCisgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9leHByZXNzaW9ucy9HRTAudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9leHByZXNzaW9ucy9HRTAudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI0NDVlZDIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL2V4cHJlc3Npb25zL0dFMC50eHQKQEAgLTAsMCArMSwxNyBAQAorUHNpSmF2YUZpbGU6R0UwLmphdmEKKyAgUHNpQXNzaWdubWVudEV4cHJlc3Npb246eCA+Pj49IDggPj4gMgorICAgIFBzaVJlZmVyZW5jZUV4cHJlc3Npb246eAorICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUlkZW50aWZpZXI6eCgneCcpCisgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgUHNpSmF2YVRva2VuOkdUR1RHVEVRKCc+Pj49JykKKyAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICBQc2lCaW5hcnlFeHByZXNzaW9uOjggPj4gMgorICAgICAgUHNpTGl0ZXJhbEV4cHJlc3Npb246OAorICAgICAgICBQc2lKYXZhVG9rZW46SU5URUdFUl9MSVRFUkFMKCc4JykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSmF2YVRva2VuOkdUR1QoJz4+JykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpTGl0ZXJhbEV4cHJlc3Npb246MgorICAgICAgICBQc2lKYXZhVG9rZW46SU5URUdFUl9MSVRFUkFMKCcyJykKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvZXhwcmVzc2lvbnMvR0UxLnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvZXhwcmVzc2lvbnMvR0UxLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOTMxYjRlCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9leHByZXNzaW9ucy9HRTEudHh0CkBAIC0wLDAgKzEsMTEgQEAKK1BzaUphdmFGaWxlOkdFMS5qYXZhCisgIFBzaUJpbmFyeUV4cHJlc3Npb246eCA+PSAyCisgICAgUHNpUmVmZXJlbmNlRXhwcmVzc2lvbjp4CisgICAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpSWRlbnRpZmllcjp4KCd4JykKKyAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICBQc2lKYXZhVG9rZW46R0UoJz49JykKKyAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICBQc2lMaXRlcmFsRXhwcmVzc2lvbjoyCisgICAgICBQc2lKYXZhVG9rZW46SU5URUdFUl9MSVRFUkFMKCcyJykKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL2V4cHJlc3Npb25zL0lsbGVnYWxCb3VuZC50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL2V4cHJlc3Npb25zL0lsbGVnYWxCb3VuZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjc5OWUzNwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvZXhwcmVzc2lvbnMvSWxsZWdhbEJvdW5kLnR4dApAQCAtMCwwICsxLDI4IEBACitQc2lKYXZhRmlsZTpJbGxlZ2FsQm91bmQuamF2YQorICBQc2lNZXRob2RDYWxsRXhwcmVzc2lvbjpDLjxUIGV4dGVuZHMgUz5mb28oKQorICAgIFBzaVJlZmVyZW5jZUV4cHJlc3Npb246Qy48VCBleHRlbmRzIFM+Zm9vCisgICAgICBQc2lSZWZlcmVuY2VFeHByZXNzaW9uOkMKKyAgICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICBQc2lJZGVudGlmaWVyOkMoJ0MnKQorICAgICAgUHNpSmF2YVRva2VuOkRPVCgnLicpCisgICAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICAgIFBzaUphdmFUb2tlbjpMVCgnPCcpCisgICAgICAgIFBzaVR5cGVFbGVtZW50OlQKKyAgICAgICAgICBQc2lKYXZhQ29kZVJlZmVyZW5jZUVsZW1lbnQ6VAorICAgICAgICAgICAgUHNpSWRlbnRpZmllcjpUKCdUJykKKyAgICAgICAgICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgICBQc2lFcnJvckVsZW1lbnQ6VW5leHBlY3RlZCBib3VuZAorICAgICAgICAgIFBzaUtleXdvcmQ6ZXh0ZW5kcygnZXh0ZW5kcycpCisgICAgICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICAgICAgUHNpSmF2YUNvZGVSZWZlcmVuY2VFbGVtZW50OlMKKyAgICAgICAgICAgIFBzaUlkZW50aWZpZXI6UygnUycpCisgICAgICAgICAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICBQc2lKYXZhVG9rZW46R1QoJz4nKQorICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgUHNpRXhwcmVzc2lvbkxpc3QKKyAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9leHByZXNzaW9ucy9JbGxlZ2FsV2lsZGNhcmQudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9leHByZXNzaW9ucy9JbGxlZ2FsV2lsZGNhcmQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZkYzIyMDcKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL2V4cHJlc3Npb25zL0lsbGVnYWxXaWxkY2FyZC50eHQKQEAgLTAsMCArMSwxNyBAQAorUHNpSmF2YUZpbGU6SWxsZWdhbFdpbGRjYXJkLmphdmEKKyAgUHNpTWV0aG9kQ2FsbEV4cHJlc3Npb246dGhpcy48Pz5mb28oKQorICAgIFBzaVJlZmVyZW5jZUV4cHJlc3Npb246dGhpcy48Pz5mb28KKyAgICAgIFBzaVRoaXNFeHByZXNzaW9uOnRoaXMKKyAgICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICBQc2lLZXl3b3JkOnRoaXMoJ3RoaXMnKQorICAgICAgUHNpSmF2YVRva2VuOkRPVCgnLicpCisgICAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICAgIFBzaUphdmFUb2tlbjpMVCgnPCcpCisgICAgICAgIFBzaUVycm9yRWxlbWVudDpVbmV4cGVjdGVkIHdpbGRjYXJkCisgICAgICAgICAgUHNpSmF2YVRva2VuOlFVRVNUKCc/JykKKyAgICAgICAgUHNpSmF2YVRva2VuOkdUKCc+JykKKyAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgIFBzaUV4cHJlc3Npb25MaXN0CisgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL2V4cHJlc3Npb25zL0luY29tcGxldGVDYXN0LnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvZXhwcmVzc2lvbnMvSW5jb21wbGV0ZUNhc3QudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUzNDZkZTEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL2V4cHJlc3Npb25zL0luY29tcGxldGVDYXN0LnR4dApAQCAtMCwwICsxLDI2IEBACitQc2lKYXZhRmlsZTpJbmNvbXBsZXRlQ2FzdC5qYXZhCisgIFBzaU1ldGhvZENhbGxFeHByZXNzaW9uOmYoKEFycmF5TGlzdDxTdHJpbmc+KSApCisgICAgUHNpUmVmZXJlbmNlRXhwcmVzc2lvbjpmCisgICAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpSWRlbnRpZmllcjpmKCdmJykKKyAgICBQc2lFeHByZXNzaW9uTGlzdAorICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgIFBzaVR5cGVDYXN0RXhwcmVzc2lvbjooQXJyYXlMaXN0PFN0cmluZz4pCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaVR5cGVFbGVtZW50OkFycmF5TGlzdDxTdHJpbmc+CisgICAgICAgICAgUHNpSmF2YUNvZGVSZWZlcmVuY2VFbGVtZW50OkFycmF5TGlzdDxTdHJpbmc+CisgICAgICAgICAgICBQc2lJZGVudGlmaWVyOkFycmF5TGlzdCgnQXJyYXlMaXN0JykKKyAgICAgICAgICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgICAgICAgICAgUHNpSmF2YVRva2VuOkxUKCc8JykKKyAgICAgICAgICAgICAgUHNpVHlwZUVsZW1lbnQ6U3RyaW5nCisgICAgICAgICAgICAgICAgUHNpSmF2YUNvZGVSZWZlcmVuY2VFbGVtZW50OlN0cmluZworICAgICAgICAgICAgICAgICAgUHNpSWRlbnRpZmllcjpTdHJpbmcoJ1N0cmluZycpCisgICAgICAgICAgICAgICAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICAgICAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICAgICAgICBQc2lKYXZhVG9rZW46R1QoJz4nKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgICBQc2lFcnJvckVsZW1lbnQ6RXhwcmVzc2lvbiBleHBlY3RlZAorICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9leHByZXNzaW9ucy9JbnN0YW5jZU9mMC50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL2V4cHJlc3Npb25zL0luc3RhbmNlT2YwLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMmJiYmExCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9leHByZXNzaW9ucy9JbnN0YW5jZU9mMC50eHQKQEAgLTAsMCArMSwxNCBAQAorUHNpSmF2YUZpbGU6SW5zdGFuY2VPZjAuamF2YQorICBQc2lJbnN0YW5jZW9mRXhwcmVzc2lvbjphIGluc3RhbmNlb2YgU3RyaW5nCisgICAgUHNpUmVmZXJlbmNlRXhwcmVzc2lvbjphCisgICAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpSWRlbnRpZmllcjphKCdhJykKKyAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICBQc2lLZXl3b3JkOmluc3RhbmNlb2YoJ2luc3RhbmNlb2YnKQorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaVR5cGVFbGVtZW50OlN0cmluZworICAgICAgUHNpSmF2YUNvZGVSZWZlcmVuY2VFbGVtZW50OlN0cmluZworICAgICAgICBQc2lJZGVudGlmaWVyOlN0cmluZygnU3RyaW5nJykKKyAgICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICAgIDxlbXB0eSBsaXN0PgpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9leHByZXNzaW9ucy9JbnN0YW5jZU9mMS50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL2V4cHJlc3Npb25zL0luc3RhbmNlT2YxLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MmFjM2YxCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9leHByZXNzaW9ucy9JbnN0YW5jZU9mMS50eHQKQEAgLTAsMCArMSwxMCBAQAorUHNpSmF2YUZpbGU6SW5zdGFuY2VPZjEuamF2YQorICBQc2lJbnN0YW5jZW9mRXhwcmVzc2lvbjphIGluc3RhbmNlb2YKKyAgICBQc2lSZWZlcmVuY2VFeHByZXNzaW9uOmEKKyAgICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lJZGVudGlmaWVyOmEoJ2EnKQorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaUtleXdvcmQ6aW5zdGFuY2VvZignaW5zdGFuY2VvZicpCisgICAgUHNpRXJyb3JFbGVtZW50OlR5cGUgZXhwZWN0ZWQKKyAgICAgIDxlbXB0eSBsaXN0PgpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9leHByZXNzaW9ucy9MYW1iZGFFeHByZXNzaW9uMC50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL2V4cHJlc3Npb25zL0xhbWJkYUV4cHJlc3Npb24wLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNmQwOGVhCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9leHByZXNzaW9ucy9MYW1iZGFFeHByZXNzaW9uMC50eHQKQEAgLTAsMCArMSwxMiBAQAorUHNpSmF2YUZpbGU6TGFtYmRhRXhwcmVzc2lvbjAuamF2YQorICBQc2lMYW1iZGFFeHByZXNzaW9uOnAgLT4gNDIKKyAgICBQc2lQYXJhbWV0ZXJMaXN0OnAKKyAgICAgIFBzaVBhcmFtZXRlcjpwCisgICAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgUHNpSWRlbnRpZmllcjpwKCdwJykKKyAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICBQc2lKYXZhVG9rZW46QVJST1coJy0+JykKKyAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICBQc2lMaXRlcmFsRXhwcmVzc2lvbjo0MgorICAgICAgUHNpSmF2YVRva2VuOklOVEVHRVJfTElURVJBTCgnNDInKQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvZXhwcmVzc2lvbnMvTGFtYmRhRXhwcmVzc2lvbjEudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9leHByZXNzaW9ucy9MYW1iZGFFeHByZXNzaW9uMS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGE3MTkwZgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvZXhwcmVzc2lvbnMvTGFtYmRhRXhwcmVzc2lvbjEudHh0CkBAIC0wLDAgKzEsMTIgQEAKK1BzaUphdmFGaWxlOkxhbWJkYUV4cHJlc3Npb24xLmphdmEKKyAgUHNpTGFtYmRhRXhwcmVzc2lvbjpwIC0+CisgICAgUHNpUGFyYW1ldGVyTGlzdDpwCisgICAgICBQc2lQYXJhbWV0ZXI6cAorICAgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgIFBzaUlkZW50aWZpZXI6cCgncCcpCisgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgUHNpSmF2YVRva2VuOkFSUk9XKCctPicpCisgICAgUHNpRXJyb3JFbGVtZW50Oid7JyBleHBlY3RlZAorICAgICAgPGVtcHR5IGxpc3Q+CisgIFBzaVdoaXRlU3BhY2UoJyAnKQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvZXhwcmVzc2lvbnMvTGFtYmRhRXhwcmVzc2lvbjEwLnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvZXhwcmVzc2lvbnMvTGFtYmRhRXhwcmVzc2lvbjEwLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZDU2MzcwCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9leHByZXNzaW9ucy9MYW1iZGFFeHByZXNzaW9uMTAudHh0CkBAIC0wLDAgKzEsMjMgQEAKK1BzaUphdmFGaWxlOkxhbWJkYUV4cHJlc3Npb24xMC5qYXZhCisgIFBzaVR5cGVDYXN0RXhwcmVzc2lvbjooSSkocCAtPiBudWxsKQorICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgUHNpVHlwZUVsZW1lbnQ6SQorICAgICAgUHNpSmF2YUNvZGVSZWZlcmVuY2VFbGVtZW50OkkKKyAgICAgICAgUHNpSWRlbnRpZmllcjpJKCdJJykKKyAgICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgUHNpUGFyZW50aGVzaXplZEV4cHJlc3Npb246KHAgLT4gbnVsbCkKKyAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICBQc2lMYW1iZGFFeHByZXNzaW9uOnAgLT4gbnVsbAorICAgICAgICBQc2lQYXJhbWV0ZXJMaXN0OnAKKyAgICAgICAgICBQc2lQYXJhbWV0ZXI6cAorICAgICAgICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgICAgIFBzaUlkZW50aWZpZXI6cCgncCcpCisgICAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgICBQc2lKYXZhVG9rZW46QVJST1coJy0+JykKKyAgICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICAgIFBzaUxpdGVyYWxFeHByZXNzaW9uOm51bGwKKyAgICAgICAgICBQc2lKYXZhVG9rZW46TlVMTF9LRVlXT1JEKCdudWxsJykKKyAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9leHByZXNzaW9ucy9MYW1iZGFFeHByZXNzaW9uMTEudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9leHByZXNzaW9ucy9MYW1iZGFFeHByZXNzaW9uMTEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJhYTFjZWQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL2V4cHJlc3Npb25zL0xhbWJkYUV4cHJlc3Npb24xMS50eHQKQEAgLTAsMCArMSwxMiBAQAorUHNpSmF2YUZpbGU6TGFtYmRhRXhwcmVzc2lvbjExLmphdmEKKyAgUHNpTGFtYmRhRXhwcmVzc2lvbjooKSAtPiB7IH0KKyAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICBQc2lKYXZhVG9rZW46QVJST1coJy0+JykKKyAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICBQc2lDb2RlQmxvY2sKKyAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL2V4cHJlc3Npb25zL0xhbWJkYUV4cHJlc3Npb24xMi50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL2V4cHJlc3Npb25zL0xhbWJkYUV4cHJlc3Npb24xMi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODIzMGJjNwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvZXhwcmVzc2lvbnMvTGFtYmRhRXhwcmVzc2lvbjEyLnR4dApAQCAtMCwwICsxLDI4IEBACitQc2lKYXZhRmlsZTpMYW1iZGFFeHByZXNzaW9uMTIuamF2YQorICBQc2lUeXBlQ2FzdEV4cHJlc3Npb246KEkxICYgSTIpICgpIC0+IG51bGwKKyAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgIFBzaVR5cGVFbGVtZW50OkkxICYgSTIKKyAgICAgIFBzaVR5cGVFbGVtZW50OkkxCisgICAgICAgIFBzaUphdmFDb2RlUmVmZXJlbmNlRWxlbWVudDpJMQorICAgICAgICAgIFBzaUlkZW50aWZpZXI6STEoJ0kxJykKKyAgICAgICAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSmF2YVRva2VuOkFORCgnJicpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaVR5cGVFbGVtZW50OkkyCisgICAgICAgIFBzaUphdmFDb2RlUmVmZXJlbmNlRWxlbWVudDpJMgorICAgICAgICAgIFBzaUlkZW50aWZpZXI6STIoJ0kyJykKKyAgICAgICAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaUxhbWJkYUV4cHJlc3Npb246KCkgLT4gbnVsbAorICAgICAgUHNpUGFyYW1ldGVyTGlzdDooKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lKYXZhVG9rZW46QVJST1coJy0+JykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpTGl0ZXJhbEV4cHJlc3Npb246bnVsbAorICAgICAgICBQc2lKYXZhVG9rZW46TlVMTF9LRVlXT1JEKCdudWxsJykKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL2V4cHJlc3Npb25zL0xhbWJkYUV4cHJlc3Npb24xMy50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL2V4cHJlc3Npb25zL0xhbWJkYUV4cHJlc3Npb24xMy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmQzNTc0OQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvZXhwcmVzc2lvbnMvTGFtYmRhRXhwcmVzc2lvbjEzLnR4dApAQCAtMCwwICsxLDI5IEBACitQc2lKYXZhRmlsZTpMYW1iZGFFeHByZXNzaW9uMTMuamF2YQorICBQc2lUeXBlQ2FzdEV4cHJlc3Npb246KEkxICYgSTIpICgpIC0+IHt9CisgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICBQc2lUeXBlRWxlbWVudDpJMSAmIEkyCisgICAgICBQc2lUeXBlRWxlbWVudDpJMQorICAgICAgICBQc2lKYXZhQ29kZVJlZmVyZW5jZUVsZW1lbnQ6STEKKyAgICAgICAgICBQc2lJZGVudGlmaWVyOkkxKCdJMScpCisgICAgICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUphdmFUb2tlbjpBTkQoJyYnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lUeXBlRWxlbWVudDpJMgorICAgICAgICBQc2lKYXZhQ29kZVJlZmVyZW5jZUVsZW1lbnQ6STIKKyAgICAgICAgICBQc2lJZGVudGlmaWVyOkkyKCdJMicpCisgICAgICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICBQc2lMYW1iZGFFeHByZXNzaW9uOigpIC0+IHt9CisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OigpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUphdmFUb2tlbjpBUlJPVygnLT4nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvZXhwcmVzc2lvbnMvTGFtYmRhRXhwcmVzc2lvbjE0LnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvZXhwcmVzc2lvbnMvTGFtYmRhRXhwcmVzc2lvbjE0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOTNhMDFlCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9leHByZXNzaW9ucy9MYW1iZGFFeHByZXNzaW9uMTQudHh0CkBAIC0wLDAgKzEsMjIgQEAKK1BzaUphdmFGaWxlOkxhbWJkYUV4cHJlc3Npb24xNC5qYXZhCisgIFBzaUxhbWJkYUV4cHJlc3Npb246KFN0cmluZyB0KSAtPiB0CisgICAgUHNpUGFyYW1ldGVyTGlzdDooU3RyaW5nIHQpCisgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgUHNpUGFyYW1ldGVyOnQKKyAgICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICBQc2lUeXBlRWxlbWVudDpTdHJpbmcKKyAgICAgICAgICBQc2lKYXZhQ29kZVJlZmVyZW5jZUVsZW1lbnQ6U3RyaW5nCisgICAgICAgICAgICBQc2lJZGVudGlmaWVyOlN0cmluZygnU3RyaW5nJykKKyAgICAgICAgICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgICBQc2lJZGVudGlmaWVyOnQoJ3QnKQorICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICBQc2lKYXZhVG9rZW46QVJST1coJy0+JykKKyAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICBQc2lSZWZlcmVuY2VFeHByZXNzaW9uOnQKKyAgICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lJZGVudGlmaWVyOnQoJ3QnKQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvZXhwcmVzc2lvbnMvTGFtYmRhRXhwcmVzc2lvbjE1LnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvZXhwcmVzc2lvbnMvTGFtYmRhRXhwcmVzc2lvbjE1LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yODIzMDY2Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9leHByZXNzaW9ucy9MYW1iZGFFeHByZXNzaW9uMTUudHh0CkBAIC0wLDAgKzEsMzYgQEAKK1BzaUphdmFGaWxlOkxhbWJkYUV4cHJlc3Npb24xNS5qYXZhCisgIFBzaUxhbWJkYUV4cHJlc3Npb246KGludCBhLCBpbnQgYikgLT4gYSArIGIKKyAgICBQc2lQYXJhbWV0ZXJMaXN0OihpbnQgYSwgaW50IGIpCisgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgUHNpUGFyYW1ldGVyOmEKKyAgICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICBQc2lUeXBlRWxlbWVudDppbnQKKyAgICAgICAgICBQc2lLZXl3b3JkOmludCgnaW50JykKKyAgICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICAgIFBzaUlkZW50aWZpZXI6YSgnYScpCisgICAgICBQc2lKYXZhVG9rZW46Q09NTUEoJywnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lQYXJhbWV0ZXI6YgorICAgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgIFBzaVR5cGVFbGVtZW50OmludAorICAgICAgICAgIFBzaUtleXdvcmQ6aW50KCdpbnQnKQorICAgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgICAgUHNpSWRlbnRpZmllcjpiKCdiJykKKyAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgUHNpSmF2YVRva2VuOkFSUk9XKCctPicpCisgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgUHNpQmluYXJ5RXhwcmVzc2lvbjphICsgYgorICAgICAgUHNpUmVmZXJlbmNlRXhwcmVzc2lvbjphCisgICAgICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgUHNpSWRlbnRpZmllcjphKCdhJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSmF2YVRva2VuOlBMVVMoJysnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lSZWZlcmVuY2VFeHByZXNzaW9uOmIKKyAgICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICBQc2lJZGVudGlmaWVyOmIoJ2InKQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvZXhwcmVzc2lvbnMvTGFtYmRhRXhwcmVzc2lvbjE2LnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvZXhwcmVzc2lvbnMvTGFtYmRhRXhwcmVzc2lvbjE2LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOWI3NDYxCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9leHByZXNzaW9ucy9MYW1iZGFFeHByZXNzaW9uMTYudHh0CkBAIC0wLDAgKzEsMjAgQEAKK1BzaUphdmFGaWxlOkxhbWJkYUV4cHJlc3Npb24xNi5qYXZhCisgIFBzaUxhbWJkYUV4cHJlc3Npb246KGZpbmFsIGludCB4KSAtPiB4CisgICAgUHNpUGFyYW1ldGVyTGlzdDooZmluYWwgaW50IHgpCisgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgUHNpUGFyYW1ldGVyOngKKyAgICAgICAgUHNpTW9kaWZpZXJMaXN0OmZpbmFsCisgICAgICAgICAgUHNpS2V5d29yZDpmaW5hbCgnZmluYWwnKQorICAgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgICAgUHNpVHlwZUVsZW1lbnQ6aW50CisgICAgICAgICAgUHNpS2V5d29yZDppbnQoJ2ludCcpCisgICAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgICBQc2lJZGVudGlmaWVyOngoJ3gnKQorICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICBQc2lKYXZhVG9rZW46QVJST1coJy0+JykKKyAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICBQc2lSZWZlcmVuY2VFeHByZXNzaW9uOngKKyAgICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lJZGVudGlmaWVyOngoJ3gnKQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvZXhwcmVzc2lvbnMvTGFtYmRhRXhwcmVzc2lvbjE3LnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvZXhwcmVzc2lvbnMvTGFtYmRhRXhwcmVzc2lvbjE3LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MGJlNTFmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9leHByZXNzaW9ucy9MYW1iZGFFeHByZXNzaW9uMTcudHh0CkBAIC0wLDAgKzEsMjMgQEAKK1BzaUphdmFGaWxlOkxhbWJkYUV4cHJlc3Npb24xNy5qYXZhCisgIFBzaUxhbWJkYUV4cHJlc3Npb246KFN0cmluZyBzIC0+IHMKKyAgICBQc2lQYXJhbWV0ZXJMaXN0OihTdHJpbmcgcworICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgIFBzaVBhcmFtZXRlcjpzCisgICAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgUHNpVHlwZUVsZW1lbnQ6U3RyaW5nCisgICAgICAgICAgUHNpSmF2YUNvZGVSZWZlcmVuY2VFbGVtZW50OlN0cmluZworICAgICAgICAgICAgUHNpSWRlbnRpZmllcjpTdHJpbmcoJ1N0cmluZycpCisgICAgICAgICAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgICAgUHNpSWRlbnRpZmllcjpzKCdzJykKKyAgICAgIFBzaUVycm9yRWxlbWVudDonKScgZXhwZWN0ZWQKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgUHNpSmF2YVRva2VuOkFSUk9XKCctPicpCisgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgUHNpUmVmZXJlbmNlRXhwcmVzc2lvbjpzCisgICAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpSWRlbnRpZmllcjpzKCdzJykKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL2V4cHJlc3Npb25zL0xhbWJkYUV4cHJlc3Npb24xOC50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL2V4cHJlc3Npb25zL0xhbWJkYUV4cHJlc3Npb24xOC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTk2YmYxYgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvZXhwcmVzc2lvbnMvTGFtYmRhRXhwcmVzc2lvbjE4LnR4dApAQCAtMCwwICsxLDM0IEBACitQc2lKYXZhRmlsZTpMYW1iZGFFeHByZXNzaW9uMTguamF2YQorICBQc2lMYW1iZGFFeHByZXNzaW9uOihqYXZhLmxhbmcuU3RyaW5nIHMsIC0+IHMKKyAgICBQc2lQYXJhbWV0ZXJMaXN0OihqYXZhLmxhbmcuU3RyaW5nIHMsCisgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgUHNpUGFyYW1ldGVyOnMKKyAgICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICBQc2lUeXBlRWxlbWVudDpqYXZhLmxhbmcuU3RyaW5nCisgICAgICAgICAgUHNpSmF2YUNvZGVSZWZlcmVuY2VFbGVtZW50OmphdmEubGFuZy5TdHJpbmcKKyAgICAgICAgICAgIFBzaUphdmFDb2RlUmVmZXJlbmNlRWxlbWVudDpqYXZhLmxhbmcKKyAgICAgICAgICAgICAgUHNpSmF2YUNvZGVSZWZlcmVuY2VFbGVtZW50OmphdmEKKyAgICAgICAgICAgICAgICBQc2lJZGVudGlmaWVyOmphdmEoJ2phdmEnKQorICAgICAgICAgICAgICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgICAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICAgICAgICBQc2lKYXZhVG9rZW46RE9UKCcuJykKKyAgICAgICAgICAgICAgUHNpSWRlbnRpZmllcjpsYW5nKCdsYW5nJykKKyAgICAgICAgICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICAgICAgUHNpSmF2YVRva2VuOkRPVCgnLicpCisgICAgICAgICAgICBQc2lJZGVudGlmaWVyOlN0cmluZygnU3RyaW5nJykKKyAgICAgICAgICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgICBQc2lJZGVudGlmaWVyOnMoJ3MnKQorICAgICAgUHNpSmF2YVRva2VuOkNPTU1BKCcsJykKKyAgICAgIFBzaUVycm9yRWxlbWVudDpQYXJhbWV0ZXIgZXhwZWN0ZWQKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgUHNpSmF2YVRva2VuOkFSUk9XKCctPicpCisgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgUHNpUmVmZXJlbmNlRXhwcmVzc2lvbjpzCisgICAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpSWRlbnRpZmllcjpzKCdzJykKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL2V4cHJlc3Npb25zL0xhbWJkYUV4cHJlc3Npb24xOS50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL2V4cHJlc3Npb25zL0xhbWJkYUV4cHJlc3Npb24xOS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDc2YzM5YgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvZXhwcmVzc2lvbnMvTGFtYmRhRXhwcmVzc2lvbjE5LnR4dApAQCAtMCwwICsxLDMxIEBACitQc2lKYXZhRmlsZTpMYW1iZGFFeHByZXNzaW9uMTkuamF2YQorICBQc2lMYW1iZGFFeHByZXNzaW9uOihAQSBUIHQpIC0+IChudWxsKQorICAgIFBzaVBhcmFtZXRlckxpc3Q6KEBBIFQgdCkKKyAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICBQc2lQYXJhbWV0ZXI6dAorICAgICAgICBQc2lNb2RpZmllckxpc3Q6QEEKKyAgICAgICAgICBQc2lBbm5vdGF0aW9uCisgICAgICAgICAgICBQc2lKYXZhVG9rZW46QVQoJ0AnKQorICAgICAgICAgICAgUHNpSmF2YUNvZGVSZWZlcmVuY2VFbGVtZW50OkEKKyAgICAgICAgICAgICAgUHNpSWRlbnRpZmllcjpBKCdBJykKKyAgICAgICAgICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICAgICAgUHNpQW5ub3RhdGlvblBhcmFtZXRlckxpc3QKKyAgICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgICBQc2lUeXBlRWxlbWVudDpUCisgICAgICAgICAgUHNpSmF2YUNvZGVSZWZlcmVuY2VFbGVtZW50OlQKKyAgICAgICAgICAgIFBzaUlkZW50aWZpZXI6VCgnVCcpCisgICAgICAgICAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgICAgUHNpSWRlbnRpZmllcjp0KCd0JykKKyAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgUHNpSmF2YVRva2VuOkFSUk9XKCctPicpCisgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgUHNpUGFyZW50aGVzaXplZEV4cHJlc3Npb246KG51bGwpCisgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgUHNpTGl0ZXJhbEV4cHJlc3Npb246bnVsbAorICAgICAgICBQc2lKYXZhVG9rZW46TlVMTF9LRVlXT1JEKCdudWxsJykKKyAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9leHByZXNzaW9ucy9MYW1iZGFFeHByZXNzaW9uMi50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL2V4cHJlc3Npb25zL0xhbWJkYUV4cHJlc3Npb24yLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNGU4OTgxCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9leHByZXNzaW9ucy9MYW1iZGFFeHByZXNzaW9uMi50eHQKQEAgLTAsMCArMSwxNCBAQAorUHNpSmF2YUZpbGU6TGFtYmRhRXhwcmVzc2lvbjIuamF2YQorICBQc2lMYW1iZGFFeHByZXNzaW9uOnAgLT4geworICAgIFBzaVBhcmFtZXRlckxpc3Q6cAorICAgICAgUHNpUGFyYW1ldGVyOnAKKyAgICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICBQc2lJZGVudGlmaWVyOnAoJ3AnKQorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaUphdmFUb2tlbjpBUlJPVygnLT4nKQorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaUNvZGVCbG9jaworICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICBQc2lFcnJvckVsZW1lbnQ6J30nIGV4cGVjdGVkCisgICAgICAgIDxlbXB0eSBsaXN0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvZXhwcmVzc2lvbnMvTGFtYmRhRXhwcmVzc2lvbjMudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9leHByZXNzaW9ucy9MYW1iZGFFeHByZXNzaW9uMy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjAzZjBlZWMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL2V4cHJlc3Npb25zL0xhbWJkYUV4cHJlc3Npb24zLnR4dApAQCAtMCwwICsxLDE2IEBACitQc2lKYXZhRmlsZTpMYW1iZGFFeHByZXNzaW9uMy5qYXZhCisgIFBzaUxhbWJkYUV4cHJlc3Npb246KHApIC0+IHsgfQorICAgIFBzaVBhcmFtZXRlckxpc3Q6KHApCisgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgUHNpUGFyYW1ldGVyOnAKKyAgICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICBQc2lJZGVudGlmaWVyOnAoJ3AnKQorICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICBQc2lKYXZhVG9rZW46QVJST1coJy0+JykKKyAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICBQc2lDb2RlQmxvY2sKKyAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL2V4cHJlc3Npb25zL0xhbWJkYUV4cHJlc3Npb240LnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvZXhwcmVzc2lvbnMvTGFtYmRhRXhwcmVzc2lvbjQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY1NTBiN2UKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL2V4cHJlc3Npb25zL0xhbWJkYUV4cHJlc3Npb240LnR4dApAQCAtMCwwICsxLDIwIEBACitQc2lKYXZhRmlsZTpMYW1iZGFFeHByZXNzaW9uNC5qYXZhCisgIFBzaUxhbWJkYUV4cHJlc3Npb246KHAsIHYpIC0+IG51bGwKKyAgICBQc2lQYXJhbWV0ZXJMaXN0OihwLCB2KQorICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgIFBzaVBhcmFtZXRlcjpwCisgICAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgUHNpSWRlbnRpZmllcjpwKCdwJykKKyAgICAgIFBzaUphdmFUb2tlbjpDT01NQSgnLCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaVBhcmFtZXRlcjp2CisgICAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgUHNpSWRlbnRpZmllcjp2KCd2JykKKyAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgUHNpSmF2YVRva2VuOkFSUk9XKCctPicpCisgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgUHNpTGl0ZXJhbEV4cHJlc3Npb246bnVsbAorICAgICAgUHNpSmF2YVRva2VuOk5VTExfS0VZV09SRCgnbnVsbCcpClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9leHByZXNzaW9ucy9MYW1iZGFFeHByZXNzaW9uNS50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL2V4cHJlc3Npb25zL0xhbWJkYUV4cHJlc3Npb241LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZGYxNjQ4Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9leHByZXNzaW9ucy9MYW1iZGFFeHByZXNzaW9uNS50eHQKQEAgLTAsMCArMSwyMSBAQAorUHNpSmF2YUZpbGU6TGFtYmRhRXhwcmVzc2lvbjUuamF2YQorICBQc2lMYW1iZGFFeHByZXNzaW9uOihwLCB2IC0+IG51bGwKKyAgICBQc2lQYXJhbWV0ZXJMaXN0OihwLCB2CisgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgUHNpUGFyYW1ldGVyOnAKKyAgICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICBQc2lJZGVudGlmaWVyOnAoJ3AnKQorICAgICAgUHNpSmF2YVRva2VuOkNPTU1BKCcsJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpUGFyYW1ldGVyOnYKKyAgICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICBQc2lJZGVudGlmaWVyOnYoJ3YnKQorICAgICAgUHNpRXJyb3JFbGVtZW50OicpJyBleHBlY3RlZAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICBQc2lKYXZhVG9rZW46QVJST1coJy0+JykKKyAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICBQc2lMaXRlcmFsRXhwcmVzc2lvbjpudWxsCisgICAgICBQc2lKYXZhVG9rZW46TlVMTF9LRVlXT1JEKCdudWxsJykKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL2V4cHJlc3Npb25zL0xhbWJkYUV4cHJlc3Npb242LnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvZXhwcmVzc2lvbnMvTGFtYmRhRXhwcmVzc2lvbjYudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFjM2FjNjEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL2V4cHJlc3Npb25zL0xhbWJkYUV4cHJlc3Npb242LnR4dApAQCAtMCwwICsxLDIyIEBACitQc2lKYXZhRmlsZTpMYW1iZGFFeHByZXNzaW9uNi5qYXZhCisgIFBzaUxhbWJkYUV4cHJlc3Npb246KHAsIHYsIC0+IG51bGwKKyAgICBQc2lQYXJhbWV0ZXJMaXN0OihwLCB2LAorICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgIFBzaVBhcmFtZXRlcjpwCisgICAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgUHNpSWRlbnRpZmllcjpwKCdwJykKKyAgICAgIFBzaUphdmFUb2tlbjpDT01NQSgnLCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaVBhcmFtZXRlcjp2CisgICAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgUHNpSWRlbnRpZmllcjp2KCd2JykKKyAgICAgIFBzaUphdmFUb2tlbjpDT01NQSgnLCcpCisgICAgICBQc2lFcnJvckVsZW1lbnQ6UGFyYW1ldGVyIGV4cGVjdGVkCisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaUphdmFUb2tlbjpBUlJPVygnLT4nKQorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaUxpdGVyYWxFeHByZXNzaW9uOm51bGwKKyAgICAgIFBzaUphdmFUb2tlbjpOVUxMX0tFWVdPUkQoJ251bGwnKQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvZXhwcmVzc2lvbnMvTGFtYmRhRXhwcmVzc2lvbjcudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9leHByZXNzaW9ucy9MYW1iZGFFeHByZXNzaW9uNy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTZlYjNjZQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvZXhwcmVzc2lvbnMvTGFtYmRhRXhwcmVzc2lvbjcudHh0CkBAIC0wLDAgKzEsMTUgQEAKK1BzaUphdmFGaWxlOkxhbWJkYUV4cHJlc3Npb243LmphdmEKKyAgUHNpUGFyZW50aGVzaXplZEV4cHJlc3Npb246KHAgLT4gbnVsbCkKKyAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgIFBzaUxhbWJkYUV4cHJlc3Npb246cCAtPiBudWxsCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OnAKKyAgICAgICAgUHNpUGFyYW1ldGVyOnAKKyAgICAgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgICBQc2lJZGVudGlmaWVyOnAoJ3AnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lKYXZhVG9rZW46QVJST1coJy0+JykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpTGl0ZXJhbEV4cHJlc3Npb246bnVsbAorICAgICAgICBQc2lKYXZhVG9rZW46TlVMTF9LRVlXT1JEKCdudWxsJykKKyAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvZXhwcmVzc2lvbnMvTGFtYmRhRXhwcmVzc2lvbjgudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9leHByZXNzaW9ucy9MYW1iZGFFeHByZXNzaW9uOC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGFmNmEwMgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvZXhwcmVzc2lvbnMvTGFtYmRhRXhwcmVzc2lvbjgudHh0CkBAIC0wLDAgKzEsMjIgQEAKK1BzaUphdmFGaWxlOkxhbWJkYUV4cHJlc3Npb244LmphdmEKKyAgUHNpVHlwZUNhc3RFeHByZXNzaW9uOihJKShwKSAtPiBudWxsCisgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICBQc2lUeXBlRWxlbWVudDpJCisgICAgICBQc2lKYXZhQ29kZVJlZmVyZW5jZUVsZW1lbnQ6SQorICAgICAgICBQc2lJZGVudGlmaWVyOkkoJ0knKQorICAgICAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICBQc2lMYW1iZGFFeHByZXNzaW9uOihwKSAtPiBudWxsCisgICAgICBQc2lQYXJhbWV0ZXJMaXN0OihwKQorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lQYXJhbWV0ZXI6cAorICAgICAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICAgIFBzaUlkZW50aWZpZXI6cCgncCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUphdmFUb2tlbjpBUlJPVygnLT4nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lMaXRlcmFsRXhwcmVzc2lvbjpudWxsCisgICAgICAgIFBzaUphdmFUb2tlbjpOVUxMX0tFWVdPUkQoJ251bGwnKQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvZXhwcmVzc2lvbnMvTGFtYmRhRXhwcmVzc2lvbjkudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9leHByZXNzaW9ucy9MYW1iZGFFeHByZXNzaW9uOS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTBhYzRhOQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvZXhwcmVzc2lvbnMvTGFtYmRhRXhwcmVzc2lvbjkudHh0CkBAIC0wLDAgKzEsMjAgQEAKK1BzaUphdmFGaWxlOkxhbWJkYUV4cHJlc3Npb245LmphdmEKKyAgUHNpVHlwZUNhc3RFeHByZXNzaW9uOihJKXAgLT4gbnVsbAorICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgUHNpVHlwZUVsZW1lbnQ6SQorICAgICAgUHNpSmF2YUNvZGVSZWZlcmVuY2VFbGVtZW50OkkKKyAgICAgICAgUHNpSWRlbnRpZmllcjpJKCdJJykKKyAgICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgUHNpTGFtYmRhRXhwcmVzc2lvbjpwIC0+IG51bGwKKyAgICAgIFBzaVBhcmFtZXRlckxpc3Q6cAorICAgICAgICBQc2lQYXJhbWV0ZXI6cAorICAgICAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICAgIFBzaUlkZW50aWZpZXI6cCgncCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUphdmFUb2tlbjpBUlJPVygnLT4nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lMaXRlcmFsRXhwcmVzc2lvbjpudWxsCisgICAgICAgIFBzaUphdmFUb2tlbjpOVUxMX0tFWVdPUkQoJ251bGwnKQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvZXhwcmVzc2lvbnMvTWV0aG9kUmVmMC50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL2V4cHJlc3Npb25zL01ldGhvZFJlZjAudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI4ZDk0M2UKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL2V4cHJlc3Npb25zL01ldGhvZFJlZjAudHh0CkBAIC0wLDAgKzEsMjAgQEAKK1BzaUphdmFGaWxlOk1ldGhvZFJlZjAuamF2YQorICBQc2lNZXRob2RSZWZlcmVuY2VFeHByZXNzaW9uOmEuYi5DOjptCisgICAgUHNpUmVmZXJlbmNlRXhwcmVzc2lvbjphLmIuQworICAgICAgUHNpUmVmZXJlbmNlRXhwcmVzc2lvbjphLmIKKyAgICAgICAgUHNpUmVmZXJlbmNlRXhwcmVzc2lvbjphCisgICAgICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgICAgUHNpSWRlbnRpZmllcjphKCdhJykKKyAgICAgICAgUHNpSmF2YVRva2VuOkRPVCgnLicpCisgICAgICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgUHNpSWRlbnRpZmllcjpiKCdiJykKKyAgICAgIFBzaUphdmFUb2tlbjpET1QoJy4nKQorICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUlkZW50aWZpZXI6QygnQycpCisgICAgUHNpSmF2YVRva2VuOkRPVUJMRV9DT0xPTignOjonKQorICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaUlkZW50aWZpZXI6bSgnbScpClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9leHByZXNzaW9ucy9NZXRob2RSZWYxLnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvZXhwcmVzc2lvbnMvTWV0aG9kUmVmMS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTZkZTQ3YgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvZXhwcmVzc2lvbnMvTWV0aG9kUmVmMS50eHQKQEAgLTAsMCArMSwyNyBAQAorUHNpSmF2YUZpbGU6TWV0aG9kUmVmMS5qYXZhCisgIFBzaU1ldGhvZFJlZmVyZW5jZUV4cHJlc3Npb246YS5iLkM8VD46Om5ldworICAgIFBzaVR5cGVFbGVtZW50OmEuYi5DPFQ+CisgICAgICBQc2lKYXZhQ29kZVJlZmVyZW5jZUVsZW1lbnQ6YS5iLkM8VD4KKyAgICAgICAgUHNpSmF2YUNvZGVSZWZlcmVuY2VFbGVtZW50OmEuYgorICAgICAgICAgIFBzaUphdmFDb2RlUmVmZXJlbmNlRWxlbWVudDphCisgICAgICAgICAgICBQc2lJZGVudGlmaWVyOmEoJ2EnKQorICAgICAgICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgICBQc2lKYXZhVG9rZW46RE9UKCcuJykKKyAgICAgICAgICBQc2lJZGVudGlmaWVyOmIoJ2InKQorICAgICAgICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICBQc2lKYXZhVG9rZW46RE9UKCcuJykKKyAgICAgICAgUHNpSWRlbnRpZmllcjpDKCdDJykKKyAgICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICAgIFBzaUphdmFUb2tlbjpMVCgnPCcpCisgICAgICAgICAgUHNpVHlwZUVsZW1lbnQ6VAorICAgICAgICAgICAgUHNpSmF2YUNvZGVSZWZlcmVuY2VFbGVtZW50OlQKKyAgICAgICAgICAgICAgUHNpSWRlbnRpZmllcjpUKCdUJykKKyAgICAgICAgICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICAgIFBzaUphdmFUb2tlbjpHVCgnPicpCisgICAgUHNpSmF2YVRva2VuOkRPVUJMRV9DT0xPTignOjonKQorICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaUtleXdvcmQ6bmV3KCduZXcnKQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvZXhwcmVzc2lvbnMvTWV0aG9kUmVmMi50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL2V4cHJlc3Npb25zL01ldGhvZFJlZjIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM3NjNhYTUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL2V4cHJlc3Npb25zL01ldGhvZFJlZjIudHh0CkBAIC0wLDAgKzEsMTYgQEAKK1BzaUphdmFGaWxlOk1ldGhvZFJlZjIuamF2YQorICBQc2lNZXRob2RSZWZlcmVuY2VFeHByZXNzaW9uOkM6OjxUPm0KKyAgICBQc2lSZWZlcmVuY2VFeHByZXNzaW9uOkMKKyAgICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lJZGVudGlmaWVyOkMoJ0MnKQorICAgIFBzaUphdmFUb2tlbjpET1VCTEVfQ09MT04oJzo6JykKKyAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICBQc2lKYXZhVG9rZW46TFQoJzwnKQorICAgICAgUHNpVHlwZUVsZW1lbnQ6VAorICAgICAgICBQc2lKYXZhQ29kZVJlZmVyZW5jZUVsZW1lbnQ6VAorICAgICAgICAgIFBzaUlkZW50aWZpZXI6VCgnVCcpCisgICAgICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lKYXZhVG9rZW46R1QoJz4nKQorICAgIFBzaUlkZW50aWZpZXI6bSgnbScpCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL2V4cHJlc3Npb25zL01ldGhvZFJlZjMudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9leHByZXNzaW9ucy9NZXRob2RSZWYzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMTNjYzM0Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9leHByZXNzaW9ucy9NZXRob2RSZWYzLnR4dApAQCAtMCwwICsxLDE3IEBACitQc2lKYXZhRmlsZTpNZXRob2RSZWYzLmphdmEKKyAgUHNpTWV0aG9kUmVmZXJlbmNlRXhwcmVzc2lvbjphW2ldOjptCisgICAgUHNpQXJyYXlBY2Nlc3NFeHByZXNzaW9uOmFbaV0KKyAgICAgIFBzaVJlZmVyZW5jZUV4cHJlc3Npb246YQorICAgICAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgIFBzaUlkZW50aWZpZXI6YSgnYScpCisgICAgICBQc2lKYXZhVG9rZW46TEJSQUNLRVQoJ1snKQorICAgICAgUHNpUmVmZXJlbmNlRXhwcmVzc2lvbjppCisgICAgICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgUHNpSWRlbnRpZmllcjppKCdpJykKKyAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0tFVCgnXScpCisgICAgUHNpSmF2YVRva2VuOkRPVUJMRV9DT0xPTignOjonKQorICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaUlkZW50aWZpZXI6bSgnbScpCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL2V4cHJlc3Npb25zL01ldGhvZFJlZjQudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9leHByZXNzaW9ucy9NZXRob2RSZWY0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMWNmMjRiCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9leHByZXNzaW9ucy9NZXRob2RSZWY0LnR4dApAQCAtMCwwICsxLDExIEBACitQc2lKYXZhRmlsZTpNZXRob2RSZWY0LmphdmEKKyAgUHNpTWV0aG9kUmVmZXJlbmNlRXhwcmVzc2lvbjppbnRbXTo6Y2xvbmUKKyAgICBQc2lUeXBlRWxlbWVudDppbnRbXQorICAgICAgUHNpVHlwZUVsZW1lbnQ6aW50CisgICAgICAgIFBzaUtleXdvcmQ6aW50KCdpbnQnKQorICAgICAgUHNpSmF2YVRva2VuOkxCUkFDS0VUKCdbJykKKyAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0tFVCgnXScpCisgICAgUHNpSmF2YVRva2VuOkRPVUJMRV9DT0xPTignOjonKQorICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaUlkZW50aWZpZXI6Y2xvbmUoJ2Nsb25lJykKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL2V4cHJlc3Npb25zL01ldGhvZFJlZjUudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9leHByZXNzaW9ucy9NZXRob2RSZWY1LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YTgyMDcwCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9leHByZXNzaW9ucy9NZXRob2RSZWY1LnR4dApAQCAtMCwwICsxLDU1IEBACitQc2lKYXZhRmlsZTpNZXRob2RSZWY1LmphdmEKKyAgUHNpTWV0aG9kUmVmZXJlbmNlRXhwcmVzc2lvbjooZiA/IGxpc3QubWFwKFN0cmluZzo6bGVuZ3RoKSA6IENvbGxlY3Rpb25zLmVtcHR5TGlzdCgpKTo6aXRlcmF0b3IKKyAgICBQc2lQYXJlbnRoZXNpemVkRXhwcmVzc2lvbjooZiA/IGxpc3QubWFwKFN0cmluZzo6bGVuZ3RoKSA6IENvbGxlY3Rpb25zLmVtcHR5TGlzdCgpKQorICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgIFBzaUNvbmRpdGlvbmFsRXhwcmVzc2lvbjpmID8gbGlzdC5tYXAoU3RyaW5nOjpsZW5ndGgpIDogQ29sbGVjdGlvbnMuZW1wdHlMaXN0KCkKKyAgICAgICAgUHNpUmVmZXJlbmNlRXhwcmVzc2lvbjpmCisgICAgICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgICAgUHNpSWRlbnRpZmllcjpmKCdmJykKKyAgICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICAgIFBzaUphdmFUb2tlbjpRVUVTVCgnPycpCisgICAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgICBQc2lNZXRob2RDYWxsRXhwcmVzc2lvbjpsaXN0Lm1hcChTdHJpbmc6Omxlbmd0aCkKKyAgICAgICAgICBQc2lSZWZlcmVuY2VFeHByZXNzaW9uOmxpc3QubWFwCisgICAgICAgICAgICBQc2lSZWZlcmVuY2VFeHByZXNzaW9uOmxpc3QKKyAgICAgICAgICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICAgICAgICBQc2lJZGVudGlmaWVyOmxpc3QoJ2xpc3QnKQorICAgICAgICAgICAgUHNpSmF2YVRva2VuOkRPVCgnLicpCisgICAgICAgICAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICAgICAgUHNpSWRlbnRpZmllcjptYXAoJ21hcCcpCisgICAgICAgICAgUHNpRXhwcmVzc2lvbkxpc3QKKyAgICAgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgICAgICBQc2lNZXRob2RSZWZlcmVuY2VFeHByZXNzaW9uOlN0cmluZzo6bGVuZ3RoCisgICAgICAgICAgICAgIFBzaVJlZmVyZW5jZUV4cHJlc3Npb246U3RyaW5nCisgICAgICAgICAgICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgICAgICAgICAgUHNpSWRlbnRpZmllcjpTdHJpbmcoJ1N0cmluZycpCisgICAgICAgICAgICAgIFBzaUphdmFUb2tlbjpET1VCTEVfQ09MT04oJzo6JykKKyAgICAgICAgICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICAgICAgICBQc2lJZGVudGlmaWVyOmxlbmd0aCgnbGVuZ3RoJykKKyAgICAgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgICBQc2lKYXZhVG9rZW46Q09MT04oJzonKQorICAgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgICAgUHNpTWV0aG9kQ2FsbEV4cHJlc3Npb246Q29sbGVjdGlvbnMuZW1wdHlMaXN0KCkKKyAgICAgICAgICBQc2lSZWZlcmVuY2VFeHByZXNzaW9uOkNvbGxlY3Rpb25zLmVtcHR5TGlzdAorICAgICAgICAgICAgUHNpUmVmZXJlbmNlRXhwcmVzc2lvbjpDb2xsZWN0aW9ucworICAgICAgICAgICAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgICAgICAgIFBzaUlkZW50aWZpZXI6Q29sbGVjdGlvbnMoJ0NvbGxlY3Rpb25zJykKKyAgICAgICAgICAgIFBzaUphdmFUb2tlbjpET1QoJy4nKQorICAgICAgICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgICAgIFBzaUlkZW50aWZpZXI6ZW1wdHlMaXN0KCdlbXB0eUxpc3QnKQorICAgICAgICAgIFBzaUV4cHJlc3Npb25MaXN0CisgICAgICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgUHNpSmF2YVRva2VuOkRPVUJMRV9DT0xPTignOjonKQorICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaUlkZW50aWZpZXI6aXRlcmF0b3IoJ2l0ZXJhdG9yJykKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvZXhwcmVzc2lvbnMvTmV3MC50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL2V4cHJlc3Npb25zL05ldzAudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNlZjllOWMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL2V4cHJlc3Npb25zL05ldzAudHh0CkBAIC0wLDAgKzEsMTMgQEAKK1BzaUphdmFGaWxlOk5ldzAuamF2YQorICBQc2lOZXdFeHByZXNzaW9uOm5ldyBBKCkKKyAgICBQc2lLZXl3b3JkOm5ldygnbmV3JykKKyAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICBQc2lKYXZhQ29kZVJlZmVyZW5jZUVsZW1lbnQ6QQorICAgICAgUHNpSWRlbnRpZmllcjpBKCdBJykKKyAgICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpRXhwcmVzc2lvbkxpc3QKKyAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvZXhwcmVzc2lvbnMvTmV3MS50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL2V4cHJlc3Npb25zL05ldzEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc2YWE5YjcKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL2V4cHJlc3Npb25zL05ldzEudHh0CkBAIC0wLDAgKzEsMTYgQEAKK1BzaUphdmFGaWxlOk5ldzEuamF2YQorICBQc2lOZXdFeHByZXNzaW9uOm5ldyBBWzFdW10KKyAgICBQc2lLZXl3b3JkOm5ldygnbmV3JykKKyAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICBQc2lKYXZhQ29kZVJlZmVyZW5jZUVsZW1lbnQ6QQorICAgICAgUHNpSWRlbnRpZmllcjpBKCdBJykKKyAgICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpSmF2YVRva2VuOkxCUkFDS0VUKCdbJykKKyAgICBQc2lMaXRlcmFsRXhwcmVzc2lvbjoxCisgICAgICBQc2lKYXZhVG9rZW46SU5URUdFUl9MSVRFUkFMKCcxJykKKyAgICBQc2lKYXZhVG9rZW46UkJSQUNLRVQoJ10nKQorICAgIFBzaUphdmFUb2tlbjpMQlJBQ0tFVCgnWycpCisgICAgUHNpSmF2YVRva2VuOlJCUkFDS0VUKCddJykKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL2V4cHJlc3Npb25zL05ldzEwLnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvZXhwcmVzc2lvbnMvTmV3MTAudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI3MjA2NTgKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL2V4cHJlc3Npb25zL05ldzEwLnR4dApAQCAtMCwwICsxLDEyIEBACitQc2lKYXZhRmlsZTpOZXcxMC5qYXZhCisgIFBzaU5ld0V4cHJlc3Npb246bmV3IGludAorICAgIFBzaUtleXdvcmQ6bmV3KCduZXcnKQorICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaUtleXdvcmQ6aW50KCdpbnQnKQorICAgIFBzaUVycm9yRWxlbWVudDonWycgZXhwZWN0ZWQKKyAgICAgIDxlbXB0eSBsaXN0PgorICBQc2lFcnJvckVsZW1lbnQ6VW5wYXJzZWQgdG9rZW5zCisgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9leHByZXNzaW9ucy9OZXcxMS50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL2V4cHJlc3Npb25zL05ldzExLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OWE0Njg1YgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvZXhwcmVzc2lvbnMvTmV3MTEudHh0CkBAIC0wLDAgKzEsMTUgQEAKK1BzaUphdmFGaWxlOk5ldzExLmphdmEKKyAgUHNpTmV3RXhwcmVzc2lvbjpuZXcgU3RyaW5nWzAKKyAgICBQc2lLZXl3b3JkOm5ldygnbmV3JykKKyAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICBQc2lKYXZhQ29kZVJlZmVyZW5jZUVsZW1lbnQ6U3RyaW5nCisgICAgICBQc2lJZGVudGlmaWVyOlN0cmluZygnU3RyaW5nJykKKyAgICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpSmF2YVRva2VuOkxCUkFDS0VUKCdbJykKKyAgICBQc2lMaXRlcmFsRXhwcmVzc2lvbjowCisgICAgICBQc2lKYXZhVG9rZW46SU5URUdFUl9MSVRFUkFMKCcwJykKKyAgICBQc2lFcnJvckVsZW1lbnQ6J10nIGV4cGVjdGVkCisgICAgICA8ZW1wdHkgbGlzdD4KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvZXhwcmVzc2lvbnMvTmV3MTIudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9leHByZXNzaW9ucy9OZXcxMi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjBlNjY5YWMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL2V4cHJlc3Npb25zL05ldzEyLnR4dApAQCAtMCwwICsxLDE1IEBACitQc2lKYXZhRmlsZTpOZXcxMi5qYXZhCisgIFBzaU5ld0V4cHJlc3Npb246bmV3IGludFsxXVsyXQorICAgIFBzaUtleXdvcmQ6bmV3KCduZXcnKQorICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaUtleXdvcmQ6aW50KCdpbnQnKQorICAgIFBzaUphdmFUb2tlbjpMQlJBQ0tFVCgnWycpCisgICAgUHNpTGl0ZXJhbEV4cHJlc3Npb246MQorICAgICAgUHNpSmF2YVRva2VuOklOVEVHRVJfTElURVJBTCgnMScpCisgICAgUHNpSmF2YVRva2VuOlJCUkFDS0VUKCddJykKKyAgICBQc2lKYXZhVG9rZW46TEJSQUNLRVQoJ1snKQorICAgIFBzaUxpdGVyYWxFeHByZXNzaW9uOjIKKyAgICAgIFBzaUphdmFUb2tlbjpJTlRFR0VSX0xJVEVSQUwoJzInKQorICAgIFBzaUphdmFUb2tlbjpSQlJBQ0tFVCgnXScpCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL2V4cHJlc3Npb25zL05ldzEzLnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvZXhwcmVzc2lvbnMvTmV3MTMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMwMGNjYTIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL2V4cHJlc3Npb25zL05ldzEzLnR4dApAQCAtMCwwICsxLDE5IEBACitQc2lKYXZhRmlsZTpOZXcxMy5qYXZhCisgIFBzaU5ld0V4cHJlc3Npb246bmV3IGludFsxXVtdWworICAgIFBzaUtleXdvcmQ6bmV3KCduZXcnKQorICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaUtleXdvcmQ6aW50KCdpbnQnKQorICAgIFBzaUphdmFUb2tlbjpMQlJBQ0tFVCgnWycpCisgICAgUHNpTGl0ZXJhbEV4cHJlc3Npb246MQorICAgICAgUHNpSmF2YVRva2VuOklOVEVHRVJfTElURVJBTCgnMScpCisgICAgUHNpSmF2YVRva2VuOlJCUkFDS0VUKCddJykKKyAgICBQc2lKYXZhVG9rZW46TEJSQUNLRVQoJ1snKQorICAgIFBzaUphdmFUb2tlbjpSQlJBQ0tFVCgnXScpCisgICAgUHNpSmF2YVRva2VuOkxCUkFDS0VUKCdbJykKKyAgICBQc2lFcnJvckVsZW1lbnQ6J10nIGV4cGVjdGVkCisgICAgICA8ZW1wdHkgbGlzdD4KKyAgUHNpRXJyb3JFbGVtZW50OlVucGFyc2VkIHRva2VucworICAgIFBzaUphdmFUb2tlbjpJTlRFR0VSX0xJVEVSQUwoJzInKQorICAgIFBzaUphdmFUb2tlbjpSQlJBQ0tFVCgnXScpCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL2V4cHJlc3Npb25zL05ldzE0LnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvZXhwcmVzc2lvbnMvTmV3MTQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk3NjFkNzkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL2V4cHJlc3Npb25zL05ldzE0LnR4dApAQCAtMCwwICsxLDE4IEBACitQc2lKYXZhRmlsZTpOZXcxNC5qYXZhCisgIFBzaU5ld0V4cHJlc3Npb246US5uZXcgQSgpCisgICAgUHNpUmVmZXJlbmNlRXhwcmVzc2lvbjpRCisgICAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpSWRlbnRpZmllcjpRKCdRJykKKyAgICBQc2lKYXZhVG9rZW46RE9UKCcuJykKKyAgICBQc2lLZXl3b3JkOm5ldygnbmV3JykKKyAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICBQc2lKYXZhQ29kZVJlZmVyZW5jZUVsZW1lbnQ6QQorICAgICAgUHNpSWRlbnRpZmllcjpBKCdBJykKKyAgICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpRXhwcmVzc2lvbkxpc3QKKyAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9leHByZXNzaW9ucy9OZXcxNS50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL2V4cHJlc3Npb25zL05ldzE1LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYTFjZWEzCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9leHByZXNzaW9ucy9OZXcxNS50eHQKQEAgLTAsMCArMSwyMSBAQAorUHNpSmF2YUZpbGU6TmV3MTUuamF2YQorICBQc2lOZXdFeHByZXNzaW9uOm5ldyBDPD8+LkIoKQorICAgIFBzaUtleXdvcmQ6bmV3KCduZXcnKQorICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaUphdmFDb2RlUmVmZXJlbmNlRWxlbWVudDpDPD8+LkIKKyAgICAgIFBzaUphdmFDb2RlUmVmZXJlbmNlRWxlbWVudDpDPD8+CisgICAgICAgIFBzaUlkZW50aWZpZXI6QygnQycpCisgICAgICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgICAgICBQc2lKYXZhVG9rZW46TFQoJzwnKQorICAgICAgICAgIFBzaVR5cGVFbGVtZW50Oj8KKyAgICAgICAgICAgIFBzaUphdmFUb2tlbjpRVUVTVCgnPycpCisgICAgICAgICAgUHNpSmF2YVRva2VuOkdUKCc+JykKKyAgICAgIFBzaUphdmFUb2tlbjpET1QoJy4nKQorICAgICAgUHNpSWRlbnRpZmllcjpCKCdCJykKKyAgICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpRXhwcmVzc2lvbkxpc3QKKyAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvZXhwcmVzc2lvbnMvTmV3MTYudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9leHByZXNzaW9ucy9OZXcxNi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTBiZTBiMgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvZXhwcmVzc2lvbnMvTmV3MTYudHh0CkBAIC0wLDAgKzEsMTcgQEAKK1BzaUphdmFGaWxlOk5ldzE2LmphdmEKKyAgUHNpTmV3RXhwcmVzc2lvbjpuZXcgQzw+KCkKKyAgICBQc2lLZXl3b3JkOm5ldygnbmV3JykKKyAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICBQc2lKYXZhQ29kZVJlZmVyZW5jZUVsZW1lbnQ6Qzw+CisgICAgICBQc2lJZGVudGlmaWVyOkMoJ0MnKQorICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICBQc2lKYXZhVG9rZW46TFQoJzwnKQorICAgICAgICBQc2lUeXBlRWxlbWVudDoKKyAgICAgICAgICBQc2lUeXBlRWxlbWVudDpESUFNT05ECisgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgUHNpSmF2YVRva2VuOkdUKCc+JykKKyAgICBQc2lFeHByZXNzaW9uTGlzdAorICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9leHByZXNzaW9ucy9OZXcyLnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvZXhwcmVzc2lvbnMvTmV3Mi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjViMDc1ZAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvZXhwcmVzc2lvbnMvTmV3Mi50eHQKQEAgLTAsMCArMSwxNCBAQAorUHNpSmF2YUZpbGU6TmV3Mi5qYXZhCisgIFBzaU5ld0V4cHJlc3Npb246bmV3IEFbXQorICAgIFBzaUtleXdvcmQ6bmV3KCduZXcnKQorICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaUphdmFDb2RlUmVmZXJlbmNlRWxlbWVudDpBCisgICAgICBQc2lJZGVudGlmaWVyOkEoJ0EnKQorICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lKYXZhVG9rZW46TEJSQUNLRVQoJ1snKQorICAgIFBzaUphdmFUb2tlbjpSQlJBQ0tFVCgnXScpCisgICAgUHNpRXJyb3JFbGVtZW50OkFycmF5IGluaXRpYWxpemVyIGV4cGVjdGVkCisgICAgICA8ZW1wdHkgbGlzdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL2V4cHJlc3Npb25zL05ldzMudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9leHByZXNzaW9ucy9OZXczLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNTQ1Y2RiCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9leHByZXNzaW9ucy9OZXczLnR4dApAQCAtMCwwICsxLDE4IEBACitQc2lKYXZhRmlsZTpOZXczLmphdmEKKyAgUHNpTmV3RXhwcmVzc2lvbjpuZXcgQVtdWworICAgIFBzaUtleXdvcmQ6bmV3KCduZXcnKQorICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaUphdmFDb2RlUmVmZXJlbmNlRWxlbWVudDpBCisgICAgICBQc2lJZGVudGlmaWVyOkEoJ0EnKQorICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lKYXZhVG9rZW46TEJSQUNLRVQoJ1snKQorICAgIFBzaUphdmFUb2tlbjpSQlJBQ0tFVCgnXScpCisgICAgUHNpSmF2YVRva2VuOkxCUkFDS0VUKCdbJykKKyAgICBQc2lFcnJvckVsZW1lbnQ6J10nIGV4cGVjdGVkCisgICAgICA8ZW1wdHkgbGlzdD4KKyAgUHNpRXJyb3JFbGVtZW50OlVucGFyc2VkIHRva2VucworICAgIFBzaUphdmFUb2tlbjpJTlRFR0VSX0xJVEVSQUwoJzEnKQorICAgIFBzaUphdmFUb2tlbjpSQlJBQ0tFVCgnXScpCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL2V4cHJlc3Npb25zL05ldzQudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9leHByZXNzaW9ucy9OZXc0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMmZmNTFlCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9leHByZXNzaW9ucy9OZXc0LnR4dApAQCAtMCwwICsxLDE5IEBACitQc2lKYXZhRmlsZTpOZXc0LmphdmEKKyAgUHNpTmV3RXhwcmVzc2lvbjpuZXcgQVtdW117bnVsbH0KKyAgICBQc2lLZXl3b3JkOm5ldygnbmV3JykKKyAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICBQc2lKYXZhQ29kZVJlZmVyZW5jZUVsZW1lbnQ6QQorICAgICAgUHNpSWRlbnRpZmllcjpBKCdBJykKKyAgICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpSmF2YVRva2VuOkxCUkFDS0VUKCdbJykKKyAgICBQc2lKYXZhVG9rZW46UkJSQUNLRVQoJ10nKQorICAgIFBzaUphdmFUb2tlbjpMQlJBQ0tFVCgnWycpCisgICAgUHNpSmF2YVRva2VuOlJCUkFDS0VUKCddJykKKyAgICBQc2lBcnJheUluaXRpYWxpemVyRXhwcmVzc2lvbjp7bnVsbH0KKyAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgUHNpTGl0ZXJhbEV4cHJlc3Npb246bnVsbAorICAgICAgICBQc2lKYXZhVG9rZW46TlVMTF9LRVlXT1JEKCdudWxsJykKKyAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9leHByZXNzaW9ucy9OZXc1LnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvZXhwcmVzc2lvbnMvTmV3NS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzc3MDYxMwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvZXhwcmVzc2lvbnMvTmV3NS50eHQKQEAgLTAsMCArMSwxOCBAQAorUHNpSmF2YUZpbGU6TmV3NS5qYXZhCisgIFBzaU5ld0V4cHJlc3Npb246bmV3IEFbMV0KKyAgICBQc2lLZXl3b3JkOm5ldygnbmV3JykKKyAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICBQc2lKYXZhQ29kZVJlZmVyZW5jZUVsZW1lbnQ6QQorICAgICAgUHNpSWRlbnRpZmllcjpBKCdBJykKKyAgICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpSmF2YVRva2VuOkxCUkFDS0VUKCdbJykKKyAgICBQc2lMaXRlcmFsRXhwcmVzc2lvbjoxCisgICAgICBQc2lKYXZhVG9rZW46SU5URUdFUl9MSVRFUkFMKCcxJykKKyAgICBQc2lKYXZhVG9rZW46UkJSQUNLRVQoJ10nKQorICBQc2lFcnJvckVsZW1lbnQ6VW5wYXJzZWQgdG9rZW5zCisgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgUHNpSmF2YVRva2VuOk5VTExfS0VZV09SRCgnbnVsbCcpCisgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL2V4cHJlc3Npb25zL05ldzYudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9leHByZXNzaW9ucy9OZXc2LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNzY3YzkwCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9leHByZXNzaW9ucy9OZXc2LnR4dApAQCAtMCwwICsxLDcgQEAKK1BzaUphdmFGaWxlOk5ldzYuamF2YQorICBQc2lOZXdFeHByZXNzaW9uOm5ldworICAgIFBzaUtleXdvcmQ6bmV3KCduZXcnKQorICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaUVycm9yRWxlbWVudDpJZGVudGlmaWVyIGV4cGVjdGVkCisgICAgICA8ZW1wdHkgbGlzdD4KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvZXhwcmVzc2lvbnMvTmV3Ny50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL2V4cHJlc3Npb25zL05ldzcudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg1ZTRiYjMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL2V4cHJlc3Npb25zL05ldzcudHh0CkBAIC0wLDAgKzEsMTIgQEAKK1BzaUphdmFGaWxlOk5ldzcuamF2YQorICBQc2lOZXdFeHByZXNzaW9uOm5ldyBBCisgICAgUHNpS2V5d29yZDpuZXcoJ25ldycpCisgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgUHNpSmF2YUNvZGVSZWZlcmVuY2VFbGVtZW50OkEKKyAgICAgIFBzaUlkZW50aWZpZXI6QSgnQScpCisgICAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaUVycm9yRWxlbWVudDonKCcgb3IgJ1snIGV4cGVjdGVkCisgICAgICA8ZW1wdHkgbGlzdD4KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvZXhwcmVzc2lvbnMvTmV3OC50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL2V4cHJlc3Npb25zL05ldzgudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJhMDJmZDQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL2V4cHJlc3Npb25zL05ldzgudHh0CkBAIC0wLDAgKzEsMTMgQEAKK1BzaUphdmFGaWxlOk5ldzguamF2YQorICBQc2lOZXdFeHByZXNzaW9uOm5ldyBBWworICAgIFBzaUtleXdvcmQ6bmV3KCduZXcnKQorICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaUphdmFDb2RlUmVmZXJlbmNlRWxlbWVudDpBCisgICAgICBQc2lJZGVudGlmaWVyOkEoJ0EnKQorICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lKYXZhVG9rZW46TEJSQUNLRVQoJ1snKQorICAgIFBzaUVycm9yRWxlbWVudDonXScgZXhwZWN0ZWQKKyAgICAgIDxlbXB0eSBsaXN0PgpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9leHByZXNzaW9ucy9OZXc5LnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvZXhwcmVzc2lvbnMvTmV3OS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNThlZGU1YgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvZXhwcmVzc2lvbnMvTmV3OS50eHQKQEAgLTAsMCArMSw5IEBACitQc2lKYXZhRmlsZTpOZXc5LmphdmEKKyAgUHNpTmV3RXhwcmVzc2lvbjpuZXcgaW50CisgICAgUHNpS2V5d29yZDpuZXcoJ25ldycpCisgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgUHNpS2V5d29yZDppbnQoJ2ludCcpCisgICAgUHNpRXJyb3JFbGVtZW50OidbJyBleHBlY3RlZAorICAgICAgPGVtcHR5IGxpc3Q+CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL2V4cHJlc3Npb25zL05ld0luRXhwckxpc3QudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9leHByZXNzaW9ucy9OZXdJbkV4cHJMaXN0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OWI5ZmI2Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9leHByZXNzaW9ucy9OZXdJbkV4cHJMaXN0LnR4dApAQCAtMCwwICsxLDE1IEBACitQc2lKYXZhRmlsZTpOZXdJbkV4cHJMaXN0LmphdmEKKyAgUHNpTWV0aG9kQ2FsbEV4cHJlc3Npb246Y2FsbChuZXcpCisgICAgUHNpUmVmZXJlbmNlRXhwcmVzc2lvbjpjYWxsCisgICAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpSWRlbnRpZmllcjpjYWxsKCdjYWxsJykKKyAgICBQc2lFeHByZXNzaW9uTGlzdAorICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgIFBzaU5ld0V4cHJlc3Npb246bmV3CisgICAgICAgIFBzaUtleXdvcmQ6bmV3KCduZXcnKQorICAgICAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgIFBzaUVycm9yRWxlbWVudDpJZGVudGlmaWVyIGV4cGVjdGVkCisgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9leHByZXNzaW9ucy9Ob3QwLnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvZXhwcmVzc2lvbnMvTm90MC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmM2YjZjYQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvZXhwcmVzc2lvbnMvTm90MC50eHQKQEAgLTAsMCArMSw5IEBACitQc2lKYXZhRmlsZTpOb3QwLmphdmEKKyAgUHNpUHJlZml4RXhwcmVzc2lvbjohIWEKKyAgICBQc2lKYXZhVG9rZW46RVhDTCgnIScpCisgICAgUHNpUHJlZml4RXhwcmVzc2lvbjohYQorICAgICAgUHNpSmF2YVRva2VuOkVYQ0woJyEnKQorICAgICAgUHNpUmVmZXJlbmNlRXhwcmVzc2lvbjphCisgICAgICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgUHNpSWRlbnRpZmllcjphKCdhJykKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvZXhwcmVzc2lvbnMvTm90MS50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL2V4cHJlc3Npb25zL05vdDEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNhZDVkYmEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL2V4cHJlc3Npb25zL05vdDEudHh0CkBAIC0wLDAgKzEsNSBAQAorUHNpSmF2YUZpbGU6Tm90MS5qYXZhCisgIFBzaVByZWZpeEV4cHJlc3Npb246IQorICAgIFBzaUphdmFUb2tlbjpFWENMKCchJykKKyAgICBQc2lFcnJvckVsZW1lbnQ6RXhwcmVzc2lvbiBleHBlY3RlZAorICAgICAgPGVtcHR5IGxpc3Q+CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL2V4cHJlc3Npb25zL09yMC50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL2V4cHJlc3Npb25zL09yMC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTZjZjRlMAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvZXhwcmVzc2lvbnMvT3IwLnR4dApAQCAtMCwwICsxLDIwIEBACitQc2lKYXZhRmlsZTpPcjAuamF2YQorICBQc2lQb2x5YWRpY0V4cHJlc3Npb246IGEgfCBiIHwgYworICAgIFBzaVJlZmVyZW5jZUV4cHJlc3Npb246YQorICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUlkZW50aWZpZXI6YSgnYScpCisgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgUHNpSmF2YVRva2VuOk9SKCd8JykKKyAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICBQc2lSZWZlcmVuY2VFeHByZXNzaW9uOmIKKyAgICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lJZGVudGlmaWVyOmIoJ2InKQorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaUphdmFUb2tlbjpPUignfCcpCisgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgUHNpUmVmZXJlbmNlRXhwcmVzc2lvbjpjCisgICAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpSWRlbnRpZmllcjpjKCdjJykKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL2V4cHJlc3Npb25zL09yMS50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL2V4cHJlc3Npb25zL09yMS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjg4OTRlYWEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL2V4cHJlc3Npb25zL09yMS50eHQKQEAgLTAsMCArMSwxMCBAQAorUHNpSmF2YUZpbGU6T3IxLmphdmEKKyAgUHNpQmluYXJ5RXhwcmVzc2lvbjphIHwKKyAgICBQc2lSZWZlcmVuY2VFeHByZXNzaW9uOmEKKyAgICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lJZGVudGlmaWVyOmEoJ2EnKQorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaUphdmFUb2tlbjpPUignfCcpCisgICAgUHNpRXJyb3JFbGVtZW50OkV4cHJlc3Npb24gZXhwZWN0ZWQKKyAgICAgIDxlbXB0eSBsaXN0PgpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9leHByZXNzaW9ucy9QYXJlbnRoMC50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL2V4cHJlc3Npb25zL1BhcmVudGgwLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zM2JlZmM2Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9leHByZXNzaW9ucy9QYXJlbnRoMC50eHQKQEAgLTAsMCArMSw4IEBACitQc2lKYXZhRmlsZTpQYXJlbnRoMC5qYXZhCisgIFBzaVBhcmVudGhlc2l6ZWRFeHByZXNzaW9uOihjKQorICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgUHNpUmVmZXJlbmNlRXhwcmVzc2lvbjpjCisgICAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpSWRlbnRpZmllcjpjKCdjJykKKyAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9leHByZXNzaW9ucy9QYXJlbnRoMS50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL2V4cHJlc3Npb25zL1BhcmVudGgxLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZWVmYzkzCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9leHByZXNzaW9ucy9QYXJlbnRoMS50eHQKQEAgLTAsMCArMSwxNSBAQAorUHNpSmF2YUZpbGU6UGFyZW50aDEuamF2YQorICBQc2lQb3N0Zml4RXhwcmVzc2lvbjoodGhpcykuZi0tCisgICAgUHNpUmVmZXJlbmNlRXhwcmVzc2lvbjoodGhpcykuZgorICAgICAgUHNpUGFyZW50aGVzaXplZEV4cHJlc3Npb246KHRoaXMpCisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaVRoaXNFeHByZXNzaW9uOnRoaXMKKyAgICAgICAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgICBQc2lLZXl3b3JkOnRoaXMoJ3RoaXMnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpSmF2YVRva2VuOkRPVCgnLicpCisgICAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpSWRlbnRpZmllcjpmKCdmJykKKyAgICBQc2lKYXZhVG9rZW46TUlOVVNNSU5VUygnLS0nKQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9leHByZXNzaW9ucy9QYXJlbnRoMi50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL2V4cHJlc3Npb25zL1BhcmVudGgyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YTFhMzViCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9leHByZXNzaW9ucy9QYXJlbnRoMi50eHQKQEAgLTAsMCArMSw1IEBACitQc2lKYXZhRmlsZTpQYXJlbnRoMi5qYXZhCisgIFBzaVBhcmVudGhlc2l6ZWRFeHByZXNzaW9uOigKKyAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgIFBzaUVycm9yRWxlbWVudDpFeHByZXNzaW9uIGV4cGVjdGVkCisgICAgICA8ZW1wdHkgbGlzdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL2V4cHJlc3Npb25zL1BhcmVudGgzLnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvZXhwcmVzc2lvbnMvUGFyZW50aDMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc4NmNiZWUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL2V4cHJlc3Npb25zL1BhcmVudGgzLnR4dApAQCAtMCwwICsxLDE2IEBACitQc2lKYXZhRmlsZTpQYXJlbnRoMy5qYXZhCisgIFBzaVBhcmVudGhlc2l6ZWRFeHByZXNzaW9uOihhIDwgYikKKyAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgIFBzaUJpbmFyeUV4cHJlc3Npb246YSA8IGIKKyAgICAgIFBzaVJlZmVyZW5jZUV4cHJlc3Npb246YQorICAgICAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgIFBzaUlkZW50aWZpZXI6YSgnYScpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUphdmFUb2tlbjpMVCgnPCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaVJlZmVyZW5jZUV4cHJlc3Npb246YgorICAgICAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgIFBzaUlkZW50aWZpZXI6YignYicpCisgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvZXhwcmVzc2lvbnMvUGluZXNJblJlZmVyZW5jZUV4cHJlc3Npb24wLnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvZXhwcmVzc2lvbnMvUGluZXNJblJlZmVyZW5jZUV4cHJlc3Npb24wLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iODI0ZWUxCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9leHByZXNzaW9ucy9QaW5lc0luUmVmZXJlbmNlRXhwcmVzc2lvbjAudHh0CkBAIC0wLDAgKzEsMjIgQEAKK1BzaUphdmFGaWxlOlBpbmVzSW5SZWZlcmVuY2VFeHByZXNzaW9uMC5qYXZhCisgIFBzaU1ldGhvZENhbGxFeHByZXNzaW9uOkNvbGxlY3Rpb25zLjxTdHJpbmc+c29ydChudWxsKQorICAgIFBzaVJlZmVyZW5jZUV4cHJlc3Npb246Q29sbGVjdGlvbnMuPFN0cmluZz5zb3J0CisgICAgICBQc2lSZWZlcmVuY2VFeHByZXNzaW9uOkNvbGxlY3Rpb25zCisgICAgICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgUHNpSWRlbnRpZmllcjpDb2xsZWN0aW9ucygnQ29sbGVjdGlvbnMnKQorICAgICAgUHNpSmF2YVRva2VuOkRPVCgnLicpCisgICAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICAgIFBzaUphdmFUb2tlbjpMVCgnPCcpCisgICAgICAgIFBzaVR5cGVFbGVtZW50OlN0cmluZworICAgICAgICAgIFBzaUphdmFDb2RlUmVmZXJlbmNlRWxlbWVudDpTdHJpbmcKKyAgICAgICAgICAgIFBzaUlkZW50aWZpZXI6U3RyaW5nKCdTdHJpbmcnKQorICAgICAgICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgUHNpSmF2YVRva2VuOkdUKCc+JykKKyAgICAgIFBzaUlkZW50aWZpZXI6c29ydCgnc29ydCcpCisgICAgUHNpRXhwcmVzc2lvbkxpc3QKKyAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICBQc2lMaXRlcmFsRXhwcmVzc2lvbjpudWxsCisgICAgICAgIFBzaUphdmFUb2tlbjpOVUxMX0tFWVdPUkQoJ251bGwnKQorICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvZXhwcmVzc2lvbnMvUGluZXNJblJlZmVyZW5jZUV4cHJlc3Npb24xLnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvZXhwcmVzc2lvbnMvUGluZXNJblJlZmVyZW5jZUV4cHJlc3Npb24xLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YjgyMWZkCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9leHByZXNzaW9ucy9QaW5lc0luUmVmZXJlbmNlRXhwcmVzc2lvbjEudHh0CkBAIC0wLDAgKzEsMjIgQEAKK1BzaUphdmFGaWxlOlBpbmVzSW5SZWZlcmVuY2VFeHByZXNzaW9uMS5qYXZhCisgIFBzaU1ldGhvZENhbGxFeHByZXNzaW9uOnRoaXMuPFN0cmluZz5zb3J0KG51bGwpCisgICAgUHNpUmVmZXJlbmNlRXhwcmVzc2lvbjp0aGlzLjxTdHJpbmc+c29ydAorICAgICAgUHNpVGhpc0V4cHJlc3Npb246dGhpcworICAgICAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgIFBzaUtleXdvcmQ6dGhpcygndGhpcycpCisgICAgICBQc2lKYXZhVG9rZW46RE9UKCcuJykKKyAgICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgICAgUHNpSmF2YVRva2VuOkxUKCc8JykKKyAgICAgICAgUHNpVHlwZUVsZW1lbnQ6U3RyaW5nCisgICAgICAgICAgUHNpSmF2YUNvZGVSZWZlcmVuY2VFbGVtZW50OlN0cmluZworICAgICAgICAgICAgUHNpSWRlbnRpZmllcjpTdHJpbmcoJ1N0cmluZycpCisgICAgICAgICAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICBQc2lKYXZhVG9rZW46R1QoJz4nKQorICAgICAgUHNpSWRlbnRpZmllcjpzb3J0KCdzb3J0JykKKyAgICBQc2lFeHByZXNzaW9uTGlzdAorICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgIFBzaUxpdGVyYWxFeHByZXNzaW9uOm51bGwKKyAgICAgICAgUHNpSmF2YVRva2VuOk5VTExfS0VZV09SRCgnbnVsbCcpCisgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9leHByZXNzaW9ucy9QaW5lc0luUmVmZXJlbmNlRXhwcmVzc2lvbjIudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9leHByZXNzaW9ucy9QaW5lc0luUmVmZXJlbmNlRXhwcmVzc2lvbjIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUyYjM3ZDMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL2V4cHJlc3Npb25zL1BpbmVzSW5SZWZlcmVuY2VFeHByZXNzaW9uMi50eHQKQEAgLTAsMCArMSwxNyBAQAorUHNpSmF2YUZpbGU6UGluZXNJblJlZmVyZW5jZUV4cHJlc3Npb24yLmphdmEKKyAgUHNpTWV0aG9kQ2FsbEV4cHJlc3Npb246PFN0cmluZz5zdXBlcihudWxsKQorICAgIFBzaVJlZmVyZW5jZUV4cHJlc3Npb246PFN0cmluZz5zdXBlcgorICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICBQc2lKYXZhVG9rZW46TFQoJzwnKQorICAgICAgICBQc2lUeXBlRWxlbWVudDpTdHJpbmcKKyAgICAgICAgICBQc2lKYXZhQ29kZVJlZmVyZW5jZUVsZW1lbnQ6U3RyaW5nCisgICAgICAgICAgICBQc2lJZGVudGlmaWVyOlN0cmluZygnU3RyaW5nJykKKyAgICAgICAgICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgIFBzaUphdmFUb2tlbjpHVCgnPicpCisgICAgICBQc2lLZXl3b3JkOnN1cGVyKCdzdXBlcicpCisgICAgUHNpRXhwcmVzc2lvbkxpc3QKKyAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICBQc2lMaXRlcmFsRXhwcmVzc2lvbjpudWxsCisgICAgICAgIFBzaUphdmFUb2tlbjpOVUxMX0tFWVdPUkQoJ251bGwnKQorICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL2V4cHJlc3Npb25zL1ByaW1pdGl2ZUNsYXNzT2JqZWN0QWNjZXNzLnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvZXhwcmVzc2lvbnMvUHJpbWl0aXZlQ2xhc3NPYmplY3RBY2Nlc3MudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ4YmRiYWYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL2V4cHJlc3Npb25zL1ByaW1pdGl2ZUNsYXNzT2JqZWN0QWNjZXNzLnR4dApAQCAtMCwwICsxLDYgQEAKK1BzaUphdmFGaWxlOlByaW1pdGl2ZUNsYXNzT2JqZWN0QWNjZXNzLmphdmEKKyAgUHNpQ2xhc3NPYmplY3RBY2Nlc3NFeHByZXNzaW9uOmludC5jbGFzcworICAgIFBzaVR5cGVFbGVtZW50OmludAorICAgICAgUHNpS2V5d29yZDppbnQoJ2ludCcpCisgICAgUHNpSmF2YVRva2VuOkRPVCgnLicpCisgICAgUHNpS2V5d29yZDpjbGFzcygnY2xhc3MnKQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9leHByZXNzaW9ucy9QcmltaXRpdmVGaWVsZEFjY2Vzcy50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL2V4cHJlc3Npb25zL1ByaW1pdGl2ZUZpZWxkQWNjZXNzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xM2UzNWFiCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9leHByZXNzaW9ucy9QcmltaXRpdmVGaWVsZEFjY2Vzcy50eHQKQEAgLTAsMCArMSwxMSBAQAorUHNpSmF2YUZpbGU6UHJpbWl0aXZlRmllbGRBY2Nlc3MuamF2YQorICBQc2lSZWZlcmVuY2VFeHByZXNzaW9uOmludC54CisgICAgUHNpQ2xhc3NPYmplY3RBY2Nlc3NFeHByZXNzaW9uOmludAorICAgICAgUHNpVHlwZUVsZW1lbnQ6aW50CisgICAgICAgIFBzaUtleXdvcmQ6aW50KCdpbnQnKQorICAgICAgUHNpRXJyb3JFbGVtZW50Oi5jbGFzcyBleHBlY3RlZAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lKYXZhVG9rZW46RE9UKCcuJykKKyAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lJZGVudGlmaWVyOngoJ3gnKQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvZXhwcmVzc2lvbnMvUXVhbGlmaWVkU3VwZXJNZXRob2RDYWxsMC50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL2V4cHJlc3Npb25zL1F1YWxpZmllZFN1cGVyTWV0aG9kQ2FsbDAudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZiMjI3MDAKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL2V4cHJlc3Npb25zL1F1YWxpZmllZFN1cGVyTWV0aG9kQ2FsbDAudHh0CkBAIC0wLDAgKzEsMjIgQEAKK1BzaUphdmFGaWxlOlF1YWxpZmllZFN1cGVyTWV0aG9kQ2FsbDAuamF2YQorICBQc2lNZXRob2RDYWxsRXhwcmVzc2lvbjpuZXcgRCgpLnN1cGVyKDApCisgICAgUHNpUmVmZXJlbmNlRXhwcmVzc2lvbjpuZXcgRCgpLnN1cGVyCisgICAgICBQc2lOZXdFeHByZXNzaW9uOm5ldyBEKCkKKyAgICAgICAgUHNpS2V5d29yZDpuZXcoJ25ldycpCisgICAgICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICAgIFBzaUphdmFDb2RlUmVmZXJlbmNlRWxlbWVudDpECisgICAgICAgICAgUHNpSWRlbnRpZmllcjpEKCdEJykKKyAgICAgICAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgUHNpRXhwcmVzc2lvbkxpc3QKKyAgICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lKYXZhVG9rZW46RE9UKCcuJykKKyAgICAgIFBzaUtleXdvcmQ6c3VwZXIoJ3N1cGVyJykKKyAgICBQc2lFeHByZXNzaW9uTGlzdAorICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgIFBzaUxpdGVyYWxFeHByZXNzaW9uOjAKKyAgICAgICAgUHNpSmF2YVRva2VuOklOVEVHRVJfTElURVJBTCgnMCcpCisgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9leHByZXNzaW9ucy9RdWFsaWZpZWRTdXBlck1ldGhvZENhbGwxLnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvZXhwcmVzc2lvbnMvUXVhbGlmaWVkU3VwZXJNZXRob2RDYWxsMS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzA4ZWI3MWMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL2V4cHJlc3Npb25zL1F1YWxpZmllZFN1cGVyTWV0aG9kQ2FsbDEudHh0CkBAIC0wLDAgKzEsMTQgQEAKK1BzaUphdmFGaWxlOlF1YWxpZmllZFN1cGVyTWV0aG9kQ2FsbDEuamF2YQorICBQc2lNZXRob2RDYWxsRXhwcmVzc2lvbjpkLnN1cGVyKDApCisgICAgUHNpUmVmZXJlbmNlRXhwcmVzc2lvbjpkLnN1cGVyCisgICAgICBQc2lSZWZlcmVuY2VFeHByZXNzaW9uOmQKKyAgICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICBQc2lJZGVudGlmaWVyOmQoJ2QnKQorICAgICAgUHNpSmF2YVRva2VuOkRPVCgnLicpCisgICAgICBQc2lLZXl3b3JkOnN1cGVyKCdzdXBlcicpCisgICAgUHNpRXhwcmVzc2lvbkxpc3QKKyAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICBQc2lMaXRlcmFsRXhwcmVzc2lvbjowCisgICAgICAgIFBzaUphdmFUb2tlbjpJTlRFR0VSX0xJVEVSQUwoJzAnKQorICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvZXhwcmVzc2lvbnMvUXVhbGlmaWVkU3VwZXJNZXRob2RDYWxsMi50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL2V4cHJlc3Npb25zL1F1YWxpZmllZFN1cGVyTWV0aG9kQ2FsbDIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg1M2FjM2UKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL2V4cHJlc3Npb25zL1F1YWxpZmllZFN1cGVyTWV0aG9kQ2FsbDIudHh0CkBAIC0wLDAgKzEsMzEgQEAKK1BzaUphdmFGaWxlOlF1YWxpZmllZFN1cGVyTWV0aG9kQ2FsbDIuamF2YQorICBQc2lNZXRob2RDYWxsRXhwcmVzc2lvbjoobmV3IE8oKSkuPFQ+c3VwZXIoKQorICAgIFBzaVJlZmVyZW5jZUV4cHJlc3Npb246KG5ldyBPKCkpLjxUPnN1cGVyCisgICAgICBQc2lQYXJlbnRoZXNpemVkRXhwcmVzc2lvbjoobmV3IE8oKSkKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpTmV3RXhwcmVzc2lvbjpuZXcgTygpCisgICAgICAgICAgUHNpS2V5d29yZDpuZXcoJ25ldycpCisgICAgICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICAgICAgUHNpSmF2YUNvZGVSZWZlcmVuY2VFbGVtZW50Ok8KKyAgICAgICAgICAgIFBzaUlkZW50aWZpZXI6TygnTycpCisgICAgICAgICAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICAgIFBzaUV4cHJlc3Npb25MaXN0CisgICAgICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaUphdmFUb2tlbjpET1QoJy4nKQorICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICBQc2lKYXZhVG9rZW46TFQoJzwnKQorICAgICAgICBQc2lUeXBlRWxlbWVudDpUCisgICAgICAgICAgUHNpSmF2YUNvZGVSZWZlcmVuY2VFbGVtZW50OlQKKyAgICAgICAgICAgIFBzaUlkZW50aWZpZXI6VCgnVCcpCisgICAgICAgICAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICBQc2lKYXZhVG9rZW46R1QoJz4nKQorICAgICAgUHNpS2V5d29yZDpzdXBlcignc3VwZXInKQorICAgIFBzaUV4cHJlc3Npb25MaXN0CisgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvZXhwcmVzc2lvbnMvU2hpZnRSaWdodC50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL2V4cHJlc3Npb25zL1NoaWZ0UmlnaHQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg2ZDlmYzY4Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9leHByZXNzaW9ucy9TaGlmdFJpZ2h0LnR4dApAQCAtMCwwICsxLDExIEBACitQc2lKYXZhRmlsZTpTaGlmdFJpZ2h0LmphdmEKKyAgUHNpQXNzaWdubWVudEV4cHJlc3Npb246eCA+Pj0gMgorICAgIFBzaVJlZmVyZW5jZUV4cHJlc3Npb246eAorICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUlkZW50aWZpZXI6eCgneCcpCisgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgUHNpSmF2YVRva2VuOkdUR1RFUSgnPj49JykKKyAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICBQc2lMaXRlcmFsRXhwcmVzc2lvbjoyCisgICAgICBQc2lKYXZhVG9rZW46SU5URUdFUl9MSVRFUkFMKCcyJykKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvZXhwcmVzc2lvbnMvU3VwZXJNZXRob2RDYWxsVHlwZVBhcmFtZXRlckxpc3QudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9leHByZXNzaW9ucy9TdXBlck1ldGhvZENhbGxUeXBlUGFyYW1ldGVyTGlzdC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjE3YTc1NwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvZXhwcmVzc2lvbnMvU3VwZXJNZXRob2RDYWxsVHlwZVBhcmFtZXRlckxpc3QudHh0CkBAIC0wLDAgKzEsOSBAQAorUHNpSmF2YUZpbGU6U3VwZXJNZXRob2RDYWxsVHlwZVBhcmFtZXRlckxpc3QuamF2YQorICBQc2lNZXRob2RDYWxsRXhwcmVzc2lvbjpzdXBlcigpCisgICAgUHNpUmVmZXJlbmNlRXhwcmVzc2lvbjpzdXBlcgorICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUtleXdvcmQ6c3VwZXIoJ3N1cGVyJykKKyAgICBQc2lFeHByZXNzaW9uTGlzdAorICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL2ZpbGVzL0Fubm90YXRlZFBhY2thZ2UudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9maWxlcy9Bbm5vdGF0ZWRQYWNrYWdlLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjBjMmViCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9maWxlcy9Bbm5vdGF0ZWRQYWNrYWdlLnR4dApAQCAtMCwwICsxLDMxIEBACitQc2lKYXZhRmlsZTpBbm5vdGF0ZWRQYWNrYWdlLmphdmEKKyAgUHNpUGFja2FnZVN0YXRlbWVudDphLmIuYworICAgIFBzaU1vZGlmaWVyTGlzdDpAQW5ubworICAgICAgUHNpQW5ub3RhdGlvbgorICAgICAgICBQc2lKYXZhVG9rZW46QVQoJ0AnKQorICAgICAgICBQc2lKYXZhQ29kZVJlZmVyZW5jZUVsZW1lbnQ6QW5ubworICAgICAgICAgIFBzaUlkZW50aWZpZXI6QW5ubygnQW5ubycpCisgICAgICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgIFBzaUFubm90YXRpb25QYXJhbWV0ZXJMaXN0CisgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgUHNpS2V5d29yZDpwYWNrYWdlKCdwYWNrYWdlJykKKyAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICBQc2lKYXZhQ29kZVJlZmVyZW5jZUVsZW1lbnQ6YS5iLmMKKyAgICAgIFBzaUphdmFDb2RlUmVmZXJlbmNlRWxlbWVudDphLmIKKyAgICAgICAgUHNpSmF2YUNvZGVSZWZlcmVuY2VFbGVtZW50OmEKKyAgICAgICAgICBQc2lJZGVudGlmaWVyOmEoJ2EnKQorICAgICAgICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICBQc2lKYXZhVG9rZW46RE9UKCcuJykKKyAgICAgICAgUHNpSWRlbnRpZmllcjpiKCdiJykKKyAgICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpSmF2YVRva2VuOkRPVCgnLicpCisgICAgICBQc2lJZGVudGlmaWVyOmMoJ2MnKQorICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lKYXZhVG9rZW46U0VNSUNPTE9OKCc7JykKKyAgUHNpSW1wb3J0TGlzdAorICAgIDxlbXB0eSBsaXN0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvZmlsZXMvQmluZEJlZm9yZTAudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9maWxlcy9CaW5kQmVmb3JlMC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzM0ZTQ5YQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvZmlsZXMvQmluZEJlZm9yZTAudHh0CkBAIC0wLDAgKzEsMjkgQEAKK1BzaUphdmFGaWxlOkJpbmRCZWZvcmUwLmphdmEKKyAgUHNpSW1wb3J0TGlzdAorICAgIDxlbXB0eSBsaXN0PgorICBQc2lDbGFzczpBCisgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpS2V5d29yZDpjbGFzcygnY2xhc3MnKQorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaUlkZW50aWZpZXI6QSgnQScpCisgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuICAnKQorICAgIFBzaUZpZWxkOmZpZWxkCisgICAgICBQc2lDb21tZW50KEVORF9PRl9MSU5FX0NPTU1FTlQpKCcvLyBjb21tZW50JykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OmludAorICAgICAgICBQc2lLZXl3b3JkOmludCgnaW50JykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmaWVsZCgnZmllbGQnKQorICAgICAgUHNpSmF2YVRva2VuOlNFTUlDT0xPTignOycpCisgICAgUHNpV2hpdGVTcGFjZSgnXG4nKQorICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9maWxlcy9CaW5kQmVmb3JlMS50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL2ZpbGVzL0JpbmRCZWZvcmUxLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNTkzNjcwCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9maWxlcy9CaW5kQmVmb3JlMS50eHQKQEAgLTAsMCArMSwyOSBAQAorUHNpSmF2YUZpbGU6QmluZEJlZm9yZTEuamF2YQorICBQc2lJbXBvcnRMaXN0CisgICAgPGVtcHR5IGxpc3Q+CisgIFBzaUNsYXNzOkEKKyAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lLZXl3b3JkOmNsYXNzKCdjbGFzcycpCisgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgUHNpSWRlbnRpZmllcjpBKCdBJykKKyAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgUHNpV2hpdGVTcGFjZSgnXG4gICcpCisgICAgUHNpQ29tbWVudChFTkRfT0ZfTElORV9DT01NRU5UKSgnLy8gY29tbWVudCcpCisgICAgUHNpV2hpdGVTcGFjZSgnXG5cbiAgJykKKyAgICBQc2lGaWVsZDpmaWVsZAorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OmludAorICAgICAgICBQc2lLZXl3b3JkOmludCgnaW50JykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmaWVsZCgnZmllbGQnKQorICAgICAgUHNpSmF2YVRva2VuOlNFTUlDT0xPTignOycpCisgICAgUHNpV2hpdGVTcGFjZSgnXG4nKQorICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9maWxlcy9CaW5kQmVmb3JlMi50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL2ZpbGVzL0JpbmRCZWZvcmUyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYjYxNzRjCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9maWxlcy9CaW5kQmVmb3JlMi50eHQKQEAgLTAsMCArMSwyOSBAQAorUHNpSmF2YUZpbGU6QmluZEJlZm9yZTIuamF2YQorICBQc2lJbXBvcnRMaXN0CisgICAgPGVtcHR5IGxpc3Q+CisgIFBzaUNsYXNzOkEKKyAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lLZXl3b3JkOmNsYXNzKCdjbGFzcycpCisgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgUHNpSWRlbnRpZmllcjpBKCdBJykKKyAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgUHNpQ29tbWVudChFTkRfT0ZfTElORV9DT01NRU5UKSgnLy8gY29tbWVudCcpCisgICAgUHNpV2hpdGVTcGFjZSgnXG4gICcpCisgICAgUHNpRmllbGQ6ZmllbGQKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDppbnQKKyAgICAgICAgUHNpS2V5d29yZDppbnQoJ2ludCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6ZmllbGQoJ2ZpZWxkJykKKyAgICAgIFBzaUphdmFUb2tlbjpTRU1JQ09MT04oJzsnKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuJykKKyAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvZmlsZXMvQmluZEJlZm9yZTMudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9maWxlcy9CaW5kQmVmb3JlMy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWRlMmVmZgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvZmlsZXMvQmluZEJlZm9yZTMudHh0CkBAIC0wLDAgKzEsMjggQEAKK1BzaUphdmFGaWxlOkJpbmRCZWZvcmUzLmphdmEKKyAgUHNpSW1wb3J0TGlzdAorICAgIDxlbXB0eSBsaXN0PgorICBQc2lDbGFzczpBCisgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpS2V5d29yZDpjbGFzcygnY2xhc3MnKQorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaUlkZW50aWZpZXI6QSgnQScpCisgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgIFBzaUNvbW1lbnQoRU5EX09GX0xJTkVfQ09NTUVOVCkoJy8vIGNvbW1lbnQnKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuICAnKQorICAgIFBzaUZpZWxkOmZpZWxkCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6aW50CisgICAgICAgIFBzaUtleXdvcmQ6aW50KCdpbnQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmZpZWxkKCdmaWVsZCcpCisgICAgICBQc2lKYXZhVG9rZW46U0VNSUNPTE9OKCc7JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcbicpCisgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL2ZpbGVzL0JpbmRCZWZvcmU0LnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvZmlsZXMvQmluZEJlZm9yZTQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjExN2YyNjMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL2ZpbGVzL0JpbmRCZWZvcmU0LnR4dApAQCAtMCwwICsxLDMzIEBACitQc2lKYXZhRmlsZTpCaW5kQmVmb3JlNC5qYXZhCisgIFBzaUltcG9ydExpc3QKKyAgICA8ZW1wdHkgbGlzdD4KKyAgUHNpQ2xhc3M6QQorICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaUtleXdvcmQ6Y2xhc3MoJ2NsYXNzJykKKyAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICBQc2lJZGVudGlmaWVyOkEoJ0EnKQorICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcbiAgJykKKyAgICBQc2lGaWVsZDpmaWVsZAorICAgICAgUHNpQ29tbWVudChFTkRfT0ZfTElORV9DT01NRU5UKSgnLy8gY29tbWVudCAxJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICAnKQorICAgICAgUHNpQ29tbWVudChFTkRfT0ZfTElORV9DT01NRU5UKSgnLy8gY29tbWVudCAyJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICAnKQorICAgICAgUHNpQ29tbWVudChFTkRfT0ZfTElORV9DT01NRU5UKSgnLy8gY29tbWVudCAzJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICAnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVR5cGVFbGVtZW50OmludAorICAgICAgICBQc2lLZXl3b3JkOmludCgnaW50JykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjpmaWVsZCgnZmllbGQnKQorICAgICAgUHNpSmF2YVRva2VuOlNFTUlDT0xPTignOycpCisgICAgUHNpV2hpdGVTcGFjZSgnXG4nKQorICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9maWxlcy9CaW5kRG9jQ29tbWVudDAudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9maWxlcy9CaW5kRG9jQ29tbWVudDAudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjViN2JmNTgKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL2ZpbGVzL0JpbmREb2NDb21tZW50MC50eHQKQEAgLTAsMCArMSwyNSBAQAorUHNpSmF2YUZpbGU6QmluZERvY0NvbW1lbnQwLmphdmEKKyAgUHNpSW1wb3J0TGlzdAorICAgIDxlbXB0eSBsaXN0PgorICBQc2lDbGFzczpBCisgICAgUHNpRG9jQ29tbWVudAorICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0RBVEEoJ2NsYXNzIGNvbW1lbnQgJykKKyAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuJykKKyAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lLZXl3b3JkOmNsYXNzKCdjbGFzcycpCisgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgUHNpSWRlbnRpZmllcjpBKCdBJykKKyAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL2ZpbGVzL0JpbmREb2NDb21tZW50MS50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL2ZpbGVzL0JpbmREb2NDb21tZW50MS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDQ5MzljYQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvZmlsZXMvQmluZERvY0NvbW1lbnQxLnR4dApAQCAtMCwwICsxLDM0IEBACitQc2lKYXZhRmlsZTpCaW5kRG9jQ29tbWVudDEuamF2YQorICBQc2lEb2NDb21tZW50CisgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfREFUQSgnZmlsZSBjb21tZW50ICcpCisgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfRU5EKCcqLycpCisgIFBzaVdoaXRlU3BhY2UoJ1xuJykKKyAgUHNpUGFja2FnZVN0YXRlbWVudDphCisgICAgUHNpS2V5d29yZDpwYWNrYWdlKCdwYWNrYWdlJykKKyAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICBQc2lKYXZhQ29kZVJlZmVyZW5jZUVsZW1lbnQ6YQorICAgICAgUHNpSWRlbnRpZmllcjphKCdhJykKKyAgICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpSmF2YVRva2VuOlNFTUlDT0xPTignOycpCisgIFBzaVdoaXRlU3BhY2UoJ1xuJykKKyAgUHNpSW1wb3J0TGlzdAorICAgIDxlbXB0eSBsaXN0PgorICBQc2lDbGFzczpBCisgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpS2V5d29yZDpjbGFzcygnY2xhc3MnKQorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaUlkZW50aWZpZXI6QSgnQScpCisgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVJlZmVyZW5jZUxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvZmlsZXMvQmluZERvY0NvbW1lbnQyLnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvZmlsZXMvQmluZERvY0NvbW1lbnQyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMWU4MWNlCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9maWxlcy9CaW5kRG9jQ29tbWVudDIudHh0CkBAIC0wLDAgKzEsMzMgQEAKK1BzaUphdmFGaWxlOkJpbmREb2NDb21tZW50Mi5qYXZhCisgIFBzaURvY0NvbW1lbnQKKyAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9TVEFSVCgnLyoqJykKKyAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9EQVRBKCdmaWxlIGNvbW1lbnQgJykKKyAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgUHNpV2hpdGVTcGFjZSgnXG4nKQorICBQc2lJbXBvcnRMaXN0CisgICAgUHNpSW1wb3J0U3RhdGVtZW50CisgICAgICBQc2lLZXl3b3JkOmltcG9ydCgnaW1wb3J0JykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSmF2YUNvZGVSZWZlcmVuY2VFbGVtZW50OmEKKyAgICAgICAgUHNpSWRlbnRpZmllcjphKCdhJykKKyAgICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpSmF2YVRva2VuOlNFTUlDT0xPTignOycpCisgIFBzaVdoaXRlU3BhY2UoJ1xuJykKKyAgUHNpQ2xhc3M6QQorICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaUtleXdvcmQ6Y2xhc3MoJ2NsYXNzJykKKyAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICBQc2lJZGVudGlmaWVyOkEoJ0EnKQorICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvZmlsZXMvQmluZERvY0NvbW1lbnQzLnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvZmlsZXMvQmluZERvY0NvbW1lbnQzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ODAwOTYyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9maWxlcy9CaW5kRG9jQ29tbWVudDMudHh0CkBAIC0wLDAgKzEsMzQgQEAKK1BzaUphdmFGaWxlOkJpbmREb2NDb21tZW50My5qYXZhCisgIFBzaUltcG9ydExpc3QKKyAgICA8ZW1wdHkgbGlzdD4KKyAgUHNpQ2xhc3M6QQorICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaUtleXdvcmQ6Y2xhc3MoJ2NsYXNzJykKKyAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICBQc2lJZGVudGlmaWVyOkEoJ0EnKQorICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgIFBzaUZpZWxkOmYKKyAgICAgIFBzaURvY0NvbW1lbnQKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfU1RBUlQoJy8qKicpCisgICAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9EQVRBKCdmaWVsZCBjb21tZW50ICcpCisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX0VORCgnKi8nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDppbnQKKyAgICAgICAgUHNpS2V5d29yZDppbnQoJ2ludCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6ZignZicpCisgICAgICBQc2lKYXZhVG9rZW46U0VNSUNPTE9OKCc7JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcbicpCisgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL2ZpbGVzL0JpbmREb2NDb21tZW50NC50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL2ZpbGVzL0JpbmREb2NDb21tZW50NC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWJlZWZjYwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvZmlsZXMvQmluZERvY0NvbW1lbnQ0LnR4dApAQCAtMCwwICsxLDM2IEBACitQc2lKYXZhRmlsZTpCaW5kRG9jQ29tbWVudDQuamF2YQorICBQc2lJbXBvcnRMaXN0CisgICAgPGVtcHR5IGxpc3Q+CisgIFBzaUNsYXNzOkEKKyAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lLZXl3b3JkOmNsYXNzKCdjbGFzcycpCisgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgUHNpSWRlbnRpZmllcjpBKCdBJykKKyAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICBQc2lGaWVsZDpmCisgICAgICBQc2lEb2NDb21tZW50CisgICAgICAgIFBzaURvY1Rva2VuOkRPQ19DT01NRU5UX1NUQVJUKCcvKionKQorICAgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgICAgUHNpRG9jVG9rZW46RE9DX0NPTU1FTlRfREFUQSgnZmllbGQgY29tbWVudCAnKQorICAgICAgICBQc2lEb2NUb2tlbjpET0NfQ09NTUVOVF9FTkQoJyovJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuJykKKyAgICAgIFBzaUNvbW1lbnQoRU5EX09GX0xJTkVfQ09NTUVOVCkoJy8vIGZpZWxkIGNvbW1lbnQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDppbnQKKyAgICAgICAgUHNpS2V5d29yZDppbnQoJ2ludCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUlkZW50aWZpZXI6ZignZicpCisgICAgICBQc2lKYXZhVG9rZW46U0VNSUNPTE9OKCc7JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcbicpCisgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL2ZpbGVzL0VtcHR5RmlsZS50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL2ZpbGVzL0VtcHR5RmlsZS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzAzNDUyNAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvZmlsZXMvRW1wdHlGaWxlLnR4dApAQCAtMCwwICsxLDMgQEAKK1BzaUphdmFGaWxlOkVtcHR5RmlsZS5qYXZhCisgIFBzaUltcG9ydExpc3QKKyAgICA8ZW1wdHkgbGlzdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL2ZpbGVzL0ZpbGVXaXRoQ2xhc3MudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9maWxlcy9GaWxlV2l0aENsYXNzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZjcxYWVhCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9maWxlcy9GaWxlV2l0aENsYXNzLnR4dApAQCAtMCwwICsxLDU0IEBACitQc2lKYXZhRmlsZTpGaWxlV2l0aENsYXNzLmphdmEKKyAgUHNpUGFja2FnZVN0YXRlbWVudDphCisgICAgUHNpS2V5d29yZDpwYWNrYWdlKCdwYWNrYWdlJykKKyAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICBQc2lKYXZhQ29kZVJlZmVyZW5jZUVsZW1lbnQ6YQorICAgICAgUHNpSWRlbnRpZmllcjphKCdhJykKKyAgICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpSmF2YVRva2VuOlNFTUlDT0xPTignOycpCisgIFBzaVdoaXRlU3BhY2UoJ1xuJykKKyAgUHNpSW1wb3J0TGlzdAorICAgIFBzaUltcG9ydFN0YXRlbWVudAorICAgICAgUHNpS2V5d29yZDppbXBvcnQoJ2ltcG9ydCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUphdmFDb2RlUmVmZXJlbmNlRWxlbWVudDpiCisgICAgICAgIFBzaUlkZW50aWZpZXI6YignYicpCisgICAgICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUphdmFUb2tlbjpTRU1JQ09MT04oJzsnKQorICBQc2lXaGl0ZVNwYWNlKCdcbicpCisgIFBzaUNsYXNzOkMKKyAgICBQc2lNb2RpZmllckxpc3Q6cHVibGljCisgICAgICBQc2lLZXl3b3JkOnB1YmxpYygncHVibGljJykKKyAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICBQc2lLZXl3b3JkOmNsYXNzKCdjbGFzcycpCisgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgUHNpSWRlbnRpZmllcjpDKCdDJykKKyAgICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpUmVmZXJlbmNlTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgIFBzaVdoaXRlU3BhY2UoJ1xuJykKKyAgUHNpQ2xhc3M6RAorICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaUtleXdvcmQ6Y2xhc3MoJ2NsYXNzJykKKyAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICBQc2lJZGVudGlmaWVyOkQoJ0QnKQorICAgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lSZWZlcmVuY2VMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL2ZpbGVzL0ltcG9ydDAudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9maWxlcy9JbXBvcnQwLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NDMzNDcyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9maWxlcy9JbXBvcnQwLnR4dApAQCAtMCwwICsxLDE3IEBACitQc2lKYXZhRmlsZTpJbXBvcnQwLmphdmEKKyAgUHNpSW1wb3J0TGlzdAorICAgIFBzaUltcG9ydFN0YXRlbWVudAorICAgICAgUHNpS2V5d29yZDppbXBvcnQoJ2ltcG9ydCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUphdmFDb2RlUmVmZXJlbmNlRWxlbWVudDpqYXZhLnV0aWwKKyAgICAgICAgUHNpSmF2YUNvZGVSZWZlcmVuY2VFbGVtZW50OmphdmEKKyAgICAgICAgICBQc2lJZGVudGlmaWVyOmphdmEoJ2phdmEnKQorICAgICAgICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICBQc2lKYXZhVG9rZW46RE9UKCcuJykKKyAgICAgICAgUHNpSWRlbnRpZmllcjp1dGlsKCd1dGlsJykKKyAgICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpSmF2YVRva2VuOkRPVCgnLicpCisgICAgICBQc2lKYXZhVG9rZW46QVNURVJJU0soJyonKQorICAgICAgUHNpSmF2YVRva2VuOlNFTUlDT0xPTignOycpClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9maWxlcy9JbXBvcnQxLnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvZmlsZXMvSW1wb3J0MS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTgzMTEwNwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvZmlsZXMvSW1wb3J0MS50eHQKQEAgLTAsMCArMSwyMCBAQAorUHNpSmF2YUZpbGU6SW1wb3J0MS5qYXZhCisgIFBzaUltcG9ydExpc3QKKyAgICBQc2lJbXBvcnRTdGF0ZW1lbnQKKyAgICAgIFBzaUtleXdvcmQ6aW1wb3J0KCdpbXBvcnQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lKYXZhQ29kZVJlZmVyZW5jZUVsZW1lbnQ6amF2YS51dGlsLkFycmF5cworICAgICAgICBQc2lKYXZhQ29kZVJlZmVyZW5jZUVsZW1lbnQ6amF2YS51dGlsCisgICAgICAgICAgUHNpSmF2YUNvZGVSZWZlcmVuY2VFbGVtZW50OmphdmEKKyAgICAgICAgICAgIFBzaUlkZW50aWZpZXI6amF2YSgnamF2YScpCisgICAgICAgICAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICAgIFBzaUphdmFUb2tlbjpET1QoJy4nKQorICAgICAgICAgIFBzaUlkZW50aWZpZXI6dXRpbCgndXRpbCcpCisgICAgICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgIFBzaUphdmFUb2tlbjpET1QoJy4nKQorICAgICAgICBQc2lJZGVudGlmaWVyOkFycmF5cygnQXJyYXlzJykKKyAgICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpSmF2YVRva2VuOlNFTUlDT0xPTignOycpClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9maWxlcy9QYWNrYWdlLnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvZmlsZXMvUGFja2FnZS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTNmZWRlZgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvZmlsZXMvUGFja2FnZS50eHQKQEAgLTAsMCArMSwyMSBAQAorUHNpSmF2YUZpbGU6UGFja2FnZS5qYXZhCisgIFBzaVBhY2thZ2VTdGF0ZW1lbnQ6YS5iLmMKKyAgICBQc2lLZXl3b3JkOnBhY2thZ2UoJ3BhY2thZ2UnKQorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaUphdmFDb2RlUmVmZXJlbmNlRWxlbWVudDphLmIuYworICAgICAgUHNpSmF2YUNvZGVSZWZlcmVuY2VFbGVtZW50OmEuYgorICAgICAgICBQc2lKYXZhQ29kZVJlZmVyZW5jZUVsZW1lbnQ6YQorICAgICAgICAgIFBzaUlkZW50aWZpZXI6YSgnYScpCisgICAgICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgIFBzaUphdmFUb2tlbjpET1QoJy4nKQorICAgICAgICBQc2lJZGVudGlmaWVyOmIoJ2InKQorICAgICAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lKYXZhVG9rZW46RE9UKCcuJykKKyAgICAgIFBzaUlkZW50aWZpZXI6YygnYycpCisgICAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaUphdmFUb2tlbjpTRU1JQ09MT04oJzsnKQorICBQc2lJbXBvcnRMaXN0CisgICAgPGVtcHR5IGxpc3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9maWxlcy9TdGF0aWNJbXBvcnQwLnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvZmlsZXMvU3RhdGljSW1wb3J0MC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTE0ZjFhOQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvZmlsZXMvU3RhdGljSW1wb3J0MC50eHQKQEAgLTAsMCArMSwyNCBAQAorUHNpSmF2YUZpbGU6U3RhdGljSW1wb3J0MC5qYXZhCisgIFBzaUltcG9ydExpc3QKKyAgICBQc2lJbXBvcnRTdGF0aWNTdGF0ZW1lbnQKKyAgICAgIFBzaUtleXdvcmQ6aW1wb3J0KCdpbXBvcnQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lLZXl3b3JkOnN0YXRpYygnc3RhdGljJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSmF2YUNvZGVSZWZlcmVuY2VFbGVtZW50OmphdmEudXRpbC5BcnJheXMKKyAgICAgICAgUHNpSmF2YUNvZGVSZWZlcmVuY2VFbGVtZW50OmphdmEudXRpbAorICAgICAgICAgIFBzaUphdmFDb2RlUmVmZXJlbmNlRWxlbWVudDpqYXZhCisgICAgICAgICAgICBQc2lJZGVudGlmaWVyOmphdmEoJ2phdmEnKQorICAgICAgICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgICBQc2lKYXZhVG9rZW46RE9UKCcuJykKKyAgICAgICAgICBQc2lJZGVudGlmaWVyOnV0aWwoJ3V0aWwnKQorICAgICAgICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICBQc2lKYXZhVG9rZW46RE9UKCcuJykKKyAgICAgICAgUHNpSWRlbnRpZmllcjpBcnJheXMoJ0FycmF5cycpCisgICAgICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUphdmFUb2tlbjpET1QoJy4nKQorICAgICAgUHNpSmF2YVRva2VuOkFTVEVSSVNLKCcqJykKKyAgICAgIFBzaUphdmFUb2tlbjpTRU1JQ09MT04oJzsnKQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvZmlsZXMvU3RhdGljSW1wb3J0MS50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL2ZpbGVzL1N0YXRpY0ltcG9ydDEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhlNWFlZTgKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL2ZpbGVzL1N0YXRpY0ltcG9ydDEudHh0CkBAIC0wLDAgKzEsMjcgQEAKK1BzaUphdmFGaWxlOlN0YXRpY0ltcG9ydDEuamF2YQorICBQc2lJbXBvcnRMaXN0CisgICAgUHNpSW1wb3J0U3RhdGljU3RhdGVtZW50CisgICAgICBQc2lLZXl3b3JkOmltcG9ydCgnaW1wb3J0JykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpS2V5d29yZDpzdGF0aWMoJ3N0YXRpYycpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUltcG9ydFN0YXRpY1JlZmVyZW5jZUVsZW1lbnQ6amF2YS51dGlsLkFycmF5cy5zb3J0CisgICAgICAgIFBzaUphdmFDb2RlUmVmZXJlbmNlRWxlbWVudDpqYXZhLnV0aWwuQXJyYXlzCisgICAgICAgICAgUHNpSmF2YUNvZGVSZWZlcmVuY2VFbGVtZW50OmphdmEudXRpbAorICAgICAgICAgICAgUHNpSmF2YUNvZGVSZWZlcmVuY2VFbGVtZW50OmphdmEKKyAgICAgICAgICAgICAgUHNpSWRlbnRpZmllcjpqYXZhKCdqYXZhJykKKyAgICAgICAgICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICAgICAgUHNpSmF2YVRva2VuOkRPVCgnLicpCisgICAgICAgICAgICBQc2lJZGVudGlmaWVyOnV0aWwoJ3V0aWwnKQorICAgICAgICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgICBQc2lKYXZhVG9rZW46RE9UKCcuJykKKyAgICAgICAgICBQc2lJZGVudGlmaWVyOkFycmF5cygnQXJyYXlzJykKKyAgICAgICAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgUHNpSmF2YVRva2VuOkRPVCgnLicpCisgICAgICAgIFBzaUlkZW50aWZpZXI6c29ydCgnc29ydCcpCisgICAgICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUphdmFUb2tlbjpTRU1JQ09MT04oJzsnKQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvZmlsZXMvVW5jbG9zZWRJbXBvcnQwLnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvZmlsZXMvVW5jbG9zZWRJbXBvcnQwLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMzBjMTIwCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9maWxlcy9VbmNsb3NlZEltcG9ydDAudHh0CkBAIC0wLDAgKzEsNiBAQAorUHNpSmF2YUZpbGU6VW5jbG9zZWRJbXBvcnQwLmphdmEKKyAgUHNpSW1wb3J0TGlzdAorICAgIFBzaUltcG9ydFN0YXRlbWVudAorICAgICAgUHNpS2V5d29yZDppbXBvcnQoJ2ltcG9ydCcpCisgICAgICBQc2lFcnJvckVsZW1lbnQ6SWRlbnRpZmllciBleHBlY3RlZAorICAgICAgICA8ZW1wdHkgbGlzdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL2ZpbGVzL1VuY2xvc2VkSW1wb3J0MS50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL2ZpbGVzL1VuY2xvc2VkSW1wb3J0MS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmYyYjY3ZgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvZmlsZXMvVW5jbG9zZWRJbXBvcnQxLnR4dApAQCAtMCwwICsxLDE4IEBACitQc2lKYXZhRmlsZTpVbmNsb3NlZEltcG9ydDEuamF2YQorICBQc2lJbXBvcnRMaXN0CisgICAgUHNpSW1wb3J0U3RhdGVtZW50CisgICAgICBQc2lLZXl3b3JkOmltcG9ydCgnaW1wb3J0JykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSmF2YUNvZGVSZWZlcmVuY2VFbGVtZW50OmphdmEuYXd0CisgICAgICAgIFBzaUphdmFDb2RlUmVmZXJlbmNlRWxlbWVudDpqYXZhCisgICAgICAgICAgUHNpSWRlbnRpZmllcjpqYXZhKCdqYXZhJykKKyAgICAgICAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgUHNpSmF2YVRva2VuOkRPVCgnLicpCisgICAgICAgIFBzaUlkZW50aWZpZXI6YXd0KCdhd3QnKQorICAgICAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lKYXZhVG9rZW46RE9UKCcuJykKKyAgICAgIFBzaUphdmFUb2tlbjpBU1RFUklTSygnKicpCisgICAgICBQc2lFcnJvckVsZW1lbnQ6JzsnIGV4cGVjdGVkCisgICAgICAgIDxlbXB0eSBsaXN0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvZmlsZXMvVW5jbG9zZWRJbXBvcnQyLnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvZmlsZXMvVW5jbG9zZWRJbXBvcnQyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYTQ5YzkyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9maWxlcy9VbmNsb3NlZEltcG9ydDIudHh0CkBAIC0wLDAgKzEsMTcgQEAKK1BzaUphdmFGaWxlOlVuY2xvc2VkSW1wb3J0Mi5qYXZhCisgIFBzaUltcG9ydExpc3QKKyAgICBQc2lJbXBvcnRTdGF0ZW1lbnQKKyAgICAgIFBzaUtleXdvcmQ6aW1wb3J0KCdpbXBvcnQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lKYXZhQ29kZVJlZmVyZW5jZUVsZW1lbnQ6amF2YS5hd3QKKyAgICAgICAgUHNpSmF2YUNvZGVSZWZlcmVuY2VFbGVtZW50OmphdmEKKyAgICAgICAgICBQc2lJZGVudGlmaWVyOmphdmEoJ2phdmEnKQorICAgICAgICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICBQc2lKYXZhVG9rZW46RE9UKCcuJykKKyAgICAgICAgUHNpSWRlbnRpZmllcjphd3QoJ2F3dCcpCisgICAgICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUphdmFUb2tlbjpET1QoJy4nKQorICAgICAgUHNpRXJyb3JFbGVtZW50OklkZW50aWZpZXIgb3IgJyonIGV4cGVjdGVkCisgICAgICAgIDxlbXB0eSBsaXN0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvZmlsZXMvVW5jbG9zZWRJbXBvcnQzLnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvZmlsZXMvVW5jbG9zZWRJbXBvcnQzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNzE1MDM4Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9maWxlcy9VbmNsb3NlZEltcG9ydDMudHh0CkBAIC0wLDAgKzEsMTMgQEAKK1BzaUphdmFGaWxlOlVuY2xvc2VkSW1wb3J0My5qYXZhCisgIFBzaUltcG9ydExpc3QKKyAgICBQc2lJbXBvcnRTdGF0aWNTdGF0ZW1lbnQKKyAgICAgIFBzaUtleXdvcmQ6aW1wb3J0KCdpbXBvcnQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lLZXl3b3JkOnN0YXRpYygnc3RhdGljJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSW1wb3J0U3RhdGljUmVmZXJlbmNlRWxlbWVudDphCisgICAgICAgIFBzaUlkZW50aWZpZXI6YSgnYScpCisgICAgICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUVycm9yRWxlbWVudDonOycgZXhwZWN0ZWQKKyAgICAgICAgPGVtcHR5IGxpc3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9maWxlcy9VbmNsb3NlZFBhY2thZ2UwLnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvZmlsZXMvVW5jbG9zZWRQYWNrYWdlMC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2M5ODY2YgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvZmlsZXMvVW5jbG9zZWRQYWNrYWdlMC50eHQKQEAgLTAsMCArMSw1IEBACitQc2lKYXZhRmlsZTpVbmNsb3NlZFBhY2thZ2UwLmphdmEKKyAgUHNpSW1wb3J0TGlzdAorICAgIDxlbXB0eSBsaXN0PgorICBQc2lFcnJvckVsZW1lbnQ6J2NsYXNzJyBvciAnaW50ZXJmYWNlJyBleHBlY3RlZAorICAgIFBzaUtleXdvcmQ6cGFja2FnZSgncGFja2FnZScpClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9maWxlcy9VbmNsb3NlZFBhY2thZ2UxLnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvZmlsZXMvVW5jbG9zZWRQYWNrYWdlMS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGYzNjNhNgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvZmlsZXMvVW5jbG9zZWRQYWNrYWdlMS50eHQKQEAgLTAsMCArMSwxOCBAQAorUHNpSmF2YUZpbGU6VW5jbG9zZWRQYWNrYWdlMS5qYXZhCisgIFBzaVBhY2thZ2VTdGF0ZW1lbnQ6YS4KKyAgICBQc2lLZXl3b3JkOnBhY2thZ2UoJ3BhY2thZ2UnKQorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaUphdmFDb2RlUmVmZXJlbmNlRWxlbWVudDphLgorICAgICAgUHNpSmF2YUNvZGVSZWZlcmVuY2VFbGVtZW50OmEKKyAgICAgICAgUHNpSWRlbnRpZmllcjphKCdhJykKKyAgICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpSmF2YVRva2VuOkRPVCgnLicpCisgICAgICBQc2lFcnJvckVsZW1lbnQ6SWRlbnRpZmllciBleHBlY3RlZAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpRXJyb3JFbGVtZW50Oic7JyBleHBlY3RlZAorICAgICAgPGVtcHR5IGxpc3Q+CisgIFBzaUltcG9ydExpc3QKKyAgICA8ZW1wdHkgbGlzdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL3JlZmVyZW5jZXMvUmVmZXJlbmNlMC50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL3JlZmVyZW5jZXMvUmVmZXJlbmNlMC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzc2OGI5ZgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvcmVmZXJlbmNlcy9SZWZlcmVuY2UwLnR4dApAQCAtMCwwICsxLDUgQEAKK1BzaUphdmFGaWxlOlJlZmVyZW5jZTAuamF2YQorICBQc2lKYXZhQ29kZVJlZmVyZW5jZUVsZW1lbnQ6YQorICAgIFBzaUlkZW50aWZpZXI6YSgnYScpCisgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgPGVtcHR5IGxpc3Q+CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL3JlZmVyZW5jZXMvUmVmZXJlbmNlMS50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL3JlZmVyZW5jZXMvUmVmZXJlbmNlMS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTliZTYwNQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvcmVmZXJlbmNlcy9SZWZlcmVuY2UxLnR4dApAQCAtMCwwICsxLDExIEBACitQc2lKYXZhRmlsZTpSZWZlcmVuY2UxLmphdmEKKyAgUHNpSmF2YUNvZGVSZWZlcmVuY2VFbGVtZW50OmEuCisgICAgUHNpSmF2YUNvZGVSZWZlcmVuY2VFbGVtZW50OmEKKyAgICAgIFBzaUlkZW50aWZpZXI6YSgnYScpCisgICAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaUphdmFUb2tlbjpET1QoJy4nKQorICAgIFBzaUVycm9yRWxlbWVudDpJZGVudGlmaWVyIGV4cGVjdGVkCisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICA8ZW1wdHkgbGlzdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL3JlZmVyZW5jZXMvUmVmZXJlbmNlMi50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL3JlZmVyZW5jZXMvUmVmZXJlbmNlMi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDMyYzViYwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvcmVmZXJlbmNlcy9SZWZlcmVuY2UyLnR4dApAQCAtMCwwICsxLDEwIEBACitQc2lKYXZhRmlsZTpSZWZlcmVuY2UyLmphdmEKKyAgUHNpSmF2YUNvZGVSZWZlcmVuY2VFbGVtZW50OmEuYgorICAgIFBzaUphdmFDb2RlUmVmZXJlbmNlRWxlbWVudDphCisgICAgICBQc2lJZGVudGlmaWVyOmEoJ2EnKQorICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lKYXZhVG9rZW46RE9UKCcuJykKKyAgICBQc2lJZGVudGlmaWVyOmIoJ2InKQorICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgIDxlbXB0eSBsaXN0PgpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9yZWZlcmVuY2VzL1R5cGUwLnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvcmVmZXJlbmNlcy9UeXBlMC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTliOWU4YgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvcmVmZXJlbmNlcy9UeXBlMC50eHQKQEAgLTAsMCArMSwzIEBACitQc2lKYXZhRmlsZTpUeXBlMC5qYXZhCisgIFBzaVR5cGVFbGVtZW50OmludAorICAgIFBzaUtleXdvcmQ6aW50KCdpbnQnKQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9yZWZlcmVuY2VzL1R5cGUxLnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvcmVmZXJlbmNlcy9UeXBlMS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjg2ZTlmMQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvcmVmZXJlbmNlcy9UeXBlMS50eHQKQEAgLTAsMCArMSwxMSBAQAorUHNpSmF2YUZpbGU6VHlwZTEuamF2YQorICBQc2lUeXBlRWxlbWVudDphLmIKKyAgICBQc2lKYXZhQ29kZVJlZmVyZW5jZUVsZW1lbnQ6YS5iCisgICAgICBQc2lKYXZhQ29kZVJlZmVyZW5jZUVsZW1lbnQ6YQorICAgICAgICBQc2lJZGVudGlmaWVyOmEoJ2EnKQorICAgICAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lKYXZhVG9rZW46RE9UKCcuJykKKyAgICAgIFBzaUlkZW50aWZpZXI6YignYicpCisgICAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9yZWZlcmVuY2VzL1R5cGUyLnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvcmVmZXJlbmNlcy9UeXBlMi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzIzNGRiYgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvcmVmZXJlbmNlcy9UeXBlMi50eHQKQEAgLTAsMCArMSw2IEBACitQc2lKYXZhRmlsZTpUeXBlMi5qYXZhCisgIFBzaVR5cGVFbGVtZW50OmludFtdCisgICAgUHNpVHlwZUVsZW1lbnQ6aW50CisgICAgICBQc2lLZXl3b3JkOmludCgnaW50JykKKyAgICBQc2lKYXZhVG9rZW46TEJSQUNLRVQoJ1snKQorICAgIFBzaUphdmFUb2tlbjpSQlJBQ0tFVCgnXScpCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL3JlZmVyZW5jZXMvVHlwZTMudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9yZWZlcmVuY2VzL1R5cGUzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYTk3MDVkCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9yZWZlcmVuY2VzL1R5cGUzLnR4dApAQCAtMCwwICsxLDggQEAKK1BzaUphdmFGaWxlOlR5cGUzLmphdmEKKyAgUHNpVHlwZUVsZW1lbnQ6aW50W10KKyAgICBQc2lUeXBlRWxlbWVudDppbnQKKyAgICAgIFBzaUtleXdvcmQ6aW50KCdpbnQnKQorICAgIFBzaUphdmFUb2tlbjpMQlJBQ0tFVCgnWycpCisgICAgUHNpSmF2YVRva2VuOlJCUkFDS0VUKCddJykKKyAgUHNpRXJyb3JFbGVtZW50OlVucGFyc2VkIHRva2VucworICAgIFBzaUphdmFUb2tlbjpMQlJBQ0tFVCgnWycpClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9yZWZlcmVuY2VzL1R5cGU0LnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvcmVmZXJlbmNlcy9UeXBlNC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTE1OWY1NwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvcmVmZXJlbmNlcy9UeXBlNC50eHQKQEAgLTAsMCArMSwyNCBAQAorUHNpSmF2YUZpbGU6VHlwZTQuamF2YQorICBQc2lUeXBlRWxlbWVudDpNYXA8U3RyaW5nLExpc3Q8U3RyaW5nPj4KKyAgICBQc2lKYXZhQ29kZVJlZmVyZW5jZUVsZW1lbnQ6TWFwPFN0cmluZyxMaXN0PFN0cmluZz4+CisgICAgICBQc2lJZGVudGlmaWVyOk1hcCgnTWFwJykKKyAgICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgICAgUHNpSmF2YVRva2VuOkxUKCc8JykKKyAgICAgICAgUHNpVHlwZUVsZW1lbnQ6U3RyaW5nCisgICAgICAgICAgUHNpSmF2YUNvZGVSZWZlcmVuY2VFbGVtZW50OlN0cmluZworICAgICAgICAgICAgUHNpSWRlbnRpZmllcjpTdHJpbmcoJ1N0cmluZycpCisgICAgICAgICAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICBQc2lKYXZhVG9rZW46Q09NTUEoJywnKQorICAgICAgICBQc2lUeXBlRWxlbWVudDpMaXN0PFN0cmluZz4KKyAgICAgICAgICBQc2lKYXZhQ29kZVJlZmVyZW5jZUVsZW1lbnQ6TGlzdDxTdHJpbmc+CisgICAgICAgICAgICBQc2lJZGVudGlmaWVyOkxpc3QoJ0xpc3QnKQorICAgICAgICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICAgICAgICBQc2lKYXZhVG9rZW46TFQoJzwnKQorICAgICAgICAgICAgICBQc2lUeXBlRWxlbWVudDpTdHJpbmcKKyAgICAgICAgICAgICAgICBQc2lKYXZhQ29kZVJlZmVyZW5jZUVsZW1lbnQ6U3RyaW5nCisgICAgICAgICAgICAgICAgICBQc2lJZGVudGlmaWVyOlN0cmluZygnU3RyaW5nJykKKyAgICAgICAgICAgICAgICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgICAgICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgICAgICAgIFBzaUphdmFUb2tlbjpHVCgnPicpCisgICAgICAgIFBzaUphdmFUb2tlbjpHVCgnPicpCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL3JlZmVyZW5jZXMvVHlwZTUudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9yZWZlcmVuY2VzL1R5cGU1LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NGE0M2ZjCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9yZWZlcmVuY2VzL1R5cGU1LnR4dApAQCAtMCwwICsxLDExIEBACitQc2lKYXZhRmlsZTpUeXBlNS5qYXZhCisgIFBzaVR5cGVFbGVtZW50Ok9iamVjdFtdLi4uCisgICAgUHNpVHlwZUVsZW1lbnQ6T2JqZWN0W10KKyAgICAgIFBzaVR5cGVFbGVtZW50Ok9iamVjdAorICAgICAgICBQc2lKYXZhQ29kZVJlZmVyZW5jZUVsZW1lbnQ6T2JqZWN0CisgICAgICAgICAgUHNpSWRlbnRpZmllcjpPYmplY3QoJ09iamVjdCcpCisgICAgICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lKYXZhVG9rZW46TEJSQUNLRVQoJ1snKQorICAgICAgUHNpSmF2YVRva2VuOlJCUkFDS0VUKCddJykKKyAgICBQc2lKYXZhVG9rZW46RUxMSVBTSVMoJy4uLicpClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9yZWZlcmVuY2VzL1R5cGU2LnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvcmVmZXJlbmNlcy9UeXBlNi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2NlZDY1MGIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL3JlZmVyZW5jZXMvVHlwZTYudHh0CkBAIC0wLDAgKzEsMjggQEAKK1BzaUphdmFGaWxlOlR5cGU2LmphdmEKKyAgUHNpVHlwZUVsZW1lbnQ6QEVuZ2xpc2ggU3RyaW5nIEBOb25FbXB0eSBbXQorICAgIFBzaVR5cGVFbGVtZW50OkBFbmdsaXNoIFN0cmluZworICAgICAgUHNpQW5ub3RhdGlvbgorICAgICAgICBQc2lKYXZhVG9rZW46QVQoJ0AnKQorICAgICAgICBQc2lKYXZhQ29kZVJlZmVyZW5jZUVsZW1lbnQ6RW5nbGlzaAorICAgICAgICAgIFBzaUlkZW50aWZpZXI6RW5nbGlzaCgnRW5nbGlzaCcpCisgICAgICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgIFBzaUFubm90YXRpb25QYXJhbWV0ZXJMaXN0CisgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUphdmFDb2RlUmVmZXJlbmNlRWxlbWVudDpTdHJpbmcKKyAgICAgICAgUHNpSWRlbnRpZmllcjpTdHJpbmcoJ1N0cmluZycpCisgICAgICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICBQc2lBbm5vdGF0aW9uCisgICAgICBQc2lKYXZhVG9rZW46QVQoJ0AnKQorICAgICAgUHNpSmF2YUNvZGVSZWZlcmVuY2VFbGVtZW50Ok5vbkVtcHR5CisgICAgICAgIFBzaUlkZW50aWZpZXI6Tm9uRW1wdHkoJ05vbkVtcHR5JykKKyAgICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpQW5ub3RhdGlvblBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgUHNpSmF2YVRva2VuOkxCUkFDS0VUKCdbJykKKyAgICBQc2lKYXZhVG9rZW46UkJSQUNLRVQoJ10nKQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvcmVmZXJlbmNlcy9UeXBlNy50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL3JlZmVyZW5jZXMvVHlwZTcudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYzMzM5NDEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL3JlZmVyZW5jZXMvVHlwZTcudHh0CkBAIC0wLDAgKzEsMTAgQEAKK1BzaUphdmFGaWxlOlR5cGU3LmphdmEKKyAgUHNpVHlwZUVsZW1lbnQ6RGlhbW9uZDw+CisgICAgUHNpSmF2YUNvZGVSZWZlcmVuY2VFbGVtZW50OkRpYW1vbmQ8PgorICAgICAgUHNpSWRlbnRpZmllcjpEaWFtb25kKCdEaWFtb25kJykKKyAgICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgICAgUHNpSmF2YVRva2VuOkxUKCc8JykKKyAgICAgICAgUHNpVHlwZUVsZW1lbnQ6CisgICAgICAgICAgUHNpVHlwZUVsZW1lbnQ6RElBTU9ORAorICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgIFBzaUphdmFUb2tlbjpHVCgnPicpClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9yZWZlcmVuY2VzL1R5cGU4LnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvcmVmZXJlbmNlcy9UeXBlOC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmMwNzVhZAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvcmVmZXJlbmNlcy9UeXBlOC50eHQKQEAgLTAsMCArMSwxMCBAQAorUHNpSmF2YUZpbGU6VHlwZTguamF2YQorICBQc2lUeXBlRWxlbWVudDpBfAorICAgIFBzaVR5cGVFbGVtZW50OkEKKyAgICAgIFBzaUphdmFDb2RlUmVmZXJlbmNlRWxlbWVudDpBCisgICAgICAgIFBzaUlkZW50aWZpZXI6QSgnQScpCisgICAgICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lKYXZhVG9rZW46T1IoJ3wnKQorICAgIFBzaUVycm9yRWxlbWVudDpJZGVudGlmaWVyIGV4cGVjdGVkCisgICAgICA8ZW1wdHkgbGlzdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL3JlZmVyZW5jZXMvVHlwZTkudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9yZWZlcmVuY2VzL1R5cGU5LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MzkwNjgzCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9yZWZlcmVuY2VzL1R5cGU5LnR4dApAQCAtMCwwICsxLDEzIEBACitQc2lKYXZhRmlsZTpUeXBlOS5qYXZhCisgIFBzaVR5cGVFbGVtZW50OkF8QgorICAgIFBzaVR5cGVFbGVtZW50OkEKKyAgICAgIFBzaUphdmFDb2RlUmVmZXJlbmNlRWxlbWVudDpBCisgICAgICAgIFBzaUlkZW50aWZpZXI6QSgnQScpCisgICAgICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lKYXZhVG9rZW46T1IoJ3wnKQorICAgIFBzaVR5cGVFbGVtZW50OkIKKyAgICAgIFBzaUphdmFDb2RlUmVmZXJlbmNlRWxlbWVudDpCCisgICAgICAgIFBzaUlkZW50aWZpZXI6QignQicpCisgICAgICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgICAgICA8ZW1wdHkgbGlzdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL3JlZmVyZW5jZXMvVHlwZVBhcmFtczAudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9yZWZlcmVuY2VzL1R5cGVQYXJhbXMwLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MDhkOGNkCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9yZWZlcmVuY2VzL1R5cGVQYXJhbXMwLnR4dApAQCAtMCwwICsxLDggQEAKK1BzaUphdmFGaWxlOlR5cGVQYXJhbXMwLmphdmEKKyAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICBQc2lKYXZhVG9rZW46TFQoJzwnKQorICAgIFBzaVR5cGVQYXJhbWV0ZXI6VAorICAgICAgUHNpSWRlbnRpZmllcjpUKCdUJykKKyAgICAgIFBzaUVsZW1lbnQoRVhURU5EU19CT1VORF9MSVNUKQorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lKYXZhVG9rZW46R1QoJz4nKQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvcmVmZXJlbmNlcy9UeXBlUGFyYW1zMS50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL3JlZmVyZW5jZXMvVHlwZVBhcmFtczEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBkZDQyMDlkCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9yZWZlcmVuY2VzL1R5cGVQYXJhbXMxLnR4dApAQCAtMCwwICsxLDE0IEBACitQc2lKYXZhRmlsZTpUeXBlUGFyYW1zMS5qYXZhCisgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgUHNpSmF2YVRva2VuOkxUKCc8JykKKyAgICBQc2lUeXBlUGFyYW1ldGVyOlQKKyAgICAgIFBzaUlkZW50aWZpZXI6VCgnVCcpCisgICAgICBQc2lFbGVtZW50KEVYVEVORFNfQk9VTkRfTElTVCkKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpSmF2YVRva2VuOkNPTU1BKCcsJykKKyAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICBQc2lUeXBlUGFyYW1ldGVyOlUKKyAgICAgIFBzaUlkZW50aWZpZXI6VSgnVScpCisgICAgICBQc2lFbGVtZW50KEVYVEVORFNfQk9VTkRfTElTVCkKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpSmF2YVRva2VuOkdUKCc+JykKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL3JlZmVyZW5jZXMvVHlwZVBhcmFtczIudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9yZWZlcmVuY2VzL1R5cGVQYXJhbXMyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNmFjOGJlCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9yZWZlcmVuY2VzL1R5cGVQYXJhbXMyLnR4dApAQCAtMCwwICsxLDkgQEAKK1BzaUphdmFGaWxlOlR5cGVQYXJhbXMyLmphdmEKKyAgUHNpVHlwZVBhcmFtZXRlckxpc3QKKyAgICBQc2lKYXZhVG9rZW46TFQoJzwnKQorICAgIFBzaVR5cGVQYXJhbWV0ZXI6VAorICAgICAgUHNpSWRlbnRpZmllcjpUKCdUJykKKyAgICAgIFBzaUVsZW1lbnQoRVhURU5EU19CT1VORF9MSVNUKQorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lFcnJvckVsZW1lbnQ6Jz4nIGV4cGVjdGVkLgorICAgICAgPGVtcHR5IGxpc3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9yZWZlcmVuY2VzL1R5cGVQYXJhbXMzLnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvcmVmZXJlbmNlcy9UeXBlUGFyYW1zMy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjI0ZTM2NgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvcmVmZXJlbmNlcy9UeXBlUGFyYW1zMy50eHQKQEAgLTAsMCArMSwxMSBAQAorUHNpSmF2YUZpbGU6VHlwZVBhcmFtczMuamF2YQorICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgIFBzaUphdmFUb2tlbjpMVCgnPCcpCisgICAgUHNpVHlwZVBhcmFtZXRlcjpUCisgICAgICBQc2lJZGVudGlmaWVyOlQoJ1QnKQorICAgICAgUHNpRWxlbWVudChFWFRFTkRTX0JPVU5EX0xJU1QpCisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaUVycm9yRWxlbWVudDpVbmV4cGVjdGVkIGlkZW50aWZpZXIKKyAgICAgIFBzaUlkZW50aWZpZXI6aGFjaygnaGFjaycpCisgICAgUHNpSmF2YVRva2VuOkdUKCc+JykKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL3JlZmVyZW5jZXMvVHlwZVBhcmFtczQudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9yZWZlcmVuY2VzL1R5cGVQYXJhbXM0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZjYwZGE0Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9yZWZlcmVuY2VzL1R5cGVQYXJhbXM0LnR4dApAQCAtMCwwICsxLDEyIEBACitQc2lKYXZhRmlsZTpUeXBlUGFyYW1zNC5qYXZhCisgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgUHNpSmF2YVRva2VuOkxUKCc8JykKKyAgICBQc2lUeXBlUGFyYW1ldGVyOlQKKyAgICAgIFBzaUlkZW50aWZpZXI6VCgnVCcpCisgICAgICBQc2lFbGVtZW50KEVYVEVORFNfQk9VTkRfTElTVCkKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpRXJyb3JFbGVtZW50Oic+JyBleHBlY3RlZC4KKyAgICAgIDxlbXB0eSBsaXN0PgorICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgUHNpRXJyb3JFbGVtZW50OlVucGFyc2VkIHRva2VucworICAgIFBzaUlkZW50aWZpZXI6aGFjaygnaGFjaycpClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9yZWZlcmVuY2VzL1R5cGVQYXJhbXM1LnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvcmVmZXJlbmNlcy9UeXBlUGFyYW1zNS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTczMjlkYQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvcmVmZXJlbmNlcy9UeXBlUGFyYW1zNS50eHQKQEAgLTAsMCArMSwyNyBAQAorUHNpSmF2YUZpbGU6VHlwZVBhcmFtczUuamF2YQorICBQc2lUeXBlUGFyYW1ldGVyTGlzdAorICAgIFBzaUphdmFUb2tlbjpMVCgnPCcpCisgICAgUHNpVHlwZVBhcmFtZXRlcjpUCisgICAgICBQc2lJZGVudGlmaWVyOlQoJ1QnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lFbGVtZW50KEVYVEVORFNfQk9VTkRfTElTVCkKKyAgICAgICAgUHNpS2V5d29yZDpleHRlbmRzKCdleHRlbmRzJykKKyAgICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICAgIFBzaUphdmFDb2RlUmVmZXJlbmNlRWxlbWVudDpYCisgICAgICAgICAgUHNpSWRlbnRpZmllcjpYKCdYJykKKyAgICAgICAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICAgIFBzaUphdmFUb2tlbjpBTkQoJyYnKQorICAgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgICAgUHNpSmF2YUNvZGVSZWZlcmVuY2VFbGVtZW50Olk8Wj4KKyAgICAgICAgICBQc2lJZGVudGlmaWVyOlkoJ1knKQorICAgICAgICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgICAgICAgIFBzaUphdmFUb2tlbjpMVCgnPCcpCisgICAgICAgICAgICBQc2lUeXBlRWxlbWVudDpaCisgICAgICAgICAgICAgIFBzaUphdmFDb2RlUmVmZXJlbmNlRWxlbWVudDpaCisgICAgICAgICAgICAgICAgUHNpSWRlbnRpZmllcjpaKCdaJykKKyAgICAgICAgICAgICAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICAgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgICAgIFBzaUphdmFUb2tlbjpHVCgnPicpCisgICAgUHNpSmF2YVRva2VuOkdUKCc+JykKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL3JlZmVyZW5jZXMvVHlwZVBhcmFtczYudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9yZWZlcmVuY2VzL1R5cGVQYXJhbXM2LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNWI0NmI5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9yZWZlcmVuY2VzL1R5cGVQYXJhbXM2LnR4dApAQCAtMCwwICsxLDE1IEBACitQc2lKYXZhRmlsZTpUeXBlUGFyYW1zNi5qYXZhCisgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgUHNpSmF2YVRva2VuOkxUKCc8JykKKyAgICBQc2lUeXBlUGFyYW1ldGVyOlQKKyAgICAgIFBzaUlkZW50aWZpZXI6VCgnVCcpCisgICAgICBQc2lFbGVtZW50KEVYVEVORFNfQk9VTkRfTElTVCkKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpRXJyb3JFbGVtZW50Oic+JyBleHBlY3RlZC4KKyAgICAgIDxlbXB0eSBsaXN0PgorICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgUHNpRXJyb3JFbGVtZW50OlVucGFyc2VkIHRva2VucworICAgIFBzaUlkZW50aWZpZXI6c3VwZXJzKCdzdXBlcnMnKQorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaUlkZW50aWZpZXI6WCgnWCcpCisgICAgUHNpSmF2YVRva2VuOkdUKCc+JykKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL3JlZmVyZW5jZXMvVHlwZVBhcmFtczcudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9yZWZlcmVuY2VzL1R5cGVQYXJhbXM3LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYWVhN2I4Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9yZWZlcmVuY2VzL1R5cGVQYXJhbXM3LnR4dApAQCAtMCwwICsxLDIwIEBACitQc2lKYXZhRmlsZTpUeXBlUGFyYW1zNy5qYXZhCisgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgUHNpSmF2YVRva2VuOkxUKCc8JykKKyAgICBQc2lUeXBlUGFyYW1ldGVyOlQKKyAgICAgIFBzaUlkZW50aWZpZXI6VCgnVCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUVsZW1lbnQoRVhURU5EU19CT1VORF9MSVNUKQorICAgICAgICBQc2lLZXl3b3JkOmV4dGVuZHMoJ2V4dGVuZHMnKQorICAgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgICAgUHNpSmF2YUNvZGVSZWZlcmVuY2VFbGVtZW50OlgKKyAgICAgICAgICBQc2lJZGVudGlmaWVyOlgoJ1gnKQorICAgICAgICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaUphdmFUb2tlbjpDT01NQSgnLCcpCisgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgUHNpVHlwZVBhcmFtZXRlcjpZCisgICAgICBQc2lJZGVudGlmaWVyOlkoJ1knKQorICAgICAgUHNpRWxlbWVudChFWFRFTkRTX0JPVU5EX0xJU1QpCisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaUphdmFUb2tlbjpHVCgnPicpClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9yZWZlcmVuY2VzL1R5cGVQYXJhbXM4LnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvcmVmZXJlbmNlcy9UeXBlUGFyYW1zOC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTM4OTg5OAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvcmVmZXJlbmNlcy9UeXBlUGFyYW1zOC50eHQKQEAgLTAsMCArMSw4IEBACitQc2lKYXZhRmlsZTpUeXBlUGFyYW1zOC5qYXZhCisgIFBzaVR5cGVQYXJhbWV0ZXJMaXN0CisgICAgUHNpSmF2YVRva2VuOkxUKCc8JykKKyAgICBQc2lFcnJvckVsZW1lbnQ6VW5leHBlY3RlZCB3aWxkY2FyZAorICAgICAgUHNpSmF2YVRva2VuOlFVRVNUKCc/JykKKyAgICAgIFBzaUVsZW1lbnQoRVhURU5EU19CT1VORF9MSVNUKQorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lKYXZhVG9rZW46R1QoJz4nKQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9zdGF0ZW1lbnRzL0Fub255bW91c0luU21hcnRDb21wbGV0aW9uLnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvc3RhdGVtZW50cy9Bbm9ueW1vdXNJblNtYXJ0Q29tcGxldGlvbi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzNhODQ2MQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvc3RhdGVtZW50cy9Bbm9ueW1vdXNJblNtYXJ0Q29tcGxldGlvbi50eHQKQEAgLTAsMCArMSwxMDkgQEAKK1BzaUphdmFGaWxlOkFub255bW91c0luU21hcnRDb21wbGV0aW9uLmphdmEKKyAgUHNpQ29kZUJsb2NrCisgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgUHNpRXhwcmVzc2lvblN0YXRlbWVudAorICAgICAgUHNpTmV3RXhwcmVzc2lvbjpuZXcgRm9vKGhhc2gKKyMpIHt9CisgICAgICAgIFBzaUtleXdvcmQ6bmV3KCduZXcnKQorICAgICAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgICBQc2lBbm9ueW1vdXNDbGFzcworICAgICAgICAgIFBzaUphdmFDb2RlUmVmZXJlbmNlRWxlbWVudDpGb28KKyAgICAgICAgICAgIFBzaUlkZW50aWZpZXI6Rm9vKCdGb28nKQorICAgICAgICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgICBQc2lFeHByZXNzaW9uTGlzdAorICAgICAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgICAgIFBzaVJlZmVyZW5jZUV4cHJlc3Npb246aGFzaAorICAgICAgICAgICAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgICAgICAgIFBzaUlkZW50aWZpZXI6aGFzaCgnaGFzaCcpCisgICAgICAgICAgICBQc2lFcnJvckVsZW1lbnQ6JywnIG9yICcpJyBleHBlY3RlZAorICAgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgICAgIFBzaUV4cHJlc3Npb24oZW1wdHkpCisgICAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICAgICAgUHNpV2hpdGVTcGFjZSgnXG4nKQorICAgICAgICAgICAgUHNpRWxlbWVudChCQURfQ0hBUkFDVEVSKSgnIycpCisgICAgICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgICAgUHNpSmF2YVRva2VuOlNFTUlDT0xPTignOycpCisgICAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgICBQc2lFeHByZXNzaW9uU3RhdGVtZW50CisgICAgICBQc2lOZXdFeHByZXNzaW9uOm5ldyBGb28oaGFzaAorIywgYmFyKSB7fQorICAgICAgICBQc2lLZXl3b3JkOm5ldygnbmV3JykKKyAgICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgICAgUHNpQW5vbnltb3VzQ2xhc3MKKyAgICAgICAgICBQc2lKYXZhQ29kZVJlZmVyZW5jZUVsZW1lbnQ6Rm9vCisgICAgICAgICAgICBQc2lJZGVudGlmaWVyOkZvbygnRm9vJykKKyAgICAgICAgICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgICAgUHNpRXhwcmVzc2lvbkxpc3QKKyAgICAgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgICAgICBQc2lSZWZlcmVuY2VFeHByZXNzaW9uOmhhc2gKKyAgICAgICAgICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICAgICAgICBQc2lJZGVudGlmaWVyOmhhc2goJ2hhc2gnKQorICAgICAgICAgICAgUHNpRXJyb3JFbGVtZW50OicsJyBvciAnKScgZXhwZWN0ZWQKKyAgICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgICAgICBQc2lFeHByZXNzaW9uKGVtcHR5KQorICAgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuJykKKyAgICAgICAgICAgIFBzaUVsZW1lbnQoQkFEX0NIQVJBQ1RFUikoJyMnKQorICAgICAgICAgICAgUHNpSmF2YVRva2VuOkNPTU1BKCcsJykKKyAgICAgICAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgICAgICAgUHNpUmVmZXJlbmNlRXhwcmVzc2lvbjpiYXIKKyAgICAgICAgICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICAgICAgICBQc2lJZGVudGlmaWVyOmJhcignYmFyJykKKyAgICAgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgICBQc2lKYXZhVG9rZW46U0VNSUNPTE9OKCc7JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgIFBzaUV4cHJlc3Npb25TdGF0ZW1lbnQKKyAgICAgIFBzaU5ld0V4cHJlc3Npb246bmV3IEZvbyhoYXNoCisjeCkge30KKyAgICAgICAgUHNpS2V5d29yZDpuZXcoJ25ldycpCisgICAgICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICAgIFBzaUFub255bW91c0NsYXNzCisgICAgICAgICAgUHNpSmF2YUNvZGVSZWZlcmVuY2VFbGVtZW50OkZvbworICAgICAgICAgICAgUHNpSWRlbnRpZmllcjpGb28oJ0ZvbycpCisgICAgICAgICAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICAgIFBzaUV4cHJlc3Npb25MaXN0CisgICAgICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICAgICAgUHNpUmVmZXJlbmNlRXhwcmVzc2lvbjpoYXNoCisgICAgICAgICAgICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgICAgICAgUHNpSWRlbnRpZmllcjpoYXNoKCdoYXNoJykKKyAgICAgICAgICAgIFBzaUVycm9yRWxlbWVudDonLCcgb3IgJyknIGV4cGVjdGVkCisgICAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICAgICAgUHNpRXhwcmVzc2lvbihlbXB0eSkKKyAgICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgICAgICBQc2lXaGl0ZVNwYWNlKCdcbicpCisgICAgICAgICAgICBQc2lFbGVtZW50KEJBRF9DSEFSQUNURVIpKCcjJykKKyAgICAgICAgICAgIFBzaUVycm9yRWxlbWVudDonLCcgb3IgJyknIGV4cGVjdGVkCisgICAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICAgICAgUHNpRXhwcmVzc2lvbihlbXB0eSkKKyAgICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgICAgICBQc2lSZWZlcmVuY2VFeHByZXNzaW9uOngKKyAgICAgICAgICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICAgICAgICBQc2lJZGVudGlmaWVyOngoJ3gnKQorICAgICAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICAgIFBzaUphdmFUb2tlbjpTRU1JQ09MT04oJzsnKQorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvc3RhdGVtZW50cy9Bc3NlcnROb3JtYWwwLnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvc3RhdGVtZW50cy9Bc3NlcnROb3JtYWwwLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMzBhN2FjCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9zdGF0ZW1lbnRzL0Fzc2VydE5vcm1hbDAudHh0CkBAIC0wLDAgKzEsOSBAQAorUHNpSmF2YUZpbGU6QXNzZXJ0Tm9ybWFsMC5qYXZhCisgIFBzaUFzc2VydFN0YXRlbWVudAorICAgIFBzaUtleXdvcmQ6YXNzZXJ0KCdhc3NlcnQnKQorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaVJlZmVyZW5jZUV4cHJlc3Npb246Y29uZAorICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUlkZW50aWZpZXI6Y29uZCgnY29uZCcpCisgICAgUHNpSmF2YVRva2VuOlNFTUlDT0xPTignOycpClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9zdGF0ZW1lbnRzL0Fzc2VydE5vcm1hbDEudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9zdGF0ZW1lbnRzL0Fzc2VydE5vcm1hbDEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNiODYzNzYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL3N0YXRlbWVudHMvQXNzZXJ0Tm9ybWFsMS50eHQKQEAgLTAsMCArMSwxNiBAQAorUHNpSmF2YUZpbGU6QXNzZXJ0Tm9ybWFsMS5qYXZhCisgIFBzaUFzc2VydFN0YXRlbWVudAorICAgIFBzaUtleXdvcmQ6YXNzZXJ0KCdhc3NlcnQnKQorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaVJlZmVyZW5jZUV4cHJlc3Npb246Y29uZAorICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUlkZW50aWZpZXI6Y29uZCgnY29uZCcpCisgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgUHNpSmF2YVRva2VuOkNPTE9OKCc6JykKKyAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICBQc2lSZWZlcmVuY2VFeHByZXNzaW9uOm1lc3NhZ2UKKyAgICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lJZGVudGlmaWVyOm1lc3NhZ2UoJ21lc3NhZ2UnKQorICAgIFBzaUphdmFUb2tlbjpTRU1JQ09MT04oJzsnKQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvc3RhdGVtZW50cy9Bc3NpZ25tZW50U2ltcGxlMC50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL3N0YXRlbWVudHMvQXNzaWdubWVudFNpbXBsZTAudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNlMzcwNDYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL3N0YXRlbWVudHMvQXNzaWdubWVudFNpbXBsZTAudHh0CkBAIC0wLDAgKzEsMzEgQEAKK1BzaUphdmFGaWxlOkFzc2lnbm1lbnRTaW1wbGUwLmphdmEKKyAgUHNpRGVjbGFyYXRpb25TdGF0ZW1lbnQKKyAgICBQc2lMb2NhbFZhcmlhYmxlOmEKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDppbnRbXQorICAgICAgICBQc2lUeXBlRWxlbWVudDppbnQKKyAgICAgICAgICBQc2lLZXl3b3JkOmludCgnaW50JykKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDS0VUKCdbJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDS0VUKCddJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSWRlbnRpZmllcjphKCdhJykKKyAgICAgIFBzaUphdmFUb2tlbjpTRU1JQ09MT04oJzsnKQorICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICBQc2lFeHByZXNzaW9uU3RhdGVtZW50CisgICAgUHNpQXNzaWdubWVudEV4cHJlc3Npb246YVswXSA9IDAKKyAgICAgIFBzaUFycmF5QWNjZXNzRXhwcmVzc2lvbjphWzBdCisgICAgICAgIFBzaVJlZmVyZW5jZUV4cHJlc3Npb246YQorICAgICAgICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICAgIFBzaUlkZW50aWZpZXI6YSgnYScpCisgICAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0tFVCgnWycpCisgICAgICAgIFBzaUxpdGVyYWxFeHByZXNzaW9uOjAKKyAgICAgICAgICBQc2lKYXZhVG9rZW46SU5URUdFUl9MSVRFUkFMKCcwJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDS0VUKCddJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSmF2YVRva2VuOkVRKCc9JykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpTGl0ZXJhbEV4cHJlc3Npb246MAorICAgICAgICBQc2lKYXZhVG9rZW46SU5URUdFUl9MSVRFUkFMKCcwJykKKyAgICBQc2lKYXZhVG9rZW46U0VNSUNPTE9OKCc7JykKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL3N0YXRlbWVudHMvQXNzaWdubWVudFNpbXBsZTEudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9zdGF0ZW1lbnRzL0Fzc2lnbm1lbnRTaW1wbGUxLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZWQwMGRiCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9zdGF0ZW1lbnRzL0Fzc2lnbm1lbnRTaW1wbGUxLnR4dApAQCAtMCwwICsxLDI0IEBACitQc2lKYXZhRmlsZTpBc3NpZ25tZW50U2ltcGxlMS5qYXZhCisgIFBzaUV4cHJlc3Npb25TdGF0ZW1lbnQKKyAgICBQc2lBc3NpZ25tZW50RXhwcmVzc2lvbjphPTEKKyAgICAgIFBzaVJlZmVyZW5jZUV4cHJlc3Npb246YQorICAgICAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgIFBzaUlkZW50aWZpZXI6YSgnYScpCisgICAgICBQc2lKYXZhVG9rZW46RVEoJz0nKQorICAgICAgUHNpTGl0ZXJhbEV4cHJlc3Npb246MQorICAgICAgICBQc2lKYXZhVG9rZW46SU5URUdFUl9MSVRFUkFMKCcxJykKKyAgICBQc2lKYXZhVG9rZW46U0VNSUNPTE9OKCc7JykKKyAgUHNpV2hpdGVTcGFjZSgnICcpCisgIFBzaURlY2xhcmF0aW9uU3RhdGVtZW50CisgICAgUHNpTG9jYWxWYXJpYWJsZTpiCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6aW50CisgICAgICAgIFBzaUtleXdvcmQ6aW50KCdpbnQnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmIoJ2InKQorICAgICAgUHNpSmF2YVRva2VuOkVRKCc9JykKKyAgICAgIFBzaUxpdGVyYWxFeHByZXNzaW9uOjIKKyAgICAgICAgUHNpSmF2YVRva2VuOklOVEVHRVJfTElURVJBTCgnMicpCisgICAgICBQc2lKYXZhVG9rZW46U0VNSUNPTE9OKCc7JykKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL3N0YXRlbWVudHMvQmxvY2tFbXB0eS50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL3N0YXRlbWVudHMvQmxvY2tFbXB0eS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGMyYTAwMwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvc3RhdGVtZW50cy9CbG9ja0VtcHR5LnR4dApAQCAtMCwwICsxLDggQEAKK1BzaUphdmFGaWxlOkJsb2NrRW1wdHkuamF2YQorICBQc2lDb2RlQmxvY2sKKyAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICBQc2lFbXB0eVN0YXRlbWVudAorICAgICAgUHNpSmF2YVRva2VuOlNFTUlDT0xPTignOycpCisgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL3N0YXRlbWVudHMvQmxvY2tJbmNvbXBsZXRlMC50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL3N0YXRlbWVudHMvQmxvY2tJbmNvbXBsZXRlMC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmNkZDkwNgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvc3RhdGVtZW50cy9CbG9ja0luY29tcGxldGUwLnR4dApAQCAtMCwwICsxLDcgQEAKK1BzaUphdmFGaWxlOkJsb2NrSW5jb21wbGV0ZTAuamF2YQorICBQc2lDb2RlQmxvY2sKKyAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICBQc2lFcnJvckVsZW1lbnQ6J30nIGV4cGVjdGVkCisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICBQc2lDb21tZW50KENfU1RZTEVfQ09NTUVOVCkoJy8qfScpClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9zdGF0ZW1lbnRzL0Jsb2NrSW5jb21wbGV0ZTEudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9zdGF0ZW1lbnRzL0Jsb2NrSW5jb21wbGV0ZTEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRlYzIwYzYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL3N0YXRlbWVudHMvQmxvY2tJbmNvbXBsZXRlMS50eHQKQEAgLTAsMCArMSwxMSBAQAorUHNpSmF2YUZpbGU6QmxvY2tJbmNvbXBsZXRlMS5qYXZhCisgIFBzaUNvZGVCbG9jaworICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaUJsb2NrU3RhdGVtZW50CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lFcnJvckVsZW1lbnQ6J30nIGV4cGVjdGVkCisgICAgICA8ZW1wdHkgbGlzdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL3N0YXRlbWVudHMvQmxvY2tJbmNvbXBsZXRlMi50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL3N0YXRlbWVudHMvQmxvY2tJbmNvbXBsZXRlMi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjdhMjE3NAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvc3RhdGVtZW50cy9CbG9ja0luY29tcGxldGUyLnR4dApAQCAtMCwwICsxLDIwIEBACitQc2lKYXZhRmlsZTpCbG9ja0luY29tcGxldGUyLmphdmEKKyAgUHNpQ29kZUJsb2NrCisgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgUHNpRXJyb3JFbGVtZW50OidlbHNlJyB3aXRob3V0ICdpZicKKyAgICAgIFBzaUtleXdvcmQ6ZWxzZSgnZWxzZScpCisgICAgUHNpRW1wdHlTdGF0ZW1lbnQKKyAgICAgIFBzaUphdmFUb2tlbjpTRU1JQ09MT04oJzsnKQorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaUVycm9yRWxlbWVudDonY2F0Y2gnIHdpdGhvdXQgJ3RyeScKKyAgICAgIFBzaUtleXdvcmQ6Y2F0Y2goJ2NhdGNoJykKKyAgICBQc2lFbXB0eVN0YXRlbWVudAorICAgICAgUHNpSmF2YVRva2VuOlNFTUlDT0xPTignOycpCisgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgUHNpRXJyb3JFbGVtZW50OidmaW5hbGx5JyB3aXRob3V0ICd0cnknCisgICAgICBQc2lLZXl3b3JkOmZpbmFsbHkoJ2ZpbmFsbHknKQorICAgIFBzaUVtcHR5U3RhdGVtZW50CisgICAgICBQc2lKYXZhVG9rZW46U0VNSUNPTE9OKCc7JykKKyAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL3N0YXRlbWVudHMvQmxvY2tTaW1wbGUudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9zdGF0ZW1lbnRzL0Jsb2NrU2ltcGxlLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MjU4ZDIxCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9zdGF0ZW1lbnRzL0Jsb2NrU2ltcGxlLnR4dApAQCAtMCwwICsxLDEwIEBACitQc2lKYXZhRmlsZTpCbG9ja1NpbXBsZS5qYXZhCisgIFBzaUNvZGVCbG9jaworICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaUJsb2NrU3RhdGVtZW50CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9zdGF0ZW1lbnRzL0JyZWFrTm9ybWFsMC50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL3N0YXRlbWVudHMvQnJlYWtOb3JtYWwwLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOWQ3NzZlCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9zdGF0ZW1lbnRzL0JyZWFrTm9ybWFsMC50eHQKQEAgLTAsMCArMSw0IEBACitQc2lKYXZhRmlsZTpCcmVha05vcm1hbDAuamF2YQorICBQc2lCcmVha1N0YXRlbWVudAorICAgIFBzaUtleXdvcmQ6YnJlYWsoJ2JyZWFrJykKKyAgICBQc2lKYXZhVG9rZW46U0VNSUNPTE9OKCc7JykKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL3N0YXRlbWVudHMvQnJlYWtOb3JtYWwxLnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvc3RhdGVtZW50cy9CcmVha05vcm1hbDEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJkNTkwMTgKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL3N0YXRlbWVudHMvQnJlYWtOb3JtYWwxLnR4dApAQCAtMCwwICsxLDYgQEAKK1BzaUphdmFGaWxlOkJyZWFrTm9ybWFsMS5qYXZhCisgIFBzaUJyZWFrU3RhdGVtZW50CisgICAgUHNpS2V5d29yZDpicmVhaygnYnJlYWsnKQorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaUlkZW50aWZpZXI6TEFCRUwoJ0xBQkVMJykKKyAgICBQc2lKYXZhVG9rZW46U0VNSUNPTE9OKCc7JykKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL3N0YXRlbWVudHMvQ29udGludWVOb3JtYWwwLnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvc3RhdGVtZW50cy9Db250aW51ZU5vcm1hbDAudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMyZjljOGEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL3N0YXRlbWVudHMvQ29udGludWVOb3JtYWwwLnR4dApAQCAtMCwwICsxLDQgQEAKK1BzaUphdmFGaWxlOkNvbnRpbnVlTm9ybWFsMC5qYXZhCisgIFBzaUNvbnRpbnVlU3RhdGVtZW50CisgICAgUHNpS2V5d29yZDpjb250aW51ZSgnY29udGludWUnKQorICAgIFBzaUphdmFUb2tlbjpTRU1JQ09MT04oJzsnKQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvc3RhdGVtZW50cy9Db250aW51ZU5vcm1hbDEudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9zdGF0ZW1lbnRzL0NvbnRpbnVlTm9ybWFsMS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjcxMjRiMwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvc3RhdGVtZW50cy9Db250aW51ZU5vcm1hbDEudHh0CkBAIC0wLDAgKzEsNiBAQAorUHNpSmF2YUZpbGU6Q29udGludWVOb3JtYWwxLmphdmEKKyAgUHNpQ29udGludWVTdGF0ZW1lbnQKKyAgICBQc2lLZXl3b3JkOmNvbnRpbnVlKCdjb250aW51ZScpCisgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgUHNpSWRlbnRpZmllcjpMQUJFTCgnTEFCRUwnKQorICAgIFBzaUphdmFUb2tlbjpTRU1JQ09MT04oJzsnKQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvc3RhdGVtZW50cy9Eb0luY29tcGxldGUwLnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvc3RhdGVtZW50cy9Eb0luY29tcGxldGUwLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MmQyMzg5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9zdGF0ZW1lbnRzL0RvSW5jb21wbGV0ZTAudHh0CkBAIC0wLDAgKzEsNSBAQAorUHNpSmF2YUZpbGU6RG9JbmNvbXBsZXRlMC5qYXZhCisgIFBzaURvV2hpbGVTdGF0ZW1lbnQKKyAgICBQc2lLZXl3b3JkOmRvKCdkbycpCisgICAgUHNpRXJyb3JFbGVtZW50OlN0YXRlbWVudCBleHBlY3RlZAorICAgICAgPGVtcHR5IGxpc3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9zdGF0ZW1lbnRzL0RvSW5jb21wbGV0ZTEudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9zdGF0ZW1lbnRzL0RvSW5jb21wbGV0ZTEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM3YWMwODAKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL3N0YXRlbWVudHMvRG9JbmNvbXBsZXRlMS50eHQKQEAgLTAsMCArMSwxNiBAQAorUHNpSmF2YUZpbGU6RG9JbmNvbXBsZXRlMS5qYXZhCisgIFBzaURvV2hpbGVTdGF0ZW1lbnQKKyAgICBQc2lLZXl3b3JkOmRvKCdkbycpCisgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgUHNpRXhwcmVzc2lvblN0YXRlbWVudAorICAgICAgUHNpTWV0aG9kQ2FsbEV4cHJlc3Npb246Zm9vKCkKKyAgICAgICAgUHNpUmVmZXJlbmNlRXhwcmVzc2lvbjpmb28KKyAgICAgICAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgICAgUHNpRXhwcmVzc2lvbkxpc3QKKyAgICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lKYXZhVG9rZW46U0VNSUNPTE9OKCc7JykKKyAgICBQc2lFcnJvckVsZW1lbnQ6J3doaWxlJyBleHBlY3RlZAorICAgICAgPGVtcHR5IGxpc3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9zdGF0ZW1lbnRzL0RvSW5jb21wbGV0ZTIudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9zdGF0ZW1lbnRzL0RvSW5jb21wbGV0ZTIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEyMjY1ZWMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL3N0YXRlbWVudHMvRG9JbmNvbXBsZXRlMi50eHQKQEAgLTAsMCArMSwxOCBAQAorUHNpSmF2YUZpbGU6RG9JbmNvbXBsZXRlMi5qYXZhCisgIFBzaURvV2hpbGVTdGF0ZW1lbnQKKyAgICBQc2lLZXl3b3JkOmRvKCdkbycpCisgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgUHNpRXhwcmVzc2lvblN0YXRlbWVudAorICAgICAgUHNpTWV0aG9kQ2FsbEV4cHJlc3Npb246Zm9vKCkKKyAgICAgICAgUHNpUmVmZXJlbmNlRXhwcmVzc2lvbjpmb28KKyAgICAgICAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgICAgUHNpRXhwcmVzc2lvbkxpc3QKKyAgICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lKYXZhVG9rZW46U0VNSUNPTE9OKCc7JykKKyAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICBQc2lLZXl3b3JkOndoaWxlKCd3aGlsZScpCisgICAgUHNpRXJyb3JFbGVtZW50OicoJyBleHBlY3RlZAorICAgICAgPGVtcHR5IGxpc3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9zdGF0ZW1lbnRzL0RvSW5jb21wbGV0ZTMudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9zdGF0ZW1lbnRzL0RvSW5jb21wbGV0ZTMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBiMzFiMTYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL3N0YXRlbWVudHMvRG9JbmNvbXBsZXRlMy50eHQKQEAgLTAsMCArMSwxOSBAQAorUHNpSmF2YUZpbGU6RG9JbmNvbXBsZXRlMy5qYXZhCisgIFBzaURvV2hpbGVTdGF0ZW1lbnQKKyAgICBQc2lLZXl3b3JkOmRvKCdkbycpCisgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgUHNpRXhwcmVzc2lvblN0YXRlbWVudAorICAgICAgUHNpTWV0aG9kQ2FsbEV4cHJlc3Npb246Zm9vKCkKKyAgICAgICAgUHNpUmVmZXJlbmNlRXhwcmVzc2lvbjpmb28KKyAgICAgICAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgICAgUHNpRXhwcmVzc2lvbkxpc3QKKyAgICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lKYXZhVG9rZW46U0VNSUNPTE9OKCc7JykKKyAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICBQc2lLZXl3b3JkOndoaWxlKCd3aGlsZScpCisgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICBQc2lFcnJvckVsZW1lbnQ6RXhwcmVzc2lvbiBleHBlY3RlZAorICAgICAgPGVtcHR5IGxpc3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9zdGF0ZW1lbnRzL0RvSW5jb21wbGV0ZTQudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9zdGF0ZW1lbnRzL0RvSW5jb21wbGV0ZTQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNlOTRlNjIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL3N0YXRlbWVudHMvRG9JbmNvbXBsZXRlNC50eHQKQEAgLTAsMCArMSwyMSBAQAorUHNpSmF2YUZpbGU6RG9JbmNvbXBsZXRlNC5qYXZhCisgIFBzaURvV2hpbGVTdGF0ZW1lbnQKKyAgICBQc2lLZXl3b3JkOmRvKCdkbycpCisgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgUHNpRXhwcmVzc2lvblN0YXRlbWVudAorICAgICAgUHNpTWV0aG9kQ2FsbEV4cHJlc3Npb246Zm9vKCkKKyAgICAgICAgUHNpUmVmZXJlbmNlRXhwcmVzc2lvbjpmb28KKyAgICAgICAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgICAgUHNpRXhwcmVzc2lvbkxpc3QKKyAgICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lKYXZhVG9rZW46U0VNSUNPTE9OKCc7JykKKyAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICBQc2lLZXl3b3JkOndoaWxlKCd3aGlsZScpCisgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICBQc2lFcnJvckVsZW1lbnQ6RXhwcmVzc2lvbiBleHBlY3RlZAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICBQc2lKYXZhVG9rZW46U0VNSUNPTE9OKCc7JykKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL3N0YXRlbWVudHMvRG9JbmNvbXBsZXRlNS50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL3N0YXRlbWVudHMvRG9JbmNvbXBsZXRlNS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDEyZTZhZQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvc3RhdGVtZW50cy9Eb0luY29tcGxldGU1LnR4dApAQCAtMCwwICsxLDMwIEBACitQc2lKYXZhRmlsZTpEb0luY29tcGxldGU1LmphdmEKKyAgUHNpRG9XaGlsZVN0YXRlbWVudAorICAgIFBzaUtleXdvcmQ6ZG8oJ2RvJykKKyAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICBQc2lFeHByZXNzaW9uU3RhdGVtZW50CisgICAgICBQc2lNZXRob2RDYWxsRXhwcmVzc2lvbjpmb28oKQorICAgICAgICBQc2lSZWZlcmVuY2VFeHByZXNzaW9uOmZvbworICAgICAgICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgICBQc2lFeHByZXNzaW9uTGlzdAorICAgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaUphdmFUb2tlbjpTRU1JQ09MT04oJzsnKQorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaUtleXdvcmQ6d2hpbGUoJ3doaWxlJykKKyAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgIFBzaUVycm9yRWxlbWVudDpFeHByZXNzaW9uIGV4cGVjdGVkCisgICAgICA8ZW1wdHkgbGlzdD4KKyAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgUHNpRXhwcmVzc2lvblN0YXRlbWVudAorICAgIFBzaU1ldGhvZENhbGxFeHByZXNzaW9uOmcoKQorICAgICAgUHNpUmVmZXJlbmNlRXhwcmVzc2lvbjpnCisgICAgICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgUHNpSWRlbnRpZmllcjpnKCdnJykKKyAgICAgIFBzaUV4cHJlc3Npb25MaXN0CisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgUHNpSmF2YVRva2VuOlNFTUlDT0xPTignOycpClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9zdGF0ZW1lbnRzL0RvSW5jb21wbGV0ZTYudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9zdGF0ZW1lbnRzL0RvSW5jb21wbGV0ZTYudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdlYmFlZGQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL3N0YXRlbWVudHMvRG9JbmNvbXBsZXRlNi50eHQKQEAgLTAsMCArMSwyNCBAQAorUHNpSmF2YUZpbGU6RG9JbmNvbXBsZXRlNi5qYXZhCisgIFBzaURvV2hpbGVTdGF0ZW1lbnQKKyAgICBQc2lLZXl3b3JkOmRvKCdkbycpCisgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgUHNpRXhwcmVzc2lvblN0YXRlbWVudAorICAgICAgUHNpTWV0aG9kQ2FsbEV4cHJlc3Npb246Zm9vKCkKKyAgICAgICAgUHNpUmVmZXJlbmNlRXhwcmVzc2lvbjpmb28KKyAgICAgICAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgICAgUHNpRXhwcmVzc2lvbkxpc3QKKyAgICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lKYXZhVG9rZW46U0VNSUNPTE9OKCc7JykKKyAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICBQc2lLZXl3b3JkOndoaWxlKCd3aGlsZScpCisgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICBQc2lSZWZlcmVuY2VFeHByZXNzaW9uOmNvbmQKKyAgICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lJZGVudGlmaWVyOmNvbmQoJ2NvbmQnKQorICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgUHNpRXJyb3JFbGVtZW50Oic7JyBleHBlY3RlZAorICAgICAgPGVtcHR5IGxpc3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9zdGF0ZW1lbnRzL0RvTm9ybWFsLnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvc3RhdGVtZW50cy9Eb05vcm1hbC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDIzMWMwNwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvc3RhdGVtZW50cy9Eb05vcm1hbC50eHQKQEAgLTAsMCArMSwxMyBAQAorUHNpSmF2YUZpbGU6RG9Ob3JtYWwuamF2YQorICBQc2lEb1doaWxlU3RhdGVtZW50CisgICAgUHNpS2V5d29yZDpkbygnZG8nKQorICAgIFBzaUJsb2NrU3RhdGVtZW50CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaUtleXdvcmQ6d2hpbGUoJ3doaWxlJykKKyAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgIFBzaUxpdGVyYWxFeHByZXNzaW9uOnRydWUKKyAgICAgIFBzaUphdmFUb2tlbjpUUlVFX0tFWVdPUkQoJ3RydWUnKQorICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgUHNpSmF2YVRva2VuOlNFTUlDT0xPTignOycpClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9zdGF0ZW1lbnRzL0Zvci50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL3N0YXRlbWVudHMvRm9yLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNGQzMTQ4Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9zdGF0ZW1lbnRzL0Zvci50eHQKQEAgLTAsMCArMSw3OCBAQAorUHNpSmF2YUZpbGU6Rm9yLmphdmEKKyAgUHNpRm9yU3RhdGVtZW50CisgICAgUHNpS2V5d29yZDpmb3IoJ2ZvcicpCisgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICBQc2lEZWNsYXJhdGlvblN0YXRlbWVudAorICAgICAgUHNpTG9jYWxWYXJpYWJsZTppdAorICAgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgIFBzaVR5cGVFbGVtZW50Okl0ZXJhdG9yPFN0cmluZz4KKyAgICAgICAgICBQc2lKYXZhQ29kZVJlZmVyZW5jZUVsZW1lbnQ6SXRlcmF0b3I8U3RyaW5nPgorICAgICAgICAgICAgUHNpSWRlbnRpZmllcjpJdGVyYXRvcignSXRlcmF0b3InKQorICAgICAgICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICAgICAgICBQc2lKYXZhVG9rZW46TFQoJzwnKQorICAgICAgICAgICAgICBQc2lUeXBlRWxlbWVudDpTdHJpbmcKKyAgICAgICAgICAgICAgICBQc2lKYXZhQ29kZVJlZmVyZW5jZUVsZW1lbnQ6U3RyaW5nCisgICAgICAgICAgICAgICAgICBQc2lJZGVudGlmaWVyOlN0cmluZygnU3RyaW5nJykKKyAgICAgICAgICAgICAgICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgICAgICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgICAgICAgIFBzaUphdmFUb2tlbjpHVCgnPicpCisgICAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgICBQc2lJZGVudGlmaWVyOml0KCdpdCcpCisgICAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgICBQc2lKYXZhVG9rZW46RVEoJz0nKQorICAgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgICAgUHNpTGl0ZXJhbEV4cHJlc3Npb246bnVsbAorICAgICAgICAgIFBzaUphdmFUb2tlbjpOVUxMX0tFWVdPUkQoJ251bGwnKQorICAgICAgICBQc2lKYXZhVG9rZW46U0VNSUNPTE9OKCc7JykKKyAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICBQc2lNZXRob2RDYWxsRXhwcmVzc2lvbjppdC5oYXNOZXh0KCkKKyAgICAgIFBzaVJlZmVyZW5jZUV4cHJlc3Npb246aXQuaGFzTmV4dAorICAgICAgICBQc2lSZWZlcmVuY2VFeHByZXNzaW9uOml0CisgICAgICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgICAgUHNpSWRlbnRpZmllcjppdCgnaXQnKQorICAgICAgICBQc2lKYXZhVG9rZW46RE9UKCcuJykKKyAgICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICBQc2lJZGVudGlmaWVyOmhhc05leHQoJ2hhc05leHQnKQorICAgICAgUHNpRXhwcmVzc2lvbkxpc3QKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICBQc2lKYXZhVG9rZW46U0VNSUNPTE9OKCc7JykKKyAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaUJsb2NrU3RhdGVtZW50CisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgICBQc2lEZWNsYXJhdGlvblN0YXRlbWVudAorICAgICAgICAgIFBzaUxvY2FsVmFyaWFibGU6cworICAgICAgICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgICAgIFBzaVR5cGVFbGVtZW50OlN0cmluZworICAgICAgICAgICAgICBQc2lKYXZhQ29kZVJlZmVyZW5jZUVsZW1lbnQ6U3RyaW5nCisgICAgICAgICAgICAgICAgUHNpSWRlbnRpZmllcjpTdHJpbmcoJ1N0cmluZycpCisgICAgICAgICAgICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgICAgICAgIFBzaUlkZW50aWZpZXI6cygncycpCisgICAgICAgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgICAgICAgIFBzaUphdmFUb2tlbjpFUSgnPScpCisgICAgICAgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgICAgICAgIFBzaU1ldGhvZENhbGxFeHByZXNzaW9uOml0Lm5leHQoKQorICAgICAgICAgICAgICBQc2lSZWZlcmVuY2VFeHByZXNzaW9uOml0Lm5leHQKKyAgICAgICAgICAgICAgICBQc2lSZWZlcmVuY2VFeHByZXNzaW9uOml0CisgICAgICAgICAgICAgICAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICAgICAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICAgICAgICAgICAgUHNpSWRlbnRpZmllcjppdCgnaXQnKQorICAgICAgICAgICAgICAgIFBzaUphdmFUb2tlbjpET1QoJy4nKQorICAgICAgICAgICAgICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgICAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICAgICAgICAgIFBzaUlkZW50aWZpZXI6bmV4dCgnbmV4dCcpCisgICAgICAgICAgICAgIFBzaUV4cHJlc3Npb25MaXN0CisgICAgICAgICAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgICAgICAgUHNpSmF2YVRva2VuOlNFTUlDT0xPTignOycpCisgICAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL3N0YXRlbWVudHMvRm9yRWFjaC50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL3N0YXRlbWVudHMvRm9yRWFjaC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWUzZGZlNAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvc3RhdGVtZW50cy9Gb3JFYWNoLnR4dApAQCAtMCwwICsxLDM0IEBACitQc2lKYXZhRmlsZTpGb3JFYWNoLmphdmEKKyAgUHNpRm9yZWFjaFN0YXRlbWVudAorICAgIFBzaUtleXdvcmQ6Zm9yKCdmb3InKQorICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgUHNpUGFyYW1ldGVyOm8KKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDpPYmplY3QKKyAgICAgICAgUHNpSmF2YUNvZGVSZWZlcmVuY2VFbGVtZW50Ok9iamVjdAorICAgICAgICAgIFBzaUlkZW50aWZpZXI6T2JqZWN0KCdPYmplY3QnKQorICAgICAgICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOm8oJ28nKQorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaUphdmFUb2tlbjpDT0xPTignOicpCisgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgUHNpTWV0aG9kQ2FsbEV4cHJlc3Npb246bWFwLmVudHJ5U2V0KCkKKyAgICAgIFBzaVJlZmVyZW5jZUV4cHJlc3Npb246bWFwLmVudHJ5U2V0CisgICAgICAgIFBzaVJlZmVyZW5jZUV4cHJlc3Npb246bWFwCisgICAgICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgICAgUHNpSWRlbnRpZmllcjptYXAoJ21hcCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpET1QoJy4nKQorICAgICAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgIFBzaUlkZW50aWZpZXI6ZW50cnlTZXQoJ2VudHJ5U2V0JykKKyAgICAgIFBzaUV4cHJlc3Npb25MaXN0CisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICBQc2lFbXB0eVN0YXRlbWVudAorICAgICAgUHNpSmF2YVRva2VuOlNFTUlDT0xPTignOycpClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9zdGF0ZW1lbnRzL0ZvckVhY2hJbmNvbXBsZXRlMC50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL3N0YXRlbWVudHMvRm9yRWFjaEluY29tcGxldGUwLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOTFlY2FmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9zdGF0ZW1lbnRzL0ZvckVhY2hJbmNvbXBsZXRlMC50eHQKQEAgLTAsMCArMSwyMiBAQAorUHNpSmF2YUZpbGU6Rm9yRWFjaEluY29tcGxldGUwLmphdmEKKyAgUHNpRm9yU3RhdGVtZW50CisgICAgUHNpS2V5d29yZDpmb3IoJ2ZvcicpCisgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICBQc2lMYWJlbGVkU3RhdGVtZW50CisgICAgICBQc2lJZGVudGlmaWVyOk9iamVjdCgnT2JqZWN0JykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAgJykKKyAgICAgIFBzaUphdmFUb2tlbjpDT0xPTignOicpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUV4cHJlc3Npb25TdGF0ZW1lbnQKKyAgICAgICAgUHNpUmVmZXJlbmNlRXhwcmVzc2lvbjpsaXN0CisgICAgICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgICAgUHNpSWRlbnRpZmllcjpsaXN0KCdsaXN0JykKKyAgICAgICAgUHNpRXJyb3JFbGVtZW50Oic7JyBleHBlY3RlZAorICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaUVycm9yRWxlbWVudDonOycgZXhwZWN0ZWQKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgUHNpRW1wdHlTdGF0ZW1lbnQKKyAgICAgIFBzaUphdmFUb2tlbjpTRU1JQ09MT04oJzsnKQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvc3RhdGVtZW50cy9Gb3JJbmNvbXBsZXRlMC50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL3N0YXRlbWVudHMvRm9ySW5jb21wbGV0ZTAudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg3MGQwNjEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL3N0YXRlbWVudHMvRm9ySW5jb21wbGV0ZTAudHh0CkBAIC0wLDAgKzEsNSBAQAorUHNpSmF2YUZpbGU6Rm9ySW5jb21wbGV0ZTAuamF2YQorICBQc2lGb3JTdGF0ZW1lbnQKKyAgICBQc2lLZXl3b3JkOmZvcignZm9yJykKKyAgICBQc2lFcnJvckVsZW1lbnQ6JygnIGV4cGVjdGVkCisgICAgICA8ZW1wdHkgbGlzdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL3N0YXRlbWVudHMvRm9ySW5jb21wbGV0ZTEudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9zdGF0ZW1lbnRzL0ZvckluY29tcGxldGUxLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZmQ1NDVlCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9zdGF0ZW1lbnRzL0ZvckluY29tcGxldGUxLnR4dApAQCAtMCwwICsxLDYgQEAKK1BzaUphdmFGaWxlOkZvckluY29tcGxldGUxLmphdmEKKyAgUHNpRm9yU3RhdGVtZW50CisgICAgUHNpS2V5d29yZDpmb3IoJ2ZvcicpCisgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICBQc2lFcnJvckVsZW1lbnQ6U3RhdGVtZW50IGV4cGVjdGVkCisgICAgICA8ZW1wdHkgbGlzdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL3N0YXRlbWVudHMvRm9ySW5jb21wbGV0ZTIudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9zdGF0ZW1lbnRzL0ZvckluY29tcGxldGUyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YjJkMThmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9zdGF0ZW1lbnRzL0ZvckluY29tcGxldGUyLnR4dApAQCAtMCwwICsxLDIwIEBACitQc2lKYXZhRmlsZTpGb3JJbmNvbXBsZXRlMi5qYXZhCisgIFBzaUZvclN0YXRlbWVudAorICAgIFBzaUtleXdvcmQ6Zm9yKCdmb3InKQorICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgUHNpRGVjbGFyYXRpb25TdGF0ZW1lbnQKKyAgICAgIFBzaUxvY2FsVmFyaWFibGU6aQorICAgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgIFBzaVR5cGVFbGVtZW50OmludAorICAgICAgICAgIFBzaUtleXdvcmQ6aW50KCdpbnQnKQorICAgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgICAgUHNpSWRlbnRpZmllcjppKCdpJykKKyAgICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICAgIFBzaUphdmFUb2tlbjpFUSgnPScpCisgICAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgICBQc2lMaXRlcmFsRXhwcmVzc2lvbjowCisgICAgICAgICAgUHNpSmF2YVRva2VuOklOVEVHRVJfTElURVJBTCgnMCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpTRU1JQ09MT04oJzsnKQorICAgIFBzaUVycm9yRWxlbWVudDonOycgZXhwZWN0ZWQKKyAgICAgIDxlbXB0eSBsaXN0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvc3RhdGVtZW50cy9Gb3JJbmNvbXBsZXRlMy50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL3N0YXRlbWVudHMvRm9ySW5jb21wbGV0ZTMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRhNzRhMjUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL3N0YXRlbWVudHMvRm9ySW5jb21wbGV0ZTMudHh0CkBAIC0wLDAgKzEsMzEgQEAKK1BzaUphdmFGaWxlOkZvckluY29tcGxldGUzLmphdmEKKyAgUHNpRm9yU3RhdGVtZW50CisgICAgUHNpS2V5d29yZDpmb3IoJ2ZvcicpCisgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICBQc2lEZWNsYXJhdGlvblN0YXRlbWVudAorICAgICAgUHNpTG9jYWxWYXJpYWJsZTppCisgICAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgUHNpVHlwZUVsZW1lbnQ6aW50CisgICAgICAgICAgUHNpS2V5d29yZDppbnQoJ2ludCcpCisgICAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgICBQc2lJZGVudGlmaWVyOmkoJ2knKQorICAgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgICAgUHNpSmF2YVRva2VuOkVRKCc9JykKKyAgICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICAgIFBzaUxpdGVyYWxFeHByZXNzaW9uOjAKKyAgICAgICAgICBQc2lKYXZhVG9rZW46SU5URUdFUl9MSVRFUkFMKCcwJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlNFTUlDT0xPTignOycpCisgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgUHNpQmluYXJ5RXhwcmVzc2lvbjppIDwgMTAKKyAgICAgIFBzaVJlZmVyZW5jZUV4cHJlc3Npb246aQorICAgICAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgIFBzaUlkZW50aWZpZXI6aSgnaScpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUphdmFUb2tlbjpMVCgnPCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUxpdGVyYWxFeHByZXNzaW9uOjEwCisgICAgICAgIFBzaUphdmFUb2tlbjpJTlRFR0VSX0xJVEVSQUwoJzEwJykKKyAgICBQc2lFcnJvckVsZW1lbnQ6JzsnIGV4cGVjdGVkCisgICAgICA8ZW1wdHkgbGlzdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL3N0YXRlbWVudHMvRm9ySW5jb21wbGV0ZTQudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9zdGF0ZW1lbnRzL0ZvckluY29tcGxldGU0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMjY4MGNjCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9zdGF0ZW1lbnRzL0ZvckluY29tcGxldGU0LnR4dApAQCAtMCwwICsxLDMyIEBACitQc2lKYXZhRmlsZTpGb3JJbmNvbXBsZXRlNC5qYXZhCisgIFBzaUZvclN0YXRlbWVudAorICAgIFBzaUtleXdvcmQ6Zm9yKCdmb3InKQorICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgUHNpRGVjbGFyYXRpb25TdGF0ZW1lbnQKKyAgICAgIFBzaUxvY2FsVmFyaWFibGU6aQorICAgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgIFBzaVR5cGVFbGVtZW50OmludAorICAgICAgICAgIFBzaUtleXdvcmQ6aW50KCdpbnQnKQorICAgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgICAgUHNpSWRlbnRpZmllcjppKCdpJykKKyAgICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICAgIFBzaUphdmFUb2tlbjpFUSgnPScpCisgICAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgICBQc2lMaXRlcmFsRXhwcmVzc2lvbjowCisgICAgICAgICAgUHNpSmF2YVRva2VuOklOVEVHRVJfTElURVJBTCgnMCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpTRU1JQ09MT04oJzsnKQorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaUJpbmFyeUV4cHJlc3Npb246aSA8IDEwCisgICAgICBQc2lSZWZlcmVuY2VFeHByZXNzaW9uOmkKKyAgICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICBQc2lJZGVudGlmaWVyOmkoJ2knKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lKYXZhVG9rZW46TFQoJzwnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lMaXRlcmFsRXhwcmVzc2lvbjoxMAorICAgICAgICBQc2lKYXZhVG9rZW46SU5URUdFUl9MSVRFUkFMKCcxMCcpCisgICAgUHNpSmF2YVRva2VuOlNFTUlDT0xPTignOycpCisgICAgUHNpRXJyb3JFbGVtZW50OicpJyBleHBlY3RlZAorICAgICAgPGVtcHR5IGxpc3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9zdGF0ZW1lbnRzL0ZvckluY29tcGxldGU1LnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvc3RhdGVtZW50cy9Gb3JJbmNvbXBsZXRlNS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjBlODRhNgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvc3RhdGVtZW50cy9Gb3JJbmNvbXBsZXRlNS50eHQKQEAgLTAsMCArMSw0MCBAQAorUHNpSmF2YUZpbGU6Rm9ySW5jb21wbGV0ZTUuamF2YQorICBQc2lGb3JTdGF0ZW1lbnQKKyAgICBQc2lLZXl3b3JkOmZvcignZm9yJykKKyAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgIFBzaURlY2xhcmF0aW9uU3RhdGVtZW50CisgICAgICBQc2lMb2NhbFZhcmlhYmxlOmkKKyAgICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICBQc2lUeXBlRWxlbWVudDppbnQKKyAgICAgICAgICBQc2lLZXl3b3JkOmludCgnaW50JykKKyAgICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICAgIFBzaUlkZW50aWZpZXI6aSgnaScpCisgICAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgICBQc2lKYXZhVG9rZW46RVEoJz0nKQorICAgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgICAgUHNpTGl0ZXJhbEV4cHJlc3Npb246MAorICAgICAgICAgIFBzaUphdmFUb2tlbjpJTlRFR0VSX0xJVEVSQUwoJzAnKQorICAgICAgICBQc2lKYXZhVG9rZW46U0VNSUNPTE9OKCc7JykKKyAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICBQc2lCaW5hcnlFeHByZXNzaW9uOmkgPCAxMAorICAgICAgUHNpUmVmZXJlbmNlRXhwcmVzc2lvbjppCisgICAgICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgUHNpSWRlbnRpZmllcjppKCdpJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSmF2YVRva2VuOkxUKCc8JykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpTGl0ZXJhbEV4cHJlc3Npb246MTAKKyAgICAgICAgUHNpSmF2YVRva2VuOklOVEVHRVJfTElURVJBTCgnMTAnKQorICAgIFBzaUphdmFUb2tlbjpTRU1JQ09MT04oJzsnKQorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaUV4cHJlc3Npb25TdGF0ZW1lbnQKKyAgICAgIFBzaVBvc3RmaXhFeHByZXNzaW9uOmkrKworICAgICAgICBQc2lSZWZlcmVuY2VFeHByZXNzaW9uOmkKKyAgICAgICAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgICBQc2lJZGVudGlmaWVyOmkoJ2knKQorICAgICAgICBQc2lKYXZhVG9rZW46UExVU1BMVVMoJysrJykKKyAgICBQc2lFcnJvckVsZW1lbnQ6JyknIGV4cGVjdGVkCisgICAgICA8ZW1wdHkgbGlzdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL3N0YXRlbWVudHMvRm9ySW5jb21wbGV0ZTYudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9zdGF0ZW1lbnRzL0ZvckluY29tcGxldGU2LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMTAwMTJlCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9zdGF0ZW1lbnRzL0ZvckluY29tcGxldGU2LnR4dApAQCAtMCwwICsxLDQxIEBACitQc2lKYXZhRmlsZTpGb3JJbmNvbXBsZXRlNi5qYXZhCisgIFBzaUZvclN0YXRlbWVudAorICAgIFBzaUtleXdvcmQ6Zm9yKCdmb3InKQorICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgUHNpRGVjbGFyYXRpb25TdGF0ZW1lbnQKKyAgICAgIFBzaUxvY2FsVmFyaWFibGU6aQorICAgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgIFBzaVR5cGVFbGVtZW50OmludAorICAgICAgICAgIFBzaUtleXdvcmQ6aW50KCdpbnQnKQorICAgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgICAgUHNpSWRlbnRpZmllcjppKCdpJykKKyAgICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICAgIFBzaUphdmFUb2tlbjpFUSgnPScpCisgICAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgICBQc2lMaXRlcmFsRXhwcmVzc2lvbjowCisgICAgICAgICAgUHNpSmF2YVRva2VuOklOVEVHRVJfTElURVJBTCgnMCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpTRU1JQ09MT04oJzsnKQorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaUJpbmFyeUV4cHJlc3Npb246aSA8IDEwCisgICAgICBQc2lSZWZlcmVuY2VFeHByZXNzaW9uOmkKKyAgICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICBQc2lJZGVudGlmaWVyOmkoJ2knKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lKYXZhVG9rZW46TFQoJzwnKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lMaXRlcmFsRXhwcmVzc2lvbjoxMAorICAgICAgICBQc2lKYXZhVG9rZW46SU5URUdFUl9MSVRFUkFMKCcxMCcpCisgICAgUHNpSmF2YVRva2VuOlNFTUlDT0xPTignOycpCisgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgUHNpRXhwcmVzc2lvblN0YXRlbWVudAorICAgICAgUHNpUG9zdGZpeEV4cHJlc3Npb246aSsrCisgICAgICAgIFBzaVJlZmVyZW5jZUV4cHJlc3Npb246aQorICAgICAgICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICAgIFBzaUlkZW50aWZpZXI6aSgnaScpCisgICAgICAgIFBzaUphdmFUb2tlbjpQTFVTUExVUygnKysnKQorICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgUHNpRXJyb3JFbGVtZW50OlN0YXRlbWVudCBleHBlY3RlZAorICAgICAgPGVtcHR5IGxpc3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9zdGF0ZW1lbnRzL0ZvckluY29tcGxldGU3LnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvc3RhdGVtZW50cy9Gb3JJbmNvbXBsZXRlNy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmY1N2I4YwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvc3RhdGVtZW50cy9Gb3JJbmNvbXBsZXRlNy50eHQKQEAgLTAsMCArMSwxOCBAQAorUHNpSmF2YUZpbGU6Rm9ySW5jb21wbGV0ZTcuamF2YQorICBQc2lGb3JTdGF0ZW1lbnQKKyAgICBQc2lLZXl3b3JkOmZvcignZm9yJykKKyAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgIFBzaUVycm9yRWxlbWVudDpTdGF0ZW1lbnQgZXhwZWN0ZWQKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgUHNpRXhwcmVzc2lvblN0YXRlbWVudAorICAgICAgUHNpTWV0aG9kQ2FsbEV4cHJlc3Npb246Zm9vKCkKKyAgICAgICAgUHNpUmVmZXJlbmNlRXhwcmVzc2lvbjpmb28KKyAgICAgICAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgICAgUHNpRXhwcmVzc2lvbkxpc3QKKyAgICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lKYXZhVG9rZW46U0VNSUNPTE9OKCc7JykKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL3N0YXRlbWVudHMvRm9ySW5jb21wbGV0ZTgudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9zdGF0ZW1lbnRzL0ZvckluY29tcGxldGU4LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ODRkODE2Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9zdGF0ZW1lbnRzL0ZvckluY29tcGxldGU4LnR4dApAQCAtMCwwICsxLDMyIEBACitQc2lKYXZhRmlsZTpGb3JJbmNvbXBsZXRlOC5qYXZhCisgIFBzaUZvclN0YXRlbWVudAorICAgIFBzaUtleXdvcmQ6Zm9yKCdmb3InKQorICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgUHNpRGVjbGFyYXRpb25TdGF0ZW1lbnQKKyAgICAgIFBzaUxvY2FsVmFyaWFibGU6aQorICAgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgIFBzaVR5cGVFbGVtZW50OmludAorICAgICAgICAgIFBzaUtleXdvcmQ6aW50KCdpbnQnKQorICAgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgICAgUHNpSWRlbnRpZmllcjppKCdpJykKKyAgICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICAgIFBzaUphdmFUb2tlbjpFUSgnPScpCisgICAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgICBQc2lMaXRlcmFsRXhwcmVzc2lvbjowCisgICAgICAgICAgUHNpSmF2YVRva2VuOklOVEVHRVJfTElURVJBTCgnMCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpTRU1JQ09MT04oJzsnKQorICAgIFBzaUVycm9yRWxlbWVudDonOycgZXhwZWN0ZWQKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgUHNpRXhwcmVzc2lvblN0YXRlbWVudAorICAgICAgUHNpTWV0aG9kQ2FsbEV4cHJlc3Npb246Zm9vKCkKKyAgICAgICAgUHNpUmVmZXJlbmNlRXhwcmVzc2lvbjpmb28KKyAgICAgICAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgICAgUHNpRXhwcmVzc2lvbkxpc3QKKyAgICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lKYXZhVG9rZW46U0VNSUNPTE9OKCc7JykKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL3N0YXRlbWVudHMvRm9ySW5jb21wbGV0ZTkudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9zdGF0ZW1lbnRzL0ZvckluY29tcGxldGU5LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OTQ3ODRjCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9zdGF0ZW1lbnRzL0ZvckluY29tcGxldGU5LnR4dApAQCAtMCwwICsxLDQzIEBACitQc2lKYXZhRmlsZTpGb3JJbmNvbXBsZXRlOS5qYXZhCisgIFBzaUZvclN0YXRlbWVudAorICAgIFBzaUtleXdvcmQ6Zm9yKCdmb3InKQorICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgUHNpRGVjbGFyYXRpb25TdGF0ZW1lbnQKKyAgICAgIFBzaUxvY2FsVmFyaWFibGU6aQorICAgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgIFBzaVR5cGVFbGVtZW50OmludAorICAgICAgICAgIFBzaUtleXdvcmQ6aW50KCdpbnQnKQorICAgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgICAgUHNpSWRlbnRpZmllcjppKCdpJykKKyAgICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICAgIFBzaUphdmFUb2tlbjpFUSgnPScpCisgICAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgICBQc2lMaXRlcmFsRXhwcmVzc2lvbjowCisgICAgICAgICAgUHNpSmF2YVRva2VuOklOVEVHRVJfTElURVJBTCgnMCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpTRU1JQ09MT04oJzsnKQorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaUJpbmFyeUV4cHJlc3Npb246aSA8IDAKKyAgICAgIFBzaVJlZmVyZW5jZUV4cHJlc3Npb246aQorICAgICAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgIFBzaUlkZW50aWZpZXI6aSgnaScpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUphdmFUb2tlbjpMVCgnPCcpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUxpdGVyYWxFeHByZXNzaW9uOjAKKyAgICAgICAgUHNpSmF2YVRva2VuOklOVEVHRVJfTElURVJBTCgnMCcpCisgICAgUHNpRXJyb3JFbGVtZW50Oic7JyBleHBlY3RlZAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICBQc2lFeHByZXNzaW9uU3RhdGVtZW50CisgICAgICBQc2lNZXRob2RDYWxsRXhwcmVzc2lvbjpmb28oKQorICAgICAgICBQc2lSZWZlcmVuY2VFeHByZXNzaW9uOmZvbworICAgICAgICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgICBQc2lFeHByZXNzaW9uTGlzdAorICAgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaUphdmFUb2tlbjpTRU1JQ09MT04oJzsnKQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvc3RhdGVtZW50cy9Gb3JOb3JtYWwwLnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvc3RhdGVtZW50cy9Gb3JOb3JtYWwwLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zODViZjEzCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9zdGF0ZW1lbnRzL0Zvck5vcm1hbDAudHh0CkBAIC0wLDAgKzEsNDIgQEAKK1BzaUphdmFGaWxlOkZvck5vcm1hbDAuamF2YQorICBQc2lGb3JTdGF0ZW1lbnQKKyAgICBQc2lLZXl3b3JkOmZvcignZm9yJykKKyAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgIFBzaURlY2xhcmF0aW9uU3RhdGVtZW50CisgICAgICBQc2lMb2NhbFZhcmlhYmxlOmkKKyAgICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICBQc2lUeXBlRWxlbWVudDppbnQKKyAgICAgICAgICBQc2lLZXl3b3JkOmludCgnaW50JykKKyAgICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICAgIFBzaUlkZW50aWZpZXI6aSgnaScpCisgICAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgICBQc2lKYXZhVG9rZW46RVEoJz0nKQorICAgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgICAgUHNpTGl0ZXJhbEV4cHJlc3Npb246MAorICAgICAgICAgIFBzaUphdmFUb2tlbjpJTlRFR0VSX0xJVEVSQUwoJzAnKQorICAgICAgICBQc2lKYXZhVG9rZW46U0VNSUNPTE9OKCc7JykKKyAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICBQc2lCaW5hcnlFeHByZXNzaW9uOmkgPCAxMAorICAgICAgUHNpUmVmZXJlbmNlRXhwcmVzc2lvbjppCisgICAgICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgUHNpSWRlbnRpZmllcjppKCdpJykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpSmF2YVRva2VuOkxUKCc8JykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpTGl0ZXJhbEV4cHJlc3Npb246MTAKKyAgICAgICAgUHNpSmF2YVRva2VuOklOVEVHRVJfTElURVJBTCgnMTAnKQorICAgIFBzaUphdmFUb2tlbjpTRU1JQ09MT04oJzsnKQorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaUV4cHJlc3Npb25TdGF0ZW1lbnQKKyAgICAgIFBzaVBvc3RmaXhFeHByZXNzaW9uOmkrKworICAgICAgICBQc2lSZWZlcmVuY2VFeHByZXNzaW9uOmkKKyAgICAgICAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgICBQc2lJZGVudGlmaWVyOmkoJ2knKQorICAgICAgICBQc2lKYXZhVG9rZW46UExVU1BMVVMoJysrJykKKyAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgUHNpRW1wdHlTdGF0ZW1lbnQKKyAgICAgIFBzaUphdmFUb2tlbjpTRU1JQ09MT04oJzsnKQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvc3RhdGVtZW50cy9Gb3JOb3JtYWwxLnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvc3RhdGVtZW50cy9Gb3JOb3JtYWwxLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNmMyMzNiCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9zdGF0ZW1lbnRzL0Zvck5vcm1hbDEudHh0CkBAIC0wLDAgKzEsMjIgQEAKK1BzaUphdmFGaWxlOkZvck5vcm1hbDEuamF2YQorICBQc2lGb3JTdGF0ZW1lbnQKKyAgICBQc2lLZXl3b3JkOmZvcignZm9yJykKKyAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaUVtcHR5U3RhdGVtZW50CisgICAgICBQc2lKYXZhVG9rZW46U0VNSUNPTE9OKCc7JykKKyAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICBQc2lKYXZhVG9rZW46U0VNSUNPTE9OKCc7JykKKyAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaUV4cHJlc3Npb25TdGF0ZW1lbnQKKyAgICAgIFBzaU1ldGhvZENhbGxFeHByZXNzaW9uOmZvbygpCisgICAgICAgIFBzaVJlZmVyZW5jZUV4cHJlc3Npb246Zm9vCisgICAgICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICAgIFBzaUV4cHJlc3Npb25MaXN0CisgICAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpSmF2YVRva2VuOlNFTUlDT0xPTignOycpClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9zdGF0ZW1lbnRzL0lmSW5jb21wbGV0ZTAudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9zdGF0ZW1lbnRzL0lmSW5jb21wbGV0ZTAudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ4YmJmMzgKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL3N0YXRlbWVudHMvSWZJbmNvbXBsZXRlMC50eHQKQEAgLTAsMCArMSw1IEBACitQc2lKYXZhRmlsZTpJZkluY29tcGxldGUwLmphdmEKKyAgUHNpSWZTdGF0ZW1lbnQKKyAgICBQc2lLZXl3b3JkOmlmKCdpZicpCisgICAgUHNpRXJyb3JFbGVtZW50OicoJyBleHBlY3RlZAorICAgICAgPGVtcHR5IGxpc3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9zdGF0ZW1lbnRzL0lmSW5jb21wbGV0ZTEudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9zdGF0ZW1lbnRzL0lmSW5jb21wbGV0ZTEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMwMjY3ZGIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL3N0YXRlbWVudHMvSWZJbmNvbXBsZXRlMS50eHQKQEAgLTAsMCArMSw3IEBACitQc2lKYXZhRmlsZTpJZkluY29tcGxldGUxLmphdmEKKyAgUHNpSWZTdGF0ZW1lbnQKKyAgICBQc2lLZXl3b3JkOmlmKCdpZicpCisgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICBQc2lFcnJvckVsZW1lbnQ6RXhwcmVzc2lvbiBleHBlY3RlZAorICAgICAgPGVtcHR5IGxpc3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9zdGF0ZW1lbnRzL0lmSW5jb21wbGV0ZTIudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9zdGF0ZW1lbnRzL0lmSW5jb21wbGV0ZTIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVhNjJlZmMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL3N0YXRlbWVudHMvSWZJbmNvbXBsZXRlMi50eHQKQEAgLTAsMCArMSwxOCBAQAorUHNpSmF2YUZpbGU6SWZJbmNvbXBsZXRlMi5qYXZhCisgIFBzaUlmU3RhdGVtZW50CisgICAgUHNpS2V5d29yZDppZignaWYnKQorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgUHNpRXJyb3JFbGVtZW50OkV4cHJlc3Npb24gZXhwZWN0ZWQKKyAgICAgIDxlbXB0eSBsaXN0PgorICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICBQc2lFeHByZXNzaW9uU3RhdGVtZW50CisgICAgUHNpTWV0aG9kQ2FsbEV4cHJlc3Npb246Zm9vKCkKKyAgICAgIFBzaVJlZmVyZW5jZUV4cHJlc3Npb246Zm9vCisgICAgICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lFeHByZXNzaW9uTGlzdAorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgIFBzaUphdmFUb2tlbjpTRU1JQ09MT04oJzsnKQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvc3RhdGVtZW50cy9JZkluY29tcGxldGUzLnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvc3RhdGVtZW50cy9JZkluY29tcGxldGUzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZDgzOTA2Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9zdGF0ZW1lbnRzL0lmSW5jb21wbGV0ZTMudHh0CkBAIC0wLDAgKzEsMTEgQEAKK1BzaUphdmFGaWxlOklmSW5jb21wbGV0ZTMuamF2YQorICBQc2lJZlN0YXRlbWVudAorICAgIFBzaUtleXdvcmQ6aWYoJ2lmJykKKyAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgIFBzaVJlZmVyZW5jZUV4cHJlc3Npb246Y29uZAorICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUlkZW50aWZpZXI6Y29uZCgnY29uZCcpCisgICAgUHNpRXJyb3JFbGVtZW50OicpJyBleHBlY3RlZAorICAgICAgPGVtcHR5IGxpc3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9zdGF0ZW1lbnRzL0lmSW5jb21wbGV0ZTQudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9zdGF0ZW1lbnRzL0lmSW5jb21wbGV0ZTQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJjMDkwMWQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL3N0YXRlbWVudHMvSWZJbmNvbXBsZXRlNC50eHQKQEAgLTAsMCArMSwxMiBAQAorUHNpSmF2YUZpbGU6SWZJbmNvbXBsZXRlNC5qYXZhCisgIFBzaUlmU3RhdGVtZW50CisgICAgUHNpS2V5d29yZDppZignaWYnKQorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgUHNpUmVmZXJlbmNlRXhwcmVzc2lvbjpjb25kCisgICAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpSWRlbnRpZmllcjpjb25kKCdjb25kJykKKyAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgIFBzaUVycm9yRWxlbWVudDpTdGF0ZW1lbnQgZXhwZWN0ZWQKKyAgICAgIDxlbXB0eSBsaXN0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvc3RhdGVtZW50cy9JZkluY29tcGxldGU1LnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvc3RhdGVtZW50cy9JZkluY29tcGxldGU1LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZTZhNGFlCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9zdGF0ZW1lbnRzL0lmSW5jb21wbGV0ZTUudHh0CkBAIC0wLDAgKzEsMTkgQEAKK1BzaUphdmFGaWxlOklmSW5jb21wbGV0ZTUuamF2YQorICBQc2lJZlN0YXRlbWVudAorICAgIFBzaUtleXdvcmQ6aWYoJ2lmJykKKyAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgIFBzaUVycm9yRWxlbWVudDpFeHByZXNzaW9uIGV4cGVjdGVkCisgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaUV4cHJlc3Npb25TdGF0ZW1lbnQKKyAgICAgIFBzaU1ldGhvZENhbGxFeHByZXNzaW9uOmZvbygpCisgICAgICAgIFBzaVJlZmVyZW5jZUV4cHJlc3Npb246Zm9vCisgICAgICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICAgIFBzaUV4cHJlc3Npb25MaXN0CisgICAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpSmF2YVRva2VuOlNFTUlDT0xPTignOycpClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9zdGF0ZW1lbnRzL0lmSW5jb21wbGV0ZTYudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9zdGF0ZW1lbnRzL0lmSW5jb21wbGV0ZTYudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY1YWIzZDMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL3N0YXRlbWVudHMvSWZJbmNvbXBsZXRlNi50eHQKQEAgLTAsMCArMSwyNSBAQAorUHNpSmF2YUZpbGU6SWZJbmNvbXBsZXRlNi5qYXZhCisgIFBzaUlmU3RhdGVtZW50CisgICAgUHNpS2V5d29yZDppZignaWYnKQorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgUHNpUmVmZXJlbmNlRXhwcmVzc2lvbjpjb25kCisgICAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpSWRlbnRpZmllcjpjb25kKCdjb25kJykKKyAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaUV4cHJlc3Npb25TdGF0ZW1lbnQKKyAgICAgIFBzaU1ldGhvZENhbGxFeHByZXNzaW9uOmZvbygpCisgICAgICAgIFBzaVJlZmVyZW5jZUV4cHJlc3Npb246Zm9vCisgICAgICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICAgIFBzaUV4cHJlc3Npb25MaXN0CisgICAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgICAgUHNpSmF2YVRva2VuOlNFTUlDT0xPTignOycpCisgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgUHNpS2V5d29yZDplbHNlKCdlbHNlJykKKyAgICBQc2lFcnJvckVsZW1lbnQ6U3RhdGVtZW50IGV4cGVjdGVkCisgICAgICA8ZW1wdHkgbGlzdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL3N0YXRlbWVudHMvSWZOb3JtYWxOb0Vsc2UudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9zdGF0ZW1lbnRzL0lmTm9ybWFsTm9FbHNlLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MzExYmQwCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9zdGF0ZW1lbnRzL0lmTm9ybWFsTm9FbHNlLnR4dApAQCAtMCwwICsxLDIxIEBACitQc2lKYXZhRmlsZTpJZk5vcm1hbE5vRWxzZS5qYXZhCisgIFBzaUlmU3RhdGVtZW50CisgICAgUHNpS2V5d29yZDppZignaWYnKQorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgUHNpUmVmZXJlbmNlRXhwcmVzc2lvbjphCisgICAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpSWRlbnRpZmllcjphKCdhJykKKyAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaUV4cHJlc3Npb25TdGF0ZW1lbnQKKyAgICAgIFBzaU1ldGhvZENhbGxFeHByZXNzaW9uOmYxKCkKKyAgICAgICAgUHNpUmVmZXJlbmNlRXhwcmVzc2lvbjpmMQorICAgICAgICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICAgIFBzaUlkZW50aWZpZXI6ZjEoJ2YxJykKKyAgICAgICAgUHNpRXhwcmVzc2lvbkxpc3QKKyAgICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lKYXZhVG9rZW46U0VNSUNPTE9OKCc7JykKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL3N0YXRlbWVudHMvSWZOb3JtYWxXaXRoRWxzZS50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL3N0YXRlbWVudHMvSWZOb3JtYWxXaXRoRWxzZS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTIxMjkwNQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvc3RhdGVtZW50cy9JZk5vcm1hbFdpdGhFbHNlLnR4dApAQCAtMCwwICsxLDQ0IEBACitQc2lKYXZhRmlsZTpJZk5vcm1hbFdpdGhFbHNlLmphdmEKKyAgUHNpSWZTdGF0ZW1lbnQKKyAgICBQc2lLZXl3b3JkOmlmKCdpZicpCisgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICBQc2lSZWZlcmVuY2VFeHByZXNzaW9uOmEKKyAgICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lJZGVudGlmaWVyOmEoJ2EnKQorICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgUHNpQmxvY2tTdGF0ZW1lbnQKKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICAgIFBzaUV4cHJlc3Npb25TdGF0ZW1lbnQKKyAgICAgICAgICBQc2lNZXRob2RDYWxsRXhwcmVzc2lvbjpmMSgpCisgICAgICAgICAgICBQc2lSZWZlcmVuY2VFeHByZXNzaW9uOmYxCisgICAgICAgICAgICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgICAgICAgUHNpSWRlbnRpZmllcjpmMSgnZjEnKQorICAgICAgICAgICAgUHNpRXhwcmVzc2lvbkxpc3QKKyAgICAgICAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgICAgICBQc2lKYXZhVG9rZW46U0VNSUNPTE9OKCc7JykKKyAgICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaUtleXdvcmQ6ZWxzZSgnZWxzZScpCisgICAgUHNpQmxvY2tTdGF0ZW1lbnQKKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICAgIFBzaUV4cHJlc3Npb25TdGF0ZW1lbnQKKyAgICAgICAgICBQc2lNZXRob2RDYWxsRXhwcmVzc2lvbjpmMigpCisgICAgICAgICAgICBQc2lSZWZlcmVuY2VFeHByZXNzaW9uOmYyCisgICAgICAgICAgICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgICAgICAgUHNpSWRlbnRpZmllcjpmMignZjInKQorICAgICAgICAgICAgUHNpRXhwcmVzc2lvbkxpc3QKKyAgICAgICAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgICAgICBQc2lKYXZhVG9rZW46U0VNSUNPTE9OKCc7JykKKyAgICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvc3RhdGVtZW50cy9MYWJlbFNpbXBsZS50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL3N0YXRlbWVudHMvTGFiZWxTaW1wbGUudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFkYWNiYWMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL3N0YXRlbWVudHMvTGFiZWxTaW1wbGUudHh0CkBAIC0wLDAgKzEsMTQgQEAKK1BzaUphdmFGaWxlOkxhYmVsU2ltcGxlLmphdmEKKyAgUHNpTGFiZWxlZFN0YXRlbWVudAorICAgIFBzaUlkZW50aWZpZXI6TG9vcCgnTG9vcCcpCisgICAgUHNpSmF2YVRva2VuOkNPTE9OKCc6JykKKyAgICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICAgIFBzaVdoaWxlU3RhdGVtZW50CisgICAgICBQc2lLZXl3b3JkOndoaWxlKCd3aGlsZScpCisgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgUHNpTGl0ZXJhbEV4cHJlc3Npb246dHJ1ZQorICAgICAgICBQc2lKYXZhVG9rZW46VFJVRV9LRVlXT1JEKCd0cnVlJykKKyAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgIFBzaUVtcHR5U3RhdGVtZW50CisgICAgICAgIFBzaUphdmFUb2tlbjpTRU1JQ09MT04oJzsnKQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvc3RhdGVtZW50cy9Mb2NhbFZhci50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL3N0YXRlbWVudHMvTG9jYWxWYXIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUzNjYxNGQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL3N0YXRlbWVudHMvTG9jYWxWYXIudHh0CkBAIC0wLDAgKzEsMTkgQEAKK1BzaUphdmFGaWxlOkxvY2FsVmFyLmphdmEKKyAgUHNpRGVjbGFyYXRpb25TdGF0ZW1lbnQKKyAgICBQc2lMb2NhbFZhcmlhYmxlOmxpc3QKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDpMaXN0PEludGVnZXI+CisgICAgICAgIFBzaUphdmFDb2RlUmVmZXJlbmNlRWxlbWVudDpMaXN0PEludGVnZXI+CisgICAgICAgICAgUHNpSWRlbnRpZmllcjpMaXN0KCdMaXN0JykKKyAgICAgICAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICAgICAgICBQc2lKYXZhVG9rZW46TFQoJzwnKQorICAgICAgICAgICAgUHNpVHlwZUVsZW1lbnQ6SW50ZWdlcgorICAgICAgICAgICAgICBQc2lKYXZhQ29kZVJlZmVyZW5jZUVsZW1lbnQ6SW50ZWdlcgorICAgICAgICAgICAgICAgIFBzaUlkZW50aWZpZXI6SW50ZWdlcignSW50ZWdlcicpCisgICAgICAgICAgICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgICAgICBQc2lKYXZhVG9rZW46R1QoJz4nKQorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lJZGVudGlmaWVyOmxpc3QoJ2xpc3QnKQorICAgICAgUHNpSmF2YVRva2VuOlNFTUlDT0xPTignOycpClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9zdGF0ZW1lbnRzL1JldHVybkluY29tcGxldGUwLnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvc3RhdGVtZW50cy9SZXR1cm5JbmNvbXBsZXRlMC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODEzYzcwZgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvc3RhdGVtZW50cy9SZXR1cm5JbmNvbXBsZXRlMC50eHQKQEAgLTAsMCArMSw1IEBACitQc2lKYXZhRmlsZTpSZXR1cm5JbmNvbXBsZXRlMC5qYXZhCisgIFBzaVJldHVyblN0YXRlbWVudAorICAgIFBzaUtleXdvcmQ6cmV0dXJuKCdyZXR1cm4nKQorICAgIFBzaUVycm9yRWxlbWVudDonOycgZXhwZWN0ZWQKKyAgICAgIDxlbXB0eSBsaXN0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvc3RhdGVtZW50cy9SZXR1cm5JbmNvbXBsZXRlMS50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL3N0YXRlbWVudHMvUmV0dXJuSW5jb21wbGV0ZTEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY0OTk3ODcKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL3N0YXRlbWVudHMvUmV0dXJuSW5jb21wbGV0ZTEudHh0CkBAIC0wLDAgKzEsMTAgQEAKK1BzaUphdmFGaWxlOlJldHVybkluY29tcGxldGUxLmphdmEKKyAgUHNpUmV0dXJuU3RhdGVtZW50CisgICAgUHNpS2V5d29yZDpyZXR1cm4oJ3JldHVybicpCisgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgUHNpUmVmZXJlbmNlRXhwcmVzc2lvbjphCisgICAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpSWRlbnRpZmllcjphKCdhJykKKyAgICBQc2lFcnJvckVsZW1lbnQ6JzsnIGV4cGVjdGVkCisgICAgICA8ZW1wdHkgbGlzdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL3N0YXRlbWVudHMvUmV0dXJuTm9SZXN1bHQudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9zdGF0ZW1lbnRzL1JldHVybk5vUmVzdWx0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOGM1MjY3Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9zdGF0ZW1lbnRzL1JldHVybk5vUmVzdWx0LnR4dApAQCAtMCwwICsxLDQgQEAKK1BzaUphdmFGaWxlOlJldHVybk5vUmVzdWx0LmphdmEKKyAgUHNpUmV0dXJuU3RhdGVtZW50CisgICAgUHNpS2V5d29yZDpyZXR1cm4oJ3JldHVybicpCisgICAgUHNpSmF2YVRva2VuOlNFTUlDT0xPTignOycpClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9zdGF0ZW1lbnRzL1JldHVybldpdGhSZXN1bHQudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9zdGF0ZW1lbnRzL1JldHVybldpdGhSZXN1bHQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY1YjdjMTkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL3N0YXRlbWVudHMvUmV0dXJuV2l0aFJlc3VsdC50eHQKQEAgLTAsMCArMSw3IEBACitQc2lKYXZhRmlsZTpSZXR1cm5XaXRoUmVzdWx0LmphdmEKKyAgUHNpUmV0dXJuU3RhdGVtZW50CisgICAgUHNpS2V5d29yZDpyZXR1cm4oJ3JldHVybicpCisgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgUHNpTGl0ZXJhbEV4cHJlc3Npb246MTAKKyAgICAgIFBzaUphdmFUb2tlbjpJTlRFR0VSX0xJVEVSQUwoJzEwJykKKyAgICBQc2lKYXZhVG9rZW46U0VNSUNPTE9OKCc7JykKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL3N0YXRlbWVudHMvU0NSNTIwMi50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL3N0YXRlbWVudHMvU0NSNTIwMi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2Y4OTdhMQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvc3RhdGVtZW50cy9TQ1I1MjAyLnR4dApAQCAtMCwwICsxLDM1IEBACitQc2lKYXZhRmlsZTpTQ1I1MjAyLmphdmEKKyAgUHNpQ29kZUJsb2NrCisgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgUHNpRXhwcmVzc2lvblN0YXRlbWVudAorICAgICAgUHNpUmVmZXJlbmNlRXhwcmVzc2lvbjpTdHJpbmcuY2xhc3MuCisgU3RyaW5nCisgICAgICAgIFBzaUNsYXNzT2JqZWN0QWNjZXNzRXhwcmVzc2lvbjpTdHJpbmcuY2xhc3MKKyAgICAgICAgICBQc2lUeXBlRWxlbWVudDpTdHJpbmcKKyAgICAgICAgICAgIFBzaUphdmFDb2RlUmVmZXJlbmNlRWxlbWVudDpTdHJpbmcKKyAgICAgICAgICAgICAgUHNpSWRlbnRpZmllcjpTdHJpbmcoJ1N0cmluZycpCisgICAgICAgICAgICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgICBQc2lKYXZhVG9rZW46RE9UKCcuJykKKyAgICAgICAgICBQc2lLZXl3b3JkOmNsYXNzKCdjbGFzcycpCisgICAgICAgIFBzaUphdmFUb2tlbjpET1QoJy4nKQorICAgICAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgICAgICAgIFBzaUlkZW50aWZpZXI6U3RyaW5nKCdTdHJpbmcnKQorICAgICAgUHNpRXJyb3JFbGVtZW50Oic7JyBleHBlY3RlZAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lFcnJvckVsZW1lbnQ6VW5leHBlY3RlZCB0b2tlbgorICAgICAgUHNpSmF2YVRva2VuOkxCUkFDS0VUKCdbJykKKyAgICBQc2lFcnJvckVsZW1lbnQ6VW5leHBlY3RlZCB0b2tlbgorICAgICAgUHNpSmF2YVRva2VuOlJCUkFDS0VUKCddJykKKyAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICBQc2lFeHByZXNzaW9uU3RhdGVtZW50CisgICAgICBQc2lSZWZlcmVuY2VFeHByZXNzaW9uOnN0cmluZ3MKKyAgICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICBQc2lJZGVudGlmaWVyOnN0cmluZ3MoJ3N0cmluZ3MnKQorICAgICAgUHNpSmF2YVRva2VuOlNFTUlDT0xPTignOycpCisgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9zdGF0ZW1lbnRzL1N3aXRjaEluY29tcGxldGUwLnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvc3RhdGVtZW50cy9Td2l0Y2hJbmNvbXBsZXRlMC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjcwMjdiNgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvc3RhdGVtZW50cy9Td2l0Y2hJbmNvbXBsZXRlMC50eHQKQEAgLTAsMCArMSw1IEBACitQc2lKYXZhRmlsZTpTd2l0Y2hJbmNvbXBsZXRlMC5qYXZhCisgIFBzaVN3aXRjaFN0YXRlbWVudAorICAgIFBzaUtleXdvcmQ6c3dpdGNoKCdzd2l0Y2gnKQorICAgIFBzaUVycm9yRWxlbWVudDonKCcgZXhwZWN0ZWQKKyAgICAgIDxlbXB0eSBsaXN0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvc3RhdGVtZW50cy9Td2l0Y2hJbmNvbXBsZXRlMS50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL3N0YXRlbWVudHMvU3dpdGNoSW5jb21wbGV0ZTEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdhOTYxZDkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL3N0YXRlbWVudHMvU3dpdGNoSW5jb21wbGV0ZTEudHh0CkBAIC0wLDAgKzEsNiBAQAorUHNpSmF2YUZpbGU6U3dpdGNoSW5jb21wbGV0ZTEuamF2YQorICBQc2lTd2l0Y2hTdGF0ZW1lbnQKKyAgICBQc2lLZXl3b3JkOnN3aXRjaCgnc3dpdGNoJykKKyAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgIFBzaUVycm9yRWxlbWVudDpFeHByZXNzaW9uIGV4cGVjdGVkCisgICAgICA8ZW1wdHkgbGlzdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL3N0YXRlbWVudHMvU3dpdGNoSW5jb21wbGV0ZTIudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9zdGF0ZW1lbnRzL1N3aXRjaEluY29tcGxldGUyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zODIyZGNhCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9zdGF0ZW1lbnRzL1N3aXRjaEluY29tcGxldGUyLnR4dApAQCAtMCwwICsxLDEwIEBACitQc2lKYXZhRmlsZTpTd2l0Y2hJbmNvbXBsZXRlMi5qYXZhCisgIFBzaVN3aXRjaFN0YXRlbWVudAorICAgIFBzaUtleXdvcmQ6c3dpdGNoKCdzd2l0Y2gnKQorICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgUHNpUmVmZXJlbmNlRXhwcmVzc2lvbjpvCisgICAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpSWRlbnRpZmllcjpvKCdvJykKKyAgICBQc2lFcnJvckVsZW1lbnQ6JyknIGV4cGVjdGVkCisgICAgICA8ZW1wdHkgbGlzdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL3N0YXRlbWVudHMvU3dpdGNoSW5jb21wbGV0ZTMudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9zdGF0ZW1lbnRzL1N3aXRjaEluY29tcGxldGUzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NDdjOTEyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9zdGF0ZW1lbnRzL1N3aXRjaEluY29tcGxldGUzLnR4dApAQCAtMCwwICsxLDExIEBACitQc2lKYXZhRmlsZTpTd2l0Y2hJbmNvbXBsZXRlMy5qYXZhCisgIFBzaVN3aXRjaFN0YXRlbWVudAorICAgIFBzaUtleXdvcmQ6c3dpdGNoKCdzd2l0Y2gnKQorICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgUHNpUmVmZXJlbmNlRXhwcmVzc2lvbjpvCisgICAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpSWRlbnRpZmllcjpvKCdvJykKKyAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgIFBzaUVycm9yRWxlbWVudDoneycgZXhwZWN0ZWQKKyAgICAgIDxlbXB0eSBsaXN0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvc3RhdGVtZW50cy9Td2l0Y2hJbmNvbXBsZXRlNC50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL3N0YXRlbWVudHMvU3dpdGNoSW5jb21wbGV0ZTQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJiNzk3Y2UKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL3N0YXRlbWVudHMvU3dpdGNoSW5jb21wbGV0ZTQudHh0CkBAIC0wLDAgKzEsMTAgQEAKK1BzaUphdmFGaWxlOlN3aXRjaEluY29tcGxldGU0LmphdmEKKyAgUHNpU3dpdGNoU3RhdGVtZW50CisgICAgUHNpS2V5d29yZDpzd2l0Y2goJ3N3aXRjaCcpCisgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICBQc2lFcnJvckVsZW1lbnQ6RXhwcmVzc2lvbiBleHBlY3RlZAorICAgICAgPGVtcHR5IGxpc3Q+CisgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICBQc2lDb2RlQmxvY2sKKyAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9zdGF0ZW1lbnRzL1N3aXRjaEluY29tcGxldGU1LnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvc3RhdGVtZW50cy9Td2l0Y2hJbmNvbXBsZXRlNS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmE5MGVmOAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvc3RhdGVtZW50cy9Td2l0Y2hJbmNvbXBsZXRlNS50eHQKQEAgLTAsMCArMSwxNyBAQAorUHNpSmF2YUZpbGU6U3dpdGNoSW5jb21wbGV0ZTUuamF2YQorICBQc2lTd2l0Y2hTdGF0ZW1lbnQKKyAgICBQc2lLZXl3b3JkOnN3aXRjaCgnc3dpdGNoJykKKyAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgIFBzaUVycm9yRWxlbWVudDpFeHByZXNzaW9uIGV4cGVjdGVkCisgICAgICA8ZW1wdHkgbGlzdD4KKyAgUHNpV2hpdGVTcGFjZSgnXG4gJykKKyAgUHNpRXhwcmVzc2lvblN0YXRlbWVudAorICAgIFBzaU1ldGhvZENhbGxFeHByZXNzaW9uOmZvbygpCisgICAgICBQc2lSZWZlcmVuY2VFeHByZXNzaW9uOmZvbworICAgICAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgUHNpRXhwcmVzc2lvbkxpc3QKKyAgICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICBQc2lKYXZhVG9rZW46U0VNSUNPTE9OKCc7JykKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL3N0YXRlbWVudHMvU3dpdGNoTGFiZWxzSW5jb21wbGV0ZTAudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9zdGF0ZW1lbnRzL1N3aXRjaExhYmVsc0luY29tcGxldGUwLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OGQxN2Q1Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9zdGF0ZW1lbnRzL1N3aXRjaExhYmVsc0luY29tcGxldGUwLnR4dApAQCAtMCwwICsxLDMgQEAKK1BzaUphdmFGaWxlOlN3aXRjaExhYmVsc0luY29tcGxldGUwLmphdmEKKyAgUHNpRXJyb3JFbGVtZW50OlVuZXhwZWN0ZWQgdG9rZW4KKyAgICBQc2lLZXl3b3JkOmNhc2UoJ2Nhc2UnKQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvc3RhdGVtZW50cy9Td2l0Y2hMYWJlbHNJbmNvbXBsZXRlMS50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL3N0YXRlbWVudHMvU3dpdGNoTGFiZWxzSW5jb21wbGV0ZTEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMyZTRlOTQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL3N0YXRlbWVudHMvU3dpdGNoTGFiZWxzSW5jb21wbGV0ZTEudHh0CkBAIC0wLDAgKzEsOCBAQAorUHNpSmF2YUZpbGU6U3dpdGNoTGFiZWxzSW5jb21wbGV0ZTEuamF2YQorICBQc2lTd2l0Y2hMYWJlbFN0YXRlbWVudAorICAgIFBzaUtleXdvcmQ6Y2FzZSgnY2FzZScpCisgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgUHNpTGl0ZXJhbEV4cHJlc3Npb246MgorICAgICAgUHNpSmF2YVRva2VuOklOVEVHRVJfTElURVJBTCgnMicpCisgICAgUHNpRXJyb3JFbGVtZW50Oic6JyBleHBlY3RlZAorICAgICAgPGVtcHR5IGxpc3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9zdGF0ZW1lbnRzL1N3aXRjaExhYmVsc0luY29tcGxldGUyLnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvc3RhdGVtZW50cy9Td2l0Y2hMYWJlbHNJbmNvbXBsZXRlMi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2EyN2FiYgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvc3RhdGVtZW50cy9Td2l0Y2hMYWJlbHNJbmNvbXBsZXRlMi50eHQKQEAgLTAsMCArMSw1IEBACitQc2lKYXZhRmlsZTpTd2l0Y2hMYWJlbHNJbmNvbXBsZXRlMi5qYXZhCisgIFBzaVN3aXRjaExhYmVsU3RhdGVtZW50CisgICAgUHNpS2V5d29yZDpkZWZhdWx0KCdkZWZhdWx0JykKKyAgICBQc2lFcnJvckVsZW1lbnQ6JzonIGV4cGVjdGVkCisgICAgICA8ZW1wdHkgbGlzdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL3N0YXRlbWVudHMvU3dpdGNoTGFiZWxzSW5jb21wbGV0ZTMudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9zdGF0ZW1lbnRzL1N3aXRjaExhYmVsc0luY29tcGxldGUzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNTYwNDI3Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9zdGF0ZW1lbnRzL1N3aXRjaExhYmVsc0luY29tcGxldGUzLnR4dApAQCAtMCwwICsxLDEzIEBACitQc2lKYXZhRmlsZTpTd2l0Y2hMYWJlbHNJbmNvbXBsZXRlMy5qYXZhCisgIFBzaVN3aXRjaExhYmVsU3RhdGVtZW50CisgICAgUHNpS2V5d29yZDpkZWZhdWx0KCdkZWZhdWx0JykKKyAgICBQc2lFcnJvckVsZW1lbnQ6JzonIGV4cGVjdGVkCisgICAgICA8ZW1wdHkgbGlzdD4KKyAgUHNpV2hpdGVTcGFjZSgnICcpCisgIFBzaUV4cHJlc3Npb25TdGF0ZW1lbnQKKyAgICBQc2lMaXRlcmFsRXhwcmVzc2lvbjozCisgICAgICBQc2lKYXZhVG9rZW46SU5URUdFUl9MSVRFUkFMKCczJykKKyAgICBQc2lFcnJvckVsZW1lbnQ6JzsnIGV4cGVjdGVkCisgICAgICA8ZW1wdHkgbGlzdD4KKyAgUHNpRXJyb3JFbGVtZW50OlVuZXhwZWN0ZWQgdG9rZW4KKyAgICBQc2lKYXZhVG9rZW46Q09MT04oJzonKQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvc3RhdGVtZW50cy9Td2l0Y2hMYWJlbHNOb3JtYWwudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9zdGF0ZW1lbnRzL1N3aXRjaExhYmVsc05vcm1hbC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGE1MGYxOAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvc3RhdGVtZW50cy9Td2l0Y2hMYWJlbHNOb3JtYWwudHh0CkBAIC0wLDAgKzEsMTkgQEAKK1BzaUphdmFGaWxlOlN3aXRjaExhYmVsc05vcm1hbC5qYXZhCisgIFBzaVN3aXRjaExhYmVsU3RhdGVtZW50CisgICAgUHNpS2V5d29yZDpjYXNlKCdjYXNlJykKKyAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICBQc2lMaXRlcmFsRXhwcmVzc2lvbjoxCisgICAgICBQc2lKYXZhVG9rZW46SU5URUdFUl9MSVRFUkFMKCcxJykKKyAgICBQc2lKYXZhVG9rZW46Q09MT04oJzonKQorICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgUHNpQnJlYWtTdGF0ZW1lbnQKKyAgICBQc2lLZXl3b3JkOmJyZWFrKCdicmVhaycpCisgICAgUHNpSmF2YVRva2VuOlNFTUlDT0xPTignOycpCisgIFBzaVdoaXRlU3BhY2UoJyAnKQorICBQc2lTd2l0Y2hMYWJlbFN0YXRlbWVudAorICAgIFBzaUtleXdvcmQ6ZGVmYXVsdCgnZGVmYXVsdCcpCisgICAgUHNpSmF2YVRva2VuOkNPTE9OKCc6JykKKyAgUHNpV2hpdGVTcGFjZSgnICcpCisgIFBzaUJyZWFrU3RhdGVtZW50CisgICAgUHNpS2V5d29yZDpicmVhaygnYnJlYWsnKQorICAgIFBzaUphdmFUb2tlbjpTRU1JQ09MT04oJzsnKQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvc3RhdGVtZW50cy9Td2l0Y2hOb3JtYWwudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9zdGF0ZW1lbnRzL1N3aXRjaE5vcm1hbC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzhjNTI3MQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvc3RhdGVtZW50cy9Td2l0Y2hOb3JtYWwudHh0CkBAIC0wLDAgKzEsMTIgQEAKK1BzaUphdmFGaWxlOlN3aXRjaE5vcm1hbC5qYXZhCisgIFBzaVN3aXRjaFN0YXRlbWVudAorICAgIFBzaUtleXdvcmQ6c3dpdGNoKCdzd2l0Y2gnKQorICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgUHNpUmVmZXJlbmNlRXhwcmVzc2lvbjpvCisgICAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpSWRlbnRpZmllcjpvKCdvJykKKyAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgIFBzaUNvZGVCbG9jaworICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL3N0YXRlbWVudHMvU3luY0luY29tcGxldGUwLnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvc3RhdGVtZW50cy9TeW5jSW5jb21wbGV0ZTAudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNkOGViNzcKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL3N0YXRlbWVudHMvU3luY0luY29tcGxldGUwLnR4dApAQCAtMCwwICsxLDUgQEAKK1BzaUphdmFGaWxlOlN5bmNJbmNvbXBsZXRlMC5qYXZhCisgIFBzaVN5bmNocm9uaXplZFN0YXRlbWVudAorICAgIFBzaUtleXdvcmQ6c3luY2hyb25pemVkKCdzeW5jaHJvbml6ZWQnKQorICAgIFBzaUVycm9yRWxlbWVudDonKCcgZXhwZWN0ZWQKKyAgICAgIDxlbXB0eSBsaXN0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvc3RhdGVtZW50cy9TeW5jSW5jb21wbGV0ZTEudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9zdGF0ZW1lbnRzL1N5bmNJbmNvbXBsZXRlMS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjkxZWMxOAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvc3RhdGVtZW50cy9TeW5jSW5jb21wbGV0ZTEudHh0CkBAIC0wLDAgKzEsNiBAQAorUHNpSmF2YUZpbGU6U3luY0luY29tcGxldGUxLmphdmEKKyAgUHNpU3luY2hyb25pemVkU3RhdGVtZW50CisgICAgUHNpS2V5d29yZDpzeW5jaHJvbml6ZWQoJ3N5bmNocm9uaXplZCcpCisgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICBQc2lFcnJvckVsZW1lbnQ6RXhwcmVzc2lvbiBleHBlY3RlZAorICAgICAgPGVtcHR5IGxpc3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9zdGF0ZW1lbnRzL1N5bmNJbmNvbXBsZXRlMi50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL3N0YXRlbWVudHMvU3luY0luY29tcGxldGUyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40M2Y3NDc0Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9zdGF0ZW1lbnRzL1N5bmNJbmNvbXBsZXRlMi50eHQKQEAgLTAsMCArMSwxMCBAQAorUHNpSmF2YUZpbGU6U3luY0luY29tcGxldGUyLmphdmEKKyAgUHNpU3luY2hyb25pemVkU3RhdGVtZW50CisgICAgUHNpS2V5d29yZDpzeW5jaHJvbml6ZWQoJ3N5bmNocm9uaXplZCcpCisgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICBQc2lSZWZlcmVuY2VFeHByZXNzaW9uOm8KKyAgICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lJZGVudGlmaWVyOm8oJ28nKQorICAgIFBzaUVycm9yRWxlbWVudDonKScgZXhwZWN0ZWQKKyAgICAgIDxlbXB0eSBsaXN0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvc3RhdGVtZW50cy9TeW5jSW5jb21wbGV0ZTMudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9zdGF0ZW1lbnRzL1N5bmNJbmNvbXBsZXRlMy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGRlZGQyMwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvc3RhdGVtZW50cy9TeW5jSW5jb21wbGV0ZTMudHh0CkBAIC0wLDAgKzEsMTEgQEAKK1BzaUphdmFGaWxlOlN5bmNJbmNvbXBsZXRlMy5qYXZhCisgIFBzaVN5bmNocm9uaXplZFN0YXRlbWVudAorICAgIFBzaUtleXdvcmQ6c3luY2hyb25pemVkKCdzeW5jaHJvbml6ZWQnKQorICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgUHNpUmVmZXJlbmNlRXhwcmVzc2lvbjpvCisgICAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpSWRlbnRpZmllcjpvKCdvJykKKyAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgIFBzaUVycm9yRWxlbWVudDoneycgZXhwZWN0ZWQKKyAgICAgIDxlbXB0eSBsaXN0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvc3RhdGVtZW50cy9TeW5jSW5jb21wbGV0ZTQudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9zdGF0ZW1lbnRzL1N5bmNJbmNvbXBsZXRlNC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjJmNDJmOAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvc3RhdGVtZW50cy9TeW5jSW5jb21wbGV0ZTQudHh0CkBAIC0wLDAgKzEsMTAgQEAKK1BzaUphdmFGaWxlOlN5bmNJbmNvbXBsZXRlNC5qYXZhCisgIFBzaVN5bmNocm9uaXplZFN0YXRlbWVudAorICAgIFBzaUtleXdvcmQ6c3luY2hyb25pemVkKCdzeW5jaHJvbml6ZWQnKQorICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgUHNpRXJyb3JFbGVtZW50OkV4cHJlc3Npb24gZXhwZWN0ZWQKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgUHNpQ29kZUJsb2NrCisgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvc3RhdGVtZW50cy9TeW5jSW5jb21wbGV0ZTUudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9zdGF0ZW1lbnRzL1N5bmNJbmNvbXBsZXRlNS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTcxOTk3ZAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvc3RhdGVtZW50cy9TeW5jSW5jb21wbGV0ZTUudHh0CkBAIC0wLDAgKzEsMTcgQEAKK1BzaUphdmFGaWxlOlN5bmNJbmNvbXBsZXRlNS5qYXZhCisgIFBzaVN5bmNocm9uaXplZFN0YXRlbWVudAorICAgIFBzaUtleXdvcmQ6c3luY2hyb25pemVkKCdzeW5jaHJvbml6ZWQnKQorICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgUHNpRXJyb3JFbGVtZW50OkV4cHJlc3Npb24gZXhwZWN0ZWQKKyAgICAgIDxlbXB0eSBsaXN0PgorICBQc2lXaGl0ZVNwYWNlKCdcbiAnKQorICBQc2lFeHByZXNzaW9uU3RhdGVtZW50CisgICAgUHNpTWV0aG9kQ2FsbEV4cHJlc3Npb246Zm9vKCkKKyAgICAgIFBzaVJlZmVyZW5jZUV4cHJlc3Npb246Zm9vCisgICAgICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgUHNpSWRlbnRpZmllcjpmb28oJ2ZvbycpCisgICAgICBQc2lFeHByZXNzaW9uTGlzdAorICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgIFBzaUphdmFUb2tlbjpTRU1JQ09MT04oJzsnKQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvc3RhdGVtZW50cy9TeW5jTm9ybWFsLnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvc3RhdGVtZW50cy9TeW5jTm9ybWFsLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NmY4MmFiCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9zdGF0ZW1lbnRzL1N5bmNOb3JtYWwudHh0CkBAIC0wLDAgKzEsMTIgQEAKK1BzaUphdmFGaWxlOlN5bmNOb3JtYWwuamF2YQorICBQc2lTeW5jaHJvbml6ZWRTdGF0ZW1lbnQKKyAgICBQc2lLZXl3b3JkOnN5bmNocm9uaXplZCgnc3luY2hyb25pemVkJykKKyAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgIFBzaVJlZmVyZW5jZUV4cHJlc3Npb246bworICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUlkZW50aWZpZXI6bygnbycpCisgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICBQc2lDb2RlQmxvY2sKKyAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9zdGF0ZW1lbnRzL1Rocm93SW5jb21wbGV0ZTAudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9zdGF0ZW1lbnRzL1Rocm93SW5jb21wbGV0ZTAudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjExYmZiNGEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL3N0YXRlbWVudHMvVGhyb3dJbmNvbXBsZXRlMC50eHQKQEAgLTAsMCArMSw1IEBACitQc2lKYXZhRmlsZTpUaHJvd0luY29tcGxldGUwLmphdmEKKyAgUHNpVGhyb3dTdGF0ZW1lbnQKKyAgICBQc2lLZXl3b3JkOnRocm93KCd0aHJvdycpCisgICAgUHNpRXJyb3JFbGVtZW50OkV4cHJlc3Npb24gZXhwZWN0ZWQKKyAgICAgIDxlbXB0eSBsaXN0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvc3RhdGVtZW50cy9UaHJvd0luY29tcGxldGUxLnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvc3RhdGVtZW50cy9UaHJvd0luY29tcGxldGUxLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZDIyOTEyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9zdGF0ZW1lbnRzL1Rocm93SW5jb21wbGV0ZTEudHh0CkBAIC0wLDAgKzEsMTAgQEAKK1BzaUphdmFGaWxlOlRocm93SW5jb21wbGV0ZTEuamF2YQorICBQc2lUaHJvd1N0YXRlbWVudAorICAgIFBzaUtleXdvcmQ6dGhyb3coJ3Rocm93JykKKyAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICBQc2lSZWZlcmVuY2VFeHByZXNzaW9uOmUKKyAgICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lJZGVudGlmaWVyOmUoJ2UnKQorICAgIFBzaUVycm9yRWxlbWVudDonOycgZXhwZWN0ZWQKKyAgICAgIDxlbXB0eSBsaXN0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvc3RhdGVtZW50cy9UaHJvd05vcm1hbC50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL3N0YXRlbWVudHMvVGhyb3dOb3JtYWwudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhlZTlkNmIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL3N0YXRlbWVudHMvVGhyb3dOb3JtYWwudHh0CkBAIC0wLDAgKzEsOSBAQAorUHNpSmF2YUZpbGU6VGhyb3dOb3JtYWwuamF2YQorICBQc2lUaHJvd1N0YXRlbWVudAorICAgIFBzaUtleXdvcmQ6dGhyb3coJ3Rocm93JykKKyAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICBQc2lSZWZlcmVuY2VFeHByZXNzaW9uOmUKKyAgICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lJZGVudGlmaWVyOmUoJ2UnKQorICAgIFBzaUphdmFUb2tlbjpTRU1JQ09MT04oJzsnKQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvc3RhdGVtZW50cy9UcnlJbmNvbXBsZXRlMC50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL3N0YXRlbWVudHMvVHJ5SW5jb21wbGV0ZTAudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMwODY4MTEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL3N0YXRlbWVudHMvVHJ5SW5jb21wbGV0ZTAudHh0CkBAIC0wLDAgKzEsNSBAQAorUHNpSmF2YUZpbGU6VHJ5SW5jb21wbGV0ZTAuamF2YQorICBQc2lUcnlTdGF0ZW1lbnQKKyAgICBQc2lLZXl3b3JkOnRyeSgndHJ5JykKKyAgICBQc2lFcnJvckVsZW1lbnQ6J3snIGV4cGVjdGVkCisgICAgICA8ZW1wdHkgbGlzdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL3N0YXRlbWVudHMvVHJ5SW5jb21wbGV0ZTEudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9zdGF0ZW1lbnRzL1RyeUluY29tcGxldGUxLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMTE2MjNmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9zdGF0ZW1lbnRzL1RyeUluY29tcGxldGUxLnR4dApAQCAtMCwwICsxLDggQEAKK1BzaUphdmFGaWxlOlRyeUluY29tcGxldGUxLmphdmEKKyAgUHNpVHJ5U3RhdGVtZW50CisgICAgUHNpS2V5d29yZDp0cnkoJ3RyeScpCisgICAgUHNpQ29kZUJsb2NrCisgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaUVycm9yRWxlbWVudDonY2F0Y2gnIG9yICdmaW5hbGx5JyBleHBlY3RlZAorICAgICAgPGVtcHR5IGxpc3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9zdGF0ZW1lbnRzL1RyeUluY29tcGxldGUxMC50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL3N0YXRlbWVudHMvVHJ5SW5jb21wbGV0ZTEwLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNzQ2MWZmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9zdGF0ZW1lbnRzL1RyeUluY29tcGxldGUxMC50eHQKQEAgLTAsMCArMSwxMiBAQAorUHNpSmF2YUZpbGU6VHJ5SW5jb21wbGV0ZTEwLmphdmEKKyAgUHNpVHJ5U3RhdGVtZW50CisgICAgUHNpS2V5d29yZDp0cnkoJ3RyeScpCisgICAgUHNpUmVzb3VyY2VMaXN0OigKKyAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICBQc2lFcnJvckVsZW1lbnQ6SWRlbnRpZmllciBvciB0eXBlIGV4cGVjdGVkCisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpRXJyb3JFbGVtZW50OicpJyBleHBlY3RlZAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICBQc2lDb2RlQmxvY2sKKyAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL3N0YXRlbWVudHMvVHJ5SW5jb21wbGV0ZTExLnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvc3RhdGVtZW50cy9UcnlJbmNvbXBsZXRlMTEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZkYTZlYjQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL3N0YXRlbWVudHMvVHJ5SW5jb21wbGV0ZTExLnR4dApAQCAtMCwwICsxLDExIEBACitQc2lKYXZhRmlsZTpUcnlJbmNvbXBsZXRlMTEuamF2YQorICBQc2lUcnlTdGF0ZW1lbnQKKyAgICBQc2lLZXl3b3JkOnRyeSgndHJ5JykKKyAgICBQc2lSZXNvdXJjZUxpc3Q6KCkKKyAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICBQc2lFcnJvckVsZW1lbnQ6SWRlbnRpZmllciBvciB0eXBlIGV4cGVjdGVkCisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICBQc2lDb2RlQmxvY2sKKyAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL3N0YXRlbWVudHMvVHJ5SW5jb21wbGV0ZTEyLnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvc3RhdGVtZW50cy9UcnlJbmNvbXBsZXRlMTIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYzN2M1OWQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL3N0YXRlbWVudHMvVHJ5SW5jb21wbGV0ZTEyLnR4dApAQCAtMCwwICsxLDEyIEBACitQc2lKYXZhRmlsZTpUcnlJbmNvbXBsZXRlMTIuamF2YQorICBQc2lUcnlTdGF0ZW1lbnQKKyAgICBQc2lLZXl3b3JkOnRyeSgndHJ5JykKKyAgICBQc2lSZXNvdXJjZUxpc3Q6KDspCisgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgUHNpRXJyb3JFbGVtZW50OlJlc291cmNlIGRlZmluaXRpb24gZXhwZWN0ZWQKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lKYXZhVG9rZW46U0VNSUNPTE9OKCc7JykKKyAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgUHNpQ29kZUJsb2NrCisgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9zdGF0ZW1lbnRzL1RyeUluY29tcGxldGUxMy50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL3N0YXRlbWVudHMvVHJ5SW5jb21wbGV0ZTEzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNDMwMWY2Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9zdGF0ZW1lbnRzL1RyeUluY29tcGxldGUxMy50eHQKQEAgLTAsMCArMSwxOCBAQAorUHNpSmF2YUZpbGU6VHJ5SW5jb21wbGV0ZTEzLmphdmEKKyAgUHNpVHJ5U3RhdGVtZW50CisgICAgUHNpS2V5d29yZDp0cnkoJ3RyeScpCisgICAgUHNpUmVzb3VyY2VMaXN0OihmaW5hbCApCisgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgUHNpTW9kaWZpZXJMaXN0OmZpbmFsCisgICAgICAgIFBzaUtleXdvcmQ6ZmluYWwoJ2ZpbmFsJykKKyAgICAgIFBzaUVycm9yRWxlbWVudDpUeXBlIGV4cGVjdGVkCisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICBQc2lUeXBlRWxlbWVudDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lFcnJvckVsZW1lbnQ6SWRlbnRpZmllciBleHBlY3RlZAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgUHNpQ29kZUJsb2NrCisgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvc3RhdGVtZW50cy9UcnlJbmNvbXBsZXRlMTQudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9zdGF0ZW1lbnRzL1RyeUluY29tcGxldGUxNC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTc0ODJjNQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvc3RhdGVtZW50cy9UcnlJbmNvbXBsZXRlMTQudHh0CkBAIC0wLDAgKzEsMTUgQEAKK1BzaUphdmFGaWxlOlRyeUluY29tcGxldGUxNC5qYXZhCisgIFBzaVRyeVN0YXRlbWVudAorICAgIFBzaUtleXdvcmQ6dHJ5KCd0cnknKQorICAgIFBzaVJlc291cmNlTGlzdDooaW50KQorICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lUeXBlRWxlbWVudDppbnQKKyAgICAgICAgUHNpS2V5d29yZDppbnQoJ2ludCcpCisgICAgICBQc2lFcnJvckVsZW1lbnQ6SWRlbnRpZmllciBleHBlY3RlZAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgUHNpQ29kZUJsb2NrCisgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvc3RhdGVtZW50cy9UcnlJbmNvbXBsZXRlMTUudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9zdGF0ZW1lbnRzL1RyeUluY29tcGxldGUxNS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmRhMmM1YQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvc3RhdGVtZW50cy9UcnlJbmNvbXBsZXRlMTUudHh0CkBAIC0wLDAgKzEsMjEgQEAKK1BzaUphdmFGaWxlOlRyeUluY29tcGxldGUxNS5qYXZhCisgIFBzaVRyeVN0YXRlbWVudAorICAgIFBzaUtleXdvcmQ6dHJ5KCd0cnknKQorICAgIFBzaVJlc291cmNlTGlzdDooUiByKQorICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgIFBzaVJlc291cmNlVmFyaWFibGU6cgorICAgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgIFBzaVR5cGVFbGVtZW50OlIKKyAgICAgICAgICBQc2lKYXZhQ29kZVJlZmVyZW5jZUVsZW1lbnQ6UgorICAgICAgICAgICAgUHNpSWRlbnRpZmllcjpSKCdSJykKKyAgICAgICAgICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgICBQc2lJZGVudGlmaWVyOnIoJ3InKQorICAgICAgICBQc2lFcnJvckVsZW1lbnQ6Jz0nIGV4cGVjdGVkCisgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgIFBzaUNvZGVCbG9jaworICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvc3RhdGVtZW50cy9UcnlJbmNvbXBsZXRlMTYudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9zdGF0ZW1lbnRzL1RyeUluY29tcGxldGUxNi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODM3ZTM1NAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvc3RhdGVtZW50cy9UcnlJbmNvbXBsZXRlMTYudHh0CkBAIC0wLDAgKzEsMjMgQEAKK1BzaUphdmFGaWxlOlRyeUluY29tcGxldGUxNi5qYXZhCisgIFBzaVRyeVN0YXRlbWVudAorICAgIFBzaUtleXdvcmQ6dHJ5KCd0cnknKQorICAgIFBzaVJlc291cmNlTGlzdDooUiByID0pCisgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgUHNpUmVzb3VyY2VWYXJpYWJsZTpyCisgICAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgUHNpVHlwZUVsZW1lbnQ6UgorICAgICAgICAgIFBzaUphdmFDb2RlUmVmZXJlbmNlRWxlbWVudDpSCisgICAgICAgICAgICBQc2lJZGVudGlmaWVyOlIoJ1InKQorICAgICAgICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICAgIFBzaUlkZW50aWZpZXI6cigncicpCisgICAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgICBQc2lKYXZhVG9rZW46RVEoJz0nKQorICAgICAgICBQc2lFcnJvckVsZW1lbnQ6RXhwcmVzc2lvbiBleHBlY3RlZAorICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICBQc2lDb2RlQmxvY2sKKyAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL3N0YXRlbWVudHMvVHJ5SW5jb21wbGV0ZTE3LnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvc3RhdGVtZW50cy9UcnlJbmNvbXBsZXRlMTcudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNmMTlkOGMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL3N0YXRlbWVudHMvVHJ5SW5jb21wbGV0ZTE3LnR4dApAQCAtMCwwICsxLDI4IEBACitQc2lKYXZhRmlsZTpUcnlJbmNvbXBsZXRlMTcuamF2YQorICBQc2lUcnlTdGF0ZW1lbnQKKyAgICBQc2lLZXl3b3JkOnRyeSgndHJ5JykKKyAgICBQc2lSZXNvdXJjZUxpc3Q6KFIgciA9IDA7OykKKyAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICBQc2lSZXNvdXJjZVZhcmlhYmxlOnIKKyAgICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICBQc2lUeXBlRWxlbWVudDpSCisgICAgICAgICAgUHNpSmF2YUNvZGVSZWZlcmVuY2VFbGVtZW50OlIKKyAgICAgICAgICAgIFBzaUlkZW50aWZpZXI6UignUicpCisgICAgICAgICAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgICAgUHNpSWRlbnRpZmllcjpyKCdyJykKKyAgICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICAgIFBzaUphdmFUb2tlbjpFUSgnPScpCisgICAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgICBQc2lMaXRlcmFsRXhwcmVzc2lvbjowCisgICAgICAgICAgUHNpSmF2YVRva2VuOklOVEVHRVJfTElURVJBTCgnMCcpCisgICAgICBQc2lKYXZhVG9rZW46U0VNSUNPTE9OKCc7JykKKyAgICAgIFBzaUVycm9yRWxlbWVudDpSZXNvdXJjZSBkZWZpbml0aW9uIGV4cGVjdGVkCisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpSmF2YVRva2VuOlNFTUlDT0xPTignOycpCisgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgIFBzaUNvZGVCbG9jaworICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvc3RhdGVtZW50cy9UcnlJbmNvbXBsZXRlMi50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL3N0YXRlbWVudHMvVHJ5SW5jb21wbGV0ZTIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVjNmFiYTAKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL3N0YXRlbWVudHMvVHJ5SW5jb21wbGV0ZTIudHh0CkBAIC0wLDAgKzEsMTAgQEAKK1BzaUphdmFGaWxlOlRyeUluY29tcGxldGUyLmphdmEKKyAgUHNpVHJ5U3RhdGVtZW50CisgICAgUHNpS2V5d29yZDp0cnkoJ3RyeScpCisgICAgUHNpQ29kZUJsb2NrCisgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaUNhdGNoU2VjdGlvbgorICAgICAgUHNpS2V5d29yZDpjYXRjaCgnY2F0Y2gnKQorICAgICAgUHNpRXJyb3JFbGVtZW50OicoJyBleHBlY3RlZAorICAgICAgICA8ZW1wdHkgbGlzdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL3N0YXRlbWVudHMvVHJ5SW5jb21wbGV0ZTMudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9zdGF0ZW1lbnRzL1RyeUluY29tcGxldGUzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNWFkN2I5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9zdGF0ZW1lbnRzL1RyeUluY29tcGxldGUzLnR4dApAQCAtMCwwICsxLDEzIEBACitQc2lKYXZhRmlsZTpUcnlJbmNvbXBsZXRlMy5qYXZhCisgIFBzaVRyeVN0YXRlbWVudAorICAgIFBzaUtleXdvcmQ6dHJ5KCd0cnknKQorICAgIFBzaUNvZGVCbG9jaworICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lDYXRjaFNlY3Rpb24KKyAgICAgIFBzaUtleXdvcmQ6Y2F0Y2goJ2NhdGNoJykKKyAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICBQc2lFcnJvckVsZW1lbnQ6UGFyYW1ldGVyIGV4cGVjdGVkCisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpRXJyb3JFbGVtZW50OicpJyBleHBlY3RlZAorICAgICAgICA8ZW1wdHkgbGlzdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL3N0YXRlbWVudHMvVHJ5SW5jb21wbGV0ZTQudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9zdGF0ZW1lbnRzL1RyeUluY29tcGxldGU0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNjEzOTdiCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9zdGF0ZW1lbnRzL1RyeUluY29tcGxldGU0LnR4dApAQCAtMCwwICsxLDIwIEBACitQc2lKYXZhRmlsZTpUcnlJbmNvbXBsZXRlNC5qYXZhCisgIFBzaVRyeVN0YXRlbWVudAorICAgIFBzaUtleXdvcmQ6dHJ5KCd0cnknKQorICAgIFBzaUNvZGVCbG9jaworICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lDYXRjaFNlY3Rpb24KKyAgICAgIFBzaUtleXdvcmQ6Y2F0Y2goJ2NhdGNoJykKKyAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6RQorICAgICAgICBQc2lKYXZhQ29kZVJlZmVyZW5jZUVsZW1lbnQ6RQorICAgICAgICAgIFBzaUlkZW50aWZpZXI6RSgnRScpCisgICAgICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lFcnJvckVsZW1lbnQ6SWRlbnRpZmllciBleHBlY3RlZAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUVycm9yRWxlbWVudDonKScgZXhwZWN0ZWQKKyAgICAgICAgPGVtcHR5IGxpc3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9zdGF0ZW1lbnRzL1RyeUluY29tcGxldGU1LnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvc3RhdGVtZW50cy9UcnlJbmNvbXBsZXRlNS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzU2MDVhOAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvc3RhdGVtZW50cy9UcnlJbmNvbXBsZXRlNS50eHQKQEAgLTAsMCArMSwyMSBAQAorUHNpSmF2YUZpbGU6VHJ5SW5jb21wbGV0ZTUuamF2YQorICBQc2lUcnlTdGF0ZW1lbnQKKyAgICBQc2lLZXl3b3JkOnRyeSgndHJ5JykKKyAgICBQc2lDb2RlQmxvY2sKKyAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpQ2F0Y2hTZWN0aW9uCisgICAgICBQc2lLZXl3b3JkOmNhdGNoKCdjYXRjaCcpCisgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgUHNpUGFyYW1ldGVyOmUKKyAgICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICBQc2lUeXBlRWxlbWVudDpFCisgICAgICAgICAgUHNpSmF2YUNvZGVSZWZlcmVuY2VFbGVtZW50OkUKKyAgICAgICAgICAgIFBzaUlkZW50aWZpZXI6RSgnRScpCisgICAgICAgICAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgICAgUHNpSWRlbnRpZmllcjplKCdlJykKKyAgICAgIFBzaUVycm9yRWxlbWVudDonKScgZXhwZWN0ZWQKKyAgICAgICAgPGVtcHR5IGxpc3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9zdGF0ZW1lbnRzL1RyeUluY29tcGxldGU2LnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvc3RhdGVtZW50cy9UcnlJbmNvbXBsZXRlNi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjgzYTRmOQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvc3RhdGVtZW50cy9UcnlJbmNvbXBsZXRlNi50eHQKQEAgLTAsMCArMSwyMiBAQAorUHNpSmF2YUZpbGU6VHJ5SW5jb21wbGV0ZTYuamF2YQorICBQc2lUcnlTdGF0ZW1lbnQKKyAgICBQc2lLZXl3b3JkOnRyeSgndHJ5JykKKyAgICBQc2lDb2RlQmxvY2sKKyAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpQ2F0Y2hTZWN0aW9uCisgICAgICBQc2lLZXl3b3JkOmNhdGNoKCdjYXRjaCcpCisgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgUHNpUGFyYW1ldGVyOmUKKyAgICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICBQc2lUeXBlRWxlbWVudDpFCisgICAgICAgICAgUHNpSmF2YUNvZGVSZWZlcmVuY2VFbGVtZW50OkUKKyAgICAgICAgICAgIFBzaUlkZW50aWZpZXI6RSgnRScpCisgICAgICAgICAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgICAgUHNpSWRlbnRpZmllcjplKCdlJykKKyAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lFcnJvckVsZW1lbnQ6J3snIGV4cGVjdGVkCisgICAgICAgIDxlbXB0eSBsaXN0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvc3RhdGVtZW50cy9UcnlJbmNvbXBsZXRlNy50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL3N0YXRlbWVudHMvVHJ5SW5jb21wbGV0ZTcudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQyOGIxYTYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL3N0YXRlbWVudHMvVHJ5SW5jb21wbGV0ZTcudHh0CkBAIC0wLDAgKzEsOSBAQAorUHNpSmF2YUZpbGU6VHJ5SW5jb21wbGV0ZTcuamF2YQorICBQc2lUcnlTdGF0ZW1lbnQKKyAgICBQc2lLZXl3b3JkOnRyeSgndHJ5JykKKyAgICBQc2lDb2RlQmxvY2sKKyAgICAgIFBzaUphdmFUb2tlbjpMQlJBQ0UoJ3snKQorICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpCisgICAgUHNpS2V5d29yZDpmaW5hbGx5KCdmaW5hbGx5JykKKyAgICBQc2lFcnJvckVsZW1lbnQ6J3snIGV4cGVjdGVkCisgICAgICA8ZW1wdHkgbGlzdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL3N0YXRlbWVudHMvVHJ5SW5jb21wbGV0ZTgudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9zdGF0ZW1lbnRzL1RyeUluY29tcGxldGU4LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYTBiMWY0Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9zdGF0ZW1lbnRzL1RyeUluY29tcGxldGU4LnR4dApAQCAtMCwwICsxLDI1IEBACitQc2lKYXZhRmlsZTpUcnlJbmNvbXBsZXRlOC5qYXZhCisgIFBzaVRyeVN0YXRlbWVudAorICAgIFBzaUtleXdvcmQ6dHJ5KCd0cnknKQorICAgIFBzaUNvZGVCbG9jaworICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lDYXRjaFNlY3Rpb24KKyAgICAgIFBzaUtleXdvcmQ6Y2F0Y2goJ2NhdGNoJykKKyAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6QXwKKyAgICAgICAgUHNpVHlwZUVsZW1lbnQ6QQorICAgICAgICAgIFBzaUphdmFDb2RlUmVmZXJlbmNlRWxlbWVudDpBCisgICAgICAgICAgICBQc2lJZGVudGlmaWVyOkEoJ0EnKQorICAgICAgICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgUHNpSmF2YVRva2VuOk9SKCd8JykKKyAgICAgICAgUHNpRXJyb3JFbGVtZW50OklkZW50aWZpZXIgZXhwZWN0ZWQKKyAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUVycm9yRWxlbWVudDpJZGVudGlmaWVyIGV4cGVjdGVkCisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaUVycm9yRWxlbWVudDoneycgZXhwZWN0ZWQKKyAgICAgICAgPGVtcHR5IGxpc3Q+CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL3N0YXRlbWVudHMvVHJ5SW5jb21wbGV0ZTkudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9zdGF0ZW1lbnRzL1RyeUluY29tcGxldGU5LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44Y2E1N2FhCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9zdGF0ZW1lbnRzL1RyeUluY29tcGxldGU5LnR4dApAQCAtMCwwICsxLDI4IEBACitQc2lKYXZhRmlsZTpUcnlJbmNvbXBsZXRlOS5qYXZhCisgIFBzaVRyeVN0YXRlbWVudAorICAgIFBzaUtleXdvcmQ6dHJ5KCd0cnknKQorICAgIFBzaUNvZGVCbG9jaworICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lDYXRjaFNlY3Rpb24KKyAgICAgIFBzaUtleXdvcmQ6Y2F0Y2goJ2NhdGNoJykKKyAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpVHlwZUVsZW1lbnQ6QXxCCisgICAgICAgIFBzaVR5cGVFbGVtZW50OkEKKyAgICAgICAgICBQc2lKYXZhQ29kZVJlZmVyZW5jZUVsZW1lbnQ6QQorICAgICAgICAgICAgUHNpSWRlbnRpZmllcjpBKCdBJykKKyAgICAgICAgICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgIFBzaUphdmFUb2tlbjpPUignfCcpCisgICAgICAgIFBzaVR5cGVFbGVtZW50OkIKKyAgICAgICAgICBQc2lKYXZhQ29kZVJlZmVyZW5jZUVsZW1lbnQ6QgorICAgICAgICAgICAgUHNpSWRlbnRpZmllcjpCKCdCJykKKyAgICAgICAgICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lFcnJvckVsZW1lbnQ6SWRlbnRpZmllciBleHBlY3RlZAorICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lFcnJvckVsZW1lbnQ6J3snIGV4cGVjdGVkCisgICAgICAgIDxlbXB0eSBsaXN0PgpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9zdGF0ZW1lbnRzL1RyeU5vcm1hbDAudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9zdGF0ZW1lbnRzL1RyeU5vcm1hbDAudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEzZDE1ZTgKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL3N0YXRlbWVudHMvVHJ5Tm9ybWFsMC50eHQKQEAgLTAsMCArMSwyMyBAQAorUHNpSmF2YUZpbGU6VHJ5Tm9ybWFsMC5qYXZhCisgIFBzaVRyeVN0YXRlbWVudAorICAgIFBzaUtleXdvcmQ6dHJ5KCd0cnknKQorICAgIFBzaUNvZGVCbG9jaworICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lDYXRjaFNlY3Rpb24KKyAgICAgIFBzaUtleXdvcmQ6Y2F0Y2goJ2NhdGNoJykKKyAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICBQc2lQYXJhbWV0ZXI6ZQorICAgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgIFBzaVR5cGVFbGVtZW50OkUKKyAgICAgICAgICBQc2lKYXZhQ29kZVJlZmVyZW5jZUVsZW1lbnQ6RQorICAgICAgICAgICAgUHNpSWRlbnRpZmllcjpFKCdFJykKKyAgICAgICAgICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgICBQc2lJZGVudGlmaWVyOmUoJ2UnKQorICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaUNvZGVCbG9jaworICAgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgICAgUHNpSmF2YVRva2VuOlJCUkFDRSgnfScpClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9zdGF0ZW1lbnRzL1RyeU5vcm1hbDEudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9zdGF0ZW1lbnRzL1RyeU5vcm1hbDEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjliZjRkYzYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL3N0YXRlbWVudHMvVHJ5Tm9ybWFsMS50eHQKQEAgLTAsMCArMSwyOCBAQAorUHNpSmF2YUZpbGU6VHJ5Tm9ybWFsMS5qYXZhCisgIFBzaVRyeVN0YXRlbWVudAorICAgIFBzaUtleXdvcmQ6dHJ5KCd0cnknKQorICAgIFBzaUNvZGVCbG9jaworICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lDYXRjaFNlY3Rpb24KKyAgICAgIFBzaUtleXdvcmQ6Y2F0Y2goJ2NhdGNoJykKKyAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICBQc2lQYXJhbWV0ZXI6ZQorICAgICAgICBQc2lNb2RpZmllckxpc3Q6ZmluYWwKKyAgICAgICAgICBQc2lLZXl3b3JkOmZpbmFsKCdmaW5hbCcpCisgICAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgICBQc2lUeXBlRWxlbWVudDpFCisgICAgICAgICAgUHNpSmF2YUNvZGVSZWZlcmVuY2VFbGVtZW50OkUKKyAgICAgICAgICAgIFBzaUlkZW50aWZpZXI6RSgnRScpCisgICAgICAgICAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgICAgUHNpSWRlbnRpZmllcjplKCdlJykKKyAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaUtleXdvcmQ6ZmluYWxseSgnZmluYWxseScpCisgICAgUHNpQ29kZUJsb2NrCisgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9zdGF0ZW1lbnRzL1RyeU5vcm1hbDIudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9zdGF0ZW1lbnRzL1RyeU5vcm1hbDIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFhYjgzNzIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL3N0YXRlbWVudHMvVHJ5Tm9ybWFsMi50eHQKQEAgLTAsMCArMSwxMCBAQAorUHNpSmF2YUZpbGU6VHJ5Tm9ybWFsMi5qYXZhCisgIFBzaVRyeVN0YXRlbWVudAorICAgIFBzaUtleXdvcmQ6dHJ5KCd0cnknKQorICAgIFBzaUNvZGVCbG9jaworICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKKyAgICBQc2lLZXl3b3JkOmZpbmFsbHkoJ2ZpbmFsbHknKQorICAgIFBzaUNvZGVCbG9jaworICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL3N0YXRlbWVudHMvVHJ5Tm9ybWFsMy50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL3N0YXRlbWVudHMvVHJ5Tm9ybWFsMy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTZhMDZhZAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvc3RhdGVtZW50cy9UcnlOb3JtYWwzLnR4dApAQCAtMCwwICsxLDMwIEBACitQc2lKYXZhRmlsZTpUcnlOb3JtYWwzLmphdmEKKyAgUHNpVHJ5U3RhdGVtZW50CisgICAgUHNpS2V5d29yZDp0cnkoJ3RyeScpCisgICAgUHNpQ29kZUJsb2NrCisgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQorICAgIFBzaUNhdGNoU2VjdGlvbgorICAgICAgUHNpS2V5d29yZDpjYXRjaCgnY2F0Y2gnKQorICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgIFBzaVBhcmFtZXRlcjplCisgICAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgUHNpVHlwZUVsZW1lbnQ6QXxCCisgICAgICAgICAgUHNpVHlwZUVsZW1lbnQ6QQorICAgICAgICAgICAgUHNpSmF2YUNvZGVSZWZlcmVuY2VFbGVtZW50OkEKKyAgICAgICAgICAgICAgUHNpSWRlbnRpZmllcjpBKCdBJykKKyAgICAgICAgICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICAgIFBzaUphdmFUb2tlbjpPUignfCcpCisgICAgICAgICAgUHNpVHlwZUVsZW1lbnQ6QgorICAgICAgICAgICAgUHNpSmF2YUNvZGVSZWZlcmVuY2VFbGVtZW50OkIKKyAgICAgICAgICAgICAgUHNpSWRlbnRpZmllcjpCKCdCJykKKyAgICAgICAgICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgICAgUHNpSWRlbnRpZmllcjplKCdlJykKKyAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lDb2RlQmxvY2sKKyAgICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9zdGF0ZW1lbnRzL1RyeU5vcm1hbDQudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9zdGF0ZW1lbnRzL1RyeU5vcm1hbDQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM1YThmNWYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL3N0YXRlbWVudHMvVHJ5Tm9ybWFsNC50eHQKQEAgLTAsMCArMSwyNCBAQAorUHNpSmF2YUZpbGU6VHJ5Tm9ybWFsNC5qYXZhCisgIFBzaVRyeVN0YXRlbWVudAorICAgIFBzaUtleXdvcmQ6dHJ5KCd0cnknKQorICAgIFBzaVJlc291cmNlTGlzdDooUiByID0gMCkKKyAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICBQc2lSZXNvdXJjZVZhcmlhYmxlOnIKKyAgICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICBQc2lUeXBlRWxlbWVudDpSCisgICAgICAgICAgUHNpSmF2YUNvZGVSZWZlcmVuY2VFbGVtZW50OlIKKyAgICAgICAgICAgIFBzaUlkZW50aWZpZXI6UignUicpCisgICAgICAgICAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgICAgUHNpSWRlbnRpZmllcjpyKCdyJykKKyAgICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICAgIFBzaUphdmFUb2tlbjpFUSgnPScpCisgICAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgICBQc2lMaXRlcmFsRXhwcmVzc2lvbjowCisgICAgICAgICAgUHNpSmF2YVRva2VuOklOVEVHRVJfTElURVJBTCgnMCcpCisgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgIFBzaUNvZGVCbG9jaworICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvc3RhdGVtZW50cy9UcnlOb3JtYWw1LnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvc3RhdGVtZW50cy9UcnlOb3JtYWw1LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YTA5ZjcxCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9zdGF0ZW1lbnRzL1RyeU5vcm1hbDUudHh0CkBAIC0wLDAgKzEsNDEgQEAKK1BzaUphdmFGaWxlOlRyeU5vcm1hbDUuamF2YQorICBQc2lUcnlTdGF0ZW1lbnQKKyAgICBQc2lLZXl3b3JkOnRyeSgndHJ5JykKKyAgICBQc2lSZXNvdXJjZUxpc3Q6KFIxIHIxID0gMTsgUjIgcjIgPSAyKQorICAgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICAgIFBzaVJlc291cmNlVmFyaWFibGU6cjEKKyAgICAgICAgUHNpTW9kaWZpZXJMaXN0OgorICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICBQc2lUeXBlRWxlbWVudDpSMQorICAgICAgICAgIFBzaUphdmFDb2RlUmVmZXJlbmNlRWxlbWVudDpSMQorICAgICAgICAgICAgUHNpSWRlbnRpZmllcjpSMSgnUjEnKQorICAgICAgICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICAgIFBzaUlkZW50aWZpZXI6cjEoJ3IxJykKKyAgICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICAgIFBzaUphdmFUb2tlbjpFUSgnPScpCisgICAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgICBQc2lMaXRlcmFsRXhwcmVzc2lvbjoxCisgICAgICAgICAgUHNpSmF2YVRva2VuOklOVEVHRVJfTElURVJBTCgnMScpCisgICAgICBQc2lKYXZhVG9rZW46U0VNSUNPTE9OKCc7JykKKyAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgUHNpUmVzb3VyY2VWYXJpYWJsZTpyMgorICAgICAgICBQc2lNb2RpZmllckxpc3Q6CisgICAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICAgIFBzaVR5cGVFbGVtZW50OlIyCisgICAgICAgICAgUHNpSmF2YUNvZGVSZWZlcmVuY2VFbGVtZW50OlIyCisgICAgICAgICAgICBQc2lJZGVudGlmaWVyOlIyKCdSMicpCisgICAgICAgICAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgICAgUHNpSWRlbnRpZmllcjpyMigncjInKQorICAgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgICAgUHNpSmF2YVRva2VuOkVRKCc9JykKKyAgICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICAgIFBzaUxpdGVyYWxFeHByZXNzaW9uOjIKKyAgICAgICAgICBQc2lKYXZhVG9rZW46SU5URUdFUl9MSVRFUkFMKCcyJykKKyAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgUHNpQ29kZUJsb2NrCisgICAgICBQc2lKYXZhVG9rZW46TEJSQUNFKCd7JykKKyAgICAgIFBzaUphdmFUb2tlbjpSQlJBQ0UoJ30nKQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9zdGF0ZW1lbnRzL1RyeU5vcm1hbDYudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9zdGF0ZW1lbnRzL1RyeU5vcm1hbDYudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI3MjY1MmUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL3N0YXRlbWVudHMvVHJ5Tm9ybWFsNi50eHQKQEAgLTAsMCArMSwyNSBAQAorUHNpSmF2YUZpbGU6VHJ5Tm9ybWFsNi5qYXZhCisgIFBzaVRyeVN0YXRlbWVudAorICAgIFBzaUtleXdvcmQ6dHJ5KCd0cnknKQorICAgIFBzaVJlc291cmNlTGlzdDooUiByID0gMDspCisgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgUHNpUmVzb3VyY2VWYXJpYWJsZTpyCisgICAgICAgIFBzaU1vZGlmaWVyTGlzdDoKKyAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgUHNpVHlwZUVsZW1lbnQ6UgorICAgICAgICAgIFBzaUphdmFDb2RlUmVmZXJlbmNlRWxlbWVudDpSCisgICAgICAgICAgICBQc2lJZGVudGlmaWVyOlIoJ1InKQorICAgICAgICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgICAgIFBzaUlkZW50aWZpZXI6cigncicpCisgICAgICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgICAgICBQc2lKYXZhVG9rZW46RVEoJz0nKQorICAgICAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICAgICAgUHNpTGl0ZXJhbEV4cHJlc3Npb246MAorICAgICAgICAgIFBzaUphdmFUb2tlbjpJTlRFR0VSX0xJVEVSQUwoJzAnKQorICAgICAgUHNpSmF2YVRva2VuOlNFTUlDT0xPTignOycpCisgICAgICBQc2lKYXZhVG9rZW46UlBBUkVOVEgoJyknKQorICAgIFBzaUNvZGVCbG9jaworICAgICAgUHNpSmF2YVRva2VuOkxCUkFDRSgneycpCisgICAgICBQc2lKYXZhVG9rZW46UkJSQUNFKCd9JykKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL3N0YXRlbWVudHMvV2hpbGVJbmNvbXBsZXRlMC50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL3N0YXRlbWVudHMvV2hpbGVJbmNvbXBsZXRlMC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTVkMDNiZQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvc3RhdGVtZW50cy9XaGlsZUluY29tcGxldGUwLnR4dApAQCAtMCwwICsxLDUgQEAKK1BzaUphdmFGaWxlOldoaWxlSW5jb21wbGV0ZTAuamF2YQorICBQc2lXaGlsZVN0YXRlbWVudAorICAgIFBzaUtleXdvcmQ6d2hpbGUoJ3doaWxlJykKKyAgICBQc2lFcnJvckVsZW1lbnQ6JygnIGV4cGVjdGVkCisgICAgICA8ZW1wdHkgbGlzdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL3N0YXRlbWVudHMvV2hpbGVJbmNvbXBsZXRlMS50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL3N0YXRlbWVudHMvV2hpbGVJbmNvbXBsZXRlMS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzc3MmM2MQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvc3RhdGVtZW50cy9XaGlsZUluY29tcGxldGUxLnR4dApAQCAtMCwwICsxLDcgQEAKK1BzaUphdmFGaWxlOldoaWxlSW5jb21wbGV0ZTEuamF2YQorICBQc2lXaGlsZVN0YXRlbWVudAorICAgIFBzaUtleXdvcmQ6d2hpbGUoJ3doaWxlJykKKyAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgIFBzaUVycm9yRWxlbWVudDpFeHByZXNzaW9uIGV4cGVjdGVkCisgICAgICA8ZW1wdHkgbGlzdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL3N0YXRlbWVudHMvV2hpbGVJbmNvbXBsZXRlMi50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL3N0YXRlbWVudHMvV2hpbGVJbmNvbXBsZXRlMi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTYwNDdkOQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvc3RhdGVtZW50cy9XaGlsZUluY29tcGxldGUyLnR4dApAQCAtMCwwICsxLDE3IEBACitQc2lKYXZhRmlsZTpXaGlsZUluY29tcGxldGUyLmphdmEKKyAgUHNpV2hpbGVTdGF0ZW1lbnQKKyAgICBQc2lLZXl3b3JkOndoaWxlKCd3aGlsZScpCisgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICBQc2lFcnJvckVsZW1lbnQ6RXhwcmVzc2lvbiBleHBlY3RlZAorICAgICAgPGVtcHR5IGxpc3Q+CisgIFBzaVdoaXRlU3BhY2UoJ1xuICcpCisgIFBzaUV4cHJlc3Npb25TdGF0ZW1lbnQKKyAgICBQc2lNZXRob2RDYWxsRXhwcmVzc2lvbjpmb28oKQorICAgICAgUHNpUmVmZXJlbmNlRXhwcmVzc2lvbjpmb28KKyAgICAgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdAorICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgIFBzaUV4cHJlc3Npb25MaXN0CisgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgUHNpSmF2YVRva2VuOlNFTUlDT0xPTignOycpClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9zdGF0ZW1lbnRzL1doaWxlSW5jb21wbGV0ZTMudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9zdGF0ZW1lbnRzL1doaWxlSW5jb21wbGV0ZTMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAyZTU5NWIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL3N0YXRlbWVudHMvV2hpbGVJbmNvbXBsZXRlMy50eHQKQEAgLTAsMCArMSwxMCBAQAorUHNpSmF2YUZpbGU6V2hpbGVJbmNvbXBsZXRlMy5qYXZhCisgIFBzaVdoaWxlU3RhdGVtZW50CisgICAgUHNpS2V5d29yZDp3aGlsZSgnd2hpbGUnKQorICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgUHNpUmVmZXJlbmNlRXhwcmVzc2lvbjpjb25kCisgICAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgUHNpSWRlbnRpZmllcjpjb25kKCdjb25kJykKKyAgICBQc2lFcnJvckVsZW1lbnQ6JyknIGV4cGVjdGVkCisgICAgICA8ZW1wdHkgbGlzdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL3N0YXRlbWVudHMvV2hpbGVJbmNvbXBsZXRlNC50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL3N0YXRlbWVudHMvV2hpbGVJbmNvbXBsZXRlNC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWMxMmY3MgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcGFyc2VyLXBhcnRpYWwvc3RhdGVtZW50cy9XaGlsZUluY29tcGxldGU0LnR4dApAQCAtMCwwICsxLDExIEBACitQc2lKYXZhRmlsZTpXaGlsZUluY29tcGxldGU0LmphdmEKKyAgUHNpV2hpbGVTdGF0ZW1lbnQKKyAgICBQc2lLZXl3b3JkOndoaWxlKCd3aGlsZScpCisgICAgUHNpSmF2YVRva2VuOkxQQVJFTlRIKCcoJykKKyAgICBQc2lSZWZlcmVuY2VFeHByZXNzaW9uOmNvbmQKKyAgICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgICAgPGVtcHR5IGxpc3Q+CisgICAgICBQc2lJZGVudGlmaWVyOmNvbmQoJ2NvbmQnKQorICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgUHNpRXJyb3JFbGVtZW50OlN0YXRlbWVudCBleHBlY3RlZAorICAgICAgPGVtcHR5IGxpc3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9zdGF0ZW1lbnRzL1doaWxlSW5jb21wbGV0ZTUudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9zdGF0ZW1lbnRzL1doaWxlSW5jb21wbGV0ZTUudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUyNjU0NjIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL3N0YXRlbWVudHMvV2hpbGVJbmNvbXBsZXRlNS50eHQKQEAgLTAsMCArMSwxOCBAQAorUHNpSmF2YUZpbGU6V2hpbGVJbmNvbXBsZXRlNS5qYXZhCisgIFBzaVdoaWxlU3RhdGVtZW50CisgICAgUHNpS2V5d29yZDp3aGlsZSgnd2hpbGUnKQorICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgUHNpRXJyb3JFbGVtZW50OkV4cHJlc3Npb24gZXhwZWN0ZWQKKyAgICAgIDxlbXB0eSBsaXN0PgorICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgUHNpV2hpdGVTcGFjZSgnICcpCisgICAgUHNpRXhwcmVzc2lvblN0YXRlbWVudAorICAgICAgUHNpTWV0aG9kQ2FsbEV4cHJlc3Npb246Zm9vKCkKKyAgICAgICAgUHNpUmVmZXJlbmNlRXhwcmVzc2lvbjpmb28KKyAgICAgICAgICBQc2lSZWZlcmVuY2VQYXJhbWV0ZXJMaXN0CisgICAgICAgICAgICA8ZW1wdHkgbGlzdD4KKyAgICAgICAgICBQc2lJZGVudGlmaWVyOmZvbygnZm9vJykKKyAgICAgICAgUHNpRXhwcmVzc2lvbkxpc3QKKyAgICAgICAgICBQc2lKYXZhVG9rZW46TFBBUkVOVEgoJygnKQorICAgICAgICAgIFBzaUphdmFUb2tlbjpSUEFSRU5USCgnKScpCisgICAgICBQc2lKYXZhVG9rZW46U0VNSUNPTE9OKCc7JykKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3BhcnNlci1wYXJ0aWFsL3N0YXRlbWVudHMvV2hpbGVOb3JtYWwudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9zdGF0ZW1lbnRzL1doaWxlTm9ybWFsLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMGFlYWJjCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9wYXJzZXItcGFydGlhbC9zdGF0ZW1lbnRzL1doaWxlTm9ybWFsLnR4dApAQCAtMCwwICsxLDE5IEBACitQc2lKYXZhRmlsZTpXaGlsZU5vcm1hbC5qYXZhCisgIFBzaVdoaWxlU3RhdGVtZW50CisgICAgUHNpS2V5d29yZDp3aGlsZSgnd2hpbGUnKQorICAgIFBzaVdoaXRlU3BhY2UoJyAnKQorICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgUHNpTGl0ZXJhbEV4cHJlc3Npb246dHJ1ZQorICAgICAgUHNpSmF2YVRva2VuOlRSVUVfS0VZV09SRCgndHJ1ZScpCisgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICBQc2lXaGl0ZVNwYWNlKCcgJykKKyAgICBQc2lFeHByZXNzaW9uU3RhdGVtZW50CisgICAgICBQc2lNZXRob2RDYWxsRXhwcmVzc2lvbjpmb28oKQorICAgICAgICBQc2lSZWZlcmVuY2VFeHByZXNzaW9uOmZvbworICAgICAgICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QKKyAgICAgICAgICAgIDxlbXB0eSBsaXN0PgorICAgICAgICAgIFBzaUlkZW50aWZpZXI6Zm9vKCdmb28nKQorICAgICAgICBQc2lFeHByZXNzaW9uTGlzdAorICAgICAgICAgIFBzaUphdmFUb2tlbjpMUEFSRU5USCgnKCcpCisgICAgICAgICAgUHNpSmF2YVRva2VuOlJQQVJFTlRIKCcpJykKKyAgICAgIFBzaUphdmFUb2tlbjpTRU1JQ09MT04oJzsnKQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVwb3NpdG9yeVVzZS9jbHMvamF2YS9sYW5nL0Jvb2xlYW4uY2xhc3MgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3JlcG9zaXRvcnlVc2UvY2xzL2phdmEvbGFuZy9Cb29sZWFuLmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA1ZDI3YjAKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3JlcG9zaXRvcnlVc2UvY2xzL2phdmEvbGFuZy9Cb29sZWFuLmNsYXNzCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVwb3NpdG9yeVVzZS9jbHMvamF2YS9sYW5nL0J5dGUuY2xhc3MgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3JlcG9zaXRvcnlVc2UvY2xzL2phdmEvbGFuZy9CeXRlLmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJhMzBkMjUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3JlcG9zaXRvcnlVc2UvY2xzL2phdmEvbGFuZy9CeXRlLmNsYXNzCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVwb3NpdG9yeVVzZS9jbHMvamF2YS9sYW5nL0NoYXJhY3RlciRTdWJzZXQuY2xhc3MgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3JlcG9zaXRvcnlVc2UvY2xzL2phdmEvbGFuZy9DaGFyYWN0ZXIkU3Vic2V0LmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI0YzAzMTAKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3JlcG9zaXRvcnlVc2UvY2xzL2phdmEvbGFuZy9DaGFyYWN0ZXIkU3Vic2V0LmNsYXNzCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVwb3NpdG9yeVVzZS9jbHMvamF2YS9sYW5nL0NoYXJhY3RlciRVbmljb2RlQmxvY2suY2xhc3MgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3JlcG9zaXRvcnlVc2UvY2xzL2phdmEvbGFuZy9DaGFyYWN0ZXIkVW5pY29kZUJsb2NrLmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdkZTEwY2UKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3JlcG9zaXRvcnlVc2UvY2xzL2phdmEvbGFuZy9DaGFyYWN0ZXIkVW5pY29kZUJsb2NrLmNsYXNzCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVwb3NpdG9yeVVzZS9jbHMvamF2YS9sYW5nL0NoYXJhY3Rlci5jbGFzcyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVwb3NpdG9yeVVzZS9jbHMvamF2YS9sYW5nL0NoYXJhY3Rlci5jbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNTUwNjdjCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXBvc2l0b3J5VXNlL2Nscy9qYXZhL2xhbmcvQ2hhcmFjdGVyLmNsYXNzCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVwb3NpdG9yeVVzZS9jbHMvamF2YS9sYW5nL0NsYXNzLmNsYXNzIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXBvc2l0b3J5VXNlL2Nscy9qYXZhL2xhbmcvQ2xhc3MuY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjVkOTRhZAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVwb3NpdG9yeVVzZS9jbHMvamF2YS9sYW5nL0NsYXNzLmNsYXNzCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVwb3NpdG9yeVVzZS9jbHMvamF2YS9sYW5nL0NsYXNzTG9hZGVyLmNsYXNzIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXBvc2l0b3J5VXNlL2Nscy9qYXZhL2xhbmcvQ2xhc3NMb2FkZXIuY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTA2MzI0MwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVwb3NpdG9yeVVzZS9jbHMvamF2YS9sYW5nL0NsYXNzTG9hZGVyLmNsYXNzCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVwb3NpdG9yeVVzZS9jbHMvamF2YS9sYW5nL0NvbXBhcmFibGUuY2xhc3MgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3JlcG9zaXRvcnlVc2UvY2xzL2phdmEvbGFuZy9Db21wYXJhYmxlLmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE4NTM5ZWMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3JlcG9zaXRvcnlVc2UvY2xzL2phdmEvbGFuZy9Db21wYXJhYmxlLmNsYXNzCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVwb3NpdG9yeVVzZS9jbHMvamF2YS9sYW5nL0RvdWJsZS5jbGFzcyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVwb3NpdG9yeVVzZS9jbHMvamF2YS9sYW5nL0RvdWJsZS5jbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZTFlY2JlCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXBvc2l0b3J5VXNlL2Nscy9qYXZhL2xhbmcvRG91YmxlLmNsYXNzCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVwb3NpdG9yeVVzZS9jbHMvamF2YS9sYW5nL0VudW0uY2xhc3MgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3JlcG9zaXRvcnlVc2UvY2xzL2phdmEvbGFuZy9FbnVtLmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNjODUyMzYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3JlcG9zaXRvcnlVc2UvY2xzL2phdmEvbGFuZy9FbnVtLmNsYXNzCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVwb3NpdG9yeVVzZS9jbHMvamF2YS9sYW5nL0Zsb2F0LmNsYXNzIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXBvc2l0b3J5VXNlL2Nscy9qYXZhL2xhbmcvRmxvYXQuY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzgxOTAyMAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVwb3NpdG9yeVVzZS9jbHMvamF2YS9sYW5nL0Zsb2F0LmNsYXNzCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVwb3NpdG9yeVVzZS9jbHMvamF2YS9sYW5nL0ludGVnZXIuY2xhc3MgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3JlcG9zaXRvcnlVc2UvY2xzL2phdmEvbGFuZy9JbnRlZ2VyLmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA4MTQ0MmMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3JlcG9zaXRvcnlVc2UvY2xzL2phdmEvbGFuZy9JbnRlZ2VyLmNsYXNzCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVwb3NpdG9yeVVzZS9jbHMvamF2YS9sYW5nL0l0ZXJhYmxlLmNsYXNzIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXBvc2l0b3J5VXNlL2Nscy9qYXZhL2xhbmcvSXRlcmFibGUuY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWZhN2JlNAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVwb3NpdG9yeVVzZS9jbHMvamF2YS9sYW5nL0l0ZXJhYmxlLmNsYXNzCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVwb3NpdG9yeVVzZS9jbHMvamF2YS9sYW5nL0xvbmcuY2xhc3MgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3JlcG9zaXRvcnlVc2UvY2xzL2phdmEvbGFuZy9Mb25nLmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUzY2ZkOTkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3JlcG9zaXRvcnlVc2UvY2xzL2phdmEvbGFuZy9Mb25nLmNsYXNzCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVwb3NpdG9yeVVzZS9jbHMvamF2YS9sYW5nL09iamVjdC5jbGFzcyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVwb3NpdG9yeVVzZS9jbHMvamF2YS9sYW5nL09iamVjdC5jbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZjAwOTE2Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXBvc2l0b3J5VXNlL2Nscy9qYXZhL2xhbmcvT2JqZWN0LmNsYXNzCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVwb3NpdG9yeVVzZS9jbHMvamF2YS9sYW5nL1Nob3J0LmNsYXNzIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXBvc2l0b3J5VXNlL2Nscy9qYXZhL2xhbmcvU2hvcnQuY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWZiMmQ5ZAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVwb3NpdG9yeVVzZS9jbHMvamF2YS9sYW5nL1Nob3J0LmNsYXNzCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVwb3NpdG9yeVVzZS9jbHMvamF2YS9sYW5nL1NpbXBsZUl0ZXJhdG9yLmNsYXNzIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXBvc2l0b3J5VXNlL2Nscy9qYXZhL2xhbmcvU2ltcGxlSXRlcmF0b3IuY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2E3YWQzZAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVwb3NpdG9yeVVzZS9jbHMvamF2YS9sYW5nL1NpbXBsZUl0ZXJhdG9yLmNsYXNzCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVwb3NpdG9yeVVzZS9jbHMvamF2YS9sYW5nL1N0cmluZy5jbGFzcyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVwb3NpdG9yeVVzZS9jbHMvamF2YS9sYW5nL1N0cmluZy5jbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOGJkMGQzCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXBvc2l0b3J5VXNlL2Nscy9qYXZhL2xhbmcvU3RyaW5nLmNsYXNzCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVwb3NpdG9yeVVzZS9jbHMvamF2YS9sYW5nL1RocmVhZExvY2FsLmNsYXNzIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXBvc2l0b3J5VXNlL2Nscy9qYXZhL2xhbmcvVGhyZWFkTG9jYWwuY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWVjOGZjNAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVwb3NpdG9yeVVzZS9jbHMvamF2YS9sYW5nL1RocmVhZExvY2FsLmNsYXNzCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVwb3NpdG9yeVVzZS9jbHMvamF2YS9sYW5nL1ZvaWQuY2xhc3MgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3JlcG9zaXRvcnlVc2UvY2xzL2phdmEvbGFuZy9Wb2lkLmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM4OWE4M2UKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3JlcG9zaXRvcnlVc2UvY2xzL2phdmEvbGFuZy9Wb2lkLmNsYXNzCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVwb3NpdG9yeVVzZS9jbHMvamF2YS9sYW5nL3JlZi9QaGFudG9tUmVmZXJlbmNlLmNsYXNzIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXBvc2l0b3J5VXNlL2Nscy9qYXZhL2xhbmcvcmVmL1BoYW50b21SZWZlcmVuY2UuY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzNhYmQxMgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVwb3NpdG9yeVVzZS9jbHMvamF2YS9sYW5nL3JlZi9QaGFudG9tUmVmZXJlbmNlLmNsYXNzCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVwb3NpdG9yeVVzZS9jbHMvamF2YS9sYW5nL3JlZi9SZWZlcmVuY2UuY2xhc3MgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3JlcG9zaXRvcnlVc2UvY2xzL2phdmEvbGFuZy9yZWYvUmVmZXJlbmNlLmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk3ZmYwOTcKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3JlcG9zaXRvcnlVc2UvY2xzL2phdmEvbGFuZy9yZWYvUmVmZXJlbmNlLmNsYXNzCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVwb3NpdG9yeVVzZS9jbHMvamF2YS9sYW5nL3JlZi9SZWZlcmVuY2VRdWV1ZS5jbGFzcyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVwb3NpdG9yeVVzZS9jbHMvamF2YS9sYW5nL3JlZi9SZWZlcmVuY2VRdWV1ZS5jbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wM2U0MmI5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXBvc2l0b3J5VXNlL2Nscy9qYXZhL2xhbmcvcmVmL1JlZmVyZW5jZVF1ZXVlLmNsYXNzCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVwb3NpdG9yeVVzZS9jbHMvamF2YS9sYW5nL3JlZi9Tb2Z0UmVmZXJlbmNlLmNsYXNzIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXBvc2l0b3J5VXNlL2Nscy9qYXZhL2xhbmcvcmVmL1NvZnRSZWZlcmVuY2UuY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDg3ZWMyNAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVwb3NpdG9yeVVzZS9jbHMvamF2YS9sYW5nL3JlZi9Tb2Z0UmVmZXJlbmNlLmNsYXNzCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVwb3NpdG9yeVVzZS9jbHMvamF2YS9sYW5nL3JlZi9XZWFrUmVmZXJlbmNlLmNsYXNzIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXBvc2l0b3J5VXNlL2Nscy9qYXZhL2xhbmcvcmVmL1dlYWtSZWZlcmVuY2UuY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGFiMGZlOQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVwb3NpdG9yeVVzZS9jbHMvamF2YS9sYW5nL3JlZi9XZWFrUmVmZXJlbmNlLmNsYXNzCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVwb3NpdG9yeVVzZS9jbHMvamF2YS9sYW5nL3JlZmxlY3QvQWNjZXNzaWJsZU9iamVjdC5jbGFzcyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVwb3NpdG9yeVVzZS9jbHMvamF2YS9sYW5nL3JlZmxlY3QvQWNjZXNzaWJsZU9iamVjdC5jbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40N2RlMzIzCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXBvc2l0b3J5VXNlL2Nscy9qYXZhL2xhbmcvcmVmbGVjdC9BY2Nlc3NpYmxlT2JqZWN0LmNsYXNzCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVwb3NpdG9yeVVzZS9jbHMvamF2YS9sYW5nL3JlZmxlY3QvQXJyYXkuY2xhc3MgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3JlcG9zaXRvcnlVc2UvY2xzL2phdmEvbGFuZy9yZWZsZWN0L0FycmF5LmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQyNGNhNzEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3JlcG9zaXRvcnlVc2UvY2xzL2phdmEvbGFuZy9yZWZsZWN0L0FycmF5LmNsYXNzCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVwb3NpdG9yeVVzZS9jbHMvamF2YS9sYW5nL3JlZmxlY3QvQ29uc3RydWN0b3IuY2xhc3MgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3JlcG9zaXRvcnlVc2UvY2xzL2phdmEvbGFuZy9yZWZsZWN0L0NvbnN0cnVjdG9yLmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBlNjYxZWIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3JlcG9zaXRvcnlVc2UvY2xzL2phdmEvbGFuZy9yZWZsZWN0L0NvbnN0cnVjdG9yLmNsYXNzCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVwb3NpdG9yeVVzZS9jbHMvamF2YS9sYW5nL3JlZmxlY3QvRmllbGQuY2xhc3MgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3JlcG9zaXRvcnlVc2UvY2xzL2phdmEvbGFuZy9yZWZsZWN0L0ZpZWxkLmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM0ZTk2Y2UKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3JlcG9zaXRvcnlVc2UvY2xzL2phdmEvbGFuZy9yZWZsZWN0L0ZpZWxkLmNsYXNzCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVwb3NpdG9yeVVzZS9jbHMvamF2YS9sYW5nL3JlZmxlY3QvSW52b2NhdGlvbkhhbmRsZXIuY2xhc3MgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3JlcG9zaXRvcnlVc2UvY2xzL2phdmEvbGFuZy9yZWZsZWN0L0ludm9jYXRpb25IYW5kbGVyLmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ2Mjc2OTEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3JlcG9zaXRvcnlVc2UvY2xzL2phdmEvbGFuZy9yZWZsZWN0L0ludm9jYXRpb25IYW5kbGVyLmNsYXNzCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVwb3NpdG9yeVVzZS9jbHMvamF2YS9sYW5nL3JlZmxlY3QvSW52b2NhdGlvblRhcmdldEV4Y2VwdGlvbi5jbGFzcyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVwb3NpdG9yeVVzZS9jbHMvamF2YS9sYW5nL3JlZmxlY3QvSW52b2NhdGlvblRhcmdldEV4Y2VwdGlvbi5jbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMGNkMWJkCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXBvc2l0b3J5VXNlL2Nscy9qYXZhL2xhbmcvcmVmbGVjdC9JbnZvY2F0aW9uVGFyZ2V0RXhjZXB0aW9uLmNsYXNzCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVwb3NpdG9yeVVzZS9jbHMvamF2YS9sYW5nL3JlZmxlY3QvTWVtYmVyLmNsYXNzIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXBvc2l0b3J5VXNlL2Nscy9qYXZhL2xhbmcvcmVmbGVjdC9NZW1iZXIuY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjI0OWEzOQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVwb3NpdG9yeVVzZS9jbHMvamF2YS9sYW5nL3JlZmxlY3QvTWVtYmVyLmNsYXNzCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVwb3NpdG9yeVVzZS9jbHMvamF2YS9sYW5nL3JlZmxlY3QvTWV0aG9kLmNsYXNzIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXBvc2l0b3J5VXNlL2Nscy9qYXZhL2xhbmcvcmVmbGVjdC9NZXRob2QuY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjNmNDY0ZAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVwb3NpdG9yeVVzZS9jbHMvamF2YS9sYW5nL3JlZmxlY3QvTWV0aG9kLmNsYXNzCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVwb3NpdG9yeVVzZS9jbHMvamF2YS9sYW5nL3JlZmxlY3QvTW9kaWZpZXIuY2xhc3MgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3JlcG9zaXRvcnlVc2UvY2xzL2phdmEvbGFuZy9yZWZsZWN0L01vZGlmaWVyLmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ0ZTBmYTAKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3JlcG9zaXRvcnlVc2UvY2xzL2phdmEvbGFuZy9yZWZsZWN0L01vZGlmaWVyLmNsYXNzCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVwb3NpdG9yeVVzZS9jbHMvamF2YS9sYW5nL3JlZmxlY3QvUHJveHkuY2xhc3MgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3JlcG9zaXRvcnlVc2UvY2xzL2phdmEvbGFuZy9yZWZsZWN0L1Byb3h5LmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE3MWE2NjkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3JlcG9zaXRvcnlVc2UvY2xzL2phdmEvbGFuZy9yZWZsZWN0L1Byb3h5LmNsYXNzCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVwb3NpdG9yeVVzZS9jbHMvamF2YS9sYW5nL3JlZmxlY3QvUmVmbGVjdFBlcm1pc3Npb24uY2xhc3MgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3JlcG9zaXRvcnlVc2UvY2xzL2phdmEvbGFuZy9yZWZsZWN0L1JlZmxlY3RQZXJtaXNzaW9uLmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ3OGQwZmUxCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXBvc2l0b3J5VXNlL2Nscy9qYXZhL2xhbmcvcmVmbGVjdC9SZWZsZWN0UGVybWlzc2lvbi5jbGFzcwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3JlcG9zaXRvcnlVc2UvY2xzL2phdmEvbGFuZy9yZWZsZWN0L1VuZGVjbGFyZWRUaHJvd2FibGVFeGNlcHRpb24uY2xhc3MgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3JlcG9zaXRvcnlVc2UvY2xzL2phdmEvbGFuZy9yZWZsZWN0L1VuZGVjbGFyZWRUaHJvd2FibGVFeGNlcHRpb24uY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmIzOTRkMwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVwb3NpdG9yeVVzZS9jbHMvamF2YS9sYW5nL3JlZmxlY3QvVW5kZWNsYXJlZFRocm93YWJsZUV4Y2VwdGlvbi5jbGFzcwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3JlcG9zaXRvcnlVc2UvY2xzL2phdmEvdGV4dC9NZXNzYWdlRm9ybWF0JEZpZWxkLmNsYXNzIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXBvc2l0b3J5VXNlL2Nscy9qYXZhL3RleHQvTWVzc2FnZUZvcm1hdCRGaWVsZC5jbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYThjNGYyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXBvc2l0b3J5VXNlL2Nscy9qYXZhL3RleHQvTWVzc2FnZUZvcm1hdCRGaWVsZC5jbGFzcwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3JlcG9zaXRvcnlVc2UvY2xzL2phdmEvdGV4dC9NZXNzYWdlRm9ybWF0LmNsYXNzIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXBvc2l0b3J5VXNlL2Nscy9qYXZhL3RleHQvTWVzc2FnZUZvcm1hdC5jbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMzMxZTZkCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXBvc2l0b3J5VXNlL2Nscy9qYXZhL3RleHQvTWVzc2FnZUZvcm1hdC5jbGFzcwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3JlcG9zaXRvcnlVc2UvY2xzL2phdmEvdXRpbC9BYnN0cmFjdENvbGxlY3Rpb24uY2xhc3MgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3JlcG9zaXRvcnlVc2UvY2xzL2phdmEvdXRpbC9BYnN0cmFjdENvbGxlY3Rpb24uY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjUzMjlmMQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVwb3NpdG9yeVVzZS9jbHMvamF2YS91dGlsL0Fic3RyYWN0Q29sbGVjdGlvbi5jbGFzcwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3JlcG9zaXRvcnlVc2UvY2xzL2phdmEvdXRpbC9BYnN0cmFjdExpc3QuY2xhc3MgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3JlcG9zaXRvcnlVc2UvY2xzL2phdmEvdXRpbC9BYnN0cmFjdExpc3QuY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWZlNWIzOAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVwb3NpdG9yeVVzZS9jbHMvamF2YS91dGlsL0Fic3RyYWN0TGlzdC5jbGFzcwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3JlcG9zaXRvcnlVc2UvY2xzL2phdmEvdXRpbC9BYnN0cmFjdE1hcC5jbGFzcyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVwb3NpdG9yeVVzZS9jbHMvamF2YS91dGlsL0Fic3RyYWN0TWFwLmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFjNTA4YWIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3JlcG9zaXRvcnlVc2UvY2xzL2phdmEvdXRpbC9BYnN0cmFjdE1hcC5jbGFzcwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3JlcG9zaXRvcnlVc2UvY2xzL2phdmEvdXRpbC9BYnN0cmFjdFNlcXVlbnRpYWxMaXN0LmNsYXNzIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXBvc2l0b3J5VXNlL2Nscy9qYXZhL3V0aWwvQWJzdHJhY3RTZXF1ZW50aWFsTGlzdC5jbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYWU5NGIxCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXBvc2l0b3J5VXNlL2Nscy9qYXZhL3V0aWwvQWJzdHJhY3RTZXF1ZW50aWFsTGlzdC5jbGFzcwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3JlcG9zaXRvcnlVc2UvY2xzL2phdmEvdXRpbC9BYnN0cmFjdFNldC5jbGFzcyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVwb3NpdG9yeVVzZS9jbHMvamF2YS91dGlsL0Fic3RyYWN0U2V0LmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjczNDk1OWMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3JlcG9zaXRvcnlVc2UvY2xzL2phdmEvdXRpbC9BYnN0cmFjdFNldC5jbGFzcwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3JlcG9zaXRvcnlVc2UvY2xzL2phdmEvdXRpbC9BcnJheUxpc3QuY2xhc3MgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3JlcG9zaXRvcnlVc2UvY2xzL2phdmEvdXRpbC9BcnJheUxpc3QuY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTZmZDg5ZAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVwb3NpdG9yeVVzZS9jbHMvamF2YS91dGlsL0FycmF5TGlzdC5jbGFzcwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3JlcG9zaXRvcnlVc2UvY2xzL2phdmEvdXRpbC9BcnJheXMuY2xhc3MgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3JlcG9zaXRvcnlVc2UvY2xzL2phdmEvdXRpbC9BcnJheXMuY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzg5YTdhMwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVwb3NpdG9yeVVzZS9jbHMvamF2YS91dGlsL0FycmF5cy5jbGFzcwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3JlcG9zaXRvcnlVc2UvY2xzL2phdmEvdXRpbC9Db2xsZWN0aW9uLmNsYXNzIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXBvc2l0b3J5VXNlL2Nscy9qYXZhL3V0aWwvQ29sbGVjdGlvbi5jbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NzY1NjI0Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXBvc2l0b3J5VXNlL2Nscy9qYXZhL3V0aWwvQ29sbGVjdGlvbi5jbGFzcwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3JlcG9zaXRvcnlVc2UvY2xzL2phdmEvdXRpbC9Db2xsZWN0aW9ucy5jbGFzcyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVwb3NpdG9yeVVzZS9jbHMvamF2YS91dGlsL0NvbGxlY3Rpb25zLmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ2MmIzNTQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3JlcG9zaXRvcnlVc2UvY2xzL2phdmEvdXRpbC9Db2xsZWN0aW9ucy5jbGFzcwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3JlcG9zaXRvcnlVc2UvY2xzL2phdmEvdXRpbC9Db21wYXJhdG9yLmNsYXNzIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXBvc2l0b3J5VXNlL2Nscy9qYXZhL3V0aWwvQ29tcGFyYXRvci5jbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZjAzYjdiCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXBvc2l0b3J5VXNlL2Nscy9qYXZhL3V0aWwvQ29tcGFyYXRvci5jbGFzcwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3JlcG9zaXRvcnlVc2UvY2xzL2phdmEvdXRpbC9EaWN0aW9uYXJ5LmNsYXNzIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXBvc2l0b3J5VXNlL2Nscy9qYXZhL3V0aWwvRGljdGlvbmFyeS5jbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZGVmZDQzZQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVwb3NpdG9yeVVzZS9jbHMvamF2YS91dGlsL0RpY3Rpb25hcnkuY2xhc3MKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXBvc2l0b3J5VXNlL2Nscy9qYXZhL3V0aWwvRW51bWVyYXRpb24uY2xhc3MgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3JlcG9zaXRvcnlVc2UvY2xzL2phdmEvdXRpbC9FbnVtZXJhdGlvbi5jbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jODU0MzhiCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXBvc2l0b3J5VXNlL2Nscy9qYXZhL3V0aWwvRW51bWVyYXRpb24uY2xhc3MKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXBvc2l0b3J5VXNlL2Nscy9qYXZhL3V0aWwvSGFzaE1hcC5jbGFzcyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVwb3NpdG9yeVVzZS9jbHMvamF2YS91dGlsL0hhc2hNYXAuY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWVkN2YzNQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVwb3NpdG9yeVVzZS9jbHMvamF2YS91dGlsL0hhc2hNYXAuY2xhc3MKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXBvc2l0b3J5VXNlL2Nscy9qYXZhL3V0aWwvSGFzaFNldC5jbGFzcyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVwb3NpdG9yeVVzZS9jbHMvamF2YS91dGlsL0hhc2hTZXQuY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjc5YzQ0YgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVwb3NpdG9yeVVzZS9jbHMvamF2YS91dGlsL0hhc2hTZXQuY2xhc3MKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXBvc2l0b3J5VXNlL2Nscy9qYXZhL3V0aWwvSGFzaHRhYmxlLmNsYXNzIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXBvc2l0b3J5VXNlL2Nscy9qYXZhL3V0aWwvSGFzaHRhYmxlLmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIzYWMwMjIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3JlcG9zaXRvcnlVc2UvY2xzL2phdmEvdXRpbC9IYXNodGFibGUuY2xhc3MKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXBvc2l0b3J5VXNlL2Nscy9qYXZhL3V0aWwvSWRlbnRpdHlIYXNoTWFwLmNsYXNzIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXBvc2l0b3J5VXNlL2Nscy9qYXZhL3V0aWwvSWRlbnRpdHlIYXNoTWFwLmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNjM2U0ZDAKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3JlcG9zaXRvcnlVc2UvY2xzL2phdmEvdXRpbC9JZGVudGl0eUhhc2hNYXAuY2xhc3MKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXBvc2l0b3J5VXNlL2Nscy9qYXZhL3V0aWwvSXRlcmF0b3IuY2xhc3MgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3JlcG9zaXRvcnlVc2UvY2xzL2phdmEvdXRpbC9JdGVyYXRvci5jbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYWUwYjk2Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXBvc2l0b3J5VXNlL2Nscy9qYXZhL3V0aWwvSXRlcmF0b3IuY2xhc3MKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXBvc2l0b3J5VXNlL2Nscy9qYXZhL3V0aWwvTGlua2VkSGFzaE1hcC5jbGFzcyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVwb3NpdG9yeVVzZS9jbHMvamF2YS91dGlsL0xpbmtlZEhhc2hNYXAuY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjdkMTdkOAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVwb3NpdG9yeVVzZS9jbHMvamF2YS91dGlsL0xpbmtlZEhhc2hNYXAuY2xhc3MKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXBvc2l0b3J5VXNlL2Nscy9qYXZhL3V0aWwvTGlua2VkSGFzaFNldC5jbGFzcyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVwb3NpdG9yeVVzZS9jbHMvamF2YS91dGlsL0xpbmtlZEhhc2hTZXQuY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmFhYWFmMQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVwb3NpdG9yeVVzZS9jbHMvamF2YS91dGlsL0xpbmtlZEhhc2hTZXQuY2xhc3MKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXBvc2l0b3J5VXNlL2Nscy9qYXZhL3V0aWwvTGlua2VkTGlzdC5jbGFzcyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVwb3NpdG9yeVVzZS9jbHMvamF2YS91dGlsL0xpbmtlZExpc3QuY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzlmMTIzNQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVwb3NpdG9yeVVzZS9jbHMvamF2YS91dGlsL0xpbmtlZExpc3QuY2xhc3MKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXBvc2l0b3J5VXNlL2Nscy9qYXZhL3V0aWwvTGlzdC5jbGFzcyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVwb3NpdG9yeVVzZS9jbHMvamF2YS91dGlsL0xpc3QuY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2E5MmJmNQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVwb3NpdG9yeVVzZS9jbHMvamF2YS91dGlsL0xpc3QuY2xhc3MKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXBvc2l0b3J5VXNlL2Nscy9qYXZhL3V0aWwvTGlzdEl0ZXJhdG9yLmNsYXNzIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXBvc2l0b3J5VXNlL2Nscy9qYXZhL3V0aWwvTGlzdEl0ZXJhdG9yLmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU5MTY4NDIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3JlcG9zaXRvcnlVc2UvY2xzL2phdmEvdXRpbC9MaXN0SXRlcmF0b3IuY2xhc3MKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXBvc2l0b3J5VXNlL2Nscy9qYXZhL3V0aWwvTWFwJEVudHJ5LmNsYXNzIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXBvc2l0b3J5VXNlL2Nscy9qYXZhL3V0aWwvTWFwJEVudHJ5LmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ5MWIzMTAKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3JlcG9zaXRvcnlVc2UvY2xzL2phdmEvdXRpbC9NYXAkRW50cnkuY2xhc3MKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXBvc2l0b3J5VXNlL2Nscy9qYXZhL3V0aWwvTWFwLmNsYXNzIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXBvc2l0b3J5VXNlL2Nscy9qYXZhL3V0aWwvTWFwLmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ5YzJiZmMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3JlcG9zaXRvcnlVc2UvY2xzL2phdmEvdXRpbC9NYXAuY2xhc3MKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXBvc2l0b3J5VXNlL2Nscy9qYXZhL3V0aWwvU2V0LmNsYXNzIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXBvc2l0b3J5VXNlL2Nscy9qYXZhL3V0aWwvU2V0LmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY3YmJiMDQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3JlcG9zaXRvcnlVc2UvY2xzL2phdmEvdXRpbC9TZXQuY2xhc3MKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXBvc2l0b3J5VXNlL2Nscy9qYXZhL3V0aWwvU29ydGVkTWFwLmNsYXNzIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXBvc2l0b3J5VXNlL2Nscy9qYXZhL3V0aWwvU29ydGVkTWFwLmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2NzNjNjgKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3JlcG9zaXRvcnlVc2UvY2xzL2phdmEvdXRpbC9Tb3J0ZWRNYXAuY2xhc3MKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXBvc2l0b3J5VXNlL2Nscy9qYXZhL3V0aWwvU29ydGVkU2V0LmNsYXNzIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXBvc2l0b3J5VXNlL2Nscy9qYXZhL3V0aWwvU29ydGVkU2V0LmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJkZGU0YmMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3JlcG9zaXRvcnlVc2UvY2xzL2phdmEvdXRpbC9Tb3J0ZWRTZXQuY2xhc3MKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXBvc2l0b3J5VXNlL2Nscy9qYXZhL3V0aWwvU3RhY2suY2xhc3MgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3JlcG9zaXRvcnlVc2UvY2xzL2phdmEvdXRpbC9TdGFjay5jbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNmMxZmJlCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXBvc2l0b3J5VXNlL2Nscy9qYXZhL3V0aWwvU3RhY2suY2xhc3MKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXBvc2l0b3J5VXNlL2Nscy9qYXZhL3V0aWwvVHJlZU1hcC5jbGFzcyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVwb3NpdG9yeVVzZS9jbHMvamF2YS91dGlsL1RyZWVNYXAuY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODI2YmViMwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVwb3NpdG9yeVVzZS9jbHMvamF2YS91dGlsL1RyZWVNYXAuY2xhc3MKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXBvc2l0b3J5VXNlL2Nscy9qYXZhL3V0aWwvVHJlZVNldC5jbGFzcyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVwb3NpdG9yeVVzZS9jbHMvamF2YS91dGlsL1RyZWVTZXQuY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjY0ZDg1NQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVwb3NpdG9yeVVzZS9jbHMvamF2YS91dGlsL1RyZWVTZXQuY2xhc3MKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXBvc2l0b3J5VXNlL2Nscy9qYXZhL3V0aWwvVmVjdG9yLmNsYXNzIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXBvc2l0b3J5VXNlL2Nscy9qYXZhL3V0aWwvVmVjdG9yLmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ0MTI4NmYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3JlcG9zaXRvcnlVc2UvY2xzL2phdmEvdXRpbC9WZWN0b3IuY2xhc3MKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXBvc2l0b3J5VXNlL2Nscy9qYXZhL3V0aWwvV2Vha0hhc2hNYXAuY2xhc3MgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3JlcG9zaXRvcnlVc2UvY2xzL2phdmEvdXRpbC9XZWFrSGFzaE1hcC5jbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NTg0NmY4Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXBvc2l0b3J5VXNlL2Nscy9qYXZhL3V0aWwvV2Vha0hhc2hNYXAuY2xhc3MKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXBvc2l0b3J5VXNlL2Nscy9qYXZhL3V0aWwvamFyL0phckZpbGUuY2xhc3MgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3JlcG9zaXRvcnlVc2UvY2xzL2phdmEvdXRpbC9qYXIvSmFyRmlsZS5jbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMzA5ZmNlCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXBvc2l0b3J5VXNlL2Nscy9qYXZhL3V0aWwvamFyL0phckZpbGUuY2xhc3MKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXBvc2l0b3J5VXNlL2Nscy9qYXZhL3V0aWwvbG9nZ2luZy9Mb2dNYW5hZ2VyLmNsYXNzIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXBvc2l0b3J5VXNlL2Nscy9qYXZhL3V0aWwvbG9nZ2luZy9Mb2dNYW5hZ2VyLmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc0OWJjNjIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3JlcG9zaXRvcnlVc2UvY2xzL2phdmEvdXRpbC9sb2dnaW5nL0xvZ01hbmFnZXIuY2xhc3MKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXBvc2l0b3J5VXNlL2Nscy9wYWNrL0Fubm90YXRlZC5jbGFzcyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVwb3NpdG9yeVVzZS9jbHMvcGFjay9Bbm5vdGF0ZWQuY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjIwZWY5NwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVwb3NpdG9yeVVzZS9jbHMvcGFjay9Bbm5vdGF0ZWQuY2xhc3MKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXBvc2l0b3J5VXNlL2Nscy9wYWNrL0Fubm90YXRpb24uY2xhc3MgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3JlcG9zaXRvcnlVc2UvY2xzL3BhY2svQW5ub3RhdGlvbi5jbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YWNiZDlhCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXBvc2l0b3J5VXNlL2Nscy9wYWNrL0Fubm90YXRpb24uY2xhc3MKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXBvc2l0b3J5VXNlL2Nscy9wYWNrL0Fubm90YXRpb24yLmNsYXNzIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXBvc2l0b3J5VXNlL2Nscy9wYWNrL0Fubm90YXRpb24yLmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEyZTIzZDYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3JlcG9zaXRvcnlVc2UvY2xzL3BhY2svQW5ub3RhdGlvbjIuY2xhc3MKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXBvc2l0b3J5VXNlL2Nscy9wYWNrL01vZGlmaWVycy5jbGFzcyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVwb3NpdG9yeVVzZS9jbHMvcGFjay9Nb2RpZmllcnMuY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGVhODc5NAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVwb3NpdG9yeVVzZS9jbHMvcGFjay9Nb2RpZmllcnMuY2xhc3MKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXBvc2l0b3J5VXNlL2Nscy9wYWNrL015Q2xhc3MkSW5uZXIuY2xhc3MgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3JlcG9zaXRvcnlVc2UvY2xzL3BhY2svTXlDbGFzcyRJbm5lci5jbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNzViODdjCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXBvc2l0b3J5VXNlL2Nscy9wYWNrL015Q2xhc3MkSW5uZXIuY2xhc3MKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXBvc2l0b3J5VXNlL2Nscy9wYWNrL015Q2xhc3MuY2xhc3MgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3JlcG9zaXRvcnlVc2UvY2xzL3BhY2svTXlDbGFzcy5jbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOTRmODMzCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXBvc2l0b3J5VXNlL2Nscy9wYWNrL015Q2xhc3MuY2xhc3MKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXBvc2l0b3J5VXNlL2Nscy9wYWNrL015RW51bS5jbGFzcyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVwb3NpdG9yeVVzZS9jbHMvcGFjay9NeUVudW0uY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzIxMTI4OAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVwb3NpdG9yeVVzZS9jbHMvcGFjay9NeUVudW0uY2xhc3MKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXBvc2l0b3J5VXNlL2Nscy9wYWNrL1BhcmFtZXRyaXplZC5jbGFzcyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVwb3NpdG9yeVVzZS9jbHMvcGFjay9QYXJhbWV0cml6ZWQuY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGRmZGVkMAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVwb3NpdG9yeVVzZS9jbHMvcGFjay9QYXJhbWV0cml6ZWQuY2xhc3MKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXBvc2l0b3J5VXNlL2Nscy9wYWNrL1ZhcmlhbmNlLmNsYXNzIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXBvc2l0b3J5VXNlL2Nscy9wYWNrL1ZhcmlhbmNlLmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVkMzY5MzUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3JlcG9zaXRvcnlVc2UvY2xzL3BhY2svVmFyaWFuY2UuY2xhc3MKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXBvc2l0b3J5VXNlL2Nscy9zcmMvcGFjay9Bbm5vdGF0aW9uMi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXBvc2l0b3J5VXNlL2Nscy9zcmMvcGFjay9Bbm5vdGF0aW9uMi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZjYTFkY2IKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3JlcG9zaXRvcnlVc2UvY2xzL3NyYy9wYWNrL0Fubm90YXRpb24yLmphdmEKQEAgLTAsMCArMSwxMSBAQAorcGFja2FnZSBwYWNrOworCitwdWJsaWMgQGludGVyZmFjZSBBbm5vdGF0aW9uMiB7CisgIGZsb2F0IGYxKCkgZGVmYXVsdCBGbG9hdC5ORUdBVElWRV9JTkZJTklUWTsKKyAgZmxvYXQgZjIoKSBkZWZhdWx0IEZsb2F0Lk5hTjsKKyAgZmxvYXQgZjMoKSBkZWZhdWx0IEZsb2F0LlBPU0lUSVZFX0lORklOSVRZOworCisgIGRvdWJsZSBkMSgpIGRlZmF1bHQgRG91YmxlLk5FR0FUSVZFX0lORklOSVRZOworICBkb3VibGUgZDIoKSBkZWZhdWx0IERvdWJsZS5OYU47CisgIGRvdWJsZSBkMygpIGRlZmF1bHQgRG91YmxlLlBPU0lUSVZFX0lORklOSVRZOworfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXBvc2l0b3J5VXNlL2Nscy9zcmMvcGFjay9NeUNsYXNzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3JlcG9zaXRvcnlVc2UvY2xzL3NyYy9wYWNrL015Q2xhc3MuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMTE2NzA0Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXBvc2l0b3J5VXNlL2Nscy9zcmMvcGFjay9NeUNsYXNzLmphdmEKQEAgLTAsMCArMSwyMyBAQAorcGFja2FnZSBwYWNrOworCitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKKworcHVibGljIGNsYXNzIE15Q2xhc3MgZXh0ZW5kcyBBcnJheUxpc3QgaW1wbGVtZW50cyBDbG9uZWFibGV7CisgIC8qKgorICAgKiBAZGVwcmVjYXRlZAorICAgKi8KKyAgc3RhdGljIGZpbmFsIGludCBmaWVsZDEgPSAxMjM7CisKKyAgT2JqZWN0W10gZmllbGQyOworCisgIHZvaWQgbWV0aG9kMShpbnRbXSBwMSwgT2JqZWN0IHAyKSB0aHJvd3MgRXhjZXB0aW9uLCBqYXZhLmlvLklPRXhjZXB0aW9ueworICB9CisKKyAgSW50ZWdlciBtZXRob2QyKClbXXsKKyAgICByZXR1cm4gbnVsbDsKKyAgfQorCisgIE15Q2xhc3MoKXt9CisKKyAgc3RhdGljIGNsYXNzIElubmVye30KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVwb3NpdG9yeVVzZS9jbHMvc3JjL3BhY2svUGFyYW1ldHJpemVkLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3JlcG9zaXRvcnlVc2UvY2xzL3NyYy9wYWNrL1BhcmFtZXRyaXplZC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBhYzAwOWUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3JlcG9zaXRvcnlVc2UvY2xzL3NyYy9wYWNrL1BhcmFtZXRyaXplZC5qYXZhCkBAIC0wLDAgKzEsNyBAQAorcGFja2FnZSBwYWNrOworCisvKioKKyAqIEBhdXRob3IgZHNsCisgKi8KK3B1YmxpYyBjbGFzcyBQYXJhbWV0cml6ZWQ8VD4geworfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXBvc2l0b3J5VXNlL2Nscy9zcmMvcGFjay9WYXJpYW5jZS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXBvc2l0b3J5VXNlL2Nscy9zcmMvcGFjay9WYXJpYW5jZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc2ZWFhZTcKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3JlcG9zaXRvcnlVc2UvY2xzL3NyYy9wYWNrL1ZhcmlhbmNlLmphdmEKQEAgLTAsMCArMSwxMiBAQAorcGFja2FnZSBwYWNrOworCitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKKy8qKgorICogQGF1dGhvciBkc2wKKyAqLworcHVibGljIGNsYXNzIFZhcmlhbmNlPFQ+IHsKKyAgcHVibGljIFBhcmFtZXRyaXplZDw/IGV4dGVuZHMgVD4gbWV0aG9kKCkgeyByZXR1cm4gbnVsbDsgfQorICBwdWJsaWMgPFY+IFBhcmFtZXRyaXplZDw/IGV4dGVuZHMgVj5tZXRob2RXaXRoVHlwZVBhcmFtZXRlcigpIHsgcmV0dXJuIG51bGw7IH07CisgIHB1YmxpYyB2b2lkIHJlbW92ZUFsbChWYXJpYW5jZTw/PiBwYXJhbWV0ZXIpIHt9IDsgCit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3JlcG9zaXRvcnlVc2UvY2xzL3N1bi9yZWZsZWN0L0xhbmdSZWZsZWN0QWNjZXNzLmNsYXNzIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXBvc2l0b3J5VXNlL2Nscy9zdW4vcmVmbGVjdC9MYW5nUmVmbGVjdEFjY2Vzcy5jbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNzJlYTVjCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXBvc2l0b3J5VXNlL2Nscy9zdW4vcmVmbGVjdC9MYW5nUmVmbGVjdEFjY2Vzcy5jbGFzcwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3JlcG9zaXRvcnlVc2UvY2xzL3N1bi9zZWN1cml0eS91dGlsL1NlY3VyaXR5Q29uc3RhbnRzLmNsYXNzIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXBvc2l0b3J5VXNlL2Nscy9zdW4vc2VjdXJpdHkvdXRpbC9TZWN1cml0eUNvbnN0YW50cy5jbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZGVkODdmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXBvc2l0b3J5VXNlL2Nscy9zdW4vc2VjdXJpdHkvdXRpbC9TZWN1cml0eUNvbnN0YW50cy5jbGFzcwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3JlcG9zaXRvcnlVc2UvaW5uZXJDbGFzc2VzU2Nhbm5lci9DbGFzc1dpdGhHZW5lcmljUGFyYW1ldGVycy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXBvc2l0b3J5VXNlL2lubmVyQ2xhc3Nlc1NjYW5uZXIvQ2xhc3NXaXRoR2VuZXJpY1BhcmFtZXRlcnMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wN2EzZGExCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXBvc2l0b3J5VXNlL2lubmVyQ2xhc3Nlc1NjYW5uZXIvQ2xhc3NXaXRoR2VuZXJpY1BhcmFtZXRlcnMuamF2YQpAQCAtMCwwICsxLDYgQEAKK2NsYXNzIFggeworICBwdWJsaWMgdm9pZCBtZXRob2QoKSB7CisgICAgT2JqZWN0IG8gPSBuZXcgQ29tcHV0YWJsZTxTdHJpbmdbXT4oKSB7CisgICAgfQorICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3JlcG9zaXRvcnlVc2UvaW5uZXJDbGFzc2VzU2Nhbm5lci9OZXdJbnNpZGVOZXcuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVwb3NpdG9yeVVzZS9pbm5lckNsYXNzZXNTY2FubmVyL05ld0luc2lkZU5ldy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcyNmIyMzM2Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXBvc2l0b3J5VXNlL2lubmVyQ2xhc3Nlc1NjYW5uZXIvTmV3SW5zaWRlTmV3LmphdmEKQEAgLTAsMCArMSw2IEBACitjbGFzcyBYIHsKKyAgcHVibGljIHZvaWQgbWV0aG9kKCkgeworICAgIE9iamVjdCBvID0gbmV3IENvbXB1dGFibGUobmV3IExpc3Q8U3RyaW5nPigpKSB7CisgICAgfQorICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3JlcG9zaXRvcnlVc2UvbW9kaWZ5QW5ub3RhdGlvbnMvVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXBvc2l0b3J5VXNlL21vZGlmeUFubm90YXRpb25zL1Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MGMyYjE3Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXBvc2l0b3J5VXNlL21vZGlmeUFubm90YXRpb25zL1Rlc3QuamF2YQpAQCAtMCwwICsxIEBACitAQSBjbGFzcyBUZXN0IHt9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXBvc2l0b3J5VXNlL3NjcjE3MDk0L2NsYXNzZXMvYS9hL2EvYS9lL2YvaS5jbGFzcyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVwb3NpdG9yeVVzZS9zY3IxNzA5NC9jbGFzc2VzL2EvYS9hL2EvZS9mL2kuY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2I2NGViOAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVwb3NpdG9yeVVzZS9zY3IxNzA5NC9jbGFzc2VzL2EvYS9hL2EvZS9mL2kuY2xhc3MKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXBvc2l0b3J5VXNlL3NjcjE3MDk0L2NsYXNzZXMxL2NvbS9pbnRlbGxpai91dGlsL2QvYncuY2xhc3MgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3JlcG9zaXRvcnlVc2Uvc2NyMTcwOTQvY2xhc3NlczEvY29tL2ludGVsbGlqL3V0aWwvZC9idy5jbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NmI4MjM4Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXBvc2l0b3J5VXNlL3NjcjE3MDk0L2NsYXNzZXMxL2NvbS9pbnRlbGxpai91dGlsL2QvYncuY2xhc3MKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXBvc2l0b3J5VXNlL3NjcjE3MDk0L2NsYXNzZXMyL2NvbS9pbnRlbGxpai9pbnRlcm5hbC9hL2IvYS9pLmNsYXNzIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXBvc2l0b3J5VXNlL3NjcjE3MDk0L2NsYXNzZXMyL2NvbS9pbnRlbGxpai9pbnRlcm5hbC9hL2IvYS9pLmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI2YmY0MzMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3JlcG9zaXRvcnlVc2Uvc2NyMTcwOTQvY2xhc3NlczIvY29tL2ludGVsbGlqL2ludGVybmFsL2EvYi9hL2kuY2xhc3MKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXBvc2l0b3J5VXNlL3NyYy9NeUNsYXNzMS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXBvc2l0b3J5VXNlL3NyYy9NeUNsYXNzMS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlkOTZhNDUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3JlcG9zaXRvcnlVc2Uvc3JjL015Q2xhc3MxLmphdmEKQEAgLTAsMCArMSwyMSBAQAoraW1wb3J0IGEgLiBiOworaW1wb3J0IGMuKjsKK2ltcG9ydAorCitjbGFzcyBNeUNsYXNzMXsKKyAgeworICAgIGNsYXNzIExvY2FseworICAgICAgcHVibGljIHZvaWQgZm9vKCl7CisgICAgICAgIG5ldyBSdW5uYWJsZShydW5Mb2dOYW1lLCBnb2xkZW5SdW5Mb2dOYW1lLCB0aGlzKXsKKyAgICAgICAgICBwdWJsaWMgdm9pZCBydW4oKXsKKyAgICAgICAgICAgIG5ldyBUaHJvd2FibGUoKXsKKyAgICAgICAgICAgIH07CisgICAgICAgICAgfS5ydW4oKTsKKyAgICAgICAgfQorICAgICAgfQorICAgIH07CisgIH0KK30KKworY2xhc3MgQ2xhc3MyPEEgZXh0ZW5kcyBTdHJpbmcsIEI+eworfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXBvc2l0b3J5VXNlL3NyYy9TdHJlc3NDbGFzcy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXBvc2l0b3J5VXNlL3NyYy9TdHJlc3NDbGFzcy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhjMTEzMGYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3JlcG9zaXRvcnlVc2Uvc3JjL1N0cmVzc0NsYXNzLmphdmEKQEAgLTAsMCArMSwyNzg5IEBACisvKgorICogQCgjKVN0cmluZy5qYXZhCTEuMTg5IDA1LzEwLzIxCisgKgorICogQ29weXJpZ2h0IDIwMDQgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogU1VOIFBST1BSSUVUQVJZL0NPTkZJREVOVElBTC4gVXNlIGlzIHN1YmplY3QgdG8gbGljZW5zZSB0ZXJtcy4KKyAqLworCitpbXBvcnQgamF2YS5pby5PYmplY3RTdHJlYW1DbGFzczsKK2ltcG9ydCBqYXZhLmlvLk9iamVjdFN0cmVhbUZpZWxkOworaW1wb3J0IGphdmEuaW8uVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworaW1wb3J0IGphdmEudXRpbC5Db21wYXJhdG9yOworaW1wb3J0IGphdmEudXRpbC5Gb3JtYXR0ZXI7CitpbXBvcnQgamF2YS51dGlsLkxvY2FsZTsKK2ltcG9ydCBqYXZhLnV0aWwucmVnZXguTWF0Y2hlcjsKK2ltcG9ydCBqYXZhLnV0aWwucmVnZXguUGF0dGVybjsKK2ltcG9ydCBqYXZhLnV0aWwucmVnZXguUGF0dGVyblN5bnRheEV4Y2VwdGlvbjsKKworCisvKioKKyAqIFRoZSA8Y29kZT5TdHJpbmc8L2NvZGU+IGNsYXNzIHJlcHJlc2VudHMgY2hhcmFjdGVyIHN0cmluZ3MuIEFsbAorICogc3RyaW5nIGxpdGVyYWxzIGluIEphdmEgcHJvZ3JhbXMsIHN1Y2ggYXMgPGNvZGU+ImFiYyI8L2NvZGU+LCBhcmUKKyAqIGltcGxlbWVudGVkIGFzIGluc3RhbmNlcyBvZiB0aGlzIGNsYXNzLgorICogPHA+CisgKiBTdHJpbmdzIGFyZSBjb25zdGFudDsgdGhlaXIgdmFsdWVzIGNhbm5vdCBiZSBjaGFuZ2VkIGFmdGVyIHRoZXkKKyAqIGFyZSBjcmVhdGVkLiBTdHJpbmcgYnVmZmVycyBzdXBwb3J0IG11dGFibGUgc3RyaW5ncy4KKyAqIEJlY2F1c2UgU3RyaW5nIG9iamVjdHMgYXJlIGltbXV0YWJsZSB0aGV5IGNhbiBiZSBzaGFyZWQuIEZvciBleGFtcGxlOgorICogPHA+PGJsb2NrcXVvdGU+PHByZT4KKyAqICAgICBTdHJpbmcgc3RyID0gImFiYyI7CisgKiA8L3ByZT48L2Jsb2NrcXVvdGU+PHA+CisgKiBpcyBlcXVpdmFsZW50IHRvOgorICogPHA+PGJsb2NrcXVvdGU+PHByZT4KKyAqICAgICBjaGFyIGRhdGFbXSA9IHsnYScsICdiJywgJ2MnfTsKKyAqICAgICBTdHJpbmcgc3RyID0gbmV3IFN0cmluZyhkYXRhKTsKKyAqIDwvcHJlPjwvYmxvY2txdW90ZT48cD4KKyAqIEhlcmUgYXJlIHNvbWUgbW9yZSBleGFtcGxlcyBvZiBob3cgc3RyaW5ncyBjYW4gYmUgdXNlZDoKKyAqIDxwPjxibG9ja3F1b3RlPjxwcmU+CisgKiAgICAgU3lzdGVtLm91dC5wcmludGxuKCJhYmMiKTsKKyAqICAgICBTdHJpbmcgY2RlID0gImNkZSI7CisgKiAgICAgU3lzdGVtLm91dC5wcmludGxuKCJhYmMiICsgY2RlKTsKKyAqICAgICBTdHJpbmcgYyA9ICJhYmMiLnN1YnN0cmluZygyLDMpOworICogICAgIFN0cmluZyBkID0gY2RlLnN1YnN0cmluZygxLCAyKTsKKyAqIDwvcHJlPjwvYmxvY2txdW90ZT4KKyAqIDxwPgorICogVGhlIGNsYXNzIDxjb2RlPlN0cmluZzwvY29kZT4gaW5jbHVkZXMgbWV0aG9kcyBmb3IgZXhhbWluaW5nCisgKiBpbmRpdmlkdWFsIGNoYXJhY3RlcnMgb2YgdGhlIHNlcXVlbmNlLCBmb3IgY29tcGFyaW5nIHN0cmluZ3MsIGZvcgorICogc2VhcmNoaW5nIHN0cmluZ3MsIGZvciBleHRyYWN0aW5nIHN1YnN0cmluZ3MsIGFuZCBmb3IgY3JlYXRpbmcgYQorICogY29weSBvZiBhIHN0cmluZyB3aXRoIGFsbCBjaGFyYWN0ZXJzIHRyYW5zbGF0ZWQgdG8gdXBwZXJjYXNlIG9yIHRvCisgKiBsb3dlcmNhc2UuIENhc2UgbWFwcGluZyBpcyBiYXNlZCBvbiB0aGUgVW5pY29kZSBTdGFuZGFyZCB2ZXJzaW9uCisgKiBzcGVjaWZpZWQgYnkgdGhlIHtAbGluayBqYXZhLmxhbmcuQ2hhcmFjdGVyIENoYXJhY3Rlcn0gY2xhc3MuCisgKiA8cD4KKyAqIFRoZSBKYXZhIGxhbmd1YWdlIHByb3ZpZGVzIHNwZWNpYWwgc3VwcG9ydCBmb3IgdGhlIHN0cmluZworICogY29uY2F0ZW5hdGlvbiBvcGVyYXRvciAoJm5ic3A7KyZuYnNwOyksIGFuZCBmb3IgY29udmVyc2lvbiBvZgorICogb3RoZXIgb2JqZWN0cyB0byBzdHJpbmdzLiBTdHJpbmcgY29uY2F0ZW5hdGlvbiBpcyBpbXBsZW1lbnRlZAorICogdGhyb3VnaCB0aGUgPGNvZGU+U3RyaW5nQnVpbGRlcjwvY29kZT4ob3IgPGNvZGU+U3RyaW5nQnVmZmVyPC9jb2RlPikKKyAqIGNsYXNzIGFuZCBpdHMgPGNvZGU+YXBwZW5kPC9jb2RlPiBtZXRob2QuCisgKiBTdHJpbmcgY29udmVyc2lvbnMgYXJlIGltcGxlbWVudGVkIHRocm91Z2ggdGhlIG1ldGhvZAorICogPGNvZGU+dG9TdHJpbmc8L2NvZGU+LCBkZWZpbmVkIGJ5IDxjb2RlPk9iamVjdDwvY29kZT4gYW5kCisgKiBpbmhlcml0ZWQgYnkgYWxsIGNsYXNzZXMgaW4gSmF2YS4gRm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gb24KKyAqIHN0cmluZyBjb25jYXRlbmF0aW9uIGFuZCBjb252ZXJzaW9uLCBzZWUgR29zbGluZywgSm95LCBhbmQgU3RlZWxlLAorICogPGk+VGhlIEphdmEgTGFuZ3VhZ2UgU3BlY2lmaWNhdGlvbjwvaT4uCisgKgorICogPHA+IFVubGVzcyBvdGhlcndpc2Ugbm90ZWQsIHBhc3NpbmcgYSA8dHQ+bnVsbDwvdHQ+IGFyZ3VtZW50IHRvIGEgY29uc3RydWN0b3IKKyAqIG9yIG1ldGhvZCBpbiB0aGlzIGNsYXNzIHdpbGwgY2F1c2UgYSB7QGxpbmsgTnVsbFBvaW50ZXJFeGNlcHRpb259IHRvIGJlCisgKiB0aHJvd24uCisgKgorICogPHA+QSA8Y29kZT5TdHJpbmc8L2NvZGU+IHJlcHJlc2VudHMgYSBzdHJpbmcgaW4gdGhlIFVURi0xNiBmb3JtYXQKKyAqIGluIHdoaWNoIDxlbT5zdXBwbGVtZW50YXJ5IGNoYXJhY3RlcnM8L2VtPiBhcmUgcmVwcmVzZW50ZWQgYnkgPGVtPnN1cnJvZ2F0ZQorICogcGFpcnM8L2VtPiAoc2VlIHRoZSBzZWN0aW9uIDxhIGhyZWY9IkNoYXJhY3Rlci5odG1sI3VuaWNvZGUiPlVuaWNvZGUKKyAqIENoYXJhY3RlciBSZXByZXNlbnRhdGlvbnM8L2E+IGluIHRoZSA8Y29kZT5DaGFyYWN0ZXI8L2NvZGU+IGNsYXNzIGZvcgorICogbW9yZSBpbmZvcm1hdGlvbikuCisgKiBJbmRleCB2YWx1ZXMgcmVmZXIgdG8gPGNvZGU+Y2hhcjwvY29kZT4gY29kZSB1bml0cywgc28gYSBzdXBwbGVtZW50YXJ5CisgKiBjaGFyYWN0ZXIgdXNlcyB0d28gcG9zaXRpb25zIGluIGEgPGNvZGU+U3RyaW5nPC9jb2RlPi4KKyAqIDxwPlRoZSA8Y29kZT5TdHJpbmc8L2NvZGU+IGNsYXNzIHByb3ZpZGVzIG1ldGhvZHMgZm9yIGRlYWxpbmcgd2l0aAorICogVW5pY29kZSBjb2RlIHBvaW50cyAoaS5lLiwgY2hhcmFjdGVycyksIGluIGFkZGl0aW9uIHRvIHRob3NlIGZvcgorICogZGVhbGluZyB3aXRoIFVuaWNvZGUgY29kZSB1bml0cyAoaS5lLiwgPGNvZGU+Y2hhcjwvY29kZT4gdmFsdWVzKS4KKyAqCisgKiBAYXV0aG9yICBMZWUgQm95bnRvbgorICogQGF1dGhvciAgQXJ0aHVyIHZhbiBIb2ZmCisgKiBAdmVyc2lvbiAxLjE4OSwgMTAvMjEvMDUKKyAqIEBzZWUgICAgIGphdmEubGFuZy5PYmplY3QjdG9TdHJpbmcoKQorICogQHNlZSAgICAgamF2YS5sYW5nLlN0cmluZ0J1ZmZlcgorICogQHNlZSAgICAgamF2YS5sYW5nLlN0cmluZ0J1aWxkZXIKKyAqIEBzZWUgICAgIGphdmEubmlvLmNoYXJzZXQuQ2hhcnNldAorICogQHNpbmNlICAgSkRLMS4wCisgKi8KKworcHVibGljIGZpbmFsIGNsYXNzIFN0cmVzc0NsYXNzCisgICAgaW1wbGVtZW50cyBqYXZhLmlvLlNlcmlhbGl6YWJsZSwgQ29tcGFyYWJsZTxTdHJpbmc+LCBDaGFyU2VxdWVuY2UKK3sKKyAgICAvKiogVGhlIHZhbHVlIGlzIHVzZWQgZm9yIGNoYXJhY3RlciBzdG9yYWdlLiAqLworICAgIHByaXZhdGUgZmluYWwgY2hhciB2YWx1ZVtdOworCisgICAgLyoqIFRoZSBvZmZzZXQgaXMgdGhlIGZpcnN0IGluZGV4IG9mIHRoZSBzdG9yYWdlIHRoYXQgaXMgdXNlZC4gKi8KKyAgICBwcml2YXRlIGZpbmFsIGludCBvZmZzZXQ7CisKKyAgICAvKiogVGhlIGNvdW50IGlzIHRoZSBudW1iZXIgb2YgY2hhcmFjdGVycyBpbiB0aGUgU3RyaW5nLiAqLworICAgIHByaXZhdGUgZmluYWwgaW50IGNvdW50OworCisgICAgLyoqIENhY2hlIHRoZSBoYXNoIGNvZGUgZm9yIHRoZSBzdHJpbmcgKi8KKyAgICBwcml2YXRlIGludCBoYXNoOyAvLyBEZWZhdWx0IHRvIDAKKworICAgIC8qKiB1c2Ugc2VyaWFsVmVyc2lvblVJRCBmcm9tIEpESyAxLjAuMiBmb3IgaW50ZXJvcGVyYWJpbGl0eSAqLworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGxvbmcgc2VyaWFsVmVyc2lvblVJRCA9IC02ODQ5Nzk0NDcwNzU0NjY3NzEwTDsKKworICAgIC8qKgorICAgICAqIENsYXNzIFN0cmluZyBpcyBzcGVjaWFsIGNhc2VkIHdpdGhpbiB0aGUgU2VyaWFsaXphdGlvbiBTdHJlYW0gUHJvdG9jb2wuCisgICAgICoKKyAgICAgKiBBIFN0cmluZyBpbnN0YW5jZSBpcyB3cml0dGVuIGluaXRpYWxseSBpbnRvIGFuIE9iamVjdE91dHB1dFN0cmVhbSBpbiB0aGUKKyAgICAgKiBmb2xsb3dpbmcgZm9ybWF0OgorICAgICAqIDxwcmU+CisgICAgICogICAgICA8Y29kZT5UQ19TVFJJTkc8L2NvZGU+ICh1dGYgU3RyaW5nKQorICAgICAqIDwvcHJlPgorICAgICAqIFRoZSBTdHJpbmcgaXMgd3JpdHRlbiBieSBtZXRob2QgPGNvZGU+RGF0YU91dHB1dC53cml0ZVVURjwvY29kZT4uCisgICAgICogQSBuZXcgaGFuZGxlIGlzIGdlbmVyYXRlZCB0byAgcmVmZXIgdG8gYWxsIGZ1dHVyZSByZWZlcmVuY2VzIHRvIHRoZQorICAgICAqIHN0cmluZyBpbnN0YW5jZSB3aXRoaW4gdGhlIHN0cmVhbS4KKyAgICAgKi8KKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBPYmplY3RTdHJlYW1GaWVsZFtdIHNlcmlhbFBlcnNpc3RlbnRGaWVsZHMgPQorICAgICAgICBuZXcgT2JqZWN0U3RyZWFtRmllbGRbMF07CisKKyAgICAvKioKKyAgICAgKiBJbml0aWFsaXplcyBhIG5ld2x5IGNyZWF0ZWQgPGNvZGU+U3RyaW5nPC9jb2RlPiBvYmplY3Qgc28gdGhhdCBpdAorICAgICAqIHJlcHJlc2VudHMgYW4gZW1wdHkgY2hhcmFjdGVyIHNlcXVlbmNlLiAgTm90ZSB0aGF0IHVzZSBvZiB0aGlzCisgICAgICogY29uc3RydWN0b3IgaXMgdW5uZWNlc3Nhcnkgc2luY2UgU3RyaW5ncyBhcmUgaW1tdXRhYmxlLgorICAgICAqLworICAgIHB1YmxpYyBTdHJpbmcoKSB7CisJdGhpcy5vZmZzZXQgPSAwOworCXRoaXMuY291bnQgPSAwOworCXRoaXMudmFsdWUgPSBuZXcgY2hhclswXTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBJbml0aWFsaXplcyBhIG5ld2x5IGNyZWF0ZWQgPGNvZGU+U3RyaW5nPC9jb2RlPiBvYmplY3Qgc28gdGhhdCBpdAorICAgICAqIHJlcHJlc2VudHMgdGhlIHNhbWUgc2VxdWVuY2Ugb2YgY2hhcmFjdGVycyBhcyB0aGUgYXJndW1lbnQ7IGluIG90aGVyCisgICAgICogd29yZHMsIHRoZSBuZXdseSBjcmVhdGVkIHN0cmluZyBpcyBhIGNvcHkgb2YgdGhlIGFyZ3VtZW50IHN0cmluZy4gVW5sZXNzCisgICAgICogYW4gZXhwbGljaXQgY29weSBvZiA8Y29kZT5vcmlnaW5hbDwvY29kZT4gaXMgbmVlZGVkLCB1c2Ugb2YgdGhpcworICAgICAqIGNvbnN0cnVjdG9yIGlzIHVubmVjZXNzYXJ5IHNpbmNlIFN0cmluZ3MgYXJlIGltbXV0YWJsZS4KKyAgICAgKgorICAgICAqIEBwYXJhbSAgIG9yaWdpbmFsICAgYSA8Y29kZT5TdHJpbmc8L2NvZGU+LgorICAgICAqLworICAgIHB1YmxpYyBTdHJpbmcoU3RyaW5nIG9yaWdpbmFsKSB7CisJaW50IHNpemUgPSBvcmlnaW5hbC5jb3VudDsKKwljaGFyW10gb3JpZ2luYWxWYWx1ZSA9IG9yaWdpbmFsLnZhbHVlOworCWNoYXJbXSB2OworICAJaWYgKG9yaWdpbmFsVmFsdWUubGVuZ3RoID4gc2l6ZSkgeworIAkgICAgLy8gVGhlIGFycmF5IHJlcHJlc2VudGluZyB0aGUgU3RyaW5nIGlzIGJpZ2dlciB0aGFuIHRoZSBuZXcKKyAJICAgIC8vIFN0cmluZyBpdHNlbGYuICBQZXJoYXBzIHRoaXMgY29uc3RydWN0b3IgaXMgYmVpbmcgY2FsbGVkCisgCSAgICAvLyBpbiBvcmRlciB0byB0cmltIHRoZSBiYWdnYWdlLCBzbyBtYWtlIGEgY29weSBvZiB0aGUgYXJyYXkuCisJICAgIHYgPSBuZXcgY2hhcltzaXplXTsKKyAJICAgIFN5c3RlbS5hcnJheWNvcHkob3JpZ2luYWxWYWx1ZSwgb3JpZ2luYWwub2Zmc2V0LCB2LCAwLCBzaXplKTsKKyAJfSBlbHNlIHsKKyAJICAgIC8vIFRoZSBhcnJheSByZXByZXNlbnRpbmcgdGhlIFN0cmluZyBpcyB0aGUgc2FtZQorIAkgICAgLy8gc2l6ZSBhcyB0aGUgU3RyaW5nLCBzbyBubyBwb2ludCBpbiBtYWtpbmcgYSBjb3B5LgorCSAgICB2ID0gb3JpZ2luYWxWYWx1ZTsKKyAJfQorCXRoaXMub2Zmc2V0ID0gMDsKKwl0aGlzLmNvdW50ID0gc2l6ZTsKKwl0aGlzLnZhbHVlID0gdjsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBBbGxvY2F0ZXMgYSBuZXcgPGNvZGU+U3RyaW5nPC9jb2RlPiBzbyB0aGF0IGl0IHJlcHJlc2VudHMgdGhlCisgICAgICogc2VxdWVuY2Ugb2YgY2hhcmFjdGVycyBjdXJyZW50bHkgY29udGFpbmVkIGluIHRoZSBjaGFyYWN0ZXIgYXJyYXkKKyAgICAgKiBhcmd1bWVudC4gVGhlIGNvbnRlbnRzIG9mIHRoZSBjaGFyYWN0ZXIgYXJyYXkgYXJlIGNvcGllZDsgc3Vic2VxdWVudAorICAgICAqIG1vZGlmaWNhdGlvbiBvZiB0aGUgY2hhcmFjdGVyIGFycmF5IGRvZXMgbm90IGFmZmVjdCB0aGUgbmV3bHkgY3JlYXRlZAorICAgICAqIHN0cmluZy4KKyAgICAgKgorICAgICAqIEBwYXJhbSAgdmFsdWUgICB0aGUgaW5pdGlhbCB2YWx1ZSBvZiB0aGUgc3RyaW5nLgorICAgICAqLworICAgIHB1YmxpYyBTdHJpbmcoY2hhciB2YWx1ZVtdKSB7CisJaW50IHNpemUgPSB2YWx1ZS5sZW5ndGg7CisJY2hhcltdIHYgPSBuZXcgY2hhcltzaXplXTsKKwlTeXN0ZW0uYXJyYXljb3B5KHZhbHVlLCAwLCB2LCAwLCBzaXplKTsKKwl0aGlzLm9mZnNldCA9IDA7CisJdGhpcy5jb3VudCA9IHNpemU7CisJdGhpcy52YWx1ZSA9IHY7CisgICAgfQorCisgICAgLyoqCisgICAgICogQWxsb2NhdGVzIGEgbmV3IDxjb2RlPlN0cmluZzwvY29kZT4gdGhhdCBjb250YWlucyBjaGFyYWN0ZXJzIGZyb20KKyAgICAgKiBhIHN1YmFycmF5IG9mIHRoZSBjaGFyYWN0ZXIgYXJyYXkgYXJndW1lbnQuIFRoZSA8Y29kZT5vZmZzZXQ8L2NvZGU+CisgICAgICogYXJndW1lbnQgaXMgdGhlIGluZGV4IG9mIHRoZSBmaXJzdCBjaGFyYWN0ZXIgb2YgdGhlIHN1YmFycmF5IGFuZAorICAgICAqIHRoZSA8Y29kZT5jb3VudDwvY29kZT4gYXJndW1lbnQgc3BlY2lmaWVzIHRoZSBsZW5ndGggb2YgdGhlCisgICAgICogc3ViYXJyYXkuIFRoZSBjb250ZW50cyBvZiB0aGUgc3ViYXJyYXkgYXJlIGNvcGllZDsgc3Vic2VxdWVudAorICAgICAqIG1vZGlmaWNhdGlvbiBvZiB0aGUgY2hhcmFjdGVyIGFycmF5IGRvZXMgbm90IGFmZmVjdCB0aGUgbmV3bHkKKyAgICAgKiBjcmVhdGVkIHN0cmluZy4KKyAgICAgKgorICAgICAqIEBwYXJhbSAgICAgIHZhbHVlICAgIGFycmF5IHRoYXQgaXMgdGhlIHNvdXJjZSBvZiBjaGFyYWN0ZXJzLgorICAgICAqIEBwYXJhbSAgICAgIG9mZnNldCAgIHRoZSBpbml0aWFsIG9mZnNldC4KKyAgICAgKiBAcGFyYW0gICAgICBjb3VudCAgICB0aGUgbGVuZ3RoLgorICAgICAqIEBleGNlcHRpb24gIEluZGV4T3V0T2ZCb3VuZHNFeGNlcHRpb24gIGlmIHRoZSA8Y29kZT5vZmZzZXQ8L2NvZGU+CisgICAgICogICAgICAgICAgICAgICBhbmQgPGNvZGU+Y291bnQ8L2NvZGU+IGFyZ3VtZW50cyBpbmRleCBjaGFyYWN0ZXJzIG91dHNpZGUKKyAgICAgKiAgICAgICAgICAgICAgIHRoZSBib3VuZHMgb2YgdGhlIDxjb2RlPnZhbHVlPC9jb2RlPiBhcnJheS4KKyAgICAgKi8KKyAgICBwdWJsaWMgU3RyaW5nKGNoYXIgdmFsdWVbXSwgaW50IG9mZnNldCwgaW50IGNvdW50KSB7CisgICAgICAgIGlmIChvZmZzZXQgPCAwKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgU3RyaW5nSW5kZXhPdXRPZkJvdW5kc0V4Y2VwdGlvbihvZmZzZXQpOworICAgICAgICB9CisgICAgICAgIGlmIChjb3VudCA8IDApIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBTdHJpbmdJbmRleE91dE9mQm91bmRzRXhjZXB0aW9uKGNvdW50KTsKKyAgICAgICAgfQorICAgICAgICAvLyBOb3RlOiBvZmZzZXQgb3IgY291bnQgbWlnaHQgYmUgbmVhciAtMT4+PjEuCisgICAgICAgIGlmIChvZmZzZXQgPiB2YWx1ZS5sZW5ndGggLSBjb3VudCkgeworICAgICAgICAgICAgdGhyb3cgbmV3IFN0cmluZ0luZGV4T3V0T2ZCb3VuZHNFeGNlcHRpb24ob2Zmc2V0ICsgY291bnQpOworICAgICAgICB9CisgICAgICAgIGNoYXJbXSB2ID0gbmV3IGNoYXJbY291bnRdOworICAgICAgICBTeXN0ZW0uYXJyYXljb3B5KHZhbHVlLCBvZmZzZXQsIHYsIDAsIGNvdW50KTsKKyAgICAgICAgdGhpcy5vZmZzZXQgPSAwOworICAgICAgICB0aGlzLmNvdW50ID0gY291bnQ7CisgICAgICAgIHRoaXMudmFsdWUgPSB2OworICAgIH0KKworICAgIC8qKgorICAgICAqIEFsbG9jYXRlcyBhIG5ldyA8Y29kZT5TdHJpbmc8L2NvZGU+IHRoYXQgY29udGFpbnMgY2hhcmFjdGVycworICAgICAqIGZyb20gYSBzdWJhcnJheSBvZiB0aGUgVW5pY29kZSBjb2RlIHBvaW50IGFycmF5IGFyZ3VtZW50LiBUaGUKKyAgICAgKiA8Y29kZT5vZmZzZXQ8L2NvZGU+IGFyZ3VtZW50IGlzIHRoZSBpbmRleCBvZiB0aGUgZmlyc3QgY29kZQorICAgICAqIHBvaW50IG9mIHRoZSBzdWJhcnJheSBhbmQgdGhlIDxjb2RlPmNvdW50PC9jb2RlPiBhcmd1bWVudAorICAgICAqIHNwZWNpZmllcyB0aGUgbGVuZ3RoIG9mIHRoZSBzdWJhcnJheS4gVGhlIGNvbnRlbnRzIG9mIHRoZQorICAgICAqIHN1YmFycmF5IGFyZSBjb252ZXJ0ZWQgdG8gPGNvZGU+Y2hhcjwvY29kZT5zOyBzdWJzZXF1ZW50CisgICAgICogbW9kaWZpY2F0aW9uIG9mIHRoZSA8Y29kZT5pbnQ8L2NvZGU+IGFycmF5IGRvZXMgbm90IGFmZmVjdCB0aGUKKyAgICAgKiBuZXdseSBjcmVhdGVkIHN0cmluZy4KKyAgICAgKgorICAgICAqIEBwYXJhbSBjb2RlUG9pbnRzIGFycmF5IHRoYXQgaXMgdGhlIHNvdXJjZSBvZiBVbmljb2RlIGNvZGUgcG9pbnRzLgorICAgICAqIEBwYXJhbSBvZmZzZXQgICAgIHRoZSBpbml0aWFsIG9mZnNldC4KKyAgICAgKiBAcGFyYW0gY291bnQgICAgICB0aGUgbGVuZ3RoLgorICAgICAqIEBleGNlcHRpb24gSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIGlmIGFueSBpbnZhbGlkIFVuaWNvZGUgY29kZSBwb2ludAorICAgICAqIGlzIGZvdW5kIGluIDxjb2RlPmNvZGVQb2ludHM8L2NvZGU+CisgICAgICogQGV4Y2VwdGlvbiAgSW5kZXhPdXRPZkJvdW5kc0V4Y2VwdGlvbiAgaWYgdGhlIDxjb2RlPm9mZnNldDwvY29kZT4KKyAgICAgKiAgICAgICAgICAgICAgIGFuZCA8Y29kZT5jb3VudDwvY29kZT4gYXJndW1lbnRzIGluZGV4IGNoYXJhY3RlcnMgb3V0c2lkZQorICAgICAqICAgICAgICAgICAgICAgdGhlIGJvdW5kcyBvZiB0aGUgPGNvZGU+Y29kZVBvaW50czwvY29kZT4gYXJyYXkuCisgICAgICogQHNpbmNlIDEuNQorICAgICAqLworICAgIHB1YmxpYyBTdHJpbmcoaW50W10gY29kZVBvaW50cywgaW50IG9mZnNldCwgaW50IGNvdW50KSB7CisgICAgICAgIGlmIChvZmZzZXQgPCAwKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgU3RyaW5nSW5kZXhPdXRPZkJvdW5kc0V4Y2VwdGlvbihvZmZzZXQpOworICAgICAgICB9CisgICAgICAgIGlmIChjb3VudCA8IDApIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBTdHJpbmdJbmRleE91dE9mQm91bmRzRXhjZXB0aW9uKGNvdW50KTsKKyAgICAgICAgfQorICAgICAgICAvLyBOb3RlOiBvZmZzZXQgb3IgY291bnQgbWlnaHQgYmUgbmVhciAtMT4+PjEuCisgICAgICAgIGlmIChvZmZzZXQgPiBjb2RlUG9pbnRzLmxlbmd0aCAtIGNvdW50KSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgU3RyaW5nSW5kZXhPdXRPZkJvdW5kc0V4Y2VwdGlvbihvZmZzZXQgKyBjb3VudCk7CisgICAgICAgIH0KKworCWludCBleHBhbnNpb24gPSAwOworCWludCBtYXJnaW4gPSAxOworCWNoYXJbXSB2ID0gbmV3IGNoYXJbY291bnQgKyBtYXJnaW5dOworCWludCB4ID0gb2Zmc2V0OworCWludCBqID0gMDsKKwlmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKKwkgICAgaW50IGMgPSBjb2RlUG9pbnRzW3grK107CisJICAgIGlmIChjIDwgMCkgeworCQl0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCk7CisJICAgIH0KKwkgICAgaWYgKG1hcmdpbiA8PSAwICYmIChqKzEpID49IHYubGVuZ3RoKSB7CisJCWlmIChleHBhbnNpb24gPT0gMCkgeworCQkgICAgZXhwYW5zaW9uID0gKCgoLW1hcmdpbiArIDEpICogY291bnQpIDw8IDEwKSAvIGk7CisJCSAgICBleHBhbnNpb24gPj49IDEwOworCQkgICAgaWYgKGV4cGFuc2lvbiA8PSAwKSB7CisJCQlleHBhbnNpb24gPSAxOworCQkgICAgfQorCQl9IGVsc2UgeworCQkgICAgZXhwYW5zaW9uICo9IDI7CisJCX0KKwkJY2hhcltdIHRtcCA9IG5ldyBjaGFyW01hdGgubWluKHYubGVuZ3RoK2V4cGFuc2lvbiwgY291bnQqMildOworCQltYXJnaW4gPSAodG1wLmxlbmd0aCAtIHYubGVuZ3RoKSAtIChjb3VudCAtIGkpOworCQlTeXN0ZW0uYXJyYXljb3B5KHYsIDAsIHRtcCwgMCwgaik7CisJCXYgPSB0bXA7CisJICAgIH0KKwkgICAgaWYgKGMgPCBDaGFyYWN0ZXIuTUlOX1NVUFBMRU1FTlRBUllfQ09ERV9QT0lOVCkgeworCQl2W2orK10gPSAoY2hhcikgYzsKKwkgICAgfSBlbHNlIGlmIChjIDw9IENoYXJhY3Rlci5NQVhfQ09ERV9QT0lOVCkgeworCQlDaGFyYWN0ZXIudG9TdXJyb2dhdGVzKGMsIHYsIGopOworCQlqICs9IDI7CisJCW1hcmdpbi0tOworCSAgICB9IGVsc2UgeworCQl0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCk7CisJICAgIH0KKwl9CisJdGhpcy5vZmZzZXQgPSAwOworCXRoaXMudmFsdWUgPSB2OworCXRoaXMuY291bnQgPSBqOworICAgIH0KKworICAgIC8qKgorICAgICAqIEFsbG9jYXRlcyBhIG5ldyA8Y29kZT5TdHJpbmc8L2NvZGU+IGNvbnN0cnVjdGVkIGZyb20gYSBzdWJhcnJheQorICAgICAqIG9mIGFuIGFycmF5IG9mIDgtYml0IGludGVnZXIgdmFsdWVzLgorICAgICAqIDxwPgorICAgICAqIFRoZSA8Y29kZT5vZmZzZXQ8L2NvZGU+IGFyZ3VtZW50IGlzIHRoZSBpbmRleCBvZiB0aGUgZmlyc3QgYnl0ZQorICAgICAqIG9mIHRoZSBzdWJhcnJheSwgYW5kIHRoZSA8Y29kZT5jb3VudDwvY29kZT4gYXJndW1lbnQgc3BlY2lmaWVzIHRoZQorICAgICAqIGxlbmd0aCBvZiB0aGUgc3ViYXJyYXkuCisgICAgICogPHA+CisgICAgICogRWFjaCA8Y29kZT5ieXRlPC9jb2RlPiBpbiB0aGUgc3ViYXJyYXkgaXMgY29udmVydGVkIHRvIGEKKyAgICAgKiA8Y29kZT5jaGFyPC9jb2RlPiBhcyBzcGVjaWZpZWQgaW4gdGhlIG1ldGhvZCBhYm92ZS4KKyAgICAgKgorICAgICAqIEBkZXByZWNhdGVkIFRoaXMgbWV0aG9kIGRvZXMgbm90IHByb3Blcmx5IGNvbnZlcnQgYnl0ZXMgaW50byBjaGFyYWN0ZXJzLgorICAgICAqIEFzIG9mIEpESyZuYnNwOzEuMSwgdGhlIHByZWZlcnJlZCB3YXkgdG8gZG8gdGhpcyBpcyB2aWEgdGhlCisgICAgICogPGNvZGU+U3RyaW5nPC9jb2RlPiBjb25zdHJ1Y3RvcnMgdGhhdCB0YWtlIGEgY2hhcnNldCBuYW1lIG9yIHRoYXQgdXNlCisgICAgICogdGhlIHBsYXRmb3JtJ3MgZGVmYXVsdCBjaGFyc2V0LgorICAgICAqCisgICAgICogQHBhcmFtICAgICAgYXNjaWkgICAgIHRoZSBieXRlcyB0byBiZSBjb252ZXJ0ZWQgdG8gY2hhcmFjdGVycy4KKyAgICAgKiBAcGFyYW0gICAgICBoaWJ5dGUgICAgdGhlIHRvcCA4IGJpdHMgb2YgZWFjaCAxNi1iaXQgVW5pY29kZSBjaGFyYWN0ZXIuCisgICAgICogQHBhcmFtICAgICAgb2Zmc2V0ICAgIHRoZSBpbml0aWFsIG9mZnNldC4KKyAgICAgKiBAcGFyYW0gICAgICBjb3VudCAgICAgdGhlIGxlbmd0aC4KKyAgICAgKiBAZXhjZXB0aW9uICBJbmRleE91dE9mQm91bmRzRXhjZXB0aW9uICBpZiB0aGUgPGNvZGU+b2Zmc2V0PC9jb2RlPgorICAgICAqICAgICAgICAgICAgICAgb3IgPGNvZGU+Y291bnQ8L2NvZGU+IGFyZ3VtZW50IGlzIGludmFsaWQuCisgICAgICogQHNlZSAgICAgICAgamF2YS5sYW5nLlN0cmluZyNTdHJpbmcoYnl0ZVtdLCBpbnQpCisgICAgICogQHNlZSAgICAgICAgamF2YS5sYW5nLlN0cmluZyNTdHJpbmcoYnl0ZVtdLCBpbnQsIGludCwgamF2YS5sYW5nLlN0cmluZykKKyAgICAgKiBAc2VlICAgICAgICBqYXZhLmxhbmcuU3RyaW5nI1N0cmluZyhieXRlW10sIGludCwgaW50KQorICAgICAqIEBzZWUgICAgICAgIGphdmEubGFuZy5TdHJpbmcjU3RyaW5nKGJ5dGVbXSwgamF2YS5sYW5nLlN0cmluZykKKyAgICAgKiBAc2VlICAgICAgICBqYXZhLmxhbmcuU3RyaW5nI1N0cmluZyhieXRlW10pCisgICAgICovCisgICAgQERlcHJlY2F0ZWQKKyAgICBwdWJsaWMgU3RyaW5nKGJ5dGUgYXNjaWlbXSwgaW50IGhpYnl0ZSwgaW50IG9mZnNldCwgaW50IGNvdW50KSB7CisJY2hlY2tCb3VuZHMoYXNjaWksIG9mZnNldCwgY291bnQpOworICAgICAgICBjaGFyIHZhbHVlW10gPSBuZXcgY2hhcltjb3VudF07CisKKyAgICAgICAgaWYgKGhpYnl0ZSA9PSAwKSB7CisgICAgICAgICAgICBmb3IgKGludCBpID0gY291bnQgOyBpLS0gPiAwIDspIHsKKyAgICAgICAgICAgICAgICB2YWx1ZVtpXSA9IChjaGFyKSAoYXNjaWlbaSArIG9mZnNldF0gJiAweGZmKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGhpYnl0ZSA8PD0gODsKKyAgICAgICAgICAgIGZvciAoaW50IGkgPSBjb3VudCA7IGktLSA+IDAgOykgeworICAgICAgICAgICAgICAgIHZhbHVlW2ldID0gKGNoYXIpIChoaWJ5dGUgfCAoYXNjaWlbaSArIG9mZnNldF0gJiAweGZmKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKwl0aGlzLm9mZnNldCA9IDA7CisJdGhpcy5jb3VudCA9IGNvdW50OworCXRoaXMudmFsdWUgPSB2YWx1ZTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBBbGxvY2F0ZXMgYSBuZXcgPGNvZGU+U3RyaW5nPC9jb2RlPiBjb250YWluaW5nIGNoYXJhY3RlcnMKKyAgICAgKiBjb25zdHJ1Y3RlZCBmcm9tIGFuIGFycmF5IG9mIDgtYml0IGludGVnZXIgdmFsdWVzLiBFYWNoIGNoYXJhY3RlcgorICAgICAqIDxpPmM8L2k+aW4gdGhlIHJlc3VsdGluZyBzdHJpbmcgaXMgY29uc3RydWN0ZWQgZnJvbSB0aGUKKyAgICAgKiBjb3JyZXNwb25kaW5nIGNvbXBvbmVudCA8aT5iPC9pPiBpbiB0aGUgYnl0ZSBhcnJheSBzdWNoIHRoYXQ6CisgICAgICogPHA+PGJsb2NrcXVvdGU+PHByZT4KKyAgICAgKiAgICAgPGI+PGk+YzwvaT48L2I+ID09IChjaGFyKSgoKGhpYnl0ZSAmYW1wOyAweGZmKSAmbHQ7Jmx0OyA4KQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgIHwgKDxiPjxpPmI8L2k+PC9iPiAmYW1wOyAweGZmKSkKKyAgICAgKiA8L3ByZT48L2Jsb2NrcXVvdGU+CisgICAgICoKKyAgICAgKiBAZGVwcmVjYXRlZCBUaGlzIG1ldGhvZCBkb2VzIG5vdCBwcm9wZXJseSBjb252ZXJ0IGJ5dGVzIGludG8gY2hhcmFjdGVycy4KKyAgICAgKiBBcyBvZiBKREsmbmJzcDsxLjEsIHRoZSBwcmVmZXJyZWQgd2F5IHRvIGRvIHRoaXMgaXMgdmlhIHRoZQorICAgICAqIDxjb2RlPlN0cmluZzwvY29kZT4gY29uc3RydWN0b3JzIHRoYXQgdGFrZSBhIGNoYXJzZXQgbmFtZSBvcgorICAgICAqIHRoYXQgdXNlIHRoZSBwbGF0Zm9ybSdzIGRlZmF1bHQgY2hhcnNldC4KKyAgICAgKgorICAgICAqIEBwYXJhbSAgICAgIGFzY2lpICAgIHRoZSBieXRlcyB0byBiZSBjb252ZXJ0ZWQgdG8gY2hhcmFjdGVycy4KKyAgICAgKiBAcGFyYW0gICAgICBoaWJ5dGUgICB0aGUgdG9wIDggYml0cyBvZiBlYWNoIDE2LWJpdCBVbmljb2RlIGNoYXJhY3Rlci4KKyAgICAgKiBAc2VlICAgICAgICBqYXZhLmxhbmcuU3RyaW5nI1N0cmluZyhieXRlW10sIGludCwgaW50LCBqYXZhLmxhbmcuU3RyaW5nKQorICAgICAqIEBzZWUgICAgICAgIGphdmEubGFuZy5TdHJpbmcjU3RyaW5nKGJ5dGVbXSwgaW50LCBpbnQpCisgICAgICogQHNlZSAgICAgICAgamF2YS5sYW5nLlN0cmluZyNTdHJpbmcoYnl0ZVtdLCBqYXZhLmxhbmcuU3RyaW5nKQorICAgICAqIEBzZWUgICAgICAgIGphdmEubGFuZy5TdHJpbmcjU3RyaW5nKGJ5dGVbXSkKKyAgICAgKi8KKyAgICBARGVwcmVjYXRlZAorICAgIHB1YmxpYyBTdHJpbmcoYnl0ZSBhc2NpaVtdLCBpbnQgaGlieXRlKSB7CisgICAgICAgIHRoaXMoYXNjaWksIGhpYnl0ZSwgMCwgYXNjaWkubGVuZ3RoKTsKKyAgICB9CisKKyAgICAvKiBDb21tb24gcHJpdmF0ZSB1dGlsaXR5IG1ldGhvZCB1c2VkIHRvIGJvdW5kcyBjaGVjayB0aGUgYnl0ZSBhcnJheQorICAgICAqIGFuZCByZXF1ZXN0ZWQgb2Zmc2V0ICYgbGVuZ3RoIHZhbHVlcyB1c2VkIGJ5IHRoZSBTdHJpbmcoYnl0ZVtdLC4uKQorICAgICAqIGNvbnN0cnVjdG9ycy4KKyAgICAgKi8KKyAgICBwcml2YXRlIHN0YXRpYyB2b2lkIGNoZWNrQm91bmRzKGJ5dGVbXSBieXRlcywgaW50IG9mZnNldCwgaW50IGxlbmd0aCkgeworCWlmIChsZW5ndGggPCAwKQorCSAgICB0aHJvdyBuZXcgU3RyaW5nSW5kZXhPdXRPZkJvdW5kc0V4Y2VwdGlvbihsZW5ndGgpOworCWlmIChvZmZzZXQgPCAwKQorCSAgICB0aHJvdyBuZXcgU3RyaW5nSW5kZXhPdXRPZkJvdW5kc0V4Y2VwdGlvbihvZmZzZXQpOworCWlmIChvZmZzZXQgPiBieXRlcy5sZW5ndGggLSBsZW5ndGgpCisJICAgIHRocm93IG5ldyBTdHJpbmdJbmRleE91dE9mQm91bmRzRXhjZXB0aW9uKG9mZnNldCArIGxlbmd0aCk7CisgICAgfQorCisgICAgLyoqCisgICAgICogQ29uc3RydWN0cyBhIG5ldyA8dHQ+U3RyaW5nPC90dD4gYnkgZGVjb2RpbmcgdGhlIHNwZWNpZmllZCBzdWJhcnJheSBvZgorICAgICAqIGJ5dGVzIHVzaW5nIHRoZSBzcGVjaWZpZWQgY2hhcnNldC4gIFRoZSBsZW5ndGggb2YgdGhlIG5ldworICAgICAqIDx0dD5TdHJpbmc8L3R0PiBpcyBhIGZ1bmN0aW9uIG9mIHRoZSBjaGFyc2V0LCBhbmQgaGVuY2UgbWF5IG5vdCBiZSBlcXVhbAorICAgICAqIHRvIHRoZSBsZW5ndGggb2YgdGhlIHN1YmFycmF5LgorICAgICAqCisgICAgICogPHA+IFRoZSBiZWhhdmlvciBvZiB0aGlzIGNvbnN0cnVjdG9yIHdoZW4gdGhlIGdpdmVuIGJ5dGVzIGFyZSBub3QgdmFsaWQKKyAgICAgKiBpbiB0aGUgZ2l2ZW4gY2hhcnNldCBpcyB1bnNwZWNpZmllZC4gIFRoZSB7QGxpbmsKKyAgICAgKiBqYXZhLm5pby5jaGFyc2V0LkNoYXJzZXREZWNvZGVyfSBjbGFzcyBzaG91bGQgYmUgdXNlZCB3aGVuIG1vcmUgY29udHJvbAorICAgICAqIG92ZXIgdGhlIGRlY29kaW5nIHByb2Nlc3MgaXMgcmVxdWlyZWQuCisgICAgICoKKyAgICAgKiBAcGFyYW0gIGJ5dGVzICAgdGhlIGJ5dGVzIHRvIGJlIGRlY29kZWQgaW50byBjaGFyYWN0ZXJzCisgICAgICogQHBhcmFtICBvZmZzZXQgIHRoZSBpbmRleCBvZiB0aGUgZmlyc3QgYnl0ZSB0byBkZWNvZGUKKyAgICAgKiBAcGFyYW0gIGxlbmd0aCAgdGhlIG51bWJlciBvZiBieXRlcyB0byBkZWNvZGUKKyAgICAgKiBAcGFyYW0gIGNoYXJzZXROYW1lICB0aGUgbmFtZSBvZiBhIHN1cHBvcnRlZAorICAgICAqICAgICAgICAgICAgICAgICB7QGxpbmsgamF2YS5uaW8uY2hhcnNldC5DaGFyc2V0IDwvY29kZT5jaGFyc2V0PGNvZGU+fQorICAgICAqIEB0aHJvd3MgIFVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb24KKyAgICAgKiAgICAgICAgICBpZiB0aGUgbmFtZWQgY2hhcnNldCBpcyBub3Qgc3VwcG9ydGVkCisgICAgICogQHRocm93cyAgSW5kZXhPdXRPZkJvdW5kc0V4Y2VwdGlvbgorICAgICAqICAgICAgICAgIGlmIHRoZSA8dHQ+b2Zmc2V0PC90dD4gYW5kIDx0dD5sZW5ndGg8L3R0PiBhcmd1bWVudHMKKyAgICAgKiAgICAgICAgICBpbmRleCBjaGFyYWN0ZXJzIG91dHNpZGUgdGhlIGJvdW5kcyBvZiB0aGUgPHR0PmJ5dGVzPC90dD4KKyAgICAgKiAgICAgICAgICBhcnJheQorICAgICAqIEBzaW5jZSBKREsxLjEKKyAgICAgKi8KKyAgICBwdWJsaWMgU3RyaW5nKGJ5dGUgYnl0ZXNbXSwgaW50IG9mZnNldCwgaW50IGxlbmd0aCwgU3RyaW5nIGNoYXJzZXROYW1lKQorCXRocm93cyBVbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uCisgICAgeworCWlmIChjaGFyc2V0TmFtZSA9PSBudWxsKQorCSAgICB0aHJvdyBuZXcgTnVsbFBvaW50ZXJFeGNlcHRpb24oImNoYXJzZXROYW1lIik7CisJY2hlY2tCb3VuZHMoYnl0ZXMsIG9mZnNldCwgbGVuZ3RoKTsKKwljaGFyW10gdiA9IFN0cmluZ0NvZGluZy5kZWNvZGUoY2hhcnNldE5hbWUsIGJ5dGVzLCBvZmZzZXQsIGxlbmd0aCk7CisJdGhpcy5vZmZzZXQgPSAwOworCXRoaXMuY291bnQgPSB2Lmxlbmd0aDsKKwl0aGlzLnZhbHVlID0gdjsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDb25zdHJ1Y3RzIGEgbmV3IDx0dD5TdHJpbmc8L3R0PiBieSBkZWNvZGluZyB0aGUgc3BlY2lmaWVkIGFycmF5IG9mCisgICAgICogYnl0ZXMgdXNpbmcgdGhlIHNwZWNpZmllZCBjaGFyc2V0LiAgVGhlIGxlbmd0aCBvZiB0aGUgbmV3CisgICAgICogPHR0PlN0cmluZzwvdHQ+IGlzIGEgZnVuY3Rpb24gb2YgdGhlIGNoYXJzZXQsIGFuZCBoZW5jZSBtYXkgbm90IGJlIGVxdWFsCisgICAgICogdG8gdGhlIGxlbmd0aCBvZiB0aGUgYnl0ZSBhcnJheS4KKyAgICAgKgorICAgICAqIDxwPiBUaGUgYmVoYXZpb3Igb2YgdGhpcyBjb25zdHJ1Y3RvciB3aGVuIHRoZSBnaXZlbiBieXRlcyBhcmUgbm90IHZhbGlkCisgICAgICogaW4gdGhlIGdpdmVuIGNoYXJzZXQgaXMgdW5zcGVjaWZpZWQuICBUaGUge0BsaW5rCisgICAgICogamF2YS5uaW8uY2hhcnNldC5DaGFyc2V0RGVjb2Rlcn0gY2xhc3Mgc2hvdWxkIGJlIHVzZWQgd2hlbiBtb3JlIGNvbnRyb2wKKyAgICAgKiBvdmVyIHRoZSBkZWNvZGluZyBwcm9jZXNzIGlzIHJlcXVpcmVkLgorICAgICAqCisgICAgICogQHBhcmFtICBieXRlcyAgIHRoZSBieXRlcyB0byBiZSBkZWNvZGVkIGludG8gY2hhcmFjdGVycworICAgICAqIEBwYXJhbSAgY2hhcnNldE5hbWUgIHRoZSBuYW1lIG9mIGEgc3VwcG9ydGVkCisgICAgICogICAgICAgICAgICAgICAgIHtAbGluayBqYXZhLm5pby5jaGFyc2V0LkNoYXJzZXQgPC9jb2RlPmNoYXJzZXQ8Y29kZT59CisgICAgICoKKyAgICAgKiBAZXhjZXB0aW9uICBVbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uCisgICAgICogICAgICAgICAgICAgSWYgdGhlIG5hbWVkIGNoYXJzZXQgaXMgbm90IHN1cHBvcnRlZAorICAgICAqIEBzaW5jZSAgICAgIEpESzEuMQorICAgICAqLworICAgIHB1YmxpYyBTdHJpbmcoYnl0ZSBieXRlc1tdLCBTdHJpbmcgY2hhcnNldE5hbWUpCisJdGhyb3dzIFVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb24KKyAgICB7CisJdGhpcyhieXRlcywgMCwgYnl0ZXMubGVuZ3RoLCBjaGFyc2V0TmFtZSk7CisgICAgfQorCisgICAgLyoqCisgICAgICogQ29uc3RydWN0cyBhIG5ldyA8dHQ+U3RyaW5nPC90dD4gYnkgZGVjb2RpbmcgdGhlIHNwZWNpZmllZCBzdWJhcnJheSBvZgorICAgICAqIGJ5dGVzIHVzaW5nIHRoZSBwbGF0Zm9ybSdzIGRlZmF1bHQgY2hhcnNldC4gIFRoZSBsZW5ndGggb2YgdGhlIG5ldworICAgICAqIDx0dD5TdHJpbmc8L3R0PiBpcyBhIGZ1bmN0aW9uIG9mIHRoZSBjaGFyc2V0LCBhbmQgaGVuY2UgbWF5IG5vdCBiZSBlcXVhbAorICAgICAqIHRvIHRoZSBsZW5ndGggb2YgdGhlIHN1YmFycmF5LgorICAgICAqCisgICAgICogPHA+IFRoZSBiZWhhdmlvciBvZiB0aGlzIGNvbnN0cnVjdG9yIHdoZW4gdGhlIGdpdmVuIGJ5dGVzIGFyZSBub3QgdmFsaWQKKyAgICAgKiBpbiB0aGUgZGVmYXVsdCBjaGFyc2V0IGlzIHVuc3BlY2lmaWVkLiAgVGhlIHtAbGluaworICAgICAqIGphdmEubmlvLmNoYXJzZXQuQ2hhcnNldERlY29kZXJ9IGNsYXNzIHNob3VsZCBiZSB1c2VkIHdoZW4gbW9yZSBjb250cm9sCisgICAgICogb3ZlciB0aGUgZGVjb2RpbmcgcHJvY2VzcyBpcyByZXF1aXJlZC4KKyAgICAgKgorICAgICAqIEBwYXJhbSAgYnl0ZXMgICB0aGUgYnl0ZXMgdG8gYmUgZGVjb2RlZCBpbnRvIGNoYXJhY3RlcnMKKyAgICAgKiBAcGFyYW0gIG9mZnNldCAgdGhlIGluZGV4IG9mIHRoZSBmaXJzdCBieXRlIHRvIGRlY29kZQorICAgICAqIEBwYXJhbSAgbGVuZ3RoICB0aGUgbnVtYmVyIG9mIGJ5dGVzIHRvIGRlY29kZQorICAgICAqIEB0aHJvd3MgSW5kZXhPdXRPZkJvdW5kc0V4Y2VwdGlvbgorICAgICAqICAgICAgICAgaWYgdGhlIDxjb2RlPm9mZnNldDwvY29kZT4gYW5kIHRoZSA8Y29kZT5sZW5ndGg8L2NvZGU+CisgICAgICogICAgICAgICBhcmd1bWVudHMgaW5kZXggY2hhcmFjdGVycyBvdXRzaWRlIHRoZSBib3VuZHMgb2YgdGhlCisgICAgICogICAgICAgICA8Y29kZT5ieXRlczwvY29kZT4gYXJyYXkKKyAgICAgKiBAc2luY2UgIEpESzEuMQorICAgICAqLworICAgIHB1YmxpYyBTdHJpbmcoYnl0ZSBieXRlc1tdLCBpbnQgb2Zmc2V0LCBpbnQgbGVuZ3RoKSB7CisJY2hlY2tCb3VuZHMoYnl0ZXMsIG9mZnNldCwgbGVuZ3RoKTsKKwljaGFyW10gdiAgPSBTdHJpbmdDb2RpbmcuZGVjb2RlKGJ5dGVzLCBvZmZzZXQsIGxlbmd0aCk7CisJdGhpcy5vZmZzZXQgPSAwOworCXRoaXMuY291bnQgPSB2Lmxlbmd0aDsKKwl0aGlzLnZhbHVlID0gdjsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDb25zdHJ1Y3RzIGEgbmV3IDx0dD5TdHJpbmc8L3R0PiBieSBkZWNvZGluZyB0aGUgc3BlY2lmaWVkIGFycmF5IG9mCisgICAgICogYnl0ZXMgdXNpbmcgdGhlIHBsYXRmb3JtJ3MgZGVmYXVsdCBjaGFyc2V0LiAgVGhlIGxlbmd0aCBvZiB0aGUgbmV3CisgICAgICogPHR0PlN0cmluZzwvdHQ+IGlzIGEgZnVuY3Rpb24gb2YgdGhlIGNoYXJzZXQsIGFuZCBoZW5jZSBtYXkgbm90IGJlIGVxdWFsCisgICAgICogdG8gdGhlIGxlbmd0aCBvZiB0aGUgYnl0ZSBhcnJheS4KKyAgICAgKgorICAgICAqIDxwPiBUaGUgYmVoYXZpb3Igb2YgdGhpcyBjb25zdHJ1Y3RvciB3aGVuIHRoZSBnaXZlbiBieXRlcyBhcmUgbm90IHZhbGlkCisgICAgICogaW4gdGhlIGRlZmF1bHQgY2hhcnNldCBpcyB1bnNwZWNpZmllZC4gIFRoZSB7QGxpbmsKKyAgICAgKiBqYXZhLm5pby5jaGFyc2V0LkNoYXJzZXREZWNvZGVyfSBjbGFzcyBzaG91bGQgYmUgdXNlZCB3aGVuIG1vcmUgY29udHJvbAorICAgICAqIG92ZXIgdGhlIGRlY29kaW5nIHByb2Nlc3MgaXMgcmVxdWlyZWQuCisgICAgICoKKyAgICAgKiBAcGFyYW0gIGJ5dGVzICAgdGhlIGJ5dGVzIHRvIGJlIGRlY29kZWQgaW50byBjaGFyYWN0ZXJzCisgICAgICogQHNpbmNlICBKREsxLjEKKyAgICAgKi8KKyAgICBwdWJsaWMgU3RyaW5nKGJ5dGUgYnl0ZXNbXSkgeworCXRoaXMoYnl0ZXMsIDAsIGJ5dGVzLmxlbmd0aCk7CisgICAgfQorCisgICAgLyoqCisgICAgICogQWxsb2NhdGVzIGEgbmV3IHN0cmluZyB0aGF0IGNvbnRhaW5zIHRoZSBzZXF1ZW5jZSBvZiBjaGFyYWN0ZXJzCisgICAgICogY3VycmVudGx5IGNvbnRhaW5lZCBpbiB0aGUgc3RyaW5nIGJ1ZmZlciBhcmd1bWVudC4gVGhlIGNvbnRlbnRzIG9mCisgICAgICogdGhlIHN0cmluZyBidWZmZXIgYXJlIGNvcGllZDsgc3Vic2VxdWVudCBtb2RpZmljYXRpb24gb2YgdGhlIHN0cmluZworICAgICAqIGJ1ZmZlciBkb2VzIG5vdCBhZmZlY3QgdGhlIG5ld2x5IGNyZWF0ZWQgc3RyaW5nLgorICAgICAqCisgICAgICogQHBhcmFtICAgYnVmZmVyICAgYSA8Y29kZT5TdHJpbmdCdWZmZXI8L2NvZGU+LgorICAgICAqLworICAgIHB1YmxpYyBTdHJpbmcoU3RyaW5nQnVmZmVyIGJ1ZmZlcikgeworICAgICAgICBTdHJpbmcgcmVzdWx0ID0gYnVmZmVyLnRvU3RyaW5nKCk7CisgICAgICAgIHRoaXMudmFsdWUgPSByZXN1bHQudmFsdWU7CisgICAgICAgIHRoaXMuY291bnQgPSByZXN1bHQuY291bnQ7CisgICAgICAgIHRoaXMub2Zmc2V0ID0gcmVzdWx0Lm9mZnNldDsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBBbGxvY2F0ZXMgYSBuZXcgc3RyaW5nIHRoYXQgY29udGFpbnMgdGhlIHNlcXVlbmNlIG9mIGNoYXJhY3RlcnMKKyAgICAgKiBjdXJyZW50bHkgY29udGFpbmVkIGluIHRoZSBzdHJpbmcgYnVpbGRlciBhcmd1bWVudC4gVGhlIGNvbnRlbnRzIG9mCisgICAgICogdGhlIHN0cmluZyBidWlsZGVyIGFyZSBjb3BpZWQ7IHN1YnNlcXVlbnQgbW9kaWZpY2F0aW9uIG9mIHRoZSBzdHJpbmcKKyAgICAgKiBidWlsZGVyIGRvZXMgbm90IGFmZmVjdCB0aGUgbmV3bHkgY3JlYXRlZCBzdHJpbmcuCisgICAgICoKKyAgICAgKiA8cD5UaGlzIGNvbnN0cnVjdG9yIGlzIHByb3ZpZGVkIHRvIGVhc2UgbWlncmF0aW9uIHRvCisgICAgICogPGNvZGU+U3RyaW5nQnVpbGRlcjwvY29kZT4uIE9idGFpbmluZyBhIHN0cmluZyBmcm9tIGEgc3RyaW5nIGJ1aWxkZXIKKyAgICAgKiB2aWEgdGhlIDxjb2RlPnRvU3RyaW5nPC9jb2RlPiBtZXRob2QgaXMgbGlrZWx5IHRvIHJ1biBmYXN0ZXIgYW5kIGlzCisgICAgICogZ2VuZXJhbGx5IHByZWZlcnJlZC4KKyAgICAgKgorICAgICAqIEBwYXJhbSAgIGJ1aWxkZXIgICBhIDxjb2RlPlN0cmluZ0J1aWxkZXI8L2NvZGU+CisgICAgICogQHNpbmNlIDEuNQorICAgICAqLworICAgIHB1YmxpYyBTdHJpbmcoU3RyaW5nQnVpbGRlciBidWlsZGVyKSB7CisgICAgICAgIFN0cmluZyByZXN1bHQgPSBidWlsZGVyLnRvU3RyaW5nKCk7CisgICAgICAgIHRoaXMudmFsdWUgPSByZXN1bHQudmFsdWU7CisgICAgICAgIHRoaXMuY291bnQgPSByZXN1bHQuY291bnQ7CisgICAgICAgIHRoaXMub2Zmc2V0ID0gcmVzdWx0Lm9mZnNldDsKKyAgICB9CisKKworICAgIC8vIFBhY2thZ2UgcHJpdmF0ZSBjb25zdHJ1Y3RvciB3aGljaCBzaGFyZXMgdmFsdWUgYXJyYXkgZm9yIHNwZWVkLgorICAgIFN0cmluZyhpbnQgb2Zmc2V0LCBpbnQgY291bnQsIGNoYXIgdmFsdWVbXSkgeworCXRoaXMudmFsdWUgPSB2YWx1ZTsKKwl0aGlzLm9mZnNldCA9IG9mZnNldDsKKwl0aGlzLmNvdW50ID0gY291bnQ7CisgICAgfQorCisgICAgLyoqCisgICAgICogUmV0dXJucyB0aGUgbGVuZ3RoIG9mIHRoaXMgc3RyaW5nLgorICAgICAqIFRoZSBsZW5ndGggaXMgZXF1YWwgdG8gdGhlIG51bWJlciBvZiAxNi1iaXQKKyAgICAgKiBVbmljb2RlIGNoYXJhY3RlcnMgaW4gdGhlIHN0cmluZy4KKyAgICAgKgorICAgICAqIEByZXR1cm4gIHRoZSBsZW5ndGggb2YgdGhlIHNlcXVlbmNlIG9mIGNoYXJhY3RlcnMgcmVwcmVzZW50ZWQgYnkgdGhpcworICAgICAqICAgICAgICAgIG9iamVjdC4KKyAgICAgKi8KKyAgICBwdWJsaWMgaW50IGxlbmd0aCgpIHsKKyAgICAgICAgcmV0dXJuIGNvdW50OworICAgIH0KKworICAgIC8qKgorICAgICAqIFJldHVybnMgdGhlIDxjb2RlPmNoYXI8L2NvZGU+IHZhbHVlIGF0IHRoZQorICAgICAqIHNwZWNpZmllZCBpbmRleC4gQW4gaW5kZXggcmFuZ2VzIGZyb20gPGNvZGU+MDwvY29kZT4gdG8KKyAgICAgKiA8Y29kZT5sZW5ndGgoKSAtIDE8L2NvZGU+LiBUaGUgZmlyc3QgPGNvZGU+Y2hhcjwvY29kZT4gdmFsdWUgb2YgdGhlIHNlcXVlbmNlCisgICAgICogaXMgYXQgaW5kZXggPGNvZGU+MDwvY29kZT4sIHRoZSBuZXh0IGF0IGluZGV4IDxjb2RlPjE8L2NvZGU+LAorICAgICAqIGFuZCBzbyBvbiwgYXMgZm9yIGFycmF5IGluZGV4aW5nLgorICAgICAqCisgICAgICogPHA+SWYgdGhlIDxjb2RlPmNoYXI8L2NvZGU+IHZhbHVlIHNwZWNpZmllZCBieSB0aGUgaW5kZXggaXMgYQorICAgICAqIDxhIGhyZWY9IkNoYXJhY3Rlci5odG1sI3VuaWNvZGUiPnN1cnJvZ2F0ZTwvYT4sIHRoZSBzdXJyb2dhdGUKKyAgICAgKiB2YWx1ZSBpcyByZXR1cm5lZC4KKyAgICAgKgorICAgICAqIEBwYXJhbSAgICAgIGluZGV4ICAgdGhlIGluZGV4IG9mIHRoZSA8Y29kZT5jaGFyPC9jb2RlPiB2YWx1ZS4KKyAgICAgKiBAcmV0dXJuICAgICB0aGUgPGNvZGU+Y2hhcjwvY29kZT4gdmFsdWUgYXQgdGhlIHNwZWNpZmllZCBpbmRleCBvZiB0aGlzIHN0cmluZy4KKyAgICAgKiAgICAgICAgICAgICBUaGUgZmlyc3QgPGNvZGU+Y2hhcjwvY29kZT4gdmFsdWUgaXMgYXQgaW5kZXggPGNvZGU+MDwvY29kZT4uCisgICAgICogQGV4Y2VwdGlvbiAgSW5kZXhPdXRPZkJvdW5kc0V4Y2VwdGlvbiAgaWYgdGhlIDxjb2RlPmluZGV4PC9jb2RlPgorICAgICAqICAgICAgICAgICAgIGFyZ3VtZW50IGlzIG5lZ2F0aXZlIG9yIG5vdCBsZXNzIHRoYW4gdGhlIGxlbmd0aCBvZiB0aGlzCisgICAgICogICAgICAgICAgICAgc3RyaW5nLgorICAgICAqLworICAgIHB1YmxpYyBjaGFyIGNoYXJBdChpbnQgaW5kZXgpIHsKKyAgICAgICAgaWYgKChpbmRleCA8IDApIHx8IChpbmRleCA+PSBjb3VudCkpIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBTdHJpbmdJbmRleE91dE9mQm91bmRzRXhjZXB0aW9uKGluZGV4KTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdmFsdWVbaW5kZXggKyBvZmZzZXRdOworICAgIH0KKworICAgIC8qKgorICAgICAqIFJldHVybnMgdGhlIGNoYXJhY3RlciAoVW5pY29kZSBjb2RlIHBvaW50KSBhdCB0aGUgc3BlY2lmaWVkCisgICAgICogaW5kZXguIFRoZSBpbmRleCByZWZlcnMgdG8gPGNvZGU+Y2hhcjwvY29kZT4gdmFsdWVzCisgICAgICogKFVuaWNvZGUgY29kZSB1bml0cykgYW5kIHJhbmdlcyBmcm9tIDxjb2RlPjA8L2NvZGU+IHRvCisgICAgICoge0BsaW5rICNsZW5ndGgoKX08Y29kZT4gLSAxPC9jb2RlPi4KKyAgICAgKgorICAgICAqIDxwPiBJZiB0aGUgPGNvZGU+Y2hhcjwvY29kZT4gdmFsdWUgc3BlY2lmaWVkIGF0IHRoZSBnaXZlbiBpbmRleAorICAgICAqIGlzIGluIHRoZSBoaWdoLXN1cnJvZ2F0ZSByYW5nZSwgdGhlIGZvbGxvd2luZyBpbmRleCBpcyBsZXNzCisgICAgICogdGhhbiB0aGUgbGVuZ3RoIG9mIHRoaXMgPGNvZGU+U3RyaW5nPC9jb2RlPiwgYW5kIHRoZQorICAgICAqIDxjb2RlPmNoYXI8L2NvZGU+IHZhbHVlIGF0IHRoZSBmb2xsb3dpbmcgaW5kZXggaXMgaW4gdGhlCisgICAgICogbG93LXN1cnJvZ2F0ZSByYW5nZSwgdGhlbiB0aGUgc3VwcGxlbWVudGFyeSBjb2RlIHBvaW50CisgICAgICogY29ycmVzcG9uZGluZyB0byB0aGlzIHN1cnJvZ2F0ZSBwYWlyIGlzIHJldHVybmVkLiBPdGhlcndpc2UsCisgICAgICogdGhlIDxjb2RlPmNoYXI8L2NvZGU+IHZhbHVlIGF0IHRoZSBnaXZlbiBpbmRleCBpcyByZXR1cm5lZC4KKyAgICAgKgorICAgICAqIEBwYXJhbSAgICAgIGluZGV4IHRoZSBpbmRleCB0byB0aGUgPGNvZGU+Y2hhcjwvY29kZT4gdmFsdWVzCisgICAgICogQHJldHVybiAgICAgdGhlIGNvZGUgcG9pbnQgdmFsdWUgb2YgdGhlIGNoYXJhY3RlciBhdCB0aGUKKyAgICAgKiAgICAgICAgICAgICA8Y29kZT5pbmRleDwvY29kZT4KKyAgICAgKiBAZXhjZXB0aW9uICBJbmRleE91dE9mQm91bmRzRXhjZXB0aW9uICBpZiB0aGUgPGNvZGU+aW5kZXg8L2NvZGU+CisgICAgICogICAgICAgICAgICAgYXJndW1lbnQgaXMgbmVnYXRpdmUgb3Igbm90IGxlc3MgdGhhbiB0aGUgbGVuZ3RoIG9mIHRoaXMKKyAgICAgKiAgICAgICAgICAgICBzdHJpbmcuCisgICAgICogQHNpbmNlICAgICAgMS41CisgICAgICovCisgICAgcHVibGljIGludCBjb2RlUG9pbnRBdChpbnQgaW5kZXgpIHsKKyAgICAgICAgaWYgKChpbmRleCA8IDApIHx8IChpbmRleCA+PSBjb3VudCkpIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBTdHJpbmdJbmRleE91dE9mQm91bmRzRXhjZXB0aW9uKGluZGV4KTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gQ2hhcmFjdGVyLmNvZGVQb2ludEF0SW1wbCh2YWx1ZSwgb2Zmc2V0ICsgaW5kZXgsIG9mZnNldCArIGNvdW50KTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIHRoZSBjaGFyYWN0ZXIgKFVuaWNvZGUgY29kZSBwb2ludCkgYmVmb3JlIHRoZSBzcGVjaWZpZWQKKyAgICAgKiBpbmRleC4gVGhlIGluZGV4IHJlZmVycyB0byA8Y29kZT5jaGFyPC9jb2RlPiB2YWx1ZXMKKyAgICAgKiAoVW5pY29kZSBjb2RlIHVuaXRzKSBhbmQgcmFuZ2VzIGZyb20gPGNvZGU+MTwvY29kZT4gdG8ge0BsaW5rCisgICAgICogQ2hhclNlcXVlbmNlI2xlbmd0aCgpIGxlbmd0aH0uCisgICAgICoKKyAgICAgKiA8cD4gSWYgdGhlIDxjb2RlPmNoYXI8L2NvZGU+IHZhbHVlIGF0IDxjb2RlPihpbmRleCAtIDEpPC9jb2RlPgorICAgICAqIGlzIGluIHRoZSBsb3ctc3Vycm9nYXRlIHJhbmdlLCA8Y29kZT4oaW5kZXggLSAyKTwvY29kZT4gaXMgbm90CisgICAgICogbmVnYXRpdmUsIGFuZCB0aGUgPGNvZGU+Y2hhcjwvY29kZT4gdmFsdWUgYXQgPGNvZGU+KGluZGV4IC0KKyAgICAgKiAyKTwvY29kZT4gaXMgaW4gdGhlIGhpZ2gtc3Vycm9nYXRlIHJhbmdlLCB0aGVuIHRoZQorICAgICAqIHN1cHBsZW1lbnRhcnkgY29kZSBwb2ludCB2YWx1ZSBvZiB0aGUgc3Vycm9nYXRlIHBhaXIgaXMKKyAgICAgKiByZXR1cm5lZC4gSWYgdGhlIDxjb2RlPmNoYXI8L2NvZGU+IHZhbHVlIGF0IDxjb2RlPmluZGV4IC0KKyAgICAgKiAxPC9jb2RlPiBpcyBhbiB1bnBhaXJlZCBsb3ctc3Vycm9nYXRlIG9yIGEgaGlnaC1zdXJyb2dhdGUsIHRoZQorICAgICAqIHN1cnJvZ2F0ZSB2YWx1ZSBpcyByZXR1cm5lZC4KKyAgICAgKgorICAgICAqIEBwYXJhbSAgICAgaW5kZXggdGhlIGluZGV4IGZvbGxvd2luZyB0aGUgY29kZSBwb2ludCB0aGF0IHNob3VsZCBiZSByZXR1cm5lZAorICAgICAqIEByZXR1cm4gICAgdGhlIFVuaWNvZGUgY29kZSBwb2ludCB2YWx1ZSBiZWZvcmUgdGhlIGdpdmVuIGluZGV4LgorICAgICAqIEBleGNlcHRpb24gSW5kZXhPdXRPZkJvdW5kc0V4Y2VwdGlvbiBpZiB0aGUgPGNvZGU+aW5kZXg8L2NvZGU+CisgICAgICogICAgICAgICAgICBhcmd1bWVudCBpcyBsZXNzIHRoYW4gMSBvciBncmVhdGVyIHRoYW4gdGhlIGxlbmd0aAorICAgICAqICAgICAgICAgICAgb2YgdGhpcyBzdHJpbmcuCisgICAgICogQHNpbmNlICAgICAxLjUKKyAgICAgKi8KKyAgICBwdWJsaWMgaW50IGNvZGVQb2ludEJlZm9yZShpbnQgaW5kZXgpIHsKKwlpbnQgaSA9IGluZGV4IC0gMTsKKyAgICAgICAgaWYgKChpIDwgMCkgfHwgKGkgPj0gY291bnQpKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgU3RyaW5nSW5kZXhPdXRPZkJvdW5kc0V4Y2VwdGlvbihpbmRleCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIENoYXJhY3Rlci5jb2RlUG9pbnRCZWZvcmVJbXBsKHZhbHVlLCBvZmZzZXQgKyBpbmRleCwgb2Zmc2V0KTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgVW5pY29kZSBjb2RlIHBvaW50cyBpbiB0aGUgc3BlY2lmaWVkIHRleHQKKyAgICAgKiByYW5nZSBvZiB0aGlzIDxjb2RlPlN0cmluZzwvY29kZT4uIFRoZSB0ZXh0IHJhbmdlIGJlZ2lucyBhdCB0aGUKKyAgICAgKiBzcGVjaWZpZWQgPGNvZGU+YmVnaW5JbmRleDwvY29kZT4gYW5kIGV4dGVuZHMgdG8gdGhlCisgICAgICogPGNvZGU+Y2hhcjwvY29kZT4gYXQgaW5kZXggPGNvZGU+ZW5kSW5kZXggLSAxPC9jb2RlPi4gVGh1cyB0aGUKKyAgICAgKiBsZW5ndGggKGluIDxjb2RlPmNoYXI8L2NvZGU+cykgb2YgdGhlIHRleHQgcmFuZ2UgaXMKKyAgICAgKiA8Y29kZT5lbmRJbmRleC1iZWdpbkluZGV4PC9jb2RlPi4gVW5wYWlyZWQgc3Vycm9nYXRlcyB3aXRoaW4KKyAgICAgKiB0aGUgdGV4dCByYW5nZSBjb3VudCBhcyBvbmUgY29kZSBwb2ludCBlYWNoLgorICAgICAqCisgICAgICogQHBhcmFtIGJlZ2luSW5kZXggdGhlIGluZGV4IHRvIHRoZSBmaXJzdCA8Y29kZT5jaGFyPC9jb2RlPiBvZgorICAgICAqIHRoZSB0ZXh0IHJhbmdlLgorICAgICAqIEBwYXJhbSBlbmRJbmRleCB0aGUgaW5kZXggYWZ0ZXIgdGhlIGxhc3QgPGNvZGU+Y2hhcjwvY29kZT4gb2YKKyAgICAgKiB0aGUgdGV4dCByYW5nZS4KKyAgICAgKiBAcmV0dXJuIHRoZSBudW1iZXIgb2YgVW5pY29kZSBjb2RlIHBvaW50cyBpbiB0aGUgc3BlY2lmaWVkIHRleHQKKyAgICAgKiByYW5nZQorICAgICAqIEBleGNlcHRpb24gSW5kZXhPdXRPZkJvdW5kc0V4Y2VwdGlvbiBpZiB0aGUKKyAgICAgKiA8Y29kZT5iZWdpbkluZGV4PC9jb2RlPiBpcyBuZWdhdGl2ZSwgb3IgPGNvZGU+ZW5kSW5kZXg8L2NvZGU+CisgICAgICogaXMgbGFyZ2VyIHRoYW4gdGhlIGxlbmd0aCBvZiB0aGlzIDxjb2RlPlN0cmluZzwvY29kZT4sIG9yCisgICAgICogPGNvZGU+YmVnaW5JbmRleDwvY29kZT4gaXMgbGFyZ2VyIHRoYW4gPGNvZGU+ZW5kSW5kZXg8L2NvZGU+LgorICAgICAqIEBzaW5jZSAgMS41CisgICAgICovCisgICAgcHVibGljIGludCBjb2RlUG9pbnRDb3VudChpbnQgYmVnaW5JbmRleCwgaW50IGVuZEluZGV4KSB7CisJaWYgKGJlZ2luSW5kZXggPCAwIHx8IGVuZEluZGV4ID4gY291bnQgfHwgYmVnaW5JbmRleCA+IGVuZEluZGV4KSB7CisJICAgIHRocm93IG5ldyBJbmRleE91dE9mQm91bmRzRXhjZXB0aW9uKCk7CisJfQorCXJldHVybiBDaGFyYWN0ZXIuY29kZVBvaW50Q291bnRJbXBsKHZhbHVlLCBvZmZzZXQrYmVnaW5JbmRleCwgZW5kSW5kZXgtYmVnaW5JbmRleCk7CisgICAgfQorCisgICAgLyoqCisgICAgICogUmV0dXJucyB0aGUgaW5kZXggd2l0aGluIHRoaXMgPGNvZGU+U3RyaW5nPC9jb2RlPiB0aGF0IGlzCisgICAgICogb2Zmc2V0IGZyb20gdGhlIGdpdmVuIDxjb2RlPmluZGV4PC9jb2RlPiBieQorICAgICAqIDxjb2RlPmNvZGVQb2ludE9mZnNldDwvY29kZT4gY29kZSBwb2ludHMuIFVucGFpcmVkIHN1cnJvZ2F0ZXMKKyAgICAgKiB3aXRoaW4gdGhlIHRleHQgcmFuZ2UgZ2l2ZW4gYnkgPGNvZGU+aW5kZXg8L2NvZGU+IGFuZAorICAgICAqIDxjb2RlPmNvZGVQb2ludE9mZnNldDwvY29kZT4gY291bnQgYXMgb25lIGNvZGUgcG9pbnQgZWFjaC4KKyAgICAgKgorICAgICAqIEBwYXJhbSBpbmRleCB0aGUgaW5kZXggdG8gYmUgb2Zmc2V0CisgICAgICogQHBhcmFtIGNvZGVQb2ludE9mZnNldCB0aGUgb2Zmc2V0IGluIGNvZGUgcG9pbnRzCisgICAgICogQHJldHVybiB0aGUgaW5kZXggd2l0aGluIHRoaXMgPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBleGNlcHRpb24gSW5kZXhPdXRPZkJvdW5kc0V4Y2VwdGlvbiBpZiA8Y29kZT5pbmRleDwvY29kZT4KKyAgICAgKiAgIGlzIG5lZ2F0aXZlIG9yIGxhcmdlciB0aGVuIHRoZSBsZW5ndGggb2YgdGhpcworICAgICAqICAgPGNvZGU+U3RyaW5nPC9jb2RlPiwgb3IgaWYgPGNvZGU+Y29kZVBvaW50T2Zmc2V0PC9jb2RlPiBpcyBwb3NpdGl2ZQorICAgICAqICAgYW5kIHRoZSBzdWJzdHJpbmcgc3RhcnRpbmcgd2l0aCA8Y29kZT5pbmRleDwvY29kZT4gaGFzIGZld2VyCisgICAgICogICB0aGFuIDxjb2RlPmNvZGVQb2ludE9mZnNldDwvY29kZT4gY29kZSBwb2ludHMsCisgICAgICogICBvciBpZiA8Y29kZT5jb2RlUG9pbnRPZmZzZXQ8L2NvZGU+IGlzIG5lZ2F0aXZlIGFuZCB0aGUgc3Vic3RyaW5nCisgICAgICogICBiZWZvcmUgPGNvZGU+aW5kZXg8L2NvZGU+IGhhcyBmZXdlciB0aGFuIHRoZSBhYnNvbHV0ZSB2YWx1ZQorICAgICAqICAgb2YgPGNvZGU+Y29kZVBvaW50T2Zmc2V0PC9jb2RlPiBjb2RlIHBvaW50cy4KKyAgICAgKiBAc2luY2UgMS41CisgICAgICovCisgICAgcHVibGljIGludCBvZmZzZXRCeUNvZGVQb2ludHMoaW50IGluZGV4LCBpbnQgY29kZVBvaW50T2Zmc2V0KSB7CisJaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+IGNvdW50KSB7CisJICAgIHRocm93IG5ldyBJbmRleE91dE9mQm91bmRzRXhjZXB0aW9uKCk7CisJfQorCXJldHVybiBDaGFyYWN0ZXIub2Zmc2V0QnlDb2RlUG9pbnRzSW1wbCh2YWx1ZSwgb2Zmc2V0LCBjb3VudCwKKwkJCQkJCW9mZnNldCtpbmRleCwgY29kZVBvaW50T2Zmc2V0KTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDb3B5IGNoYXJhY3RlcnMgZnJvbSB0aGlzIHN0cmluZyBpbnRvIGRzdCBzdGFydGluZyBhdCBkc3RCZWdpbi4KKyAgICAgKiBUaGlzIG1ldGhvZCBkb2Vzbid0IHBlcmZvcm0gYW55IHJhbmdlIGNoZWNraW5nLgorICAgICAqLworICAgIHZvaWQgZ2V0Q2hhcnMoY2hhciBkc3RbXSwgaW50IGRzdEJlZ2luKSB7CisgICAgICAgIFN5c3RlbS5hcnJheWNvcHkodmFsdWUsIG9mZnNldCwgZHN0LCBkc3RCZWdpbiwgY291bnQpOworICAgIH0KKworICAgIC8qKgorICAgICAqIENvcGllcyBjaGFyYWN0ZXJzIGZyb20gdGhpcyBzdHJpbmcgaW50byB0aGUgZGVzdGluYXRpb24gY2hhcmFjdGVyCisgICAgICogYXJyYXkuCisgICAgICogPHA+CisgICAgICogVGhlIGZpcnN0IGNoYXJhY3RlciB0byBiZSBjb3BpZWQgaXMgYXQgaW5kZXggPGNvZGU+c3JjQmVnaW48L2NvZGU+OworICAgICAqIHRoZSBsYXN0IGNoYXJhY3RlciB0byBiZSBjb3BpZWQgaXMgYXQgaW5kZXggPGNvZGU+c3JjRW5kLTE8L2NvZGU+CisgICAgICogKHRodXMgdGhlIHRvdGFsIG51bWJlciBvZiBjaGFyYWN0ZXJzIHRvIGJlIGNvcGllZCBpcworICAgICAqIDxjb2RlPnNyY0VuZC1zcmNCZWdpbjwvY29kZT4pLiBUaGUgY2hhcmFjdGVycyBhcmUgY29waWVkIGludG8gdGhlCisgICAgICogc3ViYXJyYXkgb2YgPGNvZGU+ZHN0PC9jb2RlPiBzdGFydGluZyBhdCBpbmRleCA8Y29kZT5kc3RCZWdpbjwvY29kZT4KKyAgICAgKiBhbmQgZW5kaW5nIGF0IGluZGV4OgorICAgICAqIDxwPjxibG9ja3F1b3RlPjxwcmU+CisgICAgICogICAgIGRzdGJlZ2luICsgKHNyY0VuZC1zcmNCZWdpbikgLSAxCisgICAgICogPC9wcmU+PC9ibG9ja3F1b3RlPgorICAgICAqCisgICAgICogQHBhcmFtICAgICAgc3JjQmVnaW4gICBpbmRleCBvZiB0aGUgZmlyc3QgY2hhcmFjdGVyIGluIHRoZSBzdHJpbmcKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgIHRvIGNvcHkuCisgICAgICogQHBhcmFtICAgICAgc3JjRW5kICAgICBpbmRleCBhZnRlciB0aGUgbGFzdCBjaGFyYWN0ZXIgaW4gdGhlIHN0cmluZworICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgdG8gY29weS4KKyAgICAgKiBAcGFyYW0gICAgICBkc3QgICAgICAgIHRoZSBkZXN0aW5hdGlvbiBhcnJheS4KKyAgICAgKiBAcGFyYW0gICAgICBkc3RCZWdpbiAgIHRoZSBzdGFydCBvZmZzZXQgaW4gdGhlIGRlc3RpbmF0aW9uIGFycmF5LgorICAgICAqIEBleGNlcHRpb24gSW5kZXhPdXRPZkJvdW5kc0V4Y2VwdGlvbiBJZiBhbnkgb2YgdGhlIGZvbGxvd2luZworICAgICAqICAgICAgICAgICAgaXMgdHJ1ZToKKyAgICAgKiAgICAgICAgICAgIDx1bD48bGk+PGNvZGU+c3JjQmVnaW48L2NvZGU+IGlzIG5lZ2F0aXZlLgorICAgICAqICAgICAgICAgICAgPGxpPjxjb2RlPnNyY0JlZ2luPC9jb2RlPiBpcyBncmVhdGVyIHRoYW4gPGNvZGU+c3JjRW5kPC9jb2RlPgorICAgICAqICAgICAgICAgICAgPGxpPjxjb2RlPnNyY0VuZDwvY29kZT4gaXMgZ3JlYXRlciB0aGFuIHRoZSBsZW5ndGggb2YgdGhpcworICAgICAqICAgICAgICAgICAgICAgIHN0cmluZworICAgICAqICAgICAgICAgICAgPGxpPjxjb2RlPmRzdEJlZ2luPC9jb2RlPiBpcyBuZWdhdGl2ZQorICAgICAqICAgICAgICAgICAgPGxpPjxjb2RlPmRzdEJlZ2luKyhzcmNFbmQtc3JjQmVnaW4pPC9jb2RlPiBpcyBsYXJnZXIgdGhhbgorICAgICAqICAgICAgICAgICAgICAgIDxjb2RlPmRzdC5sZW5ndGg8L2NvZGU+PC91bD4KKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBnZXRDaGFycyhpbnQgc3JjQmVnaW4sIGludCBzcmNFbmQsIGNoYXIgZHN0W10sIGludCBkc3RCZWdpbikgeworICAgICAgICBpZiAoc3JjQmVnaW4gPCAwKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgU3RyaW5nSW5kZXhPdXRPZkJvdW5kc0V4Y2VwdGlvbihzcmNCZWdpbik7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHNyY0VuZCA+IGNvdW50KSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgU3RyaW5nSW5kZXhPdXRPZkJvdW5kc0V4Y2VwdGlvbihzcmNFbmQpOworICAgICAgICB9CisgICAgICAgIGlmIChzcmNCZWdpbiA+IHNyY0VuZCkgeworICAgICAgICAgICAgdGhyb3cgbmV3IFN0cmluZ0luZGV4T3V0T2ZCb3VuZHNFeGNlcHRpb24oc3JjRW5kIC0gc3JjQmVnaW4pOworICAgICAgICB9CisgICAgICAgIFN5c3RlbS5hcnJheWNvcHkodmFsdWUsIG9mZnNldCArIHNyY0JlZ2luLCBkc3QsIGRzdEJlZ2luLAorICAgICAgICAgICAgIHNyY0VuZCAtIHNyY0JlZ2luKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDb3BpZXMgY2hhcmFjdGVycyBmcm9tIHRoaXMgc3RyaW5nIGludG8gdGhlIGRlc3RpbmF0aW9uIGJ5dGUKKyAgICAgKiBhcnJheS4gRWFjaCBieXRlIHJlY2VpdmVzIHRoZSA4IGxvdy1vcmRlciBiaXRzIG9mIHRoZQorICAgICAqIGNvcnJlc3BvbmRpbmcgY2hhcmFjdGVyLiBUaGUgZWlnaHQgaGlnaC1vcmRlciBiaXRzIG9mIGVhY2ggY2hhcmFjdGVyCisgICAgICogYXJlIG5vdCBjb3BpZWQgYW5kIGRvIG5vdCBwYXJ0aWNpcGF0ZSBpbiB0aGUgdHJhbnNmZXIgaW4gYW55IHdheS4KKyAgICAgKiA8cD4KKyAgICAgKiBUaGUgZmlyc3QgY2hhcmFjdGVyIHRvIGJlIGNvcGllZCBpcyBhdCBpbmRleCA8Y29kZT5zcmNCZWdpbjwvY29kZT47CisgICAgICogdGhlIGxhc3QgY2hhcmFjdGVyIHRvIGJlIGNvcGllZCBpcyBhdCBpbmRleCA8Y29kZT5zcmNFbmQtMTwvY29kZT4uCisgICAgICogVGhlIHRvdGFsIG51bWJlciBvZiBjaGFyYWN0ZXJzIHRvIGJlIGNvcGllZCBpcworICAgICAqIDxjb2RlPnNyY0VuZC1zcmNCZWdpbjwvY29kZT4uIFRoZSBjaGFyYWN0ZXJzLCBjb252ZXJ0ZWQgdG8gYnl0ZXMsCisgICAgICogYXJlIGNvcGllZCBpbnRvIHRoZSBzdWJhcnJheSBvZiA8Y29kZT5kc3Q8L2NvZGU+IHN0YXJ0aW5nIGF0IGluZGV4CisgICAgICogPGNvZGU+ZHN0QmVnaW48L2NvZGU+IGFuZCBlbmRpbmcgYXQgaW5kZXg6CisgICAgICogPHA+PGJsb2NrcXVvdGU+PHByZT4KKyAgICAgKiAgICAgZHN0YmVnaW4gKyAoc3JjRW5kLXNyY0JlZ2luKSAtIDEKKyAgICAgKiA8L3ByZT48L2Jsb2NrcXVvdGU+CisgICAgICoKKyAgICAgKiBAZGVwcmVjYXRlZCBUaGlzIG1ldGhvZCBkb2VzIG5vdCBwcm9wZXJseSBjb252ZXJ0IGNoYXJhY3RlcnMgaW50byBieXRlcy4KKyAgICAgKiBBcyBvZiBKREsmbmJzcDsxLjEsIHRoZSBwcmVmZXJyZWQgd2F5IHRvIGRvIHRoaXMgaXMgdmlhIHRoZQorICAgICAqIDxjb2RlPmdldEJ5dGVzKCk8L2NvZGU+IG1ldGhvZCwgd2hpY2ggdXNlcyB0aGUgcGxhdGZvcm0ncyBkZWZhdWx0CisgICAgICogY2hhcnNldC4KKyAgICAgKgorICAgICAqIEBwYXJhbSAgICAgIHNyY0JlZ2luICAgaW5kZXggb2YgdGhlIGZpcnN0IGNoYXJhY3RlciBpbiB0aGUgc3RyaW5nCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICB0byBjb3B5LgorICAgICAqIEBwYXJhbSAgICAgIHNyY0VuZCAgICAgaW5kZXggYWZ0ZXIgdGhlIGxhc3QgY2hhcmFjdGVyIGluIHRoZSBzdHJpbmcKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgIHRvIGNvcHkuCisgICAgICogQHBhcmFtICAgICAgZHN0ICAgICAgICB0aGUgZGVzdGluYXRpb24gYXJyYXkuCisgICAgICogQHBhcmFtICAgICAgZHN0QmVnaW4gICB0aGUgc3RhcnQgb2Zmc2V0IGluIHRoZSBkZXN0aW5hdGlvbiBhcnJheS4KKyAgICAgKiBAZXhjZXB0aW9uIEluZGV4T3V0T2ZCb3VuZHNFeGNlcHRpb24gaWYgYW55IG9mIHRoZSBmb2xsb3dpbmcKKyAgICAgKiAgICAgICAgICAgIGlzIHRydWU6CisgICAgICogICAgICAgICAgIDx1bD48bGk+PGNvZGU+c3JjQmVnaW48L2NvZGU+IGlzIG5lZ2F0aXZlCisgICAgICogICAgICAgICAgIDxsaT48Y29kZT5zcmNCZWdpbjwvY29kZT4gaXMgZ3JlYXRlciB0aGFuIDxjb2RlPnNyY0VuZDwvY29kZT4KKyAgICAgKiAgICAgICAgICAgPGxpPjxjb2RlPnNyY0VuZDwvY29kZT4gaXMgZ3JlYXRlciB0aGFuIHRoZSBsZW5ndGggb2YgdGhpcworICAgICAqICAgICAgICAgICAgU3RyaW5nCisgICAgICogICAgICAgICAgIDxsaT48Y29kZT5kc3RCZWdpbjwvY29kZT4gaXMgbmVnYXRpdmUKKyAgICAgKiAgICAgICAgICAgPGxpPjxjb2RlPmRzdEJlZ2luKyhzcmNFbmQtc3JjQmVnaW4pPC9jb2RlPiBpcyBsYXJnZXIgdGhhbgorICAgICAqICAgICAgICAgICAgPGNvZGU+ZHN0Lmxlbmd0aDwvY29kZT48L3VsPgorICAgICAqLworICAgIEBEZXByZWNhdGVkCisgICAgcHVibGljIHZvaWQgZ2V0Qnl0ZXMoaW50IHNyY0JlZ2luLCBpbnQgc3JjRW5kLCBieXRlIGRzdFtdLCBpbnQgZHN0QmVnaW4pIHsKKyAgICAgICAgaWYgKHNyY0JlZ2luIDwgMCkgeworICAgICAgICAgICAgdGhyb3cgbmV3IFN0cmluZ0luZGV4T3V0T2ZCb3VuZHNFeGNlcHRpb24oc3JjQmVnaW4pOworICAgICAgICB9CisgICAgICAgIGlmIChzcmNFbmQgPiBjb3VudCkgeworICAgICAgICAgICAgdGhyb3cgbmV3IFN0cmluZ0luZGV4T3V0T2ZCb3VuZHNFeGNlcHRpb24oc3JjRW5kKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoc3JjQmVnaW4gPiBzcmNFbmQpIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBTdHJpbmdJbmRleE91dE9mQm91bmRzRXhjZXB0aW9uKHNyY0VuZCAtIHNyY0JlZ2luKTsKKyAgICAgICAgfQorICAgICAgICBpbnQgaiA9IGRzdEJlZ2luOworICAgICAgICBpbnQgbiA9IG9mZnNldCArIHNyY0VuZDsKKyAgICAgICAgaW50IGkgPSBvZmZzZXQgKyBzcmNCZWdpbjsKKyAgICAgICAgY2hhcltdIHZhbCA9IHZhbHVlOyAgIC8qIGF2b2lkIGdldGZpZWxkIG9wY29kZSAqLworCisgICAgICAgIHdoaWxlIChpIDwgbikgeworICAgICAgICAgICAgZHN0W2orK10gPSAoYnl0ZSl2YWxbaSsrXTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKgorICAgICAqIEVuY29kZXMgdGhpcyA8dHQ+U3RyaW5nPC90dD4gaW50byBhIHNlcXVlbmNlIG9mIGJ5dGVzIHVzaW5nIHRoZQorICAgICAqIG5hbWVkIGNoYXJzZXQsIHN0b3JpbmcgdGhlIHJlc3VsdCBpbnRvIGEgbmV3IGJ5dGUgYXJyYXkuCisgICAgICoKKyAgICAgKiA8cD4gVGhlIGJlaGF2aW9yIG9mIHRoaXMgbWV0aG9kIHdoZW4gdGhpcyBzdHJpbmcgY2Fubm90IGJlIGVuY29kZWQgaW4KKyAgICAgKiB0aGUgZ2l2ZW4gY2hhcnNldCBpcyB1bnNwZWNpZmllZC4gIFRoZSB7QGxpbmsKKyAgICAgKiBqYXZhLm5pby5jaGFyc2V0LkNoYXJzZXRFbmNvZGVyfSBjbGFzcyBzaG91bGQgYmUgdXNlZCB3aGVuIG1vcmUgY29udHJvbAorICAgICAqIG92ZXIgdGhlIGVuY29kaW5nIHByb2Nlc3MgaXMgcmVxdWlyZWQuCisgICAgICoKKyAgICAgKiBAcGFyYW0gIGNoYXJzZXROYW1lCisgICAgICogICAgICAgICB0aGUgbmFtZSBvZiBhIHN1cHBvcnRlZAorICAgICAqICAgICAgICAge0BsaW5rIGphdmEubmlvLmNoYXJzZXQuQ2hhcnNldCA8L2NvZGU+Y2hhcnNldDxjb2RlPn0KKyAgICAgKgorICAgICAqIEByZXR1cm4gIFRoZSByZXN1bHRhbnQgYnl0ZSBhcnJheQorICAgICAqCisgICAgICogQGV4Y2VwdGlvbiAgVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbgorICAgICAqICAgICAgICAgICAgIElmIHRoZSBuYW1lZCBjaGFyc2V0IGlzIG5vdCBzdXBwb3J0ZWQKKyAgICAgKgorICAgICAqIEBzaW5jZSAgICAgIEpESzEuMQorICAgICAqLworICAgIHB1YmxpYyBieXRlW10gZ2V0Qnl0ZXMoU3RyaW5nIGNoYXJzZXROYW1lKQorCXRocm93cyBVbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uCisgICAgeworCWlmIChjaGFyc2V0TmFtZSA9PSBudWxsKSB0aHJvdyBuZXcgTnVsbFBvaW50ZXJFeGNlcHRpb24oKTsKKwlyZXR1cm4gU3RyaW5nQ29kaW5nLmVuY29kZShjaGFyc2V0TmFtZSwgdmFsdWUsIG9mZnNldCwgY291bnQpOworICAgIH0KKworICAgIC8qKgorICAgICAqIEVuY29kZXMgdGhpcyA8dHQ+U3RyaW5nPC90dD4gaW50byBhIHNlcXVlbmNlIG9mIGJ5dGVzIHVzaW5nIHRoZQorICAgICAqIHBsYXRmb3JtJ3MgZGVmYXVsdCBjaGFyc2V0LCBzdG9yaW5nIHRoZSByZXN1bHQgaW50byBhIG5ldyBieXRlIGFycmF5LgorICAgICAqCisgICAgICogPHA+IFRoZSBiZWhhdmlvciBvZiB0aGlzIG1ldGhvZCB3aGVuIHRoaXMgc3RyaW5nIGNhbm5vdCBiZSBlbmNvZGVkIGluCisgICAgICogdGhlIGRlZmF1bHQgY2hhcnNldCBpcyB1bnNwZWNpZmllZC4gIFRoZSB7QGxpbmsKKyAgICAgKiBqYXZhLm5pby5jaGFyc2V0LkNoYXJzZXRFbmNvZGVyfSBjbGFzcyBzaG91bGQgYmUgdXNlZCB3aGVuIG1vcmUgY29udHJvbAorICAgICAqIG92ZXIgdGhlIGVuY29kaW5nIHByb2Nlc3MgaXMgcmVxdWlyZWQuCisgICAgICoKKyAgICAgKiBAcmV0dXJuICBUaGUgcmVzdWx0YW50IGJ5dGUgYXJyYXkKKyAgICAgKgorICAgICAqIEBzaW5jZSAgICAgIEpESzEuMQorICAgICAqLworICAgIHB1YmxpYyBieXRlW10gZ2V0Qnl0ZXMoKSB7CisJcmV0dXJuIFN0cmluZ0NvZGluZy5lbmNvZGUodmFsdWUsIG9mZnNldCwgY291bnQpOworICAgIH0KKworICAgIC8qKgorICAgICAqIENvbXBhcmVzIHRoaXMgc3RyaW5nIHRvIHRoZSBzcGVjaWZpZWQgb2JqZWN0LgorICAgICAqIFRoZSByZXN1bHQgaXMgPGNvZGU+dHJ1ZTwvY29kZT4gaWYgYW5kIG9ubHkgaWYgdGhlIGFyZ3VtZW50IGlzIG5vdAorICAgICAqIDxjb2RlPm51bGw8L2NvZGU+IGFuZCBpcyBhIDxjb2RlPlN0cmluZzwvY29kZT4gb2JqZWN0IHRoYXQgcmVwcmVzZW50cworICAgICAqIHRoZSBzYW1lIHNlcXVlbmNlIG9mIGNoYXJhY3RlcnMgYXMgdGhpcyBvYmplY3QuCisgICAgICoKKyAgICAgKiBAcGFyYW0gICBhbk9iamVjdCAgIHRoZSBvYmplY3QgdG8gY29tcGFyZSB0aGlzIDxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgIGFnYWluc3QuCisgICAgICogQHJldHVybiAgPGNvZGU+dHJ1ZTwvY29kZT4gaWYgdGhlIDxjb2RlPlN0cmluZyA8L2NvZGU+YXJlIGVxdWFsOworICAgICAqICAgICAgICAgIDxjb2RlPmZhbHNlPC9jb2RlPiBvdGhlcndpc2UuCisgICAgICogQHNlZSAgICAgamF2YS5sYW5nLlN0cmluZyNjb21wYXJlVG8oamF2YS5sYW5nLlN0cmluZykKKyAgICAgKiBAc2VlICAgICBqYXZhLmxhbmcuU3RyaW5nI2VxdWFsc0lnbm9yZUNhc2UoamF2YS5sYW5nLlN0cmluZykKKyAgICAgKi8KKyAgICBwdWJsaWMgYm9vbGVhbiBlcXVhbHMoT2JqZWN0IGFuT2JqZWN0KSB7CisJaWYgKHRoaXMgPT0gYW5PYmplY3QpIHsKKwkgICAgcmV0dXJuIHRydWU7CisJfQorCWlmIChhbk9iamVjdCBpbnN0YW5jZW9mIFN0cmluZykgeworCSAgICBTdHJpbmcgYW5vdGhlclN0cmluZyA9IChTdHJpbmcpYW5PYmplY3Q7CisJICAgIGludCBuID0gY291bnQ7CisJICAgIGlmIChuID09IGFub3RoZXJTdHJpbmcuY291bnQpIHsKKwkJY2hhciB2MVtdID0gdmFsdWU7CisJCWNoYXIgdjJbXSA9IGFub3RoZXJTdHJpbmcudmFsdWU7CisJCWludCBpID0gb2Zmc2V0OworCQlpbnQgaiA9IGFub3RoZXJTdHJpbmcub2Zmc2V0OworCQl3aGlsZSAobi0tICE9IDApIHsKKwkJICAgIGlmICh2MVtpKytdICE9IHYyW2orK10pCisJCQlyZXR1cm4gZmFsc2U7CisJCX0KKwkJcmV0dXJuIHRydWU7CisJICAgIH0KKwl9CisJcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIC8qKgorICAgICAqIFJldHVybnMgPHR0PnRydWU8L3R0PiBpZiBhbmQgb25seSBpZiB0aGlzIDx0dD5TdHJpbmc8L3R0PiByZXByZXNlbnRzCisgICAgICogdGhlIHNhbWUgc2VxdWVuY2Ugb2YgY2hhcmFjdGVycyBhcyB0aGUgc3BlY2lmaWVkIDx0dD5TdHJpbmdCdWZmZXI8L3R0Pi4KKyAgICAgKgorICAgICAqIEBwYXJhbSAgIHNiICAgICAgICAgdGhlIDx0dD5TdHJpbmdCdWZmZXI8L3R0PiB0byBjb21wYXJlIHRvLgorICAgICAqIEByZXR1cm4gIDx0dD50cnVlPC90dD4gaWYgYW5kIG9ubHkgaWYgdGhpcyA8dHQ+U3RyaW5nPC90dD4gcmVwcmVzZW50cworICAgICAqICAgICAgICAgIHRoZSBzYW1lIHNlcXVlbmNlIG9mIGNoYXJhY3RlcnMgYXMgdGhlIHNwZWNpZmllZAorICAgICAqICAgICAgICAgIDx0dD5TdHJpbmdCdWZmZXI8L3R0Piwgb3RoZXJ3aXNlIDx0dD5mYWxzZTwvdHQ+LgorICAgICAqIEB0aHJvd3MgTnVsbFBvaW50ZXJFeGNlcHRpb24gaWYgPGNvZGU+c2I8L2NvZGU+IGlzIDxjb2RlPm51bGw8L2NvZGU+CisgICAgICogQHNpbmNlIDEuNAorICAgICAqLworICAgIHB1YmxpYyBib29sZWFuIGNvbnRlbnRFcXVhbHMoU3RyaW5nQnVmZmVyIHNiKSB7CisgICAgICAgIHN5bmNocm9uaXplZChzYikgeworICAgICAgICAgICAgcmV0dXJuIGNvbnRlbnRFcXVhbHMoKENoYXJTZXF1ZW5jZSlzYik7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIDx0dD50cnVlPC90dD4gaWYgYW5kIG9ubHkgaWYgdGhpcyA8dHQ+U3RyaW5nPC90dD4gcmVwcmVzZW50cworICAgICAqIHRoZSBzYW1lIHNlcXVlbmNlIG9mIGNoYXIgdmFsdWVzIGFzIHRoZSBzcGVjaWZpZWQgc2VxdWVuY2UuCisgICAgICoKKyAgICAgKiBAcGFyYW0gICBjcyAgICAgICAgIHRoZSBzZXF1ZW5jZSB0byBjb21wYXJlIHRvLgorICAgICAqIEByZXR1cm4gIDx0dD50cnVlPC90dD4gaWYgYW5kIG9ubHkgaWYgdGhpcyA8dHQ+U3RyaW5nPC90dD4gcmVwcmVzZW50cworICAgICAqICAgICAgICAgIHRoZSBzYW1lIHNlcXVlbmNlIG9mIGNoYXIgdmFsdWVzIGFzIHRoZSBzcGVjaWZpZWQKKyAgICAgKiAgICAgICAgICBzZXF1ZW5jZSwgb3RoZXJ3aXNlIDx0dD5mYWxzZTwvdHQ+LgorICAgICAqIEB0aHJvd3MgTnVsbFBvaW50ZXJFeGNlcHRpb24gaWYgPGNvZGU+Y3M8L2NvZGU+IGlzIDxjb2RlPm51bGw8L2NvZGU+CisgICAgICogQHNpbmNlIDEuNQorICAgICAqLworICAgIHB1YmxpYyBib29sZWFuIGNvbnRlbnRFcXVhbHMoQ2hhclNlcXVlbmNlIGNzKSB7CisgICAgICAgIGlmIChjb3VudCAhPSBjcy5sZW5ndGgoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgLy8gQXJndW1lbnQgaXMgYSBTdHJpbmdCdWZmZXIsIFN0cmluZ0J1aWxkZXIKKyAgICAgICAgaWYgKGNzIGluc3RhbmNlb2YgQWJzdHJhY3RTdHJpbmdCdWlsZGVyKSB7CisgICAgICAgICAgICBjaGFyIHYxW10gPSB2YWx1ZTsKKyAgICAgICAgICAgIGNoYXIgdjJbXSA9ICgoQWJzdHJhY3RTdHJpbmdCdWlsZGVyKWNzKS5nZXRWYWx1ZSgpOworICAgICAgICAgICAgaW50IGkgPSBvZmZzZXQ7CisgICAgICAgICAgICBpbnQgaiA9IDA7CisgICAgICAgICAgICBpbnQgbiA9IGNvdW50OworICAgICAgICAgICAgd2hpbGUgKG4tLSAhPSAwKSB7CisgICAgICAgICAgICAgICAgaWYgKHYxW2krK10gIT0gdjJbaisrXSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIC8vIEFyZ3VtZW50IGlzIGEgU3RyaW5nCisgICAgICAgIGlmIChjcy5lcXVhbHModGhpcykpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgLy8gQXJndW1lbnQgaXMgYSBnZW5lcmljIENoYXJTZXF1ZW5jZQorICAgICAgICBjaGFyIHYxW10gPSB2YWx1ZTsKKyAgICAgICAgaW50IGkgPSBvZmZzZXQ7CisgICAgICAgIGludCBqID0gMDsKKyAgICAgICAgaW50IG4gPSBjb3VudDsKKyAgICAgICAgd2hpbGUgKG4tLSAhPSAwKSB7CisgICAgICAgICAgICBpZiAodjFbaSsrXSAhPSBjcy5jaGFyQXQoaisrKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgLyoqCisgICAgICogQ29tcGFyZXMgdGhpcyA8Y29kZT5TdHJpbmc8L2NvZGU+IHRvIGFub3RoZXIgPGNvZGU+U3RyaW5nPC9jb2RlPiwKKyAgICAgKiBpZ25vcmluZyBjYXNlIGNvbnNpZGVyYXRpb25zLiAgVHdvIHN0cmluZ3MgYXJlIGNvbnNpZGVyZWQgZXF1YWwKKyAgICAgKiBpZ25vcmluZyBjYXNlIGlmIHRoZXkgYXJlIG9mIHRoZSBzYW1lIGxlbmd0aCwgYW5kIGNvcnJlc3BvbmRpbmcKKyAgICAgKiBjaGFyYWN0ZXJzIGluIHRoZSB0d28gc3RyaW5ncyBhcmUgZXF1YWwgaWdub3JpbmcgY2FzZS4KKyAgICAgKiA8cD4KKyAgICAgKiBUd28gY2hhcmFjdGVycyA8Y29kZT5jMTwvY29kZT4gYW5kIDxjb2RlPmMyPC9jb2RlPiBhcmUgY29uc2lkZXJlZAorICAgICAqIHRoZSBzYW1lLCBpZ25vcmluZyBjYXNlIGlmIGF0IGxlYXN0IG9uZSBvZiB0aGUgZm9sbG93aW5nIGlzIHRydWU6CisgICAgICogPHVsPjxsaT5UaGUgdHdvIGNoYXJhY3RlcnMgYXJlIHRoZSBzYW1lIChhcyBjb21wYXJlZCBieSB0aGUKKyAgICAgKiA8Y29kZT49PTwvY29kZT4gb3BlcmF0b3IpLgorICAgICAqIDxsaT5BcHBseWluZyB0aGUgbWV0aG9kIHtAbGluayBqYXZhLmxhbmcuQ2hhcmFjdGVyI3RvVXBwZXJDYXNlKGNoYXIpfQorICAgICAqIHRvIGVhY2ggY2hhcmFjdGVyIHByb2R1Y2VzIHRoZSBzYW1lIHJlc3VsdC4KKyAgICAgKiA8bGk+QXBwbHlpbmcgdGhlIG1ldGhvZCB7QGxpbmsgamF2YS5sYW5nLkNoYXJhY3RlciN0b0xvd2VyQ2FzZShjaGFyKX0KKyAgICAgKiB0byBlYWNoIGNoYXJhY3RlciBwcm9kdWNlcyB0aGUgc2FtZSByZXN1bHQuPC91bD4KKyAgICAgKgorICAgICAqIEBwYXJhbSAgIGFub3RoZXJTdHJpbmcgICB0aGUgPGNvZGU+U3RyaW5nPC9jb2RlPiB0byBjb21wYXJlIHRoaXMKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgPGNvZGU+U3RyaW5nPC9jb2RlPiBhZ2FpbnN0LgorICAgICAqIEByZXR1cm4gIDxjb2RlPnRydWU8L2NvZGU+IGlmIHRoZSBhcmd1bWVudCBpcyBub3QgPGNvZGU+bnVsbDwvY29kZT4KKyAgICAgKiAgICAgICAgICBhbmQgdGhlIDxjb2RlPlN0cmluZzwvY29kZT5zIGFyZSBlcXVhbCwKKyAgICAgKiAgICAgICAgICBpZ25vcmluZyBjYXNlOyA8Y29kZT5mYWxzZTwvY29kZT4gb3RoZXJ3aXNlLgorICAgICAqIEBzZWUgICAgICNlcXVhbHMoT2JqZWN0KQorICAgICAqIEBzZWUgICAgIGphdmEubGFuZy5DaGFyYWN0ZXIjdG9Mb3dlckNhc2UoY2hhcikKKyAgICAgKiBAc2VlIGphdmEubGFuZy5DaGFyYWN0ZXIjdG9VcHBlckNhc2UoY2hhcikKKyAgICAgKi8KKyAgICBwdWJsaWMgYm9vbGVhbiBlcXVhbHNJZ25vcmVDYXNlKFN0cmluZyBhbm90aGVyU3RyaW5nKSB7CisgICAgICAgIHJldHVybiAodGhpcyA9PSBhbm90aGVyU3RyaW5nKSA/IHRydWUgOgorICAgICAgICAgICAgICAgKGFub3RoZXJTdHJpbmcgIT0gbnVsbCkgJiYgKGFub3RoZXJTdHJpbmcuY291bnQgPT0gY291bnQpICYmCisJICAgICAgIHJlZ2lvbk1hdGNoZXModHJ1ZSwgMCwgYW5vdGhlclN0cmluZywgMCwgY291bnQpOworICAgIH0KKworICAgIC8qKgorICAgICAqIENvbXBhcmVzIHR3byBzdHJpbmdzIGxleGljb2dyYXBoaWNhbGx5LgorICAgICAqIFRoZSBjb21wYXJpc29uIGlzIGJhc2VkIG9uIHRoZSBVbmljb2RlIHZhbHVlIG9mIGVhY2ggY2hhcmFjdGVyIGluCisgICAgICogdGhlIHN0cmluZ3MuIFRoZSBjaGFyYWN0ZXIgc2VxdWVuY2UgcmVwcmVzZW50ZWQgYnkgdGhpcworICAgICAqIDxjb2RlPlN0cmluZzwvY29kZT4gb2JqZWN0IGlzIGNvbXBhcmVkIGxleGljb2dyYXBoaWNhbGx5IHRvIHRoZQorICAgICAqIGNoYXJhY3RlciBzZXF1ZW5jZSByZXByZXNlbnRlZCBieSB0aGUgYXJndW1lbnQgc3RyaW5nLiBUaGUgcmVzdWx0IGlzCisgICAgICogYSBuZWdhdGl2ZSBpbnRlZ2VyIGlmIHRoaXMgPGNvZGU+U3RyaW5nPC9jb2RlPiBvYmplY3QKKyAgICAgKiBsZXhpY29ncmFwaGljYWxseSBwcmVjZWRlcyB0aGUgYXJndW1lbnQgc3RyaW5nLiBUaGUgcmVzdWx0IGlzIGEKKyAgICAgKiBwb3NpdGl2ZSBpbnRlZ2VyIGlmIHRoaXMgPGNvZGU+U3RyaW5nPC9jb2RlPiBvYmplY3QgbGV4aWNvZ3JhcGhpY2FsbHkKKyAgICAgKiBmb2xsb3dzIHRoZSBhcmd1bWVudCBzdHJpbmcuIFRoZSByZXN1bHQgaXMgemVybyBpZiB0aGUgc3RyaW5ncworICAgICAqIGFyZSBlcXVhbDsgPGNvZGU+Y29tcGFyZVRvPC9jb2RlPiByZXR1cm5zIDxjb2RlPjA8L2NvZGU+IGV4YWN0bHkgd2hlbgorICAgICAqIHRoZSB7QGxpbmsgI2VxdWFscyhPYmplY3QpfSBtZXRob2Qgd291bGQgcmV0dXJuIDxjb2RlPnRydWU8L2NvZGU+LgorICAgICAqIDxwPgorICAgICAqIFRoaXMgaXMgdGhlIGRlZmluaXRpb24gb2YgbGV4aWNvZ3JhcGhpYyBvcmRlcmluZy4gSWYgdHdvIHN0cmluZ3MgYXJlCisgICAgICogZGlmZmVyZW50LCB0aGVuIGVpdGhlciB0aGV5IGhhdmUgZGlmZmVyZW50IGNoYXJhY3RlcnMgYXQgc29tZSBpbmRleAorICAgICAqIHRoYXQgaXMgYSB2YWxpZCBpbmRleCBmb3IgYm90aCBzdHJpbmdzLCBvciB0aGVpciBsZW5ndGhzIGFyZSBkaWZmZXJlbnQsCisgICAgICogb3IgYm90aC4gSWYgdGhleSBoYXZlIGRpZmZlcmVudCBjaGFyYWN0ZXJzIGF0IG9uZSBvciBtb3JlIGluZGV4CisgICAgICogcG9zaXRpb25zLCBsZXQgPGk+azwvaT4gYmUgdGhlIHNtYWxsZXN0IHN1Y2ggaW5kZXg7IHRoZW4gdGhlIHN0cmluZworICAgICAqIHdob3NlIGNoYXJhY3RlciBhdCBwb3NpdGlvbiA8aT5rPC9pPiBoYXMgdGhlIHNtYWxsZXIgdmFsdWUsIGFzCisgICAgICogZGV0ZXJtaW5lZCBieSB1c2luZyB0aGUgJmx0OyBvcGVyYXRvciwgbGV4aWNvZ3JhcGhpY2FsbHkgcHJlY2VkZXMgdGhlCisgICAgICogb3RoZXIgc3RyaW5nLiBJbiB0aGlzIGNhc2UsIDxjb2RlPmNvbXBhcmVUbzwvY29kZT4gcmV0dXJucyB0aGUKKyAgICAgKiBkaWZmZXJlbmNlIG9mIHRoZSB0d28gY2hhcmFjdGVyIHZhbHVlcyBhdCBwb3NpdGlvbiA8Y29kZT5rPC9jb2RlPiBpbgorICAgICAqIHRoZSB0d28gc3RyaW5nIC0tIHRoYXQgaXMsIHRoZSB2YWx1ZToKKyAgICAgKiA8YmxvY2txdW90ZT48cHJlPgorICAgICAqIHRoaXMuY2hhckF0KGspLWFub3RoZXJTdHJpbmcuY2hhckF0KGspCisgICAgICogPC9wcmU+PC9ibG9ja3F1b3RlPgorICAgICAqIElmIHRoZXJlIGlzIG5vIGluZGV4IHBvc2l0aW9uIGF0IHdoaWNoIHRoZXkgZGlmZmVyLCB0aGVuIHRoZSBzaG9ydGVyCisgICAgICogc3RyaW5nIGxleGljb2dyYXBoaWNhbGx5IHByZWNlZGVzIHRoZSBsb25nZXIgc3RyaW5nLiBJbiB0aGlzIGNhc2UsCisgICAgICogPGNvZGU+Y29tcGFyZVRvPC9jb2RlPiByZXR1cm5zIHRoZSBkaWZmZXJlbmNlIG9mIHRoZSBsZW5ndGhzIG9mIHRoZQorICAgICAqIHN0cmluZ3MgLS0gdGhhdCBpcywgdGhlIHZhbHVlOgorICAgICAqIDxibG9ja3F1b3RlPjxwcmU+CisgICAgICogdGhpcy5sZW5ndGgoKS1hbm90aGVyU3RyaW5nLmxlbmd0aCgpCisgICAgICogPC9wcmU+PC9ibG9ja3F1b3RlPgorICAgICAqCisgICAgICogQHBhcmFtICAgYW5vdGhlclN0cmluZyAgIHRoZSA8Y29kZT5TdHJpbmc8L2NvZGU+IHRvIGJlIGNvbXBhcmVkLgorICAgICAqIEByZXR1cm4gIHRoZSB2YWx1ZSA8Y29kZT4wPC9jb2RlPiBpZiB0aGUgYXJndW1lbnQgc3RyaW5nIGlzIGVxdWFsIHRvCisgICAgICogICAgICAgICAgdGhpcyBzdHJpbmc7IGEgdmFsdWUgbGVzcyB0aGFuIDxjb2RlPjA8L2NvZGU+IGlmIHRoaXMgc3RyaW5nCisgICAgICogICAgICAgICAgaXMgbGV4aWNvZ3JhcGhpY2FsbHkgbGVzcyB0aGFuIHRoZSBzdHJpbmcgYXJndW1lbnQ7IGFuZCBhCisgICAgICogICAgICAgICAgdmFsdWUgZ3JlYXRlciB0aGFuIDxjb2RlPjA8L2NvZGU+IGlmIHRoaXMgc3RyaW5nIGlzCisgICAgICogICAgICAgICAgbGV4aWNvZ3JhcGhpY2FsbHkgZ3JlYXRlciB0aGFuIHRoZSBzdHJpbmcgYXJndW1lbnQuCisgICAgICovCisgICAgcHVibGljIGludCBjb21wYXJlVG8oU3RyaW5nIGFub3RoZXJTdHJpbmcpIHsKKwlpbnQgbGVuMSA9IGNvdW50OworCWludCBsZW4yID0gYW5vdGhlclN0cmluZy5jb3VudDsKKwlpbnQgbiA9IE1hdGgubWluKGxlbjEsIGxlbjIpOworCWNoYXIgdjFbXSA9IHZhbHVlOworCWNoYXIgdjJbXSA9IGFub3RoZXJTdHJpbmcudmFsdWU7CisJaW50IGkgPSBvZmZzZXQ7CisJaW50IGogPSBhbm90aGVyU3RyaW5nLm9mZnNldDsKKworCWlmIChpID09IGopIHsKKwkgICAgaW50IGsgPSBpOworCSAgICBpbnQgbGltID0gbiArIGk7CisJICAgIHdoaWxlIChrIDwgbGltKSB7CisJCWNoYXIgYzEgPSB2MVtrXTsKKwkJY2hhciBjMiA9IHYyW2tdOworCQlpZiAoYzEgIT0gYzIpIHsKKwkJICAgIHJldHVybiBjMSAtIGMyOworCQl9CisJCWsrKzsKKwkgICAgfQorCX0gZWxzZSB7CisJICAgIHdoaWxlIChuLS0gIT0gMCkgeworCQljaGFyIGMxID0gdjFbaSsrXTsKKwkJY2hhciBjMiA9IHYyW2orK107CisJCWlmIChjMSAhPSBjMikgeworCQkgICAgcmV0dXJuIGMxIC0gYzI7CisJCX0KKwkgICAgfQorCX0KKwlyZXR1cm4gbGVuMSAtIGxlbjI7CisgICAgfQorCisgICAgLyoqCisgICAgICogQSBDb21wYXJhdG9yIHRoYXQgb3JkZXJzIDxjb2RlPlN0cmluZzwvY29kZT4gb2JqZWN0cyBhcyBieQorICAgICAqIDxjb2RlPmNvbXBhcmVUb0lnbm9yZUNhc2U8L2NvZGU+LiBUaGlzIGNvbXBhcmF0b3IgaXMgc2VyaWFsaXphYmxlLgorICAgICAqIDxwPgorICAgICAqIE5vdGUgdGhhdCB0aGlzIENvbXBhcmF0b3IgZG9lcyA8ZW0+bm90PC9lbT4gdGFrZSBsb2NhbGUgaW50byBhY2NvdW50LAorICAgICAqIGFuZCB3aWxsIHJlc3VsdCBpbiBhbiB1bnNhdGlzZmFjdG9yeSBvcmRlcmluZyBmb3IgY2VydGFpbiBsb2NhbGVzLgorICAgICAqIFRoZSBqYXZhLnRleHQgcGFja2FnZSBwcm92aWRlcyA8ZW0+Q29sbGF0b3JzPC9lbT4gdG8gYWxsb3cKKyAgICAgKiBsb2NhbGUtc2Vuc2l0aXZlIG9yZGVyaW5nLgorICAgICAqCisgICAgICogQHNlZSAgICAgamF2YS50ZXh0LkNvbGxhdG9yI2NvbXBhcmUoU3RyaW5nLCBTdHJpbmcpCisgICAgICogQHNpbmNlICAgMS4yCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBDb21wYXJhdG9yPFN0cmluZz4gQ0FTRV9JTlNFTlNJVElWRV9PUkRFUgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IG5ldyBDYXNlSW5zZW5zaXRpdmVDb21wYXJhdG9yKCk7CisgICAgcHJpdmF0ZSBzdGF0aWMgY2xhc3MgQ2FzZUluc2Vuc2l0aXZlQ29tcGFyYXRvcgorICAgICAgICAgICAgICAgICAgICAgICAgIGltcGxlbWVudHMgQ29tcGFyYXRvcjxTdHJpbmc+LCBqYXZhLmlvLlNlcmlhbGl6YWJsZSB7CisJLy8gdXNlIHNlcmlhbFZlcnNpb25VSUQgZnJvbSBKREsgMS4yLjIgZm9yIGludGVyb3BlcmFiaWxpdHkKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBsb25nIHNlcmlhbFZlcnNpb25VSUQgPSA4NTc1Nzk5ODA4OTMzMDI5MzI2TDsKKworICAgICAgICBwdWJsaWMgaW50IGNvbXBhcmUoU3RyaW5nIHMxLCBTdHJpbmcgczIpIHsKKyAgICAgICAgICAgIGludCBuMT1zMS5sZW5ndGgoKSwgbjI9czIubGVuZ3RoKCk7CisgICAgICAgICAgICBmb3IgKGludCBpMT0wLCBpMj0wOyBpMTxuMSAmJiBpMjxuMjsgaTErKywgaTIrKykgeworICAgICAgICAgICAgICAgIGNoYXIgYzEgPSBzMS5jaGFyQXQoaTEpOworICAgICAgICAgICAgICAgIGNoYXIgYzIgPSBzMi5jaGFyQXQoaTIpOworICAgICAgICAgICAgICAgIGlmIChjMSAhPSBjMikgeworICAgICAgICAgICAgICAgICAgICBjMSA9IENoYXJhY3Rlci50b1VwcGVyQ2FzZShjMSk7CisgICAgICAgICAgICAgICAgICAgIGMyID0gQ2hhcmFjdGVyLnRvVXBwZXJDYXNlKGMyKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGMxICE9IGMyKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBjMSA9IENoYXJhY3Rlci50b0xvd2VyQ2FzZShjMSk7CisgICAgICAgICAgICAgICAgICAgICAgICBjMiA9IENoYXJhY3Rlci50b0xvd2VyQ2FzZShjMik7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYzEgIT0gYzIpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYzEgLSBjMjsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBuMSAtIG4yOworICAgICAgICB9CisgICAgfQorCisgICAgLyoqCisgICAgICogQ29tcGFyZXMgdHdvIHN0cmluZ3MgbGV4aWNvZ3JhcGhpY2FsbHksIGlnbm9yaW5nIGNhc2UKKyAgICAgKiBkaWZmZXJlbmNlcy4gVGhpcyBtZXRob2QgcmV0dXJucyBhbiBpbnRlZ2VyIHdob3NlIHNpZ24gaXMgdGhhdCBvZgorICAgICAqIGNhbGxpbmcgPGNvZGU+Y29tcGFyZVRvPC9jb2RlPiB3aXRoIG5vcm1hbGl6ZWQgdmVyc2lvbnMgb2YgdGhlIHN0cmluZ3MKKyAgICAgKiB3aGVyZSBjYXNlIGRpZmZlcmVuY2VzIGhhdmUgYmVlbiBlbGltaW5hdGVkIGJ5IGNhbGxpbmcKKyAgICAgKiA8Y29kZT5DaGFyYWN0ZXIudG9Mb3dlckNhc2UoQ2hhcmFjdGVyLnRvVXBwZXJDYXNlKGNoYXJhY3RlcikpPC9jb2RlPiBvbgorICAgICAqIGVhY2ggY2hhcmFjdGVyLgorICAgICAqIDxwPgorICAgICAqIE5vdGUgdGhhdCB0aGlzIG1ldGhvZCBkb2VzIDxlbT5ub3Q8L2VtPiB0YWtlIGxvY2FsZSBpbnRvIGFjY291bnQsCisgICAgICogYW5kIHdpbGwgcmVzdWx0IGluIGFuIHVuc2F0aXNmYWN0b3J5IG9yZGVyaW5nIGZvciBjZXJ0YWluIGxvY2FsZXMuCisgICAgICogVGhlIGphdmEudGV4dCBwYWNrYWdlIHByb3ZpZGVzIDxlbT5jb2xsYXRvcnM8L2VtPiB0byBhbGxvdworICAgICAqIGxvY2FsZS1zZW5zaXRpdmUgb3JkZXJpbmcuCisgICAgICoKKyAgICAgKiBAcGFyYW0gICBzdHIgICB0aGUgPGNvZGU+U3RyaW5nPC9jb2RlPiB0byBiZSBjb21wYXJlZC4KKyAgICAgKiBAcmV0dXJuICBhIG5lZ2F0aXZlIGludGVnZXIsIHplcm8sIG9yIGEgcG9zaXRpdmUgaW50ZWdlciBhcyB0aGUKKyAgICAgKgkJc3BlY2lmaWVkIFN0cmluZyBpcyBncmVhdGVyIHRoYW4sIGVxdWFsIHRvLCBvciBsZXNzCisgICAgICoJCXRoYW4gdGhpcyBTdHJpbmcsIGlnbm9yaW5nIGNhc2UgY29uc2lkZXJhdGlvbnMuCisgICAgICogQHNlZSAgICAgamF2YS50ZXh0LkNvbGxhdG9yI2NvbXBhcmUoU3RyaW5nLCBTdHJpbmcpCisgICAgICogQHNpbmNlICAgMS4yCisgICAgICovCisgICAgcHVibGljIGludCBjb21wYXJlVG9JZ25vcmVDYXNlKFN0cmluZyBzdHIpIHsKKyAgICAgICAgcmV0dXJuIENBU0VfSU5TRU5TSVRJVkVfT1JERVIuY29tcGFyZSh0aGlzLCBzdHIpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFRlc3RzIGlmIHR3byBzdHJpbmcgcmVnaW9ucyBhcmUgZXF1YWwuCisgICAgICogPHA+CisgICAgICogQSBzdWJzdHJpbmcgb2YgdGhpcyA8dHQ+U3RyaW5nPC90dD4gb2JqZWN0IGlzIGNvbXBhcmVkIHRvIGEgc3Vic3RyaW5nCisgICAgICogb2YgdGhlIGFyZ3VtZW50IG90aGVyLiBUaGUgcmVzdWx0IGlzIHRydWUgaWYgdGhlc2Ugc3Vic3RyaW5ncworICAgICAqIHJlcHJlc2VudCBpZGVudGljYWwgY2hhcmFjdGVyIHNlcXVlbmNlcy4gVGhlIHN1YnN0cmluZyBvZiB0aGlzCisgICAgICogPHR0PlN0cmluZzwvdHQ+IG9iamVjdCB0byBiZSBjb21wYXJlZCBiZWdpbnMgYXQgaW5kZXggPHR0PnRvZmZzZXQ8L3R0PgorICAgICAqIGFuZCBoYXMgbGVuZ3RoIDx0dD5sZW48L3R0Pi4gVGhlIHN1YnN0cmluZyBvZiBvdGhlciB0byBiZSBjb21wYXJlZAorICAgICAqIGJlZ2lucyBhdCBpbmRleCA8dHQ+b29mZnNldDwvdHQ+IGFuZCBoYXMgbGVuZ3RoIDx0dD5sZW48L3R0Pi4gVGhlCisgICAgICogcmVzdWx0IGlzIDx0dD5mYWxzZTwvdHQ+IGlmIGFuZCBvbmx5IGlmIGF0IGxlYXN0IG9uZSBvZiB0aGUgZm9sbG93aW5nCisgICAgICogaXMgdHJ1ZToKKyAgICAgKiA8dWw+PGxpPjx0dD50b2Zmc2V0PC90dD4gaXMgbmVnYXRpdmUuCisgICAgICogPGxpPjx0dD5vb2Zmc2V0PC90dD4gaXMgbmVnYXRpdmUuCisgICAgICogPGxpPjx0dD50b2Zmc2V0K2xlbjwvdHQ+IGlzIGdyZWF0ZXIgdGhhbiB0aGUgbGVuZ3RoIG9mIHRoaXMKKyAgICAgKiA8dHQ+U3RyaW5nPC90dD4gb2JqZWN0LgorICAgICAqIDxsaT48dHQ+b29mZnNldCtsZW48L3R0PiBpcyBncmVhdGVyIHRoYW4gdGhlIGxlbmd0aCBvZiB0aGUgb3RoZXIKKyAgICAgKiBhcmd1bWVudC4KKyAgICAgKiA8bGk+VGhlcmUgaXMgc29tZSBub25uZWdhdGl2ZSBpbnRlZ2VyIDxpPms8L2k+IGxlc3MgdGhhbiA8dHQ+bGVuPC90dD4KKyAgICAgKiBzdWNoIHRoYXQ6CisgICAgICogPHR0PnRoaXMuY2hhckF0KHRvZmZzZXQrPGk+azwvaT4pJm5ic3A7IT0mbmJzcDtvdGhlci5jaGFyQXQob29mZnNldCs8aT5rPC9pPik8L3R0PgorICAgICAqIDwvdWw+CisgICAgICoKKyAgICAgKiBAcGFyYW0gICB0b2Zmc2V0ICAgdGhlIHN0YXJ0aW5nIG9mZnNldCBvZiB0aGUgc3VicmVnaW9uIGluIHRoaXMgc3RyaW5nLgorICAgICAqIEBwYXJhbSAgIG90aGVyICAgICB0aGUgc3RyaW5nIGFyZ3VtZW50LgorICAgICAqIEBwYXJhbSAgIG9vZmZzZXQgICB0aGUgc3RhcnRpbmcgb2Zmc2V0IG9mIHRoZSBzdWJyZWdpb24gaW4gdGhlIHN0cmluZworICAgICAqICAgICAgICAgICAgICAgICAgICBhcmd1bWVudC4KKyAgICAgKiBAcGFyYW0gICBsZW4gICAgICAgdGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIHRvIGNvbXBhcmUuCisgICAgICogQHJldHVybiAgPGNvZGU+dHJ1ZTwvY29kZT4gaWYgdGhlIHNwZWNpZmllZCBzdWJyZWdpb24gb2YgdGhpcyBzdHJpbmcKKyAgICAgKiAgICAgICAgICBleGFjdGx5IG1hdGNoZXMgdGhlIHNwZWNpZmllZCBzdWJyZWdpb24gb2YgdGhlIHN0cmluZyBhcmd1bWVudDsKKyAgICAgKiAgICAgICAgICA8Y29kZT5mYWxzZTwvY29kZT4gb3RoZXJ3aXNlLgorICAgICAqLworICAgIHB1YmxpYyBib29sZWFuIHJlZ2lvbk1hdGNoZXMoaW50IHRvZmZzZXQsIFN0cmluZyBvdGhlciwgaW50IG9vZmZzZXQsCisJCQkJIGludCBsZW4pIHsKKwljaGFyIHRhW10gPSB2YWx1ZTsKKwlpbnQgdG8gPSBvZmZzZXQgKyB0b2Zmc2V0OworCWNoYXIgcGFbXSA9IG90aGVyLnZhbHVlOworCWludCBwbyA9IG90aGVyLm9mZnNldCArIG9vZmZzZXQ7CisJLy8gTm90ZTogdG9mZnNldCwgb29mZnNldCwgb3IgbGVuIG1pZ2h0IGJlIG5lYXIgLTE+Pj4xLgorCWlmICgob29mZnNldCA8IDApIHx8ICh0b2Zmc2V0IDwgMCkgfHwgKHRvZmZzZXQgPiAobG9uZyljb3VudCAtIGxlbikKKwkgICAgfHwgKG9vZmZzZXQgPiAobG9uZylvdGhlci5jb3VudCAtIGxlbikpIHsKKwkgICAgcmV0dXJuIGZhbHNlOworCX0KKwl3aGlsZSAobGVuLS0gPiAwKSB7CisJICAgIGlmICh0YVt0bysrXSAhPSBwYVtwbysrXSkgeworCSAgICAgICAgcmV0dXJuIGZhbHNlOworCSAgICB9CisJfQorCXJldHVybiB0cnVlOworICAgIH0KKworICAgIC8qKgorICAgICAqIFRlc3RzIGlmIHR3byBzdHJpbmcgcmVnaW9ucyBhcmUgZXF1YWwuCisgICAgICogPHA+CisgICAgICogQSBzdWJzdHJpbmcgb2YgdGhpcyA8dHQ+U3RyaW5nPC90dD4gb2JqZWN0IGlzIGNvbXBhcmVkIHRvIGEgc3Vic3RyaW5nCisgICAgICogb2YgdGhlIGFyZ3VtZW50IDx0dD5vdGhlcjwvdHQ+LiBUaGUgcmVzdWx0IGlzIDx0dD50cnVlPC90dD4gaWYgdGhlc2UKKyAgICAgKiBzdWJzdHJpbmdzIHJlcHJlc2VudCBjaGFyYWN0ZXIgc2VxdWVuY2VzIHRoYXQgYXJlIHRoZSBzYW1lLCBpZ25vcmluZworICAgICAqIGNhc2UgaWYgYW5kIG9ubHkgaWYgPHR0Pmlnbm9yZUNhc2U8L3R0PiBpcyB0cnVlLiBUaGUgc3Vic3RyaW5nIG9mCisgICAgICogdGhpcyA8dHQ+U3RyaW5nPC90dD4gb2JqZWN0IHRvIGJlIGNvbXBhcmVkIGJlZ2lucyBhdCBpbmRleAorICAgICAqIDx0dD50b2Zmc2V0PC90dD4gYW5kIGhhcyBsZW5ndGggPHR0PmxlbjwvdHQ+LiBUaGUgc3Vic3RyaW5nIG9mCisgICAgICogPHR0Pm90aGVyPC90dD4gdG8gYmUgY29tcGFyZWQgYmVnaW5zIGF0IGluZGV4IDx0dD5vb2Zmc2V0PC90dD4gYW5kCisgICAgICogaGFzIGxlbmd0aCA8dHQ+bGVuPC90dD4uIFRoZSByZXN1bHQgaXMgPHR0PmZhbHNlPC90dD4gaWYgYW5kIG9ubHkgaWYKKyAgICAgKiBhdCBsZWFzdCBvbmUgb2YgdGhlIGZvbGxvd2luZyBpcyB0cnVlOgorICAgICAqIDx1bD48bGk+PHR0PnRvZmZzZXQ8L3R0PiBpcyBuZWdhdGl2ZS4KKyAgICAgKiA8bGk+PHR0Pm9vZmZzZXQ8L3R0PiBpcyBuZWdhdGl2ZS4KKyAgICAgKiA8bGk+PHR0PnRvZmZzZXQrbGVuPC90dD4gaXMgZ3JlYXRlciB0aGFuIHRoZSBsZW5ndGggb2YgdGhpcworICAgICAqIDx0dD5TdHJpbmc8L3R0PiBvYmplY3QuCisgICAgICogPGxpPjx0dD5vb2Zmc2V0K2xlbjwvdHQ+IGlzIGdyZWF0ZXIgdGhhbiB0aGUgbGVuZ3RoIG9mIHRoZSBvdGhlcgorICAgICAqIGFyZ3VtZW50LgorICAgICAqIDxsaT48dHQ+aWdub3JlQ2FzZTwvdHQ+IGlzIDx0dD5mYWxzZTwvdHQ+IGFuZCB0aGVyZSBpcyBzb21lIG5vbm5lZ2F0aXZlCisgICAgICogaW50ZWdlciA8aT5rPC9pPiBsZXNzIHRoYW4gPHR0PmxlbjwvdHQ+IHN1Y2ggdGhhdDoKKyAgICAgKiA8YmxvY2txdW90ZT48cHJlPgorICAgICAqIHRoaXMuY2hhckF0KHRvZmZzZXQraykgIT0gb3RoZXIuY2hhckF0KG9vZmZzZXQraykKKyAgICAgKiA8L3ByZT48L2Jsb2NrcXVvdGU+CisgICAgICogPGxpPjx0dD5pZ25vcmVDYXNlPC90dD4gaXMgPHR0PnRydWU8L3R0PiBhbmQgdGhlcmUgaXMgc29tZSBub25uZWdhdGl2ZQorICAgICAqIGludGVnZXIgPGk+azwvaT4gbGVzcyB0aGFuIDx0dD5sZW48L3R0PiBzdWNoIHRoYXQ6CisgICAgICogPGJsb2NrcXVvdGU+PHByZT4KKyAgICAgKiBDaGFyYWN0ZXIudG9Mb3dlckNhc2UodGhpcy5jaGFyQXQodG9mZnNldCtrKSkgIT0KKyAgICAgICAgICAgICAgIENoYXJhY3Rlci50b0xvd2VyQ2FzZShvdGhlci5jaGFyQXQob29mZnNldCtrKSkKKyAgICAgKiA8L3ByZT48L2Jsb2NrcXVvdGU+CisgICAgICogYW5kOgorICAgICAqIDxibG9ja3F1b3RlPjxwcmU+CisgICAgICogQ2hhcmFjdGVyLnRvVXBwZXJDYXNlKHRoaXMuY2hhckF0KHRvZmZzZXQraykpICE9CisgICAgICogICAgICAgICBDaGFyYWN0ZXIudG9VcHBlckNhc2Uob3RoZXIuY2hhckF0KG9vZmZzZXQraykpCisgICAgICogPC9wcmU+PC9ibG9ja3F1b3RlPgorICAgICAqIDwvdWw+CisgICAgICoKKyAgICAgKiBAcGFyYW0gICBpZ25vcmVDYXNlICAgaWYgPGNvZGU+dHJ1ZTwvY29kZT4sIGlnbm9yZSBjYXNlIHdoZW4gY29tcGFyaW5nCisgICAgICogICAgICAgICAgICAgICAgICAgICAgIGNoYXJhY3RlcnMuCisgICAgICogQHBhcmFtICAgdG9mZnNldCAgICAgIHRoZSBzdGFydGluZyBvZmZzZXQgb2YgdGhlIHN1YnJlZ2lvbiBpbiB0aGlzCisgICAgICogICAgICAgICAgICAgICAgICAgICAgIHN0cmluZy4KKyAgICAgKiBAcGFyYW0gICBvdGhlciAgICAgICAgdGhlIHN0cmluZyBhcmd1bWVudC4KKyAgICAgKiBAcGFyYW0gICBvb2Zmc2V0ICAgICAgdGhlIHN0YXJ0aW5nIG9mZnNldCBvZiB0aGUgc3VicmVnaW9uIGluIHRoZSBzdHJpbmcKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgYXJndW1lbnQuCisgICAgICogQHBhcmFtICAgbGVuICAgICAgICAgIHRoZSBudW1iZXIgb2YgY2hhcmFjdGVycyB0byBjb21wYXJlLgorICAgICAqIEByZXR1cm4gIDxjb2RlPnRydWU8L2NvZGU+IGlmIHRoZSBzcGVjaWZpZWQgc3VicmVnaW9uIG9mIHRoaXMgc3RyaW5nCisgICAgICogICAgICAgICAgbWF0Y2hlcyB0aGUgc3BlY2lmaWVkIHN1YnJlZ2lvbiBvZiB0aGUgc3RyaW5nIGFyZ3VtZW50OworICAgICAqICAgICAgICAgIDxjb2RlPmZhbHNlPC9jb2RlPiBvdGhlcndpc2UuIFdoZXRoZXIgdGhlIG1hdGNoaW5nIGlzIGV4YWN0CisgICAgICogICAgICAgICAgb3IgY2FzZSBpbnNlbnNpdGl2ZSBkZXBlbmRzIG9uIHRoZSA8Y29kZT5pZ25vcmVDYXNlPC9jb2RlPgorICAgICAqICAgICAgICAgIGFyZ3VtZW50LgorICAgICAqLworICAgIHB1YmxpYyBib29sZWFuIHJlZ2lvbk1hdGNoZXMoYm9vbGVhbiBpZ25vcmVDYXNlLCBpbnQgdG9mZnNldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBvdGhlciwgaW50IG9vZmZzZXQsIGludCBsZW4pIHsKKyAgICAgICAgY2hhciB0YVtdID0gdmFsdWU7CisgICAgICAgIGludCB0byA9IG9mZnNldCArIHRvZmZzZXQ7CisgICAgICAgIGNoYXIgcGFbXSA9IG90aGVyLnZhbHVlOworICAgICAgICBpbnQgcG8gPSBvdGhlci5vZmZzZXQgKyBvb2Zmc2V0OworICAgICAgICAvLyBOb3RlOiB0b2Zmc2V0LCBvb2Zmc2V0LCBvciBsZW4gbWlnaHQgYmUgbmVhciAtMT4+PjEuCisgICAgICAgIGlmICgob29mZnNldCA8IDApIHx8ICh0b2Zmc2V0IDwgMCkgfHwgKHRvZmZzZXQgPiAobG9uZyljb3VudCAtIGxlbikgfHwKKyAgICAgICAgICAgICAgICAob29mZnNldCA+IChsb25nKW90aGVyLmNvdW50IC0gbGVuKSkgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIHdoaWxlIChsZW4tLSA+IDApIHsKKyAgICAgICAgICAgIGNoYXIgYzEgPSB0YVt0bysrXTsKKyAgICAgICAgICAgIGNoYXIgYzIgPSBwYVtwbysrXTsKKyAgICAgICAgICAgIGlmIChjMSA9PSBjMikgeworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGlnbm9yZUNhc2UpIHsKKyAgICAgICAgICAgICAgICAvLyBJZiBjaGFyYWN0ZXJzIGRvbid0IG1hdGNoIGJ1dCBjYXNlIG1heSBiZSBpZ25vcmVkLAorICAgICAgICAgICAgICAgIC8vIHRyeSBjb252ZXJ0aW5nIGJvdGggY2hhcmFjdGVycyB0byB1cHBlcmNhc2UuCisgICAgICAgICAgICAgICAgLy8gSWYgdGhlIHJlc3VsdHMgbWF0Y2gsIHRoZW4gdGhlIGNvbXBhcmlzb24gc2NhbiBzaG91bGQKKyAgICAgICAgICAgICAgICAvLyBjb250aW51ZS4KKyAgICAgICAgICAgICAgICBjaGFyIHUxID0gQ2hhcmFjdGVyLnRvVXBwZXJDYXNlKGMxKTsKKyAgICAgICAgICAgICAgICBjaGFyIHUyID0gQ2hhcmFjdGVyLnRvVXBwZXJDYXNlKGMyKTsKKyAgICAgICAgICAgICAgICBpZiAodTEgPT0gdTIpIHsKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIC8vIFVuZm9ydHVuYXRlbHksIGNvbnZlcnNpb24gdG8gdXBwZXJjYXNlIGRvZXMgbm90IHdvcmsgcHJvcGVybHkKKyAgICAgICAgICAgICAgICAvLyBmb3IgdGhlIEdlb3JnaWFuIGFscGhhYmV0LCB3aGljaCBoYXMgc3RyYW5nZSBydWxlcyBhYm91dCBjYXNlCisgICAgICAgICAgICAgICAgLy8gY29udmVyc2lvbi4gIFNvIHdlIG5lZWQgdG8gbWFrZSBvbmUgbGFzdCBjaGVjayBiZWZvcmUKKyAgICAgICAgICAgICAgICAvLyBleGl0aW5nLgorICAgICAgICAgICAgICAgIGlmIChDaGFyYWN0ZXIudG9Mb3dlckNhc2UodTEpID09IENoYXJhY3Rlci50b0xvd2VyQ2FzZSh1MikpIHsKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIC8qKgorICAgICAqIFRlc3RzIGlmIHRoaXMgc3RyaW5nIHN0YXJ0cyB3aXRoIHRoZSBzcGVjaWZpZWQgcHJlZml4IGJlZ2lubmluZworICAgICAqIGEgc3BlY2lmaWVkIGluZGV4LgorICAgICAqCisgICAgICogQHBhcmFtICAgcHJlZml4ICAgIHRoZSBwcmVmaXguCisgICAgICogQHBhcmFtICAgdG9mZnNldCAgIHdoZXJlIHRvIGJlZ2luIGxvb2tpbmcgaW4gdGhlIHN0cmluZy4KKyAgICAgKiBAcmV0dXJuICA8Y29kZT50cnVlPC9jb2RlPiBpZiB0aGUgY2hhcmFjdGVyIHNlcXVlbmNlIHJlcHJlc2VudGVkIGJ5IHRoZQorICAgICAqICAgICAgICAgIGFyZ3VtZW50IGlzIGEgcHJlZml4IG9mIHRoZSBzdWJzdHJpbmcgb2YgdGhpcyBvYmplY3Qgc3RhcnRpbmcKKyAgICAgKiAgICAgICAgICBhdCBpbmRleCA8Y29kZT50b2Zmc2V0PC9jb2RlPjsgPGNvZGU+ZmFsc2U8L2NvZGU+IG90aGVyd2lzZS4KKyAgICAgKiAgICAgICAgICBUaGUgcmVzdWx0IGlzIDxjb2RlPmZhbHNlPC9jb2RlPiBpZiA8Y29kZT50b2Zmc2V0PC9jb2RlPiBpcworICAgICAqICAgICAgICAgIG5lZ2F0aXZlIG9yIGdyZWF0ZXIgdGhhbiB0aGUgbGVuZ3RoIG9mIHRoaXMKKyAgICAgKiAgICAgICAgICA8Y29kZT5TdHJpbmc8L2NvZGU+IG9iamVjdDsgb3RoZXJ3aXNlIHRoZSByZXN1bHQgaXMgdGhlIHNhbWUKKyAgICAgKiAgICAgICAgICBhcyB0aGUgcmVzdWx0IG9mIHRoZSBleHByZXNzaW9uCisgICAgICogICAgICAgICAgPHByZT4KKyAgICAgKiAgICAgICAgICB0aGlzLnN1YnN0cmluZyh0b2Zmc2V0KS5zdGFydHNXaXRoKHByZWZpeCkKKyAgICAgKiAgICAgICAgICA8L3ByZT4KKyAgICAgKi8KKyAgICBwdWJsaWMgYm9vbGVhbiBzdGFydHNXaXRoKFN0cmluZyBwcmVmaXgsIGludCB0b2Zmc2V0KSB7CisJY2hhciB0YVtdID0gdmFsdWU7CisJaW50IHRvID0gb2Zmc2V0ICsgdG9mZnNldDsKKwljaGFyIHBhW10gPSBwcmVmaXgudmFsdWU7CisJaW50IHBvID0gcHJlZml4Lm9mZnNldDsKKwlpbnQgcGMgPSBwcmVmaXguY291bnQ7CisJLy8gTm90ZTogdG9mZnNldCBtaWdodCBiZSBuZWFyIC0xPj4+MS4KKwlpZiAoKHRvZmZzZXQgPCAwKSB8fCAodG9mZnNldCA+IGNvdW50IC0gcGMpKSB7CisJICAgIHJldHVybiBmYWxzZTsKKwl9CisJd2hpbGUgKC0tcGMgPj0gMCkgeworCSAgICBpZiAodGFbdG8rK10gIT0gcGFbcG8rK10pIHsKKwkgICAgICAgIHJldHVybiBmYWxzZTsKKwkgICAgfQorCX0KKwlyZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBUZXN0cyBpZiB0aGlzIHN0cmluZyBzdGFydHMgd2l0aCB0aGUgc3BlY2lmaWVkIHByZWZpeC4KKyAgICAgKgorICAgICAqIEBwYXJhbSAgIHByZWZpeCAgIHRoZSBwcmVmaXguCisgICAgICogQHJldHVybiAgPGNvZGU+dHJ1ZTwvY29kZT4gaWYgdGhlIGNoYXJhY3RlciBzZXF1ZW5jZSByZXByZXNlbnRlZCBieSB0aGUKKyAgICAgKiAgICAgICAgICBhcmd1bWVudCBpcyBhIHByZWZpeCBvZiB0aGUgY2hhcmFjdGVyIHNlcXVlbmNlIHJlcHJlc2VudGVkIGJ5CisgICAgICogICAgICAgICAgdGhpcyBzdHJpbmc7IDxjb2RlPmZhbHNlPC9jb2RlPiBvdGhlcndpc2UuCisgICAgICogICAgICAgICAgTm90ZSBhbHNvIHRoYXQgPGNvZGU+dHJ1ZTwvY29kZT4gd2lsbCBiZSByZXR1cm5lZCBpZiB0aGUKKyAgICAgKiAgICAgICAgICBhcmd1bWVudCBpcyBhbiBlbXB0eSBzdHJpbmcgb3IgaXMgZXF1YWwgdG8gdGhpcworICAgICAqICAgICAgICAgIDxjb2RlPlN0cmluZzwvY29kZT4gb2JqZWN0IGFzIGRldGVybWluZWQgYnkgdGhlCisgICAgICogICAgICAgICAge0BsaW5rICNlcXVhbHMoT2JqZWN0KX0gbWV0aG9kLgorICAgICAqIEBzaW5jZSAgIDEuIDAKKyAgICAgKi8KKyAgICBwdWJsaWMgYm9vbGVhbiBzdGFydHNXaXRoKFN0cmluZyBwcmVmaXgpIHsKKwlyZXR1cm4gc3RhcnRzV2l0aChwcmVmaXgsIDApOworICAgIH0KKworICAgIC8qKgorICAgICAqIFRlc3RzIGlmIHRoaXMgc3RyaW5nIGVuZHMgd2l0aCB0aGUgc3BlY2lmaWVkIHN1ZmZpeC4KKyAgICAgKgorICAgICAqIEBwYXJhbSAgIHN1ZmZpeCAgIHRoZSBzdWZmaXguCisgICAgICogQHJldHVybiAgPGNvZGU+dHJ1ZTwvY29kZT4gaWYgdGhlIGNoYXJhY3RlciBzZXF1ZW5jZSByZXByZXNlbnRlZCBieSB0aGUKKyAgICAgKiAgICAgICAgICBhcmd1bWVudCBpcyBhIHN1ZmZpeCBvZiB0aGUgY2hhcmFjdGVyIHNlcXVlbmNlIHJlcHJlc2VudGVkIGJ5CisgICAgICogICAgICAgICAgdGhpcyBvYmplY3Q7IDxjb2RlPmZhbHNlPC9jb2RlPiBvdGhlcndpc2UuIE5vdGUgdGhhdCB0aGUKKyAgICAgKiAgICAgICAgICByZXN1bHQgd2lsbCBiZSA8Y29kZT50cnVlPC9jb2RlPiBpZiB0aGUgYXJndW1lbnQgaXMgdGhlCisgICAgICogICAgICAgICAgZW1wdHkgc3RyaW5nIG9yIGlzIGVxdWFsIHRvIHRoaXMgPGNvZGU+U3RyaW5nPC9jb2RlPiBvYmplY3QKKyAgICAgKiAgICAgICAgICBhcyBkZXRlcm1pbmVkIGJ5IHRoZSB7QGxpbmsgI2VxdWFscyhPYmplY3QpfSBtZXRob2QuCisgICAgICovCisgICAgcHVibGljIGJvb2xlYW4gZW5kc1dpdGgoU3RyaW5nIHN1ZmZpeCkgeworCXJldHVybiBzdGFydHNXaXRoKHN1ZmZpeCwgY291bnQgLSBzdWZmaXguY291bnQpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFJldHVybnMgYSBoYXNoIGNvZGUgZm9yIHRoaXMgc3RyaW5nLiBUaGUgaGFzaCBjb2RlIGZvciBhCisgICAgICogPGNvZGU+U3RyaW5nPC9jb2RlPiBvYmplY3QgaXMgY29tcHV0ZWQgYXMKKyAgICAgKiA8YmxvY2txdW90ZT48cHJlPgorICAgICAqIHNbMF0qMzFeKG4tMSkgKyBzWzFdKjMxXihuLTIpICsgLi4uICsgc1tuLTFdCisgICAgICogPC9wcmU+PC9ibG9ja3F1b3RlPgorICAgICAqIHVzaW5nIDxjb2RlPmludDwvY29kZT4gYXJpdGhtZXRpYywgd2hlcmUgPGNvZGU+c1tpXTwvY29kZT4gaXMgdGhlCisgICAgICogPGk+aTwvaT50aCBjaGFyYWN0ZXIgb2YgdGhlIHN0cmluZywgPGNvZGU+bjwvY29kZT4gaXMgdGhlIGxlbmd0aCBvZgorICAgICAqIHRoZSBzdHJpbmcsIGFuZCA8Y29kZT5ePC9jb2RlPiBpbmRpY2F0ZXMgZXhwb25lbnRpYXRpb24uCisgICAgICogKFRoZSBoYXNoIHZhbHVlIG9mIHRoZSBlbXB0eSBzdHJpbmcgaXMgemVyby4pCisgICAgICoKKyAgICAgKiBAcmV0dXJuICBhIGhhc2ggY29kZSB2YWx1ZSBmb3IgdGhpcyBvYmplY3QuCisgICAgICovCisgICAgcHVibGljIGludCBoYXNoQ29kZSgpIHsKKwlpbnQgaCA9IGhhc2g7CisJaWYgKGggPT0gMCkgeworCSAgICBpbnQgb2ZmID0gb2Zmc2V0OworCSAgICBjaGFyIHZhbFtdID0gdmFsdWU7CisJICAgIGludCBsZW4gPSBjb3VudDsKKworICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW47IGkrKykgeworICAgICAgICAgICAgICAgIGggPSAzMSpoICsgdmFsW29mZisrXTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGhhc2ggPSBoOworICAgICAgICB9CisgICAgICAgIHJldHVybiBoOworICAgIH0KKworICAgIC8qKgorICAgICAqIFJldHVybnMgdGhlIGluZGV4IHdpdGhpbiB0aGlzIHN0cmluZyBvZiB0aGUgZmlyc3Qgb2NjdXJyZW5jZSBvZgorICAgICAqIHRoZSBzcGVjaWZpZWQgY2hhcmFjdGVyLiBJZiBhIGNoYXJhY3RlciB3aXRoIHZhbHVlCisgICAgICogPGNvZGU+Y2g8L2NvZGU+IG9jY3VycyBpbiB0aGUgY2hhcmFjdGVyIHNlcXVlbmNlIHJlcHJlc2VudGVkIGJ5CisgICAgICogdGhpcyA8Y29kZT5TdHJpbmc8L2NvZGU+IG9iamVjdCwgdGhlbiB0aGUgaW5kZXggKGluIFVuaWNvZGUKKyAgICAgKiBjb2RlIHVuaXRzKSBvZiB0aGUgZmlyc3Qgc3VjaCBvY2N1cnJlbmNlIGlzIHJldHVybmVkLiBGb3IKKyAgICAgKiB2YWx1ZXMgb2YgPGNvZGU+Y2g8L2NvZGU+IGluIHRoZSByYW5nZSBmcm9tIDAgdG8gMHhGRkZGCisgICAgICogKGluY2x1c2l2ZSksIHRoaXMgaXMgdGhlIHNtYWxsZXN0IHZhbHVlIDxpPms8L2k+IHN1Y2ggdGhhdDoKKyAgICAgKiA8YmxvY2txdW90ZT48cHJlPgorICAgICAqIHRoaXMuY2hhckF0KDxpPms8L2k+KSA9PSBjaAorICAgICAqIDwvcHJlPjwvYmxvY2txdW90ZT4KKyAgICAgKiBpcyB0cnVlLiBGb3Igb3RoZXIgdmFsdWVzIG9mIDxjb2RlPmNoPC9jb2RlPiwgaXQgaXMgdGhlCisgICAgICogc21hbGxlc3QgdmFsdWUgPGk+azwvaT4gc3VjaCB0aGF0OgorICAgICAqIDxibG9ja3F1b3RlPjxwcmU+CisgICAgICogdGhpcy5jb2RlUG9pbnRBdCg8aT5rPC9pPikgPT0gY2gKKyAgICAgKiA8L3ByZT48L2Jsb2NrcXVvdGU+CisgICAgICogaXMgdHJ1ZS4gSW4gZWl0aGVyIGNhc2UsIGlmIG5vIHN1Y2ggY2hhcmFjdGVyIG9jY3VycyBpbiB0aGlzCisgICAgICogc3RyaW5nLCB0aGVuIDxjb2RlPi0xPC9jb2RlPiBpcyByZXR1cm5lZC4KKyAgICAgKgorICAgICAqIEBwYXJhbSAgIGNoICAgYSBjaGFyYWN0ZXIgKFVuaWNvZGUgY29kZSBwb2ludCkuCisgICAgICogQHJldHVybiAgdGhlIGluZGV4IG9mIHRoZSBmaXJzdCBvY2N1cnJlbmNlIG9mIHRoZSBjaGFyYWN0ZXIgaW4gdGhlCisgICAgICogICAgICAgICAgY2hhcmFjdGVyIHNlcXVlbmNlIHJlcHJlc2VudGVkIGJ5IHRoaXMgb2JqZWN0LCBvcgorICAgICAqICAgICAgICAgIDxjb2RlPi0xPC9jb2RlPiBpZiB0aGUgY2hhcmFjdGVyIGRvZXMgbm90IG9jY3VyLgorICAgICAqLworICAgIHB1YmxpYyBpbnQgaW5kZXhPZihpbnQgY2gpIHsKKwlyZXR1cm4gaW5kZXhPZihjaCwgMCk7CisgICAgfQorCisgICAgLyoqCisgICAgICogUmV0dXJucyB0aGUgaW5kZXggd2l0aGluIHRoaXMgc3RyaW5nIG9mIHRoZSBmaXJzdCBvY2N1cnJlbmNlIG9mIHRoZQorICAgICAqIHNwZWNpZmllZCBjaGFyYWN0ZXIsIHN0YXJ0aW5nIHRoZSBzZWFyY2ggYXQgdGhlIHNwZWNpZmllZCBpbmRleC4KKyAgICAgKiA8cD4KKyAgICAgKiBJZiBhIGNoYXJhY3RlciB3aXRoIHZhbHVlIDxjb2RlPmNoPC9jb2RlPiBvY2N1cnMgaW4gdGhlCisgICAgICogY2hhcmFjdGVyIHNlcXVlbmNlIHJlcHJlc2VudGVkIGJ5IHRoaXMgPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIG9iamVjdCBhdCBhbiBpbmRleCBubyBzbWFsbGVyIHRoYW4gPGNvZGU+ZnJvbUluZGV4PC9jb2RlPiwgdGhlbgorICAgICAqIHRoZSBpbmRleCBvZiB0aGUgZmlyc3Qgc3VjaCBvY2N1cnJlbmNlIGlzIHJldHVybmVkLiBGb3IgdmFsdWVzCisgICAgICogb2YgPGNvZGU+Y2g8L2NvZGU+IGluIHRoZSByYW5nZSBmcm9tIDAgdG8gMHhGRkZGIChpbmNsdXNpdmUpLAorICAgICAqIHRoaXMgaXMgdGhlIHNtYWxsZXN0IHZhbHVlIDxpPms8L2k+IHN1Y2ggdGhhdDoKKyAgICAgKiA8YmxvY2txdW90ZT48cHJlPgorICAgICAqICh0aGlzLmNoYXJBdCg8aT5rPC9pPikgPT0gY2gpICYmICg8aT5rPC9pPiAmZ3Q7PSBmcm9tSW5kZXgpCisgICAgICogPC9wcmU+PC9ibG9ja3F1b3RlPgorICAgICAqIGlzIHRydWUuIEZvciBvdGhlciB2YWx1ZXMgb2YgPGNvZGU+Y2g8L2NvZGU+LCBpdCBpcyB0aGUKKyAgICAgKiBzbWFsbGVzdCB2YWx1ZSA8aT5rPC9pPiBzdWNoIHRoYXQ6CisgICAgICogPGJsb2NrcXVvdGU+PHByZT4KKyAgICAgKiAodGhpcy5jb2RlUG9pbnRBdCg8aT5rPC9pPikgPT0gY2gpICYmICg8aT5rPC9pPiAmZ3Q7PSBmcm9tSW5kZXgpCisgICAgICogPC9wcmU+PC9ibG9ja3F1b3RlPgorICAgICAqIGlzIHRydWUuIEluIGVpdGhlciBjYXNlLCBpZiBubyBzdWNoIGNoYXJhY3RlciBvY2N1cnMgaW4gdGhpcworICAgICAqIHN0cmluZyBhdCBvciBhZnRlciBwb3NpdGlvbiA8Y29kZT5mcm9tSW5kZXg8L2NvZGU+LCB0aGVuCisgICAgICogPGNvZGU+LTE8L2NvZGU+IGlzIHJldHVybmVkLgorICAgICAqCisgICAgICogPHA+CisgICAgICogVGhlcmUgaXMgbm8gcmVzdHJpY3Rpb24gb24gdGhlIHZhbHVlIG9mIDxjb2RlPmZyb21JbmRleDwvY29kZT4uIElmIGl0CisgICAgICogaXMgbmVnYXRpdmUsIGl0IGhhcyB0aGUgc2FtZSBlZmZlY3QgYXMgaWYgaXQgd2VyZSB6ZXJvOiB0aGlzIGVudGlyZQorICAgICAqIHN0cmluZyBtYXkgYmUgc2VhcmNoZWQuIElmIGl0IGlzIGdyZWF0ZXIgdGhhbiB0aGUgbGVuZ3RoIG9mIHRoaXMKKyAgICAgKiBzdHJpbmcsIGl0IGhhcyB0aGUgc2FtZSBlZmZlY3QgYXMgaWYgaXQgd2VyZSBlcXVhbCB0byB0aGUgbGVuZ3RoIG9mCisgICAgICogdGhpcyBzdHJpbmc6IDxjb2RlPi0xPC9jb2RlPiBpcyByZXR1cm5lZC4KKyAgICAgKgorICAgICAqIDxwPkFsbCBpbmRpY2VzIGFyZSBzcGVjaWZpZWQgaW4gPGNvZGU+Y2hhcjwvY29kZT4gdmFsdWVzCisgICAgICogKFVuaWNvZGUgY29kZSB1bml0cykuCisgICAgICoKKyAgICAgKiBAcGFyYW0gICBjaCAgICAgICAgICBhIGNoYXJhY3RlciAoVW5pY29kZSBjb2RlIHBvaW50KS4KKyAgICAgKiBAcGFyYW0gICBmcm9tSW5kZXggICB0aGUgaW5kZXggdG8gc3RhcnQgdGhlIHNlYXJjaCBmcm9tLgorICAgICAqIEByZXR1cm4gIHRoZSBpbmRleCBvZiB0aGUgZmlyc3Qgb2NjdXJyZW5jZSBvZiB0aGUgY2hhcmFjdGVyIGluIHRoZQorICAgICAqICAgICAgICAgIGNoYXJhY3RlciBzZXF1ZW5jZSByZXByZXNlbnRlZCBieSB0aGlzIG9iamVjdCB0aGF0IGlzIGdyZWF0ZXIKKyAgICAgKiAgICAgICAgICB0aGFuIG9yIGVxdWFsIHRvIDxjb2RlPmZyb21JbmRleDwvY29kZT4sIG9yIDxjb2RlPi0xPC9jb2RlPgorICAgICAqICAgICAgICAgIGlmIHRoZSBjaGFyYWN0ZXIgZG9lcyBub3Qgb2NjdXIuCisgICAgICovCisgICAgcHVibGljIGludCBpbmRleE9mKGludCBjaCwgaW50IGZyb21JbmRleCkgeworCWludCBtYXggPSBvZmZzZXQgKyBjb3VudDsKKwljaGFyIHZbXSA9IHZhbHVlOworCisJaWYgKGZyb21JbmRleCA8IDApIHsKKwkgICAgZnJvbUluZGV4ID0gMDsKKwl9IGVsc2UgaWYgKGZyb21JbmRleCA+PSBjb3VudCkgeworCSAgICAvLyBOb3RlOiBmcm9tSW5kZXggbWlnaHQgYmUgbmVhciAtMT4+PjEuCisJICAgIHJldHVybiAtMTsKKwl9CisKKwlpbnQgaSA9IG9mZnNldCArIGZyb21JbmRleDsKKwlpZiAoY2ggPCBDaGFyYWN0ZXIuTUlOX1NVUFBMRU1FTlRBUllfQ09ERV9QT0lOVCkgeworCSAgICAvLyBoYW5kbGUgbW9zdCBjYXNlcyBoZXJlIChjaCBpcyBhIEJNUCBjb2RlIHBvaW50IG9yIGEKKwkgICAgLy8gbmVnYXRpdmUgdmFsdWUgKGludmFsaWQgY29kZSBwb2ludCkpCisJICAgIGZvciAoOyBpIDwgbWF4IDsgaSsrKSB7CisJCWlmICh2W2ldID09IGNoKSB7CisJCSAgICByZXR1cm4gaSAtIG9mZnNldDsKKwkJfQorCSAgICB9CisJICAgIHJldHVybiAtMTsKKwl9CisKKwlpZiAoY2ggPD0gQ2hhcmFjdGVyLk1BWF9DT0RFX1BPSU5UKSB7CisJICAgIC8vIGhhbmRsZSBzdXBwbGVtZW50YXJ5IGNoYXJhY3RlcnMgaGVyZQorCSAgICBjaGFyW10gc3Vycm9nYXRlcyA9IENoYXJhY3Rlci50b0NoYXJzKGNoKTsKKwkgICAgZm9yICg7IGkgPCBtYXg7IGkrKykgeworCQlpZiAodltpXSA9PSBzdXJyb2dhdGVzWzBdKSB7CisJCSAgICBpZiAoaSArIDEgPT0gbWF4KSB7CisJCQlicmVhazsKKwkJICAgIH0KKwkJICAgIGlmICh2W2krMV0gPT0gc3Vycm9nYXRlc1sxXSkgeworCQkJcmV0dXJuIGkgLSBvZmZzZXQ7CisJCSAgICB9CisJCX0KKwkgICAgfQorCX0KKwlyZXR1cm4gLTE7CisgICAgfQorCisgICAgLyoqCisgICAgICogUmV0dXJucyB0aGUgaW5kZXggd2l0aGluIHRoaXMgc3RyaW5nIG9mIHRoZSBsYXN0IG9jY3VycmVuY2Ugb2YKKyAgICAgKiB0aGUgc3BlY2lmaWVkIGNoYXJhY3Rlci4gRm9yIHZhbHVlcyBvZiA8Y29kZT5jaDwvY29kZT4gaW4gdGhlCisgICAgICogcmFuZ2UgZnJvbSAwIHRvIDB4RkZGRiAoaW5jbHVzaXZlKSwgdGhlIGluZGV4IChpbiBVbmljb2RlIGNvZGUKKyAgICAgKiB1bml0cykgcmV0dXJuZWQgaXMgdGhlIGxhcmdlc3QgdmFsdWUgPGk+azwvaT4gc3VjaCB0aGF0OgorICAgICAqIDxibG9ja3F1b3RlPjxwcmU+CisgICAgICogdGhpcy5jaGFyQXQoPGk+azwvaT4pID09IGNoCisgICAgICogPC9wcmU+PC9ibG9ja3F1b3RlPgorICAgICAqIGlzIHRydWUuIEZvciBvdGhlciB2YWx1ZXMgb2YgPGNvZGU+Y2g8L2NvZGU+LCBpdCBpcyB0aGUKKyAgICAgKiBsYXJnZXN0IHZhbHVlIDxpPms8L2k+IHN1Y2ggdGhhdDoKKyAgICAgKiA8YmxvY2txdW90ZT48cHJlPgorICAgICAqIHRoaXMuY29kZVBvaW50QXQoPGk+azwvaT4pID09IGNoCisgICAgICogPC9wcmU+PC9ibG9ja3F1b3RlPgorICAgICAqIGlzIHRydWUuICBJbiBlaXRoZXIgY2FzZSwgaWYgbm8gc3VjaCBjaGFyYWN0ZXIgb2NjdXJzIGluIHRoaXMKKyAgICAgKiBzdHJpbmcsIHRoZW4gPGNvZGU+LTE8L2NvZGU+IGlzIHJldHVybmVkLiAgVGhlCisgICAgICogPGNvZGU+U3RyaW5nPC9jb2RlPiBpcyBzZWFyY2hlZCBiYWNrd2FyZHMgc3RhcnRpbmcgYXQgdGhlIGxhc3QKKyAgICAgKiBjaGFyYWN0ZXIuCisgICAgICoKKyAgICAgKiBAcGFyYW0gICBjaCAgIGEgY2hhcmFjdGVyIChVbmljb2RlIGNvZGUgcG9pbnQpLgorICAgICAqIEByZXR1cm4gIHRoZSBpbmRleCBvZiB0aGUgbGFzdCBvY2N1cnJlbmNlIG9mIHRoZSBjaGFyYWN0ZXIgaW4gdGhlCisgICAgICogICAgICAgICAgY2hhcmFjdGVyIHNlcXVlbmNlIHJlcHJlc2VudGVkIGJ5IHRoaXMgb2JqZWN0LCBvcgorICAgICAqICAgICAgICAgIDxjb2RlPi0xPC9jb2RlPiBpZiB0aGUgY2hhcmFjdGVyIGRvZXMgbm90IG9jY3VyLgorICAgICAqLworICAgIHB1YmxpYyBpbnQgbGFzdEluZGV4T2YoaW50IGNoKSB7CisJcmV0dXJuIGxhc3RJbmRleE9mKGNoLCBjb3VudCAtIDEpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFJldHVybnMgdGhlIGluZGV4IHdpdGhpbiB0aGlzIHN0cmluZyBvZiB0aGUgbGFzdCBvY2N1cnJlbmNlIG9mCisgICAgICogdGhlIHNwZWNpZmllZCBjaGFyYWN0ZXIsIHNlYXJjaGluZyBiYWNrd2FyZCBzdGFydGluZyBhdCB0aGUKKyAgICAgKiBzcGVjaWZpZWQgaW5kZXguIEZvciB2YWx1ZXMgb2YgPGNvZGU+Y2g8L2NvZGU+IGluIHRoZSByYW5nZQorICAgICAqIGZyb20gMCB0byAweEZGRkYgKGluY2x1c2l2ZSksIHRoZSBpbmRleCByZXR1cm5lZCBpcyB0aGUgbGFyZ2VzdAorICAgICAqIHZhbHVlIDxpPms8L2k+IHN1Y2ggdGhhdDoKKyAgICAgKiA8YmxvY2txdW90ZT48cHJlPgorICAgICAqICh0aGlzLmNoYXJBdCg8aT5rPC9pPikgPT0gY2gpICYmICg8aT5rPC9pPiAmbHQ7PSBmcm9tSW5kZXgpCisgICAgICogPC9wcmU+PC9ibG9ja3F1b3RlPgorICAgICAqIGlzIHRydWUuIEZvciBvdGhlciB2YWx1ZXMgb2YgPGNvZGU+Y2g8L2NvZGU+LCBpdCBpcyB0aGUKKyAgICAgKiBsYXJnZXN0IHZhbHVlIDxpPms8L2k+IHN1Y2ggdGhhdDoKKyAgICAgKiA8YmxvY2txdW90ZT48cHJlPgorICAgICAqICh0aGlzLmNvZGVQb2ludEF0KDxpPms8L2k+KSA9PSBjaCkgJiYgKDxpPms8L2k+ICZsdDs9IGZyb21JbmRleCkKKyAgICAgKiA8L3ByZT48L2Jsb2NrcXVvdGU+CisgICAgICogaXMgdHJ1ZS4gSW4gZWl0aGVyIGNhc2UsIGlmIG5vIHN1Y2ggY2hhcmFjdGVyIG9jY3VycyBpbiB0aGlzCisgICAgICogc3RyaW5nIGF0IG9yIGJlZm9yZSBwb3NpdGlvbiA8Y29kZT5mcm9tSW5kZXg8L2NvZGU+LCB0aGVuCisgICAgICogPGNvZGU+LTE8L2NvZGU+IGlzIHJldHVybmVkLgorICAgICAqCisgICAgICogPHA+QWxsIGluZGljZXMgYXJlIHNwZWNpZmllZCBpbiA8Y29kZT5jaGFyPC9jb2RlPiB2YWx1ZXMKKyAgICAgKiAoVW5pY29kZSBjb2RlIHVuaXRzKS4KKyAgICAgKgorICAgICAqIEBwYXJhbSAgIGNoICAgICAgICAgIGEgY2hhcmFjdGVyIChVbmljb2RlIGNvZGUgcG9pbnQpLgorICAgICAqIEBwYXJhbSAgIGZyb21JbmRleCAgIHRoZSBpbmRleCB0byBzdGFydCB0aGUgc2VhcmNoIGZyb20uIFRoZXJlIGlzIG5vCisgICAgICogICAgICAgICAgcmVzdHJpY3Rpb24gb24gdGhlIHZhbHVlIG9mIDxjb2RlPmZyb21JbmRleDwvY29kZT4uIElmIGl0IGlzCisgICAgICogICAgICAgICAgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIHRoZSBsZW5ndGggb2YgdGhpcyBzdHJpbmcsIGl0IGhhcworICAgICAqICAgICAgICAgIHRoZSBzYW1lIGVmZmVjdCBhcyBpZiBpdCB3ZXJlIGVxdWFsIHRvIG9uZSBsZXNzIHRoYW4gdGhlCisgICAgICogICAgICAgICAgbGVuZ3RoIG9mIHRoaXMgc3RyaW5nOiB0aGlzIGVudGlyZSBzdHJpbmcgbWF5IGJlIHNlYXJjaGVkLgorICAgICAqICAgICAgICAgIElmIGl0IGlzIG5lZ2F0aXZlLCBpdCBoYXMgdGhlIHNhbWUgZWZmZWN0IGFzIGlmIGl0IHdlcmUgLTE6CisgICAgICogICAgICAgICAgLTEgaXMgcmV0dXJuZWQuCisgICAgICogQHJldHVybiAgdGhlIGluZGV4IG9mIHRoZSBsYXN0IG9jY3VycmVuY2Ugb2YgdGhlIGNoYXJhY3RlciBpbiB0aGUKKyAgICAgKiAgICAgICAgICBjaGFyYWN0ZXIgc2VxdWVuY2UgcmVwcmVzZW50ZWQgYnkgdGhpcyBvYmplY3QgdGhhdCBpcyBsZXNzCisgICAgICogICAgICAgICAgdGhhbiBvciBlcXVhbCB0byA8Y29kZT5mcm9tSW5kZXg8L2NvZGU+LCBvciA8Y29kZT4tMTwvY29kZT4KKyAgICAgKiAgICAgICAgICBpZiB0aGUgY2hhcmFjdGVyIGRvZXMgbm90IG9jY3VyIGJlZm9yZSB0aGF0IHBvaW50LgorICAgICAqLworICAgIHB1YmxpYyBpbnQgbGFzdEluZGV4T2YoaW50IGNoLCBpbnQgZnJvbUluZGV4KSB7CisJaW50IG1pbiA9IG9mZnNldDsKKwljaGFyIHZbXSA9IHZhbHVlOworCisJaW50IGkgPSBvZmZzZXQgKyAoKGZyb21JbmRleCA+PSBjb3VudCkgPyBjb3VudCAtIDEgOiBmcm9tSW5kZXgpOworCisJaWYgKGNoIDwgQ2hhcmFjdGVyLk1JTl9TVVBQTEVNRU5UQVJZX0NPREVfUE9JTlQpIHsKKwkgICAgLy8gaGFuZGxlIG1vc3QgY2FzZXMgaGVyZSAoY2ggaXMgYSBCTVAgY29kZSBwb2ludCBvciBhCisJICAgIC8vIG5lZ2F0aXZlIHZhbHVlIChpbnZhbGlkIGNvZGUgcG9pbnQpKQorCSAgICBmb3IgKDsgaSA+PSBtaW4gOyBpLS0pIHsKKwkJaWYgKHZbaV0gPT0gY2gpIHsKKwkJICAgIHJldHVybiBpIC0gb2Zmc2V0OworCQl9CisJICAgIH0KKwkgICAgcmV0dXJuIC0xOworCX0KKworCWludCBtYXggPSBvZmZzZXQgKyBjb3VudDsKKwlpZiAoY2ggPD0gQ2hhcmFjdGVyLk1BWF9DT0RFX1BPSU5UKSB7CisJICAgIC8vIGhhbmRsZSBzdXBwbGVtZW50YXJ5IGNoYXJhY3RlcnMgaGVyZQorCSAgICBjaGFyW10gc3Vycm9nYXRlcyA9IENoYXJhY3Rlci50b0NoYXJzKGNoKTsKKwkgICAgZm9yICg7IGkgPj0gbWluOyBpLS0pIHsKKwkJaWYgKHZbaV0gPT0gc3Vycm9nYXRlc1swXSkgeworCQkgICAgaWYgKGkgKyAxID09IG1heCkgeworCQkJYnJlYWs7CisJCSAgICB9CisJCSAgICBpZiAodltpKzFdID09IHN1cnJvZ2F0ZXNbMV0pIHsKKwkJCXJldHVybiBpIC0gb2Zmc2V0OworCQkgICAgfQorCQl9CisJICAgIH0KKwl9CisJcmV0dXJuIC0xOworICAgIH0KKworICAgIC8qKgorICAgICAqIFJldHVybnMgdGhlIGluZGV4IHdpdGhpbiB0aGlzIHN0cmluZyBvZiB0aGUgZmlyc3Qgb2NjdXJyZW5jZSBvZiB0aGUKKyAgICAgKiBzcGVjaWZpZWQgc3Vic3RyaW5nLiBUaGUgaW50ZWdlciByZXR1cm5lZCBpcyB0aGUgc21hbGxlc3QgdmFsdWUKKyAgICAgKiA8aT5rPC9pPiBzdWNoIHRoYXQ6CisgICAgICogPGJsb2NrcXVvdGU+PHByZT4KKyAgICAgKiB0aGlzLnN0YXJ0c1dpdGgoc3RyLCA8aT5rPC9pPikKKyAgICAgKiA8L3ByZT48L2Jsb2NrcXVvdGU+CisgICAgICogaXMgPGNvZGU+dHJ1ZTwvY29kZT4uCisgICAgICoKKyAgICAgKiBAcGFyYW0gICBzdHIgICBhbnkgc3RyaW5nLgorICAgICAqIEByZXR1cm4gIGlmIHRoZSBzdHJpbmcgYXJndW1lbnQgb2NjdXJzIGFzIGEgc3Vic3RyaW5nIHdpdGhpbiB0aGlzCisgICAgICogICAgICAgICAgb2JqZWN0LCB0aGVuIHRoZSBpbmRleCBvZiB0aGUgZmlyc3QgY2hhcmFjdGVyIG9mIHRoZSBmaXJzdAorICAgICAqICAgICAgICAgIHN1Y2ggc3Vic3RyaW5nIGlzIHJldHVybmVkOyBpZiBpdCBkb2VzIG5vdCBvY2N1ciBhcyBhCisgICAgICogICAgICAgICAgc3Vic3RyaW5nLCA8Y29kZT4tMTwvY29kZT4gaXMgcmV0dXJuZWQuCisgICAgICovCisgICAgcHVibGljIGludCBpbmRleE9mKFN0cmluZyBzdHIpIHsKKwlyZXR1cm4gaW5kZXhPZihzdHIsIDApOworICAgIH0KKworICAgIC8qKgorICAgICAqIFJldHVybnMgdGhlIGluZGV4IHdpdGhpbiB0aGlzIHN0cmluZyBvZiB0aGUgZmlyc3Qgb2NjdXJyZW5jZSBvZiB0aGUKKyAgICAgKiBzcGVjaWZpZWQgc3Vic3RyaW5nLCBzdGFydGluZyBhdCB0aGUgc3BlY2lmaWVkIGluZGV4LiAgVGhlIGludGVnZXIKKyAgICAgKiByZXR1cm5lZCBpcyB0aGUgc21hbGxlc3QgdmFsdWUgPHR0Pms8L3R0PiBmb3Igd2hpY2g6CisgICAgICogPGJsb2NrcXVvdGU+PHByZT4KKyAgICAgKiAgICAgayAmZ3Q7PSBNYXRoLm1pbihmcm9tSW5kZXgsIHN0ci5sZW5ndGgoKSkgJiYgdGhpcy5zdGFydHNXaXRoKHN0ciwgaykKKyAgICAgKiA8L3ByZT48L2Jsb2NrcXVvdGU+CisgICAgICogSWYgbm8gc3VjaCB2YWx1ZSBvZiA8aT5rPC9pPiBleGlzdHMsIHRoZW4gLTEgaXMgcmV0dXJuZWQuCisgICAgICoKKyAgICAgKiBAcGFyYW0gICBzdHIgICAgICAgICB0aGUgc3Vic3RyaW5nIGZvciB3aGljaCB0byBzZWFyY2guCisgICAgICogQHBhcmFtICAgZnJvbUluZGV4ICAgdGhlIGluZGV4IGZyb20gd2hpY2ggdG8gc3RhcnQgdGhlIHNlYXJjaC4KKyAgICAgKiBAcmV0dXJuICB0aGUgaW5kZXggd2l0aGluIHRoaXMgc3RyaW5nIG9mIHRoZSBmaXJzdCBvY2N1cnJlbmNlIG9mIHRoZQorICAgICAqICAgICAgICAgIHNwZWNpZmllZCBzdWJzdHJpbmcsIHN0YXJ0aW5nIGF0IHRoZSBzcGVjaWZpZWQgaW5kZXguCisgICAgICovCisgICAgcHVibGljIGludCBpbmRleE9mKFN0cmluZyBzdHIsIGludCBmcm9tSW5kZXgpIHsKKyAgICAgICAgcmV0dXJuIGluZGV4T2YodmFsdWUsIG9mZnNldCwgY291bnQsCisgICAgICAgICAgICAgICAgICAgICAgIHN0ci52YWx1ZSwgc3RyLm9mZnNldCwgc3RyLmNvdW50LCBmcm9tSW5kZXgpOworICAgIH0KKworICAgIC8qKgorICAgICAqIENvZGUgc2hhcmVkIGJ5IFN0cmluZyBhbmQgU3RyaW5nQnVmZmVyIHRvIGRvIHNlYXJjaGVzLiBUaGUKKyAgICAgKiBzb3VyY2UgaXMgdGhlIGNoYXJhY3RlciBhcnJheSBiZWluZyBzZWFyY2hlZCwgYW5kIHRoZSB0YXJnZXQKKyAgICAgKiBpcyB0aGUgc3RyaW5nIGJlaW5nIHNlYXJjaGVkIGZvci4KKyAgICAgKgorICAgICAqIEBwYXJhbSAgIHNvdXJjZSAgICAgICB0aGUgY2hhcmFjdGVycyBiZWluZyBzZWFyY2hlZC4KKyAgICAgKiBAcGFyYW0gICBzb3VyY2VPZmZzZXQgb2Zmc2V0IG9mIHRoZSBzb3VyY2Ugc3RyaW5nLgorICAgICAqIEBwYXJhbSAgIHNvdXJjZUNvdW50ICBjb3VudCBvZiB0aGUgc291cmNlIHN0cmluZy4KKyAgICAgKiBAcGFyYW0gICB0YXJnZXQgICAgICAgdGhlIGNoYXJhY3RlcnMgYmVpbmcgc2VhcmNoZWQgZm9yLgorICAgICAqIEBwYXJhbSAgIHRhcmdldE9mZnNldCBvZmZzZXQgb2YgdGhlIHRhcmdldCBzdHJpbmcuCisgICAgICogQHBhcmFtICAgdGFyZ2V0Q291bnQgIGNvdW50IG9mIHRoZSB0YXJnZXQgc3RyaW5nLgorICAgICAqIEBwYXJhbSAgIGZyb21JbmRleCAgICB0aGUgaW5kZXggdG8gYmVnaW4gc2VhcmNoaW5nIGZyb20uCisgICAgICovCisgICAgc3RhdGljIGludCBpbmRleE9mKGNoYXJbXSBzb3VyY2UsIGludCBzb3VyY2VPZmZzZXQsIGludCBzb3VyY2VDb3VudCwKKyAgICAgICAgICAgICAgICAgICAgICAgY2hhcltdIHRhcmdldCwgaW50IHRhcmdldE9mZnNldCwgaW50IHRhcmdldENvdW50LAorICAgICAgICAgICAgICAgICAgICAgICBpbnQgZnJvbUluZGV4KSB7CisJaWYgKGZyb21JbmRleCA+PSBzb3VyY2VDb3VudCkgeworICAgICAgICAgICAgcmV0dXJuICh0YXJnZXRDb3VudCA9PSAwID8gc291cmNlQ291bnQgOiAtMSk7CisJfQorICAgIAlpZiAoZnJvbUluZGV4IDwgMCkgeworICAgIAkgICAgZnJvbUluZGV4ID0gMDsKKyAgICAJfQorCWlmICh0YXJnZXRDb3VudCA9PSAwKSB7CisJICAgIHJldHVybiBmcm9tSW5kZXg7CisJfQorCisgICAgICAgIGNoYXIgZmlyc3QgID0gdGFyZ2V0W3RhcmdldE9mZnNldF07CisgICAgICAgIGludCBtYXggPSBzb3VyY2VPZmZzZXQgKyAoc291cmNlQ291bnQgLSB0YXJnZXRDb3VudCk7CisKKyAgICAgICAgZm9yIChpbnQgaSA9IHNvdXJjZU9mZnNldCArIGZyb21JbmRleDsgaSA8PSBtYXg7IGkrKykgeworICAgICAgICAgICAgLyogTG9vayBmb3IgZmlyc3QgY2hhcmFjdGVyLiAqLworICAgICAgICAgICAgaWYgKHNvdXJjZVtpXSAhPSBmaXJzdCkgeworICAgICAgICAgICAgICAgIHdoaWxlICgrK2kgPD0gbWF4ICYmIHNvdXJjZVtpXSAhPSBmaXJzdCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8qIEZvdW5kIGZpcnN0IGNoYXJhY3Rlciwgbm93IGxvb2sgYXQgdGhlIHJlc3Qgb2YgdjIgKi8KKyAgICAgICAgICAgIGlmIChpIDw9IG1heCkgeworICAgICAgICAgICAgICAgIGludCBqID0gaSArIDE7CisgICAgICAgICAgICAgICAgaW50IGVuZCA9IGogKyB0YXJnZXRDb3VudCAtIDE7CisgICAgICAgICAgICAgICAgZm9yIChpbnQgayA9IHRhcmdldE9mZnNldCArIDE7IGogPCBlbmQgJiYgc291cmNlW2pdID09CisgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0W2tdOyBqKyssIGsrKyk7CisKKyAgICAgICAgICAgICAgICBpZiAoaiA9PSBlbmQpIHsKKyAgICAgICAgICAgICAgICAgICAgLyogRm91bmQgd2hvbGUgc3RyaW5nLiAqLworICAgICAgICAgICAgICAgICAgICByZXR1cm4gaSAtIHNvdXJjZU9mZnNldDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIC8qKgorICAgICAqIFJldHVybnMgdGhlIGluZGV4IHdpdGhpbiB0aGlzIHN0cmluZyBvZiB0aGUgcmlnaHRtb3N0IG9jY3VycmVuY2UKKyAgICAgKiBvZiB0aGUgc3BlY2lmaWVkIHN1YnN0cmluZy4gIFRoZSByaWdodG1vc3QgZW1wdHkgc3RyaW5nICIiIGlzCisgICAgICogY29uc2lkZXJlZCB0byBvY2N1ciBhdCB0aGUgaW5kZXggdmFsdWUgPGNvZGU+dGhpcy5sZW5ndGgoKTwvY29kZT4uCisgICAgICogVGhlIHJldHVybmVkIGluZGV4IGlzIHRoZSBsYXJnZXN0IHZhbHVlIDxpPms8L2k+IHN1Y2ggdGhhdAorICAgICAqIDxibG9ja3F1b3RlPjxwcmU+CisgICAgICogdGhpcy5zdGFydHNXaXRoKHN0ciwgaykKKyAgICAgKiA8L3ByZT48L2Jsb2NrcXVvdGU+CisgICAgICogaXMgdHJ1ZS4KKyAgICAgKgorICAgICAqIEBwYXJhbSAgIHN0ciAgIHRoZSBzdWJzdHJpbmcgdG8gc2VhcmNoIGZvci4KKyAgICAgKiBAcmV0dXJuICBpZiB0aGUgc3RyaW5nIGFyZ3VtZW50IG9jY3VycyBvbmUgb3IgbW9yZSB0aW1lcyBhcyBhIHN1YnN0cmluZworICAgICAqICAgICAgICAgIHdpdGhpbiB0aGlzIG9iamVjdCwgdGhlbiB0aGUgaW5kZXggb2YgdGhlIGZpcnN0IGNoYXJhY3RlciBvZgorICAgICAqICAgICAgICAgIHRoZSBsYXN0IHN1Y2ggc3Vic3RyaW5nIGlzIHJldHVybmVkLiBJZiBpdCBkb2VzIG5vdCBvY2N1ciBhcworICAgICAqICAgICAgICAgIGEgc3Vic3RyaW5nLCA8Y29kZT4tMTwvY29kZT4gaXMgcmV0dXJuZWQuCisgICAgICovCisgICAgcHVibGljIGludCBsYXN0SW5kZXhPZihTdHJpbmcgc3RyKSB7CisJcmV0dXJuIGxhc3RJbmRleE9mKHN0ciwgY291bnQpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFJldHVybnMgdGhlIGluZGV4IHdpdGhpbiB0aGlzIHN0cmluZyBvZiB0aGUgbGFzdCBvY2N1cnJlbmNlIG9mIHRoZQorICAgICAqIHNwZWNpZmllZCBzdWJzdHJpbmcsIHNlYXJjaGluZyBiYWNrd2FyZCBzdGFydGluZyBhdCB0aGUgc3BlY2lmaWVkIGluZGV4LgorICAgICAqIFRoZSBpbnRlZ2VyIHJldHVybmVkIGlzIHRoZSBsYXJnZXN0IHZhbHVlIDxpPms8L2k+IHN1Y2ggdGhhdDoKKyAgICAgKiA8YmxvY2txdW90ZT48cHJlPgorICAgICAqICAgICBrICZsdDs9IE1hdGgubWluKGZyb21JbmRleCwgc3RyLmxlbmd0aCgpKSAmJiB0aGlzLnN0YXJ0c1dpdGgoc3RyLCBrKQorICAgICAqIDwvcHJlPjwvYmxvY2txdW90ZT4KKyAgICAgKiBJZiBubyBzdWNoIHZhbHVlIG9mIDxpPms8L2k+IGV4aXN0cywgdGhlbiAtMSBpcyByZXR1cm5lZC4KKyAgICAgKgorICAgICAqIEBwYXJhbSAgIHN0ciAgICAgICAgIHRoZSBzdWJzdHJpbmcgdG8gc2VhcmNoIGZvci4KKyAgICAgKiBAcGFyYW0gICBmcm9tSW5kZXggICB0aGUgaW5kZXggdG8gc3RhcnQgdGhlIHNlYXJjaCBmcm9tLgorICAgICAqIEByZXR1cm4gIHRoZSBpbmRleCB3aXRoaW4gdGhpcyBzdHJpbmcgb2YgdGhlIGxhc3Qgb2NjdXJyZW5jZSBvZiB0aGUKKyAgICAgKiAgICAgICAgICBzcGVjaWZpZWQgc3Vic3RyaW5nLgorICAgICAqLworICAgIHB1YmxpYyBpbnQgbGFzdEluZGV4T2YoU3RyaW5nIHN0ciwgaW50IGZyb21JbmRleCkgeworICAgICAgICByZXR1cm4gbGFzdEluZGV4T2YodmFsdWUsIG9mZnNldCwgY291bnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHIudmFsdWUsIHN0ci5vZmZzZXQsIHN0ci5jb3VudCwgZnJvbUluZGV4KTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDb2RlIHNoYXJlZCBieSBTdHJpbmcgYW5kIFN0cmluZ0J1ZmZlciB0byBkbyBzZWFyY2hlcy4gVGhlCisgICAgICogc291cmNlIGlzIHRoZSBjaGFyYWN0ZXIgYXJyYXkgYmVpbmcgc2VhcmNoZWQsIGFuZCB0aGUgdGFyZ2V0CisgICAgICogaXMgdGhlIHN0cmluZyBiZWluZyBzZWFyY2hlZCBmb3IuCisgICAgICoKKyAgICAgKiBAcGFyYW0gICBzb3VyY2UgICAgICAgdGhlIGNoYXJhY3RlcnMgYmVpbmcgc2VhcmNoZWQuCisgICAgICogQHBhcmFtICAgc291cmNlT2Zmc2V0IG9mZnNldCBvZiB0aGUgc291cmNlIHN0cmluZy4KKyAgICAgKiBAcGFyYW0gICBzb3VyY2VDb3VudCAgY291bnQgb2YgdGhlIHNvdXJjZSBzdHJpbmcuCisgICAgICogQHBhcmFtICAgdGFyZ2V0ICAgICAgIHRoZSBjaGFyYWN0ZXJzIGJlaW5nIHNlYXJjaGVkIGZvci4KKyAgICAgKiBAcGFyYW0gICB0YXJnZXRPZmZzZXQgb2Zmc2V0IG9mIHRoZSB0YXJnZXQgc3RyaW5nLgorICAgICAqIEBwYXJhbSAgIHRhcmdldENvdW50ICBjb3VudCBvZiB0aGUgdGFyZ2V0IHN0cmluZy4KKyAgICAgKiBAcGFyYW0gICBmcm9tSW5kZXggICAgdGhlIGluZGV4IHRvIGJlZ2luIHNlYXJjaGluZyBmcm9tLgorICAgICAqLworICAgIHN0YXRpYyBpbnQgbGFzdEluZGV4T2YoY2hhcltdIHNvdXJjZSwgaW50IHNvdXJjZU9mZnNldCwgaW50IHNvdXJjZUNvdW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhcltdIHRhcmdldCwgaW50IHRhcmdldE9mZnNldCwgaW50IHRhcmdldENvdW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGZyb21JbmRleCkgeworICAgICAgICAvKgorCSAqIENoZWNrIGFyZ3VtZW50czsgcmV0dXJuIGltbWVkaWF0ZWx5IHdoZXJlIHBvc3NpYmxlLiBGb3IKKwkgKiBjb25zaXN0ZW5jeSwgZG9uJ3QgY2hlY2sgZm9yIG51bGwgc3RyLgorCSAqLworICAgICAgICBpbnQgcmlnaHRJbmRleCA9IHNvdXJjZUNvdW50IC0gdGFyZ2V0Q291bnQ7CisJaWYgKGZyb21JbmRleCA8IDApIHsKKwkgICAgcmV0dXJuIC0xOworCX0KKwlpZiAoZnJvbUluZGV4ID4gcmlnaHRJbmRleCkgeworCSAgICBmcm9tSW5kZXggPSByaWdodEluZGV4OworCX0KKwkvKiBFbXB0eSBzdHJpbmcgYWx3YXlzIG1hdGNoZXMuICovCisJaWYgKHRhcmdldENvdW50ID09IDApIHsKKwkgICAgcmV0dXJuIGZyb21JbmRleDsKKwl9CisKKyAgICAgICAgaW50IHN0ckxhc3RJbmRleCA9IHRhcmdldE9mZnNldCArIHRhcmdldENvdW50IC0gMTsKKwljaGFyIHN0ckxhc3RDaGFyID0gdGFyZ2V0W3N0ckxhc3RJbmRleF07CisJaW50IG1pbiA9IHNvdXJjZU9mZnNldCArIHRhcmdldENvdW50IC0gMTsKKwlpbnQgaSA9IG1pbiArIGZyb21JbmRleDsKKworICAgIHN0YXJ0U2VhcmNoRm9yTGFzdENoYXI6CisJd2hpbGUgKHRydWUpIHsKKwkgICAgd2hpbGUgKGkgPj0gbWluICYmIHNvdXJjZVtpXSAhPSBzdHJMYXN0Q2hhcikgeworCQlpLS07CisJICAgIH0KKwkgICAgaWYgKGkgPCBtaW4pIHsKKwkJcmV0dXJuIC0xOworCSAgICB9CisJICAgIGludCBqID0gaSAtIDE7CisJICAgIGludCBzdGFydCA9IGogLSAodGFyZ2V0Q291bnQgLSAxKTsKKwkgICAgaW50IGsgPSBzdHJMYXN0SW5kZXggLSAxOworCisJICAgIHdoaWxlIChqID4gc3RhcnQpIHsKKwkgICAgICAgIGlmIChzb3VyY2Vbai0tXSAhPSB0YXJnZXRbay0tXSkgeworCQkgICAgaS0tOworCQkgICAgY29udGludWUgc3RhcnRTZWFyY2hGb3JMYXN0Q2hhcjsKKwkJfQorCSAgICB9CisJICAgIHJldHVybiBzdGFydCAtIHNvdXJjZU9mZnNldCArIDE7CisJfQorICAgIH0KKworICAgIC8qKgorICAgICAqIFJldHVybnMgYSBuZXcgc3RyaW5nIHRoYXQgaXMgYSBzdWJzdHJpbmcgb2YgdGhpcyBzdHJpbmcuIFRoZQorICAgICAqIHN1YnN0cmluZyBiZWdpbnMgd2l0aCB0aGUgY2hhcmFjdGVyIGF0IHRoZSBzcGVjaWZpZWQgaW5kZXggYW5kCisgICAgICogZXh0ZW5kcyB0byB0aGUgZW5kIG9mIHRoaXMgc3RyaW5nLiA8cD4KKyAgICAgKiBFeGFtcGxlczoKKyAgICAgKiA8YmxvY2txdW90ZT48cHJlPgorICAgICAqICJ1bmhhcHB5Ii5zdWJzdHJpbmcoMikgcmV0dXJucyAiaGFwcHkiCisgICAgICogIkhhcmJpc29uIi5zdWJzdHJpbmcoMykgcmV0dXJucyAiYmlzb24iCisgICAgICogImVtcHRpbmVzcyIuc3Vic3RyaW5nKDkpIHJldHVybnMgIiIgKGFuIGVtcHR5IHN0cmluZykKKyAgICAgKiA8L3ByZT48L2Jsb2NrcXVvdGU+CisgICAgICoKKyAgICAgKiBAcGFyYW0gICAgICBiZWdpbkluZGV4ICAgdGhlIGJlZ2lubmluZyBpbmRleCwgaW5jbHVzaXZlLgorICAgICAqIEByZXR1cm4gICAgIHRoZSBzcGVjaWZpZWQgc3Vic3RyaW5nLgorICAgICAqIEBleGNlcHRpb24gIEluZGV4T3V0T2ZCb3VuZHNFeGNlcHRpb24gIGlmCisgICAgICogICAgICAgICAgICAgPGNvZGU+YmVnaW5JbmRleDwvY29kZT4gaXMgbmVnYXRpdmUgb3IgbGFyZ2VyIHRoYW4gdGhlCisgICAgICogICAgICAgICAgICAgbGVuZ3RoIG9mIHRoaXMgPGNvZGU+U3RyaW5nPC9jb2RlPiBvYmplY3QuCisgICAgICovCisgICAgcHVibGljIFN0cmluZyBzdWJzdHJpbmcoaW50IGJlZ2luSW5kZXgpIHsKKwlyZXR1cm4gc3Vic3RyaW5nKGJlZ2luSW5kZXgsIGNvdW50KTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIGEgbmV3IHN0cmluZyB0aGF0IGlzIGEgc3Vic3RyaW5nIG9mIHRoaXMgc3RyaW5nLiBUaGUKKyAgICAgKiBzdWJzdHJpbmcgYmVnaW5zIGF0IHRoZSBzcGVjaWZpZWQgPGNvZGU+YmVnaW5JbmRleDwvY29kZT4gYW5kCisgICAgICogZXh0ZW5kcyB0byB0aGUgY2hhcmFjdGVyIGF0IGluZGV4IDxjb2RlPmVuZEluZGV4IC0gMTwvY29kZT4uCisgICAgICogVGh1cyB0aGUgbGVuZ3RoIG9mIHRoZSBzdWJzdHJpbmcgaXMgPGNvZGU+ZW5kSW5kZXgtYmVnaW5JbmRleDwvY29kZT4uCisgICAgICogPHA+CisgICAgICogRXhhbXBsZXM6CisgICAgICogPGJsb2NrcXVvdGU+PHByZT4KKyAgICAgKiAiaGFtYnVyZ2VyIi5zdWJzdHJpbmcoNCwgOCkgcmV0dXJucyAidXJnZSIKKyAgICAgKiAic21pbGVzIi5zdWJzdHJpbmcoMSwgNSkgcmV0dXJucyAibWlsZSIKKyAgICAgKiA8L3ByZT48L2Jsb2NrcXVvdGU+CisgICAgICoKKyAgICAgKiBAcGFyYW0gICAgICBiZWdpbkluZGV4ICAgdGhlIGJlZ2lubmluZyBpbmRleCwgaW5jbHVzaXZlLgorICAgICAqIEBwYXJhbSAgICAgIGVuZEluZGV4ICAgICB0aGUgZW5kaW5nIGluZGV4LCBleGNsdXNpdmUuCisgICAgICogQHJldHVybiAgICAgdGhlIHNwZWNpZmllZCBzdWJzdHJpbmcuCisgICAgICogQGV4Y2VwdGlvbiAgSW5kZXhPdXRPZkJvdW5kc0V4Y2VwdGlvbiAgaWYgdGhlCisgICAgICogICAgICAgICAgICAgPGNvZGU+YmVnaW5JbmRleDwvY29kZT4gaXMgbmVnYXRpdmUsIG9yCisgICAgICogICAgICAgICAgICAgPGNvZGU+ZW5kSW5kZXg8L2NvZGU+IGlzIGxhcmdlciB0aGFuIHRoZSBsZW5ndGggb2YKKyAgICAgKiAgICAgICAgICAgICB0aGlzIDxjb2RlPlN0cmluZzwvY29kZT4gb2JqZWN0LCBvcgorICAgICAqICAgICAgICAgICAgIDxjb2RlPmJlZ2luSW5kZXg8L2NvZGU+IGlzIGxhcmdlciB0aGFuCisgICAgICogICAgICAgICAgICAgPGNvZGU+ZW5kSW5kZXg8L2NvZGU+LgorICAgICAqLworICAgIHB1YmxpYyBTdHJpbmcgc3Vic3RyaW5nKGludCBiZWdpbkluZGV4LCBpbnQgZW5kSW5kZXgpIHsKKwlpZiAoYmVnaW5JbmRleCA8IDApIHsKKwkgICAgdGhyb3cgbmV3IFN0cmluZ0luZGV4T3V0T2ZCb3VuZHNFeGNlcHRpb24oYmVnaW5JbmRleCk7CisJfQorCWlmIChlbmRJbmRleCA+IGNvdW50KSB7CisJICAgIHRocm93IG5ldyBTdHJpbmdJbmRleE91dE9mQm91bmRzRXhjZXB0aW9uKGVuZEluZGV4KTsKKwl9CisJaWYgKGJlZ2luSW5kZXggPiBlbmRJbmRleCkgeworCSAgICB0aHJvdyBuZXcgU3RyaW5nSW5kZXhPdXRPZkJvdW5kc0V4Y2VwdGlvbihlbmRJbmRleCAtIGJlZ2luSW5kZXgpOworCX0KKwlyZXR1cm4gKChiZWdpbkluZGV4ID09IDApICYmIChlbmRJbmRleCA9PSBjb3VudCkpID8gdGhpcyA6CisJICAgIG5ldyBTdHJpbmcob2Zmc2V0ICsgYmVnaW5JbmRleCwgZW5kSW5kZXggLSBiZWdpbkluZGV4LCB2YWx1ZSk7CisgICAgfQorCisgICAgLyoqCisgICAgICogUmV0dXJucyBhIG5ldyBjaGFyYWN0ZXIgc2VxdWVuY2UgdGhhdCBpcyBhIHN1YnNlcXVlbmNlIG9mIHRoaXMgc2VxdWVuY2UuCisgICAgICoKKyAgICAgKiA8cD4gQW4gaW52b2NhdGlvbiBvZiB0aGlzIG1ldGhvZCBvZiB0aGUgZm9ybQorICAgICAqCisgICAgICogPGJsb2NrcXVvdGU+PHByZT4KKyAgICAgKiBzdHIuc3ViU2VxdWVuY2UoYmVnaW4sJm5ic3A7ZW5kKTwvcHJlPjwvYmxvY2txdW90ZT4KKyAgICAgKgorICAgICAqIGJlaGF2ZXMgaW4gZXhhY3RseSB0aGUgc2FtZSB3YXkgYXMgdGhlIGludm9jYXRpb24KKyAgICAgKgorICAgICAqIDxibG9ja3F1b3RlPjxwcmU+CisgICAgICogc3RyLnN1YnN0cmluZyhiZWdpbiwmbmJzcDtlbmQpPC9wcmU+PC9ibG9ja3F1b3RlPgorICAgICAqCisgICAgICogVGhpcyBtZXRob2QgaXMgZGVmaW5lZCBzbyB0aGF0IHRoZSA8dHQ+U3RyaW5nPC90dD4gY2xhc3MgY2FuIGltcGxlbWVudAorICAgICAqIHRoZSB7QGxpbmsgQ2hhclNlcXVlbmNlfSBpbnRlcmZhY2UuIDwvcD4KKyAgICAgKgorICAgICAqIEBwYXJhbSAgICAgIGJlZ2luSW5kZXggICB0aGUgYmVnaW4gaW5kZXgsIGluY2x1c2l2ZS4KKyAgICAgKiBAcGFyYW0gICAgICBlbmRJbmRleCAgICAgdGhlIGVuZCBpbmRleCwgZXhjbHVzaXZlLgorICAgICAqIEByZXR1cm4gICAgIHRoZSBzcGVjaWZpZWQgc3Vic2VxdWVuY2UuCisgICAgICoKKyAgICAgKiBAdGhyb3dzICBJbmRleE91dE9mQm91bmRzRXhjZXB0aW9uCisgICAgICogICAgICAgICAgaWYgPHR0PmJlZ2luSW5kZXg8L3R0PiBvciA8dHQ+ZW5kSW5kZXg8L3R0PiBhcmUgbmVnYXRpdmUsCisgICAgICogICAgICAgICAgaWYgPHR0PmVuZEluZGV4PC90dD4gaXMgZ3JlYXRlciB0aGFuIDx0dD5sZW5ndGgoKTwvdHQ+LAorICAgICAqICAgICAgICAgIG9yIGlmIDx0dD5iZWdpbkluZGV4PC90dD4gaXMgZ3JlYXRlciB0aGFuIDx0dD5zdGFydEluZGV4PC90dD4KKyAgICAgKgorICAgICAqIEBzaW5jZSAxLjQKKyAgICAgKiBAc3BlYyBKU1ItNTEKKyAgICAgKi8KKyAgICBwdWJsaWMgQ2hhclNlcXVlbmNlIHN1YlNlcXVlbmNlKGludCBiZWdpbkluZGV4LCBpbnQgZW5kSW5kZXgpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuc3Vic3RyaW5nKGJlZ2luSW5kZXgsIGVuZEluZGV4KTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDb25jYXRlbmF0ZXMgdGhlIHNwZWNpZmllZCBzdHJpbmcgdG8gdGhlIGVuZCBvZiB0aGlzIHN0cmluZy4KKyAgICAgKiA8cD4KKyAgICAgKiBJZiB0aGUgbGVuZ3RoIG9mIHRoZSBhcmd1bWVudCBzdHJpbmcgaXMgPGNvZGU+MDwvY29kZT4sIHRoZW4gdGhpcworICAgICAqIDxjb2RlPlN0cmluZzwvY29kZT4gb2JqZWN0IGlzIHJldHVybmVkLiBPdGhlcndpc2UsIGEgbmV3CisgICAgICogPGNvZGU+U3RyaW5nPC9jb2RlPiBvYmplY3QgaXMgY3JlYXRlZCwgcmVwcmVzZW50aW5nIGEgY2hhcmFjdGVyCisgICAgICogc2VxdWVuY2UgdGhhdCBpcyB0aGUgY29uY2F0ZW5hdGlvbiBvZiB0aGUgY2hhcmFjdGVyIHNlcXVlbmNlCisgICAgICogcmVwcmVzZW50ZWQgYnkgdGhpcyA8Y29kZT5TdHJpbmc8L2NvZGU+IG9iamVjdCBhbmQgdGhlIGNoYXJhY3RlcgorICAgICAqIHNlcXVlbmNlIHJlcHJlc2VudGVkIGJ5IHRoZSBhcmd1bWVudCBzdHJpbmcuPHA+CisgICAgICogRXhhbXBsZXM6CisgICAgICogPGJsb2NrcXVvdGU+PHByZT4KKyAgICAgKiAiY2FyZXMiLmNvbmNhdCgicyIpIHJldHVybnMgImNhcmVzcyIKKyAgICAgKiAidG8iLmNvbmNhdCgiZ2V0IikuY29uY2F0KCJoZXIiKSByZXR1cm5zICJ0b2dldGhlciIKKyAgICAgKiA8L3ByZT48L2Jsb2NrcXVvdGU+CisgICAgICoKKyAgICAgKiBAcGFyYW0gICBzdHIgICB0aGUgPGNvZGU+U3RyaW5nPC9jb2RlPiB0aGF0IGlzIGNvbmNhdGVuYXRlZCB0byB0aGUgZW5kCisgICAgICogICAgICAgICAgICAgICAgb2YgdGhpcyA8Y29kZT5TdHJpbmc8L2NvZGU+LgorICAgICAqIEByZXR1cm4gIGEgc3RyaW5nIHRoYXQgcmVwcmVzZW50cyB0aGUgY29uY2F0ZW5hdGlvbiBvZiB0aGlzIG9iamVjdCdzCisgICAgICogICAgICAgICAgY2hhcmFjdGVycyBmb2xsb3dlZCBieSB0aGUgc3RyaW5nIGFyZ3VtZW50J3MgY2hhcmFjdGVycy4KKyAgICAgKi8KKyAgICBwdWJsaWMgU3RyaW5nIGNvbmNhdChTdHJpbmcgc3RyKSB7CisJaW50IG90aGVyTGVuID0gc3RyLmxlbmd0aCgpOworCWlmIChvdGhlckxlbiA9PSAwKSB7CisJICAgIHJldHVybiB0aGlzOworCX0KKwljaGFyIGJ1ZltdID0gbmV3IGNoYXJbY291bnQgKyBvdGhlckxlbl07CisJZ2V0Q2hhcnMoMCwgY291bnQsIGJ1ZiwgMCk7CisJc3RyLmdldENoYXJzKDAsIG90aGVyTGVuLCBidWYsIGNvdW50KTsKKwlyZXR1cm4gbmV3IFN0cmluZygwLCBjb3VudCArIG90aGVyTGVuLCBidWYpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFJldHVybnMgYSBuZXcgc3RyaW5nIHJlc3VsdGluZyBmcm9tIHJlcGxhY2luZyBhbGwgb2NjdXJyZW5jZXMgb2YKKyAgICAgKiA8Y29kZT5vbGRDaGFyPC9jb2RlPiBpbiB0aGlzIHN0cmluZyB3aXRoIDxjb2RlPm5ld0NoYXI8L2NvZGU+LgorICAgICAqIDxwPgorICAgICAqIElmIHRoZSBjaGFyYWN0ZXIgPGNvZGU+b2xkQ2hhcjwvY29kZT4gZG9lcyBub3Qgb2NjdXIgaW4gdGhlCisgICAgICogY2hhcmFjdGVyIHNlcXVlbmNlIHJlcHJlc2VudGVkIGJ5IHRoaXMgPGNvZGU+U3RyaW5nPC9jb2RlPiBvYmplY3QsCisgICAgICogdGhlbiBhIHJlZmVyZW5jZSB0byB0aGlzIDxjb2RlPlN0cmluZzwvY29kZT4gb2JqZWN0IGlzIHJldHVybmVkLgorICAgICAqIE90aGVyd2lzZSwgYSBuZXcgPGNvZGU+U3RyaW5nPC9jb2RlPiBvYmplY3QgaXMgY3JlYXRlZCB0aGF0CisgICAgICogcmVwcmVzZW50cyBhIGNoYXJhY3RlciBzZXF1ZW5jZSBpZGVudGljYWwgdG8gdGhlIGNoYXJhY3RlciBzZXF1ZW5jZQorICAgICAqIHJlcHJlc2VudGVkIGJ5IHRoaXMgPGNvZGU+U3RyaW5nPC9jb2RlPiBvYmplY3QsIGV4Y2VwdCB0aGF0IGV2ZXJ5CisgICAgICogb2NjdXJyZW5jZSBvZiA8Y29kZT5vbGRDaGFyPC9jb2RlPiBpcyByZXBsYWNlZCBieSBhbiBvY2N1cnJlbmNlCisgICAgICogb2YgPGNvZGU+bmV3Q2hhcjwvY29kZT4uCisgICAgICogPHA+CisgICAgICogRXhhbXBsZXM6CisgICAgICogPGJsb2NrcXVvdGU+PHByZT4KKyAgICAgKiAibWVzcXVpdGUgaW4geW91ciBjZWxsYXIiLnJlcGxhY2UoJ2UnLCAnbycpCisgICAgICogICAgICAgICByZXR1cm5zICJtb3NxdWl0byBpbiB5b3VyIGNvbGxhciIKKyAgICAgKiAidGhlIHdhciBvZiBiYXJvbmV0cyIucmVwbGFjZSgncicsICd5JykKKyAgICAgKiAgICAgICAgIHJldHVybnMgInRoZSB3YXkgb2YgYmF5b25ldHMiCisgICAgICogInNwYXJyaW5nIHdpdGggYSBwdXJwbGUgcG9ycG9pc2UiLnJlcGxhY2UoJ3AnLCAndCcpCisgICAgICogICAgICAgICByZXR1cm5zICJzdGFycmluZyB3aXRoIGEgdHVydGxlIHRvcnRvaXNlIgorICAgICAqICJKb25MIi5yZXBsYWNlKCdxJywgJ3gnKSByZXR1cm5zICJKb25MIiAobm8gY2hhbmdlKQorICAgICAqIDwvcHJlPjwvYmxvY2txdW90ZT4KKyAgICAgKgorICAgICAqIEBwYXJhbSAgIG9sZENoYXIgICB0aGUgb2xkIGNoYXJhY3Rlci4KKyAgICAgKiBAcGFyYW0gICBuZXdDaGFyICAgdGhlIG5ldyBjaGFyYWN0ZXIuCisgICAgICogQHJldHVybiAgYSBzdHJpbmcgZGVyaXZlZCBmcm9tIHRoaXMgc3RyaW5nIGJ5IHJlcGxhY2luZyBldmVyeQorICAgICAqICAgICAgICAgIG9jY3VycmVuY2Ugb2YgPGNvZGU+b2xkQ2hhcjwvY29kZT4gd2l0aCA8Y29kZT5uZXdDaGFyPC9jb2RlPi4KKyAgICAgKi8KKyAgICBwdWJsaWMgU3RyaW5nIHJlcGxhY2UoY2hhciBvbGRDaGFyLCBjaGFyIG5ld0NoYXIpIHsKKwlpZiAob2xkQ2hhciAhPSBuZXdDaGFyKSB7CisJICAgIGludCBsZW4gPSBjb3VudDsKKwkgICAgaW50IGkgPSAtMTsKKwkgICAgY2hhcltdIHZhbCA9IHZhbHVlOyAvKiBhdm9pZCBnZXRmaWVsZCBvcGNvZGUgKi8KKwkgICAgaW50IG9mZiA9IG9mZnNldDsgICAvKiBhdm9pZCBnZXRmaWVsZCBvcGNvZGUgKi8KKworCSAgICB3aGlsZSAoKytpIDwgbGVuKSB7CisJCWlmICh2YWxbb2ZmICsgaV0gPT0gb2xkQ2hhcikgeworCQkgICAgYnJlYWs7CisJCX0KKwkgICAgfQorCSAgICBpZiAoaSA8IGxlbikgeworCQljaGFyIGJ1ZltdID0gbmV3IGNoYXJbbGVuXTsKKwkJZm9yIChpbnQgaiA9IDAgOyBqIDwgaSA7IGorKykgeworCQkgICAgYnVmW2pdID0gdmFsW29mZitqXTsKKwkJfQorCQl3aGlsZSAoaSA8IGxlbikgeworCQkgICAgY2hhciBjID0gdmFsW29mZiArIGldOworCQkgICAgYnVmW2ldID0gKGMgPT0gb2xkQ2hhcikgPyBuZXdDaGFyIDogYzsKKwkJICAgIGkrKzsKKwkJfQorCQlyZXR1cm4gbmV3IFN0cmluZygwLCBsZW4sIGJ1Zik7CisJICAgIH0KKwl9CisJcmV0dXJuIHRoaXM7CisgICAgfQorCisgICAgLyoqCisgICAgICogVGVsbHMgd2hldGhlciBvciBub3QgdGhpcyBzdHJpbmcgbWF0Y2hlcyB0aGUgZ2l2ZW4gPGEKKyAgICAgKiBocmVmPSIuLi91dGlsL3JlZ2V4L1BhdHRlcm4uaHRtbCNzdW0iPnJlZ3VsYXIgZXhwcmVzc2lvbjwvYT4uCisgICAgICoKKyAgICAgKiA8cD4gQW4gaW52b2NhdGlvbiBvZiB0aGlzIG1ldGhvZCBvZiB0aGUgZm9ybQorICAgICAqIDxpPnN0cjwvaT48dHQ+Lm1hdGNoZXMoPC90dD48aT5yZWdleDwvaT48dHQ+KTwvdHQ+IHlpZWxkcyBleGFjdGx5IHRoZQorICAgICAqIHNhbWUgcmVzdWx0IGFzIHRoZSBleHByZXNzaW9uCisgICAgICoKKyAgICAgKiA8YmxvY2txdW90ZT48dHQ+IHtAbGluayBqYXZhLnV0aWwucmVnZXguUGF0dGVybn0ue0BsaW5rCisgICAgICogamF2YS51dGlsLnJlZ2V4LlBhdHRlcm4jbWF0Y2hlcyhTdHJpbmcsQ2hhclNlcXVlbmNlKQorICAgICAqIG1hdGNoZXN9KDwvdHQ+PGk+cmVnZXg8L2k+PHR0Piw8L3R0PiA8aT5zdHI8L2k+PHR0Pik8L3R0PjwvYmxvY2txdW90ZT4KKyAgICAgKgorICAgICAqIEBwYXJhbSAgIHJlZ2V4CisgICAgICogICAgICAgICAgdGhlIHJlZ3VsYXIgZXhwcmVzc2lvbiB0byB3aGljaCB0aGlzIHN0cmluZyBpcyB0byBiZSBtYXRjaGVkCisgICAgICoKKyAgICAgKiBAcmV0dXJuICA8dHQ+dHJ1ZTwvdHQ+IGlmLCBhbmQgb25seSBpZiwgdGhpcyBzdHJpbmcgbWF0Y2hlcyB0aGUKKyAgICAgKiAgICAgICAgICBnaXZlbiByZWd1bGFyIGV4cHJlc3Npb24KKyAgICAgKgorICAgICAqIEB0aHJvd3MgIFBhdHRlcm5TeW50YXhFeGNlcHRpb24KKyAgICAgKiAgICAgICAgICBpZiB0aGUgcmVndWxhciBleHByZXNzaW9uJ3Mgc3ludGF4IGlzIGludmFsaWQKKyAgICAgKgorICAgICAqIEBzZWUgamF2YS51dGlsLnJlZ2V4LlBhdHRlcm4KKyAgICAgKgorICAgICAqIEBzaW5jZSAxLjQKKyAgICAgKiBAc3BlYyBKU1ItNTEKKyAgICAgKi8KKyAgICBwdWJsaWMgYm9vbGVhbiBtYXRjaGVzKFN0cmluZyByZWdleCkgeworICAgICAgICByZXR1cm4gUGF0dGVybi5tYXRjaGVzKHJlZ2V4LCB0aGlzKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIHRydWUgaWYgYW5kIG9ubHkgaWYgdGhpcyBzdHJpbmcgY29udGFpbnMgdGhlIHNwZWNpZmllZAorICAgICAqIHNlcXVlbmNlIG9mIGNoYXIgdmFsdWVzLgorICAgICAqCisgICAgICogQHBhcmFtIHMgdGhlIHNlcXVlbmNlIHRvIHNlYXJjaCBmb3IKKyAgICAgKiBAcmV0dXJuIHRydWUgaWYgdGhpcyBzdHJpbmcgY29udGFpbnMgPGNvZGU+czwvY29kZT4sIGZhbHNlIG90aGVyd2lzZQorICAgICAqIEB0aHJvd3MgTnVsbFBvaW50ZXJFeGNlcHRpb24gaWYgPGNvZGU+czwvY29kZT4gaXMgPGNvZGU+bnVsbDwvY29kZT4KKyAgICAgKiBAc2luY2UgMS41CisgICAgICovCisgICAgcHVibGljIGJvb2xlYW4gY29udGFpbnMoQ2hhclNlcXVlbmNlIHMpIHsKKyAgICAgICAgcmV0dXJuIGluZGV4T2Yocy50b1N0cmluZygpKSA+IC0xOworICAgIH0KKworICAgIC8qKgorICAgICAqIFJlcGxhY2VzIHRoZSBmaXJzdCBzdWJzdHJpbmcgb2YgdGhpcyBzdHJpbmcgdGhhdCBtYXRjaGVzIHRoZSBnaXZlbiA8YQorICAgICAqIGhyZWY9Ii4uL3V0aWwvcmVnZXgvUGF0dGVybi5odG1sI3N1bSI+cmVndWxhciBleHByZXNzaW9uPC9hPiB3aXRoIHRoZQorICAgICAqIGdpdmVuIHJlcGxhY2VtZW50LgorICAgICAqCisgICAgICogPHA+IEFuIGludm9jYXRpb24gb2YgdGhpcyBtZXRob2Qgb2YgdGhlIGZvcm0KKyAgICAgKiA8aT5zdHI8L2k+PHR0Pi5yZXBsYWNlRmlyc3QoPC90dD48aT5yZWdleDwvaT48dHQ+LDwvdHQ+IDxpPnJlcGw8L2k+PHR0Pik8L3R0PgorICAgICAqIHlpZWxkcyBleGFjdGx5IHRoZSBzYW1lIHJlc3VsdCBhcyB0aGUgZXhwcmVzc2lvbgorICAgICAqCisgICAgICogPGJsb2NrcXVvdGU+PHR0PgorICAgICAqIHtAbGluayBqYXZhLnV0aWwucmVnZXguUGF0dGVybn0ue0BsaW5rIGphdmEudXRpbC5yZWdleC5QYXR0ZXJuI2NvbXBpbGUKKyAgICAgKiBjb21waWxlfSg8L3R0PjxpPnJlZ2V4PC9pPjx0dD4pLntAbGluaworICAgICAqIGphdmEudXRpbC5yZWdleC5QYXR0ZXJuI21hdGNoZXIoamF2YS5sYW5nLkNoYXJTZXF1ZW5jZSkKKyAgICAgKiBtYXRjaGVyfSg8L3R0PjxpPnN0cjwvaT48dHQ+KS57QGxpbmsgamF2YS51dGlsLnJlZ2V4Lk1hdGNoZXIjcmVwbGFjZUZpcnN0CisgICAgICogcmVwbGFjZUZpcnN0fSg8L3R0PjxpPnJlcGw8L2k+PHR0Pik8L3R0PjwvYmxvY2txdW90ZT4KKyAgICAgKgorICAgICAqIEBwYXJhbSAgIHJlZ2V4CisgICAgICogICAgICAgICAgdGhlIHJlZ3VsYXIgZXhwcmVzc2lvbiB0byB3aGljaCB0aGlzIHN0cmluZyBpcyB0byBiZSBtYXRjaGVkCisgICAgICoKKyAgICAgKiBAcmV0dXJuICBUaGUgcmVzdWx0aW5nIDx0dD5TdHJpbmc8L3R0PgorICAgICAqCisgICAgICogQHRocm93cyAgUGF0dGVyblN5bnRheEV4Y2VwdGlvbgorICAgICAqICAgICAgICAgIGlmIHRoZSByZWd1bGFyIGV4cHJlc3Npb24ncyBzeW50YXggaXMgaW52YWxpZAorICAgICAqCisgICAgICogQHNlZSBqYXZhLnV0aWwucmVnZXguUGF0dGVybgorICAgICAqCisgICAgICogQHNpbmNlIDEuNAorICAgICAqIEBzcGVjIEpTUi01MQorICAgICAqLworICAgIHB1YmxpYyBTdHJpbmcgcmVwbGFjZUZpcnN0KFN0cmluZyByZWdleCwgU3RyaW5nIHJlcGxhY2VtZW50KSB7CisJcmV0dXJuIFBhdHRlcm4uY29tcGlsZShyZWdleCkubWF0Y2hlcih0aGlzKS5yZXBsYWNlRmlyc3QocmVwbGFjZW1lbnQpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFJlcGxhY2VzIGVhY2ggc3Vic3RyaW5nIG9mIHRoaXMgc3RyaW5nIHRoYXQgbWF0Y2hlcyB0aGUgZ2l2ZW4gPGEKKyAgICAgKiBocmVmPSIuLi91dGlsL3JlZ2V4L1BhdHRlcm4uaHRtbCNzdW0iPnJlZ3VsYXIgZXhwcmVzc2lvbjwvYT4gd2l0aCB0aGUKKyAgICAgKiBnaXZlbiByZXBsYWNlbWVudC4KKyAgICAgKgorICAgICAqIDxwPiBBbiBpbnZvY2F0aW9uIG9mIHRoaXMgbWV0aG9kIG9mIHRoZSBmb3JtCisgICAgICogPGk+c3RyPC9pPjx0dD4ucmVwbGFjZUFsbCg8L3R0PjxpPnJlZ2V4PC9pPjx0dD4sPC90dD4gPGk+cmVwbDwvaT48dHQ+KTwvdHQ+CisgICAgICogeWllbGRzIGV4YWN0bHkgdGhlIHNhbWUgcmVzdWx0IGFzIHRoZSBleHByZXNzaW9uCisgICAgICoKKyAgICAgKiA8YmxvY2txdW90ZT48dHQ+CisgICAgICoge0BsaW5rIGphdmEudXRpbC5yZWdleC5QYXR0ZXJufS57QGxpbmsgamF2YS51dGlsLnJlZ2V4LlBhdHRlcm4jY29tcGlsZQorICAgICAqIGNvbXBpbGV9KDwvdHQ+PGk+cmVnZXg8L2k+PHR0Pikue0BsaW5rCisgICAgICogamF2YS51dGlsLnJlZ2V4LlBhdHRlcm4jbWF0Y2hlcihqYXZhLmxhbmcuQ2hhclNlcXVlbmNlKQorICAgICAqIG1hdGNoZXJ9KDwvdHQ+PGk+c3RyPC9pPjx0dD4pLntAbGluayBqYXZhLnV0aWwucmVnZXguTWF0Y2hlciNyZXBsYWNlQWxsCisgICAgICogcmVwbGFjZUFsbH0oPC90dD48aT5yZXBsPC9pPjx0dD4pPC90dD48L2Jsb2NrcXVvdGU+CisgICAgICoKKyAgICAgKiBAcGFyYW0gICByZWdleAorICAgICAqICAgICAgICAgIHRoZSByZWd1bGFyIGV4cHJlc3Npb24gdG8gd2hpY2ggdGhpcyBzdHJpbmcgaXMgdG8gYmUgbWF0Y2hlZAorICAgICAqCisgICAgICogQHJldHVybiAgVGhlIHJlc3VsdGluZyA8dHQ+U3RyaW5nPC90dD4KKyAgICAgKgorICAgICAqIEB0aHJvd3MgIFBhdHRlcm5TeW50YXhFeGNlcHRpb24KKyAgICAgKiAgICAgICAgICBpZiB0aGUgcmVndWxhciBleHByZXNzaW9uJ3Mgc3ludGF4IGlzIGludmFsaWQKKyAgICAgKgorICAgICAqIEBzZWUgamF2YS51dGlsLnJlZ2V4LlBhdHRlcm4KKyAgICAgKgorICAgICAqIEBzaW5jZSAxLjQKKyAgICAgKiBAc3BlYyBKU1ItNTEKKyAgICAgKi8KKyAgICBwdWJsaWMgU3RyaW5nIHJlcGxhY2VBbGwoU3RyaW5nIHJlZ2V4LCBTdHJpbmcgcmVwbGFjZW1lbnQpIHsKKwlyZXR1cm4gUGF0dGVybi5jb21waWxlKHJlZ2V4KS5tYXRjaGVyKHRoaXMpLnJlcGxhY2VBbGwocmVwbGFjZW1lbnQpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFJlcGxhY2VzIGVhY2ggc3Vic3RyaW5nIG9mIHRoaXMgc3RyaW5nIHRoYXQgbWF0Y2hlcyB0aGUgbGl0ZXJhbCB0YXJnZXQKKyAgICAgKiBzZXF1ZW5jZSB3aXRoIHRoZSBzcGVjaWZpZWQgbGl0ZXJhbCByZXBsYWNlbWVudCBzZXF1ZW5jZS4gVGhlCisgICAgICogcmVwbGFjZW1lbnQgcHJvY2VlZHMgZnJvbSB0aGUgYmVnaW5uaW5nIG9mIHRoZSBzdHJpbmcgdG8gdGhlIGVuZCwgZm9yCisgICAgICogZXhhbXBsZSwgcmVwbGFjaW5nICJhYSIgd2l0aCAiYiIgaW4gdGhlIHN0cmluZyAiYWFhIiB3aWxsIHJlc3VsdCBpbgorICAgICAqICJiYSIgcmF0aGVyIHRoYW4gImFiIi4KKyAgICAgKgorICAgICAqIEBwYXJhbSAgdGFyZ2V0IFRoZSBzZXF1ZW5jZSBvZiBjaGFyIHZhbHVlcyB0byBiZSByZXBsYWNlZAorICAgICAqIEBwYXJhbSAgcmVwbGFjZW1lbnQgVGhlIHJlcGxhY2VtZW50IHNlcXVlbmNlIG9mIGNoYXIgdmFsdWVzCisgICAgICogQHJldHVybiAgVGhlIHJlc3VsdGluZyBzdHJpbmcKKyAgICAgKiBAdGhyb3dzIE51bGxQb2ludGVyRXhjZXB0aW9uIGlmIDxjb2RlPnRhcmdldDwvY29kZT4gb3IKKyAgICAgKiAgICAgICAgIDxjb2RlPnJlcGxhY2VtZW50PC9jb2RlPiBpcyA8Y29kZT5udWxsPC9jb2RlPi4KKyAgICAgKiBAc2luY2UgMS41CisgICAgICovCisgICAgcHVibGljIFN0cmluZyByZXBsYWNlKENoYXJTZXF1ZW5jZSB0YXJnZXQsIENoYXJTZXF1ZW5jZSByZXBsYWNlbWVudCkgeworICAgICAgICByZXR1cm4gUGF0dGVybi5jb21waWxlKHRhcmdldC50b1N0cmluZygpLCBQYXR0ZXJuLkxJVEVSQUwpLm1hdGNoZXIoCisgICAgICAgICAgICB0aGlzKS5yZXBsYWNlQWxsKE1hdGNoZXIucXVvdGVSZXBsYWNlbWVudChyZXBsYWNlbWVudC50b1N0cmluZygpKSk7CisgICAgfQorCisgICAgLyoqCisgICAgICogU3BsaXRzIHRoaXMgc3RyaW5nIGFyb3VuZCBtYXRjaGVzIG9mIHRoZSBnaXZlbgorICAgICAqIDxhIGhyZWY9Ii4uL3V0aWwvcmVnZXgvUGF0dGVybi5odG1sI3N1bSI+cmVndWxhciBleHByZXNzaW9uPC9hPi4KKyAgICAgKgorICAgICAqIDxwPiBUaGUgYXJyYXkgcmV0dXJuZWQgYnkgdGhpcyBtZXRob2QgY29udGFpbnMgZWFjaCBzdWJzdHJpbmcgb2YgdGhpcworICAgICAqIHN0cmluZyB0aGF0IGlzIHRlcm1pbmF0ZWQgYnkgYW5vdGhlciBzdWJzdHJpbmcgdGhhdCBtYXRjaGVzIHRoZSBnaXZlbgorICAgICAqIGV4cHJlc3Npb24gb3IgaXMgdGVybWluYXRlZCBieSB0aGUgZW5kIG9mIHRoZSBzdHJpbmcuICBUaGUgc3Vic3RyaW5ncyBpbgorICAgICAqIHRoZSBhcnJheSBhcmUgaW4gdGhlIG9yZGVyIGluIHdoaWNoIHRoZXkgb2NjdXIgaW4gdGhpcyBzdHJpbmcuICBJZiB0aGUKKyAgICAgKiBleHByZXNzaW9uIGRvZXMgbm90IG1hdGNoIGFueSBwYXJ0IG9mIHRoZSBpbnB1dCB0aGVuIHRoZSByZXN1bHRpbmcgYXJyYXkKKyAgICAgKiBoYXMganVzdCBvbmUgZWxlbWVudCwgbmFtZWx5IHRoaXMgc3RyaW5nLgorICAgICAqCisgICAgICogPHA+IFRoZSA8dHQ+bGltaXQ8L3R0PiBwYXJhbWV0ZXIgY29udHJvbHMgdGhlIG51bWJlciBvZiB0aW1lcyB0aGUKKyAgICAgKiBwYXR0ZXJuIGlzIGFwcGxpZWQgYW5kIHRoZXJlZm9yZSBhZmZlY3RzIHRoZSBsZW5ndGggb2YgdGhlIHJlc3VsdGluZworICAgICAqIGFycmF5LiAgSWYgdGhlIGxpbWl0IDxpPm48L2k+IGlzIGdyZWF0ZXIgdGhhbiB6ZXJvIHRoZW4gdGhlIHBhdHRlcm4KKyAgICAgKiB3aWxsIGJlIGFwcGxpZWQgYXQgbW9zdCA8aT5uPC9pPiZuYnNwOy0mbmJzcDsxIHRpbWVzLCB0aGUgYXJyYXkncworICAgICAqIGxlbmd0aCB3aWxsIGJlIG5vIGdyZWF0ZXIgdGhhbiA8aT5uPC9pPiwgYW5kIHRoZSBhcnJheSdzIGxhc3QgZW50cnkKKyAgICAgKiB3aWxsIGNvbnRhaW4gYWxsIGlucHV0IGJleW9uZCB0aGUgbGFzdCBtYXRjaGVkIGRlbGltaXRlci4gIElmIDxpPm48L2k+CisgICAgICogaXMgbm9uLXBvc2l0aXZlIHRoZW4gdGhlIHBhdHRlcm4gd2lsbCBiZSBhcHBsaWVkIGFzIG1hbnkgdGltZXMgYXMKKyAgICAgKiBwb3NzaWJsZSBhbmQgdGhlIGFycmF5IGNhbiBoYXZlIGFueSBsZW5ndGguICBJZiA8aT5uPC9pPiBpcyB6ZXJvIHRoZW4KKyAgICAgKiB0aGUgcGF0dGVybiB3aWxsIGJlIGFwcGxpZWQgYXMgbWFueSB0aW1lcyBhcyBwb3NzaWJsZSwgdGhlIGFycmF5IGNhbgorICAgICAqIGhhdmUgYW55IGxlbmd0aCwgYW5kIHRyYWlsaW5nIGVtcHR5IHN0cmluZ3Mgd2lsbCBiZSBkaXNjYXJkZWQuCisgICAgICoKKyAgICAgKiA8cD4gVGhlIHN0cmluZyA8dHQ+ImJvbzphbmQ6Zm9vIjwvdHQ+LCBmb3IgZXhhbXBsZSwgeWllbGRzIHRoZQorICAgICAqIGZvbGxvd2luZyByZXN1bHRzIHdpdGggdGhlc2UgcGFyYW1ldGVyczoKKyAgICAgKgorICAgICAqIDxibG9ja3F1b3RlPjx0YWJsZSBjZWxscGFkZGluZz0xIGNlbGxzcGFjaW5nPTAgc3VtbWFyeT0iU3BsaXQgZXhhbXBsZSBzaG93aW5nIHJlZ2V4LCBsaW1pdCwgYW5kIHJlc3VsdCI+CisgICAgICogPHRyPgorICAgICAqICAgICA8dGg+UmVnZXg8L3RoPgorICAgICAqICAgICA8dGg+TGltaXQ8L3RoPgorICAgICAqICAgICA8dGg+UmVzdWx0PC90aD4KKyAgICAgKiA8L3RyPgorICAgICAqIDx0cj48dGQgYWxpZ249Y2VudGVyPjo8L3RkPgorICAgICAqICAgICA8dGQgYWxpZ249Y2VudGVyPjI8L3RkPgorICAgICAqICAgICA8dGQ+PHR0PnsgImJvbyIsICJhbmQ6Zm9vIiB9PC90dD48L3RkPjwvdHI+CisgICAgICogPHRyPjx0ZCBhbGlnbj1jZW50ZXI+OjwvdGQ+CisgICAgICogICAgIDx0ZCBhbGlnbj1jZW50ZXI+NTwvdGQ+CisgICAgICogICAgIDx0ZD48dHQ+eyAiYm9vIiwgImFuZCIsICJmb28iIH08L3R0PjwvdGQ+PC90cj4KKyAgICAgKiA8dHI+PHRkIGFsaWduPWNlbnRlcj46PC90ZD4KKyAgICAgKiAgICAgPHRkIGFsaWduPWNlbnRlcj4tMjwvdGQ+CisgICAgICogICAgIDx0ZD48dHQ+eyAiYm9vIiwgImFuZCIsICJmb28iIH08L3R0PjwvdGQ+PC90cj4KKyAgICAgKiA8dHI+PHRkIGFsaWduPWNlbnRlcj5vPC90ZD4KKyAgICAgKiAgICAgPHRkIGFsaWduPWNlbnRlcj41PC90ZD4KKyAgICAgKiAgICAgPHRkPjx0dD57ICJiIiwgIiIsICI6YW5kOmYiLCAiIiwgIiIgfTwvdHQ+PC90ZD48L3RyPgorICAgICAqIDx0cj48dGQgYWxpZ249Y2VudGVyPm88L3RkPgorICAgICAqICAgICA8dGQgYWxpZ249Y2VudGVyPi0yPC90ZD4KKyAgICAgKiAgICAgPHRkPjx0dD57ICJiIiwgIiIsICI6YW5kOmYiLCAiIiwgIiIgfTwvdHQ+PC90ZD48L3RyPgorICAgICAqIDx0cj48dGQgYWxpZ249Y2VudGVyPm88L3RkPgorICAgICAqICAgICA8dGQgYWxpZ249Y2VudGVyPjA8L3RkPgorICAgICAqICAgICA8dGQ+PHR0PnsgImIiLCAiIiwgIjphbmQ6ZiIgfTwvdHQ+PC90ZD48L3RyPgorICAgICAqIDwvdGFibGU+PC9ibG9ja3F1b3RlPgorICAgICAqCisgICAgICogPHA+IEFuIGludm9jYXRpb24gb2YgdGhpcyBtZXRob2Qgb2YgdGhlIGZvcm0KKyAgICAgKiA8aT5zdHIuPC9pPjx0dD5zcGxpdCg8L3R0PjxpPnJlZ2V4PC9pPjx0dD4sPC90dD4mbmJzcDs8aT5uPC9pPjx0dD4pPC90dD4KKyAgICAgKiB5aWVsZHMgdGhlIHNhbWUgcmVzdWx0IGFzIHRoZSBleHByZXNzaW9uCisgICAgICoKKyAgICAgKiA8YmxvY2txdW90ZT4KKyAgICAgKiB7QGxpbmsgamF2YS51dGlsLnJlZ2V4LlBhdHRlcm59LntAbGluayBqYXZhLnV0aWwucmVnZXguUGF0dGVybiNjb21waWxlCisgICAgICogY29tcGlsZX08dHQ+KDwvdHQ+PGk+cmVnZXg8L2k+PHR0Pik8L3R0Pi57QGxpbmsKKyAgICAgKiBqYXZhLnV0aWwucmVnZXguUGF0dGVybiNzcGxpdChqYXZhLmxhbmcuQ2hhclNlcXVlbmNlLGludCkKKyAgICAgKiBzcGxpdH08dHQ+KDwvdHQ+PGk+c3RyPC9pPjx0dD4sPC90dD4mbmJzcDs8aT5uPC9pPjx0dD4pPC90dD4KKyAgICAgKiA8L2Jsb2NrcXVvdGU+CisgICAgICoKKyAgICAgKgorICAgICAqIEBwYXJhbSAgcmVnZXgKKyAgICAgKiAgICAgICAgIHRoZSBkZWxpbWl0aW5nIHJlZ3VsYXIgZXhwcmVzc2lvbgorICAgICAqCisgICAgICogQHBhcmFtICBsaW1pdAorICAgICAqICAgICAgICAgdGhlIHJlc3VsdCB0aHJlc2hvbGQsIGFzIGRlc2NyaWJlZCBhYm92ZQorICAgICAqCisgICAgICogQHJldHVybiAgdGhlIGFycmF5IG9mIHN0cmluZ3MgY29tcHV0ZWQgYnkgc3BsaXR0aW5nIHRoaXMgc3RyaW5nCisgICAgICogICAgICAgICAgYXJvdW5kIG1hdGNoZXMgb2YgdGhlIGdpdmVuIHJlZ3VsYXIgZXhwcmVzc2lvbgorICAgICAqCisgICAgICogQHRocm93cyAgUGF0dGVyblN5bnRheEV4Y2VwdGlvbgorICAgICAqICAgICAgICAgIGlmIHRoZSByZWd1bGFyIGV4cHJlc3Npb24ncyBzeW50YXggaXMgaW52YWxpZAorICAgICAqCisgICAgICogQHNlZSBqYXZhLnV0aWwucmVnZXguUGF0dGVybgorICAgICAqCisgICAgICogQHNpbmNlIDEuNAorICAgICAqIEBzcGVjIEpTUi01MQorICAgICAqLworICAgIHB1YmxpYyBTdHJpbmdbXSBzcGxpdChTdHJpbmcgcmVnZXgsIGludCBsaW1pdCkgeworCXJldHVybiBQYXR0ZXJuLmNvbXBpbGUocmVnZXgpLnNwbGl0KHRoaXMsIGxpbWl0KTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBTcGxpdHMgdGhpcyBzdHJpbmcgYXJvdW5kIG1hdGNoZXMgb2YgdGhlIGdpdmVuCisgICAgICoge0BsaW5rcGxhaW4gamF2YS51dGlsLnJlZ2V4LlBhdHRlcm4jc3VtIHJlZ3VsYXIgZXhwcmVzc2lvbn0uCisgICAgICoKKyAgICAgKiA8cD4gVGhpcyBtZXRob2Qgd29ya3MgYXMgaWYgYnkgaW52b2tpbmcgdGhlIHR3by1hcmd1bWVudCB7QGxpbmsKKyAgICAgKiAjc3BsaXQoU3RyaW5nLCBpbnQpIHNwbGl0fSBtZXRob2Qgd2l0aCB0aGUgZ2l2ZW4gZXhwcmVzc2lvbiBhbmQgYSBsaW1pdAorICAgICAqIGFyZ3VtZW50IG9mIHplcm8uICBUcmFpbGluZyBlbXB0eSBzdHJpbmdzIGFyZSB0aGVyZWZvcmUgbm90IGluY2x1ZGVkIGluCisgICAgICogdGhlIHJlc3VsdGluZyBhcnJheS4KKyAgICAgKgorICAgICAqIDxwPiBUaGUgc3RyaW5nIDx0dD4iYm9vOmFuZDpmb28iPC90dD4sIGZvciBleGFtcGxlLCB5aWVsZHMgdGhlIGZvbGxvd2luZworICAgICAqIHJlc3VsdHMgd2l0aCB0aGVzZSBleHByZXNzaW9uczoKKyAgICAgKgorICAgICAqIDxibG9ja3F1b3RlPjx0YWJsZSBjZWxscGFkZGluZz0xIGNlbGxzcGFjaW5nPTAgc3VtbWFyeT0iU3BsaXQgZXhhbXBsZXMgc2hvd2luZyByZWdleCBhbmQgcmVzdWx0Ij4KKyAgICAgKiA8dHI+CisgICAgICogIDx0aD5SZWdleDwvdGg+CisgICAgICogIDx0aD5SZXN1bHQ8L3RoPgorICAgICAqIDwvdHI+CisgICAgICogPHRyPjx0ZCBhbGlnbj1jZW50ZXI+OjwvdGQ+CisgICAgICogICAgIDx0ZD48dHQ+eyAiYm9vIiwgImFuZCIsICJmb28iIH08L3R0PjwvdGQ+PC90cj4KKyAgICAgKiA8dHI+PHRkIGFsaWduPWNlbnRlcj5vPC90ZD4KKyAgICAgKiAgICAgPHRkPjx0dD57ICJiIiwgIiIsICI6YW5kOmYiIH08L3R0PjwvdGQ+PC90cj4KKyAgICAgKiA8L3RhYmxlPjwvYmxvY2txdW90ZT4KKyAgICAgKgorICAgICAqCisgICAgICogQHBhcmFtICByZWdleAorICAgICAqICAgICAgICAgdGhlIGRlbGltaXRpbmcgcmVndWxhciBleHByZXNzaW9uCisgICAgICoKKyAgICAgKiBAcmV0dXJuICB0aGUgYXJyYXkgb2Ygc3RyaW5ncyBjb21wdXRlZCBieSBzcGxpdHRpbmcgdGhpcyBzdHJpbmcKKyAgICAgKiAgICAgICAgICBhcm91bmQgbWF0Y2hlcyBvZiB0aGUgZ2l2ZW4gcmVndWxhciBleHByZXNzaW9uCisgICAgICoKKyAgICAgKiBAdGhyb3dzICBQYXR0ZXJuU3ludGF4RXhjZXB0aW9uCisgICAgICogICAgICAgICAgaWYgdGhlIHJlZ3VsYXIgZXhwcmVzc2lvbidzIHN5bnRheCBpcyBpbnZhbGlkCisgICAgICoKKyAgICAgKiBAc2VlIGphdmEudXRpbC5yZWdleC5QYXR0ZXJuCisgICAgICoKKyAgICAgKiBAc2luY2UgMS40CisgICAgICogQHNwZWMgSlNSLTUxCisgICAgICovCisgICAgcHVibGljIFN0cmluZ1tdIHNwbGl0KFN0cmluZyByZWdleCkgeworICAgICAgICByZXR1cm4gc3BsaXQocmVnZXgsIDApOworICAgIH0KKworICAgIC8qKgorICAgICAqIENvbnZlcnRzIGFsbCBvZiB0aGUgY2hhcmFjdGVycyBpbiB0aGlzIDxjb2RlPlN0cmluZzwvY29kZT4gdG8gbG93ZXIKKyAgICAgKiBjYXNlIHVzaW5nIHRoZSBydWxlcyBvZiB0aGUgZ2l2ZW4gPGNvZGU+TG9jYWxlPC9jb2RlPi4gIENhc2UgbWFwcGluZyBpcyBiYXNlZAorICAgICAqIG9uIHRoZSBVbmljb2RlIFN0YW5kYXJkIHZlcnNpb24gc3BlY2lmaWVkIGJ5IHRoZSB7QGxpbmsgamF2YS5sYW5nLkNoYXJhY3RlciBDaGFyYWN0ZXJ9CisgICAgICogY2xhc3MuIFNpbmNlIGNhc2UgbWFwcGluZ3MgYXJlIG5vdCBhbHdheXMgMToxIGNoYXIgbWFwcGluZ3MsIHRoZSByZXN1bHRpbmcKKyAgICAgKiA8Y29kZT5TdHJpbmc8L2NvZGU+IG1heSBiZSBhIGRpZmZlcmVudCBsZW5ndGggdGhhbiB0aGUgb3JpZ2luYWwgPGNvZGU+U3RyaW5nPC9jb2RlPi4KKyAgICAgKiA8cD4KKyAgICAgKiBFeGFtcGxlcyBvZiBsb3dlcmNhc2UgIG1hcHBpbmdzIGFyZSBpbiB0aGUgZm9sbG93aW5nIHRhYmxlOgorICAgICAqIDx0YWJsZSBib3JkZXI9IjEiIHN1bW1hcnk9Ikxvd2VyY2FzZSBtYXBwaW5nIGV4YW1wbGVzIHNob3dpbmcgbGFuZ3VhZ2UgY29kZSBvZiBsb2NhbGUsIHVwcGVyIGNhc2UsIGxvd2VyIGNhc2UsIGFuZCBkZXNjcmlwdGlvbiI+CisgICAgICogPHRyPgorICAgICAqICAgPHRoPkxhbmd1YWdlIENvZGUgb2YgTG9jYWxlPC90aD4KKyAgICAgKiAgIDx0aD5VcHBlciBDYXNlPC90aD4KKyAgICAgKiAgIDx0aD5Mb3dlciBDYXNlPC90aD4KKyAgICAgKiAgIDx0aD5EZXNjcmlwdGlvbjwvdGg+CisgICAgICogPC90cj4KKyAgICAgKiA8dHI+CisgICAgICogICA8dGQ+dHIgKFR1cmtpc2gpPC90ZD4KKyAgICAgKiAgIDx0ZD4mIzkyO3UwMTMwPC90ZD4KKyAgICAgKiAgIDx0ZD4mIzkyO3UwMDY5PC90ZD4KKyAgICAgKiAgIDx0ZD5jYXBpdGFsIGxldHRlciBJIHdpdGggZG90IGFib3ZlIC0mZ3Q7IHNtYWxsIGxldHRlciBpPC90ZD4KKyAgICAgKiA8L3RyPgorICAgICAqIDx0cj4KKyAgICAgKiAgIDx0ZD50ciAoVHVya2lzaCk8L3RkPgorICAgICAqICAgPHRkPiYjOTI7dTAwNDk8L3RkPgorICAgICAqICAgPHRkPiYjOTI7dTAxMzE8L3RkPgorICAgICAqICAgPHRkPmNhcGl0YWwgbGV0dGVyIEkgLSZndDsgc21hbGwgbGV0dGVyIGRvdGxlc3MgaSA8L3RkPgorICAgICAqIDwvdHI+CisgICAgICogPHRyPgorICAgICAqICAgPHRkPihhbGwpPC90ZD4KKyAgICAgKiAgIDx0ZD5GcmVuY2ggRnJpZXM8L3RkPgorICAgICAqICAgPHRkPmZyZW5jaCBmcmllczwvdGQ+CisgICAgICogICA8dGQ+bG93ZXJjYXNlZCBhbGwgY2hhcnMgaW4gU3RyaW5nPC90ZD4KKyAgICAgKiA8L3RyPgorICAgICAqIDx0cj4KKyAgICAgKiAgIDx0ZD4oYWxsKTwvdGQ+CisgICAgICogICA8dGQ+PGltZyBzcmM9ImRvYy1maWxlcy9jYXBpb3RhLmdpZiIgYWx0PSJjYXBpb3RhIj48aW1nIHNyYz0iZG9jLWZpbGVzL2NhcGNoaS5naWYiIGFsdD0iY2FwY2hpIj4KKyAgICAgKiAgICAgICA8aW1nIHNyYz0iZG9jLWZpbGVzL2NhcHRoZXRhLmdpZiIgYWx0PSJjYXB0aGV0YSI+PGltZyBzcmM9ImRvYy1maWxlcy9jYXB1cHNpbC5naWYiIGFsdD0iY2FwdXBzaWwiPgorICAgICAqICAgICAgIDxpbWcgc3JjPSJkb2MtZmlsZXMvY2Fwc2lnbWEuZ2lmIiBhbHQ9ImNhcHNpZ21hIj48L3RkPgorICAgICAqICAgPHRkPjxpbWcgc3JjPSJkb2MtZmlsZXMvaW90YS5naWYiIGFsdD0iaW90YSI+PGltZyBzcmM9ImRvYy1maWxlcy9jaGkuZ2lmIiBhbHQ9ImNoaSI+CisgICAgICogICAgICAgPGltZyBzcmM9ImRvYy1maWxlcy90aGV0YS5naWYiIGFsdD0idGhldGEiPjxpbWcgc3JjPSJkb2MtZmlsZXMvdXBzaWxvbi5naWYiIGFsdD0idXBzaWxvbiI+CisgICAgICogICAgICAgPGltZyBzcmM9ImRvYy1maWxlcy9zaWdtYTEuZ2lmIiBhbHQ9InNpZ21hIj48L3RkPgorICAgICAqICAgPHRkPmxvd2VyY2FzZWQgYWxsIGNoYXJzIGluIFN0cmluZzwvdGQ+CisgICAgICogPC90cj4KKyAgICAgKiA8L3RhYmxlPgorICAgICAqCisgICAgICogQHBhcmFtIGxvY2FsZSB1c2UgdGhlIGNhc2UgdHJhbnNmb3JtYXRpb24gcnVsZXMgZm9yIHRoaXMgbG9jYWxlCisgICAgICogQHJldHVybiB0aGUgPGNvZGU+U3RyaW5nPC9jb2RlPiwgY29udmVydGVkIHRvIGxvd2VyY2FzZS4KKyAgICAgKiBAc2VlICAgICBqYXZhLmxhbmcuU3RyaW5nI3RvTG93ZXJDYXNlKCkKKyAgICAgKiBAc2VlICAgICBqYXZhLmxhbmcuU3RyaW5nI3RvVXBwZXJDYXNlKCkKKyAgICAgKiBAc2VlICAgICBqYXZhLmxhbmcuU3RyaW5nI3RvVXBwZXJDYXNlKExvY2FsZSkKKyAgICAgKiBAc2luY2UgICAxLjEKKyAgICAgKi8KKyAgICBwdWJsaWMgU3RyaW5nIHRvTG93ZXJDYXNlKExvY2FsZSBsb2NhbGUpIHsKKwlpZiAobG9jYWxlID09IG51bGwpIHsKKwkgICAgdGhyb3cgbmV3IE51bGxQb2ludGVyRXhjZXB0aW9uKCk7CisgICAgICAgIH0KKworICAgICAgICBpbnQgICAgIGZpcnN0VXBwZXI7CisKKwkvKiBOb3cgY2hlY2sgaWYgdGhlcmUgYXJlIGFueSBjaGFyYWN0ZXJzIHRoYXQgbmVlZCB0byBiZSBjaGFuZ2VkLiAqLworCXNjYW46IHsKKwkgICAgZm9yIChmaXJzdFVwcGVyID0gMCA7IGZpcnN0VXBwZXIgPCBjb3VudDsgKSB7CisJCWNoYXIgYyA9IHZhbHVlW29mZnNldCtmaXJzdFVwcGVyXTsKKwkJaWYgKChjID49IENoYXJhY3Rlci5NSU5fSElHSF9TVVJST0dBVEUpICYmCisJCSAgICAoYyA8PSBDaGFyYWN0ZXIuTUFYX0hJR0hfU1VSUk9HQVRFKSkgeworCQkgICAgaW50IHN1cHBsQ2hhciA9IGNvZGVQb2ludEF0KGZpcnN0VXBwZXIpOworCQkgICAgaWYgKHN1cHBsQ2hhciAhPSBDaGFyYWN0ZXIudG9Mb3dlckNhc2Uoc3VwcGxDaGFyKSkgeworCQkgICAgICAgIGJyZWFrIHNjYW47CisJCSAgICB9CisJCSAgICBmaXJzdFVwcGVyICs9IENoYXJhY3Rlci5jaGFyQ291bnQoc3VwcGxDaGFyKTsKKwkJfSBlbHNlIHsKKwkJICAgIGlmIChjICE9IENoYXJhY3Rlci50b0xvd2VyQ2FzZShjKSkgeworCQkgICAgICAgIGJyZWFrIHNjYW47CisJCSAgICB9CisJCSAgICBmaXJzdFVwcGVyKys7CisJCX0KKwkgICAgfQorCSAgICByZXR1cm4gdGhpczsKKwl9CisKKyAgICAgICAgY2hhcltdICByZXN1bHQgPSBuZXcgY2hhcltjb3VudF07CisJaW50ICAgICByZXN1bHRPZmZzZXQgPSAwOyAgLyogcmVzdWx0IG1heSBncm93LCBzbyBpK3Jlc3VsdE9mZnNldAorCQkJCSAgICAqIGlzIHRoZSB3cml0ZSBsb2NhdGlvbiBpbiByZXN1bHQgKi8KKworICAgICAgICAvKiBKdXN0IGNvcHkgdGhlIGZpcnN0IGZldyBsb3dlckNhc2UgY2hhcmFjdGVycy4gKi8KKyAgICAgICAgU3lzdGVtLmFycmF5Y29weSh2YWx1ZSwgb2Zmc2V0LCByZXN1bHQsIDAsIGZpcnN0VXBwZXIpOworCisJU3RyaW5nIGxhbmcgPSBsb2NhbGUuZ2V0TGFuZ3VhZ2UoKTsKKwlib29sZWFuIGxvY2FsZURlcGVuZGVudCA9CisgICAgICAgICAgICAobGFuZyA9PSAidHIiIHx8IGxhbmcgPT0gImF6IiB8fCBsYW5nID09ICJsdCIpOworICAgICAgICBjaGFyW10gbG93ZXJDaGFyQXJyYXk7CisgICAgICAgIGludCBsb3dlckNoYXI7CisgICAgICAgIGludCBzcmNDaGFyOworICAgICAgICBpbnQgc3JjQ291bnQ7CisgICAgICAgIGZvciAoaW50IGkgPSBmaXJzdFVwcGVyOyBpIDwgY291bnQ7IGkgKz0gc3JjQ291bnQpIHsKKwkgICAgc3JjQ2hhciA9IChpbnQpdmFsdWVbb2Zmc2V0K2ldOworCSAgICBpZiAoKGNoYXIpc3JjQ2hhciA+PSBDaGFyYWN0ZXIuTUlOX0hJR0hfU1VSUk9HQVRFICYmCisJICAgICAgICAoY2hhcilzcmNDaGFyIDw9IENoYXJhY3Rlci5NQVhfSElHSF9TVVJST0dBVEUpIHsKKwkJc3JjQ2hhciA9IGNvZGVQb2ludEF0KGkpOworCQlzcmNDb3VudCA9IENoYXJhY3Rlci5jaGFyQ291bnQoc3JjQ2hhcik7CisJICAgIH0gZWxzZSB7CisJICAgICAgICBzcmNDb3VudCA9IDE7CisJICAgIH0KKyAgICAgICAgICAgIGlmIChsb2NhbGVEZXBlbmRlbnQgfHwgc3JjQ2hhciA9PSAnXHUwM0EzJykgeyAvLyBHUkVFSyBDQVBJVEFMIExFVFRFUiBTSUdNQQorICAgICAgICAgICAgICAgIGxvd2VyQ2hhciA9IENvbmRpdGlvbmFsU3BlY2lhbENhc2luZy50b0xvd2VyQ2FzZUV4KHRoaXMsIGksIGxvY2FsZSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGxvd2VyQ2hhciA9IENoYXJhY3Rlci50b0xvd2VyQ2FzZShzcmNDaGFyKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICgobG93ZXJDaGFyID09IENoYXJhY3Rlci5FUlJPUikgfHwKKyAgICAgICAgICAgICAgICAobG93ZXJDaGFyID49IENoYXJhY3Rlci5NSU5fU1VQUExFTUVOVEFSWV9DT0RFX1BPSU5UKSkgeworICAgICAgICAgICAgICAgIGlmIChsb3dlckNoYXIgPT0gQ2hhcmFjdGVyLkVSUk9SKSB7CisgICAgICAgICAgICAgICAgICAgIGxvd2VyQ2hhckFycmF5ID0KKyAgICAgICAgICAgICAgICAgICAgICAgIENvbmRpdGlvbmFsU3BlY2lhbENhc2luZy50b0xvd2VyQ2FzZUNoYXJBcnJheSh0aGlzLCBpLCBsb2NhbGUpOworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc3JjQ291bnQgPT0gMikgeworCQkgICAgcmVzdWx0T2Zmc2V0ICs9IENoYXJhY3Rlci50b0NoYXJzKGxvd2VyQ2hhciwgcmVzdWx0LCBpICsgcmVzdWx0T2Zmc2V0KSAtIHNyY0NvdW50OworCQkgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKwkJICAgIGxvd2VyQ2hhckFycmF5ID0gQ2hhcmFjdGVyLnRvQ2hhcnMobG93ZXJDaGFyKTsKKwkJfQorCisgICAgICAgICAgICAgICAgLyogR3JvdyByZXN1bHQgaWYgbmVlZGVkICovCisgICAgICAgICAgICAgICAgaW50IG1hcExlbiA9IGxvd2VyQ2hhckFycmF5Lmxlbmd0aDsKKwkJaWYgKG1hcExlbiA+IHNyY0NvdW50KSB7CisgICAgICAgICAgICAgICAgICAgIGNoYXJbXSByZXN1bHQyID0gbmV3IGNoYXJbcmVzdWx0Lmxlbmd0aCArIG1hcExlbiAtIHNyY0NvdW50XTsKKyAgICAgICAgICAgICAgICAgICAgU3lzdGVtLmFycmF5Y29weShyZXN1bHQsIDAsIHJlc3VsdDIsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICBpICsgcmVzdWx0T2Zmc2V0KTsKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gcmVzdWx0MjsKKwkJfQorICAgICAgICAgICAgICAgIGZvciAoaW50IHg9MDsgeDxtYXBMZW47ICsreCkgeworICAgICAgICAgICAgICAgICAgICByZXN1bHRbaStyZXN1bHRPZmZzZXQreF0gPSBsb3dlckNoYXJBcnJheVt4XTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcmVzdWx0T2Zmc2V0ICs9IChtYXBMZW4gLSBzcmNDb3VudCk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHJlc3VsdFtpK3Jlc3VsdE9mZnNldF0gPSAoY2hhcilsb3dlckNoYXI7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG5ldyBTdHJpbmcoMCwgY291bnQrcmVzdWx0T2Zmc2V0LCByZXN1bHQpOworICAgIH0KKworICAgIC8qKgorICAgICAqIENvbnZlcnRzIGFsbCBvZiB0aGUgY2hhcmFjdGVycyBpbiB0aGlzIDxjb2RlPlN0cmluZzwvY29kZT4gdG8gbG93ZXIKKyAgICAgKiBjYXNlIHVzaW5nIHRoZSBydWxlcyBvZiB0aGUgZGVmYXVsdCBsb2NhbGUuIFRoaXMgaXMgZXF1aXZhbGVudCB0byBjYWxsaW5nCisgICAgICogPGNvZGU+dG9Mb3dlckNhc2UoTG9jYWxlLmdldERlZmF1bHQoKSk8L2NvZGU+LgorICAgICAqIDxwPgorICAgICAqIEByZXR1cm4gIHRoZSA8Y29kZT5TdHJpbmc8L2NvZGU+LCBjb252ZXJ0ZWQgdG8gbG93ZXJjYXNlLgorICAgICAqIEBzZWUgICAgIGphdmEubGFuZy5TdHJpbmcjdG9Mb3dlckNhc2UoTG9jYWxlKQorICAgICAqLworICAgIHB1YmxpYyBTdHJpbmcgdG9Mb3dlckNhc2UoKSB7CisgICAgICAgIHJldHVybiB0b0xvd2VyQ2FzZShMb2NhbGUuZ2V0RGVmYXVsdCgpKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDb252ZXJ0cyBhbGwgb2YgdGhlIGNoYXJhY3RlcnMgaW4gdGhpcyA8Y29kZT5TdHJpbmc8L2NvZGU+IHRvIHVwcGVyCisgICAgICogY2FzZSB1c2luZyB0aGUgcnVsZXMgb2YgdGhlIGdpdmVuIDxjb2RlPkxvY2FsZTwvY29kZT4uIENhc2UgbWFwcGluZyBpcyBiYXNlZAorICAgICAqIG9uIHRoZSBVbmljb2RlIFN0YW5kYXJkIHZlcnNpb24gc3BlY2lmaWVkIGJ5IHRoZSB7QGxpbmsgamF2YS5sYW5nLkNoYXJhY3RlciBDaGFyYWN0ZXJ9CisgICAgICogY2xhc3MuIFNpbmNlIGNhc2UgbWFwcGluZ3MgYXJlIG5vdCBhbHdheXMgMToxIGNoYXIgbWFwcGluZ3MsIHRoZSByZXN1bHRpbmcKKyAgICAgKiA8Y29kZT5TdHJpbmc8L2NvZGU+IG1heSBiZSBhIGRpZmZlcmVudCBsZW5ndGggdGhhbiB0aGUgb3JpZ2luYWwgPGNvZGU+U3RyaW5nPC9jb2RlPi4KKyAgICAgKiA8cD4KKyAgICAgKiBFeGFtcGxlcyBvZiBsb2NhbGUtc2Vuc2l0aXZlIGFuZCAxOk0gY2FzZSBtYXBwaW5ncyBhcmUgaW4gdGhlIGZvbGxvd2luZyB0YWJsZS4KKyAgICAgKiA8cD4KKyAgICAgKiA8dGFibGUgYm9yZGVyPSIxIiBzdW1tYXJ5PSJFeGFtcGxlcyBvZiBsb2NhbGUtc2Vuc2l0aXZlIGFuZCAxOk0gY2FzZSBtYXBwaW5ncy4gU2hvd3MgTGFuZ3VhZ2UgY29kZSBvZiBsb2NhbGUsIGxvd2VyIGNhc2UsIHVwcGVyIGNhc2UsIGFuZCBkZXNjcmlwdGlvbi4iPgorICAgICAqIDx0cj4KKyAgICAgKiAgIDx0aD5MYW5ndWFnZSBDb2RlIG9mIExvY2FsZTwvdGg+CisgICAgICogICA8dGg+TG93ZXIgQ2FzZTwvdGg+CisgICAgICogICA8dGg+VXBwZXIgQ2FzZTwvdGg+CisgICAgICogICA8dGg+RGVzY3JpcHRpb248L3RoPgorICAgICAqIDwvdHI+CisgICAgICogPHRyPgorICAgICAqICAgPHRkPnRyIChUdXJraXNoKTwvdGQ+CisgICAgICogICA8dGQ+JiM5Mjt1MDA2OTwvdGQ+CisgICAgICogICA8dGQ+JiM5Mjt1MDEzMDwvdGQ+CisgICAgICogICA8dGQ+c21hbGwgbGV0dGVyIGkgLSZndDsgY2FwaXRhbCBsZXR0ZXIgSSB3aXRoIGRvdCBhYm92ZTwvdGQ+CisgICAgICogPC90cj4KKyAgICAgKiA8dHI+CisgICAgICogICA8dGQ+dHIgKFR1cmtpc2gpPC90ZD4KKyAgICAgKiAgIDx0ZD4mIzkyO3UwMTMxPC90ZD4KKyAgICAgKiAgIDx0ZD4mIzkyO3UwMDQ5PC90ZD4KKyAgICAgKiAgIDx0ZD5zbWFsbCBsZXR0ZXIgZG90bGVzcyBpIC0mZ3Q7IGNhcGl0YWwgbGV0dGVyIEk8L3RkPgorICAgICAqIDwvdHI+CisgICAgICogPHRyPgorICAgICAqICAgPHRkPihhbGwpPC90ZD4KKyAgICAgKiAgIDx0ZD4mIzkyO3UwMGRmPC90ZD4KKyAgICAgKiAgIDx0ZD4mIzkyO3UwMDUzICYjOTI7dTAwNTM8L3RkPgorICAgICAqICAgPHRkPnNtYWxsIGxldHRlciBzaGFycCBzIC0mZ3Q7IHR3byBsZXR0ZXJzOiBTUzwvdGQ+CisgICAgICogPC90cj4KKyAgICAgKiA8dHI+CisgICAgICogICA8dGQ+KGFsbCk8L3RkPgorICAgICAqICAgPHRkPkZhaHJ2ZXJnbiZ1dW1sO2dlbjwvdGQ+CisgICAgICogICA8dGQ+RkFIUlZFUkdOJlV1bWw7R0VOPC90ZD4KKyAgICAgKiAgIDx0ZD48L3RkPgorICAgICAqIDwvdHI+CisgICAgICogPC90YWJsZT4KKyAgICAgKiBAcGFyYW0gbG9jYWxlIHVzZSB0aGUgY2FzZSB0cmFuc2Zvcm1hdGlvbiBydWxlcyBmb3IgdGhpcyBsb2NhbGUKKyAgICAgKiBAcmV0dXJuIHRoZSA8Y29kZT5TdHJpbmc8L2NvZGU+LCBjb252ZXJ0ZWQgdG8gdXBwZXJjYXNlLgorICAgICAqIEBzZWUgICAgIGphdmEubGFuZy5TdHJpbmcjdG9VcHBlckNhc2UoKQorICAgICAqIEBzZWUgICAgIGphdmEubGFuZy5TdHJpbmcjdG9Mb3dlckNhc2UoKQorICAgICAqIEBzZWUgICAgIGphdmEubGFuZy5TdHJpbmcjdG9Mb3dlckNhc2UoTG9jYWxlKQorICAgICAqIEBzaW5jZSAgIDEuMQorICAgICAqLworICAgIHB1YmxpYyBTdHJpbmcgdG9VcHBlckNhc2UoTG9jYWxlIGxvY2FsZSkgeworCWlmIChsb2NhbGUgPT0gbnVsbCkgeworCSAgICB0aHJvdyBuZXcgTnVsbFBvaW50ZXJFeGNlcHRpb24oKTsKKyAgICAgICAgfQorCisgICAgICAgIGludCAgICAgZmlyc3RMb3dlcjsKKworCS8qIE5vdyBjaGVjayBpZiB0aGVyZSBhcmUgYW55IGNoYXJhY3RlcnMgdGhhdCBuZWVkIHRvIGJlIGNoYW5nZWQuICovCisJc2NhbjogeworCSAgICBmb3IgKGZpcnN0TG93ZXIgPSAwIDsgZmlyc3RMb3dlciA8IGNvdW50OyApIHsKKwkJaW50IGMgPSAoaW50KXZhbHVlW29mZnNldCtmaXJzdExvd2VyXTsKKwkJaW50IHNyY0NvdW50OworCQlpZiAoKGMgPj0gQ2hhcmFjdGVyLk1JTl9ISUdIX1NVUlJPR0FURSkgJiYKKwkJICAgIChjIDw9IENoYXJhY3Rlci5NQVhfSElHSF9TVVJST0dBVEUpKSB7CisJCSAgICBjID0gY29kZVBvaW50QXQoZmlyc3RMb3dlcik7CisJCSAgICBzcmNDb3VudCA9IENoYXJhY3Rlci5jaGFyQ291bnQoYyk7CisJCX0gZWxzZSB7CisJCSAgICBzcmNDb3VudCA9IDE7CisJCX0KKwkJaW50IHVwcGVyQ2FzZUNoYXIgPSBDaGFyYWN0ZXIudG9VcHBlckNhc2VFeChjKTsKKwkJaWYgKCh1cHBlckNhc2VDaGFyID09IENoYXJhY3Rlci5FUlJPUikgfHwKKwkJICAgIChjICE9IHVwcGVyQ2FzZUNoYXIpKSB7CisJCSAgICBicmVhayBzY2FuOworCQl9CisJCWZpcnN0TG93ZXIgKz0gc3JjQ291bnQ7CisJICAgIH0KKwkgICAgcmV0dXJuIHRoaXM7CisJfQorCisgICAgICAgIGNoYXJbXSAgcmVzdWx0ICAgICAgID0gbmV3IGNoYXJbY291bnRdOyAvKiBtYXkgZ3JvdyAqLworCWludCAgICAgcmVzdWx0T2Zmc2V0ID0gMDsgIC8qIHJlc3VsdCBtYXkgZ3Jvdywgc28gaStyZXN1bHRPZmZzZXQKKwkJCQkgICAgKiBpcyB0aGUgd3JpdGUgbG9jYXRpb24gaW4gcmVzdWx0ICovCisKKwkvKiBKdXN0IGNvcHkgdGhlIGZpcnN0IGZldyB1cHBlckNhc2UgY2hhcmFjdGVycy4gKi8KKwlTeXN0ZW0uYXJyYXljb3B5KHZhbHVlLCBvZmZzZXQsIHJlc3VsdCwgMCwgZmlyc3RMb3dlcik7CisKKwlTdHJpbmcgbGFuZyA9IGxvY2FsZS5nZXRMYW5ndWFnZSgpOworCWJvb2xlYW4gbG9jYWxlRGVwZW5kZW50ID0KKyAgICAgICAgICAgIChsYW5nID09ICJ0ciIgfHwgbGFuZyA9PSAiYXoiIHx8IGxhbmcgPT0gImx0Iik7CisgICAgICAgIGNoYXJbXSB1cHBlckNoYXJBcnJheTsKKyAgICAgICAgaW50IHVwcGVyQ2hhcjsKKyAgICAgICAgaW50IHNyY0NoYXI7CisgICAgICAgIGludCBzcmNDb3VudDsKKyAgICAgICAgZm9yIChpbnQgaSA9IGZpcnN0TG93ZXI7IGkgPCBjb3VudDsgaSArPSBzcmNDb3VudCkgeworCSAgICBzcmNDaGFyID0gKGludCl2YWx1ZVtvZmZzZXQraV07CisJICAgIGlmICgoY2hhcilzcmNDaGFyID49IENoYXJhY3Rlci5NSU5fSElHSF9TVVJST0dBVEUgJiYKKwkgICAgICAgIChjaGFyKXNyY0NoYXIgPD0gQ2hhcmFjdGVyLk1BWF9ISUdIX1NVUlJPR0FURSkgeworCQlzcmNDaGFyID0gY29kZVBvaW50QXQoaSk7CisJCXNyY0NvdW50ID0gQ2hhcmFjdGVyLmNoYXJDb3VudChzcmNDaGFyKTsKKwkgICAgfSBlbHNlIHsKKwkgICAgICAgIHNyY0NvdW50ID0gMTsKKwkgICAgfQorICAgICAgICAgICAgaWYgKGxvY2FsZURlcGVuZGVudCkgeworICAgICAgICAgICAgICAgIHVwcGVyQ2hhciA9IENvbmRpdGlvbmFsU3BlY2lhbENhc2luZy50b1VwcGVyQ2FzZUV4KHRoaXMsIGksIGxvY2FsZSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHVwcGVyQ2hhciA9IENoYXJhY3Rlci50b1VwcGVyQ2FzZUV4KHNyY0NoYXIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKCh1cHBlckNoYXIgPT0gQ2hhcmFjdGVyLkVSUk9SKSB8fAorICAgICAgICAgICAgICAgICh1cHBlckNoYXIgPj0gQ2hhcmFjdGVyLk1JTl9TVVBQTEVNRU5UQVJZX0NPREVfUE9JTlQpKSB7CisgICAgICAgICAgICAgICAgaWYgKHVwcGVyQ2hhciA9PSBDaGFyYWN0ZXIuRVJST1IpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGxvY2FsZURlcGVuZGVudCkgeworICAgICAgICAgICAgICAgICAgICAgICAgdXBwZXJDaGFyQXJyYXkgPQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbmRpdGlvbmFsU3BlY2lhbENhc2luZy50b1VwcGVyQ2FzZUNoYXJBcnJheSh0aGlzLCBpLCBsb2NhbGUpOworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgdXBwZXJDaGFyQXJyYXkgPSBDaGFyYWN0ZXIudG9VcHBlckNhc2VDaGFyQXJyYXkoc3JjQ2hhcik7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHNyY0NvdW50ID09IDIpIHsKKwkJICAgIHJlc3VsdE9mZnNldCArPSBDaGFyYWN0ZXIudG9DaGFycyh1cHBlckNoYXIsIHJlc3VsdCwgaSArIHJlc3VsdE9mZnNldCkgLSBzcmNDb3VudDsKKwkJICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHVwcGVyQ2hhckFycmF5ID0gQ2hhcmFjdGVyLnRvQ2hhcnModXBwZXJDaGFyKTsKKwkJfQorCisgICAgICAgICAgICAgICAgLyogR3JvdyByZXN1bHQgaWYgbmVlZGVkICovCisgICAgICAgICAgICAgICAgaW50IG1hcExlbiA9IHVwcGVyQ2hhckFycmF5Lmxlbmd0aDsKKwkJaWYgKG1hcExlbiA+IHNyY0NvdW50KSB7CisgICAgICAgICAgICAgICAgICAgIGNoYXJbXSByZXN1bHQyID0gbmV3IGNoYXJbcmVzdWx0Lmxlbmd0aCArIG1hcExlbiAtIHNyY0NvdW50XTsKKyAgICAgICAgICAgICAgICAgICAgU3lzdGVtLmFycmF5Y29weShyZXN1bHQsIDAsIHJlc3VsdDIsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICBpICsgcmVzdWx0T2Zmc2V0KTsKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gcmVzdWx0MjsKKwkJfQorICAgICAgICAgICAgICAgIGZvciAoaW50IHg9MDsgeDxtYXBMZW47ICsreCkgeworICAgICAgICAgICAgICAgICAgICByZXN1bHRbaStyZXN1bHRPZmZzZXQreF0gPSB1cHBlckNoYXJBcnJheVt4XTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcmVzdWx0T2Zmc2V0ICs9IChtYXBMZW4gLSBzcmNDb3VudCk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHJlc3VsdFtpK3Jlc3VsdE9mZnNldF0gPSAoY2hhcil1cHBlckNoYXI7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG5ldyBTdHJpbmcoMCwgY291bnQrcmVzdWx0T2Zmc2V0LCByZXN1bHQpOworICAgIH0KKworICAgIC8qKgorICAgICAqIENvbnZlcnRzIGFsbCBvZiB0aGUgY2hhcmFjdGVycyBpbiB0aGlzIDxjb2RlPlN0cmluZzwvY29kZT4gdG8gdXBwZXIKKyAgICAgKiBjYXNlIHVzaW5nIHRoZSBydWxlcyBvZiB0aGUgZGVmYXVsdCBsb2NhbGUuIFRoaXMgbWV0aG9kIGlzIGVxdWl2YWxlbnQgdG8KKyAgICAgKiA8Y29kZT50b1VwcGVyQ2FzZShMb2NhbGUuZ2V0RGVmYXVsdCgpKTwvY29kZT4uCisgICAgICogPHA+CisgICAgICogQHJldHVybiAgdGhlIDxjb2RlPlN0cmluZzwvY29kZT4sIGNvbnZlcnRlZCB0byB1cHBlcmNhc2UuCisgICAgICogQHNlZSAgICAgamF2YS5sYW5nLlN0cmluZyN0b1VwcGVyQ2FzZShMb2NhbGUpCisgICAgICovCisgICAgcHVibGljIFN0cmluZyB0b1VwcGVyQ2FzZSgpIHsKKyAgICAgICAgcmV0dXJuIHRvVXBwZXJDYXNlKExvY2FsZS5nZXREZWZhdWx0KCkpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFJldHVybnMgYSBjb3B5IG9mIHRoZSBzdHJpbmcsIHdpdGggbGVhZGluZyBhbmQgdHJhaWxpbmcgd2hpdGVzcGFjZQorICAgICAqIG9taXR0ZWQuCisgICAgICogPHA+CisgICAgICogSWYgdGhpcyA8Y29kZT5TdHJpbmc8L2NvZGU+IG9iamVjdCByZXByZXNlbnRzIGFuIGVtcHR5IGNoYXJhY3RlcgorICAgICAqIHNlcXVlbmNlLCBvciB0aGUgZmlyc3QgYW5kIGxhc3QgY2hhcmFjdGVycyBvZiBjaGFyYWN0ZXIgc2VxdWVuY2UKKyAgICAgKiByZXByZXNlbnRlZCBieSB0aGlzIDxjb2RlPlN0cmluZzwvY29kZT4gb2JqZWN0IGJvdGggaGF2ZSBjb2RlcworICAgICAqIGdyZWF0ZXIgdGhhbiA8Y29kZT4nJiM5Mjt1MDAyMCc8L2NvZGU+ICh0aGUgc3BhY2UgY2hhcmFjdGVyKSwgdGhlbiBhCisgICAgICogcmVmZXJlbmNlIHRvIHRoaXMgPGNvZGU+U3RyaW5nPC9jb2RlPiBvYmplY3QgaXMgcmV0dXJuZWQuCisgICAgICogPHA+CisgICAgICogT3RoZXJ3aXNlLCBpZiB0aGVyZSBpcyBubyBjaGFyYWN0ZXIgd2l0aCBhIGNvZGUgZ3JlYXRlciB0aGFuCisgICAgICogPGNvZGU+JyYjOTI7dTAwMjAnPC9jb2RlPiBpbiB0aGUgc3RyaW5nLCB0aGVuIGEgbmV3CisgICAgICogPGNvZGU+U3RyaW5nPC9jb2RlPiBvYmplY3QgcmVwcmVzZW50aW5nIGFuIGVtcHR5IHN0cmluZyBpcyBjcmVhdGVkCisgICAgICogYW5kIHJldHVybmVkLgorICAgICAqIDxwPgorICAgICAqIE90aGVyd2lzZSwgbGV0IDxpPms8L2k+IGJlIHRoZSBpbmRleCBvZiB0aGUgZmlyc3QgY2hhcmFjdGVyIGluIHRoZQorICAgICAqIHN0cmluZyB3aG9zZSBjb2RlIGlzIGdyZWF0ZXIgdGhhbiA8Y29kZT4nJiM5Mjt1MDAyMCc8L2NvZGU+LCBhbmQgbGV0CisgICAgICogPGk+bTwvaT4gYmUgdGhlIGluZGV4IG9mIHRoZSBsYXN0IGNoYXJhY3RlciBpbiB0aGUgc3RyaW5nIHdob3NlIGNvZGUKKyAgICAgKiBpcyBncmVhdGVyIHRoYW4gPGNvZGU+JyYjOTI7dTAwMjAnPC9jb2RlPi4gQSBuZXcgPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIG9iamVjdCBpcyBjcmVhdGVkLCByZXByZXNlbnRpbmcgdGhlIHN1YnN0cmluZyBvZiB0aGlzIHN0cmluZyB0aGF0CisgICAgICogYmVnaW5zIHdpdGggdGhlIGNoYXJhY3RlciBhdCBpbmRleCA8aT5rPC9pPiBhbmQgZW5kcyB3aXRoIHRoZQorICAgICAqIGNoYXJhY3RlciBhdCBpbmRleCA8aT5tPC9pPi10aGF0IGlzLCB0aGUgcmVzdWx0IG9mCisgICAgICogPGNvZGU+dGhpcy5zdWJzdHJpbmcoPGk+azwvaT4sJm5ic3A7PGk+bTwvaT4rMSk8L2NvZGU+LgorICAgICAqIDxwPgorICAgICAqIFRoaXMgbWV0aG9kIG1heSBiZSB1c2VkIHRvIHRyaW0gd2hpdGVzcGFjZSAoYXMgZGVmaW5lZCBhYm92ZSkgZnJvbQorICAgICAqIHRoZSBiZWdpbm5pbmcgYW5kIGVuZCBvZiBhIHN0cmluZy4KKyAgICAgKgorICAgICAqIEByZXR1cm4gIEEgY29weSBvZiB0aGlzIHN0cmluZyB3aXRoIGxlYWRpbmcgYW5kIHRyYWlsaW5nIHdoaXRlCisgICAgICogICAgICAgICAgc3BhY2UgcmVtb3ZlZCwgb3IgdGhpcyBzdHJpbmcgaWYgaXQgaGFzIG5vIGxlYWRpbmcgb3IKKyAgICAgKiAgICAgICAgICB0cmFpbGluZyB3aGl0ZSBzcGFjZS4KKyAgICAgKi8KKyAgICBwdWJsaWMgU3RyaW5nIHRyaW0oKSB7CisJaW50IGxlbiA9IGNvdW50OworCWludCBzdCA9IDA7CisJaW50IG9mZiA9IG9mZnNldDsgICAgICAvKiBhdm9pZCBnZXRmaWVsZCBvcGNvZGUgKi8KKwljaGFyW10gdmFsID0gdmFsdWU7ICAgIC8qIGF2b2lkIGdldGZpZWxkIG9wY29kZSAqLworCisJd2hpbGUgKChzdCA8IGxlbikgJiYgKHZhbFtvZmYgKyBzdF0gPD0gJyAnKSkgeworCSAgICBzdCsrOworCX0KKwl3aGlsZSAoKHN0IDwgbGVuKSAmJiAodmFsW29mZiArIGxlbiAtIDFdIDw9ICcgJykpIHsKKwkgICAgbGVuLS07CisJfQorCXJldHVybiAoKHN0ID4gMCkgfHwgKGxlbiA8IGNvdW50KSkgPyBzdWJzdHJpbmcoc3QsIGxlbikgOiB0aGlzOworICAgIH0KKworICAgIC8qKgorICAgICAqIFRoaXMgb2JqZWN0ICh3aGljaCBpcyBhbHJlYWR5IGEgc3RyaW5nISkgaXMgaXRzZWxmIHJldHVybmVkLgorICAgICAqCisgICAgICogQHJldHVybiAgdGhlIHN0cmluZyBpdHNlbGYuCisgICAgICovCisgICAgcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKKwlyZXR1cm4gdGhpczsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDb252ZXJ0cyB0aGlzIHN0cmluZyB0byBhIG5ldyBjaGFyYWN0ZXIgYXJyYXkuCisgICAgICoKKyAgICAgKiBAcmV0dXJuICBhIG5ld2x5IGFsbG9jYXRlZCBjaGFyYWN0ZXIgYXJyYXkgd2hvc2UgbGVuZ3RoIGlzIHRoZSBsZW5ndGgKKyAgICAgKiAgICAgICAgICBvZiB0aGlzIHN0cmluZyBhbmQgd2hvc2UgY29udGVudHMgYXJlIGluaXRpYWxpemVkIHRvIGNvbnRhaW4KKyAgICAgKiAgICAgICAgICB0aGUgY2hhcmFjdGVyIHNlcXVlbmNlIHJlcHJlc2VudGVkIGJ5IHRoaXMgc3RyaW5nLgorICAgICAqLworICAgIHB1YmxpYyBjaGFyW10gdG9DaGFyQXJyYXkoKSB7CisJY2hhciByZXN1bHRbXSA9IG5ldyBjaGFyW2NvdW50XTsKKwlnZXRDaGFycygwLCBjb3VudCwgcmVzdWx0LCAwKTsKKwlyZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIC8qKgorICAgICAqIFJldHVybnMgYSBmb3JtYXR0ZWQgc3RyaW5nIHVzaW5nIHRoZSBzcGVjaWZpZWQgZm9ybWF0IHN0cmluZyBhbmQKKyAgICAgKiBhcmd1bWVudHMuCisgICAgICoKKyAgICAgKiA8cD4gVGhlIGxvY2FsZSBhbHdheXMgdXNlZCBpcyB0aGUgb25lIHJldHVybmVkIGJ5IHtAbGluaworICAgICAqIGphdmEudXRpbC5Mb2NhbGUjZ2V0RGVmYXVsdCgpIExvY2FsZS5nZXREZWZhdWx0KCl9LgorICAgICAqCisgICAgICogQHBhcmFtICBmb3JtYXQKKyAgICAgKiAgICAgICAgIEEgPGEgaHJlZj0iLi4vdXRpbC9Gb3JtYXR0ZXIuaHRtbCNzeW50YXgiPmZvcm1hdCBzdHJpbmc8L2E+CisgICAgICoKKyAgICAgKiBAcGFyYW0gIGFyZ3MKKyAgICAgKiAgICAgICAgIEFyZ3VtZW50cyByZWZlcmVuY2VkIGJ5IHRoZSBmb3JtYXQgc3BlY2lmaWVycyBpbiB0aGUgZm9ybWF0CisgICAgICogICAgICAgICBzdHJpbmcuICBJZiB0aGVyZSBhcmUgbW9yZSBhcmd1bWVudHMgdGhhbiBmb3JtYXQgc3BlY2lmaWVycywgdGhlCisgICAgICogICAgICAgICBleHRyYSBhcmd1bWVudHMgYXJlIGlnbm9yZWQuICBUaGUgbnVtYmVyIG9mIGFyZ3VtZW50cyBpcworICAgICAqICAgICAgICAgdmFyaWFibGUgYW5kIG1heSBiZSB6ZXJvLiAgVGhlIG1heGltdW0gbnVtYmVyIG9mIGFyZ3VtZW50cyBpcworICAgICAqICAgICAgICAgbGltaXRlZCBieSB0aGUgbWF4aW11bSBkaW1lbnNpb24gb2YgYSBKYXZhIGFycmF5IGFzIGRlZmluZWQgYnkKKyAgICAgKiAgICAgICAgIHRoZSA8YSBocmVmPSJodHRwOi8vamF2YS5zdW4uY29tL2RvY3MvYm9va3Mvdm1zcGVjLyI+SmF2YQorICAgICAqICAgICAgICAgVmlydHVhbCBNYWNoaW5lIFNwZWNpZmljYXRpb248L2E+LiAgVGhlIGJlaGF2aW91ciBvbiBhCisgICAgICogICAgICAgICA8dHQ+bnVsbDwvdHQ+IGFyZ3VtZW50IGRlcGVuZHMgb24gdGhlIDxhCisgICAgICogICAgICAgICBocmVmPSIuLi91dGlsL0Zvcm1hdHRlci5odG1sI3N5bnRheCI+Y29udmVyc2lvbjwvYT4uCisgICAgICoKKyAgICAgKiBAdGhyb3dzICBJbGxlZ2FsRm9ybWF0RXhjZXB0aW9uCisgICAgICogICAgICAgICAgSWYgYSBmb3JtYXQgc3RyaW5nIGNvbnRhaW5zIGFuIGlsbGVnYWwgc3ludGF4LCBhIGZvcm1hdAorICAgICAqICAgICAgICAgIHNwZWNpZmllciB0aGF0IGlzIGluY29tcGF0aWJsZSB3aXRoIHRoZSBnaXZlbiBhcmd1bWVudHMsCisgICAgICogICAgICAgICAgaW5zdWZmaWNpZW50IGFyZ3VtZW50cyBnaXZlbiB0aGUgZm9ybWF0IHN0cmluZywgb3Igb3RoZXIKKyAgICAgKiAgICAgICAgICBpbGxlZ2FsIGNvbmRpdGlvbnMuICBGb3Igc3BlY2lmaWNhdGlvbiBvZiBhbGwgcG9zc2libGUKKyAgICAgKiAgICAgICAgICBmb3JtYXR0aW5nIGVycm9ycywgc2VlIHRoZSA8YQorICAgICAqICAgICAgICAgIGhyZWY9Ii4uL3V0aWwvRm9ybWF0dGVyLmh0bWwjZGV0YWlsIj5EZXRhaWxzPC9hPiBzZWN0aW9uIG9mIHRoZQorICAgICAqICAgICAgICAgIGZvcm1hdHRlciBjbGFzcyBzcGVjaWZpY2F0aW9uLgorICAgICAqCisgICAgICogQHRocm93cyAgTnVsbFBvaW50ZXJFeGNlcHRpb24KKyAgICAgKiAgICAgICAgICBJZiB0aGUgPHR0PmZvcm1hdDwvdHQ+IGlzIDx0dD5udWxsPC90dD4KKyAgICAgKgorICAgICAqIEByZXR1cm4gIEEgZm9ybWF0dGVkIHN0cmluZworICAgICAqCisgICAgICogQHNlZSAgamF2YS51dGlsLkZvcm1hdHRlcgorICAgICAqIEBzaW5jZSAgMS41CisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBTdHJpbmcgZm9ybWF0KFN0cmluZyBmb3JtYXQsIE9iamVjdCAuLi4gYXJncykgeworCXJldHVybiBuZXcgRm9ybWF0dGVyKCkuZm9ybWF0KGZvcm1hdCwgYXJncykudG9TdHJpbmcoKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIGEgZm9ybWF0dGVkIHN0cmluZyB1c2luZyB0aGUgc3BlY2lmaWVkIGxvY2FsZSwgZm9ybWF0IHN0cmluZywKKyAgICAgKiBhbmQgYXJndW1lbnRzLgorICAgICAqCisgICAgICogQHBhcmFtICBsCisgICAgICogICAgICAgICBUaGUge0BsaW5rcGxhaW4gamF2YS51dGlsLkxvY2FsZSBsb2NhbGV9IHRvIGFwcGx5IGR1cmluZworICAgICAqICAgICAgICAgZm9ybWF0dGluZy4gIElmIDx0dD5sPC90dD4gaXMgPHR0Pm51bGw8L3R0PiB0aGVuIG5vIGxvY2FsaXphdGlvbgorICAgICAqICAgICAgICAgaXMgYXBwbGllZC4KKyAgICAgKgorICAgICAqIEBwYXJhbSAgZm9ybWF0CisgICAgICogICAgICAgICBBIDxhIGhyZWY9Ii4uL3V0aWwvRm9ybWF0dGVyLmh0bWwjc3ludGF4Ij5mb3JtYXQgc3RyaW5nPC9hPgorICAgICAqCisgICAgICogQHBhcmFtICBhcmdzCisgICAgICogICAgICAgICBBcmd1bWVudHMgcmVmZXJlbmNlZCBieSB0aGUgZm9ybWF0IHNwZWNpZmllcnMgaW4gdGhlIGZvcm1hdAorICAgICAqICAgICAgICAgc3RyaW5nLiAgSWYgdGhlcmUgYXJlIG1vcmUgYXJndW1lbnRzIHRoYW4gZm9ybWF0IHNwZWNpZmllcnMsIHRoZQorICAgICAqICAgICAgICAgZXh0cmEgYXJndW1lbnRzIGFyZSBpZ25vcmVkLiAgVGhlIG51bWJlciBvZiBhcmd1bWVudHMgaXMKKyAgICAgKiAgICAgICAgIHZhcmlhYmxlIGFuZCBtYXkgYmUgemVyby4gIFRoZSBtYXhpbXVtIG51bWJlciBvZiBhcmd1bWVudHMgaXMKKyAgICAgKiAgICAgICAgIGxpbWl0ZWQgYnkgdGhlIG1heGltdW0gZGltZW5zaW9uIG9mIGEgSmF2YSBhcnJheSBhcyBkZWZpbmVkIGJ5CisgICAgICogICAgICAgICB0aGUgPGEgaHJlZj0iaHR0cDovL2phdmEuc3VuLmNvbS9kb2NzL2Jvb2tzL3Ztc3BlYy8iPkphdmEKKyAgICAgKiAgICAgICAgIFZpcnR1YWwgTWFjaGluZSBTcGVjaWZpY2F0aW9uPC9hPi4gIFRoZSBiZWhhdmlvdXIgb24gYQorICAgICAqICAgICAgICAgPHR0Pm51bGw8L3R0PiBhcmd1bWVudCBkZXBlbmRzIG9uIHRoZSA8YQorICAgICAqICAgICAgICAgaHJlZj0iLi4vdXRpbC9Gb3JtYXR0ZXIuaHRtbCNzeW50YXgiPmNvbnZlcnNpb248L2E+LgorICAgICAqCisgICAgICogQHRocm93cyAgSWxsZWdhbEZvcm1hdEV4Y2VwdGlvbgorICAgICAqICAgICAgICAgIElmIGEgZm9ybWF0IHN0cmluZyBjb250YWlucyBhbiBpbGxlZ2FsIHN5bnRheCwgYSBmb3JtYXQKKyAgICAgKiAgICAgICAgICBzcGVjaWZpZXIgdGhhdCBpcyBpbmNvbXBhdGlibGUgd2l0aCB0aGUgZ2l2ZW4gYXJndW1lbnRzLAorICAgICAqICAgICAgICAgIGluc3VmZmljaWVudCBhcmd1bWVudHMgZ2l2ZW4gdGhlIGZvcm1hdCBzdHJpbmcsIG9yIG90aGVyCisgICAgICogICAgICAgICAgaWxsZWdhbCBjb25kaXRpb25zLiAgRm9yIHNwZWNpZmljYXRpb24gb2YgYWxsIHBvc3NpYmxlCisgICAgICogICAgICAgICAgZm9ybWF0dGluZyBlcnJvcnMsIHNlZSB0aGUgPGEKKyAgICAgKiAgICAgICAgICBocmVmPSIuLi91dGlsL0Zvcm1hdHRlci5odG1sI2RldGFpbCI+RGV0YWlsczwvYT4gc2VjdGlvbiBvZiB0aGUKKyAgICAgKiAgICAgICAgICBmb3JtYXR0ZXIgY2xhc3Mgc3BlY2lmaWNhdGlvbgorICAgICAqCisgICAgICogQHRocm93cyAgTnVsbFBvaW50ZXJFeGNlcHRpb24KKyAgICAgKiAgICAgICAgICBJZiB0aGUgPHR0PmZvcm1hdDwvdHQ+IGlzIDx0dD5udWxsPC90dD4KKyAgICAgKgorICAgICAqIEByZXR1cm4gIEEgZm9ybWF0dGVkIHN0cmluZworICAgICAqCisgICAgICogQHNlZSAgamF2YS51dGlsLkZvcm1hdHRlcgorICAgICAqIEBzaW5jZSAgMS41CisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBTdHJpbmcgZm9ybWF0KExvY2FsZSBsLCBTdHJpbmcgZm9ybWF0LCBPYmplY3QgLi4uIGFyZ3MpIHsKKwlyZXR1cm4gbmV3IEZvcm1hdHRlcihsKS5mb3JtYXQoZm9ybWF0LCBhcmdzKS50b1N0cmluZygpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFJldHVybnMgdGhlIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgPGNvZGU+T2JqZWN0PC9jb2RlPiBhcmd1bWVudC4KKyAgICAgKgorICAgICAqIEBwYXJhbSAgIG9iaiAgIGFuIDxjb2RlPk9iamVjdDwvY29kZT4uCisgICAgICogQHJldHVybiAgaWYgdGhlIGFyZ3VtZW50IGlzIDxjb2RlPm51bGw8L2NvZGU+LCB0aGVuIGEgc3RyaW5nIGVxdWFsIHRvCisgICAgICogICAgICAgICAgPGNvZGU+Im51bGwiPC9jb2RlPjsgb3RoZXJ3aXNlLCB0aGUgdmFsdWUgb2YKKyAgICAgKiAgICAgICAgICA8Y29kZT5vYmoudG9TdHJpbmcoKTwvY29kZT4gaXMgcmV0dXJuZWQuCisgICAgICogQHNlZSAgICAgamF2YS5sYW5nLk9iamVjdCN0b1N0cmluZygpCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBTdHJpbmcgdmFsdWVPZihPYmplY3Qgb2JqKSB7CisJcmV0dXJuIChvYmogPT0gbnVsbCkgPyAibnVsbCIgOiBvYmoudG9TdHJpbmcoKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIHRoZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIDxjb2RlPmNoYXI8L2NvZGU+IGFycmF5CisgICAgICogYXJndW1lbnQuIFRoZSBjb250ZW50cyBvZiB0aGUgY2hhcmFjdGVyIGFycmF5IGFyZSBjb3BpZWQ7IHN1YnNlcXVlbnQKKyAgICAgKiBtb2RpZmljYXRpb24gb2YgdGhlIGNoYXJhY3RlciBhcnJheSBkb2VzIG5vdCBhZmZlY3QgdGhlIG5ld2x5CisgICAgICogY3JlYXRlZCBzdHJpbmcuCisgICAgICoKKyAgICAgKiBAcGFyYW0gICBkYXRhICAgYSA8Y29kZT5jaGFyPC9jb2RlPiBhcnJheS4KKyAgICAgKiBAcmV0dXJuICBhIG5ld2x5IGFsbG9jYXRlZCBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSBzYW1lIHNlcXVlbmNlIG9mCisgICAgICogICAgICAgICAgY2hhcmFjdGVycyBjb250YWluZWQgaW4gdGhlIGNoYXJhY3RlciBhcnJheSBhcmd1bWVudC4KKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIFN0cmluZyB2YWx1ZU9mKGNoYXIgZGF0YVtdKSB7CisJcmV0dXJuIG5ldyBTdHJpbmcoZGF0YSk7CisgICAgfQorCisgICAgLyoqCisgICAgICogUmV0dXJucyB0aGUgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGEgc3BlY2lmaWMgc3ViYXJyYXkgb2YgdGhlCisgICAgICogPGNvZGU+Y2hhcjwvY29kZT4gYXJyYXkgYXJndW1lbnQuCisgICAgICogPHA+CisgICAgICogVGhlIDxjb2RlPm9mZnNldDwvY29kZT4gYXJndW1lbnQgaXMgdGhlIGluZGV4IG9mIHRoZSBmaXJzdAorICAgICAqIGNoYXJhY3RlciBvZiB0aGUgc3ViYXJyYXkuIFRoZSA8Y29kZT5jb3VudDwvY29kZT4gYXJndW1lbnQKKyAgICAgKiBzcGVjaWZpZXMgdGhlIGxlbmd0aCBvZiB0aGUgc3ViYXJyYXkuIFRoZSBjb250ZW50cyBvZiB0aGUgc3ViYXJyYXkKKyAgICAgKiBhcmUgY29waWVkOyBzdWJzZXF1ZW50IG1vZGlmaWNhdGlvbiBvZiB0aGUgY2hhcmFjdGVyIGFycmF5IGRvZXMgbm90CisgICAgICogYWZmZWN0IHRoZSBuZXdseSBjcmVhdGVkIHN0cmluZy4KKyAgICAgKgorICAgICAqIEBwYXJhbSAgIGRhdGEgICAgIHRoZSBjaGFyYWN0ZXIgYXJyYXkuCisgICAgICogQHBhcmFtICAgb2Zmc2V0ICAgdGhlIGluaXRpYWwgb2Zmc2V0IGludG8gdGhlIHZhbHVlIG9mIHRoZQorICAgICAqICAgICAgICAgICAgICAgICAgPGNvZGU+U3RyaW5nPC9jb2RlPi4KKyAgICAgKiBAcGFyYW0gICBjb3VudCAgICB0aGUgbGVuZ3RoIG9mIHRoZSB2YWx1ZSBvZiB0aGUgPGNvZGU+U3RyaW5nPC9jb2RlPi4KKyAgICAgKiBAcmV0dXJuICBhIHN0cmluZyByZXByZXNlbnRpbmcgdGhlIHNlcXVlbmNlIG9mIGNoYXJhY3RlcnMgY29udGFpbmVkCisgICAgICogICAgICAgICAgaW4gdGhlIHN1YmFycmF5IG9mIHRoZSBjaGFyYWN0ZXIgYXJyYXkgYXJndW1lbnQuCisgICAgICogQGV4Y2VwdGlvbiBJbmRleE91dE9mQm91bmRzRXhjZXB0aW9uIGlmIDxjb2RlPm9mZnNldDwvY29kZT4gaXMKKyAgICAgKiAgICAgICAgICBuZWdhdGl2ZSwgb3IgPGNvZGU+Y291bnQ8L2NvZGU+IGlzIG5lZ2F0aXZlLCBvcgorICAgICAqICAgICAgICAgIDxjb2RlPm9mZnNldCtjb3VudDwvY29kZT4gaXMgbGFyZ2VyIHRoYW4KKyAgICAgKiAgICAgICAgICA8Y29kZT5kYXRhLmxlbmd0aDwvY29kZT4uCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBTdHJpbmcgdmFsdWVPZihjaGFyIGRhdGFbXSwgaW50IG9mZnNldCwgaW50IGNvdW50KSB7CisJcmV0dXJuIG5ldyBTdHJpbmcoZGF0YSwgb2Zmc2V0LCBjb3VudCk7CisgICAgfQorCisgICAgLyoqCisgICAgICogUmV0dXJucyBhIFN0cmluZyB0aGF0IHJlcHJlc2VudHMgdGhlIGNoYXJhY3RlciBzZXF1ZW5jZSBpbiB0aGUKKyAgICAgKiBhcnJheSBzcGVjaWZpZWQuCisgICAgICoKKyAgICAgKiBAcGFyYW0gICBkYXRhICAgICB0aGUgY2hhcmFjdGVyIGFycmF5LgorICAgICAqIEBwYXJhbSAgIG9mZnNldCAgIGluaXRpYWwgb2Zmc2V0IG9mIHRoZSBzdWJhcnJheS4KKyAgICAgKiBAcGFyYW0gICBjb3VudCAgICBsZW5ndGggb2YgdGhlIHN1YmFycmF5LgorICAgICAqIEByZXR1cm4gIGEgPGNvZGU+U3RyaW5nPC9jb2RlPiB0aGF0IGNvbnRhaW5zIHRoZSBjaGFyYWN0ZXJzIG9mIHRoZQorICAgICAqICAgICAgICAgIHNwZWNpZmllZCBzdWJhcnJheSBvZiB0aGUgY2hhcmFjdGVyIGFycmF5LgorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGNvcHlWYWx1ZU9mKGNoYXIgZGF0YVtdLCBpbnQgb2Zmc2V0LCBpbnQgY291bnQpIHsKKwkvLyBBbGwgcHVibGljIFN0cmluZyBjb25zdHJ1Y3RvcnMgbm93IGNvcHkgdGhlIGRhdGEuCisJcmV0dXJuIG5ldyBTdHJpbmcoZGF0YSwgb2Zmc2V0LCBjb3VudCk7CisgICAgfQorCisgICAgLyoqCisgICAgICogUmV0dXJucyBhIFN0cmluZyB0aGF0IHJlcHJlc2VudHMgdGhlIGNoYXJhY3RlciBzZXF1ZW5jZSBpbiB0aGUKKyAgICAgKiBhcnJheSBzcGVjaWZpZWQuCisgICAgICoKKyAgICAgKiBAcGFyYW0gICBkYXRhICAgdGhlIGNoYXJhY3RlciBhcnJheS4KKyAgICAgKiBAcmV0dXJuICBhIDxjb2RlPlN0cmluZzwvY29kZT4gdGhhdCBjb250YWlucyB0aGUgY2hhcmFjdGVycyBvZiB0aGUKKyAgICAgKiAgICAgICAgICBjaGFyYWN0ZXIgYXJyYXkuCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBTdHJpbmcgY29weVZhbHVlT2YoY2hhciBkYXRhW10pIHsKKwlyZXR1cm4gY29weVZhbHVlT2YoZGF0YSwgMCwgZGF0YS5sZW5ndGgpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFJldHVybnMgdGhlIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgPGNvZGU+Ym9vbGVhbjwvY29kZT4gYXJndW1lbnQuCisgICAgICoKKyAgICAgKiBAcGFyYW0gICBiICAgYSA8Y29kZT5ib29sZWFuPC9jb2RlPi4KKyAgICAgKiBAcmV0dXJuICBpZiB0aGUgYXJndW1lbnQgaXMgPGNvZGU+dHJ1ZTwvY29kZT4sIGEgc3RyaW5nIGVxdWFsIHRvCisgICAgICogICAgICAgICAgPGNvZGU+InRydWUiPC9jb2RlPiBpcyByZXR1cm5lZDsgb3RoZXJ3aXNlLCBhIHN0cmluZyBlcXVhbCB0bworICAgICAqICAgICAgICAgIDxjb2RlPiJmYWxzZSI8L2NvZGU+IGlzIHJldHVybmVkLgorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIHZhbHVlT2YoYm9vbGVhbiBiKSB7CisJcmV0dXJuIGIgPyAidHJ1ZSIgOiAiZmFsc2UiOworICAgIH0KKworICAgIC8qKgorICAgICAqIFJldHVybnMgdGhlIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgPGNvZGU+Y2hhcjwvY29kZT4KKyAgICAgKiBhcmd1bWVudC4KKyAgICAgKgorICAgICAqIEBwYXJhbSAgIGMgICBhIDxjb2RlPmNoYXI8L2NvZGU+LgorICAgICAqIEByZXR1cm4gIGEgc3RyaW5nIG9mIGxlbmd0aCA8Y29kZT4xPC9jb2RlPiBjb250YWluaW5nCisgICAgICogICAgICAgICAgYXMgaXRzIHNpbmdsZSBjaGFyYWN0ZXIgdGhlIGFyZ3VtZW50IDxjb2RlPmM8L2NvZGU+LgorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIHZhbHVlT2YoY2hhciBjKSB7CisJY2hhciBkYXRhW10gPSB7Y307CisJcmV0dXJuIG5ldyBTdHJpbmcoMCwgMSwgZGF0YSk7CisgICAgfQorCisgICAgLyoqCisgICAgICogUmV0dXJucyB0aGUgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSA8Y29kZT5pbnQ8L2NvZGU+IGFyZ3VtZW50LgorICAgICAqIDxwPgorICAgICAqIFRoZSByZXByZXNlbnRhdGlvbiBpcyBleGFjdGx5IHRoZSBvbmUgcmV0dXJuZWQgYnkgdGhlCisgICAgICogPGNvZGU+SW50ZWdlci50b1N0cmluZzwvY29kZT4gbWV0aG9kIG9mIG9uZSBhcmd1bWVudC4KKyAgICAgKgorICAgICAqIEBwYXJhbSAgIGkgICBhbiA8Y29kZT5pbnQ8L2NvZGU+LgorICAgICAqIEByZXR1cm4gIGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSA8Y29kZT5pbnQ8L2NvZGU+IGFyZ3VtZW50LgorICAgICAqIEBzZWUgICAgIGphdmEubGFuZy5JbnRlZ2VyI3RvU3RyaW5nKGludCwgaW50KQorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIHZhbHVlT2YoaW50IGkpIHsKKyAgICAgICAgcmV0dXJuIEludGVnZXIudG9TdHJpbmcoaSwgMTApOworICAgIH0KKworICAgIC8qKgorICAgICAqIFJldHVybnMgdGhlIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgPGNvZGU+bG9uZzwvY29kZT4gYXJndW1lbnQuCisgICAgICogPHA+CisgICAgICogVGhlIHJlcHJlc2VudGF0aW9uIGlzIGV4YWN0bHkgdGhlIG9uZSByZXR1cm5lZCBieSB0aGUKKyAgICAgKiA8Y29kZT5Mb25nLnRvU3RyaW5nPC9jb2RlPiBtZXRob2Qgb2Ygb25lIGFyZ3VtZW50LgorICAgICAqCisgICAgICogQHBhcmFtICAgbCAgIGEgPGNvZGU+bG9uZzwvY29kZT4uCisgICAgICogQHJldHVybiAgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIDxjb2RlPmxvbmc8L2NvZGU+IGFyZ3VtZW50LgorICAgICAqIEBzZWUgICAgIGphdmEubGFuZy5Mb25nI3RvU3RyaW5nKGxvbmcpCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBTdHJpbmcgdmFsdWVPZihsb25nIGwpIHsKKyAgICAgICAgcmV0dXJuIExvbmcudG9TdHJpbmcobCwgMTApOworICAgIH0KKworICAgIC8qKgorICAgICAqIFJldHVybnMgdGhlIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgPGNvZGU+ZmxvYXQ8L2NvZGU+IGFyZ3VtZW50LgorICAgICAqIDxwPgorICAgICAqIFRoZSByZXByZXNlbnRhdGlvbiBpcyBleGFjdGx5IHRoZSBvbmUgcmV0dXJuZWQgYnkgdGhlCisgICAgICogPGNvZGU+RmxvYXQudG9TdHJpbmc8L2NvZGU+IG1ldGhvZCBvZiBvbmUgYXJndW1lbnQuCisgICAgICoKKyAgICAgKiBAcGFyYW0gICBmICAgYSA8Y29kZT5mbG9hdDwvY29kZT4uCisgICAgICogQHJldHVybiAgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIDxjb2RlPmZsb2F0PC9jb2RlPiBhcmd1bWVudC4KKyAgICAgKiBAc2VlICAgICBqYXZhLmxhbmcuRmxvYXQjdG9TdHJpbmcoZmxvYXQpCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBTdHJpbmcgdmFsdWVPZihmbG9hdCBmKSB7CisJcmV0dXJuIEZsb2F0LnRvU3RyaW5nKGYpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFJldHVybnMgdGhlIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgPGNvZGU+ZG91YmxlPC9jb2RlPiBhcmd1bWVudC4KKyAgICAgKiA8cD4KKyAgICAgKiBUaGUgcmVwcmVzZW50YXRpb24gaXMgZXhhY3RseSB0aGUgb25lIHJldHVybmVkIGJ5IHRoZQorICAgICAqIDxjb2RlPkRvdWJsZS50b1N0cmluZzwvY29kZT4gbWV0aG9kIG9mIG9uZSBhcmd1bWVudC4KKyAgICAgKgorICAgICAqIEBwYXJhbSAgIGQgICBhIDxjb2RlPmRvdWJsZTwvY29kZT4uCisgICAgICogQHJldHVybiAgYSAgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSA8Y29kZT5kb3VibGU8L2NvZGU+IGFyZ3VtZW50LgorICAgICAqIEBzZWUgICAgIGphdmEubGFuZy5Eb3VibGUjdG9TdHJpbmcoZG91YmxlKQorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIHZhbHVlT2YoZG91YmxlIGQpIHsKKwlyZXR1cm4gRG91YmxlLnRvU3RyaW5nKGQpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFJldHVybnMgYSBjYW5vbmljYWwgcmVwcmVzZW50YXRpb24gZm9yIHRoZSBzdHJpbmcgb2JqZWN0LgorICAgICAqIDxwPgorICAgICAqIEEgcG9vbCBvZiBzdHJpbmdzLCBpbml0aWFsbHkgZW1wdHksIGlzIG1haW50YWluZWQgcHJpdmF0ZWx5IGJ5IHRoZQorICAgICAqIGNsYXNzIDxjb2RlPlN0cmluZzwvY29kZT4uCisgICAgICogPHA+CisgICAgICogV2hlbiB0aGUgaW50ZXJuIG1ldGhvZCBpcyBpbnZva2VkLCBpZiB0aGUgcG9vbCBhbHJlYWR5IGNvbnRhaW5zIGEKKyAgICAgKiBzdHJpbmcgZXF1YWwgdG8gdGhpcyA8Y29kZT5TdHJpbmc8L2NvZGU+IG9iamVjdCBhcyBkZXRlcm1pbmVkIGJ5CisgICAgICogdGhlIHtAbGluayAjZXF1YWxzKE9iamVjdCl9IG1ldGhvZCwgdGhlbiB0aGUgc3RyaW5nIGZyb20gdGhlIHBvb2wgaXMKKyAgICAgKiByZXR1cm5lZC4gT3RoZXJ3aXNlLCB0aGlzIDxjb2RlPlN0cmluZzwvY29kZT4gb2JqZWN0IGlzIGFkZGVkIHRvIHRoZQorICAgICAqIHBvb2wgYW5kIGEgcmVmZXJlbmNlIHRvIHRoaXMgPGNvZGU+U3RyaW5nPC9jb2RlPiBvYmplY3QgaXMgcmV0dXJuZWQuCisgICAgICogPHA+CisgICAgICogSXQgZm9sbG93cyB0aGF0IGZvciBhbnkgdHdvIHN0cmluZ3MgPGNvZGU+czwvY29kZT4gYW5kIDxjb2RlPnQ8L2NvZGU+LAorICAgICAqIDxjb2RlPnMuaW50ZXJuKCkmbmJzcDs9PSZuYnNwO3QuaW50ZXJuKCk8L2NvZGU+IGlzIDxjb2RlPnRydWU8L2NvZGU+CisgICAgICogaWYgYW5kIG9ubHkgaWYgPGNvZGU+cy5lcXVhbHModCk8L2NvZGU+IGlzIDxjb2RlPnRydWU8L2NvZGU+LgorICAgICAqIDxwPgorICAgICAqIEFsbCBsaXRlcmFsIHN0cmluZ3MgYW5kIHN0cmluZy12YWx1ZWQgY29uc3RhbnQgZXhwcmVzc2lvbnMgYXJlCisgICAgICogaW50ZXJuZWQuIFN0cmluZyBsaXRlcmFscyBhcmUgZGVmaW5lZCBpbiAmc2VjdDszLjEwLjUgb2YgdGhlCisgICAgICogPGEgaHJlZj0iaHR0cDovL2phdmEuc3VuLmNvbS9kb2NzL2Jvb2tzL2pscy9odG1sLyI+SmF2YSBMYW5ndWFnZQorICAgICAqIFNwZWNpZmljYXRpb248L2E+CisgICAgICoKKyAgICAgKiBAcmV0dXJuICBhIHN0cmluZyB0aGF0IGhhcyB0aGUgc2FtZSBjb250ZW50cyBhcyB0aGlzIHN0cmluZywgYnV0IGlzCisgICAgICogICAgICAgICAgZ3VhcmFudGVlZCB0byBiZSBmcm9tIGEgcG9vbCBvZiB1bmlxdWUgc3RyaW5ncy4KKyAgICAgKi8KKyAgICBwdWJsaWMgbmF0aXZlIFN0cmluZyBpbnRlcm4oKTsKKworfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXBvc2l0b3J5VXNlL3NyYy9wYWNrL0Fzc2VydFBhcmVudElkLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3JlcG9zaXRvcnlVc2Uvc3JjL3BhY2svQXNzZXJ0UGFyZW50SWQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZGU5NWZhCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXBvc2l0b3J5VXNlL3NyYy9wYWNrL0Fzc2VydFBhcmVudElkLmphdmEKQEAgLTAsMCArMSwxMCBAQAorcGFja2FnZSBwYWNrOworCitpbXBvcnQgamF2YXguc3dpbmcuKjsKKworcHVibGljIGNsYXNzIEFzc2VydFBhcmVudElkIGV4dGVuZHMgSlBhbmVseworICBpbnQgZm9vKCl7fQorCisgIE9iamVjdCBURVNUID0gbmV3IEpQYW5lbCgpeyAgfTsKK30KKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXBvc2l0b3J5VXNlL3NyYy9wYWNrL015Q2xhc3MyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3JlcG9zaXRvcnlVc2Uvc3JjL3BhY2svTXlDbGFzczIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZWI0YmNiCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXBvc2l0b3J5VXNlL3NyYy9wYWNrL015Q2xhc3MyLmphdmEKQEAgLTAsMCArMSwyOSBAQAorcGFja2FnZSBwYWNrOworCitwdWJsaWMgY2xhc3MgTXlDbGFzczIgZXh0ZW5kcyBTdHJpbmcgaW1wbGVtZW50cyBSdW5uYWJsZXsKKyAgLyoqCisgICAqIEBkZXByZWNhdGVkCisgICAqLworICBpbnQgZmllbGQxID0gMDsKKworICBPYmplY3QgZmllbGQyW107CisKKyAgamF2YS5sYW5nLk9iamVjdFtdIGZpZWxkMzsKKworICB2b2lkIG1ldGhvZDEoaW50W10gcDEsIE9iamVjdCBwMiwgcGFjayAuIEFBQSBwMywKKwlwYWNrIC4gLyogY29tbWVudCAqLyBBQUEgcDQsCisJcGFjayAuIC8vIGNvbW1lbnQKKwlBQUEgcDUKKwkpIHRocm93cyBFeGNlcHRpb24sIGphdmEuaW8uIElPRXhjZXB0aW9ueworICB9CisKKyAgSW50ZWdlciBtZXRob2QyKClbXXsKKyAgICBuZXcgQ2xvbmVhYmxlKCl7CisgICAgfTsKKyAgICBjbGFzcyBMb2NhbCBpbXBsZW1lbnRzIENsb25lYWJsZXt9CisgIH0KKworICBNeUNsYXNzMigpe30KKworICBzdGF0aWMgY2xhc3MgSW5uZXJ7fQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXBvc2l0b3J5VXNlL3NyYy9wYWNrL015SW50ZXJmYWNlMS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXBvc2l0b3J5VXNlL3NyYy9wYWNrL015SW50ZXJmYWNlMS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ2NWQ1NjAKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3JlcG9zaXRvcnlVc2Uvc3JjL3BhY2svTXlJbnRlcmZhY2UxLmphdmEKQEAgLTAsMCArMSw2IEBACitwYWNrYWdlIHBhY2s7CisKK2ltcG9ydCBqYXZheC5zd2luZy4qOworCitwdWJsaWMgaW50ZXJmYWNlIE15SW50ZXJmYWNlMXsKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVwb3NpdG9yeVVzZS9zcmMxNS9hbm5vdGF0ZWQvQW5ub3RhdGVkQ2xhc3MuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVwb3NpdG9yeVVzZS9zcmMxNS9hbm5vdGF0ZWQvQW5ub3RhdGVkQ2xhc3MuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iN2M4NTI0Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXBvc2l0b3J5VXNlL3NyYzE1L2Fubm90YXRlZC9Bbm5vdGF0ZWRDbGFzcy5qYXZhCkBAIC0wLDAgKzEsOSBAQAorcGFja2FnZSBhbm5vdGF0ZWQ7CisKK2ltcG9ydCBhbm5vdGF0aW9ucy4qOworCitAYW5ub3RhdGlvbnMuQW5ub3RhdGlvblR5cGUKK3B1YmxpYyBjbGFzcyBBbm5vdGF0ZWRDbGFzcyB7CisgICBAQW5ub3RhdGlvblR5cGUoIjwiKSBwdWJsaWMgdm9pZCBjb3JyZWN0TWV0aG9kKCkge30KKyAgIEB3cm9uZ3BrZy5Bbm5vdGF0aW9uVHlwZSBwdWJsaWMgdm9pZCB3cm9uZ01ldGhvZCgpIHt9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3JlcG9zaXRvcnlVc2Uvc3JjMTUvYW5ub3RhdGVkL3BhY2thZ2UtaW5mby5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXBvc2l0b3J5VXNlL3NyYzE1L2Fubm90YXRlZC9wYWNrYWdlLWluZm8uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMWJiMDY3Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXBvc2l0b3J5VXNlL3NyYzE1L2Fubm90YXRlZC9wYWNrYWdlLWluZm8uamF2YQpAQCAtMCwwICsxLDQgQEAKK0BBbm5vdGF0aW9uVHlwZQorcGFja2FnZSBhbm5vdGF0ZWQ7CisKK2ltcG9ydCBhbm5vdGF0aW9ucy4qOwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXBvc2l0b3J5VXNlL3NyYzE1L2Fubm90YXRpb25zL0Fubm90YXRpb25UeXBlLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3JlcG9zaXRvcnlVc2Uvc3JjMTUvYW5ub3RhdGlvbnMvQW5ub3RhdGlvblR5cGUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNGJmZjlhCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXBvc2l0b3J5VXNlL3NyYzE1L2Fubm90YXRpb25zL0Fubm90YXRpb25UeXBlLmphdmEKQEAgLTAsMCArMSwzIEBACitwYWNrYWdlIGFubm90YXRpb25zOworcHVibGljIEBpbnRlcmZhY2UgQW5ub3RhdGlvblR5cGUgeworfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXBvc2l0b3J5VXNlL3NyYzE1L2Fubm90YXRpb25zL0RlcHJlY2F0ZWRBbm5vdGF0aW9uLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3JlcG9zaXRvcnlVc2Uvc3JjMTUvYW5ub3RhdGlvbnMvRGVwcmVjYXRlZEFubm90YXRpb24uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZmEzN2RjCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXBvc2l0b3J5VXNlL3NyYzE1L2Fubm90YXRpb25zL0RlcHJlY2F0ZWRBbm5vdGF0aW9uLmphdmEKQEAgLTAsMCArMSw1IEBACitwYWNrYWdlIGFubm90YXRpb25zOworQERlcHJlY2F0ZWQgY2xhc3MgRGVwcmVjYXRlZEFubm90YXRpb24geworICBARGVwcmVjYXRlZCB2b2lkIGZvbygpIHt9CisgIEBEZXByZWNhdGVkIGludCBpOworfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXBvc2l0b3J5VXNlL3NyYzE1L2VudW1JbXBsZW1lbnRzL015RW51bS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXBvc2l0b3J5VXNlL3NyYzE1L2VudW1JbXBsZW1lbnRzL015RW51bS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE2NTgzNGUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3JlcG9zaXRvcnlVc2Uvc3JjMTUvZW51bUltcGxlbWVudHMvTXlFbnVtLmphdmEKQEAgLTAsMCArMSw1IEBACitwYWNrYWdlIGVudW1JbXBsZW1lbnRzOworCitpbnRlcmZhY2UgSSB7fQorCitlbnVtIE15RW51bSBpbXBsZW1lbnRzIEkge30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVwb3NpdG9yeVVzZS9zcmMxNS9lbnVtcy9PdXJCYXNlSW50ZXJmYWNlLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3JlcG9zaXRvcnlVc2Uvc3JjMTUvZW51bXMvT3VyQmFzZUludGVyZmFjZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVjZGQyZmYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3JlcG9zaXRvcnlVc2Uvc3JjMTUvZW51bXMvT3VyQmFzZUludGVyZmFjZS5qYXZhCkBAIC0wLDAgKzEsNCBAQAorcGFja2FnZSBlbnVtczsKKworaW50ZXJmYWNlIE91ckJhc2VJbnRlcmZhY2UgeworfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXBvc2l0b3J5VXNlL3NyYzE1L2VudW1zL091ckVudW0uamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVwb3NpdG9yeVVzZS9zcmMxNS9lbnVtcy9PdXJFbnVtLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGE0NWJjZAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVwb3NpdG9yeVVzZS9zcmMxNS9lbnVtcy9PdXJFbnVtLmphdmEKQEAgLTAsMCArMSw0IEBACitwYWNrYWdlIGVudW1zOworCitlbnVtIE91ckVudW0geworfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXBvc2l0b3J5VXNlL3NyYzE1L2VudW1zL091ckVudW1XaXRoQ29uc3RhbnRzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3JlcG9zaXRvcnlVc2Uvc3JjMTUvZW51bXMvT3VyRW51bVdpdGhDb25zdGFudHMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZTU0ZTFkCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXBvc2l0b3J5VXNlL3NyYzE1L2VudW1zL091ckVudW1XaXRoQ29uc3RhbnRzLmphdmEKQEAgLTAsMCArMSw1IEBACitwYWNrYWdlIGVudW1zOworCitwdWJsaWMgZW51bSBPdXJFbnVtV2l0aENvbnN0YW50cyB7CisgIEEsIEIsIEM7Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3JlcG9zaXRvcnlVc2Uvc3JjMTUvZW51bXMvT3VyRW51bVdpdGhDb25zdGFudHNBbmRTdGF0aWNGaWVsZHMuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVwb3NpdG9yeVVzZS9zcmMxNS9lbnVtcy9PdXJFbnVtV2l0aENvbnN0YW50c0FuZFN0YXRpY0ZpZWxkcy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJiM2RlM2QKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3JlcG9zaXRvcnlVc2Uvc3JjMTUvZW51bXMvT3VyRW51bVdpdGhDb25zdGFudHNBbmRTdGF0aWNGaWVsZHMuamF2YQpAQCAtMCwwICsxLDcgQEAKK3BhY2thZ2UgZW51bXM7CisKK2VudW0gT3VyRW51bVdpdGhDb25zdGFudHNBbmRTdGF0aWNGaWVsZHMgeworICBBLCBCLCBDOworCisgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEExID0gMTsKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVwb3NpdG9yeVVzZS9zcmMxNS9lbnVtcy9PdXJFbnVtV2l0aENvbnN0YW50c0FuZFN0YXRpY0ZpZWxkczIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVwb3NpdG9yeVVzZS9zcmMxNS9lbnVtcy9PdXJFbnVtV2l0aENvbnN0YW50c0FuZFN0YXRpY0ZpZWxkczIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNDExZjdmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXBvc2l0b3J5VXNlL3NyYzE1L2VudW1zL091ckVudW1XaXRoQ29uc3RhbnRzQW5kU3RhdGljRmllbGRzMi5qYXZhCkBAIC0wLDAgKzEsMzkgQEAKK3BhY2thZ2UgZW51bXM7CisKK3B1YmxpYyBhYnN0cmFjdCBlbnVtIE91ckVudW1XaXRoQ29uc3RhbnRzQW5kU3RhdGljRmllbGRzMiB7CisgICAgQSB7CisgICAgICAgIHZvaWQgZm9vKCkgeworICAgICAgICAgICAgLy9UbyBjaGFuZ2UgYm9keSBvZiBpbXBsZW1lbnRlZCBtZXRob2RzIHVzZSBGaWxlIHwgU2V0dGluZ3MgfCBGaWxlIFRlbXBsYXRlcy4KKyAgICAgICAgfQorICAgIH0sCisgICAgQiB7CisgICAgICAgIHZvaWQgZm9vKCkgeworICAgICAgICAgICAgLy9UbyBjaGFuZ2UgYm9keSBvZiBpbXBsZW1lbnRlZCBtZXRob2RzIHVzZSBGaWxlIHwgU2V0dGluZ3MgfCBGaWxlIFRlbXBsYXRlcy4KKyAgICAgICAgfQorCisgICAgfSwKKyAgICBDKDEwKQorICAgIDsKKworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEExID0gMTA7CisgICAgdm9pZCBmb28oKSB7fQorCisgICAgcHVibGljIE91ckVudW0oKSB7CisKKyAgICB9CisgICAgeworICAgICAgICBFbnVtPE91ckVudW0+IGEgPSBBOworICAgICAgICBPdXJFbnVtIHZhbHVlID0gQTsKKyAgICAgICAgc3dpdGNoKHZhbHVlKSB7CisgICAgICAgICAgICBjYXNlIEE6CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlCisgICAgICAgIH0KKworICAgICAgICBpbnQgaSA9IDEwOworICAgICAgICBzd2l0Y2goaSkgeworICAgICAgICAgICAgY2FzZSBBMQorICAgICAgICB9CisgICAgfQorfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXBvc2l0b3J5VXNlL3NyYzE1L2VudW1zL091ckVudW1XaXRoSW5pdGlhbGl6ZWRDb25zdGFudHMuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVwb3NpdG9yeVVzZS9zcmMxNS9lbnVtcy9PdXJFbnVtV2l0aEluaXRpYWxpemVkQ29uc3RhbnRzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmZlNDNhYgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVwb3NpdG9yeVVzZS9zcmMxNS9lbnVtcy9PdXJFbnVtV2l0aEluaXRpYWxpemVkQ29uc3RhbnRzLmphdmEKQEAgLTAsMCArMSwxMiBAQAorcGFja2FnZSBlbnVtczsKKworcHVibGljIGVudW0gT3VyRW51bVdpdGhJbml0aWFsaXplZENvbnN0YW50cyB7CisgIEEoMCkgeworICB9LAorICBCKDEpIHsKKyAgICAgdm9pZCBmb28gKCl7fQorICB9LAorICBDKG5ldyBPdXJCYXNlSW50ZXJmYWNlKCkge30pIHsKKyAgICAgdm9pZCBmb28gKCkge30KKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXBvc2l0b3J5VXNlL3NyYzE1L3N0YXRpY0ltcG9ydHMvU3RhdGljSW1wb3J0cy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXBvc2l0b3J5VXNlL3NyYzE1L3N0YXRpY0ltcG9ydHMvU3RhdGljSW1wb3J0cy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcwNzcyNjkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3JlcG9zaXRvcnlVc2Uvc3JjMTUvc3RhdGljSW1wb3J0cy9TdGF0aWNJbXBvcnRzLmphdmEKQEAgLTAsMCArMSwyMCBAQAorcGFja2FnZSBzdGF0aWNJbXBvcnRzOworCitpbXBvcnQgamF2YS51dGlsLkFycmF5czsKK2ltcG9ydCBzdGF0aWMgamF2YS51dGlsLkNvbGxlY3Rpb25zLio7CitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb25zOworaW1wb3J0IHN0YXRpYyBqYXZhLnV0aWwuQXJyYXlzLio7CitpbXBvcnQgc3RhdGljIGphdmEudXRpbC5Db2xsZWN0aW9ucy5zb3J0OworaW1wb3J0IHN0YXRpYyBqYXZhLnV0aWwuQXJyYXlzLnNvcnQ7CisKK3B1YmxpYyBjbGFzcyBTdGF0aWNJbXBvcnRzIHsKKyAgeworICAgIHNvcnQobmV3IExpc3QoKSk7CisgICAgc29ydChuZXcgTGlzdDxTdHJpbmc+KCkpOworICAgIHNvcnQobmV3IGludFsyNTZdKTsKKyAgICBJbnRlZ2VyW10gdiA9IG5ldyBJbnRlZ2VyWzI1Nl07CisgICAgc29ydCh2KQorICAgIHNvcnQoYXNMaXN0KHYpKTsKKyAgfQorfQorCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3Jlc29sdmUvY2xhc3MvQ2xhc3NFeHRlbmRzSXRzSW5uZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVzb2x2ZS9jbGFzcy9DbGFzc0V4dGVuZHNJdHNJbm5lci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQzOWM1NTkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3Jlc29sdmUvY2xhc3MvQ2xhc3NFeHRlbmRzSXRzSW5uZXIuamF2YQpAQCAtMCwwICsxLDcgQEAKK2NsYXNzIEEgZXh0ZW5kcyBBLjxyZWY+Rm9vLCBCeworfQorCitpbnRlcmZhY2UgQnsKKyAgc3RhdGljIGNsYXNzIEZvb3sKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVzb2x2ZS9jbGFzcy9DbGFzc0V4dGVuZHNJdHNJbm5lcjEuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVzb2x2ZS9jbGFzcy9DbGFzc0V4dGVuZHNJdHNJbm5lcjEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNWUwZjRmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXNvbHZlL2NsYXNzL0NsYXNzRXh0ZW5kc0l0c0lubmVyMS5qYXZhCkBAIC0wLDAgKzEsNyBAQAorY2xhc3MgQSBleHRlbmRzIEIuPHJlZj5Gb28gaW1wbGVtZW50cyBCeworfQorCitpbnRlcmZhY2UgQnsKKyAgc3RhdGljIGNsYXNzIEZvb3sKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXNvbHZlL2NsYXNzL0NsYXNzRXh0ZW5kc0l0c0lubmVyMi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXNvbHZlL2NsYXNzL0NsYXNzRXh0ZW5kc0l0c0lubmVyMi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAyNTI0MDMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3Jlc29sdmUvY2xhc3MvQ2xhc3NFeHRlbmRzSXRzSW5uZXIyLmphdmEKQEAgLTAsMCArMSwzIEBACitwdWJsaWMgY2xhc3MgVFRUIGltcGxlbWVudHMgPHJlZj5CYXJ7CisgIHN0YXRpYyBpbnRlcmZhY2UgQmFye30KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVzb2x2ZS9jbGFzcy9GUU5hbWUuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVzb2x2ZS9jbGFzcy9GUU5hbWUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYTNiYzFkCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXNvbHZlL2NsYXNzL0ZRTmFtZS5qYXZhCkBAIC0wLDAgKzEsMyBAQAorY2xhc3MgVGVzdHsKKyAgdm9pZCBmb28oKSB0aHJvd3MgamF2YS5pby48cmVmPklPRXhjZXB0aW9ue30KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3Jlc29sdmUvY2xhc3MvSW1wb3J0Q29uZmxpY3QxLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3Jlc29sdmUvY2xhc3MvSW1wb3J0Q29uZmxpY3QxLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzNlYTY3ZDQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3Jlc29sdmUvY2xhc3MvSW1wb3J0Q29uZmxpY3QxLmphdmEKQEAgLTAsMCArMSw4IEBACitpbXBvcnQgamF2YS5zcWwuKjsKK2ltcG9ydCBqYXZhLnV0aWwuKjsKKworcHVibGljIGNsYXNzIEltcG1vcnRDb25mbGljdDF7CisgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncyl7CisgICAgICAgIDxyZWY+RGF0ZSBkID0gbmV3IERhdGUoKTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3Jlc29sdmUvY2xhc3MvSW1wb3J0Q29uZmxpY3QyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3Jlc29sdmUvY2xhc3MvSW1wb3J0Q29uZmxpY3QyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjUzY2YxMwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVzb2x2ZS9jbGFzcy9JbXBvcnRDb25mbGljdDIuamF2YQpAQCAtMCwwICsxLDggQEAKK2ltcG9ydCBqYXZhLnNxbC4qOworaW1wb3J0IGphdmEudXRpbC5EYXRlOworCitwdWJsaWMgY2xhc3MgSW1wb3J0Q29uZmxpY3QyeworICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpeworICAgICAgICA8cmVmPkRhdGUgZCA9IG5ldyBEYXRlKCk7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXNvbHZlL2NsYXNzL0lubmVyUHJpdmF0ZU1lbWJlcjEuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVzb2x2ZS9jbGFzcy9Jbm5lclByaXZhdGVNZW1iZXIxLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGQ4NzI4MQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVzb2x2ZS9jbGFzcy9Jbm5lclByaXZhdGVNZW1iZXIxLmphdmEKQEAgLTAsMCArMSw4IEBACitjbGFzcyBDeworICB2b2lkIGZvbygpeworICAgIGNsYXNzIEF7CisgICAgICA8cmVmPkIgYiA9IG51bGw7CisgICAgICBwcml2YXRlIGNsYXNzIEJ7fTsKKyAgICB9CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3Jlc29sdmUvY2xhc3MvTG9jYWxzMS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXNvbHZlL2NsYXNzL0xvY2FsczEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41M2Y1M2Q1Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXNvbHZlL2NsYXNzL0xvY2FsczEuamF2YQpAQCAtMCwwICsxLDcgQEAKK2NsYXNzIEF7CisgeworICBjbGFzcyBCe30KKworICBuZXcgPHJlZj5CKCk7CisgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVzb2x2ZS9jbGFzcy9Mb2NhbHMyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3Jlc29sdmUvY2xhc3MvTG9jYWxzMi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUzMDBmMzEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3Jlc29sdmUvY2xhc3MvTG9jYWxzMi5qYXZhCkBAIC0wLDAgKzEsOSBAQAorY2xhc3MgQXsKKyB7CisgIGNsYXNzIEJ7CisgICAgPHJlZj5CIGI7CisgIH0KKworICBuZXcgQigpOworIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3Jlc29sdmUvY2xhc3MvTW9kdWxlU291cmNlQXNMaWJyYXJ5Q2xhc3Nlcy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXNvbHZlL2NsYXNzL01vZHVsZVNvdXJjZUFzTGlicmFyeUNsYXNzZXMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YzM3OWFlCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXNvbHZlL2NsYXNzL01vZHVsZVNvdXJjZUFzTGlicmFyeUNsYXNzZXMuamF2YQpAQCAtMCwwICsxLDMgQEAKK3B1YmxpYyBjbGFzcyBNb2R1bGVTb3VyY2VBc0xpYnJhcnlDbGFzc2VzIHsKKyAgPHJlZj5Nb2R1bGVTb3VyY2VBc0xpYnJhcnlDbGFzc2VzRGVwIGZpZWxkOworfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXNvbHZlL2NsYXNzL01vZHVsZVNvdXJjZUFzTGlicmFyeUNsYXNzZXNEZXAuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVzb2x2ZS9jbGFzcy9Nb2R1bGVTb3VyY2VBc0xpYnJhcnlDbGFzc2VzRGVwLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmY2YjBjYQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVzb2x2ZS9jbGFzcy9Nb2R1bGVTb3VyY2VBc0xpYnJhcnlDbGFzc2VzRGVwLmphdmEKQEAgLTAsMCArMSwxNiBAQAorLyoKKyAqIENvcHlyaWdodCAyMDAwLTIwMTIgSmV0QnJhaW5zIHMuci5vLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KK3B1YmxpYyBjbGFzcyBNb2R1bGVTb3VyY2VBc0xpYnJhcnlDbGFzc2VzRGVwIHt9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3Jlc29sdmUvY2xhc3MvTW9kdWxlU291cmNlQXNMaWJyYXJ5U291cmNlLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3Jlc29sdmUvY2xhc3MvTW9kdWxlU291cmNlQXNMaWJyYXJ5U291cmNlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWU3NDgyYwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVzb2x2ZS9jbGFzcy9Nb2R1bGVTb3VyY2VBc0xpYnJhcnlTb3VyY2UuamF2YQpAQCAtMCwwICsxLDMgQEAKK3B1YmxpYyBjbGFzcyBNb2R1bGVTb3VyY2VBc0xpYnJhcnlTb3VyY2UgeworICA8cmVmPk1vZHVsZVNvdXJjZUFzTGlicmFyeVNvdXJjZURlcCBmaWVsZDsKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVzb2x2ZS9jbGFzcy9Nb2R1bGVTb3VyY2VBc0xpYnJhcnlTb3VyY2VEZXAuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVzb2x2ZS9jbGFzcy9Nb2R1bGVTb3VyY2VBc0xpYnJhcnlTb3VyY2VEZXAuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OGE4YjA4Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXNvbHZlL2NsYXNzL01vZHVsZVNvdXJjZUFzTGlicmFyeVNvdXJjZURlcC5qYXZhCkBAIC0wLDAgKzEgQEAKK3B1YmxpYyBjbGFzcyBNb2R1bGVTb3VyY2VBc0xpYnJhcnlTb3VyY2VEZXAge30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVzb2x2ZS9jbGFzcy9Qcml2YXRlSW5FeHRlbmRzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3Jlc29sdmUvY2xhc3MvUHJpdmF0ZUluRXh0ZW5kcy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFhOWU4NjgKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3Jlc29sdmUvY2xhc3MvUHJpdmF0ZUluRXh0ZW5kcy5qYXZhCkBAIC0wLDAgKzEsNSBAQAorY2xhc3MgQXsKK3ByaXZhdGUgc3RhdGljIGNsYXNzIEJ7fQorfQorCitjbGFzcyBDIGV4dGVuZHMgQS48cmVmPkJ7fQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVzb2x2ZS9jbGFzcy9RTmV3MS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXNvbHZlL2NsYXNzL1FOZXcxLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzc5Nzg0YQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVzb2x2ZS9jbGFzcy9RTmV3MS5qYXZhCkBAIC0wLDAgKzEsMTAgQEAKK2NsYXNzIEEgeworICB7CisgICAgT3V0ZXIgb3V0ZXI7CisgICAgb3V0ZXIubmV3IDxyZWY+SW5uZXIoKTsKKyAgfQorfQorCitjbGFzcyBPdXRlcnsKKyAgY2xhc3MgSW5uZXJ7fQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVzb2x2ZS9jbGFzcy9RTmV3Mi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXNvbHZlL2NsYXNzL1FOZXcyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTM3YmMxMgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVzb2x2ZS9jbGFzcy9RTmV3Mi5qYXZhCkBAIC0wLDAgKzEsMTAgQEAKK2NsYXNzIEEgeworICB7CisgICAgT3V0ZXIgb3V0ZXI7CisgICAgb3V0ZXIubmV3IDxyZWY+SW5uZXIoKXt9OworICB9Cit9CisKK2NsYXNzIE91dGVyeworICBjbGFzcyBJbm5lcnt9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXNvbHZlL2NsYXNzL1NDUjQwMzMyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3Jlc29sdmUvY2xhc3MvU0NSNDAzMzIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMzQyNzViCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXNvbHZlL2NsYXNzL1NDUjQwMzMyLmphdmEKQEAgLTAsMCArMSw0IEBACitjbGFzcyBDPFQ+IHt9CitjbGFzcyBDQyBleHRlbmRzIEM8PHJlZj5Jbm5lcj4geworICAgIHN0YXRpYyBjbGFzcyBJbm5lciB7IH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3Jlc29sdmUvY2xhc3MvU2hhZG93aW5nLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3Jlc29sdmUvY2xhc3MvU2hhZG93aW5nLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODMxZGUyMAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVzb2x2ZS9jbGFzcy9TaGFkb3dpbmcuamF2YQpAQCAtMCwwICsxLDEzIEBACitpbnRlcmZhY2UgQSB7CisgICBjbGFzcyBFbnRyeSB7fQorfQorCitjbGFzcyBCIGltcGxlbWVudHMgQSB7CisgICAgcHJpdmF0ZSBjbGFzcyBFbnRyeSB7fQorfQorCisKK2NsYXNzIEMgZXh0ZW5kcyBCIHsKKyAgICBzdGF0aWMgdm9pZCBmb28oPHJlZj5FbnRyeSBlKXsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXNvbHZlL2NsYXNzL1N0YXRpY0ltcG9ydEluVGhlU2FtZUNsYXNzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3Jlc29sdmUvY2xhc3MvU3RhdGljSW1wb3J0SW5UaGVTYW1lQ2xhc3MuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYjQwZDdkCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXNvbHZlL2NsYXNzL1N0YXRpY0ltcG9ydEluVGhlU2FtZUNsYXNzLmphdmEKQEAgLTAsMCArMSw1IEBACitpbXBvcnQgc3RhdGljIEZvby4qOworCitjbGFzcyBGb28gaW1wbGVtZW50cyA8cmVmPkJhcjEsIEJhcjIsIEJhcjMsIEJhcjQsIEJhcjUsIEJhcjYsIEJhcjcsIEJhcjgsIEJhcjksIEJhcjEwLCBCYXIxMSwgQmFyMTIsIEJhcjEzLCBCYXIxNCB7CisKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3Jlc29sdmUvY2xhc3MvU3RhdGljSW1wb3J0TmV0d29yay5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXNvbHZlL2NsYXNzL1N0YXRpY0ltcG9ydE5ldHdvcmsuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MTliZjgzCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXNvbHZlL2NsYXNzL1N0YXRpY0ltcG9ydE5ldHdvcmsuamF2YQpAQCAtMCwwICsxLDYgQEAKK2ltcG9ydCBzdGF0aWMgRm9vMS4qOworaW1wb3J0IHN0YXRpYyBGb28wLio7CitpbXBvcnQgc3RhdGljIEZvbzMuKjsKK2ltcG9ydCBzdGF0aWMgRm9vLio7CisKK2NsYXNzIEZvbyBleHRlbmRzIDxyZWY+QmFyIHt9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXNvbHZlL2NsYXNzL1N0YXRpY0ltcG9ydFZzSW1wbGljaXQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVzb2x2ZS9jbGFzcy9TdGF0aWNJbXBvcnRWc0ltcGxpY2l0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTJhYWNmMQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVzb2x2ZS9jbGFzcy9TdGF0aWNJbXBvcnRWc0ltcGxpY2l0LmphdmEKQEAgLTAsMCArMSwxMiBAQAoraW1wb3J0IHN0YXRpYyBPdXRlci5Eb3VibGU7CisKK2NsYXNzIE91dGVyIHsKKyAgICBzdGF0aWMgY2xhc3MgRG91YmxlIHsKKyAgICB9Cit9CisKK2NsYXNzIFN0YXRpY0ltcG9ydFRlc3QgeworICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKyAgICAgICAgPHJlZj5Eb3VibGUgZDsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXNvbHZlL2NsYXNzL1R3b01vZHVsZXMuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVzb2x2ZS9jbGFzcy9Ud29Nb2R1bGVzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzc0MjUxMgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVzb2x2ZS9jbGFzcy9Ud29Nb2R1bGVzLmphdmEKQEAgLTAsMCArMSw0IEBACitjbGFzcyBUd29Nb2R1bGVzIHsKKworICA8cmVmPlNyYyBzcmM7Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3Jlc29sdmUvY2xhc3MvVHdvTW9kdWxlczIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVzb2x2ZS9jbGFzcy9Ud29Nb2R1bGVzMi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmExZDJlZDEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3Jlc29sdmUvY2xhc3MvVHdvTW9kdWxlczIuamF2YQpAQCAtMCwwICsxLDQgQEAKK2NsYXNzIFR3b01vZHVsZXMyIHsKKworICA8cmVmPlRlc3QgdGVzdDsKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVzb2x2ZS9jbGFzcy9WYXJJbk5ldy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXNvbHZlL2NsYXNzL1ZhckluTmV3LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTdlNTdhNAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVzb2x2ZS9jbGFzcy9WYXJJbk5ldy5qYXZhCkBAIC0wLDAgKzEsNSBAQAorY2xhc3MgcyB7CisgIHB1YmxpYyBzdGF0aWMgZmluYWwgcmVwZWF0IFJFUEVBVCA9IG5ldyA8cmVmPnJlcGVhdCgpOworICBib29sZWFuIHJlcGVhdCA9IGZhbHNlOworICBzdGF0aWMgY2xhc3MgcmVwZWF0IHt9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXNvbHZlL2NsYXNzL1ZhckluTmV3MS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXNvbHZlL2NsYXNzL1ZhckluTmV3MS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAzZDQ1ODIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3Jlc29sdmUvY2xhc3MvVmFySW5OZXcxLmphdmEKQEAgLTAsMCArMSw1IEBACitjbGFzcyBzIHsKKyAgcHVibGljIHN0YXRpYyBmaW5hbCByZXBlYXQgUkVQRUFUID0gbmV3IDxyZWY+cmVwZWF0KCl7fTsKKyAgYm9vbGVhbiByZXBlYXQgPSBmYWxzZTsKKyAgc3RhdGljIGNsYXNzIHJlcGVhdCB7fQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVzb2x2ZS9jbGFzcy9kZXBlbmRlbnRNb2R1bGUvc3JjL1NyYy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXNvbHZlL2NsYXNzL2RlcGVuZGVudE1vZHVsZS9zcmMvU3JjLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGUwYjQ4ZQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVzb2x2ZS9jbGFzcy9kZXBlbmRlbnRNb2R1bGUvc3JjL1NyYy5qYXZhCkBAIC0wLDAgKzEgQEAKK2NsYXNzIFNyYyB7fQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXNvbHZlL2NsYXNzL2RlcGVuZGVudE1vZHVsZS90ZXN0L1Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVzb2x2ZS9jbGFzcy9kZXBlbmRlbnRNb2R1bGUvdGVzdC9UZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWYyMmE2OQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVzb2x2ZS9jbGFzcy9kZXBlbmRlbnRNb2R1bGUvdGVzdC9UZXN0LmphdmEKQEAgLTAsMCArMSBAQAorY2xhc3MgVGVzdCB7fQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXNvbHZlL2NvZGVGcmFnbWVudC9Mb2NhbFZhcmlhYmxlLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3Jlc29sdmUvY29kZUZyYWdtZW50L0xvY2FsVmFyaWFibGUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMmVlNzJiCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXNvbHZlL2NvZGVGcmFnbWVudC9Mb2NhbFZhcmlhYmxlLmphdmEKQEAgLTAsMCArMSw2IEBACitwdWJsaWMgY2xhc3MgVGVzdCB7CisgIHB1YmxpYyB2b2lkIGZvbygpIHsKKyAgICBpbnQgaSA9IDA7CisgICAgU3lzdGVtLm91dC5wcmludGxuKDxyZWY+aSk7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3Jlc29sdmUvZmlsZVBhdGgvQy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXNvbHZlL2ZpbGVQYXRoL0MuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOTI5NzRkCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXNvbHZlL2ZpbGVQYXRoL0MuamF2YQpAQCAtMCwwICsxLDMgQEAKK2NsYXNzIEMgeworICBTdHJpbmcgcyA9ICIveC95L015Q2xhc3MuamF2YTxjYXJldD4iOworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVzb2x2ZS9maWxlUGF0aC9DMi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXNvbHZlL2ZpbGVQYXRoL0MyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjg0MGRkYwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVzb2x2ZS9maWxlUGF0aC9DMi5qYXZhCkBAIC0wLDAgKzEsMyBAQAorY2xhc3MgQyB7CisgIFN0cmluZyBzID0gIngvPGNhcmV0Pk15RmlsZS50eHQiOworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVzb2x2ZS9maWxlUGF0aC94L015RmlsZS50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3Jlc29sdmUvZmlsZVBhdGgveC9NeUZpbGUudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZkZDJmNzMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3Jlc29sdmUvZmlsZVBhdGgveC9NeUZpbGUudHh0CkBAIC0wLDAgKzEgQEAKK3h4eHh4eHh4eHh4eHgKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3Jlc29sdmUvZmlsZVBhdGgveC95L015Q2xhc3MuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVzb2x2ZS9maWxlUGF0aC94L3kvTXlDbGFzcy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEyZDNhNjEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3Jlc29sdmUvZmlsZVBhdGgveC95L015Q2xhc3MuamF2YQpAQCAtMCwwICsxIEBACisvL3h4eHh4eHh4eApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVzb2x2ZS9pbmZlcmVuY2UvQm91bmRDb21wb3NpdGlvbi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXNvbHZlL2luZmVyZW5jZS9Cb3VuZENvbXBvc2l0aW9uLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWI1MDRlNQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVzb2x2ZS9pbmZlcmVuY2UvQm91bmRDb21wb3NpdGlvbi5qYXZhCkBAIC0wLDAgKzEsNyBAQAorCitjbGFzcyBUZXN0ICB7CisgcHJpdmF0ZSBzdGF0aWMgdm9pZCBwKCBDbGFzczw/IGV4dGVuZHMgT2JqZWN0PiBjbCApCisgeworICAgIGNsLjxyZWY+Z2V0U3VwZXJjbGFzcygpOworIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3Jlc29sdmUvaW5mZXJlbmNlL0luZmVyQXV0b2JveGVkLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3Jlc29sdmUvaW5mZXJlbmNlL0luZmVyQXV0b2JveGVkLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWVjMDkxNAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVzb2x2ZS9pbmZlcmVuY2UvSW5mZXJBdXRvYm94ZWQuamF2YQpAQCAtMCwwICsxLDkgQEAKK2NsYXNzIEMgeworICA8Vj4gViBtKFYgdikgeworICAgICAgcmV0dXJuIG51bGw7CisgIH0KKworICAgIHZvaWQgbiAoKSB7CisgICAgICAgPHJlZj5tKDEwKTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXNvbHZlL2luZmVyZW5jZS9JbmZlckluQXNzaWduMS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXNvbHZlL2luZmVyZW5jZS9JbmZlckluQXNzaWduMS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMxZGE0MWEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3Jlc29sdmUvaW5mZXJlbmNlL0luZmVySW5Bc3NpZ24xLmphdmEKQEAgLTAsMCArMSwxOCBAQAorcHVibGljIGNsYXNzIFNlcTxUPiB7CisgICAgcHVibGljIFNlcSgpIHt9CisKKyAgICBwdWJsaWMgU2VxKFQgeCwgU2VxPFQ+IHhzKSB7CisgICAgfQorCisgICAgc3RhdGljIDxUPiBTZXE8VD4gbmlsICgpIHsKKyAgICAgICAgcmV0dXJuIG5ldyBTZXE8VD4gKCk7CisgICAgfQorCisgICAgc3RhdGljIDxWPiBTZXE8Vj4gY29ucyAoViB4LCBTZXE8Vj4geHMpIHsKKyAgICAgICAgcmV0dXJuIG5ldyBTZXE8Vj4gKHgsIHhzKTsKKyAgICB9CisKKyAgICBzdGF0aWMgdm9pZCBmb28oKSB7CisgICAgICAgIFNlcTxTdHJpbmc+IG4gPSA8cmVmPm5pbCgpOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3Jlc29sdmUvaW5mZXJlbmNlL0luZmVySW5Bc3NpZ24yLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3Jlc29sdmUvaW5mZXJlbmNlL0luZmVySW5Bc3NpZ24yLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzRiYzc0MAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVzb2x2ZS9pbmZlcmVuY2UvSW5mZXJJbkFzc2lnbjIuamF2YQpAQCAtMCwwICsxLDE4IEBACitwdWJsaWMgY2xhc3MgU2VxPFQ+IHsKKyAgICBwdWJsaWMgU2VxKCkge30KKworICAgIHB1YmxpYyBTZXEoVCB4LCBTZXE8VD4geHMpIHsKKyAgICB9CisKKyAgICBzdGF0aWMgPFQ+IFNlcTxUPiBuaWwgKCkgeworICAgICAgICByZXR1cm4gbmV3IFNlcTxUPiAoKTsKKyAgICB9CisKKyAgICBzdGF0aWMgPFY+IFNlcTxWPiBjb25zIChWIHgsIFNlcTxWPiB4cykgeworICAgICAgICByZXR1cm4gbmV3IFNlcTxWPiAoeCwgeHMpOworICAgIH0KKworICAgIHN0YXRpYyB2b2lkIGZvbygpIHsKKyAgICAgICAgU2VxPFN0cmluZz4gcyA9IDxyZWY+Y29ucygiYWJjIiwgbmlsKCkpOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3Jlc29sdmUvaW5mZXJlbmNlL0luZmVySW5DYWxsMS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXNvbHZlL2luZmVyZW5jZS9JbmZlckluQ2FsbDEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZWUwNzBmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXNvbHZlL2luZmVyZW5jZS9JbmZlckluQ2FsbDEuamF2YQpAQCAtMCwwICsxLDIwIEBACitwdWJsaWMgY2xhc3MgU2VxPFQ+IHsKKyAgICBwdWJsaWMgU2VxKCkge30KKworICAgIHB1YmxpYyBTZXEoVCB4LCBTZXE8VD4geHMpIHsKKyAgICB9CisKKyAgICBzdGF0aWMgPFQ+IFNlcTxUPiBuaWwgKCkgeworICAgICAgICByZXR1cm4gbmV3IFNlcTxUPiAoKTsKKyAgICB9CisKKyAgICBzdGF0aWMgPFY+IFNlcTxWPiBjb25zIChWIHgsIFNlcTxWPiB4cykgeworICAgICAgICByZXR1cm4gbmV3IFNlcTxWPiAoeCwgeHMpOworICAgIH0KKworICAgIHN0YXRpYyB2b2lkIGZvbyAoU2VxPFN0cmluZz4gc2VxKSB7fQorCisgICAgc3RhdGljIHZvaWQgZm9vKCkgeworICAgICAgICBmb28oPHJlZj5uaWwoKSk7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVzb2x2ZS9pbmZlcmVuY2UvSW5mZXJJbkNhc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVzb2x2ZS9pbmZlcmVuY2UvSW5mZXJJbkNhc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MGY3NzBjCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXNvbHZlL2luZmVyZW5jZS9JbmZlckluQ2FzdC5qYXZhCkBAIC0wLDAgKzEsMTggQEAKK3B1YmxpYyBjbGFzcyBTZXE8VD4geworICAgIHB1YmxpYyBTZXEoKSB7fQorCisgICAgcHVibGljIFNlcShUIHgsIFNlcTxUPiB4cykgeworICAgIH0KKworICAgIHN0YXRpYyA8VD4gU2VxPFQ+IG5pbCAoKSB7CisgICAgICAgIHJldHVybiBuZXcgU2VxPFQ+ICgpOworICAgIH0KKworICAgIHN0YXRpYyA8Vj4gU2VxPFY+IGNvbnMgKFYgeCwgU2VxPFY+IHhzKSB7CisgICAgICAgIHJldHVybiBuZXcgU2VxPFY+ICh4LCB4cyk7CisgICAgfQorCisgICAgc3RhdGljIHZvaWQgZm9vKCkgeworICAgICAgICAoU2VxPFN0cmluZz4pPHJlZj5uaWwoKTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXNvbHZlL2luZmVyZW5jZS9JbmZlckluUGFyYW1zT25seS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXNvbHZlL2luZmVyZW5jZS9JbmZlckluUGFyYW1zT25seS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRjMmRkYTMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3Jlc29sdmUvaW5mZXJlbmNlL0luZmVySW5QYXJhbXNPbmx5LmphdmEKQEAgLTAsMCArMSwxMSBAQAorY2xhc3MgQyB7CisgICAgY2xhc3MgSSB7fQorICAgIGNsYXNzIEEgZXh0ZW5kcyBJIHt9CisgICAgY2xhc3MgQiBleHRlbmRzIEkge30KKworICAgIDxUPiBUIGYoVCB0MSwgVCB0Mikge3JldHVybiBudWxsO30KKworICAgIHZvaWQgZm9vICgpIHsKKyAgICAgICAgT2JqZWN0IG8gPSA8cmVmPmYgKG5ldyBBKCksIG5ldyBCICgpKTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXNvbHZlL2luZmVyZW5jZS9JbmZlckluUmV0dXJuLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3Jlc29sdmUvaW5mZXJlbmNlL0luZmVySW5SZXR1cm4uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYTkwOThkCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXNvbHZlL2luZmVyZW5jZS9JbmZlckluUmV0dXJuLmphdmEKQEAgLTAsMCArMSw5IEBACitwdWJsaWMgY2xhc3MgQyA8VD4geworICA8VD4gVCBmb28gKCkge3JldHVybiBudWxsO30KKworICBjbGFzcyBTdWIgeworICAgIFQgZm9vICgpIHsKKyAgICAgIHJldHVybiBDLnRoaXMuPHJlZj5mb28oKTsKKyAgICB9CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3Jlc29sdmUvaW5mZXJlbmNlL0luZmVySW5TdXBlckFzc2lnbm1lbnQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVzb2x2ZS9pbmZlcmVuY2UvSW5mZXJJblN1cGVyQXNzaWdubWVudC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM3OWJjNzcKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3Jlc29sdmUvaW5mZXJlbmNlL0luZmVySW5TdXBlckFzc2lnbm1lbnQuamF2YQpAQCAtMCwwICsxLDEwIEBACitjbGFzcyBBPFQ+IHt9CitjbGFzcyBCPFQ+IGV4dGVuZHMgQTxUPiB7fQorCitjbGFzcyBDIHsKKyAgICA8VD4gQjxUPiBmKCkge3JldHVybiBudWxsO30KKworICAgIHZvaWQgYmFyICgpIHsKKyAgICAgICAgQTxTdHJpbmc+IGEgPSA8cmVmPmYoKTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXNvbHZlL2luZmVyZW5jZS9JbmZlck5vdE51bGwuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVzb2x2ZS9pbmZlcmVuY2UvSW5mZXJOb3ROdWxsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGU0Y2JhZQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVzb2x2ZS9pbmZlcmVuY2UvSW5mZXJOb3ROdWxsLmphdmEKQEAgLTAsMCArMSwxMyBAQAoraW1wb3J0IGphdmEudXRpbC4qOworCisKK2NsYXNzIFNvcnRlZExpc3Q8RSBleHRlbmRzIENvbXBhcmFibGU+IGV4dGVuZHMgQXJyYXlMaXN0PEU+Cit7CisgIHB1YmxpYyBzdGF0aWMgPFQ+IFQgYmluYXJ5U2VhcmNoKExpc3Q8PyBleHRlbmRzIENvbXBhcmFibGU8PyBzdXBlciBUPj4gbGlzdCwgVCBrZXkpIHsKKyAgICByZXR1cm4gbnVsbDsKKyAgfQorCisgIHB1YmxpYyBib29sZWFuIGFkZChFIGUpeworICAgICAgPHJlZj5iaW5hcnlTZWFyY2godGhpcyxlKTsgLy9pbmZlciBFCisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3Jlc29sdmUvaW5mZXJlbmNlL0luZmVyUHJpbWl0aXZlQXJyYXkuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVzb2x2ZS9pbmZlcmVuY2UvSW5mZXJQcmltaXRpdmVBcnJheS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjMmZjNjYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3Jlc29sdmUvaW5mZXJlbmNlL0luZmVyUHJpbWl0aXZlQXJyYXkuamF2YQpAQCAtMCwwICsxLDEyIEBACitjbGFzcyBMaXN0PFQ+IHt9CisKK2NsYXNzIFRlc3QgeworICAgIDxUPiBUIGV4dHJhY3QoTGlzdDxUPiBsKSB7CisgICAgICAgIHJldHVybiBudWxsOworICAgIH0KKyAgICAKKyAgICB2b2lkIGZvbyAoTGlzdDxkb3VibGVbXT4gbCkgeworICAgICAgIDxyZWY+ZXh0cmFjdChsKTsKKyAgICB9Cit9CisKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVzb2x2ZS9pbmZlcmVuY2UvSW5mZXJSYXdUeXBlLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3Jlc29sdmUvaW5mZXJlbmNlL0luZmVyUmF3VHlwZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMyNTJlODEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3Jlc29sdmUvaW5mZXJlbmNlL0luZmVyUmF3VHlwZS5qYXZhCkBAIC0wLDAgKzEsMTAgQEAKK2NsYXNzIEc8VD4ge30KKworcHVibGljIGNsYXNzIEMgeworCisgICAgPFQ+IFQgZiAoRzxUPiBsKSB7IHJldHVybiBudWxsO30KKworICAgIHZvaWQgZm9vIChHIGwpIHsKKyAgICAgICAgU3RyaW5nIHMgPSA8cmVmPmYobCk7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXNvbHZlL2luZmVyZW5jZS9JbmZlclVuY2hlY2tlZC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXNvbHZlL2luZmVyZW5jZS9JbmZlclVuY2hlY2tlZC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYxM2ZiYTUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3Jlc29sdmUvaW5mZXJlbmNlL0luZmVyVW5jaGVja2VkLmphdmEKQEAgLTAsMCArMSwxNCBAQAorY2xhc3MgTGlzdDxUPiB7fQorY2xhc3MgQXJyYXlMaXN0PFQ+IGV4dGVuZHMgTGlzdDxUPiB7fQorY2xhc3MgQ29tcGFyYXRvcjxUPiB7fQorCitwdWJsaWMgY2xhc3MgVG9rZW5TdHJlYW1SZXdyaXRlRW5naW5lIHsKKyAgICBwdWJsaWMgc3RhdGljIDxUPiBUIGJpbmFyeVNlYXJjaChMaXN0PD8gZXh0ZW5kcyBUPiBsaXN0LCBUIGtleSwgQ29tcGFyYXRvcjw/IHN1cGVyIFQ+IGMpIHsKKyAgICAgICAgcmV0dXJuIG51bGw7CisgICAgfQorCisgICAgcHJvdGVjdGVkIHZvaWQgYWRkVG9Tb3J0ZWRSZXdyaXRlTGlzdChTdHJpbmcgcHJvZ3JhbU5hbWUsIFN0cmluZyBvcCwgQ29tcGFyYXRvciBjb21wYXJhdG9yKSB7CisgICAgICAgIExpc3QgcmV3cml0ZXMgPSBuZXcgQXJyYXlMaXN0KCk7CisgICAgICAgIDxyZWY+YmluYXJ5U2VhcmNoKHJld3JpdGVzLCBvcCwgY29tcGFyYXRvcik7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVzb2x2ZS9pbmZlcmVuY2UvSW5mZXJXaXRoQm91bmRzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3Jlc29sdmUvaW5mZXJlbmNlL0luZmVyV2l0aEJvdW5kcy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg2YzcwYjQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3Jlc29sdmUvaW5mZXJlbmNlL0luZmVyV2l0aEJvdW5kcy5qYXZhCkBAIC0wLDAgKzEsOCBAQAorY2xhc3MgQyB7CisgICAgY2xhc3MgSW5uZXIge30KKyAgICA8VCBleHRlbmRzIElubmVyPiBUIGYoKSB7cmV0dXJuIG51bGw7fQorCisgICAgdm9pZCBiYXIgKCkgeworICAgICAgICBPYmplY3QgbyA9IDxyZWY+ZigpOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3Jlc29sdmUvaW5mZXJlbmNlL0luZmVyV2l0aEJvdW5kczEuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVzb2x2ZS9pbmZlcmVuY2UvSW5mZXJXaXRoQm91bmRzMS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhhMTgyMjEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3Jlc29sdmUvaW5mZXJlbmNlL0luZmVyV2l0aEJvdW5kczEuamF2YQpAQCAtMCwwICsxLDkgQEAKK2NsYXNzIFRlc3QgeworICAgICA8VCBleHRlbmRzIFN0cmluZz4gaW50IGdldFZhbHVlKCkgeworICAgICAgICAgIHJldHVybiAzOworICAgICB9CisKKyAgICAgdm9pZCBjYygpIHsKKyAgICAgICAgICA8cmVmPmdldFZhbHVlKCk7CisgICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3Jlc29sdmUvaW5mZXJlbmNlL0luZmVyV2l0aFZhcmFyZ3MxLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3Jlc29sdmUvaW5mZXJlbmNlL0luZmVyV2l0aFZhcmFyZ3MxLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjZhNDVmYwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVzb2x2ZS9pbmZlcmVuY2UvSW5mZXJXaXRoVmFyYXJnczEuamF2YQpAQCAtMCwwICsxLDEwIEBACitjbGFzcyBDMSB7fQorY2xhc3MgQzIgZXh0ZW5kcyBDMSB7fQorCitjbGFzcyBDIHsKKyAgPFQ+IFQgZm9vIChULi4uIHRzKSB7IHJldHVybiBudWxsOyB9CisKKyAgdm9pZCBiYXIgKCkgeworICAgIDxyZWY+Zm9vKG5ldyBDMigpKTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVzb2x2ZS9pbmZlcmVuY2UvSW5mZXJXaXRoVmFyYXJnczIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVzb2x2ZS9pbmZlcmVuY2UvSW5mZXJXaXRoVmFyYXJnczIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNGZiMjJlCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXNvbHZlL2luZmVyZW5jZS9JbmZlcldpdGhWYXJhcmdzMi5qYXZhCkBAIC0wLDAgKzEsMTAgQEAKK2NsYXNzIEMxIHt9CitjbGFzcyBDMiBleHRlbmRzIEMxIHt9CisKK2NsYXNzIEMgeworICA8VD4gVCBmb28gKFQuLi4gdHMpIHsgcmV0dXJuIG51bGw7IH0KKworICB2b2lkIGJhciAoKSB7CisgICAgPHJlZj5mb28obmV3IEMyKCksIG5ldyBDMSgpKTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVzb2x2ZS9pbmZlcmVuY2UvSW5mZXJXaXRoVmFyYXJnczMuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVzb2x2ZS9pbmZlcmVuY2UvSW5mZXJXaXRoVmFyYXJnczMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZTc3YTdkCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXNvbHZlL2luZmVyZW5jZS9JbmZlcldpdGhWYXJhcmdzMy5qYXZhCkBAIC0wLDAgKzEsMTAgQEAKK2NsYXNzIExpc3Q8VD4ge30KKworY2xhc3MgVGVzdCB7CisgICAgPFQ+IExpc3Q8VD4gYXNMaXN0KFQuLi4gdHMpIHsKKyAgICAgICAgcmV0dXJuIG51bGw7CisgICAgfQorICAgIHZvaWQgZm9vICgpIHsKKyAgICAgICAgPHJlZj5hc0xpc3QobmV3IGludFswXSk7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXNvbHZlL2luZmVyZW5jZS9JbmZlcldpdGhWYXJhcmdzNC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXNvbHZlL2luZmVyZW5jZS9JbmZlcldpdGhWYXJhcmdzNC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZiMTQ0YjYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3Jlc29sdmUvaW5mZXJlbmNlL0luZmVyV2l0aFZhcmFyZ3M0LmphdmEKQEAgLTAsMCArMSwxMCBAQAorY2xhc3MgTGlzdDxUPiB7fQorCitjbGFzcyBUZXN0IHsKKyAgICA8VD4gTGlzdDxUPiBhc0xpc3QoVC4uLiB0cykgeworICAgICAgICByZXR1cm4gbnVsbDsKKyAgICB9CisgICAgdm9pZCBmb28gKCkgeworICAgICAgICA8cmVmPmFzTGlzdChuZXcgaW50WzBdLCBuZXcgaW50WzBdKTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3Jlc29sdmUvaW5mZXJlbmNlL0luZmVyV2l0aFZhcmFyZ3M1LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3Jlc29sdmUvaW5mZXJlbmNlL0luZmVyV2l0aFZhcmFyZ3M1LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmE4MDFkNwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVzb2x2ZS9pbmZlcmVuY2UvSW5mZXJXaXRoVmFyYXJnczUuamF2YQpAQCAtMCwwICsxLDEwIEBACitjbGFzcyBMaXN0PFQ+IHt9CisKK2NsYXNzIFRlc3QgeworICAgIDxUPiBMaXN0PFQ+IGFzTGlzdChULi4uIHRzKSB7CisgICAgICAgIHJldHVybiBudWxsOworICAgIH0KKyAgICB2b2lkIGZvbyAoKSB7CisgICAgICAgIDxyZWY+YXNMaXN0KG5ldyBJbnRlZ2VyWzBdKTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3Jlc29sdmUvaW5mZXJlbmNlL0luZmVyV2l0aFZhcmFyZ3M2LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3Jlc29sdmUvaW5mZXJlbmNlL0luZmVyV2l0aFZhcmFyZ3M2LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGVlZDEwYQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVzb2x2ZS9pbmZlcmVuY2UvSW5mZXJXaXRoVmFyYXJnczYuamF2YQpAQCAtMCwwICsxLDEwIEBACitjbGFzcyBMaXN0PFQ+IHt9CisKK2NsYXNzIFRlc3QgeworICAgIDxUPiBMaXN0PFQ+IGFzTGlzdChULi4uIHRzKSB7CisgICAgICAgIHJldHVybiBudWxsOworICAgIH0KKyAgICB2b2lkIGZvbyAoKSB7CisgICAgICAgIDxyZWY+YXNMaXN0KG5ldyBJbnRlZ2VyWzBdLCBuZXcgSW50ZWdlclswXSk7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXNvbHZlL2luZmVyZW5jZS9JbmZlcldpdGhXaWxkY2FyZHMuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVzb2x2ZS9pbmZlcmVuY2UvSW5mZXJXaXRoV2lsZGNhcmRzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmJjOGY4ZgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVzb2x2ZS9pbmZlcmVuY2UvSW5mZXJXaXRoV2lsZGNhcmRzLmphdmEKQEAgLTAsMCArMSwxNyBAQAorY2xhc3MgQ29sbGVjdGlvbjxUPiB7fQorY2xhc3MgQ29tcGFyYXRvcjxUPiB7fQorCitwdWJsaWMgY2xhc3MgQ29sbGVjdGlvbnMgeworICAgIHB1YmxpYyBzdGF0aWMgPFQ+IFQgbWluKENvbGxlY3Rpb248PyBleHRlbmRzIFQ+IGNvbGwsIENvbXBhcmF0b3I8PyBzdXBlciBUPiBjb21wKSB7CisgICAgICAgIGlmIChjb21wPT1udWxsKQorICAgICAgICAgICAgIHJldHVybiAoVCk8cmVmPm1pbigoQ29sbGVjdGlvbjxTZWxmQ29tcGFyYWJsZT4pIChDb2xsZWN0aW9uKSBjb2xsKTsKKworICAgICAgICByZXR1cm4gbnVsbDsKKyAgICB9CisKKyAgICBwdWJsaWMgc3RhdGljIDxUIGV4dGVuZHMgT2JqZWN0ICYgQ29tcGFyYWJsZTw/IHN1cGVyIFQ+PiBUIG1pbihDb2xsZWN0aW9uPD8gZXh0ZW5kcyBUPiBjb2xsKSB7CisgICAgICAgIHJldHVybiBudWxsOworICAgIH0KKworICAgIHByaXZhdGUgaW50ZXJmYWNlIFNlbGZDb21wYXJhYmxlIGV4dGVuZHMgQ29tcGFyYWJsZTxTZWxmQ29tcGFyYWJsZT4ge30KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVzb2x2ZS9pbmZlcmVuY2UvSW5mZXJXaXRoV2lsZGNhcmRzMS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXNvbHZlL2luZmVyZW5jZS9JbmZlcldpdGhXaWxkY2FyZHMxLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTEzZjZjYQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVzb2x2ZS9pbmZlcmVuY2UvSW5mZXJXaXRoV2lsZGNhcmRzMS5qYXZhCkBAIC0wLDAgKzEsNyBAQAorY2xhc3MgQzxUPiB7CisgICA8VD4gVCBmb28gKEM8PyBleHRlbmRzIFQ+IGMpIHtyZXR1cm4gbnVsbDt9CisKKyAgIHZvaWQgYmFyIChDPD8gZXh0ZW5kcyBTdHJpbmc+IGMpIHsKKyAgICAgPHJlZj5mb28oYyk7CisgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXNvbHZlL2luZmVyZW5jZS9JbmZlcldpdGhXaWxkY2FyZHMyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3Jlc29sdmUvaW5mZXJlbmNlL0luZmVyV2l0aFdpbGRjYXJkczIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZTMxNmYwCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXNvbHZlL2luZmVyZW5jZS9JbmZlcldpdGhXaWxkY2FyZHMyLmphdmEKQEAgLTAsMCArMSwyNSBAQAorY2xhc3MgQ29sbGVjdGlvbjxUPiB7fQorCitpbnRlcmZhY2UgQmFyIHt9CisKK2NsYXNzIEJhckltcGwgaW1wbGVtZW50cyBCYXIge30KKworaW50ZXJmYWNlIEZvbzxFIGV4dGVuZHMgQmFyPiB7CisgIENvbGxlY3Rpb248RT4gZ2V0RWxlbWVudHMoKTsKK30KKworY2xhc3MgRm9vSW1wbCBpbXBsZW1lbnRzIEZvbzxCYXJJbXBsPiB7CisgIHB1YmxpYyBDb2xsZWN0aW9uPEJhckltcGw+IGdldEVsZW1lbnRzKCkgeworICAgIHJldHVybiBudWxsOworICB9Cit9CisKK3B1YmxpYyBjbGFzcyBCYXp6IHsKKyAgcHVibGljIHN0YXRpYyA8RSBleHRlbmRzIEJhcj4gQ29sbGVjdGlvbjxFPiBnZXRFbGVtZW50cyhDb2xsZWN0aW9uPD8gZXh0ZW5kcyBGb288RT4+IGZvb3MpIHsKKyAgICByZXR1cm4gbnVsbDsKKyAgfQorCisgIHB1YmxpYyBzdGF0aWMgdm9pZCBmYWlsdXJlKGZpbmFsIENvbGxlY3Rpb248Rm9vSW1wbD4gZm9vcykgeworICAgIDxyZWY+Z2V0RWxlbWVudHMoZm9vcyk7CisgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVzb2x2ZS9pbmZlcmVuY2UvSW5mZXJXaXRoV2lsZGNhcmRzMy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXNvbHZlL2luZmVyZW5jZS9JbmZlcldpdGhXaWxkY2FyZHMzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjE2MzgxNAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVzb2x2ZS9pbmZlcmVuY2UvSW5mZXJXaXRoV2lsZGNhcmRzMy5qYXZhCkBAIC0wLDAgKzEsMTUgQEAKK2NsYXNzIFggeworICAgIHN0YXRpYyBjbGFzcyBZPFQ+IHsKKyAgICB9CisKKyAgICBzdGF0aWMgPFQ+IFk8VD4geChZPD8gc3VwZXIgVD4geSkgeworICAgICAgICByZXR1cm4gbnVsbDsKKyAgICB9CisKKworICAgIHsKKyAgICAgIFk8TG9uZz4geTEgPSBudWxsOworICAgICAgWC48cmVmPngoeTEpOworICAgIH0KK30KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVzb2x2ZS9pbmZlcmVuY2UvSW5mZXJXaXRoV2lsZGNhcmRzNC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXNvbHZlL2luZmVyZW5jZS9JbmZlcldpdGhXaWxkY2FyZHM0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTY5MWQ2NwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVzb2x2ZS9pbmZlcmVuY2UvSW5mZXJXaXRoV2lsZGNhcmRzNC5qYXZhCkBAIC0wLDAgKzEsMTUgQEAKK2NsYXNzIFggeworICAgIHN0YXRpYyBjbGFzcyBZPFQ+IHsKKyAgICB9CisKKyAgICBzdGF0aWMgPFQ+IFk8VD4geChZPD8gc3VwZXIgVFtdPiB5KSB7CisgICAgICAgIHJldHVybiBudWxsOworICAgIH0KKworCisgICAgeworICAgICAgWTxMb25nW10+IHkxID0gbnVsbDsKKyAgICAgIFguPHJlZj54KHkxKTsKKyAgICB9Cit9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3Jlc29sdmUvaW5mZXJlbmNlL0luZmVyV2l0aFdpbGRjYXJkczUuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVzb2x2ZS9pbmZlcmVuY2UvSW5mZXJXaXRoV2lsZGNhcmRzNS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM0YjY3NjAKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3Jlc29sdmUvaW5mZXJlbmNlL0luZmVyV2l0aFdpbGRjYXJkczUuamF2YQpAQCAtMCwwICsxLDE1IEBACitjbGFzcyBYIHsKKyAgICBzdGF0aWMgY2xhc3MgWTxUPiB7CisgICAgfQorCisgICAgc3RhdGljIDxUPiBZPFQ+IHgoWTw/IHN1cGVyIFk8VD4+IHkpIHsKKyAgICAgICAgcmV0dXJuIG51bGw7CisgICAgfQorCisKKyAgICB7CisgICAgICBZPFk8TG9uZz4+IHkxID0gbnVsbDsKKyAgICAgIFguPHJlZj54KHkxKTsKKyAgICB9Cit9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3Jlc29sdmUvaW5mZXJlbmNlL1NDUjQxMDMxLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3Jlc29sdmUvaW5mZXJlbmNlL1NDUjQxMDMxLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTNlYzkyMwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVzb2x2ZS9pbmZlcmVuY2UvU0NSNDEwMzEuamF2YQpAQCAtMCwwICsxLDE1IEBACitjbGFzcyBMaXN0PFQ+eworICAgIFQgZ2V0ICgpIHtyZXR1cm4gbnVsbDt9Cit9CisKK2NsYXNzIENhcHR1cmVUZXN0IDxUPiB7CisgICAgcHJpdmF0ZSBMaXN0PD8gZXh0ZW5kcyBMaXN0PFQ+PiBsaXN0T2ZTZXRzOworCisgICAgcHJpdmF0ZSB2b2lkIGZvbygpIHsKKyAgICAgICAgPHJlZj5kb0dlbmVyaWNUaGluZyhsaXN0T2ZTZXRzLmdldCgwKSk7CisgICAgfQorCisgICAgcHVibGljIDxVPiBMaXN0PFU+IGRvR2VuZXJpY1RoaW5nKExpc3Q8VT4gc2V0KSB7CisgICAgICAgIHJldHVybiBudWxsOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3Jlc29sdmUvbWV0aG9kL0Fub255bW91c1N1cGVyMS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXNvbHZlL21ldGhvZC9Bbm9ueW1vdXNTdXBlcjEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZGFlZjlmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXNvbHZlL21ldGhvZC9Bbm9ueW1vdXNTdXBlcjEuamF2YQpAQCAtMCwwICsxLDIwIEBACisvKioKKyAqIENyZWF0ZWQgYnkgSW50ZWxsaUogSURFQS4KKyAqIFVzZXI6IGlrCisgKiBEYXRlOiAyMi4wMS4yMDAzCisgKiBUaW1lOiAxMToxNToxOQorICogVG8gY2hhbmdlIHRoaXMgdGVtcGxhdGUgdXNlIE9wdGlvbnMgfCBGaWxlIFRlbXBsYXRlcy4KKyAqLworcHVibGljIGNsYXNzIFRlc3QxIHsKKyAgICBwdWJsaWMgc3RhdGljIGNsYXNzIEF7CisgICAgICAgIHByb3RlY3RlZCB2b2lkIGZvbygpe30KKyAgICB9CisKKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKXsKKyAgICAgICAgbmV3IEEoKXsKKyAgICAgICAgICAgIHByb3RlY3RlZCB2b2lkIGZvbygpeworICAgICAgICAgICAgICAgIHN1cGVyLjxyZWY+Zm9vKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH07CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXNvbHZlL21ldGhvZC9BcnJheTEuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVzb2x2ZS9tZXRob2QvQXJyYXkxLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTdlODI4OQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVzb2x2ZS9tZXRob2QvQXJyYXkxLmphdmEKQEAgLTAsMCArMSw2IEBACitjbGFzcyBBcnJheXsKKyB2b2lkIGZvbygpeworICBpbnRbXSBhcnJheTsKKyAgYXJyYXkuPHJlZj5jbG9uZSgpOworIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3Jlc29sdmUvbWV0aG9kL0J1Zzc5NjguamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVzb2x2ZS9tZXRob2QvQnVnNzk2OC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNlMmFmOGEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3Jlc29sdmUvbWV0aG9kL0J1Zzc5NjguamF2YQpAQCAtMCwwICsxLDIxIEBACisKKy8qKgorICogQ3JlYXRlZCBieSBJbnRlbGxpSiBJREVBLgorICogVXNlcjogaWsKKyAqIERhdGU6IDIyLjAxLjIwMDMKKyAqIFRpbWU6IDE0OjQ2OjA5CisgKiBUbyBjaGFuZ2UgdGhpcyB0ZW1wbGF0ZSB1c2UgT3B0aW9ucyB8IEZpbGUgVGVtcGxhdGVzLgorICovCitwdWJsaWMgY2xhc3MgQnVnNzk2OCB7CisgICAgcHVibGljIHN0YXRpYyB2b2lkIGZvbyAoU3RyaW5nIHMsIFN0cmluZyBzMSwgU3RyaW5nIHMyLCBPYmplY3RbXSBvYSkKKyAgICB7CisgICAgICAgIEJhci48cmVmPmJhciAocywgczEsIHMyLCBvYSk7CisgICAgfQorICAgIGNsYXNzIEJhcgorICAgIHsKKyAgICAgICAgcHVibGljIHN0YXRpYyB2b2lkIGJhciAoT2JqZWN0IG8sIFN0cmluZyBzMSwgU3RyaW5nIHMyLCBPYmplY3RbXSBhbykge30KKyAgICAgICAgcHVibGljIHN0YXRpYyB2b2lkIGJhciAoU3RyaW5nIHMsIFN0cmluZyBzMSwgU3RyaW5nIHMyLCBPYmplY3QgICBvKSAge30KKyAgICAgICAgcHVibGljIHN0YXRpYyB2b2lkIGJhciAoU3RyaW5nIHMsIFN0cmluZyBzMSwgU3RyaW5nIHMyLCBPYmplY3RbXSBhbykge30KKyAgICB9CisKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVzb2x2ZS9tZXRob2QvQ2xvbmUuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVzb2x2ZS9tZXRob2QvQ2xvbmUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42Zjc3YzIzCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXNvbHZlL21ldGhvZC9DbG9uZS5qYXZhCkBAIC0wLDAgKzEsMTcgQEAKK2NsYXNzIFp7CisgIHB1YmxpYyBpbnRlcmZhY2UgQSB7IE9iamVjdCBjbG9uZSgpOyB9CisKKyAgaW50ZXJmYWNlIEIgZXh0ZW5kcyBBIHsgfQorCisKKworCisgIGNsYXNzIEMgaW1wbGVtZW50cyBCIHsKKyAgICBPYmplY3QgY2xvbmUoKSB7CisgICAgICBDIGMgPSBuZXcgQygpOworICAgICAgKChBKSBjKS5jbG9uZSgpOworICAgICAgKChCKSBjKS48cmVmPmNsb25lKCk7CisgICAgICByZXR1cm4gYy5jbG9uZSgpOworICAgIH0KKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXNvbHZlL21ldGhvZC9DeWNsZTEuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVzb2x2ZS9tZXRob2QvQ3ljbGUxLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWFhNTRlMQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVzb2x2ZS9tZXRob2QvQ3ljbGUxLmphdmEKQEAgLTAsMCArMSwyMyBAQAorcHVibGljIGNsYXNzIEN5Y2xlMXsKKyAgICBwdWJsaWMgaW50ZXJmYWNlIEF7CisgICAgICAgIHZvaWQgZm9vKCk7CisgICAgfQorCisgICAgcHVibGljIGludGVyZmFjZSBCeworICAgICAgICB2b2lkIGZvbygpOworICAgIH0KKworICAgIHB1YmxpYyBzdGF0aWMgY2xhc3MgQworICAgICAgICBpbXBsZW1lbnRzIEF7CisgICAgICAgIHZvaWQgZm9vKCl7fQorICAgIH0KKworICAgIHB1YmxpYyBzdGF0aWMgY2xhc3MgRCBleHRlbmRzIEMKKyAgICAgICAgaW1wbGVtZW50cyBCeworICAgICAgICB2b2lkIGZvbyhpbnQgZ2dnKXt9CisgICAgICAgIAorICAgICAgICB2b2lkIGZvbzEoKXsKKyAgICAgICAgICAgIDxyZWY+Zm9vKCk7CisgICAgICAgIH0KKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3Jlc29sdmUvbWV0aG9kL0VtcHR5Q29uc3RydWN0b3IuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVzb2x2ZS9tZXRob2QvRW1wdHlDb25zdHJ1Y3Rvci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY1MjA3MGVlCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXNvbHZlL21ldGhvZC9FbXB0eUNvbnN0cnVjdG9yLmphdmEKQEAgLTAsMCArMSw1IEBACitjbGFzcyBBeworIEEoKXsKKyAgPHJlZj5zdXBlcigpOworIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3Jlc29sdmUvbWV0aG9kL0ltcGxlbWVudE9yZGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3Jlc29sdmUvbWV0aG9kL0ltcGxlbWVudE9yZGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWQ2MWYwNgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVzb2x2ZS9tZXRob2QvSW1wbGVtZW50T3JkZXIuamF2YQpAQCAtMCwwICsxLDExIEBACithYnN0cmFjdCBwdWJsaWMgY2xhc3MgWVlZIGltcGxlbWVudHMgSSxJSXsKKyAgICBwcml2YXRlIHZvaWQgZihZWVkgeSkgeworICAgICAgICBJSSBpID0geS48cmVmPmZvbygpOworICAgIH0KK30KK2ludGVyZmFjZSBJIHsKKyAgICBJIGZvbygpOworfQoraW50ZXJmYWNlIElJIGV4dGVuZHMgSSB7CisgICAgSUkgZm9vKCk7Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3Jlc29sdmUvbWV0aG9kL0luZGV4T2YuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVzb2x2ZS9tZXRob2QvSW5kZXhPZi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdiMDk1ZGYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3Jlc29sdmUvbWV0aG9kL0luZGV4T2YuamF2YQpAQCAtMCwwICsxLDUgQEAKK2NsYXNzIEF7CisgIHsKKyAgICAiYWFhIi48cmVmPmluZGV4T2YoJ2EnKTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXNvbHZlL21ldGhvZC9JbmhlcmFuY2VXaXRoRXh0ZW5kc0NvbmZsaWN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3Jlc29sdmUvbWV0aG9kL0luaGVyYW5jZVdpdGhFeHRlbmRzQ29uZmxpY3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kM2JkMGQ0Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXNvbHZlL21ldGhvZC9JbmhlcmFuY2VXaXRoRXh0ZW5kc0NvbmZsaWN0LmphdmEKQEAgLTAsMCArMSwyNCBAQAorLyoqCisgKiBDcmVhdGVkIGJ5IEludGVsbGlKIElERUEuCisgKiBVc2VyOiBpaworICogRGF0ZTogMjMuMDEuMjAwMworICogVGltZTogMTg6NDQ6MzQKKyAqIFRvIGNoYW5nZSB0aGlzIHRlbXBsYXRlIHVzZSBPcHRpb25zIHwgRmlsZSBUZW1wbGF0ZXMuCisgKi8KK3B1YmxpYyBjbGFzcyBJbm5lcjEgeworICAgIHByaXZhdGUgaW50IGEoKXsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgcHJpdmF0ZSBjbGFzcyBBIGV4dGVuZHMgQnsKKyAgICAgICAgeworICAgICAgICAgICAgaW50IGogPSA8cmVmPmEoKTsKKyAgICAgICAgfQorICAgIH0KK30KKworY2xhc3MgQiB7CisgICAgcHVibGljIGludCBhKCl7CisgICAgICAgIHJldHVybiAwOworICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVzb2x2ZS9tZXRob2QvSW5oZXJpdDEuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVzb2x2ZS9tZXRob2QvSW5oZXJpdDEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNjhkYjk4Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXNvbHZlL21ldGhvZC9Jbmhlcml0MS5qYXZhCkBAIC0wLDAgKzEsMTcgQEAKK2NsYXNzIEF7CisgcHVibGljIGludCBhc2tkaCgpeworICByZXR1cm4gMTsKKyB9Cit9CisKK2NsYXNzIEIgZXh0ZW5kcyBBeworIHB1YmxpYyB2b2lkIGFza2RoKCl7CisgIHJldHVybiAyOworIH0KK30KKworY2xhc3MgU3VwZXIxIGV4dGVuZHMgQnsKKyB7CisgIHN1cGVyLjxyZWY+YXNrZGgoKTsKKyB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXNvbHZlL21ldGhvZC9Jbm5lckNsYXNzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3Jlc29sdmUvbWV0aG9kL0lubmVyQ2xhc3MuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ODQ2ZGVkCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXNvbHZlL21ldGhvZC9Jbm5lckNsYXNzLmphdmEKQEAgLTAsMCArMSwxMiBAQAorcHVibGljIGNsYXNzIElubmVyQ2xhc3MgeworICAgIHZvaWQgZm9vKCkge30KKworICAgIGNsYXNzIElubmVyIHsKKyAgICAgICAgdm9pZCBmb28oaW50IGkpIHt9CisKKyAgICAgICAgdm9pZCBiYXIoKSB7CisgICAgICAgICAgICA8cmVmPmZvbygpOworICAgICAgICB9CisgICAgfQorCit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXNvbHZlL21ldGhvZC9NZXRob2RDb25mbGljdDEuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVzb2x2ZS9tZXRob2QvTWV0aG9kQ29uZmxpY3QxLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDdlYWVjYQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVzb2x2ZS9tZXRob2QvTWV0aG9kQ29uZmxpY3QxLmphdmEKQEAgLTAsMCArMSwxMiBAQAorY2xhc3MgQXsKKwlpbnRlcmZhY2UgQXt9CisJaW50ZXJmYWNlIEJ7fQorCisJY2xhc3MgQyBpbXBsZW1lbnRzIEEsIEJ7CisJCXZvaWQgZm9vKEEgYSl7fQorCQl2b2lkIGZvbyhCIGIpe30KKwl9CisJeworCQluZXcgQygpLjxyZWY+Zm9vKG5ldyBDKCkpCisJfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXNvbHZlL21ldGhvZC9NZXRob2RGcm9tQW5vbkJhc2UuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVzb2x2ZS9tZXRob2QvTWV0aG9kRnJvbUFub25CYXNlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWFiOTlkNQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVzb2x2ZS9tZXRob2QvTWV0aG9kRnJvbUFub25CYXNlLmphdmEKQEAgLTAsMCArMSw5IEBACitjbGFzcyBUZXN0eworICB7CisgICAgbmV3IFJ1bm5hYmxlKCl7CisgICAgICB7CisgICAgICAgIDxyZWY+cnVuKCk7CisgICAgICB9CisgICAgfQorICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXNvbHZlL21ldGhvZC9NdWx0aXBsZUluaGVyaXRhbmNlUGF0aHNUb01ldGhvZC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXNvbHZlL21ldGhvZC9NdWx0aXBsZUluaGVyaXRhbmNlUGF0aHNUb01ldGhvZC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNmZWE3NmYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3Jlc29sdmUvbWV0aG9kL011bHRpcGxlSW5oZXJpdGFuY2VQYXRoc1RvTWV0aG9kLmphdmEKQEAgLTAsMCArMSwyMCBAQAoraW50ZXJmYWNlIE4xIHsKKyAgU3RyaW5nIGdldE5hbWUoKTsKK30KK2ludGVyZmFjZSBOMiB7CisgIFN0cmluZyBnZXROYW1lKCk7Cit9CitpbnRlcmZhY2UgTk4gZXh0ZW5kcyBOMSB7fQorCitpbnRlcmZhY2UgTjMgeworICAgIFN0cmluZyBnZXROYW1lKCk7Cit9CitpbnRlcmZhY2UgVmVyeU5hbWVkIGV4dGVuZHMgTk4sIE4yLCBOMywgTjEge30KKworY2xhc3MgTXlDbGFzcyB7CisKKyAgdm9pZCBmb28oVmVyeU5hbWVkIGYpIHsKKyAgICBmLmdldE5hPHJlZj5tZSgpOworICB9CisKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVzb2x2ZS9tZXRob2QvTmV4dE1ldGhvZC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXNvbHZlL21ldGhvZC9OZXh0TWV0aG9kLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjU3MTFmMgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVzb2x2ZS9tZXRob2QvTmV4dE1ldGhvZC5qYXZhCkBAIC0wLDAgKzEsMTEgQEAKK2NsYXNzIEF7Cisgdm9pZCBmb28oT2JqZWN0IGEsIFN0cmluZyBiKXsKKyB9CisKKyB2b2lkIGZvbygpeworICA8cmVmPmZvbygiYWFhIiwgdHJ1ZSk7CisgfQorCisgdm9pZCBmb28oU3RyaW5nIGEsIGJvb2xlYW4gYil7CisgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVzb2x2ZS9tZXRob2QvTm90QWNjZXNzaWJsZUFjY2Vzc0NsYXNzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3Jlc29sdmUvbWV0aG9kL05vdEFjY2Vzc2libGVBY2Nlc3NDbGFzcy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM0N2U1MTkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3Jlc29sdmUvbWV0aG9kL05vdEFjY2Vzc2libGVBY2Nlc3NDbGFzcy5qYXZhCkBAIC0wLDAgKzEsMTcgQEAKK2NsYXNzIEEgeworICBCIGIxOworICBzdGF0aWMgQiBiMjsKKyAgcHVibGljIGNsYXNzIFogZXh0ZW5kcyBCeworICAgIHB1YmxpYyB2b2lkIGFrc2hka2phc2RoKCl7fQorICB9CisgIHByaXZhdGUgY2xhc3MgQnsKKyAgICBwdWJsaWMgdm9pZCBmKCkge30KKyAgfQorfQorCisKK2NsYXNzIEMgZXh0ZW5kcyBBIHsKKyAgeworICAgIGIxLjxyZWY+ZigpOworICB9CisgIH0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3Jlc29sdmUvbWV0aG9kL09iamVjdFZzSW50ZXJmYWNlLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3Jlc29sdmUvbWV0aG9kL09iamVjdFZzSW50ZXJmYWNlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGE1ZDI2YgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVzb2x2ZS9tZXRob2QvT2JqZWN0VnNJbnRlcmZhY2UuamF2YQpAQCAtMCwwICsxLDExIEBACitpbXBvcnQgamF2YS5pby5TZXJpYWxpemFibGU7CisKK2ludGVyZmFjZSBQdWJsaWNDbG9uZWFibGUgeworCU9iamVjdCBjbG9uZSgpOworfQoraW50ZXJmYWNlIEV4dGVuc2lvbiBleHRlbmRzIFNlcmlhbGl6YWJsZSwgUHVibGljQ2xvbmVhYmxlIHt9CitjbGFzcyBUZXN0IHsKKwl2b2lkIGZvbyhFeHRlbnNpb24gYmFyKSB7CisJCWJhci48cmVmPmNsb25lKCk7CisJfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVzb2x2ZS9tZXRob2QvUGFydGx5SW1wbGVtZW50MS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXNvbHZlL21ldGhvZC9QYXJ0bHlJbXBsZW1lbnQxLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGRjNjIwOQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVzb2x2ZS9tZXRob2QvUGFydGx5SW1wbGVtZW50MS5qYXZhCkBAIC0wLDAgKzEsMTMgQEAKK2NsYXNzIEF7CitwdWJsaWMgYWJzdHJhY3QgY2xhc3MgSW50ZWdlclByZWRpY2F0ZUJhc2UgaW1wbGVtZW50cyBQcmVkaWNhdGV7CisgcHVibGljIGJvb2xlYW4gYXBwbGllcyhPYmplY3Qgb2JqKXsKKyAgcmV0dXJuIDxyZWY+YXBwbGllcygoSW50ZWdlcilvYmopOyAgCisgfQorfQorcHVibGljIGludGVyZmFjZSBQcmVkaWNhdGV7CisgYm9vbGVhbiBhcHBsaWVzKE9iamVjdCBvYmopOworIGJvb2xlYW4gYXBwbGllcyhJbnRlZ2VyIG15T2JqKTsKK30KKyAKK30KKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXNvbHZlL21ldGhvZC9QcmVmZXJQdWJsaWMuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVzb2x2ZS9tZXRob2QvUHJlZmVyUHVibGljLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzQwOGRjZgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVzb2x2ZS9tZXRob2QvUHJlZmVyUHVibGljLmphdmEKQEAgLTAsMCArMSwxMCBAQAorY2xhc3MgQXsKKyAgcHJpdmF0ZSB2b2lkIGZvbyhTdHJpbmcgcyl7fQorICBwdWJsaWMgdm9pZCBmb28oT2JqZWN0IG8pe30KK30KKworY2xhc3MgQnsKKyAgeworICAgIG5ldyBBKCkuPHJlZj5mb28oImEiKTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVzb2x2ZS9tZXRob2QvUHJpdmF0ZUluU3VwZXJJbm5lci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXNvbHZlL21ldGhvZC9Qcml2YXRlSW5TdXBlcklubmVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODM5YWYwYwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVzb2x2ZS9tZXRob2QvUHJpdmF0ZUluU3VwZXJJbm5lci5qYXZhCkBAIC0wLDAgKzEsMTAgQEAKK2NsYXNzIE91dGVyIHsKKyAgICBwcml2YXRlIHZvaWQgZm9vKCkge30KKworICAgIHN0YXRpYyBjbGFzcyBJbm5lciBleHRlbmRzIE91dGVyIHsKKyAgICAgICAgdm9pZCBiYXIoKSB7CisgICAgICAgICAgICA8cmVmPmZvbygpOworICAgICAgICB9CisgICAgfQorCit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXNvbHZlL21ldGhvZC9Qcml2YXRlSW5TdXBlcklubmVyMS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXNvbHZlL21ldGhvZC9Qcml2YXRlSW5TdXBlcklubmVyMS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZjMGZkNWUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3Jlc29sdmUvbWV0aG9kL1ByaXZhdGVJblN1cGVySW5uZXIxLmphdmEKQEAgLTAsMCArMSwxMCBAQAorY2xhc3MgT3V0ZXIgeworICAgIHByaXZhdGUgdm9pZCBmb28oKSB7fQorCisgICAgY2xhc3MgSW5uZXIgZXh0ZW5kcyBPdXRlciB7CisgICAgICAgIHZvaWQgYmFyKCkgeworICAgICAgICAgICAgPHJlZj5mb28oKTsKKyAgICAgICAgfQorICAgIH0KKworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVzb2x2ZS9tZXRob2QvUHJvdGVjdGVkTS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXNvbHZlL21ldGhvZC9Qcm90ZWN0ZWRNLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjk1ZjJhYwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVzb2x2ZS9tZXRob2QvUHJvdGVjdGVkTS5qYXZhCkBAIC0wLDAgKzEsMTAgQEAKK2ltcG9ydCBqYXZheC5zd2luZy4qOworaW1wb3J0IGphdmEuYXd0Lio7CisKK2NsYXNzIFhjIGV4dGVuZHMgSkNvbXBvbmVudCB7CisgICAgSkNvbXBvbmVudCBjb21wb25lbnQ7CisKKyAgICBwcm90ZWN0ZWQgdm9pZCBwYWludENvbXBvbmVudChmaW5hbCBHcmFwaGljcyBnKSB7CisgICAgICAgIGNvbXBvbmVudC48cmVmPnBhaW50Q29tcG9uZW50KGcpOworICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVzb2x2ZS9tZXRob2QvUmVtb3ZlMS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXNvbHZlL21ldGhvZC9SZW1vdmUxLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjQ2YWUxMwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVzb2x2ZS9tZXRob2QvUmVtb3ZlMS5qYXZhCkBAIC0wLDAgKzEsMTQgQEAKK3B1YmxpYyBjbGFzcyBSZW1vdmUxeworICB2b2lkIGZvbyhPYmplY3Qgbyl7fQorICB2b2lkIGZvbyhTdHJpbmcgbyl7fQorICBwdWJsaWMgc3RhdGljIGNsYXNzIEEgZXh0ZW5kcyBSZW1vdmV7CisgICB2b2lkIGZvbyhPYmplY3Qgbyl7CisgICB9CisgICB2b2lkIGZvbyhTdHJpbmcgbyl7CisgICB9CisgIH0KKworICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbigpeworICAgIG5ldyBBKCkuPHJlZj5mb28oImFhYSIpOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXNvbHZlL21ldGhvZC9SZW1vdmUyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3Jlc29sdmUvbWV0aG9kL1JlbW92ZTIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YWNhNjhlCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXNvbHZlL21ldGhvZC9SZW1vdmUyLmphdmEKQEAgLTAsMCArMSw3IEBACitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK3B1YmxpYyBjbGFzcyBSZW1vdmUyeworICBwcml2YXRlIHN0YXRpYyBBcnJheUxpc3QgbHN0ID0gbmV3IEFycmF5TGlzdCgpOworICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbigpeworICAgIGxzdC48cmVmPnJlbW92ZSgiYWFhIik7CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVzb2x2ZS9tZXRob2QvUmVtb3ZlMy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXNvbHZlL21ldGhvZC9SZW1vdmUzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDQyYmNmNwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVzb2x2ZS9tZXRob2QvUmVtb3ZlMy5qYXZhCkBAIC0wLDAgKzEsMTggQEAKK3BhY2thZ2UgcHNpLnJlc29sdmUubWV0aG9kOworCitpbXBvcnQgY29tLmludGVsbGlqLnV0aWwuY29udGFpbmVycy50cm92ZS5USGFzaE1hcDsKKworLyoqCisgKiBDcmVhdGVkIGJ5IEludGVsbGlKIElERUEuCisgKiBVc2VyOiBpaworICogRGF0ZTogMTcuMDEuMjAwMworICogVGltZTogMTU6MDg6MjYKKyAqIFRvIGNoYW5nZSB0aGlzIHRlbXBsYXRlIHVzZSBPcHRpb25zIHwgRmlsZSBUZW1wbGF0ZXMuCisgKi8KK3B1YmxpYyBjbGFzcyBSZW1vdmUzeworICAgIFRIYXNoTWFwIG1hcCA9IG5ldyBUSGFzaE1hcCgpOworICAgIAorICAgIHZvaWQgZm9vKCl7CisgICAgICAgIG1hcC48cmVmPnNpemUoKTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3Jlc29sdmUvbWV0aG9kL1JlbW92ZTQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVzb2x2ZS9tZXRob2QvUmVtb3ZlNC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY5ODFjN2YKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3Jlc29sdmUvbWV0aG9kL1JlbW92ZTQuamF2YQpAQCAtMCwwICsxLDExIEBACitwYWNrYWdlIDsKKworLyoqCisgKiBDcmVhdGVkIGJ5IEludGVsbGlKIElERUEuCisgKiBVc2VyOiBpaworICogRGF0ZTogMTcuMDEuMjAwMworICogVGltZTogMTk6MTE6NTYKKyAqIFRvIGNoYW5nZSB0aGlzIHRlbXBsYXRlIHVzZSBPcHRpb25zIHwgRmlsZSBUZW1wbGF0ZXMuCisgKi8KK3B1YmxpYyBjbGFzcyBSZW1vdmU0IHsKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVzb2x2ZS9tZXRob2QvU0NSNTEzNC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXNvbHZlL21ldGhvZC9TQ1I1MTM0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjE4MGI2ZQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVzb2x2ZS9tZXRob2QvU0NSNTEzNC5qYXZhCkBAIC0wLDAgKzEsMTEgQEAKK2ludGVyZmFjZSBJIHsKKyAgYm9vbGVhbiBmb28oT2JqZWN0IG9iaik7CisKKyAgYm9vbGVhbiBmb28oSW50ZWdlciBteU9iaik7Cit9CisKK2Fic3RyYWN0IGNsYXNzIEMgaW1wbGVtZW50cyBJIHsKKyAgcHVibGljIGJvb2xlYW4gZm9vKE9iamVjdCBvYmopIHsKKyAgICByZXR1cm4gPHJlZj5mb28oKEludGVnZXIpb2JqKTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXNvbHZlL21ldGhvZC9TQ1I1ODU5LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3Jlc29sdmUvbWV0aG9kL1NDUjU4NTkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZmU1MDZlCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXNvbHZlL21ldGhvZC9TQ1I1ODU5LmphdmEKQEAgLTAsMCArMSwyNyBAQAorCitjbGFzcyBCYXNlIHsKK30KKworY2xhc3MgRGVyaXZlZCBleHRlbmRzIEJhc2UgeworfQorCitjbGFzcyBTZXJ2ZXIgeworICBzdGF0aWMgQmFzZSBzdWIoQmFzZSBwMSwgQmFzZSBwMikgeworICB9CisKKyAgc3RhdGljIERlcml2ZWQgc3ViKERlcml2ZWQgcDEsIEJhc2UgcDIpIHsKKyAgfQorCisgIHN0YXRpYyBEZXJpdmVkIHN1YihCYXNlIHAxLCBEZXJpdmVkIHAyKSB7CisgIH0KKworICBzdGF0aWMgRGVyaXZlZCBzdWIoRGVyaXZlZCBwMSwgRGVyaXZlZCBwMikgeworICB9Cit9CisKK2NsYXNzIENsaWVudCB7CisgIHsKKyAgICBEZXJpdmVkIGFyZyA9IG51bGw7CisgICAgU2VydmVyLjxyZWY+c3ViKGFyZywgYXJnKTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXNvbHZlL21ldGhvZC9TaG9ydFZzSW50LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3Jlc29sdmUvbWV0aG9kL1Nob3J0VnNJbnQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYWJmNjRiCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXNvbHZlL21ldGhvZC9TaG9ydFZzSW50LmphdmEKQEAgLTAsMCArMSw4IEBACitjbGFzcyBBeworICBTdHJpbmcgdG9IZXgoaW50IGkpIHt9IAorICBTdHJpbmcgdG9IZXgoc2hvcnQgaSkge30KKworICB2b2lkIGYoKXsKKyAgICA8cmVmPnRvSGV4KCdpJyk7CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVzb2x2ZS9tZXRob2QvU2ltcGxlLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3Jlc29sdmUvbWV0aG9kL1NpbXBsZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgxMDlmZjkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3Jlc29sdmUvbWV0aG9kL1NpbXBsZS5qYXZhCkBAIC0wLDAgKzEsOSBAQAorcHVibGljIGNsYXNzIFNpbXBsZSB7CisgICAgcHVibGljIHZvaWQgbWV0aG9kKFN0cmluZyBzKSB7CisgICAgfQorCisgICAgc3RhdGljIHsKKyAgICAgICAgU2ltcGxlIGEgPSBuZXcgU2ltcGxlKCk7CisgICAgICAgIGEuPHJlZj5tZXRob2QoImJsYWgiKTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXNvbHZlL21ldGhvZC9Tb3V0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3Jlc29sdmUvbWV0aG9kL1NvdXQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOWY4Nzk5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXNvbHZlL21ldGhvZC9Tb3V0LmphdmEKQEAgLTAsMCArMSw1IEBACitjbGFzcyBTb3V0IHsKKyAgICBzdGF0aWMgeworICAgICAgICBTeXN0ZW0ub3V0LjxyZWY+cHJpbnRsbigpOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3Jlc29sdmUvbWV0aG9kL1N0YXRpY1ZTTm9uU3RhdGljLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3Jlc29sdmUvbWV0aG9kL1N0YXRpY1ZTTm9uU3RhdGljLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTVjOTY2ZAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVzb2x2ZS9tZXRob2QvU3RhdGljVlNOb25TdGF0aWMuamF2YQpAQCAtMCwwICsxLDExIEBACisgcHVibGljIGNsYXNzIEZvbyB7CisgIHB1YmxpYyB2b2lkIGZvbygpIHt9CisKKyAgcHVibGljIHN0YXRpYyB2b2lkIGZvbyhjaGFyIGMpe30KK30KKworY2xhc3MgQXsKKyAgeworICAgIEZvby48cmVmPmZvbygpOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXNvbHZlL21ldGhvZC9TdXBlcjEuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVzb2x2ZS9tZXRob2QvU3VwZXIxLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWVhMzE3YQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVzb2x2ZS9tZXRob2QvU3VwZXIxLmphdmEKQEAgLTAsMCArMSwxMCBAQAorY2xhc3MgQXsKKyBwdWJsaWMgdm9pZCBhc2tkaCgpeworIH0KK30KKworY2xhc3MgU3VwZXIxIGV4dGVuZHMgQXsKKyB7CisgIHN1cGVyLjxyZWY+YXNrZGgoKTsKKyB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXNvbHZlL21ldGhvZC9TdXBlck9mT2JqZWN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3Jlc29sdmUvbWV0aG9kL1N1cGVyT2ZPYmplY3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNzkzYTliCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXNvbHZlL21ldGhvZC9TdXBlck9mT2JqZWN0LmphdmEKQEAgLTAsMCArMSwxNSBAQAoraW50ZXJmYWNlIEkgeworICAgIE9iamVjdCBjbG9uZSgpOworfQorCitpbnRlcmZhY2UgSiBleHRlbmRzIEkgeworfQorCitjbGFzcyBDQmFzZSBpbXBsZW1lbnRzIEkgeworfQorCitjbGFzcyBDIGV4dGVuZHMgQ0Jhc2UgaW1wbGVtZW50cyBKIHsKKyAgICB7CisgICAgICAgIHN1cGVyLjxyZWY+Y2xvbmUoKTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXNvbHZlL21ldGhvZC9UZXN0T3ZlcmxvYWRpbmcxLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3Jlc29sdmUvbWV0aG9kL1Rlc3RPdmVybG9hZGluZzEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NTkwNDA3Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXNvbHZlL21ldGhvZC9UZXN0T3ZlcmxvYWRpbmcxLmphdmEKQEAgLTAsMCArMSwyMCBAQAorCisvKioKKyAqIENyZWF0ZWQgYnkgSW50ZWxsaUogSURFQS4KKyAqIFVzZXI6IGlrCisgKiBEYXRlOiAyOC4wNS4yMDAzCisgKiBUaW1lOiAxNjoyNDowMworICogVG8gY2hhbmdlIHRoaXMgdGVtcGxhdGUgdXNlIE9wdGlvbnMgfCBGaWxlIFRlbXBsYXRlcy4KKyAqLworcHVibGljIGNsYXNzIFRlc3RPdmVybG9hZGluZzEgeworICAgIGNsYXNzIEF7CisgICAgICAgIHZvaWQgZm9vKCl7fQorICAgIH0KKyAgICBjbGFzcyBCIGV4dGVuZHMgQXsKKyAgICAgICAgdm9pZCBmb28oKXt9CisgICAgfQorCisgICAgeworICAgICAgICBuZXcgQigpLjxyZWY+Zm9vKDEpOworICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVzb2x2ZS9tZXRob2QvVGhyb3dXaXRob3V0TmV3LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3Jlc29sdmUvbWV0aG9kL1Rocm93V2l0aG91dE5ldy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcxYmFmNzkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3Jlc29sdmUvbWV0aG9kL1Rocm93V2l0aG91dE5ldy5qYXZhCkBAIC0wLDAgKzEsNSBAQAorY2xhc3MgQXsKKyB2b2lkIGZvbygpIHRocm93cyBFeGNlcHRpb257CisgIHRocm93IDxyZWY+RXhjZXB0aW9uKCk7CisgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVzb2x2ZS9tZXRob2QvVGhyb3dXaXRob3V0TmV3Mi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXNvbHZlL21ldGhvZC9UaHJvd1dpdGhvdXROZXcyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzFiYWY3OQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVzb2x2ZS9tZXRob2QvVGhyb3dXaXRob3V0TmV3Mi5qYXZhCkBAIC0wLDAgKzEsNSBAQAorY2xhc3MgQXsKKyB2b2lkIGZvbygpIHRocm93cyBFeGNlcHRpb257CisgIHRocm93IDxyZWY+RXhjZXB0aW9uKCk7CisgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVzb2x2ZS9tZXRob2QvVmFsdWVPZi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXNvbHZlL21ldGhvZC9WYWx1ZU9mLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDI5MmI1OAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVzb2x2ZS9tZXRob2QvVmFsdWVPZi5qYXZhCkBAIC0wLDAgKzEsNSBAQAorY2xhc3MgQXsKKyB2b2lkIGZvbygpeworICBTdHJpbmcuPHJlZj52YWx1ZU9mKDEpOworIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3Jlc29sdmUvbWV0aG9kL2dlbmVyaWNzL0FtYmlndW91c0JveGluZy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXNvbHZlL21ldGhvZC9nZW5lcmljcy9BbWJpZ3VvdXNCb3hpbmcuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYjU2NWY3Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXNvbHZlL21ldGhvZC9nZW5lcmljcy9BbWJpZ3VvdXNCb3hpbmcuamF2YQpAQCAtMCwwICsxLDkgQEAKK3B1YmxpYyBjbGFzcyBBbWJpZ3VvdXMgeworICAgIHZvaWQgZihPYmplY3QgbzEsIE9iamVjdCBvMikge30KKyAgICB2b2lkIGYoaW50IG8xLCBpbnQgbzIpIHt9CisKKyAgICB2b2lkIGcoSW50ZWdlciBpKQorICAgIHsKKyAgICAgICAgPHJlZj5mKDEsIGkpOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3Jlc29sdmUvbWV0aG9kL2dlbmVyaWNzL0F1dG9ib3hpbmdBbmRXaWRlbmluZy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXNvbHZlL21ldGhvZC9nZW5lcmljcy9BdXRvYm94aW5nQW5kV2lkZW5pbmcuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZDBmZDVlCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXNvbHZlL21ldGhvZC9nZW5lcmljcy9BdXRvYm94aW5nQW5kV2lkZW5pbmcuamF2YQpAQCAtMCwwICsxLDExIEBACitwdWJsaWMgY2xhc3MgRm9vIHsKKworICAgIHB1YmxpYyB2b2lkIGZvbyhDb21wYXJhYmxlIGMpIHsKKyAgICB9CisKKworICAgIHsKKyAgICAgICA8cmVmPmZvbygxTCk7CisgICAgfQorCit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3Jlc29sdmUvbWV0aG9kL2dlbmVyaWNzL0NvbnN0cnVjdG9yRXhwbGljaXRQYXJhbXMuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVzb2x2ZS9tZXRob2QvZ2VuZXJpY3MvQ29uc3RydWN0b3JFeHBsaWNpdFBhcmFtcy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZkZTgxODUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3Jlc29sdmUvbWV0aG9kL2dlbmVyaWNzL0NvbnN0cnVjdG9yRXhwbGljaXRQYXJhbXMuamF2YQpAQCAtMCwwICsxLDkgQEAKK2NsYXNzIEZvbyB7CisgICAgPFQ+IEZvbyhUIHQpIHsKKworICAgIH0KKworICAgIHN0YXRpYyB7CisgICAgICAgIEZvbyBmID0gPFN0cmluZz5uZXcgPHJlZj5Gb28oKTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXNvbHZlL21ldGhvZC9nZW5lcmljcy9Db3ZhcmlhbnRSZXR1cm5UeXBlcy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXNvbHZlL21ldGhvZC9nZW5lcmljcy9Db3ZhcmlhbnRSZXR1cm5UeXBlcy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA5NWY5MDgKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3Jlc29sdmUvbWV0aG9kL2dlbmVyaWNzL0NvdmFyaWFudFJldHVyblR5cGVzLmphdmEKQEAgLTAsMCArMSwxMyBAQAoraW50ZXJmYWNlIEYgeworICAgIE9iamVjdCBvKCk7Cit9CitpbnRlcmZhY2UgRSBleHRlbmRzIEYgeworICAgIFN0cmluZyBvKCk7Cit9CitpbnRlcmZhY2UgQiBleHRlbmRzIEUsRiB7IH0KKworY2xhc3MgVXNlciB7CisgICAgdm9pZCB4KEIgYSkgeworICAgICAgICBTdHJpbmcgbyAgPSBhLjxyZWY+bygpOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3Jlc29sdmUvbWV0aG9kL2dlbmVyaWNzL0RlcGVuZGluZ1BhcmFtczEuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVzb2x2ZS9tZXRob2QvZ2VuZXJpY3MvRGVwZW5kaW5nUGFyYW1zMS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRmMDQ3NWMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3Jlc29sdmUvbWV0aG9kL2dlbmVyaWNzL0RlcGVuZGluZ1BhcmFtczEuamF2YQpAQCAtMCwwICsxLDYgQEAKKyBjbGFzcyBYPFQ+IHsKKyAgY2xhc3MgWFggZXh0ZW5kcyBYPFg+IHt9CisgIHZvaWQgPFQ+IGYoWDxUPiB4LCBUIHQpIHsKKyAgICAgIGYobmV3IFhYKCksIG5ldyBYKCkpOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXNvbHZlL21ldGhvZC9nZW5lcmljcy9EZXBlbmRpbmdQYXJhbXMyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3Jlc29sdmUvbWV0aG9kL2dlbmVyaWNzL0RlcGVuZGluZ1BhcmFtczIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jY2ZmMWZmNAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVzb2x2ZS9tZXRob2QvZ2VuZXJpY3MvRGVwZW5kaW5nUGFyYW1zMi5qYXZhCkBAIC0wLDAgKzEsMTQgQEAKK2ludGVyZmFjZSBSdW5uYWJsZXt9CitpbnRlcmZhY2UgQ2xhc3M8VD57fQorCitwdWJsaWMgY2xhc3MgRm9vIGltcGxlbWVudHMgUnVubmFibGV7CisgIHN0YXRpYyA8VD4gdm9pZCBmb28oQ2xhc3M8VD4gYUNsYXNzLCBUIHQpIHsgfQorCisgIENsYXNzPEZvbz4gZ2V0QygpeyByZXR1cm4gbmV3IENsYXNzPEZvbz4oKXt9O30KKyAgcHVibGljIHZvaWQgcnVuKCkgeworICB9CisKKyAgeworICAgIDxyZWY+Zm9vKG5ldyBDbGFzczxSdW5uYWJsZT4oKXt9LCB0aGlzKTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVzb2x2ZS9tZXRob2QvZ2VuZXJpY3MvRXhwbGljaXRQYXJhbXMxLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3Jlc29sdmUvbWV0aG9kL2dlbmVyaWNzL0V4cGxpY2l0UGFyYW1zMS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY5YzAyMmViCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXNvbHZlL21ldGhvZC9nZW5lcmljcy9FeHBsaWNpdFBhcmFtczEuamF2YQpAQCAtMCwwICsxLDggQEAKK2NsYXNzIEZvbyB7CisgICAgPFQ+IFQgZigpIHsKKyAgICB9CisKKyAgICB7CisgICAgICB0aGlzLjxTdHJpbmc+PHJlZj5mKCk7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVzb2x2ZS9tZXRob2QvZ2VuZXJpY3MvRXhwbGljaXRQYXJhbXMyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3Jlc29sdmUvbWV0aG9kL2dlbmVyaWNzL0V4cGxpY2l0UGFyYW1zMi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMzYTljZjYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3Jlc29sdmUvbWV0aG9kL2dlbmVyaWNzL0V4cGxpY2l0UGFyYW1zMi5qYXZhCkBAIC0wLDAgKzEsOCBAQAorY2xhc3MgRm9vIHsKKyAgICA8VD4gRm9vPFQ+IGYoKSB7CisgICAgfQorCisgICAgc3RhdGljIHsKKyAgICAgIG5ldyBGb28oKS48SW50ZWdlcj48cmVmPmYoKTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXNvbHZlL21ldGhvZC9nZW5lcmljcy9FeHRlbmRzMS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXNvbHZlL21ldGhvZC9nZW5lcmljcy9FeHRlbmRzMS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRkZjQ1YTgKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3Jlc29sdmUvbWV0aG9kL2dlbmVyaWNzL0V4dGVuZHMxLmphdmEKQEAgLTAsMCArMSwxNCBAQAorCitjbGFzcyBUZXN0eworICAgIGludGVyZmFjZSBNYXA8SywgVj57CisgICAgICAgIEsgcHV0KEsgaywgViB2KTsKKyAgICB9CisKKyAgICBjbGFzcyBIYXNoTWFwIGltcGxlbWVudHMgTWFwPEludGVnZXIsIEludGVnZXI+eworICAgIH0KKworICAgIHsKKyAgICAgICAgSGFzaE1hcCBtYXAgPSBuZXcgSGFzaE1hcCgpOworICAgICAgICBtYXAucHV0KG5ldyBJbnRlZ2VyKDEpLCBuZXcgSW50ZWdlcigxKSkuPHJlZj5ieXRlVmFsdWUoKTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXNvbHZlL21ldGhvZC9nZW5lcmljcy9GaWx0ZXJCb3hpbmcxLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3Jlc29sdmUvbWV0aG9kL2dlbmVyaWNzL0ZpbHRlckJveGluZzEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYjQ1MTdmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXNvbHZlL21ldGhvZC9nZW5lcmljcy9GaWx0ZXJCb3hpbmcxLmphdmEKQEAgLTAsMCArMSwxNCBAQAorY2xhc3MgVGVzdDEgeworICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtZXRob2QoT2JqZWN0IG8sIGJvb2xlYW4gYikgeworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIk9iamVjdCIpOworICAgIH0KKworICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtZXRob2QoU3RyaW5nIHMsIE9iamVjdCBvKSB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU3RyaW5nIik7CisgICAgfQorCisgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworICAgICAgICA8cmVmPm1ldGhvZCgiSGVsbG8sIFdvcmxkIiwgZmFsc2UpOworICAgIH0KKworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVzb2x2ZS9tZXRob2QvZ2VuZXJpY3MvRmlsdGVyRml4ZWRWc1ZhcmFyZ3MxLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3Jlc29sdmUvbWV0aG9kL2dlbmVyaWNzL0ZpbHRlckZpeGVkVnNWYXJhcmdzMS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU4NzViMmUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3Jlc29sdmUvbWV0aG9kL2dlbmVyaWNzL0ZpbHRlckZpeGVkVnNWYXJhcmdzMS5qYXZhCkBAIC0wLDAgKzEsMTQgQEAKKyBjbGFzcyBDYXN0IHsKKyAgICBwdWJsaWMgdm9pZCBmKE9iamVjdCBvMSwgU3RyaW5nIC4uLiBvKSB7CisKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBmKFN0cmluZyBzLCBJbnRlZ2VyIG8pIHsKKworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIGcoKSB7CisvLyBDb2RlIGlzIGdyZWVuIC0gYnV0IHdlIG5lZWQgYSBjYXN0IGhlcmUKKyAgICAgICAgPHJlZj5mKG51bGwsIG51bGwpOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3Jlc29sdmUvbWV0aG9kL2dlbmVyaWNzL0ZpbHRlckZpeGVkVnNWYXJhcmdzMi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXNvbHZlL21ldGhvZC9nZW5lcmljcy9GaWx0ZXJGaXhlZFZzVmFyYXJnczIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYjM4YTA5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXNvbHZlL21ldGhvZC9nZW5lcmljcy9GaWx0ZXJGaXhlZFZzVmFyYXJnczIuamF2YQpAQCAtMCwwICsxLDE0IEBACisgY2xhc3MgQ2FzdCB7CisgICAgcHVibGljIHZvaWQgZihTdHJpbmcgLi4uIG8pIHsKKworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIGYoSW50ZWdlciBvKSB7CisKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBnKCkgeworLy8gQ29kZSBpcyBncmVlbiAtIGJ1dCB3ZSBuZWVkIGEgY2FzdCBoZXJlCisgICAgICAgIDxyZWY+ZihudWxsKTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXNvbHZlL21ldGhvZC9nZW5lcmljcy9GaWx0ZXJGaXhlZFZzVmFyYXJnczMuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVzb2x2ZS9tZXRob2QvZ2VuZXJpY3MvRmlsdGVyRml4ZWRWc1ZhcmFyZ3MzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTE1NmY2OQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVzb2x2ZS9tZXRob2QvZ2VuZXJpY3MvRmlsdGVyRml4ZWRWc1ZhcmFyZ3MzLmphdmEKQEAgLTAsMCArMSwxNiBAQAorY2xhc3MgQSB7fQorY2xhc3MgQiBleHRlbmRzIEF7fQorY2xhc3MgQ2FzdCB7CisgICAgcHVibGljIHZvaWQgZihBLi4uIG8pIHsKKworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIGYoQSBvKSB7CisKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBnKCkgeworLy8gQ29kZSBpcyBncmVlbiAtIGJ1dCB3ZSBuZWVkIGEgY2FzdCBoZXJlCisgICAgICAgIDxyZWY+ZihudWxsKTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXNvbHZlL21ldGhvZC9nZW5lcmljcy9GaWx0ZXJGaXhlZFZzVmFyYXJnczQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVzb2x2ZS9tZXRob2QvZ2VuZXJpY3MvRmlsdGVyRml4ZWRWc1ZhcmFyZ3M0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODdkNTFmMAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVzb2x2ZS9tZXRob2QvZ2VuZXJpY3MvRmlsdGVyRml4ZWRWc1ZhcmFyZ3M0LmphdmEKQEAgLTAsMCArMSwxNiBAQAorY2xhc3MgQSB7fQorY2xhc3MgQiBleHRlbmRzIEF7fQorY2xhc3MgQ2FzdCB7CisgICAgcHVibGljIHZvaWQgZihBLi4uIG8pIHsKKworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIGYoQSBvKSB7CisKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBnKCkgeworLy8gQ2FzdHMgZW5zdXJlcyBjb3JyZWN0IGNhbmRpZGF0ZXMgZmlsdGVyaW5nCisgICAgICAgIDxyZWY+ZigoQSkgbnVsbCk7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVzb2x2ZS9tZXRob2QvZ2VuZXJpY3MvRmlsdGVyRml4ZWRWc1ZhcmFyZ3M1LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3Jlc29sdmUvbWV0aG9kL2dlbmVyaWNzL0ZpbHRlckZpeGVkVnNWYXJhcmdzNS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNjYjgzOWQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3Jlc29sdmUvbWV0aG9kL2dlbmVyaWNzL0ZpbHRlckZpeGVkVnNWYXJhcmdzNS5qYXZhCkBAIC0wLDAgKzEsMTggQEAKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworY2xhc3MgQSB7CisgICAgc3RhdGljIExpc3Q8U3RyaW5nPiBsaXN0T2YoU3RyaW5nLi4uIGVsZW1lbnRzKSB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiaW4gdmFyYXJncyIpOworICAgICAgICByZXR1cm4gbnVsbDsKKyAgICB9CisKKyAgICBzdGF0aWMgTGlzdDxTdHJpbmc+IGxpc3RPZihPYmplY3QgZWxlbWVudHMpIHsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJpbiBub252YXJhcmdzIik7CisgICAgICAgIHJldHVybiBudWxsOworICAgIH0KKworICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKyAgICAgICAgLy9yZXNvbHZlcyB0byBub252YXJhcmdzIG1ldGhvZAorICAgICAgICBMaXN0PFN0cmluZz4gdWhvaCA9ICAgPHJlZj5saXN0T2YoIiIpOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3Jlc29sdmUvbWV0aG9kL2dlbmVyaWNzL0ZpbHRlckZpeGVkVnNWYXJhcmdzNi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXNvbHZlL21ldGhvZC9nZW5lcmljcy9GaWx0ZXJGaXhlZFZzVmFyYXJnczYuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZDBlYjRmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXNvbHZlL21ldGhvZC9nZW5lcmljcy9GaWx0ZXJGaXhlZFZzVmFyYXJnczYuamF2YQpAQCAtMCwwICsxLDE5IEBACitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK2NsYXNzIEEgeworICAgIHN0YXRpYyA8VD4gTGlzdDxUPiBsaXN0T2YoVC4uLiBlbGVtZW50cykgeworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImluIHZhcmFyZ3MiKTsKKyAgICAgICAgcmV0dXJuIG51bGw7CisgICAgfQorCisgICAgc3RhdGljIDxUPiBMaXN0PFQ+IGxpc3RPZihUIGVsZW1lbnRzKSB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiaW4gbm9udmFyYXJncyIpOworICAgICAgICByZXR1cm4gbnVsbDsKKyAgICB9CisKKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisgICAgICAgIFN0cmluZ1tdIGFycmF5ID0geyJmb28iLCAiYmFyIn07CisgICAgICAgIC8vcmVzb2x2ZXMgdG8gdmFyYXJncyBtZXRob2QKKyAgICAgICAgTGlzdDxTdHJpbmc+IHVob2ggPSAgIDxyZWY+bGlzdE9mKGFycmF5KTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXNvbHZlL21ldGhvZC9nZW5lcmljcy9GaWx0ZXJGaXhlZFZzVmFyYXJnczcuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVzb2x2ZS9tZXRob2QvZ2VuZXJpY3MvRmlsdGVyRml4ZWRWc1ZhcmFyZ3M3LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzQ5MmM0NgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVzb2x2ZS9tZXRob2QvZ2VuZXJpY3MvRmlsdGVyRml4ZWRWc1ZhcmFyZ3M3LmphdmEKQEAgLTAsMCArMSwxOSBAQAoraW1wb3J0IGphdmEudXRpbC5MaXN0OworCisgY2xhc3MgQSB7CisgICAgIHN0YXRpYyA8VD4gTGlzdDxUW10+IGxpc3RPZihUW10uLi4gZWxlbWVudHMpIHsKKyAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiaW4gbXVsdGlwbGUiKTsKKyAgICAgICAgIHJldHVybiBBcnJheXMuYXNMaXN0KGVsZW1lbnRzKTsKKyAgICAgfQorCisgICAgIHN0YXRpYyA8VD4gTGlzdDxUW10+IGxpc3RPZihUW10gZWxlbWVudHMpIHsKKyAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiaW4gc2luZ2xlIik7CisgICAgICAgICByZXR1cm4gQ29sbGVjdGlvbnMuc2luZ2xldG9uTGlzdChlbGVtZW50cyk7CisgICAgIH0KKworICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisgICAgICAgICBTdHJpbmdbXSBhcnJheSA9IHsiZm9vIiwgImJhciJ9OworICAgICAgICAgLy9yZXNvbHZlcyB0byBub252YXJhcmdzIG1ldGhvZAorICAgICAgICAgTGlzdDxTdHJpbmdbXT4gbGlzdE9mU3RyaW5nID0gIDxyZWY+bGlzdE9mKGFycmF5KTsKKyAgICAgfQorIH0KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVzb2x2ZS9tZXRob2QvZ2VuZXJpY3MvRmlsdGVyRml4ZWRWc1ZhcmFyZ3M4LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3Jlc29sdmUvbWV0aG9kL2dlbmVyaWNzL0ZpbHRlckZpeGVkVnNWYXJhcmdzOC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUwOWU2ZmQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3Jlc29sdmUvbWV0aG9kL2dlbmVyaWNzL0ZpbHRlckZpeGVkVnNWYXJhcmdzOC5qYXZhCkBAIC0wLDAgKzEsOCBAQAorY2xhc3MgSEggeworICAgIEhIKE9iamVjdCBvMSwgT2JqZWN0IG8yKSB7CisgICAgICAgIDxyZWY+dGhpcyhvMSwgbzIpOworICAgIH0KKworCisgICAgSEgoT2JqZWN0Li4uIG9zKSB7fQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVzb2x2ZS9tZXRob2QvZ2VuZXJpY3MvRmlsdGVyRml4ZWRWc1ZhcmFyZ3M5LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3Jlc29sdmUvbWV0aG9kL2dlbmVyaWNzL0ZpbHRlckZpeGVkVnNWYXJhcmdzOS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkwZDgzZmEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3Jlc29sdmUvbWV0aG9kL2dlbmVyaWNzL0ZpbHRlckZpeGVkVnNWYXJhcmdzOS5qYXZhCkBAIC0wLDAgKzEsMTQgQEAKKyBjbGFzcyBQYXJlbnRPZiB7CisgICAgIHB1YmxpYyBzdGF0aWMgPFQgZXh0ZW5kcyBQc2lFbGVtZW50PiBUIGdldFBhcmVudE9mVHlwZShQc2lFbGVtZW50IGVsZW1lbnQsIENsYXNzPFQ+IGFDbGFzcywgYm9vbGVhbiBzdHJpY3QpIHsKKyAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgfQorICAgICBwdWJsaWMgc3RhdGljIDxUIGV4dGVuZHMgUHNpRWxlbWVudD4gVCBnZXRQYXJlbnRPZlR5cGUoUHNpRWxlbWVudCBlbGVtZW50LCBDbGFzczw/IGV4dGVuZHMgVD4uLi4gY2xhc3NlcykgeworICAgICAgIHJldHVybiBudWxsOworICAgICB9CisKKyAgICAgdm9pZCBmKFBzaUVsZW1lbnQgZSkgeworICAgICAgICAgPHJlZj5nZXRQYXJlbnRPZlR5cGUoZSwgUHNpRWxlbWVudC5jbGFzcywgUHNpRWxlbWVudC5jbGFzcyk7CisgICAgIH0KKworICAgICBzdGF0aWMgY2xhc3MgUHNpRWxlbWVudCB7fQorIH0KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVzb2x2ZS9tZXRob2QvZ2VuZXJpY3MvRmlsdGVyVmFyYXJnc1ZzVmFyYXJnczEuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVzb2x2ZS9tZXRob2QvZ2VuZXJpY3MvRmlsdGVyVmFyYXJnc1ZzVmFyYXJnczEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42N2M4NTRiCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXNvbHZlL21ldGhvZC9nZW5lcmljcy9GaWx0ZXJWYXJhcmdzVnNWYXJhcmdzMS5qYXZhCkBAIC0wLDAgKzEsMTUgQEAKK2NsYXNzIFhZIHsKKyAgICBwdWJsaWMgc3RhdGljIE9iamVjdCBnZXRMb2NhbGl6ZWRPYmplY3QoT2JqZWN0Li4uIG9iamVjdHMpIHsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJpbiBmaXJzdCIpOworICAgICAgICByZXR1cm4gbnVsbDsKKyAgICB9CisKKyAgICBwdWJsaWMgc3RhdGljIE9iamVjdCBnZXRMb2NhbGl6ZWRPYmplY3QoSW50ZWdlciBpLCBTdHJpbmcgc3RyaW5nLCBPYmplY3QuLi4gb2JqZWN0cykgeworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImluIHNlY29uZCIpOworICAgICAgICByZXR1cm4gbnVsbDsKKyAgICB9CisKKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisgICAgICAgICAgICA8cmVmPmdldExvY2FsaXplZE9iamVjdChudWxsLCAgICIiKTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXNvbHZlL21ldGhvZC9nZW5lcmljcy9GaWx0ZXJWYXJhcmdzVnNWYXJhcmdzMi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXNvbHZlL21ldGhvZC9nZW5lcmljcy9GaWx0ZXJWYXJhcmdzVnNWYXJhcmdzMi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBjMTlhMmEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3Jlc29sdmUvbWV0aG9kL2dlbmVyaWNzL0ZpbHRlclZhcmFyZ3NWc1ZhcmFyZ3MyLmphdmEKQEAgLTAsMCArMSw5IEBACitjbGFzcyBYWSB7CisgICAgcHJpdmF0ZSB2b2lkIGYoYnl0ZS4uLiBicykge30KKworICAgIHByaXZhdGUgdm9pZCBmKGludC4uLiBpcykge30KKworICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKyAgICAgICAgICAgIDxyZWY+ZigoYnl0ZSkwLCAoYnl0ZSkxKTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXNvbHZlL21ldGhvZC9nZW5lcmljcy9GaWx0ZXJWYXJhcmdzVnNWYXJhcmdzMy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXNvbHZlL21ldGhvZC9nZW5lcmljcy9GaWx0ZXJWYXJhcmdzVnNWYXJhcmdzMy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUzMDY2ZmIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3Jlc29sdmUvbWV0aG9kL2dlbmVyaWNzL0ZpbHRlclZhcmFyZ3NWc1ZhcmFyZ3MzLmphdmEKQEAgLTAsMCArMSw5IEBACitjbGFzcyBYWSB7CisgICAgcHJpdmF0ZSB2b2lkIGYoT2JqZWN0Li4uIGJzKSB7fQorCisgICAgcHJpdmF0ZSB2b2lkIGYoaW50Li4uIGlzKSB7fQorCisgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworICAgICAgICAgICAgPHJlZj5mKCk7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVzb2x2ZS9tZXRob2QvZ2VuZXJpY3MvRmlsdGVyVmFyYXJnc1ZzVmFyYXJnczQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVzb2x2ZS9tZXRob2QvZ2VuZXJpY3MvRmlsdGVyVmFyYXJnc1ZzVmFyYXJnczQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MDBmYjNkCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXNvbHZlL21ldGhvZC9nZW5lcmljcy9GaWx0ZXJWYXJhcmdzVnNWYXJhcmdzNC5qYXZhCkBAIC0wLDAgKzEsOSBAQAorY2xhc3MgWFkgeworICAgIHByaXZhdGUgdm9pZCBmKFN0cmluZy4uLiBicykge30KKworICAgIHByaXZhdGUgdm9pZCBmKGludC4uLiBpcykge30KKworICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKyAgICAgICAgICAgIDxyZWY+ZigpOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3Jlc29sdmUvbWV0aG9kL2dlbmVyaWNzL0dlbmVyaWNDbGFzczEuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVzb2x2ZS9tZXRob2QvZ2VuZXJpY3MvR2VuZXJpY0NsYXNzMS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQyMTgwM2IKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3Jlc29sdmUvbWV0aG9kL2dlbmVyaWNzL0dlbmVyaWNDbGFzczEuamF2YQpAQCAtMCwwICsxLDkgQEAKK2ludGVyZmFjZSBGb28gZXh0ZW5kcyBDb21wYXJhYmxlIHsKKyAgICB2b2lkIGNvbXBhcmVUbyhGb28gZm9vKTsKK30KKworY2xhc3MgVXNlciB7CisgICAgdm9pZCBmb28gKEZvbyBmb28pIHsKKyAgICAgICAgZm9vLjxyZWY+Y29tcGFyZVRvKGZvbyk7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVzb2x2ZS9tZXRob2QvZ2VuZXJpY3MvR2VuZXJpY0NsYXNzMi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXNvbHZlL21ldGhvZC9nZW5lcmljcy9HZW5lcmljQ2xhc3MyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjI5Nzc4NwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVzb2x2ZS9tZXRob2QvZ2VuZXJpY3MvR2VuZXJpY0NsYXNzMi5qYXZhCkBAIC0wLDAgKzEsMTIgQEAKK2ltcG9ydCBqYXZhLnV0aWwuKjsKKworY2xhc3MgRm9vPFQ+IHsKKyAgICB2b2lkIGYoQXJyYXlMaXN0PFQ+IHQpIHt9CisgICAgPFY+IHZvaWQgZihMaXN0PFY+IHQpIHt9Cit9CisKK2NsYXNzIFVzZXIgeworICAgIHZvaWQgZm9vIChGb288U3RyaW5nPiBmb28pIHsKKyAgICAgICBmb28uPHJlZj5mKG5ldyBBcnJheUxpc3Q8U3RyaW5nPigpKTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXNvbHZlL21ldGhvZC9nZW5lcmljcy9HZW5lcmljTWV0aG9kczEuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVzb2x2ZS9tZXRob2QvZ2VuZXJpY3MvR2VuZXJpY01ldGhvZHMxLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjMyYzI0MwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVzb2x2ZS9tZXRob2QvZ2VuZXJpY3MvR2VuZXJpY01ldGhvZHMxLmphdmEKQEAgLTAsMCArMSwxMyBAQAoraW1wb3J0IGphdmEudXRpbC4qOworCitwdWJsaWMgY2xhc3MgQUFBIHsKKyAgICA8VD4gdm9pZCBmKGphdmEudXRpbC5MaXN0PFQ+IHQpIHsKKyAgICB9CisKKyAgICB2b2lkIGYoQ29sbGVjdGlvbjxTdHJpbmc+IHMpIHsKKyAgICB9CisKKyAgICB2b2lkIHkoTGlzdDxTdHJpbmc+IHN0cmluZ3MpIHsKKyAgICAgICAgPHJlZj5mKHN0cmluZ3MpOworICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVzb2x2ZS9tZXRob2QvZ2VuZXJpY3MvR2VuZXJpY01ldGhvZHMyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3Jlc29sdmUvbWV0aG9kL2dlbmVyaWNzL0dlbmVyaWNNZXRob2RzMi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgzOTNhYTEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3Jlc29sdmUvbWV0aG9kL2dlbmVyaWNzL0dlbmVyaWNNZXRob2RzMi5qYXZhCkBAIC0wLDAgKzEsMTMgQEAKK2ltcG9ydCBqYXZhLnV0aWwuKjsKKworcHVibGljIGNsYXNzIEFBQSB7CisgICAgPFQ+IHZvaWQgZihDb2xsZWN0aW9uPFQ+IHQpIHsKKyAgICB9CisKKyAgICB2b2lkIGYoamF2YS51dGlsLkxpc3Q8U3RyaW5nPiBzKSB7CisgICAgfQorCisgICAgdm9pZCB5KExpc3Q8U3RyaW5nPiBzdHJpbmdzKSB7CisgICAgICAgIDxyZWY+ZihzdHJpbmdzKTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3Jlc29sdmUvbWV0aG9kL2dlbmVyaWNzL0dlbmVyaWNNZXRob2RzMy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXNvbHZlL21ldGhvZC9nZW5lcmljcy9HZW5lcmljTWV0aG9kczMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZWYwMTAyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXNvbHZlL21ldGhvZC9nZW5lcmljcy9HZW5lcmljTWV0aG9kczMuamF2YQpAQCAtMCwwICsxLDExIEBACitwdWJsaWMgY2xhc3MgQUFBIHsKKyAgICA8VD4gdm9pZCBnKFQgdCkgeworICAgIH0KKworICAgIHZvaWQgZyhTdHJpbmcgcykgeworICAgIH0KKworICAgIHsKKyAgICAgICAgPHJlZj5nKCIiKTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3Jlc29sdmUvbWV0aG9kL2dlbmVyaWNzL0dlbmVyaWNNZXRob2RzNC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXNvbHZlL21ldGhvZC9nZW5lcmljcy9HZW5lcmljTWV0aG9kczQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZWU2Y2JmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXNvbHZlL21ldGhvZC9nZW5lcmljcy9HZW5lcmljTWV0aG9kczQuamF2YQpAQCAtMCwwICsxLDExIEBACitwdWJsaWMgY2xhc3MgQUFBIHsKKyAgICA8VD4gdm9pZCBnKFQuLi4gdCkgeworICAgIH0KKworICAgIHZvaWQgZyhTdHJpbmcuLi4gcykgeworICAgIH0KKworICAgIHsKKyAgICAgICAgPHJlZj5nKCIiKTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3Jlc29sdmUvbWV0aG9kL2dlbmVyaWNzL0dlbmVyaWNNZXRob2RzNS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXNvbHZlL21ldGhvZC9nZW5lcmljcy9HZW5lcmljTWV0aG9kczUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZWM4NmJlCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXNvbHZlL21ldGhvZC9nZW5lcmljcy9HZW5lcmljTWV0aG9kczUuamF2YQpAQCAtMCwwICsxLDE5IEBACitjbGFzcyBLZXk8VD4geyBUIHQ7IH0KKworY2xhc3MgV0tleTxXLCBUPiBleHRlbmRzIEtleTxUPiB7IFcgdzsgfQorCitjbGFzcyBJdGVtcyB7CisgICAgPFQ+IHZvaWQgYWRkSXRlbShLZXk8VD4ga2V5LCBUIHZhbHVlKSB7fQorCisgICAgPFQsIFc+IHZvaWQgYWRkSXRlbShXS2V5PFcsIFQ+IGtleSwgVCB2YWx1ZSkge30KK30KKworY2xhc3MgSUJ1ZyB7CisgICAgcHVibGljIElCdWcoKSB7CisgICAgICAgIEl0ZW1zIGl0ZW1zID0gbmV3IEl0ZW1zKCk7CisKKyAgICAgICAgV0tleTxPYmplY3QsIFN0cmluZz4gc2sgPSBuZXcgV0tleTxPYmplY3QsIFN0cmluZz4oKTsKKworICAgICAgICBpdGVtcy48cmVmPmFkZEl0ZW0oc2ssICAiIik7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVzb2x2ZS9tZXRob2QvZ2VuZXJpY3MvR2VuZXJpY01ldGhvZHM2LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3Jlc29sdmUvbWV0aG9kL2dlbmVyaWNzL0dlbmVyaWNNZXRob2RzNi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNiOTdiYzgKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3Jlc29sdmUvbWV0aG9kL2dlbmVyaWNzL0dlbmVyaWNNZXRob2RzNi5qYXZhCkBAIC0wLDAgKzEsMTggQEAKK2NsYXNzIENvbnRhaW5lclV0aWwgeworICAgIGludGVyZmFjZSBDb25kaXRpb248VD4geworICAgICAgICBib29sZWFuIHZhbHVlKFQgb2JqZWN0KTsKKyAgICB9CisKKyAgICBwdWJsaWMgc3RhdGljIDxUPiBUIGZpbmQoSXRlcmFibGU8PyBleHRlbmRzIFQ+IGl0ZXJhYmxlLCBmaW5hbCBUIGVxdWFsVG8pIHsKKyAgICAgICAgcmV0dXJuIDxyZWY+ZmluZChpdGVyYWJsZSwgbmV3IENvbmRpdGlvbjxUPigpIHsKKyAgICAgICAgICAgIHB1YmxpYyBib29sZWFuIHZhbHVlKGZpbmFsIFQgb2JqZWN0KSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGVxdWFsVG8gPT0gb2JqZWN0IHx8IGVxdWFsVG8uZXF1YWxzKG9iamVjdCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0pOworICAgIH0KKworICAgIHB1YmxpYyBzdGF0aWMgPFQ+IFQgZmluZChJdGVyYWJsZTw/IGV4dGVuZHMgVD4gaXRlcmFibGUsIENvbmRpdGlvbjxUPiBjb25kaXRpb24pIHsKKyAgICAgICAgcmV0dXJuIG51bGw7CisgICAgfQorCit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3Jlc29sdmUvbWV0aG9kL2dlbmVyaWNzL0dlbmVyaWNzQW5kVmFyYXJnc05vQ29uZmxpY3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVzb2x2ZS9tZXRob2QvZ2VuZXJpY3MvR2VuZXJpY3NBbmRWYXJhcmdzTm9Db25mbGljdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk1MTNkMzgKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3Jlc29sdmUvbWV0aG9kL2dlbmVyaWNzL0dlbmVyaWNzQW5kVmFyYXJnc05vQ29uZmxpY3QuamF2YQpAQCAtMCwwICsxLDEyIEBACitjbGFzcyBUZXN0IHsKKworICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKyAgICAgICA8cmVmPm1ldGhvZCgiYSIsICJiIiwgImMiKTsKKyAgICB9CisKKyAgICBwdWJsaWMgc3RhdGljIDxUPiBUIG1ldGhvZChULi4uIGEpIHsKKyAgICAgICAgcmV0dXJuIG51bGw7CisgICAgfQorCisgICAgcHVibGljIHN0YXRpYyB2b2lkIG1ldGhvZChTdHJpbmcuLi4gYSkge30KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3Jlc29sdmUvbWV0aG9kL2dlbmVyaWNzL0dldENsYXNzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3Jlc29sdmUvbWV0aG9kL2dlbmVyaWNzL0dldENsYXNzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzAxODQ5NDY5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXNvbHZlL21ldGhvZC9nZW5lcmljcy9HZXRDbGFzcy5qYXZhCkBAIC0wLDAgKzEsNSBAQAorY2xhc3MgVGVzdCB7CisgICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKyAgICAgICAgInNzcyIuPHJlZj5nZXRDbGFzcygpOworICAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXNvbHZlL21ldGhvZC9nZW5lcmljcy9IaWRpbmdTdXBlclByaXZhdGUuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVzb2x2ZS9tZXRob2QvZ2VuZXJpY3MvSGlkaW5nU3VwZXJQcml2YXRlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWUzYWExZgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVzb2x2ZS9tZXRob2QvZ2VuZXJpY3MvSGlkaW5nU3VwZXJQcml2YXRlLmphdmEKQEAgLTAsMCArMSwxOCBAQAorIHB1YmxpYyBhYnN0cmFjdCBjbGFzcyBCYXNlVGVzdAorIHsKKyAgICAgcHJpdmF0ZSBPYmplY3QgZigpIHsKKyAgICAgICAgIHJldHVybiBudWxsOworICAgICB9CisKKyB9CisgY2xhc3MgUyB7CisgICAgIHByaXZhdGUgT2JqZWN0IGYoKSB7CisgICAgICAgICBuZXcgQmFzZVRlc3QoKSB7CisgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICA8cmVmPmYoKTsgCisgICAgICAgICAgICAgfQorICAgICAgICAgfTsKKworICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgIH0KKyB9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3Jlc29sdmUvbWV0aG9kL2dlbmVyaWNzL0luaGVyaXRhbmNlMS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXNvbHZlL21ldGhvZC9nZW5lcmljcy9Jbmhlcml0YW5jZTEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNWI0ZTRiCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXNvbHZlL21ldGhvZC9nZW5lcmljcy9Jbmhlcml0YW5jZTEuamF2YQpAQCAtMCwwICsxLDE2IEBACisKK2NsYXNzIFRlc3R7CisKKyAgICBjbGFzcyBBIDxUPnsKKyAgICAgICAgQjxUPiB4OworICAgICAgICBjbGFzcyBCIDxaPnsKKyAgICAgICAgICAgIHB1YmxpYyB2b2lkIHB1dChUIHgsIFogeSl7fQorICAgICAgICAgICAgcHVibGljIFogZ2V0Wigpe30KKyAgICAgICAgICAgIHB1YmxpYyBUIGdldFQoKXt9CisgICAgICAgIH0KKyAgICB9CisKKyAgICB7CisgICAgICAgIG5ldyBBPEludGVnZXI+KCkueC5nZXRUKCkuPHJlZj5ieXRlVmFsdWUoKTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXNvbHZlL21ldGhvZC9nZW5lcmljcy9Jbmhlcml0YW5jZTIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVzb2x2ZS9tZXRob2QvZ2VuZXJpY3MvSW5oZXJpdGFuY2UyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTc0YjFmZAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVzb2x2ZS9tZXRob2QvZ2VuZXJpY3MvSW5oZXJpdGFuY2UyLmphdmEKQEAgLTAsMCArMSwxNiBAQAorCitjbGFzcyBUZXN0eworCisgICAgY2xhc3MgQSA8VD57CisgICAgICAgIEIgeDsKKyAgICAgICAgY2xhc3MgQiA8Wj57CisgICAgICAgICAgICBwdWJsaWMgdm9pZCBwdXQoVCB4LCBaIHkpe30KKyAgICAgICAgICAgIHB1YmxpYyBaIGdldFooKXt9CisgICAgICAgICAgICBwdWJsaWMgVCBnZXRUKCl7fQorICAgICAgICB9CisgICAgfQorCisgICAgeworICAgICAgICBuZXcgQTxJbnRlZ2VyPigpLm5ldyBCPEJvb2xlYW4+KCkuZ2V0WigpLjxyZWY+Ym9vbGVhblZhbHVlKCk7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVzb2x2ZS9tZXRob2QvZ2VuZXJpY3MvSW5oZXJpdGFuY2UzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3Jlc29sdmUvbWV0aG9kL2dlbmVyaWNzL0luaGVyaXRhbmNlMy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA4YWM2NWYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3Jlc29sdmUvbWV0aG9kL2dlbmVyaWNzL0luaGVyaXRhbmNlMy5qYXZhCkBAIC0wLDAgKzEsMTYgQEAKKworY2xhc3MgVGVzdHsKKworICAgIGNsYXNzIEEgPFQ+eworICAgICAgICBCIHg7CisgICAgICAgIGNsYXNzIEIgPFo+eworICAgICAgICAgICAgcHVibGljIHZvaWQgcHV0KFQgeCwgWiB5KXt9CisgICAgICAgICAgICBwdWJsaWMgWiBnZXRaKCl7fQorICAgICAgICAgICAgcHVibGljIFQgZ2V0VCgpe30KKyAgICAgICAgfQorICAgIH0KKworICAgIHsKKyAgICAgICAgbmV3IEE8SW50ZWdlcj4oKS5uZXcgQjxCb29sZWFuPigpLmdldFQoKS48cmVmPmJ5dGVWYWx1ZSgpOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3Jlc29sdmUvbWV0aG9kL2dlbmVyaWNzL0luaGVyaXRhbmNlNC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXNvbHZlL21ldGhvZC9nZW5lcmljcy9Jbmhlcml0YW5jZTQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYjgxY2E5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXNvbHZlL21ldGhvZC9nZW5lcmljcy9Jbmhlcml0YW5jZTQuamF2YQpAQCAtMCwwICsxLDE4IEBACisKK2NsYXNzIFRlc3R7CisKKyAgICBjbGFzcyBBIDxUPnsKKyAgICAgICAgQiB4OworICAgICAgICBjbGFzcyBCIDxaPnsKKyAgICAgICAgICAgIHB1YmxpYyB2b2lkIHB1dChUIHgsIFogeSl7fQorICAgICAgICAgICAgcHVibGljIFogZ2V0Wigpe30KKyAgICAgICAgICAgIHB1YmxpYyBUIGdldFQoKXt9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBjbGFzcyBDIGV4dGVuZHMgQTxJbnRlZ2VyPnt9CisKKyAgICB7CisgICAgICAgIG5ldyBDKCkubmV3IEI8Qm9vbGVhbj4oKS5nZXRUKCkuPHJlZj5ieXRlVmFsdWUoKTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXNvbHZlL21ldGhvZC9nZW5lcmljcy9NZXJnZTEuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVzb2x2ZS9tZXRob2QvZ2VuZXJpY3MvTWVyZ2UxLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTAyOWMzMAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVzb2x2ZS9tZXRob2QvZ2VuZXJpY3MvTWVyZ2UxLmphdmEKQEAgLTAsMCArMSwxNCBAQAorY2xhc3MgVGVzdCA8VD57CisgICAgeworICAgICAgICBUZXN0PFRlc3Q8VGVzdD4+IHRlc3QgPSBuZXcgVGVzdDxUZXN0PigpOworICAgICAgICB7CisgICAgICAgICAgICAgdGVzdC5wdXQoIiIpOworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHRlc3QuZ2V0KCkuZ2V0KCkuZ2V0KCkuPHJlZj5nZXQoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIFQgZ2V0KCl7IHJldHVybiBudWxsOyB9CisgICAgdm9pZCBwdXQoVCB4KXt9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3Jlc29sdmUvbWV0aG9kL2dlbmVyaWNzL01vcmVTcGVjaWZpY1NhbWVFcmFzdXJlLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3Jlc29sdmUvbWV0aG9kL2dlbmVyaWNzL01vcmVTcGVjaWZpY1NhbWVFcmFzdXJlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzE2OTRiMQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVzb2x2ZS9tZXRob2QvZ2VuZXJpY3MvTW9yZVNwZWNpZmljU2FtZUVyYXN1cmUuamF2YQpAQCAtMCwwICsxLDIwIEBACitpbXBvcnQgamF2YS51dGlsLio7CisKK2NsYXNzIFNTUyB7CisgICAgcHVibGljIDxUPiB2b2lkIHgoTGlzdDxUPiBtYXRjaGVyKSB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiPFQ+Iik7CisgICAgfQorCisgICAgcHVibGljIGludCB4KExpc3Q8TG9uZz4gbWF0Y2hlcikgeworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImxvbmciKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgcHVibGljIHN0YXRpYyA8VD4gTGlzdDxUPiBhbnkoQ2xhc3M8VD4gdHlwZSkgeworICAgICAgICByZXR1cm4gbnVsbDsKKyAgICB9CisgICAgdm9pZCBmKCkgeworICAgICAgICA8cmVmPngoYW55KExvbmcuY2xhc3MpKTsKKyAgICB9CisKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVzb2x2ZS9tZXRob2QvZ2VuZXJpY3MvTmVzdGVkVHlwZVBhcmFtcy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXNvbHZlL21ldGhvZC9nZW5lcmljcy9OZXN0ZWRUeXBlUGFyYW1zLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjdlYzdiZAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVzb2x2ZS9tZXRob2QvZ2VuZXJpY3MvTmVzdGVkVHlwZVBhcmFtcy5qYXZhCkBAIC0wLDAgKzEsMjIgQEAKK2ludGVyZmFjZSBUZXN0SW50ZXJmYWNlIHsKKworICAgIDxFIGV4dGVuZHMgRW51bTxFPj4gdm9pZCBkb1N0dWZmKEUgdGhpbmcpOworfQorCitjbGFzcyAgVGVzdEltcGwgaW1wbGVtZW50cyBUZXN0SW50ZXJmYWNlIHsKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgPEkgZXh0ZW5kcyBFbnVtPEk+PiB2b2lkIGRvU3R1ZmYoSSB0aGluZyl7CisKKyAgICB9Cit9CisKK2VudW0gVGVzdEVudW0geworICAgIFRISU5HCit9CisKK2NsYXNzIFRlc3R4IHsKKyAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKXsKKyAgICAgICAgVGVzdEltcGwgaW1wbCA9IG5ldyBUZXN0SW1wbCgpOworICAgICAgICBpbXBsLjxyZWY+ZG9TdHVmZihUZXN0RW51bS5USElORyk7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXNvbHZlL21ldGhvZC9nZW5lcmljcy9QcmVmZXJBcnJheVR5cGVUb09iamVjdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXNvbHZlL21ldGhvZC9nZW5lcmljcy9QcmVmZXJBcnJheVR5cGVUb09iamVjdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc0YTg0NGYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3Jlc29sdmUvbWV0aG9kL2dlbmVyaWNzL1ByZWZlckFycmF5VHlwZVRvT2JqZWN0LmphdmEKQEAgLTAsMCArMSwyMSBAQAoraW1wb3J0IGphdmEudXRpbC5BcnJheXM7CisKK3B1YmxpYyBjbGFzcyBNeUNsYXNzCit7CisgIHB1YmxpYyBzdGF0aWMgPFQ+IHZvaWQgcHJvY2VzcyhUIG9iaikKKyAgeworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUHJvY2Vzc2luZyBvYmplY3Q6ICIgKyBvYmopOworICB9CisKKyAgcHVibGljIHN0YXRpYyA8VD4gdm9pZCBwcm9jZXNzKFRbXSBhcnIpCisgIHsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlByb2Nlc3NpbmcgYXJyYXk6ICIgKyBBcnJheXMudG9TdHJpbmcoYXJyKSk7CisgIH0KKworICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKQorICB7CisgICAgU3RyaW5nW10gbXlBcnJheSA9IG5ldyBTdHJpbmdbXSB7ICJhIiwgImIiLCAiYyIgfTsKKworICAgIHByb2M8cmVmPmVzcyhteUFycmF5KTsgIC8vIEN0ci1MZWZ0LUNsaWNrIG9uICJwcm9jZXNzIiB0YWtlcyBtZSB0byB0aGUgd3JvbmcgbWV0aG9kISEhCisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3Jlc29sdmUvbWV0aG9kL2dlbmVyaWNzL1Jhd0luaGVyaXRhbmNlQ29uZmxpY3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVzb2x2ZS9tZXRob2QvZ2VuZXJpY3MvUmF3SW5oZXJpdGFuY2VDb25mbGljdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhhNmRlMDQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3Jlc29sdmUvbWV0aG9kL2dlbmVyaWNzL1Jhd0luaGVyaXRhbmNlQ29uZmxpY3QuamF2YQpAQCAtMCwwICsxLDEwIEBACitjbGFzcyBYWCB7CisgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGZvbyhQcm9wZXJ0aWVzIHAsIFN0cmluZyBzLCBib29sZWFuIGIpe3JldHVybiBudWxsO30KKyAgcHVibGljIHN0YXRpYyBTdHJpbmcgZm9vKE1hcCBwLCBTdHJpbmcgcywgYm9vbGVhbiBiKXtyZXR1cm4gbnVsbDt9Cit9CitjbGFzcyBVVSB7CisgIHZvaWQgYmFyKCkgeworICAgICAgUHJvcGVydGllcyBwID0gbmV3IFByb3BlcnRpZXMoKTsKKyAgICAgIFhYLmZvPHJlZj5vKHAsICJ4eHgiLCBmYWxzZSk7CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVzb2x2ZS9tZXRob2QvZ2VuZXJpY3MvUmF3TWV0aG9kMS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXNvbHZlL21ldGhvZC9nZW5lcmljcy9SYXdNZXRob2QxLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjIxYjUzNwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVzb2x2ZS9tZXRob2QvZ2VuZXJpY3MvUmF3TWV0aG9kMS5qYXZhCkBAIC0wLDAgKzEsOCBAQAorY2xhc3MgQXsKKyBjbGFzcyBCPFQ+e30KKyA8VD4gdm9pZCBmb28oVCBhLCBCPFQ+IGIpe30KKworIHsKKyAgPHJlZj5mb28oIiIsIG5ldyBCKCkpOworIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3Jlc29sdmUvbWV0aG9kL2dlbmVyaWNzL1Jhd1ZzR2VuZXJpY0NvbmZsaWN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3Jlc29sdmUvbWV0aG9kL2dlbmVyaWNzL1Jhd1ZzR2VuZXJpY0NvbmZsaWN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzM5NjU5ZQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVzb2x2ZS9tZXRob2QvZ2VuZXJpY3MvUmF3VnNHZW5lcmljQ29uZmxpY3QuamF2YQpAQCAtMCwwICsxLDE2IEBACitjbGFzcyBUZXN0Q2xhc3NUIHsKKyAgICBzdGF0aWMgeworICAgICAgICBCLjxyZWY+Zm9vKFRlc3RDbGFzc1QuY2xhc3MpOworICAgIH0KKworICAgIHB1YmxpYyBzdGF0aWMgY2xhc3MgQSB7CisgICAgICAgIHB1YmxpYyBzdGF0aWMgQSBmb28oQ2xhc3M8Pz4gdHlwZSkgeworICAgICAgICAgICAgcmV0dXJuIG5ldyBBKCk7CisgICAgICAgIH0KKyAgICB9CisgICAgcHVibGljIHN0YXRpYyBjbGFzcyBCIGV4dGVuZHMgQSB7CisgICAgICAgIHB1YmxpYyBzdGF0aWMgQiBmb28oQ2xhc3MgdHlwZSkgeworICAgICAgICAgICAgcmV0dXJuIG5ldyBCKCk7CisgICAgICAgIH0KKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXNvbHZlL21ldGhvZC9nZW5lcmljcy9SYXdWc0dlbmVyaWNDb25mbGljdEluQ2FzZU9mT3ZlcnJpZGUuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVzb2x2ZS9tZXRob2QvZ2VuZXJpY3MvUmF3VnNHZW5lcmljQ29uZmxpY3RJbkNhc2VPZk92ZXJyaWRlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDdlZWQ4NwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVzb2x2ZS9tZXRob2QvZ2VuZXJpY3MvUmF3VnNHZW5lcmljQ29uZmxpY3RJbkNhc2VPZk92ZXJyaWRlLmphdmEKQEAgLTAsMCArMSwxNyBAQAorY2xhc3MgVGVzdENsYXNzVCB7CisgICAgc3RhdGljIHsKKyAgICAgICAgbmV3IEIoKS48cmVmPmZvbyhUZXN0Q2xhc3NULmNsYXNzKTsKKyAgICB9CisKKyAgICBwdWJsaWMgc3RhdGljIGNsYXNzIEEgeworICAgICAgICBwdWJsaWMgQSBmb28oQ2xhc3M8Pz4gdHlwZSkgeworICAgICAgICAgICAgcmV0dXJuIG5ldyBBKCk7CisgICAgICAgIH0KKyAgICB9CisgICAgcHVibGljIHN0YXRpYyBjbGFzcyBCIGV4dGVuZHMgQSB7CisgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIEIgZm9vKENsYXNzIHR5cGUpIHsKKyAgICAgICAgICAgIHJldHVybiBuZXcgQigpOworICAgICAgICB9CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVzb2x2ZS9tZXRob2QvZ2VuZXJpY3MvUmF3VnNHZW5lcmljQ29uZmxpY3RJbkNhc2VPZk92ZXJyaWRlMi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXNvbHZlL21ldGhvZC9nZW5lcmljcy9SYXdWc0dlbmVyaWNDb25mbGljdEluQ2FzZU9mT3ZlcnJpZGUyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDkyYWI5YQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVzb2x2ZS9tZXRob2QvZ2VuZXJpY3MvUmF3VnNHZW5lcmljQ29uZmxpY3RJbkNhc2VPZk92ZXJyaWRlMi5qYXZhCkBAIC0wLDAgKzEsMjEgQEAKK2ltcG9ydCBqYXZhLnV0aWwuKjsKKworY2xhc3MgQyB7CisgIHB1YmxpYyBzdGF0aWMgaW50ZXJmYWNlIEdlbmVyaWNBZ25vc3RpY1Byb2Nlc3NvciB7CisgICAgdm9pZCBwcm9jZXNzTWFwKE1hcCBtYXApOworICB9CisKKyAgcHVibGljIHN0YXRpYyBpbnRlcmZhY2UgR2VuZXJpY0F3YXJlUHJvY2Vzc29yIHsKKyAgICB2b2lkIHByb2Nlc3NNYXAoTWFwPFN0cmluZywgU3RyaW5nPiBtYXApOworICB9CisKKyAgcHVibGljIHN0YXRpYyBjbGFzcyBUZXN0UHJvY2Vzc29yIGltcGxlbWVudHMgR2VuZXJpY0F3YXJlUHJvY2Vzc29yLCBHZW5lcmljQWdub3N0aWNQcm9jZXNzb3IgeworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyB2b2lkIHByb2Nlc3NNYXAoTWFwIG1hcCkgeyB9CisgIH0KKworICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisgICAgZmluYWwgVGVzdFByb2Nlc3NvciB0ZXN0UHJvY2Vzc29yID0gbmV3IFRlc3RQcm9jZXNzb3IoKTsKKyAgICB0ZXN0UHJvY2Vzc29yLjxyZWY+cHJvY2Vzc01hcChuZXcgSGFzaE1hcCgpKTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXNvbHZlL21ldGhvZC9nZW5lcmljcy9TT0UuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVzb2x2ZS9tZXRob2QvZ2VuZXJpY3MvU09FLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWQzMDRmZgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVzb2x2ZS9tZXRob2QvZ2VuZXJpY3MvU09FLmphdmEKQEAgLTAsMCArMSw2IEBACitpbXBvcnQgamF2YS51dGlsLkNvbXBhcmF0b3I7CisKK2Fic3RyYWN0IGNsYXNzIFo8VCBleHRlbmRzIFouTmFtZVJlZj4gaW1wbGVtZW50cyBDb21wYXJhdG9yPFQ+IHsKKyAgIHN0YXRpYyBhYnN0cmFjdCBjbGFzcyBOYW1lUmVmIGltcGxlbWVudHMgamF2YS5sYW5nLkNvbXBhcmFibGU8VC48cmVmPk5hbWVSZWY+IHsKKyAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVzb2x2ZS9tZXRob2QvZ2VuZXJpY3MvU3RhdGljSW1wb3J0Q29uZmxpY3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVzb2x2ZS9tZXRob2QvZ2VuZXJpY3MvU3RhdGljSW1wb3J0Q29uZmxpY3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kM2Q4N2NiCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXNvbHZlL21ldGhvZC9nZW5lcmljcy9TdGF0aWNJbXBvcnRDb25mbGljdC5qYXZhCkBAIC0wLDAgKzEsOSBAQAoraW1wb3J0IHN0YXRpYyBqYXZhLnV0aWwuQXJyYXlzLio7CitpbXBvcnQgc3RhdGljIGphdmEudXRpbC5Db2xsZWN0aW9ucy5zb3J0OworCitjbGFzcyBDIHsKKyAgeworICAgIGludFtdIGFycmF5ID0gbnVsbDsKKyAgICA8cmVmPnNvcnQoYXJyYXkpOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXNvbHZlL21ldGhvZC9nZW5lcmljcy9TdGF0aWNJbXBvcnRDb25mbGljdDEuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVzb2x2ZS9tZXRob2QvZ2VuZXJpY3MvU3RhdGljSW1wb3J0Q29uZmxpY3QxLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTc2OTk0ZQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVzb2x2ZS9tZXRob2QvZ2VuZXJpY3MvU3RhdGljSW1wb3J0Q29uZmxpY3QxLmphdmEKQEAgLTAsMCArMSwyMSBAQAoraW1wb3J0IHN0YXRpYyBqYXZhLmxhbmcuSW50ZWdlci5wYXJzZUludDsKKworcHVibGljIGNsYXNzIFggeworCisgICAgcHJpdmF0ZSBTdHJpbmcgc3RyOworCisgICAgcHVibGljIFgoU3RyaW5nIHN0cikgeworICAgICAgICB0aGlzLnN0ciA9IHN0cjsKKyAgICB9CisKKyAgICBwdWJsaWMgaW50IHBhcnNlSW50KCl7CisgICAgICAgIC8vVGhlIGZvbGxvd2luZyBsaW5lIGlzIHJlamVjdGVkIGJ5IHRoZSBjb21waWxlciBidXQgbm90IGJ5IEludGVsbGlKLgorICAgICAgICByZXR1cm4gPHJlZj5wYXJzZUludChzdHIpOworICAgIH0KKworICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKyAgICAgICAgWCB4PW5ldyBYKCIxMjMiKTsKKyAgICAgICAgaW50IGk9eC5wYXJzZUludCgpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oaSk7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVzb2x2ZS9tZXRob2QvZ2VuZXJpY3MvU3RhdGljSW1wb3J0Q29uZmxpY3QzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3Jlc29sdmUvbWV0aG9kL2dlbmVyaWNzL1N0YXRpY0ltcG9ydENvbmZsaWN0My5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjMDhkMTUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3Jlc29sdmUvbWV0aG9kL2dlbmVyaWNzL1N0YXRpY0ltcG9ydENvbmZsaWN0My5qYXZhCkBAIC0wLDAgKzEsMjMgQEAKK3BhY2thZ2UgcDsKKworaW1wb3J0IHN0YXRpYyBwLlRvSW1wb3J0WC5mZmY7CitpbXBvcnQgc3RhdGljIHAuVG9JbXBvcnRYMi5mZmY7CisKKy8vSURFQS02NDkyNgorcHVibGljIGNsYXNzIEFwcFRlc3QgeworICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKyAgICAgICAgPHJlZj5mZmYoKTsKKyAgICB9Cit9CisKK2NsYXNzIFRvSW1wb3J0WCB7CisgICAgcHVibGljIHN0YXRpYyB2b2lkIGZmZigpIHsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJUb0ltcG9ydCIpOworICAgIH0KK30KKworY2xhc3MgVG9JbXBvcnRYMiBleHRlbmRzIFRvSW1wb3J0WCB7CisgICAgcHVibGljIHN0YXRpYyB2b2lkIGZmZigpIHsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJUb0ltcG9ydDIiKTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3Jlc29sdmUvbWV0aG9kL2dlbmVyaWNzL1N0YXRpY0ltcG9ydERpcmVjdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXNvbHZlL21ldGhvZC9nZW5lcmljcy9TdGF0aWNJbXBvcnREaXJlY3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YzdkYjIxCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXNvbHZlL21ldGhvZC9nZW5lcmljcy9TdGF0aWNJbXBvcnREaXJlY3QuamF2YQpAQCAtMCwwICsxLDggQEAKK2ltcG9ydCBzdGF0aWMgamF2YS51dGlsLkFycmF5cy5hc0xpc3Q7CitpbXBvcnQgamF2YS51dGlsLio7CisKK2NsYXNzIEMgeworICB7CisgICAgTGlzdDxTdHJpbmc+IHMgPSA8cmVmPmFzTGlzdChuZXcgU3RyaW5nWzBdKTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVzb2x2ZS9tZXRob2QvZ2VuZXJpY3MvU3RhdGljSW1wb3J0SGlkZGVuLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3Jlc29sdmUvbWV0aG9kL2dlbmVyaWNzL1N0YXRpY0ltcG9ydEhpZGRlbi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJiODgyODAKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3Jlc29sdmUvbWV0aG9kL2dlbmVyaWNzL1N0YXRpY0ltcG9ydEhpZGRlbi5qYXZhCkBAIC0wLDAgKzEsMTEgQEAKK2ltcG9ydCBzdGF0aWMgamF2YS51dGlsLkFycmF5cy50b1N0cmluZzsKKworY2xhc3MgSW1wb3J0RHV0eSB7CisgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworICAgICAgICBuZXcgSW1wb3J0RHV0eSgpLnByaW50QXJncygxLCAyLCAzLCA0LCA1KTsKKyAgICB9CisKKyAgICB2b2lkIHByaW50QXJncyhPYmplY3QuLi4gYXJncykgeworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oPHJlZj50b1N0cmluZyhhcmdzKSk7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXNvbHZlL21ldGhvZC9nZW5lcmljcy9TdGF0aWNJbXBvcnRPbkRlbWFuZC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXNvbHZlL21ldGhvZC9nZW5lcmljcy9TdGF0aWNJbXBvcnRPbkRlbWFuZC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJkY2MxMDAKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3Jlc29sdmUvbWV0aG9kL2dlbmVyaWNzL1N0YXRpY0ltcG9ydE9uRGVtYW5kLmphdmEKQEAgLTAsMCArMSw4IEBACitpbXBvcnQgc3RhdGljIGphdmEudXRpbC5BcnJheXMuKjsKK2ltcG9ydCBqYXZhLnV0aWwuKjsKKworY2xhc3MgQyB7CisgIHsKKyAgICBMaXN0PFN0cmluZz4gcyA9IDxyZWY+YXNMaXN0KG5ldyBTdHJpbmdbMF0pOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXNvbHZlL21ldGhvZC9nZW5lcmljcy9TdGF0aWNNZXRob2RJblN1YmNsYXNzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3Jlc29sdmUvbWV0aG9kL2dlbmVyaWNzL1N0YXRpY01ldGhvZEluU3ViY2xhc3MuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMjUyOTUwCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXNvbHZlL21ldGhvZC9nZW5lcmljcy9TdGF0aWNNZXRob2RJblN1YmNsYXNzLmphdmEKQEAgLTAsMCArMSwyMyBAQAoraW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOworCitwdWJsaWMgY2xhc3MgU29tZUNsYXNzIHsKKyAgICBwdWJsaWMgc3RhdGljIE9iamVjdCBmaW5kKENvbGxlY3Rpb24gY29sbGVjdGlvbiwgT2JqZWN0IGNyaXRlcmlhKSB7CisgICAgICAgIHJldHVybiBjcml0ZXJpYTsKKyAgICB9CisgICAgc3RhdGljIGNsYXNzIFNvbWVTdWJDbGFzcyBleHRlbmRzIFNvbWVDbGFzcyB7CisgICAgICAgIHB1YmxpYyBzdGF0aWMgPFQ+IFQgZmluZChDb2xsZWN0aW9uPFQ+IGNvbGxlY3Rpb24sIE9iamVjdCBjcml0ZXJpYSkgeworICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgIH0KKyAgICB9CisKKworICAgIDxUPnZvaWQgZigpCisgICAgeworICAgICAgICBDb2xsZWN0aW9uPFQ+IGMgPSBudWxsOworICAgICAgICBPYmplY3QgY3JpdGVyaWEgPSBudWxsOworCisvLyBJbnRlbGxpSiBmaW5kcyB0aGUgZmluZChDb2xsZWN0aW9uLCBPYmplY3QpIG1ldGhvZCwgYW5kIHJlcG9ydHMgYSBub24tZXhpc3RlbnQgY29tcGlsZSBlcnJvci4KKyAgICAgICAgVCBzb21lSW5zdGFuY2UgPSBTb21lU3ViQ2xhc3MuPHJlZj5maW5kKGMsIGNyaXRlcmlhKTsKKyAgICB9CisKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVzb2x2ZS9tZXRob2QvZ2VuZXJpY3MvVGVzdEdlbmVyaWNNZXRob2RPdmVybG9hZGluZzEuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVzb2x2ZS9tZXRob2QvZ2VuZXJpY3MvVGVzdEdlbmVyaWNNZXRob2RPdmVybG9hZGluZzEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOTNjNjc3Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXNvbHZlL21ldGhvZC9nZW5lcmljcy9UZXN0R2VuZXJpY01ldGhvZE92ZXJsb2FkaW5nMS5qYXZhCkBAIC0wLDAgKzEsMjAgQEAKKworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCisvKioKKyAqIENyZWF0ZWQgYnkgSW50ZWxsaUogSURFQS4KKyAqIFVzZXI6IGlrCisgKiBEYXRlOiAyOC4wNS4yMDAzCisgKiBUaW1lOiAxNjo1MDo1MQorICogVG8gY2hhbmdlIHRoaXMgdGVtcGxhdGUgdXNlIE9wdGlvbnMgfCBGaWxlIFRlbXBsYXRlcy4KKyAqLworcHVibGljIGNsYXNzIFRlc3RHZW5lcmljTWV0aG9kT3ZlcmxvYWRpbmcxIHsKKyAgICBjbGFzcyBBPFQgZXh0ZW5kcyBMaXN0PnsKKyAgICAgICAgcHVibGljIGJvb2xlYW4gZXF1YWxzKFQgdCl7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisgICAgeworICAgICAgICBuZXcgQSgpLjxyZWY+ZXF1YWxzKG5ldyBPYmplY3QoKSk7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXNvbHZlL21ldGhvZC9nZW5lcmljcy9UZXN0R2VuZXJpY01ldGhvZE92ZXJsb2FkaW5nMi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXNvbHZlL21ldGhvZC9nZW5lcmljcy9UZXN0R2VuZXJpY01ldGhvZE92ZXJsb2FkaW5nMi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg5NzhiODEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3Jlc29sdmUvbWV0aG9kL2dlbmVyaWNzL1Rlc3RHZW5lcmljTWV0aG9kT3ZlcmxvYWRpbmcyLmphdmEKQEAgLTAsMCArMSwxNyBAQAorLyoqCisgKiBDcmVhdGVkIGJ5IEludGVsbGlKIElERUEuCisgKiBVc2VyOiBpaworICogRGF0ZTogMjguMDUuMjAwMworICogVGltZTogMTY6NTA6NTEKKyAqIFRvIGNoYW5nZSB0aGlzIHRlbXBsYXRlIHVzZSBPcHRpb25zIHwgRmlsZSBUZW1wbGF0ZXMuCisgKi8KK3B1YmxpYyBjbGFzcyBUZXN0R2VuZXJpY01ldGhvZE92ZXJsb2FkaW5nMiB7CisgICAgY2xhc3MgQTxUPnsKKyAgICAgICAgcHVibGljIGJvb2xlYW4gZXF1YWxzKFQgdCl7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisgICAgeworICAgICAgICBuZXcgQSgpLjxyZWY+ZXF1YWxzKG5ldyBPYmplY3QoKSk7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXNvbHZlL21ldGhvZC9nZW5lcmljcy9UZXN0R2VuZXJpY01ldGhvZE92ZXJsb2FkaW5nMy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXNvbHZlL21ldGhvZC9nZW5lcmljcy9UZXN0R2VuZXJpY01ldGhvZE92ZXJsb2FkaW5nMy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNiMDE4MDYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3Jlc29sdmUvbWV0aG9kL2dlbmVyaWNzL1Rlc3RHZW5lcmljTWV0aG9kT3ZlcmxvYWRpbmczLmphdmEKQEAgLTAsMCArMSwxNyBAQAorLyoqCisgKiBDcmVhdGVkIGJ5IEludGVsbGlKIElERUEuCisgKiBVc2VyOiBpaworICogRGF0ZTogMjguMDUuMjAwMworICogVGltZTogMTY6NTA6NTEKKyAqIFRvIGNoYW5nZSB0aGlzIHRlbXBsYXRlIHVzZSBPcHRpb25zIHwgRmlsZSBUZW1wbGF0ZXMuCisgKi8KK3B1YmxpYyBjbGFzcyBUZXN0R2VuZXJpY01ldGhvZE92ZXJsb2FkaW5nMyB7CisgICAgY2xhc3MgQTxUPnsKKyAgICAgICAgcHVibGljIGJvb2xlYW4gZXF1YWxzKFQgdCl7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisgICAgeworICAgICAgICBuZXcgQTxTdHJpbmc+KCkuPHJlZj5lcXVhbHMobmV3IE9iamVjdCgpKTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3Jlc29sdmUvbWV0aG9kL2dlbmVyaWNzL1Rlc3RHZW5lcmljTWV0aG9kT3ZlcmxvYWRpbmc0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3Jlc29sdmUvbWV0aG9kL2dlbmVyaWNzL1Rlc3RHZW5lcmljTWV0aG9kT3ZlcmxvYWRpbmc0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGU5YmM3YQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVzb2x2ZS9tZXRob2QvZ2VuZXJpY3MvVGVzdEdlbmVyaWNNZXRob2RPdmVybG9hZGluZzQuamF2YQpAQCAtMCwwICsxLDE3IEBACisvKioKKyAqIENyZWF0ZWQgYnkgSW50ZWxsaUogSURFQS4KKyAqIFVzZXI6IGlrCisgKiBEYXRlOiAyOC4wNS4yMDAzCisgKiBUaW1lOiAxNjo1MDo1MQorICogVG8gY2hhbmdlIHRoaXMgdGVtcGxhdGUgdXNlIE9wdGlvbnMgfCBGaWxlIFRlbXBsYXRlcy4KKyAqLworcHVibGljIGNsYXNzIFRlc3RHZW5lcmljTWV0aG9kT3ZlcmxvYWRpbmc0IHsKKyAgICBjbGFzcyBBPFQ+eworICAgICAgICBwdWJsaWMgYm9vbGVhbiBlcXVhbHMoVCB0KXsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKyAgICB7CisgICAgICAgIG5ldyBBPFN0cmluZz4oKS48cmVmPmVxdWFscyhuZXcgU3RyaW5nKCkpOworICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVzb2x2ZS9tZXRob2QvZ2VuZXJpY3MvVGVzdFJldHVyblR5cGUxLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3Jlc29sdmUvbWV0aG9kL2dlbmVyaWNzL1Rlc3RSZXR1cm5UeXBlMS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJhODcwYjAKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3Jlc29sdmUvbWV0aG9kL2dlbmVyaWNzL1Rlc3RSZXR1cm5UeXBlMS5qYXZhCkBAIC0wLDAgKzEsMTcgQEAKKy8qKgorICogQ3JlYXRlZCBieSBJbnRlbGxpSiBJREVBLgorICogVXNlcjogaWsKKyAqIERhdGU6IDI4LjA1LjIwMDMKKyAqIFRpbWU6IDE2OjUwOjUxCisgKiBUbyBjaGFuZ2UgdGhpcyB0ZW1wbGF0ZSB1c2UgT3B0aW9ucyB8IEZpbGUgVGVtcGxhdGVzLgorICovCitwdWJsaWMgY2xhc3MgVGVzdFJldHVyblR5cGUxIHsKKyAgICBjbGFzcyBBPFQgZXh0ZW5kcyBSdW5uYWJsZT57CisgICAgICAgIHB1YmxpYyBUIGZvbyhUIHQpeworICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgIH0KKyAgICB9CisgICAgeworICAgICAgICBuZXcgQTxTdHJpbmc+KCkuZm9vKG5ldyBTdHJpbmcoKSkuPHJlZj50b0NoYXJBcnJheSgpOworICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVzb2x2ZS9tZXRob2QvZ2VuZXJpY3MvVGVzdFJldHVyblR5cGUyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3Jlc29sdmUvbWV0aG9kL2dlbmVyaWNzL1Rlc3RSZXR1cm5UeXBlMi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI4MWJjZTEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3Jlc29sdmUvbWV0aG9kL2dlbmVyaWNzL1Rlc3RSZXR1cm5UeXBlMi5qYXZhCkBAIC0wLDAgKzEsMTcgQEAKKy8qKgorICogQ3JlYXRlZCBieSBJbnRlbGxpSiBJREVBLgorICogVXNlcjogaWsKKyAqIERhdGU6IDI4LjA1LjIwMDMKKyAqIFRpbWU6IDE2OjUwOjUxCisgKiBUbyBjaGFuZ2UgdGhpcyB0ZW1wbGF0ZSB1c2UgT3B0aW9ucyB8IEZpbGUgVGVtcGxhdGVzLgorICovCitwdWJsaWMgY2xhc3MgVGVzdFJldHVyblR5cGUyIHsKKyAgICBjbGFzcyBBPFQgZXh0ZW5kcyBSdW5uYWJsZT57CisgICAgICAgIHB1YmxpYyBUIGZvbyhUIHQpeworICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgIH0KKyAgICB9CisgICAgeworICAgICAgICBuZXcgQSgpLmZvbyhuZXcgU3RyaW5nKCkpLjxyZWY+dG9DaGFyQXJyYXkoKTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3Jlc29sdmUvbWV0aG9kL2dlbmVyaWNzL1Rlc3RUaGlzRXhwcmVzc2lvbi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXNvbHZlL21ldGhvZC9nZW5lcmljcy9UZXN0VGhpc0V4cHJlc3Npb24uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YWU5MjJhCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXNvbHZlL21ldGhvZC9nZW5lcmljcy9UZXN0VGhpc0V4cHJlc3Npb24uamF2YQpAQCAtMCwwICsxLDEyIEBACitwdWJsaWMgY2xhc3MgV2l0aElubmVyPFQ+IHsKKyAgICBUIGZvbyAoKSB7CisgICAgICAgIHJldHVybiBudWxsOworICAgIH0KKworICAgIGNsYXNzIElubmVyIHsKKyAgICAgICAgVCBmb28gKCkgeworICAgICAgICAgICAgcmV0dXJuICA8cmVmPldpdGhJbm5lci50aGlzLmZvbygpOworICAgICAgICB9CisgICAgfQorCit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3Jlc29sdmUvbWV0aG9kL2dlbmVyaWNzL1R5cGVJbmZlcmVuY2UxLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3Jlc29sdmUvbWV0aG9kL2dlbmVyaWNzL1R5cGVJbmZlcmVuY2UxLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjAzOTU5ZAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVzb2x2ZS9tZXRob2QvZ2VuZXJpY3MvVHlwZUluZmVyZW5jZTEuamF2YQpAQCAtMCwwICsxLDI1IEBACitjbGFzcyBCeworIHZvaWQgYigpe307Cit9CisKK2ludGVyZmFjZSBFeworIHZvaWQgZSgpOworfQorCitjbGFzcyBDIGV4dGVuZHMgQnsKKyB2b2lkIGMoKXt9Cit9CisKK2NsYXNzIEQgZXh0ZW5kcyBCIGltcGxlbWVudHMgRXsKKyB2b2lkIGQoKXt9Cisgdm9pZCBlKCl7fQorfQorCisKK2NsYXNzIEE8Wj57CisgPFQ+IFQgZm9vKFQgdCwgQTxUPiBhKXsgcmV0dXJuIG51bGw7IH0KKworIHsKKyAgZm9vKG5ldyBDKCksIG5ldyBBPEQ+KCkpLjxyZWY+YigpOworIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3Jlc29sdmUvbWV0aG9kL2dlbmVyaWNzL1R5cGVQYXJhbUJvdW5kQ29uZmxpY3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVzb2x2ZS9tZXRob2QvZ2VuZXJpY3MvVHlwZVBhcmFtQm91bmRDb25mbGljdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUzNTc3ZTkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3Jlc29sdmUvbWV0aG9kL2dlbmVyaWNzL1R5cGVQYXJhbUJvdW5kQ29uZmxpY3QuamF2YQpAQCAtMCwwICsxLDIyIEBACitpbXBvcnQgamF2YS51dGlsLio7CisKK2NsYXNzIFRoaW5nIHsKK30KK2NsYXNzIFRlc3RlcmdlbiB7CisgICAgPFQgZXh0ZW5kcyBUaGluZz4gVCB4KFQgdGhpbmcpIHsKKyAgICAgICAgcmV0dXJuIG51bGw7CisgICAgfQorCisgICAgPFQgZXh0ZW5kcyBUaGluZz4gVCB4KENvbGxlY3Rpb248VD4gdGhpbmcpIHsKKyAgICAgICAgcmV0dXJuIG51bGw7CisgICAgfQorfQorY2xhc3MgVGVzdGVyZ2VuVXNlciB7CisgICAgcHVibGljIHZvaWQgY29udGV4dChUZXN0ZXJnZW4gdGVzdCkgeworICAgICAgICAvLyB0aGUgZXJyb3IgaXMgc2hvd24gd2hlbiB4IGlzIGNhbGxlZDoKKyAgICAgICAgQ29sbGVjdGlvbjxUaGluZz4gdCA9IG51bGw7CisgICAgICAgIHRlc3QuPHJlZj54KHQpOworICAgIH0KKworfQorCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3Jlc29sdmUvbWV0aG9kL3ZhcmFyZ3MvT2JqZWN0T2JqZWN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3Jlc29sdmUvbWV0aG9kL3ZhcmFyZ3MvT2JqZWN0T2JqZWN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODVkNmY1NgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVzb2x2ZS9tZXRob2QvdmFyYXJncy9PYmplY3RPYmplY3QuamF2YQpAQCAtMCwwICsxLDggQEAKK2NsYXNzIFhZIHsKKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgZm9vKE9iamVjdC4uLiB4KSB7IH0KKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgZm9vKE9iamVjdCBhLCBPYmplY3QuLi4geCkgeyB9CisKKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisgICAgICAgIDxyZWY+Zm9vKCJhIik7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXNvbHZlL21ldGhvZC92YXJhcmdzL09iamVjdE9iamVjdE9iamVjdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXNvbHZlL21ldGhvZC92YXJhcmdzL09iamVjdE9iamVjdE9iamVjdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdhNGFlYjcKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3Jlc29sdmUvbWV0aG9kL3ZhcmFyZ3MvT2JqZWN0T2JqZWN0T2JqZWN0LmphdmEKQEAgLTAsMCArMSw4IEBACitjbGFzcyBYWSB7CisgICAgcHVibGljIHN0YXRpYyB2b2lkIGZvbyhPYmplY3QuLi4geCkgeyB9CisgICAgcHVibGljIHN0YXRpYyB2b2lkIGZvbyhPYmplY3QgYSwgT2JqZWN0IG8sIE9iamVjdC4uLiB4KSB7IH0KKworICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKyAgICAgICAgPHJlZj5mb28oImEiLCAiYiIpOworICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVzb2x2ZS9tZXRob2QvdmFyYXJncy9QcmltaXRpdmVPYmplY3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVzb2x2ZS9tZXRob2QvdmFyYXJncy9QcmltaXRpdmVPYmplY3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMjVmNmE3Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXNvbHZlL21ldGhvZC92YXJhcmdzL1ByaW1pdGl2ZU9iamVjdC5qYXZhCkBAIC0wLDAgKzEsOSBAQAorY2xhc3MgWFkgeworICAgIHByaXZhdGUgdm9pZCBmKE9iamVjdC4uLiBicykge30KKworICAgIHByaXZhdGUgdm9pZCBmKGludC4uLiBpcykge30KKworICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKyAgICAgICAgICAgIDxyZWY+ZigpOworICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVzb2x2ZS9tZXRob2QvdmFyYXJncy9QcmltaXRpdmVTdHJpbmcuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVzb2x2ZS9tZXRob2QvdmFyYXJncy9QcmltaXRpdmVTdHJpbmcuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYTc0YjgwCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXNvbHZlL21ldGhvZC92YXJhcmdzL1ByaW1pdGl2ZVN0cmluZy5qYXZhCkBAIC0wLDAgKzEsOSBAQAorY2xhc3MgWFkgeworICAgIHByaXZhdGUgdm9pZCBmKFN0cmluZy4uLiBicykge30KKworICAgIHByaXZhdGUgdm9pZCBmKGludC4uLiBpcykge30KKworICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKyAgICAgICAgICAgIDxyZWY+ZigpOworICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVzb2x2ZS9tZXRob2QvdmFyYXJncy9TdHJpbmdPYmplY3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVzb2x2ZS9tZXRob2QvdmFyYXJncy9TdHJpbmdPYmplY3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MWMwOTMwCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXNvbHZlL21ldGhvZC92YXJhcmdzL1N0cmluZ09iamVjdC5qYXZhCkBAIC0wLDAgKzEsOSBAQAorCitjbGFzcyBYWSB7CisgICAgcHVibGljIHN0YXRpYyB2b2lkIGZvbyhTdHJpbmcuLi4geCkgeyB9CisgICAgcHVibGljIHN0YXRpYyB2b2lkIGZvbyhPYmplY3QgYSwgT2JqZWN0Li4uIHgpIHsgfQorCisgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworICAgICAgICA8cmVmPmZvbygiYSIpOworICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVzb2x2ZS9tZXRob2QvdmFyYXJncy9TdHJpbmdPYmplY3RTdHJpbmcuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVzb2x2ZS9tZXRob2QvdmFyYXJncy9TdHJpbmdPYmplY3RTdHJpbmcuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYzgwMmQ5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXNvbHZlL21ldGhvZC92YXJhcmdzL1N0cmluZ09iamVjdFN0cmluZy5qYXZhCkBAIC0wLDAgKzEsOCBAQAorY2xhc3MgWFkgeworICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBmb28oU3RyaW5nLi4uIHgpIHsgfQorICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBmb28oT2JqZWN0IGEsIFN0cmluZy4uLiB4KSB7IH0KKworICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKyAgICAgICAgPHJlZj5mb28oImEiKTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3Jlc29sdmUvbWV0aG9kL3ZhcmFyZ3MvU3RyaW5nU3RyaW5nU3RyaW5nLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3Jlc29sdmUvbWV0aG9kL3ZhcmFyZ3MvU3RyaW5nU3RyaW5nU3RyaW5nLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzAwZWM2OQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVzb2x2ZS9tZXRob2QvdmFyYXJncy9TdHJpbmdTdHJpbmdTdHJpbmcuamF2YQpAQCAtMCwwICsxLDggQEAKK2NsYXNzIFhZIHsKKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgZm9vKFN0cmluZy4uLiB4KSB7IH0KKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgZm9vKFN0cmluZyBhLCBTdHJpbmcuLi4geCkgeyB9CisKKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisgICAgICAgIDxyZWY+Zm9vKCJhIik7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXNvbHZlL3Zhci9Bbm9ueW1vdXNDb25zdHJ1Y3RvckFyZy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXNvbHZlL3Zhci9Bbm9ueW1vdXNDb25zdHJ1Y3RvckFyZy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY1YTMyNWYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3Jlc29sdmUvdmFyL0Fub255bW91c0NvbnN0cnVjdG9yQXJnLmphdmEKQEAgLTAsMCArMSwxMCBAQAorY2xhc3MgVGVzdCB7CisgIHN0YXRpYyBUZXN0IGNyZWF0ZVRlc3QoaW50IHZhbHVlKSB7CisgICAgcmV0dXJuIG5ldyBUZXN0KDxyZWY+dmFsdWUpIHt9OworICB9CisKKyAgaW50IHZhbHVlOworCisgIFRlc3QoaW50IHZhbHVlKSB7CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVzb2x2ZS92YXIvQXJyYXkxLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3Jlc29sdmUvdmFyL0FycmF5MS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZhY2JhZDYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3Jlc29sdmUvdmFyL0FycmF5MS5qYXZhCkBAIC0wLDAgKzEsNiBAQAorcHVibGljIGNsYXNzIEFycmF5MSB7CisgIHZvaWQgZm9vKCl7CisgICAgaW50IHZhbHVlW10gPSB7fTsKKyAgICBpbnQgdmFsID0gdmFsdWUuPHJlZj5sZW5ndGg7CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVzb2x2ZS92YXIvQnVnNzg2OS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXNvbHZlL3Zhci9CdWc3ODY5LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGIwY2Y5OQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVzb2x2ZS92YXIvQnVnNzg2OS5qYXZhCkBAIC0wLDAgKzEsMTIgQEAKKy8qKgorICogQ3JlYXRlZCBieSBJbnRlbGxpSiBJREVBLgorICogVXNlcjogaWsKKyAqIERhdGU6IDIyLjAxLjIwMDMKKyAqIFRpbWU6IDE0OjUwOjM1CisgKiBUbyBjaGFuZ2UgdGhpcyB0ZW1wbGF0ZSB1c2UgT3B0aW9ucyB8IEZpbGUgVGVtcGxhdGVzLgorICovCitwdWJsaWMgY2xhc3MgQnVnNzg2OSB7CisgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpeworICAgIFN0cmluZyBzdHIgPSAoPHJlZj5zdHIgPSBTdHJpbmcudmFsdWVPZigxMjMuNDU2ZCkpICE9IG51bGwgPyBzdHIgOiAiZGVmYXVsdCI7CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVzb2x2ZS92YXIvRmllbGRDb25mbGljdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXNvbHZlL3Zhci9GaWVsZENvbmZsaWN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGU5ZjI4YQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVzb2x2ZS92YXIvRmllbGRDb25mbGljdC5qYXZhCkBAIC0wLDAgKzEsMTYgQEAKK2ludGVyZmFjZSBCYXNlIHsKKyAgQmFzZVtdIEVNUFRZX0FSUkFZID0gbmV3IEJhc2VbMF07Cit9CisKK2ludGVyZmFjZSBEZXJpdmVkMSBleHRlbmRzIEJhc2Uge30KKworaW50ZXJmYWNlIERlcml2ZWQyIGV4dGVuZHMgQmFzZSB7CisgIERlcml2ZWQyW10gRU1QVFlfQVJSQVkgPSBuZXcgRGVyaXZlZDJbMF07Cit9CisKK2NsYXNzIEltcGxlbWVudG9yIGltcGxlbWVudHMgRGVyaXZlZDEsIERlcml2ZWQyIHsKKyAgLy9JbXBsZW1lbnRvcltdIEVNUFRZX0FSUkFZID0gbmV3IEltcGxlbWVudG9yWzBdOworICBEZXJpdmVkMltdIGYoKSAgeworICAgIHJldHVybiA8cmVmPkVNUFRZX0FSUkFZOyAgLy9jb25mbGljdAorICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3Jlc29sdmUvdmFyL0ZpZWxkRnJvbUludGVyZmFjZS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXNvbHZlL3Zhci9GaWVsZEZyb21JbnRlcmZhY2UuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MTU4OWY1Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXNvbHZlL3Zhci9GaWVsZEZyb21JbnRlcmZhY2UuamF2YQpAQCAtMCwwICsxLDEyIEBACitjbGFzcyBDbGllbnQgeworICBpbnQgZm9vKCl7CisgICAgcmV0dXJuIEEuPHJlZj5GSUVMRDsKKyAgfQorfQorCitjbGFzcyBBIGltcGxlbWVudHMgSXsKK30KKworaW50ZXJmYWNlIEkgeworICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBGSUVMRCA9IDE7Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3Jlc29sdmUvdmFyL0ZpZWxkc0FuZExvY2Fscy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXNvbHZlL3Zhci9GaWVsZHNBbmRMb2NhbHMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OGFiY2YyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXNvbHZlL3Zhci9GaWVsZHNBbmRMb2NhbHMuamF2YQpAQCAtMCwwICsxLDIzIEBACisvKioKKyAqIENyZWF0ZWQgYnkgSW50ZWxsaUogSURFQS4KKyAqIFVzZXI6IGlrCisgKiBEYXRlOiAyMy4wMS4yMDAzCisgKiBUaW1lOiAxNzo1OTo0NQorICogVG8gY2hhbmdlIHRoaXMgdGVtcGxhdGUgdXNlIE9wdGlvbnMgfCBGaWxlIFRlbXBsYXRlcy4KKyAqLworcHVibGljIGNsYXNzIEZpZWxkc0FuZExvY2FscyB7CisgICAgcHJpdmF0ZSBpbnQgYSA9IDA7CisgICAgeworICAgICAgICBpbnQgYSA9IC0xOworICAgICAgICBuZXcgQigpeworICAgICAgICAgICAgcHVibGljIHZvaWQgcnVuKCl7CisgICAgICAgICAgICAgICAgaW50IGIgPSA8cmVmPmEKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK30KKworYWJzdHJhY3QgY2xhc3MgQiBpbXBsZW1lbnRzIFJ1bm5hYmxlIHsKKyAgICBwcml2YXRlIGludCBhID0gMDsKK30KKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXNvbHZlL3Zhci9Gb3JlYWNoUGFyYW1ldGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3Jlc29sdmUvdmFyL0ZvcmVhY2hQYXJhbWV0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOTdkZmI1Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXNvbHZlL3Zhci9Gb3JlYWNoUGFyYW1ldGVyLmphdmEKQEAgLTAsMCArMSw3IEBACitjbGFzcyBGb28geworICB7CisgICAgZm9yKE9iamVjdCBvIDogY29sbGVjdGlvbikgeworICAgICAgU3lzdGVtLm91dC5wcmludGxuKDxyZWY+byk7CisgICAgfQorICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXNvbHZlL3Zhci9Jbmhlcml0ZWRPdXRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXNvbHZlL3Zhci9Jbmhlcml0ZWRPdXRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUxOGRlYTMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3Jlc29sdmUvdmFyL0luaGVyaXRlZE91dGVyLmphdmEKQEAgLTAsMCArMSw5IEBACitjbGFzcyBPdXRlciB7CisgIHByaXZhdGUgU3RyaW5nIHN0cmluZzsKKworICBjbGFzcyBJbm5lciBleHRlbmRzIE91dGVyIHsKKyAgICB2b2lkIHRlc3QoKSB7CisgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oPHJlZj5zdHJpbmcpOyAKKyAgICB9CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3Jlc29sdmUvdmFyL0lubmVyMS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXNvbHZlL3Zhci9Jbm5lcjEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NDhjNmY3Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXNvbHZlL3Zhci9Jbm5lcjEuamF2YQpAQCAtMCwwICsxLDIwIEBACisvKioKKyAqIENyZWF0ZWQgYnkgSW50ZWxsaUogSURFQS4KKyAqIFVzZXI6IGlrCisgKiBEYXRlOiAyMy4wMS4yMDAzCisgKiBUaW1lOiAxNzo1OTo0NQorICogVG8gY2hhbmdlIHRoaXMgdGVtcGxhdGUgdXNlIE9wdGlvbnMgfCBGaWxlIFRlbXBsYXRlcy4KKyAqLworcHVibGljIGNsYXNzIElubmVyMSB7CisgICAgcHJpdmF0ZSBpbnQgYSA9IDA7CisgICAgcHJpdmF0ZSBjbGFzcyBBIGV4dGVuZHMgQnsKKyAgICAgICAgeworICAgICAgICAgICAgaW50IGogPSA8cmVmPmE7CisgICAgICAgIH0KKyAgICB9Cit9CisKK2NsYXNzIEIgeworICAgIHByaXZhdGUgaW50IGEgPSAwOworfQorCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3Jlc29sdmUvdmFyL0lubmVyUHJpdmF0ZXMxLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3Jlc29sdmUvdmFyL0lubmVyUHJpdmF0ZXMxLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTAwYjVlZQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVzb2x2ZS92YXIvSW5uZXJQcml2YXRlczEuamF2YQpAQCAtMCwwICsxLDkgQEAKK2NsYXNzIEF7CisgeworICBuZXcgQigpLjxyZWY+YiA9IDA7CisgfQorCisgY2xhc3MgQnsKKyAgcHJpdmF0ZSBpbnQgYjsKKyB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXNvbHZlL3Zhci9JbnRlcmZhY2VDb25mbGljdDEuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVzb2x2ZS92YXIvSW50ZXJmYWNlQ29uZmxpY3QxLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjNlMmZkMwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVzb2x2ZS92YXIvSW50ZXJmYWNlQ29uZmxpY3QxLmphdmEKQEAgLTAsMCArMSwxNiBAQAorcHVibGljIGNsYXNzIEludGVyZmFjZUNvbmZsaWN0MXsKKyAgcHVibGljIGludGVyZmFjZSBBeworICAgIGludCBhID0gMDsKKyAgfQorCisgIHB1YmxpYyBpbnRlcmZhY2UgQnsKKyAgICBpbnQgYSA9IDA7CisgIH0KKworICBwdWJsaWMgc3RhdGljIGNsYXNzIEMKKyAgaW1wbGVtZW50cyBBLCBCeworICAgIHN0YXRpY3sKKyAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiIiArIDxyZWY+YSk7CisgICAgfQorICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXNvbHZlL3Zhci9JbnRlcmZhY2VDb25mbGljdDEwLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3Jlc29sdmUvdmFyL0ludGVyZmFjZUNvbmZsaWN0MTAuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YzNlNmEzCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXNvbHZlL3Zhci9JbnRlcmZhY2VDb25mbGljdDEwLmphdmEKQEAgLTAsMCArMSwyMCBAQAorcHVibGljIGNsYXNzIEludGVyZmFjZUNvbmZsaWN0MTB7CisgIHB1YmxpYyBpbnRlcmZhY2UgQXsKKyAgICBpbnQgYSA9IDA7CisgIH0KKworICBwdWJsaWMgc3RhdGljIGNsYXNzIEIKKyAgaW1wbGVtZW50cyBBeworICB9CisKKyAgcHVibGljIGludGVyZmFjZSBDeworICAgIGludCBhID0gMDsKKyAgfQorCisgIHB1YmxpYyBzdGF0aWMgY2xhc3MgRCBleHRlbmRzIEEKKyAgaW1wbGVtZW50cyBBLCBDeworICAgIHZvaWQgZm9vKCl7CisgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIiIgKyA8cmVmPmEpOworICAgIH0KKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVzb2x2ZS92YXIvSW50ZXJmYWNlQ29uZmxpY3QxMS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXNvbHZlL3Zhci9JbnRlcmZhY2VDb25mbGljdDExLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTliMGEwMgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVzb2x2ZS92YXIvSW50ZXJmYWNlQ29uZmxpY3QxMS5qYXZhCkBAIC0wLDAgKzEsMTUgQEAKK3B1YmxpYyBjbGFzcyBJbnRlcmZhY2VDb25mbGljdDExeworICBwdWJsaWMgc3RhdGljIGNsYXNzIEF7CisgICAgc3RhdGljIGludCBhID0gMDsKKyAgfQorCisgIHB1YmxpYyBzdGF0aWMgY2xhc3MgQiBleHRlbmRzIEF7CisgICAgaW50IGEgPSAwOworICB9CisKKyAgcHVibGljIHN0YXRpYyBjbGFzcyBDIGV4dGVuZHMgQnsKKyAgICBzdGF0aWMgdm9pZCBmb28oKXsKKyAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiIiArIDxyZWY+YSk7CisgICAgfQorICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXNvbHZlL3Zhci9JbnRlcmZhY2VDb25mbGljdDIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVzb2x2ZS92YXIvSW50ZXJmYWNlQ29uZmxpY3QyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2I5NzhjMQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVzb2x2ZS92YXIvSW50ZXJmYWNlQ29uZmxpY3QyLmphdmEKQEAgLTAsMCArMSwxOSBAQAorcHVibGljIGNsYXNzIEludGVyZmFjZUNvbmZsaWN0MnsKKyAgcHVibGljIGludGVyZmFjZSBBeworICAgIGludCBhID0gMDsKKyAgfQorCisgIHB1YmxpYyBpbnRlcmZhY2UgQnsKKyAgICBpbnQgYSA9IDA7CisgIH0KKworICBwdWJsaWMgaW50ZXJmYWNlIEUgZXh0ZW5kcyBBeworICB9CisKKyAgcHVibGljIHN0YXRpYyBjbGFzcyBDCisgIGltcGxlbWVudHMgRSwgQnsKKyAgICBzdGF0aWN7CisgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIiIgKyA8cmVmPmEpOworICAgIH0KKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVzb2x2ZS92YXIvSW50ZXJmYWNlQ29uZmxpY3QzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3Jlc29sdmUvdmFyL0ludGVyZmFjZUNvbmZsaWN0My5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJhNTZlM2UKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3Jlc29sdmUvdmFyL0ludGVyZmFjZUNvbmZsaWN0My5qYXZhCkBAIC0wLDAgKzEsMTkgQEAKK3B1YmxpYyBjbGFzcyBJbnRlcmZhY2VDb25mbGljdDN7CisgIHB1YmxpYyBpbnRlcmZhY2UgQXsKKyAgICBpbnQgYSA9IDA7CisgIH0KKworICBwdWJsaWMgaW50ZXJmYWNlIEJ7CisgICAgaW50IGEgPSAwOworICB9CisKKyAgcHVibGljIGNsYXNzIEUgaW1wbGVtZW50cyBBeworICB9CisKKyAgcHVibGljIHN0YXRpYyBjbGFzcyBDIGV4dGVuZHMgRQorICBpbXBsZW1lbnRzIEJ7CisgICAgc3RhdGljeworICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIiICsgPHJlZj5hKTsKKyAgICB9CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3Jlc29sdmUvdmFyL0ludGVyZmFjZUNvbmZsaWN0NC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXNvbHZlL3Zhci9JbnRlcmZhY2VDb25mbGljdDQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMzM5MmIzCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXNvbHZlL3Zhci9JbnRlcmZhY2VDb25mbGljdDQuamF2YQpAQCAtMCwwICsxLDE3IEBACitwdWJsaWMgY2xhc3MgSW50ZXJmYWNlQ29uZmxpY3Q0eworICBwdWJsaWMgaW50ZXJmYWNlIEF7CisgICAgaW50IGEgPSAwOworICB9CisKKworICBwdWJsaWMgY2xhc3MgQnsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBhID0gMDsKKyAgfQorCisgIHB1YmxpYyBzdGF0aWMgY2xhc3MgQyBleHRlbmRzIEIKKyAgaW1wbGVtZW50cyBBeworICAgIHN0YXRpY3sKKyAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiIiArIDxyZWY+YSk7CisgICAgfQorICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXNvbHZlL3Zhci9JbnRlcmZhY2VDb25mbGljdDUuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVzb2x2ZS92YXIvSW50ZXJmYWNlQ29uZmxpY3Q1LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTdiMzllOAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVzb2x2ZS92YXIvSW50ZXJmYWNlQ29uZmxpY3Q1LmphdmEKQEAgLTAsMCArMSwxNyBAQAorcHVibGljIGNsYXNzIEludGVyZmFjZUNvbmZsaWN0NXsKKyAgcHVibGljIGludGVyZmFjZSBBeworICAgIGludCBhID0gMDsKKyAgfQorCisKKyAgcHVibGljIGNsYXNzIEIgaW1wbGVtZW50cyBBeworICAgIHB1YmxpYyBpbnQgYSA9IDA7CisgIH0KKworICBwdWJsaWMgc3RhdGljIGNsYXNzIEMgZXh0ZW5kcyBCCisgIGltcGxlbWVudHMgQXsKKyAgICB2b2lkIGZvbygpeworICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIiICsgPHJlZj5hKTsKKyAgICB9CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3Jlc29sdmUvdmFyL0ludGVyZmFjZUNvbmZsaWN0Ni5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXNvbHZlL3Zhci9JbnRlcmZhY2VDb25mbGljdDYuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYWVjOGY5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXNvbHZlL3Zhci9JbnRlcmZhY2VDb25mbGljdDYuamF2YQpAQCAtMCwwICsxLDE3IEBACitwdWJsaWMgY2xhc3MgSW50ZXJmYWNlQ29uZmxpY3Q2eworICBwdWJsaWMgaW50ZXJmYWNlIEF7CisgICAgaW50IGEgPSAwOworICB9CisKKworICBwdWJsaWMgY2xhc3MgQnsKKyAgICBwdWJsaWMgaW50IGEgPSAwOworICB9CisKKyAgcHVibGljIHN0YXRpYyBjbGFzcyBDIGV4dGVuZHMgQgorICBpbXBsZW1lbnRzIEF7CisgICAgdm9pZCBmb28oKXsKKyAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiIiArIDxyZWY+YSk7CisgICAgfQorICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXNvbHZlL3Zhci9JbnRlcmZhY2VDb25mbGljdDcuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVzb2x2ZS92YXIvSW50ZXJmYWNlQ29uZmxpY3Q3LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzRhMTY3NgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVzb2x2ZS92YXIvSW50ZXJmYWNlQ29uZmxpY3Q3LmphdmEKQEAgLTAsMCArMSwxNiBAQAorcHVibGljIGNsYXNzIEludGVyZmFjZUNvbmZsaWN0N3sKKyAgcHVibGljIGludGVyZmFjZSBBeworICAgIGludCBhID0gMDsKKyAgfQorCisKKyAgcHVibGljIGNsYXNzIEIgaW1wbGVtZW50cyBBeworICAgIHB1YmxpYyBpbnQgYSA9IDA7CisgIH0KKworICBwdWJsaWMgc3RhdGljIGNsYXNzIEMgZXh0ZW5kcyBCeworICAgIHZvaWQgZm9vKCl7CisgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIiIgKyA8cmVmPmEpOworICAgIH0KKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVzb2x2ZS92YXIvSW50ZXJmYWNlQ29uZmxpY3Q4LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3Jlc29sdmUvdmFyL0ludGVyZmFjZUNvbmZsaWN0OC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcwMDUxYzcKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3Jlc29sdmUvdmFyL0ludGVyZmFjZUNvbmZsaWN0OC5qYXZhCkBAIC0wLDAgKzEsMTYgQEAKK3B1YmxpYyBjbGFzcyBJbnRlcmZhY2VDb25mbGljdDh7CisgIHB1YmxpYyBpbnRlcmZhY2UgQXsKKyAgICBpbnQgYSA9IDA7CisgIH0KKworCisgIHB1YmxpYyBzdGF0aWMgY2xhc3MgQiBpbXBsZW1lbnRzIEF7CisgIH0KKworICBwdWJsaWMgc3RhdGljIGNsYXNzIEMgZXh0ZW5kcyBCCisgIGltcGxlbWVudHMgQXsKKyAgICB2b2lkIGZvbygpeworICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIiICsgPHJlZj5hKTsKKyAgICB9CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3Jlc29sdmUvdmFyL0ludGVyZmFjZUNvbmZsaWN0OS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXNvbHZlL3Zhci9JbnRlcmZhY2VDb25mbGljdDkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xN2QyZGY1Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXNvbHZlL3Zhci9JbnRlcmZhY2VDb25mbGljdDkuamF2YQpAQCAtMCwwICsxLDIwIEBACitwdWJsaWMgY2xhc3MgSW50ZXJmYWNlQ29uZmxpY3Q5eworICBwdWJsaWMgaW50ZXJmYWNlIEF7CisgICAgaW50IGEgPSAwOworICB9CisKKyAgcHVibGljIGludGVyZmFjZSBCeworICAgIGludCBhID0gMDsKKyAgfQorCisgIHB1YmxpYyBpbnRlcmZhY2UgQ3sKKyAgICBpbnQgYSA9IDA7CisgIH0KKworICBwdWJsaWMgc3RhdGljIGNsYXNzIEQKKyAgaW1wbGVtZW50cyBBLCBCLCBDeworICAgIHZvaWQgZm9vKCl7CisgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIiIgKyA8cmVmPmEpOworICAgIH0KKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVzb2x2ZS92YXIvTG9jYWxWYXJpYWJsZTEuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVzb2x2ZS92YXIvTG9jYWxWYXJpYWJsZTEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mY2MxZjNiCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXNvbHZlL3Zhci9Mb2NhbFZhcmlhYmxlMS5qYXZhCkBAIC0wLDAgKzEsNiBAQAorY2xhc3MgVGVzdCB7CisgIHZvaWQgZm9vKCl7CisgICAgaW50IHZhbHVlOworICAgIGludCB2YWwxID0gPHJlZj52YWx1ZTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXNvbHZlL3Zhci9Qcml2YXRlT3ZlcmxvYWRpbmcuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVzb2x2ZS92YXIvUHJpdmF0ZU92ZXJsb2FkaW5nLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2I2NjEyYQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVzb2x2ZS92YXIvUHJpdmF0ZU92ZXJsb2FkaW5nLmphdmEKQEAgLTAsMCArMSwyMCBAQAorY2xhc3MgQSB7CisgICAgaW50IGk7CisKKyAgICBwdWJsaWMgdm9pZCBtZXRob2QoKSB7CisgICAgfQorICB9CisKKyAgY2xhc3MgQiBleHRlbmRzIEEgeworICAgIHByaXZhdGUgaW50IGk7CisKKyAgICBwdWJsaWMgdm9pZCBtZXRob2QoKSB7CisgICAgfQorICB9CisKKyAgY2xhc3MgQyBleHRlbmRzIEIgeworCisgICAgcHVibGljIHZvaWQgbWV0aG9kKCkgeworICAgICAgPHJlZj5pID0gMTA7CisgICAgfQorICB9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXNvbHZlL3Zhci9RdWFsaWZpZWQxLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3Jlc29sdmUvdmFyL1F1YWxpZmllZDEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ODkyMGZhCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXNvbHZlL3Zhci9RdWFsaWZpZWQxLmphdmEKQEAgLTAsMCArMSwxMCBAQAorcHVibGljIGNsYXNzIFRlc3R7CisgIGludCBhID0gMDsKK30KKworY2xhc3MgVGVzdDEgeworICBzdGF0aWMgVGVzdCB0ZXN0ID0gbmV3IFRlc3QoKTsKKyAgc3RhdGljIHsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIiIgKyB0ZXN0LjxyZWY+YSk7CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVzb2x2ZS92YXIvUXVhbGlmaWVkMi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXNvbHZlL3Zhci9RdWFsaWZpZWQyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODk4YjkzMwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVzb2x2ZS92YXIvUXVhbGlmaWVkMi5qYXZhCkBAIC0wLDAgKzEsNyBAQAorcHVibGljIGNsYXNzIFRlc3R7CisgIHN0YXRpYyBpbnQgYSA9IDA7CisKKyAgcHVibGljIGludCBmb28oKXsKKyAgICByZXR1cm4gVGVzdC48cmVmPmE7CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVzb2x2ZS92YXIvUXVhbGlmaWVkMy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXNvbHZlL3Zhci9RdWFsaWZpZWQzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjJmZTcyNgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVzb2x2ZS92YXIvUXVhbGlmaWVkMy5qYXZhCkBAIC0wLDAgKzEsNyBAQAorcHVibGljIGNsYXNzIFRlc3R7CisgIHN0YXRpYyBpbnQgYSA9IDA7CisKKyAgcHVibGljIGludCBmb28oKXsKKyAgICByZXR1cm4gbmV3IFRlc3QoKS48cmVmPmE7CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVzb2x2ZS92YXIvUXVhbGlmaWVkNC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXNvbHZlL3Zhci9RdWFsaWZpZWQ0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmZhMGEzMgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVzb2x2ZS92YXIvUXVhbGlmaWVkNC5qYXZhCkBAIC0wLDAgKzEsOSBAQAorY2xhc3MgQXsKKwlzdGF0aWMgY2xhc3MgQnsKKwkJc3RhdGljIGludCBhID0gMDsKKwl9CisKKwl7CisJCVN5c3RlbS5vdXQucHJpbnRsbigiIiArIEEuQi48cmVmPmEpOworCX0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVzb2x2ZS92YXIvUmVmSW5PdXRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXNvbHZlL3Zhci9SZWZJbk91dGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjQwMjljNQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVzb2x2ZS92YXIvUmVmSW5PdXRlci5qYXZhCkBAIC0wLDAgKzEsOCBAQAorY2xhc3MgT3V0ZXIgeworICBpbnQgaTsKKyAgY2xhc3MgSW5uZXIgeworICAgIHsKKyAgICAgIGludCBqID0gPHJlZj5pOworICAgIH0KKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVzb2x2ZS92YXIvUmVmSW5TdXBlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXNvbHZlL3Zhci9SZWZJblN1cGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWY3Y2U2NQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVzb2x2ZS92YXIvUmVmSW5TdXBlci5qYXZhCkBAIC0wLDAgKzEsOCBAQAorY2xhc3MgT3V0ZXIgeworICBpbnQgaTsKKyAgY2xhc3MgSW5uZXIgZXh0ZW5kcyBPdXRlciB7CisgICAgeworICAgICAgaW50IGogPSA8cmVmPmk7CisgICAgfQorICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXNvbHZlL3Zhci9TaGFkb3dGaWVsZHNJbkhpZXJhcmNoeS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXNvbHZlL3Zhci9TaGFkb3dGaWVsZHNJbkhpZXJhcmNoeS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ3N2Y0ZGEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3Jlc29sdmUvdmFyL1NoYWRvd0ZpZWxkc0luSGllcmFyY2h5LmphdmEKQEAgLTAsMCArMSwyMCBAQAorY2xhc3MgVGVzdFBhZ2UgZXh0ZW5kcyBXV1cgeworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIE9iamVjdCBsb2cgPSBudWxsOworCisgICAgc3RhdGljIGNsYXNzIEIgZXh0ZW5kcyBXMyB7CisgICAgICAgIHB1YmxpYyBCKCkgeworICAgICAgICAgICAgPHJlZj5sb2cuaGFzaENvZGUoKTsKKyAgICAgICAgfQorICAgIH0KK30KKworY2xhc3MgV1dXIGV4dGVuZHMgVzN7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgT2JqZWN0IGxvZyA9IG5ldyBPYmplY3QoKTsKKyAgICBwcm90ZWN0ZWQgdm9pZCBydW4oT2JqZWN0IHJ1bm5hYmxlKXt9Cit9CitjbGFzcyBXMyBleHRlbmRzIFc0IHsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBPYmplY3QgbG9nID0gbmV3IE9iamVjdCgpOworfQorY2xhc3MgVzQgeworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIE9iamVjdCBsb2cgPSBuZXcgT2JqZWN0KCk7Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3Jlc29sdmUvdmFyL1NoYWRvd0ZpZWxkc0luSGllcmFyY2h5Mi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXNvbHZlL3Zhci9TaGFkb3dGaWVsZHNJbkhpZXJhcmNoeTIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMjNjZjA5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXNvbHZlL3Zhci9TaGFkb3dGaWVsZHNJbkhpZXJhcmNoeTIuamF2YQpAQCAtMCwwICsxLDE4IEBACisKK2ludGVyZmFjZSBCYXNlIHsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBFWElUX09OX0NMT1NFID0gMzsKKworfQorY2xhc3MgRSBpbXBsZW1lbnRzIEJhc2UgeworICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRVhJVF9PTl9DTE9TRSA9IDM7CisgICB2b2lkIHNob3coKXt9Cit9CitjbGFzcyBTIHsKKyAgICBwcml2YXRlIHZvaWQgaCgpIHsKKyAgICAgICAgbmV3IEUoKSB7CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaW50IG8gPSA8cmVmPkVYSVRfT05fQ0xPU0U7CisgICAgICAgICAgICB9CisgICAgICAgIH0uc2hvdygpOworICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVzb2x2ZS92YXIvVW5yZXNvbHZlZDEuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVzb2x2ZS92YXIvVW5yZXNvbHZlZDEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YjFmMGVmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXNvbHZlL3Zhci9VbnJlc29sdmVkMS5qYXZhCkBAIC0wLDAgKzEsNSBAQAorcHVibGljIGNsYXNzIFRlc3R7CisgIHB1YmxpYyBzdGF0aWMgdm9pZCBmb28oKSB7fQorICBpbnQgYSA9IDA7CisgIGludCBiID0gPHJlZj5mb287Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3Jlc29sdmUvdmFyL1Zpc2liaWxpdHkxLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3Jlc29sdmUvdmFyL1Zpc2liaWxpdHkxLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmE4NjQ2ZgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVzb2x2ZS92YXIvVmlzaWJpbGl0eTEuamF2YQpAQCAtMCwwICsxLDkgQEAKK2NsYXNzIFRlc3QgeworICBzdGF0aWMgaW50IHZhcmlhYmxlID0gMTsKKyAgc3RhdGljIGNsYXNzIElubmVyeworICAgIGludCB2YXJpYWJsZSA9IDA7CisgICAgc3RhdGljIHZvaWQgZm9vKCl7CisgICAgICBpbnQgdmFsMSA9IDxyZWY+dmFyaWFibGU7CisgICAgfQorICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3Jlc29sdmUvdmFyL1Zpc2liaWxpdHkyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3Jlc29sdmUvdmFyL1Zpc2liaWxpdHkyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjI1ZTJjNwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVzb2x2ZS92YXIvVmlzaWJpbGl0eTIuamF2YQpAQCAtMCwwICsxLDMgQEAKK2NsYXNzIFRlc3QgeworICBpbnQgYSA9IDEgKyA8cmVmPmE7Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3Jlc29sdmUvdmFyL1Zpc2liaWxpdHkzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3Jlc29sdmUvdmFyL1Zpc2liaWxpdHkzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDliODViYQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVzb2x2ZS92YXIvVmlzaWJpbGl0eTMuamF2YQpAQCAtMCwwICsxLDEyIEBACitjbGFzcyBUZXN0IHsKKyAgc3RhdGljIGNsYXNzIEFCQ3sKKyAgICBwdWJsaWMgaW50IGkgPSAwOworICB9CisgIHN0YXRpYyB7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCIiICsgZ2V0QUJDKCkuPHJlZj5pKTsKKyAgfQorCisgIHN0YXRpYyBBQkMgZ2V0QUJDKCl7CisgICAgcmV0dXJuIG5ldyBBQkMoKTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXNvbHZlL3Zhci9WaXNpYmlsaXR5NC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXNvbHZlL3Zhci9WaXNpYmlsaXR5NC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk1OGE2MjgKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3Jlc29sdmUvdmFyL1Zpc2liaWxpdHk0LmphdmEKQEAgLTAsMCArMSw1IEBACitjbGFzcyBUZXN0IHsKKyAgc3RhdGljIHsKKyAgICBpbnQgYSA9IDEgKyA8cmVmPmE7CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVzb2x2ZS92YXIvVmlzaWJpbGl0eTUuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVzb2x2ZS92YXIvVmlzaWJpbGl0eTUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NThhNjI4Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9yZXNvbHZlL3Zhci9WaXNpYmlsaXR5NS5qYXZhCkBAIC0wLDAgKzEsNSBAQAorY2xhc3MgVGVzdCB7CisgIHN0YXRpYyB7CisgICAgaW50IGEgPSAxICsgPHJlZj5hOworICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3Jlc29sdmUvdmFyL1Zpc2liaWxpdHk2LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3Jlc29sdmUvdmFyL1Zpc2liaWxpdHk2LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjJlZDdhNQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVzb2x2ZS92YXIvVmlzaWJpbGl0eTYuamF2YQpAQCAtMCwwICsxLDExIEBACisgIGNsYXNzIEZvbyB7CisgICAgICBwcml2YXRlIHZvaWQgZigpIHsKKyAgICAgICAgICBCYXIgYmFyPW51bGw7CisgICAgICAgICAgYmFyLjxyZWY+ZigpOworICAgICAgfQorICAgICAgdm9pZCBnKCkgeworICAgICAgICAgIGYoKTsKKyAgICAgIH0KKyAgfQorICBjbGFzcyBCYXIgZXh0ZW5kcyBGb28geworICB9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3Jlc29sdmUvdmFyMTUvRHVwbGljYXRlU3RhdGljSW1wb3J0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3Jlc29sdmUvdmFyMTUvRHVwbGljYXRlU3RhdGljSW1wb3J0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmM3NDAwNQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVzb2x2ZS92YXIxNS9EdXBsaWNhdGVTdGF0aWNJbXBvcnQuamF2YQpAQCAtMCwwICsxLDggQEAKK2ltcG9ydCBzdGF0aWMgamF2YS5sYW5nLlN5c3RlbS5vdXQ7CitpbXBvcnQgc3RhdGljIGphdmEubGFuZy5TeXN0ZW0ub3V0OworCitjbGFzcyBEdXBsaWNhdGVTdGF0aWNJbXBvcnQgeworICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKyAgICAgICAgPHJlZj5vdXQucHJpbnRsbigiIik7IC8vIGNhbm5vdCByZXNvbHZlIHN5bWJvbCAnb3V0JworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3Jlc29sdmUvdmFyMTUvUmhvbWJFeHRlbmRpbmcuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvcmVzb2x2ZS92YXIxNS9SaG9tYkV4dGVuZGluZy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdhMWQ0OTkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3Jlc29sdmUvdmFyMTUvUmhvbWJFeHRlbmRpbmcuamF2YQpAQCAtMCwwICsxLDE1IEBACisvKiogQG5vaW5zcGVjdGlvbiBVbnVzZWREZWNsYXJhdGlvbiovCitpbnRlcmZhY2UgSTxUPiB7CisgICAgU3RyaW5nIFNTUyA9ICJTU1MiOworfQorCitpbnRlcmZhY2UgSUk8VD4gZXh0ZW5kcyBJPFQ+IHt9CisKK2NsYXNzIEEgaW1wbGVtZW50cyBJIHt9CisKKy8qKiBAbm9pbnNwZWN0aW9uIFVudXNlZERlY2xhcmF0aW9uKi8KK2NsYXNzIEFBIGV4dGVuZHMgQSBpbXBsZW1lbnRzIElJIHsKKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgZigpIHsKKyAgICAgICAgU3RyaW5nIHMgPSA8cmVmPlNTUzsgIC8vdGhpcyBpcyBub3QgYW1iaWdvdXMgcmVmZXJlbmNlCisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9zZWFyY2gvZmluZFVzYWdlcy9maWVsZEluSmF2YWRvYy9BLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3NlYXJjaC9maW5kVXNhZ2VzL2ZpZWxkSW5KYXZhZG9jL0EuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNTg3ZDIyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9zZWFyY2gvZmluZFVzYWdlcy9maWVsZEluSmF2YWRvYy9BLmphdmEKQEAgLTAsMCArMSw4IEBACitjbGFzcyBBeworICBzdGF0aWMgaW50IEZJRUxEOworCisgIC8qKgorICAgKiBAc2VlICNGSUVMRAorICAgKi8KKyAgdm9pZCBmb28oKXt9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9zZWFyY2gvZmluZFVzYWdlcy9pbXBsaWNpdENvbnN0cnVjdG9yVXNhZ2UvQS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9zZWFyY2gvZmluZFVzYWdlcy9pbXBsaWNpdENvbnN0cnVjdG9yVXNhZ2UvQS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdkOWRiODAKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3NlYXJjaC9maW5kVXNhZ2VzL2ltcGxpY2l0Q29uc3RydWN0b3JVc2FnZS9BLmphdmEKQEAgLTAsMCArMSwxMyBAQAorY2xhc3MgRm9vIHsKKwlwdWJsaWMgPGNhcmV0PkZvbygpIHsKKwl9CisKKwlwdWJsaWMgRm9vKFN0cmluZyB0ZXh0KSB7CisJfQorfQorY2xhc3MgQmFyIGV4dGVuZHMgRm9vIHsKKworCXB1YmxpYyBCYXIoKSB7CisJCXN1cGVyKCJoZWxsbyIpOworCX0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3NlYXJjaC9maW5kVXNhZ2VzL2xpYnJhcnlDbGFzc1VzYWdlRnJvbURlY29tcGlsZWRTb3VyY2UvVXNhZ2UuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvc2VhcmNoL2ZpbmRVc2FnZXMvbGlicmFyeUNsYXNzVXNhZ2VGcm9tRGVjb21waWxlZFNvdXJjZS9Vc2FnZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQwNDQwYmYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3NlYXJjaC9maW5kVXNhZ2VzL2xpYnJhcnlDbGFzc1VzYWdlRnJvbURlY29tcGlsZWRTb3VyY2UvVXNhZ2UuamF2YQpAQCAtMCwwICsxLDUgQEAKK2ltcG9ydCBqYXZheC5zd2luZy5KTGFiZWw7CisKK3B1YmxpYyBjbGFzcyBVc2FnZSB7CisgIEpMYWJlbCBzOworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvc2VhcmNoL2ZpbmRVc2FnZXMvbm9uQ29kZUNsYXNzVXNhZ2VzL2NvbS9Gb28uamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvc2VhcmNoL2ZpbmRVc2FnZXMvbm9uQ29kZUNsYXNzVXNhZ2VzL2NvbS9Gb28uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NTcxYzdmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9zZWFyY2gvZmluZFVzYWdlcy9ub25Db2RlQ2xhc3NVc2FnZXMvY29tL0Zvby5qYXZhCkBAIC0wLDAgKzEsNCBAQAorcGFja2FnZSBjb207CitwdWJsaWMgY2xhc3MgRm9vIHsKKyAgcHVibGljIHN0YXRpYyBjbGFzcyBCYXIge30KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3NlYXJjaC9maW5kVXNhZ2VzL292ZXJsb2FkQ29uc3RydWN0b3JzL0EuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvc2VhcmNoL2ZpbmRVc2FnZXMvb3ZlcmxvYWRDb25zdHJ1Y3RvcnMvQS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNlNjRlNjIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3NlYXJjaC9maW5kVXNhZ2VzL292ZXJsb2FkQ29uc3RydWN0b3JzL0EuamF2YQpAQCAtMCwwICsxLDkgQEAKK3B1YmxpYyBjbGFzcyBBIHsKKyAgQSAoKSB7fQorICBBIChpbnQgaSkgeworICAgIHRoaXMgKCk7CisgIH0KKyAgQSAoU3RyaW5nIHMpIHsKKyAgICB0aGlzICgwKTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9zZWFyY2gvZmluZFVzYWdlcy9vdmVybG9hZENvbnN0cnVjdG9ycy9CLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3NlYXJjaC9maW5kVXNhZ2VzL292ZXJsb2FkQ29uc3RydWN0b3JzL0IuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZWM2MjM1Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9zZWFyY2gvZmluZFVzYWdlcy9vdmVybG9hZENvbnN0cnVjdG9ycy9CLmphdmEKQEAgLTAsMCArMSw4IEBACitwdWJsaWMgY2xhc3MgQiBleHRlbmRzIEEgeworICBCICgpIHsKKyAgIHN1cGVyICgxKTsKKyAgfQorICB2b2lkIGZvbyAoKSB7CisgICBBIGEgPSBuZXcgQSAoIiIpOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9zZWFyY2gvZmluZFVzYWdlcy9wcm90ZWN0ZWRNZXRob2RJblBhY2thZ2VMb2NhbENsYXNzL2Jhci9CYXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvc2VhcmNoL2ZpbmRVc2FnZXMvcHJvdGVjdGVkTWV0aG9kSW5QYWNrYWdlTG9jYWxDbGFzcy9iYXIvQmFyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDM3ZDI5NgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvc2VhcmNoL2ZpbmRVc2FnZXMvcHJvdGVjdGVkTWV0aG9kSW5QYWNrYWdlTG9jYWxDbGFzcy9iYXIvQmFyLmphdmEKQEAgLTAsMCArMSwxMSBAQAoraW1wb3J0IGZvby4qOworCitjbGFzcyBCYXIgZXh0ZW5kcyBGb28geworICBwcm90ZWN0ZWQgdm9pZCBmb28oKTsKK30KKworY2xhc3MgR29vIGV4dGVuZHMgRm9vIHsKKyAgeworICAgIGZvbygpOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9zZWFyY2gvZmluZFVzYWdlcy9wcm90ZWN0ZWRNZXRob2RJblBhY2thZ2VMb2NhbENsYXNzL2Zvby9Gb28uamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvc2VhcmNoL2ZpbmRVc2FnZXMvcHJvdGVjdGVkTWV0aG9kSW5QYWNrYWdlTG9jYWxDbGFzcy9mb28vRm9vLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzJlZTZlNQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvc2VhcmNoL2ZpbmRVc2FnZXMvcHJvdGVjdGVkTWV0aG9kSW5QYWNrYWdlTG9jYWxDbGFzcy9mb28vRm9vLmphdmEKQEAgLTAsMCArMSw3IEBACitwYWNrYWdlIGZvbzsKKworY2xhc3MgUGFja2FnZUxvY2FsIHsKKyAgcHJvdGVjdGVkIHZvaWQgZm9vKCkge30KK30KKworcHVibGljIGNsYXNzIEZvbyBleHRlbmRzIFBhY2thZ2VMb2NhbCB7fQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvc2VhcmNoL2ZpbmRVc2FnZXMvc2libGluZ0ltcGxlbWVudC9BLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3NlYXJjaC9maW5kVXNhZ2VzL3NpYmxpbmdJbXBsZW1lbnQvQS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY5NjQ0MjcKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3NlYXJjaC9maW5kVXNhZ2VzL3NpYmxpbmdJbXBsZW1lbnQvQS5qYXZhCkBAIC0wLDAgKzEsMTIgQEAKK2NsYXNzIEEgeworICAgIHB1YmxpYyB2b2lkIGZvbyhPYmplY3QgbykgeworICAgIH0KKworICAgIGludGVyZmFjZSBJIHsKKyAgICAgICAgIHB1YmxpYyB2b2lkIGZvbyhPYmplY3Qgbyk7ICAvL1RoaXMgc2hvdWxkIGJlIGNvbnNpZGVyZWRkIGltcGxlbWVudGVkIGluIEEKKyAgICB9CisKK30KKworY2xhc3MgQiBleHRlbmRzIEEgaW1wbGVtZW50cyBBLkkgeworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvc2VhcmNoL2ZpbmRVc2FnZXMveG1sL1Rlc3QueG1sIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9zZWFyY2gvZmluZFVzYWdlcy94bWwvVGVzdC54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTM2YWE5ZgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvc2VhcmNoL2ZpbmRVc2FnZXMveG1sL1Rlc3QueG1sCkBAIC0wLDAgKzEsMyBAQAorPGRvY3VtZW50PgorICA8YWN0aW9uIGNsYXNzPSJjb20uRm9vIiAvPgorPC9kb2N1bWVudD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3NlYXJjaC9maW5kVXNhZ2VzL3htbC9jb20vRm9vLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3NlYXJjaC9maW5kVXNhZ2VzL3htbC9jb20vRm9vLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTY4OTA3NwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvc2VhcmNoL2ZpbmRVc2FnZXMveG1sL2NvbS9Gb28uamF2YQpAQCAtMCwwICsxLDIgQEAKK3BhY2thZ2UgY29tOworcHVibGljIGNsYXNzIEZvbyB7fQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvc2VhcmNoL2ZpbmRVc2FnZXMxNS9lbnVtQ29uc3RydWN0b3IvcGFjay9PdXJFbnVtLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3NlYXJjaC9maW5kVXNhZ2VzMTUvZW51bUNvbnN0cnVjdG9yL3BhY2svT3VyRW51bS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJiZDI1ZTcKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3NlYXJjaC9maW5kVXNhZ2VzMTUvZW51bUNvbnN0cnVjdG9yL3BhY2svT3VyRW51bS5qYXZhCkBAIC0wLDAgKzEsNyBAQAorcGFja2FnZSBwYWNrOworZW51bSBPdXJFbnVtIHsKKyAgQSgxMCksIEIsIEMoMjcpOworCisgIE91ckVudW0oaW50IGkpIHt9CisgIE91ckVudW0oKSB7fQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvc2VhcmNoL2ZpbmRVc2FnZXMxNS9maW5kUmF3T3ZlcnJpZGRlblVzYWdlcy9wYWNrL1Jhd092ZXJyaWRkZW4uamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvc2VhcmNoL2ZpbmRVc2FnZXMxNS9maW5kUmF3T3ZlcnJpZGRlblVzYWdlcy9wYWNrL1Jhd092ZXJyaWRkZW4uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYTZmYzdlCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9zZWFyY2gvZmluZFVzYWdlczE1L2ZpbmRSYXdPdmVycmlkZGVuVXNhZ2VzL3BhY2svUmF3T3ZlcnJpZGRlbi5qYXZhCkBAIC0wLDAgKzEsMTAgQEAKK3BhY2thZ2UgcGFjazsKKworY2xhc3MgQmFzZSB7CisgICAgdm9pZCBmb28oTGlzdDxTdHJpbmc+IGwpIHt9Cit9CisKK2NsYXNzIERlcml2ZWQgZXh0ZW5kcyBCYXNlIHsKKyAgICB2b2lkIGZvbyhMaXN0IGwpIHsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9zZWFyY2gvZmluZFVzYWdlczE1L2dlbmVyaWNNZXRob2RPdmVycmlkZXJVc2FnZXMvcGFjay9HZW5lcmljQ2xhc3MuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvc2VhcmNoL2ZpbmRVc2FnZXMxNS9nZW5lcmljTWV0aG9kT3ZlcnJpZGVyVXNhZ2VzL3BhY2svR2VuZXJpY0NsYXNzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGQ1ZTE5OAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvc2VhcmNoL2ZpbmRVc2FnZXMxNS9nZW5lcmljTWV0aG9kT3ZlcnJpZGVyVXNhZ2VzL3BhY2svR2VuZXJpY0NsYXNzLmphdmEKQEAgLTAsMCArMSwxMyBAQAorcGFja2FnZSBwYWNrOworCitjbGFzcyBHZW5lcmljQ2xhc3M8VD4geworICB2b2lkIGZvbyAoVCB0KSB7fQorfQorCitjbGFzcyBHZW5lcmljQ2xhc3NEZXJpdmVkIGV4dGVuZHMgR2VuZXJpY0NsYXNzPFN0cmluZz4geworICB2b2lkIGZvbyAoU3RyaW5nIHMpIHt9CisKKyAgdm9pZCBiYXIgKCkgeworICAgIGZvbyAoIiIpOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9zZWFyY2gvZmluZFVzYWdlczE1L2dlbmVyaWNPdmVycmlkZS9wYWNrL0dlbi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9zZWFyY2gvZmluZFVzYWdlczE1L2dlbmVyaWNPdmVycmlkZS9wYWNrL0dlbi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI5M2M2NGUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3NlYXJjaC9maW5kVXNhZ2VzMTUvZ2VuZXJpY092ZXJyaWRlL3BhY2svR2VuLmphdmEKQEAgLTAsMCArMSwxOCBAQAorcGFja2FnZSBwYWNrOworaW1wb3J0IGphdmEudXRpbC5NYXA7CisKK2NsYXNzIEJlZm9yZVJ1blRhc2sge30KK2NsYXNzIFJ1bkNvbmZpZ3VyYXRpb257fQorY2xhc3MgS2V5PFQ+IHt9CitwdWJsaWMgYWJzdHJhY3QgY2xhc3MgR2VuIHsKKyAgICBwdWJsaWMgYWJzdHJhY3QgPFQgZXh0ZW5kcyBCZWZvcmVSdW5UYXNrPiBNYXA8S2V5PFQ+LCBCZWZvcmVSdW5UYXNrPiBnZXRCZWZvcmVSdW5UYXNrcyhSdW5Db25maWd1cmF0aW9uIHNldHRpbmdzKTsKK30KKworY2xhc3MgWDIgZXh0ZW5kcyBHZW4geworICAgIE9iamVjdCBvID0gZ2V0QmVmb3JlUnVuVGFza3MobnVsbCk7CisKKyAgICBwdWJsaWMgTWFwPEtleTw/IGV4dGVuZHMgQmVmb3JlUnVuVGFzaz4sIEJlZm9yZVJ1blRhc2s+IGdldEJlZm9yZVJ1blRhc2tzKFJ1bkNvbmZpZ3VyYXRpb24gc2V0dGluZ3MpIHsKKworICAgICAgICByZXR1cm4gbnVsbDsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9zZWFyY2gvaW5oZXJpdG9ycy9ub1NjYW5KZGsvZW1wdHkudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9zZWFyY2gvaW5oZXJpdG9ycy9ub1NjYW5KZGsvZW1wdHkudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2OWRlMjkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3NlYXJjaC9pbmhlcml0b3JzL25vU2Nhbkpkay9lbXB0eS50eHQKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvc2VhcmNoL2luaGVyaXRvcnMvc2FtZU5hbWVkQ2xhc3Nlcy94L1Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvc2VhcmNoL2luaGVyaXRvcnMvc2FtZU5hbWVkQ2xhc3Nlcy94L1Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYzQ2OTFmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9zZWFyY2gvaW5oZXJpdG9ycy9zYW1lTmFtZWRDbGFzc2VzL3gvVGVzdC5qYXZhCkBAIC0wLDAgKzEsMTggQEAKK3BhY2thZ2UgeDsKKworcHVibGljIGNsYXNzIFRlc3Q8VD4geworICBwdWJsaWMgdm9pZCBmb28oVCB0KSB7CisgICAgICAvL1RyYWNrZWQgZjsKKyAgfQorfQorCitjbGFzcyBHb288VD4gZXh0ZW5kcyBUZXN0PFQ+IHsKKyAgICBwdWJsaWMgdm9pZCBmb28oVCB0KSB7fQorfQorY2xhc3MgR29vICB7CisKK30KKworY2xhc3MgWm9vIGV4dGVuZHMgR29vIHsKKyAgICBwdWJsaWMgdm9pZCBmb28oT2JqZWN0IHQpIHt9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3NlYXJjaC9pbmhlcml0b3JzL3Njb3BlL0Rlcml2ZWQyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3NlYXJjaC9pbmhlcml0b3JzL3Njb3BlL0Rlcml2ZWQyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDQzMTgxYgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvc2VhcmNoL2luaGVyaXRvcnMvc2NvcGUvRGVyaXZlZDIuamF2YQpAQCAtMCwwICsxLDYgQEAKKworaW1wb3J0IHBhY2sxLkRlcml2ZWQxOworaW1wb3J0IHBhY2sxLkJhc2U7CisKK3B1YmxpYyBjbGFzcyBEZXJpdmVkMiBleHRlbmRzIEJhc2V7Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3NlYXJjaC9pbmhlcml0b3JzL3Njb3BlL3BhY2sxL0Jhc2UuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvc2VhcmNoL2luaGVyaXRvcnMvc2NvcGUvcGFjazEvQmFzZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEwMTA0ZmMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3NlYXJjaC9pbmhlcml0b3JzL3Njb3BlL3BhY2sxL0Jhc2UuamF2YQpAQCAtMCwwICsxLDQgQEAKK3BhY2thZ2UgcGFjazE7CisKK3B1YmxpYyBjbGFzcyBCYXNlIHsKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvc2VhcmNoL2luaGVyaXRvcnMvc2NvcGUvcGFjazEvRGVyaXZlZDEuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvc2VhcmNoL2luaGVyaXRvcnMvc2NvcGUvcGFjazEvRGVyaXZlZDEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMDVhM2Q5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9zZWFyY2gvaW5oZXJpdG9ycy9zY29wZS9wYWNrMS9EZXJpdmVkMS5qYXZhCkBAIC0wLDAgKzEsNCBAQAorcGFja2FnZSBwYWNrMTsKKworcHVibGljIGNsYXNzIERlcml2ZWQxIGV4dGVuZHMgQmFzZXsKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvc2VhcmNoL2luaGVyaXRvcnMvc2NvcGUvcGFjazEvRGVyaXZlZDMuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvc2VhcmNoL2luaGVyaXRvcnMvc2NvcGUvcGFjazEvRGVyaXZlZDMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MWMyMTcwCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9zZWFyY2gvaW5oZXJpdG9ycy9zY29wZS9wYWNrMS9EZXJpdmVkMy5qYXZhCkBAIC0wLDAgKzEsNiBAQAorcGFja2FnZSBwYWNrMTsKKworaW1wb3J0IERlcml2ZWQyOworCitwdWJsaWMgY2xhc3MgRGVyaXZlZDMgZXh0ZW5kcyBEZXJpdmVkMnsKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvc2VhcmNoL3BsYWluVGV4dFVzYWdlcy9zaW1wbGUvVGVzdC50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3NlYXJjaC9wbGFpblRleHRVc2FnZXMvc2ltcGxlL1Rlc3QudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBiMzNhYTAKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3NlYXJjaC9wbGFpblRleHRVc2FnZXMvc2ltcGxlL1Rlc3QudHh0CkBAIC0wLDAgKzEsMyBAQAorYWFhIGNvbS5Gb28gYmJiCithYWFjb20uRm9vCithYWEgY29tLkZvb2JiYgpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9zZWFyY2gvcGxhaW5UZXh0VXNhZ2VzL3htbE91dE9mU2NvcGUvY29tL0Zvby5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9zZWFyY2gvcGxhaW5UZXh0VXNhZ2VzL3htbE91dE9mU2NvcGUvY29tL0Zvby5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFkMGMzZjQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3NlYXJjaC9wbGFpblRleHRVc2FnZXMveG1sT3V0T2ZTY29wZS9jb20vRm9vLmphdmEKQEAgLTAsMCArMSwzIEBACitwYWNrYWdlIGNvbTsKKworcHVibGljIGNsYXNzIEZvbyB7fQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvc2VhcmNoL3BsYWluVGV4dFVzYWdlcy94bWxPdXRPZlNjb3BlL3Jlc291cmNlcy9UZXN0LnhtbCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvc2VhcmNoL3BsYWluVGV4dFVzYWdlcy94bWxPdXRPZlNjb3BlL3Jlc291cmNlcy9UZXN0LnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMzZhYTlmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9zZWFyY2gvcGxhaW5UZXh0VXNhZ2VzL3htbE91dE9mU2NvcGUvcmVzb3VyY2VzL1Rlc3QueG1sCkBAIC0wLDAgKzEsMyBAQAorPGRvY3VtZW50PgorICA8YWN0aW9uIGNsYXNzPSJjb20uRm9vIiAvPgorPC9kb2N1bWVudD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3NlYXJjaC9zZWFyY2hJbkxpYnMvbGliL2NsYXNzZXMvTGlicmFyeUNsYXNzMS5jbGFzcyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvc2VhcmNoL3NlYXJjaEluTGlicy9saWIvY2xhc3Nlcy9MaWJyYXJ5Q2xhc3MxLmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMxMTQ4YjAKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3NlYXJjaC9zZWFyY2hJbkxpYnMvbGliL2NsYXNzZXMvTGlicmFyeUNsYXNzMS5jbGFzcwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3NlYXJjaC9zZWFyY2hJbkxpYnMvbGliL2NsYXNzZXMvTGlicmFyeUNsYXNzMi5jbGFzcyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvc2VhcmNoL3NlYXJjaEluTGlicy9saWIvY2xhc3Nlcy9MaWJyYXJ5Q2xhc3MyLmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZiZjkzZDAKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3NlYXJjaC9zZWFyY2hJbkxpYnMvbGliL2NsYXNzZXMvTGlicmFyeUNsYXNzMi5jbGFzcwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3NlYXJjaC9zZWFyY2hJbkxpYnMvbGliL3NyYy9MaWJyYXJ5Q2xhc3MxLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3NlYXJjaC9zZWFyY2hJbkxpYnMvbGliL3NyYy9MaWJyYXJ5Q2xhc3MxLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjJiYjVmMwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvc2VhcmNoL3NlYXJjaEluTGlicy9saWIvc3JjL0xpYnJhcnlDbGFzczEuamF2YQpAQCAtMCwwICsxLDQgQEAKK2NsYXNzIExpYnJhcnlDbGFzczF7CisgIExpYnJhcnlDbGFzczIgbGliQ2xhc3MyOworICBQcm9qZWN0Q2xhc3MgcHJvamVjdENsYXNzOyAvLyBzaG91bGQgbm90IGZpbmQgdGhpcyEKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3NlYXJjaC9zZWFyY2hJbkxpYnMvbGliL3NyYy9MaWJyYXJ5Q2xhc3MyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3NlYXJjaC9zZWFyY2hJbkxpYnMvbGliL3NyYy9MaWJyYXJ5Q2xhc3MyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjEzNmVmMgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvc2VhcmNoL3NlYXJjaEluTGlicy9saWIvc3JjL0xpYnJhcnlDbGFzczIuamF2YQpAQCAtMCwwICsxLDMgQEAKK2NsYXNzIExpYnJhcnlDbGFzczJ7CisgIExpYnJhcnlDbGFzczEgbGliQ2xhc3MxOworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvc2VhcmNoL3NlYXJjaEluTGlicy9wcm9qZWN0L1Byb2plY3RDbGFzcy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9zZWFyY2gvc2VhcmNoSW5MaWJzL3Byb2plY3QvUHJvamVjdENsYXNzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGU4ZTA3ZQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvc2VhcmNoL3NlYXJjaEluTGlicy9wcm9qZWN0L1Byb2plY3RDbGFzcy5qYXZhCkBAIC0wLDAgKzEsNCBAQAorY2xhc3MgUHJvamVjdENsYXNzeworICBQcm9qZWN0Q2xhc3MgYUNsYXNzOworICBMaWJyYXJ5Q2xhc3MxIGxpYkNsYXNzMTsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3NlYXJjaC9zZWFyY2hJbkxpYnMvcHJvamVjdC9zcmMyL1Byb2plY3RDbGFzczIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvc2VhcmNoL3NlYXJjaEluTGlicy9wcm9qZWN0L3NyYzIvUHJvamVjdENsYXNzMi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI3YTkyODUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3NlYXJjaC9zZWFyY2hJbkxpYnMvcHJvamVjdC9zcmMyL1Byb2plY3RDbGFzczIuamF2YQpAQCAtMCwwICsxLDMgQEAKK2NsYXNzIFByb2plY3RDbGFzczJ7CisgIFByb2plY3RDbGFzczIgYUNsYXNzOworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvc2VhcmNoL3VwZGF0ZUNhY2hlLzEuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvc2VhcmNoL3VwZGF0ZUNhY2hlLzEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZWEyMDYxCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9zZWFyY2gvdXBkYXRlQ2FjaGUvMS5qYXZhCkBAIC0wLDAgKzEsNCBAQAorY2xhc3MgQ2xhc3MxeworICBFeGNlcHRpb24gZTsKKyAgU3RyaW5nIHM7IC8vbmV3dG9kbworfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9zZWFyY2gvdXBkYXRlQ2FjaGUvYURpci8yLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3NlYXJjaC91cGRhdGVDYWNoZS9hRGlyLzIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZjIzYWYyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9zZWFyY2gvdXBkYXRlQ2FjaGUvYURpci8yLmphdmEKQEAgLTAsMCArMSw0IEBACitjbGFzcyBCeworICBFeGNlcHRpb24gZTsKKyAgVGhyZWFkIHRocmVhZDsgLy90b2RvCit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3Nob3J0ZW5DbGFzc1JlZnMvU0NSMjIzNjguamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvc2hvcnRlbkNsYXNzUmVmcy9TQ1IyMjM2OC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUyNWEzZDcKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3Nob3J0ZW5DbGFzc1JlZnMvU0NSMjIzNjguamF2YQpAQCAtMCwwICsxLDUgQEAKK2NsYXNzIFggeworICB2b2lkIG1ldGhvZCgpIHsKKyAgICBqYXZhLnV0aWwuTGlzdDwKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9zaG9ydGVuQ2xhc3NSZWZzL1NDUjIyMzY4X2FmdGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3Nob3J0ZW5DbGFzc1JlZnMvU0NSMjIzNjhfYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mM2U2MzM4Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9zaG9ydGVuQ2xhc3NSZWZzL1NDUjIyMzY4X2FmdGVyLmphdmEKQEAgLTAsMCArMSw3IEBACitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK2NsYXNzIFggeworICB2b2lkIG1ldGhvZCgpIHsKKyAgICBMaXN0PAorICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3Nob3J0ZW5DbGFzc1JlZnMvU0NSMzcyNTQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvc2hvcnRlbkNsYXNzUmVmcy9TQ1IzNzI1NC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRhNDkyOTcKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3Nob3J0ZW5DbGFzc1JlZnMvU0NSMzcyNTQuamF2YQpAQCAtMCwwICsxLDE4IEBACitjbGFzcyBQYXJlbnR7CisKKyAgICBwcm90ZWN0ZWQgQ2hpbGQgY3JlYXRlQ2hpbGQoKSB7CisgICAgICAgIHJldHVybiBudWxsOworICAgIH0KKworICAgIHN0YXRpYyBjbGFzcyBDaGlsZCB7CisgICAgfQorfQorCitjbGFzcyBTdWJDbGFzcyBleHRlbmRzIFBhcmVudCB7CisgICAgIC8vRG8gbm90IHNob3J0ZW4gUGFyZW50LkNoaWxkIHRvIENoaWxkCisgICAgIHByb3RlY3RlZCBQYXJlbnQuQ2hpbGQgY3JlYXRlQ2hpbGQoKSB7CisgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgIH0KKworICAgIGNsYXNzIENoaWxkIGV4dGVuZHMgUGFyZW50LkNoaWxkIHt9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3Nob3J0ZW5DbGFzc1JlZnMvU0NSMzcyNTRfYWZ0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvc2hvcnRlbkNsYXNzUmVmcy9TQ1IzNzI1NF9hZnRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRhNDkyOTcKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3Nob3J0ZW5DbGFzc1JlZnMvU0NSMzcyNTRfYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDE4IEBACitjbGFzcyBQYXJlbnR7CisKKyAgICBwcm90ZWN0ZWQgQ2hpbGQgY3JlYXRlQ2hpbGQoKSB7CisgICAgICAgIHJldHVybiBudWxsOworICAgIH0KKworICAgIHN0YXRpYyBjbGFzcyBDaGlsZCB7CisgICAgfQorfQorCitjbGFzcyBTdWJDbGFzcyBleHRlbmRzIFBhcmVudCB7CisgICAgIC8vRG8gbm90IHNob3J0ZW4gUGFyZW50LkNoaWxkIHRvIENoaWxkCisgICAgIHByb3RlY3RlZCBQYXJlbnQuQ2hpbGQgY3JlYXRlQ2hpbGQoKSB7CisgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgIH0KKworICAgIGNsYXNzIENoaWxkIGV4dGVuZHMgUGFyZW50LkNoaWxkIHt9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3N0dWIvU3R1YlBlcmZvcm1hbmNlVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9zdHViL1N0dWJQZXJmb3JtYW5jZVRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZmQ4N2U4Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS9zdHViL1N0dWJQZXJmb3JtYW5jZVRlc3QuamF2YQpAQCAtMCwwICsxLDU3NyBAQAorLy8gR0VORVJBVEVEIEFVVE9NQVRJQ0FMTFkuIERPIE5PVCBBTFRFUiBQTEVBU0UKK3B1YmxpYyBjbGFzcyBMZXZlbDJOZXdHZW5lcmF0aW9uIHsKKyAgIHB1YmxpYyBzdGF0aWMgY2xhc3MgTm9kZSB7IH0KKyAgIHB1YmxpYyBzdGF0aWMgY2xhc3MgTm9kZUxldmVsMV8wMDAwIGV4dGVuZHMgTm9kZXsgfQorICAgcHVibGljIHN0YXRpYyBjbGFzcyBOb2RlTGV2ZWwxXzAwMDEgZXh0ZW5kcyBOb2RleyB9CisgICBwdWJsaWMgc3RhdGljIGNsYXNzIE5vZGVMZXZlbDFfMDAxMCBleHRlbmRzIE5vZGV7IH0KKyAgIHB1YmxpYyBzdGF0aWMgY2xhc3MgTm9kZUxldmVsMV8wMDExIGV4dGVuZHMgTm9kZXsgfQorICAgcHVibGljIHN0YXRpYyBjbGFzcyBOb2RlTGV2ZWwxXzAxMDAgZXh0ZW5kcyBOb2RleyB9CisgICBwdWJsaWMgc3RhdGljIGNsYXNzIE5vZGVMZXZlbDFfMDEwMSBleHRlbmRzIE5vZGV7IH0KKyAgIHB1YmxpYyBzdGF0aWMgY2xhc3MgTm9kZUxldmVsMV8wMTEwIGV4dGVuZHMgTm9kZXsgfQorICAgcHVibGljIHN0YXRpYyBjbGFzcyBOb2RlTGV2ZWwxXzAxMTEgZXh0ZW5kcyBOb2RleyB9CisgICBwdWJsaWMgc3RhdGljIGNsYXNzIE5vZGVMZXZlbDFfMTAwMCBleHRlbmRzIE5vZGV7IH0KKyAgIHB1YmxpYyBzdGF0aWMgY2xhc3MgTm9kZUxldmVsMV8xMDAxIGV4dGVuZHMgTm9kZXsgfQorICAgcHVibGljIHN0YXRpYyBjbGFzcyBOb2RlTGV2ZWwxXzEwMTAgZXh0ZW5kcyBOb2RleyB9CisgICBwdWJsaWMgc3RhdGljIGNsYXNzIE5vZGVMZXZlbDFfMTAxMSBleHRlbmRzIE5vZGV7IH0KKyAgIHB1YmxpYyBzdGF0aWMgY2xhc3MgTm9kZUxldmVsMV8xMTAwIGV4dGVuZHMgTm9kZXsgfQorICAgcHVibGljIHN0YXRpYyBjbGFzcyBOb2RlTGV2ZWwxXzExMDEgZXh0ZW5kcyBOb2RleyB9CisgICBwdWJsaWMgc3RhdGljIGNsYXNzIE5vZGVMZXZlbDFfMTExMCBleHRlbmRzIE5vZGV7IH0KKyAgIHB1YmxpYyBzdGF0aWMgY2xhc3MgTm9kZUxldmVsMV8xMTExIGV4dGVuZHMgTm9kZXsgfQorCisgICBwdWJsaWMgc3RhdGljIGludCBnZXROdW1lcmljKE5vZGUgYU5vZGUpIHsKKyAgICAgICAgICAgIGlmIChhTm9kZSBpbnN0YW5jZW9mIE5vZGVMZXZlbDFfMDAwMCkgcmV0dXJuIDA7CisgICAgICAgZWxzZSBpZiAoYU5vZGUgaW5zdGFuY2VvZiBOb2RlTGV2ZWwxXzAwMDEpIHJldHVybiAxOworICAgICAgIGVsc2UgaWYgKGFOb2RlIGluc3RhbmNlb2YgTm9kZUxldmVsMV8wMDEwKSByZXR1cm4gMjsKKyAgICAgICBlbHNlIGlmIChhTm9kZSBpbnN0YW5jZW9mIE5vZGVMZXZlbDFfMDAxMSkgcmV0dXJuIDM7CisgICAgICAgZWxzZSBpZiAoYU5vZGUgaW5zdGFuY2VvZiBOb2RlTGV2ZWwxXzAxMDApIHJldHVybiA0OworICAgICAgIGVsc2UgaWYgKGFOb2RlIGluc3RhbmNlb2YgTm9kZUxldmVsMV8wMTAxKSByZXR1cm4gNTsKKyAgICAgICBlbHNlIGlmIChhTm9kZSBpbnN0YW5jZW9mIE5vZGVMZXZlbDFfMDExMCkgcmV0dXJuIDY7CisgICAgICAgZWxzZSBpZiAoYU5vZGUgaW5zdGFuY2VvZiBOb2RlTGV2ZWwxXzAxMTEpIHJldHVybiA3OworICAgICAgIGVsc2UgaWYgKGFOb2RlIGluc3RhbmNlb2YgTm9kZUxldmVsMV8xMDAwKSByZXR1cm4gODsKKyAgICAgICBlbHNlIGlmIChhTm9kZSBpbnN0YW5jZW9mIE5vZGVMZXZlbDFfMTAwMSkgcmV0dXJuIDk7CisgICAgICAgZWxzZSBpZiAoYU5vZGUgaW5zdGFuY2VvZiBOb2RlTGV2ZWwxXzEwMTApIHJldHVybiAxMDsKKyAgICAgICBlbHNlIGlmIChhTm9kZSBpbnN0YW5jZW9mIE5vZGVMZXZlbDFfMTAxMSkgcmV0dXJuIDExOworICAgICAgIGVsc2UgaWYgKGFOb2RlIGluc3RhbmNlb2YgTm9kZUxldmVsMV8xMTAwKSByZXR1cm4gMTI7CisgICAgICAgZWxzZSBpZiAoYU5vZGUgaW5zdGFuY2VvZiBOb2RlTGV2ZWwxXzExMDEpIHJldHVybiAxMzsKKyAgICAgICBlbHNlIGlmIChhTm9kZSBpbnN0YW5jZW9mIE5vZGVMZXZlbDFfMTExMCkgcmV0dXJuIDE0OworICAgICAgIGVsc2UgaWYgKGFOb2RlIGluc3RhbmNlb2YgTm9kZUxldmVsMV8xMTExKSByZXR1cm4gMTU7CisgICAgICAgZWxzZSByZXR1cm4gLTE7CisgICB9CisKKyAgIHByaXZhdGUgc3RhdGljIGZpbmFsIE5vZGUgXzAgPSBuZXcgTm9kZUxldmVsMV8wMDAwKCk7CisgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBOb2RlIF8xID0gbmV3IE5vZGVMZXZlbDFfMDAwMSgpOworICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgTm9kZSBfMiA9IG5ldyBOb2RlTGV2ZWwxXzAwMTAoKTsKKyAgIHByaXZhdGUgc3RhdGljIGZpbmFsIE5vZGUgXzMgPSBuZXcgTm9kZUxldmVsMV8wMDExKCk7CisgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBOb2RlIF80ID0gbmV3IE5vZGVMZXZlbDFfMDEwMCgpOworICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgTm9kZSBfNSA9IG5ldyBOb2RlTGV2ZWwxXzAxMDEoKTsKKyAgIHByaXZhdGUgc3RhdGljIGZpbmFsIE5vZGUgXzYgPSBuZXcgTm9kZUxldmVsMV8wMTEwKCk7CisgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBOb2RlIF83ID0gbmV3IE5vZGVMZXZlbDFfMDExMSgpOworICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgTm9kZSBfOCA9IG5ldyBOb2RlTGV2ZWwxXzEwMDAoKTsKKyAgIHByaXZhdGUgc3RhdGljIGZpbmFsIE5vZGUgXzkgPSBuZXcgTm9kZUxldmVsMV8xMDAxKCk7CisgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBOb2RlIF9hID0gbmV3IE5vZGVMZXZlbDFfMTAxMCgpOworICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgTm9kZSBfYiA9IG5ldyBOb2RlTGV2ZWwxXzEwMTEoKTsKKyAgIHByaXZhdGUgc3RhdGljIGZpbmFsIE5vZGUgX2MgPSBuZXcgTm9kZUxldmVsMV8xMTAwKCk7CisgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBOb2RlIF9kID0gbmV3IE5vZGVMZXZlbDFfMTEwMSgpOworICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgTm9kZSBfZSA9IG5ldyBOb2RlTGV2ZWwxXzExMTAoKTsKKyAgIHByaXZhdGUgc3RhdGljIGZpbmFsIE5vZGUgX2YgPSBuZXcgTm9kZUxldmVsMV8xMTExKCk7CisKKyAgIHByaXZhdGUgc3RhdGljIGZpbmFsIE5vZGVbXSBQUkVDQUxDVUxBVEVEID0geworICAgICAgXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzEsXzAsXzAsXzAsXzEsXzAsXzEsXzEsXzEsXzAsXzAsXzAsXzAsXzAsXzIsXzAsXzMsXzAsXzAsXzAsXzEsXzAsXzMsXzEsXzMsXzAsXzAsXzAsXzEsXzAsXzMsXzEsXzMsXzAsXzEsXzEsXzAsXzEsXzMsXzEsXzIsXzAsXzIsXzAsXzMsXzIsXzEsXzMsXzEsXzAsXzMsXzEsXzIsXzMsXzEsXzMsXzAsXzAsXzAsXzAsXzAsXzAsXzIsXzAsXzMsXzAsXzAsXzAsXzEsXzAsXzMsXzEsXzMsXzAsXzIsXzAsXzIsXzIsXzAsXzIsXzEsXzAsXzIsXzAsXzMsXzIsXzEsXzMsXzEsXzAsXzIsXzAsXzMsXzIsXzEsXzMsXzEsXzAsXzMsXzEsXzIsXzMsXzEsXzMsXzAsXzIsXzAsXzIsXzEsXzAsXzEsXzEsXzEsXzIsXzEsXzMsXzAsXzEsXzEsXzEsXzAsCisgICAgICBfMCxfMCxfMCxfMSxfMCxfMyxfMSxfMyxfMCxfMSxfMSxfMCxfOSxfYixfOSxfYSxfMCxfMixfMCxfMyxfMixfMyxfMyxfMyxfMCxfMyxfMSxfMixfYixfYixfYixfYSxfMCxfMyxfMSxfMixfMyxfMyxfMyxfMixfMSxfMixfMCxfMixfYixfYSxfYSxfYSxfMixfMyxfMyxfMixfMyxfMSxfMyxfMCxfMyxfMixfMixfMixfYixfOCxfYSxfOCxfMCxfMixfMCxfMyxfNixfNyxfNyxfNyxfMCxfMyxfMSxfMixfZixfZixfZixfZSxfMixfMixfMixfMyxfNixfNSxfNyxfNSxfMixfMyxfMyxfMixfZixfZCxfZixfYyxfMixfMyxfMyxfMixfNyxfNSxfNyxfNCxfMyxfMixfMixfMixfZixfYyxfZSxfYyxfMixfMSxfMyxfMCxfNSxfNSxfNSxfNCxfMyxfMCxfMixfMCxfZCxfYyxfYyxfYywKKyAgICAgIF8wLF8wLF8wLF8wLF8wLF8yLF8wLF8zLF8wLF8wLF8wLF8xLF8wLF8zLF8xLF8zLF8wLF8yLF8wLF8yLF8yLF8wLF8yLF8xLF8wLF8yLF8wLF8zLF8yLF8xLF8zLF8xLF8wLF8yLF8wLF8zLF8yLF8xLF8zLF8xLF8wLF8zLF8xLF8yLF8zLF8xLF8zLF8wLF8yLF8wLF8yLF8xLF8wLF8xLF8xLF8xLF8yLF8xLF8zLF8wLF8xLF8xLF8xLF8wLF8wLF8yLF8wLF8yLF82LF80LF82LF81LF8wLF8yLF8wLF8zLF82LF81LF83LF81LF8yLF8wLF8yLF8wLF80LF80LF80LF81LF8yLF8wLF8yLF8xLF80LF81LF81LF81LF8yLF8wLF8yLF8xLF80LF81LF81LF81LF8yLF8xLF8zLF8wLF81LF81LF81LF80LF8wLF8wLF8wLF8xLF80LF81LF81LF81LF8wLF8xLF8xLF8wLF81LF81LF81LF80LAorICAgICAgXzAsXzIsXzAsXzMsXzYsXzcsXzcsXzcsXzAsXzMsXzEsXzIsX2YsX2YsX2YsX2UsXzIsXzIsXzIsXzMsXzYsXzUsXzcsXzUsXzIsXzMsXzMsXzIsX2YsX2QsX2YsX2MsXzIsXzMsXzMsXzIsXzcsXzUsXzcsXzQsXzMsXzIsXzIsXzIsX2YsX2MsX2UsX2MsXzIsXzEsXzMsXzAsXzUsXzUsXzUsXzQsXzMsXzAsXzIsXzAsX2QsX2MsX2MsX2MsXzYsXzYsXzYsXzcsXzIsXzEsXzMsXzEsXzYsXzcsXzcsXzYsX2IsXzksX2IsXzgsXzYsXzQsXzYsXzUsXzAsXzEsXzEsXzEsXzYsXzUsXzcsXzQsXzksXzksXzksXzgsXzYsXzUsXzcsXzQsXzEsXzEsXzEsXzAsXzcsXzQsXzYsXzQsXzksXzgsXzgsXzgsXzQsXzUsXzUsXzQsXzEsXzEsXzEsXzAsXzUsXzQsXzQsXzQsXzksXzgsXzgsXzgsCisgICAgICBfMCxfMCxfMCxfMSxfMCxfMyxfMSxfMyxfMCxfMSxfMSxfMCxfOSxfYixfOSxfYSxfMCxfMixfMCxfMyxfMixfMSxfMyxfMSxfMCxfMyxfMSxfMixfYixfOSxfYixfOCxfMCxfMyxfMSxfMixfMyxfMSxfMyxfMCxfMSxfMixfMCxfMixfYixfOCxfYSxfOCxfMixfMSxfMyxfMCxfMSxfMSxfMSxfMCxfMyxfMCxfMixfMCxfOSxfOCxfOCxfOCxfMCxfMixfMCxfMyxfNixfNSxfNyxfNSxfMCxfMyxfMSxfMixfZixfZCxfZixfYyxfMixfMCxfMixfMSxfNCxfNSxfNSxfNSxfMixfMSxfMyxfMCxfZCxfZCxfZCxfYyxfMixfMSxfMyxfMCxfNSxfNSxfNSxfNCxfMyxfMCxfMixfMCxfZCxfYyxfYyxfYyxfMCxfMSxfMSxfMCxfNSxfNSxfNSxfNCxfMSxfMCxfMCxfMCxfZCxfYyxfYyxfYywKKyAgICAgIF8wLF8zLF8xLF8yLF9mLF9mLF9mLF9lLF85LF9hLF84LF9hLF83LF82LF82LF82LF8yLF8zLF8zLF8yLF9mLF9kLF9mLF9jLF9iLF9hLF9hLF9hLF83LF80LF82LF80LF8zLF8yLF8yLF8yLF9mLF9jLF9lLF9jLF9hLF9hLF9hLF9hLF82LF80LF82LF80LF8zLF8wLF8yLF8wLF9kLF9jLF9jLF9jLF9hLF84LF9hLF84LF80LF80LF80LF80LF82LF83LF83LF82LF9mLF9kLF9mLF9jLF9mLF9lLF9lLF9lLF83LF80LF82LF80LF82LF81LF83LF80LF9kLF9kLF9kLF9jLF9mLF9jLF9lLF9jLF81LF80LF80LF80LF83LF80LF82LF80LF9kLF9jLF9jLF9jLF9lLF9jLF9lLF9jLF80LF80LF80LF80LF81LF80LF80LF80LF9kLF9jLF9jLF9jLF9jLF9jLF9jLF9jLF80LF80LF80LF80LAorICAgICAgXzAsXzIsXzAsXzMsXzYsXzUsXzcsXzUsXzAsXzMsXzEsXzIsX2YsX2QsX2YsX2MsXzIsXzAsXzIsXzEsXzQsXzUsXzUsXzUsXzIsXzEsXzMsXzAsX2QsX2QsX2QsX2MsXzIsXzEsXzMsXzAsXzUsXzUsXzUsXzQsXzMsXzAsXzIsXzAsX2QsX2MsX2MsX2MsXzAsXzEsXzEsXzAsXzUsXzUsXzUsXzQsXzEsXzAsXzAsXzAsX2QsX2MsX2MsX2MsXzYsXzQsXzYsXzUsXzQsXzUsXzUsXzUsXzYsXzUsXzcsXzQsX2QsX2QsX2QsX2MsXzQsXzQsXzQsXzUsXzQsXzUsXzUsXzUsXzQsXzUsXzUsXzQsX2QsX2QsX2QsX2MsXzQsXzUsXzUsXzQsXzUsXzUsXzUsXzQsXzUsXzQsXzQsXzQsX2QsX2MsX2MsX2MsXzQsXzUsXzUsXzQsXzUsXzUsXzUsXzQsXzUsXzQsXzQsXzQsX2QsX2MsX2MsX2MsCisgICAgICBfNixfNyxfNyxfNixfZixfZCxfZixfYyxfZixfZSxfZSxfZSxfNyxfNCxfNixfNCxfNixfNSxfNyxfNCxfZCxfZCxfZCxfYyxfZixfYyxfZSxfYyxfNSxfNCxfNCxfNCxfNyxfNCxfNixfNCxfZCxfYyxfYyxfYyxfZSxfYyxfZSxfYyxfNCxfNCxfNCxfNCxfNSxfNCxfNCxfNCxfZCxfYyxfYyxfYyxfYyxfYyxfYyxfYyxfNCxfNCxfNCxfNCxfNixfNSxfNyxfNCxfOSxfOSxfOSxfOCxfZixfYyxfZSxfYyxfMSxfMCxfMCxfMCxfNCxfNSxfNSxfNCxfOSxfOSxfOSxfOCxfZCxfYyxfYyxfYyxfMSxfMCxfMCxfMCxfNSxfNCxfNCxfNCxfOSxfOCxfOCxfOCxfYyxfYyxfYyxfYyxfMCxfMCxfMCxfMCxfNSxfNCxfNCxfNCxfOSxfOCxfOCxfOCxfYyxfYyxfYyxfYyxfMCxfMCxfMCxfMCwKKyAgICAgIF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8xLF8wLF8wLF8wLF8xLF8wLF8xLF8xLF8xLF8wLF8wLF8wLF8wLF8wLF8yLF8wLF8zLF8wLF8wLF8wLF8xLF8wLF8zLF8xLF8zLF8wLF8wLF8wLF8xLF8wLF8zLF8xLF8zLF8wLF8xLF8xLF8wLF8xLF8zLF8xLF8yLF8wLF8yLF8wLF8zLF8yLF8xLF8zLF8xLF8wLF8zLF8xLF8yLF8zLF8xLF8zLF8wLF8wLF8wLF8wLF8wLF80LF82LF80LF83LF8wLF8wLF8wLF8xLF80LF83LF81LF83LF8wLF8yLF8wLF8yLF82LF80LF82LF81LF8wLF8yLF8wLF8zLF82LF81LF83LF81LF8wLF8yLF8wLF8zLF82LF81LF83LF81LF8wLF8zLF8xLF8yLF83LF81LF83LF80LF8yLF8wLF8yLF8xLF80LF81LF81LF81LF8yLF8xLF8zLF8wLF81LF81LF81LF80LAorICAgICAgXzAsXzAsXzAsXzEsXzQsXzcsXzUsXzcsXzAsXzEsXzEsXzAsX2QsX2YsX2QsX2UsXzAsXzIsXzAsXzMsXzYsXzcsXzcsXzcsXzAsXzMsXzEsXzIsX2YsX2YsX2YsX2UsXzAsXzMsXzEsXzIsXzcsXzcsXzcsXzYsXzEsXzIsXzAsXzIsX2YsX2UsX2UsX2UsXzIsXzMsXzMsXzIsXzcsXzUsXzcsXzQsXzMsXzIsXzIsXzIsX2YsX2MsX2UsX2MsXzQsXzYsXzQsXzcsXzIsXzMsXzMsXzMsXzQsXzcsXzUsXzYsX2IsX2IsX2IsX2EsXzYsXzYsXzYsXzcsXzIsXzEsXzMsXzEsXzYsXzcsXzcsXzYsX2IsXzksX2IsXzgsXzYsXzcsXzcsXzYsXzMsXzEsXzMsXzAsXzcsXzYsXzYsXzYsX2IsXzgsX2EsXzgsXzYsXzUsXzcsXzQsXzEsXzEsXzEsXzAsXzcsXzQsXzYsXzQsXzksXzgsXzgsXzgsCisgICAgICBfMCxfMCxfMCxfMCxfNCxfNixfNCxfNyxfMCxfMCxfMCxfMSxfNCxfNyxfNSxfNyxfMCxfMixfMCxfMixfNixfNCxfNixfNSxfMCxfMixfMCxfMyxfNixfNSxfNyxfNSxfMCxfMixfMCxfMyxfNixfNSxfNyxfNSxfMCxfMyxfMSxfMixfNyxfNSxfNyxfNCxfMixfMCxfMixfMSxfNCxfNSxfNSxfNSxfMixfMSxfMyxfMCxfNSxfNSxfNSxfNCxfNCxfNixfNCxfNixfMixfMCxfMixfMSxfNCxfNixfNCxfNyxfMixfMSxfMyxfMSxfNixfNCxfNixfNCxfMCxfMCxfMCxfMSxfNixfNCxfNixfNSxfMCxfMSxfMSxfMSxfNixfNCxfNixfNSxfMCxfMSxfMSxfMSxfNixfNSxfNyxfNCxfMSxfMSxfMSxfMCxfNCxfNCxfNCxfNSxfMCxfMSxfMSxfMSxfNCxfNSxfNSxfNCxfMSxfMSxfMSxfMCwKKyAgICAgIF80LF82LF80LF83LF8yLF8zLF8zLF8zLF80LF83LF81LF82LF9iLF9iLF9iLF9hLF82LF82LF82LF83LF8yLF8xLF8zLF8xLF82LF83LF83LF82LF9iLF85LF9iLF84LF82LF83LF83LF82LF8zLF8xLF8zLF8wLF83LF82LF82LF82LF9iLF84LF9hLF84LF82LF81LF83LF80LF8xLF8xLF8xLF8wLF83LF80LF82LF80LF85LF84LF84LF84LF8yLF8yLF8yLF8zLF8yLF8xLF8zLF8xLF8yLF8zLF8zLF8yLF9iLF85LF9iLF84LF8yLF8wLF8yLF8xLF8wLF8xLF8xLF8xLF8yLF8xLF8zLF8wLF85LF85LF85LF84LF8yLF8xLF8zLF8wLF8xLF8xLF8xLF8wLF8zLF8wLF8yLF8wLF85LF84LF84LF84LF8wLF8xLF8xLF8wLF8xLF8xLF8xLF8wLF8xLF8wLF8wLF8wLF85LF84LF84LF84LAorICAgICAgXzAsXzAsXzAsXzEsXzQsXzcsXzUsXzcsXzAsXzEsXzEsXzAsX2QsX2YsX2QsX2UsXzAsXzIsXzAsXzMsXzYsXzUsXzcsXzUsXzAsXzMsXzEsXzIsX2YsX2QsX2YsX2MsXzAsXzMsXzEsXzIsXzcsXzUsXzcsXzQsXzEsXzIsXzAsXzIsX2YsX2MsX2UsX2MsXzIsXzEsXzMsXzAsXzUsXzUsXzUsXzQsXzMsXzAsXzIsXzAsX2QsX2MsX2MsX2MsXzQsXzYsXzQsXzcsXzYsXzUsXzcsXzUsXzQsXzcsXzUsXzYsX2YsX2QsX2YsX2MsXzYsXzQsXzYsXzUsXzQsXzUsXzUsXzUsXzYsXzUsXzcsXzQsX2QsX2QsX2QsX2MsXzYsXzUsXzcsXzQsXzUsXzUsXzUsXzQsXzcsXzQsXzYsXzQsX2QsX2MsX2MsX2MsXzQsXzUsXzUsXzQsXzUsXzUsXzUsXzQsXzUsXzQsXzQsXzQsX2QsX2MsX2MsX2MsCisgICAgICBfNCxfNyxfNSxfNixfZixfZixfZixfZSxfZCxfZSxfYyxfZSxfNyxfNixfNixfNixfNixfNyxfNyxfNixfZixfZCxfZixfYyxfZixfZSxfZSxfZSxfNyxfNCxfNixfNCxfNyxfNixfNixfNixfZixfYyxfZSxfYyxfZSxfZSxfZSxfZSxfNixfNCxfNixfNCxfNyxfNCxfNixfNCxfZCxfYyxfYyxfYyxfZSxfYyxfZSxfYyxfNCxfNCxfNCxfNCxfNixfNyxfNyxfNixfYixfOSxfYixfOCxfZixfZSxfZSxfZSxfMyxfMCxfMixfMCxfNixfNSxfNyxfNCxfOSxfOSxfOSxfOCxfZixfYyxfZSxfYyxfMSxfMCxfMCxfMCxfNyxfNCxfNixfNCxfOSxfOCxfOCxfOCxfZSxfYyxfZSxfYyxfMCxfMCxfMCxfMCxfNSxfNCxfNCxfNCxfOSxfOCxfOCxfOCxfYyxfYyxfYyxfYyxfMCxfMCxfMCxfMCwKKyAgICAgIF80LF82LF80LF83LF82LF81LF83LF81LF80LF83LF81LF82LF9mLF9kLF9mLF9jLF82LF80LF82LF81LF80LF81LF81LF81LF82LF81LF83LF80LF9kLF9kLF9kLF9jLF82LF81LF83LF80LF81LF81LF81LF80LF83LF80LF82LF80LF9kLF9jLF9jLF9jLF80LF81LF81LF80LF81LF81LF81LF80LF81LF80LF80LF80LF9kLF9jLF9jLF9jLF82LF80LF82LF81LF8wLF8xLF8xLF8xLF82LF81LF83LF80LF85LF85LF85LF84LF80LF80LF80LF81LF8wLF8xLF8xLF8xLF80LF81LF81LF80LF85LF85LF85LF84LF80LF81LF81LF80LF8xLF8xLF8xLF8wLF81LF80LF80LF80LF85LF84LF84LF84LF80LF81LF81LF80LF8xLF8xLF8xLF8wLF81LF80LF80LF80LF85LF84LF84LF84LAorICAgICAgXzYsXzcsXzcsXzYsX2IsXzksX2IsXzgsX2YsX2UsX2UsX2UsXzMsXzAsXzIsXzAsXzYsXzUsXzcsXzQsXzksXzksXzksXzgsX2YsX2MsX2UsX2MsXzEsXzAsXzAsXzAsXzcsXzQsXzYsXzQsXzksXzgsXzgsXzgsX2UsX2MsX2UsX2MsXzAsXzAsXzAsXzAsXzUsXzQsXzQsXzQsXzksXzgsXzgsXzgsX2MsX2MsX2MsX2MsXzAsXzAsXzAsXzAsXzIsXzEsXzMsXzAsXzksXzksXzksXzgsX2IsXzgsX2EsXzgsXzEsXzAsXzAsXzAsXzAsXzEsXzEsXzAsXzksXzksXzksXzgsXzksXzgsXzgsXzgsXzEsXzAsXzAsXzAsXzEsXzAsXzAsXzAsXzksXzgsXzgsXzgsXzgsXzgsXzgsXzgsXzAsXzAsXzAsXzAsXzEsXzAsXzAsXzAsXzksXzgsXzgsXzgsXzgsXzgsXzgsXzgsXzAsXzAsXzAsXzAsCisgICAgICBfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMSxfMCxfMCxfMCxfMSxfOCxfOSxfOSxfOSxfMCxfMCxfMCxfMCxfMCxfMixfMCxfMyxfMCxfMCxfMCxfMSxfOCxfYixfOSxfYixfMCxfMCxfMCxfMSxfMCxfMyxfMSxfMyxfMCxfMSxfMSxfMCxfOSxfYixfOSxfYSxfMCxfMixfMCxfMyxfMixfMSxfMyxfMSxfMCxfMyxfMSxfMixfYixfOSxfYixfOCxfMCxfMCxfMCxfMCxfNCxfNixfNCxfNyxfMCxfMCxfMCxfMSxfYyxfZixfZCxfZixfMCxfMixfMCxfMixfNixfNCxfNixfNSxfMCxfMixfMCxfMyxfZSxfZCxfZixfZCxfMCxfMixfMCxfMyxfNixfNSxfNyxfNSxfMCxfMyxfMSxfMixfZixfZCxfZixfYyxfMixfMCxfMixfMSxfNCxfNSxfNSxfNSxfMixfMSxfMyxfMCxfZCxfZCxfZCxfYywKKyAgICAgIF8wLF8wLF8wLF8xLF9jLF9mLF9kLF9mLF84LF85LF85LF84LF81LF83LF81LF82LF8wLF8yLF8wLF8zLF9lLF9mLF9mLF9mLF84LF9iLF85LF9hLF83LF83LF83LF82LF8wLF8zLF8xLF8yLF9mLF9mLF9mLF9lLF85LF9hLF84LF9hLF83LF82LF82LF82LF8yLF8zLF8zLF8yLF9mLF9kLF9mLF9jLF9iLF9hLF9hLF9hLF83LF80LF82LF80LF80LF82LF80LF83LF9hLF9iLF9iLF9iLF9jLF9mLF9kLF9lLF8zLF8zLF8zLF8yLF82LF82LF82LF83LF9hLF85LF9iLF85LF9lLF9mLF9mLF9lLF8zLF8xLF8zLF8wLF82LF83LF83LF82LF9iLF85LF9iLF84LF9mLF9lLF9lLF9lLF8zLF8wLF8yLF8wLF82LF81LF83LF80LF85LF85LF85LF84LF9mLF9jLF9lLF9jLF8xLF8wLF8wLF8wLAorICAgICAgXzAsXzAsXzAsXzAsXzQsXzYsXzQsXzcsXzAsXzAsXzAsXzEsX2MsX2YsX2QsX2YsXzAsXzIsXzAsXzIsXzYsXzQsXzYsXzUsXzAsXzIsXzAsXzMsX2UsX2QsX2YsX2QsXzAsXzIsXzAsXzMsXzYsXzUsXzcsXzUsXzAsXzMsXzEsXzIsX2YsX2QsX2YsX2MsXzIsXzAsXzIsXzEsXzQsXzUsXzUsXzUsXzIsXzEsXzMsXzAsX2QsX2QsX2QsX2MsXzQsXzYsXzQsXzYsXzIsXzAsXzIsXzEsXzQsXzYsXzQsXzcsX2EsXzksX2IsXzksXzYsXzQsXzYsXzQsXzAsXzAsXzAsXzEsXzYsXzQsXzYsXzUsXzgsXzksXzksXzksXzYsXzQsXzYsXzUsXzAsXzEsXzEsXzEsXzYsXzUsXzcsXzQsXzksXzksXzksXzgsXzQsXzQsXzQsXzUsXzAsXzEsXzEsXzEsXzQsXzUsXzUsXzQsXzksXzksXzksXzgsCisgICAgICBfNCxfNixfNCxfNyxfYSxfYixfYixfYixfYyxfZixfZCxfZSxfMyxfMyxfMyxfMixfNixfNixfNixfNyxfYSxfOSxfYixfOSxfZSxfZixfZixfZSxfMyxfMSxfMyxfMCxfNixfNyxfNyxfNixfYixfOSxfYixfOCxfZixfZSxfZSxfZSxfMyxfMCxfMixfMCxfNixfNSxfNyxfNCxfOSxfOSxfOSxfOCxfZixfYyxfZSxfYyxfMSxfMCxfMCxfMCxfMixfMixfMixfMyxfYSxfOSxfYixfOSxfYSxfYixfYixfYSxfMyxfMSxfMyxfMCxfMixfMCxfMixfMSxfOCxfOSxfOSxfOSxfYSxfOSxfYixfOCxfMSxfMSxfMSxfMCxfMixfMSxfMyxfMCxfOSxfOSxfOSxfOCxfYixfOCxfYSxfOCxfMSxfMCxfMCxfMCxfMCxfMSxfMSxfMCxfOSxfOSxfOSxfOCxfOSxfOCxfOCxfOCxfMSxfMCxfMCxfMCwKKyAgICAgIF8wLF8wLF8wLF8xLF9jLF9mLF9kLF9mLF84LF85LF85LF84LF81LF83LF81LF82LF8wLF8yLF8wLF8zLF9lLF9kLF9mLF9kLF84LF9iLF85LF9hLF83LF81LF83LF80LF8wLF8zLF8xLF8yLF9mLF9kLF9mLF9jLF85LF9hLF84LF9hLF83LF80LF82LF80LF8yLF8xLF8zLF8wLF9kLF9kLF9kLF9jLF9iLF84LF9hLF84LF81LF80LF80LF80LF80LF82LF80LF83LF9lLF9kLF9mLF9kLF9jLF9mLF9kLF9lLF83LF81LF83LF80LF82LF80LF82LF81LF9jLF9kLF9kLF9kLF9lLF9kLF9mLF9jLF81LF81LF81LF80LF82LF81LF83LF80LF9kLF9kLF9kLF9jLF9mLF9jLF9lLF9jLF81LF80LF80LF80LF80LF81LF81LF80LF9kLF9kLF9kLF9jLF9kLF9jLF9jLF9jLF81LF80LF80LF80LAorICAgICAgX2MsX2YsX2QsX2UsXzcsXzcsXzcsXzYsXzUsXzYsXzQsXzYsXzcsXzYsXzYsXzYsX2UsX2YsX2YsX2UsXzcsXzUsXzcsXzQsXzcsXzYsXzYsXzYsXzcsXzQsXzYsXzQsX2YsX2UsX2UsX2UsXzcsXzQsXzYsXzQsXzYsXzYsXzYsXzYsXzYsXzQsXzYsXzQsX2YsX2MsX2UsX2MsXzUsXzQsXzQsXzQsXzYsXzQsXzYsXzQsXzQsXzQsXzQsXzQsX2UsX2YsX2YsX2UsXzMsXzEsXzMsXzAsXzcsXzYsXzYsXzYsXzMsXzAsXzIsXzAsX2UsX2QsX2YsX2MsXzEsXzEsXzEsXzAsXzcsXzQsXzYsXzQsXzEsXzAsXzAsXzAsX2YsX2MsX2UsX2MsXzEsXzAsXzAsXzAsXzYsXzQsXzYsXzQsXzAsXzAsXzAsXzAsX2QsX2MsX2MsX2MsXzEsXzAsXzAsXzAsXzQsXzQsXzQsXzQsXzAsXzAsXzAsXzAsCisgICAgICBfNCxfNixfNCxfNyxfZSxfZCxfZixfZCxfYyxfZixfZCxfZSxfNyxfNSxfNyxfNCxfNixfNCxfNixfNSxfYyxfZCxfZCxfZCxfZSxfZCxfZixfYyxfNSxfNSxfNSxfNCxfNixfNSxfNyxfNCxfZCxfZCxfZCxfYyxfZixfYyxfZSxfYyxfNSxfNCxfNCxfNCxfNCxfNSxfNSxfNCxfZCxfZCxfZCxfYyxfZCxfYyxfYyxfYyxfNSxfNCxfNCxfNCxfNixfNCxfNixfNSxfOCxfOSxfOSxfOSxfZSxfZCxfZixfYyxfMSxfMSxfMSxfMCxfNCxfNCxfNCxfNSxfOCxfOSxfOSxfOSxfYyxfZCxfZCxfYyxfMSxfMSxfMSxfMCxfNCxfNSxfNSxfNCxfOSxfOSxfOSxfOCxfZCxfYyxfYyxfYyxfMSxfMCxfMCxfMCxfNCxfNSxfNSxfNCxfOSxfOSxfOSxfOCxfZCxfYyxfYyxfYyxfMSxfMCxfMCxfMCwKKyAgICAgIF9lLF9mLF9mLF9lLF8zLF8xLF8zLF8wLF83LF82LF82LF82LF8zLF8wLF8yLF8wLF9lLF9kLF9mLF9jLF8xLF8xLF8xLF8wLF83LF80LF82LF80LF8xLF8wLF8wLF8wLF9mLF9jLF9lLF9jLF8xLF8wLF8wLF8wLF82LF80LF82LF80LF8wLF8wLF8wLF8wLF9kLF9jLF9jLF9jLF8xLF8wLF8wLF8wLF80LF80LF80LF80LF8wLF8wLF8wLF8wLF9hLF85LF9iLF84LF8xLF8xLF8xLF8wLF8zLF8wLF8yLF8wLF8xLF8wLF8wLF8wLF84LF85LF85LF84LF8xLF8xLF8xLF8wLF8xLF8wLF8wLF8wLF8xLF8wLF8wLF8wLF85LF84LF84LF84LF8xLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF85LF84LF84LF84LF8xLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLAorICAgICAgXzAsXzAsXzAsXzAsXzQsXzQsXzQsXzUsXzAsXzAsXzAsXzEsX2MsX2QsX2QsX2QsXzAsXzAsXzAsXzAsXzQsXzYsXzQsXzcsXzAsXzAsXzAsXzEsX2MsX2YsX2QsX2YsXzAsXzAsXzAsXzEsXzQsXzcsXzUsXzcsXzAsXzEsXzEsXzAsX2QsX2YsX2QsX2UsXzAsXzIsXzAsXzMsXzYsXzUsXzcsXzUsXzAsXzMsXzEsXzIsX2YsX2QsX2YsX2MsXzQsXzQsXzQsXzQsXzAsXzIsXzAsXzMsXzQsXzQsXzQsXzUsXzgsX2IsXzksX2IsXzQsXzYsXzQsXzYsXzIsXzAsXzIsXzEsXzQsXzYsXzQsXzcsX2EsXzksX2IsXzksXzQsXzYsXzQsXzcsXzIsXzEsXzMsXzEsXzQsXzcsXzUsXzYsX2IsXzksX2IsXzgsXzYsXzQsXzYsXzUsXzAsXzEsXzEsXzEsXzYsXzUsXzcsXzQsXzksXzksXzksXzgsCisgICAgICBfNCxfNCxfNCxfNSxfOCxfYixfOSxfYixfYyxfZCxfZCxfYyxfMSxfMyxfMSxfMixfNCxfNixfNCxfNyxfYSxfYixfYixfYixfYyxfZixfZCxfZSxfMyxfMyxfMyxfMixfNCxfNyxfNSxfNixfYixfYixfYixfYSxfZCxfZSxfYyxfZSxfMyxfMixfMixfMixfNixfNyxfNyxfNixfYixfOSxfYixfOCxfZixfZSxfZSxfZSxfMyxfMCxfMixfMCxfMCxfMixfMCxfMyxfYSxfYixfYixfYixfOCxfYixfOSxfYSxfMyxfMyxfMyxfMixfMixfMixfMixfMyxfYSxfOSxfYixfOSxfYSxfYixfYixfYSxfMyxfMSxfMyxfMCxfMixfMyxfMyxfMixfYixfOSxfYixfOCxfYixfYSxfYSxfYSxfMyxfMCxfMixfMCxfMixfMSxfMyxfMCxfOSxfOSxfOSxfOCxfYixfOCxfYSxfOCxfMSxfMCxfMCxfMCwKKyAgICAgIF80LF80LF80LF80LF8wLF8yLF8wLF8zLF80LF80LF80LF81LF84LF9iLF85LF9iLF80LF82LF80LF82LF8yLF8wLF8yLF8xLF80LF82LF80LF83LF9hLF85LF9iLF85LF80LF82LF80LF83LF8yLF8xLF8zLF8xLF80LF83LF81LF82LF9iLF85LF9iLF84LF82LF80LF82LF81LF8wLF8xLF8xLF8xLF82LF81LF83LF80LF85LF85LF85LF84LF8wLF8yLF8wLF8yLF8yLF8wLF8yLF8xLF8wLF8yLF8wLF8zLF9hLF85LF9iLF85LF8yLF8wLF8yLF8wLF8wLF8wLF8wLF8xLF8yLF8wLF8yLF8xLF84LF85LF85LF85LF8yLF8wLF8yLF8xLF8wLF8xLF8xLF8xLF8yLF8xLF8zLF8wLF85LF85LF85LF84LF8wLF8wLF8wLF8xLF8wLF8xLF8xLF8xLF8wLF8xLF8xLF8wLF85LF85LF85LF84LAorICAgICAgXzAsXzIsXzAsXzMsX2EsX2IsX2IsX2IsXzgsX2IsXzksX2EsXzMsXzMsXzMsXzIsXzIsXzIsXzIsXzMsX2EsXzksX2IsXzksX2EsX2IsX2IsX2EsXzMsXzEsXzMsXzAsXzIsXzMsXzMsXzIsX2IsXzksX2IsXzgsX2IsX2EsX2EsX2EsXzMsXzAsXzIsXzAsXzIsXzEsXzMsXzAsXzksXzksXzksXzgsX2IsXzgsX2EsXzgsXzEsXzAsXzAsXzAsXzIsXzIsXzIsXzMsX2EsXzksX2IsXzksX2EsX2IsX2IsX2EsXzMsXzEsXzMsXzAsXzIsXzAsXzIsXzEsXzgsXzksXzksXzksX2EsXzksX2IsXzgsXzEsXzEsXzEsXzAsXzIsXzEsXzMsXzAsXzksXzksXzksXzgsX2IsXzgsX2EsXzgsXzEsXzAsXzAsXzAsXzAsXzEsXzEsXzAsXzksXzksXzksXzgsXzksXzgsXzgsXzgsXzEsXzAsXzAsXzAsCisgICAgICBfNCxfNCxfNCxfNSxfYyxfZixfZCxfZixfYyxfZCxfZCxfYyxfNSxfNyxfNSxfNixfNCxfNixfNCxfNyxfZSxfZCxfZixfZCxfYyxfZixfZCxfZSxfNyxfNSxfNyxfNCxfNCxfNyxfNSxfNixfZixfZCxfZixfYyxfZCxfZSxfYyxfZSxfNyxfNCxfNixfNCxfNixfNSxfNyxfNCxfZCxfZCxfZCxfYyxfZixfYyxfZSxfYyxfNSxfNCxfNCxfNCxfNCxfNixfNCxfNyxfYSxfOSxfYixfOSxfYyxfZixfZCxfZSxfMyxfMSxfMyxfMCxfNixfNCxfNixfNSxfOCxfOSxfOSxfOSxfZSxfZCxfZixfYyxfMSxfMSxfMSxfMCxfNixfNSxfNyxfNCxfOSxfOSxfOSxfOCxfZixfYyxfZSxfYyxfMSxfMCxfMCxfMCxfNCxfNSxfNSxfNCxfOSxfOSxfOSxfOCxfZCxfYyxfYyxfYyxfMSxfMCxfMCxfMCwKKyAgICAgIF9jLF9mLF9kLF9lLF8zLF8zLF8zLF8yLF81LF82LF80LF82LF8zLF8yLF8yLF8yLF9lLF9mLF9mLF9lLF8zLF8xLF8zLF8wLF83LF82LF82LF82LF8zLF8wLF8yLF8wLF9mLF9lLF9lLF9lLF8zLF8wLF8yLF8wLF82LF82LF82LF82LF8yLF8wLF8yLF8wLF9mLF9jLF9lLF9jLF8xLF8wLF8wLF8wLF82LF80LF82LF80LF8wLF8wLF8wLF8wLF9hLF9iLF9iLF9hLF8zLF8xLF8zLF8wLF8zLF8yLF8yLF8yLF8zLF8wLF8yLF8wLF9hLF85LF9iLF84LF8xLF8xLF8xLF8wLF8zLF8wLF8yLF8wLF8xLF8wLF8wLF8wLF9iLF84LF9hLF84LF8xLF8wLF8wLF8wLF8yLF8wLF8yLF8wLF8wLF8wLF8wLF8wLF85LF84LF84LF84LF8xLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLAorICAgICAgXzQsXzYsXzQsXzcsX2EsXzksX2IsXzksX2MsX2YsX2QsX2UsXzMsXzEsXzMsXzAsXzYsXzQsXzYsXzUsXzgsXzksXzksXzksX2UsX2QsX2YsX2MsXzEsXzEsXzEsXzAsXzYsXzUsXzcsXzQsXzksXzksXzksXzgsX2YsX2MsX2UsX2MsXzEsXzAsXzAsXzAsXzQsXzUsXzUsXzQsXzksXzksXzksXzgsX2QsX2MsX2MsX2MsXzEsXzAsXzAsXzAsXzIsXzAsXzIsXzEsXzgsXzksXzksXzksX2EsXzksX2IsXzgsXzEsXzEsXzEsXzAsXzAsXzAsXzAsXzEsXzgsXzksXzksXzksXzgsXzksXzksXzgsXzEsXzEsXzEsXzAsXzAsXzEsXzEsXzAsXzksXzksXzksXzgsXzksXzgsXzgsXzgsXzEsXzAsXzAsXzAsXzAsXzEsXzEsXzAsXzksXzksXzksXzgsXzksXzgsXzgsXzgsXzEsXzAsXzAsXzAsCisgICAgICBfYSxfYixfYixfYSxfMyxfMSxfMyxfMCxfMyxfMixfMixfMixfMyxfMCxfMixfMCxfYSxfOSxfYixfOCxfMSxfMSxfMSxfMCxfMyxfMCxfMixfMCxfMSxfMCxfMCxfMCxfYixfOCxfYSxfOCxfMSxfMCxfMCxfMCxfMixfMCxfMixfMCxfMCxfMCxfMCxfMCxfOSxfOCxfOCxfOCxfMSxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfYSxfOSxfYixfOCxfMSxfMSxfMSxfMCxfMyxfMCxfMixfMCxfMSxfMCxfMCxfMCxfOCxfOSxfOSxfOCxfMSxfMSxfMSxfMCxfMSxfMCxfMCxfMCxfMSxfMCxfMCxfMCxfOSxfOCxfOCxfOCxfMSxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfOSxfOCxfOCxfOCxfMSxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCwKKyAgICAgIF8wLF8wLF8wLF8xLF8wLF8zLF8xLF8zLF8wLF8xLF8xLF8wLF85LF9iLF85LF9hLF8wLF8yLF8wLF8zLF8yLF8xLF8zLF8xLF8wLF8zLF8xLF8yLF9iLF85LF9iLF84LF8wLF8zLF8xLF8yLF8zLF8xLF8zLF8wLF8xLF8yLF8wLF8yLF9iLF84LF9hLF84LF8yLF8xLF8zLF8wLF8xLF8xLF8xLF8wLF8zLF8wLF8yLF8wLF85LF84LF84LF84LF8wLF8yLF8wLF8zLF82LF81LF83LF81LF8wLF8zLF8xLF8yLF9mLF9kLF9mLF9jLF8yLF8wLF8yLF8xLF80LF81LF81LF81LF8yLF8xLF8zLF8wLF9kLF9kLF9kLF9jLF8yLF8xLF8zLF8wLF81LF81LF81LF80LF8zLF8wLF8yLF8wLF9kLF9jLF9jLF9jLF8wLF8xLF8xLF8wLF81LF81LF81LF80LF8xLF8wLF8wLF8wLF9kLF9jLF9jLF9jLAorICAgICAgXzAsXzMsXzEsXzIsX2YsX2YsX2YsX2UsXzksX2EsXzgsX2EsX2YsX2UsX2UsX2UsXzIsXzMsXzMsXzIsX2YsX2QsX2YsX2MsX2IsX2EsX2EsX2EsX2YsX2MsX2UsX2MsXzMsXzIsXzIsXzIsX2YsX2MsX2UsX2MsX2EsX2EsX2EsX2EsX2UsX2MsX2UsX2MsXzMsXzAsXzIsXzAsX2QsX2MsX2MsX2MsX2EsXzgsX2EsXzgsX2MsX2MsX2MsX2MsXzYsXzcsXzcsXzYsX2IsXzksX2IsXzgsX2YsX2UsX2UsX2UsX2IsXzgsX2EsXzgsXzYsXzUsXzcsXzQsXzksXzksXzksXzgsX2YsX2MsX2UsX2MsXzksXzgsXzgsXzgsXzcsXzQsXzYsXzQsXzksXzgsXzgsXzgsX2UsX2MsX2UsX2MsXzgsXzgsXzgsXzgsXzUsXzQsXzQsXzQsXzksXzgsXzgsXzgsX2MsX2MsX2MsX2MsXzgsXzgsXzgsXzgsCisgICAgICBfMCxfMixfMCxfMyxfNixfNSxfNyxfNSxfMCxfMyxfMSxfMixfZixfZCxfZixfYyxfMixfMCxfMixfMSxfNCxfNSxfNSxfNSxfMixfMSxfMyxfMCxfZCxfZCxfZCxfYyxfMixfMSxfMyxfMCxfNSxfNSxfNSxfNCxfMyxfMCxfMixfMCxfZCxfYyxfYyxfYyxfMCxfMSxfMSxfMCxfNSxfNSxfNSxfNCxfMSxfMCxfMCxfMCxfZCxfYyxfYyxfYyxfNixfNCxfNixfNSxfMCxfMSxfMSxfMSxfNixfNSxfNyxfNCxfOSxfOSxfOSxfOCxfNCxfNCxfNCxfNSxfMCxfMSxfMSxfMSxfNCxfNSxfNSxfNCxfOSxfOSxfOSxfOCxfNCxfNSxfNSxfNCxfMSxfMSxfMSxfMCxfNSxfNCxfNCxfNCxfOSxfOCxfOCxfOCxfNCxfNSxfNSxfNCxfMSxfMSxfMSxfMCxfNSxfNCxfNCxfNCxfOSxfOCxfOCxfOCwKKyAgICAgIF82LF83LF83LF82LF9iLF85LF9iLF84LF9mLF9lLF9lLF9lLF9iLF84LF9hLF84LF82LF81LF83LF80LF85LF85LF85LF84LF9mLF9jLF9lLF9jLF85LF84LF84LF84LF83LF80LF82LF80LF85LF84LF84LF84LF9lLF9jLF9lLF9jLF84LF84LF84LF84LF81LF80LF80LF80LF85LF84LF84LF84LF9jLF9jLF9jLF9jLF84LF84LF84LF84LF8yLF8xLF8zLF8wLF85LF85LF85LF84LF9iLF84LF9hLF84LF85LF84LF84LF84LF8wLF8xLF8xLF8wLF85LF85LF85LF84LF85LF84LF84LF84LF85LF84LF84LF84LF8xLF8wLF8wLF8wLF85LF84LF84LF84LF84LF84LF84LF84LF84LF84LF84LF84LF8xLF8wLF8wLF8wLF85LF84LF84LF84LF84LF84LF84LF84LF84LF84LF84LF84LAorICAgICAgXzAsXzMsXzEsXzIsX2YsX2QsX2YsX2MsXzksX2EsXzgsX2EsX2YsX2MsX2UsX2MsXzIsXzEsXzMsXzAsX2QsX2QsX2QsX2MsX2IsXzgsX2EsXzgsX2QsX2MsX2MsX2MsXzMsXzAsXzIsXzAsX2QsX2MsX2MsX2MsX2EsXzgsX2EsXzgsX2MsX2MsX2MsX2MsXzEsXzAsXzAsXzAsX2QsX2MsX2MsX2MsXzgsXzgsXzgsXzgsX2MsX2MsX2MsX2MsXzYsXzUsXzcsXzQsX2QsX2QsX2QsX2MsX2YsX2MsX2UsX2MsX2QsX2MsX2MsX2MsXzQsXzUsXzUsXzQsX2QsX2QsX2QsX2MsX2QsX2MsX2MsX2MsX2QsX2MsX2MsX2MsXzUsXzQsXzQsXzQsX2QsX2MsX2MsX2MsX2MsX2MsX2MsX2MsX2MsX2MsX2MsX2MsXzUsXzQsXzQsXzQsX2QsX2MsX2MsX2MsX2MsX2MsX2MsX2MsX2MsX2MsX2MsX2MsCisgICAgICBfZixfZSxfZSxfZSxfZixfYyxfZSxfYyxfZSxfZSxfZSxfZSxfNixfNCxfNixfNCxfZixfYyxfZSxfYyxfZCxfYyxfYyxfYyxfZSxfYyxfZSxfYyxfNCxfNCxfNCxfNCxfZSxfYyxfZSxfYyxfYyxfYyxfYyxfYyxfZSxfYyxfZSxfYyxfNCxfNCxfNCxfNCxfYyxfYyxfYyxfYyxfYyxfYyxfYyxfYyxfYyxfYyxfYyxfYyxfNCxfNCxfNCxfNCxfZixfYyxfZSxfYyxfOSxfOCxfOCxfOCxfZSxfYyxfZSxfYyxfMCxfMCxfMCxfMCxfZCxfYyxfYyxfYyxfOSxfOCxfOCxfOCxfYyxfYyxfYyxfYyxfMCxfMCxfMCxfMCxfYyxfYyxfYyxfYyxfOCxfOCxfOCxfOCxfYyxfYyxfYyxfYyxfMCxfMCxfMCxfMCxfYyxfYyxfYyxfYyxfOCxfOCxfOCxfOCxfYyxfYyxfYyxfYyxfMCxfMCxfMCxfMCwKKyAgICAgIF82LF81LF83LF80LF9kLF9kLF9kLF9jLF9mLF9jLF9lLF9jLF9kLF9jLF9jLF9jLF80LF81LF81LF80LF9kLF9kLF9kLF9jLF9kLF9jLF9jLF9jLF9kLF9jLF9jLF9jLF81LF80LF80LF80LF9kLF9jLF9jLF9jLF9jLF9jLF9jLF9jLF9jLF9jLF9jLF9jLF81LF80LF80LF80LF9kLF9jLF9jLF9jLF9jLF9jLF9jLF9jLF9jLF9jLF9jLF9jLF80LF81LF81LF80LF85LF85LF85LF84LF9kLF9jLF9jLF9jLF85LF84LF84LF84LF80LF81LF81LF80LF85LF85LF85LF84LF9kLF9jLF9jLF9jLF85LF84LF84LF84LF81LF80LF80LF80LF85LF84LF84LF84LF9jLF9jLF9jLF9jLF84LF84LF84LF84LF81LF80LF80LF80LF85LF84LF84LF84LF9jLF9jLF9jLF9jLF84LF84LF84LF84LAorICAgICAgX2YsX2MsX2UsX2MsXzksXzgsXzgsXzgsX2UsX2MsX2UsX2MsXzAsXzAsXzAsXzAsX2QsX2MsX2MsX2MsXzksXzgsXzgsXzgsX2MsX2MsX2MsX2MsXzAsXzAsXzAsXzAsX2MsX2MsX2MsX2MsXzgsXzgsXzgsXzgsX2MsX2MsX2MsX2MsXzAsXzAsXzAsXzAsX2MsX2MsX2MsX2MsXzgsXzgsXzgsXzgsX2MsX2MsX2MsX2MsXzAsXzAsXzAsXzAsXzksXzgsXzgsXzgsXzksXzgsXzgsXzgsXzgsXzgsXzgsXzgsXzAsXzAsXzAsXzAsXzksXzgsXzgsXzgsXzksXzgsXzgsXzgsXzgsXzgsXzgsXzgsXzAsXzAsXzAsXzAsXzgsXzgsXzgsXzgsXzgsXzgsXzgsXzgsXzgsXzgsXzgsXzgsXzAsXzAsXzAsXzAsXzgsXzgsXzgsXzgsXzgsXzgsXzgsXzgsXzgsXzgsXzgsXzgsXzAsXzAsXzAsXzAsCisgICAgICBfMCxfMCxfMCxfMSxfNCxfNyxfNSxfNyxfMCxfMSxfMSxfMCxfZCxfZixfZCxfZSxfMCxfMixfMCxfMyxfNixfNSxfNyxfNSxfMCxfMyxfMSxfMixfZixfZCxfZixfYyxfMCxfMyxfMSxfMixfNyxfNSxfNyxfNCxfMSxfMixfMCxfMixfZixfYyxfZSxfYyxfMixfMSxfMyxfMCxfNSxfNSxfNSxfNCxfMyxfMCxfMixfMCxfZCxfYyxfYyxfYyxfNCxfNixfNCxfNyxfMixfMSxfMyxfMSxfNCxfNyxfNSxfNixfYixfOSxfYixfOCxfNixfNCxfNixfNSxfMCxfMSxfMSxfMSxfNixfNSxfNyxfNCxfOSxfOSxfOSxfOCxfNixfNSxfNyxfNCxfMSxfMSxfMSxfMCxfNyxfNCxfNixfNCxfOSxfOCxfOCxfOCxfNCxfNSxfNSxfNCxfMSxfMSxfMSxfMCxfNSxfNCxfNCxfNCxfOSxfOCxfOCxfOCwKKyAgICAgIF80LF83LF81LF82LF9iLF9iLF9iLF9hLF9kLF9lLF9jLF9lLF9iLF9hLF9hLF9hLF82LF83LF83LF82LF9iLF85LF9iLF84LF9mLF9lLF9lLF9lLF9iLF84LF9hLF84LF83LF82LF82LF82LF9iLF84LF9hLF84LF9lLF9lLF9lLF9lLF9hLF84LF9hLF84LF83LF80LF82LF80LF85LF84LF84LF84LF9lLF9jLF9lLF9jLF84LF84LF84LF84LF8yLF8zLF8zLF8yLF9iLF85LF9iLF84LF9iLF9hLF9hLF9hLF9iLF84LF9hLF84LF8yLF8xLF8zLF8wLF85LF85LF85LF84LF9iLF84LF9hLF84LF85LF84LF84LF84LF8zLF8wLF8yLF8wLF85LF84LF84LF84LF9hLF84LF9hLF84LF84LF84LF84LF84LF8xLF8wLF8wLF8wLF85LF84LF84LF84LF84LF84LF84LF84LF84LF84LF84LF84LAorICAgICAgXzQsXzYsXzQsXzcsXzIsXzEsXzMsXzEsXzQsXzcsXzUsXzYsX2IsXzksX2IsXzgsXzYsXzQsXzYsXzUsXzAsXzEsXzEsXzEsXzYsXzUsXzcsXzQsXzksXzksXzksXzgsXzYsXzUsXzcsXzQsXzEsXzEsXzEsXzAsXzcsXzQsXzYsXzQsXzksXzgsXzgsXzgsXzQsXzUsXzUsXzQsXzEsXzEsXzEsXzAsXzUsXzQsXzQsXzQsXzksXzgsXzgsXzgsXzIsXzAsXzIsXzEsXzAsXzEsXzEsXzEsXzIsXzEsXzMsXzAsXzksXzksXzksXzgsXzAsXzAsXzAsXzEsXzAsXzEsXzEsXzEsXzAsXzEsXzEsXzAsXzksXzksXzksXzgsXzAsXzEsXzEsXzAsXzEsXzEsXzEsXzAsXzEsXzAsXzAsXzAsXzksXzgsXzgsXzgsXzAsXzEsXzEsXzAsXzEsXzEsXzEsXzAsXzEsXzAsXzAsXzAsXzksXzgsXzgsXzgsCisgICAgICBfMixfMyxfMyxfMixfYixfOSxfYixfOCxfYixfYSxfYSxfYSxfYixfOCxfYSxfOCxfMixfMSxfMyxfMCxfOSxfOSxfOSxfOCxfYixfOCxfYSxfOCxfOSxfOCxfOCxfOCxfMyxfMCxfMixfMCxfOSxfOCxfOCxfOCxfYSxfOCxfYSxfOCxfOCxfOCxfOCxfOCxfMSxfMCxfMCxfMCxfOSxfOCxfOCxfOCxfOCxfOCxfOCxfOCxfOCxfOCxfOCxfOCxfMixfMSxfMyxfMCxfOSxfOSxfOSxfOCxfYixfOCxfYSxfOCxfOSxfOCxfOCxfOCxfMCxfMSxfMSxfMCxfOSxfOSxfOSxfOCxfOSxfOCxfOCxfOCxfOSxfOCxfOCxfOCxfMSxfMCxfMCxfMCxfOSxfOCxfOCxfOCxfOCxfOCxfOCxfOCxfOCxfOCxfOCxfOCxfMSxfMCxfMCxfMCxfOSxfOCxfOCxfOCxfOCxfOCxfOCxfOCxfOCxfOCxfOCxfOCwKKyAgICAgIF80LF83LF81LF82LF9mLF9kLF9mLF9jLF9kLF9lLF9jLF9lLF9mLF9jLF9lLF9jLF82LF81LF83LF80LF9kLF9kLF9kLF9jLF9mLF9jLF9lLF9jLF9kLF9jLF9jLF9jLF83LF80LF82LF80LF9kLF9jLF9jLF9jLF9lLF9jLF9lLF9jLF9jLF9jLF9jLF9jLF81LF80LF80LF80LF9kLF9jLF9jLF9jLF9jLF9jLF9jLF9jLF9jLF9jLF9jLF9jLF82LF81LF83LF80LF85LF85LF85LF84LF9mLF9jLF9lLF9jLF85LF84LF84LF84LF80LF81LF81LF80LF85LF85LF85LF84LF9kLF9jLF9jLF9jLF85LF84LF84LF84LF81LF80LF80LF80LF85LF84LF84LF84LF9jLF9jLF9jLF9jLF84LF84LF84LF84LF81LF80LF80LF80LF85LF84LF84LF84LF9jLF9jLF9jLF9jLF84LF84LF84LF84LAorICAgICAgX2YsX2UsX2UsX2UsX2IsXzgsX2EsXzgsX2UsX2UsX2UsX2UsXzIsXzAsXzIsXzAsX2YsX2MsX2UsX2MsXzksXzgsXzgsXzgsX2UsX2MsX2UsX2MsXzAsXzAsXzAsXzAsX2UsX2MsX2UsX2MsXzgsXzgsXzgsXzgsX2UsX2MsX2UsX2MsXzAsXzAsXzAsXzAsX2MsX2MsX2MsX2MsXzgsXzgsXzgsXzgsX2MsX2MsX2MsX2MsXzAsXzAsXzAsXzAsX2IsXzgsX2EsXzgsXzksXzgsXzgsXzgsX2EsXzgsX2EsXzgsXzAsXzAsXzAsXzAsXzksXzgsXzgsXzgsXzksXzgsXzgsXzgsXzgsXzgsXzgsXzgsXzAsXzAsXzAsXzAsXzgsXzgsXzgsXzgsXzgsXzgsXzgsXzgsXzgsXzgsXzgsXzgsXzAsXzAsXzAsXzAsXzgsXzgsXzgsXzgsXzgsXzgsXzgsXzgsXzgsXzgsXzgsXzgsXzAsXzAsXzAsXzAsCisgICAgICBfNixfNSxfNyxfNCxfOSxfOSxfOSxfOCxfZixfYyxfZSxfYyxfOSxfOCxfOCxfOCxfNCxfNSxfNSxfNCxfOSxfOSxfOSxfOCxfZCxfYyxfYyxfYyxfOSxfOCxfOCxfOCxfNSxfNCxfNCxfNCxfOSxfOCxfOCxfOCxfYyxfYyxfYyxfYyxfOCxfOCxfOCxfOCxfNSxfNCxfNCxfNCxfOSxfOCxfOCxfOCxfYyxfYyxfYyxfYyxfOCxfOCxfOCxfOCxfMCxfMSxfMSxfMCxfOSxfOSxfOSxfOCxfOSxfOCxfOCxfOCxfOSxfOCxfOCxfOCxfMCxfMSxfMSxfMCxfOSxfOSxfOSxfOCxfOSxfOCxfOCxfOCxfOSxfOCxfOCxfOCxfMSxfMCxfMCxfMCxfOSxfOCxfOCxfOCxfOCxfOCxfOCxfOCxfOCxfOCxfOCxfOCxfMSxfMCxfMCxfMCxfOSxfOCxfOCxfOCxfOCxfOCxfOCxfOCxfOCxfOCxfOCxfOCwKKyAgICAgIF9iLF84LF9hLF84LF85LF84LF84LF84LF9hLF84LF9hLF84LF8wLF8wLF8wLF8wLF85LF84LF84LF84LF85LF84LF84LF84LF84LF84LF84LF84LF8wLF8wLF8wLF8wLF84LF84LF84LF84LF84LF84LF84LF84LF84LF84LF84LF84LF8wLF8wLF8wLF8wLF84LF84LF84LF84LF84LF84LF84LF84LF84LF84LF84LF84LF8wLF8wLF8wLF8wLF85LF84LF84LF84LF85LF84LF84LF84LF84LF84LF84LF84LF8wLF8wLF8wLF8wLF85LF84LF84LF84LF85LF84LF84LF84LF84LF84LF84LF84LF8wLF8wLF8wLF8wLF84LF84LF84LF84LF84LF84LF84LF84LF84LF84LF84LF84LF8wLF8wLF8wLF8wLF84LF84LF84LF84LF84LF84LF84LF84LF84LF84LF84LF84LF8wLF8wLF8wLF8wLAorICAgICAgXzAsXzAsXzAsXzEsX2MsX2YsX2QsX2YsXzgsXzksXzksXzgsX2QsX2YsX2QsX2UsXzAsXzIsXzAsXzMsX2UsX2QsX2YsX2QsXzgsX2IsXzksX2EsX2YsX2QsX2YsX2MsXzAsXzMsXzEsXzIsX2YsX2QsX2YsX2MsXzksX2EsXzgsX2EsX2YsX2MsX2UsX2MsXzIsXzEsXzMsXzAsX2QsX2QsX2QsX2MsX2IsXzgsX2EsXzgsX2QsX2MsX2MsX2MsXzQsXzYsXzQsXzcsX2EsXzksX2IsXzksX2MsX2YsX2QsX2UsX2IsXzksX2IsXzgsXzYsXzQsXzYsXzUsXzgsXzksXzksXzksX2UsX2QsX2YsX2MsXzksXzksXzksXzgsXzYsXzUsXzcsXzQsXzksXzksXzksXzgsX2YsX2MsX2UsX2MsXzksXzgsXzgsXzgsXzQsXzUsXzUsXzQsXzksXzksXzksXzgsX2QsX2MsX2MsX2MsXzksXzgsXzgsXzgsCisgICAgICBfYyxfZixfZCxfZSxfYixfYixfYixfYSxfZCxfZSxfYyxfZSxfMyxfMixfMixfMixfZSxfZixfZixfZSxfYixfOSxfYixfOCxfZixfZSxfZSxfZSxfMyxfMCxfMixfMCxfZixfZSxfZSxfZSxfYixfOCxfYSxfOCxfZSxfZSxfZSxfZSxfMixfMCxfMixfMCxfZixfYyxfZSxfYyxfOSxfOCxfOCxfOCxfZSxfYyxfZSxfYyxfMCxfMCxfMCxfMCxfYSxfYixfYixfYSxfYixfOSxfYixfOCxfYixfYSxfYSxfYSxfMyxfMCxfMixfMCxfYSxfOSxfYixfOCxfOSxfOSxfOSxfOCxfYixfOCxfYSxfOCxfMSxfMCxfMCxfMCxfYixfOCxfYSxfOCxfOSxfOCxfOCxfOCxfYSxfOCxfYSxfOCxfMCxfMCxfMCxfMCxfOSxfOCxfOCxfOCxfOSxfOCxfOCxfOCxfOCxfOCxfOCxfOCxfMCxfMCxfMCxfMCwKKyAgICAgIF80LF82LF80LF83LF9hLF85LF9iLF85LF9jLF9mLF9kLF9lLF9iLF85LF9iLF84LF82LF80LF82LF81LF84LF85LF85LF85LF9lLF9kLF9mLF9jLF85LF85LF85LF84LF82LF81LF83LF80LF85LF85LF85LF84LF9mLF9jLF9lLF9jLF85LF84LF84LF84LF80LF81LF81LF80LF85LF85LF85LF84LF9kLF9jLF9jLF9jLF85LF84LF84LF84LF8yLF8wLF8yLF8xLF84LF85LF85LF85LF9hLF85LF9iLF84LF85LF85LF85LF84LF8wLF8wLF8wLF8xLF84LF85LF85LF85LF84LF85LF85LF84LF85LF85LF85LF84LF8wLF8xLF8xLF8wLF85LF85LF85LF84LF85LF84LF84LF84LF85LF84LF84LF84LF8wLF8xLF8xLF8wLF85LF85LF85LF84LF85LF84LF84LF84LF85LF84LF84LF84LAorICAgICAgX2EsX2IsX2IsX2EsX2IsXzksX2IsXzgsX2IsX2EsX2EsX2EsXzMsXzAsXzIsXzAsX2EsXzksX2IsXzgsXzksXzksXzksXzgsX2IsXzgsX2EsXzgsXzEsXzAsXzAsXzAsX2IsXzgsX2EsXzgsXzksXzgsXzgsXzgsX2EsXzgsX2EsXzgsXzAsXzAsXzAsXzAsXzksXzgsXzgsXzgsXzksXzgsXzgsXzgsXzgsXzgsXzgsXzgsXzAsXzAsXzAsXzAsX2EsXzksX2IsXzgsXzksXzksXzksXzgsX2IsXzgsX2EsXzgsXzEsXzAsXzAsXzAsXzgsXzksXzksXzgsXzksXzksXzksXzgsXzksXzgsXzgsXzgsXzEsXzAsXzAsXzAsXzksXzgsXzgsXzgsXzksXzgsXzgsXzgsXzgsXzgsXzgsXzgsXzAsXzAsXzAsXzAsXzksXzgsXzgsXzgsXzksXzgsXzgsXzgsXzgsXzgsXzgsXzgsXzAsXzAsXzAsXzAsCisgICAgICBfYyxfZixfZCxfZSxfZixfZCxfZixfYyxfZCxfZSxfYyxfZSxfNyxfNCxfNixfNCxfZSxfZCxfZixfYyxfZCxfZCxfZCxfYyxfZixfYyxfZSxfYyxfNSxfNCxfNCxfNCxfZixfYyxfZSxfYyxfZCxfYyxfYyxfYyxfZSxfYyxfZSxfYyxfNCxfNCxfNCxfNCxfZCxfYyxfYyxfYyxfZCxfYyxfYyxfYyxfYyxfYyxfYyxfYyxfNCxfNCxfNCxfNCxfZSxfZCxfZixfYyxfOSxfOSxfOSxfOCxfZixfYyxfZSxfYyxfMSxfMCxfMCxfMCxfYyxfZCxfZCxfYyxfOSxfOSxfOSxfOCxfZCxfYyxfYyxfYyxfMSxfMCxfMCxfMCxfZCxfYyxfYyxfYyxfOSxfOCxfOCxfOCxfYyxfYyxfYyxfYyxfMCxfMCxfMCxfMCxfZCxfYyxfYyxfYyxfOSxfOCxfOCxfOCxfYyxfYyxfYyxfYyxfMCxfMCxfMCxfMCwKKyAgICAgIF9mLF9lLF9lLF9lLF8zLF8wLF8yLF8wLF82LF82LF82LF82LF8yLF8wLF8yLF8wLF9mLF9jLF9lLF9jLF8xLF8wLF8wLF8wLF82LF80LF82LF80LF8wLF8wLF8wLF8wLF9lLF9jLF9lLF9jLF8wLF8wLF8wLF8wLF82LF80LF82LF80LF8wLF8wLF8wLF8wLF9jLF9jLF9jLF9jLF8wLF8wLF8wLF8wLF80LF80LF80LF80LF8wLF8wLF8wLF8wLF9iLF84LF9hLF84LF8xLF8wLF8wLF8wLF8yLF8wLF8yLF8wLF8wLF8wLF8wLF8wLF85LF84LF84LF84LF8xLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF84LF84LF84LF84LF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF84LF84LF84LF84LF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLAorICAgICAgX2UsX2QsX2YsX2MsXzksXzksXzksXzgsX2YsX2MsX2UsX2MsXzEsXzAsXzAsXzAsX2MsX2QsX2QsX2MsXzksXzksXzksXzgsX2QsX2MsX2MsX2MsXzEsXzAsXzAsXzAsX2QsX2MsX2MsX2MsXzksXzgsXzgsXzgsX2MsX2MsX2MsX2MsXzAsXzAsXzAsXzAsX2QsX2MsX2MsX2MsXzksXzgsXzgsXzgsX2MsX2MsX2MsX2MsXzAsXzAsXzAsXzAsXzgsXzksXzksXzgsXzksXzksXzksXzgsXzksXzgsXzgsXzgsXzEsXzAsXzAsXzAsXzgsXzksXzksXzgsXzksXzksXzksXzgsXzksXzgsXzgsXzgsXzEsXzAsXzAsXzAsXzksXzgsXzgsXzgsXzksXzgsXzgsXzgsXzgsXzgsXzgsXzgsXzAsXzAsXzAsXzAsXzksXzgsXzgsXzgsXzksXzgsXzgsXzgsXzgsXzgsXzgsXzgsXzAsXzAsXzAsXzAsCisgICAgICBfYixfOCxfYSxfOCxfMSxfMCxfMCxfMCxfMixfMCxfMixfMCxfMCxfMCxfMCxfMCxfOSxfOCxfOCxfOCxfMSxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfOCxfOCxfOCxfOCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfOCxfOCxfOCxfOCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfOSxfOCxfOCxfOCxfMSxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfOSxfOCxfOCxfOCxfMSxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfOCxfOCxfOCxfOCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfOCxfOCxfOCxfOCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCwKKyAgICAgIF80LF80LF80LF81LF84LF9iLF85LF9iLF9jLF9kLF9kLF9jLF85LF9iLF85LF9hLF80LF82LF80LF83LF9hLF85LF9iLF85LF9jLF9mLF9kLF9lLF9iLF85LF9iLF84LF80LF83LF81LF82LF9iLF85LF9iLF84LF9kLF9lLF9jLF9lLF9iLF84LF9hLF84LF82LF81LF83LF80LF85LF85LF85LF84LF9mLF9jLF9lLF9jLF85LF84LF84LF84LF8wLF8yLF8wLF8zLF9hLF85LF9iLF85LF84LF9iLF85LF9hLF9iLF85LF9iLF84LF8yLF8wLF8yLF8xLF84LF85LF85LF85LF9hLF85LF9iLF84LF85LF85LF85LF84LF8yLF8xLF8zLF8wLF85LF85LF85LF84LF9iLF84LF9hLF84LF85LF84LF84LF84LF8wLF8xLF8xLF8wLF85LF85LF85LF84LF85LF84LF84LF84LF85LF84LF84LF84LAorICAgICAgXzgsX2IsXzksX2EsX2IsX2IsX2IsX2EsXzksX2EsXzgsX2EsXzMsXzIsXzIsXzIsX2EsX2IsX2IsX2EsX2IsXzksX2IsXzgsX2IsX2EsX2EsX2EsXzMsXzAsXzIsXzAsX2IsX2EsX2EsX2EsX2IsXzgsX2EsXzgsX2EsX2EsX2EsX2EsXzIsXzAsXzIsXzAsX2IsXzgsX2EsXzgsXzksXzgsXzgsXzgsX2EsXzgsX2EsXzgsXzAsXzAsXzAsXzAsX2EsX2IsX2IsX2EsX2IsXzksX2IsXzgsX2IsX2EsX2EsX2EsXzMsXzAsXzIsXzAsX2EsXzksX2IsXzgsXzksXzksXzksXzgsX2IsXzgsX2EsXzgsXzEsXzAsXzAsXzAsX2IsXzgsX2EsXzgsXzksXzgsXzgsXzgsX2EsXzgsX2EsXzgsXzAsXzAsXzAsXzAsXzksXzgsXzgsXzgsXzksXzgsXzgsXzgsXzgsXzgsXzgsXzgsXzAsXzAsXzAsXzAsCisgICAgICBfMCxfMixfMCxfMyxfYSxfOSxfYixfOSxfOCxfYixfOSxfYSxfYixfOSxfYixfOCxfMixfMCxfMixfMSxfOCxfOSxfOSxfOSxfYSxfOSxfYixfOCxfOSxfOSxfOSxfOCxfMixfMSxfMyxfMCxfOSxfOSxfOSxfOCxfYixfOCxfYSxfOCxfOSxfOCxfOCxfOCxfMCxfMSxfMSxfMCxfOSxfOSxfOSxfOCxfOSxfOCxfOCxfOCxfOSxfOCxfOCxfOCxfMixfMCxfMixfMSxfOCxfOSxfOSxfOSxfYSxfOSxfYixfOCxfOSxfOSxfOSxfOCxfMCxfMCxfMCxfMSxfOCxfOSxfOSxfOSxfOCxfOSxfOSxfOCxfOSxfOSxfOSxfOCxfMCxfMSxfMSxfMCxfOSxfOSxfOSxfOCxfOSxfOCxfOCxfOCxfOSxfOCxfOCxfOCxfMCxfMSxfMSxfMCxfOSxfOSxfOSxfOCxfOSxfOCxfOCxfOCxfOSxfOCxfOCxfOCwKKyAgICAgIF9hLF9iLF9iLF9hLF9iLF85LF9iLF84LF9iLF9hLF9hLF9hLF8zLF8wLF8yLF8wLF9hLF85LF9iLF84LF85LF85LF85LF84LF9iLF84LF9hLF84LF8xLF8wLF8wLF8wLF9iLF84LF9hLF84LF85LF84LF84LF84LF9hLF84LF9hLF84LF8wLF8wLF8wLF8wLF85LF84LF84LF84LF85LF84LF84LF84LF84LF84LF84LF84LF8wLF8wLF8wLF8wLF9hLF85LF9iLF84LF85LF85LF85LF84LF9iLF84LF9hLF84LF8xLF8wLF8wLF8wLF84LF85LF85LF84LF85LF85LF85LF84LF85LF84LF84LF84LF8xLF8wLF8wLF8wLF85LF84LF84LF84LF85LF84LF84LF84LF84LF84LF84LF84LF8wLF8wLF8wLF8wLF85LF84LF84LF84LF85LF84LF84LF84LF84LF84LF84LF84LF8wLF8wLF8wLF8wLAorICAgICAgX2MsX2YsX2QsX2UsX2IsXzksX2IsXzgsX2QsX2UsX2MsX2UsXzMsXzAsXzIsXzAsX2UsX2QsX2YsX2MsXzksXzksXzksXzgsX2YsX2MsX2UsX2MsXzEsXzAsXzAsXzAsX2YsX2MsX2UsX2MsXzksXzgsXzgsXzgsX2UsX2MsX2UsX2MsXzAsXzAsXzAsXzAsX2QsX2MsX2MsX2MsXzksXzgsXzgsXzgsX2MsX2MsX2MsX2MsXzAsXzAsXzAsXzAsX2EsXzksX2IsXzgsXzksXzksXzksXzgsX2IsXzgsX2EsXzgsXzEsXzAsXzAsXzAsXzgsXzksXzksXzgsXzksXzksXzksXzgsXzksXzgsXzgsXzgsXzEsXzAsXzAsXzAsXzksXzgsXzgsXzgsXzksXzgsXzgsXzgsXzgsXzgsXzgsXzgsXzAsXzAsXzAsXzAsXzksXzgsXzgsXzgsXzksXzgsXzgsXzgsXzgsXzgsXzgsXzgsXzAsXzAsXzAsXzAsCisgICAgICBfYixfYSxfYSxfYSxfMyxfMCxfMixfMCxfMixfMixfMixfMixfMixfMCxfMixfMCxfYixfOCxfYSxfOCxfMSxfMCxfMCxfMCxfMixfMCxfMixfMCxfMCxfMCxfMCxfMCxfYSxfOCxfYSxfOCxfMCxfMCxfMCxfMCxfMixfMCxfMixfMCxfMCxfMCxfMCxfMCxfOCxfOCxfOCxfOCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfYixfOCxfYSxfOCxfMSxfMCxfMCxfMCxfMixfMCxfMixfMCxfMCxfMCxfMCxfMCxfOSxfOCxfOCxfOCxfMSxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfOCxfOCxfOCxfOCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfOCxfOCxfOCxfOCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCwKKyAgICAgIF9hLF85LF9iLF84LF85LF85LF85LF84LF9iLF84LF9hLF84LF8xLF8wLF8wLF8wLF84LF85LF85LF84LF85LF85LF85LF84LF85LF84LF84LF84LF8xLF8wLF8wLF8wLF85LF84LF84LF84LF85LF84LF84LF84LF84LF84LF84LF84LF8wLF8wLF8wLF8wLF85LF84LF84LF84LF85LF84LF84LF84LF84LF84LF84LF84LF8wLF8wLF8wLF8wLF84LF85LF85LF84LF85LF85LF85LF84LF85LF84LF84LF84LF8xLF8wLF8wLF8wLF84LF85LF85LF84LF85LF85LF85LF84LF85LF84LF84LF84LF8xLF8wLF8wLF8wLF85LF84LF84LF84LF85LF84LF84LF84LF84LF84LF84LF84LF8wLF8wLF8wLF8wLF85LF84LF84LF84LF85LF84LF84LF84LF84LF84LF84LF84LF8wLF8wLF8wLF8wLAorICAgICAgX2IsXzgsX2EsXzgsXzEsXzAsXzAsXzAsXzIsXzAsXzIsXzAsXzAsXzAsXzAsXzAsXzksXzgsXzgsXzgsXzEsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzgsXzgsXzgsXzgsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzgsXzgsXzgsXzgsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzksXzgsXzgsXzgsXzEsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzksXzgsXzgsXzgsXzEsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzgsXzgsXzgsXzgsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzgsXzgsXzgsXzgsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsCisgICAgICBfMCxfMCxfMCxfMSxfMCxfMSxfMSxfMSxfMCxfMSxfMSxfMCxfOSxfOSxfOSxfOCxfMCxfMCxfMCxfMSxfMCxfMyxfMSxfMyxfMCxfMSxfMSxfMCxfOSxfYixfOSxfYSxfMCxfMSxfMSxfMCxfMSxfMyxfMSxfMixfMSxfMCxfMCxfMCxfOSxfYSxfOCxfYSxfMCxfMyxfMSxfMixfMyxfMSxfMyxfMCxfMSxfMixfMCxfMixfYixfOCxfYSxfOCxfMCxfMCxfMCxfMSxfMCxfMyxfMSxfMyxfMCxfMSxfMSxfMCxfOSxfYixfOSxfYSxfMCxfMixfMCxfMyxfMixfMSxfMyxfMSxfMCxfMyxfMSxfMixfYixfOSxfYixfOCxfMCxfMyxfMSxfMixfMyxfMSxfMyxfMCxfMSxfMixfMCxfMixfYixfOCxfYSxfOCxfMixfMSxfMyxfMCxfMSxfMSxfMSxfMCxfMyxfMCxfMixfMCxfOSxfOCxfOCxfOCwKKyAgICAgIF8wLF8xLF8xLF8wLF85LF9iLF85LF9hLF85LF84LF84LF84LF8xLF8yLF8wLF8yLF8wLF8zLF8xLF8yLF9iLF9iLF9iLF9hLF85LF9hLF84LF9hLF8zLF8yLF8yLF8yLF8xLF8yLF8wLF8yLF9iLF9hLF9hLF9hLF84LF9hLF84LF9hLF8yLF8yLF8yLF8yLF8zLF8yLF8yLF8yLF9iLF84LF9hLF84LF9hLF9hLF9hLF9hLF8yLF8wLF8yLF8wLF8wLF8zLF8xLF8yLF9mLF9mLF9mLF9lLF85LF9hLF84LF9hLF83LF82LF82LF82LF8yLF8zLF8zLF8yLF9mLF9kLF9mLF9jLF9iLF9hLF9hLF9hLF83LF80LF82LF80LF8zLF8yLF8yLF8yLF9mLF9jLF9lLF9jLF9hLF9hLF9hLF9hLF82LF80LF82LF80LF8zLF8wLF8yLF8wLF9kLF9jLF9jLF9jLF9hLF84LF9hLF84LF80LF80LF80LF80LAorICAgICAgXzAsXzAsXzAsXzEsXzAsXzMsXzEsXzMsXzAsXzEsXzEsXzAsXzksX2IsXzksX2EsXzAsXzIsXzAsXzMsXzIsXzEsXzMsXzEsXzAsXzMsXzEsXzIsX2IsXzksX2IsXzgsXzAsXzMsXzEsXzIsXzMsXzEsXzMsXzAsXzEsXzIsXzAsXzIsX2IsXzgsX2EsXzgsXzIsXzEsXzMsXzAsXzEsXzEsXzEsXzAsXzMsXzAsXzIsXzAsXzksXzgsXzgsXzgsXzAsXzIsXzAsXzMsXzYsXzUsXzcsXzUsXzAsXzMsXzEsXzIsX2YsX2QsX2YsX2MsXzIsXzAsXzIsXzEsXzQsXzUsXzUsXzUsXzIsXzEsXzMsXzAsX2QsX2QsX2QsX2MsXzIsXzEsXzMsXzAsXzUsXzUsXzUsXzQsXzMsXzAsXzIsXzAsX2QsX2MsX2MsX2MsXzAsXzEsXzEsXzAsXzUsXzUsXzUsXzQsXzEsXzAsXzAsXzAsX2QsX2MsX2MsX2MsCisgICAgICBfMCxfMyxfMSxfMixfZixfZixfZixfZSxfOSxfYSxfOCxfYSxfNyxfNixfNixfNixfMixfMyxfMyxfMixfZixfZCxfZixfYyxfYixfYSxfYSxfYSxfNyxfNCxfNixfNCxfMyxfMixfMixfMixfZixfYyxfZSxfYyxfYSxfYSxfYSxfYSxfNixfNCxfNixfNCxfMyxfMCxfMixfMCxfZCxfYyxfYyxfYyxfYSxfOCxfYSxfOCxfNCxfNCxfNCxfNCxfNixfNyxfNyxfNixfYixfOSxfYixfOCxfZixfZSxfZSxfZSxfMyxfMCxfMixfMCxfNixfNSxfNyxfNCxfOSxfOSxfOSxfOCxfZixfYyxfZSxfYyxfMSxfMCxfMCxfMCxfNyxfNCxfNixfNCxfOSxfOCxfOCxfOCxfZSxfYyxfZSxfYyxfMCxfMCxfMCxfMCxfNSxfNCxfNCxfNCxfOSxfOCxfOCxfOCxfYyxfYyxfYyxfYyxfMCxfMCxfMCxfMCwKKyAgICAgIF8wLF8xLF8xLF8wLF85LF9iLF85LF9hLF85LF84LF84LF84LF8xLF8yLF8wLF8yLF8wLF8zLF8xLF8yLF9iLF85LF9iLF84LF85LF9hLF84LF9hLF8zLF8wLF8yLF8wLF8xLF8yLF8wLF8yLF9iLF84LF9hLF84LF84LF9hLF84LF9hLF8yLF8wLF8yLF8wLF8zLF8wLF8yLF8wLF85LF84LF84LF84LF9hLF84LF9hLF84LF8wLF8wLF8wLF8wLF8wLF8zLF8xLF8yLF9mLF9kLF9mLF9jLF85LF9hLF84LF9hLF83LF80LF82LF80LF8yLF8xLF8zLF8wLF9kLF9kLF9kLF9jLF9iLF84LF9hLF84LF81LF80LF80LF80LF8zLF8wLF8yLF8wLF9kLF9jLF9jLF9jLF9hLF84LF9hLF84LF80LF80LF80LF80LF8xLF8wLF8wLF8wLF9kLF9jLF9jLF9jLF84LF84LF84LF84LF80LF80LF80LF80LAorICAgICAgXzksX2EsXzgsX2EsXzcsXzYsXzYsXzYsXzAsXzIsXzAsXzIsXzYsXzYsXzYsXzYsX2IsX2EsX2EsX2EsXzcsXzQsXzYsXzQsXzIsXzIsXzIsXzIsXzYsXzQsXzYsXzQsX2EsX2EsX2EsX2EsXzYsXzQsXzYsXzQsXzIsXzIsXzIsXzIsXzYsXzQsXzYsXzQsX2EsXzgsX2EsXzgsXzQsXzQsXzQsXzQsXzIsXzAsXzIsXzAsXzQsXzQsXzQsXzQsX2YsX2UsX2UsX2UsXzcsXzQsXzYsXzQsXzYsXzYsXzYsXzYsXzYsXzQsXzYsXzQsX2YsX2MsX2UsX2MsXzUsXzQsXzQsXzQsXzYsXzQsXzYsXzQsXzQsXzQsXzQsXzQsX2UsX2MsX2UsX2MsXzQsXzQsXzQsXzQsXzYsXzQsXzYsXzQsXzQsXzQsXzQsXzQsX2MsX2MsX2MsX2MsXzQsXzQsXzQsXzQsXzQsXzQsXzQsXzQsXzQsXzQsXzQsXzQsCisgICAgICBfMCxfMyxfMSxfMixfZixfZCxfZixfYyxfOSxfYSxfOCxfYSxfNyxfNCxfNixfNCxfMixfMSxfMyxfMCxfZCxfZCxfZCxfYyxfYixfOCxfYSxfOCxfNSxfNCxfNCxfNCxfMyxfMCxfMixfMCxfZCxfYyxfYyxfYyxfYSxfOCxfYSxfOCxfNCxfNCxfNCxfNCxfMSxfMCxfMCxfMCxfZCxfYyxfYyxfYyxfOCxfOCxfOCxfOCxfNCxfNCxfNCxfNCxfNixfNSxfNyxfNCxfZCxfZCxfZCxfYyxfZixfYyxfZSxfYyxfNSxfNCxfNCxfNCxfNCxfNSxfNSxfNCxfZCxfZCxfZCxfYyxfZCxfYyxfYyxfYyxfNSxfNCxfNCxfNCxfNSxfNCxfNCxfNCxfZCxfYyxfYyxfYyxfYyxfYyxfYyxfYyxfNCxfNCxfNCxfNCxfNSxfNCxfNCxfNCxfZCxfYyxfYyxfYyxfYyxfYyxfYyxfYyxfNCxfNCxfNCxfNCwKKyAgICAgIF9mLF9lLF9lLF9lLF83LF80LF82LF80LF82LF82LF82LF82LF82LF80LF82LF80LF9mLF9jLF9lLF9jLF81LF80LF80LF80LF82LF80LF82LF80LF80LF80LF80LF80LF9lLF9jLF9lLF9jLF80LF80LF80LF80LF82LF80LF82LF80LF80LF80LF80LF80LF9jLF9jLF9jLF9jLF80LF80LF80LF80LF80LF80LF80LF80LF80LF80LF80LF80LF9mLF9jLF9lLF9jLF8xLF8wLF8wLF8wLF82LF80LF82LF80LF8wLF8wLF8wLF8wLF9kLF9jLF9jLF9jLF8xLF8wLF8wLF8wLF80LF80LF80LF80LF8wLF8wLF8wLF8wLF9jLF9jLF9jLF9jLF8wLF8wLF8wLF8wLF80LF80LF80LF80LF8wLF8wLF8wLF8wLF9jLF9jLF9jLF9jLF8wLF8wLF8wLF8wLF80LF80LF80LF80LF8wLF8wLF8wLF8wLAorICAgICAgXzAsXzAsXzAsXzEsXzAsXzEsXzEsXzEsXzAsXzEsXzEsXzAsXzksXzksXzksXzgsXzAsXzAsXzAsXzEsXzAsXzMsXzEsXzMsXzAsXzEsXzEsXzAsXzksX2IsXzksX2EsXzAsXzEsXzEsXzAsXzEsXzMsXzEsXzIsXzEsXzAsXzAsXzAsXzksX2EsXzgsX2EsXzAsXzMsXzEsXzIsXzMsXzEsXzMsXzAsXzEsXzIsXzAsXzIsX2IsXzgsX2EsXzgsXzAsXzAsXzAsXzEsXzQsXzcsXzUsXzcsXzAsXzEsXzEsXzAsX2QsX2YsX2QsX2UsXzAsXzIsXzAsXzMsXzYsXzUsXzcsXzUsXzAsXzMsXzEsXzIsX2YsX2QsX2YsX2MsXzAsXzMsXzEsXzIsXzcsXzUsXzcsXzQsXzEsXzIsXzAsXzIsX2YsX2MsX2UsX2MsXzIsXzEsXzMsXzAsXzUsXzUsXzUsXzQsXzMsXzAsXzIsXzAsX2QsX2MsX2MsX2MsCisgICAgICBfMCxfMSxfMSxfMCxfZCxfZixfZCxfZSxfOSxfOCxfOCxfOCxfNSxfNixfNCxfNixfMCxfMyxfMSxfMixfZixfZixfZixfZSxfOSxfYSxfOCxfYSxfNyxfNixfNixfNixfMSxfMixfMCxfMixfZixfZSxfZSxfZSxfOCxfYSxfOCxfYSxfNixfNixfNixfNixfMyxfMixfMixfMixfZixfYyxfZSxfYyxfYSxfYSxfYSxfYSxfNixfNCxfNixfNCxfNCxfNyxfNSxfNixfYixfYixfYixfYSxfZCxfZSxfYyxfZSxfMyxfMixfMixfMixfNixfNyxfNyxfNixfYixfOSxfYixfOCxfZixfZSxfZSxfZSxfMyxfMCxfMixfMCxfNyxfNixfNixfNixfYixfOCxfYSxfOCxfZSxfZSxfZSxfZSxfMixfMCxfMixfMCxfNyxfNCxfNixfNCxfOSxfOCxfOCxfOCxfZSxfYyxfZSxfYyxfMCxfMCxfMCxfMCwKKyAgICAgIF8wLF8wLF8wLF8xLF80LF83LF81LF83LF8wLF8xLF8xLF8wLF9kLF9mLF9kLF9lLF8wLF8yLF8wLF8zLF82LF81LF83LF81LF8wLF8zLF8xLF8yLF9mLF9kLF9mLF9jLF8wLF8zLF8xLF8yLF83LF81LF83LF80LF8xLF8yLF8wLF8yLF9mLF9jLF9lLF9jLF8yLF8xLF8zLF8wLF81LF81LF81LF80LF8zLF8wLF8yLF8wLF9kLF9jLF9jLF9jLF80LF82LF80LF83LF8yLF8xLF8zLF8xLF80LF83LF81LF82LF9iLF85LF9iLF84LF82LF80LF82LF81LF8wLF8xLF8xLF8xLF82LF81LF83LF80LF85LF85LF85LF84LF82LF81LF83LF80LF8xLF8xLF8xLF8wLF83LF80LF82LF80LF85LF84LF84LF84LF80LF81LF81LF80LF8xLF8xLF8xLF8wLF81LF80LF80LF80LF85LF84LF84LF84LAorICAgICAgXzQsXzcsXzUsXzYsX2IsX2IsX2IsX2EsX2QsX2UsX2MsX2UsXzMsXzIsXzIsXzIsXzYsXzcsXzcsXzYsX2IsXzksX2IsXzgsX2YsX2UsX2UsX2UsXzMsXzAsXzIsXzAsXzcsXzYsXzYsXzYsX2IsXzgsX2EsXzgsX2UsX2UsX2UsX2UsXzIsXzAsXzIsXzAsXzcsXzQsXzYsXzQsXzksXzgsXzgsXzgsX2UsX2MsX2UsX2MsXzAsXzAsXzAsXzAsXzIsXzMsXzMsXzIsX2IsXzksX2IsXzgsX2IsX2EsX2EsX2EsXzMsXzAsXzIsXzAsXzIsXzEsXzMsXzAsXzksXzksXzksXzgsX2IsXzgsX2EsXzgsXzEsXzAsXzAsXzAsXzMsXzAsXzIsXzAsXzksXzgsXzgsXzgsX2EsXzgsX2EsXzgsXzAsXzAsXzAsXzAsXzEsXzAsXzAsXzAsXzksXzgsXzgsXzgsXzgsXzgsXzgsXzgsXzAsXzAsXzAsXzAsCisgICAgICBfMCxfMSxfMSxfMCxfZCxfZixfZCxfZSxfOSxfOCxfOCxfOCxfNSxfNixfNCxfNixfMCxfMyxfMSxfMixfZixfZCxfZixfYyxfOSxfYSxfOCxfYSxfNyxfNCxfNixfNCxfMSxfMixfMCxfMixfZixfYyxfZSxfYyxfOCxfYSxfOCxfYSxfNixfNCxfNixfNCxfMyxfMCxfMixfMCxfZCxfYyxfYyxfYyxfYSxfOCxfYSxfOCxfNCxfNCxfNCxfNCxfNCxfNyxfNSxfNixfZixfZCxfZixfYyxfZCxfZSxfYyxfZSxfNyxfNCxfNixfNCxfNixfNSxfNyxfNCxfZCxfZCxfZCxfYyxfZixfYyxfZSxfYyxfNSxfNCxfNCxfNCxfNyxfNCxfNixfNCxfZCxfYyxfYyxfYyxfZSxfYyxfZSxfYyxfNCxfNCxfNCxfNCxfNSxfNCxfNCxfNCxfZCxfYyxfYyxfYyxfYyxfYyxfYyxfYyxfNCxfNCxfNCxfNCwKKyAgICAgIF9kLF9lLF9jLF9lLF83LF82LF82LF82LF80LF82LF80LF82LF82LF82LF82LF82LF9mLF9lLF9lLF9lLF83LF80LF82LF80LF82LF82LF82LF82LF82LF80LF82LF80LF9lLF9lLF9lLF9lLF82LF80LF82LF80LF82LF82LF82LF82LF82LF80LF82LF80LF9lLF9jLF9lLF9jLF80LF80LF80LF80LF82LF80LF82LF80LF80LF80LF80LF80LF9mLF9lLF9lLF9lLF8zLF8wLF8yLF8wLF82LF82LF82LF82LF8yLF8wLF8yLF8wLF9mLF9jLF9lLF9jLF8xLF8wLF8wLF8wLF82LF80LF82LF80LF8wLF8wLF8wLF8wLF9lLF9jLF9lLF9jLF8wLF8wLF8wLF8wLF82LF80LF82LF80LF8wLF8wLF8wLF8wLF9jLF9jLF9jLF9jLF8wLF8wLF8wLF8wLF80LF80LF80LF80LF8wLF8wLF8wLF8wLAorICAgICAgXzQsXzcsXzUsXzYsX2YsX2QsX2YsX2MsX2QsX2UsX2MsX2UsXzcsXzQsXzYsXzQsXzYsXzUsXzcsXzQsX2QsX2QsX2QsX2MsX2YsX2MsX2UsX2MsXzUsXzQsXzQsXzQsXzcsXzQsXzYsXzQsX2QsX2MsX2MsX2MsX2UsX2MsX2UsX2MsXzQsXzQsXzQsXzQsXzUsXzQsXzQsXzQsX2QsX2MsX2MsX2MsX2MsX2MsX2MsX2MsXzQsXzQsXzQsXzQsXzYsXzUsXzcsXzQsXzksXzksXzksXzgsX2YsX2MsX2UsX2MsXzEsXzAsXzAsXzAsXzQsXzUsXzUsXzQsXzksXzksXzksXzgsX2QsX2MsX2MsX2MsXzEsXzAsXzAsXzAsXzUsXzQsXzQsXzQsXzksXzgsXzgsXzgsX2MsX2MsX2MsX2MsXzAsXzAsXzAsXzAsXzUsXzQsXzQsXzQsXzksXzgsXzgsXzgsX2MsX2MsX2MsX2MsXzAsXzAsXzAsXzAsCisgICAgICBfZixfZSxfZSxfZSxfMyxfMCxfMixfMCxfNixfNixfNixfNixfMixfMCxfMixfMCxfZixfYyxfZSxfYyxfMSxfMCxfMCxfMCxfNixfNCxfNixfNCxfMCxfMCxfMCxfMCxfZSxfYyxfZSxfYyxfMCxfMCxfMCxfMCxfNixfNCxfNixfNCxfMCxfMCxfMCxfMCxfYyxfYyxfYyxfYyxfMCxfMCxfMCxfMCxfNCxfNCxfNCxfNCxfMCxfMCxfMCxfMCxfYixfOCxfYSxfOCxfMSxfMCxfMCxfMCxfMixfMCxfMixfMCxfMCxfMCxfMCxfMCxfOSxfOCxfOCxfOCxfMSxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfOCxfOCxfOCxfOCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfOCxfOCxfOCxfOCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCwKKyAgICAgIF8wLF8wLF8wLF8xLF84LF85LF85LF85LF84LF85LF85LF84LF8xLF8xLF8xLF8wLF8wLF8wLF8wLF8xLF84LF9iLF85LF9iLF84LF85LF85LF84LF8xLF8zLF8xLF8yLF8wLF8xLF8xLF8wLF85LF9iLF85LF9hLF85LF84LF84LF84LF8xLF8yLF8wLF8yLF8wLF8zLF8xLF8yLF9iLF85LF9iLF84LF85LF9hLF84LF9hLF8zLF8wLF8yLF8wLF8wLF8wLF8wLF8xLF9jLF9mLF9kLF9mLF84LF85LF85LF84LF81LF83LF81LF82LF8wLF8yLF8wLF8zLF9lLF9kLF9mLF9kLF84LF9iLF85LF9hLF83LF81LF83LF80LF8wLF8zLF8xLF8yLF9mLF9kLF9mLF9jLF85LF9hLF84LF9hLF83LF80LF82LF80LF8yLF8xLF8zLF8wLF9kLF9kLF9kLF9jLF9iLF84LF9hLF84LF81LF80LF80LF80LAorICAgICAgXzgsXzksXzksXzgsXzUsXzcsXzUsXzYsXzEsXzAsXzAsXzAsXzUsXzYsXzQsXzYsXzgsX2IsXzksX2EsXzcsXzcsXzcsXzYsXzEsXzIsXzAsXzIsXzcsXzYsXzYsXzYsXzksX2EsXzgsX2EsXzcsXzYsXzYsXzYsXzAsXzIsXzAsXzIsXzYsXzYsXzYsXzYsX2IsX2EsX2EsX2EsXzcsXzQsXzYsXzQsXzIsXzIsXzIsXzIsXzYsXzQsXzYsXzQsX2MsX2YsX2QsX2UsXzMsXzMsXzMsXzIsXzUsXzYsXzQsXzYsXzMsXzIsXzIsXzIsX2UsX2YsX2YsX2UsXzMsXzEsXzMsXzAsXzcsXzYsXzYsXzYsXzMsXzAsXzIsXzAsX2YsX2UsX2UsX2UsXzMsXzAsXzIsXzAsXzYsXzYsXzYsXzYsXzIsXzAsXzIsXzAsX2YsX2MsX2UsX2MsXzEsXzAsXzAsXzAsXzYsXzQsXzYsXzQsXzAsXzAsXzAsXzAsCisgICAgICBfMCxfMCxfMCxfMSxfYyxfZixfZCxfZixfOCxfOSxfOSxfOCxfNSxfNyxfNSxfNixfMCxfMixfMCxfMyxfZSxfZCxfZixfZCxfOCxfYixfOSxfYSxfNyxfNSxfNyxfNCxfMCxfMyxfMSxfMixfZixfZCxfZixfYyxfOSxfYSxfOCxfYSxfNyxfNCxfNixfNCxfMixfMSxfMyxfMCxfZCxfZCxfZCxfYyxfYixfOCxfYSxfOCxfNSxfNCxfNCxfNCxfNCxfNixfNCxfNyxfYSxfOSxfYixfOSxfYyxfZixfZCxfZSxfMyxfMSxfMyxfMCxfNixfNCxfNixfNSxfOCxfOSxfOSxfOSxfZSxfZCxfZixfYyxfMSxfMSxfMSxfMCxfNixfNSxfNyxfNCxfOSxfOSxfOSxfOCxfZixfYyxfZSxfYyxfMSxfMCxfMCxfMCxfNCxfNSxfNSxfNCxfOSxfOSxfOSxfOCxfZCxfYyxfYyxfYyxfMSxfMCxfMCxfMCwKKyAgICAgIF9jLF9mLF9kLF9lLF8zLF8zLF8zLF8yLF81LF82LF80LF82LF8zLF8yLF8yLF8yLF9lLF9mLF9mLF9lLF8zLF8xLF8zLF8wLF83LF82LF82LF82LF8zLF8wLF8yLF8wLF9mLF9lLF9lLF9lLF8zLF8wLF8yLF8wLF82LF82LF82LF82LF8yLF8wLF8yLF8wLF9mLF9jLF9lLF9jLF8xLF8wLF8wLF8wLF82LF80LF82LF80LF8wLF8wLF8wLF8wLF9hLF9iLF9iLF9hLF8zLF8xLF8zLF8wLF8zLF8yLF8yLF8yLF8zLF8wLF8yLF8wLF9hLF85LF9iLF84LF8xLF8xLF8xLF8wLF8zLF8wLF8yLF8wLF8xLF8wLF8wLF8wLF9iLF84LF9hLF84LF8xLF8wLF8wLF8wLF8yLF8wLF8yLF8wLF8wLF8wLF8wLF8wLF85LF84LF84LF84LF8xLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLAorICAgICAgXzgsXzksXzksXzgsXzUsXzcsXzUsXzYsXzEsXzAsXzAsXzAsXzUsXzYsXzQsXzYsXzgsX2IsXzksX2EsXzcsXzUsXzcsXzQsXzEsXzIsXzAsXzIsXzcsXzQsXzYsXzQsXzksX2EsXzgsX2EsXzcsXzQsXzYsXzQsXzAsXzIsXzAsXzIsXzYsXzQsXzYsXzQsX2IsXzgsX2EsXzgsXzUsXzQsXzQsXzQsXzIsXzAsXzIsXzAsXzQsXzQsXzQsXzQsX2MsX2YsX2QsX2UsXzcsXzUsXzcsXzQsXzUsXzYsXzQsXzYsXzcsXzQsXzYsXzQsX2UsX2QsX2YsX2MsXzUsXzUsXzUsXzQsXzcsXzQsXzYsXzQsXzUsXzQsXzQsXzQsX2YsX2MsX2UsX2MsXzUsXzQsXzQsXzQsXzYsXzQsXzYsXzQsXzQsXzQsXzQsXzQsX2QsX2MsX2MsX2MsXzUsXzQsXzQsXzQsXzQsXzQsXzQsXzQsXzQsXzQsXzQsXzQsCisgICAgICBfNSxfNixfNCxfNixfNyxfNixfNixfNixfNCxfNixfNCxfNixfNixfNixfNixfNixfNyxfNixfNixfNixfNyxfNCxfNixfNCxfNixfNixfNixfNixfNixfNCxfNixfNCxfNixfNixfNixfNixfNixfNCxfNixfNCxfNixfNixfNixfNixfNixfNCxfNixfNCxfNixfNCxfNixfNCxfNCxfNCxfNCxfNCxfNixfNCxfNixfNCxfNCxfNCxfNCxfNCxfNyxfNixfNixfNixfMyxfMCxfMixfMCxfNixfNixfNixfNixfMixfMCxfMixfMCxfNyxfNCxfNixfNCxfMSxfMCxfMCxfMCxfNixfNCxfNixfNCxfMCxfMCxfMCxfMCxfNixfNCxfNixfNCxfMCxfMCxfMCxfMCxfNixfNCxfNixfNCxfMCxfMCxfMCxfMCxfNCxfNCxfNCxfNCxfMCxfMCxfMCxfMCxfNCxfNCxfNCxfNCxfMCxfMCxfMCxfMCwKKyAgICAgIF9jLF9mLF9kLF9lLF83LF81LF83LF80LF81LF82LF80LF82LF83LF80LF82LF80LF9lLF9kLF9mLF9jLF81LF81LF81LF80LF83LF80LF82LF80LF81LF80LF80LF80LF9mLF9jLF9lLF9jLF81LF80LF80LF80LF82LF80LF82LF80LF80LF80LF80LF80LF9kLF9jLF9jLF9jLF81LF80LF80LF80LF80LF80LF80LF80LF80LF80LF80LF80LF9lLF9kLF9mLF9jLF8xLF8xLF8xLF8wLF83LF80LF82LF80LF8xLF8wLF8wLF8wLF9jLF9kLF9kLF9jLF8xLF8xLF8xLF8wLF81LF80LF80LF80LF8xLF8wLF8wLF8wLF9kLF9jLF9jLF9jLF8xLF8wLF8wLF8wLF80LF80LF80LF80LF8wLF8wLF8wLF8wLF9kLF9jLF9jLF9jLF8xLF8wLF8wLF8wLF80LF80LF80LF80LF8wLF8wLF8wLF8wLAorICAgICAgXzcsXzYsXzYsXzYsXzMsXzAsXzIsXzAsXzYsXzYsXzYsXzYsXzIsXzAsXzIsXzAsXzcsXzQsXzYsXzQsXzEsXzAsXzAsXzAsXzYsXzQsXzYsXzQsXzAsXzAsXzAsXzAsXzYsXzQsXzYsXzQsXzAsXzAsXzAsXzAsXzYsXzQsXzYsXzQsXzAsXzAsXzAsXzAsXzQsXzQsXzQsXzQsXzAsXzAsXzAsXzAsXzQsXzQsXzQsXzQsXzAsXzAsXzAsXzAsXzMsXzAsXzIsXzAsXzEsXzAsXzAsXzAsXzIsXzAsXzIsXzAsXzAsXzAsXzAsXzAsXzEsXzAsXzAsXzAsXzEsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsCisgICAgICBfMCxfMCxfMCxfMSxfYyxfZCxfZCxfZCxfOCxfOSxfOSxfOCxfNSxfNSxfNSxfNCxfMCxfMCxfMCxfMSxfYyxfZixfZCxfZixfOCxfOSxfOSxfOCxfNSxfNyxfNSxfNixfMCxfMSxfMSxfMCxfZCxfZixfZCxfZSxfOSxfOCxfOCxfOCxfNSxfNixfNCxfNixfMCxfMyxfMSxfMixfZixfZCxfZixfYyxfOSxfYSxfOCxfYSxfNyxfNCxfNixfNCxfNCxfNCxfNCxfNSxfOCxfYixfOSxfYixfYyxfZCxfZCxfYyxfMSxfMyxfMSxfMixfNCxfNixfNCxfNyxfYSxfOSxfYixfOSxfYyxfZixfZCxfZSxfMyxfMSxfMyxfMCxfNCxfNyxfNSxfNixfYixfOSxfYixfOCxfZCxfZSxfYyxfZSxfMyxfMCxfMixfMCxfNixfNSxfNyxfNCxfOSxfOSxfOSxfOCxfZixfYyxfZSxfYyxfMSxfMCxfMCxfMCwKKyAgICAgIF9jLF9kLF9kLF9jLF8xLF8zLF8xLF8yLF81LF80LF80LF80LF8xLF8yLF8wLF8yLF9jLF9mLF9kLF9lLF8zLF8zLF8zLF8yLF81LF82LF80LF82LF8zLF8yLF8yLF8yLF9kLF9lLF9jLF9lLF8zLF8yLF8yLF8yLF80LF82LF80LF82LF8yLF8yLF8yLF8yLF9mLF9lLF9lLF9lLF8zLF8wLF8yLF8wLF82LF82LF82LF82LF8yLF8wLF8yLF8wLF84LF9iLF85LF9hLF8zLF8zLF8zLF8yLF8xLF8yLF8wLF8yLF8zLF8yLF8yLF8yLF9hLF9iLF9iLF9hLF8zLF8xLF8zLF8wLF8zLF8yLF8yLF8yLF8zLF8wLF8yLF8wLF9iLF9hLF9hLF9hLF8zLF8wLF8yLF8wLF8yLF8yLF8yLF8yLF8yLF8wLF8yLF8wLF9iLF84LF9hLF84LF8xLF8wLF8wLF8wLF8yLF8wLF8yLF8wLF8wLF8wLF8wLF8wLAorICAgICAgXzQsXzQsXzQsXzUsXzgsX2IsXzksX2IsX2MsX2QsX2QsX2MsXzEsXzMsXzEsXzIsXzQsXzYsXzQsXzcsX2EsXzksX2IsXzksX2MsX2YsX2QsX2UsXzMsXzEsXzMsXzAsXzQsXzcsXzUsXzYsX2IsXzksX2IsXzgsX2QsX2UsX2MsX2UsXzMsXzAsXzIsXzAsXzYsXzUsXzcsXzQsXzksXzksXzksXzgsX2YsX2MsX2UsX2MsXzEsXzAsXzAsXzAsXzAsXzIsXzAsXzMsX2EsXzksX2IsXzksXzgsX2IsXzksX2EsXzMsXzEsXzMsXzAsXzIsXzAsXzIsXzEsXzgsXzksXzksXzksX2EsXzksX2IsXzgsXzEsXzEsXzEsXzAsXzIsXzEsXzMsXzAsXzksXzksXzksXzgsX2IsXzgsX2EsXzgsXzEsXzAsXzAsXzAsXzAsXzEsXzEsXzAsXzksXzksXzksXzgsXzksXzgsXzgsXzgsXzEsXzAsXzAsXzAsCisgICAgICBfOCxfYixfOSxfYSxfMyxfMyxfMyxfMixfMSxfMixfMCxfMixfMyxfMixfMixfMixfYSxfYixfYixfYSxfMyxfMSxfMyxfMCxfMyxfMixfMixfMixfMyxfMCxfMixfMCxfYixfYSxfYSxfYSxfMyxfMCxfMixfMCxfMixfMixfMixfMixfMixfMCxfMixfMCxfYixfOCxfYSxfOCxfMSxfMCxfMCxfMCxfMixfMCxfMixfMCxfMCxfMCxfMCxfMCxfYSxfYixfYixfYSxfMyxfMSxfMyxfMCxfMyxfMixfMixfMixfMyxfMCxfMixfMCxfYSxfOSxfYixfOCxfMSxfMSxfMSxfMCxfMyxfMCxfMixfMCxfMSxfMCxfMCxfMCxfYixfOCxfYSxfOCxfMSxfMCxfMCxfMCxfMixfMCxfMixfMCxfMCxfMCxfMCxfMCxfOSxfOCxfOCxfOCxfMSxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCwKKyAgICAgIF9jLF9kLF9kLF9jLF81LF83LF81LF82LF81LF80LF80LF80LF81LF82LF80LF82LF9jLF9mLF9kLF9lLF83LF81LF83LF80LF81LF82LF80LF82LF83LF80LF82LF80LF9kLF9lLF9jLF9lLF83LF80LF82LF80LF80LF82LF80LF82LF82LF80LF82LF80LF9mLF9jLF9lLF9jLF81LF80LF80LF80LF82LF80LF82LF80LF80LF80LF80LF80LF9jLF9mLF9kLF9lLF8zLF8xLF8zLF8wLF81LF82LF80LF82LF8zLF8wLF8yLF8wLF9lLF9kLF9mLF9jLF8xLF8xLF8xLF8wLF83LF80LF82LF80LF8xLF8wLF8wLF8wLF9mLF9jLF9lLF9jLF8xLF8wLF8wLF8wLF82LF80LF82LF80LF8wLF8wLF8wLF8wLF9kLF9jLF9jLF9jLF8xLF8wLF8wLF8wLF80LF80LF80LF80LF8wLF8wLF8wLF8wLAorICAgICAgXzUsXzYsXzQsXzYsXzMsXzIsXzIsXzIsXzQsXzYsXzQsXzYsXzIsXzIsXzIsXzIsXzcsXzYsXzYsXzYsXzMsXzAsXzIsXzAsXzYsXzYsXzYsXzYsXzIsXzAsXzIsXzAsXzYsXzYsXzYsXzYsXzIsXzAsXzIsXzAsXzYsXzYsXzYsXzYsXzIsXzAsXzIsXzAsXzYsXzQsXzYsXzQsXzAsXzAsXzAsXzAsXzYsXzQsXzYsXzQsXzAsXzAsXzAsXzAsXzMsXzIsXzIsXzIsXzMsXzAsXzIsXzAsXzIsXzIsXzIsXzIsXzIsXzAsXzIsXzAsXzMsXzAsXzIsXzAsXzEsXzAsXzAsXzAsXzIsXzAsXzIsXzAsXzAsXzAsXzAsXzAsXzIsXzAsXzIsXzAsXzAsXzAsXzAsXzAsXzIsXzAsXzIsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsCisgICAgICBfYyxfZixfZCxfZSxfMyxfMSxfMyxfMCxfNSxfNixfNCxfNixfMyxfMCxfMixfMCxfZSxfZCxfZixfYyxfMSxfMSxfMSxfMCxfNyxfNCxfNixfNCxfMSxfMCxfMCxfMCxfZixfYyxfZSxfYyxfMSxfMCxfMCxfMCxfNixfNCxfNixfNCxfMCxfMCxfMCxfMCxfZCxfYyxfYyxfYyxfMSxfMCxfMCxfMCxfNCxfNCxfNCxfNCxfMCxfMCxfMCxfMCxfYSxfOSxfYixfOCxfMSxfMSxfMSxfMCxfMyxfMCxfMixfMCxfMSxfMCxfMCxfMCxfOCxfOSxfOSxfOCxfMSxfMSxfMSxfMCxfMSxfMCxfMCxfMCxfMSxfMCxfMCxfMCxfOSxfOCxfOCxfOCxfMSxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfOSxfOCxfOCxfOCxfMSxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCwKKyAgICAgIF8zLF8yLF8yLF8yLF8zLF8wLF8yLF8wLF8yLF8yLF8yLF8yLF8yLF8wLF8yLF8wLF8zLF8wLF8yLF8wLF8xLF8wLF8wLF8wLF8yLF8wLF8yLF8wLF8wLF8wLF8wLF8wLF8yLF8wLF8yLF8wLF8wLF8wLF8wLF8wLF8yLF8wLF8yLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8zLF8wLF8yLF8wLF8xLF8wLF8wLF8wLF8yLF8wLF8yLF8wLF8wLF8wLF8wLF8wLF8xLF8wLF8wLF8wLF8xLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLAorICAgICAgXzAsXzEsXzEsXzAsXzksX2IsXzksX2EsXzksXzgsXzgsXzgsXzksX2EsXzgsX2EsXzAsXzMsXzEsXzIsX2IsXzksX2IsXzgsXzksX2EsXzgsX2EsX2IsXzgsX2EsXzgsXzEsXzIsXzAsXzIsX2IsXzgsX2EsXzgsXzgsX2EsXzgsX2EsX2EsXzgsX2EsXzgsXzMsXzAsXzIsXzAsXzksXzgsXzgsXzgsX2EsXzgsX2EsXzgsXzgsXzgsXzgsXzgsXzAsXzMsXzEsXzIsX2YsX2QsX2YsX2MsXzksX2EsXzgsX2EsX2YsX2MsX2UsX2MsXzIsXzEsXzMsXzAsX2QsX2QsX2QsX2MsX2IsXzgsX2EsXzgsX2QsX2MsX2MsX2MsXzMsXzAsXzIsXzAsX2QsX2MsX2MsX2MsX2EsXzgsX2EsXzgsX2MsX2MsX2MsX2MsXzEsXzAsXzAsXzAsX2QsX2MsX2MsX2MsXzgsXzgsXzgsXzgsX2MsX2MsX2MsX2MsCisgICAgICBfOSxfYSxfOCxfYSxfZixfZSxfZSxfZSxfOCxfYSxfOCxfYSxfNixfNixfNixfNixfYixfYSxfYSxfYSxfZixfYyxfZSxfYyxfYSxfYSxfYSxfYSxfNixfNCxfNixfNCxfYSxfYSxfYSxfYSxfZSxfYyxfZSxfYyxfYSxfYSxfYSxfYSxfNixfNCxfNixfNCxfYSxfOCxfYSxfOCxfYyxfYyxfYyxfYyxfYSxfOCxfYSxfOCxfNCxfNCxfNCxfNCxfZixfZSxfZSxfZSxfYixfOCxfYSxfOCxfZSxfZSxfZSxfZSxfMixfMCxfMixfMCxfZixfYyxfZSxfYyxfOSxfOCxfOCxfOCxfZSxfYyxfZSxfYyxfMCxfMCxfMCxfMCxfZSxfYyxfZSxfYyxfOCxfOCxfOCxfOCxfZSxfYyxfZSxfYyxfMCxfMCxfMCxfMCxfYyxfYyxfYyxfYyxfOCxfOCxfOCxfOCxfYyxfYyxfYyxfYyxfMCxfMCxfMCxfMCwKKyAgICAgIF8wLF8zLF8xLF8yLF9mLF9kLF9mLF9jLF85LF9hLF84LF9hLF9mLF9jLF9lLF9jLF8yLF8xLF8zLF8wLF9kLF9kLF9kLF9jLF9iLF84LF9hLF84LF9kLF9jLF9jLF9jLF8zLF8wLF8yLF8wLF9kLF9jLF9jLF9jLF9hLF84LF9hLF84LF9jLF9jLF9jLF9jLF8xLF8wLF8wLF8wLF9kLF9jLF9jLF9jLF84LF84LF84LF84LF9jLF9jLF9jLF9jLF82LF81LF83LF80LF85LF85LF85LF84LF9mLF9jLF9lLF9jLF85LF84LF84LF84LF80LF81LF81LF80LF85LF85LF85LF84LF9kLF9jLF9jLF9jLF85LF84LF84LF84LF81LF80LF80LF80LF85LF84LF84LF84LF9jLF9jLF9jLF9jLF84LF84LF84LF84LF81LF80LF80LF80LF85LF84LF84LF84LF9jLF9jLF9jLF9jLF84LF84LF84LF84LAorICAgICAgX2YsX2UsX2UsX2UsX2IsXzgsX2EsXzgsX2UsX2UsX2UsX2UsXzIsXzAsXzIsXzAsX2YsX2MsX2UsX2MsXzksXzgsXzgsXzgsX2UsX2MsX2UsX2MsXzAsXzAsXzAsXzAsX2UsX2MsX2UsX2MsXzgsXzgsXzgsXzgsX2UsX2MsX2UsX2MsXzAsXzAsXzAsXzAsX2MsX2MsX2MsX2MsXzgsXzgsXzgsXzgsX2MsX2MsX2MsX2MsXzAsXzAsXzAsXzAsX2IsXzgsX2EsXzgsXzksXzgsXzgsXzgsX2EsXzgsX2EsXzgsXzAsXzAsXzAsXzAsXzksXzgsXzgsXzgsXzksXzgsXzgsXzgsXzgsXzgsXzgsXzgsXzAsXzAsXzAsXzAsXzgsXzgsXzgsXzgsXzgsXzgsXzgsXzgsXzgsXzgsXzgsXzgsXzAsXzAsXzAsXzAsXzgsXzgsXzgsXzgsXzgsXzgsXzgsXzgsXzgsXzgsXzgsXzgsXzAsXzAsXzAsXzAsCisgICAgICBfOSxfYSxfOCxfYSxfZixfYyxfZSxfYyxfOCxfYSxfOCxfYSxfNixfNCxfNixfNCxfYixfOCxfYSxfOCxfZCxfYyxfYyxfYyxfYSxfOCxfYSxfOCxfNCxfNCxfNCxfNCxfYSxfOCxfYSxfOCxfYyxfYyxfYyxfYyxfYSxfOCxfYSxfOCxfNCxfNCxfNCxfNCxfOCxfOCxfOCxfOCxfYyxfYyxfYyxfYyxfOCxfOCxfOCxfOCxfNCxfNCxfNCxfNCxfZixfYyxfZSxfYyxfZCxfYyxfYyxfYyxfZSxfYyxfZSxfYyxfNCxfNCxfNCxfNCxfZCxfYyxfYyxfYyxfZCxfYyxfYyxfYyxfYyxfYyxfYyxfYyxfNCxfNCxfNCxfNCxfYyxfYyxfYyxfYyxfYyxfYyxfYyxfYyxfYyxfYyxfYyxfYyxfNCxfNCxfNCxfNCxfYyxfYyxfYyxfYyxfYyxfYyxfYyxfYyxfYyxfYyxfYyxfYyxfNCxfNCxfNCxfNCwKKyAgICAgIF9lLF9lLF9lLF9lLF82LF80LF82LF80LF82LF82LF82LF82LF82LF80LF82LF80LF9lLF9jLF9lLF9jLF80LF80LF80LF80LF82LF80LF82LF80LF80LF80LF80LF80LF9lLF9jLF9lLF9jLF80LF80LF80LF80LF82LF80LF82LF80LF80LF80LF80LF80LF9jLF9jLF9jLF9jLF80LF80LF80LF80LF80LF80LF80LF80LF80LF80LF80LF80LF9lLF9jLF9lLF9jLF8wLF8wLF8wLF8wLF82LF80LF82LF80LF8wLF8wLF8wLF8wLF9jLF9jLF9jLF9jLF8wLF8wLF8wLF8wLF80LF80LF80LF80LF8wLF8wLF8wLF8wLF9jLF9jLF9jLF9jLF8wLF8wLF8wLF8wLF80LF80LF80LF80LF8wLF8wLF8wLF8wLF9jLF9jLF9jLF9jLF8wLF8wLF8wLF8wLF80LF80LF80LF80LF8wLF8wLF8wLF8wLAorICAgICAgX2YsX2MsX2UsX2MsX2QsX2MsX2MsX2MsX2UsX2MsX2UsX2MsXzQsXzQsXzQsXzQsX2QsX2MsX2MsX2MsX2QsX2MsX2MsX2MsX2MsX2MsX2MsX2MsXzQsXzQsXzQsXzQsX2MsX2MsX2MsX2MsX2MsX2MsX2MsX2MsX2MsX2MsX2MsX2MsXzQsXzQsXzQsXzQsX2MsX2MsX2MsX2MsX2MsX2MsX2MsX2MsX2MsX2MsX2MsX2MsXzQsXzQsXzQsXzQsX2QsX2MsX2MsX2MsXzksXzgsXzgsXzgsX2MsX2MsX2MsX2MsXzAsXzAsXzAsXzAsX2QsX2MsX2MsX2MsXzksXzgsXzgsXzgsX2MsX2MsX2MsX2MsXzAsXzAsXzAsXzAsX2MsX2MsX2MsX2MsXzgsXzgsXzgsXzgsX2MsX2MsX2MsX2MsXzAsXzAsXzAsXzAsX2MsX2MsX2MsX2MsXzgsXzgsXzgsXzgsX2MsX2MsX2MsX2MsXzAsXzAsXzAsXzAsCisgICAgICBfZSxfYyxfZSxfYyxfMCxfMCxfMCxfMCxfNixfNCxfNixfNCxfMCxfMCxfMCxfMCxfYyxfYyxfYyxfYyxfMCxfMCxfMCxfMCxfNCxfNCxfNCxfNCxfMCxfMCxfMCxfMCxfYyxfYyxfYyxfYyxfMCxfMCxfMCxfMCxfNCxfNCxfNCxfNCxfMCxfMCxfMCxfMCxfYyxfYyxfYyxfYyxfMCxfMCxfMCxfMCxfNCxfNCxfNCxfNCxfMCxfMCxfMCxfMCxfOCxfOCxfOCxfOCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfOCxfOCxfOCxfOCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfOCxfOCxfOCxfOCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfOCxfOCxfOCxfOCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCwKKyAgICAgIF8wLF8xLF8xLF8wLF9kLF9mLF9kLF9lLF85LF84LF84LF84LF9kLF9lLF9jLF9lLF8wLF8zLF8xLF8yLF9mLF9kLF9mLF9jLF85LF9hLF84LF9hLF9mLF9jLF9lLF9jLF8xLF8yLF8wLF8yLF9mLF9jLF9lLF9jLF84LF9hLF84LF9hLF9lLF9jLF9lLF9jLF8zLF8wLF8yLF8wLF9kLF9jLF9jLF9jLF9hLF84LF9hLF84LF9jLF9jLF9jLF9jLF80LF83LF81LF82LF9iLF85LF9iLF84LF9kLF9lLF9jLF9lLF9iLF84LF9hLF84LF82LF81LF83LF80LF85LF85LF85LF84LF9mLF9jLF9lLF9jLF85LF84LF84LF84LF83LF80LF82LF80LF85LF84LF84LF84LF9lLF9jLF9lLF9jLF84LF84LF84LF84LF81LF80LF80LF80LF85LF84LF84LF84LF9jLF9jLF9jLF9jLF84LF84LF84LF84LAorICAgICAgX2QsX2UsX2MsX2UsX2IsX2EsX2EsX2EsX2MsX2UsX2MsX2UsXzIsXzIsXzIsXzIsX2YsX2UsX2UsX2UsX2IsXzgsX2EsXzgsX2UsX2UsX2UsX2UsXzIsXzAsXzIsXzAsX2UsX2UsX2UsX2UsX2EsXzgsX2EsXzgsX2UsX2UsX2UsX2UsXzIsXzAsXzIsXzAsX2UsX2MsX2UsX2MsXzgsXzgsXzgsXzgsX2UsX2MsX2UsX2MsXzAsXzAsXzAsXzAsX2IsX2EsX2EsX2EsX2IsXzgsX2EsXzgsX2EsX2EsX2EsX2EsXzIsXzAsXzIsXzAsX2IsXzgsX2EsXzgsXzksXzgsXzgsXzgsX2EsXzgsX2EsXzgsXzAsXzAsXzAsXzAsX2EsXzgsX2EsXzgsXzgsXzgsXzgsXzgsX2EsXzgsX2EsXzgsXzAsXzAsXzAsXzAsXzgsXzgsXzgsXzgsXzgsXzgsXzgsXzgsXzgsXzgsXzgsXzgsXzAsXzAsXzAsXzAsCisgICAgICBfNCxfNyxfNSxfNixfYixfOSxfYixfOCxfZCxfZSxfYyxfZSxfYixfOCxfYSxfOCxfNixfNSxfNyxfNCxfOSxfOSxfOSxfOCxfZixfYyxfZSxfYyxfOSxfOCxfOCxfOCxfNyxfNCxfNixfNCxfOSxfOCxfOCxfOCxfZSxfYyxfZSxfYyxfOCxfOCxfOCxfOCxfNSxfNCxfNCxfNCxfOSxfOCxfOCxfOCxfYyxfYyxfYyxfYyxfOCxfOCxfOCxfOCxfMixfMSxfMyxfMCxfOSxfOSxfOSxfOCxfYixfOCxfYSxfOCxfOSxfOCxfOCxfOCxfMCxfMSxfMSxfMCxfOSxfOSxfOSxfOCxfOSxfOCxfOCxfOCxfOSxfOCxfOCxfOCxfMSxfMCxfMCxfMCxfOSxfOCxfOCxfOCxfOCxfOCxfOCxfOCxfOCxfOCxfOCxfOCxfMSxfMCxfMCxfMCxfOSxfOCxfOCxfOCxfOCxfOCxfOCxfOCxfOCxfOCxfOCxfOCwKKyAgICAgIF9iLF9hLF9hLF9hLF9iLF84LF9hLF84LF9hLF9hLF9hLF9hLF8yLF8wLF8yLF8wLF9iLF84LF9hLF84LF85LF84LF84LF84LF9hLF84LF9hLF84LF8wLF8wLF8wLF8wLF9hLF84LF9hLF84LF84LF84LF84LF84LF9hLF84LF9hLF84LF8wLF8wLF8wLF8wLF84LF84LF84LF84LF84LF84LF84LF84LF84LF84LF84LF84LF8wLF8wLF8wLF8wLF9iLF84LF9hLF84LF85LF84LF84LF84LF9hLF84LF9hLF84LF8wLF8wLF8wLF8wLF85LF84LF84LF84LF85LF84LF84LF84LF84LF84LF84LF84LF8wLF8wLF8wLF8wLF84LF84LF84LF84LF84LF84LF84LF84LF84LF84LF84LF84LF8wLF8wLF8wLF8wLF84LF84LF84LF84LF84LF84LF84LF84LF84LF84LF84LF84LF8wLF8wLF8wLF8wLAorICAgICAgX2QsX2UsX2MsX2UsX2YsX2MsX2UsX2MsX2MsX2UsX2MsX2UsXzYsXzQsXzYsXzQsX2YsX2MsX2UsX2MsX2QsX2MsX2MsX2MsX2UsX2MsX2UsX2MsXzQsXzQsXzQsXzQsX2UsX2MsX2UsX2MsX2MsX2MsX2MsX2MsX2UsX2MsX2UsX2MsXzQsXzQsXzQsXzQsX2MsX2MsX2MsX2MsX2MsX2MsX2MsX2MsX2MsX2MsX2MsX2MsXzQsXzQsXzQsXzQsX2YsX2MsX2UsX2MsXzksXzgsXzgsXzgsX2UsX2MsX2UsX2MsXzAsXzAsXzAsXzAsX2QsX2MsX2MsX2MsXzksXzgsXzgsXzgsX2MsX2MsX2MsX2MsXzAsXzAsXzAsXzAsX2MsX2MsX2MsX2MsXzgsXzgsXzgsXzgsX2MsX2MsX2MsX2MsXzAsXzAsXzAsXzAsX2MsX2MsX2MsX2MsXzgsXzgsXzgsXzgsX2MsX2MsX2MsX2MsXzAsXzAsXzAsXzAsCisgICAgICBfZSxfZSxfZSxfZSxfMixfMCxfMixfMCxfNixfNixfNixfNixfMixfMCxfMixfMCxfZSxfYyxfZSxfYyxfMCxfMCxfMCxfMCxfNixfNCxfNixfNCxfMCxfMCxfMCxfMCxfZSxfYyxfZSxfYyxfMCxfMCxfMCxfMCxfNixfNCxfNixfNCxfMCxfMCxfMCxfMCxfYyxfYyxfYyxfYyxfMCxfMCxfMCxfMCxfNCxfNCxfNCxfNCxfMCxfMCxfMCxfMCxfYSxfOCxfYSxfOCxfMCxfMCxfMCxfMCxfMixfMCxfMixfMCxfMCxfMCxfMCxfMCxfOCxfOCxfOCxfOCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfOCxfOCxfOCxfOCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfOCxfOCxfOCxfOCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCwKKyAgICAgIF9mLF9jLF9lLF9jLF85LF84LF84LF84LF9lLF9jLF9lLF9jLF8wLF8wLF8wLF8wLF9kLF9jLF9jLF9jLF85LF84LF84LF84LF9jLF9jLF9jLF9jLF8wLF8wLF8wLF8wLF9jLF9jLF9jLF9jLF84LF84LF84LF84LF9jLF9jLF9jLF9jLF8wLF8wLF8wLF8wLF9jLF9jLF9jLF9jLF84LF84LF84LF84LF9jLF9jLF9jLF9jLF8wLF8wLF8wLF8wLF85LF84LF84LF84LF85LF84LF84LF84LF84LF84LF84LF84LF8wLF8wLF8wLF8wLF85LF84LF84LF84LF85LF84LF84LF84LF84LF84LF84LF84LF8wLF8wLF8wLF8wLF84LF84LF84LF84LF84LF84LF84LF84LF84LF84LF84LF84LF8wLF8wLF8wLF8wLF84LF84LF84LF84LF84LF84LF84LF84LF84LF84LF84LF84LF8wLF8wLF8wLF8wLAorICAgICAgX2EsXzgsX2EsXzgsXzAsXzAsXzAsXzAsXzIsXzAsXzIsXzAsXzAsXzAsXzAsXzAsXzgsXzgsXzgsXzgsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzgsXzgsXzgsXzgsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzgsXzgsXzgsXzgsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzgsXzgsXzgsXzgsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzgsXzgsXzgsXzgsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzgsXzgsXzgsXzgsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzgsXzgsXzgsXzgsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsCisgICAgICBfOCxfOSxfOSxfOCxfZCxfZixfZCxfZSxfOSxfOCxfOCxfOCxfNSxfNixfNCxfNixfOCxfYixfOSxfYSxfZixfZCxfZixfYyxfOSxfYSxfOCxfYSxfNyxfNCxfNixfNCxfOSxfYSxfOCxfYSxfZixfYyxfZSxfYyxfOCxfYSxfOCxfYSxfNixfNCxfNixfNCxfYixfOCxfYSxfOCxfZCxfYyxfYyxfYyxfYSxfOCxfYSxfOCxfNCxfNCxfNCxfNCxfYyxfZixfZCxfZSxfYixfOSxfYixfOCxfZCxfZSxfYyxfZSxfMyxfMCxfMixfMCxfZSxfZCxfZixfYyxfOSxfOSxfOSxfOCxfZixfYyxfZSxfYyxfMSxfMCxfMCxfMCxfZixfYyxfZSxfYyxfOSxfOCxfOCxfOCxfZSxfYyxfZSxfYyxfMCxfMCxfMCxfMCxfZCxfYyxfYyxfYyxfOSxfOCxfOCxfOCxfYyxfYyxfYyxfYyxfMCxfMCxfMCxfMCwKKyAgICAgIF9kLF9lLF9jLF9lLF8zLF8yLF8yLF8yLF80LF82LF80LF82LF8yLF8yLF8yLF8yLF9mLF9lLF9lLF9lLF8zLF8wLF8yLF8wLF82LF82LF82LF82LF8yLF8wLF8yLF8wLF9lLF9lLF9lLF9lLF8yLF8wLF8yLF8wLF82LF82LF82LF82LF8yLF8wLF8yLF8wLF9lLF9jLF9lLF9jLF8wLF8wLF8wLF8wLF82LF80LF82LF80LF8wLF8wLF8wLF8wLF9iLF9hLF9hLF9hLF8zLF8wLF8yLF8wLF8yLF8yLF8yLF8yLF8yLF8wLF8yLF8wLF9iLF84LF9hLF84LF8xLF8wLF8wLF8wLF8yLF8wLF8yLF8wLF8wLF8wLF8wLF8wLF9hLF84LF9hLF84LF8wLF8wLF8wLF8wLF8yLF8wLF8yLF8wLF8wLF8wLF8wLF8wLF84LF84LF84LF84LF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLAorICAgICAgX2MsX2YsX2QsX2UsX2IsXzksX2IsXzgsX2QsX2UsX2MsX2UsXzMsXzAsXzIsXzAsX2UsX2QsX2YsX2MsXzksXzksXzksXzgsX2YsX2MsX2UsX2MsXzEsXzAsXzAsXzAsX2YsX2MsX2UsX2MsXzksXzgsXzgsXzgsX2UsX2MsX2UsX2MsXzAsXzAsXzAsXzAsX2QsX2MsX2MsX2MsXzksXzgsXzgsXzgsX2MsX2MsX2MsX2MsXzAsXzAsXzAsXzAsX2EsXzksX2IsXzgsXzksXzksXzksXzgsX2IsXzgsX2EsXzgsXzEsXzAsXzAsXzAsXzgsXzksXzksXzgsXzksXzksXzksXzgsXzksXzgsXzgsXzgsXzEsXzAsXzAsXzAsXzksXzgsXzgsXzgsXzksXzgsXzgsXzgsXzgsXzgsXzgsXzgsXzAsXzAsXzAsXzAsXzksXzgsXzgsXzgsXzksXzgsXzgsXzgsXzgsXzgsXzgsXzgsXzAsXzAsXzAsXzAsCisgICAgICBfYixfYSxfYSxfYSxfMyxfMCxfMixfMCxfMixfMixfMixfMixfMixfMCxfMixfMCxfYixfOCxfYSxfOCxfMSxfMCxfMCxfMCxfMixfMCxfMixfMCxfMCxfMCxfMCxfMCxfYSxfOCxfYSxfOCxfMCxfMCxfMCxfMCxfMixfMCxfMixfMCxfMCxfMCxfMCxfMCxfOCxfOCxfOCxfOCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfYixfOCxfYSxfOCxfMSxfMCxfMCxfMCxfMixfMCxfMixfMCxfMCxfMCxfMCxfMCxfOSxfOCxfOCxfOCxfMSxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfOCxfOCxfOCxfOCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfOCxfOCxfOCxfOCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCwKKyAgICAgIF9kLF9lLF9jLF9lLF83LF80LF82LF80LF80LF82LF80LF82LF82LF80LF82LF80LF9mLF9jLF9lLF9jLF81LF80LF80LF80LF82LF80LF82LF80LF80LF80LF80LF80LF9lLF9jLF9lLF9jLF80LF80LF80LF80LF82LF80LF82LF80LF80LF80LF80LF80LF9jLF9jLF9jLF9jLF80LF80LF80LF80LF80LF80LF80LF80LF80LF80LF80LF80LF9mLF9jLF9lLF9jLF8xLF8wLF8wLF8wLF82LF80LF82LF80LF8wLF8wLF8wLF8wLF9kLF9jLF9jLF9jLF8xLF8wLF8wLF8wLF80LF80LF80LF80LF8wLF8wLF8wLF8wLF9jLF9jLF9jLF9jLF8wLF8wLF8wLF8wLF80LF80LF80LF80LF8wLF8wLF8wLF8wLF9jLF9jLF9jLF9jLF8wLF8wLF8wLF8wLF80LF80LF80LF80LF8wLF8wLF8wLF8wLAorICAgICAgXzYsXzYsXzYsXzYsXzIsXzAsXzIsXzAsXzYsXzYsXzYsXzYsXzIsXzAsXzIsXzAsXzYsXzQsXzYsXzQsXzAsXzAsXzAsXzAsXzYsXzQsXzYsXzQsXzAsXzAsXzAsXzAsXzYsXzQsXzYsXzQsXzAsXzAsXzAsXzAsXzYsXzQsXzYsXzQsXzAsXzAsXzAsXzAsXzQsXzQsXzQsXzQsXzAsXzAsXzAsXzAsXzQsXzQsXzQsXzQsXzAsXzAsXzAsXzAsXzIsXzAsXzIsXzAsXzAsXzAsXzAsXzAsXzIsXzAsXzIsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsCisgICAgICBfZixfYyxfZSxfYyxfMSxfMCxfMCxfMCxfNixfNCxfNixfNCxfMCxfMCxfMCxfMCxfZCxfYyxfYyxfYyxfMSxfMCxfMCxfMCxfNCxfNCxfNCxfNCxfMCxfMCxfMCxfMCxfYyxfYyxfYyxfYyxfMCxfMCxfMCxfMCxfNCxfNCxfNCxfNCxfMCxfMCxfMCxfMCxfYyxfYyxfYyxfYyxfMCxfMCxfMCxfMCxfNCxfNCxfNCxfNCxfMCxfMCxfMCxfMCxfOSxfOCxfOCxfOCxfMSxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfOSxfOCxfOCxfOCxfMSxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfOCxfOCxfOCxfOCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfOCxfOCxfOCxfOCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCwKKyAgICAgIF8yLF8wLF8yLF8wLF8wLF8wLF8wLF8wLF8yLF8wLF8yLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLAorICAgICAgX2MsX2QsX2QsX2MsXzksX2IsXzksX2EsX2QsX2MsX2MsX2MsXzEsXzIsXzAsXzIsX2MsX2YsX2QsX2UsX2IsXzksX2IsXzgsX2QsX2UsX2MsX2UsXzMsXzAsXzIsXzAsX2QsX2UsX2MsX2UsX2IsXzgsX2EsXzgsX2MsX2UsX2MsX2UsXzIsXzAsXzIsXzAsX2YsX2MsX2UsX2MsXzksXzgsXzgsXzgsX2UsX2MsX2UsX2MsXzAsXzAsXzAsXzAsXzgsX2IsXzksX2EsX2IsXzksX2IsXzgsXzksX2EsXzgsX2EsXzMsXzAsXzIsXzAsX2EsXzksX2IsXzgsXzksXzksXzksXzgsX2IsXzgsX2EsXzgsXzEsXzAsXzAsXzAsX2IsXzgsX2EsXzgsXzksXzgsXzgsXzgsX2EsXzgsX2EsXzgsXzAsXzAsXzAsXzAsXzksXzgsXzgsXzgsXzksXzgsXzgsXzgsXzgsXzgsXzgsXzgsXzAsXzAsXzAsXzAsCisgICAgICBfOSxfYSxfOCxfYSxfMyxfMixfMixfMixfMCxfMixfMCxfMixfMixfMixfMixfMixfYixfYSxfYSxfYSxfMyxfMCxfMixfMCxfMixfMixfMixfMixfMixfMCxfMixfMCxfYSxfYSxfYSxfYSxfMixfMCxfMixfMCxfMixfMixfMixfMixfMixfMCxfMixfMCxfYSxfOCxfYSxfOCxfMCxfMCxfMCxfMCxfMixfMCxfMixfMCxfMCxfMCxfMCxfMCxfYixfYSxfYSxfYSxfMyxfMCxfMixfMCxfMixfMixfMixfMixfMixfMCxfMixfMCxfYixfOCxfYSxfOCxfMSxfMCxfMCxfMCxfMixfMCxfMixfMCxfMCxfMCxfMCxfMCxfYSxfOCxfYSxfOCxfMCxfMCxfMCxfMCxfMixfMCxfMixfMCxfMCxfMCxfMCxfMCxfOCxfOCxfOCxfOCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCwKKyAgICAgIF84LF9iLF85LF9hLF9iLF85LF9iLF84LF85LF9hLF84LF9hLF8zLF8wLF8yLF8wLF9hLF85LF9iLF84LF85LF85LF85LF84LF9iLF84LF9hLF84LF8xLF8wLF8wLF8wLF9iLF84LF9hLF84LF85LF84LF84LF84LF9hLF84LF9hLF84LF8wLF8wLF8wLF8wLF85LF84LF84LF84LF85LF84LF84LF84LF84LF84LF84LF84LF8wLF8wLF8wLF8wLF9hLF85LF9iLF84LF85LF85LF85LF84LF9iLF84LF9hLF84LF8xLF8wLF8wLF8wLF84LF85LF85LF84LF85LF85LF85LF84LF85LF84LF84LF84LF8xLF8wLF8wLF8wLF85LF84LF84LF84LF85LF84LF84LF84LF84LF84LF84LF84LF8wLF8wLF8wLF8wLF85LF84LF84LF84LF85LF84LF84LF84LF84LF84LF84LF84LF8wLF8wLF8wLF8wLAorICAgICAgX2IsX2EsX2EsX2EsXzMsXzAsXzIsXzAsXzIsXzIsXzIsXzIsXzIsXzAsXzIsXzAsX2IsXzgsX2EsXzgsXzEsXzAsXzAsXzAsXzIsXzAsXzIsXzAsXzAsXzAsXzAsXzAsX2EsXzgsX2EsXzgsXzAsXzAsXzAsXzAsXzIsXzAsXzIsXzAsXzAsXzAsXzAsXzAsXzgsXzgsXzgsXzgsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsX2IsXzgsX2EsXzgsXzEsXzAsXzAsXzAsXzIsXzAsXzIsXzAsXzAsXzAsXzAsXzAsXzksXzgsXzgsXzgsXzEsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzgsXzgsXzgsXzgsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzgsXzgsXzgsXzgsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsCisgICAgICBfZCxfZSxfYyxfZSxfMyxfMCxfMixfMCxfNCxfNixfNCxfNixfMixfMCxfMixfMCxfZixfYyxfZSxfYyxfMSxfMCxfMCxfMCxfNixfNCxfNixfNCxfMCxfMCxfMCxfMCxfZSxfYyxfZSxfYyxfMCxfMCxfMCxfMCxfNixfNCxfNixfNCxfMCxfMCxfMCxfMCxfYyxfYyxfYyxfYyxfMCxfMCxfMCxfMCxfNCxfNCxfNCxfNCxfMCxfMCxfMCxfMCxfYixfOCxfYSxfOCxfMSxfMCxfMCxfMCxfMixfMCxfMixfMCxfMCxfMCxfMCxfMCxfOSxfOCxfOCxfOCxfMSxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfOCxfOCxfOCxfOCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfOCxfOCxfOCxfOCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCwKKyAgICAgIF8yLF8yLF8yLF8yLF8yLF8wLF8yLF8wLF8yLF8yLF8yLF8yLF8yLF8wLF8yLF8wLF8yLF8wLF8yLF8wLF8wLF8wLF8wLF8wLF8yLF8wLF8yLF8wLF8wLF8wLF8wLF8wLF8yLF8wLF8yLF8wLF8wLF8wLF8wLF8wLF8yLF8wLF8yLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8yLF8wLF8yLF8wLF8wLF8wLF8wLF8wLF8yLF8wLF8yLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLAorICAgICAgX2IsXzgsX2EsXzgsXzEsXzAsXzAsXzAsXzIsXzAsXzIsXzAsXzAsXzAsXzAsXzAsXzksXzgsXzgsXzgsXzEsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzgsXzgsXzgsXzgsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzgsXzgsXzgsXzgsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzksXzgsXzgsXzgsXzEsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzksXzgsXzgsXzgsXzEsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzgsXzgsXzgsXzgsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzgsXzgsXzgsXzgsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsCisgICAgICBfMixfMCxfMixfMCxfMCxfMCxfMCxfMCxfMixfMCxfMixfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCwKKyAgICAgIF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8xLF8wLF8wLF8wLF8xLF84LF85LF85LF85LF8wLF8wLF8wLF8wLF8wLF8yLF8wLF8zLF8wLF8wLF8wLF8xLF84LF9iLF85LF9iLF8wLF8wLF8wLF8xLF8wLF8zLF8xLF8zLF8wLF8xLF8xLF8wLF85LF9iLF85LF9hLF8wLF8yLF8wLF8zLF8yLF8xLF8zLF8xLF8wLF8zLF8xLF8yLF9iLF85LF9iLF84LF8wLF8wLF8wLF8wLF80LF82LF80LF83LF8wLF8wLF8wLF8xLF9jLF9mLF9kLF9mLF8wLF8yLF8wLF8yLF82LF80LF82LF81LF8wLF8yLF8wLF8zLF9lLF9kLF9mLF9kLF8wLF8yLF8wLF8zLF82LF81LF83LF81LF8wLF8zLF8xLF8yLF9mLF9kLF9mLF9jLF8yLF8wLF8yLF8xLF80LF81LF81LF81LF8yLF8xLF8zLF8wLF9kLF9kLF9kLF9jLAorICAgICAgXzAsXzAsXzAsXzEsX2MsX2YsX2QsX2YsXzgsXzksXzksXzgsXzUsXzcsXzUsXzYsXzAsXzIsXzAsXzMsX2UsX2YsX2YsX2YsXzgsX2IsXzksX2EsXzcsXzcsXzcsXzYsXzAsXzMsXzEsXzIsX2YsX2YsX2YsX2UsXzksX2EsXzgsX2EsXzcsXzYsXzYsXzYsXzIsXzMsXzMsXzIsX2YsX2QsX2YsX2MsX2IsX2EsX2EsX2EsXzcsXzQsXzYsXzQsXzQsXzYsXzQsXzcsX2EsX2IsX2IsX2IsX2MsX2YsX2QsX2UsXzMsXzMsXzMsXzIsXzYsXzYsXzYsXzcsX2EsXzksX2IsXzksX2UsX2YsX2YsX2UsXzMsXzEsXzMsXzAsXzYsXzcsXzcsXzYsX2IsXzksX2IsXzgsX2YsX2UsX2UsX2UsXzMsXzAsXzIsXzAsXzYsXzUsXzcsXzQsXzksXzksXzksXzgsX2YsX2MsX2UsX2MsXzEsXzAsXzAsXzAsCisgICAgICBfMCxfMCxfMCxfMCxfNCxfNixfNCxfNyxfMCxfMCxfMCxfMSxfYyxfZixfZCxfZixfMCxfMixfMCxfMixfNixfNCxfNixfNSxfMCxfMixfMCxfMyxfZSxfZCxfZixfZCxfMCxfMixfMCxfMyxfNixfNSxfNyxfNSxfMCxfMyxfMSxfMixfZixfZCxfZixfYyxfMixfMCxfMixfMSxfNCxfNSxfNSxfNSxfMixfMSxfMyxfMCxfZCxfZCxfZCxfYyxfNCxfNixfNCxfNixfMixfMCxfMixfMSxfNCxfNixfNCxfNyxfYSxfOSxfYixfOSxfNixfNCxfNixfNCxfMCxfMCxfMCxfMSxfNixfNCxfNixfNSxfOCxfOSxfOSxfOSxfNixfNCxfNixfNSxfMCxfMSxfMSxfMSxfNixfNSxfNyxfNCxfOSxfOSxfOSxfOCxfNCxfNCxfNCxfNSxfMCxfMSxfMSxfMSxfNCxfNSxfNSxfNCxfOSxfOSxfOSxfOCwKKyAgICAgIF80LF82LF80LF83LF9hLF9iLF9iLF9iLF9jLF9mLF9kLF9lLF8zLF8zLF8zLF8yLF82LF82LF82LF83LF9hLF85LF9iLF85LF9lLF9mLF9mLF9lLF8zLF8xLF8zLF8wLF82LF83LF83LF82LF9iLF85LF9iLF84LF9mLF9lLF9lLF9lLF8zLF8wLF8yLF8wLF82LF81LF83LF80LF85LF85LF85LF84LF9mLF9jLF9lLF9jLF8xLF8wLF8wLF8wLF8yLF8yLF8yLF8zLF9hLF85LF9iLF85LF9hLF9iLF9iLF9hLF8zLF8xLF8zLF8wLF8yLF8wLF8yLF8xLF84LF85LF85LF85LF9hLF85LF9iLF84LF8xLF8xLF8xLF8wLF8yLF8xLF8zLF8wLF85LF85LF85LF84LF9iLF84LF9hLF84LF8xLF8wLF8wLF8wLF8wLF8xLF8xLF8wLF85LF85LF85LF84LF85LF84LF84LF84LF8xLF8wLF8wLF8wLAorICAgICAgXzAsXzAsXzAsXzEsX2MsX2YsX2QsX2YsXzgsXzksXzksXzgsXzUsXzcsXzUsXzYsXzAsXzIsXzAsXzMsX2UsX2QsX2YsX2QsXzgsX2IsXzksX2EsXzcsXzUsXzcsXzQsXzAsXzMsXzEsXzIsX2YsX2QsX2YsX2MsXzksX2EsXzgsX2EsXzcsXzQsXzYsXzQsXzIsXzEsXzMsXzAsX2QsX2QsX2QsX2MsX2IsXzgsX2EsXzgsXzUsXzQsXzQsXzQsXzQsXzYsXzQsXzcsX2UsX2QsX2YsX2QsX2MsX2YsX2QsX2UsXzcsXzUsXzcsXzQsXzYsXzQsXzYsXzUsX2MsX2QsX2QsX2QsX2UsX2QsX2YsX2MsXzUsXzUsXzUsXzQsXzYsXzUsXzcsXzQsX2QsX2QsX2QsX2MsX2YsX2MsX2UsX2MsXzUsXzQsXzQsXzQsXzQsXzUsXzUsXzQsX2QsX2QsX2QsX2MsX2QsX2MsX2MsX2MsXzUsXzQsXzQsXzQsCisgICAgICBfYyxfZixfZCxfZSxfNyxfNyxfNyxfNixfNSxfNixfNCxfNixfNyxfNixfNixfNixfZSxfZixfZixfZSxfNyxfNSxfNyxfNCxfNyxfNixfNixfNixfNyxfNCxfNixfNCxfZixfZSxfZSxfZSxfNyxfNCxfNixfNCxfNixfNixfNixfNixfNixfNCxfNixfNCxfZixfYyxfZSxfYyxfNSxfNCxfNCxfNCxfNixfNCxfNixfNCxfNCxfNCxfNCxfNCxfZSxfZixfZixfZSxfMyxfMSxfMyxfMCxfNyxfNixfNixfNixfMyxfMCxfMixfMCxfZSxfZCxfZixfYyxfMSxfMSxfMSxfMCxfNyxfNCxfNixfNCxfMSxfMCxfMCxfMCxfZixfYyxfZSxfYyxfMSxfMCxfMCxfMCxfNixfNCxfNixfNCxfMCxfMCxfMCxfMCxfZCxfYyxfYyxfYyxfMSxfMCxfMCxfMCxfNCxfNCxfNCxfNCxfMCxfMCxfMCxfMCwKKyAgICAgIF80LF82LF80LF83LF9lLF9kLF9mLF9kLF9jLF9mLF9kLF9lLF83LF81LF83LF80LF82LF80LF82LF81LF9jLF9kLF9kLF9kLF9lLF9kLF9mLF9jLF81LF81LF81LF80LF82LF81LF83LF80LF9kLF9kLF9kLF9jLF9mLF9jLF9lLF9jLF81LF80LF80LF80LF80LF81LF81LF80LF9kLF9kLF9kLF9jLF9kLF9jLF9jLF9jLF81LF80LF80LF80LF82LF80LF82LF81LF84LF85LF85LF85LF9lLF9kLF9mLF9jLF8xLF8xLF8xLF8wLF80LF80LF80LF81LF84LF85LF85LF85LF9jLF9kLF9kLF9jLF8xLF8xLF8xLF8wLF80LF81LF81LF80LF85LF85LF85LF84LF9kLF9jLF9jLF9jLF8xLF8wLF8wLF8wLF80LF81LF81LF80LF85LF85LF85LF84LF9kLF9jLF9jLF9jLF8xLF8wLF8wLF8wLAorICAgICAgX2UsX2YsX2YsX2UsXzMsXzEsXzMsXzAsXzcsXzYsXzYsXzYsXzMsXzAsXzIsXzAsX2UsX2QsX2YsX2MsXzEsXzEsXzEsXzAsXzcsXzQsXzYsXzQsXzEsXzAsXzAsXzAsX2YsX2MsX2UsX2MsXzEsXzAsXzAsXzAsXzYsXzQsXzYsXzQsXzAsXzAsXzAsXzAsX2QsX2MsX2MsX2MsXzEsXzAsXzAsXzAsXzQsXzQsXzQsXzQsXzAsXzAsXzAsXzAsX2EsXzksX2IsXzgsXzEsXzEsXzEsXzAsXzMsXzAsXzIsXzAsXzEsXzAsXzAsXzAsXzgsXzksXzksXzgsXzEsXzEsXzEsXzAsXzEsXzAsXzAsXzAsXzEsXzAsXzAsXzAsXzksXzgsXzgsXzgsXzEsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzksXzgsXzgsXzgsXzEsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsCisgICAgICBfMCxfMCxfMCxfMCxfNCxfNCxfNCxfNSxfMCxfMCxfMCxfMSxfYyxfZCxfZCxfZCxfMCxfMCxfMCxfMCxfNCxfNixfNCxfNyxfMCxfMCxfMCxfMSxfYyxfZixfZCxfZixfMCxfMCxfMCxfMSxfNCxfNyxfNSxfNyxfMCxfMSxfMSxfMCxfZCxfZixfZCxfZSxfMCxfMixfMCxfMyxfNixfNSxfNyxfNSxfMCxfMyxfMSxfMixfZixfZCxfZixfYyxfNCxfNCxfNCxfNCxfMCxfMixfMCxfMyxfNCxfNCxfNCxfNSxfOCxfYixfOSxfYixfNCxfNixfNCxfNixfMixfMCxfMixfMSxfNCxfNixfNCxfNyxfYSxfOSxfYixfOSxfNCxfNixfNCxfNyxfMixfMSxfMyxfMSxfNCxfNyxfNSxfNixfYixfOSxfYixfOCxfNixfNCxfNixfNSxfMCxfMSxfMSxfMSxfNixfNSxfNyxfNCxfOSxfOSxfOSxfOCwKKyAgICAgIF80LF80LF80LF81LF84LF9iLF85LF9iLF9jLF9kLF9kLF9jLF8xLF8zLF8xLF8yLF80LF82LF80LF83LF9hLF9iLF9iLF9iLF9jLF9mLF9kLF9lLF8zLF8zLF8zLF8yLF80LF83LF81LF82LF9iLF9iLF9iLF9hLF9kLF9lLF9jLF9lLF8zLF8yLF8yLF8yLF82LF83LF83LF82LF9iLF85LF9iLF84LF9mLF9lLF9lLF9lLF8zLF8wLF8yLF8wLF8wLF8yLF8wLF8zLF9hLF9iLF9iLF9iLF84LF9iLF85LF9hLF8zLF8zLF8zLF8yLF8yLF8yLF8yLF8zLF9hLF85LF9iLF85LF9hLF9iLF9iLF9hLF8zLF8xLF8zLF8wLF8yLF8zLF8zLF8yLF9iLF85LF9iLF84LF9iLF9hLF9hLF9hLF8zLF8wLF8yLF8wLF8yLF8xLF8zLF8wLF85LF85LF85LF84LF9iLF84LF9hLF84LF8xLF8wLF8wLF8wLAorICAgICAgXzQsXzQsXzQsXzQsXzAsXzIsXzAsXzMsXzQsXzQsXzQsXzUsXzgsX2IsXzksX2IsXzQsXzYsXzQsXzYsXzIsXzAsXzIsXzEsXzQsXzYsXzQsXzcsX2EsXzksX2IsXzksXzQsXzYsXzQsXzcsXzIsXzEsXzMsXzEsXzQsXzcsXzUsXzYsX2IsXzksX2IsXzgsXzYsXzQsXzYsXzUsXzAsXzEsXzEsXzEsXzYsXzUsXzcsXzQsXzksXzksXzksXzgsXzAsXzIsXzAsXzIsXzIsXzAsXzIsXzEsXzAsXzIsXzAsXzMsX2EsXzksX2IsXzksXzIsXzAsXzIsXzAsXzAsXzAsXzAsXzEsXzIsXzAsXzIsXzEsXzgsXzksXzksXzksXzIsXzAsXzIsXzEsXzAsXzEsXzEsXzEsXzIsXzEsXzMsXzAsXzksXzksXzksXzgsXzAsXzAsXzAsXzEsXzAsXzEsXzEsXzEsXzAsXzEsXzEsXzAsXzksXzksXzksXzgsCisgICAgICBfMCxfMixfMCxfMyxfYSxfYixfYixfYixfOCxfYixfOSxfYSxfMyxfMyxfMyxfMixfMixfMixfMixfMyxfYSxfOSxfYixfOSxfYSxfYixfYixfYSxfMyxfMSxfMyxfMCxfMixfMyxfMyxfMixfYixfOSxfYixfOCxfYixfYSxfYSxfYSxfMyxfMCxfMixfMCxfMixfMSxfMyxfMCxfOSxfOSxfOSxfOCxfYixfOCxfYSxfOCxfMSxfMCxfMCxfMCxfMixfMixfMixfMyxfYSxfOSxfYixfOSxfYSxfYixfYixfYSxfMyxfMSxfMyxfMCxfMixfMCxfMixfMSxfOCxfOSxfOSxfOSxfYSxfOSxfYixfOCxfMSxfMSxfMSxfMCxfMixfMSxfMyxfMCxfOSxfOSxfOSxfOCxfYixfOCxfYSxfOCxfMSxfMCxfMCxfMCxfMCxfMSxfMSxfMCxfOSxfOSxfOSxfOCxfOSxfOCxfOCxfOCxfMSxfMCxfMCxfMCwKKyAgICAgIF80LF80LF80LF81LF9jLF9mLF9kLF9mLF9jLF9kLF9kLF9jLF81LF83LF81LF82LF80LF82LF80LF83LF9lLF9kLF9mLF9kLF9jLF9mLF9kLF9lLF83LF81LF83LF80LF80LF83LF81LF82LF9mLF9kLF9mLF9jLF9kLF9lLF9jLF9lLF83LF80LF82LF80LF82LF81LF83LF80LF9kLF9kLF9kLF9jLF9mLF9jLF9lLF9jLF81LF80LF80LF80LF80LF82LF80LF83LF9hLF85LF9iLF85LF9jLF9mLF9kLF9lLF8zLF8xLF8zLF8wLF82LF80LF82LF81LF84LF85LF85LF85LF9lLF9kLF9mLF9jLF8xLF8xLF8xLF8wLF82LF81LF83LF80LF85LF85LF85LF84LF9mLF9jLF9lLF9jLF8xLF8wLF8wLF8wLF80LF81LF81LF80LF85LF85LF85LF84LF9kLF9jLF9jLF9jLF8xLF8wLF8wLF8wLAorICAgICAgX2MsX2YsX2QsX2UsXzMsXzMsXzMsXzIsXzUsXzYsXzQsXzYsXzMsXzIsXzIsXzIsX2UsX2YsX2YsX2UsXzMsXzEsXzMsXzAsXzcsXzYsXzYsXzYsXzMsXzAsXzIsXzAsX2YsX2UsX2UsX2UsXzMsXzAsXzIsXzAsXzYsXzYsXzYsXzYsXzIsXzAsXzIsXzAsX2YsX2MsX2UsX2MsXzEsXzAsXzAsXzAsXzYsXzQsXzYsXzQsXzAsXzAsXzAsXzAsX2EsX2IsX2IsX2EsXzMsXzEsXzMsXzAsXzMsXzIsXzIsXzIsXzMsXzAsXzIsXzAsX2EsXzksX2IsXzgsXzEsXzEsXzEsXzAsXzMsXzAsXzIsXzAsXzEsXzAsXzAsXzAsX2IsXzgsX2EsXzgsXzEsXzAsXzAsXzAsXzIsXzAsXzIsXzAsXzAsXzAsXzAsXzAsXzksXzgsXzgsXzgsXzEsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsCisgICAgICBfNCxfNixfNCxfNyxfYSxfOSxfYixfOSxfYyxfZixfZCxfZSxfMyxfMSxfMyxfMCxfNixfNCxfNixfNSxfOCxfOSxfOSxfOSxfZSxfZCxfZixfYyxfMSxfMSxfMSxfMCxfNixfNSxfNyxfNCxfOSxfOSxfOSxfOCxfZixfYyxfZSxfYyxfMSxfMCxfMCxfMCxfNCxfNSxfNSxfNCxfOSxfOSxfOSxfOCxfZCxfYyxfYyxfYyxfMSxfMCxfMCxfMCxfMixfMCxfMixfMSxfOCxfOSxfOSxfOSxfYSxfOSxfYixfOCxfMSxfMSxfMSxfMCxfMCxfMCxfMCxfMSxfOCxfOSxfOSxfOSxfOCxfOSxfOSxfOCxfMSxfMSxfMSxfMCxfMCxfMSxfMSxfMCxfOSxfOSxfOSxfOCxfOSxfOCxfOCxfOCxfMSxfMCxfMCxfMCxfMCxfMSxfMSxfMCxfOSxfOSxfOSxfOCxfOSxfOCxfOCxfOCxfMSxfMCxfMCxfMCwKKyAgICAgIF9hLF9iLF9iLF9hLF8zLF8xLF8zLF8wLF8zLF8yLF8yLF8yLF8zLF8wLF8yLF8wLF9hLF85LF9iLF84LF8xLF8xLF8xLF8wLF8zLF8wLF8yLF8wLF8xLF8wLF8wLF8wLF9iLF84LF9hLF84LF8xLF8wLF8wLF8wLF8yLF8wLF8yLF8wLF8wLF8wLF8wLF8wLF85LF84LF84LF84LF8xLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF9hLF85LF9iLF84LF8xLF8xLF8xLF8wLF8zLF8wLF8yLF8wLF8xLF8wLF8wLF8wLF84LF85LF85LF84LF8xLF8xLF8xLF8wLF8xLF8wLF8wLF8wLF8xLF8wLF8wLF8wLF85LF84LF84LF84LF8xLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF85LF84LF84LF84LF8xLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLAorICAgICAgXzAsXzAsXzAsXzAsX2MsX2MsX2MsX2QsXzgsXzgsXzgsXzksXzQsXzUsXzUsXzUsXzAsXzAsXzAsXzAsX2MsX2UsX2MsX2YsXzgsXzgsXzgsXzksXzQsXzcsXzUsXzcsXzAsXzAsXzAsXzEsX2MsX2YsX2QsX2YsXzgsXzksXzksXzgsXzUsXzcsXzUsXzYsXzAsXzIsXzAsXzMsX2UsX2QsX2YsX2QsXzgsX2IsXzksX2EsXzcsXzUsXzcsXzQsXzQsXzQsXzQsXzQsXzgsX2EsXzgsX2IsX2MsX2MsX2MsX2QsXzAsXzMsXzEsXzMsXzQsXzYsXzQsXzYsX2EsXzgsX2EsXzksX2MsX2UsX2MsX2YsXzIsXzEsXzMsXzEsXzQsXzYsXzQsXzcsX2EsXzksX2IsXzksX2MsX2YsX2QsX2UsXzMsXzEsXzMsXzAsXzYsXzQsXzYsXzUsXzgsXzksXzksXzksX2UsX2QsX2YsX2MsXzEsXzEsXzEsXzAsCisgICAgICBfYyxfYyxfYyxfZCxfMCxfMyxfMSxfMyxfNCxfNSxfNSxfNCxfMSxfMyxfMSxfMixfYyxfZSxfYyxfZixfMixfMyxfMyxfMyxfNCxfNyxfNSxfNixfMyxfMyxfMyxfMixfYyxfZixfZCxfZSxfMyxfMyxfMyxfMixfNSxfNixfNCxfNixfMyxfMixfMixfMixfZSxfZixfZixfZSxfMyxfMSxfMyxfMCxfNyxfNixfNixfNixfMyxfMCxfMixfMCxfOCxfYSxfOCxfYixfMixfMyxfMyxfMyxfMCxfMyxfMSxfMixfMyxfMyxfMyxfMixfYSxfYSxfYSxfYixfMixfMSxfMyxfMSxfMixfMyxfMyxfMixfMyxfMSxfMyxfMCxfYSxfYixfYixfYSxfMyxfMSxfMyxfMCxfMyxfMixfMixfMixfMyxfMCxfMixfMCxfYSxfOSxfYixfOCxfMSxfMSxfMSxfMCxfMyxfMCxfMixfMCxfMSxfMCxfMCxfMCwKKyAgICAgIF80LF80LF80LF80LF84LF9hLF84LF9iLF9jLF9jLF9jLF9kLF8wLF8zLF8xLF8zLF80LF82LF80LF82LF9hLF84LF9hLF85LF9jLF9lLF9jLF9mLF8yLF8xLF8zLF8xLF80LF82LF80LF83LF9hLF85LF9iLF85LF9jLF9mLF9kLF9lLF8zLF8xLF8zLF8wLF82LF80LF82LF81LF84LF85LF85LF85LF9lLF9kLF9mLF9jLF8xLF8xLF8xLF8wLF8wLF8yLF8wLF8yLF9hLF84LF9hLF85LF84LF9hLF84LF9iLF8yLF8xLF8zLF8xLF8yLF8wLF8yLF8wLF84LF84LF84LF85LF9hLF84LF9hLF85LF8wLF8xLF8xLF8xLF8yLF8wLF8yLF8xLF84LF85LF85LF85LF9hLF85LF9iLF84LF8xLF8xLF8xLF8wLF8wLF8wLF8wLF8xLF84LF85LF85LF85LF84LF85LF85LF84LF8xLF8xLF8xLF8wLAorICAgICAgXzgsX2EsXzgsX2IsXzIsXzMsXzMsXzMsXzAsXzMsXzEsXzIsXzMsXzMsXzMsXzIsX2EsX2EsX2EsX2IsXzIsXzEsXzMsXzEsXzIsXzMsXzMsXzIsXzMsXzEsXzMsXzAsX2EsX2IsX2IsX2EsXzMsXzEsXzMsXzAsXzMsXzIsXzIsXzIsXzMsXzAsXzIsXzAsX2EsXzksX2IsXzgsXzEsXzEsXzEsXzAsXzMsXzAsXzIsXzAsXzEsXzAsXzAsXzAsX2EsX2EsX2EsX2IsXzIsXzEsXzMsXzEsXzIsXzMsXzMsXzIsXzMsXzEsXzMsXzAsX2EsXzgsX2EsXzksXzAsXzEsXzEsXzEsXzIsXzEsXzMsXzAsXzEsXzEsXzEsXzAsX2EsXzksX2IsXzgsXzEsXzEsXzEsXzAsXzMsXzAsXzIsXzAsXzEsXzAsXzAsXzAsXzgsXzksXzksXzgsXzEsXzEsXzEsXzAsXzEsXzAsXzAsXzAsXzEsXzAsXzAsXzAsCisgICAgICBfYyxfYyxfYyxfZCxfNCxfNyxfNSxfNyxfNCxfNSxfNSxfNCxfNSxfNyxfNSxfNixfYyxfZSxfYyxfZixfNixfNSxfNyxfNSxfNCxfNyxfNSxfNixfNyxfNSxfNyxfNCxfYyxfZixfZCxfZSxfNyxfNSxfNyxfNCxfNSxfNixfNCxfNixfNyxfNCxfNixfNCxfZSxfZCxfZixfYyxfNSxfNSxfNSxfNCxfNyxfNCxfNixfNCxfNSxfNCxfNCxfNCxfYyxfZSxfYyxfZixfMixfMSxfMyxfMSxfNCxfNyxfNSxfNixfMyxfMSxfMyxfMCxfZSxfYyxfZSxfZCxfMCxfMSxfMSxfMSxfNixfNSxfNyxfNCxfMSxfMSxfMSxfMCxfZSxfZCxfZixfYyxfMSxfMSxfMSxfMCxfNyxfNCxfNixfNCxfMSxfMCxfMCxfMCxfYyxfZCxfZCxfYyxfMSxfMSxfMSxfMCxfNSxfNCxfNCxfNCxfMSxfMCxfMCxfMCwKKyAgICAgIF80LF83LF81LF82LF8zLF8zLF8zLF8yLF81LF82LF80LF82LF8zLF8yLF8yLF8yLF82LF83LF83LF82LF8zLF8xLF8zLF8wLF83LF82LF82LF82LF8zLF8wLF8yLF8wLF83LF82LF82LF82LF8zLF8wLF8yLF8wLF82LF82LF82LF82LF8yLF8wLF8yLF8wLF83LF80LF82LF80LF8xLF8wLF8wLF8wLF82LF80LF82LF80LF8wLF8wLF8wLF8wLF8yLF8zLF8zLF8yLF8zLF8xLF8zLF8wLF8zLF8yLF8yLF8yLF8zLF8wLF8yLF8wLF8yLF8xLF8zLF8wLF8xLF8xLF8xLF8wLF8zLF8wLF8yLF8wLF8xLF8wLF8wLF8wLF8zLF8wLF8yLF8wLF8xLF8wLF8wLF8wLF8yLF8wLF8yLF8wLF8wLF8wLF8wLF8wLF8xLF8wLF8wLF8wLF8xLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLAorICAgICAgX2MsX2UsX2MsX2YsXzIsXzEsXzMsXzEsXzQsXzcsXzUsXzYsXzMsXzEsXzMsXzAsX2UsX2MsX2UsX2QsXzAsXzEsXzEsXzEsXzYsXzUsXzcsXzQsXzEsXzEsXzEsXzAsX2UsX2QsX2YsX2MsXzEsXzEsXzEsXzAsXzcsXzQsXzYsXzQsXzEsXzAsXzAsXzAsX2MsX2QsX2QsX2MsXzEsXzEsXzEsXzAsXzUsXzQsXzQsXzQsXzEsXzAsXzAsXzAsX2EsXzgsX2EsXzksXzAsXzEsXzEsXzEsXzIsXzEsXzMsXzAsXzEsXzEsXzEsXzAsXzgsXzgsXzgsXzksXzAsXzEsXzEsXzEsXzAsXzEsXzEsXzAsXzEsXzEsXzEsXzAsXzgsXzksXzksXzgsXzEsXzEsXzEsXzAsXzEsXzAsXzAsXzAsXzEsXzAsXzAsXzAsXzgsXzksXzksXzgsXzEsXzEsXzEsXzAsXzEsXzAsXzAsXzAsXzEsXzAsXzAsXzAsCisgICAgICBfMixfMyxfMyxfMixfMyxfMSxfMyxfMCxfMyxfMixfMixfMixfMyxfMCxfMixfMCxfMixfMSxfMyxfMCxfMSxfMSxfMSxfMCxfMyxfMCxfMixfMCxfMSxfMCxfMCxfMCxfMyxfMCxfMixfMCxfMSxfMCxfMCxfMCxfMixfMCxfMixfMCxfMCxfMCxfMCxfMCxfMSxfMCxfMCxfMCxfMSxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMixfMSxfMyxfMCxfMSxfMSxfMSxfMCxfMyxfMCxfMixfMCxfMSxfMCxfMCxfMCxfMCxfMSxfMSxfMCxfMSxfMSxfMSxfMCxfMSxfMCxfMCxfMCxfMSxfMCxfMCxfMCxfMSxfMCxfMCxfMCxfMSxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMSxfMCxfMCxfMCxfMSxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCwKKyAgICAgIF80LF80LF80LF80LF84LF84LF84LF85LF9jLF9jLF9jLF9kLF8wLF8xLF8xLF8xLF80LF80LF80LF80LF84LF9hLF84LF9iLF9jLF9jLF9jLF9kLF8wLF8zLF8xLF8zLF80LF80LF80LF81LF84LF9iLF85LF9iLF9jLF9kLF9kLF9jLF8xLF8zLF8xLF8yLF80LF82LF80LF83LF9hLF85LF9iLF85LF9jLF9mLF9kLF9lLF8zLF8xLF8zLF8wLF8wLF8wLF8wLF8wLF84LF9hLF84LF9iLF84LF84LF84LF85LF8wLF8zLF8xLF8zLF8wLF8yLF8wLF8yLF9hLF84LF9hLF85LF84LF9hLF84LF9iLF8yLF8xLF8zLF8xLF8wLF8yLF8wLF8zLF9hLF85LF9iLF85LF84LF9iLF85LF9hLF8zLF8xLF8zLF8wLF8yLF8wLF8yLF8xLF84LF85LF85LF85LF9hLF85LF9iLF84LF8xLF8xLF8xLF8wLAorICAgICAgXzgsXzgsXzgsXzksXzAsXzMsXzEsXzMsXzAsXzEsXzEsXzAsXzEsXzMsXzEsXzIsXzgsX2EsXzgsX2IsXzIsXzMsXzMsXzMsXzAsXzMsXzEsXzIsXzMsXzMsXzMsXzIsXzgsX2IsXzksX2EsXzMsXzMsXzMsXzIsXzEsXzIsXzAsXzIsXzMsXzIsXzIsXzIsX2EsX2IsX2IsX2EsXzMsXzEsXzMsXzAsXzMsXzIsXzIsXzIsXzMsXzAsXzIsXzAsXzgsX2EsXzgsX2IsXzIsXzMsXzMsXzMsXzAsXzMsXzEsXzIsXzMsXzMsXzMsXzIsX2EsX2EsX2EsX2IsXzIsXzEsXzMsXzEsXzIsXzMsXzMsXzIsXzMsXzEsXzMsXzAsX2EsX2IsX2IsX2EsXzMsXzEsXzMsXzAsXzMsXzIsXzIsXzIsXzMsXzAsXzIsXzAsX2EsXzksX2IsXzgsXzEsXzEsXzEsXzAsXzMsXzAsXzIsXzAsXzEsXzAsXzAsXzAsCisgICAgICBfMCxfMCxfMCxfMCxfOCxfYSxfOCxfYixfOCxfOCxfOCxfOSxfMCxfMyxfMSxfMyxfMCxfMixfMCxfMixfYSxfOCxfYSxfOSxfOCxfYSxfOCxfYixfMixfMSxfMyxfMSxfMCxfMixfMCxfMyxfYSxfOSxfYixfOSxfOCxfYixfOSxfYSxfMyxfMSxfMyxfMCxfMixfMCxfMixfMSxfOCxfOSxfOSxfOSxfYSxfOSxfYixfOCxfMSxfMSxfMSxfMCxfMCxfMixfMCxfMixfYSxfOCxfYSxfOSxfOCxfYSxfOCxfYixfMixfMSxfMyxfMSxfMixfMCxfMixfMCxfOCxfOCxfOCxfOSxfYSxfOCxfYSxfOSxfMCxfMSxfMSxfMSxfMixfMCxfMixfMSxfOCxfOSxfOSxfOSxfYSxfOSxfYixfOCxfMSxfMSxfMSxfMCxfMCxfMCxfMCxfMSxfOCxfOSxfOSxfOSxfOCxfOSxfOSxfOCxfMSxfMSxfMSxfMCwKKyAgICAgIF84LF9hLF84LF9iLF8yLF8zLF8zLF8zLF8wLF8zLF8xLF8yLF8zLF8zLF8zLF8yLF9hLF9hLF9hLF9iLF8yLF8xLF8zLF8xLF8yLF8zLF8zLF8yLF8zLF8xLF8zLF8wLF9hLF9iLF9iLF9hLF8zLF8xLF8zLF8wLF8zLF8yLF8yLF8yLF8zLF8wLF8yLF8wLF9hLF85LF9iLF84LF8xLF8xLF8xLF8wLF8zLF8wLF8yLF8wLF8xLF8wLF8wLF8wLF9hLF9hLF9hLF9iLF8yLF8xLF8zLF8xLF8yLF8zLF8zLF8yLF8zLF8xLF8zLF8wLF9hLF84LF9hLF85LF8wLF8xLF8xLF8xLF8yLF8xLF8zLF8wLF8xLF8xLF8xLF8wLF9hLF85LF9iLF84LF8xLF8xLF8xLF8wLF8zLF8wLF8yLF8wLF8xLF8wLF8wLF8wLF84LF85LF85LF84LF8xLF8xLF8xLF8wLF8xLF8wLF8wLF8wLF8xLF8wLF8wLF8wLAorICAgICAgX2MsX2MsX2MsX2QsXzAsXzMsXzEsXzMsXzQsXzUsXzUsXzQsXzEsXzMsXzEsXzIsX2MsX2UsX2MsX2YsXzIsXzEsXzMsXzEsXzQsXzcsXzUsXzYsXzMsXzEsXzMsXzAsX2MsX2YsX2QsX2UsXzMsXzEsXzMsXzAsXzUsXzYsXzQsXzYsXzMsXzAsXzIsXzAsX2UsX2QsX2YsX2MsXzEsXzEsXzEsXzAsXzcsXzQsXzYsXzQsXzEsXzAsXzAsXzAsXzgsX2EsXzgsX2IsXzIsXzEsXzMsXzEsXzAsXzMsXzEsXzIsXzMsXzEsXzMsXzAsX2EsXzgsX2EsXzksXzAsXzEsXzEsXzEsXzIsXzEsXzMsXzAsXzEsXzEsXzEsXzAsX2EsXzksX2IsXzgsXzEsXzEsXzEsXzAsXzMsXzAsXzIsXzAsXzEsXzAsXzAsXzAsXzgsXzksXzksXzgsXzEsXzEsXzEsXzAsXzEsXzAsXzAsXzAsXzEsXzAsXzAsXzAsCisgICAgICBfMCxfMyxfMSxfMixfMyxfMyxfMyxfMixfMSxfMixfMCxfMixfMyxfMixfMixfMixfMixfMyxfMyxfMixfMyxfMSxfMyxfMCxfMyxfMixfMixfMixfMyxfMCxfMixfMCxfMyxfMixfMixfMixfMyxfMCxfMixfMCxfMixfMixfMixfMixfMixfMCxfMixfMCxfMyxfMCxfMixfMCxfMSxfMCxfMCxfMCxfMixfMCxfMixfMCxfMCxfMCxfMCxfMCxfMixfMyxfMyxfMixfMyxfMSxfMyxfMCxfMyxfMixfMixfMixfMyxfMCxfMixfMCxfMixfMSxfMyxfMCxfMSxfMSxfMSxfMCxfMyxfMCxfMixfMCxfMSxfMCxfMCxfMCxfMyxfMCxfMixfMCxfMSxfMCxfMCxfMCxfMixfMCxfMixfMCxfMCxfMCxfMCxfMCxfMSxfMCxfMCxfMCxfMSxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCwKKyAgICAgIF84LF9hLF84LF9iLF8yLF8xLF8zLF8xLF8wLF8zLF8xLF8yLF8zLF8xLF8zLF8wLF9hLF84LF9hLF85LF8wLF8xLF8xLF8xLF8yLF8xLF8zLF8wLF8xLF8xLF8xLF8wLF9hLF85LF9iLF84LF8xLF8xLF8xLF8wLF8zLF8wLF8yLF8wLF8xLF8wLF8wLF8wLF84LF85LF85LF84LF8xLF8xLF8xLF8wLF8xLF8wLF8wLF8wLF8xLF8wLF8wLF8wLF9hLF84LF9hLF85LF8wLF8xLF8xLF8xLF8yLF8xLF8zLF8wLF8xLF8xLF8xLF8wLF84LF84LF84LF85LF8wLF8xLF8xLF8xLF8wLF8xLF8xLF8wLF8xLF8xLF8xLF8wLF84LF85LF85LF84LF8xLF8xLF8xLF8wLF8xLF8wLF8wLF8wLF8xLF8wLF8wLF8wLF84LF85LF85LF84LF8xLF8xLF8xLF8wLF8xLF8wLF8wLF8wLF8xLF8wLF8wLF8wLAorICAgICAgXzIsXzMsXzMsXzIsXzMsXzEsXzMsXzAsXzMsXzIsXzIsXzIsXzMsXzAsXzIsXzAsXzIsXzEsXzMsXzAsXzEsXzEsXzEsXzAsXzMsXzAsXzIsXzAsXzEsXzAsXzAsXzAsXzMsXzAsXzIsXzAsXzEsXzAsXzAsXzAsXzIsXzAsXzIsXzAsXzAsXzAsXzAsXzAsXzEsXzAsXzAsXzAsXzEsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzIsXzEsXzMsXzAsXzEsXzEsXzEsXzAsXzMsXzAsXzIsXzAsXzEsXzAsXzAsXzAsXzAsXzEsXzEsXzAsXzEsXzEsXzEsXzAsXzEsXzAsXzAsXzAsXzEsXzAsXzAsXzAsXzEsXzAsXzAsXzAsXzEsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzEsXzAsXzAsXzAsXzEsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsCisgICAgICBfMCxfMCxfMCxfMSxfYyxfZixfZCxfZixfOCxfOSxfOSxfOCxfZCxfZixfZCxfZSxfMCxfMixfMCxfMyxfZSxfZCxfZixfZCxfOCxfYixfOSxfYSxfZixfZCxfZixfYyxfMCxfMyxfMSxfMixfZixfZCxfZixfYyxfOSxfYSxfOCxfYSxfZixfYyxfZSxfYyxfMixfMSxfMyxfMCxfZCxfZCxfZCxfYyxfYixfOCxfYSxfOCxfZCxfYyxfYyxfYyxfNCxfNixfNCxfNyxfYSxfOSxfYixfOSxfYyxfZixfZCxfZSxfYixfOSxfYixfOCxfNixfNCxfNixfNSxfOCxfOSxfOSxfOSxfZSxfZCxfZixfYyxfOSxfOSxfOSxfOCxfNixfNSxfNyxfNCxfOSxfOSxfOSxfOCxfZixfYyxfZSxfYyxfOSxfOCxfOCxfOCxfNCxfNSxfNSxfNCxfOSxfOSxfOSxfOCxfZCxfYyxfYyxfYyxfOSxfOCxfOCxfOCwKKyAgICAgIF9jLF9mLF9kLF9lLF9iLF9iLF9iLF9hLF9kLF9lLF9jLF9lLF8zLF8yLF8yLF8yLF9lLF9mLF9mLF9lLF9iLF85LF9iLF84LF9mLF9lLF9lLF9lLF8zLF8wLF8yLF8wLF9mLF9lLF9lLF9lLF9iLF84LF9hLF84LF9lLF9lLF9lLF9lLF8yLF8wLF8yLF8wLF9mLF9jLF9lLF9jLF85LF84LF84LF84LF9lLF9jLF9lLF9jLF8wLF8wLF8wLF8wLF9hLF9iLF9iLF9hLF9iLF85LF9iLF84LF9iLF9hLF9hLF9hLF8zLF8wLF8yLF8wLF9hLF85LF9iLF84LF85LF85LF85LF84LF9iLF84LF9hLF84LF8xLF8wLF8wLF8wLF9iLF84LF9hLF84LF85LF84LF84LF84LF9hLF84LF9hLF84LF8wLF8wLF8wLF8wLF85LF84LF84LF84LF85LF84LF84LF84LF84LF84LF84LF84LF8wLF8wLF8wLF8wLAorICAgICAgXzQsXzYsXzQsXzcsX2EsXzksX2IsXzksX2MsX2YsX2QsX2UsX2IsXzksX2IsXzgsXzYsXzQsXzYsXzUsXzgsXzksXzksXzksX2UsX2QsX2YsX2MsXzksXzksXzksXzgsXzYsXzUsXzcsXzQsXzksXzksXzksXzgsX2YsX2MsX2UsX2MsXzksXzgsXzgsXzgsXzQsXzUsXzUsXzQsXzksXzksXzksXzgsX2QsX2MsX2MsX2MsXzksXzgsXzgsXzgsXzIsXzAsXzIsXzEsXzgsXzksXzksXzksX2EsXzksX2IsXzgsXzksXzksXzksXzgsXzAsXzAsXzAsXzEsXzgsXzksXzksXzksXzgsXzksXzksXzgsXzksXzksXzksXzgsXzAsXzEsXzEsXzAsXzksXzksXzksXzgsXzksXzgsXzgsXzgsXzksXzgsXzgsXzgsXzAsXzEsXzEsXzAsXzksXzksXzksXzgsXzksXzgsXzgsXzgsXzksXzgsXzgsXzgsCisgICAgICBfYSxfYixfYixfYSxfYixfOSxfYixfOCxfYixfYSxfYSxfYSxfMyxfMCxfMixfMCxfYSxfOSxfYixfOCxfOSxfOSxfOSxfOCxfYixfOCxfYSxfOCxfMSxfMCxfMCxfMCxfYixfOCxfYSxfOCxfOSxfOCxfOCxfOCxfYSxfOCxfYSxfOCxfMCxfMCxfMCxfMCxfOSxfOCxfOCxfOCxfOSxfOCxfOCxfOCxfOCxfOCxfOCxfOCxfMCxfMCxfMCxfMCxfYSxfOSxfYixfOCxfOSxfOSxfOSxfOCxfYixfOCxfYSxfOCxfMSxfMCxfMCxfMCxfOCxfOSxfOSxfOCxfOSxfOSxfOSxfOCxfOSxfOCxfOCxfOCxfMSxfMCxfMCxfMCxfOSxfOCxfOCxfOCxfOSxfOCxfOCxfOCxfOCxfOCxfOCxfOCxfMCxfMCxfMCxfMCxfOSxfOCxfOCxfOCxfOSxfOCxfOCxfOCxfOCxfOCxfOCxfOCxfMCxfMCxfMCxfMCwKKyAgICAgIF9jLF9mLF9kLF9lLF9mLF9kLF9mLF9jLF9kLF9lLF9jLF9lLF83LF80LF82LF80LF9lLF9kLF9mLF9jLF9kLF9kLF9kLF9jLF9mLF9jLF9lLF9jLF81LF80LF80LF80LF9mLF9jLF9lLF9jLF9kLF9jLF9jLF9jLF9lLF9jLF9lLF9jLF80LF80LF80LF80LF9kLF9jLF9jLF9jLF9kLF9jLF9jLF9jLF9jLF9jLF9jLF9jLF80LF80LF80LF80LF9lLF9kLF9mLF9jLF85LF85LF85LF84LF9mLF9jLF9lLF9jLF8xLF8wLF8wLF8wLF9jLF9kLF9kLF9jLF85LF85LF85LF84LF9kLF9jLF9jLF9jLF8xLF8wLF8wLF8wLF9kLF9jLF9jLF9jLF85LF84LF84LF84LF9jLF9jLF9jLF9jLF8wLF8wLF8wLF8wLF9kLF9jLF9jLF9jLF85LF84LF84LF84LF9jLF9jLF9jLF9jLF8wLF8wLF8wLF8wLAorICAgICAgX2YsX2UsX2UsX2UsXzMsXzAsXzIsXzAsXzYsXzYsXzYsXzYsXzIsXzAsXzIsXzAsX2YsX2MsX2UsX2MsXzEsXzAsXzAsXzAsXzYsXzQsXzYsXzQsXzAsXzAsXzAsXzAsX2UsX2MsX2UsX2MsXzAsXzAsXzAsXzAsXzYsXzQsXzYsXzQsXzAsXzAsXzAsXzAsX2MsX2MsX2MsX2MsXzAsXzAsXzAsXzAsXzQsXzQsXzQsXzQsXzAsXzAsXzAsXzAsX2IsXzgsX2EsXzgsXzEsXzAsXzAsXzAsXzIsXzAsXzIsXzAsXzAsXzAsXzAsXzAsXzksXzgsXzgsXzgsXzEsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzgsXzgsXzgsXzgsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzgsXzgsXzgsXzgsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsCisgICAgICBfZSxfZCxfZixfYyxfOSxfOSxfOSxfOCxfZixfYyxfZSxfYyxfMSxfMCxfMCxfMCxfYyxfZCxfZCxfYyxfOSxfOSxfOSxfOCxfZCxfYyxfYyxfYyxfMSxfMCxfMCxfMCxfZCxfYyxfYyxfYyxfOSxfOCxfOCxfOCxfYyxfYyxfYyxfYyxfMCxfMCxfMCxfMCxfZCxfYyxfYyxfYyxfOSxfOCxfOCxfOCxfYyxfYyxfYyxfYyxfMCxfMCxfMCxfMCxfOCxfOSxfOSxfOCxfOSxfOSxfOSxfOCxfOSxfOCxfOCxfOCxfMSxfMCxfMCxfMCxfOCxfOSxfOSxfOCxfOSxfOSxfOSxfOCxfOSxfOCxfOCxfOCxfMSxfMCxfMCxfMCxfOSxfOCxfOCxfOCxfOSxfOCxfOCxfOCxfOCxfOCxfOCxfOCxfMCxfMCxfMCxfMCxfOSxfOCxfOCxfOCxfOSxfOCxfOCxfOCxfOCxfOCxfOCxfOCxfMCxfMCxfMCxfMCwKKyAgICAgIF9iLF84LF9hLF84LF8xLF8wLF8wLF8wLF8yLF8wLF8yLF8wLF8wLF8wLF8wLF8wLF85LF84LF84LF84LF8xLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF84LF84LF84LF84LF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF84LF84LF84LF84LF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF85LF84LF84LF84LF8xLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF85LF84LF84LF84LF8xLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF84LF84LF84LF84LF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF84LF84LF84LF84LF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLAorICAgICAgXzQsXzQsXzQsXzUsXzgsX2IsXzksX2IsX2MsX2QsX2QsX2MsXzksX2IsXzksX2EsXzQsXzYsXzQsXzcsX2EsXzksX2IsXzksX2MsX2YsX2QsX2UsX2IsXzksX2IsXzgsXzQsXzcsXzUsXzYsX2IsXzksX2IsXzgsX2QsX2UsX2MsX2UsX2IsXzgsX2EsXzgsXzYsXzUsXzcsXzQsXzksXzksXzksXzgsX2YsX2MsX2UsX2MsXzksXzgsXzgsXzgsXzAsXzIsXzAsXzMsX2EsXzksX2IsXzksXzgsX2IsXzksX2EsX2IsXzksX2IsXzgsXzIsXzAsXzIsXzEsXzgsXzksXzksXzksX2EsXzksX2IsXzgsXzksXzksXzksXzgsXzIsXzEsXzMsXzAsXzksXzksXzksXzgsX2IsXzgsX2EsXzgsXzksXzgsXzgsXzgsXzAsXzEsXzEsXzAsXzksXzksXzksXzgsXzksXzgsXzgsXzgsXzksXzgsXzgsXzgsCisgICAgICBfOCxfYixfOSxfYSxfYixfYixfYixfYSxfOSxfYSxfOCxfYSxfMyxfMixfMixfMixfYSxfYixfYixfYSxfYixfOSxfYixfOCxfYixfYSxfYSxfYSxfMyxfMCxfMixfMCxfYixfYSxfYSxfYSxfYixfOCxfYSxfOCxfYSxfYSxfYSxfYSxfMixfMCxfMixfMCxfYixfOCxfYSxfOCxfOSxfOCxfOCxfOCxfYSxfOCxfYSxfOCxfMCxfMCxfMCxfMCxfYSxfYixfYixfYSxfYixfOSxfYixfOCxfYixfYSxfYSxfYSxfMyxfMCxfMixfMCxfYSxfOSxfYixfOCxfOSxfOSxfOSxfOCxfYixfOCxfYSxfOCxfMSxfMCxfMCxfMCxfYixfOCxfYSxfOCxfOSxfOCxfOCxfOCxfYSxfOCxfYSxfOCxfMCxfMCxfMCxfMCxfOSxfOCxfOCxfOCxfOSxfOCxfOCxfOCxfOCxfOCxfOCxfOCxfMCxfMCxfMCxfMCwKKyAgICAgIF8wLF8yLF8wLF8zLF9hLF85LF9iLF85LF84LF9iLF85LF9hLF9iLF85LF9iLF84LF8yLF8wLF8yLF8xLF84LF85LF85LF85LF9hLF85LF9iLF84LF85LF85LF85LF84LF8yLF8xLF8zLF8wLF85LF85LF85LF84LF9iLF84LF9hLF84LF85LF84LF84LF84LF8wLF8xLF8xLF8wLF85LF85LF85LF84LF85LF84LF84LF84LF85LF84LF84LF84LF8yLF8wLF8yLF8xLF84LF85LF85LF85LF9hLF85LF9iLF84LF85LF85LF85LF84LF8wLF8wLF8wLF8xLF84LF85LF85LF85LF84LF85LF85LF84LF85LF85LF85LF84LF8wLF8xLF8xLF8wLF85LF85LF85LF84LF85LF84LF84LF84LF85LF84LF84LF84LF8wLF8xLF8xLF8wLF85LF85LF85LF84LF85LF84LF84LF84LF85LF84LF84LF84LAorICAgICAgX2EsX2IsX2IsX2EsX2IsXzksX2IsXzgsX2IsX2EsX2EsX2EsXzMsXzAsXzIsXzAsX2EsXzksX2IsXzgsXzksXzksXzksXzgsX2IsXzgsX2EsXzgsXzEsXzAsXzAsXzAsX2IsXzgsX2EsXzgsXzksXzgsXzgsXzgsX2EsXzgsX2EsXzgsXzAsXzAsXzAsXzAsXzksXzgsXzgsXzgsXzksXzgsXzgsXzgsXzgsXzgsXzgsXzgsXzAsXzAsXzAsXzAsX2EsXzksX2IsXzgsXzksXzksXzksXzgsX2IsXzgsX2EsXzgsXzEsXzAsXzAsXzAsXzgsXzksXzksXzgsXzksXzksXzksXzgsXzksXzgsXzgsXzgsXzEsXzAsXzAsXzAsXzksXzgsXzgsXzgsXzksXzgsXzgsXzgsXzgsXzgsXzgsXzgsXzAsXzAsXzAsXzAsXzksXzgsXzgsXzgsXzksXzgsXzgsXzgsXzgsXzgsXzgsXzgsXzAsXzAsXzAsXzAsCisgICAgICBfYyxfZixfZCxfZSxfYixfOSxfYixfOCxfZCxfZSxfYyxfZSxfMyxfMCxfMixfMCxfZSxfZCxfZixfYyxfOSxfOSxfOSxfOCxfZixfYyxfZSxfYyxfMSxfMCxfMCxfMCxfZixfYyxfZSxfYyxfOSxfOCxfOCxfOCxfZSxfYyxfZSxfYyxfMCxfMCxfMCxfMCxfZCxfYyxfYyxfYyxfOSxfOCxfOCxfOCxfYyxfYyxfYyxfYyxfMCxfMCxfMCxfMCxfYSxfOSxfYixfOCxfOSxfOSxfOSxfOCxfYixfOCxfYSxfOCxfMSxfMCxfMCxfMCxfOCxfOSxfOSxfOCxfOSxfOSxfOSxfOCxfOSxfOCxfOCxfOCxfMSxfMCxfMCxfMCxfOSxfOCxfOCxfOCxfOSxfOCxfOCxfOCxfOCxfOCxfOCxfOCxfMCxfMCxfMCxfMCxfOSxfOCxfOCxfOCxfOSxfOCxfOCxfOCxfOCxfOCxfOCxfOCxfMCxfMCxfMCxfMCwKKyAgICAgIF9iLF9hLF9hLF9hLF8zLF8wLF8yLF8wLF8yLF8yLF8yLF8yLF8yLF8wLF8yLF8wLF9iLF84LF9hLF84LF8xLF8wLF8wLF8wLF8yLF8wLF8yLF8wLF8wLF8wLF8wLF8wLF9hLF84LF9hLF84LF8wLF8wLF8wLF8wLF8yLF8wLF8yLF8wLF8wLF8wLF8wLF8wLF84LF84LF84LF84LF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF9iLF84LF9hLF84LF8xLF8wLF8wLF8wLF8yLF8wLF8yLF8wLF8wLF8wLF8wLF8wLF85LF84LF84LF84LF8xLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF84LF84LF84LF84LF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF84LF84LF84LF84LF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLAorICAgICAgX2EsXzksX2IsXzgsXzksXzksXzksXzgsX2IsXzgsX2EsXzgsXzEsXzAsXzAsXzAsXzgsXzksXzksXzgsXzksXzksXzksXzgsXzksXzgsXzgsXzgsXzEsXzAsXzAsXzAsXzksXzgsXzgsXzgsXzksXzgsXzgsXzgsXzgsXzgsXzgsXzgsXzAsXzAsXzAsXzAsXzksXzgsXzgsXzgsXzksXzgsXzgsXzgsXzgsXzgsXzgsXzgsXzAsXzAsXzAsXzAsXzgsXzksXzksXzgsXzksXzksXzksXzgsXzksXzgsXzgsXzgsXzEsXzAsXzAsXzAsXzgsXzksXzksXzgsXzksXzksXzksXzgsXzksXzgsXzgsXzgsXzEsXzAsXzAsXzAsXzksXzgsXzgsXzgsXzksXzgsXzgsXzgsXzgsXzgsXzgsXzgsXzAsXzAsXzAsXzAsXzksXzgsXzgsXzgsXzksXzgsXzgsXzgsXzgsXzgsXzgsXzgsXzAsXzAsXzAsXzAsCisgICAgICBfYixfOCxfYSxfOCxfMSxfMCxfMCxfMCxfMixfMCxfMixfMCxfMCxfMCxfMCxfMCxfOSxfOCxfOCxfOCxfMSxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfOCxfOCxfOCxfOCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfOCxfOCxfOCxfOCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfOSxfOCxfOCxfOCxfMSxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfOSxfOCxfOCxfOCxfMSxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfOCxfOCxfOCxfOCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfOCxfOCxfOCxfOCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCwKKyAgICAgIF9jLF9jLF9jLF9kLF84LF9iLF85LF9iLF9jLF9kLF9kLF9jLF8xLF8zLF8xLF8yLF9jLF9lLF9jLF9mLF9hLF85LF9iLF85LF9jLF9mLF9kLF9lLF8zLF8xLF8zLF8wLF9jLF9mLF9kLF9lLF9iLF85LF9iLF84LF9kLF9lLF9jLF9lLF8zLF8wLF8yLF8wLF9lLF9kLF9mLF9jLF85LF85LF85LF84LF9mLF9jLF9lLF9jLF8xLF8wLF8wLF8wLF84LF9hLF84LF9iLF9hLF85LF9iLF85LF84LF9iLF85LF9hLF8zLF8xLF8zLF8wLF9hLF84LF9hLF85LF84LF85LF85LF85LF9hLF85LF9iLF84LF8xLF8xLF8xLF8wLF9hLF85LF9iLF84LF85LF85LF85LF84LF9iLF84LF9hLF84LF8xLF8wLF8wLF8wLF84LF85LF85LF84LF85LF85LF85LF84LF85LF84LF84LF84LF8xLF8wLF8wLF8wLAorICAgICAgXzgsX2IsXzksX2EsXzMsXzMsXzMsXzIsXzEsXzIsXzAsXzIsXzMsXzIsXzIsXzIsX2EsX2IsX2IsX2EsXzMsXzEsXzMsXzAsXzMsXzIsXzIsXzIsXzMsXzAsXzIsXzAsX2IsX2EsX2EsX2EsXzMsXzAsXzIsXzAsXzIsXzIsXzIsXzIsXzIsXzAsXzIsXzAsX2IsXzgsX2EsXzgsXzEsXzAsXzAsXzAsXzIsXzAsXzIsXzAsXzAsXzAsXzAsXzAsX2EsX2IsX2IsX2EsXzMsXzEsXzMsXzAsXzMsXzIsXzIsXzIsXzMsXzAsXzIsXzAsX2EsXzksX2IsXzgsXzEsXzEsXzEsXzAsXzMsXzAsXzIsXzAsXzEsXzAsXzAsXzAsX2IsXzgsX2EsXzgsXzEsXzAsXzAsXzAsXzIsXzAsXzIsXzAsXzAsXzAsXzAsXzAsXzksXzgsXzgsXzgsXzEsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsCisgICAgICBfOCxfYSxfOCxfYixfYSxfOSxfYixfOSxfOCxfYixfOSxfYSxfMyxfMSxfMyxfMCxfYSxfOCxfYSxfOSxfOCxfOSxfOSxfOSxfYSxfOSxfYixfOCxfMSxfMSxfMSxfMCxfYSxfOSxfYixfOCxfOSxfOSxfOSxfOCxfYixfOCxfYSxfOCxfMSxfMCxfMCxfMCxfOCxfOSxfOSxfOCxfOSxfOSxfOSxfOCxfOSxfOCxfOCxfOCxfMSxfMCxfMCxfMCxfYSxfOCxfYSxfOSxfOCxfOSxfOSxfOSxfYSxfOSxfYixfOCxfMSxfMSxfMSxfMCxfOCxfOCxfOCxfOSxfOCxfOSxfOSxfOSxfOCxfOSxfOSxfOCxfMSxfMSxfMSxfMCxfOCxfOSxfOSxfOCxfOSxfOSxfOSxfOCxfOSxfOCxfOCxfOCxfMSxfMCxfMCxfMCxfOCxfOSxfOSxfOCxfOSxfOSxfOSxfOCxfOSxfOCxfOCxfOCxfMSxfMCxfMCxfMCwKKyAgICAgIF9hLF9iLF9iLF9hLF8zLF8xLF8zLF8wLF8zLF8yLF8yLF8yLF8zLF8wLF8yLF8wLF9hLF85LF9iLF84LF8xLF8xLF8xLF8wLF8zLF8wLF8yLF8wLF8xLF8wLF8wLF8wLF9iLF84LF9hLF84LF8xLF8wLF8wLF8wLF8yLF8wLF8yLF8wLF8wLF8wLF8wLF8wLF85LF84LF84LF84LF8xLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF9hLF85LF9iLF84LF8xLF8xLF8xLF8wLF8zLF8wLF8yLF8wLF8xLF8wLF8wLF8wLF84LF85LF85LF84LF8xLF8xLF8xLF8wLF8xLF8wLF8wLF8wLF8xLF8wLF8wLF8wLF85LF84LF84LF84LF8xLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF85LF84LF84LF84LF8xLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLAorICAgICAgX2MsX2YsX2QsX2UsXzMsXzEsXzMsXzAsXzUsXzYsXzQsXzYsXzMsXzAsXzIsXzAsX2UsX2QsX2YsX2MsXzEsXzEsXzEsXzAsXzcsXzQsXzYsXzQsXzEsXzAsXzAsXzAsX2YsX2MsX2UsX2MsXzEsXzAsXzAsXzAsXzYsXzQsXzYsXzQsXzAsXzAsXzAsXzAsX2QsX2MsX2MsX2MsXzEsXzAsXzAsXzAsXzQsXzQsXzQsXzQsXzAsXzAsXzAsXzAsX2EsXzksX2IsXzgsXzEsXzEsXzEsXzAsXzMsXzAsXzIsXzAsXzEsXzAsXzAsXzAsXzgsXzksXzksXzgsXzEsXzEsXzEsXzAsXzEsXzAsXzAsXzAsXzEsXzAsXzAsXzAsXzksXzgsXzgsXzgsXzEsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzksXzgsXzgsXzgsXzEsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsCisgICAgICBfMyxfMixfMixfMixfMyxfMCxfMixfMCxfMixfMixfMixfMixfMixfMCxfMixfMCxfMyxfMCxfMixfMCxfMSxfMCxfMCxfMCxfMixfMCxfMixfMCxfMCxfMCxfMCxfMCxfMixfMCxfMixfMCxfMCxfMCxfMCxfMCxfMixfMCxfMixfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMyxfMCxfMixfMCxfMSxfMCxfMCxfMCxfMixfMCxfMixfMCxfMCxfMCxfMCxfMCxfMSxfMCxfMCxfMCxfMSxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCwKKyAgICAgIF9hLF85LF9iLF84LF8xLF8xLF8xLF8wLF8zLF8wLF8yLF8wLF8xLF8wLF8wLF8wLF84LF85LF85LF84LF8xLF8xLF8xLF8wLF8xLF8wLF8wLF8wLF8xLF8wLF8wLF8wLF85LF84LF84LF84LF8xLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF85LF84LF84LF84LF8xLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF84LF85LF85LF84LF8xLF8xLF8xLF8wLF8xLF8wLF8wLF8wLF8xLF8wLF8wLF8wLF84LF85LF85LF84LF8xLF8xLF8xLF8wLF8xLF8wLF8wLF8wLF8xLF8wLF8wLF8wLF85LF84LF84LF84LF8xLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF85LF84LF84LF84LF8xLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLAorICAgICAgXzMsXzAsXzIsXzAsXzEsXzAsXzAsXzAsXzIsXzAsXzIsXzAsXzAsXzAsXzAsXzAsXzEsXzAsXzAsXzAsXzEsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzEsXzAsXzAsXzAsXzEsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzEsXzAsXzAsXzAsXzEsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsCisgICAgICBfOCxfOCxfOCxfOSxfOCxfYixfOSxfYixfOCxfOSxfOSxfOCxfMSxfMyxfMSxfMixfOCxfYSxfOCxfYixfYSxfOSxfYixfOSxfOCxfYixfOSxfYSxfMyxfMSxfMyxfMCxfOCxfYixfOSxfYSxfYixfOSxfYixfOCxfOSxfYSxfOCxfYSxfMyxfMCxfMixfMCxfYSxfOSxfYixfOCxfOSxfOSxfOSxfOCxfYixfOCxfYSxfOCxfMSxfMCxfMCxfMCxfOCxfYSxfOCxfYixfYSxfOSxfYixfOSxfOCxfYixfOSxfYSxfMyxfMSxfMyxfMCxfYSxfOCxfYSxfOSxfOCxfOSxfOSxfOSxfYSxfOSxfYixfOCxfMSxfMSxfMSxfMCxfYSxfOSxfYixfOCxfOSxfOSxfOSxfOCxfYixfOCxfYSxfOCxfMSxfMCxfMCxfMCxfOCxfOSxfOSxfOCxfOSxfOSxfOSxfOCxfOSxfOCxfOCxfOCxfMSxfMCxfMCxfMCwKKyAgICAgIF84LF9iLF85LF9hLF8zLF8zLF8zLF8yLF8xLF8yLF8wLF8yLF8zLF8yLF8yLF8yLF9hLF9iLF9iLF9hLF8zLF8xLF8zLF8wLF8zLF8yLF8yLF8yLF8zLF8wLF8yLF8wLF9iLF9hLF9hLF9hLF8zLF8wLF8yLF8wLF8yLF8yLF8yLF8yLF8yLF8wLF8yLF8wLF9iLF84LF9hLF84LF8xLF8wLF8wLF8wLF8yLF8wLF8yLF8wLF8wLF8wLF8wLF8wLF9hLF9iLF9iLF9hLF8zLF8xLF8zLF8wLF8zLF8yLF8yLF8yLF8zLF8wLF8yLF8wLF9hLF85LF9iLF84LF8xLF8xLF8xLF8wLF8zLF8wLF8yLF8wLF8xLF8wLF8wLF8wLF9iLF84LF9hLF84LF8xLF8wLF8wLF8wLF8yLF8wLF8yLF8wLF8wLF8wLF8wLF8wLF85LF84LF84LF84LF8xLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLAorICAgICAgXzgsX2EsXzgsX2IsX2EsXzksX2IsXzksXzgsX2IsXzksX2EsXzMsXzEsXzMsXzAsX2EsXzgsX2EsXzksXzgsXzksXzksXzksX2EsXzksX2IsXzgsXzEsXzEsXzEsXzAsX2EsXzksX2IsXzgsXzksXzksXzksXzgsX2IsXzgsX2EsXzgsXzEsXzAsXzAsXzAsXzgsXzksXzksXzgsXzksXzksXzksXzgsXzksXzgsXzgsXzgsXzEsXzAsXzAsXzAsX2EsXzgsX2EsXzksXzgsXzksXzksXzksX2EsXzksX2IsXzgsXzEsXzEsXzEsXzAsXzgsXzgsXzgsXzksXzgsXzksXzksXzksXzgsXzksXzksXzgsXzEsXzEsXzEsXzAsXzgsXzksXzksXzgsXzksXzksXzksXzgsXzksXzgsXzgsXzgsXzEsXzAsXzAsXzAsXzgsXzksXzksXzgsXzksXzksXzksXzgsXzksXzgsXzgsXzgsXzEsXzAsXzAsXzAsCisgICAgICBfYSxfYixfYixfYSxfMyxfMSxfMyxfMCxfMyxfMixfMixfMixfMyxfMCxfMixfMCxfYSxfOSxfYixfOCxfMSxfMSxfMSxfMCxfMyxfMCxfMixfMCxfMSxfMCxfMCxfMCxfYixfOCxfYSxfOCxfMSxfMCxfMCxfMCxfMixfMCxfMixfMCxfMCxfMCxfMCxfMCxfOSxfOCxfOCxfOCxfMSxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfYSxfOSxfYixfOCxfMSxfMSxfMSxfMCxfMyxfMCxfMixfMCxfMSxfMCxfMCxfMCxfOCxfOSxfOSxfOCxfMSxfMSxfMSxfMCxfMSxfMCxfMCxfMCxfMSxfMCxfMCxfMCxfOSxfOCxfOCxfOCxfMSxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfOSxfOCxfOCxfOCxfMSxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCwKKyAgICAgIF84LF9iLF85LF9hLF8zLF8xLF8zLF8wLF8xLF8yLF8wLF8yLF8zLF8wLF8yLF8wLF9hLF85LF9iLF84LF8xLF8xLF8xLF8wLF8zLF8wLF8yLF8wLF8xLF8wLF8wLF8wLF9iLF84LF9hLF84LF8xLF8wLF8wLF8wLF8yLF8wLF8yLF8wLF8wLF8wLF8wLF8wLF85LF84LF84LF84LF8xLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF9hLF85LF9iLF84LF8xLF8xLF8xLF8wLF8zLF8wLF8yLF8wLF8xLF8wLF8wLF8wLF84LF85LF85LF84LF8xLF8xLF8xLF8wLF8xLF8wLF8wLF8wLF8xLF8wLF8wLF8wLF85LF84LF84LF84LF8xLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF85LF84LF84LF84LF8xLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLAorICAgICAgXzMsXzIsXzIsXzIsXzMsXzAsXzIsXzAsXzIsXzIsXzIsXzIsXzIsXzAsXzIsXzAsXzMsXzAsXzIsXzAsXzEsXzAsXzAsXzAsXzIsXzAsXzIsXzAsXzAsXzAsXzAsXzAsXzIsXzAsXzIsXzAsXzAsXzAsXzAsXzAsXzIsXzAsXzIsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzMsXzAsXzIsXzAsXzEsXzAsXzAsXzAsXzIsXzAsXzIsXzAsXzAsXzAsXzAsXzAsXzEsXzAsXzAsXzAsXzEsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsCisgICAgICBfYSxfOSxfYixfOCxfMSxfMSxfMSxfMCxfMyxfMCxfMixfMCxfMSxfMCxfMCxfMCxfOCxfOSxfOSxfOCxfMSxfMSxfMSxfMCxfMSxfMCxfMCxfMCxfMSxfMCxfMCxfMCxfOSxfOCxfOCxfOCxfMSxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfOSxfOCxfOCxfOCxfMSxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfOCxfOSxfOSxfOCxfMSxfMSxfMSxfMCxfMSxfMCxfMCxfMCxfMSxfMCxfMCxfMCxfOCxfOSxfOSxfOCxfMSxfMSxfMSxfMCxfMSxfMCxfMCxfMCxfMSxfMCxfMCxfMCxfOSxfOCxfOCxfOCxfMSxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfOSxfOCxfOCxfOCxfMSxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCwKKyAgICAgIF8zLF8wLF8yLF8wLF8xLF8wLF8wLF8wLF8yLF8wLF8yLF8wLF8wLF8wLF8wLF8wLF8xLF8wLF8wLF8wLF8xLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8xLF8wLF8wLF8wLF8xLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8xLF8wLF8wLF8wLF8xLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLAorICAgICAgXzAsXzAsXzAsXzEsXzgsXzksXzksXzksXzgsXzksXzksXzgsXzEsXzEsXzEsXzAsXzAsXzAsXzAsXzEsXzgsX2IsXzksX2IsXzgsXzksXzksXzgsXzEsXzMsXzEsXzIsXzAsXzEsXzEsXzAsXzksX2IsXzksX2EsXzksXzgsXzgsXzgsXzEsXzIsXzAsXzIsXzAsXzMsXzEsXzIsX2IsXzksX2IsXzgsXzksX2EsXzgsX2EsXzMsXzAsXzIsXzAsXzAsXzAsXzAsXzEsX2MsX2YsX2QsX2YsXzgsXzksXzksXzgsXzUsXzcsXzUsXzYsXzAsXzIsXzAsXzMsX2UsX2QsX2YsX2QsXzgsX2IsXzksX2EsXzcsXzUsXzcsXzQsXzAsXzMsXzEsXzIsX2YsX2QsX2YsX2MsXzksX2EsXzgsX2EsXzcsXzQsXzYsXzQsXzIsXzEsXzMsXzAsX2QsX2QsX2QsX2MsX2IsXzgsX2EsXzgsXzUsXzQsXzQsXzQsCisgICAgICBfOCxfOSxfOSxfOCxfNSxfNyxfNSxfNixfMSxfMCxfMCxfMCxfNSxfNixfNCxfNixfOCxfYixfOSxfYSxfNyxfNyxfNyxfNixfMSxfMixfMCxfMixfNyxfNixfNixfNixfOSxfYSxfOCxfYSxfNyxfNixfNixfNixfMCxfMixfMCxfMixfNixfNixfNixfNixfYixfYSxfYSxfYSxfNyxfNCxfNixfNCxfMixfMixfMixfMixfNixfNCxfNixfNCxfYyxfZixfZCxfZSxfMyxfMyxfMyxfMixfNSxfNixfNCxfNixfMyxfMixfMixfMixfZSxfZixfZixfZSxfMyxfMSxfMyxfMCxfNyxfNixfNixfNixfMyxfMCxfMixfMCxfZixfZSxfZSxfZSxfMyxfMCxfMixfMCxfNixfNixfNixfNixfMixfMCxfMixfMCxfZixfYyxfZSxfYyxfMSxfMCxfMCxfMCxfNixfNCxfNixfNCxfMCxfMCxfMCxfMCwKKyAgICAgIF8wLF8wLF8wLF8xLF9jLF9mLF9kLF9mLF84LF85LF85LF84LF81LF83LF81LF82LF8wLF8yLF8wLF8zLF9lLF9kLF9mLF9kLF84LF9iLF85LF9hLF83LF81LF83LF80LF8wLF8zLF8xLF8yLF9mLF9kLF9mLF9jLF85LF9hLF84LF9hLF83LF80LF82LF80LF8yLF8xLF8zLF8wLF9kLF9kLF9kLF9jLF9iLF84LF9hLF84LF81LF80LF80LF80LF80LF82LF80LF83LF9hLF85LF9iLF85LF9jLF9mLF9kLF9lLF8zLF8xLF8zLF8wLF82LF80LF82LF81LF84LF85LF85LF85LF9lLF9kLF9mLF9jLF8xLF8xLF8xLF8wLF82LF81LF83LF80LF85LF85LF85LF84LF9mLF9jLF9lLF9jLF8xLF8wLF8wLF8wLF80LF81LF81LF80LF85LF85LF85LF84LF9kLF9jLF9jLF9jLF8xLF8wLF8wLF8wLAorICAgICAgX2MsX2YsX2QsX2UsXzMsXzMsXzMsXzIsXzUsXzYsXzQsXzYsXzMsXzIsXzIsXzIsX2UsX2YsX2YsX2UsXzMsXzEsXzMsXzAsXzcsXzYsXzYsXzYsXzMsXzAsXzIsXzAsX2YsX2UsX2UsX2UsXzMsXzAsXzIsXzAsXzYsXzYsXzYsXzYsXzIsXzAsXzIsXzAsX2YsX2MsX2UsX2MsXzEsXzAsXzAsXzAsXzYsXzQsXzYsXzQsXzAsXzAsXzAsXzAsX2EsX2IsX2IsX2EsXzMsXzEsXzMsXzAsXzMsXzIsXzIsXzIsXzMsXzAsXzIsXzAsX2EsXzksX2IsXzgsXzEsXzEsXzEsXzAsXzMsXzAsXzIsXzAsXzEsXzAsXzAsXzAsX2IsXzgsX2EsXzgsXzEsXzAsXzAsXzAsXzIsXzAsXzIsXzAsXzAsXzAsXzAsXzAsXzksXzgsXzgsXzgsXzEsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsCisgICAgICBfOCxfOSxfOSxfOCxfNSxfNyxfNSxfNixfMSxfMCxfMCxfMCxfNSxfNixfNCxfNixfOCxfYixfOSxfYSxfNyxfNSxfNyxfNCxfMSxfMixfMCxfMixfNyxfNCxfNixfNCxfOSxfYSxfOCxfYSxfNyxfNCxfNixfNCxfMCxfMixfMCxfMixfNixfNCxfNixfNCxfYixfOCxfYSxfOCxfNSxfNCxfNCxfNCxfMixfMCxfMixfMCxfNCxfNCxfNCxfNCxfYyxfZixfZCxfZSxfNyxfNSxfNyxfNCxfNSxfNixfNCxfNixfNyxfNCxfNixfNCxfZSxfZCxfZixfYyxfNSxfNSxfNSxfNCxfNyxfNCxfNixfNCxfNSxfNCxfNCxfNCxfZixfYyxfZSxfYyxfNSxfNCxfNCxfNCxfNixfNCxfNixfNCxfNCxfNCxfNCxfNCxfZCxfYyxfYyxfYyxfNSxfNCxfNCxfNCxfNCxfNCxfNCxfNCxfNCxfNCxfNCxfNCwKKyAgICAgIF81LF82LF80LF82LF83LF82LF82LF82LF80LF82LF80LF82LF82LF82LF82LF82LF83LF82LF82LF82LF83LF80LF82LF80LF82LF82LF82LF82LF82LF80LF82LF80LF82LF82LF82LF82LF82LF80LF82LF80LF82LF82LF82LF82LF82LF80LF82LF80LF82LF80LF82LF80LF80LF80LF80LF80LF82LF80LF82LF80LF80LF80LF80LF80LF83LF82LF82LF82LF8zLF8wLF8yLF8wLF82LF82LF82LF82LF8yLF8wLF8yLF8wLF83LF80LF82LF80LF8xLF8wLF8wLF8wLF82LF80LF82LF80LF8wLF8wLF8wLF8wLF82LF80LF82LF80LF8wLF8wLF8wLF8wLF82LF80LF82LF80LF8wLF8wLF8wLF8wLF80LF80LF80LF80LF8wLF8wLF8wLF8wLF80LF80LF80LF80LF8wLF8wLF8wLF8wLAorICAgICAgX2MsX2YsX2QsX2UsXzcsXzUsXzcsXzQsXzUsXzYsXzQsXzYsXzcsXzQsXzYsXzQsX2UsX2QsX2YsX2MsXzUsXzUsXzUsXzQsXzcsXzQsXzYsXzQsXzUsXzQsXzQsXzQsX2YsX2MsX2UsX2MsXzUsXzQsXzQsXzQsXzYsXzQsXzYsXzQsXzQsXzQsXzQsXzQsX2QsX2MsX2MsX2MsXzUsXzQsXzQsXzQsXzQsXzQsXzQsXzQsXzQsXzQsXzQsXzQsX2UsX2QsX2YsX2MsXzEsXzEsXzEsXzAsXzcsXzQsXzYsXzQsXzEsXzAsXzAsXzAsX2MsX2QsX2QsX2MsXzEsXzEsXzEsXzAsXzUsXzQsXzQsXzQsXzEsXzAsXzAsXzAsX2QsX2MsX2MsX2MsXzEsXzAsXzAsXzAsXzQsXzQsXzQsXzQsXzAsXzAsXzAsXzAsX2QsX2MsX2MsX2MsXzEsXzAsXzAsXzAsXzQsXzQsXzQsXzQsXzAsXzAsXzAsXzAsCisgICAgICBfNyxfNixfNixfNixfMyxfMCxfMixfMCxfNixfNixfNixfNixfMixfMCxfMixfMCxfNyxfNCxfNixfNCxfMSxfMCxfMCxfMCxfNixfNCxfNixfNCxfMCxfMCxfMCxfMCxfNixfNCxfNixfNCxfMCxfMCxfMCxfMCxfNixfNCxfNixfNCxfMCxfMCxfMCxfMCxfNCxfNCxfNCxfNCxfMCxfMCxfMCxfMCxfNCxfNCxfNCxfNCxfMCxfMCxfMCxfMCxfMyxfMCxfMixfMCxfMSxfMCxfMCxfMCxfMixfMCxfMixfMCxfMCxfMCxfMCxfMCxfMSxfMCxfMCxfMCxfMSxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCwKKyAgICAgIF8wLF8wLF8wLF8xLF9jLF9kLF9kLF9kLF84LF85LF85LF84LF81LF81LF81LF80LF8wLF8wLF8wLF8xLF9jLF9mLF9kLF9mLF84LF85LF85LF84LF81LF83LF81LF82LF8wLF8xLF8xLF8wLF9kLF9mLF9kLF9lLF85LF84LF84LF84LF81LF82LF80LF82LF8wLF8zLF8xLF8yLF9mLF9kLF9mLF9jLF85LF9hLF84LF9hLF83LF80LF82LF80LF80LF80LF80LF81LF84LF9iLF85LF9iLF9jLF9kLF9kLF9jLF8xLF8zLF8xLF8yLF80LF82LF80LF83LF9hLF85LF9iLF85LF9jLF9mLF9kLF9lLF8zLF8xLF8zLF8wLF80LF83LF81LF82LF9iLF85LF9iLF84LF9kLF9lLF9jLF9lLF8zLF8wLF8yLF8wLF82LF81LF83LF80LF85LF85LF85LF84LF9mLF9jLF9lLF9jLF8xLF8wLF8wLF8wLAorICAgICAgX2MsX2QsX2QsX2MsXzEsXzMsXzEsXzIsXzUsXzQsXzQsXzQsXzEsXzIsXzAsXzIsX2MsX2YsX2QsX2UsXzMsXzMsXzMsXzIsXzUsXzYsXzQsXzYsXzMsXzIsXzIsXzIsX2QsX2UsX2MsX2UsXzMsXzIsXzIsXzIsXzQsXzYsXzQsXzYsXzIsXzIsXzIsXzIsX2YsX2UsX2UsX2UsXzMsXzAsXzIsXzAsXzYsXzYsXzYsXzYsXzIsXzAsXzIsXzAsXzgsX2IsXzksX2EsXzMsXzMsXzMsXzIsXzEsXzIsXzAsXzIsXzMsXzIsXzIsXzIsX2EsX2IsX2IsX2EsXzMsXzEsXzMsXzAsXzMsXzIsXzIsXzIsXzMsXzAsXzIsXzAsX2IsX2EsX2EsX2EsXzMsXzAsXzIsXzAsXzIsXzIsXzIsXzIsXzIsXzAsXzIsXzAsX2IsXzgsX2EsXzgsXzEsXzAsXzAsXzAsXzIsXzAsXzIsXzAsXzAsXzAsXzAsXzAsCisgICAgICBfNCxfNCxfNCxfNSxfOCxfYixfOSxfYixfYyxfZCxfZCxfYyxfMSxfMyxfMSxfMixfNCxfNixfNCxfNyxfYSxfOSxfYixfOSxfYyxfZixfZCxfZSxfMyxfMSxfMyxfMCxfNCxfNyxfNSxfNixfYixfOSxfYixfOCxfZCxfZSxfYyxfZSxfMyxfMCxfMixfMCxfNixfNSxfNyxfNCxfOSxfOSxfOSxfOCxfZixfYyxfZSxfYyxfMSxfMCxfMCxfMCxfMCxfMixfMCxfMyxfYSxfOSxfYixfOSxfOCxfYixfOSxfYSxfMyxfMSxfMyxfMCxfMixfMCxfMixfMSxfOCxfOSxfOSxfOSxfYSxfOSxfYixfOCxfMSxfMSxfMSxfMCxfMixfMSxfMyxfMCxfOSxfOSxfOSxfOCxfYixfOCxfYSxfOCxfMSxfMCxfMCxfMCxfMCxfMSxfMSxfMCxfOSxfOSxfOSxfOCxfOSxfOCxfOCxfOCxfMSxfMCxfMCxfMCwKKyAgICAgIF84LF9iLF85LF9hLF8zLF8zLF8zLF8yLF8xLF8yLF8wLF8yLF8zLF8yLF8yLF8yLF9hLF9iLF9iLF9hLF8zLF8xLF8zLF8wLF8zLF8yLF8yLF8yLF8zLF8wLF8yLF8wLF9iLF9hLF9hLF9hLF8zLF8wLF8yLF8wLF8yLF8yLF8yLF8yLF8yLF8wLF8yLF8wLF9iLF84LF9hLF84LF8xLF8wLF8wLF8wLF8yLF8wLF8yLF8wLF8wLF8wLF8wLF8wLF9hLF9iLF9iLF9hLF8zLF8xLF8zLF8wLF8zLF8yLF8yLF8yLF8zLF8wLF8yLF8wLF9hLF85LF9iLF84LF8xLF8xLF8xLF8wLF8zLF8wLF8yLF8wLF8xLF8wLF8wLF8wLF9iLF84LF9hLF84LF8xLF8wLF8wLF8wLF8yLF8wLF8yLF8wLF8wLF8wLF8wLF8wLF85LF84LF84LF84LF8xLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLAorICAgICAgX2MsX2QsX2QsX2MsXzUsXzcsXzUsXzYsXzUsXzQsXzQsXzQsXzUsXzYsXzQsXzYsX2MsX2YsX2QsX2UsXzcsXzUsXzcsXzQsXzUsXzYsXzQsXzYsXzcsXzQsXzYsXzQsX2QsX2UsX2MsX2UsXzcsXzQsXzYsXzQsXzQsXzYsXzQsXzYsXzYsXzQsXzYsXzQsX2YsX2MsX2UsX2MsXzUsXzQsXzQsXzQsXzYsXzQsXzYsXzQsXzQsXzQsXzQsXzQsX2MsX2YsX2QsX2UsXzMsXzEsXzMsXzAsXzUsXzYsXzQsXzYsXzMsXzAsXzIsXzAsX2UsX2QsX2YsX2MsXzEsXzEsXzEsXzAsXzcsXzQsXzYsXzQsXzEsXzAsXzAsXzAsX2YsX2MsX2UsX2MsXzEsXzAsXzAsXzAsXzYsXzQsXzYsXzQsXzAsXzAsXzAsXzAsX2QsX2MsX2MsX2MsXzEsXzAsXzAsXzAsXzQsXzQsXzQsXzQsXzAsXzAsXzAsXzAsCisgICAgICBfNSxfNixfNCxfNixfMyxfMixfMixfMixfNCxfNixfNCxfNixfMixfMixfMixfMixfNyxfNixfNixfNixfMyxfMCxfMixfMCxfNixfNixfNixfNixfMixfMCxfMixfMCxfNixfNixfNixfNixfMixfMCxfMixfMCxfNixfNixfNixfNixfMixfMCxfMixfMCxfNixfNCxfNixfNCxfMCxfMCxfMCxfMCxfNixfNCxfNixfNCxfMCxfMCxfMCxfMCxfMyxfMixfMixfMixfMyxfMCxfMixfMCxfMixfMixfMixfMixfMixfMCxfMixfMCxfMyxfMCxfMixfMCxfMSxfMCxfMCxfMCxfMixfMCxfMixfMCxfMCxfMCxfMCxfMCxfMixfMCxfMixfMCxfMCxfMCxfMCxfMCxfMixfMCxfMixfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCwKKyAgICAgIF9jLF9mLF9kLF9lLF8zLF8xLF8zLF8wLF81LF82LF80LF82LF8zLF8wLF8yLF8wLF9lLF9kLF9mLF9jLF8xLF8xLF8xLF8wLF83LF80LF82LF80LF8xLF8wLF8wLF8wLF9mLF9jLF9lLF9jLF8xLF8wLF8wLF8wLF82LF80LF82LF80LF8wLF8wLF8wLF8wLF9kLF9jLF9jLF9jLF8xLF8wLF8wLF8wLF80LF80LF80LF80LF8wLF8wLF8wLF8wLF9hLF85LF9iLF84LF8xLF8xLF8xLF8wLF8zLF8wLF8yLF8wLF8xLF8wLF8wLF8wLF84LF85LF85LF84LF8xLF8xLF8xLF8wLF8xLF8wLF8wLF8wLF8xLF8wLF8wLF8wLF85LF84LF84LF84LF8xLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF85LF84LF84LF84LF8xLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLAorICAgICAgXzMsXzIsXzIsXzIsXzMsXzAsXzIsXzAsXzIsXzIsXzIsXzIsXzIsXzAsXzIsXzAsXzMsXzAsXzIsXzAsXzEsXzAsXzAsXzAsXzIsXzAsXzIsXzAsXzAsXzAsXzAsXzAsXzIsXzAsXzIsXzAsXzAsXzAsXzAsXzAsXzIsXzAsXzIsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzMsXzAsXzIsXzAsXzEsXzAsXzAsXzAsXzIsXzAsXzIsXzAsXzAsXzAsXzAsXzAsXzEsXzAsXzAsXzAsXzEsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsCisgICAgICBfOCxfOCxfOCxfOSxfNCxfNSxfNSxfNSxfMCxfMSxfMSxfMCxfNSxfNSxfNSxfNCxfOCxfOCxfOCxfOSxfNCxfNyxfNSxfNyxfMCxfMSxfMSxfMCxfNSxfNyxfNSxfNixfOCxfOSxfOSxfOCxfNSxfNyxfNSxfNixfMSxfMCxfMCxfMCxfNSxfNixfNCxfNixfOCxfYixfOSxfYSxfNyxfNSxfNyxfNCxfMSxfMixfMCxfMixfNyxfNCxfNixfNCxfYyxfYyxfYyxfZCxfMCxfMyxfMSxfMyxfNCxfNSxfNSxfNCxfMSxfMyxfMSxfMixfYyxfZSxfYyxfZixfMixfMSxfMyxfMSxfNCxfNyxfNSxfNixfMyxfMSxfMyxfMCxfYyxfZixfZCxfZSxfMyxfMSxfMyxfMCxfNSxfNixfNCxfNixfMyxfMCxfMixfMCxfZSxfZCxfZixfYyxfMSxfMSxfMSxfMCxfNyxfNCxfNixfNCxfMSxfMCxfMCxfMCwKKyAgICAgIF80LF81LF81LF80LF8xLF8zLF8xLF8yLF81LF80LF80LF80LF8xLF8yLF8wLF8yLF80LF83LF81LF82LF8zLF8zLF8zLF8yLF81LF82LF80LF82LF8zLF8yLF8yLF8yLF81LF82LF80LF82LF8zLF8yLF8yLF8yLF80LF82LF80LF82LF8yLF8yLF8yLF8yLF83LF82LF82LF82LF8zLF8wLF8yLF8wLF82LF82LF82LF82LF8yLF8wLF8yLF8wLF8wLF8zLF8xLF8yLF8zLF8zLF8zLF8yLF8xLF8yLF8wLF8yLF8zLF8yLF8yLF8yLF8yLF8zLF8zLF8yLF8zLF8xLF8zLF8wLF8zLF8yLF8yLF8yLF8zLF8wLF8yLF8wLF8zLF8yLF8yLF8yLF8zLF8wLF8yLF8wLF8yLF8yLF8yLF8yLF8yLF8wLF8yLF8wLF8zLF8wLF8yLF8wLF8xLF8wLF8wLF8wLF8yLF8wLF8yLF8wLF8wLF8wLF8wLF8wLAorICAgICAgX2MsX2MsX2MsX2QsXzAsXzMsXzEsXzMsXzQsXzUsXzUsXzQsXzEsXzMsXzEsXzIsX2MsX2UsX2MsX2YsXzIsXzEsXzMsXzEsXzQsXzcsXzUsXzYsXzMsXzEsXzMsXzAsX2MsX2YsX2QsX2UsXzMsXzEsXzMsXzAsXzUsXzYsXzQsXzYsXzMsXzAsXzIsXzAsX2UsX2QsX2YsX2MsXzEsXzEsXzEsXzAsXzcsXzQsXzYsXzQsXzEsXzAsXzAsXzAsXzgsX2EsXzgsX2IsXzIsXzEsXzMsXzEsXzAsXzMsXzEsXzIsXzMsXzEsXzMsXzAsX2EsXzgsX2EsXzksXzAsXzEsXzEsXzEsXzIsXzEsXzMsXzAsXzEsXzEsXzEsXzAsX2EsXzksX2IsXzgsXzEsXzEsXzEsXzAsXzMsXzAsXzIsXzAsXzEsXzAsXzAsXzAsXzgsXzksXzksXzgsXzEsXzEsXzEsXzAsXzEsXzAsXzAsXzAsXzEsXzAsXzAsXzAsCisgICAgICBfMCxfMyxfMSxfMixfMyxfMyxfMyxfMixfMSxfMixfMCxfMixfMyxfMixfMixfMixfMixfMyxfMyxfMixfMyxfMSxfMyxfMCxfMyxfMixfMixfMixfMyxfMCxfMixfMCxfMyxfMixfMixfMixfMyxfMCxfMixfMCxfMixfMixfMixfMixfMixfMCxfMixfMCxfMyxfMCxfMixfMCxfMSxfMCxfMCxfMCxfMixfMCxfMixfMCxfMCxfMCxfMCxfMCxfMixfMyxfMyxfMixfMyxfMSxfMyxfMCxfMyxfMixfMixfMixfMyxfMCxfMixfMCxfMixfMSxfMyxfMCxfMSxfMSxfMSxfMCxfMyxfMCxfMixfMCxfMSxfMCxfMCxfMCxfMyxfMCxfMixfMCxfMSxfMCxfMCxfMCxfMixfMCxfMixfMCxfMCxfMCxfMCxfMCxfMSxfMCxfMCxfMCxfMSxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCwKKyAgICAgIF80LF81LF81LF80LF81LF83LF81LF82LF81LF80LF80LF80LF81LF82LF80LF82LF80LF83LF81LF82LF83LF81LF83LF80LF81LF82LF80LF82LF83LF80LF82LF80LF81LF82LF80LF82LF83LF80LF82LF80LF80LF82LF80LF82LF82LF80LF82LF80LF83LF80LF82LF80LF81LF80LF80LF80LF82LF80LF82LF80LF80LF80LF80LF80LF80LF83LF81LF82LF8zLF8xLF8zLF8wLF81LF82LF80LF82LF8zLF8wLF8yLF8wLF82LF81LF83LF80LF8xLF8xLF8xLF8wLF83LF80LF82LF80LF8xLF8wLF8wLF8wLF83LF80LF82LF80LF8xLF8wLF8wLF8wLF82LF80LF82LF80LF8wLF8wLF8wLF8wLF81LF80LF80LF80LF8xLF8wLF8wLF8wLF80LF80LF80LF80LF8wLF8wLF8wLF8wLAorICAgICAgXzUsXzYsXzQsXzYsXzMsXzIsXzIsXzIsXzQsXzYsXzQsXzYsXzIsXzIsXzIsXzIsXzcsXzYsXzYsXzYsXzMsXzAsXzIsXzAsXzYsXzYsXzYsXzYsXzIsXzAsXzIsXzAsXzYsXzYsXzYsXzYsXzIsXzAsXzIsXzAsXzYsXzYsXzYsXzYsXzIsXzAsXzIsXzAsXzYsXzQsXzYsXzQsXzAsXzAsXzAsXzAsXzYsXzQsXzYsXzQsXzAsXzAsXzAsXzAsXzMsXzIsXzIsXzIsXzMsXzAsXzIsXzAsXzIsXzIsXzIsXzIsXzIsXzAsXzIsXzAsXzMsXzAsXzIsXzAsXzEsXzAsXzAsXzAsXzIsXzAsXzIsXzAsXzAsXzAsXzAsXzAsXzIsXzAsXzIsXzAsXzAsXzAsXzAsXzAsXzIsXzAsXzIsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsCisgICAgICBfNCxfNyxfNSxfNixfMyxfMSxfMyxfMCxfNSxfNixfNCxfNixfMyxfMCxfMixfMCxfNixfNSxfNyxfNCxfMSxfMSxfMSxfMCxfNyxfNCxfNixfNCxfMSxfMCxfMCxfMCxfNyxfNCxfNixfNCxfMSxfMCxfMCxfMCxfNixfNCxfNixfNCxfMCxfMCxfMCxfMCxfNSxfNCxfNCxfNCxfMSxfMCxfMCxfMCxfNCxfNCxfNCxfNCxfMCxfMCxfMCxfMCxfMixfMSxfMyxfMCxfMSxfMSxfMSxfMCxfMyxfMCxfMixfMCxfMSxfMCxfMCxfMCxfMCxfMSxfMSxfMCxfMSxfMSxfMSxfMCxfMSxfMCxfMCxfMCxfMSxfMCxfMCxfMCxfMSxfMCxfMCxfMCxfMSxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMSxfMCxfMCxfMCxfMSxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCwKKyAgICAgIF8zLF8yLF8yLF8yLF8zLF8wLF8yLF8wLF8yLF8yLF8yLF8yLF8yLF8wLF8yLF8wLF8zLF8wLF8yLF8wLF8xLF8wLF8wLF8wLF8yLF8wLF8yLF8wLF8wLF8wLF8wLF8wLF8yLF8wLF8yLF8wLF8wLF8wLF8wLF8wLF8yLF8wLF8yLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8zLF8wLF8yLF8wLF8xLF8wLF8wLF8wLF8yLF8wLF8yLF8wLF8wLF8wLF8wLF8wLF8xLF8wLF8wLF8wLF8xLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLAorICAgICAgX2MsX2MsX2MsX2QsXzAsXzEsXzEsXzEsXzQsXzUsXzUsXzQsXzEsXzEsXzEsXzAsX2MsX2MsX2MsX2QsXzAsXzMsXzEsXzMsXzQsXzUsXzUsXzQsXzEsXzMsXzEsXzIsX2MsX2QsX2QsX2MsXzEsXzMsXzEsXzIsXzUsXzQsXzQsXzQsXzEsXzIsXzAsXzIsX2MsX2YsX2QsX2UsXzMsXzEsXzMsXzAsXzUsXzYsXzQsXzYsXzMsXzAsXzIsXzAsXzgsXzgsXzgsXzksXzAsXzMsXzEsXzMsXzAsXzEsXzEsXzAsXzEsXzMsXzEsXzIsXzgsX2EsXzgsX2IsXzIsXzEsXzMsXzEsXzAsXzMsXzEsXzIsXzMsXzEsXzMsXzAsXzgsX2IsXzksX2EsXzMsXzEsXzMsXzAsXzEsXzIsXzAsXzIsXzMsXzAsXzIsXzAsX2EsXzksX2IsXzgsXzEsXzEsXzEsXzAsXzMsXzAsXzIsXzAsXzEsXzAsXzAsXzAsCisgICAgICBfMCxfMSxfMSxfMCxfMSxfMyxfMSxfMixfMSxfMCxfMCxfMCxfMSxfMixfMCxfMixfMCxfMyxfMSxfMixfMyxfMyxfMyxfMixfMSxfMixfMCxfMixfMyxfMixfMixfMixfMSxfMixfMCxfMixfMyxfMixfMixfMixfMCxfMixfMCxfMixfMixfMixfMixfMixfMyxfMixfMixfMixfMyxfMCxfMixfMCxfMixfMixfMixfMixfMixfMCxfMixfMCxfMCxfMyxfMSxfMixfMyxfMyxfMyxfMixfMSxfMixfMCxfMixfMyxfMixfMixfMixfMixfMyxfMyxfMixfMyxfMSxfMyxfMCxfMyxfMixfMixfMixfMyxfMCxfMixfMCxfMyxfMixfMixfMixfMyxfMCxfMixfMCxfMixfMixfMixfMixfMixfMCxfMixfMCxfMyxfMCxfMixfMCxfMSxfMCxfMCxfMCxfMixfMCxfMixfMCxfMCxfMCxfMCxfMCwKKyAgICAgIF84LF84LF84LF85LF8wLF8zLF8xLF8zLF8wLF8xLF8xLF8wLF8xLF8zLF8xLF8yLF84LF9hLF84LF9iLF8yLF8xLF8zLF8xLF8wLF8zLF8xLF8yLF8zLF8xLF8zLF8wLF84LF9iLF85LF9hLF8zLF8xLF8zLF8wLF8xLF8yLF8wLF8yLF8zLF8wLF8yLF8wLF9hLF85LF9iLF84LF8xLF8xLF8xLF8wLF8zLF8wLF8yLF8wLF8xLF8wLF8wLF8wLF84LF9hLF84LF9iLF8yLF8xLF8zLF8xLF8wLF8zLF8xLF8yLF8zLF8xLF8zLF8wLF9hLF84LF9hLF85LF8wLF8xLF8xLF8xLF8yLF8xLF8zLF8wLF8xLF8xLF8xLF8wLF9hLF85LF9iLF84LF8xLF8xLF8xLF8wLF8zLF8wLF8yLF8wLF8xLF8wLF8wLF8wLF84LF85LF85LF84LF8xLF8xLF8xLF8wLF8xLF8wLF8wLF8wLF8xLF8wLF8wLF8wLAorICAgICAgXzAsXzMsXzEsXzIsXzMsXzMsXzMsXzIsXzEsXzIsXzAsXzIsXzMsXzIsXzIsXzIsXzIsXzMsXzMsXzIsXzMsXzEsXzMsXzAsXzMsXzIsXzIsXzIsXzMsXzAsXzIsXzAsXzMsXzIsXzIsXzIsXzMsXzAsXzIsXzAsXzIsXzIsXzIsXzIsXzIsXzAsXzIsXzAsXzMsXzAsXzIsXzAsXzEsXzAsXzAsXzAsXzIsXzAsXzIsXzAsXzAsXzAsXzAsXzAsXzIsXzMsXzMsXzIsXzMsXzEsXzMsXzAsXzMsXzIsXzIsXzIsXzMsXzAsXzIsXzAsXzIsXzEsXzMsXzAsXzEsXzEsXzEsXzAsXzMsXzAsXzIsXzAsXzEsXzAsXzAsXzAsXzMsXzAsXzIsXzAsXzEsXzAsXzAsXzAsXzIsXzAsXzIsXzAsXzAsXzAsXzAsXzAsXzEsXzAsXzAsXzAsXzEsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsCisgICAgICBfNCxfNSxfNSxfNCxfMSxfMyxfMSxfMixfNSxfNCxfNCxfNCxfMSxfMixfMCxfMixfNCxfNyxfNSxfNixfMyxfMSxfMyxfMCxfNSxfNixfNCxfNixfMyxfMCxfMixfMCxfNSxfNixfNCxfNixfMyxfMCxfMixfMCxfNCxfNixfNCxfNixfMixfMCxfMixfMCxfNyxfNCxfNixfNCxfMSxfMCxfMCxfMCxfNixfNCxfNixfNCxfMCxfMCxfMCxfMCxfMCxfMyxfMSxfMixfMyxfMSxfMyxfMCxfMSxfMixfMCxfMixfMyxfMCxfMixfMCxfMixfMSxfMyxfMCxfMSxfMSxfMSxfMCxfMyxfMCxfMixfMCxfMSxfMCxfMCxfMCxfMyxfMCxfMixfMCxfMSxfMCxfMCxfMCxfMixfMCxfMixfMCxfMCxfMCxfMCxfMCxfMSxfMCxfMCxfMCxfMSxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCwKKyAgICAgIF8xLF8yLF8wLF8yLF8zLF8yLF8yLF8yLF8wLF8yLF8wLF8yLF8yLF8yLF8yLF8yLF8zLF8yLF8yLF8yLF8zLF8wLF8yLF8wLF8yLF8yLF8yLF8yLF8yLF8wLF8yLF8wLF8yLF8yLF8yLF8yLF8yLF8wLF8yLF8wLF8yLF8yLF8yLF8yLF8yLF8wLF8yLF8wLF8yLF8wLF8yLF8wLF8wLF8wLF8wLF8wLF8yLF8wLF8yLF8wLF8wLF8wLF8wLF8wLF8zLF8yLF8yLF8yLF8zLF8wLF8yLF8wLF8yLF8yLF8yLF8yLF8yLF8wLF8yLF8wLF8zLF8wLF8yLF8wLF8xLF8wLF8wLF8wLF8yLF8wLF8yLF8wLF8wLF8wLF8wLF8wLF8yLF8wLF8yLF8wLF8wLF8wLF8wLF8wLF8yLF8wLF8yLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLAorICAgICAgXzAsXzMsXzEsXzIsXzMsXzEsXzMsXzAsXzEsXzIsXzAsXzIsXzMsXzAsXzIsXzAsXzIsXzEsXzMsXzAsXzEsXzEsXzEsXzAsXzMsXzAsXzIsXzAsXzEsXzAsXzAsXzAsXzMsXzAsXzIsXzAsXzEsXzAsXzAsXzAsXzIsXzAsXzIsXzAsXzAsXzAsXzAsXzAsXzEsXzAsXzAsXzAsXzEsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzIsXzEsXzMsXzAsXzEsXzEsXzEsXzAsXzMsXzAsXzIsXzAsXzEsXzAsXzAsXzAsXzAsXzEsXzEsXzAsXzEsXzEsXzEsXzAsXzEsXzAsXzAsXzAsXzEsXzAsXzAsXzAsXzEsXzAsXzAsXzAsXzEsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzEsXzAsXzAsXzAsXzEsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsCisgICAgICBfMyxfMixfMixfMixfMyxfMCxfMixfMCxfMixfMixfMixfMixfMixfMCxfMixfMCxfMyxfMCxfMixfMCxfMSxfMCxfMCxfMCxfMixfMCxfMixfMCxfMCxfMCxfMCxfMCxfMixfMCxfMixfMCxfMCxfMCxfMCxfMCxfMixfMCxfMixfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMyxfMCxfMixfMCxfMSxfMCxfMCxfMCxfMixfMCxfMixfMCxfMCxfMCxfMCxfMCxfMSxfMCxfMCxfMCxfMSxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCwKKyAgICAgIF84LF85LF85LF84LF9kLF9mLF9kLF9lLF85LF84LF84LF84LF81LF82LF80LF82LF84LF9iLF85LF9hLF9mLF9kLF9mLF9jLF85LF9hLF84LF9hLF83LF80LF82LF80LF85LF9hLF84LF9hLF9mLF9jLF9lLF9jLF84LF9hLF84LF9hLF82LF80LF82LF80LF9iLF84LF9hLF84LF9kLF9jLF9jLF9jLF9hLF84LF9hLF84LF80LF80LF80LF80LF9jLF9mLF9kLF9lLF9iLF85LF9iLF84LF9kLF9lLF9jLF9lLF8zLF8wLF8yLF8wLF9lLF9kLF9mLF9jLF85LF85LF85LF84LF9mLF9jLF9lLF9jLF8xLF8wLF8wLF8wLF9mLF9jLF9lLF9jLF85LF84LF84LF84LF9lLF9jLF9lLF9jLF8wLF8wLF8wLF8wLF9kLF9jLF9jLF9jLF85LF84LF84LF84LF9jLF9jLF9jLF9jLF8wLF8wLF8wLF8wLAorICAgICAgX2QsX2UsX2MsX2UsXzMsXzIsXzIsXzIsXzQsXzYsXzQsXzYsXzIsXzIsXzIsXzIsX2YsX2UsX2UsX2UsXzMsXzAsXzIsXzAsXzYsXzYsXzYsXzYsXzIsXzAsXzIsXzAsX2UsX2UsX2UsX2UsXzIsXzAsXzIsXzAsXzYsXzYsXzYsXzYsXzIsXzAsXzIsXzAsX2UsX2MsX2UsX2MsXzAsXzAsXzAsXzAsXzYsXzQsXzYsXzQsXzAsXzAsXzAsXzAsX2IsX2EsX2EsX2EsXzMsXzAsXzIsXzAsXzIsXzIsXzIsXzIsXzIsXzAsXzIsXzAsX2IsXzgsX2EsXzgsXzEsXzAsXzAsXzAsXzIsXzAsXzIsXzAsXzAsXzAsXzAsXzAsX2EsXzgsX2EsXzgsXzAsXzAsXzAsXzAsXzIsXzAsXzIsXzAsXzAsXzAsXzAsXzAsXzgsXzgsXzgsXzgsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsCisgICAgICBfYyxfZixfZCxfZSxfYixfOSxfYixfOCxfZCxfZSxfYyxfZSxfMyxfMCxfMixfMCxfZSxfZCxfZixfYyxfOSxfOSxfOSxfOCxfZixfYyxfZSxfYyxfMSxfMCxfMCxfMCxfZixfYyxfZSxfYyxfOSxfOCxfOCxfOCxfZSxfYyxfZSxfYyxfMCxfMCxfMCxfMCxfZCxfYyxfYyxfYyxfOSxfOCxfOCxfOCxfYyxfYyxfYyxfYyxfMCxfMCxfMCxfMCxfYSxfOSxfYixfOCxfOSxfOSxfOSxfOCxfYixfOCxfYSxfOCxfMSxfMCxfMCxfMCxfOCxfOSxfOSxfOCxfOSxfOSxfOSxfOCxfOSxfOCxfOCxfOCxfMSxfMCxfMCxfMCxfOSxfOCxfOCxfOCxfOSxfOCxfOCxfOCxfOCxfOCxfOCxfOCxfMCxfMCxfMCxfMCxfOSxfOCxfOCxfOCxfOSxfOCxfOCxfOCxfOCxfOCxfOCxfOCxfMCxfMCxfMCxfMCwKKyAgICAgIF9iLF9hLF9hLF9hLF8zLF8wLF8yLF8wLF8yLF8yLF8yLF8yLF8yLF8wLF8yLF8wLF9iLF84LF9hLF84LF8xLF8wLF8wLF8wLF8yLF8wLF8yLF8wLF8wLF8wLF8wLF8wLF9hLF84LF9hLF84LF8wLF8wLF8wLF8wLF8yLF8wLF8yLF8wLF8wLF8wLF8wLF8wLF84LF84LF84LF84LF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF9iLF84LF9hLF84LF8xLF8wLF8wLF8wLF8yLF8wLF8yLF8wLF8wLF8wLF8wLF8wLF85LF84LF84LF84LF8xLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF84LF84LF84LF84LF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF84LF84LF84LF84LF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLAorICAgICAgX2QsX2UsX2MsX2UsXzcsXzQsXzYsXzQsXzQsXzYsXzQsXzYsXzYsXzQsXzYsXzQsX2YsX2MsX2UsX2MsXzUsXzQsXzQsXzQsXzYsXzQsXzYsXzQsXzQsXzQsXzQsXzQsX2UsX2MsX2UsX2MsXzQsXzQsXzQsXzQsXzYsXzQsXzYsXzQsXzQsXzQsXzQsXzQsX2MsX2MsX2MsX2MsXzQsXzQsXzQsXzQsXzQsXzQsXzQsXzQsXzQsXzQsXzQsXzQsX2YsX2MsX2UsX2MsXzEsXzAsXzAsXzAsXzYsXzQsXzYsXzQsXzAsXzAsXzAsXzAsX2QsX2MsX2MsX2MsXzEsXzAsXzAsXzAsXzQsXzQsXzQsXzQsXzAsXzAsXzAsXzAsX2MsX2MsX2MsX2MsXzAsXzAsXzAsXzAsXzQsXzQsXzQsXzQsXzAsXzAsXzAsXzAsX2MsX2MsX2MsX2MsXzAsXzAsXzAsXzAsXzQsXzQsXzQsXzQsXzAsXzAsXzAsXzAsCisgICAgICBfNixfNixfNixfNixfMixfMCxfMixfMCxfNixfNixfNixfNixfMixfMCxfMixfMCxfNixfNCxfNixfNCxfMCxfMCxfMCxfMCxfNixfNCxfNixfNCxfMCxfMCxfMCxfMCxfNixfNCxfNixfNCxfMCxfMCxfMCxfMCxfNixfNCxfNixfNCxfMCxfMCxfMCxfMCxfNCxfNCxfNCxfNCxfMCxfMCxfMCxfMCxfNCxfNCxfNCxfNCxfMCxfMCxfMCxfMCxfMixfMCxfMixfMCxfMCxfMCxfMCxfMCxfMixfMCxfMixfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCwKKyAgICAgIF9mLF9jLF9lLF9jLF8xLF8wLF8wLF8wLF82LF80LF82LF80LF8wLF8wLF8wLF8wLF9kLF9jLF9jLF9jLF8xLF8wLF8wLF8wLF80LF80LF80LF80LF8wLF8wLF8wLF8wLF9jLF9jLF9jLF9jLF8wLF8wLF8wLF8wLF80LF80LF80LF80LF8wLF8wLF8wLF8wLF9jLF9jLF9jLF9jLF8wLF8wLF8wLF8wLF80LF80LF80LF80LF8wLF8wLF8wLF8wLF85LF84LF84LF84LF8xLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF85LF84LF84LF84LF8xLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF84LF84LF84LF84LF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF84LF84LF84LF84LF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLAorICAgICAgXzIsXzAsXzIsXzAsXzAsXzAsXzAsXzAsXzIsXzAsXzIsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsCisgICAgICBfYyxfZCxfZCxfYyxfOSxfYixfOSxfYSxfZCxfYyxfYyxfYyxfMSxfMixfMCxfMixfYyxfZixfZCxfZSxfYixfOSxfYixfOCxfZCxfZSxfYyxfZSxfMyxfMCxfMixfMCxfZCxfZSxfYyxfZSxfYixfOCxfYSxfOCxfYyxfZSxfYyxfZSxfMixfMCxfMixfMCxfZixfYyxfZSxfYyxfOSxfOCxfOCxfOCxfZSxfYyxfZSxfYyxfMCxfMCxfMCxfMCxfOCxfYixfOSxfYSxfYixfOSxfYixfOCxfOSxfYSxfOCxfYSxfMyxfMCxfMixfMCxfYSxfOSxfYixfOCxfOSxfOSxfOSxfOCxfYixfOCxfYSxfOCxfMSxfMCxfMCxfMCxfYixfOCxfYSxfOCxfOSxfOCxfOCxfOCxfYSxfOCxfYSxfOCxfMCxfMCxfMCxfMCxfOSxfOCxfOCxfOCxfOSxfOCxfOCxfOCxfOCxfOCxfOCxfOCxfMCxfMCxfMCxfMCwKKyAgICAgIF85LF9hLF84LF9hLF8zLF8yLF8yLF8yLF8wLF8yLF8wLF8yLF8yLF8yLF8yLF8yLF9iLF9hLF9hLF9hLF8zLF8wLF8yLF8wLF8yLF8yLF8yLF8yLF8yLF8wLF8yLF8wLF9hLF9hLF9hLF9hLF8yLF8wLF8yLF8wLF8yLF8yLF8yLF8yLF8yLF8wLF8yLF8wLF9hLF84LF9hLF84LF8wLF8wLF8wLF8wLF8yLF8wLF8yLF8wLF8wLF8wLF8wLF8wLF9iLF9hLF9hLF9hLF8zLF8wLF8yLF8wLF8yLF8yLF8yLF8yLF8yLF8wLF8yLF8wLF9iLF84LF9hLF84LF8xLF8wLF8wLF8wLF8yLF8wLF8yLF8wLF8wLF8wLF8wLF8wLF9hLF84LF9hLF84LF8wLF8wLF8wLF8wLF8yLF8wLF8yLF8wLF8wLF8wLF8wLF8wLF84LF84LF84LF84LF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLAorICAgICAgXzgsX2IsXzksX2EsX2IsXzksX2IsXzgsXzksX2EsXzgsX2EsXzMsXzAsXzIsXzAsX2EsXzksX2IsXzgsXzksXzksXzksXzgsX2IsXzgsX2EsXzgsXzEsXzAsXzAsXzAsX2IsXzgsX2EsXzgsXzksXzgsXzgsXzgsX2EsXzgsX2EsXzgsXzAsXzAsXzAsXzAsXzksXzgsXzgsXzgsXzksXzgsXzgsXzgsXzgsXzgsXzgsXzgsXzAsXzAsXzAsXzAsX2EsXzksX2IsXzgsXzksXzksXzksXzgsX2IsXzgsX2EsXzgsXzEsXzAsXzAsXzAsXzgsXzksXzksXzgsXzksXzksXzksXzgsXzksXzgsXzgsXzgsXzEsXzAsXzAsXzAsXzksXzgsXzgsXzgsXzksXzgsXzgsXzgsXzgsXzgsXzgsXzgsXzAsXzAsXzAsXzAsXzksXzgsXzgsXzgsXzksXzgsXzgsXzgsXzgsXzgsXzgsXzgsXzAsXzAsXzAsXzAsCisgICAgICBfYixfYSxfYSxfYSxfMyxfMCxfMixfMCxfMixfMixfMixfMixfMixfMCxfMixfMCxfYixfOCxfYSxfOCxfMSxfMCxfMCxfMCxfMixfMCxfMixfMCxfMCxfMCxfMCxfMCxfYSxfOCxfYSxfOCxfMCxfMCxfMCxfMCxfMixfMCxfMixfMCxfMCxfMCxfMCxfMCxfOCxfOCxfOCxfOCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfYixfOCxfYSxfOCxfMSxfMCxfMCxfMCxfMixfMCxfMixfMCxfMCxfMCxfMCxfMCxfOSxfOCxfOCxfOCxfMSxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfOCxfOCxfOCxfOCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfOCxfOCxfOCxfOCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCwKKyAgICAgIF9kLF9lLF9jLF9lLF8zLF8wLF8yLF8wLF80LF82LF80LF82LF8yLF8wLF8yLF8wLF9mLF9jLF9lLF9jLF8xLF8wLF8wLF8wLF82LF80LF82LF80LF8wLF8wLF8wLF8wLF9lLF9jLF9lLF9jLF8wLF8wLF8wLF8wLF82LF80LF82LF80LF8wLF8wLF8wLF8wLF9jLF9jLF9jLF9jLF8wLF8wLF8wLF8wLF80LF80LF80LF80LF8wLF8wLF8wLF8wLF9iLF84LF9hLF84LF8xLF8wLF8wLF8wLF8yLF8wLF8yLF8wLF8wLF8wLF8wLF8wLF85LF84LF84LF84LF8xLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF84LF84LF84LF84LF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF84LF84LF84LF84LF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLAorICAgICAgXzIsXzIsXzIsXzIsXzIsXzAsXzIsXzAsXzIsXzIsXzIsXzIsXzIsXzAsXzIsXzAsXzIsXzAsXzIsXzAsXzAsXzAsXzAsXzAsXzIsXzAsXzIsXzAsXzAsXzAsXzAsXzAsXzIsXzAsXzIsXzAsXzAsXzAsXzAsXzAsXzIsXzAsXzIsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzIsXzAsXzIsXzAsXzAsXzAsXzAsXzAsXzIsXzAsXzIsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsCisgICAgICBfYixfOCxfYSxfOCxfMSxfMCxfMCxfMCxfMixfMCxfMixfMCxfMCxfMCxfMCxfMCxfOSxfOCxfOCxfOCxfMSxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfOCxfOCxfOCxfOCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfOCxfOCxfOCxfOCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfOSxfOCxfOCxfOCxfMSxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfOSxfOCxfOCxfOCxfMSxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfOCxfOCxfOCxfOCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfOCxfOCxfOCxfOCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCwKKyAgICAgIF8yLF8wLF8yLF8wLF8wLF8wLF8wLF8wLF8yLF8wLF8yLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLAorICAgICAgX2MsX2QsX2QsX2MsXzEsXzMsXzEsXzIsXzUsXzQsXzQsXzQsXzEsXzIsXzAsXzIsX2MsX2YsX2QsX2UsXzMsXzEsXzMsXzAsXzUsXzYsXzQsXzYsXzMsXzAsXzIsXzAsX2QsX2UsX2MsX2UsXzMsXzAsXzIsXzAsXzQsXzYsXzQsXzYsXzIsXzAsXzIsXzAsX2YsX2MsX2UsX2MsXzEsXzAsXzAsXzAsXzYsXzQsXzYsXzQsXzAsXzAsXzAsXzAsXzgsX2IsXzksX2EsXzMsXzEsXzMsXzAsXzEsXzIsXzAsXzIsXzMsXzAsXzIsXzAsX2EsXzksX2IsXzgsXzEsXzEsXzEsXzAsXzMsXzAsXzIsXzAsXzEsXzAsXzAsXzAsX2IsXzgsX2EsXzgsXzEsXzAsXzAsXzAsXzIsXzAsXzIsXzAsXzAsXzAsXzAsXzAsXzksXzgsXzgsXzgsXzEsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsCisgICAgICBfMSxfMixfMCxfMixfMyxfMixfMixfMixfMCxfMixfMCxfMixfMixfMixfMixfMixfMyxfMixfMixfMixfMyxfMCxfMixfMCxfMixfMixfMixfMixfMixfMCxfMixfMCxfMixfMixfMixfMixfMixfMCxfMixfMCxfMixfMixfMixfMixfMixfMCxfMixfMCxfMixfMCxfMixfMCxfMCxfMCxfMCxfMCxfMixfMCxfMixfMCxfMCxfMCxfMCxfMCxfMyxfMixfMixfMixfMyxfMCxfMixfMCxfMixfMixfMixfMixfMixfMCxfMixfMCxfMyxfMCxfMixfMCxfMSxfMCxfMCxfMCxfMixfMCxfMixfMCxfMCxfMCxfMCxfMCxfMixfMCxfMixfMCxfMCxfMCxfMCxfMCxfMixfMCxfMixfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCwKKyAgICAgIF84LF9iLF85LF9hLF8zLF8xLF8zLF8wLF8xLF8yLF8wLF8yLF8zLF8wLF8yLF8wLF9hLF85LF9iLF84LF8xLF8xLF8xLF8wLF8zLF8wLF8yLF8wLF8xLF8wLF8wLF8wLF9iLF84LF9hLF84LF8xLF8wLF8wLF8wLF8yLF8wLF8yLF8wLF8wLF8wLF8wLF8wLF85LF84LF84LF84LF8xLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF9hLF85LF9iLF84LF8xLF8xLF8xLF8wLF8zLF8wLF8yLF8wLF8xLF8wLF8wLF8wLF84LF85LF85LF84LF8xLF8xLF8xLF8wLF8xLF8wLF8wLF8wLF8xLF8wLF8wLF8wLF85LF84LF84LF84LF8xLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF85LF84LF84LF84LF8xLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLAorICAgICAgXzMsXzIsXzIsXzIsXzMsXzAsXzIsXzAsXzIsXzIsXzIsXzIsXzIsXzAsXzIsXzAsXzMsXzAsXzIsXzAsXzEsXzAsXzAsXzAsXzIsXzAsXzIsXzAsXzAsXzAsXzAsXzAsXzIsXzAsXzIsXzAsXzAsXzAsXzAsXzAsXzIsXzAsXzIsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzMsXzAsXzIsXzAsXzEsXzAsXzAsXzAsXzIsXzAsXzIsXzAsXzAsXzAsXzAsXzAsXzEsXzAsXzAsXzAsXzEsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsCisgICAgICBfNSxfNixfNCxfNixfMyxfMCxfMixfMCxfNCxfNixfNCxfNixfMixfMCxfMixfMCxfNyxfNCxfNixfNCxfMSxfMCxfMCxfMCxfNixfNCxfNixfNCxfMCxfMCxfMCxfMCxfNixfNCxfNixfNCxfMCxfMCxfMCxfMCxfNixfNCxfNixfNCxfMCxfMCxfMCxfMCxfNCxfNCxfNCxfNCxfMCxfMCxfMCxfMCxfNCxfNCxfNCxfNCxfMCxfMCxfMCxfMCxfMyxfMCxfMixfMCxfMSxfMCxfMCxfMCxfMixfMCxfMixfMCxfMCxfMCxfMCxfMCxfMSxfMCxfMCxfMCxfMSxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCwKKyAgICAgIF8yLF8yLF8yLF8yLF8yLF8wLF8yLF8wLF8yLF8yLF8yLF8yLF8yLF8wLF8yLF8wLF8yLF8wLF8yLF8wLF8wLF8wLF8wLF8wLF8yLF8wLF8yLF8wLF8wLF8wLF8wLF8wLF8yLF8wLF8yLF8wLF8wLF8wLF8wLF8wLF8yLF8wLF8yLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8yLF8wLF8yLF8wLF8wLF8wLF8wLF8wLF8yLF8wLF8yLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLAorICAgICAgXzMsXzAsXzIsXzAsXzEsXzAsXzAsXzAsXzIsXzAsXzIsXzAsXzAsXzAsXzAsXzAsXzEsXzAsXzAsXzAsXzEsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzEsXzAsXzAsXzAsXzEsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzEsXzAsXzAsXzAsXzEsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsCisgICAgICBfMixfMCxfMixfMCxfMCxfMCxfMCxfMCxfMixfMCxfMixfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCwKKyAgICAgIF84LF85LF85LF84LF8xLF8zLF8xLF8yLF8xLF8wLF8wLF8wLF8xLF8yLF8wLF8yLF84LF9iLF85LF9hLF8zLF8xLF8zLF8wLF8xLF8yLF8wLF8yLF8zLF8wLF8yLF8wLF85LF9hLF84LF9hLF8zLF8wLF8yLF8wLF8wLF8yLF8wLF8yLF8yLF8wLF8yLF8wLF9iLF84LF9hLF84LF8xLF8wLF8wLF8wLF8yLF8wLF8yLF8wLF8wLF8wLF8wLF8wLF84LF9iLF85LF9hLF8zLF8xLF8zLF8wLF8xLF8yLF8wLF8yLF8zLF8wLF8yLF8wLF9hLF85LF9iLF84LF8xLF8xLF8xLF8wLF8zLF8wLF8yLF8wLF8xLF8wLF8wLF8wLF9iLF84LF9hLF84LF8xLF8wLF8wLF8wLF8yLF8wLF8yLF8wLF8wLF8wLF8wLF8wLF85LF84LF84LF84LF8xLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLAorICAgICAgXzEsXzIsXzAsXzIsXzMsXzIsXzIsXzIsXzAsXzIsXzAsXzIsXzIsXzIsXzIsXzIsXzMsXzIsXzIsXzIsXzMsXzAsXzIsXzAsXzIsXzIsXzIsXzIsXzIsXzAsXzIsXzAsXzIsXzIsXzIsXzIsXzIsXzAsXzIsXzAsXzIsXzIsXzIsXzIsXzIsXzAsXzIsXzAsXzIsXzAsXzIsXzAsXzAsXzAsXzAsXzAsXzIsXzAsXzIsXzAsXzAsXzAsXzAsXzAsXzMsXzIsXzIsXzIsXzMsXzAsXzIsXzAsXzIsXzIsXzIsXzIsXzIsXzAsXzIsXzAsXzMsXzAsXzIsXzAsXzEsXzAsXzAsXzAsXzIsXzAsXzIsXzAsXzAsXzAsXzAsXzAsXzIsXzAsXzIsXzAsXzAsXzAsXzAsXzAsXzIsXzAsXzIsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsCisgICAgICBfOCxfYixfOSxfYSxfMyxfMSxfMyxfMCxfMSxfMixfMCxfMixfMyxfMCxfMixfMCxfYSxfOSxfYixfOCxfMSxfMSxfMSxfMCxfMyxfMCxfMixfMCxfMSxfMCxfMCxfMCxfYixfOCxfYSxfOCxfMSxfMCxfMCxfMCxfMixfMCxfMixfMCxfMCxfMCxfMCxfMCxfOSxfOCxfOCxfOCxfMSxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfYSxfOSxfYixfOCxfMSxfMSxfMSxfMCxfMyxfMCxfMixfMCxfMSxfMCxfMCxfMCxfOCxfOSxfOSxfOCxfMSxfMSxfMSxfMCxfMSxfMCxfMCxfMCxfMSxfMCxfMCxfMCxfOSxfOCxfOCxfOCxfMSxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfOSxfOCxfOCxfOCxfMSxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCwKKyAgICAgIF8zLF8yLF8yLF8yLF8zLF8wLF8yLF8wLF8yLF8yLF8yLF8yLF8yLF8wLF8yLF8wLF8zLF8wLF8yLF8wLF8xLF8wLF8wLF8wLF8yLF8wLF8yLF8wLF8wLF8wLF8wLF8wLF8yLF8wLF8yLF8wLF8wLF8wLF8wLF8wLF8yLF8wLF8yLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8zLF8wLF8yLF8wLF8xLF8wLF8wLF8wLF8yLF8wLF8yLF8wLF8wLF8wLF8wLF8wLF8xLF8wLF8wLF8wLF8xLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLAorICAgICAgXzEsXzIsXzAsXzIsXzMsXzAsXzIsXzAsXzAsXzIsXzAsXzIsXzIsXzAsXzIsXzAsXzMsXzAsXzIsXzAsXzEsXzAsXzAsXzAsXzIsXzAsXzIsXzAsXzAsXzAsXzAsXzAsXzIsXzAsXzIsXzAsXzAsXzAsXzAsXzAsXzIsXzAsXzIsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzMsXzAsXzIsXzAsXzEsXzAsXzAsXzAsXzIsXzAsXzIsXzAsXzAsXzAsXzAsXzAsXzEsXzAsXzAsXzAsXzEsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsCisgICAgICBfMixfMixfMixfMixfMixfMCxfMixfMCxfMixfMixfMixfMixfMixfMCxfMixfMCxfMixfMCxfMixfMCxfMCxfMCxfMCxfMCxfMixfMCxfMixfMCxfMCxfMCxfMCxfMCxfMixfMCxfMixfMCxfMCxfMCxfMCxfMCxfMixfMCxfMixfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMixfMCxfMixfMCxfMCxfMCxfMCxfMCxfMixfMCxfMixfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCwKKyAgICAgIF8zLF8wLF8yLF8wLF8xLF8wLF8wLF8wLF8yLF8wLF8yLF8wLF8wLF8wLF8wLF8wLF8xLF8wLF8wLF8wLF8xLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8xLF8wLF8wLF8wLF8xLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8xLF8wLF8wLF8wLF8xLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLAorICAgICAgXzIsXzAsXzIsXzAsXzAsXzAsXzAsXzAsXzIsXzAsXzIsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsCisgICAgICBfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMSxfMCxfMCxfMCxfMSxfOCxfOSxfOSxfOSxfMCxfMCxfMCxfMCxfMCxfMixfMCxfMyxfMCxfMCxfMCxfMSxfOCxfYixfOSxfYixfMCxfMCxfMCxfMSxfMCxfMyxfMSxfMyxfMCxfMSxfMSxfMCxfOSxfYixfOSxfYSxfMCxfMixfMCxfMyxfMixfMSxfMyxfMSxfMCxfMyxfMSxfMixfYixfOSxfYixfOCxfMCxfMCxfMCxfMCxfMCxfMixfMCxfMyxfMCxfMCxfMCxfMSxfOCxfYixfOSxfYixfMCxfMixfMCxfMixfMixfMCxfMixfMSxfMCxfMixfMCxfMyxfYSxfOSxfYixfOSxfMCxfMixfMCxfMyxfMixfMSxfMyxfMSxfMCxfMyxfMSxfMixfYixfOSxfYixfOCxfMixfMCxfMixfMSxfMCxfMSxfMSxfMSxfMixfMSxfMyxfMCxfOSxfOSxfOSxfOCwKKyAgICAgIF8wLF8wLF8wLF8xLF84LF9iLF85LF9iLF84LF85LF85LF84LF8xLF8zLF8xLF8yLF8wLF8yLF8wLF8zLF9hLF9iLF9iLF9iLF84LF9iLF85LF9hLF8zLF8zLF8zLF8yLF8wLF8zLF8xLF8yLF9iLF9iLF9iLF9hLF85LF9hLF84LF9hLF8zLF8yLF8yLF8yLF8yLF8zLF8zLF8yLF9iLF85LF9iLF84LF9iLF9hLF9hLF9hLF8zLF8wLF8yLF8wLF8wLF8yLF8wLF8zLF9lLF9mLF9mLF9mLF84LF9iLF85LF9hLF83LF83LF83LF82LF8yLF8yLF8yLF8zLF9lLF9kLF9mLF9kLF9hLF9iLF9iLF9hLF83LF81LF83LF80LF8yLF8zLF8zLF8yLF9mLF9kLF9mLF9jLF9iLF9hLF9hLF9hLF83LF80LF82LF80LF8yLF8xLF8zLF8wLF9kLF9kLF9kLF9jLF9iLF84LF9hLF84LF81LF80LF80LF80LAorICAgICAgXzAsXzAsXzAsXzAsXzAsXzIsXzAsXzMsXzAsXzAsXzAsXzEsXzgsX2IsXzksX2IsXzAsXzIsXzAsXzIsXzIsXzAsXzIsXzEsXzAsXzIsXzAsXzMsX2EsXzksX2IsXzksXzAsXzIsXzAsXzMsXzIsXzEsXzMsXzEsXzAsXzMsXzEsXzIsX2IsXzksX2IsXzgsXzIsXzAsXzIsXzEsXzAsXzEsXzEsXzEsXzIsXzEsXzMsXzAsXzksXzksXzksXzgsXzAsXzIsXzAsXzIsXzYsXzQsXzYsXzUsXzAsXzIsXzAsXzMsX2UsX2QsX2YsX2QsXzIsXzAsXzIsXzAsXzQsXzQsXzQsXzUsXzIsXzAsXzIsXzEsX2MsX2QsX2QsX2QsXzIsXzAsXzIsXzEsXzQsXzUsXzUsXzUsXzIsXzEsXzMsXzAsX2QsX2QsX2QsX2MsXzAsXzAsXzAsXzEsXzQsXzUsXzUsXzUsXzAsXzEsXzEsXzAsX2QsX2QsX2QsX2MsCisgICAgICBfMCxfMixfMCxfMyxfZSxfZixfZixfZixfOCxfYixfOSxfYSxfNyxfNyxfNyxfNixfMixfMixfMixfMyxfZSxfZCxfZixfZCxfYSxfYixfYixfYSxfNyxfNSxfNyxfNCxfMixfMyxfMyxfMixfZixfZCxfZixfYyxfYixfYSxfYSxfYSxfNyxfNCxfNixfNCxfMixfMSxfMyxfMCxfZCxfZCxfZCxfYyxfYixfOCxfYSxfOCxfNSxfNCxfNCxfNCxfNixfNixfNixfNyxfYSxfOSxfYixfOSxfZSxfZixfZixfZSxfMyxfMSxfMyxfMCxfNixfNCxfNixfNSxfOCxfOSxfOSxfOSxfZSxfZCxfZixfYyxfMSxfMSxfMSxfMCxfNixfNSxfNyxfNCxfOSxfOSxfOSxfOCxfZixfYyxfZSxfYyxfMSxfMCxfMCxfMCxfNCxfNSxfNSxfNCxfOSxfOSxfOSxfOCxfZCxfYyxfYyxfYyxfMSxfMCxfMCxfMCwKKyAgICAgIF8wLF8wLF8wLF8xLF84LF9iLF85LF9iLF84LF85LF85LF84LF8xLF8zLF8xLF8yLF8wLF8yLF8wLF8zLF9hLF85LF9iLF85LF84LF9iLF85LF9hLF8zLF8xLF8zLF8wLF8wLF8zLF8xLF8yLF9iLF85LF9iLF84LF85LF9hLF84LF9hLF8zLF8wLF8yLF8wLF8yLF8xLF8zLF8wLF85LF85LF85LF84LF9iLF84LF9hLF84LF8xLF8wLF8wLF8wLF8wLF8yLF8wLF8zLF9lLF9kLF9mLF9kLF84LF9iLF85LF9hLF83LF81LF83LF80LF8yLF8wLF8yLF8xLF9jLF9kLF9kLF9kLF9hLF85LF9iLF84LF81LF81LF81LF80LF8yLF8xLF8zLF8wLF9kLF9kLF9kLF9jLF9iLF84LF9hLF84LF81LF80LF80LF80LF8wLF8xLF8xLF8wLF9kLF9kLF9kLF9jLF85LF84LF84LF84LF81LF80LF80LF80LAorICAgICAgXzgsX2IsXzksX2EsXzcsXzcsXzcsXzYsXzEsXzIsXzAsXzIsXzcsXzYsXzYsXzYsX2EsX2IsX2IsX2EsXzcsXzUsXzcsXzQsXzMsXzIsXzIsXzIsXzcsXzQsXzYsXzQsX2IsX2EsX2EsX2EsXzcsXzQsXzYsXzQsXzIsXzIsXzIsXzIsXzYsXzQsXzYsXzQsX2IsXzgsX2EsXzgsXzUsXzQsXzQsXzQsXzIsXzAsXzIsXzAsXzQsXzQsXzQsXzQsX2UsX2YsX2YsX2UsXzcsXzUsXzcsXzQsXzcsXzYsXzYsXzYsXzcsXzQsXzYsXzQsX2UsX2QsX2YsX2MsXzUsXzUsXzUsXzQsXzcsXzQsXzYsXzQsXzUsXzQsXzQsXzQsX2YsX2MsX2UsX2MsXzUsXzQsXzQsXzQsXzYsXzQsXzYsXzQsXzQsXzQsXzQsXzQsX2QsX2MsX2MsX2MsXzUsXzQsXzQsXzQsXzQsXzQsXzQsXzQsXzQsXzQsXzQsXzQsCisgICAgICBfMCxfMixfMCxfMyxfZSxfZCxfZixfZCxfOCxfYixfOSxfYSxfNyxfNSxfNyxfNCxfMixfMCxfMixfMSxfYyxfZCxfZCxfZCxfYSxfOSxfYixfOCxfNSxfNSxfNSxfNCxfMixfMSxfMyxfMCxfZCxfZCxfZCxfYyxfYixfOCxfYSxfOCxfNSxfNCxfNCxfNCxfMCxfMSxfMSxfMCxfZCxfZCxfZCxfYyxfOSxfOCxfOCxfOCxfNSxfNCxfNCxfNCxfNixfNCxfNixfNSxfYyxfZCxfZCxfZCxfZSxfZCxfZixfYyxfNSxfNSxfNSxfNCxfNCxfNCxfNCxfNSxfYyxfZCxfZCxfZCxfYyxfZCxfZCxfYyxfNSxfNSxfNSxfNCxfNCxfNSxfNSxfNCxfZCxfZCxfZCxfYyxfZCxfYyxfYyxfYyxfNSxfNCxfNCxfNCxfNCxfNSxfNSxfNCxfZCxfZCxfZCxfYyxfZCxfYyxfYyxfYyxfNSxfNCxfNCxfNCwKKyAgICAgIF9lLF9mLF9mLF9lLF83LF81LF83LF80LF83LF82LF82LF82LF83LF80LF82LF80LF9lLF9kLF9mLF9jLF81LF81LF81LF80LF83LF80LF82LF80LF81LF80LF80LF80LF9mLF9jLF9lLF9jLF81LF80LF80LF80LF82LF80LF82LF80LF80LF80LF80LF80LF9kLF9jLF9jLF9jLF81LF80LF80LF80LF80LF80LF80LF80LF80LF80LF80LF80LF9lLF9kLF9mLF9jLF8xLF8xLF8xLF8wLF83LF80LF82LF80LF8xLF8wLF8wLF8wLF9jLF9kLF9kLF9jLF8xLF8xLF8xLF8wLF81LF80LF80LF80LF8xLF8wLF8wLF8wLF9kLF9jLF9jLF9jLF8xLF8wLF8wLF8wLF80LF80LF80LF80LF8wLF8wLF8wLF8wLF9kLF9jLF9jLF9jLF8xLF8wLF8wLF8wLF80LF80LF80LF80LF8wLF8wLF8wLF8wLAorICAgICAgXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzEsXzAsXzAsXzAsXzEsXzgsXzksXzksXzksXzAsXzAsXzAsXzAsXzAsXzIsXzAsXzMsXzAsXzAsXzAsXzEsXzgsX2IsXzksX2IsXzAsXzAsXzAsXzEsXzAsXzMsXzEsXzMsXzAsXzEsXzEsXzAsXzksX2IsXzksX2EsXzAsXzIsXzAsXzMsXzIsXzEsXzMsXzEsXzAsXzMsXzEsXzIsX2IsXzksX2IsXzgsXzAsXzAsXzAsXzAsXzQsXzYsXzQsXzcsXzAsXzAsXzAsXzEsX2MsX2YsX2QsX2YsXzAsXzIsXzAsXzIsXzYsXzQsXzYsXzUsXzAsXzIsXzAsXzMsX2UsX2QsX2YsX2QsXzAsXzIsXzAsXzMsXzYsXzUsXzcsXzUsXzAsXzMsXzEsXzIsX2YsX2QsX2YsX2MsXzIsXzAsXzIsXzEsXzQsXzUsXzUsXzUsXzIsXzEsXzMsXzAsX2QsX2QsX2QsX2MsCisgICAgICBfMCxfMCxfMCxfMSxfYyxfZixfZCxfZixfOCxfOSxfOSxfOCxfNSxfNyxfNSxfNixfMCxfMixfMCxfMyxfZSxfZixfZixfZixfOCxfYixfOSxfYSxfNyxfNyxfNyxfNixfMCxfMyxfMSxfMixfZixfZixfZixfZSxfOSxfYSxfOCxfYSxfNyxfNixfNixfNixfMixfMyxfMyxfMixfZixfZCxfZixfYyxfYixfYSxfYSxfYSxfNyxfNCxfNixfNCxfNCxfNixfNCxfNyxfYSxfYixfYixfYixfYyxfZixfZCxfZSxfMyxfMyxfMyxfMixfNixfNixfNixfNyxfYSxfOSxfYixfOSxfZSxfZixfZixfZSxfMyxfMSxfMyxfMCxfNixfNyxfNyxfNixfYixfOSxfYixfOCxfZixfZSxfZSxfZSxfMyxfMCxfMixfMCxfNixfNSxfNyxfNCxfOSxfOSxfOSxfOCxfZixfYyxfZSxfYyxfMSxfMCxfMCxfMCwKKyAgICAgIF8wLF8wLF8wLF8wLF80LF82LF80LF83LF8wLF8wLF8wLF8xLF9jLF9mLF9kLF9mLF8wLF8yLF8wLF8yLF82LF80LF82LF81LF8wLF8yLF8wLF8zLF9lLF9kLF9mLF9kLF8wLF8yLF8wLF8zLF82LF81LF83LF81LF8wLF8zLF8xLF8yLF9mLF9kLF9mLF9jLF8yLF8wLF8yLF8xLF80LF81LF81LF81LF8yLF8xLF8zLF8wLF9kLF9kLF9kLF9jLF80LF82LF80LF82LF8yLF8wLF8yLF8xLF80LF82LF80LF83LF9hLF85LF9iLF85LF82LF80LF82LF80LF8wLF8wLF8wLF8xLF82LF80LF82LF81LF84LF85LF85LF85LF82LF80LF82LF81LF8wLF8xLF8xLF8xLF82LF81LF83LF80LF85LF85LF85LF84LF80LF80LF80LF81LF8wLF8xLF8xLF8xLF80LF81LF81LF80LF85LF85LF85LF84LAorICAgICAgXzQsXzYsXzQsXzcsX2EsX2IsX2IsX2IsX2MsX2YsX2QsX2UsXzMsXzMsXzMsXzIsXzYsXzYsXzYsXzcsX2EsXzksX2IsXzksX2UsX2YsX2YsX2UsXzMsXzEsXzMsXzAsXzYsXzcsXzcsXzYsX2IsXzksX2IsXzgsX2YsX2UsX2UsX2UsXzMsXzAsXzIsXzAsXzYsXzUsXzcsXzQsXzksXzksXzksXzgsX2YsX2MsX2UsX2MsXzEsXzAsXzAsXzAsXzIsXzIsXzIsXzMsX2EsXzksX2IsXzksX2EsX2IsX2IsX2EsXzMsXzEsXzMsXzAsXzIsXzAsXzIsXzEsXzgsXzksXzksXzksX2EsXzksX2IsXzgsXzEsXzEsXzEsXzAsXzIsXzEsXzMsXzAsXzksXzksXzksXzgsX2IsXzgsX2EsXzgsXzEsXzAsXzAsXzAsXzAsXzEsXzEsXzAsXzksXzksXzksXzgsXzksXzgsXzgsXzgsXzEsXzAsXzAsXzAsCisgICAgICBfMCxfMCxfMCxfMSxfYyxfZixfZCxfZixfOCxfOSxfOSxfOCxfNSxfNyxfNSxfNixfMCxfMixfMCxfMyxfZSxfZCxfZixfZCxfOCxfYixfOSxfYSxfNyxfNSxfNyxfNCxfMCxfMyxfMSxfMixfZixfZCxfZixfYyxfOSxfYSxfOCxfYSxfNyxfNCxfNixfNCxfMixfMSxfMyxfMCxfZCxfZCxfZCxfYyxfYixfOCxfYSxfOCxfNSxfNCxfNCxfNCxfNCxfNixfNCxfNyxfZSxfZCxfZixfZCxfYyxfZixfZCxfZSxfNyxfNSxfNyxfNCxfNixfNCxfNixfNSxfYyxfZCxfZCxfZCxfZSxfZCxfZixfYyxfNSxfNSxfNSxfNCxfNixfNSxfNyxfNCxfZCxfZCxfZCxfYyxfZixfYyxfZSxfYyxfNSxfNCxfNCxfNCxfNCxfNSxfNSxfNCxfZCxfZCxfZCxfYyxfZCxfYyxfYyxfYyxfNSxfNCxfNCxfNCwKKyAgICAgIF9jLF9mLF9kLF9lLF83LF83LF83LF82LF81LF82LF80LF82LF83LF82LF82LF82LF9lLF9mLF9mLF9lLF83LF81LF83LF80LF83LF82LF82LF82LF83LF80LF82LF80LF9mLF9lLF9lLF9lLF83LF80LF82LF80LF82LF82LF82LF82LF82LF80LF82LF80LF9mLF9jLF9lLF9jLF81LF80LF80LF80LF82LF80LF82LF80LF80LF80LF80LF80LF9lLF9mLF9mLF9lLF8zLF8xLF8zLF8wLF83LF82LF82LF82LF8zLF8wLF8yLF8wLF9lLF9kLF9mLF9jLF8xLF8xLF8xLF8wLF83LF80LF82LF80LF8xLF8wLF8wLF8wLF9mLF9jLF9lLF9jLF8xLF8wLF8wLF8wLF82LF80LF82LF80LF8wLF8wLF8wLF8wLF9kLF9jLF9jLF9jLF8xLF8wLF8wLF8wLF80LF80LF80LF80LF8wLF8wLF8wLF8wLAorICAgICAgXzQsXzYsXzQsXzcsX2UsX2QsX2YsX2QsX2MsX2YsX2QsX2UsXzcsXzUsXzcsXzQsXzYsXzQsXzYsXzUsX2MsX2QsX2QsX2QsX2UsX2QsX2YsX2MsXzUsXzUsXzUsXzQsXzYsXzUsXzcsXzQsX2QsX2QsX2QsX2MsX2YsX2MsX2UsX2MsXzUsXzQsXzQsXzQsXzQsXzUsXzUsXzQsX2QsX2QsX2QsX2MsX2QsX2MsX2MsX2MsXzUsXzQsXzQsXzQsXzYsXzQsXzYsXzUsXzgsXzksXzksXzksX2UsX2QsX2YsX2MsXzEsXzEsXzEsXzAsXzQsXzQsXzQsXzUsXzgsXzksXzksXzksX2MsX2QsX2QsX2MsXzEsXzEsXzEsXzAsXzQsXzUsXzUsXzQsXzksXzksXzksXzgsX2QsX2MsX2MsX2MsXzEsXzAsXzAsXzAsXzQsXzUsXzUsXzQsXzksXzksXzksXzgsX2QsX2MsX2MsX2MsXzEsXzAsXzAsXzAsCisgICAgICBfZSxfZixfZixfZSxfMyxfMSxfMyxfMCxfNyxfNixfNixfNixfMyxfMCxfMixfMCxfZSxfZCxfZixfYyxfMSxfMSxfMSxfMCxfNyxfNCxfNixfNCxfMSxfMCxfMCxfMCxfZixfYyxfZSxfYyxfMSxfMCxfMCxfMCxfNixfNCxfNixfNCxfMCxfMCxfMCxfMCxfZCxfYyxfYyxfYyxfMSxfMCxfMCxfMCxfNCxfNCxfNCxfNCxfMCxfMCxfMCxfMCxfYSxfOSxfYixfOCxfMSxfMSxfMSxfMCxfMyxfMCxfMixfMCxfMSxfMCxfMCxfMCxfOCxfOSxfOSxfOCxfMSxfMSxfMSxfMCxfMSxfMCxfMCxfMCxfMSxfMCxfMCxfMCxfOSxfOCxfOCxfOCxfMSxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfOSxfOCxfOCxfOCxfMSxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCwKKyAgICAgIF8wLF8wLF8wLF8wLF84LF84LF84LF85LF84LF84LF84LF85LF8wLF8xLF8xLF8xLF8wLF8wLF8wLF8wLF84LF9hLF84LF9iLF84LF84LF84LF85LF8wLF8zLF8xLF8zLF8wLF8wLF8wLF8xLF84LF9iLF85LF9iLF84LF85LF85LF84LF8xLF8zLF8xLF8yLF8wLF8yLF8wLF8zLF9hLF85LF9iLF85LF84LF9iLF85LF9hLF8zLF8xLF8zLF8wLF8wLF8wLF8wLF8wLF9jLF9lLF9jLF9mLF84LF84LF84LF85LF80LF83LF81LF83LF8wLF8yLF8wLF8yLF9lLF9jLF9lLF9kLF84LF9hLF84LF9iLF82LF81LF83LF81LF8wLF8yLF8wLF8zLF9lLF9kLF9mLF9kLF84LF9iLF85LF9hLF83LF81LF83LF80LF8yLF8wLF8yLF8xLF9jLF9kLF9kLF9kLF9hLF85LF9iLF84LF81LF81LF81LF80LAorICAgICAgXzgsXzgsXzgsXzksXzQsXzcsXzUsXzcsXzAsXzEsXzEsXzAsXzUsXzcsXzUsXzYsXzgsX2EsXzgsX2IsXzYsXzcsXzcsXzcsXzAsXzMsXzEsXzIsXzcsXzcsXzcsXzYsXzgsX2IsXzksX2EsXzcsXzcsXzcsXzYsXzEsXzIsXzAsXzIsXzcsXzYsXzYsXzYsX2EsX2IsX2IsX2EsXzcsXzUsXzcsXzQsXzMsXzIsXzIsXzIsXzcsXzQsXzYsXzQsX2MsX2UsX2MsX2YsXzIsXzMsXzMsXzMsXzQsXzcsXzUsXzYsXzMsXzMsXzMsXzIsX2UsX2UsX2UsX2YsXzIsXzEsXzMsXzEsXzYsXzcsXzcsXzYsXzMsXzEsXzMsXzAsX2UsX2YsX2YsX2UsXzMsXzEsXzMsXzAsXzcsXzYsXzYsXzYsXzMsXzAsXzIsXzAsX2UsX2QsX2YsX2MsXzEsXzEsXzEsXzAsXzcsXzQsXzYsXzQsXzEsXzAsXzAsXzAsCisgICAgICBfMCxfMCxfMCxfMCxfYyxfZSxfYyxfZixfOCxfOCxfOCxfOSxfNCxfNyxfNSxfNyxfMCxfMixfMCxfMixfZSxfYyxfZSxfZCxfOCxfYSxfOCxfYixfNixfNSxfNyxfNSxfMCxfMixfMCxfMyxfZSxfZCxfZixfZCxfOCxfYixfOSxfYSxfNyxfNSxfNyxfNCxfMixfMCxfMixfMSxfYyxfZCxfZCxfZCxfYSxfOSxfYixfOCxfNSxfNSxfNSxfNCxfNCxfNixfNCxfNixfYSxfOCxfYSxfOSxfYyxfZSxfYyxfZixfMixfMSxfMyxfMSxfNixfNCxfNixfNCxfOCxfOCxfOCxfOSxfZSxfYyxfZSxfZCxfMCxfMSxfMSxfMSxfNixfNCxfNixfNSxfOCxfOSxfOSxfOSxfZSxfZCxfZixfYyxfMSxfMSxfMSxfMCxfNCxfNCxfNCxfNSxfOCxfOSxfOSxfOSxfYyxfZCxfZCxfYyxfMSxfMSxfMSxfMCwKKyAgICAgIF9jLF9lLF9jLF9mLF8yLF8zLF8zLF8zLF80LF83LF81LF82LF8zLF8zLF8zLF8yLF9lLF9lLF9lLF9mLF8yLF8xLF8zLF8xLF82LF83LF83LF82LF8zLF8xLF8zLF8wLF9lLF9mLF9mLF9lLF8zLF8xLF8zLF8wLF83LF82LF82LF82LF8zLF8wLF8yLF8wLF9lLF9kLF9mLF9jLF8xLF8xLF8xLF8wLF83LF80LF82LF80LF8xLF8wLF8wLF8wLF9hLF9hLF9hLF9iLF8yLF8xLF8zLF8xLF8yLF8zLF8zLF8yLF8zLF8xLF8zLF8wLF9hLF84LF9hLF85LF8wLF8xLF8xLF8xLF8yLF8xLF8zLF8wLF8xLF8xLF8xLF8wLF9hLF85LF9iLF84LF8xLF8xLF8xLF8wLF8zLF8wLF8yLF8wLF8xLF8wLF8wLF8wLF84LF85LF85LF84LF8xLF8xLF8xLF8wLF8xLF8wLF8wLF8wLF8xLF8wLF8wLF8wLAorICAgICAgXzgsXzgsXzgsXzksXzQsXzcsXzUsXzcsXzAsXzEsXzEsXzAsXzUsXzcsXzUsXzYsXzgsX2EsXzgsX2IsXzYsXzUsXzcsXzUsXzAsXzMsXzEsXzIsXzcsXzUsXzcsXzQsXzgsX2IsXzksX2EsXzcsXzUsXzcsXzQsXzEsXzIsXzAsXzIsXzcsXzQsXzYsXzQsX2EsXzksX2IsXzgsXzUsXzUsXzUsXzQsXzMsXzAsXzIsXzAsXzUsXzQsXzQsXzQsX2MsX2UsX2MsX2YsXzYsXzUsXzcsXzUsXzQsXzcsXzUsXzYsXzcsXzUsXzcsXzQsX2UsX2MsX2UsX2QsXzQsXzUsXzUsXzUsXzYsXzUsXzcsXzQsXzUsXzUsXzUsXzQsX2UsX2QsX2YsX2MsXzUsXzUsXzUsXzQsXzcsXzQsXzYsXzQsXzUsXzQsXzQsXzQsX2MsX2QsX2QsX2MsXzUsXzUsXzUsXzQsXzUsXzQsXzQsXzQsXzUsXzQsXzQsXzQsCisgICAgICBfNCxfNyxfNSxfNixfNyxfNyxfNyxfNixfNSxfNixfNCxfNixfNyxfNixfNixfNixfNixfNyxfNyxfNixfNyxfNSxfNyxfNCxfNyxfNixfNixfNixfNyxfNCxfNixfNCxfNyxfNixfNixfNixfNyxfNCxfNixfNCxfNixfNixfNixfNixfNixfNCxfNixfNCxfNyxfNCxfNixfNCxfNSxfNCxfNCxfNCxfNixfNCxfNixfNCxfNCxfNCxfNCxfNCxfNixfNyxfNyxfNixfMyxfMSxfMyxfMCxfNyxfNixfNixfNixfMyxfMCxfMixfMCxfNixfNSxfNyxfNCxfMSxfMSxfMSxfMCxfNyxfNCxfNixfNCxfMSxfMCxfMCxfMCxfNyxfNCxfNixfNCxfMSxfMCxfMCxfMCxfNixfNCxfNixfNCxfMCxfMCxfMCxfMCxfNSxfNCxfNCxfNCxfMSxfMCxfMCxfMCxfNCxfNCxfNCxfNCxfMCxfMCxfMCxfMCwKKyAgICAgIF9jLF9lLF9jLF9mLF82LF81LF83LF81LF80LF83LF81LF82LF83LF81LF83LF80LF9lLF9jLF9lLF9kLF80LF81LF81LF81LF82LF81LF83LF80LF81LF81LF81LF80LF9lLF9kLF9mLF9jLF81LF81LF81LF80LF83LF80LF82LF80LF81LF80LF80LF80LF9jLF9kLF9kLF9jLF81LF81LF81LF80LF81LF80LF80LF80LF81LF80LF80LF80LF9lLF9jLF9lLF9kLF8wLF8xLF8xLF8xLF82LF81LF83LF80LF8xLF8xLF8xLF8wLF9jLF9jLF9jLF9kLF8wLF8xLF8xLF8xLF80LF81LF81LF80LF8xLF8xLF8xLF8wLF9jLF9kLF9kLF9jLF8xLF8xLF8xLF8wLF81LF80LF80LF80LF8xLF8wLF8wLF8wLF9jLF9kLF9kLF9jLF8xLF8xLF8xLF8wLF81LF80LF80LF80LF8xLF8wLF8wLF8wLAorICAgICAgXzYsXzcsXzcsXzYsXzMsXzEsXzMsXzAsXzcsXzYsXzYsXzYsXzMsXzAsXzIsXzAsXzYsXzUsXzcsXzQsXzEsXzEsXzEsXzAsXzcsXzQsXzYsXzQsXzEsXzAsXzAsXzAsXzcsXzQsXzYsXzQsXzEsXzAsXzAsXzAsXzYsXzQsXzYsXzQsXzAsXzAsXzAsXzAsXzUsXzQsXzQsXzQsXzEsXzAsXzAsXzAsXzQsXzQsXzQsXzQsXzAsXzAsXzAsXzAsXzIsXzEsXzMsXzAsXzEsXzEsXzEsXzAsXzMsXzAsXzIsXzAsXzEsXzAsXzAsXzAsXzAsXzEsXzEsXzAsXzEsXzEsXzEsXzAsXzEsXzAsXzAsXzAsXzEsXzAsXzAsXzAsXzEsXzAsXzAsXzAsXzEsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzEsXzAsXzAsXzAsXzEsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsCisgICAgICBfMCxfMCxfMCxfMCxfYyxfYyxfYyxfZCxfOCxfOCxfOCxfOSxfNCxfNSxfNSxfNSxfMCxfMCxfMCxfMCxfYyxfZSxfYyxfZixfOCxfOCxfOCxfOSxfNCxfNyxfNSxfNyxfMCxfMCxfMCxfMSxfYyxfZixfZCxfZixfOCxfOSxfOSxfOCxfNSxfNyxfNSxfNixfMCxfMixfMCxfMyxfZSxfZCxfZixfZCxfOCxfYixfOSxfYSxfNyxfNSxfNyxfNCxfNCxfNCxfNCxfNCxfOCxfYSxfOCxfYixfYyxfYyxfYyxfZCxfMCxfMyxfMSxfMyxfNCxfNixfNCxfNixfYSxfOCxfYSxfOSxfYyxfZSxfYyxfZixfMixfMSxfMyxfMSxfNCxfNixfNCxfNyxfYSxfOSxfYixfOSxfYyxfZixfZCxfZSxfMyxfMSxfMyxfMCxfNixfNCxfNixfNSxfOCxfOSxfOSxfOSxfZSxfZCxfZixfYyxfMSxfMSxfMSxfMCwKKyAgICAgIF9jLF9jLF9jLF9kLF8wLF8zLF8xLF8zLF80LF81LF81LF80LF8xLF8zLF8xLF8yLF9jLF9lLF9jLF9mLF8yLF8zLF8zLF8zLF80LF83LF81LF82LF8zLF8zLF8zLF8yLF9jLF9mLF9kLF9lLF8zLF8zLF8zLF8yLF81LF82LF80LF82LF8zLF8yLF8yLF8yLF9lLF9mLF9mLF9lLF8zLF8xLF8zLF8wLF83LF82LF82LF82LF8zLF8wLF8yLF8wLF84LF9hLF84LF9iLF8yLF8zLF8zLF8zLF8wLF8zLF8xLF8yLF8zLF8zLF8zLF8yLF9hLF9hLF9hLF9iLF8yLF8xLF8zLF8xLF8yLF8zLF8zLF8yLF8zLF8xLF8zLF8wLF9hLF9iLF9iLF9hLF8zLF8xLF8zLF8wLF8zLF8yLF8yLF8yLF8zLF8wLF8yLF8wLF9hLF85LF9iLF84LF8xLF8xLF8xLF8wLF8zLF8wLF8yLF8wLF8xLF8wLF8wLF8wLAorICAgICAgXzQsXzQsXzQsXzQsXzgsX2EsXzgsX2IsX2MsX2MsX2MsX2QsXzAsXzMsXzEsXzMsXzQsXzYsXzQsXzYsX2EsXzgsX2EsXzksX2MsX2UsX2MsX2YsXzIsXzEsXzMsXzEsXzQsXzYsXzQsXzcsX2EsXzksX2IsXzksX2MsX2YsX2QsX2UsXzMsXzEsXzMsXzAsXzYsXzQsXzYsXzUsXzgsXzksXzksXzksX2UsX2QsX2YsX2MsXzEsXzEsXzEsXzAsXzAsXzIsXzAsXzIsX2EsXzgsX2EsXzksXzgsX2EsXzgsX2IsXzIsXzEsXzMsXzEsXzIsXzAsXzIsXzAsXzgsXzgsXzgsXzksX2EsXzgsX2EsXzksXzAsXzEsXzEsXzEsXzIsXzAsXzIsXzEsXzgsXzksXzksXzksX2EsXzksX2IsXzgsXzEsXzEsXzEsXzAsXzAsXzAsXzAsXzEsXzgsXzksXzksXzksXzgsXzksXzksXzgsXzEsXzEsXzEsXzAsCisgICAgICBfOCxfYSxfOCxfYixfMixfMyxfMyxfMyxfMCxfMyxfMSxfMixfMyxfMyxfMyxfMixfYSxfYSxfYSxfYixfMixfMSxfMyxfMSxfMixfMyxfMyxfMixfMyxfMSxfMyxfMCxfYSxfYixfYixfYSxfMyxfMSxfMyxfMCxfMyxfMixfMixfMixfMyxfMCxfMixfMCxfYSxfOSxfYixfOCxfMSxfMSxfMSxfMCxfMyxfMCxfMixfMCxfMSxfMCxfMCxfMCxfYSxfYSxfYSxfYixfMixfMSxfMyxfMSxfMixfMyxfMyxfMixfMyxfMSxfMyxfMCxfYSxfOCxfYSxfOSxfMCxfMSxfMSxfMSxfMixfMSxfMyxfMCxfMSxfMSxfMSxfMCxfYSxfOSxfYixfOCxfMSxfMSxfMSxfMCxfMyxfMCxfMixfMCxfMSxfMCxfMCxfMCxfOCxfOSxfOSxfOCxfMSxfMSxfMSxfMCxfMSxfMCxfMCxfMCxfMSxfMCxfMCxfMCwKKyAgICAgIF9jLF9jLF9jLF9kLF80LF83LF81LF83LF80LF81LF81LF80LF81LF83LF81LF82LF9jLF9lLF9jLF9mLF82LF81LF83LF81LF80LF83LF81LF82LF83LF81LF83LF80LF9jLF9mLF9kLF9lLF83LF81LF83LF80LF81LF82LF80LF82LF83LF80LF82LF80LF9lLF9kLF9mLF9jLF81LF81LF81LF80LF83LF80LF82LF80LF81LF80LF80LF80LF9jLF9lLF9jLF9mLF8yLF8xLF8zLF8xLF80LF83LF81LF82LF8zLF8xLF8zLF8wLF9lLF9jLF9lLF9kLF8wLF8xLF8xLF8xLF82LF81LF83LF80LF8xLF8xLF8xLF8wLF9lLF9kLF9mLF9jLF8xLF8xLF8xLF8wLF83LF80LF82LF80LF8xLF8wLF8wLF8wLF9jLF9kLF9kLF9jLF8xLF8xLF8xLF8wLF81LF80LF80LF80LF8xLF8wLF8wLF8wLAorICAgICAgXzQsXzcsXzUsXzYsXzMsXzMsXzMsXzIsXzUsXzYsXzQsXzYsXzMsXzIsXzIsXzIsXzYsXzcsXzcsXzYsXzMsXzEsXzMsXzAsXzcsXzYsXzYsXzYsXzMsXzAsXzIsXzAsXzcsXzYsXzYsXzYsXzMsXzAsXzIsXzAsXzYsXzYsXzYsXzYsXzIsXzAsXzIsXzAsXzcsXzQsXzYsXzQsXzEsXzAsXzAsXzAsXzYsXzQsXzYsXzQsXzAsXzAsXzAsXzAsXzIsXzMsXzMsXzIsXzMsXzEsXzMsXzAsXzMsXzIsXzIsXzIsXzMsXzAsXzIsXzAsXzIsXzEsXzMsXzAsXzEsXzEsXzEsXzAsXzMsXzAsXzIsXzAsXzEsXzAsXzAsXzAsXzMsXzAsXzIsXzAsXzEsXzAsXzAsXzAsXzIsXzAsXzIsXzAsXzAsXzAsXzAsXzAsXzEsXzAsXzAsXzAsXzEsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsCisgICAgICBfYyxfZSxfYyxfZixfMixfMSxfMyxfMSxfNCxfNyxfNSxfNixfMyxfMSxfMyxfMCxfZSxfYyxfZSxfZCxfMCxfMSxfMSxfMSxfNixfNSxfNyxfNCxfMSxfMSxfMSxfMCxfZSxfZCxfZixfYyxfMSxfMSxfMSxfMCxfNyxfNCxfNixfNCxfMSxfMCxfMCxfMCxfYyxfZCxfZCxfYyxfMSxfMSxfMSxfMCxfNSxfNCxfNCxfNCxfMSxfMCxfMCxfMCxfYSxfOCxfYSxfOSxfMCxfMSxfMSxfMSxfMixfMSxfMyxfMCxfMSxfMSxfMSxfMCxfOCxfOCxfOCxfOSxfMCxfMSxfMSxfMSxfMCxfMSxfMSxfMCxfMSxfMSxfMSxfMCxfOCxfOSxfOSxfOCxfMSxfMSxfMSxfMCxfMSxfMCxfMCxfMCxfMSxfMCxfMCxfMCxfOCxfOSxfOSxfOCxfMSxfMSxfMSxfMCxfMSxfMCxfMCxfMCxfMSxfMCxfMCxfMCwKKyAgICAgIF8yLF8zLF8zLF8yLF8zLF8xLF8zLF8wLF8zLF8yLF8yLF8yLF8zLF8wLF8yLF8wLF8yLF8xLF8zLF8wLF8xLF8xLF8xLF8wLF8zLF8wLF8yLF8wLF8xLF8wLF8wLF8wLF8zLF8wLF8yLF8wLF8xLF8wLF8wLF8wLF8yLF8wLF8yLF8wLF8wLF8wLF8wLF8wLF8xLF8wLF8wLF8wLF8xLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8yLF8xLF8zLF8wLF8xLF8xLF8xLF8wLF8zLF8wLF8yLF8wLF8xLF8wLF8wLF8wLF8wLF8xLF8xLF8wLF8xLF8xLF8xLF8wLF8xLF8wLF8wLF8wLF8xLF8wLF8wLF8wLF8xLF8wLF8wLF8wLF8xLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8xLF8wLF8wLF8wLF8xLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLAorICAgICAgXzAsXzAsXzAsXzEsXzgsX2IsXzksX2IsXzgsXzksXzksXzgsXzksX2IsXzksX2EsXzAsXzIsXzAsXzMsX2EsXzksX2IsXzksXzgsX2IsXzksX2EsX2IsXzksX2IsXzgsXzAsXzMsXzEsXzIsX2IsXzksX2IsXzgsXzksX2EsXzgsX2EsX2IsXzgsX2EsXzgsXzIsXzEsXzMsXzAsXzksXzksXzksXzgsX2IsXzgsX2EsXzgsXzksXzgsXzgsXzgsXzAsXzIsXzAsXzMsX2UsX2QsX2YsX2QsXzgsX2IsXzksX2EsX2YsX2QsX2YsX2MsXzIsXzAsXzIsXzEsX2MsX2QsX2QsX2QsX2EsXzksX2IsXzgsX2QsX2QsX2QsX2MsXzIsXzEsXzMsXzAsX2QsX2QsX2QsX2MsX2IsXzgsX2EsXzgsX2QsX2MsX2MsX2MsXzAsXzEsXzEsXzAsX2QsX2QsX2QsX2MsXzksXzgsXzgsXzgsX2QsX2MsX2MsX2MsCisgICAgICBfOCxfYixfOSxfYSxfZixfZixfZixfZSxfOSxfYSxfOCxfYSxfNyxfNixfNixfNixfYSxfYixfYixfYSxfZixfZCxfZixfYyxfYixfYSxfYSxfYSxfNyxfNCxfNixfNCxfYixfYSxfYSxfYSxfZixfYyxfZSxfYyxfYSxfYSxfYSxfYSxfNixfNCxfNixfNCxfYixfOCxfYSxfOCxfZCxfYyxfYyxfYyxfYSxfOCxfYSxfOCxfNCxfNCxfNCxfNCxfZSxfZixfZixfZSxfYixfOSxfYixfOCxfZixfZSxfZSxfZSxfMyxfMCxfMixfMCxfZSxfZCxfZixfYyxfOSxfOSxfOSxfOCxfZixfYyxfZSxfYyxfMSxfMCxfMCxfMCxfZixfYyxfZSxfYyxfOSxfOCxfOCxfOCxfZSxfYyxfZSxfYyxfMCxfMCxfMCxfMCxfZCxfYyxfYyxfYyxfOSxfOCxfOCxfOCxfYyxfYyxfYyxfYyxfMCxfMCxfMCxfMCwKKyAgICAgIF8wLF8yLF8wLF8zLF9lLF9kLF9mLF9kLF84LF9iLF85LF9hLF9mLF9kLF9mLF9jLF8yLF8wLF8yLF8xLF9jLF9kLF9kLF9kLF9hLF85LF9iLF84LF9kLF9kLF9kLF9jLF8yLF8xLF8zLF8wLF9kLF9kLF9kLF9jLF9iLF84LF9hLF84LF9kLF9jLF9jLF9jLF8wLF8xLF8xLF8wLF9kLF9kLF9kLF9jLF85LF84LF84LF84LF9kLF9jLF9jLF9jLF82LF80LF82LF81LF84LF85LF85LF85LF9lLF9kLF9mLF9jLF85LF85LF85LF84LF80LF80LF80LF81LF84LF85LF85LF85LF9jLF9kLF9kLF9jLF85LF85LF85LF84LF80LF81LF81LF80LF85LF85LF85LF84LF9kLF9jLF9jLF9jLF85LF84LF84LF84LF80LF81LF81LF80LF85LF85LF85LF84LF9kLF9jLF9jLF9jLF85LF84LF84LF84LAorICAgICAgX2UsX2YsX2YsX2UsX2IsXzksX2IsXzgsX2YsX2UsX2UsX2UsXzMsXzAsXzIsXzAsX2UsX2QsX2YsX2MsXzksXzksXzksXzgsX2YsX2MsX2UsX2MsXzEsXzAsXzAsXzAsX2YsX2MsX2UsX2MsXzksXzgsXzgsXzgsX2UsX2MsX2UsX2MsXzAsXzAsXzAsXzAsX2QsX2MsX2MsX2MsXzksXzgsXzgsXzgsX2MsX2MsX2MsX2MsXzAsXzAsXzAsXzAsX2EsXzksX2IsXzgsXzksXzksXzksXzgsX2IsXzgsX2EsXzgsXzEsXzAsXzAsXzAsXzgsXzksXzksXzgsXzksXzksXzksXzgsXzksXzgsXzgsXzgsXzEsXzAsXzAsXzAsXzksXzgsXzgsXzgsXzksXzgsXzgsXzgsXzgsXzgsXzgsXzgsXzAsXzAsXzAsXzAsXzksXzgsXzgsXzgsXzksXzgsXzgsXzgsXzgsXzgsXzgsXzgsXzAsXzAsXzAsXzAsCisgICAgICBfOCxfYixfOSxfYSxfZixfZCxfZixfYyxfOSxfYSxfOCxfYSxfNyxfNCxfNixfNCxfYSxfOSxfYixfOCxfZCxfZCxfZCxfYyxfYixfOCxfYSxfOCxfNSxfNCxfNCxfNCxfYixfOCxfYSxfOCxfZCxfYyxfYyxfYyxfYSxfOCxfYSxfOCxfNCxfNCxfNCxfNCxfOSxfOCxfOCxfOCxfZCxfYyxfYyxfYyxfOCxfOCxfOCxfOCxfNCxfNCxfNCxfNCxfZSxfZCxfZixfYyxfZCxfZCxfZCxfYyxfZixfYyxfZSxfYyxfNSxfNCxfNCxfNCxfYyxfZCxfZCxfYyxfZCxfZCxfZCxfYyxfZCxfYyxfYyxfYyxfNSxfNCxfNCxfNCxfZCxfYyxfYyxfYyxfZCxfYyxfYyxfYyxfYyxfYyxfYyxfYyxfNCxfNCxfNCxfNCxfZCxfYyxfYyxfYyxfZCxfYyxfYyxfYyxfYyxfYyxfYyxfYyxfNCxfNCxfNCxfNCwKKyAgICAgIF9mLF9lLF9lLF9lLF83LF80LF82LF80LF82LF82LF82LF82LF82LF80LF82LF80LF9mLF9jLF9lLF9jLF81LF80LF80LF80LF82LF80LF82LF80LF80LF80LF80LF80LF9lLF9jLF9lLF9jLF80LF80LF80LF80LF82LF80LF82LF80LF80LF80LF80LF80LF9jLF9jLF9jLF9jLF80LF80LF80LF80LF80LF80LF80LF80LF80LF80LF80LF80LF9mLF9jLF9lLF9jLF8xLF8wLF8wLF8wLF82LF80LF82LF80LF8wLF8wLF8wLF8wLF9kLF9jLF9jLF9jLF8xLF8wLF8wLF8wLF80LF80LF80LF80LF8wLF8wLF8wLF8wLF9jLF9jLF9jLF9jLF8wLF8wLF8wLF8wLF80LF80LF80LF80LF8wLF8wLF8wLF8wLF9jLF9jLF9jLF9jLF8wLF8wLF8wLF8wLF80LF80LF80LF80LF8wLF8wLF8wLF8wLAorICAgICAgX2UsX2QsX2YsX2MsX2QsX2QsX2QsX2MsX2YsX2MsX2UsX2MsXzUsXzQsXzQsXzQsX2MsX2QsX2QsX2MsX2QsX2QsX2QsX2MsX2QsX2MsX2MsX2MsXzUsXzQsXzQsXzQsX2QsX2MsX2MsX2MsX2QsX2MsX2MsX2MsX2MsX2MsX2MsX2MsXzQsXzQsXzQsXzQsX2QsX2MsX2MsX2MsX2QsX2MsX2MsX2MsX2MsX2MsX2MsX2MsXzQsXzQsXzQsXzQsX2MsX2QsX2QsX2MsXzksXzksXzksXzgsX2QsX2MsX2MsX2MsXzEsXzAsXzAsXzAsX2MsX2QsX2QsX2MsXzksXzksXzksXzgsX2QsX2MsX2MsX2MsXzEsXzAsXzAsXzAsX2QsX2MsX2MsX2MsXzksXzgsXzgsXzgsX2MsX2MsX2MsX2MsXzAsXzAsXzAsXzAsX2QsX2MsX2MsX2MsXzksXzgsXzgsXzgsX2MsX2MsX2MsX2MsXzAsXzAsXzAsXzAsCisgICAgICBfZixfYyxfZSxfYyxfMSxfMCxfMCxfMCxfNixfNCxfNixfNCxfMCxfMCxfMCxfMCxfZCxfYyxfYyxfYyxfMSxfMCxfMCxfMCxfNCxfNCxfNCxfNCxfMCxfMCxfMCxfMCxfYyxfYyxfYyxfYyxfMCxfMCxfMCxfMCxfNCxfNCxfNCxfNCxfMCxfMCxfMCxfMCxfYyxfYyxfYyxfYyxfMCxfMCxfMCxfMCxfNCxfNCxfNCxfNCxfMCxfMCxfMCxfMCxfOSxfOCxfOCxfOCxfMSxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfOSxfOCxfOCxfOCxfMSxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfOCxfOCxfOCxfOCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfOCxfOCxfOCxfOCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCwKKyAgICAgIF8wLF8wLF8wLF8xLF9jLF9mLF9kLF9mLF84LF85LF85LF84LF9kLF9mLF9kLF9lLF8wLF8yLF8wLF8zLF9lLF9kLF9mLF9kLF84LF9iLF85LF9hLF9mLF9kLF9mLF9jLF8wLF8zLF8xLF8yLF9mLF9kLF9mLF9jLF85LF9hLF84LF9hLF9mLF9jLF9lLF9jLF8yLF8xLF8zLF8wLF9kLF9kLF9kLF9jLF9iLF84LF9hLF84LF9kLF9jLF9jLF9jLF80LF82LF80LF83LF9hLF85LF9iLF85LF9jLF9mLF9kLF9lLF9iLF85LF9iLF84LF82LF80LF82LF81LF84LF85LF85LF85LF9lLF9kLF9mLF9jLF85LF85LF85LF84LF82LF81LF83LF80LF85LF85LF85LF84LF9mLF9jLF9lLF9jLF85LF84LF84LF84LF80LF81LF81LF80LF85LF85LF85LF84LF9kLF9jLF9jLF9jLF85LF84LF84LF84LAorICAgICAgX2MsX2YsX2QsX2UsX2IsX2IsX2IsX2EsX2QsX2UsX2MsX2UsXzMsXzIsXzIsXzIsX2UsX2YsX2YsX2UsX2IsXzksX2IsXzgsX2YsX2UsX2UsX2UsXzMsXzAsXzIsXzAsX2YsX2UsX2UsX2UsX2IsXzgsX2EsXzgsX2UsX2UsX2UsX2UsXzIsXzAsXzIsXzAsX2YsX2MsX2UsX2MsXzksXzgsXzgsXzgsX2UsX2MsX2UsX2MsXzAsXzAsXzAsXzAsX2EsX2IsX2IsX2EsX2IsXzksX2IsXzgsX2IsX2EsX2EsX2EsXzMsXzAsXzIsXzAsX2EsXzksX2IsXzgsXzksXzksXzksXzgsX2IsXzgsX2EsXzgsXzEsXzAsXzAsXzAsX2IsXzgsX2EsXzgsXzksXzgsXzgsXzgsX2EsXzgsX2EsXzgsXzAsXzAsXzAsXzAsXzksXzgsXzgsXzgsXzksXzgsXzgsXzgsXzgsXzgsXzgsXzgsXzAsXzAsXzAsXzAsCisgICAgICBfNCxfNixfNCxfNyxfYSxfOSxfYixfOSxfYyxfZixfZCxfZSxfYixfOSxfYixfOCxfNixfNCxfNixfNSxfOCxfOSxfOSxfOSxfZSxfZCxfZixfYyxfOSxfOSxfOSxfOCxfNixfNSxfNyxfNCxfOSxfOSxfOSxfOCxfZixfYyxfZSxfYyxfOSxfOCxfOCxfOCxfNCxfNSxfNSxfNCxfOSxfOSxfOSxfOCxfZCxfYyxfYyxfYyxfOSxfOCxfOCxfOCxfMixfMCxfMixfMSxfOCxfOSxfOSxfOSxfYSxfOSxfYixfOCxfOSxfOSxfOSxfOCxfMCxfMCxfMCxfMSxfOCxfOSxfOSxfOSxfOCxfOSxfOSxfOCxfOSxfOSxfOSxfOCxfMCxfMSxfMSxfMCxfOSxfOSxfOSxfOCxfOSxfOCxfOCxfOCxfOSxfOCxfOCxfOCxfMCxfMSxfMSxfMCxfOSxfOSxfOSxfOCxfOSxfOCxfOCxfOCxfOSxfOCxfOCxfOCwKKyAgICAgIF9hLF9iLF9iLF9hLF9iLF85LF9iLF84LF9iLF9hLF9hLF9hLF8zLF8wLF8yLF8wLF9hLF85LF9iLF84LF85LF85LF85LF84LF9iLF84LF9hLF84LF8xLF8wLF8wLF8wLF9iLF84LF9hLF84LF85LF84LF84LF84LF9hLF84LF9hLF84LF8wLF8wLF8wLF8wLF85LF84LF84LF84LF85LF84LF84LF84LF84LF84LF84LF84LF8wLF8wLF8wLF8wLF9hLF85LF9iLF84LF85LF85LF85LF84LF9iLF84LF9hLF84LF8xLF8wLF8wLF8wLF84LF85LF85LF84LF85LF85LF85LF84LF85LF84LF84LF84LF8xLF8wLF8wLF8wLF85LF84LF84LF84LF85LF84LF84LF84LF84LF84LF84LF84LF8wLF8wLF8wLF8wLF85LF84LF84LF84LF85LF84LF84LF84LF84LF84LF84LF84LF8wLF8wLF8wLF8wLAorICAgICAgX2MsX2YsX2QsX2UsX2YsX2QsX2YsX2MsX2QsX2UsX2MsX2UsXzcsXzQsXzYsXzQsX2UsX2QsX2YsX2MsX2QsX2QsX2QsX2MsX2YsX2MsX2UsX2MsXzUsXzQsXzQsXzQsX2YsX2MsX2UsX2MsX2QsX2MsX2MsX2MsX2UsX2MsX2UsX2MsXzQsXzQsXzQsXzQsX2QsX2MsX2MsX2MsX2QsX2MsX2MsX2MsX2MsX2MsX2MsX2MsXzQsXzQsXzQsXzQsX2UsX2QsX2YsX2MsXzksXzksXzksXzgsX2YsX2MsX2UsX2MsXzEsXzAsXzAsXzAsX2MsX2QsX2QsX2MsXzksXzksXzksXzgsX2QsX2MsX2MsX2MsXzEsXzAsXzAsXzAsX2QsX2MsX2MsX2MsXzksXzgsXzgsXzgsX2MsX2MsX2MsX2MsXzAsXzAsXzAsXzAsX2QsX2MsX2MsX2MsXzksXzgsXzgsXzgsX2MsX2MsX2MsX2MsXzAsXzAsXzAsXzAsCisgICAgICBfZixfZSxfZSxfZSxfMyxfMCxfMixfMCxfNixfNixfNixfNixfMixfMCxfMixfMCxfZixfYyxfZSxfYyxfMSxfMCxfMCxfMCxfNixfNCxfNixfNCxfMCxfMCxfMCxfMCxfZSxfYyxfZSxfYyxfMCxfMCxfMCxfMCxfNixfNCxfNixfNCxfMCxfMCxfMCxfMCxfYyxfYyxfYyxfYyxfMCxfMCxfMCxfMCxfNCxfNCxfNCxfNCxfMCxfMCxfMCxfMCxfYixfOCxfYSxfOCxfMSxfMCxfMCxfMCxfMixfMCxfMixfMCxfMCxfMCxfMCxfMCxfOSxfOCxfOCxfOCxfMSxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfOCxfOCxfOCxfOCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfOCxfOCxfOCxfOCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCwKKyAgICAgIF9lLF9kLF9mLF9jLF85LF85LF85LF84LF9mLF9jLF9lLF9jLF8xLF8wLF8wLF8wLF9jLF9kLF9kLF9jLF85LF85LF85LF84LF9kLF9jLF9jLF9jLF8xLF8wLF8wLF8wLF9kLF9jLF9jLF9jLF85LF84LF84LF84LF9jLF9jLF9jLF9jLF8wLF8wLF8wLF8wLF9kLF9jLF9jLF9jLF85LF84LF84LF84LF9jLF9jLF9jLF9jLF8wLF8wLF8wLF8wLF84LF85LF85LF84LF85LF85LF85LF84LF85LF84LF84LF84LF8xLF8wLF8wLF8wLF84LF85LF85LF84LF85LF85LF85LF84LF85LF84LF84LF84LF8xLF8wLF8wLF8wLF85LF84LF84LF84LF85LF84LF84LF84LF84LF84LF84LF84LF8wLF8wLF8wLF8wLF85LF84LF84LF84LF85LF84LF84LF84LF84LF84LF84LF84LF8wLF8wLF8wLF8wLAorICAgICAgX2IsXzgsX2EsXzgsXzEsXzAsXzAsXzAsXzIsXzAsXzIsXzAsXzAsXzAsXzAsXzAsXzksXzgsXzgsXzgsXzEsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzgsXzgsXzgsXzgsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzgsXzgsXzgsXzgsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzksXzgsXzgsXzgsXzEsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzksXzgsXzgsXzgsXzEsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzgsXzgsXzgsXzgsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzgsXzgsXzgsXzgsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsCisgICAgICBfOCxfOCxfOCxfOSxfYyxfZixfZCxfZixfOCxfOSxfOSxfOCxfNSxfNyxfNSxfNixfOCxfYSxfOCxfYixfZSxfZCxfZixfZCxfOCxfYixfOSxfYSxfNyxfNSxfNyxfNCxfOCxfYixfOSxfYSxfZixfZCxfZixfYyxfOSxfYSxfOCxfYSxfNyxfNCxfNixfNCxfYSxfOSxfYixfOCxfZCxfZCxfZCxfYyxfYixfOCxfYSxfOCxfNSxfNCxfNCxfNCxfYyxfZSxfYyxfZixfYSxfOSxfYixfOSxfYyxfZixfZCxfZSxfMyxfMSxfMyxfMCxfZSxfYyxfZSxfZCxfOCxfOSxfOSxfOSxfZSxfZCxfZixfYyxfMSxfMSxfMSxfMCxfZSxfZCxfZixfYyxfOSxfOSxfOSxfOCxfZixfYyxfZSxfYyxfMSxfMCxfMCxfMCxfYyxfZCxfZCxfYyxfOSxfOSxfOSxfOCxfZCxfYyxfYyxfYyxfMSxfMCxfMCxfMCwKKyAgICAgIF9jLF9mLF9kLF9lLF8zLF8zLF8zLF8yLF81LF82LF80LF82LF8zLF8yLF8yLF8yLF9lLF9mLF9mLF9lLF8zLF8xLF8zLF8wLF83LF82LF82LF82LF8zLF8wLF8yLF8wLF9mLF9lLF9lLF9lLF8zLF8wLF8yLF8wLF82LF82LF82LF82LF8yLF8wLF8yLF8wLF9mLF9jLF9lLF9jLF8xLF8wLF8wLF8wLF82LF80LF82LF80LF8wLF8wLF8wLF8wLF9hLF9iLF9iLF9hLF8zLF8xLF8zLF8wLF8zLF8yLF8yLF8yLF8zLF8wLF8yLF8wLF9hLF85LF9iLF84LF8xLF8xLF8xLF8wLF8zLF8wLF8yLF8wLF8xLF8wLF8wLF8wLF9iLF84LF9hLF84LF8xLF8wLF8wLF8wLF8yLF8wLF8yLF8wLF8wLF8wLF8wLF8wLF85LF84LF84LF84LF8xLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLAorICAgICAgX2MsX2UsX2MsX2YsX2EsXzksX2IsXzksX2MsX2YsX2QsX2UsXzMsXzEsXzMsXzAsX2UsX2MsX2UsX2QsXzgsXzksXzksXzksX2UsX2QsX2YsX2MsXzEsXzEsXzEsXzAsX2UsX2QsX2YsX2MsXzksXzksXzksXzgsX2YsX2MsX2UsX2MsXzEsXzAsXzAsXzAsX2MsX2QsX2QsX2MsXzksXzksXzksXzgsX2QsX2MsX2MsX2MsXzEsXzAsXzAsXzAsX2EsXzgsX2EsXzksXzgsXzksXzksXzksX2EsXzksX2IsXzgsXzEsXzEsXzEsXzAsXzgsXzgsXzgsXzksXzgsXzksXzksXzksXzgsXzksXzksXzgsXzEsXzEsXzEsXzAsXzgsXzksXzksXzgsXzksXzksXzksXzgsXzksXzgsXzgsXzgsXzEsXzAsXzAsXzAsXzgsXzksXzksXzgsXzksXzksXzksXzgsXzksXzgsXzgsXzgsXzEsXzAsXzAsXzAsCisgICAgICBfYSxfYixfYixfYSxfMyxfMSxfMyxfMCxfMyxfMixfMixfMixfMyxfMCxfMixfMCxfYSxfOSxfYixfOCxfMSxfMSxfMSxfMCxfMyxfMCxfMixfMCxfMSxfMCxfMCxfMCxfYixfOCxfYSxfOCxfMSxfMCxfMCxfMCxfMixfMCxfMixfMCxfMCxfMCxfMCxfMCxfOSxfOCxfOCxfOCxfMSxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfYSxfOSxfYixfOCxfMSxfMSxfMSxfMCxfMyxfMCxfMixfMCxfMSxfMCxfMCxfMCxfOCxfOSxfOSxfOCxfMSxfMSxfMSxfMCxfMSxfMCxfMCxfMCxfMSxfMCxfMCxfMCxfOSxfOCxfOCxfOCxfMSxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfOSxfOCxfOCxfOCxfMSxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCwKKyAgICAgIF9jLF9mLF9kLF9lLF83LF81LF83LF80LF81LF82LF80LF82LF83LF80LF82LF80LF9lLF9kLF9mLF9jLF81LF81LF81LF80LF83LF80LF82LF80LF81LF80LF80LF80LF9mLF9jLF9lLF9jLF81LF80LF80LF80LF82LF80LF82LF80LF80LF80LF80LF80LF9kLF9jLF9jLF9jLF81LF80LF80LF80LF80LF80LF80LF80LF80LF80LF80LF80LF9lLF9kLF9mLF9jLF8xLF8xLF8xLF8wLF83LF80LF82LF80LF8xLF8wLF8wLF8wLF9jLF9kLF9kLF9jLF8xLF8xLF8xLF8wLF81LF80LF80LF80LF8xLF8wLF8wLF8wLF9kLF9jLF9jLF9jLF8xLF8wLF8wLF8wLF80LF80LF80LF80LF8wLF8wLF8wLF8wLF9kLF9jLF9jLF9jLF8xLF8wLF8wLF8wLF80LF80LF80LF80LF8wLF8wLF8wLF8wLAorICAgICAgXzcsXzYsXzYsXzYsXzMsXzAsXzIsXzAsXzYsXzYsXzYsXzYsXzIsXzAsXzIsXzAsXzcsXzQsXzYsXzQsXzEsXzAsXzAsXzAsXzYsXzQsXzYsXzQsXzAsXzAsXzAsXzAsXzYsXzQsXzYsXzQsXzAsXzAsXzAsXzAsXzYsXzQsXzYsXzQsXzAsXzAsXzAsXzAsXzQsXzQsXzQsXzQsXzAsXzAsXzAsXzAsXzQsXzQsXzQsXzQsXzAsXzAsXzAsXzAsXzMsXzAsXzIsXzAsXzEsXzAsXzAsXzAsXzIsXzAsXzIsXzAsXzAsXzAsXzAsXzAsXzEsXzAsXzAsXzAsXzEsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsCisgICAgICBfZSxfZCxfZixfYyxfMSxfMSxfMSxfMCxfNyxfNCxfNixfNCxfMSxfMCxfMCxfMCxfYyxfZCxfZCxfYyxfMSxfMSxfMSxfMCxfNSxfNCxfNCxfNCxfMSxfMCxfMCxfMCxfZCxfYyxfYyxfYyxfMSxfMCxfMCxfMCxfNCxfNCxfNCxfNCxfMCxfMCxfMCxfMCxfZCxfYyxfYyxfYyxfMSxfMCxfMCxfMCxfNCxfNCxfNCxfNCxfMCxfMCxfMCxfMCxfOCxfOSxfOSxfOCxfMSxfMSxfMSxfMCxfMSxfMCxfMCxfMCxfMSxfMCxfMCxfMCxfOCxfOSxfOSxfOCxfMSxfMSxfMSxfMCxfMSxfMCxfMCxfMCxfMSxfMCxfMCxfMCxfOSxfOCxfOCxfOCxfMSxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfOSxfOCxfOCxfOCxfMSxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCwKKyAgICAgIF8zLF8wLF8yLF8wLF8xLF8wLF8wLF8wLF8yLF8wLF8yLF8wLF8wLF8wLF8wLF8wLF8xLF8wLF8wLF8wLF8xLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8xLF8wLF8wLF8wLF8xLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8xLF8wLF8wLF8wLF8xLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLAorICAgICAgX2MsX2MsX2MsX2QsXzgsX2IsXzksX2IsX2MsX2QsX2QsX2MsXzEsXzMsXzEsXzIsX2MsX2UsX2MsX2YsX2EsXzksX2IsXzksX2MsX2YsX2QsX2UsXzMsXzEsXzMsXzAsX2MsX2YsX2QsX2UsX2IsXzksX2IsXzgsX2QsX2UsX2MsX2UsXzMsXzAsXzIsXzAsX2UsX2QsX2YsX2MsXzksXzksXzksXzgsX2YsX2MsX2UsX2MsXzEsXzAsXzAsXzAsXzgsX2EsXzgsX2IsX2EsXzksX2IsXzksXzgsX2IsXzksX2EsXzMsXzEsXzMsXzAsX2EsXzgsX2EsXzksXzgsXzksXzksXzksX2EsXzksX2IsXzgsXzEsXzEsXzEsXzAsX2EsXzksX2IsXzgsXzksXzksXzksXzgsX2IsXzgsX2EsXzgsXzEsXzAsXzAsXzAsXzgsXzksXzksXzgsXzksXzksXzksXzgsXzksXzgsXzgsXzgsXzEsXzAsXzAsXzAsCisgICAgICBfOCxfYixfOSxfYSxfMyxfMyxfMyxfMixfMSxfMixfMCxfMixfMyxfMixfMixfMixfYSxfYixfYixfYSxfMyxfMSxfMyxfMCxfMyxfMixfMixfMixfMyxfMCxfMixfMCxfYixfYSxfYSxfYSxfMyxfMCxfMixfMCxfMixfMixfMixfMixfMixfMCxfMixfMCxfYixfOCxfYSxfOCxfMSxfMCxfMCxfMCxfMixfMCxfMixfMCxfMCxfMCxfMCxfMCxfYSxfYixfYixfYSxfMyxfMSxfMyxfMCxfMyxfMixfMixfMixfMyxfMCxfMixfMCxfYSxfOSxfYixfOCxfMSxfMSxfMSxfMCxfMyxfMCxfMixfMCxfMSxfMCxfMCxfMCxfYixfOCxfYSxfOCxfMSxfMCxfMCxfMCxfMixfMCxfMixfMCxfMCxfMCxfMCxfMCxfOSxfOCxfOCxfOCxfMSxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCwKKyAgICAgIF84LF9hLF84LF9iLF9hLF85LF9iLF85LF84LF9iLF85LF9hLF8zLF8xLF8zLF8wLF9hLF84LF9hLF85LF84LF85LF85LF85LF9hLF85LF9iLF84LF8xLF8xLF8xLF8wLF9hLF85LF9iLF84LF85LF85LF85LF84LF9iLF84LF9hLF84LF8xLF8wLF8wLF8wLF84LF85LF85LF84LF85LF85LF85LF84LF85LF84LF84LF84LF8xLF8wLF8wLF8wLF9hLF84LF9hLF85LF84LF85LF85LF85LF9hLF85LF9iLF84LF8xLF8xLF8xLF8wLF84LF84LF84LF85LF84LF85LF85LF85LF84LF85LF85LF84LF8xLF8xLF8xLF8wLF84LF85LF85LF84LF85LF85LF85LF84LF85LF84LF84LF84LF8xLF8wLF8wLF8wLF84LF85LF85LF84LF85LF85LF85LF84LF85LF84LF84LF84LF8xLF8wLF8wLF8wLAorICAgICAgX2EsX2IsX2IsX2EsXzMsXzEsXzMsXzAsXzMsXzIsXzIsXzIsXzMsXzAsXzIsXzAsX2EsXzksX2IsXzgsXzEsXzEsXzEsXzAsXzMsXzAsXzIsXzAsXzEsXzAsXzAsXzAsX2IsXzgsX2EsXzgsXzEsXzAsXzAsXzAsXzIsXzAsXzIsXzAsXzAsXzAsXzAsXzAsXzksXzgsXzgsXzgsXzEsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsX2EsXzksX2IsXzgsXzEsXzEsXzEsXzAsXzMsXzAsXzIsXzAsXzEsXzAsXzAsXzAsXzgsXzksXzksXzgsXzEsXzEsXzEsXzAsXzEsXzAsXzAsXzAsXzEsXzAsXzAsXzAsXzksXzgsXzgsXzgsXzEsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzksXzgsXzgsXzgsXzEsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsCisgICAgICBfYyxfZixfZCxfZSxfMyxfMSxfMyxfMCxfNSxfNixfNCxfNixfMyxfMCxfMixfMCxfZSxfZCxfZixfYyxfMSxfMSxfMSxfMCxfNyxfNCxfNixfNCxfMSxfMCxfMCxfMCxfZixfYyxfZSxfYyxfMSxfMCxfMCxfMCxfNixfNCxfNixfNCxfMCxfMCxfMCxfMCxfZCxfYyxfYyxfYyxfMSxfMCxfMCxfMCxfNCxfNCxfNCxfNCxfMCxfMCxfMCxfMCxfYSxfOSxfYixfOCxfMSxfMSxfMSxfMCxfMyxfMCxfMixfMCxfMSxfMCxfMCxfMCxfOCxfOSxfOSxfOCxfMSxfMSxfMSxfMCxfMSxfMCxfMCxfMCxfMSxfMCxfMCxfMCxfOSxfOCxfOCxfOCxfMSxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfOSxfOCxfOCxfOCxfMSxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCwKKyAgICAgIF8zLF8yLF8yLF8yLF8zLF8wLF8yLF8wLF8yLF8yLF8yLF8yLF8yLF8wLF8yLF8wLF8zLF8wLF8yLF8wLF8xLF8wLF8wLF8wLF8yLF8wLF8yLF8wLF8wLF8wLF8wLF8wLF8yLF8wLF8yLF8wLF8wLF8wLF8wLF8wLF8yLF8wLF8yLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8zLF8wLF8yLF8wLF8xLF8wLF8wLF8wLF8yLF8wLF8yLF8wLF8wLF8wLF8wLF8wLF8xLF8wLF8wLF8wLF8xLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLAorICAgICAgX2EsXzksX2IsXzgsXzEsXzEsXzEsXzAsXzMsXzAsXzIsXzAsXzEsXzAsXzAsXzAsXzgsXzksXzksXzgsXzEsXzEsXzEsXzAsXzEsXzAsXzAsXzAsXzEsXzAsXzAsXzAsXzksXzgsXzgsXzgsXzEsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzksXzgsXzgsXzgsXzEsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzgsXzksXzksXzgsXzEsXzEsXzEsXzAsXzEsXzAsXzAsXzAsXzEsXzAsXzAsXzAsXzgsXzksXzksXzgsXzEsXzEsXzEsXzAsXzEsXzAsXzAsXzAsXzEsXzAsXzAsXzAsXzksXzgsXzgsXzgsXzEsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzksXzgsXzgsXzgsXzEsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsCisgICAgICBfMyxfMCxfMixfMCxfMSxfMCxfMCxfMCxfMixfMCxfMixfMCxfMCxfMCxfMCxfMCxfMSxfMCxfMCxfMCxfMSxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMSxfMCxfMCxfMCxfMSxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMSxfMCxfMCxfMCxfMSxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCwKKyAgICAgIF8wLF8wLF8wLF8xLF84LF85LF85LF85LF84LF85LF85LF84LF8xLF8xLF8xLF8wLF8wLF8wLF8wLF8xLF84LF9iLF85LF9iLF84LF85LF85LF84LF8xLF8zLF8xLF8yLF8wLF8xLF8xLF8wLF85LF9iLF85LF9hLF85LF84LF84LF84LF8xLF8yLF8wLF8yLF8wLF8zLF8xLF8yLF9iLF85LF9iLF84LF85LF9hLF84LF9hLF8zLF8wLF8yLF8wLF8wLF8wLF8wLF8xLF84LF9iLF85LF9iLF84LF85LF85LF84LF8xLF8zLF8xLF8yLF8wLF8yLF8wLF8zLF9hLF85LF9iLF85LF84LF9iLF85LF9hLF8zLF8xLF8zLF8wLF8wLF8zLF8xLF8yLF9iLF85LF9iLF84LF85LF9hLF84LF9hLF8zLF8wLF8yLF8wLF8yLF8xLF8zLF8wLF85LF85LF85LF84LF9iLF84LF9hLF84LF8xLF8wLF8wLF8wLAorICAgICAgXzgsXzksXzksXzgsXzEsXzMsXzEsXzIsXzEsXzAsXzAsXzAsXzEsXzIsXzAsXzIsXzgsX2IsXzksX2EsXzMsXzMsXzMsXzIsXzEsXzIsXzAsXzIsXzMsXzIsXzIsXzIsXzksX2EsXzgsX2EsXzMsXzIsXzIsXzIsXzAsXzIsXzAsXzIsXzIsXzIsXzIsXzIsX2IsX2EsX2EsX2EsXzMsXzAsXzIsXzAsXzIsXzIsXzIsXzIsXzIsXzAsXzIsXzAsXzgsX2IsXzksX2EsXzcsXzcsXzcsXzYsXzEsXzIsXzAsXzIsXzcsXzYsXzYsXzYsX2EsX2IsX2IsX2EsXzcsXzUsXzcsXzQsXzMsXzIsXzIsXzIsXzcsXzQsXzYsXzQsX2IsX2EsX2EsX2EsXzcsXzQsXzYsXzQsXzIsXzIsXzIsXzIsXzYsXzQsXzYsXzQsX2IsXzgsX2EsXzgsXzUsXzQsXzQsXzQsXzIsXzAsXzIsXzAsXzQsXzQsXzQsXzQsCisgICAgICBfMCxfMCxfMCxfMSxfOCxfYixfOSxfYixfOCxfOSxfOSxfOCxfMSxfMyxfMSxfMixfMCxfMixfMCxfMyxfYSxfOSxfYixfOSxfOCxfYixfOSxfYSxfMyxfMSxfMyxfMCxfMCxfMyxfMSxfMixfYixfOSxfYixfOCxfOSxfYSxfOCxfYSxfMyxfMCxfMixfMCxfMixfMSxfMyxfMCxfOSxfOSxfOSxfOCxfYixfOCxfYSxfOCxfMSxfMCxfMCxfMCxfMCxfMixfMCxfMyxfZSxfZCxfZixfZCxfOCxfYixfOSxfYSxfNyxfNSxfNyxfNCxfMixfMCxfMixfMSxfYyxfZCxfZCxfZCxfYSxfOSxfYixfOCxfNSxfNSxfNSxfNCxfMixfMSxfMyxfMCxfZCxfZCxfZCxfYyxfYixfOCxfYSxfOCxfNSxfNCxfNCxfNCxfMCxfMSxfMSxfMCxfZCxfZCxfZCxfYyxfOSxfOCxfOCxfOCxfNSxfNCxfNCxfNCwKKyAgICAgIF84LF9iLF85LF9hLF83LF83LF83LF82LF8xLF8yLF8wLF8yLF83LF82LF82LF82LF9hLF9iLF9iLF9hLF83LF81LF83LF80LF8zLF8yLF8yLF8yLF83LF80LF82LF80LF9iLF9hLF9hLF9hLF83LF80LF82LF80LF8yLF8yLF8yLF8yLF82LF80LF82LF80LF9iLF84LF9hLF84LF81LF80LF80LF80LF8yLF8wLF8yLF8wLF80LF80LF80LF80LF9lLF9mLF9mLF9lLF8zLF8xLF8zLF8wLF83LF82LF82LF82LF8zLF8wLF8yLF8wLF9lLF9kLF9mLF9jLF8xLF8xLF8xLF8wLF83LF80LF82LF80LF8xLF8wLF8wLF8wLF9mLF9jLF9lLF9jLF8xLF8wLF8wLF8wLF82LF80LF82LF80LF8wLF8wLF8wLF8wLF9kLF9jLF9jLF9jLF8xLF8wLF8wLF8wLF80LF80LF80LF80LF8wLF8wLF8wLF8wLAorICAgICAgXzgsXzksXzksXzgsXzEsXzMsXzEsXzIsXzEsXzAsXzAsXzAsXzEsXzIsXzAsXzIsXzgsX2IsXzksX2EsXzMsXzEsXzMsXzAsXzEsXzIsXzAsXzIsXzMsXzAsXzIsXzAsXzksX2EsXzgsX2EsXzMsXzAsXzIsXzAsXzAsXzIsXzAsXzIsXzIsXzAsXzIsXzAsX2IsXzgsX2EsXzgsXzEsXzAsXzAsXzAsXzIsXzAsXzIsXzAsXzAsXzAsXzAsXzAsXzgsX2IsXzksX2EsXzcsXzUsXzcsXzQsXzEsXzIsXzAsXzIsXzcsXzQsXzYsXzQsX2EsXzksX2IsXzgsXzUsXzUsXzUsXzQsXzMsXzAsXzIsXzAsXzUsXzQsXzQsXzQsX2IsXzgsX2EsXzgsXzUsXzQsXzQsXzQsXzIsXzAsXzIsXzAsXzQsXzQsXzQsXzQsXzksXzgsXzgsXzgsXzUsXzQsXzQsXzQsXzAsXzAsXzAsXzAsXzQsXzQsXzQsXzQsCisgICAgICBfMSxfMixfMCxfMixfNyxfNixfNixfNixfMCxfMixfMCxfMixfNixfNixfNixfNixfMyxfMixfMixfMixfNyxfNCxfNixfNCxfMixfMixfMixfMixfNixfNCxfNixfNCxfMixfMixfMixfMixfNixfNCxfNixfNCxfMixfMixfMixfMixfNixfNCxfNixfNCxfMixfMCxfMixfMCxfNCxfNCxfNCxfNCxfMixfMCxfMixfMCxfNCxfNCxfNCxfNCxfNyxfNixfNixfNixfNyxfNCxfNixfNCxfNixfNixfNixfNixfNixfNCxfNixfNCxfNyxfNCxfNixfNCxfNSxfNCxfNCxfNCxfNixfNCxfNixfNCxfNCxfNCxfNCxfNCxfNixfNCxfNixfNCxfNCxfNCxfNCxfNCxfNixfNCxfNixfNCxfNCxfNCxfNCxfNCxfNCxfNCxfNCxfNCxfNCxfNCxfNCxfNCxfNCxfNCxfNCxfNCxfNCxfNCxfNCxfNCwKKyAgICAgIF84LF9iLF85LF9hLF83LF81LF83LF80LF8xLF8yLF8wLF8yLF83LF80LF82LF80LF9hLF85LF9iLF84LF81LF81LF81LF80LF8zLF8wLF8yLF8wLF81LF80LF80LF80LF9iLF84LF9hLF84LF81LF80LF80LF80LF8yLF8wLF8yLF8wLF80LF80LF80LF80LF85LF84LF84LF84LF81LF80LF80LF80LF8wLF8wLF8wLF8wLF80LF80LF80LF80LF9lLF9kLF9mLF9jLF81LF81LF81LF80LF83LF80LF82LF80LF81LF80LF80LF80LF9jLF9kLF9kLF9jLF81LF81LF81LF80LF81LF80LF80LF80LF81LF80LF80LF80LF9kLF9jLF9jLF9jLF81LF80LF80LF80LF80LF80LF80LF80LF80LF80LF80LF80LF9kLF9jLF9jLF9jLF81LF80LF80LF80LF80LF80LF80LF80LF80LF80LF80LF80LAorICAgICAgXzcsXzYsXzYsXzYsXzcsXzQsXzYsXzQsXzYsXzYsXzYsXzYsXzYsXzQsXzYsXzQsXzcsXzQsXzYsXzQsXzUsXzQsXzQsXzQsXzYsXzQsXzYsXzQsXzQsXzQsXzQsXzQsXzYsXzQsXzYsXzQsXzQsXzQsXzQsXzQsXzYsXzQsXzYsXzQsXzQsXzQsXzQsXzQsXzQsXzQsXzQsXzQsXzQsXzQsXzQsXzQsXzQsXzQsXzQsXzQsXzQsXzQsXzQsXzQsXzcsXzQsXzYsXzQsXzEsXzAsXzAsXzAsXzYsXzQsXzYsXzQsXzAsXzAsXzAsXzAsXzUsXzQsXzQsXzQsXzEsXzAsXzAsXzAsXzQsXzQsXzQsXzQsXzAsXzAsXzAsXzAsXzQsXzQsXzQsXzQsXzAsXzAsXzAsXzAsXzQsXzQsXzQsXzQsXzAsXzAsXzAsXzAsXzQsXzQsXzQsXzQsXzAsXzAsXzAsXzAsXzQsXzQsXzQsXzQsXzAsXzAsXzAsXzAsCisgICAgICBfMCxfMCxfMCxfMSxfOCxfOSxfOSxfOSxfOCxfOSxfOSxfOCxfMSxfMSxfMSxfMCxfMCxfMCxfMCxfMSxfOCxfYixfOSxfYixfOCxfOSxfOSxfOCxfMSxfMyxfMSxfMixfMCxfMSxfMSxfMCxfOSxfYixfOSxfYSxfOSxfOCxfOCxfOCxfMSxfMixfMCxfMixfMCxfMyxfMSxfMixfYixfOSxfYixfOCxfOSxfYSxfOCxfYSxfMyxfMCxfMixfMCxfMCxfMCxfMCxfMSxfYyxfZixfZCxfZixfOCxfOSxfOSxfOCxfNSxfNyxfNSxfNixfMCxfMixfMCxfMyxfZSxfZCxfZixfZCxfOCxfYixfOSxfYSxfNyxfNSxfNyxfNCxfMCxfMyxfMSxfMixfZixfZCxfZixfYyxfOSxfYSxfOCxfYSxfNyxfNCxfNixfNCxfMixfMSxfMyxfMCxfZCxfZCxfZCxfYyxfYixfOCxfYSxfOCxfNSxfNCxfNCxfNCwKKyAgICAgIF84LF85LF85LF84LF81LF83LF81LF82LF8xLF8wLF8wLF8wLF81LF82LF80LF82LF84LF9iLF85LF9hLF83LF83LF83LF82LF8xLF8yLF8wLF8yLF83LF82LF82LF82LF85LF9hLF84LF9hLF83LF82LF82LF82LF8wLF8yLF8wLF8yLF82LF82LF82LF82LF9iLF9hLF9hLF9hLF83LF80LF82LF80LF8yLF8yLF8yLF8yLF82LF80LF82LF80LF9jLF9mLF9kLF9lLF8zLF8zLF8zLF8yLF81LF82LF80LF82LF8zLF8yLF8yLF8yLF9lLF9mLF9mLF9lLF8zLF8xLF8zLF8wLF83LF82LF82LF82LF8zLF8wLF8yLF8wLF9mLF9lLF9lLF9lLF8zLF8wLF8yLF8wLF82LF82LF82LF82LF8yLF8wLF8yLF8wLF9mLF9jLF9lLF9jLF8xLF8wLF8wLF8wLF82LF80LF82LF80LF8wLF8wLF8wLF8wLAorICAgICAgXzAsXzAsXzAsXzEsX2MsX2YsX2QsX2YsXzgsXzksXzksXzgsXzUsXzcsXzUsXzYsXzAsXzIsXzAsXzMsX2UsX2QsX2YsX2QsXzgsX2IsXzksX2EsXzcsXzUsXzcsXzQsXzAsXzMsXzEsXzIsX2YsX2QsX2YsX2MsXzksX2EsXzgsX2EsXzcsXzQsXzYsXzQsXzIsXzEsXzMsXzAsX2QsX2QsX2QsX2MsX2IsXzgsX2EsXzgsXzUsXzQsXzQsXzQsXzQsXzYsXzQsXzcsX2EsXzksX2IsXzksX2MsX2YsX2QsX2UsXzMsXzEsXzMsXzAsXzYsXzQsXzYsXzUsXzgsXzksXzksXzksX2UsX2QsX2YsX2MsXzEsXzEsXzEsXzAsXzYsXzUsXzcsXzQsXzksXzksXzksXzgsX2YsX2MsX2UsX2MsXzEsXzAsXzAsXzAsXzQsXzUsXzUsXzQsXzksXzksXzksXzgsX2QsX2MsX2MsX2MsXzEsXzAsXzAsXzAsCisgICAgICBfYyxfZixfZCxfZSxfMyxfMyxfMyxfMixfNSxfNixfNCxfNixfMyxfMixfMixfMixfZSxfZixfZixfZSxfMyxfMSxfMyxfMCxfNyxfNixfNixfNixfMyxfMCxfMixfMCxfZixfZSxfZSxfZSxfMyxfMCxfMixfMCxfNixfNixfNixfNixfMixfMCxfMixfMCxfZixfYyxfZSxfYyxfMSxfMCxfMCxfMCxfNixfNCxfNixfNCxfMCxfMCxfMCxfMCxfYSxfYixfYixfYSxfMyxfMSxfMyxfMCxfMyxfMixfMixfMixfMyxfMCxfMixfMCxfYSxfOSxfYixfOCxfMSxfMSxfMSxfMCxfMyxfMCxfMixfMCxfMSxfMCxfMCxfMCxfYixfOCxfYSxfOCxfMSxfMCxfMCxfMCxfMixfMCxfMixfMCxfMCxfMCxfMCxfMCxfOSxfOCxfOCxfOCxfMSxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCwKKyAgICAgIF84LF85LF85LF84LF81LF83LF81LF82LF8xLF8wLF8wLF8wLF81LF82LF80LF82LF84LF9iLF85LF9hLF83LF81LF83LF80LF8xLF8yLF8wLF8yLF83LF80LF82LF80LF85LF9hLF84LF9hLF83LF80LF82LF80LF8wLF8yLF8wLF8yLF82LF80LF82LF80LF9iLF84LF9hLF84LF81LF80LF80LF80LF8yLF8wLF8yLF8wLF80LF80LF80LF80LF9jLF9mLF9kLF9lLF83LF81LF83LF80LF81LF82LF80LF82LF83LF80LF82LF80LF9lLF9kLF9mLF9jLF81LF81LF81LF80LF83LF80LF82LF80LF81LF80LF80LF80LF9mLF9jLF9lLF9jLF81LF80LF80LF80LF82LF80LF82LF80LF80LF80LF80LF80LF9kLF9jLF9jLF9jLF81LF80LF80LF80LF80LF80LF80LF80LF80LF80LF80LF80LAorICAgICAgXzUsXzYsXzQsXzYsXzcsXzYsXzYsXzYsXzQsXzYsXzQsXzYsXzYsXzYsXzYsXzYsXzcsXzYsXzYsXzYsXzcsXzQsXzYsXzQsXzYsXzYsXzYsXzYsXzYsXzQsXzYsXzQsXzYsXzYsXzYsXzYsXzYsXzQsXzYsXzQsXzYsXzYsXzYsXzYsXzYsXzQsXzYsXzQsXzYsXzQsXzYsXzQsXzQsXzQsXzQsXzQsXzYsXzQsXzYsXzQsXzQsXzQsXzQsXzQsXzcsXzYsXzYsXzYsXzMsXzAsXzIsXzAsXzYsXzYsXzYsXzYsXzIsXzAsXzIsXzAsXzcsXzQsXzYsXzQsXzEsXzAsXzAsXzAsXzYsXzQsXzYsXzQsXzAsXzAsXzAsXzAsXzYsXzQsXzYsXzQsXzAsXzAsXzAsXzAsXzYsXzQsXzYsXzQsXzAsXzAsXzAsXzAsXzQsXzQsXzQsXzQsXzAsXzAsXzAsXzAsXzQsXzQsXzQsXzQsXzAsXzAsXzAsXzAsCisgICAgICBfYyxfZixfZCxfZSxfNyxfNSxfNyxfNCxfNSxfNixfNCxfNixfNyxfNCxfNixfNCxfZSxfZCxfZixfYyxfNSxfNSxfNSxfNCxfNyxfNCxfNixfNCxfNSxfNCxfNCxfNCxfZixfYyxfZSxfYyxfNSxfNCxfNCxfNCxfNixfNCxfNixfNCxfNCxfNCxfNCxfNCxfZCxfYyxfYyxfYyxfNSxfNCxfNCxfNCxfNCxfNCxfNCxfNCxfNCxfNCxfNCxfNCxfZSxfZCxfZixfYyxfMSxfMSxfMSxfMCxfNyxfNCxfNixfNCxfMSxfMCxfMCxfMCxfYyxfZCxfZCxfYyxfMSxfMSxfMSxfMCxfNSxfNCxfNCxfNCxfMSxfMCxfMCxfMCxfZCxfYyxfYyxfYyxfMSxfMCxfMCxfMCxfNCxfNCxfNCxfNCxfMCxfMCxfMCxfMCxfZCxfYyxfYyxfYyxfMSxfMCxfMCxfMCxfNCxfNCxfNCxfNCxfMCxfMCxfMCxfMCwKKyAgICAgIF83LF82LF82LF82LF8zLF8wLF8yLF8wLF82LF82LF82LF82LF8yLF8wLF8yLF8wLF83LF80LF82LF80LF8xLF8wLF8wLF8wLF82LF80LF82LF80LF8wLF8wLF8wLF8wLF82LF80LF82LF80LF8wLF8wLF8wLF8wLF82LF80LF82LF80LF8wLF8wLF8wLF8wLF80LF80LF80LF80LF8wLF8wLF8wLF8wLF80LF80LF80LF80LF8wLF8wLF8wLF8wLF8zLF8wLF8yLF8wLF8xLF8wLF8wLF8wLF8yLF8wLF8yLF8wLF8wLF8wLF8wLF8wLF8xLF8wLF8wLF8wLF8xLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLAorICAgICAgXzgsXzgsXzgsXzksXzAsXzEsXzEsXzEsXzAsXzEsXzEsXzAsXzEsXzEsXzEsXzAsXzgsXzgsXzgsXzksXzAsXzMsXzEsXzMsXzAsXzEsXzEsXzAsXzEsXzMsXzEsXzIsXzgsXzksXzksXzgsXzEsXzMsXzEsXzIsXzEsXzAsXzAsXzAsXzEsXzIsXzAsXzIsXzgsX2IsXzksX2EsXzMsXzEsXzMsXzAsXzEsXzIsXzAsXzIsXzMsXzAsXzIsXzAsXzgsXzgsXzgsXzksXzQsXzcsXzUsXzcsXzAsXzEsXzEsXzAsXzUsXzcsXzUsXzYsXzgsX2EsXzgsX2IsXzYsXzUsXzcsXzUsXzAsXzMsXzEsXzIsXzcsXzUsXzcsXzQsXzgsX2IsXzksX2EsXzcsXzUsXzcsXzQsXzEsXzIsXzAsXzIsXzcsXzQsXzYsXzQsX2EsXzksX2IsXzgsXzUsXzUsXzUsXzQsXzMsXzAsXzIsXzAsXzUsXzQsXzQsXzQsCisgICAgICBfMCxfMSxfMSxfMCxfNSxfNyxfNSxfNixfMSxfMCxfMCxfMCxfNSxfNixfNCxfNixfMCxfMyxfMSxfMixfNyxfNyxfNyxfNixfMSxfMixfMCxfMixfNyxfNixfNixfNixfMSxfMixfMCxfMixfNyxfNixfNixfNixfMCxfMixfMCxfMixfNixfNixfNixfNixfMyxfMixfMixfMixfNyxfNCxfNixfNCxfMixfMixfMixfMixfNixfNCxfNixfNCxfNCxfNyxfNSxfNixfMyxfMyxfMyxfMixfNSxfNixfNCxfNixfMyxfMixfMixfMixfNixfNyxfNyxfNixfMyxfMSxfMyxfMCxfNyxfNixfNixfNixfMyxfMCxfMixfMCxfNyxfNixfNixfNixfMyxfMCxfMixfMCxfNixfNixfNixfNixfMixfMCxfMixfMCxfNyxfNCxfNixfNCxfMSxfMCxfMCxfMCxfNixfNCxfNixfNCxfMCxfMCxfMCxfMCwKKyAgICAgIF84LF84LF84LF85LF80LF83LF81LF83LF8wLF8xLF8xLF8wLF81LF83LF81LF82LF84LF9hLF84LF9iLF82LF81LF83LF81LF8wLF8zLF8xLF8yLF83LF81LF83LF80LF84LF9iLF85LF9hLF83LF81LF83LF80LF8xLF8yLF8wLF8yLF83LF80LF82LF80LF9hLF85LF9iLF84LF81LF81LF81LF80LF8zLF8wLF8yLF8wLF81LF80LF80LF80LF9jLF9lLF9jLF9mLF8yLF8xLF8zLF8xLF80LF83LF81LF82LF8zLF8xLF8zLF8wLF9lLF9jLF9lLF9kLF8wLF8xLF8xLF8xLF82LF81LF83LF80LF8xLF8xLF8xLF8wLF9lLF9kLF9mLF9jLF8xLF8xLF8xLF8wLF83LF80LF82LF80LF8xLF8wLF8wLF8wLF9jLF9kLF9kLF9jLF8xLF8xLF8xLF8wLF81LF80LF80LF80LF8xLF8wLF8wLF8wLAorICAgICAgXzQsXzcsXzUsXzYsXzMsXzMsXzMsXzIsXzUsXzYsXzQsXzYsXzMsXzIsXzIsXzIsXzYsXzcsXzcsXzYsXzMsXzEsXzMsXzAsXzcsXzYsXzYsXzYsXzMsXzAsXzIsXzAsXzcsXzYsXzYsXzYsXzMsXzAsXzIsXzAsXzYsXzYsXzYsXzYsXzIsXzAsXzIsXzAsXzcsXzQsXzYsXzQsXzEsXzAsXzAsXzAsXzYsXzQsXzYsXzQsXzAsXzAsXzAsXzAsXzIsXzMsXzMsXzIsXzMsXzEsXzMsXzAsXzMsXzIsXzIsXzIsXzMsXzAsXzIsXzAsXzIsXzEsXzMsXzAsXzEsXzEsXzEsXzAsXzMsXzAsXzIsXzAsXzEsXzAsXzAsXzAsXzMsXzAsXzIsXzAsXzEsXzAsXzAsXzAsXzIsXzAsXzIsXzAsXzAsXzAsXzAsXzAsXzEsXzAsXzAsXzAsXzEsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsCisgICAgICBfMCxfMSxfMSxfMCxfNSxfNyxfNSxfNixfMSxfMCxfMCxfMCxfNSxfNixfNCxfNixfMCxfMyxfMSxfMixfNyxfNSxfNyxfNCxfMSxfMixfMCxfMixfNyxfNCxfNixfNCxfMSxfMixfMCxfMixfNyxfNCxfNixfNCxfMCxfMixfMCxfMixfNixfNCxfNixfNCxfMyxfMCxfMixfMCxfNSxfNCxfNCxfNCxfMixfMCxfMixfMCxfNCxfNCxfNCxfNCxfNCxfNyxfNSxfNixfNyxfNSxfNyxfNCxfNSxfNixfNCxfNixfNyxfNCxfNixfNCxfNixfNSxfNyxfNCxfNSxfNSxfNSxfNCxfNyxfNCxfNixfNCxfNSxfNCxfNCxfNCxfNyxfNCxfNixfNCxfNSxfNCxfNCxfNCxfNixfNCxfNixfNCxfNCxfNCxfNCxfNCxfNSxfNCxfNCxfNCxfNSxfNCxfNCxfNCxfNCxfNCxfNCxfNCxfNCxfNCxfNCxfNCwKKyAgICAgIF81LF82LF80LF82LF83LF82LF82LF82LF80LF82LF80LF82LF82LF82LF82LF82LF83LF82LF82LF82LF83LF80LF82LF80LF82LF82LF82LF82LF82LF80LF82LF80LF82LF82LF82LF82LF82LF80LF82LF80LF82LF82LF82LF82LF82LF80LF82LF80LF82LF80LF82LF80LF80LF80LF80LF80LF82LF80LF82LF80LF80LF80LF80LF80LF83LF82LF82LF82LF8zLF8wLF8yLF8wLF82LF82LF82LF82LF8yLF8wLF8yLF8wLF83LF80LF82LF80LF8xLF8wLF8wLF8wLF82LF80LF82LF80LF8wLF8wLF8wLF8wLF82LF80LF82LF80LF8wLF8wLF8wLF8wLF82LF80LF82LF80LF8wLF8wLF8wLF8wLF80LF80LF80LF80LF8wLF8wLF8wLF8wLF80LF80LF80LF80LF8wLF8wLF8wLF8wLAorICAgICAgXzQsXzcsXzUsXzYsXzcsXzUsXzcsXzQsXzUsXzYsXzQsXzYsXzcsXzQsXzYsXzQsXzYsXzUsXzcsXzQsXzUsXzUsXzUsXzQsXzcsXzQsXzYsXzQsXzUsXzQsXzQsXzQsXzcsXzQsXzYsXzQsXzUsXzQsXzQsXzQsXzYsXzQsXzYsXzQsXzQsXzQsXzQsXzQsXzUsXzQsXzQsXzQsXzUsXzQsXzQsXzQsXzQsXzQsXzQsXzQsXzQsXzQsXzQsXzQsXzYsXzUsXzcsXzQsXzEsXzEsXzEsXzAsXzcsXzQsXzYsXzQsXzEsXzAsXzAsXzAsXzQsXzUsXzUsXzQsXzEsXzEsXzEsXzAsXzUsXzQsXzQsXzQsXzEsXzAsXzAsXzAsXzUsXzQsXzQsXzQsXzEsXzAsXzAsXzAsXzQsXzQsXzQsXzQsXzAsXzAsXzAsXzAsXzUsXzQsXzQsXzQsXzEsXzAsXzAsXzAsXzQsXzQsXzQsXzQsXzAsXzAsXzAsXzAsCisgICAgICBfNyxfNixfNixfNixfMyxfMCxfMixfMCxfNixfNixfNixfNixfMixfMCxfMixfMCxfNyxfNCxfNixfNCxfMSxfMCxfMCxfMCxfNixfNCxfNixfNCxfMCxfMCxfMCxfMCxfNixfNCxfNixfNCxfMCxfMCxfMCxfMCxfNixfNCxfNixfNCxfMCxfMCxfMCxfMCxfNCxfNCxfNCxfNCxfMCxfMCxfMCxfMCxfNCxfNCxfNCxfNCxfMCxfMCxfMCxfMCxfMyxfMCxfMixfMCxfMSxfMCxfMCxfMCxfMixfMCxfMixfMCxfMCxfMCxfMCxfMCxfMSxfMCxfMCxfMCxfMSxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCwKKyAgICAgIF84LF84LF84LF85LF80LF81LF81LF81LF8wLF8xLF8xLF8wLF81LF81LF81LF80LF84LF84LF84LF85LF80LF83LF81LF83LF8wLF8xLF8xLF8wLF81LF83LF81LF82LF84LF85LF85LF84LF81LF83LF81LF82LF8xLF8wLF8wLF8wLF81LF82LF80LF82LF84LF9iLF85LF9hLF83LF81LF83LF80LF8xLF8yLF8wLF8yLF83LF80LF82LF80LF9jLF9jLF9jLF9kLF8wLF8zLF8xLF8zLF80LF81LF81LF80LF8xLF8zLF8xLF8yLF9jLF9lLF9jLF9mLF8yLF8xLF8zLF8xLF80LF83LF81LF82LF8zLF8xLF8zLF8wLF9jLF9mLF9kLF9lLF8zLF8xLF8zLF8wLF81LF82LF80LF82LF8zLF8wLF8yLF8wLF9lLF9kLF9mLF9jLF8xLF8xLF8xLF8wLF83LF80LF82LF80LF8xLF8wLF8wLF8wLAorICAgICAgXzQsXzUsXzUsXzQsXzEsXzMsXzEsXzIsXzUsXzQsXzQsXzQsXzEsXzIsXzAsXzIsXzQsXzcsXzUsXzYsXzMsXzMsXzMsXzIsXzUsXzYsXzQsXzYsXzMsXzIsXzIsXzIsXzUsXzYsXzQsXzYsXzMsXzIsXzIsXzIsXzQsXzYsXzQsXzYsXzIsXzIsXzIsXzIsXzcsXzYsXzYsXzYsXzMsXzAsXzIsXzAsXzYsXzYsXzYsXzYsXzIsXzAsXzIsXzAsXzAsXzMsXzEsXzIsXzMsXzMsXzMsXzIsXzEsXzIsXzAsXzIsXzMsXzIsXzIsXzIsXzIsXzMsXzMsXzIsXzMsXzEsXzMsXzAsXzMsXzIsXzIsXzIsXzMsXzAsXzIsXzAsXzMsXzIsXzIsXzIsXzMsXzAsXzIsXzAsXzIsXzIsXzIsXzIsXzIsXzAsXzIsXzAsXzMsXzAsXzIsXzAsXzEsXzAsXzAsXzAsXzIsXzAsXzIsXzAsXzAsXzAsXzAsXzAsCisgICAgICBfYyxfYyxfYyxfZCxfMCxfMyxfMSxfMyxfNCxfNSxfNSxfNCxfMSxfMyxfMSxfMixfYyxfZSxfYyxfZixfMixfMSxfMyxfMSxfNCxfNyxfNSxfNixfMyxfMSxfMyxfMCxfYyxfZixfZCxfZSxfMyxfMSxfMyxfMCxfNSxfNixfNCxfNixfMyxfMCxfMixfMCxfZSxfZCxfZixfYyxfMSxfMSxfMSxfMCxfNyxfNCxfNixfNCxfMSxfMCxfMCxfMCxfOCxfYSxfOCxfYixfMixfMSxfMyxfMSxfMCxfMyxfMSxfMixfMyxfMSxfMyxfMCxfYSxfOCxfYSxfOSxfMCxfMSxfMSxfMSxfMixfMSxfMyxfMCxfMSxfMSxfMSxfMCxfYSxfOSxfYixfOCxfMSxfMSxfMSxfMCxfMyxfMCxfMixfMCxfMSxfMCxfMCxfMCxfOCxfOSxfOSxfOCxfMSxfMSxfMSxfMCxfMSxfMCxfMCxfMCxfMSxfMCxfMCxfMCwKKyAgICAgIF8wLF8zLF8xLF8yLF8zLF8zLF8zLF8yLF8xLF8yLF8wLF8yLF8zLF8yLF8yLF8yLF8yLF8zLF8zLF8yLF8zLF8xLF8zLF8wLF8zLF8yLF8yLF8yLF8zLF8wLF8yLF8wLF8zLF8yLF8yLF8yLF8zLF8wLF8yLF8wLF8yLF8yLF8yLF8yLF8yLF8wLF8yLF8wLF8zLF8wLF8yLF8wLF8xLF8wLF8wLF8wLF8yLF8wLF8yLF8wLF8wLF8wLF8wLF8wLF8yLF8zLF8zLF8yLF8zLF8xLF8zLF8wLF8zLF8yLF8yLF8yLF8zLF8wLF8yLF8wLF8yLF8xLF8zLF8wLF8xLF8xLF8xLF8wLF8zLF8wLF8yLF8wLF8xLF8wLF8wLF8wLF8zLF8wLF8yLF8wLF8xLF8wLF8wLF8wLF8yLF8wLF8yLF8wLF8wLF8wLF8wLF8wLF8xLF8wLF8wLF8wLF8xLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLAorICAgICAgXzQsXzUsXzUsXzQsXzUsXzcsXzUsXzYsXzUsXzQsXzQsXzQsXzUsXzYsXzQsXzYsXzQsXzcsXzUsXzYsXzcsXzUsXzcsXzQsXzUsXzYsXzQsXzYsXzcsXzQsXzYsXzQsXzUsXzYsXzQsXzYsXzcsXzQsXzYsXzQsXzQsXzYsXzQsXzYsXzYsXzQsXzYsXzQsXzcsXzQsXzYsXzQsXzUsXzQsXzQsXzQsXzYsXzQsXzYsXzQsXzQsXzQsXzQsXzQsXzQsXzcsXzUsXzYsXzMsXzEsXzMsXzAsXzUsXzYsXzQsXzYsXzMsXzAsXzIsXzAsXzYsXzUsXzcsXzQsXzEsXzEsXzEsXzAsXzcsXzQsXzYsXzQsXzEsXzAsXzAsXzAsXzcsXzQsXzYsXzQsXzEsXzAsXzAsXzAsXzYsXzQsXzYsXzQsXzAsXzAsXzAsXzAsXzUsXzQsXzQsXzQsXzEsXzAsXzAsXzAsXzQsXzQsXzQsXzQsXzAsXzAsXzAsXzAsCisgICAgICBfNSxfNixfNCxfNixfMyxfMixfMixfMixfNCxfNixfNCxfNixfMixfMixfMixfMixfNyxfNixfNixfNixfMyxfMCxfMixfMCxfNixfNixfNixfNixfMixfMCxfMixfMCxfNixfNixfNixfNixfMixfMCxfMixfMCxfNixfNixfNixfNixfMixfMCxfMixfMCxfNixfNCxfNixfNCxfMCxfMCxfMCxfMCxfNixfNCxfNixfNCxfMCxfMCxfMCxfMCxfMyxfMixfMixfMixfMyxfMCxfMixfMCxfMixfMixfMixfMixfMixfMCxfMixfMCxfMyxfMCxfMixfMCxfMSxfMCxfMCxfMCxfMixfMCxfMixfMCxfMCxfMCxfMCxfMCxfMixfMCxfMixfMCxfMCxfMCxfMCxfMCxfMixfMCxfMixfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCwKKyAgICAgIF80LF83LF81LF82LF8zLF8xLF8zLF8wLF81LF82LF80LF82LF8zLF8wLF8yLF8wLF82LF81LF83LF80LF8xLF8xLF8xLF8wLF83LF80LF82LF80LF8xLF8wLF8wLF8wLF83LF80LF82LF80LF8xLF8wLF8wLF8wLF82LF80LF82LF80LF8wLF8wLF8wLF8wLF81LF80LF80LF80LF8xLF8wLF8wLF8wLF80LF80LF80LF80LF8wLF8wLF8wLF8wLF8yLF8xLF8zLF8wLF8xLF8xLF8xLF8wLF8zLF8wLF8yLF8wLF8xLF8wLF8wLF8wLF8wLF8xLF8xLF8wLF8xLF8xLF8xLF8wLF8xLF8wLF8wLF8wLF8xLF8wLF8wLF8wLF8xLF8wLF8wLF8wLF8xLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8xLF8wLF8wLF8wLF8xLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLAorICAgICAgXzMsXzIsXzIsXzIsXzMsXzAsXzIsXzAsXzIsXzIsXzIsXzIsXzIsXzAsXzIsXzAsXzMsXzAsXzIsXzAsXzEsXzAsXzAsXzAsXzIsXzAsXzIsXzAsXzAsXzAsXzAsXzAsXzIsXzAsXzIsXzAsXzAsXzAsXzAsXzAsXzIsXzAsXzIsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzMsXzAsXzIsXzAsXzEsXzAsXzAsXzAsXzIsXzAsXzIsXzAsXzAsXzAsXzAsXzAsXzEsXzAsXzAsXzAsXzEsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsCisgICAgICBfOCxfOSxfOSxfOCxfOSxfYixfOSxfYSxfOSxfOCxfOCxfOCxfMSxfMixfMCxfMixfOCxfYixfOSxfYSxfYixfOSxfYixfOCxfOSxfYSxfOCxfYSxfMyxfMCxfMixfMCxfOSxfYSxfOCxfYSxfYixfOCxfYSxfOCxfOCxfYSxfOCxfYSxfMixfMCxfMixfMCxfYixfOCxfYSxfOCxfOSxfOCxfOCxfOCxfYSxfOCxfYSxfOCxfMCxfMCxfMCxfMCxfOCxfYixfOSxfYSxfZixfZCxfZixfYyxfOSxfYSxfOCxfYSxfNyxfNCxfNixfNCxfYSxfOSxfYixfOCxfZCxfZCxfZCxfYyxfYixfOCxfYSxfOCxfNSxfNCxfNCxfNCxfYixfOCxfYSxfOCxfZCxfYyxfYyxfYyxfYSxfOCxfYSxfOCxfNCxfNCxfNCxfNCxfOSxfOCxfOCxfOCxfZCxfYyxfYyxfYyxfOCxfOCxfOCxfOCxfNCxfNCxfNCxfNCwKKyAgICAgIF85LF9hLF84LF9hLF83LF82LF82LF82LF8wLF8yLF8wLF8yLF82LF82LF82LF82LF9iLF9hLF9hLF9hLF83LF80LF82LF80LF8yLF8yLF8yLF8yLF82LF80LF82LF80LF9hLF9hLF9hLF9hLF82LF80LF82LF80LF8yLF8yLF8yLF8yLF82LF80LF82LF80LF9hLF84LF9hLF84LF80LF80LF80LF80LF8yLF8wLF8yLF8wLF80LF80LF80LF80LF9mLF9lLF9lLF9lLF8zLF8wLF8yLF8wLF82LF82LF82LF82LF8yLF8wLF8yLF8wLF9mLF9jLF9lLF9jLF8xLF8wLF8wLF8wLF82LF80LF82LF80LF8wLF8wLF8wLF8wLF9lLF9jLF9lLF9jLF8wLF8wLF8wLF8wLF82LF80LF82LF80LF8wLF8wLF8wLF8wLF9jLF9jLF9jLF9jLF8wLF8wLF8wLF8wLF80LF80LF80LF80LF8wLF8wLF8wLF8wLAorICAgICAgXzgsX2IsXzksX2EsX2YsX2QsX2YsX2MsXzksX2EsXzgsX2EsXzcsXzQsXzYsXzQsX2EsXzksX2IsXzgsX2QsX2QsX2QsX2MsX2IsXzgsX2EsXzgsXzUsXzQsXzQsXzQsX2IsXzgsX2EsXzgsX2QsX2MsX2MsX2MsX2EsXzgsX2EsXzgsXzQsXzQsXzQsXzQsXzksXzgsXzgsXzgsX2QsX2MsX2MsX2MsXzgsXzgsXzgsXzgsXzQsXzQsXzQsXzQsX2UsX2QsX2YsX2MsXzksXzksXzksXzgsX2YsX2MsX2UsX2MsXzEsXzAsXzAsXzAsX2MsX2QsX2QsX2MsXzksXzksXzksXzgsX2QsX2MsX2MsX2MsXzEsXzAsXzAsXzAsX2QsX2MsX2MsX2MsXzksXzgsXzgsXzgsX2MsX2MsX2MsX2MsXzAsXzAsXzAsXzAsX2QsX2MsX2MsX2MsXzksXzgsXzgsXzgsX2MsX2MsX2MsX2MsXzAsXzAsXzAsXzAsCisgICAgICBfZixfZSxfZSxfZSxfMyxfMCxfMixfMCxfNixfNixfNixfNixfMixfMCxfMixfMCxfZixfYyxfZSxfYyxfMSxfMCxfMCxfMCxfNixfNCxfNixfNCxfMCxfMCxfMCxfMCxfZSxfYyxfZSxfYyxfMCxfMCxfMCxfMCxfNixfNCxfNixfNCxfMCxfMCxfMCxfMCxfYyxfYyxfYyxfYyxfMCxfMCxfMCxfMCxfNCxfNCxfNCxfNCxfMCxfMCxfMCxfMCxfYixfOCxfYSxfOCxfMSxfMCxfMCxfMCxfMixfMCxfMixfMCxfMCxfMCxfMCxfMCxfOSxfOCxfOCxfOCxfMSxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfOCxfOCxfOCxfOCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfOCxfOCxfOCxfOCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCwKKyAgICAgIF85LF9hLF84LF9hLF83LF80LF82LF80LF8wLF8yLF8wLF8yLF82LF80LF82LF80LF9iLF84LF9hLF84LF81LF80LF80LF80LF8yLF8wLF8yLF8wLF80LF80LF80LF80LF9hLF84LF9hLF84LF80LF80LF80LF80LF8yLF8wLF8yLF8wLF80LF80LF80LF80LF84LF84LF84LF84LF80LF80LF80LF80LF8wLF8wLF8wLF8wLF80LF80LF80LF80LF9mLF9jLF9lLF9jLF81LF80LF80LF80LF82LF80LF82LF80LF80LF80LF80LF80LF9kLF9jLF9jLF9jLF81LF80LF80LF80LF80LF80LF80LF80LF80LF80LF80LF80LF9jLF9jLF9jLF9jLF80LF80LF80LF80LF80LF80LF80LF80LF80LF80LF80LF80LF9jLF9jLF9jLF9jLF80LF80LF80LF80LF80LF80LF80LF80LF80LF80LF80LF80LAorICAgICAgXzYsXzYsXzYsXzYsXzYsXzQsXzYsXzQsXzYsXzYsXzYsXzYsXzYsXzQsXzYsXzQsXzYsXzQsXzYsXzQsXzQsXzQsXzQsXzQsXzYsXzQsXzYsXzQsXzQsXzQsXzQsXzQsXzYsXzQsXzYsXzQsXzQsXzQsXzQsXzQsXzYsXzQsXzYsXzQsXzQsXzQsXzQsXzQsXzQsXzQsXzQsXzQsXzQsXzQsXzQsXzQsXzQsXzQsXzQsXzQsXzQsXzQsXzQsXzQsXzYsXzQsXzYsXzQsXzAsXzAsXzAsXzAsXzYsXzQsXzYsXzQsXzAsXzAsXzAsXzAsXzQsXzQsXzQsXzQsXzAsXzAsXzAsXzAsXzQsXzQsXzQsXzQsXzAsXzAsXzAsXzAsXzQsXzQsXzQsXzQsXzAsXzAsXzAsXzAsXzQsXzQsXzQsXzQsXzAsXzAsXzAsXzAsXzQsXzQsXzQsXzQsXzAsXzAsXzAsXzAsXzQsXzQsXzQsXzQsXzAsXzAsXzAsXzAsCisgICAgICBfZixfYyxfZSxfYyxfNSxfNCxfNCxfNCxfNixfNCxfNixfNCxfNCxfNCxfNCxfNCxfZCxfYyxfYyxfYyxfNSxfNCxfNCxfNCxfNCxfNCxfNCxfNCxfNCxfNCxfNCxfNCxfYyxfYyxfYyxfYyxfNCxfNCxfNCxfNCxfNCxfNCxfNCxfNCxfNCxfNCxfNCxfNCxfYyxfYyxfYyxfYyxfNCxfNCxfNCxfNCxfNCxfNCxfNCxfNCxfNCxfNCxfNCxfNCxfZCxfYyxfYyxfYyxfMSxfMCxfMCxfMCxfNCxfNCxfNCxfNCxfMCxfMCxfMCxfMCxfZCxfYyxfYyxfYyxfMSxfMCxfMCxfMCxfNCxfNCxfNCxfNCxfMCxfMCxfMCxfMCxfYyxfYyxfYyxfYyxfMCxfMCxfMCxfMCxfNCxfNCxfNCxfNCxfMCxfMCxfMCxfMCxfYyxfYyxfYyxfYyxfMCxfMCxfMCxfMCxfNCxfNCxfNCxfNCxfMCxfMCxfMCxfMCwKKyAgICAgIF82LF80LF82LF80LF8wLF8wLF8wLF8wLF82LF80LF82LF80LF8wLF8wLF8wLF8wLF80LF80LF80LF80LF8wLF8wLF8wLF8wLF80LF80LF80LF80LF8wLF8wLF8wLF8wLF80LF80LF80LF80LF8wLF8wLF8wLF8wLF80LF80LF80LF80LF8wLF8wLF8wLF8wLF80LF80LF80LF80LF8wLF8wLF8wLF8wLF80LF80LF80LF80LF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLAorICAgICAgXzgsXzksXzksXzgsX2QsX2YsX2QsX2UsXzksXzgsXzgsXzgsXzUsXzYsXzQsXzYsXzgsX2IsXzksX2EsX2YsX2QsX2YsX2MsXzksX2EsXzgsX2EsXzcsXzQsXzYsXzQsXzksX2EsXzgsX2EsX2YsX2MsX2UsX2MsXzgsX2EsXzgsX2EsXzYsXzQsXzYsXzQsX2IsXzgsX2EsXzgsX2QsX2MsX2MsX2MsX2EsXzgsX2EsXzgsXzQsXzQsXzQsXzQsX2MsX2YsX2QsX2UsX2IsXzksX2IsXzgsX2QsX2UsX2MsX2UsXzMsXzAsXzIsXzAsX2UsX2QsX2YsX2MsXzksXzksXzksXzgsX2YsX2MsX2UsX2MsXzEsXzAsXzAsXzAsX2YsX2MsX2UsX2MsXzksXzgsXzgsXzgsX2UsX2MsX2UsX2MsXzAsXzAsXzAsXzAsX2QsX2MsX2MsX2MsXzksXzgsXzgsXzgsX2MsX2MsX2MsX2MsXzAsXzAsXzAsXzAsCisgICAgICBfZCxfZSxfYyxfZSxfMyxfMixfMixfMixfNCxfNixfNCxfNixfMixfMixfMixfMixfZixfZSxfZSxfZSxfMyxfMCxfMixfMCxfNixfNixfNixfNixfMixfMCxfMixfMCxfZSxfZSxfZSxfZSxfMixfMCxfMixfMCxfNixfNixfNixfNixfMixfMCxfMixfMCxfZSxfYyxfZSxfYyxfMCxfMCxfMCxfMCxfNixfNCxfNixfNCxfMCxfMCxfMCxfMCxfYixfYSxfYSxfYSxfMyxfMCxfMixfMCxfMixfMixfMixfMixfMixfMCxfMixfMCxfYixfOCxfYSxfOCxfMSxfMCxfMCxfMCxfMixfMCxfMixfMCxfMCxfMCxfMCxfMCxfYSxfOCxfYSxfOCxfMCxfMCxfMCxfMCxfMixfMCxfMixfMCxfMCxfMCxfMCxfMCxfOCxfOCxfOCxfOCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCwKKyAgICAgIF9jLF9mLF9kLF9lLF9iLF85LF9iLF84LF9kLF9lLF9jLF9lLF8zLF8wLF8yLF8wLF9lLF9kLF9mLF9jLF85LF85LF85LF84LF9mLF9jLF9lLF9jLF8xLF8wLF8wLF8wLF9mLF9jLF9lLF9jLF85LF84LF84LF84LF9lLF9jLF9lLF9jLF8wLF8wLF8wLF8wLF9kLF9jLF9jLF9jLF85LF84LF84LF84LF9jLF9jLF9jLF9jLF8wLF8wLF8wLF8wLF9hLF85LF9iLF84LF85LF85LF85LF84LF9iLF84LF9hLF84LF8xLF8wLF8wLF8wLF84LF85LF85LF84LF85LF85LF85LF84LF85LF84LF84LF84LF8xLF8wLF8wLF8wLF85LF84LF84LF84LF85LF84LF84LF84LF84LF84LF84LF84LF8wLF8wLF8wLF8wLF85LF84LF84LF84LF85LF84LF84LF84LF84LF84LF84LF84LF8wLF8wLF8wLF8wLAorICAgICAgX2IsX2EsX2EsX2EsXzMsXzAsXzIsXzAsXzIsXzIsXzIsXzIsXzIsXzAsXzIsXzAsX2IsXzgsX2EsXzgsXzEsXzAsXzAsXzAsXzIsXzAsXzIsXzAsXzAsXzAsXzAsXzAsX2EsXzgsX2EsXzgsXzAsXzAsXzAsXzAsXzIsXzAsXzIsXzAsXzAsXzAsXzAsXzAsXzgsXzgsXzgsXzgsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsX2IsXzgsX2EsXzgsXzEsXzAsXzAsXzAsXzIsXzAsXzIsXzAsXzAsXzAsXzAsXzAsXzksXzgsXzgsXzgsXzEsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzgsXzgsXzgsXzgsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzgsXzgsXzgsXzgsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsCisgICAgICBfZCxfZSxfYyxfZSxfNyxfNCxfNixfNCxfNCxfNixfNCxfNixfNixfNCxfNixfNCxfZixfYyxfZSxfYyxfNSxfNCxfNCxfNCxfNixfNCxfNixfNCxfNCxfNCxfNCxfNCxfZSxfYyxfZSxfYyxfNCxfNCxfNCxfNCxfNixfNCxfNixfNCxfNCxfNCxfNCxfNCxfYyxfYyxfYyxfYyxfNCxfNCxfNCxfNCxfNCxfNCxfNCxfNCxfNCxfNCxfNCxfNCxfZixfYyxfZSxfYyxfMSxfMCxfMCxfMCxfNixfNCxfNixfNCxfMCxfMCxfMCxfMCxfZCxfYyxfYyxfYyxfMSxfMCxfMCxfMCxfNCxfNCxfNCxfNCxfMCxfMCxfMCxfMCxfYyxfYyxfYyxfYyxfMCxfMCxfMCxfMCxfNCxfNCxfNCxfNCxfMCxfMCxfMCxfMCxfYyxfYyxfYyxfYyxfMCxfMCxfMCxfMCxfNCxfNCxfNCxfNCxfMCxfMCxfMCxfMCwKKyAgICAgIF82LF82LF82LF82LF8yLF8wLF8yLF8wLF82LF82LF82LF82LF8yLF8wLF8yLF8wLF82LF80LF82LF80LF8wLF8wLF8wLF8wLF82LF80LF82LF80LF8wLF8wLF8wLF8wLF82LF80LF82LF80LF8wLF8wLF8wLF8wLF82LF80LF82LF80LF8wLF8wLF8wLF8wLF80LF80LF80LF80LF8wLF8wLF8wLF8wLF80LF80LF80LF80LF8wLF8wLF8wLF8wLF8yLF8wLF8yLF8wLF8wLF8wLF8wLF8wLF8yLF8wLF8yLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLAorICAgICAgX2YsX2MsX2UsX2MsXzEsXzAsXzAsXzAsXzYsXzQsXzYsXzQsXzAsXzAsXzAsXzAsX2QsX2MsX2MsX2MsXzEsXzAsXzAsXzAsXzQsXzQsXzQsXzQsXzAsXzAsXzAsXzAsX2MsX2MsX2MsX2MsXzAsXzAsXzAsXzAsXzQsXzQsXzQsXzQsXzAsXzAsXzAsXzAsX2MsX2MsX2MsX2MsXzAsXzAsXzAsXzAsXzQsXzQsXzQsXzQsXzAsXzAsXzAsXzAsXzksXzgsXzgsXzgsXzEsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzksXzgsXzgsXzgsXzEsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzgsXzgsXzgsXzgsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzgsXzgsXzgsXzgsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsCisgICAgICBfMixfMCxfMixfMCxfMCxfMCxfMCxfMCxfMixfMCxfMixfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCwKKyAgICAgIF84LF85LF85LF84LF81LF83LF81LF82LF8xLF8wLF8wLF8wLF81LF82LF80LF82LF84LF9iLF85LF9hLF83LF81LF83LF80LF8xLF8yLF8wLF8yLF83LF80LF82LF80LF85LF9hLF84LF9hLF83LF80LF82LF80LF8wLF8yLF8wLF8yLF82LF80LF82LF80LF9iLF84LF9hLF84LF81LF80LF80LF80LF8yLF8wLF8yLF8wLF80LF80LF80LF80LF9jLF9mLF9kLF9lLF8zLF8xLF8zLF8wLF81LF82LF80LF82LF8zLF8wLF8yLF8wLF9lLF9kLF9mLF9jLF8xLF8xLF8xLF8wLF83LF80LF82LF80LF8xLF8wLF8wLF8wLF9mLF9jLF9lLF9jLF8xLF8wLF8wLF8wLF82LF80LF82LF80LF8wLF8wLF8wLF8wLF9kLF9jLF9jLF9jLF8xLF8wLF8wLF8wLF80LF80LF80LF80LF8wLF8wLF8wLF8wLAorICAgICAgXzUsXzYsXzQsXzYsXzMsXzIsXzIsXzIsXzQsXzYsXzQsXzYsXzIsXzIsXzIsXzIsXzcsXzYsXzYsXzYsXzMsXzAsXzIsXzAsXzYsXzYsXzYsXzYsXzIsXzAsXzIsXzAsXzYsXzYsXzYsXzYsXzIsXzAsXzIsXzAsXzYsXzYsXzYsXzYsXzIsXzAsXzIsXzAsXzYsXzQsXzYsXzQsXzAsXzAsXzAsXzAsXzYsXzQsXzYsXzQsXzAsXzAsXzAsXzAsXzMsXzIsXzIsXzIsXzMsXzAsXzIsXzAsXzIsXzIsXzIsXzIsXzIsXzAsXzIsXzAsXzMsXzAsXzIsXzAsXzEsXzAsXzAsXzAsXzIsXzAsXzIsXzAsXzAsXzAsXzAsXzAsXzIsXzAsXzIsXzAsXzAsXzAsXzAsXzAsXzIsXzAsXzIsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsCisgICAgICBfYyxfZixfZCxfZSxfMyxfMSxfMyxfMCxfNSxfNixfNCxfNixfMyxfMCxfMixfMCxfZSxfZCxfZixfYyxfMSxfMSxfMSxfMCxfNyxfNCxfNixfNCxfMSxfMCxfMCxfMCxfZixfYyxfZSxfYyxfMSxfMCxfMCxfMCxfNixfNCxfNixfNCxfMCxfMCxfMCxfMCxfZCxfYyxfYyxfYyxfMSxfMCxfMCxfMCxfNCxfNCxfNCxfNCxfMCxfMCxfMCxfMCxfYSxfOSxfYixfOCxfMSxfMSxfMSxfMCxfMyxfMCxfMixfMCxfMSxfMCxfMCxfMCxfOCxfOSxfOSxfOCxfMSxfMSxfMSxfMCxfMSxfMCxfMCxfMCxfMSxfMCxfMCxfMCxfOSxfOCxfOCxfOCxfMSxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfOSxfOCxfOCxfOCxfMSxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCwKKyAgICAgIF8zLF8yLF8yLF8yLF8zLF8wLF8yLF8wLF8yLF8yLF8yLF8yLF8yLF8wLF8yLF8wLF8zLF8wLF8yLF8wLF8xLF8wLF8wLF8wLF8yLF8wLF8yLF8wLF8wLF8wLF8wLF8wLF8yLF8wLF8yLF8wLF8wLF8wLF8wLF8wLF8yLF8wLF8yLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8zLF8wLF8yLF8wLF8xLF8wLF8wLF8wLF8yLF8wLF8yLF8wLF8wLF8wLF8wLF8wLF8xLF8wLF8wLF8wLF8xLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLAorICAgICAgXzUsXzYsXzQsXzYsXzcsXzQsXzYsXzQsXzQsXzYsXzQsXzYsXzYsXzQsXzYsXzQsXzcsXzQsXzYsXzQsXzUsXzQsXzQsXzQsXzYsXzQsXzYsXzQsXzQsXzQsXzQsXzQsXzYsXzQsXzYsXzQsXzQsXzQsXzQsXzQsXzYsXzQsXzYsXzQsXzQsXzQsXzQsXzQsXzQsXzQsXzQsXzQsXzQsXzQsXzQsXzQsXzQsXzQsXzQsXzQsXzQsXzQsXzQsXzQsXzcsXzQsXzYsXzQsXzEsXzAsXzAsXzAsXzYsXzQsXzYsXzQsXzAsXzAsXzAsXzAsXzUsXzQsXzQsXzQsXzEsXzAsXzAsXzAsXzQsXzQsXzQsXzQsXzAsXzAsXzAsXzAsXzQsXzQsXzQsXzQsXzAsXzAsXzAsXzAsXzQsXzQsXzQsXzQsXzAsXzAsXzAsXzAsXzQsXzQsXzQsXzQsXzAsXzAsXzAsXzAsXzQsXzQsXzQsXzQsXzAsXzAsXzAsXzAsCisgICAgICBfNixfNixfNixfNixfMixfMCxfMixfMCxfNixfNixfNixfNixfMixfMCxfMixfMCxfNixfNCxfNixfNCxfMCxfMCxfMCxfMCxfNixfNCxfNixfNCxfMCxfMCxfMCxfMCxfNixfNCxfNixfNCxfMCxfMCxfMCxfMCxfNixfNCxfNixfNCxfMCxfMCxfMCxfMCxfNCxfNCxfNCxfNCxfMCxfMCxfMCxfMCxfNCxfNCxfNCxfNCxfMCxfMCxfMCxfMCxfMixfMCxfMixfMCxfMCxfMCxfMCxfMCxfMixfMCxfMixfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCwKKyAgICAgIF83LF80LF82LF80LF8xLF8wLF8wLF8wLF82LF80LF82LF80LF8wLF8wLF8wLF8wLF81LF80LF80LF80LF8xLF8wLF8wLF8wLF80LF80LF80LF80LF8wLF8wLF8wLF8wLF80LF80LF80LF80LF8wLF8wLF8wLF8wLF80LF80LF80LF80LF8wLF8wLF8wLF8wLF80LF80LF80LF80LF8wLF8wLF8wLF8wLF80LF80LF80LF80LF8wLF8wLF8wLF8wLF8xLF8wLF8wLF8wLF8xLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8xLF8wLF8wLF8wLF8xLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLAorICAgICAgXzIsXzAsXzIsXzAsXzAsXzAsXzAsXzAsXzIsXzAsXzIsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsCisgICAgICBfYyxfZCxfZCxfYyxfMSxfMyxfMSxfMixfNSxfNCxfNCxfNCxfMSxfMixfMCxfMixfYyxfZixfZCxfZSxfMyxfMSxfMyxfMCxfNSxfNixfNCxfNixfMyxfMCxfMixfMCxfZCxfZSxfYyxfZSxfMyxfMCxfMixfMCxfNCxfNixfNCxfNixfMixfMCxfMixfMCxfZixfYyxfZSxfYyxfMSxfMCxfMCxfMCxfNixfNCxfNixfNCxfMCxfMCxfMCxfMCxfOCxfYixfOSxfYSxfMyxfMSxfMyxfMCxfMSxfMixfMCxfMixfMyxfMCxfMixfMCxfYSxfOSxfYixfOCxfMSxfMSxfMSxfMCxfMyxfMCxfMixfMCxfMSxfMCxfMCxfMCxfYixfOCxfYSxfOCxfMSxfMCxfMCxfMCxfMixfMCxfMixfMCxfMCxfMCxfMCxfMCxfOSxfOCxfOCxfOCxfMSxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCwKKyAgICAgIF8xLF8yLF8wLF8yLF8zLF8yLF8yLF8yLF8wLF8yLF8wLF8yLF8yLF8yLF8yLF8yLF8zLF8yLF8yLF8yLF8zLF8wLF8yLF8wLF8yLF8yLF8yLF8yLF8yLF8wLF8yLF8wLF8yLF8yLF8yLF8yLF8yLF8wLF8yLF8wLF8yLF8yLF8yLF8yLF8yLF8wLF8yLF8wLF8yLF8wLF8yLF8wLF8wLF8wLF8wLF8wLF8yLF8wLF8yLF8wLF8wLF8wLF8wLF8wLF8zLF8yLF8yLF8yLF8zLF8wLF8yLF8wLF8yLF8yLF8yLF8yLF8yLF8wLF8yLF8wLF8zLF8wLF8yLF8wLF8xLF8wLF8wLF8wLF8yLF8wLF8yLF8wLF8wLF8wLF8wLF8wLF8yLF8wLF8yLF8wLF8wLF8wLF8wLF8wLF8yLF8wLF8yLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLAorICAgICAgXzgsX2IsXzksX2EsXzMsXzEsXzMsXzAsXzEsXzIsXzAsXzIsXzMsXzAsXzIsXzAsX2EsXzksX2IsXzgsXzEsXzEsXzEsXzAsXzMsXzAsXzIsXzAsXzEsXzAsXzAsXzAsX2IsXzgsX2EsXzgsXzEsXzAsXzAsXzAsXzIsXzAsXzIsXzAsXzAsXzAsXzAsXzAsXzksXzgsXzgsXzgsXzEsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsX2EsXzksX2IsXzgsXzEsXzEsXzEsXzAsXzMsXzAsXzIsXzAsXzEsXzAsXzAsXzAsXzgsXzksXzksXzgsXzEsXzEsXzEsXzAsXzEsXzAsXzAsXzAsXzEsXzAsXzAsXzAsXzksXzgsXzgsXzgsXzEsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzksXzgsXzgsXzgsXzEsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsCisgICAgICBfMyxfMixfMixfMixfMyxfMCxfMixfMCxfMixfMixfMixfMixfMixfMCxfMixfMCxfMyxfMCxfMixfMCxfMSxfMCxfMCxfMCxfMixfMCxfMixfMCxfMCxfMCxfMCxfMCxfMixfMCxfMixfMCxfMCxfMCxfMCxfMCxfMixfMCxfMixfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMyxfMCxfMixfMCxfMSxfMCxfMCxfMCxfMixfMCxfMixfMCxfMCxfMCxfMCxfMCxfMSxfMCxfMCxfMCxfMSxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCwKKyAgICAgIF81LF82LF80LF82LF8zLF8wLF8yLF8wLF80LF82LF80LF82LF8yLF8wLF8yLF8wLF83LF80LF82LF80LF8xLF8wLF8wLF8wLF82LF80LF82LF80LF8wLF8wLF8wLF8wLF82LF80LF82LF80LF8wLF8wLF8wLF8wLF82LF80LF82LF80LF8wLF8wLF8wLF8wLF80LF80LF80LF80LF8wLF8wLF8wLF8wLF80LF80LF80LF80LF8wLF8wLF8wLF8wLF8zLF8wLF8yLF8wLF8xLF8wLF8wLF8wLF8yLF8wLF8yLF8wLF8wLF8wLF8wLF8wLF8xLF8wLF8wLF8wLF8xLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLAorICAgICAgXzIsXzIsXzIsXzIsXzIsXzAsXzIsXzAsXzIsXzIsXzIsXzIsXzIsXzAsXzIsXzAsXzIsXzAsXzIsXzAsXzAsXzAsXzAsXzAsXzIsXzAsXzIsXzAsXzAsXzAsXzAsXzAsXzIsXzAsXzIsXzAsXzAsXzAsXzAsXzAsXzIsXzAsXzIsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzIsXzAsXzIsXzAsXzAsXzAsXzAsXzAsXzIsXzAsXzIsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsCisgICAgICBfMyxfMCxfMixfMCxfMSxfMCxfMCxfMCxfMixfMCxfMixfMCxfMCxfMCxfMCxfMCxfMSxfMCxfMCxfMCxfMSxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMSxfMCxfMCxfMCxfMSxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMSxfMCxfMCxfMCxfMSxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCwKKyAgICAgIF8yLF8wLF8yLF8wLF8wLF8wLF8wLF8wLF8yLF8wLF8yLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLAorICAgICAgXzAsXzAsXzAsXzAsXzgsXzgsXzgsXzksXzgsXzgsXzgsXzksXzAsXzEsXzEsXzEsXzAsXzAsXzAsXzAsXzgsX2EsXzgsX2IsXzgsXzgsXzgsXzksXzAsXzMsXzEsXzMsXzAsXzAsXzAsXzEsXzgsX2IsXzksX2IsXzgsXzksXzksXzgsXzEsXzMsXzEsXzIsXzAsXzIsXzAsXzMsX2EsXzksX2IsXzksXzgsX2IsXzksX2EsXzMsXzEsXzMsXzAsXzAsXzAsXzAsXzAsX2MsX2UsX2MsX2YsXzgsXzgsXzgsXzksXzQsXzcsXzUsXzcsXzAsXzIsXzAsXzIsX2UsX2MsX2UsX2QsXzgsX2EsXzgsX2IsXzYsXzUsXzcsXzUsXzAsXzIsXzAsXzMsX2UsX2QsX2YsX2QsXzgsX2IsXzksX2EsXzcsXzUsXzcsXzQsXzIsXzAsXzIsXzEsX2MsX2QsX2QsX2QsX2EsXzksX2IsXzgsXzUsXzUsXzUsXzQsCisgICAgICBfOCxfOCxfOCxfOSxfNCxfNyxfNSxfNyxfMCxfMSxfMSxfMCxfNSxfNyxfNSxfNixfOCxfYSxfOCxfYixfNixfNyxfNyxfNyxfMCxfMyxfMSxfMixfNyxfNyxfNyxfNixfOCxfYixfOSxfYSxfNyxfNyxfNyxfNixfMSxfMixfMCxfMixfNyxfNixfNixfNixfYSxfYixfYixfYSxfNyxfNSxfNyxfNCxfMyxfMixfMixfMixfNyxfNCxfNixfNCxfYyxfZSxfYyxfZixfMixfMyxfMyxfMyxfNCxfNyxfNSxfNixfMyxfMyxfMyxfMixfZSxfZSxfZSxfZixfMixfMSxfMyxfMSxfNixfNyxfNyxfNixfMyxfMSxfMyxfMCxfZSxfZixfZixfZSxfMyxfMSxfMyxfMCxfNyxfNixfNixfNixfMyxfMCxfMixfMCxfZSxfZCxfZixfYyxfMSxfMSxfMSxfMCxfNyxfNCxfNixfNCxfMSxfMCxfMCxfMCwKKyAgICAgIF8wLF8wLF8wLF8wLF9jLF9lLF9jLF9mLF84LF84LF84LF85LF80LF83LF81LF83LF8wLF8yLF8wLF8yLF9lLF9jLF9lLF9kLF84LF9hLF84LF9iLF82LF81LF83LF81LF8wLF8yLF8wLF8zLF9lLF9kLF9mLF9kLF84LF9iLF85LF9hLF83LF81LF83LF80LF8yLF8wLF8yLF8xLF9jLF9kLF9kLF9kLF9hLF85LF9iLF84LF81LF81LF81LF80LF80LF82LF80LF82LF9hLF84LF9hLF85LF9jLF9lLF9jLF9mLF8yLF8xLF8zLF8xLF82LF80LF82LF80LF84LF84LF84LF85LF9lLF9jLF9lLF9kLF8wLF8xLF8xLF8xLF82LF80LF82LF81LF84LF85LF85LF85LF9lLF9kLF9mLF9jLF8xLF8xLF8xLF8wLF80LF80LF80LF81LF84LF85LF85LF85LF9jLF9kLF9kLF9jLF8xLF8xLF8xLF8wLAorICAgICAgX2MsX2UsX2MsX2YsXzIsXzMsXzMsXzMsXzQsXzcsXzUsXzYsXzMsXzMsXzMsXzIsX2UsX2UsX2UsX2YsXzIsXzEsXzMsXzEsXzYsXzcsXzcsXzYsXzMsXzEsXzMsXzAsX2UsX2YsX2YsX2UsXzMsXzEsXzMsXzAsXzcsXzYsXzYsXzYsXzMsXzAsXzIsXzAsX2UsX2QsX2YsX2MsXzEsXzEsXzEsXzAsXzcsXzQsXzYsXzQsXzEsXzAsXzAsXzAsX2EsX2EsX2EsX2IsXzIsXzEsXzMsXzEsXzIsXzMsXzMsXzIsXzMsXzEsXzMsXzAsX2EsXzgsX2EsXzksXzAsXzEsXzEsXzEsXzIsXzEsXzMsXzAsXzEsXzEsXzEsXzAsX2EsXzksX2IsXzgsXzEsXzEsXzEsXzAsXzMsXzAsXzIsXzAsXzEsXzAsXzAsXzAsXzgsXzksXzksXzgsXzEsXzEsXzEsXzAsXzEsXzAsXzAsXzAsXzEsXzAsXzAsXzAsCisgICAgICBfOCxfOCxfOCxfOSxfNCxfNyxfNSxfNyxfMCxfMSxfMSxfMCxfNSxfNyxfNSxfNixfOCxfYSxfOCxfYixfNixfNSxfNyxfNSxfMCxfMyxfMSxfMixfNyxfNSxfNyxfNCxfOCxfYixfOSxfYSxfNyxfNSxfNyxfNCxfMSxfMixfMCxfMixfNyxfNCxfNixfNCxfYSxfOSxfYixfOCxfNSxfNSxfNSxfNCxfMyxfMCxfMixfMCxfNSxfNCxfNCxfNCxfYyxfZSxfYyxfZixfNixfNSxfNyxfNSxfNCxfNyxfNSxfNixfNyxfNSxfNyxfNCxfZSxfYyxfZSxfZCxfNCxfNSxfNSxfNSxfNixfNSxfNyxfNCxfNSxfNSxfNSxfNCxfZSxfZCxfZixfYyxfNSxfNSxfNSxfNCxfNyxfNCxfNixfNCxfNSxfNCxfNCxfNCxfYyxfZCxfZCxfYyxfNSxfNSxfNSxfNCxfNSxfNCxfNCxfNCxfNSxfNCxfNCxfNCwKKyAgICAgIF80LF83LF81LF82LF83LF83LF83LF82LF81LF82LF80LF82LF83LF82LF82LF82LF82LF83LF83LF82LF83LF81LF83LF80LF83LF82LF82LF82LF83LF80LF82LF80LF83LF82LF82LF82LF83LF80LF82LF80LF82LF82LF82LF82LF82LF80LF82LF80LF83LF80LF82LF80LF81LF80LF80LF80LF82LF80LF82LF80LF80LF80LF80LF80LF82LF83LF83LF82LF8zLF8xLF8zLF8wLF83LF82LF82LF82LF8zLF8wLF8yLF8wLF82LF81LF83LF80LF8xLF8xLF8xLF8wLF83LF80LF82LF80LF8xLF8wLF8wLF8wLF83LF80LF82LF80LF8xLF8wLF8wLF8wLF82LF80LF82LF80LF8wLF8wLF8wLF8wLF81LF80LF80LF80LF8xLF8wLF8wLF8wLF80LF80LF80LF80LF8wLF8wLF8wLF8wLAorICAgICAgX2MsX2UsX2MsX2YsXzYsXzUsXzcsXzUsXzQsXzcsXzUsXzYsXzcsXzUsXzcsXzQsX2UsX2MsX2UsX2QsXzQsXzUsXzUsXzUsXzYsXzUsXzcsXzQsXzUsXzUsXzUsXzQsX2UsX2QsX2YsX2MsXzUsXzUsXzUsXzQsXzcsXzQsXzYsXzQsXzUsXzQsXzQsXzQsX2MsX2QsX2QsX2MsXzUsXzUsXzUsXzQsXzUsXzQsXzQsXzQsXzUsXzQsXzQsXzQsX2UsX2MsX2UsX2QsXzAsXzEsXzEsXzEsXzYsXzUsXzcsXzQsXzEsXzEsXzEsXzAsX2MsX2MsX2MsX2QsXzAsXzEsXzEsXzEsXzQsXzUsXzUsXzQsXzEsXzEsXzEsXzAsX2MsX2QsX2QsX2MsXzEsXzEsXzEsXzAsXzUsXzQsXzQsXzQsXzEsXzAsXzAsXzAsX2MsX2QsX2QsX2MsXzEsXzEsXzEsXzAsXzUsXzQsXzQsXzQsXzEsXzAsXzAsXzAsCisgICAgICBfNixfNyxfNyxfNixfMyxfMSxfMyxfMCxfNyxfNixfNixfNixfMyxfMCxfMixfMCxfNixfNSxfNyxfNCxfMSxfMSxfMSxfMCxfNyxfNCxfNixfNCxfMSxfMCxfMCxfMCxfNyxfNCxfNixfNCxfMSxfMCxfMCxfMCxfNixfNCxfNixfNCxfMCxfMCxfMCxfMCxfNSxfNCxfNCxfNCxfMSxfMCxfMCxfMCxfNCxfNCxfNCxfNCxfMCxfMCxfMCxfMCxfMixfMSxfMyxfMCxfMSxfMSxfMSxfMCxfMyxfMCxfMixfMCxfMSxfMCxfMCxfMCxfMCxfMSxfMSxfMCxfMSxfMSxfMSxfMCxfMSxfMCxfMCxfMCxfMSxfMCxfMCxfMCxfMSxfMCxfMCxfMCxfMSxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMSxfMCxfMCxfMCxfMSxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCwKKyAgICAgIF8wLF8wLF8wLF8wLF9jLF9jLF9jLF9kLF84LF84LF84LF85LF80LF81LF81LF81LF8wLF8wLF8wLF8wLF9jLF9lLF9jLF9mLF84LF84LF84LF85LF80LF83LF81LF83LF8wLF8wLF8wLF8xLF9jLF9mLF9kLF9mLF84LF85LF85LF84LF81LF83LF81LF82LF8wLF8yLF8wLF8zLF9lLF9kLF9mLF9kLF84LF9iLF85LF9hLF83LF81LF83LF80LF80LF80LF80LF80LF84LF9hLF84LF9iLF9jLF9jLF9jLF9kLF8wLF8zLF8xLF8zLF80LF82LF80LF82LF9hLF84LF9hLF85LF9jLF9lLF9jLF9mLF8yLF8xLF8zLF8xLF80LF82LF80LF83LF9hLF85LF9iLF85LF9jLF9mLF9kLF9lLF8zLF8xLF8zLF8wLF82LF80LF82LF81LF84LF85LF85LF85LF9lLF9kLF9mLF9jLF8xLF8xLF8xLF8wLAorICAgICAgX2MsX2MsX2MsX2QsXzAsXzMsXzEsXzMsXzQsXzUsXzUsXzQsXzEsXzMsXzEsXzIsX2MsX2UsX2MsX2YsXzIsXzMsXzMsXzMsXzQsXzcsXzUsXzYsXzMsXzMsXzMsXzIsX2MsX2YsX2QsX2UsXzMsXzMsXzMsXzIsXzUsXzYsXzQsXzYsXzMsXzIsXzIsXzIsX2UsX2YsX2YsX2UsXzMsXzEsXzMsXzAsXzcsXzYsXzYsXzYsXzMsXzAsXzIsXzAsXzgsX2EsXzgsX2IsXzIsXzMsXzMsXzMsXzAsXzMsXzEsXzIsXzMsXzMsXzMsXzIsX2EsX2EsX2EsX2IsXzIsXzEsXzMsXzEsXzIsXzMsXzMsXzIsXzMsXzEsXzMsXzAsX2EsX2IsX2IsX2EsXzMsXzEsXzMsXzAsXzMsXzIsXzIsXzIsXzMsXzAsXzIsXzAsX2EsXzksX2IsXzgsXzEsXzEsXzEsXzAsXzMsXzAsXzIsXzAsXzEsXzAsXzAsXzAsCisgICAgICBfNCxfNCxfNCxfNCxfOCxfYSxfOCxfYixfYyxfYyxfYyxfZCxfMCxfMyxfMSxfMyxfNCxfNixfNCxfNixfYSxfOCxfYSxfOSxfYyxfZSxfYyxfZixfMixfMSxfMyxfMSxfNCxfNixfNCxfNyxfYSxfOSxfYixfOSxfYyxfZixfZCxfZSxfMyxfMSxfMyxfMCxfNixfNCxfNixfNSxfOCxfOSxfOSxfOSxfZSxfZCxfZixfYyxfMSxfMSxfMSxfMCxfMCxfMixfMCxfMixfYSxfOCxfYSxfOSxfOCxfYSxfOCxfYixfMixfMSxfMyxfMSxfMixfMCxfMixfMCxfOCxfOCxfOCxfOSxfYSxfOCxfYSxfOSxfMCxfMSxfMSxfMSxfMixfMCxfMixfMSxfOCxfOSxfOSxfOSxfYSxfOSxfYixfOCxfMSxfMSxfMSxfMCxfMCxfMCxfMCxfMSxfOCxfOSxfOSxfOSxfOCxfOSxfOSxfOCxfMSxfMSxfMSxfMCwKKyAgICAgIF84LF9hLF84LF9iLF8yLF8zLF8zLF8zLF8wLF8zLF8xLF8yLF8zLF8zLF8zLF8yLF9hLF9hLF9hLF9iLF8yLF8xLF8zLF8xLF8yLF8zLF8zLF8yLF8zLF8xLF8zLF8wLF9hLF9iLF9iLF9hLF8zLF8xLF8zLF8wLF8zLF8yLF8yLF8yLF8zLF8wLF8yLF8wLF9hLF85LF9iLF84LF8xLF8xLF8xLF8wLF8zLF8wLF8yLF8wLF8xLF8wLF8wLF8wLF9hLF9hLF9hLF9iLF8yLF8xLF8zLF8xLF8yLF8zLF8zLF8yLF8zLF8xLF8zLF8wLF9hLF84LF9hLF85LF8wLF8xLF8xLF8xLF8yLF8xLF8zLF8wLF8xLF8xLF8xLF8wLF9hLF85LF9iLF84LF8xLF8xLF8xLF8wLF8zLF8wLF8yLF8wLF8xLF8wLF8wLF8wLF84LF85LF85LF84LF8xLF8xLF8xLF8wLF8xLF8wLF8wLF8wLF8xLF8wLF8wLF8wLAorICAgICAgX2MsX2MsX2MsX2QsXzQsXzcsXzUsXzcsXzQsXzUsXzUsXzQsXzUsXzcsXzUsXzYsX2MsX2UsX2MsX2YsXzYsXzUsXzcsXzUsXzQsXzcsXzUsXzYsXzcsXzUsXzcsXzQsX2MsX2YsX2QsX2UsXzcsXzUsXzcsXzQsXzUsXzYsXzQsXzYsXzcsXzQsXzYsXzQsX2UsX2QsX2YsX2MsXzUsXzUsXzUsXzQsXzcsXzQsXzYsXzQsXzUsXzQsXzQsXzQsX2MsX2UsX2MsX2YsXzIsXzEsXzMsXzEsXzQsXzcsXzUsXzYsXzMsXzEsXzMsXzAsX2UsX2MsX2UsX2QsXzAsXzEsXzEsXzEsXzYsXzUsXzcsXzQsXzEsXzEsXzEsXzAsX2UsX2QsX2YsX2MsXzEsXzEsXzEsXzAsXzcsXzQsXzYsXzQsXzEsXzAsXzAsXzAsX2MsX2QsX2QsX2MsXzEsXzEsXzEsXzAsXzUsXzQsXzQsXzQsXzEsXzAsXzAsXzAsCisgICAgICBfNCxfNyxfNSxfNixfMyxfMyxfMyxfMixfNSxfNixfNCxfNixfMyxfMixfMixfMixfNixfNyxfNyxfNixfMyxfMSxfMyxfMCxfNyxfNixfNixfNixfMyxfMCxfMixfMCxfNyxfNixfNixfNixfMyxfMCxfMixfMCxfNixfNixfNixfNixfMixfMCxfMixfMCxfNyxfNCxfNixfNCxfMSxfMCxfMCxfMCxfNixfNCxfNixfNCxfMCxfMCxfMCxfMCxfMixfMyxfMyxfMixfMyxfMSxfMyxfMCxfMyxfMixfMixfMixfMyxfMCxfMixfMCxfMixfMSxfMyxfMCxfMSxfMSxfMSxfMCxfMyxfMCxfMixfMCxfMSxfMCxfMCxfMCxfMyxfMCxfMixfMCxfMSxfMCxfMCxfMCxfMixfMCxfMixfMCxfMCxfMCxfMCxfMCxfMSxfMCxfMCxfMCxfMSxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCwKKyAgICAgIF9jLF9lLF9jLF9mLF8yLF8xLF8zLF8xLF80LF83LF81LF82LF8zLF8xLF8zLF8wLF9lLF9jLF9lLF9kLF8wLF8xLF8xLF8xLF82LF81LF83LF80LF8xLF8xLF8xLF8wLF9lLF9kLF9mLF9jLF8xLF8xLF8xLF8wLF83LF80LF82LF80LF8xLF8wLF8wLF8wLF9jLF9kLF9kLF9jLF8xLF8xLF8xLF8wLF81LF80LF80LF80LF8xLF8wLF8wLF8wLF9hLF84LF9hLF85LF8wLF8xLF8xLF8xLF8yLF8xLF8zLF8wLF8xLF8xLF8xLF8wLF84LF84LF84LF85LF8wLF8xLF8xLF8xLF8wLF8xLF8xLF8wLF8xLF8xLF8xLF8wLF84LF85LF85LF84LF8xLF8xLF8xLF8wLF8xLF8wLF8wLF8wLF8xLF8wLF8wLF8wLF84LF85LF85LF84LF8xLF8xLF8xLF8wLF8xLF8wLF8wLF8wLF8xLF8wLF8wLF8wLAorICAgICAgXzIsXzMsXzMsXzIsXzMsXzEsXzMsXzAsXzMsXzIsXzIsXzIsXzMsXzAsXzIsXzAsXzIsXzEsXzMsXzAsXzEsXzEsXzEsXzAsXzMsXzAsXzIsXzAsXzEsXzAsXzAsXzAsXzMsXzAsXzIsXzAsXzEsXzAsXzAsXzAsXzIsXzAsXzIsXzAsXzAsXzAsXzAsXzAsXzEsXzAsXzAsXzAsXzEsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzIsXzEsXzMsXzAsXzEsXzEsXzEsXzAsXzMsXzAsXzIsXzAsXzEsXzAsXzAsXzAsXzAsXzEsXzEsXzAsXzEsXzEsXzEsXzAsXzEsXzAsXzAsXzAsXzEsXzAsXzAsXzAsXzEsXzAsXzAsXzAsXzEsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzEsXzAsXzAsXzAsXzEsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsCisgICAgICBfOCxfOCxfOCxfOCxfNCxfNCxfNCxfNSxfMCxfMCxfMCxfMSxfNCxfNSxfNSxfNSxfOCxfOCxfOCxfOCxfNCxfNixfNCxfNyxfMCxfMCxfMCxfMSxfNCxfNyxfNSxfNyxfOCxfOCxfOCxfOSxfNCxfNyxfNSxfNyxfMCxfMSxfMSxfMCxfNSxfNyxfNSxfNixfOCxfYSxfOCxfYixfNixfNSxfNyxfNSxfMCxfMyxfMSxfMixfNyxfNSxfNyxfNCxfYyxfYyxfYyxfYyxfMCxfMixfMCxfMyxfNCxfNCxfNCxfNSxfMCxfMyxfMSxfMyxfYyxfZSxfYyxfZSxfMixfMCxfMixfMSxfNCxfNixfNCxfNyxfMixfMSxfMyxfMSxfYyxfZSxfYyxfZixfMixfMSxfMyxfMSxfNCxfNyxfNSxfNixfMyxfMSxfMyxfMCxfZSxfYyxfZSxfZCxfMCxfMSxfMSxfMSxfNixfNSxfNyxfNCxfMSxfMSxfMSxfMCwKKyAgICAgIF80LF80LF80LF81LF8wLF8zLF8xLF8zLF80LF81LF81LF80LF8xLF8zLF8xLF8yLF80LF82LF80LF83LF8yLF8zLF8zLF8zLF80LF83LF81LF82LF8zLF8zLF8zLF8yLF80LF83LF81LF82LF8zLF8zLF8zLF8yLF81LF82LF80LF82LF8zLF8yLF8yLF8yLF82LF83LF83LF82LF8zLF8xLF8zLF8wLF83LF82LF82LF82LF8zLF8wLF8yLF8wLF8wLF8yLF8wLF8zLF8yLF8zLF8zLF8zLF8wLF8zLF8xLF8yLF8zLF8zLF8zLF8yLF8yLF8yLF8yLF8zLF8yLF8xLF8zLF8xLF8yLF8zLF8zLF8yLF8zLF8xLF8zLF8wLF8yLF8zLF8zLF8yLF8zLF8xLF8zLF8wLF8zLF8yLF8yLF8yLF8zLF8wLF8yLF8wLF8yLF8xLF8zLF8wLF8xLF8xLF8xLF8wLF8zLF8wLF8yLF8wLF8xLF8wLF8wLF8wLAorICAgICAgX2MsX2MsX2MsX2MsXzAsXzIsXzAsXzMsXzQsXzQsXzQsXzUsXzAsXzMsXzEsXzMsX2MsX2UsX2MsX2UsXzIsXzAsXzIsXzEsXzQsXzYsXzQsXzcsXzIsXzEsXzMsXzEsX2MsX2UsX2MsX2YsXzIsXzEsXzMsXzEsXzQsXzcsXzUsXzYsXzMsXzEsXzMsXzAsX2UsX2MsX2UsX2QsXzAsXzEsXzEsXzEsXzYsXzUsXzcsXzQsXzEsXzEsXzEsXzAsXzgsX2EsXzgsX2EsXzIsXzAsXzIsXzEsXzAsXzIsXzAsXzMsXzIsXzEsXzMsXzEsX2EsXzgsX2EsXzgsXzAsXzAsXzAsXzEsXzIsXzAsXzIsXzEsXzAsXzEsXzEsXzEsX2EsXzgsX2EsXzksXzAsXzEsXzEsXzEsXzIsXzEsXzMsXzAsXzEsXzEsXzEsXzAsXzgsXzgsXzgsXzksXzAsXzEsXzEsXzEsXzAsXzEsXzEsXzAsXzEsXzEsXzEsXzAsCisgICAgICBfMCxfMixfMCxfMyxfMixfMyxfMyxfMyxfMCxfMyxfMSxfMixfMyxfMyxfMyxfMixfMixfMixfMixfMyxfMixfMSxfMyxfMSxfMixfMyxfMyxfMixfMyxfMSxfMyxfMCxfMixfMyxfMyxfMixfMyxfMSxfMyxfMCxfMyxfMixfMixfMixfMyxfMCxfMixfMCxfMixfMSxfMyxfMCxfMSxfMSxfMSxfMCxfMyxfMCxfMixfMCxfMSxfMCxfMCxfMCxfMixfMixfMixfMyxfMixfMSxfMyxfMSxfMixfMyxfMyxfMixfMyxfMSxfMyxfMCxfMixfMCxfMixfMSxfMCxfMSxfMSxfMSxfMixfMSxfMyxfMCxfMSxfMSxfMSxfMCxfMixfMSxfMyxfMCxfMSxfMSxfMSxfMCxfMyxfMCxfMixfMCxfMSxfMCxfMCxfMCxfMCxfMSxfMSxfMCxfMSxfMSxfMSxfMCxfMSxfMCxfMCxfMCxfMSxfMCxfMCxfMCwKKyAgICAgIF80LF80LF80LF81LF80LF83LF81LF83LF80LF81LF81LF80LF81LF83LF81LF82LF80LF82LF80LF83LF82LF81LF83LF81LF80LF83LF81LF82LF83LF81LF83LF80LF80LF83LF81LF82LF83LF81LF83LF80LF81LF82LF80LF82LF83LF80LF82LF80LF82LF81LF83LF80LF81LF81LF81LF80LF83LF80LF82LF80LF81LF80LF80LF80LF80LF82LF80LF83LF8yLF8xLF8zLF8xLF80LF83LF81LF82LF8zLF8xLF8zLF8wLF82LF80LF82LF81LF8wLF8xLF8xLF8xLF82LF81LF83LF80LF8xLF8xLF8xLF8wLF82LF81LF83LF80LF8xLF8xLF8xLF8wLF83LF80LF82LF80LF8xLF8wLF8wLF8wLF80LF81LF81LF80LF8xLF8xLF8xLF8wLF81LF80LF80LF80LF8xLF8wLF8wLF8wLAorICAgICAgXzQsXzcsXzUsXzYsXzMsXzMsXzMsXzIsXzUsXzYsXzQsXzYsXzMsXzIsXzIsXzIsXzYsXzcsXzcsXzYsXzMsXzEsXzMsXzAsXzcsXzYsXzYsXzYsXzMsXzAsXzIsXzAsXzcsXzYsXzYsXzYsXzMsXzAsXzIsXzAsXzYsXzYsXzYsXzYsXzIsXzAsXzIsXzAsXzcsXzQsXzYsXzQsXzEsXzAsXzAsXzAsXzYsXzQsXzYsXzQsXzAsXzAsXzAsXzAsXzIsXzMsXzMsXzIsXzMsXzEsXzMsXzAsXzMsXzIsXzIsXzIsXzMsXzAsXzIsXzAsXzIsXzEsXzMsXzAsXzEsXzEsXzEsXzAsXzMsXzAsXzIsXzAsXzEsXzAsXzAsXzAsXzMsXzAsXzIsXzAsXzEsXzAsXzAsXzAsXzIsXzAsXzIsXzAsXzAsXzAsXzAsXzAsXzEsXzAsXzAsXzAsXzEsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsCisgICAgICBfNCxfNixfNCxfNyxfMixfMSxfMyxfMSxfNCxfNyxfNSxfNixfMyxfMSxfMyxfMCxfNixfNCxfNixfNSxfMCxfMSxfMSxfMSxfNixfNSxfNyxfNCxfMSxfMSxfMSxfMCxfNixfNSxfNyxfNCxfMSxfMSxfMSxfMCxfNyxfNCxfNixfNCxfMSxfMCxfMCxfMCxfNCxfNSxfNSxfNCxfMSxfMSxfMSxfMCxfNSxfNCxfNCxfNCxfMSxfMCxfMCxfMCxfMixfMCxfMixfMSxfMCxfMSxfMSxfMSxfMixfMSxfMyxfMCxfMSxfMSxfMSxfMCxfMCxfMCxfMCxfMSxfMCxfMSxfMSxfMSxfMCxfMSxfMSxfMCxfMSxfMSxfMSxfMCxfMCxfMSxfMSxfMCxfMSxfMSxfMSxfMCxfMSxfMCxfMCxfMCxfMSxfMCxfMCxfMCxfMCxfMSxfMSxfMCxfMSxfMSxfMSxfMCxfMSxfMCxfMCxfMCxfMSxfMCxfMCxfMCwKKyAgICAgIF8yLF8zLF8zLF8yLF8zLF8xLF8zLF8wLF8zLF8yLF8yLF8yLF8zLF8wLF8yLF8wLF8yLF8xLF8zLF8wLF8xLF8xLF8xLF8wLF8zLF8wLF8yLF8wLF8xLF8wLF8wLF8wLF8zLF8wLF8yLF8wLF8xLF8wLF8wLF8wLF8yLF8wLF8yLF8wLF8wLF8wLF8wLF8wLF8xLF8wLF8wLF8wLF8xLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8yLF8xLF8zLF8wLF8xLF8xLF8xLF8wLF8zLF8wLF8yLF8wLF8xLF8wLF8wLF8wLF8wLF8xLF8xLF8wLF8xLF8xLF8xLF8wLF8xLF8wLF8wLF8wLF8xLF8wLF8wLF8wLF8xLF8wLF8wLF8wLF8xLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8xLF8wLF8wLF8wLF8xLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLAorICAgICAgX2MsX2MsX2MsX2MsXzAsXzAsXzAsXzEsXzQsXzQsXzQsXzUsXzAsXzEsXzEsXzEsX2MsX2MsX2MsX2MsXzAsXzIsXzAsXzMsXzQsXzQsXzQsXzUsXzAsXzMsXzEsXzMsX2MsX2MsX2MsX2QsXzAsXzMsXzEsXzMsXzQsXzUsXzUsXzQsXzEsXzMsXzEsXzIsX2MsX2UsX2MsX2YsXzIsXzEsXzMsXzEsXzQsXzcsXzUsXzYsXzMsXzEsXzMsXzAsXzgsXzgsXzgsXzgsXzAsXzIsXzAsXzMsXzAsXzAsXzAsXzEsXzAsXzMsXzEsXzMsXzgsX2EsXzgsX2EsXzIsXzAsXzIsXzEsXzAsXzIsXzAsXzMsXzIsXzEsXzMsXzEsXzgsX2EsXzgsX2IsXzIsXzEsXzMsXzEsXzAsXzMsXzEsXzIsXzMsXzEsXzMsXzAsX2EsXzgsX2EsXzksXzAsXzEsXzEsXzEsXzIsXzEsXzMsXzAsXzEsXzEsXzEsXzAsCisgICAgICBfMCxfMCxfMCxfMSxfMCxfMyxfMSxfMyxfMCxfMSxfMSxfMCxfMSxfMyxfMSxfMixfMCxfMixfMCxfMyxfMixfMyxfMyxfMyxfMCxfMyxfMSxfMixfMyxfMyxfMyxfMixfMCxfMyxfMSxfMixfMyxfMyxfMyxfMixfMSxfMixfMCxfMixfMyxfMixfMixfMixfMixfMyxfMyxfMixfMyxfMSxfMyxfMCxfMyxfMixfMixfMixfMyxfMCxfMixfMCxfMCxfMixfMCxfMyxfMixfMyxfMyxfMyxfMCxfMyxfMSxfMixfMyxfMyxfMyxfMixfMixfMixfMixfMyxfMixfMSxfMyxfMSxfMixfMyxfMyxfMixfMyxfMSxfMyxfMCxfMixfMyxfMyxfMixfMyxfMSxfMyxfMCxfMyxfMixfMixfMixfMyxfMCxfMixfMCxfMixfMSxfMyxfMCxfMSxfMSxfMSxfMCxfMyxfMCxfMixfMCxfMSxfMCxfMCxfMCwKKyAgICAgIF84LF84LF84LF84LF8wLF8yLF8wLF8zLF8wLF8wLF8wLF8xLF8wLF8zLF8xLF8zLF84LF9hLF84LF9hLF8yLF8wLF8yLF8xLF8wLF8yLF8wLF8zLF8yLF8xLF8zLF8xLF84LF9hLF84LF9iLF8yLF8xLF8zLF8xLF8wLF8zLF8xLF8yLF8zLF8xLF8zLF8wLF9hLF84LF9hLF85LF8wLF8xLF8xLF8xLF8yLF8xLF8zLF8wLF8xLF8xLF8xLF8wLF84LF9hLF84LF9hLF8yLF8wLF8yLF8xLF8wLF8yLF8wLF8zLF8yLF8xLF8zLF8xLF9hLF84LF9hLF84LF8wLF8wLF8wLF8xLF8yLF8wLF8yLF8xLF8wLF8xLF8xLF8xLF9hLF84LF9hLF85LF8wLF8xLF8xLF8xLF8yLF8xLF8zLF8wLF8xLF8xLF8xLF8wLF84LF84LF84LF85LF8wLF8xLF8xLF8xLF8wLF8xLF8xLF8wLF8xLF8xLF8xLF8wLAorICAgICAgXzAsXzIsXzAsXzMsXzIsXzMsXzMsXzMsXzAsXzMsXzEsXzIsXzMsXzMsXzMsXzIsXzIsXzIsXzIsXzMsXzIsXzEsXzMsXzEsXzIsXzMsXzMsXzIsXzMsXzEsXzMsXzAsXzIsXzMsXzMsXzIsXzMsXzEsXzMsXzAsXzMsXzIsXzIsXzIsXzMsXzAsXzIsXzAsXzIsXzEsXzMsXzAsXzEsXzEsXzEsXzAsXzMsXzAsXzIsXzAsXzEsXzAsXzAsXzAsXzIsXzIsXzIsXzMsXzIsXzEsXzMsXzEsXzIsXzMsXzMsXzIsXzMsXzEsXzMsXzAsXzIsXzAsXzIsXzEsXzAsXzEsXzEsXzEsXzIsXzEsXzMsXzAsXzEsXzEsXzEsXzAsXzIsXzEsXzMsXzAsXzEsXzEsXzEsXzAsXzMsXzAsXzIsXzAsXzEsXzAsXzAsXzAsXzAsXzEsXzEsXzAsXzEsXzEsXzEsXzAsXzEsXzAsXzAsXzAsXzEsXzAsXzAsXzAsCisgICAgICBfNCxfNCxfNCxfNSxfMCxfMyxfMSxfMyxfNCxfNSxfNSxfNCxfMSxfMyxfMSxfMixfNCxfNixfNCxfNyxfMixfMSxfMyxfMSxfNCxfNyxfNSxfNixfMyxfMSxfMyxfMCxfNCxfNyxfNSxfNixfMyxfMSxfMyxfMCxfNSxfNixfNCxfNixfMyxfMCxfMixfMCxfNixfNSxfNyxfNCxfMSxfMSxfMSxfMCxfNyxfNCxfNixfNCxfMSxfMCxfMCxfMCxfMCxfMixfMCxfMyxfMixfMSxfMyxfMSxfMCxfMyxfMSxfMixfMyxfMSxfMyxfMCxfMixfMCxfMixfMSxfMCxfMSxfMSxfMSxfMixfMSxfMyxfMCxfMSxfMSxfMSxfMCxfMixfMSxfMyxfMCxfMSxfMSxfMSxfMCxfMyxfMCxfMixfMCxfMSxfMCxfMCxfMCxfMCxfMSxfMSxfMCxfMSxfMSxfMSxfMCxfMSxfMCxfMCxfMCxfMSxfMCxfMCxfMCwKKyAgICAgIF8wLF8zLF8xLF8yLF8zLF8zLF8zLF8yLF8xLF8yLF8wLF8yLF8zLF8yLF8yLF8yLF8yLF8zLF8zLF8yLF8zLF8xLF8zLF8wLF8zLF8yLF8yLF8yLF8zLF8wLF8yLF8wLF8zLF8yLF8yLF8yLF8zLF8wLF8yLF8wLF8yLF8yLF8yLF8yLF8yLF8wLF8yLF8wLF8zLF8wLF8yLF8wLF8xLF8wLF8wLF8wLF8yLF8wLF8yLF8wLF8wLF8wLF8wLF8wLF8yLF8zLF8zLF8yLF8zLF8xLF8zLF8wLF8zLF8yLF8yLF8yLF8zLF8wLF8yLF8wLF8yLF8xLF8zLF8wLF8xLF8xLF8xLF8wLF8zLF8wLF8yLF8wLF8xLF8wLF8wLF8wLF8zLF8wLF8yLF8wLF8xLF8wLF8wLF8wLF8yLF8wLF8yLF8wLF8wLF8wLF8wLF8wLF8xLF8wLF8wLF8wLF8xLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLAorICAgICAgXzAsXzIsXzAsXzMsXzIsXzEsXzMsXzEsXzAsXzMsXzEsXzIsXzMsXzEsXzMsXzAsXzIsXzAsXzIsXzEsXzAsXzEsXzEsXzEsXzIsXzEsXzMsXzAsXzEsXzEsXzEsXzAsXzIsXzEsXzMsXzAsXzEsXzEsXzEsXzAsXzMsXzAsXzIsXzAsXzEsXzAsXzAsXzAsXzAsXzEsXzEsXzAsXzEsXzEsXzEsXzAsXzEsXzAsXzAsXzAsXzEsXzAsXzAsXzAsXzIsXzAsXzIsXzEsXzAsXzEsXzEsXzEsXzIsXzEsXzMsXzAsXzEsXzEsXzEsXzAsXzAsXzAsXzAsXzEsXzAsXzEsXzEsXzEsXzAsXzEsXzEsXzAsXzEsXzEsXzEsXzAsXzAsXzEsXzEsXzAsXzEsXzEsXzEsXzAsXzEsXzAsXzAsXzAsXzEsXzAsXzAsXzAsXzAsXzEsXzEsXzAsXzEsXzEsXzEsXzAsXzEsXzAsXzAsXzAsXzEsXzAsXzAsXzAsCisgICAgICBfMixfMyxfMyxfMixfMyxfMSxfMyxfMCxfMyxfMixfMixfMixfMyxfMCxfMixfMCxfMixfMSxfMyxfMCxfMSxfMSxfMSxfMCxfMyxfMCxfMixfMCxfMSxfMCxfMCxfMCxfMyxfMCxfMixfMCxfMSxfMCxfMCxfMCxfMixfMCxfMixfMCxfMCxfMCxfMCxfMCxfMSxfMCxfMCxfMCxfMSxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMixfMSxfMyxfMCxfMSxfMSxfMSxfMCxfMyxfMCxfMixfMCxfMSxfMCxfMCxfMCxfMCxfMSxfMSxfMCxfMSxfMSxfMSxfMCxfMSxfMCxfMCxfMCxfMSxfMCxfMCxfMCxfMSxfMCxfMCxfMCxfMSxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMSxfMCxfMCxfMCxfMSxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCwKKyAgICAgIF84LF84LF84LF85LF9jLF9mLF9kLF9mLF84LF85LF85LF84LF81LF83LF81LF82LF84LF9hLF84LF9iLF9lLF9kLF9mLF9kLF84LF9iLF85LF9hLF83LF81LF83LF80LF84LF9iLF85LF9hLF9mLF9kLF9mLF9jLF85LF9hLF84LF9hLF83LF80LF82LF80LF9hLF85LF9iLF84LF9kLF9kLF9kLF9jLF9iLF84LF9hLF84LF81LF80LF80LF80LF9jLF9lLF9jLF9mLF9hLF85LF9iLF85LF9jLF9mLF9kLF9lLF8zLF8xLF8zLF8wLF9lLF9jLF9lLF9kLF84LF85LF85LF85LF9lLF9kLF9mLF9jLF8xLF8xLF8xLF8wLF9lLF9kLF9mLF9jLF85LF85LF85LF84LF9mLF9jLF9lLF9jLF8xLF8wLF8wLF8wLF9jLF9kLF9kLF9jLF85LF85LF85LF84LF9kLF9jLF9jLF9jLF8xLF8wLF8wLF8wLAorICAgICAgX2MsX2YsX2QsX2UsXzMsXzMsXzMsXzIsXzUsXzYsXzQsXzYsXzMsXzIsXzIsXzIsX2UsX2YsX2YsX2UsXzMsXzEsXzMsXzAsXzcsXzYsXzYsXzYsXzMsXzAsXzIsXzAsX2YsX2UsX2UsX2UsXzMsXzAsXzIsXzAsXzYsXzYsXzYsXzYsXzIsXzAsXzIsXzAsX2YsX2MsX2UsX2MsXzEsXzAsXzAsXzAsXzYsXzQsXzYsXzQsXzAsXzAsXzAsXzAsX2EsX2IsX2IsX2EsXzMsXzEsXzMsXzAsXzMsXzIsXzIsXzIsXzMsXzAsXzIsXzAsX2EsXzksX2IsXzgsXzEsXzEsXzEsXzAsXzMsXzAsXzIsXzAsXzEsXzAsXzAsXzAsX2IsXzgsX2EsXzgsXzEsXzAsXzAsXzAsXzIsXzAsXzIsXzAsXzAsXzAsXzAsXzAsXzksXzgsXzgsXzgsXzEsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsCisgICAgICBfYyxfZSxfYyxfZixfYSxfOSxfYixfOSxfYyxfZixfZCxfZSxfMyxfMSxfMyxfMCxfZSxfYyxfZSxfZCxfOCxfOSxfOSxfOSxfZSxfZCxfZixfYyxfMSxfMSxfMSxfMCxfZSxfZCxfZixfYyxfOSxfOSxfOSxfOCxfZixfYyxfZSxfYyxfMSxfMCxfMCxfMCxfYyxfZCxfZCxfYyxfOSxfOSxfOSxfOCxfZCxfYyxfYyxfYyxfMSxfMCxfMCxfMCxfYSxfOCxfYSxfOSxfOCxfOSxfOSxfOSxfYSxfOSxfYixfOCxfMSxfMSxfMSxfMCxfOCxfOCxfOCxfOSxfOCxfOSxfOSxfOSxfOCxfOSxfOSxfOCxfMSxfMSxfMSxfMCxfOCxfOSxfOSxfOCxfOSxfOSxfOSxfOCxfOSxfOCxfOCxfOCxfMSxfMCxfMCxfMCxfOCxfOSxfOSxfOCxfOSxfOSxfOSxfOCxfOSxfOCxfOCxfOCxfMSxfMCxfMCxfMCwKKyAgICAgIF9hLF9iLF9iLF9hLF8zLF8xLF8zLF8wLF8zLF8yLF8yLF8yLF8zLF8wLF8yLF8wLF9hLF85LF9iLF84LF8xLF8xLF8xLF8wLF8zLF8wLF8yLF8wLF8xLF8wLF8wLF8wLF9iLF84LF9hLF84LF8xLF8wLF8wLF8wLF8yLF8wLF8yLF8wLF8wLF8wLF8wLF8wLF85LF84LF84LF84LF8xLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF9hLF85LF9iLF84LF8xLF8xLF8xLF8wLF8zLF8wLF8yLF8wLF8xLF8wLF8wLF8wLF84LF85LF85LF84LF8xLF8xLF8xLF8wLF8xLF8wLF8wLF8wLF8xLF8wLF8wLF8wLF85LF84LF84LF84LF8xLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF85LF84LF84LF84LF8xLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLAorICAgICAgX2MsX2YsX2QsX2UsXzcsXzUsXzcsXzQsXzUsXzYsXzQsXzYsXzcsXzQsXzYsXzQsX2UsX2QsX2YsX2MsXzUsXzUsXzUsXzQsXzcsXzQsXzYsXzQsXzUsXzQsXzQsXzQsX2YsX2MsX2UsX2MsXzUsXzQsXzQsXzQsXzYsXzQsXzYsXzQsXzQsXzQsXzQsXzQsX2QsX2MsX2MsX2MsXzUsXzQsXzQsXzQsXzQsXzQsXzQsXzQsXzQsXzQsXzQsXzQsX2UsX2QsX2YsX2MsXzEsXzEsXzEsXzAsXzcsXzQsXzYsXzQsXzEsXzAsXzAsXzAsX2MsX2QsX2QsX2MsXzEsXzEsXzEsXzAsXzUsXzQsXzQsXzQsXzEsXzAsXzAsXzAsX2QsX2MsX2MsX2MsXzEsXzAsXzAsXzAsXzQsXzQsXzQsXzQsXzAsXzAsXzAsXzAsX2QsX2MsX2MsX2MsXzEsXzAsXzAsXzAsXzQsXzQsXzQsXzQsXzAsXzAsXzAsXzAsCisgICAgICBfNyxfNixfNixfNixfMyxfMCxfMixfMCxfNixfNixfNixfNixfMixfMCxfMixfMCxfNyxfNCxfNixfNCxfMSxfMCxfMCxfMCxfNixfNCxfNixfNCxfMCxfMCxfMCxfMCxfNixfNCxfNixfNCxfMCxfMCxfMCxfMCxfNixfNCxfNixfNCxfMCxfMCxfMCxfMCxfNCxfNCxfNCxfNCxfMCxfMCxfMCxfMCxfNCxfNCxfNCxfNCxfMCxfMCxfMCxfMCxfMyxfMCxfMixfMCxfMSxfMCxfMCxfMCxfMixfMCxfMixfMCxfMCxfMCxfMCxfMCxfMSxfMCxfMCxfMCxfMSxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCwKKyAgICAgIF9lLF9kLF9mLF9jLF8xLF8xLF8xLF8wLF83LF80LF82LF80LF8xLF8wLF8wLF8wLF9jLF9kLF9kLF9jLF8xLF8xLF8xLF8wLF81LF80LF80LF80LF8xLF8wLF8wLF8wLF9kLF9jLF9jLF9jLF8xLF8wLF8wLF8wLF80LF80LF80LF80LF8wLF8wLF8wLF8wLF9kLF9jLF9jLF9jLF8xLF8wLF8wLF8wLF80LF80LF80LF80LF8wLF8wLF8wLF8wLF84LF85LF85LF84LF8xLF8xLF8xLF8wLF8xLF8wLF8wLF8wLF8xLF8wLF8wLF8wLF84LF85LF85LF84LF8xLF8xLF8xLF8wLF8xLF8wLF8wLF8wLF8xLF8wLF8wLF8wLF85LF84LF84LF84LF8xLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF85LF84LF84LF84LF8xLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLAorICAgICAgXzMsXzAsXzIsXzAsXzEsXzAsXzAsXzAsXzIsXzAsXzIsXzAsXzAsXzAsXzAsXzAsXzEsXzAsXzAsXzAsXzEsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzEsXzAsXzAsXzAsXzEsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzEsXzAsXzAsXzAsXzEsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsCisgICAgICBfYyxfYyxfYyxfZCxfOCxfYixfOSxfYixfYyxfZCxfZCxfYyxfMSxfMyxfMSxfMixfYyxfZSxfYyxfZixfYSxfOSxfYixfOSxfYyxfZixfZCxfZSxfMyxfMSxfMyxfMCxfYyxfZixfZCxfZSxfYixfOSxfYixfOCxfZCxfZSxfYyxfZSxfMyxfMCxfMixfMCxfZSxfZCxfZixfYyxfOSxfOSxfOSxfOCxfZixfYyxfZSxfYyxfMSxfMCxfMCxfMCxfOCxfYSxfOCxfYixfYSxfOSxfYixfOSxfOCxfYixfOSxfYSxfMyxfMSxfMyxfMCxfYSxfOCxfYSxfOSxfOCxfOSxfOSxfOSxfYSxfOSxfYixfOCxfMSxfMSxfMSxfMCxfYSxfOSxfYixfOCxfOSxfOSxfOSxfOCxfYixfOCxfYSxfOCxfMSxfMCxfMCxfMCxfOCxfOSxfOSxfOCxfOSxfOSxfOSxfOCxfOSxfOCxfOCxfOCxfMSxfMCxfMCxfMCwKKyAgICAgIF84LF9iLF85LF9hLF8zLF8zLF8zLF8yLF8xLF8yLF8wLF8yLF8zLF8yLF8yLF8yLF9hLF9iLF9iLF9hLF8zLF8xLF8zLF8wLF8zLF8yLF8yLF8yLF8zLF8wLF8yLF8wLF9iLF9hLF9hLF9hLF8zLF8wLF8yLF8wLF8yLF8yLF8yLF8yLF8yLF8wLF8yLF8wLF9iLF84LF9hLF84LF8xLF8wLF8wLF8wLF8yLF8wLF8yLF8wLF8wLF8wLF8wLF8wLF9hLF9iLF9iLF9hLF8zLF8xLF8zLF8wLF8zLF8yLF8yLF8yLF8zLF8wLF8yLF8wLF9hLF85LF9iLF84LF8xLF8xLF8xLF8wLF8zLF8wLF8yLF8wLF8xLF8wLF8wLF8wLF9iLF84LF9hLF84LF8xLF8wLF8wLF8wLF8yLF8wLF8yLF8wLF8wLF8wLF8wLF8wLF85LF84LF84LF84LF8xLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLAorICAgICAgXzgsX2EsXzgsX2IsX2EsXzksX2IsXzksXzgsX2IsXzksX2EsXzMsXzEsXzMsXzAsX2EsXzgsX2EsXzksXzgsXzksXzksXzksX2EsXzksX2IsXzgsXzEsXzEsXzEsXzAsX2EsXzksX2IsXzgsXzksXzksXzksXzgsX2IsXzgsX2EsXzgsXzEsXzAsXzAsXzAsXzgsXzksXzksXzgsXzksXzksXzksXzgsXzksXzgsXzgsXzgsXzEsXzAsXzAsXzAsX2EsXzgsX2EsXzksXzgsXzksXzksXzksX2EsXzksX2IsXzgsXzEsXzEsXzEsXzAsXzgsXzgsXzgsXzksXzgsXzksXzksXzksXzgsXzksXzksXzgsXzEsXzEsXzEsXzAsXzgsXzksXzksXzgsXzksXzksXzksXzgsXzksXzgsXzgsXzgsXzEsXzAsXzAsXzAsXzgsXzksXzksXzgsXzksXzksXzksXzgsXzksXzgsXzgsXzgsXzEsXzAsXzAsXzAsCisgICAgICBfYSxfYixfYixfYSxfMyxfMSxfMyxfMCxfMyxfMixfMixfMixfMyxfMCxfMixfMCxfYSxfOSxfYixfOCxfMSxfMSxfMSxfMCxfMyxfMCxfMixfMCxfMSxfMCxfMCxfMCxfYixfOCxfYSxfOCxfMSxfMCxfMCxfMCxfMixfMCxfMixfMCxfMCxfMCxfMCxfMCxfOSxfOCxfOCxfOCxfMSxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfYSxfOSxfYixfOCxfMSxfMSxfMSxfMCxfMyxfMCxfMixfMCxfMSxfMCxfMCxfMCxfOCxfOSxfOSxfOCxfMSxfMSxfMSxfMCxfMSxfMCxfMCxfMCxfMSxfMCxfMCxfMCxfOSxfOCxfOCxfOCxfMSxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfOSxfOCxfOCxfOCxfMSxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCwKKyAgICAgIF9jLF9mLF9kLF9lLF8zLF8xLF8zLF8wLF81LF82LF80LF82LF8zLF8wLF8yLF8wLF9lLF9kLF9mLF9jLF8xLF8xLF8xLF8wLF83LF80LF82LF80LF8xLF8wLF8wLF8wLF9mLF9jLF9lLF9jLF8xLF8wLF8wLF8wLF82LF80LF82LF80LF8wLF8wLF8wLF8wLF9kLF9jLF9jLF9jLF8xLF8wLF8wLF8wLF80LF80LF80LF80LF8wLF8wLF8wLF8wLF9hLF85LF9iLF84LF8xLF8xLF8xLF8wLF8zLF8wLF8yLF8wLF8xLF8wLF8wLF8wLF84LF85LF85LF84LF8xLF8xLF8xLF8wLF8xLF8wLF8wLF8wLF8xLF8wLF8wLF8wLF85LF84LF84LF84LF8xLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF85LF84LF84LF84LF8xLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLAorICAgICAgXzMsXzIsXzIsXzIsXzMsXzAsXzIsXzAsXzIsXzIsXzIsXzIsXzIsXzAsXzIsXzAsXzMsXzAsXzIsXzAsXzEsXzAsXzAsXzAsXzIsXzAsXzIsXzAsXzAsXzAsXzAsXzAsXzIsXzAsXzIsXzAsXzAsXzAsXzAsXzAsXzIsXzAsXzIsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzMsXzAsXzIsXzAsXzEsXzAsXzAsXzAsXzIsXzAsXzIsXzAsXzAsXzAsXzAsXzAsXzEsXzAsXzAsXzAsXzEsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsCisgICAgICBfYSxfOSxfYixfOCxfMSxfMSxfMSxfMCxfMyxfMCxfMixfMCxfMSxfMCxfMCxfMCxfOCxfOSxfOSxfOCxfMSxfMSxfMSxfMCxfMSxfMCxfMCxfMCxfMSxfMCxfMCxfMCxfOSxfOCxfOCxfOCxfMSxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfOSxfOCxfOCxfOCxfMSxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfOCxfOSxfOSxfOCxfMSxfMSxfMSxfMCxfMSxfMCxfMCxfMCxfMSxfMCxfMCxfMCxfOCxfOSxfOSxfOCxfMSxfMSxfMSxfMCxfMSxfMCxfMCxfMCxfMSxfMCxfMCxfMCxfOSxfOCxfOCxfOCxfMSxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfOSxfOCxfOCxfOCxfMSxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCwKKyAgICAgIF8zLF8wLF8yLF8wLF8xLF8wLF8wLF8wLF8yLF8wLF8yLF8wLF8wLF8wLF8wLF8wLF8xLF8wLF8wLF8wLF8xLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8xLF8wLF8wLF8wLF8xLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8xLF8wLF8wLF8wLF8xLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLAorICAgICAgX2MsX2MsX2MsX2QsXzAsXzMsXzEsXzMsXzQsXzUsXzUsXzQsXzEsXzMsXzEsXzIsX2MsX2UsX2MsX2YsXzIsXzEsXzMsXzEsXzQsXzcsXzUsXzYsXzMsXzEsXzMsXzAsX2MsX2YsX2QsX2UsXzMsXzEsXzMsXzAsXzUsXzYsXzQsXzYsXzMsXzAsXzIsXzAsX2UsX2QsX2YsX2MsXzEsXzEsXzEsXzAsXzcsXzQsXzYsXzQsXzEsXzAsXzAsXzAsXzgsX2EsXzgsX2IsXzIsXzEsXzMsXzEsXzAsXzMsXzEsXzIsXzMsXzEsXzMsXzAsX2EsXzgsX2EsXzksXzAsXzEsXzEsXzEsXzIsXzEsXzMsXzAsXzEsXzEsXzEsXzAsX2EsXzksX2IsXzgsXzEsXzEsXzEsXzAsXzMsXzAsXzIsXzAsXzEsXzAsXzAsXzAsXzgsXzksXzksXzgsXzEsXzEsXzEsXzAsXzEsXzAsXzAsXzAsXzEsXzAsXzAsXzAsCisgICAgICBfMCxfMyxfMSxfMixfMyxfMyxfMyxfMixfMSxfMixfMCxfMixfMyxfMixfMixfMixfMixfMyxfMyxfMixfMyxfMSxfMyxfMCxfMyxfMixfMixfMixfMyxfMCxfMixfMCxfMyxfMixfMixfMixfMyxfMCxfMixfMCxfMixfMixfMixfMixfMixfMCxfMixfMCxfMyxfMCxfMixfMCxfMSxfMCxfMCxfMCxfMixfMCxfMixfMCxfMCxfMCxfMCxfMCxfMixfMyxfMyxfMixfMyxfMSxfMyxfMCxfMyxfMixfMixfMixfMyxfMCxfMixfMCxfMixfMSxfMyxfMCxfMSxfMSxfMSxfMCxfMyxfMCxfMixfMCxfMSxfMCxfMCxfMCxfMyxfMCxfMixfMCxfMSxfMCxfMCxfMCxfMixfMCxfMixfMCxfMCxfMCxfMCxfMCxfMSxfMCxfMCxfMCxfMSxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCwKKyAgICAgIF84LF9hLF84LF9iLF8yLF8xLF8zLF8xLF8wLF8zLF8xLF8yLF8zLF8xLF8zLF8wLF9hLF84LF9hLF85LF8wLF8xLF8xLF8xLF8yLF8xLF8zLF8wLF8xLF8xLF8xLF8wLF9hLF85LF9iLF84LF8xLF8xLF8xLF8wLF8zLF8wLF8yLF8wLF8xLF8wLF8wLF8wLF84LF85LF85LF84LF8xLF8xLF8xLF8wLF8xLF8wLF8wLF8wLF8xLF8wLF8wLF8wLF9hLF84LF9hLF85LF8wLF8xLF8xLF8xLF8yLF8xLF8zLF8wLF8xLF8xLF8xLF8wLF84LF84LF84LF85LF8wLF8xLF8xLF8xLF8wLF8xLF8xLF8wLF8xLF8xLF8xLF8wLF84LF85LF85LF84LF8xLF8xLF8xLF8wLF8xLF8wLF8wLF8wLF8xLF8wLF8wLF8wLF84LF85LF85LF84LF8xLF8xLF8xLF8wLF8xLF8wLF8wLF8wLF8xLF8wLF8wLF8wLAorICAgICAgXzIsXzMsXzMsXzIsXzMsXzEsXzMsXzAsXzMsXzIsXzIsXzIsXzMsXzAsXzIsXzAsXzIsXzEsXzMsXzAsXzEsXzEsXzEsXzAsXzMsXzAsXzIsXzAsXzEsXzAsXzAsXzAsXzMsXzAsXzIsXzAsXzEsXzAsXzAsXzAsXzIsXzAsXzIsXzAsXzAsXzAsXzAsXzAsXzEsXzAsXzAsXzAsXzEsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzIsXzEsXzMsXzAsXzEsXzEsXzEsXzAsXzMsXzAsXzIsXzAsXzEsXzAsXzAsXzAsXzAsXzEsXzEsXzAsXzEsXzEsXzEsXzAsXzEsXzAsXzAsXzAsXzEsXzAsXzAsXzAsXzEsXzAsXzAsXzAsXzEsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzEsXzAsXzAsXzAsXzEsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsCisgICAgICBfNCxfNyxfNSxfNixfMyxfMSxfMyxfMCxfNSxfNixfNCxfNixfMyxfMCxfMixfMCxfNixfNSxfNyxfNCxfMSxfMSxfMSxfMCxfNyxfNCxfNixfNCxfMSxfMCxfMCxfMCxfNyxfNCxfNixfNCxfMSxfMCxfMCxfMCxfNixfNCxfNixfNCxfMCxfMCxfMCxfMCxfNSxfNCxfNCxfNCxfMSxfMCxfMCxfMCxfNCxfNCxfNCxfNCxfMCxfMCxfMCxfMCxfMixfMSxfMyxfMCxfMSxfMSxfMSxfMCxfMyxfMCxfMixfMCxfMSxfMCxfMCxfMCxfMCxfMSxfMSxfMCxfMSxfMSxfMSxfMCxfMSxfMCxfMCxfMCxfMSxfMCxfMCxfMCxfMSxfMCxfMCxfMCxfMSxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMSxfMCxfMCxfMCxfMSxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCwKKyAgICAgIF8zLF8yLF8yLF8yLF8zLF8wLF8yLF8wLF8yLF8yLF8yLF8yLF8yLF8wLF8yLF8wLF8zLF8wLF8yLF8wLF8xLF8wLF8wLF8wLF8yLF8wLF8yLF8wLF8wLF8wLF8wLF8wLF8yLF8wLF8yLF8wLF8wLF8wLF8wLF8wLF8yLF8wLF8yLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8zLF8wLF8yLF8wLF8xLF8wLF8wLF8wLF8yLF8wLF8yLF8wLF8wLF8wLF8wLF8wLF8xLF8wLF8wLF8wLF8xLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLAorICAgICAgXzIsXzEsXzMsXzAsXzEsXzEsXzEsXzAsXzMsXzAsXzIsXzAsXzEsXzAsXzAsXzAsXzAsXzEsXzEsXzAsXzEsXzEsXzEsXzAsXzEsXzAsXzAsXzAsXzEsXzAsXzAsXzAsXzEsXzAsXzAsXzAsXzEsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzEsXzAsXzAsXzAsXzEsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzEsXzEsXzAsXzEsXzEsXzEsXzAsXzEsXzAsXzAsXzAsXzEsXzAsXzAsXzAsXzAsXzEsXzEsXzAsXzEsXzEsXzEsXzAsXzEsXzAsXzAsXzAsXzEsXzAsXzAsXzAsXzEsXzAsXzAsXzAsXzEsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzEsXzAsXzAsXzAsXzEsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsCisgICAgICBfMyxfMCxfMixfMCxfMSxfMCxfMCxfMCxfMixfMCxfMixfMCxfMCxfMCxfMCxfMCxfMSxfMCxfMCxfMCxfMSxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMSxfMCxfMCxfMCxfMSxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMSxfMCxfMCxfMCxfMSxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCwKKyAgICAgIF84LF84LF84LF85LF8wLF8zLF8xLF8zLF8wLF8xLF8xLF8wLF8xLF8zLF8xLF8yLF84LF9hLF84LF9iLF8yLF8xLF8zLF8xLF8wLF8zLF8xLF8yLF8zLF8xLF8zLF8wLF84LF9iLF85LF9hLF8zLF8xLF8zLF8wLF8xLF8yLF8wLF8yLF8zLF8wLF8yLF8wLF9hLF85LF9iLF84LF8xLF8xLF8xLF8wLF8zLF8wLF8yLF8wLF8xLF8wLF8wLF8wLF84LF9hLF84LF9iLF8yLF8xLF8zLF8xLF8wLF8zLF8xLF8yLF8zLF8xLF8zLF8wLF9hLF84LF9hLF85LF8wLF8xLF8xLF8xLF8yLF8xLF8zLF8wLF8xLF8xLF8xLF8wLF9hLF85LF9iLF84LF8xLF8xLF8xLF8wLF8zLF8wLF8yLF8wLF8xLF8wLF8wLF8wLF84LF85LF85LF84LF8xLF8xLF8xLF8wLF8xLF8wLF8wLF8wLF8xLF8wLF8wLF8wLAorICAgICAgXzAsXzMsXzEsXzIsXzMsXzMsXzMsXzIsXzEsXzIsXzAsXzIsXzMsXzIsXzIsXzIsXzIsXzMsXzMsXzIsXzMsXzEsXzMsXzAsXzMsXzIsXzIsXzIsXzMsXzAsXzIsXzAsXzMsXzIsXzIsXzIsXzMsXzAsXzIsXzAsXzIsXzIsXzIsXzIsXzIsXzAsXzIsXzAsXzMsXzAsXzIsXzAsXzEsXzAsXzAsXzAsXzIsXzAsXzIsXzAsXzAsXzAsXzAsXzAsXzIsXzMsXzMsXzIsXzMsXzEsXzMsXzAsXzMsXzIsXzIsXzIsXzMsXzAsXzIsXzAsXzIsXzEsXzMsXzAsXzEsXzEsXzEsXzAsXzMsXzAsXzIsXzAsXzEsXzAsXzAsXzAsXzMsXzAsXzIsXzAsXzEsXzAsXzAsXzAsXzIsXzAsXzIsXzAsXzAsXzAsXzAsXzAsXzEsXzAsXzAsXzAsXzEsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsCisgICAgICBfOCxfYSxfOCxfYixfMixfMSxfMyxfMSxfMCxfMyxfMSxfMixfMyxfMSxfMyxfMCxfYSxfOCxfYSxfOSxfMCxfMSxfMSxfMSxfMixfMSxfMyxfMCxfMSxfMSxfMSxfMCxfYSxfOSxfYixfOCxfMSxfMSxfMSxfMCxfMyxfMCxfMixfMCxfMSxfMCxfMCxfMCxfOCxfOSxfOSxfOCxfMSxfMSxfMSxfMCxfMSxfMCxfMCxfMCxfMSxfMCxfMCxfMCxfYSxfOCxfYSxfOSxfMCxfMSxfMSxfMSxfMixfMSxfMyxfMCxfMSxfMSxfMSxfMCxfOCxfOCxfOCxfOSxfMCxfMSxfMSxfMSxfMCxfMSxfMSxfMCxfMSxfMSxfMSxfMCxfOCxfOSxfOSxfOCxfMSxfMSxfMSxfMCxfMSxfMCxfMCxfMCxfMSxfMCxfMCxfMCxfOCxfOSxfOSxfOCxfMSxfMSxfMSxfMCxfMSxfMCxfMCxfMCxfMSxfMCxfMCxfMCwKKyAgICAgIF8yLF8zLF8zLF8yLF8zLF8xLF8zLF8wLF8zLF8yLF8yLF8yLF8zLF8wLF8yLF8wLF8yLF8xLF8zLF8wLF8xLF8xLF8xLF8wLF8zLF8wLF8yLF8wLF8xLF8wLF8wLF8wLF8zLF8wLF8yLF8wLF8xLF8wLF8wLF8wLF8yLF8wLF8yLF8wLF8wLF8wLF8wLF8wLF8xLF8wLF8wLF8wLF8xLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8yLF8xLF8zLF8wLF8xLF8xLF8xLF8wLF8zLF8wLF8yLF8wLF8xLF8wLF8wLF8wLF8wLF8xLF8xLF8wLF8xLF8xLF8xLF8wLF8xLF8wLF8wLF8wLF8xLF8wLF8wLF8wLF8xLF8wLF8wLF8wLF8xLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8xLF8wLF8wLF8wLF8xLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLAorICAgICAgXzAsXzMsXzEsXzIsXzMsXzEsXzMsXzAsXzEsXzIsXzAsXzIsXzMsXzAsXzIsXzAsXzIsXzEsXzMsXzAsXzEsXzEsXzEsXzAsXzMsXzAsXzIsXzAsXzEsXzAsXzAsXzAsXzMsXzAsXzIsXzAsXzEsXzAsXzAsXzAsXzIsXzAsXzIsXzAsXzAsXzAsXzAsXzAsXzEsXzAsXzAsXzAsXzEsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzIsXzEsXzMsXzAsXzEsXzEsXzEsXzAsXzMsXzAsXzIsXzAsXzEsXzAsXzAsXzAsXzAsXzEsXzEsXzAsXzEsXzEsXzEsXzAsXzEsXzAsXzAsXzAsXzEsXzAsXzAsXzAsXzEsXzAsXzAsXzAsXzEsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzEsXzAsXzAsXzAsXzEsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsCisgICAgICBfMyxfMixfMixfMixfMyxfMCxfMixfMCxfMixfMixfMixfMixfMixfMCxfMixfMCxfMyxfMCxfMixfMCxfMSxfMCxfMCxfMCxfMixfMCxfMixfMCxfMCxfMCxfMCxfMCxfMixfMCxfMixfMCxfMCxfMCxfMCxfMCxfMixfMCxfMixfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMyxfMCxfMixfMCxfMSxfMCxfMCxfMCxfMixfMCxfMixfMCxfMCxfMCxfMCxfMCxfMSxfMCxfMCxfMCxfMSxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCwKKyAgICAgIF8yLF8xLF8zLF8wLF8xLF8xLF8xLF8wLF8zLF8wLF8yLF8wLF8xLF8wLF8wLF8wLF8wLF8xLF8xLF8wLF8xLF8xLF8xLF8wLF8xLF8wLF8wLF8wLF8xLF8wLF8wLF8wLF8xLF8wLF8wLF8wLF8xLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8xLF8wLF8wLF8wLF8xLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8xLF8xLF8wLF8xLF8xLF8xLF8wLF8xLF8wLF8wLF8wLF8xLF8wLF8wLF8wLF8wLF8xLF8xLF8wLF8xLF8xLF8xLF8wLF8xLF8wLF8wLF8wLF8xLF8wLF8wLF8wLF8xLF8wLF8wLF8wLF8xLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8xLF8wLF8wLF8wLF8xLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLAorICAgICAgXzMsXzAsXzIsXzAsXzEsXzAsXzAsXzAsXzIsXzAsXzIsXzAsXzAsXzAsXzAsXzAsXzEsXzAsXzAsXzAsXzEsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzEsXzAsXzAsXzAsXzEsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzEsXzAsXzAsXzAsXzEsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsCisgICAgICBfOCxfOCxfOCxfOSxfMCxfMSxfMSxfMSxfMCxfMSxfMSxfMCxfMSxfMSxfMSxfMCxfOCxfOCxfOCxfOSxfMCxfMyxfMSxfMyxfMCxfMSxfMSxfMCxfMSxfMyxfMSxfMixfOCxfOSxfOSxfOCxfMSxfMyxfMSxfMixfMSxfMCxfMCxfMCxfMSxfMixfMCxfMixfOCxfYixfOSxfYSxfMyxfMSxfMyxfMCxfMSxfMixfMCxfMixfMyxfMCxfMixfMCxfOCxfOCxfOCxfOSxfNCxfNyxfNSxfNyxfMCxfMSxfMSxfMCxfNSxfNyxfNSxfNixfOCxfYSxfOCxfYixfNixfNSxfNyxfNSxfMCxfMyxfMSxfMixfNyxfNSxfNyxfNCxfOCxfYixfOSxfYSxfNyxfNSxfNyxfNCxfMSxfMixfMCxfMixfNyxfNCxfNixfNCxfYSxfOSxfYixfOCxfNSxfNSxfNSxfNCxfMyxfMCxfMixfMCxfNSxfNCxfNCxfNCwKKyAgICAgIF8wLF8xLF8xLF8wLF81LF83LF81LF82LF8xLF8wLF8wLF8wLF81LF82LF80LF82LF8wLF8zLF8xLF8yLF83LF83LF83LF82LF8xLF8yLF8wLF8yLF83LF82LF82LF82LF8xLF8yLF8wLF8yLF83LF82LF82LF82LF8wLF8yLF8wLF8yLF82LF82LF82LF82LF8zLF8yLF8yLF8yLF83LF80LF82LF80LF8yLF8yLF8yLF8yLF82LF80LF82LF80LF80LF83LF81LF82LF8zLF8zLF8zLF8yLF81LF82LF80LF82LF8zLF8yLF8yLF8yLF82LF83LF83LF82LF8zLF8xLF8zLF8wLF83LF82LF82LF82LF8zLF8wLF8yLF8wLF83LF82LF82LF82LF8zLF8wLF8yLF8wLF82LF82LF82LF82LF8yLF8wLF8yLF8wLF83LF80LF82LF80LF8xLF8wLF8wLF8wLF82LF80LF82LF80LF8wLF8wLF8wLF8wLAorICAgICAgXzgsXzgsXzgsXzksXzQsXzcsXzUsXzcsXzAsXzEsXzEsXzAsXzUsXzcsXzUsXzYsXzgsX2EsXzgsX2IsXzYsXzUsXzcsXzUsXzAsXzMsXzEsXzIsXzcsXzUsXzcsXzQsXzgsX2IsXzksX2EsXzcsXzUsXzcsXzQsXzEsXzIsXzAsXzIsXzcsXzQsXzYsXzQsX2EsXzksX2IsXzgsXzUsXzUsXzUsXzQsXzMsXzAsXzIsXzAsXzUsXzQsXzQsXzQsX2MsX2UsX2MsX2YsXzIsXzEsXzMsXzEsXzQsXzcsXzUsXzYsXzMsXzEsXzMsXzAsX2UsX2MsX2UsX2QsXzAsXzEsXzEsXzEsXzYsXzUsXzcsXzQsXzEsXzEsXzEsXzAsX2UsX2QsX2YsX2MsXzEsXzEsXzEsXzAsXzcsXzQsXzYsXzQsXzEsXzAsXzAsXzAsX2MsX2QsX2QsX2MsXzEsXzEsXzEsXzAsXzUsXzQsXzQsXzQsXzEsXzAsXzAsXzAsCisgICAgICBfNCxfNyxfNSxfNixfMyxfMyxfMyxfMixfNSxfNixfNCxfNixfMyxfMixfMixfMixfNixfNyxfNyxfNixfMyxfMSxfMyxfMCxfNyxfNixfNixfNixfMyxfMCxfMixfMCxfNyxfNixfNixfNixfMyxfMCxfMixfMCxfNixfNixfNixfNixfMixfMCxfMixfMCxfNyxfNCxfNixfNCxfMSxfMCxfMCxfMCxfNixfNCxfNixfNCxfMCxfMCxfMCxfMCxfMixfMyxfMyxfMixfMyxfMSxfMyxfMCxfMyxfMixfMixfMixfMyxfMCxfMixfMCxfMixfMSxfMyxfMCxfMSxfMSxfMSxfMCxfMyxfMCxfMixfMCxfMSxfMCxfMCxfMCxfMyxfMCxfMixfMCxfMSxfMCxfMCxfMCxfMixfMCxfMixfMCxfMCxfMCxfMCxfMCxfMSxfMCxfMCxfMCxfMSxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCwKKyAgICAgIF8wLF8xLF8xLF8wLF81LF83LF81LF82LF8xLF8wLF8wLF8wLF81LF82LF80LF82LF8wLF8zLF8xLF8yLF83LF81LF83LF80LF8xLF8yLF8wLF8yLF83LF80LF82LF80LF8xLF8yLF8wLF8yLF83LF80LF82LF80LF8wLF8yLF8wLF8yLF82LF80LF82LF80LF8zLF8wLF8yLF8wLF81LF80LF80LF80LF8yLF8wLF8yLF8wLF80LF80LF80LF80LF80LF83LF81LF82LF83LF81LF83LF80LF81LF82LF80LF82LF83LF80LF82LF80LF82LF81LF83LF80LF81LF81LF81LF80LF83LF80LF82LF80LF81LF80LF80LF80LF83LF80LF82LF80LF81LF80LF80LF80LF82LF80LF82LF80LF80LF80LF80LF80LF81LF80LF80LF80LF81LF80LF80LF80LF80LF80LF80LF80LF80LF80LF80LF80LAorICAgICAgXzUsXzYsXzQsXzYsXzcsXzYsXzYsXzYsXzQsXzYsXzQsXzYsXzYsXzYsXzYsXzYsXzcsXzYsXzYsXzYsXzcsXzQsXzYsXzQsXzYsXzYsXzYsXzYsXzYsXzQsXzYsXzQsXzYsXzYsXzYsXzYsXzYsXzQsXzYsXzQsXzYsXzYsXzYsXzYsXzYsXzQsXzYsXzQsXzYsXzQsXzYsXzQsXzQsXzQsXzQsXzQsXzYsXzQsXzYsXzQsXzQsXzQsXzQsXzQsXzcsXzYsXzYsXzYsXzMsXzAsXzIsXzAsXzYsXzYsXzYsXzYsXzIsXzAsXzIsXzAsXzcsXzQsXzYsXzQsXzEsXzAsXzAsXzAsXzYsXzQsXzYsXzQsXzAsXzAsXzAsXzAsXzYsXzQsXzYsXzQsXzAsXzAsXzAsXzAsXzYsXzQsXzYsXzQsXzAsXzAsXzAsXzAsXzQsXzQsXzQsXzQsXzAsXzAsXzAsXzAsXzQsXzQsXzQsXzQsXzAsXzAsXzAsXzAsCisgICAgICBfNCxfNyxfNSxfNixfNyxfNSxfNyxfNCxfNSxfNixfNCxfNixfNyxfNCxfNixfNCxfNixfNSxfNyxfNCxfNSxfNSxfNSxfNCxfNyxfNCxfNixfNCxfNSxfNCxfNCxfNCxfNyxfNCxfNixfNCxfNSxfNCxfNCxfNCxfNixfNCxfNixfNCxfNCxfNCxfNCxfNCxfNSxfNCxfNCxfNCxfNSxfNCxfNCxfNCxfNCxfNCxfNCxfNCxfNCxfNCxfNCxfNCxfNixfNSxfNyxfNCxfMSxfMSxfMSxfMCxfNyxfNCxfNixfNCxfMSxfMCxfMCxfMCxfNCxfNSxfNSxfNCxfMSxfMSxfMSxfMCxfNSxfNCxfNCxfNCxfMSxfMCxfMCxfMCxfNSxfNCxfNCxfNCxfMSxfMCxfMCxfMCxfNCxfNCxfNCxfNCxfMCxfMCxfMCxfMCxfNSxfNCxfNCxfNCxfMSxfMCxfMCxfMCxfNCxfNCxfNCxfNCxfMCxfMCxfMCxfMCwKKyAgICAgIF83LF82LF82LF82LF8zLF8wLF8yLF8wLF82LF82LF82LF82LF8yLF8wLF8yLF8wLF83LF80LF82LF80LF8xLF8wLF8wLF8wLF82LF80LF82LF80LF8wLF8wLF8wLF8wLF82LF80LF82LF80LF8wLF8wLF8wLF8wLF82LF80LF82LF80LF8wLF8wLF8wLF8wLF80LF80LF80LF80LF8wLF8wLF8wLF8wLF80LF80LF80LF80LF8wLF8wLF8wLF8wLF8zLF8wLF8yLF8wLF8xLF8wLF8wLF8wLF8yLF8wLF8yLF8wLF8wLF8wLF8wLF8wLF8xLF8wLF8wLF8wLF8xLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLAorICAgICAgXzgsXzgsXzgsXzksXzQsXzUsXzUsXzUsXzAsXzEsXzEsXzAsXzUsXzUsXzUsXzQsXzgsXzgsXzgsXzksXzQsXzcsXzUsXzcsXzAsXzEsXzEsXzAsXzUsXzcsXzUsXzYsXzgsXzksXzksXzgsXzUsXzcsXzUsXzYsXzEsXzAsXzAsXzAsXzUsXzYsXzQsXzYsXzgsX2IsXzksX2EsXzcsXzUsXzcsXzQsXzEsXzIsXzAsXzIsXzcsXzQsXzYsXzQsX2MsX2MsX2MsX2QsXzAsXzMsXzEsXzMsXzQsXzUsXzUsXzQsXzEsXzMsXzEsXzIsX2MsX2UsX2MsX2YsXzIsXzEsXzMsXzEsXzQsXzcsXzUsXzYsXzMsXzEsXzMsXzAsX2MsX2YsX2QsX2UsXzMsXzEsXzMsXzAsXzUsXzYsXzQsXzYsXzMsXzAsXzIsXzAsX2UsX2QsX2YsX2MsXzEsXzEsXzEsXzAsXzcsXzQsXzYsXzQsXzEsXzAsXzAsXzAsCisgICAgICBfNCxfNSxfNSxfNCxfMSxfMyxfMSxfMixfNSxfNCxfNCxfNCxfMSxfMixfMCxfMixfNCxfNyxfNSxfNixfMyxfMyxfMyxfMixfNSxfNixfNCxfNixfMyxfMixfMixfMixfNSxfNixfNCxfNixfMyxfMixfMixfMixfNCxfNixfNCxfNixfMixfMixfMixfMixfNyxfNixfNixfNixfMyxfMCxfMixfMCxfNixfNixfNixfNixfMixfMCxfMixfMCxfMCxfMyxfMSxfMixfMyxfMyxfMyxfMixfMSxfMixfMCxfMixfMyxfMixfMixfMixfMixfMyxfMyxfMixfMyxfMSxfMyxfMCxfMyxfMixfMixfMixfMyxfMCxfMixfMCxfMyxfMixfMixfMixfMyxfMCxfMixfMCxfMixfMixfMixfMixfMixfMCxfMixfMCxfMyxfMCxfMixfMCxfMSxfMCxfMCxfMCxfMixfMCxfMixfMCxfMCxfMCxfMCxfMCwKKyAgICAgIF9jLF9jLF9jLF9kLF8wLF8zLF8xLF8zLF80LF81LF81LF80LF8xLF8zLF8xLF8yLF9jLF9lLF9jLF9mLF8yLF8xLF8zLF8xLF80LF83LF81LF82LF8zLF8xLF8zLF8wLF9jLF9mLF9kLF9lLF8zLF8xLF8zLF8wLF81LF82LF80LF82LF8zLF8wLF8yLF8wLF9lLF9kLF9mLF9jLF8xLF8xLF8xLF8wLF83LF80LF82LF80LF8xLF8wLF8wLF8wLF84LF9hLF84LF9iLF8yLF8xLF8zLF8xLF8wLF8zLF8xLF8yLF8zLF8xLF8zLF8wLF9hLF84LF9hLF85LF8wLF8xLF8xLF8xLF8yLF8xLF8zLF8wLF8xLF8xLF8xLF8wLF9hLF85LF9iLF84LF8xLF8xLF8xLF8wLF8zLF8wLF8yLF8wLF8xLF8wLF8wLF8wLF84LF85LF85LF84LF8xLF8xLF8xLF8wLF8xLF8wLF8wLF8wLF8xLF8wLF8wLF8wLAorICAgICAgXzAsXzMsXzEsXzIsXzMsXzMsXzMsXzIsXzEsXzIsXzAsXzIsXzMsXzIsXzIsXzIsXzIsXzMsXzMsXzIsXzMsXzEsXzMsXzAsXzMsXzIsXzIsXzIsXzMsXzAsXzIsXzAsXzMsXzIsXzIsXzIsXzMsXzAsXzIsXzAsXzIsXzIsXzIsXzIsXzIsXzAsXzIsXzAsXzMsXzAsXzIsXzAsXzEsXzAsXzAsXzAsXzIsXzAsXzIsXzAsXzAsXzAsXzAsXzAsXzIsXzMsXzMsXzIsXzMsXzEsXzMsXzAsXzMsXzIsXzIsXzIsXzMsXzAsXzIsXzAsXzIsXzEsXzMsXzAsXzEsXzEsXzEsXzAsXzMsXzAsXzIsXzAsXzEsXzAsXzAsXzAsXzMsXzAsXzIsXzAsXzEsXzAsXzAsXzAsXzIsXzAsXzIsXzAsXzAsXzAsXzAsXzAsXzEsXzAsXzAsXzAsXzEsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsCisgICAgICBfNCxfNSxfNSxfNCxfNSxfNyxfNSxfNixfNSxfNCxfNCxfNCxfNSxfNixfNCxfNixfNCxfNyxfNSxfNixfNyxfNSxfNyxfNCxfNSxfNixfNCxfNixfNyxfNCxfNixfNCxfNSxfNixfNCxfNixfNyxfNCxfNixfNCxfNCxfNixfNCxfNixfNixfNCxfNixfNCxfNyxfNCxfNixfNCxfNSxfNCxfNCxfNCxfNixfNCxfNixfNCxfNCxfNCxfNCxfNCxfNCxfNyxfNSxfNixfMyxfMSxfMyxfMCxfNSxfNixfNCxfNixfMyxfMCxfMixfMCxfNixfNSxfNyxfNCxfMSxfMSxfMSxfMCxfNyxfNCxfNixfNCxfMSxfMCxfMCxfMCxfNyxfNCxfNixfNCxfMSxfMCxfMCxfMCxfNixfNCxfNixfNCxfMCxfMCxfMCxfMCxfNSxfNCxfNCxfNCxfMSxfMCxfMCxfMCxfNCxfNCxfNCxfNCxfMCxfMCxfMCxfMCwKKyAgICAgIF81LF82LF80LF82LF8zLF8yLF8yLF8yLF80LF82LF80LF82LF8yLF8yLF8yLF8yLF83LF82LF82LF82LF8zLF8wLF8yLF8wLF82LF82LF82LF82LF8yLF8wLF8yLF8wLF82LF82LF82LF82LF8yLF8wLF8yLF8wLF82LF82LF82LF82LF8yLF8wLF8yLF8wLF82LF80LF82LF80LF8wLF8wLF8wLF8wLF82LF80LF82LF80LF8wLF8wLF8wLF8wLF8zLF8yLF8yLF8yLF8zLF8wLF8yLF8wLF8yLF8yLF8yLF8yLF8yLF8wLF8yLF8wLF8zLF8wLF8yLF8wLF8xLF8wLF8wLF8wLF8yLF8wLF8yLF8wLF8wLF8wLF8wLF8wLF8yLF8wLF8yLF8wLF8wLF8wLF8wLF8wLF8yLF8wLF8yLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLAorICAgICAgXzQsXzcsXzUsXzYsXzMsXzEsXzMsXzAsXzUsXzYsXzQsXzYsXzMsXzAsXzIsXzAsXzYsXzUsXzcsXzQsXzEsXzEsXzEsXzAsXzcsXzQsXzYsXzQsXzEsXzAsXzAsXzAsXzcsXzQsXzYsXzQsXzEsXzAsXzAsXzAsXzYsXzQsXzYsXzQsXzAsXzAsXzAsXzAsXzUsXzQsXzQsXzQsXzEsXzAsXzAsXzAsXzQsXzQsXzQsXzQsXzAsXzAsXzAsXzAsXzIsXzEsXzMsXzAsXzEsXzEsXzEsXzAsXzMsXzAsXzIsXzAsXzEsXzAsXzAsXzAsXzAsXzEsXzEsXzAsXzEsXzEsXzEsXzAsXzEsXzAsXzAsXzAsXzEsXzAsXzAsXzAsXzEsXzAsXzAsXzAsXzEsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzEsXzAsXzAsXzAsXzEsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsCisgICAgICBfMyxfMixfMixfMixfMyxfMCxfMixfMCxfMixfMixfMixfMixfMixfMCxfMixfMCxfMyxfMCxfMixfMCxfMSxfMCxfMCxfMCxfMixfMCxfMixfMCxfMCxfMCxfMCxfMCxfMixfMCxfMixfMCxfMCxfMCxfMCxfMCxfMixfMCxfMixfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMyxfMCxfMixfMCxfMSxfMCxfMCxfMCxfMixfMCxfMixfMCxfMCxfMCxfMCxfMCxfMSxfMCxfMCxfMCxfMSxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCwKKyAgICAgIF8wLF8wLF8wLF8xLF80LF81LF81LF81LF8wLF8xLF8xLF8wLF81LF81LF81LF80LF8wLF8wLF8wLF8xLF80LF83LF81LF83LF8wLF8xLF8xLF8wLF81LF83LF81LF82LF8wLF8xLF8xLF8wLF81LF83LF81LF82LF8xLF8wLF8wLF8wLF81LF82LF80LF82LF8wLF8zLF8xLF8yLF83LF81LF83LF80LF8xLF8yLF8wLF8yLF83LF80LF82LF80LF80LF80LF80LF81LF8wLF8zLF8xLF8zLF80LF81LF81LF80LF8xLF8zLF8xLF8yLF80LF82LF80LF83LF8yLF8xLF8zLF8xLF80LF83LF81LF82LF8zLF8xLF8zLF8wLF80LF83LF81LF82LF8zLF8xLF8zLF8wLF81LF82LF80LF82LF8zLF8wLF8yLF8wLF82LF81LF83LF80LF8xLF8xLF8xLF8wLF83LF80LF82LF80LF8xLF8wLF8wLF8wLAorICAgICAgXzQsXzUsXzUsXzQsXzEsXzMsXzEsXzIsXzUsXzQsXzQsXzQsXzEsXzIsXzAsXzIsXzQsXzcsXzUsXzYsXzMsXzMsXzMsXzIsXzUsXzYsXzQsXzYsXzMsXzIsXzIsXzIsXzUsXzYsXzQsXzYsXzMsXzIsXzIsXzIsXzQsXzYsXzQsXzYsXzIsXzIsXzIsXzIsXzcsXzYsXzYsXzYsXzMsXzAsXzIsXzAsXzYsXzYsXzYsXzYsXzIsXzAsXzIsXzAsXzAsXzMsXzEsXzIsXzMsXzMsXzMsXzIsXzEsXzIsXzAsXzIsXzMsXzIsXzIsXzIsXzIsXzMsXzMsXzIsXzMsXzEsXzMsXzAsXzMsXzIsXzIsXzIsXzMsXzAsXzIsXzAsXzMsXzIsXzIsXzIsXzMsXzAsXzIsXzAsXzIsXzIsXzIsXzIsXzIsXzAsXzIsXzAsXzMsXzAsXzIsXzAsXzEsXzAsXzAsXzAsXzIsXzAsXzIsXzAsXzAsXzAsXzAsXzAsCisgICAgICBfNCxfNCxfNCxfNSxfMCxfMyxfMSxfMyxfNCxfNSxfNSxfNCxfMSxfMyxfMSxfMixfNCxfNixfNCxfNyxfMixfMSxfMyxfMSxfNCxfNyxfNSxfNixfMyxfMSxfMyxfMCxfNCxfNyxfNSxfNixfMyxfMSxfMyxfMCxfNSxfNixfNCxfNixfMyxfMCxfMixfMCxfNixfNSxfNyxfNCxfMSxfMSxfMSxfMCxfNyxfNCxfNixfNCxfMSxfMCxfMCxfMCxfMCxfMixfMCxfMyxfMixfMSxfMyxfMSxfMCxfMyxfMSxfMixfMyxfMSxfMyxfMCxfMixfMCxfMixfMSxfMCxfMSxfMSxfMSxfMixfMSxfMyxfMCxfMSxfMSxfMSxfMCxfMixfMSxfMyxfMCxfMSxfMSxfMSxfMCxfMyxfMCxfMixfMCxfMSxfMCxfMCxfMCxfMCxfMSxfMSxfMCxfMSxfMSxfMSxfMCxfMSxfMCxfMCxfMCxfMSxfMCxfMCxfMCwKKyAgICAgIF8wLF8zLF8xLF8yLF8zLF8zLF8zLF8yLF8xLF8yLF8wLF8yLF8zLF8yLF8yLF8yLF8yLF8zLF8zLF8yLF8zLF8xLF8zLF8wLF8zLF8yLF8yLF8yLF8zLF8wLF8yLF8wLF8zLF8yLF8yLF8yLF8zLF8wLF8yLF8wLF8yLF8yLF8yLF8yLF8yLF8wLF8yLF8wLF8zLF8wLF8yLF8wLF8xLF8wLF8wLF8wLF8yLF8wLF8yLF8wLF8wLF8wLF8wLF8wLF8yLF8zLF8zLF8yLF8zLF8xLF8zLF8wLF8zLF8yLF8yLF8yLF8zLF8wLF8yLF8wLF8yLF8xLF8zLF8wLF8xLF8xLF8xLF8wLF8zLF8wLF8yLF8wLF8xLF8wLF8wLF8wLF8zLF8wLF8yLF8wLF8xLF8wLF8wLF8wLF8yLF8wLF8yLF8wLF8wLF8wLF8wLF8wLF8xLF8wLF8wLF8wLF8xLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLAorICAgICAgXzQsXzUsXzUsXzQsXzUsXzcsXzUsXzYsXzUsXzQsXzQsXzQsXzUsXzYsXzQsXzYsXzQsXzcsXzUsXzYsXzcsXzUsXzcsXzQsXzUsXzYsXzQsXzYsXzcsXzQsXzYsXzQsXzUsXzYsXzQsXzYsXzcsXzQsXzYsXzQsXzQsXzYsXzQsXzYsXzYsXzQsXzYsXzQsXzcsXzQsXzYsXzQsXzUsXzQsXzQsXzQsXzYsXzQsXzYsXzQsXzQsXzQsXzQsXzQsXzQsXzcsXzUsXzYsXzMsXzEsXzMsXzAsXzUsXzYsXzQsXzYsXzMsXzAsXzIsXzAsXzYsXzUsXzcsXzQsXzEsXzEsXzEsXzAsXzcsXzQsXzYsXzQsXzEsXzAsXzAsXzAsXzcsXzQsXzYsXzQsXzEsXzAsXzAsXzAsXzYsXzQsXzYsXzQsXzAsXzAsXzAsXzAsXzUsXzQsXzQsXzQsXzEsXzAsXzAsXzAsXzQsXzQsXzQsXzQsXzAsXzAsXzAsXzAsCisgICAgICBfNSxfNixfNCxfNixfMyxfMixfMixfMixfNCxfNixfNCxfNixfMixfMixfMixfMixfNyxfNixfNixfNixfMyxfMCxfMixfMCxfNixfNixfNixfNixfMixfMCxfMixfMCxfNixfNixfNixfNixfMixfMCxfMixfMCxfNixfNixfNixfNixfMixfMCxfMixfMCxfNixfNCxfNixfNCxfMCxfMCxfMCxfMCxfNixfNCxfNixfNCxfMCxfMCxfMCxfMCxfMyxfMixfMixfMixfMyxfMCxfMixfMCxfMixfMixfMixfMixfMixfMCxfMixfMCxfMyxfMCxfMixfMCxfMSxfMCxfMCxfMCxfMixfMCxfMixfMCxfMCxfMCxfMCxfMCxfMixfMCxfMixfMCxfMCxfMCxfMCxfMCxfMixfMCxfMixfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCwKKyAgICAgIF80LF83LF81LF82LF8zLF8xLF8zLF8wLF81LF82LF80LF82LF8zLF8wLF8yLF8wLF82LF81LF83LF80LF8xLF8xLF8xLF8wLF83LF80LF82LF80LF8xLF8wLF8wLF8wLF83LF80LF82LF80LF8xLF8wLF8wLF8wLF82LF80LF82LF80LF8wLF8wLF8wLF8wLF81LF80LF80LF80LF8xLF8wLF8wLF8wLF80LF80LF80LF80LF8wLF8wLF8wLF8wLF8yLF8xLF8zLF8wLF8xLF8xLF8xLF8wLF8zLF8wLF8yLF8wLF8xLF8wLF8wLF8wLF8wLF8xLF8xLF8wLF8xLF8xLF8xLF8wLF8xLF8wLF8wLF8wLF8xLF8wLF8wLF8wLF8xLF8wLF8wLF8wLF8xLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8xLF8wLF8wLF8wLF8xLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLAorICAgICAgXzMsXzIsXzIsXzIsXzMsXzAsXzIsXzAsXzIsXzIsXzIsXzIsXzIsXzAsXzIsXzAsXzMsXzAsXzIsXzAsXzEsXzAsXzAsXzAsXzIsXzAsXzIsXzAsXzAsXzAsXzAsXzAsXzIsXzAsXzIsXzAsXzAsXzAsXzAsXzAsXzIsXzAsXzIsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzMsXzAsXzIsXzAsXzEsXzAsXzAsXzAsXzIsXzAsXzIsXzAsXzAsXzAsXzAsXzAsXzEsXzAsXzAsXzAsXzEsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsCisgICAgICBfNCxfNCxfNCxfNSxfMCxfMSxfMSxfMSxfNCxfNSxfNSxfNCxfMSxfMSxfMSxfMCxfNCxfNCxfNCxfNSxfMCxfMyxfMSxfMyxfNCxfNSxfNSxfNCxfMSxfMyxfMSxfMixfNCxfNSxfNSxfNCxfMSxfMyxfMSxfMixfNSxfNCxfNCxfNCxfMSxfMixfMCxfMixfNCxfNyxfNSxfNixfMyxfMSxfMyxfMCxfNSxfNixfNCxfNixfMyxfMCxfMixfMCxfMCxfMCxfMCxfMSxfMCxfMyxfMSxfMyxfMCxfMSxfMSxfMCxfMSxfMyxfMSxfMixfMCxfMixfMCxfMyxfMixfMSxfMyxfMSxfMCxfMyxfMSxfMixfMyxfMSxfMyxfMCxfMCxfMyxfMSxfMixfMyxfMSxfMyxfMCxfMSxfMixfMCxfMixfMyxfMCxfMixfMCxfMixfMSxfMyxfMCxfMSxfMSxfMSxfMCxfMyxfMCxfMixfMCxfMSxfMCxfMCxfMCwKKyAgICAgIF8wLF8xLF8xLF8wLF8xLF8zLF8xLF8yLF8xLF8wLF8wLF8wLF8xLF8yLF8wLF8yLF8wLF8zLF8xLF8yLF8zLF8zLF8zLF8yLF8xLF8yLF8wLF8yLF8zLF8yLF8yLF8yLF8xLF8yLF8wLF8yLF8zLF8yLF8yLF8yLF8wLF8yLF8wLF8yLF8yLF8yLF8yLF8yLF8zLF8yLF8yLF8yLF8zLF8wLF8yLF8wLF8yLF8yLF8yLF8yLF8yLF8wLF8yLF8wLF8wLF8zLF8xLF8yLF8zLF8zLF8zLF8yLF8xLF8yLF8wLF8yLF8zLF8yLF8yLF8yLF8yLF8zLF8zLF8yLF8zLF8xLF8zLF8wLF8zLF8yLF8yLF8yLF8zLF8wLF8yLF8wLF8zLF8yLF8yLF8yLF8zLF8wLF8yLF8wLF8yLF8yLF8yLF8yLF8yLF8wLF8yLF8wLF8zLF8wLF8yLF8wLF8xLF8wLF8wLF8wLF8yLF8wLF8yLF8wLF8wLF8wLF8wLF8wLAorICAgICAgXzAsXzAsXzAsXzEsXzAsXzMsXzEsXzMsXzAsXzEsXzEsXzAsXzEsXzMsXzEsXzIsXzAsXzIsXzAsXzMsXzIsXzEsXzMsXzEsXzAsXzMsXzEsXzIsXzMsXzEsXzMsXzAsXzAsXzMsXzEsXzIsXzMsXzEsXzMsXzAsXzEsXzIsXzAsXzIsXzMsXzAsXzIsXzAsXzIsXzEsXzMsXzAsXzEsXzEsXzEsXzAsXzMsXzAsXzIsXzAsXzEsXzAsXzAsXzAsXzAsXzIsXzAsXzMsXzIsXzEsXzMsXzEsXzAsXzMsXzEsXzIsXzMsXzEsXzMsXzAsXzIsXzAsXzIsXzEsXzAsXzEsXzEsXzEsXzIsXzEsXzMsXzAsXzEsXzEsXzEsXzAsXzIsXzEsXzMsXzAsXzEsXzEsXzEsXzAsXzMsXzAsXzIsXzAsXzEsXzAsXzAsXzAsXzAsXzEsXzEsXzAsXzEsXzEsXzEsXzAsXzEsXzAsXzAsXzAsXzEsXzAsXzAsXzAsCisgICAgICBfMCxfMyxfMSxfMixfMyxfMyxfMyxfMixfMSxfMixfMCxfMixfMyxfMixfMixfMixfMixfMyxfMyxfMixfMyxfMSxfMyxfMCxfMyxfMixfMixfMixfMyxfMCxfMixfMCxfMyxfMixfMixfMixfMyxfMCxfMixfMCxfMixfMixfMixfMixfMixfMCxfMixfMCxfMyxfMCxfMixfMCxfMSxfMCxfMCxfMCxfMixfMCxfMixfMCxfMCxfMCxfMCxfMCxfMixfMyxfMyxfMixfMyxfMSxfMyxfMCxfMyxfMixfMixfMixfMyxfMCxfMixfMCxfMixfMSxfMyxfMCxfMSxfMSxfMSxfMCxfMyxfMCxfMixfMCxfMSxfMCxfMCxfMCxfMyxfMCxfMixfMCxfMSxfMCxfMCxfMCxfMixfMCxfMixfMCxfMCxfMCxfMCxfMCxfMSxfMCxfMCxfMCxfMSxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCwKKyAgICAgIF80LF81LF81LF80LF8xLF8zLF8xLF8yLF81LF80LF80LF80LF8xLF8yLF8wLF8yLF80LF83LF81LF82LF8zLF8xLF8zLF8wLF81LF82LF80LF82LF8zLF8wLF8yLF8wLF81LF82LF80LF82LF8zLF8wLF8yLF8wLF80LF82LF80LF82LF8yLF8wLF8yLF8wLF83LF80LF82LF80LF8xLF8wLF8wLF8wLF82LF80LF82LF80LF8wLF8wLF8wLF8wLF8wLF8zLF8xLF8yLF8zLF8xLF8zLF8wLF8xLF8yLF8wLF8yLF8zLF8wLF8yLF8wLF8yLF8xLF8zLF8wLF8xLF8xLF8xLF8wLF8zLF8wLF8yLF8wLF8xLF8wLF8wLF8wLF8zLF8wLF8yLF8wLF8xLF8wLF8wLF8wLF8yLF8wLF8yLF8wLF8wLF8wLF8wLF8wLF8xLF8wLF8wLF8wLF8xLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLAorICAgICAgXzEsXzIsXzAsXzIsXzMsXzIsXzIsXzIsXzAsXzIsXzAsXzIsXzIsXzIsXzIsXzIsXzMsXzIsXzIsXzIsXzMsXzAsXzIsXzAsXzIsXzIsXzIsXzIsXzIsXzAsXzIsXzAsXzIsXzIsXzIsXzIsXzIsXzAsXzIsXzAsXzIsXzIsXzIsXzIsXzIsXzAsXzIsXzAsXzIsXzAsXzIsXzAsXzAsXzAsXzAsXzAsXzIsXzAsXzIsXzAsXzAsXzAsXzAsXzAsXzMsXzIsXzIsXzIsXzMsXzAsXzIsXzAsXzIsXzIsXzIsXzIsXzIsXzAsXzIsXzAsXzMsXzAsXzIsXzAsXzEsXzAsXzAsXzAsXzIsXzAsXzIsXzAsXzAsXzAsXzAsXzAsXzIsXzAsXzIsXzAsXzAsXzAsXzAsXzAsXzIsXzAsXzIsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsCisgICAgICBfMCxfMyxfMSxfMixfMyxfMSxfMyxfMCxfMSxfMixfMCxfMixfMyxfMCxfMixfMCxfMixfMSxfMyxfMCxfMSxfMSxfMSxfMCxfMyxfMCxfMixfMCxfMSxfMCxfMCxfMCxfMyxfMCxfMixfMCxfMSxfMCxfMCxfMCxfMixfMCxfMixfMCxfMCxfMCxfMCxfMCxfMSxfMCxfMCxfMCxfMSxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMixfMSxfMyxfMCxfMSxfMSxfMSxfMCxfMyxfMCxfMixfMCxfMSxfMCxfMCxfMCxfMCxfMSxfMSxfMCxfMSxfMSxfMSxfMCxfMSxfMCxfMCxfMCxfMSxfMCxfMCxfMCxfMSxfMCxfMCxfMCxfMSxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMSxfMCxfMCxfMCxfMSxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCwKKyAgICAgIF8zLF8yLF8yLF8yLF8zLF8wLF8yLF8wLF8yLF8yLF8yLF8yLF8yLF8wLF8yLF8wLF8zLF8wLF8yLF8wLF8xLF8wLF8wLF8wLF8yLF8wLF8yLF8wLF8wLF8wLF8wLF8wLF8yLF8wLF8yLF8wLF8wLF8wLF8wLF8wLF8yLF8wLF8yLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8zLF8wLF8yLF8wLF8xLF8wLF8wLF8wLF8yLF8wLF8yLF8wLF8wLF8wLF8wLF8wLF8xLF8wLF8wLF8wLF8xLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLAorICAgICAgXzgsXzksXzksXzgsXzUsXzcsXzUsXzYsXzEsXzAsXzAsXzAsXzUsXzYsXzQsXzYsXzgsX2IsXzksX2EsXzcsXzUsXzcsXzQsXzEsXzIsXzAsXzIsXzcsXzQsXzYsXzQsXzksX2EsXzgsX2EsXzcsXzQsXzYsXzQsXzAsXzIsXzAsXzIsXzYsXzQsXzYsXzQsX2IsXzgsX2EsXzgsXzUsXzQsXzQsXzQsXzIsXzAsXzIsXzAsXzQsXzQsXzQsXzQsX2MsX2YsX2QsX2UsXzMsXzEsXzMsXzAsXzUsXzYsXzQsXzYsXzMsXzAsXzIsXzAsX2UsX2QsX2YsX2MsXzEsXzEsXzEsXzAsXzcsXzQsXzYsXzQsXzEsXzAsXzAsXzAsX2YsX2MsX2UsX2MsXzEsXzAsXzAsXzAsXzYsXzQsXzYsXzQsXzAsXzAsXzAsXzAsX2QsX2MsX2MsX2MsXzEsXzAsXzAsXzAsXzQsXzQsXzQsXzQsXzAsXzAsXzAsXzAsCisgICAgICBfNSxfNixfNCxfNixfMyxfMixfMixfMixfNCxfNixfNCxfNixfMixfMixfMixfMixfNyxfNixfNixfNixfMyxfMCxfMixfMCxfNixfNixfNixfNixfMixfMCxfMixfMCxfNixfNixfNixfNixfMixfMCxfMixfMCxfNixfNixfNixfNixfMixfMCxfMixfMCxfNixfNCxfNixfNCxfMCxfMCxfMCxfMCxfNixfNCxfNixfNCxfMCxfMCxfMCxfMCxfMyxfMixfMixfMixfMyxfMCxfMixfMCxfMixfMixfMixfMixfMixfMCxfMixfMCxfMyxfMCxfMixfMCxfMSxfMCxfMCxfMCxfMixfMCxfMixfMCxfMCxfMCxfMCxfMCxfMixfMCxfMixfMCxfMCxfMCxfMCxfMCxfMixfMCxfMixfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCwKKyAgICAgIF9jLF9mLF9kLF9lLF8zLF8xLF8zLF8wLF81LF82LF80LF82LF8zLF8wLF8yLF8wLF9lLF9kLF9mLF9jLF8xLF8xLF8xLF8wLF83LF80LF82LF80LF8xLF8wLF8wLF8wLF9mLF9jLF9lLF9jLF8xLF8wLF8wLF8wLF82LF80LF82LF80LF8wLF8wLF8wLF8wLF9kLF9jLF9jLF9jLF8xLF8wLF8wLF8wLF80LF80LF80LF80LF8wLF8wLF8wLF8wLF9hLF85LF9iLF84LF8xLF8xLF8xLF8wLF8zLF8wLF8yLF8wLF8xLF8wLF8wLF8wLF84LF85LF85LF84LF8xLF8xLF8xLF8wLF8xLF8wLF8wLF8wLF8xLF8wLF8wLF8wLF85LF84LF84LF84LF8xLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF85LF84LF84LF84LF8xLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLAorICAgICAgXzMsXzIsXzIsXzIsXzMsXzAsXzIsXzAsXzIsXzIsXzIsXzIsXzIsXzAsXzIsXzAsXzMsXzAsXzIsXzAsXzEsXzAsXzAsXzAsXzIsXzAsXzIsXzAsXzAsXzAsXzAsXzAsXzIsXzAsXzIsXzAsXzAsXzAsXzAsXzAsXzIsXzAsXzIsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzMsXzAsXzIsXzAsXzEsXzAsXzAsXzAsXzIsXzAsXzIsXzAsXzAsXzAsXzAsXzAsXzEsXzAsXzAsXzAsXzEsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsCisgICAgICBfNSxfNixfNCxfNixfNyxfNCxfNixfNCxfNCxfNixfNCxfNixfNixfNCxfNixfNCxfNyxfNCxfNixfNCxfNSxfNCxfNCxfNCxfNixfNCxfNixfNCxfNCxfNCxfNCxfNCxfNixfNCxfNixfNCxfNCxfNCxfNCxfNCxfNixfNCxfNixfNCxfNCxfNCxfNCxfNCxfNCxfNCxfNCxfNCxfNCxfNCxfNCxfNCxfNCxfNCxfNCxfNCxfNCxfNCxfNCxfNCxfNyxfNCxfNixfNCxfMSxfMCxfMCxfMCxfNixfNCxfNixfNCxfMCxfMCxfMCxfMCxfNSxfNCxfNCxfNCxfMSxfMCxfMCxfMCxfNCxfNCxfNCxfNCxfMCxfMCxfMCxfMCxfNCxfNCxfNCxfNCxfMCxfMCxfMCxfMCxfNCxfNCxfNCxfNCxfMCxfMCxfMCxfMCxfNCxfNCxfNCxfNCxfMCxfMCxfMCxfMCxfNCxfNCxfNCxfNCxfMCxfMCxfMCxfMCwKKyAgICAgIF82LF82LF82LF82LF8yLF8wLF8yLF8wLF82LF82LF82LF82LF8yLF8wLF8yLF8wLF82LF80LF82LF80LF8wLF8wLF8wLF8wLF82LF80LF82LF80LF8wLF8wLF8wLF8wLF82LF80LF82LF80LF8wLF8wLF8wLF8wLF82LF80LF82LF80LF8wLF8wLF8wLF8wLF80LF80LF80LF80LF8wLF8wLF8wLF8wLF80LF80LF80LF80LF8wLF8wLF8wLF8wLF8yLF8wLF8yLF8wLF8wLF8wLF8wLF8wLF8yLF8wLF8yLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLAorICAgICAgXzcsXzQsXzYsXzQsXzEsXzAsXzAsXzAsXzYsXzQsXzYsXzQsXzAsXzAsXzAsXzAsXzUsXzQsXzQsXzQsXzEsXzAsXzAsXzAsXzQsXzQsXzQsXzQsXzAsXzAsXzAsXzAsXzQsXzQsXzQsXzQsXzAsXzAsXzAsXzAsXzQsXzQsXzQsXzQsXzAsXzAsXzAsXzAsXzQsXzQsXzQsXzQsXzAsXzAsXzAsXzAsXzQsXzQsXzQsXzQsXzAsXzAsXzAsXzAsXzEsXzAsXzAsXzAsXzEsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzEsXzAsXzAsXzAsXzEsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsCisgICAgICBfMixfMCxfMixfMCxfMCxfMCxfMCxfMCxfMixfMCxfMixfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCwKKyAgICAgIF9jLF9kLF9kLF9jLF8xLF8zLF8xLF8yLF81LF80LF80LF80LF8xLF8yLF8wLF8yLF9jLF9mLF9kLF9lLF8zLF8xLF8zLF8wLF81LF82LF80LF82LF8zLF8wLF8yLF8wLF9kLF9lLF9jLF9lLF8zLF8wLF8yLF8wLF80LF82LF80LF82LF8yLF8wLF8yLF8wLF9mLF9jLF9lLF9jLF8xLF8wLF8wLF8wLF82LF80LF82LF80LF8wLF8wLF8wLF8wLF84LF9iLF85LF9hLF8zLF8xLF8zLF8wLF8xLF8yLF8wLF8yLF8zLF8wLF8yLF8wLF9hLF85LF9iLF84LF8xLF8xLF8xLF8wLF8zLF8wLF8yLF8wLF8xLF8wLF8wLF8wLF9iLF84LF9hLF84LF8xLF8wLF8wLF8wLF8yLF8wLF8yLF8wLF8wLF8wLF8wLF8wLF85LF84LF84LF84LF8xLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLAorICAgICAgXzEsXzIsXzAsXzIsXzMsXzIsXzIsXzIsXzAsXzIsXzAsXzIsXzIsXzIsXzIsXzIsXzMsXzIsXzIsXzIsXzMsXzAsXzIsXzAsXzIsXzIsXzIsXzIsXzIsXzAsXzIsXzAsXzIsXzIsXzIsXzIsXzIsXzAsXzIsXzAsXzIsXzIsXzIsXzIsXzIsXzAsXzIsXzAsXzIsXzAsXzIsXzAsXzAsXzAsXzAsXzAsXzIsXzAsXzIsXzAsXzAsXzAsXzAsXzAsXzMsXzIsXzIsXzIsXzMsXzAsXzIsXzAsXzIsXzIsXzIsXzIsXzIsXzAsXzIsXzAsXzMsXzAsXzIsXzAsXzEsXzAsXzAsXzAsXzIsXzAsXzIsXzAsXzAsXzAsXzAsXzAsXzIsXzAsXzIsXzAsXzAsXzAsXzAsXzAsXzIsXzAsXzIsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsCisgICAgICBfOCxfYixfOSxfYSxfMyxfMSxfMyxfMCxfMSxfMixfMCxfMixfMyxfMCxfMixfMCxfYSxfOSxfYixfOCxfMSxfMSxfMSxfMCxfMyxfMCxfMixfMCxfMSxfMCxfMCxfMCxfYixfOCxfYSxfOCxfMSxfMCxfMCxfMCxfMixfMCxfMixfMCxfMCxfMCxfMCxfMCxfOSxfOCxfOCxfOCxfMSxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfYSxfOSxfYixfOCxfMSxfMSxfMSxfMCxfMyxfMCxfMixfMCxfMSxfMCxfMCxfMCxfOCxfOSxfOSxfOCxfMSxfMSxfMSxfMCxfMSxfMCxfMCxfMCxfMSxfMCxfMCxfMCxfOSxfOCxfOCxfOCxfMSxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfOSxfOCxfOCxfOCxfMSxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCwKKyAgICAgIF8zLF8yLF8yLF8yLF8zLF8wLF8yLF8wLF8yLF8yLF8yLF8yLF8yLF8wLF8yLF8wLF8zLF8wLF8yLF8wLF8xLF8wLF8wLF8wLF8yLF8wLF8yLF8wLF8wLF8wLF8wLF8wLF8yLF8wLF8yLF8wLF8wLF8wLF8wLF8wLF8yLF8wLF8yLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8zLF8wLF8yLF8wLF8xLF8wLF8wLF8wLF8yLF8wLF8yLF8wLF8wLF8wLF8wLF8wLF8xLF8wLF8wLF8wLF8xLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLAorICAgICAgXzUsXzYsXzQsXzYsXzMsXzAsXzIsXzAsXzQsXzYsXzQsXzYsXzIsXzAsXzIsXzAsXzcsXzQsXzYsXzQsXzEsXzAsXzAsXzAsXzYsXzQsXzYsXzQsXzAsXzAsXzAsXzAsXzYsXzQsXzYsXzQsXzAsXzAsXzAsXzAsXzYsXzQsXzYsXzQsXzAsXzAsXzAsXzAsXzQsXzQsXzQsXzQsXzAsXzAsXzAsXzAsXzQsXzQsXzQsXzQsXzAsXzAsXzAsXzAsXzMsXzAsXzIsXzAsXzEsXzAsXzAsXzAsXzIsXzAsXzIsXzAsXzAsXzAsXzAsXzAsXzEsXzAsXzAsXzAsXzEsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsCisgICAgICBfMixfMixfMixfMixfMixfMCxfMixfMCxfMixfMixfMixfMixfMixfMCxfMixfMCxfMixfMCxfMixfMCxfMCxfMCxfMCxfMCxfMixfMCxfMixfMCxfMCxfMCxfMCxfMCxfMixfMCxfMixfMCxfMCxfMCxfMCxfMCxfMixfMCxfMixfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMixfMCxfMixfMCxfMCxfMCxfMCxfMCxfMixfMCxfMixfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCwKKyAgICAgIF8zLF8wLF8yLF8wLF8xLF8wLF8wLF8wLF8yLF8wLF8yLF8wLF8wLF8wLF8wLF8wLF8xLF8wLF8wLF8wLF8xLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8xLF8wLF8wLF8wLF8xLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8xLF8wLF8wLF8wLF8xLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLAorICAgICAgXzIsXzAsXzIsXzAsXzAsXzAsXzAsXzAsXzIsXzAsXzIsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsCisgICAgICBfNCxfNSxfNSxfNCxfMSxfMyxfMSxfMixfNSxfNCxfNCxfNCxfMSxfMixfMCxfMixfNCxfNyxfNSxfNixfMyxfMSxfMyxfMCxfNSxfNixfNCxfNixfMyxfMCxfMixfMCxfNSxfNixfNCxfNixfMyxfMCxfMixfMCxfNCxfNixfNCxfNixfMixfMCxfMixfMCxfNyxfNCxfNixfNCxfMSxfMCxfMCxfMCxfNixfNCxfNixfNCxfMCxfMCxfMCxfMCxfMCxfMyxfMSxfMixfMyxfMSxfMyxfMCxfMSxfMixfMCxfMixfMyxfMCxfMixfMCxfMixfMSxfMyxfMCxfMSxfMSxfMSxfMCxfMyxfMCxfMixfMCxfMSxfMCxfMCxfMCxfMyxfMCxfMixfMCxfMSxfMCxfMCxfMCxfMixfMCxfMixfMCxfMCxfMCxfMCxfMCxfMSxfMCxfMCxfMCxfMSxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCwKKyAgICAgIF8xLF8yLF8wLF8yLF8zLF8yLF8yLF8yLF8wLF8yLF8wLF8yLF8yLF8yLF8yLF8yLF8zLF8yLF8yLF8yLF8zLF8wLF8yLF8wLF8yLF8yLF8yLF8yLF8yLF8wLF8yLF8wLF8yLF8yLF8yLF8yLF8yLF8wLF8yLF8wLF8yLF8yLF8yLF8yLF8yLF8wLF8yLF8wLF8yLF8wLF8yLF8wLF8wLF8wLF8wLF8wLF8yLF8wLF8yLF8wLF8wLF8wLF8wLF8wLF8zLF8yLF8yLF8yLF8zLF8wLF8yLF8wLF8yLF8yLF8yLF8yLF8yLF8wLF8yLF8wLF8zLF8wLF8yLF8wLF8xLF8wLF8wLF8wLF8yLF8wLF8yLF8wLF8wLF8wLF8wLF8wLF8yLF8wLF8yLF8wLF8wLF8wLF8wLF8wLF8yLF8wLF8yLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLAorICAgICAgXzAsXzMsXzEsXzIsXzMsXzEsXzMsXzAsXzEsXzIsXzAsXzIsXzMsXzAsXzIsXzAsXzIsXzEsXzMsXzAsXzEsXzEsXzEsXzAsXzMsXzAsXzIsXzAsXzEsXzAsXzAsXzAsXzMsXzAsXzIsXzAsXzEsXzAsXzAsXzAsXzIsXzAsXzIsXzAsXzAsXzAsXzAsXzAsXzEsXzAsXzAsXzAsXzEsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzIsXzEsXzMsXzAsXzEsXzEsXzEsXzAsXzMsXzAsXzIsXzAsXzEsXzAsXzAsXzAsXzAsXzEsXzEsXzAsXzEsXzEsXzEsXzAsXzEsXzAsXzAsXzAsXzEsXzAsXzAsXzAsXzEsXzAsXzAsXzAsXzEsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzEsXzAsXzAsXzAsXzEsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsCisgICAgICBfMyxfMixfMixfMixfMyxfMCxfMixfMCxfMixfMixfMixfMixfMixfMCxfMixfMCxfMyxfMCxfMixfMCxfMSxfMCxfMCxfMCxfMixfMCxfMixfMCxfMCxfMCxfMCxfMCxfMixfMCxfMixfMCxfMCxfMCxfMCxfMCxfMixfMCxfMixfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMyxfMCxfMixfMCxfMSxfMCxfMCxfMCxfMixfMCxfMixfMCxfMCxfMCxfMCxfMCxfMSxfMCxfMCxfMCxfMSxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCwKKyAgICAgIF81LF82LF80LF82LF8zLF8wLF8yLF8wLF80LF82LF80LF82LF8yLF8wLF8yLF8wLF83LF80LF82LF80LF8xLF8wLF8wLF8wLF82LF80LF82LF80LF8wLF8wLF8wLF8wLF82LF80LF82LF80LF8wLF8wLF8wLF8wLF82LF80LF82LF80LF8wLF8wLF8wLF8wLF80LF80LF80LF80LF8wLF8wLF8wLF8wLF80LF80LF80LF80LF8wLF8wLF8wLF8wLF8zLF8wLF8yLF8wLF8xLF8wLF8wLF8wLF8yLF8wLF8yLF8wLF8wLF8wLF8wLF8wLF8xLF8wLF8wLF8wLF8xLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLAorICAgICAgXzIsXzIsXzIsXzIsXzIsXzAsXzIsXzAsXzIsXzIsXzIsXzIsXzIsXzAsXzIsXzAsXzIsXzAsXzIsXzAsXzAsXzAsXzAsXzAsXzIsXzAsXzIsXzAsXzAsXzAsXzAsXzAsXzIsXzAsXzIsXzAsXzAsXzAsXzAsXzAsXzIsXzAsXzIsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzIsXzAsXzIsXzAsXzAsXzAsXzAsXzAsXzIsXzAsXzIsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsCisgICAgICBfMyxfMCxfMixfMCxfMSxfMCxfMCxfMCxfMixfMCxfMixfMCxfMCxfMCxfMCxfMCxfMSxfMCxfMCxfMCxfMSxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMSxfMCxfMCxfMCxfMSxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMSxfMCxfMCxfMCxfMSxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCwKKyAgICAgIF8yLF8wLF8yLF8wLF8wLF8wLF8wLF8wLF8yLF8wLF8yLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLAorICAgICAgXzAsXzEsXzEsXzAsXzEsXzMsXzEsXzIsXzEsXzAsXzAsXzAsXzEsXzIsXzAsXzIsXzAsXzMsXzEsXzIsXzMsXzEsXzMsXzAsXzEsXzIsXzAsXzIsXzMsXzAsXzIsXzAsXzEsXzIsXzAsXzIsXzMsXzAsXzIsXzAsXzAsXzIsXzAsXzIsXzIsXzAsXzIsXzAsXzMsXzAsXzIsXzAsXzEsXzAsXzAsXzAsXzIsXzAsXzIsXzAsXzAsXzAsXzAsXzAsXzAsXzMsXzEsXzIsXzMsXzEsXzMsXzAsXzEsXzIsXzAsXzIsXzMsXzAsXzIsXzAsXzIsXzEsXzMsXzAsXzEsXzEsXzEsXzAsXzMsXzAsXzIsXzAsXzEsXzAsXzAsXzAsXzMsXzAsXzIsXzAsXzEsXzAsXzAsXzAsXzIsXzAsXzIsXzAsXzAsXzAsXzAsXzAsXzEsXzAsXzAsXzAsXzEsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsCisgICAgICBfMSxfMixfMCxfMixfMyxfMixfMixfMixfMCxfMixfMCxfMixfMixfMixfMixfMixfMyxfMixfMixfMixfMyxfMCxfMixfMCxfMixfMixfMixfMixfMixfMCxfMixfMCxfMixfMixfMixfMixfMixfMCxfMixfMCxfMixfMixfMixfMixfMixfMCxfMixfMCxfMixfMCxfMixfMCxfMCxfMCxfMCxfMCxfMixfMCxfMixfMCxfMCxfMCxfMCxfMCxfMyxfMixfMixfMixfMyxfMCxfMixfMCxfMixfMixfMixfMixfMixfMCxfMixfMCxfMyxfMCxfMixfMCxfMSxfMCxfMCxfMCxfMixfMCxfMixfMCxfMCxfMCxfMCxfMCxfMixfMCxfMixfMCxfMCxfMCxfMCxfMCxfMixfMCxfMixfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCwKKyAgICAgIF8wLF8zLF8xLF8yLF8zLF8xLF8zLF8wLF8xLF8yLF8wLF8yLF8zLF8wLF8yLF8wLF8yLF8xLF8zLF8wLF8xLF8xLF8xLF8wLF8zLF8wLF8yLF8wLF8xLF8wLF8wLF8wLF8zLF8wLF8yLF8wLF8xLF8wLF8wLF8wLF8yLF8wLF8yLF8wLF8wLF8wLF8wLF8wLF8xLF8wLF8wLF8wLF8xLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8yLF8xLF8zLF8wLF8xLF8xLF8xLF8wLF8zLF8wLF8yLF8wLF8xLF8wLF8wLF8wLF8wLF8xLF8xLF8wLF8xLF8xLF8xLF8wLF8xLF8wLF8wLF8wLF8xLF8wLF8wLF8wLF8xLF8wLF8wLF8wLF8xLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8xLF8wLF8wLF8wLF8xLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLAorICAgICAgXzMsXzIsXzIsXzIsXzMsXzAsXzIsXzAsXzIsXzIsXzIsXzIsXzIsXzAsXzIsXzAsXzMsXzAsXzIsXzAsXzEsXzAsXzAsXzAsXzIsXzAsXzIsXzAsXzAsXzAsXzAsXzAsXzIsXzAsXzIsXzAsXzAsXzAsXzAsXzAsXzIsXzAsXzIsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzMsXzAsXzIsXzAsXzEsXzAsXzAsXzAsXzIsXzAsXzIsXzAsXzAsXzAsXzAsXzAsXzEsXzAsXzAsXzAsXzEsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsCisgICAgICBfMSxfMixfMCxfMixfMyxfMCxfMixfMCxfMCxfMixfMCxfMixfMixfMCxfMixfMCxfMyxfMCxfMixfMCxfMSxfMCxfMCxfMCxfMixfMCxfMixfMCxfMCxfMCxfMCxfMCxfMixfMCxfMixfMCxfMCxfMCxfMCxfMCxfMixfMCxfMixfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMyxfMCxfMixfMCxfMSxfMCxfMCxfMCxfMixfMCxfMixfMCxfMCxfMCxfMCxfMCxfMSxfMCxfMCxfMCxfMSxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCwKKyAgICAgIF8yLF8yLF8yLF8yLF8yLF8wLF8yLF8wLF8yLF8yLF8yLF8yLF8yLF8wLF8yLF8wLF8yLF8wLF8yLF8wLF8wLF8wLF8wLF8wLF8yLF8wLF8yLF8wLF8wLF8wLF8wLF8wLF8yLF8wLF8yLF8wLF8wLF8wLF8wLF8wLF8yLF8wLF8yLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8yLF8wLF8yLF8wLF8wLF8wLF8wLF8wLF8yLF8wLF8yLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLF8wLAorICAgICAgXzMsXzAsXzIsXzAsXzEsXzAsXzAsXzAsXzIsXzAsXzIsXzAsXzAsXzAsXzAsXzAsXzEsXzAsXzAsXzAsXzEsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzEsXzAsXzAsXzAsXzEsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzEsXzAsXzAsXzAsXzEsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsXzAsCisgICAgICBfMixfMCxfMixfMCxfMCxfMCxfMCxfMCxfMixfMCxfMixfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMCxfMAorICAgfTsKKworICAgcHVibGljIHN0YXRpYyBOb2RlIGNhbGN1bGF0ZShOb2RlIGx0LCBOb2RlIHJ0LCBOb2RlIHJiLCBOb2RlIGxiKSB7CisgICAgICAgaW50IHZhbHVlID0gZ2V0TnVtZXJpYyhsdCkgPDwgMTIgfCBnZXROdW1lcmljKHJ0KSA8PCA4IHwgZ2V0TnVtZXJpYyhyYikgPDwgNCB8IGdldE51bWVyaWMobGIpOworICAgICAgIHJldHVybiBQUkVDQUxDVUxBVEVEW3ZhbHVlXTsKKyAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvdHlwZXMvYXNzaWduYWJsZVN1YmluaGVyaXRvci9lbXB0eS50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3R5cGVzL2Fzc2lnbmFibGVTdWJpbmhlcml0b3IvZW1wdHkudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2OWRlMjkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3R5cGVzL2Fzc2lnbmFibGVTdWJpbmhlcml0b3IvZW1wdHkudHh0CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3R5cGVzL2JvdW5kZWRQYXJhbXMvQS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS90eXBlcy9ib3VuZGVkUGFyYW1zL0EuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZTlkYzVlCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS90eXBlcy9ib3VuZGVkUGFyYW1zL0EuamF2YQpAQCAtMCwwICsxLDcgQEAKK2ltcG9ydCB0ZXN0Lio7CisKK2NsYXNzIEE8VCBleHRlbmRzIENvbGxlY3Rpb24+IHsKKyAgICB2b2lkIG1ldGhvZChUIHBhcmFtKSB7CisJSXRlcmF0b3IgaXQgPSBwYXJhbS5pdGVyYXRvcigpOworICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvdHlwZXMvY29tcGxleEluaGVyaXRhbmNlL0EuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvdHlwZXMvY29tcGxleEluaGVyaXRhbmNlL0EuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMWNjNGFhCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS90eXBlcy9jb21wbGV4SW5oZXJpdGFuY2UvQS5qYXZhCkBAIC0wLDAgKzEsOSBAQAoraW1wb3J0IHRlc3QuKjsKKworcHVibGljIGNsYXNzIEEgeworICAgIHZvaWQgbWV0aG9kKCkgeworICAgICAgICBJbnRMaXN0TGlzdCBsID0gbmV3IEludExpc3RMaXN0KCk7CisgICAgICAgIGwuZ2V0KDApOworICAgIH0KK30KKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS90eXBlcy9saXN0TGlzdEluaGVyaXRhbmNlL0EuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvdHlwZXMvbGlzdExpc3RJbmhlcml0YW5jZS9BLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmVmZjdlMgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvdHlwZXMvbGlzdExpc3RJbmhlcml0YW5jZS9BLmphdmEKQEAgLTAsMCArMSwxNSBAQAoraW1wb3J0IHRlc3QuKjsKKworcHVibGljIGNsYXNzIEEgeworICAgIHB1YmxpYyBzdGF0aWMgY2xhc3MgQiBleHRlbmRzIExpc3RMaXN0PEludGVnZXI+IHsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBtZXRob2QoKSB7CisgICAgICAgIExpc3RMaXN0PEludGVnZXI+IGwgPSBuZXcgTGlzdExpc3Q8SW50ZWdlcj4oKTsKKyAgICAgICAgbC5nZXQoMCk7CisgICAgICAgIEIgYiA9IG5ldyBCKCk7CisgICAgICAgIGIuZ2V0KDApOworICAgICAgICBsLmFkZChiLmdldCgwKSk7CisgICAgICAgIGIuYWRkKGwuZ2V0KDApKQorICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvdHlwZXMvbWV0aG9kVHlwZVBhcmFtZXRlci9BLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3R5cGVzL21ldGhvZFR5cGVQYXJhbWV0ZXIvQS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVhMzNlNTcKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3R5cGVzL21ldGhvZFR5cGVQYXJhbWV0ZXIvQS5qYXZhCkBAIC0wLDAgKzEsMTAgQEAKK2ltcG9ydCB0ZXN0Lio7CisKK3B1YmxpYyBjbGFzcyBBIHsKKyAgICBwdWJsaWMgdm9pZCBtZXRob2QoKSB7CisgICAgICAgIExpc3Q8SW50ZWdlcj4gbCA9IG5ldyBMaXN0PEludGVnZXI+KCk7CisgICAgICAgIENvbGxlY3Rpb25VdGlsLnNvcnQobCk7CisgICAgICAgIExpc3QgbDEgPSBuZXcgTGlzdCgpOworICAgICAgICBDb2xsZWN0aW9uVXRpbC5zb3J0KGwxKQorICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvdHlwZXMvcmF3QXJyYXlUeXBlcy9BLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3R5cGVzL3Jhd0FycmF5VHlwZXMvQS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU1MmEwYmEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3R5cGVzL3Jhd0FycmF5VHlwZXMvQS5qYXZhCkBAIC0wLDAgKzEsOSBAQAoraW1wb3J0IHRlc3QuKjsKKworY2xhc3MgQSB7CisgICAgdm9pZCBtZXRob2QoKSB7CisgICAgICAgIExpc3QgbDsKKyAgICAgICAgbC5nZXRBcnJheSgpOworICAgICAgICBsLmdldExpc3RPZkFycmF5cygpOworICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvdHlwZXMvcmF3VHlwZUV4dGVuc2lvbi9BLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3R5cGVzL3Jhd1R5cGVFeHRlbnNpb24vQS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJiMDlmMzUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3R5cGVzL3Jhd1R5cGVFeHRlbnNpb24vQS5qYXZhCkBAIC0wLDAgKzEsNyBAQAoraW1wb3J0IHRlc3QuKjsKKworY2xhc3MgQSBleHRlbmRzIExpc3QgeworICAgIHZvaWQgbWV0aG9kKCkgeworCUl0ZXJhdG9yIGl0ID0gaXRlcmF0b3IoKTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3R5cGVzL3Jhd1R5cGVJbk1ldGhvZEFyZy9BLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3R5cGVzL3Jhd1R5cGVJbk1ldGhvZEFyZy9BLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDI3OWEyYQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvdHlwZXMvcmF3VHlwZUluTWV0aG9kQXJnL0EuamF2YQpAQCAtMCwwICsxLDkgQEAKK2ltcG9ydCB0ZXN0Lio7CisKK2NsYXNzIEEgeworICAgIHB1YmxpYyB2b2lkIG1ldGhvZCgpIHsKKyAgICAgICAgTGlzdDxTdHJpbmc+IGwgPSBuZXcgTGlzdDxTdHJpbmc+KCk7CisgICAgICAgIExpc3QgbDEgPSBuZXcgTGlzdCgpOworICAgICAgICBsMS5wdXRBbGwobCk7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS90eXBlcy9yYXdUeXBlcy9BLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3R5cGVzL3Jhd1R5cGVzL0EuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MWJiNDdmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS90eXBlcy9yYXdUeXBlcy9BLmphdmEKQEAgLTAsMCArMSw5IEBACitpbXBvcnQgdGVzdC4qOworCitjbGFzcyBBIHsKKyAgICBwdWJsaWMgdm9pZCBtZXRob2QoKSB7CisJTGlzdCBsaXN0ID0gbmV3IExpc3QoKTsKKyAgICAgICAgbGlzdC5hZGQobmV3IEEoKSk7CisgICAgICAgIGxpc3QuaXRlcmF0b3IoKTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3R5cGVzL3NpbXBsZVJhd1R5cGVJbk1ldGhvZEFyZy9BLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3R5cGVzL3NpbXBsZVJhd1R5cGVJbk1ldGhvZEFyZy9BLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTQ0MTVmMgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvdHlwZXMvc2ltcGxlUmF3VHlwZUluTWV0aG9kQXJnL0EuamF2YQpAQCAtMCwwICsxLDkgQEAKK2ltcG9ydCB0ZXN0Lio7CisKK3B1YmxpYyBjbGFzcyBBIHsKKyAgICB2b2lkIG1ldGhvZCgpIHsKKyAgICAgICAgT2JqZWN0IG8gPSBudWxsOworICAgICAgICBMaXN0IGwgPSBuZXcgTGlzdCgpOyAgICAgICAKKyAgICAgICAgbC5hZGQobyk7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS90eXBlcy9zaW1wbGVTdHVmZi9BLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3R5cGVzL3NpbXBsZVN0dWZmL0EuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNDAzOWFjCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS90eXBlcy9zaW1wbGVTdHVmZi9BLmphdmEKQEAgLTAsMCArMSw5IEBACitpbXBvcnQgdGVzdC4qOworCitjbGFzcyBBIHsKKyAgICBwdWJsaWMgdm9pZCBtZXRob2QoKSB7CisJTGlzdDxTdHJpbmc+IGxpc3QgPSBuZXcgTGlzdDxTdHJpbmc+KCk7CisgICAgICAgIGxpc3QuYWRkKCJhYmNkIik7CisJbGlzdC5pdGVyYXRvcigpOworICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvdHlwZXMvc3BhY2VJblR5cGVQYXJhbWV0ZXJMaXN0L0EuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvdHlwZXMvc3BhY2VJblR5cGVQYXJhbWV0ZXJMaXN0L0EuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NTk2NTJkCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS90eXBlcy9zcGFjZUluVHlwZVBhcmFtZXRlckxpc3QvQS5qYXZhCkBAIC0wLDAgKzEsNyBAQAoraW1wb3J0IHRlc3QuKjsKKworcHVibGljIGNsYXNzIEEgeworICAgIHB1YmxpYyB2b2lkIG1ldGhvZCgpIHsKKyAgICAgICAgTGlzdDxMaXN0IDxJbnRlZ2VyPj4gbCA9IG51bGw7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS90eXBlcy9zcmMvdGVzdC9BYnN0cmFjdENvbGxlY3Rpb24uamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvdHlwZXMvc3JjL3Rlc3QvQWJzdHJhY3RDb2xsZWN0aW9uLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWMyYjRjZAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvdHlwZXMvc3JjL3Rlc3QvQWJzdHJhY3RDb2xsZWN0aW9uLmphdmEKQEAgLTAsMCArMSwyIEBACitwdWJsaWMgY2xhc3MgU3ViTGlzdDxFPiBleHRlbmRzIExpc3Q8RT4geworfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS90eXBlcy9zcmMvdGVzdC9Db2xsZWN0aW9uLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3R5cGVzL3NyYy90ZXN0L0NvbGxlY3Rpb24uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mN2MxMzNiMQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvdHlwZXMvc3JjL3Rlc3QvQ29sbGVjdGlvbi5qYXZhCkBAIC0wLDAgKzEsOSBAQAorcGFja2FnZSB0ZXN0OworCitwdWJsaWMgaW50ZXJmYWNlIENvbGxlY3Rpb248RT4geworICAgIHZvaWQgYWRkKEUgZSk7CisgICAgdm9pZCByZW1vdmUoRSBlKTsKKyAgICBib29sZWFuIGNvbnRhaW5zKEUgZSk7CisgICAgSXRlcmF0b3I8RT4gaXRlcmF0b3IoKTsKKyAgICB2b2lkIHB1dEFsbChDb2xsZWN0aW9uPEU+IGwpOworfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS90eXBlcy9zcmMvdGVzdC9Db2xsZWN0aW9uVXRpbC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS90eXBlcy9zcmMvdGVzdC9Db2xsZWN0aW9uVXRpbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhiYTY3OTEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3R5cGVzL3NyYy90ZXN0L0NvbGxlY3Rpb25VdGlsLmphdmEKQEAgLTAsMCArMSw2IEBACitwYWNrYWdlIHRlc3Q7CisKK3B1YmxpYyBhYnN0cmFjdCBjbGFzcyBDb2xsZWN0aW9uVXRpbCB7CisgICAgcHVibGljIHN0YXRpYyA8VD4gdm9pZCBzb3J0KENvbGxlY3Rpb248VD4gY29sbGVjdGlvbikgeworICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvdHlwZXMvc3JjL3Rlc3QvSW50TGlzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS90eXBlcy9zcmMvdGVzdC9JbnRMaXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjM3MWI1YgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvdHlwZXMvc3JjL3Rlc3QvSW50TGlzdC5qYXZhCkBAIC0wLDAgKzEsNSBAQAorcGFja2FnZSB0ZXN0OworCitwdWJsaWMgY2xhc3MgSW50TGlzdCBleHRlbmRzIExpc3Q8SW50ZWdlcj4geworCit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3R5cGVzL3NyYy90ZXN0L0ludExpc3RMaXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3R5cGVzL3NyYy90ZXN0L0ludExpc3RMaXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWQyYzIyYgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvdHlwZXMvc3JjL3Rlc3QvSW50TGlzdExpc3QuamF2YQpAQCAtMCwwICsxLDQgQEAKK3BhY2thZ2UgdGVzdDsKKworcHVibGljIGNsYXNzIEludExpc3RMaXN0IGV4dGVuZHMgTGlzdDxMaXN0PEludGVnZXI+PiB7Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3R5cGVzL3NyYy90ZXN0L0l0ZXJhdG9yLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3R5cGVzL3NyYy90ZXN0L0l0ZXJhdG9yLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjZiYTE5YgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvdHlwZXMvc3JjL3Rlc3QvSXRlcmF0b3IuamF2YQpAQCAtMCwwICsxLDUgQEAKK3BhY2thZ2UgdGVzdDsKK3B1YmxpYyBpbnRlcmZhY2UgSXRlcmF0b3I8RT4geworICAgIEUgbmV4dCgpOworICAgIGJvb2xlYW4gaGFzTmV4dCgpOworfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS90eXBlcy9zcmMvdGVzdC9MaXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3R5cGVzL3NyYy90ZXN0L0xpc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYTliN2E2Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS90eXBlcy9zcmMvdGVzdC9MaXN0LmphdmEKQEAgLTAsMCArMSwyMyBAQAorcGFja2FnZSB0ZXN0OworCitwdWJsaWMgY2xhc3MgTGlzdDxUPiBpbXBsZW1lbnRzIENvbGxlY3Rpb248VD4geworICAgcHVibGljIHZvaWQgYWRkKFQgZSkgeworICAgfQorICAgcHVibGljIHZvaWQgcmVtb3ZlKFQgZSkgeworICAgfQorICAgcHVibGljIEl0ZXJhdG9yPFQ+IGl0ZXJhdG9yKCkgeworICAgICAgIHJldHVybiBudWxsOworICAgfQorICAgcHVibGljIGJvb2xlYW4gY29udGFpbnMoVCBlKSB7CisgICAgICAgcmV0dXJuIGZhbHNlOworICAgfQorICAgcHVibGljIFQgZ2V0KGludCBpKSB7CisgICAgICAgcmV0dXJuIG51bGw7CisgICB9CisgICBwdWJsaWMgdm9pZCBwdXRBbGwoQ29sbGVjdGlvbjxUPiBlKSB7CisgICB9CisgICBwdWJsaWMgVFtdIGdldEFycmF5KCkgeworICAgfQorICAgcHVibGljIExpc3Q8VFtdPiBnZXRMaXN0T2ZBcnJheXMoKSB7CisgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3R5cGVzL3NyYy90ZXN0L0xpc3RMaXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3R5cGVzL3NyYy90ZXN0L0xpc3RMaXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmZjZjc3YwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvdHlwZXMvc3JjL3Rlc3QvTGlzdExpc3QuamF2YQpAQCAtMCwwICsxLDQgQEAKK3BhY2thZ2UgdGVzdDsKKworcHVibGljIGNsYXNzIExpc3RMaXN0PFQ+IGV4dGVuZHMgTGlzdDxMaXN0PFQ+PiB7Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3R5cGVzL3NyYy90ZXN0L1N1Ykxpc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvdHlwZXMvc3JjL3Rlc3QvU3ViTGlzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhhMGNiZWUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3R5cGVzL3NyYy90ZXN0L1N1Ykxpc3QuamF2YQpAQCAtMCwwICsxLDQgQEAKK3BhY2thZ2UgdGVzdDsKKworcHVibGljIGNsYXNzIFN1Ykxpc3Q8TD4gZXh0ZW5kcyBMaXN0PEw+IHsKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvdHlwZXMvc3Vic3RXaXRoSW5oZXJpdG9yL0EuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvdHlwZXMvc3Vic3RXaXRoSW5oZXJpdG9yL0EuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZGRiYTVhCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS90eXBlcy9zdWJzdFdpdGhJbmhlcml0b3IvQS5qYXZhCkBAIC0wLDAgKzEsOSBAQAoraW1wb3J0IHRlc3QuKjsKKworY2xhc3MgQSB7CisgICAgcHVibGljIHZvaWQgbWV0aG9kKCkgeworICAgICAgICBJbnRMaXN0IGxpc3QgPSBuZXcgSW50TGlzdCgpOworICAgICAgICBsaXN0LmFkZChuZXcgSW50ZWdlcigxKSk7CisgICAgICAgIGxpc3QuaXRlcmF0b3IoKTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3R5cGVzL3R5cGVzSW5HZW5lcmljQ2xhc3MvQS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS90eXBlcy90eXBlc0luR2VuZXJpY0NsYXNzL0EuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZjAyYWRjCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS90eXBlcy90eXBlc0luR2VuZXJpY0NsYXNzL0EuamF2YQpAQCAtMCwwICsxLDkgQEAKK3B1YmxpYyBjbGFzcyBBPFQ+IHsKKyAgICBUIGdldCgpIHsKKyAgICAgICAgcmV0dXJuIG51bGw7CisgICAgfQorCisgICAgdm9pZCBtZXRob2QoKSB7CisgICAgICAgIGdldCgpOworICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvdHlwZXMvd2lsZGNhcmRUeXBlc0Fzc2lnbmFibGUvdXNhZ2VzL0Jhc2UuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvdHlwZXMvd2lsZGNhcmRUeXBlc0Fzc2lnbmFibGUvdXNhZ2VzL0Jhc2UuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNWMzNTlkCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS90eXBlcy93aWxkY2FyZFR5cGVzQXNzaWduYWJsZS91c2FnZXMvQmFzZS5qYXZhCkBAIC0wLDAgKzEsNCBAQAorcGFja2FnZSB1c2FnZXM7CisKK3B1YmxpYyBjbGFzcyBCYXNlIHsKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvdHlwZXMvd2lsZGNhcmRUeXBlc0Fzc2lnbmFibGUvdXNhZ2VzL0ludGVybWVkaWF0ZS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3BzaS90eXBlcy93aWxkY2FyZFR5cGVzQXNzaWduYWJsZS91c2FnZXMvSW50ZXJtZWRpYXRlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDkzOWFhYwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvdHlwZXMvd2lsZGNhcmRUeXBlc0Fzc2lnbmFibGUvdXNhZ2VzL0ludGVybWVkaWF0ZS5qYXZhCkBAIC0wLDAgKzEsNCBAQAorcGFja2FnZSB1c2FnZXM7CisKK3B1YmxpYyBjbGFzcyBJbnRlcm1lZGlhdGUgZXh0ZW5kcyBCYXNlLCBSdW5uYWJsZSB7Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3R5cGVzL3dpbGRjYXJkVHlwZXNBc3NpZ25hYmxlL3VzYWdlcy9MZWFmLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcHNpL3R5cGVzL3dpbGRjYXJkVHlwZXNBc3NpZ25hYmxlL3VzYWdlcy9MZWFmLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmY5M2I2NQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9wc2kvdHlwZXMvd2lsZGNhcmRUeXBlc0Fzc2lnbmFibGUvdXNhZ2VzL0xlYWYuamF2YQpAQCAtMCwwICsxLDQgQEAKK3BhY2thZ2UgdXNhZ2VzOworCitwdWJsaWMgY2xhc3MgTGVhZiBleHRlbmRzIEludGVybWVkaWF0ZSB7Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvYW5vbnltb3VzVG9Jbm5lci9jYW5CZVN0YXRpYy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2Fub255bW91c1RvSW5uZXIvY2FuQmVTdGF0aWMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZDdjYTQ5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2Fub255bW91c1RvSW5uZXIvY2FuQmVTdGF0aWMuamF2YQpAQCAtMCwwICsxLDE0IEBACitwdWJsaWMgY2xhc3MgRm9vIHsKKyAgICBwdWJsaWM8VD4gdm9pZCBmb28oKSB7CisgICAgICAgIFByZWRpY2F0ZTxUPiBwcmVkaWNhdGUgPSBuZTxjYXJldD53IFByZWRpY2F0ZTxUPigpIHsKKyAgICAgICAgICAgIEBPdmVycmlkZQorICAgICAgICAgICAgcHVibGljIGJvb2xlYW4gdGVzdChUIHQpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgIH07CisgICAgfQorCisgICAgcHJpdmF0ZSBpbnRlcmZhY2UgUHJlZGljYXRlPEs+IHsKKyAgICAgICAgYm9vbGVhbiB0ZXN0KEsgdCk7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9hbm9ueW1vdXNUb0lubmVyL2NhbkJlU3RhdGljX2FmdGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvYW5vbnltb3VzVG9Jbm5lci9jYW5CZVN0YXRpY19hZnRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRiY2ZhYjEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvYW5vbnltb3VzVG9Jbm5lci9jYW5CZVN0YXRpY19hZnRlci5qYXZhCkBAIC0wLDAgKzEsMTYgQEAKK3B1YmxpYyBjbGFzcyBGb28geworICAgIHB1YmxpYzxUPiB2b2lkIGZvbygpIHsKKyAgICAgICAgUHJlZGljYXRlPFQ+IHByZWRpY2F0ZSA9IG5ldyBNeVByZWRpY2F0ZTw+KCk7CisgICAgfQorCisgICAgcHJpdmF0ZSBpbnRlcmZhY2UgUHJlZGljYXRlPEs+IHsKKyAgICAgICAgYm9vbGVhbiB0ZXN0KEsgdCk7CisgICAgfQorCisgICAgcHJpdmF0ZSBzdGF0aWMgY2xhc3MgTXlQcmVkaWNhdGU8VD4gaW1wbGVtZW50cyBQcmVkaWNhdGU8VD4geworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIGJvb2xlYW4gdGVzdChUIHQpIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvYW5vbnltb3VzVG9Jbm5lci9jb2xsYXBzZURpYW1vbmRzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvYW5vbnltb3VzVG9Jbm5lci9jb2xsYXBzZURpYW1vbmRzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGQ3Y2E0OQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9hbm9ueW1vdXNUb0lubmVyL2NvbGxhcHNlRGlhbW9uZHMuamF2YQpAQCAtMCwwICsxLDE0IEBACitwdWJsaWMgY2xhc3MgRm9vIHsKKyAgICBwdWJsaWM8VD4gdm9pZCBmb28oKSB7CisgICAgICAgIFByZWRpY2F0ZTxUPiBwcmVkaWNhdGUgPSBuZTxjYXJldD53IFByZWRpY2F0ZTxUPigpIHsKKyAgICAgICAgICAgIEBPdmVycmlkZQorICAgICAgICAgICAgcHVibGljIGJvb2xlYW4gdGVzdChUIHQpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgIH07CisgICAgfQorCisgICAgcHJpdmF0ZSBpbnRlcmZhY2UgUHJlZGljYXRlPEs+IHsKKyAgICAgICAgYm9vbGVhbiB0ZXN0KEsgdCk7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9hbm9ueW1vdXNUb0lubmVyL2NvbGxhcHNlRGlhbW9uZHNfYWZ0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9hbm9ueW1vdXNUb0lubmVyL2NvbGxhcHNlRGlhbW9uZHNfYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YmNmYWIxCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2Fub255bW91c1RvSW5uZXIvY29sbGFwc2VEaWFtb25kc19hZnRlci5qYXZhCkBAIC0wLDAgKzEsMTYgQEAKK3B1YmxpYyBjbGFzcyBGb28geworICAgIHB1YmxpYzxUPiB2b2lkIGZvbygpIHsKKyAgICAgICAgUHJlZGljYXRlPFQ+IHByZWRpY2F0ZSA9IG5ldyBNeVByZWRpY2F0ZTw+KCk7CisgICAgfQorCisgICAgcHJpdmF0ZSBpbnRlcmZhY2UgUHJlZGljYXRlPEs+IHsKKyAgICAgICAgYm9vbGVhbiB0ZXN0KEsgdCk7CisgICAgfQorCisgICAgcHJpdmF0ZSBzdGF0aWMgY2xhc3MgTXlQcmVkaWNhdGU8VD4gaW1wbGVtZW50cyBQcmVkaWNhdGU8VD4geworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIGJvb2xlYW4gdGVzdChUIHQpIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvYW5vbnltb3VzVG9Jbm5lci9nZW5lcmljVHlwZVBhcmFtZXRlcnMuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9hbm9ueW1vdXNUb0lubmVyL2dlbmVyaWNUeXBlUGFyYW1ldGVycy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQwYzBhYWMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvYW5vbnltb3VzVG9Jbm5lci9nZW5lcmljVHlwZVBhcmFtZXRlcnMuamF2YQpAQCAtMCwwICsxLDE4IEBACitpbXBvcnQgamF2YS51dGlsLio7CisKK2NsYXNzIEE8SywgVj4geworICAgIHB1YmxpYyBJdGVyYXRvcjxNYXAuRW50cnk8SywgVj4+IGl0ZXJhdG9yKGxvbmcgcmV2aXNpb24pIHsKKyAgICAgICAgcmV0dXJuIG5ldyA8Y2FyZXQ+SXRlcmF0b3I8TWFwLkVudHJ5PEssIFY+PigpIHsKKyAgICAgICAgICAgIHB1YmxpYyBib29sZWFuIGhhc05leHQoKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBwdWJsaWMgTWFwLkVudHJ5PEssIFY+IG5leHQoKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHB1YmxpYyB2b2lkIHJlbW92ZSgpIHsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2Fub255bW91c1RvSW5uZXIvZ2VuZXJpY1R5cGVQYXJhbWV0ZXJzX2FmdGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvYW5vbnltb3VzVG9Jbm5lci9nZW5lcmljVHlwZVBhcmFtZXRlcnNfYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZWUzNTY4NwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9hbm9ueW1vdXNUb0lubmVyL2dlbmVyaWNUeXBlUGFyYW1ldGVyc19hZnRlci5qYXZhCkBAIC0wLDAgKzEsMjAgQEAKK2ltcG9ydCBqYXZhLnV0aWwuKjsKKworY2xhc3MgQTxLLCBWPiB7CisgICAgcHVibGljIEl0ZXJhdG9yPE1hcC5FbnRyeTxLLCBWPj4gaXRlcmF0b3IobG9uZyByZXZpc2lvbikgeworICAgICAgICByZXR1cm4gbmV3IE15SXRlcmF0b3I8PigpOworICAgIH0KKworICAgIHByaXZhdGUgc3RhdGljIGNsYXNzIE15SXRlcmF0b3I8SywgVj4gaW1wbGVtZW50cyBJdGVyYXRvcjxNYXAuRW50cnk8SywgVj4+IHsKKyAgICAgICAgcHVibGljIGJvb2xlYW4gaGFzTmV4dCgpIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyBNYXAuRW50cnk8SywgVj4gbmV4dCgpIHsKKyAgICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICB9CisKKyAgICAgICAgcHVibGljIHZvaWQgcmVtb3ZlKCkgeworICAgICAgICB9CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9hbm9ueW1vdXNUb0lubmVyL2luc2lkZUludGVyZmFjZS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2Fub255bW91c1RvSW5uZXIvaW5zaWRlSW50ZXJmYWNlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDZkYTUwNQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9hbm9ueW1vdXNUb0lubmVyL2luc2lkZUludGVyZmFjZS5qYXZhCkBAIC0wLDAgKzEsOCBAQAoraW50ZXJmYWNlIE0geworICBSdW5uYWJsZSByID0gbmV3IFJ1bm5hYmxlKCkgezxjYXJldD4KKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgdm9pZCBydW4oKSB7CisKKyAgICB9CisgIH07Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2Fub255bW91c1RvSW5uZXIvaW5zaWRlSW50ZXJmYWNlX2FmdGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvYW5vbnltb3VzVG9Jbm5lci9pbnNpZGVJbnRlcmZhY2VfYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kY2E2NDQ1Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2Fub255bW91c1RvSW5uZXIvaW5zaWRlSW50ZXJmYWNlX2FmdGVyLmphdmEKQEAgLTAsMCArMSwxMCBAQAoraW50ZXJmYWNlIE0geworICBSdW5uYWJsZSByID0gbmV3IE15UnVubmFibGUoKTsKKworICAgIGNsYXNzIE15UnVubmFibGUgaW1wbGVtZW50cyBSdW5uYWJsZSB7CisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgdm9pZCBydW4oKSB7CisgICAgCisgICAgICAgIH0KKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2NoYW5nZUNsYXNzU2lnbmF0dXJlL0FkZFBhcmFtLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvY2hhbmdlQ2xhc3NTaWduYXR1cmUvQWRkUGFyYW0uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YWRmY2YwCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2NoYW5nZUNsYXNzU2lnbmF0dXJlL0FkZFBhcmFtLmphdmEKQEAgLTAsMCArMSw5IEBACitjbGFzcyBMPEU+IHt9CitjbGFzcyA8Y2FyZXQ+QzxUPiB7Cit9CisKK2NsYXNzIFVzYWdlIGV4dGVuZHMgQzxTdHJpbmc+IHsKKyAgeworICAgIEM8PyBleHRlbmRzIEludGVnZXI+IGMgPSBuZXcgQzxJbnRlZ2VyPigpOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2NoYW5nZUNsYXNzU2lnbmF0dXJlL0FkZFBhcmFtLmphdmEuYWZ0ZXIgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvY2hhbmdlQ2xhc3NTaWduYXR1cmUvQWRkUGFyYW0uamF2YS5hZnRlcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NDIxMWExCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2NoYW5nZUNsYXNzU2lnbmF0dXJlL0FkZFBhcmFtLmphdmEuYWZ0ZXIKQEAgLTAsMCArMSw5IEBACitjbGFzcyBMPEU+IHt9CitjbGFzcyA8Y2FyZXQ+QzxULCBFPiB7Cit9CisKK2NsYXNzIFVzYWdlIGV4dGVuZHMgQzxTdHJpbmcsIEw8U3RyaW5nPj4geworICB7CisgICAgQzw/IGV4dGVuZHMgSW50ZWdlciwgTDw/IGV4dGVuZHMgSW50ZWdlcj4+IGMgPSBuZXcgQzxJbnRlZ2VyLCBMPEludGVnZXI+PigpOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2NoYW5nZUNsYXNzU2lnbmF0dXJlL0luc3RhbmNlT2YuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9jaGFuZ2VDbGFzc1NpZ25hdHVyZS9JbnN0YW5jZU9mLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzdlNzY5NAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9jaGFuZ2VDbGFzc1NpZ25hdHVyZS9JbnN0YW5jZU9mLmphdmEKQEAgLTAsMCArMSwxMSBAQAorcHVibGljIGNsYXNzIENoYW5nZUNsYXNzU2lnbmF0dXJlQWRkUGFyYW1ldGVyIHsKKworICBwdWJsaWMgdm9pZCB0ZXN0KE9iamVjdCBvYmplY3QpIHsKKyAgICBpZiAob2JqZWN0IGluc3RhbmNlb2YgTXlDbGFzcykgeworICAgICAgTXlDbGFzcyBteUNsYXNzID0gKE15Q2xhc3Mpb2JqZWN0OworICAgIH0KKyAgfQorfQorCitjbGFzcyBNeTxjYXJldD5DbGFzcyB7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2NoYW5nZUNsYXNzU2lnbmF0dXJlL0luc3RhbmNlT2YuamF2YS5hZnRlciBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9jaGFuZ2VDbGFzc1NpZ25hdHVyZS9JbnN0YW5jZU9mLmphdmEuYWZ0ZXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTIxYjg2YQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9jaGFuZ2VDbGFzc1NpZ25hdHVyZS9JbnN0YW5jZU9mLmphdmEuYWZ0ZXIKQEAgLTAsMCArMSwxMSBAQAorcHVibGljIGNsYXNzIENoYW5nZUNsYXNzU2lnbmF0dXJlQWRkUGFyYW1ldGVyIHsKKworICBwdWJsaWMgdm9pZCB0ZXN0KE9iamVjdCBvYmplY3QpIHsKKyAgICBpZiAob2JqZWN0IGluc3RhbmNlb2YgTXlDbGFzcykgeworICAgICAgTXlDbGFzczxTdHJpbmc+IG15Q2xhc3MgPSAoTXlDbGFzczxTdHJpbmc+KW9iamVjdDsKKyAgICB9CisgIH0KK30KKworY2xhc3MgTXlDbGFzczxUPiB7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2NoYW5nZUNsYXNzU2lnbmF0dXJlL05vUGFyYW1zLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvY2hhbmdlQ2xhc3NTaWduYXR1cmUvTm9QYXJhbXMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NDA3MWFiCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2NoYW5nZUNsYXNzU2lnbmF0dXJlL05vUGFyYW1zLmphdmEKQEAgLTAsMCArMSwxMCBAQAorY2xhc3MgPGNhcmV0PkMgeworfQorCitjbGFzcyBVc2FnZSBleHRlbmRzIEMgeworICB7CisgICAgQyBjID0gbmV3IEMoKTsKKworICAgIEMgYyA9IG5ldyBDKCkgeyB9CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvY2hhbmdlQ2xhc3NTaWduYXR1cmUvTm9QYXJhbXMuamF2YS5hZnRlciBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9jaGFuZ2VDbGFzc1NpZ25hdHVyZS9Ob1BhcmFtcy5qYXZhLmFmdGVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE5MjVkZGUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvY2hhbmdlQ2xhc3NTaWduYXR1cmUvTm9QYXJhbXMuamF2YS5hZnRlcgpAQCAtMCwwICsxLDEwIEBACitjbGFzcyBDPFQ+IHsKK30KKworY2xhc3MgVXNhZ2UgZXh0ZW5kcyBDPFN0cmluZz4geworICB7CisgICAgQzxTdHJpbmc+IGMgPSBuZXcgQzxTdHJpbmc+KCk7CisKKyAgICBDPFN0cmluZz4gYyA9IG5ldyBDPFN0cmluZz4oKSB7IH0KKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9jaGFuZ2VDbGFzc1NpZ25hdHVyZS9PbmVTdHJpbmcuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9jaGFuZ2VDbGFzc1NpZ25hdHVyZS9PbmVTdHJpbmcuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNmMzMTliCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2NoYW5nZUNsYXNzU2lnbmF0dXJlL09uZVN0cmluZy5qYXZhCkBAIC0wLDAgKzEsMjEgQEAKK2NsYXNzIDxjYXJldD5TdWJqZWN0PFQ+IHsKK30KKworaW50ZXJmYWNlIFN1YmplY3RGYWNlIHsKK30KKworcHVibGljIGNsYXNzIENsaWVudCBleHRlbmRzIFN1YmplY3Q8U3RyaW5nPiBpbXBsZW1lbnRzIFN1YmplY3RGYWNlIHsKKwlwcml2YXRlIFN1YmplY3Q8U3RyaW5nPiBteVN1YmplY3QgPSBuZXcgU3ViamVjdDxTdHJpbmc+KCk7CisJcHJpdmF0ZSBTdWJqZWN0RmFjZSBteVN1YmplY3RGYWNlID0gbmV3IFN1YmplY3RGYWNlKCkgeworCX07CisKKwlwdWJsaWMgU3ViamVjdDxTdHJpbmc+IHN1YmplY3RNZXRob2QoU3ViamVjdDxTdHJpbmc+IHN1YmplY3QpIHsKKwkJU3ViamVjdDxTdHJpbmc+IHZhclN1YmplY3QgPSBuZXcgU3ViamVjdDxTdHJpbmc+KCk7CisJCXJldHVybiB2YXJTdWJqZWN0OworCX0KKwlwdWJsaWMgU3ViamVjdEZhY2Ugc3ViamVjdEZhY2VNZXRob2QoU3ViamVjdEZhY2Ugc3ViamVjdEZhY2UpIHsKKwkJU3ViamVjdEZhY2UgdmFyU3ViamVjdEZhY2UgPSBuZXcgU3ViamVjdEZhY2UoKSB7CisJCX07CisJCXJldHVybiB2YXJTdWJqZWN0RmFjZTsKKwl9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvY2hhbmdlQ2xhc3NTaWduYXR1cmUvUmVtb3ZlQWxsUGFyYW1zLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvY2hhbmdlQ2xhc3NTaWduYXR1cmUvUmVtb3ZlQWxsUGFyYW1zLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmE0ZTZhMAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9jaGFuZ2VDbGFzc1NpZ25hdHVyZS9SZW1vdmVBbGxQYXJhbXMuamF2YQpAQCAtMCwwICsxLDUgQEAKK2NsYXNzIDxjYXJldD5DPFgsIFksIFo+IHsKKyAgeworICAgIEMgYyA9IG5ldyBDPFN0cmluZywgU3RyaW5nLCBJbnRlZ2VyPigpOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2NoYW5nZUNsYXNzU2lnbmF0dXJlL1JlbW92ZUFsbFBhcmFtcy5qYXZhLmFmdGVyIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2NoYW5nZUNsYXNzU2lnbmF0dXJlL1JlbW92ZUFsbFBhcmFtcy5qYXZhLmFmdGVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI4ZWY1ZjUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvY2hhbmdlQ2xhc3NTaWduYXR1cmUvUmVtb3ZlQWxsUGFyYW1zLmphdmEuYWZ0ZXIKQEAgLTAsMCArMSw1IEBACitjbGFzcyBDIHsKKyAgeworICAgIEMgYyA9IG5ldyBDKCk7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvY2hhbmdlQ2xhc3NTaWduYXR1cmUvUmVvcmRlclBhcmFtcy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2NoYW5nZUNsYXNzU2lnbmF0dXJlL1Jlb3JkZXJQYXJhbXMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZWRjNWJjCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2NoYW5nZUNsYXNzU2lnbmF0dXJlL1Jlb3JkZXJQYXJhbXMuamF2YQpAQCAtMCwwICsxLDggQEAKK2NsYXNzIDxjYXJldD5DPFgsWT4geworfQorCitjbGFzcyBVc2FnZSBleHRlbmRzIEM8U3RyaW5nLEludGVnZXI+IHsKKyAgeworICAgIEM8Qm9vbGVhbixTdHJpbmc+ID0gbmV3IEMoKTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9jaGFuZ2VDbGFzc1NpZ25hdHVyZS9SZW9yZGVyUGFyYW1zLmphdmEuYWZ0ZXIgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvY2hhbmdlQ2xhc3NTaWduYXR1cmUvUmVvcmRlclBhcmFtcy5qYXZhLmFmdGVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMxMWRmYWIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvY2hhbmdlQ2xhc3NTaWduYXR1cmUvUmVvcmRlclBhcmFtcy5qYXZhLmFmdGVyCkBAIC0wLDAgKzEsOCBAQAorY2xhc3MgQzxZLCBYPiB7Cit9CisKK2NsYXNzIFVzYWdlIGV4dGVuZHMgQzxJbnRlZ2VyLCBTdHJpbmc+IHsKKyAgeworICAgIEM8U3RyaW5nLCBCb29sZWFuPiA9IG5ldyBDKCk7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvY2hhbmdlQ2xhc3NTaWduYXR1cmUvU3ViamVjdEluQ2xpZW50LmphdmEuYmxhbmsgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvY2hhbmdlQ2xhc3NTaWduYXR1cmUvU3ViamVjdEluQ2xpZW50LmphdmEuYmxhbmsKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmQ2ZGQ4OQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9jaGFuZ2VDbGFzc1NpZ25hdHVyZS9TdWJqZWN0SW5DbGllbnQuamF2YS5ibGFuawpAQCAtMCwwICsxLDIxIEBACitjbGFzcyBTdWJqZWN0IHsKK30KKworaW50ZXJmYWNlIFN1YmplY3RGYWNlIHsKK30KKworcHVibGljIGNsYXNzIENsaWVudCBleHRlbmRzIFN1YmplY3QgaW1wbGVtZW50cyBTdWJqZWN0RmFjZSB7CisJcHJpdmF0ZSBTdWJqZWN0IG15U3ViamVjdCA9IG5ldyBTdWJqZWN0KCk7CisJcHJpdmF0ZSBTdWJqZWN0RmFjZSBteVN1YmplY3RGYWNlID0gbmV3IFN1YmplY3RGYWNlKCkgeworCX07CisKKwlwdWJsaWMgU3ViamVjdCBzdWJqZWN0TWV0aG9kKFN1YmplY3Qgc3ViamVjdCkgeworCQlTdWJqZWN0IHZhclN1YmplY3QgPSBuZXcgU3ViamVjdCgpOworCQlyZXR1cm4gdmFyU3ViamVjdDsKKwl9CisJcHVibGljIFN1YmplY3RGYWNlIHN1YmplY3RGYWNlTWV0aG9kKFN1YmplY3RGYWNlIHN1YmplY3RGYWNlKSB7CisJCVN1YmplY3RGYWNlIHZhclN1YmplY3RGYWNlID0gbmV3IFN1YmplY3RGYWNlKCkgeworCQl9OworCQlyZXR1cm4gdmFyU3ViamVjdEZhY2U7CisJfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2NoYW5nZUNsYXNzU2lnbmF0dXJlL1N1YnN0aXR1dGVQYXJhbUluc2lkZUNsYXNzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvY2hhbmdlQ2xhc3NTaWduYXR1cmUvU3Vic3RpdHV0ZVBhcmFtSW5zaWRlQ2xhc3MuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iODQ5YmI3Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2NoYW5nZUNsYXNzU2lnbmF0dXJlL1N1YnN0aXR1dGVQYXJhbUluc2lkZUNsYXNzLmphdmEKQEAgLTAsMCArMSw2IEBACitwdWJsaWMgY2xhc3MgRjxjYXJldD5vbzxUIGV4dGVuZHMgUnVubmFibGU+IHsKKworICAgIFQgZ2V0Rm9vKCkgeworICAgICAgICByZXR1cm4gbnVsbDsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvY2hhbmdlQ2xhc3NTaWduYXR1cmUvU3Vic3RpdHV0ZVBhcmFtSW5zaWRlQ2xhc3MuamF2YS5hZnRlciBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9jaGFuZ2VDbGFzc1NpZ25hdHVyZS9TdWJzdGl0dXRlUGFyYW1JbnNpZGVDbGFzcy5qYXZhLmFmdGVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk0ZTMyZGExCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2NoYW5nZUNsYXNzU2lnbmF0dXJlL1N1YnN0aXR1dGVQYXJhbUluc2lkZUNsYXNzLmphdmEuYWZ0ZXIKQEAgLTAsMCArMSw2IEBACitwdWJsaWMgY2xhc3MgRm9vIHsKKworICAgIFJ1bm5hYmxlIGdldEZvbygpIHsKKyAgICAgICAgcmV0dXJuIG51bGw7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2NoYW5nZUNsYXNzU2lnbmF0dXJlL1R3b1N1YmplY3RGYWNlU2V0T2JqZWN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvY2hhbmdlQ2xhc3NTaWduYXR1cmUvVHdvU3ViamVjdEZhY2VTZXRPYmplY3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lODQyYWUzCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2NoYW5nZUNsYXNzU2lnbmF0dXJlL1R3b1N1YmplY3RGYWNlU2V0T2JqZWN0LmphdmEKQEAgLTAsMCArMSwyMyBAQAoraW1wb3J0IGphdmEudXRpbC5TZXQ7CisKK2NsYXNzIDxjYXJldD5TdWJqZWN0PFUsIFY+IHsKK30KKworaW50ZXJmYWNlIFN1YmplY3RGYWNlIHsKK30KKworcHVibGljIGNsYXNzIENsaWVudCBleHRlbmRzIFN1YmplY3Q8U3ViamVjdEZhY2UsIFNldDxPYmplY3Q+PiBpbXBsZW1lbnRzIFN1YmplY3RGYWNlIHsKKwlwcml2YXRlIFN1YmplY3Q8U3ViamVjdEZhY2UsIFNldDxPYmplY3Q+PiBteVN1YmplY3QgPSBuZXcgU3ViamVjdDxTdWJqZWN0RmFjZSwgU2V0PE9iamVjdD4+KCk7CisJcHJpdmF0ZSBTdWJqZWN0RmFjZSBteVN1YmplY3RGYWNlID0gbmV3IFN1YmplY3RGYWNlKCkgeworCX07CisKKwlwdWJsaWMgU3ViamVjdDxTdWJqZWN0RmFjZSwgU2V0PE9iamVjdD4+IHN1YmplY3RNZXRob2QoU3ViamVjdDxTdWJqZWN0RmFjZSwgU2V0PE9iamVjdD4+IHN1YmplY3QpIHsKKwkJU3ViamVjdDxTdWJqZWN0RmFjZSwgU2V0PE9iamVjdD4+IHZhclN1YmplY3QgPSBuZXcgU3ViamVjdDxTdWJqZWN0RmFjZSwgU2V0PE9iamVjdD4+KCk7CisJCXJldHVybiB2YXJTdWJqZWN0OworCX0KKwlwdWJsaWMgU3ViamVjdEZhY2Ugc3ViamVjdEZhY2VNZXRob2QoU3ViamVjdEZhY2Ugc3ViamVjdEZhY2UpIHsKKwkJU3ViamVjdEZhY2UgdmFyU3ViamVjdEZhY2UgPSBuZXcgU3ViamVjdEZhY2UoKSB7CisJCX07CisJCXJldHVybiB2YXJTdWJqZWN0RmFjZTsKKwl9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvY2hhbmdlQ2xhc3NTaWduYXR1cmUvWmVyby5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2NoYW5nZUNsYXNzU2lnbmF0dXJlL1plcm8uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZDFiMGVmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2NoYW5nZUNsYXNzU2lnbmF0dXJlL1plcm8uamF2YQpAQCAtMCwwICsxLDIxIEBACitjbGFzcyA8Y2FyZXQ+U3ViamVjdCB7Cit9CisKK2ludGVyZmFjZSBTdWJqZWN0RmFjZSB7Cit9CisKK3B1YmxpYyBjbGFzcyBDbGllbnQgZXh0ZW5kcyBTdWJqZWN0IGltcGxlbWVudHMgU3ViamVjdEZhY2UgeworCXByaXZhdGUgU3ViamVjdCBteVN1YmplY3QgPSBuZXcgU3ViamVjdCgpOworCXByaXZhdGUgU3ViamVjdEZhY2UgbXlTdWJqZWN0RmFjZSA9IG5ldyBTdWJqZWN0RmFjZSgpIHsKKwl9OworCisJcHVibGljIFN1YmplY3Qgc3ViamVjdE1ldGhvZChTdWJqZWN0IHN1YmplY3QpIHsKKwkJU3ViamVjdCB2YXJTdWJqZWN0ID0gbmV3IFN1YmplY3QoKTsKKwkJcmV0dXJuIHZhclN1YmplY3Q7CisJfQorCXB1YmxpYyBTdWJqZWN0RmFjZSBzdWJqZWN0RmFjZU1ldGhvZChTdWJqZWN0RmFjZSBzdWJqZWN0RmFjZSkgeworCQlTdWJqZWN0RmFjZSB2YXJTdWJqZWN0RmFjZSA9IG5ldyBTdWJqZWN0RmFjZSgpIHsKKwkJfTsKKwkJcmV0dXJuIHZhclN1YmplY3RGYWNlOworCX0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9jaGFuZ2VTaWduYXR1cmUvQWRkRXhjZXB0aW9uLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvY2hhbmdlU2lnbmF0dXJlL0FkZEV4Y2VwdGlvbi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNmNTk1NDIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvY2hhbmdlU2lnbmF0dXJlL0FkZEV4Y2VwdGlvbi5qYXZhCkBAIC0wLDAgKzEsOCBAQAorY2xhc3MgVGVzdCB7CisgICAgdm9pZCBmb288Y2FyZXQ+ICgpIHsKKyAgICB9CisKKyAgICB2b2lkIGJhciAoKSB7CisgICAgICAgIGZvbygpOworICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9jaGFuZ2VTaWduYXR1cmUvQWRkRXhjZXB0aW9uX2FmdGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvY2hhbmdlU2lnbmF0dXJlL0FkZEV4Y2VwdGlvbl9hZnRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE3ZWE4NTQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvY2hhbmdlU2lnbmF0dXJlL0FkZEV4Y2VwdGlvbl9hZnRlci5qYXZhCkBAIC0wLDAgKzEsMTIgQEAKK2NsYXNzIFRlc3QgeworICAgIHZvaWQgZm9vICgpIHRocm93cyBFeGNlcHRpb24geworICAgIH0KKworICAgIHZvaWQgYmFyICgpIHsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIGZvbygpOworICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsgIC8vVG8gY2hhbmdlIGJvZHkgb2YgY2F0Y2ggc3RhdGVtZW50IHVzZSBGaWxlIHwgU2V0dGluZ3MgfCBGaWxlIFRlbXBsYXRlcy4KKyAgICAgICAgfQorICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9jaGFuZ2VTaWduYXR1cmUvQWRkUnVudGltZUV4Y2VwdGlvbi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2NoYW5nZVNpZ25hdHVyZS9BZGRSdW50aW1lRXhjZXB0aW9uLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2Y1OTU0MgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9jaGFuZ2VTaWduYXR1cmUvQWRkUnVudGltZUV4Y2VwdGlvbi5qYXZhCkBAIC0wLDAgKzEsOCBAQAorY2xhc3MgVGVzdCB7CisgICAgdm9pZCBmb288Y2FyZXQ+ICgpIHsKKyAgICB9CisKKyAgICB2b2lkIGJhciAoKSB7CisgICAgICAgIGZvbygpOworICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9jaGFuZ2VTaWduYXR1cmUvQWRkUnVudGltZUV4Y2VwdGlvbl9hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2NoYW5nZVNpZ25hdHVyZS9BZGRSdW50aW1lRXhjZXB0aW9uX2FmdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2VjODQ2MAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9jaGFuZ2VTaWduYXR1cmUvQWRkUnVudGltZUV4Y2VwdGlvbl9hZnRlci5qYXZhCkBAIC0wLDAgKzEsOCBAQAorY2xhc3MgVGVzdCB7CisgICAgdm9pZCBmb28gKCkgdGhyb3dzIFJ1bnRpbWVFeGNlcHRpb24geworICAgIH0KKworICAgIHZvaWQgYmFyICgpIHsKKyAgICAgICAgZm9vKCk7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2NoYW5nZVNpZ25hdHVyZS9BbHJlYWR5SGFuZGxlZC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2NoYW5nZVNpZ25hdHVyZS9BbHJlYWR5SGFuZGxlZC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQzZWNkZGEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvY2hhbmdlU2lnbmF0dXJlL0FscmVhZHlIYW5kbGVkLmphdmEKQEAgLTAsMCArMSw4IEBACitjbGFzcyBUZXN0IHsKKyAgICB2b2lkIGZvbzxjYXJldD4gKCkgeworICAgIH0KKworICAgIHZvaWQgYmFyICgpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICBmb28oKTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvY2hhbmdlU2lnbmF0dXJlL0FscmVhZHlIYW5kbGVkX2FmdGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvY2hhbmdlU2lnbmF0dXJlL0FscmVhZHlIYW5kbGVkX2FmdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTJmMWE3NQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9jaGFuZ2VTaWduYXR1cmUvQWxyZWFkeUhhbmRsZWRfYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDggQEAKK2NsYXNzIFRlc3QgeworICAgIHZvaWQgZm9vICgpIHRocm93cyBFeGNlcHRpb24geworICAgIH0KKworICAgIHZvaWQgYmFyICgpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICBmb28oKTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvY2hhbmdlU2lnbmF0dXJlL0NvbnN0cnVjdG9yRXhjZXB0aW9uLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvY2hhbmdlU2lnbmF0dXJlL0NvbnN0cnVjdG9yRXhjZXB0aW9uLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjkwZmIzOAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9jaGFuZ2VTaWduYXR1cmUvQ29uc3RydWN0b3JFeGNlcHRpb24uamF2YQpAQCAtMCwwICsxLDEwIEBACitjbGFzcyBCYXNlIHsKKyAgcHVibGljIEI8Y2FyZXQ+YXNlKCkgeworICB9Cit9CisKK2NsYXNzIEFBQSBleHRlbmRzIEJhc2UgeworICBwdWJsaWMgQUFBKCkgeworICAgIHN1cGVyKCk7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvY2hhbmdlU2lnbmF0dXJlL0NvbnN0cnVjdG9yRXhjZXB0aW9uX2FmdGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvY2hhbmdlU2lnbmF0dXJlL0NvbnN0cnVjdG9yRXhjZXB0aW9uX2FmdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTIyNDAzYwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9jaGFuZ2VTaWduYXR1cmUvQ29uc3RydWN0b3JFeGNlcHRpb25fYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDEyIEBACitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKKworY2xhc3MgQmFzZSB7CisgIHB1YmxpYyBCYXNlKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKKyAgfQorfQorCitjbGFzcyBBQUEgZXh0ZW5kcyBCYXNlIHsKKyAgcHVibGljIEFBQSgpIHsKKyAgICBzdXBlcigpOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2NoYW5nZVNpZ25hdHVyZS9Db3ZhcmlhbnRSZXR1cm5UeXBlLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvY2hhbmdlU2lnbmF0dXJlL0NvdmFyaWFudFJldHVyblR5cGUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NDk4NzU1Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2NoYW5nZVNpZ25hdHVyZS9Db3ZhcmlhbnRSZXR1cm5UeXBlLmphdmEKQEAgLTAsMCArMSwxOSBAQAoraW1wb3J0IGphdmEudXRpbC4qOworCitjbGFzcyBBIHsKKyAgICBMaXN0IDxjYXJldD5tZXRob2QoKSB7IH0KK30KKworY2xhc3MgUSBpbXBsZW1lbnRzIExpc3QsIFJ1bm5hYmxlICB7Cit9CisKK2NsYXNzIFogaW1wbGVtZW50cyBMaXN0IHsKK30KKworY2xhc3MgQiBleHRlbmRzIEEgeworICAgIFEgbWV0aG9kKCkgeyB9Cit9CisKK2NsYXNzIEMgZXh0ZW5kcyBBIHsKKyAgICBaIG1ldGhvZCgpIHsgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9jaGFuZ2VTaWduYXR1cmUvQ292YXJpYW50UmV0dXJuVHlwZV9hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2NoYW5nZVNpZ25hdHVyZS9Db3ZhcmlhbnRSZXR1cm5UeXBlX2FmdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjg5ZmM5OQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9jaGFuZ2VTaWduYXR1cmUvQ292YXJpYW50UmV0dXJuVHlwZV9hZnRlci5qYXZhCkBAIC0wLDAgKzEsMTkgQEAKK2ltcG9ydCBqYXZhLnV0aWwuKjsKKworY2xhc3MgQSB7CisgICAgUnVubmFibGUgbWV0aG9kKCkgeyB9Cit9CisKK2NsYXNzIFEgaW1wbGVtZW50cyBMaXN0LCBSdW5uYWJsZSAgeworfQorCitjbGFzcyBaIGltcGxlbWVudHMgTGlzdCB7Cit9CisKK2NsYXNzIEIgZXh0ZW5kcyBBIHsKKyAgICBRIG1ldGhvZCgpIHsgfQorfQorCitjbGFzcyBDIGV4dGVuZHMgQSB7CisgICAgUnVubmFibGUgbWV0aG9kKCkgeyB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2NoYW5nZVNpZ25hdHVyZS9EZWZhdWx0Q29uc3RydWN0b3IuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9jaGFuZ2VTaWduYXR1cmUvRGVmYXVsdENvbnN0cnVjdG9yLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTMzMDZiZAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9jaGFuZ2VTaWduYXR1cmUvRGVmYXVsdENvbnN0cnVjdG9yLmphdmEKQEAgLTAsMCArMSwxMSBAQAorY2xhc3MgQyB7CisgICAgQzxjYXJldD4oKSB7CisgICAgfQorfQorCitjbGFzcyBDMSBleHRlbmRzIEMgeworICAgIGludCBpOworICAgIEMxKGludCBpLCBpbnQgaykgeworICAgICAgICB0aGlzLmkgPSBpOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvY2hhbmdlU2lnbmF0dXJlL0RlZmF1bHRDb25zdHJ1Y3Rvcl9hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2NoYW5nZVNpZ25hdHVyZS9EZWZhdWx0Q29uc3RydWN0b3JfYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YWNjODZjCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2NoYW5nZVNpZ25hdHVyZS9EZWZhdWx0Q29uc3RydWN0b3JfYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDEyIEBACitjbGFzcyBDIHsKKyAgICBDKGludCBqKSB7CisgICAgfQorfQorCitjbGFzcyBDMSBleHRlbmRzIEMgeworICAgIGludCBpOworICAgIEMxKGludCBpLCBpbnQgaykgeworICAgICAgICBzdXBlcigyNyk7CisgICAgICAgIHRoaXMuaSA9IGk7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9jaGFuZ2VTaWduYXR1cmUvRW51bUNvbnN0cnVjdG9yLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvY2hhbmdlU2lnbmF0dXJlL0VudW1Db25zdHJ1Y3Rvci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUwNDdmMzMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvY2hhbmdlU2lnbmF0dXJlL0VudW1Db25zdHJ1Y3Rvci5qYXZhCkBAIC0wLDAgKzEsNyBAQAorZW51bSBFbiB7CisgICAgQSB7fSwKKyAgICBCIHt9LAorICAgIEM7CisKKyAgICA8Y2FyZXQ+RW4oKSB7IH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvY2hhbmdlU2lnbmF0dXJlL0VudW1Db25zdHJ1Y3Rvcl9hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2NoYW5nZVNpZ25hdHVyZS9FbnVtQ29uc3RydWN0b3JfYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NmVjMGNhCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2NoYW5nZVNpZ25hdHVyZS9FbnVtQ29uc3RydWN0b3JfYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDcgQEAKK2VudW0gRW4geworICAgIEEoMTApIHt9LAorICAgIEIoMTApIHt9LAorICAgIEMoMTApOworCisgICAgRW4oaW50IGkpIHsgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9jaGFuZ2VTaWduYXR1cmUvR2VuZXJhdGVEZWxlZ2F0ZS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2NoYW5nZVNpZ25hdHVyZS9HZW5lcmF0ZURlbGVnYXRlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDhiM2U0YgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9jaGFuZ2VTaWduYXR1cmUvR2VuZXJhdGVEZWxlZ2F0ZS5qYXZhCkBAIC0wLDAgKzEsMTYgQEAKK2NsYXNzIEMgeworICAgIHZvaWQgPGNhcmV0Pm1ldGhvZCgpIHsKKyAgICB9Cit9CisKK2NsYXNzIEMxIGV4dGVuZHMgQyB7CisgICAgdm9pZCBtZXRob2QoKSB7CisgICAgfQorfQorCitjbGFzcyBVc2FnZSB7CisgICAgeworICAgICAgICBuZXcgQygpLm1ldGhvZCgpOworICAgICAgICBuZXcgQzEoKS5tZXRob2QoKTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2NoYW5nZVNpZ25hdHVyZS9HZW5lcmF0ZURlbGVnYXRlQ29uc3RydWN0b3IuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9jaGFuZ2VTaWduYXR1cmUvR2VuZXJhdGVEZWxlZ2F0ZUNvbnN0cnVjdG9yLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDhjZmFhMAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9jaGFuZ2VTaWduYXR1cmUvR2VuZXJhdGVEZWxlZ2F0ZUNvbnN0cnVjdG9yLmphdmEKQEAgLTAsMCArMSwxMCBAQAorcHVibGljIGNsYXNzIEMgeworICAgIHB1YmxpYyA8Y2FyZXQ+QyhpbnQgaSkgeworICAgIH0KK30KKworY2xhc3MgVXNhZ2UgeworICAgIHsKKyAgICAgICAgQyBjID0gbmV3IEMoMTApOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvY2hhbmdlU2lnbmF0dXJlL0dlbmVyYXRlRGVsZWdhdGVDb25zdHJ1Y3Rvcl9hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2NoYW5nZVNpZ25hdHVyZS9HZW5lcmF0ZURlbGVnYXRlQ29uc3RydWN0b3JfYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMjk5NzA5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2NoYW5nZVNpZ25hdHVyZS9HZW5lcmF0ZURlbGVnYXRlQ29uc3RydWN0b3JfYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDE0IEBACitwdWJsaWMgY2xhc3MgQyB7CisgICAgcHVibGljIEMoaW50IGkpIHsKKyAgICAgICAgdGhpcygpOworICAgIH0KKworICAgIHB1YmxpYyBDKCkgeworICAgIH0KK30KKworY2xhc3MgVXNhZ2UgeworICAgIHsKKyAgICAgICAgQyBjID0gbmV3IEMoMTApOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvY2hhbmdlU2lnbmF0dXJlL0dlbmVyYXRlRGVsZWdhdGVEZWZhdWx0Q29uc3RydWN0b3IuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9jaGFuZ2VTaWduYXR1cmUvR2VuZXJhdGVEZWxlZ2F0ZURlZmF1bHRDb25zdHJ1Y3Rvci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjMTYwZWYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvY2hhbmdlU2lnbmF0dXJlL0dlbmVyYXRlRGVsZWdhdGVEZWZhdWx0Q29uc3RydWN0b3IuamF2YQpAQCAtMCwwICsxLDE1IEBACitwdWJsaWMgY2xhc3MgQyB7CisgICAgcHVibGljIDxjYXJldD5DKCkgeworICAgIH0KK30KKworcHVibGljIGNsYXNzIEMxIGV4dGVuZHMgQyB7CisgICAgcHVibGljIEMxKFN0cmluZyBzKSB7CisgICAgfQorfQorCitjbGFzcyBVc2FnZSB7CisgICAgeworICAgICAgICBDIGMgPSBuZXcgQygpOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvY2hhbmdlU2lnbmF0dXJlL0dlbmVyYXRlRGVsZWdhdGVEZWZhdWx0Q29uc3RydWN0b3JfYWZ0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9jaGFuZ2VTaWduYXR1cmUvR2VuZXJhdGVEZWxlZ2F0ZURlZmF1bHRDb25zdHJ1Y3Rvcl9hZnRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjczNTJiODEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvY2hhbmdlU2lnbmF0dXJlL0dlbmVyYXRlRGVsZWdhdGVEZWZhdWx0Q29uc3RydWN0b3JfYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDE5IEBACitwdWJsaWMgY2xhc3MgQyB7CisgICAgcHVibGljIEMoKSB7CisgICAgICAgIHRoaXMoMjcpOworICAgIH0KKworICAgIHB1YmxpYyBDKGludCBpKSB7CisgICAgfQorfQorCitwdWJsaWMgY2xhc3MgQzEgZXh0ZW5kcyBDIHsKKyAgICBwdWJsaWMgQzEoU3RyaW5nIHMpIHsKKyAgICB9Cit9CisKK2NsYXNzIFVzYWdlIHsKKyAgICB7CisgICAgICAgIEMgYyA9IG5ldyBDKCk7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9jaGFuZ2VTaWduYXR1cmUvR2VuZXJhdGVEZWxlZ2F0ZUZvckFic3RyYWN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvY2hhbmdlU2lnbmF0dXJlL0dlbmVyYXRlRGVsZWdhdGVGb3JBYnN0cmFjdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA2YjQ4ZjUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvY2hhbmdlU2lnbmF0dXJlL0dlbmVyYXRlRGVsZWdhdGVGb3JBYnN0cmFjdC5qYXZhCkBAIC0wLDAgKzEsOCBAQAorYWJzdHJhY3QgY2xhc3MgQyB7CisgICAgYWJzdHJhY3Qgdm9pZCA8Y2FyZXQ+bWV0aG9kKCk7Cit9CisKK2NsYXNzIEMxIGV4dGVuZHMgQyB7CisgICAgdm9pZCBtZXRob2QoKSB7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9jaGFuZ2VTaWduYXR1cmUvR2VuZXJhdGVEZWxlZ2F0ZUZvckFic3RyYWN0X2FmdGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvY2hhbmdlU2lnbmF0dXJlL0dlbmVyYXRlRGVsZWdhdGVGb3JBYnN0cmFjdF9hZnRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcyM2U3NTYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvY2hhbmdlU2lnbmF0dXJlL0dlbmVyYXRlRGVsZWdhdGVGb3JBYnN0cmFjdF9hZnRlci5qYXZhCkBAIC0wLDAgKzEsMTIgQEAKK2Fic3RyYWN0IGNsYXNzIEMgeworICAgIHZvaWQgbWV0aG9kKCkgeworICAgICAgICBtZXRob2QoMjcpOworICAgIH0KKworICAgIGFic3RyYWN0IHZvaWQgPGNhcmV0Pm1ldGhvZChpbnQgaSk7Cit9CisKK2NsYXNzIEMxIGV4dGVuZHMgQyB7CisgICAgdm9pZCBtZXRob2QoaW50IGkpIHsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2NoYW5nZVNpZ25hdHVyZS9HZW5lcmF0ZURlbGVnYXRlV2l0aFBhcmFtZXRlcnNSZW9yZGVyaW5nLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvY2hhbmdlU2lnbmF0dXJlL0dlbmVyYXRlRGVsZWdhdGVXaXRoUGFyYW1ldGVyc1Jlb3JkZXJpbmcuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZGFhMzFkCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2NoYW5nZVNpZ25hdHVyZS9HZW5lcmF0ZURlbGVnYXRlV2l0aFBhcmFtZXRlcnNSZW9yZGVyaW5nLmphdmEKQEAgLTAsMCArMSwxOCBAQAorY2xhc3MgQyB7CisgICAgdm9pZCA8Y2FyZXQ+bWV0aG9kKGludCBpLCBTdHJpbmcgcykgeworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImkgPSAiICsgaSArICIgcyA9ICIgKyBzKTsKKyAgICB9Cit9CisKK2NsYXNzIEMxIGV4dGVuZHMgQyB7CisgICAgdm9pZCBtZXRob2QoaW50IGksIFN0cmluZyBzKSB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiaSA9ICIgKyBpICsgIiBzID0gIiArIHMpOworICAgIH0KK30KKworY2xhc3MgVXNhZ2UgeworICAgIHsKKyAgICAgICAgbmV3IEMoKS5tZXRob2QoMSwgbnVsbCk7CisgICAgICAgIG5ldyBDMSgpLm1ldGhvZCgxLCBudWxsKTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2NoYW5nZVNpZ25hdHVyZS9HZW5lcmF0ZURlbGVnYXRlV2l0aFBhcmFtZXRlcnNSZW9yZGVyaW5nX2FmdGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvY2hhbmdlU2lnbmF0dXJlL0dlbmVyYXRlRGVsZWdhdGVXaXRoUGFyYW1ldGVyc1Jlb3JkZXJpbmdfYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YWI5ZGMyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2NoYW5nZVNpZ25hdHVyZS9HZW5lcmF0ZURlbGVnYXRlV2l0aFBhcmFtZXRlcnNSZW9yZGVyaW5nX2FmdGVyLmphdmEKQEAgLTAsMCArMSwyMiBAQAorY2xhc3MgQyB7CisgICAgdm9pZCBtZXRob2QoaW50IGksIFN0cmluZyBzKSB7CisgICAgICAgIG1ldGhvZChzLCAnYScsIGkpOworICAgIH0KKworICAgIHZvaWQgbWV0aG9kKFN0cmluZyBzLCBjaGFyIGMsIGludCBqKSB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiaSA9ICIgKyBqICsgIiBzID0gIiArIHMpOworICAgIH0KK30KKworY2xhc3MgQzEgZXh0ZW5kcyBDIHsKKyAgICB2b2lkIG1ldGhvZChTdHJpbmcgcywgY2hhciBjLCBpbnQgaikgeworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImkgPSAiICsgaiArICIgcyA9ICIgKyBzKTsKKyAgICB9Cit9CisKK2NsYXNzIFVzYWdlIHsKKyAgICB7CisgICAgICAgIG5ldyBDKCkubWV0aG9kKDEsIG51bGwpOworICAgICAgICBuZXcgQzEoKS5tZXRob2QoMSwgbnVsbCk7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9jaGFuZ2VTaWduYXR1cmUvR2VuZXJhdGVEZWxlZ2F0ZVdpdGhSZXR1cm4uamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9jaGFuZ2VTaWduYXR1cmUvR2VuZXJhdGVEZWxlZ2F0ZVdpdGhSZXR1cm4uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lY2Y5NGFkCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2NoYW5nZVNpZ25hdHVyZS9HZW5lcmF0ZURlbGVnYXRlV2l0aFJldHVybi5qYXZhCkBAIC0wLDAgKzEsOSBAQAorY2xhc3MgQyB7CisgICAgU3RyaW5nIDxjYXJldD5tZXRob2QoKSB7CisgICAgfQorfQorCitjbGFzcyBDMSBleHRlbmRzIEMgeworICAgIFN0cmluZyBtZXRob2QoKSB7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9jaGFuZ2VTaWduYXR1cmUvR2VuZXJhdGVEZWxlZ2F0ZVdpdGhSZXR1cm5fYWZ0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9jaGFuZ2VTaWduYXR1cmUvR2VuZXJhdGVEZWxlZ2F0ZVdpdGhSZXR1cm5fYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NmVkOWM3Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2NoYW5nZVNpZ25hdHVyZS9HZW5lcmF0ZURlbGVnYXRlV2l0aFJldHVybl9hZnRlci5qYXZhCkBAIC0wLDAgKzEsMTMgQEAKK2NsYXNzIEMgeworICAgIFN0cmluZyBtZXRob2QoKSB7CisgICAgICAgIHJldHVybiBtZXRob2QoMjcpOworICAgIH0KKworICAgIFN0cmluZyA8Y2FyZXQ+bWV0aG9kKGludCBpKSB7CisgICAgfQorfQorCitjbGFzcyBDMSBleHRlbmRzIEMgeworICAgIFN0cmluZyBtZXRob2QoaW50IGkpIHsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2NoYW5nZVNpZ25hdHVyZS9HZW5lcmF0ZURlbGVnYXRlX2FmdGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvY2hhbmdlU2lnbmF0dXJlL0dlbmVyYXRlRGVsZWdhdGVfYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOGZiYTY4Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2NoYW5nZVNpZ25hdHVyZS9HZW5lcmF0ZURlbGVnYXRlX2FmdGVyLmphdmEKQEAgLTAsMCArMSwyMCBAQAorY2xhc3MgQyB7CisgICAgdm9pZCBtZXRob2QoKSB7CisgICAgICAgIG1ldGhvZCgyNyk7CisgICAgfQorCisgICAgdm9pZCBtZXRob2QoaW50IGkpIHsKKyAgICB9Cit9CisKK2NsYXNzIEMxIGV4dGVuZHMgQyB7CisgICAgdm9pZCBtZXRob2QoaW50IGkpIHsKKyAgICB9Cit9CisKK2NsYXNzIFVzYWdlIHsKKyAgICB7CisgICAgICAgIG5ldyBDKCkubWV0aG9kKCk7CisgICAgICAgIG5ldyBDMSgpLm1ldGhvZCgpOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvY2hhbmdlU2lnbmF0dXJlL0dlbmVyaWNUeXBlcy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2NoYW5nZVNpZ25hdHVyZS9HZW5lcmljVHlwZXMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43Nzk3Y2I3Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2NoYW5nZVNpZ25hdHVyZS9HZW5lcmljVHlwZXMuamF2YQpAQCAtMCwwICsxLDcgQEAKK2NsYXNzIEM8VD4geworICAgIHZvaWQgbWV0aG9kPGNhcmV0PigpOworfQorCitjbGFzcyBDMSBleHRlbmRzIEM8U3RyaW5nPiB7CisgICAgdm9pZCBtZXRob2QoKTsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvY2hhbmdlU2lnbmF0dXJlL0dlbmVyaWNUeXBlc0luT2xkUGFyYW1ldGVycy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2NoYW5nZVNpZ25hdHVyZS9HZW5lcmljVHlwZXNJbk9sZFBhcmFtZXRlcnMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YmRkZjEyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2NoYW5nZVNpZ25hdHVyZS9HZW5lcmljVHlwZXNJbk9sZFBhcmFtZXRlcnMuamF2YQpAQCAtMCwwICsxLDExIEBACitjbGFzcyBDPFQ+IHsKKyAgICB2b2lkIHB1dDxjYXJldD4oT2JqZWN0IG8pIHsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKG8pOworICAgIH0KK30KKworY2xhc3MgQ1N0cmluZyBleHRlbmRzIEM8U3RyaW5nPiB7CisgICAgdm9pZCBwdXQoT2JqZWN0IG8pIHsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKG8rIlRleHQiKTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2NoYW5nZVNpZ25hdHVyZS9HZW5lcmljVHlwZXNJbk9sZFBhcmFtZXRlcnNfYWZ0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9jaGFuZ2VTaWduYXR1cmUvR2VuZXJpY1R5cGVzSW5PbGRQYXJhbWV0ZXJzX2FmdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTkyOTA4YQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9jaGFuZ2VTaWduYXR1cmUvR2VuZXJpY1R5cGVzSW5PbGRQYXJhbWV0ZXJzX2FmdGVyLmphdmEKQEAgLTAsMCArMSwxMSBAQAorY2xhc3MgQzxUPiB7CisgICAgdm9pZCBwdXQoVCB0KSB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbih0KTsKKyAgICB9Cit9CisKK2NsYXNzIENTdHJpbmcgZXh0ZW5kcyBDPFN0cmluZz4geworICAgIHZvaWQgcHV0KFN0cmluZyB0KSB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbih0ICsiVGV4dCIpOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvY2hhbmdlU2lnbmF0dXJlL0dlbmVyaWNUeXBlc19hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2NoYW5nZVNpZ25hdHVyZS9HZW5lcmljVHlwZXNfYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YTYxZTM2Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2NoYW5nZVNpZ25hdHVyZS9HZW5lcmljVHlwZXNfYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDcgQEAKK2NsYXNzIEM8VD4geworICAgIFQgbWV0aG9kKFQgeCwgQzxUPiB5KTsKK30KKworY2xhc3MgQzEgZXh0ZW5kcyBDPFN0cmluZz4geworICAgIFN0cmluZyBtZXRob2QoU3RyaW5nIHgsIEM8U3RyaW5nPiB5KTsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvY2hhbmdlU2lnbmF0dXJlL0ludHJvZHVjZVBhcmFtZXRlcldpdGhEZWZhdWx0VmFsdWVJbkhpZXJhcmNoeS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2NoYW5nZVNpZ25hdHVyZS9JbnRyb2R1Y2VQYXJhbWV0ZXJXaXRoRGVmYXVsdFZhbHVlSW5IaWVyYXJjaHkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMzMyY2U3Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2NoYW5nZVNpZ25hdHVyZS9JbnRyb2R1Y2VQYXJhbWV0ZXJXaXRoRGVmYXVsdFZhbHVlSW5IaWVyYXJjaHkuamF2YQpAQCAtMCwwICsxLDkgQEAKK2NsYXNzIEZvbyB7CisgICB2b2lkIGY8Y2FyZXQ+b28oKXt9CisKKyAgIGNsYXNzIEEgZXh0ZW5kcyBGb28geworICAgICB2b2lkIGZvbygpeworICAgICAgIHN1cGVyLmZvbygpOworICAgICB9CisgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2NoYW5nZVNpZ25hdHVyZS9JbnRyb2R1Y2VQYXJhbWV0ZXJXaXRoRGVmYXVsdFZhbHVlSW5IaWVyYXJjaHlfYWZ0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9jaGFuZ2VTaWduYXR1cmUvSW50cm9kdWNlUGFyYW1ldGVyV2l0aERlZmF1bHRWYWx1ZUluSGllcmFyY2h5X2FmdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDhjZjQ2ZgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9jaGFuZ2VTaWduYXR1cmUvSW50cm9kdWNlUGFyYW1ldGVyV2l0aERlZmF1bHRWYWx1ZUluSGllcmFyY2h5X2FmdGVyLmphdmEKQEAgLTAsMCArMSw5IEBACitjbGFzcyBGb28geworICAgdm9pZCBmb28oaW50IGkpe30KKworICAgY2xhc3MgQSBleHRlbmRzIEZvbyB7CisgICAgIHZvaWQgZm9vKGludCBpKXsKKyAgICAgICBzdXBlci5mb28oaSk7CisgICAgIH0KKyAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvY2hhbmdlU2lnbmF0dXJlL01ldGhvZFBhcmFtZXRlcnNBbGlnbm1lbnRBZnRlck1ldGhvZE5hbWVDaGFuZ2UuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9jaGFuZ2VTaWduYXR1cmUvTWV0aG9kUGFyYW1ldGVyc0FsaWdubWVudEFmdGVyTWV0aG9kTmFtZUNoYW5nZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRlMWI0ZjIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvY2hhbmdlU2lnbmF0dXJlL01ldGhvZFBhcmFtZXRlcnNBbGlnbm1lbnRBZnRlck1ldGhvZE5hbWVDaGFuZ2UuamF2YQpAQCAtMCwwICsxLDEwIEBACitwdWJsaWMgY2xhc3MgVGVzdCB7CisgIHB1YmxpYyB2b2lkIDxjYXJldD50ZXN0MTIzKGludCBpLAorICAgICAgICAgICAgICAgICAgICAgIGludCBqKSB7CisgIH0KKworICBwdWJsaWMgdm9pZCBmb28oKSB7CisgICAgdGVzdDEyMygxLAorICAgICAgICAgICAgMik7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvY2hhbmdlU2lnbmF0dXJlL01ldGhvZFBhcmFtZXRlcnNBbGlnbm1lbnRBZnRlck1ldGhvZE5hbWVDaGFuZ2VfYWZ0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9jaGFuZ2VTaWduYXR1cmUvTWV0aG9kUGFyYW1ldGVyc0FsaWdubWVudEFmdGVyTWV0aG9kTmFtZUNoYW5nZV9hZnRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA5ZTYyNDZjCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2NoYW5nZVNpZ25hdHVyZS9NZXRob2RQYXJhbWV0ZXJzQWxpZ25tZW50QWZ0ZXJNZXRob2ROYW1lQ2hhbmdlX2FmdGVyLmphdmEKQEAgLTAsMCArMSwxMCBAQAorcHVibGljIGNsYXNzIFRlc3QgeworICBwdWJsaWMgdm9pZCB0ZXN0MTIzYXNkKGludCBpLAorICAgICAgICAgICAgICAgICAgICAgICAgIGludCBqKSB7CisgIH0KKworICBwdWJsaWMgdm9pZCBmb28oKSB7CisgICAgdGVzdDEyM2FzZCgxLAorICAgICAgICAgICAgICAgMik7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvY2hhbmdlU2lnbmF0dXJlL01ldGhvZFBhcmFtZXRlcnNBbGlnbm1lbnRBZnRlck1ldGhvZFJldHVyblR5cGVDaGFuZ2UuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9jaGFuZ2VTaWduYXR1cmUvTWV0aG9kUGFyYW1ldGVyc0FsaWdubWVudEFmdGVyTWV0aG9kUmV0dXJuVHlwZUNoYW5nZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMzNGQ4NzEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvY2hhbmdlU2lnbmF0dXJlL01ldGhvZFBhcmFtZXRlcnNBbGlnbm1lbnRBZnRlck1ldGhvZFJldHVyblR5cGVDaGFuZ2UuamF2YQpAQCAtMCwwICsxLDYgQEAKK3B1YmxpYyBjbGFzcyBUZXN0IHsKKyAgcHVibGljIFN0cmluZyA8Y2FyZXQ+dGVzdDEyMyhpbnQgaSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaikgeworICAgIHJldHVybiBudWxsOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2NoYW5nZVNpZ25hdHVyZS9NZXRob2RQYXJhbWV0ZXJzQWxpZ25tZW50QWZ0ZXJNZXRob2RSZXR1cm5UeXBlQ2hhbmdlX2FmdGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvY2hhbmdlU2lnbmF0dXJlL01ldGhvZFBhcmFtZXRlcnNBbGlnbm1lbnRBZnRlck1ldGhvZFJldHVyblR5cGVDaGFuZ2VfYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mM2NlYjk5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2NoYW5nZVNpZ25hdHVyZS9NZXRob2RQYXJhbWV0ZXJzQWxpZ25tZW50QWZ0ZXJNZXRob2RSZXR1cm5UeXBlQ2hhbmdlX2FmdGVyLmphdmEKQEAgLTAsMCArMSw2IEBACitwdWJsaWMgY2xhc3MgVGVzdCB7CisgIHB1YmxpYyBFeGNlcHRpb24gdGVzdDEyMyhpbnQgaSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBqKSB7CisgICAgcmV0dXJuIG51bGw7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvY2hhbmdlU2lnbmF0dXJlL01ldGhvZFBhcmFtZXRlcnNBbGlnbm1lbnRBZnRlck1ldGhvZFZpc2liaWxpdHlDaGFuZ2UuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9jaGFuZ2VTaWduYXR1cmUvTWV0aG9kUGFyYW1ldGVyc0FsaWdubWVudEFmdGVyTWV0aG9kVmlzaWJpbGl0eUNoYW5nZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM5MmYyYTgKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvY2hhbmdlU2lnbmF0dXJlL01ldGhvZFBhcmFtZXRlcnNBbGlnbm1lbnRBZnRlck1ldGhvZFZpc2liaWxpdHlDaGFuZ2UuamF2YQpAQCAtMCwwICsxLDUgQEAKK3B1YmxpYyBjbGFzcyBUZXN0IHsKKyAgcHVibGljIHZvaWQgPGNhcmV0PnRlc3QxMjMoaW50IGksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBqKSB7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvY2hhbmdlU2lnbmF0dXJlL01ldGhvZFBhcmFtZXRlcnNBbGlnbm1lbnRBZnRlck1ldGhvZFZpc2liaWxpdHlDaGFuZ2VfYWZ0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9jaGFuZ2VTaWduYXR1cmUvTWV0aG9kUGFyYW1ldGVyc0FsaWdubWVudEFmdGVyTWV0aG9kVmlzaWJpbGl0eUNoYW5nZV9hZnRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM3MDQwNDMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvY2hhbmdlU2lnbmF0dXJlL01ldGhvZFBhcmFtZXRlcnNBbGlnbm1lbnRBZnRlck1ldGhvZFZpc2liaWxpdHlDaGFuZ2VfYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDUgQEAKK3B1YmxpYyBjbGFzcyBUZXN0IHsKKyAgcHJvdGVjdGVkIHZvaWQgdGVzdDEyMyhpbnQgaSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaikgeworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2NoYW5nZVNpZ25hdHVyZS9QYXJhbUphdmFkb2MuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9jaGFuZ2VTaWduYXR1cmUvUGFyYW1KYXZhZG9jLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzFlNTY4OAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9jaGFuZ2VTaWduYXR1cmUvUGFyYW1KYXZhZG9jLmphdmEKQEAgLTAsMCArMSwxNCBAQAorY2xhc3MgWCB7CisKKyAgICAvKioKKyAgICAgKiBIYXMgYSBtZXRob2QgY2FsbGVkIHtAbGluayAjbXltZXRob2QoaW50LCBpbnQpfS4KKyAgICAgKi8KKyAgICBwdWJsaWMgY2xhc3MgVGVzdFJlZmFjdG9yTGluayB7CisgICAgICAvKioKKyAgICAgICAqIEByZXR1cm4gbm90aGluZworICAgICAgICogQHBhcmFtIHkgeXBhcmFtCisgICAgICAgKiBAcGFyYW0geiB6cGFyYW0KKyAgICAgICAqLworICAgICAgICBwdWJsaWMgdm9pZCA8Y2FyZXQ+bXltZXRob2QoaW50IHksIGludCB6KSB7IH0KKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvY2hhbmdlU2lnbmF0dXJlL1BhcmFtSmF2YWRvYzEuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9jaGFuZ2VTaWduYXR1cmUvUGFyYW1KYXZhZG9jMS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg5NDMyNWIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvY2hhbmdlU2lnbmF0dXJlL1BhcmFtSmF2YWRvYzEuamF2YQpAQCAtMCwwICsxLDEzIEBACitjbGFzcyBYIHsKKworICAgIC8qKgorICAgICAqIEhhcyBhIG1ldGhvZCBjYWxsZWQge0BsaW5rICNteW1ldGhvZChpbnQpfS4KKyAgICAgKi8KKyAgICBwdWJsaWMgY2xhc3MgVGVzdFJlZmFjdG9yTGluayB7CisgICAgICAvKioKKyAgICAgICAqIEByZXR1cm4gbm90aGluZworICAgICAgICogQHBhcmFtIHkgeXBhcmFtCisgICAgICAgKi8KKyAgICAgICAgcHVibGljIHZvaWQgPGNhcmV0Pm15bWV0aG9kKGludCB5KSB7IH0KKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvY2hhbmdlU2lnbmF0dXJlL1BhcmFtSmF2YWRvYzFfYWZ0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9jaGFuZ2VTaWduYXR1cmUvUGFyYW1KYXZhZG9jMV9hZnRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMxNGZmZDYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvY2hhbmdlU2lnbmF0dXJlL1BhcmFtSmF2YWRvYzFfYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDEzIEBACitjbGFzcyBYIHsKKworICAgIC8qKgorICAgICAqIEhhcyBhIG1ldGhvZCBjYWxsZWQge0BsaW5rICNteW1ldGhvZChib29sZWFuKX0uCisgICAgICovCisgICAgcHVibGljIGNsYXNzIFRlc3RSZWZhY3RvckxpbmsgeworICAgICAgLyoqCisgICAgICAgKiBAcmV0dXJuIG5vdGhpbmcKKyAgICAgICAqIEBwYXJhbSB6IHlwYXJhbQorICAgICAgICovCisgICAgICAgIHB1YmxpYyB2b2lkIG15bWV0aG9kKGJvb2xlYW4geikgeyB9CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2NoYW5nZVNpZ25hdHVyZS9QYXJhbUphdmFkb2MyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvY2hhbmdlU2lnbmF0dXJlL1BhcmFtSmF2YWRvYzIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZTQ1OWFiCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2NoYW5nZVNpZ25hdHVyZS9QYXJhbUphdmFkb2MyLmphdmEKQEAgLTAsMCArMSwxMiBAQAorY2xhc3MgWCB7CisKKyAgICAvKioKKyAgICAgKiBIYXMgYSBtZXRob2QgY2FsbGVkIHtAbGluayAjbXltZXRob2QoYm9vbGVhbil9LgorICAgICAqLworICAgIHB1YmxpYyBjbGFzcyBUZXN0UmVmYWN0b3JMaW5rIHsKKyAgICAgIC8qKgorICAgICAgICogQHBhcmFtIGEgYXBhcmFtCisgICAgICAgKi8KKyAgICAgICAgcHVibGljIHZvaWQgPGNhcmV0Pm15bWV0aG9kKGJvb2xlYW4gYSkgeyB9CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2NoYW5nZVNpZ25hdHVyZS9QYXJhbUphdmFkb2MyX2FmdGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvY2hhbmdlU2lnbmF0dXJlL1BhcmFtSmF2YWRvYzJfYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMDI4MDg4Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2NoYW5nZVNpZ25hdHVyZS9QYXJhbUphdmFkb2MyX2FmdGVyLmphdmEKQEAgLTAsMCArMSwxMyBAQAorY2xhc3MgWCB7CisKKyAgICAvKioKKyAgICAgKiBIYXMgYSBtZXRob2QgY2FsbGVkIHtAbGluayAjbXltZXRob2QoYm9vbGVhbiwgYm9vbGVhbil9LgorICAgICAqLworICAgIHB1YmxpYyBjbGFzcyBUZXN0UmVmYWN0b3JMaW5rIHsKKyAgICAgIC8qKgorICAgICAgICogQHBhcmFtIHoKKyAgICAgICAqIEBwYXJhbSBhIGFwYXJhbQorICAgICAgICovCisgICAgICAgIHB1YmxpYyB2b2lkIG15bWV0aG9kKGJvb2xlYW4geiwgYm9vbGVhbiBhKSB7IH0KKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvY2hhbmdlU2lnbmF0dXJlL1BhcmFtSmF2YWRvY19hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2NoYW5nZVNpZ25hdHVyZS9QYXJhbUphdmFkb2NfYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZTk3ZDgwCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2NoYW5nZVNpZ25hdHVyZS9QYXJhbUphdmFkb2NfYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDE0IEBACitjbGFzcyBYIHsKKworICAgIC8qKgorICAgICAqIEhhcyBhIG1ldGhvZCBjYWxsZWQge0BsaW5rICNteW1ldGhvZChpbnQsIGludCl9LgorICAgICAqLworICAgIHB1YmxpYyBjbGFzcyBUZXN0UmVmYWN0b3JMaW5rIHsKKyAgICAgIC8qKgorICAgICAgICogQHJldHVybiBub3RoaW5nCisgICAgICAgKiBAcGFyYW0geiB6cGFyYW0KKyAgICAgICAqIEBwYXJhbSB5IHlwYXJhbQorICAgICAgICovCisgICAgICAgIHB1YmxpYyB2b2lkIG15bWV0aG9kKGludCB6LCBpbnQgeSkgeyB9CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2NoYW5nZVNpZ25hdHVyZS9QYXJhbU5hbWVOb0NvbmZsaWN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvY2hhbmdlU2lnbmF0dXJlL1BhcmFtTmFtZU5vQ29uZmxpY3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOThlMzc2Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2NoYW5nZVNpZ25hdHVyZS9QYXJhbU5hbWVOb0NvbmZsaWN0LmphdmEKQEAgLTAsMCArMSwxMSBAQAorY2xhc3MgRCB7CisgICAgdm9pZCBmPGNhcmV0Pm9vKE9iamVjdCBvKXt9Cit9CisKK2NsYXNzIERJbXBsIGV4dGVuZHMgRCB7CisgICAgdm9pZCBmb28oT2JqZWN0IG8xKSB7CisgICAgICAgIHN1cGVyLmZvbyhvMSk7CisgICAgICAgIGludCBvID0gMDsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKG8pOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvY2hhbmdlU2lnbmF0dXJlL1BhcmFtTmFtZU5vQ29uZmxpY3RfYWZ0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9jaGFuZ2VTaWduYXR1cmUvUGFyYW1OYW1lTm9Db25mbGljdF9hZnRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZiMjk0NjYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvY2hhbmdlU2lnbmF0dXJlL1BhcmFtTmFtZU5vQ29uZmxpY3RfYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDExIEBACitjbGFzcyBEIHsKKyAgICB2b2lkIGZvbyhPYmplY3QgbywgYm9vbGVhbiBiKXt9Cit9CisKK2NsYXNzIERJbXBsIGV4dGVuZHMgRCB7CisgICAgdm9pZCBmb28oT2JqZWN0IG8xLCBib29sZWFuIGIpIHsKKyAgICAgICAgc3VwZXIuZm9vKG8xLCBiKTsKKyAgICAgICAgaW50IG8gPSAwOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4obyk7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9jaGFuZ2VTaWduYXR1cmUvUGFyYW1OYW1lU2FtZUFzRmllbGROYW1lLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvY2hhbmdlU2lnbmF0dXJlL1BhcmFtTmFtZVNhbWVBc0ZpZWxkTmFtZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYwNjRkMWEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvY2hhbmdlU2lnbmF0dXJlL1BhcmFtTmFtZVNhbWVBc0ZpZWxkTmFtZS5qYXZhCkBAIC0wLDAgKzEsMTMgQEAKK2NsYXNzIFRlc3QgeworICAgIGludCBmaWVsZE5hbWU7CisKKyAgICB2b2lkIGZvPGNhcmV0Pm8oaW50IG5hbWUpIHsKKyAgICAgICAgZmllbGROYW1lID0gbmFtZTsKKyAgICB9Cit9CisKK2NsYXNzIFRlc3RJbXBsIGV4dGVuZHMgVGVzdCB7CisgIHZvaWQgZm9vKGludCBuYW1lKSB7CisgICAgZmllbGROYW1lID0gbmFtZTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9jaGFuZ2VTaWduYXR1cmUvUGFyYW1OYW1lU2FtZUFzRmllbGROYW1lX2FmdGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvY2hhbmdlU2lnbmF0dXJlL1BhcmFtTmFtZVNhbWVBc0ZpZWxkTmFtZV9hZnRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRhN2ExYWMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvY2hhbmdlU2lnbmF0dXJlL1BhcmFtTmFtZVNhbWVBc0ZpZWxkTmFtZV9hZnRlci5qYXZhCkBAIC0wLDAgKzEsMTMgQEAKK2NsYXNzIFRlc3QgeworICAgIGludCBmaWVsZE5hbWU7CisKKyAgICB2b2lkIGZvbyhpbnQgZmllbGROYW1lKSB7CisgICAgICAgIHRoaXMuZmllbGROYW1lID0gZmllbGROYW1lOworICAgIH0KK30KKworY2xhc3MgVGVzdEltcGwgZXh0ZW5kcyBUZXN0IHsKKyAgdm9pZCBmb28oaW50IGZpZWxkTmFtZSkgeworICAgIHRoaXMuZmllbGROYW1lID0gZmllbGROYW1lOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2NoYW5nZVNpZ25hdHVyZS9QYXJhbWV0ZXJSZW9yZGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvY2hhbmdlU2lnbmF0dXJlL1BhcmFtZXRlclJlb3JkZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NDgxYTM1Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2NoYW5nZVNpZ25hdHVyZS9QYXJhbWV0ZXJSZW9yZGVyLmphdmEKQEAgLTAsMCArMSwxMSBAQAorY2xhc3MgQSB7CisgICAgcHVibGljIGludCBtZXRob2Q8Y2FyZXQ+KGludCBpLCBpbnQgaikgeworICAgICAgICByZXR1cm4gaSAtIGo7CisgICAgfQorfQorCitjbGFzcyBCIGV4dGVuZHMgQSB7CisgICAgcHVibGljIHZvaWQgbWV0aG9kKGludCBqLCBpbnQgaSkgeworICAgICAgICByZXR1cm4gaSAtIGo7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9jaGFuZ2VTaWduYXR1cmUvUGFyYW1ldGVyUmVvcmRlcl9hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2NoYW5nZVNpZ25hdHVyZS9QYXJhbWV0ZXJSZW9yZGVyX2FmdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGVmOWFiYQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9jaGFuZ2VTaWduYXR1cmUvUGFyYW1ldGVyUmVvcmRlcl9hZnRlci5qYXZhCkBAIC0wLDAgKzEsMTEgQEAKK2NsYXNzIEEgeworICAgIHB1YmxpYyBpbnQgbWV0aG9kPGNhcmV0PihpbnQgaiwgaW50IGkpIHsKKyAgICAgICAgcmV0dXJuIGkgLSBqOworICAgIH0KK30KKworY2xhc3MgQiBleHRlbmRzIEEgeworICAgIHB1YmxpYyB2b2lkIG1ldGhvZChpbnQgaSwgaW50IGopIHsKKyAgICAgICAgcmV0dXJuIGkgLSBqOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvY2hhbmdlU2lnbmF0dXJlL1Byb3BhZ2F0ZVBhcmFtZXRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2NoYW5nZVNpZ25hdHVyZS9Qcm9wYWdhdGVQYXJhbWV0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mM2E4NWQyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2NoYW5nZVNpZ25hdHVyZS9Qcm9wYWdhdGVQYXJhbWV0ZXIuamF2YQpAQCAtMCwwICsxLDkgQEAKK3B1YmxpYyBjbGFzcyBDIHsKKyAgICB2b2lkIHN1PGNhcmV0PmJqZWN0KFN0cmluZyBzKSB7CisgICAgfQorCisgICAgdm9pZCBjYWxsZXIoKSB7CisgICAgICAgIGludCBzOworICAgICAgICBzdWJqZWN0KG51bGwpOworICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9jaGFuZ2VTaWduYXR1cmUvUHJvcGFnYXRlUGFyYW1ldGVyX2FmdGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvY2hhbmdlU2lnbmF0dXJlL1Byb3BhZ2F0ZVBhcmFtZXRlcl9hZnRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZmMGNmMDgKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvY2hhbmdlU2lnbmF0dXJlL1Byb3BhZ2F0ZVBhcmFtZXRlcl9hZnRlci5qYXZhCkBAIC0wLDAgKzEsOSBAQAorcHVibGljIGNsYXNzIEMgeworICAgIHZvaWQgc3ViamVjdChTdHJpbmcgcywgYm9vbGVhbiBiKSB7CisgICAgfQorCisgICAgdm9pZCBjYWxsZXIoYm9vbGVhbiBiKSB7CisgICAgICAgIGludCBzOworICAgICAgICBzdWJqZWN0KG51bGwsIGIpOworICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9jaGFuZ2VTaWduYXR1cmUvUmVtb3ZlRXhjZXB0aW9ucy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2NoYW5nZVNpZ25hdHVyZS9SZW1vdmVFeGNlcHRpb25zLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmUwM2FkMgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9jaGFuZ2VTaWduYXR1cmUvUmVtb3ZlRXhjZXB0aW9ucy5qYXZhCkBAIC0wLDAgKzEsNCBAQAorY2xhc3MgVGVzdCB7CisgIHZvaWQgZm88Y2FyZXQ+bygpIHRocm93cyBSdW50aW1lRXhjZXB0aW9uIHsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9jaGFuZ2VTaWduYXR1cmUvUmVtb3ZlRXhjZXB0aW9uc19hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2NoYW5nZVNpZ25hdHVyZS9SZW1vdmVFeGNlcHRpb25zX2FmdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjkwYzE2ZAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9jaGFuZ2VTaWduYXR1cmUvUmVtb3ZlRXhjZXB0aW9uc19hZnRlci5qYXZhCkBAIC0wLDAgKzEsNCBAQAorY2xhc3MgVGVzdCB7CisgIHZvaWQgZm9vKCkgeworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2NoYW5nZVNpZ25hdHVyZS9SZW1vdmVGaXJzdFBhcmFtZXRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2NoYW5nZVNpZ25hdHVyZS9SZW1vdmVGaXJzdFBhcmFtZXRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjViNzJkNjgKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvY2hhbmdlU2lnbmF0dXJlL1JlbW92ZUZpcnN0UGFyYW1ldGVyLmphdmEKQEAgLTAsMCArMSw1IEBACitjbGFzcyBUZXN0IHsKKyAgICB2b2lkIDxjYXJldD5mb28oYm9vbGVhbiBiLAorICAgICAgICAgICAgIGludCBpKSB7IC8vIERvbid0IGV4cGVjdCBsaW5lIGJyZWFrIHRvIGJlIGluc2VydGVkIGJlZm9yZSBjbG9zaW5nIG1ldGhvZCBhcmdzIGJyYWNrZXQKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2NoYW5nZVNpZ25hdHVyZS9SZW1vdmVGaXJzdFBhcmFtZXRlcl9hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2NoYW5nZVNpZ25hdHVyZS9SZW1vdmVGaXJzdFBhcmFtZXRlcl9hZnRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE0YzEzNzEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvY2hhbmdlU2lnbmF0dXJlL1JlbW92ZUZpcnN0UGFyYW1ldGVyX2FmdGVyLmphdmEKQEAgLTAsMCArMSw0IEBACitjbGFzcyBUZXN0IHsKKyAgICB2b2lkIDxjYXJldD5mb28oaW50IGkpIHsgLy8gRG9uJ3QgZXhwZWN0IGxpbmUgYnJlYWsgdG8gYmUgaW5zZXJ0ZWQgYmVmb3JlIGNsb3NpbmcgbWV0aG9kIGFyZ3MgYnJhY2tldAorICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvY2hhbmdlU2lnbmF0dXJlL1JlbW92ZVZhcmFyZ1BhcmFtZXRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2NoYW5nZVNpZ25hdHVyZS9SZW1vdmVWYXJhcmdQYXJhbWV0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OWEzOGRmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2NoYW5nZVNpZ25hdHVyZS9SZW1vdmVWYXJhcmdQYXJhbWV0ZXIuamF2YQpAQCAtMCwwICsxLDEyIEBACitjbGFzcyBUZXN0IHsKKyAgIHZvaWQgZm88Y2FyZXQ+byhpbnQgaSwgaW50IC4uLiBqYSl7CisgICAgfQorCisgICAgdm9pZCBiYXIoKSB7CisgICAgICBmb28oMCk7CisgICAgICBmb28oMCwgMSk7CisgICAgICBmb28oMCwgMSwgMik7CisgICAgICBmb28oMCwgbmV3IGludFtdezMsIDR9KTsKKyAgICAgIGZvbygwLCBuZXcgaW50WzBdKTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2NoYW5nZVNpZ25hdHVyZS9SZW1vdmVWYXJhcmdQYXJhbWV0ZXJfYWZ0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9jaGFuZ2VTaWduYXR1cmUvUmVtb3ZlVmFyYXJnUGFyYW1ldGVyX2FmdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTQ0ZGQ0MAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9jaGFuZ2VTaWduYXR1cmUvUmVtb3ZlVmFyYXJnUGFyYW1ldGVyX2FmdGVyLmphdmEKQEAgLTAsMCArMSwxMiBAQAorY2xhc3MgVGVzdCB7CisgICB2b2lkIGZvbyhpbnQgaSl7CisgICAgfQorCisgICAgdm9pZCBiYXIoKSB7CisgICAgICBmb28oMCk7CisgICAgICBmb28oMCk7CisgICAgICBmb28oMCk7CisgICAgICBmb28oMCk7CisgICAgICBmb28oMCk7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9jaGFuZ2VTaWduYXR1cmUvUmVvcmRlckV4Y2VwdGlvbnMuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9jaGFuZ2VTaWduYXR1cmUvUmVvcmRlckV4Y2VwdGlvbnMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNDkyYjU0Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2NoYW5nZVNpZ25hdHVyZS9SZW9yZGVyRXhjZXB0aW9ucy5qYXZhCkBAIC0wLDAgKzEsMzQgQEAKK2NsYXNzIE15RXhjZXB0aW9uIGV4dGVuZHMgRXhjZXB0aW9ueworfQorCitjbGFzcyBNeUV4Y2VwdGlvbjEgZXh0ZW5kcyBFeGNlcHRpb257Cit9CisKK2NsYXNzIFRlc3QgeworICAgIHZvaWQgZm9vPGNhcmV0PiAoKSB0aHJvd3MgTXlFeGNlcHRpb24sCisgICAgICAgTXlFeGNlcHRpb24xIHsKKyAgICB9CisKKyAgICB2b2lkIGJhciAoKSB7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBmb28oKTsKKyAgICAgICAgfQorICAgICAgICBjYXRjaCAoTXlFeGNlcHRpb24gZSkge30KKyAgICAgICAgY2F0Y2ggKE15RXhjZXB0aW9uMSBteUV4Y2VwdGlvbjEpIHt9CisgICAgfQorfQorCitjbGFzcyBEZXJpdmVkIGV4dGVuZHMgVGVzdCB7CisgICAgdm9pZCBmb28oKSB0aHJvd3MgTXlFeGNlcHRpb24sCisgICAgICAgTXlFeGNlcHRpb24xIHsKKworICAgIH0KKworICAgIHZvaWQgYmFyICgpIHsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIGZvbygpOworICAgICAgICB9CisgICAgICAgIGNhdGNoIChNeUV4Y2VwdGlvbiBlKSB7fQorICAgICAgICBjYXRjaCAoTXlFeGNlcHRpb24xIG15RXhjZXB0aW9uMSkge30KKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2NoYW5nZVNpZ25hdHVyZS9SZW9yZGVyRXhjZXB0aW9uc19hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2NoYW5nZVNpZ25hdHVyZS9SZW9yZGVyRXhjZXB0aW9uc19hZnRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM5MWFiY2UKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvY2hhbmdlU2lnbmF0dXJlL1Jlb3JkZXJFeGNlcHRpb25zX2FmdGVyLmphdmEKQEAgLTAsMCArMSwzMiBAQAorY2xhc3MgTXlFeGNlcHRpb24gZXh0ZW5kcyBFeGNlcHRpb257Cit9CisKK2NsYXNzIE15RXhjZXB0aW9uMSBleHRlbmRzIEV4Y2VwdGlvbnsKK30KKworY2xhc3MgVGVzdCB7CisgICAgdm9pZCBmb28gKCkgdGhyb3dzIE15RXhjZXB0aW9uMSwgTXlFeGNlcHRpb24geworICAgIH0KKworICAgIHZvaWQgYmFyICgpIHsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIGZvbygpOworICAgICAgICB9CisgICAgICAgIGNhdGNoIChNeUV4Y2VwdGlvbiBlKSB7fQorICAgICAgICBjYXRjaCAoTXlFeGNlcHRpb24xIG15RXhjZXB0aW9uMSkge30KKyAgICB9Cit9CisKK2NsYXNzIERlcml2ZWQgZXh0ZW5kcyBUZXN0IHsKKyAgICB2b2lkIGZvbygpIHRocm93cyBNeUV4Y2VwdGlvbjEsIE15RXhjZXB0aW9uIHsKKworICAgIH0KKworICAgIHZvaWQgYmFyICgpIHsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIGZvbygpOworICAgICAgICB9CisgICAgICAgIGNhdGNoIChNeUV4Y2VwdGlvbiBlKSB7fQorICAgICAgICBjYXRjaCAoTXlFeGNlcHRpb24xIG15RXhjZXB0aW9uMSkge30KKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2NoYW5nZVNpZ25hdHVyZS9SZW9yZGVyTXVsdGlsaW5lTWV0aG9kUGFyYW1ldGVycy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2NoYW5nZVNpZ25hdHVyZS9SZW9yZGVyTXVsdGlsaW5lTWV0aG9kUGFyYW1ldGVycy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjViNzJkNjgKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvY2hhbmdlU2lnbmF0dXJlL1Jlb3JkZXJNdWx0aWxpbmVNZXRob2RQYXJhbWV0ZXJzLmphdmEKQEAgLTAsMCArMSw1IEBACitjbGFzcyBUZXN0IHsKKyAgICB2b2lkIDxjYXJldD5mb28oYm9vbGVhbiBiLAorICAgICAgICAgICAgIGludCBpKSB7IC8vIERvbid0IGV4cGVjdCBsaW5lIGJyZWFrIHRvIGJlIGluc2VydGVkIGJlZm9yZSBjbG9zaW5nIG1ldGhvZCBhcmdzIGJyYWNrZXQKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2NoYW5nZVNpZ25hdHVyZS9SZW9yZGVyTXVsdGlsaW5lTWV0aG9kUGFyYW1ldGVyc19hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2NoYW5nZVNpZ25hdHVyZS9SZW9yZGVyTXVsdGlsaW5lTWV0aG9kUGFyYW1ldGVyc19hZnRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhkY2VjMWRlCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2NoYW5nZVNpZ25hdHVyZS9SZW9yZGVyTXVsdGlsaW5lTWV0aG9kUGFyYW1ldGVyc19hZnRlci5qYXZhCkBAIC0wLDAgKzEsNCBAQAorY2xhc3MgVGVzdCB7CisgICAgdm9pZCBmb28oaW50IGksIGJvb2xlYW4gYikgeyAvLyBEb24ndCBleHBlY3QgbGluZSBicmVhayB0byBiZSBpbnNlcnRlZCBiZWZvcmUgY2xvc2luZyBtZXRob2QgYXJncyBicmFja2V0CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9jaGFuZ2VTaWduYXR1cmUvUmVvcmRlcldpdGhWYXJhcmdzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvY2hhbmdlU2lnbmF0dXJlL1Jlb3JkZXJXaXRoVmFyYXJncy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQxMDAyOTQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvY2hhbmdlU2lnbmF0dXJlL1Jlb3JkZXJXaXRoVmFyYXJncy5qYXZhCkBAIC0wLDAgKzEsNyBAQAorY2xhc3MgVGVzdCB7CisgICAgdm9pZCA8Y2FyZXQ+Zm9vKFN0cmluZ1tdIHMsIGludCBhKSB7fQorCisgICAgeworICAgICAgICBmb28obmV3IFN0cmluZ1tdeyJhIiwgImJiYiJ9LCAxKTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2NoYW5nZVNpZ25hdHVyZS9SZW9yZGVyV2l0aFZhcmFyZ3MyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvY2hhbmdlU2lnbmF0dXJlL1Jlb3JkZXJXaXRoVmFyYXJnczIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMGVhZDZjCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2NoYW5nZVNpZ25hdHVyZS9SZW9yZGVyV2l0aFZhcmFyZ3MyLmphdmEKQEAgLTAsMCArMSw5IEBACitjbGFzcyBUZXN0IHsKKyAgICBzdGF0aWMgZmluYWwgU3RyaW5nW10gc3RycyA9IG5ldyBTdHJpbmdbXSB7ICJhIiB9OworCisgICAgdm9pZCA8Y2FyZXQ+Zm9vKFN0cmluZ1tdIHMsIGludCBhKSB7fQorCisgICAgeworICAgICAgICBmb28oc3RycywgMSk7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9jaGFuZ2VTaWduYXR1cmUvUmVvcmRlcldpdGhWYXJhcmdzMl9hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2NoYW5nZVNpZ25hdHVyZS9SZW9yZGVyV2l0aFZhcmFyZ3MyX2FmdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTEwN2FmMgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9jaGFuZ2VTaWduYXR1cmUvUmVvcmRlcldpdGhWYXJhcmdzMl9hZnRlci5qYXZhCkBAIC0wLDAgKzEsOSBAQAorY2xhc3MgVGVzdCB7CisgICAgc3RhdGljIGZpbmFsIFN0cmluZ1tdIHN0cnMgPSBuZXcgU3RyaW5nW10geyAiYSIgfTsKKworICAgIHZvaWQgPGNhcmV0PmZvbyhpbnQgYSwgU3RyaW5nLi4uIHMpIHt9CisKKyAgICB7CisgICAgICAgIGZvbygxLCBzdHJzKTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2NoYW5nZVNpZ25hdHVyZS9SZW9yZGVyV2l0aFZhcmFyZ3NfYWZ0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9jaGFuZ2VTaWduYXR1cmUvUmVvcmRlcldpdGhWYXJhcmdzX2FmdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjE3ZDgwNgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9jaGFuZ2VTaWduYXR1cmUvUmVvcmRlcldpdGhWYXJhcmdzX2FmdGVyLmphdmEKQEAgLTAsMCArMSw3IEBACitjbGFzcyBUZXN0IHsKKyAgICB2b2lkIGZvbyhpbnQgYSwgU3RyaW5nLi4uIHMpIHt9CisKKyAgICB7CisgICAgICAgIGZvbygxLCAiYSIsICJiYmIiKTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2NoYW5nZVNpZ25hdHVyZS9SZXBsYWNlVmFyYXJnV2l0aEFycmF5LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvY2hhbmdlU2lnbmF0dXJlL1JlcGxhY2VWYXJhcmdXaXRoQXJyYXkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMGY5YjQwCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2NoYW5nZVNpZ25hdHVyZS9SZXBsYWNlVmFyYXJnV2l0aEFycmF5LmphdmEKQEAgLTAsMCArMSwxNCBAQAorY2xhc3MgTGlzdDxUPiB7fQorCitjbGFzcyBCYXNlPFQ+IHsKKyAgdm9pZCBmbzxjYXJldD5vKFN0cmluZyBzLCBMaXN0PFQ+Li4uIGwpIHt9Cit9CisKK2NsYXNzIEluaGVyaXRvciBleHRlbmRzIEJhc2U8SW50ZWdlcj4geworICB2b2lkIGZvbyhTdHJpbmcgcywgTGlzdDxJbnRlZ2VyPi4uLiBsKSB7fQorICAKKyAgeworICAgIG5ldyBJbmhlcml0b3IoKS5mb28oImEiLCBuZXcgTGlzdDxJbnRlZ2VyPigpKTsKKyAgfQorfQorCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvY2hhbmdlU2lnbmF0dXJlL1JlcGxhY2VWYXJhcmdXaXRoQXJyYXlfYWZ0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9jaGFuZ2VTaWduYXR1cmUvUmVwbGFjZVZhcmFyZ1dpdGhBcnJheV9hZnRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUyYTAzODgKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvY2hhbmdlU2lnbmF0dXJlL1JlcGxhY2VWYXJhcmdXaXRoQXJyYXlfYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDE0IEBACitjbGFzcyBMaXN0PFQ+IHt9CisKK2NsYXNzIEJhc2U8VD4geworICB2b2lkIGZvbyhMaXN0PFQ+W10gbCwgU3RyaW5nIHMpIHt9Cit9CisKK2NsYXNzIEluaGVyaXRvciBleHRlbmRzIEJhc2U8SW50ZWdlcj4geworICB2b2lkIGZvbyhMaXN0PEludGVnZXI+W10gbCwgU3RyaW5nIHMpIHt9CisgIAorICB7CisgICAgbmV3IEluaGVyaXRvcigpLmZvbyhuZXcgTGlzdFtde25ldyBMaXN0PEludGVnZXI+KCl9LCAiYSIpOworICB9Cit9CisKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9jaGFuZ2VTaWduYXR1cmUvU0NSNDA4OTUuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9jaGFuZ2VTaWduYXR1cmUvU0NSNDA4OTUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMmUxODg5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2NoYW5nZVNpZ25hdHVyZS9TQ1I0MDg5NS5qYXZhCkBAIC0wLDAgKzEsOSBAQAorY2xhc3MgWCB7CisKKyAgICAvKioKKyAgICAgKiBIYXMgYSBtZXRob2QgY2FsbGVkIHtAbGluayAjbXltZXRob2QoaW50LCBpbnQpfS4KKyAgICAgKi8KKyAgICBwdWJsaWMgY2xhc3MgVGVzdFJlZmFjdG9yTGluayB7CisgICAgICAgIHB1YmxpYyB2b2lkIDxjYXJldD5teW1ldGhvZChpbnQgeSwgaW50IHopIHsgfQorICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9jaGFuZ2VTaWduYXR1cmUvU0NSNDA4OTVfYWZ0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9jaGFuZ2VTaWduYXR1cmUvU0NSNDA4OTVfYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYzgzODhmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2NoYW5nZVNpZ25hdHVyZS9TQ1I0MDg5NV9hZnRlci5qYXZhCkBAIC0wLDAgKzEsOSBAQAorY2xhc3MgWCB7CisKKyAgICAvKioKKyAgICAgKiBIYXMgYSBtZXRob2QgY2FsbGVkIHtAbGluayAjbXltZXRob2QoaW50LCBib29sZWFuKX0uCisgICAgICovCisgICAgcHVibGljIGNsYXNzIFRlc3RSZWZhY3RvckxpbmsgeworICAgICAgICBwdWJsaWMgdm9pZCBteW1ldGhvZChpbnQgeSwgYm9vbGVhbiBiKSB7IH0KKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvY2hhbmdlU2lnbmF0dXJlL1NpbXBsZS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2NoYW5nZVNpZ25hdHVyZS9TaW1wbGUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YzY0NGU0Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2NoYW5nZVNpZ25hdHVyZS9TaW1wbGUuamF2YQpAQCAtMCwwICsxLDcgQEAKK2NsYXNzIEEgeworICAgIHZvaWQgbWV0aG9kPGNhcmV0PihpbnQgaSk7Cit9CisKK2NsYXNzIEIgZXh0ZW5kcyBBIHsKKyAgICB2b2lkIG1ldGhvZChpbnQgayk7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2NoYW5nZVNpZ25hdHVyZS9TaW1wbGVfYWZ0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9jaGFuZ2VTaWduYXR1cmUvU2ltcGxlX2FmdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjMxMjQ3YQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9jaGFuZ2VTaWduYXR1cmUvU2ltcGxlX2FmdGVyLmphdmEKQEAgLTAsMCArMSw3IEBACitjbGFzcyBBIHsKKyAgICB2b2lkIG1ldGhvZCgpOworfQorCitjbGFzcyBCIGV4dGVuZHMgQSB7CisgICAgdm9pZCBtZXRob2QoKTsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvY2hhbmdlU2lnbmF0dXJlL1N1cGVyQ2FsbEZyb21PdGhlck1ldGhvZC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2NoYW5nZVNpZ25hdHVyZS9TdXBlckNhbGxGcm9tT3RoZXJNZXRob2QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MWQzODlhCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2NoYW5nZVNpZ25hdHVyZS9TdXBlckNhbGxGcm9tT3RoZXJNZXRob2QuamF2YQpAQCAtMCwwICsxLDEwIEBACitjbGFzcyBBIHsKKyAgICB2b2lkIDxjYXJldD5mb28oKSB7CisgICAgfQorfQorCitjbGFzcyBCIGV4dGVuZHMgQSB7CisgICAgdm9pZCBib28oKSB7CisgICAgICAgIHN1cGVyLmZvbygpOworICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9jaGFuZ2VTaWduYXR1cmUvU3VwZXJDYWxsRnJvbU90aGVyTWV0aG9kX2FmdGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvY2hhbmdlU2lnbmF0dXJlL1N1cGVyQ2FsbEZyb21PdGhlck1ldGhvZF9hZnRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJlNzkwOTkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvY2hhbmdlU2lnbmF0dXJlL1N1cGVyQ2FsbEZyb21PdGhlck1ldGhvZF9hZnRlci5qYXZhCkBAIC0wLDAgKzEsMTAgQEAKK2NsYXNzIEEgeworICAgIHZvaWQgPGNhcmV0PmZvbyhpbnQgbm5uKSB7CisgICAgfQorfQorCitjbGFzcyBCIGV4dGVuZHMgQSB7CisgICAgdm9pZCBib28oKSB7CisgICAgICAgIHN1cGVyLmZvbygtMjIyKTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvY2hhbmdlU2lnbmF0dXJlL1R5cGVQYXJhbWV0ZXJzSW5NZXRob2QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9jaGFuZ2VTaWduYXR1cmUvVHlwZVBhcmFtZXRlcnNJbk1ldGhvZC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ5MWQ5OGQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvY2hhbmdlU2lnbmF0dXJlL1R5cGVQYXJhbWV0ZXJzSW5NZXRob2QuamF2YQpAQCAtMCwwICsxLDkgQEAKK2NsYXNzIEM8VD4geworICAgIHByb3RlY3RlZCA8VT4gVSBtZXRob2Q8Y2FyZXQ+KCl7CisgICAgfQorfQorCitjbGFzcyBDMSBleHRlbmRzIEM8U3RyaW5nPiB7CisgICAgcHJvdGVjdGVkIDxWPiBWIG1ldGhvZCgpeworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvY2hhbmdlU2lnbmF0dXJlL1R5cGVQYXJhbWV0ZXJzSW5NZXRob2RfYWZ0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9jaGFuZ2VTaWduYXR1cmUvVHlwZVBhcmFtZXRlcnNJbk1ldGhvZF9hZnRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBhNTlmMDEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvY2hhbmdlU2lnbmF0dXJlL1R5cGVQYXJhbWV0ZXJzSW5NZXRob2RfYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDkgQEAKK2NsYXNzIEM8VD4geworICAgIHByb3RlY3RlZCA8VT4gVSBtZXRob2QoVCB0LCBVIHUsIEM8VT4gY3UpeworICAgIH0KK30KKworY2xhc3MgQzEgZXh0ZW5kcyBDPFN0cmluZz4geworICAgIHByb3RlY3RlZCA8Vj4gViBtZXRob2QoU3RyaW5nIHQsIFYgdSwgQzxWPiBjdSl7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9jaGFuZ2VTaWduYXR1cmUvVXNlQW55VmFyaWFibGUuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9jaGFuZ2VTaWduYXR1cmUvVXNlQW55VmFyaWFibGUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iODYyODRlCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2NoYW5nZVNpZ25hdHVyZS9Vc2VBbnlWYXJpYWJsZS5qYXZhCkBAIC0wLDAgKzEsMTQgQEAKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworY2xhc3MgQyB7CisgICAgdm9pZCA8Y2FyZXQ+bWV0aG9kKCkgeworICAgIH0KK30KKworY2xhc3MgVXNhZ2UgeworICAgIExpc3QgbXlMaXN0OworICAgIHsKKyAgICAgICAgQyBjID0gbmV3IEMoKTsKKyAgICAgICAgYy5tZXRob2QoKTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2NoYW5nZVNpZ25hdHVyZS9Vc2VBbnlWYXJpYWJsZUFuZERlZmF1bHQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9jaGFuZ2VTaWduYXR1cmUvVXNlQW55VmFyaWFibGVBbmREZWZhdWx0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjhhZmE2MgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9jaGFuZ2VTaWduYXR1cmUvVXNlQW55VmFyaWFibGVBbmREZWZhdWx0LmphdmEKQEAgLTAsMCArMSwxNCBAQAorY2xhc3MgQyB7CisgICAgPGNhcmV0PkMoU3RyaW5nIG5hbWUpe30KK30KKworY2xhc3MgVXNhZ2UgeworICAgIHZvaWQgZm9vKCkgeworICAgICAgQyBjMSA9IG5ldyBDKCIxIik7CisgICAgICBDIGMyID0gbmV3IEMoIjIiKTsKKyAgICB9CisKKyAgICB2b2lkIGJhcigpIHsKKyAgICAgIEMgYzEgPSBuZXcgQygiMSIpLCBjMiA9IG5ldyBDKCIyIik7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9jaGFuZ2VTaWduYXR1cmUvVXNlQW55VmFyaWFibGVBbmREZWZhdWx0X2FmdGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvY2hhbmdlU2lnbmF0dXJlL1VzZUFueVZhcmlhYmxlQW5kRGVmYXVsdF9hZnRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU1MmRhZTIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvY2hhbmdlU2lnbmF0dXJlL1VzZUFueVZhcmlhYmxlQW5kRGVmYXVsdF9hZnRlci5qYXZhCkBAIC0wLDAgKzEsMTQgQEAKK2NsYXNzIEMgeworICAgIEMoQyBjKXt9Cit9CisKK2NsYXNzIFVzYWdlIHsKKyAgICB2b2lkIGZvbygpIHsKKyAgICAgIEMgYzEgPSBuZXcgQyhudWxsKTsKKyAgICAgIEMgYzIgPSBuZXcgQyhjMSk7CisgICAgfQorCisgICAgdm9pZCBiYXIoKSB7CisgICAgICBDIGMxID0gbmV3IEMobnVsbCksIGMyID0gbmV3IEMoYzEpOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvY2hhbmdlU2lnbmF0dXJlL1VzZUFueVZhcmlhYmxlX2FmdGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvY2hhbmdlU2lnbmF0dXJlL1VzZUFueVZhcmlhYmxlX2FmdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTJiNmY0NAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9jaGFuZ2VTaWduYXR1cmUvVXNlQW55VmFyaWFibGVfYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDE0IEBACitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK2NsYXNzIEMgeworICAgIHZvaWQgbWV0aG9kKExpc3QgbCkgeworICAgIH0KK30KKworY2xhc3MgVXNhZ2UgeworICAgIExpc3QgbXlMaXN0OworICAgIHsKKyAgICAgICAgQyBjID0gbmV3IEMoKTsKKyAgICAgICAgYy5tZXRob2QobXlMaXN0KTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2NoYW5nZVNpZ25hdHVyZS9Vc2VUaGlzQXNBbnlWYXJpYWJsZS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2NoYW5nZVNpZ25hdHVyZS9Vc2VUaGlzQXNBbnlWYXJpYWJsZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg4YzBlMTEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvY2hhbmdlU2lnbmF0dXJlL1VzZVRoaXNBc0FueVZhcmlhYmxlLmphdmEKQEAgLTAsMCArMSwxOCBAQAoraW1wb3J0IGphdmEudXRpbC5MaXN0OworCitjbGFzcyBDIHsKKyAgICB2b2lkIDxjYXJldD5tZXRob2QoKSB7CisgICAgfQorfQorCitjbGFzcyBVc2FnZSBpbXBsZW1lbnRzIExpc3QgeworICAgIHsKKyAgICAgICAgZmluYWwgQyBjID0gbmV3IEMoKTsKKyAgICAgICAgYy5tZXRob2QoKTsKKyAgICAgICAgbmV3IFJ1bm5hYmxlKCkgeworICAgICAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKKyAgICAgICAgICAgIGMubWV0aG9kKCk7CisgICAgICAgICAgfQorICAgICAgICB9LnJ1bigpOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvY2hhbmdlU2lnbmF0dXJlL1VzZVRoaXNBc0FueVZhcmlhYmxlX2FmdGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvY2hhbmdlU2lnbmF0dXJlL1VzZVRoaXNBc0FueVZhcmlhYmxlX2FmdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDA0NGVkNgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9jaGFuZ2VTaWduYXR1cmUvVXNlVGhpc0FzQW55VmFyaWFibGVfYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDE4IEBACitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK2NsYXNzIEMgeworICAgIHZvaWQgbWV0aG9kKExpc3QgbCkgeworICAgIH0KK30KKworY2xhc3MgVXNhZ2UgaW1wbGVtZW50cyBMaXN0IHsKKyAgICB7CisgICAgICAgIGZpbmFsIEMgYyA9IG5ldyBDKCk7CisgICAgICAgIGMubWV0aG9kKHRoaXMpOworICAgICAgICBuZXcgUnVubmFibGUoKSB7CisgICAgICAgICAgcHVibGljIHZvaWQgcnVuKCkgeworICAgICAgICAgICAgYy5tZXRob2QoVXNhZ2UudGhpcyk7CisgICAgICAgICAgfQorICAgICAgICB9LnJ1bigpOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvY2hhbmdlU2lnbmF0dXJlL1ZhcmFyZ3MxLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvY2hhbmdlU2lnbmF0dXJlL1ZhcmFyZ3MxLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjI2ZmQyNQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9jaGFuZ2VTaWduYXR1cmUvVmFyYXJnczEuamF2YQpAQCAtMCwwICsxLDEwIEBACitjbGFzcyBDIHsKKyAgICB2b2lkIDxjYXJldD5tZXRob2QoaW50Li4uIGFyZ3MpIHsKKyAgICB9CisKKyAgICB7CisgICAgICAgIG1ldGhvZCgxLDIpOworICAgICAgICBtZXRob2QoMSwyLDMpOworICAgICAgICBtZXRob2QoKTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2NoYW5nZVNpZ25hdHVyZS9WYXJhcmdzMV9hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2NoYW5nZVNpZ25hdHVyZS9WYXJhcmdzMV9hZnRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQyNDFkN2IKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvY2hhbmdlU2lnbmF0dXJlL1ZhcmFyZ3MxX2FmdGVyLmphdmEKQEAgLTAsMCArMSwxMCBAQAorY2xhc3MgQyB7CisgICAgdm9pZCA8Y2FyZXQ+bWV0aG9kKGJvb2xlYW4gYiwgaW50Li4uIGFyZ3MpIHsKKyAgICB9CisKKyAgICB7CisgICAgICAgIG1ldGhvZCh0cnVlLCAxLDIpOworICAgICAgICBtZXRob2QodHJ1ZSwgMSwyLDMpOworICAgICAgICBtZXRob2QodHJ1ZSk7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9jaGFuZ2VTaWduYXR1cmUvVmFyYXJnczIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9jaGFuZ2VTaWduYXR1cmUvVmFyYXJnczIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOTUwMmU0Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2NoYW5nZVNpZ25hdHVyZS9WYXJhcmdzMi5qYXZhCkBAIC0wLDAgKzEsMjMgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwMC0yMDExIEpldEJyYWlucyBzLnIuby4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCitjbGFzcyBDIHsKKyAgICB2b2lkIGRvPGNhcmV0PlNtdGgoYm9vbGVhbiBiLCBpbnQuLi4gaSkgeworICAgIH0KKworICAgIHZvaWQgbSgpIHsKKyAgICAgICAgZG9TbXRoKHRydWUsIDEpOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvY2hhbmdlU2lnbmF0dXJlL1ZhcmFyZ3MyX2FmdGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvY2hhbmdlU2lnbmF0dXJlL1ZhcmFyZ3MyX2FmdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmFhZjBiZAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9jaGFuZ2VTaWduYXR1cmUvVmFyYXJnczJfYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDIzIEBACisvKgorICogQ29weXJpZ2h0IDIwMDAtMjAxMSBKZXRCcmFpbnMgcy5yLm8uCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworY2xhc3MgQyB7CisgICAgdm9pZCBkb1NtdGgoaW50IGksIGJvb2xlYW4uLi4gYikgeworICAgIH0KKworICAgIHZvaWQgbSgpIHsKKyAgICAgICAgZG9TbXRoKDEsIHRydWUpOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvY2hhbmdlU2lnbmF0dXJlR2VzdHVyZS9BZGRQYXJhbUNoYW5nZVJldHVyblR5cGUuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9jaGFuZ2VTaWduYXR1cmVHZXN0dXJlL0FkZFBhcmFtQ2hhbmdlUmV0dXJuVHlwZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU4MWQwODEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvY2hhbmdlU2lnbmF0dXJlR2VzdHVyZS9BZGRQYXJhbUNoYW5nZVJldHVyblR5cGUuamF2YQpAQCAtMCwwICsxLDggQEAKK2NsYXNzIFRlc3QgeworICB2b2lkIGZvbygpIHsKKyAgICBiYXIoKTsKKyAgfQorCisgIHZvaWQgYmFyKDxjYXJldD4peworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2NoYW5nZVNpZ25hdHVyZUdlc3R1cmUvQWRkUGFyYW1DaGFuZ2VSZXR1cm5UeXBlX2FmdGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvY2hhbmdlU2lnbmF0dXJlR2VzdHVyZS9BZGRQYXJhbUNoYW5nZVJldHVyblR5cGVfYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYmYxMDRiCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2NoYW5nZVNpZ25hdHVyZUdlc3R1cmUvQWRkUGFyYW1DaGFuZ2VSZXR1cm5UeXBlX2FmdGVyLmphdmEKQEAgLTAsMCArMSw4IEBACitjbGFzcyBUZXN0IHsKKyAgdm9pZCBmb28oKSB7CisgICAgYmFyKCk7CisgIH0KKworICBib29sZWFuIGJhcihpbnQgcGFyYW0peworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2NoYW5nZVNpZ25hdHVyZUdlc3R1cmUvQWRkUGFyYW1ldGVyMkNvbnN0cnVjdG9yLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvY2hhbmdlU2lnbmF0dXJlR2VzdHVyZS9BZGRQYXJhbWV0ZXIyQ29uc3RydWN0b3IuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMWFlOTI5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2NoYW5nZVNpZ25hdHVyZUdlc3R1cmUvQWRkUGFyYW1ldGVyMkNvbnN0cnVjdG9yLmphdmEKQEAgLTAsMCArMSw5IEBACitwYWNrYWdlIHJlZmFjdG9yaW5nLmNoYW5nZVNpZ25hdHVyZUdlc3R1cmU7CitjbGFzcyBUZXN0TWVhYnJhY2FkYWJyYSB7CisgIFRlc3RNZWFicmFjYWRhYnJhKDxjYXJldD4peworICB9CisKKyAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworICAgIFRlc3RNZWFicmFjYWRhYnJhIHQgPSBuZXcgVGVzdE1lYWJyYWNhZGFicmEoKTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9jaGFuZ2VTaWduYXR1cmVHZXN0dXJlL0FkZFBhcmFtZXRlcjJDb25zdHJ1Y3Rvcl9hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2NoYW5nZVNpZ25hdHVyZUdlc3R1cmUvQWRkUGFyYW1ldGVyMkNvbnN0cnVjdG9yX2FmdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmI4YmRhMAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9jaGFuZ2VTaWduYXR1cmVHZXN0dXJlL0FkZFBhcmFtZXRlcjJDb25zdHJ1Y3Rvcl9hZnRlci5qYXZhCkBAIC0wLDAgKzEsOSBAQAorcGFja2FnZSByZWZhY3RvcmluZy5jaGFuZ2VTaWduYXR1cmVHZXN0dXJlOworY2xhc3MgVGVzdE1lYWJyYWNhZGFicmEgeworICBUZXN0TWVhYnJhY2FkYWJyYShpbnQgcGFyYW0peworICB9CisKKyAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworICAgIFRlc3RNZWFicmFjYWRhYnJhIHQgPSBuZXcgVGVzdE1lYWJyYWNhZGFicmEoKTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9jaGFuZ2VTaWduYXR1cmVHZXN0dXJlL0FkZFBhcmFtZXRlcjJVbnVzZWRDb25zdHJ1Y3Rvci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2NoYW5nZVNpZ25hdHVyZUdlc3R1cmUvQWRkUGFyYW1ldGVyMlVudXNlZENvbnN0cnVjdG9yLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDE0ZjcwOQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9jaGFuZ2VTaWduYXR1cmVHZXN0dXJlL0FkZFBhcmFtZXRlcjJVbnVzZWRDb25zdHJ1Y3Rvci5qYXZhCkBAIC0wLDAgKzEsNSBAQAorcGFja2FnZSByZWZhY3RvcmluZy5jaGFuZ2VTaWduYXR1cmVHZXN0dXJlOworY2xhc3MgVGVzdE1lYWJyYWNhZGFicmEgeworICBwcml2YXRlIFRlc3RNZWFicmFjYWRhYnJhKDxjYXJldD4peworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2NoYW5nZVNpZ25hdHVyZUdlc3R1cmUvQWRkUGFyYW1ldGVyRmluYWwuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9jaGFuZ2VTaWduYXR1cmVHZXN0dXJlL0FkZFBhcmFtZXRlckZpbmFsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzdkOWYwMwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9jaGFuZ2VTaWduYXR1cmVHZXN0dXJlL0FkZFBhcmFtZXRlckZpbmFsLmphdmEKQEAgLTAsMCArMSw4IEBACitwdWJsaWMgY2xhc3MgVGVzdCB7CisgIHB1YmxpYyB2b2lkIGZvbyg8Y2FyZXQ+KSB7CisgIH0KKworICB2b2lkIGJhcigpIHsKKyAgICBmb28oKTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9jaGFuZ2VTaWduYXR1cmVHZXN0dXJlL0FkZFBhcmFtZXRlckZpbmFsX2FmdGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvY2hhbmdlU2lnbmF0dXJlR2VzdHVyZS9BZGRQYXJhbWV0ZXJGaW5hbF9hZnRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE4ZDBiN2EKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvY2hhbmdlU2lnbmF0dXJlR2VzdHVyZS9BZGRQYXJhbWV0ZXJGaW5hbF9hZnRlci5qYXZhCkBAIC0wLDAgKzEsOCBAQAorcHVibGljIGNsYXNzIFRlc3QgeworICBwdWJsaWMgdm9pZCBmb28oZmluYWwgaW50IHBhcmFtKSB7CisgIH0KKworICB2b2lkIGJhcigpIHsKKyAgICBmb28oKTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9jaGFuZ2VTaWduYXR1cmVHZXN0dXJlL0RlbGV0ZVBhcmFtSW5TdXBlclVzZWQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9jaGFuZ2VTaWduYXR1cmVHZXN0dXJlL0RlbGV0ZVBhcmFtSW5TdXBlclVzZWQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wODBlMjhlCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2NoYW5nZVNpZ25hdHVyZUdlc3R1cmUvRGVsZXRlUGFyYW1JblN1cGVyVXNlZC5qYXZhCkBAIC0wLDAgKzEsMTQgQEAKK3B1YmxpYyBjbGFzcyBQYXJlbnQgeworICBwdWJsaWMgdm9pZCBmb28oZmxvYXQgaiwgaW50IGksIFN0cmluZyBzKSB7CisgICAgU3lzdGVtLm91dC5wcmludGxuKGogKyBzICsgaSk7CisgIH0KK30KKworY2xhc3MgQ2hpbGQgZXh0ZW5kcyBQYXJlbnQgeworICBwdWJsaWMgdm9pZCBmb28oZmxvYXQgaiwgPHNlbGVjdGlvbj4gaW50IGksPC9zZWxlY3Rpb24+IFN0cmluZyBzICkgeworICB9CisKKyAgdm9pZCBiYXIoKSB7CisgICAgZm9vKDEuMCwgMSwgImFhYSIpOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2NoYW5nZVNpZ25hdHVyZUdlc3R1cmUvRGVsZXRlUGFyYW1JblN1cGVyVXNlZF9hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2NoYW5nZVNpZ25hdHVyZUdlc3R1cmUvRGVsZXRlUGFyYW1JblN1cGVyVXNlZF9hZnRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgxYjkzZmUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvY2hhbmdlU2lnbmF0dXJlR2VzdHVyZS9EZWxldGVQYXJhbUluU3VwZXJVc2VkX2FmdGVyLmphdmEKQEAgLTAsMCArMSwxNCBAQAorcHVibGljIGNsYXNzIFBhcmVudCB7CisgIHB1YmxpYyB2b2lkIGZvbyhmbG9hdCBqLCBTdHJpbmcgcykgeworICAgIFN5c3RlbS5vdXQucHJpbnRsbihqICsgcyArIGkpOworICB9Cit9CisKK2NsYXNzIENoaWxkIGV4dGVuZHMgUGFyZW50IHsKKyAgcHVibGljIHZvaWQgZm9vKGZsb2F0IGosICBTdHJpbmcgcyApIHsKKyAgfQorCisgIHZvaWQgYmFyKCkgeworICAgIGZvbygxLjAsICJhYWEiKTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9jaGFuZ2VTaWduYXR1cmVHZXN0dXJlL01vZGlmaWVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvY2hhbmdlU2lnbmF0dXJlR2VzdHVyZS9Nb2RpZmllci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBmZTdmNDgKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvY2hhbmdlU2lnbmF0dXJlR2VzdHVyZS9Nb2RpZmllci5qYXZhCkBAIC0wLDAgKzEsNCBAQAorY2xhc3MgVGVzdCB7CisgIDxjYXJldD4gdm9pZCBmb28oKSB7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvY2hhbmdlU2lnbmF0dXJlR2VzdHVyZS9NdWx0aVBhcmFtcy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2NoYW5nZVNpZ25hdHVyZUdlc3R1cmUvTXVsdGlQYXJhbXMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jY2U1ODk5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2NoYW5nZVNpZ25hdHVyZUdlc3R1cmUvTXVsdGlQYXJhbXMuamF2YQpAQCAtMCwwICsxLDI3IEBACisvKgorICogQ29weXJpZ2h0IDIwMDAtMjAxMiBKZXRCcmFpbnMgcy5yLm8uCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworcGFja2FnZSByZWZhY3RvcmluZy5jaGFuZ2VTaWduYXR1cmVHZXN0dXJlOworaW50ZXJmYWNlIEkgeworICB2b2lkIGFkZCg8Y2FyZXQ+KTsKK30KKworcHVibGljIGNsYXNzIElJbXBsIGltcGxlbWVudHMgSSB7CisgIHB1YmxpYyB2b2lkIGFkZCgpe30KKyAgCisgIHZvaWQgZm9vKCkgeworICAgIGFkZCgpOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2NoYW5nZVNpZ25hdHVyZUdlc3R1cmUvTXVsdGlQYXJhbXNfYWZ0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9jaGFuZ2VTaWduYXR1cmVHZXN0dXJlL011bHRpUGFyYW1zX2FmdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTk4YWY1ZgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9jaGFuZ2VTaWduYXR1cmVHZXN0dXJlL011bHRpUGFyYW1zX2FmdGVyLmphdmEKQEAgLTAsMCArMSwyNyBAQAorLyoKKyAqIENvcHlyaWdodCAyMDAwLTIwMTIgSmV0QnJhaW5zIHMuci5vLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KK3BhY2thZ2UgcmVmYWN0b3JpbmcuY2hhbmdlU2lnbmF0dXJlR2VzdHVyZTsKK2ludGVyZmFjZSBJIHsKKyAgdm9pZCBhZGQoaW50IHgsIGludCB5KTsKK30KKworcHVibGljIGNsYXNzIElJbXBsIGltcGxlbWVudHMgSSB7CisgIHB1YmxpYyB2b2lkIGFkZChpbnQgeCwgaW50IHkpe30KKyAgCisgIHZvaWQgZm9vKCkgeworICAgIGFkZCgsICk7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvY2hhbmdlU2lnbmF0dXJlR2VzdHVyZS9OZXdQYXJhbS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2NoYW5nZVNpZ25hdHVyZUdlc3R1cmUvTmV3UGFyYW0uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45N2Q4Zjk3Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2NoYW5nZVNpZ25hdHVyZUdlc3R1cmUvTmV3UGFyYW0uamF2YQpAQCAtMCwwICsxLDYgQEAKK2NsYXNzIFRlc3QgeworICB2b2lkIGZvbyhpbnQgaTxjYXJldD4pIHsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oaSk7CisgIH0KKyAgdm9pZCBiYXIoKXtmb28oMSk7fQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9jaGFuZ2VTaWduYXR1cmVHZXN0dXJlL05ld1BhcmFtSW5TdXBlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2NoYW5nZVNpZ25hdHVyZUdlc3R1cmUvTmV3UGFyYW1JblN1cGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWE0Y2ZiNAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9jaGFuZ2VTaWduYXR1cmVHZXN0dXJlL05ld1BhcmFtSW5TdXBlci5qYXZhCkBAIC0wLDAgKzEsMTAgQEAKK3B1YmxpYyBjbGFzcyBQYXJlbnQgeworICBwdWJsaWMgdm9pZCBmb28oaW50IGkpIHsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oaSk7CisgIH0KK30KKworY2xhc3MgQ2hpbGQgZXh0ZW5kcyBQYXJlbnQgeworICBwdWJsaWMgdm9pZCBmb28oaW50IGk8Y2FyZXQ+KSB7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvY2hhbmdlU2lnbmF0dXJlR2VzdHVyZS9OZXdQYXJhbUluU3VwZXJVc2VkLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvY2hhbmdlU2lnbmF0dXJlR2VzdHVyZS9OZXdQYXJhbUluU3VwZXJVc2VkLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmQxNmI1YwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9jaGFuZ2VTaWduYXR1cmVHZXN0dXJlL05ld1BhcmFtSW5TdXBlclVzZWQuamF2YQpAQCAtMCwwICsxLDE0IEBACitwdWJsaWMgY2xhc3MgUGFyZW50IHsKKyAgcHVibGljIHZvaWQgZm9vKGludCBpKSB7CisgICAgU3lzdGVtLm91dC5wcmludGxuKGkpOworICB9Cit9CisKK2NsYXNzIENoaWxkIGV4dGVuZHMgUGFyZW50IHsKKyAgcHVibGljIHZvaWQgZm9vKGludCBpPGNhcmV0PikgeworICB9CisKKyAgdm9pZCBiYXIoKSB7CisgICAgZm9vKDEpOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2NoYW5nZVNpZ25hdHVyZUdlc3R1cmUvTmV3UGFyYW1JblN1cGVyVXNlZF9hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2NoYW5nZVNpZ25hdHVyZUdlc3R1cmUvTmV3UGFyYW1JblN1cGVyVXNlZF9hZnRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk2MzMwODQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvY2hhbmdlU2lnbmF0dXJlR2VzdHVyZS9OZXdQYXJhbUluU3VwZXJVc2VkX2FmdGVyLmphdmEKQEAgLTAsMCArMSwxNCBAQAorcHVibGljIGNsYXNzIFBhcmVudCB7CisgIHB1YmxpYyB2b2lkIGZvbyhpbnQgaSwgaW50IHBhcmFtKSB7CisgICAgU3lzdGVtLm91dC5wcmludGxuKGkpOworICB9Cit9CisKK2NsYXNzIENoaWxkIGV4dGVuZHMgUGFyZW50IHsKKyAgcHVibGljIHZvaWQgZm9vKGludCBpLCBpbnQgcGFyYW0pIHsKKyAgfQorCisgIHZvaWQgYmFyKCkgeworICAgIGZvbygxLCApOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2NoYW5nZVNpZ25hdHVyZUdlc3R1cmUvTmV3UGFyYW1JblN1cGVyX2FmdGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvY2hhbmdlU2lnbmF0dXJlR2VzdHVyZS9OZXdQYXJhbUluU3VwZXJfYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNmNhY2IzCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2NoYW5nZVNpZ25hdHVyZUdlc3R1cmUvTmV3UGFyYW1JblN1cGVyX2FmdGVyLmphdmEKQEAgLTAsMCArMSwxMCBAQAorcHVibGljIGNsYXNzIFBhcmVudCB7CisgIHB1YmxpYyB2b2lkIGZvbyhpbnQgaSwgaW50IHBhcmFtKSB7CisgICAgU3lzdGVtLm91dC5wcmludGxuKGkpOworICB9Cit9CisKK2NsYXNzIENoaWxkIGV4dGVuZHMgUGFyZW50IHsKKyAgcHVibGljIHZvaWQgZm9vKGludCBpLCBpbnQgcGFyYW0pIHsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9jaGFuZ2VTaWduYXR1cmVHZXN0dXJlL05ld1BhcmFtX2FmdGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvY2hhbmdlU2lnbmF0dXJlR2VzdHVyZS9OZXdQYXJhbV9hZnRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk0OWRhOTAKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvY2hhbmdlU2lnbmF0dXJlR2VzdHVyZS9OZXdQYXJhbV9hZnRlci5qYXZhCkBAIC0wLDAgKzEsNiBAQAorY2xhc3MgVGVzdCB7CisgIHZvaWQgZm9vKGludCBpLCBpbnQgcGFyYW0pIHsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oaSk7CisgIH0KKyAgdm9pZCBiYXIoKXtmb28oMSk7fQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9jaGFuZ2VTaWduYXR1cmVHZXN0dXJlL05vVXNhZ2VzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvY2hhbmdlU2lnbmF0dXJlR2VzdHVyZS9Ob1VzYWdlcy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJkY2E3YzIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvY2hhbmdlU2lnbmF0dXJlR2VzdHVyZS9Ob1VzYWdlcy5qYXZhCkBAIC0wLDAgKzEsNCBAQAorcGFja2FnZSByZWZhY3RvcmluZy5jaGFuZ2VTaWduYXR1cmVHZXN0dXJlOworY2xhc3MgVGVzdCB7CisgIHByaXZhdGUgdm9pZCBteXZlcnlsb25hZ25hbWUoPGNhcmV0Pil7fQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9jaGFuZ2VTaWduYXR1cmVHZXN0dXJlL09jY3VycmVuY2VzSW5TYW1lRmlsZS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2NoYW5nZVNpZ25hdHVyZUdlc3R1cmUvT2NjdXJyZW5jZXNJblNhbWVGaWxlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWYwOWFlZAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9jaGFuZ2VTaWduYXR1cmVHZXN0dXJlL09jY3VycmVuY2VzSW5TYW1lRmlsZS5qYXZhCkBAIC0wLDAgKzEsOCBAQAorcGFja2FnZSByZWZhY3RvcmluZy5jaGFuZ2VTaWduYXR1cmVHZXN0dXJlOworaW50ZXJmYWNlIEkgeworICB2b2lkIGFkZCg8Y2FyZXQ+KTsKK30KKworcHVibGljIGNsYXNzIElJbXBsIGltcGxlbWVudHMgSSB7CisgIHB1YmxpYyB2b2lkIGFkZCgpe30KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvY2hhbmdlU2lnbmF0dXJlR2VzdHVyZS9PY2N1cnJlbmNlc0luU2FtZUZpbGVfYWZ0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9jaGFuZ2VTaWduYXR1cmVHZXN0dXJlL09jY3VycmVuY2VzSW5TYW1lRmlsZV9hZnRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI2ZTRjOWIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvY2hhbmdlU2lnbmF0dXJlR2VzdHVyZS9PY2N1cnJlbmNlc0luU2FtZUZpbGVfYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDggQEAKK3BhY2thZ2UgcmVmYWN0b3JpbmcuY2hhbmdlU2lnbmF0dXJlR2VzdHVyZTsKK2ludGVyZmFjZSBJIHsKKyAgdm9pZCBhZGQoaW50IHBhcmFtKTsKK30KKworcHVibGljIGNsYXNzIElJbXBsIGltcGxlbWVudHMgSSB7CisgIHB1YmxpYyB2b2lkIGFkZChpbnQgcGFyYW0pe30KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvY2hhbmdlU2lnbmF0dXJlR2VzdHVyZS9PbkFub3RoZXJNZXRob2QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9jaGFuZ2VTaWduYXR1cmVHZXN0dXJlL09uQW5vdGhlck1ldGhvZC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI4NjNhMzYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvY2hhbmdlU2lnbmF0dXJlR2VzdHVyZS9PbkFub3RoZXJNZXRob2QuamF2YQpAQCAtMCwwICsxLDUgQEAKK2NsYXNzIFRlc3QgeworICB2b2lkIGZvbyg8Y2FyZXQ+KSB7CisgIH0KKyAgdm9pZCBiYXIoKXtmb28oKTt9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2NoYW5nZVNpZ25hdHVyZUdlc3R1cmUvUmVuYW1lTG9jYWxWYXJpYWJsZS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2NoYW5nZVNpZ25hdHVyZUdlc3R1cmUvUmVuYW1lTG9jYWxWYXJpYWJsZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEzMDIwYjIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvY2hhbmdlU2lnbmF0dXJlR2VzdHVyZS9SZW5hbWVMb2NhbFZhcmlhYmxlLmphdmEKQEAgLTAsMCArMSwyMCBAQAorLyoKKyAqIENvcHlyaWdodCAyMDAwLTIwMTAgSmV0QnJhaW5zIHMuci5vLgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KK3B1YmxpYyBjbGFzcyBUZXN0IHsKKyAgdm9pZCBmb28oKSB7CisgICAgaW50IG15PGNhcmV0PmkgPSAwOworICAgIGlmIChteWkgPiAwKSB7CisgICAgICBTeXN0ZW0ub3V0LnByaW50bG4obXlpKTsKKyAgICB9CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9jaGFuZ2VTaWduYXR1cmVHZXN0dXJlL1JlbmFtZUxvY2FsVmFyaWFibGVfYWZ0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9jaGFuZ2VTaWduYXR1cmVHZXN0dXJlL1JlbmFtZUxvY2FsVmFyaWFibGVfYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YTI1NzhkMTAKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvY2hhbmdlU2lnbmF0dXJlR2VzdHVyZS9SZW5hbWVMb2NhbFZhcmlhYmxlX2FmdGVyLmphdmEKQEAgLTAsMCArMSwyMCBAQAorLyoKKyAqIENvcHlyaWdodCAyMDAwLTIwMTAgSmV0QnJhaW5zIHMuci5vLgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KK3B1YmxpYyBjbGFzcyBUZXN0IHsKKyAgdm9pZCBmb28oKSB7CisgICAgaW50IG15MWkgPSAwOworICAgIGlmIChteTFpID4gMCkgeworICAgICAgU3lzdGVtLm91dC5wcmludGxuKG15MWkpOworICAgIH0KKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2NoYW5nZVNpZ25hdHVyZUdlc3R1cmUvUmV0dXJuVmFsdWUuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9jaGFuZ2VTaWduYXR1cmVHZXN0dXJlL1JldHVyblZhbHVlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2FkYzAwYQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9jaGFuZ2VTaWduYXR1cmVHZXN0dXJlL1JldHVyblZhbHVlLmphdmEKQEAgLTAsMCArMSw0IEBACitjbGFzcyBUZXN0IHsKKyAgcHJpdmF0ZSA8Y2FyZXQ+IGZvbygpIHsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9jaGFuZ2VTaWduYXR1cmVHZXN0dXJlL1NpbXBsZS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2NoYW5nZVNpZ25hdHVyZUdlc3R1cmUvU2ltcGxlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGIzMDdlYwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9jaGFuZ2VTaWduYXR1cmVHZXN0dXJlL1NpbXBsZS5qYXZhCkBAIC0wLDAgKzEsNiBAQAorY2xhc3MgVGVzdCB7CisgIHZvaWQgZm9vKGludCBpPGNhcmV0PikgeworICAgIFN5c3RlbS5vdXQucHJpbnRsbihpKTsKKyAgfQorICB2b2lkIGJhcigpe2ZvbygpO30KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvY2hhbmdlU2lnbmF0dXJlR2VzdHVyZS9TaW1wbGVfYWZ0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9jaGFuZ2VTaWduYXR1cmVHZXN0dXJlL1NpbXBsZV9hZnRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVjYmI3ZGIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvY2hhbmdlU2lnbmF0dXJlR2VzdHVyZS9TaW1wbGVfYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDYgQEAKK2NsYXNzIFRlc3QgeworICB2b2lkIGZvbyhpbnQgaXBhcmFtKSB7CisgICAgU3lzdGVtLm91dC5wcmludGxuKGlwYXJhbSk7CisgIH0KKyAgdm9pZCBiYXIoKXtmb28oKTt9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2NoYW5nZVNpZ25hdHVyZUdlc3R1cmUvU3BhY2VzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvY2hhbmdlU2lnbmF0dXJlR2VzdHVyZS9TcGFjZXMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MjRmNmRmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2NoYW5nZVNpZ25hdHVyZUdlc3R1cmUvU3BhY2VzLmphdmEKQEAgLTAsMCArMSw2IEBACitwdWJsaWMgY2xhc3MgVGVzdCB7CisgIHZvaWQgZm9vKDxjYXJldD4pe30KKyAgdm9pZCBiYXIoKSB7CisgICAgZm9vKCk7CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9jaGFuZ2VTaWduYXR1cmVQcm9wYWdhdGlvbi9FeGNlcHRpb25TaW1wbGUuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9jaGFuZ2VTaWduYXR1cmVQcm9wYWdhdGlvbi9FeGNlcHRpb25TaW1wbGUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YWM3NjAyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2NoYW5nZVNpZ25hdHVyZVByb3BhZ2F0aW9uL0V4Y2VwdGlvblNpbXBsZS5qYXZhCkBAIC0wLDAgKzEsMTIgQEAKK2NsYXNzIENoYW5nZVNpZ25hdHVyZVRlc3QgeworICAgIHZvaWQgPGNhcmV0PmZvbygpIHsKKyAgICB9CisKKyAgICB2b2lkIGJhcigpIHsKKyAgICAgIGZvbygpOworICAgIH0KKworICAgIHsKKyAgICAgICAgYmFyKCk7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9jaGFuZ2VTaWduYXR1cmVQcm9wYWdhdGlvbi9FeGNlcHRpb25TaW1wbGUuamF2YS5hZnRlciBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9jaGFuZ2VTaWduYXR1cmVQcm9wYWdhdGlvbi9FeGNlcHRpb25TaW1wbGUuamF2YS5hZnRlcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYzg2NzM4Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2NoYW5nZVNpZ25hdHVyZVByb3BhZ2F0aW9uL0V4Y2VwdGlvblNpbXBsZS5qYXZhLmFmdGVyCkBAIC0wLDAgKzEsMTYgQEAKK2NsYXNzIENoYW5nZVNpZ25hdHVyZVRlc3QgeworICAgIHZvaWQgZm9vKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgfQorCisgICAgdm9pZCBiYXIoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgIGZvbygpOworICAgIH0KKworICAgIHsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIGJhcigpOworICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsgIC8vVG8gY2hhbmdlIGJvZHkgb2YgY2F0Y2ggc3RhdGVtZW50IHVzZSBGaWxlIHwgU2V0dGluZ3MgfCBGaWxlIFRlbXBsYXRlcy4KKyAgICAgICAgfQorICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvY2hhbmdlU2lnbmF0dXJlUHJvcGFnYXRpb24vRXhjZXB0aW9uV2l0aEltcGxpY2l0Q29uc3RydWN0b3IuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9jaGFuZ2VTaWduYXR1cmVQcm9wYWdhdGlvbi9FeGNlcHRpb25XaXRoSW1wbGljaXRDb25zdHJ1Y3Rvci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZkOGZkMTIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvY2hhbmdlU2lnbmF0dXJlUHJvcGFnYXRpb24vRXhjZXB0aW9uV2l0aEltcGxpY2l0Q29uc3RydWN0b3IuamF2YQpAQCAtMCwwICsxLDkgQEAKK3B1YmxpYyBjbGFzcyBQIHsKKyAgcHVibGljIFA8Y2FyZXQ+KCkgeworICB9Cit9CisKK2NsYXNzIFBQIGV4dGVuZHMgUCB7CisgIHB1YmxpYyBQUCgpeworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2NoYW5nZVNpZ25hdHVyZVByb3BhZ2F0aW9uL0V4Y2VwdGlvbldpdGhJbXBsaWNpdENvbnN0cnVjdG9yLmphdmEuYWZ0ZXIgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvY2hhbmdlU2lnbmF0dXJlUHJvcGFnYXRpb24vRXhjZXB0aW9uV2l0aEltcGxpY2l0Q29uc3RydWN0b3IuamF2YS5hZnRlcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMTlkYmI0Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2NoYW5nZVNpZ25hdHVyZVByb3BhZ2F0aW9uL0V4Y2VwdGlvbldpdGhJbXBsaWNpdENvbnN0cnVjdG9yLmphdmEuYWZ0ZXIKQEAgLTAsMCArMSwxMCBAQAorcHVibGljIGNsYXNzIFAgeworICBwdWJsaWMgUCgpIHRocm93cyBFeGNlcHRpb24geworICB9Cit9CisKK2NsYXNzIFBQIGV4dGVuZHMgUCB7CisgIHB1YmxpYyBQUCgpIHRocm93cyBFeGNlcHRpb24geworICAgICAgc3VwZXIoKTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9jaGFuZ2VTaWduYXR1cmVQcm9wYWdhdGlvbi9FeGNlcHRpb25XaXRoTm9Db25zdHJ1Y3Rvci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2NoYW5nZVNpZ25hdHVyZVByb3BhZ2F0aW9uL0V4Y2VwdGlvbldpdGhOb0NvbnN0cnVjdG9yLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTc5Y2Q1NgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9jaGFuZ2VTaWduYXR1cmVQcm9wYWdhdGlvbi9FeGNlcHRpb25XaXRoTm9Db25zdHJ1Y3Rvci5qYXZhCkBAIC0wLDAgKzEsNyBAQAorcHVibGljIGNsYXNzIFAgeworICBwdWJsaWMgUDxjYXJldD4oKSB7CisgIH0KK30KKworY2xhc3MgUFAgZXh0ZW5kcyBQIHsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvY2hhbmdlU2lnbmF0dXJlUHJvcGFnYXRpb24vRXhjZXB0aW9uV2l0aE5vQ29uc3RydWN0b3IuamF2YS5hZnRlciBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9jaGFuZ2VTaWduYXR1cmVQcm9wYWdhdGlvbi9FeGNlcHRpb25XaXRoTm9Db25zdHJ1Y3Rvci5qYXZhLmFmdGVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM1ZDg0MmYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvY2hhbmdlU2lnbmF0dXJlUHJvcGFnYXRpb24vRXhjZXB0aW9uV2l0aE5vQ29uc3RydWN0b3IuamF2YS5hZnRlcgpAQCAtMCwwICsxLDEwIEBACitwdWJsaWMgY2xhc3MgUCB7CisgIHB1YmxpYyBQKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgIH0KK30KKworY2xhc3MgUFAgZXh0ZW5kcyBQIHsKKyAgICBQUCgpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICBzdXBlcigpOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvY2hhbmdlU2lnbmF0dXJlUHJvcGFnYXRpb24vRXhjZXB0aW9uV2l0aE92ZXJyaWRpbmcuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9jaGFuZ2VTaWduYXR1cmVQcm9wYWdhdGlvbi9FeGNlcHRpb25XaXRoT3ZlcnJpZGluZy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJmM2ZiMmYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvY2hhbmdlU2lnbmF0dXJlUHJvcGFnYXRpb24vRXhjZXB0aW9uV2l0aE92ZXJyaWRpbmcuamF2YQpAQCAtMCwwICsxLDE4IEBACitjbGFzcyBDaGFuZ2VTaWduYXR1cmVUZXN0IHsKKyAgICB2b2lkIDxjYXJldD5mb28oKSB7CisgICAgfQorCisgICAgdm9pZCBiYXIoKSB7CisgICAgICBmb28oKTsKKyAgICB9CisKKyAgICB7CisgICAgICAgIGJhcigpOworICAgIH0KK30KKworY2xhc3MgRGVyaXZlZCBleHRlbmRzIENoYW5nZVNpZ25hdHVyZVRlc3QgeworICB2b2lkIGJhciAoKSB7CisgICAgc3VwZXIuYmFyKCk7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvY2hhbmdlU2lnbmF0dXJlUHJvcGFnYXRpb24vRXhjZXB0aW9uV2l0aE92ZXJyaWRpbmcuamF2YS5hZnRlciBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9jaGFuZ2VTaWduYXR1cmVQcm9wYWdhdGlvbi9FeGNlcHRpb25XaXRoT3ZlcnJpZGluZy5qYXZhLmFmdGVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJiMzNlMjQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvY2hhbmdlU2lnbmF0dXJlUHJvcGFnYXRpb24vRXhjZXB0aW9uV2l0aE92ZXJyaWRpbmcuamF2YS5hZnRlcgpAQCAtMCwwICsxLDIyIEBACitjbGFzcyBDaGFuZ2VTaWduYXR1cmVUZXN0IHsKKyAgICB2b2lkIGZvbygpIHRocm93cyBFeGNlcHRpb24geworICAgIH0KKworICAgIHZvaWQgYmFyKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICBmb28oKTsKKyAgICB9CisKKyAgICB7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBiYXIoKTsKKyAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7ICAvL1RvIGNoYW5nZSBib2R5IG9mIGNhdGNoIHN0YXRlbWVudCB1c2UgRmlsZSB8IFNldHRpbmdzIHwgRmlsZSBUZW1wbGF0ZXMuCisgICAgICAgIH0KKyAgICB9Cit9CisKK2NsYXNzIERlcml2ZWQgZXh0ZW5kcyBDaGFuZ2VTaWduYXR1cmVUZXN0IHsKKyAgdm9pZCBiYXIgKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgc3VwZXIuYmFyKCk7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvY2hhbmdlU2lnbmF0dXJlUHJvcGFnYXRpb24vUGFyYW1TaW1wbGUuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9jaGFuZ2VTaWduYXR1cmVQcm9wYWdhdGlvbi9QYXJhbVNpbXBsZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM1ZjBmY2QKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvY2hhbmdlU2lnbmF0dXJlUHJvcGFnYXRpb24vUGFyYW1TaW1wbGUuamF2YQpAQCAtMCwwICsxLDEyIEBACitjbGFzcyBDaGFuZ2VTaWduYXR1cmVUZXN0IHsKKyAgICBwdWJsaWMgPGNhcmV0PkNoYW5nZVNpZ25hdHVyZVRlc3QoKSB7CisgICAgfQorCisgICAgdm9pZCBmb28oKSB7CisgICAgICAgIG5ldyBDaGFuZ2VTaWduYXR1cmVUZXN0KCk7CisgICAgfQorCisgICAgeworICAgICAgZm9vKCk7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2NoYW5nZVNpZ25hdHVyZVByb3BhZ2F0aW9uL1BhcmFtU2ltcGxlLmphdmEuYWZ0ZXIgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvY2hhbmdlU2lnbmF0dXJlUHJvcGFnYXRpb24vUGFyYW1TaW1wbGUuamF2YS5hZnRlcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNTZjOTQ1Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2NoYW5nZVNpZ25hdHVyZVByb3BhZ2F0aW9uL1BhcmFtU2ltcGxlLmphdmEuYWZ0ZXIKQEAgLTAsMCArMSwxMiBAQAorY2xhc3MgQ2hhbmdlU2lnbmF0dXJlVGVzdCB7CisgICAgcHVibGljIENoYW5nZVNpZ25hdHVyZVRlc3QoQ2xhc3MgY2xhenopIHsKKyAgICB9CisKKyAgICB2b2lkIGZvbyhDbGFzcyBjbGF6eikgeworICAgICAgICBuZXcgQ2hhbmdlU2lnbmF0dXJlVGVzdChjbGF6eik7CisgICAgfQorCisgICAgeworICAgICAgZm9vKG51bGwpOworICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9jaGFuZ2VTaWduYXR1cmVQcm9wYWdhdGlvbi9QYXJhbVR5cGVTdWJzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2NoYW5nZVNpZ25hdHVyZVByb3BhZ2F0aW9uL1BhcmFtVHlwZVN1YnN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzc0ZjNjY2MKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvY2hhbmdlU2lnbmF0dXJlUHJvcGFnYXRpb24vUGFyYW1UeXBlU3Vic3QuamF2YQpAQCAtMCwwICsxLDEwIEBACitjbGFzcyBCYXNlPFQ+IHsKKyAgdm9pZCBtPGNhcmV0PigpIHsKKyAgfQorfQorCitjbGFzcyBBIGV4dGVuZHMgQmFzZTxTdHJpbmc+IHsKKyAgdm9pZCB4KCkgeworICAgIG0oKTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9jaGFuZ2VTaWduYXR1cmVQcm9wYWdhdGlvbi9QYXJhbVR5cGVTdWJzdC5qYXZhLmFmdGVyIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2NoYW5nZVNpZ25hdHVyZVByb3BhZ2F0aW9uL1BhcmFtVHlwZVN1YnN0LmphdmEuYWZ0ZXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDcwNjk4YQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9jaGFuZ2VTaWduYXR1cmVQcm9wYWdhdGlvbi9QYXJhbVR5cGVTdWJzdC5qYXZhLmFmdGVyCkBAIC0wLDAgKzEsMTAgQEAKK2NsYXNzIEJhc2U8VD4geworICB2b2lkIG0oVCBjbGF6eikgeworICB9Cit9CisKK2NsYXNzIEEgZXh0ZW5kcyBCYXNlPFN0cmluZz4geworICB2b2lkIHgoU3RyaW5nIGNsYXp6KSB7CisgICAgbShjbGF6eik7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvY2hhbmdlU2lnbmF0dXJlUHJvcGFnYXRpb24vUGFyYW1XaXRoSW1wbGljaXRDb25zdHJ1Y3Rvci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2NoYW5nZVNpZ25hdHVyZVByb3BhZ2F0aW9uL1BhcmFtV2l0aEltcGxpY2l0Q29uc3RydWN0b3IuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZDhmZDEyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2NoYW5nZVNpZ25hdHVyZVByb3BhZ2F0aW9uL1BhcmFtV2l0aEltcGxpY2l0Q29uc3RydWN0b3IuamF2YQpAQCAtMCwwICsxLDkgQEAKK3B1YmxpYyBjbGFzcyBQIHsKKyAgcHVibGljIFA8Y2FyZXQ+KCkgeworICB9Cit9CisKK2NsYXNzIFBQIGV4dGVuZHMgUCB7CisgIHB1YmxpYyBQUCgpeworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2NoYW5nZVNpZ25hdHVyZVByb3BhZ2F0aW9uL1BhcmFtV2l0aEltcGxpY2l0Q29uc3RydWN0b3IuamF2YS5hZnRlciBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9jaGFuZ2VTaWduYXR1cmVQcm9wYWdhdGlvbi9QYXJhbVdpdGhJbXBsaWNpdENvbnN0cnVjdG9yLmphdmEuYWZ0ZXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjFkYjQxMQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9jaGFuZ2VTaWduYXR1cmVQcm9wYWdhdGlvbi9QYXJhbVdpdGhJbXBsaWNpdENvbnN0cnVjdG9yLmphdmEuYWZ0ZXIKQEAgLTAsMCArMSwxMCBAQAorcHVibGljIGNsYXNzIFAgeworICBwdWJsaWMgUChDbGFzcyBjbGF6eikgeworICB9Cit9CisKK2NsYXNzIFBQIGV4dGVuZHMgUCB7CisgIHB1YmxpYyBQUChDbGFzcyBjbGF6eil7CisgICAgICBzdXBlcihjbGF6eik7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvY2hhbmdlU2lnbmF0dXJlUHJvcGFnYXRpb24vUGFyYW1XaXRoSW1wbGljaXRDb25zdHJ1Y3RvcnMuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9jaGFuZ2VTaWduYXR1cmVQcm9wYWdhdGlvbi9QYXJhbVdpdGhJbXBsaWNpdENvbnN0cnVjdG9ycy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc3YjUyMzYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvY2hhbmdlU2lnbmF0dXJlUHJvcGFnYXRpb24vUGFyYW1XaXRoSW1wbGljaXRDb25zdHJ1Y3RvcnMuamF2YQpAQCAtMCwwICsxLDE0IEBACitwdWJsaWMgY2xhc3MgUCB7CisgIHB1YmxpYyBQPGNhcmV0PigpIHsKKyAgfQorfQorCitjbGFzcyBQUCBleHRlbmRzIFAgeworICBwdWJsaWMgUFAoKXsKKyAgfQorfQorCitjbGFzcyBQUFAgZXh0ZW5kcyBQIHsKKyAgcHVibGljIFBQUCgpeworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2NoYW5nZVNpZ25hdHVyZVByb3BhZ2F0aW9uL1BhcmFtV2l0aEltcGxpY2l0Q29uc3RydWN0b3JzLmphdmEuYWZ0ZXIgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvY2hhbmdlU2lnbmF0dXJlUHJvcGFnYXRpb24vUGFyYW1XaXRoSW1wbGljaXRDb25zdHJ1Y3RvcnMuamF2YS5hZnRlcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40N2ZkNDQwCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2NoYW5nZVNpZ25hdHVyZVByb3BhZ2F0aW9uL1BhcmFtV2l0aEltcGxpY2l0Q29uc3RydWN0b3JzLmphdmEuYWZ0ZXIKQEAgLTAsMCArMSwxNiBAQAorcHVibGljIGNsYXNzIFAgeworICBwdWJsaWMgUChDbGFzcyBjbGF6eikgeworICB9Cit9CisKK2NsYXNzIFBQIGV4dGVuZHMgUCB7CisgIHB1YmxpYyBQUChDbGFzcyBjbGF6eil7CisgICAgICBzdXBlcihjbGF6eik7CisgIH0KK30KKworY2xhc3MgUFBQIGV4dGVuZHMgUCB7CisgIHB1YmxpYyBQUFAoQ2xhc3MgY2xhenopeworICAgICAgc3VwZXIoY2xhenopOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2NoYW5nZVNpZ25hdHVyZVByb3BhZ2F0aW9uL1BhcmFtV2l0aE5vQ29uc3RydWN0b3IuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9jaGFuZ2VTaWduYXR1cmVQcm9wYWdhdGlvbi9QYXJhbVdpdGhOb0NvbnN0cnVjdG9yLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTc5Y2Q1NgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9jaGFuZ2VTaWduYXR1cmVQcm9wYWdhdGlvbi9QYXJhbVdpdGhOb0NvbnN0cnVjdG9yLmphdmEKQEAgLTAsMCArMSw3IEBACitwdWJsaWMgY2xhc3MgUCB7CisgIHB1YmxpYyBQPGNhcmV0PigpIHsKKyAgfQorfQorCitjbGFzcyBQUCBleHRlbmRzIFAgeworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9jaGFuZ2VTaWduYXR1cmVQcm9wYWdhdGlvbi9QYXJhbVdpdGhOb0NvbnN0cnVjdG9yLmphdmEuYWZ0ZXIgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvY2hhbmdlU2lnbmF0dXJlUHJvcGFnYXRpb24vUGFyYW1XaXRoTm9Db25zdHJ1Y3Rvci5qYXZhLmFmdGVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUxZTJmMGEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvY2hhbmdlU2lnbmF0dXJlUHJvcGFnYXRpb24vUGFyYW1XaXRoTm9Db25zdHJ1Y3Rvci5qYXZhLmFmdGVyCkBAIC0wLDAgKzEsMTAgQEAKK3B1YmxpYyBjbGFzcyBQIHsKKyAgcHVibGljIFAoQ2xhc3MgY2xhenopIHsKKyAgfQorfQorCitjbGFzcyBQUCBleHRlbmRzIFAgeworICAgIFBQKENsYXNzIGNsYXp6KSB7CisgICAgICAgIHN1cGVyKGNsYXp6KTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2NoYW5nZVNpZ25hdHVyZVByb3BhZ2F0aW9uL1BhcmFtV2l0aE92ZXJyaWRpbmcuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9jaGFuZ2VTaWduYXR1cmVQcm9wYWdhdGlvbi9QYXJhbVdpdGhPdmVycmlkaW5nLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmVhODlkNwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9jaGFuZ2VTaWduYXR1cmVQcm9wYWdhdGlvbi9QYXJhbVdpdGhPdmVycmlkaW5nLmphdmEKQEAgLTAsMCArMSwxNiBAQAorY2xhc3MgQ2hhbmdlU2lnbmF0dXJlVGVzdCB7CisgICAgcHVibGljIDxjYXJldD5DaGFuZ2VTaWduYXR1cmVUZXN0KCkgeworICAgIH0KKworICAgIHZvaWQgZm9vKCkgeworICAgICAgICBuZXcgQ2hhbmdlU2lnbmF0dXJlVGVzdCgpOworICAgIH0KKworICAgIHsKKyAgICAgIGZvbygpOworICAgIH0KK30KKworY2xhc3MgRGVyaXZlZCBleHRlbmRzIENoYW5nZVNpZ25hdHVyZVRlc3QgeworICB2b2lkIGZvbyAoKSB7fQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9jaGFuZ2VTaWduYXR1cmVQcm9wYWdhdGlvbi9QYXJhbVdpdGhPdmVycmlkaW5nLmphdmEuYWZ0ZXIgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvY2hhbmdlU2lnbmF0dXJlUHJvcGFnYXRpb24vUGFyYW1XaXRoT3ZlcnJpZGluZy5qYXZhLmFmdGVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA4N2ViM2EKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvY2hhbmdlU2lnbmF0dXJlUHJvcGFnYXRpb24vUGFyYW1XaXRoT3ZlcnJpZGluZy5qYXZhLmFmdGVyCkBAIC0wLDAgKzEsMjAgQEAKK2NsYXNzIENoYW5nZVNpZ25hdHVyZVRlc3QgeworICAgIHB1YmxpYyBDaGFuZ2VTaWduYXR1cmVUZXN0KENsYXNzIGNsYXp6KSB7CisgICAgfQorCisgICAgdm9pZCBmb28oQ2xhc3MgY2xhenopIHsKKyAgICAgICAgbmV3IENoYW5nZVNpZ25hdHVyZVRlc3QoY2xhenopOworICAgIH0KKworICAgIHsKKyAgICAgIGZvbyhudWxsKTsKKyAgICB9Cit9CisKK2NsYXNzIERlcml2ZWQgZXh0ZW5kcyBDaGFuZ2VTaWduYXR1cmVUZXN0IHsKKyAgICBEZXJpdmVkKCkgeworICAgICAgICBzdXBlcihudWxsKTsKKyAgICB9CisKKyAgICB2b2lkIGZvbyhDbGFzcyBjbGF6eikge30KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvY2hhbmdlU2lnbmF0dXJlVGFyZ2V0L2luQ2xhc3NUeXBlUGFyYW1ldGVycy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2NoYW5nZVNpZ25hdHVyZVRhcmdldC9pbkNsYXNzVHlwZVBhcmFtZXRlcnMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZDgxNmJmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2NoYW5nZVNpZ25hdHVyZVRhcmdldC9pbkNsYXNzVHlwZVBhcmFtZXRlcnMuamF2YQpAQCAtMCwwICsxLDMgQEAKK2ltcG9ydCBqYXZhLnV0aWwuKjsKK2NsYXNzIEExPDxjYXJldD5UPiB7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2NoYW5nZVNpZ25hdHVyZVRhcmdldC9pbk1ldGhvZEFyZ3VtZW50cy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2NoYW5nZVNpZ25hdHVyZVRhcmdldC9pbk1ldGhvZEFyZ3VtZW50cy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdiNTZlNWQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvY2hhbmdlU2lnbmF0dXJlVGFyZ2V0L2luTWV0aG9kQXJndW1lbnRzLmphdmEKQEAgLTAsMCArMSwxMiBAQAoraW1wb3J0IGphdmEudXRpbC4qOworY2xhc3MgQnsKKworICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKyAgICAgIEIgYiA9IG51bGw7CisgICAgICBiLmJhcihiLjxTdHI8Y2FyZXQ+aW5nPmZvbygiIiwgIiIpKTsKKyAgICB9CisKKyAgICA8VD4gU3RyaW5nIGZvbyhUIHQsIFN0cmluZyBzKXtyZXR1cm4gbnVsbDt9CisgICAgU3RyaW5nICBiYXIoU3RyaW5nIHMpIHtyZXR1cm4gbnVsbDt9CisKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvY2hhbmdlU2lnbmF0dXJlVGFyZ2V0L2luTWV0aG9kUGFyYW1ldGVycy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2NoYW5nZVNpZ25hdHVyZVRhcmdldC9pbk1ldGhvZFBhcmFtZXRlcnMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNjYzMzNiCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2NoYW5nZVNpZ25hdHVyZVRhcmdldC9pbk1ldGhvZFBhcmFtZXRlcnMuamF2YQpAQCAtMCwwICsxLDQgQEAKK2ltcG9ydCBqYXZhLnV0aWwuKjsKK2NsYXNzIEIgeworICAgIDxUPiBTdHJpbmcgIGZvbyhUIHQsIFN0PGNhcmV0PnJpbmcgcyl7cmV0dXJuIG51bGw7fQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9jaGFuZ2VTaWduYXR1cmVUYXJnZXQvaW5UeXBlQXJndW1lbnRzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvY2hhbmdlU2lnbmF0dXJlVGFyZ2V0L2luVHlwZUFyZ3VtZW50cy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI3MzMyY2UKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvY2hhbmdlU2lnbmF0dXJlVGFyZ2V0L2luVHlwZUFyZ3VtZW50cy5qYXZhCkBAIC0wLDAgKzEsMjQgQEAKK2NsYXNzIEExPFQ+IHsKKyAgQTEoKXt9CisKKyAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworCisgICAgQ2FsbGFibGU8T2JqZWN0PiBjYWxsYWJsZSA9IG5ldyBDYWxsYWJsZTxPYmplY3Q+KCkgeworICAgICAgcHVibGljIE9iamVjdCBjYWxsKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIHJldHVybiBuZXcgQTE8U3RyPGNhcmV0PmluZz4oKS50b1N0cmluZygpOworCisgICAgICB9CisgICAgfTsKKyAgICBCIGIgPSBudWxsOworICAgIGIuYmFyKGIuPFN0cmluZz5mb28oIiIsICIiKSk7CisgIH0KKworCisgIDxUPiBTdHJpbmcgZm9vKFQgdCwgU3RyaW5nIHMpIHsKKyAgICByZXR1cm4gbnVsbDsKKyAgfQorCisgIFN0cmluZyBiYXIoU3RyaW5nIHMpIHsKKyAgICByZXR1cm4gbnVsbDsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9jb252ZXJ0VG9JbnN0YW5jZU1ldGhvZC9JbnRlcmZhY2UuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9jb252ZXJ0VG9JbnN0YW5jZU1ldGhvZC9JbnRlcmZhY2UuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wN2Y0NWFlCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2NvbnZlcnRUb0luc3RhbmNlTWV0aG9kL0ludGVyZmFjZS5qYXZhCkBAIC0wLDAgKzEsMjIgQEAKK2ludGVyZmFjZSBJIHsKK30KKworaW50ZXJmYWNlIEogZXh0ZW5kcyBJIHsKK30KKworY2xhc3MgSUltcGwgaW1wbGVtZW50cyBJIHsKK30KKworY2xhc3MgSkltcGwgaW1wbGVtZW50cyBKIHsKK30KKworY2xhc3MgWCB7CisgICAgc3RhdGljIHZvaWQgPGNhcmV0Pm1ldGhvZChpbnQgaSwgSSBpbnRmKSB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiaSA9ICIgKyBpICsgIiwgaW50ZiA9ICIgKyBpbnRmKTsKKyAgICB9CisKKyAgICB7CisgICAgICAgIEogaiA9IG5ldyBKSW1wbCgpOworICAgICAgICBtZXRob2QoMCwgaik7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9jb252ZXJ0VG9JbnN0YW5jZU1ldGhvZC9JbnRlcmZhY2UuamF2YS5hZnRlciBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9jb252ZXJ0VG9JbnN0YW5jZU1ldGhvZC9JbnRlcmZhY2UuamF2YS5hZnRlcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NWU1NmU4Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2NvbnZlcnRUb0luc3RhbmNlTWV0aG9kL0ludGVyZmFjZS5qYXZhLmFmdGVyCkBAIC0wLDAgKzEsMjYgQEAKK2ludGVyZmFjZSBJIHsKKyAgICB2b2lkIG1ldGhvZChpbnQgaSk7Cit9CisKK2ludGVyZmFjZSBKIGV4dGVuZHMgSSB7Cit9CisKK2NsYXNzIElJbXBsIGltcGxlbWVudHMgSSB7CisgICAgcHVibGljIHZvaWQgbWV0aG9kKGludCBpKSB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiaSA9ICIgKyBpICsgIiwgaW50ZiA9ICIgKyB0aGlzKTsKKyAgICB9Cit9CisKK2NsYXNzIEpJbXBsIGltcGxlbWVudHMgSiB7CisgICAgcHVibGljIHZvaWQgbWV0aG9kKGludCBpKSB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiaSA9ICIgKyBpICsgIiwgaW50ZiA9ICIgKyB0aGlzKTsKKyAgICB9Cit9CisKK2NsYXNzIFggeworCisgICAgeworICAgICAgICBKIGogPSBuZXcgSkltcGwoKTsKKyAgICAgICAgai5tZXRob2QoMCk7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9jb252ZXJ0VG9JbnN0YW5jZU1ldGhvZC9JbnRlcmZhY2UyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvY29udmVydFRvSW5zdGFuY2VNZXRob2QvSW50ZXJmYWNlMi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE5MTViODgKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvY29udmVydFRvSW5zdGFuY2VNZXRob2QvSW50ZXJmYWNlMi5qYXZhCkBAIC0wLDAgKzEsMTYgQEAKK2ludGVyZmFjZSBJIHsKK30KKworY2xhc3MgQyBpbXBsZW1lbnRzIEkgeworfQorCitpbnRlcmZhY2UgSiBleHRlbmRzIEkgeworfQorCitjbGFzcyBEIGV4dGVuZHMgQyBpbXBsZW1lbnRzIEogeworfQorCitjbGFzcyBYIHsKKyAgICBzdGF0aWMgdm9pZCA8Y2FyZXQ+bShJIGkpIHsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2NvbnZlcnRUb0luc3RhbmNlTWV0aG9kL0ludGVyZmFjZTIuamF2YS5hZnRlciBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9jb252ZXJ0VG9JbnN0YW5jZU1ldGhvZC9JbnRlcmZhY2UyLmphdmEuYWZ0ZXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTQwZTc4YgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9jb252ZXJ0VG9JbnN0YW5jZU1ldGhvZC9JbnRlcmZhY2UyLmphdmEuYWZ0ZXIKQEAgLTAsMCArMSwxNyBAQAoraW50ZXJmYWNlIEkgeworICAgIHZvaWQgbSgpOworfQorCitjbGFzcyBDIGltcGxlbWVudHMgSSB7CisgICAgcHVibGljIHZvaWQgbSgpIHsKKyAgICB9Cit9CisKK2ludGVyZmFjZSBKIGV4dGVuZHMgSSB7Cit9CisKK2NsYXNzIEQgZXh0ZW5kcyBDIGltcGxlbWVudHMgSiB7Cit9CisKK2NsYXNzIFggeworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9jb252ZXJ0VG9JbnN0YW5jZU1ldGhvZC9JbnRlcmZhY2UzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvY29udmVydFRvSW5zdGFuY2VNZXRob2QvSW50ZXJmYWNlMy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg4ZDdhMzIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvY29udmVydFRvSW5zdGFuY2VNZXRob2QvSW50ZXJmYWNlMy5qYXZhCkBAIC0wLDAgKzEsMzcgQEAKK2ludGVyZmFjZSBQc2lBbnRFbGVtZW50IHsKK30KKworaW50ZXJmYWNlIEFudEVsZW1lbnQgZXh0ZW5kcyBQc2lBbnRFbGVtZW50IHsKK30KKworY2xhc3MgQW50RWxlbWVudEltcGwgaW1wbGVtZW50cyBBbnRFbGVtZW50IHsKK30KKworaW50ZXJmYWNlIEFudE5hbWVJZGVudGlmaWVyIGV4dGVuZHMgQW50RWxlbWVudCB7Cit9CisKK2NsYXNzIEFudE5hbWVJZGVudGlmaWVySW1wbCBleHRlbmRzIEFudEVsZW1lbnRJbXBsIGltcGxlbWVudHMgQW50TmFtZUlkZW50aWZpZXIgeworfQorCitpbnRlcmZhY2UgQW50U3RydWN0dXJlZEVsZW1lbnQgZXh0ZW5kcyBBbnRFbGVtZW50IHsKK30KKworY2xhc3MgQW50U3RydWN0dXJlZEVsZW1lbnRJbXBsIGV4dGVuZHMgQW50RWxlbWVudEltcGwgaW1wbGVtZW50cyBBbnRTdHJ1Y3R1cmVkRWxlbWVudCB7Cit9CisKK2ludGVyZmFjZSBBbnRUYXNrIGV4dGVuZHMgQW50U3RydWN0dXJlZEVsZW1lbnQgeworfQorCitjbGFzcyBBbnRUYXNrSW1wbCBleHRlbmRzIEFudFN0cnVjdHVyZWRFbGVtZW50SW1wbCBpbXBsZW1lbnRzIEFudFRhc2sgeworfQorCitpbnRlcmZhY2UgQW50TWFjcm9EZWYgZXh0ZW5kcyBBbnRUYXNrIHsKK30KKworY2xhc3MgQW50TWFjcm9EZWZJbXBsIGV4dGVuZHMgQW50VGFza0ltcGwgaW1wbGVtZW50cyBBbnRNYWNyb0RlZiB7Cit9CisKK2NsYXNzIFggeworICAgIHN0YXRpYyB2b2lkIDxjYXJldD5tKFBzaUFudEVsZW1lbnQgaSkgeworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvY29udmVydFRvSW5zdGFuY2VNZXRob2QvSW50ZXJmYWNlMy5qYXZhLmFmdGVyIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2NvbnZlcnRUb0luc3RhbmNlTWV0aG9kL0ludGVyZmFjZTMuamF2YS5hZnRlcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZWY1OTNhCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2NvbnZlcnRUb0luc3RhbmNlTWV0aG9kL0ludGVyZmFjZTMuamF2YS5hZnRlcgpAQCAtMCwwICsxLDM4IEBACitpbnRlcmZhY2UgUHNpQW50RWxlbWVudCB7CisgICAgdm9pZCBtKCk7Cit9CisKK2ludGVyZmFjZSBBbnRFbGVtZW50IGV4dGVuZHMgUHNpQW50RWxlbWVudCB7Cit9CisKK2NsYXNzIEFudEVsZW1lbnRJbXBsIGltcGxlbWVudHMgQW50RWxlbWVudCB7CisgICAgcHVibGljIHZvaWQgbSgpIHsKKyAgICB9Cit9CisKK2ludGVyZmFjZSBBbnROYW1lSWRlbnRpZmllciBleHRlbmRzIEFudEVsZW1lbnQgeworfQorCitjbGFzcyBBbnROYW1lSWRlbnRpZmllckltcGwgZXh0ZW5kcyBBbnRFbGVtZW50SW1wbCBpbXBsZW1lbnRzIEFudE5hbWVJZGVudGlmaWVyIHsKK30KKworaW50ZXJmYWNlIEFudFN0cnVjdHVyZWRFbGVtZW50IGV4dGVuZHMgQW50RWxlbWVudCB7Cit9CisKK2NsYXNzIEFudFN0cnVjdHVyZWRFbGVtZW50SW1wbCBleHRlbmRzIEFudEVsZW1lbnRJbXBsIGltcGxlbWVudHMgQW50U3RydWN0dXJlZEVsZW1lbnQgeworfQorCitpbnRlcmZhY2UgQW50VGFzayBleHRlbmRzIEFudFN0cnVjdHVyZWRFbGVtZW50IHsKK30KKworY2xhc3MgQW50VGFza0ltcGwgZXh0ZW5kcyBBbnRTdHJ1Y3R1cmVkRWxlbWVudEltcGwgaW1wbGVtZW50cyBBbnRUYXNrIHsKK30KKworaW50ZXJmYWNlIEFudE1hY3JvRGVmIGV4dGVuZHMgQW50VGFzayB7Cit9CisKK2NsYXNzIEFudE1hY3JvRGVmSW1wbCBleHRlbmRzIEFudFRhc2tJbXBsIGltcGxlbWVudHMgQW50TWFjcm9EZWYgeworfQorCitjbGFzcyBYIHsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvY29udmVydFRvSW5zdGFuY2VNZXRob2QvSW50ZXJmYWNlUHJpdmF0ZS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2NvbnZlcnRUb0luc3RhbmNlTWV0aG9kL0ludGVyZmFjZVByaXZhdGUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YzI0N2Y2Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2NvbnZlcnRUb0luc3RhbmNlTWV0aG9kL0ludGVyZmFjZVByaXZhdGUuamF2YQpAQCAtMCwwICsxLDIyIEBACitpbnRlcmZhY2UgSSB7Cit9CisKK2ludGVyZmFjZSBKIGV4dGVuZHMgSSB7Cit9CisKK2NsYXNzIElJbXBsIGltcGxlbWVudHMgSSB7Cit9CisKK2NsYXNzIEpJbXBsIGltcGxlbWVudHMgSiB7Cit9CisKK2NsYXNzIFggeworICAgIHByaXZhdGUgc3RhdGljIHZvaWQgPGNhcmV0Pm1ldGhvZChpbnQgaSwgSSBpbnRmKSB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiaSA9ICIgKyBpICsgIiwgaW50ZiA9ICIgKyBpbnRmKTsKKyAgICB9CisKKyAgICB7CisgICAgICAgIEogaiA9IG5ldyBKSW1wbCgpOworICAgICAgICBtZXRob2QoMCwgaik7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9jb252ZXJ0VG9JbnN0YW5jZU1ldGhvZC9JbnRlcmZhY2VQcml2YXRlLmphdmEuYWZ0ZXIgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvY29udmVydFRvSW5zdGFuY2VNZXRob2QvSW50ZXJmYWNlUHJpdmF0ZS5qYXZhLmFmdGVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU1ZTU2ZTgKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvY29udmVydFRvSW5zdGFuY2VNZXRob2QvSW50ZXJmYWNlUHJpdmF0ZS5qYXZhLmFmdGVyCkBAIC0wLDAgKzEsMjYgQEAKK2ludGVyZmFjZSBJIHsKKyAgICB2b2lkIG1ldGhvZChpbnQgaSk7Cit9CisKK2ludGVyZmFjZSBKIGV4dGVuZHMgSSB7Cit9CisKK2NsYXNzIElJbXBsIGltcGxlbWVudHMgSSB7CisgICAgcHVibGljIHZvaWQgbWV0aG9kKGludCBpKSB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiaSA9ICIgKyBpICsgIiwgaW50ZiA9ICIgKyB0aGlzKTsKKyAgICB9Cit9CisKK2NsYXNzIEpJbXBsIGltcGxlbWVudHMgSiB7CisgICAgcHVibGljIHZvaWQgbWV0aG9kKGludCBpKSB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiaSA9ICIgKyBpICsgIiwgaW50ZiA9ICIgKyB0aGlzKTsKKyAgICB9Cit9CisKK2NsYXNzIFggeworCisgICAgeworICAgICAgICBKIGogPSBuZXcgSkltcGwoKTsKKyAgICAgICAgai5tZXRob2QoMCk7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9jb252ZXJ0VG9JbnN0YW5jZU1ldGhvZC9JbnRlcmZhY2VUeXBlUGFyYW1ldGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvY29udmVydFRvSW5zdGFuY2VNZXRob2QvSW50ZXJmYWNlVHlwZVBhcmFtZXRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMyMmFmNTcKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvY29udmVydFRvSW5zdGFuY2VNZXRob2QvSW50ZXJmYWNlVHlwZVBhcmFtZXRlci5qYXZhCkBAIC0wLDAgKzEsMTMgQEAKK2ludGVyZmFjZSBJbnRmPFQ+IHsKKyAgICBUIGdldCgpOworfQorCitjbGFzcyBJbXBsPFY+IGltcGxlbWVudHMgSW50ZjxWPiB7Cit9CisKK2NsYXNzIFggeworICAgIHN0YXRpYyA8VT4gWDxVPiA8Y2FyZXQ+bWV0aG9kKEludGY8VT4gcCwgVSB2YWx1ZSkgeworICAgICAgICBVIHYgPSBwLmdldCgpOworICAgICAgICByZXR1cm4gbmV3IFg8VT4odix2YWx1ZSk7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9jb252ZXJ0VG9JbnN0YW5jZU1ldGhvZC9JbnRlcmZhY2VUeXBlUGFyYW1ldGVyLmphdmEuYWZ0ZXIgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvY29udmVydFRvSW5zdGFuY2VNZXRob2QvSW50ZXJmYWNlVHlwZVBhcmFtZXRlci5qYXZhLmFmdGVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhkMTlkODkxCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2NvbnZlcnRUb0luc3RhbmNlTWV0aG9kL0ludGVyZmFjZVR5cGVQYXJhbWV0ZXIuamF2YS5hZnRlcgpAQCAtMCwwICsxLDE1IEBACitpbnRlcmZhY2UgSW50ZjxUPiB7CisgICAgWDxUPiBtZXRob2QoVCB2YWx1ZSk7CisKKyAgICBUIGdldCgpOworfQorCitjbGFzcyBJbXBsPFY+IGltcGxlbWVudHMgSW50ZjxWPiB7CisgICAgcHVibGljIFg8Vj4gbWV0aG9kKFYgdmFsdWUpIHsKKyAgICAgICAgViB2ID0gZ2V0KCk7CisgICAgICAgIHJldHVybiBuZXcgWDxWPih2LHZhbHVlKTsKKyAgICB9Cit9CisKK2NsYXNzIFggeworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9jb252ZXJ0VG9JbnN0YW5jZU1ldGhvZC9KYXZhZG9jUGFyYW1ldGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvY29udmVydFRvSW5zdGFuY2VNZXRob2QvSmF2YWRvY1BhcmFtZXRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQxM2U3NTYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvY29udmVydFRvSW5zdGFuY2VNZXRob2QvSmF2YWRvY1BhcmFtZXRlci5qYXZhCkBAIC0wLDAgKzEsMTAgQEAKK2NsYXNzIFRlc3QgeworICAvKioKKyAgICogbWV0aG9kIGRlc2NyaXB0aW9uCisgICAqIEBwYXJhbSBhIGRlc2NyaXB0aW9uCisgICAqLworICBwdWJsaWMgc3RhdGljIHZvaWQgbWE8Y2FyZXQ+aW4oQSBhKSB7CisgIH0KK30KKworY2xhc3MgQSB7fQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9jb252ZXJ0VG9JbnN0YW5jZU1ldGhvZC9KYXZhZG9jUGFyYW1ldGVyLmphdmEuYWZ0ZXIgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvY29udmVydFRvSW5zdGFuY2VNZXRob2QvSmF2YWRvY1BhcmFtZXRlci5qYXZhLmFmdGVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM0NDkxZmEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvY29udmVydFRvSW5zdGFuY2VNZXRob2QvSmF2YWRvY1BhcmFtZXRlci5qYXZhLmFmdGVyCkBAIC0wLDAgKzEsMTAgQEAKK2NsYXNzIFRlc3QgeworfQorCitjbGFzcyBBIHsKKyAgICAvKioKKyAgICAgKiBtZXRob2QgZGVzY3JpcHRpb24gIAorICAgICAqLworICAgIHB1YmxpYyB2b2lkIG1haW4oKSB7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9jb252ZXJ0VG9JbnN0YW5jZU1ldGhvZC9TaW1wbGUuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9jb252ZXJ0VG9JbnN0YW5jZU1ldGhvZC9TaW1wbGUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMDM4NjcyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2NvbnZlcnRUb0luc3RhbmNlTWV0aG9kL1NpbXBsZS5qYXZhCkBAIC0wLDAgKzEsMTYgQEAKK3B1YmxpYyBjbGFzcyBZIHsKKyAgICBwdWJsaWMgdm9pZCBmb28oKSB7CisgICAgfQorfQorcHVibGljIGNsYXNzIFggeworICAgIHN0YXRpYyB2b2lkIDxjYXJldD5tZXRob2QoWSB5KSB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbih5KTsKKyAgICAgICAgeS5mb28oKTsKKyAgICB9CisKKyAgICB7CisgICAgICBZIHkgPSBuZXcgWSgpOworICAgICAgbWV0aG9kKHkpOworICAgICAgbWV0aG9kKG5ldyBZKCkpOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvY29udmVydFRvSW5zdGFuY2VNZXRob2QvU2ltcGxlLmphdmEuYWZ0ZXIgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvY29udmVydFRvSW5zdGFuY2VNZXRob2QvU2ltcGxlLmphdmEuYWZ0ZXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjk0NDlhZQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9jb252ZXJ0VG9JbnN0YW5jZU1ldGhvZC9TaW1wbGUuamF2YS5hZnRlcgpAQCAtMCwwICsxLDE3IEBACitwdWJsaWMgY2xhc3MgWSB7CisgICAgdm9pZCBtZXRob2QoKSB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbih0aGlzKTsKKyAgICAgICAgZm9vKCk7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgZm9vKCkgeworICAgIH0KK30KK3B1YmxpYyBjbGFzcyBYIHsKKworICAgIHsKKyAgICAgIFkgeSA9IG5ldyBZKCk7CisgICAgICB5Lm1ldGhvZCgpOworICAgICAgbmV3IFkoKS5tZXRob2QoKTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2NvbnZlcnRUb0luc3RhbmNlTWV0aG9kL1R5cGVQYXJhbWV0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9jb252ZXJ0VG9JbnN0YW5jZU1ldGhvZC9UeXBlUGFyYW1ldGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTQ1ZjA5ZQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9jb252ZXJ0VG9JbnN0YW5jZU1ldGhvZC9UeXBlUGFyYW1ldGVyLmphdmEKQEAgLTAsMCArMSw3IEBACitjbGFzcyBDPFQ+IHsKKyAgICBUIGdldCgpIHsgcmV0dXJuIG51bGw7IH0KKyAgICBzdGF0aWMgPFY+IHZvaWQgPGNhcmV0Pm1ldGhvZChDPFY+IGMsIFYgdmFsdWUsIFg8Vj4geCkgeworICAgICAgICBWIHYgPSBjLmdldCgpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4odiArICIgIiArIHZhbHVlKTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2NvbnZlcnRUb0luc3RhbmNlTWV0aG9kL1R5cGVQYXJhbWV0ZXIuamF2YS5hZnRlciBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9jb252ZXJ0VG9JbnN0YW5jZU1ldGhvZC9UeXBlUGFyYW1ldGVyLmphdmEuYWZ0ZXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjczMzhlMmEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvY29udmVydFRvSW5zdGFuY2VNZXRob2QvVHlwZVBhcmFtZXRlci5qYXZhLmFmdGVyCkBAIC0wLDAgKzEsOCBAQAorY2xhc3MgQzxUPiB7CisgICAgdm9pZCBtZXRob2QoVCB2YWx1ZSwgWDxUPiB4KSB7CisgICAgICAgIFQgdiA9IGdldCgpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4odiArICIgIiArIHZhbHVlKTsKKyAgICB9CisKKyAgICBUIGdldCgpIHsgcmV0dXJuIG51bGw7IH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvY29udmVydFRvSW5zdGFuY2VNZXRob2QvVmlzaWJpbGl0eUNvbmZsaWN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvY29udmVydFRvSW5zdGFuY2VNZXRob2QvVmlzaWJpbGl0eUNvbmZsaWN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTdlOTk0OQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9jb252ZXJ0VG9JbnN0YW5jZU1ldGhvZC9WaXNpYmlsaXR5Q29uZmxpY3QuamF2YQpAQCAtMCwwICsxLDExIEBACitjbGFzcyBUZXN0IHsKKyAgeworICAgIGZvbyhuZXcgQmFyKCkpOworICB9CisgIHByaXZhdGUgc3RhdGljIHZvaWQgPGNhcmV0PmZvbyhCYXIgYil7fQorCit9CisKK2NsYXNzIEJhciB7CisKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9jb3B5L211bHRpZmlsZS9jb3B5QXZhaWxhYmxlL3BhY2sxL3AxLnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9jb3B5L211bHRpZmlsZS9jb3B5QXZhaWxhYmxlL3BhY2sxL3AxLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjlkZTI5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2NvcHkvbXVsdGlmaWxlL2NvcHlBdmFpbGFibGUvcGFjazEvcDEudHh0CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvY29weS9tdWx0aWZpbGUvY29weUF2YWlsYWJsZS9wYWNrMi9wYWNrMi50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvY29weS9tdWx0aWZpbGUvY29weUF2YWlsYWJsZS9wYWNrMi9wYWNrMi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY5ZGUyOQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9jb3B5L211bHRpZmlsZS9jb3B5QXZhaWxhYmxlL3BhY2syL3BhY2syLnR4dApkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2NvcHkvbXVsdGlmaWxlL2phdmFBbmRUeHQvcGFjazEvQ2xhc3MxLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvY29weS9tdWx0aWZpbGUvamF2YUFuZFR4dC9wYWNrMS9DbGFzczEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOTY0MGI1Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2NvcHkvbXVsdGlmaWxlL2phdmFBbmRUeHQvcGFjazEvQ2xhc3MxLmphdmEKQEAgLTAsMCArMSwyIEBACitwYWNrYWdlIHBhY2sxOworcHVibGljIGNsYXNzIENsYXNzMSB7fQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9jb3B5L211bHRpZmlsZS9qYXZhQW5kVHh0L3BhY2sxL3AxLnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9jb3B5L211bHRpZmlsZS9qYXZhQW5kVHh0L3BhY2sxL3AxLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjlkZTI5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2NvcHkvbXVsdGlmaWxlL2phdmFBbmRUeHQvcGFjazEvcDEudHh0CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvY29weS9tdWx0aWZpbGUvamF2YUFuZFR4dC9wYWNrMi9DbGFzczIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9jb3B5L211bHRpZmlsZS9qYXZhQW5kVHh0L3BhY2syL0NsYXNzMi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI5NDQ1NzAKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvY29weS9tdWx0aWZpbGUvamF2YUFuZFR4dC9wYWNrMi9DbGFzczIuamF2YQpAQCAtMCwwICsxLDIgQEAKK3BhY2thZ2UgcGFjazI7CitwdWJsaWMgQ2xhc3Mye30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvY29weS9tdWx0aWZpbGUvamF2YUFuZFR4dC9wYWNrMi9wMi50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvY29weS9tdWx0aWZpbGUvamF2YUFuZFR4dC9wYWNrMi9wMi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY5ZGUyOQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9jb3B5L211bHRpZmlsZS9qYXZhQW5kVHh0L3BhY2syL3AyLnR4dApkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2NvcHkvbXVsdGlmaWxlL211bHRpcGxlQ2xhc3Nlcy9wYWNrMS9LbGFzcy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2NvcHkvbXVsdGlmaWxlL211bHRpcGxlQ2xhc3Nlcy9wYWNrMS9LbGFzcy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE1Yjc0YmUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvY29weS9tdWx0aWZpbGUvbXVsdGlwbGVDbGFzc2VzL3BhY2sxL0tsYXNzLmphdmEKQEAgLTAsMCArMSw2IEBACitwYWNrYWdlIHBhY2sxOworY2xhc3MgS2xhc3MgeworfQorCitjbGFzcyBBbm90aGVyS2xhc3MgeworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9jb3B5L211bHRpZmlsZS9tdWx0aXBsZUNsYXNzZXMvcGFjazIvS2xhc3MuZXhwZWN0ZWQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9jb3B5L211bHRpZmlsZS9tdWx0aXBsZUNsYXNzZXMvcGFjazIvS2xhc3MuZXhwZWN0ZWQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMTFjMmI4Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2NvcHkvbXVsdGlmaWxlL211bHRpcGxlQ2xhc3Nlcy9wYWNrMi9LbGFzcy5leHBlY3RlZC5qYXZhCkBAIC0wLDAgKzEsNiBAQAorcGFja2FnZSBwYWNrMjsKK2NsYXNzIEtsYXNzIHsKK30KKworY2xhc3MgQW5vdGhlcktsYXNzIHsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvY29weS9tdWx0aWZpbGUvbXVsdGlwbGVGaWxlcy9mcm9tLzEudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2NvcHkvbXVsdGlmaWxlL211bHRpcGxlRmlsZXMvZnJvbS8xLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjlkZTI5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2NvcHkvbXVsdGlmaWxlL211bHRpcGxlRmlsZXMvZnJvbS8xLnR4dApkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2NvcHkvbXVsdGlmaWxlL211bHRpcGxlRmlsZXMvZnJvbS8yLnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9jb3B5L211bHRpZmlsZS9tdWx0aXBsZUZpbGVzL2Zyb20vMi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY5ZGUyOQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9jb3B5L211bHRpZmlsZS9tdWx0aXBsZUZpbGVzL2Zyb20vMi50eHQKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9jb3B5L211bHRpZmlsZS9tdWx0aXBsZUZpbGVzL3RvL2VtcHR5LnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9jb3B5L211bHRpZmlsZS9tdWx0aXBsZUZpbGVzL3RvL2VtcHR5LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjlkZTI5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2NvcHkvbXVsdGlmaWxlL211bHRpcGxlRmlsZXMvdG8vZW1wdHkudHh0CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvY29weS9tdWx0aWZpbGUvcGFja2FnZUluZm8vZnJvbS9wYWNrYWdlLWluZm8uamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9jb3B5L211bHRpZmlsZS9wYWNrYWdlSW5mby9mcm9tL3BhY2thZ2UtaW5mby5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxMzVmZjIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvY29weS9tdWx0aWZpbGUvcGFja2FnZUluZm8vZnJvbS9wYWNrYWdlLWluZm8uamF2YQpAQCAtMCwwICsxLDMgQEAKK0BqYXZheC54bWwuYmluZC5hbm5vdGF0aW9uLlhtbFNjaGVtYShlbGVtZW50Rm9ybURlZmF1bHQgPSBqYXZheC54bWwuYmluZC5hbm5vdGF0aW9uLlhtbE5zRm9ybS5RVUFMSUZJRUQsCisgICAgICAgIG5hbWVzcGFjZSA9ICJodHRwOi8vd3d3Lm15bmFtZXNwYWNldXJsLmNvbS9teUhpdHMiKQorcGFja2FnZSBmcm9tOwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2NvcHkvbXVsdGlmaWxlL3BhY2thZ2VJbmZvL3RvL3BhY2thZ2UtaW5mby5leHBlY3RlZC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2NvcHkvbXVsdGlmaWxlL3BhY2thZ2VJbmZvL3RvL3BhY2thZ2UtaW5mby5leHBlY3RlZC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRlZGM1MjEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvY29weS9tdWx0aWZpbGUvcGFja2FnZUluZm8vdG8vcGFja2FnZS1pbmZvLmV4cGVjdGVkLmphdmEKQEAgLTAsMCArMSwzIEBACitAamF2YXgueG1sLmJpbmQuYW5ub3RhdGlvbi5YbWxTY2hlbWEoZWxlbWVudEZvcm1EZWZhdWx0ID0gamF2YXgueG1sLmJpbmQuYW5ub3RhdGlvbi5YbWxOc0Zvcm0uUVVBTElGSUVELAorICAgICAgICBuYW1lc3BhY2UgPSAiaHR0cDovL3d3dy5teW5hbWVzcGFjZXVybC5jb20vbXlIaXRzIikKK3BhY2thZ2UgdG87CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvY29weUNsYXNzL2xpYnJhcnlDbGFzcy9CYXIuZXhwZWN0ZWQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9jb3B5Q2xhc3MvbGlicmFyeUNsYXNzL0Jhci5leHBlY3RlZC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE5MmY5NjUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvY29weUNsYXNzL2xpYnJhcnlDbGFzcy9CYXIuZXhwZWN0ZWQuamF2YQpAQCAtMCwwICsxLDU5MiBAQAorLyoKKyAqIEAoIylBcnJheUxpc3QuamF2YQkxLjQ2IDAzLzA2LzIyCisgKgorICogQ29weXJpZ2h0IDIwMDMgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogU1VOIFBST1BSSUVUQVJZL0NPTkZJREVOVElBTC4gVXNlIGlzIHN1YmplY3QgdG8gbGljZW5zZSB0ZXJtcy4KKyAqLworCitpbXBvcnQgamF2YS51dGlsLkFic3RyYWN0TGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuUmFuZG9tQWNjZXNzOworCisvKioKKyAqIFJlc2l6YWJsZS1hcnJheSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgPHR0Pkxpc3Q8L3R0PiBpbnRlcmZhY2UuICBJbXBsZW1lbnRzCisgKiBhbGwgb3B0aW9uYWwgbGlzdCBvcGVyYXRpb25zLCBhbmQgcGVybWl0cyBhbGwgZWxlbWVudHMsIGluY2x1ZGluZworICogPHR0Pm51bGw8L3R0Pi4gIEluIGFkZGl0aW9uIHRvIGltcGxlbWVudGluZyB0aGUgPHR0Pkxpc3Q8L3R0PiBpbnRlcmZhY2UsCisgKiB0aGlzIGNsYXNzIHByb3ZpZGVzIG1ldGhvZHMgdG8gbWFuaXB1bGF0ZSB0aGUgc2l6ZSBvZiB0aGUgYXJyYXkgdGhhdCBpcworICogdXNlZCBpbnRlcm5hbGx5IHRvIHN0b3JlIHRoZSBsaXN0LiAgKFRoaXMgY2xhc3MgaXMgcm91Z2hseSBlcXVpdmFsZW50IHRvCisgKiA8dHQ+VmVjdG9yPC90dD4sIGV4Y2VwdCB0aGF0IGl0IGlzIHVuc3luY2hyb25pemVkLik8cD4KKyAqCisgKiBUaGUgPHR0PnNpemU8L3R0PiwgPHR0PmlzRW1wdHk8L3R0PiwgPHR0PmdldDwvdHQ+LCA8dHQ+c2V0PC90dD4sCisgKiA8dHQ+aXRlcmF0b3I8L3R0PiwgYW5kIDx0dD5saXN0SXRlcmF0b3I8L3R0PiBvcGVyYXRpb25zIHJ1biBpbiBjb25zdGFudAorICogdGltZS4gIFRoZSA8dHQ+YWRkPC90dD4gb3BlcmF0aW9uIHJ1bnMgaW4gPGk+YW1vcnRpemVkIGNvbnN0YW50IHRpbWU8L2k+LAorICogdGhhdCBpcywgYWRkaW5nIG4gZWxlbWVudHMgcmVxdWlyZXMgTyhuKSB0aW1lLiAgQWxsIG9mIHRoZSBvdGhlciBvcGVyYXRpb25zCisgKiBydW4gaW4gbGluZWFyIHRpbWUgKHJvdWdobHkgc3BlYWtpbmcpLiAgVGhlIGNvbnN0YW50IGZhY3RvciBpcyBsb3cgY29tcGFyZWQKKyAqIHRvIHRoYXQgZm9yIHRoZSA8dHQ+TGlua2VkTGlzdDwvdHQ+IGltcGxlbWVudGF0aW9uLjxwPgorICoKKyAqIEVhY2ggPHR0PkFycmF5TGlzdDwvdHQ+IGluc3RhbmNlIGhhcyBhIDxpPmNhcGFjaXR5PC9pPi4gIFRoZSBjYXBhY2l0eSBpcworICogdGhlIHNpemUgb2YgdGhlIGFycmF5IHVzZWQgdG8gc3RvcmUgdGhlIGVsZW1lbnRzIGluIHRoZSBsaXN0LiAgSXQgaXMgYWx3YXlzCisgKiBhdCBsZWFzdCBhcyBsYXJnZSBhcyB0aGUgbGlzdCBzaXplLiAgQXMgZWxlbWVudHMgYXJlIGFkZGVkIHRvIGFuIEFycmF5TGlzdCwKKyAqIGl0cyBjYXBhY2l0eSBncm93cyBhdXRvbWF0aWNhbGx5LiAgVGhlIGRldGFpbHMgb2YgdGhlIGdyb3d0aCBwb2xpY3kgYXJlIG5vdAorICogc3BlY2lmaWVkIGJleW9uZCB0aGUgZmFjdCB0aGF0IGFkZGluZyBhbiBlbGVtZW50IGhhcyBjb25zdGFudCBhbW9ydGl6ZWQKKyAqIHRpbWUgY29zdC48cD4gCisgKgorICogQW4gYXBwbGljYXRpb24gY2FuIGluY3JlYXNlIHRoZSBjYXBhY2l0eSBvZiBhbiA8dHQ+QXJyYXlMaXN0PC90dD4gaW5zdGFuY2UKKyAqIGJlZm9yZSBhZGRpbmcgYSBsYXJnZSBudW1iZXIgb2YgZWxlbWVudHMgdXNpbmcgdGhlIDx0dD5lbnN1cmVDYXBhY2l0eTwvdHQ+CisgKiBvcGVyYXRpb24uICBUaGlzIG1heSByZWR1Y2UgdGhlIGFtb3VudCBvZiBpbmNyZW1lbnRhbCByZWFsbG9jYXRpb24uPHA+CisgKgorICogPHN0cm9uZz5Ob3RlIHRoYXQgdGhpcyBpbXBsZW1lbnRhdGlvbiBpcyBub3Qgc3luY2hyb25pemVkLjwvc3Ryb25nPiBJZgorICogbXVsdGlwbGUgdGhyZWFkcyBhY2Nlc3MgYW4gPHR0PkFycmF5TGlzdDwvdHQ+IGluc3RhbmNlIGNvbmN1cnJlbnRseSwgYW5kIGF0CisgKiBsZWFzdCBvbmUgb2YgdGhlIHRocmVhZHMgbW9kaWZpZXMgdGhlIGxpc3Qgc3RydWN0dXJhbGx5LCBpdCA8aT5tdXN0PC9pPiBiZQorICogc3luY2hyb25pemVkIGV4dGVybmFsbHkuICAoQSBzdHJ1Y3R1cmFsIG1vZGlmaWNhdGlvbiBpcyBhbnkgb3BlcmF0aW9uIHRoYXQKKyAqIGFkZHMgb3IgZGVsZXRlcyBvbmUgb3IgbW9yZSBlbGVtZW50cywgb3IgZXhwbGljaXRseSByZXNpemVzIHRoZSBiYWNraW5nCisgKiBhcnJheTsgbWVyZWx5IHNldHRpbmcgdGhlIHZhbHVlIG9mIGFuIGVsZW1lbnQgaXMgbm90IGEgc3RydWN0dXJhbAorICogbW9kaWZpY2F0aW9uLikgIFRoaXMgaXMgdHlwaWNhbGx5IGFjY29tcGxpc2hlZCBieSBzeW5jaHJvbml6aW5nIG9uIHNvbWUKKyAqIG9iamVjdCB0aGF0IG5hdHVyYWxseSBlbmNhcHN1bGF0ZXMgdGhlIGxpc3QuICBJZiBubyBzdWNoIG9iamVjdCBleGlzdHMsIHRoZQorICogbGlzdCBzaG91bGQgYmUgIndyYXBwZWQiIHVzaW5nIHRoZSA8dHQ+Q29sbGVjdGlvbnMuc3luY2hyb25pemVkTGlzdDwvdHQ+CisgKiBtZXRob2QuICBUaGlzIGlzIGJlc3QgZG9uZSBhdCBjcmVhdGlvbiB0aW1lLCB0byBwcmV2ZW50IGFjY2lkZW50YWwKKyAqIHVuc3luY2hyb25pemVkIGFjY2VzcyB0byB0aGUgbGlzdDoKKyAqIDxwcmU+CisgKglMaXN0IGxpc3QgPSBDb2xsZWN0aW9ucy5zeW5jaHJvbml6ZWRMaXN0KG5ldyBBcnJheUxpc3QoLi4uKSk7CisgKiA8L3ByZT48cD4KKyAqCisgKiBUaGUgaXRlcmF0b3JzIHJldHVybmVkIGJ5IHRoaXMgY2xhc3MncyA8dHQ+aXRlcmF0b3I8L3R0PiBhbmQKKyAqIDx0dD5saXN0SXRlcmF0b3I8L3R0PiBtZXRob2RzIGFyZSA8aT5mYWlsLWZhc3Q8L2k+OiBpZiBsaXN0IGlzIHN0cnVjdHVyYWxseQorICogbW9kaWZpZWQgYXQgYW55IHRpbWUgYWZ0ZXIgdGhlIGl0ZXJhdG9yIGlzIGNyZWF0ZWQsIGluIGFueSB3YXkgZXhjZXB0CisgKiB0aHJvdWdoIHRoZSBpdGVyYXRvcidzIG93biByZW1vdmUgb3IgYWRkIG1ldGhvZHMsIHRoZSBpdGVyYXRvciB3aWxsIHRocm93IGEKKyAqIENvbmN1cnJlbnRNb2RpZmljYXRpb25FeGNlcHRpb24uICBUaHVzLCBpbiB0aGUgZmFjZSBvZiBjb25jdXJyZW50CisgKiBtb2RpZmljYXRpb24sIHRoZSBpdGVyYXRvciBmYWlscyBxdWlja2x5IGFuZCBjbGVhbmx5LCByYXRoZXIgdGhhbiByaXNraW5nCisgKiBhcmJpdHJhcnksIG5vbi1kZXRlcm1pbmlzdGljIGJlaGF2aW9yIGF0IGFuIHVuZGV0ZXJtaW5lZCB0aW1lIGluIHRoZQorICogZnV0dXJlLjxwPgorICoKKyAqIE5vdGUgdGhhdCB0aGUgZmFpbC1mYXN0IGJlaGF2aW9yIG9mIGFuIGl0ZXJhdG9yIGNhbm5vdCBiZSBndWFyYW50ZWVkCisgKiBhcyBpdCBpcywgZ2VuZXJhbGx5IHNwZWFraW5nLCBpbXBvc3NpYmxlIHRvIG1ha2UgYW55IGhhcmQgZ3VhcmFudGVlcyBpbiB0aGUKKyAqIHByZXNlbmNlIG9mIHVuc3luY2hyb25pemVkIGNvbmN1cnJlbnQgbW9kaWZpY2F0aW9uLiAgRmFpbC1mYXN0IGl0ZXJhdG9ycworICogdGhyb3cgPHR0PkNvbmN1cnJlbnRNb2RpZmljYXRpb25FeGNlcHRpb248L3R0PiBvbiBhIGJlc3QtZWZmb3J0IGJhc2lzLiAKKyAqIFRoZXJlZm9yZSwgaXQgd291bGQgYmUgd3JvbmcgdG8gd3JpdGUgYSBwcm9ncmFtIHRoYXQgZGVwZW5kZWQgb24gdGhpcworICogZXhjZXB0aW9uIGZvciBpdHMgY29ycmVjdG5lc3M6IDxpPnRoZSBmYWlsLWZhc3QgYmVoYXZpb3Igb2YgaXRlcmF0b3JzCisgKiBzaG91bGQgYmUgdXNlZCBvbmx5IHRvIGRldGVjdCBidWdzLjwvaT48cD4KKyAqCisgKiBUaGlzIGNsYXNzIGlzIGEgbWVtYmVyIG9mIHRoZSAKKyAqIDxhIGhyZWY9IntAZG9jUm9vdH0vLi4vZ3VpZGUvY29sbGVjdGlvbnMvaW5kZXguaHRtbCI+CisgKiBKYXZhIENvbGxlY3Rpb25zIEZyYW1ld29yazwvYT4uCisgKgorICogQGF1dGhvciAgSm9zaCBCbG9jaAorICogQGF1dGhvciAgTmVhbCBHYWZ0ZXIKKyAqIEB2ZXJzaW9uIDEuNDYsIDA2LzIyLzAzCisgKiBAc2VlCSAgICBqYXZhLnV0aWwuQ29sbGVjdGlvbgorICogQHNlZQkgICAgamF2YS51dGlsLkxpc3QKKyAqIEBzZWUJICAgIExpbmtlZExpc3QKKyAqIEBzZWUJICAgIFZlY3RvcgorICogQHNlZQkgICAgamF2YS51dGlsLkNvbGxlY3Rpb25zI3N5bmNocm9uaXplZExpc3QoamF2YS51dGlsLkxpc3QpCisgKiBAc2luY2UgICAxLjIKKyAqLworCitwdWJsaWMgY2xhc3MgQmFyPEU+IGV4dGVuZHMgQWJzdHJhY3RMaXN0PEU+CisgICAgICAgIGltcGxlbWVudHMgTGlzdDxFPiwgUmFuZG9tQWNjZXNzLCBDbG9uZWFibGUsIGphdmEuaW8uU2VyaWFsaXphYmxlCit7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgbG9uZyBzZXJpYWxWZXJzaW9uVUlEID0gODY4MzQ1MjU4MTEyMjg5MjE4OUw7CisKKyAgICAvKioKKyAgICAgKiBUaGUgYXJyYXkgYnVmZmVyIGludG8gd2hpY2ggdGhlIGVsZW1lbnRzIG9mIHRoZSBBcnJheUxpc3QgYXJlIHN0b3JlZC4KKyAgICAgKiBUaGUgY2FwYWNpdHkgb2YgdGhlIEFycmF5TGlzdCBpcyB0aGUgbGVuZ3RoIG9mIHRoaXMgYXJyYXkgYnVmZmVyLgorICAgICAqLworICAgIHByaXZhdGUgdHJhbnNpZW50IEVbXSBlbGVtZW50RGF0YTsKKworICAgIC8qKgorICAgICAqIFRoZSBzaXplIG9mIHRoZSBBcnJheUxpc3QgKHRoZSBudW1iZXIgb2YgZWxlbWVudHMgaXQgY29udGFpbnMpLgorICAgICAqCisgICAgICogQHNlcmlhbAorICAgICAqLworICAgIHByaXZhdGUgaW50IHNpemU7CisKKyAgICAvKioKKyAgICAgKiBDb25zdHJ1Y3RzIGFuIGVtcHR5IGxpc3Qgd2l0aCB0aGUgc3BlY2lmaWVkIGluaXRpYWwgY2FwYWNpdHkuCisgICAgICoKKyAgICAgKiBAcGFyYW0gICBpbml0aWFsQ2FwYWNpdHkgICB0aGUgaW5pdGlhbCBjYXBhY2l0eSBvZiB0aGUgbGlzdC4KKyAgICAgKiBAZXhjZXB0aW9uIElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBpZiB0aGUgc3BlY2lmaWVkIGluaXRpYWwgY2FwYWNpdHkKKyAgICAgKiAgICAgICAgICAgIGlzIG5lZ2F0aXZlCisgICAgICovCisgICAgcHVibGljIEJhcihpbnQgaW5pdGlhbENhcGFjaXR5KSB7CisJc3VwZXIoKTsKKyAgICAgICAgaWYgKGluaXRpYWxDYXBhY2l0eSA8IDApCisgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJJbGxlZ2FsIENhcGFjaXR5OiAiKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbml0aWFsQ2FwYWNpdHkpOworCXRoaXMuZWxlbWVudERhdGEgPSAoRVtdKW5ldyBPYmplY3RbaW5pdGlhbENhcGFjaXR5XTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDb25zdHJ1Y3RzIGFuIGVtcHR5IGxpc3Qgd2l0aCBhbiBpbml0aWFsIGNhcGFjaXR5IG9mIHRlbi4KKyAgICAgKi8KKyAgICBwdWJsaWMgQmFyKCkgeworCXRoaXMoMTApOworICAgIH0KKworICAgIC8qKgorICAgICAqIENvbnN0cnVjdHMgYSBsaXN0IGNvbnRhaW5pbmcgdGhlIGVsZW1lbnRzIG9mIHRoZSBzcGVjaWZpZWQKKyAgICAgKiBjb2xsZWN0aW9uLCBpbiB0aGUgb3JkZXIgdGhleSBhcmUgcmV0dXJuZWQgYnkgdGhlIGNvbGxlY3Rpb24ncworICAgICAqIGl0ZXJhdG9yLiAgVGhlIDx0dD5BcnJheUxpc3Q8L3R0PiBpbnN0YW5jZSBoYXMgYW4gaW5pdGlhbCBjYXBhY2l0eSBvZgorICAgICAqIDExMCUgdGhlIHNpemUgb2YgdGhlIHNwZWNpZmllZCBjb2xsZWN0aW9uLgorICAgICAqCisgICAgICogQHBhcmFtIGMgdGhlIGNvbGxlY3Rpb24gd2hvc2UgZWxlbWVudHMgYXJlIHRvIGJlIHBsYWNlZCBpbnRvIHRoaXMgbGlzdC4KKyAgICAgKiBAdGhyb3dzIE51bGxQb2ludGVyRXhjZXB0aW9uIGlmIHRoZSBzcGVjaWZpZWQgY29sbGVjdGlvbiBpcyBudWxsLgorICAgICAqLworICAgIHB1YmxpYyBCYXIoQ29sbGVjdGlvbjw/IGV4dGVuZHMgRT4gYykgeworICAgICAgICBzaXplID0gYy5zaXplKCk7CisgICAgICAgIC8vIEFsbG93IDEwJSByb29tIGZvciBncm93dGgKKyAgICAgICAgZWxlbWVudERhdGEgPSAoRVtdKW5ldyBPYmplY3RbCisgICAgICAgICAgICAgICAgICAgICAgKGludClNYXRoLm1pbigoc2l6ZSoxMTBMKS8xMDAsSW50ZWdlci5NQVhfVkFMVUUpXTsgCisgICAgICAgIGMudG9BcnJheShlbGVtZW50RGF0YSk7CisgICAgfQorCisgICAgLyoqCisgICAgICogVHJpbXMgdGhlIGNhcGFjaXR5IG9mIHRoaXMgPHR0PkFycmF5TGlzdDwvdHQ+IGluc3RhbmNlIHRvIGJlIHRoZQorICAgICAqIGxpc3QncyBjdXJyZW50IHNpemUuICBBbiBhcHBsaWNhdGlvbiBjYW4gdXNlIHRoaXMgb3BlcmF0aW9uIHRvIG1pbmltaXplCisgICAgICogdGhlIHN0b3JhZ2Ugb2YgYW4gPHR0PkFycmF5TGlzdDwvdHQ+IGluc3RhbmNlLgorICAgICAqLworICAgIHB1YmxpYyB2b2lkIHRyaW1Ub1NpemUoKSB7CisJbW9kQ291bnQrKzsKKwlpbnQgb2xkQ2FwYWNpdHkgPSBlbGVtZW50RGF0YS5sZW5ndGg7CisJaWYgKHNpemUgPCBvbGRDYXBhY2l0eSkgeworCSAgICBPYmplY3Qgb2xkRGF0YVtdID0gZWxlbWVudERhdGE7CisJICAgIGVsZW1lbnREYXRhID0gKEVbXSluZXcgT2JqZWN0W3NpemVdOworCSAgICBTeXN0ZW0uYXJyYXljb3B5KG9sZERhdGEsIDAsIGVsZW1lbnREYXRhLCAwLCBzaXplKTsKKwl9CisgICAgfQorCisgICAgLyoqCisgICAgICogSW5jcmVhc2VzIHRoZSBjYXBhY2l0eSBvZiB0aGlzIDx0dD5BcnJheUxpc3Q8L3R0PiBpbnN0YW5jZSwgaWYKKyAgICAgKiBuZWNlc3NhcnksIHRvIGVuc3VyZSAgdGhhdCBpdCBjYW4gaG9sZCBhdCBsZWFzdCB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzCisgICAgICogc3BlY2lmaWVkIGJ5IHRoZSBtaW5pbXVtIGNhcGFjaXR5IGFyZ3VtZW50LiAKKyAgICAgKgorICAgICAqIEBwYXJhbSAgIG1pbkNhcGFjaXR5ICAgdGhlIGRlc2lyZWQgbWluaW11bSBjYXBhY2l0eS4KKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBlbnN1cmVDYXBhY2l0eShpbnQgbWluQ2FwYWNpdHkpIHsKKwltb2RDb3VudCsrOworCWludCBvbGRDYXBhY2l0eSA9IGVsZW1lbnREYXRhLmxlbmd0aDsKKwlpZiAobWluQ2FwYWNpdHkgPiBvbGRDYXBhY2l0eSkgeworCSAgICBPYmplY3Qgb2xkRGF0YVtdID0gZWxlbWVudERhdGE7CisJICAgIGludCBuZXdDYXBhY2l0eSA9IChvbGRDYXBhY2l0eSAqIDMpLzIgKyAxOworICAgIAkgICAgaWYgKG5ld0NhcGFjaXR5IDwgbWluQ2FwYWNpdHkpCisJCW5ld0NhcGFjaXR5ID0gbWluQ2FwYWNpdHk7CisJICAgIGVsZW1lbnREYXRhID0gKEVbXSluZXcgT2JqZWN0W25ld0NhcGFjaXR5XTsKKwkgICAgU3lzdGVtLmFycmF5Y29weShvbGREYXRhLCAwLCBlbGVtZW50RGF0YSwgMCwgc2l6ZSk7CisJfQorICAgIH0KKworICAgIC8qKgorICAgICAqIFJldHVybnMgdGhlIG51bWJlciBvZiBlbGVtZW50cyBpbiB0aGlzIGxpc3QuCisgICAgICoKKyAgICAgKiBAcmV0dXJuICB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzIGluIHRoaXMgbGlzdC4KKyAgICAgKi8KKyAgICBwdWJsaWMgaW50IHNpemUoKSB7CisJcmV0dXJuIHNpemU7CisgICAgfQorCisgICAgLyoqCisgICAgICogVGVzdHMgaWYgdGhpcyBsaXN0IGhhcyBubyBlbGVtZW50cy4KKyAgICAgKgorICAgICAqIEByZXR1cm4gIDx0dD50cnVlPC90dD4gaWYgdGhpcyBsaXN0IGhhcyBubyBlbGVtZW50czsKKyAgICAgKiAgICAgICAgICA8dHQ+ZmFsc2U8L3R0PiBvdGhlcndpc2UuCisgICAgICovCisgICAgcHVibGljIGJvb2xlYW4gaXNFbXB0eSgpIHsKKwlyZXR1cm4gc2l6ZSA9PSAwOworICAgIH0KKworICAgIC8qKgorICAgICAqIFJldHVybnMgPHR0PnRydWU8L3R0PiBpZiB0aGlzIGxpc3QgY29udGFpbnMgdGhlIHNwZWNpZmllZCBlbGVtZW50LgorICAgICAqCisgICAgICogQHBhcmFtIGVsZW0gZWxlbWVudCB3aG9zZSBwcmVzZW5jZSBpbiB0aGlzIExpc3QgaXMgdG8gYmUgdGVzdGVkLgorICAgICAqIEByZXR1cm4gIDxjb2RlPnRydWU8L2NvZGU+IGlmIHRoZSBzcGVjaWZpZWQgZWxlbWVudCBpcyBwcmVzZW50OworICAgICAqCQk8Y29kZT5mYWxzZTwvY29kZT4gb3RoZXJ3aXNlLgorICAgICAqLworICAgIHB1YmxpYyBib29sZWFuIGNvbnRhaW5zKE9iamVjdCBlbGVtKSB7CisJcmV0dXJuIGluZGV4T2YoZWxlbSkgPj0gMDsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBTZWFyY2hlcyBmb3IgdGhlIGZpcnN0IG9jY3VyZW5jZSBvZiB0aGUgZ2l2ZW4gYXJndW1lbnQsIHRlc3RpbmcgCisgICAgICogZm9yIGVxdWFsaXR5IHVzaW5nIHRoZSA8dHQ+ZXF1YWxzPC90dD4gbWV0aG9kLiAKKyAgICAgKgorICAgICAqIEBwYXJhbSAgIGVsZW0gICBhbiBvYmplY3QuCisgICAgICogQHJldHVybiAgdGhlIGluZGV4IG9mIHRoZSBmaXJzdCBvY2N1cnJlbmNlIG9mIHRoZSBhcmd1bWVudCBpbiB0aGlzCisgICAgICogICAgICAgICAgbGlzdDsgcmV0dXJucyA8dHQ+LTE8L3R0PiBpZiB0aGUgb2JqZWN0IGlzIG5vdCBmb3VuZC4KKyAgICAgKiBAc2VlICAgICBPYmplY3QjZXF1YWxzKE9iamVjdCkKKyAgICAgKi8KKyAgICBwdWJsaWMgaW50IGluZGV4T2YoT2JqZWN0IGVsZW0pIHsKKwlpZiAoZWxlbSA9PSBudWxsKSB7CisJICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2l6ZTsgaSsrKQorCQlpZiAoZWxlbWVudERhdGFbaV09PW51bGwpCisJCSAgICByZXR1cm4gaTsKKwl9IGVsc2UgeworCSAgICBmb3IgKGludCBpID0gMDsgaSA8IHNpemU7IGkrKykKKwkJaWYgKGVsZW0uZXF1YWxzKGVsZW1lbnREYXRhW2ldKSkKKwkJICAgIHJldHVybiBpOworCX0KKwlyZXR1cm4gLTE7CisgICAgfQorCisgICAgLyoqCisgICAgICogUmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIGxhc3Qgb2NjdXJyZW5jZSBvZiB0aGUgc3BlY2lmaWVkIG9iamVjdCBpbgorICAgICAqIHRoaXMgbGlzdC4KKyAgICAgKgorICAgICAqIEBwYXJhbSAgIGVsZW0gICB0aGUgZGVzaXJlZCBlbGVtZW50LgorICAgICAqIEByZXR1cm4gIHRoZSBpbmRleCBvZiB0aGUgbGFzdCBvY2N1cnJlbmNlIG9mIHRoZSBzcGVjaWZpZWQgb2JqZWN0IGluCisgICAgICogICAgICAgICAgdGhpcyBsaXN0OyByZXR1cm5zIC0xIGlmIHRoZSBvYmplY3QgaXMgbm90IGZvdW5kLgorICAgICAqLworICAgIHB1YmxpYyBpbnQgbGFzdEluZGV4T2YoT2JqZWN0IGVsZW0pIHsKKwlpZiAoZWxlbSA9PSBudWxsKSB7CisJICAgIGZvciAoaW50IGkgPSBzaXplLTE7IGkgPj0gMDsgaS0tKQorCQlpZiAoZWxlbWVudERhdGFbaV09PW51bGwpCisJCSAgICByZXR1cm4gaTsKKwl9IGVsc2UgeworCSAgICBmb3IgKGludCBpID0gc2l6ZS0xOyBpID49IDA7IGktLSkKKwkJaWYgKGVsZW0uZXF1YWxzKGVsZW1lbnREYXRhW2ldKSkKKwkJICAgIHJldHVybiBpOworCX0KKwlyZXR1cm4gLTE7CisgICAgfQorCisgICAgLyoqCisgICAgICogUmV0dXJucyBhIHNoYWxsb3cgY29weSBvZiB0aGlzIDx0dD5BcnJheUxpc3Q8L3R0PiBpbnN0YW5jZS4gIChUaGUKKyAgICAgKiBlbGVtZW50cyB0aGVtc2VsdmVzIGFyZSBub3QgY29waWVkLikKKyAgICAgKgorICAgICAqIEByZXR1cm4gIGEgY2xvbmUgb2YgdGhpcyA8dHQ+QXJyYXlMaXN0PC90dD4gaW5zdGFuY2UuCisgICAgICovCisgICAgcHVibGljIE9iamVjdCBjbG9uZSgpIHsKKwl0cnkgeyAKKwkgICAgQmFyPEU+IHYgPSAoQmFyPEU+KSBzdXBlci5jbG9uZSgpOworCSAgICB2LmVsZW1lbnREYXRhID0gKEVbXSluZXcgT2JqZWN0W3NpemVdOworCSAgICBTeXN0ZW0uYXJyYXljb3B5KGVsZW1lbnREYXRhLCAwLCB2LmVsZW1lbnREYXRhLCAwLCBzaXplKTsKKwkgICAgdi5tb2RDb3VudCA9IDA7CisJICAgIHJldHVybiB2OworCX0gY2F0Y2ggKENsb25lTm90U3VwcG9ydGVkRXhjZXB0aW9uIGUpIHsgCisJICAgIC8vIHRoaXMgc2hvdWxkbid0IGhhcHBlbiwgc2luY2Ugd2UgYXJlIENsb25lYWJsZQorCSAgICB0aHJvdyBuZXcgSW50ZXJuYWxFcnJvcigpOworCX0KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIGFuIGFycmF5IGNvbnRhaW5pbmcgYWxsIG9mIHRoZSBlbGVtZW50cyBpbiB0aGlzIGxpc3QKKyAgICAgKiBpbiB0aGUgY29ycmVjdCBvcmRlci4KKyAgICAgKgorICAgICAqIEByZXR1cm4gYW4gYXJyYXkgY29udGFpbmluZyBhbGwgb2YgdGhlIGVsZW1lbnRzIGluIHRoaXMgbGlzdAorICAgICAqIAkgICAgICAgaW4gdGhlIGNvcnJlY3Qgb3JkZXIuCisgICAgICovCisgICAgcHVibGljIE9iamVjdFtdIHRvQXJyYXkoKSB7CisJT2JqZWN0W10gcmVzdWx0ID0gbmV3IE9iamVjdFtzaXplXTsKKwlTeXN0ZW0uYXJyYXljb3B5KGVsZW1lbnREYXRhLCAwLCByZXN1bHQsIDAsIHNpemUpOworCXJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgLyoqCisgICAgICogUmV0dXJucyBhbiBhcnJheSBjb250YWluaW5nIGFsbCBvZiB0aGUgZWxlbWVudHMgaW4gdGhpcyBsaXN0IGluIHRoZQorICAgICAqIGNvcnJlY3Qgb3JkZXI7IHRoZSBydW50aW1lIHR5cGUgb2YgdGhlIHJldHVybmVkIGFycmF5IGlzIHRoYXQgb2YgdGhlCisgICAgICogc3BlY2lmaWVkIGFycmF5LiAgSWYgdGhlIGxpc3QgZml0cyBpbiB0aGUgc3BlY2lmaWVkIGFycmF5LCBpdCBpcworICAgICAqIHJldHVybmVkIHRoZXJlaW4uICBPdGhlcndpc2UsIGEgbmV3IGFycmF5IGlzIGFsbG9jYXRlZCB3aXRoIHRoZSBydW50aW1lCisgICAgICogdHlwZSBvZiB0aGUgc3BlY2lmaWVkIGFycmF5IGFuZCB0aGUgc2l6ZSBvZiB0aGlzIGxpc3QuPHA+CisgICAgICoKKyAgICAgKiBJZiB0aGUgbGlzdCBmaXRzIGluIHRoZSBzcGVjaWZpZWQgYXJyYXkgd2l0aCByb29tIHRvIHNwYXJlIChpLmUuLCB0aGUKKyAgICAgKiBhcnJheSBoYXMgbW9yZSBlbGVtZW50cyB0aGFuIHRoZSBsaXN0KSwgdGhlIGVsZW1lbnQgaW4gdGhlIGFycmF5CisgICAgICogaW1tZWRpYXRlbHkgZm9sbG93aW5nIHRoZSBlbmQgb2YgdGhlIGNvbGxlY3Rpb24gaXMgc2V0IHRvCisgICAgICogPHR0Pm51bGw8L3R0Pi4gIFRoaXMgaXMgdXNlZnVsIGluIGRldGVybWluaW5nIHRoZSBsZW5ndGggb2YgdGhlIGxpc3QKKyAgICAgKiA8aT5vbmx5PC9pPiBpZiB0aGUgY2FsbGVyIGtub3dzIHRoYXQgdGhlIGxpc3QgZG9lcyBub3QgY29udGFpbiBhbnkKKyAgICAgKiA8dHQ+bnVsbDwvdHQ+IGVsZW1lbnRzLgorICAgICAqCisgICAgICogQHBhcmFtIGEgdGhlIGFycmF5IGludG8gd2hpY2ggdGhlIGVsZW1lbnRzIG9mIHRoZSBsaXN0IGFyZSB0bworICAgICAqCQliZSBzdG9yZWQsIGlmIGl0IGlzIGJpZyBlbm91Z2g7IG90aGVyd2lzZSwgYSBuZXcgYXJyYXkgb2YgdGhlCisgICAgICogCQlzYW1lIHJ1bnRpbWUgdHlwZSBpcyBhbGxvY2F0ZWQgZm9yIHRoaXMgcHVycG9zZS4KKyAgICAgKiBAcmV0dXJuIGFuIGFycmF5IGNvbnRhaW5pbmcgdGhlIGVsZW1lbnRzIG9mIHRoZSBsaXN0LgorICAgICAqIEB0aHJvd3MgQXJyYXlTdG9yZUV4Y2VwdGlvbiBpZiB0aGUgcnVudGltZSB0eXBlIG9mIGEgaXMgbm90IGEgc3VwZXJ0eXBlCisgICAgICogICAgICAgICBvZiB0aGUgcnVudGltZSB0eXBlIG9mIGV2ZXJ5IGVsZW1lbnQgaW4gdGhpcyBsaXN0LgorICAgICAqLworICAgIHB1YmxpYyA8VD4gVFtdIHRvQXJyYXkoVFtdIGEpIHsKKyAgICAgICAgaWYgKGEubGVuZ3RoIDwgc2l6ZSkKKyAgICAgICAgICAgIGEgPSAoVFtdKWphdmEubGFuZy5yZWZsZWN0LkFycmF5LgorCQluZXdJbnN0YW5jZShhLmdldENsYXNzKCkuZ2V0Q29tcG9uZW50VHlwZSgpLCBzaXplKTsKKwlTeXN0ZW0uYXJyYXljb3B5KGVsZW1lbnREYXRhLCAwLCBhLCAwLCBzaXplKTsKKyAgICAgICAgaWYgKGEubGVuZ3RoID4gc2l6ZSkKKyAgICAgICAgICAgIGFbc2l6ZV0gPSBudWxsOworICAgICAgICByZXR1cm4gYTsKKyAgICB9CisKKyAgICAvLyBQb3NpdGlvbmFsIEFjY2VzcyBPcGVyYXRpb25zCisKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIHRoZSBlbGVtZW50IGF0IHRoZSBzcGVjaWZpZWQgcG9zaXRpb24gaW4gdGhpcyBsaXN0LgorICAgICAqCisgICAgICogQHBhcmFtICBpbmRleCBpbmRleCBvZiBlbGVtZW50IHRvIHJldHVybi4KKyAgICAgKiBAcmV0dXJuIHRoZSBlbGVtZW50IGF0IHRoZSBzcGVjaWZpZWQgcG9zaXRpb24gaW4gdGhpcyBsaXN0LgorICAgICAqIEB0aHJvd3MgICAgSW5kZXhPdXRPZkJvdW5kc0V4Y2VwdGlvbiBpZiBpbmRleCBpcyBvdXQgb2YgcmFuZ2UgPHR0PihpbmRleAorICAgICAqIAkJICAmbHQ7IDAgfHwgaW5kZXggJmd0Oz0gc2l6ZSgpKTwvdHQ+LgorICAgICAqLworICAgIHB1YmxpYyBFIGdldChpbnQgaW5kZXgpIHsKKwlSYW5nZUNoZWNrKGluZGV4KTsKKworCXJldHVybiBlbGVtZW50RGF0YVtpbmRleF07CisgICAgfQorCisgICAgLyoqCisgICAgICogUmVwbGFjZXMgdGhlIGVsZW1lbnQgYXQgdGhlIHNwZWNpZmllZCBwb3NpdGlvbiBpbiB0aGlzIGxpc3Qgd2l0aAorICAgICAqIHRoZSBzcGVjaWZpZWQgZWxlbWVudC4KKyAgICAgKgorICAgICAqIEBwYXJhbSBpbmRleCBpbmRleCBvZiBlbGVtZW50IHRvIHJlcGxhY2UuCisgICAgICogQHBhcmFtIGVsZW1lbnQgZWxlbWVudCB0byBiZSBzdG9yZWQgYXQgdGhlIHNwZWNpZmllZCBwb3NpdGlvbi4KKyAgICAgKiBAcmV0dXJuIHRoZSBlbGVtZW50IHByZXZpb3VzbHkgYXQgdGhlIHNwZWNpZmllZCBwb3NpdGlvbi4KKyAgICAgKiBAdGhyb3dzICAgIEluZGV4T3V0T2ZCb3VuZHNFeGNlcHRpb24gaWYgaW5kZXggb3V0IG9mIHJhbmdlCisgICAgICoJCSAgPHR0PihpbmRleCAmbHQ7IDAgfHwgaW5kZXggJmd0Oz0gc2l6ZSgpKTwvdHQ+LgorICAgICAqLworICAgIHB1YmxpYyBFIHNldChpbnQgaW5kZXgsIEUgZWxlbWVudCkgeworCVJhbmdlQ2hlY2soaW5kZXgpOworCisJRSBvbGRWYWx1ZSA9IGVsZW1lbnREYXRhW2luZGV4XTsKKwllbGVtZW50RGF0YVtpbmRleF0gPSBlbGVtZW50OworCXJldHVybiBvbGRWYWx1ZTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBBcHBlbmRzIHRoZSBzcGVjaWZpZWQgZWxlbWVudCB0byB0aGUgZW5kIG9mIHRoaXMgbGlzdC4KKyAgICAgKgorICAgICAqIEBwYXJhbSBvIGVsZW1lbnQgdG8gYmUgYXBwZW5kZWQgdG8gdGhpcyBsaXN0LgorICAgICAqIEByZXR1cm4gPHR0PnRydWU8L3R0PiAoYXMgcGVyIHRoZSBnZW5lcmFsIGNvbnRyYWN0IG9mIENvbGxlY3Rpb24uYWRkKS4KKyAgICAgKi8KKyAgICBwdWJsaWMgYm9vbGVhbiBhZGQoRSBvKSB7CisJZW5zdXJlQ2FwYWNpdHkoc2l6ZSArIDEpOyAgLy8gSW5jcmVtZW50cyBtb2RDb3VudCEhCisJZWxlbWVudERhdGFbc2l6ZSsrXSA9IG87CisJcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgLyoqCisgICAgICogSW5zZXJ0cyB0aGUgc3BlY2lmaWVkIGVsZW1lbnQgYXQgdGhlIHNwZWNpZmllZCBwb3NpdGlvbiBpbiB0aGlzCisgICAgICogbGlzdC4gU2hpZnRzIHRoZSBlbGVtZW50IGN1cnJlbnRseSBhdCB0aGF0IHBvc2l0aW9uIChpZiBhbnkpIGFuZAorICAgICAqIGFueSBzdWJzZXF1ZW50IGVsZW1lbnRzIHRvIHRoZSByaWdodCAoYWRkcyBvbmUgdG8gdGhlaXIgaW5kaWNlcykuCisgICAgICoKKyAgICAgKiBAcGFyYW0gaW5kZXggaW5kZXggYXQgd2hpY2ggdGhlIHNwZWNpZmllZCBlbGVtZW50IGlzIHRvIGJlIGluc2VydGVkLgorICAgICAqIEBwYXJhbSBlbGVtZW50IGVsZW1lbnQgdG8gYmUgaW5zZXJ0ZWQuCisgICAgICogQHRocm93cyAgICBJbmRleE91dE9mQm91bmRzRXhjZXB0aW9uIGlmIGluZGV4IGlzIG91dCBvZiByYW5nZQorICAgICAqCQkgIDx0dD4oaW5kZXggJmx0OyAwIHx8IGluZGV4ICZndDsgc2l6ZSgpKTwvdHQ+LgorICAgICAqLworICAgIHB1YmxpYyB2b2lkIGFkZChpbnQgaW5kZXgsIEUgZWxlbWVudCkgeworCWlmIChpbmRleCA+IHNpemUgfHwgaW5kZXggPCAwKQorCSAgICB0aHJvdyBuZXcgSW5kZXhPdXRPZkJvdW5kc0V4Y2VwdGlvbigKKwkJIkluZGV4OiAiK2luZGV4KyIsIFNpemU6ICIrc2l6ZSk7CisKKwllbnN1cmVDYXBhY2l0eShzaXplKzEpOyAgLy8gSW5jcmVtZW50cyBtb2RDb3VudCEhCisJU3lzdGVtLmFycmF5Y29weShlbGVtZW50RGF0YSwgaW5kZXgsIGVsZW1lbnREYXRhLCBpbmRleCArIDEsCisJCQkgc2l6ZSAtIGluZGV4KTsKKwllbGVtZW50RGF0YVtpbmRleF0gPSBlbGVtZW50OworCXNpemUrKzsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZW1vdmVzIHRoZSBlbGVtZW50IGF0IHRoZSBzcGVjaWZpZWQgcG9zaXRpb24gaW4gdGhpcyBsaXN0LgorICAgICAqIFNoaWZ0cyBhbnkgc3Vic2VxdWVudCBlbGVtZW50cyB0byB0aGUgbGVmdCAoc3VidHJhY3RzIG9uZSBmcm9tIHRoZWlyCisgICAgICogaW5kaWNlcykuCisgICAgICoKKyAgICAgKiBAcGFyYW0gaW5kZXggdGhlIGluZGV4IG9mIHRoZSBlbGVtZW50IHRvIHJlbW92ZWQuCisgICAgICogQHJldHVybiB0aGUgZWxlbWVudCB0aGF0IHdhcyByZW1vdmVkIGZyb20gdGhlIGxpc3QuCisgICAgICogQHRocm93cyAgICBJbmRleE91dE9mQm91bmRzRXhjZXB0aW9uIGlmIGluZGV4IG91dCBvZiByYW5nZSA8dHQ+KGluZGV4CisgICAgICogCQkgICZsdDsgMCB8fCBpbmRleCAmZ3Q7PSBzaXplKCkpPC90dD4uCisgICAgICovCisgICAgcHVibGljIEUgcmVtb3ZlKGludCBpbmRleCkgeworCVJhbmdlQ2hlY2soaW5kZXgpOworCisJbW9kQ291bnQrKzsKKwlFIG9sZFZhbHVlID0gZWxlbWVudERhdGFbaW5kZXhdOworCisJaW50IG51bU1vdmVkID0gc2l6ZSAtIGluZGV4IC0gMTsKKwlpZiAobnVtTW92ZWQgPiAwKQorCSAgICBTeXN0ZW0uYXJyYXljb3B5KGVsZW1lbnREYXRhLCBpbmRleCsxLCBlbGVtZW50RGF0YSwgaW5kZXgsCisJCQkgICAgIG51bU1vdmVkKTsKKwllbGVtZW50RGF0YVstLXNpemVdID0gbnVsbDsgLy8gTGV0IGdjIGRvIGl0cyB3b3JrCisKKwlyZXR1cm4gb2xkVmFsdWU7CisgICAgfQorCisgICAgLyoqCisgICAgICogUmVtb3ZlcyBhIHNpbmdsZSBpbnN0YW5jZSBvZiB0aGUgc3BlY2lmaWVkIGVsZW1lbnQgZnJvbSB0aGlzCisgICAgICogbGlzdCwgaWYgaXQgaXMgcHJlc2VudCAob3B0aW9uYWwgb3BlcmF0aW9uKS4gIE1vcmUgZm9ybWFsbHksCisgICAgICogcmVtb3ZlcyBhbiBlbGVtZW50IDx0dD5lPC90dD4gc3VjaCB0aGF0IDx0dD4obz09bnVsbCA/IGU9PW51bGwgOgorICAgICAqIG8uZXF1YWxzKGUpKTwvdHQ+LCBpZiB0aGUgbGlzdCBjb250YWlucyBvbmUgb3IgbW9yZSBzdWNoCisgICAgICogZWxlbWVudHMuICBSZXR1cm5zIDx0dD50cnVlPC90dD4gaWYgdGhlIGxpc3QgY29udGFpbmVkIHRoZQorICAgICAqIHNwZWNpZmllZCBlbGVtZW50IChvciBlcXVpdmFsZW50bHksIGlmIHRoZSBsaXN0IGNoYW5nZWQgYXMgYQorICAgICAqIHJlc3VsdCBvZiB0aGUgY2FsbCkuPHA+CisgICAgICoKKyAgICAgKiBAcGFyYW0gbyBlbGVtZW50IHRvIGJlIHJlbW92ZWQgZnJvbSB0aGlzIGxpc3QsIGlmIHByZXNlbnQuCisgICAgICogQHJldHVybiA8dHQ+dHJ1ZTwvdHQ+IGlmIHRoZSBsaXN0IGNvbnRhaW5lZCB0aGUgc3BlY2lmaWVkIGVsZW1lbnQuCisgICAgICovCisgICAgcHVibGljIGJvb2xlYW4gcmVtb3ZlKE9iamVjdCBvKSB7CisJaWYgKG8gPT0gbnVsbCkgeworICAgICAgICAgICAgZm9yIChpbnQgaW5kZXggPSAwOyBpbmRleCA8IHNpemU7IGluZGV4KyspCisJCWlmIChlbGVtZW50RGF0YVtpbmRleF0gPT0gbnVsbCkgeworCQkgICAgZmFzdFJlbW92ZShpbmRleCk7CisJCSAgICByZXR1cm4gdHJ1ZTsKKwkJfQorCX0gZWxzZSB7CisJICAgIGZvciAoaW50IGluZGV4ID0gMDsgaW5kZXggPCBzaXplOyBpbmRleCsrKQorCQlpZiAoby5lcXVhbHMoZWxlbWVudERhdGFbaW5kZXhdKSkgeworCQkgICAgZmFzdFJlbW92ZShpbmRleCk7CisJCSAgICByZXR1cm4gdHJ1ZTsKKwkJfQorICAgICAgICB9CisJcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIC8qCisgICAgICogUHJpdmF0ZSByZW1vdmUgbWV0aG9kIHRoYXQgc2tpcHMgYm91bmRzIGNoZWNraW5nIGFuZCBkb2VzIG5vdAorICAgICAqIHJldHVybiB0aGUgdmFsdWUgcmVtb3ZlZC4KKyAgICAgKi8KKyAgICBwcml2YXRlIHZvaWQgZmFzdFJlbW92ZShpbnQgaW5kZXgpIHsKKyAgICAgICAgbW9kQ291bnQrKzsKKyAgICAgICAgaW50IG51bU1vdmVkID0gc2l6ZSAtIGluZGV4IC0gMTsKKyAgICAgICAgaWYgKG51bU1vdmVkID4gMCkKKyAgICAgICAgICAgIFN5c3RlbS5hcnJheWNvcHkoZWxlbWVudERhdGEsIGluZGV4KzEsIGVsZW1lbnREYXRhLCBpbmRleCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bU1vdmVkKTsKKyAgICAgICAgZWxlbWVudERhdGFbLS1zaXplXSA9IG51bGw7IC8vIExldCBnYyBkbyBpdHMgd29yaworICAgIH0KKworICAgIC8qKgorICAgICAqIFJlbW92ZXMgYWxsIG9mIHRoZSBlbGVtZW50cyBmcm9tIHRoaXMgbGlzdC4gIFRoZSBsaXN0IHdpbGwKKyAgICAgKiBiZSBlbXB0eSBhZnRlciB0aGlzIGNhbGwgcmV0dXJucy4KKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBjbGVhcigpIHsKKwltb2RDb3VudCsrOworCisJLy8gTGV0IGdjIGRvIGl0cyB3b3JrCisJZm9yIChpbnQgaSA9IDA7IGkgPCBzaXplOyBpKyspCisJICAgIGVsZW1lbnREYXRhW2ldID0gbnVsbDsKKworCXNpemUgPSAwOworICAgIH0KKworICAgIC8qKgorICAgICAqIEFwcGVuZHMgYWxsIG9mIHRoZSBlbGVtZW50cyBpbiB0aGUgc3BlY2lmaWVkIENvbGxlY3Rpb24gdG8gdGhlIGVuZCBvZgorICAgICAqIHRoaXMgbGlzdCwgaW4gdGhlIG9yZGVyIHRoYXQgdGhleSBhcmUgcmV0dXJuZWQgYnkgdGhlCisgICAgICogc3BlY2lmaWVkIENvbGxlY3Rpb24ncyBJdGVyYXRvci4gIFRoZSBiZWhhdmlvciBvZiB0aGlzIG9wZXJhdGlvbiBpcworICAgICAqIHVuZGVmaW5lZCBpZiB0aGUgc3BlY2lmaWVkIENvbGxlY3Rpb24gaXMgbW9kaWZpZWQgd2hpbGUgdGhlIG9wZXJhdGlvbgorICAgICAqIGlzIGluIHByb2dyZXNzLiAgKFRoaXMgaW1wbGllcyB0aGF0IHRoZSBiZWhhdmlvciBvZiB0aGlzIGNhbGwgaXMKKyAgICAgKiB1bmRlZmluZWQgaWYgdGhlIHNwZWNpZmllZCBDb2xsZWN0aW9uIGlzIHRoaXMgbGlzdCwgYW5kIHRoaXMKKyAgICAgKiBsaXN0IGlzIG5vbmVtcHR5LikKKyAgICAgKgorICAgICAqIEBwYXJhbSBjIHRoZSBlbGVtZW50cyB0byBiZSBpbnNlcnRlZCBpbnRvIHRoaXMgbGlzdC4KKyAgICAgKiBAcmV0dXJuIDx0dD50cnVlPC90dD4gaWYgdGhpcyBsaXN0IGNoYW5nZWQgYXMgYSByZXN1bHQgb2YgdGhlIGNhbGwuCisgICAgICogQHRocm93cyAgICBOdWxsUG9pbnRlckV4Y2VwdGlvbiBpZiB0aGUgc3BlY2lmaWVkIGNvbGxlY3Rpb24gaXMgbnVsbC4KKyAgICAgKi8KKyAgICBwdWJsaWMgYm9vbGVhbiBhZGRBbGwoQ29sbGVjdGlvbjw/IGV4dGVuZHMgRT4gYykgeworCU9iamVjdFtdIGEgPSBjLnRvQXJyYXkoKTsKKyAgICAgICAgaW50IG51bU5ldyA9IGEubGVuZ3RoOworCWVuc3VyZUNhcGFjaXR5KHNpemUgKyBudW1OZXcpOyAgLy8gSW5jcmVtZW50cyBtb2RDb3VudAorICAgICAgICBTeXN0ZW0uYXJyYXljb3B5KGEsIDAsIGVsZW1lbnREYXRhLCBzaXplLCBudW1OZXcpOworICAgICAgICBzaXplICs9IG51bU5ldzsKKwlyZXR1cm4gbnVtTmV3ICE9IDA7CisgICAgfQorCisgICAgLyoqCisgICAgICogSW5zZXJ0cyBhbGwgb2YgdGhlIGVsZW1lbnRzIGluIHRoZSBzcGVjaWZpZWQgQ29sbGVjdGlvbiBpbnRvIHRoaXMKKyAgICAgKiBsaXN0LCBzdGFydGluZyBhdCB0aGUgc3BlY2lmaWVkIHBvc2l0aW9uLiAgU2hpZnRzIHRoZSBlbGVtZW50CisgICAgICogY3VycmVudGx5IGF0IHRoYXQgcG9zaXRpb24gKGlmIGFueSkgYW5kIGFueSBzdWJzZXF1ZW50IGVsZW1lbnRzIHRvCisgICAgICogdGhlIHJpZ2h0IChpbmNyZWFzZXMgdGhlaXIgaW5kaWNlcykuICBUaGUgbmV3IGVsZW1lbnRzIHdpbGwgYXBwZWFyCisgICAgICogaW4gdGhlIGxpc3QgaW4gdGhlIG9yZGVyIHRoYXQgdGhleSBhcmUgcmV0dXJuZWQgYnkgdGhlCisgICAgICogc3BlY2lmaWVkIENvbGxlY3Rpb24ncyBpdGVyYXRvci4KKyAgICAgKgorICAgICAqIEBwYXJhbSBpbmRleCBpbmRleCBhdCB3aGljaCB0byBpbnNlcnQgZmlyc3QgZWxlbWVudAorICAgICAqCQkgICAgZnJvbSB0aGUgc3BlY2lmaWVkIGNvbGxlY3Rpb24uCisgICAgICogQHBhcmFtIGMgZWxlbWVudHMgdG8gYmUgaW5zZXJ0ZWQgaW50byB0aGlzIGxpc3QuCisgICAgICogQHJldHVybiA8dHQ+dHJ1ZTwvdHQ+IGlmIHRoaXMgbGlzdCBjaGFuZ2VkIGFzIGEgcmVzdWx0IG9mIHRoZSBjYWxsLgorICAgICAqIEB0aHJvd3MgICAgSW5kZXhPdXRPZkJvdW5kc0V4Y2VwdGlvbiBpZiBpbmRleCBvdXQgb2YgcmFuZ2UgPHR0PihpbmRleAorICAgICAqCQkgICZsdDsgMCB8fCBpbmRleCAmZ3Q7IHNpemUoKSk8L3R0Pi4KKyAgICAgKiBAdGhyb3dzICAgIE51bGxQb2ludGVyRXhjZXB0aW9uIGlmIHRoZSBzcGVjaWZpZWQgQ29sbGVjdGlvbiBpcyBudWxsLgorICAgICAqLworICAgIHB1YmxpYyBib29sZWFuIGFkZEFsbChpbnQgaW5kZXgsIENvbGxlY3Rpb248PyBleHRlbmRzIEU+IGMpIHsKKwlpZiAoaW5kZXggPiBzaXplIHx8IGluZGV4IDwgMCkKKwkgICAgdGhyb3cgbmV3IEluZGV4T3V0T2ZCb3VuZHNFeGNlcHRpb24oCisJCSJJbmRleDogIiArIGluZGV4ICsgIiwgU2l6ZTogIiArIHNpemUpOworCisJT2JqZWN0W10gYSA9IGMudG9BcnJheSgpOworCWludCBudW1OZXcgPSBhLmxlbmd0aDsKKwllbnN1cmVDYXBhY2l0eShzaXplICsgbnVtTmV3KTsgIC8vIEluY3JlbWVudHMgbW9kQ291bnQKKworCWludCBudW1Nb3ZlZCA9IHNpemUgLSBpbmRleDsKKwlpZiAobnVtTW92ZWQgPiAwKQorCSAgICBTeXN0ZW0uYXJyYXljb3B5KGVsZW1lbnREYXRhLCBpbmRleCwgZWxlbWVudERhdGEsIGluZGV4ICsgbnVtTmV3LAorCQkJICAgICBudW1Nb3ZlZCk7CisKKyAgICAgICAgU3lzdGVtLmFycmF5Y29weShhLCAwLCBlbGVtZW50RGF0YSwgaW5kZXgsIG51bU5ldyk7CisJc2l6ZSArPSBudW1OZXc7CisJcmV0dXJuIG51bU5ldyAhPSAwOworICAgIH0KKworICAgIC8qKgorICAgICAqIFJlbW92ZXMgZnJvbSB0aGlzIExpc3QgYWxsIG9mIHRoZSBlbGVtZW50cyB3aG9zZSBpbmRleCBpcyBiZXR3ZWVuCisgICAgICogZnJvbUluZGV4LCBpbmNsdXNpdmUgYW5kIHRvSW5kZXgsIGV4Y2x1c2l2ZS4gIFNoaWZ0cyBhbnkgc3VjY2VlZGluZworICAgICAqIGVsZW1lbnRzIHRvIHRoZSBsZWZ0IChyZWR1Y2VzIHRoZWlyIGluZGV4KS4KKyAgICAgKiBUaGlzIGNhbGwgc2hvcnRlbnMgdGhlIGxpc3QgYnkgPHR0Pih0b0luZGV4IC0gZnJvbUluZGV4KTwvdHQ+IGVsZW1lbnRzLgorICAgICAqIChJZiA8dHQ+dG9JbmRleD09ZnJvbUluZGV4PC90dD4sIHRoaXMgb3BlcmF0aW9uIGhhcyBubyBlZmZlY3QuKQorICAgICAqCisgICAgICogQHBhcmFtIGZyb21JbmRleCBpbmRleCBvZiBmaXJzdCBlbGVtZW50IHRvIGJlIHJlbW92ZWQuCisgICAgICogQHBhcmFtIHRvSW5kZXggaW5kZXggYWZ0ZXIgbGFzdCBlbGVtZW50IHRvIGJlIHJlbW92ZWQuCisgICAgICovCisgICAgcHJvdGVjdGVkIHZvaWQgcmVtb3ZlUmFuZ2UoaW50IGZyb21JbmRleCwgaW50IHRvSW5kZXgpIHsKKwltb2RDb3VudCsrOworCWludCBudW1Nb3ZlZCA9IHNpemUgLSB0b0luZGV4OworICAgICAgICBTeXN0ZW0uYXJyYXljb3B5KGVsZW1lbnREYXRhLCB0b0luZGV4LCBlbGVtZW50RGF0YSwgZnJvbUluZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgIG51bU1vdmVkKTsKKworCS8vIExldCBnYyBkbyBpdHMgd29yaworCWludCBuZXdTaXplID0gc2l6ZSAtICh0b0luZGV4LWZyb21JbmRleCk7CisJd2hpbGUgKHNpemUgIT0gbmV3U2l6ZSkKKwkgICAgZWxlbWVudERhdGFbLS1zaXplXSA9IG51bGw7CisgICAgfQorCisgICAgLyoqCisgICAgICogQ2hlY2sgaWYgdGhlIGdpdmVuIGluZGV4IGlzIGluIHJhbmdlLiAgSWYgbm90LCB0aHJvdyBhbiBhcHByb3ByaWF0ZQorICAgICAqIHJ1bnRpbWUgZXhjZXB0aW9uLiAgVGhpcyBtZXRob2QgZG9lcyAqbm90KiBjaGVjayBpZiB0aGUgaW5kZXggaXMKKyAgICAgKiBuZWdhdGl2ZTogSXQgaXMgYWx3YXlzIHVzZWQgaW1tZWRpYXRlbHkgcHJpb3IgdG8gYW4gYXJyYXkgYWNjZXNzLAorICAgICAqIHdoaWNoIHRocm93cyBhbiBBcnJheUluZGV4T3V0T2ZCb3VuZHNFeGNlcHRpb24gaWYgaW5kZXggaXMgbmVnYXRpdmUuCisgICAgICovCisgICAgcHJpdmF0ZSB2b2lkIFJhbmdlQ2hlY2soaW50IGluZGV4KSB7CisJaWYgKGluZGV4ID49IHNpemUpCisJICAgIHRocm93IG5ldyBJbmRleE91dE9mQm91bmRzRXhjZXB0aW9uKAorCQkiSW5kZXg6ICIraW5kZXgrIiwgU2l6ZTogIitzaXplKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBTYXZlIHRoZSBzdGF0ZSBvZiB0aGUgPHR0PkFycmF5TGlzdDwvdHQ+IGluc3RhbmNlIHRvIGEgc3RyZWFtICh0aGF0CisgICAgICogaXMsIHNlcmlhbGl6ZSBpdCkuCisgICAgICoKKyAgICAgKiBAc2VyaWFsRGF0YSBUaGUgbGVuZ3RoIG9mIHRoZSBhcnJheSBiYWNraW5nIHRoZSA8dHQ+QXJyYXlMaXN0PC90dD4KKyAgICAgKiAgICAgICAgICAgICBpbnN0YW5jZSBpcyBlbWl0dGVkIChpbnQpLCBmb2xsb3dlZCBieSBhbGwgb2YgaXRzIGVsZW1lbnRzCisgICAgICogICAgICAgICAgICAgKGVhY2ggYW4gPHR0Pk9iamVjdDwvdHQ+KSBpbiB0aGUgcHJvcGVyIG9yZGVyLgorICAgICAqLworICAgIHByaXZhdGUgdm9pZCB3cml0ZU9iamVjdChqYXZhLmlvLk9iamVjdE91dHB1dFN0cmVhbSBzKQorICAgICAgICB0aHJvd3MgamF2YS5pby5JT0V4Y2VwdGlvbnsKKwkvLyBXcml0ZSBvdXQgZWxlbWVudCBjb3VudCwgYW5kIGFueSBoaWRkZW4gc3R1ZmYKKwlzLmRlZmF1bHRXcml0ZU9iamVjdCgpOworCisgICAgICAgIC8vIFdyaXRlIG91dCBhcnJheSBsZW5ndGgKKyAgICAgICAgcy53cml0ZUludChlbGVtZW50RGF0YS5sZW5ndGgpOworCisJLy8gV3JpdGUgb3V0IGFsbCBlbGVtZW50cyBpbiB0aGUgcHJvcGVyIG9yZGVyLgorCWZvciAoaW50IGk9MDsgaTxzaXplOyBpKyspCisgICAgICAgICAgICBzLndyaXRlT2JqZWN0KGVsZW1lbnREYXRhW2ldKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZWNvbnN0aXR1dGUgdGhlIDx0dD5BcnJheUxpc3Q8L3R0PiBpbnN0YW5jZSBmcm9tIGEgc3RyZWFtICh0aGF0IGlzLAorICAgICAqIGRlc2VyaWFsaXplIGl0KS4KKyAgICAgKi8KKyAgICBwcml2YXRlIHZvaWQgcmVhZE9iamVjdChqYXZhLmlvLk9iamVjdElucHV0U3RyZWFtIHMpCisgICAgICAgIHRocm93cyBqYXZhLmlvLklPRXhjZXB0aW9uLCBDbGFzc05vdEZvdW5kRXhjZXB0aW9uIHsKKwkvLyBSZWFkIGluIHNpemUsIGFuZCBhbnkgaGlkZGVuIHN0dWZmCisJcy5kZWZhdWx0UmVhZE9iamVjdCgpOworCisgICAgICAgIC8vIFJlYWQgaW4gYXJyYXkgbGVuZ3RoIGFuZCBhbGxvY2F0ZSBhcnJheQorICAgICAgICBpbnQgYXJyYXlMZW5ndGggPSBzLnJlYWRJbnQoKTsKKyAgICAgICAgT2JqZWN0W10gYSA9IGVsZW1lbnREYXRhID0gKEVbXSluZXcgT2JqZWN0W2FycmF5TGVuZ3RoXTsKKworCS8vIFJlYWQgaW4gYWxsIGVsZW1lbnRzIGluIHRoZSBwcm9wZXIgb3JkZXIuCisJZm9yIChpbnQgaT0wOyBpPHNpemU7IGkrKykKKyAgICAgICAgICAgIGFbaV0gPSBzLnJlYWRPYmplY3QoKTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvY29weUNsYXNzL211bHRpZmlsZS9wYWNrYWdlSGllcmFyY2h5L2FmdGVyL3AxL1MxLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvY29weUNsYXNzL211bHRpZmlsZS9wYWNrYWdlSGllcmFyY2h5L2FmdGVyL3AxL1MxLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmFmNTRkNwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9jb3B5Q2xhc3MvbXVsdGlmaWxlL3BhY2thZ2VIaWVyYXJjaHkvYWZ0ZXIvcDEvUzEuamF2YQpAQCAtMCwwICsxLDcgQEAKK3BhY2thZ2UgcDE7CitwdWJsaWMgY2xhc3MgUzEgeworICBTMiBzMjsKKyAgdm9pZCBmb28oKSB7CisgICAgczIuZm9vKCk7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvY29weUNsYXNzL211bHRpZmlsZS9wYWNrYWdlSGllcmFyY2h5L2FmdGVyL3AxL1MyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvY29weUNsYXNzL211bHRpZmlsZS9wYWNrYWdlSGllcmFyY2h5L2FmdGVyL3AxL1MyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDJkMDViNwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9jb3B5Q2xhc3MvbXVsdGlmaWxlL3BhY2thZ2VIaWVyYXJjaHkvYWZ0ZXIvcDEvUzIuamF2YQpAQCAtMCwwICsxLDcgQEAKK3BhY2thZ2UgcDE7CitwdWJsaWMgY2xhc3MgUzIgeworICBTMSBzMTsKKyAgdm9pZCBmb28oKSB7CisgICAgczEuZm9vKCk7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvY29weUNsYXNzL211bHRpZmlsZS9wYWNrYWdlSGllcmFyY2h5L2FmdGVyL3AxL3AxMS9TMTEuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9jb3B5Q2xhc3MvbXVsdGlmaWxlL3BhY2thZ2VIaWVyYXJjaHkvYWZ0ZXIvcDEvcDExL1MxMS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJlYmVjYTQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvY29weUNsYXNzL211bHRpZmlsZS9wYWNrYWdlSGllcmFyY2h5L2FmdGVyL3AxL3AxMS9TMTEuamF2YQpAQCAtMCwwICsxLDIgQEAKK3BhY2thZ2UgcDEucDExOworY2xhc3MgUzExIHt9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2NvcHlDbGFzcy9tdWx0aWZpbGUvcGFja2FnZUhpZXJhcmNoeS9hZnRlci9wMi9lbXB0eS50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvY29weUNsYXNzL211bHRpZmlsZS9wYWNrYWdlSGllcmFyY2h5L2FmdGVyL3AyL2VtcHR5LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjlkZTI5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2NvcHlDbGFzcy9tdWx0aWZpbGUvcGFja2FnZUhpZXJhcmNoeS9hZnRlci9wMi9lbXB0eS50eHQKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9jb3B5Q2xhc3MvbXVsdGlmaWxlL3BhY2thZ2VIaWVyYXJjaHkvYWZ0ZXIvcDIvcDEvUzEuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9jb3B5Q2xhc3MvbXVsdGlmaWxlL3BhY2thZ2VIaWVyYXJjaHkvYWZ0ZXIvcDIvcDEvUzEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYmU0MmMzCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2NvcHlDbGFzcy9tdWx0aWZpbGUvcGFja2FnZUhpZXJhcmNoeS9hZnRlci9wMi9wMS9TMS5qYXZhCkBAIC0wLDAgKzEsOCBAQAorcGFja2FnZSBwMi5wMTsKKworcHVibGljIGNsYXNzIFMxIHsKKyAgUzIgczI7CisgIHZvaWQgZm9vKCkgeworICAgIHMyLmZvbygpOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2NvcHlDbGFzcy9tdWx0aWZpbGUvcGFja2FnZUhpZXJhcmNoeS9hZnRlci9wMi9wMS9TMi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2NvcHlDbGFzcy9tdWx0aWZpbGUvcGFja2FnZUhpZXJhcmNoeS9hZnRlci9wMi9wMS9TMi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU3NWI1NzkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvY29weUNsYXNzL211bHRpZmlsZS9wYWNrYWdlSGllcmFyY2h5L2FmdGVyL3AyL3AxL1MyLmphdmEKQEAgLTAsMCArMSw4IEBACitwYWNrYWdlIHAyLnAxOworCitwdWJsaWMgY2xhc3MgUzIgeworICBTMSBzMTsKKyAgdm9pZCBmb28oKSB7CisgICAgczEuZm9vKCk7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvY29weUNsYXNzL211bHRpZmlsZS9wYWNrYWdlSGllcmFyY2h5L2FmdGVyL3AyL3AxL3AxMS9TMTEuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9jb3B5Q2xhc3MvbXVsdGlmaWxlL3BhY2thZ2VIaWVyYXJjaHkvYWZ0ZXIvcDIvcDEvcDExL1MxMS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFlNTliMDIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvY29weUNsYXNzL211bHRpZmlsZS9wYWNrYWdlSGllcmFyY2h5L2FmdGVyL3AyL3AxL3AxMS9TMTEuamF2YQpAQCAtMCwwICsxLDIgQEAKK3BhY2thZ2UgcDIucDEucDExOworY2xhc3MgUzExIHt9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2NvcHlDbGFzcy9tdWx0aWZpbGUvcGFja2FnZUhpZXJhcmNoeS9iZWZvcmUvcDEvUzEuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9jb3B5Q2xhc3MvbXVsdGlmaWxlL3BhY2thZ2VIaWVyYXJjaHkvYmVmb3JlL3AxL1MxLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmFmNTRkNwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9jb3B5Q2xhc3MvbXVsdGlmaWxlL3BhY2thZ2VIaWVyYXJjaHkvYmVmb3JlL3AxL1MxLmphdmEKQEAgLTAsMCArMSw3IEBACitwYWNrYWdlIHAxOworcHVibGljIGNsYXNzIFMxIHsKKyAgUzIgczI7CisgIHZvaWQgZm9vKCkgeworICAgIHMyLmZvbygpOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2NvcHlDbGFzcy9tdWx0aWZpbGUvcGFja2FnZUhpZXJhcmNoeS9iZWZvcmUvcDEvUzIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9jb3B5Q2xhc3MvbXVsdGlmaWxlL3BhY2thZ2VIaWVyYXJjaHkvYmVmb3JlL3AxL1MyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDJkMDViNwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9jb3B5Q2xhc3MvbXVsdGlmaWxlL3BhY2thZ2VIaWVyYXJjaHkvYmVmb3JlL3AxL1MyLmphdmEKQEAgLTAsMCArMSw3IEBACitwYWNrYWdlIHAxOworcHVibGljIGNsYXNzIFMyIHsKKyAgUzEgczE7CisgIHZvaWQgZm9vKCkgeworICAgIHMxLmZvbygpOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2NvcHlDbGFzcy9tdWx0aWZpbGUvcGFja2FnZUhpZXJhcmNoeS9iZWZvcmUvcDEvcDExL1MxMS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2NvcHlDbGFzcy9tdWx0aWZpbGUvcGFja2FnZUhpZXJhcmNoeS9iZWZvcmUvcDEvcDExL1MxMS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJlYmVjYTQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvY29weUNsYXNzL211bHRpZmlsZS9wYWNrYWdlSGllcmFyY2h5L2JlZm9yZS9wMS9wMTEvUzExLmphdmEKQEAgLTAsMCArMSwyIEBACitwYWNrYWdlIHAxLnAxMTsKK2NsYXNzIFMxMSB7fQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9jb3B5Q2xhc3MvbXVsdGlmaWxlL3BhY2thZ2VIaWVyYXJjaHkvYmVmb3JlL3AyL2VtcHR5LnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9jb3B5Q2xhc3MvbXVsdGlmaWxlL3BhY2thZ2VIaWVyYXJjaHkvYmVmb3JlL3AyL2VtcHR5LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjlkZTI5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2NvcHlDbGFzcy9tdWx0aWZpbGUvcGFja2FnZUhpZXJhcmNoeS9iZWZvcmUvcDIvZW1wdHkudHh0CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvY29weUNsYXNzL211bHRpZmlsZS9wYWNrYWdlTG9jYWxDbGFzc2VzL2FmdGVyL3AxL1MxLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvY29weUNsYXNzL211bHRpZmlsZS9wYWNrYWdlTG9jYWxDbGFzc2VzL2FmdGVyL3AxL1MxLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzJiZjZlNwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9jb3B5Q2xhc3MvbXVsdGlmaWxlL3BhY2thZ2VMb2NhbENsYXNzZXMvYWZ0ZXIvcDEvUzEuamF2YQpAQCAtMCwwICsxLDQgQEAKK3BhY2thZ2UgcDE7CitjbGFzcyBTMSB7CisgIFMyIHMyOworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9jb3B5Q2xhc3MvbXVsdGlmaWxlL3BhY2thZ2VMb2NhbENsYXNzZXMvYWZ0ZXIvcDEvUzIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9jb3B5Q2xhc3MvbXVsdGlmaWxlL3BhY2thZ2VMb2NhbENsYXNzZXMvYWZ0ZXIvcDEvUzIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMTYwMjI3Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2NvcHlDbGFzcy9tdWx0aWZpbGUvcGFja2FnZUxvY2FsQ2xhc3Nlcy9hZnRlci9wMS9TMi5qYXZhCkBAIC0wLDAgKzEsNCBAQAorcGFja2FnZSBwMTsKK2NsYXNzIFMyIHsKKyAgUzEgczE7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2NvcHlDbGFzcy9tdWx0aWZpbGUvcGFja2FnZUxvY2FsQ2xhc3Nlcy9hZnRlci9wMS9lbXB0eS50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvY29weUNsYXNzL211bHRpZmlsZS9wYWNrYWdlTG9jYWxDbGFzc2VzL2FmdGVyL3AxL2VtcHR5LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjlkZTI5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2NvcHlDbGFzcy9tdWx0aWZpbGUvcGFja2FnZUxvY2FsQ2xhc3Nlcy9hZnRlci9wMS9lbXB0eS50eHQKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9jb3B5Q2xhc3MvbXVsdGlmaWxlL3BhY2thZ2VMb2NhbENsYXNzZXMvYWZ0ZXIvcDIvUzEuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9jb3B5Q2xhc3MvbXVsdGlmaWxlL3BhY2thZ2VMb2NhbENsYXNzZXMvYWZ0ZXIvcDIvUzEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MjAxZjQ2Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2NvcHlDbGFzcy9tdWx0aWZpbGUvcGFja2FnZUxvY2FsQ2xhc3Nlcy9hZnRlci9wMi9TMS5qYXZhCkBAIC0wLDAgKzEsNSBAQAorcGFja2FnZSBwMjsKKworY2xhc3MgUzEgeworICBTMiBzMjsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvY29weUNsYXNzL211bHRpZmlsZS9wYWNrYWdlTG9jYWxDbGFzc2VzL2FmdGVyL3AyL1MyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvY29weUNsYXNzL211bHRpZmlsZS9wYWNrYWdlTG9jYWxDbGFzc2VzL2FmdGVyL3AyL1MyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjkyYjY0OQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9jb3B5Q2xhc3MvbXVsdGlmaWxlL3BhY2thZ2VMb2NhbENsYXNzZXMvYWZ0ZXIvcDIvUzIuamF2YQpAQCAtMCwwICsxLDUgQEAKK3BhY2thZ2UgcDI7CisKK2NsYXNzIFMyIHsKKyAgUzEgczE7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2NvcHlDbGFzcy9tdWx0aWZpbGUvcGFja2FnZUxvY2FsQ2xhc3Nlcy9hZnRlci9wMi9lbXB0eS50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvY29weUNsYXNzL211bHRpZmlsZS9wYWNrYWdlTG9jYWxDbGFzc2VzL2FmdGVyL3AyL2VtcHR5LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjlkZTI5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2NvcHlDbGFzcy9tdWx0aWZpbGUvcGFja2FnZUxvY2FsQ2xhc3Nlcy9hZnRlci9wMi9lbXB0eS50eHQKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9jb3B5Q2xhc3MvbXVsdGlmaWxlL3BhY2thZ2VMb2NhbENsYXNzZXMvYmVmb3JlL3AxL1MxLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvY29weUNsYXNzL211bHRpZmlsZS9wYWNrYWdlTG9jYWxDbGFzc2VzL2JlZm9yZS9wMS9TMS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcyYmY2ZTcKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvY29weUNsYXNzL211bHRpZmlsZS9wYWNrYWdlTG9jYWxDbGFzc2VzL2JlZm9yZS9wMS9TMS5qYXZhCkBAIC0wLDAgKzEsNCBAQAorcGFja2FnZSBwMTsKK2NsYXNzIFMxIHsKKyAgUzIgczI7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2NvcHlDbGFzcy9tdWx0aWZpbGUvcGFja2FnZUxvY2FsQ2xhc3Nlcy9iZWZvcmUvcDEvUzIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9jb3B5Q2xhc3MvbXVsdGlmaWxlL3BhY2thZ2VMb2NhbENsYXNzZXMvYmVmb3JlL3AxL1MyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTE2MDIyNwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9jb3B5Q2xhc3MvbXVsdGlmaWxlL3BhY2thZ2VMb2NhbENsYXNzZXMvYmVmb3JlL3AxL1MyLmphdmEKQEAgLTAsMCArMSw0IEBACitwYWNrYWdlIHAxOworY2xhc3MgUzIgeworICBTMSBzMTsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvY29weUNsYXNzL211bHRpZmlsZS9wYWNrYWdlTG9jYWxDbGFzc2VzL2JlZm9yZS9wMS9lbXB0eS50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvY29weUNsYXNzL211bHRpZmlsZS9wYWNrYWdlTG9jYWxDbGFzc2VzL2JlZm9yZS9wMS9lbXB0eS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY5ZGUyOQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9jb3B5Q2xhc3MvbXVsdGlmaWxlL3BhY2thZ2VMb2NhbENsYXNzZXMvYmVmb3JlL3AxL2VtcHR5LnR4dApkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2NvcHlDbGFzcy9tdWx0aWZpbGUvcGFja2FnZUxvY2FsQ2xhc3Nlcy9iZWZvcmUvcDIvZW1wdHkudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2NvcHlDbGFzcy9tdWx0aWZpbGUvcGFja2FnZUxvY2FsQ2xhc3Nlcy9iZWZvcmUvcDIvZW1wdHkudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2OWRlMjkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvY29weUNsYXNzL211bHRpZmlsZS9wYWNrYWdlTG9jYWxDbGFzc2VzL2JlZm9yZS9wMi9lbXB0eS50eHQKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9jb3B5Q2xhc3MvbXVsdGlmaWxlL3BhY2thZ2VMb2NhbE1ldGhvZHMvYWZ0ZXIvcDEvUzEuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9jb3B5Q2xhc3MvbXVsdGlmaWxlL3BhY2thZ2VMb2NhbE1ldGhvZHMvYWZ0ZXIvcDEvUzEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YWY1NGQ3Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2NvcHlDbGFzcy9tdWx0aWZpbGUvcGFja2FnZUxvY2FsTWV0aG9kcy9hZnRlci9wMS9TMS5qYXZhCkBAIC0wLDAgKzEsNyBAQAorcGFja2FnZSBwMTsKK3B1YmxpYyBjbGFzcyBTMSB7CisgIFMyIHMyOworICB2b2lkIGZvbygpIHsKKyAgICBzMi5mb28oKTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9jb3B5Q2xhc3MvbXVsdGlmaWxlL3BhY2thZ2VMb2NhbE1ldGhvZHMvYWZ0ZXIvcDEvUzIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9jb3B5Q2xhc3MvbXVsdGlmaWxlL3BhY2thZ2VMb2NhbE1ldGhvZHMvYWZ0ZXIvcDEvUzIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMmQwNWI3Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2NvcHlDbGFzcy9tdWx0aWZpbGUvcGFja2FnZUxvY2FsTWV0aG9kcy9hZnRlci9wMS9TMi5qYXZhCkBAIC0wLDAgKzEsNyBAQAorcGFja2FnZSBwMTsKK3B1YmxpYyBjbGFzcyBTMiB7CisgIFMxIHMxOworICB2b2lkIGZvbygpIHsKKyAgICBzMS5mb28oKTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9jb3B5Q2xhc3MvbXVsdGlmaWxlL3BhY2thZ2VMb2NhbE1ldGhvZHMvYWZ0ZXIvcDEvZW1wdHkudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2NvcHlDbGFzcy9tdWx0aWZpbGUvcGFja2FnZUxvY2FsTWV0aG9kcy9hZnRlci9wMS9lbXB0eS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY5ZGUyOQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9jb3B5Q2xhc3MvbXVsdGlmaWxlL3BhY2thZ2VMb2NhbE1ldGhvZHMvYWZ0ZXIvcDEvZW1wdHkudHh0CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvY29weUNsYXNzL211bHRpZmlsZS9wYWNrYWdlTG9jYWxNZXRob2RzL2FmdGVyL3AyL1MxLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvY29weUNsYXNzL211bHRpZmlsZS9wYWNrYWdlTG9jYWxNZXRob2RzL2FmdGVyL3AyL1MxLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjI5MjU3YQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9jb3B5Q2xhc3MvbXVsdGlmaWxlL3BhY2thZ2VMb2NhbE1ldGhvZHMvYWZ0ZXIvcDIvUzEuamF2YQpAQCAtMCwwICsxLDggQEAKK3BhY2thZ2UgcDI7CisKK3B1YmxpYyBjbGFzcyBTMSB7CisgIFMyIHMyOworICB2b2lkIGZvbygpIHsKKyAgICBzMi5mb28oKTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9jb3B5Q2xhc3MvbXVsdGlmaWxlL3BhY2thZ2VMb2NhbE1ldGhvZHMvYWZ0ZXIvcDIvUzIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9jb3B5Q2xhc3MvbXVsdGlmaWxlL3BhY2thZ2VMb2NhbE1ldGhvZHMvYWZ0ZXIvcDIvUzIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iY2M4NDFmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2NvcHlDbGFzcy9tdWx0aWZpbGUvcGFja2FnZUxvY2FsTWV0aG9kcy9hZnRlci9wMi9TMi5qYXZhCkBAIC0wLDAgKzEsOCBAQAorcGFja2FnZSBwMjsKKworcHVibGljIGNsYXNzIFMyIHsKKyAgUzEgczE7CisgIHZvaWQgZm9vKCkgeworICAgIHMxLmZvbygpOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2NvcHlDbGFzcy9tdWx0aWZpbGUvcGFja2FnZUxvY2FsTWV0aG9kcy9hZnRlci9wMi9lbXB0eS50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvY29weUNsYXNzL211bHRpZmlsZS9wYWNrYWdlTG9jYWxNZXRob2RzL2FmdGVyL3AyL2VtcHR5LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjlkZTI5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2NvcHlDbGFzcy9tdWx0aWZpbGUvcGFja2FnZUxvY2FsTWV0aG9kcy9hZnRlci9wMi9lbXB0eS50eHQKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9jb3B5Q2xhc3MvbXVsdGlmaWxlL3BhY2thZ2VMb2NhbE1ldGhvZHMvYmVmb3JlL3AxL1MxLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvY29weUNsYXNzL211bHRpZmlsZS9wYWNrYWdlTG9jYWxNZXRob2RzL2JlZm9yZS9wMS9TMS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZhZjU0ZDcKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvY29weUNsYXNzL211bHRpZmlsZS9wYWNrYWdlTG9jYWxNZXRob2RzL2JlZm9yZS9wMS9TMS5qYXZhCkBAIC0wLDAgKzEsNyBAQAorcGFja2FnZSBwMTsKK3B1YmxpYyBjbGFzcyBTMSB7CisgIFMyIHMyOworICB2b2lkIGZvbygpIHsKKyAgICBzMi5mb28oKTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9jb3B5Q2xhc3MvbXVsdGlmaWxlL3BhY2thZ2VMb2NhbE1ldGhvZHMvYmVmb3JlL3AxL1MyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvY29weUNsYXNzL211bHRpZmlsZS9wYWNrYWdlTG9jYWxNZXRob2RzL2JlZm9yZS9wMS9TMi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAyZDA1YjcKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvY29weUNsYXNzL211bHRpZmlsZS9wYWNrYWdlTG9jYWxNZXRob2RzL2JlZm9yZS9wMS9TMi5qYXZhCkBAIC0wLDAgKzEsNyBAQAorcGFja2FnZSBwMTsKK3B1YmxpYyBjbGFzcyBTMiB7CisgIFMxIHMxOworICB2b2lkIGZvbygpIHsKKyAgICBzMS5mb28oKTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9jb3B5Q2xhc3MvbXVsdGlmaWxlL3BhY2thZ2VMb2NhbE1ldGhvZHMvYmVmb3JlL3AxL2VtcHR5LnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9jb3B5Q2xhc3MvbXVsdGlmaWxlL3BhY2thZ2VMb2NhbE1ldGhvZHMvYmVmb3JlL3AxL2VtcHR5LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjlkZTI5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2NvcHlDbGFzcy9tdWx0aWZpbGUvcGFja2FnZUxvY2FsTWV0aG9kcy9iZWZvcmUvcDEvZW1wdHkudHh0CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvY29weUNsYXNzL211bHRpZmlsZS9wYWNrYWdlTG9jYWxNZXRob2RzL2JlZm9yZS9wMi9lbXB0eS50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvY29weUNsYXNzL211bHRpZmlsZS9wYWNrYWdlTG9jYWxNZXRob2RzL2JlZm9yZS9wMi9lbXB0eS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY5ZGUyOQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9jb3B5Q2xhc3MvbXVsdGlmaWxlL3BhY2thZ2VMb2NhbE1ldGhvZHMvYmVmb3JlL3AyL2VtcHR5LnR4dApkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2NvcHlDbGFzcy9tdWx0aWZpbGUvcGFja2FnZU9uZUxldmVsSGllcmFyY2h5L2FmdGVyL3AxL1MxLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvY29weUNsYXNzL211bHRpZmlsZS9wYWNrYWdlT25lTGV2ZWxIaWVyYXJjaHkvYWZ0ZXIvcDEvUzEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YWY1NGQ3Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2NvcHlDbGFzcy9tdWx0aWZpbGUvcGFja2FnZU9uZUxldmVsSGllcmFyY2h5L2FmdGVyL3AxL1MxLmphdmEKQEAgLTAsMCArMSw3IEBACitwYWNrYWdlIHAxOworcHVibGljIGNsYXNzIFMxIHsKKyAgUzIgczI7CisgIHZvaWQgZm9vKCkgeworICAgIHMyLmZvbygpOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2NvcHlDbGFzcy9tdWx0aWZpbGUvcGFja2FnZU9uZUxldmVsSGllcmFyY2h5L2FmdGVyL3AxL1MyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvY29weUNsYXNzL211bHRpZmlsZS9wYWNrYWdlT25lTGV2ZWxIaWVyYXJjaHkvYWZ0ZXIvcDEvUzIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMmQwNWI3Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2NvcHlDbGFzcy9tdWx0aWZpbGUvcGFja2FnZU9uZUxldmVsSGllcmFyY2h5L2FmdGVyL3AxL1MyLmphdmEKQEAgLTAsMCArMSw3IEBACitwYWNrYWdlIHAxOworcHVibGljIGNsYXNzIFMyIHsKKyAgUzEgczE7CisgIHZvaWQgZm9vKCkgeworICAgIHMxLmZvbygpOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2NvcHlDbGFzcy9tdWx0aWZpbGUvcGFja2FnZU9uZUxldmVsSGllcmFyY2h5L2FmdGVyL3AyL2VtcHR5LnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9jb3B5Q2xhc3MvbXVsdGlmaWxlL3BhY2thZ2VPbmVMZXZlbEhpZXJhcmNoeS9hZnRlci9wMi9lbXB0eS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY5ZGUyOQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9jb3B5Q2xhc3MvbXVsdGlmaWxlL3BhY2thZ2VPbmVMZXZlbEhpZXJhcmNoeS9hZnRlci9wMi9lbXB0eS50eHQKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9jb3B5Q2xhc3MvbXVsdGlmaWxlL3BhY2thZ2VPbmVMZXZlbEhpZXJhcmNoeS9hZnRlci9wMi9wMS9TMS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2NvcHlDbGFzcy9tdWx0aWZpbGUvcGFja2FnZU9uZUxldmVsSGllcmFyY2h5L2FmdGVyL3AyL3AxL1MxLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWJlNDJjMwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9jb3B5Q2xhc3MvbXVsdGlmaWxlL3BhY2thZ2VPbmVMZXZlbEhpZXJhcmNoeS9hZnRlci9wMi9wMS9TMS5qYXZhCkBAIC0wLDAgKzEsOCBAQAorcGFja2FnZSBwMi5wMTsKKworcHVibGljIGNsYXNzIFMxIHsKKyAgUzIgczI7CisgIHZvaWQgZm9vKCkgeworICAgIHMyLmZvbygpOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2NvcHlDbGFzcy9tdWx0aWZpbGUvcGFja2FnZU9uZUxldmVsSGllcmFyY2h5L2FmdGVyL3AyL3AxL1MyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvY29weUNsYXNzL211bHRpZmlsZS9wYWNrYWdlT25lTGV2ZWxIaWVyYXJjaHkvYWZ0ZXIvcDIvcDEvUzIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNzViNTc5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2NvcHlDbGFzcy9tdWx0aWZpbGUvcGFja2FnZU9uZUxldmVsSGllcmFyY2h5L2FmdGVyL3AyL3AxL1MyLmphdmEKQEAgLTAsMCArMSw4IEBACitwYWNrYWdlIHAyLnAxOworCitwdWJsaWMgY2xhc3MgUzIgeworICBTMSBzMTsKKyAgdm9pZCBmb28oKSB7CisgICAgczEuZm9vKCk7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvY29weUNsYXNzL211bHRpZmlsZS9wYWNrYWdlT25lTGV2ZWxIaWVyYXJjaHkvYmVmb3JlL3AxL1MxLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvY29weUNsYXNzL211bHRpZmlsZS9wYWNrYWdlT25lTGV2ZWxIaWVyYXJjaHkvYmVmb3JlL3AxL1MxLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmFmNTRkNwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9jb3B5Q2xhc3MvbXVsdGlmaWxlL3BhY2thZ2VPbmVMZXZlbEhpZXJhcmNoeS9iZWZvcmUvcDEvUzEuamF2YQpAQCAtMCwwICsxLDcgQEAKK3BhY2thZ2UgcDE7CitwdWJsaWMgY2xhc3MgUzEgeworICBTMiBzMjsKKyAgdm9pZCBmb28oKSB7CisgICAgczIuZm9vKCk7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvY29weUNsYXNzL211bHRpZmlsZS9wYWNrYWdlT25lTGV2ZWxIaWVyYXJjaHkvYmVmb3JlL3AxL1MyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvY29weUNsYXNzL211bHRpZmlsZS9wYWNrYWdlT25lTGV2ZWxIaWVyYXJjaHkvYmVmb3JlL3AxL1MyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDJkMDViNwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9jb3B5Q2xhc3MvbXVsdGlmaWxlL3BhY2thZ2VPbmVMZXZlbEhpZXJhcmNoeS9iZWZvcmUvcDEvUzIuamF2YQpAQCAtMCwwICsxLDcgQEAKK3BhY2thZ2UgcDE7CitwdWJsaWMgY2xhc3MgUzIgeworICBTMSBzMTsKKyAgdm9pZCBmb28oKSB7CisgICAgczEuZm9vKCk7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvY29weUNsYXNzL211bHRpZmlsZS9wYWNrYWdlT25lTGV2ZWxIaWVyYXJjaHkvYmVmb3JlL3AyL2VtcHR5LnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9jb3B5Q2xhc3MvbXVsdGlmaWxlL3BhY2thZ2VPbmVMZXZlbEhpZXJhcmNoeS9iZWZvcmUvcDIvZW1wdHkudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2OWRlMjkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvY29weUNsYXNzL211bHRpZmlsZS9wYWNrYWdlT25lTGV2ZWxIaWVyYXJjaHkvYmVmb3JlL3AyL2VtcHR5LnR4dApkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2NvcHlDbGFzcy9yZXBsYWNlQWxsT2NjdXJyZW5jZXMvQmFyLmV4cGVjdGVkLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvY29weUNsYXNzL3JlcGxhY2VBbGxPY2N1cnJlbmNlcy9CYXIuZXhwZWN0ZWQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYTQ3OWMzCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2NvcHlDbGFzcy9yZXBsYWNlQWxsT2NjdXJyZW5jZXMvQmFyLmV4cGVjdGVkLmphdmEKQEAgLTAsMCArMSw5IEBACitwdWJsaWMgY2xhc3MgQmFyIHsKKworICAgIHB1YmxpYyBzdGF0aWMgQmFyIGNyZWF0ZUluc3RhbmNlKCkgeworICAgICAgICByZXR1cm4gbmV3IEJhcigpOworICAgIH0KKworICAgIHByaXZhdGUgQmFyKCkgeworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvY29weUNsYXNzL3JlcGxhY2VBbGxPY2N1cnJlbmNlcy9Gb28uamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9jb3B5Q2xhc3MvcmVwbGFjZUFsbE9jY3VycmVuY2VzL0Zvby5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM4NWJkNWMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvY29weUNsYXNzL3JlcGxhY2VBbGxPY2N1cnJlbmNlcy9Gb28uamF2YQpAQCAtMCwwICsxLDkgQEAKK3B1YmxpYyBjbGFzcyBGb28geworCisgICAgcHVibGljIHN0YXRpYyBGb28gY3JlYXRlSW5zdGFuY2UoKSB7CisgICAgICAgIHJldHVybiBuZXcgRm9vKCk7CisgICAgfQorCisgICAgcHJpdmF0ZSBGb28oKSB7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9kbmRNb3ZlL3B1YmxpY0phdmFDbGFzcy9kL015Q2xhc3MuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9kbmRNb3ZlL3B1YmxpY0phdmFDbGFzcy9kL015Q2xhc3MuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MGY0MmMzCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2RuZE1vdmUvcHVibGljSmF2YUNsYXNzL2QvTXlDbGFzcy5qYXZhCkBAIC0wLDAgKzEsMiBAQAorcGFja2FnZSBkOworcHVibGljIGNsYXNzIE15Q2xhc3N7fQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9kbmRNb3ZlL3NlY29uZEphdmFDbGFzcy9kL015Q2xhc3MuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9kbmRNb3ZlL3NlY29uZEphdmFDbGFzcy9kL015Q2xhc3MuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OGFkNzNhCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2RuZE1vdmUvc2Vjb25kSmF2YUNsYXNzL2QvTXlDbGFzcy5qYXZhCkBAIC0wLDAgKzEsNSBAQAorcGFja2FnZSBkOworCitwdWJsaWMgY2xhc3MgTXlDbGFzc3t9CisKK2NsYXNzIFNlY29uZHt9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2VuY2Fwc3VsYXRlRmllbGRzL2FscmVhZHlFeGlzdC9hZnRlci9UZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZW5jYXBzdWxhdGVGaWVsZHMvYWxyZWFkeUV4aXN0L2FmdGVyL1Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNTdkN2YzCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2VuY2Fwc3VsYXRlRmllbGRzL2FscmVhZHlFeGlzdC9hZnRlci9UZXN0LmphdmEKQEAgLTAsMCArMSwxOCBAQAorY2xhc3MgVGVzdCB7CisgIGludCBpOworICBpbnQgZ2V0SSgpIHsKKyAgICByZXR1cm4gaTsKKyAgfQorCisgIHZvaWQgZm9vKCkgeworICAgIHNldEkoZ2V0SSgpICsgMSk7CisgICAgU3lzdGVtLm91dC5wcmludGxuKGdldEkoKSk7CisKKyAgICBUZXN0IHQ7CisgICAgc2V0SSh0LmdldEkoKSk7CisgIH0KKworICAgIHB1YmxpYyB2b2lkIHNldEkoaW50IGkpIHsKKyAgICAgICAgdGhpcy5pID0gaTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZW5jYXBzdWxhdGVGaWVsZHMvYWxyZWFkeUV4aXN0L2JlZm9yZS9UZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZW5jYXBzdWxhdGVGaWVsZHMvYWxyZWFkeUV4aXN0L2JlZm9yZS9UZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTBhZmM1NQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9lbmNhcHN1bGF0ZUZpZWxkcy9hbHJlYWR5RXhpc3QvYmVmb3JlL1Rlc3QuamF2YQpAQCAtMCwwICsxLDE0IEBACitjbGFzcyBUZXN0IHsKKyAgaW50IGk7CisgIGludCBnZXRJKCkgeworICAgIHJldHVybiBpOworICB9CisKKyAgdm9pZCBmb28oKSB7CisgICAgaSsrOworICAgIFN5c3RlbS5vdXQucHJpbnRsbihnZXRJKCkpOworCisgICAgVGVzdCB0OworICAgIGkgPSB0Lmk7CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9lbmNhcHN1bGF0ZUZpZWxkcy9kaWZmV2l0aFJldHVyblR5cGVPbmx5L2FmdGVyL1Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9lbmNhcHN1bGF0ZUZpZWxkcy9kaWZmV2l0aFJldHVyblR5cGVPbmx5L2FmdGVyL1Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYzIyOGQ3Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2VuY2Fwc3VsYXRlRmllbGRzL2RpZmZXaXRoUmV0dXJuVHlwZU9ubHkvYWZ0ZXIvVGVzdC5qYXZhCkBAIC0wLDAgKzEsMTEgQEAKK2NsYXNzIFRlc3QgeworICBpbnQgaTsKKyAgaW50IGdldEkoKSB7CisgICAgcmV0dXJuIGk7CisgIH0KKworICBUZXN0IHNldEkoaW50IGkpIHsKKyAgICB0aGlzLmkgPSBpOworICAgIHJldHVybiB0aGlzOworICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZW5jYXBzdWxhdGVGaWVsZHMvZGlmZldpdGhSZXR1cm5UeXBlT25seS9iZWZvcmUvVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2VuY2Fwc3VsYXRlRmllbGRzL2RpZmZXaXRoUmV0dXJuVHlwZU9ubHkvYmVmb3JlL1Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYzIyOGQ3Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2VuY2Fwc3VsYXRlRmllbGRzL2RpZmZXaXRoUmV0dXJuVHlwZU9ubHkvYmVmb3JlL1Rlc3QuamF2YQpAQCAtMCwwICsxLDExIEBACitjbGFzcyBUZXN0IHsKKyAgaW50IGk7CisgIGludCBnZXRJKCkgeworICAgIHJldHVybiBpOworICB9CisKKyAgVGVzdCBzZXRJKGludCBpKSB7CisgICAgdGhpcy5pID0gaTsKKyAgICByZXR1cm4gdGhpczsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2VuY2Fwc3VsYXRlRmllbGRzL2RpZmZXaXRoUmV0dXJuVHlwZU9ubHlJbkhpZXJhcmNoeS9hZnRlci9UZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZW5jYXBzdWxhdGVGaWVsZHMvZGlmZldpdGhSZXR1cm5UeXBlT25seUluSGllcmFyY2h5L2FmdGVyL1Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZTUzZGVhCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2VuY2Fwc3VsYXRlRmllbGRzL2RpZmZXaXRoUmV0dXJuVHlwZU9ubHlJbkhpZXJhcmNoeS9hZnRlci9UZXN0LmphdmEKQEAgLTAsMCArMSwxMiBAQAorcHVibGljIGNsYXNzIFRlc3QgZXh0ZW5kcyBTdXBlcnsKKyAgaW50IGk7CisgIGludCBnZXRJKCkgeworICAgIHJldHVybiBpOworICB9Cit9CisKK2NsYXNzIFN1cGVyIHsKKyAgU3VwZXIgc2V0SShpbnQgaSkgeworICAgIHJldHVybiB0aGlzOworICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZW5jYXBzdWxhdGVGaWVsZHMvZGlmZldpdGhSZXR1cm5UeXBlT25seUluSGllcmFyY2h5L2JlZm9yZS9UZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZW5jYXBzdWxhdGVGaWVsZHMvZGlmZldpdGhSZXR1cm5UeXBlT25seUluSGllcmFyY2h5L2JlZm9yZS9UZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGU1M2RlYQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9lbmNhcHN1bGF0ZUZpZWxkcy9kaWZmV2l0aFJldHVyblR5cGVPbmx5SW5IaWVyYXJjaHkvYmVmb3JlL1Rlc3QuamF2YQpAQCAtMCwwICsxLDEyIEBACitwdWJsaWMgY2xhc3MgVGVzdCBleHRlbmRzIFN1cGVyeworICBpbnQgaTsKKyAgaW50IGdldEkoKSB7CisgICAgcmV0dXJuIGk7CisgIH0KK30KKworY2xhc3MgU3VwZXIgeworICBTdXBlciBzZXRJKGludCBpKSB7CisgICAgcmV0dXJuIHRoaXM7CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9lbmNhcHN1bGF0ZUZpZWxkcy9oaWRlT3V0ZXJjbGFzc01ldGhvZC9hZnRlci9UZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZW5jYXBzdWxhdGVGaWVsZHMvaGlkZU91dGVyY2xhc3NNZXRob2QvYWZ0ZXIvVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFkNGI3ZjUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZW5jYXBzdWxhdGVGaWVsZHMvaGlkZU91dGVyY2xhc3NNZXRob2QvYWZ0ZXIvVGVzdC5qYXZhCkBAIC0wLDAgKzEsMTcgQEAKK3B1YmxpYyBjbGFzcyBBIHsKKyAgc3RhdGljIGludCBnZXRJKCkgeworICAgIHJldHVybiAyMzsKKyAgfQorCisgIHN0YXRpYyBjbGFzcyBCIHsKKyAgICBzdGF0aWMgcHJpdmF0ZSBpbnQgaSA9IDQyOworCisgICAgc3RhdGljIGludCBtKCkgeworICAgICAgcmV0dXJuIGdldEkoKTsKKyAgICB9CisgIH0KKworICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisgICAgU3lzdGVtLm91dC5wcmludGxuKEIubSgpKTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2VuY2Fwc3VsYXRlRmllbGRzL2hpZGVPdXRlcmNsYXNzTWV0aG9kL2JlZm9yZS9UZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZW5jYXBzdWxhdGVGaWVsZHMvaGlkZU91dGVyY2xhc3NNZXRob2QvYmVmb3JlL1Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZDRiN2Y1Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2VuY2Fwc3VsYXRlRmllbGRzL2hpZGVPdXRlcmNsYXNzTWV0aG9kL2JlZm9yZS9UZXN0LmphdmEKQEAgLTAsMCArMSwxNyBAQAorcHVibGljIGNsYXNzIEEgeworICBzdGF0aWMgaW50IGdldEkoKSB7CisgICAgcmV0dXJuIDIzOworICB9CisKKyAgc3RhdGljIGNsYXNzIEIgeworICAgIHN0YXRpYyBwcml2YXRlIGludCBpID0gNDI7CisKKyAgICBzdGF0aWMgaW50IG0oKSB7CisgICAgICByZXR1cm4gZ2V0SSgpOworICAgIH0KKyAgfQorCisgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oQi5tKCkpOworICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZW5jYXBzdWxhdGVGaWVsZHMvaGlkZU92ZXJyaWRlck1ldGhvZC9hZnRlci9UZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZW5jYXBzdWxhdGVGaWVsZHMvaGlkZU92ZXJyaWRlck1ldGhvZC9hZnRlci9UZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGQ3N2U5YgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9lbmNhcHN1bGF0ZUZpZWxkcy9oaWRlT3ZlcnJpZGVyTWV0aG9kL2FmdGVyL1Rlc3QuamF2YQpAQCAtMCwwICsxLDE1IEBACitwdWJsaWMgY2xhc3MgQSB7CisgIHB1YmxpYyBpbnQgaTsKK30KKworY2xhc3MgQiBleHRlbmRzIEEgeworICBwdWJsaWMgaW50IGdldEkoKSB7CisgICAgcmV0dXJuIDQyOworICB9CisKKyAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworICAgIEEgYSA9IG5ldyBCKCk7CisgICAgYS5pID0gMjM7CisgICAgU3lzdGVtLm91dC5wcmludGxuKGEuaSk7CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9lbmNhcHN1bGF0ZUZpZWxkcy9oaWRlT3ZlcnJpZGVyTWV0aG9kL2JlZm9yZS9UZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZW5jYXBzdWxhdGVGaWVsZHMvaGlkZU92ZXJyaWRlck1ldGhvZC9iZWZvcmUvVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRkNzdlOWIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZW5jYXBzdWxhdGVGaWVsZHMvaGlkZU92ZXJyaWRlck1ldGhvZC9iZWZvcmUvVGVzdC5qYXZhCkBAIC0wLDAgKzEsMTUgQEAKK3B1YmxpYyBjbGFzcyBBIHsKKyAgcHVibGljIGludCBpOworfQorCitjbGFzcyBCIGV4dGVuZHMgQSB7CisgIHB1YmxpYyBpbnQgZ2V0SSgpIHsKKyAgICByZXR1cm4gNDI7CisgIH0KKworICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisgICAgQSBhID0gbmV3IEIoKTsKKyAgICBhLmkgPSAyMzsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oYS5pKTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2VuY2Fwc3VsYXRlRmllbGRzL21vdmVKYXZhZG9jVG9HZXR0ZXIvYWZ0ZXIvVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2VuY2Fwc3VsYXRlRmllbGRzL21vdmVKYXZhZG9jVG9HZXR0ZXIvYWZ0ZXIvVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNhNTAxODgKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZW5jYXBzdWxhdGVGaWVsZHMvbW92ZUphdmFkb2NUb0dldHRlci9hZnRlci9UZXN0LmphdmEKQEAgLTAsMCArMSwyMSBAQAorcHVibGljIGNsYXNzIEEgeworICBwdWJsaWMgaW50IGk7CisKKworICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisgICAgQSBhID0gbmV3IEIoKTsKKyAgICBhLnNldEkoMjMpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbihhLmdldEkoKSk7CisgIH0KKworICAgIC8qKgorICAgICAqIG15IGphdmFkb2MgZm9yIGZpZWxkCisgICAgICovCisgICAgcHVibGljIGludCBnZXRJKCkgeworICAgICAgICByZXR1cm4gaTsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBzZXRJKGludCBpKSB7CisgICAgICAgIHRoaXMuaSA9IGk7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2VuY2Fwc3VsYXRlRmllbGRzL21vdmVKYXZhZG9jVG9HZXR0ZXIvYmVmb3JlL1Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9lbmNhcHN1bGF0ZUZpZWxkcy9tb3ZlSmF2YWRvY1RvR2V0dGVyL2JlZm9yZS9UZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWE2MzQ1MQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9lbmNhcHN1bGF0ZUZpZWxkcy9tb3ZlSmF2YWRvY1RvR2V0dGVyL2JlZm9yZS9UZXN0LmphdmEKQEAgLTAsMCArMSwxMyBAQAorcHVibGljIGNsYXNzIEEgeworICAvKioKKyAgICogbXkgamF2YWRvYyBmb3IgZmllbGQKKyAgICovCisgIHB1YmxpYyBpbnQgaTsKKworCisgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKyAgICBBIGEgPSBuZXcgQigpOworICAgIGEuaSA9IDIzOworICAgIFN5c3RlbS5vdXQucHJpbnRsbihhLmkpOworICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdENsYXNzL2NvbnN0cnVjdG9yUGFyYW1zL2FmdGVyL0V4dHJhY3RlZC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RDbGFzcy9jb25zdHJ1Y3RvclBhcmFtcy9hZnRlci9FeHRyYWN0ZWQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZDkxMTc1Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RDbGFzcy9jb25zdHJ1Y3RvclBhcmFtcy9hZnRlci9FeHRyYWN0ZWQuamF2YQpAQCAtMCwwICsxLDEzIEBACitwdWJsaWMgY2xhc3MgRXh0cmFjdGVkIHsKKyAgICBwcml2YXRlIGZpbmFsIFRlc3QgdGVzdDsKKyAgICBTdHJpbmcgbXlUOworCisgICAgcHVibGljIEV4dHJhY3RlZChUZXN0IHRlc3QpIHsKKyAgICAgICAgdGhpcy50ZXN0ID0gdGVzdDsKKyAgICAgICAgdGhpcy5teVQgPSB0ZXN0LmZvbygpOworICAgIH0KKworICAgIHZvaWQgYmFyKCkgeworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4obXlUKTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RDbGFzcy9jb25zdHJ1Y3RvclBhcmFtcy9hZnRlci9UZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdENsYXNzL2NvbnN0cnVjdG9yUGFyYW1zL2FmdGVyL1Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OTVmODk1Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RDbGFzcy9jb25zdHJ1Y3RvclBhcmFtcy9hZnRlci9UZXN0LmphdmEKQEAgLTAsMCArMSwxNSBAQAorY2xhc3MgVGVzdCB7CisgICAgZmluYWwgRXh0cmFjdGVkIGV4dHJhY3RlZCA9IG5ldyBFeHRyYWN0ZWQodGhpcyk7CisKKyAgICB2b2lkIGJhcigpeworICAgICAgICBleHRyYWN0ZWQuYmFyKCk7CisgICAgfQorCisgIFN0cmluZyBmb28oKSB7CisgICAgcmV0dXJuICIiOworICB9CisKKyAgdm9pZCBiYXp6KCkgeworICAgICAgZXh0cmFjdGVkLmJhcigpOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RDbGFzcy9jb25zdHJ1Y3RvclBhcmFtcy9iZWZvcmUvVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RDbGFzcy9jb25zdHJ1Y3RvclBhcmFtcy9iZWZvcmUvVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMzMTEyODAKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdENsYXNzL2NvbnN0cnVjdG9yUGFyYW1zL2JlZm9yZS9UZXN0LmphdmEKQEAgLTAsMCArMSwxNSBAQAorY2xhc3MgVGVzdCB7CisgIFN0cmluZyBteVQgPSBmb28oKTsKKworICB2b2lkIGJhcigpeworICAgIFN5c3RlbS5vdXQucHJpbnRsbihteVQpOworICB9CisKKyAgU3RyaW5nIGZvbygpIHsKKyAgICByZXR1cm4gIiI7CisgIH0KKworICB2b2lkIGJhenooKSB7CisgICAgYmFyKCk7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdENsYXNzL2RlcGVuZGFudEZpZWxkSW5pdGlhbGl6ZXJzL2FmdGVyL0V4dHJhY3RlZC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RDbGFzcy9kZXBlbmRhbnRGaWVsZEluaXRpYWxpemVycy9hZnRlci9FeHRyYWN0ZWQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MDg4OWE2Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RDbGFzcy9kZXBlbmRhbnRGaWVsZEluaXRpYWxpemVycy9hZnRlci9FeHRyYWN0ZWQuamF2YQpAQCAtMCwwICsxLDcgQEAKK3B1YmxpYyBjbGFzcyBFeHRyYWN0ZWQgeworICAgIHN0YXRpYyBmaW5hbCBpbnRbXSBteVQ7CisKKyAgICBwdWJsaWMgRXh0cmFjdGVkKCkgeworICAgICAgICB0aGlzLm15VCA9IG5ldyBpbnRbXXtUZXN0LmlpfTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RDbGFzcy9kZXBlbmRhbnRGaWVsZEluaXRpYWxpemVycy9hZnRlci9UZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdENsYXNzL2RlcGVuZGFudEZpZWxkSW5pdGlhbGl6ZXJzL2FmdGVyL1Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOGFiMWMwCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RDbGFzcy9kZXBlbmRhbnRGaWVsZEluaXRpYWxpemVycy9hZnRlci9UZXN0LmphdmEKQEAgLTAsMCArMSwzIEBACitjbGFzcyBUZXN0IHsKKyAgc3RhdGljIGZpbmFsIGludCBpaSA9IDE7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RDbGFzcy9kZXBlbmRhbnRGaWVsZEluaXRpYWxpemVycy9iZWZvcmUvVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RDbGFzcy9kZXBlbmRhbnRGaWVsZEluaXRpYWxpemVycy9iZWZvcmUvVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVjMTE1NTEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdENsYXNzL2RlcGVuZGFudEZpZWxkSW5pdGlhbGl6ZXJzL2JlZm9yZS9UZXN0LmphdmEKQEAgLTAsMCArMSw0IEBACitjbGFzcyBUZXN0IHsKKyAgc3RhdGljIGZpbmFsIGludCBpaSA9IDE7CisgIHN0YXRpYyBmaW5hbCBpbnRbXSBteVQgPSB7aWl9OworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0Q2xhc3MvZGVwZW5kYW50Tm9uU3RhdGljRmllbGRJbml0aWFsaXplcnMvYWZ0ZXIvRXh0cmFjdGVkLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdENsYXNzL2RlcGVuZGFudE5vblN0YXRpY0ZpZWxkSW5pdGlhbGl6ZXJzL2FmdGVyL0V4dHJhY3RlZC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlhZGJlOGYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdENsYXNzL2RlcGVuZGFudE5vblN0YXRpY0ZpZWxkSW5pdGlhbGl6ZXJzL2FmdGVyL0V4dHJhY3RlZC5qYXZhCkBAIC0wLDAgKzEsOSBAQAorcHVibGljIGNsYXNzIEV4dHJhY3RlZCB7CisgICAgcHJpdmF0ZSBmaW5hbCBUZXN0IHRlc3Q7CisgICAgaW50W10gbXlUOworCisgICAgcHVibGljIEV4dHJhY3RlZChUZXN0IHRlc3QpIHsKKyAgICAgICAgdGhpcy50ZXN0ID0gdGVzdDsKKyAgICAgICAgdGhpcy5teVQgPSBuZXcgaW50W117dGVzdC5nZXRJaSgpfTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RDbGFzcy9kZXBlbmRhbnROb25TdGF0aWNGaWVsZEluaXRpYWxpemVycy9hZnRlci9UZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdENsYXNzL2RlcGVuZGFudE5vblN0YXRpY0ZpZWxkSW5pdGlhbGl6ZXJzL2FmdGVyL1Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NDNmZmNlCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RDbGFzcy9kZXBlbmRhbnROb25TdGF0aWNGaWVsZEluaXRpYWxpemVycy9hZnRlci9UZXN0LmphdmEKQEAgLTAsMCArMSw3IEBACitjbGFzcyBUZXN0IHsKKyAgaW50IGlpID0gMTsKKworICAgIHB1YmxpYyBpbnQgZ2V0SWkoKSB7CisgICAgICAgIHJldHVybiBpaTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RDbGFzcy9kZXBlbmRhbnROb25TdGF0aWNGaWVsZEluaXRpYWxpemVycy9iZWZvcmUvVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RDbGFzcy9kZXBlbmRhbnROb25TdGF0aWNGaWVsZEluaXRpYWxpemVycy9iZWZvcmUvVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYyNGE0YTAKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdENsYXNzL2RlcGVuZGFudE5vblN0YXRpY0ZpZWxkSW5pdGlhbGl6ZXJzL2JlZm9yZS9UZXN0LmphdmEKQEAgLTAsMCArMSw0IEBACitjbGFzcyBUZXN0IHsKKyAgaW50IGlpID0gMTsKKyAgaW50W10gbXlUID0ge2lpfTsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdENsYXNzL2VudW1Td2l0Y2gvYWZ0ZXIvRXh0cmFjdGVkLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdENsYXNzL2VudW1Td2l0Y2gvYWZ0ZXIvRXh0cmFjdGVkLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDg2ZTFiNgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0Q2xhc3MvZW51bVN3aXRjaC9hZnRlci9FeHRyYWN0ZWQuamF2YQpAQCAtMCwwICsxLDExIEBACitwdWJsaWMgY2xhc3MgRXh0cmFjdGVkIHsKKyAgICBzdGF0aWMgdm9pZCBmb28oVGVzdCB0KSB7CisgICAgICAgIHN3aXRjaCAocCkgeworICAgICAgICAgICAgY2FzZSBGUkVEOgorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNlIEdFT1JHRToKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdENsYXNzL2VudW1Td2l0Y2gvYWZ0ZXIvVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RDbGFzcy9lbnVtU3dpdGNoL2FmdGVyL1Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZjhiOWQ5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RDbGFzcy9lbnVtU3dpdGNoL2FmdGVyL1Rlc3QuamF2YQpAQCAtMCwwICsxLDcgQEAKK3B1YmxpYyBjbGFzcyBUZXN0IHsKKworfQorCitlbnVtIFBlcnNvbiB7CisgIEZSRUQsIEdFT1JHRTsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdENsYXNzL2VudW1Td2l0Y2gvYmVmb3JlL1Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0Q2xhc3MvZW51bVN3aXRjaC9iZWZvcmUvVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg5YjZjYWEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdENsYXNzL2VudW1Td2l0Y2gvYmVmb3JlL1Rlc3QuamF2YQpAQCAtMCwwICsxLDE2IEBACitwdWJsaWMgY2xhc3MgVGVzdCB7CisKKyAgc3RhdGljIHZvaWQgZm9vKFRlc3QgdCkgeworICAgIHN3aXRjaCAocCkgeworICAgICAgY2FzZSBGUkVEOgorICAgICAgICBicmVhazsKKworICAgICAgY2FzZSBHRU9SR0U6CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgfQorfQorCitlbnVtIFBlcnNvbiB7CisgIEZSRUQsIEdFT1JHRTsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdENsYXNzL2ZpZWxkSW5pdGlhbGl6ZXJzL2FmdGVyL0V4dHJhY3RlZC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RDbGFzcy9maWVsZEluaXRpYWxpemVycy9hZnRlci9FeHRyYWN0ZWQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZDY3OTRkCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RDbGFzcy9maWVsZEluaXRpYWxpemVycy9hZnRlci9FeHRyYWN0ZWQuamF2YQpAQCAtMCwwICsxLDMgQEAKK3B1YmxpYyBjbGFzcyBFeHRyYWN0ZWQgeworICAgIHN0YXRpYyBmaW5hbCBpbnRbXSBteVQgPSB7MSwgMn07Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RDbGFzcy9maWVsZEluaXRpYWxpemVycy9hZnRlci9UZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdENsYXNzL2ZpZWxkSW5pdGlhbGl6ZXJzL2FmdGVyL1Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NmQ4M2UwYwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0Q2xhc3MvZmllbGRJbml0aWFsaXplcnMvYWZ0ZXIvVGVzdC5qYXZhCkBAIC0wLDAgKzEsMiBAQAorY2xhc3MgVGVzdCB7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RDbGFzcy9maWVsZEluaXRpYWxpemVycy9iZWZvcmUvVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RDbGFzcy9maWVsZEluaXRpYWxpemVycy9iZWZvcmUvVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFlNDlhNGUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdENsYXNzL2ZpZWxkSW5pdGlhbGl6ZXJzL2JlZm9yZS9UZXN0LmphdmEKQEAgLTAsMCArMSwzIEBACitjbGFzcyBUZXN0IHsKKyAgc3RhdGljIGZpbmFsIGludFtdICBteVQgPSB7MSwyfTsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdENsYXNzL2ZpZWxkUmVmZXJlbmNlL2FmdGVyL1Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0Q2xhc3MvZmllbGRSZWZlcmVuY2UvYWZ0ZXIvVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZhNTQ4NWQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdENsYXNzL2ZpZWxkUmVmZXJlbmNlL2FmdGVyL1Rlc3QuamF2YQpAQCAtMCwwICsxLDE0IEBACitjbGFzcyBUZXN0IHsKKyAgaW50IG15RmllbGQ7CisgIFRlc3QoKXsKKyAgICBteUZpZWxkID0gNzsKKyAgfQorCisgIHZvaWQgZm9vKCkgeworICAgIGlmIChteUZpZWxkID09IDcpe30KKyAgfQorCisgIHZvaWQgYmFyKCkgeworICAgIGZvbygpOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RDbGFzcy9maWVsZFJlZmVyZW5jZS9iZWZvcmUvVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RDbGFzcy9maWVsZFJlZmVyZW5jZS9iZWZvcmUvVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZhNTQ4NWQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdENsYXNzL2ZpZWxkUmVmZXJlbmNlL2JlZm9yZS9UZXN0LmphdmEKQEAgLTAsMCArMSwxNCBAQAorY2xhc3MgVGVzdCB7CisgIGludCBteUZpZWxkOworICBUZXN0KCl7CisgICAgbXlGaWVsZCA9IDc7CisgIH0KKworICB2b2lkIGZvbygpIHsKKyAgICBpZiAobXlGaWVsZCA9PSA3KXt9CisgIH0KKworICB2b2lkIGJhcigpIHsKKyAgICBmb28oKTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0Q2xhc3MvZ2VuZXJhdGVHZXR0ZXJzL2FmdGVyL0V4dHJhY3RlZC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RDbGFzcy9nZW5lcmF0ZUdldHRlcnMvYWZ0ZXIvRXh0cmFjdGVkLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzJkMGMxZjMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdENsYXNzL2dlbmVyYXRlR2V0dGVycy9hZnRlci9FeHRyYWN0ZWQuamF2YQpAQCAtMCwwICsxLDE0IEBACitwdWJsaWMgY2xhc3MgRXh0cmFjdGVkIHsKKyAgICBpbnQgbXlUOworCisgICAgcHVibGljIGludCBnZXRNeVQoKSB7CisgICAgICAgIHJldHVybiBteVQ7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgc2V0TXlUKGludCBteVQpIHsKKyAgICAgICAgdGhpcy5teVQgPSBteVQ7CisgICAgfQorCisgICAgcHVibGljIEV4dHJhY3RlZCgpIHsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RDbGFzcy9nZW5lcmF0ZUdldHRlcnMvYWZ0ZXIvVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RDbGFzcy9nZW5lcmF0ZUdldHRlcnMvYWZ0ZXIvVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFmZDI5NzkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdENsYXNzL2dlbmVyYXRlR2V0dGVycy9hZnRlci9UZXN0LmphdmEKQEAgLTAsMCArMSwxMSBAQAorY2xhc3MgVGVzdCB7CisgICAgZmluYWwgRXh0cmFjdGVkIGV4dHJhY3RlZCA9IG5ldyBFeHRyYWN0ZWQoKTsKKworICAgIHsKKyAgICAgICAgZXh0cmFjdGVkLnNldE15VCgwKTsKKyAgfQorICAKKyAgdm9pZCBiYXIoKXsKKyAgICBpbnQgaSA9IGV4dHJhY3RlZC5nZXRNeVQoKTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0Q2xhc3MvZ2VuZXJhdGVHZXR0ZXJzL2JlZm9yZS9UZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdENsYXNzL2dlbmVyYXRlR2V0dGVycy9iZWZvcmUvVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk4MjhkYzEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdENsYXNzL2dlbmVyYXRlR2V0dGVycy9iZWZvcmUvVGVzdC5qYXZhCkBAIC0wLDAgKzEsMTAgQEAKK2NsYXNzIFRlc3QgeworICBpbnQgbXlUOworICB7CisgICAgbXlUID0gMDsKKyAgfQorICAKKyAgdm9pZCBiYXIoKXsKKyAgICBpbnQgaSA9IG15VDsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0Q2xhc3MvZ2V0dGVycy9hZnRlci9FeHRyYWN0ZWQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0Q2xhc3MvZ2V0dGVycy9hZnRlci9FeHRyYWN0ZWQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNmI3ZDQ4Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RDbGFzcy9nZXR0ZXJzL2FmdGVyL0V4dHJhY3RlZC5qYXZhCkBAIC0wLDAgKzEsMTAgQEAKK3B1YmxpYyBjbGFzcyBFeHRyYWN0ZWQgeworICAgIGludCBteVQ7CisKKyAgICBwdWJsaWMgRXh0cmFjdGVkKCkgeworICAgIH0KKworICAgIHB1YmxpYyBpbnQgZ2V0TXlUKCkgeworICAgICAgICByZXR1cm4gbXlUOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdENsYXNzL2dldHRlcnMvYWZ0ZXIvVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RDbGFzcy9nZXR0ZXJzL2FmdGVyL1Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZTc0N2ZhCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RDbGFzcy9nZXR0ZXJzL2FmdGVyL1Rlc3QuamF2YQpAQCAtMCwwICsxLDEwIEBACitjbGFzcyBUZXN0IHsKKyAgICBmaW5hbCBFeHRyYWN0ZWQgZXh0cmFjdGVkID0gbmV3IEV4dHJhY3RlZCgpOworCisgICAgcHVibGljIGludCBnZXRNeVQoKSB7CisgICAgICAgIHJldHVybiBleHRyYWN0ZWQuZ2V0TXlUKCk7CisgICAgfQorICB2b2lkIGJhcigpeworICAgIGludCBpID0gZXh0cmFjdGVkLmdldE15VCgpOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RDbGFzcy9nZXR0ZXJzL2JlZm9yZS9UZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdENsYXNzL2dldHRlcnMvYmVmb3JlL1Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YWU4NWM4Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RDbGFzcy9nZXR0ZXJzL2JlZm9yZS9UZXN0LmphdmEKQEAgLTAsMCArMSw5IEBACitjbGFzcyBUZXN0IHsKKyAgaW50IG15VDsKKyAgcHVibGljIGludCBnZXRNeVQoKSB7CisgICAgcmV0dXJuIG15VDsKKyAgfQorICB2b2lkIGJhcigpeworICAgIGludCBpID0gbXlUOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RDbGFzcy9oaWVyYXJjaHkvYWZ0ZXIvQS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RDbGFzcy9oaWVyYXJjaHkvYWZ0ZXIvQS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY2ZWNiZjQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdENsYXNzL2hpZXJhcmNoeS9hZnRlci9BLmphdmEKQEAgLTAsMCArMSwzIEBACitjbGFzcyBBPFQ+eworICB2b2lkIGZvbyhUIHQpe30KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdENsYXNzL2hpZXJhcmNoeS9hZnRlci9FeHRyYWN0ZWQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0Q2xhc3MvaGllcmFyY2h5L2FmdGVyL0V4dHJhY3RlZC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE3ODU3YjEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdENsYXNzL2hpZXJhcmNoeS9hZnRlci9FeHRyYWN0ZWQuamF2YQpAQCAtMCwwICsxLDEyIEBACitwdWJsaWMgY2xhc3MgRXh0cmFjdGVkPFI+IHsKKyAgICBwcml2YXRlIGZpbmFsIFRlc3Q8Uj4gdGVzdDsKKyAgICBwdWJsaWMgUiBteVQ7CisKKyAgICBwdWJsaWMgRXh0cmFjdGVkKFRlc3Q8Uj4gdGVzdCkgeworICAgICAgICB0aGlzLnRlc3QgPSB0ZXN0OworICAgIH0KKworICAgIHZvaWQgYmFyKCkgeworICAgICAgICB0ZXN0LmZvbyhteVQpOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdENsYXNzL2hpZXJhcmNoeS9hZnRlci9UZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdENsYXNzL2hpZXJhcmNoeS9hZnRlci9UZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGM3YmY2OAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0Q2xhc3MvaGllcmFyY2h5L2FmdGVyL1Rlc3QuamF2YQpAQCAtMCwwICsxLDUgQEAKK2NsYXNzIFRlc3Q8Uj4gIGV4dGVuZHMgQSA8Uj57CisKKyAgICB2b2lkIGZvbyhSIHQpe30KKworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0Q2xhc3MvaGllcmFyY2h5L2JlZm9yZS9BLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdENsYXNzL2hpZXJhcmNoeS9iZWZvcmUvQS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY2ZWNiZjQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdENsYXNzL2hpZXJhcmNoeS9iZWZvcmUvQS5qYXZhCkBAIC0wLDAgKzEsMyBAQAorY2xhc3MgQTxUPnsKKyAgdm9pZCBmb28oVCB0KXt9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RDbGFzcy9oaWVyYXJjaHkvYmVmb3JlL1Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0Q2xhc3MvaGllcmFyY2h5L2JlZm9yZS9UZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzM0ZmQyMAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0Q2xhc3MvaGllcmFyY2h5L2JlZm9yZS9UZXN0LmphdmEKQEAgLTAsMCArMSw5IEBACitjbGFzcyBUZXN0PFI+ICBleHRlbmRzIEEgPFI+eworICBwdWJsaWMgUiBteVQ7CisKKyAgdm9pZCBmb28oUiB0KXt9CisKKyAgdm9pZCBiYXIoKXsKKyAgICBmb28obXlUKTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0Q2xhc3MvaW5jcmVtZW50RGVjcmVtZW50L2FmdGVyL0V4dHJhY3RlZC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RDbGFzcy9pbmNyZW1lbnREZWNyZW1lbnQvYWZ0ZXIvRXh0cmFjdGVkLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzJkMGMxZjMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdENsYXNzL2luY3JlbWVudERlY3JlbWVudC9hZnRlci9FeHRyYWN0ZWQuamF2YQpAQCAtMCwwICsxLDE0IEBACitwdWJsaWMgY2xhc3MgRXh0cmFjdGVkIHsKKyAgICBpbnQgbXlUOworCisgICAgcHVibGljIGludCBnZXRNeVQoKSB7CisgICAgICAgIHJldHVybiBteVQ7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgc2V0TXlUKGludCBteVQpIHsKKyAgICAgICAgdGhpcy5teVQgPSBteVQ7CisgICAgfQorCisgICAgcHVibGljIEV4dHJhY3RlZCgpIHsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RDbGFzcy9pbmNyZW1lbnREZWNyZW1lbnQvYWZ0ZXIvVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RDbGFzcy9pbmNyZW1lbnREZWNyZW1lbnQvYWZ0ZXIvVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE1YTRlOGEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdENsYXNzL2luY3JlbWVudERlY3JlbWVudC9hZnRlci9UZXN0LmphdmEKQEAgLTAsMCArMSwxMSBAQAorY2xhc3MgVGVzdCB7CisgICAgZmluYWwgRXh0cmFjdGVkIGV4dHJhY3RlZCA9IG5ldyBFeHRyYWN0ZWQoKTsKKworICAgIHsKKyAgICAgICAgZXh0cmFjdGVkLnNldE15VCgwKTsKKyAgfQorICAKKyAgdm9pZCBiYXIoKXsKKyAgICBpbnQgaSA9IGV4dHJhY3RlZC5zZXRNeVQoZXh0cmFjdGVkLmdldE15VCgpICsgMSk7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdENsYXNzL2luY3JlbWVudERlY3JlbWVudC9iZWZvcmUvVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RDbGFzcy9pbmNyZW1lbnREZWNyZW1lbnQvYmVmb3JlL1Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yY2RjNWI4Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RDbGFzcy9pbmNyZW1lbnREZWNyZW1lbnQvYmVmb3JlL1Rlc3QuamF2YQpAQCAtMCwwICsxLDEwIEBACitjbGFzcyBUZXN0IHsKKyAgaW50IG15VDsKKyAgeworICAgIG15VCA9IDA7CisgIH0KKyAgCisgIHZvaWQgYmFyKCl7CisgICAgaW50IGkgPSBteVQrKzsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0Q2xhc3MvaW5oZXJpdGFuY2VEZWxlZ2F0aW9uL2FmdGVyL0V4dHJhY3RlZC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RDbGFzcy9pbmhlcml0YW5jZURlbGVnYXRpb24vYWZ0ZXIvRXh0cmFjdGVkLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmEwOWJkMQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0Q2xhc3MvaW5oZXJpdGFuY2VEZWxlZ2F0aW9uL2FmdGVyL0V4dHJhY3RlZC5qYXZhCkBAIC0wLDAgKzEsOCBAQAorcHVibGljIGNsYXNzIEV4dHJhY3RlZCBpbXBsZW1lbnRzIEkgeworICAgIHB1YmxpYyBFeHRyYWN0ZWQoKSB7CisgICAgfQorCisgICAgdm9pZCBmb28oKSB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiIik7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0Q2xhc3MvaW5oZXJpdGFuY2VEZWxlZ2F0aW9uL2FmdGVyL0kuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0Q2xhc3MvaW5oZXJpdGFuY2VEZWxlZ2F0aW9uL2FmdGVyL0kuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOGQzZmU1Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RDbGFzcy9pbmhlcml0YW5jZURlbGVnYXRpb24vYWZ0ZXIvSS5qYXZhCkBAIC0wLDAgKzEsMyBAQAoraW50ZXJmYWNlIEkgeworICB2b2lkIGZvbygpOworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0Q2xhc3MvaW5oZXJpdGFuY2VEZWxlZ2F0aW9uL2FmdGVyL1Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0Q2xhc3MvaW5oZXJpdGFuY2VEZWxlZ2F0aW9uL2FmdGVyL1Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MTRlZjIxCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RDbGFzcy9pbmhlcml0YW5jZURlbGVnYXRpb24vYWZ0ZXIvVGVzdC5qYXZhCkBAIC0wLDAgKzEsNyBAQAorY2xhc3MgVGVzdCBpbXBsZW1lbnRzIEkgeworICAgIHByaXZhdGUgZmluYWwgRXh0cmFjdGVkIGV4dHJhY3RlZCA9IG5ldyBFeHRyYWN0ZWQoKTsKKworICAgIHZvaWQgZm9vKCkgeworICAgICAgICBleHRyYWN0ZWQuZm9vKCk7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0Q2xhc3MvaW5oZXJpdGFuY2VEZWxlZ2F0aW9uL2JlZm9yZS9JLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdENsYXNzL2luaGVyaXRhbmNlRGVsZWdhdGlvbi9iZWZvcmUvSS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU4ZDNmZTUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdENsYXNzL2luaGVyaXRhbmNlRGVsZWdhdGlvbi9iZWZvcmUvSS5qYXZhCkBAIC0wLDAgKzEsMyBAQAoraW50ZXJmYWNlIEkgeworICB2b2lkIGZvbygpOworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0Q2xhc3MvaW5oZXJpdGFuY2VEZWxlZ2F0aW9uL2JlZm9yZS9UZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdENsYXNzL2luaGVyaXRhbmNlRGVsZWdhdGlvbi9iZWZvcmUvVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQwNzZmMTEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdENsYXNzL2luaGVyaXRhbmNlRGVsZWdhdGlvbi9iZWZvcmUvVGVzdC5qYXZhCkBAIC0wLDAgKzEsNSBAQAorY2xhc3MgVGVzdCBpbXBsZW1lbnRzIEkgeworICB2b2lkIGZvbygpIHsKKyAgICAgU3lzdGVtLm91dC5wcmludGxuKCIiKTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0Q2xhc3MvaW5uZXIvYWZ0ZXIvRXh0cmFjdGVkLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdENsYXNzL2lubmVyL2FmdGVyL0V4dHJhY3RlZC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYzZGJhYmYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdENsYXNzL2lubmVyL2FmdGVyL0V4dHJhY3RlZC5qYXZhCkBAIC0wLDAgKzEsNiBAQAorcHVibGljIGNsYXNzIEV4dHJhY3RlZCB7CisgICAgc3RhdGljIGNsYXNzIElubmVyIHsKKyAgICAgICAgdm9pZCBmb28oKSB7CisgICAgICAgIH0KKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RDbGFzcy9pbm5lci9hZnRlci9UZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdENsYXNzL2lubmVyL2FmdGVyL1Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZjUzN2FlCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RDbGFzcy9pbm5lci9hZnRlci9UZXN0LmphdmEKQEAgLTAsMCArMSw2IEBACitjbGFzcyBUZXN0IHsKKyAgdm9pZCBiYXIoKSB7CisgICAgIG5ldyBFeHRyYWN0ZWQuSW5uZXIoKS5mb28oKTsKKyAgfQorCit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RDbGFzcy9pbm5lci9iZWZvcmUvVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RDbGFzcy9pbm5lci9iZWZvcmUvVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ0ZDBiNWIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdENsYXNzL2lubmVyL2JlZm9yZS9UZXN0LmphdmEKQEAgLTAsMCArMSw5IEBACitjbGFzcyBUZXN0IHsKKyAgdm9pZCBiYXIoKSB7CisgICAgIG5ldyBJbm5lcigpLmZvbygpOworICB9CisKKyAgc3RhdGljIGNsYXNzIElubmVyIHsKKyAgICB2b2lkIGZvbygpe30KKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0Q2xhc3MvaW5uZXJDbGFzc1JlZnMvYWZ0ZXIvRXh0cmFjdGVkLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdENsYXNzL2lubmVyQ2xhc3NSZWZzL2FmdGVyL0V4dHJhY3RlZC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNhNWEyMDIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdENsYXNzL2lubmVyQ2xhc3NSZWZzL2FmdGVyL0V4dHJhY3RlZC5qYXZhCkBAIC0wLDAgKzEsNiBAQAorcHVibGljIGNsYXNzIEV4dHJhY3RlZCB7CisgICAgc3RhdGljIGNsYXNzIElubmVyIHsKKyAgICAgICAgcHVibGljIHN0YXRpYyB2b2lkIGdldCgpIHsKKyAgICAgICAgfQorICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdENsYXNzL2lubmVyQ2xhc3NSZWZzL2FmdGVyL1Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0Q2xhc3MvaW5uZXJDbGFzc1JlZnMvYWZ0ZXIvVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJkNTBhYTEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdENsYXNzL2lubmVyQ2xhc3NSZWZzL2FmdGVyL1Rlc3QuamF2YQpAQCAtMCwwICsxLDggQEAKK2NsYXNzIFRlc3QgeworCisgICAgRXh0cmFjdGVkLklubmVyIHA7CisKKyAgICB7CisgICAgICAgIEV4dHJhY3RlZC5Jbm5lci5nZXQoKTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdENsYXNzL2lubmVyQ2xhc3NSZWZzL2JlZm9yZS9UZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdENsYXNzL2lubmVyQ2xhc3NSZWZzL2JlZm9yZS9UZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTU1MGFhNwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0Q2xhc3MvaW5uZXJDbGFzc1JlZnMvYmVmb3JlL1Rlc3QuamF2YQpAQCAtMCwwICsxLDEyIEBACitjbGFzcyBUZXN0IHsKKworICAgIHN0YXRpYyBjbGFzcyBJbm5lciB7CisgICAgICAgICAgcHVibGljIHN0YXRpYyB2b2lkIGdldCgpIHsKKyAgICAgICAgICB9CisgICAgICB9CisgICAgSW5uZXIgcDsKKworICAgIHsKKyAgICAgICAgSW5uZXIuZ2V0KCk7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RDbGFzcy9tZXRob2RUeXBlUGFyYW1ldGVycy9hZnRlci9FeHRyYWN0ZWQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0Q2xhc3MvbWV0aG9kVHlwZVBhcmFtZXRlcnMvYWZ0ZXIvRXh0cmFjdGVkLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmI5NzlkYwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0Q2xhc3MvbWV0aG9kVHlwZVBhcmFtZXRlcnMvYWZ0ZXIvRXh0cmFjdGVkLmphdmEKQEAgLTAsMCArMSw4IEBACitwdWJsaWMgY2xhc3MgRXh0cmFjdGVkIHsKKyAgICBwdWJsaWMgRXh0cmFjdGVkKCkgeworICAgIH0KKworICAgIHB1YmxpYyA8VD4gdm9pZCBmb28oVCBwKSB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihwLmdldENsYXNzKCkuZ2V0TmFtZSgpKTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RDbGFzcy9tZXRob2RUeXBlUGFyYW1ldGVycy9hZnRlci9UZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdENsYXNzL21ldGhvZFR5cGVQYXJhbWV0ZXJzL2FmdGVyL1Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNDgyNmY4Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RDbGFzcy9tZXRob2RUeXBlUGFyYW1ldGVycy9hZnRlci9UZXN0LmphdmEKQEAgLTAsMCArMSwxMiBAQAorY2xhc3MgVGVzdCB7CisgICAgcHJpdmF0ZSBmaW5hbCBFeHRyYWN0ZWQgZXh0cmFjdGVkID0gbmV3IEV4dHJhY3RlZCgpOworCisgICAgcHVibGljIDxUPiB2b2lkIGZvbyhUIHApIHsKKyAgICAgICAgZXh0cmFjdGVkLmZvbyhwKTsKKyAgICB9CisKKyAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworICAgIG5ldyBUZXN0KCkuZm9vKDEwZik7CisgIH0KKworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0Q2xhc3MvbWV0aG9kVHlwZVBhcmFtZXRlcnMvYmVmb3JlL1Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0Q2xhc3MvbWV0aG9kVHlwZVBhcmFtZXRlcnMvYmVmb3JlL1Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41Nzc3MTBiCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RDbGFzcy9tZXRob2RUeXBlUGFyYW1ldGVycy9iZWZvcmUvVGVzdC5qYXZhCkBAIC0wLDAgKzEsMTAgQEAKK2NsYXNzIFRlc3QgeworICBwdWJsaWMgPFQ+IHZvaWQgZm9vKFQgcCkgeworICAgIFN5c3RlbS5vdXQucHJpbnRsbihwLmdldENsYXNzKCkuZ2V0TmFtZSgpKTsKKyAgfQorCisgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKyAgICBuZXcgVGVzdCgpLmZvbygxMGYpOworICB9CisKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdENsYXNzL211bHRpcGxlR2V0dGVycy9hZnRlci9UZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdENsYXNzL211bHRpcGxlR2V0dGVycy9hZnRlci9UZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2FlODVjOAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0Q2xhc3MvbXVsdGlwbGVHZXR0ZXJzL2FmdGVyL1Rlc3QuamF2YQpAQCAtMCwwICsxLDkgQEAKK2NsYXNzIFRlc3QgeworICBpbnQgbXlUOworICBwdWJsaWMgaW50IGdldE15VCgpIHsKKyAgICByZXR1cm4gbXlUOworICB9CisgIHZvaWQgYmFyKCl7CisgICAgaW50IGkgPSBteVQ7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdENsYXNzL211bHRpcGxlR2V0dGVycy9iZWZvcmUvVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RDbGFzcy9tdWx0aXBsZUdldHRlcnMvYmVmb3JlL1Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YWU4NWM4Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RDbGFzcy9tdWx0aXBsZUdldHRlcnMvYmVmb3JlL1Rlc3QuamF2YQpAQCAtMCwwICsxLDkgQEAKK2NsYXNzIFRlc3QgeworICBpbnQgbXlUOworICBwdWJsaWMgaW50IGdldE15VCgpIHsKKyAgICByZXR1cm4gbXlUOworICB9CisgIHZvaWQgYmFyKCl7CisgICAgaW50IGkgPSBteVQ7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdENsYXNzL211bHRpcGxlR2V0dGVyczEvYWZ0ZXIvVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RDbGFzcy9tdWx0aXBsZUdldHRlcnMxL2FmdGVyL1Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43Y2M4NjdkCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RDbGFzcy9tdWx0aXBsZUdldHRlcnMxL2FmdGVyL1Rlc3QuamF2YQpAQCAtMCwwICsxLDYgQEAKK2NsYXNzIFRlc3QgeworICBpbnQgbXlUOworICBwdWJsaWMgaW50IGdldE15VCgpIHsKKyAgICByZXR1cm4gbXlUOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RDbGFzcy9tdWx0aXBsZUdldHRlcnMxL2JlZm9yZS9UZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdENsYXNzL211bHRpcGxlR2V0dGVyczEvYmVmb3JlL1Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43Y2M4NjdkCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RDbGFzcy9tdWx0aXBsZUdldHRlcnMxL2JlZm9yZS9UZXN0LmphdmEKQEAgLTAsMCArMSw2IEBACitjbGFzcyBUZXN0IHsKKyAgaW50IG15VDsKKyAgcHVibGljIGludCBnZXRNeVQoKSB7CisgICAgcmV0dXJuIG15VDsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0Q2xhc3Mvbm9Db25zdHJ1Y3RvclBhcmFtcy9hZnRlci9FeHRyYWN0ZWQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0Q2xhc3Mvbm9Db25zdHJ1Y3RvclBhcmFtcy9hZnRlci9FeHRyYWN0ZWQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNDk2MDNkCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RDbGFzcy9ub0NvbnN0cnVjdG9yUGFyYW1zL2FmdGVyL0V4dHJhY3RlZC5qYXZhCkBAIC0wLDAgKzEsMTAgQEAKK3B1YmxpYyBjbGFzcyBFeHRyYWN0ZWQgeworICAgIFN0cmluZyBteVQgPSAiIjsKKworICAgIHB1YmxpYyBFeHRyYWN0ZWQoKSB7CisgICAgfQorCisgICAgdm9pZCBiYXIoKSB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihteVQpOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdENsYXNzL25vQ29uc3RydWN0b3JQYXJhbXMvYWZ0ZXIvVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RDbGFzcy9ub0NvbnN0cnVjdG9yUGFyYW1zL2FmdGVyL1Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZWE5MmVjCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RDbGFzcy9ub0NvbnN0cnVjdG9yUGFyYW1zL2FmdGVyL1Rlc3QuamF2YQpAQCAtMCwwICsxLDExIEBACitjbGFzcyBUZXN0IHsKKyAgICBmaW5hbCBFeHRyYWN0ZWQgZXh0cmFjdGVkID0gbmV3IEV4dHJhY3RlZCgpOworCisgICAgdm9pZCBiYXIoKXsKKyAgICAgICAgZXh0cmFjdGVkLmJhcigpOworICAgIH0KKworICB2b2lkIGZvbygpIHsKKyAgICAgIGV4dHJhY3RlZC5iYXIoKTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0Q2xhc3Mvbm9Db25zdHJ1Y3RvclBhcmFtcy9iZWZvcmUvVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RDbGFzcy9ub0NvbnN0cnVjdG9yUGFyYW1zL2JlZm9yZS9UZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzcyNWYwNwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0Q2xhc3Mvbm9Db25zdHJ1Y3RvclBhcmFtcy9iZWZvcmUvVGVzdC5qYXZhCkBAIC0wLDAgKzEsMTEgQEAKK2NsYXNzIFRlc3QgeworICBTdHJpbmcgbXlUID0gIiI7CisKKyAgdm9pZCBiYXIoKXsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4obXlUKTsKKyAgfQorCisgIHZvaWQgZm9vKCkgeworICAgIGJhcigpOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RDbGFzcy9ub0RlbGVnYXRpb24vYWZ0ZXIvRXh0cmFjdGVkLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdENsYXNzL25vRGVsZWdhdGlvbi9hZnRlci9FeHRyYWN0ZWQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NDJjNzI2Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RDbGFzcy9ub0RlbGVnYXRpb24vYWZ0ZXIvRXh0cmFjdGVkLmphdmEKQEAgLTAsMCArMSw3IEBACitwdWJsaWMgY2xhc3MgRXh0cmFjdGVkIHsKKyAgICBwdWJsaWMgRXh0cmFjdGVkKCkgeworICAgIH0KKworICAgIHZvaWQgZm9vKCkgeworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdENsYXNzL25vRGVsZWdhdGlvbi9hZnRlci9UZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdENsYXNzL25vRGVsZWdhdGlvbi9hZnRlci9UZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTZkODNlMGMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdENsYXNzL25vRGVsZWdhdGlvbi9hZnRlci9UZXN0LmphdmEKQEAgLTAsMCArMSwyIEBACitjbGFzcyBUZXN0IHsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdENsYXNzL25vRGVsZWdhdGlvbi9iZWZvcmUvVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RDbGFzcy9ub0RlbGVnYXRpb24vYmVmb3JlL1Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YTZkMzk0Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RDbGFzcy9ub0RlbGVnYXRpb24vYmVmb3JlL1Rlc3QuamF2YQpAQCAtMCwwICsxLDMgQEAKK2NsYXNzIFRlc3QgeworICB2b2lkIGZvbygpe30KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdENsYXNzL25vRmllbGREZWxlZ2F0aW9uL2FmdGVyL0V4dHJhY3RlZC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RDbGFzcy9ub0ZpZWxkRGVsZWdhdGlvbi9hZnRlci9FeHRyYWN0ZWQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YWIxMmUxCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RDbGFzcy9ub0ZpZWxkRGVsZWdhdGlvbi9hZnRlci9FeHRyYWN0ZWQuamF2YQpAQCAtMCwwICsxLDEyIEBACitwdWJsaWMgY2xhc3MgRXh0cmFjdGVkPFQ+IHsKKyAgICBwcml2YXRlIGZpbmFsIFRlc3Q8VD4gdGVzdDsKKyAgICBUIG15VDsKKworICAgIHB1YmxpYyBFeHRyYWN0ZWQoVGVzdDxUPiB0ZXN0KSB7CisgICAgICAgIHRoaXMudGVzdCA9IHRlc3Q7CisgICAgfQorCisgICAgdm9pZCBiYXIoKSB7CisgICAgICAgIHRlc3QuZm9vKG15VCk7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0Q2xhc3Mvbm9GaWVsZERlbGVnYXRpb24vYWZ0ZXIvVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RDbGFzcy9ub0ZpZWxkRGVsZWdhdGlvbi9hZnRlci9UZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTlkM2VlMgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0Q2xhc3Mvbm9GaWVsZERlbGVnYXRpb24vYWZ0ZXIvVGVzdC5qYXZhCkBAIC0wLDAgKzEsMyBAQAorY2xhc3MgVGVzdDxUPiB7CisgICAgdm9pZCBmb28oVCB0KXt9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RDbGFzcy9ub0ZpZWxkRGVsZWdhdGlvbi9iZWZvcmUvVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RDbGFzcy9ub0ZpZWxkRGVsZWdhdGlvbi9iZWZvcmUvVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE5ODM0MmUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdENsYXNzL25vRmllbGREZWxlZ2F0aW9uL2JlZm9yZS9UZXN0LmphdmEKQEAgLTAsMCArMSw3IEBACitjbGFzcyBUZXN0PFQ+IHsKKyAgVCBteVQ7CisgIHZvaWQgZm9vKFQgdCl7fQorICB2b2lkIGJhcigpeworICAgIGZvbyhteVQpOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RDbGFzcy9wdWJsaWNGaWVsZERlbGVnYXRpb24vYWZ0ZXIvRXh0cmFjdGVkLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdENsYXNzL3B1YmxpY0ZpZWxkRGVsZWdhdGlvbi9hZnRlci9FeHRyYWN0ZWQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNjIzODFjCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RDbGFzcy9wdWJsaWNGaWVsZERlbGVnYXRpb24vYWZ0ZXIvRXh0cmFjdGVkLmphdmEKQEAgLTAsMCArMSw2IEBACitwdWJsaWMgY2xhc3MgRXh0cmFjdGVkPFQ+IHsKKyAgICBwdWJsaWMgVCBteVQ7CisKKyAgICBwdWJsaWMgRXh0cmFjdGVkKCkgeworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdENsYXNzL3B1YmxpY0ZpZWxkRGVsZWdhdGlvbi9hZnRlci9UZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdENsYXNzL3B1YmxpY0ZpZWxkRGVsZWdhdGlvbi9hZnRlci9UZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjFjNTlmYwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0Q2xhc3MvcHVibGljRmllbGREZWxlZ2F0aW9uL2FmdGVyL1Rlc3QuamF2YQpAQCAtMCwwICsxLDggQEAKK2NsYXNzIFRlc3Q8VD4geworICAgIHB1YmxpYyBmaW5hbCBFeHRyYWN0ZWQ8VD4gZXh0cmFjdGVkID0gbmV3IEV4dHJhY3RlZDxUPigpOworCisgICAgdm9pZCBmb28oVCB0KXt9CisgIHZvaWQgYmFyKCl7CisgICAgZm9vKGV4dHJhY3RlZC5teVQpOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RDbGFzcy9wdWJsaWNGaWVsZERlbGVnYXRpb24vYmVmb3JlL1Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0Q2xhc3MvcHVibGljRmllbGREZWxlZ2F0aW9uL2JlZm9yZS9UZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzZjM2NhMwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0Q2xhc3MvcHVibGljRmllbGREZWxlZ2F0aW9uL2JlZm9yZS9UZXN0LmphdmEKQEAgLTAsMCArMSw3IEBACitjbGFzcyBUZXN0PFQ+IHsKKyAgcHVibGljIFQgbXlUOworICB2b2lkIGZvbyhUIHQpe30KKyAgdm9pZCBiYXIoKXsKKyAgICBmb28obXlUKTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0Q2xhc3MvcHVibGljVmlzaWJpbGl0eS9hZnRlci9FeHRyYWN0ZWQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0Q2xhc3MvcHVibGljVmlzaWJpbGl0eS9hZnRlci9FeHRyYWN0ZWQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZjQ0Y2ZlCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RDbGFzcy9wdWJsaWNWaXNpYmlsaXR5L2FmdGVyL0V4dHJhY3RlZC5qYXZhCkBAIC0wLDAgKzEsOSBAQAorcHVibGljIGNsYXNzIEV4dHJhY3RlZDxUPiB7CisgICAgcHVibGljIFQgbXlUOworCisgICAgcHVibGljIEV4dHJhY3RlZCgpIHsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBmb29zKCkgeworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdENsYXNzL3B1YmxpY1Zpc2liaWxpdHkvYWZ0ZXIvVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RDbGFzcy9wdWJsaWNWaXNpYmlsaXR5L2FmdGVyL1Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYzMwZDRjCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RDbGFzcy9wdWJsaWNWaXNpYmlsaXR5L2FmdGVyL1Rlc3QuamF2YQpAQCAtMCwwICsxLDEwIEBACitjbGFzcyBUZXN0PFQ+IHsKKyAgICBmaW5hbCBFeHRyYWN0ZWQ8VD4gZXh0cmFjdGVkID0gbmV3IEV4dHJhY3RlZDxUPigpOworCisgICAgdm9pZCBiYXIoKXsKKyAgICAgICAgZXh0cmFjdGVkLmZvb3MoKTsKKyAgfQorICB2b2lkIGZvb3MoKXsKKyAgICAgIGV4dHJhY3RlZC5mb29zKCk7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdENsYXNzL3B1YmxpY1Zpc2liaWxpdHkvYmVmb3JlL1Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0Q2xhc3MvcHVibGljVmlzaWJpbGl0eS9iZWZvcmUvVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMyMDIwZDMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdENsYXNzL3B1YmxpY1Zpc2liaWxpdHkvYmVmb3JlL1Rlc3QuamF2YQpAQCAtMCwwICsxLDcgQEAKK2NsYXNzIFRlc3Q8VD4geworICBUIG15VDsKKyAgdm9pZCBiYXIoKXsKKyAgICBmb29zKCk7CisgIH0KKyAgdm9pZCBmb29zKCl7fQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0Q2xhc3MvcmVmSW5KYXZhZG9jL2FmdGVyL0V4dHJhY3RlZC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RDbGFzcy9yZWZJbkphdmFkb2MvYWZ0ZXIvRXh0cmFjdGVkLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTIwMDJhNAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0Q2xhc3MvcmVmSW5KYXZhZG9jL2FmdGVyL0V4dHJhY3RlZC5qYXZhCkBAIC0wLDAgKzEsNiBAQAorcHVibGljIGNsYXNzIEV4dHJhY3RlZDxUPiB7CisgICAgVCBteVQ7CisKKyAgICBwdWJsaWMgRXh0cmFjdGVkKCkgeworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdENsYXNzL3JlZkluSmF2YWRvYy9hZnRlci9UZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdENsYXNzL3JlZkluSmF2YWRvYy9hZnRlci9UZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWM4MjFkZAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0Q2xhc3MvcmVmSW5KYXZhZG9jL2FmdGVyL1Rlc3QuamF2YQpAQCAtMCwwICsxLDggQEAKK2NsYXNzIFRlc3Q8VD4geworCisgICAgLyoqCisgICoge0BsaW5rIEV4dHJhY3RlZCNteVR9CisgICovCisgIHZvaWQgYmFyKCl7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdENsYXNzL3JlZkluSmF2YWRvYy9iZWZvcmUvVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RDbGFzcy9yZWZJbkphdmFkb2MvYmVmb3JlL1Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMDRkMjMyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RDbGFzcy9yZWZJbkphdmFkb2MvYmVmb3JlL1Rlc3QuamF2YQpAQCAtMCwwICsxLDkgQEAKK2NsYXNzIFRlc3Q8VD4geworICBUIG15VDsKKworICAvKioKKyAgKiB7QGxpbmsgVGVzdCNteVR9CisgICovCisgIHZvaWQgYmFyKCl7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdENsYXNzL3N0YXRpYy9hZnRlci9FeHRyYWN0ZWQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0Q2xhc3Mvc3RhdGljL2FmdGVyL0V4dHJhY3RlZC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNiZGQ4Y2UKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdENsYXNzL3N0YXRpYy9hZnRlci9FeHRyYWN0ZWQuamF2YQpAQCAtMCwwICsxLDUgQEAKK3B1YmxpYyBjbGFzcyBFeHRyYWN0ZWQgeworICAgIHN0YXRpYyB2b2lkIGZvbygpIHsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIiKTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RDbGFzcy9zdGF0aWMvYWZ0ZXIvVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RDbGFzcy9zdGF0aWMvYWZ0ZXIvVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc5ZDEyOTAKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdENsYXNzL3N0YXRpYy9hZnRlci9UZXN0LmphdmEKQEAgLTAsMCArMSw2IEBACitjbGFzcyBUZXN0IHsKKworICAgIHN0YXRpYyB2b2lkIGJhcigpeworICAgICAgICBFeHRyYWN0ZWQuZm9vKCk7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdENsYXNzL3N0YXRpYy9iZWZvcmUvVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RDbGFzcy9zdGF0aWMvYmVmb3JlL1Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iODZmMWVkCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RDbGFzcy9zdGF0aWMvYmVmb3JlL1Rlc3QuamF2YQpAQCAtMCwwICsxLDkgQEAKK2NsYXNzIFRlc3QgeworICBzdGF0aWMgdm9pZCBmb28oKSB7CisgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiIik7CisgIH0KKworICBzdGF0aWMgdm9pZCBiYXIoKXsKKyAgICAgZm9vKCk7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdENsYXNzL3N0YXRpY0ltcG9ydC9hZnRlci9FeHRyYWN0ZWQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0Q2xhc3Mvc3RhdGljSW1wb3J0L2FmdGVyL0V4dHJhY3RlZC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ0YzIyYTkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdENsYXNzL3N0YXRpY0ltcG9ydC9hZnRlci9FeHRyYWN0ZWQuamF2YQpAQCAtMCwwICsxLDcgQEAKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbnM7CisKK3B1YmxpYyBjbGFzcyBFeHRyYWN0ZWQgeworICAgIHN0YXRpYyB2b2lkIGZvbygpIHsKKyAgICAgICAgQ29sbGVjdGlvbnMuc2luZ2xldG9uTGlzdCgpOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdENsYXNzL3N0YXRpY0ltcG9ydC9hZnRlci9UZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdENsYXNzL3N0YXRpY0ltcG9ydC9hZnRlci9UZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTZkODNlMGMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdENsYXNzL3N0YXRpY0ltcG9ydC9hZnRlci9UZXN0LmphdmEKQEAgLTAsMCArMSwyIEBACitjbGFzcyBUZXN0IHsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdENsYXNzL3N0YXRpY0ltcG9ydC9iZWZvcmUvVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RDbGFzcy9zdGF0aWNJbXBvcnQvYmVmb3JlL1Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNjc2ZGM3Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RDbGFzcy9zdGF0aWNJbXBvcnQvYmVmb3JlL1Rlc3QuamF2YQpAQCAtMCwwICsxLDYgQEAKK2ltcG9ydCBzdGF0aWMgamF2YS51dGlsLkNvbGxlY3Rpb25zLnNpbmdsZXRvbkxpc3Q7CitjbGFzcyBUZXN0IHsKKyAgc3RhdGljIHZvaWQgZm9vKCl7CisgICAgIHNpbmdsZXRvbkxpc3QoKTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0Q2xhc3MvdXNlZEluQ29uc3RydWN0b3IvYWZ0ZXIvVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RDbGFzcy91c2VkSW5Db25zdHJ1Y3Rvci9hZnRlci9UZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTYyNjc4ZgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0Q2xhc3MvdXNlZEluQ29uc3RydWN0b3IvYWZ0ZXIvVGVzdC5qYXZhCkBAIC0wLDAgKzEsMTMgQEAKK2NsYXNzIFRlc3QgeworICBpbnQgbXlUOworICBUZXN0KCl7CisgICAgbXlUID0gMDsKKyAgfQorICAKKyAgcHVibGljIGludCBnZXRNeVQoKSB7CisgICAgcmV0dXJuIG15VDsKKyAgfQorICB2b2lkIGJhcigpeworICAgIGludCBpID0gbXlUOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RDbGFzcy91c2VkSW5Db25zdHJ1Y3Rvci9iZWZvcmUvVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RDbGFzcy91c2VkSW5Db25zdHJ1Y3Rvci9iZWZvcmUvVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU2MjY3OGYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdENsYXNzL3VzZWRJbkNvbnN0cnVjdG9yL2JlZm9yZS9UZXN0LmphdmEKQEAgLTAsMCArMSwxMyBAQAorY2xhc3MgVGVzdCB7CisgIGludCBteVQ7CisgIFRlc3QoKXsKKyAgICBteVQgPSAwOworICB9CisgIAorICBwdWJsaWMgaW50IGdldE15VCgpIHsKKyAgICByZXR1cm4gbXlUOworICB9CisgIHZvaWQgYmFyKCl7CisgICAgaW50IGkgPSBteVQ7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdENsYXNzL3VzZWRJbkluaXRpYWxpemVyL2FmdGVyL1Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0Q2xhc3MvdXNlZEluSW5pdGlhbGl6ZXIvYWZ0ZXIvVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg4ODY1NjgKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdENsYXNzL3VzZWRJbkluaXRpYWxpemVyL2FmdGVyL1Rlc3QuamF2YQpAQCAtMCwwICsxLDEzIEBACitjbGFzcyBUZXN0IHsKKyAgaW50IG15VDsKKyAgeworICAgIG15VCA9IDA7CisgIH0KKyAgCisgIHB1YmxpYyBpbnQgZ2V0TXlUKCkgeworICAgIHJldHVybiBteVQ7CisgIH0KKyAgdm9pZCBiYXIoKXsKKyAgICBpbnQgaSA9IG15VDsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0Q2xhc3MvdXNlZEluSW5pdGlhbGl6ZXIvYmVmb3JlL1Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0Q2xhc3MvdXNlZEluSW5pdGlhbGl6ZXIvYmVmb3JlL1Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ODg2NTY4Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RDbGFzcy91c2VkSW5Jbml0aWFsaXplci9iZWZvcmUvVGVzdC5qYXZhCkBAIC0wLDAgKzEsMTMgQEAKK2NsYXNzIFRlc3QgeworICBpbnQgbXlUOworICB7CisgICAgbXlUID0gMDsKKyAgfQorICAKKyAgcHVibGljIGludCBnZXRNeVQoKSB7CisgICAgcmV0dXJuIG15VDsKKyAgfQorICB2b2lkIGJhcigpeworICAgIGludCBpID0gbXlUOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RDbGFzcy92YXJhcmdzL2FmdGVyL0V4dHJhY3RlZC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RDbGFzcy92YXJhcmdzL2FmdGVyL0V4dHJhY3RlZC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQxYTM5ZTEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdENsYXNzL3ZhcmFyZ3MvYWZ0ZXIvRXh0cmFjdGVkLmphdmEKQEAgLTAsMCArMSw3IEBACitwdWJsaWMgY2xhc3MgRXh0cmFjdGVkIHsKKyAgICBwdWJsaWMgRXh0cmFjdGVkKCkgeworICAgIH0KKworICAgIHZvaWQgZm9vKGludC4uLiBmKSB7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0Q2xhc3MvdmFyYXJncy9hZnRlci9UZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdENsYXNzL3ZhcmFyZ3MvYWZ0ZXIvVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY2ZDkwYmMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdENsYXNzL3ZhcmFyZ3MvYWZ0ZXIvVGVzdC5qYXZhCkBAIC0wLDAgKzEsMTMgQEAKK2NsYXNzIFRlc3QgeworICAgIHByaXZhdGUgZmluYWwgRXh0cmFjdGVkIGV4dHJhY3RlZCA9IG5ldyBFeHRyYWN0ZWQoKTsKKworICAgIFRlc3QoKXt9CisKKyAgdm9pZCBmb28oaW50Li4uIGYpIHsKKyAgICAgIGV4dHJhY3RlZC5mb28oZik7CisgIH0KKworICB2b2lkIGJhcigpIHsKKyAgICAgIGV4dHJhY3RlZC5mb28oMSwgMik7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdENsYXNzL3ZhcmFyZ3MvYmVmb3JlL1Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0Q2xhc3MvdmFyYXJncy9iZWZvcmUvVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIxMGEzNzUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdENsYXNzL3ZhcmFyZ3MvYmVmb3JlL1Rlc3QuamF2YQpAQCAtMCwwICsxLDkgQEAKK2NsYXNzIFRlc3QgeworICBUZXN0KCl7fQorCisgIHZvaWQgZm9vKGludC4uLiBmKSB7fQorCisgIHZvaWQgYmFyKCkgeworICAgIGZvbygxLCAyKTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0RW51bS9jYW50Q2hhbmdlTWV0aG9kUGFyYW1ldGVyL2FmdGVyL1Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0RW51bS9jYW50Q2hhbmdlTWV0aG9kUGFyYW1ldGVyL2FmdGVyL1Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lODVhNDg4Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RFbnVtL2NhbnRDaGFuZ2VNZXRob2RQYXJhbWV0ZXIvYWZ0ZXIvVGVzdC5qYXZhCkBAIC0wLDAgKzEsMTggQEAKK3B1YmxpYyBjbGFzcyBUZXN0IHsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBGT08gPSAwOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEJBUiA9IDE7CisKKyAgICB2b2lkIGZvbyhpbnQgaSkgeworICAgICAgICBzd2l0Y2ggKGkpIHsKKyAgICAgICAgICAgIGNhc2UgRk9POgorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBCQVI6CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB2b2lkIGZvb2JhcigpIHsKKyAgICAgICAgaW50IG1heCA9IE1hdGgubWF4KEZPTywgQkFSKTsKKyAgICAgICAgZm9vKG1heCk7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0RW51bS9jYW50Q2hhbmdlTWV0aG9kUGFyYW1ldGVyL2JlZm9yZS9UZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdEVudW0vY2FudENoYW5nZU1ldGhvZFBhcmFtZXRlci9iZWZvcmUvVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU4NWE0ODgKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdEVudW0vY2FudENoYW5nZU1ldGhvZFBhcmFtZXRlci9iZWZvcmUvVGVzdC5qYXZhCkBAIC0wLDAgKzEsMTggQEAKK3B1YmxpYyBjbGFzcyBUZXN0IHsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBGT08gPSAwOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEJBUiA9IDE7CisKKyAgICB2b2lkIGZvbyhpbnQgaSkgeworICAgICAgICBzd2l0Y2ggKGkpIHsKKyAgICAgICAgICAgIGNhc2UgRk9POgorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBCQVI6CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB2b2lkIGZvb2JhcigpIHsKKyAgICAgICAgaW50IG1heCA9IE1hdGgubWF4KEZPTywgQkFSKTsKKyAgICAgICAgZm9vKG1heCk7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0RW51bS9jYW50Q2hhbmdlTWV0aG9kUGFyYW1ldGVyMS9hZnRlci9UZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdEVudW0vY2FudENoYW5nZU1ldGhvZFBhcmFtZXRlcjEvYWZ0ZXIvVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1N2IyZDIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdEVudW0vY2FudENoYW5nZU1ldGhvZFBhcmFtZXRlcjEvYWZ0ZXIvVGVzdC5qYXZhCkBAIC0wLDAgKzEsMjAgQEAKK3B1YmxpYyBjbGFzcyBUZXN0IHsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBGT08gPSAwOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEJBUiA9IDE7CisKKyAgICB2b2lkIGZvbyhpbnQgaSkgeworICAgICAgICBzd2l0Y2ggKGkpIHsKKyAgICAgICAgICAgIGNhc2UgRk9POgorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBCQVI6CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgaW50IGsgPSBNYXRoLm1heChpICogaSwgaSArIGkpOworICAgICAgICBzd2l0Y2ggKGspIHsKKyAgICAgICAgICAgIGNhc2UgRk9POgorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBCQVI6CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RFbnVtL2NhbnRDaGFuZ2VNZXRob2RQYXJhbWV0ZXIxL2JlZm9yZS9UZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdEVudW0vY2FudENoYW5nZU1ldGhvZFBhcmFtZXRlcjEvYmVmb3JlL1Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NTdiMmQyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RFbnVtL2NhbnRDaGFuZ2VNZXRob2RQYXJhbWV0ZXIxL2JlZm9yZS9UZXN0LmphdmEKQEAgLTAsMCArMSwyMCBAQAorcHVibGljIGNsYXNzIFRlc3QgeworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEZPTyA9IDA7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQkFSID0gMTsKKworICAgIHZvaWQgZm9vKGludCBpKSB7CisgICAgICAgIHN3aXRjaCAoaSkgeworICAgICAgICAgICAgY2FzZSBGT086CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEJBUjoKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBpbnQgayA9IE1hdGgubWF4KGkgKiBpLCBpICsgaSk7CisgICAgICAgIHN3aXRjaCAoaykgeworICAgICAgICAgICAgY2FzZSBGT086CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEJBUjoKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdEVudW0vY2FudENoYW5nZVJldHVyblR5cGUvYWZ0ZXIvVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RFbnVtL2NhbnRDaGFuZ2VSZXR1cm5UeXBlL2FmdGVyL1Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNzdkNTBlCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RFbnVtL2NhbnRDaGFuZ2VSZXR1cm5UeXBlL2FmdGVyL1Rlc3QuamF2YQpAQCAtMCwwICsxLDEzIEBACitwdWJsaWMgY2xhc3MgVGVzdCB7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRk9PID0gMDsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBCQVIgPSAyOworCisgICAgdm9pZCBmb28oU3RyaW5nW10gYXJncykgeworICAgICAgICBzd2l0Y2ggKGFyZ3MubGVuZ3RoKSB7CisgICAgICAgICAgICBjYXNlIEZPTzoKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQkFSOgorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RFbnVtL2NhbnRDaGFuZ2VSZXR1cm5UeXBlL2JlZm9yZS9UZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdEVudW0vY2FudENoYW5nZVJldHVyblR5cGUvYmVmb3JlL1Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNzdkNTBlCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RFbnVtL2NhbnRDaGFuZ2VSZXR1cm5UeXBlL2JlZm9yZS9UZXN0LmphdmEKQEAgLTAsMCArMSwxMyBAQAorcHVibGljIGNsYXNzIFRlc3QgeworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEZPTyA9IDA7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQkFSID0gMjsKKworICAgIHZvaWQgZm9vKFN0cmluZ1tdIGFyZ3MpIHsKKyAgICAgICAgc3dpdGNoIChhcmdzLmxlbmd0aCkgeworICAgICAgICAgICAgY2FzZSBGT086CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEJBUjoKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0RW51bS9jYW50Q2hhbmdlUmV0dXJuVHlwZTEvYWZ0ZXIvVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RFbnVtL2NhbnRDaGFuZ2VSZXR1cm5UeXBlMS9hZnRlci9UZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjhhNzVkMwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0RW51bS9jYW50Q2hhbmdlUmV0dXJuVHlwZTEvYWZ0ZXIvVGVzdC5qYXZhCkBAIC0wLDAgKzEsMTcgQEAKK3B1YmxpYyBjbGFzcyBUZXN0IHsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBGT08gPSAwOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEJBUiA9IDI7CisKKyAgICB2b2lkIGZvbyhTdHJpbmdbXSBhcmdzKSB7CisgICAgICAgIHN3aXRjaCAoYm9vKGFyZ3MpKSB7CisgICAgICAgICAgICBjYXNlIEZPTzoKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQkFSOgorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgaW50IGJvbyhTdHJpbmdbXSBhcmdzKSB7CisgICAgICAgIHJldHVybiBhcmdzLmxlbmd0aDsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RFbnVtL2NhbnRDaGFuZ2VSZXR1cm5UeXBlMS9iZWZvcmUvVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RFbnVtL2NhbnRDaGFuZ2VSZXR1cm5UeXBlMS9iZWZvcmUvVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI4YTc1ZDMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdEVudW0vY2FudENoYW5nZVJldHVyblR5cGUxL2JlZm9yZS9UZXN0LmphdmEKQEAgLTAsMCArMSwxNyBAQAorcHVibGljIGNsYXNzIFRlc3QgeworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEZPTyA9IDA7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQkFSID0gMjsKKworICAgIHZvaWQgZm9vKFN0cmluZ1tdIGFyZ3MpIHsKKyAgICAgICAgc3dpdGNoIChib28oYXJncykpIHsKKyAgICAgICAgICAgIGNhc2UgRk9POgorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBCQVI6CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpbnQgYm9vKFN0cmluZ1tdIGFyZ3MpIHsKKyAgICAgICAgcmV0dXJuIGFyZ3MubGVuZ3RoOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdEVudW0vY2hhbmdlTWV0aG9kUGFyYW1ldGVyL2FmdGVyL0VFbnVtLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdEVudW0vY2hhbmdlTWV0aG9kUGFyYW1ldGVyL2FmdGVyL0VFbnVtLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGM4OGEzYgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0RW51bS9jaGFuZ2VNZXRob2RQYXJhbWV0ZXIvYWZ0ZXIvRUVudW0uamF2YQpAQCAtMCwwICsxLDEyIEBACitwdWJsaWMgZW51bSBFRW51bSB7CisgICAgRk9PKDApLCBCQVIoMSk7CisgICAgcHJpdmF0ZSBpbnQgdmFsdWU7CisKKyAgICBwdWJsaWMgaW50IGdldFZhbHVlKCkgeworICAgICAgICByZXR1cm4gdmFsdWU7CisgICAgfQorCisgICAgRUVudW0oaW50IHZhbHVlKSB7CisgICAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RFbnVtL2NoYW5nZU1ldGhvZFBhcmFtZXRlci9hZnRlci9UZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdEVudW0vY2hhbmdlTWV0aG9kUGFyYW1ldGVyL2FmdGVyL1Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYzA4MThmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RFbnVtL2NoYW5nZU1ldGhvZFBhcmFtZXRlci9hZnRlci9UZXN0LmphdmEKQEAgLTAsMCArMSwxNiBAQAorcHVibGljIGNsYXNzIFRlc3QgeworCisgICAgdm9pZCBmb28oRUVudW0gaSkgeworICAgICAgICBzd2l0Y2ggKGkpIHsKKyAgICAgICAgICAgIGNhc2UgRk9POgorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBCQVI6CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB2b2lkIGZvb2JhcigpIHsKKyAgICAgICAgZm9vKEVFbnVtLkZPTyk7CisgICAgICAgIGZvbyhFRW51bS5CQVIpOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdEVudW0vY2hhbmdlTWV0aG9kUGFyYW1ldGVyL2JlZm9yZS9UZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdEVudW0vY2hhbmdlTWV0aG9kUGFyYW1ldGVyL2JlZm9yZS9UZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjlmYTcyNgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0RW51bS9jaGFuZ2VNZXRob2RQYXJhbWV0ZXIvYmVmb3JlL1Rlc3QuamF2YQpAQCAtMCwwICsxLDE4IEBACitwdWJsaWMgY2xhc3MgVGVzdCB7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRk9PID0gMDsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBCQVIgPSAxOworCisgICAgdm9pZCBmb28oaW50IGkpIHsKKyAgICAgICAgc3dpdGNoIChpKSB7CisgICAgICAgICAgICBjYXNlIEZPTzoKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQkFSOgorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgdm9pZCBmb29iYXIoKSB7CisgICAgICAgIGZvbyhGT08pOworICAgICAgICBmb28oQkFSKTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RFbnVtL2NoYW5nZU1ldGhvZFBhcmFtZXRlckFuZFJlcGxhY2VPdGhlclVzYWdlcy9hZnRlci9FRW51bS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RFbnVtL2NoYW5nZU1ldGhvZFBhcmFtZXRlckFuZFJlcGxhY2VPdGhlclVzYWdlcy9hZnRlci9FRW51bS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRjODhhM2IKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdEVudW0vY2hhbmdlTWV0aG9kUGFyYW1ldGVyQW5kUmVwbGFjZU90aGVyVXNhZ2VzL2FmdGVyL0VFbnVtLmphdmEKQEAgLTAsMCArMSwxMiBAQAorcHVibGljIGVudW0gRUVudW0geworICAgIEZPTygwKSwgQkFSKDEpOworICAgIHByaXZhdGUgaW50IHZhbHVlOworCisgICAgcHVibGljIGludCBnZXRWYWx1ZSgpIHsKKyAgICAgICAgcmV0dXJuIHZhbHVlOworICAgIH0KKworICAgIEVFbnVtKGludCB2YWx1ZSkgeworICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWU7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0RW51bS9jaGFuZ2VNZXRob2RQYXJhbWV0ZXJBbmRSZXBsYWNlT3RoZXJVc2FnZXMvYWZ0ZXIvVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RFbnVtL2NoYW5nZU1ldGhvZFBhcmFtZXRlckFuZFJlcGxhY2VPdGhlclVzYWdlcy9hZnRlci9UZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTBiNWI1OQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0RW51bS9jaGFuZ2VNZXRob2RQYXJhbWV0ZXJBbmRSZXBsYWNlT3RoZXJVc2FnZXMvYWZ0ZXIvVGVzdC5qYXZhCkBAIC0wLDAgKzEsMTIgQEAKK3B1YmxpYyBjbGFzcyBUZXN0IHsKKworICAgIHZvaWQgZm9vKEVFbnVtIGkpIHsKKyAgICAgICAgc3dpdGNoIChpKSB7CisgICAgICAgICAgICBjYXNlIEZPTzoKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQkFSOgorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGludCBrID0gTWF0aC5tYXgoaS5nZXRWYWx1ZSgpICogaS5nZXRWYWx1ZSgpLCBpLmdldFZhbHVlKCkgKyBpLmdldFZhbHVlKCkpOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdEVudW0vY2hhbmdlTWV0aG9kUGFyYW1ldGVyQW5kUmVwbGFjZU90aGVyVXNhZ2VzL2JlZm9yZS9UZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdEVudW0vY2hhbmdlTWV0aG9kUGFyYW1ldGVyQW5kUmVwbGFjZU90aGVyVXNhZ2VzL2JlZm9yZS9UZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDhjM2NlYQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0RW51bS9jaGFuZ2VNZXRob2RQYXJhbWV0ZXJBbmRSZXBsYWNlT3RoZXJVc2FnZXMvYmVmb3JlL1Rlc3QuamF2YQpAQCAtMCwwICsxLDE0IEBACitwdWJsaWMgY2xhc3MgVGVzdCB7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRk9PID0gMDsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBCQVIgPSAxOworCisgICAgdm9pZCBmb28oaW50IGkpIHsKKyAgICAgICAgc3dpdGNoIChpKSB7CisgICAgICAgICAgICBjYXNlIEZPTzoKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQkFSOgorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGludCBrID0gTWF0aC5tYXgoaSAqIGksIGkgKyBpKTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RFbnVtL2NoYW5nZVJldHVyblR5cGUvYWZ0ZXIvRUVudW0uamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0RW51bS9jaGFuZ2VSZXR1cm5UeXBlL2FmdGVyL0VFbnVtLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGM4OGEzYgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0RW51bS9jaGFuZ2VSZXR1cm5UeXBlL2FmdGVyL0VFbnVtLmphdmEKQEAgLTAsMCArMSwxMiBAQAorcHVibGljIGVudW0gRUVudW0geworICAgIEZPTygwKSwgQkFSKDEpOworICAgIHByaXZhdGUgaW50IHZhbHVlOworCisgICAgcHVibGljIGludCBnZXRWYWx1ZSgpIHsKKyAgICAgICAgcmV0dXJuIHZhbHVlOworICAgIH0KKworICAgIEVFbnVtKGludCB2YWx1ZSkgeworICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWU7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0RW51bS9jaGFuZ2VSZXR1cm5UeXBlL2FmdGVyL1Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0RW51bS9jaGFuZ2VSZXR1cm5UeXBlL2FmdGVyL1Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNjU4ZjFhCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RFbnVtL2NoYW5nZVJldHVyblR5cGUvYWZ0ZXIvVGVzdC5qYXZhCkBAIC0wLDAgKzEsMTkgQEAKK3B1YmxpYyBjbGFzcyBUZXN0IHsKKworICAgIHZvaWQgZm9vKCkgeworICAgICAgICBFRW51bSBpID0gZm9vYmFyKGZhbHNlKTsKKyAgICAgICAgc3dpdGNoIChpKSB7CisgICAgICAgICAgICBjYXNlIEZPTzoKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQkFSOgorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgRUVudW0gZm9vYmFyKGJvb2xlYW4gZmxhZykgeworICAgICAgICBpZiAoZmxhZykgeworICAgICAgICAgICAgcmV0dXJuIEVFbnVtLkZPTzsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gRUVudW0uQkFSOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdEVudW0vY2hhbmdlUmV0dXJuVHlwZS9iZWZvcmUvVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RFbnVtL2NoYW5nZVJldHVyblR5cGUvYmVmb3JlL1Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYTQzZDc5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RFbnVtL2NoYW5nZVJldHVyblR5cGUvYmVmb3JlL1Rlc3QuamF2YQpAQCAtMCwwICsxLDIxIEBACitwdWJsaWMgY2xhc3MgVGVzdCB7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRk9PID0gMDsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBCQVIgPSAxOworCisgICAgdm9pZCBmb28oKSB7CisgICAgICAgIGludCBpID0gZm9vYmFyKGZhbHNlKTsKKyAgICAgICAgc3dpdGNoIChpKSB7CisgICAgICAgICAgICBjYXNlIEZPTzoKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQkFSOgorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgaW50IGZvb2Jhcihib29sZWFuIGZsYWcpIHsKKyAgICAgICAgaWYgKGZsYWcpIHsKKyAgICAgICAgICAgIHJldHVybiBGT087CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIEJBUjsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RFbnVtL2RlcGVuZGFudENvbnN0YW50cy9hZnRlci9FRW51bS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RFbnVtL2RlcGVuZGFudENvbnN0YW50cy9hZnRlci9FRW51bS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE2MDk4NTEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdEVudW0vZGVwZW5kYW50Q29uc3RhbnRzL2FmdGVyL0VFbnVtLmphdmEKQEAgLTAsMCArMSwxMiBAQAorcHVibGljIGVudW0gRUVudW0geworICAgIEZPTygiZm9vIiksIEJBUihGT08uZ2V0VmFsdWUoKSk7CisgICAgcHJpdmF0ZSBTdHJpbmcgdmFsdWU7CisKKyAgICBwdWJsaWMgU3RyaW5nIGdldFZhbHVlKCkgeworICAgICAgICByZXR1cm4gdmFsdWU7CisgICAgfQorCisgICAgRUVudW0oU3RyaW5nIHZhbHVlKSB7CisgICAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RFbnVtL2RlcGVuZGFudENvbnN0YW50cy9hZnRlci9UZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdEVudW0vZGVwZW5kYW50Q29uc3RhbnRzL2FmdGVyL1Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NmQ4M2UwYwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0RW51bS9kZXBlbmRhbnRDb25zdGFudHMvYWZ0ZXIvVGVzdC5qYXZhCkBAIC0wLDAgKzEsMiBAQAorY2xhc3MgVGVzdCB7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RFbnVtL2RlcGVuZGFudENvbnN0YW50cy9iZWZvcmUvVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RFbnVtL2RlcGVuZGFudENvbnN0YW50cy9iZWZvcmUvVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBhZDQyOGQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdEVudW0vZGVwZW5kYW50Q29uc3RhbnRzL2JlZm9yZS9UZXN0LmphdmEKQEAgLTAsMCArMSw0IEBACitjbGFzcyBUZXN0IHsKKyAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRk9PID0gImZvbyI7CisgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEJBUiA9IEZPTzsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdEVudW0vZG9udENoYW5nZU90aGVyQ29uc3RhbnRzL2FmdGVyL1Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0RW51bS9kb250Q2hhbmdlT3RoZXJDb25zdGFudHMvYWZ0ZXIvVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU3MzE0M2QKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdEVudW0vZG9udENoYW5nZU90aGVyQ29uc3RhbnRzL2FmdGVyL1Rlc3QuamF2YQpAQCAtMCwwICsxLDE5IEBACitwdWJsaWMgY2xhc3MgVGVzdCB7CisgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE9LID0gMDsKKyAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRVJST1IgPSAxOworCisgIHZvaWQgZm9vKGludCBzdGF0dXMpIHsKKyAgICBzd2l0Y2ggKHN0YXR1cykgeworICAgICAgY2FzZSBPSzoKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVSUk9SOgorICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgTm9kZS5XQVJOSU5HOgorICAgICAgICBicmVhazsKKyAgICB9CisgIH0KK30KKworaW50ZXJmYWNlIE5vZGUgeworICBpbnQgV0FSTklORyA9IDI7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RFbnVtL2RvbnRDaGFuZ2VPdGhlckNvbnN0YW50cy9iZWZvcmUvVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RFbnVtL2RvbnRDaGFuZ2VPdGhlckNvbnN0YW50cy9iZWZvcmUvVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU3MzE0M2QKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdEVudW0vZG9udENoYW5nZU90aGVyQ29uc3RhbnRzL2JlZm9yZS9UZXN0LmphdmEKQEAgLTAsMCArMSwxOSBAQAorcHVibGljIGNsYXNzIFRlc3QgeworICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBPSyA9IDA7CisgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEVSUk9SID0gMTsKKworICB2b2lkIGZvbyhpbnQgc3RhdHVzKSB7CisgICAgc3dpdGNoIChzdGF0dXMpIHsKKyAgICAgIGNhc2UgT0s6CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBFUlJPUjoKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIE5vZGUuV0FSTklORzoKKyAgICAgICAgYnJlYWs7CisgICAgfQorICB9Cit9CisKK2ludGVyZmFjZSBOb2RlIHsKKyAgaW50IFdBUk5JTkcgPSAyOworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0RW51bS9mb3J3YXJkUmVmZXJlbmNlQ29uZmxpY3QvYWZ0ZXIvVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RFbnVtL2ZvcndhcmRSZWZlcmVuY2VDb25mbGljdC9hZnRlci9UZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGFkNDI4ZAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0RW51bS9mb3J3YXJkUmVmZXJlbmNlQ29uZmxpY3QvYWZ0ZXIvVGVzdC5qYXZhCkBAIC0wLDAgKzEsNCBAQAorY2xhc3MgVGVzdCB7CisgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEZPTyA9ICJmb28iOworICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBCQVIgPSBGT087Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RFbnVtL2ZvcndhcmRSZWZlcmVuY2VDb25mbGljdC9iZWZvcmUvVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RFbnVtL2ZvcndhcmRSZWZlcmVuY2VDb25mbGljdC9iZWZvcmUvVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBhZDQyOGQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdEVudW0vZm9yd2FyZFJlZmVyZW5jZUNvbmZsaWN0L2JlZm9yZS9UZXN0LmphdmEKQEAgLTAsMCArMSw0IEBACitjbGFzcyBUZXN0IHsKKyAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRk9PID0gImZvbyI7CisgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEJBUiA9IEZPTzsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdEVudW0vb25lQ29uc3RhbnQvYWZ0ZXIvRUVudW0uamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0RW51bS9vbmVDb25zdGFudC9hZnRlci9FRW51bS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE4MzI4M2IKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdEVudW0vb25lQ29uc3RhbnQvYWZ0ZXIvRUVudW0uamF2YQpAQCAtMCwwICsxLDEyIEBACitwdWJsaWMgZW51bSBFRW51bSB7CisgICAgRk9PKCJmb28iKTsKKyAgICBwcml2YXRlIFN0cmluZyB2YWx1ZTsKKworICAgIHB1YmxpYyBTdHJpbmcgZ2V0VmFsdWUoKSB7CisgICAgICAgIHJldHVybiB2YWx1ZTsKKyAgICB9CisKKyAgICBFRW51bShTdHJpbmcgdmFsdWUpIHsKKyAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdEVudW0vb25lQ29uc3RhbnQvYWZ0ZXIvVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RFbnVtL29uZUNvbnN0YW50L2FmdGVyL1Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NmQ4M2UwYwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0RW51bS9vbmVDb25zdGFudC9hZnRlci9UZXN0LmphdmEKQEAgLTAsMCArMSwyIEBACitjbGFzcyBUZXN0IHsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdEVudW0vb25lQ29uc3RhbnQvYmVmb3JlL1Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0RW51bS9vbmVDb25zdGFudC9iZWZvcmUvVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU4ZDZmNjZjCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RFbnVtL29uZUNvbnN0YW50L2JlZm9yZS9UZXN0LmphdmEKQEAgLTAsMCArMSwzIEBACitjbGFzcyBUZXN0IHsKKyAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRk9PID0gImZvbyI7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RFbnVtL3JlZmVyZW5jZXNPbkVudW1Db25zdGFudEVsc2V3aGVyZS9hZnRlci9FRW51bS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RFbnVtL3JlZmVyZW5jZXNPbkVudW1Db25zdGFudEVsc2V3aGVyZS9hZnRlci9FRW51bS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFhNjk0NjYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdEVudW0vcmVmZXJlbmNlc09uRW51bUNvbnN0YW50RWxzZXdoZXJlL2FmdGVyL0VFbnVtLmphdmEKQEAgLTAsMCArMSwxMiBAQAorcHVibGljIGVudW0gRUVudW0geworICAgIEZPTygwKSwgQkFSKDIpOworICAgIHByaXZhdGUgaW50IHZhbHVlOworCisgICAgcHVibGljIGludCBnZXRWYWx1ZSgpIHsKKyAgICAgICAgcmV0dXJuIHZhbHVlOworICAgIH0KKworICAgIEVFbnVtKGludCB2YWx1ZSkgeworICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWU7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0RW51bS9yZWZlcmVuY2VzT25FbnVtQ29uc3RhbnRFbHNld2hlcmUvYWZ0ZXIvVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RFbnVtL3JlZmVyZW5jZXNPbkVudW1Db25zdGFudEVsc2V3aGVyZS9hZnRlci9UZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzM4NDQ4YgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0RW51bS9yZWZlcmVuY2VzT25FbnVtQ29uc3RhbnRFbHNld2hlcmUvYWZ0ZXIvVGVzdC5qYXZhCkBAIC0wLDAgKzEsNSBAQAorY2xhc3MgVGVzdCB7CisgICAgdm9pZCBmb28oKSB7CisgICAgU3lzdGVtLm91dC5wcmludGxuKEVFbnVtLkZPTy5nZXRWYWx1ZSgpKTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0RW51bS9yZWZlcmVuY2VzT25FbnVtQ29uc3RhbnRFbHNld2hlcmUvYWZ0ZXIvVXNhZ2UuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0RW51bS9yZWZlcmVuY2VzT25FbnVtQ29uc3RhbnRFbHNld2hlcmUvYWZ0ZXIvVXNhZ2UuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMTBmZGVlCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RFbnVtL3JlZmVyZW5jZXNPbkVudW1Db25zdGFudEVsc2V3aGVyZS9hZnRlci9Vc2FnZS5qYXZhCkBAIC0wLDAgKzEsMTUgQEAKK2NsYXNzIFVzYWdlIHsKKyAgdm9pZCBmb28oRUVudW0gaSkgeworICAgICAgICBzd2l0Y2ggKGkpIHsKKyAgICAgICAgICAgIGNhc2UgRk9POgorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBCQVI6CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB2b2lkIGZvb2JhcigpIHsKKyAgICAgICAgZm9vKEVFbnVtLkZPTyk7CisgICAgICAgIGZvbyhFRW51bS5CQVIpOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdEVudW0vcmVmZXJlbmNlc09uRW51bUNvbnN0YW50RWxzZXdoZXJlL2JlZm9yZS9UZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdEVudW0vcmVmZXJlbmNlc09uRW51bUNvbnN0YW50RWxzZXdoZXJlL2JlZm9yZS9UZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWM2MTJkYQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0RW51bS9yZWZlcmVuY2VzT25FbnVtQ29uc3RhbnRFbHNld2hlcmUvYmVmb3JlL1Rlc3QuamF2YQpAQCAtMCwwICsxLDcgQEAKK2NsYXNzIFRlc3QgeworICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBGT08gPSAwOworICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBCQVIgPSAyOworICB2b2lkIGZvbygpIHsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oRk9PKTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0RW51bS9yZWZlcmVuY2VzT25FbnVtQ29uc3RhbnRFbHNld2hlcmUvYmVmb3JlL1VzYWdlLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdEVudW0vcmVmZXJlbmNlc09uRW51bUNvbnN0YW50RWxzZXdoZXJlL2JlZm9yZS9Vc2FnZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc1NjNjNjQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdEVudW0vcmVmZXJlbmNlc09uRW51bUNvbnN0YW50RWxzZXdoZXJlL2JlZm9yZS9Vc2FnZS5qYXZhCkBAIC0wLDAgKzEsMTUgQEAKK2NsYXNzIFVzYWdlIHsKKyAgdm9pZCBmb28oaW50IGkpIHsKKyAgICAgICAgc3dpdGNoIChpKSB7CisgICAgICAgICAgICBjYXNlIFRlc3QuRk9POgorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBUZXN0LkJBUjoKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKworICAgIHZvaWQgZm9vYmFyKCkgeworICAgICAgICBmb28oVGVzdC5GT08pOworICAgICAgICBmb28oVGVzdC5CQVIpOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdEVudW0vcmVmZXJlbmNlc09uRW51bUNvbnN0YW50SW5FbnVtL2FmdGVyL0VFbnVtLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdEVudW0vcmVmZXJlbmNlc09uRW51bUNvbnN0YW50SW5FbnVtL2FmdGVyL0VFbnVtLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDRmYTViNgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0RW51bS9yZWZlcmVuY2VzT25FbnVtQ29uc3RhbnRJbkVudW0vYWZ0ZXIvRUVudW0uamF2YQpAQCAtMCwwICsxLDE2IEBACitwdWJsaWMgZW51bSBFRW51bSB7CisgICAgRk9PKCJmb28iKTsKKyAgICBwcml2YXRlIFN0cmluZyB2YWx1ZTsKKworICAgIHB1YmxpYyBTdHJpbmcgZ2V0VmFsdWUoKSB7CisgICAgICAgIHJldHVybiB2YWx1ZTsKKyAgICB9CisKKyAgICBFRW51bShTdHJpbmcgdmFsdWUpIHsKKyAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlOworICAgIH0KKworICAgIHZvaWQgZm9vKCkgeworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oRk9PLmdldFZhbHVlKCkpOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdEVudW0vcmVmZXJlbmNlc09uRW51bUNvbnN0YW50SW5FbnVtL2FmdGVyL1Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0RW51bS9yZWZlcmVuY2VzT25FbnVtQ29uc3RhbnRJbkVudW0vYWZ0ZXIvVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk2ZDgzZTBjCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RFbnVtL3JlZmVyZW5jZXNPbkVudW1Db25zdGFudEluRW51bS9hZnRlci9UZXN0LmphdmEKQEAgLTAsMCArMSwyIEBACitjbGFzcyBUZXN0IHsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdEVudW0vcmVmZXJlbmNlc09uRW51bUNvbnN0YW50SW5FbnVtL2JlZm9yZS9UZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdEVudW0vcmVmZXJlbmNlc09uRW51bUNvbnN0YW50SW5FbnVtL2JlZm9yZS9UZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzQ0ZjUxMgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0RW51bS9yZWZlcmVuY2VzT25FbnVtQ29uc3RhbnRJbkVudW0vYmVmb3JlL1Rlc3QuamF2YQpAQCAtMCwwICsxLDYgQEAKK2NsYXNzIFRlc3QgeworICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBGT08gPSAiZm9vIjsKKyAgdm9pZCBmb28oKSB7CisgICAgU3lzdGVtLm91dC5wcmludGxuKEZPTyk7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdEVudW0vcmVmZXJlbmNlc09uRW51bUNvbnN0YW50SW5PcmlnaW5hbC9hZnRlci9FRW51bS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RFbnVtL3JlZmVyZW5jZXNPbkVudW1Db25zdGFudEluT3JpZ2luYWwvYWZ0ZXIvRUVudW0uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hODMyODNiCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RFbnVtL3JlZmVyZW5jZXNPbkVudW1Db25zdGFudEluT3JpZ2luYWwvYWZ0ZXIvRUVudW0uamF2YQpAQCAtMCwwICsxLDEyIEBACitwdWJsaWMgZW51bSBFRW51bSB7CisgICAgRk9PKCJmb28iKTsKKyAgICBwcml2YXRlIFN0cmluZyB2YWx1ZTsKKworICAgIHB1YmxpYyBTdHJpbmcgZ2V0VmFsdWUoKSB7CisgICAgICAgIHJldHVybiB2YWx1ZTsKKyAgICB9CisKKyAgICBFRW51bShTdHJpbmcgdmFsdWUpIHsKKyAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdEVudW0vcmVmZXJlbmNlc09uRW51bUNvbnN0YW50SW5PcmlnaW5hbC9hZnRlci9UZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdEVudW0vcmVmZXJlbmNlc09uRW51bUNvbnN0YW50SW5PcmlnaW5hbC9hZnRlci9UZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzM4NDQ4YgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0RW51bS9yZWZlcmVuY2VzT25FbnVtQ29uc3RhbnRJbk9yaWdpbmFsL2FmdGVyL1Rlc3QuamF2YQpAQCAtMCwwICsxLDUgQEAKK2NsYXNzIFRlc3QgeworICAgIHZvaWQgZm9vKCkgeworICAgIFN5c3RlbS5vdXQucHJpbnRsbihFRW51bS5GT08uZ2V0VmFsdWUoKSk7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdEVudW0vcmVmZXJlbmNlc09uRW51bUNvbnN0YW50SW5PcmlnaW5hbC9iZWZvcmUvVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RFbnVtL3JlZmVyZW5jZXNPbkVudW1Db25zdGFudEluT3JpZ2luYWwvYmVmb3JlL1Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNDRmNTEyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RFbnVtL3JlZmVyZW5jZXNPbkVudW1Db25zdGFudEluT3JpZ2luYWwvYmVmb3JlL1Rlc3QuamF2YQpAQCAtMCwwICsxLDYgQEAKK2NsYXNzIFRlc3QgeworICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBGT08gPSAiZm9vIjsKKyAgdm9pZCBmb28oKSB7CisgICAgU3lzdGVtLm91dC5wcmludGxuKEZPTyk7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdEVudW0vdW5rbm93blN3aXRjaExhYmVsL2FmdGVyL1Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0RW51bS91bmtub3duU3dpdGNoTGFiZWwvYWZ0ZXIvVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFlZThmMGUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdEVudW0vdW5rbm93blN3aXRjaExhYmVsL2FmdGVyL1Rlc3QuamF2YQpAQCAtMCwwICsxLDIwIEBACitwdWJsaWMgY2xhc3MgVGVzdCB7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRk9PID0gMDsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBCQVIgPSAxOworCisgICAgdm9pZCBmb28oaW50IGkpIHsKKyAgICAgICAgc3dpdGNoIChpKSB7CisgICAgICAgICAgICBjYXNlIEZPTzoKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQkFSOgorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSA4OgorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgdm9pZCBmb29iYXIoKSB7CisgICAgICAgIGZvbyhGT08pOworICAgICAgICBmb28oQkFSKTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RFbnVtL3Vua25vd25Td2l0Y2hMYWJlbC9iZWZvcmUvVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RFbnVtL3Vua25vd25Td2l0Y2hMYWJlbC9iZWZvcmUvVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFlZThmMGUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdEVudW0vdW5rbm93blN3aXRjaExhYmVsL2JlZm9yZS9UZXN0LmphdmEKQEAgLTAsMCArMSwyMCBAQAorcHVibGljIGNsYXNzIFRlc3QgeworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEZPTyA9IDA7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQkFSID0gMTsKKworICAgIHZvaWQgZm9vKGludCBpKSB7CisgICAgICAgIHN3aXRjaCAoaSkgeworICAgICAgICAgICAgY2FzZSBGT086CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEJBUjoKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgODoKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKworICAgIHZvaWQgZm9vYmFyKCkgeworICAgICAgICBmb28oRk9PKTsKKyAgICAgICAgZm9vKEJBUik7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0RW51bS92YWx1ZU5hbWVDb25mbGljdC9hZnRlci9FRW51bS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RFbnVtL3ZhbHVlTmFtZUNvbmZsaWN0L2FmdGVyL0VFbnVtLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzBiOGZkZQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0RW51bS92YWx1ZU5hbWVDb25mbGljdC9hZnRlci9FRW51bS5qYXZhCkBAIC0wLDAgKzEsMTMgQEAKK3B1YmxpYyBlbnVtIEVFbnVtIHsKKyAgICBGT08oImZvbyIpOworICAgIHB1YmxpYyBpbnQgdmFsdWUgPSAwOworICAgIHByaXZhdGUgU3RyaW5nIHZhbHVlMTsKKworICAgIHB1YmxpYyBTdHJpbmcgZ2V0VmFsdWUoKSB7CisgICAgICAgIHJldHVybiB2YWx1ZTE7CisgICAgfQorCisgICAgRUVudW0oU3RyaW5nIHZhbHVlKSB7CisgICAgICAgIHZhbHVlMSA9IHZhbHVlOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdEVudW0vdmFsdWVOYW1lQ29uZmxpY3QvYWZ0ZXIvVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RFbnVtL3ZhbHVlTmFtZUNvbmZsaWN0L2FmdGVyL1Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NmQ4M2UwYwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0RW51bS92YWx1ZU5hbWVDb25mbGljdC9hZnRlci9UZXN0LmphdmEKQEAgLTAsMCArMSwyIEBACitjbGFzcyBUZXN0IHsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdEVudW0vdmFsdWVOYW1lQ29uZmxpY3QvYmVmb3JlL1Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0RW51bS92YWx1ZU5hbWVDb25mbGljdC9iZWZvcmUvVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjliOThmYzgKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdEVudW0vdmFsdWVOYW1lQ29uZmxpY3QvYmVmb3JlL1Rlc3QuamF2YQpAQCAtMCwwICsxLDQgQEAKK2NsYXNzIFRlc3QgeworICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBGT08gPSAiZm9vIjsKKyAgcHVibGljIGludCB2YWx1ZSA9IDA7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2QvQW5vbklubmVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZC9Bbm9uSW5uZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNGEzMjQ2Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2QvQW5vbklubmVyLmphdmEKQEAgLTAsMCArMSwyMSBAQAorCitpbXBvcnQgamF2YXguc3dpbmcuKjsKK2ltcG9ydCBqYXZhLmF3dC5ldmVudC5BY3Rpb25FdmVudDsKKworcHVibGljIGNsYXNzIEV4dHJhY3RNZXRob2RzIHsgfQorYWJzdHJhY3QgY2xhc3MgTXlCdXR0b24KKyAgICAgICAgZXh0ZW5kcyBKQnV0dG9uCisgICAgICAgIHsKKyAgICBwcm90ZWN0ZWQgTXlCdXR0b24oIFN0cmluZyB0ZXh0ICkgeworICAgICAgICBzdXBlciggdGV4dCApOworICAgIH0KK30KK2NsYXNzIEZvbyB7CisgICAgcHJpdmF0ZSBKQnV0dG9uIGNyZWF0ZU9LQnV0dG9uKCkgeworICAgICAgICByZXR1cm4gbmV3IE15QnV0dG9uKCAiT0siICkgeworICAgICAgICAgICAgcHVibGljIHZvaWQgYWN0aW9uUGVyZm9ybWVkKCBBY3Rpb25FdmVudCBlICkgeworICAgICAgICAgICAgPHNlbGVjdGlvbj4gICAgc2V0VmlzaWJsZSggZmFsc2UgKTsgPC9zZWxlY3Rpb24+CisgICAgICAgICAgICB9CisgICAgICAgIH07CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2QvQW5vbklubmVyX2FmdGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZC9Bbm9uSW5uZXJfYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNjMzNDFmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2QvQW5vbklubmVyX2FmdGVyLmphdmEKQEAgLTAsMCArMSwyNSBAQAorCitpbXBvcnQgamF2YXguc3dpbmcuKjsKK2ltcG9ydCBqYXZhLmF3dC5ldmVudC5BY3Rpb25FdmVudDsKKworcHVibGljIGNsYXNzIEV4dHJhY3RNZXRob2RzIHsgfQorYWJzdHJhY3QgY2xhc3MgTXlCdXR0b24KKyAgICAgICAgZXh0ZW5kcyBKQnV0dG9uCisgICAgICAgIHsKKyAgICBwcm90ZWN0ZWQgTXlCdXR0b24oIFN0cmluZyB0ZXh0ICkgeworICAgICAgICBzdXBlciggdGV4dCApOworICAgIH0KK30KK2NsYXNzIEZvbyB7CisgICAgcHJpdmF0ZSBKQnV0dG9uIGNyZWF0ZU9LQnV0dG9uKCkgeworICAgICAgICByZXR1cm4gbmV3IE15QnV0dG9uKCAiT0siICkgeworICAgICAgICAgICAgcHVibGljIHZvaWQgYWN0aW9uUGVyZm9ybWVkKCBBY3Rpb25FdmVudCBlICkgeworICAgICAgICAgICAgICAgIG5ld01ldGhvZCgpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBwcml2YXRlIHZvaWQgbmV3TWV0aG9kKCkgeworICAgICAgICAgICAgICAgIHNldFZpc2libGUoIGZhbHNlICk7CisgICAgICAgICAgICB9CisgICAgICAgIH07CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2QvQXJyYXlBY2Nlc3MuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kL0FycmF5QWNjZXNzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2QxZmQ4OAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kL0FycmF5QWNjZXNzLmphdmEKQEAgLTAsMCArMSw4IEBACitjbGFzcyBUZXN0IHsKKyAgdm9pZCBmb28oU3RyaW5nW10gc3MpIHsKKyAgICAgZm9yKGludCBpID0gMDsgaSA8IHNzLmxlbmd0aDsgaSsrKSB7CisgICAgICAgPHNlbGVjdGlvbj5TeXN0ZW0ub3V0LnByaW50bG4oc3NbaV0pOworICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihzc1tpXSArIHNzW2ldKTs8L3NlbGVjdGlvbj4KKyAgICAgfQorICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2QvQXJyYXlBY2Nlc3MxLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZC9BcnJheUFjY2VzczEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZWM1MDMzCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2QvQXJyYXlBY2Nlc3MxLmphdmEKQEAgLTAsMCArMSwxMCBAQAorY2xhc3MgVGVzdCB7CisgIHZvaWQgZm9vKFN0cmluZ1tdIHNzLCBTdHJpbmdbXSBiYikgeworICAgICBmb3IoaW50IGkgPSAwOyBpIDwgc3MubGVuZ3RoOyBpKyspIHsKKyAgICAgICA8c2VsZWN0aW9uPgorICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihzc1tpXSk7CisgICAgICAgU3lzdGVtLm91dC5wcmludGxuKGJiW2ldKTsKKyAgICAgICA8L3NlbGVjdGlvbj4KKyAgICAgfQorICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2QvQXJyYXlBY2Nlc3MxX2FmdGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZC9BcnJheUFjY2VzczFfYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMjAzYmM5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2QvQXJyYXlBY2Nlc3MxX2FmdGVyLmphdmEKQEAgLTAsMCArMSwxNCBAQAorY2xhc3MgVGVzdCB7CisgIHZvaWQgZm9vKFN0cmluZ1tdIHNzLCBTdHJpbmdbXSBiYikgeworICAgICBmb3IoaW50IGkgPSAwOyBpIDwgc3MubGVuZ3RoOyBpKyspIHsKKworICAgICAgICAgbmV3TWV0aG9kKHNzW2ldLCBiYltpXSk7CisgICAgICAgCisgICAgIH0KKyAgfQorCisgICAgcHJpdmF0ZSB2b2lkIG5ld01ldGhvZChTdHJpbmcgcywgU3RyaW5nIHgpIHsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKHMpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oeCk7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kL0FycmF5QWNjZXNzV2l0aER1cGxpY2F0ZXMuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kL0FycmF5QWNjZXNzV2l0aER1cGxpY2F0ZXMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NTI0OGZiCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2QvQXJyYXlBY2Nlc3NXaXRoRHVwbGljYXRlcy5qYXZhCkBAIC0wLDAgKzEsNiBAQAorY2xhc3MgVGVzdCB7CisgIHZvaWQgZm9vKFN0cmluZ1tdIHNzKSB7CisgICAgPHNlbGVjdGlvbj5TeXN0ZW0ub3V0LnByaW50bG4oc3NbMF0pOzwvc2VsZWN0aW9uPgorICAgIFN5c3RlbS5vdXQucHJpbnRsbihzc1swXSk7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZC9BcnJheUFjY2Vzc1dpdGhEdXBsaWNhdGVzX2FmdGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZC9BcnJheUFjY2Vzc1dpdGhEdXBsaWNhdGVzX2FmdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjQ0OTZiZQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kL0FycmF5QWNjZXNzV2l0aER1cGxpY2F0ZXNfYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDEwIEBACitjbGFzcyBUZXN0IHsKKyAgdm9pZCBmb28oU3RyaW5nW10gc3MpIHsKKyAgICAgIG5ld01ldGhvZChzc1swXSk7CisgICAgICBuZXdNZXRob2Qoc3NbMF0pOworICB9CisKKyAgICBwcml2YXRlIHZvaWQgbmV3TWV0aG9kKFN0cmluZyBzKSB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihzKTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2QvQXJyYXlBY2Nlc3NXaXRoTG9jYWxJbmRleC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2QvQXJyYXlBY2Nlc3NXaXRoTG9jYWxJbmRleC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNiODUwYmQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZC9BcnJheUFjY2Vzc1dpdGhMb2NhbEluZGV4LmphdmEKQEAgLTAsMCArMSw5IEBACitjbGFzcyBUZXN0IHsKKyAgdm9pZCBmb28oU3RyaW5nW10gc3MpIHsKKyAgICBJbnRlZ2VyW10gbGV2ZWxzID0gbmV3IEludGVnZXJbXXtJbnRlZ2VyLnZhbHVlT2YoMSksIEludGVnZXIudmFsdWVPZigyKSwgSW50ZWdlci52YWx1ZU9mKDMpLH07CisgICAgSW50ZWdlcltdIG5leHRXaW5OdW1iZXIgPSBuZXcgSW50ZWdlcls2XTsKKyAgICA8c2VsZWN0aW9uPmZvciAoSW50ZWdlciBsZXZlbCA6IGxldmVscykgeworICAgICAgSW50ZWdlciBuZXh0V2luTnVtID0gbmV4dFdpbk51bWJlcltsZXZlbCAtIDFdOworICAgIH08L3NlbGVjdGlvbj4KKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kL0FycmF5QWNjZXNzV2l0aExvY2FsSW5kZXhfYWZ0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kL0FycmF5QWNjZXNzV2l0aExvY2FsSW5kZXhfYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OTc0MDBjCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2QvQXJyYXlBY2Nlc3NXaXRoTG9jYWxJbmRleF9hZnRlci5qYXZhCkBAIC0wLDAgKzEsMTMgQEAKK2NsYXNzIFRlc3QgeworICB2b2lkIGZvbyhTdHJpbmdbXSBzcykgeworICAgIEludGVnZXJbXSBsZXZlbHMgPSBuZXcgSW50ZWdlcltde0ludGVnZXIudmFsdWVPZigxKSwgSW50ZWdlci52YWx1ZU9mKDIpLCBJbnRlZ2VyLnZhbHVlT2YoMyksfTsKKyAgICBJbnRlZ2VyW10gbmV4dFdpbk51bWJlciA9IG5ldyBJbnRlZ2VyWzZdOworICAgICAgbmV3TWV0aG9kKGxldmVscywgbmV4dFdpbk51bWJlcik7CisgIH0KKworICAgIHByaXZhdGUgdm9pZCBuZXdNZXRob2QoSW50ZWdlcltdIGxldmVscywgSW50ZWdlcltdIG5leHRXaW5OdW1iZXIpIHsKKyAgICAgICAgZm9yIChJbnRlZ2VyIGxldmVsIDogbGV2ZWxzKSB7CisgICAgICAgICAgSW50ZWdlciBuZXh0V2luTnVtID0gbmV4dFdpbk51bWJlcltsZXZlbCAtIDFdOworICAgICAgICB9CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kL0FycmF5QWNjZXNzX2FmdGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZC9BcnJheUFjY2Vzc19hZnRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ4YjRkMTYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZC9BcnJheUFjY2Vzc19hZnRlci5qYXZhCkBAIC0wLDAgKzEsMTIgQEAKK2NsYXNzIFRlc3QgeworICB2b2lkIGZvbyhTdHJpbmdbXSBzcykgeworICAgICBmb3IoaW50IGkgPSAwOyBpIDwgc3MubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgIG5ld01ldGhvZChzc1tpXSk7CisgICAgIH0KKyAgfQorCisgICAgcHJpdmF0ZSB2b2lkIG5ld01ldGhvZChTdHJpbmcgcykgeworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4ocyk7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihzICsgcyk7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kL0Jvb2xlYW5FeHByZXNzaW9uLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZC9Cb29sZWFuRXhwcmVzc2lvbi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUwMzkxNTIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZC9Cb29sZWFuRXhwcmVzc2lvbi5qYXZhCkBAIC0wLDAgKzEsNSBAQAorY2xhc3MgVGVzdCB7CisgICAgdm9pZCBtZXRob2QoaW50IGkpIHsKKyAgICAgICAgYm9vbGVhbiBpc0RpcnR5ID0gPHNlbGVjdGlvbj5pID09IDA8L3NlbGVjdGlvbj4gfHwgb3RoZXJUZXN0cygpOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZC9Cb29sZWFuRXhwcmVzc2lvbl9hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2QvQm9vbGVhbkV4cHJlc3Npb25fYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NTlkMTJjCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2QvQm9vbGVhbkV4cHJlc3Npb25fYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDkgQEAKK2NsYXNzIFRlc3QgeworICAgIHZvaWQgbWV0aG9kKGludCBpKSB7CisgICAgICAgIGJvb2xlYW4gaXNEaXJ0eSA9IG5ld01ldGhvZChpKSB8fCBvdGhlclRlc3RzKCk7CisgICAgfQorCisgICAgcHJpdmF0ZSBib29sZWFuIG5ld01ldGhvZChpbnQgaSkgeworICAgICAgICByZXR1cm4gaSA9PSAwOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZC9DYXN0NFBhcmFtR2VuZXJhdGlvbi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2QvQ2FzdDRQYXJhbUdlbmVyYXRpb24uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMzZjNjVkCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2QvQ2FzdDRQYXJhbUdlbmVyYXRpb24uamF2YQpAQCAtMCwwICsxLDExIEBACitwdWJsaWMgY2xhc3MgVGVzdCB7CisgIHZvaWQgZm9vKE9iamVjdCBvKSB7CisgICAgaWYgKG8gaW5zdGFuY2VvZiBBKSB7CisgICAgICA8c2VsZWN0aW9uPigoQSlvKS5iYXIoKTs8L3NlbGVjdGlvbj4KKyAgICB9CisgIH0KK30KKworY2xhc3MgQSB7CisgIHZvaWQgYmFyKCl7fQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kL0Nhc3Q0UGFyYW1HZW5lcmF0aW9uX2FmdGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZC9DYXN0NFBhcmFtR2VuZXJhdGlvbl9hZnRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRmOGU5NzkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZC9DYXN0NFBhcmFtR2VuZXJhdGlvbl9hZnRlci5qYXZhCkBAIC0wLDAgKzEsMTUgQEAKK3B1YmxpYyBjbGFzcyBUZXN0IHsKKyAgdm9pZCBmb28oT2JqZWN0IG8pIHsKKyAgICBpZiAobyBpbnN0YW5jZW9mIEEpIHsKKyAgICAgICAgbmV3TWV0aG9kKChBKSBvKTsKKyAgICB9CisgIH0KKworICAgIHByaXZhdGUgdm9pZCBuZXdNZXRob2QoQSBvKSB7CisgICAgICAgICgoQSlvKS5iYXIoKTsKKyAgICB9Cit9CisKK2NsYXNzIEEgeworICB2b2lkIGJhcigpe30KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZC9DYXN0V2hlbkR1cGxpY2F0ZVJlcGxhY2VtZW50LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZC9DYXN0V2hlbkR1cGxpY2F0ZVJlcGxhY2VtZW50LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjhhOTFmZAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kL0Nhc3RXaGVuRHVwbGljYXRlUmVwbGFjZW1lbnQuamF2YQpAQCAtMCwwICsxLDcgQEAKK2NsYXNzIFRlc3QgeworCisgICAgdm9pZCBmb28oT2JqZWN0IHgpIHsKKyAgICAgICAgaWYgKHggaW5zdGFuY2VvZiBTdHJpbmcpIHggPSAoKFN0cmluZyl4KS5zdWJzdHJpbmcoMSk7CisgICAgICAgIGlmICh4IGluc3RhbmNlb2YgU3RyaW5nKSB4ID0gPHNlbGVjdGlvbj4oKFN0cmluZyl4KS5zdWJzdHJpbmcoMSk8L3NlbGVjdGlvbj47CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kL0Nhc3RXaGVuRHVwbGljYXRlUmVwbGFjZW1lbnRfYWZ0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kL0Nhc3RXaGVuRHVwbGljYXRlUmVwbGFjZW1lbnRfYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMGExNGVlNAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kL0Nhc3RXaGVuRHVwbGljYXRlUmVwbGFjZW1lbnRfYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDExIEBACitjbGFzcyBUZXN0IHsKKworICAgIHZvaWQgZm9vKE9iamVjdCB4KSB7CisgICAgICAgIGlmICh4IGluc3RhbmNlb2YgU3RyaW5nKSB4ID0gbmV3TWV0aG9kKChTdHJpbmcpIHgpOworICAgICAgICBpZiAoeCBpbnN0YW5jZW9mIFN0cmluZykgeCA9IG5ld01ldGhvZCgoU3RyaW5nKSB4KTsKKyAgICB9CisKKyAgICBwcml2YXRlIFN0cmluZyBuZXdNZXRob2QoU3RyaW5nIHgpIHsKKyAgICAgICAgcmV0dXJuICgoU3RyaW5nKXgpLnN1YnN0cmluZygxKTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2QvQ2hhaW5lZENvbnN0cnVjdG9yLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZC9DaGFpbmVkQ29uc3RydWN0b3IuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNjljMmY2Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2QvQ2hhaW5lZENvbnN0cnVjdG9yLmphdmEKQEAgLTAsMCArMSw5IEBACitjbGFzcyBBIHsKKyAgICBwcml2YXRlIGludCBpOworICAgIHByaXZhdGUgaW50IGo7CisKKyAgICBwdWJsaWMgQShpbnQgaSwgaW50IGopIHsKKyAgICAgICAgPHNlbGVjdGlvbj50aGlzLmkgPSBpOzwvc2VsZWN0aW9uPgorICAgICAgICB0aGlzLmogPSBqOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZC9DaGFpbmVkQ29uc3RydWN0b3JEdXBsaWNhdGVzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZC9DaGFpbmVkQ29uc3RydWN0b3JEdXBsaWNhdGVzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzBjY2Y1YQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kL0NoYWluZWRDb25zdHJ1Y3RvckR1cGxpY2F0ZXMuamF2YQpAQCAtMCwwICsxLDE1IEBACitjbGFzcyBBIHsKKyAgICBwcml2YXRlIGludCBpOworICAgIHByaXZhdGUgaW50IGo7CisgICAgcHJpdmF0ZSBpbnQgczsKKworICAgIHB1YmxpYyBBKGludCBpLCBpbnQgaikgeworICAgICAgICA8c2VsZWN0aW9uPnRoaXMuaSA9IGk7PC9zZWxlY3Rpb24+CisgICAgICAgIHRoaXMuaiA9IGo7CisgICAgfQorCisgICAgcHVibGljIEEoaW50IGksIFN0cmluZyBzKSB7CisgICAgICAgIHRoaXMuaSA9IGk7CisgICAgICAgIHRoaXMucyA9IHM7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kL0NoYWluZWRDb25zdHJ1Y3RvckR1cGxpY2F0ZXNfYWZ0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kL0NoYWluZWRDb25zdHJ1Y3RvckR1cGxpY2F0ZXNfYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MGY5ZmExCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2QvQ2hhaW5lZENvbnN0cnVjdG9yRHVwbGljYXRlc19hZnRlci5qYXZhCkBAIC0wLDAgKzEsMTkgQEAKK2NsYXNzIEEgeworICAgIHByaXZhdGUgaW50IGk7CisgICAgcHJpdmF0ZSBpbnQgajsKKyAgICBwcml2YXRlIGludCBzOworCisgICAgcHVibGljIEEoaW50IGksIGludCBqKSB7CisgICAgICAgIHRoaXMoaSk7CisgICAgICAgIHRoaXMuaiA9IGo7CisgICAgfQorCisgICAgcHJpdmF0ZSBBKGludCBpKSB7CisgICAgICAgIHRoaXMuaSA9IGk7CisgICAgfQorCisgICAgcHVibGljIEEoaW50IGksIFN0cmluZyBzKSB7CisgICAgICAgIHRoaXMoaSk7CisgICAgICAgIHRoaXMucyA9IHM7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kL0NoYWluZWRDb25zdHJ1Y3RvckludmFsaWREdXBsaWNhdGVzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZC9DaGFpbmVkQ29uc3RydWN0b3JJbnZhbGlkRHVwbGljYXRlcy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY5NjA5MGYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZC9DaGFpbmVkQ29uc3RydWN0b3JJbnZhbGlkRHVwbGljYXRlcy5qYXZhCkBAIC0wLDAgKzEsMTUgQEAKK2NsYXNzIEEgeworICAgIHByaXZhdGUgaW50IGk7CisgICAgcHJpdmF0ZSBpbnQgajsKKyAgICBwcml2YXRlIGludCBzOworCisgICAgcHVibGljIEEoaW50IGksIGludCBqKSB7CisgICAgICAgIDxzZWxlY3Rpb24+dGhpcy5pID0gaTs8L3NlbGVjdGlvbj4KKyAgICAgICAgdGhpcy5qID0gajsKKyAgICB9CisKKyAgICBwdWJsaWMgQShpbnQgaSwgU3RyaW5nIHMpIHsKKyAgICAgICAgdGhpcy5zID0gczsKKyAgICAgICAgdGhpcy5pID0gaTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2QvQ2hhaW5lZENvbnN0cnVjdG9ySW52YWxpZER1cGxpY2F0ZXNfYWZ0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kL0NoYWluZWRDb25zdHJ1Y3RvckludmFsaWREdXBsaWNhdGVzX2FmdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTNiNzhlYwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kL0NoYWluZWRDb25zdHJ1Y3RvckludmFsaWREdXBsaWNhdGVzX2FmdGVyLmphdmEKQEAgLTAsMCArMSwxOSBAQAorY2xhc3MgQSB7CisgICAgcHJpdmF0ZSBpbnQgaTsKKyAgICBwcml2YXRlIGludCBqOworICAgIHByaXZhdGUgaW50IHM7CisKKyAgICBwdWJsaWMgQShpbnQgaSwgaW50IGopIHsKKyAgICAgICAgdGhpcyhpKTsKKyAgICAgICAgdGhpcy5qID0gajsKKyAgICB9CisKKyAgICBwcml2YXRlIEEoaW50IGkpIHsKKyAgICAgICAgdGhpcy5pID0gaTsKKyAgICB9CisKKyAgICBwdWJsaWMgQShpbnQgaSwgU3RyaW5nIHMpIHsKKyAgICAgICAgdGhpcy5zID0gczsKKyAgICAgICAgdGhpcy5pID0gaTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2QvQ2hhaW5lZENvbnN0cnVjdG9yX2FmdGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZC9DaGFpbmVkQ29uc3RydWN0b3JfYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYjQ1ZTBiCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2QvQ2hhaW5lZENvbnN0cnVjdG9yX2FmdGVyLmphdmEKQEAgLTAsMCArMSwxMyBAQAorY2xhc3MgQSB7CisgICAgcHJpdmF0ZSBpbnQgaTsKKyAgICBwcml2YXRlIGludCBqOworCisgICAgcHVibGljIEEoaW50IGksIGludCBqKSB7CisgICAgICAgIHRoaXMoaSk7CisgICAgICAgIHRoaXMuaiA9IGo7CisgICAgfQorCisgICAgcHJpdmF0ZSBBKGludCBpKSB7CisgICAgICAgIHRoaXMuaSA9IGk7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kL0NoZWNrUXVhbGlmaWVyTWFwcGluZy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2QvQ2hlY2tRdWFsaWZpZXJNYXBwaW5nLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDZlYThhMwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kL0NoZWNrUXVhbGlmaWVyTWFwcGluZy5qYXZhCkBAIC0wLDAgKzEsMTQgQEAKK2ltcG9ydCBqYXZhLnV0aWwuKjsKK2NsYXNzIFRlc3QgeworCisgIHB1YmxpYyB2b2lkIG1ldGhvZCgpIHsKKyAgICBTdHJpbmcgYSA9ICJBIjsKKyAgICA8c2VsZWN0aW9uPkFycmF5TGlzdDxTdHJpbmc+IGxpc3RBID0gbmV3IEFycmF5TGlzdDxTdHJpbmc+KCk7CisgICAgbGlzdEEuYWRkKGEpOzwvc2VsZWN0aW9uPgorCisgICAgQXJyYXlMaXN0PFN0cmluZz4gbGlzdEIgPSBuZXcgQXJyYXlMaXN0PFN0cmluZz4oKTsKKyAgICBBcnJheUxpc3Q8U3RyaW5nPiBsaXN0QyA9IG5ldyBBcnJheUxpc3Q8U3RyaW5nPigpOworICAgIGxpc3RCLmFkZCgiQiIpOworICAgIGxpc3RDLmFkZCgiQyIpOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2QvQ2hlY2tRdWFsaWZpZXJNYXBwaW5nX2FmdGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZC9DaGVja1F1YWxpZmllck1hcHBpbmdfYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xODI2MDViCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2QvQ2hlY2tRdWFsaWZpZXJNYXBwaW5nX2FmdGVyLmphdmEKQEAgLTAsMCArMSwxOCBAQAoraW1wb3J0IGphdmEudXRpbC4qOworY2xhc3MgVGVzdCB7CisKKyAgcHVibGljIHZvaWQgbWV0aG9kKCkgeworICAgIFN0cmluZyBhID0gIkEiOworICAgICAgbmV3TWV0aG9kKGEpOworCisgICAgQXJyYXlMaXN0PFN0cmluZz4gbGlzdEIgPSBuZXcgQXJyYXlMaXN0PFN0cmluZz4oKTsKKyAgICBBcnJheUxpc3Q8U3RyaW5nPiBsaXN0QyA9IG5ldyBBcnJheUxpc3Q8U3RyaW5nPigpOworICAgIGxpc3RCLmFkZCgiQiIpOworICAgIGxpc3RDLmFkZCgiQyIpOworICB9CisKKyAgICBwcml2YXRlIHZvaWQgbmV3TWV0aG9kKFN0cmluZyBhKSB7CisgICAgICAgIEFycmF5TGlzdDxTdHJpbmc+IGxpc3RBID0gbmV3IEFycmF5TGlzdDxTdHJpbmc+KCk7CisgICAgICAgIGxpc3RBLmFkZChhKTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2QvQ29kZUR1cGxpY2F0ZXMuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kL0NvZGVEdXBsaWNhdGVzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjkxZTYyMwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kL0NvZGVEdXBsaWNhdGVzLmphdmEKQEAgLTAsMCArMSw4IEBACitjbGFzcyBDIHsKKyAgICB7CisgICAgICAgIGludCBpOworCisgICAgICAgIDxzZWxlY3Rpb24+U3lzdGVtLm91dC5wcmludGxuKGkpOzwvc2VsZWN0aW9uPgorICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oMTI4KTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2QvQ29kZUR1cGxpY2F0ZXMyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZC9Db2RlRHVwbGljYXRlczIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYWM4MWEyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2QvQ29kZUR1cGxpY2F0ZXMyLmphdmEKQEAgLTAsMCArMSwxNSBAQAorY2xhc3MgQyB7CisgICAgeworICAgICAgICBPYmplY3RbXSBhcnJheTsKKworICAgICAgICA8c2VsZWN0aW9uPmZvciAoaW50IGkgPSAwOyBpIDwgYXJyYXkubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihhcnJheVtpXSk7CisgICAgICAgIH08L3NlbGVjdGlvbj4KKworCisgICAgICAgIE9iamVjdFtdIGFycmF5MTsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBhcnJheTEubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihhcnJheVtpXSk7CisgICAgICAgIH0KKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2QvQ29kZUR1cGxpY2F0ZXMyX2FmdGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZC9Db2RlRHVwbGljYXRlczJfYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNGExYjM5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2QvQ29kZUR1cGxpY2F0ZXMyX2FmdGVyLmphdmEKQEAgLTAsMCArMSwxOSBAQAorY2xhc3MgQyB7CisgICAgeworICAgICAgICBPYmplY3RbXSBhcnJheTsKKworICAgICAgICBuZXdNZXRob2QoYXJyYXkpOworCisKKyAgICAgICAgT2JqZWN0W10gYXJyYXkxOworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGFycmF5MS5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKGFycmF5W2ldKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHByaXZhdGUgdm9pZCBuZXdNZXRob2QoT2JqZWN0W10gYXJyYXkpIHsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBhcnJheS5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKGFycmF5W2ldKTsKKyAgICAgICAgfQorICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZC9Db2RlRHVwbGljYXRlczMuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kL0NvZGVEdXBsaWNhdGVzMy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcwNTM4YzYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZC9Db2RlRHVwbGljYXRlczMuamF2YQpAQCAtMCwwICsxLDE1IEBACitjbGFzcyBDIHsKKyAgICB7CisgICAgICAgIE9iamVjdFtdIGFycmF5OworCisgICAgICAgIDxzZWxlY3Rpb24+Zm9yIChpbnQgaSA9IDA7IGkgPCBhcnJheS5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKGFycmF5W2ldKTsKKyAgICAgICAgfTwvc2VsZWN0aW9uPgorCisKKyAgICAgICAgT2JqZWN0W10gYXJyYXkxOworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGFycmF5MS5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKGFycmF5MVtpXSk7CisgICAgICAgIH0KKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2QvQ29kZUR1cGxpY2F0ZXMzX2FmdGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZC9Db2RlRHVwbGljYXRlczNfYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMmI1OWQxCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2QvQ29kZUR1cGxpY2F0ZXMzX2FmdGVyLmphdmEKQEAgLTAsMCArMSwxNyBAQAorY2xhc3MgQyB7CisgICAgeworICAgICAgICBPYmplY3RbXSBhcnJheTsKKworICAgICAgICBuZXdNZXRob2QoYXJyYXkpOworCisKKyAgICAgICAgT2JqZWN0W10gYXJyYXkxOworICAgICAgICBuZXdNZXRob2QoYXJyYXkxKTsKKyAgICB9CisKKyAgICBwcml2YXRlIHZvaWQgbmV3TWV0aG9kKE9iamVjdFtdIGFycmF5KSB7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYXJyYXkubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihhcnJheVtpXSk7CisgICAgICAgIH0KKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2QvQ29kZUR1cGxpY2F0ZXM0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZC9Db2RlRHVwbGljYXRlczQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMjJiYWY2Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2QvQ29kZUR1cGxpY2F0ZXM0LmphdmEKQEAgLTAsMCArMSwxNSBAQAorY2xhc3MgQyB7CisgICAgeworICAgICAgICBPYmplY3RbXSBhcnJheTsKKworICAgICAgICA8c2VsZWN0aW9uPmZvciAoaW50IGkgPSAwOyBpIDwgYXJyYXkubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihhcnJheVtpXSk7CisgICAgICAgIH08L3NlbGVjdGlvbj4KKworCisgICAgICAgIE9iamVjdFtdIGFycmF5MTsKKyAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBhcnJheTEubGVuZ3RoOyBqKyspIHsKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihhcnJheTFbal0pOworICAgICAgICB9CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kL0NvZGVEdXBsaWNhdGVzNF9hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2QvQ29kZUR1cGxpY2F0ZXM0X2FmdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjJiNTlkMQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kL0NvZGVEdXBsaWNhdGVzNF9hZnRlci5qYXZhCkBAIC0wLDAgKzEsMTcgQEAKK2NsYXNzIEMgeworICAgIHsKKyAgICAgICAgT2JqZWN0W10gYXJyYXk7CisKKyAgICAgICAgbmV3TWV0aG9kKGFycmF5KTsKKworCisgICAgICAgIE9iamVjdFtdIGFycmF5MTsKKyAgICAgICAgbmV3TWV0aG9kKGFycmF5MSk7CisgICAgfQorCisgICAgcHJpdmF0ZSB2b2lkIG5ld01ldGhvZChPYmplY3RbXSBhcnJheSkgeworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGFycmF5Lmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oYXJyYXlbaV0pOworICAgICAgICB9CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kL0NvZGVEdXBsaWNhdGVzNS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2QvQ29kZUR1cGxpY2F0ZXM1LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDUxOTdhZAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kL0NvZGVEdXBsaWNhdGVzNS5qYXZhCkBAIC0wLDAgKzEsMzAgQEAKK2NsYXNzIEQge30KK2NsYXNzIEMgZXh0ZW5kcyBEIHsKKyAgICBpbnQgbXlGaWVsZCA9IDEwOworICAgIGludCBteU90aGVyRmllbGQgPSAxMDsKKworICAgIHsKKyAgICAgICAgaW50IGkgPSA1OworICAgICAgICA8c2VsZWN0aW9uPm15RmllbGQgPSBpOworICAgICAgICBteU90aGVyRmllbGQgPSBpOzwvc2VsZWN0aW9uPgorCisgICAgICAgIEMgYyA9IG5ldyBDKCk7CisKKyAgICAgICAgYy5teUZpZWxkID0gMTI7CisgICAgICAgIGMubXlPdGhlckZpZWxkID0gMTI7CisKKyAgICAgICAgQyBjMSA9IG5ldyBDKCk7CisgICAgICAgIGMxLm15RmllbGQgPSAxMjsKKyAgICAgICAgbXlPdGhlckZpZWxkID0gMTI7CisKKworICAgICAgICAvL25vdCBhIGR1cGxpY2F0ZTogbWV0aG9kIGlzIG5vdCB2aXNpYmxlIHdpdGggcXVhbGlmZXIgY2xhc3MKKyAgICAgICAgRCBkMSA9IG5ldyBEKCk7CisgICAgICAgIGQxLm15RmllbGQgPSAxMjsKKyAgICAgICAgZDEubXlPdGhlckZpZWxkID0gMTI7CisKKworICAgICAgICBjLm15RmllbGQgPSAxNTsKKyAgICAgICAgYzEubXlPdGhlckZpZWxkID0gMTU7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kL0NvZGVEdXBsaWNhdGVzNV9hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2QvQ29kZUR1cGxpY2F0ZXM1X2FmdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjYwM2MzZAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kL0NvZGVEdXBsaWNhdGVzNV9hZnRlci5qYXZhCkBAIC0wLDAgKzEsMzMgQEAKK2NsYXNzIEQge30KK2NsYXNzIEMgZXh0ZW5kcyBEIHsKKyAgICBpbnQgbXlGaWVsZCA9IDEwOworICAgIGludCBteU90aGVyRmllbGQgPSAxMDsKKworICAgIHsKKyAgICAgICAgaW50IGkgPSA1OworICAgICAgICBuZXdNZXRob2QoaSk7CisKKyAgICAgICAgQyBjID0gbmV3IEMoKTsKKworICAgICAgICBjLm5ld01ldGhvZCgxMik7CisKKyAgICAgICAgQyBjMSA9IG5ldyBDKCk7CisgICAgICAgIGMxLm15RmllbGQgPSAxMjsKKyAgICAgICAgbXlPdGhlckZpZWxkID0gMTI7CisKKworICAgICAgICAvL25vdCBhIGR1cGxpY2F0ZTogbWV0aG9kIGlzIG5vdCB2aXNpYmxlIHdpdGggcXVhbGlmZXIgY2xhc3MKKyAgICAgICAgRCBkMSA9IG5ldyBEKCk7CisgICAgICAgIGQxLm15RmllbGQgPSAxMjsKKyAgICAgICAgZDEubXlPdGhlckZpZWxkID0gMTI7CisKKworICAgICAgICBjLm15RmllbGQgPSAxNTsKKyAgICAgICAgYzEubXlPdGhlckZpZWxkID0gMTU7CisgICAgfQorCisgICAgcHJpdmF0ZSB2b2lkIG5ld01ldGhvZChpbnQgaSkgeworICAgICAgICBteUZpZWxkID0gaTsKKyAgICAgICAgbXlPdGhlckZpZWxkID0gaTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2QvQ29kZUR1cGxpY2F0ZXNWYXJhcmdzU2hvdWxkTm90Q2hhbmdlUmV0dXJuVHlwZS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2QvQ29kZUR1cGxpY2F0ZXNWYXJhcmdzU2hvdWxkTm90Q2hhbmdlUmV0dXJuVHlwZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA4Mjg3NWIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZC9Db2RlRHVwbGljYXRlc1ZhcmFyZ3NTaG91bGROb3RDaGFuZ2VSZXR1cm5UeXBlLmphdmEKQEAgLTAsMCArMSwxMiBAQAorY2xhc3MgVGVzdCB7CisgICAgdm9pZCBmb28oKSB7CisgICAgICAgIGJhcig8c2VsZWN0aW9uPlN0cmluZy52YWx1ZU9mKDEpPC9zZWxlY3Rpb24+KTsKKyAgICAgICAgYmF6KFN0cmluZy52YWx1ZU9mKDEpKTsKKyAgICB9CisKKyAgICBwcml2YXRlIHZvaWQgYmFyKFN0cmluZyBzKSB7CisgICAgfQorCisgICAgcHJpdmF0ZSB2b2lkIGJheihTdHJpbmcuLi4gcykgeworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZC9Db2RlRHVwbGljYXRlc1ZhcmFyZ3NTaG91bGROb3RDaGFuZ2VSZXR1cm5UeXBlX2FmdGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZC9Db2RlRHVwbGljYXRlc1ZhcmFyZ3NTaG91bGROb3RDaGFuZ2VSZXR1cm5UeXBlX2FmdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTc2NTJjNwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kL0NvZGVEdXBsaWNhdGVzVmFyYXJnc1Nob3VsZE5vdENoYW5nZVJldHVyblR5cGVfYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDE2IEBACitjbGFzcyBUZXN0IHsKKyAgICB2b2lkIGZvbygpIHsKKyAgICAgICAgYmFyKG5ld01ldGhvZCgpKTsKKyAgICAgICAgYmF6KG5ld01ldGhvZCgpKTsKKyAgICB9CisKKyAgICBwcml2YXRlIFN0cmluZyBuZXdNZXRob2QoKSB7CisgICAgICAgIHJldHVybiBTdHJpbmcudmFsdWVPZigxKTsKKyAgICB9CisKKyAgICBwcml2YXRlIHZvaWQgYmFyKFN0cmluZyBzKSB7CisgICAgfQorCisgICAgcHJpdmF0ZSB2b2lkIGJheihTdHJpbmcuLi4gcykgeworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZC9Db2RlRHVwbGljYXRlc1dpdGhDb21tZW50cy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2QvQ29kZUR1cGxpY2F0ZXNXaXRoQ29tbWVudHMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xODdlYWQ5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2QvQ29kZUR1cGxpY2F0ZXNXaXRoQ29tbWVudHMuamF2YQpAQCAtMCwwICsxLDE5IEBACitjbGFzcyBUZXN0IHsKKyAgICBwcml2YXRlIExpc3Q8T2JqZWN0PiBsaXN0MSA9IG5ldyBBcnJheUxpc3Q8T2JqZWN0PigpOworCisgICAgcHJpdmF0ZSBMaXN0PE9iamVjdD4gbGlzdDIgPSBuZXcgQXJyYXlMaXN0PE9iamVjdD4oKTsKKworICAgIHB1YmxpYyB2b2lkIG1ldGhvZDEoKQorICAgIHsKKyAgICAgICAgbGlzdDEuYWRkKG51bGwpOworICAgICAgICAvLyBhZGQgdG8gbGlzdDIKKyAgICAgICAgbGlzdDIuYWRkKHRydWUpOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIG1ldGhvZDIoKQorICAgIHsKKyAgICAgICAgPHNlbGVjdGlvbj5saXN0MS5hZGQobnVsbCk7CisgICAgICAgIC8vIGFkZCB0byBsaXN0MgorICAgICAgICBsaXN0Mi5hZGQodHJ1ZSk7PC9zZWxlY3Rpb24+CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kL0NvZGVEdXBsaWNhdGVzV2l0aENvbW1lbnRzX2FmdGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZC9Db2RlRHVwbGljYXRlc1dpdGhDb21tZW50c19hZnRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRmMjYxNjQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZC9Db2RlRHVwbGljYXRlc1dpdGhDb21tZW50c19hZnRlci5qYXZhCkBAIC0wLDAgKzEsMjEgQEAKK2NsYXNzIFRlc3QgeworICAgIHByaXZhdGUgTGlzdDxPYmplY3Q+IGxpc3QxID0gbmV3IEFycmF5TGlzdDxPYmplY3Q+KCk7CisKKyAgICBwcml2YXRlIExpc3Q8T2JqZWN0PiBsaXN0MiA9IG5ldyBBcnJheUxpc3Q8T2JqZWN0PigpOworCisgICAgcHVibGljIHZvaWQgbWV0aG9kMSgpCisgICAgeworICAgICAgICBuZXdNZXRob2QoKTsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBtZXRob2QyKCkKKyAgICB7CisgICAgICAgIG5ld01ldGhvZCgpOworICAgIH0KKworICAgIHByaXZhdGUgdm9pZCBuZXdNZXRob2QoKSB7CisgICAgICAgIGxpc3QxLmFkZChudWxsKTsKKyAgICAgICAgLy8gYWRkIHRvIGxpc3QyCisgICAgICAgIGxpc3QyLmFkZCh0cnVlKTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2QvQ29kZUR1cGxpY2F0ZXNXaXRoQ29udGludWUuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kL0NvZGVEdXBsaWNhdGVzV2l0aENvbnRpbnVlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzcyYWQ4NwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kL0NvZGVEdXBsaWNhdGVzV2l0aENvbnRpbnVlLmphdmEKQEAgLTAsMCArMSwxNCBAQAorY2xhc3MgQyB7CisgICAgdm9pZCBmb28oKSB7CisgICAgICAgIGZvcihpbnQgaSA9IDA7IGkgPCAxMDsgaSsrKXsKKyAgICAgICAgPHNlbGVjdGlvbj5pZiAoaSA8IDEwKXsgY29udGludWU7fTwvc2VsZWN0aW9uPgorICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIiKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHsKKyAgICAgICAgZm9yKGludCBpID0gMDsgaSA8IDEwOyBpKyspeworICAgICAgICAgIGlmIChpIDwgMTApeyBjb250aW51ZTt9CisgICAgICAgIH0KKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2QvQ29kZUR1cGxpY2F0ZXNXaXRoQ29udGludWVOb1JldHVybi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2QvQ29kZUR1cGxpY2F0ZXNXaXRoQ29udGludWVOb1JldHVybi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk2YzMzOTkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZC9Db2RlRHVwbGljYXRlc1dpdGhDb250aW51ZU5vUmV0dXJuLmphdmEKQEAgLTAsMCArMSwxMyBAQAorY2xhc3MgQyB7CisgICAgdm9pZCBmb28oKSB7CisgICAgICAgIGZvcihpbnQgaSA9IDA7IGkgPCAxMDsgaSsrKXsKKyAgICAgICAgPHNlbGVjdGlvbj5pZiAoaSA8IDEwKXsgY29udGludWU7fTwvc2VsZWN0aW9uPgorICAgICAgICB9CisgICAgfQorCisgICAgeworICAgICAgICBmb3IoaW50IGkgPSAwOyBpIDwgMTA7IGkrKyl7CisgICAgICAgICAgaWYgKGkgPCAxMCl7IGNvbnRpbnVlO30KKyAgICAgICAgfQorICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZC9Db2RlRHVwbGljYXRlc1dpdGhDb250aW51ZU5vUmV0dXJuX2FmdGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZC9Db2RlRHVwbGljYXRlc1dpdGhDb250aW51ZU5vUmV0dXJuX2FmdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjQ1MGQ5NAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kL0NvZGVEdXBsaWNhdGVzV2l0aENvbnRpbnVlTm9SZXR1cm5fYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDE5IEBACitjbGFzcyBDIHsKKyAgICB2b2lkIGZvbygpIHsKKyAgICAgICAgZm9yKGludCBpID0gMDsgaSA8IDEwOyBpKyspeworICAgICAgICAgICAgbmV3TWV0aG9kKGkpOworICAgICAgICB9CisgICAgfQorCisgICAgcHJpdmF0ZSB2b2lkIG5ld01ldGhvZChpbnQgaSkgeworICAgICAgICBpZiAoaSA8IDEwKXsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KKworICAgIHsKKyAgICAgICAgZm9yKGludCBpID0gMDsgaSA8IDEwOyBpKyspeworICAgICAgICAgICAgbmV3TWV0aG9kKGkpOworICAgICAgICB9CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kL0NvZGVEdXBsaWNhdGVzV2l0aENvbnRpbnVlX2FmdGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZC9Db2RlRHVwbGljYXRlc1dpdGhDb250aW51ZV9hZnRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVjN2ZjMzUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZC9Db2RlRHVwbGljYXRlc1dpdGhDb250aW51ZV9hZnRlci5qYXZhCkBAIC0wLDAgKzEsMjEgQEAKK2NsYXNzIEMgeworICAgIHZvaWQgZm9vKCkgeworICAgICAgICBmb3IoaW50IGkgPSAwOyBpIDwgMTA7IGkrKyl7CisgICAgICAgICAgICBpZiAobmV3TWV0aG9kKGkpKSBjb250aW51ZTsKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiIik7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwcml2YXRlIGJvb2xlYW4gbmV3TWV0aG9kKGludCBpKSB7CisgICAgICAgIGlmIChpIDwgMTApeworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHsKKyAgICAgICAgZm9yKGludCBpID0gMDsgaSA8IDEwOyBpKyspeworICAgICAgICAgICAgaWYgKG5ld01ldGhvZChpKSkgY29udGludWU7CisgICAgICAgIH0KKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2QvQ29kZUR1cGxpY2F0ZXNXaXRoTXVsdEV4aXRQb2ludHMuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kL0NvZGVEdXBsaWNhdGVzV2l0aE11bHRFeGl0UG9pbnRzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjExMWY0OQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kL0NvZGVEdXBsaWNhdGVzV2l0aE11bHRFeGl0UG9pbnRzLmphdmEKQEAgLTAsMCArMSw3IEBACitjbGFzcyBBIHsKKyAgIGludCBmb28gKE9iamVjdCBvKSB7CisgICAgIDxzZWxlY3Rpb24+aWYgKG8gPT0gbnVsbCkgcmV0dXJuIDA7PC9zZWxlY3Rpb24+ICAKKyAgICAgaWYgKG8gPT0gbnVsbCkgcmV0dXJuIDA7CisgICAgIHJldHVybiAxOworICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kL0NvZGVEdXBsaWNhdGVzV2l0aE11bHRFeGl0UG9pbnRzX2FmdGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZC9Db2RlRHVwbGljYXRlc1dpdGhNdWx0RXhpdFBvaW50c19hZnRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE2NzhhOTAKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZC9Db2RlRHVwbGljYXRlc1dpdGhNdWx0RXhpdFBvaW50c19hZnRlci5qYXZhCkBAIC0wLDAgKzEsMTIgQEAKK2NsYXNzIEEgeworICAgaW50IGZvbyAoT2JqZWN0IG8pIHsKKyAgICAgICBpZiAobmV3TWV0aG9kKG8pKSByZXR1cm4gMDsKKyAgICAgICBpZiAobmV3TWV0aG9kKG8pKSByZXR1cm4gMDsKKyAgICAgICByZXR1cm4gMTsKKyAgIH0KKworICAgIHByaXZhdGUgYm9vbGVhbiBuZXdNZXRob2QoT2JqZWN0IG8pIHsKKyAgICAgICAgaWYgKG8gPT0gbnVsbCkgcmV0dXJuIHRydWU7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2QvQ29kZUR1cGxpY2F0ZXNXaXRoT3V0cHV0VmFsdWUuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kL0NvZGVEdXBsaWNhdGVzV2l0aE91dHB1dFZhbHVlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzRhMmRmYQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kL0NvZGVEdXBsaWNhdGVzV2l0aE91dHB1dFZhbHVlLmphdmEKQEAgLTAsMCArMSwxNiBAQAoraW1wb3J0IGphdmEudXRpbC4qOworCitjbGFzcyBDIHsKKyAgICB7CisgICAgICAgIE9iamVjdFtdIGFycmF5OworCisgICAgICAgIDxzZWxlY3Rpb24+TGlzdCBsMSA9IG5ldyBBcnJheUxpc3QoQXJyYXlzLmFzTGlzdChhcnJheSkpOzwvc2VsZWN0aW9uPgorCisgICAgICAgIExpc3QgbDIgPSBuZXcgQXJyYXlMaXN0KEFycmF5cy5hc0xpc3QoZ2V0T2JqZWN0cygpKSk7CisKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJsMSA9ICIgKyBsMSArICIsIGwyID0gIiArIGwyKTsKKyAgICB9CisKKyAgICBTdHJpbmdbXSBnZXRPYmplY3RzKCkgeworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZC9Db2RlRHVwbGljYXRlc1dpdGhPdXRwdXRWYWx1ZTEuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kL0NvZGVEdXBsaWNhdGVzV2l0aE91dHB1dFZhbHVlMS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU0OWFhZmQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZC9Db2RlRHVwbGljYXRlc1dpdGhPdXRwdXRWYWx1ZTEuamF2YQpAQCAtMCwwICsxLDE5IEBACitpbXBvcnQgamF2YS51dGlsLio7CisKK2NsYXNzIEMgeworICAgIHsKKyAgICAgICAgT2JqZWN0W10gYXJyYXk7CisKKyAgICAgICAgPHNlbGVjdGlvbj5MaXN0IGwxID0gbnVsbDsKKyAgICAgICAgbDEgPSBuZXcgQXJyYXlMaXN0KEFycmF5cy5hc0xpc3QoYXJyYXkpKTs8L3NlbGVjdGlvbj4KKworICAgICAgICBMaXN0IGwyID0gbnVsbDsKKyAgICAgICAgbDIgPSBuZXcgQXJyYXlMaXN0KEFycmF5cy5hc0xpc3QoZ2V0T2JqZWN0cygpKSk7CisKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJsMSA9ICIgKyBsMSArICIsIGwyID0gIiArIGwyKTsKKyAgICB9CisKKworICAgIFN0cmluZ1tdIGdldE9iamVjdHMoKSB7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kL0NvZGVEdXBsaWNhdGVzV2l0aE91dHB1dFZhbHVlMV9hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2QvQ29kZUR1cGxpY2F0ZXNXaXRoT3V0cHV0VmFsdWUxX2FmdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODFlYmM2ODAKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZC9Db2RlRHVwbGljYXRlc1dpdGhPdXRwdXRWYWx1ZTFfYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDIzIEBACitpbXBvcnQgamF2YS51dGlsLio7CisKK2NsYXNzIEMgeworICAgIHsKKyAgICAgICAgT2JqZWN0W10gYXJyYXk7CisKKyAgICAgICAgTGlzdCBsMSA9IG5ld01ldGhvZChhcnJheSk7CisKKyAgICAgICAgTGlzdCBsMiA9IG5ld01ldGhvZChnZXRPYmplY3RzKCkpOworCisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigibDEgPSAiICsgbDEgKyAiLCBsMiA9ICIgKyBsMik7CisgICAgfQorCisgICAgcHJpdmF0ZSBMaXN0IG5ld01ldGhvZChPYmplY3RbXSBhcnJheSkgeworICAgICAgICBMaXN0IGwxID0gbnVsbDsKKyAgICAgICAgbDEgPSBuZXcgQXJyYXlMaXN0KEFycmF5cy5hc0xpc3QoYXJyYXkpKTsKKyAgICAgICAgcmV0dXJuIGwxOworICAgIH0KKworCisgICAgU3RyaW5nW10gZ2V0T2JqZWN0cygpIHsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2QvQ29kZUR1cGxpY2F0ZXNXaXRoT3V0cHV0VmFsdWVfYWZ0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kL0NvZGVEdXBsaWNhdGVzV2l0aE91dHB1dFZhbHVlX2FmdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWIwZGNhMQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kL0NvZGVEdXBsaWNhdGVzV2l0aE91dHB1dFZhbHVlX2FmdGVyLmphdmEKQEAgLTAsMCArMSwyMCBAQAoraW1wb3J0IGphdmEudXRpbC4qOworCitjbGFzcyBDIHsKKyAgICB7CisgICAgICAgIE9iamVjdFtdIGFycmF5OworCisgICAgICAgIExpc3QgbDEgPSBuZXdNZXRob2QoYXJyYXkpOworCisgICAgICAgIExpc3QgbDIgPSBuZXdNZXRob2QoZ2V0T2JqZWN0cygpKTsKKworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImwxID0gIiArIGwxICsgIiwgbDIgPSAiICsgbDIpOworICAgIH0KKworICAgIHByaXZhdGUgTGlzdCBuZXdNZXRob2QoT2JqZWN0W10gYXJyYXkpIHsKKyAgICAgICAgcmV0dXJuIG5ldyBBcnJheUxpc3QoQXJyYXlzLmFzTGlzdChhcnJheSkpOworICAgIH0KKworICAgIFN0cmluZ1tdIGdldE9iamVjdHMoKSB7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kL0NvZGVEdXBsaWNhdGVzV2l0aFJldHVybi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2QvQ29kZUR1cGxpY2F0ZXNXaXRoUmV0dXJuLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDUxOTYwZAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kL0NvZGVEdXBsaWNhdGVzV2l0aFJldHVybi5qYXZhCkBAIC0wLDAgKzEsMTMgQEAKK2NsYXNzIEMgeworICAgIFN0cmluZyBtZXRob2QoT2JqZWN0IG8pIHsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKG8pOworICAgICAgICA8c2VsZWN0aW9uPkludGVnZXIgaSA9IG5ldyBJbnRlZ2VyKG8uaGFzaENvZGUoKSk7CisgICAgICAgIHJldHVybiBpLnRvU3RyaW5nKCk7PC9zZWxlY3Rpb24+CisgICAgfQorCisgICAgeworICAgICAgICBTdHJpbmcgazsKKyAgICAgICAgSW50ZWdlciBqID0gbmV3IEludGVnZXIoQm9vbGVhbi5UUlVFLmhhc2hDb2RlKCkpOworICAgICAgICBrID0gai50b1N0cmluZygpOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZC9Db2RlRHVwbGljYXRlc1dpdGhSZXR1cm4yLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZC9Db2RlRHVwbGljYXRlc1dpdGhSZXR1cm4yLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODFiOTkxNwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kL0NvZGVEdXBsaWNhdGVzV2l0aFJldHVybjIuamF2YQpAQCAtMCwwICsxLDEyIEBACitjbGFzcyBDIHsKKyAgICBTdHJpbmcgbWV0aG9kKE9iamVjdCBvKSB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihvKTsKKyAgICAgICAgPHNlbGVjdGlvbj5JbnRlZ2VyIGkgPSBuZXcgSW50ZWdlcihvLmhhc2hDb2RlKCkpOworICAgICAgICByZXR1cm4gaS50b1N0cmluZygpOzwvc2VsZWN0aW9uPgorICAgIH0KKworICAgIHsKKyAgICAgICAgSW50ZWdlciBqID0gbmV3IEludGVnZXIoQm9vbGVhbi5UUlVFLmhhc2hDb2RlKCkpOworICAgICAgICBTdHJpbmcgayA9IGoudG9TdHJpbmcoKTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2QvQ29kZUR1cGxpY2F0ZXNXaXRoUmV0dXJuMl9hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2QvQ29kZUR1cGxpY2F0ZXNXaXRoUmV0dXJuMl9hZnRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdjY2MyMzgKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZC9Db2RlRHVwbGljYXRlc1dpdGhSZXR1cm4yX2FmdGVyLmphdmEKQEAgLTAsMCArMSwxNSBAQAorY2xhc3MgQyB7CisgICAgU3RyaW5nIG1ldGhvZChPYmplY3QgbykgeworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4obyk7CisgICAgICAgIHJldHVybiBuZXdNZXRob2Qobyk7CisgICAgfQorCisgICAgcHJpdmF0ZSBTdHJpbmcgbmV3TWV0aG9kKE9iamVjdCBvKSB7CisgICAgICAgIEludGVnZXIgaSA9IG5ldyBJbnRlZ2VyKG8uaGFzaENvZGUoKSk7CisgICAgICAgIHJldHVybiBpLnRvU3RyaW5nKCk7CisgICAgfQorCisgICAgeworICAgICAgICBTdHJpbmcgayA9IG5ld01ldGhvZChCb29sZWFuLlRSVUUpOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZC9Db2RlRHVwbGljYXRlc1dpdGhSZXR1cm5JbkFub255bW91cy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2QvQ29kZUR1cGxpY2F0ZXNXaXRoUmV0dXJuSW5Bbm9ueW1vdXMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ODgxMzgyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2QvQ29kZUR1cGxpY2F0ZXNXaXRoUmV0dXJuSW5Bbm9ueW1vdXMuamF2YQpAQCAtMCwwICsxLDE1IEBACitjbGFzcyBUZXN0MTAgeworICB2b2lkIHRlc3QoKSB7CisgICAgPHNlbGVjdGlvbj5uZXcgT2JqZWN0KCkgeworICAgICAgaW50IGdldCgpIHsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgICB9CisgICAgfTs8L3NlbGVjdGlvbj4KKworICAgIG5ldyBPYmplY3QoKSB7CisgICAgICBpbnQgZ2V0KCkgeworICAgICAgICByZXR1cm4gMDsKKyAgICAgIH0KKyAgICB9OworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2QvQ29kZUR1cGxpY2F0ZXNXaXRoUmV0dXJuSW5Bbm9ueW1vdXNfYWZ0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kL0NvZGVEdXBsaWNhdGVzV2l0aFJldHVybkluQW5vbnltb3VzX2FmdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY4M2I3YWYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZC9Db2RlRHVwbGljYXRlc1dpdGhSZXR1cm5JbkFub255bW91c19hZnRlci5qYXZhCkBAIC0wLDAgKzEsMTUgQEAKK2NsYXNzIFRlc3QxMCB7CisgIHZvaWQgdGVzdCgpIHsKKyAgICAgIG5ld01ldGhvZCgpOworCisgICAgICBuZXdNZXRob2QoKTsKKyAgfQorCisgICAgcHJpdmF0ZSB2b2lkIG5ld01ldGhvZCgpIHsKKyAgICAgICAgbmV3IE9iamVjdCgpIHsKKyAgICAgICAgICBpbnQgZ2V0KCkgeworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgfQorICAgICAgICB9OworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZC9Db2RlRHVwbGljYXRlc1dpdGhSZXR1cm5fYWZ0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kL0NvZGVEdXBsaWNhdGVzV2l0aFJldHVybl9hZnRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk5MDFmM2IKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZC9Db2RlRHVwbGljYXRlc1dpdGhSZXR1cm5fYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDE2IEBACitjbGFzcyBDIHsKKyAgICBTdHJpbmcgbWV0aG9kKE9iamVjdCBvKSB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihvKTsKKyAgICAgICAgcmV0dXJuIG5ld01ldGhvZChvKTsKKyAgICB9CisKKyAgICBwcml2YXRlIFN0cmluZyBuZXdNZXRob2QoT2JqZWN0IG8pIHsKKyAgICAgICAgSW50ZWdlciBpID0gbmV3IEludGVnZXIoby5oYXNoQ29kZSgpKTsKKyAgICAgICAgcmV0dXJuIGkudG9TdHJpbmcoKTsKKyAgICB9CisKKyAgICB7CisgICAgICAgIFN0cmluZyBrOworICAgICAgICBrID0gbmV3TWV0aG9kKEJvb2xlYW4uVFJVRSk7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kL0NvZGVEdXBsaWNhdGVzV2l0aFN0YXRpY0luaXRpYWxpemVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZC9Db2RlRHVwbGljYXRlc1dpdGhTdGF0aWNJbml0aWFsaXplci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhmYmE1ODUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZC9Db2RlRHVwbGljYXRlc1dpdGhTdGF0aWNJbml0aWFsaXplci5qYXZhCkBAIC0wLDAgKzEsMTEgQEAKK2NsYXNzIEMgeworICAgc3RhdGljIEMgYzsKKyAgIHN0YXRpYyB7CisgICAgICAgIGphdmEudXRpbC5BcnJheUxpc3Q8Qz4gbCA9IG51bGw7CisgICAgICAgIGwuYWRkKGMpOworICAgIH0KKworICAgIHZvaWQgZm9vKCkgeworICAgICAgU3lzdGVtLm91dC5wcmludGxuKDxzZWxlY3Rpb24+Yzwvc2VsZWN0aW9uPik7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kL0NvZGVEdXBsaWNhdGVzV2l0aFN0YXRpY0luaXRpYWxpemVyX2FmdGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZC9Db2RlRHVwbGljYXRlc1dpdGhTdGF0aWNJbml0aWFsaXplcl9hZnRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ3ZmNmNDgKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZC9Db2RlRHVwbGljYXRlc1dpdGhTdGF0aWNJbml0aWFsaXplcl9hZnRlci5qYXZhCkBAIC0wLDAgKzEsMTUgQEAKK2NsYXNzIEMgeworICAgc3RhdGljIEMgYzsKKyAgIHN0YXRpYyB7CisgICAgICAgIGphdmEudXRpbC5BcnJheUxpc3Q8Qz4gbCA9IG51bGw7CisgICAgICAgIGwuYWRkKG5ld01ldGhvZCgpKTsKKyAgICB9CisKKyAgICB2b2lkIGZvbygpIHsKKyAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihuZXdNZXRob2QoKSk7CisgICAgfQorCisgICAgcHJpdmF0ZSBzdGF0aWMgQyBuZXdNZXRob2QoKSB7CisgICAgICAgIHJldHVybiBjOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZC9Db2RlRHVwbGljYXRlc19hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2QvQ29kZUR1cGxpY2F0ZXNfYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNmI0ODFkCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2QvQ29kZUR1cGxpY2F0ZXNfYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDEyIEBACitjbGFzcyBDIHsKKyAgICB7CisgICAgICAgIGludCBpOworCisgICAgICAgIG5ld01ldGhvZChpKTsKKyAgICAgICAgbmV3TWV0aG9kKDEyOCk7CisgICAgfQorCisgICAgcHJpdmF0ZSB2b2lkIG5ld01ldGhvZChpbnQgaSkgeworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oaSk7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kL0NvbXBsZXhUeXBlUGFyYW1zLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZC9Db21wbGV4VHlwZVBhcmFtcy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM0MmYyMjYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZC9Db21wbGV4VHlwZVBhcmFtcy5qYXZhCkBAIC0wLDAgKzEsOSBAQAoraW1wb3J0IGphdmEudXRpbC5MaXN0OworCitwdWJsaWMgY2xhc3MgVGVzdAoreworICAgPFQ+IHZvaWQgZm9vKExpc3Q8PyBleHRlbmRzIExpc3Q8VD4+IHRyKXsKKyAgICAgIDxzZWxlY3Rpb24+IHRyLmFkZChudWxsKTs8L3NlbGVjdGlvbj4KKyAgIH0KKworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kL0NvbXBsZXhUeXBlUGFyYW1zX2FmdGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZC9Db21wbGV4VHlwZVBhcmFtc19hZnRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkyNTM0MTkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZC9Db21wbGV4VHlwZVBhcmFtc19hZnRlci5qYXZhCkBAIC0wLDAgKzEsMTMgQEAKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworcHVibGljIGNsYXNzIFRlc3QKK3sKKyAgIDxUPiB2b2lkIGZvbyhMaXN0PD8gZXh0ZW5kcyBMaXN0PFQ+PiB0cil7CisgICAgICAgbmV3TWV0aG9kKHRyKTsKKyAgIH0KKworICAgIHByaXZhdGUgPFQ+IHZvaWQgbmV3TWV0aG9kKExpc3Q8PyBleHRlbmRzIExpc3Q8VD4+IHRyKSB7CisgICAgICAgIHRyLmFkZChudWxsKTsKKyAgICB9CisKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZC9Db25mbGljdGluZ0Fub255bW91cy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2QvQ29uZmxpY3RpbmdBbm9ueW1vdXMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YjlmNGUyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2QvQ29uZmxpY3RpbmdBbm9ueW1vdXMuamF2YQpAQCAtMCwwICsxLDEwIEBACitwdWJsaWMgY2xhc3MgVGVzdCB7CisgIHZvaWQgZm9vKCkgeworICAgIG5ldyBBKCkgeworICAgICAgdm9pZCBmZSgpIHs8c2VsZWN0aW9uPlN5c3RlbS5vdXQucHJpbnRsbigiIik7PC9zZWxlY3Rpb24+fQorICAgIH0KKyAgfQorfQorY2xhc3MgQSB7CisgIHZvaWQgbmV3TWV0aG9kKCl7fQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kL0NvbmZsaWN0aW5nQW5vbnltb3VzX2FmdGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZC9Db25mbGljdGluZ0Fub255bW91c19hZnRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRiMjA2MDAKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZC9Db25mbGljdGluZ0Fub255bW91c19hZnRlci5qYXZhCkBAIC0wLDAgKzEsMTYgQEAKK3B1YmxpYyBjbGFzcyBUZXN0IHsKKyAgdm9pZCBmb28oKSB7CisgICAgbmV3IEEoKSB7CisgICAgICB2b2lkIGZlKCkgeworICAgICAgICAgIFRlc3QudGhpcy5uZXdNZXRob2QoKTsKKyAgICAgIH0KKyAgICB9CisgIH0KKworICAgIHByaXZhdGUgdm9pZCBuZXdNZXRob2QoKSB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiIik7CisgICAgfQorfQorY2xhc3MgQSB7CisgIHZvaWQgbmV3TWV0aG9kKCl7fQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kL0NvbnN0YW50Q29uZGl0aW9uc0FmZmVjdGluZ0NvbnRyb2xGbG93LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZC9Db25zdGFudENvbmRpdGlvbnNBZmZlY3RpbmdDb250cm9sRmxvdy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYwMGU4NGIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZC9Db25zdGFudENvbmRpdGlvbnNBZmZlY3RpbmdDb250cm9sRmxvdy5qYXZhCkBAIC0wLDAgKzEsOSBAQAorcHVibGljIC8qYWJzdHJhY3QqLyBjbGFzcyBXaWxsV29ya1Rlc3QgeworICAgIGludCBvcGVyYSgpIHsKKyAgICAgICAgaW50IGkgPSAwOworICAgICAgICA8c2VsZWN0aW9uPgorICAgICAgICBpbnQgazsKKyAgICAgICAgaWYgKHRydWUpIGsgPSBpOworICAgICAgICByZXR1cm4gazs8L3NlbGVjdGlvbj4KKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZC9Db25zdGFudENvbmRpdGlvbnNBZmZlY3RpbmdDb250cm9sRmxvdzEuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kL0NvbnN0YW50Q29uZGl0aW9uc0FmZmVjdGluZ0NvbnRyb2xGbG93MS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYwM2ZiNTYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZC9Db25zdGFudENvbmRpdGlvbnNBZmZlY3RpbmdDb250cm9sRmxvdzEuamF2YQpAQCAtMCwwICsxLDEzIEBACitjbGFzcyBUZXN0IHsKKworICAgIHB1YmxpYyB2b2lkIHRlc3QoYm9vbGVhbiBiKSB7CisgICAgICAgIGludCBhID0gMTsKKyAgICAgICAgaWYgKHRydWUpIHsKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihhKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIDxzZWxlY3Rpb24+U3lzdGVtLm91dC5wcmludGxuKGEpOzwvc2VsZWN0aW9uPgorICAgICAgICB9CisgICAgfQorCisKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZC9Db25zdGFudENvbmRpdGlvbnNBZmZlY3RpbmdDb250cm9sRmxvdzFfYWZ0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kL0NvbnN0YW50Q29uZGl0aW9uc0FmZmVjdGluZ0NvbnRyb2xGbG93MV9hZnRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVkNTdkMTI1Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2QvQ29uc3RhbnRDb25kaXRpb25zQWZmZWN0aW5nQ29udHJvbEZsb3cxX2FmdGVyLmphdmEKQEAgLTAsMCArMSwxNyBAQAorY2xhc3MgVGVzdCB7CisKKyAgICBwdWJsaWMgdm9pZCB0ZXN0KGJvb2xlYW4gYikgeworICAgICAgICBpbnQgYSA9IDE7CisgICAgICAgIGlmICh0cnVlKSB7CisgICAgICAgICAgICBuZXdNZXRob2QoYSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBuZXdNZXRob2QoYSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwcml2YXRlIHZvaWQgbmV3TWV0aG9kKGludCBhKSB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihhKTsKKyAgICB9CisKKworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kL0NvbnN0YW50Q29uZGl0aW9uc0FmZmVjdGluZ0NvbnRyb2xGbG93X2FmdGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZC9Db25zdGFudENvbmRpdGlvbnNBZmZlY3RpbmdDb250cm9sRmxvd19hZnRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI4NzYyMjUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZC9Db25zdGFudENvbmRpdGlvbnNBZmZlY3RpbmdDb250cm9sRmxvd19hZnRlci5qYXZhCkBAIC0wLDAgKzEsMTMgQEAKK3B1YmxpYyAvKmFic3RyYWN0Ki8gY2xhc3MgV2lsbFdvcmtUZXN0IHsKKyAgICBpbnQgb3BlcmEoKSB7CisgICAgICAgIGludCBpID0gMDsKKworICAgICAgICByZXR1cm4gbmV3TWV0aG9kKGkpOworICAgIH0KKworICAgIHByaXZhdGUgaW50IG5ld01ldGhvZChpbnQgaSkgeworICAgICAgICBpbnQgazsKKyAgICAgICAgaWYgKHRydWUpIGsgPSBpOworICAgICAgICByZXR1cm4gazsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZC9Db250aW51ZUluc2lkZS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2QvQ29udGludWVJbnNpZGUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OTJlMjJkCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2QvQ29udGludWVJbnNpZGUuamF2YQpAQCAtMCwwICsxLDEyIEBACitjbGFzcyBUZXN0IHsKKyAgU3RyaW5nIGZvbyhTdHJpbmdbXSBhcmdzKSB7CisgICAgPHNlbGVjdGlvbj4KKyAgICBmb3IoU3RyaW5nIGFyZyA6IGFyZ3MpIHsKKyAgICAgIGlmIChhcmcgPT0gbnVsbCkgY29udGludWU7CisgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oYXJnKTsKKyAgICB9CisgICAgaWYgKGFyZ3MubGVuZ3RoID09IDApIHJldHVybiBudWxsOworICAgIDwvc2VsZWN0aW9uPgorICAgIHJldHVybiBudWxsOworICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZC9Db250aW51ZUluc2lkZV9hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2QvQ29udGludWVJbnNpZGVfYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOGUxN2Y3Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2QvQ29udGludWVJbnNpZGVfYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDE3IEBACitjbGFzcyBUZXN0IHsKKyAgU3RyaW5nIGZvbyhTdHJpbmdbXSBhcmdzKSB7CisKKyAgICAgIGlmIChuZXdNZXRob2QoYXJncykpIHJldHVybiBudWxsOworCisgICAgICByZXR1cm4gbnVsbDsKKyAgfQorCisgICAgcHJpdmF0ZSBib29sZWFuIG5ld01ldGhvZChTdHJpbmdbXSBhcmdzKSB7CisgICAgICAgIGZvcihTdHJpbmcgYXJnIDogYXJncykgeworICAgICAgICAgIGlmIChhcmcgPT0gbnVsbCkgY29udGludWU7CisgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKGFyZyk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGFyZ3MubGVuZ3RoID09IDApIHJldHVybiB0cnVlOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2QvRGlzYWJsZWRQYXJhbS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2QvRGlzYWJsZWRQYXJhbS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE2NGRhNzU2Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2QvRGlzYWJsZWRQYXJhbS5qYXZhCkBAIC0wLDAgKzEsMjIgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwMC0yMDEyIEpldEJyYWlucyBzLnIuby4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCitjbGFzcyBGZXN0IHsKKyAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworICAgIFN0cmluZyBmID0gIiI7CisgICAgU3RyaW5nIGJhciA9ICIiCisgICAgPHNlbGVjdGlvbj4gU3lzdGVtLm91dC5wcmludGxuKGYgKyAiOyIgKyBiYXIpOzwvc2VsZWN0aW9uPgorICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2QvRGlzYWJsZWRQYXJhbV9hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2QvRGlzYWJsZWRQYXJhbV9hZnRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM4M2ViMjcKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZC9EaXNhYmxlZFBhcmFtX2FmdGVyLmphdmEKQEAgLTAsMCArMSwyNyBAQAorLyoKKyAqIENvcHlyaWdodCAyMDAwLTIwMTIgSmV0QnJhaW5zIHMuci5vLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KK2NsYXNzIEZlc3QgeworICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisgICAgU3RyaW5nIGYgPSAiIjsKKyAgICBTdHJpbmcgYmFyID0gIiIKKyAgICAgIG5ld01ldGhvZChiYXIpOworICB9CisKKyAgICBwcml2YXRlIHN0YXRpYyB2b2lkIG5ld01ldGhvZChTdHJpbmcgYmFyKSB7CisgICAgICAgIFN0cmluZyBmID0gOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oZiArICI7IiArIGJhcik7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kL0V4aXRQb2ludHMxLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZC9FeGl0UG9pbnRzMS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM2NDM2ZGMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZC9FeGl0UG9pbnRzMS5qYXZhCkBAIC0wLDAgKzEsOSBAQAorY2xhc3MgVGVzdHsKKyAgcHVibGljIHZvaWQgZm9vKCkgeworICAgIGlmIChjb25kMSl7CisgICAgICA8c2VsZWN0aW9uPmlmIChjb25kMikgcmV0dXJuOzwvc2VsZWN0aW9uPgorICAgIH0KKyAgICBlbHNlIGlmIChjb25kMyl7CisgICAgfQorICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZC9FeGl0UG9pbnRzMi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2QvRXhpdFBvaW50czIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMjkxZDI0Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2QvRXhpdFBvaW50czIuamF2YQpAQCAtMCwwICsxLDEwIEBACitjbGFzcyBUZXN0eworICBwdWJsaWMgdm9pZCBmb28oKSB7CisgICAgaWYgKGNvbmQxKXsKKyAgICAgIDxzZWxlY3Rpb24+aWYgKGNvbmQyKSByZXR1cm47PC9zZWxlY3Rpb24+CisgICAgfQorICAgIGVsc2UgaWYgKGNvbmQzKXsKKyAgICB9CisgICAgeCgpOworICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZC9FeGl0UG9pbnRzMl9hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2QvRXhpdFBvaW50czJfYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOTZiY2RlCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2QvRXhpdFBvaW50czJfYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDE1IEBACitjbGFzcyBUZXN0eworICBwdWJsaWMgdm9pZCBmb28oKSB7CisgICAgaWYgKGNvbmQxKXsKKyAgICAgICAgaWYgKG5ld01ldGhvZCgpKSByZXR1cm47CisgICAgfQorICAgIGVsc2UgaWYgKGNvbmQzKXsKKyAgICB9CisgICAgeCgpOworICB9CisKKyAgICBwcml2YXRlIGJvb2xlYW4gbmV3TWV0aG9kKCkgeworICAgICAgICBpZiAoY29uZDIpIHJldHVybiB0cnVlOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2QvRXhpdFBvaW50czMuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kL0V4aXRQb2ludHMzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWNjMzE0YgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kL0V4aXRQb2ludHMzLmphdmEKQEAgLTAsMCArMSwxMCBAQAorY2xhc3MgVGVzdHsKKyAgdm9pZCBmb28oKSB7CisgICAgaWYgKGNvbmQxKXsgICAgICAKKyAgICAgIDxzZWxlY3Rpb24+aWYgKGNvbmQyKSByZXR1cm47CisgICAgICB4KCk7PC9zZWxlY3Rpb24+CisgICAgfQorICAgIGVsc2UgaWYgKGNvbmQzKXsKKyAgICB9CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kL0V4aXRQb2ludHM0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZC9FeGl0UG9pbnRzNC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZjNmMzOTUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZC9FeGl0UG9pbnRzNC5qYXZhCkBAIC0wLDAgKzEsMTIgQEAKK2NsYXNzIFRlc3QgeworICAgIGludCBtZXRob2QoKSB7CisgICAgICAgICA8c2VsZWN0aW9uPnRyeSB7CisgICAgICAgICAgICAgaWYoY29uZDEpIHJldHVybiAwOworICAgICAgICAgICAgIGVsc2UgaWYoY29uZDIpIHJldHVybiAxOworICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVGV4dCIpOworICAgICAgICAgfSBmaW5hbGx5IHsgICAgICAgICAgIAorICAgICAgICAgICAgIGRvU29tZXRoaW5nKCk7CisgICAgICAgICB9PC9zZWxlY3Rpb24+CisgICAgICAgICByZXR1cm4gMTI7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kL0V4aXRQb2ludHM1LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZC9FeGl0UG9pbnRzNS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk1NDc4MmIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZC9FeGl0UG9pbnRzNS5qYXZhCkBAIC0wLDAgKzEsMTIgQEAKK2NsYXNzIFRlc3QgeworICAgIGludCBtZXRob2QoKSB7CisgICAgICAgICA8c2VsZWN0aW9uPnRyeSB7CisgICAgICAgICAgICAgaWYoY29uZDEpIHJldHVybiAwOworICAgICAgICAgICAgIGVsc2UgaWYoY29uZDIpIHJldHVybiAxOworICAgICAgICAgICAgIHJldHVybiAyNzsKKyAgICAgICAgIH0gZmluYWxseSB7ICAgICAgICAgICAKKyAgICAgICAgICAgICBkb1NvbWV0aGluZygpOworICAgICAgICAgfTwvc2VsZWN0aW9uPgorICAgICAgICAgcmV0dXJuIDEyOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZC9FeGl0UG9pbnRzNV9hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2QvRXhpdFBvaW50czVfYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMTdjMjlkCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2QvRXhpdFBvaW50czVfYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDE2IEBACitjbGFzcyBUZXN0IHsKKyAgICBpbnQgbWV0aG9kKCkgeworICAgICAgICByZXR1cm4gbmV3TWV0aG9kKCk7CisgICAgICAgIHJldHVybiAxMjsKKyAgICB9CisKKyAgICBwcml2YXRlIGludCBuZXdNZXRob2QoKSB7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBpZihjb25kMSkgcmV0dXJuIDA7CisgICAgICAgICAgICBlbHNlIGlmKGNvbmQyKSByZXR1cm4gMTsKKyAgICAgICAgICAgIHJldHVybiAyNzsKKyAgICAgICAgfSBmaW5hbGx5IHsgICAgICAgICAgIAorICAgICAgICAgICAgZG9Tb21ldGhpbmcoKTsKKyAgICAgICAgfQorICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZC9FeGl0UG9pbnRzNi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2QvRXhpdFBvaW50czYuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMDg4N2NiNwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kL0V4aXRQb2ludHM2LmphdmEKQEAgLTAsMCArMSwxMCBAQAorLy8gbXVsdGlwbGUgb3V0cHV0IHZhbHVlczogb25lIGZvciBtb2RlbGxpbmcgY29udHJvbCBmbG93ICsgb3V0cHV0IHZhbHVlCitjbGFzcyBLIHsKKyAgICBpbnQgZihPYmplY3QgbykgeworICAgICAgICA8c2VsZWN0aW9uPmlmIChvID09IG51bGwpIHJldHVybiAwOworICAgICAgICBvID0gbmV3IE9iamVjdCgpOzwvc2VsZWN0aW9uPgorICAgICAgICBPYmplY3Qgb28gPSBvOworCisgICAgICAgIHJldHVybiAxOworICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kL0V4aXRQb2ludHM3LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZC9FeGl0UG9pbnRzNy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM0YTg5NzUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZC9FeGl0UG9pbnRzNy5qYXZhCkBAIC0wLDAgKzEsMjcgQEAKK2NsYXNzIEZvbyB7CisgICBwdWJsaWMgT2JqZWN0IGNyZWF0ZUJlYW4oT2JqZWN0IHBhcmVudCkgeworICAgIHRyeSB7CisgICAgICA8c2VsZWN0aW9uPmlmIChwYXJlbnQgIT0gbnVsbCkgeworICAgICAgICB0cnkgeworICAgICAgICB9CisgICAgICAgIGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICB9CisgICAgICB9CisKKworICAgICAgT2JqZWN0IHRhZyA9IG51bGw7PC9zZWxlY3Rpb24+CisKKyAgICAgIHRhZyA9IGZvbyh0YWcpOworICAgIH0KKyAgICBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKGUpOworICAgIH0KKworICAgIHJldHVybiBudWxsOworICB9CisKKyAgcHJpdmF0ZSBPYmplY3QgZm9vKGZpbmFsIE9iamVjdCB0YWcpIHsKKyAgICByZXR1cm4gbnVsbDsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kL0V4aXRQb2ludHM4LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZC9FeGl0UG9pbnRzOC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNkZWUwYmYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZC9FeGl0UG9pbnRzOC5qYXZhCkBAIC0wLDAgKzEsMTAgQEAKK2NsYXNzIEMgeworICAgIHB1YmxpYyBPYmplY3QgbSgpIHsKKyAgICAgICAgPHNlbGVjdGlvbj5mb3IgKE9iamVjdCBvIDogbmV3IEFycmF5TGlzdDxPYmplY3Q+KCkpIHsKKyAgICAgICAgICAgIGlmIChvICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfTwvc2VsZWN0aW9uPgorICAgICAgICByZXR1cm4gbnVsbDsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2QvRXhpdFBvaW50czkuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kL0V4aXRQb2ludHM5LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTQ1NThhNAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kL0V4aXRQb2ludHM5LmphdmEKQEAgLTAsMCArMSwyNSBAQAorY2xhc3MgUmVzdWx0IHsKKyAgICBwcml2YXRlIFN0cmluZyBfbWVzc2FnZTsKKworICAgIHB1YmxpYyBSZXN1bHQoU3RyaW5nIF9tZXNzYWdlKSB7CisgICAgICAgIHRoaXMuX21lc3NhZ2UgPSBfbWVzc2FnZTsKKyAgICB9Cit9CisKK2NsYXNzIE1haW4geworICAgIHB1YmxpYyBzdGF0aWMgUmVzdWx0IGRvSXQoU3RyaW5nIG5hbWUpIHsKKyAgICAgICAgUmVzdWx0IHJlc3VsdDsKKworICAgICAgICA8c2VsZWN0aW9uPmlmIChuYW1lID09IG51bGwpIHsKKyAgICAgICAgICAgIHJlc3VsdCA9IG5ldyBSZXN1bHQoIk5hbWUgaXMgbnVsbCIpOworICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgfQorICAgICAgICBpZiAobmFtZS5sZW5ndGgoKSA9PSAwKSB7CisgICAgICAgICAgICByZXN1bHQgPSBuZXcgUmVzdWx0KCJOYW1lIGlzIGVtcHR5Iik7CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICB9PC9zZWxlY3Rpb24+CisKKyAgICAgICAgcmVzdWx0ID0gbmV3IFJlc3VsdCgiTmFtZSBpcyAiICsgbmFtZSk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kL0V4aXRQb2ludHNJbnNpZGVMb29wLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZC9FeGl0UG9pbnRzSW5zaWRlTG9vcC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkzOGM2NmQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZC9FeGl0UG9pbnRzSW5zaWRlTG9vcC5qYXZhCkBAIC0wLDAgKzEsOSBAQAorY2xhc3MgcyB7CisgICAgdm9pZCBmKGJvb2xlYW4gYikgeworICAgICAgICBmb3IgKDs7KSB7CisgICAgICAgICAgICA8c2VsZWN0aW9uPmlmIChiKSB7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9PC9zZWxlY3Rpb24+CisgICAgICAgIH0KKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2QvRXhwcmVzc2lvbkR1cGxpY2F0ZXMuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kL0V4cHJlc3Npb25EdXBsaWNhdGVzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmUxNjNkYwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kL0V4cHJlc3Npb25EdXBsaWNhdGVzLmphdmEKQEAgLTAsMCArMSwxMCBAQAoraW1wb3J0IGphdmEudXRpbC4qOworCitjbGFzcyBDIHsKKyAgICB7CisgICAgICAgIE9iamVjdFtdIG8gPSBudWxsOworICAgICAgICBMaXN0IGwgPSA8c2VsZWN0aW9uPm5ldyBBcnJheUxpc3QoQXJyYXlzLmFzTGlzdChvKSk8L3NlbGVjdGlvbj47CisKKyAgICAgICAgTGlzdCBsMSA9IG5ldyBBcnJheUxpc3QoQXJyYXlzLmFzTGlzdChuZXcgT2JqZWN0WzBdKSk7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kL0V4cHJlc3Npb25EdXBsaWNhdGVzX2FmdGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZC9FeHByZXNzaW9uRHVwbGljYXRlc19hZnRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE1NjRhYjEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZC9FeHByZXNzaW9uRHVwbGljYXRlc19hZnRlci5qYXZhCkBAIC0wLDAgKzEsMTQgQEAKK2ltcG9ydCBqYXZhLnV0aWwuKjsKKworY2xhc3MgQyB7CisgICAgeworICAgICAgICBPYmplY3RbXSBvID0gbnVsbDsKKyAgICAgICAgTGlzdCBsID0gbmV3TWV0aG9kKG8pOworCisgICAgICAgIExpc3QgbDEgPSBuZXdNZXRob2QobmV3IE9iamVjdFswXSk7CisgICAgfQorCisgICAgcHJpdmF0ZSBBcnJheUxpc3QgbmV3TWV0aG9kKE9iamVjdFtdIG8pIHsKKyAgICAgICAgcmV0dXJuIG5ldyBBcnJheUxpc3QoQXJyYXlzLmFzTGlzdChvKSk7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kL0V4dHJhY3RBc3NpZ25tZW50RXhwcmVzc2lvbi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2QvRXh0cmFjdEFzc2lnbm1lbnRFeHByZXNzaW9uLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDNiMzNmMAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kL0V4dHJhY3RBc3NpZ25tZW50RXhwcmVzc2lvbi5qYXZhCkBAIC0wLDAgKzEsNiBAQAorY2xhc3MgRm9vIHsKKyAgdm9pZCBmb28oKSB7CisgICAgaW50IHggPSAwOworICAgIGludCB5ID0gPHNlbGVjdGlvbj54ID0gMTwvc2VsZWN0aW9uPjsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kL0V4dHJhY3RBc3NpZ25tZW50RXhwcmVzc2lvbkZyb21TdGF0ZW1lbnQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kL0V4dHJhY3RBc3NpZ25tZW50RXhwcmVzc2lvbkZyb21TdGF0ZW1lbnQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYTdiYzg1Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2QvRXh0cmFjdEFzc2lnbm1lbnRFeHByZXNzaW9uRnJvbVN0YXRlbWVudC5qYXZhCkBAIC0wLDAgKzEsNyBAQAorCitjbGFzcyBGb28geworICB2b2lkIGZvbygpIHsKKyAgICBpbnQgeCA9IDA7CisgICAgPHNlbGVjdGlvbj54ID0gMTwvc2VsZWN0aW9uPjsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kL0V4dHJhY3RBc3NpZ25tZW50RXhwcmVzc2lvbkZyb21TdGF0ZW1lbnRfYWZ0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kL0V4dHJhY3RBc3NpZ25tZW50RXhwcmVzc2lvbkZyb21TdGF0ZW1lbnRfYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMTlhMDk5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2QvRXh0cmFjdEFzc2lnbm1lbnRFeHByZXNzaW9uRnJvbVN0YXRlbWVudF9hZnRlci5qYXZhCkBAIC0wLDAgKzEsMTIgQEAKKworY2xhc3MgRm9vIHsKKyAgdm9pZCBmb28oKSB7CisgICAgaW50IHggPSAwOworICAgICAgbmV3TWV0aG9kKCk7CisgIH0KKworICAgIHByaXZhdGUgdm9pZCBuZXdNZXRob2QoKSB7CisgICAgICAgIGludCB4OworICAgICAgICB4ID0gMTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2QvRXh0cmFjdEFzc2lnbm1lbnRFeHByZXNzaW9uX2FmdGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZC9FeHRyYWN0QXNzaWdubWVudEV4cHJlc3Npb25fYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NjhjYWE5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2QvRXh0cmFjdEFzc2lnbm1lbnRFeHByZXNzaW9uX2FmdGVyLmphdmEKQEAgLTAsMCArMSwxMSBAQAorY2xhc3MgRm9vIHsKKyAgdm9pZCBmb28oKSB7CisgICAgaW50IHggPSAwOworICAgIGludCB5ID0geCA9IG5ld01ldGhvZCgpOworICB9CisKKyAgICBwcml2YXRlIGludCBuZXdNZXRob2QoKSB7CisgICAgICAgIGludCB4OworICAgICAgICByZXR1cm4geCA9IDE7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kL0V4dHJhY3RGcm9tQW5vbnltb3VzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZC9FeHRyYWN0RnJvbUFub255bW91cy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZmZjE0NTQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZC9FeHRyYWN0RnJvbUFub255bW91cy5qYXZhCkBAIC0wLDAgKzEsOSBAQAorY2xhc3MgVGVzdCB7CisgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oKSB7CisgICAgICAgIG5ldyBSdW5uYWJsZSgpIHsKKyAgICAgICAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKKyAgICAgICAgICAgICAgICA8c2VsZWN0aW9uPlN5c3RlbS5vdXQ8L3NlbGVjdGlvbj4ucHJpbnRsbigiVGV4dCIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kL0V4dHJhY3RGcm9tQW5vbnltb3VzX2FmdGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZC9FeHRyYWN0RnJvbUFub255bW91c19hZnRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU0Y2NkNWEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZC9FeHRyYWN0RnJvbUFub255bW91c19hZnRlci5qYXZhCkBAIC0wLDAgKzEsMTUgQEAKK2ltcG9ydCBqYXZhLmlvLlByaW50U3RyZWFtOworCitjbGFzcyBUZXN0IHsKKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbigpIHsKKyAgICAgICAgbmV3IFJ1bm5hYmxlKCkgeworICAgICAgICAgICAgcHVibGljIHZvaWQgcnVuKCkgeworICAgICAgICAgICAgICAgIG5ld01ldGhvZCgpLnByaW50bG4oIlRleHQiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIHByaXZhdGUgc3RhdGljIFByaW50U3RyZWFtIG5ld01ldGhvZCgpIHsKKyAgICAgICAgcmV0dXJuIFN5c3RlbS5vdXQ7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kL0V4dHJhY3RGcm9tQ29kZUJsb2NrLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZC9FeHRyYWN0RnJvbUNvZGVCbG9jay5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYwZDMxZDgKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZC9FeHRyYWN0RnJvbUNvZGVCbG9jay5qYXZhCkBAIC0wLDAgKzEsMTAgQEAKK2NsYXNzIFRlc3QgeworICAgIHZvaWQgbWV0aG9kKCkgeworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIjEiKTsKKyAgICAgICAgPHNlbGVjdGlvbj57CisgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIyIik7CisgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIzIik7CisgICAgICAgIH08L3NlbGVjdGlvbj4KKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCI0Iik7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kL0V4dHJhY3RGcm9tQ29kZUJsb2NrX2FmdGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZC9FeHRyYWN0RnJvbUNvZGVCbG9ja19hZnRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUwNTUzNDQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZC9FeHRyYWN0RnJvbUNvZGVCbG9ja19hZnRlci5qYXZhCkBAIC0wLDAgKzEsMTIgQEAKK2NsYXNzIFRlc3QgeworICAgIHZvaWQgbWV0aG9kKCkgeworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIjEiKTsKKyAgICAgICAgbmV3TWV0aG9kKCk7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiNCIpOworICAgIH0KKworICAgIHByaXZhdGUgdm9pZCBuZXdNZXRob2QoKSB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiMiIpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIjMiKTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2QvRXh0cmFjdEZyb21GaW5hbGx5LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZC9FeHRyYWN0RnJvbUZpbmFsbHkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMzk4YzMxCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2QvRXh0cmFjdEZyb21GaW5hbGx5LmphdmEKQEAgLTAsMCArMSwxMSBAQAorcHVibGljIGNsYXNzIFRlc3QgeworICAgIGludCBtZXRob2QoKSB7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlRleHQiKTsKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9IGZpbmFsbHkgeworICAgICAgICAgICAgPHNlbGVjdGlvbj5TeXN0ZW0ub3V0LnByaW50bG4oIiEhISIpOworICAgICAgICAgICAgcmV0dXJuIDE7PC9zZWxlY3Rpb24+CisgICAgICAgIH0KKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2QvRXh0cmFjdEZyb21GaW5hbGx5X2FmdGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZC9FeHRyYWN0RnJvbUZpbmFsbHlfYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NjFjYzAwCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2QvRXh0cmFjdEZyb21GaW5hbGx5X2FmdGVyLmphdmEKQEAgLTAsMCArMSwxNSBAQAorcHVibGljIGNsYXNzIFRlc3QgeworICAgIGludCBtZXRob2QoKSB7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlRleHQiKTsKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9IGZpbmFsbHkgeworICAgICAgICAgICAgcmV0dXJuIG5ld01ldGhvZCgpOworICAgICAgICB9CisgICAgfQorCisgICAgcHJpdmF0ZSBpbnQgbmV3TWV0aG9kKCkgeworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIiEhISIpOworICAgICAgICByZXR1cm4gMTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2QvRXh0cmFjdEZyb21UcnlGaW5hbGx5LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZC9FeHRyYWN0RnJvbVRyeUZpbmFsbHkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYTg2NmMxCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2QvRXh0cmFjdEZyb21UcnlGaW5hbGx5LmphdmEKQEAgLTAsMCArMSwxMCBAQAorcHVibGljIGNsYXNzIFMgeworICB7CisgICAgU3RyaW5nIHM7CisgICAgdHJ5IHsKKyAgICAgIDxzZWxlY3Rpb24+cyA9ICIiOzwvc2VsZWN0aW9uPgorICAgIH0gZmluYWxseSB7CisgICAgfQorICAgIFN5c3RlbS5vdXQucHJpbnQocyk7CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kL0V4dHJhY3RGcm9tVHJ5RmluYWxseTIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kL0V4dHJhY3RGcm9tVHJ5RmluYWxseTIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNWJmOGM2Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2QvRXh0cmFjdEZyb21UcnlGaW5hbGx5Mi5qYXZhCkBAIC0wLDAgKzEsMTIgQEAKK2NsYXNzIFRlc3RlciB7CisgICAgU3RyaW5nIHgoKSB7CisgICAgICAgIFN0cmluZyBvID0gIiI7CisgICAgICAgIDxzZWxlY3Rpb24+U3RyaW5nIHM7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBzID0gbzsKKyAgICAgICAgfQorICAgICAgICBmaW5hbGx5IHsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gczs8L3NlbGVjdGlvbj4KKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2QvRXh0cmFjdEZyb21UcnlGaW5hbGx5Ml9hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2QvRXh0cmFjdEZyb21UcnlGaW5hbGx5Ml9hZnRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU0Mjc0ZjEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZC9FeHRyYWN0RnJvbVRyeUZpbmFsbHkyX2FmdGVyLmphdmEKQEAgLTAsMCArMSwxNiBAQAorY2xhc3MgVGVzdGVyIHsKKyAgICBTdHJpbmcgeCgpIHsKKyAgICAgICAgU3RyaW5nIG8gPSAiIjsKKyAgICAgICAgcmV0dXJuIG5ld01ldGhvZChvKTsKKyAgICB9CisKKyAgICBwcml2YXRlIFN0cmluZyBuZXdNZXRob2QoU3RyaW5nIG8pIHsKKyAgICAgICAgU3RyaW5nIHM7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBzID0gbzsKKyAgICAgICAgfQorICAgICAgICBmaW5hbGx5IHsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gczsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2QvRXh0cmFjdEZyb21UcnlGaW5hbGx5X2FmdGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZC9FeHRyYWN0RnJvbVRyeUZpbmFsbHlfYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MjkwMGNlCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2QvRXh0cmFjdEZyb21UcnlGaW5hbGx5X2FmdGVyLmphdmEKQEAgLTAsMCArMSwxNiBAQAorcHVibGljIGNsYXNzIFMgeworICB7CisgICAgU3RyaW5nIHM7CisgICAgdHJ5IHsKKyAgICAgICAgcyA9IG5ld01ldGhvZCgpOworICAgIH0gZmluYWxseSB7CisgICAgfQorICAgIFN5c3RlbS5vdXQucHJpbnQocyk7CisgIH0KKworICAgIHByaXZhdGUgU3RyaW5nIG5ld01ldGhvZCgpIHsKKyAgICAgICAgU3RyaW5nIHM7CisgICAgICAgIHMgPSAiIjsKKyAgICAgICAgcmV0dXJuIHM7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2QvRXh0cmFjdFdpdGhMZWFkaW5nQ29tbWVudC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2QvRXh0cmFjdFdpdGhMZWFkaW5nQ29tbWVudC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEyNTE5ZGUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZC9FeHRyYWN0V2l0aExlYWRpbmdDb21tZW50LmphdmEKQEAgLTAsMCArMSwxMiBAQAorY2xhc3MgVGVzdCB7CisgICAgcHVibGljIHZvaWQgbWV0aG9kMigpIHsKKyAgICAgIGlmICh0cnVlKSB7CisgICAgICAgIDxzZWxlY3Rpb24+CisgICAgICAgIC8vIGFkZCB0byBsaXN0MgorICAgICAgICBsaXN0Mi5hZGQodHJ1ZSk7PC9zZWxlY3Rpb24+CisKKyAgICAgIH0gZWxzZSB7CisKKyAgICAgIH0KKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2QvRXh0cmFjdFdpdGhMZWFkaW5nQ29tbWVudF9hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2QvRXh0cmFjdFdpdGhMZWFkaW5nQ29tbWVudF9hZnRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg4MzNhMjgKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZC9FeHRyYWN0V2l0aExlYWRpbmdDb21tZW50X2FmdGVyLmphdmEKQEAgLTAsMCArMSwxNiBAQAorY2xhc3MgVGVzdCB7CisgICAgcHVibGljIHZvaWQgbWV0aG9kMigpIHsKKyAgICAgIGlmICh0cnVlKSB7CisgICAgICAgICAgbmV3TWV0aG9kKCk7CisKKworICAgICAgfSBlbHNlIHsKKworICAgICAgfQorICAgIH0KKworICAgIHByaXZhdGUgdm9pZCBuZXdNZXRob2QoKSB7CisgICAgICAgIC8vIGFkZCB0byBsaXN0MgorICAgICAgICBsaXN0Mi5hZGQodHJ1ZSk7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kL0ZpbmFsT3V0cHV0VmFyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZC9GaW5hbE91dHB1dFZhci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYxNzU4ZWQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZC9GaW5hbE91dHB1dFZhci5qYXZhCkBAIC0wLDAgKzEsOCBAQAorY2xhc3MgQyB7CisgICAgeworICAgICAgICA8c2VsZWN0aW9uPmZpbmFsIGludCBpID0gMTI4Ozwvc2VsZWN0aW9uPgorICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImkgPSAiICsgaSk7CisKKyAgICAgICAgZmluYWwgaW50IGogPSAxMjg7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kL0ZpbmFsT3V0cHV0VmFyX2FmdGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZC9GaW5hbE91dHB1dFZhcl9hZnRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIxYWI2OGQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZC9GaW5hbE91dHB1dFZhcl9hZnRlci5qYXZhCkBAIC0wLDAgKzEsMTIgQEAKK2NsYXNzIEMgeworICAgIHsKKyAgICAgICAgZmluYWwgaW50IGkgPSBuZXdNZXRob2QoKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJpID0gIiArIGkpOworCisgICAgICAgIGZpbmFsIGludCBqID0gbmV3TWV0aG9kKCk7CisgICAgfQorCisgICAgcHJpdmF0ZSBpbnQgbmV3TWV0aG9kKCkgeworICAgICAgICByZXR1cm4gMTI4OworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZC9GaW5hbFBhcmFtVXNlZEluc2lkZUFub24uamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kL0ZpbmFsUGFyYW1Vc2VkSW5zaWRlQW5vbi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE4OTg3NjQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZC9GaW5hbFBhcmFtVXNlZEluc2lkZUFub24uamF2YQpAQCAtMCwwICsxLDExIEBACitwdWJsaWMgY2xhc3MgVGVzdCB7CisgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworICAgICAgICBmaW5hbCBTdHJpbmcgcyA9ICJkdWRlIjsKKyAgICAgICAgPHNlbGVjdGlvbj5SdW5uYWJsZSBydW5uYWJsZSA9IG5ldyBSdW5uYWJsZSgpIHsKKyAgICAgICAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKKyAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4ocyk7CisgICAgICAgICAgICB9CisgICAgICAgIH07CisgICAgICAgIG5ldyBUaHJlYWQocnVubmFibGUpLnN0YXJ0KCk7PC9zZWxlY3Rpb24+CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kL0ZpbmFsUGFyYW1Vc2VkSW5zaWRlQW5vbl9hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2QvRmluYWxQYXJhbVVzZWRJbnNpZGVBbm9uX2FmdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjgzMTYxYQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kL0ZpbmFsUGFyYW1Vc2VkSW5zaWRlQW5vbl9hZnRlci5qYXZhCkBAIC0wLDAgKzEsMTUgQEAKK3B1YmxpYyBjbGFzcyBUZXN0IHsKKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisgICAgICAgIGZpbmFsIFN0cmluZyBzID0gImR1ZGUiOworICAgICAgICBuZXdNZXRob2Qocyk7CisgICAgfQorCisgICAgcHJpdmF0ZSBzdGF0aWMgdm9pZCBuZXdNZXRob2QoZmluYWwgU3RyaW5nIHMpIHsKKyAgICAgICAgUnVubmFibGUgcnVubmFibGUgPSBuZXcgUnVubmFibGUoKSB7CisgICAgICAgICAgICBwdWJsaWMgdm9pZCBydW4oKSB7CisgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKHMpOworICAgICAgICAgICAgfQorICAgICAgICB9OworICAgICAgICBuZXcgVGhyZWFkKHJ1bm5hYmxlKS5zdGFydCgpOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZC9GaW5hbFBhcmFtczRMb2NhbENsYXNzZXMuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kL0ZpbmFsUGFyYW1zNExvY2FsQ2xhc3Nlcy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhmMWNiZTQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZC9GaW5hbFBhcmFtczRMb2NhbENsYXNzZXMuamF2YQpAQCAtMCwwICsxLDExIEBACitjbGFzcyBUZXN0IHsKKworICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKyAgICAgICAgZmluYWwgU3RyaW5nIHMgPSAidGV4dCI7CisgICAgICAgIDxzZWxlY3Rpb24+Y2xhc3MgQSB7CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKHMpOworICAgICAgICAgICAgfQorICAgICAgICB9PC9zZWxlY3Rpb24+CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kL0ZpbmFsUGFyYW1zNExvY2FsQ2xhc3Nlc19hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2QvRmluYWxQYXJhbXM0TG9jYWxDbGFzc2VzX2FmdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTg4N2QyZQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kL0ZpbmFsUGFyYW1zNExvY2FsQ2xhc3Nlc19hZnRlci5qYXZhCkBAIC0wLDAgKzEsMTUgQEAKK2NsYXNzIFRlc3QgeworCisgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworICAgICAgICBmaW5hbCBTdHJpbmcgcyA9ICJ0ZXh0IjsKKyAgICAgICAgbmV3TWV0aG9kKHMpOworICAgIH0KKworICAgIHByaXZhdGUgc3RhdGljIHZvaWQgbmV3TWV0aG9kKGZpbmFsIFN0cmluZyBzKSB7CisgICAgICAgIGNsYXNzIEEgeworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihzKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZC9GaW5hbGx5LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZC9GaW5hbGx5LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWIyYjEyZAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kL0ZpbmFsbHkuamF2YQpAQCAtMCwwICsxLDIyIEBACitjbGFzcyBUZXN0IHsKKyAgICB2b2lkIG1ldGhvZCgpeyAgICAgICAgIAorICAgICAgICA8c2VsZWN0aW9uPnRyeSB7CisgICAgICAgICAgICBwcm9jZXNzLndhaXRGb3IoKTsKKyAgICAgICAgfQorICAgICAgICBjYXRjaChJbnRlcnJ1cHRlZEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICBwcm9jZXNzLmRlc3Ryb3koKTsKKyAgICAgICAgfQorICAgICAgICBmaW5hbGx5IHsKKyAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgbXlQYXJzaW5nVGhyZWFkLmpvaW4oKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNhdGNoKEludGVycnVwdGVkRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNvbXBpbGVySGFuZGxlci5wcm9jZXNzVGVybWluYXRlZCgpOworICAgICAgICB9CisgICAgICAgIHN5bmNocm9uaXplZCAodGhpcykgeworICAgICAgICAgICAgbXlQYXJzaW5nVGhyZWFkID0gbnVsbDsKKyAgICAgICAgfTwvc2VsZWN0aW9uPgorICAgICAgICBzb21lT3RoZXJDb2RlKCk7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kL0ZpbmFsbHlfYWZ0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kL0ZpbmFsbHlfYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MzQ4NWQzCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2QvRmluYWxseV9hZnRlci5qYXZhCkBAIC0wLDAgKzEsMjYgQEAKK2NsYXNzIFRlc3QgeworICAgIHZvaWQgbWV0aG9kKCl7CisgICAgICAgIG5ld01ldGhvZCgpOworICAgICAgICBzb21lT3RoZXJDb2RlKCk7CisgICAgfQorCisgICAgcHJpdmF0ZSB2b2lkIG5ld01ldGhvZCgpIHsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIHByb2Nlc3Mud2FpdEZvcigpOworICAgICAgICB9CisgICAgICAgIGNhdGNoKEludGVycnVwdGVkRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIHByb2Nlc3MuZGVzdHJveSgpOworICAgICAgICB9CisgICAgICAgIGZpbmFsbHkgeworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICBteVBhcnNpbmdUaHJlYWQuam9pbigpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY2F0Y2goSW50ZXJydXB0ZWRFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgfQorICAgICAgICAgICAgY29tcGlsZXJIYW5kbGVyLnByb2Nlc3NUZXJtaW5hdGVkKCk7CisgICAgICAgIH0KKyAgICAgICAgc3luY2hyb25pemVkICh0aGlzKSB7CisgICAgICAgICAgICBteVBhcnNpbmdUaHJlYWQgPSBudWxsOworICAgICAgICB9CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kL0ZvbGRJbldoaWxlLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZC9Gb2xkSW5XaGlsZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmExOWI5ZDkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZC9Gb2xkSW5XaGlsZS5qYXZhCkBAIC0wLDAgKzEsMTcgQEAKK2NsYXNzIFRlc3QgeworICAgIFN0cmluZ1tdIGZvbygpIHsKKyAgICAgICAgcmV0dXJuIG51bGw7CisgICAgfQorCisgICAgYm9vbGVhbiBiYXIoU3RyaW5nIHMpIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHZvaWQgZm9vb29vbygpIHsKKyAgICAgICAgU3RyaW5nW10gbW9kdWxlcyA9IGZvbygpOworICAgICAgICBpbnQgaSA9IDA7CisgICAgICAgIHdoaWxlIChpIDwgbW9kdWxlcy5sZW5ndGggJiYgPHNlbGVjdGlvbj4hYmFyKG1vZHVsZXNbaV0pPC9zZWxlY3Rpb24+KSB7CisgICAgICAgICAgICBpKys7CisgICAgICAgIH0KKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2QvRm9sZEluV2hpbGVfYWZ0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kL0ZvbGRJbldoaWxlX2FmdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDA0MzRmNgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kL0ZvbGRJbldoaWxlX2FmdGVyLmphdmEKQEAgLTAsMCArMSwyMSBAQAorY2xhc3MgVGVzdCB7CisgICAgU3RyaW5nW10gZm9vKCkgeworICAgICAgICByZXR1cm4gbnVsbDsKKyAgICB9CisKKyAgICBib29sZWFuIGJhcihTdHJpbmcgcykgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgdm9pZCBmb29vb29vKCkgeworICAgICAgICBTdHJpbmdbXSBtb2R1bGVzID0gZm9vKCk7CisgICAgICAgIGludCBpID0gMDsKKyAgICAgICAgd2hpbGUgKGkgPCBtb2R1bGVzLmxlbmd0aCAmJiBuZXdNZXRob2QobW9kdWxlc1tpXSkpIHsKKyAgICAgICAgICAgIGkrKzsKKyAgICAgICAgfQorICAgIH0KKworICAgIHByaXZhdGUgYm9vbGVhbiBuZXdNZXRob2QoU3RyaW5nIG1vZHVsZSkgeworICAgICAgICByZXR1cm4gIWJhcihtb2R1bGUpOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZC9Gb3JFYWNoLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZC9Gb3JFYWNoLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzhhMjdhNgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kL0ZvckVhY2guamF2YQpAQCAtMCwwICsxLDkgQEAKK2NsYXNzIEZvbyB7CisgIHsKKyAgICBTdHJpbmdbXSBhcmdzID0gZ2V0QXJncygpOworCisgICAgZm9yKFN0cmluZyBhcmcgOiBhcmdzKSB7CisgICAgICAgPHNlbGVjdGlvbj5TeXN0ZW0ub3V0LnByaW50bG4oImFyZyA9ICIgKyBhcmcpOzwvc2VsZWN0aW9uPgorICAgIH0KKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kL0ZvckVhY2hfYWZ0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kL0ZvckVhY2hfYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yN2E5MmFlCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2QvRm9yRWFjaF9hZnRlci5qYXZhCkBAIC0wLDAgKzEsMTMgQEAKK2NsYXNzIEZvbyB7CisgIHsKKyAgICBTdHJpbmdbXSBhcmdzID0gZ2V0QXJncygpOworCisgICAgZm9yKFN0cmluZyBhcmcgOiBhcmdzKSB7CisgICAgICAgIG5ld01ldGhvZChhcmcpOworICAgIH0KKyAgfQorCisgICAgcHJpdmF0ZSB2b2lkIG5ld01ldGhvZChTdHJpbmcgYXJnKSB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiYXJnID0gIiArIGFyZyk7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kL0ZvcmNlQnJhY2VzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZC9Gb3JjZUJyYWNlcy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmViNjZmYTUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZC9Gb3JjZUJyYWNlcy5qYXZhCkBAIC0wLDAgKzEsOSBAQAorY2xhc3MgWHRyYWN0IHsKKyAgICB2b2lkIG1lKGludCBpKSB7CisgICAgICAgIDxzZWxlY3Rpb24+aWYgKGkgPT0xMCkgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9PC9zZWxlY3Rpb24+CisKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJpOiAiICsgaSk7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kL0ZvcmNlQnJhY2VzX2FmdGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZC9Gb3JjZUJyYWNlc19hZnRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMxYzEwNDQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZC9Gb3JjZUJyYWNlc19hZnRlci5qYXZhCkBAIC0wLDAgKzEsMTYgQEAKK2NsYXNzIFh0cmFjdCB7CisgICAgdm9pZCBtZShpbnQgaSkgeworICAgICAgICBpZiAobmV3TWV0aG9kKGkpKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImk6ICIgKyBpKTsKKyAgICB9CisKKyAgICBwcml2YXRlIGJvb2xlYW4gbmV3TWV0aG9kKGludCBpKSB7CisgICAgICAgIGlmIChpID09MTApIHsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2QvRnJvbUxhbWJkYUJvZHkuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kL0Zyb21MYW1iZGFCb2R5LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWJhNGVjMQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kL0Zyb21MYW1iZGFCb2R5LmphdmEKQEAgLTAsMCArMSwyMyBAQAorLyoKKyAqIENvcHlyaWdodCAyMDAwLTIwMTIgSmV0QnJhaW5zIHMuci5vLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KK2NsYXNzIFRlc3QgeworICBwdWJsaWMgdm9pZCBmb28oKSB7CisgICAgUnVubmFibGUgciA9ICgpIC0+IHsKKyAgICAgIFN0cmluZyBoZWxsbyA9ICJoZWxsbyI7CisgICAgICA8c2VsZWN0aW9uPlN5c3RlbS5vdXQucHJpbnRsbihoZWxsbyk7PC9zZWxlY3Rpb24+CisgICAgfTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2QvRnJvbUxhbWJkYUJvZHlfYWZ0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kL0Zyb21MYW1iZGFCb2R5X2FmdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjhmNDE5MQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kL0Zyb21MYW1iZGFCb2R5X2FmdGVyLmphdmEKQEAgLTAsMCArMSwyNyBAQAorLyoKKyAqIENvcHlyaWdodCAyMDAwLTIwMTIgSmV0QnJhaW5zIHMuci5vLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KK2NsYXNzIFRlc3QgeworICBwdWJsaWMgdm9pZCBmb28oKSB7CisgICAgUnVubmFibGUgciA9ICgpIC0+IHsKKyAgICAgIFN0cmluZyBoZWxsbyA9ICJoZWxsbyI7CisgICAgICAgIG5ld01ldGhvZChoZWxsbyk7CisgICAgfTsKKyAgfQorCisgICAgcHJpdmF0ZSB2b2lkIG5ld01ldGhvZChTdHJpbmcgaGVsbG8pIHsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKGhlbGxvKTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZC9HZW5lcmljc1BhcmFtZXRlcnMuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kL0dlbmVyaWNzUGFyYW1ldGVycy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM1ZmZkOWQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZC9HZW5lcmljc1BhcmFtZXRlcnMuamF2YQpAQCAtMCwwICsxLDUgQEAKK2NsYXNzIFRlc3QgeworICAgcHVibGljIGZpbmFsIDxUPiBDbGFzczxUPiBmaW5kQ2xhc3MoZmluYWwgU3RyaW5nIGNsYXNzTmFtZSkgdGhyb3dzIENsYXNzTm90Rm91bmRFeGNlcHRpb24geworICAgIHJldHVybiAoQ2xhc3M8VD4pQ2xhc3MuZm9yTmFtZShjbGFzc05hbWUsIHRydWUsIDxzZWxlY3Rpb24+Z2V0Q2xhc3MoKS5nZXRDbGFzc0xvYWRlcigpPC9zZWxlY3Rpb24+KTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kL0dlbmVyaWNzUGFyYW1ldGVyc19hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2QvR2VuZXJpY3NQYXJhbWV0ZXJzX2FmdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWFiMzg4YwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kL0dlbmVyaWNzUGFyYW1ldGVyc19hZnRlci5qYXZhCkBAIC0wLDAgKzEsOSBAQAorY2xhc3MgVGVzdCB7CisgICBwdWJsaWMgZmluYWwgPFQ+IENsYXNzPFQ+IGZpbmRDbGFzcyhmaW5hbCBTdHJpbmcgY2xhc3NOYW1lKSB0aHJvd3MgQ2xhc3NOb3RGb3VuZEV4Y2VwdGlvbiB7CisgICAgcmV0dXJuIChDbGFzczxUPilDbGFzcy5mb3JOYW1lKGNsYXNzTmFtZSwgdHJ1ZSwgbmV3TWV0aG9kKCkpOworICB9CisKKyAgICBwcml2YXRlIENsYXNzTG9hZGVyIG5ld01ldGhvZCgpIHsKKyAgICAgICAgcmV0dXJuIGdldENsYXNzKCkuZ2V0Q2xhc3NMb2FkZXIoKTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2QvR3VhcmRNZXRob2REdXBsaWNhdGVzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZC9HdWFyZE1ldGhvZER1cGxpY2F0ZXMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YWZkZjAwCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2QvR3VhcmRNZXRob2REdXBsaWNhdGVzLmphdmEKQEAgLTAsMCArMSwxOCBAQAorY2xhc3MgVGVzdAoreworICAgIHB1YmxpYyBPYmplY3QgZm9vKCkgeworICAgICAgICBPYmplY3QgcmVzdWx0ID0gbnVsbDsKKyAgICAgICAgPHNlbGVjdGlvbj5pZih0ZXN0MSgpKSByZXR1cm4gbnVsbDsKKyAgICAgICAgaWYodGVzdDIoKSkgcmV0dXJuIG51bGw7PC9zZWxlY3Rpb24+CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIHB1YmxpYyBpbnQgZm9vMSgpIHsKKyAgICAgICAgaW50IHJlc3VsdCA9IDE7CisgICAgICAgIGlmKHRlc3QxKCkpIHJldHVybiAwOworICAgICAgICBpZih0ZXN0MigpKSByZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICBwcml2YXRlIGJvb2xlYW4gdGVzdDEoKSB7cmV0dXJuIGZhbHNlO30KKyAgICBwcml2YXRlIGJvb2xlYW4gdGVzdDIoKSB7cmV0dXJuIGZhbHNlO30KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZC9HdWFyZE1ldGhvZER1cGxpY2F0ZXMxLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZC9HdWFyZE1ldGhvZER1cGxpY2F0ZXMxLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDdiNzU2NwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kL0d1YXJkTWV0aG9kRHVwbGljYXRlczEuamF2YQpAQCAtMCwwICsxLDI5IEBACitwdWJsaWMgY2xhc3MgVGVzdCB7CisgICAgcHVibGljIE9iamVjdCBmb28oKSB7CisgICAgICAgIE9iamVjdCByZXN1bHQgPSBudWxsOyAgICAgICAvLyBsaW5lMQorICAgICAgICA8c2VsZWN0aW9uPmlmICh0ZXN0MSgpKSByZXR1cm4gcmVzdWx0OworICAgICAgICBpZiAodGVzdDIoKSkgcmV0dXJuIHJlc3VsdDs8L3NlbGVjdGlvbj4KKyAgICAgICAgaWYgKHRlc3QzKCkpIHJldHVybiByZXN1bHQ7ICAvLyBsaW5lNAorICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIHB1YmxpYyBpbnQgZm9vMSgpIHsKKyAgICAgICAgT2JqZWN0IHJlc3VsdCA9IG51bGw7ICAgICAgIC8vIGxpbmUxCisgICAgICAgIGlmICh0ZXN0MSgpKSByZXR1cm4gMTsgLy8gc3NzcworICAgICAgICBpZiAodGVzdDIoKSkgcmV0dXJuIDE7IC8vZWVlCisgICAgICAgIGlmICh0ZXN0MygpKSByZXR1cm4gMjsgIC8vIGxpbmU0CisgICAgICAgIHJldHVybiAzOworICAgIH0KKworICAgIHByaXZhdGUgYm9vbGVhbiB0ZXN0MSgpIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHByaXZhdGUgYm9vbGVhbiB0ZXN0MigpIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHByaXZhdGUgYm9vbGVhbiB0ZXN0MygpIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZC9HdWFyZE1ldGhvZER1cGxpY2F0ZXMxX2FmdGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZC9HdWFyZE1ldGhvZER1cGxpY2F0ZXMxX2FmdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmFkMzIyNQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kL0d1YXJkTWV0aG9kRHVwbGljYXRlczFfYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDM0IEBACitwdWJsaWMgY2xhc3MgVGVzdCB7CisgICAgcHVibGljIE9iamVjdCBmb28oKSB7CisgICAgICAgIE9iamVjdCByZXN1bHQgPSBudWxsOyAgICAgICAvLyBsaW5lMQorICAgICAgICBpZiAobmV3TWV0aG9kKCkpIHJldHVybiByZXN1bHQ7CisgICAgICAgIGlmICh0ZXN0MygpKSByZXR1cm4gcmVzdWx0OyAgLy8gbGluZTQKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICBwcml2YXRlIGJvb2xlYW4gbmV3TWV0aG9kKCkgeworICAgICAgICBPYmplY3QgcmVzdWx0OworICAgICAgICBpZiAodGVzdDEoKSkgcmV0dXJuIHRydWU7CisgICAgICAgIGlmICh0ZXN0MigpKSByZXR1cm4gdHJ1ZTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHB1YmxpYyBpbnQgZm9vMSgpIHsKKyAgICAgICAgT2JqZWN0IHJlc3VsdCA9IG51bGw7ICAgICAgIC8vIGxpbmUxCisgICAgICAgIGlmIChuZXdNZXRob2QoKSkgcmV0dXJuIDE7CisgICAgICAgIGlmICh0ZXN0MygpKSByZXR1cm4gMjsgIC8vIGxpbmU0CisgICAgICAgIHJldHVybiAzOworICAgIH0KKworICAgIHByaXZhdGUgYm9vbGVhbiB0ZXN0MSgpIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHByaXZhdGUgYm9vbGVhbiB0ZXN0MigpIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHByaXZhdGUgYm9vbGVhbiB0ZXN0MygpIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZC9HdWFyZE1ldGhvZER1cGxpY2F0ZXNfYWZ0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kL0d1YXJkTWV0aG9kRHVwbGljYXRlc19hZnRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMyZjU0MjcKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZC9HdWFyZE1ldGhvZER1cGxpY2F0ZXNfYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDIzIEBACitjbGFzcyBUZXN0Cit7CisgICAgcHVibGljIE9iamVjdCBmb28oKSB7CisgICAgICAgIE9iamVjdCByZXN1bHQgPSBudWxsOworICAgICAgICBpZiAobmV3TWV0aG9kKCkpIHJldHVybiBudWxsOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIHByaXZhdGUgYm9vbGVhbiBuZXdNZXRob2QoKSB7CisgICAgICAgIGlmKHRlc3QxKCkpIHJldHVybiB0cnVlOworICAgICAgICBpZih0ZXN0MigpKSByZXR1cm4gdHJ1ZTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHB1YmxpYyBpbnQgZm9vMSgpIHsKKyAgICAgICAgaW50IHJlc3VsdCA9IDE7CisgICAgICAgIGlmIChuZXdNZXRob2QoKSkgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgcHJpdmF0ZSBib29sZWFuIHRlc3QxKCkge3JldHVybiBmYWxzZTt9CisgICAgcHJpdmF0ZSBib29sZWFuIHRlc3QyKCkge3JldHVybiBmYWxzZTt9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2QvSURFQURFVjExMDM2LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZC9JREVBREVWMTEwMzYuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMWI0M2MwCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2QvSURFQURFVjExMDM2LmphdmEKQEAgLTAsMCArMSw5IEBACitjbGFzcyBNeUNsYXNzIHsKKyAgICBwdWJsaWMgdm9pZCBuZXdNZXRob2QobG9uZyBpKSB7CisgICAgfQorICAgIHsKKyAgICAgICAgaW50IGkgPSAwOworICAgICAgICA8c2VsZWN0aW9uPlN5c3RlbS5vdXQucHJpbnRsbihpKTs8L3NlbGVjdGlvbj4KKyAgICAgICAgbmV3TWV0aG9kKDE0KTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2QvSURFQURFVjExMDM2X2FmdGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZC9JREVBREVWMTEwMzZfYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NmYxOWEzCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2QvSURFQURFVjExMDM2X2FmdGVyLmphdmEKQEAgLTAsMCArMSwxMyBAQAorY2xhc3MgTXlDbGFzcyB7CisgICAgcHVibGljIHZvaWQgbmV3TWV0aG9kKGxvbmcgaSkgeworICAgIH0KKyAgICB7CisgICAgICAgIGludCBpID0gMDsKKyAgICAgICAgbmV3TWV0aG9kKGkpOworICAgICAgICBuZXdNZXRob2QoKGxvbmcpIDE0KTsKKyAgICB9CisKKyAgICBwcml2YXRlIHZvaWQgbmV3TWV0aG9kKGludCBpKSB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihpKTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2QvSURFQURFVjExNzQ4LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZC9JREVBREVWMTE3NDguamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZjJhYjA3Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2QvSURFQURFVjExNzQ4LmphdmEKQEAgLTAsMCArMSwxNCBAQAorY2xhc3MgVGVzdCB7CisgICAgcHVibGljIHN0YXRpYyBTdHJpbmcgYmFyKGludCB4ICwgaW50IHkpIHsKKyAgICAgICAgd2hpbGUgKHRydWUpIHsKKyAgICAgICAgICAgIDxzZWxlY3Rpb24+aWYgKHggPT0geSkgeworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJIVyIpOzwvc2VsZWN0aW9uPgorICAgICAgICB9CisgICAgfQorCisgICAgcHJpdmF0ZSBzdGF0aWMgaW50IGcoKSB7CisgICAgICAgIHJldHVybiAwOworICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kL0lERUFERVYxMTc0OF9hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2QvSURFQURFVjExNzQ4X2FmdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWE5MzM5MGIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZC9JREVBREVWMTE3NDhfYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDE4IEBACitjbGFzcyBUZXN0IHsKKyAgICBwdWJsaWMgc3RhdGljIFN0cmluZyBiYXIoaW50IHggLCBpbnQgeSkgeworICAgICAgICB3aGlsZSAodHJ1ZSkgeworICAgICAgICAgICAgbmV3TWV0aG9kKHgsIHkpOworICAgICAgICB9CisgICAgfQorCisgICAgcHJpdmF0ZSBzdGF0aWMgdm9pZCBuZXdNZXRob2QoaW50IHgsIGludCB5KSB7CisgICAgICAgIGlmICh4ID09IHkpIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkhXIik7CisgICAgfQorCisgICAgcHJpdmF0ZSBzdGF0aWMgaW50IGcoKSB7CisgICAgICAgIHJldHVybiAwOworICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kL0lERUFERVYxMTg0OC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2QvSURFQURFVjExODQ4LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmQ5ZGY3MQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kL0lERUFERVYxMTg0OC5qYXZhCkBAIC0wLDAgKzEsMTEgQEAKK2NsYXNzIENvbnRhaW5lciB7CisgICAgc3RhdGljIGNsYXNzIFggeworICAgICAgICBib29sZWFuIHggPSBmYWxzZTsKKworICAgICAgICB2b2lkIGZvbyhTdHJpbmcgcywgU3RyaW5nIHQpIHsKKyAgICAgICAgICAgIDxzZWxlY3Rpb24+eCA9IHRydWU7PC9zZWxlY3Rpb24+CisKKyAgICAgICAgICAgIHggPSB0cnVlOworICAgICAgICB9CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kL0lERUFERVYxMTg0OF9hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2QvSURFQURFVjExODQ4X2FmdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDBjN2U1NwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kL0lERUFERVYxMTg0OF9hZnRlci5qYXZhCkBAIC0wLDAgKzEsMTUgQEAKK2NsYXNzIENvbnRhaW5lciB7CisgICAgc3RhdGljIGNsYXNzIFggeworICAgICAgICBib29sZWFuIHggPSBmYWxzZTsKKworICAgICAgICB2b2lkIGZvbyhTdHJpbmcgcywgU3RyaW5nIHQpIHsKKyAgICAgICAgICAgIG5ld01ldGhvZCgpOworCisgICAgICAgICAgICBuZXdNZXRob2QoKTsKKyAgICAgICAgfQorCisgICAgICAgIHByaXZhdGUgdm9pZCBuZXdNZXRob2QoKSB7CisgICAgICAgICAgICB4ID0gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZC9JREVBREVWMzMzNjguamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kL0lERUFERVYzMzM2OC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJkOGJmYTgKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZC9JREVBREVWMzMzNjguamF2YQpAQCAtMCwwICsxLDE2IEBACitjbGFzcyBUZXN0IHsKKyAgIHZvaWQgbShib29sZWFuIGIpIHsKKyAgICAgICAgICAgaW50IHggPSA0MjsKKyAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgIDxzZWxlY3Rpb24+CisgICAgICAgICAgICAgICBpZihiKSB7CisgICAgICAgICAgICAgICAgICAgeCA9IDIzOworICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oKTsKKyAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgIDwvc2VsZWN0aW9uPgorICAgICAgICAgICB9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oeCk7CisgICAgICAgICAgIH0KKyAgICAgICB9CisKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZC9JREVBREVWMzMzNjhfYWZ0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kL0lERUFERVYzMzM2OF9hZnRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMwNWQzZGMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZC9JREVBREVWMzMzNjhfYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDIxIEBACitjbGFzcyBUZXN0IHsKKyAgIHZvaWQgbShib29sZWFuIGIpIHsKKyAgICAgICAgICAgaW50IHggPSA0MjsKKyAgICAgICAgICAgdHJ5IHsKKworICAgICAgICAgICAgICAgeCA9IG5ld01ldGhvZChiLCB4KTsKKworICAgICAgICAgICB9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oeCk7CisgICAgICAgICAgIH0KKyAgICAgICB9CisKKyAgICBwcml2YXRlIGludCBuZXdNZXRob2QoYm9vbGVhbiBiLCBpbnQgeCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIGlmKGIpIHsKKyAgICAgICAgICAgIHggPSAyMzsKKyAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4geDsKKyAgICB9CisKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZC9JZGVhRGV2MjI5MS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2QvSWRlYURldjIyOTEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YjE0ZDQ1Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2QvSWRlYURldjIyOTEuamF2YQpAQCAtMCwwICsxLDYgQEAKK2NsYXNzIFRlc3RlciB7CisgICAgdm9pZCBtZXRob2QoT2JqZWN0Li4uIGFycmF5KSB7CisgICAgICAgIE9iamVjdCBvYmplY3QgPSBudWxsOworICAgICAgICA8c2VsZWN0aW9uPmFycmF5LmVxdWFscyhvYmplY3QpOzwvc2VsZWN0aW9uPiAKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2QvSWRlYURldjIyOTFfYWZ0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kL0lkZWFEZXYyMjkxX2FmdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDk3NDY2MAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kL0lkZWFEZXYyMjkxX2FmdGVyLmphdmEKQEAgLTAsMCArMSwxMCBAQAorY2xhc3MgVGVzdGVyIHsKKyAgICB2b2lkIG1ldGhvZChPYmplY3QuLi4gYXJyYXkpIHsKKyAgICAgICAgT2JqZWN0IG9iamVjdCA9IG51bGw7CisgICAgICAgIG5ld01ldGhvZChvYmplY3QsIGFycmF5KTsKKyAgICB9CisKKyAgICBwcml2YXRlIHZvaWQgbmV3TWV0aG9kKE9iamVjdCBvYmplY3QsIE9iamVjdFtdIGFycmF5KSB7CisgICAgICAgIGFycmF5LmVxdWFscyhvYmplY3QpOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZC9JbmxpbmVDcmVhdGVkMlJldHVybkxvY2FsVmFyaWFibGVzT25seS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2QvSW5saW5lQ3JlYXRlZDJSZXR1cm5Mb2NhbFZhcmlhYmxlc09ubHkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MTEwMWNlCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2QvSW5saW5lQ3JlYXRlZDJSZXR1cm5Mb2NhbFZhcmlhYmxlc09ubHkuamF2YQpAQCAtMCwwICsxLDggQEAKK2NsYXNzIFRlc3QgeworICAgIHZvaWQgZm9vKCkgeworICAgICAgPHNlbGVjdGlvbj5pbnQgaiA9IDA7CisgICAgICBpbnQgaSA9IDA7CisgICAgICBqID0gOTs8L3NlbGVjdGlvbj4KKyAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihpKTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZC9JbmxpbmVDcmVhdGVkMlJldHVybkxvY2FsVmFyaWFibGVzT25seV9hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2QvSW5saW5lQ3JlYXRlZDJSZXR1cm5Mb2NhbFZhcmlhYmxlc09ubHlfYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lN2IzMzNiCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2QvSW5saW5lQ3JlYXRlZDJSZXR1cm5Mb2NhbFZhcmlhYmxlc09ubHlfYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDEzIEBACitjbGFzcyBUZXN0IHsKKyAgICB2b2lkIGZvbygpIHsKKyAgICAgICAgaW50IGkgPSBuZXdNZXRob2QoKTsKKyAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihpKTsKKyAgICB9CisKKyAgICBwcml2YXRlIGludCBuZXdNZXRob2QoKSB7CisgICAgICAgIGludCBqID0gMDsKKyAgICAgICAgaW50IGkgPSAwOworICAgICAgICBqID0gOTsKKyAgICAgICAgcmV0dXJuIGk7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2QvSW5zdGFuY2VNZXRob2REdXBsaWNhdGVzSW5TdGF0aWNDb250ZXh0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZC9JbnN0YW5jZU1ldGhvZER1cGxpY2F0ZXNJblN0YXRpY0NvbnRleHQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNDVkMjI3Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2QvSW5zdGFuY2VNZXRob2REdXBsaWNhdGVzSW5TdGF0aWNDb250ZXh0LmphdmEKQEAgLTAsMCArMSwxNCBAQAorY2xhc3MgQ2xhc3MxIHsKKyAgICBwdWJsaWMgc3RhdGljIGludCBzdGF0aWNNZXRob2QoKSB7CisgICAgICAgIGludCBhID0gMTsKKyAgICAgICAgaW50IGIgPSAyOworCisgICAgICAgIGludCB0ZW1wID0gYSArIGI7CisgICAgICAgIHJldHVybiB0ZW1wICogMjsKKyAgICB9CisKKyAgICBwdWJsaWMgaW50IGZvbyhpbnQgYSwgaW50IGIpIHsKKyAgICAgICAgPHNlbGVjdGlvbj5pbnQgdGVtcCA9IGEgKyBiOworICAgICAgICByZXR1cm4gdGVtcCAqIDI7PC9zZWxlY3Rpb24+CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kL0luc3RhbmNlTWV0aG9kRHVwbGljYXRlc0luU3RhdGljQ29udGV4dF9hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2QvSW5zdGFuY2VNZXRob2REdXBsaWNhdGVzSW5TdGF0aWNDb250ZXh0X2FmdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGM2MzlkZAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kL0luc3RhbmNlTWV0aG9kRHVwbGljYXRlc0luU3RhdGljQ29udGV4dF9hZnRlci5qYXZhCkBAIC0wLDAgKzEsMTcgQEAKK2NsYXNzIENsYXNzMSB7CisgICAgcHVibGljIHN0YXRpYyBpbnQgc3RhdGljTWV0aG9kKCkgeworICAgICAgICBpbnQgYSA9IDE7CisgICAgICAgIGludCBiID0gMjsKKworICAgICAgICByZXR1cm4gbmV3TWV0aG9kKGEsIGIpOworICAgIH0KKworICAgIHB1YmxpYyBpbnQgZm9vKGludCBhLCBpbnQgYikgeworICAgICAgICByZXR1cm4gbmV3TWV0aG9kKGEsIGIpOworICAgIH0KKworICAgIHByaXZhdGUgc3RhdGljIGludCBuZXdNZXRob2QoaW50IGEsIGludCBiKSB7CisgICAgICAgIGludCB0ZW1wID0gYSArIGI7CisgICAgICAgIHJldHVybiB0ZW1wICogMjsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2QvSW52YWxpZFJlZmVyZW5jZS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2QvSW52YWxpZFJlZmVyZW5jZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIyYWRkZDkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZC9JbnZhbGlkUmVmZXJlbmNlLmphdmEKQEAgLTAsMCArMSw3IEBACitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKKworY2xhc3MgVGVzdCB7CisgIHZvaWQgZm9vKEV4Y2VwdGlvbiB0YXJnZXRFbGVtZW50KSB7CisgICAgUHNpUGFja2FnZSBhUGFjayA9IDxzZWxlY3Rpb24+SmF2YURpcmVjdG9yeVNlcnZpY2UuZ2V0SW5zdGFuY2UoKS5nZXRQYWNrYWdlKChJT0V4Y2VwdGlvbil0YXJnZXRFbGVtZW50KTwvc2VsZWN0aW9uPjsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kL0ludmFsaWRSZWZlcmVuY2VfYWZ0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kL0ludmFsaWRSZWZlcmVuY2VfYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZDM0YjAzCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2QvSW52YWxpZFJlZmVyZW5jZV9hZnRlci5qYXZhCkBAIC0wLDAgKzEsMTEgQEAKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworCitjbGFzcyBUZXN0IHsKKyAgdm9pZCBmb28oRXhjZXB0aW9uIHRhcmdldEVsZW1lbnQpIHsKKyAgICBQc2lQYWNrYWdlIGFQYWNrID0gbmV3TWV0aG9kKChJT0V4Y2VwdGlvbikgdGFyZ2V0RWxlbWVudCk7CisgIH0KKworICAgIHByaXZhdGUgUHNpUGFja2FnZSBuZXdNZXRob2QoSU9FeGNlcHRpb24gdGFyZ2V0RWxlbWVudCkgeworICAgICAgICByZXR1cm4gSmF2YURpcmVjdG9yeVNlcnZpY2UuZ2V0SW5zdGFuY2UoKS5nZXRQYWNrYWdlKChJT0V4Y2VwdGlvbil0YXJnZXRFbGVtZW50KTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2QvTFZhbHVlTm90RHVwbGljYXRlLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZC9MVmFsdWVOb3REdXBsaWNhdGUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMTZmMWJjCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2QvTFZhbHVlTm90RHVwbGljYXRlLmphdmEKQEAgLTAsMCArMSwxMSBAQAorY2xhc3MgVVVVIHsKKyAgICBpbnQgbXlWYWx1ZTsKKworICAgIFVVVSgpIHsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKDxzZWxlY3Rpb24+bXlWYWx1ZTwvc2VsZWN0aW9uPik7CisgICAgfQorCisgICAgdm9pZCBpbml0KCkgeworICAgICAgICBteVZhbHVlID0gMDsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2QvTFZhbHVlTm90RHVwbGljYXRlX2FmdGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZC9MVmFsdWVOb3REdXBsaWNhdGVfYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNzNhNTdhCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2QvTFZhbHVlTm90RHVwbGljYXRlX2FmdGVyLmphdmEKQEAgLTAsMCArMSwxNSBAQAorY2xhc3MgVVVVIHsKKyAgICBpbnQgbXlWYWx1ZTsKKworICAgIFVVVSgpIHsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKG5ld01ldGhvZCgpKTsKKyAgICB9CisKKyAgICBwcml2YXRlIGludCBuZXdNZXRob2QoKSB7CisgICAgICAgIHJldHVybiBteVZhbHVlOworICAgIH0KKworICAgIHZvaWQgaW5pdCgpIHsKKyAgICAgICAgbXlWYWx1ZSA9IDA7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kL0xlYXZlQ29tbWVudHNXaGVuRXhwcmVzc2lvbkV4dHJhY3RlZC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2QvTGVhdmVDb21tZW50c1doZW5FeHByZXNzaW9uRXh0cmFjdGVkLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDVjNjFhZgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kL0xlYXZlQ29tbWVudHNXaGVuRXhwcmVzc2lvbkV4dHJhY3RlZC5qYXZhCkBAIC0wLDAgKzEsNiBAQAorY2xhc3MgVGVzdCB7CisgIHZvaWQgYmFyKCl7fQorICB2b2lkIGZvbygpIHsKKyAgICA8c2VsZWN0aW9uPmJhcigpOzwvc2VsZWN0aW9uPi8vc29tZSBjb21tZW50IGhlcmUKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kL0xlYXZlQ29tbWVudHNXaGVuRXhwcmVzc2lvbkV4dHJhY3RlZF9hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2QvTGVhdmVDb21tZW50c1doZW5FeHByZXNzaW9uRXh0cmFjdGVkX2FmdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGEwNjRmMQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kL0xlYXZlQ29tbWVudHNXaGVuRXhwcmVzc2lvbkV4dHJhY3RlZF9hZnRlci5qYXZhCkBAIC0wLDAgKzEsMTAgQEAKK2NsYXNzIFRlc3QgeworICB2b2lkIGJhcigpe30KKyAgdm9pZCBmb28oKSB7CisgICAgbmV3TWV0aG9kKCk7Ly9zb21lIGNvbW1lbnQgaGVyZQorICB9CisKKyAgICBwcml2YXRlIHZvaWQgbmV3TWV0aG9kKCkgeworICAgICAgICBiYXIoKTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2QvTGVzeWFCdWcuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kL0xlc3lhQnVnLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTI5MmU4NgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kL0xlc3lhQnVnLmphdmEKQEAgLTAsMCArMSwxNSBAQAoraW1wb3J0IGphdmEuaW8uT3V0cHV0U3RyZWFtOworCitjbGFzcyBBIHsKKyAgICB7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBPdXRwdXRTdHJlYW0gb3V0ID0gbnVsbDsKKworICAgICAgICAgICAgPHNlbGVjdGlvbj50cnkgeworICAgICAgICAgICAgfSBmaW5hbGx5IHsKKyAgICAgICAgICAgICAgICBvdXQuY2xvc2UoKTsKKyAgICAgICAgICAgIH08L3NlbGVjdGlvbj4KKyAgICAgICAgfSBjYXRjaChUaHJvd2FibGUgdCkgeworICAgICAgICB9CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kL0xlc3lhQnVnX2FmdGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZC9MZXN5YUJ1Z19hZnRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYwOTIyNTUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZC9MZXN5YUJ1Z19hZnRlci5qYXZhCkBAIC0wLDAgKzEsMjAgQEAKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworaW1wb3J0IGphdmEuaW8uT3V0cHV0U3RyZWFtOworCitjbGFzcyBBIHsKKyAgICB7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBPdXRwdXRTdHJlYW0gb3V0ID0gbnVsbDsKKworICAgICAgICAgICAgbmV3TWV0aG9kKG91dCk7CisgICAgICAgIH0gY2F0Y2goVGhyb3dhYmxlIHQpIHsKKyAgICAgICAgfQorICAgIH0KKworICAgIHByaXZhdGUgdm9pZCBuZXdNZXRob2QoT3V0cHV0U3RyZWFtIG91dCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgfSBmaW5hbGx5IHsKKyAgICAgICAgICAgIG91dC5jbG9zZSgpOworICAgICAgICB9CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kL0xvY2FsQ2xhc3MuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kL0xvY2FsQ2xhc3MuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZjYxYjE2Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2QvTG9jYWxDbGFzcy5qYXZhCkBAIC0wLDAgKzEsNyBAQAorY2xhc3MgVGVzdHsKKyAgcHVibGljIHZvaWQgZm9vKCkgeworICAgIGNsYXNzIEEgeworICAgIH0KKyAgICA8c2VsZWN0aW9uPm5ldyBBKCk7PC9zZWxlY3Rpb24+CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kL0xvY2FsQ2xhc3NEZWZpbmVkSW5NZXRob2RXaGljaElzVXNlZExhdGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZC9Mb2NhbENsYXNzRGVmaW5lZEluTWV0aG9kV2hpY2hJc1VzZWRMYXRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdmMzNmMzQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZC9Mb2NhbENsYXNzRGVmaW5lZEluTWV0aG9kV2hpY2hJc1VzZWRMYXRlci5qYXZhCkBAIC0wLDAgKzEsOCBAQAorY2xhc3MgVGVzdCB7CisgIHZvaWQgZm9vKCkgeworICAgIDxzZWxlY3Rpb24+Y2xhc3MgWCB7fQorICAgIFggeDsKKyAgICA8L3NlbGVjdGlvbj4KKyAgICB4ID0gbnVsbDsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kL0xvY2FsQ2xhc3NVc2FnZS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2QvTG9jYWxDbGFzc1VzYWdlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzkxMGM5ZgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kL0xvY2FsQ2xhc3NVc2FnZS5qYXZhCkBAIC0wLDAgKzEsNyBAQAorY2xhc3MgVGVzdHsKKyAgcHVibGljIHZvaWQgZm9vKCkgeworICAgIDxzZWxlY3Rpb24+Y2xhc3MgQSB7CisgICAgfTwvc2VsZWN0aW9uPgorICAgIG5ldyBBKCk7CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kL01ldGhvZDJJbnRlcmZhY2UuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kL01ldGhvZDJJbnRlcmZhY2UuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYzlhMWM3Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2QvTWV0aG9kMkludGVyZmFjZS5qYXZhCkBAIC0wLDAgKzEsNSBAQAoraW50ZXJmYWNlIEkgeworICAgIGRlZmF1bHQgdm9pZCBmb28gKCkgeworICAgICAgICA8c2VsZWN0aW9uPlN5c3RlbS5vdXQucHJpbnRsbigiaGVsbG8iKTs8L3NlbGVjdGlvbj4KKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2QvTWV0aG9kMkludGVyZmFjZV9hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2QvTWV0aG9kMkludGVyZmFjZV9hZnRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZhZWQ3YWMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZC9NZXRob2QySW50ZXJmYWNlX2FmdGVyLmphdmEKQEAgLTAsMCArMSw5IEBACitpbnRlcmZhY2UgSSB7CisgICAgZGVmYXVsdCB2b2lkIGZvbyAoKSB7CisgICAgICAgIG5ld01ldGhvZCgpOworICAgIH0KKworICAgIHByaXZhdGUgZGVmYXVsdCB2b2lkIG5ld01ldGhvZCgpIHsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJoZWxsbyIpOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZC9OZWFyQ29tbWVudC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2QvTmVhckNvbW1lbnQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NGQ4NTVmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2QvTmVhckNvbW1lbnQuamF2YQpAQCAtMCwwICsxLDE4IEBACitwdWJsaWMgY2xhc3MgRXh0cmFjdE1ldGhvZHMgeworICBwdWJsaWMgdm9pZCBwcm9jZXNzTGluZShTdHJpbmcgbGluZSkgeworICAgIDxzZWxlY3Rpb24+CisgICAgLy9maW5hbCBDaGFyc2V0IGNoYXJzZXQgPSBteVByb2Nlc3NIYW5kbGVyLmdldENoYXJzZXQoKTsKKyAgICBmaW5hbCBPdXRwdXRTdHJlYW0gb3V0cHV0U3RyZWFtID0gbnVsbDsvL215UHJvY2Vzc0hhbmRsZXIuZ2V0UHJvY2Vzc0lucHV0KCk7CisgICAgdHJ5IHsKKyAgICAgIC8vYnl0ZVtdIGJ5dGVzID0gKGxpbmUgKyAiXG4iKS5nZXRCeXRlcyhjaGFyc2V0Lm5hbWUoKSk7CisgICAgICBieXRlW10gYnl0ZXMgPSAobGluZSArICJcbiIpLmdldEJ5dGVzKCk7CisgICAgICBvdXRwdXRTdHJlYW0ud3JpdGUoYnl0ZXMpOworICAgICAgb3V0cHV0U3RyZWFtLmZsdXNoKCk7CisgICAgfQorICAgIGNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CisgICAgICAvLyBpZ25vcmUKKyAgICB9CisgICAgPC9zZWxlY3Rpb24+CisgIH0KKworfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2QvTmVhckNvbW1lbnRfYWZ0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kL05lYXJDb21tZW50X2FmdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2M5Zjg2MAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kL05lYXJDb21tZW50X2FmdGVyLmphdmEKQEAgLTAsMCArMSwyMiBAQAorcHVibGljIGNsYXNzIEV4dHJhY3RNZXRob2RzIHsKKyAgcHVibGljIHZvaWQgcHJvY2Vzc0xpbmUoU3RyaW5nIGxpbmUpIHsKKyAgICAgIG5ld01ldGhvZChsaW5lKTsKKworCisgIH0KKworICAgIHByaXZhdGUgdm9pZCBuZXdNZXRob2QoU3RyaW5nIGxpbmUpIHsKKyAgICAgICAgLy9maW5hbCBDaGFyc2V0IGNoYXJzZXQgPSBteVByb2Nlc3NIYW5kbGVyLmdldENoYXJzZXQoKTsKKyAgICAgICAgZmluYWwgT3V0cHV0U3RyZWFtIG91dHB1dFN0cmVhbSA9IG51bGw7Ly9teVByb2Nlc3NIYW5kbGVyLmdldFByb2Nlc3NJbnB1dCgpOworICAgICAgICB0cnkgeworICAgICAgICAgIC8vYnl0ZVtdIGJ5dGVzID0gKGxpbmUgKyAiXG4iKS5nZXRCeXRlcyhjaGFyc2V0Lm5hbWUoKSk7CisgICAgICAgICAgYnl0ZVtdIGJ5dGVzID0gKGxpbmUgKyAiXG4iKS5nZXRCeXRlcygpOworICAgICAgICAgIG91dHB1dFN0cmVhbS53cml0ZShieXRlcyk7CisgICAgICAgICAgb3V0cHV0U3RyZWFtLmZsdXNoKCk7CisgICAgICAgIH0KKyAgICAgICAgY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAvLyBpZ25vcmUKKyAgICAgICAgfQorICAgIH0KKworfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2QvTm9TaG9ydENpcmN1aXQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kL05vU2hvcnRDaXJjdWl0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWZiYzJmMAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kL05vU2hvcnRDaXJjdWl0LmphdmEKQEAgLTAsMCArMSw3IEBACitwdWJsaWMgY2xhc3MgVGVzdCB7CisgICAgcHVibGljIHN0YXRpYyB2b2lkIGZvbyhjaGFyIGMpIHsKKyAgICAgICAgaWYgKDxzZWxlY3Rpb24+YyA9PSAnXG4nIHx8IGMgPT0gJ1xyJzwvc2VsZWN0aW9uPiB8fCBjID09ICdcdTAwMDAnKSB7CisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIiIpOworICAgICAgICB9CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2QvTm9TaG9ydENpcmN1aXRfYWZ0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kL05vU2hvcnRDaXJjdWl0X2FmdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTI5YTZmMwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kL05vU2hvcnRDaXJjdWl0X2FmdGVyLmphdmEKQEAgLTAsMCArMSwxMSBAQAorcHVibGljIGNsYXNzIFRlc3QgeworICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBmb28oY2hhciBjKSB7CisgICAgICAgIGlmIChuZXdNZXRob2QoYykgfHwgYyA9PSAnXHUwMDAwJykgeworICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIiKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHByaXZhdGUgc3RhdGljIGJvb2xlYW4gbmV3TWV0aG9kKGNoYXIgYykgeworICAgICAgICByZXR1cm4gYyA9PSAnXG4nIHx8IGMgPT0gJ1xyJzsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZC9Ob25GaW5hbFdyaXRhYmxlUGFyYW0uamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kL05vbkZpbmFsV3JpdGFibGVQYXJhbS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhkNDU5NTkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZC9Ob25GaW5hbFdyaXRhYmxlUGFyYW0uamF2YQpAQCAtMCwwICsxLDYgQEAKK3B1YmxpYyBjbGFzcyBUZXN0IHsKKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisgICAgICAgIFN0cmluZyBzID0gImR1ZGUiOworICAgICAgICA8c2VsZWN0aW9uPnMgPSBzOzwvc2VsZWN0aW9uPgorICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZC9Ob25GaW5hbFdyaXRhYmxlUGFyYW1fYWZ0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kL05vbkZpbmFsV3JpdGFibGVQYXJhbV9hZnRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQzZjliM2MKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZC9Ob25GaW5hbFdyaXRhYmxlUGFyYW1fYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDEwIEBACitwdWJsaWMgY2xhc3MgVGVzdCB7CisgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworICAgICAgICBTdHJpbmcgcyA9ICJkdWRlIjsKKyAgICAgICAgbmV3TWV0aG9kKHMpOworICAgIH0KKworICAgIHByaXZhdGUgc3RhdGljIHZvaWQgbmV3TWV0aG9kKFN0cmluZyBzKSB7CisgICAgICAgIHMgPSBzOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZC9Ob25Gb2xkSW5JZkJvZHkuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kL05vbkZvbGRJbklmQm9keS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI5Mjc2OWQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZC9Ob25Gb2xkSW5JZkJvZHkuamF2YQpAQCAtMCwwICsxLDcgQEAKK2NsYXNzIFRlc3QgeworICAgIHZvaWQgZm9vKFN0cmluZ1tdIGEsIGludCBpLCBib29sZWFuIGIpIHsKKyAgICAgICAgPHNlbGVjdGlvbj5pZiAoYikgeworICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKGFbaV0pOworICAgICAgICB9PC9zZWxlY3Rpb24+CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kL05vbkZvbGRJbklmQm9keV9hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2QvTm9uRm9sZEluSWZCb2R5X2FmdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjZiNWVkYQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kL05vbkZvbGRJbklmQm9keV9hZnRlci5qYXZhCkBAIC0wLDAgKzEsMTEgQEAKK2NsYXNzIFRlc3QgeworICAgIHZvaWQgZm9vKFN0cmluZ1tdIGEsIGludCBpLCBib29sZWFuIGIpIHsKKyAgICAgICAgbmV3TWV0aG9kKGEsIGksIGIpOworICAgIH0KKworICAgIHByaXZhdGUgdm9pZCBuZXdNZXRob2QoU3RyaW5nW10gYSwgaW50IGksIGJvb2xlYW4gYikgeworICAgICAgICBpZiAoYikgeworICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKGFbaV0pOworICAgICAgICB9CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kL05vdEluaXRpYWxpemVkSW5zaWRlRmluYWxseS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2QvTm90SW5pdGlhbGl6ZWRJbnNpZGVGaW5hbGx5LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTdkMGExNgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kL05vdEluaXRpYWxpemVkSW5zaWRlRmluYWxseS5qYXZhCkBAIC0wLDAgKzEsMTQgQEAKK2NsYXNzIFRlc3RlciB7CisgICAgU3RyaW5nIHgoKSB7CisgICAgICAgIFN0cmluZyBvID0gIiI7Cis8c2VsZWN0aW9uPgorICAgICAgICBTdHJpbmcgczsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIHMgPSBvOworICAgICAgICB9CisgICAgICAgIGZpbmFsbHkgeworCisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHM7PC9zZWxlY3Rpb24+CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2QvTm90SW5pdGlhbGl6ZWRJbnNpZGVGaW5hbGx5X2FmdGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZC9Ob3RJbml0aWFsaXplZEluc2lkZUZpbmFsbHlfYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YzZjYzkzCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2QvTm90SW5pdGlhbGl6ZWRJbnNpZGVGaW5hbGx5X2FmdGVyLmphdmEKQEAgLTAsMCArMSwxOCBAQAorY2xhc3MgVGVzdGVyIHsKKyAgICBTdHJpbmcgeCgpIHsKKyAgICAgICAgU3RyaW5nIG8gPSAiIjsKKworICAgICAgICByZXR1cm4gbmV3TWV0aG9kKG8pOworICAgIH0KKworICAgIHByaXZhdGUgU3RyaW5nIG5ld01ldGhvZChTdHJpbmcgbykgeworICAgICAgICBTdHJpbmcgczsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIHMgPSBvOworICAgICAgICB9CisgICAgICAgIGZpbmFsbHkgeworCisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHM7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2QvTnVsbGFibGVDaGVjay5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2QvTnVsbGFibGVDaGVjay5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQxYmI2MTEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZC9OdWxsYWJsZUNoZWNrLmphdmEKQEAgLTAsMCArMSwxNSBAQAorY2xhc3MgVGVzdCB7CisgICBPYmplY3QgZm9vKCkgeworICAgICAgPHNlbGVjdGlvbj5PYmplY3QgbyA9ICIiOworICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCA1OyBpKyspIHsKKyAgICAgICAgIGlmIChpID09IDEwKXsKKyAgICAgICAgICAgIG8gPSBudWxsOworICAgICAgICAgfQorICAgICAgfQorICAgICAgaWYgKG8gPT0gbnVsbCkgeworICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgIH08L3NlbGVjdGlvbj4KKyAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihvKTsKKyAgICAgIHJldHVybiBvOworICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kL051bGxhYmxlQ2hlY2sxLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZC9OdWxsYWJsZUNoZWNrMS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYwMGUzYzYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZC9OdWxsYWJsZUNoZWNrMS5qYXZhCkBAIC0wLDAgKzEsMTYgQEAKK2NsYXNzIFRlc3QgeworICAgU3RyaW5nIGZvbyhpbnQgaSwgYm9vbGVhbiBmbGFnKSB7CisgICAgICA8c2VsZWN0aW9uPgorICAgICAgU3RyaW5nIHh4eCA9ICIiOworICAgICAgICBpZiAoZmxhZykgeworICAgICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCAxMDA7IGorKykgeworICAgICAgICAgICAgICAgIGlmIChpID09IGopIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICA8L3NlbGVjdGlvbj4KKyAgICAgIFN5c3RlbS5vdXQucHJpbnRsbih4eHgpOworICAgICAgcmV0dXJuIG51bGw7CisgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2QvTnVsbGFibGVDaGVjazFfYWZ0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kL051bGxhYmxlQ2hlY2sxX2FmdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGEyY2YxOAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kL051bGxhYmxlQ2hlY2sxX2FmdGVyLmphdmEKQEAgLTAsMCArMSwyMiBAQAorY2xhc3MgVGVzdCB7CisgICBTdHJpbmcgZm9vKGludCBpLCBib29sZWFuIGZsYWcpIHsKKworICAgICAgIFN0cmluZyB4eHggPSBuZXdNZXRob2QoaSwgZmxhZyk7CisgICAgICAgaWYgKHh4eCA9PSBudWxsKSByZXR1cm4gbnVsbDsKKyAgICAgIAorICAgICAgU3lzdGVtLm91dC5wcmludGxuKHh4eCk7CisgICAgICByZXR1cm4gbnVsbDsKKyAgIH0KKworICAgIHByaXZhdGUgU3RyaW5nIG5ld01ldGhvZChpbnQgaSwgYm9vbGVhbiBmbGFnKSB7CisgICAgICAgIFN0cmluZyB4eHggPSAiIjsKKyAgICAgICAgaWYgKGZsYWcpIHsKKyAgICAgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgMTAwOyBqKyspIHsKKyAgICAgICAgICAgICAgICBpZiAoaSA9PSBqKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4geHh4OworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZC9OdWxsYWJsZUNoZWNrRG9udE1pc3NGaW5hbC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2QvTnVsbGFibGVDaGVja0RvbnRNaXNzRmluYWwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMWRlYTkxCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2QvTnVsbGFibGVDaGVja0RvbnRNaXNzRmluYWwuamF2YQpAQCAtMCwwICsxLDEzIEBACitjbGFzcyBUZXN0IHsKKyAgdm9pZCBmb28oKSB7CisgICAgPHNlbGVjdGlvbj5maW5hbCBTdHJpbmcgc3RyID0gIiI7CisgICAgaWYgKHN0ciA9PSAiIikgeworICAgICAgcmV0dXJuOworICAgIH08L3NlbGVjdGlvbj4KKyAgICBuZXcgUnVubmFibGUoKSB7CisgICAgICBwdWJsaWMgdm9pZCBydW4oKSB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihzdHIpOworICAgICAgfQorICAgIH0KKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kL051bGxhYmxlQ2hlY2tEb250TWlzc0ZpbmFsX2FmdGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZC9OdWxsYWJsZUNoZWNrRG9udE1pc3NGaW5hbF9hZnRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxN2Y5ZjQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZC9OdWxsYWJsZUNoZWNrRG9udE1pc3NGaW5hbF9hZnRlci5qYXZhCkBAIC0wLDAgKzEsMTkgQEAKK2NsYXNzIFRlc3QgeworICB2b2lkIGZvbygpIHsKKyAgICAgIGZpbmFsIFN0cmluZyBzdHIgPSBuZXdNZXRob2QoKTsKKyAgICAgIGlmIChzdHIgPT0gbnVsbCkgcmV0dXJuOworICAgIG5ldyBSdW5uYWJsZSgpIHsKKyAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKHN0cik7CisgICAgICB9CisgICAgfQorICB9CisKKyAgICBwcml2YXRlIFN0cmluZyBuZXdNZXRob2QoKSB7CisgICAgICAgIGZpbmFsIFN0cmluZyBzdHIgPSAiIjsKKyAgICAgICAgaWYgKHN0ciA9PSAiIikgeworICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHN0cjsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2QvTnVsbGFibGVDaGVja1ZvaWQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kL051bGxhYmxlQ2hlY2tWb2lkLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDBlNDA0ZAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kL051bGxhYmxlQ2hlY2tWb2lkLmphdmEKQEAgLTAsMCArMSwxNCBAQAorY2xhc3MgVGVzdCB7CisgICB2b2lkIGZvbygpIHsKKyAgICAgIDxzZWxlY3Rpb24+T2JqZWN0IG8gPSAiIjsKKyAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgNTsgaSsrKSB7CisgICAgICAgICBpZiAoaSA9PSAxMCl7CisgICAgICAgICAgICBvID0gbnVsbDsKKyAgICAgICAgIH0KKyAgICAgIH0KKyAgICAgIGlmIChvID09IG51bGwpIHsKKyAgICAgICAgcmV0dXJuOworICAgICAgfTwvc2VsZWN0aW9uPgorICAgICAgU3lzdGVtLm91dC5wcmludGxuKG8pOworICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kL051bGxhYmxlQ2hlY2tWb2lkX2FmdGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZC9OdWxsYWJsZUNoZWNrVm9pZF9hZnRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMxMTMxNGQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZC9OdWxsYWJsZUNoZWNrVm9pZF9hZnRlci5qYXZhCkBAIC0wLDAgKzEsMjAgQEAKK2NsYXNzIFRlc3QgeworICAgdm9pZCBmb28oKSB7CisgICAgICAgT2JqZWN0IG8gPSBuZXdNZXRob2QoKTsKKyAgICAgICBpZiAobyA9PSBudWxsKSByZXR1cm47CisgICAgICBTeXN0ZW0ub3V0LnByaW50bG4obyk7CisgICB9CisKKyAgICBwcml2YXRlIE9iamVjdCBuZXdNZXRob2QoKSB7CisgICAgICAgIE9iamVjdCBvID0gIiI7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgNTsgaSsrKSB7CisgICAgICAgICAgIGlmIChpID09IDEwKXsKKyAgICAgICAgICAgICAgbyA9IG51bGw7CisgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAobyA9PSBudWxsKSB7CisgICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbzsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2QvTnVsbGFibGVDaGVja19hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2QvTnVsbGFibGVDaGVja19hZnRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZhMGRiNjQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZC9OdWxsYWJsZUNoZWNrX2FmdGVyLmphdmEKQEAgLTAsMCArMSwyMSBAQAorY2xhc3MgVGVzdCB7CisgICBPYmplY3QgZm9vKCkgeworICAgICAgIE9iamVjdCBvID0gbmV3TWV0aG9kKCk7CisgICAgICAgaWYgKG8gPT0gbnVsbCkgcmV0dXJuIG51bGw7CisgICAgICBTeXN0ZW0ub3V0LnByaW50bG4obyk7CisgICAgICByZXR1cm4gbzsKKyAgIH0KKworICAgIHByaXZhdGUgT2JqZWN0IG5ld01ldGhvZCgpIHsKKyAgICAgICAgT2JqZWN0IG8gPSAiIjsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCA1OyBpKyspIHsKKyAgICAgICAgICAgaWYgKGkgPT0gMTApeworICAgICAgICAgICAgICBvID0gbnVsbDsKKyAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmIChvID09IG51bGwpIHsKKyAgICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICB9CisgICAgICAgIHJldHVybiBvOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZC9PbmVCcmFuY2hBc3NpZ25tZW50LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZC9PbmVCcmFuY2hBc3NpZ25tZW50LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmY2NTA0OAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kL09uZUJyYW5jaEFzc2lnbm1lbnQuamF2YQpAQCAtMCwwICsxLDEzIEBACitjbGFzcyBBeworICAgIHB1YmxpYyBzdGF0aWMgT2JqZWN0IHRlc3QoT2JqZWN0IGEpIHsKKyAgICAgICAgYm9vbGVhbiB2YWx1ZTsKKworICAgICAgICBpZiAoYSA9PSBudWxsKXsKKyAgICAgICAgICAgIDxzZWxlY3Rpb24+dmFsdWUgPSB0cnVlOzwvc2VsZWN0aW9uPgorICAgICAgICB9CisgICAgICAgIGVsc2V7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gQm9vbGVhbi52YWx1ZU9mKHZhbHVlKTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZC9PbmVCcmFuY2hBc3NpZ25tZW50X2FmdGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZC9PbmVCcmFuY2hBc3NpZ25tZW50X2FmdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmQ1YmEyMgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kL09uZUJyYW5jaEFzc2lnbm1lbnRfYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDE5IEBACitjbGFzcyBBeworICAgIHB1YmxpYyBzdGF0aWMgT2JqZWN0IHRlc3QoT2JqZWN0IGEpIHsKKyAgICAgICAgYm9vbGVhbiB2YWx1ZTsKKworICAgICAgICBpZiAoYSA9PSBudWxsKXsKKyAgICAgICAgICAgIHZhbHVlID0gbmV3TWV0aG9kKCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZXsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBCb29sZWFuLnZhbHVlT2YodmFsdWUpOworICAgIH0KKworICAgIHByaXZhdGUgc3RhdGljIGJvb2xlYW4gbmV3TWV0aG9kKCkgeworICAgICAgICBib29sZWFuIHZhbHVlOworICAgICAgICB2YWx1ZSA9IHRydWU7CisgICAgICAgIHJldHVybiB2YWx1ZTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZC9PbmVMaW5lTGFtYmRhLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZC9PbmVMaW5lTGFtYmRhLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGIxMDllZgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kL09uZUxpbmVMYW1iZGEuamF2YQpAQCAtMCwwICsxLDUgQEAKK2NsYXNzIFRlc3QgeworICBwdWJsaWMgdm9pZCBmb28oKSB7CisgICAgQ29tcGFyYWJsZTxTdHJpbmc+IGMgPSBvIC0+IDxzZWxlY3Rpb24+by5pbmRleE9mKCJmb28iKTwvc2VsZWN0aW9uPjsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2QvT25lTGluZUxhbWJkYV9hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2QvT25lTGluZUxhbWJkYV9hZnRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM1MTk2YjQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZC9PbmVMaW5lTGFtYmRhX2FmdGVyLmphdmEKQEAgLTAsMCArMSw5IEBACitjbGFzcyBUZXN0IHsKKyAgcHVibGljIHZvaWQgZm9vKCkgeworICAgIENvbXBhcmFibGU8U3RyaW5nPiBjID0gbyAtPiBuZXdNZXRob2Qobyk7CisgIH0KKworICAgIHByaXZhdGUgaW50IG5ld01ldGhvZChTdHJpbmcgbykgeworICAgICAgICByZXR1cm4gby5pbmRleE9mKCJmb28iKTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZC9PeGZvcmRCdWcuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kL094Zm9yZEJ1Zy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIzZWY0ZjcKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZC9PeGZvcmRCdWcuamF2YQpAQCAtMCwwICsxLDEzIEBACitjbGFzcyBPeGZvcmRCdWcgeworICAgIHByaXZhdGUgaW50IGYoaW50IG0sIGludCBuKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgaW50IGkgPSAwOworICAgICAgICB3aGlsZSAoaSA8IG4pIHsKKyAgICAgICAgICAgIGkrKzsKKyAgICAgICAgICAgIDxzZWxlY3Rpb24+aWYgKGkgPT0gbSkgeworICAgICAgICAgICAgICAgIG4gKz0gbTsKKyAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCIiICsgbik7CisgICAgICAgICAgICB9PC9zZWxlY3Rpb24+CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG47CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kL094Zm9yZEJ1Z19hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2QvT3hmb3JkQnVnX2FmdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWIxNzJiZAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kL094Zm9yZEJ1Z19hZnRlci5qYXZhCkBAIC0wLDAgKzEsMTggQEAKK2NsYXNzIE94Zm9yZEJ1ZyB7CisgICAgcHJpdmF0ZSBpbnQgZihpbnQgbSwgaW50IG4pIHRocm93cyBFeGNlcHRpb24geworICAgICAgICBpbnQgaSA9IDA7CisgICAgICAgIHdoaWxlIChpIDwgbikgeworICAgICAgICAgICAgaSsrOworICAgICAgICAgICAgbiA9IG5ld01ldGhvZChtLCBuLCBpKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbjsKKyAgICB9CisKKyAgICBwcml2YXRlIGludCBuZXdNZXRob2QoaW50IG0sIGludCBuLCBpbnQgaSkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIGlmIChpID09IG0pIHsKKyAgICAgICAgICAgIG4gKz0gbTsKKyAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oIiIgKyBuKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbjsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2QvUGFyYW1EZXRlY3Rpb24uamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kL1BhcmFtRGV0ZWN0aW9uLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmJlZjNkOAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kL1BhcmFtRGV0ZWN0aW9uLmphdmEKQEAgLTAsMCArMSwyMCBAQAoraW1wb3J0IGphdmEudXRpbC4qOworCitjbGFzcyBUZXN0IHsKKyAgcHVibGljIHZvaWQgZm9vKCkgeworICAgIDxzZWxlY3Rpb24+TGlzdCB0cmFkZXM7CisgICAgdHJ5IHsKKyAgICAgIHRyYWRlcyA9IGdldFRyYWRlcygpOworICAgIH0KKyAgICBjYXRjaCAoUmVtb3RlRXhjZXB0aW9uIGUpIHsKKyAgICB9CisgICAgPC9zZWxlY3Rpb24+CisKKyAgICAvL3Byb2JhYmx5IG5vdCBhc3NpZ25lZCAhISEKKyAgICBpZiAodHJhZGVzLmlzRW1wdHkoKSkgeworICAgIH0KKyAgfQorCisgIHN0YXRpYyBjbGFzcyBSZW1vdGVFeGNlcHRpb24gZXh0ZW5kcyBFeGNlcHRpb24geworICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZC9QYXJhbURldGVjdGlvbl9hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2QvUGFyYW1EZXRlY3Rpb25fYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNjRkZGNkCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2QvUGFyYW1EZXRlY3Rpb25fYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDI1IEBACitpbXBvcnQgamF2YS51dGlsLio7CisKK2NsYXNzIFRlc3QgeworICBwdWJsaWMgdm9pZCBmb28oKSB7CisgICAgICBMaXN0IHRyYWRlcyA9IG5ld01ldGhvZCgpOworICAgIAorCisgICAgLy9wcm9iYWJseSBub3QgYXNzaWduZWQgISEhCisgICAgaWYgKHRyYWRlcy5pc0VtcHR5KCkpIHsKKyAgICB9CisgIH0KKworICAgIHByaXZhdGUgTGlzdCBuZXdNZXRob2QoKSB7CisgICAgICAgIExpc3QgdHJhZGVzOworICAgICAgICB0cnkgeworICAgICAgICAgIHRyYWRlcyA9IGdldFRyYWRlcygpOworICAgICAgICB9CisgICAgICAgIGNhdGNoIChSZW1vdGVFeGNlcHRpb24gZSkgeworICAgICAgICB9CisgICAgICAgIHJldHVybiB0cmFkZXM7CisgICAgfQorCisgICAgc3RhdGljIGNsYXNzIFJlbW90ZUV4Y2VwdGlvbiBleHRlbmRzIEV4Y2VwdGlvbiB7CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kL1BhcmFtZXRlcnNGcm9tQW5vbnltb3VzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZC9QYXJhbWV0ZXJzRnJvbUFub255bW91cy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZjOWRjM2EKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZC9QYXJhbWV0ZXJzRnJvbUFub255bW91cy5qYXZhCkBAIC0wLDAgKzEsMTIgQEAKK2NsYXNzIFRlc3QgeworICB2b2lkIGYoKSB7CisgICAgbmV3IFJ1bm5hYmxlKCkgeworICAgICAgcHVibGljIHZvaWQgcnVuKCkgeworICAgICAgICBpbnQgaiA9IDA7CisgICAgICAgIGlmIChqID09IDAgJiYgPHNlbGVjdGlvbj5qIDwgMCAmJiBqID4gMDwvc2VsZWN0aW9uPikgeworICAgICAgICAgIGFzc2VydCBmYWxzZTsKKyAgICAgICAgfQorICAgICAgfQorICAgIH07CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZC9QYXJhbWV0ZXJzRnJvbUFub255bW91c19hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2QvUGFyYW1ldGVyc0Zyb21Bbm9ueW1vdXNfYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NzY4ZGJjCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2QvUGFyYW1ldGVyc0Zyb21Bbm9ueW1vdXNfYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDE2IEBACitjbGFzcyBUZXN0IHsKKyAgdm9pZCBmKCkgeworICAgIG5ldyBSdW5uYWJsZSgpIHsKKyAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKKyAgICAgICAgaW50IGogPSAwOworICAgICAgICBpZiAoaiA9PSAwICYmIG5ld01ldGhvZChqKSkgeworICAgICAgICAgIGFzc2VydCBmYWxzZTsKKyAgICAgICAgfQorICAgICAgfQorICAgIH07CisgIH0KKworICAgIHByaXZhdGUgYm9vbGVhbiBuZXdNZXRob2QoaW50IGopIHsKKyAgICAgICAgcmV0dXJuIGogPCAwICYmIGogPiAwOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZC9QYXJhbXNVc2VkSW5Mb2NhbENsYXNzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZC9QYXJhbXNVc2VkSW5Mb2NhbENsYXNzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzEwM2ZiNAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kL1BhcmFtc1VzZWRJbkxvY2FsQ2xhc3MuamF2YQpAQCAtMCwwICsxLDE2IEBACitjbGFzcyBBIHsKKyAgICB2b2lkIGZvbygpIHsKKyAgICAgIGZpbmFsIGludCBhYmMgPSAwOworICAgICAgYm9vbGVhbiBiID0gZmFsc2U7CisgICAgICA8c2VsZWN0aW9uPgorICAgICAgaWYgKGIpIHsKKyAgICAgICAgY2xhc3MgVCB7CisgICAgICAgICAgdm9pZCBiYXIoKSB7CisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oYWJjKTsKKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuOworICAgICAgfSA8L3NlbGVjdGlvbj4KKyAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiIik7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kL1BhcmFtc1VzZWRJbkxvY2FsQ2xhc3NfYWZ0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kL1BhcmFtc1VzZWRJbkxvY2FsQ2xhc3NfYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMzI2OGVmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2QvUGFyYW1zVXNlZEluTG9jYWxDbGFzc19hZnRlci5qYXZhCkBAIC0wLDAgKzEsMjEgQEAKK2NsYXNzIEEgeworICAgIHZvaWQgZm9vKCkgeworICAgICAgZmluYWwgaW50IGFiYyA9IDA7CisgICAgICBib29sZWFuIGIgPSBmYWxzZTsKKworICAgICAgICBpZiAobmV3TWV0aG9kKGFiYywgYikpIHJldHVybjsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIiKTsKKyAgICB9CisKKyAgICBwcml2YXRlIGJvb2xlYW4gbmV3TWV0aG9kKGZpbmFsIGludCBhYmMsIGJvb2xlYW4gYikgeworICAgICAgICBpZiAoYikgeworICAgICAgICAgIGNsYXNzIFQgeworICAgICAgICAgICAgdm9pZCBiYXIoKSB7CisgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihhYmMpOworICAgICAgICAgICAgfQorICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2QvUmVhc3NpZ25lZFZhckFmdGVyQ2FsbC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2QvUmVhc3NpZ25lZFZhckFmdGVyQ2FsbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg1MmQwZjgKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZC9SZWFzc2lnbmVkVmFyQWZ0ZXJDYWxsLmphdmEKQEAgLTAsMCArMSw4IEBACitjbGFzcyBBIHsKKyAgICBwdWJsaWMgdm9pZCB0ZXN0KCkgeworICAgICAgICA8c2VsZWN0aW9uPmludCBjb3VudD0wOworICAgICAgICBmb3IoaW50IGo9MDsgajwxMDA7IGorKykgY291bnQrKzs8L3NlbGVjdGlvbj4KKyAgICAgICAgY291bnQ9MDsKKyAgICAgICAgZm9yKGludCBqPTA7IGo8MTAwOyBqKyspIGNvdW50Kys7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kL1JlYXNzaWduZWRWYXJBZnRlckNhbGxfYWZ0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kL1JlYXNzaWduZWRWYXJBZnRlckNhbGxfYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNmU2NzFiCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2QvUmVhc3NpZ25lZFZhckFmdGVyQ2FsbF9hZnRlci5qYXZhCkBAIC0wLDAgKzEsMTMgQEAKK2NsYXNzIEEgeworICAgIHB1YmxpYyB2b2lkIHRlc3QoKSB7CisgICAgICAgIG5ld01ldGhvZCgpOworICAgICAgICBpbnQgY291bnQ7CisgICAgICAgIGNvdW50PTA7CisgICAgICAgIGZvcihpbnQgaj0wOyBqPDEwMDsgaisrKSBjb3VudCsrOworICAgIH0KKworICAgIHByaXZhdGUgdm9pZCBuZXdNZXRob2QoKSB7CisgICAgICAgIGludCBjb3VudD0wOworICAgICAgICBmb3IoaW50IGo9MDsgajwxMDA7IGorKykgY291bnQrKzsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2QvUmVjdXJzaXZlQ2FsbFRvRXh0cmFjdGVkLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZC9SZWN1cnNpdmVDYWxsVG9FeHRyYWN0ZWQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNmExNWVjCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2QvUmVjdXJzaXZlQ2FsbFRvRXh0cmFjdGVkLmphdmEKQEAgLTAsMCArMSw4IEBACitwdWJsaWMgY2xhc3MgRXh0cmFjdE1ldGhvZHMgeworICAgdm9pZCBuZXdNZXRob2QoKSB7CisgICAgIGludCBpID0gMDsKKyAgICAgPHNlbGVjdGlvbj5pZiAodHJ1ZSkgeworICAgICAgIG5ld01ldGhvZChpKTsKKyAgICAgfTwvc2VsZWN0aW9uPgorICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2QvUmVjdXJzaXZlQ2FsbFRvRXh0cmFjdGVkX2FmdGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZC9SZWN1cnNpdmVDYWxsVG9FeHRyYWN0ZWRfYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNmZmZGE3Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2QvUmVjdXJzaXZlQ2FsbFRvRXh0cmFjdGVkX2FmdGVyLmphdmEKQEAgLTAsMCArMSwxMiBAQAorcHVibGljIGNsYXNzIEV4dHJhY3RNZXRob2RzIHsKKyAgIHZvaWQgbmV3TWV0aG9kKCkgeworICAgICBpbnQgaSA9IDA7CisgICAgICAgbmV3TWV0aG9kKGkpOworICAgfQorCisgICAgcHJpdmF0ZSB2b2lkIG5ld01ldGhvZChpbnQgaSkgeworICAgICAgICBpZiAodHJ1ZSkgeworICAgICAgICAgIG5ld01ldGhvZChpKTsKKyAgICAgICAgfQorICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kL1JlZHVuZGFudENhc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kL1JlZHVuZGFudENhc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMmY3N2RmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2QvUmVkdW5kYW50Q2FzdC5qYXZhCkBAIC0wLDAgKzEsNiBAQAorY2xhc3MgVGVzdCB7CisgICAgdm9pZCBmb28gKCkgeworICAgICAgICBpbnQgYSA9IDE7CisgICAgICAgIDxzZWxlY3Rpb24+U3lzdGVtLm91dC5wcmludGxuKCIiICsgKE9iamVjdClhKTs8L3NlbGVjdGlvbj4KKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2QvUmVkdW5kYW50Q2FzdF9hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2QvUmVkdW5kYW50Q2FzdF9hZnRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ3MzgxOWEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZC9SZWR1bmRhbnRDYXN0X2FmdGVyLmphdmEKQEAgLTAsMCArMSwxMCBAQAorY2xhc3MgVGVzdCB7CisgICAgdm9pZCBmb28gKCkgeworICAgICAgICBpbnQgYSA9IDE7CisgICAgICAgIG5ld01ldGhvZChhKTsKKyAgICB9CisKKyAgICBwcml2YXRlIHZvaWQgbmV3TWV0aG9kKE9iamVjdCBhKSB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiIiArIGEpOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZC9SZXR1cm5Gcm9tVHJ5LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZC9SZXR1cm5Gcm9tVHJ5LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzMyNGRlNQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kL1JldHVybkZyb21UcnkuamF2YQpAQCAtMCwwICsxLDE2IEBACitjbGFzcyBBIHsKKyAgICBwdWJsaWMgU3RyaW5nIG1ldGhvZCgpIHsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIDxzZWxlY3Rpb24+dHJ5IHsKKyAgICAgICAgICAgICAgICByZXR1cm4gIiI7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBmaW5hbGx5IHsKKyAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImYiKTsKKyAgICAgICAgICAgIH08L3NlbGVjdGlvbj4KKyAgICAgICAgfQorICAgICAgICBjYXRjaCAoRXJyb3IgZSkgeworCisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuICIiOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZC9SZXR1cm5Gcm9tVHJ5X2FmdGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZC9SZXR1cm5Gcm9tVHJ5X2FmdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDYyMWFiMgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kL1JldHVybkZyb21UcnlfYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDIwIEBACitjbGFzcyBBIHsKKyAgICBwdWJsaWMgU3RyaW5nIG1ldGhvZCgpIHsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIHJldHVybiBuZXdNZXRob2QoKTsKKyAgICAgICAgfQorICAgICAgICBjYXRjaCAoRXJyb3IgZSkgeworCisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuICIiOworICAgIH0KKworICAgIHByaXZhdGUgU3RyaW5nIG5ld01ldGhvZCgpIHsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIHJldHVybiAiIjsKKyAgICAgICAgfQorICAgICAgICBmaW5hbGx5IHsKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiZiIpOworICAgICAgICB9CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kL1JldHVyblN0YXRlbWVudEZvbGRpbmcuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kL1JldHVyblN0YXRlbWVudEZvbGRpbmcuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOTlkMWRhCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2QvUmV0dXJuU3RhdGVtZW50Rm9sZGluZy5qYXZhCkBAIC0wLDAgKzEsNSBAQAorcHVibGljIGNsYXNzIFRlc3QgeworICBTdHJpbmcgZm9vKFN0cmluZ1tdIHMsIGludCBpKSB7CisgICAgIHJldHVybiA8c2VsZWN0aW9uPnNbaV08L3NlbGVjdGlvbj47CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZC9SZXR1cm5TdGF0ZW1lbnRGb2xkaW5nX2FmdGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZC9SZXR1cm5TdGF0ZW1lbnRGb2xkaW5nX2FmdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDA4M2JhZgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kL1JldHVyblN0YXRlbWVudEZvbGRpbmdfYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDkgQEAKK3B1YmxpYyBjbGFzcyBUZXN0IHsKKyAgU3RyaW5nIGZvbyhTdHJpbmdbXSBzLCBpbnQgaSkgeworICAgICByZXR1cm4gbmV3TWV0aG9kKHNbaV0pOworICB9CisKKyAgICBwcml2YXRlIFN0cmluZyBuZXdNZXRob2QoU3RyaW5nIHMpIHsKKyAgICAgICAgcmV0dXJuIHM7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kL1NDUjEyMjQ1LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZC9TQ1IxMjI0NS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM2Zjc5OWIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZC9TQ1IxMjI0NS5qYXZhCkBAIC0wLDAgKzEsMTEgQEAKK3B1YmxpYyBjbGFzcyBBIHsKKyAgICBwcml2YXRlIHZvaWQgZm9vKCkgeworICAgICAgICBSdW5uYWJsZSBhID0gbmV3IFJ1bm5hYmxlKCkgeworICAgICAgICAgICAgcHJpdmF0ZSBpbnQgYTsKKworICAgICAgICAgICAgcHVibGljIHZvaWQgcnVuKCkgeworICAgICAgICAgICAgICAgIDxzZWxlY3Rpb24+YSA9IDI8L3NlbGVjdGlvbj47CisgICAgICAgICAgICB9CisgICAgICAgIH07CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kL1NDUjEyMjQ1X2FmdGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZC9TQ1IxMjI0NV9hZnRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU3MjkxNzQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZC9TQ1IxMjI0NV9hZnRlci5qYXZhCkBAIC0wLDAgKzEsMTUgQEAKK3B1YmxpYyBjbGFzcyBBIHsKKyAgICBwcml2YXRlIHZvaWQgZm9vKCkgeworICAgICAgICBSdW5uYWJsZSBhID0gbmV3IFJ1bm5hYmxlKCkgeworICAgICAgICAgICAgcHJpdmF0ZSBpbnQgYTsKKworICAgICAgICAgICAgcHVibGljIHZvaWQgcnVuKCkgeworICAgICAgICAgICAgICAgIG5ld01ldGhvZCgpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBwcml2YXRlIHZvaWQgbmV3TWV0aG9kKCkgeworICAgICAgICAgICAgICAgIGEgPSAyOworICAgICAgICAgICAgfQorICAgICAgICB9OworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZC9TQ1IxNTgxNS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2QvU0NSMTU4MTUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYTc0MTdmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2QvU0NSMTU4MTUuamF2YQpAQCAtMCwwICsxLDEwIEBACitwdWJsaWMgY2xhc3MgRm9vIHsKKyAgICBzdGF0aWMgRm9vCisgICAgICAgICAgICBmMSA9IG5ldyBGb28oKXsKKyAgICAgICAgICAgICAgICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gPHNlbGVjdGlvbj4iYSIgKyAiYiI8L3NlbGVjdGlvbj47CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIGYyID0gbmV3IEZvbygpe307CisKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZC9TQ1IxNTgxNV9hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2QvU0NSMTU4MTVfYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yM2E1M2RlOAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kL1NDUjE1ODE1X2FmdGVyLmphdmEKQEAgLTAsMCArMSwxNSBAQAorcHVibGljIGNsYXNzIEZvbyB7CisgICAgc3RhdGljIEZvbworICAgICAgICAgICAgZjEgPSBuZXcgRm9vKCl7CisgICAgICAgICAgICAgICAgcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ld01ldGhvZCgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH07CisKKyAgICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgbmV3TWV0aG9kKCkgeworICAgICAgICByZXR1cm4gImEiICsgImIiOworICAgIH0KKworICAgIHN0YXRpYyBGb28gZjIgPSBuZXcgRm9vKCl7fTsKKworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kL1NDUjI3ODg3LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZC9TQ1IyNzg4Ny5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI0YTdiMzMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZC9TQ1IyNzg4Ny5qYXZhCkBAIC0wLDAgKzEsNDEgQEAKK3BhY2thZ2UgZXh0cmFjdE1ldGhvZDsKKworaW1wb3J0IGphdmEuaW8uKjsKK2ltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7CisKK3B1YmxpYyBjbGFzcyBTQ1IyNzg4NyB7CisgICAgcHVibGljIGludCBwdWJsaXNoeChPdXRwdXRTdHJlYW0gb3V0LCBib29sZWFuIGluY2x1ZGVDb2RlKSB0aHJvd3MgSU9FeGNlcHRpb24geworICAgICAgICBpZiAoVkVSQk9TRSkgU3lzdGVtLmVyci5wcmludGxuKCJQVUJMSVNIOiBwdWJsaXNoaW5nIHN1YnN5c3RlbSAnIiArIHN1YnN5c3RlbS5yZWZRdWFsaWZpZWRJZGVudGlmeWluZ05hbWUoKSArICInIHdpdGgiICsgKGluY2x1ZGVDb2RlID8gIiIgOiAib3V0IikgKyAiIGNvZGUiKTsKKyAgICAgICAgWmlwcGluZ1hNTEdlbmVyYXRvckZhY3RvcnkgZ2VuRmFjID0gbmV3IFppcHBpbmdYTUxHZW5lcmF0b3JGYWN0b3J5KG91dCk7CisvLz09PT09PT09CisgICAgICAgIDxzZWxlY3Rpb24+UmVmT2JqZWN0VUxpc3QgaW5jbHVkZWQgPSBtYWtlSW5jbHVkZWRTZXQoKTsKKyAgICAgICAgaWYgKCFpbmNsdWRlZC5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIFNjYXR0ZXJpbmdEb2NCdWlsZGVyIGRvY0J1aWxkZXIgPSBuZXcgTXlEb2NCdWlsZGVyKHJlcG9zaXRvcnksIGluY2x1ZGVkKTsKKyAgICAgICAgICAgIG5ldyBSZXBvc2l0b3J5U2F2ZXIocmVwb3NpdG9yeSkuc2F2ZVRvKGdlbkZhYywgZG9jQnVpbGRlcik7CisgICAgICAgIH08L3NlbGVjdGlvbj4KKy8vPT09PT09PT0KKyAgICAgICAgaWYgKGluY2x1ZGVDb2RlKSB7CisgICAgICAgICAgICBmb3IgKEl0ZXJhdG9yIGkgPSBzdWJzeXN0ZW0uZ2V0TW9kdWxlKCkuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7KSB7CisgICAgICAgICAgICAgICAgT3B0aW1hbE1vZHVsZSBtb2R1bGUgPSAoT3B0aW1hbE1vZHVsZSkgaS5uZXh0KCk7CisgICAgICAgICAgICAgICAgaWYgKG1vZHVsZS5nZXRQdWJsaXNoZWQoKSkgeworICAgICAgICAgICAgICAgICAgICBGaWxlT2JqZWN0W10gZmlsZXMgPSBnZXRNb2R1bGVQcm9kdWN0cyhtb2R1bGUpOworICAgICAgICAgICAgICAgICAgICBpZiAoZmlsZXMgIT0gbnVsbCAmJiBmaWxlcy5sZW5ndGggPiAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IGZpbGVzLmxlbmd0aDsgaisrKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmlsZU9iamVjdCBmaWxlID0gZmlsZXNbal07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0U3RyZWFtIG9zID0gZ2VuRmFjLmdldE91dHB1dFN0cmVhbShmaWxlLmdldEZpbGVOYW1lKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIElucHV0U3RyZWFtIGlzID0gZmlsZS5nZXRJbnB1dFN0cmVhbSgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvcHlTdHJlYW0oaXMsIG9zKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGZpbmFsbHkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcy5jbG9zZSgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcy5jbG9zZSgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBnZW5GYWMuY2xvc2UoKTsKKyAgICAgICAgcmV0dXJuIGluY2x1ZGVkLnNpemUoKTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZC9TQ1IyNzg4N19hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2QvU0NSMjc4ODdfYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMmU1ZTMzCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2QvU0NSMjc4ODdfYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDQ2IEBACitwYWNrYWdlIGV4dHJhY3RNZXRob2Q7CisKK2ltcG9ydCBqYXZhLmlvLio7CitpbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOworCitwdWJsaWMgY2xhc3MgU0NSMjc4ODcgeworICAgIHB1YmxpYyBpbnQgcHVibGlzaHgoT3V0cHV0U3RyZWFtIG91dCwgYm9vbGVhbiBpbmNsdWRlQ29kZSkgdGhyb3dzIElPRXhjZXB0aW9uIHsKKyAgICAgICAgaWYgKFZFUkJPU0UpIFN5c3RlbS5lcnIucHJpbnRsbigiUFVCTElTSDogcHVibGlzaGluZyBzdWJzeXN0ZW0gJyIgKyBzdWJzeXN0ZW0ucmVmUXVhbGlmaWVkSWRlbnRpZnlpbmdOYW1lKCkgKyAiJyB3aXRoIiArIChpbmNsdWRlQ29kZSA/ICIiIDogIm91dCIpICsgIiBjb2RlIik7CisgICAgICAgIFppcHBpbmdYTUxHZW5lcmF0b3JGYWN0b3J5IGdlbkZhYyA9IG5ldyBaaXBwaW5nWE1MR2VuZXJhdG9yRmFjdG9yeShvdXQpOworLy89PT09PT09PQorICAgICAgICBSZWZPYmplY3RVTGlzdCBpbmNsdWRlZCA9IG5ld01ldGhvZChnZW5GYWMpOworLy89PT09PT09PQorICAgICAgICBpZiAoaW5jbHVkZUNvZGUpIHsKKyAgICAgICAgICAgIGZvciAoSXRlcmF0b3IgaSA9IHN1YnN5c3RlbS5nZXRNb2R1bGUoKS5pdGVyYXRvcigpOyBpLmhhc05leHQoKTspIHsKKyAgICAgICAgICAgICAgICBPcHRpbWFsTW9kdWxlIG1vZHVsZSA9IChPcHRpbWFsTW9kdWxlKSBpLm5leHQoKTsKKyAgICAgICAgICAgICAgICBpZiAobW9kdWxlLmdldFB1Ymxpc2hlZCgpKSB7CisgICAgICAgICAgICAgICAgICAgIEZpbGVPYmplY3RbXSBmaWxlcyA9IGdldE1vZHVsZVByb2R1Y3RzKG1vZHVsZSk7CisgICAgICAgICAgICAgICAgICAgIGlmIChmaWxlcyAhPSBudWxsICYmIGZpbGVzLmxlbmd0aCA+IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgZmlsZXMubGVuZ3RoOyBqKyspIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBGaWxlT2JqZWN0IGZpbGUgPSBmaWxlc1tqXTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXRTdHJlYW0gb3MgPSBnZW5GYWMuZ2V0T3V0cHV0U3RyZWFtKGZpbGUuZ2V0RmlsZU5hbWUoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5wdXRTdHJlYW0gaXMgPSBmaWxlLmdldElucHV0U3RyZWFtKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29weVN0cmVhbShpcywgb3MpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZmluYWxseSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9zLmNsb3NlKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzLmNsb3NlKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGdlbkZhYy5jbG9zZSgpOworICAgICAgICByZXR1cm4gaW5jbHVkZWQuc2l6ZSgpOworICAgIH0KKworICAgIHByaXZhdGUgUmVmT2JqZWN0VUxpc3QgbmV3TWV0aG9kKFppcHBpbmdYTUxHZW5lcmF0b3JGYWN0b3J5IGdlbkZhYykgeworICAgICAgICBSZWZPYmplY3RVTGlzdCBpbmNsdWRlZCA9IG1ha2VJbmNsdWRlZFNldCgpOworICAgICAgICBpZiAoIWluY2x1ZGVkLmlzRW1wdHkoKSkgeworICAgICAgICAgICAgU2NhdHRlcmluZ0RvY0J1aWxkZXIgZG9jQnVpbGRlciA9IG5ldyBNeURvY0J1aWxkZXIocmVwb3NpdG9yeSwgaW5jbHVkZWQpOworICAgICAgICAgICAgbmV3IFJlcG9zaXRvcnlTYXZlcihyZXBvc2l0b3J5KS5zYXZlVG8oZ2VuRmFjLCBkb2NCdWlsZGVyKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gaW5jbHVkZWQ7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2QvU0NSMjg0MjcuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kL1NDUjI4NDI3LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWY5MWUwYwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kL1NDUjI4NDI3LmphdmEKQEAgLTAsMCArMSw1IEBACitjbGFzcyBUZXN0Q2FzZSB7CisgIGJvb2xlYW4gYSA9IHRydWU7CisgIGJvb2xlYW4gYiA9IGZhbHNlOworICBib29sZWFuIHggPSA8c2VsZWN0aW9uPmEgJiYgYjwvc2VsZWN0aW9uPjsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZC9TQ1IyODQyN19hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2QvU0NSMjg0MjdfYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYWJmZmRmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2QvU0NSMjg0MjdfYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDkgQEAKK2NsYXNzIFRlc3RDYXNlIHsKKyAgYm9vbGVhbiBhID0gdHJ1ZTsKKyAgYm9vbGVhbiBiID0gZmFsc2U7CisgIGJvb2xlYW4geCA9IG5ld01ldGhvZCgpOworCisgICAgcHJpdmF0ZSBib29sZWFuIG5ld01ldGhvZCgpIHsKKyAgICAgICAgcmV0dXJuIGEgJiYgYjsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2QvU0NSMzI5MjQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kL1NDUjMyOTI0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTUwMDU4OQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kL1NDUjMyOTI0LmphdmEKQEAgLTAsMCArMSw2IEBACitwdWJsaWMgY2xhc3MgVGVzdCB7CisgICAgdm9pZCBtKCkgeworICAgICAgICBPYmplY3QgeCA9IG51bGw7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigieCA9ICIgKyA8c2VsZWN0aW9uPng8L3NlbGVjdGlvbj4pOyAvLyBbLi4uXSA9IHNlbGVjdGlvbgorICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZC9TQ1IzMjkyNF9hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2QvU0NSMzI5MjRfYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZGI5YTk0Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2QvU0NSMzI5MjRfYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDEwIEBACitwdWJsaWMgY2xhc3MgVGVzdCB7CisgICAgdm9pZCBtKCkgeworICAgICAgICBPYmplY3QgeCA9IG51bGw7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigieCA9ICIgKyBuZXdNZXRob2QoeCkpOyAvLyBbLi4uXSA9IHNlbGVjdGlvbgorICAgIH0KKworICAgIHByaXZhdGUgT2JqZWN0IG5ld01ldGhvZChPYmplY3QgeCkgeworICAgICAgICByZXR1cm4geDsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2QvU2NyMTA0NjQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kL1NjcjEwNDY0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGUxZDM2MwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kL1NjcjEwNDY0LmphdmEKQEAgLTAsMCArMSw5IEBACitjbGFzcyBUZXN0IHsKKyAgICBwdWJsaWMgT2JqZWN0IG1ldGhvZCgpIHsKKyAgICAgICAgPHNlbGVjdGlvbj5iYXIoKTs8L3NlbGVjdGlvbj4KKyAgICAgICAgcmV0dXJuIG51bGw7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgYmFyKCkgeworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZC9TY3IxMDQ2NF9hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2QvU2NyMTA0NjRfYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xY2YwYjU4Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2QvU2NyMTA0NjRfYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDEzIEBACitjbGFzcyBUZXN0IHsKKyAgICBwdWJsaWMgT2JqZWN0IG1ldGhvZCgpIHsKKyAgICAgICAgbmV3TWV0aG9kKCk7CisgICAgICAgIHJldHVybiBudWxsOworICAgIH0KKworICAgIHByaXZhdGUgdm9pZCBuZXdNZXRob2QoKSB7CisgICAgICAgIGJhcigpOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIGJhcigpIHsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2QvU2NyNjI0MS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2QvU2NyNjI0MS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU3YzhhMmUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZC9TY3I2MjQxLmphdmEKQEAgLTAsMCArMSw3IEBACitpbXBvcnQgamF2YS51dGlsLio7CisKK2NsYXNzIFRlc3QgZXh0ZW5kcyBHcmVnb3JpYW5DYWxlbmRhciB7CisgICAgcHVibGljIGJvb2xlYW4gaXNTYXR1cmRheSgpIHsKKyAgICAgICAgcmV0dXJuIDxzZWxlY3Rpb24+Z2V0KCBDYWxlbmRhci5EQVlfT0ZfV0VFSyApPC9zZWxlY3Rpb24+ID09IFNBVFVSREFZOworICAgIH0gICAgCit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2QvU2NyNjI0MV9hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2QvU2NyNjI0MV9hZnRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZkYzk3OTMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZC9TY3I2MjQxX2FmdGVyLmphdmEKQEAgLTAsMCArMSwxMSBAQAoraW1wb3J0IGphdmEudXRpbC4qOworCitjbGFzcyBUZXN0IGV4dGVuZHMgR3JlZ29yaWFuQ2FsZW5kYXIgeworICAgIHB1YmxpYyBib29sZWFuIGlzU2F0dXJkYXkoKSB7CisgICAgICAgIHJldHVybiBuZXdNZXRob2QoKSA9PSBTQVRVUkRBWTsKKyAgICB9CisKKyAgICBwcml2YXRlIGludCBuZXdNZXRob2QoKSB7CisgICAgICAgIHJldHVybiBnZXQoIENhbGVuZGFyLkRBWV9PRl9XRUVLICk7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kL1NjcjcwOTEuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kL1NjcjcwOTEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNjI1ZDYyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2QvU2NyNzA5MS5qYXZhCkBAIC0wLDAgKzEsMjkgQEAKK3B1YmxpYyBjbGFzcyBJZGVhVGVzdEJ1ZyB7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTUFQX0hFSUdIVCA9IDEwMDA7CisKKyAgICBPYmplY3RbXVtdIF9tYXA7CisKKyAgICBwdWJsaWMgaW50IGNoZWNrQW5kUmVtb3ZlQ29uZGl0aW9ucygpIHsKKyAgICAgICAgaW50IGNvbmRpdGlvbnNGb3VuZCA9IDA7CisgICAgICAgIGZvciAoaW50IHkgPSAwOyB5IDwgTUFQX0hFSUdIVDsgeSsrKSB7CisgICAgICAgICAgICB3aGlsZSAoaXNDaGVja0NvbmRpdGlvbih5KSkgeworICAgICAgICAgICAgICAgICsrY29uZGl0aW9uc0ZvdW5kOworCisgICAgICAgICAgICAgICAgPHNlbGVjdGlvbj5maW5hbCBPYmplY3RbXSB0ZW1wID0gX21hcFt5XTsKKyAgICAgICAgICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHRlbXAubGVuZ3RoOyB4KyspIHsKKyAgICAgICAgICAgICAgICAgICAgdGVtcFt4XSA9IG51bGw7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGZvciAoaW50IHl5ID0geSArIDE7IHl5IDwgTUFQX0hFSUdIVDsgKyt5eSkgeworICAgICAgICAgICAgICAgICAgICBfbWFwW3l5IC0gMV0gPSBfbWFwW3l5XTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgX21hcFtNQVBfSEVJR0hUIC0gMV0gPSB0ZW1wOzwvc2VsZWN0aW9uPgorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiBjb25kaXRpb25zRm91bmQ7CisgICAgfQorCisgICAgcHJpdmF0ZSBib29sZWFuIGlzQ2hlY2tDb25kaXRpb24oaW50IHkpIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kL1NjcjcwOTFfYWZ0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kL1NjcjcwOTFfYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYTU1MjM0Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2QvU2NyNzA5MV9hZnRlci5qYXZhCkBAIC0wLDAgKzEsMzMgQEAKK3B1YmxpYyBjbGFzcyBJZGVhVGVzdEJ1ZyB7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTUFQX0hFSUdIVCA9IDEwMDA7CisKKyAgICBPYmplY3RbXVtdIF9tYXA7CisKKyAgICBwdWJsaWMgaW50IGNoZWNrQW5kUmVtb3ZlQ29uZGl0aW9ucygpIHsKKyAgICAgICAgaW50IGNvbmRpdGlvbnNGb3VuZCA9IDA7CisgICAgICAgIGZvciAoaW50IHkgPSAwOyB5IDwgTUFQX0hFSUdIVDsgeSsrKSB7CisgICAgICAgICAgICB3aGlsZSAoaXNDaGVja0NvbmRpdGlvbih5KSkgeworICAgICAgICAgICAgICAgICsrY29uZGl0aW9uc0ZvdW5kOworCisgICAgICAgICAgICAgICAgbmV3TWV0aG9kKHkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiBjb25kaXRpb25zRm91bmQ7CisgICAgfQorCisgICAgcHJpdmF0ZSB2b2lkIG5ld01ldGhvZChpbnQgeSkgeworICAgICAgICBmaW5hbCBPYmplY3RbXSB0ZW1wID0gX21hcFt5XTsKKyAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB0ZW1wLmxlbmd0aDsgeCsrKSB7CisgICAgICAgICAgICB0ZW1wW3hdID0gbnVsbDsKKyAgICAgICAgfQorICAgICAgICBmb3IgKGludCB5eSA9IHkgKyAxOyB5eSA8IE1BUF9IRUlHSFQ7ICsreXkpIHsKKyAgICAgICAgICAgIF9tYXBbeXkgLSAxXSA9IF9tYXBbeXldOworICAgICAgICB9CisgICAgICAgIF9tYXBbTUFQX0hFSUdIVCAtIDFdID0gdGVtcDsKKyAgICB9CisKKyAgICBwcml2YXRlIGJvb2xlYW4gaXNDaGVja0NvbmRpdGlvbihpbnQgeSkgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2QvU2NyOTg1Mi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2QvU2NyOTg1Mi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJlYTY5ZTQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZC9TY3I5ODUyLmphdmEKQEAgLTAsMCArMSw5IEBACitjbGFzcyBUZXN0IHsKKyAgICBpbnQgZigpIHsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIDxzZWxlY3Rpb24+aW50IGsgPSAwOworICAgICAgICAgICAgcmV0dXJuIGs7PC9zZWxlY3Rpb24+CisgICAgICAgIH0gZmluYWxseSB7CisgICAgICAgIH0KKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2QvU2NyOTg1Ml9hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2QvU2NyOTg1Ml9hZnRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVkMzAxYzUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZC9TY3I5ODUyX2FmdGVyLmphdmEKQEAgLTAsMCArMSwxMyBAQAorY2xhc3MgVGVzdCB7CisgICAgaW50IGYoKSB7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICByZXR1cm4gbmV3TWV0aG9kKCk7CisgICAgICAgIH0gZmluYWxseSB7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwcml2YXRlIGludCBuZXdNZXRob2QoKSB7CisgICAgICAgIGludCBrID0gMDsKKyAgICAgICAgcmV0dXJuIGs7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kL1Nob3J0Q2lyY3VpdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2QvU2hvcnRDaXJjdWl0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY5ZTczMwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kL1Nob3J0Q2lyY3VpdC5qYXZhCkBAIC0wLDAgKzEsNiBAQAorcHVibGljIGNsYXNzIFRlc3QgeworICB2b2lkIGZvbyhTdHJpbmcgY29udGFpbmVyKSB7CisgICAgPHNlbGVjdGlvbj5TdHJpbmcgcGFyZW50OworICAgIGlmIChjb250YWluZXIgPT0gbnVsbCAmJiAocGFyZW50ID0gbnVsbCkgIT0gbnVsbCAmJiBwYXJlbnQgIT0gbnVsbCkge308L3NlbGVjdGlvbj4KKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kL1Nob3J0Q2lyY3VpdF9hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2QvU2hvcnRDaXJjdWl0X2FmdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjNkNzU0NQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kL1Nob3J0Q2lyY3VpdF9hZnRlci5qYXZhCkBAIC0wLDAgKzEsMTAgQEAKK3B1YmxpYyBjbGFzcyBUZXN0IHsKKyAgdm9pZCBmb28oU3RyaW5nIGNvbnRhaW5lcikgeworICAgICAgbmV3TWV0aG9kKGNvbnRhaW5lcik7CisgIH0KKworICAgIHByaXZhdGUgdm9pZCBuZXdNZXRob2QoU3RyaW5nIGNvbnRhaW5lcikgeworICAgICAgICBTdHJpbmcgcGFyZW50OworICAgICAgICBpZiAoY29udGFpbmVyID09IG51bGwgJiYgKHBhcmVudCA9IG51bGwpICE9IG51bGwgJiYgcGFyZW50ICE9IG51bGwpIHt9CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kL1NpbXBsZUFycmF5QWNjZXNzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZC9TaW1wbGVBcnJheUFjY2Vzcy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhhOGI4NWYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZC9TaW1wbGVBcnJheUFjY2Vzcy5qYXZhCkBAIC0wLDAgKzEsNSBAQAorY2xhc3MgVGVzdCB7CisgIHZvaWQgZm9vKFN0cmluZ1tdIHNzKSB7CisgICAgPHNlbGVjdGlvbj5TeXN0ZW0ub3V0LnByaW50bG4oc3NbMF0pOzwvc2VsZWN0aW9uPgorICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2QvU2ltcGxlQXJyYXlBY2Nlc3NfYWZ0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kL1NpbXBsZUFycmF5QWNjZXNzX2FmdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzFlMGIyNwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kL1NpbXBsZUFycmF5QWNjZXNzX2FmdGVyLmphdmEKQEAgLTAsMCArMSw5IEBACitjbGFzcyBUZXN0IHsKKyAgdm9pZCBmb28oU3RyaW5nW10gc3MpIHsKKyAgICAgIG5ld01ldGhvZChzc1swXSk7CisgIH0KKworICAgIHByaXZhdGUgdm9pZCBuZXdNZXRob2QoU3RyaW5nIHMpIHsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKHMpOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZC9Ta2lwQ29tbWVudHMuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kL1NraXBDb21tZW50cy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY3MzI2YzkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZC9Ta2lwQ29tbWVudHMuamF2YQpAQCAtMCwwICsxLDUgQEAKK2NsYXNzIFRlc3QgeworICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisgICAgU3RyaW5nIGFyZyA9IDxzZWxlY3Rpb24+YXJnc1swXTsgICAvL2NvbW1lbnQ8L3NlbGVjdGlvbj4KKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kL1NraXBDb21tZW50c19hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2QvU2tpcENvbW1lbnRzX2FmdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDFjOGMzZAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kL1NraXBDb21tZW50c19hZnRlci5qYXZhCkBAIC0wLDAgKzEsOSBAQAorY2xhc3MgVGVzdCB7CisgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKyAgICBTdHJpbmcgYXJnID0gbmV3TWV0aG9kKGFyZ3NbMF0pOyAgIC8vY29tbWVudAorICB9CisKKyAgICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgbmV3TWV0aG9kKFN0cmluZyBhcmcpIHsKKyAgICAgICAgcmV0dXJuIGFyZzsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2QvU3RhdGljSW1wb3J0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZC9TdGF0aWNJbXBvcnQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYzc5ZGQ4Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2QvU3RhdGljSW1wb3J0LmphdmEKQEAgLTAsMCArMSw3IEBACitpbXBvcnQgc3RhdGljIGphdmEubGFuZy5JbnRlZ2VyLk1BWF9WQUxVRTsKKworY2xhc3MgU3RhdGljSW1wb3J0IHsKKyAgICB2b2lkIHRlc3QoKSB7CisgICAgICAgIDxzZWxlY3Rpb24+U3lzdGVtLm91dC5wcmludGxuKE1BWF9WQUxVRSk7PC9zZWxlY3Rpb24+CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kL1N0YXRpY0ltcG9ydF9hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2QvU3RhdGljSW1wb3J0X2FmdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2YyNGMwZgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kL1N0YXRpY0ltcG9ydF9hZnRlci5qYXZhCkBAIC0wLDAgKzEsMTEgQEAKK2ltcG9ydCBzdGF0aWMgamF2YS5sYW5nLkludGVnZXIuTUFYX1ZBTFVFOworCitjbGFzcyBTdGF0aWNJbXBvcnQgeworICAgIHZvaWQgdGVzdCgpIHsKKyAgICAgICAgbmV3TWV0aG9kKCk7CisgICAgfQorCisgICAgcHJpdmF0ZSB2b2lkIG5ld01ldGhvZCgpIHsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKE1BWF9WQUxVRSk7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kL1N0b3BGb2xkaW5nLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZC9TdG9wRm9sZGluZy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI0Y2EyZGMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZC9TdG9wRm9sZGluZy5qYXZhCkBAIC0wLDAgKzEsNTUgQEAKK2NsYXNzIEEgeworICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKyAgICAgICAgU3RhdERlc2NyaXB0b3JbXSBhbGxTdGF0TWVtYmVycyA9IG5ldyBTdGF0RGVzY3JpcHRvcltdIHt9OworICAgICAgICBXU1N0YXRzW10gYWxsU3RhdHMgPSBuZXcgV1NTdGF0c1tdIHt9OworCisgICAgICAgIFN0cmluZ0J1ZmZlciBzYiA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKKyAgICAgICAgc2IuYXBwZW5kKCJBbGwgc3RhdCBtZW1iZXJzIGZvdW5kOlxuIik7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYWxsU3RhdE1lbWJlcnMubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgIFN0YXREZXNjcmlwdG9yIHN0YXRNZW1iZXIgPSBhbGxTdGF0TWVtYmVyc1tpXTsKKworICAgICAgICAgICAgPHNlbGVjdGlvbj4KKyAgICAgICAgICAgIHNiLmFwcGVuZChzdGF0TWVtYmVyLnRvU3RyaW5nKCkpOworCisgICAgICAgICAgICBzYi5hcHBlbmQoIjogWyIpOworCisgICAgICAgICAgICBXU1N0YXRpc3RpY1tdIHN0YXRpc3RpY3MgPSBhbGxTdGF0c1tpXS5nZXRTdGF0aXN0aWNzKCk7CisgICAgICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IHN0YXRpc3RpY3MubGVuZ3RoOyBqKyspIHsKKyAgICAgICAgICAgICAgICBXU1N0YXRpc3RpYyBzdGF0aXN0aWMgPSBzdGF0aXN0aWNzW2pdOworICAgICAgICAgICAgICAgIHNiLmFwcGVuZChzdGF0aXN0aWMuZ2V0SWQoKSkuCisgICAgICAgICAgICAgICAgICAgICAgICBhcHBlbmQoJz0nKS4KKyAgICAgICAgICAgICAgICAgICAgICAgIGFwcGVuZChzdGF0aXN0aWMuZ2V0TmFtZSgpKTsKKyAgICAgICAgICAgICAgICBpZiAoaiA8IHN0YXRpc3RpY3MubGVuZ3RoIC0gMSkgeworICAgICAgICAgICAgICAgICAgICBzYi5hcHBlbmQoIiwgIik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBzYi5hcHBlbmQoIl1cbiIpOworICAgICAgICAgICAgPC9zZWxlY3Rpb24+CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwcml2YXRlIGNsYXNzIFN0YXREZXNjcmlwdG9yIHsKKyAgICB9CisKKyAgICBwcml2YXRlIGNsYXNzIFdTU3RhdGlzdGljIHsKKyAgICAgICAgcHJpdmF0ZSBPYmplY3QgaWQ7CisgICAgICAgIHByaXZhdGUgU3RyaW5nIG5hbWU7CisKKyAgICAgICAgcHVibGljIE9iamVjdCBnZXRJZCgpIHsKKyAgICAgICAgICAgIHJldHVybiBpZDsKKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyBTdHJpbmcgZ2V0TmFtZSgpIHsKKyAgICAgICAgICAgIHJldHVybiBuYW1lOworICAgICAgICB9CisgICAgfQorCisgICAgcHJpdmF0ZSBjbGFzcyBXU1N0YXRzIHsKKyAgICAgICAgcHJpdmF0ZSBXU1N0YXRpc3RpY1tdIHN0YXRpc3RpY3M7CisKKyAgICAgICAgcHVibGljIFdTU3RhdGlzdGljW10gZ2V0U3RhdGlzdGljcygpIHsKKyAgICAgICAgICAgIHJldHVybiBzdGF0aXN0aWNzOworICAgICAgICB9CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kL1N0b3BGb2xkaW5nUG9zdGZpeEluc2lkZS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2QvU3RvcEZvbGRpbmdQb3N0Zml4SW5zaWRlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDViZjMyMgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kL1N0b3BGb2xkaW5nUG9zdGZpeEluc2lkZS5qYXZhCkBAIC0wLDAgKzEsMTAgQEAKK3B1YmxpYyBjbGFzcyBEZXZrIHsKKworICAgIHZvaWQgZnIoU3RyaW5nLi4uIHBhcmFtcyApIHsKKyAgICAgICAgaW50IGlkeCA9IDA7CisgICAgICAgIDxzZWxlY3Rpb24+U3lzdGVtLm91dC5wcmludGxuKHBhcmFtc1tpZHgrK10pOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4ocGFyYW1zW2lkeCsrXSk7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihwYXJhbXNbaWR4KytdKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKHBhcmFtc1tpZHgrK10pOzwvc2VsZWN0aW9uPgorICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZC9TdG9wRm9sZGluZ1Bvc3RmaXhJbnNpZGVfYWZ0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kL1N0b3BGb2xkaW5nUG9zdGZpeEluc2lkZV9hZnRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRlNjI5ZWMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZC9TdG9wRm9sZGluZ1Bvc3RmaXhJbnNpZGVfYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDE0IEBACitwdWJsaWMgY2xhc3MgRGV2ayB7CisKKyAgICB2b2lkIGZyKFN0cmluZy4uLiBwYXJhbXMgKSB7CisgICAgICAgIGludCBpZHggPSAwOworICAgICAgICBuZXdNZXRob2QoaWR4LCBwYXJhbXMpOworICAgIH0KKworICAgIHByaXZhdGUgdm9pZCBuZXdNZXRob2QoaW50IGlkeCwgU3RyaW5nW10gcGFyYW1zKSB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihwYXJhbXNbaWR4KytdKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKHBhcmFtc1tpZHgrK10pOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4ocGFyYW1zW2lkeCsrXSk7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihwYXJhbXNbaWR4KytdKTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2QvU3RvcEZvbGRpbmdfYWZ0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kL1N0b3BGb2xkaW5nX2FmdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGUxYWM4NAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kL1N0b3BGb2xkaW5nX2FmdGVyLmphdmEKQEAgLTAsMCArMSw1OSBAQAorY2xhc3MgQSB7CisgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworICAgICAgICBTdGF0RGVzY3JpcHRvcltdIGFsbFN0YXRNZW1iZXJzID0gbmV3IFN0YXREZXNjcmlwdG9yW10ge307CisgICAgICAgIFdTU3RhdHNbXSBhbGxTdGF0cyA9IG5ldyBXU1N0YXRzW10ge307CisKKyAgICAgICAgU3RyaW5nQnVmZmVyIHNiID0gbmV3IFN0cmluZ0J1ZmZlcigpOworICAgICAgICBzYi5hcHBlbmQoIkFsbCBzdGF0IG1lbWJlcnMgZm91bmQ6XG4iKTsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBhbGxTdGF0TWVtYmVycy5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgU3RhdERlc2NyaXB0b3Igc3RhdE1lbWJlciA9IGFsbFN0YXRNZW1iZXJzW2ldOworCisKKyAgICAgICAgICAgIG5ld01ldGhvZChhbGxTdGF0c1tpXSwgc2IsIHN0YXRNZW1iZXIpOworICAgICAgICAgICAgCisgICAgICAgIH0KKyAgICB9CisKKyAgICBwcml2YXRlIHN0YXRpYyB2b2lkIG5ld01ldGhvZChXU1N0YXRzIGFsbFN0YXQsIFN0cmluZ0J1ZmZlciBzYiwgU3RhdERlc2NyaXB0b3Igc3RhdE1lbWJlcikgeworICAgICAgICBzYi5hcHBlbmQoc3RhdE1lbWJlci50b1N0cmluZygpKTsKKworICAgICAgICBzYi5hcHBlbmQoIjogWyIpOworCisgICAgICAgIFdTU3RhdGlzdGljW10gc3RhdGlzdGljcyA9IGFsbFN0YXQuZ2V0U3RhdGlzdGljcygpOworICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IHN0YXRpc3RpY3MubGVuZ3RoOyBqKyspIHsKKyAgICAgICAgICAgIFdTU3RhdGlzdGljIHN0YXRpc3RpYyA9IHN0YXRpc3RpY3Nbal07CisgICAgICAgICAgICBzYi5hcHBlbmQoc3RhdGlzdGljLmdldElkKCkpLgorICAgICAgICAgICAgICAgICAgICBhcHBlbmQoJz0nKS4KKyAgICAgICAgICAgICAgICAgICAgYXBwZW5kKHN0YXRpc3RpYy5nZXROYW1lKCkpOworICAgICAgICAgICAgaWYgKGogPCBzdGF0aXN0aWNzLmxlbmd0aCAtIDEpIHsKKyAgICAgICAgICAgICAgICBzYi5hcHBlbmQoIiwgIik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBzYi5hcHBlbmQoIl1cbiIpOworICAgIH0KKworICAgIHByaXZhdGUgY2xhc3MgU3RhdERlc2NyaXB0b3IgeworICAgIH0KKworICAgIHByaXZhdGUgY2xhc3MgV1NTdGF0aXN0aWMgeworICAgICAgICBwcml2YXRlIE9iamVjdCBpZDsKKyAgICAgICAgcHJpdmF0ZSBTdHJpbmcgbmFtZTsKKworICAgICAgICBwdWJsaWMgT2JqZWN0IGdldElkKCkgeworICAgICAgICAgICAgcmV0dXJuIGlkOworICAgICAgICB9CisKKyAgICAgICAgcHVibGljIFN0cmluZyBnZXROYW1lKCkgeworICAgICAgICAgICAgcmV0dXJuIG5hbWU7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwcml2YXRlIGNsYXNzIFdTU3RhdHMgeworICAgICAgICBwcml2YXRlIFdTU3RhdGlzdGljW10gc3RhdGlzdGljczsKKworICAgICAgICBwdWJsaWMgV1NTdGF0aXN0aWNbXSBnZXRTdGF0aXN0aWNzKCkgeworICAgICAgICAgICAgcmV0dXJuIHN0YXRpc3RpY3M7CisgICAgICAgIH0KKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2QvVGhpc0NhbGwuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kL1RoaXNDYWxsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTYzYmNhZAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kL1RoaXNDYWxsLmphdmEKQEAgLTAsMCArMSw4IEBACitwdWJsaWMgY2xhc3MgQSB7CisgICAgQShTdHJpbmcgcykgeworICAgIH0KKworICAgIEEoKSB7CisgICAgICAgIHRoaXMoPHNlbGVjdGlvbj4iYSI8L3NlbGVjdGlvbj4pOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZC9UaGlzQ2FsbF9hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2QvVGhpc0NhbGxfYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMzBkYjgyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2QvVGhpc0NhbGxfYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDEyIEBACitwdWJsaWMgY2xhc3MgQSB7CisgICAgQShTdHJpbmcgcykgeworICAgIH0KKworICAgIEEoKSB7CisgICAgICAgIHRoaXMobmV3TWV0aG9kKCkpOworICAgIH0KKworICAgIHByaXZhdGUgc3RhdGljIFN0cmluZyBuZXdNZXRob2QoKSB7CisgICAgICAgIHJldHVybiAiYSI7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kL1RyeUZpbmFsbHkuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kL1RyeUZpbmFsbHkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYTYzM2U0Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2QvVHJ5RmluYWxseS5qYXZhCkBAIC0wLDAgKzEsMTMgQEAKK2NsYXNzIFRyeUZpbmFsbHkgeworICAgIGludCBtZXRob2QoKSB7CisgICAgICAgIFN0cmluZyBzID0gImFiY2QiOworICAgICAKKyAgICAgICAgPHNlbGVjdGlvbj5TdHJpbmdCdWZmZXIgYnVmZmVyID0gbmV3IFN0cmluZ0J1ZmZlcigpOworICAgICAgICB0cnkgeworICAgICAgICAgICAgYnVmZmVyLmFwcGVuZChzKTsKKyAgICAgICAgICAgIHJldHVybiBidWZmZXIubGVuZ3RoKCk7CisgICAgICAgIH0gZmluYWxseSB7CisgICAgICAgICAgICBidWZmZXIuY2xlYXIoKTsKKyAgICAgICAgfTwvc2VsZWN0aW9uPgorICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZC9UcnlGaW5hbGx5SW5zaWRlRm9yLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZC9UcnlGaW5hbGx5SW5zaWRlRm9yLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDZlOTMwNQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kL1RyeUZpbmFsbHlJbnNpZGVGb3IuamF2YQpAQCAtMCwwICsxLDE3IEBACitwYWNrYWdlIGV4dHJhY3RNZXRob2Q7CisKK2ltcG9ydCBqYXZhLmlvLio7CitpbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOworCitwdWJsaWMgY2xhc3MgU0NSMjc4ODcgeworICAgIHB1YmxpYyBpbnQgcHVibGlzaHgoT3V0cHV0U3RyZWFtIG91dCwgYm9vbGVhbiBpbmNsdWRlQ29kZSkgdGhyb3dzIElPRXhjZXB0aW9uIHsKKyAgICAgICAgPHNlbGVjdGlvbj5TY2F0dGVyaW5nRG9jQnVpbGRlciBkb2NCdWlsZGVyID0gbmV3IE15RG9jQnVpbGRlcihyZXBvc2l0b3J5LCBpbmNsdWRlZCk7PC9zZWxlY3Rpb24+CisgICAgICAgIHdoaWxlKHRydWUpeworICAgICAgICAgIE91dHB1dFN0cmVhbSBvcyA9IG51bGw7CisgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICB9IGZpbmFsbHkgeworICAgICAgICAgICAgb3MuY2xvc2UoKTsKKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZC9UcnlGaW5hbGx5SW5zaWRlRm9yX2FmdGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZC9UcnlGaW5hbGx5SW5zaWRlRm9yX2FmdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWI1Y2Q5NwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kL1RyeUZpbmFsbHlJbnNpZGVGb3JfYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDIxIEBACitwYWNrYWdlIGV4dHJhY3RNZXRob2Q7CisKK2ltcG9ydCBqYXZhLmlvLio7CitpbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOworCitwdWJsaWMgY2xhc3MgU0NSMjc4ODcgeworICAgIHB1YmxpYyBpbnQgcHVibGlzaHgoT3V0cHV0U3RyZWFtIG91dCwgYm9vbGVhbiBpbmNsdWRlQ29kZSkgdGhyb3dzIElPRXhjZXB0aW9uIHsKKyAgICAgICAgbmV3TWV0aG9kKCk7CisgICAgICAgIHdoaWxlKHRydWUpeworICAgICAgICAgIE91dHB1dFN0cmVhbSBvcyA9IG51bGw7CisgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICB9IGZpbmFsbHkgeworICAgICAgICAgICAgb3MuY2xvc2UoKTsKKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwcml2YXRlIHZvaWQgbmV3TWV0aG9kKCkgeworICAgICAgICBTY2F0dGVyaW5nRG9jQnVpbGRlciBkb2NCdWlsZGVyID0gbmV3IE15RG9jQnVpbGRlcihyZXBvc2l0b3J5LCBpbmNsdWRlZCk7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2QvVHJ5RmluYWxseV9hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2QvVHJ5RmluYWxseV9hZnRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI0YjcxMTIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZC9UcnlGaW5hbGx5X2FmdGVyLmphdmEKQEAgLTAsMCArMSwxNyBAQAorY2xhc3MgVHJ5RmluYWxseSB7CisgICAgaW50IG1ldGhvZCgpIHsKKyAgICAgICAgU3RyaW5nIHMgPSAiYWJjZCI7CisKKyAgICAgICAgcmV0dXJuIG5ld01ldGhvZChzKTsKKyAgICB9CisKKyAgICBwcml2YXRlIGludCBuZXdNZXRob2QoU3RyaW5nIHMpIHsKKyAgICAgICAgU3RyaW5nQnVmZmVyIGJ1ZmZlciA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIGJ1ZmZlci5hcHBlbmQocyk7CisgICAgICAgICAgICByZXR1cm4gYnVmZmVyLmxlbmd0aCgpOworICAgICAgICB9IGZpbmFsbHkgeworICAgICAgICAgICAgYnVmZmVyLmNsZWFyKCk7CisgICAgICAgIH0KKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2QvVHdvRnJvbVRocmVlRXFTdGF0ZW1lbnRzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZC9Ud29Gcm9tVGhyZWVFcVN0YXRlbWVudHMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYmU3MzU1Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2QvVHdvRnJvbVRocmVlRXFTdGF0ZW1lbnRzLmphdmEKQEAgLTAsMCArMSw4IEBACitjbGFzcyBUZXN0IHsKKworICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKyAgICAgICAgPHNlbGVjdGlvbj5TeXN0ZW0ub3V0LnByaW50bG4oImhlbGxvIik7CisgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJoZWxsbyIpOzwvc2VsZWN0aW9uPgorICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiaGVsbG8iKTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2QvVHdvRnJvbVRocmVlRXFTdGF0ZW1lbnRzX2FmdGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZC9Ud29Gcm9tVGhyZWVFcVN0YXRlbWVudHNfYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYjFiYzI4Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2QvVHdvRnJvbVRocmVlRXFTdGF0ZW1lbnRzX2FmdGVyLmphdmEKQEAgLTAsMCArMSwxMiBAQAorY2xhc3MgVGVzdCB7CisKKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisgICAgICAgIG5ld01ldGhvZCgpOworICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiaGVsbG8iKTsKKyAgICB9CisKKyAgICBwcml2YXRlIHN0YXRpYyB2b2lkIG5ld01ldGhvZCgpIHsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJoZWxsbyIpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImhlbGxvIik7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kL1R5cGVQYXJhbXNMaXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZC9UeXBlUGFyYW1zTGlzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU3NTJmYmYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZC9UeXBlUGFyYW1zTGlzdC5qYXZhCkBAIC0wLDAgKzEsMTEgQEAKK2NsYXNzIFRlc3QgeworICBwcm90ZWN0ZWQgPFQ+IHZvaWQgYXBwbHlDaGFuZ2VzKGZpbmFsIFQgdmFyaWFibGUpIHsKKyAgICAgICAgICAgICAgICAgbmV3IFJ1bm5hYmxlKCkgeworICAgICAgICAgICAgICAgICAgICAgQE92ZXJyaWRlCisgICAgICAgICAgICAgICAgICAgICBwdWJsaWMgdm9pZCBydW4oKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgPHNlbGVjdGlvbj5TeXN0ZW0ub3V0LnByaW50bG4odmFyaWFibGUpOzwvc2VsZWN0aW9uPgorICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICB9CisgICAgICAgICA7CisgICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZC9UeXBlUGFyYW1zTGlzdF9hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2QvVHlwZVBhcmFtc0xpc3RfYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YzU0NWI4Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2QvVHlwZVBhcmFtc0xpc3RfYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDE1IEBACitjbGFzcyBUZXN0IHsKKyAgcHJvdGVjdGVkIDxUPiB2b2lkIGFwcGx5Q2hhbmdlcyhmaW5hbCBUIHZhcmlhYmxlKSB7CisgICAgICAgICAgICAgICAgIG5ldyBSdW5uYWJsZSgpIHsKKyAgICAgICAgICAgICAgICAgICAgIEBPdmVycmlkZQorICAgICAgICAgICAgICAgICAgICAgcHVibGljIHZvaWQgcnVuKCkgeworICAgICAgICAgICAgICAgICAgICAgICAgIG5ld01ldGhvZCh2YXJpYWJsZSk7CisgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgIDsKKyAgICAgfQorCisgICAgcHJpdmF0ZSA8VD4gdm9pZCBuZXdNZXRob2QoVCB2YXJpYWJsZSkgeworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4odmFyaWFibGUpOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZC9VbnVzZWRHZW5lcmljcy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2QvVW51c2VkR2VuZXJpY3MuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ODgyZDU0Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2QvVW51c2VkR2VuZXJpY3MuamF2YQpAQCAtMCwwICsxLDYgQEAKK2NsYXNzIFRlc3QgeworICBwdWJsaWMgPFQ+IFQgbWV0aG9kKENsYXNzPFQ+IGNsYXp6KSB7CisgICAgPHNlbGVjdGlvbj5TeXN0ZW0ub3V0LnByaW50bG4oKTs8L3NlbGVjdGlvbj4KKyAgICByZXR1cm4gbnVsbDsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kL1VudXNlZEdlbmVyaWNzX2FmdGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZC9VbnVzZWRHZW5lcmljc19hZnRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU5MTg1MTkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZC9VbnVzZWRHZW5lcmljc19hZnRlci5qYXZhCkBAIC0wLDAgKzEsMTAgQEAKK2NsYXNzIFRlc3QgeworICBwdWJsaWMgPFQ+IFQgbWV0aG9kKENsYXNzPFQ+IGNsYXp6KSB7CisgICAgICBuZXdNZXRob2QoKTsKKyAgICAgIHJldHVybiBudWxsOworICB9CisKKyAgICBwcml2YXRlIHZvaWQgbmV3TWV0aG9kKCkgeworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oKTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2QvVW51c2VkSW5pdGlhbGl6ZWRWYXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kL1VudXNlZEluaXRpYWxpemVkVmFyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDVhNWQ2MwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kL1VudXNlZEluaXRpYWxpemVkVmFyLmphdmEKQEAgLTAsMCArMSwxNCBAQAorY2xhc3MgRm9vIHsKKyAgICBwcml2YXRlIHZvaWQgYmFyKCkgeworICAgICAgICBTdHJpbmcgdGV4dCA9IG51bGw7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICA8c2VsZWN0aW9uPnRleHQgPSBnZXRTdHJpbmcoKTs8L3NlbGVjdGlvbj4KKyAgICAgICAgfQorICAgICAgICBjYXRjaChFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKHRleHQpOworICAgICAgICB9CisgICAgfQorICAgIHByaXZhdGUgdm9pZCBnZXRTdHJpbmcoKSB7CisgICAgICAgIHJldHVybiAiaGVsbG8iOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZC9VbnVzZWRJbml0aWFsaXplZFZhcl9hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2QvVW51c2VkSW5pdGlhbGl6ZWRWYXJfYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNjk1NGM4Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2QvVW51c2VkSW5pdGlhbGl6ZWRWYXJfYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDIxIEBACitjbGFzcyBGb28geworICAgIHByaXZhdGUgdm9pZCBiYXIoKSB7CisgICAgICAgIFN0cmluZyB0ZXh0ID0gbnVsbDsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIHRleHQgPSBuZXdNZXRob2QoKTsKKyAgICAgICAgfQorICAgICAgICBjYXRjaChFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKHRleHQpOworICAgICAgICB9CisgICAgfQorCisgICAgcHJpdmF0ZSBTdHJpbmcgbmV3TWV0aG9kKCkgeworICAgICAgICBTdHJpbmcgdGV4dDsKKyAgICAgICAgdGV4dCA9IGdldFN0cmluZygpOworICAgICAgICByZXR1cm4gdGV4dDsKKyAgICB9CisKKyAgICBwcml2YXRlIHZvaWQgZ2V0U3RyaW5nKCkgeworICAgICAgICByZXR1cm4gImhlbGxvIjsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2QvVXNlVmFyQWZ0ZXJUcnkuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kL1VzZVZhckFmdGVyVHJ5LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDY5OTIzNgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kL1VzZVZhckFmdGVyVHJ5LmphdmEKQEAgLTAsMCArMSwxMyBAQAorY2xhc3MgQSB7CisgICAgeworICAgICAgICBPYmplY3QgbzsKKworICAgICAgICB0cnkgeworICAgICAgICAgICAgPHNlbGVjdGlvbj5vID0gZm9vKCk7PC9zZWxlY3Rpb24+CisgICAgICAgIH0KKyAgICAgICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgIH0KKworICAgICAgICBvLmYoKTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2QvVXNlVmFyQWZ0ZXJUcnlfYWZ0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kL1VzZVZhckFmdGVyVHJ5X2FmdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDViM2I4OQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kL1VzZVZhckFmdGVyVHJ5X2FmdGVyLmphdmEKQEAgLTAsMCArMSwxOSBAQAorY2xhc3MgQSB7CisgICAgeworICAgICAgICBPYmplY3QgbzsKKworICAgICAgICB0cnkgeworICAgICAgICAgICAgbyA9IG5ld01ldGhvZCgpOworICAgICAgICB9CisgICAgICAgIGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgICAgICB9CisKKyAgICAgICAgby5mKCk7CisgICAgfQorCisgICAgcHJpdmF0ZSBPYmplY3QgbmV3TWV0aG9kKCkgeworICAgICAgICBPYmplY3QgbzsKKyAgICAgICAgbyA9IGZvbygpOworICAgICAgICByZXR1cm4gbzsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2QvVmFyRGVjbEFmdGVyRXhwcmVzc2lvbkV4dHJhY3Rpb24uamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kL1ZhckRlY2xBZnRlckV4cHJlc3Npb25FeHRyYWN0aW9uLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTc1N2M0NAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kL1ZhckRlY2xBZnRlckV4cHJlc3Npb25FeHRyYWN0aW9uLmphdmEKQEAgLTAsMCArMSwzNCBAQAorY2xhc3MgQmFzaWNMYXp5UmVzb2x2ZVRlc3QgeworCisKKyAgICBwdWJsaWMgdm9pZCB0ZXN0KCkgeworCisgICAgICAgIE9iamVjdCBzZXNzaW9uID0gPHNlbGVjdGlvbj5uZXcgT2JqZWN0KCkgeworCisvKgorICAgICAgICAgICAgcHVibGljIENsYXNzTWVtYmVyRGVjbGFyYXRpb25Qcm92aWRlciBnZXRDbGFzc01lbWJlckRlY2xhcmF0aW9uUHJvdmlkZXIoSmV0Q2xhc3MgamV0Q2xhc3NPck9iamVjdCkgeworICAgICAgICAgICAgICAgIGZpbmFsIEpldENsYXNzIGpldENsYXNzID0gKEpldENsYXNzKSBqZXRDbGFzc09yT2JqZWN0OworICAgICAgICAgICAgICAgIHJldHVybiBuZXcgQ2xhc3NNZW1iZXJEZWNsYXJhdGlvblByb3ZpZGVyKCkgeyovCisKKworICAgICAgICAgICAgICAgICAgICAvKiAgICAgcHJpdmF0ZSA8RCwgVCBleHRlbmRzIEpldE5hbWVkPiBMaXN0PFQ+IGZpbHRlcihMaXN0PEQ+IGxpc3QsIGZpbmFsIENsYXNzPFQ+IHQsIGZpbmFsIE5hbWUgbmFtZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgLy9ub2luc3BlY3Rpb24gdW5jaGVja2VkCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKExpc3QpIExpc3RzLm5ld0FycmF5TGlzdChDb2xsZWN0aW9uczIuZmlsdGVyKGxpc3QsIG5ldyBQcmVkaWNhdGU8RD4oKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQE92ZXJyaWRlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVibGljIGJvb2xlYW4gYXBwbHkoRCBkKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0LmlzSW5zdGFuY2UoZCkgJiYgKChKZXROYW1lZCkgZCkuZ2V0TmFtZUFzTmFtZSgpLmVxdWFscyhuYW1lKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9KSk7CisgICAgICAgICAgICAgICAgICAgIH0qLworCisKKyAgICAgICAgICAgICAvKiAgIH07CisgICAgICAgICAgICB9Ki8KKyAgICAgICAgfTwvc2VsZWN0aW9uPjsKKworICAgICAgICBTdHJpbmcgcGFja2FnZURlc2NyaXB0b3IgPSBzZXNzaW9uLnRvU3RyaW5nKCk7CisKKyAgICB9CisKKworfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2QvVmFyRGVjbEFmdGVyRXhwcmVzc2lvbkV4dHJhY3Rpb25fYWZ0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kL1ZhckRlY2xBZnRlckV4cHJlc3Npb25FeHRyYWN0aW9uX2FmdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2I3YWVmZgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kL1ZhckRlY2xBZnRlckV4cHJlc3Npb25FeHRyYWN0aW9uX2FmdGVyLmphdmEKQEAgLTAsMCArMSwzOCBAQAorY2xhc3MgQmFzaWNMYXp5UmVzb2x2ZVRlc3QgeworCisKKyAgICBwdWJsaWMgdm9pZCB0ZXN0KCkgeworCisgICAgICAgIE9iamVjdCBzZXNzaW9uID0gbmV3TWV0aG9kKCk7CisKKyAgICAgICAgU3RyaW5nIHBhY2thZ2VEZXNjcmlwdG9yID0gc2Vzc2lvbi50b1N0cmluZygpOworCisgICAgfQorCisgICAgcHJpdmF0ZSBPYmplY3QgbmV3TWV0aG9kKCkgeworICAgICAgICByZXR1cm4gbmV3IE9iamVjdCgpIHsKKworLyoKKyAgICAgICAgICAgIHB1YmxpYyBDbGFzc01lbWJlckRlY2xhcmF0aW9uUHJvdmlkZXIgZ2V0Q2xhc3NNZW1iZXJEZWNsYXJhdGlvblByb3ZpZGVyKEpldENsYXNzIGpldENsYXNzT3JPYmplY3QpIHsKKyAgICAgICAgICAgICAgICBmaW5hbCBKZXRDbGFzcyBqZXRDbGFzcyA9IChKZXRDbGFzcykgamV0Q2xhc3NPck9iamVjdDsKKyAgICAgICAgICAgICAgICByZXR1cm4gbmV3IENsYXNzTWVtYmVyRGVjbGFyYXRpb25Qcm92aWRlcigpIHsqLworCisKKyAgICAgICAgICAgICAgICAgICAgLyogICAgIHByaXZhdGUgPEQsIFQgZXh0ZW5kcyBKZXROYW1lZD4gTGlzdDxUPiBmaWx0ZXIoTGlzdDxEPiBsaXN0LCBmaW5hbCBDbGFzczxUPiB0LCBmaW5hbCBOYW1lIG5hbWUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vbm9pbnNwZWN0aW9uIHVuY2hlY2tlZAorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChMaXN0KSBMaXN0cy5uZXdBcnJheUxpc3QoQ29sbGVjdGlvbnMyLmZpbHRlcihsaXN0LCBuZXcgUHJlZGljYXRlPEQ+KCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBPdmVycmlkZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1YmxpYyBib29sZWFuIGFwcGx5KEQgZCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdC5pc0luc3RhbmNlKGQpICYmICgoSmV0TmFtZWQpIGQpLmdldE5hbWVBc05hbWUoKS5lcXVhbHMobmFtZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfSkpOworICAgICAgICAgICAgICAgICAgICB9Ki8KKworCisgICAgICAgICAgICAgLyogICB9OworICAgICAgICAgICAgfSovCisgICAgICAgIH07CisgICAgfQorCisKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kL1ZlcmJvc2VBcnJheUFjY2Vzcy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2QvVmVyYm9zZUFycmF5QWNjZXNzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2I4YzA2ZAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kL1ZlcmJvc2VBcnJheUFjY2Vzcy5qYXZhCkBAIC0wLDAgKzEsMTAgQEAKK2NsYXNzIFRlc3QgeworICB2b2lkIGZvbyhTdHJpbmdbXSBzcykgeworICAgICBmb3IoaW50IGkgPSAwOyBpIDwgc3MubGVuZ3RoOyBpKyspIHsKKyAgICAgICA8c2VsZWN0aW9uPgorICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihzc1tpXSk7CisgICAgICAgU3lzdGVtLm91dC5wcmludGxuKHNzW2krMV0pOworICAgICAgIDwvc2VsZWN0aW9uPgorICAgICB9CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZC9WZXJib3NlQXJyYXlBY2Nlc3NfYWZ0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kL1ZlcmJvc2VBcnJheUFjY2Vzc19hZnRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg0ZjU4ZTYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZC9WZXJib3NlQXJyYXlBY2Nlc3NfYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDE0IEBACitjbGFzcyBUZXN0IHsKKyAgdm9pZCBmb28oU3RyaW5nW10gc3MpIHsKKyAgICAgZm9yKGludCBpID0gMDsgaSA8IHNzLmxlbmd0aDsgaSsrKSB7CisKKyAgICAgICAgIG5ld01ldGhvZChzcywgaSk7CisgICAgICAgCisgICAgIH0KKyAgfQorCisgICAgcHJpdmF0ZSB2b2lkIG5ld01ldGhvZChTdHJpbmdbXSBzcywgaW50IGkpIHsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKHNzW2ldKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKHNzW2krMV0pOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZC9Xcml0ZUFycmF5QWNjZXNzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZC9Xcml0ZUFycmF5QWNjZXNzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzlhMzhmNwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kL1dyaXRlQXJyYXlBY2Nlc3MuamF2YQpAQCAtMCwwICsxLDcgQEAKK2NsYXNzIFRlc3QgeworICB2b2lkIGZvbyhTdHJpbmdbXSBzcykgeworICAgICBmb3IoaW50IGkgPSAwOyBpIDwgc3MubGVuZ3RoOyBpKyspIHsKKyAgICAgICA8c2VsZWN0aW9uPnNzW2ldID0gIiI7PC9zZWxlY3Rpb24+CisgICAgIH0KKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kL1dyaXRlQXJyYXlBY2Nlc3NfYWZ0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kL1dyaXRlQXJyYXlBY2Nlc3NfYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYzBlMTE3Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2QvV3JpdGVBcnJheUFjY2Vzc19hZnRlci5qYXZhCkBAIC0wLDAgKzEsMTEgQEAKK2NsYXNzIFRlc3QgeworICB2b2lkIGZvbyhTdHJpbmdbXSBzcykgeworICAgICBmb3IoaW50IGkgPSAwOyBpIDwgc3MubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgIG5ld01ldGhvZChzcywgaSk7CisgICAgIH0KKyAgfQorCisgICAgcHJpdmF0ZSB2b2lkIG5ld01ldGhvZChTdHJpbmdbXSBzcywgaW50IGkpIHsKKyAgICAgICAgc3NbaV0gPSAiIjsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2QxNS9Db2RlRHVwbGljYXRlc1dpdGhNdWx0T2NjdXJlbmNlcy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2QxNS9Db2RlRHVwbGljYXRlc1dpdGhNdWx0T2NjdXJlbmNlcy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRjZDI5NWEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZDE1L0NvZGVEdXBsaWNhdGVzV2l0aE11bHRPY2N1cmVuY2VzLmphdmEKQEAgLTAsMCArMSw2IEBACitjbGFzcyBUZXN0IHsKKyAgICB2b2lkIHQoamF2YS51dGlsLk1hcDxTdHJpbmcsIFN0cmluZz4gbSkgeworICAgICAgICBTdHJpbmcgZiA9ICIiOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImYgPSAiICsgPHNlbGVjdGlvbj5mPC9zZWxlY3Rpb24+ICsgIiwgIiArIG0uZ2V0KGYpKTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2QxNS9Db2RlRHVwbGljYXRlc1dpdGhNdWx0T2NjdXJlbmNlc19hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2QxNS9Db2RlRHVwbGljYXRlc1dpdGhNdWx0T2NjdXJlbmNlc19hZnRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA2Y2MzNjkwCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2QxNS9Db2RlRHVwbGljYXRlc1dpdGhNdWx0T2NjdXJlbmNlc19hZnRlci5qYXZhCkBAIC0wLDAgKzEsMTAgQEAKK2NsYXNzIFRlc3QgeworICAgIHZvaWQgdChqYXZhLnV0aWwuTWFwPFN0cmluZywgU3RyaW5nPiBtKSB7CisgICAgICAgIFN0cmluZyBmID0gIiI7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiZiA9ICIgKyBuZXdNZXRob2QoZikgKyAiLCAiICsgbmV3TWV0aG9kKG5ld01ldGhvZChmKSkpOworICAgIH0KKworICAgIHByaXZhdGUgU3RyaW5nIG5ld01ldGhvZChTdHJpbmcgZikgeworICAgICAgICByZXR1cm4gZjsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2RPYmplY3QvRmllbGRVc2FnZS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2RPYmplY3QvRmllbGRVc2FnZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNlM2FiMzcKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZE9iamVjdC9GaWVsZFVzYWdlLmphdmEKQEAgLTAsMCArMSw5IEBACitjbGFzcyBUZXN0eworICB2b2lkIGZvPGNhcmV0Pm8oaW50IGkpeworICAgIGkrKzsKKyAgfQorCisgIHZvaWQgYmFyKFRlc3QgdCl7CisgICAgdC5mb28oMSk7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZE9iamVjdC9GaWVsZFVzYWdlLmphdmEuYWZ0ZXIgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZE9iamVjdC9GaWVsZFVzYWdlLmphdmEuYWZ0ZXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWUzNDE1ZAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kT2JqZWN0L0ZpZWxkVXNhZ2UuamF2YS5hZnRlcgpAQCAtMCwwICsxLDIxIEBACitjbGFzcyBUZXN0eworICB2b2lkIGZvbyhpbnQgaSl7CisgICAgICBuZXcgSW5uZXJDbGFzcyhpKS5pbnZva2UoKTsKKyAgfQorCisgICAgdm9pZCBiYXIoVGVzdCB0KXsKKyAgICB0LmZvbygxKTsKKyAgfQorCisgICAgcHJpdmF0ZSBjbGFzcyBJbm5lckNsYXNzIHsKKyAgICAgICAgcHJpdmF0ZSBpbnQgaTsKKworICAgICAgICBwdWJsaWMgSW5uZXJDbGFzcyhpbnQgaSkgeworICAgICAgICAgICAgdGhpcy5pID0gaTsKKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyB2b2lkIGludm9rZSgpIHsKKyAgICAgICAgICAgIGkrKzsKKyAgICAgICAgfQorICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZE9iamVjdC9NZXRob2RJbkhpZXJhcmNoeS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2RPYmplY3QvTWV0aG9kSW5IaWVyYXJjaHkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NjM3NzE3Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2RPYmplY3QvTWV0aG9kSW5IaWVyYXJjaHkuamF2YQpAQCAtMCwwICsxLDE0IEBACitjbGFzcyBUZXN0IHsKKyAgdm9pZCBiYXIoKSB7CisgICAgbmV3IEI8U3RyaW5nPigpLmZvbygiIik7CisgIH0KKworICBjbGFzcyBBPFQ+IHsKKyAgICB2b2lkIGZvbyhUIHQpe30KKyAgfQorCisgIGNsYXNzIEI8RT4gZXh0ZW5kcyBBPEU+IHsKKyAgICB2b2lkIGZvPGNhcmV0Pm8oRSBlKXtTeXN0ZW0ub3V0LnByaW50bG4oZSk7fQorICB9Cit9CisKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kT2JqZWN0L01ldGhvZEluSGllcmFyY2h5LmphdmEuYWZ0ZXIgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZE9iamVjdC9NZXRob2RJbkhpZXJhcmNoeS5qYXZhLmFmdGVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1ZjE1NmIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZE9iamVjdC9NZXRob2RJbkhpZXJhcmNoeS5qYXZhLmFmdGVyCkBAIC0wLDAgKzEsMjggQEAKK2NsYXNzIFRlc3QgeworICB2b2lkIGJhcigpIHsKKyAgICBuZXcgQjxTdHJpbmc+KCkuZm9vKCIiKTsKKyAgfQorCisgIGNsYXNzIEE8VD4geworICAgIHZvaWQgZm9vKFQgdCl7fQorICB9CisKKyAgY2xhc3MgQjxFPiBleHRlbmRzIEE8RT4geworICAgIHZvaWQgZm9vKEUgZSl7CisgICAgICAgIG5ldyBJbm5lckNsYXNzKGUpLmludm9rZSgpOworICAgIH0KKworICAgICAgcHJpdmF0ZSBjbGFzcyBJbm5lckNsYXNzIHsKKyAgICAgICAgICBwcml2YXRlIEUgZTsKKworICAgICAgICAgIHB1YmxpYyBJbm5lckNsYXNzKEUgZSkgeworICAgICAgICAgICAgICB0aGlzLmUgPSBlOworICAgICAgICAgIH0KKworICAgICAgICAgIHB1YmxpYyB2b2lkIGludm9rZSgpIHsKKyAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKGUpOworICAgICAgICAgIH0KKyAgICAgIH0KKyAgfQorfQorCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZE9iamVjdC9NZXRob2RJbkhpZXJhcmNoeVJldHVybi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2RPYmplY3QvTWV0aG9kSW5IaWVyYXJjaHlSZXR1cm4uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jM2FlN2EyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2RPYmplY3QvTWV0aG9kSW5IaWVyYXJjaHlSZXR1cm4uamF2YQpAQCAtMCwwICsxLDE3IEBACitjbGFzcyBUZXN0IHsKKyAgIGNsYXNzIEEgeworICAgICBTdHJpbmcgZm9vKCl7CisgICAgICAgcmV0dXJuIG51bGw7CisgICAgIH0KKyAgIH0KKworICAgY2xhc3MgQiBleHRlbmRzIEEgeworICAgICBTdHJpbmcgZm88Y2FyZXQ+bygpeworICAgICAgIHJldHVybiBudWxsOworICAgICB9CisgICB9CisKKyAgIFN0cmluZyBiYXIoQiBiKSB7CisgICAgIHJldHVybiBiLmZvbygpOworICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kT2JqZWN0L01ldGhvZEluSGllcmFyY2h5UmV0dXJuLmphdmEuYWZ0ZXIgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZE9iamVjdC9NZXRob2RJbkhpZXJhcmNoeVJldHVybi5qYXZhLmFmdGVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFhMjU0YzEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZE9iamVjdC9NZXRob2RJbkhpZXJhcmNoeVJldHVybi5qYXZhLmFmdGVyCkBAIC0wLDAgKzEsMjMgQEAKK2NsYXNzIFRlc3QgeworICAgY2xhc3MgQSB7CisgICAgIFN0cmluZyBmb28oKXsKKyAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgfQorICAgfQorCisgICBjbGFzcyBCIGV4dGVuZHMgQSB7CisgICAgIFN0cmluZyBmb28oKXsKKyAgICAgICAgIHJldHVybiBuZXcgSW5uZXJDbGFzcygpLmludm9rZSgpOworICAgICB9CisKKyAgICAgICBwcml2YXRlIGNsYXNzIElubmVyQ2xhc3MgeworICAgICAgICAgICBwdWJsaWMgU3RyaW5nIGludm9rZSgpIHsKKyAgICAgICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICAgICB9CisgICAgICAgfQorICAgfQorCisgICBTdHJpbmcgYmFyKEIgYikgeworICAgICByZXR1cm4gYi5mb28oKTsKKyAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZE9iamVjdC9RdWFsaWZpZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kT2JqZWN0L1F1YWxpZmllci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQyMDhjYjgKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZE9iamVjdC9RdWFsaWZpZXIuamF2YQpAQCAtMCwwICsxLDggQEAKK2NsYXNzIFRlc3QgeworICB2b2lkIGJhcihBIGEpeworICAgIGEuZm9vKCk7CisgIH0KKyAgY2xhc3MgQSB7CisgICAgdm9pZCBmPGNhcmV0Pm9vKCl7aW50IGkgPSAwO30KKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kT2JqZWN0L1F1YWxpZmllci5qYXZhLmFmdGVyIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2RPYmplY3QvUXVhbGlmaWVyLmphdmEuYWZ0ZXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjlmYmEwNwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kT2JqZWN0L1F1YWxpZmllci5qYXZhLmFmdGVyCkBAIC0wLDAgKzEsMTYgQEAKK2NsYXNzIFRlc3QgeworICB2b2lkIGJhcihBIGEpeworICAgIGEuZm9vKCk7CisgIH0KKyAgY2xhc3MgQSB7CisgICAgdm9pZCBmb28oKXsKKyAgICAgICAgbmV3IElubmVyQ2xhc3MoKS5pbnZva2UoKTsKKyAgICB9CisKKyAgICAgIHByaXZhdGUgY2xhc3MgSW5uZXJDbGFzcyB7CisgICAgICAgICAgcHVibGljIHZvaWQgaW52b2tlKCkgeworICAgICAgICAgICAgICBpbnQgaSA9IDA7CisgICAgICAgICAgfQorICAgICAgfQorICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2RPYmplY3QvUmVjdXJzaW9uLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZE9iamVjdC9SZWN1cnNpb24uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NTRjYjFlCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2RPYmplY3QvUmVjdXJzaW9uLmphdmEKQEAgLTAsMCArMSwxMCBAQAorY2xhc3MgVGVzdCB7CisgICAgdm9pZCBiPGNhcmV0PmFyKGludCBpKSB7CisgICAgICAgIGlmIChpID09IDApIHJldHVybjsKKyAgICAgICAgYmFyKGkgLSAxKTsKKyAgICB9CisKKyAgICB2b2lkIGZvbygpIHsKKyAgICAgICAgYmFyKDUpOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZE9iamVjdC9SZWN1cnNpb24uamF2YS5hZnRlciBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kT2JqZWN0L1JlY3Vyc2lvbi5qYXZhLmFmdGVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRkY2JlN2MKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZE9iamVjdC9SZWN1cnNpb24uamF2YS5hZnRlcgpAQCAtMCwwICsxLDIyIEBACitjbGFzcyBUZXN0IHsKKyAgICB2b2lkIGJhcihpbnQgaSkgeworICAgICAgICBuZXcgSW5uZXJDbGFzcyhpKS5pbnZva2UoKTsKKyAgICB9CisKKyAgICB2b2lkIGZvbygpIHsKKyAgICAgICAgYmFyKDUpOworICAgIH0KKworICAgIHByaXZhdGUgY2xhc3MgSW5uZXJDbGFzcyB7CisgICAgICAgIHByaXZhdGUgaW50IGk7CisKKyAgICAgICAgcHVibGljIElubmVyQ2xhc3MoaW50IGkpIHsKKyAgICAgICAgICAgIHRoaXMuaSA9IGk7CisgICAgICAgIH0KKworICAgICAgICBwdWJsaWMgdm9pZCBpbnZva2UoKSB7CisgICAgICAgICAgICBpZiAoaSA9PSAwKSByZXR1cm47CisgICAgICAgICAgICBiYXIoaSAtIDEpOworICAgICAgICB9CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kT2JqZWN0L1N0YXRpYy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2RPYmplY3QvU3RhdGljLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDI2MGVmNQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kT2JqZWN0L1N0YXRpYy5qYXZhCkBAIC0wLDAgKzEsNiBAQAorY2xhc3MgVGVzdCB7CisgIHN0YXRpYyB2b2lkIGY8Y2FyZXQ+b28oKXtpbnQgaSA9IDA7fQorICB2b2lkIGJhcigpIHsKKyAgICBmb28oKTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kT2JqZWN0L1N0YXRpYy5qYXZhLmFmdGVyIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2RPYmplY3QvU3RhdGljLmphdmEuYWZ0ZXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDFjYjJlYgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kT2JqZWN0L1N0YXRpYy5qYXZhLmFmdGVyCkBAIC0wLDAgKzEsMTUgQEAKK2NsYXNzIFRlc3QgeworICBzdGF0aWMgdm9pZCBmb28oKXsKKyAgICAgIElubmVyQ2xhc3MuaW52b2tlKCk7CisgIH0KKworICAgIHZvaWQgYmFyKCkgeworICAgIGZvbygpOworICB9CisKKyAgICBwcml2YXRlIHN0YXRpYyBjbGFzcyBJbm5lckNsYXNzIHsKKyAgICAgICAgcHJpdmF0ZSBzdGF0aWMgdm9pZCBpbnZva2UoKSB7CisgICAgICAgICAgICBpbnQgaSA9IDA7CisgICAgICAgIH0KKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2RPYmplY3QvU3RhdGljVHlwZVBhcmFtcy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2RPYmplY3QvU3RhdGljVHlwZVBhcmFtcy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNlNDJmNWEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZE9iamVjdC9TdGF0aWNUeXBlUGFyYW1zLmphdmEKQEAgLTAsMCArMSw2IEBACitjbGFzcyBUZXN0IHsKKyAgICAgdm9pZCBiYXIoKSB7CisgICAgICAgZm9vKCIiKTsKKyAgICAgfQorICAgICBzdGF0aWMgPFQ+IHZvaWQgZjxjYXJldD5vbyhUIHQpe1N5c3RlbS5vdXQucHJpbnRsbih0KTt9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2RPYmplY3QvU3RhdGljVHlwZVBhcmFtcy5qYXZhLmFmdGVyIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2RPYmplY3QvU3RhdGljVHlwZVBhcmFtcy5qYXZhLmFmdGVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY2ZWVhNDkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZE9iamVjdC9TdGF0aWNUeXBlUGFyYW1zLmphdmEuYWZ0ZXIKQEAgLTAsMCArMSwyMCBAQAorY2xhc3MgVGVzdCB7CisgICAgIHZvaWQgYmFyKCkgeworICAgICAgIGZvbygiIik7CisgICAgIH0KKyAgICAgc3RhdGljIDxUPiB2b2lkIGZvbyhUIHQpeworICAgICAgICAgbmV3IElubmVyQ2xhc3M8VD4odCkuaW52b2tlKCk7CisgICAgIH0KKworICAgIHByaXZhdGUgc3RhdGljIGNsYXNzIElubmVyQ2xhc3M8VD4geworICAgICAgICBwcml2YXRlIFQgdDsKKworICAgICAgICBwdWJsaWMgSW5uZXJDbGFzcyhUIHQpIHsKKyAgICAgICAgICAgIHRoaXMudCA9IHQ7CisgICAgICAgIH0KKworICAgICAgICBwdWJsaWMgdm9pZCBpbnZva2UoKSB7CisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4odCk7CisgICAgICAgIH0KKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2RPYmplY3QvU3RhdGljVHlwZVBhcmFtc1JlY3Vyc2l2ZS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2RPYmplY3QvU3RhdGljVHlwZVBhcmFtc1JlY3Vyc2l2ZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgwN2Q2M2EKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZE9iamVjdC9TdGF0aWNUeXBlUGFyYW1zUmVjdXJzaXZlLmphdmEKQEAgLTAsMCArMSw4IEBACitjbGFzcyBUZXN0IHsKKyAgICAgdm9pZCBiYXIoKSB7CisgICAgICAgZm9vKCIiKTsKKyAgICAgfQorICAgICBzdGF0aWMgPFQ+IHZvaWQgZjxjYXJldD5vbyhUIHQpeworICAgICAgIGlmICh0ICE9IG51bGwpIGZvbyh0KTsKKyAgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kT2JqZWN0L1N0YXRpY1R5cGVQYXJhbXNSZWN1cnNpdmUuamF2YS5hZnRlciBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kT2JqZWN0L1N0YXRpY1R5cGVQYXJhbXNSZWN1cnNpdmUuamF2YS5hZnRlcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mODdlZGQyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2RPYmplY3QvU3RhdGljVHlwZVBhcmFtc1JlY3Vyc2l2ZS5qYXZhLmFmdGVyCkBAIC0wLDAgKzEsMjAgQEAKK2NsYXNzIFRlc3QgeworICAgICB2b2lkIGJhcigpIHsKKyAgICAgICBmb28oIiIpOworICAgICB9CisgICAgIHN0YXRpYyA8VD4gdm9pZCBmb28oVCB0KXsKKyAgICAgICAgIG5ldyBJbm5lckNsYXNzPFQ+KHQpLmludm9rZSgpOworICAgICB9CisKKyAgICBwcml2YXRlIHN0YXRpYyBjbGFzcyBJbm5lckNsYXNzPFQ+IHsKKyAgICAgICAgcHJpdmF0ZSBUIHQ7CisKKyAgICAgICAgcHVibGljIElubmVyQ2xhc3MoVCB0KSB7CisgICAgICAgICAgICB0aGlzLnQgPSB0OworICAgICAgICB9CisKKyAgICAgICAgcHVibGljIHZvaWQgaW52b2tlKCkgeworICAgICAgICAgICAgaWYgKHQgIT0gbnVsbCkgZm9vKHQpOworICAgICAgICB9CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kT2JqZWN0L1N0YXRpY1R5cGVQYXJhbXNSZXR1cm4uamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kT2JqZWN0L1N0YXRpY1R5cGVQYXJhbXNSZXR1cm4uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMmNjMWM5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2RPYmplY3QvU3RhdGljVHlwZVBhcmFtc1JldHVybi5qYXZhCkBAIC0wLDAgKzEsNiBAQAorY2xhc3MgVGVzdCB7CisgICAgIHZvaWQgYmFyKCkgeworICAgICAgIFN0cmluZyBzdHIgPSBmb28oKTsKKyAgICAgfQorICAgICBzdGF0aWMgPFQ+IFQgZm88Y2FyZXQ+bygpe3JldHVybiBudWxsO30KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZE9iamVjdC9TdGF0aWNUeXBlUGFyYW1zUmV0dXJuLmphdmEuYWZ0ZXIgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZE9iamVjdC9TdGF0aWNUeXBlUGFyYW1zUmV0dXJuLmphdmEuYWZ0ZXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjEwMGYxYwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kT2JqZWN0L1N0YXRpY1R5cGVQYXJhbXNSZXR1cm4uamF2YS5hZnRlcgpAQCAtMCwwICsxLDE0IEBACitjbGFzcyBUZXN0IHsKKyAgICAgdm9pZCBiYXIoKSB7CisgICAgICAgU3RyaW5nIHN0ciA9IGZvbygpOworICAgICB9CisgICAgIHN0YXRpYyA8VD4gVCBmb28oKXsKKyAgICAgICAgIHJldHVybiBJbm5lckNsYXNzLmludm9rZSgpOworICAgICB9CisKKyAgICBwcml2YXRlIHN0YXRpYyBjbGFzcyBJbm5lckNsYXNzIHsKKyAgICAgICAgcHJpdmF0ZSBzdGF0aWMgPFQ+IFQgaW52b2tlKCkgeworICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgIH0KKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2RPYmplY3QvU3RhdGljVHlwZVBhcmFtc1JldHVybk5vRGVsZXRlLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZE9iamVjdC9TdGF0aWNUeXBlUGFyYW1zUmV0dXJuTm9EZWxldGUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMzNjMzYxCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2RPYmplY3QvU3RhdGljVHlwZVBhcmFtc1JldHVybk5vRGVsZXRlLmphdmEKQEAgLTAsMCArMSw5IEBACitjbGFzcyBUZXN0IHsKKyAgICBzdGF0aWMgPFQ+IFQgZjxjYXJldD5vbygpIHsKKyAgICAgICAgcmV0dXJuIG51bGw7CisgICAgfQorCisgICAgdm9pZCBiYXIoKSB7CisgICAgICAgZm9vKCk7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kT2JqZWN0L1N0YXRpY1R5cGVQYXJhbXNSZXR1cm5Ob0RlbGV0ZS5qYXZhLmFmdGVyIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2RPYmplY3QvU3RhdGljVHlwZVBhcmFtc1JldHVybk5vRGVsZXRlLmphdmEuYWZ0ZXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDY4YWU0YQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kT2JqZWN0L1N0YXRpY1R5cGVQYXJhbXNSZXR1cm5Ob0RlbGV0ZS5qYXZhLmFmdGVyCkBAIC0wLDAgKzEsMTUgQEAKK2NsYXNzIFRlc3QgeworICAgIHN0YXRpYyA8VD4gVCBmb28oKSB7CisgICAgICAgIHJldHVybiBJbm5lckNsYXNzLmludm9rZSgpOworICAgIH0KKworICAgIHZvaWQgYmFyKCkgeworICAgICAgIGZvbygpOworICAgIH0KKworICAgIHByaXZhdGUgc3RhdGljIGNsYXNzIElubmVyQ2xhc3MgeworICAgICAgICBwcml2YXRlIHN0YXRpYyA8VD4gVCBpbnZva2UoKSB7CisgICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgfQorICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZE9iamVjdC9UeXBlUGFyYW1zLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZE9iamVjdC9UeXBlUGFyYW1zLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTE1ZGJkM2UKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZE9iamVjdC9UeXBlUGFyYW1zLmphdmEKQEAgLTAsMCArMSw3IEBACitjbGFzcyBUZXN0IHsKKyAgIDxUPiB2b2lkIGZvPGNhcmV0Pm8oVCB0KXtTeXN0ZW0ub3V0LnByaW50bG4odCk7fQorCisgICB2b2lkIGJhcigpIHsKKyAgICAgZm9vKCIiKTsKKyAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZE9iamVjdC9UeXBlUGFyYW1zLmphdmEuYWZ0ZXIgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZE9iamVjdC9UeXBlUGFyYW1zLmphdmEuYWZ0ZXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWFlNTM2NAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kT2JqZWN0L1R5cGVQYXJhbXMuamF2YS5hZnRlcgpAQCAtMCwwICsxLDIxIEBACitjbGFzcyBUZXN0IHsKKyAgIDxUPiB2b2lkIGZvbyhUIHQpeworICAgICAgIG5ldyBJbm5lckNsYXNzPFQ+KHQpLmludm9rZSgpOworICAgfQorCisgICAgdm9pZCBiYXIoKSB7CisgICAgIGZvbygiIik7CisgICB9CisKKyAgICBwcml2YXRlIGNsYXNzIElubmVyQ2xhc3M8VD4geworICAgICAgICBwcml2YXRlIFQgdDsKKworICAgICAgICBwdWJsaWMgSW5uZXJDbGFzcyhUIHQpIHsKKyAgICAgICAgICAgIHRoaXMudCA9IHQ7CisgICAgICAgIH0KKworICAgICAgICBwdWJsaWMgdm9pZCBpbnZva2UoKSB7CisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4odCk7CisgICAgICAgIH0KKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2RPYmplY3QvVHlwZVBhcmFtc1JldHVybi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2RPYmplY3QvVHlwZVBhcmFtc1JldHVybi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYyMmRmODUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZE9iamVjdC9UeXBlUGFyYW1zUmV0dXJuLmphdmEKQEAgLTAsMCArMSw2IEBACitjbGFzcyBUZXN0IHsKKyAgPFQ+IFQgZm88Y2FyZXQ+bygpe3JldHVybiBudWxsO30KKyAgdm9pZCBiYXIoKXsKKyAgICBTdHJpbmcgcyA9IGZvbygpOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2RPYmplY3QvVHlwZVBhcmFtc1JldHVybi5qYXZhLmFmdGVyIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2RPYmplY3QvVHlwZVBhcmFtc1JldHVybi5qYXZhLmFmdGVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY5M2YyNzAKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZE9iamVjdC9UeXBlUGFyYW1zUmV0dXJuLmphdmEuYWZ0ZXIKQEAgLTAsMCArMSwxNSBAQAorY2xhc3MgVGVzdCB7CisgIDxUPiBUIGZvbygpeworICAgICAgcmV0dXJuIG5ldyBJbm5lckNsYXNzPFQ+KCkuaW52b2tlKCk7CisgIH0KKworICAgIHZvaWQgYmFyKCl7CisgICAgU3RyaW5nIHMgPSBmb28oKTsKKyAgfQorCisgICAgcHJpdmF0ZSBjbGFzcyBJbm5lckNsYXNzPFQ+IHsKKyAgICAgICAgcHVibGljIFQgaW52b2tlKCkgeworICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgIH0KKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2RPYmplY3QvVmFyYXJncy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2RPYmplY3QvVmFyYXJncy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI5MmEzMWUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZE9iamVjdC9WYXJhcmdzLmphdmEKQEAgLTAsMCArMSw4IEBACitjbGFzcyBUZXN0IHsKKyAgPFQ+IHZvaWQgZm88Y2FyZXQ+byhULi4uIHQpeworICAgICAgZm9yIChUIHQxIDogdCkge30gCisgIH0KKyAgdm9pZCBiYXIoKXsKKyAgICBmb28oIiIpOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2RPYmplY3QvVmFyYXJncy5qYXZhLmFmdGVyIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2RPYmplY3QvVmFyYXJncy5qYXZhLmFmdGVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRmMWE4OGMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZE9iamVjdC9WYXJhcmdzLmphdmEuYWZ0ZXIKQEAgLTAsMCArMSwyMSBAQAorY2xhc3MgVGVzdCB7CisgIDxUPiB2b2lkIGZvbyhULi4uIHQpeworICAgICAgbmV3IElubmVyQ2xhc3M8VD4odCkuaW52b2tlKCk7CisgIH0KKworICAgIHZvaWQgYmFyKCl7CisgICAgZm9vKCIiKTsKKyAgfQorCisgICAgcHJpdmF0ZSBjbGFzcyBJbm5lckNsYXNzPFQ+IHsKKyAgICAgICAgcHJpdmF0ZSBUW10gdDsKKworICAgICAgICBwdWJsaWMgSW5uZXJDbGFzcyhUW10gdCkgeworICAgICAgICAgICAgdGhpcy50ID0gdDsKKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyB2b2lkIGludm9rZSgpIHsKKyAgICAgICAgICAgIGZvciAoVCB0MSA6IHQpIHt9CisgICAgICAgIH0KKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2RPYmplY3QvV2l0aFByaXZhdGVNZXRob2RVc2VkLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZE9iamVjdC9XaXRoUHJpdmF0ZU1ldGhvZFVzZWQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNzA3MjEwCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2RPYmplY3QvV2l0aFByaXZhdGVNZXRob2RVc2VkLmphdmEKQEAgLTAsMCArMSw5IEBACitwdWJsaWMgY2xhc3MgWFhYIHsKKyAgdm9pZCBmPGNhcmV0Pm9vKCkgeworICAgIGludCBpID0gMCA7CisgICAgYmFyKGkpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbihpKTsKKyAgfQorCisgIHByaXZhdGUgdm9pZCBiYXIoaW50IGkpe30KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZE9iamVjdC9XaXRoUHJpdmF0ZU1ldGhvZFVzZWQuamF2YS5hZnRlciBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kT2JqZWN0L1dpdGhQcml2YXRlTWV0aG9kVXNlZC5qYXZhLmFmdGVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU4Y2NiMmYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZE9iamVjdC9XaXRoUHJpdmF0ZU1ldGhvZFVzZWQuamF2YS5hZnRlcgpAQCAtMCwwICsxLDE1IEBACitwdWJsaWMgY2xhc3MgWFhYIHsKKyAgdm9pZCBmb28oKSB7CisgICAgICBuZXcgSW5uZXJDbGFzcygpLmludm9rZSgpOworICB9CisKKyAgICBwcml2YXRlIGNsYXNzIElubmVyQ2xhc3MgeworICAgICAgICBwdWJsaWMgdm9pZCBpbnZva2UoKSB7CisgICAgICAgICAgICBpbnQgaSA9IDAgOworICAgICAgICAgICAgYmFyKGkpOworICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKGkpOworICAgICAgICB9CisKKyAgICAgICAgcHJpdmF0ZSB2b2lkIGJhcihpbnQgaSl7fQorICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZE9iamVjdC9XaXRoUHJpdmF0ZU1ldGhvZFVzZWQxLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZE9iamVjdC9XaXRoUHJpdmF0ZU1ldGhvZFVzZWQxLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTJjM2VhMgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kT2JqZWN0L1dpdGhQcml2YXRlTWV0aG9kVXNlZDEuamF2YQpAQCAtMCwwICsxLDUyIEBACitpbXBvcnQgamF2YS51dGlsLkRhdGU7CisKK3B1YmxpYyBjbGFzcyBUZXN0Q2xhc3MgeworCisgICAgcHJpdmF0ZSBEYXRlIGV4cGlyeTsKKyAgICBwcml2YXRlIERhdGUgbWF0dXJpdHk7CisgICAgcHJpdmF0ZSBpbnQgY29tbWl0bWVudDsKKyAgICBwcml2YXRlIGRvdWJsZSBvdXRzdGFuZGluZzsKKyAgICBwcml2YXRlIEl0ZXJhYmxlIHBheW1lbnRzOworICAgIHByaXZhdGUgRGF0ZSB0b2RheTsKKyAgICBwcml2YXRlIERhdGUgc3RhcnQ7CisgICAgcHJpdmF0ZSBpbnQgcmlza1JhdGluZzsKKworCisgICAgcHVibGljIGRvdWJsZSBjYWw8Y2FyZXQ+Y3VsYXRlKCkgeworICAgICAgICByZXR1cm4gKCBvdXRzdGFuZGluZ1Jpc2tBbW91bnQoKSAqIGR1cmF0aW9uKCkgKiByaXNrRmFjdG9yKCkgKSArICggdW51c2VkUmlza0Ftb3VudCgpICogZHVyYXRpb24oKSAqIHVudXNlZFJpc2tGYWN0b3IoKSApOworICAgIH0KKworICAgIHByaXZhdGUgZG91YmxlIHJpc2tGYWN0b3IoKSB7CisgICAgICAgIHJldHVybiA1LjA7CisgICAgfQorCisgICAgcHJpdmF0ZSBkb3VibGUgdW51c2VkUmlza0ZhY3RvcigpIHsKKyAgICAgICAgcmV0dXJuIDYuMDsKKyAgICB9CisKKyAgICBwcml2YXRlIGRvdWJsZSB1bnVzZWRSaXNrQW1vdW50KCkgeworICAgICAgICByZXR1cm4gKCBjb21taXRtZW50IC0gb3V0c3RhbmRpbmcgKTsKKyAgICB9CisKKyAgICBwcml2YXRlIGRvdWJsZSBvdXRzdGFuZGluZ1Jpc2tBbW91bnQoKSB7CisgICAgICAgIHJldHVybiBvdXRzdGFuZGluZzsKKyAgICB9CisKKyAgICBwcml2YXRlIGRvdWJsZSBnZXRVc2VkUGVyY2VudGFnZSgpIHsKKyAgICAgICAgcmV0dXJuIDEuMDsKKyAgICB9CisKKyAgICBwcml2YXRlIGRvdWJsZSBkdXJhdGlvbigpIHsKKyAgICAgICAgaWYgKCBleHBpcnkgPT0gbnVsbCAmJiBtYXR1cml0eSAhPSBudWxsICkgeworICAgICAgICAgICAgcmV0dXJuIDEuMDsKKyAgICAgICAgfSBlbHNlIGlmICggZXhwaXJ5ICE9IG51bGwgJiYgbWF0dXJpdHkgPT0gbnVsbCApIHsKKyAgICAgICAgICAgIHJldHVybiB5ZWFyc1RvKCBleHBpcnkgKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gMC4wOworICAgIH0KKworICAgIHByaXZhdGUgZG91YmxlIHllYXJzVG8oIGZpbmFsIERhdGUgZW5kRGF0ZSApIHsKKyAgICAgICAgRGF0ZSBiZWdpbkRhdGUgPSAoIHRvZGF5ID09IG51bGwgPyBzdGFydCA6IHRvZGF5ICk7CisgICAgICAgIHJldHVybiAoICggZW5kRGF0ZS5nZXRUaW1lKCkgLSBiZWdpbkRhdGUuZ2V0VGltZSgpICkpOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZE9iamVjdC9XaXRoUHJpdmF0ZU1ldGhvZFVzZWQxLmphdmEuYWZ0ZXIgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZE9iamVjdC9XaXRoUHJpdmF0ZU1ldGhvZFVzZWQxLmphdmEuYWZ0ZXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzQ1NDNlMwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kT2JqZWN0L1dpdGhQcml2YXRlTWV0aG9kVXNlZDEuamF2YS5hZnRlcgpAQCAtMCwwICsxLDU4IEBACitpbXBvcnQgamF2YS51dGlsLkRhdGU7CisKK3B1YmxpYyBjbGFzcyBUZXN0Q2xhc3MgeworCisgICAgcHJpdmF0ZSBEYXRlIGV4cGlyeTsKKyAgICBwcml2YXRlIERhdGUgbWF0dXJpdHk7CisgICAgcHJpdmF0ZSBpbnQgY29tbWl0bWVudDsKKyAgICBwcml2YXRlIGRvdWJsZSBvdXRzdGFuZGluZzsKKyAgICBwcml2YXRlIEl0ZXJhYmxlIHBheW1lbnRzOworICAgIHByaXZhdGUgRGF0ZSB0b2RheTsKKyAgICBwcml2YXRlIERhdGUgc3RhcnQ7CisgICAgcHJpdmF0ZSBpbnQgcmlza1JhdGluZzsKKworCisgICAgcHVibGljIGRvdWJsZSBjYWxjdWxhdGUoKSB7CisgICAgICAgIHJldHVybiBuZXcgSW5uZXJDbGFzcygpLmludm9rZSgpOworICAgIH0KKworICAgIHByaXZhdGUgZG91YmxlIGdldFVzZWRQZXJjZW50YWdlKCkgeworICAgICAgICByZXR1cm4gMS4wOworICAgIH0KKworICAgIHByaXZhdGUgZG91YmxlIHllYXJzVG8oIGZpbmFsIERhdGUgZW5kRGF0ZSApIHsKKyAgICAgICAgRGF0ZSBiZWdpbkRhdGUgPSAoIHRvZGF5ID09IG51bGwgPyBzdGFydCA6IHRvZGF5ICk7CisgICAgICAgIHJldHVybiAoICggZW5kRGF0ZS5nZXRUaW1lKCkgLSBiZWdpbkRhdGUuZ2V0VGltZSgpICkpOworICAgIH0KKworICAgIHByaXZhdGUgY2xhc3MgSW5uZXJDbGFzcyB7CisgICAgICAgIHB1YmxpYyBkb3VibGUgaW52b2tlKCkgeworICAgICAgICAgICAgcmV0dXJuICggb3V0c3RhbmRpbmdSaXNrQW1vdW50KCkgKiBkdXJhdGlvbigpICogcmlza0ZhY3RvcigpICkgKyAoIHVudXNlZFJpc2tBbW91bnQoKSAqIGR1cmF0aW9uKCkgKiB1bnVzZWRSaXNrRmFjdG9yKCkgKTsKKyAgICAgICAgfQorCisgICAgICAgIHByaXZhdGUgZG91YmxlIG91dHN0YW5kaW5nUmlza0Ftb3VudCgpIHsKKyAgICAgICAgICAgIHJldHVybiBvdXRzdGFuZGluZzsKKyAgICAgICAgfQorCisgICAgICAgIHByaXZhdGUgZG91YmxlIGR1cmF0aW9uKCkgeworICAgICAgICAgICAgaWYgKCBleHBpcnkgPT0gbnVsbCAmJiBtYXR1cml0eSAhPSBudWxsICkgeworICAgICAgICAgICAgICAgIHJldHVybiAxLjA7CisgICAgICAgICAgICB9IGVsc2UgaWYgKCBleHBpcnkgIT0gbnVsbCAmJiBtYXR1cml0eSA9PSBudWxsICkgeworICAgICAgICAgICAgICAgIHJldHVybiB5ZWFyc1RvKCBleHBpcnkgKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiAwLjA7CisgICAgICAgIH0KKworICAgICAgICBwcml2YXRlIGRvdWJsZSByaXNrRmFjdG9yKCkgeworICAgICAgICAgICAgcmV0dXJuIDUuMDsKKyAgICAgICAgfQorCisgICAgICAgIHByaXZhdGUgZG91YmxlIHVudXNlZFJpc2tBbW91bnQoKSB7CisgICAgICAgICAgICByZXR1cm4gKCBjb21taXRtZW50IC0gb3V0c3RhbmRpbmcgKTsKKyAgICAgICAgfQorCisgICAgICAgIHByaXZhdGUgZG91YmxlIHVudXNlZFJpc2tGYWN0b3IoKSB7CisgICAgICAgICAgICByZXR1cm4gNi4wOworICAgICAgICB9CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kT2JqZWN0L1dpdGhQcml2YXRlTWV0aG9kV2hpY2hDYW50QmVNb3ZlZC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2RPYmplY3QvV2l0aFByaXZhdGVNZXRob2RXaGljaENhbnRCZU1vdmVkLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWRhMmYyNwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kT2JqZWN0L1dpdGhQcml2YXRlTWV0aG9kV2hpY2hDYW50QmVNb3ZlZC5qYXZhCkBAIC0wLDAgKzEsMTMgQEAKK3B1YmxpYyBjbGFzcyBYWFggeworICB2b2lkIGY8Y2FyZXQ+b28oKSB7CisgICAgaW50IGkgPSAwIDsKKyAgICBiYXIoaSk7CisgICAgU3lzdGVtLm91dC5wcmludGxuKGkpOworICB9CisKKyAgdm9pZCBiYXp6KCkgeworICAgIGJhcigwKTsKKyAgfQorCisgIHByaXZhdGUgdm9pZCBiYXIoaW50IGkpe30KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZE9iamVjdC9XaXRoUHJpdmF0ZU1ldGhvZFdoaWNoQ2FudEJlTW92ZWQuamF2YS5hZnRlciBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kT2JqZWN0L1dpdGhQcml2YXRlTWV0aG9kV2hpY2hDYW50QmVNb3ZlZC5qYXZhLmFmdGVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZjYmU0ZTAKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZE9iamVjdC9XaXRoUHJpdmF0ZU1ldGhvZFdoaWNoQ2FudEJlTW92ZWQuamF2YS5hZnRlcgpAQCAtMCwwICsxLDE5IEBACitwdWJsaWMgY2xhc3MgWFhYIHsKKyAgdm9pZCBmb28oKSB7CisgICAgICBuZXcgSW5uZXJDbGFzcygpLmludm9rZSgpOworICB9CisKKyAgICB2b2lkIGJhenooKSB7CisgICAgYmFyKDApOworICB9CisKKyAgcHJpdmF0ZSB2b2lkIGJhcihpbnQgaSl7fQorCisgICAgcHJpdmF0ZSBjbGFzcyBJbm5lckNsYXNzIHsKKyAgICAgICAgcHVibGljIHZvaWQgaW52b2tlKCkgeworICAgICAgICAgICAgaW50IGkgPSAwIDsKKyAgICAgICAgICAgIGJhcihpKTsKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihpKTsKKyAgICAgICAgfQorICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZE9iamVjdC9XcmFwV2l0aE9iamVjdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2RPYmplY3QvV3JhcFdpdGhPYmplY3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yODkyNmU2Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2RPYmplY3QvV3JhcFdpdGhPYmplY3QuamF2YQpAQCAtMCwwICsxLDkgQEAKK2NsYXNzIFRlc3QgeworICB2b2lkIGY8Y2FyZXQ+b28oaW50IGksIGludC4uLiBqKSB7CisgICAgaWYgKGkgPT0gMCkgeworICAgICAgICBmb3IgKGludCBpZHggOiBqKSB7CisKKyAgICAgICAgfQorICAgIH0KKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kT2JqZWN0L1dyYXBXaXRoT2JqZWN0LmphdmEuYWZ0ZXIgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZE9iamVjdC9XcmFwV2l0aE9iamVjdC5qYXZhLmFmdGVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEyMjYwNzYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZE9iamVjdC9XcmFwV2l0aE9iamVjdC5qYXZhLmFmdGVyCkBAIC0wLDAgKzEsMTMgQEAKK2NsYXNzIFRlc3QgeworICB2b2lkIGZvbyhpbnQgaSwgaW50Li4uIGopIHsKKyAgICAgIG5ldyBPYmplY3QoKSB7CisgICAgICAgICAgcHJpdmF0ZSB2b2lkIElubmVyQ2xhc3MoaW50IGksIGludFtdIGopIHsKKyAgICAgICAgICAgICAgaWYgKGkgPT0gMCkgeworICAgICAgICAgICAgICAgICAgZm9yIChpbnQgaWR4IDogaikgeworCisgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisgICAgICB9LklubmVyQ2xhc3MoaSwgaik7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZE9iamVjdC9XcmFwV2l0aE9iamVjdFJlY3Vyc2l2ZS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2RPYmplY3QvV3JhcFdpdGhPYmplY3RSZWN1cnNpdmUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZThmYWIyZgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kT2JqZWN0L1dyYXBXaXRoT2JqZWN0UmVjdXJzaXZlLmphdmEKQEAgLTAsMCArMSw2IEBACitjbGFzcyBUZXN0IHsKKyAgaW50IGY8Y2FyZXQ+b28oaW50IGkpIHsKKyAgICAgIGlmIChpID09IDApIHJldHVybiAtMTsKKyAgICAgIHJldHVybiBmb28oaSAtIDEpOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2RPYmplY3QvV3JhcFdpdGhPYmplY3RSZWN1cnNpdmUuamF2YS5hZnRlciBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kT2JqZWN0L1dyYXBXaXRoT2JqZWN0UmVjdXJzaXZlLmphdmEuYWZ0ZXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjMzNzQ3ZgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kT2JqZWN0L1dyYXBXaXRoT2JqZWN0UmVjdXJzaXZlLmphdmEuYWZ0ZXIKQEAgLTAsMCArMSwxMCBAQAorY2xhc3MgVGVzdCB7CisgIGludCBmb28oaW50IGkpIHsKKyAgICAgIHJldHVybiBuZXcgT2JqZWN0KCkgeworICAgICAgICAgIHByaXZhdGUgaW50IElubmVyQ2xhc3MoaW50IGkpIHsKKyAgICAgICAgICAgICAgaWYgKGkgPT0gMCkgcmV0dXJuIC0xOworICAgICAgICAgICAgICByZXR1cm4gZm9vKGkgLSAxKTsKKyAgICAgICAgICB9CisgICAgICB9LklubmVyQ2xhc3MoaSk7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZE9iamVjdC9tdWx0aXBsZUV4aXRQb2ludHMvQmF0Y2hVcGRhdGVDYXVzZWRCeUZvcm1hdHRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2RPYmplY3QvbXVsdGlwbGVFeGl0UG9pbnRzL0JhdGNoVXBkYXRlQ2F1c2VkQnlGb3JtYXR0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNjU4MjhjCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2RPYmplY3QvbXVsdGlwbGVFeGl0UG9pbnRzL0JhdGNoVXBkYXRlQ2F1c2VkQnlGb3JtYXR0ZXIuamF2YQpAQCAtMCwwICsxLDM3IEBACitpbXBvcnQgamF2YS51dGlsLio7CisKK3B1YmxpYyBjbGFzcyBBQnVnIHsKKworICAgIHByaXZhdGUgU3RyaW5nIGRyaW5rQmVhcihTdHJpbmcgYW1vdW50KSB7CisgICAgICAgIFN0cmluZyBmaXJzdFRpbWUgPSAiYXNkZiI7CisKKyAgICAgICAgaWYgKGZpcnN0VGltZSA9PSBudWxsKQorICAgICAgICAgICAgcmV0dXJuICJsb3NlciI7CisKKyAgICAgICAgQXJyYXlMaXN0PFN0cmluZz4gYm90dGxlcyA9IG5ldyBBcnJheUxpc3Q8PigpOworICAgICAgICBib3R0bGVzLmFkZCgiYXNkZiIpOworCisgICAgICAgIDxzZWxlY3Rpb24+TGlzdDxTdHJpbmc+IGVycm9ycyA9IG5ldyBBcnJheUxpc3Q8PigpOworCisgICAgICAgIGludCBtb25leSA9IDA7CisgICAgICAgIGludCBuQ291bnQgPSAwOworICAgICAgICBpbnQgckNvdW50ID0gMDsKKyAgICAgICAgaW50IHdDb3VudCA9IDA7CisgICAgICAgIGNoYXJbXSB0cmlwZWwgPSBuZXcgY2hhcltib3R0bGVzLnNpemUoKV07CisgICAgICAgIGJvb2xlYW4gbm8zM3ByID0gZmFsc2U7CisgICAgICAgIGludCBmaXJzdCA9IDA7CisgICAgICAgIGludCBsYXN0ID0gMDsKKyAgICAgICAgaWYgKHRydWUpIHJldHVybiBudWxsOzwvc2VsZWN0aW9uPgorCisgICAgICAgIGJvb2xlYW4gdW5oYXBweSA9IG5vMzNwciAmJiBmaXJzdCB8fCBubzMzcHIgJiYgbGFzdDsKKworICAgICAgICBTdHJpbmcgcmVzdWx0ID0gYW1vdW50ICsgQXJyYXlzLnRvU3RyaW5nKHRyaXBlbCkgKyByQ291bnQgKyB3Q291bnQgKyBuQ291bnQgKyBtb25leSArIGVycm9yczsKKworICAgICAgICBpZiAoIXVuaGFwcHkpCisgICAgICAgICAgICByZXN1bHQgKz0gImhhcHB5IjsKKworCisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2RPYmplY3QvbXVsdGlwbGVFeGl0UG9pbnRzL0JhdGNoVXBkYXRlQ2F1c2VkQnlGb3JtYXR0ZXIuamF2YS5hZnRlciBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kT2JqZWN0L211bHRpcGxlRXhpdFBvaW50cy9CYXRjaFVwZGF0ZUNhdXNlZEJ5Rm9ybWF0dGVyLmphdmEuYWZ0ZXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWIwNGFkZgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kT2JqZWN0L211bHRpcGxlRXhpdFBvaW50cy9CYXRjaFVwZGF0ZUNhdXNlZEJ5Rm9ybWF0dGVyLmphdmEuYWZ0ZXIKQEAgLTAsMCArMSwxMTMgQEAKK2ltcG9ydCBqYXZhLnV0aWwuKjsKKworcHVibGljIGNsYXNzIEFCdWcgeworCisgICAgcHJpdmF0ZSBTdHJpbmcgZHJpbmtCZWFyKFN0cmluZyBhbW91bnQpIHsKKyAgICAgICAgU3RyaW5nIGZpcnN0VGltZSA9ICJhc2RmIjsKKworICAgICAgICBpZiAoZmlyc3RUaW1lID09IG51bGwpCisgICAgICAgICAgICByZXR1cm4gImxvc2VyIjsKKworICAgICAgICBBcnJheUxpc3Q8U3RyaW5nPiBib3R0bGVzID0gbmV3IEFycmF5TGlzdDw+KCk7CisgICAgICAgIGJvdHRsZXMuYWRkKCJhc2RmIik7CisKKyAgICAgICAgSW5uZXIgaW5uZXIgPSBuZXcgSW5uZXIoYm90dGxlcykuaW52b2tlKCk7CisgICAgICAgIGlmIChpbm5lci5pcygpKSByZXR1cm4gbnVsbDsKKyAgICAgICAgYm9vbGVhbiBubzMzcHIgPSBpbm5lci5pc05vMzNwcigpOworICAgICAgICBpbnQgZmlyc3QgPSBpbm5lci5nZXRGaXJzdCgpOworICAgICAgICBpbnQgbGFzdCA9IGlubmVyLmdldExhc3QoKTsKKyAgICAgICAgY2hhcltdIHRyaXBlbCA9IGlubmVyLmdldFRyaXBlbCgpOworICAgICAgICBpbnQgckNvdW50ID0gaW5uZXIuZ2V0ckNvdW50KCk7CisgICAgICAgIGludCB3Q291bnQgPSBpbm5lci5nZXR3Q291bnQoKTsKKyAgICAgICAgaW50IG5Db3VudCA9IGlubmVyLmdldG5Db3VudCgpOworICAgICAgICBpbnQgbW9uZXkgPSBpbm5lci5nZXRNb25leSgpOworICAgICAgICBMaXN0PFN0cmluZz4gZXJyb3JzID0gaW5uZXIuZ2V0RXJyb3JzKCk7CisKKyAgICAgICAgYm9vbGVhbiB1bmhhcHB5ID0gbm8zM3ByICYmIGZpcnN0IHx8IG5vMzNwciAmJiBsYXN0OworCisgICAgICAgIFN0cmluZyByZXN1bHQgPSBhbW91bnQgKyBBcnJheXMudG9TdHJpbmcodHJpcGVsKSArIHJDb3VudCArIHdDb3VudCArIG5Db3VudCArIG1vbmV5ICsgZXJyb3JzOworCisgICAgICAgIGlmICghdW5oYXBweSkKKyAgICAgICAgICAgIHJlc3VsdCArPSAiaGFwcHkiOworCisKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICBwcml2YXRlIGNsYXNzIElubmVyIHsKKyAgICAgICAgcHJpdmF0ZSBib29sZWFuIG15UmVzdWx0OworICAgICAgICBwcml2YXRlIEFycmF5TGlzdDxTdHJpbmc+IGJvdHRsZXM7CisgICAgICAgIHByaXZhdGUgTGlzdDxTdHJpbmc+IGVycm9yczsKKyAgICAgICAgcHJpdmF0ZSBpbnQgbW9uZXk7CisgICAgICAgIHByaXZhdGUgaW50IG5Db3VudDsKKyAgICAgICAgcHJpdmF0ZSBpbnQgckNvdW50OworICAgICAgICBwcml2YXRlIGludCB3Q291bnQ7CisgICAgICAgIHByaXZhdGUgY2hhcltdIHRyaXBlbDsKKyAgICAgICAgcHJpdmF0ZSBib29sZWFuIG5vMzNwcjsKKyAgICAgICAgcHJpdmF0ZSBpbnQgZmlyc3Q7CisgICAgICAgIHByaXZhdGUgaW50IGxhc3Q7CisKKyAgICAgICAgcHVibGljIElubmVyKEFycmF5TGlzdDxTdHJpbmc+IGJvdHRsZXMpIHsKKyAgICAgICAgICAgIHRoaXMuYm90dGxlcyA9IGJvdHRsZXM7CisgICAgICAgIH0KKworICAgICAgICBib29sZWFuIGlzKCkgeworICAgICAgICAgICAgcmV0dXJuIG15UmVzdWx0OworICAgICAgICB9CisKKyAgICAgICAgcHVibGljIExpc3Q8U3RyaW5nPiBnZXRFcnJvcnMoKSB7CisgICAgICAgICAgICByZXR1cm4gZXJyb3JzOworICAgICAgICB9CisKKyAgICAgICAgcHVibGljIGludCBnZXRNb25leSgpIHsKKyAgICAgICAgICAgIHJldHVybiBtb25leTsKKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyBpbnQgZ2V0bkNvdW50KCkgeworICAgICAgICAgICAgcmV0dXJuIG5Db3VudDsKKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyBpbnQgZ2V0ckNvdW50KCkgeworICAgICAgICAgICAgcmV0dXJuIHJDb3VudDsKKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyBpbnQgZ2V0d0NvdW50KCkgeworICAgICAgICAgICAgcmV0dXJuIHdDb3VudDsKKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyBjaGFyW10gZ2V0VHJpcGVsKCkgeworICAgICAgICAgICAgcmV0dXJuIHRyaXBlbDsKKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyBib29sZWFuIGlzTm8zM3ByKCkgeworICAgICAgICAgICAgcmV0dXJuIG5vMzNwcjsKKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyBpbnQgZ2V0Rmlyc3QoKSB7CisgICAgICAgICAgICByZXR1cm4gZmlyc3Q7CisgICAgICAgIH0KKworICAgICAgICBwdWJsaWMgaW50IGdldExhc3QoKSB7CisgICAgICAgICAgICByZXR1cm4gbGFzdDsKKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyBJbm5lciBpbnZva2UoKSB7CisgICAgICAgICAgICBlcnJvcnMgPSBuZXcgQXJyYXlMaXN0PD4oKTsKKworICAgICAgICAgICAgbW9uZXkgPSAwOworICAgICAgICAgICAgbkNvdW50ID0gMDsKKyAgICAgICAgICAgIHJDb3VudCA9IDA7CisgICAgICAgICAgICB3Q291bnQgPSAwOworICAgICAgICAgICAgdHJpcGVsID0gbmV3IGNoYXJbYm90dGxlcy5zaXplKCldOworICAgICAgICAgICAgbm8zM3ByID0gZmFsc2U7CisgICAgICAgICAgICBmaXJzdCA9IDA7CisgICAgICAgICAgICBsYXN0ID0gMDsKKyAgICAgICAgICAgIGlmICh0cnVlKSB7CisgICAgICAgICAgICAgICAgbXlSZXN1bHQgPSB0cnVlOworICAgICAgICAgICAgICAgIHJldHVybiB0aGlzOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbXlSZXN1bHQgPSBmYWxzZTsKKyAgICAgICAgICAgIHJldHVybiB0aGlzOworICAgICAgICB9CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kT2JqZWN0L211bHRpcGxlRXhpdFBvaW50cy9Db25kaXRpb25hbEV4aXQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kT2JqZWN0L211bHRpcGxlRXhpdFBvaW50cy9Db25kaXRpb25hbEV4aXQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iODc3OGNiCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2RPYmplY3QvbXVsdGlwbGVFeGl0UG9pbnRzL0NvbmRpdGlvbmFsRXhpdC5qYXZhCkBAIC0wLDAgKzEsOSBAQAorY2xhc3MgRm9vIHsKKyAgU3RyaW5nIGZvbygpIHsKKyAgICA8c2VsZWN0aW9uPlN0cmluZyB2YXIgPSBudWxsOworICAgIGlmICh2YXIgPT0gbnVsbCkgeworICAgICAgcmV0dXJuICIiOworICAgIH08L3NlbGVjdGlvbj4KKyAgICBTeXN0ZW0ub3V0LnByaW50bG4odmFyKTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kT2JqZWN0L211bHRpcGxlRXhpdFBvaW50cy9Db25kaXRpb25hbEV4aXQuamF2YS5hZnRlciBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kT2JqZWN0L211bHRpcGxlRXhpdFBvaW50cy9Db25kaXRpb25hbEV4aXQuamF2YS5hZnRlcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZTRjYTY0Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2RPYmplY3QvbXVsdGlwbGVFeGl0UG9pbnRzL0NvbmRpdGlvbmFsRXhpdC5qYXZhLmFmdGVyCkBAIC0wLDAgKzEsMzEgQEAKK2NsYXNzIEZvbyB7CisgIFN0cmluZyBmb28oKSB7CisgICAgICBJbm5lciBpbm5lciA9IG5ldyBJbm5lcigpLmludm9rZSgpOworICAgICAgaWYgKGlubmVyLmlzKCkpIHJldHVybiAiIjsKKyAgICAgIFN0cmluZyB2YXIgPSBpbm5lci5nZXRWYXIoKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4odmFyKTsKKyAgfQorCisgICAgcHJpdmF0ZSBjbGFzcyBJbm5lciB7CisgICAgICAgIHByaXZhdGUgYm9vbGVhbiBteVJlc3VsdDsKKyAgICAgICAgcHJpdmF0ZSBTdHJpbmcgdmFyOworCisgICAgICAgIGJvb2xlYW4gaXMoKSB7CisgICAgICAgICAgICByZXR1cm4gbXlSZXN1bHQ7CisgICAgICAgIH0KKworICAgICAgICBwdWJsaWMgU3RyaW5nIGdldFZhcigpIHsKKyAgICAgICAgICAgIHJldHVybiB2YXI7CisgICAgICAgIH0KKworICAgICAgICBwdWJsaWMgSW5uZXIgaW52b2tlKCkgeworICAgICAgICAgICAgdmFyID0gbnVsbDsKKyAgICAgICAgICAgIGlmICh2YXIgPT0gbnVsbCkgeworICAgICAgICAgICAgICAgIG15UmVzdWx0ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICByZXR1cm4gdGhpczsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG15UmVzdWx0ID0gZmFsc2U7CisgICAgICAgICAgICByZXR1cm4gdGhpczsKKyAgICAgICAgfQorICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZE9iamVjdC9tdWx0aXBsZUV4aXRQb2ludHMvQ29uZGl0aW9uYWxFeGl0V2l0aG91dENvZGVCbG9jay5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2RPYmplY3QvbXVsdGlwbGVFeGl0UG9pbnRzL0NvbmRpdGlvbmFsRXhpdFdpdGhvdXRDb2RlQmxvY2suamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZjI1N2JhCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2RPYmplY3QvbXVsdGlwbGVFeGl0UG9pbnRzL0NvbmRpdGlvbmFsRXhpdFdpdGhvdXRDb2RlQmxvY2suamF2YQpAQCAtMCwwICsxLDEwIEBACitjbGFzcyBUZXN0IHsKKyAgdm9pZCBmb28oU3RyaW5nW10gYXJncyl7CisgICAgZm9yIChTdHJpbmcgYUFyZyA6IGFyZ3MpIHsKKyAgICAgIDxzZWxlY3Rpb24+Ym9vbGVhbiBhID0gYUFyZyA9PSBudWxsOworICAgICAgaWYgKGFBcmcgPT0gbnVsbCkgY29udGludWU7PC9zZWxlY3Rpb24+CisKKyAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihhQXJnICsgYSk7CisgICAgfQorICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZE9iamVjdC9tdWx0aXBsZUV4aXRQb2ludHMvQ29uZGl0aW9uYWxFeGl0V2l0aG91dENvZGVCbG9jay5qYXZhLmFmdGVyIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2RPYmplY3QvbXVsdGlwbGVFeGl0UG9pbnRzL0NvbmRpdGlvbmFsRXhpdFdpdGhvdXRDb2RlQmxvY2suamF2YS5hZnRlcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OTkyZTE4Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2RPYmplY3QvbXVsdGlwbGVFeGl0UG9pbnRzL0NvbmRpdGlvbmFsRXhpdFdpdGhvdXRDb2RlQmxvY2suamF2YS5hZnRlcgpAQCAtMCwwICsxLDM5IEBACitjbGFzcyBUZXN0IHsKKyAgdm9pZCBmb28oU3RyaW5nW10gYXJncyl7CisgICAgZm9yIChTdHJpbmcgYUFyZyA6IGFyZ3MpIHsKKyAgICAgICAgSW5uZXIgaW5uZXIgPSBuZXcgSW5uZXIoYUFyZykuaW52b2tlKCk7CisgICAgICAgIGlmIChpbm5lci5pcygpKSBjb250aW51ZTsKKyAgICAgICAgYm9vbGVhbiBhID0gaW5uZXIuaXNBKCk7CisKKyAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihhQXJnICsgYSk7CisgICAgfQorICB9CisKKyAgICBwcml2YXRlIGNsYXNzIElubmVyIHsKKyAgICAgICAgcHJpdmF0ZSBib29sZWFuIG15UmVzdWx0OworICAgICAgICBwcml2YXRlIFN0cmluZyBhQXJnOworICAgICAgICBwcml2YXRlIGJvb2xlYW4gYTsKKworICAgICAgICBwdWJsaWMgSW5uZXIoU3RyaW5nIGFBcmcpIHsKKyAgICAgICAgICAgIHRoaXMuYUFyZyA9IGFBcmc7CisgICAgICAgIH0KKworICAgICAgICBib29sZWFuIGlzKCkgeworICAgICAgICAgICAgcmV0dXJuIG15UmVzdWx0OworICAgICAgICB9CisKKyAgICAgICAgcHVibGljIGJvb2xlYW4gaXNBKCkgeworICAgICAgICAgICAgcmV0dXJuIGE7CisgICAgICAgIH0KKworICAgICAgICBwdWJsaWMgSW5uZXIgaW52b2tlKCkgeworICAgICAgICAgICAgYSA9IGFBcmcgPT0gbnVsbDsKKyAgICAgICAgICAgIGlmIChhQXJnID09IG51bGwpIHsKKyAgICAgICAgICAgICAgICBteVJlc3VsdCA9IHRydWU7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBteVJlc3VsdCA9IGZhbHNlOworICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAgIH0KKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZE9iamVjdC9tdWx0aXBsZUV4aXRQb2ludHMvRXh0cmFjdEZyb21Bbm9ueW1vdXMuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kT2JqZWN0L211bHRpcGxlRXhpdFBvaW50cy9FeHRyYWN0RnJvbUFub255bW91cy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc0ODM2MjIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZE9iamVjdC9tdWx0aXBsZUV4aXRQb2ludHMvRXh0cmFjdEZyb21Bbm9ueW1vdXMuamF2YQpAQCAtMCwwICsxLDExIEBACitjbGFzcyBUZXN0IHsKKyAgdm9pZCBmb28oKSB7CisgICAgbmV3IFJ1bm5hYmxlKCkgeworICAgICAgcHVibGljIHZvaWQgcnVuKCkgeworICAgICAgICA8c2VsZWN0aW9uPmludCBpID0gMDsKKyAgICAgICAgaW50IGogPSAwOzwvc2VsZWN0aW9uPgorICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oaSArIGopOworICAgICAgfQorICAgIH0KKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kT2JqZWN0L211bHRpcGxlRXhpdFBvaW50cy9FeHRyYWN0RnJvbUFub255bW91cy5qYXZhLmFmdGVyIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2RPYmplY3QvbXVsdGlwbGVFeGl0UG9pbnRzL0V4dHJhY3RGcm9tQW5vbnltb3VzLmphdmEuYWZ0ZXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGRmYTUyYgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kT2JqZWN0L211bHRpcGxlRXhpdFBvaW50cy9FeHRyYWN0RnJvbUFub255bW91cy5qYXZhLmFmdGVyCkBAIC0wLDAgKzEsMzEgQEAKK2NsYXNzIFRlc3QgeworICB2b2lkIGZvbygpIHsKKyAgICBuZXcgUnVubmFibGUoKSB7CisgICAgICBwdWJsaWMgdm9pZCBydW4oKSB7CisgICAgICAgICAgSW5uZXIgaW5uZXIgPSBuZXcgSW5uZXIoKS5pbnZva2UoKTsKKyAgICAgICAgICBpbnQgaSA9IGlubmVyLmdldEkoKTsKKyAgICAgICAgICBpbnQgaiA9IGlubmVyLmdldEooKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKGkgKyBqKTsKKyAgICAgIH0KKyAgICB9CisgIH0KKworICAgIHByaXZhdGUgY2xhc3MgSW5uZXIgeworICAgICAgICBwcml2YXRlIGludCBpOworICAgICAgICBwcml2YXRlIGludCBqOworCisgICAgICAgIHB1YmxpYyBpbnQgZ2V0SSgpIHsKKyAgICAgICAgICAgIHJldHVybiBpOworICAgICAgICB9CisKKyAgICAgICAgcHVibGljIGludCBnZXRKKCkgeworICAgICAgICAgICAgcmV0dXJuIGo7CisgICAgICAgIH0KKworICAgICAgICBwdWJsaWMgSW5uZXIgaW52b2tlKCkgeworICAgICAgICAgICAgaSA9IDA7CisgICAgICAgICAgICBqID0gMDsKKyAgICAgICAgICAgIHJldHVybiB0aGlzOworICAgICAgICB9CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kT2JqZWN0L211bHRpcGxlRXhpdFBvaW50cy9FeHRyYWN0RnJvbUlmU3RhdGVtZW50SW5zaWRlQW5vbnltb3VzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZE9iamVjdC9tdWx0aXBsZUV4aXRQb2ludHMvRXh0cmFjdEZyb21JZlN0YXRlbWVudEluc2lkZUFub255bW91cy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdiMjQ1YjIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZE9iamVjdC9tdWx0aXBsZUV4aXRQb2ludHMvRXh0cmFjdEZyb21JZlN0YXRlbWVudEluc2lkZUFub255bW91cy5qYXZhCkBAIC0wLDAgKzEsMTMgQEAKK2NsYXNzIFRlc3QgeworICB2b2lkIGZvbygpIHsKKyAgICBuZXcgUnVubmFibGUoKSB7CisgICAgICBwdWJsaWMgdm9pZCBydW4oKSB7CisgICAgICAgICAgPHNlbGVjdGlvbj5TdHJpbmcgdmFyID0gbnVsbDsKKyAgICAgICAgICBpZiAodmFyID09IG51bGwpIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICB9PC9zZWxlY3Rpb24+CisgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKHZhcik7CisgICAgICB9CisgICAgfTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kT2JqZWN0L211bHRpcGxlRXhpdFBvaW50cy9FeHRyYWN0RnJvbUlmU3RhdGVtZW50SW5zaWRlQW5vbnltb3VzLmphdmEuYWZ0ZXIgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZE9iamVjdC9tdWx0aXBsZUV4aXRQb2ludHMvRXh0cmFjdEZyb21JZlN0YXRlbWVudEluc2lkZUFub255bW91cy5qYXZhLmFmdGVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEyOGZlYTQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZE9iamVjdC9tdWx0aXBsZUV4aXRQb2ludHMvRXh0cmFjdEZyb21JZlN0YXRlbWVudEluc2lkZUFub255bW91cy5qYXZhLmFmdGVyCkBAIC0wLDAgKzEsMzUgQEAKK2NsYXNzIFRlc3QgeworICB2b2lkIGZvbygpIHsKKyAgICBuZXcgUnVubmFibGUoKSB7CisgICAgICBwdWJsaWMgdm9pZCBydW4oKSB7CisgICAgICAgICAgSW5uZXIgaW5uZXIgPSBuZXcgSW5uZXIoKS5pbnZva2UoKTsKKyAgICAgICAgICBpZiAoaW5uZXIuaXMoKSkgcmV0dXJuOworICAgICAgICAgIFN0cmluZyB2YXIgPSBpbm5lci5nZXRWYXIoKTsKKyAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4odmFyKTsKKyAgICAgIH0KKyAgICB9OworICB9CisKKyAgICBwcml2YXRlIGNsYXNzIElubmVyIHsKKyAgICAgICAgcHJpdmF0ZSBib29sZWFuIG15UmVzdWx0OworICAgICAgICBwcml2YXRlIFN0cmluZyB2YXI7CisKKyAgICAgICAgYm9vbGVhbiBpcygpIHsKKyAgICAgICAgICAgIHJldHVybiBteVJlc3VsdDsKKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyBTdHJpbmcgZ2V0VmFyKCkgeworICAgICAgICAgICAgcmV0dXJuIHZhcjsKKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyBJbm5lciBpbnZva2UoKSB7CisgICAgICAgICAgICB2YXIgPSBudWxsOworICAgICAgICAgICAgaWYgKHZhciA9PSBudWxsKSB7CisgICAgICAgICAgICAgICAgbXlSZXN1bHQgPSB0cnVlOworICAgICAgICAgICAgICAgIHJldHVybiB0aGlzOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbXlSZXN1bHQgPSBmYWxzZTsKKyAgICAgICAgICAgIHJldHVybiB0aGlzOworICAgICAgICB9CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kT2JqZWN0L211bHRpcGxlRXhpdFBvaW50cy9FeHRyYWN0ZWRBc3NpZ25tZW50RXhwcmVzc2lvbi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2RPYmplY3QvbXVsdGlwbGVFeGl0UG9pbnRzL0V4dHJhY3RlZEFzc2lnbm1lbnRFeHByZXNzaW9uLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGFmYTViMAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kT2JqZWN0L211bHRpcGxlRXhpdFBvaW50cy9FeHRyYWN0ZWRBc3NpZ25tZW50RXhwcmVzc2lvbi5qYXZhCkBAIC0wLDAgKzEsNyBAQAorY2xhc3MgVGVzdCB7CisgIHZvaWQgZm9vKCkgeworICAgIGludCB4ID0gMDsKKyAgICBpbnQgeSA9IDxzZWxlY3Rpb24+eCA9IDE8L3NlbGVjdGlvbj47CisgICAgU3lzdGVtLm91dC5wcmludGxuKHggKyB5KTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kT2JqZWN0L211bHRpcGxlRXhpdFBvaW50cy9FeHRyYWN0ZWRBc3NpZ25tZW50RXhwcmVzc2lvbi5qYXZhLmFmdGVyIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2RPYmplY3QvbXVsdGlwbGVFeGl0UG9pbnRzL0V4dHJhY3RlZEFzc2lnbm1lbnRFeHByZXNzaW9uLmphdmEuYWZ0ZXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjQ4YmFjZQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kT2JqZWN0L211bHRpcGxlRXhpdFBvaW50cy9FeHRyYWN0ZWRBc3NpZ25tZW50RXhwcmVzc2lvbi5qYXZhLmFmdGVyCkBAIC0wLDAgKzEsMjIgQEAKK2NsYXNzIFRlc3QgeworICB2b2lkIGZvbygpIHsKKyAgICBpbnQgeCA9IDA7CisgICAgICBJbm5lciBpbm5lciA9IG5ldyBJbm5lcigpLmludm9rZSgpOworICAgICAgeCA9IGlubmVyLmdldFgoKTsKKyAgICAgIGludCB5ID0geDsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oeCArIHkpOworICB9CisKKyAgICBwcml2YXRlIGNsYXNzIElubmVyIHsKKyAgICAgICAgcHJpdmF0ZSBpbnQgeDsKKworICAgICAgICBwdWJsaWMgaW50IGdldFgoKSB7CisgICAgICAgICAgICByZXR1cm4geDsKKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyBJbm5lciBpbnZva2UoKSB7CisgICAgICAgICAgICB4ID0gMTsKKyAgICAgICAgICAgIHJldHVybiB0aGlzOworICAgICAgICB9CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kT2JqZWN0L211bHRpcGxlRXhpdFBvaW50cy9FeHRyYWN0ZWRJbmNFeHByZXNzaW9uLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZE9iamVjdC9tdWx0aXBsZUV4aXRQb2ludHMvRXh0cmFjdGVkSW5jRXhwcmVzc2lvbi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNmOTgxZTYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZE9iamVjdC9tdWx0aXBsZUV4aXRQb2ludHMvRXh0cmFjdGVkSW5jRXhwcmVzc2lvbi5qYXZhCkBAIC0wLDAgKzEsNyBAQAorY2xhc3MgVGVzdCB7CisgIHZvaWQgZm9vKCkgeworICAgIGludCB4ID0gMDsKKyAgICBpbnQgeSA9IDxzZWxlY3Rpb24+eCsrPC9zZWxlY3Rpb24+OworICAgIFN5c3RlbS5vdXQucHJpbnRsbih4ICsgeSk7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZE9iamVjdC9tdWx0aXBsZUV4aXRQb2ludHMvRXh0cmFjdGVkSW5jRXhwcmVzc2lvbi5qYXZhLmFmdGVyIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2RPYmplY3QvbXVsdGlwbGVFeGl0UG9pbnRzL0V4dHJhY3RlZEluY0V4cHJlc3Npb24uamF2YS5hZnRlcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZjRmM2NmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2RPYmplY3QvbXVsdGlwbGVFeGl0UG9pbnRzL0V4dHJhY3RlZEluY0V4cHJlc3Npb24uamF2YS5hZnRlcgpAQCAtMCwwICsxLDI2IEBACitjbGFzcyBUZXN0IHsKKyAgdm9pZCBmb28oKSB7CisgICAgaW50IHggPSAwOworICAgICAgSW5uZXIgaW5uZXIgPSBuZXcgSW5uZXIoeCkuaW52b2tlKCk7CisgICAgICB4ID0gaW5uZXIuZ2V0WCgpOworICAgICAgaW50IHkgPSB4OworICAgIFN5c3RlbS5vdXQucHJpbnRsbih4ICsgeSk7CisgIH0KKworICAgIHByaXZhdGUgY2xhc3MgSW5uZXIgeworICAgICAgICBwcml2YXRlIGludCB4OworCisgICAgICAgIHB1YmxpYyBJbm5lcihpbnQgeCkgeworICAgICAgICAgICAgdGhpcy54ID0geDsKKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyBpbnQgZ2V0WCgpIHsKKyAgICAgICAgICAgIHJldHVybiB4OworICAgICAgICB9CisKKyAgICAgICAgcHVibGljIElubmVyIGludm9rZSgpIHsKKyAgICAgICAgICAgIHgrKzsKKyAgICAgICAgICAgIHJldHVybiB0aGlzOworICAgICAgICB9CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kT2JqZWN0L211bHRpcGxlRXhpdFBvaW50cy9Gcm9tU3RhdGljQ29udGV4dC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2RPYmplY3QvbXVsdGlwbGVFeGl0UG9pbnRzL0Zyb21TdGF0aWNDb250ZXh0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjFhYzQ2MwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kT2JqZWN0L211bHRpcGxlRXhpdFBvaW50cy9Gcm9tU3RhdGljQ29udGV4dC5qYXZhCkBAIC0wLDAgKzEsMTIgQEAKK2NsYXNzIEJhZyB7CisgICAgSW50ZWdlciB4OworICAgIEludGVnZXIgeTsKK30KKworY2xhc3MgRm9vIHsKKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgZm9vKCkgeworICAgICAgICBCYWcgYiA9IG5ldyBCYWcoKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKDxzZWxlY3Rpb24+Yjwvc2VsZWN0aW9uPi54KTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKGIueCk7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kT2JqZWN0L211bHRpcGxlRXhpdFBvaW50cy9Gcm9tU3RhdGljQ29udGV4dC5qYXZhLmFmdGVyIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2RPYmplY3QvbXVsdGlwbGVFeGl0UG9pbnRzL0Zyb21TdGF0aWNDb250ZXh0LmphdmEuYWZ0ZXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2MyY2FlYwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kT2JqZWN0L211bHRpcGxlRXhpdFBvaW50cy9Gcm9tU3RhdGljQ29udGV4dC5qYXZhLmFmdGVyCkBAIC0wLDAgKzEsMjQgQEAKK2NsYXNzIEJhZyB7CisgICAgSW50ZWdlciB4OworICAgIEludGVnZXIgeTsKK30KKworY2xhc3MgRm9vIHsKKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgZm9vKCkgeworICAgICAgICBCYWcgYiA9IG5ldyBCYWcoKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKG5ldyBJbm5lcihiKS5pbnZva2UoKS54KTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKG5ldyBJbm5lcihiKS5pbnZva2UoKS54KTsKKyAgICB9CisKKyAgICBwcml2YXRlIHN0YXRpYyBjbGFzcyBJbm5lciB7CisgICAgICAgIHByaXZhdGUgQmFnIGI7CisKKyAgICAgICAgcHVibGljIElubmVyKEJhZyBiKSB7CisgICAgICAgICAgICB0aGlzLmIgPSBiOworICAgICAgICB9CisKKyAgICAgICAgcHVibGljIEJhZyBpbnZva2UoKSB7CisgICAgICAgICAgICByZXR1cm4gYjsKKyAgICAgICAgfQorICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZE9iamVjdC9tdWx0aXBsZUV4aXRQb2ludHMvSW5wdXRPdXRwdXQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kT2JqZWN0L211bHRpcGxlRXhpdFBvaW50cy9JbnB1dE91dHB1dC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI3NDhlNWMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZE9iamVjdC9tdWx0aXBsZUV4aXRQb2ludHMvSW5wdXRPdXRwdXQuamF2YQpAQCAtMCwwICsxLDEyIEBACitjbGFzcyBUZXN0IHsKKyAgIHZvaWQgZm9vKCkgeworICAgICAgaW50IGkgPSAwOworICAgICAgICBpbnQgaiA9IDA7CisgICAgICAgIDxzZWxlY3Rpb24+CisgICAgICAgIGludCBrID0gIGkgKyBqOworICAgICAgICBqID0gOTsKKyAgICAgICAgPC9zZWxlY3Rpb24+CisgICAgICAgIGludCBuID0gaStqOworICAgICAgICBpbnQgbSA9IGs7CisgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2RPYmplY3QvbXVsdGlwbGVFeGl0UG9pbnRzL0lucHV0T3V0cHV0LmphdmEuYWZ0ZXIgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZE9iamVjdC9tdWx0aXBsZUV4aXRQb2ludHMvSW5wdXRPdXRwdXQuamF2YS5hZnRlcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mM2Y4MjkzCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2RPYmplY3QvbXVsdGlwbGVFeGl0UG9pbnRzL0lucHV0T3V0cHV0LmphdmEuYWZ0ZXIKQEAgLTAsMCArMSwzOCBAQAorY2xhc3MgVGVzdCB7CisgICB2b2lkIGZvbygpIHsKKyAgICAgIGludCBpID0gMDsKKyAgICAgICAgaW50IGogPSAwOworCisgICAgICAgSW5uZXIgaW5uZXIgPSBuZXcgSW5uZXIoaSwgaikuaW52b2tlKCk7CisgICAgICAgaiA9IGlubmVyLmdldEooKTsKKyAgICAgICBpbnQgayA9IGlubmVyLmdldEsoKTsKKyAgICAgICAgCisgICAgICAgIGludCBuID0gaStqOworICAgICAgICBpbnQgbSA9IGs7CisgICB9CisKKyAgICBwcml2YXRlIGNsYXNzIElubmVyIHsKKyAgICAgICAgcHJpdmF0ZSBpbnQgaTsKKyAgICAgICAgcHJpdmF0ZSBpbnQgajsKKyAgICAgICAgcHJpdmF0ZSBpbnQgazsKKworICAgICAgICBwdWJsaWMgSW5uZXIoaW50IGksIGludCBqKSB7CisgICAgICAgICAgICB0aGlzLmkgPSBpOworICAgICAgICAgICAgdGhpcy5qID0gajsKKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyBpbnQgZ2V0SigpIHsKKyAgICAgICAgICAgIHJldHVybiBqOworICAgICAgICB9CisKKyAgICAgICAgcHVibGljIGludCBnZXRLKCkgeworICAgICAgICAgICAgcmV0dXJuIGs7CisgICAgICAgIH0KKworICAgICAgICBwdWJsaWMgSW5uZXIgaW52b2tlKCkgeworICAgICAgICAgICAgayA9IGkgKyBqOworICAgICAgICAgICAgaiA9IDk7CisgICAgICAgICAgICByZXR1cm4gdGhpczsKKyAgICAgICAgfQorICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZE9iamVjdC9tdWx0aXBsZUV4aXRQb2ludHMvTXVsdGlsaW5lRGVjbGFyYXRpb25zLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZE9iamVjdC9tdWx0aXBsZUV4aXRQb2ludHMvTXVsdGlsaW5lRGVjbGFyYXRpb25zLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODk2MTlkMwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kT2JqZWN0L211bHRpcGxlRXhpdFBvaW50cy9NdWx0aWxpbmVEZWNsYXJhdGlvbnMuamF2YQpAQCAtMCwwICsxLDkgQEAKK2NsYXNzIFRlc3QgeworICAgIHB1YmxpYyB2b2lkIGNvbnRleHQxKCkgeworICAgICAgICA8c2VsZWN0aW9uPmludCBpID0gMCwgaiA9IDA7CisgICAgICAgIGludCBrID0gaSArIGo7CisgICAgICAgIDwvc2VsZWN0aW9uPgorICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oTWVzc2FnZUZvcm1hdC5mb3JtYXQoImk6IHswfSIsIGkpKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKE1lc3NhZ2VGb3JtYXQuZm9ybWF0KCJrOiB7MH0iLCBqKSk7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kT2JqZWN0L211bHRpcGxlRXhpdFBvaW50cy9NdWx0aWxpbmVEZWNsYXJhdGlvbnMuamF2YS5hZnRlciBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kT2JqZWN0L211bHRpcGxlRXhpdFBvaW50cy9NdWx0aWxpbmVEZWNsYXJhdGlvbnMuamF2YS5hZnRlcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NGQ5MzRiCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2RPYmplY3QvbXVsdGlwbGVFeGl0UG9pbnRzL011bHRpbGluZURlY2xhcmF0aW9ucy5qYXZhLmFmdGVyCkBAIC0wLDAgKzEsMzAgQEAKK2NsYXNzIFRlc3QgeworICAgIHB1YmxpYyB2b2lkIGNvbnRleHQxKCkgeworICAgICAgICBJbm5lciBpbm5lciA9IG5ldyBJbm5lcigpLmludm9rZSgpOworICAgICAgICBpbnQgaSA9IGlubmVyLmdldEkoKTsKKyAgICAgICAgaW50IGogPSBpbm5lci5nZXRKKCk7CisgICAgICAgIAorICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oTWVzc2FnZUZvcm1hdC5mb3JtYXQoImk6IHswfSIsIGkpKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKE1lc3NhZ2VGb3JtYXQuZm9ybWF0KCJrOiB7MH0iLCBqKSk7CisgICAgfQorCisgICAgcHJpdmF0ZSBjbGFzcyBJbm5lciB7CisgICAgICAgIHByaXZhdGUgaW50IGk7CisgICAgICAgIHByaXZhdGUgaW50IGo7CisKKyAgICAgICAgcHVibGljIGludCBnZXRJKCkgeworICAgICAgICAgICAgcmV0dXJuIGk7CisgICAgICAgIH0KKworICAgICAgICBwdWJsaWMgaW50IGdldEooKSB7CisgICAgICAgICAgICByZXR1cm4gajsKKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyBJbm5lciBpbnZva2UoKSB7CisgICAgICAgICAgICBpID0gMDsKKyAgICAgICAgICAgIGogPSAwOworICAgICAgICAgICAgaW50IGsgPSBpICsgajsKKyAgICAgICAgICAgIHJldHVybiB0aGlzOworICAgICAgICB9CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kT2JqZWN0L211bHRpcGxlRXhpdFBvaW50cy9Ob25DYW5vbmljYWxOYW1pbmcuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kT2JqZWN0L211bHRpcGxlRXhpdFBvaW50cy9Ob25DYW5vbmljYWxOYW1pbmcuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZGU3MTNkCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2RPYmplY3QvbXVsdGlwbGVFeGl0UG9pbnRzL05vbkNhbm9uaWNhbE5hbWluZy5qYXZhCkBAIC0wLDAgKzEsOCBAQAorY2xhc3MgVGVzdCB7CisgICAgdm9pZCBmdCgpIHsKKyAgICAgICAgPHNlbGVjdGlvbj5TdHJpbmcgX3Jlc3VsdCA9ICIiOworICAgICAgICBfcmVzdWx0ICs9InMiOworICAgICAgICBpbnQgayA9IDA7PC9zZWxlY3Rpb24+CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihfcmVzdWx0ICsgayk7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kT2JqZWN0L211bHRpcGxlRXhpdFBvaW50cy9Ob25DYW5vbmljYWxOYW1pbmcuamF2YS5hZnRlciBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kT2JqZWN0L211bHRpcGxlRXhpdFBvaW50cy9Ob25DYW5vbmljYWxOYW1pbmcuamF2YS5hZnRlcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYzM4MDE1Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2RPYmplY3QvbXVsdGlwbGVFeGl0UG9pbnRzL05vbkNhbm9uaWNhbE5hbWluZy5qYXZhLmFmdGVyCkBAIC0wLDAgKzEsMjggQEAKK2NsYXNzIFRlc3QgeworICAgIHZvaWQgZnQoKSB7CisgICAgICAgIElubmVyIGlubmVyID0gbmV3IElubmVyKCkuaW52b2tlKCk7CisgICAgICAgIFN0cmluZyBfcmVzdWx0ID0gaW5uZXIuZ2V0UmVzdWx0KCk7CisgICAgICAgIGludCBrID0gaW5uZXIuZ2V0SygpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oX3Jlc3VsdCArIGspOworICAgIH0KKworICAgIHByaXZhdGUgY2xhc3MgSW5uZXIgeworICAgICAgICBwcml2YXRlIFN0cmluZyByZXN1bHQ7CisgICAgICAgIHByaXZhdGUgaW50IGs7CisKKyAgICAgICAgcHVibGljIFN0cmluZyBnZXRSZXN1bHQoKSB7CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICB9CisKKyAgICAgICAgcHVibGljIGludCBnZXRLKCkgeworICAgICAgICAgICAgcmV0dXJuIGs7CisgICAgICAgIH0KKworICAgICAgICBwdWJsaWMgSW5uZXIgaW52b2tlKCkgeworICAgICAgICAgICAgcmVzdWx0ID0gIiI7CisgICAgICAgICAgICByZXN1bHQgKz0icyI7CisgICAgICAgICAgICBrID0gMDsKKyAgICAgICAgICAgIHJldHVybiB0aGlzOworICAgICAgICB9CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kT2JqZWN0L211bHRpcGxlRXhpdFBvaW50cy9PdXRwdXRWYXJpYWJsZS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2RPYmplY3QvbXVsdGlwbGVFeGl0UG9pbnRzL091dHB1dFZhcmlhYmxlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTE5ZGUxMgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kT2JqZWN0L211bHRpcGxlRXhpdFBvaW50cy9PdXRwdXRWYXJpYWJsZS5qYXZhCkBAIC0wLDAgKzEsOSBAQAorY2xhc3MgRm9vIHsKKyAgU3RyaW5nIGZvbygpIHsKKyAgICA8c2VsZWN0aW9uPlN0cmluZyB2YXIgPSAiIjsKKyAgICBpZiAodmFyID09IG51bGwpIHsKKyAgICAgIHJldHVybiBudWxsOworICAgIH08L3NlbGVjdGlvbj4KKyAgICBTeXN0ZW0ub3V0LnByaW50bG4odmFyKTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kT2JqZWN0L211bHRpcGxlRXhpdFBvaW50cy9PdXRwdXRWYXJpYWJsZS5qYXZhLmFmdGVyIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2RPYmplY3QvbXVsdGlwbGVFeGl0UG9pbnRzL091dHB1dFZhcmlhYmxlLmphdmEuYWZ0ZXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjMzMGQ0MwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kT2JqZWN0L211bHRpcGxlRXhpdFBvaW50cy9PdXRwdXRWYXJpYWJsZS5qYXZhLmFmdGVyCkBAIC0wLDAgKzEsMzEgQEAKK2NsYXNzIEZvbyB7CisgIFN0cmluZyBmb28oKSB7CisgICAgICBJbm5lciBpbm5lciA9IG5ldyBJbm5lcigpLmludm9rZSgpOworICAgICAgU3RyaW5nIHZhciA9IGlubmVyLmdldFZhcigpOworICAgICAgaWYgKHZhciA9PSBudWxsKSByZXR1cm4gbnVsbDsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4odmFyKTsKKyAgfQorCisgICAgcHJpdmF0ZSBjbGFzcyBJbm5lciB7CisgICAgICAgIHByaXZhdGUgYm9vbGVhbiBteVJlc3VsdDsKKyAgICAgICAgcHJpdmF0ZSBTdHJpbmcgdmFyOworCisgICAgICAgIGJvb2xlYW4gaXMoKSB7CisgICAgICAgICAgICByZXR1cm4gbXlSZXN1bHQ7CisgICAgICAgIH0KKworICAgICAgICBwdWJsaWMgU3RyaW5nIGdldFZhcigpIHsKKyAgICAgICAgICAgIHJldHVybiB2YXI7CisgICAgICAgIH0KKworICAgICAgICBwdWJsaWMgSW5uZXIgaW52b2tlKCkgeworICAgICAgICAgICAgdmFyID0gIiI7CisgICAgICAgICAgICBpZiAodmFyID09IG51bGwpIHsKKyAgICAgICAgICAgICAgICBteVJlc3VsdCA9IHRydWU7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBteVJlc3VsdCA9IGZhbHNlOworICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAgIH0KKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2RPYmplY3QvbXVsdGlwbGVFeGl0UG9pbnRzL091dHB1dFZhcnNSZWZlcmVuY2VzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZE9iamVjdC9tdWx0aXBsZUV4aXRQb2ludHMvT3V0cHV0VmFyc1JlZmVyZW5jZXMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMDAyOGM0Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2RPYmplY3QvbXVsdGlwbGVFeGl0UG9pbnRzL091dHB1dFZhcnNSZWZlcmVuY2VzLmphdmEKQEAgLTAsMCArMSwxMCBAQAorY2xhc3MgVGVzdCB7CisgICAgcHVibGljIHZvaWQgY29udGV4dDEoKSB7CisgICAgICAgIDxzZWxlY3Rpb24+aW50IGkgPSAxOworICAgICAgICBpICs9IDE7CisgICAgICAgIGludCBrID0gMjsKKyAgICAgICAgaysrOzwvc2VsZWN0aW9uPgorICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oTWVzc2FnZUZvcm1hdC5mb3JtYXQoImk6IHswfSIsIGkpKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKE1lc3NhZ2VGb3JtYXQuZm9ybWF0KCJrOiB7MH0iLCBrKSk7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kT2JqZWN0L211bHRpcGxlRXhpdFBvaW50cy9PdXRwdXRWYXJzUmVmZXJlbmNlcy5qYXZhLmFmdGVyIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2RPYmplY3QvbXVsdGlwbGVFeGl0UG9pbnRzL091dHB1dFZhcnNSZWZlcmVuY2VzLmphdmEuYWZ0ZXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjUyNzY5MQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kT2JqZWN0L211bHRpcGxlRXhpdFBvaW50cy9PdXRwdXRWYXJzUmVmZXJlbmNlcy5qYXZhLmFmdGVyCkBAIC0wLDAgKzEsMzAgQEAKK2NsYXNzIFRlc3QgeworICAgIHB1YmxpYyB2b2lkIGNvbnRleHQxKCkgeworICAgICAgICBJbm5lciBpbm5lciA9IG5ldyBJbm5lcigpLmludm9rZSgpOworICAgICAgICBpbnQgaSA9IGlubmVyLmdldEkoKTsKKyAgICAgICAgaW50IGsgPSBpbm5lci5nZXRLKCk7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihNZXNzYWdlRm9ybWF0LmZvcm1hdCgiaTogezB9IiwgaSkpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oTWVzc2FnZUZvcm1hdC5mb3JtYXQoIms6IHswfSIsIGspKTsKKyAgICB9CisKKyAgICBwcml2YXRlIGNsYXNzIElubmVyIHsKKyAgICAgICAgcHJpdmF0ZSBpbnQgaTsKKyAgICAgICAgcHJpdmF0ZSBpbnQgazsKKworICAgICAgICBwdWJsaWMgaW50IGdldEkoKSB7CisgICAgICAgICAgICByZXR1cm4gaTsKKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyBpbnQgZ2V0SygpIHsKKyAgICAgICAgICAgIHJldHVybiBrOworICAgICAgICB9CisKKyAgICAgICAgcHVibGljIElubmVyIGludm9rZSgpIHsKKyAgICAgICAgICAgIGkgPSAxOworICAgICAgICAgICAgaSArPSAxOworICAgICAgICAgICAgayA9IDI7CisgICAgICAgICAgICBrKys7CisgICAgICAgICAgICByZXR1cm4gdGhpczsKKyAgICAgICAgfQorICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZE9iamVjdC9tdWx0aXBsZUV4aXRQb2ludHMvUmV0dXJuRXhpdFN0YXRlbWVudC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2RPYmplY3QvbXVsdGlwbGVFeGl0UG9pbnRzL1JldHVybkV4aXRTdGF0ZW1lbnQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNWU5MmNiCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2RPYmplY3QvbXVsdGlwbGVFeGl0UG9pbnRzL1JldHVybkV4aXRTdGF0ZW1lbnQuamF2YQpAQCAtMCwwICsxLDE0IEBACitjbGFzcyBBIHsKKyAgYm9vbGVhbiBmb28oKSB7CisKKyAgICA8c2VsZWN0aW9uPmZvciAoaW50IGkgPSAwOyBpIDwgOTsgaSsrKSB7CisgICAgICBmaW5hbCBCb29sZWFuIGZvbyA9IEJvb2xlYW4uRkFMU0U7CisgICAgICBpZiAoZm9vICE9IG51bGwpIHsKKyAgICAgICAgcmV0dXJuIGZvbzsKKyAgICAgIH0KKyAgICB9PC9zZWxlY3Rpb24+CisKKworICAgIHJldHVybiBmYWxzZTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kT2JqZWN0L211bHRpcGxlRXhpdFBvaW50cy9SZXR1cm5FeGl0U3RhdGVtZW50LmphdmEuYWZ0ZXIgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZE9iamVjdC9tdWx0aXBsZUV4aXRQb2ludHMvUmV0dXJuRXhpdFN0YXRlbWVudC5qYXZhLmFmdGVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFhYjc1MWEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZE9iamVjdC9tdWx0aXBsZUV4aXRQb2ludHMvUmV0dXJuRXhpdFN0YXRlbWVudC5qYXZhLmFmdGVyCkBAIC0wLDAgKzEsMzUgQEAKK2NsYXNzIEEgeworICBib29sZWFuIGZvbygpIHsKKworICAgICAgSW5uZXIgaW5uZXIgPSBuZXcgSW5uZXIoKS5pbnZva2UoKTsKKyAgICAgIGlmIChpbm5lci5pcygpKSByZXR1cm4gaW5uZXIuZ2V0Rm9vKCk7CisKKworICAgICAgcmV0dXJuIGZhbHNlOworICB9CisKKyAgICBwcml2YXRlIGNsYXNzIElubmVyIHsKKyAgICAgICAgcHJpdmF0ZSBib29sZWFuIG15UmVzdWx0OworICAgICAgICBwcml2YXRlIEJvb2xlYW4gZm9vOworCisgICAgICAgIGJvb2xlYW4gaXMoKSB7CisgICAgICAgICAgICByZXR1cm4gbXlSZXN1bHQ7CisgICAgICAgIH0KKworICAgICAgICBwdWJsaWMgQm9vbGVhbiBnZXRGb28oKSB7CisgICAgICAgICAgICByZXR1cm4gZm9vOworICAgICAgICB9CisKKyAgICAgICAgcHVibGljIElubmVyIGludm9rZSgpIHsKKyAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgOTsgaSsrKSB7CisgICAgICAgICAgICAgICAgZm9vID0gQm9vbGVhbi5GQUxTRTsKKyAgICAgICAgICAgICAgaWYgKGZvbyAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgICBteVJlc3VsdCA9IHRydWU7CisgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpczsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgbXlSZXN1bHQgPSBmYWxzZTsKKyAgICAgICAgICAgIHJldHVybiB0aGlzOworICAgICAgICB9CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kT2JqZWN0L211bHRpcGxlRXhpdFBvaW50cy9TdGF0aWNJbm5lci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2RPYmplY3QvbXVsdGlwbGVFeGl0UG9pbnRzL1N0YXRpY0lubmVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWIyYWJhNQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kT2JqZWN0L211bHRpcGxlRXhpdFBvaW50cy9TdGF0aWNJbm5lci5qYXZhCkBAIC0wLDAgKzEsMTAgQEAKK2NsYXNzIFRlc3QgeworICAgdm9pZCBmb28oKSB7CisgICAgICBpbnQgaSA9IDA7CisgICAgICA8c2VsZWN0aW9uPgorICAgICAgaW50IGogPSBpOworICAgICAgaW50IGsgPSAwOworICAgICAgPC9zZWxlY3Rpb24+CisgICAgICBpbnQgbSA9IGsgKyBqOworICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kT2JqZWN0L211bHRpcGxlRXhpdFBvaW50cy9TdGF0aWNJbm5lci5qYXZhLmFmdGVyIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2RPYmplY3QvbXVsdGlwbGVFeGl0UG9pbnRzL1N0YXRpY0lubmVyLmphdmEuYWZ0ZXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDEzNThkZgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kT2JqZWN0L211bHRpcGxlRXhpdFBvaW50cy9TdGF0aWNJbm5lci5qYXZhLmFmdGVyCkBAIC0wLDAgKzEsMzUgQEAKK2NsYXNzIFRlc3QgeworICAgdm9pZCBmb28oKSB7CisgICAgICBpbnQgaSA9IDA7CisKKyAgICAgICBJbm5lciBpbm5lciA9IG5ldyBJbm5lcihpKS5pbnZva2UoKTsKKyAgICAgICBpbnQgayA9IGlubmVyLmdldEsoKTsKKyAgICAgICBpbnQgaiA9IGlubmVyLmdldEooKTsKKyAgICAgIAorICAgICAgaW50IG0gPSBrICsgajsKKyAgIH0KKworICAgIHByaXZhdGUgY2xhc3MgSW5uZXIgeworICAgICAgICBwcml2YXRlIGludCBpOworICAgICAgICBwcml2YXRlIGludCBqOworICAgICAgICBwcml2YXRlIGludCBrOworCisgICAgICAgIHB1YmxpYyBJbm5lcihpbnQgaSkgeworICAgICAgICAgICAgdGhpcy5pID0gaTsKKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyBpbnQgZ2V0SigpIHsKKyAgICAgICAgICAgIHJldHVybiBqOworICAgICAgICB9CisKKyAgICAgICAgcHVibGljIGludCBnZXRLKCkgeworICAgICAgICAgICAgcmV0dXJuIGs7CisgICAgICAgIH0KKworICAgICAgICBwdWJsaWMgSW5uZXIgaW52b2tlKCkgeworICAgICAgICAgICAgaiA9IGk7CisgICAgICAgICAgICBrID0gMDsKKyAgICAgICAgICAgIHJldHVybiB0aGlzOworICAgICAgICB9CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kT2JqZWN0L211bHRpcGxlRXhpdFBvaW50cy9VbmlxdWVPYmplY3ROYW1lLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZE9iamVjdC9tdWx0aXBsZUV4aXRQb2ludHMvVW5pcXVlT2JqZWN0TmFtZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjliNjVmNWUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZE9iamVjdC9tdWx0aXBsZUV4aXRQb2ludHMvVW5pcXVlT2JqZWN0TmFtZS5qYXZhCkBAIC0wLDAgKzEsMTggQEAKK2NsYXNzIEEgeworICAgIGludCBmb28oKSB7CisgICAgICAgIGludCB4ID0gNDU7CisgICAgICAgIGludCB5ID0gNDY7CisgICAgICAgIGludCBpbm5lciA9IDQ3OworICAgICAgICA8c2VsZWN0aW9uPnggPSB5ICsgMTsKKyAgICAgICAgeSA9IDc3Ozwvc2VsZWN0aW9uPgorICAgICAgICB4ID0geSArIHggKyA0NTsKKyAgICAgICAgYm9vbGVhbiB6ID0gdHJ1ZTsKKyAgICAgICAgaWYgKHopIHsKKyAgICAgICAgICAgIHJldHVybiB5OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgeCA9IHk7CisgICAgICAgIH0KKyAgICAgICAgeSA9IDQ1OworICAgICAgICByZXR1cm4geDsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2RPYmplY3QvbXVsdGlwbGVFeGl0UG9pbnRzL1VuaXF1ZU9iamVjdE5hbWUuamF2YS5hZnRlciBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kT2JqZWN0L211bHRpcGxlRXhpdFBvaW50cy9VbmlxdWVPYmplY3ROYW1lLmphdmEuYWZ0ZXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWUyYWJjNgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kT2JqZWN0L211bHRpcGxlRXhpdFBvaW50cy9VbmlxdWVPYmplY3ROYW1lLmphdmEuYWZ0ZXIKQEAgLTAsMCArMSw0MiBAQAorY2xhc3MgQSB7CisgICAgaW50IGZvbygpIHsKKyAgICAgICAgaW50IHggPSA0NTsKKyAgICAgICAgaW50IHkgPSA0NjsKKyAgICAgICAgaW50IGlubmVyID0gNDc7CisgICAgICAgIElubmVyIGlubmVyMSA9IG5ldyBJbm5lcih5KS5pbnZva2UoKTsKKyAgICAgICAgeSA9IGlubmVyMS5nZXRZKCk7CisgICAgICAgIHggPSBpbm5lcjEuZ2V0WCgpOworICAgICAgICB4ID0geSArIHggKyA0NTsKKyAgICAgICAgYm9vbGVhbiB6ID0gdHJ1ZTsKKyAgICAgICAgaWYgKHopIHsKKyAgICAgICAgICAgIHJldHVybiB5OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgeCA9IHk7CisgICAgICAgIH0KKyAgICAgICAgeSA9IDQ1OworICAgICAgICByZXR1cm4geDsKKyAgICB9CisKKyAgICBwcml2YXRlIGNsYXNzIElubmVyIHsKKyAgICAgICAgcHJpdmF0ZSBpbnQgeTsKKyAgICAgICAgcHJpdmF0ZSBpbnQgeDsKKworICAgICAgICBwdWJsaWMgSW5uZXIoaW50IHkpIHsKKyAgICAgICAgICAgIHRoaXMueSA9IHk7CisgICAgICAgIH0KKworICAgICAgICBwdWJsaWMgaW50IGdldFgoKSB7CisgICAgICAgICAgICByZXR1cm4geDsKKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyBpbnQgZ2V0WSgpIHsKKyAgICAgICAgICAgIHJldHVybiB5OworICAgICAgICB9CisKKyAgICAgICAgcHVibGljIElubmVyIGludm9rZSgpIHsKKyAgICAgICAgICAgIHggPSB5ICsgMTsKKyAgICAgICAgICAgIHkgPSA3NzsKKyAgICAgICAgICAgIHJldHVybiB0aGlzOworICAgICAgICB9CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kT2JqZWN0L211bHRpcGxlRXhpdFBvaW50cy9XaXRoSW5uZXJDbGFzc2VzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZE9iamVjdC9tdWx0aXBsZUV4aXRQb2ludHMvV2l0aElubmVyQ2xhc3Nlcy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg4MDI4M2QKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZE9iamVjdC9tdWx0aXBsZUV4aXRQb2ludHMvV2l0aElubmVyQ2xhc3Nlcy5qYXZhCkBAIC0wLDAgKzEsNTQgQEAKK3B1YmxpYyBjbGFzcyBEZW1vIHsKKworCisgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworCisgICAgICAgIDxzZWxlY3Rpb24+UG9qbzEgcDEgPSBuZXcgUG9qbzEoInAxIik7CisgICAgICAgIFBvam8yIHAyID0gbmV3IFBvam8yKCJwMiIpeworICAgICAgICAgICAgQE92ZXJyaWRlCisgICAgICAgICAgICBwdWJsaWMgU3RyaW5nIGdldENvbnRlbnQoKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuICItLS0tLS0tLS0tLS0iOworICAgICAgICAgICAgfQorICAgICAgICB9OworICAgICAgICA8L3NlbGVjdGlvbj4KKworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4ocDEuZ2V0Q29udGVudCgpICsgcDIuZ2V0Q29udGVudCgpKTsKKworICAgIH0KKworCisgICAgcHVibGljIHN0YXRpYyBjbGFzcyBQb2pvMSB7CisgICAgICAgIHByaXZhdGUgU3RyaW5nIGNvbnRlbnQ7CisKKyAgICAgICAgcHVibGljIFBvam8xKFN0cmluZyBjb250ZW50KSB7CisgICAgICAgICAgICB0aGlzLmNvbnRlbnQgPSBjb250ZW50OworICAgICAgICB9CisKKyAgICAgICAgcHVibGljIFN0cmluZyBnZXRDb250ZW50KCkgeworICAgICAgICAgICAgcmV0dXJuIGNvbnRlbnQ7CisgICAgICAgIH0KKworICAgICAgICBwdWJsaWMgdm9pZCBzZXRDb250ZW50KFN0cmluZyBjb250ZW50KSB7CisgICAgICAgICAgICB0aGlzLmNvbnRlbnQgPSBjb250ZW50OworICAgICAgICB9CisgICAgfQorCisgICAgcHVibGljIHN0YXRpYyBjbGFzcyBQb2pvMiB7CisgICAgICAgIHByaXZhdGUgU3RyaW5nIGNvbnRlbnQ7CisKKyAgICAgICAgcHVibGljIFBvam8yKFN0cmluZyBjb250ZW50KSB7CisgICAgICAgICAgICB0aGlzLmNvbnRlbnQgPSBjb250ZW50OworICAgICAgICB9CisKKyAgICAgICAgcHVibGljIFN0cmluZyBnZXRDb250ZW50KCkgeworICAgICAgICAgICAgcmV0dXJuIGNvbnRlbnQ7CisgICAgICAgIH0KKworICAgICAgICBwdWJsaWMgdm9pZCBzZXRDb250ZW50KFN0cmluZyBjb250ZW50KSB7CisgICAgICAgICAgICB0aGlzLmNvbnRlbnQgPSBjb250ZW50OworICAgICAgICB9CisgICAgfQorfQorCisKKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2RPYmplY3QvbXVsdGlwbGVFeGl0UG9pbnRzL1dpdGhJbm5lckNsYXNzZXMuamF2YS5hZnRlciBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kT2JqZWN0L211bHRpcGxlRXhpdFBvaW50cy9XaXRoSW5uZXJDbGFzc2VzLmphdmEuYWZ0ZXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDU2MjRkYwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0TWV0aG9kT2JqZWN0L211bHRpcGxlRXhpdFBvaW50cy9XaXRoSW5uZXJDbGFzc2VzLmphdmEuYWZ0ZXIKQEAgLTAsMCArMSw3NCBAQAorcHVibGljIGNsYXNzIERlbW8geworCisKKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisKKyAgICAgICAgSW5uZXIgaW5uZXIgPSBuZXcgSW5uZXIoKS5pbnZva2UoKTsKKyAgICAgICAgUG9qbzEgcDEgPSBpbm5lci5nZXRQMSgpOworICAgICAgICBQb2pvMiBwMiA9IGlubmVyLmdldFAyKCk7CisgICAgICAgIAorCisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihwMS5nZXRDb250ZW50KCkgKyBwMi5nZXRDb250ZW50KCkpOworCisgICAgfQorCisKKyAgICBwdWJsaWMgc3RhdGljIGNsYXNzIFBvam8xIHsKKyAgICAgICAgcHJpdmF0ZSBTdHJpbmcgY29udGVudDsKKworICAgICAgICBwdWJsaWMgUG9qbzEoU3RyaW5nIGNvbnRlbnQpIHsKKyAgICAgICAgICAgIHRoaXMuY29udGVudCA9IGNvbnRlbnQ7CisgICAgICAgIH0KKworICAgICAgICBwdWJsaWMgU3RyaW5nIGdldENvbnRlbnQoKSB7CisgICAgICAgICAgICByZXR1cm4gY29udGVudDsKKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyB2b2lkIHNldENvbnRlbnQoU3RyaW5nIGNvbnRlbnQpIHsKKyAgICAgICAgICAgIHRoaXMuY29udGVudCA9IGNvbnRlbnQ7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwdWJsaWMgc3RhdGljIGNsYXNzIFBvam8yIHsKKyAgICAgICAgcHJpdmF0ZSBTdHJpbmcgY29udGVudDsKKworICAgICAgICBwdWJsaWMgUG9qbzIoU3RyaW5nIGNvbnRlbnQpIHsKKyAgICAgICAgICAgIHRoaXMuY29udGVudCA9IGNvbnRlbnQ7CisgICAgICAgIH0KKworICAgICAgICBwdWJsaWMgU3RyaW5nIGdldENvbnRlbnQoKSB7CisgICAgICAgICAgICByZXR1cm4gY29udGVudDsKKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyB2b2lkIHNldENvbnRlbnQoU3RyaW5nIGNvbnRlbnQpIHsKKyAgICAgICAgICAgIHRoaXMuY29udGVudCA9IGNvbnRlbnQ7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwcml2YXRlIHN0YXRpYyBjbGFzcyBJbm5lciB7CisgICAgICAgIHByaXZhdGUgUG9qbzEgcDE7CisgICAgICAgIHByaXZhdGUgUG9qbzIgcDI7CisKKyAgICAgICAgcHVibGljIFBvam8xIGdldFAxKCkgeworICAgICAgICAgICAgcmV0dXJuIHAxOworICAgICAgICB9CisKKyAgICAgICAgcHVibGljIFBvam8yIGdldFAyKCkgeworICAgICAgICAgICAgcmV0dXJuIHAyOworICAgICAgICB9CisKKyAgICAgICAgcHVibGljIElubmVyIGludm9rZSgpIHsKKyAgICAgICAgICAgIHAxID0gbmV3IFBvam8xKCJwMSIpOworICAgICAgICAgICAgcDIgPSBuZXcgUG9qbzIoInAyIikgeworICAgICAgICAgICAgICAgIEBPdmVycmlkZQorICAgICAgICAgICAgICAgIHB1YmxpYyBTdHJpbmcgZ2V0Q29udGVudCgpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuICItLS0tLS0tLS0tLS0iOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH07CisgICAgICAgICAgICByZXR1cm4gdGhpczsKKyAgICAgICAgfQorICAgIH0KK30KKworCisKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0U3VwZXJDbGFzcy9jb25mbGljdEFic3RyYWN0UGFja2FnZUxvY2FsTWV0aG9kL2FmdGVyL2EvVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RTdXBlckNsYXNzL2NvbmZsaWN0QWJzdHJhY3RQYWNrYWdlTG9jYWxNZXRob2QvYWZ0ZXIvYS9UZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWRlMDkwMgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0U3VwZXJDbGFzcy9jb25mbGljdEFic3RyYWN0UGFja2FnZUxvY2FsTWV0aG9kL2FmdGVyL2EvVGVzdC5qYXZhCkBAIC0wLDAgKzEsNSBAQAorcGFja2FnZSBhOworCitwdWJsaWMgYWJzdHJhY3QgY2xhc3MgVGVzdCB7CisgICAgYWJzdHJhY3Qgdm9pZCB4KCk7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RTdXBlckNsYXNzL2NvbmZsaWN0QWJzdHJhY3RQYWNrYWdlTG9jYWxNZXRob2QvYWZ0ZXIvYi9FLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdFN1cGVyQ2xhc3MvY29uZmxpY3RBYnN0cmFjdFBhY2thZ2VMb2NhbE1ldGhvZC9hZnRlci9iL0UuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNmU0YjY3Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RTdXBlckNsYXNzL2NvbmZsaWN0QWJzdHJhY3RQYWNrYWdlTG9jYWxNZXRob2QvYWZ0ZXIvYi9FLmphdmEKQEAgLTAsMCArMSwyIEBACitwYWNrYWdlIGI7CitjbGFzcyBFe30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdFN1cGVyQ2xhc3MvY29uZmxpY3RBYnN0cmFjdFBhY2thZ2VMb2NhbE1ldGhvZC9hZnRlci9iL1Rlc3RTdWJjbGFzcy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RTdXBlckNsYXNzL2NvbmZsaWN0QWJzdHJhY3RQYWNrYWdlTG9jYWxNZXRob2QvYWZ0ZXIvYi9UZXN0U3ViY2xhc3MuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYzc3MDBlMQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0U3VwZXJDbGFzcy9jb25mbGljdEFic3RyYWN0UGFja2FnZUxvY2FsTWV0aG9kL2FmdGVyL2IvVGVzdFN1YmNsYXNzLmphdmEKQEAgLTAsMCArMSw4IEBACitwYWNrYWdlIGI7CisKK2ltcG9ydCBhLlRlc3Q7CisKK3B1YmxpYyBjbGFzcyBUZXN0U3ViY2xhc3MgZXh0ZW5kcyBUZXN0IHsKKyAgICBAamF2YS5sYW5nLk92ZXJyaWRlIHZvaWQgeCgpIHsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RTdXBlckNsYXNzL2NvbmZsaWN0QWJzdHJhY3RQYWNrYWdlTG9jYWxNZXRob2QvYmVmb3JlL2EvVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RTdXBlckNsYXNzL2NvbmZsaWN0QWJzdHJhY3RQYWNrYWdlTG9jYWxNZXRob2QvYmVmb3JlL2EvVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVmZTcyMDIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdFN1cGVyQ2xhc3MvY29uZmxpY3RBYnN0cmFjdFBhY2thZ2VMb2NhbE1ldGhvZC9iZWZvcmUvYS9UZXN0LmphdmEKQEAgLTAsMCArMSw1IEBACitwYWNrYWdlIGE7CitwdWJsaWMgY2xhc3MgVGVzdCB7CisgICAgdm9pZCB4KCkgeworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdFN1cGVyQ2xhc3MvY29uZmxpY3RBYnN0cmFjdFBhY2thZ2VMb2NhbE1ldGhvZC9iZWZvcmUvYi9FLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdFN1cGVyQ2xhc3MvY29uZmxpY3RBYnN0cmFjdFBhY2thZ2VMb2NhbE1ldGhvZC9iZWZvcmUvYi9FLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTZlNGI2NwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0U3VwZXJDbGFzcy9jb25mbGljdEFic3RyYWN0UGFja2FnZUxvY2FsTWV0aG9kL2JlZm9yZS9iL0UuamF2YQpAQCAtMCwwICsxLDIgQEAKK3BhY2thZ2UgYjsKK2NsYXNzIEV7fQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0U3VwZXJDbGFzcy9jb25mbGljdE1vdmVBYnN0cmFjdFdpdGhQcml2YXRlTWV0aG9kL2FmdGVyL1Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0U3VwZXJDbGFzcy9jb25mbGljdE1vdmVBYnN0cmFjdFdpdGhQcml2YXRlTWV0aG9kL2FmdGVyL1Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMTlkNjM5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RTdXBlckNsYXNzL2NvbmZsaWN0TW92ZUFic3RyYWN0V2l0aFByaXZhdGVNZXRob2QvYWZ0ZXIvVGVzdC5qYXZhCkBAIC0wLDAgKzEsNSBAQAorcHVibGljIGFic3RyYWN0IGNsYXNzIFRlc3QgeworICAgIGFic3RyYWN0IHZvaWQgeCgpOworCisgICAgcHJpdmF0ZSB2b2lkIHh4KCl7fQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0U3VwZXJDbGFzcy9jb25mbGljdE1vdmVBYnN0cmFjdFdpdGhQcml2YXRlTWV0aG9kL2FmdGVyL1Rlc3RTdWJjbGFzcy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RTdXBlckNsYXNzL2NvbmZsaWN0TW92ZUFic3RyYWN0V2l0aFByaXZhdGVNZXRob2QvYWZ0ZXIvVGVzdFN1YmNsYXNzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTRiZDY5YQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0U3VwZXJDbGFzcy9jb25mbGljdE1vdmVBYnN0cmFjdFdpdGhQcml2YXRlTWV0aG9kL2FmdGVyL1Rlc3RTdWJjbGFzcy5qYXZhCkBAIC0wLDAgKzEsNyBAQAorcHVibGljIGNsYXNzIFRlc3RTdWJjbGFzcyBleHRlbmRzIFRlc3QgeworICAgIEBqYXZhLmxhbmcuT3ZlcnJpZGUKKyAgICB2b2lkIHgoKSB7CisgICAgICB4eCgpOworICAgIH0KKworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0U3VwZXJDbGFzcy9jb25mbGljdE1vdmVBYnN0cmFjdFdpdGhQcml2YXRlTWV0aG9kL2JlZm9yZS9UZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdFN1cGVyQ2xhc3MvY29uZmxpY3RNb3ZlQWJzdHJhY3RXaXRoUHJpdmF0ZU1ldGhvZC9iZWZvcmUvVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAxOTZiMmMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdFN1cGVyQ2xhc3MvY29uZmxpY3RNb3ZlQWJzdHJhY3RXaXRoUHJpdmF0ZU1ldGhvZC9iZWZvcmUvVGVzdC5qYXZhCkBAIC0wLDAgKzEsNyBAQAorcHVibGljIGNsYXNzIFRlc3QgIHsKKyAgICB2b2lkIHgoKSB7CisgICAgICB4eCgpOworICAgIH0KKworICAgIHByaXZhdGUgdm9pZCB4eCgpe30KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdFN1cGVyQ2xhc3MvY29uZmxpY3RVc2luZ1BhY2thZ2VMb2NhbE1ldGhvZC9hZnRlci9hL1N1cC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RTdXBlckNsYXNzL2NvbmZsaWN0VXNpbmdQYWNrYWdlTG9jYWxNZXRob2QvYWZ0ZXIvYS9TdXAuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZTllY2JhOAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0U3VwZXJDbGFzcy9jb25mbGljdFVzaW5nUGFja2FnZUxvY2FsTWV0aG9kL2FmdGVyL2EvU3VwLmphdmEKQEAgLTAsMCArMSw0IEBACitwYWNrYWdlIGE7CitwdWJsaWMgY2xhc3MgU3VwIHsKKyAgdm9pZCBmb28oKXt9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RTdXBlckNsYXNzL2NvbmZsaWN0VXNpbmdQYWNrYWdlTG9jYWxNZXRob2QvYWZ0ZXIvYS9UZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdFN1cGVyQ2xhc3MvY29uZmxpY3RVc2luZ1BhY2thZ2VMb2NhbE1ldGhvZC9hZnRlci9hL1Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MDE5OWYwNAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0U3VwZXJDbGFzcy9jb25mbGljdFVzaW5nUGFja2FnZUxvY2FsTWV0aG9kL2FmdGVyL2EvVGVzdC5qYXZhCkBAIC0wLDAgKzEsNyBAQAorcGFja2FnZSBhOworCitwdWJsaWMgY2xhc3MgVGVzdCBleHRlbmRzIFN1cCB7CisgICAgdm9pZCB4KCkgeworICAgICAgZm9vKCk7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0U3VwZXJDbGFzcy9jb25mbGljdFVzaW5nUGFja2FnZUxvY2FsTWV0aG9kL2FmdGVyL2IvRS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RTdXBlckNsYXNzL2NvbmZsaWN0VXNpbmdQYWNrYWdlTG9jYWxNZXRob2QvYWZ0ZXIvYi9FLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTZlNGI2NwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0U3VwZXJDbGFzcy9jb25mbGljdFVzaW5nUGFja2FnZUxvY2FsTWV0aG9kL2FmdGVyL2IvRS5qYXZhCkBAIC0wLDAgKzEsMiBAQAorcGFja2FnZSBiOworY2xhc3MgRXt9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RTdXBlckNsYXNzL2NvbmZsaWN0VXNpbmdQYWNrYWdlTG9jYWxNZXRob2QvYWZ0ZXIvYi9UZXN0U3ViY2xhc3MuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0U3VwZXJDbGFzcy9jb25mbGljdFVzaW5nUGFja2FnZUxvY2FsTWV0aG9kL2FmdGVyL2IvVGVzdFN1YmNsYXNzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWYzOTcyMAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0U3VwZXJDbGFzcy9jb25mbGljdFVzaW5nUGFja2FnZUxvY2FsTWV0aG9kL2FmdGVyL2IvVGVzdFN1YmNsYXNzLmphdmEKQEAgLTAsMCArMSw2IEBACitwYWNrYWdlIGI7CisKK2ltcG9ydCBhLlRlc3Q7CisKK3B1YmxpYyBjbGFzcyBUZXN0U3ViY2xhc3MgIGV4dGVuZHMgVGVzdCB7CisgICAgfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0U3VwZXJDbGFzcy9jb25mbGljdFVzaW5nUGFja2FnZUxvY2FsTWV0aG9kL2JlZm9yZS9hL1N1cC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RTdXBlckNsYXNzL2NvbmZsaWN0VXNpbmdQYWNrYWdlTG9jYWxNZXRob2QvYmVmb3JlL2EvU3VwLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2U5ZWNiYTgKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdFN1cGVyQ2xhc3MvY29uZmxpY3RVc2luZ1BhY2thZ2VMb2NhbE1ldGhvZC9iZWZvcmUvYS9TdXAuamF2YQpAQCAtMCwwICsxLDQgQEAKK3BhY2thZ2UgYTsKK3B1YmxpYyBjbGFzcyBTdXAgeworICB2b2lkIGZvbygpe30KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdFN1cGVyQ2xhc3MvY29uZmxpY3RVc2luZ1BhY2thZ2VMb2NhbE1ldGhvZC9iZWZvcmUvYS9UZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdFN1cGVyQ2xhc3MvY29uZmxpY3RVc2luZ1BhY2thZ2VMb2NhbE1ldGhvZC9iZWZvcmUvYS9UZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTFiNjczOQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0U3VwZXJDbGFzcy9jb25mbGljdFVzaW5nUGFja2FnZUxvY2FsTWV0aG9kL2JlZm9yZS9hL1Rlc3QuamF2YQpAQCAtMCwwICsxLDYgQEAKK3BhY2thZ2UgYTsKK3B1YmxpYyBjbGFzcyBUZXN0IGV4dGVuZHMgU3VwIHsKKyAgICB2b2lkIHgoKSB7CisgICAgICBmb28oKTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RTdXBlckNsYXNzL2NvbmZsaWN0VXNpbmdQYWNrYWdlTG9jYWxNZXRob2QvYmVmb3JlL2IvRS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RTdXBlckNsYXNzL2NvbmZsaWN0VXNpbmdQYWNrYWdlTG9jYWxNZXRob2QvYmVmb3JlL2IvRS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2ZTRiNjcKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdFN1cGVyQ2xhc3MvY29uZmxpY3RVc2luZ1BhY2thZ2VMb2NhbE1ldGhvZC9iZWZvcmUvYi9FLmphdmEKQEAgLTAsMCArMSwyIEBACitwYWNrYWdlIGI7CitjbGFzcyBFe30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdFN1cGVyQ2xhc3MvY29uZmxpY3RVc2luZ1BhY2thZ2VMb2NhbFN1cGVyQ2xhc3MvYWZ0ZXIvYS9TdXAuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0U3VwZXJDbGFzcy9jb25mbGljdFVzaW5nUGFja2FnZUxvY2FsU3VwZXJDbGFzcy9hZnRlci9hL1N1cC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2ZjU3NzQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdFN1cGVyQ2xhc3MvY29uZmxpY3RVc2luZ1BhY2thZ2VMb2NhbFN1cGVyQ2xhc3MvYWZ0ZXIvYS9TdXAuamF2YQpAQCAtMCwwICsxLDIgQEAKK3BhY2thZ2UgYTsKK2NsYXNzIFN1cCB7fQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0U3VwZXJDbGFzcy9jb25mbGljdFVzaW5nUGFja2FnZUxvY2FsU3VwZXJDbGFzcy9hZnRlci9hL1Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0U3VwZXJDbGFzcy9jb25mbGljdFVzaW5nUGFja2FnZUxvY2FsU3VwZXJDbGFzcy9hZnRlci9hL1Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44Zjg2YWJhCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RTdXBlckNsYXNzL2NvbmZsaWN0VXNpbmdQYWNrYWdlTG9jYWxTdXBlckNsYXNzL2FmdGVyL2EvVGVzdC5qYXZhCkBAIC0wLDAgKzEsNSBAQAorcGFja2FnZSBhOworCitwdWJsaWMgY2xhc3MgVGVzdCBleHRlbmRzIFN1cCB7CisgICAgdm9pZCBmb28oKXt9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RTdXBlckNsYXNzL2NvbmZsaWN0VXNpbmdQYWNrYWdlTG9jYWxTdXBlckNsYXNzL2FmdGVyL2IvVGVzdFN1YmNsYXNzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdFN1cGVyQ2xhc3MvY29uZmxpY3RVc2luZ1BhY2thZ2VMb2NhbFN1cGVyQ2xhc3MvYWZ0ZXIvYi9UZXN0U3ViY2xhc3MuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZjM5NzIwCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RTdXBlckNsYXNzL2NvbmZsaWN0VXNpbmdQYWNrYWdlTG9jYWxTdXBlckNsYXNzL2FmdGVyL2IvVGVzdFN1YmNsYXNzLmphdmEKQEAgLTAsMCArMSw2IEBACitwYWNrYWdlIGI7CisKK2ltcG9ydCBhLlRlc3Q7CisKK3B1YmxpYyBjbGFzcyBUZXN0U3ViY2xhc3MgIGV4dGVuZHMgVGVzdCB7CisgICAgfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0U3VwZXJDbGFzcy9jb25mbGljdFVzaW5nUGFja2FnZUxvY2FsU3VwZXJDbGFzcy9hZnRlci9iL2Rvbm90ZGVsZXRlZGlyLnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0U3VwZXJDbGFzcy9jb25mbGljdFVzaW5nUGFja2FnZUxvY2FsU3VwZXJDbGFzcy9hZnRlci9iL2Rvbm90ZGVsZXRlZGlyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjlkZTI5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RTdXBlckNsYXNzL2NvbmZsaWN0VXNpbmdQYWNrYWdlTG9jYWxTdXBlckNsYXNzL2FmdGVyL2IvZG9ub3RkZWxldGVkaXIudHh0CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdFN1cGVyQ2xhc3MvY29uZmxpY3RVc2luZ1BhY2thZ2VMb2NhbFN1cGVyQ2xhc3MvYmVmb3JlL2EvU3VwLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdFN1cGVyQ2xhc3MvY29uZmxpY3RVc2luZ1BhY2thZ2VMb2NhbFN1cGVyQ2xhc3MvYmVmb3JlL2EvU3VwLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTZmNTc3NAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0U3VwZXJDbGFzcy9jb25mbGljdFVzaW5nUGFja2FnZUxvY2FsU3VwZXJDbGFzcy9iZWZvcmUvYS9TdXAuamF2YQpAQCAtMCwwICsxLDIgQEAKK3BhY2thZ2UgYTsKK2NsYXNzIFN1cCB7fQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0U3VwZXJDbGFzcy9jb25mbGljdFVzaW5nUGFja2FnZUxvY2FsU3VwZXJDbGFzcy9iZWZvcmUvYS9UZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdFN1cGVyQ2xhc3MvY29uZmxpY3RVc2luZ1BhY2thZ2VMb2NhbFN1cGVyQ2xhc3MvYmVmb3JlL2EvVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU3NWY1YTIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdFN1cGVyQ2xhc3MvY29uZmxpY3RVc2luZ1BhY2thZ2VMb2NhbFN1cGVyQ2xhc3MvYmVmb3JlL2EvVGVzdC5qYXZhCkBAIC0wLDAgKzEsNCBAQAorcGFja2FnZSBhOworcHVibGljIGNsYXNzIFRlc3QgZXh0ZW5kcyBTdXAgeworICAgIHZvaWQgZm9vKCl7fQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0U3VwZXJDbGFzcy9jb25mbGljdFVzaW5nUGFja2FnZUxvY2FsU3VwZXJDbGFzcy9iZWZvcmUvYi9kb25vdGRlbGV0ZWRpci50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdFN1cGVyQ2xhc3MvY29uZmxpY3RVc2luZ1BhY2thZ2VMb2NhbFN1cGVyQ2xhc3MvYmVmb3JlL2IvZG9ub3RkZWxldGVkaXIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2OWRlMjkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdFN1cGVyQ2xhc3MvY29uZmxpY3RVc2luZ1BhY2thZ2VMb2NhbFN1cGVyQ2xhc3MvYmVmb3JlL2IvZG9ub3RkZWxldGVkaXIudHh0CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdFN1cGVyQ2xhc3MvY29uZmxpY3RVc2luZ1ByaXZhdGVNZXRob2QvYWZ0ZXIvVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RTdXBlckNsYXNzL2NvbmZsaWN0VXNpbmdQcml2YXRlTWV0aG9kL2FmdGVyL1Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NjlmYTRjCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RTdXBlckNsYXNzL2NvbmZsaWN0VXNpbmdQcml2YXRlTWV0aG9kL2FmdGVyL1Rlc3QuamF2YQpAQCAtMCwwICsxLDUgQEAKK3B1YmxpYyBjbGFzcyBUZXN0IHsKKyAgICB2b2lkIHgoKSB7CisgICAgICBmb28oKTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RTdXBlckNsYXNzL2NvbmZsaWN0VXNpbmdQcml2YXRlTWV0aG9kL2FmdGVyL1Rlc3RTdWJjbGFzcy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RTdXBlckNsYXNzL2NvbmZsaWN0VXNpbmdQcml2YXRlTWV0aG9kL2FmdGVyL1Rlc3RTdWJjbGFzcy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJkNjdlYTkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdFN1cGVyQ2xhc3MvY29uZmxpY3RVc2luZ1ByaXZhdGVNZXRob2QvYWZ0ZXIvVGVzdFN1YmNsYXNzLmphdmEKQEAgLTAsMCArMSw0IEBACitwdWJsaWMgY2xhc3MgVGVzdFN1YmNsYXNzIGV4dGVuZHMgVGVzdCB7CisKKyAgICBwcml2YXRlIHZvaWQgZm9vKCl7fQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0U3VwZXJDbGFzcy9jb25mbGljdFVzaW5nUHJpdmF0ZU1ldGhvZC9iZWZvcmUvVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RTdXBlckNsYXNzL2NvbmZsaWN0VXNpbmdQcml2YXRlTWV0aG9kL2JlZm9yZS9UZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjVlZWM4NwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0U3VwZXJDbGFzcy9jb25mbGljdFVzaW5nUHJpdmF0ZU1ldGhvZC9iZWZvcmUvVGVzdC5qYXZhCkBAIC0wLDAgKzEsNyBAQAorcHVibGljIGNsYXNzIFRlc3QgIHsKKyAgICB2b2lkIHgoKSB7CisgICAgICBmb28oKTsKKyAgICB9CisKKyAgICBwcml2YXRlIHZvaWQgZm9vKCl7fQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0U3VwZXJDbGFzcy9leHRlbmRzTGlicmFyeUNsYXNzL2FmdGVyL1Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0U3VwZXJDbGFzcy9leHRlbmRzTGlicmFyeUNsYXNzL2FmdGVyL1Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OTA1YzU3Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RTdXBlckNsYXNzL2V4dGVuZHNMaWJyYXJ5Q2xhc3MvYWZ0ZXIvVGVzdC5qYXZhCkBAIC0wLDAgKzEsNyBAQAoraW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CisKK3B1YmxpYyBjbGFzcyBUZXN0IGV4dGVuZHMgQXJyYXlMaXN0IHsKKyAgICBwdWJsaWMgVGVzdChpbnQgaW5pdGlhbENhcGFjaXR5KSB7CisgICAgICAgIHN1cGVyKGluaXRpYWxDYXBhY2l0eSk7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0U3VwZXJDbGFzcy9leHRlbmRzTGlicmFyeUNsYXNzL2FmdGVyL1Rlc3RTdWJjbGFzcy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RTdXBlckNsYXNzL2V4dGVuZHNMaWJyYXJ5Q2xhc3MvYWZ0ZXIvVGVzdFN1YmNsYXNzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTRmM2I2MQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0U3VwZXJDbGFzcy9leHRlbmRzTGlicmFyeUNsYXNzL2FmdGVyL1Rlc3RTdWJjbGFzcy5qYXZhCkBAIC0wLDAgKzEsNSBAQAorcHVibGljIGNsYXNzIFRlc3RTdWJjbGFzcyBleHRlbmRzIFRlc3QgeworICAgIHB1YmxpYyBUZXN0U3ViY2xhc3MoaW50IGNhcGFjaXR5KSB7CisgICAgICAgIHN1cGVyKGNhcGFjaXR5KTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RTdXBlckNsYXNzL2V4dGVuZHNMaWJyYXJ5Q2xhc3MvYmVmb3JlL1Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0U3VwZXJDbGFzcy9leHRlbmRzTGlicmFyeUNsYXNzL2JlZm9yZS9UZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjFlZTYyOQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0U3VwZXJDbGFzcy9leHRlbmRzTGlicmFyeUNsYXNzL2JlZm9yZS9UZXN0LmphdmEKQEAgLTAsMCArMSw3IEBACitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKKworcHVibGljIGNsYXNzIFRlc3QgZXh0ZW5kcyBBcnJheUxpc3QgeworICAgIHB1YmxpYyBUZXN0KGludCBjYXBhY2l0eSkgeworICAgICAgICBzdXBlcihjYXBhY2l0eSk7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0U3VwZXJDbGFzcy9leHRlbmRzTGlzdC9hZnRlci9UZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdFN1cGVyQ2xhc3MvZXh0ZW5kc0xpc3QvYWZ0ZXIvVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJhMzBjNjgKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdFN1cGVyQ2xhc3MvZXh0ZW5kc0xpc3QvYWZ0ZXIvVGVzdC5qYXZhCkBAIC0wLDAgKzEsMiBAQAorcHVibGljIGFic3RyYWN0IGNsYXNzIFRlc3QgaW1wbGVtZW50cyBqYXZhLnV0aWwuTGlzdDxTdHJpbmc+IHsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdFN1cGVyQ2xhc3MvZXh0ZW5kc0xpc3QvYWZ0ZXIvVGVzdFN1YmNsYXNzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdFN1cGVyQ2xhc3MvZXh0ZW5kc0xpc3QvYWZ0ZXIvVGVzdFN1YmNsYXNzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWY4ODZhZQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0U3VwZXJDbGFzcy9leHRlbmRzTGlzdC9hZnRlci9UZXN0U3ViY2xhc3MuamF2YQpAQCAtMCwwICsxLDIgQEAKK3B1YmxpYyBhYnN0cmFjdCBjbGFzcyBUZXN0U3ViY2xhc3MgZXh0ZW5kcyBUZXN0IHsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdFN1cGVyQ2xhc3MvZXh0ZW5kc0xpc3QvYmVmb3JlL1Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0U3VwZXJDbGFzcy9leHRlbmRzTGlzdC9iZWZvcmUvVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFmODdiMjYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdFN1cGVyQ2xhc3MvZXh0ZW5kc0xpc3QvYmVmb3JlL1Rlc3QuamF2YQpAQCAtMCwwICsxLDIgQEAKK3B1YmxpYyBhYnN0cmFjdCBjbGFzcyBUZXN0IGltcGxlbWVudHMgamF2YS51dGlsLkxpc3Q8U3RyaW5nPnsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdFN1cGVyQ2xhc3MvZmllbGRJbml0aWFsaXphdGlvbldpdGhDYXN0L2FmdGVyL1Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0U3VwZXJDbGFzcy9maWVsZEluaXRpYWxpemF0aW9uV2l0aENhc3QvYWZ0ZXIvVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVmOGYyYzgKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdFN1cGVyQ2xhc3MvZmllbGRJbml0aWFsaXphdGlvbldpdGhDYXN0L2FmdGVyL1Rlc3QuamF2YQpAQCAtMCwwICsxLDcgQEAKK3B1YmxpYyBjbGFzcyBUZXN0IHsKKyAgICBmaW5hbCBTdHJpbmcgeDsKKworICAgIHB1YmxpYyBUZXN0KCkgeworICAgICAgICB4ID0gKFN0cmluZykiIjsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RTdXBlckNsYXNzL2ZpZWxkSW5pdGlhbGl6YXRpb25XaXRoQ2FzdC9hZnRlci9UZXN0U3ViY2xhc3MuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0U3VwZXJDbGFzcy9maWVsZEluaXRpYWxpemF0aW9uV2l0aENhc3QvYWZ0ZXIvVGVzdFN1YmNsYXNzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDQ5NjlmZQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0U3VwZXJDbGFzcy9maWVsZEluaXRpYWxpemF0aW9uV2l0aENhc3QvYWZ0ZXIvVGVzdFN1YmNsYXNzLmphdmEKQEAgLTAsMCArMSw2IEBACitwdWJsaWMgY2xhc3MgVGVzdFN1YmNsYXNzIGV4dGVuZHMgVGVzdCB7CisKKyAgICBwdWJsaWMgVGVzdFN1YmNsYXNzKCkgeworICAgICAgICBzdXBlcigpOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdFN1cGVyQ2xhc3MvZmllbGRJbml0aWFsaXphdGlvbldpdGhDYXN0L2JlZm9yZS9UZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdFN1cGVyQ2xhc3MvZmllbGRJbml0aWFsaXphdGlvbldpdGhDYXN0L2JlZm9yZS9UZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWY4ZjJjOAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0U3VwZXJDbGFzcy9maWVsZEluaXRpYWxpemF0aW9uV2l0aENhc3QvYmVmb3JlL1Rlc3QuamF2YQpAQCAtMCwwICsxLDcgQEAKK3B1YmxpYyBjbGFzcyBUZXN0IHsKKyAgICBmaW5hbCBTdHJpbmcgeDsKKworICAgIHB1YmxpYyBUZXN0KCkgeworICAgICAgICB4ID0gKFN0cmluZykiIjsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RTdXBlckNsYXNzL2ZpbmFsRmllbGRJbml0aWFsaXphdGlvbi9hZnRlci9UZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdFN1cGVyQ2xhc3MvZmluYWxGaWVsZEluaXRpYWxpemF0aW9uL2FmdGVyL1Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZTYwNzdkCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RTdXBlckNsYXNzL2ZpbmFsRmllbGRJbml0aWFsaXphdGlvbi9hZnRlci9UZXN0LmphdmEKQEAgLTAsMCArMSwxMCBAQAorcHVibGljIGNsYXNzIFRlc3QgeworICAgIGZpbmFsIFggeDsKKworICAgIHB1YmxpYyBUZXN0KCkgeworICAgICAgICB4ID0gbmV3IFgoKTsKKyAgICB9CisKKyAgICBwcm90ZWN0ZWQgc3RhdGljIGNsYXNzIFggeworICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0U3VwZXJDbGFzcy9maW5hbEZpZWxkSW5pdGlhbGl6YXRpb24vYWZ0ZXIvVGVzdFN1YmNsYXNzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdFN1cGVyQ2xhc3MvZmluYWxGaWVsZEluaXRpYWxpemF0aW9uL2FmdGVyL1Rlc3RTdWJjbGFzcy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFmODE1M2QKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdFN1cGVyQ2xhc3MvZmluYWxGaWVsZEluaXRpYWxpemF0aW9uL2FmdGVyL1Rlc3RTdWJjbGFzcy5qYXZhCkBAIC0wLDAgKzEsNyBAQAorcHVibGljIGNsYXNzIFRlc3RTdWJjbGFzcyBleHRlbmRzIFRlc3QgeworCisgICAgcHVibGljIFRlc3RTdWJjbGFzcygpIHsKKyAgICAgICAgc3VwZXIoKTsKKyAgICB9CisKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdFN1cGVyQ2xhc3MvZmluYWxGaWVsZEluaXRpYWxpemF0aW9uL2JlZm9yZS9UZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdFN1cGVyQ2xhc3MvZmluYWxGaWVsZEluaXRpYWxpemF0aW9uL2JlZm9yZS9UZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDA5MzEwMQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0U3VwZXJDbGFzcy9maW5hbEZpZWxkSW5pdGlhbGl6YXRpb24vYmVmb3JlL1Rlc3QuamF2YQpAQCAtMCwwICsxLDEwIEBACitwdWJsaWMgY2xhc3MgVGVzdCB7CisgICAgZmluYWwgWCB4OworCisgICAgcHVibGljIFRlc3QoKSB7CisgICAgICAgIHggPSBuZXcgWCgpOyAKKyAgICB9CisKKyAgICBwcm90ZWN0ZWQgc3RhdGljIGNsYXNzIFggeworICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0U3VwZXJDbGFzcy9pbXBvcnRzQ29ycnVwdGlvbi9hZnRlci9wMS9BLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdFN1cGVyQ2xhc3MvaW1wb3J0c0NvcnJ1cHRpb24vYWZ0ZXIvcDEvQS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBlZDU3MzUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdFN1cGVyQ2xhc3MvaW1wb3J0c0NvcnJ1cHRpb24vYWZ0ZXIvcDEvQS5qYXZhCkBAIC0wLDAgKzEsNiBAQAorcGFja2FnZSBwMTsKKworcHVibGljIGNsYXNzIEEgeworICAgIHB1YmxpYyB2b2lkIG0xKCkgeworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdFN1cGVyQ2xhc3MvaW1wb3J0c0NvcnJ1cHRpb24vYWZ0ZXIvcDEvQUEuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0U3VwZXJDbGFzcy9pbXBvcnRzQ29ycnVwdGlvbi9hZnRlci9wMS9BQS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZjNjdjOTgKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdFN1cGVyQ2xhc3MvaW1wb3J0c0NvcnJ1cHRpb24vYWZ0ZXIvcDEvQUEuamF2YQpAQCAtMCwwICsxLDUgQEAKK3BhY2thZ2UgcDE7CitwdWJsaWMgY2xhc3MgQUEgZXh0ZW5kcyBBIHsKKyAgICBwdWJsaWMgdm9pZCBtMigpIHsKK30KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdFN1cGVyQ2xhc3MvaW1wb3J0c0NvcnJ1cHRpb24vYWZ0ZXIvcDIvQi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RTdXBlckNsYXNzL2ltcG9ydHNDb3JydXB0aW9uL2FmdGVyL3AyL0IuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMzQ2YTFkCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RTdXBlckNsYXNzL2ltcG9ydHNDb3JydXB0aW9uL2FmdGVyL3AyL0IuamF2YQpAQCAtMCwwICsxLDggQEAKK3BhY2thZ2UgcDI7CitpbXBvcnQgcDEuQTsKK3B1YmxpYyBjbGFzcyBCIHsKKyAgICBBIGE7CisgICAgdm9pZCBmb28oKSB7CisgICAgICAgIGEubTEoKTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdFN1cGVyQ2xhc3MvaW1wb3J0c0NvcnJ1cHRpb24vYWZ0ZXIvcDIvQy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RTdXBlckNsYXNzL2ltcG9ydHNDb3JydXB0aW9uL2FmdGVyL3AyL0MuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NWZhZGI0Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RTdXBlckNsYXNzL2ltcG9ydHNDb3JydXB0aW9uL2FmdGVyL3AyL0MuamF2YQpAQCAtMCwwICsxLDkgQEAKK3BhY2thZ2UgcDI7CitpbXBvcnQgcDEuQUE7CisKK3B1YmxpYyBjbGFzcyBDIHsKKyAgICBBQSBhOworICAgIHZvaWQgZm9vKCkgeworICAgICAgICBhLm0yKCk7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RTdXBlckNsYXNzL2ltcG9ydHNDb3JydXB0aW9uL2JlZm9yZS9wMS9BLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdFN1cGVyQ2xhc3MvaW1wb3J0c0NvcnJ1cHRpb24vYmVmb3JlL3AxL0EuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42Y2RjOThhCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RTdXBlckNsYXNzL2ltcG9ydHNDb3JydXB0aW9uL2JlZm9yZS9wMS9BLmphdmEKQEAgLTAsMCArMSw3IEBACitwYWNrYWdlIHAxOworcHVibGljIGNsYXNzIEEgeworcHVibGljIHZvaWQgbTEoKSB7Cit9CitwdWJsaWMgdm9pZCBtMigpIHsKK30KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdFN1cGVyQ2xhc3MvaW1wb3J0c0NvcnJ1cHRpb24vYmVmb3JlL3AyL0IuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0U3VwZXJDbGFzcy9pbXBvcnRzQ29ycnVwdGlvbi9iZWZvcmUvcDIvQi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIzNDZhMWQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdFN1cGVyQ2xhc3MvaW1wb3J0c0NvcnJ1cHRpb24vYmVmb3JlL3AyL0IuamF2YQpAQCAtMCwwICsxLDggQEAKK3BhY2thZ2UgcDI7CitpbXBvcnQgcDEuQTsKK3B1YmxpYyBjbGFzcyBCIHsKKyAgICBBIGE7CisgICAgdm9pZCBmb28oKSB7CisgICAgICAgIGEubTEoKTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdFN1cGVyQ2xhc3MvaW1wb3J0c0NvcnJ1cHRpb24vYmVmb3JlL3AyL0MuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0U3VwZXJDbGFzcy9pbXBvcnRzQ29ycnVwdGlvbi9iZWZvcmUvcDIvQy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRlOGFlZmUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdFN1cGVyQ2xhc3MvaW1wb3J0c0NvcnJ1cHRpb24vYmVmb3JlL3AyL0MuamF2YQpAQCAtMCwwICsxLDggQEAKK3BhY2thZ2UgcDI7CitpbXBvcnQgcDEuQTsKK3B1YmxpYyBjbGFzcyBDIHsKKyAgICBBIGE7CisgICAgdm9pZCBmb28oKSB7CisgICAgICAgIGEubTIoKTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdFN1cGVyQ2xhc3MvbWV0aG9kVHlwZVBhcmFtZXRlci9hZnRlci9UZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdFN1cGVyQ2xhc3MvbWV0aG9kVHlwZVBhcmFtZXRlci9hZnRlci9UZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzg2NjU2YQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0U3VwZXJDbGFzcy9tZXRob2RUeXBlUGFyYW1ldGVyL2FmdGVyL1Rlc3QuamF2YQpAQCAtMCwwICsxLDMgQEAKK3B1YmxpYyBjbGFzcyBUZXN0IHsKKyAgICBwdWJsaWMgPFQ+IFQgbSgpe3JldHVybiBudWxsO30KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdFN1cGVyQ2xhc3MvbWV0aG9kVHlwZVBhcmFtZXRlci9hZnRlci9UZXN0U3ViY2xhc3MuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0U3VwZXJDbGFzcy9tZXRob2RUeXBlUGFyYW1ldGVyL2FmdGVyL1Rlc3RTdWJjbGFzcy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRkMGEzMzYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdFN1cGVyQ2xhc3MvbWV0aG9kVHlwZVBhcmFtZXRlci9hZnRlci9UZXN0U3ViY2xhc3MuamF2YQpAQCAtMCwwICsxLDIgQEAKK3B1YmxpYyBjbGFzcyBUZXN0U3ViY2xhc3MgZXh0ZW5kcyBUZXN0IHsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdFN1cGVyQ2xhc3MvbWV0aG9kVHlwZVBhcmFtZXRlci9iZWZvcmUvVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RTdXBlckNsYXNzL21ldGhvZFR5cGVQYXJhbWV0ZXIvYmVmb3JlL1Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zODY2NTZhCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RTdXBlckNsYXNzL21ldGhvZFR5cGVQYXJhbWV0ZXIvYmVmb3JlL1Rlc3QuamF2YQpAQCAtMCwwICsxLDMgQEAKK3B1YmxpYyBjbGFzcyBUZXN0IHsKKyAgICBwdWJsaWMgPFQ+IFQgbSgpe3JldHVybiBudWxsO30KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdFN1cGVyQ2xhc3Mvbm9Db25mbGljdFVzaW5nUHJvdGVjdGVkTWV0aG9kRnJvbVN1cGVyL2FmdGVyL1Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0U3VwZXJDbGFzcy9ub0NvbmZsaWN0VXNpbmdQcm90ZWN0ZWRNZXRob2RGcm9tU3VwZXIvYWZ0ZXIvVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkwNmRiNGQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdFN1cGVyQ2xhc3Mvbm9Db25mbGljdFVzaW5nUHJvdGVjdGVkTWV0aG9kRnJvbVN1cGVyL2FmdGVyL1Rlc3QuamF2YQpAQCAtMCwwICsxLDcgQEAKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworCitwdWJsaWMgY2xhc3MgVGVzdCBleHRlbmRzIEFycmF5TGlzdCB7CisgICAgdm9pZCB4KCkgeworICAgICAgcmVtb3ZlUmFuZ2UoMCwgMCk7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0U3VwZXJDbGFzcy9ub0NvbmZsaWN0VXNpbmdQcm90ZWN0ZWRNZXRob2RGcm9tU3VwZXIvYWZ0ZXIvVGVzdFN1YmNsYXNzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdFN1cGVyQ2xhc3Mvbm9Db25mbGljdFVzaW5nUHJvdGVjdGVkTWV0aG9kRnJvbVN1cGVyL2FmdGVyL1Rlc3RTdWJjbGFzcy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRkMGEzMzYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdFN1cGVyQ2xhc3Mvbm9Db25mbGljdFVzaW5nUHJvdGVjdGVkTWV0aG9kRnJvbVN1cGVyL2FmdGVyL1Rlc3RTdWJjbGFzcy5qYXZhCkBAIC0wLDAgKzEsMiBAQAorcHVibGljIGNsYXNzIFRlc3RTdWJjbGFzcyBleHRlbmRzIFRlc3QgeworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0U3VwZXJDbGFzcy9ub0NvbmZsaWN0VXNpbmdQcm90ZWN0ZWRNZXRob2RGcm9tU3VwZXIvYmVmb3JlL1Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0U3VwZXJDbGFzcy9ub0NvbmZsaWN0VXNpbmdQcm90ZWN0ZWRNZXRob2RGcm9tU3VwZXIvYmVmb3JlL1Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZTE0M2U3Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RTdXBlckNsYXNzL25vQ29uZmxpY3RVc2luZ1Byb3RlY3RlZE1ldGhvZEZyb21TdXBlci9iZWZvcmUvVGVzdC5qYXZhCkBAIC0wLDAgKzEsNiBAQAoraW1wb3J0IGphdmEudXRpbC4qOworcHVibGljIGNsYXNzIFRlc3QgZXh0ZW5kcyBBcnJheUxpc3QgeworICAgIHZvaWQgeCgpIHsKKyAgICAgIHJlbW92ZVJhbmdlKDAsIDApOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdFN1cGVyQ2xhc3MvcGFyYW1ldGVyTmFtZUVxdWFsc0ZpZWxkTmFtZS9hZnRlci9UZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdFN1cGVyQ2xhc3MvcGFyYW1ldGVyTmFtZUVxdWFsc0ZpZWxkTmFtZS9hZnRlci9UZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODNlMGFkZQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0U3VwZXJDbGFzcy9wYXJhbWV0ZXJOYW1lRXF1YWxzRmllbGROYW1lL2FmdGVyL1Rlc3QuamF2YQpAQCAtMCwwICsxLDcgQEAKK3B1YmxpYyBjbGFzcyBUZXN0IHsKKyAgICBpbnQgYTsKKworICAgIHB1YmxpYyBUZXN0KGludCBhKSB7CisgICAgICAgIHRoaXMuYSA9IGE7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0U3VwZXJDbGFzcy9wYXJhbWV0ZXJOYW1lRXF1YWxzRmllbGROYW1lL2FmdGVyL1Rlc3RTdWJjbGFzcy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RTdXBlckNsYXNzL3BhcmFtZXRlck5hbWVFcXVhbHNGaWVsZE5hbWUvYWZ0ZXIvVGVzdFN1YmNsYXNzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGY5MGRmYwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0U3VwZXJDbGFzcy9wYXJhbWV0ZXJOYW1lRXF1YWxzRmllbGROYW1lL2FmdGVyL1Rlc3RTdWJjbGFzcy5qYXZhCkBAIC0wLDAgKzEsNyBAQAorcHVibGljIGNsYXNzIFRlc3RTdWJjbGFzcyBleHRlbmRzIFRlc3QgeworICAgIGludCBiOworICAgIHB1YmxpYyBUZXN0U3ViY2xhc3MoaW50IGEsIGludCBiKSB7CisgICAgICAgIHN1cGVyKGEpOworICAgICAgICB0aGlzLmIgPSBiOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdFN1cGVyQ2xhc3MvcGFyYW1ldGVyTmFtZUVxdWFsc0ZpZWxkTmFtZS9iZWZvcmUvVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RTdXBlckNsYXNzL3BhcmFtZXRlck5hbWVFcXVhbHNGaWVsZE5hbWUvYmVmb3JlL1Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ODI3MTEyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RTdXBlckNsYXNzL3BhcmFtZXRlck5hbWVFcXVhbHNGaWVsZE5hbWUvYmVmb3JlL1Rlc3QuamF2YQpAQCAtMCwwICsxLDggQEAKK3B1YmxpYyBjbGFzcyBUZXN0IHsKKyAgICBpbnQgYTsKKyAgICBpbnQgYjsKKyAgICBwdWJsaWMgVGVzdChpbnQgYSwgaW50IGIpIHsKKyAgICAgICAgdGhpcy5hID0gYTsKKyAgICAgICAgdGhpcy5iID0gYjsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RTdXBlckNsYXNzL3JlcXVpcmVkSW1wb3J0UmVtb3ZlZC9hZnRlci9mb28vQS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RTdXBlckNsYXNzL3JlcXVpcmVkSW1wb3J0UmVtb3ZlZC9hZnRlci9mb28vQS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZiYjNiZTQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdFN1cGVyQ2xhc3MvcmVxdWlyZWRJbXBvcnRSZW1vdmVkL2FmdGVyL2Zvby9BLmphdmEKQEAgLTAsMCArMSw5IEBACitwYWNrYWdlIGZvbzsKKworaW1wb3J0IGZvby5pbXBsLkI7CisKK3B1YmxpYyBjbGFzcyBBIHsKKyAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworICAgIEIgYiA9IEIuZ2V0SW5zdGFuY2UoKTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RTdXBlckNsYXNzL3JlcXVpcmVkSW1wb3J0UmVtb3ZlZC9hZnRlci9mb28vaW1wbC9CLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdFN1cGVyQ2xhc3MvcmVxdWlyZWRJbXBvcnRSZW1vdmVkL2FmdGVyL2Zvby9pbXBsL0IuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZDMxN2IwCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RTdXBlckNsYXNzL3JlcXVpcmVkSW1wb3J0UmVtb3ZlZC9hZnRlci9mb28vaW1wbC9CLmphdmEKQEAgLTAsMCArMSw3IEBACitwYWNrYWdlIGZvby5pbXBsOworCitwdWJsaWMgY2xhc3MgQiB7CisgICAgcHVibGljIHN0YXRpYyBCIGdldEluc3RhbmNlKCkgeworICAgICAgICByZXR1cm4gbnVsbDsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RTdXBlckNsYXNzL3JlcXVpcmVkSW1wb3J0UmVtb3ZlZC9hZnRlci9mb28vaW1wbC9CSW1wbC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RTdXBlckNsYXNzL3JlcXVpcmVkSW1wb3J0UmVtb3ZlZC9hZnRlci9mb28vaW1wbC9CSW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUyZTNmYTAKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdFN1cGVyQ2xhc3MvcmVxdWlyZWRJbXBvcnRSZW1vdmVkL2FmdGVyL2Zvby9pbXBsL0JJbXBsLmphdmEKQEAgLTAsMCArMSw0IEBACitwYWNrYWdlIGZvby5pbXBsOworCitwdWJsaWMgY2xhc3MgQkltcGwgZXh0ZW5kcyBCIHsKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0U3VwZXJDbGFzcy9yZXF1aXJlZEltcG9ydFJlbW92ZWQvYmVmb3JlL2Zvby9BLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdFN1cGVyQ2xhc3MvcmVxdWlyZWRJbXBvcnRSZW1vdmVkL2JlZm9yZS9mb28vQS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZiYjNiZTQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdFN1cGVyQ2xhc3MvcmVxdWlyZWRJbXBvcnRSZW1vdmVkL2JlZm9yZS9mb28vQS5qYXZhCkBAIC0wLDAgKzEsOSBAQAorcGFja2FnZSBmb287CisKK2ltcG9ydCBmb28uaW1wbC5COworCitwdWJsaWMgY2xhc3MgQSB7CisgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKyAgICBCIGIgPSBCLmdldEluc3RhbmNlKCk7CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0U3VwZXJDbGFzcy9yZXF1aXJlZEltcG9ydFJlbW92ZWQvYmVmb3JlL2Zvby9pbXBsL0IuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0U3VwZXJDbGFzcy9yZXF1aXJlZEltcG9ydFJlbW92ZWQvYmVmb3JlL2Zvby9pbXBsL0IuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mODM3MDIwCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RTdXBlckNsYXNzL3JlcXVpcmVkSW1wb3J0UmVtb3ZlZC9iZWZvcmUvZm9vL2ltcGwvQi5qYXZhCkBAIC0wLDAgKzEsNyBAQAorcGFja2FnZSBmb28uaW1wbDsKKworcHVibGljIGNsYXNzIEIgeworICAgIHB1YmxpYyBzdGF0aWMgQiBnZXRJbnN0YW5jZSgpIHsKKyAgICAgICAgcmV0dXJuIG51bGw7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RTdXBlckNsYXNzL3N1YnN0aXR1dGVHZW5lcmljcy9hZnRlci9BLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdFN1cGVyQ2xhc3Mvc3Vic3RpdHV0ZUdlbmVyaWNzL2FmdGVyL0EuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jM2Y5Y2E0Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RTdXBlckNsYXNzL3N1YnN0aXR1dGVHZW5lcmljcy9hZnRlci9BLmphdmEKQEAgLTAsMCArMSw0IEBACitwdWJsaWMgY2xhc3MgQTxFPiB7CisgIHB1YmxpYyBBKEUgZSkgeworICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdFN1cGVyQ2xhc3Mvc3Vic3RpdHV0ZUdlbmVyaWNzL2FmdGVyL0FCLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdFN1cGVyQ2xhc3Mvc3Vic3RpdHV0ZUdlbmVyaWNzL2FmdGVyL0FCLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjNmYmU2YQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0U3VwZXJDbGFzcy9zdWJzdGl0dXRlR2VuZXJpY3MvYWZ0ZXIvQUIuamF2YQpAQCAtMCwwICsxLDUgQEAKK3B1YmxpYyBjbGFzcyBBQiBleHRlbmRzIEIgeworICBwdWJsaWMgQUIoU3RyaW5nIHMpIHsKKyAgICBzdXBlcihzKTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RTdXBlckNsYXNzL3N1YnN0aXR1dGVHZW5lcmljcy9hZnRlci9CLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdFN1cGVyQ2xhc3Mvc3Vic3RpdHV0ZUdlbmVyaWNzL2FmdGVyL0IuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ODE0Y2Y5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RTdXBlckNsYXNzL3N1YnN0aXR1dGVHZW5lcmljcy9hZnRlci9CLmphdmEKQEAgLTAsMCArMSw1IEBACitwdWJsaWMgY2xhc3MgQiBleHRlbmRzIEE8U3RyaW5nPiB7CisgICAgcHVibGljIEIoU3RyaW5nIGUpIHsKKyAgICAgICAgc3VwZXIoZSk7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0U3VwZXJDbGFzcy9zdWJzdGl0dXRlR2VuZXJpY3MvYmVmb3JlL0EuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9leHRyYWN0U3VwZXJDbGFzcy9zdWJzdGl0dXRlR2VuZXJpY3MvYmVmb3JlL0EuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jM2Y5Y2E0Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RTdXBlckNsYXNzL3N1YnN0aXR1dGVHZW5lcmljcy9iZWZvcmUvQS5qYXZhCkBAIC0wLDAgKzEsNCBAQAorcHVibGljIGNsYXNzIEE8RT4geworICBwdWJsaWMgQShFIGUpIHsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RTdXBlckNsYXNzL3N1YnN0aXR1dGVHZW5lcmljcy9iZWZvcmUvQi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2V4dHJhY3RTdXBlckNsYXNzL3N1YnN0aXR1dGVHZW5lcmljcy9iZWZvcmUvQi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY2OTQ5YWMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvZXh0cmFjdFN1cGVyQ2xhc3Mvc3Vic3RpdHV0ZUdlbmVyaWNzL2JlZm9yZS9CLmphdmEKQEAgLTAsMCArMSw1IEBACitwdWJsaWMgY2xhc3MgQiBleHRlbmRzIEE8U3RyaW5nPnsKKyAgcHVibGljIEIoU3RyaW5nIHMpIHsKKyAgICBzdXBlcihzKTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2luaGVyaXRhbmNlVG9EZWxlZ2F0aW9uL2Fic3RyYWN0QmFzZS9hZnRlci9BLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5oZXJpdGFuY2VUb0RlbGVnYXRpb24vYWJzdHJhY3RCYXNlL2FmdGVyL0EuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYjExMzJkCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2luaGVyaXRhbmNlVG9EZWxlZ2F0aW9uL2Fic3RyYWN0QmFzZS9hZnRlci9BLmphdmEKQEAgLTAsMCArMSwxMSBAQAorcHVibGljIGFic3RyYWN0IGNsYXNzIEEgeworICAgIHB1YmxpYyBmaW5hbCBNeUJhc2UgbXlEZWxlZ2F0ZSA9IG5ldyBNeUJhc2UoKTsKKworICAgIHByb3RlY3RlZCBhYnN0cmFjdCB2b2lkIHJ1bigpOworCisgICAgcHJpdmF0ZSBjbGFzcyBNeUJhc2UgZXh0ZW5kcyBCYXNlIHsKKyAgICAgICAgcHVibGljIHZvaWQgcnVuKCkgeworICAgICAgICAgICAgQS50aGlzLnJ1bigpOworICAgICAgICB9CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmhlcml0YW5jZVRvRGVsZWdhdGlvbi9hYnN0cmFjdEJhc2UvYWZ0ZXIvQmFzZS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2luaGVyaXRhbmNlVG9EZWxlZ2F0aW9uL2Fic3RyYWN0QmFzZS9hZnRlci9CYXNlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjIzN2E3ZgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmhlcml0YW5jZVRvRGVsZWdhdGlvbi9hYnN0cmFjdEJhc2UvYWZ0ZXIvQmFzZS5qYXZhCkBAIC0wLDAgKzEsMiBAQAorcHVibGljIGFic3RyYWN0IGNsYXNzIEJhc2UgaW1wbGVtZW50cyBSdW5uYWJsZSB7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2luaGVyaXRhbmNlVG9EZWxlZ2F0aW9uL2Fic3RyYWN0QmFzZS9iZWZvcmUvQS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2luaGVyaXRhbmNlVG9EZWxlZ2F0aW9uL2Fic3RyYWN0QmFzZS9iZWZvcmUvQS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI0MTk1NzIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5oZXJpdGFuY2VUb0RlbGVnYXRpb24vYWJzdHJhY3RCYXNlL2JlZm9yZS9BLmphdmEKQEAgLTAsMCArMSwyIEBACitwdWJsaWMgYWJzdHJhY3QgY2xhc3MgQSBleHRlbmRzIEJhc2UgeyAgICAKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5oZXJpdGFuY2VUb0RlbGVnYXRpb24vYWJzdHJhY3RCYXNlL2JlZm9yZS9CYXNlLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5oZXJpdGFuY2VUb0RlbGVnYXRpb24vYWJzdHJhY3RCYXNlL2JlZm9yZS9CYXNlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjIzN2E3ZgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmhlcml0YW5jZVRvRGVsZWdhdGlvbi9hYnN0cmFjdEJhc2UvYmVmb3JlL0Jhc2UuamF2YQpAQCAtMCwwICsxLDIgQEAKK3B1YmxpYyBhYnN0cmFjdCBjbGFzcyBCYXNlIGltcGxlbWVudHMgUnVubmFibGUgeworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmhlcml0YW5jZVRvRGVsZWdhdGlvbi9hYnN0cmFjdEJhc2UxL2FmdGVyL0EuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmhlcml0YW5jZVRvRGVsZWdhdGlvbi9hYnN0cmFjdEJhc2UxL2FmdGVyL0EuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YjgxZGI3Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2luaGVyaXRhbmNlVG9EZWxlZ2F0aW9uL2Fic3RyYWN0QmFzZTEvYWZ0ZXIvQS5qYXZhCkBAIC0wLDAgKzEsOSBAQAorcHVibGljIGNsYXNzIEEgeworICAgIHByaXZhdGUgZmluYWwgTXlCYXNlIG15RGVsZWdhdGUgPSBuZXcgTXlCYXNlKCk7CisKKyAgICBwcml2YXRlIGNsYXNzIE15QmFzZSBleHRlbmRzIEJhc2UgeworICAgICAgICBwdWJsaWMgdm9pZCBydW4oKSB7CisgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJGcm9tIEEiKTsKKyAgICAgICAgfQorICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5oZXJpdGFuY2VUb0RlbGVnYXRpb24vYWJzdHJhY3RCYXNlMS9hZnRlci9CYXNlLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5oZXJpdGFuY2VUb0RlbGVnYXRpb24vYWJzdHJhY3RCYXNlMS9hZnRlci9CYXNlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjIzN2E3ZgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmhlcml0YW5jZVRvRGVsZWdhdGlvbi9hYnN0cmFjdEJhc2UxL2FmdGVyL0Jhc2UuamF2YQpAQCAtMCwwICsxLDIgQEAKK3B1YmxpYyBhYnN0cmFjdCBjbGFzcyBCYXNlIGltcGxlbWVudHMgUnVubmFibGUgeworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmhlcml0YW5jZVRvRGVsZWdhdGlvbi9hYnN0cmFjdEJhc2UxL2JlZm9yZS9BLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5oZXJpdGFuY2VUb0RlbGVnYXRpb24vYWJzdHJhY3RCYXNlMS9iZWZvcmUvQS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk3NmNiZjUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5oZXJpdGFuY2VUb0RlbGVnYXRpb24vYWJzdHJhY3RCYXNlMS9iZWZvcmUvQS5qYXZhCkBAIC0wLDAgKzEsNSBAQAorcHVibGljIGNsYXNzIEEgZXh0ZW5kcyBCYXNlIHsKKyAgICAgcHVibGljIHZvaWQgcnVuKCkgeworICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRnJvbSBBIik7CisgICAgIH0gICAgIAorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmhlcml0YW5jZVRvRGVsZWdhdGlvbi9hYnN0cmFjdEJhc2UxL2JlZm9yZS9CYXNlLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5oZXJpdGFuY2VUb0RlbGVnYXRpb24vYWJzdHJhY3RCYXNlMS9iZWZvcmUvQmFzZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYyMzdhN2YKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5oZXJpdGFuY2VUb0RlbGVnYXRpb24vYWJzdHJhY3RCYXNlMS9iZWZvcmUvQmFzZS5qYXZhCkBAIC0wLDAgKzEsMiBAQAorcHVibGljIGFic3RyYWN0IGNsYXNzIEJhc2UgaW1wbGVtZW50cyBSdW5uYWJsZSB7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2luaGVyaXRhbmNlVG9EZWxlZ2F0aW9uL2Fubm90YXRpb25zL2FmdGVyL0EuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmhlcml0YW5jZVRvRGVsZWdhdGlvbi9hbm5vdGF0aW9ucy9hZnRlci9BLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTZjMDAwMQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmhlcml0YW5jZVRvRGVsZWdhdGlvbi9hbm5vdGF0aW9ucy9hZnRlci9BLmphdmEKQEAgLTAsMCArMSw5IEBACitpbXBvcnQgb3JnLmpldGJyYWlucy5hbm5vdGF0aW9ucy5OdWxsYWJsZTsKK2ltcG9ydCBvcmcuamV0YnJhaW5zLmFubm90YXRpb25zLk5vdE51bGw7CisKK2NsYXNzIEEgeworICAgIEBOdWxsYWJsZQorICAgIHB1YmxpYyBPYmplY3QgbWV0aG9kRnJvbUEoQE5vdE51bGwgU3RyaW5nIHMpIHsKKyAgICAgICAgcmV0dXJuIG51bGw7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2luaGVyaXRhbmNlVG9EZWxlZ2F0aW9uL2Fubm90YXRpb25zL2FmdGVyL0IuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmhlcml0YW5jZVRvRGVsZWdhdGlvbi9hbm5vdGF0aW9ucy9hZnRlci9CLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjdmMDY2NQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmhlcml0YW5jZVRvRGVsZWdhdGlvbi9hbm5vdGF0aW9ucy9hZnRlci9CLmphdmEKQEAgLTAsMCArMSwxMSBAQAoraW1wb3J0IG9yZy5qZXRicmFpbnMuYW5ub3RhdGlvbnMuTm90TnVsbDsKK2ltcG9ydCBvcmcuamV0YnJhaW5zLmFubm90YXRpb25zLk51bGxhYmxlOworCitjbGFzcyBCIHsKKyAgICBwdWJsaWMgZmluYWwgQSBteURlbGVnYXRlID0gbmV3IEEoKTsKKworICAgIEBOdWxsYWJsZQorICAgIHB1YmxpYyBPYmplY3QgbWV0aG9kRnJvbUEoQE5vdE51bGwgU3RyaW5nIHMpIHsKKyAgICAgICAgcmV0dXJuIG15RGVsZWdhdGUubWV0aG9kRnJvbUEocyk7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmhlcml0YW5jZVRvRGVsZWdhdGlvbi9hbm5vdGF0aW9ucy9iZWZvcmUvQS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2luaGVyaXRhbmNlVG9EZWxlZ2F0aW9uL2Fubm90YXRpb25zL2JlZm9yZS9BLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTZjMDAwMQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmhlcml0YW5jZVRvRGVsZWdhdGlvbi9hbm5vdGF0aW9ucy9iZWZvcmUvQS5qYXZhCkBAIC0wLDAgKzEsOSBAQAoraW1wb3J0IG9yZy5qZXRicmFpbnMuYW5ub3RhdGlvbnMuTnVsbGFibGU7CitpbXBvcnQgb3JnLmpldGJyYWlucy5hbm5vdGF0aW9ucy5Ob3ROdWxsOworCitjbGFzcyBBIHsKKyAgICBATnVsbGFibGUKKyAgICBwdWJsaWMgT2JqZWN0IG1ldGhvZEZyb21BKEBOb3ROdWxsIFN0cmluZyBzKSB7CisgICAgICAgIHJldHVybiBudWxsOworICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmhlcml0YW5jZVRvRGVsZWdhdGlvbi9hbm5vdGF0aW9ucy9iZWZvcmUvQi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2luaGVyaXRhbmNlVG9EZWxlZ2F0aW9uL2Fubm90YXRpb25zL2JlZm9yZS9CLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzc2NTgzZgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmhlcml0YW5jZVRvRGVsZWdhdGlvbi9hbm5vdGF0aW9ucy9iZWZvcmUvQi5qYXZhCkBAIC0wLDAgKzEsMiBAQAorY2xhc3MgQiBleHRlbmRzIEEgeyAgICAgICAKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5oZXJpdGFuY2VUb0RlbGVnYXRpb24vZ2V0dGVyL2FmdGVyL0EuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmhlcml0YW5jZVRvRGVsZWdhdGlvbi9nZXR0ZXIvYWZ0ZXIvQS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU5MTMxNzEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5oZXJpdGFuY2VUb0RlbGVnYXRpb24vZ2V0dGVyL2FmdGVyL0EuamF2YQpAQCAtMCwwICsxLDcgQEAKK2NsYXNzIEEgeworICAgIHB1YmxpYyB2b2lkIG1ldGhvZEZyb21BKCkgeworICAgIH0KKyAgICBwdWJsaWMgaW50IGludE1ldGhvZEZyb21BKGludCBpKSB7CisgICAgICAgIHJldHVybiAwOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5oZXJpdGFuY2VUb0RlbGVnYXRpb24vZ2V0dGVyL2FmdGVyL0IuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmhlcml0YW5jZVRvRGVsZWdhdGlvbi9nZXR0ZXIvYWZ0ZXIvQi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ2YzQ5ODU0Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2luaGVyaXRhbmNlVG9EZWxlZ2F0aW9uL2dldHRlci9hZnRlci9CLmphdmEKQEAgLTAsMCArMSwxNSBAQAorY2xhc3MgQiB7CisgICAgcHJpdmF0ZSBmaW5hbCBBIG15RGVsZWdhdGUgPSBuZXcgQSgpOworCisgICAgcHVibGljIEEgZ2V0TXlEZWxlZ2F0ZSgpIHsKKyAgICAgICAgcmV0dXJuIG15RGVsZWdhdGU7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgbWV0aG9kRnJvbUEoKSB7CisgICAgICAgIG15RGVsZWdhdGUubWV0aG9kRnJvbUEoKTsKKyAgICB9CisKKyAgICBwdWJsaWMgaW50IGludE1ldGhvZEZyb21BKGludCBpKSB7CisgICAgICAgIHJldHVybiBteURlbGVnYXRlLmludE1ldGhvZEZyb21BKGkpOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5oZXJpdGFuY2VUb0RlbGVnYXRpb24vZ2V0dGVyL2JlZm9yZS9BLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5oZXJpdGFuY2VUb0RlbGVnYXRpb24vZ2V0dGVyL2JlZm9yZS9BLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTkxMzE3MQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmhlcml0YW5jZVRvRGVsZWdhdGlvbi9nZXR0ZXIvYmVmb3JlL0EuamF2YQpAQCAtMCwwICsxLDcgQEAKK2NsYXNzIEEgeworICAgIHB1YmxpYyB2b2lkIG1ldGhvZEZyb21BKCkgeworICAgIH0KKyAgICBwdWJsaWMgaW50IGludE1ldGhvZEZyb21BKGludCBpKSB7CisgICAgICAgIHJldHVybiAwOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5oZXJpdGFuY2VUb0RlbGVnYXRpb24vZ2V0dGVyL2JlZm9yZS9CLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5oZXJpdGFuY2VUb0RlbGVnYXRpb24vZ2V0dGVyL2JlZm9yZS9CLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzc2NTgzZgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmhlcml0YW5jZVRvRGVsZWdhdGlvbi9nZXR0ZXIvYmVmb3JlL0IuamF2YQpAQCAtMCwwICsxLDIgQEAKK2NsYXNzIEIgZXh0ZW5kcyBBIHsgICAgICAgCit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2luaGVyaXRhbmNlVG9EZWxlZ2F0aW9uL2hpZXJhcmNoeS9hZnRlci9BLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5oZXJpdGFuY2VUb0RlbGVnYXRpb24vaGllcmFyY2h5L2FmdGVyL0EuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMTUxMTNlCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2luaGVyaXRhbmNlVG9EZWxlZ2F0aW9uL2hpZXJhcmNoeS9hZnRlci9BLmphdmEKQEAgLTAsMCArMSw0IEBACitwdWJsaWMgY2xhc3MgQSB7CisgICAgdm9pZCBtZXRob2RGcm9tQSgpIHsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2luaGVyaXRhbmNlVG9EZWxlZ2F0aW9uL2hpZXJhcmNoeS9hZnRlci9CYXNlLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5oZXJpdGFuY2VUb0RlbGVnYXRpb24vaGllcmFyY2h5L2FmdGVyL0Jhc2UuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNGIwYTNkCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2luaGVyaXRhbmNlVG9EZWxlZ2F0aW9uL2hpZXJhcmNoeS9hZnRlci9CYXNlLmphdmEKQEAgLTAsMCArMSwyIEBACitwdWJsaWMgY2xhc3MgQmFzZSBleHRlbmRzIEEgeworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmhlcml0YW5jZVRvRGVsZWdhdGlvbi9oaWVyYXJjaHkvYWZ0ZXIvVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2luaGVyaXRhbmNlVG9EZWxlZ2F0aW9uL2hpZXJhcmNoeS9hZnRlci9UZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDAzNzkwZQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmhlcml0YW5jZVRvRGVsZWdhdGlvbi9oaWVyYXJjaHkvYWZ0ZXIvVGVzdC5qYXZhCkBAIC0wLDAgKzEsMyBAQAorcHVibGljIGludGVyZmFjZSBUZXN0IHsKKyAgICBBIGdldEEoKTsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5oZXJpdGFuY2VUb0RlbGVnYXRpb24vaGllcmFyY2h5L2FmdGVyL1guamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmhlcml0YW5jZVRvRGVsZWdhdGlvbi9oaWVyYXJjaHkvYWZ0ZXIvWC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRlMTdjNWMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5oZXJpdGFuY2VUb0RlbGVnYXRpb24vaGllcmFyY2h5L2FmdGVyL1guamF2YQpAQCAtMCwwICsxLDkgQEAKK3B1YmxpYyBjbGFzcyBYIHsKKyAgICBwcml2YXRlIGZpbmFsIEJhc2UgbXlEZWxlZ2F0ZSA9IG5ldyBCYXNlKCk7CisgICAgQSBteUZpZWxkOworICAgIHB1YmxpYyB2b2lkIG1ldGhvZChUZXN0IHQpIHsKKyAgICAgICAgIG15RmllbGQgPSB0LmdldEEoKTsKKyAgICAgICAgIG15RmllbGQubWV0aG9kRnJvbUEoKTsKKyAgICAgICAgIHQuZ2V0QSgpLm1ldGhvZEZyb21BKCk7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmhlcml0YW5jZVRvRGVsZWdhdGlvbi9oaWVyYXJjaHkvYmVmb3JlL0EuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmhlcml0YW5jZVRvRGVsZWdhdGlvbi9oaWVyYXJjaHkvYmVmb3JlL0EuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMTUxMTNlCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2luaGVyaXRhbmNlVG9EZWxlZ2F0aW9uL2hpZXJhcmNoeS9iZWZvcmUvQS5qYXZhCkBAIC0wLDAgKzEsNCBAQAorcHVibGljIGNsYXNzIEEgeworICAgIHZvaWQgbWV0aG9kRnJvbUEoKSB7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmhlcml0YW5jZVRvRGVsZWdhdGlvbi9oaWVyYXJjaHkvYmVmb3JlL0Jhc2UuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmhlcml0YW5jZVRvRGVsZWdhdGlvbi9oaWVyYXJjaHkvYmVmb3JlL0Jhc2UuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNGIwYTNkCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2luaGVyaXRhbmNlVG9EZWxlZ2F0aW9uL2hpZXJhcmNoeS9iZWZvcmUvQmFzZS5qYXZhCkBAIC0wLDAgKzEsMiBAQAorcHVibGljIGNsYXNzIEJhc2UgZXh0ZW5kcyBBIHsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5oZXJpdGFuY2VUb0RlbGVnYXRpb24vaGllcmFyY2h5L2JlZm9yZS9UZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5oZXJpdGFuY2VUb0RlbGVnYXRpb24vaGllcmFyY2h5L2JlZm9yZS9UZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDAzNzkwZQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmhlcml0YW5jZVRvRGVsZWdhdGlvbi9oaWVyYXJjaHkvYmVmb3JlL1Rlc3QuamF2YQpAQCAtMCwwICsxLDMgQEAKK3B1YmxpYyBpbnRlcmZhY2UgVGVzdCB7CisgICAgQSBnZXRBKCk7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2luaGVyaXRhbmNlVG9EZWxlZ2F0aW9uL2hpZXJhcmNoeS9iZWZvcmUvWC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2luaGVyaXRhbmNlVG9EZWxlZ2F0aW9uL2hpZXJhcmNoeS9iZWZvcmUvWC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjExMjExMGIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5oZXJpdGFuY2VUb0RlbGVnYXRpb24vaGllcmFyY2h5L2JlZm9yZS9YLmphdmEKQEAgLTAsMCArMSw4IEBACitwdWJsaWMgY2xhc3MgWCBleHRlbmRzIEJhc2UgeworICAgIEEgbXlGaWVsZDsKKyAgICBwdWJsaWMgdm9pZCBtZXRob2QoVGVzdCB0KSB7CisgICAgICAgICBteUZpZWxkID0gdC5nZXRBKCk7CisgICAgICAgICBteUZpZWxkLm1ldGhvZEZyb21BKCk7CisgICAgICAgICB0LmdldEEoKS5tZXRob2RGcm9tQSgpOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5oZXJpdGFuY2VUb0RlbGVnYXRpb24vaW5uZXJDbGFzcy9hZnRlci9BLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5oZXJpdGFuY2VUb0RlbGVnYXRpb24vaW5uZXJDbGFzcy9hZnRlci9BLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWUwNjNiOQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmhlcml0YW5jZVRvRGVsZWdhdGlvbi9pbm5lckNsYXNzL2FmdGVyL0EuamF2YQpAQCAtMCwwICsxLDE3IEBACitwdWJsaWMgY2xhc3MgQSB7CisgICAgcHVibGljIGZpbmFsIE15QmFzZSBteURlbGVnYXRlOworCisgICAgcHVibGljIEEoKSB7CisgICAgICAgIG15RGVsZWdhdGUgPSBuZXcgTXlCYXNlKDI3KTsKKyAgICB9CisKKyAgICBwcml2YXRlIGNsYXNzIE15QmFzZSBleHRlbmRzIEJhc2UgeworICAgICAgICBwdWJsaWMgTXlCYXNlKGludCBpKSB7CisgICAgICAgICAgICBzdXBlcihpKTsKKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyB2b2lkIG1ldGhvZFRvT3ZlcnJpZGUoKSB7CisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkhlbGxvIGZyb20gQiIpOworICAgICAgICB9CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmhlcml0YW5jZVRvRGVsZWdhdGlvbi9pbm5lckNsYXNzL2FmdGVyL0Jhc2UuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmhlcml0YW5jZVRvRGVsZWdhdGlvbi9pbm5lckNsYXNzL2FmdGVyL0Jhc2UuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMGU5N2RlCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2luaGVyaXRhbmNlVG9EZWxlZ2F0aW9uL2lubmVyQ2xhc3MvYWZ0ZXIvQmFzZS5qYXZhCkBAIC0wLDAgKzEsMTEgQEAKK3B1YmxpYyBjbGFzcyBCYXNlIHsKKyAgICBwcm90ZWN0ZWQgaW50IGJhc2VGaWVsZDsKKyAgICBwdWJsaWMgQmFzZSgpIHsKKyAgICB9CisgICAgcHVibGljIEJhc2UoaW50IGkpIHsKKyAgICAgICAgYmFzZUZpZWxkID0gaTsKKyAgICB9CisgICAgcHVibGljIHZvaWQgbWV0aG9kVG9PdmVycmlkZSgpIHsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJIZWxsbyBmcm9tIEJhc2UiKTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2luaGVyaXRhbmNlVG9EZWxlZ2F0aW9uL2lubmVyQ2xhc3MvYmVmb3JlL0EuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmhlcml0YW5jZVRvRGVsZWdhdGlvbi9pbm5lckNsYXNzL2JlZm9yZS9BLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzA1ZThmYQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmhlcml0YW5jZVRvRGVsZWdhdGlvbi9pbm5lckNsYXNzL2JlZm9yZS9BLmphdmEKQEAgLTAsMCArMSw4IEBACitwdWJsaWMgY2xhc3MgQSBleHRlbmRzIEJhc2UgeworICAgIHB1YmxpYyBBKCkgeworICAgICAgICBzdXBlcigyNyk7CisgICAgfQorICAgIHB1YmxpYyB2b2lkIG1ldGhvZFRvT3ZlcnJpZGUoKSB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSGVsbG8gZnJvbSBCIik7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmhlcml0YW5jZVRvRGVsZWdhdGlvbi9pbm5lckNsYXNzL2JlZm9yZS9CYXNlLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5oZXJpdGFuY2VUb0RlbGVnYXRpb24vaW5uZXJDbGFzcy9iZWZvcmUvQmFzZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIwZTk3ZGUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5oZXJpdGFuY2VUb0RlbGVnYXRpb24vaW5uZXJDbGFzcy9iZWZvcmUvQmFzZS5qYXZhCkBAIC0wLDAgKzEsMTEgQEAKK3B1YmxpYyBjbGFzcyBCYXNlIHsKKyAgICBwcm90ZWN0ZWQgaW50IGJhc2VGaWVsZDsKKyAgICBwdWJsaWMgQmFzZSgpIHsKKyAgICB9CisgICAgcHVibGljIEJhc2UoaW50IGkpIHsKKyAgICAgICAgYmFzZUZpZWxkID0gaTsKKyAgICB9CisgICAgcHVibGljIHZvaWQgbWV0aG9kVG9PdmVycmlkZSgpIHsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJIZWxsbyBmcm9tIEJhc2UiKTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2luaGVyaXRhbmNlVG9EZWxlZ2F0aW9uL2lubmVyQ2xhc3NGb3JJbnRlcmZhY2UvYWZ0ZXIvQS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2luaGVyaXRhbmNlVG9EZWxlZ2F0aW9uL2lubmVyQ2xhc3NGb3JJbnRlcmZhY2UvYWZ0ZXIvQS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRiOTUxYTUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5oZXJpdGFuY2VUb0RlbGVnYXRpb24vaW5uZXJDbGFzc0ZvckludGVyZmFjZS9hZnRlci9BLmphdmEKQEAgLTAsMCArMSwyMCBAQAorcHVibGljIGNsYXNzIEEgZXh0ZW5kcyBCYXNlQ2xhc3MgeworICAgIHByaXZhdGUgZmluYWwgTXlCYXNlSW50ZXJmYWNlIG15QmFzZUludGVyZmFjZSA9IG5ldyBNeUJhc2VJbnRlcmZhY2UoKTsKKworICAgIHB1YmxpYyBBKCkgeworICAgIH0KKworICAgIHB1YmxpYyBBKFN0cmluZyBzKSB7CisgICAgICAgIHN1cGVyKDI3KTsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBiYXNlSW50ZXJmYWNlTWV0aG9kKCkgeworICAgICAgICBteUJhc2VJbnRlcmZhY2UuYmFzZUludGVyZmFjZU1ldGhvZCgpOworICAgIH0KKworICAgIHByaXZhdGUgY2xhc3MgTXlCYXNlSW50ZXJmYWNlIGltcGxlbWVudHMgQmFzZUludGVyZmFjZSB7CisgICAgICAgIHB1YmxpYyB2b2lkIGJhc2VJbnRlcmZhY2VNZXRob2QoKSB7CisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkhpISIpOworICAgICAgICB9CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmhlcml0YW5jZVRvRGVsZWdhdGlvbi9pbm5lckNsYXNzRm9ySW50ZXJmYWNlL2FmdGVyL0Jhc2VDbGFzcy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2luaGVyaXRhbmNlVG9EZWxlZ2F0aW9uL2lubmVyQ2xhc3NGb3JJbnRlcmZhY2UvYWZ0ZXIvQmFzZUNsYXNzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjA2Zjg5MwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmhlcml0YW5jZVRvRGVsZWdhdGlvbi9pbm5lckNsYXNzRm9ySW50ZXJmYWNlL2FmdGVyL0Jhc2VDbGFzcy5qYXZhCkBAIC0wLDAgKzEsNyBAQAorcHVibGljIEJhc2VDbGFzcyB7CisgICAgcHVibGljIEJhc2VDbGFzcygpIHsKKyAgICB9CisKKyAgICBwdWJsaWMgQmFzZUNsYXNzKGludCBpKSB7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmhlcml0YW5jZVRvRGVsZWdhdGlvbi9pbm5lckNsYXNzRm9ySW50ZXJmYWNlL2FmdGVyL0Jhc2VJbnRlcmZhY2UuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmhlcml0YW5jZVRvRGVsZWdhdGlvbi9pbm5lckNsYXNzRm9ySW50ZXJmYWNlL2FmdGVyL0Jhc2VJbnRlcmZhY2UuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MmYyYzk4NAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmhlcml0YW5jZVRvRGVsZWdhdGlvbi9pbm5lckNsYXNzRm9ySW50ZXJmYWNlL2FmdGVyL0Jhc2VJbnRlcmZhY2UuamF2YQpAQCAtMCwwICsxLDMgQEAKK3B1YmxpYyBpbnRlcmZhY2UgQmFzZUludGVyZmFjZSB7CisgICAgdm9pZCBiYXNlSW50ZXJmYWNlTWV0aG9kKCk7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2luaGVyaXRhbmNlVG9EZWxlZ2F0aW9uL2lubmVyQ2xhc3NGb3JJbnRlcmZhY2UvYmVmb3JlL0EuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmhlcml0YW5jZVRvRGVsZWdhdGlvbi9pbm5lckNsYXNzRm9ySW50ZXJmYWNlL2JlZm9yZS9BLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGQwYmQyNgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmhlcml0YW5jZVRvRGVsZWdhdGlvbi9pbm5lckNsYXNzRm9ySW50ZXJmYWNlL2JlZm9yZS9BLmphdmEKQEAgLTAsMCArMSwxMiBAQAorcHVibGljIGNsYXNzIEEgZXh0ZW5kcyBCYXNlQ2xhc3MgaW1wbGVtZW50cyBCYXNlSW50ZXJmYWNlIHsKKyAgICBwdWJsaWMgQSgpIHsKKyAgICB9CisKKyAgICBwdWJsaWMgQShTdHJpbmcgcykgeworICAgICAgICBzdXBlcigyNyk7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgYmFzZUludGVyZmFjZU1ldGhvZCgpIHsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJIaSEiKTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2luaGVyaXRhbmNlVG9EZWxlZ2F0aW9uL2lubmVyQ2xhc3NGb3JJbnRlcmZhY2UvYmVmb3JlL0Jhc2VDbGFzcy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2luaGVyaXRhbmNlVG9EZWxlZ2F0aW9uL2lubmVyQ2xhc3NGb3JJbnRlcmZhY2UvYmVmb3JlL0Jhc2VDbGFzcy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYwNmY4OTMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5oZXJpdGFuY2VUb0RlbGVnYXRpb24vaW5uZXJDbGFzc0ZvckludGVyZmFjZS9iZWZvcmUvQmFzZUNsYXNzLmphdmEKQEAgLTAsMCArMSw3IEBACitwdWJsaWMgQmFzZUNsYXNzIHsKKyAgICBwdWJsaWMgQmFzZUNsYXNzKCkgeworICAgIH0KKworICAgIHB1YmxpYyBCYXNlQ2xhc3MoaW50IGkpIHsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2luaGVyaXRhbmNlVG9EZWxlZ2F0aW9uL2lubmVyQ2xhc3NGb3JJbnRlcmZhY2UvYmVmb3JlL0Jhc2VJbnRlcmZhY2UuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmhlcml0YW5jZVRvRGVsZWdhdGlvbi9pbm5lckNsYXNzRm9ySW50ZXJmYWNlL2JlZm9yZS9CYXNlSW50ZXJmYWNlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzJmMmM5ODQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5oZXJpdGFuY2VUb0RlbGVnYXRpb24vaW5uZXJDbGFzc0ZvckludGVyZmFjZS9iZWZvcmUvQmFzZUludGVyZmFjZS5qYXZhCkBAIC0wLDAgKzEsMyBAQAorcHVibGljIGludGVyZmFjZSBCYXNlSW50ZXJmYWNlIHsKKyAgICB2b2lkIGJhc2VJbnRlcmZhY2VNZXRob2QoKTsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5oZXJpdGFuY2VUb0RlbGVnYXRpb24vaW5uZXJDbGFzc0ZvckludGVyZmFjZUFic3RyYWN0L2FmdGVyL0EuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmhlcml0YW5jZVRvRGVsZWdhdGlvbi9pbm5lckNsYXNzRm9ySW50ZXJmYWNlQWJzdHJhY3QvYWZ0ZXIvQS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIzNmMyZTgKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5oZXJpdGFuY2VUb0RlbGVnYXRpb24vaW5uZXJDbGFzc0ZvckludGVyZmFjZUFic3RyYWN0L2FmdGVyL0EuamF2YQpAQCAtMCwwICsxLDE4IEBACitwdWJsaWMgYWJzdHJhY3QgY2xhc3MgQSBleHRlbmRzIEJhc2VDbGFzcyB7CisgICAgcHJpdmF0ZSBmaW5hbCBNeUJhc2VJbnRlcmZhY2UgbXlCYXNlSW50ZXJmYWNlID0gbmV3IE15QmFzZUludGVyZmFjZSgpOworCisgICAgcHVibGljIEEoKSB7CisgICAgfQorCisgICAgcHVibGljIEEoU3RyaW5nIHMpIHsKKyAgICAgICAgc3VwZXIoMjcpOworICAgIH0KKworICAgIHB1YmxpYyBhYnN0cmFjdCB2b2lkIGJhc2VJbnRlcmZhY2VNZXRob2QoKTsKKworICAgIHByaXZhdGUgY2xhc3MgTXlCYXNlSW50ZXJmYWNlIGltcGxlbWVudHMgQmFzZUludGVyZmFjZSB7CisgICAgICAgIHB1YmxpYyB2b2lkIGJhc2VJbnRlcmZhY2VNZXRob2QoKSB7CisgICAgICAgICAgICBBLnRoaXMuYmFzZUludGVyZmFjZU1ldGhvZCgpOworICAgICAgICB9CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmhlcml0YW5jZVRvRGVsZWdhdGlvbi9pbm5lckNsYXNzRm9ySW50ZXJmYWNlQWJzdHJhY3QvYWZ0ZXIvQmFzZUNsYXNzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5oZXJpdGFuY2VUb0RlbGVnYXRpb24vaW5uZXJDbGFzc0ZvckludGVyZmFjZUFic3RyYWN0L2FmdGVyL0Jhc2VDbGFzcy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYwNmY4OTMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5oZXJpdGFuY2VUb0RlbGVnYXRpb24vaW5uZXJDbGFzc0ZvckludGVyZmFjZUFic3RyYWN0L2FmdGVyL0Jhc2VDbGFzcy5qYXZhCkBAIC0wLDAgKzEsNyBAQAorcHVibGljIEJhc2VDbGFzcyB7CisgICAgcHVibGljIEJhc2VDbGFzcygpIHsKKyAgICB9CisKKyAgICBwdWJsaWMgQmFzZUNsYXNzKGludCBpKSB7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmhlcml0YW5jZVRvRGVsZWdhdGlvbi9pbm5lckNsYXNzRm9ySW50ZXJmYWNlQWJzdHJhY3QvYWZ0ZXIvQmFzZUludGVyZmFjZS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2luaGVyaXRhbmNlVG9EZWxlZ2F0aW9uL2lubmVyQ2xhc3NGb3JJbnRlcmZhY2VBYnN0cmFjdC9hZnRlci9CYXNlSW50ZXJmYWNlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzJmMmM5ODQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5oZXJpdGFuY2VUb0RlbGVnYXRpb24vaW5uZXJDbGFzc0ZvckludGVyZmFjZUFic3RyYWN0L2FmdGVyL0Jhc2VJbnRlcmZhY2UuamF2YQpAQCAtMCwwICsxLDMgQEAKK3B1YmxpYyBpbnRlcmZhY2UgQmFzZUludGVyZmFjZSB7CisgICAgdm9pZCBiYXNlSW50ZXJmYWNlTWV0aG9kKCk7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2luaGVyaXRhbmNlVG9EZWxlZ2F0aW9uL2lubmVyQ2xhc3NGb3JJbnRlcmZhY2VBYnN0cmFjdC9iZWZvcmUvQS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2luaGVyaXRhbmNlVG9EZWxlZ2F0aW9uL2lubmVyQ2xhc3NGb3JJbnRlcmZhY2VBYnN0cmFjdC9iZWZvcmUvQS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhjNjRjYzYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5oZXJpdGFuY2VUb0RlbGVnYXRpb24vaW5uZXJDbGFzc0ZvckludGVyZmFjZUFic3RyYWN0L2JlZm9yZS9BLmphdmEKQEAgLTAsMCArMSw4IEBACitwdWJsaWMgYWJzdHJhY3QgY2xhc3MgQSBleHRlbmRzIEJhc2VDbGFzcyBpbXBsZW1lbnRzIEJhc2VJbnRlcmZhY2UgeworICAgIHB1YmxpYyBBKCkgeworICAgIH0KKworICAgIHB1YmxpYyBBKFN0cmluZyBzKSB7CisgICAgICAgIHN1cGVyKDI3KTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2luaGVyaXRhbmNlVG9EZWxlZ2F0aW9uL2lubmVyQ2xhc3NGb3JJbnRlcmZhY2VBYnN0cmFjdC9iZWZvcmUvQmFzZUNsYXNzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5oZXJpdGFuY2VUb0RlbGVnYXRpb24vaW5uZXJDbGFzc0ZvckludGVyZmFjZUFic3RyYWN0L2JlZm9yZS9CYXNlQ2xhc3MuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMDZmODkzCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2luaGVyaXRhbmNlVG9EZWxlZ2F0aW9uL2lubmVyQ2xhc3NGb3JJbnRlcmZhY2VBYnN0cmFjdC9iZWZvcmUvQmFzZUNsYXNzLmphdmEKQEAgLTAsMCArMSw3IEBACitwdWJsaWMgQmFzZUNsYXNzIHsKKyAgICBwdWJsaWMgQmFzZUNsYXNzKCkgeworICAgIH0KKworICAgIHB1YmxpYyBCYXNlQ2xhc3MoaW50IGkpIHsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2luaGVyaXRhbmNlVG9EZWxlZ2F0aW9uL2lubmVyQ2xhc3NGb3JJbnRlcmZhY2VBYnN0cmFjdC9iZWZvcmUvQmFzZUludGVyZmFjZS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2luaGVyaXRhbmNlVG9EZWxlZ2F0aW9uL2lubmVyQ2xhc3NGb3JJbnRlcmZhY2VBYnN0cmFjdC9iZWZvcmUvQmFzZUludGVyZmFjZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcyZjJjOTg0Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2luaGVyaXRhbmNlVG9EZWxlZ2F0aW9uL2lubmVyQ2xhc3NGb3JJbnRlcmZhY2VBYnN0cmFjdC9iZWZvcmUvQmFzZUludGVyZmFjZS5qYXZhCkBAIC0wLDAgKzEsMyBAQAorcHVibGljIGludGVyZmFjZSBCYXNlSW50ZXJmYWNlIHsKKyAgICB2b2lkIGJhc2VJbnRlcmZhY2VNZXRob2QoKTsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5oZXJpdGFuY2VUb0RlbGVnYXRpb24vaW50ZXJmYWNlRGVsZWdhdGlvbi9hZnRlci9BLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5oZXJpdGFuY2VUb0RlbGVnYXRpb24vaW50ZXJmYWNlRGVsZWdhdGlvbi9hZnRlci9BLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjAzMWI3MQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmhlcml0YW5jZVRvRGVsZWdhdGlvbi9pbnRlcmZhY2VEZWxlZ2F0aW9uL2FmdGVyL0EuamF2YQpAQCAtMCwwICsxLDIyIEBACitwdWJsaWMgY2xhc3MgQSB7CisKKyAgICBwcml2YXRlIGZpbmFsIE15SW50ZiBteURlbGVnYXRlID0gbmV3IE15SW50ZigpOworCisgICAgcHVibGljIEludGYgZ2V0TXlEZWxlZ2F0ZSgpIHsKKyAgICAgICAgcmV0dXJuIG15RGVsZWdhdGU7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgbWV0aG9kMSgpIHsKKyAgICAgICAgbXlEZWxlZ2F0ZS5tZXRob2QxKCk7CisgICAgfQorCisgICAgcHJpdmF0ZSBjbGFzcyBNeUludGYgaW1wbGVtZW50cyBJbnRmIHsKKyAgICAgICAgcHVibGljIHZvaWQgbWV0aG9kMSAoKSB7CisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIjEiKTsKKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyB2b2lkIG1ldGhvZDIgKCkgeworICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIyIik7CisgICAgICAgIH0KKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2luaGVyaXRhbmNlVG9EZWxlZ2F0aW9uL2ludGVyZmFjZURlbGVnYXRpb24vYWZ0ZXIvSW50Zi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2luaGVyaXRhbmNlVG9EZWxlZ2F0aW9uL2ludGVyZmFjZURlbGVnYXRpb24vYWZ0ZXIvSW50Zi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZlODMyMmYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5oZXJpdGFuY2VUb0RlbGVnYXRpb24vaW50ZXJmYWNlRGVsZWdhdGlvbi9hZnRlci9JbnRmLmphdmEKQEAgLTAsMCArMSw0IEBACitwdWJsaWMgaW50ZXJmYWNlIEludGYgeworICAgIHZvaWQgbWV0aG9kMSgpOworICAgIHZvaWQgbWV0aG9kMigpOworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmhlcml0YW5jZVRvRGVsZWdhdGlvbi9pbnRlcmZhY2VEZWxlZ2F0aW9uL2FmdGVyL1VzYWdlLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5oZXJpdGFuY2VUb0RlbGVnYXRpb24vaW50ZXJmYWNlRGVsZWdhdGlvbi9hZnRlci9Vc2FnZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFjYWJmZDkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5oZXJpdGFuY2VUb0RlbGVnYXRpb24vaW50ZXJmYWNlRGVsZWdhdGlvbi9hZnRlci9Vc2FnZS5qYXZhCkBAIC0wLDAgKzEsMTIgQEAKK3B1YmxpYyBjbGFzcyBVc2FnZSB7CisgICAgQSBhID0gbmV3IEEoKTsKKworICAgIHB1YmxpYyB2b2lkIHVzYWdlKCkgeworICAgICAgICBhLm1ldGhvZDEoKTsKKyAgICAgICAgYS5nZXRNeURlbGVnYXRlKCkubWV0aG9kMigpOworICAgICAgICB1c2UoYS5nZXRNeURlbGVnYXRlKCkpOworICAgIH0KKworICAgIHByaXZhdGUgdm9pZCB1c2UoSW50ZiBpKSB7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmhlcml0YW5jZVRvRGVsZWdhdGlvbi9pbnRlcmZhY2VEZWxlZ2F0aW9uL2JlZm9yZS9BLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5oZXJpdGFuY2VUb0RlbGVnYXRpb24vaW50ZXJmYWNlRGVsZWdhdGlvbi9iZWZvcmUvQS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRjN2EwYzkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5oZXJpdGFuY2VUb0RlbGVnYXRpb24vaW50ZXJmYWNlRGVsZWdhdGlvbi9iZWZvcmUvQS5qYXZhCkBAIC0wLDAgKzEsOSBAQAorcHVibGljIGNsYXNzIEEgaW1wbGVtZW50cyBJbnRmIHsKKyAgICBwdWJsaWMgdm9pZCBtZXRob2QxICgpIHsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIxIik7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgbWV0aG9kMiAoKSB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiMiIpOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5oZXJpdGFuY2VUb0RlbGVnYXRpb24vaW50ZXJmYWNlRGVsZWdhdGlvbi9iZWZvcmUvSW50Zi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2luaGVyaXRhbmNlVG9EZWxlZ2F0aW9uL2ludGVyZmFjZURlbGVnYXRpb24vYmVmb3JlL0ludGYuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZTgzMjJmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2luaGVyaXRhbmNlVG9EZWxlZ2F0aW9uL2ludGVyZmFjZURlbGVnYXRpb24vYmVmb3JlL0ludGYuamF2YQpAQCAtMCwwICsxLDQgQEAKK3B1YmxpYyBpbnRlcmZhY2UgSW50ZiB7CisgICAgdm9pZCBtZXRob2QxKCk7CisgICAgdm9pZCBtZXRob2QyKCk7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2luaGVyaXRhbmNlVG9EZWxlZ2F0aW9uL2ludGVyZmFjZURlbGVnYXRpb24vYmVmb3JlL1VzYWdlLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5oZXJpdGFuY2VUb0RlbGVnYXRpb24vaW50ZXJmYWNlRGVsZWdhdGlvbi9iZWZvcmUvVXNhZ2UuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMzY3ZjI3Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2luaGVyaXRhbmNlVG9EZWxlZ2F0aW9uL2ludGVyZmFjZURlbGVnYXRpb24vYmVmb3JlL1VzYWdlLmphdmEKQEAgLTAsMCArMSwxMiBAQAorcHVibGljIGNsYXNzIFVzYWdlIHsKKyAgICBBIGEgPSBuZXcgQSgpOworCisgICAgcHVibGljIHZvaWQgdXNhZ2UoKSB7CisgICAgICAgIGEubWV0aG9kMSgpOworICAgICAgICBhLm1ldGhvZDIoKTsKKyAgICAgICAgdXNlKGEpOworICAgIH0KKworICAgIHByaXZhdGUgdm9pZCB1c2UoSW50ZiBpKSB7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmhlcml0YW5jZVRvRGVsZWdhdGlvbi9pbnRlcmZhY2VJbXBsaWNpdEltcGxlbWVudGF0aW9uL2FmdGVyL0EuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmhlcml0YW5jZVRvRGVsZWdhdGlvbi9pbnRlcmZhY2VJbXBsaWNpdEltcGxlbWVudGF0aW9uL2FmdGVyL0EuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NjNjY2FmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2luaGVyaXRhbmNlVG9EZWxlZ2F0aW9uL2ludGVyZmFjZUltcGxpY2l0SW1wbGVtZW50YXRpb24vYWZ0ZXIvQS5qYXZhCkBAIC0wLDAgKzEsMTcgQEAKK3B1YmxpYyBjbGFzcyBBIGV4dGVuZHMgQVN1cGVyIHsKKyAgICBwcml2YXRlIGZpbmFsIE15SW50ZiBteURlbGVnYXRlID0gbmV3IE15SW50ZigpOworCisgICAgcHVibGljIEludGYgZ2V0TXlEZWxlZ2F0ZSgpIHsKKyAgICAgICAgcmV0dXJuIG15RGVsZWdhdGU7CisgICAgfQorCisgICAgcHJpdmF0ZSBjbGFzcyBNeUludGYgaW1wbGVtZW50cyBJbnRmIHsKKyAgICAgICAgcHVibGljIHZvaWQgbWV0aG9kMSAoKSB7CisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIjEiKTsKKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyB2b2lkIG1ldGhvZDIoKSB7CisgICAgICAgICAgICBBLnRoaXMubWV0aG9kMigpOworICAgICAgICB9CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmhlcml0YW5jZVRvRGVsZWdhdGlvbi9pbnRlcmZhY2VJbXBsaWNpdEltcGxlbWVudGF0aW9uL2FmdGVyL0FTdXBlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2luaGVyaXRhbmNlVG9EZWxlZ2F0aW9uL2ludGVyZmFjZUltcGxpY2l0SW1wbGVtZW50YXRpb24vYWZ0ZXIvQVN1cGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWYyNDViNwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmhlcml0YW5jZVRvRGVsZWdhdGlvbi9pbnRlcmZhY2VJbXBsaWNpdEltcGxlbWVudGF0aW9uL2FmdGVyL0FTdXBlci5qYXZhCkBAIC0wLDAgKzEsNSBAQAorcHVibGljIGNsYXNzIEFTdXBlciB7CisgICAgcHVibGljIHZvaWQgbWV0aG9kMiAoKSB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiMiIpOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5oZXJpdGFuY2VUb0RlbGVnYXRpb24vaW50ZXJmYWNlSW1wbGljaXRJbXBsZW1lbnRhdGlvbi9hZnRlci9JbnRmLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5oZXJpdGFuY2VUb0RlbGVnYXRpb24vaW50ZXJmYWNlSW1wbGljaXRJbXBsZW1lbnRhdGlvbi9hZnRlci9JbnRmLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmU4MzIyZgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmhlcml0YW5jZVRvRGVsZWdhdGlvbi9pbnRlcmZhY2VJbXBsaWNpdEltcGxlbWVudGF0aW9uL2FmdGVyL0ludGYuamF2YQpAQCAtMCwwICsxLDQgQEAKK3B1YmxpYyBpbnRlcmZhY2UgSW50ZiB7CisgICAgdm9pZCBtZXRob2QxKCk7CisgICAgdm9pZCBtZXRob2QyKCk7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2luaGVyaXRhbmNlVG9EZWxlZ2F0aW9uL2ludGVyZmFjZUltcGxpY2l0SW1wbGVtZW50YXRpb24vYWZ0ZXIvVXNhZ2UuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmhlcml0YW5jZVRvRGVsZWdhdGlvbi9pbnRlcmZhY2VJbXBsaWNpdEltcGxlbWVudGF0aW9uL2FmdGVyL1VzYWdlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWRiODQ1OQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmhlcml0YW5jZVRvRGVsZWdhdGlvbi9pbnRlcmZhY2VJbXBsaWNpdEltcGxlbWVudGF0aW9uL2FmdGVyL1VzYWdlLmphdmEKQEAgLTAsMCArMSwxMiBAQAorcHVibGljIGNsYXNzIFVzYWdlIHsKKyAgICBBIGEgPSBuZXcgQSgpOworCisgICAgcHVibGljIHZvaWQgdXNhZ2UoKSB7CisgICAgICAgIGEuZ2V0TXlEZWxlZ2F0ZSgpLm1ldGhvZDEoKTsKKyAgICAgICAgYS5tZXRob2QyKCk7CisgICAgICAgIHVzZShhLmdldE15RGVsZWdhdGUoKSk7CisgICAgfQorCisgICAgcHJpdmF0ZSB2b2lkIHVzZShJbnRmIGkpIHsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2luaGVyaXRhbmNlVG9EZWxlZ2F0aW9uL2ludGVyZmFjZUltcGxpY2l0SW1wbGVtZW50YXRpb24vYmVmb3JlL0EuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmhlcml0YW5jZVRvRGVsZWdhdGlvbi9pbnRlcmZhY2VJbXBsaWNpdEltcGxlbWVudGF0aW9uL2JlZm9yZS9BLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjcyYWNjNwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmhlcml0YW5jZVRvRGVsZWdhdGlvbi9pbnRlcmZhY2VJbXBsaWNpdEltcGxlbWVudGF0aW9uL2JlZm9yZS9BLmphdmEKQEAgLTAsMCArMSw1IEBACitwdWJsaWMgY2xhc3MgQSBleHRlbmRzIEFTdXBlciBpbXBsZW1lbnRzIEludGYgeworICAgIHB1YmxpYyB2b2lkIG1ldGhvZDEgKCkgeworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIjEiKTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2luaGVyaXRhbmNlVG9EZWxlZ2F0aW9uL2ludGVyZmFjZUltcGxpY2l0SW1wbGVtZW50YXRpb24vYmVmb3JlL0FTdXBlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2luaGVyaXRhbmNlVG9EZWxlZ2F0aW9uL2ludGVyZmFjZUltcGxpY2l0SW1wbGVtZW50YXRpb24vYmVmb3JlL0FTdXBlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFmMjQ1YjcKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5oZXJpdGFuY2VUb0RlbGVnYXRpb24vaW50ZXJmYWNlSW1wbGljaXRJbXBsZW1lbnRhdGlvbi9iZWZvcmUvQVN1cGVyLmphdmEKQEAgLTAsMCArMSw1IEBACitwdWJsaWMgY2xhc3MgQVN1cGVyIHsKKyAgICBwdWJsaWMgdm9pZCBtZXRob2QyICgpIHsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIyIik7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmhlcml0YW5jZVRvRGVsZWdhdGlvbi9pbnRlcmZhY2VJbXBsaWNpdEltcGxlbWVudGF0aW9uL2JlZm9yZS9JbnRmLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5oZXJpdGFuY2VUb0RlbGVnYXRpb24vaW50ZXJmYWNlSW1wbGljaXRJbXBsZW1lbnRhdGlvbi9iZWZvcmUvSW50Zi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZlODMyMmYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5oZXJpdGFuY2VUb0RlbGVnYXRpb24vaW50ZXJmYWNlSW1wbGljaXRJbXBsZW1lbnRhdGlvbi9iZWZvcmUvSW50Zi5qYXZhCkBAIC0wLDAgKzEsNCBAQAorcHVibGljIGludGVyZmFjZSBJbnRmIHsKKyAgICB2b2lkIG1ldGhvZDEoKTsKKyAgICB2b2lkIG1ldGhvZDIoKTsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5oZXJpdGFuY2VUb0RlbGVnYXRpb24vaW50ZXJmYWNlSW1wbGljaXRJbXBsZW1lbnRhdGlvbi9iZWZvcmUvVXNhZ2UuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmhlcml0YW5jZVRvRGVsZWdhdGlvbi9pbnRlcmZhY2VJbXBsaWNpdEltcGxlbWVudGF0aW9uL2JlZm9yZS9Vc2FnZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYzNjdmMjcKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5oZXJpdGFuY2VUb0RlbGVnYXRpb24vaW50ZXJmYWNlSW1wbGljaXRJbXBsZW1lbnRhdGlvbi9iZWZvcmUvVXNhZ2UuamF2YQpAQCAtMCwwICsxLDEyIEBACitwdWJsaWMgY2xhc3MgVXNhZ2UgeworICAgIEEgYSA9IG5ldyBBKCk7CisKKyAgICBwdWJsaWMgdm9pZCB1c2FnZSgpIHsKKyAgICAgICAgYS5tZXRob2QxKCk7CisgICAgICAgIGEubWV0aG9kMigpOworICAgICAgICB1c2UoYSk7CisgICAgfQorCisgICAgcHJpdmF0ZSB2b2lkIHVzZShJbnRmIGkpIHsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2luaGVyaXRhbmNlVG9EZWxlZ2F0aW9uL2ludGVyZmFjZXMvYWZ0ZXIvQS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2luaGVyaXRhbmNlVG9EZWxlZ2F0aW9uL2ludGVyZmFjZXMvYWZ0ZXIvQS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRhNjBjYjkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5oZXJpdGFuY2VUb0RlbGVnYXRpb24vaW50ZXJmYWNlcy9hZnRlci9BLmphdmEKQEAgLTAsMCArMSwxMSBAQAorcHVibGljIGNsYXNzIEEgaW1wbGVtZW50cyBJIHsKKyAgICBwcml2YXRlIGZpbmFsIEJhc2UgbXlEZWxlZ2F0ZSA9IG5ldyBCYXNlKCk7CisKKyAgICBwdWJsaWMgQmFzZSBnZXRNeURlbGVnYXRlKCkgeworICAgICAgICByZXR1cm4gbXlEZWxlZ2F0ZTsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBtZXRob2RGcm9tSSgpIHsKKyAgICAgICAgbXlEZWxlZ2F0ZS5tZXRob2RGcm9tSSgpOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5oZXJpdGFuY2VUb0RlbGVnYXRpb24vaW50ZXJmYWNlcy9hZnRlci9CYXNlLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5oZXJpdGFuY2VUb0RlbGVnYXRpb24vaW50ZXJmYWNlcy9hZnRlci9CYXNlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmE1ZTA4NAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmhlcml0YW5jZVRvRGVsZWdhdGlvbi9pbnRlcmZhY2VzL2FmdGVyL0Jhc2UuamF2YQpAQCAtMCwwICsxLDcgQEAKK3B1YmxpYyBjbGFzcyBCYXNlIGltcGxlbWVudHMgSSwgSiB7CisgICAgcHVibGljIHZvaWQgbWV0aG9kRnJvbUkoKSB7CisgICAgfQorICAgCisgICAgcHVibGljIHZvaWQgbWV0aG9kRnJvbUooKSB7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmhlcml0YW5jZVRvRGVsZWdhdGlvbi9pbnRlcmZhY2VzL2FmdGVyL0kuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmhlcml0YW5jZVRvRGVsZWdhdGlvbi9pbnRlcmZhY2VzL2FmdGVyL0kuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMDZkYzUyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2luaGVyaXRhbmNlVG9EZWxlZ2F0aW9uL2ludGVyZmFjZXMvYWZ0ZXIvSS5qYXZhCkBAIC0wLDAgKzEsMyBAQAorcHVibGljIGludGVyZmFjZSBJIHsKKyAgICB2b2lkIG1ldGhvZEZyb21JKCk7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2luaGVyaXRhbmNlVG9EZWxlZ2F0aW9uL2ludGVyZmFjZXMvYWZ0ZXIvSi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2luaGVyaXRhbmNlVG9EZWxlZ2F0aW9uL2ludGVyZmFjZXMvYWZ0ZXIvSi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVmZDE5ZDYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5oZXJpdGFuY2VUb0RlbGVnYXRpb24vaW50ZXJmYWNlcy9hZnRlci9KLmphdmEKQEAgLTAsMCArMSwzIEBACitwdWJsaWMgaW50ZXJmYWNlIEogeworICAgIHZvaWQgbWV0aG9kRnJvbUooKTsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5oZXJpdGFuY2VUb0RlbGVnYXRpb24vaW50ZXJmYWNlcy9hZnRlci9Vc2FnZS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2luaGVyaXRhbmNlVG9EZWxlZ2F0aW9uL2ludGVyZmFjZXMvYWZ0ZXIvVXNhZ2UuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMTlmMzg2YQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmhlcml0YW5jZVRvRGVsZWdhdGlvbi9pbnRlcmZhY2VzL2FmdGVyL1VzYWdlLmphdmEKQEAgLTAsMCArMSwyMyBAQAorY2xhc3MgVXNhZ2UgeworICAgIHByaXZhdGUgQSBteUEgPSBuZXcgQSgpOworICAgIHB1YmxpYyB2b2lkIG1ldGhvZEV4cGVjdGluZ0koSSBpKSB7CisgICAgICAgIGkubWV0aG9kRnJvbUkoKTsKKyAgICB9CisKKyAgICBwdWJsaWMgSiBtZXRob2RSZXR1cm5pbmdKKCkgeworICAgICAgICByZXR1cm4gbXlBLmdldE15RGVsZWdhdGUoKTsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBtZXRob2RFeHBlY3RpbmdKKEogaikgeworICAgICAgICBqLm1ldGhvZEZyb21KKCk7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgbWFpbigpIHsKKyAgICAgICAgQSBhID0gbmV3IEEoKTsKKyAgICAgICAgYS5tZXRob2RGcm9tSSgpOworICAgICAgICBhLmdldE15RGVsZWdhdGUoKS5tZXRob2RGcm9tSigpOworICAgICAgICBtZXRob2RFeHBlY3RpbmdJKGEpOworICAgICAgICBtZXRob2RFeHBlY3RpbmdKKGEuZ2V0TXlEZWxlZ2F0ZSgpKTsKKyAgICAgICAgbWV0aG9kRXhwZWN0aW5nSihteUEuZ2V0TXlEZWxlZ2F0ZSgpKTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2luaGVyaXRhbmNlVG9EZWxlZ2F0aW9uL2ludGVyZmFjZXMvYmVmb3JlL0EuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmhlcml0YW5jZVRvRGVsZWdhdGlvbi9pbnRlcmZhY2VzL2JlZm9yZS9BLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTMxY2ZhYgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmhlcml0YW5jZVRvRGVsZWdhdGlvbi9pbnRlcmZhY2VzL2JlZm9yZS9BLmphdmEKQEAgLTAsMCArMSwyIEBACitwdWJsaWMgY2xhc3MgQSBleHRlbmRzIEJhc2UgeworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmhlcml0YW5jZVRvRGVsZWdhdGlvbi9pbnRlcmZhY2VzL2JlZm9yZS9CYXNlLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5oZXJpdGFuY2VUb0RlbGVnYXRpb24vaW50ZXJmYWNlcy9iZWZvcmUvQmFzZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZhNWUwODQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5oZXJpdGFuY2VUb0RlbGVnYXRpb24vaW50ZXJmYWNlcy9iZWZvcmUvQmFzZS5qYXZhCkBAIC0wLDAgKzEsNyBAQAorcHVibGljIGNsYXNzIEJhc2UgaW1wbGVtZW50cyBJLCBKIHsKKyAgICBwdWJsaWMgdm9pZCBtZXRob2RGcm9tSSgpIHsKKyAgICB9CisgICAKKyAgICBwdWJsaWMgdm9pZCBtZXRob2RGcm9tSigpIHsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2luaGVyaXRhbmNlVG9EZWxlZ2F0aW9uL2ludGVyZmFjZXMvYmVmb3JlL0kuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmhlcml0YW5jZVRvRGVsZWdhdGlvbi9pbnRlcmZhY2VzL2JlZm9yZS9JLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDA2ZGM1MgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmhlcml0YW5jZVRvRGVsZWdhdGlvbi9pbnRlcmZhY2VzL2JlZm9yZS9JLmphdmEKQEAgLTAsMCArMSwzIEBACitwdWJsaWMgaW50ZXJmYWNlIEkgeworICAgIHZvaWQgbWV0aG9kRnJvbUkoKTsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5oZXJpdGFuY2VUb0RlbGVnYXRpb24vaW50ZXJmYWNlcy9iZWZvcmUvSi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2luaGVyaXRhbmNlVG9EZWxlZ2F0aW9uL2ludGVyZmFjZXMvYmVmb3JlL0ouamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZmQxOWQ2Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2luaGVyaXRhbmNlVG9EZWxlZ2F0aW9uL2ludGVyZmFjZXMvYmVmb3JlL0ouamF2YQpAQCAtMCwwICsxLDMgQEAKK3B1YmxpYyBpbnRlcmZhY2UgSiB7CisgICAgdm9pZCBtZXRob2RGcm9tSigpOworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmhlcml0YW5jZVRvRGVsZWdhdGlvbi9pbnRlcmZhY2VzL2JlZm9yZS9Vc2FnZS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2luaGVyaXRhbmNlVG9EZWxlZ2F0aW9uL2ludGVyZmFjZXMvYmVmb3JlL1VzYWdlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzUzNmIzNAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmhlcml0YW5jZVRvRGVsZWdhdGlvbi9pbnRlcmZhY2VzL2JlZm9yZS9Vc2FnZS5qYXZhCkBAIC0wLDAgKzEsMjMgQEAKK2NsYXNzIFVzYWdlIHsKKyAgICBwcml2YXRlIEEgbXlBID0gbmV3IEEoKTsKKyAgICBwdWJsaWMgdm9pZCBtZXRob2RFeHBlY3RpbmdJKEkgaSkgeworICAgICAgICBpLm1ldGhvZEZyb21JKCk7CisgICAgfQorCisgICAgcHVibGljIEogbWV0aG9kUmV0dXJuaW5nSigpIHsKKyAgICAgICAgcmV0dXJuIG15QTsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBtZXRob2RFeHBlY3RpbmdKKEogaikgeworICAgICAgICBqLm1ldGhvZEZyb21KKCk7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgbWFpbigpIHsKKyAgICAgICAgQSBhID0gbmV3IEEoKTsKKyAgICAgICAgYS5tZXRob2RGcm9tSSgpOworICAgICAgICBhLm1ldGhvZEZyb21KKCk7CisgICAgICAgIG1ldGhvZEV4cGVjdGluZ0koYSk7CisgICAgICAgIG1ldGhvZEV4cGVjdGluZ0ooYSk7CisgICAgICAgIG1ldGhvZEV4cGVjdGluZ0oobXlBKTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2luaGVyaXRhbmNlVG9EZWxlZ2F0aW9uL211bHRpcGxlSW50ZXJmYWNlRGVsZWdhdGlvbi9hZnRlci9BLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5oZXJpdGFuY2VUb0RlbGVnYXRpb24vbXVsdGlwbGVJbnRlcmZhY2VEZWxlZ2F0aW9uL2FmdGVyL0EuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OWZkNWY0Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2luaGVyaXRhbmNlVG9EZWxlZ2F0aW9uL211bHRpcGxlSW50ZXJmYWNlRGVsZWdhdGlvbi9hZnRlci9BLmphdmEKQEAgLTAsMCArMSwxMyBAQAorcHVibGljIGNsYXNzIEEgaW1wbGVtZW50cyBJbnRmIHsKKyAgICBwdWJsaWMgZmluYWwgTXlJbnRmIG15RGVsZWdhdGUgPSBuZXcgTXlJbnRmKCk7CisKKyAgICBwdWJsaWMgdm9pZCBtZXRob2QxKCkgeworICAgICAgICBteURlbGVnYXRlLm1ldGhvZDIoKTsKKyAgICB9CisKKyAgICBwcml2YXRlIGNsYXNzIE15SW50ZiBpbXBsZW1lbnRzIEludGYyIHsKKyAgICAgICAgcHVibGljIHZvaWQgbWV0aG9kMiAoKSB7CisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIjIiKTsKKyAgICAgICAgfQorICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5oZXJpdGFuY2VUb0RlbGVnYXRpb24vbXVsdGlwbGVJbnRlcmZhY2VEZWxlZ2F0aW9uL2FmdGVyL0ludGYuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmhlcml0YW5jZVRvRGVsZWdhdGlvbi9tdWx0aXBsZUludGVyZmFjZURlbGVnYXRpb24vYWZ0ZXIvSW50Zi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEyYzYxMDQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5oZXJpdGFuY2VUb0RlbGVnYXRpb24vbXVsdGlwbGVJbnRlcmZhY2VEZWxlZ2F0aW9uL2FmdGVyL0ludGYuamF2YQpAQCAtMCwwICsxLDMgQEAKK3B1YmxpYyBpbnRlcmZhY2UgSW50ZiB7CisgICAgdm9pZCBtZXRob2QxKCk7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2luaGVyaXRhbmNlVG9EZWxlZ2F0aW9uL211bHRpcGxlSW50ZXJmYWNlRGVsZWdhdGlvbi9hZnRlci9JbnRmMi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2luaGVyaXRhbmNlVG9EZWxlZ2F0aW9uL211bHRpcGxlSW50ZXJmYWNlRGVsZWdhdGlvbi9hZnRlci9JbnRmMi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcwYmU5ODYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5oZXJpdGFuY2VUb0RlbGVnYXRpb24vbXVsdGlwbGVJbnRlcmZhY2VEZWxlZ2F0aW9uL2FmdGVyL0ludGYyLmphdmEKQEAgLTAsMCArMSwzIEBACitwdWJsaWMgaW50ZXJmYWNlIEludGYyIHsKKyAgICB2b2lkIG1ldGhvZDIoKTsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5oZXJpdGFuY2VUb0RlbGVnYXRpb24vbXVsdGlwbGVJbnRlcmZhY2VEZWxlZ2F0aW9uL2JlZm9yZS9BLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5oZXJpdGFuY2VUb0RlbGVnYXRpb24vbXVsdGlwbGVJbnRlcmZhY2VEZWxlZ2F0aW9uL2JlZm9yZS9BLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDMxYjY5OQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmhlcml0YW5jZVRvRGVsZWdhdGlvbi9tdWx0aXBsZUludGVyZmFjZURlbGVnYXRpb24vYmVmb3JlL0EuamF2YQpAQCAtMCwwICsxLDkgQEAKK3B1YmxpYyBjbGFzcyBBIGltcGxlbWVudHMgSW50ZiwgSW50ZjIgeworICAgIHB1YmxpYyB2b2lkIG1ldGhvZDEoKSB7CisgICAgICAgIG1ldGhvZDIoKTsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBtZXRob2QyICgpIHsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIyIik7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmhlcml0YW5jZVRvRGVsZWdhdGlvbi9tdWx0aXBsZUludGVyZmFjZURlbGVnYXRpb24vYmVmb3JlL0ludGYuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmhlcml0YW5jZVRvRGVsZWdhdGlvbi9tdWx0aXBsZUludGVyZmFjZURlbGVnYXRpb24vYmVmb3JlL0ludGYuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMmM2MTA0Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2luaGVyaXRhbmNlVG9EZWxlZ2F0aW9uL211bHRpcGxlSW50ZXJmYWNlRGVsZWdhdGlvbi9iZWZvcmUvSW50Zi5qYXZhCkBAIC0wLDAgKzEsMyBAQAorcHVibGljIGludGVyZmFjZSBJbnRmIHsKKyAgICB2b2lkIG1ldGhvZDEoKTsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5oZXJpdGFuY2VUb0RlbGVnYXRpb24vbXVsdGlwbGVJbnRlcmZhY2VEZWxlZ2F0aW9uL2JlZm9yZS9JbnRmMi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2luaGVyaXRhbmNlVG9EZWxlZ2F0aW9uL211bHRpcGxlSW50ZXJmYWNlRGVsZWdhdGlvbi9iZWZvcmUvSW50ZjIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MGJlOTg2Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2luaGVyaXRhbmNlVG9EZWxlZ2F0aW9uL211bHRpcGxlSW50ZXJmYWNlRGVsZWdhdGlvbi9iZWZvcmUvSW50ZjIuamF2YQpAQCAtMCwwICsxLDMgQEAKK3B1YmxpYyBpbnRlcmZhY2UgSW50ZjIgeworICAgIHZvaWQgbWV0aG9kMigpOworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmhlcml0YW5jZVRvRGVsZWdhdGlvbi9vdmVycmlkZW5NZXRob2RzL2FmdGVyL0EuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmhlcml0YW5jZVRvRGVsZWdhdGlvbi9vdmVycmlkZW5NZXRob2RzL2FmdGVyL0EuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZWFlODdmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2luaGVyaXRhbmNlVG9EZWxlZ2F0aW9uL292ZXJyaWRlbk1ldGhvZHMvYWZ0ZXIvQS5qYXZhCkBAIC0wLDAgKzEsMjMgQEAKK2NsYXNzIEEgeworICAgIHByaXZhdGUgZmluYWwgTXlCYXNlIG15RGVsZWdhdGUgPSBuZXcgTXlCYXNlKCk7CisgICAgaW50IGZpZWxkRnJvbUE7CisKKyAgICBwdWJsaWMgdm9pZCBmaXJzdE1ldGhvZEZyb21CYXNlKCkgeworICAgICAgICBteURlbGVnYXRlLmZpcnN0TWV0aG9kRnJvbUJhc2UoKTsKKyAgICB9CisKKyAgICBwcml2YXRlIGNsYXNzIE15QmFzZSBleHRlbmRzIEJhc2UgeworICAgICAgICBwdWJsaWMgdm9pZCBmaXJzdE1ldGhvZEZyb21CYXNlKCkgeworICAgICAgICAgICAgc3VwZXIuZmlyc3RNZXRob2RGcm9tQmFzZSgpOworICAgICAgICB9CisKKyAgICAgICAgcHVibGljIHZvaWQgc2Vjb25kTWV0aG9kRnJvbUJhc2UoKSB7CisgICAgICAgICAgICBmaWVsZEZyb21BID0gMjc7CisgICAgICAgICAgICBBLnRoaXMuZmllbGRGcm9tQSsrOworICAgICAgICB9CisKKyAgICAgICAgQmFzZSBnZXRJbnN0YW5jZSgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzOworICAgICAgICB9CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmhlcml0YW5jZVRvRGVsZWdhdGlvbi9vdmVycmlkZW5NZXRob2RzL2FmdGVyL0Jhc2UuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmhlcml0YW5jZVRvRGVsZWdhdGlvbi9vdmVycmlkZW5NZXRob2RzL2FmdGVyL0Jhc2UuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NWQzN2M1Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2luaGVyaXRhbmNlVG9EZWxlZ2F0aW9uL292ZXJyaWRlbk1ldGhvZHMvYWZ0ZXIvQmFzZS5qYXZhCkBAIC0wLDAgKzEsMTIgQEAKK3B1YmxpYyBjbGFzcyBCYXNlIGltcGxlbWVudHMgUnVubmFibGUgeworICAgIHZvaWQgZmlyc3RNZXRob2RGcm9tQmFzZSgpIHsKKyAgICB9IAorICAgIHZvaWQgc2Vjb25kTWV0aG9kRnJvbUJhc2UoKSB7CisgICAgfQorICAgIEJhc2UgZ2V0SW5zdGFuY2UoKSB7CisgICAgICAgIHJldHVybiBudWxsOworICAgIH0KKyAgICBwdWJsaWMgdm9pZCBydW4oKSB7CisgICAgICAgIC8vIGRvIG5vdGhpbmcKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2luaGVyaXRhbmNlVG9EZWxlZ2F0aW9uL292ZXJyaWRlbk1ldGhvZHMvYmVmb3JlL0EuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmhlcml0YW5jZVRvRGVsZWdhdGlvbi9vdmVycmlkZW5NZXRob2RzL2JlZm9yZS9BLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTE5OGFjZgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmhlcml0YW5jZVRvRGVsZWdhdGlvbi9vdmVycmlkZW5NZXRob2RzL2JlZm9yZS9BLmphdmEKQEAgLTAsMCArMSwxMyBAQAorY2xhc3MgQSBleHRlbmRzIEJhc2UgeyAgICAKKyAgICBpbnQgZmllbGRGcm9tQTsKKyAgICBwdWJsaWMgdm9pZCBmaXJzdE1ldGhvZEZyb21CYXNlKCkgeworICAgICAgICBzdXBlci5maXJzdE1ldGhvZEZyb21CYXNlKCk7CisgICAgfQorICAgIHB1YmxpYyB2b2lkIHNlY29uZE1ldGhvZEZyb21CYXNlKCkgeworICAgICAgICBmaWVsZEZyb21BID0gMjc7CisgICAgICAgIHRoaXMuZmllbGRGcm9tQSsrOworICAgIH0KKyAgICBCYXNlIGdldEluc3RhbmNlKCkgeworICAgICAgICByZXR1cm4gdGhpczsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2luaGVyaXRhbmNlVG9EZWxlZ2F0aW9uL292ZXJyaWRlbk1ldGhvZHMvYmVmb3JlL0Jhc2UuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmhlcml0YW5jZVRvRGVsZWdhdGlvbi9vdmVycmlkZW5NZXRob2RzL2JlZm9yZS9CYXNlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDVkMzdjNQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmhlcml0YW5jZVRvRGVsZWdhdGlvbi9vdmVycmlkZW5NZXRob2RzL2JlZm9yZS9CYXNlLmphdmEKQEAgLTAsMCArMSwxMiBAQAorcHVibGljIGNsYXNzIEJhc2UgaW1wbGVtZW50cyBSdW5uYWJsZSB7CisgICAgdm9pZCBmaXJzdE1ldGhvZEZyb21CYXNlKCkgeworICAgIH0gCisgICAgdm9pZCBzZWNvbmRNZXRob2RGcm9tQmFzZSgpIHsKKyAgICB9CisgICAgQmFzZSBnZXRJbnN0YW5jZSgpIHsKKyAgICAgICAgcmV0dXJuIG51bGw7CisgICAgfQorICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKKyAgICAgICAgLy8gZG8gbm90aGluZworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5oZXJpdGFuY2VUb0RlbGVnYXRpb24vc2NyMjA1NTcvYWZ0ZXIveHh4L1NDUjIwNTU3LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5oZXJpdGFuY2VUb0RlbGVnYXRpb24vc2NyMjA1NTcvYWZ0ZXIveHh4L1NDUjIwNTU3LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2Y1ODZjYQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmhlcml0YW5jZVRvRGVsZWdhdGlvbi9zY3IyMDU1Ny9hZnRlci94eHgvU0NSMjA1NTcuamF2YQpAQCAtMCwwICsxLDUzMiBAQAorcGFja2FnZSB4eHg7CisKK2ltcG9ydCBqYXZhLnNxbC4qOworaW1wb3J0IGphdmEudXRpbC5DYWxlbmRhcjsKK2ltcG9ydCBqYXZhLnV0aWwuTWFwOworaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07CitpbXBvcnQgamF2YS5pby5SZWFkZXI7CitpbXBvcnQgamF2YS5tYXRoLkJpZ0RlY2ltYWw7CitpbXBvcnQgamF2YS5uZXQuVVJMOworCisvKioKKyAqIEBhdXRob3IgZHNsCisgKi8KK3B1YmxpYyBjbGFzcyBTQ1IyMDU1NyB7CisKKyAgICBwcml2YXRlIGZpbmFsIE15UmVzdWx0U2V0IG15UmVzdWx0U2V0ID0gbmV3IE15UmVzdWx0U2V0KCk7CisKKyAgICBwdWJsaWMgRGF0ZSBnZXREYXRlKGludCBjb2x1bW5JbmRleCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7CisgICAgICAgIHJldHVybiBteVJlc3VsdFNldC5nZXREYXRlKGNvbHVtbkluZGV4KTsKKyAgICB9CisKKyAgICBwdWJsaWMgRGF0ZSBnZXREYXRlKFN0cmluZyBjb2x1bW5OYW1lKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKKyAgICAgICAgcmV0dXJuIG15UmVzdWx0U2V0LmdldERhdGUoY29sdW1uTmFtZSk7CisgICAgfQorCisgICAgcHVibGljIERhdGUgZ2V0RGF0ZShpbnQgY29sdW1uSW5kZXgsIENhbGVuZGFyIGNhbCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7CisgICAgICAgIHJldHVybiBteVJlc3VsdFNldC5nZXREYXRlKGNvbHVtbkluZGV4LCBjYWwpOworICAgIH0KKworICAgIHB1YmxpYyBEYXRlIGdldERhdGUoU3RyaW5nIGNvbHVtbk5hbWUsIENhbGVuZGFyIGNhbCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7CisgICAgICAgIHJldHVybiBteVJlc3VsdFNldC5nZXREYXRlKGNvbHVtbk5hbWUsIGNhbCk7CisgICAgfQorCisgICAgcHJpdmF0ZSBjbGFzcyBNeVJlc3VsdFNldCBpbXBsZW1lbnRzIFJlc3VsdFNldCB7CisgICAgICAgIHB1YmxpYyB2b2lkIHVwZGF0ZUxvbmcoaW50IGNvbHVtbkluZGV4LCBsb25nIHgpIHRocm93cyBTUUxFeGNlcHRpb24geworICAgICAgICB9CisKKyAgICAgICAgcHVibGljIHZvaWQgdXBkYXRlTG9uZyhTdHJpbmcgY29sdW1uTmFtZSwgbG9uZyB4KSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyBib29sZWFuIGdldEJvb2xlYW4oaW50IGNvbHVtbkluZGV4KSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKKyAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKworICAgICAgICBwdWJsaWMgYm9vbGVhbiBnZXRCb29sZWFuKFN0cmluZyBjb2x1bW5OYW1lKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKKyAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKworICAgICAgICBwdWJsaWMgYm9vbGVhbiB3YXNOdWxsKCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7CisgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisKKyAgICAgICAgcHVibGljIGludCBnZXRSb3coKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKKyAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyBpbnQgZ2V0Q29uY3VycmVuY3koKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKKyAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyBpbnQgZ2V0RmV0Y2hTaXplKCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7CisgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKworICAgICAgICBwdWJsaWMgUmVmIGdldFJlZihpbnQgaSkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7CisgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgIH0KKworICAgICAgICBwdWJsaWMgUmVmIGdldFJlZihTdHJpbmcgY29sTmFtZSkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7CisgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgIH0KKworICAgICAgICBwdWJsaWMgRGF0ZSBnZXREYXRlKGludCBjb2x1bW5JbmRleCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7CisgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgIH0KKworICAgICAgICBwdWJsaWMgRGF0ZSBnZXREYXRlKFN0cmluZyBjb2x1bW5OYW1lKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKKyAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyBEYXRlIGdldERhdGUoaW50IGNvbHVtbkluZGV4LCBDYWxlbmRhciBjYWwpIHRocm93cyBTUUxFeGNlcHRpb24geworICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICB9CisKKyAgICAgICAgcHVibGljIERhdGUgZ2V0RGF0ZShTdHJpbmcgY29sdW1uTmFtZSwgQ2FsZW5kYXIgY2FsKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKKyAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyBTdGF0ZW1lbnQgZ2V0U3RhdGVtZW50KCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7CisgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgIH0KKworICAgICAgICBwdWJsaWMgYm9vbGVhbiBpc0ZpcnN0KCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7CisgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisKKyAgICAgICAgcHVibGljIGJvb2xlYW4gcHJldmlvdXMoKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKKyAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKworICAgICAgICBwdWJsaWMgdm9pZCB1cGRhdGVGbG9hdChpbnQgY29sdW1uSW5kZXgsIGZsb2F0IHgpIHRocm93cyBTUUxFeGNlcHRpb24geworICAgICAgICB9CisKKyAgICAgICAgcHVibGljIHZvaWQgdXBkYXRlRmxvYXQoU3RyaW5nIGNvbHVtbk5hbWUsIGZsb2F0IHgpIHRocm93cyBTUUxFeGNlcHRpb24geworICAgICAgICB9CisKKyAgICAgICAgcHVibGljIHZvaWQgdXBkYXRlQmluYXJ5U3RyZWFtKGludCBjb2x1bW5JbmRleCwgSW5wdXRTdHJlYW0geCwgaW50IGxlbmd0aCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7CisgICAgICAgIH0KKworICAgICAgICBwdWJsaWMgdm9pZCB1cGRhdGVCaW5hcnlTdHJlYW0oU3RyaW5nIGNvbHVtbk5hbWUsIElucHV0U3RyZWFtIHgsIGludCBsZW5ndGgpIHRocm93cyBTUUxFeGNlcHRpb24geworICAgICAgICB9CisKKyAgICAgICAgcHVibGljIHZvaWQgdXBkYXRlUm93KCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7CisgICAgICAgIH0KKworICAgICAgICBwdWJsaWMgbG9uZyBnZXRMb25nKGludCBjb2x1bW5JbmRleCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7CisgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKworICAgICAgICBwdWJsaWMgbG9uZyBnZXRMb25nKFN0cmluZyBjb2x1bW5OYW1lKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKKyAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyB2b2lkIHVwZGF0ZVJlZihpbnQgY29sdW1uSW5kZXgsIFJlZiB4KSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyB2b2lkIHVwZGF0ZVJlZihTdHJpbmcgY29sdW1uTmFtZSwgUmVmIHgpIHRocm93cyBTUUxFeGNlcHRpb24geworICAgICAgICB9CisKKyAgICAgICAgcHVibGljIHZvaWQgdXBkYXRlQnl0ZShpbnQgY29sdW1uSW5kZXgsIGJ5dGUgeCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7CisgICAgICAgIH0KKworICAgICAgICBwdWJsaWMgdm9pZCB1cGRhdGVCeXRlKFN0cmluZyBjb2x1bW5OYW1lLCBieXRlIHgpIHRocm93cyBTUUxFeGNlcHRpb24geworICAgICAgICB9CisKKyAgICAgICAgcHVibGljIHZvaWQgY2FuY2VsUm93VXBkYXRlcygpIHRocm93cyBTUUxFeGNlcHRpb24geworICAgICAgICB9CisKKyAgICAgICAgcHVibGljIFJlYWRlciBnZXRDaGFyYWN0ZXJTdHJlYW0oaW50IGNvbHVtbkluZGV4KSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKKyAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyBSZWFkZXIgZ2V0Q2hhcmFjdGVyU3RyZWFtKFN0cmluZyBjb2x1bW5OYW1lKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKKyAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyBib29sZWFuIGFic29sdXRlKGludCByb3cpIHRocm93cyBTUUxFeGNlcHRpb24geworICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyBib29sZWFuIGZpcnN0KCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7CisgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisKKyAgICAgICAgcHVibGljIHZvaWQgdXBkYXRlQXNjaWlTdHJlYW0oaW50IGNvbHVtbkluZGV4LCBJbnB1dFN0cmVhbSB4LCBpbnQgbGVuZ3RoKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyB2b2lkIHVwZGF0ZUFzY2lpU3RyZWFtKFN0cmluZyBjb2x1bW5OYW1lLCBJbnB1dFN0cmVhbSB4LCBpbnQgbGVuZ3RoKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyB2b2lkIG1vdmVUb0luc2VydFJvdygpIHRocm93cyBTUUxFeGNlcHRpb24geworICAgICAgICB9CisKKyAgICAgICAgcHVibGljIFNRTFdhcm5pbmcgZ2V0V2FybmluZ3MoKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKKyAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyB2b2lkIHVwZGF0ZURhdGUoaW50IGNvbHVtbkluZGV4LCBEYXRlIHgpIHRocm93cyBTUUxFeGNlcHRpb24geworICAgICAgICB9CisKKyAgICAgICAgcHVibGljIHZvaWQgdXBkYXRlRGF0ZShTdHJpbmcgY29sdW1uTmFtZSwgRGF0ZSB4KSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyBJbnB1dFN0cmVhbSBnZXRCaW5hcnlTdHJlYW0oaW50IGNvbHVtbkluZGV4KSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKKyAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyBJbnB1dFN0cmVhbSBnZXRCaW5hcnlTdHJlYW0oU3RyaW5nIGNvbHVtbk5hbWUpIHRocm93cyBTUUxFeGNlcHRpb24geworICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICB9CisKKyAgICAgICAgcHVibGljIFRpbWUgZ2V0VGltZShpbnQgY29sdW1uSW5kZXgpIHRocm93cyBTUUxFeGNlcHRpb24geworICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICB9CisKKyAgICAgICAgcHVibGljIFRpbWUgZ2V0VGltZShTdHJpbmcgY29sdW1uTmFtZSkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7CisgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgIH0KKworICAgICAgICBwdWJsaWMgVGltZSBnZXRUaW1lKGludCBjb2x1bW5JbmRleCwgQ2FsZW5kYXIgY2FsKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKKyAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyBUaW1lIGdldFRpbWUoU3RyaW5nIGNvbHVtbk5hbWUsIENhbGVuZGFyIGNhbCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7CisgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgIH0KKworICAgICAgICBwdWJsaWMgU3RyaW5nIGdldEN1cnNvck5hbWUoKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKKyAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyB2b2lkIHVwZGF0ZUJ5dGVzKGludCBjb2x1bW5JbmRleCwgYnl0ZSB4W10pIHRocm93cyBTUUxFeGNlcHRpb24geworICAgICAgICB9CisKKyAgICAgICAgcHVibGljIHZvaWQgdXBkYXRlQnl0ZXMoU3RyaW5nIGNvbHVtbk5hbWUsIGJ5dGUgeFtdKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyBib29sZWFuIGxhc3QoKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKKyAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKworICAgICAgICBwdWJsaWMgVGltZXN0YW1wIGdldFRpbWVzdGFtcChpbnQgY29sdW1uSW5kZXgpIHRocm93cyBTUUxFeGNlcHRpb24geworICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICB9CisKKyAgICAgICAgcHVibGljIFRpbWVzdGFtcCBnZXRUaW1lc3RhbXAoU3RyaW5nIGNvbHVtbk5hbWUpIHRocm93cyBTUUxFeGNlcHRpb24geworICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICB9CisKKyAgICAgICAgcHVibGljIFRpbWVzdGFtcCBnZXRUaW1lc3RhbXAoaW50IGNvbHVtbkluZGV4LCBDYWxlbmRhciBjYWwpIHRocm93cyBTUUxFeGNlcHRpb24geworICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICB9CisKKyAgICAgICAgcHVibGljIFRpbWVzdGFtcCBnZXRUaW1lc3RhbXAoU3RyaW5nIGNvbHVtbk5hbWUsIENhbGVuZGFyIGNhbCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7CisgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgIH0KKworICAgICAgICBwdWJsaWMgdm9pZCB1cGRhdGVCb29sZWFuKGludCBjb2x1bW5JbmRleCwgYm9vbGVhbiB4KSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyB2b2lkIHVwZGF0ZUJvb2xlYW4oU3RyaW5nIGNvbHVtbk5hbWUsIGJvb2xlYW4geCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7CisgICAgICAgIH0KKworICAgICAgICBwdWJsaWMgdm9pZCBiZWZvcmVGaXJzdCgpIHRocm93cyBTUUxFeGNlcHRpb24geworICAgICAgICB9CisKKyAgICAgICAgcHVibGljIGludCBnZXRGZXRjaERpcmVjdGlvbigpIHRocm93cyBTUUxFeGNlcHRpb24geworICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisKKyAgICAgICAgcHVibGljIHZvaWQgdXBkYXRlRG91YmxlKGludCBjb2x1bW5JbmRleCwgZG91YmxlIHgpIHRocm93cyBTUUxFeGNlcHRpb24geworICAgICAgICB9CisKKyAgICAgICAgcHVibGljIHZvaWQgdXBkYXRlRG91YmxlKFN0cmluZyBjb2x1bW5OYW1lLCBkb3VibGUgeCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7CisgICAgICAgIH0KKworICAgICAgICBwdWJsaWMgdm9pZCBzZXRGZXRjaERpcmVjdGlvbihpbnQgZGlyZWN0aW9uKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyBib29sZWFuIHJvd0RlbGV0ZWQoKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKKyAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKworICAgICAgICBwdWJsaWMgdm9pZCBtb3ZlVG9DdXJyZW50Um93KCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7CisgICAgICAgIH0KKworICAgICAgICBwdWJsaWMgdm9pZCBpbnNlcnRSb3coKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyBCaWdEZWNpbWFsIGdldEJpZ0RlY2ltYWwoaW50IGNvbHVtbkluZGV4KSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKKyAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyBCaWdEZWNpbWFsIGdldEJpZ0RlY2ltYWwoaW50IGNvbHVtbkluZGV4LCBpbnQgc2NhbGUpIHRocm93cyBTUUxFeGNlcHRpb24geworICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICB9CisKKyAgICAgICAgcHVibGljIEJpZ0RlY2ltYWwgZ2V0QmlnRGVjaW1hbChTdHJpbmcgY29sdW1uTmFtZSkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7CisgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgIH0KKworICAgICAgICBwdWJsaWMgQmlnRGVjaW1hbCBnZXRCaWdEZWNpbWFsKFN0cmluZyBjb2x1bW5OYW1lLCBpbnQgc2NhbGUpIHRocm93cyBTUUxFeGNlcHRpb24geworICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICB9CisKKyAgICAgICAgcHVibGljIFVSTCBnZXRVUkwoaW50IGNvbHVtbkluZGV4KSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKKyAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyBVUkwgZ2V0VVJMKFN0cmluZyBjb2x1bW5OYW1lKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKKyAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyBib29sZWFuIGlzQWZ0ZXJMYXN0KCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7CisgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisKKyAgICAgICAgcHVibGljIHNob3J0IGdldFNob3J0KGludCBjb2x1bW5JbmRleCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7CisgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKworICAgICAgICBwdWJsaWMgc2hvcnQgZ2V0U2hvcnQoU3RyaW5nIGNvbHVtbk5hbWUpIHRocm93cyBTUUxFeGNlcHRpb24geworICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisKKyAgICAgICAgcHVibGljIHZvaWQgdXBkYXRlSW50KGludCBjb2x1bW5JbmRleCwgaW50IHgpIHRocm93cyBTUUxFeGNlcHRpb24geworICAgICAgICB9CisKKyAgICAgICAgcHVibGljIHZvaWQgdXBkYXRlSW50KFN0cmluZyBjb2x1bW5OYW1lLCBpbnQgeCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7CisgICAgICAgIH0KKworICAgICAgICBwdWJsaWMgdm9pZCBjbGVhcldhcm5pbmdzKCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7CisgICAgICAgIH0KKworICAgICAgICBwdWJsaWMgdm9pZCB1cGRhdGVDaGFyYWN0ZXJTdHJlYW0oaW50IGNvbHVtbkluZGV4LCBSZWFkZXIgeCwgaW50IGxlbmd0aCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7CisgICAgICAgIH0KKworICAgICAgICBwdWJsaWMgdm9pZCB1cGRhdGVDaGFyYWN0ZXJTdHJlYW0oU3RyaW5nIGNvbHVtbk5hbWUsIFJlYWRlciByZWFkZXIsIGludCBsZW5ndGgpIHRocm93cyBTUUxFeGNlcHRpb24geworICAgICAgICB9CisKKyAgICAgICAgcHVibGljIEJsb2IgZ2V0QmxvYihpbnQgaSkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7CisgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgIH0KKworICAgICAgICBwdWJsaWMgQmxvYiBnZXRCbG9iKFN0cmluZyBjb2xOYW1lKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKKyAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyB2b2lkIHJlZnJlc2hSb3coKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyB2b2lkIHVwZGF0ZVRpbWUoaW50IGNvbHVtbkluZGV4LCBUaW1lIHgpIHRocm93cyBTUUxFeGNlcHRpb24geworICAgICAgICB9CisKKyAgICAgICAgcHVibGljIHZvaWQgdXBkYXRlVGltZShTdHJpbmcgY29sdW1uTmFtZSwgVGltZSB4KSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyB2b2lkIHVwZGF0ZUFycmF5KGludCBjb2x1bW5JbmRleCwgQXJyYXkgeCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7CisgICAgICAgIH0KKworICAgICAgICBwdWJsaWMgdm9pZCB1cGRhdGVBcnJheShTdHJpbmcgY29sdW1uTmFtZSwgQXJyYXkgeCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7CisgICAgICAgIH0KKworICAgICAgICBwdWJsaWMgdm9pZCB1cGRhdGVPYmplY3QoaW50IGNvbHVtbkluZGV4LCBPYmplY3QgeCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7CisgICAgICAgIH0KKworICAgICAgICBwdWJsaWMgdm9pZCB1cGRhdGVPYmplY3QoaW50IGNvbHVtbkluZGV4LCBPYmplY3QgeCwgaW50IHNjYWxlKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyB2b2lkIHVwZGF0ZU9iamVjdChTdHJpbmcgY29sdW1uTmFtZSwgT2JqZWN0IHgpIHRocm93cyBTUUxFeGNlcHRpb24geworICAgICAgICB9CisKKyAgICAgICAgcHVibGljIHZvaWQgdXBkYXRlT2JqZWN0KFN0cmluZyBjb2x1bW5OYW1lLCBPYmplY3QgeCwgaW50IHNjYWxlKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyB2b2lkIHVwZGF0ZU51bGwoaW50IGNvbHVtbkluZGV4KSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyB2b2lkIHVwZGF0ZU51bGwoU3RyaW5nIGNvbHVtbk5hbWUpIHRocm93cyBTUUxFeGNlcHRpb24geworICAgICAgICB9CisKKyAgICAgICAgcHVibGljIHZvaWQgY2xvc2UoKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyBib29sZWFuIHJvd0luc2VydGVkKCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7CisgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisKKyAgICAgICAgcHVibGljIENsb2IgZ2V0Q2xvYihpbnQgaSkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7CisgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgIH0KKworICAgICAgICBwdWJsaWMgQ2xvYiBnZXRDbG9iKFN0cmluZyBjb2xOYW1lKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKKyAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyB2b2lkIHVwZGF0ZUJpZ0RlY2ltYWwoaW50IGNvbHVtbkluZGV4LCBCaWdEZWNpbWFsIHgpIHRocm93cyBTUUxFeGNlcHRpb24geworICAgICAgICB9CisKKyAgICAgICAgcHVibGljIHZvaWQgdXBkYXRlQmlnRGVjaW1hbChTdHJpbmcgY29sdW1uTmFtZSwgQmlnRGVjaW1hbCB4KSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyBpbnQgZ2V0VHlwZSgpIHRocm93cyBTUUxFeGNlcHRpb24geworICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisKKyAgICAgICAgcHVibGljIGJvb2xlYW4gbmV4dCgpIHRocm93cyBTUUxFeGNlcHRpb24geworICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyBpbnQgZ2V0SW50KGludCBjb2x1bW5JbmRleCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7CisgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKworICAgICAgICBwdWJsaWMgaW50IGdldEludChTdHJpbmcgY29sdW1uTmFtZSkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7CisgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKworICAgICAgICBwdWJsaWMgdm9pZCB1cGRhdGVCbG9iKGludCBjb2x1bW5JbmRleCwgQmxvYiB4KSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyB2b2lkIHVwZGF0ZUJsb2IoU3RyaW5nIGNvbHVtbk5hbWUsIEJsb2IgeCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7CisgICAgICAgIH0KKworICAgICAgICBwdWJsaWMgUmVzdWx0U2V0TWV0YURhdGEgZ2V0TWV0YURhdGEoKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKKyAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyBib29sZWFuIHJvd1VwZGF0ZWQoKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKKyAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKworICAgICAgICBwdWJsaWMgQXJyYXkgZ2V0QXJyYXkoaW50IGkpIHRocm93cyBTUUxFeGNlcHRpb24geworICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICB9CisKKyAgICAgICAgcHVibGljIEFycmF5IGdldEFycmF5KFN0cmluZyBjb2xOYW1lKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKKyAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyBieXRlIGdldEJ5dGUoaW50IGNvbHVtbkluZGV4KSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKKyAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyBieXRlIGdldEJ5dGUoU3RyaW5nIGNvbHVtbk5hbWUpIHRocm93cyBTUUxFeGNlcHRpb24geworICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisKKyAgICAgICAgcHVibGljIElucHV0U3RyZWFtIGdldEFzY2lpU3RyZWFtKGludCBjb2x1bW5JbmRleCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7CisgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgIH0KKworICAgICAgICBwdWJsaWMgSW5wdXRTdHJlYW0gZ2V0QXNjaWlTdHJlYW0oU3RyaW5nIGNvbHVtbk5hbWUpIHRocm93cyBTUUxFeGNlcHRpb24geworICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICB9CisKKyAgICAgICAgcHVibGljIGRvdWJsZSBnZXREb3VibGUoaW50IGNvbHVtbkluZGV4KSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKKyAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyBkb3VibGUgZ2V0RG91YmxlKFN0cmluZyBjb2x1bW5OYW1lKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKKyAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyB2b2lkIHVwZGF0ZVRpbWVzdGFtcChpbnQgY29sdW1uSW5kZXgsIFRpbWVzdGFtcCB4KSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyB2b2lkIHVwZGF0ZVRpbWVzdGFtcChTdHJpbmcgY29sdW1uTmFtZSwgVGltZXN0YW1wIHgpIHRocm93cyBTUUxFeGNlcHRpb24geworICAgICAgICB9CisKKyAgICAgICAgcHVibGljIHZvaWQgdXBkYXRlQ2xvYihpbnQgY29sdW1uSW5kZXgsIENsb2IgeCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7CisgICAgICAgIH0KKworICAgICAgICBwdWJsaWMgdm9pZCB1cGRhdGVDbG9iKFN0cmluZyBjb2x1bW5OYW1lLCBDbG9iIHgpIHRocm93cyBTUUxFeGNlcHRpb24geworICAgICAgICB9CisKKyAgICAgICAgcHVibGljIGJvb2xlYW4gaXNCZWZvcmVGaXJzdCgpIHRocm93cyBTUUxFeGNlcHRpb24geworICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyB2b2lkIGRlbGV0ZVJvdygpIHRocm93cyBTUUxFeGNlcHRpb24geworICAgICAgICB9CisKKyAgICAgICAgcHVibGljIHZvaWQgYWZ0ZXJMYXN0KCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7CisgICAgICAgIH0KKworICAgICAgICBwdWJsaWMgSW5wdXRTdHJlYW0gZ2V0VW5pY29kZVN0cmVhbShpbnQgY29sdW1uSW5kZXgpIHRocm93cyBTUUxFeGNlcHRpb24geworICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICB9CisKKyAgICAgICAgcHVibGljIElucHV0U3RyZWFtIGdldFVuaWNvZGVTdHJlYW0oU3RyaW5nIGNvbHVtbk5hbWUpIHRocm93cyBTUUxFeGNlcHRpb24geworICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICB9CisKKyAgICAgICAgcHVibGljIGJ5dGVbXSBnZXRCeXRlcyhpbnQgY29sdW1uSW5kZXgpIHRocm93cyBTUUxFeGNlcHRpb24geworICAgICAgICAgIHJldHVybiBuZXcgYnl0ZVswXTsKKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyBieXRlW10gZ2V0Qnl0ZXMoU3RyaW5nIGNvbHVtbk5hbWUpIHRocm93cyBTUUxFeGNlcHRpb24geworICAgICAgICAgIHJldHVybiBuZXcgYnl0ZVswXTsKKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyB2b2lkIHVwZGF0ZVN0cmluZyhpbnQgY29sdW1uSW5kZXgsIFN0cmluZyB4KSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyB2b2lkIHVwZGF0ZVN0cmluZyhTdHJpbmcgY29sdW1uTmFtZSwgU3RyaW5nIHgpIHRocm93cyBTUUxFeGNlcHRpb24geworICAgICAgICB9CisKKyAgICAgICAgcHVibGljIGZsb2F0IGdldEZsb2F0KGludCBjb2x1bW5JbmRleCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7CisgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKworICAgICAgICBwdWJsaWMgZmxvYXQgZ2V0RmxvYXQoU3RyaW5nIGNvbHVtbk5hbWUpIHRocm93cyBTUUxFeGNlcHRpb24geworICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisKKyAgICAgICAgcHVibGljIE9iamVjdCBnZXRPYmplY3QoaW50IGNvbHVtbkluZGV4KSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKKyAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyBPYmplY3QgZ2V0T2JqZWN0KFN0cmluZyBjb2x1bW5OYW1lKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKKyAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyBPYmplY3QgZ2V0T2JqZWN0KGludCBpLCBNYXAgbWFwKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKKyAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyBPYmplY3QgZ2V0T2JqZWN0KFN0cmluZyBjb2xOYW1lLCBNYXAgbWFwKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKKyAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyB2b2lkIHNldEZldGNoU2l6ZShpbnQgcm93cykgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7CisgICAgICAgIH0KKworICAgICAgICBwdWJsaWMgYm9vbGVhbiBpc0xhc3QoKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKKyAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKworICAgICAgICBwdWJsaWMgdm9pZCB1cGRhdGVTaG9ydChpbnQgY29sdW1uSW5kZXgsIHNob3J0IHgpIHRocm93cyBTUUxFeGNlcHRpb24geworICAgICAgICB9CisKKyAgICAgICAgcHVibGljIHZvaWQgdXBkYXRlU2hvcnQoU3RyaW5nIGNvbHVtbk5hbWUsIHNob3J0IHgpIHRocm93cyBTUUxFeGNlcHRpb24geworICAgICAgICB9CisKKyAgICAgICAgcHVibGljIFN0cmluZyBnZXRTdHJpbmcoaW50IGNvbHVtbkluZGV4KSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKKyAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyBTdHJpbmcgZ2V0U3RyaW5nKFN0cmluZyBjb2x1bW5OYW1lKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKKyAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyBpbnQgZmluZENvbHVtbihTdHJpbmcgY29sdW1uTmFtZSkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7CisgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKworICAgICAgICBwdWJsaWMgYm9vbGVhbiByZWxhdGl2ZShpbnQgcm93cykgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7CisgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2luaGVyaXRhbmNlVG9EZWxlZ2F0aW9uL3NjcjIwNTU3L2JlZm9yZS94eHgvU0NSMjA1NTcuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmhlcml0YW5jZVRvRGVsZWdhdGlvbi9zY3IyMDU1Ny9iZWZvcmUveHh4L1NDUjIwNTU3LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTI3MzI5MgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmhlcml0YW5jZVRvRGVsZWdhdGlvbi9zY3IyMDU1Ny9iZWZvcmUveHh4L1NDUjIwNTU3LmphdmEKQEAgLTAsMCArMSw1MTEgQEAKK3BhY2thZ2UgeHh4OworCitpbXBvcnQgamF2YS5zcWwuKjsKK2ltcG9ydCBqYXZhLnV0aWwuQ2FsZW5kYXI7CitpbXBvcnQgamF2YS51dGlsLk1hcDsKK2ltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOworaW1wb3J0IGphdmEuaW8uUmVhZGVyOworaW1wb3J0IGphdmEubWF0aC5CaWdEZWNpbWFsOworaW1wb3J0IGphdmEubmV0LlVSTDsKKworLyoqCisgKiBAYXV0aG9yIGRzbAorICovCitwdWJsaWMgY2xhc3MgU0NSMjA1NTcgaW1wbGVtZW50cyBSZXN1bHRTZXQgeworICBwdWJsaWMgdm9pZCB1cGRhdGVMb25nKGludCBjb2x1bW5JbmRleCwgbG9uZyB4KSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHVwZGF0ZUxvbmcoU3RyaW5nIGNvbHVtbk5hbWUsIGxvbmcgeCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7CisgIH0KKworICBwdWJsaWMgYm9vbGVhbiBnZXRCb29sZWFuKGludCBjb2x1bW5JbmRleCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7CisgICAgcmV0dXJuIGZhbHNlOworICB9CisKKyAgcHVibGljIGJvb2xlYW4gZ2V0Qm9vbGVhbihTdHJpbmcgY29sdW1uTmFtZSkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7CisgICAgcmV0dXJuIGZhbHNlOworICB9CisKKyAgcHVibGljIGJvb2xlYW4gd2FzTnVsbCgpIHRocm93cyBTUUxFeGNlcHRpb24geworICAgIHJldHVybiBmYWxzZTsKKyAgfQorCisgIHB1YmxpYyBpbnQgZ2V0Um93KCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7CisgICAgcmV0dXJuIDA7CisgIH0KKworICBwdWJsaWMgaW50IGdldENvbmN1cnJlbmN5KCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7CisgICAgcmV0dXJuIDA7CisgIH0KKworICBwdWJsaWMgaW50IGdldEZldGNoU2l6ZSgpIHRocm93cyBTUUxFeGNlcHRpb24geworICAgIHJldHVybiAwOworICB9CisKKyAgcHVibGljIFJlZiBnZXRSZWYoaW50IGkpIHRocm93cyBTUUxFeGNlcHRpb24geworICAgIHJldHVybiBudWxsOworICB9CisKKyAgcHVibGljIFJlZiBnZXRSZWYoU3RyaW5nIGNvbE5hbWUpIHRocm93cyBTUUxFeGNlcHRpb24geworICAgIHJldHVybiBudWxsOworICB9CisKKyAgcHVibGljIERhdGUgZ2V0RGF0ZShpbnQgY29sdW1uSW5kZXgpIHRocm93cyBTUUxFeGNlcHRpb24geworICAgIHJldHVybiBudWxsOworICB9CisKKyAgcHVibGljIERhdGUgZ2V0RGF0ZShTdHJpbmcgY29sdW1uTmFtZSkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7CisgICAgcmV0dXJuIG51bGw7CisgIH0KKworICBwdWJsaWMgRGF0ZSBnZXREYXRlKGludCBjb2x1bW5JbmRleCwgQ2FsZW5kYXIgY2FsKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKKyAgICByZXR1cm4gbnVsbDsKKyAgfQorCisgIHB1YmxpYyBEYXRlIGdldERhdGUoU3RyaW5nIGNvbHVtbk5hbWUsIENhbGVuZGFyIGNhbCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7CisgICAgcmV0dXJuIG51bGw7CisgIH0KKworICBwdWJsaWMgU3RhdGVtZW50IGdldFN0YXRlbWVudCgpIHRocm93cyBTUUxFeGNlcHRpb24geworICAgIHJldHVybiBudWxsOworICB9CisKKyAgcHVibGljIGJvb2xlYW4gaXNGaXJzdCgpIHRocm93cyBTUUxFeGNlcHRpb24geworICAgIHJldHVybiBmYWxzZTsKKyAgfQorCisgIHB1YmxpYyBib29sZWFuIHByZXZpb3VzKCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7CisgICAgcmV0dXJuIGZhbHNlOworICB9CisKKyAgcHVibGljIHZvaWQgdXBkYXRlRmxvYXQoaW50IGNvbHVtbkluZGV4LCBmbG9hdCB4KSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHVwZGF0ZUZsb2F0KFN0cmluZyBjb2x1bW5OYW1lLCBmbG9hdCB4KSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHVwZGF0ZUJpbmFyeVN0cmVhbShpbnQgY29sdW1uSW5kZXgsIElucHV0U3RyZWFtIHgsIGludCBsZW5ndGgpIHRocm93cyBTUUxFeGNlcHRpb24geworICB9CisKKyAgcHVibGljIHZvaWQgdXBkYXRlQmluYXJ5U3RyZWFtKFN0cmluZyBjb2x1bW5OYW1lLCBJbnB1dFN0cmVhbSB4LCBpbnQgbGVuZ3RoKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHVwZGF0ZVJvdygpIHRocm93cyBTUUxFeGNlcHRpb24geworICB9CisKKyAgcHVibGljIGxvbmcgZ2V0TG9uZyhpbnQgY29sdW1uSW5kZXgpIHRocm93cyBTUUxFeGNlcHRpb24geworICAgIHJldHVybiAwOworICB9CisKKyAgcHVibGljIGxvbmcgZ2V0TG9uZyhTdHJpbmcgY29sdW1uTmFtZSkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7CisgICAgcmV0dXJuIDA7CisgIH0KKworICBwdWJsaWMgdm9pZCB1cGRhdGVSZWYoaW50IGNvbHVtbkluZGV4LCBSZWYgeCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7CisgIH0KKworICBwdWJsaWMgdm9pZCB1cGRhdGVSZWYoU3RyaW5nIGNvbHVtbk5hbWUsIFJlZiB4KSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHVwZGF0ZUJ5dGUoaW50IGNvbHVtbkluZGV4LCBieXRlIHgpIHRocm93cyBTUUxFeGNlcHRpb24geworICB9CisKKyAgcHVibGljIHZvaWQgdXBkYXRlQnl0ZShTdHJpbmcgY29sdW1uTmFtZSwgYnl0ZSB4KSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKKyAgfQorCisgIHB1YmxpYyB2b2lkIGNhbmNlbFJvd1VwZGF0ZXMoKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKKyAgfQorCisgIHB1YmxpYyBSZWFkZXIgZ2V0Q2hhcmFjdGVyU3RyZWFtKGludCBjb2x1bW5JbmRleCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7CisgICAgcmV0dXJuIG51bGw7CisgIH0KKworICBwdWJsaWMgUmVhZGVyIGdldENoYXJhY3RlclN0cmVhbShTdHJpbmcgY29sdW1uTmFtZSkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7CisgICAgcmV0dXJuIG51bGw7CisgIH0KKworICBwdWJsaWMgYm9vbGVhbiBhYnNvbHV0ZShpbnQgcm93KSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKKyAgICByZXR1cm4gZmFsc2U7CisgIH0KKworICBwdWJsaWMgYm9vbGVhbiBmaXJzdCgpIHRocm93cyBTUUxFeGNlcHRpb24geworICAgIHJldHVybiBmYWxzZTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHVwZGF0ZUFzY2lpU3RyZWFtKGludCBjb2x1bW5JbmRleCwgSW5wdXRTdHJlYW0geCwgaW50IGxlbmd0aCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7CisgIH0KKworICBwdWJsaWMgdm9pZCB1cGRhdGVBc2NpaVN0cmVhbShTdHJpbmcgY29sdW1uTmFtZSwgSW5wdXRTdHJlYW0geCwgaW50IGxlbmd0aCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7CisgIH0KKworICBwdWJsaWMgdm9pZCBtb3ZlVG9JbnNlcnRSb3coKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKKyAgfQorCisgIHB1YmxpYyBTUUxXYXJuaW5nIGdldFdhcm5pbmdzKCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7CisgICAgcmV0dXJuIG51bGw7CisgIH0KKworICBwdWJsaWMgdm9pZCB1cGRhdGVEYXRlKGludCBjb2x1bW5JbmRleCwgRGF0ZSB4KSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHVwZGF0ZURhdGUoU3RyaW5nIGNvbHVtbk5hbWUsIERhdGUgeCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7CisgIH0KKworICBwdWJsaWMgSW5wdXRTdHJlYW0gZ2V0QmluYXJ5U3RyZWFtKGludCBjb2x1bW5JbmRleCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7CisgICAgcmV0dXJuIG51bGw7CisgIH0KKworICBwdWJsaWMgSW5wdXRTdHJlYW0gZ2V0QmluYXJ5U3RyZWFtKFN0cmluZyBjb2x1bW5OYW1lKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKKyAgICByZXR1cm4gbnVsbDsKKyAgfQorCisgIHB1YmxpYyBUaW1lIGdldFRpbWUoaW50IGNvbHVtbkluZGV4KSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKKyAgICByZXR1cm4gbnVsbDsKKyAgfQorCisgIHB1YmxpYyBUaW1lIGdldFRpbWUoU3RyaW5nIGNvbHVtbk5hbWUpIHRocm93cyBTUUxFeGNlcHRpb24geworICAgIHJldHVybiBudWxsOworICB9CisKKyAgcHVibGljIFRpbWUgZ2V0VGltZShpbnQgY29sdW1uSW5kZXgsIENhbGVuZGFyIGNhbCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7CisgICAgcmV0dXJuIG51bGw7CisgIH0KKworICBwdWJsaWMgVGltZSBnZXRUaW1lKFN0cmluZyBjb2x1bW5OYW1lLCBDYWxlbmRhciBjYWwpIHRocm93cyBTUUxFeGNlcHRpb24geworICAgIHJldHVybiBudWxsOworICB9CisKKyAgcHVibGljIFN0cmluZyBnZXRDdXJzb3JOYW1lKCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7CisgICAgcmV0dXJuIG51bGw7CisgIH0KKworICBwdWJsaWMgdm9pZCB1cGRhdGVCeXRlcyhpbnQgY29sdW1uSW5kZXgsIGJ5dGUgeFtdKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHVwZGF0ZUJ5dGVzKFN0cmluZyBjb2x1bW5OYW1lLCBieXRlIHhbXSkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7CisgIH0KKworICBwdWJsaWMgYm9vbGVhbiBsYXN0KCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7CisgICAgcmV0dXJuIGZhbHNlOworICB9CisKKyAgcHVibGljIFRpbWVzdGFtcCBnZXRUaW1lc3RhbXAoaW50IGNvbHVtbkluZGV4KSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKKyAgICByZXR1cm4gbnVsbDsKKyAgfQorCisgIHB1YmxpYyBUaW1lc3RhbXAgZ2V0VGltZXN0YW1wKFN0cmluZyBjb2x1bW5OYW1lKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKKyAgICByZXR1cm4gbnVsbDsKKyAgfQorCisgIHB1YmxpYyBUaW1lc3RhbXAgZ2V0VGltZXN0YW1wKGludCBjb2x1bW5JbmRleCwgQ2FsZW5kYXIgY2FsKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKKyAgICByZXR1cm4gbnVsbDsKKyAgfQorCisgIHB1YmxpYyBUaW1lc3RhbXAgZ2V0VGltZXN0YW1wKFN0cmluZyBjb2x1bW5OYW1lLCBDYWxlbmRhciBjYWwpIHRocm93cyBTUUxFeGNlcHRpb24geworICAgIHJldHVybiBudWxsOworICB9CisKKyAgcHVibGljIHZvaWQgdXBkYXRlQm9vbGVhbihpbnQgY29sdW1uSW5kZXgsIGJvb2xlYW4geCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7CisgIH0KKworICBwdWJsaWMgdm9pZCB1cGRhdGVCb29sZWFuKFN0cmluZyBjb2x1bW5OYW1lLCBib29sZWFuIHgpIHRocm93cyBTUUxFeGNlcHRpb24geworICB9CisKKyAgcHVibGljIHZvaWQgYmVmb3JlRmlyc3QoKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKKyAgfQorCisgIHB1YmxpYyBpbnQgZ2V0RmV0Y2hEaXJlY3Rpb24oKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKKyAgICByZXR1cm4gMDsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHVwZGF0ZURvdWJsZShpbnQgY29sdW1uSW5kZXgsIGRvdWJsZSB4KSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHVwZGF0ZURvdWJsZShTdHJpbmcgY29sdW1uTmFtZSwgZG91YmxlIHgpIHRocm93cyBTUUxFeGNlcHRpb24geworICB9CisKKyAgcHVibGljIHZvaWQgc2V0RmV0Y2hEaXJlY3Rpb24oaW50IGRpcmVjdGlvbikgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7CisgIH0KKworICBwdWJsaWMgYm9vbGVhbiByb3dEZWxldGVkKCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7CisgICAgcmV0dXJuIGZhbHNlOworICB9CisKKyAgcHVibGljIHZvaWQgbW92ZVRvQ3VycmVudFJvdygpIHRocm93cyBTUUxFeGNlcHRpb24geworICB9CisKKyAgcHVibGljIHZvaWQgaW5zZXJ0Um93KCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7CisgIH0KKworICBwdWJsaWMgQmlnRGVjaW1hbCBnZXRCaWdEZWNpbWFsKGludCBjb2x1bW5JbmRleCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7CisgICAgcmV0dXJuIG51bGw7CisgIH0KKworICBwdWJsaWMgQmlnRGVjaW1hbCBnZXRCaWdEZWNpbWFsKGludCBjb2x1bW5JbmRleCwgaW50IHNjYWxlKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKKyAgICByZXR1cm4gbnVsbDsKKyAgfQorCisgIHB1YmxpYyBCaWdEZWNpbWFsIGdldEJpZ0RlY2ltYWwoU3RyaW5nIGNvbHVtbk5hbWUpIHRocm93cyBTUUxFeGNlcHRpb24geworICAgIHJldHVybiBudWxsOworICB9CisKKyAgcHVibGljIEJpZ0RlY2ltYWwgZ2V0QmlnRGVjaW1hbChTdHJpbmcgY29sdW1uTmFtZSwgaW50IHNjYWxlKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKKyAgICByZXR1cm4gbnVsbDsKKyAgfQorCisgIHB1YmxpYyBVUkwgZ2V0VVJMKGludCBjb2x1bW5JbmRleCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7CisgICAgcmV0dXJuIG51bGw7CisgIH0KKworICBwdWJsaWMgVVJMIGdldFVSTChTdHJpbmcgY29sdW1uTmFtZSkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7CisgICAgcmV0dXJuIG51bGw7CisgIH0KKworICBwdWJsaWMgYm9vbGVhbiBpc0FmdGVyTGFzdCgpIHRocm93cyBTUUxFeGNlcHRpb24geworICAgIHJldHVybiBmYWxzZTsKKyAgfQorCisgIHB1YmxpYyBzaG9ydCBnZXRTaG9ydChpbnQgY29sdW1uSW5kZXgpIHRocm93cyBTUUxFeGNlcHRpb24geworICAgIHJldHVybiAwOworICB9CisKKyAgcHVibGljIHNob3J0IGdldFNob3J0KFN0cmluZyBjb2x1bW5OYW1lKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKKyAgICByZXR1cm4gMDsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHVwZGF0ZUludChpbnQgY29sdW1uSW5kZXgsIGludCB4KSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHVwZGF0ZUludChTdHJpbmcgY29sdW1uTmFtZSwgaW50IHgpIHRocm93cyBTUUxFeGNlcHRpb24geworICB9CisKKyAgcHVibGljIHZvaWQgY2xlYXJXYXJuaW5ncygpIHRocm93cyBTUUxFeGNlcHRpb24geworICB9CisKKyAgcHVibGljIHZvaWQgdXBkYXRlQ2hhcmFjdGVyU3RyZWFtKGludCBjb2x1bW5JbmRleCwgUmVhZGVyIHgsIGludCBsZW5ndGgpIHRocm93cyBTUUxFeGNlcHRpb24geworICB9CisKKyAgcHVibGljIHZvaWQgdXBkYXRlQ2hhcmFjdGVyU3RyZWFtKFN0cmluZyBjb2x1bW5OYW1lLCBSZWFkZXIgcmVhZGVyLCBpbnQgbGVuZ3RoKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKKyAgfQorCisgIHB1YmxpYyBCbG9iIGdldEJsb2IoaW50IGkpIHRocm93cyBTUUxFeGNlcHRpb24geworICAgIHJldHVybiBudWxsOworICB9CisKKyAgcHVibGljIEJsb2IgZ2V0QmxvYihTdHJpbmcgY29sTmFtZSkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7CisgICAgcmV0dXJuIG51bGw7CisgIH0KKworICBwdWJsaWMgdm9pZCByZWZyZXNoUm93KCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7CisgIH0KKworICBwdWJsaWMgdm9pZCB1cGRhdGVUaW1lKGludCBjb2x1bW5JbmRleCwgVGltZSB4KSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHVwZGF0ZVRpbWUoU3RyaW5nIGNvbHVtbk5hbWUsIFRpbWUgeCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7CisgIH0KKworICBwdWJsaWMgdm9pZCB1cGRhdGVBcnJheShpbnQgY29sdW1uSW5kZXgsIEFycmF5IHgpIHRocm93cyBTUUxFeGNlcHRpb24geworICB9CisKKyAgcHVibGljIHZvaWQgdXBkYXRlQXJyYXkoU3RyaW5nIGNvbHVtbk5hbWUsIEFycmF5IHgpIHRocm93cyBTUUxFeGNlcHRpb24geworICB9CisKKyAgcHVibGljIHZvaWQgdXBkYXRlT2JqZWN0KGludCBjb2x1bW5JbmRleCwgT2JqZWN0IHgpIHRocm93cyBTUUxFeGNlcHRpb24geworICB9CisKKyAgcHVibGljIHZvaWQgdXBkYXRlT2JqZWN0KGludCBjb2x1bW5JbmRleCwgT2JqZWN0IHgsIGludCBzY2FsZSkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7CisgIH0KKworICBwdWJsaWMgdm9pZCB1cGRhdGVPYmplY3QoU3RyaW5nIGNvbHVtbk5hbWUsIE9iamVjdCB4KSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHVwZGF0ZU9iamVjdChTdHJpbmcgY29sdW1uTmFtZSwgT2JqZWN0IHgsIGludCBzY2FsZSkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7CisgIH0KKworICBwdWJsaWMgdm9pZCB1cGRhdGVOdWxsKGludCBjb2x1bW5JbmRleCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7CisgIH0KKworICBwdWJsaWMgdm9pZCB1cGRhdGVOdWxsKFN0cmluZyBjb2x1bW5OYW1lKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKKyAgfQorCisgIHB1YmxpYyB2b2lkIGNsb3NlKCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7CisgIH0KKworICBwdWJsaWMgYm9vbGVhbiByb3dJbnNlcnRlZCgpIHRocm93cyBTUUxFeGNlcHRpb24geworICAgIHJldHVybiBmYWxzZTsKKyAgfQorCisgIHB1YmxpYyBDbG9iIGdldENsb2IoaW50IGkpIHRocm93cyBTUUxFeGNlcHRpb24geworICAgIHJldHVybiBudWxsOworICB9CisKKyAgcHVibGljIENsb2IgZ2V0Q2xvYihTdHJpbmcgY29sTmFtZSkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7CisgICAgcmV0dXJuIG51bGw7CisgIH0KKworICBwdWJsaWMgdm9pZCB1cGRhdGVCaWdEZWNpbWFsKGludCBjb2x1bW5JbmRleCwgQmlnRGVjaW1hbCB4KSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHVwZGF0ZUJpZ0RlY2ltYWwoU3RyaW5nIGNvbHVtbk5hbWUsIEJpZ0RlY2ltYWwgeCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7CisgIH0KKworICBwdWJsaWMgaW50IGdldFR5cGUoKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKKyAgICByZXR1cm4gMDsKKyAgfQorCisgIHB1YmxpYyBib29sZWFuIG5leHQoKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKKyAgICByZXR1cm4gZmFsc2U7CisgIH0KKworICBwdWJsaWMgaW50IGdldEludChpbnQgY29sdW1uSW5kZXgpIHRocm93cyBTUUxFeGNlcHRpb24geworICAgIHJldHVybiAwOworICB9CisKKyAgcHVibGljIGludCBnZXRJbnQoU3RyaW5nIGNvbHVtbk5hbWUpIHRocm93cyBTUUxFeGNlcHRpb24geworICAgIHJldHVybiAwOworICB9CisKKyAgcHVibGljIHZvaWQgdXBkYXRlQmxvYihpbnQgY29sdW1uSW5kZXgsIEJsb2IgeCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7CisgIH0KKworICBwdWJsaWMgdm9pZCB1cGRhdGVCbG9iKFN0cmluZyBjb2x1bW5OYW1lLCBCbG9iIHgpIHRocm93cyBTUUxFeGNlcHRpb24geworICB9CisKKyAgcHVibGljIFJlc3VsdFNldE1ldGFEYXRhIGdldE1ldGFEYXRhKCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7CisgICAgcmV0dXJuIG51bGw7CisgIH0KKworICBwdWJsaWMgYm9vbGVhbiByb3dVcGRhdGVkKCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7CisgICAgcmV0dXJuIGZhbHNlOworICB9CisKKyAgcHVibGljIEFycmF5IGdldEFycmF5KGludCBpKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKKyAgICByZXR1cm4gbnVsbDsKKyAgfQorCisgIHB1YmxpYyBBcnJheSBnZXRBcnJheShTdHJpbmcgY29sTmFtZSkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7CisgICAgcmV0dXJuIG51bGw7CisgIH0KKworICBwdWJsaWMgYnl0ZSBnZXRCeXRlKGludCBjb2x1bW5JbmRleCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7CisgICAgcmV0dXJuIDA7CisgIH0KKworICBwdWJsaWMgYnl0ZSBnZXRCeXRlKFN0cmluZyBjb2x1bW5OYW1lKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKKyAgICByZXR1cm4gMDsKKyAgfQorCisgIHB1YmxpYyBJbnB1dFN0cmVhbSBnZXRBc2NpaVN0cmVhbShpbnQgY29sdW1uSW5kZXgpIHRocm93cyBTUUxFeGNlcHRpb24geworICAgIHJldHVybiBudWxsOworICB9CisKKyAgcHVibGljIElucHV0U3RyZWFtIGdldEFzY2lpU3RyZWFtKFN0cmluZyBjb2x1bW5OYW1lKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKKyAgICByZXR1cm4gbnVsbDsKKyAgfQorCisgIHB1YmxpYyBkb3VibGUgZ2V0RG91YmxlKGludCBjb2x1bW5JbmRleCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7CisgICAgcmV0dXJuIDA7CisgIH0KKworICBwdWJsaWMgZG91YmxlIGdldERvdWJsZShTdHJpbmcgY29sdW1uTmFtZSkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7CisgICAgcmV0dXJuIDA7CisgIH0KKworICBwdWJsaWMgdm9pZCB1cGRhdGVUaW1lc3RhbXAoaW50IGNvbHVtbkluZGV4LCBUaW1lc3RhbXAgeCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7CisgIH0KKworICBwdWJsaWMgdm9pZCB1cGRhdGVUaW1lc3RhbXAoU3RyaW5nIGNvbHVtbk5hbWUsIFRpbWVzdGFtcCB4KSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHVwZGF0ZUNsb2IoaW50IGNvbHVtbkluZGV4LCBDbG9iIHgpIHRocm93cyBTUUxFeGNlcHRpb24geworICB9CisKKyAgcHVibGljIHZvaWQgdXBkYXRlQ2xvYihTdHJpbmcgY29sdW1uTmFtZSwgQ2xvYiB4KSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKKyAgfQorCisgIHB1YmxpYyBib29sZWFuIGlzQmVmb3JlRmlyc3QoKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKKyAgICByZXR1cm4gZmFsc2U7CisgIH0KKworICBwdWJsaWMgdm9pZCBkZWxldGVSb3coKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKKyAgfQorCisgIHB1YmxpYyB2b2lkIGFmdGVyTGFzdCgpIHRocm93cyBTUUxFeGNlcHRpb24geworICB9CisKKyAgcHVibGljIElucHV0U3RyZWFtIGdldFVuaWNvZGVTdHJlYW0oaW50IGNvbHVtbkluZGV4KSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKKyAgICByZXR1cm4gbnVsbDsKKyAgfQorCisgIHB1YmxpYyBJbnB1dFN0cmVhbSBnZXRVbmljb2RlU3RyZWFtKFN0cmluZyBjb2x1bW5OYW1lKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKKyAgICByZXR1cm4gbnVsbDsKKyAgfQorCisgIHB1YmxpYyBieXRlW10gZ2V0Qnl0ZXMoaW50IGNvbHVtbkluZGV4KSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKKyAgICByZXR1cm4gbmV3IGJ5dGVbMF07CisgIH0KKworICBwdWJsaWMgYnl0ZVtdIGdldEJ5dGVzKFN0cmluZyBjb2x1bW5OYW1lKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKKyAgICByZXR1cm4gbmV3IGJ5dGVbMF07CisgIH0KKworICBwdWJsaWMgdm9pZCB1cGRhdGVTdHJpbmcoaW50IGNvbHVtbkluZGV4LCBTdHJpbmcgeCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7CisgIH0KKworICBwdWJsaWMgdm9pZCB1cGRhdGVTdHJpbmcoU3RyaW5nIGNvbHVtbk5hbWUsIFN0cmluZyB4KSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKKyAgfQorCisgIHB1YmxpYyBmbG9hdCBnZXRGbG9hdChpbnQgY29sdW1uSW5kZXgpIHRocm93cyBTUUxFeGNlcHRpb24geworICAgIHJldHVybiAwOworICB9CisKKyAgcHVibGljIGZsb2F0IGdldEZsb2F0KFN0cmluZyBjb2x1bW5OYW1lKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKKyAgICByZXR1cm4gMDsKKyAgfQorCisgIHB1YmxpYyBPYmplY3QgZ2V0T2JqZWN0KGludCBjb2x1bW5JbmRleCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7CisgICAgcmV0dXJuIG51bGw7CisgIH0KKworICBwdWJsaWMgT2JqZWN0IGdldE9iamVjdChTdHJpbmcgY29sdW1uTmFtZSkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7CisgICAgcmV0dXJuIG51bGw7CisgIH0KKworICBwdWJsaWMgT2JqZWN0IGdldE9iamVjdChpbnQgaSwgTWFwIG1hcCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7CisgICAgcmV0dXJuIG51bGw7CisgIH0KKworICBwdWJsaWMgT2JqZWN0IGdldE9iamVjdChTdHJpbmcgY29sTmFtZSwgTWFwIG1hcCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7CisgICAgcmV0dXJuIG51bGw7CisgIH0KKworICBwdWJsaWMgdm9pZCBzZXRGZXRjaFNpemUoaW50IHJvd3MpIHRocm93cyBTUUxFeGNlcHRpb24geworICB9CisKKyAgcHVibGljIGJvb2xlYW4gaXNMYXN0KCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7CisgICAgcmV0dXJuIGZhbHNlOworICB9CisKKyAgcHVibGljIHZvaWQgdXBkYXRlU2hvcnQoaW50IGNvbHVtbkluZGV4LCBzaG9ydCB4KSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHVwZGF0ZVNob3J0KFN0cmluZyBjb2x1bW5OYW1lLCBzaG9ydCB4KSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKKyAgfQorCisgIHB1YmxpYyBTdHJpbmcgZ2V0U3RyaW5nKGludCBjb2x1bW5JbmRleCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7CisgICAgcmV0dXJuIG51bGw7CisgIH0KKworICBwdWJsaWMgU3RyaW5nIGdldFN0cmluZyhTdHJpbmcgY29sdW1uTmFtZSkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7CisgICAgcmV0dXJuIG51bGw7CisgIH0KKworICBwdWJsaWMgaW50IGZpbmRDb2x1bW4oU3RyaW5nIGNvbHVtbk5hbWUpIHRocm93cyBTUUxFeGNlcHRpb24geworICAgIHJldHVybiAwOworICB9CisKKyAgcHVibGljIGJvb2xlYW4gcmVsYXRpdmUoaW50IHJvd3MpIHRocm93cyBTUUxFeGNlcHRpb24geworICAgIHJldHVybiBmYWxzZTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2luaGVyaXRhbmNlVG9EZWxlZ2F0aW9uL3NpbXBsZUdlbmVyaWNzL2FmdGVyL0EuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmhlcml0YW5jZVRvRGVsZWdhdGlvbi9zaW1wbGVHZW5lcmljcy9hZnRlci9BLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGY5NmZlMwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmhlcml0YW5jZVRvRGVsZWdhdGlvbi9zaW1wbGVHZW5lcmljcy9hZnRlci9BLmphdmEKQEAgLTAsMCArMSwxMCBAQAorY2xhc3MgTGlzdCA8VD4ge30KKworY2xhc3MgQTxUPiB7CisgICAgcHVibGljIExpc3Q8PyBleHRlbmRzIFQ+IG1ldGhvZDEoKSB7CisgICAgICAgIHJldHVybiBudWxsOworICAgIH0KKyAgICBwdWJsaWMgVCBtZXRob2QyKFQgdCkgeworICAgICAgICByZXR1cm4gbnVsbDsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2luaGVyaXRhbmNlVG9EZWxlZ2F0aW9uL3NpbXBsZUdlbmVyaWNzL2FmdGVyL0IuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmhlcml0YW5jZVRvRGVsZWdhdGlvbi9zaW1wbGVHZW5lcmljcy9hZnRlci9CLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTBjMGJiNAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmhlcml0YW5jZVRvRGVsZWdhdGlvbi9zaW1wbGVHZW5lcmljcy9hZnRlci9CLmphdmEKQEAgLTAsMCArMSwxMSBAQAorY2xhc3MgQiB7CisgICAgcHVibGljIGZpbmFsIEE8U3RyaW5nPiBteURlbGVnYXRlID0gbmV3IEE8U3RyaW5nPigpOworCisgICAgcHVibGljIExpc3Q8PyBleHRlbmRzIFN0cmluZz4gbWV0aG9kMSgpIHsKKyAgICAgICAgcmV0dXJuIG15RGVsZWdhdGUubWV0aG9kMSgpOworICAgIH0KKworICAgIHB1YmxpYyBTdHJpbmcgbWV0aG9kMihTdHJpbmcgcykgeworICAgICAgICByZXR1cm4gbXlEZWxlZ2F0ZS5tZXRob2QyKHMpOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5oZXJpdGFuY2VUb0RlbGVnYXRpb24vc2ltcGxlR2VuZXJpY3MvYmVmb3JlL0EuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmhlcml0YW5jZVRvRGVsZWdhdGlvbi9zaW1wbGVHZW5lcmljcy9iZWZvcmUvQS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRmOTZmZTMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5oZXJpdGFuY2VUb0RlbGVnYXRpb24vc2ltcGxlR2VuZXJpY3MvYmVmb3JlL0EuamF2YQpAQCAtMCwwICsxLDEwIEBACitjbGFzcyBMaXN0IDxUPiB7fQorCitjbGFzcyBBPFQ+IHsKKyAgICBwdWJsaWMgTGlzdDw/IGV4dGVuZHMgVD4gbWV0aG9kMSgpIHsKKyAgICAgICAgcmV0dXJuIG51bGw7CisgICAgfQorICAgIHB1YmxpYyBUIG1ldGhvZDIoVCB0KSB7CisgICAgICAgIHJldHVybiBudWxsOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5oZXJpdGFuY2VUb0RlbGVnYXRpb24vc2ltcGxlR2VuZXJpY3MvYmVmb3JlL0IuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmhlcml0YW5jZVRvRGVsZWdhdGlvbi9zaW1wbGVHZW5lcmljcy9iZWZvcmUvQi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBhNTU0MmEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5oZXJpdGFuY2VUb0RlbGVnYXRpb24vc2ltcGxlR2VuZXJpY3MvYmVmb3JlL0IuamF2YQpAQCAtMCwwICsxLDIgQEAKK2NsYXNzIEIgZXh0ZW5kcyBBPFN0cmluZz4geyAgICAgICAKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5oZXJpdGFuY2VUb0RlbGVnYXRpb24vc2ltcGxlSW5zZXJ0aW9uL2FmdGVyL0EuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmhlcml0YW5jZVRvRGVsZWdhdGlvbi9zaW1wbGVJbnNlcnRpb24vYWZ0ZXIvQS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU5MTMxNzEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5oZXJpdGFuY2VUb0RlbGVnYXRpb24vc2ltcGxlSW5zZXJ0aW9uL2FmdGVyL0EuamF2YQpAQCAtMCwwICsxLDcgQEAKK2NsYXNzIEEgeworICAgIHB1YmxpYyB2b2lkIG1ldGhvZEZyb21BKCkgeworICAgIH0KKyAgICBwdWJsaWMgaW50IGludE1ldGhvZEZyb21BKGludCBpKSB7CisgICAgICAgIHJldHVybiAwOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5oZXJpdGFuY2VUb0RlbGVnYXRpb24vc2ltcGxlSW5zZXJ0aW9uL2FmdGVyL0IuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmhlcml0YW5jZVRvRGVsZWdhdGlvbi9zaW1wbGVJbnNlcnRpb24vYWZ0ZXIvQi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBiMjdhY2QKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5oZXJpdGFuY2VUb0RlbGVnYXRpb24vc2ltcGxlSW5zZXJ0aW9uL2FmdGVyL0IuamF2YQpAQCAtMCwwICsxLDExIEBACitjbGFzcyBCIHsKKyAgICBwdWJsaWMgZmluYWwgQSBteURlbGVnYXRlID0gbmV3IEEoKTsKKworICAgIHB1YmxpYyB2b2lkIG1ldGhvZEZyb21BKCkgeworICAgICAgICBteURlbGVnYXRlLm1ldGhvZEZyb21BKCk7CisgICAgfQorCisgICAgcHVibGljIGludCBpbnRNZXRob2RGcm9tQShpbnQgaSkgeworICAgICAgICByZXR1cm4gbXlEZWxlZ2F0ZS5pbnRNZXRob2RGcm9tQShpKTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2luaGVyaXRhbmNlVG9EZWxlZ2F0aW9uL3NpbXBsZUluc2VydGlvbi9iZWZvcmUvQS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2luaGVyaXRhbmNlVG9EZWxlZ2F0aW9uL3NpbXBsZUluc2VydGlvbi9iZWZvcmUvQS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU5MTMxNzEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5oZXJpdGFuY2VUb0RlbGVnYXRpb24vc2ltcGxlSW5zZXJ0aW9uL2JlZm9yZS9BLmphdmEKQEAgLTAsMCArMSw3IEBACitjbGFzcyBBIHsKKyAgICBwdWJsaWMgdm9pZCBtZXRob2RGcm9tQSgpIHsKKyAgICB9CisgICAgcHVibGljIGludCBpbnRNZXRob2RGcm9tQShpbnQgaSkgeworICAgICAgICByZXR1cm4gMDsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2luaGVyaXRhbmNlVG9EZWxlZ2F0aW9uL3NpbXBsZUluc2VydGlvbi9iZWZvcmUvQi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2luaGVyaXRhbmNlVG9EZWxlZ2F0aW9uL3NpbXBsZUluc2VydGlvbi9iZWZvcmUvQi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc3NjU4M2YKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5oZXJpdGFuY2VUb0RlbGVnYXRpb24vc2ltcGxlSW5zZXJ0aW9uL2JlZm9yZS9CLmphdmEKQEAgLTAsMCArMSwyIEBACitjbGFzcyBCIGV4dGVuZHMgQSB7ICAgICAgIAorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmhlcml0YW5jZVRvRGVsZWdhdGlvbi9zdWJDbGFzcy9hZnRlci9BLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5oZXJpdGFuY2VUb0RlbGVnYXRpb24vc3ViQ2xhc3MvYWZ0ZXIvQS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE4OTI4MTYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5oZXJpdGFuY2VUb0RlbGVnYXRpb24vc3ViQ2xhc3MvYWZ0ZXIvQS5qYXZhCkBAIC0wLDAgKzEsMjAgQEAKK3B1YmxpYyBjbGFzcyBBIHsKKyAgICBwcml2YXRlIGZpbmFsIERlbGVnYXRlZEJhc2UgbXlEZWxlZ2F0ZSA9IG5ldyBEZWxlZ2F0ZWRCYXNlKCk7CisKKyAgICBpbnQgbWV0aG9kRnJvbUEoKSB7CisgICAgICAgIGRlbGVnYXRlZEJhc2VNZXRob2QoKTsKKyAgICAgICAgcmV0dXJuIG15RGVsZWdhdGUuZGVsZWdhdGVkQmFzZUZpZWxkOworICAgIH0KKworICAgIERlbGVnYXRlZEJhc2UgZ2V0U29tZXRoaW5nKCkgeworICAgICAgICByZXR1cm4gbXlEZWxlZ2F0ZTsKKyAgICB9CisKKyAgICBwdWJsaWMgRGVsZWdhdGVkQmFzZSBnZXRNeURlbGVnYXRlKCkgeworICAgICAgICByZXR1cm4gbXlEZWxlZ2F0ZTsKKyAgICB9CisKKyAgICB2b2lkIGRlbGVnYXRlZEJhc2VNZXRob2QoKSB7CisgICAgICAgIG15RGVsZWdhdGUuZGVsZWdhdGVkQmFzZU1ldGhvZCgpOworICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmhlcml0YW5jZVRvRGVsZWdhdGlvbi9zdWJDbGFzcy9hZnRlci9CLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5oZXJpdGFuY2VUb0RlbGVnYXRpb24vc3ViQ2xhc3MvYWZ0ZXIvQi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjljNDBmY2MKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5oZXJpdGFuY2VUb0RlbGVnYXRpb24vc3ViQ2xhc3MvYWZ0ZXIvQi5qYXZhCkBAIC0wLDAgKzEsNSBAQAorcHVibGljIGNsYXNzIEIgZXh0ZW5kcyBBIHsKKyAgICB2b2lkIG1ldGhvZEZyb21CKCkgeworICAgICAgICBzdXBlci5kZWxlZ2F0ZWRCYXNlTWV0aG9kKCk7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2luaGVyaXRhbmNlVG9EZWxlZ2F0aW9uL3N1YkNsYXNzL2FmdGVyL0RlbGVnYXRlZEJhc2UuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmhlcml0YW5jZVRvRGVsZWdhdGlvbi9zdWJDbGFzcy9hZnRlci9EZWxlZ2F0ZWRCYXNlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGYxMjc0ZQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmhlcml0YW5jZVRvRGVsZWdhdGlvbi9zdWJDbGFzcy9hZnRlci9EZWxlZ2F0ZWRCYXNlLmphdmEKQEAgLTAsMCArMSw3IEBACitwdWJsaWMgY2xhc3MgRGVsZWdhdGVkQmFzZSB7CisgICAgaW50IGRlbGVnYXRlZEJhc2VGaWVsZDsKKworICAgIHZvaWQgZGVsZWdhdGVkQmFzZU1ldGhvZCgpIHsKKworICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmhlcml0YW5jZVRvRGVsZWdhdGlvbi9zdWJDbGFzcy9hZnRlci9Vc2FnZS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2luaGVyaXRhbmNlVG9EZWxlZ2F0aW9uL3N1YkNsYXNzL2FmdGVyL1VzYWdlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWQyNzhhNQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmhlcml0YW5jZVRvRGVsZWdhdGlvbi9zdWJDbGFzcy9hZnRlci9Vc2FnZS5qYXZhCkBAIC0wLDAgKzEsMjAgQEAKK3B1YmxpYyBjbGFzcyBVc2FnZSB7CisgICAgcHVibGljIHZvaWQgcGFyYW1ldGVyVXNhZ2VNZXRob2QoRGVsZWdhdGVkQmFzZSBiKSB7CisgICAgICAgIGIuZGVsZWdhdGVkQmFzZU1ldGhvZCgpOworICAgIH0KKworICAgIHB1YmxpYyBpbnQgdGVzdE1ldGhvZCgpIHsKKyAgICAgICAgQSBhID0gbmV3IEEoKTsKKyAgICAgICAgQiBiID0gbmV3IEIoKTsKKyAgICAgICAgcGFyYW1ldGVyVXNhZ2VNZXRob2QoYS5nZXRNeURlbGVnYXRlKCkpOworICAgICAgICBwYXJhbWV0ZXJVc2FnZU1ldGhvZChiLmdldE15RGVsZWdhdGUoKSk7CisgICAgICAgIGEuZGVsZWdhdGVkQmFzZU1ldGhvZCgpOworICAgICAgICBiLmRlbGVnYXRlZEJhc2VNZXRob2QoKTsKKyAgICAgICAgYS5lcXVhbHMoYik7CisgICAgICAgIHJldHVybiBhLmdldE15RGVsZWdhdGUoKS5kZWxlZ2F0ZWRCYXNlRmllbGQgKyBiLmdldE15RGVsZWdhdGUoKS5kZWxlZ2F0ZWRCYXNlRmllbGQ7CisgICAgfQorCisgICAgRGVsZWdhdGVkQmFzZSBnZXREZWxlZ2F0ZWRCYXNlKEEgYSkgeworICAgICAgICByZXR1cm4gYS5nZXRNeURlbGVnYXRlKCk7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2luaGVyaXRhbmNlVG9EZWxlZ2F0aW9uL3N1YkNsYXNzL2JlZm9yZS9BLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5oZXJpdGFuY2VUb0RlbGVnYXRpb24vc3ViQ2xhc3MvYmVmb3JlL0EuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNmU1ZWY0Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2luaGVyaXRhbmNlVG9EZWxlZ2F0aW9uL3N1YkNsYXNzL2JlZm9yZS9BLmphdmEKQEAgLTAsMCArMSwxMCBAQAorcHVibGljIGNsYXNzIEEgZXh0ZW5kcyBEZWxlZ2F0ZWRCYXNleworICAgIGludCBtZXRob2RGcm9tQSgpIHsKKyAgICAgICAgZGVsZWdhdGVkQmFzZU1ldGhvZCgpOworICAgICAgICByZXR1cm4gZGVsZWdhdGVkQmFzZUZpZWxkOworICAgIH0KKworICAgIERlbGVnYXRlZEJhc2UgZ2V0U29tZXRoaW5nKCkgeworICAgICAgICByZXR1cm4gdGhpczsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5oZXJpdGFuY2VUb0RlbGVnYXRpb24vc3ViQ2xhc3MvYmVmb3JlL0IuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmhlcml0YW5jZVRvRGVsZWdhdGlvbi9zdWJDbGFzcy9iZWZvcmUvQi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjljNDBmY2MKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5oZXJpdGFuY2VUb0RlbGVnYXRpb24vc3ViQ2xhc3MvYmVmb3JlL0IuamF2YQpAQCAtMCwwICsxLDUgQEAKK3B1YmxpYyBjbGFzcyBCIGV4dGVuZHMgQSB7CisgICAgdm9pZCBtZXRob2RGcm9tQigpIHsKKyAgICAgICAgc3VwZXIuZGVsZWdhdGVkQmFzZU1ldGhvZCgpOworICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmhlcml0YW5jZVRvRGVsZWdhdGlvbi9zdWJDbGFzcy9iZWZvcmUvRGVsZWdhdGVkQmFzZS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2luaGVyaXRhbmNlVG9EZWxlZ2F0aW9uL3N1YkNsYXNzL2JlZm9yZS9EZWxlZ2F0ZWRCYXNlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGYxMjc0ZQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmhlcml0YW5jZVRvRGVsZWdhdGlvbi9zdWJDbGFzcy9iZWZvcmUvRGVsZWdhdGVkQmFzZS5qYXZhCkBAIC0wLDAgKzEsNyBAQAorcHVibGljIGNsYXNzIERlbGVnYXRlZEJhc2UgeworICAgIGludCBkZWxlZ2F0ZWRCYXNlRmllbGQ7CisKKyAgICB2b2lkIGRlbGVnYXRlZEJhc2VNZXRob2QoKSB7CisKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5oZXJpdGFuY2VUb0RlbGVnYXRpb24vc3ViQ2xhc3MvYmVmb3JlL1VzYWdlLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5oZXJpdGFuY2VUb0RlbGVnYXRpb24vc3ViQ2xhc3MvYmVmb3JlL1VzYWdlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzJlMWVhZQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmhlcml0YW5jZVRvRGVsZWdhdGlvbi9zdWJDbGFzcy9iZWZvcmUvVXNhZ2UuamF2YQpAQCAtMCwwICsxLDIwIEBACitwdWJsaWMgY2xhc3MgVXNhZ2UgeworICAgIHB1YmxpYyB2b2lkIHBhcmFtZXRlclVzYWdlTWV0aG9kKERlbGVnYXRlZEJhc2UgYikgeworICAgICAgICBiLmRlbGVnYXRlZEJhc2VNZXRob2QoKTsKKyAgICB9CisKKyAgICBwdWJsaWMgaW50IHRlc3RNZXRob2QoKSB7CisgICAgICAgIEEgYSA9IG5ldyBBKCk7CisgICAgICAgIEIgYiA9IG5ldyBCKCk7CisgICAgICAgIHBhcmFtZXRlclVzYWdlTWV0aG9kKGEpOworICAgICAgICBwYXJhbWV0ZXJVc2FnZU1ldGhvZChiKTsKKyAgICAgICAgYS5kZWxlZ2F0ZWRCYXNlTWV0aG9kKCk7CisgICAgICAgIGIuZGVsZWdhdGVkQmFzZU1ldGhvZCgpOworICAgICAgICBhLmVxdWFscyhiKTsKKyAgICAgICAgcmV0dXJuIGEuZGVsZWdhdGVkQmFzZUZpZWxkICsgYi5kZWxlZ2F0ZWRCYXNlRmllbGQ7CisgICAgfQorCisgICAgRGVsZWdhdGVkQmFzZSBnZXREZWxlZ2F0ZWRCYXNlKEEgYSkgeworICAgICAgICByZXR1cm4gYTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5oZXJpdGFuY2VUb0RlbGVnYXRpb24vc3ViQ2xhc3NOb01ldGhvZHMvYWZ0ZXIvQS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2luaGVyaXRhbmNlVG9EZWxlZ2F0aW9uL3N1YkNsYXNzTm9NZXRob2RzL2FmdGVyL0EuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOGVlM2JkCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2luaGVyaXRhbmNlVG9EZWxlZ2F0aW9uL3N1YkNsYXNzTm9NZXRob2RzL2FmdGVyL0EuamF2YQpAQCAtMCwwICsxLDE2IEBACitwdWJsaWMgY2xhc3MgQSB7CisgICAgcHJvdGVjdGVkIGZpbmFsIERlbGVnYXRlZEJhc2UgbXlEZWxlZ2F0ZSA9IG5ldyBEZWxlZ2F0ZWRCYXNlKCk7CisKKyAgICBpbnQgbWV0aG9kRnJvbUEoKSB7CisgICAgICAgIG15RGVsZWdhdGUuZGVsZWdhdGVkQmFzZU1ldGhvZCgpOworICAgICAgICByZXR1cm4gbXlEZWxlZ2F0ZS5kZWxlZ2F0ZWRCYXNlRmllbGQ7CisgICAgfQorCisgICAgRGVsZWdhdGVkQmFzZSBnZXRTb21ldGhpbmcoKSB7CisgICAgICAgIHJldHVybiBteURlbGVnYXRlOworICAgIH0KKworICAgIHB1YmxpYyBEZWxlZ2F0ZWRCYXNlIGdldE15RGVsZWdhdGUoKSB7CisgICAgICAgIHJldHVybiBteURlbGVnYXRlOworICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmhlcml0YW5jZVRvRGVsZWdhdGlvbi9zdWJDbGFzc05vTWV0aG9kcy9hZnRlci9CLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5oZXJpdGFuY2VUb0RlbGVnYXRpb24vc3ViQ2xhc3NOb01ldGhvZHMvYWZ0ZXIvQi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI3NTJhNjIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5oZXJpdGFuY2VUb0RlbGVnYXRpb24vc3ViQ2xhc3NOb01ldGhvZHMvYWZ0ZXIvQi5qYXZhCkBAIC0wLDAgKzEsNSBAQAorcHVibGljIGNsYXNzIEIgZXh0ZW5kcyBBIHsKKyAgICB2b2lkIG1ldGhvZEZyb21CKCkgeworICAgICAgICBteURlbGVnYXRlLmRlbGVnYXRlZEJhc2VNZXRob2QoKTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5oZXJpdGFuY2VUb0RlbGVnYXRpb24vc3ViQ2xhc3NOb01ldGhvZHMvYWZ0ZXIvRGVsZWdhdGVkQmFzZS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2luaGVyaXRhbmNlVG9EZWxlZ2F0aW9uL3N1YkNsYXNzTm9NZXRob2RzL2FmdGVyL0RlbGVnYXRlZEJhc2UuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZjEyNzRlCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2luaGVyaXRhbmNlVG9EZWxlZ2F0aW9uL3N1YkNsYXNzTm9NZXRob2RzL2FmdGVyL0RlbGVnYXRlZEJhc2UuamF2YQpAQCAtMCwwICsxLDcgQEAKK3B1YmxpYyBjbGFzcyBEZWxlZ2F0ZWRCYXNlIHsKKyAgICBpbnQgZGVsZWdhdGVkQmFzZUZpZWxkOworCisgICAgdm9pZCBkZWxlZ2F0ZWRCYXNlTWV0aG9kKCkgeworCisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2luaGVyaXRhbmNlVG9EZWxlZ2F0aW9uL3N1YkNsYXNzTm9NZXRob2RzL2FmdGVyL1VzYWdlLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5oZXJpdGFuY2VUb0RlbGVnYXRpb24vc3ViQ2xhc3NOb01ldGhvZHMvYWZ0ZXIvVXNhZ2UuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OWM1ZTkxCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2luaGVyaXRhbmNlVG9EZWxlZ2F0aW9uL3N1YkNsYXNzTm9NZXRob2RzL2FmdGVyL1VzYWdlLmphdmEKQEAgLTAsMCArMSwyMCBAQAorcHVibGljIGNsYXNzIFVzYWdlIHsKKyAgICBwdWJsaWMgdm9pZCBwYXJhbWV0ZXJVc2FnZU1ldGhvZChEZWxlZ2F0ZWRCYXNlIGIpIHsKKyAgICAgICAgYi5kZWxlZ2F0ZWRCYXNlTWV0aG9kKCk7CisgICAgfQorCisgICAgcHVibGljIGludCB0ZXN0TWV0aG9kKCkgeworICAgICAgICBBIGEgPSBuZXcgQSgpOworICAgICAgICBCIGIgPSBuZXcgQigpOworICAgICAgICBwYXJhbWV0ZXJVc2FnZU1ldGhvZChhLmdldE15RGVsZWdhdGUoKSk7CisgICAgICAgIHBhcmFtZXRlclVzYWdlTWV0aG9kKGIuZ2V0TXlEZWxlZ2F0ZSgpKTsKKyAgICAgICAgYS5nZXRNeURlbGVnYXRlKCkuZGVsZWdhdGVkQmFzZU1ldGhvZCgpOworICAgICAgICBiLmdldE15RGVsZWdhdGUoKS5kZWxlZ2F0ZWRCYXNlTWV0aG9kKCk7CisgICAgICAgIGEuZXF1YWxzKGIpOworICAgICAgICByZXR1cm4gYS5nZXRNeURlbGVnYXRlKCkuZGVsZWdhdGVkQmFzZUZpZWxkICsgYi5nZXRNeURlbGVnYXRlKCkuZGVsZWdhdGVkQmFzZUZpZWxkOworICAgIH0KKworICAgIERlbGVnYXRlZEJhc2UgZ2V0RGVsZWdhdGVkQmFzZShBIGEpIHsKKyAgICAgICAgcmV0dXJuIGEuZ2V0TXlEZWxlZ2F0ZSgpOworICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmhlcml0YW5jZVRvRGVsZWdhdGlvbi9zdWJDbGFzc05vTWV0aG9kcy9iZWZvcmUvQS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2luaGVyaXRhbmNlVG9EZWxlZ2F0aW9uL3N1YkNsYXNzTm9NZXRob2RzL2JlZm9yZS9BLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDZlNWVmNAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmhlcml0YW5jZVRvRGVsZWdhdGlvbi9zdWJDbGFzc05vTWV0aG9kcy9iZWZvcmUvQS5qYXZhCkBAIC0wLDAgKzEsMTAgQEAKK3B1YmxpYyBjbGFzcyBBIGV4dGVuZHMgRGVsZWdhdGVkQmFzZXsKKyAgICBpbnQgbWV0aG9kRnJvbUEoKSB7CisgICAgICAgIGRlbGVnYXRlZEJhc2VNZXRob2QoKTsKKyAgICAgICAgcmV0dXJuIGRlbGVnYXRlZEJhc2VGaWVsZDsKKyAgICB9CisKKyAgICBEZWxlZ2F0ZWRCYXNlIGdldFNvbWV0aGluZygpIHsKKyAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2luaGVyaXRhbmNlVG9EZWxlZ2F0aW9uL3N1YkNsYXNzTm9NZXRob2RzL2JlZm9yZS9CLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5oZXJpdGFuY2VUb0RlbGVnYXRpb24vc3ViQ2xhc3NOb01ldGhvZHMvYmVmb3JlL0IuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YzQwZmNjCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2luaGVyaXRhbmNlVG9EZWxlZ2F0aW9uL3N1YkNsYXNzTm9NZXRob2RzL2JlZm9yZS9CLmphdmEKQEAgLTAsMCArMSw1IEBACitwdWJsaWMgY2xhc3MgQiBleHRlbmRzIEEgeworICAgIHZvaWQgbWV0aG9kRnJvbUIoKSB7CisgICAgICAgIHN1cGVyLmRlbGVnYXRlZEJhc2VNZXRob2QoKTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5oZXJpdGFuY2VUb0RlbGVnYXRpb24vc3ViQ2xhc3NOb01ldGhvZHMvYmVmb3JlL0RlbGVnYXRlZEJhc2UuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmhlcml0YW5jZVRvRGVsZWdhdGlvbi9zdWJDbGFzc05vTWV0aG9kcy9iZWZvcmUvRGVsZWdhdGVkQmFzZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhmMTI3NGUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5oZXJpdGFuY2VUb0RlbGVnYXRpb24vc3ViQ2xhc3NOb01ldGhvZHMvYmVmb3JlL0RlbGVnYXRlZEJhc2UuamF2YQpAQCAtMCwwICsxLDcgQEAKK3B1YmxpYyBjbGFzcyBEZWxlZ2F0ZWRCYXNlIHsKKyAgICBpbnQgZGVsZWdhdGVkQmFzZUZpZWxkOworCisgICAgdm9pZCBkZWxlZ2F0ZWRCYXNlTWV0aG9kKCkgeworCisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2luaGVyaXRhbmNlVG9EZWxlZ2F0aW9uL3N1YkNsYXNzTm9NZXRob2RzL2JlZm9yZS9Vc2FnZS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2luaGVyaXRhbmNlVG9EZWxlZ2F0aW9uL3N1YkNsYXNzTm9NZXRob2RzL2JlZm9yZS9Vc2FnZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcyZTFlYWUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5oZXJpdGFuY2VUb0RlbGVnYXRpb24vc3ViQ2xhc3NOb01ldGhvZHMvYmVmb3JlL1VzYWdlLmphdmEKQEAgLTAsMCArMSwyMCBAQAorcHVibGljIGNsYXNzIFVzYWdlIHsKKyAgICBwdWJsaWMgdm9pZCBwYXJhbWV0ZXJVc2FnZU1ldGhvZChEZWxlZ2F0ZWRCYXNlIGIpIHsKKyAgICAgICAgYi5kZWxlZ2F0ZWRCYXNlTWV0aG9kKCk7CisgICAgfQorCisgICAgcHVibGljIGludCB0ZXN0TWV0aG9kKCkgeworICAgICAgICBBIGEgPSBuZXcgQSgpOworICAgICAgICBCIGIgPSBuZXcgQigpOworICAgICAgICBwYXJhbWV0ZXJVc2FnZU1ldGhvZChhKTsKKyAgICAgICAgcGFyYW1ldGVyVXNhZ2VNZXRob2QoYik7CisgICAgICAgIGEuZGVsZWdhdGVkQmFzZU1ldGhvZCgpOworICAgICAgICBiLmRlbGVnYXRlZEJhc2VNZXRob2QoKTsKKyAgICAgICAgYS5lcXVhbHMoYik7CisgICAgICAgIHJldHVybiBhLmRlbGVnYXRlZEJhc2VGaWVsZCArIGIuZGVsZWdhdGVkQmFzZUZpZWxkOworICAgIH0KKworICAgIERlbGVnYXRlZEJhc2UgZ2V0RGVsZWdhdGVkQmFzZShBIGEpIHsKKyAgICAgICAgcmV0dXJuIGE7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2luaGVyaXRhbmNlVG9EZWxlZ2F0aW9uL3N1YmludGVyZmFjZS9hZnRlci9BLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5oZXJpdGFuY2VUb0RlbGVnYXRpb24vc3ViaW50ZXJmYWNlL2FmdGVyL0EuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZmE0ZjhkCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2luaGVyaXRhbmNlVG9EZWxlZ2F0aW9uL3N1YmludGVyZmFjZS9hZnRlci9BLmphdmEKQEAgLTAsMCArMSwxMiBAQAorcHVibGljIGNsYXNzIEEgZXh0ZW5kcyBCIHsKKyAgICBwcml2YXRlIGZpbmFsIE15SiBteURlbGVnYXRlID0gbmV3IE15SigpOworCisgICAgcHVibGljIEogZ2V0TXlEZWxlZ2F0ZSgpIHsKKyAgICAgICAgcmV0dXJuIG15RGVsZWdhdGU7CisgICAgfQorCisgICAgcHJpdmF0ZSBjbGFzcyBNeUogaW1wbGVtZW50cyBKIHsKKyAgICAgICAgcHVibGljIHZvaWQgcnVuKCkgeworICAgICAgICB9CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmhlcml0YW5jZVRvRGVsZWdhdGlvbi9zdWJpbnRlcmZhY2UvYWZ0ZXIvQi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2luaGVyaXRhbmNlVG9EZWxlZ2F0aW9uL3N1YmludGVyZmFjZS9hZnRlci9CLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjUzODM0YgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmhlcml0YW5jZVRvRGVsZWdhdGlvbi9zdWJpbnRlcmZhY2UvYWZ0ZXIvQi5qYXZhCkBAIC0wLDAgKzEsMiBAQAorY2xhc3MgQiB7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2luaGVyaXRhbmNlVG9EZWxlZ2F0aW9uL3N1YmludGVyZmFjZS9hZnRlci9KLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5oZXJpdGFuY2VUb0RlbGVnYXRpb24vc3ViaW50ZXJmYWNlL2FmdGVyL0ouamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMTBmZGIxCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2luaGVyaXRhbmNlVG9EZWxlZ2F0aW9uL3N1YmludGVyZmFjZS9hZnRlci9KLmphdmEKQEAgLTAsMCArMSwyIEBACitpbnRlcmZhY2UgSiBleHRlbmRzIFJ1bm5hYmxlIHsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5oZXJpdGFuY2VUb0RlbGVnYXRpb24vc3ViaW50ZXJmYWNlL2FmdGVyL1VzYWdlLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5oZXJpdGFuY2VUb0RlbGVnYXRpb24vc3ViaW50ZXJmYWNlL2FmdGVyL1VzYWdlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGRjYjY5MwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmhlcml0YW5jZVRvRGVsZWdhdGlvbi9zdWJpbnRlcmZhY2UvYWZ0ZXIvVXNhZ2UuamF2YQpAQCAtMCwwICsxLDYgQEAKK2NsYXNzIFVzYWdlIHsKKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbigpIHsKKyAgICAgICAgQSBhID0gbmV3IEEoKTsKKyAgICAgICAgYS5nZXRNeURlbGVnYXRlKCkucnVuKCk7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmhlcml0YW5jZVRvRGVsZWdhdGlvbi9zdWJpbnRlcmZhY2UvYmVmb3JlL0EuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmhlcml0YW5jZVRvRGVsZWdhdGlvbi9zdWJpbnRlcmZhY2UvYmVmb3JlL0EuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNDk3ZWRjCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2luaGVyaXRhbmNlVG9EZWxlZ2F0aW9uL3N1YmludGVyZmFjZS9iZWZvcmUvQS5qYXZhCkBAIC0wLDAgKzEsNCBAQAorcHVibGljIGNsYXNzIEEgZXh0ZW5kcyBCIGltcGxlbWVudHMgSiB7CisgICAgcHVibGljIHZvaWQgcnVuKCkgeworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5oZXJpdGFuY2VUb0RlbGVnYXRpb24vc3ViaW50ZXJmYWNlL2JlZm9yZS9CLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5oZXJpdGFuY2VUb0RlbGVnYXRpb24vc3ViaW50ZXJmYWNlL2JlZm9yZS9CLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjUzODM0YgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmhlcml0YW5jZVRvRGVsZWdhdGlvbi9zdWJpbnRlcmZhY2UvYmVmb3JlL0IuamF2YQpAQCAtMCwwICsxLDIgQEAKK2NsYXNzIEIgeworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmhlcml0YW5jZVRvRGVsZWdhdGlvbi9zdWJpbnRlcmZhY2UvYmVmb3JlL0ouamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmhlcml0YW5jZVRvRGVsZWdhdGlvbi9zdWJpbnRlcmZhY2UvYmVmb3JlL0ouamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMTBmZGIxCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2luaGVyaXRhbmNlVG9EZWxlZ2F0aW9uL3N1YmludGVyZmFjZS9iZWZvcmUvSi5qYXZhCkBAIC0wLDAgKzEsMiBAQAoraW50ZXJmYWNlIEogZXh0ZW5kcyBSdW5uYWJsZSB7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2luaGVyaXRhbmNlVG9EZWxlZ2F0aW9uL3N1YmludGVyZmFjZS9iZWZvcmUvVXNhZ2UuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmhlcml0YW5jZVRvRGVsZWdhdGlvbi9zdWJpbnRlcmZhY2UvYmVmb3JlL1VzYWdlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjA0ZWEzYgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmhlcml0YW5jZVRvRGVsZWdhdGlvbi9zdWJpbnRlcmZhY2UvYmVmb3JlL1VzYWdlLmphdmEKQEAgLTAsMCArMSw2IEBACitjbGFzcyBVc2FnZSB7CisgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oKSB7CisgICAgICAgIEEgYSA9IG5ldyBBKCk7CisgICAgICAgIGEucnVuKCk7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmhlcml0YW5jZVRvRGVsZWdhdGlvbi9zdXBlckNhbGxzL2FmdGVyL0EuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmhlcml0YW5jZVRvRGVsZWdhdGlvbi9zdXBlckNhbGxzL2FmdGVyL0EuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZGNlNjY4Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2luaGVyaXRhbmNlVG9EZWxlZ2F0aW9uL3N1cGVyQ2FsbHMvYWZ0ZXIvQS5qYXZhCkBAIC0wLDAgKzEsOSBAQAorY2xhc3MgQSB7CisgICAgcHVibGljIEEoaW50IGkpIHsKKyAgICB9CisgICAgcHVibGljIHZvaWQgbWV0aG9kRnJvbUEoKSB7CisgICAgfQorICAgIHB1YmxpYyBpbnQgaW50TWV0aG9kRnJvbUEoaW50IGkpIHsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmhlcml0YW5jZVRvRGVsZWdhdGlvbi9zdXBlckNhbGxzL2FmdGVyL0IuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmhlcml0YW5jZVRvRGVsZWdhdGlvbi9zdXBlckNhbGxzL2FmdGVyL0IuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYThmYTFmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2luaGVyaXRhbmNlVG9EZWxlZ2F0aW9uL3N1cGVyQ2FsbHMvYWZ0ZXIvQi5qYXZhCkBAIC0wLDAgKzEsMTEgQEAKK2NsYXNzIEIgeworICAgIHB1YmxpYyBmaW5hbCBBIG15RGVsZWdhdGU7CisKKyAgICBwdWJsaWMgQigpIHsKKyAgICAgICAgbXlEZWxlZ2F0ZSA9IG5ldyBBKDEpOworICAgIH0KKyAgICAKKyAgICBwdWJsaWMgQihpbnQgaSkgeworICAgICAgICBteURlbGVnYXRlID0gbmV3IEEoaSk7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmhlcml0YW5jZVRvRGVsZWdhdGlvbi9zdXBlckNhbGxzL2JlZm9yZS9BLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5oZXJpdGFuY2VUb0RlbGVnYXRpb24vc3VwZXJDYWxscy9iZWZvcmUvQS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJkY2U2NjgKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5oZXJpdGFuY2VUb0RlbGVnYXRpb24vc3VwZXJDYWxscy9iZWZvcmUvQS5qYXZhCkBAIC0wLDAgKzEsOSBAQAorY2xhc3MgQSB7CisgICAgcHVibGljIEEoaW50IGkpIHsKKyAgICB9CisgICAgcHVibGljIHZvaWQgbWV0aG9kRnJvbUEoKSB7CisgICAgfQorICAgIHB1YmxpYyBpbnQgaW50TWV0aG9kRnJvbUEoaW50IGkpIHsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmhlcml0YW5jZVRvRGVsZWdhdGlvbi9zdXBlckNhbGxzL2JlZm9yZS9CLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5oZXJpdGFuY2VUb0RlbGVnYXRpb24vc3VwZXJDYWxscy9iZWZvcmUvQi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM0NThjM2UKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5oZXJpdGFuY2VUb0RlbGVnYXRpb24vc3VwZXJDYWxscy9iZWZvcmUvQi5qYXZhCkBAIC0wLDAgKzEsOSBAQAorY2xhc3MgQiBleHRlbmRzIEEgeworICAgIHB1YmxpYyBCKCkgeworICAgICAgICBzdXBlcigxKTsKKyAgICB9CisgICAgCisgICAgcHVibGljIEIoaW50IGkpIHsKKyAgICAgICAgc3VwZXIoaSk7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmhlcml0YW5jZVRvRGVsZWdhdGlvbi90eXBlUGFyYW1ldGVyc1N1YnN0aXR1dGlvbi9hZnRlci9BLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5oZXJpdGFuY2VUb0RlbGVnYXRpb24vdHlwZVBhcmFtZXRlcnNTdWJzdGl0dXRpb24vYWZ0ZXIvQS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk0MTRlNGUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5oZXJpdGFuY2VUb0RlbGVnYXRpb24vdHlwZVBhcmFtZXRlcnNTdWJzdGl0dXRpb24vYWZ0ZXIvQS5qYXZhCkBAIC0wLDAgKzEsOCBAQAorcHVibGljIGNsYXNzIEEgeworICAgIHB1YmxpYyBmaW5hbCBNeUludGYgbXlEZWxlZ2F0ZSA9IG5ldyBNeUludGYoKTsKKworICAgIHByaXZhdGUgY2xhc3MgTXlJbnRmIGltcGxlbWVudHMgSW50ZjxJbnRlZ2VyPiB7CisgICAgICAgIHB1YmxpYyB2b2lkIG1ldGhvZDEoSW50ZWdlciB0KSB7CisgICAgICAgIH0KKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2luaGVyaXRhbmNlVG9EZWxlZ2F0aW9uL3R5cGVQYXJhbWV0ZXJzU3Vic3RpdHV0aW9uL2FmdGVyL0ludGYuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmhlcml0YW5jZVRvRGVsZWdhdGlvbi90eXBlUGFyYW1ldGVyc1N1YnN0aXR1dGlvbi9hZnRlci9JbnRmLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGE0MDc4YwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmhlcml0YW5jZVRvRGVsZWdhdGlvbi90eXBlUGFyYW1ldGVyc1N1YnN0aXR1dGlvbi9hZnRlci9JbnRmLmphdmEKQEAgLTAsMCArMSwzIEBACitwdWJsaWMgaW50ZXJmYWNlIEludGY8VD4geworICAgIHZvaWQgbWV0aG9kMShUIHQpOworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmhlcml0YW5jZVRvRGVsZWdhdGlvbi90eXBlUGFyYW1ldGVyc1N1YnN0aXR1dGlvbi9iZWZvcmUvQS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2luaGVyaXRhbmNlVG9EZWxlZ2F0aW9uL3R5cGVQYXJhbWV0ZXJzU3Vic3RpdHV0aW9uL2JlZm9yZS9BLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzc3ZTQ2NgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmhlcml0YW5jZVRvRGVsZWdhdGlvbi90eXBlUGFyYW1ldGVyc1N1YnN0aXR1dGlvbi9iZWZvcmUvQS5qYXZhCkBAIC0wLDAgKzEsNCBAQAorcHVibGljIGNsYXNzIEEgaW1wbGVtZW50cyBJbnRmPEludGVnZXI+IHsKKyAgICBwdWJsaWMgdm9pZCBtZXRob2QxKEludGVnZXIgdCkgeworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5oZXJpdGFuY2VUb0RlbGVnYXRpb24vdHlwZVBhcmFtZXRlcnNTdWJzdGl0dXRpb24vYmVmb3JlL0ludGYuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmhlcml0YW5jZVRvRGVsZWdhdGlvbi90eXBlUGFyYW1ldGVyc1N1YnN0aXR1dGlvbi9iZWZvcmUvSW50Zi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRhNDA3OGMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5oZXJpdGFuY2VUb0RlbGVnYXRpb24vdHlwZVBhcmFtZXRlcnNTdWJzdGl0dXRpb24vYmVmb3JlL0ludGYuamF2YQpAQCAtMCwwICsxLDMgQEAKK3B1YmxpYyBpbnRlcmZhY2UgSW50ZjxUPiB7CisgICAgdm9pZCBtZXRob2QxKFQgdCk7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZUNvbnN0YW50RmllbGQvQ2FzdFdoZW5MYW1iZGFBc1F1YWxpZmllci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZUNvbnN0YW50RmllbGQvQ2FzdFdoZW5MYW1iZGFBc1F1YWxpZmllci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjViZTgwYzgKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lQ29uc3RhbnRGaWVsZC9DYXN0V2hlbkxhbWJkYUFzUXVhbGlmaWVyLmphdmEKQEAgLTAsMCArMSwyMSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDAwLTIwMTIgSmV0QnJhaW5zIHMuci5vLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KK2NsYXNzIFRlc3QgeworICBSdW5uYWJsZSByID0gKCkgLT4ge307CisgIHZvaWQgZm9vKCkgeworICAgIDxjYXJldD5yLnJ1bigpOworICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lQ29uc3RhbnRGaWVsZC9DYXN0V2hlbkxhbWJkYUFzUXVhbGlmaWVyLmphdmEuYWZ0ZXIgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lQ29uc3RhbnRGaWVsZC9DYXN0V2hlbkxhbWJkYUFzUXVhbGlmaWVyLmphdmEuYWZ0ZXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTViYTZmZAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVDb25zdGFudEZpZWxkL0Nhc3RXaGVuTGFtYmRhQXNRdWFsaWZpZXIuamF2YS5hZnRlcgpAQCAtMCwwICsxLDIxIEBACisvKgorICogQ29weXJpZ2h0IDIwMDAtMjAxMiBKZXRCcmFpbnMgcy5yLm8uCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworY2xhc3MgVGVzdCB7CisgICAgdm9pZCBmb28oKSB7CisgICAgKChSdW5uYWJsZSkgKCkgLT4geworICAgIH0pLnJ1bigpOworICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lQ29uc3RhbnRGaWVsZC9RdWFsaWZpZWRDb25zdGFudEV4cHJlc3Npb24uamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVDb25zdGFudEZpZWxkL1F1YWxpZmllZENvbnN0YW50RXhwcmVzc2lvbi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJkYzM3NDQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lQ29uc3RhbnRGaWVsZC9RdWFsaWZpZWRDb25zdGFudEV4cHJlc3Npb24uamF2YQpAQCAtMCwwICsxLDcgQEAKK2NsYXNzIFFUZXN0IHsKKyAgZmluYWwgaW50IG15SSA9IDA7CisKKyAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworICAgIFN5c3RlbS5vdXQucHJpbnRsbihuZXcgUVRlc3QoKS5teTxjYXJldD5JKTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVDb25zdGFudEZpZWxkL1F1YWxpZmllZENvbnN0YW50RXhwcmVzc2lvbi5qYXZhLmFmdGVyIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZUNvbnN0YW50RmllbGQvUXVhbGlmaWVkQ29uc3RhbnRFeHByZXNzaW9uLmphdmEuYWZ0ZXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTIwY2M3MwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVDb25zdGFudEZpZWxkL1F1YWxpZmllZENvbnN0YW50RXhwcmVzc2lvbi5qYXZhLmFmdGVyCkBAIC0wLDAgKzEsNiBAQAorY2xhc3MgUVRlc3QgeworCisgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworICAgIFN5c3RlbS5vdXQucHJpbnRsbigwKTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVDb25zdGFudEZpZWxkL1F1YWxpZmllZENvbnN0YW50RXhwcmVzc2lvblJlcGxhY2VkV2l0aEFub3RoZXJPbmUuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVDb25zdGFudEZpZWxkL1F1YWxpZmllZENvbnN0YW50RXhwcmVzc2lvblJlcGxhY2VkV2l0aEFub3RoZXJPbmUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OWRhZDQ2Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZUNvbnN0YW50RmllbGQvUXVhbGlmaWVkQ29uc3RhbnRFeHByZXNzaW9uUmVwbGFjZWRXaXRoQW5vdGhlck9uZS5qYXZhCkBAIC0wLDAgKzEsMTAgQEAKK2NsYXNzIFFUZXN0IHsKKyAgZmluYWwgaW50IG15SSA9IFNvdXJjZS5DT05TVDsKKyAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworICAgIFN5c3RlbS5vdXQucHJpbnRsbihuZXcgUVRlc3QoKS5teTxjYXJldD5JKTsKKyAgfQorfQorCitjbGFzcyBTb3VyY2UgeworICBpbnQgQ09OU1QgPSAwOworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVDb25zdGFudEZpZWxkL1F1YWxpZmllZENvbnN0YW50RXhwcmVzc2lvblJlcGxhY2VkV2l0aEFub3RoZXJPbmUuamF2YS5hZnRlciBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVDb25zdGFudEZpZWxkL1F1YWxpZmllZENvbnN0YW50RXhwcmVzc2lvblJlcGxhY2VkV2l0aEFub3RoZXJPbmUuamF2YS5hZnRlcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOWQ5YmUyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZUNvbnN0YW50RmllbGQvUXVhbGlmaWVkQ29uc3RhbnRFeHByZXNzaW9uUmVwbGFjZWRXaXRoQW5vdGhlck9uZS5qYXZhLmFmdGVyCkBAIC0wLDAgKzEsOSBAQAorY2xhc3MgUVRlc3QgeworICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oU291cmNlLkNPTlNUKTsKKyAgfQorfQorCitjbGFzcyBTb3VyY2UgeworICBpbnQgQ09OU1QgPSAwOworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVDb25zdGFudEZpZWxkL1F1YWxpZmllZEV4cHJlc3Npb24uamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVDb25zdGFudEZpZWxkL1F1YWxpZmllZEV4cHJlc3Npb24uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYWIyYWYzCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZUNvbnN0YW50RmllbGQvUXVhbGlmaWVkRXhwcmVzc2lvbi5qYXZhCkBAIC0wLDAgKzEsNyBAQAorY2xhc3MgUVRlc3QgeworICBmaW5hbCBpbnQgbXlJID0gZm9vKCk7CisgIGludCBmb28oKXtyZXR1cm4gMDt9CisgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4obmV3IFFUZXN0KCkubXk8Y2FyZXQ+SSk7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lQ29uc3RhbnRGaWVsZC9RdWFsaWZpZWRFeHByZXNzaW9uLmphdmEuYWZ0ZXIgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lQ29uc3RhbnRGaWVsZC9RdWFsaWZpZWRFeHByZXNzaW9uLmphdmEuYWZ0ZXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjEyZmQ0YQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVDb25zdGFudEZpZWxkL1F1YWxpZmllZEV4cHJlc3Npb24uamF2YS5hZnRlcgpAQCAtMCwwICsxLDYgQEAKK2NsYXNzIFFUZXN0IHsKKyAgICBpbnQgZm9vKCl7cmV0dXJuIDA7fQorICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisgICAgU3lzdGVtLm91dC5wcmludGxuKG5ldyBRVGVzdCgpLmZvbygpKTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVDb25zdGFudEZpZWxkL1N0YXRpY2FsbHlJbXBvcnRlZFF1YWxpZmllZEV4cHJlc3Npb24uamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVDb25zdGFudEZpZWxkL1N0YXRpY2FsbHlJbXBvcnRlZFF1YWxpZmllZEV4cHJlc3Npb24uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYTZhMmViCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZUNvbnN0YW50RmllbGQvU3RhdGljYWxseUltcG9ydGVkUXVhbGlmaWVkRXhwcmVzc2lvbi5qYXZhCkBAIC0wLDAgKzEsMTcgQEAKK3BhY2thZ2UgcDsKKworaW1wb3J0IHN0YXRpYyBwLkMubW9jazsKK2NsYXNzIEMgeworICBwdWJsaWMgc3RhdGljIFN0cmluZyBtb2NrKCkgeworICAgIHJldHVybiBudWxsOworICB9Cit9CisKK2NsYXNzIEQgeworICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBDT05TVCA9IG1vY2soKTsKK30KK2NsYXNzIFFUZXN0IHsKKyAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworICAgIFN0cmluZyBzID0gRC5DT048Y2FyZXQ+U1Q7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lQ29uc3RhbnRGaWVsZC9TdGF0aWNhbGx5SW1wb3J0ZWRRdWFsaWZpZWRFeHByZXNzaW9uLmphdmEuYWZ0ZXIgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lQ29uc3RhbnRGaWVsZC9TdGF0aWNhbGx5SW1wb3J0ZWRRdWFsaWZpZWRFeHByZXNzaW9uLmphdmEuYWZ0ZXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzdiZjEzOAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVDb25zdGFudEZpZWxkL1N0YXRpY2FsbHlJbXBvcnRlZFF1YWxpZmllZEV4cHJlc3Npb24uamF2YS5hZnRlcgpAQCAtMCwwICsxLDE2IEBACitwYWNrYWdlIHA7CisKK2ltcG9ydCBzdGF0aWMgcC5DLm1vY2s7CitjbGFzcyBDIHsKKyAgcHVibGljIHN0YXRpYyBTdHJpbmcgbW9jaygpIHsKKyAgICByZXR1cm4gbnVsbDsKKyAgfQorfQorCitjbGFzcyBEIHsKK30KK2NsYXNzIFFUZXN0IHsKKyAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworICAgIFN0cmluZyBzID0gbW9jaygpOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZUxvY2FsL0Fub3RoZXJEZWZpbml0aW9uVXNlZC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZUxvY2FsL0Fub3RoZXJEZWZpbml0aW9uVXNlZC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRmODA5OTEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lTG9jYWwvQW5vdGhlckRlZmluaXRpb25Vc2VkLmphdmEKQEAgLTAsMCArMSwxMCBAQAorY2xhc3MgQSB7CisgICAgU3RyaW5nIHM7CisgICAgYm9vbGVhbiBmb28oKSB7CisgICAgICBib29sZWFuIGJhciA9IGZhbHNlOworICAgICAgaWYgKHMgPT0gbnVsbCkgeworICAgICAgICBiYTxjYXJldD5yID0gdHJ1ZTsKKyAgICAgIH0KKyAgICAgIHJldHVybiBiYXI7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVMb2NhbC9Bbm90aGVyRGVmaW5pdGlvblVzZWQxLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lTG9jYWwvQW5vdGhlckRlZmluaXRpb25Vc2VkMS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM1NWQwODUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lTG9jYWwvQW5vdGhlckRlZmluaXRpb25Vc2VkMS5qYXZhCkBAIC0wLDAgKzEsMTAgQEAKK2NsYXNzIEEgeworICAgIFN0cmluZyBzOworICAgIGJvb2xlYW4gZm9vKCkgeworICAgICAgYm9vbGVhbiBiPGNhcmV0PmFyID0gZmFsc2U7CisgICAgICBpZiAocyA9PSBudWxsKSB7CisgICAgICAgIGJhciA9IHRydWU7CisgICAgICB9CisgICAgICByZXR1cm4gYmFyOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lTG9jYWwvQXJyYXlJbmRleC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZUxvY2FsL0FycmF5SW5kZXguamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOWE3YWViCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZUxvY2FsL0FycmF5SW5kZXguamF2YQpAQCAtMCwwICsxLDI3IEBACisvKgorICogQ29weXJpZ2h0IDIwMDAtMjAxMiBKZXRCcmFpbnMgcy5yLm8uCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworcHVibGljIGNsYXNzIEEgeworCisgIHB1YmxpYyB2b2lkIHRlc3RJbmxpbmVSZWZhY3RvcmluZygpIHsKKyAgICBpbnRbXSBhcnJheSA9IG5ldyBpbnRbMTBdOworICAgIGludCBpbmRleCA9IGNvbXB1dGVJbmRleCgpOworICAgIGFycmF5W2luPGNhcmV0PmRleF0gPSAyMjsKKyAgfQorCisgIHByaXZhdGUgaW50IGNvbXB1dGVJbmRleCgpIHsKKyAgICByZXR1cm4gMDsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVMb2NhbC9BcnJheUluZGV4LmphdmEuYWZ0ZXIgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lTG9jYWwvQXJyYXlJbmRleC5qYXZhLmFmdGVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY4NWJkOGIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lTG9jYWwvQXJyYXlJbmRleC5qYXZhLmFmdGVyCkBAIC0wLDAgKzEsMjYgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwMC0yMDEyIEpldEJyYWlucyBzLnIuby4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCitwdWJsaWMgY2xhc3MgQSB7CisKKyAgcHVibGljIHZvaWQgdGVzdElubGluZVJlZmFjdG9yaW5nKCkgeworICAgIGludFtdIGFycmF5ID0gbmV3IGludFsxMF07CisgICAgICBhcnJheVtjb21wdXRlSW5kZXgoKV0gPSAyMjsKKyAgfQorCisgIHByaXZhdGUgaW50IGNvbXB1dGVJbmRleCgpIHsKKyAgICByZXR1cm4gMDsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVMb2NhbC9BcnJheUluaXRpYWxpemVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lTG9jYWwvQXJyYXlJbml0aWFsaXplci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY3ODY4YTAKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lTG9jYWwvQXJyYXlJbml0aWFsaXplci5qYXZhCkBAIC0wLDAgKzEsNyBAQAorY2xhc3MgVGVzdCB7CisKKyAgU3RyaW5nW10gZ2V0KCl7CisgICAgU3RyaW5nW10gdG88Y2FyZXQ+SW5saW5lID0geyIifTsKKyAgICByZXR1cm4gdG9JbmxpbmU7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lTG9jYWwvQXJyYXlJbml0aWFsaXplci5qYXZhLmFmdGVyIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZUxvY2FsL0FycmF5SW5pdGlhbGl6ZXIuamF2YS5hZnRlcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZmM2ZjZiCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZUxvY2FsL0FycmF5SW5pdGlhbGl6ZXIuamF2YS5hZnRlcgpAQCAtMCwwICsxLDYgQEAKK2NsYXNzIFRlc3QgeworCisgIFN0cmluZ1tdIGdldCgpeworICAgICAgcmV0dXJuIG5ldyBTdHJpbmdbXXsiIn07CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lTG9jYWwvQXNzaWdubWVudFRvQXJyYXlFbGVtZW50LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lTG9jYWwvQXNzaWdubWVudFRvQXJyYXlFbGVtZW50LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzcxMTU5YwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVMb2NhbC9Bc3NpZ25tZW50VG9BcnJheUVsZW1lbnQuamF2YQpAQCAtMCwwICsxLDI0IEBACisvKgorICogQ29weXJpZ2h0IDIwMDAtMjAxMiBKZXRCcmFpbnMgcy5yLm8uCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworcHVibGljIGNsYXNzIEEgeworCisgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKworICAgIGludFtdIGFyciA9IG5ldyBpbnRbM107CisgICAgYXJyWzBdID0gMTIzOworICAgIFN5c3RlbS5vdXQucHJpbnRsbihhcjxjYXJldD5yKTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVMb2NhbC9BdWdtZW50ZWRBc3NpZ25tZW50LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lTG9jYWwvQXVnbWVudGVkQXNzaWdubWVudC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUzNDRjODMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lTG9jYWwvQXVnbWVudGVkQXNzaWdubWVudC5qYXZhCkBAIC0wLDAgKzEsNyBAQAorY2xhc3MgQXVnbWVudGVkQXNzaWdubWVudCB7CisgICAgcHVibGljIHN0YXRpYyBTdHJpbmcgeCgpIHsKKyAgICAgICAgU3RyaW5nIHRlPGNhcmV0Pnh0ID0gIiI7CisgICAgICAgIHRleHQgKz0gInNvbWV0aGluZyI7CisgICAgICAgIHJldHVybiB0ZXh0OworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lTG9jYWwvQXVnbWVudGVkQXNzaWdubWVudC5qYXZhLmFmdGVyIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZUxvY2FsL0F1Z21lbnRlZEFzc2lnbm1lbnQuamF2YS5hZnRlcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MzQ0YzgzCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZUxvY2FsL0F1Z21lbnRlZEFzc2lnbm1lbnQuamF2YS5hZnRlcgpAQCAtMCwwICsxLDcgQEAKK2NsYXNzIEF1Z21lbnRlZEFzc2lnbm1lbnQgeworICAgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIHgoKSB7CisgICAgICAgIFN0cmluZyB0ZTxjYXJldD54dCA9ICIiOworICAgICAgICB0ZXh0ICs9ICJzb21ldGhpbmciOworICAgICAgICByZXR1cm4gdGV4dDsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZUxvY2FsL0Nhc3RBcm91bmRMYW1iZGEuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVMb2NhbC9DYXN0QXJvdW5kTGFtYmRhLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDNkZTkwYwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVMb2NhbC9DYXN0QXJvdW5kTGFtYmRhLmphdmEKQEAgLTAsMCArMSwxMiBAQAorY2xhc3MgVGVzdCB7CisgIHZvaWQgdGVzdCgpIHsKKyAgICBJIGIxID0gU3lzdGVtOjpleGl0OworICAgIGEoYjxjYXJldD4xKTsKKyAgfQorCisgIHZvaWQgYShPYmplY3QgYikge30KKworICBpbnRlcmZhY2UgSSB7CisgICAgdm9pZCBpKGludCBpKTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZUxvY2FsL0Nhc3RBcm91bmRMYW1iZGEuamF2YS5hZnRlciBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVMb2NhbC9DYXN0QXJvdW5kTGFtYmRhLmphdmEuYWZ0ZXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2EwOGM5MAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVMb2NhbC9DYXN0QXJvdW5kTGFtYmRhLmphdmEuYWZ0ZXIKQEAgLTAsMCArMSwxMSBAQAorY2xhc3MgVGVzdCB7CisgIHZvaWQgdGVzdCgpIHsKKyAgICAgIGEoKEkpIFN5c3RlbTo6ZXhpdCk7CisgIH0KKworICB2b2lkIGEoT2JqZWN0IGIpIHt9CisKKyAgaW50ZXJmYWNlIEkgeworICAgIHZvaWQgaShpbnQgaSk7CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVMb2NhbC9DYXN0Tm90TmVlZGVkLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lTG9jYWwvQ2FzdE5vdE5lZWRlZC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE5NWEyY2QKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lTG9jYWwvQ2FzdE5vdE5lZWRlZC5qYXZhCkBAIC0wLDAgKzEsMTUgQEAKK2NsYXNzIFRlc3QgeworICBzdGF0aWMgYm9vbGVhbiBpc0EoKSB7CisgICAgcmV0dXJuIHRydWU7CisgIH0KKworICBzdGF0aWMgYm9vbGVhbiBpc0IoKSB7CisgICAgcmV0dXJuIHRydWU7CisgIH0KKworICBwcml2YXRlIHN0YXRpYyB2b2lkIGZvbyhmaW5hbCBib29sZWFuIGV4cGxpY2l0KSB7CisgICAgZmluYWwgYm9vbGVhbiBoYXMgPSBleHBsaWNpdCA/IGlzQSgpIDogaXNCKCk7CisgICAgaWYgKGhhPGNhcmV0PnMpIHsKKyAgICB9CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lTG9jYWwvQ2FzdE5vdE5lZWRlZC5qYXZhLmFmdGVyIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZUxvY2FsL0Nhc3ROb3ROZWVkZWQuamF2YS5hZnRlcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ODFjYTczCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZUxvY2FsL0Nhc3ROb3ROZWVkZWQuamF2YS5hZnRlcgpAQCAtMCwwICsxLDE0IEBACitjbGFzcyBUZXN0IHsKKyAgc3RhdGljIGJvb2xlYW4gaXNBKCkgeworICAgIHJldHVybiB0cnVlOworICB9CisKKyAgc3RhdGljIGJvb2xlYW4gaXNCKCkgeworICAgIHJldHVybiB0cnVlOworICB9CisKKyAgcHJpdmF0ZSBzdGF0aWMgdm9pZCBmb28oZmluYWwgYm9vbGVhbiBleHBsaWNpdCkgeworICAgICAgaWYgKGV4cGxpY2l0ID8gaXNBKCkgOiBpc0IoKSkgeworICAgIH0KKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVMb2NhbC9Db25kaXRpb25FeHByLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lTG9jYWwvQ29uZGl0aW9uRXhwci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU4ZjNkZjYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lTG9jYWwvQ29uZGl0aW9uRXhwci5qYXZhCkBAIC0wLDAgKzEsNyBAQAorcHVibGljIGNsYXNzIFRlc3QyIHsKKyAgeworICAgICAgSW50ZWdlciBpaWkgPSB0cnVlID8gMSA6IDI7CisgICAgICA8Y2FyZXQ+aWlpLmJ5dGVWYWx1ZSgpOworICB9Cit9CisKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVMb2NhbC9Db25kaXRpb25FeHByLmphdmEuYWZ0ZXIgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lTG9jYWwvQ29uZGl0aW9uRXhwci5qYXZhLmFmdGVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBmMThmMzgKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lTG9jYWwvQ29uZGl0aW9uRXhwci5qYXZhLmFmdGVyCkBAIC0wLDAgKzEsNiBAQAorcHVibGljIGNsYXNzIFRlc3QyIHsKKyAgeworICAgICAgKChJbnRlZ2VyKSAodHJ1ZSA/IDEgOiAyKSkuYnl0ZVZhbHVlKCk7CisgIH0KK30KKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZUxvY2FsL0lERUFERVYxMDM3Ni5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZUxvY2FsL0lERUFERVYxMDM3Ni5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI2NzFlYzIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lTG9jYWwvSURFQURFVjEwMzc2LmphdmEKQEAgLTAsMCArMSw4IEBACitjbGFzcyBJREVBREVWMTAzNzYgeworICAgIHByaXZhdGUgc3RhdGljIGludCBmKGludCBwKSB7CisgICAgICAgIGludCBpID0gMDsKKyAgICAgICAgaSA9IDk7CisgICAgICAgIGkgPSBmKDxjYXJldD5pKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVMb2NhbC9JREVBREVWMTAzNzYuamF2YS5hZnRlciBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVMb2NhbC9JREVBREVWMTAzNzYuamF2YS5hZnRlcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YWY1YzZlCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZUxvY2FsL0lERUFERVYxMDM3Ni5qYXZhLmFmdGVyCkBAIC0wLDAgKzEsNyBAQAorY2xhc3MgSURFQURFVjEwMzc2IHsKKyAgICBwcml2YXRlIHN0YXRpYyBpbnQgZihpbnQgcCkgeworICAgICAgICBpbnQgaSA9IDA7CisgICAgICAgIGkgPSBmKDkpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZUxvY2FsL0lERUFERVYxMjI0NC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZUxvY2FsL0lERUFERVYxMjI0NC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRlYWNiM2UKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lTG9jYWwvSURFQURFVjEyMjQ0LmphdmEKQEAgLTAsMCArMSw5IEBACitpbXBvcnQgamF2YS51dGlsLio7CisKK2NsYXNzIElERUFERVYxMjI0NCB7CisgICAgeworICAgICAgICBUcmVlTWFwPFN0cmluZywgU2V0PEludGVnZXI+PiBtYXAgPSBuZXcgVHJlZU1hcDxTdHJpbmcsIFNldDxJbnRlZ2VyPj4oKTsKKyAgICAgICAgU2V0PEludGVnZXI+IHNldCA9IENvbGxlY3Rpb25zLmVtcHR5U2V0KCk7CisgICAgICAgIG1hcC5wdXQoImZvbyIsIDxjYXJldD5zZXQpOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lTG9jYWwvSURFQURFVjEyMjQ0LmphdmEuYWZ0ZXIgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lTG9jYWwvSURFQURFVjEyMjQ0LmphdmEuYWZ0ZXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGEyMWYyMAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVMb2NhbC9JREVBREVWMTIyNDQuamF2YS5hZnRlcgpAQCAtMCwwICsxLDggQEAKK2ltcG9ydCBqYXZhLnV0aWwuKjsKKworY2xhc3MgSURFQURFVjEyMjQ0IHsKKyAgICB7CisgICAgICAgIFRyZWVNYXA8U3RyaW5nLCBTZXQ8SW50ZWdlcj4+IG1hcCA9IG5ldyBUcmVlTWFwPFN0cmluZywgU2V0PEludGVnZXI+PigpOworICAgICAgICBtYXAucHV0KCJmb28iLCBDb2xsZWN0aW9ucy48SW50ZWdlcj5lbXB0eVNldCgpKTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZUxvY2FsL0lERUFERVYxMzE1MS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZUxvY2FsL0lERUFERVYxMzE1MS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2YzQ2OWEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lTG9jYWwvSURFQURFVjEzMTUxLmphdmEKQEAgLTAsMCArMSwxMyBAQAorY2xhc3MgVGVzdGVyIHsKKyAgICB2b2lkIG1ldGhvZChTdHJpbmcgeCwgU3RyaW5nLi4uIHkpIHsKKyAgICB9CisKKyAgICB2b2lkIG1ldGhvZDEoU3RyaW5nIHgsIFN0cmluZ1tdIHkpIHsKKyAgICB9CisKKyAgICB2b2lkIGNhbGxlcigpIHsKKyAgICAgICAgU3RyaW5nW10gdGhpbmcgPSB7ImEiLCAiYiJ9OworICAgICAgICBtZXRob2QoIiIsIDxjYXJldD50aGluZyk7CisgICAgICAgIG1ldGhvZDEoIiIsIHRoaW5nKTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZUxvY2FsL0lERUFERVYxMzE1MS5qYXZhLmFmdGVyIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZUxvY2FsL0lERUFERVYxMzE1MS5qYXZhLmFmdGVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRjYmY0YjYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lTG9jYWwvSURFQURFVjEzMTUxLmphdmEuYWZ0ZXIKQEAgLTAsMCArMSwxMiBAQAorY2xhc3MgVGVzdGVyIHsKKyAgICB2b2lkIG1ldGhvZChTdHJpbmcgeCwgU3RyaW5nLi4uIHkpIHsKKyAgICB9CisKKyAgICB2b2lkIG1ldGhvZDEoU3RyaW5nIHgsIFN0cmluZ1tdIHkpIHsKKyAgICB9CisKKyAgICB2b2lkIGNhbGxlcigpIHsKKyAgICAgICAgbWV0aG9kKCIiLCAiYSIsICJiIik7CisgICAgICAgIG1ldGhvZDEoIiIsIG5ldyBTdHJpbmdbXXsiYSIsICJiIn0pOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lTG9jYWwvSURFQURFVjk1MC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZUxvY2FsL0lERUFERVY5NTAuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZjgwYThlCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZUxvY2FsL0lERUFERVY5NTAuamF2YQpAQCAtMCwwICsxLDEwIEBACitwdWJsaWMgY2xhc3MgSURFQURFVjk1MCB7CisgICAgdm9pZCBmb28gKCkgeworICAgICAgICBpbnQgZG9vcl8xID0gIDA7CisgICAgICAgIGZsb2F0IGRvb3JQID0gZG9vcl8xIDsKKyAgICAgICAgLy9DYXN0IHNob3VsZCBiZSBpbnNlcnRlZCB3aGVuIGlubGluaW5nLCBvdGhlcndpc2Ugc2VtYW50aWNzIGNoYW5nZXMKKyAgICAgICAgZmxvYXQgZDEgPSAoPGNhcmV0PmRvb3JQIC8gTk9GX0xPT1BTKTsKKyAgICB9CisKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgTk9GX0xPT1BTID0gMjsKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVMb2NhbC9JREVBREVWOTUwLmphdmEuYWZ0ZXIgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lTG9jYWwvSURFQURFVjk1MC5qYXZhLmFmdGVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU4NmRlMjgKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lTG9jYWwvSURFQURFVjk1MC5qYXZhLmFmdGVyCkBAIC0wLDAgKzEsOSBAQAorcHVibGljIGNsYXNzIElERUFERVY5NTAgeworICAgIHZvaWQgZm9vICgpIHsKKyAgICAgICAgaW50IGRvb3JfMSA9ICAwOworICAgICAgICAvL0Nhc3Qgc2hvdWxkIGJlIGluc2VydGVkIHdoZW4gaW5saW5pbmcsIG90aGVyd2lzZSBzZW1hbnRpY3MgY2hhbmdlcworICAgICAgICBmbG9hdCBkMSA9ICgoZmxvYXQpIGRvb3JfMSAvIE5PRl9MT09QUyk7CisgICAgfQorCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IE5PRl9MT09QUyA9IDI7Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lTG9jYWwvSWRlYURFVjk0MDQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVMb2NhbC9JZGVhREVWOTQwNC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgxNjZjNmUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lTG9jYWwvSWRlYURFVjk0MDQuamF2YQpAQCAtMCwwICsxLDggQEAKK2ltcG9ydCBqYXZheC5zd2luZy4qOworCitjbGFzcyBUZXN0IHsKKyAgICBwdWJsaWMgc3RhdGljIEpDb21wb25lbnQgZ2V0Rm9vKCkgeworICAgICAgICBKQ29tcG9uZW50IGMgPSBuZXcgSlBhbmVsKCk7CisgICAgICAgIHJldHVybiA8Y2FyZXQ+YzsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZUxvY2FsL0lkZWFERVY5NDA0LmphdmEuYWZ0ZXIgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lTG9jYWwvSWRlYURFVjk0MDQuamF2YS5hZnRlcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMGMzY2I4Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZUxvY2FsL0lkZWFERVY5NDA0LmphdmEuYWZ0ZXIKQEAgLTAsMCArMSw3IEBACitpbXBvcnQgamF2YXguc3dpbmcuKjsKKworY2xhc3MgVGVzdCB7CisgICAgcHVibGljIHN0YXRpYyBKQ29tcG9uZW50IGdldEZvbygpIHsKKyAgICAgICAgcmV0dXJuIG5ldyBKUGFuZWwoKTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZUxvY2FsL0luZmVyZW5jZS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZUxvY2FsL0luZmVyZW5jZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI1NmNlNGYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lTG9jYWwvSW5mZXJlbmNlLmphdmEKQEAgLTAsMCArMSwxMiBAQAorY2xhc3MgSW5mZXJlbmNlIHsKKyAgICAgICAgcHVibGljIDxUPiBUIGdldFgoKSB7CisgICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgfQorCisgICAgICAgIHZvaWQgZm9vIChTdHJpbmcgcykge30KKworICAgICAgICB7CisgICAgICAgICAgIFN0cmluZyB2MiA9IG5ldyBJbmZlcmVuY2UoKS5nZXRYKCk7CisgICAgICAgICAgIGZvbyg8Y2FyZXQ+djIpOworICAgICAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZUxvY2FsL0luZmVyZW5jZS5qYXZhLmFmdGVyIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZUxvY2FsL0luZmVyZW5jZS5qYXZhLmFmdGVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE1ZmQzMmMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lTG9jYWwvSW5mZXJlbmNlLmphdmEuYWZ0ZXIKQEAgLTAsMCArMSwxMSBAQAorY2xhc3MgSW5mZXJlbmNlIHsKKyAgICAgICAgcHVibGljIDxUPiBUIGdldFgoKSB7CisgICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgfQorCisgICAgICAgIHZvaWQgZm9vIChTdHJpbmcgcykge30KKworICAgICAgICB7CisgICAgICAgICAgICBmb28obmV3IEluZmVyZW5jZSgpLjxTdHJpbmc+Z2V0WCgpKTsKKyAgICAgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVMb2NhbC9JbmxpbmVGcm9tVHJ5Q2F0Y2guamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVMb2NhbC9JbmxpbmVGcm9tVHJ5Q2F0Y2guamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YzIyNDI0Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZUxvY2FsL0lubGluZUZyb21UcnlDYXRjaC5qYXZhCkBAIC0wLDAgKzEsMTggQEAKK2ltcG9ydCBqYXZhLmlvLio7CisKK2NsYXNzIFRlc3QgeworICBwcml2YXRlIHN0YXRpYyBJbnB1dFN0cmVhbSBnZXRJbnB1dFVuY2hlY2tlZCgpIHRocm93cyBJT0V4Y2VwdGlvbiB7CisgICAgSW5wdXRTdHJlYW0gaW47CisgICAgdHJ5IHsKKyAgICAgIGluID0gZmYoKTsKKyAgICB9CisgICAgY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKyAgICAgIHRocm93IG5ldyBJT0V4Y2VwdGlvbigpOworICAgIH0KKyAgICByZXR1cm4gaTxjYXJldD5uOworICB9CisKKyAgc3RhdGljIElucHV0U3RyZWFtIGZmKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKKyAgICByZXR1cm4gbnVsbDsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVMb2NhbC9JbmxpbmVGcm9tVHJ5Q2F0Y2hBdmFpbGFibGUuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVMb2NhbC9JbmxpbmVGcm9tVHJ5Q2F0Y2hBdmFpbGFibGUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MTE2NGVhCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZUxvY2FsL0lubGluZUZyb21UcnlDYXRjaEF2YWlsYWJsZS5qYXZhCkBAIC0wLDAgKzEsMTUgQEAKK2ltcG9ydCBqYXZhLmlvLio7CisKK2NsYXNzIFRlc3QgeworICBwcml2YXRlIHN0YXRpYyBJbnB1dFN0cmVhbSBnZXRJbnB1dFVuY2hlY2tlZChJbnB1dFN0cmVhbSBpbnB1dFN1cHBsaWVyKSB0aHJvd3MgSU9FeGNlcHRpb24geworICAgIElucHV0U3RyZWFtIGluOworICAgIHRyeSB7CisgICAgICBpbiA9IG51bGw7CisgICAgfQorICAgIGNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CisgICAgICB0aHJvdyBuZXcgSU9FeGNlcHRpb24oKTsKKyAgICB9CisgICAgcmV0dXJuIGk8Y2FyZXQ+bjsKKyAgfQorCit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZUxvY2FsL0lubGluZUZyb21UcnlDYXRjaEF2YWlsYWJsZS5qYXZhLmFmdGVyIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZUxvY2FsL0lubGluZUZyb21UcnlDYXRjaEF2YWlsYWJsZS5qYXZhLmFmdGVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE4NTNkOGEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lTG9jYWwvSW5saW5lRnJvbVRyeUNhdGNoQXZhaWxhYmxlLmphdmEuYWZ0ZXIKQEAgLTAsMCArMSwxMyBAQAoraW1wb3J0IGphdmEuaW8uKjsKKworY2xhc3MgVGVzdCB7CisgIHByaXZhdGUgc3RhdGljIElucHV0U3RyZWFtIGdldElucHV0VW5jaGVja2VkKElucHV0U3RyZWFtIGlucHV0U3VwcGxpZXIpIHRocm93cyBJT0V4Y2VwdGlvbiB7CisgICAgICB0cnkgeworICAgICAgfQorICAgIGNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CisgICAgICB0aHJvdyBuZXcgSU9FeGNlcHRpb24oKTsKKyAgICB9CisgICAgcmV0dXJuIG51bGw7CisgIH0KKworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVMb2NhbC9Jbm5lcklubmVyQ2xhc3MuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVMb2NhbC9Jbm5lcklubmVyQ2xhc3MuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMjBlNTFjCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZUxvY2FsL0lubmVySW5uZXJDbGFzcy5qYXZhCkBAIC0wLDAgKzEsMjEgQEAKK3B1YmxpYyBjbGFzcyBJbiB7CisKKyAgICB2b2lkIGZvb2woKSB7CisgICAgICAgIGZpbmFsIGJvb2xlYW4gZGVsZXRlID0gbmFycigpOworICAgICAgICBuZXcgUnVubmFibGUoKSB7CisgICAgICAgICAgICBwdWJsaWMgdm9pZCBydW4oKSB7CisgICAgICAgICAgICAgICAgbmV3IFJ1bm5hYmxlKCkgeworICAgICAgICAgICAgICAgICAgICBwdWJsaWMgdm9pZCBydW4oKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGVsPGNhcmV0PmV0ZSkgeworCisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9LnJ1bigpOworICAgICAgICAgICAgfQorICAgICAgICB9OworICAgIH0KKworICAgIGJvb2xlYW4gbmFycigpIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVMb2NhbC9Jbm5lcklubmVyQ2xhc3MuamF2YS5hZnRlciBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVMb2NhbC9Jbm5lcklubmVyQ2xhc3MuamF2YS5hZnRlcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MTNjNGUxCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZUxvY2FsL0lubmVySW5uZXJDbGFzcy5qYXZhLmFmdGVyCkBAIC0wLDAgKzEsMjAgQEAKK3B1YmxpYyBjbGFzcyBJbiB7CisKKyAgICB2b2lkIGZvb2woKSB7CisgICAgICAgIG5ldyBSdW5uYWJsZSgpIHsKKyAgICAgICAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKKyAgICAgICAgICAgICAgICBuZXcgUnVubmFibGUoKSB7CisgICAgICAgICAgICAgICAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuYXJyKCkpIHsKKworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfS5ydW4oKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfTsKKyAgICB9CisKKyAgICBib29sZWFuIG5hcnIoKSB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lTG9jYWwvTGFtYmRhRXhwci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZUxvY2FsL0xhbWJkYUV4cHIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMTUyYzk2Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZUxvY2FsL0xhbWJkYUV4cHIuamF2YQpAQCAtMCwwICsxLDExIEBACitpbnRlcmZhY2UgU0FNPFg+IHsKKyAgICAgICAgWCBtKGludCBpLCBpbnQgaik7CisgICAgfQorCitjbGFzcyBGb28geyAgCisgICAgdm9pZCB0ZXN0KCkgeworICAgICAgICBTQU08SW50ZWdlcj4gYyA9IChpLCBqKS0+aSArIGo7CisgICAgICAgIG0oPGNhcmV0PmMpOworICAgIH0KKyAgICB2b2lkIG0oU0FNPEludGVnZXI+IHMpIHsgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVMb2NhbC9MYW1iZGFFeHByLmphdmEuYWZ0ZXIgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lTG9jYWwvTGFtYmRhRXhwci5qYXZhLmFmdGVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJiYWJlNmUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lTG9jYWwvTGFtYmRhRXhwci5qYXZhLmFmdGVyCkBAIC0wLDAgKzEsMTAgQEAKK2ludGVyZmFjZSBTQU08WD4geworICAgICAgICBYIG0oaW50IGksIGludCBqKTsKKyAgICB9CisKK2NsYXNzIEZvbyB7ICAKKyAgICB2b2lkIHRlc3QoKSB7CisgICAgICAgIG0oKGksIGopLT5pICsgaik7CisgICAgfQorICAgIHZvaWQgbShTQU08SW50ZWdlcj4gcykgeyB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZUxvY2FsL0xhbWJkYUV4cHJBc1JlZlF1YWxpZmllci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZUxvY2FsL0xhbWJkYUV4cHJBc1JlZlF1YWxpZmllci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgxYjAyNDAKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lTG9jYWwvTGFtYmRhRXhwckFzUmVmUXVhbGlmaWVyLmphdmEKQEAgLTAsMCArMSwyNSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDAwLTIwMTIgSmV0QnJhaW5zIHMuci5vLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KK3B1YmxpYyBjbGFzcyBUZXN0MiB7CisgIGludGVyZmFjZSBJIHsKKyAgICBib29sZWFuIGZvbyhTdHJpbmcgcyk7CisgIH0KKyAgeworICAgIEkgaSA9IHMgLT4gcy5lbmRzV2l0aCgiLmphdmEiKTsKKyAgICA8Y2FyZXQ+aS5nZXRDbGFzcygpOworICB9Cit9CisKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVMb2NhbC9MYW1iZGFFeHByQXNSZWZRdWFsaWZpZXIuamF2YS5hZnRlciBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVMb2NhbC9MYW1iZGFFeHByQXNSZWZRdWFsaWZpZXIuamF2YS5hZnRlcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NTMzYjNjCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZUxvY2FsL0xhbWJkYUV4cHJBc1JlZlF1YWxpZmllci5qYXZhLmFmdGVyCkBAIC0wLDAgKzEsMjQgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwMC0yMDEyIEpldEJyYWlucyBzLnIuby4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCitwdWJsaWMgY2xhc3MgVGVzdDIgeworICBpbnRlcmZhY2UgSSB7CisgICAgYm9vbGVhbiBmb28oU3RyaW5nIHMpOworICB9CisgIHsKKyAgICAgICgoSSkgcyAtPiBzLmVuZHNXaXRoKCIuamF2YSIpKS5nZXRDbGFzcygpOworICB9Cit9CisKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVMb2NhbC9Mb2NhbFZhckluc2lkZUxhbWJkYUJvZHkuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVMb2NhbC9Mb2NhbFZhckluc2lkZUxhbWJkYUJvZHkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NTBhOTNmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZUxvY2FsL0xvY2FsVmFySW5zaWRlTGFtYmRhQm9keS5qYXZhCkBAIC0wLDAgKzEsMjMgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwMC0yMDEyIEpldEJyYWlucyBzLnIuby4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCitwdWJsaWMgY2xhc3MgVGVzdDIgeworICB7CisgICAgZmluYWwgU3RyaW5nIHAgPSAiaGVsbG8iOworICAgIFJ1bm5hYmxlIHIgPSAoKSAtPiB7U3lzdGVtLm91dC5wcmludGxuKDxjYXJldD5wKTt9OworICAgIFN5c3RlbS5vdXQucHJpbnRsbihwKTsKKyAgfQorfQorCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lTG9jYWwvTG9jYWxWYXJJbnNpZGVMYW1iZGFCb2R5LmphdmEuYWZ0ZXIgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lTG9jYWwvTG9jYWxWYXJJbnNpZGVMYW1iZGFCb2R5LmphdmEuYWZ0ZXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTk0MWRkMwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVMb2NhbC9Mb2NhbFZhckluc2lkZUxhbWJkYUJvZHkuamF2YS5hZnRlcgpAQCAtMCwwICsxLDIyIEBACisvKgorICogQ29weXJpZ2h0IDIwMDAtMjAxMiBKZXRCcmFpbnMgcy5yLm8uCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworcHVibGljIGNsYXNzIFRlc3QyIHsKKyAgeworICAgICAgUnVubmFibGUgciA9ICgpIC0+IHtTeXN0ZW0ub3V0LnByaW50bG4oImhlbGxvIik7fTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oImhlbGxvIik7CisgIH0KK30KKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZUxvY2FsL0xvY2FsVmFySW5zaWRlTGFtYmRhQm9keTEuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVMb2NhbC9Mb2NhbFZhckluc2lkZUxhbWJkYUJvZHkxLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDZjOTdiZAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVMb2NhbC9Mb2NhbFZhckluc2lkZUxhbWJkYUJvZHkxLmphdmEKQEAgLTAsMCArMSwyNCBAQAorLyoKKyAqIENvcHlyaWdodCAyMDAwLTIwMTIgSmV0QnJhaW5zIHMuci5vLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KK3B1YmxpYyBjbGFzcyBUZXN0MiB7CisgIHsKKyAgICBSdW5uYWJsZSByID0gKCkgLT4geworICAgICAgZmluYWwgU3RyaW5nIHAgPSAiaGVsbG8iOworICAgICAgU3lzdGVtLm91dC5wcmludGxuKDxjYXJldD5wKTsKKyAgICB9OworICB9Cit9CisKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVMb2NhbC9Mb2NhbFZhckluc2lkZUxhbWJkYUJvZHkxLmphdmEuYWZ0ZXIgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lTG9jYWwvTG9jYWxWYXJJbnNpZGVMYW1iZGFCb2R5MS5qYXZhLmFmdGVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY2ZWY1MDcKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lTG9jYWwvTG9jYWxWYXJJbnNpZGVMYW1iZGFCb2R5MS5qYXZhLmFmdGVyCkBAIC0wLDAgKzEsMjMgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwMC0yMDEyIEpldEJyYWlucyBzLnIuby4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCitwdWJsaWMgY2xhc3MgVGVzdDIgeworICB7CisgICAgUnVubmFibGUgciA9ICgpIC0+IHsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJoZWxsbyIpOworICAgIH07CisgIH0KK30KKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZUxvY2FsL0xvY2FsVmFySW5zaWRlTGFtYmRhQm9keTIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVMb2NhbC9Mb2NhbFZhckluc2lkZUxhbWJkYUJvZHkyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjM3Nzc0ZgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVMb2NhbC9Mb2NhbFZhckluc2lkZUxhbWJkYUJvZHkyLmphdmEKQEAgLTAsMCArMSw4IEBACitjbGFzcyBUZXN0IHsKKyAgeworICAgIFJ1bm5hYmxlIHggPSAoKSAtPiB7CisgICAgICBTdHJpbmcgaGVsbG8gPSBuZXcgU3RyaW5nKCJoZWxsbyIpOworICAgICAgU3lzdGVtLm91dC5wcmludGxuKDxjYXJldD5oZWxsbyk7CisgICAgfTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVMb2NhbC9Mb2NhbFZhckluc2lkZUxhbWJkYUJvZHkyLmphdmEuYWZ0ZXIgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lTG9jYWwvTG9jYWxWYXJJbnNpZGVMYW1iZGFCb2R5Mi5qYXZhLmFmdGVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVlOGRlNGEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lTG9jYWwvTG9jYWxWYXJJbnNpZGVMYW1iZGFCb2R5Mi5qYXZhLmFmdGVyCkBAIC0wLDAgKzEsNyBAQAorY2xhc3MgVGVzdCB7CisgIHsKKyAgICBSdW5uYWJsZSB4ID0gKCkgLT4geworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4obmV3IFN0cmluZygiaGVsbG8iKSk7CisgICAgfTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVMb2NhbC9Mb2NhbFZhckluc2lkZUxhbWJkYUJvZHlXcml0ZVVzYWdlLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lTG9jYWwvTG9jYWxWYXJJbnNpZGVMYW1iZGFCb2R5V3JpdGVVc2FnZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE1OTBhYTUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lTG9jYWwvTG9jYWxWYXJJbnNpZGVMYW1iZGFCb2R5V3JpdGVVc2FnZS5qYXZhCkBAIC0wLDAgKzEsMTAgQEAKK2NsYXNzIFRlc3QgeworICB7CisgICAgUnVubmFibGUgeCA9ICgpIC0+IHsKKyAgICAgIGludCBoZWxsbyA9IDk7CisgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oaGVsbG8pOworICAgICAgKytoZWxsbzsKKyAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihoZTxjYXJldD5sbG8pOworICAgIH07CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lTG9jYWwvTWV0aG9kUmVmQXNSZWZRdWFsaWZpZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVMb2NhbC9NZXRob2RSZWZBc1JlZlF1YWxpZmllci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE2NTI4NjIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lTG9jYWwvTWV0aG9kUmVmQXNSZWZRdWFsaWZpZXIuamF2YQpAQCAtMCwwICsxLDE0IEBACitjbGFzcyBUZXN0IHsKKyAgeworICAgICAgQmFyIGJhciA9IFRlc3Q6Omxlbmd0aDsKKyAgICAgIGI8Y2FyZXQ+YXIuXygiIik7CisgIH0KKworICBwdWJsaWMgc3RhdGljIEludGVnZXIgbGVuZ3RoKFN0cmluZyBzKSB7CisgICAgcmV0dXJuIHMubGVuZ3RoKCk7CisgIH0KKworICBpbnRlcmZhY2UgQmFyIHsKKyAgICBJbnRlZ2VyIF8oU3RyaW5nIHMpOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZUxvY2FsL01ldGhvZFJlZkFzUmVmUXVhbGlmaWVyLmphdmEuYWZ0ZXIgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lTG9jYWwvTWV0aG9kUmVmQXNSZWZRdWFsaWZpZXIuamF2YS5hZnRlcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iODJmMmNhCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZUxvY2FsL01ldGhvZFJlZkFzUmVmUXVhbGlmaWVyLmphdmEuYWZ0ZXIKQEAgLTAsMCArMSwxMyBAQAorY2xhc3MgVGVzdCB7CisgIHsKKyAgICAgICgoQmFyKSBUZXN0OjpsZW5ndGgpLl8oIiIpOworICB9CisKKyAgcHVibGljIHN0YXRpYyBJbnRlZ2VyIGxlbmd0aChTdHJpbmcgcykgeworICAgIHJldHVybiBzLmxlbmd0aCgpOworICB9CisKKyAgaW50ZXJmYWNlIEJhciB7CisgICAgSW50ZWdlciBfKFN0cmluZyBzKTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVMb2NhbC9OZXdFeHByZXNzaW9uLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lTG9jYWwvTmV3RXhwcmVzc2lvbi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUwNjY3OTcKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lTG9jYWwvTmV3RXhwcmVzc2lvbi5qYXZhCkBAIC0wLDAgKzEsNyBAQAorY2xhc3MgVGVzdCB7CisKKyAgU3RyaW5nW10gZ2V0KCl7CisgICAgU3RyaW5nW10gdG88Y2FyZXQ+SW5saW5lID0gbmV3IFN0cmluZ1tdeyIifTsKKyAgICByZXR1cm4gdG9JbmxpbmU7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lTG9jYWwvTmV3RXhwcmVzc2lvbi5qYXZhLmFmdGVyIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZUxvY2FsL05ld0V4cHJlc3Npb24uamF2YS5hZnRlcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZmM2ZjZiCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZUxvY2FsL05ld0V4cHJlc3Npb24uamF2YS5hZnRlcgpAQCAtMCwwICsxLDYgQEAKK2NsYXNzIFRlc3QgeworCisgIFN0cmluZ1tdIGdldCgpeworICAgICAgcmV0dXJuIG5ldyBTdHJpbmdbXXsiIn07CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lTG9jYWwvTmV3RXhwcmVzc2lvbldpdGhEaWFtb25kLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lTG9jYWwvTmV3RXhwcmVzc2lvbldpdGhEaWFtb25kLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjU2MzBhNAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVMb2NhbC9OZXdFeHByZXNzaW9uV2l0aERpYW1vbmQuamF2YQpAQCAtMCwwICsxLDkgQEAKK2ltcG9ydCBqYXZhLnV0aWwuKjsKKworY2xhc3MgVGVzdCB7CisKKyAgdm9pZCBmb28oKXsKKyAgICBNYXA8SW50ZWdlciwgU3RyaW5nPiBtPGNhcmV0PmFwID0gbmV3IEhhc2hNYXA8PigpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbihtYXApOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZUxvY2FsL05ld0V4cHJlc3Npb25XaXRoRGlhbW9uZC5qYXZhLmFmdGVyIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZUxvY2FsL05ld0V4cHJlc3Npb25XaXRoRGlhbW9uZC5qYXZhLmFmdGVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJiMWQ0ZmQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lTG9jYWwvTmV3RXhwcmVzc2lvbldpdGhEaWFtb25kLmphdmEuYWZ0ZXIKQEAgLTAsMCArMSw4IEBACitpbXBvcnQgamF2YS51dGlsLio7CisKK2NsYXNzIFRlc3QgeworCisgIHZvaWQgZm9vKCl7CisgICAgICBTeXN0ZW0ub3V0LnByaW50bG4obmV3IEhhc2hNYXA8SW50ZWdlciwgU3RyaW5nPigpKTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVMb2NhbC9OZXdFeHByZXNzaW9uV2l0aFByZXNlcnZlZERpYW1vbmQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVMb2NhbC9OZXdFeHByZXNzaW9uV2l0aFByZXNlcnZlZERpYW1vbmQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ODZkMjNhMgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVMb2NhbC9OZXdFeHByZXNzaW9uV2l0aFByZXNlcnZlZERpYW1vbmQuamF2YQpAQCAtMCwwICsxLDkgQEAKK2ltcG9ydCBqYXZhLnV0aWwuKjsKKworY2xhc3MgVGVzdCB7CisKKyAgdm9pZCBmb28oKXsKKyAgICBNYXA8SW50ZWdlciwgU3RyaW5nPiBtPGNhcmV0PmFwID0gbmV3IEhhc2hNYXA8PigpOworICAgIE1hcDxJbnRlZ2VyLCBTdHJpbmc+IG1hcDEgPSBtYXA7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lTG9jYWwvTmV3RXhwcmVzc2lvbldpdGhQcmVzZXJ2ZWREaWFtb25kLmphdmEuYWZ0ZXIgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lTG9jYWwvTmV3RXhwcmVzc2lvbldpdGhQcmVzZXJ2ZWREaWFtb25kLmphdmEuYWZ0ZXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWI3Njk0MwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVMb2NhbC9OZXdFeHByZXNzaW9uV2l0aFByZXNlcnZlZERpYW1vbmQuamF2YS5hZnRlcgpAQCAtMCwwICsxLDggQEAKK2ltcG9ydCBqYXZhLnV0aWwuKjsKKworY2xhc3MgVGVzdCB7CisKKyAgdm9pZCBmb28oKXsKKyAgICAgIE1hcDxJbnRlZ2VyLCBTdHJpbmc+IG1hcDEgPSBuZXcgSGFzaE1hcDw+KCk7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lTG9jYWwvTm9DYXN0QXJvdW5kTGFtYmRhLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lTG9jYWwvTm9DYXN0QXJvdW5kTGFtYmRhLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjJmNDQwYQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVMb2NhbC9Ob0Nhc3RBcm91bmRMYW1iZGEuamF2YQpAQCAtMCwwICsxLDEyIEBACitjbGFzcyBUZXN0IHsKKyAgdm9pZCB0ZXN0KCkgeworICAgIEkgYjEgPSBTeXN0ZW06OmV4aXQ7CisgICAgYShiPGNhcmV0PjEpOworICB9CisKKyAgdm9pZCBhKEkgYikge30KKworICBpbnRlcmZhY2UgSSB7CisgICAgdm9pZCBpKGludCBpKTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZUxvY2FsL05vQ2FzdEFyb3VuZExhbWJkYS5qYXZhLmFmdGVyIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZUxvY2FsL05vQ2FzdEFyb3VuZExhbWJkYS5qYXZhLmFmdGVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU4ZGVhNDcKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lTG9jYWwvTm9DYXN0QXJvdW5kTGFtYmRhLmphdmEuYWZ0ZXIKQEAgLTAsMCArMSwxMSBAQAorY2xhc3MgVGVzdCB7CisgIHZvaWQgdGVzdCgpIHsKKyAgICAgIGEoU3lzdGVtOjpleGl0KTsKKyAgfQorCisgIHZvaWQgYShJIGIpIHt9CisKKyAgaW50ZXJmYWNlIEkgeworICAgIHZvaWQgaShpbnQgaSk7CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVMb2NhbC9Ob1JlZHVuZGFudENhc3RzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lTG9jYWwvTm9SZWR1bmRhbnRDYXN0cy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVmNmFiOTIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lTG9jYWwvTm9SZWR1bmRhbnRDYXN0cy5qYXZhCkBAIC0wLDAgKzEsMTIgQEAKK2NsYXNzIFlvWW8geworICAgIHZvaWQgYmFyICgpIHt9CisgICAgdm9pZCBmICgpIHsKKyAgICAgICAgWW9ZbyB5b1lvWW8gPSBmb28oKTsKKyAgICAgICAgPGNhcmV0PnlvWW9Zby5iYXIoKTsKKyAgICB9CisKKyAgICBwcml2YXRlIFlvWW9ZbyBmb28oKSB7CisKKyAgICB9CisgICAgY2xhc3MgWW9Zb1lvIGV4dGVuZHMgWW9ZbyB7fQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVMb2NhbC9Ob1JlZHVuZGFudENhc3RzLmphdmEuYWZ0ZXIgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lTG9jYWwvTm9SZWR1bmRhbnRDYXN0cy5qYXZhLmFmdGVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFlNDk0MGMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lTG9jYWwvTm9SZWR1bmRhbnRDYXN0cy5qYXZhLmFmdGVyCkBAIC0wLDAgKzEsMTEgQEAKK2NsYXNzIFlvWW8geworICAgIHZvaWQgYmFyICgpIHt9CisgICAgdm9pZCBmICgpIHsKKyAgICAgICAgZm9vKCkuYmFyKCk7CisgICAgfQorCisgICAgcHJpdmF0ZSBZb1lvWW8gZm9vKCkgeworCisgICAgfQorICAgIGNsYXNzIFlvWW9ZbyBleHRlbmRzIFlvWW8ge30KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lTG9jYWwvTm9uRXFBc3NpZ25tZW50LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lTG9jYWwvTm9uRXFBc3NpZ25tZW50LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzY5ZWM2MQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVMb2NhbC9Ob25FcUFzc2lnbm1lbnQuamF2YQpAQCAtMCwwICsxLDcgQEAKK2NsYXNzIFRlc3QgeworICB2b2lkIGZvbygpIHsKKyAgICBpbnQgeCA9IDE7CisgICAgeCArPSAxOworICAgIGludCB5ID0gPGNhcmV0Png7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lTG9jYWwvTm9uV3JpdGVVbmFyeUV4cHJlc3Npb24uamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVMb2NhbC9Ob25Xcml0ZVVuYXJ5RXhwcmVzc2lvbi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAxN2FmYmUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lTG9jYWwvTm9uV3JpdGVVbmFyeUV4cHJlc3Npb24uamF2YQpAQCAtMCwwICsxLDcgQEAKK2NsYXNzIFRlc3QgeworCisgIHZvaWQgZ2V0KCl7CisgICAgYm9vbGVhbiB0b0lubGluZSA9IGZhbHNlOworICAgIGlmICghdG88Y2FyZXQ+SW5saW5lKSByZXR1cm47CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lTG9jYWwvTm9uV3JpdGVVbmFyeUV4cHJlc3Npb24uamF2YS5hZnRlciBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVMb2NhbC9Ob25Xcml0ZVVuYXJ5RXhwcmVzc2lvbi5qYXZhLmFmdGVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc0YjVhMzkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lTG9jYWwvTm9uV3JpdGVVbmFyeUV4cHJlc3Npb24uamF2YS5hZnRlcgpAQCAtMCwwICsxLDYgQEAKK2NsYXNzIFRlc3QgeworCisgIHZvaWQgZ2V0KCl7CisgICAgICBpZiAoIWZhbHNlKSByZXR1cm47CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lTG9jYWwvUXVhbGlmaWVkLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lTG9jYWwvUXVhbGlmaWVkLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGM2MjZlMAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVMb2NhbC9RdWFsaWZpZWQuamF2YQpAQCAtMCwwICsxLDE3IEBACitwdWJsaWMgY2xhc3MgQSB7CisgIGludCBmID0gMjM7CisKKyAgc3RhdGljIGNsYXNzIEIgeworICAgIHN0YXRpYyBpbnQgZiA9IDQyOworICB9CisKKyAgaW50IGZvbygpIHsKKyAgICBpbnQgciA9IEIuZjsKKyAgICBBIEIgPSB0aGlzOworICAgIHJldHVybiByPGNhcmV0PjsKKyAgfQorCisgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4obmV3IEEoKS5mb28oKSk7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lTG9jYWwvUXVhbGlmaWVkLmphdmEuYWZ0ZXIgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lTG9jYWwvUXVhbGlmaWVkLmphdmEuYWZ0ZXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTAyYmUwNQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVMb2NhbC9RdWFsaWZpZWQuamF2YS5hZnRlcgpAQCAtMCwwICsxLDE2IEBACitwdWJsaWMgY2xhc3MgQSB7CisgIGludCBmID0gMjM7CisKKyAgc3RhdGljIGNsYXNzIEIgeworICAgIHN0YXRpYyBpbnQgZiA9IDQyOworICB9CisKKyAgaW50IGZvbygpIHsKKyAgICAgIEEgQiA9IHRoaXM7CisgICAgcmV0dXJuIEEuQi5mOworICB9CisKKyAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworICAgIFN5c3RlbS5vdXQucHJpbnRsbihuZXcgQSgpLmZvbygpKTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVMb2NhbC9RdWFsaWZpZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVMb2NhbC9RdWFsaWZpZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43N2NmNjI0Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZUxvY2FsL1F1YWxpZmllci5qYXZhCkBAIC0wLDAgKzEsMTIgQEAKK2NsYXNzIE91dGVyIHsKKyAgICBTdHJpbmcgZ2V0VmFsdWUoKSB7IHJldHVybiAiIjt9CisgICAgdm9pZCBkb1NvbWV0aGluZyAoU3RyaW5nIHgpIHsgfQorICAgIHZvaWQgZm9vKCkgeworICAgICAgICBuZXcgUnVubmFibGUoKSB7CisgICAgICAgICAgICBwdWJsaWMgdm9pZCBydW4oKSB7CisgICAgICAgICAgICAgICAgZmluYWwgU3RyaW5nIDxjYXJldD52YWx1ZSA9IGdldFZhbHVlKCk7CisgICAgICAgICAgICAgICAgZG9Tb21ldGhpbmcodmFsdWUpOworICAgICAgICAgICAgfQorICAgICAgICB9OworICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVMb2NhbC9RdWFsaWZpZXIuamF2YS5hZnRlciBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVMb2NhbC9RdWFsaWZpZXIuamF2YS5hZnRlcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YjA2YWYzNgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVMb2NhbC9RdWFsaWZpZXIuamF2YS5hZnRlcgpAQCAtMCwwICsxLDExIEBACitjbGFzcyBPdXRlciB7CisgICAgU3RyaW5nIGdldFZhbHVlKCkgeyByZXR1cm4gIiI7fQorICAgIHZvaWQgZG9Tb21ldGhpbmcgKFN0cmluZyB4KSB7IH0KKyAgICB2b2lkIGZvbygpIHsKKyAgICAgICAgbmV3IFJ1bm5hYmxlKCkgeworICAgICAgICAgICAgcHVibGljIHZvaWQgcnVuKCkgeworICAgICAgICAgICAgICAgIGRvU29tZXRoaW5nKGdldFZhbHVlKCkpOworICAgICAgICAgICAgfQorICAgICAgICB9OworICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVMb2NhbC9TdGF0aWNJbXBvcnRlZC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZUxvY2FsL1N0YXRpY0ltcG9ydGVkLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWVhMjNiOAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVMb2NhbC9TdGF0aWNJbXBvcnRlZC5qYXZhCkBAIC0wLDAgKzEsMjMgQEAKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitpbXBvcnQgc3RhdGljIFN0YXRpY3MuX2VtcHR5TGlzdDsKKworcHVibGljIGNsYXNzIFN0YXRpY3MgeworCisgIHB1YmxpYyBzdGF0aWMgPFQ+IExpc3Q8VD4gX2VtcHR5TGlzdCgpIHsKKyAgICByZXR1cm4gbmV3IEFycmF5TGlzdDxUPigpOworICB9Cit9CisKKworY2xhc3MgRm9vIHsKKyAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworICAgIExpc3Q8U3RyaW5nPiB2MSA9IF9lbXB0eUxpc3QoKTsKKyAgICBkb1NvbWV0aGluZyh2PGNhcmV0PjEpOworICB9CisKKyAgcHVibGljIHN0YXRpYyB2b2lkIGRvU29tZXRoaW5nKExpc3Q8U3RyaW5nPiBsaXN0KSB7CisKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVMb2NhbC9TdGF0aWNJbXBvcnRlZC5qYXZhLmFmdGVyIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZUxvY2FsL1N0YXRpY0ltcG9ydGVkLmphdmEuYWZ0ZXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDQwYTQ5ZQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVMb2NhbC9TdGF0aWNJbXBvcnRlZC5qYXZhLmFmdGVyCkBAIC0wLDAgKzEsMjIgQEAKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitpbXBvcnQgc3RhdGljIFN0YXRpY3MuX2VtcHR5TGlzdDsKKworcHVibGljIGNsYXNzIFN0YXRpY3MgeworCisgIHB1YmxpYyBzdGF0aWMgPFQ+IExpc3Q8VD4gX2VtcHR5TGlzdCgpIHsKKyAgICByZXR1cm4gbmV3IEFycmF5TGlzdDxUPigpOworICB9Cit9CisKKworY2xhc3MgRm9vIHsKKyAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworICAgICAgZG9Tb21ldGhpbmcoU3RhdGljcy48U3RyaW5nPl9lbXB0eUxpc3QoKSk7CisgIH0KKworICBwdWJsaWMgc3RhdGljIHZvaWQgZG9Tb21ldGhpbmcoTGlzdDxTdHJpbmc+IGxpc3QpIHsKKworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZUxvY2FsL1R5cGVBcmd1bWVudHMuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVMb2NhbC9UeXBlQXJndW1lbnRzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDRlY2FlZAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVMb2NhbC9UeXBlQXJndW1lbnRzLmphdmEKQEAgLTAsMCArMSw5IEBACitjbGFzcyBFeGFtcGxlIHsKKyAgICBwcml2YXRlIGNsYXNzIFg8VD4ge30KKyAgICBwcml2YXRlIDxUPiBYPFQ+IGZvbygpIHsgcmV0dXJuIG5ldyBYPFQ+KCk7IH0KKyAgICBwcml2YXRlIDxUPiBYPFQ+IGJvbyhYPFQ+IHgpIHtyZXR1cm4geDt9CisgICAgcHJpdmF0ZSB2b2lkIGdvbygpIHsKKyAgICAgICAgWDxJbnRlZ2VyPiBmID0gZm9vKCk7CisgICAgICAgIFg8SW50ZWdlcj4geCA9IGJvbyg8Y2FyZXQ+Zik7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVMb2NhbC9UeXBlQXJndW1lbnRzLmphdmEuYWZ0ZXIgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lTG9jYWwvVHlwZUFyZ3VtZW50cy5qYXZhLmFmdGVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEyM2VkNDcKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lTG9jYWwvVHlwZUFyZ3VtZW50cy5qYXZhLmFmdGVyCkBAIC0wLDAgKzEsOCBAQAorY2xhc3MgRXhhbXBsZSB7CisgICAgcHJpdmF0ZSBjbGFzcyBYPFQ+IHt9CisgICAgcHJpdmF0ZSA8VD4gWDxUPiBmb28oKSB7IHJldHVybiBuZXcgWDxUPigpOyB9CisgICAgcHJpdmF0ZSA8VD4gWDxUPiBib28oWDxUPiB4KSB7cmV0dXJuIHg7fQorICAgIHByaXZhdGUgdm9pZCBnb28oKSB7CisgICAgICAgIFg8SW50ZWdlcj4geCA9IGJvbyh0aGlzLjxJbnRlZ2VyPmZvbygpKTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZUxvY2FsL1R5cGVBcmd1bWVudHNTdGF0aWMuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVMb2NhbC9UeXBlQXJndW1lbnRzU3RhdGljLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzM5NGFmYQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVMb2NhbC9UeXBlQXJndW1lbnRzU3RhdGljLmphdmEKQEAgLTAsMCArMSw5IEBACitjbGFzcyBFeGFtcGxlIHsKKyAgICBwcml2YXRlIHN0YXRpYyBjbGFzcyBYPFQ+IHt9CisgICAgcHJpdmF0ZSBzdGF0aWMgPFQ+IFg8VD4gZm9vKCkgeyByZXR1cm4gbmV3IFg8VD4oKTsgfQorICAgIHByaXZhdGUgc3RhdGljIDxUPiBYPFQ+IGJvbyhYPFQ+IHgpIHtyZXR1cm4geDt9CisgICAgcHJpdmF0ZSBzdGF0aWMgdm9pZCBnb28oKSB7CisgICAgICAgIFg8SW50ZWdlcj4gZiA9IGZvbygpOworICAgICAgICBYPEludGVnZXI+IHggPSBib28oPGNhcmV0PmYpOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lTG9jYWwvVHlwZUFyZ3VtZW50c1N0YXRpYy5qYXZhLmFmdGVyIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZUxvY2FsL1R5cGVBcmd1bWVudHNTdGF0aWMuamF2YS5hZnRlcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYzljZGQ3Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZUxvY2FsL1R5cGVBcmd1bWVudHNTdGF0aWMuamF2YS5hZnRlcgpAQCAtMCwwICsxLDggQEAKK2NsYXNzIEV4YW1wbGUgeworICAgIHByaXZhdGUgc3RhdGljIGNsYXNzIFg8VD4ge30KKyAgICBwcml2YXRlIHN0YXRpYyA8VD4gWDxUPiBmb28oKSB7IHJldHVybiBuZXcgWDxUPigpOyB9CisgICAgcHJpdmF0ZSBzdGF0aWMgPFQ+IFg8VD4gYm9vKFg8VD4geCkge3JldHVybiB4O30KKyAgICBwcml2YXRlIHN0YXRpYyB2b2lkIGdvbygpIHsKKyAgICAgICAgWDxJbnRlZ2VyPiB4ID0gYm9vKEV4YW1wbGUuPEludGVnZXI+Zm9vKCkpOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lTG9jYWwvVW5jaGVja2VkQ2FzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZUxvY2FsL1VuY2hlY2tlZENhc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNTQyZWQwCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZUxvY2FsL1VuY2hlY2tlZENhc3QuamF2YQpAQCAtMCwwICsxLDEyIEBACitpbXBvcnQgamF2YS51dGlsLio7CisKK2NsYXNzIFggeworICBMaXN0IGdldENoaWxkcmVuKCkgeworICAgIHJldHVybiBudWxsOworICB9CisKKyAgdm9pZCBpdGVyYXRlKCkgeworICAgIExpc3Q8WD4geHMgPSBnZXRDaGlsZHJlbigpOworICAgIGZvciAoWCB4IDogeDxjYXJldD5zKSB7fQorICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZUxvY2FsL1VuY2hlY2tlZENhc3QuamF2YS5hZnRlciBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVMb2NhbC9VbmNoZWNrZWRDYXN0LmphdmEuYWZ0ZXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTQ1MTY5YgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVMb2NhbC9VbmNoZWNrZWRDYXN0LmphdmEuYWZ0ZXIKQEAgLTAsMCArMSwxMSBAQAoraW1wb3J0IGphdmEudXRpbC4qOworCitjbGFzcyBYIHsKKyAgTGlzdCBnZXRDaGlsZHJlbigpIHsKKyAgICByZXR1cm4gbnVsbDsKKyAgfQorCisgIHZvaWQgaXRlcmF0ZSgpIHsKKyAgICAgIGZvciAoWCB4IDogKExpc3Q8WD4pIGdldENoaWxkcmVuKCkpIHt9CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lTG9jYWwvVW5jaGVja2VkQ2FzdE5vdE5lZWRlZC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZUxvY2FsL1VuY2hlY2tlZENhc3ROb3ROZWVkZWQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZjVjYWU0Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZUxvY2FsL1VuY2hlY2tlZENhc3ROb3ROZWVkZWQuamF2YQpAQCAtMCwwICsxLDEzIEBACitpbXBvcnQgamF2YS51dGlsLio7CisKK2NsYXNzIFggeworICBMaXN0IGdldENoaWxkcmVuKCkgeworICAgIHJldHVybiBudWxsOworICB9CisKKyAgdm9pZCBpdGVyYXRlKCkgeworICAgIExpc3Q8WD4geHMgPSBnZXRDaGlsZHJlbigpOworICAgIGZvbyh4PGNhcmV0PnMpOworICB9CisgIHZvaWQgZm9vKExpc3Q8WD4gbCl7fQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVMb2NhbC9VbmNoZWNrZWRDYXN0Tm90TmVlZGVkLmphdmEuYWZ0ZXIgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lTG9jYWwvVW5jaGVja2VkQ2FzdE5vdE5lZWRlZC5qYXZhLmFmdGVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI3NTAyMjkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lTG9jYWwvVW5jaGVja2VkQ2FzdE5vdE5lZWRlZC5qYXZhLmFmdGVyCkBAIC0wLDAgKzEsMTIgQEAKK2ltcG9ydCBqYXZhLnV0aWwuKjsKKworY2xhc3MgWCB7CisgIExpc3QgZ2V0Q2hpbGRyZW4oKSB7CisgICAgcmV0dXJuIG51bGw7CisgIH0KKworICB2b2lkIGl0ZXJhdGUoKSB7CisgICAgICBmb28oZ2V0Q2hpbGRyZW4oKSk7CisgIH0KKyAgdm9pZCBmb28oTGlzdDxYPiBsKXt9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZUxvY2FsL1VzZWRJbklubmVyQ2xhc3MuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVMb2NhbC9Vc2VkSW5Jbm5lckNsYXNzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTk2ZGE3MAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVMb2NhbC9Vc2VkSW5Jbm5lckNsYXNzLmphdmEKQEAgLTAsMCArMSwxMCBAQAorY2xhc3MgQSB7CisgICAgdm9pZCBmb28oZmluYWwgTXlPYmplY3Qgb2JqKSB7CisgICAgICAgIGZpbmFsIE15T2JqZWN0IF9vYmogPSBvYmo7CisgICAgICAgIG5ldyBSdW5uYWJsZSgpIHsKKyAgICAgICAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKKyAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oPGNhcmV0Pl9vYmopOworICAgICAgICAgICAgfQorICAgICAgICB9LnJ1bigpOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lTG9jYWwvVXNlZEluSW5uZXJDbGFzcy5qYXZhLmFmdGVyIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZUxvY2FsL1VzZWRJbklubmVyQ2xhc3MuamF2YS5hZnRlcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYzA2MzgyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZUxvY2FsL1VzZWRJbklubmVyQ2xhc3MuamF2YS5hZnRlcgpAQCAtMCwwICsxLDkgQEAKK2NsYXNzIEEgeworICAgIHZvaWQgZm9vKGZpbmFsIE15T2JqZWN0IG9iaikgeworICAgICAgICBuZXcgUnVubmFibGUoKSB7CisgICAgICAgICAgICBwdWJsaWMgdm9pZCBydW4oKSB7CisgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKG9iaik7CisgICAgICAgICAgICB9CisgICAgICAgIH0ucnVuKCk7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVMb2NhbC9Vc2VkSW5Jbm5lckNsYXNzMi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZUxvY2FsL1VzZWRJbklubmVyQ2xhc3MyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGQzYmEzYgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVMb2NhbC9Vc2VkSW5Jbm5lckNsYXNzMi5qYXZhCkBAIC0wLDAgKzEsMTEgQEAKK2NsYXNzIEEgeworICAgIHZvaWQgZm9vKGZpbmFsIE15T2JqZWN0IG9iaikgeworICAgICAgICBmaW5hbCBNeU9iamVjdCBfb2JqOworICAgICAgICBfb2JqID0gb2JqOworICAgICAgICBuZXcgUnVubmFibGUoKSB7CisgICAgICAgICAgICBwdWJsaWMgdm9pZCBydW4oKSB7CisgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKDxjYXJldD5fb2JqKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfS5ydW4oKTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZUxvY2FsL1VzZWRJbklubmVyQ2xhc3MyLmphdmEuYWZ0ZXIgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lTG9jYWwvVXNlZEluSW5uZXJDbGFzczIuamF2YS5hZnRlcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYzA2MzgyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZUxvY2FsL1VzZWRJbklubmVyQ2xhc3MyLmphdmEuYWZ0ZXIKQEAgLTAsMCArMSw5IEBACitjbGFzcyBBIHsKKyAgICB2b2lkIGZvbyhmaW5hbCBNeU9iamVjdCBvYmopIHsKKyAgICAgICAgbmV3IFJ1bm5hYmxlKCkgeworICAgICAgICAgICAgcHVibGljIHZvaWQgcnVuKCkgeworICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihvYmopOworICAgICAgICAgICAgfQorICAgICAgICB9LnJ1bigpOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lTG9jYWwvVXNlZEluSW5uZXJDbGFzczMuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVMb2NhbC9Vc2VkSW5Jbm5lckNsYXNzMy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE1ZTEwNzMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lTG9jYWwvVXNlZEluSW5uZXJDbGFzczMuamF2YQpAQCAtMCwwICsxLDQwIEBACitwdWJsaWMgY2xhc3MgSURFQTE3NjA2IHsKKworICAgIHB1YmxpYyB2b2lkIGZvbygpIHsKKyAgICAgICAgZmluYWwgUHJlZmVyZW5jZXMgcHJlZmVyZW5jZXMgPSBQcmVmZXJlbmNlcy5nZXRJbnN0YW5jZSgpOworICAgICAgICAvLyB0cnkgdG8gaW5saW5lICdwcmVmZXJlbmNlcycKKyAgICAgICAgZmluYWwgQmFyIGJhciA9IG5ldyBCYXIoPGNhcmV0PnByZWZlcmVuY2VzLmdldENvbXBvbmVudCgpKTsKKyAgICAgICAgYmFyLnRvU3RyaW5nKCk7CisKKyAgICAgICAgVGhyZWFkVXRpbHMucnVuKG5ldyBSdW5uYWJsZSgpIHsKKyAgICAgICAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKKyAgICAgICAgICAgICAgICBmaW5hbCBGb28gZm9vID0gbmV3IEZvbygpOworICAgICAgICAgICAgICAgIGZvby5zZXRTaXplKHByZWZlcmVuY2VzLmdldERpbWVuc2lvbigpLmdldFNpemUoKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0pOworICAgIH0KKworICAgIGNsYXNzIFByZWZlcmVuY2VzIHsKKwlwdWJsaWMgc3RhdGljIFByZWZlcmVuY2VzIGdldEluc3RhbmNlKCkgeworICAgICAgICAgICAgcmV0dXJuIG5ldyBQcmVmZXJlbmNlcygpOworICAgICAgICB9CisKKwlwdWJsaWMgSkNvbXBvbmVudCBnZXRDb21wb25lbnQoKSB7CisgICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgfQorCisJcHVibGljIERpbWVuc2lvbiBnZXREaW1lbnNpb24oKSB7CisgICAgICAgICAgICByZXR1cm4gbnVsbDsKKwl9CisgICAgfQorCisgICAgY2xhc3MgQmFyIHsKKwlwdWJsaWMgQmFyKEpDb21wb25lbnQgY29tcG9uZW50KSB7CisJfQorICAgIH0KKworICAgIGNsYXNzIFRocmVhZFV0aWxzIHsKKyAgICAgICAgcHVibGljIHN0YXRpYyB2b2lkIHJ1bihSdW5uYWJsZSBydW5uYWJsZSkgeworICAgICAgICB9CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZUxvY2FsL1VzZWRJbklubmVyQ2xhc3MzLmphdmEuYWZ0ZXIgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lTG9jYWwvVXNlZEluSW5uZXJDbGFzczMuamF2YS5hZnRlcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZTU3M2Y1Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZUxvY2FsL1VzZWRJbklubmVyQ2xhc3MzLmphdmEuYWZ0ZXIKQEAgLTAsMCArMSwzOSBAQAorcHVibGljIGNsYXNzIElERUExNzYwNiB7CisKKyAgICBwdWJsaWMgdm9pZCBmb28oKSB7CisgICAgICAgIC8vIHRyeSB0byBpbmxpbmUgJ3ByZWZlcmVuY2VzJworICAgICAgICBmaW5hbCBCYXIgYmFyID0gbmV3IEJhcihQcmVmZXJlbmNlcy5nZXRJbnN0YW5jZSgpLmdldENvbXBvbmVudCgpKTsKKyAgICAgICAgYmFyLnRvU3RyaW5nKCk7CisKKyAgICAgICAgVGhyZWFkVXRpbHMucnVuKG5ldyBSdW5uYWJsZSgpIHsKKyAgICAgICAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKKyAgICAgICAgICAgICAgICBmaW5hbCBGb28gZm9vID0gbmV3IEZvbygpOworICAgICAgICAgICAgICAgIGZvby5zZXRTaXplKFByZWZlcmVuY2VzLmdldEluc3RhbmNlKCkuZ2V0RGltZW5zaW9uKCkuZ2V0U2l6ZSgpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSk7CisgICAgfQorCisgICAgY2xhc3MgUHJlZmVyZW5jZXMgeworCXB1YmxpYyBzdGF0aWMgUHJlZmVyZW5jZXMgZ2V0SW5zdGFuY2UoKSB7CisgICAgICAgICAgICByZXR1cm4gbmV3IFByZWZlcmVuY2VzKCk7CisgICAgICAgIH0KKworCXB1YmxpYyBKQ29tcG9uZW50IGdldENvbXBvbmVudCgpIHsKKyAgICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICB9CisKKwlwdWJsaWMgRGltZW5zaW9uIGdldERpbWVuc2lvbigpIHsKKyAgICAgICAgICAgIHJldHVybiBudWxsOworCX0KKyAgICB9CisKKyAgICBjbGFzcyBCYXIgeworCXB1YmxpYyBCYXIoSkNvbXBvbmVudCBjb21wb25lbnQpIHsKKwl9CisgICAgfQorCisgICAgY2xhc3MgVGhyZWFkVXRpbHMgeworICAgICAgICBwdWJsaWMgc3RhdGljIHZvaWQgcnVuKFJ1bm5hYmxlIHJ1bm5hYmxlKSB7CisgICAgICAgIH0KKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lTG9jYWwvVXNlZEluSW5uZXJDbGFzczQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVMb2NhbC9Vc2VkSW5Jbm5lckNsYXNzNC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA1ZTZkZjUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lTG9jYWwvVXNlZEluSW5uZXJDbGFzczQuamF2YQpAQCAtMCwwICsxLDQwIEBACitwdWJsaWMgY2xhc3MgSURFQTE3NjA2IHsKKworICAgIHB1YmxpYyB2b2lkIGZvbygpIHsKKyAgICAgICAgZmluYWwgUHJlZmVyZW5jZXMgcHJlZmVyZW5jZXMgPSBQcmVmZXJlbmNlcy5nZXRJbnN0YW5jZSgpOworICAgICAgICAvLyB0cnkgdG8gaW5saW5lICdwcmVmZXJlbmNlcycKKyAgICAgICAgZmluYWwgQmFyIGJhciA9IG5ldyBCYXIocHJlZmVyZW5jZXMuZ2V0Q29tcG9uZW50KCkpOworICAgICAgICBiYXIudG9TdHJpbmcoKTsKKworICAgICAgICBUaHJlYWRVdGlscy5ydW4obmV3IFJ1bm5hYmxlKCkgeworICAgICAgICAgICAgcHVibGljIHZvaWQgcnVuKCkgeworICAgICAgICAgICAgICAgIGZpbmFsIEZvbyBmb28gPSBuZXcgRm9vKCk7CisgICAgICAgICAgICAgICAgZm9vLnNldFNpemUoPGNhcmV0PnByZWZlcmVuY2VzLmdldERpbWVuc2lvbigpLmdldFNpemUoKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0pOworICAgIH0KKworICAgIGNsYXNzIFByZWZlcmVuY2VzIHsKKwlwdWJsaWMgc3RhdGljIFByZWZlcmVuY2VzIGdldEluc3RhbmNlKCkgeworICAgICAgICAgICAgcmV0dXJuIG5ldyBQcmVmZXJlbmNlcygpOworICAgICAgICB9CisKKwlwdWJsaWMgSkNvbXBvbmVudCBnZXRDb21wb25lbnQoKSB7CisgICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgfQorCisJcHVibGljIERpbWVuc2lvbiBnZXREaW1lbnNpb24oKSB7CisgICAgICAgICAgICByZXR1cm4gbnVsbDsKKwl9CisgICAgfQorCisgICAgY2xhc3MgQmFyIHsKKwlwdWJsaWMgQmFyKEpDb21wb25lbnQgY29tcG9uZW50KSB7CisJfQorICAgIH0KKworICAgIGNsYXNzIFRocmVhZFV0aWxzIHsKKyAgICAgICAgcHVibGljIHN0YXRpYyB2b2lkIHJ1bihSdW5uYWJsZSBydW5uYWJsZSkgeworICAgICAgICB9CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZUxvY2FsL1VzZWRJbklubmVyQ2xhc3M0LmphdmEuYWZ0ZXIgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lTG9jYWwvVXNlZEluSW5uZXJDbGFzczQuamF2YS5hZnRlcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZTU3M2Y1Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZUxvY2FsL1VzZWRJbklubmVyQ2xhc3M0LmphdmEuYWZ0ZXIKQEAgLTAsMCArMSwzOSBAQAorcHVibGljIGNsYXNzIElERUExNzYwNiB7CisKKyAgICBwdWJsaWMgdm9pZCBmb28oKSB7CisgICAgICAgIC8vIHRyeSB0byBpbmxpbmUgJ3ByZWZlcmVuY2VzJworICAgICAgICBmaW5hbCBCYXIgYmFyID0gbmV3IEJhcihQcmVmZXJlbmNlcy5nZXRJbnN0YW5jZSgpLmdldENvbXBvbmVudCgpKTsKKyAgICAgICAgYmFyLnRvU3RyaW5nKCk7CisKKyAgICAgICAgVGhyZWFkVXRpbHMucnVuKG5ldyBSdW5uYWJsZSgpIHsKKyAgICAgICAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKKyAgICAgICAgICAgICAgICBmaW5hbCBGb28gZm9vID0gbmV3IEZvbygpOworICAgICAgICAgICAgICAgIGZvby5zZXRTaXplKFByZWZlcmVuY2VzLmdldEluc3RhbmNlKCkuZ2V0RGltZW5zaW9uKCkuZ2V0U2l6ZSgpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSk7CisgICAgfQorCisgICAgY2xhc3MgUHJlZmVyZW5jZXMgeworCXB1YmxpYyBzdGF0aWMgUHJlZmVyZW5jZXMgZ2V0SW5zdGFuY2UoKSB7CisgICAgICAgICAgICByZXR1cm4gbmV3IFByZWZlcmVuY2VzKCk7CisgICAgICAgIH0KKworCXB1YmxpYyBKQ29tcG9uZW50IGdldENvbXBvbmVudCgpIHsKKyAgICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICB9CisKKwlwdWJsaWMgRGltZW5zaW9uIGdldERpbWVuc2lvbigpIHsKKyAgICAgICAgICAgIHJldHVybiBudWxsOworCX0KKyAgICB9CisKKyAgICBjbGFzcyBCYXIgeworCXB1YmxpYyBCYXIoSkNvbXBvbmVudCBjb21wb25lbnQpIHsKKwl9CisgICAgfQorCisgICAgY2xhc3MgVGhyZWFkVXRpbHMgeworICAgICAgICBwdWJsaWMgc3RhdGljIHZvaWQgcnVuKFJ1bm5hYmxlIHJ1bm5hYmxlKSB7CisgICAgICAgIH0KKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lTG9jYWwvV2lsZGNhcmQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVMb2NhbC9XaWxkY2FyZC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZhZmNkZTMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lTG9jYWwvV2lsZGNhcmQuamF2YQpAQCAtMCwwICsxLDExIEBACitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CitjbGFzcyBUZXN0IHsKKyAgdm9pZCBmb28oKSB7CisgICAgZmluYWwgQ29sbGVjdGlvbjw/IGV4dGVuZHMgTnVtYmVyPiBleHRlbnNpb25zID0gZ2V0RXh0ZW5zaW9ucygpOworICAgIGZvciAoTnVtYmVyIGV4dGVuc2lvbiA6IGV4dGU8Y2FyZXQ+bnNpb25zKSB7CisgICAgfQorICB9CisKKyAgQ29sbGVjdGlvbjw/IGV4dGVuZHMgTnVtYmVyPiBnZXRFeHRlbnNpb25zKCkge3JldHVybiBudWxsO30KK30KKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZUxvY2FsL1dpbGRjYXJkLmphdmEuYWZ0ZXIgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lTG9jYWwvV2lsZGNhcmQuamF2YS5hZnRlcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MjllMTllNwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVMb2NhbC9XaWxkY2FyZC5qYXZhLmFmdGVyCkBAIC0wLDAgKzEsMTAgQEAKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKK2NsYXNzIFRlc3QgeworICB2b2lkIGZvbygpIHsKKyAgICAgIGZvciAoTnVtYmVyIGV4dGVuc2lvbiA6IGdldEV4dGVuc2lvbnMoKSkgeworICAgIH0KKyAgfQorCisgIENvbGxlY3Rpb248PyBleHRlbmRzIE51bWJlcj4gZ2V0RXh0ZW5zaW9ucygpIHtyZXR1cm4gbnVsbDt9Cit9CisKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVNZXRob2QvQXJyYXlBY2Nlc3MuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVNZXRob2QvQXJyYXlBY2Nlc3MuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NDNhN2ZhCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZU1ldGhvZC9BcnJheUFjY2Vzcy5qYXZhCkBAIC0wLDAgKzEsMTEgQEAKK2NsYXNzIEEgeworICAgIHB1YmxpYyB2b2lkIHVzYWdlKCkgeworICAgICAgICBpbnQgYXJyYXlbMTUwXTsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBhcnJheS5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgbWV0aG9kKGFycmF5W2ldKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBwdWJsaWMgdm9pZCA8Y2FyZXQ+bWV0aG9kKGludCBpKSB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihpKTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZU1ldGhvZC9BcnJheUFjY2Vzcy5qYXZhLmFmdGVyIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZU1ldGhvZC9BcnJheUFjY2Vzcy5qYXZhLmFmdGVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ0MTMxMGEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lTWV0aG9kL0FycmF5QWNjZXNzLmphdmEuYWZ0ZXIKQEAgLTAsMCArMSw4IEBACitjbGFzcyBBIHsKKyAgICBwdWJsaWMgdm9pZCB1c2FnZSgpIHsKKyAgICAgICAgaW50IGFycmF5WzE1MF07CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYXJyYXkubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihhcnJheVtpXSk7CisgICAgICAgIH0KKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZU1ldGhvZC9BcnJheVR5cGVJbmZlcmVuY2VGcm9tVmFyYXJncy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZU1ldGhvZC9BcnJheVR5cGVJbmZlcmVuY2VGcm9tVmFyYXJncy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRiNzQwNjUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lTWV0aG9kL0FycmF5VHlwZUluZmVyZW5jZUZyb21WYXJhcmdzLmphdmEKQEAgLTAsMCArMSw5IEBACitjbGFzcyBUZXN0IHsKKyAgPFQ+IHZvaWQgZG9TbXRoKFQuLi4gcHMpIHsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4ocHMpOworICB9CisKKyAgdm9pZCBtKCkgeworICAgIGRvUzxjYXJldD5tdGgoMSwgMiwgMyk7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lTWV0aG9kL0FycmF5VHlwZUluZmVyZW5jZUZyb21WYXJhcmdzLmphdmEuYWZ0ZXIgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lTWV0aG9kL0FycmF5VHlwZUluZmVyZW5jZUZyb21WYXJhcmdzLmphdmEuYWZ0ZXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDgzYTdlMAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVNZXRob2QvQXJyYXlUeXBlSW5mZXJlbmNlRnJvbVZhcmFyZ3MuamF2YS5hZnRlcgpAQCAtMCwwICsxLDYgQEAKK2NsYXNzIFRlc3QgeworCisgICAgdm9pZCBtKCkgeworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4obmV3IEludGVnZXJbXXsxLCAyLCAzfSk7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVNZXRob2QvQ2FsbEluRm9yLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lTWV0aG9kL0NhbGxJbkZvci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY2NTllZDQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lTWV0aG9kL0NhbGxJbkZvci5qYXZhCkBAIC0wLDAgKzEsMTkgQEAKK3B1YmxpYyBjbGFzcyBDIHsKKyAgICBwdWJsaWMgdm9pZCBkb1NvbWV0aGluZygpIHsKKyAgICAgICAgZm9yIChJdGVyYXRvciBpdCA9IGdldFNvbWVPYmplY3RzKCkuaXRlcmF0b3IoKTsgaXQuaGFzTmV4dCgpOykgeworICAgICAgICAgICAgU3RyaW5nIHRleHQgPSAoU3RyaW5nKWl0Lm5leHQoKTsKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigidGV4dCA9ICIgKyB0ZXh0KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHByaXZhdGUgQ29sbGVjdGlvbiA8Y2FyZXQ+Z2V0U29tZU9iamVjdHMoKSB7CisgICAgICAgIGZpbmFsIFN0cmluZyB0ZXh0ID0gImhlbGxvIjsKKyAgICAgICAgcmV0dXJuIGdldFNvbWVPYmplY3RzKHRleHQpOworICAgIH0KKworICAgIHByaXZhdGUgQ29sbGVjdGlvbiBnZXRTb21lT2JqZWN0cyhTdHJpbmcgdGV4dCkgeworICAgICAgICBmaW5hbCBMaXN0IGxpc3QgPSBuZXcgQXJyYXlMaXN0KCk7CisgICAgICAgIGxpc3QuYWRkKHRleHQpOworICAgICAgICByZXR1cm4gbGlzdDsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZU1ldGhvZC9DYWxsSW5Gb3IuamF2YS5hZnRlciBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVNZXRob2QvQ2FsbEluRm9yLmphdmEuYWZ0ZXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjZiYTNmNQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVNZXRob2QvQ2FsbEluRm9yLmphdmEuYWZ0ZXIKQEAgLTAsMCArMSwxNSBAQAorcHVibGljIGNsYXNzIEMgeworICAgIHB1YmxpYyB2b2lkIGRvU29tZXRoaW5nKCkgeworICAgICAgICBmaW5hbCBTdHJpbmcgdGV4dDEgPSAiaGVsbG8iOworICAgICAgICBmb3IgKEl0ZXJhdG9yIGl0ID0gZ2V0U29tZU9iamVjdHModGV4dDEpLml0ZXJhdG9yKCk7IGl0Lmhhc05leHQoKTspIHsKKyAgICAgICAgICAgIFN0cmluZyB0ZXh0ID0gKFN0cmluZylpdC5uZXh0KCk7CisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oInRleHQgPSAiICsgdGV4dCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwcml2YXRlIENvbGxlY3Rpb24gZ2V0U29tZU9iamVjdHMoU3RyaW5nIHRleHQpIHsKKyAgICAgICAgZmluYWwgTGlzdCBsaXN0ID0gbmV3IEFycmF5TGlzdCgpOworICAgICAgICBsaXN0LmFkZCh0ZXh0KTsKKyAgICAgICAgcmV0dXJuIGxpc3Q7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVNZXRob2QvQ2FsbFVuZGVySWYuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVNZXRob2QvQ2FsbFVuZGVySWYuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZGIzZTE1Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZU1ldGhvZC9DYWxsVW5kZXJJZi5qYXZhCkBAIC0wLDAgKzEsMTQgQEAKK3B1YmxpYyBjbGFzcyBGb28geworICAgIFN0cmluZyBnZXRDb21wb25lbnQoSW50ZWdlciBpKSB7IHJldHVybiBudWxsOyB9CisgICAgSW50ZWdlciBteUk7CisKKyAgICBwdWJsaWMgdm9pZCB1c2FnZSgpIHsKKyAgICAgICAgaWYgKG15SSAhPSBudWxsKQorICAgICAgICAgICAgbWV0aG9kKG15SSk7CisgICAgfQorCisgICAgdm9pZCBtZTxjYXJldD50aG9kKEludGVnZXIgaSkgeworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oZ2V0Q29tcG9uZW50KG15SSkgKyBnZXRDb21wb25lbnQoaSkpOworICAgIH0KKworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVNZXRob2QvQ2FsbFVuZGVySWYuamF2YS5hZnRlciBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVNZXRob2QvQ2FsbFVuZGVySWYuamF2YS5hZnRlcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMjcxYmY3Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZU1ldGhvZC9DYWxsVW5kZXJJZi5qYXZhLmFmdGVyCkBAIC0wLDAgKzEsMTAgQEAKK3B1YmxpYyBjbGFzcyBGb28geworICAgIFN0cmluZyBnZXRDb21wb25lbnQoSW50ZWdlciBpKSB7IHJldHVybiBudWxsOyB9CisgICAgSW50ZWdlciBteUk7CisKKyAgICBwdWJsaWMgdm9pZCB1c2FnZSgpIHsKKyAgICAgICAgaWYgKG15SSAhPSBudWxsKQorICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKGdldENvbXBvbmVudChteUkpICsgZ2V0Q29tcG9uZW50KG15SSkpOworICAgIH0KKworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVNZXRob2QvQ2hhaW5lZENvbnN0cnVjdG9yLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lTWV0aG9kL0NoYWluZWRDb25zdHJ1Y3Rvci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE2NGQyNzUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lTWV0aG9kL0NoYWluZWRDb25zdHJ1Y3Rvci5qYXZhCkBAIC0wLDAgKzEsMjEgQEAKK3B1YmxpYyBjbGFzcyBJbmxpbmVUaGlzIHsKKyAgICBwdWJsaWMgSW5saW5lVGhpcygpIHsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJjb2RlIGJsb2NrIGhlcmUiKTsKKyAgICB9CisKKyAgICBwdWJsaWMgSW5saW5lVGhpcyhpbnQgaSkgeworICAgICAgICB0aDxjYXJldD5pcygpOworICAgIH0KKworICAgIHB1YmxpYyBJbmxpbmVUaGlzKFN0cmluZyBzdHIpIHsKKyAgICAgICAgdGhpcyhJbnRlZ2VyLnBhcnNlSW50KHN0cikpOworICAgIH0KKworCisKKworICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKyAgICAgICAgSW5saW5lVGhpcyBhSW5saW5lVGhpcyA9IG5ldyBJbmxpbmVUaGlzKCk7CisgICAgICAgIElubGluZVRoaXMgYUlubGluZVRoaXMxID0gbmV3IElubGluZVRoaXMoMSk7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVNZXRob2QvQ2hhaW5lZENvbnN0cnVjdG9yLmphdmEuYWZ0ZXIgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lTWV0aG9kL0NoYWluZWRDb25zdHJ1Y3Rvci5qYXZhLmFmdGVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEwNGY4YjMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lTWV0aG9kL0NoYWluZWRDb25zdHJ1Y3Rvci5qYXZhLmFmdGVyCkBAIC0wLDAgKzEsMjEgQEAKK3B1YmxpYyBjbGFzcyBJbmxpbmVUaGlzIHsKKyAgICBwdWJsaWMgSW5saW5lVGhpcygpIHsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJjb2RlIGJsb2NrIGhlcmUiKTsKKyAgICB9CisKKyAgICBwdWJsaWMgSW5saW5lVGhpcyhpbnQgaSkgeworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImNvZGUgYmxvY2sgaGVyZSIpOworICAgIH0KKworICAgIHB1YmxpYyBJbmxpbmVUaGlzKFN0cmluZyBzdHIpIHsKKyAgICAgICAgdGhpcyhJbnRlZ2VyLnBhcnNlSW50KHN0cikpOworICAgIH0KKworCisKKworICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKyAgICAgICAgSW5saW5lVGhpcyBhSW5saW5lVGhpcyA9IG5ldyBJbmxpbmVUaGlzKCk7CisgICAgICAgIElubGluZVRoaXMgYUlubGluZVRoaXMxID0gbmV3IElubGluZVRoaXMoMSk7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVNZXRob2QvQ2hhaW5lZENvbnN0cnVjdG9yMS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZU1ldGhvZC9DaGFpbmVkQ29uc3RydWN0b3IxLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTk5MTMzYwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVNZXRob2QvQ2hhaW5lZENvbnN0cnVjdG9yMS5qYXZhCkBAIC0wLDAgKzEsMjEgQEAKK3B1YmxpYyBjbGFzcyBJbmxpbmVUaGlzIHsKKyAgICBwdWJsaWMgSW5saW5lVGhpcygpIHsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJjb2RlIGJsb2NrIGhlcmUiKTsKKyAgICB9CisKKyAgICBwdWJsaWMgSW5saW5lVGhpcyhpbnQgaSkgeworICAgICAgICB0aGlzKCk7CisgICAgfQorCisgICAgcHVibGljIElubGluZVRoaXMoU3RyaW5nIHN0cikgeworICAgICAgICB0aDxjYXJldD5pcyhJbnRlZ2VyLnBhcnNlSW50KHN0cikpOworICAgIH0KKworCisKKworICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKyAgICAgICAgSW5saW5lVGhpcyBhSW5saW5lVGhpcyA9IG5ldyBJbmxpbmVUaGlzKCk7CisgICAgICAgIElubGluZVRoaXMgYUlubGluZVRoaXMxID0gbmV3IElubGluZVRoaXMoMSk7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVNZXRob2QvQ2hhaW5lZENvbnN0cnVjdG9yMS5qYXZhLmFmdGVyIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZU1ldGhvZC9DaGFpbmVkQ29uc3RydWN0b3IxLmphdmEuYWZ0ZXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTE0MzE0MQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVNZXRob2QvQ2hhaW5lZENvbnN0cnVjdG9yMS5qYXZhLmFmdGVyCkBAIC0wLDAgKzEsMTcgQEAKK3B1YmxpYyBjbGFzcyBJbmxpbmVUaGlzIHsKKyAgICBwdWJsaWMgSW5saW5lVGhpcygpIHsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJjb2RlIGJsb2NrIGhlcmUiKTsKKyAgICB9CisKKyAgICBwdWJsaWMgSW5saW5lVGhpcyhTdHJpbmcgc3RyKSB7CisgICAgICAgIHRoaXMoKTsKKyAgICB9CisKKworCisKKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisgICAgICAgIElubGluZVRoaXMgYUlubGluZVRoaXMgPSBuZXcgSW5saW5lVGhpcygpOworICAgICAgICBJbmxpbmVUaGlzIGFJbmxpbmVUaGlzMSA9IG5ldyBJbmxpbmVUaGlzKCk7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVNZXRob2QvQ2hhaW5pbmdDb25zdHJ1Y3Rvci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZU1ldGhvZC9DaGFpbmluZ0NvbnN0cnVjdG9yLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNThiMTZiYwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVNZXRob2QvQ2hhaW5pbmdDb25zdHJ1Y3Rvci5qYXZhCkBAIC0wLDAgKzEsMjIgQEAKK2NsYXNzIElubGluZU1ldGhvZFRlc3QgeworICAgIHB1YmxpYyBzdGF0aWMgSW5saW5lTWV0aG9kVGVzdCBjcmVhdGVJbnN0YW5jZSgpIHsKKyAgICAgICAgcmV0dXJuIG5ldyBJbmxpbmVNZXRob2RUZXN0KDApOworICAgIH0KKworICAgIHByb3RlY3RlZCA8Y2FyZXQ+SW5saW5lTWV0aG9kVGVzdChpbnQgeSkgeworICAgICAgICB0aGlzKCJoZWxsbyB3b3JsZCIsIHkpOworICAgIH0KKworICAgIHByb3RlY3RlZCBJbmxpbmVNZXRob2RUZXN0KCkgeworICAgICAgICB0aGlzKDApOworICAgIH0KKworICAgIHB1YmxpYyBJbmxpbmVNZXRob2RUZXN0KFN0cmluZyB0ZXh0LCBpbnQgaSkgeworICAgIH0KK30KKworY2xhc3MgRGVyaXZlZCBleHRlbmRzIElubGluZU1ldGhvZFRlc3QgeworICAgIHB1YmxpYyBEZXJpdmVkKGludCBpKSB7CisgICAgICAgIHN1cGVyKGkpOworICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVNZXRob2QvQ2hhaW5pbmdDb25zdHJ1Y3Rvci5qYXZhLmFmdGVyIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZU1ldGhvZC9DaGFpbmluZ0NvbnN0cnVjdG9yLmphdmEuYWZ0ZXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjNhNzQ4ZgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVNZXRob2QvQ2hhaW5pbmdDb25zdHJ1Y3Rvci5qYXZhLmFmdGVyCkBAIC0wLDAgKzEsMTggQEAKK2NsYXNzIElubGluZU1ldGhvZFRlc3QgeworICAgIHB1YmxpYyBzdGF0aWMgSW5saW5lTWV0aG9kVGVzdCBjcmVhdGVJbnN0YW5jZSgpIHsKKyAgICAgICAgcmV0dXJuIG5ldyBJbmxpbmVNZXRob2RUZXN0KCJoZWxsbyB3b3JsZCIsIDApOworICAgIH0KKworICAgIHByb3RlY3RlZCBJbmxpbmVNZXRob2RUZXN0KCkgeworICAgICAgICB0aGlzKCJoZWxsbyB3b3JsZCIsIDApOworICAgIH0KKworICAgIHB1YmxpYyBJbmxpbmVNZXRob2RUZXN0KFN0cmluZyB0ZXh0LCBpbnQgaSkgeworICAgIH0KK30KKworY2xhc3MgRGVyaXZlZCBleHRlbmRzIElubGluZU1ldGhvZFRlc3QgeworICAgIHB1YmxpYyBEZXJpdmVkKGludCBpKSB7CisgICAgICAgIHN1cGVyKCJoZWxsbyB3b3JsZCIsIGkpOworICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVNZXRob2QvQ2hhaW5pbmdDb25zdHJ1Y3RvcjEuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVNZXRob2QvQ2hhaW5pbmdDb25zdHJ1Y3RvcjEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMTY1YzY1Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZU1ldGhvZC9DaGFpbmluZ0NvbnN0cnVjdG9yMS5qYXZhCkBAIC0wLDAgKzEsMTIgQEAKK2NsYXNzIFRlc3RJbmxpbmVNZXRob2QgeworICAgIHB1YmxpYyA8Y2FyZXQ+VGVzdElubGluZU1ldGhvZChTdHJpbmcgczEsIGludCByMSwgU3RyaW5nIHMyLCBpbnQgcjIpIHsKKyAgICAgICAgdGhpcyhJbnRlZ2VyLnZhbHVlT2YoczEsIHIxKSwgSW50ZWdlci52YWx1ZU9mKHMyLCByMikpOworICAgIH0KKworICAgIHB1YmxpYyBUZXN0SW5saW5lTWV0aG9kKEludGVnZXIgaTEsIEludGVnZXIgaTIpIHsKKyAgICB9CisKKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisgICAgICAgIFRlc3RJbmxpbmVNZXRob2QgdGVzdCA9IG5ldyBUZXN0SW5saW5lTWV0aG9kKCIxMCIsIDEwLCAiQSIsIDE2KTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZU1ldGhvZC9DaGFpbmluZ0NvbnN0cnVjdG9yMS5qYXZhLmFmdGVyIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZU1ldGhvZC9DaGFpbmluZ0NvbnN0cnVjdG9yMS5qYXZhLmFmdGVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRhMTFiNTAKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lTWV0aG9kL0NoYWluaW5nQ29uc3RydWN0b3IxLmphdmEuYWZ0ZXIKQEAgLTAsMCArMSw5IEBACitjbGFzcyBUZXN0SW5saW5lTWV0aG9kIHsKKworICAgIHB1YmxpYyBUZXN0SW5saW5lTWV0aG9kKEludGVnZXIgaTEsIEludGVnZXIgaTIpIHsKKyAgICB9CisKKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisgICAgICAgIFRlc3RJbmxpbmVNZXRob2QgdGVzdCA9IG5ldyBUZXN0SW5saW5lTWV0aG9kKEludGVnZXIudmFsdWVPZigiMTAiLCAxMCksIEludGVnZXIudmFsdWVPZigiQSIsIDE2KSk7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVNZXRob2QvQ29uZmxpY3RpbmdGaWVsZC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZU1ldGhvZC9Db25mbGljdGluZ0ZpZWxkLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjU5ZmJiMQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVNZXRob2QvQ29uZmxpY3RpbmdGaWVsZC5qYXZhCkBAIC0wLDAgKzEsMTEgQEAKK2NsYXNzIFRlc3QgeworICAgIHB1YmxpYyBpbnQgaTsKKworICAgIHB1YmxpYyBpbnQgPGNhcmV0PmdldEkoKSB7CisgICAgICAgIHJldHVybiBpOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIHVzYWdlKCkgeworICAgICAgICBpbnQgaSA9IGdldEkoKTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZU1ldGhvZC9Db25mbGljdGluZ0ZpZWxkLmphdmEuYWZ0ZXIgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lTWV0aG9kL0NvbmZsaWN0aW5nRmllbGQuamF2YS5hZnRlcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZjdiNjcwCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZU1ldGhvZC9Db25mbGljdGluZ0ZpZWxkLmphdmEuYWZ0ZXIKQEAgLTAsMCArMSw3IEBACitjbGFzcyBUZXN0IHsKKyAgICBwdWJsaWMgaW50IGk7CisKKyAgICBwdWJsaWMgdm9pZCB1c2FnZSgpIHsKKyAgICAgICAgaW50IGkgPSB0aGlzLmk7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVNZXRob2QvQ29uc3RhbnRJbkNoYWluaW5nQ29uc3RydWN0b3IuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVNZXRob2QvQ29uc3RhbnRJbkNoYWluaW5nQ29uc3RydWN0b3IuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOGY2N2YyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZU1ldGhvZC9Db25zdGFudEluQ2hhaW5pbmdDb25zdHJ1Y3Rvci5qYXZhCkBAIC0wLDAgKzEsMTYgQEAKK2NsYXNzIFRlc3QgeworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IElEPTA7CisKKyAgICBwdWJsaWMgPGNhcmV0PlRlc3QoKSB7CisgICAgICAgIHRoaXMoSUQpOworICAgIH0KKworICAgIHB1YmxpYyBUZXN0KGludCBpZCkgeworICAgIH0KK30KKworY2xhc3MgUmVzdCB7CisgICAgcHVibGljIHN0YXRpYyB2b2lkIHRlc3QoKSB7CisgICAgICAgIG5ldyBUZXN0KCk7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVNZXRob2QvQ29uc3RhbnRJbkNoYWluaW5nQ29uc3RydWN0b3IuamF2YS5hZnRlciBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVNZXRob2QvQ29uc3RhbnRJbkNoYWluaW5nQ29uc3RydWN0b3IuamF2YS5hZnRlcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NmRlZDcyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZU1ldGhvZC9Db25zdGFudEluQ2hhaW5pbmdDb25zdHJ1Y3Rvci5qYXZhLmFmdGVyCkBAIC0wLDAgKzEsMTIgQEAKK2NsYXNzIFRlc3QgeworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IElEPTA7CisKKyAgICBwdWJsaWMgVGVzdChpbnQgaWQpIHsKKyAgICB9Cit9CisKK2NsYXNzIFJlc3QgeworICAgIHB1YmxpYyBzdGF0aWMgdm9pZCB0ZXN0KCkgeworICAgICAgICBuZXcgVGVzdChUZXN0LklEKTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZU1ldGhvZC9FbnVtQ29uc3RhbnRDb25zdHJ1Y3RvclBhcmFtZXRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZU1ldGhvZC9FbnVtQ29uc3RhbnRDb25zdHJ1Y3RvclBhcmFtZXRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQyNDlhMzAKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lTWV0aG9kL0VudW1Db25zdGFudENvbnN0cnVjdG9yUGFyYW1ldGVyLmphdmEKQEAgLTAsMCArMSwxMCBAQAorcHVibGljIGVudW0gRUVFIHsKKyAgICBhKDxjYXJldD5kb1Rlc3QoKSk7CisKKyAgICBFRUUoU3RyaW5nIHMpIHsKKyAgICB9CisKKyAgICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgZG9UZXN0KCkgeworICAgICAgICByZXR1cm4gIiI7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZU1ldGhvZC9FbnVtQ29uc3RhbnRDb25zdHJ1Y3RvclBhcmFtZXRlci5qYXZhLmFmdGVyIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZU1ldGhvZC9FbnVtQ29uc3RhbnRDb25zdHJ1Y3RvclBhcmFtZXRlci5qYXZhLmFmdGVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNiYzI0ZTUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lTWV0aG9kL0VudW1Db25zdGFudENvbnN0cnVjdG9yUGFyYW1ldGVyLmphdmEuYWZ0ZXIKQEAgLTAsMCArMSw3IEBACitwdWJsaWMgZW51bSBFRUUgeworICAgIGEoIiIpOworCisgICAgRUVFKFN0cmluZyBzKSB7CisgICAgfQorCit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lTWV0aG9kL0VudW1Db25zdGFudENvbnN0cnVjdG9yUGFyYW1ldGVyQ29tcGxleC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZU1ldGhvZC9FbnVtQ29uc3RhbnRDb25zdHJ1Y3RvclBhcmFtZXRlckNvbXBsZXguamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NTM4YTg0Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZU1ldGhvZC9FbnVtQ29uc3RhbnRDb25zdHJ1Y3RvclBhcmFtZXRlckNvbXBsZXguamF2YQpAQCAtMCwwICsxLDExIEBACitwdWJsaWMgZW51bSBFRUUgeworICAgIGEoPGNhcmV0PmRvVGVzdCgpKTsKKworICAgIEVFRShTdHJpbmcgcykgeworICAgIH0KKworICAgIHByaXZhdGUgc3RhdGljIFN0cmluZyBkb1Rlc3QoKSB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigicSIpOworICAgICAgICByZXR1cm4gIiI7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZU1ldGhvZC9FbnVtQ29uc3RhbnRDb25zdHJ1Y3RvclBhcmFtZXRlckNvbXBsZXguamF2YS5hZnRlciBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVNZXRob2QvRW51bUNvbnN0YW50Q29uc3RydWN0b3JQYXJhbWV0ZXJDb21wbGV4LmphdmEuYWZ0ZXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDlhYmZhYwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVNZXRob2QvRW51bUNvbnN0YW50Q29uc3RydWN0b3JQYXJhbWV0ZXJDb21wbGV4LmphdmEuYWZ0ZXIKQEAgLTAsMCArMSwxMiBAQAorcHVibGljIGVudW0gRUVFIHsKKyAgICBhKG5ldyBPYmplY3QoKSB7CisgICAgICAgIFN0cmluZyBldmFsdWF0ZSgpIHsKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigicSIpOworICAgICAgICAgICAgcmV0dXJuICIiOworICAgICAgICB9CisgICAgfS5ldmFsdWF0ZSgpKTsKKworICAgIEVFRShTdHJpbmcgcykgeworICAgIH0KKworfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZU1ldGhvZC9FbnVtQ29uc3RhbnRDb25zdHJ1Y3RvclBhcmFtZXRlckNvbXBsZXgyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lTWV0aG9kL0VudW1Db25zdGFudENvbnN0cnVjdG9yUGFyYW1ldGVyQ29tcGxleDIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NWZjNDhjCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZU1ldGhvZC9FbnVtQ29uc3RhbnRDb25zdHJ1Y3RvclBhcmFtZXRlckNvbXBsZXgyLmphdmEKQEAgLTAsMCArMSwxMSBAQAorcHVibGljIGVudW0gRUVFIHsKKyAgICBhKDxjYXJldD5kb1Rlc3QoInEiKSk7CisKKyAgICBFRUUoU3RyaW5nIHMpIHsKKyAgICB9CisKKyAgICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgZG9UZXN0KFN0cmluZyBzKSB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihzKTsKKyAgICAgICAgcmV0dXJuICIiOworICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVNZXRob2QvRW51bUNvbnN0YW50Q29uc3RydWN0b3JQYXJhbWV0ZXJDb21wbGV4Mi5qYXZhLmFmdGVyIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZU1ldGhvZC9FbnVtQ29uc3RhbnRDb25zdHJ1Y3RvclBhcmFtZXRlckNvbXBsZXgyLmphdmEuYWZ0ZXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDlhYmZhYwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVNZXRob2QvRW51bUNvbnN0YW50Q29uc3RydWN0b3JQYXJhbWV0ZXJDb21wbGV4Mi5qYXZhLmFmdGVyCkBAIC0wLDAgKzEsMTIgQEAKK3B1YmxpYyBlbnVtIEVFRSB7CisgICAgYShuZXcgT2JqZWN0KCkgeworICAgICAgICBTdHJpbmcgZXZhbHVhdGUoKSB7CisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oInEiKTsKKyAgICAgICAgICAgIHJldHVybiAiIjsKKyAgICAgICAgfQorICAgIH0uZXZhbHVhdGUoKSk7CisKKyAgICBFRUUoU3RyaW5nIHMpIHsKKyAgICB9CisKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVNZXRob2QvRW51bUNvbnN0cnVjdG9yLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lTWV0aG9kL0VudW1Db25zdHJ1Y3Rvci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI0YjQwNGIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lTWV0aG9kL0VudW1Db25zdHJ1Y3Rvci5qYXZhCkBAIC0wLDAgKzEsMTAgQEAKK2VudW0gRW51bVdpdGhDb25zdHJ1Y3RvciB7CisgICAgVGVzdCgiMSIpLCBSZXN0KCIyIiwgImIiKTsKKworICAgIDxjYXJldD5FbnVtV2l0aENvbnN0cnVjdG9yKFN0cmluZyBzKSB7CisgICAgICAgIHRoaXMocywgIiIpOworICAgIH0KKworICAgIEVudW1XaXRoQ29uc3RydWN0b3IoU3RyaW5nIHMsIFN0cmluZyBzMikgeworICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVNZXRob2QvRW51bUNvbnN0cnVjdG9yLmphdmEuYWZ0ZXIgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lTWV0aG9kL0VudW1Db25zdHJ1Y3Rvci5qYXZhLmFmdGVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc0MTYyMmQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lTWV0aG9kL0VudW1Db25zdHJ1Y3Rvci5qYXZhLmFmdGVyCkBAIC0wLDAgKzEsNiBAQAorZW51bSBFbnVtV2l0aENvbnN0cnVjdG9yIHsKKyAgICBUZXN0KCIxIiwgIiIpLCBSZXN0KCIyIiwgImIiKTsKKworICAgIEVudW1XaXRoQ29uc3RydWN0b3IoU3RyaW5nIHMsIFN0cmluZyBzMikgeworICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVNZXRob2QvRmllbGRJbml0aWFsaXplci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZU1ldGhvZC9GaWVsZEluaXRpYWxpemVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmYyNjg1OQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVNZXRob2QvRmllbGRJbml0aWFsaXplci5qYXZhCkBAIC0wLDAgKzEsNyBAQAorY2xhc3MgQXsKKyAgaW50IGZpZWxkID0gZm9vKCk7CisKKyAgaW50IDxjYXJldD5mb28oKXsKKyAgICByZXR1cm4gMTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZU1ldGhvZC9GaWVsZEluaXRpYWxpemVyLmphdmEuYWZ0ZXIgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lTWV0aG9kL0ZpZWxkSW5pdGlhbGl6ZXIuamF2YS5hZnRlcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOWY5M2RlCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZU1ldGhvZC9GaWVsZEluaXRpYWxpemVyLmphdmEuYWZ0ZXIKQEAgLTAsMCArMSw0IEBACitjbGFzcyBBeworICBpbnQgZmllbGQgPSAxOworCit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lTWV0aG9kL0ZpbmFsUGFyYW1ldGVycy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZU1ldGhvZC9GaW5hbFBhcmFtZXRlcnMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OWQxMWVjCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZU1ldGhvZC9GaW5hbFBhcmFtZXRlcnMuamF2YQpAQCAtMCwwICsxLDEwIEBACitjbGFzcyBUZXN0IHsKKyAgICB2b2lkIG1ldGhvZChPYmplY3QgeCkgeworICAgICAgICBTdHJpbmcgcyA9IG51bGw7CisgICAgICAgIHMgPSAoU3RyaW5nKSB4OworICAgICAgICB0b0lubGluZShzLmxlbmd0aCgpKTsKKyAgICB9CisgICAgdm9pZCB0b0lubGk8Y2FyZXQ+bmUoZmluYWwgaW50IGkpIHsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKGkpOworICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVNZXRob2QvRmluYWxQYXJhbWV0ZXJzLmphdmEuYWZ0ZXIgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lTWV0aG9kL0ZpbmFsUGFyYW1ldGVycy5qYXZhLmFmdGVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUwZmViOTYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lTWV0aG9kL0ZpbmFsUGFyYW1ldGVycy5qYXZhLmFmdGVyCkBAIC0wLDAgKzEsNyBAQAorY2xhc3MgVGVzdCB7CisgICAgdm9pZCBtZXRob2QoT2JqZWN0IHgpIHsKKyAgICAgICAgU3RyaW5nIHMgPSBudWxsOworICAgICAgICBzID0gKFN0cmluZykgeDsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKHMubGVuZ3RoKCkpOworICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVNZXRob2QvRmluYWxQYXJhbWV0ZXJzMS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZU1ldGhvZC9GaW5hbFBhcmFtZXRlcnMxLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmUwMmI3MgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVNZXRob2QvRmluYWxQYXJhbWV0ZXJzMS5qYXZhCkBAIC0wLDAgKzEsMTUgQEAKK2NsYXNzIFRlc3QgeworICAgIHZvaWQgbWV0aG9kKE9iamVjdCB4KSB7CisgICAgICAgIFN0cmluZyBzID0gbnVsbDsKKyAgICAgICAgcyA9IChTdHJpbmcpIHg7CisJdG9JbmxpbmUocy5sZW5ndGgoKSk7CisgICAgfQorICAgIHZvaWQgdG9JbjxjYXJldD5saW5lKGZpbmFsIGludCBpKSB7CisgICAgICAgIFJ1bm5hYmxlIHIgPSBuZXcgUnVubmFibGUoKSB7CisgICAgICAgICAgICBwdWJsaWMgdm9pZCBydW4oKSB7CisgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKGkpOworICAgICAgICAgICAgfQorICAgICAgICB9OworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oaSk7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZU1ldGhvZC9GaW5hbFBhcmFtZXRlcnMxLmphdmEuYWZ0ZXIgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lTWV0aG9kL0ZpbmFsUGFyYW1ldGVyczEuamF2YS5hZnRlcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMWQ4MzBlCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZU1ldGhvZC9GaW5hbFBhcmFtZXRlcnMxLmphdmEuYWZ0ZXIKQEAgLTAsMCArMSwxMyBAQAorY2xhc3MgVGVzdCB7CisgICAgdm9pZCBtZXRob2QoT2JqZWN0IHgpIHsKKyAgICAgICAgU3RyaW5nIHMgPSBudWxsOworICAgICAgICBzID0gKFN0cmluZykgeDsKKyAgICAgICAgZmluYWwgaW50IGkgPSBzLmxlbmd0aCgpOworICAgICAgICBSdW5uYWJsZSByID0gbmV3IFJ1bm5hYmxlKCkgeworICAgICAgICAgICAgcHVibGljIHZvaWQgcnVuKCkgeworICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKGkpOworICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVNZXRob2QvRmxhdFZhcmFyZ3MuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVNZXRob2QvRmxhdFZhcmFyZ3MuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45N2EzNWY3Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZU1ldGhvZC9GbGF0VmFyYXJncy5qYXZhCkBAIC0wLDAgKzEsMTYgQEAKK2NsYXNzIFZhcmFyZ3MgeworICB2b2lkIHh4eCgpIHsKKyAgICBmb28obmV3IFN0cmluZ1tdIHsiYWEiLCAiaGgifSk7CisgIH0KKworICB2b2lkIDxjYXJldD5mb28oU3RyaW5nLi4uIHNzKSB7CisgICAgYmFyKHNzKTsKKyAgfQorCisgIHZvaWQgYmFyKFN0cmluZyBzLCBTdHJpbmcgc3MpeworCisgIH0KKworICB2b2lkIGJhcihTdHJpbmcuLi4gc3MpIHsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVNZXRob2QvRmxhdFZhcmFyZ3MuamF2YS5hZnRlciBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVNZXRob2QvRmxhdFZhcmFyZ3MuamF2YS5hZnRlcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNzEzYjRkCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZU1ldGhvZC9GbGF0VmFyYXJncy5qYXZhLmFmdGVyCkBAIC0wLDAgKzEsMTIgQEAKK2NsYXNzIFZhcmFyZ3MgeworICB2b2lkIHh4eCgpIHsKKyAgICAgIGJhcihuZXcgU3RyaW5nW10geyJhYSIsICJoaCJ9KTsKKyAgfQorCisgICAgdm9pZCBiYXIoU3RyaW5nIHMsIFN0cmluZyBzcyl7CisKKyAgfQorCisgIHZvaWQgYmFyKFN0cmluZy4uLiBzcykgeworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZU1ldGhvZC9GbGF0VmFyYXJnczEuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVNZXRob2QvRmxhdFZhcmFyZ3MxLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmU0N2IyMwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVNZXRob2QvRmxhdFZhcmFyZ3MxLmphdmEKQEAgLTAsMCArMSwxMiBAQAorY2xhc3MgVmFyYXJncyB7CisgIHZvaWQgeHh4KCkgeworICAgIGZvbyhuZXcgU3RyaW5nW10geyJhYSIsICJoaCJ9KTsKKyAgfQorCisgIHZvaWQgPGNhcmV0PmZvbyhTdHJpbmcuLi4gc3MpIHsKKyAgICBiYXIoc3MpOworICB9CisKKyAgdm9pZCBiYXIoU3RyaW5nLi4uIHNzKSB7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lTWV0aG9kL0ZsYXRWYXJhcmdzMS5qYXZhLmFmdGVyIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZU1ldGhvZC9GbGF0VmFyYXJnczEuamF2YS5hZnRlcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZDA1N2IxCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZU1ldGhvZC9GbGF0VmFyYXJnczEuamF2YS5hZnRlcgpAQCAtMCwwICsxLDggQEAKK2NsYXNzIFZhcmFyZ3MgeworICB2b2lkIHh4eCgpIHsKKyAgICAgIGJhcigiYWEiLCAiaGgiKTsKKyAgfQorCisgICAgdm9pZCBiYXIoU3RyaW5nLi4uIHNzKSB7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lTWV0aG9kL0lERUFERVYxMjYxNi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZU1ldGhvZC9JREVBREVWMTI2MTYuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YzI0NjIxCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZU1ldGhvZC9JREVBREVWMTI2MTYuamF2YQpAQCAtMCwwICsxLDExIEBACitjbGFzcyBUZXN0IHsKKyAgcHVibGljIHZvaWQgZm9vKCkgeworICAgICAgU3RyaW5nIHMgPSA8Y2FyZXQ+YmFyKCk7CisgIH0KKworICBwcml2YXRlIFN0cmluZyBiYXIoKSB7CisgICAgU3RyaW5nIHJlc3VsdCA9IG51bGw7CisgICAgYXNzZXJ0IHJlc3VsdCAhPSBudWxsOworICAgIHJldHVybiByZXN1bHQ7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lTWV0aG9kL0lERUFERVYxMjYxNi5qYXZhLmFmdGVyIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZU1ldGhvZC9JREVBREVWMTI2MTYuamF2YS5hZnRlcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OTYwYzQxCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZU1ldGhvZC9JREVBREVWMTI2MTYuamF2YS5hZnRlcgpAQCAtMCwwICsxLDggQEAKK2NsYXNzIFRlc3QgeworICBwdWJsaWMgdm9pZCBmb28oKSB7CisgICAgICBTdHJpbmcgcmVzdWx0ID0gbnVsbDsKKyAgICAgIGFzc2VydCByZXN1bHQgIT0gbnVsbDsKKyAgICAgIFN0cmluZyBzID0gcmVzdWx0OworICB9CisKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lTWV0aG9kL0lERUFERVYzNjcyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lTWV0aG9kL0lERUFERVYzNjcyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTZiYzNiMgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVNZXRob2QvSURFQURFVjM2NzIuamF2YQpAQCAtMCwwICsxLDEzIEBACitjbGFzcyBUZXN0ZXIxIHsKKyAgICB2b2lkIGNhbGxlcigpIHsKKyAgICAgICAgPGNhcmV0Pm1ldGhvZCgpOyAKKyAgICB9CisgICAgdm9pZCBtZXRob2QoKSB7CisgICAgICAgIG5ldyBSdW5uYWJsZSgpIHsKKyAgICAgICAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKKyAgICAgICAgICAgICAgICBvdGhlcigpOworICAgICAgICAgICAgfQorICAgICAgICB9OworICAgIH0KKyAgICB2b2lkIG90aGVyKCkgeyB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZU1ldGhvZC9JREVBREVWMzY3Mi5qYXZhLmFmdGVyIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZU1ldGhvZC9JREVBREVWMzY3Mi5qYXZhLmFmdGVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk1NDViNDEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lTWV0aG9kL0lERUFERVYzNjcyLmphdmEuYWZ0ZXIKQEAgLTAsMCArMSwxMSBAQAorY2xhc3MgVGVzdGVyMSB7CisgICAgdm9pZCBjYWxsZXIoKSB7CisgICAgICAgIG5ldyBSdW5uYWJsZSgpIHsKKyAgICAgICAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKKyAgICAgICAgICAgICAgICBvdGhlcigpOworICAgICAgICAgICAgfQorICAgICAgICB9OworICAgIH0KKworICAgIHZvaWQgb3RoZXIoKSB7IH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lTWV0aG9kL0lERUFERVY1ODA2LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lTWV0aG9kL0lERUFERVY1ODA2LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGUzOTFjYQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVNZXRob2QvSURFQURFVjU4MDYuamF2YQpAQCAtMCwwICsxLDI3IEBACitpbXBvcnQgamF2YS51dGlsLio7CisKK2NsYXNzIEZvbyB7CisgICAgcHVibGljIHZvaWQgZm9vKEJhciBiYXIpIHsKKyAgICAgICAgZm9yIChJdGVyYXRvciBpdCA9IGJhci5pdGVyYXRvcigpOyBpdC5oYXNOZXh0KCk7KSB7CisgICAgICAgICAgICBmaW5hbCBTdHJpbmcgbyA9IChTdHJpbmcpIGl0Lm5leHQoKTsKKyAgICAgICAgfQorICAgIH0KK30KKworY2xhc3MgQmFyPENOIGV4dGVuZHMgQmFyPiB7CisgICAgcHJpdmF0ZSBMaXN0PENOPiBjbnM7CisKKyAgICAvKioKKyAgICAgKiBAZGVwcmVjYXRlZAorICAgICAqLworICAgIHB1YmxpYyBJdGVyYXRvcjxDTj4gPGNhcmV0Pml0ZXJhdG9yKCkgeworICAgICAgICByZXR1cm4gZ2V0Q25zKCkuaXRlcmF0b3IoKTsKKyAgICB9CisKKyAgICBwdWJsaWMgTGlzdDxDTj4gZ2V0Q25zKCkgeworICAgICAgICBpZiAoY25zID09IG51bGwpIHsKKyAgICAgICAgICAgIHJldHVybiBDb2xsZWN0aW9ucy5lbXB0eUxpc3QoKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gY25zOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lTWV0aG9kL0lERUFERVY1ODA2LmphdmEuYWZ0ZXIgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lTWV0aG9kL0lERUFERVY1ODA2LmphdmEuYWZ0ZXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjgxMDYxZAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVNZXRob2QvSURFQURFVjU4MDYuamF2YS5hZnRlcgpAQCAtMCwwICsxLDIwIEBACitpbXBvcnQgamF2YS51dGlsLio7CisKK2NsYXNzIEZvbyB7CisgICAgcHVibGljIHZvaWQgZm9vKEJhciBiYXIpIHsKKyAgICAgICAgZm9yIChJdGVyYXRvciBpdCA9IGJhci5nZXRDbnMoKS5pdGVyYXRvcigpOyBpdC5oYXNOZXh0KCk7KSB7CisgICAgICAgICAgICBmaW5hbCBTdHJpbmcgbyA9IChTdHJpbmcpIGl0Lm5leHQoKTsKKyAgICAgICAgfQorICAgIH0KK30KKworY2xhc3MgQmFyPENOIGV4dGVuZHMgQmFyPiB7CisgICAgcHJpdmF0ZSBMaXN0PENOPiBjbnM7CisKKyAgICBwdWJsaWMgTGlzdDxDTj4gZ2V0Q25zKCkgeworICAgICAgICBpZiAoY25zID09IG51bGwpIHsKKyAgICAgICAgICAgIHJldHVybiBDb2xsZWN0aW9ucy5lbXB0eUxpc3QoKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gY25zOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lTWV0aG9kL0lERUFERVY2ODA3LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lTWV0aG9kL0lERUFERVY2ODA3LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDM0MmI5MTMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lTWV0aG9kL0lERUFERVY2ODA3LmphdmEKQEAgLTAsMCArMSwxNCBAQAorY2xhc3MgQmFzZSB7CisgICAgcHJvdGVjdGVkIGludCBmOworCisKKyAgICBwdWJsaWMgaW50IDxjYXJldD5nZXRGKCkgeworICAgICAgICByZXR1cm4gZjsKKyAgICB9Cit9CisKK2NsYXNzIERSViBleHRlbmRzIEJhc2UgeworICAgIHZvaWQgZigpIHsKKyAgICAgICAgaW50IGYxID0gZ2V0RigpOworICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVNZXRob2QvSURFQURFVjY4MDcuamF2YS5hZnRlciBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVNZXRob2QvSURFQURFVjY4MDcuamF2YS5hZnRlcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZjI2ODIyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZU1ldGhvZC9JREVBREVWNjgwNy5qYXZhLmFmdGVyCkBAIC0wLDAgKzEsMTEgQEAKK2NsYXNzIEJhc2UgeworICAgIHByb3RlY3RlZCBpbnQgZjsKKworCit9CisKK2NsYXNzIERSViBleHRlbmRzIEJhc2UgeworICAgIHZvaWQgZigpIHsKKyAgICAgICAgaW50IGYxID0gZjsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lTWV0aG9kL0luU3VwZXJDYWxsLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lTWV0aG9kL0luU3VwZXJDYWxsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2U3MGM0MgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVNZXRob2QvSW5TdXBlckNhbGwuamF2YQpAQCAtMCwwICsxLDIyIEBACitjbGFzcyBCQkIgeworICAgIHB1YmxpYyBCQkIoU3RyaW5nIHgpIHsKKyAgICB9CisKKyAgICB2b2lkIGZvbyhTdHJpbmcgcykge30KK30KKworY2xhc3MgQUFBIGV4dGVuZHMgQkJCIHsKKyAgICBwdWJsaWMgQUFBKFN0cmluZyB4KSB7CisgICAgICAgIHN1cGVyKHRlc3QoeCkpOworICAgIH0KKworICAgIHByaXZhdGUgc3RhdGljIFN0cmluZyB0PGNhcmV0PmVzdChTdHJpbmcgeCkgeworICAgICAgICBTdHJpbmcgeSA9IHgudHJpbSgpOworICAgICAgICByZXR1cm4geS5sZW5ndGgoKSA+IDAgPyB5IDogImFhYWEiOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHZvaWQgZm9vKFN0cmluZyBzKSB7CisgICAgICAgIHN1cGVyLmZvbyh0ZXN0KHMpKTsgICAgLy9UbyBjaGFuZ2UgYm9keSBvZiBvdmVycmlkZGVuIG1ldGhvZHMgdXNlIEZpbGUgfCBTZXR0aW5ncyB8IEZpbGUgVGVtcGxhdGVzLgorICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lTWV0aG9kL0luZmVycmVkVHlwZS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZU1ldGhvZC9JbmZlcnJlZFR5cGUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMDhmY2Y0Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZU1ldGhvZC9JbmZlcnJlZFR5cGUuamF2YQpAQCAtMCwwICsxLDggQEAKK2ltcG9ydCBqYXZhLnV0aWwuKjsKK2NsYXNzIFRlc3QgeworICAgIHByaXZhdGUgc3RhdGljIDxUPiBMaXN0PFQ+IDxjYXJldD5mb28oKSB7IHJldHVybiBDb2xsZWN0aW9ucy5lbXB0eUxpc3QoKTsgfQorICAgIHByaXZhdGUgc3RhdGljIDxUPiBMaXN0PFQ+IGJhcihMaXN0PFQ+IHhzKSB7IHJldHVybiB4czsgfQorICAgIHByaXZhdGUgc3RhdGljIHZvaWQgZ2F6b25rKCkgeworICAgICAgICBMaXN0PFN0cmluZz4gc3MgPSBiYXIoVGVzdC48U3RyaW5nPmZvbygpKTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lTWV0aG9kL0luZmVycmVkVHlwZS5qYXZhLmFmdGVyIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZU1ldGhvZC9JbmZlcnJlZFR5cGUuamF2YS5hZnRlcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNWI0NGRlCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZU1ldGhvZC9JbmZlcnJlZFR5cGUuamF2YS5hZnRlcgpAQCAtMCwwICsxLDcgQEAKK2ltcG9ydCBqYXZhLnV0aWwuKjsKK2NsYXNzIFRlc3QgeworICAgIHByaXZhdGUgc3RhdGljIDxUPiBMaXN0PFQ+IGJhcihMaXN0PFQ+IHhzKSB7IHJldHVybiB4czsgfQorICAgIHByaXZhdGUgc3RhdGljIHZvaWQgZ2F6b25rKCkgeworICAgICAgICBMaXN0PFN0cmluZz4gc3MgPSBiYXIoQ29sbGVjdGlvbnMuPFN0cmluZz5lbXB0eUxpc3QoKSk7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZU1ldGhvZC9JbmxpbmVBbGxJblByb2plY3RGcm9tTGlicmFyeS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZU1ldGhvZC9JbmxpbmVBbGxJblByb2plY3RGcm9tTGlicmFyeS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZkYmViMjYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lTWV0aG9kL0lubGluZUFsbEluUHJvamVjdEZyb21MaWJyYXJ5LmphdmEKQEAgLTAsMCArMSw3IEBACitpbXBvcnQgbXljb21wYW55LkZpbGU7CisKK2NsYXNzIFRlc3QgeworICB2b2lkIGZvbygpIHRocm93cyBFeGNlcHRpb24geworICAgIEZpbGUgdGVtcEZpbGUgPSBGaWxlLmNyZWF0ZVRlbXBGaWxlKCIiLCAiIik7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lTWV0aG9kL0lubGluZUFsbEluUHJvamVjdEZyb21MaWJyYXJ5LmphdmEuYWZ0ZXIgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lTWV0aG9kL0lubGluZUFsbEluUHJvamVjdEZyb21MaWJyYXJ5LmphdmEuYWZ0ZXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGRjODljMQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVNZXRob2QvSW5saW5lQWxsSW5Qcm9qZWN0RnJvbUxpYnJhcnkuamF2YS5hZnRlcgpAQCAtMCwwICsxLDcgQEAKK2ltcG9ydCBteWNvbXBhbnkuRmlsZTsKKworY2xhc3MgVGVzdCB7CisgIHZvaWQgZm9vKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICBGaWxlIHRlbXBGaWxlID0gbXljb21wYW55LkZpbGUuY3JlYXRlVGVtcEZpbGUoIiIsICIiLCBudWxsKTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVNZXRob2QvSW5saW5lQW5vbnltb3VzQ2xhc3NXaXRoUHJpdmF0ZU1ldGhvZEluc2lkZS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZU1ldGhvZC9JbmxpbmVBbm9ueW1vdXNDbGFzc1dpdGhQcml2YXRlTWV0aG9kSW5zaWRlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWM0Yjg0YgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVNZXRob2QvSW5saW5lQW5vbnltb3VzQ2xhc3NXaXRoUHJpdmF0ZU1ldGhvZEluc2lkZS5qYXZhCkBAIC0wLDAgKzEsMjQgQEAKK3B1YmxpYyBjbGFzcyBGb28geworICBwdWJsaWMgc3RhdGljIHZvaWQgZjxjYXJldD5vbygpIHsKKyAgICBiYXIobmV3IFJ1bm5hYmxlKCkgeworICAgICAgQE92ZXJyaWRlCisgICAgICBwdWJsaWMgdm9pZCBydW4oKSB7CisgICAgICAgIGRvUnVuKCk7CisgICAgICB9CisKKyAgICAgIHByaXZhdGUgdm9pZCBkb1J1bigpIHsKKyAgICAgICAgLy8gV29vLWhvbworICAgICAgfQorICAgIH0pOworICB9CisKKyAgcHVibGljIHN0YXRpYyB2b2lkIGJhcihmaW5hbCBSdW5uYWJsZSBydW5uYWJsZSkgeworICAgIHJ1bm5hYmxlLnJ1bigpOworICB9Cit9CisKK2NsYXNzIEJhciB7CisgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKyAgICBGb28uZm9vKCk7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lTWV0aG9kL0lubGluZUFub255bW91c0NsYXNzV2l0aFByaXZhdGVNZXRob2RJbnNpZGUuamF2YS5hZnRlciBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVNZXRob2QvSW5saW5lQW5vbnltb3VzQ2xhc3NXaXRoUHJpdmF0ZU1ldGhvZEluc2lkZS5qYXZhLmFmdGVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYwMzA1NWUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lTWV0aG9kL0lubGluZUFub255bW91c0NsYXNzV2l0aFByaXZhdGVNZXRob2RJbnNpZGUuamF2YS5hZnRlcgpAQCAtMCwwICsxLDIxIEBACitwdWJsaWMgY2xhc3MgRm9vIHsKKworICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBiYXIoZmluYWwgUnVubmFibGUgcnVubmFibGUpIHsKKyAgICBydW5uYWJsZS5ydW4oKTsKKyAgfQorfQorCitjbGFzcyBCYXIgeworICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisgICAgICBGb28uYmFyKG5ldyBSdW5uYWJsZSgpIHsKKyAgICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgICBwdWJsaWMgdm9pZCBydW4oKSB7CisgICAgICAgICAgICAgIGRvUnVuKCk7CisgICAgICAgICAgfQorCisgICAgICAgICAgcHJpdmF0ZSB2b2lkIGRvUnVuKCkgeworICAgICAgICAgICAgICAvLyBXb28taG9vCisgICAgICAgICAgfQorICAgICAgfSk7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lTWV0aG9kL0lubGluZU1ldGhvZFRlc3QudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZU1ldGhvZC9JbmxpbmVNZXRob2RUZXN0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjlkZTI5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZU1ldGhvZC9JbmxpbmVNZXRob2RUZXN0LnR4dApkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZU1ldGhvZC9JbmxpbmVQYXJtcy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZU1ldGhvZC9JbmxpbmVQYXJtcy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE0NmRmN2QKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lTWV0aG9kL0lubGluZVBhcm1zLmphdmEKQEAgLTAsMCArMSwzMCBAQAorcHVibGljIGNsYXNzIFRlc3QgeworICAgIHB1YmxpYyBpbnQgPGNhcmV0PmZvbyhpbnQgcDEsIGludCBwMikgeworICAgICAgICBwMisrOworICAgICAgICByZXR1cm4gc29tZU1ldGhvZChwMSwgcDIpOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIHVzZTEoKSB7CisgICAgICAgIGludCByID0gZm9vKHgsIHkpOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIHVzZTIoKSB7CisgICAgICAgIGludCByID0gZm9vKGZpZWxkMSwgZmllbGQxKTsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCB1c2UzKCkgeworICAgICAgICBpbnQgciA9IGZvbyhmaWVsZDIsIGZpZWxkMik7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgdXNlNCgpIHsKKyAgICAgICAgaW50IHIgPSBmb28oZmllbGQzLCBmaWVsZDMpOworICAgIH0KKworICAgIHsKKyAgICAgICAgZmllbGQyKys7CisgICAgfQorCisgICAgcHJpdmF0ZSBmaW5hbCBpbnQgZmllbGQxOworICAgIHByaXZhdGUgaW50IGZpZWxkMjsKKyAgICBwcml2YXRlIGludCBmaWVsZDM7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZU1ldGhvZC9JbmxpbmVQYXJtcy5qYXZhLmFmdGVyIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZU1ldGhvZC9JbmxpbmVQYXJtcy5qYXZhLmFmdGVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ3ZjcwMjcKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lTWV0aG9kL0lubGluZVBhcm1zLmphdmEuYWZ0ZXIKQEAgLTAsMCArMSwzNCBAQAorcHVibGljIGNsYXNzIFRlc3QgeworCisgICAgcHVibGljIHZvaWQgdXNlMSgpIHsKKyAgICAgICAgaW50IHAyID0geTsKKyAgICAgICAgcDIrKzsKKyAgICAgICAgaW50IHIgPSBzb21lTWV0aG9kKHgsIHAyKTsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCB1c2UyKCkgeworICAgICAgICBpbnQgcDIgPSBmaWVsZDE7CisgICAgICAgIHAyKys7CisgICAgICAgIGludCByID0gc29tZU1ldGhvZChmaWVsZDEsIHAyKTsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCB1c2UzKCkgeworICAgICAgICBpbnQgcDIgPSBmaWVsZDI7CisgICAgICAgIHAyKys7CisgICAgICAgIGludCByID0gc29tZU1ldGhvZChmaWVsZDIsIHAyKTsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCB1c2U0KCkgeworICAgICAgICBpbnQgcDIgPSBmaWVsZDM7CisgICAgICAgIHAyKys7CisgICAgICAgIGludCByID0gc29tZU1ldGhvZChmaWVsZDMsIHAyKTsKKyAgICB9CisKKyAgICB7CisgICAgICAgIGZpZWxkMisrOworICAgIH0KKworICAgIHByaXZhdGUgZmluYWwgaW50IGZpZWxkMTsKKyAgICBwcml2YXRlIGludCBmaWVsZDI7CisgICAgcHJpdmF0ZSBpbnQgZmllbGQzOworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVNZXRob2QvSW5saW5lUnVubmFibGVSdW4uamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVNZXRob2QvSW5saW5lUnVubmFibGVSdW4uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMWU5NmI4Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZU1ldGhvZC9JbmxpbmVSdW5uYWJsZVJ1bi5qYXZhCkBAIC0wLDAgKzEsMjggQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwMC0yMDEyIEpldEJyYWlucyBzLnIuby4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCitjbGFzcyBUZXN0IHsKKyAgcHJpdmF0ZSB2b2lkIGJhcigpIHsKKyAgICAgICAgIC8vVG8gY2hhbmdlIGJvZHkgb2YgY3JlYXRlZCBtZXRob2RzIHVzZSBGaWxlIHwgU2V0dGluZ3MgfCBGaWxlIFRlbXBsYXRlcy4KKyAgICAgfQorIAorICAgICBwdWJsaWMgdm9pZCBmb28oKSB7CisgICAgICAgICBuZXcgUnVubmFibGUoKSB7CisgICAgICAgICAgICAgcHVibGljIHZvaWQgcnVuKCkgeworICAgICAgICAgICAgICAgICBiYXIoKTsKKyAgICAgICAgICAgICB9CisgICAgICAgICB9LnJ1PGNhcmV0Pm4oKTsKKyAgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZU1ldGhvZC9JbmxpbmVSdW5uYWJsZVJ1bi5qYXZhLmFmdGVyIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZU1ldGhvZC9JbmxpbmVSdW5uYWJsZVJ1bi5qYXZhLmFmdGVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIwZmZiMGIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lTWV0aG9kL0lubGluZVJ1bm5hYmxlUnVuLmphdmEuYWZ0ZXIKQEAgLTAsMCArMSwyNCBAQAorLyoKKyAqIENvcHlyaWdodCAyMDAwLTIwMTIgSmV0QnJhaW5zIHMuci5vLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KK2NsYXNzIFRlc3QgeworICBwcml2YXRlIHZvaWQgYmFyKCkgeworICAgICAgICAgLy9UbyBjaGFuZ2UgYm9keSBvZiBjcmVhdGVkIG1ldGhvZHMgdXNlIEZpbGUgfCBTZXR0aW5ncyB8IEZpbGUgVGVtcGxhdGVzLgorICAgICB9CisgCisgICAgIHB1YmxpYyB2b2lkIGZvbygpIHsKKyAgICAgICAgIGJhcigpOworICAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lTWV0aG9kL0lubGluZVdpdGhRdWFsaWZpZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVNZXRob2QvSW5saW5lV2l0aFF1YWxpZmllci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRiOTkyZGMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lTWV0aG9kL0lubGluZVdpdGhRdWFsaWZpZXIuamF2YQpAQCAtMCwwICsxLDMzIEBACitjbGFzcyBFbGVtZW50IHsKKyAgICBTdHJpbmcgaWQ7CisKKyAgICBTdHJpbmcgPGNhcmV0PmdldE5hbWUoKSB7CisgICAgICAgIHJldHVybiBnZXRJRCgpOworICAgIH0KKyAgICBTdHJpbmcgZ2V0SUQoKSB7CisgICAgICAgIHJldHVybiBpZDsKKyAgICB9CisKKyAgICBwdWJsaWMgU3RyaW5nIG1ldGhvZChFbGVtZW50IGVsZW1lbnQpIHsKKyAgICAgICAgcmV0dXJuIGdldE5hbWUoKSArIGVsZW1lbnQuZ2V0TmFtZSgpOworICAgIH0KKworICAgIHB1YmxpYyBTdHJpbmcgc3RhdGljTWV0aG9kKEVsZW1lbnQgZWxlbWVudCkgeworICAgICAgICBTdHJpbmdCdWZmZXIgYnVmZmVyID0gbmV3IFN0cmluZ0J1ZmZlcigpOworICAgICAgICBidWZmZXIuYXBwZW5kKGVsZW1lbnQuZ2V0TmFtZSgpKTsKKyAgICAgICAgcmV0dXJuIGJ1ZmZlci50b1N0cmluZygpOworICAgIH0KKyAgICBzdGF0aWMgRWxlbWVudCB0b1hNTChFbGVtZW50IGVsZW1lbnQpeworICAgICAgICBYIGVsPSBuZXcgWCgiRWwiKQorICAgICAgICBlbC5zZXRBdHRyaWJ1dGUoImF0dHIiLCBlbGVtZW50LmdldE5hbWUoKSk7CisgICAgICAgIHJldHVybiBlbDsKKyAgICB9Cit9CisKK2NsYXNzIFVzYWdlIHsKKyAgICBwdWJsaWMgU3RyaW5nIHN0YXRpY01ldGhvZChFbGVtZW50IGVsZW1lbnQpIHsKKyAgICAgICAgU3RyaW5nQnVmZmVyIGJ1ZmZlciA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKKyAgICAgICAgYnVmZmVyLmFwcGVuZChlbGVtZW50LmdldE5hbWUoKSk7CisgICAgICAgIHJldHVybiBidWZmZXIudG9TdHJpbmcoKTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZU1ldGhvZC9JbmxpbmVXaXRoUXVhbGlmaWVyLmphdmEuYWZ0ZXIgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lTWV0aG9kL0lubGluZVdpdGhRdWFsaWZpZXIuamF2YS5hZnRlcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOWM3NGJkCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZU1ldGhvZC9JbmxpbmVXaXRoUXVhbGlmaWVyLmphdmEuYWZ0ZXIKQEAgLTAsMCArMSwzMCBAQAorY2xhc3MgRWxlbWVudCB7CisgICAgU3RyaW5nIGlkOworCisgICAgU3RyaW5nIGdldElEKCkgeworICAgICAgICByZXR1cm4gaWQ7CisgICAgfQorCisgICAgcHVibGljIFN0cmluZyBtZXRob2QoRWxlbWVudCBlbGVtZW50KSB7CisgICAgICAgIHJldHVybiBnZXRJRCgpICsgZWxlbWVudC5nZXRJRCgpOworICAgIH0KKworICAgIHB1YmxpYyBTdHJpbmcgc3RhdGljTWV0aG9kKEVsZW1lbnQgZWxlbWVudCkgeworICAgICAgICBTdHJpbmdCdWZmZXIgYnVmZmVyID0gbmV3IFN0cmluZ0J1ZmZlcigpOworICAgICAgICBidWZmZXIuYXBwZW5kKGVsZW1lbnQuZ2V0SUQoKSk7CisgICAgICAgIHJldHVybiBidWZmZXIudG9TdHJpbmcoKTsKKyAgICB9CisgICAgc3RhdGljIEVsZW1lbnQgdG9YTUwoRWxlbWVudCBlbGVtZW50KXsKKyAgICAgICAgWCBlbD0gbmV3IFgoIkVsIikKKyAgICAgICAgZWwuc2V0QXR0cmlidXRlKCJhdHRyIiwgZWxlbWVudC5nZXRJRCgpKTsKKyAgICAgICAgcmV0dXJuIGVsOworICAgIH0KK30KKworY2xhc3MgVXNhZ2UgeworICAgIHB1YmxpYyBTdHJpbmcgc3RhdGljTWV0aG9kKEVsZW1lbnQgZWxlbWVudCkgeworICAgICAgICBTdHJpbmdCdWZmZXIgYnVmZmVyID0gbmV3IFN0cmluZ0J1ZmZlcigpOworICAgICAgICBidWZmZXIuYXBwZW5kKGVsZW1lbnQuZ2V0SUQoKSk7CisgICAgICAgIHJldHVybiBidWZmZXIudG9TdHJpbmcoKTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZU1ldGhvZC9JbmxpbmVXaXRoUXVhbGlmaWVyRnJvbVN1cGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lTWV0aG9kL0lubGluZVdpdGhRdWFsaWZpZXJGcm9tU3VwZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZWUyY2QwCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZU1ldGhvZC9JbmxpbmVXaXRoUXVhbGlmaWVyRnJvbVN1cGVyLmphdmEKQEAgLTAsMCArMSwxNyBAQAorY2xhc3MgQmFzZSB7CisgICAgU3RyaW5nIGlkOworICAgIHB1YmxpYyBTdHJpbmcgZ2V0SUQoKSB7CisgICAgICAgIHJldHVybiBpZDsKKyAgICB9Cit9CisKK2NsYXNzIERlcml2ZWQgZXh0ZW5kcyBCYXNlIHsKKyAgICBTdHJpbmcgPGNhcmV0PmdldE5hbWUoKSB7CisgICAgICAgIHJldHVybiBnZXRJRCgpOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgdm9pZCB1c2FnZShEZXJpdmVkIGVsZW1lbnQpIHsKKyAgICAgICAgU3RyaW5nQnVmZmVyIGJ1ZmZlciA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKKyAgICAgICAgYnVmZmVyLmFkZChlbGVtZW50LmdldE5hbWUoKSk7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVNZXRob2QvSW5saW5lV2l0aFF1YWxpZmllckZyb21TdXBlci5qYXZhLmFmdGVyIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZU1ldGhvZC9JbmxpbmVXaXRoUXVhbGlmaWVyRnJvbVN1cGVyLmphdmEuYWZ0ZXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTlhNTU0ZAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVNZXRob2QvSW5saW5lV2l0aFF1YWxpZmllckZyb21TdXBlci5qYXZhLmFmdGVyCkBAIC0wLDAgKzEsMTQgQEAKK2NsYXNzIEJhc2UgeworICAgIFN0cmluZyBpZDsKKyAgICBwdWJsaWMgU3RyaW5nIGdldElEKCkgeworICAgICAgICByZXR1cm4gaWQ7CisgICAgfQorfQorCitjbGFzcyBEZXJpdmVkIGV4dGVuZHMgQmFzZSB7CisKKyAgICBzdGF0aWMgdm9pZCB1c2FnZShEZXJpdmVkIGVsZW1lbnQpIHsKKyAgICAgICAgU3RyaW5nQnVmZmVyIGJ1ZmZlciA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKKyAgICAgICAgYnVmZmVyLmFkZChlbGVtZW50LmdldElEKCkpOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lTWV0aG9kL0lubGluZVdpdGhUcnkuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVNZXRob2QvSW5saW5lV2l0aFRyeS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdlNzUwMDMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lTWV0aG9kL0lubGluZVdpdGhUcnkuamF2YQpAQCAtMCwwICsxLDEyIEBACitjbGFzcyBBIHsKKyAgICB7CisgICAgICAgIGcoKTsKKyAgICB9CisgICAgaW50IDxjYXJldD5nKCkgeworICAgICAgICB0cnkgeworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0gY2F0Y2ggKEVycm9yIGUpIHsKKyAgICAgICAgICAgIHRocm93IGU7CisgICAgICAgIH0KKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lTWV0aG9kL0lubGluZVdpdGhUcnkuamF2YS5hZnRlciBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVNZXRob2QvSW5saW5lV2l0aFRyeS5qYXZhLmFmdGVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRjMjVkMDBlYQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVNZXRob2QvSW5saW5lV2l0aFRyeS5qYXZhLmFmdGVyCkBAIC0wLDAgKzEsMTAgQEAKK2NsYXNzIEEgeworICAgIHsKKyAgICAgICAgaW50IHJlc3VsdDsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIHJlc3VsdCA9IDA7CisgICAgICAgIH0gY2F0Y2ggKEVycm9yIGUpIHsKKyAgICAgICAgICAgIHRocm93IGU7CisgICAgICAgIH0KKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lTWV0aG9kL0xvY2FsVmFyaWFibGVSZXN1bHQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVNZXRob2QvTG9jYWxWYXJpYWJsZVJlc3VsdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNlMWIwNmUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lTWV0aG9kL0xvY2FsVmFyaWFibGVSZXN1bHQuamF2YQpAQCAtMCwwICsxLDE3IEBACitjbGFzcyBBIHsKKworICAgIEludGVnZXIgZihpbnQgaSkgeworICAgICAgICByZXR1cm4gZyhpKTsKKyAgICB9CisKKyAgICBJbnRlZ2VyIDxjYXJldD5nKGludCBpKSB7CisgICAgICAgIGlmIChpID4gMCkgeworICAgICAgICAgICAgcmV0dXJuIG5ldyBJbnRlZ2VyKGkpOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgSW50ZWdlciByZXN1bHQ7CisgICAgICAgICAgICByZXN1bHQgPSBuZXcgSW50ZWdlcigwKTsKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIH0KKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZU1ldGhvZC9Mb2NhbFZhcmlhYmxlUmVzdWx0LmphdmEuYWZ0ZXIgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lTWV0aG9kL0xvY2FsVmFyaWFibGVSZXN1bHQuamF2YS5hZnRlcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMDJiNTI1Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZU1ldGhvZC9Mb2NhbFZhcmlhYmxlUmVzdWx0LmphdmEuYWZ0ZXIKQEAgLTAsMCArMSwxNiBAQAorY2xhc3MgQSB7CisKKyAgICBJbnRlZ2VyIGYoaW50IGkpIHsKKyAgICAgICAgSW50ZWdlciByZXN1bHQ7CisgICAgICAgIGlmIChpID4gMCkgeworICAgICAgICAgICAgcmVzdWx0ID0gbmV3IEludGVnZXIoaSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBJbnRlZ2VyIHJlc3VsdDsKKyAgICAgICAgICAgIHJlc3VsdCA9IG5ldyBJbnRlZ2VyKDApOworICAgICAgICAgICAgcmVzdWx0ID0gcmVzdWx0OworICAgICAgICB9CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZU1ldGhvZC9NZXRob2RDYWxsSW5PdGhlckFub255bW91c09ySW5uZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVNZXRob2QvTWV0aG9kQ2FsbEluT3RoZXJBbm9ueW1vdXNPcklubmVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTM4YTYyZAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVNZXRob2QvTWV0aG9kQ2FsbEluT3RoZXJBbm9ueW1vdXNPcklubmVyLmphdmEKQEAgLTAsMCArMSwyMyBAQAorcHVibGljIGNsYXNzIFBhcmVudCB7CisgIHZvaWQgZXhlY3V0ZSgpe30KKyAgdm9pZCBmb288Y2FyZXQ+ZXhlY3V0ZSgpeworICAgIGV4ZWN1dGUoKTsKKyAgfQorfQorCitjbGFzcyBDaGlsZCBleHRlbmRzIFBhcmVudCB7CisgIHZvaWQgZm9vKCkgeworICAgIGZvb2V4ZWN1dGUoKTsKKyAgICBuZXcgUnVubmFibGUoKSB7CisgICAgICBwdWJsaWMgdm9pZCBydW4oKSB7CisgICAgICAgIGZvb2V4ZWN1dGUoKTsKKyAgICAgIH0KKyAgICB9LnJ1bigpOworICB9CisKKyAgY2xhc3MgSW5uZXJDaGlsZCB7CisgICAgdm9pZCBiYXIoKSB7CisgICAgICBDaGlsZC50aGlzLmZvb2V4ZWN1dGUoKTsKKyAgICB9CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lTWV0aG9kL01ldGhvZENhbGxJbk90aGVyQW5vbnltb3VzT3JJbm5lci5qYXZhLmFmdGVyIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZU1ldGhvZC9NZXRob2RDYWxsSW5PdGhlckFub255bW91c09ySW5uZXIuamF2YS5hZnRlcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNzFhY2ExCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZU1ldGhvZC9NZXRob2RDYWxsSW5PdGhlckFub255bW91c09ySW5uZXIuamF2YS5hZnRlcgpAQCAtMCwwICsxLDIwIEBACitwdWJsaWMgY2xhc3MgUGFyZW50IHsKKyAgdm9pZCBleGVjdXRlKCl7fQorfQorCitjbGFzcyBDaGlsZCBleHRlbmRzIFBhcmVudCB7CisgIHZvaWQgZm9vKCkgeworICAgICAgZXhlY3V0ZSgpOworICAgICAgbmV3IFJ1bm5hYmxlKCkgeworICAgICAgcHVibGljIHZvaWQgcnVuKCkgeworICAgICAgICAgIGV4ZWN1dGUoKTsKKyAgICAgIH0KKyAgICB9LnJ1bigpOworICB9CisKKyAgY2xhc3MgSW5uZXJDaGlsZCB7CisgICAgdm9pZCBiYXIoKSB7CisgICAgICAgIGV4ZWN1dGUoKTsKKyAgICB9CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lTWV0aG9kL01ldGhvZFVzZWRJbkphdmFkb2MuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVNZXRob2QvTWV0aG9kVXNlZEluSmF2YWRvYy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFmMmY3MjgKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lTWV0aG9kL01ldGhvZFVzZWRJbkphdmFkb2MuamF2YQpAQCAtMCwwICsxLDcgQEAKKy8qKgorICoge0BsaW5rIElubGluZU1ldGhvZFRlc3QjZm9vfQorICovCitjbGFzcyBJbmxpbmVNZXRob2RUZXN0IHsKKyAgICBwdWJsaWMgdm9pZCBmPGNhcmV0Pm9vKCl7fQorICAKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVNZXRob2QvTmFtZUNsYXNoLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lTWV0aG9kL05hbWVDbGFzaC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdjZjU4YjIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lTWV0aG9kL05hbWVDbGFzaC5qYXZhCkBAIC0wLDAgKzEsMTIgQEAKK3B1YmxpYyBjbGFzcyBGb28KK3sKKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbiggU3RyaW5nW10gYXJncyApCisgICAgeworICAgICAgICBPYmplY3QgdmFsdWUgPSBudWxsOworICAgICAgICBsb2coICJmbG9hdCIsIG5ldyBGbG9hdCggNS41ZiApICk7CisgICAgfQorICAKKyAgICBwcml2YXRlIHN0YXRpYyB2b2lkIDxjYXJldD5sb2coU3RyaW5nIHRpdGxlLCBPYmplY3QgdmFsdWUpIHsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCB0aXRsZSArICI6IiArIHZhbHVlICk7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVNZXRob2QvTmFtZUNsYXNoLmphdmEuYWZ0ZXIgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lTWV0aG9kL05hbWVDbGFzaC5qYXZhLmFmdGVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNhODlhODAKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lTWV0aG9kL05hbWVDbGFzaC5qYXZhLmFmdGVyCkBAIC0wLDAgKzEsOSBAQAorcHVibGljIGNsYXNzIEZvbworeworICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKCBTdHJpbmdbXSBhcmdzICkKKyAgICB7CisgICAgICAgIE9iamVjdCB2YWx1ZSA9IG51bGw7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbiggImZsb2F0IiArICI6IiArIG5ldyBGbG9hdCggNS41ZiApKTsKKyAgICB9CisKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lTWV0aG9kL05lc3RlZENhbGwuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVNZXRob2QvTmVzdGVkQ2FsbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUyZjI1MGYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lTWV0aG9kL05lc3RlZENhbGwuamF2YQpAQCAtMCwwICsxLDggQEAKK2NsYXNzIE5lc3RlZENhbGwgeworICAgIGludCBmb28oaW50IHApIHsgcmV0dXJuIHA7IH0KKyAgICBpbnQgPGNhcmV0PmJhcihpbnQgcCkgeyByZXR1cm4gZm9vKHApOyB9CisKKyAgICB7CisgICAgICAgIGJhcihiYXIoMCkpOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lTWV0aG9kL05lc3RlZENhbGwuamF2YS5hZnRlciBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVNZXRob2QvTmVzdGVkQ2FsbC5qYXZhLmFmdGVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgzZTU2ZjQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lTWV0aG9kL05lc3RlZENhbGwuamF2YS5hZnRlcgpAQCAtMCwwICsxLDcgQEAKK2NsYXNzIE5lc3RlZENhbGwgeworICAgIGludCBmb28oaW50IHApIHsgcmV0dXJuIHA7IH0KKworICAgIHsKKyAgICAgICAgZm9vKGZvbygwKSk7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVNZXRob2QvTm9uQ29kZVVzYWdlLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lTWV0aG9kL05vbkNvZGVVc2FnZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcxMTZiODkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lTWV0aG9kL05vbkNvZGVVc2FnZS5qYXZhCkBAIC0wLDAgKzEsMjYgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwMC0yMDEyIEpldEJyYWlucyBzLnIuby4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKK2NsYXNzIFRlc3QgeworICAgIHByaXZhdGUgaW50IGJhcigpIHsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKDQyKTsKKyAgICB9CisKKyAgICAvL25vbmNvZGUgYmFyIHVzYWdlCisgICAgcHVibGljIHZvaWQgZm9vKCkgeworICAgICAgICBiYTxjYXJldD5yKCk7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVNZXRob2QvTm9uQ29kZVVzYWdlLmphdmEuYWZ0ZXIgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lTWV0aG9kL05vbkNvZGVVc2FnZS5qYXZhLmFmdGVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNiYjk3YTIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lTWV0aG9kL05vbkNvZGVVc2FnZS5qYXZhLmFmdGVyCkBAIC0wLDAgKzEsMjMgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwMC0yMDEyIEpldEJyYWlucyBzLnIuby4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKK2NsYXNzIFRlc3QgeworCisgICAgLy9ub25jb2RlIGJhciB1c2FnZQorICAgIHB1YmxpYyB2b2lkIGZvbygpIHsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKDQyKTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZU1ldGhvZC9Ob3RBU3RhdGVtZW50LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lTWV0aG9kL05vdEFTdGF0ZW1lbnQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mODg3MWJjZAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVNZXRob2QvTm90QVN0YXRlbWVudC5qYXZhCkBAIC0wLDAgKzEsMjYgQEAKK2NsYXNzIEFBQSB7CisgIHZvaWQgZmZmKFByb2plY3QgbXlQcm9qZWN0KSB7CisgICAgZW5zdXJlRmlsZXNXcml0YWJsZShteVByb2plY3QsIG5ldyBTdHJpbmdbMV0pOworICB9CisKKyAgcHJpdmF0ZSBib29sZWFuIGVuc3U8Y2FyZXQ+cmVGaWxlc1dyaXRhYmxlKGZpbmFsIFByb2plY3QgcHJvamVjdCwgZmluYWwgU3RyaW5nLi4uIHN0cmluZ3MpIHsKKyAgICByZXR1cm4gIWVuc3VyZUZpbGVzV3JpdGFibGUoc3RyaW5ncykuaGFzUmVhZG9ubHlGaWxlcygpOworICB9CisKKyAgcHJpdmF0ZSBTdGF0dXMgZW5zdXJlRmlsZXNXcml0YWJsZShmaW5hbCBTdHJpbmdbXSBzdHJpbmdzKSB7CisgICAgcmV0dXJuIG5ldyBTdGF0dXMoc3RyaW5ncyk7CisgIH0KKworICBjbGFzcyBTdGF0dXMgeworICAgIHB1YmxpYyBTdGF0dXMoZmluYWwgU3RyaW5nW10gc3RyaW5ncykgeworICAgICAgLy9UbyBjaGFuZ2UgYm9keSBvZiBjcmVhdGVkIG1ldGhvZHMgdXNlIEZpbGUgfCBTZXR0aW5ncyB8IEZpbGUgVGVtcGxhdGVzLgorICAgIH0KKworICAgIGJvb2xlYW4gaGFzUmVhZG9ubHlGaWxlcygpIHsKKyAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgfQorCisgIGNsYXNzIFByb2plY3QgeworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZU1ldGhvZC9PbmVMaW5lTGFtYmRhVmFsdWVDb21wYXRpYmxlT25lTGluZS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZU1ldGhvZC9PbmVMaW5lTGFtYmRhVmFsdWVDb21wYXRpYmxlT25lTGluZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRlNDMxODYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lTWV0aG9kL09uZUxpbmVMYW1iZGFWYWx1ZUNvbXBhdGlibGVPbmVMaW5lLmphdmEKQEAgLTAsMCArMSwyNiBAQAorLyoKKyAqIENvcHlyaWdodCAyMDAwLTIwMTIgSmV0QnJhaW5zIHMuci5vLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KK2ltcG9ydCBqYXZhLmxhbmcuQ29tcGFyYWJsZTsKKworY2xhc3MgVGVzdCB7CisgICAgIHByaXZhdGUgaW50IGJhcigpIHsKKyAgICAgICByZXR1cm4gNDI7CisgICAgIH0KKyAKKyAgICAgcHVibGljIHZvaWQgZm9vKCkgeworICAgICAgICAgQ29tcGFyYWJsZTxTdHJpbmc+IGMgPSAobykgLT4gYmE8Y2FyZXQ+cigpOworICAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lTWV0aG9kL09uZUxpbmVMYW1iZGFWYWx1ZUNvbXBhdGlibGVPbmVMaW5lLmphdmEuYWZ0ZXIgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lTWV0aG9kL09uZUxpbmVMYW1iZGFWYWx1ZUNvbXBhdGlibGVPbmVMaW5lLmphdmEuYWZ0ZXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTM5ZTk1MAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVNZXRob2QvT25lTGluZUxhbWJkYVZhbHVlQ29tcGF0aWJsZU9uZUxpbmUuamF2YS5hZnRlcgpAQCAtMCwwICsxLDI2IEBACisvKgorICogQ29weXJpZ2h0IDIwMDAtMjAxMiBKZXRCcmFpbnMgcy5yLm8uCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworaW1wb3J0IGphdmEubGFuZy5Db21wYXJhYmxlOworCitjbGFzcyBUZXN0IHsKKyAgICAgcHJpdmF0ZSBpbnQgYmFyKCkgeworICAgICAgIHJldHVybiA0MjsKKyAgICAgfQorIAorICAgICBwdWJsaWMgdm9pZCBmb28oKSB7CisgICAgICAgICBDb21wYXJhYmxlPFN0cmluZz4gYyA9IChvKSAtPiA0MjsKKyAgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZU1ldGhvZC9PbmVMaW5lTGFtYmRhVmFsdWVDb21wYXRpYmxlVG9CbG9jay5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZU1ldGhvZC9PbmVMaW5lTGFtYmRhVmFsdWVDb21wYXRpYmxlVG9CbG9jay5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFiZTlkNzQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lTWV0aG9kL09uZUxpbmVMYW1iZGFWYWx1ZUNvbXBhdGlibGVUb0Jsb2NrLmphdmEKQEAgLTAsMCArMSwyNyBAQAoraW1wb3J0IGphdmEubGFuZy5Db21wYXJhYmxlOworCisvKgorICogQ29weXJpZ2h0IDIwMDAtMjAxMiBKZXRCcmFpbnMgcy5yLm8uCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworY2xhc3MgVGVzdCB7CisgICAgIHByaXZhdGUgaW50IGJhcigpIHsKKyAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIiIpOworICAgICAgIHJldHVybiA0MjsKKyAgICAgfQorIAorICAgICBwdWJsaWMgdm9pZCBmb28oKSB7CisgICAgICAgICBDb21wYXJhYmxlPFN0cmluZz4gYyA9IChvKSAtPiBiYTxjYXJldD5yKCk7CisgICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVNZXRob2QvT25lTGluZUxhbWJkYVZhbHVlQ29tcGF0aWJsZVRvQmxvY2suamF2YS5hZnRlciBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVNZXRob2QvT25lTGluZUxhbWJkYVZhbHVlQ29tcGF0aWJsZVRvQmxvY2suamF2YS5hZnRlcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNDQ5MzJkMgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVNZXRob2QvT25lTGluZUxhbWJkYVZhbHVlQ29tcGF0aWJsZVRvQmxvY2suamF2YS5hZnRlcgpAQCAtMCwwICsxLDMwIEBACitpbXBvcnQgamF2YS5sYW5nLkNvbXBhcmFibGU7CisKKy8qCisgKiBDb3B5cmlnaHQgMjAwMC0yMDEyIEpldEJyYWlucyBzLnIuby4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCitjbGFzcyBUZXN0IHsKKyAgICAgcHJpdmF0ZSBpbnQgYmFyKCkgeworICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiIik7CisgICAgICAgcmV0dXJuIDQyOworICAgICB9CisgCisgICAgIHB1YmxpYyB2b2lkIGZvbygpIHsKKyAgICAgICAgIENvbXBhcmFibGU8U3RyaW5nPiBjID0gKG8pIC0+IHsKKyAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIiIpOworICAgICAgICAgICAgIHJldHVybiA0MjsKKyAgICAgICAgIH07CisgICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVNZXRob2QvT25lTGluZUxhbWJkYVZvaWRDb21wYXRpYmxlT25lTGluZS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZU1ldGhvZC9PbmVMaW5lTGFtYmRhVm9pZENvbXBhdGlibGVPbmVMaW5lLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTE5OTYzNwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVNZXRob2QvT25lTGluZUxhbWJkYVZvaWRDb21wYXRpYmxlT25lTGluZS5qYXZhCkBAIC0wLDAgKzEsMjQgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwMC0yMDEyIEpldEJyYWlucyBzLnIuby4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCitjbGFzcyBUZXN0IHsKKyAgICAgcHJpdmF0ZSB2b2lkIGJhcigpIHsKKyAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIiIpOworICAgICB9CisgCisgICAgIHB1YmxpYyB2b2lkIGZvbygpIHsKKyAgICAgICAgIFJ1bm5hYmxlIHIgPSAoKSAtPiBiYTxjYXJldD5yKCk7CisgICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVNZXRob2QvT25lTGluZUxhbWJkYVZvaWRDb21wYXRpYmxlT25lTGluZS5qYXZhLmFmdGVyIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZU1ldGhvZC9PbmVMaW5lTGFtYmRhVm9pZENvbXBhdGlibGVPbmVMaW5lLmphdmEuYWZ0ZXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzY5Y2IyMAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVNZXRob2QvT25lTGluZUxhbWJkYVZvaWRDb21wYXRpYmxlT25lTGluZS5qYXZhLmFmdGVyCkBAIC0wLDAgKzEsMjQgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwMC0yMDEyIEpldEJyYWlucyBzLnIuby4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCitjbGFzcyBUZXN0IHsKKyAgICAgcHJpdmF0ZSB2b2lkIGJhcigpIHsKKyAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIiIpOworICAgICB9CisgCisgICAgIHB1YmxpYyB2b2lkIGZvbygpIHsKKyAgICAgICAgIFJ1bm5hYmxlIHIgPSAoKSAtPiBTeXN0ZW0ub3V0LnByaW50bG4oIiIpOworICAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lTWV0aG9kL09uZUxpbmVMYW1iZGFWb2lkQ29tcGF0aWJsZVRvQmxvY2suamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVNZXRob2QvT25lTGluZUxhbWJkYVZvaWRDb21wYXRpYmxlVG9CbG9jay5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA1OWNlMzMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lTWV0aG9kL09uZUxpbmVMYW1iZGFWb2lkQ29tcGF0aWJsZVRvQmxvY2suamF2YQpAQCAtMCwwICsxLDI1IEBACisvKgorICogQ29weXJpZ2h0IDIwMDAtMjAxMiBKZXRCcmFpbnMgcy5yLm8uCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworY2xhc3MgVGVzdCB7CisgICAgIHByaXZhdGUgdm9pZCBiYXIoKSB7CisgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIiKTsKKyAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIiIpOworICAgICB9CisgCisgICAgIHB1YmxpYyB2b2lkIGZvbygpIHsKKyAgICAgICAgIFJ1bm5hYmxlIHIgPSAoKSAtPiBiYTxjYXJldD5yKCk7CisgICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVNZXRob2QvT25lTGluZUxhbWJkYVZvaWRDb21wYXRpYmxlVG9CbG9jay5qYXZhLmFmdGVyIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZU1ldGhvZC9PbmVMaW5lTGFtYmRhVm9pZENvbXBhdGlibGVUb0Jsb2NrLmphdmEuYWZ0ZXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzgyNzEyMAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVNZXRob2QvT25lTGluZUxhbWJkYVZvaWRDb21wYXRpYmxlVG9CbG9jay5qYXZhLmFmdGVyCkBAIC0wLDAgKzEsMjggQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwMC0yMDEyIEpldEJyYWlucyBzLnIuby4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCitjbGFzcyBUZXN0IHsKKyAgICAgcHJpdmF0ZSB2b2lkIGJhcigpIHsKKyAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIiIpOworICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiIik7CisgICAgIH0KKyAKKyAgICAgcHVibGljIHZvaWQgZm9vKCkgeworICAgICAgICAgUnVubmFibGUgciA9ICgpIC0+IHsKKyAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIiIpOworICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiIik7CisgICAgICAgICB9OworICAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lTWV0aG9kL1BhcmFtTmFtZUNvbmZsaWN0c1dpdGhMb2NhbFZhci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZU1ldGhvZC9QYXJhbU5hbWVDb25mbGljdHNXaXRoTG9jYWxWYXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZjNhZGJkCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZU1ldGhvZC9QYXJhbU5hbWVDb25mbGljdHNXaXRoTG9jYWxWYXIuamF2YQpAQCAtMCwwICsxLDE0IEBACitwdWJsaWMgY2xhc3MgQUJsIHsKKyAgICB2b2lkIGZvbyhpbnQgZmUpIHsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKGZlKTsKKyAgICB9CisKKyAgICB2b2lkIGJhcihib29sZWFuIGJyKSB7CisgICAgICAgIGludCBmZSA9IDA7CisgICAgICAgIGlmIChicikgeworICAgICAgICAgICAgZm9vKGZlKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGY8Y2FyZXQ+b28oMTEpOworICAgICAgICB9CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZU1ldGhvZC9QYXJhbU5hbWVDb25mbGljdHNXaXRoTG9jYWxWYXIuamF2YS5hZnRlciBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVNZXRob2QvUGFyYW1OYW1lQ29uZmxpY3RzV2l0aExvY2FsVmFyLmphdmEuYWZ0ZXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDA4YmM3NQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVNZXRob2QvUGFyYW1OYW1lQ29uZmxpY3RzV2l0aExvY2FsVmFyLmphdmEuYWZ0ZXIKQEAgLTAsMCArMSwxMSBAQAorcHVibGljIGNsYXNzIEFCbCB7CisKKyAgICB2b2lkIGJhcihib29sZWFuIGJyKSB7CisgICAgICAgIGludCBmZSA9IDA7CisgICAgICAgIGlmIChicikgeworICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKGZlKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigxMSk7CisgICAgICAgIH0KKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lTWV0aG9kL1Jhd1N1YnN0aXR1dGlvbi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZU1ldGhvZC9SYXdTdWJzdGl0dXRpb24uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZTdmMDJiCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZU1ldGhvZC9SYXdTdWJzdGl0dXRpb24uamF2YQpAQCAtMCwwICsxLDE2IEBACitwdWJsaWMgY2xhc3MgTm90UmF3PFQ+IHsKKyAgICBUIGc8Y2FyZXQ+ZXQoVCB0KXsKKyAgICAgICAgVCB0dCA9IHQ7CisgICAgICAgIGlmICggdCA9PSBudWxsKSB7CisgICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgfSAgICAgICAgICAgZWxzZQorICAgICAgICByZXR1cm4gbnVsbDsKKyAgICB9CisKK30KKworY2xhc3MgUmF3IGV4dGVuZHMgTm90UmF3IHsKKyAgICB2b2lkIGZvbygpIHsKKyAgICAgICAgT2JqZWN0IG8gPSBnZXQobnVsbCk7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVNZXRob2QvUmF3U3Vic3RpdHV0aW9uLmphdmEuYWZ0ZXIgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lTWV0aG9kL1Jhd1N1YnN0aXR1dGlvbi5qYXZhLmFmdGVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNiZGJjMDAKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lTWV0aG9kL1Jhd1N1YnN0aXR1dGlvbi5qYXZhLmFmdGVyCkBAIC0wLDAgKzEsMTUgQEAKK3B1YmxpYyBjbGFzcyBOb3RSYXc8VD4geworCit9CisKK2NsYXNzIFJhdyBleHRlbmRzIE5vdFJhdyB7CisgICAgdm9pZCBmb28oKSB7CisgICAgICAgIE9iamVjdCByZXN1bHQ7CisgICAgICAgIE9iamVjdCB0dCA9IG51bGw7CisgICAgICAgIGlmICggbnVsbCA9PSBudWxsKSB7CisgICAgICAgICAgICByZXN1bHQgPSBudWxsOworICAgICAgICB9ICAgICAgICAgICBlbHNlCisgICAgICAgICAgICByZXN1bHQgPSBudWxsOworICAgICAgICBPYmplY3QgbyA9IHJlc3VsdDsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZU1ldGhvZC9SZXBsYWNlR2VuZXJpY3NJbnNpZGUuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVNZXRob2QvUmVwbGFjZUdlbmVyaWNzSW5zaWRlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTUxMTIwYwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVNZXRob2QvUmVwbGFjZUdlbmVyaWNzSW5zaWRlLmphdmEKQEAgLTAsMCArMSwxNiBAQAoraW1wb3J0IGphdmEudXRpbC4qOworcHVibGljIGNsYXNzIFN1cGVyPFQ+IHsKKworICB2b2lkIDxjYXJldD5mb28oKSB7CisgICAgTGlzdDxUPiBsID0gbmV3IEFycmF5TGlzdDxUPigpOworICAgIGZvciAoVCB0IDogbCkgeworICAgICAgU3lzdGVtLm91dC5wcmludGxuKHQpOworICAgIH0KKyAgfQorfQorCitjbGFzcyBUZXN0IGV4dGVuZHMgU3VwZXI8U3RyaW5nPnsKKyAgdm9pZCBiYXIoKSB7CisgICAgZm9vKCk7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lTWV0aG9kL1JlcGxhY2VHZW5lcmljc0luc2lkZS5qYXZhLmFmdGVyIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZU1ldGhvZC9SZXBsYWNlR2VuZXJpY3NJbnNpZGUuamF2YS5hZnRlcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNmJiZWI0Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZU1ldGhvZC9SZXBsYWNlR2VuZXJpY3NJbnNpZGUuamF2YS5hZnRlcgpAQCAtMCwwICsxLDEzIEBACitpbXBvcnQgamF2YS51dGlsLio7CitwdWJsaWMgY2xhc3MgU3VwZXI8VD4geworCit9CisKK2NsYXNzIFRlc3QgZXh0ZW5kcyBTdXBlcjxTdHJpbmc+eworICB2b2lkIGJhcigpIHsKKyAgICAgIExpc3Q8U3RyaW5nPiBsID0gbmV3IEFycmF5TGlzdDxTdHJpbmc+KCk7CisgICAgICBmb3IgKFN0cmluZyB0IDogbCkgeworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4odCk7CisgICAgICB9CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lTWV0aG9kL1JlcGxhY2VQYXJhbWV0ZXJXaXRoQXJndW1lbnRGb3JDb25zdHJ1Y3Rvci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZU1ldGhvZC9SZXBsYWNlUGFyYW1ldGVyV2l0aEFyZ3VtZW50Rm9yQ29uc3RydWN0b3IuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOTQ3NDc4Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZU1ldGhvZC9SZXBsYWNlUGFyYW1ldGVyV2l0aEFyZ3VtZW50Rm9yQ29uc3RydWN0b3IuamF2YQpAQCAtMCwwICsxLDEwIEBACitwdWJsaWMgY2xhc3MgQ29uc3RydWN0ZWRDbGFzcyB7CisgICAgcHVibGljIHN0YXRpYyBDb25zdHJ1Y3RlZENsYXNzIFBFQ19PTkUgPSBuZXcgQ29uc3RydWN0ZWRDbGFzcygicGFyYW0iKTsKKworICAgIENvbnN0cnVjdGVkQ2xhc3MoaW50IGZpZWxkKSB7CisgICAgfQorCisgICAgcHVibGljIDxjYXJldD5Db25zdHJ1Y3RlZENsYXNzKFN0cmluZyBrZXl3b3JkKSB7CisJdGhpcyhrZXl3b3JkLmxlbmd0aCgpKTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZU1ldGhvZC9SZXBsYWNlUGFyYW1ldGVyV2l0aEFyZ3VtZW50Rm9yQ29uc3RydWN0b3IuamF2YS5hZnRlciBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVNZXRob2QvUmVwbGFjZVBhcmFtZXRlcldpdGhBcmd1bWVudEZvckNvbnN0cnVjdG9yLmphdmEuYWZ0ZXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzJmYjMzMAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVNZXRob2QvUmVwbGFjZVBhcmFtZXRlcldpdGhBcmd1bWVudEZvckNvbnN0cnVjdG9yLmphdmEuYWZ0ZXIKQEAgLTAsMCArMSw3IEBACitwdWJsaWMgY2xhc3MgQ29uc3RydWN0ZWRDbGFzcyB7CisgICAgcHVibGljIHN0YXRpYyBDb25zdHJ1Y3RlZENsYXNzIFBFQ19PTkUgPSBuZXcgQ29uc3RydWN0ZWRDbGFzcygicGFyYW0iLmxlbmd0aCgpKTsKKworICAgIENvbnN0cnVjdGVkQ2xhc3MoaW50IGZpZWxkKSB7CisgICAgfQorCit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZU1ldGhvZC9TQ1IyMDY1NS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZU1ldGhvZC9TQ1IyMDY1NS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdhN2Q3Yjc5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZU1ldGhvZC9TQ1IyMDY1NS5qYXZhCkBAIC0wLDAgKzEsMTEgQEAKK2NsYXNzIFN1cGVyIHsKKyAgcHVibGljIHZvaWQgbWVzc2FnZTxjYXJldD4oKSB7CisgICAgU3lzdGVtLm91dC5wcmludGxuKHRoaXMpOworICB9Cit9CisKK2NsYXNzIFN1YiBleHRlbmRzIFN1cGVyIHsKKyAgcHVibGljIHZvaWQgbWVzc2FnZSgpIHsKKyAgICBzdXBlci5tZXNzYWdlKCk7ICAgICAgLy8gPC0tIElubGluZSB0aGlzIG1ldGhvZCBjYWxsLgorICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZU1ldGhvZC9TQ1IyMDY1NS5qYXZhLmFmdGVyIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZU1ldGhvZC9TQ1IyMDY1NS5qYXZhLmFmdGVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFkYWJlYWYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lTWV0aG9kL1NDUjIwNjU1LmphdmEuYWZ0ZXIKQEAgLTAsMCArMSw4IEBACitjbGFzcyBTdXBlciB7Cit9CisKK2NsYXNzIFN1YiBleHRlbmRzIFN1cGVyIHsKKyAgcHVibGljIHZvaWQgbWVzc2FnZSgpIHsKKyAgICAgIFN5c3RlbS5vdXQucHJpbnRsbih0aGlzKTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVNZXRob2QvU0NSMjI2NDQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVNZXRob2QvU0NSMjI2NDQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MmRhZGI5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZU1ldGhvZC9TQ1IyMjY0NC5qYXZhCkBAIC0wLDAgKzEsMTcgQEAKK3B1YmxpYyBjbGFzcyBTdXBlckNsYXNzIHsKKyAgICBwdWJsaWMgdm9pZCA8Y2FyZXQ+ZG9Tb21ldGhpbmcoKSB7CisgICAgICAgIFV0aWxDbGFzcy5kb1NvbWV0aGluZyh0aGlzKTsKKyAgICB9Cit9CisKK3B1YmxpYyBjbGFzcyBTdWJDbGFzcyBleHRlbmRzIFN1cGVyQ2xhc3MgeworICAgIHB1YmxpYyB2b2lkIGRvU29tZXRoaW5nRWxzZSgpIHsKKyAgICAgICAgZG9Tb21ldGhpbmcoKTsKKyAgICB9Cit9CisKK3B1YmxpYyBjbGFzcyBVdGlsQ2xhc3MgeworICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBkb1NvbWV0aGluZyhTdXBlckNsYXNzIHN1cGVyQ2xhc3MpIHsKKyAgICAgICAgLy8gLi4uCisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVNZXRob2QvU0NSMjI2NDQuamF2YS5hZnRlciBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVNZXRob2QvU0NSMjI2NDQuamF2YS5hZnRlcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZTkzYmJmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZU1ldGhvZC9TQ1IyMjY0NC5qYXZhLmFmdGVyCkBAIC0wLDAgKzEsMTQgQEAKK3B1YmxpYyBjbGFzcyBTdXBlckNsYXNzIHsKK30KKworcHVibGljIGNsYXNzIFN1YkNsYXNzIGV4dGVuZHMgU3VwZXJDbGFzcyB7CisgICAgcHVibGljIHZvaWQgZG9Tb21ldGhpbmdFbHNlKCkgeworICAgICAgICBVdGlsQ2xhc3MuZG9Tb21ldGhpbmcodGhpcyk7CisgICAgfQorfQorCitwdWJsaWMgY2xhc3MgVXRpbENsYXNzIHsKKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgZG9Tb21ldGhpbmcoU3VwZXJDbGFzcyBzdXBlckNsYXNzKSB7CisgICAgICAgIC8vIC4uLgorICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lTWV0aG9kL1NDUjMxMDkzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lTWV0aG9kL1NDUjMxMDkzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWJlNTFlMwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVNZXRob2QvU0NSMzEwOTMuamF2YQpAQCAtMCwwICsxLDEwIEBACitjbGFzcyBBIHsKKyAgICBwcml2YXRlIHZvaWQgZigpIHt9Cit9CisKK2NsYXNzIEIgeworICAgIHByaXZhdGUgQSBiOworICAgIHB1YmxpYyB2b2lkIGcoKSB7CisgICAgICAgIGIuPGNhcmV0PmYoKTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZU1ldGhvZC9TQ1IzMTA5My5qYXZhLmFmdGVyIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZU1ldGhvZC9TQ1IzMTA5My5qYXZhLmFmdGVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI0OWUzMTIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lTWV0aG9kL1NDUjMxMDkzLmphdmEuYWZ0ZXIKQEAgLTAsMCArMSw4IEBACitjbGFzcyBBIHsKK30KKworY2xhc3MgQiB7CisgICAgcHJpdmF0ZSBBIGI7CisgICAgcHVibGljIHZvaWQgZygpIHsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZU1ldGhvZC9TQ1IzNzc0Mi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZU1ldGhvZC9TQ1IzNzc0Mi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdjMTRlZDgKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lTWV0aG9kL1NDUjM3NzQyLmphdmEKQEAgLTAsMCArMSwxMiBAQAoraW1wb3J0IGphdmEudXRpbC5MaXN0OworaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CisKK2NsYXNzIFRlc3QgeworICAgIDxUPiB2b2lkIGZvbyhUIHQpIHsKKyAgICAgICAgTGlzdDw/IGV4dGVuZHMgVD4gbCA9IG5ldyBBcnJheUxpc3Q8VD4oKTsKKyAgICB9CisKKyAgICB2b2lkIGJhciAoKSB7CisgICAgICAgIDxjYXJldD5mb28obmV3IFN0cmluZygpKTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lTWV0aG9kL1NDUjM3NzQyLmphdmEuYWZ0ZXIgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lTWV0aG9kL1NDUjM3NzQyLmphdmEuYWZ0ZXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWQ0OTJhMwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVNZXRob2QvU0NSMzc3NDIuamF2YS5hZnRlcgpAQCAtMCwwICsxLDkgQEAKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworCitjbGFzcyBUZXN0IHsKKworICAgIHZvaWQgYmFyICgpIHsKKyAgICAgICAgTGlzdDw/IGV4dGVuZHMgU3RyaW5nPiBsID0gbmV3IEFycmF5TGlzdDxTdHJpbmc+KCk7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZU1ldGhvZC9TY3IxMDg4NC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZU1ldGhvZC9TY3IxMDg4NC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNjNTkzY2YKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lTWV0aG9kL1NjcjEwODg0LmphdmEKQEAgLTAsMCArMSwxNiBAQAorcHVibGljIGNsYXNzIFNjcjEwODg0IHsKKyBpbnQgZm9vKCkgeworICAgICAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICB9CisgICAgICAgIFkgYmFyKCkgeworICAgICAgICAgICAgcmV0dXJuIG5ldyBZKDxjYXJldD5mb28oKSkgeworCSAgICB9OworICAgICAgICB9Cit9CisKK2NsYXNzIFkgeworICAgICAgICBZKGludCB4KSB7fQorICAgICAgICBpbnQgZm9vKCkgeworICAgICAgICAgICAgICAgIHJldHVybiAyOworICAgICAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZU1ldGhvZC9TY3IxMDg4NC5qYXZhLmFmdGVyIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZU1ldGhvZC9TY3IxMDg4NC5qYXZhLmFmdGVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNkZDViMDkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lTWV0aG9kL1NjcjEwODg0LmphdmEuYWZ0ZXIKQEAgLTAsMCArMSwxMyBAQAorcHVibGljIGNsYXNzIFNjcjEwODg0IHsKKyAgICBZIGJhcigpIHsKKyAgICAgICAgcmV0dXJuIG5ldyBZKDEpIHsKKwkgICAgfTsKKyAgICAgICAgfQorfQorCitjbGFzcyBZIHsKKyAgICAgICAgWShpbnQgeCkge30KKyAgICAgICAgaW50IGZvbygpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gMjsKKyAgICAgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVNZXRob2QvU2NyMTM4MzEuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVNZXRob2QvU2NyMTM4MzEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NDkxNzEwCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZU1ldGhvZC9TY3IxMzgzMS5qYXZhCkBAIC0wLDAgKzEsMTIgQEAKK3B1YmxpYyBjbGFzcyBGb28KK3sKKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbiggU3RyaW5nW10gYXJncyApCisgICAgeworICAgICAgICBsb2coICJpbnRlZ2VyIiwgbmV3IEludGVnZXIoIDUgKSApOworICAgICAgICBsb2coICJmbG9hdCIsIG5ldyBGbG9hdCggNS41ZiApICk7CisgICAgfQorICAKKyAgICBwcml2YXRlIHN0YXRpYyB2b2lkIDxjYXJldD5sb2coU3RyaW5nIHRpdGxlLCBPYmplY3QgdmFsdWUpIHsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCB0aXRsZSArICI6IiArIHZhbHVlICk7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVNZXRob2QvU2NyMTM4MzEuamF2YS5hZnRlciBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVNZXRob2QvU2NyMTM4MzEuamF2YS5hZnRlcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNTNmNzFlCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZU1ldGhvZC9TY3IxMzgzMS5qYXZhLmFmdGVyCkBAIC0wLDAgKzEsOSBAQAorcHVibGljIGNsYXNzIEZvbworeworICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKCBTdHJpbmdbXSBhcmdzICkKKyAgICB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbiggImludGVnZXIiICsgIjoiICsgbmV3IEludGVnZXIoIDUgKSk7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbiggImZsb2F0IiArICI6IiArIG5ldyBGbG9hdCggNS41ZiApKTsKKyAgICB9CisKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lTWV0aG9kL1NpZGVFZmZlY3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVNZXRob2QvU2lkZUVmZmVjdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBhYzMzZTUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lTWV0aG9kL1NpZGVFZmZlY3QuamF2YQpAQCAtMCwwICsxLDExIEBACitjbGFzcyBUZXN0IHsKKyAgICBwcml2YXRlIFN0cmluZyBzOworICAgIFN0cmluZyA8Y2FyZXQ+bWV0aG9kKCkgeworICAgICAgICBzID0gIkhlbGxvIjsKKyAgICAgICAgcmV0dXJuIHM7CisgICAgfQorICAgIHZvaWQgdGVzdCgpIHsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKG1ldGhvZCgpKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKHMpOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lTWV0aG9kL1NpZGVFZmZlY3QuamF2YS5hZnRlciBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVNZXRob2QvU2lkZUVmZmVjdC5qYXZhLmFmdGVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFjYTMyYmIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lTWV0aG9kL1NpZGVFZmZlY3QuamF2YS5hZnRlcgpAQCAtMCwwICsxLDkgQEAKK2NsYXNzIFRlc3QgeworICAgIHByaXZhdGUgU3RyaW5nIHM7CisKKyAgICB2b2lkIHRlc3QoKSB7CisgICAgICAgIHMgPSAiSGVsbG8iOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4ocyk7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihzKTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZU1ldGhvZC9TdGF0aWNGaWVsZEluaXRpYWxpemVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lTWV0aG9kL1N0YXRpY0ZpZWxkSW5pdGlhbGl6ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MDA1NDFjCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZU1ldGhvZC9TdGF0aWNGaWVsZEluaXRpYWxpemVyLmphdmEKQEAgLTAsMCArMSw4IEBACitjbGFzcyBBeworICAgIHN0YXRpYyBpbnQgZmllbGQgPSBmb28oKTsKKworICAgIHN0YXRpYyBpbnQgPGNhcmV0PmZvbygpeworICAgICAgICBkb1NvbWV0aGluZygpOworICAgICAgICByZXR1cm4gMTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lTWV0aG9kL1N0YXRpY0ZpZWxkSW5pdGlhbGl6ZXIuamF2YS5hZnRlciBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVNZXRob2QvU3RhdGljRmllbGRJbml0aWFsaXplci5qYXZhLmFmdGVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJhNGIwZjgKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lTWV0aG9kL1N0YXRpY0ZpZWxkSW5pdGlhbGl6ZXIuamF2YS5hZnRlcgpAQCAtMCwwICsxLDkgQEAKK2NsYXNzIEF7CisgICAgc3RhdGljIGludCBmaWVsZDsKKworICAgIHN0YXRpYyB7CisgICAgICAgIGRvU29tZXRoaW5nKCk7CisgICAgICAgIGZpZWxkID0gMTsKKyAgICB9CisKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVNZXRob2QvU3RhdGljTWV0aG9kV2l0aG91dFBhcmFtcy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZU1ldGhvZC9TdGF0aWNNZXRob2RXaXRob3V0UGFyYW1zLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGI0YWQwZQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVNZXRob2QvU3RhdGljTWV0aG9kV2l0aG91dFBhcmFtcy5qYXZhCkBAIC0wLDAgKzEsNiBAQAorY2xhc3MgQXsKKyAgc3RhdGljIHZvaWQgPGNhcmV0PmZvbygpe30KKyAgc3RhdGljIHZvaWQgYmFyKCl7CisgICAgZm9vKDY2Nik7CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVNZXRob2QvU3RhdGljTWV0aG9kV2l0aG91dFBhcmFtcy5qYXZhLmFmdGVyIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZU1ldGhvZC9TdGF0aWNNZXRob2RXaXRob3V0UGFyYW1zLmphdmEuYWZ0ZXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTI3MzMwNwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVNZXRob2QvU3RhdGljTWV0aG9kV2l0aG91dFBhcmFtcy5qYXZhLmFmdGVyCkBAIC0wLDAgKzEsNCBAQAorY2xhc3MgQXsKKyAgICBzdGF0aWMgdm9pZCBiYXIoKXsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lTWV0aG9kL1N0YXRpY1N5bmNocm9uaXplZC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZU1ldGhvZC9TdGF0aWNTeW5jaHJvbml6ZWQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYjQ3NzI0Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZU1ldGhvZC9TdGF0aWNTeW5jaHJvbml6ZWQuamF2YQpAQCAtMCwwICsxLDE3IEBACitwdWJsaWMgY2xhc3MgVGVzdEludGVsbGlKCit7CisKKyAgICBwdWJsaWMgc3luY2hyb25pemVkIHZvaWQgZm9vKCkgeworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImZvbyIpOworICAgIH0KKworICAgIHB1YmxpYyBzdGF0aWMgc3luY2hyb25pemVkIHZvaWQgZm9vPGNhcmV0PlN0YXRpYygpIHsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJmb29TdGF0aWMiKTsKKyAgICB9CisKKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisgICAgICAgIFRlc3RJbnRlbGxpSiB0ZXN0ID0gbmV3IFRlc3RJbnRlbGxpSigpOworICAgICAgICB0ZXN0LmZvbygpOworICAgICAgICBUZXN0SW50ZWxsaUouZm9vU3RhdGljKCk7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVNZXRob2QvU3RhdGljU3luY2hyb25pemVkLmphdmEuYWZ0ZXIgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lTWV0aG9kL1N0YXRpY1N5bmNocm9uaXplZC5qYXZhLmFmdGVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRiYTAwMjcKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lTWV0aG9kL1N0YXRpY1N5bmNocm9uaXplZC5qYXZhLmFmdGVyCkBAIC0wLDAgKzEsMTUgQEAKK3B1YmxpYyBjbGFzcyBUZXN0SW50ZWxsaUoKK3sKKworICAgIHB1YmxpYyBzeW5jaHJvbml6ZWQgdm9pZCBmb28oKSB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiZm9vIik7CisgICAgfQorCisgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworICAgICAgICBUZXN0SW50ZWxsaUogdGVzdCA9IG5ldyBUZXN0SW50ZWxsaUooKTsKKyAgICAgICAgdGVzdC5mb28oKTsKKyAgICAgICAgc3luY2hyb25pemVkIChUZXN0SW50ZWxsaUouY2xhc3MpIHsKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiZm9vU3RhdGljIik7CisgICAgICAgIH0KKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZU1ldGhvZC9TdWJzdGl0dXRpb24uamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVNZXRob2QvU3Vic3RpdHV0aW9uLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDQ5MDY4NAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVNZXRob2QvU3Vic3RpdHV0aW9uLmphdmEKQEAgLTAsMCArMSw0NyBAQAorY2xhc3MgRm9vIHsKKyAgcHVibGljIHN0YXRpYyA8VCwgTG9jPiBXZWlnaGluZ0NvbXBhcmFibGU8VCwgTG9jPiB3ZTxjYXJldD5pZ2goZmluYWwgS2V5PD8gZXh0ZW5kcyBXZWlnaGVyPFQsIExvYz4+IGtleSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaW5hbCBDb21wdXRhYmxlPFQ+IGVsZW1lbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmluYWwgTG9jIGxvY2F0aW9uKSB7CisgICAgcmV0dXJuIG5ldyBXZWlnaGluZ0NvbXBhcmFibGU8VCwgTG9jPihlbGVtZW50LCBsb2NhdGlvbiwgbmV3IFdlaWdoZXJbMF0pOworICB9CisKKworICBwdWJsaWMgV2VpZ2hpbmdDb21wYXJhYmxlPFN0cmluZywgUHJveGltaXR5TG9jYXRpb24+IG1ldGhvZChib29sZWFuIGIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsIENvbXB1dGFibGU8U3RyaW5nPiBlbGVtZW50Q29tcHV0YWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT2JqZWN0IHByb2Nlc3NpbmdDb250ZXh0KSB7CisgICAgcmV0dXJuIHdlaWdoKFdFSUdIRVJfS0VZLCBlbGVtZW50Q29tcHV0YWJsZSwgbmV3IFByb3hpbWl0eUxvY2F0aW9uKCkpOworICB9CisKKyAgcHVibGljIHN0YXRpYyBmaW5hbCBLZXk8UHJveGltaXR5V2VpZ2hlcj4gV0VJR0hFUl9LRVkgPSBudWxsOworfQorCithYnN0cmFjdCBjbGFzcyBQcm94aW1pdHlXZWlnaGVyIGV4dGVuZHMgV2VpZ2hlcjxTdHJpbmcsIFByb3hpbWl0eUxvY2F0aW9uPiB7CisKK30KKworY2xhc3MgUHJveGltaXR5TG9jYXRpb24geworfQorCitjbGFzcyBLZXk8UD4geworfQorCitjbGFzcyBXZWlnaGVyPEEsIEI+IHsKK30KKworY2xhc3MgQ29tcHV0YWJsZTxPPiB7fQorCitjbGFzcyBXZWlnaGluZ0NvbXBhcmFibGU8VCwgTG9jPiBpbXBsZW1lbnRzIENvbXBhcmFibGU8V2VpZ2hpbmdDb21wYXJhYmxlPFQsIExvYz4+IHsKKworICBwdWJsaWMgV2VpZ2hpbmdDb21wYXJhYmxlKGZpbmFsIENvbXB1dGFibGU8VD4gZWxlbWVudCwgZmluYWwgTG9jIGxvY2F0aW9uLCBmaW5hbCBXZWlnaGVyW10gd2VpZ2hlcnMpIHsKKyAgICAvL1RvIGNoYW5nZSBib2R5IG9mIGNyZWF0ZWQgbWV0aG9kcyB1c2UgRmlsZSB8IFNldHRpbmdzIHwgRmlsZSBUZW1wbGF0ZXMuCisgIH0KKworICBwdWJsaWMgaW50IGNvbXBhcmVUbyhATm90TnVsbCBmaW5hbCBXZWlnaGluZ0NvbXBhcmFibGU8VCwgTG9jPiBjb21wYXJhYmxlKSB7CisgICAgcmV0dXJuIDA7CisgIH0KKworICBATnVsbGFibGUKKyAgcHJpdmF0ZSBDb21wYXJhYmxlIGdldFdlaWdodChmaW5hbCBpbnQgaW5kZXgpIHsKKyAgICByZXR1cm4gbnVsbDsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZU1ldGhvZC9TdWJzdGl0dXRpb24uamF2YS5hZnRlciBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVNZXRob2QvU3Vic3RpdHV0aW9uLmphdmEuYWZ0ZXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmQ2M2JkYwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVNZXRob2QvU3Vic3RpdHV0aW9uLmphdmEuYWZ0ZXIKQEAgLTAsMCArMSw0MiBAQAorY2xhc3MgRm9vIHsKKworCisgICAgcHVibGljIFdlaWdoaW5nQ29tcGFyYWJsZTxTdHJpbmcsIFByb3hpbWl0eUxvY2F0aW9uPiBtZXRob2QoYm9vbGVhbiBiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaW5hbCBDb21wdXRhYmxlPFN0cmluZz4gZWxlbWVudENvbXB1dGFibGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9iamVjdCBwcm9jZXNzaW5nQ29udGV4dCkgeworICAgICAgICByZXR1cm4gbmV3IFdlaWdoaW5nQ29tcGFyYWJsZTxTdHJpbmcsIFByb3hpbWl0eUxvY2F0aW9uPihlbGVtZW50Q29tcHV0YWJsZSwgbmV3IFByb3hpbWl0eUxvY2F0aW9uKCksIG5ldyBXZWlnaGVyWzBdKTsKKyAgICB9CisKKyAgcHVibGljIHN0YXRpYyBmaW5hbCBLZXk8UHJveGltaXR5V2VpZ2hlcj4gV0VJR0hFUl9LRVkgPSBudWxsOworfQorCithYnN0cmFjdCBjbGFzcyBQcm94aW1pdHlXZWlnaGVyIGV4dGVuZHMgV2VpZ2hlcjxTdHJpbmcsIFByb3hpbWl0eUxvY2F0aW9uPiB7CisKK30KKworY2xhc3MgUHJveGltaXR5TG9jYXRpb24geworfQorCitjbGFzcyBLZXk8UD4geworfQorCitjbGFzcyBXZWlnaGVyPEEsIEI+IHsKK30KKworY2xhc3MgQ29tcHV0YWJsZTxPPiB7fQorCitjbGFzcyBXZWlnaGluZ0NvbXBhcmFibGU8VCwgTG9jPiBpbXBsZW1lbnRzIENvbXBhcmFibGU8V2VpZ2hpbmdDb21wYXJhYmxlPFQsIExvYz4+IHsKKworICBwdWJsaWMgV2VpZ2hpbmdDb21wYXJhYmxlKGZpbmFsIENvbXB1dGFibGU8VD4gZWxlbWVudCwgZmluYWwgTG9jIGxvY2F0aW9uLCBmaW5hbCBXZWlnaGVyW10gd2VpZ2hlcnMpIHsKKyAgICAvL1RvIGNoYW5nZSBib2R5IG9mIGNyZWF0ZWQgbWV0aG9kcyB1c2UgRmlsZSB8IFNldHRpbmdzIHwgRmlsZSBUZW1wbGF0ZXMuCisgIH0KKworICBwdWJsaWMgaW50IGNvbXBhcmVUbyhATm90TnVsbCBmaW5hbCBXZWlnaGluZ0NvbXBhcmFibGU8VCwgTG9jPiBjb21wYXJhYmxlKSB7CisgICAgcmV0dXJuIDA7CisgIH0KKworICBATnVsbGFibGUKKyAgcHJpdmF0ZSBDb21wYXJhYmxlIGdldFdlaWdodChmaW5hbCBpbnQgaW5kZXgpIHsKKyAgICByZXR1cm4gbnVsbDsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZU1ldGhvZC9TdXBlckluc2lkZUhpZXJhcmNoeS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZU1ldGhvZC9TdXBlckluc2lkZUhpZXJhcmNoeS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVmYjYwMDMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lTWV0aG9kL1N1cGVySW5zaWRlSGllcmFyY2h5LmphdmEKQEAgLTAsMCArMSwxOSBAQAorY2xhc3MgQSB7CisgIHZvaWQgZm9vKCl7CisgICAgLy9kbyBzbXRoIGluIEEKKyAgfQorfQorCitjbGFzcyBCIHsKKyAgdm9pZCA8Y2FyZXQ+YmFyKCkgeworICAgIHN1cGVyLmZvbygpOworICB9CisKKyAgdm9pZCB0ZXN0KCl7CisgICAgYmFyKCk7CisgIH0KKworICB2b2lkIGZvbygpIHsKKyAgICAvL2RvIHNtdGgKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVNZXRob2QvU3VwZXJJbnNpZGVIaWVyYXJjaHkuamF2YS5hZnRlciBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVNZXRob2QvU3VwZXJJbnNpZGVIaWVyYXJjaHkuamF2YS5hZnRlcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43M2M2YzlhNAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVNZXRob2QvU3VwZXJJbnNpZGVIaWVyYXJjaHkuamF2YS5hZnRlcgpAQCAtMCwwICsxLDE2IEBACitjbGFzcyBBIHsKKyAgdm9pZCBmb28oKXsKKyAgICAvL2RvIHNtdGggaW4gQQorICB9Cit9CisKK2NsYXNzIEIgeworCisgICAgdm9pZCB0ZXN0KCl7CisgICAgICAgIHN1cGVyLmZvbygpOworICAgIH0KKworICB2b2lkIGZvbygpIHsKKyAgICAvL2RvIHNtdGgKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVNZXRob2QvU3VwZXJNZXRob2RJbkFub255bW91c0NsYXNzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lTWV0aG9kL1N1cGVyTWV0aG9kSW5Bbm9ueW1vdXNDbGFzcy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE1MjNiYWYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lTWV0aG9kL1N1cGVyTWV0aG9kSW5Bbm9ueW1vdXNDbGFzcy5qYXZhCkBAIC0wLDAgKzEsMjMgQEAKK2NsYXNzIEEgeworICAgIHB1YmxpYyB2b2lkIGYoKSB7CisgICAgICBnKCk7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgZygpIHsKKyAgICB9CisgIH0KKworICBjbGFzcyBCIGV4dGVuZHMgQSB7CisgICAgcHVibGljIHZvaWQgZygpIHsKKworICAgIH0KKyAgICBwdWJsaWMgdm9pZCBoKCkgeworICAgICAgbmV3IFJ1bm5hYmxlKCkgeworCisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgdm9pZCBydW4oKSB7CisgICAgICAgICAgZjxjYXJldD4oKTsKKyAgICAgICAgfQorICAgICAgfS5ydW4oKTsKKyAgICB9CisgIH0KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVNZXRob2QvU3VwZXJNZXRob2RJbkFub255bW91c0NsYXNzLmphdmEuYWZ0ZXIgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lTWV0aG9kL1N1cGVyTWV0aG9kSW5Bbm9ueW1vdXNDbGFzcy5qYXZhLmFmdGVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFhNDJiYWYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lTWV0aG9kL1N1cGVyTWV0aG9kSW5Bbm9ueW1vdXNDbGFzcy5qYXZhLmFmdGVyCkBAIC0wLDAgKzEsMjAgQEAKK2NsYXNzIEEgeworCisgICAgcHVibGljIHZvaWQgZygpIHsKKyAgICB9CisgIH0KKworICBjbGFzcyBCIGV4dGVuZHMgQSB7CisgICAgcHVibGljIHZvaWQgZygpIHsKKworICAgIH0KKyAgICBwdWJsaWMgdm9pZCBoKCkgeworICAgICAgbmV3IFJ1bm5hYmxlKCkgeworCisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgdm9pZCBydW4oKSB7CisgICAgICAgICAgICBnKCk7CisgICAgICAgIH0KKyAgICAgIH0ucnVuKCk7CisgICAgfQorICB9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lTWV0aG9kL1RhaWxDYWxsUmV0dXJuLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lTWV0aG9kL1RhaWxDYWxsUmV0dXJuLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTRkNGM0NgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVNZXRob2QvVGFpbENhbGxSZXR1cm4uamF2YQpAQCAtMCwwICsxLDEyIEBACitjbGFzcyBBIHsKKyAgICBwcml2YXRlIFN0cmluZyB0b0lubGluZShib29sZWFuIGIpIHsKKyAgICAgICAgaWYgKGIpIHsKKyAgICAgICAgICAgIHJldHVybiAiYiI7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuICJhIjsKKyAgICB9CisKKyAgICBwdWJsaWMgU3RyaW5nIG1ldGhvZChib29sZWFuIGIpIHsKKyAgICAgICAgcmV0dXJuIDxjYXJldD50b0lubGluZShiKTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZU1ldGhvZC9UYWlsQ2FsbFJldHVybi5qYXZhLmFmdGVyIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZU1ldGhvZC9UYWlsQ2FsbFJldHVybi5qYXZhLmFmdGVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYxZGMxZGUwCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZU1ldGhvZC9UYWlsQ2FsbFJldHVybi5qYXZhLmFmdGVyCkBAIC0wLDAgKzEsOSBAQAorY2xhc3MgQSB7CisKKyAgICBwdWJsaWMgU3RyaW5nIG1ldGhvZChib29sZWFuIGIpIHsKKyAgICAgICAgaWYgKGIpIHsKKyAgICAgICAgICAgIHJldHVybiAiYiI7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuICJhIjsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZU1ldGhvZC9UYWlsQ2FsbFNpbXBsZS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZU1ldGhvZC9UYWlsQ2FsbFNpbXBsZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU0ZDRjNDYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lTWV0aG9kL1RhaWxDYWxsU2ltcGxlLmphdmEKQEAgLTAsMCArMSwxMiBAQAorY2xhc3MgQSB7CisgICAgcHJpdmF0ZSBTdHJpbmcgdG9JbmxpbmUoYm9vbGVhbiBiKSB7CisgICAgICAgIGlmIChiKSB7CisgICAgICAgICAgICByZXR1cm4gImIiOworICAgICAgICB9CisgICAgICAgIHJldHVybiAiYSI7CisgICAgfQorCisgICAgcHVibGljIFN0cmluZyBtZXRob2QoYm9vbGVhbiBiKSB7CisgICAgICAgIHJldHVybiA8Y2FyZXQ+dG9JbmxpbmUoYik7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVNZXRob2QvVGFpbENhbGxTaW1wbGUuamF2YS5hZnRlciBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVNZXRob2QvVGFpbENhbGxTaW1wbGUuamF2YS5hZnRlcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MWRjMWRlMAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVNZXRob2QvVGFpbENhbGxTaW1wbGUuamF2YS5hZnRlcgpAQCAtMCwwICsxLDkgQEAKK2NsYXNzIEEgeworCisgICAgcHVibGljIFN0cmluZyBtZXRob2QoYm9vbGVhbiBiKSB7CisgICAgICAgIGlmIChiKSB7CisgICAgICAgICAgICByZXR1cm4gImIiOworICAgICAgICB9CisgICAgICAgIHJldHVybiAiYSI7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVNZXRob2QvVGFpbENvbW1lbnQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVNZXRob2QvVGFpbENvbW1lbnQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNDNlZDJjCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZU1ldGhvZC9UYWlsQ29tbWVudC5qYXZhCkBAIC0wLDAgKzEsMTAgQEAKK2NsYXNzIFRlc3QgeworICBwcml2YXRlIHZvaWQgYigpeworICAgIDxjYXJldD5hKCk7CisgIH0KKworICBwcml2YXRlIHZvaWQgYSgpeworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiYXNkYXNkIik7CisgICAgLy90ZXN0CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lTWV0aG9kL1RhaWxDb21tZW50LmphdmEuYWZ0ZXIgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lTWV0aG9kL1RhaWxDb21tZW50LmphdmEuYWZ0ZXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2Q1ZjNhOQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVNZXRob2QvVGFpbENvbW1lbnQuamF2YS5hZnRlcgpAQCAtMCwwICsxLDcgQEAKK2NsYXNzIFRlc3QgeworICBwcml2YXRlIHZvaWQgYigpeworICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJhc2Rhc2QiKTsKKyAgICAgIC8vdGVzdAorICB9CisKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lTWV0aG9kL1RyeS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZU1ldGhvZC9UcnkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMTYxNzM5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZU1ldGhvZC9UcnkuamF2YQpAQCAtMCwwICsxLDE1IEBACitwdWJsaWMgY2xhc3MgVHJ5IHsKKyAgICBwdWJsaWMgaW50IHRlc3QoKSB7CisgICAgICAgIGludCBpID0gYW5vdGhlcigpOworICAgICAgICByZXR1cm4gaTsKKyAgICB9CisgCisgICAgcHVibGljIGludCBhbm90aGVyPGNhcmV0PigpIHsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIHJldHVybiBJbnRlZ2VyLnBhcnNlSW50KCIxIik7CisgICAgICAgIH0KKyAgICAgICAgY2F0Y2ggKE51bWJlckZvcm1hdEV4Y2VwdGlvbiBleCkgeworICAgICAgICAgICAgdGhyb3cgZXg7CisgICAgICAgIH0KKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lTWV0aG9kL1RyeS5qYXZhLmFmdGVyIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZU1ldGhvZC9UcnkuamF2YS5hZnRlcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOGNkMDhkCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZU1ldGhvZC9UcnkuamF2YS5hZnRlcgpAQCAtMCwwICsxLDE0IEBACitwdWJsaWMgY2xhc3MgVHJ5IHsKKyAgICBwdWJsaWMgaW50IHRlc3QoKSB7CisgICAgICAgIGludCByZXN1bHQ7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICByZXN1bHQgPSBJbnRlZ2VyLnBhcnNlSW50KCIxIik7CisgICAgICAgIH0KKyAgICAgICAgY2F0Y2ggKE51bWJlckZvcm1hdEV4Y2VwdGlvbiBleCkgeworICAgICAgICAgICAgdGhyb3cgZXg7CisgICAgICAgIH0KKyAgICAgICAgaW50IGkgPSByZXN1bHQ7CisgICAgICAgIHJldHVybiBpOworICAgIH0KKworfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZU1ldGhvZC9UcnlTeW5jaHJvbml6ZWQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVNZXRob2QvVHJ5U3luY2hyb25pemVkLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDI2OTFiOAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVNZXRob2QvVHJ5U3luY2hyb25pemVkLmphdmEKQEAgLTAsMCArMSwxNSBAQAorcHVibGljIGNsYXNzIFRyeSB7CisgICAgcHVibGljIGludCB0ZXN0KCkgeworICAgICAgICBpbnQgaSA9IGFub3RoZXIoKTsKKyAgICAgICAgcmV0dXJuIGk7CisgICAgfQorIAorICAgIHB1YmxpYyBzeW5jaHJvbml6ZWQgaW50IGFub3RoZXI8Y2FyZXQ+KCkgeworICAgICAgICB0cnkgeworICAgICAgICAgICAgcmV0dXJuIEludGVnZXIucGFyc2VJbnQoIjEiKTsKKyAgICAgICAgfQorICAgICAgICBjYXRjaCAoTnVtYmVyRm9ybWF0RXhjZXB0aW9uIGV4KSB7CisgICAgICAgICAgICB0aHJvdyBleDsKKyAgICAgICAgfQorICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVNZXRob2QvVHJ5U3luY2hyb25pemVkLmphdmEuYWZ0ZXIgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lTWV0aG9kL1RyeVN5bmNocm9uaXplZC5qYXZhLmFmdGVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU5MzU4YmMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lTWV0aG9kL1RyeVN5bmNocm9uaXplZC5qYXZhLmFmdGVyCkBAIC0wLDAgKzEsMTYgQEAKK3B1YmxpYyBjbGFzcyBUcnkgeworICAgIHB1YmxpYyBpbnQgdGVzdCgpIHsKKyAgICAgICAgaW50IHJlc3VsdDsKKyAgICAgICAgc3luY2hyb25pemVkICh0aGlzKSB7CisgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgIHJlc3VsdCA9IEludGVnZXIucGFyc2VJbnQoIjEiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNhdGNoIChOdW1iZXJGb3JtYXRFeGNlcHRpb24gZXgpIHsKKyAgICAgICAgICAgICAgICB0aHJvdyBleDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpbnQgaSA9IHJlc3VsdDsKKyAgICAgICAgcmV0dXJuIGk7CisgICAgfQorCit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lTWV0aG9kL1ZhcmFyZ3MuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVNZXRob2QvVmFyYXJncy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjZDMxY2UKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lTWV0aG9kL1ZhcmFyZ3MuamF2YQpAQCAtMCwwICsxLDEzIEBACitwdWJsaWMgY2xhc3MgVmFyYXJncyB7CisgICAgcHVibGljIHN0YXRpYyBTdHJpbmcgam9pbihTdHJpbmcgc2VwYXJhdG9yLCBTdHJpbmcuLi4gdGV4dHMpIHsKKyAgICAgICAgcmV0dXJuICIiOworICAgIH0KKworICAgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGpvaW5TdHJpbmdzKFN0cmluZyBzZXBhcmF0b3IsIFN0cmluZy4uLiB0ZXh0cykgeworICAgICAgICByZXR1cm4gam9pbihzZXBhcmF0b3IsIHRleHRzKTsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBmb28oKSB7CisgICAgICAgIFN0cmluZyBzID0gPGNhcmV0PmpvaW5TdHJpbmdzKCIiLCAiaSIsICJkIiwgImUiLCAiYSIpOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lTWV0aG9kL1ZhcmFyZ3MuamF2YS5hZnRlciBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVNZXRob2QvVmFyYXJncy5qYXZhLmFmdGVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYyODY3YWUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lTWV0aG9kL1ZhcmFyZ3MuamF2YS5hZnRlcgpAQCAtMCwwICsxLDkgQEAKK3B1YmxpYyBjbGFzcyBWYXJhcmdzIHsKKyAgICBwdWJsaWMgc3RhdGljIFN0cmluZyBqb2luKFN0cmluZyBzZXBhcmF0b3IsIFN0cmluZy4uLiB0ZXh0cykgeworICAgICAgICByZXR1cm4gIiI7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgZm9vKCkgeworICAgICAgICBTdHJpbmcgcyA9IGpvaW4oIiIsICJpIiwgImQiLCAiZSIsICJhIik7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVNZXRob2QvVmFyYXJnczEuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVNZXRob2QvVmFyYXJnczEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NzZkYmJhCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZU1ldGhvZC9WYXJhcmdzMS5qYXZhCkBAIC0wLDAgKzEsMTEgQEAKK2NsYXNzIEJ1Z1Rlc3QgeworICAgIHZvaWQgPGNhcmV0PmYoU3RyaW5nLi4uIHMpIHsKKyAgICAgICAgZm9yIChTdHJpbmcgczEgOiBzKSB7CisKKyAgICAgICAgfQorICAgIH0KKworICAgIHsKKyAgICAgICAgZihuZXcgU3RyaW5nW10geyIifSk7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVNZXRob2QvVmFyYXJnczEuamF2YS5hZnRlciBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVNZXRob2QvVmFyYXJnczEuamF2YS5hZnRlcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNWNhNjVhCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZU1ldGhvZC9WYXJhcmdzMS5qYXZhLmFmdGVyCkBAIC0wLDAgKzEsOCBAQAorY2xhc3MgQnVnVGVzdCB7CisKKyAgICB7CisgICAgICAgIGZvciAoU3RyaW5nIHMxIDogbmV3IFN0cmluZ1tdIHsiIn0pIHsKKworICAgICAgICB9CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVNZXRob2QvVm9pZFdpdGhSZXR1cm4uamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVNZXRob2QvVm9pZFdpdGhSZXR1cm4uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NDA3MmQxCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZU1ldGhvZC9Wb2lkV2l0aFJldHVybi5qYXZhCkBAIC0wLDAgKzEsOSBAQAorY2xhc3MgVGVzdCB7CisgICAgdm9pZCBtZXRob2QoKSB7CisgICAgICAgIG90aGVyTWV0aG9kKCk7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSGVyZSIpOworICAgIH0KKyAgICB2b2lkIG90aGVyTWV0aG9kPGNhcmV0PigpIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lTWV0aG9kL1ZvaWRXaXRoUmV0dXJuLmphdmEuYWZ0ZXIgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lTWV0aG9kL1ZvaWRXaXRoUmV0dXJuLmphdmEuYWZ0ZXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTBlNzU4MgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVNZXRob2QvVm9pZFdpdGhSZXR1cm4uamF2YS5hZnRlcgpAQCAtMCwwICsxLDUgQEAKK2NsYXNzIFRlc3QgeworICAgIHZvaWQgbWV0aG9kKCkgeworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkhlcmUiKTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZU1ldGhvZC9Wb2lkV2l0aFJldHVybjEuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVNZXRob2QvVm9pZFdpdGhSZXR1cm4xLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTkzNDhkMgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVNZXRob2QvVm9pZFdpdGhSZXR1cm4xLmphdmEKQEAgLTAsMCArMSw5IEBACitjbGFzcyBUZXN0IHsKKyAgICBwcml2YXRlIHN0YXRpYyB2b2lkIGR1ZGUoKSB7CisgICAgICAgIHJldHVybiBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKKyAgICB9CisKKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisgICAgICAgIDxjYXJldD5kdWRlKCk7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVNZXRob2QvVm9pZFdpdGhSZXR1cm4xLmphdmEuYWZ0ZXIgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lTWV0aG9kL1ZvaWRXaXRoUmV0dXJuMS5qYXZhLmFmdGVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjljMGJlMTQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lTWV0aG9kL1ZvaWRXaXRoUmV0dXJuMS5qYXZhLmFmdGVyCkBAIC0wLDAgKzEsNiBAQAorY2xhc3MgVGVzdCB7CisKKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisgICAgICAgIFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lTWV0aG9kL1dpdGhTdXBlckluc2lkZS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZU1ldGhvZC9XaXRoU3VwZXJJbnNpZGUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMTVlM2IwCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZU1ldGhvZC9XaXRoU3VwZXJJbnNpZGUuamF2YQpAQCAtMCwwICsxLDE3IEBACitwdWJsaWMgY2xhc3MgVXNhZ2UgeworICB2b2lkIGZvbygpIHsKKyAgICBiPGNhcmV0PmFyKCk7CisgIH0KKworICB2b2lkIGJhcigpIHsKKyAgICBuZXcgVygpIHsKKyAgICAgIHByb3RlY3RlZCB2b2lkIHd3dygpIHsKKyAgICAgICAgc3VwZXIud3d3KCk7CisgICAgICB9CisgICAgfTsKKyAgfQorfQorCitjbGFzcyBXIHsKKyAgcHJvdGVjdGVkIHZvaWQgd3d3KCkge30KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lTWV0aG9kL1dpdGhTdXBlckluc2lkZS5qYXZhLmFmdGVyIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZU1ldGhvZC9XaXRoU3VwZXJJbnNpZGUuamF2YS5hZnRlcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNDU0YTdmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZU1ldGhvZC9XaXRoU3VwZXJJbnNpZGUuamF2YS5hZnRlcgpAQCAtMCwwICsxLDE0IEBACitwdWJsaWMgY2xhc3MgVXNhZ2UgeworICB2b2lkIGZvbygpIHsKKyAgICAgIG5ldyBXKCkgeworICAgICAgICBwcm90ZWN0ZWQgdm9pZCB3d3coKSB7CisgICAgICAgICAgc3VwZXIud3d3KCk7CisgICAgICAgIH0KKyAgICAgIH07CisgIH0KKworfQorCitjbGFzcyBXIHsKKyAgcHJvdGVjdGVkIHZvaWQgd3d3KCkge30KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lTWV0aG9kL211bHRpZmlsZS9yZW1vdmVTdGF0aWNJbXBvcnRzL2FmdGVyL0Jhci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZU1ldGhvZC9tdWx0aWZpbGUvcmVtb3ZlU3RhdGljSW1wb3J0cy9hZnRlci9CYXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZjFkZmRlCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZU1ldGhvZC9tdWx0aWZpbGUvcmVtb3ZlU3RhdGljSW1wb3J0cy9hZnRlci9CYXIuamF2YQpAQCAtMCwwICsxLDQgQEAKK3B1YmxpYyBjbGFzcyBCYXIgeworICB2b2lkIGJhcigpIHsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVNZXRob2QvbXVsdGlmaWxlL3JlbW92ZVN0YXRpY0ltcG9ydHMvYWZ0ZXIvRm9vLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lTWV0aG9kL211bHRpZmlsZS9yZW1vdmVTdGF0aWNJbXBvcnRzL2FmdGVyL0Zvby5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBhMmIwNTIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lTWV0aG9kL211bHRpZmlsZS9yZW1vdmVTdGF0aWNJbXBvcnRzL2FmdGVyL0Zvby5qYXZhCkBAIC0wLDAgKzEsMiBAQAorcHVibGljIGNsYXNzIEZvbyB7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZU1ldGhvZC9tdWx0aWZpbGUvcmVtb3ZlU3RhdGljSW1wb3J0cy9iZWZvcmUvQmFyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lTWV0aG9kL211bHRpZmlsZS9yZW1vdmVTdGF0aWNJbXBvcnRzL2JlZm9yZS9CYXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZDExMTYwCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZU1ldGhvZC9tdWx0aWZpbGUvcmVtb3ZlU3RhdGljSW1wb3J0cy9iZWZvcmUvQmFyLmphdmEKQEAgLTAsMCArMSw2IEBACitpbXBvcnQgc3RhdGljIEZvby5mb287CitwdWJsaWMgY2xhc3MgQmFyIHsKKyAgdm9pZCBiYXIoKSB7CisgICAgZm9vKCk7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lTWV0aG9kL211bHRpZmlsZS9yZW1vdmVTdGF0aWNJbXBvcnRzL2JlZm9yZS9Gb28uamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVNZXRob2QvbXVsdGlmaWxlL3JlbW92ZVN0YXRpY0ltcG9ydHMvYmVmb3JlL0Zvby5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM4ZjQwOGEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lTWV0aG9kL211bHRpZmlsZS9yZW1vdmVTdGF0aWNJbXBvcnRzL2JlZm9yZS9Gb28uamF2YQpAQCAtMCwwICsxLDMgQEAKK3B1YmxpYyBjbGFzcyBGb28geworICBwdWJsaWMgc3RhdGljIHZvaWQgZm9vKCl7fQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVQYXJhbWV0ZXIvQ2FudElubGluZVJlY3Vyc2l2ZS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVBhcmFtZXRlci9DYW50SW5saW5lUmVjdXJzaXZlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWM3NDc0ZjEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lUGFyYW1ldGVyL0NhbnRJbmxpbmVSZWN1cnNpdmUuamF2YQpAQCAtMCwwICsxLDE4IEBACitpbXBvcnQgamF2YS5sYW5nLkludGVnZXI7CitpbXBvcnQgamF2YS51dGlsLio7CitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKKworcHVibGljIGNsYXNzIEV4cERhdGEgeworICAgcHJpdmF0ZSBmaW5hbCBMaXN0PEludGVnZXI+IG15UmVzdWx0ID0gbmV3IEFycmF5TGlzdDxJbnRlZ2VyPigpOworICB7CisgICAgbSgxMCwgbXlSZXN1bHQpOworICB9CisKKyAgcHJpdmF0ZSB2b2lkIG0oaW50IGksIExpc3Q8SW50ZWdlcj4gcmU8Y2FyZXQ+c3VsdCkgeworICAgIGlmIChpID4gMCkgeworICAgICAgbShpIC0gMSwgcmVzdWx0KTsKKyAgICB9CisgICAgcmVzdWx0LmFkZChpKTsKKyAgICBtKDIsIG5ldyBBcnJheUxpc3Q8SW50ZWdlcj4oKSk7CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVQYXJhbWV0ZXIvQ29uc3RydWN0b3JDYWxsLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lUGFyYW1ldGVyL0NvbnN0cnVjdG9yQ2FsbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMyYWM3ZjIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lUGFyYW1ldGVyL0NvbnN0cnVjdG9yQ2FsbC5qYXZhCkBAIC0wLDAgKzEsMTEgQEAKK2NsYXNzIEEgeworICAgIHByaXZhdGUgaW50IG15STsKKworICAgIHByaXZhdGUgQShpbnQgPGNhcmV0PmkpIHsKKyAgICAgICAgbXlJID0gaTsKKyAgICB9CisKKyAgICBwdWJsaWMgc3RhdGljIEEgY3JlYXRlKCkgeworICAgICAgICByZXR1cm4gbmV3IEEoMCk7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVQYXJhbWV0ZXIvQ29uc3RydWN0b3JDYWxsLmphdmEuYWZ0ZXIgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lUGFyYW1ldGVyL0NvbnN0cnVjdG9yQ2FsbC5qYXZhLmFmdGVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmViMzJjOGMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lUGFyYW1ldGVyL0NvbnN0cnVjdG9yQ2FsbC5qYXZhLmFmdGVyCkBAIC0wLDAgKzEsMTEgQEAKK2NsYXNzIEEgeworICAgIHByaXZhdGUgaW50IG15STsKKworICAgIHByaXZhdGUgQSgpIHsKKyAgICAgICAgbXlJID0gMDsKKyAgICB9CisKKyAgICBwdWJsaWMgc3RhdGljIEEgY3JlYXRlKCkgeworICAgICAgICByZXR1cm4gbmV3IEEoKTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVBhcmFtZXRlci9IYW5kbGVFeGNlcHRpb25zLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lUGFyYW1ldGVyL0hhbmRsZUV4Y2VwdGlvbnMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNTU4OTIyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVBhcmFtZXRlci9IYW5kbGVFeGNlcHRpb25zLmphdmEKQEAgLTAsMCArMSwyNiBAQAoraW1wb3J0IGphdmEuaW8uKjsKK3B1YmxpYyBjbGFzcyBTdWJqZWN0IHsKKyAgcHJpdmF0ZSBpbnQgbXlJbnQ7CisKKyAgcHVibGljIHZvaWQgd2l0aENsYXNzKE9iamVjdCA8Y2FyZXQ+bykgeworICAgIG15SW50ICs9IG8uaGFzaENvZGUoKTsKKyAgfQorfQorCitjbGFzcyBVc2VyIHsKKyAgcHJpdmF0ZSB2b2lkIG9wZXIoKSB0aHJvd3MgSU9FeGNlcHRpb24geworICAgIFN1YmplY3Qgc3ViaiA9IG5ldyBTdWJqZWN0KCk7CisgICAgc3Viai53aXRoQ2xhc3MobmV3IFRoaXJkUGFydHkoZmFsc2UpKTsKKyAgfQorfQorCitjbGFzcyBUaGlyZFBhcnR5IHsKKyAgcHVibGljIFRoaXJkUGFydHkoKSB7CisgIH0KKworICBwdWJsaWMgVGhpcmRQYXJ0eShib29sZWFuIGIpIHRocm93cyBJT0V4Y2VwdGlvbiB7CisgICAgaWYgKGIpIHsKKyAgICAgIHRocm93IG5ldyBJT0V4Y2VwdGlvbigpOworICAgIH0KKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVBhcmFtZXRlci9IYW5kbGVFeGNlcHRpb25zLmphdmEuYWZ0ZXIgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lUGFyYW1ldGVyL0hhbmRsZUV4Y2VwdGlvbnMuamF2YS5hZnRlcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZTg3NDY0Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVBhcmFtZXRlci9IYW5kbGVFeGNlcHRpb25zLmphdmEuYWZ0ZXIKQEAgLTAsMCArMSwyNiBAQAoraW1wb3J0IGphdmEuaW8uKjsKK3B1YmxpYyBjbGFzcyBTdWJqZWN0IHsKKyAgcHJpdmF0ZSBpbnQgbXlJbnQ7CisKKyAgcHVibGljIHZvaWQgd2l0aENsYXNzKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKKyAgICBteUludCArPSBuZXcgVGhpcmRQYXJ0eShmYWxzZSkuaGFzaENvZGUoKTsKKyAgfQorfQorCitjbGFzcyBVc2VyIHsKKyAgcHJpdmF0ZSB2b2lkIG9wZXIoKSB0aHJvd3MgSU9FeGNlcHRpb24geworICAgIFN1YmplY3Qgc3ViaiA9IG5ldyBTdWJqZWN0KCk7CisgICAgc3Viai53aXRoQ2xhc3MoKTsKKyAgfQorfQorCitjbGFzcyBUaGlyZFBhcnR5IHsKKyAgcHVibGljIFRoaXJkUGFydHkoKSB7CisgIH0KKworICBwdWJsaWMgVGhpcmRQYXJ0eShib29sZWFuIGIpIHRocm93cyBJT0V4Y2VwdGlvbiB7CisgICAgaWYgKGIpIHsKKyAgICAgIHRocm93IG5ldyBJT0V4Y2VwdGlvbigpOworICAgIH0KKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVBhcmFtZXRlci9JbmxpbmVMb2NhbFBhcmFtRGVmLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lUGFyYW1ldGVyL0lubGluZUxvY2FsUGFyYW1EZWYuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZTU5NTNmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVBhcmFtZXRlci9JbmxpbmVMb2NhbFBhcmFtRGVmLmphdmEKQEAgLTAsMCArMSw2IEBACitwdWJsaWMgY2xhc3MgRXhwRGF0YSB7CisgIHZvaWQgZm9vKFN0cmluZyBzKSB7CisgICAgcyA9ICIiOworICAgIFN5c3RlbS5vdXQucHJpbnRsbig8Y2FyZXQ+cy5zdWJzdHJpbmcoMikpOworICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lUGFyYW1ldGVyL0lubGluZUxvY2FsUGFyYW1EZWYuamF2YS5hZnRlciBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVQYXJhbWV0ZXIvSW5saW5lTG9jYWxQYXJhbURlZi5qYXZhLmFmdGVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMzMmQxMzIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lUGFyYW1ldGVyL0lubGluZUxvY2FsUGFyYW1EZWYuamF2YS5hZnRlcgpAQCAtMCwwICsxLDUgQEAKK3B1YmxpYyBjbGFzcyBFeHBEYXRhIHsKKyAgdm9pZCBmb28oU3RyaW5nIHMpIHsKKyAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiIi5zdWJzdHJpbmcoMikpOworICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lUGFyYW1ldGVyL0lubGluZVJlY3Vyc2l2ZS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVBhcmFtZXRlci9JbmxpbmVSZWN1cnNpdmUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OGZiNTQ4Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVBhcmFtZXRlci9JbmxpbmVSZWN1cnNpdmUuamF2YQpAQCAtMCwwICsxLDE1IEBACitpbXBvcnQgamF2YS51dGlsLio7CisKK3B1YmxpYyBjbGFzcyBFeHBEYXRhIHsKKyAgIHByaXZhdGUgZmluYWwgTGlzdDxJbnRlZ2VyPiBteVJlc3VsdCA9IG5ldyBBcnJheUxpc3Q8SW50ZWdlcj4oKTsKKyAgeworICAgIG0oMTAsIG15UmVzdWx0KTsKKyAgfQorCisgIHByaXZhdGUgdm9pZCBtKGludCBpLCBMaXN0PEludGVnZXI+IHJlPGNhcmV0PnN1bHQpIHsKKyAgICBpZiAoaSA+IDApIHsKKyAgICAgIG0oaSAtIDEsIHJlc3VsdCk7CisgICAgfQorICAgIHJlc3VsdC5hZGQoaSk7CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVQYXJhbWV0ZXIvSW5saW5lUmVjdXJzaXZlLmphdmEuYWZ0ZXIgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lUGFyYW1ldGVyL0lubGluZVJlY3Vyc2l2ZS5qYXZhLmFmdGVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVmMzQxYTMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lUGFyYW1ldGVyL0lubGluZVJlY3Vyc2l2ZS5qYXZhLmFmdGVyCkBAIC0wLDAgKzEsMTUgQEAKK2ltcG9ydCBqYXZhLnV0aWwuKjsKKworcHVibGljIGNsYXNzIEV4cERhdGEgeworICAgcHJpdmF0ZSBmaW5hbCBMaXN0PEludGVnZXI+IG15UmVzdWx0ID0gbmV3IEFycmF5TGlzdDxJbnRlZ2VyPigpOworICB7CisgICAgbSgxMCk7CisgIH0KKworICBwcml2YXRlIHZvaWQgbShpbnQgaSkgeworICAgIGlmIChpID4gMCkgeworICAgICAgbShpIC0gMSk7CisgICAgfQorICAgIG15UmVzdWx0LmFkZChpKTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVBhcmFtZXRlci9Mb2NhbFZhckRlY2xhcmF0aW9uSW5Db25zdHJ1Y3Rvci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVBhcmFtZXRlci9Mb2NhbFZhckRlY2xhcmF0aW9uSW5Db25zdHJ1Y3Rvci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQxMTk1ZTAKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lUGFyYW1ldGVyL0xvY2FsVmFyRGVjbGFyYXRpb25JbkNvbnN0cnVjdG9yLmphdmEKQEAgLTAsMCArMSwxNSBAQAorY2xhc3MgQmFzZSB7CisgICAgcHVibGljIEJhc2UoKSB7CisgICAgfQorfQorCitjbGFzcyBJbmhlcml0b3IgZXh0ZW5kcyBCYXNlIHsKKyAgICBwdWJsaWMgSW5oZXJpdG9yKFN0cmluZyBiPGNhcmV0PmFyKSB7CisgICAgICAgIHN1cGVyKCk7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihiYXIpOworICAgIH0KKworICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKyAgICAgICAgbmV3IEluaGVyaXRvcigiYmFyIi50b1N0cmluZygpKTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVBhcmFtZXRlci9Mb2NhbFZhckRlY2xhcmF0aW9uSW5Db25zdHJ1Y3Rvci5qYXZhLmFmdGVyIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVBhcmFtZXRlci9Mb2NhbFZhckRlY2xhcmF0aW9uSW5Db25zdHJ1Y3Rvci5qYXZhLmFmdGVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU5ODlmZDAKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lUGFyYW1ldGVyL0xvY2FsVmFyRGVjbGFyYXRpb25JbkNvbnN0cnVjdG9yLmphdmEuYWZ0ZXIKQEAgLTAsMCArMSwxNiBAQAorY2xhc3MgQmFzZSB7CisgICAgcHVibGljIEJhc2UoKSB7CisgICAgfQorfQorCitjbGFzcyBJbmhlcml0b3IgZXh0ZW5kcyBCYXNlIHsKKyAgICBwdWJsaWMgSW5oZXJpdG9yKCkgeworICAgICAgICBzdXBlcigpOworICAgICAgICBTdHJpbmcgYmFyID0gImJhciIudG9TdHJpbmcoKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKGJhcik7CisgICAgfQorCisgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworICAgICAgICBuZXcgSW5oZXJpdG9yKCk7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVQYXJhbWV0ZXIvTnVsbFZhbHVlLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lUGFyYW1ldGVyL051bGxWYWx1ZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI5NmFjMmQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lUGFyYW1ldGVyL051bGxWYWx1ZS5qYXZhCkBAIC0wLDAgKzEsMTMgQEAKK3B1YmxpYyBjbGFzcyBBIHsKKyAgdm9pZCB0ZXN0KGludCBjb3VudCwgU3RyaW5nIDxjYXJldD5zKSB7CisgICAgU3RyaW5nIHQgPSBzOworICB9CisKKyAgdm9pZCBjYWxsVGVzdCgpIHsKKyAgICB0ZXN0KDEsIG51bGwpOworICB9CisKKyAgdm9pZCBjYWxsVGVzdDIoKSB7CisgICAgdGVzdCgyLCBudWxsKTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVQYXJhbWV0ZXIvTnVsbFZhbHVlLmphdmEuYWZ0ZXIgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lUGFyYW1ldGVyL051bGxWYWx1ZS5qYXZhLmFmdGVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA1N2FiYzQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lUGFyYW1ldGVyL051bGxWYWx1ZS5qYXZhLmFmdGVyCkBAIC0wLDAgKzEsMTMgQEAKK3B1YmxpYyBjbGFzcyBBIHsKKyAgdm9pZCB0ZXN0KGludCBjb3VudCkgeworICAgIFN0cmluZyB0ID0gbnVsbDsKKyAgfQorCisgIHZvaWQgY2FsbFRlc3QoKSB7CisgICAgdGVzdCgxKTsKKyAgfQorCisgIHZvaWQgY2FsbFRlc3QyKCkgeworICAgIHRlc3QoMik7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lUGFyYW1ldGVyL1BhcmFtZXRlckRlZldpdGhXcml0ZUFjY2Vzcy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVBhcmFtZXRlci9QYXJhbWV0ZXJEZWZXaXRoV3JpdGVBY2Nlc3MuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOWM1MDgzCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVBhcmFtZXRlci9QYXJhbWV0ZXJEZWZXaXRoV3JpdGVBY2Nlc3MuamF2YQpAQCAtMCwwICsxLDYgQEAKK3B1YmxpYyBjbGFzcyBFeHBEYXRhIHsKKyAgdm9pZCBmb28oaW50IGkpIHsKKyAgICBpID0gMDsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oPGNhcmV0PmkrKyk7CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVQYXJhbWV0ZXIvUGFyYW1ldGVyV2l0aFdyaXRlQWNjZXNzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lUGFyYW1ldGVyL1BhcmFtZXRlcldpdGhXcml0ZUFjY2Vzcy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY4OTRmMWEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lUGFyYW1ldGVyL1BhcmFtZXRlcldpdGhXcml0ZUFjY2Vzcy5qYXZhCkBAIC0wLDAgKzEsMTAgQEAKK2NsYXNzIENsYXp6IHsKKyAgICBwdWJsaWMgQ2xhenooU3RyaW5nIGI8Y2FyZXQ+YXIpIHsKKyAgICAgICAgYmFyID0gYmFyICsgYmFyOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oYmFyKTsKKyAgICB9CisKKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisgICAgICAgIG5ldyBDbGF6eigiYmFyIik7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVQYXJhbWV0ZXIvUmVmMkNvbnN0YW50c1dpdGhUaGVTYW1lVmFsdWUuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVQYXJhbWV0ZXIvUmVmMkNvbnN0YW50c1dpdGhUaGVTYW1lVmFsdWUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xODkzZDhjCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVBhcmFtZXRlci9SZWYyQ29uc3RhbnRzV2l0aFRoZVNhbWVWYWx1ZS5qYXZhCkBAIC0wLDAgKzEsMTggQEAKK3B1YmxpYyBjbGFzcyBTdWJqZWN0IHsKKyAgcHJpdmF0ZSBpbnQgbXlJbnQ7CisKKyAgcHVibGljIHZvaWQgd3AoaW50IDxjYXJldD5wKSB7CisgICAgbXlJbnQgKz0gcDsKKyAgfQorfQorCitjbGFzcyBVc2VyIHsKKyAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgT1VSX0NPTlNUID0gMjsKKyAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgT1VSX0NPTlNUMiA9IDI7CisKKyAgcHJpdmF0ZSB2b2lkIG9wZXIoKSB7CisgICAgU3ViamVjdCBzdWJqID0gbmV3IFN1YmplY3QoKTsKKyAgICBzdWJqLndwKE9VUl9DT05TVCk7CisgICAgc3Viai53cChPVVJfQ09OU1QyKTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVBhcmFtZXRlci9SZWYyQ29uc3RhbnRzV2l0aFRoZVNhbWVWYWx1ZS5qYXZhLmFmdGVyIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVBhcmFtZXRlci9SZWYyQ29uc3RhbnRzV2l0aFRoZVNhbWVWYWx1ZS5qYXZhLmFmdGVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY5MjE1NGQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lUGFyYW1ldGVyL1JlZjJDb25zdGFudHNXaXRoVGhlU2FtZVZhbHVlLmphdmEuYWZ0ZXIKQEAgLTAsMCArMSwxOCBAQAorcHVibGljIGNsYXNzIFN1YmplY3QgeworICBwcml2YXRlIGludCBteUludDsKKworICBwdWJsaWMgdm9pZCB3cCgpIHsKKyAgICBteUludCArPSBVc2VyLk9VUl9DT05TVDsKKyAgfQorfQorCitjbGFzcyBVc2VyIHsKKyAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgT1VSX0NPTlNUID0gMjsKKyAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgT1VSX0NPTlNUMiA9IDI7CisKKyAgcHJpdmF0ZSB2b2lkIG9wZXIoKSB7CisgICAgU3ViamVjdCBzdWJqID0gbmV3IFN1YmplY3QoKTsKKyAgICBzdWJqLndwKCk7CisgICAgc3Viai53cCgpOworICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lUGFyYW1ldGVyL1JlZkFycmF5QWNjZXNzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lUGFyYW1ldGVyL1JlZkFycmF5QWNjZXNzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTI5ZmQyNwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVQYXJhbWV0ZXIvUmVmQXJyYXlBY2Nlc3MuamF2YQpAQCAtMCwwICsxLDE2IEBACitwdWJsaWMgY2xhc3MgU3ViamVjdCB7CisgIHByaXZhdGUgaW50IG15SW50OworCisgIHB1YmxpYyB2b2lkIHdpdGhBcnJheShpbnRbXSA8Y2FyZXQ+cGlhKSB7CisgICAgbXlJbnQgKz0gcGlhWzBdOworICB9Cit9CisKK2NsYXNzIFVzZXIgeworICBwcml2YXRlIHZvaWQgb3BlcigpIHsKKyAgICBTdWJqZWN0IHN1YmogPSBuZXcgU3ViamVjdCgpOworICAgIGludFtdIGlhID0gbmV3IGludFtdezAsIDF9OworICAgIGlhWzBdID0gMjsKKyAgICBzdWJqLndpdGhBcnJheShpYSk7CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVQYXJhbWV0ZXIvUmVmQ2FsbGVyUGFyYW1ldGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lUGFyYW1ldGVyL1JlZkNhbGxlclBhcmFtZXRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMyZDg0NjkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lUGFyYW1ldGVyL1JlZkNhbGxlclBhcmFtZXRlci5qYXZhCkBAIC0wLDAgKzEsOSBAQAorY2xhc3MgT3V0ZXIgeworICBwdWJsaWMgdm9pZCB3aXRoQ2xhc3MoT2JqZWN0IDxjYXJldD5vKSB7CisgICAgU3lzdGVtLm91dC5wcmludGxuKG8udG9TdHJpbmcoKSk7CisgIH0KKworICBwdWJsaWMgdm9pZCBmb29yKE9iamVjdCBvYmpjdCkgeworICAgIHdpdGhDbGFzcyhvYmpjdCk7CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVQYXJhbWV0ZXIvUmVmQ2FsbGVyUGFyYW1ldGVySW5DYWxsQ2hhaW4uamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVQYXJhbWV0ZXIvUmVmQ2FsbGVyUGFyYW1ldGVySW5DYWxsQ2hhaW4uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MmRjNGNlCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVBhcmFtZXRlci9SZWZDYWxsZXJQYXJhbWV0ZXJJbkNhbGxDaGFpbi5qYXZhCkBAIC0wLDAgKzEsMjEgQEAKK2NsYXNzIEZvbyB7CisgICAgdm9pZCBmKGJvb2xlYW4gYikgeworICAgICAgICBTdHJpbmcgcHJvamVjdCA9IHByb2plY3QoYik7CisgICAgICAgIGlmIChiKSB7CisgICAgICAgICAgICBiYXJycnIocHJvamVjdC5zdWJzdHJpbmcoMCkpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaWYgKHRydWUpIHsKKyAgICAgICAgICAgICAgICBiYXJycnIocHJvamVjdC5zdWJzdHJpbmcoMCkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICB9CisKKyAgICBwcml2YXRlIHZvaWQgYmFycnJyKFN0cmluZyA8Y2FyZXQ+cFByb2plY3QpIHsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKHBQcm9qZWN0KTsKKyAgICB9CisKKyAgICBTdHJpbmcgcHJvamVjdCAoYm9vbGVhbiBiKSB7CisgICAgICAgIHJldHVybiBudWxsOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lUGFyYW1ldGVyL1JlZkNvbnN0YW50QW5kRmllbGQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVQYXJhbWV0ZXIvUmVmQ29uc3RhbnRBbmRGaWVsZC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJiZTAyZjkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lUGFyYW1ldGVyL1JlZkNvbnN0YW50QW5kRmllbGQuamF2YQpAQCAtMCwwICsxLDE4IEBACitwdWJsaWMgY2xhc3MgU3ViamVjdCB7CisgIHByaXZhdGUgaW50IG15SW50OworCisgIHB1YmxpYyB2b2lkIHdwKGludCA8Y2FyZXQ+cCkgeworICAgIG15SW50ICs9IHA7CisgIH0KK30KKworY2xhc3MgVXNlciB7CisgIHB1YmxpYyBzdGF0aWMgaW50IG91clN0YXRpYyA9IDA7CisgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE9VUl9DT05TVCA9IDA7CisKKyAgcHJpdmF0ZSB2b2lkIG9wZXIoKSB7CisgICAgU3ViamVjdCBzdWJqID0gbmV3IFN1YmplY3QoKTsKKyAgICBzdWJqLndwKE9VUl9DT05TVCk7CisgICAgc3Viai53cChvdXJTdGF0aWMpOworICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lUGFyYW1ldGVyL1JlZkZpbmFsTG9jYWwuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVQYXJhbWV0ZXIvUmVmRmluYWxMb2NhbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI2NTM0NGYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lUGFyYW1ldGVyL1JlZkZpbmFsTG9jYWwuamF2YQpAQCAtMCwwICsxLDExIEBACitwdWJsaWMgY2xhc3MgQSB7CisgICAgdm9pZCB0ZXN0KFN0cmluZyBzMSwgZmluYWwgU3RyaW5nIDxjYXJldD5zMikgeworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oczEpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oczIpOworICAgIH0KKworICAgIHZvaWQgY2FsbFRlc3QoKSB7CisgICAgICAgIFN0cmluZyBzID0gIiI7CisgICAgICAgIHRlc3Qocywgcyk7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVBhcmFtZXRlci9SZWZGaW5hbExvY2FsLmphdmEuYWZ0ZXIgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lUGFyYW1ldGVyL1JlZkZpbmFsTG9jYWwuamF2YS5hZnRlcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NzI4MDlmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVBhcmFtZXRlci9SZWZGaW5hbExvY2FsLmphdmEuYWZ0ZXIKQEAgLTAsMCArMSwxMiBAQAorcHVibGljIGNsYXNzIEEgeworICAgIHZvaWQgdGVzdChTdHJpbmcgczEpIHsKKyAgICAgICAgZmluYWwgU3RyaW5nIHMyID0gczE7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihzMSk7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihzMik7CisgICAgfQorCisgICAgdm9pZCBjYWxsVGVzdCgpIHsKKyAgICAgICAgU3RyaW5nIHMgPSAiIjsKKyAgICAgICAgdGVzdChzKTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lUGFyYW1ldGVyL1JlZkZpbmFsTG9jYWxJbml0aWFsaXplZFdpdGhNZXRob2QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVQYXJhbWV0ZXIvUmVmRmluYWxMb2NhbEluaXRpYWxpemVkV2l0aE1ldGhvZC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg1MGJjOTUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lUGFyYW1ldGVyL1JlZkZpbmFsTG9jYWxJbml0aWFsaXplZFdpdGhNZXRob2QuamF2YQpAQCAtMCwwICsxLDExIEBACitwdWJsaWMgY2xhc3MgQSB7CisgICAgdm9pZCB0ZXN0KFN0cmluZyBzLCBpbnQgPGNhcmV0PmwpIHsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKHMpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4obCk7CisgICAgfQorCisgICAgdm9pZCBjYWxsVGVzdChTdHJpbmcgYVN0cmluZykgeworICAgICAgICBmaW5hbCBpbnQgbGVuID0gYVN0cmluZy5sZW5ndGgoKTsKKyAgICAgICAgdGVzdChhU3RyaW5nLCBsZW4pOworICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVQYXJhbWV0ZXIvUmVmRmluYWxMb2NhbEluaXRpYWxpemVkV2l0aE1ldGhvZC5qYXZhLmFmdGVyIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVBhcmFtZXRlci9SZWZGaW5hbExvY2FsSW5pdGlhbGl6ZWRXaXRoTWV0aG9kLmphdmEuYWZ0ZXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjA0YjQ1MDQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lUGFyYW1ldGVyL1JlZkZpbmFsTG9jYWxJbml0aWFsaXplZFdpdGhNZXRob2QuamF2YS5hZnRlcgpAQCAtMCwwICsxLDEwIEBACitwdWJsaWMgY2xhc3MgQSB7CisgICAgdm9pZCB0ZXN0KFN0cmluZyBzKSB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihzKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKHMubGVuZ3RoKCkpOworICAgIH0KKworICAgIHZvaWQgY2FsbFRlc3QoU3RyaW5nIGFTdHJpbmcpIHsKKyAgICAgICAgdGVzdChhU3RyaW5nKTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lUGFyYW1ldGVyL1JlZklkZW50aWNhbC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVBhcmFtZXRlci9SZWZJZGVudGljYWwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMDVlMmU5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVBhcmFtZXRlci9SZWZJZGVudGljYWwuamF2YQpAQCAtMCwwICsxLDExIEBACitwdWJsaWMgY2xhc3MgQSB7CisgICAgdm9pZCB0ZXN0KFN0cmluZyBzMSwgU3RyaW5nIDxjYXJldD5zMikgeworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oczEpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oczIpOworICAgIH0KKworICAgIHZvaWQgY2FsbFRlc3QoKSB7CisgICAgICAgIFN0cmluZyBzID0gIiI7CisgICAgICAgIHRlc3Qocywgcyk7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVBhcmFtZXRlci9SZWZJZGVudGljYWwuamF2YS5hZnRlciBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVQYXJhbWV0ZXIvUmVmSWRlbnRpY2FsLmphdmEuYWZ0ZXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWRmMGI5OAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVQYXJhbWV0ZXIvUmVmSWRlbnRpY2FsLmphdmEuYWZ0ZXIKQEAgLTAsMCArMSwxMiBAQAorcHVibGljIGNsYXNzIEEgeworICAgIHZvaWQgdGVzdChTdHJpbmcgczEpIHsKKyAgICAgICAgU3RyaW5nIHMyID0gczE7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihzMSk7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihzMik7CisgICAgfQorCisgICAgdm9pZCBjYWxsVGVzdCgpIHsKKyAgICAgICAgU3RyaW5nIHMgPSAiIjsKKyAgICAgICAgdGVzdChzKTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lUGFyYW1ldGVyL1JlZklkZW50aWNhbE5vTG9jYWwuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVQYXJhbWV0ZXIvUmVmSWRlbnRpY2FsTm9Mb2NhbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUwNWUyZTkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lUGFyYW1ldGVyL1JlZklkZW50aWNhbE5vTG9jYWwuamF2YQpAQCAtMCwwICsxLDExIEBACitwdWJsaWMgY2xhc3MgQSB7CisgICAgdm9pZCB0ZXN0KFN0cmluZyBzMSwgU3RyaW5nIDxjYXJldD5zMikgeworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oczEpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oczIpOworICAgIH0KKworICAgIHZvaWQgY2FsbFRlc3QoKSB7CisgICAgICAgIFN0cmluZyBzID0gIiI7CisgICAgICAgIHRlc3Qocywgcyk7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVBhcmFtZXRlci9SZWZJZGVudGljYWxOb0xvY2FsLmphdmEuYWZ0ZXIgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lUGFyYW1ldGVyL1JlZklkZW50aWNhbE5vTG9jYWwuamF2YS5hZnRlcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMGQxOTNhCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVBhcmFtZXRlci9SZWZJZGVudGljYWxOb0xvY2FsLmphdmEuYWZ0ZXIKQEAgLTAsMCArMSwxMSBAQAorcHVibGljIGNsYXNzIEEgeworICAgIHZvaWQgdGVzdChTdHJpbmcgczEpIHsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKHMxKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKHMxKTsKKyAgICB9CisKKyAgICB2b2lkIGNhbGxUZXN0KCkgeworICAgICAgICBTdHJpbmcgcyA9ICIiOworICAgICAgICB0ZXN0KHMpOworICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVQYXJhbWV0ZXIvUmVmTG9jYWxDb25zdGFudEluaXRpYWxpemVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lUGFyYW1ldGVyL1JlZkxvY2FsQ29uc3RhbnRJbml0aWFsaXplci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ0ZThlYzgKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lUGFyYW1ldGVyL1JlZkxvY2FsQ29uc3RhbnRJbml0aWFsaXplci5qYXZhCkBAIC0wLDAgKzEsMTIgQEAKK3B1YmxpYyBjbGFzcyBBIHsKKyAgICB2b2lkIHRlc3QoU3RyaW5nIHMxLCBTdHJpbmcgPGNhcmV0PnMyKSB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihzMSk7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihzMik7CisgICAgfQorCisgICAgdm9pZCBjYWxsVGVzdCgpIHsKKyAgICAgICAgU3RyaW5nIHMgPSAiIjsKKyAgICAgICAgU3RyaW5nIHQgPSAiIjsKKyAgICAgICAgdGVzdChzLCB0KTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lUGFyYW1ldGVyL1JlZkxvY2FsQ29uc3RhbnRJbml0aWFsaXplci5qYXZhLmFmdGVyIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVBhcmFtZXRlci9SZWZMb2NhbENvbnN0YW50SW5pdGlhbGl6ZXIuamF2YS5hZnRlcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMDJjZTA4Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVBhcmFtZXRlci9SZWZMb2NhbENvbnN0YW50SW5pdGlhbGl6ZXIuamF2YS5hZnRlcgpAQCAtMCwwICsxLDExIEBACitwdWJsaWMgY2xhc3MgQSB7CisgICAgdm9pZCB0ZXN0KFN0cmluZyBzMSkgeworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oczEpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIiIpOworICAgIH0KKworICAgIHZvaWQgY2FsbFRlc3QoKSB7CisgICAgICAgIFN0cmluZyBzID0gIiI7CisgICAgICAgIHRlc3Qocyk7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVBhcmFtZXRlci9SZWZMb2NhbFdpdGhMb2NhbC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVBhcmFtZXRlci9SZWZMb2NhbFdpdGhMb2NhbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM0N2FlMzcKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lUGFyYW1ldGVyL1JlZkxvY2FsV2l0aExvY2FsLmphdmEKQEAgLTAsMCArMSwxMiBAQAorcHVibGljIGNsYXNzIEEgeworICAgIHZvaWQgdGVzdChTdHJpbmcgczEsIFN0cmluZyA8Y2FyZXQ+czIpIHsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKHMxKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKHMyKTsKKyAgICB9CisKKyAgICB2b2lkIGNhbGxUZXN0KCkgeworICAgICAgICBTdHJpbmcgcyA9ICIiOworICAgICAgICBTdHJpbmcgdCA9IHM7CisgICAgICAgIHRlc3QocywgdCk7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVBhcmFtZXRlci9SZWZMb2NhbFdpdGhMb2NhbC5qYXZhLmFmdGVyIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVBhcmFtZXRlci9SZWZMb2NhbFdpdGhMb2NhbC5qYXZhLmFmdGVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIwZDE5M2EKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lUGFyYW1ldGVyL1JlZkxvY2FsV2l0aExvY2FsLmphdmEuYWZ0ZXIKQEAgLTAsMCArMSwxMSBAQAorcHVibGljIGNsYXNzIEEgeworICAgIHZvaWQgdGVzdChTdHJpbmcgczEpIHsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKHMxKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKHMxKTsKKyAgICB9CisKKyAgICB2b2lkIGNhbGxUZXN0KCkgeworICAgICAgICBTdHJpbmcgcyA9ICIiOworICAgICAgICB0ZXN0KHMpOworICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVQYXJhbWV0ZXIvUmVmTWV0aG9kLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lUGFyYW1ldGVyL1JlZk1ldGhvZC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZmZGVkZmYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lUGFyYW1ldGVyL1JlZk1ldGhvZC5qYXZhCkBAIC0wLDAgKzEsMTMgQEAKK3B1YmxpYyBjbGFzcyBBIHsKKyAgICB2b2lkIHRlc3QoU3RyaW5nIDxjYXJldD5zKSB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihzKTsKKyAgICB9CisKKyAgICB2b2lkIGNhbGxUZXN0KCkgeworICAgICAgICB0ZXN0KG15TWV0aG9kKCkpOworICAgIH0KKworICAgIFN0cmluZyBteU1ldGhvZCgpIHsKKyAgICAgICAgcmV0dXJuICIiOworICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVQYXJhbWV0ZXIvUmVmTWV0aG9kLmphdmEuYWZ0ZXIgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lUGFyYW1ldGVyL1JlZk1ldGhvZC5qYXZhLmFmdGVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU5NWZlNWIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lUGFyYW1ldGVyL1JlZk1ldGhvZC5qYXZhLmFmdGVyCkBAIC0wLDAgKzEsMTQgQEAKK3B1YmxpYyBjbGFzcyBBIHsKKyAgICB2b2lkIHRlc3QoKSB7CisgICAgICAgIFN0cmluZyBzID0gbXlNZXRob2QoKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKHMpOworICAgIH0KKworICAgIHZvaWQgY2FsbFRlc3QoKSB7CisgICAgICAgIHRlc3QoKTsKKyAgICB9CisKKyAgICBTdHJpbmcgbXlNZXRob2QoKSB7CisgICAgICAgIHJldHVybiAiIjsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lUGFyYW1ldGVyL1JlZk1ldGhvZE9uTG9jYWwuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVQYXJhbWV0ZXIvUmVmTWV0aG9kT25Mb2NhbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlkN2VhMzYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lUGFyYW1ldGVyL1JlZk1ldGhvZE9uTG9jYWwuamF2YQpAQCAtMCwwICsxLDExIEBACitwdWJsaWMgY2xhc3MgQSB7CisgICAgdm9pZCB0ZXN0KFN0cmluZyBzLCBpbnQgPGNhcmV0PmwpIHsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKHMpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4obCk7CisgICAgfQorCisgICAgdm9pZCBjYWxsVGVzdCgpIHsKKyAgICAgICAgU3RyaW5nIGFTdHJpbmcgPSAiYWJjIjsKKyAgICAgICAgdGVzdChhU3RyaW5nLCBhU3RyaW5nLmxlbmd0aCgpKTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lUGFyYW1ldGVyL1JlZk1ldGhvZE9uTG9jYWwuamF2YS5hZnRlciBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVQYXJhbWV0ZXIvUmVmTWV0aG9kT25Mb2NhbC5qYXZhLmFmdGVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNkYmZjYTkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lUGFyYW1ldGVyL1JlZk1ldGhvZE9uTG9jYWwuamF2YS5hZnRlcgpAQCAtMCwwICsxLDExIEBACitwdWJsaWMgY2xhc3MgQSB7CisgICAgdm9pZCB0ZXN0KFN0cmluZyBzKSB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihzKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKHMubGVuZ3RoKCkpOworICAgIH0KKworICAgIHZvaWQgY2FsbFRlc3QoKSB7CisgICAgICAgIFN0cmluZyBhU3RyaW5nID0gImFiYyI7CisgICAgICAgIHRlc3QoYVN0cmluZyk7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVBhcmFtZXRlci9SZWZOZXdJbm5lci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVBhcmFtZXRlci9SZWZOZXdJbm5lci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhiNTJlYTEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lUGFyYW1ldGVyL1JlZk5ld0lubmVyLmphdmEKQEAgLTAsMCArMSwxNyBAQAorcHVibGljIGNsYXNzIFN1YmplY3QgeworICBwcml2YXRlIGludCBteUludDsKKworICBwdWJsaWMgdm9pZCB3aXRoQ2xhc3MoT2JqZWN0IDxjYXJldD5vKSB7CisgICAgbXlJbnQgKz0gby5oYXNoQ29kZSgpOworICB9Cit9CisKK2NsYXNzIFVzZXIgeworICBwcml2YXRlIHZvaWQgb3BlcigpIHRocm93cyBJT0V4Y2VwdGlvbiB7CisgICAgU3ViamVjdCBzdWJqID0gbmV3IFN1YmplY3QoKTsKKyAgICBzdWJqLndpdGhDbGFzcyhuZXcgTG9jYWwoKSk7CisgIH0KKworICBwcml2YXRlIGNsYXNzIExvY2FsIHsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVBhcmFtZXRlci9SZWZOZXdJbm5lckF2YWlsYWJsZS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVBhcmFtZXRlci9SZWZOZXdJbm5lckF2YWlsYWJsZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmViYWM5NzUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lUGFyYW1ldGVyL1JlZk5ld0lubmVyQXZhaWxhYmxlLmphdmEKQEAgLTAsMCArMSwxNyBAQAorcHVibGljIGNsYXNzIFN1YmplY3QgeworICBwcml2YXRlIGludCBteUludDsKKworICBwdWJsaWMgdm9pZCB3aXRoQ2xhc3MoT2JqZWN0IDxjYXJldD5vKSB7CisgICAgbXlJbnQgKz0gby5oYXNoQ29kZSgpOworICB9Cit9CisKK2NsYXNzIFVzZXIgeworICBwcml2YXRlIHZvaWQgb3BlcigpIHRocm93cyBJT0V4Y2VwdGlvbiB7CisgICAgU3ViamVjdCBzdWJqID0gbmV3IFN1YmplY3QoKTsKKyAgICBzdWJqLndpdGhDbGFzcyhuZXcgTG9jYWwoKSk7CisgIH0KKworICBjbGFzcyBMb2NhbCB7CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVQYXJhbWV0ZXIvUmVmTmV3SW5uZXJBdmFpbGFibGUuamF2YS5hZnRlciBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVQYXJhbWV0ZXIvUmVmTmV3SW5uZXJBdmFpbGFibGUuamF2YS5hZnRlcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOTQ0Y2NhCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVBhcmFtZXRlci9SZWZOZXdJbm5lckF2YWlsYWJsZS5qYXZhLmFmdGVyCkBAIC0wLDAgKzEsMTcgQEAKK3B1YmxpYyBjbGFzcyBTdWJqZWN0IHsKKyAgcHJpdmF0ZSBpbnQgbXlJbnQ7CisKKyAgcHVibGljIHZvaWQgd2l0aENsYXNzKCkgeworICAgIG15SW50ICs9IG5ldyBVc2VyLkxvY2FsKCkuaGFzaENvZGUoKTsKKyAgfQorfQorCitjbGFzcyBVc2VyIHsKKyAgcHJpdmF0ZSB2b2lkIG9wZXIoKSB0aHJvd3MgSU9FeGNlcHRpb24geworICAgIFN1YmplY3Qgc3ViaiA9IG5ldyBTdWJqZWN0KCk7CisgICAgc3Viai53aXRoQ2xhc3MoKTsKKyAgfQorCisgIGNsYXNzIExvY2FsIHsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVBhcmFtZXRlci9SZWZOZXdJbm5lckZvck1ldGhvZC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVBhcmFtZXRlci9SZWZOZXdJbm5lckZvck1ldGhvZC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZlYzM2NjQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lUGFyYW1ldGVyL1JlZk5ld0lubmVyRm9yTWV0aG9kLmphdmEKQEAgLTAsMCArMSwyMSBAQAorcHVibGljIGNsYXNzIFN1YmplY3QgeworICAgIHByaXZhdGUgaW50IG15SW50OworCisgICAgcHVibGljIHZvaWQgd2l0aENsYXNzKE9iamVjdCA8Y2FyZXQ+bykgeworICAgICAgICBteUludCArPSBvLmhhc2hDb2RlKCk7CisgICAgfQorCisgICAgY2xhc3MgVXNlciB7CisgICAgICAgIHByaXZhdGUgdm9pZCBvcGVyKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKKyAgICAgICAgICAgIFN1YmplY3Qgc3ViaiA9IG5ldyBTdWJqZWN0KCk7CisKKyAgICAgICAgICAgIHN1Ymoud2l0aENsYXNzKG5ldyBMb2NhbCgpKTsKKyAgICAgICAgfQorCisKKyAgICB9CisKKyAgICBjbGFzcyBMb2NhbCB7CisgICAgfQorCit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVBhcmFtZXRlci9SZWZOZXdJbm5lckZvck1ldGhvZC5qYXZhLmFmdGVyIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVBhcmFtZXRlci9SZWZOZXdJbm5lckZvck1ldGhvZC5qYXZhLmFmdGVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUxZjg5MTcKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lUGFyYW1ldGVyL1JlZk5ld0lubmVyRm9yTWV0aG9kLmphdmEuYWZ0ZXIKQEAgLTAsMCArMSwyMSBAQAorcHVibGljIGNsYXNzIFN1YmplY3QgeworICAgIHByaXZhdGUgaW50IG15SW50OworCisgICAgcHVibGljIHZvaWQgd2l0aENsYXNzKCkgeworICAgICAgICBteUludCArPSBuZXcgTG9jYWwoKS5oYXNoQ29kZSgpOworICAgIH0KKworICAgIGNsYXNzIFVzZXIgeworICAgICAgICBwcml2YXRlIHZvaWQgb3BlcigpIHRocm93cyBJT0V4Y2VwdGlvbiB7CisgICAgICAgICAgICBTdWJqZWN0IHN1YmogPSBuZXcgU3ViamVjdCgpOworCisgICAgICAgICAgICBzdWJqLndpdGhDbGFzcygpOworICAgICAgICB9CisKKworICAgIH0KKworICAgIGNsYXNzIExvY2FsIHsKKyAgICB9CisKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lUGFyYW1ldGVyL1JlZk5ld0lubmVyRnJvbU1ldGhvZC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVBhcmFtZXRlci9SZWZOZXdJbm5lckZyb21NZXRob2QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mM2Y2NmNiCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVBhcmFtZXRlci9SZWZOZXdJbm5lckZyb21NZXRob2QuamF2YQpAQCAtMCwwICsxLDE2IEBACitwdWJsaWMgY2xhc3MgU3ViamVjdCB7CisgICAgcHJpdmF0ZSBpbnQgbXlJbnQ7CisKKyAgICBwdWJsaWMgdm9pZCB3aXRoQ2xhc3MoT2JqZWN0IDxjYXJldD5vKSB7CisgICAgICAgIG15SW50ICs9IG8uaGFzaENvZGUoKTsKKyAgICB9CisKKyAgICBwcml2YXRlIHZvaWQgb3BlcigpIHRocm93cyBJT0V4Y2VwdGlvbiB7CisgICAgICBTdWJqZWN0IHN1YmogPSBuZXcgU3ViamVjdCgpOworICAgICAgY2xhc3MgTG9jYWwgeworICAgICAgfQorICAgICAgc3Viai53aXRoQ2xhc3MobmV3IExvY2FsKCkpOworICAgIH0KKworCit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVBhcmFtZXRlci9SZWZOZXdJbm5lckluSGllcmFyY2h5QXZhaWxhYmxlLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lUGFyYW1ldGVyL1JlZk5ld0lubmVySW5IaWVyYXJjaHlBdmFpbGFibGUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZmJjMmIzCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVBhcmFtZXRlci9SZWZOZXdJbm5lckluSGllcmFyY2h5QXZhaWxhYmxlLmphdmEKQEAgLTAsMCArMSwxOCBAQAorcHVibGljIGNsYXNzIFN1YmplY3QgeworICBwcml2YXRlIGludCBteUludDsKKworICBwdWJsaWMgdm9pZCB3aXRoQ2xhc3MoT2JqZWN0IDxjYXJldD5vKSB7CisgICAgbXlJbnQgKz0gby5oYXNoQ29kZSgpOworICB9Cit9CisKK2NsYXNzIFVzZXIgeworICBwcml2YXRlIHZvaWQgb3BlcigpIHRocm93cyBJT0V4Y2VwdGlvbiB7CisgICAgU3ViamVjdCBzdWJqID0gbmV3IFN1YmplY3QoKTsKKyAgICBzdWJqLndpdGhDbGFzcyhuZXcgTG9jYWwoKS5uZXcgSW5uZXJMb2NhbCgpKTsKKyAgfQorCisgIGNsYXNzIExvY2FsIHsKKyAgICBjbGFzcyBJbm5lckxvY2FsIHt9CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVQYXJhbWV0ZXIvUmVmTmV3SW5uZXJJbkhpZXJhcmNoeUF2YWlsYWJsZS5qYXZhLmFmdGVyIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVBhcmFtZXRlci9SZWZOZXdJbm5lckluSGllcmFyY2h5QXZhaWxhYmxlLmphdmEuYWZ0ZXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjEyNDc1MAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVQYXJhbWV0ZXIvUmVmTmV3SW5uZXJJbkhpZXJhcmNoeUF2YWlsYWJsZS5qYXZhLmFmdGVyCkBAIC0wLDAgKzEsMTggQEAKK3B1YmxpYyBjbGFzcyBTdWJqZWN0IHsKKyAgcHJpdmF0ZSBpbnQgbXlJbnQ7CisKKyAgcHVibGljIHZvaWQgd2l0aENsYXNzKCkgeworICAgIG15SW50ICs9IG5ldyBVc2VyLkxvY2FsKCkubmV3IElubmVyTG9jYWwoKS5oYXNoQ29kZSgpOworICB9Cit9CisKK2NsYXNzIFVzZXIgeworICBwcml2YXRlIHZvaWQgb3BlcigpIHRocm93cyBJT0V4Y2VwdGlvbiB7CisgICAgU3ViamVjdCBzdWJqID0gbmV3IFN1YmplY3QoKTsKKyAgICBzdWJqLndpdGhDbGFzcygpOworICB9CisKKyAgY2xhc3MgTG9jYWwgeworICAgIGNsYXNzIElubmVyTG9jYWwge30KKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVBhcmFtZXRlci9SZWZOZXdMb2NhbC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVBhcmFtZXRlci9SZWZOZXdMb2NhbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM5NDg5NzIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lUGFyYW1ldGVyL1JlZk5ld0xvY2FsLmphdmEKQEAgLTAsMCArMSwxOCBAQAorcHVibGljIGNsYXNzIFN1YmplY3QgeworICBwcml2YXRlIGludCBteUludDsKKworICBwdWJsaWMgdm9pZCB3aXRoQ2xhc3MoT2JqZWN0IDxjYXJldD5vKSB7CisgICAgbXlJbnQgKz0gby5oYXNoQ29kZSgpOworICB9Cit9CisKK2NsYXNzIFVzZXIgeworICBwcml2YXRlIHZvaWQgb3BlcigpIHRocm93cyBJT0V4Y2VwdGlvbiB7CisgICAgU3ViamVjdCBzdWJqID0gbmV3IFN1YmplY3QoKTsKKyAgICBjbGFzcyBMb2NhbCB7CisgICAgfQorICAgIHN1Ymoud2l0aENsYXNzKG5ldyBMb2NhbCgpKTsKKyAgfQorCisKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVQYXJhbWV0ZXIvUmVmTmV3VG9wTGV2ZWwuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVQYXJhbWV0ZXIvUmVmTmV3VG9wTGV2ZWwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNTIxMmIyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVBhcmFtZXRlci9SZWZOZXdUb3BMZXZlbC5qYXZhCkBAIC0wLDAgKzEsMTYgQEAKK3B1YmxpYyBjbGFzcyBTdWJqZWN0IHsKKyAgcHJpdmF0ZSBpbnQgbXlJbnQ7CisKKyAgcHVibGljIHZvaWQgd2l0aENsYXNzKE9iamVjdCA8Y2FyZXQ+bykgeworICAgIG15SW50ICs9IG8uaGFzaENvZGUoKTsKKyAgfQorfQorCitjbGFzcyBVc2VyIHsKKyAgcHJpdmF0ZSB2b2lkIG9wZXIoKSB0aHJvd3MgSU9FeGNlcHRpb24geworICAgIFN1YmplY3Qgc3ViaiA9IG5ldyBTdWJqZWN0KCk7CisgICAgc3Viai53aXRoQ2xhc3MobmV3IFRvcExldmVsKCkpOworICB9Cit9CisKK2NsYXNzIFRvcExldmVsIHt9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVBhcmFtZXRlci9SZWZOZXdUb3BMZXZlbC5qYXZhLmFmdGVyIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVBhcmFtZXRlci9SZWZOZXdUb3BMZXZlbC5qYXZhLmFmdGVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgyYmNhY2MKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lUGFyYW1ldGVyL1JlZk5ld1RvcExldmVsLmphdmEuYWZ0ZXIKQEAgLTAsMCArMSwxNiBAQAorcHVibGljIGNsYXNzIFN1YmplY3QgeworICBwcml2YXRlIGludCBteUludDsKKworICBwdWJsaWMgdm9pZCB3aXRoQ2xhc3MoKSB7CisgICAgbXlJbnQgKz0gbmV3IFRvcExldmVsKCkuaGFzaENvZGUoKTsKKyAgfQorfQorCitjbGFzcyBVc2VyIHsKKyAgcHJpdmF0ZSB2b2lkIG9wZXIoKSB0aHJvd3MgSU9FeGNlcHRpb24geworICAgIFN1YmplY3Qgc3ViaiA9IG5ldyBTdWJqZWN0KCk7CisgICAgc3Viai53aXRoQ2xhc3MoKTsKKyAgfQorfQorCitjbGFzcyBUb3BMZXZlbCB7fQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVQYXJhbWV0ZXIvUmVmTm9uU3RhdGljLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lUGFyYW1ldGVyL1JlZk5vblN0YXRpYy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUwOTdiNmMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lUGFyYW1ldGVyL1JlZk5vblN0YXRpYy5qYXZhCkBAIC0wLDAgKzEsMTggQEAKK3B1YmxpYyBjbGFzcyBFeHBEYXRhIHsKKworICBwcml2YXRlIE9iamVjdCBwcm92aWRlT2JqZWN0KCkgeworICAgIHJldHVybiBuZXcgT2JqZWN0KCk7CisgIH0KKworICBwdWJsaWMgc3RhdGljIHZvaWQgdXNlU3RhdGljKE9iamVjdCBwKSB7CisgICAgU3lzdGVtLm91dC5wcmludGxuKHApOworICB9CisKKyAgcHVibGljIHZvaWQgY29udGV4dCgpIHsKKyAgICBpbmxpbmVFKHByb3ZpZGVPYmplY3QoKSk7CisgIH0KKworICBwdWJsaWMgc3RhdGljIHZvaWQgaW5saW5lRShPYmplY3QgPGNhcmV0PnN1YmopIHsKKyAgICB1c2VTdGF0aWMoc3Viaik7CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVQYXJhbWV0ZXIvUmVmTm9uU3RhdGljQ2xhc3MuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVQYXJhbWV0ZXIvUmVmTm9uU3RhdGljQ2xhc3MuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MGJmNTFmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVBhcmFtZXRlci9SZWZOb25TdGF0aWNDbGFzcy5qYXZhCkBAIC0wLDAgKzEsMjAgQEAKK3B1YmxpYyBjbGFzcyBFeHBEYXRhIHsKKworICBwcml2YXRlIE9iamVjdCBwcm92aWRlT2JqZWN0KCkgeworICAgIHJldHVybiBuZXcgT2JqZWN0KCk7CisgIH0KKworICBwdWJsaWMgc3RhdGljIHZvaWQgdXNlU3RhdGljKE9iamVjdCBwKSB7CisgICAgU3lzdGVtLm91dC5wcmludGxuKHApOworICB9CisKKyAgcHVibGljIHZvaWQgY29udGV4dCgpIHsKKyAgICBpbmxpbmVFKG5ldyBERCgpKTsKKyAgfQorCisgIHB1YmxpYyBzdGF0aWMgdm9pZCBpbmxpbmVFKE9iamVjdCA8Y2FyZXQ+c3ViaikgeworICAgIHVzZVN0YXRpYyhzdWJqKTsKKyAgfQorCisgIGNsYXNzIEREIHt9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lUGFyYW1ldGVyL1JlZk91dGVyVGhpcy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVBhcmFtZXRlci9SZWZPdXRlclRoaXMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lM2VmNjcyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVBhcmFtZXRlci9SZWZPdXRlclRoaXMuamF2YQpAQCAtMCwwICsxLDE0IEBACitwdWJsaWMgY2xhc3MgU3ViamVjdCB7CisgIHByaXZhdGUgaW50IG15SW50OworCisgIHB1YmxpYyB2b2lkIHdpdGhDbGFzcyhPYmplY3QgPGNhcmV0Pm8pIHsKKyAgICBteUludCArPSBvLmhhc2hDb2RlKCk7CisgIH0KK30KKworY2xhc3MgVXNlciB7CisgIHByaXZhdGUgdm9pZCBvcGVyKCkgeworICAgIFN1YmplY3Qgc3ViaiA9IG5ldyBTdWJqZWN0KCk7CisgICAgc3Viai53aXRoQ2xhc3ModGhpcyk7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lUGFyYW1ldGVyL1JlZlF1YWxpZmllZFRoaXMuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVQYXJhbWV0ZXIvUmVmUXVhbGlmaWVkVGhpcy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEwOGFhNmEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lUGFyYW1ldGVyL1JlZlF1YWxpZmllZFRoaXMuamF2YQpAQCAtMCwwICsxLDE0IEBACitjbGFzcyBPdXRlciB7CisgIGNsYXNzIFVzZXIgeworICAgIHB1YmxpYyBjbGFzcyBTdWJqZWN0IHsKKyAgICAgIHB1YmxpYyB2b2lkIHdpdGhDbGFzcyhPYmplY3QgPGNhcmV0Pm8pIHsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKG8udG9TdHJpbmcoKSk7CisgICAgICB9CisgICAgfQorCisgICAgcHJpdmF0ZSB2b2lkIG9wZXIoKSB7CisgICAgICBTdWJqZWN0IHN1YmogPSBuZXcgU3ViamVjdCgpOworICAgICAgc3Viai53aXRoQ2xhc3MoT3V0ZXIudGhpcyk7CisgICAgfQorICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lUGFyYW1ldGVyL1JlZlF1YWxpZmllZFRoaXMuamF2YS5hZnRlciBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVQYXJhbWV0ZXIvUmVmUXVhbGlmaWVkVGhpcy5qYXZhLmFmdGVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJlMjA5NWQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lUGFyYW1ldGVyL1JlZlF1YWxpZmllZFRoaXMuamF2YS5hZnRlcgpAQCAtMCwwICsxLDE0IEBACitjbGFzcyBPdXRlciB7CisgIGNsYXNzIFVzZXIgeworICAgIHB1YmxpYyBjbGFzcyBTdWJqZWN0IHsKKyAgICAgIHB1YmxpYyB2b2lkIHdpdGhDbGFzcygpIHsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKE91dGVyLnRoaXMudG9TdHJpbmcoKSk7CisgICAgICB9CisgICAgfQorCisgICAgcHJpdmF0ZSB2b2lkIG9wZXIoKSB7CisgICAgICBTdWJqZWN0IHN1YmogPSBuZXcgU3ViamVjdCgpOworICAgICAgc3Viai53aXRoQ2xhc3MoKTsKKyAgICB9CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVQYXJhbWV0ZXIvUmVmU2FtZU5vbkZpbmFsRmllbGQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVQYXJhbWV0ZXIvUmVmU2FtZU5vbkZpbmFsRmllbGQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YThhOGExCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVBhcmFtZXRlci9SZWZTYW1lTm9uRmluYWxGaWVsZC5qYXZhCkBAIC0wLDAgKzEsMTMgQEAKK3B1YmxpYyBjbGFzcyBTdWJqZWN0IHsKKyAgcHJpdmF0ZSBpbnQgbXlJbnQ7CisgIHByaXZhdGUgaW50IHQ7CisKKyAgcHVibGljIHZvaWQgd3AoaW50IDxjYXJldD5wKSB7CisgICAgbXlJbnQgKz0gcDsKKyAgfQorCisgIHZvaWQgZm9vKCkgeworICAgICAgd3AodCk7CisgICAgICB3cCh0KTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVQYXJhbWV0ZXIvUmVmU2FtZU5vbkZpbmFsRmllbGQuamF2YS5hZnRlciBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVQYXJhbWV0ZXIvUmVmU2FtZU5vbkZpbmFsRmllbGQuamF2YS5hZnRlcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NWIzOTNlCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVBhcmFtZXRlci9SZWZTYW1lTm9uRmluYWxGaWVsZC5qYXZhLmFmdGVyCkBAIC0wLDAgKzEsMTMgQEAKK3B1YmxpYyBjbGFzcyBTdWJqZWN0IHsKKyAgcHJpdmF0ZSBpbnQgbXlJbnQ7CisgIHByaXZhdGUgaW50IHQ7CisKKyAgcHVibGljIHZvaWQgd3AoKSB7CisgICAgbXlJbnQgKz0gdDsKKyAgfQorCisgIHZvaWQgZm9vKCkgeworICAgICAgd3AoKTsKKyAgICAgIHdwKCk7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lUGFyYW1ldGVyL1JlZlNhbWVOb25GaW5hbEZpZWxkT3RoZXJPYmplY3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVQYXJhbWV0ZXIvUmVmU2FtZU5vbkZpbmFsRmllbGRPdGhlck9iamVjdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMzMWZiN2UKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lUGFyYW1ldGVyL1JlZlNhbWVOb25GaW5hbEZpZWxkT3RoZXJPYmplY3QuamF2YQpAQCAtMCwwICsxLDEzIEBACitwdWJsaWMgY2xhc3MgU3ViamVjdCB7CisgIHByaXZhdGUgaW50IG15SW50OworICBwcml2YXRlIGludCB0OworCisgIHB1YmxpYyB2b2lkIHdwKGludCA8Y2FyZXQ+cCkgeworICAgIG15SW50ICs9IHA7CisgIH0KKworICB2b2lkIGZvbyhTdWJqZWN0IHMpIHsKKyAgICAgIHdwKHMudCk7CisgICAgICB3cCh0KTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVQYXJhbWV0ZXIvUmVmU2VsZkZpZWxkLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lUGFyYW1ldGVyL1JlZlNlbGZGaWVsZC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIwOGNmZTAKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lUGFyYW1ldGVyL1JlZlNlbGZGaWVsZC5qYXZhCkBAIC0wLDAgKzEsMTkgQEAKK3B1YmxpYyBjbGFzcyBBIHsKKyAgICBwcml2YXRlIGZpbmFsIFN0cmluZyBteURhdGE7CisKKyAgICBwdWJsaWMgQShTdHJpbmcgc29tZURhdGEpIHsKKyAgICAgICAgbXlEYXRhID0gc29tZURhdGE7CisgICAgfQorCisgICAgdm9pZCB0ZXN0KFN0cmluZyA8Y2FyZXQ+ZGF0YSkgeworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oZGF0YSk7CisgICAgfQorCisgICAgdm9pZCBjYWxsVGVzdCgpIHsKKyAgICAgICAgdGVzdChteURhdGEpOyAgICAgICAgCisgICAgfQorCisgICAgdm9pZCBhbHNvQ2FsbFRlc3QoKSB7CisgICAgICAgIHRlc3QobXlEYXRhKTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVBhcmFtZXRlci9SZWZTZWxmRmllbGQuamF2YS5hZnRlciBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVQYXJhbWV0ZXIvUmVmU2VsZkZpZWxkLmphdmEuYWZ0ZXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTlkODRiOAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVQYXJhbWV0ZXIvUmVmU2VsZkZpZWxkLmphdmEuYWZ0ZXIKQEAgLTAsMCArMSwxOSBAQAorcHVibGljIGNsYXNzIEEgeworICAgIHByaXZhdGUgZmluYWwgU3RyaW5nIG15RGF0YTsKKworICAgIHB1YmxpYyBBKFN0cmluZyBzb21lRGF0YSkgeworICAgICAgICBteURhdGEgPSBzb21lRGF0YTsKKyAgICB9CisKKyAgICB2b2lkIHRlc3QoKSB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihteURhdGEpOworICAgIH0KKworICAgIHZvaWQgY2FsbFRlc3QoKSB7CisgICAgICAgIHRlc3QoKTsgICAgICAgIAorICAgIH0KKworICAgIHZvaWQgYWxzb0NhbGxUZXN0KCkgeworICAgICAgICB0ZXN0KCk7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVQYXJhbWV0ZXIvUmVmU3RhdGljRmllbGQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVQYXJhbWV0ZXIvUmVmU3RhdGljRmllbGQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZWJiNmY2Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVBhcmFtZXRlci9SZWZTdGF0aWNGaWVsZC5qYXZhCkBAIC0wLDAgKzEsMTMgQEAKK3B1YmxpYyBjbGFzcyBBIHsKKyAgICB2b2lkIHRlc3QoU3RyaW5nIDxjYXJldD5zKSB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihzKTsKKyAgICB9CisKKyAgICB2b2lkIGNhbGxUZXN0KCkgeworICAgICAgICB0ZXN0KEIuZik7CisgICAgfQorfQorCitjbGFzcyBCIHsKKyAgICBwdWJsaWMgc3RhdGljIFN0cmluZyBmID0gbnVsbDsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lUGFyYW1ldGVyL1JlZlN0YXRpY0ZpZWxkLmphdmEuYWZ0ZXIgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lUGFyYW1ldGVyL1JlZlN0YXRpY0ZpZWxkLmphdmEuYWZ0ZXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjE0NGQzZgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVQYXJhbWV0ZXIvUmVmU3RhdGljRmllbGQuamF2YS5hZnRlcgpAQCAtMCwwICsxLDE0IEBACitwdWJsaWMgY2xhc3MgQSB7CisgICAgdm9pZCB0ZXN0KCkgeworICAgICAgICBTdHJpbmcgcyA9IEIuZjsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKHMpOworICAgIH0KKworICAgIHZvaWQgY2FsbFRlc3QoKSB7CisgICAgICAgIHRlc3QoKTsKKyAgICB9Cit9CisKK2NsYXNzIEIgeworICAgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGYgPSBudWxsOworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVQYXJhbWV0ZXIvUmVmU3RhdGljTWV0aG9kLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lUGFyYW1ldGVyL1JlZlN0YXRpY01ldGhvZC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQyOWZhM2IKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lUGFyYW1ldGVyL1JlZlN0YXRpY01ldGhvZC5qYXZhCkBAIC0wLDAgKzEsMTYgQEAKK3B1YmxpYyBjbGFzcyBTdGF0aWNSZWZNb3ZlIHsKKyAgcHVibGljIHN0YXRpYyBpbnQgaW5pdCgpIHsKKyAgICByZXR1cm4gMTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIGNvbnRleHQoKSB7CisgICAgU3RhdGljUmVmTW92ZVN1YmplY3QgdiA9IG5ldyBTdGF0aWNSZWZNb3ZlU3ViamVjdCgpOworICAgIHYuc3ViamVjdChpbml0KCkpOworICB9Cit9CisKK2NsYXNzIFN0YXRpY1JlZk1vdmVTdWJqZWN0IHsKKyAgcHVibGljIHZvaWQgc3ViamVjdChpbnQgPGNhcmV0PnN1YmopIHsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oc3Viaik7CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVQYXJhbWV0ZXIvUmVmU3RhdGljTWV0aG9kLmphdmEuYWZ0ZXIgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lUGFyYW1ldGVyL1JlZlN0YXRpY01ldGhvZC5qYXZhLmFmdGVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZmMDc2ZTcKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lUGFyYW1ldGVyL1JlZlN0YXRpY01ldGhvZC5qYXZhLmFmdGVyCkBAIC0wLDAgKzEsMTcgQEAKK3B1YmxpYyBjbGFzcyBTdGF0aWNSZWZNb3ZlIHsKKyAgcHVibGljIHN0YXRpYyBpbnQgaW5pdCgpIHsKKyAgICByZXR1cm4gMTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIGNvbnRleHQoKSB7CisgICAgU3RhdGljUmVmTW92ZVN1YmplY3QgdiA9IG5ldyBTdGF0aWNSZWZNb3ZlU3ViamVjdCgpOworICAgIHYuc3ViamVjdCgpOworICB9Cit9CisKK2NsYXNzIFN0YXRpY1JlZk1vdmVTdWJqZWN0IHsKKyAgcHVibGljIHZvaWQgc3ViamVjdCgpIHsKKyAgICAgIGludCBzdWJqID0gU3RhdGljUmVmTW92ZS5pbml0KCk7CisgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oc3Viaik7CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVQYXJhbWV0ZXIvUmVmVGhpcy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVBhcmFtZXRlci9SZWZUaGlzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTlkY2FjNgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVQYXJhbWV0ZXIvUmVmVGhpcy5qYXZhCkBAIC0wLDAgKzEsMTUgQEAKK2NsYXNzIFVzZXIgeworICBwdWJsaWMgY2xhc3MgU3ViamVjdCB7CisgICAgcHJpdmF0ZSBpbnQgbXlJbnQ7CisKKyAgICBwdWJsaWMgdm9pZCB3aXRoQ2xhc3MoT2JqZWN0IDxjYXJldD5vKSB7CisgICAgICBteUludCArPSBvLmhhc2hDb2RlKCk7CisgICAgfQorICB9CisKKyAgcHJpdmF0ZSB2b2lkIG9wZXIoKSB7CisgICAgU3ViamVjdCBzdWJqID0gbmV3IFN1YmplY3QoKTsKKyAgICBzdWJqLndpdGhDbGFzcyh0aGlzKTsKKyAgfQorfQorCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lUGFyYW1ldGVyL1JlZlRoaXMuamF2YS5hZnRlciBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVQYXJhbWV0ZXIvUmVmVGhpcy5qYXZhLmFmdGVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgwZTkzNjYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lUGFyYW1ldGVyL1JlZlRoaXMuamF2YS5hZnRlcgpAQCAtMCwwICsxLDE1IEBACitjbGFzcyBVc2VyIHsKKyAgcHVibGljIGNsYXNzIFN1YmplY3QgeworICAgIHByaXZhdGUgaW50IG15SW50OworCisgICAgcHVibGljIHZvaWQgd2l0aENsYXNzKCkgeworICAgICAgbXlJbnQgKz0gVXNlci50aGlzLmhhc2hDb2RlKCk7CisgICAgfQorICB9CisKKyAgcHJpdmF0ZSB2b2lkIG9wZXIoKSB7CisgICAgU3ViamVjdCBzdWJqID0gbmV3IFN1YmplY3QoKTsKKyAgICBzdWJqLndpdGhDbGFzcygpOworICB9Cit9CisKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVQYXJhbWV0ZXIvUmVmVGhpc0Zyb21TdGF0aWMuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVQYXJhbWV0ZXIvUmVmVGhpc0Zyb21TdGF0aWMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hY2M5M2NjCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVBhcmFtZXRlci9SZWZUaGlzRnJvbVN0YXRpYy5qYXZhCkBAIC0wLDAgKzEsMTggQEAKK3B1YmxpYyBjbGFzcyBFeHBEYXRhIHsKKworICBwcml2YXRlIE9iamVjdCBwcm92aWRlT2JqZWN0KCkgeworICAgIHJldHVybiBuZXcgT2JqZWN0KCk7CisgIH0KKworICBwdWJsaWMgc3RhdGljIHZvaWQgdXNlU3RhdGljKE9iamVjdCBwKSB7CisgICAgU3lzdGVtLm91dC5wcmludGxuKHApOworICB9CisKKyAgcHVibGljIHZvaWQgY29udGV4dCgpIHsKKyAgICBpbmxpbmVFKHRoaXMpOworICB9CisKKyAgcHVibGljIHN0YXRpYyB2b2lkIGlubGluZUUoT2JqZWN0IDxjYXJldD5zdWJqKSB7CisgICAgdXNlU3RhdGljKHN1YmopOworICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lUGFyYW1ldGVyL1NhbWVWYWx1ZS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVBhcmFtZXRlci9TYW1lVmFsdWUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNzQ4ZTkwCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVBhcmFtZXRlci9TYW1lVmFsdWUuamF2YQpAQCAtMCwwICsxLDkgQEAKK3B1YmxpYyBjbGFzcyBBIHsKKyAgdm9pZCB0ZXN0KGludCA8Y2FyZXQ+aSkgeworICAgIGludCBqID0gaTsKKyAgfQorCisgIHZvaWQgY2FsbFRlc3QoKSB7CisgICAgdGVzdCgwKTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVQYXJhbWV0ZXIvU2FtZVZhbHVlLmphdmEuYWZ0ZXIgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lUGFyYW1ldGVyL1NhbWVWYWx1ZS5qYXZhLmFmdGVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIwOGQxOTkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lUGFyYW1ldGVyL1NhbWVWYWx1ZS5qYXZhLmFmdGVyCkBAIC0wLDAgKzEsOSBAQAorcHVibGljIGNsYXNzIEEgeworICB2b2lkIHRlc3QoKSB7CisgICAgaW50IGogPSAwOworICB9CisKKyAgdm9pZCBjYWxsVGVzdCgpIHsKKyAgICB0ZXN0KCk7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lUGFyYW1ldGVyL1N0YXRpY0ZpbmFsRmllbGQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVQYXJhbWV0ZXIvU3RhdGljRmluYWxGaWVsZC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEwMjBmMDQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lUGFyYW1ldGVyL1N0YXRpY0ZpbmFsRmllbGQuamF2YQpAQCAtMCwwICsxLDE1IEBACitwdWJsaWMgY2xhc3MgQSB7CisgIHZvaWQgdGVzdChTdHJpbmdbXSA8Y2FyZXQ+dmFsdWUpIHsKKyAgICBTdHJpbmdbXSBteVZhbHVlID0gdmFsdWU7CisgIH0KKworICB2b2lkIGNhbGxUZXN0KCkgeworICAgIHRlc3QoQ09OU1QpOworICB9CisKKyAgdm9pZCBjYWxsVGVzdDIoKSB7CisgICAgdGVzdChDT05TVCk7CisgIH0KKworICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZ1tdIENPTlNUID0gbmV3IFN0cmluZ1tdIHsgIkEiLCAiQiIgfTsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lUGFyYW1ldGVyL1N0YXRpY0ZpbmFsRmllbGQuamF2YS5hZnRlciBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVQYXJhbWV0ZXIvU3RhdGljRmluYWxGaWVsZC5qYXZhLmFmdGVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJlNWU2NjgKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lUGFyYW1ldGVyL1N0YXRpY0ZpbmFsRmllbGQuamF2YS5hZnRlcgpAQCAtMCwwICsxLDE1IEBACitwdWJsaWMgY2xhc3MgQSB7CisgIHZvaWQgdGVzdCgpIHsKKyAgICBTdHJpbmdbXSBteVZhbHVlID0gQ09OU1Q7CisgIH0KKworICB2b2lkIGNhbGxUZXN0KCkgeworICAgIHRlc3QoKTsKKyAgfQorCisgIHZvaWQgY2FsbFRlc3QyKCkgeworICAgIHRlc3QoKTsKKyAgfQorCisgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nW10gQ09OU1QgPSBuZXcgU3RyaW5nW10geyAiQSIsICJCIiB9OworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVQYXJhbWV0ZXIvVmlzaWJpbGl0eS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVBhcmFtZXRlci9WaXNpYmlsaXR5LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWJjYTlkYwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVQYXJhbWV0ZXIvVmlzaWJpbGl0eS5qYXZhCkBAIC0wLDAgKzEsMjQgQEAKK3B1YmxpYyBjbGFzcyBWaXNpYmlsaXR5UGlubGluZSB7CisgICAgcHJpdmF0ZSBzdGF0aWMgRGlmZmVyZW50U2NvcGUgY2FzaGVkT2JqZWN0ID0gbmV3IERpZmZlcmVudFNjb3BlKCk7CisKKyAgICBwcml2YXRlIHN0YXRpYyBEaWZmZXJlbnRTY29wZSBwcm92aWRlT2JqZWN0KCkgeworICAgICAgICByZXR1cm4gbmV3IERpZmZlcmVudFNjb3BlKCk7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgY29udGV4dCgpIHsKKyAgICAgICAgRGlmZmVyZW50U2NvcGUgdkIgPSBuZXcgRGlmZmVyZW50U2NvcGUoKTsKKyAgICAgICAgdkIuaW5saW5lQihwcm92aWRlT2JqZWN0KCkpOworICAgIH0KK30KKworY2xhc3MgRGlmZmVyZW50U2NvcGUgeworICAgIHByaXZhdGUgaW50IHZhbHVlID0gMTsKKworICAgIHB1YmxpYyB2b2lkIG11dGF0ZSgpIHsKKyAgICAgICAgdmFsdWUrKzsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBpbmxpbmVCKERpZmZlcmVudFNjb3BlIDxjYXJldD5zdWJqKSB7CisgICAgICAgIHN1YmoubXV0YXRlKCk7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVBhcmFtZXRlci9Xcml0ZUFjY2Vzcy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVBhcmFtZXRlci9Xcml0ZUFjY2Vzcy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkyZDNlMjkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lUGFyYW1ldGVyL1dyaXRlQWNjZXNzLmphdmEKQEAgLTAsMCArMSwzMSBAQAorcHVibGljIGNsYXNzIEV4cERhdGEgeworICBwdWJsaWMgdm9pZCB1c2UoT2JqZWN0IHApIHsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4ocCk7CisgIH0KKworICBwdWJsaWMgdm9pZCBjb250ZXh0KCkgeworICAgIE9iamVjdFR5cGUgdjEgPSBuZXcgT2JqZWN0VHlwZSgpOworICAgIHYxID0gdjEucHJvdmlkZSgpOworICAgIGlubGluZTEodjEpOworCisgICAgaW50IHYyID0gMTsKKyAgICB2MiArPSBTeXN0ZW0uaWRlbnRpdHlIYXNoQ29kZShuZXcgT2JqZWN0KCkpOworICAgIGlubGluZTIodjIpOworICB9CisKKyAgcHVibGljIHZvaWQgaW5saW5lMShPYmplY3RUeXBlIDxjYXJldD5zdWJqKSB7CisgICAgdXNlKHN1YmopOworICB9CisKKyAgcHVibGljIHZvaWQgaW5saW5lMihpbnQgc3ViaikgeworICAgIHVzZShzdWJqKTsKKyAgfQorfQorCitjbGFzcyBPYmplY3RUeXBlIHsKKyAgcHJpdmF0ZSBpbnQgdmFsdWUgPSAxOworCisgIHB1YmxpYyBPYmplY3RUeXBlIHByb3ZpZGUoKSB7CisgICAgcmV0dXJuIG5ldyBPYmplY3RUeXBlKCk7CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVTdXBlckNsYXNzL2Fic3RyYWN0T3ZlcnJpZGVzL2FmdGVyL1Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVTdXBlckNsYXNzL2Fic3RyYWN0T3ZlcnJpZGVzL2FmdGVyL1Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYzM4ZDYwCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVN1cGVyQ2xhc3MvYWJzdHJhY3RPdmVycmlkZXMvYWZ0ZXIvVGVzdC5qYXZhCkBAIC0wLDAgKzEsNyBAQAorY2xhc3MgVGVzdCB7CisgIHB1YmxpYyB2b2lkIGNvbnRleHQoKSB7CisgICAgbWV0aG9kKCk7CisgIH0KKworICBwdWJsaWMgdm9pZCBtZXRob2QoKSB7fQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVTdXBlckNsYXNzL2Fic3RyYWN0T3ZlcnJpZGVzL2JlZm9yZS9TdXBlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVN1cGVyQ2xhc3MvYWJzdHJhY3RPdmVycmlkZXMvYmVmb3JlL1N1cGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2U5MWRmMgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVTdXBlckNsYXNzL2Fic3RyYWN0T3ZlcnJpZGVzL2JlZm9yZS9TdXBlci5qYXZhCkBAIC0wLDAgKzEsMyBAQAorYWJzdHJhY3QgY2xhc3MgU3VwZXIgeworICAgcHVibGljIGFic3RyYWN0IHZvaWQgbWV0aG9kKCkge30KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lU3VwZXJDbGFzcy9hYnN0cmFjdE92ZXJyaWRlcy9iZWZvcmUvVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVN1cGVyQ2xhc3MvYWJzdHJhY3RPdmVycmlkZXMvYmVmb3JlL1Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYjhmYjYwCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVN1cGVyQ2xhc3MvYWJzdHJhY3RPdmVycmlkZXMvYmVmb3JlL1Rlc3QuamF2YQpAQCAtMCwwICsxLDggQEAKK2NsYXNzIFRlc3QgZXh0ZW5kcyBTdXBlcnsKKyAgcHVibGljIHZvaWQgY29udGV4dCgpIHsKKyAgICBzdXBlci5tZXRob2QoKTsKKyAgfQorCisgIEBPdmVycmlkZQorICBwdWJsaWMgdm9pZCBtZXRob2QoKSB7fQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVTdXBlckNsYXNzL2NoaWxkQ29uc3RydWN0b3JJbXBsaWNpdGx5Q2FsbHNTdXBlci9hZnRlci9UZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lU3VwZXJDbGFzcy9jaGlsZENvbnN0cnVjdG9ySW1wbGljaXRseUNhbGxzU3VwZXIvYWZ0ZXIvVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIzNzNiN2MKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lU3VwZXJDbGFzcy9jaGlsZENvbnN0cnVjdG9ySW1wbGljaXRseUNhbGxzU3VwZXIvYWZ0ZXIvVGVzdC5qYXZhCkBAIC0wLDAgKzEsNiBAQAorY2xhc3MgVGVzdCB7CisgICBUZXN0KCkgeworICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU3VwZXIiKTsKKyAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlRlc3QiKTsKKyAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lU3VwZXJDbGFzcy9jaGlsZENvbnN0cnVjdG9ySW1wbGljaXRseUNhbGxzU3VwZXIvYmVmb3JlL1N1cGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lU3VwZXJDbGFzcy9jaGlsZENvbnN0cnVjdG9ySW1wbGljaXRseUNhbGxzU3VwZXIvYmVmb3JlL1N1cGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjcyZTdiNQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVTdXBlckNsYXNzL2NoaWxkQ29uc3RydWN0b3JJbXBsaWNpdGx5Q2FsbHNTdXBlci9iZWZvcmUvU3VwZXIuamF2YQpAQCAtMCwwICsxLDUgQEAKK2NsYXNzIFN1cGVyIHsKKyAgU3VwZXIoKSB7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJTdXBlciIpOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVN1cGVyQ2xhc3MvY2hpbGRDb25zdHJ1Y3RvckltcGxpY2l0bHlDYWxsc1N1cGVyL2JlZm9yZS9UZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lU3VwZXJDbGFzcy9jaGlsZENvbnN0cnVjdG9ySW1wbGljaXRseUNhbGxzU3VwZXIvYmVmb3JlL1Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yN2I5NTEyMAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVTdXBlckNsYXNzL2NoaWxkQ29uc3RydWN0b3JJbXBsaWNpdGx5Q2FsbHNTdXBlci9iZWZvcmUvVGVzdC5qYXZhCkBAIC0wLDAgKzEsNSBAQAorY2xhc3MgVGVzdCBleHRlbmRzIFN1cGVyeworICAgVGVzdCgpIHsKKyAgICAgU3lzdGVtLm91dC5wcmludGxuKCJUZXN0Iik7CisgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVN1cGVyQ2xhc3MvY29uZmxpY3RDb25zdHJ1Y3RvcnMvYWZ0ZXIvVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVN1cGVyQ2xhc3MvY29uZmxpY3RDb25zdHJ1Y3RvcnMvYWZ0ZXIvVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcxZDZmZWMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lU3VwZXJDbGFzcy9jb25mbGljdENvbnN0cnVjdG9ycy9hZnRlci9UZXN0LmphdmEKQEAgLTAsMCArMSw4IEBACitjbGFzcyBUZXN0IHsKKyAgICB2b2lkIGZvbygpIHsKKyAgICAgIFRlc3QgcyA9IG5ldyBUZXN0KCk7CisgICAgICBzLmJhcigpOworICAgIH0KKworICAgIHZvaWQgYmFyKCkge30KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lU3VwZXJDbGFzcy9jb25mbGljdENvbnN0cnVjdG9ycy9iZWZvcmUvU3VwZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVTdXBlckNsYXNzL2NvbmZsaWN0Q29uc3RydWN0b3JzL2JlZm9yZS9TdXBlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc5YTExYzMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lU3VwZXJDbGFzcy9jb25mbGljdENvbnN0cnVjdG9ycy9iZWZvcmUvU3VwZXIuamF2YQpAQCAtMCwwICsxLDggQEAKK2NsYXNzIFN1cGVyIHsKKyAgdm9pZCBmb28oKSB7CisgICAgU3VwZXIgcyA9IG5ldyBTdXBlcigpOworICAgIHMuYmFyKCk7CisgIH0KKworICB2b2lkIGJhcigpIHt9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVN1cGVyQ2xhc3MvY29uZmxpY3RDb25zdHJ1Y3RvcnMvYmVmb3JlL1Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVTdXBlckNsYXNzL2NvbmZsaWN0Q29uc3RydWN0b3JzL2JlZm9yZS9UZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzlkMWE3ZgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVTdXBlckNsYXNzL2NvbmZsaWN0Q29uc3RydWN0b3JzL2JlZm9yZS9UZXN0LmphdmEKQEAgLTAsMCArMSwzIEBACitjbGFzcyBUZXN0IGV4dGVuZHMgU3VwZXJ7CisgIFRlc3QoU3RyaW5nIHMpe30KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lU3VwZXJDbGFzcy9jb25mbGljdEdlbmVyaWNzL2FmdGVyL1VzYWdlLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lU3VwZXJDbGFzcy9jb25mbGljdEdlbmVyaWNzL2FmdGVyL1VzYWdlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDU4NmZhYgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVTdXBlckNsYXNzL2NvbmZsaWN0R2VuZXJpY3MvYWZ0ZXIvVXNhZ2UuamF2YQpAQCAtMCwwICsxLDcgQEAKK2ltcG9ydCBwLlRlc3Q7CisKK2NsYXNzIFVzYWdlIHsKKyAgdm9pZCBiYXIoVGVzdCBzKSB7CisgICAgcy5mb28obnVsbCk7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lU3VwZXJDbGFzcy9jb25mbGljdEdlbmVyaWNzL2FmdGVyL3AvVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVN1cGVyQ2xhc3MvY29uZmxpY3RHZW5lcmljcy9hZnRlci9wL1Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNDNiOGU2Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVN1cGVyQ2xhc3MvY29uZmxpY3RHZW5lcmljcy9hZnRlci9wL1Rlc3QuamF2YQpAQCAtMCwwICsxLDcgQEAKK3BhY2thZ2UgcDsKKworcHVibGljIGNsYXNzIFRlc3QgeworICAgIHB1YmxpYyB2b2lkIGZvbyhTdHJpbmcgdCkgeworICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJIZWxsbyIpOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lU3VwZXJDbGFzcy9jb25mbGljdEdlbmVyaWNzL2FmdGVyL3AxL3QudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVN1cGVyQ2xhc3MvY29uZmxpY3RHZW5lcmljcy9hZnRlci9wMS90LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjlkZTI5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVN1cGVyQ2xhc3MvY29uZmxpY3RHZW5lcmljcy9hZnRlci9wMS90LnR4dApkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVN1cGVyQ2xhc3MvY29uZmxpY3RHZW5lcmljcy9iZWZvcmUvVXNhZ2UuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVTdXBlckNsYXNzL2NvbmZsaWN0R2VuZXJpY3MvYmVmb3JlL1VzYWdlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTk2MDQwNAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVTdXBlckNsYXNzL2NvbmZsaWN0R2VuZXJpY3MvYmVmb3JlL1VzYWdlLmphdmEKQEAgLTAsMCArMSw2IEBACitpbXBvcnQgcDEuKjsKK2NsYXNzIFVzYWdlIHsKKyAgdm9pZCBiYXIoU3VwZXI8SW50ZWdlcj4gcykgeworICAgIHMuZm9vKG51bGwpOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVN1cGVyQ2xhc3MvY29uZmxpY3RHZW5lcmljcy9iZWZvcmUvcC9UZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lU3VwZXJDbGFzcy9jb25mbGljdEdlbmVyaWNzL2JlZm9yZS9wL1Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNWM4YzBmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVN1cGVyQ2xhc3MvY29uZmxpY3RHZW5lcmljcy9iZWZvcmUvcC9UZXN0LmphdmEKQEAgLTAsMCArMSwzIEBACitwYWNrYWdlIHA7CitpbXBvcnQgcDEuKjsKK3B1YmxpYyBjbGFzcyBUZXN0IGV4dGVuZHMgU3VwZXI8U3RyaW5nPiB7fSAKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lU3VwZXJDbGFzcy9jb25mbGljdEdlbmVyaWNzL2JlZm9yZS9wMS9TdXBlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVN1cGVyQ2xhc3MvY29uZmxpY3RHZW5lcmljcy9iZWZvcmUvcDEvU3VwZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNTgwYTAwCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVN1cGVyQ2xhc3MvY29uZmxpY3RHZW5lcmljcy9iZWZvcmUvcDEvU3VwZXIuamF2YQpAQCAtMCwwICsxLDYgQEAKK3BhY2thZ2UgcDE7CitwdWJsaWMgY2xhc3MgU3VwZXI8VD57CisgICBwdWJsaWMgdm9pZCBmb28oVCB0KSB7CisgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSGVsbG8iKTsKKyAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lU3VwZXJDbGFzcy9jb25mbGljdEdlbmVyaWNzL2JlZm9yZS9wMS90LnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVTdXBlckNsYXNzL2NvbmZsaWN0R2VuZXJpY3MvYmVmb3JlL3AxL3QudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2OWRlMjkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lU3VwZXJDbGFzcy9jb25mbGljdEdlbmVyaWNzL2JlZm9yZS9wMS90LnR4dApkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVN1cGVyQ2xhc3MvY29uZmxpY3RNdWx0aXBsZUNvbnN0cnVjdG9ycy9hZnRlci9UZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lU3VwZXJDbGFzcy9jb25mbGljdE11bHRpcGxlQ29uc3RydWN0b3JzL2FmdGVyL1Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MjQ1NmI1Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVN1cGVyQ2xhc3MvY29uZmxpY3RNdWx0aXBsZUNvbnN0cnVjdG9ycy9hZnRlci9UZXN0LmphdmEKQEAgLTAsMCArMSwxMCBAQAorY2xhc3MgVGVzdCB7CisgIFRlc3QoU3RyaW5nIHMsIFN0cmluZyBzMSl7c3VwZXIocyk7fQorCisgICAgdm9pZCBmb28oKSB7CisgICAgICBUZXN0IHMgPSBuZXcgVGVzdCgiIik7CisgICAgICBzLmJhcigpOworICAgIH0KKworICAgIHZvaWQgYmFyKCkge30KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lU3VwZXJDbGFzcy9jb25mbGljdE11bHRpcGxlQ29uc3RydWN0b3JzL2JlZm9yZS9TdXBlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVN1cGVyQ2xhc3MvY29uZmxpY3RNdWx0aXBsZUNvbnN0cnVjdG9ycy9iZWZvcmUvU3VwZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ODczMzdmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVN1cGVyQ2xhc3MvY29uZmxpY3RNdWx0aXBsZUNvbnN0cnVjdG9ycy9iZWZvcmUvU3VwZXIuamF2YQpAQCAtMCwwICsxLDEwIEBACitjbGFzcyBTdXBlciB7CisgIFN1cGVyKFN0cmluZyBzKXt9CisKKyAgdm9pZCBmb28oKSB7CisgICAgU3VwZXIgcyA9IG5ldyBTdXBlcigiIik7CisgICAgcy5iYXIoKTsKKyAgfQorCisgIHZvaWQgYmFyKCkge30KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lU3VwZXJDbGFzcy9jb25mbGljdE11bHRpcGxlQ29uc3RydWN0b3JzL2JlZm9yZS9UZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lU3VwZXJDbGFzcy9jb25mbGljdE11bHRpcGxlQ29uc3RydWN0b3JzL2JlZm9yZS9UZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjNlMmY1ZAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVTdXBlckNsYXNzL2NvbmZsaWN0TXVsdGlwbGVDb25zdHJ1Y3RvcnMvYmVmb3JlL1Rlc3QuamF2YQpAQCAtMCwwICsxLDMgQEAKK2NsYXNzIFRlc3QgZXh0ZW5kcyBTdXBlcnsKKyAgVGVzdChTdHJpbmcgcywgU3RyaW5nIHMxKXtzdXBlcihzKTt9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVN1cGVyQ2xhc3MvZ2VuZXJpY3MvYWZ0ZXIvVXNhZ2UuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVTdXBlckNsYXNzL2dlbmVyaWNzL2FmdGVyL1VzYWdlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTU0OTY5OAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVTdXBlckNsYXNzL2dlbmVyaWNzL2FmdGVyL1VzYWdlLmphdmEKQEAgLTAsMCArMSwxOSBAQAoraW1wb3J0IHAuVGVzdDsKKworY2xhc3MgVXNhZ2UgeworICBUZXN0PFN0cmluZz4gbXlGaWVsZDsKKworICBUZXN0PFN0cmluZz4geHh4KCl7CisgICAgcmV0dXJuIG15RmllbGQ7CisgIH0KKworICBUZXN0PEludGVnZXI+IHh4eHh4KCkgeworICAgIHJldHVybiBudWxsOworICB9CisKKyAgdm9pZCBiYXIoVGVzdDxTdHJpbmc+IHMpIHsKKyAgICBzLmZvbyhudWxsKTsKKyAgfQorCisKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lU3VwZXJDbGFzcy9nZW5lcmljcy9hZnRlci9wL1Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVTdXBlckNsYXNzL2dlbmVyaWNzL2FmdGVyL3AvVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFmZjAxZTkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lU3VwZXJDbGFzcy9nZW5lcmljcy9hZnRlci9wL1Rlc3QuamF2YQpAQCAtMCwwICsxLDcgQEAKK3BhY2thZ2UgcDsKKworcHVibGljIGNsYXNzIFRlc3Q8Uj4geworICAgIHB1YmxpYyB2b2lkIGZvbyhSIHQpIHsKKyAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSGVsbG8iKTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVN1cGVyQ2xhc3MvZ2VuZXJpY3MvYWZ0ZXIvcDEvdC50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lU3VwZXJDbGFzcy9nZW5lcmljcy9hZnRlci9wMS90LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjlkZTI5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVN1cGVyQ2xhc3MvZ2VuZXJpY3MvYWZ0ZXIvcDEvdC50eHQKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVTdXBlckNsYXNzL2dlbmVyaWNzL2JlZm9yZS9Vc2FnZS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVN1cGVyQ2xhc3MvZ2VuZXJpY3MvYmVmb3JlL1VzYWdlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWY2M2JkZgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVTdXBlckNsYXNzL2dlbmVyaWNzL2JlZm9yZS9Vc2FnZS5qYXZhCkBAIC0wLDAgKzEsMTggQEAKK2ltcG9ydCBwMS4qOworY2xhc3MgVXNhZ2UgeworICBTdXBlcjxTdHJpbmc+IG15RmllbGQ7CisKKyAgU3VwZXI8U3RyaW5nPiB4eHgoKXsKKyAgICByZXR1cm4gbXlGaWVsZDsKKyAgfQorCisgIFN1cGVyPEludGVnZXI+IHh4eHh4KCkgeworICAgIHJldHVybiBudWxsOworICB9CisKKyAgdm9pZCBiYXIoU3VwZXI8U3RyaW5nPiBzKSB7CisgICAgcy5mb28obnVsbCk7CisgIH0KKworCit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVN1cGVyQ2xhc3MvZ2VuZXJpY3MvYmVmb3JlL3AvVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVN1cGVyQ2xhc3MvZ2VuZXJpY3MvYmVmb3JlL3AvVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhmMjdlOTEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lU3VwZXJDbGFzcy9nZW5lcmljcy9iZWZvcmUvcC9UZXN0LmphdmEKQEAgLTAsMCArMSwzIEBACitwYWNrYWdlIHA7CitpbXBvcnQgcDEuKjsKK3B1YmxpYyBjbGFzcyBUZXN0PFI+IGV4dGVuZHMgU3VwZXI8Uj4ge30gClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVN1cGVyQ2xhc3MvZ2VuZXJpY3MvYmVmb3JlL3AxL1N1cGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lU3VwZXJDbGFzcy9nZW5lcmljcy9iZWZvcmUvcDEvU3VwZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNTgwYTAwCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVN1cGVyQ2xhc3MvZ2VuZXJpY3MvYmVmb3JlL3AxL1N1cGVyLmphdmEKQEAgLTAsMCArMSw2IEBACitwYWNrYWdlIHAxOworcHVibGljIGNsYXNzIFN1cGVyPFQ+eworICAgcHVibGljIHZvaWQgZm9vKFQgdCkgeworICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkhlbGxvIik7CisgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVN1cGVyQ2xhc3MvZ2VuZXJpY3MvYmVmb3JlL3AxL3QudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVN1cGVyQ2xhc3MvZ2VuZXJpY3MvYmVmb3JlL3AxL3QudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2OWRlMjkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lU3VwZXJDbGFzcy9nZW5lcmljcy9iZWZvcmUvcDEvdC50eHQKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVTdXBlckNsYXNzL2ltcGxpY2l0Q2hpbGRDb25zdHJ1Y3Rvci9hZnRlci9UZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lU3VwZXJDbGFzcy9pbXBsaWNpdENoaWxkQ29uc3RydWN0b3IvYWZ0ZXIvVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZmYTdhMTAKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lU3VwZXJDbGFzcy9pbXBsaWNpdENoaWxkQ29uc3RydWN0b3IvYWZ0ZXIvVGVzdC5qYXZhCkBAIC0wLDAgKzEsNSBAQAorY2xhc3MgVGVzdCB7CisgIHZvaWQgZm9vKCkgeworICAgIFRlc3QgcyA9IG5ldyBUZXN0KCk7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lU3VwZXJDbGFzcy9pbXBsaWNpdENoaWxkQ29uc3RydWN0b3IvYmVmb3JlL1N1cGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lU3VwZXJDbGFzcy9pbXBsaWNpdENoaWxkQ29uc3RydWN0b3IvYmVmb3JlL1N1cGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2JiMDZhZgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVTdXBlckNsYXNzL2ltcGxpY2l0Q2hpbGRDb25zdHJ1Y3Rvci9iZWZvcmUvU3VwZXIuamF2YQpAQCAtMCwwICsxLDMgQEAKK2NsYXNzIFN1cGVyIHsKKyAgU3VwZXIoKXt9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVN1cGVyQ2xhc3MvaW1wbGljaXRDaGlsZENvbnN0cnVjdG9yL2JlZm9yZS9UZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lU3VwZXJDbGFzcy9pbXBsaWNpdENoaWxkQ29uc3RydWN0b3IvYmVmb3JlL1Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYTMzNDZkCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVN1cGVyQ2xhc3MvaW1wbGljaXRDaGlsZENvbnN0cnVjdG9yL2JlZm9yZS9UZXN0LmphdmEKQEAgLTAsMCArMSw1IEBACitjbGFzcyBUZXN0IGV4dGVuZHMgU3VwZXJ7CisgIHZvaWQgZm9vKCkgeworICAgIFN1cGVyIHMgPSBuZXcgU3VwZXIoKTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVTdXBlckNsYXNzL2ltcG9ydHMvYWZ0ZXIvcC9UZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lU3VwZXJDbGFzcy9pbXBvcnRzL2FmdGVyL3AvVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjliYzRkODgKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lU3VwZXJDbGFzcy9pbXBvcnRzL2FmdGVyL3AvVGVzdC5qYXZhCkBAIC0wLDAgKzEsNyBAQAorcGFja2FnZSBwOworCitwdWJsaWMgY2xhc3MgVGVzdCB7CisgICAgcHVibGljIHZvaWQgZm9vKCkgeworICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJIZWxsbyIpOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lU3VwZXJDbGFzcy9pbXBvcnRzL2FmdGVyL3AxL1VzYWdlLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lU3VwZXJDbGFzcy9pbXBvcnRzL2FmdGVyL3AxL1VzYWdlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzBiMWRjYgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVTdXBlckNsYXNzL2ltcG9ydHMvYWZ0ZXIvcDEvVXNhZ2UuamF2YQpAQCAtMCwwICsxLDkgQEAKK3BhY2thZ2UgcDE7CisKK2ltcG9ydCBwLlRlc3Q7CisKK2NsYXNzIFVzYWdlIHsKKyAgdm9pZCBiYXIoVGVzdCBzKSB7CisgICAgcy5mb28oKTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVTdXBlckNsYXNzL2ltcG9ydHMvYmVmb3JlL3AvVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVN1cGVyQ2xhc3MvaW1wb3J0cy9iZWZvcmUvcC9UZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWJkNDhkMgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVTdXBlckNsYXNzL2ltcG9ydHMvYmVmb3JlL3AvVGVzdC5qYXZhCkBAIC0wLDAgKzEsMyBAQAorcGFja2FnZSBwOworaW1wb3J0IHAxLio7CitwdWJsaWMgY2xhc3MgVGVzdCBleHRlbmRzIFN1cGVyIHt9IApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVTdXBlckNsYXNzL2ltcG9ydHMvYmVmb3JlL3AxL1N1cGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lU3VwZXJDbGFzcy9pbXBvcnRzL2JlZm9yZS9wMS9TdXBlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFjMmFhY2YKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lU3VwZXJDbGFzcy9pbXBvcnRzL2JlZm9yZS9wMS9TdXBlci5qYXZhCkBAIC0wLDAgKzEsNiBAQAorcGFja2FnZSBwMTsKK3B1YmxpYyBjbGFzcyBTdXBlciB7CisgICBwdWJsaWMgdm9pZCBmb28oKSB7CisgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSGVsbG8iKTsKKyAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lU3VwZXJDbGFzcy9pbXBvcnRzL2JlZm9yZS9wMS9Vc2FnZS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVN1cGVyQ2xhc3MvaW1wb3J0cy9iZWZvcmUvcDEvVXNhZ2UuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YzdmNmFlCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVN1cGVyQ2xhc3MvaW1wb3J0cy9iZWZvcmUvcDEvVXNhZ2UuamF2YQpAQCAtMCwwICsxLDYgQEAKK3BhY2thZ2UgcDE7CitjbGFzcyBVc2FnZSB7CisgIHZvaWQgYmFyKFN1cGVyIHMpIHsKKyAgICBzLmZvbygpOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVN1cGVyQ2xhc3MvaW5saW5lU3VwZXJjbGFzc0V4dGVuZHNMaXN0L2FmdGVyL1N1cGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lU3VwZXJDbGFzcy9pbmxpbmVTdXBlcmNsYXNzRXh0ZW5kc0xpc3QvYWZ0ZXIvU3VwZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZmU0ZTUyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVN1cGVyQ2xhc3MvaW5saW5lU3VwZXJjbGFzc0V4dGVuZHNMaXN0L2FmdGVyL1N1cGVyLmphdmEKQEAgLTAsMCArMSw1IEBACisKK2ludGVyZmFjZSBJbnQge30KKworY2xhc3MgRHVtbXkge30KKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVN1cGVyQ2xhc3MvaW5saW5lU3VwZXJjbGFzc0V4dGVuZHNMaXN0L2FmdGVyL1Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVTdXBlckNsYXNzL2lubGluZVN1cGVyY2xhc3NFeHRlbmRzTGlzdC9hZnRlci9UZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTIwNGRlZQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVTdXBlckNsYXNzL2lubGluZVN1cGVyY2xhc3NFeHRlbmRzTGlzdC9hZnRlci9UZXN0LmphdmEKQEAgLTAsMCArMSwxMSBAQAorY2xhc3MgVGVzdCBleHRlbmRzIER1bW15IGltcGxlbWVudHMgSW50IHsKKyAgVGVzdCgpe30KKworICAgIHB1YmxpYyB2b2lkIG1haW4oKSB7fQorfQorCitjbGFzcyBVIHsKKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisgICAgICAgbmV3IFRlc3QoKS5tYWluKCk7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVN1cGVyQ2xhc3MvaW5saW5lU3VwZXJjbGFzc0V4dGVuZHNMaXN0L2JlZm9yZS9TdXBlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVN1cGVyQ2xhc3MvaW5saW5lU3VwZXJjbGFzc0V4dGVuZHNMaXN0L2JlZm9yZS9TdXBlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRjZDRhNWEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lU3VwZXJDbGFzcy9pbmxpbmVTdXBlcmNsYXNzRXh0ZW5kc0xpc3QvYmVmb3JlL1N1cGVyLmphdmEKQEAgLTAsMCArMSw5IEBACisKK2ludGVyZmFjZSBJbnQge30KKworY2xhc3MgRHVtbXkge30KKworcHVibGljIGNsYXNzIFN1cGVyIGV4dGVuZHMgRHVtbXkgaW1wbGVtZW50cyBJbnQgeworICAgIHB1YmxpYyB2b2lkIG1haW4oKSB7fQorfQorCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lU3VwZXJDbGFzcy9pbmxpbmVTdXBlcmNsYXNzRXh0ZW5kc0xpc3QvYmVmb3JlL1Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVTdXBlckNsYXNzL2lubGluZVN1cGVyY2xhc3NFeHRlbmRzTGlzdC9iZWZvcmUvVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMxZjRlNzIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lU3VwZXJDbGFzcy9pbmxpbmVTdXBlcmNsYXNzRXh0ZW5kc0xpc3QvYmVmb3JlL1Rlc3QuamF2YQpAQCAtMCwwICsxLDkgQEAKK2NsYXNzIFRlc3QgZXh0ZW5kcyBTdXBlcnsKKyAgVGVzdCgpe30KK30KKworY2xhc3MgVSB7CisgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworICAgICAgIG5ldyBUZXN0KCkubWFpbigpOworICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVTdXBlckNsYXNzL2lubmVyY2xhc3NSZWZlcmVuY2UvYWZ0ZXIvVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVN1cGVyQ2xhc3MvaW5uZXJjbGFzc1JlZmVyZW5jZS9hZnRlci9UZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTFjYjRhMAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVTdXBlckNsYXNzL2lubmVyY2xhc3NSZWZlcmVuY2UvYWZ0ZXIvVGVzdC5qYXZhCkBAIC0wLDAgKzEsMTUgQEAKK2NsYXNzIFRlc3QgeworICAgcHVibGljIHZvaWQgY29udGV4dENoaWxkKCkgeworICAgICAgU3RJbm5lciBpbm5lcjEgPSBuZXcgU3RJbm5lcigpOworICAgICAgVGVzdC5JbnN0SW5uZXIgaW5uZXIyID0gdGhpcy5uZXcgSW5zdElubmVyKCk7CisgICB9CisKKyAgICB2b2lkIGZvbygpIHsKKyAgICAgICBTdElubmVyIGlubmVyMSA9IG5ldyBTdElubmVyKCk7CisgICAgICAgVGVzdC5JbnN0SW5uZXIgaW5uZXIyID0gdGhpcy5uZXcgSW5zdElubmVyKCk7CisgICAgfQorCisgICAgcHVibGljIHN0YXRpYyBjbGFzcyBTdElubmVyIHt9CisKKyAgICBwdWJsaWMgY2xhc3MgSW5zdElubmVyIHt9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVN1cGVyQ2xhc3MvaW5uZXJjbGFzc1JlZmVyZW5jZS9iZWZvcmUvU3VwZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVTdXBlckNsYXNzL2lubmVyY2xhc3NSZWZlcmVuY2UvYmVmb3JlL1N1cGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTliZWM4MgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVTdXBlckNsYXNzL2lubmVyY2xhc3NSZWZlcmVuY2UvYmVmb3JlL1N1cGVyLmphdmEKQEAgLTAsMCArMSw5IEBACitjbGFzcyBTdXBlciB7CisgICAgICBwdWJsaWMgc3RhdGljIGNsYXNzIFN0SW5uZXIge30KKyAgICAgIHB1YmxpYyBjbGFzcyBJbnN0SW5uZXIge30KKworICAgICAgdm9pZCBmb28oKSB7CisgICAgICAgICBTdXBlci5TdElubmVyIGlubmVyMSA9IG5ldyBTdXBlci5TdElubmVyKCk7CisgICAgICAgICBTdXBlci5JbnN0SW5uZXIgaW5uZXIyID0gdGhpcy5uZXcgSW5zdElubmVyKCk7CisgICAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVN1cGVyQ2xhc3MvaW5uZXJjbGFzc1JlZmVyZW5jZS9iZWZvcmUvVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVN1cGVyQ2xhc3MvaW5uZXJjbGFzc1JlZmVyZW5jZS9iZWZvcmUvVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc3ZWUzYTkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lU3VwZXJDbGFzcy9pbm5lcmNsYXNzUmVmZXJlbmNlL2JlZm9yZS9UZXN0LmphdmEKQEAgLTAsMCArMSw2IEBACitjbGFzcyBUZXN0IGV4dGVuZHMgU3VwZXJ7CisgICBwdWJsaWMgdm9pZCBjb250ZXh0Q2hpbGQoKSB7CisgICAgICBTdXBlci5TdElubmVyIGlubmVyMSA9IG5ldyBTdXBlci5TdElubmVyKCk7CisgICAgICBTdXBlci5JbnN0SW5uZXIgaW5uZXIyID0gdGhpcy5uZXcgSW5zdElubmVyKCk7CisgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVN1cGVyQ2xhc3MvaW50ZXJmYWNlSGllcmFyY2h5V2l0aFN1YnN0aXR1dGlvbi9hZnRlci9TdXBlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVN1cGVyQ2xhc3MvaW50ZXJmYWNlSGllcmFyY2h5V2l0aFN1YnN0aXR1dGlvbi9hZnRlci9TdXBlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYwYzIwNjQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lU3VwZXJDbGFzcy9pbnRlcmZhY2VIaWVyYXJjaHlXaXRoU3Vic3RpdHV0aW9uL2FmdGVyL1N1cGVyLmphdmEKQEAgLTAsMCArMSwyIEBACitpbnRlcmZhY2UgSW50PFQ+IHsKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVTdXBlckNsYXNzL2ludGVyZmFjZUhpZXJhcmNoeVdpdGhTdWJzdGl0dXRpb24vYWZ0ZXIvVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVN1cGVyQ2xhc3MvaW50ZXJmYWNlSGllcmFyY2h5V2l0aFN1YnN0aXR1dGlvbi9hZnRlci9UZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzJkZDE5MAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVTdXBlckNsYXNzL2ludGVyZmFjZUhpZXJhcmNoeVdpdGhTdWJzdGl0dXRpb24vYWZ0ZXIvVGVzdC5qYXZhCkBAIC0wLDAgKzEsMiBAQAoraW50ZXJmYWNlIFRlc3Q8VD4gZXh0ZW5kcyBJbnQ8VD4geworfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVN1cGVyQ2xhc3MvaW50ZXJmYWNlSGllcmFyY2h5V2l0aFN1YnN0aXR1dGlvbi9iZWZvcmUvU3VwZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVTdXBlckNsYXNzL2ludGVyZmFjZUhpZXJhcmNoeVdpdGhTdWJzdGl0dXRpb24vYmVmb3JlL1N1cGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzVmMjIzOAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVTdXBlckNsYXNzL2ludGVyZmFjZUhpZXJhcmNoeVdpdGhTdWJzdGl0dXRpb24vYmVmb3JlL1N1cGVyLmphdmEKQEAgLTAsMCArMSw0IEBACitpbnRlcmZhY2UgU3VwZXI8VD4gZXh0ZW5kcyBJbnQ8VD4geworfQoraW50ZXJmYWNlIEludDxUPiB7Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lU3VwZXJDbGFzcy9pbnRlcmZhY2VIaWVyYXJjaHlXaXRoU3Vic3RpdHV0aW9uL2JlZm9yZS9UZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lU3VwZXJDbGFzcy9pbnRlcmZhY2VIaWVyYXJjaHlXaXRoU3Vic3RpdHV0aW9uL2JlZm9yZS9UZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmVlZWI1ZAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVTdXBlckNsYXNzL2ludGVyZmFjZUhpZXJhcmNoeVdpdGhTdWJzdGl0dXRpb24vYmVmb3JlL1Rlc3QuamF2YQpAQCAtMCwwICsxLDIgQEAKK2ludGVyZmFjZSBUZXN0PFQ+IGV4dGVuZHMgU3VwZXI8VD57Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lU3VwZXJDbGFzcy9tdWx0aXBsZUNvbnN0cnVjdG9ycy9hZnRlci9UZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lU3VwZXJDbGFzcy9tdWx0aXBsZUNvbnN0cnVjdG9ycy9hZnRlci9UZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzk4YTdmMmUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lU3VwZXJDbGFzcy9tdWx0aXBsZUNvbnN0cnVjdG9ycy9hZnRlci9UZXN0LmphdmEKQEAgLTAsMCArMSwxMSBAQAorY2xhc3MgVGVzdCB7CisgIFRlc3QoU3RyaW5nIHMpeworICB9CisKKyAgICB2b2lkIGZvbygpIHsKKyAgICAgIFRlc3QgcyA9IG5ldyBUZXN0KCIiKTsKKyAgICAgIHMuYmFyKCk7CisgICAgfQorCisgICAgdm9pZCBiYXIoKSB7fQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVTdXBlckNsYXNzL211bHRpcGxlQ29uc3RydWN0b3JzL2JlZm9yZS9TdXBlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVN1cGVyQ2xhc3MvbXVsdGlwbGVDb25zdHJ1Y3RvcnMvYmVmb3JlL1N1cGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDg3MzM3ZgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVTdXBlckNsYXNzL211bHRpcGxlQ29uc3RydWN0b3JzL2JlZm9yZS9TdXBlci5qYXZhCkBAIC0wLDAgKzEsMTAgQEAKK2NsYXNzIFN1cGVyIHsKKyAgU3VwZXIoU3RyaW5nIHMpe30KKworICB2b2lkIGZvbygpIHsKKyAgICBTdXBlciBzID0gbmV3IFN1cGVyKCIiKTsKKyAgICBzLmJhcigpOworICB9CisKKyAgdm9pZCBiYXIoKSB7fQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVTdXBlckNsYXNzL211bHRpcGxlQ29uc3RydWN0b3JzL2JlZm9yZS9UZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lU3VwZXJDbGFzcy9tdWx0aXBsZUNvbnN0cnVjdG9ycy9iZWZvcmUvVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFhNDk5NTQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lU3VwZXJDbGFzcy9tdWx0aXBsZUNvbnN0cnVjdG9ycy9iZWZvcmUvVGVzdC5qYXZhCkBAIC0wLDAgKzEsMyBAQAorY2xhc3MgVGVzdCBleHRlbmRzIFN1cGVyeworICBUZXN0KFN0cmluZyBzKXtzdXBlcihzKTt9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVN1cGVyQ2xhc3MvbXVsdGlwbGVTdWJjbGFzc2VzL2FmdGVyL1Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVTdXBlckNsYXNzL211bHRpcGxlU3ViY2xhc3Nlcy9hZnRlci9UZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODg3MTBlNQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVTdXBlckNsYXNzL211bHRpcGxlU3ViY2xhc3Nlcy9hZnRlci9UZXN0LmphdmEKQEAgLTAsMCArMSw3IEBACitjbGFzcyBUZXN0IHsKKyAgcHVibGljIHZvaWQgY29udGV4dCgpIHsKKyAgICBtZXRob2QoKTsKKyAgfQorCisgICAgcHVibGljIHZvaWQgbWV0aG9kKCkge30KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lU3VwZXJDbGFzcy9tdWx0aXBsZVN1YmNsYXNzZXMvYWZ0ZXIvVGVzdDEuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVTdXBlckNsYXNzL211bHRpcGxlU3ViY2xhc3Nlcy9hZnRlci9UZXN0MS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIyMzFiOWUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lU3VwZXJDbGFzcy9tdWx0aXBsZVN1YmNsYXNzZXMvYWZ0ZXIvVGVzdDEuamF2YQpAQCAtMCwwICsxLDcgQEAKK2NsYXNzIFRlc3QxIHsKKyAgcHVibGljIHZvaWQgY29udGV4dCgpIHsKKyAgICBtZXRob2QoKTsKKyAgfQorCisgICAgcHVibGljIHZvaWQgbWV0aG9kKCkge30KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lU3VwZXJDbGFzcy9tdWx0aXBsZVN1YmNsYXNzZXMvYmVmb3JlL1N1cGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lU3VwZXJDbGFzcy9tdWx0aXBsZVN1YmNsYXNzZXMvYmVmb3JlL1N1cGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmIwMzU5YQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVTdXBlckNsYXNzL211bHRpcGxlU3ViY2xhc3Nlcy9iZWZvcmUvU3VwZXIuamF2YQpAQCAtMCwwICsxLDMgQEAKK2NsYXNzIFN1cGVyIHsKKyAgIHB1YmxpYyB2b2lkIG1ldGhvZCgpIHt9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVN1cGVyQ2xhc3MvbXVsdGlwbGVTdWJjbGFzc2VzL2JlZm9yZS9UZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lU3VwZXJDbGFzcy9tdWx0aXBsZVN1YmNsYXNzZXMvYmVmb3JlL1Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jODFiNzIwCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVN1cGVyQ2xhc3MvbXVsdGlwbGVTdWJjbGFzc2VzL2JlZm9yZS9UZXN0LmphdmEKQEAgLTAsMCArMSw1IEBACitjbGFzcyBUZXN0IGV4dGVuZHMgU3VwZXJ7CisgIHB1YmxpYyB2b2lkIGNvbnRleHQoKSB7CisgICAgc3VwZXIubWV0aG9kKCk7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lU3VwZXJDbGFzcy9tdWx0aXBsZVN1YmNsYXNzZXMvYmVmb3JlL1Rlc3QxLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lU3VwZXJDbGFzcy9tdWx0aXBsZVN1YmNsYXNzZXMvYmVmb3JlL1Rlc3QxLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTJiNjdhNwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVTdXBlckNsYXNzL211bHRpcGxlU3ViY2xhc3Nlcy9iZWZvcmUvVGVzdDEuamF2YQpAQCAtMCwwICsxLDUgQEAKK2NsYXNzIFRlc3QxIGV4dGVuZHMgU3VwZXJ7CisgIHB1YmxpYyB2b2lkIGNvbnRleHQoKSB7CisgICAgc3VwZXIubWV0aG9kKCk7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lU3VwZXJDbGFzcy9tdWx0aXBsZVN1YmNsYXNzZXNJbmhlcml0c09uZUJhc2VCYXNlL2FmdGVyL0lTdXBlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVN1cGVyQ2xhc3MvbXVsdGlwbGVTdWJjbGFzc2VzSW5oZXJpdHNPbmVCYXNlQmFzZS9hZnRlci9JU3VwZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MmY5NGNmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVN1cGVyQ2xhc3MvbXVsdGlwbGVTdWJjbGFzc2VzSW5oZXJpdHNPbmVCYXNlQmFzZS9hZnRlci9JU3VwZXIuamF2YQpAQCAtMCwwICsxIEBACitpbnRlcmZhY2UgSVN1cGVyIHt9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVN1cGVyQ2xhc3MvbXVsdGlwbGVTdWJjbGFzc2VzSW5oZXJpdHNPbmVCYXNlQmFzZS9hZnRlci9UZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lU3VwZXJDbGFzcy9tdWx0aXBsZVN1YmNsYXNzZXNJbmhlcml0c09uZUJhc2VCYXNlL2FmdGVyL1Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOTg4NjAzCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVN1cGVyQ2xhc3MvbXVsdGlwbGVTdWJjbGFzc2VzSW5oZXJpdHNPbmVCYXNlQmFzZS9hZnRlci9UZXN0LmphdmEKQEAgLTAsMCArMSBAQAorY2xhc3MgVGVzdCBpbXBsZW1lbnRzIElTdXBlciB7fQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVTdXBlckNsYXNzL211bHRpcGxlU3ViY2xhc3Nlc0luaGVyaXRzT25lQmFzZUJhc2UvYWZ0ZXIvVGVzdDEuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVTdXBlckNsYXNzL211bHRpcGxlU3ViY2xhc3Nlc0luaGVyaXRzT25lQmFzZUJhc2UvYWZ0ZXIvVGVzdDEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMzEyZGU4NgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVTdXBlckNsYXNzL211bHRpcGxlU3ViY2xhc3Nlc0luaGVyaXRzT25lQmFzZUJhc2UvYWZ0ZXIvVGVzdDEuamF2YQpAQCAtMCwwICsxLDIgQEAKK2NsYXNzIFRlc3QxIGltcGxlbWVudHMgSVN1cGVyIHsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lU3VwZXJDbGFzcy9tdWx0aXBsZVN1YmNsYXNzZXNJbmhlcml0c09uZUJhc2VCYXNlL2JlZm9yZS9JU3VwZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVTdXBlckNsYXNzL211bHRpcGxlU3ViY2xhc3Nlc0luaGVyaXRzT25lQmFzZUJhc2UvYmVmb3JlL0lTdXBlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQyZjk0Y2YKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lU3VwZXJDbGFzcy9tdWx0aXBsZVN1YmNsYXNzZXNJbmhlcml0c09uZUJhc2VCYXNlL2JlZm9yZS9JU3VwZXIuamF2YQpAQCAtMCwwICsxIEBACitpbnRlcmZhY2UgSVN1cGVyIHt9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVN1cGVyQ2xhc3MvbXVsdGlwbGVTdWJjbGFzc2VzSW5oZXJpdHNPbmVCYXNlQmFzZS9iZWZvcmUvU3VwZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVTdXBlckNsYXNzL211bHRpcGxlU3ViY2xhc3Nlc0luaGVyaXRzT25lQmFzZUJhc2UvYmVmb3JlL1N1cGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2Q0MzBlMwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVTdXBlckNsYXNzL211bHRpcGxlU3ViY2xhc3Nlc0luaGVyaXRzT25lQmFzZUJhc2UvYmVmb3JlL1N1cGVyLmphdmEKQEAgLTAsMCArMSBAQAorcHVibGljIGludGVyZmFjZSBTdXBlciBleHRlbmRzIElTdXBlcnt9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lU3VwZXJDbGFzcy9tdWx0aXBsZVN1YmNsYXNzZXNJbmhlcml0c09uZUJhc2VCYXNlL2JlZm9yZS9UZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lU3VwZXJDbGFzcy9tdWx0aXBsZVN1YmNsYXNzZXNJbmhlcml0c09uZUJhc2VCYXNlL2JlZm9yZS9UZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjJkOGNiMQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVTdXBlckNsYXNzL211bHRpcGxlU3ViY2xhc3Nlc0luaGVyaXRzT25lQmFzZUJhc2UvYmVmb3JlL1Rlc3QuamF2YQpAQCAtMCwwICsxIEBACitjbGFzcyBUZXN0IGltcGxlbWVudHMgU3VwZXIge30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lU3VwZXJDbGFzcy9tdWx0aXBsZVN1YmNsYXNzZXNJbmhlcml0c09uZUJhc2VCYXNlL2JlZm9yZS9UZXN0MS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVN1cGVyQ2xhc3MvbXVsdGlwbGVTdWJjbGFzc2VzSW5oZXJpdHNPbmVCYXNlQmFzZS9iZWZvcmUvVGVzdDEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YmNkYmFjCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVN1cGVyQ2xhc3MvbXVsdGlwbGVTdWJjbGFzc2VzSW5oZXJpdHNPbmVCYXNlQmFzZS9iZWZvcmUvVGVzdDEuamF2YQpAQCAtMCwwICsxLDIgQEAKK2NsYXNzIFRlc3QxIGltcGxlbWVudHMgU3VwZXJ7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVN1cGVyQ2xhc3MvbXVsdGlwbGVTdWJzdGl0dXRpb25zL2FmdGVyL1Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVTdXBlckNsYXNzL211bHRpcGxlU3Vic3RpdHV0aW9ucy9hZnRlci9UZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2FiNjUwNgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVTdXBlckNsYXNzL211bHRpcGxlU3Vic3RpdHV0aW9ucy9hZnRlci9UZXN0LmphdmEKQEAgLTAsMCArMSwzIEBACitjbGFzcyBUZXN0IHsKKyAgICBJbnRlZ2VyIHQ7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVN1cGVyQ2xhc3MvbXVsdGlwbGVTdWJzdGl0dXRpb25zL2FmdGVyL1Rlc3QxLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lU3VwZXJDbGFzcy9tdWx0aXBsZVN1YnN0aXR1dGlvbnMvYWZ0ZXIvVGVzdDEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NTg1NTFkCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVN1cGVyQ2xhc3MvbXVsdGlwbGVTdWJzdGl0dXRpb25zL2FmdGVyL1Rlc3QxLmphdmEKQEAgLTAsMCArMSwzIEBACitjbGFzcyBUZXN0MSB7CisgICAgU3RyaW5nIHQ7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVN1cGVyQ2xhc3MvbXVsdGlwbGVTdWJzdGl0dXRpb25zL2JlZm9yZS9TdXBlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVN1cGVyQ2xhc3MvbXVsdGlwbGVTdWJzdGl0dXRpb25zL2JlZm9yZS9TdXBlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg5YTdlYjkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lU3VwZXJDbGFzcy9tdWx0aXBsZVN1YnN0aXR1dGlvbnMvYmVmb3JlL1N1cGVyLmphdmEKQEAgLTAsMCArMSwzIEBACitjbGFzcyBTdXBlcjxUPiB7CisgIFQgdDsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lU3VwZXJDbGFzcy9tdWx0aXBsZVN1YnN0aXR1dGlvbnMvYmVmb3JlL1Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVTdXBlckNsYXNzL211bHRpcGxlU3Vic3RpdHV0aW9ucy9iZWZvcmUvVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAzNGE3NmIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lU3VwZXJDbGFzcy9tdWx0aXBsZVN1YnN0aXR1dGlvbnMvYmVmb3JlL1Rlc3QuamF2YQpAQCAtMCwwICsxLDIgQEAKK2NsYXNzIFRlc3QgZXh0ZW5kcyBTdXBlcjxJbnRlZ2VyPnsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lU3VwZXJDbGFzcy9tdWx0aXBsZVN1YnN0aXR1dGlvbnMvYmVmb3JlL1Rlc3QxLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lU3VwZXJDbGFzcy9tdWx0aXBsZVN1YnN0aXR1dGlvbnMvYmVmb3JlL1Rlc3QxLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWJhOTkzYQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVTdXBlckNsYXNzL211bHRpcGxlU3Vic3RpdHV0aW9ucy9iZWZvcmUvVGVzdDEuamF2YQpAQCAtMCwwICsxLDIgQEAKK2NsYXNzIFRlc3QxIGV4dGVuZHMgU3VwZXI8U3RyaW5nPnsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lU3VwZXJDbGFzcy9uZXdBcnJheUNvbXBsZXhEaW1lbnNpb25zRXhwci9hZnRlci9UZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lU3VwZXJDbGFzcy9uZXdBcnJheUNvbXBsZXhEaW1lbnNpb25zRXhwci9hZnRlci9UZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDk3NTc0YQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVTdXBlckNsYXNzL25ld0FycmF5Q29tcGxleERpbWVuc2lvbnNFeHByL2FmdGVyL1Rlc3QuamF2YQpAQCAtMCwwICsxLDggQEAKK2NsYXNzIFRlc3QgeworICAgIHN0YXRpYyBpbnQgYmFyKCl7cmV0dXJuIDE7fQorCisgICAgdm9pZCBmb28oKSB7CisgICAgICBUZXN0IHMgPSBuZXcgVGVzdCgpOworICAgICAgcy5iYXIoKTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVN1cGVyQ2xhc3MvbmV3QXJyYXlDb21wbGV4RGltZW5zaW9uc0V4cHIvYWZ0ZXIvVXNhZ2UuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVTdXBlckNsYXNzL25ld0FycmF5Q29tcGxleERpbWVuc2lvbnNFeHByL2FmdGVyL1VzYWdlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzQ5MDFlMgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVTdXBlckNsYXNzL25ld0FycmF5Q29tcGxleERpbWVuc2lvbnNFeHByL2FmdGVyL1VzYWdlLmphdmEKQEAgLTAsMCArMSw1IEBACitjbGFzcyBVc2FnZSB7CisgIHZvaWQgYmEoKSB7CisgICAgVGVzdFtdW10gcyA9IG5ldyBUZXN0W1Rlc3QuYmFyKCldW107CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lU3VwZXJDbGFzcy9uZXdBcnJheUNvbXBsZXhEaW1lbnNpb25zRXhwci9iZWZvcmUvU3VwZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVTdXBlckNsYXNzL25ld0FycmF5Q29tcGxleERpbWVuc2lvbnNFeHByL2JlZm9yZS9TdXBlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQyYmEwY2YKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lU3VwZXJDbGFzcy9uZXdBcnJheUNvbXBsZXhEaW1lbnNpb25zRXhwci9iZWZvcmUvU3VwZXIuamF2YQpAQCAtMCwwICsxLDggQEAKK2NsYXNzIFN1cGVyIHsKKyAgdm9pZCBmb28oKSB7CisgICAgU3VwZXIgcyA9IG5ldyBTdXBlcigpOworICAgIHMuYmFyKCk7CisgIH0KKworICBzdGF0aWMgaW50IGJhcigpe3JldHVybiAxO30KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lU3VwZXJDbGFzcy9uZXdBcnJheUNvbXBsZXhEaW1lbnNpb25zRXhwci9iZWZvcmUvVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVN1cGVyQ2xhc3MvbmV3QXJyYXlDb21wbGV4RGltZW5zaW9uc0V4cHIvYmVmb3JlL1Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOWFjNDMzCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVN1cGVyQ2xhc3MvbmV3QXJyYXlDb21wbGV4RGltZW5zaW9uc0V4cHIvYmVmb3JlL1Rlc3QuamF2YQpAQCAtMCwwICsxLDIgQEAKK2NsYXNzIFRlc3QgZXh0ZW5kcyBTdXBlcnsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lU3VwZXJDbGFzcy9uZXdBcnJheUNvbXBsZXhEaW1lbnNpb25zRXhwci9iZWZvcmUvVXNhZ2UuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVTdXBlckNsYXNzL25ld0FycmF5Q29tcGxleERpbWVuc2lvbnNFeHByL2JlZm9yZS9Vc2FnZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMxYTcyMDEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lU3VwZXJDbGFzcy9uZXdBcnJheUNvbXBsZXhEaW1lbnNpb25zRXhwci9iZWZvcmUvVXNhZ2UuamF2YQpAQCAtMCwwICsxLDUgQEAKK2NsYXNzIFVzYWdlIHsKKyAgdm9pZCBiYSgpIHsKKyAgICBTdXBlcltdW10gcyA9IG5ldyBTdXBlcltTdXBlci5iYXIoKV1bXTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVTdXBlckNsYXNzL25ld0FycmF5RGltZW5zaW9uc0V4cHIvYWZ0ZXIvVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVN1cGVyQ2xhc3MvbmV3QXJyYXlEaW1lbnNpb25zRXhwci9hZnRlci9UZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzFkNmZlYwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVTdXBlckNsYXNzL25ld0FycmF5RGltZW5zaW9uc0V4cHIvYWZ0ZXIvVGVzdC5qYXZhCkBAIC0wLDAgKzEsOCBAQAorY2xhc3MgVGVzdCB7CisgICAgdm9pZCBmb28oKSB7CisgICAgICBUZXN0IHMgPSBuZXcgVGVzdCgpOworICAgICAgcy5iYXIoKTsKKyAgICB9CisKKyAgICB2b2lkIGJhcigpIHt9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVN1cGVyQ2xhc3MvbmV3QXJyYXlEaW1lbnNpb25zRXhwci9hZnRlci9Vc2FnZS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVN1cGVyQ2xhc3MvbmV3QXJyYXlEaW1lbnNpb25zRXhwci9hZnRlci9Vc2FnZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU2YWE4NjEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lU3VwZXJDbGFzcy9uZXdBcnJheURpbWVuc2lvbnNFeHByL2FmdGVyL1VzYWdlLmphdmEKQEAgLTAsMCArMSw1IEBACitjbGFzcyBVc2FnZSB7CisgIHZvaWQgYmEoKSB7CisgICAgVGVzdFtdW10gcyA9IG5ldyBUZXN0WzJdWzNdOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVN1cGVyQ2xhc3MvbmV3QXJyYXlEaW1lbnNpb25zRXhwci9iZWZvcmUvU3VwZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVTdXBlckNsYXNzL25ld0FycmF5RGltZW5zaW9uc0V4cHIvYmVmb3JlL1N1cGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzlhMTFjMwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVTdXBlckNsYXNzL25ld0FycmF5RGltZW5zaW9uc0V4cHIvYmVmb3JlL1N1cGVyLmphdmEKQEAgLTAsMCArMSw4IEBACitjbGFzcyBTdXBlciB7CisgIHZvaWQgZm9vKCkgeworICAgIFN1cGVyIHMgPSBuZXcgU3VwZXIoKTsKKyAgICBzLmJhcigpOworICB9CisKKyAgdm9pZCBiYXIoKSB7fQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVTdXBlckNsYXNzL25ld0FycmF5RGltZW5zaW9uc0V4cHIvYmVmb3JlL1Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVTdXBlckNsYXNzL25ld0FycmF5RGltZW5zaW9uc0V4cHIvYmVmb3JlL1Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOWFjNDMzCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVN1cGVyQ2xhc3MvbmV3QXJyYXlEaW1lbnNpb25zRXhwci9iZWZvcmUvVGVzdC5qYXZhCkBAIC0wLDAgKzEsMiBAQAorY2xhc3MgVGVzdCBleHRlbmRzIFN1cGVyeworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVTdXBlckNsYXNzL25ld0FycmF5RGltZW5zaW9uc0V4cHIvYmVmb3JlL1VzYWdlLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lU3VwZXJDbGFzcy9uZXdBcnJheURpbWVuc2lvbnNFeHByL2JlZm9yZS9Vc2FnZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg2N2E2ZTIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lU3VwZXJDbGFzcy9uZXdBcnJheURpbWVuc2lvbnNFeHByL2JlZm9yZS9Vc2FnZS5qYXZhCkBAIC0wLDAgKzEsNSBAQAorY2xhc3MgVXNhZ2UgeworICB2b2lkIGJhKCkgeworICAgIFN1cGVyW11bXSBzID0gbmV3IFN1cGVyWzJdWzNdOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVN1cGVyQ2xhc3MvbmV3QXJyYXlJbml0aWFsaXplckV4cHIvYWZ0ZXIvVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVN1cGVyQ2xhc3MvbmV3QXJyYXlJbml0aWFsaXplckV4cHIvYWZ0ZXIvVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcxZDZmZWMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lU3VwZXJDbGFzcy9uZXdBcnJheUluaXRpYWxpemVyRXhwci9hZnRlci9UZXN0LmphdmEKQEAgLTAsMCArMSw4IEBACitjbGFzcyBUZXN0IHsKKyAgICB2b2lkIGZvbygpIHsKKyAgICAgIFRlc3QgcyA9IG5ldyBUZXN0KCk7CisgICAgICBzLmJhcigpOworICAgIH0KKworICAgIHZvaWQgYmFyKCkge30KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lU3VwZXJDbGFzcy9uZXdBcnJheUluaXRpYWxpemVyRXhwci9hZnRlci9Vc2FnZS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVN1cGVyQ2xhc3MvbmV3QXJyYXlJbml0aWFsaXplckV4cHIvYWZ0ZXIvVXNhZ2UuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOWJiYjU2Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVN1cGVyQ2xhc3MvbmV3QXJyYXlJbml0aWFsaXplckV4cHIvYWZ0ZXIvVXNhZ2UuamF2YQpAQCAtMCwwICsxLDUgQEAKK2NsYXNzIFVzYWdlIHsKKyAgdm9pZCBiYSgpIHsKKyAgICBUZXN0W11bXSBzID0gbmV3IFRlc3RbXVtde25ldyBUZXN0W117bmV3IFRlc3QoKX19OworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVN1cGVyQ2xhc3MvbmV3QXJyYXlJbml0aWFsaXplckV4cHIvYmVmb3JlL1N1cGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lU3VwZXJDbGFzcy9uZXdBcnJheUluaXRpYWxpemVyRXhwci9iZWZvcmUvU3VwZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OWExMWMzCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVN1cGVyQ2xhc3MvbmV3QXJyYXlJbml0aWFsaXplckV4cHIvYmVmb3JlL1N1cGVyLmphdmEKQEAgLTAsMCArMSw4IEBACitjbGFzcyBTdXBlciB7CisgIHZvaWQgZm9vKCkgeworICAgIFN1cGVyIHMgPSBuZXcgU3VwZXIoKTsKKyAgICBzLmJhcigpOworICB9CisKKyAgdm9pZCBiYXIoKSB7fQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVTdXBlckNsYXNzL25ld0FycmF5SW5pdGlhbGl6ZXJFeHByL2JlZm9yZS9UZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lU3VwZXJDbGFzcy9uZXdBcnJheUluaXRpYWxpemVyRXhwci9iZWZvcmUvVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY5YWM0MzMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lU3VwZXJDbGFzcy9uZXdBcnJheUluaXRpYWxpemVyRXhwci9iZWZvcmUvVGVzdC5qYXZhCkBAIC0wLDAgKzEsMiBAQAorY2xhc3MgVGVzdCBleHRlbmRzIFN1cGVyeworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVTdXBlckNsYXNzL25ld0FycmF5SW5pdGlhbGl6ZXJFeHByL2JlZm9yZS9Vc2FnZS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVN1cGVyQ2xhc3MvbmV3QXJyYXlJbml0aWFsaXplckV4cHIvYmVmb3JlL1VzYWdlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWUyNzk3YgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVTdXBlckNsYXNzL25ld0FycmF5SW5pdGlhbGl6ZXJFeHByL2JlZm9yZS9Vc2FnZS5qYXZhCkBAIC0wLDAgKzEsNSBAQAorY2xhc3MgVXNhZ2UgeworICB2b2lkIGJhKCkgeworICAgIFN1cGVyW11bXSBzID0gbmV3IFN1cGVyW11bXXtuZXcgU3VwZXJbXXtuZXcgVGVzdCgpfX07CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lU3VwZXJDbGFzcy9uZXdleHByL2FmdGVyL1Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVTdXBlckNsYXNzL25ld2V4cHIvYWZ0ZXIvVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcxZDZmZWMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lU3VwZXJDbGFzcy9uZXdleHByL2FmdGVyL1Rlc3QuamF2YQpAQCAtMCwwICsxLDggQEAKK2NsYXNzIFRlc3QgeworICAgIHZvaWQgZm9vKCkgeworICAgICAgVGVzdCBzID0gbmV3IFRlc3QoKTsKKyAgICAgIHMuYmFyKCk7CisgICAgfQorCisgICAgdm9pZCBiYXIoKSB7fQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVTdXBlckNsYXNzL25ld2V4cHIvYWZ0ZXIvVXNhZ2UuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVTdXBlckNsYXNzL25ld2V4cHIvYWZ0ZXIvVXNhZ2UuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNmRiZWI4Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVN1cGVyQ2xhc3MvbmV3ZXhwci9hZnRlci9Vc2FnZS5qYXZhCkBAIC0wLDAgKzEsNSBAQAorY2xhc3MgVXNhZ2UgeworICB2b2lkIGJhKCkgeworICAgIFRlc3QgcyA9IG5ldyBUZXN0KCk7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lU3VwZXJDbGFzcy9uZXdleHByL2JlZm9yZS9TdXBlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVN1cGVyQ2xhc3MvbmV3ZXhwci9iZWZvcmUvU3VwZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OWExMWMzCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVN1cGVyQ2xhc3MvbmV3ZXhwci9iZWZvcmUvU3VwZXIuamF2YQpAQCAtMCwwICsxLDggQEAKK2NsYXNzIFN1cGVyIHsKKyAgdm9pZCBmb28oKSB7CisgICAgU3VwZXIgcyA9IG5ldyBTdXBlcigpOworICAgIHMuYmFyKCk7CisgIH0KKworICB2b2lkIGJhcigpIHt9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVN1cGVyQ2xhc3MvbmV3ZXhwci9iZWZvcmUvVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVN1cGVyQ2xhc3MvbmV3ZXhwci9iZWZvcmUvVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY5YWM0MzMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lU3VwZXJDbGFzcy9uZXdleHByL2JlZm9yZS9UZXN0LmphdmEKQEAgLTAsMCArMSwyIEBACitjbGFzcyBUZXN0IGV4dGVuZHMgU3VwZXJ7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVN1cGVyQ2xhc3MvbmV3ZXhwci9iZWZvcmUvVXNhZ2UuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVTdXBlckNsYXNzL25ld2V4cHIvYmVmb3JlL1VzYWdlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzViZWQ5MDYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lU3VwZXJDbGFzcy9uZXdleHByL2JlZm9yZS9Vc2FnZS5qYXZhCkBAIC0wLDAgKzEsNSBAQAorY2xhc3MgVXNhZ2UgeworICB2b2lkIGJhKCkgeworICAgIFN1cGVyIHMgPSBuZXcgU3VwZXIoKTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVTdXBlckNsYXNzL25vQ2hpbGRDb25zdHJ1Y3RvckNhbGxzU3VwZXJEZWZhdWx0L2FmdGVyL1Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVTdXBlckNsYXNzL25vQ2hpbGRDb25zdHJ1Y3RvckNhbGxzU3VwZXJEZWZhdWx0L2FmdGVyL1Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMGZjMWE1Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVN1cGVyQ2xhc3Mvbm9DaGlsZENvbnN0cnVjdG9yQ2FsbHNTdXBlckRlZmF1bHQvYWZ0ZXIvVGVzdC5qYXZhCkBAIC0wLDAgKzEsNiBAQAorY2xhc3MgVGVzdCB7CisKKyAgICBUZXN0KCkgeworICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIiKTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVN1cGVyQ2xhc3Mvbm9DaGlsZENvbnN0cnVjdG9yQ2FsbHNTdXBlckRlZmF1bHQvYmVmb3JlL1N1cGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lU3VwZXJDbGFzcy9ub0NoaWxkQ29uc3RydWN0b3JDYWxsc1N1cGVyRGVmYXVsdC9iZWZvcmUvU3VwZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOTJjNmRlCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVN1cGVyQ2xhc3Mvbm9DaGlsZENvbnN0cnVjdG9yQ2FsbHNTdXBlckRlZmF1bHQvYmVmb3JlL1N1cGVyLmphdmEKQEAgLTAsMCArMSw1IEBACitjbGFzcyBTdXBlciB7CisgIFN1cGVyKCkgeworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiIik7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lU3VwZXJDbGFzcy9ub0NoaWxkQ29uc3RydWN0b3JDYWxsc1N1cGVyRGVmYXVsdC9iZWZvcmUvVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVN1cGVyQ2xhc3Mvbm9DaGlsZENvbnN0cnVjdG9yQ2FsbHNTdXBlckRlZmF1bHQvYmVmb3JlL1Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44N2RjMjViCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVN1cGVyQ2xhc3Mvbm9DaGlsZENvbnN0cnVjdG9yQ2FsbHNTdXBlckRlZmF1bHQvYmVmb3JlL1Rlc3QuamF2YQpAQCAtMCwwICsxLDMgQEAKK2NsYXNzIFRlc3QgZXh0ZW5kcyBTdXBlcnsKKyAgCit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVN1cGVyQ2xhc3MvcmVwbGFjZUdlbmVyaWNzSW5zaWRlL2FmdGVyL1Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVTdXBlckNsYXNzL3JlcGxhY2VHZW5lcmljc0luc2lkZS9hZnRlci9UZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDc1MzcxYwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVTdXBlckNsYXNzL3JlcGxhY2VHZW5lcmljc0luc2lkZS9hZnRlci9UZXN0LmphdmEKQEAgLTAsMCArMSwyMyBAQAoraW1wb3J0IGphdmEudXRpbC5MaXN0OworaW1wb3J0IGphdmEudXRpbC5TZXQ7CisKK2NsYXNzIFRlc3QgeworICAgIExpc3Q8U3RyaW5nPiBsOworCisgICAgVGVzdCgpIHsKKyAgICAgIFNldDxTdHJpbmc+IHMgPSBuZXcgSGFzaFNldDxTdHJpbmc+KCk7CisgICAgICBmb3IgKFN0cmluZyB0IDogcykgeworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4odCk7CisgICAgICB9CisgICAgfQorCisgICAgdm9pZCBmb28oU3RyaW5nIHQpIHsKKyAgICAgIFN5c3RlbS5vdXQucHJpbnRsbih0KTsKKyAgICB9CisKKyAgICB2b2lkIGJhcigpIHsKKyAgICAgIGZvciAoU3RyaW5nIHQgOiBsKSB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbih0KTsKKyAgICAgIH0KKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVN1cGVyQ2xhc3MvcmVwbGFjZUdlbmVyaWNzSW5zaWRlL2JlZm9yZS9TdXBlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVN1cGVyQ2xhc3MvcmVwbGFjZUdlbmVyaWNzSW5zaWRlL2JlZm9yZS9TdXBlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIxMjI5YjUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lU3VwZXJDbGFzcy9yZXBsYWNlR2VuZXJpY3NJbnNpZGUvYmVmb3JlL1N1cGVyLmphdmEKQEAgLTAsMCArMSwyMiBAQAoraW1wb3J0IGphdmEudXRpbC4qOworCitjbGFzcyBTdXBlcjxUPiB7CisgIExpc3Q8VD4gbDsKKworICBTdXBlcigpIHsKKyAgICBTZXQ8VD4gcyA9IG5ldyBIYXNoU2V0PFQ+KCk7CisgICAgZm9yIChUIHQgOiBzKSB7CisgICAgICBTeXN0ZW0ub3V0LnByaW50bG4odCk7CisgICAgfQorICB9CisKKyAgdm9pZCBmb28oVCB0KSB7CisgICAgU3lzdGVtLm91dC5wcmludGxuKHQpOworICB9CisKKyAgdm9pZCBiYXIoKSB7CisgICAgZm9yIChUIHQgOiBsKSB7CisgICAgICBTeXN0ZW0ub3V0LnByaW50bG4odCk7CisgICAgfQorICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVN1cGVyQ2xhc3MvcmVwbGFjZUdlbmVyaWNzSW5zaWRlL2JlZm9yZS9UZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lU3VwZXJDbGFzcy9yZXBsYWNlR2VuZXJpY3NJbnNpZGUvYmVmb3JlL1Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYzM2ZjNkCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVN1cGVyQ2xhc3MvcmVwbGFjZUdlbmVyaWNzSW5zaWRlL2JlZm9yZS9UZXN0LmphdmEKQEAgLTAsMCArMSwyIEBACitjbGFzcyBUZXN0IGV4dGVuZHMgU3VwZXI8U3RyaW5nPnsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lU3VwZXJDbGFzcy9zaW1wbGUvYWZ0ZXIvVXNhZ2UuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVTdXBlckNsYXNzL3NpbXBsZS9hZnRlci9Vc2FnZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkzYjlhMTUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lU3VwZXJDbGFzcy9zaW1wbGUvYWZ0ZXIvVXNhZ2UuamF2YQpAQCAtMCwwICsxLDcgQEAKK2ltcG9ydCBwLlRlc3Q7CisKK2NsYXNzIFVzYWdlIHsKKyAgdm9pZCBiYXIoVGVzdCBzKSB7CisgICAgcy5mb28oKTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVTdXBlckNsYXNzL3NpbXBsZS9hZnRlci9wL1Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVTdXBlckNsYXNzL3NpbXBsZS9hZnRlci9wL1Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YmM0ZDg4Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVN1cGVyQ2xhc3Mvc2ltcGxlL2FmdGVyL3AvVGVzdC5qYXZhCkBAIC0wLDAgKzEsNyBAQAorcGFja2FnZSBwOworCitwdWJsaWMgY2xhc3MgVGVzdCB7CisgICAgcHVibGljIHZvaWQgZm9vKCkgeworICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJIZWxsbyIpOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lU3VwZXJDbGFzcy9zaW1wbGUvYWZ0ZXIvcDEvdC50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lU3VwZXJDbGFzcy9zaW1wbGUvYWZ0ZXIvcDEvdC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY5ZGUyOQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVTdXBlckNsYXNzL3NpbXBsZS9hZnRlci9wMS90LnR4dApkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVN1cGVyQ2xhc3Mvc2ltcGxlL2JlZm9yZS9Vc2FnZS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVN1cGVyQ2xhc3Mvc2ltcGxlL2JlZm9yZS9Vc2FnZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRmMWVmYjgKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lU3VwZXJDbGFzcy9zaW1wbGUvYmVmb3JlL1VzYWdlLmphdmEKQEAgLTAsMCArMSw2IEBACitpbXBvcnQgcDEuKjsKK2NsYXNzIFVzYWdlIHsKKyAgdm9pZCBiYXIoU3VwZXIgcykgeworICAgIHMuZm9vKCk7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lU3VwZXJDbGFzcy9zaW1wbGUvYmVmb3JlL3AvVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVN1cGVyQ2xhc3Mvc2ltcGxlL2JlZm9yZS9wL1Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YmQ0OGQyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVN1cGVyQ2xhc3Mvc2ltcGxlL2JlZm9yZS9wL1Rlc3QuamF2YQpAQCAtMCwwICsxLDMgQEAKK3BhY2thZ2UgcDsKK2ltcG9ydCBwMS4qOworcHVibGljIGNsYXNzIFRlc3QgZXh0ZW5kcyBTdXBlciB7fSAKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lU3VwZXJDbGFzcy9zaW1wbGUvYmVmb3JlL3AxL1N1cGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lU3VwZXJDbGFzcy9zaW1wbGUvYmVmb3JlL3AxL1N1cGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWMyYWFjZgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVTdXBlckNsYXNzL3NpbXBsZS9iZWZvcmUvcDEvU3VwZXIuamF2YQpAQCAtMCwwICsxLDYgQEAKK3BhY2thZ2UgcDE7CitwdWJsaWMgY2xhc3MgU3VwZXIgeworICAgcHVibGljIHZvaWQgZm9vKCkgeworICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkhlbGxvIik7CisgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVN1cGVyQ2xhc3Mvc2ltcGxlL2JlZm9yZS9wMS90LnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVTdXBlckNsYXNzL3NpbXBsZS9iZWZvcmUvcDEvdC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY5ZGUyOQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVTdXBlckNsYXNzL3NpbXBsZS9iZWZvcmUvcDEvdC50eHQKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVTdXBlckNsYXNzL3NpbXBsZUdlbmVyaWNzL2FmdGVyL1VzYWdlLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lU3VwZXJDbGFzcy9zaW1wbGVHZW5lcmljcy9hZnRlci9Vc2FnZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA1ODZmYWIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lU3VwZXJDbGFzcy9zaW1wbGVHZW5lcmljcy9hZnRlci9Vc2FnZS5qYXZhCkBAIC0wLDAgKzEsNyBAQAoraW1wb3J0IHAuVGVzdDsKKworY2xhc3MgVXNhZ2UgeworICB2b2lkIGJhcihUZXN0IHMpIHsKKyAgICBzLmZvbyhudWxsKTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVTdXBlckNsYXNzL3NpbXBsZUdlbmVyaWNzL2FmdGVyL3AvVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVN1cGVyQ2xhc3Mvc2ltcGxlR2VuZXJpY3MvYWZ0ZXIvcC9UZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTQzYjhlNgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVTdXBlckNsYXNzL3NpbXBsZUdlbmVyaWNzL2FmdGVyL3AvVGVzdC5qYXZhCkBAIC0wLDAgKzEsNyBAQAorcGFja2FnZSBwOworCitwdWJsaWMgY2xhc3MgVGVzdCB7CisgICAgcHVibGljIHZvaWQgZm9vKFN0cmluZyB0KSB7CisgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkhlbGxvIik7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVTdXBlckNsYXNzL3NpbXBsZUdlbmVyaWNzL2FmdGVyL3AxL3QudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVN1cGVyQ2xhc3Mvc2ltcGxlR2VuZXJpY3MvYWZ0ZXIvcDEvdC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY5ZGUyOQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVTdXBlckNsYXNzL3NpbXBsZUdlbmVyaWNzL2FmdGVyL3AxL3QudHh0CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lU3VwZXJDbGFzcy9zaW1wbGVHZW5lcmljcy9iZWZvcmUvVXNhZ2UuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVTdXBlckNsYXNzL3NpbXBsZUdlbmVyaWNzL2JlZm9yZS9Vc2FnZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJkZmMzOWMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lU3VwZXJDbGFzcy9zaW1wbGVHZW5lcmljcy9iZWZvcmUvVXNhZ2UuamF2YQpAQCAtMCwwICsxLDYgQEAKK2ltcG9ydCBwMS4qOworY2xhc3MgVXNhZ2UgeworICB2b2lkIGJhcihTdXBlcjxTdHJpbmc+IHMpIHsKKyAgICBzLmZvbyhudWxsKTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVTdXBlckNsYXNzL3NpbXBsZUdlbmVyaWNzL2JlZm9yZS9wL1Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVTdXBlckNsYXNzL3NpbXBsZUdlbmVyaWNzL2JlZm9yZS9wL1Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNWM4YzBmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVN1cGVyQ2xhc3Mvc2ltcGxlR2VuZXJpY3MvYmVmb3JlL3AvVGVzdC5qYXZhCkBAIC0wLDAgKzEsMyBAQAorcGFja2FnZSBwOworaW1wb3J0IHAxLio7CitwdWJsaWMgY2xhc3MgVGVzdCBleHRlbmRzIFN1cGVyPFN0cmluZz4ge30gClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVN1cGVyQ2xhc3Mvc2ltcGxlR2VuZXJpY3MvYmVmb3JlL3AxL1N1cGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lU3VwZXJDbGFzcy9zaW1wbGVHZW5lcmljcy9iZWZvcmUvcDEvU3VwZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNTgwYTAwCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVN1cGVyQ2xhc3Mvc2ltcGxlR2VuZXJpY3MvYmVmb3JlL3AxL1N1cGVyLmphdmEKQEAgLTAsMCArMSw2IEBACitwYWNrYWdlIHAxOworcHVibGljIGNsYXNzIFN1cGVyPFQ+eworICAgcHVibGljIHZvaWQgZm9vKFQgdCkgeworICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkhlbGxvIik7CisgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVN1cGVyQ2xhc3Mvc2ltcGxlR2VuZXJpY3MvYmVmb3JlL3AxL3QudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVN1cGVyQ2xhc3Mvc2ltcGxlR2VuZXJpY3MvYmVmb3JlL3AxL3QudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2OWRlMjkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lU3VwZXJDbGFzcy9zaW1wbGVHZW5lcmljcy9iZWZvcmUvcDEvdC50eHQKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVTdXBlckNsYXNzL3N0YXRpY0ltcG9ydC9hZnRlci9Vc2FnZS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVN1cGVyQ2xhc3Mvc3RhdGljSW1wb3J0L2FmdGVyL1VzYWdlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTI2ZDc5MwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVTdXBlckNsYXNzL3N0YXRpY0ltcG9ydC9hZnRlci9Vc2FnZS5qYXZhCkBAIC0wLDAgKzEsOCBAQAoraW1wb3J0IHN0YXRpYyBwLlRlc3QuQ09OU1RBTlQ7CitpbXBvcnQgc3RhdGljIHAuVGVzdC5zdGF0TWV0aDsKK2NsYXNzIFVzYWdlIHsKKyAgcHVibGljIHZvaWQgY29udGV4dCgpIHsKKyAgICAgIFN0cmluZyB2ID0gQ09OU1RBTlQ7CisgICAgICBzdGF0TWV0aCgpOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVN1cGVyQ2xhc3Mvc3RhdGljSW1wb3J0L2FmdGVyL3AvVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVN1cGVyQ2xhc3Mvc3RhdGljSW1wb3J0L2FmdGVyL3AvVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBmZDFhZjgKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lU3VwZXJDbGFzcy9zdGF0aWNJbXBvcnQvYWZ0ZXIvcC9UZXN0LmphdmEKQEAgLTAsMCArMSw3IEBACitwYWNrYWdlIHA7CisKK3B1YmxpYyBjbGFzcyBUZXN0IHsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBDT05TVEFOVCA9ICIiOworCisgICAgcHVibGljIHN0YXRpYyB2b2lkIHN0YXRNZXRoKCkge30KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lU3VwZXJDbGFzcy9zdGF0aWNJbXBvcnQvYWZ0ZXIvcDEvdC50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lU3VwZXJDbGFzcy9zdGF0aWNJbXBvcnQvYWZ0ZXIvcDEvdC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY5ZGUyOQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVTdXBlckNsYXNzL3N0YXRpY0ltcG9ydC9hZnRlci9wMS90LnR4dApkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVN1cGVyQ2xhc3Mvc3RhdGljSW1wb3J0L2JlZm9yZS9Vc2FnZS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVN1cGVyQ2xhc3Mvc3RhdGljSW1wb3J0L2JlZm9yZS9Vc2FnZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBhMmRmNDkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lU3VwZXJDbGFzcy9zdGF0aWNJbXBvcnQvYmVmb3JlL1VzYWdlLmphdmEKQEAgLTAsMCArMSw4IEBACitpbXBvcnQgc3RhdGljIHAxLlN1cGVyLkNPTlNUQU5UOworaW1wb3J0IHN0YXRpYyBwMS5TdXBlci5zdGF0TWV0aDsKK2NsYXNzIFVzYWdlIHsKKyAgcHVibGljIHZvaWQgY29udGV4dCgpIHsKKyAgICAgIFN0cmluZyB2ID0gQ09OU1RBTlQ7CisgICAgICBzdGF0TWV0aCgpOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVN1cGVyQ2xhc3Mvc3RhdGljSW1wb3J0L2JlZm9yZS9wL1Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVTdXBlckNsYXNzL3N0YXRpY0ltcG9ydC9iZWZvcmUvcC9UZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWJkNDhkMgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVTdXBlckNsYXNzL3N0YXRpY0ltcG9ydC9iZWZvcmUvcC9UZXN0LmphdmEKQEAgLTAsMCArMSwzIEBACitwYWNrYWdlIHA7CitpbXBvcnQgcDEuKjsKK3B1YmxpYyBjbGFzcyBUZXN0IGV4dGVuZHMgU3VwZXIge30gClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVN1cGVyQ2xhc3Mvc3RhdGljSW1wb3J0L2JlZm9yZS9wMS9TdXBlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVN1cGVyQ2xhc3Mvc3RhdGljSW1wb3J0L2JlZm9yZS9wMS9TdXBlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkzYzQwNjQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lU3VwZXJDbGFzcy9zdGF0aWNJbXBvcnQvYmVmb3JlL3AxL1N1cGVyLmphdmEKQEAgLTAsMCArMSw1IEBACitwYWNrYWdlIHAxOworcHVibGljIGNsYXNzIFN1cGVyIHsKKyAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIENPTlNUQU5UID0gIiI7CisgICBwdWJsaWMgc3RhdGljIHZvaWQgc3RhdE1ldGgoKSB7fQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVTdXBlckNsYXNzL3N0YXRpY0ltcG9ydC9iZWZvcmUvcDEvdC50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lU3VwZXJDbGFzcy9zdGF0aWNJbXBvcnQvYmVmb3JlL3AxL3QudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2OWRlMjkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lU3VwZXJDbGFzcy9zdGF0aWNJbXBvcnQvYmVmb3JlL3AxL3QudHh0CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lU3VwZXJDbGFzcy9zdGF0aWNNZW1iZXJzL2FmdGVyL1Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVTdXBlckNsYXNzL3N0YXRpY01lbWJlcnMvYWZ0ZXIvVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQwOWJiZWUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lU3VwZXJDbGFzcy9zdGF0aWNNZW1iZXJzL2FmdGVyL1Rlc3QuamF2YQpAQCAtMCwwICsxLDEyIEBACitjbGFzcyBUZXN0IHsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBTID0gIiI7CisKKyAgICBzdGF0aWMgdm9pZCBmb28oKXsKKyAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oUyk7CisgICAgfQorCisgICAgdm9pZCBiYXIoKSB7CisgICAgU3lzdGVtLm91dC5wcmludGxuKFRlc3QuUyk7CisgICAgVGVzdC5mb28oKTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVTdXBlckNsYXNzL3N0YXRpY01lbWJlcnMvYmVmb3JlL1N1cGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lU3VwZXJDbGFzcy9zdGF0aWNNZW1iZXJzL2JlZm9yZS9TdXBlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNiODdkMTgKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lU3VwZXJDbGFzcy9zdGF0aWNNZW1iZXJzL2JlZm9yZS9TdXBlci5qYXZhCkBAIC0wLDAgKzEsNyBAQAorY2xhc3MgU3VwZXIgeworICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUyA9ICIiOworCisgICBzdGF0aWMgdm9pZCBmb28oKXsKKyAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihTKTsKKyAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lU3VwZXJDbGFzcy9zdGF0aWNNZW1iZXJzL2JlZm9yZS9UZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lU3VwZXJDbGFzcy9zdGF0aWNNZW1iZXJzL2JlZm9yZS9UZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWI0NDMyZgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVTdXBlckNsYXNzL3N0YXRpY01lbWJlcnMvYmVmb3JlL1Rlc3QuamF2YQpAQCAtMCwwICsxLDYgQEAKK2NsYXNzIFRlc3QgZXh0ZW5kcyBTdXBlcnsKKyAgdm9pZCBiYXIoKSB7CisgICAgU3lzdGVtLm91dC5wcmludGxuKFN1cGVyLlMpOworICAgIFN1cGVyLmZvbygpOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVN1cGVyQ2xhc3Mvc3VwZXJDb25zdHJ1Y3RvcldpdGhGaWVsZEluaXRpYWxpemF0aW9uL2FmdGVyL1Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVTdXBlckNsYXNzL3N1cGVyQ29uc3RydWN0b3JXaXRoRmllbGRJbml0aWFsaXphdGlvbi9hZnRlci9UZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjk1MDc3ZgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVTdXBlckNsYXNzL3N1cGVyQ29uc3RydWN0b3JXaXRoRmllbGRJbml0aWFsaXphdGlvbi9hZnRlci9UZXN0LmphdmEKQEAgLTAsMCArMSw3IEBACitjbGFzcyBUZXN0IHsKKyAgICBwcml2YXRlIGZpbmFsIFN0cmluZyBmaWVsZDsKKworICAgIFRlc3QoKXsKKyAgICAgICAgZmllbGQgPSAidGV4dCI7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVTdXBlckNsYXNzL3N1cGVyQ29uc3RydWN0b3JXaXRoRmllbGRJbml0aWFsaXphdGlvbi9iZWZvcmUvU3VwZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVTdXBlckNsYXNzL3N1cGVyQ29uc3RydWN0b3JXaXRoRmllbGRJbml0aWFsaXphdGlvbi9iZWZvcmUvU3VwZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ODZiNjlhCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVN1cGVyQ2xhc3Mvc3VwZXJDb25zdHJ1Y3RvcldpdGhGaWVsZEluaXRpYWxpemF0aW9uL2JlZm9yZS9TdXBlci5qYXZhCkBAIC0wLDAgKzEsOCBAQAorY2xhc3MgU3VwZXIgeworICBwcml2YXRlIGZpbmFsIFN0cmluZyBmaWVsZDsKKworICBwdWJsaWMgU3VwZXIoKSB7CisgICAgZmllbGQgPSAidGV4dCI7CisgIH0KKworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVTdXBlckNsYXNzL3N1cGVyQ29uc3RydWN0b3JXaXRoRmllbGRJbml0aWFsaXphdGlvbi9iZWZvcmUvVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVN1cGVyQ2xhc3Mvc3VwZXJDb25zdHJ1Y3RvcldpdGhGaWVsZEluaXRpYWxpemF0aW9uL2JlZm9yZS9UZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTkxNDE0ZQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVTdXBlckNsYXNzL3N1cGVyQ29uc3RydWN0b3JXaXRoRmllbGRJbml0aWFsaXphdGlvbi9iZWZvcmUvVGVzdC5qYXZhCkBAIC0wLDAgKzEsNSBAQAorY2xhc3MgVGVzdCBleHRlbmRzIFN1cGVyeworICBUZXN0KCl7CisgICAgc3VwZXIoKTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVTdXBlckNsYXNzL3N1cGVyQ29uc3RydWN0b3JXaXRoUGFyYW0vYWZ0ZXIvVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVN1cGVyQ2xhc3Mvc3VwZXJDb25zdHJ1Y3RvcldpdGhQYXJhbS9hZnRlci9UZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2Q0YmFiMwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVTdXBlckNsYXNzL3N1cGVyQ29uc3RydWN0b3JXaXRoUGFyYW0vYWZ0ZXIvVGVzdC5qYXZhCkBAIC0wLDAgKzEsMTcgQEAKK2NsYXNzIFRlc3QgeworICAgIFN0cmluZyBzOworCisgICAgVGVzdChTdHJpbmcgcyl7CisgICAgICAgIGlmIChzICE9IG51bGwpIHsKKyAgICAgICAgICB0aGlzLnMgPSBzOworICAgICAgICB9CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiaGVsbG8iKTsKKyAgfQorCisgICAgdm9pZCBmb28oKSB7CisgICAgICBUZXN0IHMgPSBuZXcgVGVzdChudWxsKTsKKyAgICAgIHMuYmFyKCk7CisgICAgfQorCisgICAgdm9pZCBiYXIoKSB7fQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVTdXBlckNsYXNzL3N1cGVyQ29uc3RydWN0b3JXaXRoUGFyYW0vYmVmb3JlL1N1cGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lU3VwZXJDbGFzcy9zdXBlckNvbnN0cnVjdG9yV2l0aFBhcmFtL2JlZm9yZS9TdXBlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQzZTA1Y2UKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lU3VwZXJDbGFzcy9zdXBlckNvbnN0cnVjdG9yV2l0aFBhcmFtL2JlZm9yZS9TdXBlci5qYXZhCkBAIC0wLDAgKzEsMTUgQEAKK2NsYXNzIFN1cGVyIHsKKyAgU3RyaW5nIHM7CisgIFN1cGVyKFN0cmluZyBzKSB7CisgICAgaWYgKHMgIT0gbnVsbCkgeworICAgICAgdGhpcy5zID0gczsKKyAgICB9CisgIH0KKworICB2b2lkIGZvbygpIHsKKyAgICBTdXBlciBzID0gbmV3IFN1cGVyKG51bGwpOworICAgIHMuYmFyKCk7CisgIH0KKworICB2b2lkIGJhcigpIHt9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVN1cGVyQ2xhc3Mvc3VwZXJDb25zdHJ1Y3RvcldpdGhQYXJhbS9iZWZvcmUvVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVN1cGVyQ2xhc3Mvc3VwZXJDb25zdHJ1Y3RvcldpdGhQYXJhbS9iZWZvcmUvVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkyMGFlMzUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lU3VwZXJDbGFzcy9zdXBlckNvbnN0cnVjdG9yV2l0aFBhcmFtL2JlZm9yZS9UZXN0LmphdmEKQEAgLTAsMCArMSw2IEBACitjbGFzcyBUZXN0IGV4dGVuZHMgU3VwZXJ7CisgIFRlc3QoU3RyaW5nIHMpeworICAgIHN1cGVyKHMpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiaGVsbG8iKTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVTdXBlckNsYXNzL3N1cGVyQ29uc3RydWN0b3JXaXRoUmV0dXJuSW5zaWRlL2FmdGVyL1Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVTdXBlckNsYXNzL3N1cGVyQ29uc3RydWN0b3JXaXRoUmV0dXJuSW5zaWRlL2FmdGVyL1Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MWYyZjc3Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVN1cGVyQ2xhc3Mvc3VwZXJDb25zdHJ1Y3RvcldpdGhSZXR1cm5JbnNpZGUvYWZ0ZXIvVGVzdC5qYXZhCkBAIC0wLDAgKzEsMTMgQEAKK2NsYXNzIFRlc3QgeworICBUZXN0KFN0cmluZyBzKXsKKyAgICBzdXBlcihzKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oImhlbGxvIik7CisgIH0KKworICAgIHZvaWQgZm9vKCkgeworICAgICAgVGVzdCBzID0gbmV3IFRlc3QobnVsbCk7CisgICAgICBzLmJhcigpOworICAgIH0KKworICAgIHZvaWQgYmFyKCkge30KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lU3VwZXJDbGFzcy9zdXBlckNvbnN0cnVjdG9yV2l0aFJldHVybkluc2lkZS9iZWZvcmUvU3VwZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVTdXBlckNsYXNzL3N1cGVyQ29uc3RydWN0b3JXaXRoUmV0dXJuSW5zaWRlL2JlZm9yZS9TdXBlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1ZTQyNDkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lU3VwZXJDbGFzcy9zdXBlckNvbnN0cnVjdG9yV2l0aFJldHVybkluc2lkZS9iZWZvcmUvU3VwZXIuamF2YQpAQCAtMCwwICsxLDEzIEBACitjbGFzcyBTdXBlciB7CisgIFN1cGVyKFN0cmluZyBzKSB7CisgICAgaWYgKHMgPT0gbnVsbCkgcmV0dXJuOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiczoiICsgcyk7CisgIH0KKworICB2b2lkIGZvbygpIHsKKyAgICBTdXBlciBzID0gbmV3IFN1cGVyKG51bGwpOworICAgIHMuYmFyKCk7CisgIH0KKworICB2b2lkIGJhcigpIHt9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVN1cGVyQ2xhc3Mvc3VwZXJDb25zdHJ1Y3RvcldpdGhSZXR1cm5JbnNpZGUvYmVmb3JlL1Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVTdXBlckNsYXNzL3N1cGVyQ29uc3RydWN0b3JXaXRoUmV0dXJuSW5zaWRlL2JlZm9yZS9UZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzFlNzI5MwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVTdXBlckNsYXNzL3N1cGVyQ29uc3RydWN0b3JXaXRoUmV0dXJuSW5zaWRlL2JlZm9yZS9UZXN0LmphdmEKQEAgLTAsMCArMSw3IEBACitjbGFzcyBUZXN0IGV4dGVuZHMgU3VwZXJ7CisgIFRlc3QoU3RyaW5nIHMpeworICAgIHN1cGVyKHMpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiaGVsbG8iKTsKKyAgfQorCit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVN1cGVyQ2xhc3Mvc3VwZXJSZWZlcmVuY2UvYWZ0ZXIvVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVN1cGVyQ2xhc3Mvc3VwZXJSZWZlcmVuY2UvYWZ0ZXIvVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg4NzEwZTUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lU3VwZXJDbGFzcy9zdXBlclJlZmVyZW5jZS9hZnRlci9UZXN0LmphdmEKQEAgLTAsMCArMSw3IEBACitjbGFzcyBUZXN0IHsKKyAgcHVibGljIHZvaWQgY29udGV4dCgpIHsKKyAgICBtZXRob2QoKTsKKyAgfQorCisgICAgcHVibGljIHZvaWQgbWV0aG9kKCkge30KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lU3VwZXJDbGFzcy9zdXBlclJlZmVyZW5jZS9iZWZvcmUvU3VwZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVTdXBlckNsYXNzL3N1cGVyUmVmZXJlbmNlL2JlZm9yZS9TdXBlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZiMDM1OWEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lU3VwZXJDbGFzcy9zdXBlclJlZmVyZW5jZS9iZWZvcmUvU3VwZXIuamF2YQpAQCAtMCwwICsxLDMgQEAKK2NsYXNzIFN1cGVyIHsKKyAgIHB1YmxpYyB2b2lkIG1ldGhvZCgpIHt9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVN1cGVyQ2xhc3Mvc3VwZXJSZWZlcmVuY2UvYmVmb3JlL1Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVTdXBlckNsYXNzL3N1cGVyUmVmZXJlbmNlL2JlZm9yZS9UZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzgxYjcyMAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVTdXBlckNsYXNzL3N1cGVyUmVmZXJlbmNlL2JlZm9yZS9UZXN0LmphdmEKQEAgLTAsMCArMSw1IEBACitjbGFzcyBUZXN0IGV4dGVuZHMgU3VwZXJ7CisgIHB1YmxpYyB2b2lkIGNvbnRleHQoKSB7CisgICAgc3VwZXIubWV0aG9kKCk7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lVG9Bbm9ueW1vdXNDbGFzcy9BcnJheUluaXRpYWxpemVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lVG9Bbm9ueW1vdXNDbGFzcy9BcnJheUluaXRpYWxpemVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzMwM2VjNAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVUb0Fub255bW91c0NsYXNzL0FycmF5SW5pdGlhbGl6ZXIuamF2YQpAQCAtMCwwICsxLDExIEBACitjbGFzcyBBIHsKKyAgICBwdWJsaWMgdm9pZCB0ZXN0KCkgeworICAgICAgICBJbm5lcltdIGIgPSBuZXcgSW5uZXJbXSB7IG5ldyBJbm5lcigpIH07CisgICAgfQorCisgICAgcHJpdmF0ZSBjbGFzcyA8Y2FyZXQ+SW5uZXIgeworICAgICAgICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgeworICAgICAgICAgICAgcmV0dXJuICJBIjsKKyAgICAgICAgfQorICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lVG9Bbm9ueW1vdXNDbGFzcy9BcnJheUluaXRpYWxpemVyLmphdmEuYWZ0ZXIgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lVG9Bbm9ueW1vdXNDbGFzcy9BcnJheUluaXRpYWxpemVyLmphdmEuYWZ0ZXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjhmNGMwYgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVUb0Fub255bW91c0NsYXNzL0FycmF5SW5pdGlhbGl6ZXIuamF2YS5hZnRlcgpAQCAtMCwwICsxLDEwIEBACitjbGFzcyBBIHsKKyAgICBwdWJsaWMgdm9pZCB0ZXN0KCkgeworICAgICAgICBPYmplY3RbXSBiID0gbmV3IE9iamVjdFtdIHtuZXcgT2JqZWN0KCkgeworICAgICAgICAgICAgcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gIkEiOworICAgICAgICAgICAgfQorICAgICAgICB9fTsKKyAgICB9CisKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lVG9Bbm9ueW1vdXNDbGFzcy9BcnJheVR5cGUuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVUb0Fub255bW91c0NsYXNzL0FycmF5VHlwZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk2Yzk0MzQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lVG9Bbm9ueW1vdXNDbGFzcy9BcnJheVR5cGUuamF2YQpAQCAtMCwwICsxLDEyIEBACitjbGFzcyBBIHsKKyAgICBwdWJsaWMgdm9pZCB0ZXN0KCkgeworICAgICAgICBJbm5lcltdIGIgPSBuZXcgSW5uZXJbMV07CisgICAgICAgIGIgWzBdID0gbmV3IElubmVyKCk7CisgICAgfQorCisgICAgcHJpdmF0ZSBjbGFzcyA8Y2FyZXQ+SW5uZXIgeworICAgICAgICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgeworICAgICAgICAgICAgcmV0dXJuICJBIjsKKyAgICAgICAgfQorICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lVG9Bbm9ueW1vdXNDbGFzcy9BcnJheVR5cGUuamF2YS5hZnRlciBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVUb0Fub255bW91c0NsYXNzL0FycmF5VHlwZS5qYXZhLmFmdGVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQxYjBmZjkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lVG9Bbm9ueW1vdXNDbGFzcy9BcnJheVR5cGUuamF2YS5hZnRlcgpAQCAtMCwwICsxLDExIEBACitjbGFzcyBBIHsKKyAgICBwdWJsaWMgdm9pZCB0ZXN0KCkgeworICAgICAgICBPYmplY3RbXSBiID0gbmV3IE9iamVjdFsxXTsKKyAgICAgICAgYiBbMF0gPSBuZXcgT2JqZWN0KCkgeworICAgICAgICAgICAgcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gIkEiOworICAgICAgICAgICAgfQorICAgICAgICB9OworICAgIH0KKworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVUb0Fub255bW91c0NsYXNzL0FycmF5VHlwZVdpdGhHZW5lcmljcy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVRvQW5vbnltb3VzQ2xhc3MvQXJyYXlUeXBlV2l0aEdlbmVyaWNzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWExMjNkZQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVUb0Fub255bW91c0NsYXNzL0FycmF5VHlwZVdpdGhHZW5lcmljcy5qYXZhCkBAIC0wLDAgKzEsMTQgQEAKK2ltcG9ydCBqYXZhLnV0aWwuKjsKKworY2xhc3MgQSB7CisgICAgcHVibGljIHZvaWQgdGVzdCgpIHsKKyAgICAgICAgSW5uZXI8U3RyaW5nPltdIGIgPSBuZXcgSW5uZXI8U3RyaW5nPlsxXTsKKyAgICAgICAgYiBbMF0gPSBuZXcgSW5uZXI8U3RyaW5nPigpOworICAgIH0KKworICAgIHByaXZhdGUgY2xhc3MgPGNhcmV0PklubmVyPFQ+IGltcGxlbWVudHMgQ29tcGFyYXRvcjxUPiB7CisgICAgICAgIHB1YmxpYyBpbnQgY29tcGFyZShUIHQxLCBUIHQyKSB7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lVG9Bbm9ueW1vdXNDbGFzcy9BcnJheVR5cGVXaXRoR2VuZXJpY3MuamF2YS5hZnRlciBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVUb0Fub255bW91c0NsYXNzL0FycmF5VHlwZVdpdGhHZW5lcmljcy5qYXZhLmFmdGVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU0MmUxZWEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lVG9Bbm9ueW1vdXNDbGFzcy9BcnJheVR5cGVXaXRoR2VuZXJpY3MuamF2YS5hZnRlcgpAQCAtMCwwICsxLDEzIEBACitpbXBvcnQgamF2YS51dGlsLio7CisKK2NsYXNzIEEgeworICAgIHB1YmxpYyB2b2lkIHRlc3QoKSB7CisgICAgICAgIENvbXBhcmF0b3I8U3RyaW5nPltdIGIgPSBuZXcgQ29tcGFyYXRvclsxXTsKKyAgICAgICAgYiBbMF0gPSBuZXcgQ29tcGFyYXRvcjxTdHJpbmc+KCkgeworICAgICAgICAgICAgcHVibGljIGludCBjb21wYXJlKFN0cmluZyB0MSwgU3RyaW5nIHQyKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICB9CisgICAgICAgIH07CisgICAgfQorCit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVRvQW5vbnltb3VzQ2xhc3MvQnJhY2VzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lVG9Bbm9ueW1vdXNDbGFzcy9CcmFjZXMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYzNlZGRiCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVRvQW5vbnltb3VzQ2xhc3MvQnJhY2VzLmphdmEKQEAgLTAsMCArMSwyNiBAQAorcHVibGljIGNsYXNzIERlbW8geworCisgICAgc3RhdGljIGNsYXNzIE15UGFyZW50IHsKKyAgICAgICAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgdmFsdWU7CisKKyAgICAgICAgTXlQYXJlbnQoU3RyaW5nIHZhbHVlKSB7CisgICAgICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWU7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBzdGF0aWMgY2xhc3MgTXlDPGNhcmV0PmhpbGQgZXh0ZW5kcyBNeVBhcmVudCB7CisgICAgICAgIE15Q2hpbGQoU3RyaW5nIHZhbHVlKSB7CisgICAgICAgICAgICBzdXBlcih2YWx1ZSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisKKyAgICAgICAgU3RyaW5nIHZhbHVlID0gInNvbWV0aGluZyI7CisgICAgICAgIGZpbmFsIE15UGFyZW50IHA7CisgICAgICAgIGlmICh0cnVlKQorICAgICAgICAgICAgcCA9IG5ldyBNeUNoaWxkKHZhbHVlKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcCA9IG5ldyBNeVBhcmVudCgidmFsdWUiKTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVRvQW5vbnltb3VzQ2xhc3MvQnJhY2VzLmphdmEuYWZ0ZXIgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lVG9Bbm9ueW1vdXNDbGFzcy9CcmFjZXMuamF2YS5hZnRlcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YTJkMzllCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVRvQW5vbnltb3VzQ2xhc3MvQnJhY2VzLmphdmEuYWZ0ZXIKQEAgLTAsMCArMSwyMiBAQAorcHVibGljIGNsYXNzIERlbW8geworCisgICAgc3RhdGljIGNsYXNzIE15UGFyZW50IHsKKyAgICAgICAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgdmFsdWU7CisKKyAgICAgICAgTXlQYXJlbnQoU3RyaW5nIHZhbHVlKSB7CisgICAgICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWU7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisKKyAgICAgICAgU3RyaW5nIHZhbHVlID0gInNvbWV0aGluZyI7CisgICAgICAgIGZpbmFsIE15UGFyZW50IHA7CisgICAgICAgIGlmICh0cnVlKSB7CisgICAgICAgICAgICBmaW5hbCBTdHJpbmcgdmFsdWUxID0gdmFsdWU7CisgICAgICAgICAgICBwID0gbmV3IE15UGFyZW50KHZhbHVlMSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcCA9IG5ldyBNeVBhcmVudCgidmFsdWUiKTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVRvQW5vbnltb3VzQ2xhc3MvQ2FuQmVJbnZva2VkT25SZWZlcmVuY2UuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVUb0Fub255bW91c0NsYXNzL0NhbkJlSW52b2tlZE9uUmVmZXJlbmNlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDk2MGYxOQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVUb0Fub255bW91c0NsYXNzL0NhbkJlSW52b2tlZE9uUmVmZXJlbmNlLmphdmEKQEAgLTAsMCArMSw3IEBACitwdWJsaWMgY2xhc3MgU2ltcGxlIHt9CisKK2NsYXNzIFVzYWdlIHsKKyAgdm9pZCBmb28oKSB7CisgICAgU3RyaW5nIHMgPSBuZXcgU2k8Y2FyZXQ+bXBsZSgpLnRvU3RyaW5nKCk7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lVG9Bbm9ueW1vdXNDbGFzcy9DYW5CZUludm9rZWRPblJlZmVyZW5jZTEuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVUb0Fub255bW91c0NsYXNzL0NhbkJlSW52b2tlZE9uUmVmZXJlbmNlMS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA4Y2UyMTAKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lVG9Bbm9ueW1vdXNDbGFzcy9DYW5CZUludm9rZWRPblJlZmVyZW5jZTEuamF2YQpAQCAtMCwwICsxLDExIEBACitwdWJsaWMgY2xhc3MgU2ltcGxlIGltcGxlbWVudHMgUnVubmFibGUgeworICBwdWJsaWMgdm9pZCBydW4oKXt9Cit9CisKK2NsYXNzIFVzYWdlIHsKKyAgdm9pZCBmb28oKSB7CisgICAgYmFyKG5ldyBTaTxjYXJldD5tcGxlKCkpOworICB9CisKKyAgdm9pZCBiYXIoUnVubmFibGUgcil7fQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVUb0Fub255bW91c0NsYXNzL0NhbkJlSW52b2tlZE9uUmVmZXJlbmNlU3Vic3RpdHV0aW9uLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lVG9Bbm9ueW1vdXNDbGFzcy9DYW5CZUludm9rZWRPblJlZmVyZW5jZVN1YnN0aXR1dGlvbi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ5MTE5MTYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lVG9Bbm9ueW1vdXNDbGFzcy9DYW5CZUludm9rZWRPblJlZmVyZW5jZVN1YnN0aXR1dGlvbi5qYXZhCkBAIC0wLDAgKzEsMTEgQEAKK3B1YmxpYyBjbGFzcyBTaW1wbGU8VD4gaW1wbGVtZW50cyBDb21wYXJhYmxlPFQ+IHsKKyAgcHVibGljIGludCBjb21wYXJlVG8oVCBvKXt9Cit9CisKK2NsYXNzIFVzYWdlIHsKKyAgdm9pZCBmb28oKSB7CisgICAgYmFyKG5ldyBTaTxjYXJldD5tcGxlPFN0cmluZz4oKSk7CisgIH0KKworICB2b2lkIGJhcihDb21wYXJhYmxlPFN0cmluZz4uLi4gcil7fQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVUb0Fub255bW91c0NsYXNzL0NhbkJlSW52b2tlZE9uUmVmZXJlbmNlU3Vic3RpdHV0aW9uMS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVRvQW5vbnltb3VzQ2xhc3MvQ2FuQmVJbnZva2VkT25SZWZlcmVuY2VTdWJzdGl0dXRpb24xLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGMwMjBlMwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVUb0Fub255bW91c0NsYXNzL0NhbkJlSW52b2tlZE9uUmVmZXJlbmNlU3Vic3RpdHV0aW9uMS5qYXZhCkBAIC0wLDAgKzEsMTEgQEAKK3B1YmxpYyBjbGFzcyBTaW1wbGU8VD4gaW1wbGVtZW50cyBDb21wYXJhYmxlPFQ+IHsKKyAgcHVibGljIGludCBjb21wYXJlVG8oVCBvKXt9Cit9CisKK2NsYXNzIFVzYWdlPFM+IHsKKyAgdm9pZCBmb28oKSB7CisgICAgYmFyKG5ldyBTaTxjYXJldD5tcGxlPFM+KCkpOworICB9CisKKyAgdm9pZCBiYXIoQ29tcGFyYWJsZTxTPi4uLiByKXt9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVRvQW5vbnltb3VzQ2xhc3MvQ2FuQmVJbnZva2VkT25SZWZlcmVuY2VTeW5jU3RhdGVtZW50LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lVG9Bbm9ueW1vdXNDbGFzcy9DYW5CZUludm9rZWRPblJlZmVyZW5jZVN5bmNTdGF0ZW1lbnQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZTBiMzc4Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVRvQW5vbnltb3VzQ2xhc3MvQ2FuQmVJbnZva2VkT25SZWZlcmVuY2VTeW5jU3RhdGVtZW50LmphdmEKQEAgLTAsMCArMSw5IEBACitwdWJsaWMgY2xhc3MgU2ltcGxlIHt9CisKK2NsYXNzIFVzYWdlIHsKKyAgdm9pZCBmb28oKSB7CisgICAgc3luY2hyb25pemVkIChuZXcgU2k8Y2FyZXQ+bXBsZSgpKSB7CisgICAgICAvL2Rvc210aAorICAgIH0KKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVUb0Fub255bW91c0NsYXNzL0NhbkJlSW52b2tlZE9uUmVmZXJlbmNlVmFyYXJncy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVRvQW5vbnltb3VzQ2xhc3MvQ2FuQmVJbnZva2VkT25SZWZlcmVuY2VWYXJhcmdzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2UyYmZhMgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVUb0Fub255bW91c0NsYXNzL0NhbkJlSW52b2tlZE9uUmVmZXJlbmNlVmFyYXJncy5qYXZhCkBAIC0wLDAgKzEsMTEgQEAKK3B1YmxpYyBjbGFzcyBTaW1wbGUgaW1wbGVtZW50cyBSdW5uYWJsZSB7CisgIHB1YmxpYyB2b2lkIHJ1bigpe30KK30KKworY2xhc3MgVXNhZ2UgeworICB2b2lkIGZvbygpIHsKKyAgICBiYXIobmV3IFNpPGNhcmV0Pm1wbGUoKSk7CisgIH0KKworICB2b2lkIGJhcihSdW5uYWJsZS4uLiByKXt9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVRvQW5vbnltb3VzQ2xhc3MvQ2FudEJlSW52b2tlZE9uUmVmZXJlbmNlLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lVG9Bbm9ueW1vdXNDbGFzcy9DYW50QmVJbnZva2VkT25SZWZlcmVuY2UuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNmZkNGQ0YgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVUb0Fub255bW91c0NsYXNzL0NhbnRCZUludm9rZWRPblJlZmVyZW5jZS5qYXZhCkBAIC0wLDAgKzEsNyBAQAorcHVibGljIGNsYXNzIFNpbXBsZSB7fQorCitjbGFzcyBVc2FnZSB7CisgIHZvaWQgZm9vKCkgeworICAgIFNpbXBsZSBzID0gbmV3IFNpPGNhcmV0Pm1wbGUoKTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVUb0Fub255bW91c0NsYXNzL0NhbnRCZUludm9rZWRPblJlZmVyZW5jZTEuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVUb0Fub255bW91c0NsYXNzL0NhbnRCZUludm9rZWRPblJlZmVyZW5jZTEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMTBkNDRhCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVRvQW5vbnltb3VzQ2xhc3MvQ2FudEJlSW52b2tlZE9uUmVmZXJlbmNlMS5qYXZhCkBAIC0wLDAgKzEsMTEgQEAKK3B1YmxpYyBjbGFzcyBTaW1wbGUgaW1wbGVtZW50cyBSdW5uYWJsZSB7CisgIHB1YmxpYyB2b2lkIHJ1bigpe30KK30KKworY2xhc3MgVXNhZ2UgeworICB2b2lkIGZvbygpIHsKKyAgICBiYXIobmV3IFNpPGNhcmV0Pm1wbGUoKSk7CisgIH0KKworICB2b2lkIGJhcihTaW1wbGUgcyl7fQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVUb0Fub255bW91c0NsYXNzL0NhbnRCZUludm9rZWRPblJlZmVyZW5jZVJldHVyblN0YXRlbWVudC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVRvQW5vbnltb3VzQ2xhc3MvQ2FudEJlSW52b2tlZE9uUmVmZXJlbmNlUmV0dXJuU3RhdGVtZW50LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGVhNDY1YQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVUb0Fub255bW91c0NsYXNzL0NhbnRCZUludm9rZWRPblJlZmVyZW5jZVJldHVyblN0YXRlbWVudC5qYXZhCkBAIC0wLDAgKzEsNyBAQAorcHVibGljIGNsYXNzIFNpbXBsZSB7fQorCitjbGFzcyBVc2FnZSB7CisgIFNpbXBsZSBmb28oKSB7CisgICAgcmV0dXJuIG5ldyBTaTxjYXJldD5tcGxlKCk7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lVG9Bbm9ueW1vdXNDbGFzcy9DaGFpbmVkQ29uc3RydWN0b3JzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lVG9Bbm9ueW1vdXNDbGFzcy9DaGFpbmVkQ29uc3RydWN0b3JzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzhkMDZiOAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVUb0Fub255bW91c0NsYXNzL0NoYWluZWRDb25zdHJ1Y3RvcnMuamF2YQpAQCAtMCwwICsxLDE3IEBACitjbGFzcyBBIHsKKyAgICBwcml2YXRlIE9iamVjdCBiID0gbmV3IE15RXhjZXB0aW9uKCJ3Iik7CisKKyAgICBwcml2YXRlIGNsYXNzIDxjYXJldD5NeUV4Y2VwdGlvbiBleHRlbmRzIEV4Y2VwdGlvbiB7CisgICAgICAgIHB1YmxpYyBNeUV4Y2VwdGlvbihTdHJpbmcgbXNnKSB7CisgICAgICAgICAgICB0aGlzKG5ldyBUaHJvd2FibGUoKSwgbXNnKTsKKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyBNeUV4Y2VwdGlvbihUaHJvd2FibGUgdCwgU3RyaW5nIG1zZykgeworICAgICAgICAgICAgc3VwZXIobXNnLCB0KTsKKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyBTdHJpbmcgZ2V0TWVzc2FnZSgpIHsKKyAgICAgICAgICAgIHJldHVybiAicSI7CisgICAgICAgIH0KKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVRvQW5vbnltb3VzQ2xhc3MvQ2hhaW5lZENvbnN0cnVjdG9ycy5qYXZhLmFmdGVyIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVRvQW5vbnltb3VzQ2xhc3MvQ2hhaW5lZENvbnN0cnVjdG9ycy5qYXZhLmFmdGVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI1OGU3MDEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lVG9Bbm9ueW1vdXNDbGFzcy9DaGFpbmVkQ29uc3RydWN0b3JzLmphdmEuYWZ0ZXIKQEAgLTAsMCArMSw4IEBACitjbGFzcyBBIHsKKyAgICBwcml2YXRlIE9iamVjdCBiID0gbmV3IEV4Y2VwdGlvbigidyIsIG5ldyBUaHJvd2FibGUoKSkgeworICAgICAgICBwdWJsaWMgU3RyaW5nIGdldE1lc3NhZ2UoKSB7CisgICAgICAgICAgICByZXR1cm4gInEiOworICAgICAgICB9CisgICAgfTsKKworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVUb0Fub255bW91c0NsYXNzL0NoYWluZWRWYXJhcmdDb25zdHJ1Y3RvcnMuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVUb0Fub255bW91c0NsYXNzL0NoYWluZWRWYXJhcmdDb25zdHJ1Y3RvcnMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOTkyNDk3Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVRvQW5vbnltb3VzQ2xhc3MvQ2hhaW5lZFZhcmFyZ0NvbnN0cnVjdG9ycy5qYXZhCkBAIC0wLDAgKzEsMTYgQEAKK2NsYXNzIEEgeworICBwcml2YXRlIE9iamVjdCBiID0gbmV3IE15RXhjZXB0aW9uKCJ3Iik7CisKKyAgcHJpdmF0ZSBjbGFzcyA8Y2FyZXQ+TXlFeGNlcHRpb24gaW1wbGVtZW50cyBSdW5uYWJsZSB7CisgICAgcHVibGljIE15RXhjZXB0aW9uKFN0cmluZy4uLm1zZyl7CisgICAgICB0aGlzKG5ldyBUaHJvd2FibGUoKSwgbXNnWzBdKTsKKyAgICB9CisKKyAgICBwdWJsaWMgTXlFeGNlcHRpb24oVGhyb3dhYmxlIHQsIFN0cmluZyBtc2cpCisgICAgeworICAgICAgU3lzdGVtLm91dC5wcmludGxuKG1zZyk7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgcnVuKCl7fQorICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVRvQW5vbnltb3VzQ2xhc3MvQ2hhaW5lZFZhcmFyZ0NvbnN0cnVjdG9ycy5qYXZhLmFmdGVyIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVRvQW5vbnltb3VzQ2xhc3MvQ2hhaW5lZFZhcmFyZ0NvbnN0cnVjdG9ycy5qYXZhLmFmdGVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU5M2RhY2MKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lVG9Bbm9ueW1vdXNDbGFzcy9DaGFpbmVkVmFyYXJnQ29uc3RydWN0b3JzLmphdmEuYWZ0ZXIKQEAgLTAsMCArMSwxMCBAQAorY2xhc3MgQSB7CisgIHByaXZhdGUgT2JqZWN0IGIgPSBuZXcgUnVubmFibGUoKSB7CisgICAgICB7CisgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKG5ldyBTdHJpbmdbXXsidyJ9WzBdKTsKKyAgICAgIH0KKworICAgICAgcHVibGljIHZvaWQgcnVuKCl7fQorICB9OworCit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVRvQW5vbnltb3VzQ2xhc3MvQ2hhbmdlVG9TdXBlclR5cGUuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVUb0Fub255bW91c0NsYXNzL0NoYW5nZVRvU3VwZXJUeXBlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTliMDc1NAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVUb0Fub255bW91c0NsYXNzL0NoYW5nZVRvU3VwZXJUeXBlLmphdmEKQEAgLTAsMCArMSw5IEBACitjbGFzcyBBIHsKKyAgICBwcml2YXRlIElubmVyIGIgPSBuZXcgSW5uZXIoKTsKKworICAgIHByaXZhdGUgY2xhc3MgPGNhcmV0PklubmVyIHsKKyAgICAgICAgcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKKyAgICAgICAgICAgIHJldHVybiAiQSI7CisgICAgICAgIH0KKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVRvQW5vbnltb3VzQ2xhc3MvQ2hhbmdlVG9TdXBlclR5cGUuamF2YS5hZnRlciBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVUb0Fub255bW91c0NsYXNzL0NoYW5nZVRvU3VwZXJUeXBlLmphdmEuYWZ0ZXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDdlODcyOAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVUb0Fub255bW91c0NsYXNzL0NoYW5nZVRvU3VwZXJUeXBlLmphdmEuYWZ0ZXIKQEAgLTAsMCArMSw4IEBACitjbGFzcyBBIHsKKyAgICBwcml2YXRlIE9iamVjdCBiID0gbmV3IE9iamVjdCgpIHsKKyAgICAgICAgcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKKyAgICAgICAgICAgIHJldHVybiAiQSI7CisgICAgICAgIH0KKyAgICB9OworICAgIAorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVUb0Fub255bW91c0NsYXNzL0NsYXNzSW5pdGlhbGl6ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVUb0Fub255bW91c0NsYXNzL0NsYXNzSW5pdGlhbGl6ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YWMxN2IzCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVRvQW5vbnltb3VzQ2xhc3MvQ2xhc3NJbml0aWFsaXplci5qYXZhCkBAIC0wLDAgKzEsMTMgQEAKK2NsYXNzIEEgeworICAgIHByaXZhdGUgT2JqZWN0IGIgPSBuZXcgSW5uZXIoKTsKKworICAgIHByaXZhdGUgY2xhc3MgPGNhcmV0PklubmVyIHsKKyAgICAgICAgeworICAgICAgICAgICAgLy8gY2xhc3MgaW5pdGlhbGl6ZXIKKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7CisgICAgICAgICAgICByZXR1cm4gIkEiOworICAgICAgICB9CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVUb0Fub255bW91c0NsYXNzL0NsYXNzSW5pdGlhbGl6ZXIuamF2YS5hZnRlciBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVUb0Fub255bW91c0NsYXNzL0NsYXNzSW5pdGlhbGl6ZXIuamF2YS5hZnRlcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMDhiYjgxCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVRvQW5vbnltb3VzQ2xhc3MvQ2xhc3NJbml0aWFsaXplci5qYXZhLmFmdGVyCkBAIC0wLDAgKzEsMTIgQEAKK2NsYXNzIEEgeworICAgIHByaXZhdGUgT2JqZWN0IGIgPSBuZXcgT2JqZWN0KCkgeworICAgICAgICB7CisgICAgICAgICAgICAvLyBjbGFzcyBpbml0aWFsaXplcgorICAgICAgICB9CisKKyAgICAgICAgcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKKyAgICAgICAgICAgIHJldHVybiAiQSI7CisgICAgICAgIH0KKyAgICB9OworCit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVRvQW5vbnltb3VzQ2xhc3MvQ29uZmxpY3RJbmFjY2Vzc2libGVPdXRlckZpZWxkLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lVG9Bbm9ueW1vdXNDbGFzcy9Db25mbGljdEluYWNjZXNzaWJsZU91dGVyRmllbGQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YTk5OGRkCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVRvQW5vbnltb3VzQ2xhc3MvQ29uZmxpY3RJbmFjY2Vzc2libGVPdXRlckZpZWxkLmphdmEKQEAgLTAsMCArMSwxNyBAQAorcHVibGljIGNsYXNzIFF1YWxpZnlJbm5lclRlc3QgeworICAgIHB1YmxpYyBjbGFzcyBDMlVzZXIgeworICAgICAgICBwdWJsaWMgdm9pZCB0ZXN0KCkgeworICAgICAgICAgICAgQzIuQzJJbm5lciBpbm5lciA9IG5ldyBDMi5DMklubmVyKCk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK2NsYXNzIEMyIHsKKyAgICBwcml2YXRlIHN0YXRpYyBpbnQgYTsKKworICAgIHB1YmxpYyBzdGF0aWMgY2xhc3MgPGNhcmV0PkMySW5uZXIgeworICAgICAgICBwdWJsaWMgdm9pZCBkb1N0dWZmKCkgeworICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKGEpOworICAgICAgICB9CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVRvQW5vbnltb3VzQ2xhc3MvQ29uc3RydWN0b3IuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVUb0Fub255bW91c0NsYXNzL0NvbnN0cnVjdG9yLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDE1NGQ1NwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVUb0Fub255bW91c0NsYXNzL0NvbnN0cnVjdG9yLmphdmEKQEAgLTAsMCArMSwxMyBAQAorY2xhc3MgQSB7CisgICAgcHJpdmF0ZSBPYmplY3QgYiA9IG5ldyBNeUV4Y2VwdGlvbigpOworCisgICAgcHJpdmF0ZSBjbGFzcyA8Y2FyZXQ+TXlFeGNlcHRpb24gZXh0ZW5kcyBFeGNlcHRpb24geworICAgICAgICBwdWJsaWMgTXlFeGNlcHRpb24oKSB7CisgICAgICAgICAgICBzdXBlcigidyIpOworICAgICAgICB9CisKKyAgICAgICAgcHVibGljIFN0cmluZyBnZXRNZXNzYWdlKCkgeworICAgICAgICAgICAgcmV0dXJuICJxIjsKKyAgICAgICAgfQorICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lVG9Bbm9ueW1vdXNDbGFzcy9Db25zdHJ1Y3Rvci5qYXZhLmFmdGVyIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVRvQW5vbnltb3VzQ2xhc3MvQ29uc3RydWN0b3IuamF2YS5hZnRlcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYTRlM2Q5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVRvQW5vbnltb3VzQ2xhc3MvQ29uc3RydWN0b3IuamF2YS5hZnRlcgpAQCAtMCwwICsxLDggQEAKK2NsYXNzIEEgeworICAgIHByaXZhdGUgT2JqZWN0IGIgPSBuZXcgRXhjZXB0aW9uKCJ3IikgeworICAgICAgICBwdWJsaWMgU3RyaW5nIGdldE1lc3NhZ2UoKSB7CisgICAgICAgICAgICByZXR1cm4gInEiOworICAgICAgICB9CisgICAgfTsKKworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVUb0Fub255bW91c0NsYXNzL0NvbnN0cnVjdG9yQXJndW1lbnRJbkV4cHJlc3Npb24uamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVUb0Fub255bW91c0NsYXNzL0NvbnN0cnVjdG9yQXJndW1lbnRJbkV4cHJlc3Npb24uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wM2NhOWUyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVRvQW5vbnltb3VzQ2xhc3MvQ29uc3RydWN0b3JBcmd1bWVudEluRXhwcmVzc2lvbi5qYXZhCkBAIC0wLDAgKzEsMTUgQEAKK3B1YmxpYyBjbGFzcyBBIHsKKyAgICBwdWJsaWMgY2xhc3MgPGNhcmV0PklubmVyIHsKKyAgICAgICAgcHJpdmF0ZSBpbnQgYSA9IDA7CisKKyAgICAgICAgcHVibGljIElubmVyKGludCBhcmcpIHsKKyAgICAgICAgICAgIGludCBqID0gNTsKKyAgICAgICAgICAgIHdoaWxlIChqIDwgMTApIGorKzsKKyAgICAgICAgICAgIGEgPSBhcmcgKiBqOworICAgICAgICB9CisgICAgfQorCisgICAgcHVibGljIHZvaWQgdGVzdCgpIHsKKyAgICAgICAgSW5uZXIgaSA9IG5ldyBJbm5lcigxKTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lVG9Bbm9ueW1vdXNDbGFzcy9Db25zdHJ1Y3RvckFyZ3VtZW50SW5FeHByZXNzaW9uLmphdmEuYWZ0ZXIgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lVG9Bbm9ueW1vdXNDbGFzcy9Db25zdHJ1Y3RvckFyZ3VtZW50SW5FeHByZXNzaW9uLmphdmEuYWZ0ZXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDY3MWY4NgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVUb0Fub255bW91c0NsYXNzL0NvbnN0cnVjdG9yQXJndW1lbnRJbkV4cHJlc3Npb24uamF2YS5hZnRlcgpAQCAtMCwwICsxLDE0IEBACitwdWJsaWMgY2xhc3MgQSB7CisKKyAgICBwdWJsaWMgdm9pZCB0ZXN0KCkgeworICAgICAgICBPYmplY3QgaSA9IG5ldyBPYmplY3QoKSB7CisgICAgICAgICAgICBwcml2YXRlIGludCBhID0gMDsKKworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGludCBqID0gNTsKKyAgICAgICAgICAgICAgICB3aGlsZSAoaiA8IDEwKSBqKys7CisgICAgICAgICAgICAgICAgYSA9IDEgKiBqOworICAgICAgICAgICAgfQorICAgICAgICB9OworICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVUb0Fub255bW91c0NsYXNzL0NvbnN0cnVjdG9yQXJndW1lbnRUb0ZpZWxkLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lVG9Bbm9ueW1vdXNDbGFzcy9Db25zdHJ1Y3RvckFyZ3VtZW50VG9GaWVsZC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1NTUxOGMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lVG9Bbm9ueW1vdXNDbGFzcy9Db25zdHJ1Y3RvckFyZ3VtZW50VG9GaWVsZC5qYXZhCkBAIC0wLDAgKzEsMTkgQEAKK3B1YmxpYyBjbGFzcyBBIHsKKyAgICBwdWJsaWMgY2xhc3MgPGNhcmV0PklubmVyIGltcGxlbWVudHMgUnVubmFibGUgeworICAgICAgICBwcml2YXRlIGZpbmFsIGludCBjOworCisgICAgICAgIHB1YmxpYyBJbm5lcihpbnQgYXJnKSB7CisgICAgICAgICAgICBjID0gYXJnOworICAgICAgICB9CisKKyAgICAgICAgcHVibGljIHZvaWQgcnVuKCkgeworICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKGMpOworICAgICAgICB9CisgICAgfQorCisgICAgcHVibGljIHZvaWQgdGVzdCgpIHsKKyAgICAgICAgaW50IGMgPSAwOworICAgICAgICBJbm5lciBpID0gbmV3IElubmVyKDEpOworICAgICAgICBuZXcgVGhyZWFkKGkpLnN0YXJ0KCk7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVRvQW5vbnltb3VzQ2xhc3MvQ29uc3RydWN0b3JBcmd1bWVudFRvRmllbGQuamF2YS5hZnRlciBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVUb0Fub255bW91c0NsYXNzL0NvbnN0cnVjdG9yQXJndW1lbnRUb0ZpZWxkLmphdmEuYWZ0ZXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTg1NTZmNwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVUb0Fub255bW91c0NsYXNzL0NvbnN0cnVjdG9yQXJndW1lbnRUb0ZpZWxkLmphdmEuYWZ0ZXIKQEAgLTAsMCArMSwxNCBAQAorcHVibGljIGNsYXNzIEEgeworCisgICAgcHVibGljIHZvaWQgdGVzdCgpIHsKKyAgICAgICAgaW50IGMgPSAwOworICAgICAgICBSdW5uYWJsZSBpID0gbmV3IFJ1bm5hYmxlKCkgeworICAgICAgICAgICAgcHJpdmF0ZSBmaW5hbCBpbnQgYyA9IDE7CisKKyAgICAgICAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKKyAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oYyk7CisgICAgICAgICAgICB9CisgICAgICAgIH07CisgICAgICAgIG5ldyBUaHJlYWQoaSkuc3RhcnQoKTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lVG9Bbm9ueW1vdXNDbGFzcy9Db25zdHJ1Y3RvclRvSW5zdGFuY2VJbml0aWFsaXplci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVRvQW5vbnltb3VzQ2xhc3MvQ29uc3RydWN0b3JUb0luc3RhbmNlSW5pdGlhbGl6ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMDIwY2EyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVRvQW5vbnltb3VzQ2xhc3MvQ29uc3RydWN0b3JUb0luc3RhbmNlSW5pdGlhbGl6ZXIuamF2YQpAQCAtMCwwICsxLDE1IEBACitjbGFzcyBBIHsKKyAgICBwcml2YXRlIE9iamVjdCBiID0gbmV3IElubmVyKCk7CisKKyAgICBwcml2YXRlIGNsYXNzIDxjYXJldD5Jbm5lciB7CisgICAgICAgIHB1YmxpYyBJbm5lcigpIHsKKyAgICAgICAgICAgIC8vIHRoaXMgZG9lcyBzb21lIHN0dWZmCisgICAgICAgICAgICBkb1N0dWZmKCk7CisgICAgICAgICAgICAvKiBpc24ndCB0aGlzIGludGVyZXN0aW5nPyAqLworICAgICAgICB9CisKKyAgICAgICAgcHVibGljIFN0cmluZyBkb1N0dWZmKCkgeworICAgICAgICAgICAgcmV0dXJuICJBIjsKKyAgICAgICAgfQorICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lVG9Bbm9ueW1vdXNDbGFzcy9Db25zdHJ1Y3RvclRvSW5zdGFuY2VJbml0aWFsaXplci5qYXZhLmFmdGVyIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVRvQW5vbnltb3VzQ2xhc3MvQ29uc3RydWN0b3JUb0luc3RhbmNlSW5pdGlhbGl6ZXIuamF2YS5hZnRlcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YjQ4NGQzCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVRvQW5vbnltb3VzQ2xhc3MvQ29uc3RydWN0b3JUb0luc3RhbmNlSW5pdGlhbGl6ZXIuamF2YS5hZnRlcgpAQCAtMCwwICsxLDE0IEBACitjbGFzcyBBIHsKKyAgICBwcml2YXRlIE9iamVjdCBiID0gbmV3IE9iamVjdCgpIHsKKyAgICAgICAgeworICAgICAgICAgICAgLy8gdGhpcyBkb2VzIHNvbWUgc3R1ZmYKKyAgICAgICAgICAgIGRvU3R1ZmYoKTsKKyAgICAgICAgICAgIC8qIGlzbid0IHRoaXMgaW50ZXJlc3Rpbmc/ICovCisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHB1YmxpYyBTdHJpbmcgZG9TdHVmZigpIHsKKyAgICAgICAgICAgIHJldHVybiAiQSI7CisgICAgICAgIH0KKyAgICB9OworCit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVRvQW5vbnltb3VzQ2xhc3MvQ29uc3RydWN0b3JXaXRoQXJndW1lbnRzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lVG9Bbm9ueW1vdXNDbGFzcy9Db25zdHJ1Y3RvcldpdGhBcmd1bWVudHMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZWMxYjkwCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVRvQW5vbnltb3VzQ2xhc3MvQ29uc3RydWN0b3JXaXRoQXJndW1lbnRzLmphdmEKQEAgLTAsMCArMSwxMyBAQAorY2xhc3MgQSB7CisgICAgcHJpdmF0ZSBPYmplY3QgYiA9IG5ldyBNeUV4Y2VwdGlvbigidyIpOworCisgICAgcHJpdmF0ZSBjbGFzcyA8Y2FyZXQ+TXlFeGNlcHRpb24gZXh0ZW5kcyBFeGNlcHRpb24geworICAgICAgICBwdWJsaWMgTXlFeGNlcHRpb24oU3RyaW5nIG1zZykgeworICAgICAgICAgICAgc3VwZXIobXNnKTsKKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyBTdHJpbmcgZ2V0TWVzc2FnZSgpIHsKKyAgICAgICAgICAgIHJldHVybiAicSI7CisgICAgICAgIH0KKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVRvQW5vbnltb3VzQ2xhc3MvQ29uc3RydWN0b3JXaXRoQXJndW1lbnRzLmphdmEuYWZ0ZXIgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lVG9Bbm9ueW1vdXNDbGFzcy9Db25zdHJ1Y3RvcldpdGhBcmd1bWVudHMuamF2YS5hZnRlcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYTRlM2Q5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVRvQW5vbnltb3VzQ2xhc3MvQ29uc3RydWN0b3JXaXRoQXJndW1lbnRzLmphdmEuYWZ0ZXIKQEAgLTAsMCArMSw4IEBACitjbGFzcyBBIHsKKyAgICBwcml2YXRlIE9iamVjdCBiID0gbmV3IEV4Y2VwdGlvbigidyIpIHsKKyAgICAgICAgcHVibGljIFN0cmluZyBnZXRNZXNzYWdlKCkgeworICAgICAgICAgICAgcmV0dXJuICJxIjsKKyAgICAgICAgfQorICAgIH07CisKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lVG9Bbm9ueW1vdXNDbGFzcy9Db25zdHJ1Y3RvcldpdGhBcmd1bWVudHNJbkV4cHJlc3Npb24uamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVUb0Fub255bW91c0NsYXNzL0NvbnN0cnVjdG9yV2l0aEFyZ3VtZW50c0luRXhwcmVzc2lvbi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI3ZmVhYTcKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lVG9Bbm9ueW1vdXNDbGFzcy9Db25zdHJ1Y3RvcldpdGhBcmd1bWVudHNJbkV4cHJlc3Npb24uamF2YQpAQCAtMCwwICsxLDEzIEBACitjbGFzcyBBIHsKKyAgICBwcml2YXRlIE9iamVjdCBiID0gbmV3IE15RXhjZXB0aW9uKCJ3Iik7CisKKyAgICBwcml2YXRlIGNsYXNzIDxjYXJldD5NeUV4Y2VwdGlvbiBleHRlbmRzIEV4Y2VwdGlvbiB7CisgICAgICAgIHB1YmxpYyBNeUV4Y2VwdGlvbihTdHJpbmcgbXNnKSB7CisgICAgICAgICAgICBzdXBlcihtc2cuc3Vic3RyaW5nKDAsIDEpKTsKKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyBTdHJpbmcgZ2V0TWVzc2FnZSgpIHsKKyAgICAgICAgICAgIHJldHVybiAicSI7CisgICAgICAgIH0KKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVRvQW5vbnltb3VzQ2xhc3MvQ29uc3RydWN0b3JXaXRoQXJndW1lbnRzSW5FeHByZXNzaW9uLmphdmEuYWZ0ZXIgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lVG9Bbm9ueW1vdXNDbGFzcy9Db25zdHJ1Y3RvcldpdGhBcmd1bWVudHNJbkV4cHJlc3Npb24uamF2YS5hZnRlcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40M2QxNjkwNAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVUb0Fub255bW91c0NsYXNzL0NvbnN0cnVjdG9yV2l0aEFyZ3VtZW50c0luRXhwcmVzc2lvbi5qYXZhLmFmdGVyCkBAIC0wLDAgKzEsOCBAQAorY2xhc3MgQSB7CisgICAgcHJpdmF0ZSBPYmplY3QgYiA9IG5ldyBFeGNlcHRpb24oInciLnN1YnN0cmluZygwLCAxKSkgeworICAgICAgICBwdWJsaWMgU3RyaW5nIGdldE1lc3NhZ2UoKSB7CisgICAgICAgICAgICByZXR1cm4gInEiOworICAgICAgICB9CisgICAgfTsKKworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVUb0Fub255bW91c0NsYXNzL0ZpZWxkLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lVG9Bbm9ueW1vdXNDbGFzcy9GaWVsZC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRiZWZmNTIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lVG9Bbm9ueW1vdXNDbGFzcy9GaWVsZC5qYXZhCkBAIC0wLDAgKzEsMTIgQEAKK2NsYXNzIEEgeworICAgIHByaXZhdGUgT2JqZWN0IGIgPSBuZXcgSW5uZXIoKTsKKworICAgIHByaXZhdGUgY2xhc3MgPGNhcmV0PklubmVyIHsKKyAgICAgICAgcHJpdmF0ZSBpbnQgaT0wOworCisgICAgICAgIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7CisgICAgICAgICAgICBpKys7CisgICAgICAgICAgICByZXR1cm4gIkEiOworICAgICAgICB9CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVUb0Fub255bW91c0NsYXNzL0ZpZWxkLmphdmEuYWZ0ZXIgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lVG9Bbm9ueW1vdXNDbGFzcy9GaWVsZC5qYXZhLmFmdGVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA5MDA0NmMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lVG9Bbm9ueW1vdXNDbGFzcy9GaWVsZC5qYXZhLmFmdGVyCkBAIC0wLDAgKzEsMTEgQEAKK2NsYXNzIEEgeworICAgIHByaXZhdGUgT2JqZWN0IGIgPSBuZXcgT2JqZWN0KCkgeworICAgICAgICBwcml2YXRlIGludCBpPTA7CisKKyAgICAgICAgcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKKyAgICAgICAgICAgIGkrKzsKKyAgICAgICAgICAgIHJldHVybiAiQSI7CisgICAgICAgIH0KKyAgICB9OworCit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVRvQW5vbnltb3VzQ2xhc3MvRmllbGRBc0NvbnN0cnVjdG9yUGFyYW1ldGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lVG9Bbm9ueW1vdXNDbGFzcy9GaWVsZEFzQ29uc3RydWN0b3JQYXJhbWV0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNWRiOTcxCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVRvQW5vbnltb3VzQ2xhc3MvRmllbGRBc0NvbnN0cnVjdG9yUGFyYW1ldGVyLmphdmEKQEAgLTAsMCArMSwxOCBAQAorY2xhc3MgUGFyZW50Q3RvciB7CisgICAgcHVibGljIFBhcmVudEN0b3IoU3RyaW5nIHMpIHsKKyAgICB9Cit9CisKK2NsYXNzIDxjYXJldD5DaGlsZEN0b3IgZXh0ZW5kcyBQYXJlbnRDdG9yIHsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQ09OU1QgPSAiIjsKKworICAgIHB1YmxpYyBDaGlsZEN0b3IoKSB7CisgICAgICAgIHN1cGVyKENPTlNUKTsKKyAgICB9Cit9CisKK2NsYXNzIFVzYWdlIHsKKyAgICBwdWJsaWMgdm9pZCB0ZXN0KCkgeworICAgICAgICBDaGlsZEN0b3IgYyA9IG5ldyBDaGlsZEN0b3IoKTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVRvQW5vbnltb3VzQ2xhc3MvRmllbGRBc0NvbnN0cnVjdG9yUGFyYW1ldGVyLmphdmEuYWZ0ZXIgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lVG9Bbm9ueW1vdXNDbGFzcy9GaWVsZEFzQ29uc3RydWN0b3JQYXJhbWV0ZXIuamF2YS5hZnRlcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xM2E5M2FmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVRvQW5vbnltb3VzQ2xhc3MvRmllbGRBc0NvbnN0cnVjdG9yUGFyYW1ldGVyLmphdmEuYWZ0ZXIKQEAgLTAsMCArMSwxMiBAQAorY2xhc3MgUGFyZW50Q3RvciB7CisgICAgcHVibGljIFBhcmVudEN0b3IoU3RyaW5nIHMpIHsKKyAgICB9Cit9CisKK2NsYXNzIFVzYWdlIHsKKyAgICBwdWJsaWMgdm9pZCB0ZXN0KCkgeworICAgICAgICBQYXJlbnRDdG9yIGMgPSBuZXcgUGFyZW50Q3RvcigiIikgeworICAgICAgICAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIENPTlNUID0gIiI7CisgICAgICAgIH07CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVUb0Fub255bW91c0NsYXNzL0ZpZWxkSW5pdGlhbGl6ZWRXaXRoVmFyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lVG9Bbm9ueW1vdXNDbGFzcy9GaWVsZEluaXRpYWxpemVkV2l0aFZhci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFlMmFmZGQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lVG9Bbm9ueW1vdXNDbGFzcy9GaWVsZEluaXRpYWxpemVkV2l0aFZhci5qYXZhCkBAIC0wLDAgKzEsMTggQEAKK2NsYXNzIEEgeworICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsKKyAgICAgICAgT2JqZWN0IGIgPSBuZXcgSW5uZXIobmV3IFRocm93YWJsZSgidCIpKTsKKyAgICB9CisKKyAgICBwcml2YXRlIGNsYXNzIDxjYXJldD5Jbm5lciB7CisgICAgICAgIHByaXZhdGUgU3RyaW5nIG15TWVzc2FnZTsKKworICAgICAgICBwdWJsaWMgSW5uZXIoVGhyb3dhYmxlIHQpIHsKKyAgICAgICAgICAgIFN0cmluZyBtc2cgPSB0LmdldE1lc3NhZ2UoKTsKKyAgICAgICAgICAgIG15TWVzc2FnZSA9IG1zZzsKKyAgICAgICAgfQorICAgIAorICAgICAgICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgeworICAgICAgICAgICAgcmV0dXJuICJBIjsKKyAgICAgICAgfQorICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lVG9Bbm9ueW1vdXNDbGFzcy9GaWVsZEluaXRpYWxpemVkV2l0aFZhci5qYXZhLmFmdGVyIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVRvQW5vbnltb3VzQ2xhc3MvRmllbGRJbml0aWFsaXplZFdpdGhWYXIuamF2YS5hZnRlcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZmQ1NjlmODcKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lVG9Bbm9ueW1vdXNDbGFzcy9GaWVsZEluaXRpYWxpemVkV2l0aFZhci5qYXZhLmFmdGVyCkBAIC0wLDAgKzEsMTggQEAKK2NsYXNzIEEgeworICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsKKyAgICAgICAgZmluYWwgVGhyb3dhYmxlIHQgPSBuZXcgVGhyb3dhYmxlKCJ0Iik7CisgICAgICAgIE9iamVjdCBiID0gbmV3IE9iamVjdCgpIHsKKyAgICAgICAgICAgIHByaXZhdGUgU3RyaW5nIG15TWVzc2FnZTsKKworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIFN0cmluZyBtc2cgPSB0LmdldE1lc3NhZ2UoKTsKKyAgICAgICAgICAgICAgICBteU1lc3NhZ2UgPSBtc2c7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuICJBIjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfTsKKyAgICB9CisgICAgCit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVRvQW5vbnltb3VzQ2xhc3MvRmllbGRWc0xvY2FsQ29uZmxpY3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVUb0Fub255bW91c0NsYXNzL0ZpZWxkVnNMb2NhbENvbmZsaWN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDNlMmIyMgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVUb0Fub255bW91c0NsYXNzL0ZpZWxkVnNMb2NhbENvbmZsaWN0LmphdmEKQEAgLTAsMCArMSwxOSBAQAorY2xhc3MgQSB7CisgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgeworICAgICAgICBUaHJvd2FibGUgdCA9IG5ldyBUaHJvd2FibGUoInEiKTsKKyAgICAgICAgT2JqZWN0IGIgPSBuZXcgSW5uZXIobmV3IFRocm93YWJsZSgidCIpKTsKKyAgICB9CisKKyAgICBwcml2YXRlIGNsYXNzIDxjYXJldD5Jbm5lciB7CisgICAgICAgIHByaXZhdGUgU3RyaW5nIG15TWVzc2FnZTsKKworICAgICAgICBwdWJsaWMgSW5uZXIoVGhyb3dhYmxlIHQpIHsKKyAgICAgICAgICAgIFN0cmluZyBtc2cgPSB0LmdldE1lc3NhZ2UoKTsKKyAgICAgICAgICAgIG15TWVzc2FnZSA9IG1zZzsKKyAgICAgICAgfQorICAgIAorICAgICAgICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgeworICAgICAgICAgICAgcmV0dXJuICJBIjsKKyAgICAgICAgfQorICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lVG9Bbm9ueW1vdXNDbGFzcy9GaWVsZFZzTG9jYWxDb25mbGljdC5qYXZhLmFmdGVyIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVRvQW5vbnltb3VzQ2xhc3MvRmllbGRWc0xvY2FsQ29uZmxpY3QuamF2YS5hZnRlcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MTFhNWNjCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVRvQW5vbnltb3VzQ2xhc3MvRmllbGRWc0xvY2FsQ29uZmxpY3QuamF2YS5hZnRlcgpAQCAtMCwwICsxLDE5IEBACitjbGFzcyBBIHsKKyAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7CisgICAgICAgIFRocm93YWJsZSB0ID0gbmV3IFRocm93YWJsZSgicSIpOworICAgICAgICBmaW5hbCBUaHJvd2FibGUgdDEgPSBuZXcgVGhyb3dhYmxlKCJ0Iik7CisgICAgICAgIE9iamVjdCBiID0gbmV3IE9iamVjdCgpIHsKKyAgICAgICAgICAgIHByaXZhdGUgU3RyaW5nIG15TWVzc2FnZTsKKworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIFN0cmluZyBtc2cgPSB0MS5nZXRNZXNzYWdlKCk7CisgICAgICAgICAgICAgICAgbXlNZXNzYWdlID0gbXNnOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgeworICAgICAgICAgICAgICAgIHJldHVybiAiQSI7CisgICAgICAgICAgICB9CisgICAgICAgIH07CisgICAgfQorICAgIAorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVUb0Fub255bW91c0NsYXNzL0ZpZWxkVnNQYXJhbWV0ZXJDb25mbGljdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVRvQW5vbnltb3VzQ2xhc3MvRmllbGRWc1BhcmFtZXRlckNvbmZsaWN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTM3YzZlYgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVUb0Fub255bW91c0NsYXNzL0ZpZWxkVnNQYXJhbWV0ZXJDb25mbGljdC5qYXZhCkBAIC0wLDAgKzEsMjAgQEAKK2NsYXNzIEEgeworICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsKKyAgICAgICAgT2JqZWN0IGIgPSBuZXcgSW5uZXIobmV3IFRocm93YWJsZSgidCIpKTsKKyAgICB9CisKKyAgICBwcml2YXRlIGNsYXNzIDxjYXJldD5Jbm5lciB7CisgICAgICAgIHByaXZhdGUgVGhyb3dhYmxlIHQ7CisgICAgICAgIHByaXZhdGUgU3RyaW5nIG15TWVzc2FnZTsKKworICAgICAgICBwdWJsaWMgSW5uZXIoVGhyb3dhYmxlIHQpIHsKKyAgICAgICAgICAgIHRoaXMudCA9IHQ7CisgICAgICAgICAgICBTdHJpbmcgbXNnID0gdGhpcy50LmdldE1lc3NhZ2UoKTsKKyAgICAgICAgICAgIG15TWVzc2FnZSA9IG1zZzsKKyAgICAgICAgfQorICAgIAorICAgICAgICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgeworICAgICAgICAgICAgcmV0dXJuICJBIjsKKyAgICAgICAgfQorICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lVG9Bbm9ueW1vdXNDbGFzcy9GaWVsZFZzUGFyYW1ldGVyQ29uZmxpY3QuamF2YS5hZnRlciBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVUb0Fub255bW91c0NsYXNzL0ZpZWxkVnNQYXJhbWV0ZXJDb25mbGljdC5qYXZhLmFmdGVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFlM2YwNzkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lVG9Bbm9ueW1vdXNDbGFzcy9GaWVsZFZzUGFyYW1ldGVyQ29uZmxpY3QuamF2YS5hZnRlcgpAQCAtMCwwICsxLDE5IEBACitjbGFzcyBBIHsKKyAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7CisgICAgICAgIGZpbmFsIFRocm93YWJsZSB0MSA9IG5ldyBUaHJvd2FibGUoInQiKTsKKyAgICAgICAgT2JqZWN0IGIgPSBuZXcgT2JqZWN0KCkgeworICAgICAgICAgICAgcHJpdmF0ZSBUaHJvd2FibGUgdCA9IHQxOworICAgICAgICAgICAgcHJpdmF0ZSBTdHJpbmcgbXlNZXNzYWdlOworCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgU3RyaW5nIG1zZyA9IHRoaXMudC5nZXRNZXNzYWdlKCk7CisgICAgICAgICAgICAgICAgbXlNZXNzYWdlID0gbXNnOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgeworICAgICAgICAgICAgICAgIHJldHVybiAiQSI7CisgICAgICAgICAgICB9CisgICAgICAgIH07CisgICAgfQorICAgIAorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVUb0Fub255bW91c0NsYXNzL0dlbmVyaWNzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lVG9Bbm9ueW1vdXNDbGFzcy9HZW5lcmljcy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIwMTAwNDIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lVG9Bbm9ueW1vdXNDbGFzcy9HZW5lcmljcy5qYXZhCkBAIC0wLDAgKzEsMTEgQEAKK2ltcG9ydCBqYXZhLnV0aWwuKjsKKworY2xhc3MgQSB7CisgICAgcHJpdmF0ZSBJbm5lciBiID0gbmV3IElubmVyKCk7CisKKyAgICBwcml2YXRlIGNsYXNzIDxjYXJldD5Jbm5lciBpbXBsZW1lbnRzIENvbXBhcmF0b3I8U3RyaW5nPiB7CisgICAgICAgIHB1YmxpYyBpbnQgY29tcGFyZShTdHJpbmcgczEsIFN0cmluZyBzMikgeworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVRvQW5vbnltb3VzQ2xhc3MvR2VuZXJpY3MuamF2YS5hZnRlciBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVUb0Fub255bW91c0NsYXNzL0dlbmVyaWNzLmphdmEuYWZ0ZXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMThmMzdmOAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVUb0Fub255bW91c0NsYXNzL0dlbmVyaWNzLmphdmEuYWZ0ZXIKQEAgLTAsMCArMSwxMCBAQAoraW1wb3J0IGphdmEudXRpbC4qOworCitjbGFzcyBBIHsKKyAgICBwcml2YXRlIENvbXBhcmF0b3I8U3RyaW5nPiBiID0gbmV3IENvbXBhcmF0b3I8U3RyaW5nPigpIHsKKyAgICAgICAgcHVibGljIGludCBjb21wYXJlKFN0cmluZyBzMSwgU3RyaW5nIHMyKSB7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorICAgIH07CisKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lVG9Bbm9ueW1vdXNDbGFzcy9HZW5lcmljc0ZpZWxkRGVjbGFyYXRpb24uamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVUb0Fub255bW91c0NsYXNzL0dlbmVyaWNzRmllbGREZWNsYXJhdGlvbi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJkODZlYTYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lVG9Bbm9ueW1vdXNDbGFzcy9HZW5lcmljc0ZpZWxkRGVjbGFyYXRpb24uamF2YQpAQCAtMCwwICsxLDEzIEBACitwdWJsaWMgY2xhc3MgPGNhcmV0PkFHZW5lcmljPFQ+IHsKKyAgICBwcml2YXRlIFQgbXlUOworICAgIHB1YmxpYyBUIGdldFQoKSB7CisgICAgIAlyZXR1cm4gbXlUOworICAgIH0KKyAgICBwdWJsaWMgdm9pZCBzZXRUKFQgdCkgeworICAgICAgICBteVQgPSB0OworICAgIH0KK30KKworY2xhc3MgQ2xpZW50IHsKKyAgcHJpdmF0ZSBBR2VuZXJpYzxTdHJpbmc+IG15R2VuID0gbmV3IEFHZW5lcmljPFN0cmluZz4oKTsKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVUb0Fub255bW91c0NsYXNzL0dlbmVyaWNzRmllbGREZWNsYXJhdGlvbi5qYXZhLmFmdGVyIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVRvQW5vbnltb3VzQ2xhc3MvR2VuZXJpY3NGaWVsZERlY2xhcmF0aW9uLmphdmEuYWZ0ZXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDUwMGFkNQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVUb0Fub255bW91c0NsYXNzL0dlbmVyaWNzRmllbGREZWNsYXJhdGlvbi5qYXZhLmFmdGVyCkBAIC0wLDAgKzEsMTMgQEAKK2NsYXNzIENsaWVudCB7CisgIHByaXZhdGUgT2JqZWN0IG15R2VuID0gbmV3IE9iamVjdCgpIHsKKyAgICAgIHByaXZhdGUgU3RyaW5nIG15VDsKKworICAgICAgcHVibGljIFN0cmluZyBnZXRUKCkgeworICAgICAgICAgICByZXR1cm4gbXlUOworICAgICAgfQorCisgICAgICBwdWJsaWMgdm9pZCBzZXRUKFN0cmluZyB0KSB7CisgICAgICAgICAgbXlUID0gdDsKKyAgICAgIH0KKyAgfTsKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVUb0Fub255bW91c0NsYXNzL0dlbmVyaWNzSW5UeXBlUGFyYW1ldGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lVG9Bbm9ueW1vdXNDbGFzcy9HZW5lcmljc0luVHlwZVBhcmFtZXRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA2ZTVhNGYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lVG9Bbm9ueW1vdXNDbGFzcy9HZW5lcmljc0luVHlwZVBhcmFtZXRlci5qYXZhCkBAIC0wLDAgKzEsMTcgQEAKK2ltcG9ydCBqYXZhLnV0aWwuKjsKKworY2xhc3MgQSB7CisgICAgcHJpdmF0ZSBBR2VuZXJpYzxDb2xsZWN0aW9uPiBiID0gbmV3IEFHZW5lcmljPENvbGxlY3Rpb24+KCk7CisKKyAgICBwcml2YXRlIGNsYXNzIDxjYXJldD5BR2VuZXJpYzxUPiB7CisgICAgICAgIHByaXZhdGUgVCBteVY7CisKKyAgICAgICAgcHVibGljIDxYIGV4dGVuZHMgVD4gdm9pZCBwYXJNZXRoQShYIHApIHsKKyAgICAgICAgICAgICBteVYgPSBwOworICAgICAgICB9CisKKyAgICAgICAgcHJpdmF0ZSBjbGFzcyBJbm5lcjxZIGV4dGVuZHMgVD4geworICAgIAkgICAgcHJpdmF0ZSBZIG15WTsKKyAgICAgICAgfQorICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lVG9Bbm9ueW1vdXNDbGFzcy9HZW5lcmljc0luVHlwZVBhcmFtZXRlci5qYXZhLmFmdGVyIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVRvQW5vbnltb3VzQ2xhc3MvR2VuZXJpY3NJblR5cGVQYXJhbWV0ZXIuamF2YS5hZnRlcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYzQwYTk4Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVRvQW5vbnltb3VzQ2xhc3MvR2VuZXJpY3NJblR5cGVQYXJhbWV0ZXIuamF2YS5hZnRlcgpAQCAtMCwwICsxLDE2IEBACitpbXBvcnQgamF2YS51dGlsLio7CisKK2NsYXNzIEEgeworICAgIHByaXZhdGUgT2JqZWN0IGIgPSBuZXcgT2JqZWN0KCkgeworICAgICAgICBwcml2YXRlIENvbGxlY3Rpb24gbXlWOworCisgICAgICAgIHB1YmxpYyA8WCBleHRlbmRzIENvbGxlY3Rpb24+IHZvaWQgcGFyTWV0aEEoWCBwKSB7CisgICAgICAgICAgICAgbXlWID0gcDsKKyAgICAgICAgfQorCisgICAgICAgIHByaXZhdGUgY2xhc3MgSW5uZXI8WSBleHRlbmRzIENvbGxlY3Rpb24+IHsKKyAgICAJICAgIHByaXZhdGUgWSBteVk7CisgICAgICAgIH0KKyAgICB9OworCit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVRvQW5vbnltb3VzQ2xhc3MvR2VuZXJpY3NSYXdUeXBlLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lVG9Bbm9ueW1vdXNDbGFzcy9HZW5lcmljc1Jhd1R5cGUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NmFiYTY5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVRvQW5vbnltb3VzQ2xhc3MvR2VuZXJpY3NSYXdUeXBlLmphdmEKQEAgLTAsMCArMSwxMSBAQAoraW1wb3J0IGphdmEudXRpbC4qOworCitjbGFzcyBBIHsKKyAgICBwcml2YXRlIElubmVyIGIgPSBuZXcgSW5uZXIoKTsKKworICAgIHByaXZhdGUgY2xhc3MgPGNhcmV0PklubmVyPFQ+IGltcGxlbWVudHMgQ29tcGFyYXRvcjxUPiB7CisgICAgICAgIHB1YmxpYyBpbnQgY29tcGFyZShUIHMxLCBUIHMyKSB7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lVG9Bbm9ueW1vdXNDbGFzcy9HZW5lcmljc1Jhd1R5cGUuamF2YS5hZnRlciBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVUb0Fub255bW91c0NsYXNzL0dlbmVyaWNzUmF3VHlwZS5qYXZhLmFmdGVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk0YTY3NTYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lVG9Bbm9ueW1vdXNDbGFzcy9HZW5lcmljc1Jhd1R5cGUuamF2YS5hZnRlcgpAQCAtMCwwICsxLDEwIEBACitpbXBvcnQgamF2YS51dGlsLio7CisKK2NsYXNzIEEgeworICAgIHByaXZhdGUgQ29tcGFyYXRvciBiID0gbmV3IENvbXBhcmF0b3IoKSB7CisgICAgICAgIHB1YmxpYyBpbnQgY29tcGFyZShPYmplY3QgczEsIE9iamVjdCBzMikgeworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKyAgICB9OworCit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVRvQW5vbnltb3VzQ2xhc3MvR2VuZXJpY3NTdWJzdGl0dXRlLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lVG9Bbm9ueW1vdXNDbGFzcy9HZW5lcmljc1N1YnN0aXR1dGUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45M2VjMzgyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVRvQW5vbnltb3VzQ2xhc3MvR2VuZXJpY3NTdWJzdGl0dXRlLmphdmEKQEAgLTAsMCArMSwxMSBAQAoraW1wb3J0IGphdmEudXRpbC4qOworCitjbGFzcyBBIHsKKyAgICBwcml2YXRlIElubmVyPFN0cmluZz4gYiA9IG5ldyBJbm5lcjxTdHJpbmc+KCk7CisKKyAgICBwcml2YXRlIGNsYXNzIDxjYXJldD5Jbm5lcjxUPiBpbXBsZW1lbnRzIENvbXBhcmF0b3I8VD4geworICAgICAgICBwdWJsaWMgaW50IGNvbXBhcmUoVCBzMSwgVCBzMikgeworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVRvQW5vbnltb3VzQ2xhc3MvR2VuZXJpY3NTdWJzdGl0dXRlLmphdmEuYWZ0ZXIgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lVG9Bbm9ueW1vdXNDbGFzcy9HZW5lcmljc1N1YnN0aXR1dGUuamF2YS5hZnRlcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOGYzN2Y4Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVRvQW5vbnltb3VzQ2xhc3MvR2VuZXJpY3NTdWJzdGl0dXRlLmphdmEuYWZ0ZXIKQEAgLTAsMCArMSwxMCBAQAoraW1wb3J0IGphdmEudXRpbC4qOworCitjbGFzcyBBIHsKKyAgICBwcml2YXRlIENvbXBhcmF0b3I8U3RyaW5nPiBiID0gbmV3IENvbXBhcmF0b3I8U3RyaW5nPigpIHsKKyAgICAgICAgcHVibGljIGludCBjb21wYXJlKFN0cmluZyBzMSwgU3RyaW5nIHMyKSB7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorICAgIH07CisKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lVG9Bbm9ueW1vdXNDbGFzcy9HZXRDbGFzc0NvbmZsaWN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lVG9Bbm9ueW1vdXNDbGFzcy9HZXRDbGFzc0NvbmZsaWN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzQwZDEwOQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVUb0Fub255bW91c0NsYXNzL0dldENsYXNzQ29uZmxpY3QuamF2YQpAQCAtMCwwICsxLDExIEBACitjbGFzcyBTaW1wbGUgeworICB2b2lkIGZvbyhTaW1wbGUgcykgeworICAgIGZpbmFsIENsYXNzPD8gZXh0ZW5kcyBTaW1wbGU+IGFDbGFzcyA9IGdldENsYXNzKCk7CisgICAgZmluYWwgQ2xhc3M8PyBleHRlbmRzIFNpbXBsZT4gYUNsYXNzMSA9IHMuZ2V0Q2xhc3MoKTsKKyAgICBmaW5hbCBDbGFzczw/IGV4dGVuZHMgU3RyaW5nPiBub25Db25mbGljdFN0ckNsYXNzID0gIiIuZ2V0Q2xhc3MoKTsKKyAgfQorfQorCitjbGFzcyBVc2FnZSB7CisgIFNpbXBsZSBzID0gbmV3IFNpbTxjYXJldD5wbGUoKTsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lVG9Bbm9ueW1vdXNDbGFzcy9JbXBsZW1lbnRzSW50ZXJmYWNlLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lVG9Bbm9ueW1vdXNDbGFzcy9JbXBsZW1lbnRzSW50ZXJmYWNlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmQ5ZGUxMQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVUb0Fub255bW91c0NsYXNzL0ltcGxlbWVudHNJbnRlcmZhY2UuamF2YQpAQCAtMCwwICsxLDEwIEBACitpbXBvcnQgamF2YS5hd3QuZXZlbnQuKjsKKworY2xhc3MgQSB7CisgICAgcHJpdmF0ZSBBY3Rpb25MaXN0ZW5lciBiID0gbmV3IElubmVyKCk7CisKKyAgICBwcml2YXRlIGNsYXNzIDxjYXJldD5Jbm5lciBpbXBsZW1lbnRzIEFjdGlvbkxpc3RlbmVyIHsKKyAgICAgICAgcHVibGljIHZvaWQgYWN0aW9uUGVyZm9ybWVkKEFjdGlvbkV2ZW50IGUpIHsKKyAgICAgICAgfQorICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lVG9Bbm9ueW1vdXNDbGFzcy9JbXBsZW1lbnRzSW50ZXJmYWNlLmphdmEuYWZ0ZXIgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lVG9Bbm9ueW1vdXNDbGFzcy9JbXBsZW1lbnRzSW50ZXJmYWNlLmphdmEuYWZ0ZXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzU5YmEyYgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVUb0Fub255bW91c0NsYXNzL0ltcGxlbWVudHNJbnRlcmZhY2UuamF2YS5hZnRlcgpAQCAtMCwwICsxLDkgQEAKK2ltcG9ydCBqYXZhLmF3dC5ldmVudC4qOworCitjbGFzcyBBIHsKKyAgICBwcml2YXRlIEFjdGlvbkxpc3RlbmVyIGIgPSBuZXcgQWN0aW9uTGlzdGVuZXIoKSB7CisgICAgICAgIHB1YmxpYyB2b2lkIGFjdGlvblBlcmZvcm1lZChBY3Rpb25FdmVudCBlKSB7CisgICAgICAgIH0KKyAgICB9OworCit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVRvQW5vbnltb3VzQ2xhc3MvSW5saW5lVGhpc09ubHkuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVUb0Fub255bW91c0NsYXNzL0lubGluZVRoaXNPbmx5LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjc5YTg1MgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVUb0Fub255bW91c0NsYXNzL0lubGluZVRoaXNPbmx5LmphdmEKQEAgLTAsMCArMSwxMCBAQAorY2xhc3MgQSB7CisgICAgcHJpdmF0ZSBJbm5lciBiID0gbmV3IDxjYXJldD5Jbm5lcigpOworICAgIHByaXZhdGUgSW5uZXIgYjIgPSBuZXcgSW5uZXIoKTsKKworICAgIHByaXZhdGUgY2xhc3MgSW5uZXIgeworICAgICAgICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgeworICAgICAgICAgICAgcmV0dXJuICJBIjsKKyAgICAgICAgfQorICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lVG9Bbm9ueW1vdXNDbGFzcy9JbmxpbmVUaGlzT25seS5qYXZhLmFmdGVyIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVRvQW5vbnltb3VzQ2xhc3MvSW5saW5lVGhpc09ubHkuamF2YS5hZnRlcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOTAzYTY2Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVRvQW5vbnltb3VzQ2xhc3MvSW5saW5lVGhpc09ubHkuamF2YS5hZnRlcgpAQCAtMCwwICsxLDE0IEBACitjbGFzcyBBIHsKKyAgICBwcml2YXRlIElubmVyIGIgPSBuZXcgT2JqZWN0KCkgeworICAgICAgICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgeworICAgICAgICAgICAgcmV0dXJuICJBIjsKKyAgICAgICAgfQorICAgIH07CisgICAgcHJpdmF0ZSBJbm5lciBiMiA9IG5ldyBJbm5lcigpOworCisgICAgcHJpdmF0ZSBjbGFzcyBJbm5lciB7CisgICAgICAgIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7CisgICAgICAgICAgICByZXR1cm4gIkEiOworICAgICAgICB9CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVUb0Fub255bW91c0NsYXNzL0lubmVyQ2xhc3MuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVUb0Fub255bW91c0NsYXNzL0lubmVyQ2xhc3MuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NDhlYzFiCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVRvQW5vbnltb3VzQ2xhc3MvSW5uZXJDbGFzcy5qYXZhCkBAIC0wLDAgKzEsMTkgQEAKK2ltcG9ydCBqYXZhLmlvOworCitjbGFzcyBBIHsKKyAgICBwdWJsaWMgdm9pZCB0ZXN0KCkgeworICAgICAgICBJbmxpbmVkIGkgPSBuZXcgSW5saW5lZCgpOworICAgIH0KK30KKworY2xhc3MgPGNhcmV0PklubGluZWQgeworICAgIHB1YmxpYyBjbGFzcyBBIHsKKyAgICB9CisKKyAgICBwcml2YXRlIEEgbXlBID0gbmV3IEEoKTsKKworICAgIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7CisgICAgICAgIEEgYSA9IG5ldyBBKCk7CisgICAgICAgIHJldHVybiBhLnRvU3RyaW5nKCk7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVRvQW5vbnltb3VzQ2xhc3MvSW5uZXJDbGFzcy5qYXZhLmFmdGVyIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVRvQW5vbnltb3VzQ2xhc3MvSW5uZXJDbGFzcy5qYXZhLmFmdGVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUwYTViNWUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lVG9Bbm9ueW1vdXNDbGFzcy9Jbm5lckNsYXNzLmphdmEuYWZ0ZXIKQEAgLTAsMCArMSwxOCBAQAoraW1wb3J0IGphdmEuaW87CisKK2NsYXNzIEEgeworICAgIHB1YmxpYyB2b2lkIHRlc3QoKSB7CisgICAgICAgIE9iamVjdCBpID0gbmV3IE9iamVjdCgpIHsKKyAgICAgICAgICAgIHB1YmxpYyBjbGFzcyBBIHsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgcHJpdmF0ZSBBIG15QSA9IG5ldyBBKCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7CisgICAgICAgICAgICAgICAgQSBhID0gbmV3IEEoKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gYS50b1N0cmluZygpOworICAgICAgICAgICAgfQorICAgICAgICB9OworICAgIH0KK30KKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVRvQW5vbnltb3VzQ2xhc3MvTG9jYWxDbGFzcy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVRvQW5vbnltb3VzQ2xhc3MvTG9jYWxDbGFzcy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU3M2NhMDQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lVG9Bbm9ueW1vdXNDbGFzcy9Mb2NhbENsYXNzLmphdmEKQEAgLTAsMCArMSwxMSBAQAorY2xhc3MgQSB7CisgICAgcHVibGljIHZvaWQgdGVzdCgpIHsKKyAgICAgICAgY2xhc3MgPGNhcmV0PklubmVyIHsKKyAgICAgICAgICAgIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuICJBIjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIE9iamVjdCBiID0gbmV3IElubmVyKCk7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVUb0Fub255bW91c0NsYXNzL0xvY2FsQ2xhc3MuamF2YS5hZnRlciBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVUb0Fub255bW91c0NsYXNzL0xvY2FsQ2xhc3MuamF2YS5hZnRlcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MzlmNWFmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVRvQW5vbnltb3VzQ2xhc3MvTG9jYWxDbGFzcy5qYXZhLmFmdGVyCkBAIC0wLDAgKzEsMTAgQEAKK2NsYXNzIEEgeworICAgIHB1YmxpYyB2b2lkIHRlc3QoKSB7CisgICAgCisgICAgICAgIE9iamVjdCBiID0gbmV3IE9iamVjdCgpIHsKKyAgICAgICAgICAgIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuICJBIjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVRvQW5vbnltb3VzQ2xhc3MvTWV0aG9kQ2FsbEluTmV3RXhwcmVzc2lvbi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVRvQW5vbnltb3VzQ2xhc3MvTWV0aG9kQ2FsbEluTmV3RXhwcmVzc2lvbi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUwNDcyNGQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lVG9Bbm9ueW1vdXNDbGFzcy9NZXRob2RDYWxsSW5OZXdFeHByZXNzaW9uLmphdmEKQEAgLTAsMCArMSwxMCBAQAorcHVibGljIGNsYXNzIEEgeworICAgIHByaXZhdGUgY2xhc3MgPGNhcmV0PklubmVyIHsKKyAgICAgICAgdm9pZCBkb1Rlc3QoKSB7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCB0ZXN0KCkgeworICAgICAgICBuZXcgSW5uZXIoKS5kb1Rlc3QoKTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVRvQW5vbnltb3VzQ2xhc3MvTWV0aG9kQ2FsbEluTmV3RXhwcmVzc2lvbi5qYXZhLmFmdGVyIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVRvQW5vbnltb3VzQ2xhc3MvTWV0aG9kQ2FsbEluTmV3RXhwcmVzc2lvbi5qYXZhLmFmdGVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBkZmU3MDUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lVG9Bbm9ueW1vdXNDbGFzcy9NZXRob2RDYWxsSW5OZXdFeHByZXNzaW9uLmphdmEuYWZ0ZXIKQEAgLTAsMCArMSw5IEBACitwdWJsaWMgY2xhc3MgQSB7CisKKyAgICBwdWJsaWMgdm9pZCB0ZXN0KCkgeworICAgICAgICBuZXcgT2JqZWN0KCkgeworICAgICAgICAgICAgdm9pZCBkb1Rlc3QoKSB7CisgICAgICAgICAgICB9CisgICAgICAgIH0uZG9UZXN0KCk7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVUb0Fub255bW91c0NsYXNzL01ldGhvZENhbGxJbk5ld0V4cHJlc3Npb25XaXRoUGFyZW5zLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lVG9Bbm9ueW1vdXNDbGFzcy9NZXRob2RDYWxsSW5OZXdFeHByZXNzaW9uV2l0aFBhcmVucy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRlYjNiMDgKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lVG9Bbm9ueW1vdXNDbGFzcy9NZXRob2RDYWxsSW5OZXdFeHByZXNzaW9uV2l0aFBhcmVucy5qYXZhCkBAIC0wLDAgKzEsMTAgQEAKK3B1YmxpYyBjbGFzcyBBIHsKKyAgICBwcml2YXRlIGNsYXNzIDxjYXJldD5Jbm5lciB7CisgICAgICAgIHZvaWQgZG9UZXN0KCkgeworICAgICAgICB9CisgICAgfQorCisgICAgcHVibGljIHZvaWQgdGVzdCgpIHsKKyAgICAgICAgKG5ldyBJbm5lcigpKS5kb1Rlc3QoKTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVRvQW5vbnltb3VzQ2xhc3MvTWV0aG9kQ2FsbEluTmV3RXhwcmVzc2lvbldpdGhQYXJlbnMuamF2YS5hZnRlciBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVUb0Fub255bW91c0NsYXNzL01ldGhvZENhbGxJbk5ld0V4cHJlc3Npb25XaXRoUGFyZW5zLmphdmEuYWZ0ZXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTFkMWYzNAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVUb0Fub255bW91c0NsYXNzL01ldGhvZENhbGxJbk5ld0V4cHJlc3Npb25XaXRoUGFyZW5zLmphdmEuYWZ0ZXIKQEAgLTAsMCArMSw5IEBACitwdWJsaWMgY2xhc3MgQSB7CisKKyAgICBwdWJsaWMgdm9pZCB0ZXN0KCkgeworICAgICAgICAobmV3IE9iamVjdCgpIHsKKyAgICAgICAgICAgIHZvaWQgZG9UZXN0KCkgeworICAgICAgICAgICAgfQorICAgICAgICB9KS5kb1Rlc3QoKTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVRvQW5vbnltb3VzQ2xhc3MvTWV0aG9kVXNhZ2UuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVUb0Fub255bW91c0NsYXNzL01ldGhvZFVzYWdlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTMwYTRmNQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVUb0Fub255bW91c0NsYXNzL01ldGhvZFVzYWdlLmphdmEKQEAgLTAsMCArMSwxMyBAQAorY2xhc3MgQSB7CisgICAgcHJpdmF0ZSBPYmplY3QgYiA9IG5ldyBJbm5lcigpOworCisgICAgcHJpdmF0ZSBjbGFzcyA8Y2FyZXQ+SW5uZXIgeworICAgICAgICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgeworICAgICAgICAgICAgcmV0dXJuIGdldE15U3RyaW5nUmVwcmVzZW50YXRpb24oKTsKKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyBTdHJpbmcgZ2V0TXlTdHJpbmdSZXByZXNlbnRhdGlvbigpIHsKKyAgICAgICAgICAgIHJldHVybiAicSI7CisgICAgICAgIH0KKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVRvQW5vbnltb3VzQ2xhc3MvTWV0aG9kVXNhZ2UuamF2YS5hZnRlciBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVUb0Fub255bW91c0NsYXNzL01ldGhvZFVzYWdlLmphdmEuYWZ0ZXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjVkNzA4ZQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVUb0Fub255bW91c0NsYXNzL01ldGhvZFVzYWdlLmphdmEuYWZ0ZXIKQEAgLTAsMCArMSwxMiBAQAorY2xhc3MgQSB7CisgICAgcHJpdmF0ZSBPYmplY3QgYiA9IG5ldyBPYmplY3QoKSB7CisgICAgICAgIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7CisgICAgICAgICAgICByZXR1cm4gZ2V0TXlTdHJpbmdSZXByZXNlbnRhdGlvbigpOworICAgICAgICB9CisKKyAgICAgICAgcHVibGljIFN0cmluZyBnZXRNeVN0cmluZ1JlcHJlc2VudGF0aW9uKCkgeworICAgICAgICAgICAgcmV0dXJuICJxIjsKKyAgICAgICAgfQorICAgIH07CisgICAgCit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVRvQW5vbnltb3VzQ2xhc3MvTXVsdGlwbGVBc3NpZ25tZW50cy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVRvQW5vbnltb3VzQ2xhc3MvTXVsdGlwbGVBc3NpZ25tZW50cy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI3MjVkZDcKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lVG9Bbm9ueW1vdXNDbGFzcy9NdWx0aXBsZUFzc2lnbm1lbnRzLmphdmEKQEAgLTAsMCArMSwyMCBAQAorcHVibGljIGNsYXNzIFdpdGhDdG9yIHsKKwlwcml2YXRlIGludCBteUludCA9IDg7CisJcHJpdmF0ZSBTdHJpbmcgbXlTdHJpbmcgPSAiU2FzaHlhIjsKKworCXB1YmxpYyBXaXRoQ3RvcigpIHsKKwl9CisKKwlwdWJsaWMgV2l0aEN0b3IoaW50IGFuSW50LCBTdHJpbmcgc3RyaW5nKSB7CisJCWludCBpID0gMjsKKwkJaSA9IDM7CisJCW15SW50ID0gaSArIGFuSW50OworCQlpbnQgaiA9IDQ7CisJCWogPSA1OworCQlteVN0cmluZyA9IHN0cmluZy5zdWJzdHJpbmcoaik7CisJfQorfQorCitjbGFzcyBVc2FnZSB7CisgIHByaXZhdGUgV2l0aEN0b3Igd2MxID0gbmV3IFdpdGg8Y2FyZXQ+Q3RvcigxNywgIlNhIik7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVRvQW5vbnltb3VzQ2xhc3MvTXVsdGlwbGVBc3NpZ25tZW50cy5qYXZhLmFmdGVyIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVRvQW5vbnltb3VzQ2xhc3MvTXVsdGlwbGVBc3NpZ25tZW50cy5qYXZhLmFmdGVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM3ODg1YTgKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lVG9Bbm9ueW1vdXNDbGFzcy9NdWx0aXBsZUFzc2lnbm1lbnRzLmphdmEuYWZ0ZXIKQEAgLTAsMCArMSwxNSBAQAorY2xhc3MgVXNhZ2UgeworICBwcml2YXRlIE9iamVjdCB3YzEgPSBuZXcgT2JqZWN0KCkgeworICAgICAgcHJpdmF0ZSBpbnQgbXlJbnQgPSA4OworICAgICAgcHJpdmF0ZSBTdHJpbmcgbXlTdHJpbmcgPSAiU2FzaHlhIjsKKworICAgICAgeworICAgICAgICAgIGludCBpID0gMjsKKyAgICAgICAgICBpID0gMzsKKyAgICAgICAgICBteUludCA9IGkgKyAxNzsKKyAgICAgICAgICBpbnQgaiA9IDQ7CisgICAgICAgICAgaiA9IDU7CisgICAgICAgICAgbXlTdHJpbmcgPSAiU2EiLnN1YnN0cmluZyhqKTsKKyAgICAgIH0KKyAgfTsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lVG9Bbm9ueW1vdXNDbGFzcy9NdWx0aXBsZUNvbnN0cnVjdG9ycy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVRvQW5vbnltb3VzQ2xhc3MvTXVsdGlwbGVDb25zdHJ1Y3RvcnMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZThkNmNmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVRvQW5vbnltb3VzQ2xhc3MvTXVsdGlwbGVDb25zdHJ1Y3RvcnMuamF2YQpAQCAtMCwwICsxLDE3IEBACitjbGFzcyBBIHsKKyAgICBwcml2YXRlIE9iamVjdCBiID0gbmV3IE15RXhjZXB0aW9uKG5ldyBUaHJvd2FibGUoKSwgInciKTsKKworICAgIHByaXZhdGUgY2xhc3MgPGNhcmV0Pk15RXhjZXB0aW9uIGV4dGVuZHMgRXhjZXB0aW9uIHsKKyAgICAgICAgcHVibGljIE15RXhjZXB0aW9uKFN0cmluZyBtc2cpIHsKKyAgICAgICAgICAgIHN1cGVyKG1zZyk7CisgICAgICAgIH0KKworICAgICAgICBwdWJsaWMgTXlFeGNlcHRpb24oVGhyb3dhYmxlIHQsIFN0cmluZyBtc2cpIHsKKyAgICAgICAgICAgIHN1cGVyKG1zZywgdCk7CisgICAgICAgIH0KKworICAgICAgICBwdWJsaWMgU3RyaW5nIGdldE1lc3NhZ2UoKSB7CisgICAgICAgICAgICByZXR1cm4gInEiOworICAgICAgICB9CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVUb0Fub255bW91c0NsYXNzL011bHRpcGxlQ29uc3RydWN0b3JzLmphdmEuYWZ0ZXIgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lVG9Bbm9ueW1vdXNDbGFzcy9NdWx0aXBsZUNvbnN0cnVjdG9ycy5qYXZhLmFmdGVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI1OGU3MDEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lVG9Bbm9ueW1vdXNDbGFzcy9NdWx0aXBsZUNvbnN0cnVjdG9ycy5qYXZhLmFmdGVyCkBAIC0wLDAgKzEsOCBAQAorY2xhc3MgQSB7CisgICAgcHJpdmF0ZSBPYmplY3QgYiA9IG5ldyBFeGNlcHRpb24oInciLCBuZXcgVGhyb3dhYmxlKCkpIHsKKyAgICAgICAgcHVibGljIFN0cmluZyBnZXRNZXNzYWdlKCkgeworICAgICAgICAgICAgcmV0dXJuICJxIjsKKyAgICAgICAgfQorICAgIH07CisKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lVG9Bbm9ueW1vdXNDbGFzcy9NdWx0aXBsZUdlbmVyYXRlZFZhcnMuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVUb0Fub255bW91c0NsYXNzL011bHRpcGxlR2VuZXJhdGVkVmFycy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU1OThiNWYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lVG9Bbm9ueW1vdXNDbGFzcy9NdWx0aXBsZUdlbmVyYXRlZFZhcnMuamF2YQpAQCAtMCwwICsxLDIwIEBACitjbGFzcyBQcml2YXRlSW5pdFVzZXIgeworICAgICAgICBwdWJsaWMgdm9pZCBtZXRob2QoKSB7CisgICAgICAgICAgbmV3IFdpdGhQcml2YXRlSW5pdChuZXcgQ3VzdG9tVHlwZSgiYSIpKTsKKyAgICAgICAgICBuZXcgV2l0aFByaXZhdGVJbml0KG5ldyBDdXN0b21UeXBlKCJiIikpOworICAgICAgICB9CisKKyAgICAgICAgcHVibGljIHN0YXRpYyBjbGFzcyBDdXN0b21UeXBlIHsKKyAgICAgICAgICAgICAgICBwdWJsaWMgQ3VzdG9tVHlwZShTdHJpbmcgcykgeworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgfQorfQorCitjbGFzcyA8Y2FyZXQ+V2l0aFByaXZhdGVJbml0IHsKKyAgICAgICAgcHVibGljIFdpdGhQcml2YXRlSW5pdChQcml2YXRlSW5pdFVzZXIuQ3VzdG9tVHlwZSBjdXN0b21UeXBlKSB7CisgICAgICAgICAgICAgICAgcHJpdmF0ZU1ldGhvZChjdXN0b21UeXBlKTsKKyAgICAgICAgfQorCisgICAgICAgIHByaXZhdGUgdm9pZCBwcml2YXRlTWV0aG9kKFByaXZhdGVJbml0VXNlci5DdXN0b21UeXBlIGN1c3RvbVR5cGUpIHsKKyAgICAgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVRvQW5vbnltb3VzQ2xhc3MvTXVsdGlwbGVHZW5lcmF0ZWRWYXJzLmphdmEuYWZ0ZXIgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lVG9Bbm9ueW1vdXNDbGFzcy9NdWx0aXBsZUdlbmVyYXRlZFZhcnMuamF2YS5hZnRlcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MTAyZGM0Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVRvQW5vbnltb3VzQ2xhc3MvTXVsdGlwbGVHZW5lcmF0ZWRWYXJzLmphdmEuYWZ0ZXIKQEAgLTAsMCArMSwyOCBAQAorY2xhc3MgUHJpdmF0ZUluaXRVc2VyIHsKKyAgICAgICAgcHVibGljIHZvaWQgbWV0aG9kKCkgeworICAgICAgICAgICAgZmluYWwgQ3VzdG9tVHlwZSBjdXN0b21UeXBlID0gbmV3IEN1c3RvbVR5cGUoImEiKTsKKyAgICAgICAgICAgIG5ldyBPYmplY3QoKSB7CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBwcml2YXRlTWV0aG9kKGN1c3RvbVR5cGUpOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIHByaXZhdGUgdm9pZCBwcml2YXRlTWV0aG9kKEN1c3RvbVR5cGUgY3VzdG9tVHlwZSkgeworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH07CisgICAgICAgICAgICBmaW5hbCBDdXN0b21UeXBlIGN1c3RvbVR5cGUxID0gbmV3IEN1c3RvbVR5cGUoImIiKTsKKyAgICAgICAgICAgIG5ldyBPYmplY3QoKSB7CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBwcml2YXRlTWV0aG9kKGN1c3RvbVR5cGUxKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBwcml2YXRlIHZvaWQgcHJpdmF0ZU1ldGhvZChDdXN0b21UeXBlIGN1c3RvbVR5cGUpIHsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9OworICAgICAgICB9CisKKyAgICAgICAgcHVibGljIHN0YXRpYyBjbGFzcyBDdXN0b21UeXBlIHsKKyAgICAgICAgICAgICAgICBwdWJsaWMgQ3VzdG9tVHlwZShTdHJpbmcgcykgeworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgfQorfQorCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lVG9Bbm9ueW1vdXNDbGFzcy9NdWx0aXBsZUlubmVyQ2xhc3Nlcy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVRvQW5vbnltb3VzQ2xhc3MvTXVsdGlwbGVJbm5lckNsYXNzZXMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYWE2Yzg4Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVRvQW5vbnltb3VzQ2xhc3MvTXVsdGlwbGVJbm5lckNsYXNzZXMuamF2YQpAQCAtMCwwICsxLDIxIEBACitjbGFzcyBBIHsKKyAgICBjbGFzcyA8Y2FyZXQ+SW5uZXIgeworICAgICAgICBwcml2YXRlIHZvaWQgYSgpIHsKKyAgICAgICAgfQorCisgICAgICAgIHByaXZhdGUgdm9pZCBiKCkgeworICAgICAgICB9CisKKyAgICAgICAgY2xhc3MgSW5uZXJBIHsKKyAgICAgICAgfQorCisgICAgICAgIGNsYXNzIElubmVyQiB7CisgICAgICAgIH0KKyAgICB9Cit9CisKK2NsYXNzIEIgeworICAgIHB1YmxpYyB2b2lkIHRlc3QoKSB7CisgICAgICAgIEEuSW5uZXIgaW5uZXIgPSBuZXcgQS5Jbm5lcigpOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lVG9Bbm9ueW1vdXNDbGFzcy9NdWx0aXBsZUlubmVyQ2xhc3Nlcy5qYXZhLmFmdGVyIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVRvQW5vbnltb3VzQ2xhc3MvTXVsdGlwbGVJbm5lckNsYXNzZXMuamF2YS5hZnRlcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZDFlN2MyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVRvQW5vbnltb3VzQ2xhc3MvTXVsdGlwbGVJbm5lckNsYXNzZXMuamF2YS5hZnRlcgpAQCAtMCwwICsxLDIwIEBACitjbGFzcyBBIHsKK30KKworY2xhc3MgQiB7CisgICAgcHVibGljIHZvaWQgdGVzdCgpIHsKKyAgICAgICAgT2JqZWN0IGlubmVyID0gbmV3IE9iamVjdCgpIHsKKyAgICAgICAgICAgIHByaXZhdGUgdm9pZCBhKCkgeworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBwcml2YXRlIHZvaWQgYigpIHsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgY2xhc3MgSW5uZXJBIHsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgY2xhc3MgSW5uZXJCIHsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVRvQW5vbnltb3VzQ2xhc3MvTmV3RXhwcmVzc2lvbkNvbnRleHQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVUb0Fub255bW91c0NsYXNzL05ld0V4cHJlc3Npb25Db250ZXh0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDM2YmE4MwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVUb0Fub255bW91c0NsYXNzL05ld0V4cHJlc3Npb25Db250ZXh0LmphdmEKQEAgLTAsMCArMSwxMyBAQAorY2xhc3MgQSB7CisgICAgcHJpdmF0ZSBPYmplY3QgYiA9IG5ldyBJbm5lcigpOworICAgIHByaXZhdGUgT2JqZWN0IGMgPSBuZXcgT2JqZWN0KCkgeworICAgICAgICBwdWJsaWMgdm9pZCBkb1N0dWZmKElubmVyIGkpIHsKKyAgICAgICAgfQorICAgIH07CisKKyAgICBwcml2YXRlIGNsYXNzIDxjYXJldD5Jbm5lciB7CisgICAgICAgIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7CisgICAgICAgICAgICByZXR1cm4gIkEiOworICAgICAgICB9CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVUb0Fub255bW91c0NsYXNzL05ld0V4cHJlc3Npb25Db250ZXh0LmphdmEuYWZ0ZXIgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lVG9Bbm9ueW1vdXNDbGFzcy9OZXdFeHByZXNzaW9uQ29udGV4dC5qYXZhLmFmdGVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEzZThjYWEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lVG9Bbm9ueW1vdXNDbGFzcy9OZXdFeHByZXNzaW9uQ29udGV4dC5qYXZhLmFmdGVyCkBAIC0wLDAgKzEsMTIgQEAKK2NsYXNzIEEgeworICAgIHByaXZhdGUgT2JqZWN0IGIgPSBuZXcgT2JqZWN0KCkgeworICAgICAgICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgeworICAgICAgICAgICAgcmV0dXJuICJBIjsKKyAgICAgICAgfQorICAgIH07CisgICAgcHJpdmF0ZSBPYmplY3QgYyA9IG5ldyBPYmplY3QoKSB7CisgICAgICAgIHB1YmxpYyB2b2lkIGRvU3R1ZmYoT2JqZWN0IGkpIHsKKyAgICAgICAgfQorICAgIH07CisKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lVG9Bbm9ueW1vdXNDbGFzcy9Ob0lubGluZUFic3RyYWN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lVG9Bbm9ueW1vdXNDbGFzcy9Ob0lubGluZUFic3RyYWN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzIzMTFjMQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVUb0Fub255bW91c0NsYXNzL05vSW5saW5lQWJzdHJhY3QuamF2YQpAQCAtMCwwICsxLDkgQEAKK2NsYXNzIEEgeworICAgIHByaXZhdGUgT2JqZWN0IGIgPSBuZXcgSW5uZXIoKTsKKworICAgIHB1YmxpYyBhYnN0cmFjdCBjbGFzcyA8Y2FyZXQ+SW5uZXIgeworICAgICAgICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgeworICAgICAgICAgICAgcmV0dXJuICJBIjsKKyAgICAgICAgfQorICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lVG9Bbm9ueW1vdXNDbGFzcy9Ob0lubGluZUFubm90YXRpb25UeXBlLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lVG9Bbm9ueW1vdXNDbGFzcy9Ob0lubGluZUFubm90YXRpb25UeXBlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjQyODdjMwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVUb0Fub255bW91c0NsYXNzL05vSW5saW5lQW5ub3RhdGlvblR5cGUuamF2YQpAQCAtMCwwICsxLDkgQEAKK2NsYXNzIEEgeworICAgIEBJbm5lcgorICAgIHB1YmxpYyB2b2lkIHRlc3QoKSB7CisgICAgfQorCit9CisKK0BpbnRlcmZhY2UgPGNhcmV0PklubmVyIHsKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVUb0Fub255bW91c0NsYXNzL05vSW5saW5lQ2F0Y2hDbGF1c2UuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVUb0Fub255bW91c0NsYXNzL05vSW5saW5lQ2F0Y2hDbGF1c2UuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZjlkZTM1Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVRvQW5vbnltb3VzQ2xhc3MvTm9JbmxpbmVDYXRjaENsYXVzZS5qYXZhCkBAIC0wLDAgKzEsMTggQEAKK2NsYXNzIEEgeworICAgIHB1YmxpYyB2b2lkIHRlc3QoKSB7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICB0ZXN0MigpOworICAgICAgICB9CisgICAgICAgIGNhdGNoKElubmVyIGV4KSB7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwcml2YXRlIHZvaWQgdGVzdDIoKSB7CisgICAgfQorCisgICAgcHJpdmF0ZSBjbGFzcyA8Y2FyZXQ+SW5uZXIgZXh0ZW5kcyBSdW50aW1lRXhjZXB0aW9uIHsKKyAgICAgICAgcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKKyAgICAgICAgICAgIHJldHVybiAiQSI7CisgICAgICAgIH0KKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVRvQW5vbnltb3VzQ2xhc3MvTm9JbmxpbmVDbGFzc0xpdGVyYWwuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVUb0Fub255bW91c0NsYXNzL05vSW5saW5lQ2xhc3NMaXRlcmFsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTBhODI5MwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVUb0Fub255bW91c0NsYXNzL05vSW5saW5lQ2xhc3NMaXRlcmFsLmphdmEKQEAgLTAsMCArMSwxMyBAQAorY2xhc3MgQSB7CisgICAgcHJpdmF0ZSBPYmplY3QgYiA9IG5ldyBJbm5lcigpOworCisgICAgcHVibGljIHZvaWQgdGVzdCgpIHsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKElubmVyLmNsYXNzLmdldE5hbWUoKSk7CisgICAgfQorCisgICAgcHJpdmF0ZSBjbGFzcyA8Y2FyZXQ+SW5uZXIgeworICAgICAgICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgeworICAgICAgICAgICAgcmV0dXJuICJBIjsKKyAgICAgICAgfQorICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lVG9Bbm9ueW1vdXNDbGFzcy9Ob0lubGluZUVudW0uamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVUb0Fub255bW91c0NsYXNzL05vSW5saW5lRW51bS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQwMDdkMGQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lVG9Bbm9ueW1vdXNDbGFzcy9Ob0lubGluZUVudW0uamF2YQpAQCAtMCwwICsxLDggQEAKK2NsYXNzIEEgeworICAgIHB1YmxpYyB2b2lkIHRlc3QoSW5uZXIgYikgeworICAgIH0KK30KKworZW51bSA8Y2FyZXQ+SW5uZXIgeworICAgIEEsIEIKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVUb0Fub255bW91c0NsYXNzL05vSW5saW5lRmllbGRVc2FnZS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVRvQW5vbnltb3VzQ2xhc3MvTm9JbmxpbmVGaWVsZFVzYWdlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzRkOTUzMgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVUb0Fub255bW91c0NsYXNzL05vSW5saW5lRmllbGRVc2FnZS5qYXZhCkBAIC0wLDAgKzEsMTMgQEAKK2NsYXNzIEEgeworICAgIHB1YmxpYyB2b2lkIGYoKSB7CisgICAgICAgIElubmVyIGkgPSBuZXcgSW5uZXIoKTsKKyAgICAgICAgaS5xID0gMjsKKyAgICB9CisKKyAgICBwcml2YXRlIGNsYXNzIDxjYXJldD5Jbm5lciBpbXBsZW1lbnRzIFJ1bm5hYmxlIHsKKyAgICAgICAgcHVibGljIGludCBxID0gMTsKKworICAgICAgICBwdWJsaWMgdm9pZCBydW4oKSB7CisgICAgICAgIH0KKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVRvQW5vbnltb3VzQ2xhc3MvTm9JbmxpbmVJbnRlcmZhY2UuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVUb0Fub255bW91c0NsYXNzL05vSW5saW5lSW50ZXJmYWNlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODZkMTE0ZQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVUb0Fub255bW91c0NsYXNzL05vSW5saW5lSW50ZXJmYWNlLmphdmEKQEAgLTAsMCArMSw4IEBACitjbGFzcyBBIHsKKyAgICBwdWJsaWMgdm9pZCB0ZXN0KElubmVyIGIpIHsKKyAgICB9CisKKyAgICBwdWJsaWMgaW50ZXJmYWNlIDxjYXJldD5Jbm5lciB7CisgICAgICAgIHZvaWQgZG9TdHVmZigpOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lVG9Bbm9ueW1vdXNDbGFzcy9Ob0lubGluZUxpYnJhcnlDbGFzcy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVRvQW5vbnltb3VzQ2xhc3MvTm9JbmxpbmVMaWJyYXJ5Q2xhc3MuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lODU2NmRmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVRvQW5vbnltb3VzQ2xhc3MvTm9JbmxpbmVMaWJyYXJ5Q2xhc3MuamF2YQpAQCAtMCwwICsxLDMgQEAKK2NsYXNzIEEgeworICAgIHByaXZhdGUgPGNhcmV0PlN0cmluZyBzID0gbmV3IFN0cmluZygpOworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVUb0Fub255bW91c0NsYXNzL05vSW5saW5lTWV0aG9kVXNhZ2UuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVUb0Fub255bW91c0NsYXNzL05vSW5saW5lTWV0aG9kVXNhZ2UuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZDQ5YjVjCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVRvQW5vbnltb3VzQ2xhc3MvTm9JbmxpbmVNZXRob2RVc2FnZS5qYXZhCkBAIC0wLDAgKzEsMTEgQEAKK2NsYXNzIEEgeworICAgIHB1YmxpYyB2b2lkIGYoKSB7CisgICAgICAgIElubmVyIGkgPSBuZXcgSW5uZXIoKTsKKyAgICAgICAgaS5kb1N0dWZmKCk7CisgICAgfQorCisgICAgcHJpdmF0ZSBjbGFzcyA8Y2FyZXQ+SW5uZXIgeworICAgICAgICBwdWJsaWMgdm9pZCBkb1N0dWZmKCkgeworICAgICAgICB9CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVUb0Fub255bW91c0NsYXNzL05vSW5saW5lTXVsdGlwbGVJbnRlcmZhY2VzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lVG9Bbm9ueW1vdXNDbGFzcy9Ob0lubGluZU11bHRpcGxlSW50ZXJmYWNlcy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFiMjI5MWUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lVG9Bbm9ueW1vdXNDbGFzcy9Ob0lubGluZU11bHRpcGxlSW50ZXJmYWNlcy5qYXZhCkBAIC0wLDAgKzEsMTMgQEAKK2ltcG9ydCBqYXZhLmF3dC5ldmVudC4qOworCitjbGFzcyBBIHsKKyAgICBwcml2YXRlIE9iamVjdCBiID0gbmV3IElubmVyKCk7CisKKyAgICBwdWJsaWMgY2xhc3MgPGNhcmV0PklubmVyIGltcGxlbWVudHMgUnVubmFibGUsIEFjdGlvbkxpc3RlbmVyIHsKKyAgICAgICAgcHVibGljIHZvaWQgcnVuKCkgeworICAgICAgICB9CisKKyAgICAgICAgcHVibGljIHZvaWQgYWN0aW9uUGVyZm9ybWVkKEFjdGlvbkV2ZW50IGUpIHsKKyAgICAgICAgfQorICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lVG9Bbm9ueW1vdXNDbGFzcy9Ob0lubGluZU5ld1dpdGhJbm5lci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVRvQW5vbnltb3VzQ2xhc3MvTm9JbmxpbmVOZXdXaXRoSW5uZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMjA3ZTQyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVRvQW5vbnltb3VzQ2xhc3MvTm9JbmxpbmVOZXdXaXRoSW5uZXIuamF2YQpAQCAtMCwwICsxLDEwIEBACitjbGFzcyA8Y2FyZXQ+V2l0aElubmVyIHsKKyAgICBwdWJsaWMgY2xhc3MgSW5uZXIgeworICAgIH0KK30KKworY2xhc3MgQSB7CisgICAgcHVibGljIHZvaWQgdGVzdCgpIHsKKyAgICAgICAgV2l0aElubmVyLklubmVyIGkgPSBuZXcgV2l0aElubmVyKCkubmV3IElubmVyKCk7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVUb0Fub255bW91c0NsYXNzL05vSW5saW5lTm9Vc2FnZXMuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVUb0Fub255bW91c0NsYXNzL05vSW5saW5lTm9Vc2FnZXMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yM2VjOTFkCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVRvQW5vbnltb3VzQ2xhc3MvTm9JbmxpbmVOb1VzYWdlcy5qYXZhCkBAIC0wLDAgKzEsNyBAQAorY2xhc3MgQSB7CisgICAgcHJpdmF0ZSBjbGFzcyA8Y2FyZXQ+SW5uZXIgeworICAgICAgICBwdWJsaWMgSW5uZXIgbmV3SW5zdGFuY2UoKSB7CisgICAgICAgICAgICByZXR1cm4gbmV3IElubmVyKCk7CisgICAgICAgIH0KKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVRvQW5vbnltb3VzQ2xhc3MvTm9JbmxpbmVSZWN1cnNpdmVBY2Nlc3MuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVUb0Fub255bW91c0NsYXNzL05vSW5saW5lUmVjdXJzaXZlQWNjZXNzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGFlODA3ZgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVUb0Fub255bW91c0NsYXNzL05vSW5saW5lUmVjdXJzaXZlQWNjZXNzLmphdmEKQEAgLTAsMCArMSwyMCBAQAorcHVibGljIGNsYXNzIFNlbGZQYXJhbXMgeworCXByaXZhdGUgaW50IG15VmFyID0gMDsKKworCXByaXZhdGUgaW50IG15UHJvcCA9IDA7CisJcHVibGljIGludCBnZXRQcm9wKCkgeworCQlyZXR1cm4gbXlQcm9wOworCX0KKwlwdWJsaWMgdm9pZCBzZXRQcm9wKGludCBwcm9wKSB7CisJCW15UHJvcCA9IHByb3A7CisJfQorCisJcHVibGljIHZvaWQgY29weShTZWxmUGFyYW1zIHNwKSB7CisJCXRoaXMubXlWYXIgPSBzcC5teVZhcjsKKwkJdGhpcy5teVByb3AgPSBzcC5nZXRQcm9wKCk7CisJfQorfQorCitjbGFzcyBVc2FnZSB7CisgIFNlbGZQYXJhbXMgcyA9IG5ldyBTZWxmPGNhcmV0PlBhcmFtcygpOworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVUb0Fub255bW91c0NsYXNzL05vSW5saW5lUmV0dXJuSW5Db25zdHJ1Y3Rvci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVRvQW5vbnltb3VzQ2xhc3MvTm9JbmxpbmVSZXR1cm5JbkNvbnN0cnVjdG9yLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTAwNmZhYgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVUb0Fub255bW91c0NsYXNzL05vSW5saW5lUmV0dXJuSW5Db25zdHJ1Y3Rvci5qYXZhCkBAIC0wLDAgKzEsMTUgQEAKK2NsYXNzIEEgeworICAgIHByaXZhdGUgT2JqZWN0IGIgPSBuZXcgTXlFeGNlcHRpb24oKTsKKworICAgIHByaXZhdGUgY2xhc3MgPGNhcmV0Pk15RXhjZXB0aW9uIGV4dGVuZHMgRXhjZXB0aW9uIHsKKyAgICAgICAgcHVibGljIE15RXhjZXB0aW9uKCkgeworICAgICAgICAgICAgc3VwZXIoInciKTsKKyAgICAgICAgICAgIGlmICh0b1N0cmluZygpLmxlbmd0aCgpID09IDApIHJldHVybjsKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbih0b1N0cmluZygpKTsKKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyBTdHJpbmcgZ2V0TWVzc2FnZSgpIHsKKyAgICAgICAgICAgIHJldHVybiAicSI7CisgICAgICAgIH0KKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVRvQW5vbnltb3VzQ2xhc3MvTm9JbmxpbmVTdGF0aWNGaWVsZC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVRvQW5vbnltb3VzQ2xhc3MvTm9JbmxpbmVTdGF0aWNGaWVsZC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdlMjZiY2QKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lVG9Bbm9ueW1vdXNDbGFzcy9Ob0lubGluZVN0YXRpY0ZpZWxkLmphdmEKQEAgLTAsMCArMSwxMSBAQAoraW1wb3J0IGphdmEuaW87CisKK2NsYXNzIEEgeworICAgIHB1YmxpYyB2b2lkIHRlc3QoKSB7CisgICAgICAgIElubGluZWQgaSA9IG5ldyBJbmxpbmVkKCk7CisgICAgfQorfQorCitjbGFzcyA8Y2FyZXQ+SW5saW5lZCB7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJlYW0gcyA9IFN5c3RlbS5vdXQ7Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lVG9Bbm9ueW1vdXNDbGFzcy9Ob0lubGluZVN0YXRpY0luaXRpYWxpemVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lVG9Bbm9ueW1vdXNDbGFzcy9Ob0lubGluZVN0YXRpY0luaXRpYWxpemVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTA1MmE0ZgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVUb0Fub255bW91c0NsYXNzL05vSW5saW5lU3RhdGljSW5pdGlhbGl6ZXIuamF2YQpAQCAtMCwwICsxLDE3IEBACitjbGFzcyBBIHsKKyAgICBwcml2YXRlIE9iamVjdCBiID0gbmV3IElubmVyKCk7CisKKyAgICBwcml2YXRlIGNsYXNzIDxjYXJldD5Jbm5lciB7CisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIGNsYXNzIGluaXRpYWxpemVyCisgICAgICAgIH0KKworICAgICAgICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgeworICAgICAgICAgICAgcmV0dXJuICJBIjsKKyAgICAgICAgfQorCisgICAgICAgIHN0YXRpYyB7CisgICAgICAgICAgICAvLyBzdGF0aWMgaW5pdGlhbGl6ZXIKKyAgICAgICAgfQorICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lVG9Bbm9ueW1vdXNDbGFzcy9Ob0lubGluZVN0YXRpY0lubmVyQ2xhc3MuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVUb0Fub255bW91c0NsYXNzL05vSW5saW5lU3RhdGljSW5uZXJDbGFzcy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg4Yjk0ZWQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lVG9Bbm9ueW1vdXNDbGFzcy9Ob0lubGluZVN0YXRpY0lubmVyQ2xhc3MuamF2YQpAQCAtMCwwICsxLDEyIEBACitpbXBvcnQgamF2YS5pbzsKKworY2xhc3MgQSB7CisgICAgcHVibGljIHZvaWQgdGVzdCgpIHsKKyAgICAgICAgSW5saW5lZCBpID0gbmV3IElubGluZWQoKTsKKyAgICB9Cit9CisKK2NsYXNzIDxjYXJldD5JbmxpbmVkIHsKKyAgICBwdWJsaWMgc3RhdGljIGNsYXNzIEEgeworICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVUb0Fub255bW91c0NsYXNzL05vSW5saW5lU3RhdGljTWV0aG9kLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lVG9Bbm9ueW1vdXNDbGFzcy9Ob0lubGluZVN0YXRpY01ldGhvZC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQwODZiM2MKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lVG9Bbm9ueW1vdXNDbGFzcy9Ob0lubGluZVN0YXRpY01ldGhvZC5qYXZhCkBAIC0wLDAgKzEsMTIgQEAKK2ltcG9ydCBqYXZhLmlvOworCitjbGFzcyBBIHsKKyAgICBwdWJsaWMgdm9pZCB0ZXN0KCkgeworICAgICAgICBJbmxpbmVkIGkgPSBuZXcgSW5saW5lZCgpOworICAgIH0KK30KKworY2xhc3MgPGNhcmV0PklubGluZWQgeworICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKCkgeworICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVUb0Fub255bW91c0NsYXNzL05vSW5saW5lU3RhdGljTm9uRmluYWxGaWVsZC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVRvQW5vbnltb3VzQ2xhc3MvTm9JbmxpbmVTdGF0aWNOb25GaW5hbEZpZWxkLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjRhZGQ0NgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVUb0Fub255bW91c0NsYXNzL05vSW5saW5lU3RhdGljTm9uRmluYWxGaWVsZC5qYXZhCkBAIC0wLDAgKzEsMTEgQEAKK2ltcG9ydCBqYXZhLmlvOworCitjbGFzcyBBIHsKKyAgICBwdWJsaWMgdm9pZCB0ZXN0KCkgeworICAgICAgICBJbmxpbmVkIGkgPSBuZXcgSW5saW5lZCgpOworICAgIH0KK30KKworY2xhc3MgPGNhcmV0PklubGluZWQgeworICAgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIHMgPSAicyI7Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lVG9Bbm9ueW1vdXNDbGFzcy9Ob0lubGluZVN1cGVyY2xhc3NJbnRlcmZhY2UuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVUb0Fub255bW91c0NsYXNzL05vSW5saW5lU3VwZXJjbGFzc0ludGVyZmFjZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVhOTMzNjgKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lVG9Bbm9ueW1vdXNDbGFzcy9Ob0lubGluZVN1cGVyY2xhc3NJbnRlcmZhY2UuamF2YQpAQCAtMCwwICsxLDEwIEBACitpbXBvcnQgamF2YS5hd3QuZXZlbnQuKjsKKworY2xhc3MgQSB7CisgICAgcHJpdmF0ZSBPYmplY3QgYiA9IG5ldyBJbm5lcigpOworCisgICAgcHVibGljIGNsYXNzIDxjYXJldD5Jbm5lciBleHRlbmRzIFRocm93YWJsZSBpbXBsZW1lbnRzIFJ1bm5hYmxlIHsKKyAgICAgICAgcHVibGljIHZvaWQgcnVuKCkgeworICAgICAgICB9CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVUb0Fub255bW91c0NsYXNzL05vSW5saW5lVGhpc1F1YWxpZmllci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVRvQW5vbnltb3VzQ2xhc3MvTm9JbmxpbmVUaGlzUXVhbGlmaWVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmU3MWRiYgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVUb0Fub255bW91c0NsYXNzL05vSW5saW5lVGhpc1F1YWxpZmllci5qYXZhCkBAIC0wLDAgKzEsMTUgQEAKK2NsYXNzIDxjYXJldD5BIHsKKyAgcHJpdmF0ZSBpbnQgYjsKKworICBwcml2YXRlIGNsYXNzIEIgeworICAgIHByaXZhdGUgaW50IGI7CisKKyAgICB2b2lkIGRvVGVzdCgpIHsKKyAgICAgIGIgPSBBLnRoaXMuYjsKKyAgICB9CisgIH0KK30KKworY2xhc3MgVXNlciB7CisgIEEgYSA9IG5ldyBBKCk7Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lVG9Bbm9ueW1vdXNDbGFzcy9Ob0lubGluZVRocm93c0NsYXVzZS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVRvQW5vbnltb3VzQ2xhc3MvTm9JbmxpbmVUaHJvd3NDbGF1c2UuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MTQwMTY5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVRvQW5vbnltb3VzQ2xhc3MvTm9JbmxpbmVUaHJvd3NDbGF1c2UuamF2YQpAQCAtMCwwICsxLDE5IEBACitjbGFzcyBBIHsKKyAgICBwdWJsaWMgdm9pZCB0ZXN0KCkgeworICAgICAgICB0cnkgeworICAgICAgICAgICAgdGVzdDIoKTsKKyAgICAgICAgfQorICAgICAgICBjYXRjaChFeGNlcHRpb24gZXgpIHsKKyAgICAgICAgfQorICAgIH0KKworICAgIHByaXZhdGUgdm9pZCB0ZXN0MigpIHRocm93cyBJbm5lciB7CisgICAgICAgIHRocm93IG5ldyBJbm5lcigpOworICAgIH0KKworICAgIHByaXZhdGUgY2xhc3MgPGNhcmV0PklubmVyIGV4dGVuZHMgRXhjZXB0aW9uIHsKKyAgICAgICAgcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKKyAgICAgICAgICAgIHJldHVybiAiQSI7CisgICAgICAgIH0KKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVRvQW5vbnltb3VzQ2xhc3MvTm9JbmxpbmVVbnJlc29sdmVkQ29uc3RydWN0b3IuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVUb0Fub255bW91c0NsYXNzL05vSW5saW5lVW5yZXNvbHZlZENvbnN0cnVjdG9yLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTBiMGMzYQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVUb0Fub255bW91c0NsYXNzL05vSW5saW5lVW5yZXNvbHZlZENvbnN0cnVjdG9yLmphdmEKQEAgLTAsMCArMSw5IEBACitjbGFzcyBBIHsKKyAgICBwcml2YXRlIE9iamVjdCBiID0gbmV3IElubmVyKCJxIik7CisKKyAgICBwcml2YXRlIGNsYXNzIDxjYXJldD5Jbm5lciB7CisgICAgICAgIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7CisgICAgICAgICAgICByZXR1cm4gIkEiOworICAgICAgICB9CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVUb0Fub255bW91c0NsYXNzL05vSW5saW5lVW5yZXNvbHZlZENvbnN0cnVjdG9yMi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVRvQW5vbnltb3VzQ2xhc3MvTm9JbmxpbmVVbnJlc29sdmVkQ29uc3RydWN0b3IyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjYyYzBhNDMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lVG9Bbm9ueW1vdXNDbGFzcy9Ob0lubGluZVVucmVzb2x2ZWRDb25zdHJ1Y3RvcjIuamF2YQpAQCAtMCwwICsxLDEyIEBACitjbGFzcyBBIHsKKyAgICBwcml2YXRlIE9iamVjdCBiID0gbmV3IElubmVyKCk7CisKKyAgICBwcml2YXRlIGNsYXNzIDxjYXJldD5Jbm5lciB7CisgICAgICAgIHB1YmxpYyBJbm5lcihpbnQgaSkgeworICAgICAgICB9CisKKyAgICAgICAgcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKKyAgICAgICAgICAgIHJldHVybiAiQSI7CisgICAgICAgIH0KKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVRvQW5vbnltb3VzQ2xhc3MvTm9JbmxpbmVVbnJlc29sdmVkSW50ZXJmYWNlLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lVG9Bbm9ueW1vdXNDbGFzcy9Ob0lubGluZVVucmVzb2x2ZWRJbnRlcmZhY2UuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YmQ4MGVlCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVRvQW5vbnltb3VzQ2xhc3MvTm9JbmxpbmVVbnJlc29sdmVkSW50ZXJmYWNlLmphdmEKQEAgLTAsMCArMSw5IEBACitjbGFzcyBBIHsKKyAgICBwcml2YXRlIE9iamVjdCBiID0gbmV3IElubmVyKCJxIik7CisKKyAgICBwcml2YXRlIGNsYXNzIDxjYXJldD5Jbm5lciBpbXBsZW1lbnRzIFNvbWVzaGl0IHsKKyAgICAgICAgcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKKyAgICAgICAgICAgIHJldHVybiAiQSI7CisgICAgICAgIH0KKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVRvQW5vbnltb3VzQ2xhc3MvTm9JbmxpbmVVbnJlc29sdmVkU3VwZXJjbGFzcy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVRvQW5vbnltb3VzQ2xhc3MvTm9JbmxpbmVVbnJlc29sdmVkU3VwZXJjbGFzcy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFiNmMxZDAKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lVG9Bbm9ueW1vdXNDbGFzcy9Ob0lubGluZVVucmVzb2x2ZWRTdXBlcmNsYXNzLmphdmEKQEAgLTAsMCArMSw5IEBACitjbGFzcyBBIHsKKyAgICBwcml2YXRlIE9iamVjdCBiID0gbmV3IElubmVyKCJxIik7CisKKyAgICBwcml2YXRlIGNsYXNzIDxjYXJldD5Jbm5lciBleHRlbmRzIFNvbWVzaGl0IHsKKyAgICAgICAgcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKKyAgICAgICAgICAgIHJldHVybiAiQSI7CisgICAgICAgIH0KKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVRvQW5vbnltb3VzQ2xhc3MvTnVsbEluaXRpYWxpemVkRmllbGQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVUb0Fub255bW91c0NsYXNzL051bGxJbml0aWFsaXplZEZpZWxkLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTkzZDI1MgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVUb0Fub255bW91c0NsYXNzL051bGxJbml0aWFsaXplZEZpZWxkLmphdmEKQEAgLTAsMCArMSwxOCBAQAorY2xhc3MgQSB7CisgICAgcHJpdmF0ZSBPYmplY3QgYiA9IG5ldyBJbm5lcigpOworCisgICAgcHJpdmF0ZSBjbGFzcyA8Y2FyZXQ+SW5uZXIgeworICAgICAgICBwcml2YXRlIFN0cmluZyBzOworCisgICAgICAgIHB1YmxpYyBJbm5lcigpIHsKKyAgICAgICAgICAgIHM9bnVsbDsKKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7CisgICAgICAgICAgICBpZiAocyA9PSBudWxsKSB7CisgICAgICAgICAgICAgICAgcyA9ICJxIjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiAiQSI7CisgICAgICAgIH0KKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVRvQW5vbnltb3VzQ2xhc3MvTnVsbEluaXRpYWxpemVkRmllbGQuamF2YS5hZnRlciBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVUb0Fub255bW91c0NsYXNzL051bGxJbml0aWFsaXplZEZpZWxkLmphdmEuYWZ0ZXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTAzNzA1OAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVUb0Fub255bW91c0NsYXNzL051bGxJbml0aWFsaXplZEZpZWxkLmphdmEuYWZ0ZXIKQEAgLTAsMCArMSwxMyBAQAorY2xhc3MgQSB7CisgICAgcHJpdmF0ZSBPYmplY3QgYiA9IG5ldyBPYmplY3QoKSB7CisgICAgICAgIHByaXZhdGUgU3RyaW5nIHMgPSBudWxsOworCisgICAgICAgIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7CisgICAgICAgICAgICBpZiAocyA9PSBudWxsKSB7CisgICAgICAgICAgICAgICAgcyA9ICJxIjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiAiQSI7CisgICAgICAgIH0KKyAgICB9OworCit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVRvQW5vbnltb3VzQ2xhc3MvT3V0ZXJDbGFzc0ZpZWxkQWNjZXNzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lVG9Bbm9ueW1vdXNDbGFzcy9PdXRlckNsYXNzRmllbGRBY2Nlc3MuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YjA1MmU1Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVRvQW5vbnltb3VzQ2xhc3MvT3V0ZXJDbGFzc0ZpZWxkQWNjZXNzLmphdmEKQEAgLTAsMCArMSwxNCBAQAorY2xhc3MgT3V0ZXIgeworICAgIGludCBpOworCisgICAgY2xhc3MgSW5uZXIgeworICAgICAgICBwdWJsaWMgdm9pZCBmKCkgeworICAgICAgICAgICAgaW50IGogPSBpOworICAgICAgICB9CisgICAgfQorCisgICAgdm9pZCBmb28oKSB7CisgICAgICAgIGZpbmFsIGludCBpID0gMDsKKyAgICAgICAgbmV3IDxjYXJldD5Jbm5lcigpOyAKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVRvQW5vbnltb3VzQ2xhc3MvT3V0ZXJDbGFzc0ZpZWxkQWNjZXNzLmphdmEuYWZ0ZXIgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lVG9Bbm9ueW1vdXNDbGFzcy9PdXRlckNsYXNzRmllbGRBY2Nlc3MuamF2YS5hZnRlcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYjRkODJiCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVRvQW5vbnltb3VzQ2xhc3MvT3V0ZXJDbGFzc0ZpZWxkQWNjZXNzLmphdmEuYWZ0ZXIKQEAgLTAsMCArMSwxMiBAQAorY2xhc3MgT3V0ZXIgeworICAgIGludCBpOworCisgICAgdm9pZCBmb28oKSB7CisgICAgICAgIGZpbmFsIGludCBpID0gMDsKKyAgICAgICAgbmV3IE9iamVjdCgpIHsKKyAgICAgICAgICAgIHB1YmxpYyB2b2lkIGYoKSB7CisgICAgICAgICAgICAgICAgaW50IGogPSBPdXRlci50aGlzLmk7CisgICAgICAgICAgICB9CisgICAgICAgIH07CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVUb0Fub255bW91c0NsYXNzL092ZXJ3cml0ZUluaXRpYWxpemVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lVG9Bbm9ueW1vdXNDbGFzcy9PdmVyd3JpdGVJbml0aWFsaXplci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMzOTI4ODcxCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVRvQW5vbnltb3VzQ2xhc3MvT3ZlcndyaXRlSW5pdGlhbGl6ZXIuamF2YQpAQCAtMCwwICsxLDE4IEBACitjbGFzcyBBIHsKKyAgICBwcml2YXRlIE9iamVjdCBiID0gbmV3IElubmVyKDEwMCk7CisKKyAgICBwcml2YXRlIGNsYXNzIDxjYXJldD5Jbm5lciB7CisgICAgICAgIHByaXZhdGUgaW50IG15SW50ID0gMDsKKworICAgICAgICBwdWJsaWMgSW5uZXIoKSB7CisgICAgICAgIH0KKworICAgICAgICBwdWJsaWMgSW5uZXIoaW50IGFuSW50KSB7CisJICAgIG15SW50ID0gYW5JbnQ7CisgICAgICAgIH0KKworICAgICAgICBwdWJsaWMgaW50IGdldEludCgpIHsKKwkgICAgcmV0dXJuIG15SW50OworICAgICAgICB9CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVUb0Fub255bW91c0NsYXNzL092ZXJ3cml0ZUluaXRpYWxpemVyLmphdmEuYWZ0ZXIgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lVG9Bbm9ueW1vdXNDbGFzcy9PdmVyd3JpdGVJbml0aWFsaXplci5qYXZhLmFmdGVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMxODcxNDEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lVG9Bbm9ueW1vdXNDbGFzcy9PdmVyd3JpdGVJbml0aWFsaXplci5qYXZhLmFmdGVyCkBAIC0wLDAgKzEsMTAgQEAKK2NsYXNzIEEgeworICAgIHByaXZhdGUgT2JqZWN0IGIgPSBuZXcgT2JqZWN0KCkgeworICAgICAgICBwcml2YXRlIGludCBteUludCA9IDEwMDsKKworICAgICAgICBwdWJsaWMgaW50IGdldEludCgpIHsKKwkgICAgcmV0dXJuIG15SW50OworICAgICAgICB9CisgICAgfTsKKworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVUb0Fub255bW91c0NsYXNzL1BhcmFtVHlwZVJlcGxhY2VtZW50LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lVG9Bbm9ueW1vdXNDbGFzcy9QYXJhbVR5cGVSZXBsYWNlbWVudC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA2ODdlMWUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lVG9Bbm9ueW1vdXNDbGFzcy9QYXJhbVR5cGVSZXBsYWNlbWVudC5qYXZhCkBAIC0wLDAgKzEsMTMgQEAKK3B1YmxpYyBjbGFzcyBTaW1wbGUgaW1wbGVtZW50cyBSdW5uYWJsZXsKKyAgdm9pZCBmb28oU2ltcGxlIHMpIHsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4ocy50b1N0cmluZygpKTsKKyAgICBzLnJ1bigpOworICB9CisKKyAgcHVibGljIHZvaWQgcnVuKCl7CisgIH0KK30KKworY2xhc3MgVXNhZ2UgeworICBTaW1wbGUgcyA9IG5ldyBTaW08Y2FyZXQ+cGxlKCk7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVRvQW5vbnltb3VzQ2xhc3MvUGFyYW1UeXBlUmVwbGFjZW1lbnQuamF2YS5hZnRlciBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVUb0Fub255bW91c0NsYXNzL1BhcmFtVHlwZVJlcGxhY2VtZW50LmphdmEuYWZ0ZXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWU3MzY5OAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVUb0Fub255bW91c0NsYXNzL1BhcmFtVHlwZVJlcGxhY2VtZW50LmphdmEuYWZ0ZXIKQEAgLTAsMCArMSwxMSBAQAorY2xhc3MgVXNhZ2UgeworICBSdW5uYWJsZSBzID0gbmV3IFJ1bm5hYmxlKCkgeworICAgICAgdm9pZCBmb28oUnVubmFibGUgcykgeworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4ocy50b1N0cmluZygpKTsKKyAgICAgICAgcy5ydW4oKTsKKyAgICAgIH0KKworICAgICAgcHVibGljIHZvaWQgcnVuKCl7CisgICAgICB9CisgIH07Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVRvQW5vbnltb3VzQ2xhc3MvUHJpdmF0ZUZpZWxkVXNlZEZyb21Jbm5lckNsYXNzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lVG9Bbm9ueW1vdXNDbGFzcy9Qcml2YXRlRmllbGRVc2VkRnJvbUlubmVyQ2xhc3MuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYjc4YzhlCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVRvQW5vbnltb3VzQ2xhc3MvUHJpdmF0ZUZpZWxkVXNlZEZyb21Jbm5lckNsYXNzLmphdmEKQEAgLTAsMCArMSwxOSBAQAorY2xhc3MgQSB7CisgICAgY2xhc3MgPGNhcmV0PklubmVyIHsKKyAgICAgICAgcHJpdmF0ZSBpbnQgbXlOb25TdGF0aWNGaWVsZCA9IDA7CisKKyAgICAgICAgY2xhc3MgSW5uZXJOb25TdGF0aWMgeworICAgICAgICAgICAgcHJpdmF0ZSBpbnQgbXlJbnNGaWVsZCA9IDA7CisKKyAgICAgICAgICAgIHB1YmxpYyB2b2lkIGluc01ldGhvZCgpIHsKKyAgICAgICAgICAgICAgICBteU5vblN0YXRpY0ZpZWxkICs9IG15SW5zRmllbGQ7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9CisKK2NsYXNzIEIgeworICAgIHB1YmxpYyB2b2lkIHRlc3QoKSB7CisgICAgICAgIEEuSW5uZXIgaW5uZXIgPSBuZXcgQS5Jbm5lcigpOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lVG9Bbm9ueW1vdXNDbGFzcy9Qcml2YXRlRmllbGRVc2VkRnJvbUlubmVyQ2xhc3MuamF2YS5hZnRlciBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVUb0Fub255bW91c0NsYXNzL1ByaXZhdGVGaWVsZFVzZWRGcm9tSW5uZXJDbGFzcy5qYXZhLmFmdGVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI4OTBhMTEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lVG9Bbm9ueW1vdXNDbGFzcy9Qcml2YXRlRmllbGRVc2VkRnJvbUlubmVyQ2xhc3MuamF2YS5hZnRlcgpAQCAtMCwwICsxLDE4IEBACitjbGFzcyBBIHsKK30KKworY2xhc3MgQiB7CisgICAgcHVibGljIHZvaWQgdGVzdCgpIHsKKyAgICAgICAgT2JqZWN0IGlubmVyID0gbmV3IE9iamVjdCgpIHsKKyAgICAgICAgICAgIHByaXZhdGUgaW50IG15Tm9uU3RhdGljRmllbGQgPSAwOworICAgICAgICAgICAgCisgICAgICAgICAgICBjbGFzcyBJbm5lck5vblN0YXRpYyB7CisgICAgICAgICAgICAgICAgcHJpdmF0ZSBpbnQgbXlJbnNGaWVsZCA9IDA7CisKKyAgICAgICAgICAgICAgICBwdWJsaWMgdm9pZCBpbnNNZXRob2QoKSB7CisgICAgICAgICAgICAgICAgICAgIG15Tm9uU3RhdGljRmllbGQgKz0gbXlJbnNGaWVsZDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH07CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVUb0Fub255bW91c0NsYXNzL1F1YWxpZmllZE5ldy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVRvQW5vbnltb3VzQ2xhc3MvUXVhbGlmaWVkTmV3LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODZkYzRjMAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVUb0Fub255bW91c0NsYXNzL1F1YWxpZmllZE5ldy5qYXZhCkBAIC0wLDAgKzEsMTggQEAKK3B1YmxpYyBjbGFzcyBRdWFsaWZpZWROZXdUZXN0IHsKKyAgICBwdWJsaWMgY2xhc3MgQzIgeworICAgICAgICBwcml2YXRlIGludCBhOworCisgICAgICAgIHB1YmxpYyBjbGFzcyA8Y2FyZXQ+QzJJbm5lciB7CisgICAgICAgICAgICBwdWJsaWMgdm9pZCBkb1N0dWZmKCkgeworICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihhKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIHB1YmxpYyBjbGFzcyBDMlVzZXIgeworICAgICAgICBwdWJsaWMgdm9pZCB0ZXN0KCkgeworICAgICAgICAgICAgQzIgYzIgPSBuZXcgQzIoKTsKKyAgICAgICAgICAgIEMyLkMySW5uZXIgaW5uZXIgPSBjMi5uZXcgQzJJbm5lcigpOworICAgICAgICB9CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVRvQW5vbnltb3VzQ2xhc3MvUXVhbGlmaWVkTmV3LmphdmEuYWZ0ZXIgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lVG9Bbm9ueW1vdXNDbGFzcy9RdWFsaWZpZWROZXcuamF2YS5hZnRlcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYjRmNTQ2Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVRvQW5vbnltb3VzQ2xhc3MvUXVhbGlmaWVkTmV3LmphdmEuYWZ0ZXIKQEAgLTAsMCArMSwxOCBAQAorcHVibGljIGNsYXNzIFF1YWxpZmllZE5ld1Rlc3QgeworICAgIHB1YmxpYyBjbGFzcyBDMiB7CisgICAgICAgIHByaXZhdGUgaW50IGE7CisKKyAgICB9CisKKyAgICBwdWJsaWMgY2xhc3MgQzJVc2VyIHsKKyAgICAgICAgcHVibGljIHZvaWQgdGVzdCgpIHsKKyAgICAgICAgICAgIEMyIGMyID0gbmV3IEMyKCk7CisgICAgICAgICAgICBmaW5hbCBDMiBjMjEgPSBjMjsKKyAgICAgICAgICAgIE9iamVjdCBpbm5lciA9IG5ldyBPYmplY3QoKSB7CisgICAgICAgICAgICAgICAgcHVibGljIHZvaWQgZG9TdHVmZigpIHsKKyAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKGMyMS5hKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9OworICAgICAgICB9CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVRvQW5vbnltb3VzQ2xhc3MvUXVhbGlmeUlubmVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lVG9Bbm9ueW1vdXNDbGFzcy9RdWFsaWZ5SW5uZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOGEyMDRmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVRvQW5vbnltb3VzQ2xhc3MvUXVhbGlmeUlubmVyLmphdmEKQEAgLTAsMCArMSwxNyBAQAorcHVibGljIGNsYXNzIFF1YWxpZnlJbm5lclRlc3QgeworICAgIHB1YmxpYyBjbGFzcyBDMlVzZXIgeworICAgICAgICBwdWJsaWMgdm9pZCB0ZXN0KCkgeworICAgICAgICAgICAgQzIuQzJJbm5lciBpbm5lciA9IG5ldyBDMi5DMklubmVyKCk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK2NsYXNzIEMyIHsKKyAgICBwdWJsaWMgc3RhdGljIGludCBhOworCisgICAgcHVibGljIHN0YXRpYyBjbGFzcyA8Y2FyZXQ+QzJJbm5lciB7CisgICAgICAgIHB1YmxpYyB2b2lkIGRvU3R1ZmYoKSB7CisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oYSk7CisgICAgICAgIH0KKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lVG9Bbm9ueW1vdXNDbGFzcy9RdWFsaWZ5SW5uZXIuamF2YS5hZnRlciBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVUb0Fub255bW91c0NsYXNzL1F1YWxpZnlJbm5lci5qYXZhLmFmdGVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYyMGIwMTcKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lVG9Bbm9ueW1vdXNDbGFzcy9RdWFsaWZ5SW5uZXIuamF2YS5hZnRlcgpAQCAtMCwwICsxLDE2IEBACitwdWJsaWMgY2xhc3MgUXVhbGlmeUlubmVyVGVzdCB7CisgICAgcHVibGljIGNsYXNzIEMyVXNlciB7CisgICAgICAgIHB1YmxpYyB2b2lkIHRlc3QoKSB7CisgICAgICAgICAgICBPYmplY3QgaW5uZXIgPSBuZXcgT2JqZWN0KCkgeworICAgICAgICAgICAgICAgIHB1YmxpYyB2b2lkIGRvU3R1ZmYoKSB7CisgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihDMi5hKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9OworICAgICAgICB9CisgICAgfQorfQorCitjbGFzcyBDMiB7CisgICAgcHVibGljIHN0YXRpYyBpbnQgYTsKKworfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVRvQW5vbnltb3VzQ2xhc3MvUXVhbGlmeVBhcmVudFN0YXRpY1JlZmVyZW5jZXMuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVUb0Fub255bW91c0NsYXNzL1F1YWxpZnlQYXJlbnRTdGF0aWNSZWZlcmVuY2VzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTE1MTM2MAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVUb0Fub255bW91c0NsYXNzL1F1YWxpZnlQYXJlbnRTdGF0aWNSZWZlcmVuY2VzLmphdmEKQEAgLTAsMCArMSwxOCBAQAorY2xhc3MgUGFyZW50Q3RvciB7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUEFSRU5UX0NPTlNUID0gIiI7CisKKyAgICBwdWJsaWMgUGFyZW50Q3RvcihTdHJpbmcgcykgeworICAgIH0KK30KKworY2xhc3MgQ2hpbGRDdG9yIGV4dGVuZHMgUGFyZW50Q3RvciB7CisgICAgcHVibGljIENoaWxkQ3Rvcihib29sZWFuIGIpIHsKKyAgICAgICAgc3VwZXIoUEFSRU5UX0NPTlNUKTsKKyAgICB9Cit9CisKK2NsYXNzIFVzYWdlIHsKKyAgICBwdWJsaWMgdm9pZCB0ZXN0KCkgeworICAgICAgICBuZXcgPGNhcmV0PkNoaWxkQ3Rvcih0cnVlKTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lVG9Bbm9ueW1vdXNDbGFzcy9RdWFsaWZ5UGFyZW50U3RhdGljUmVmZXJlbmNlcy5qYXZhLmFmdGVyIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVRvQW5vbnltb3VzQ2xhc3MvUXVhbGlmeVBhcmVudFN0YXRpY1JlZmVyZW5jZXMuamF2YS5hZnRlcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YTcwZmJhCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVRvQW5vbnltb3VzQ2xhc3MvUXVhbGlmeVBhcmVudFN0YXRpY1JlZmVyZW5jZXMuamF2YS5hZnRlcgpAQCAtMCwwICsxLDEyIEBACitjbGFzcyBQYXJlbnRDdG9yIHsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBQQVJFTlRfQ09OU1QgPSAiIjsKKworICAgIHB1YmxpYyBQYXJlbnRDdG9yKFN0cmluZyBzKSB7CisgICAgfQorfQorCitjbGFzcyBVc2FnZSB7CisgICAgcHVibGljIHZvaWQgdGVzdCgpIHsKKyAgICAgICAgbmV3IFBhcmVudEN0b3IoUGFyZW50Q3Rvci5QQVJFTlRfQ09OU1QpOworICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVUb0Fub255bW91c0NsYXNzL1JlZHVuZGFudEltcGxlbWVudHNJbnRlcmZhY2UuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVUb0Fub255bW91c0NsYXNzL1JlZHVuZGFudEltcGxlbWVudHNJbnRlcmZhY2UuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NTg0NTlhCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVRvQW5vbnltb3VzQ2xhc3MvUmVkdW5kYW50SW1wbGVtZW50c0ludGVyZmFjZS5qYXZhCkBAIC0wLDAgKzEsMTMgQEAKK2ltcG9ydCBqYXZhLmF3dC5ldmVudC4qOworCitjbGFzcyBBIHsKKyAgICBwcml2YXRlIEFjdGlvbkxpc3RlbmVyIGIgPSBuZXcgSW5uZXIoKTsKKworICAgIHByaXZhdGUgYWJzdHJhY3QgY2xhc3MgTXlBY3Rpb25MaXN0ZW5lciBpbXBsZW1lbnRzIEFjdGlvbkxpc3RlbmVyIHsKKyAgICB9CisKKyAgICBwcml2YXRlIGNsYXNzIDxjYXJldD5Jbm5lciBleHRlbmRzIE15QWN0aW9uTGlzdGVuZXIgaW1wbGVtZW50cyBBY3Rpb25MaXN0ZW5lciB7CisgICAgICAgIHB1YmxpYyB2b2lkIGFjdGlvblBlcmZvcm1lZChBY3Rpb25FdmVudCBlKSB7CisgICAgICAgIH0KKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVRvQW5vbnltb3VzQ2xhc3MvUmVkdW5kYW50SW1wbGVtZW50c0ludGVyZmFjZS5qYXZhLmFmdGVyIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVRvQW5vbnltb3VzQ2xhc3MvUmVkdW5kYW50SW1wbGVtZW50c0ludGVyZmFjZS5qYXZhLmFmdGVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc1MDVmNzgKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lVG9Bbm9ueW1vdXNDbGFzcy9SZWR1bmRhbnRJbXBsZW1lbnRzSW50ZXJmYWNlLmphdmEuYWZ0ZXIKQEAgLTAsMCArMSwxMiBAQAoraW1wb3J0IGphdmEuYXd0LmV2ZW50Lio7CisKK2NsYXNzIEEgeworICAgIHByaXZhdGUgQWN0aW9uTGlzdGVuZXIgYiA9IG5ldyBNeUFjdGlvbkxpc3RlbmVyKCkgeworICAgICAgICBwdWJsaWMgdm9pZCBhY3Rpb25QZXJmb3JtZWQoQWN0aW9uRXZlbnQgZSkgeworICAgICAgICB9CisgICAgfTsKKworICAgIHByaXZhdGUgYWJzdHJhY3QgY2xhc3MgTXlBY3Rpb25MaXN0ZW5lciBpbXBsZW1lbnRzIEFjdGlvbkxpc3RlbmVyIHsKKyAgICB9CisKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lVG9Bbm9ueW1vdXNDbGFzcy9TZWxmUmVmZXJlbmNlLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lVG9Bbm9ueW1vdXNDbGFzcy9TZWxmUmVmZXJlbmNlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWViOGY2YwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVUb0Fub255bW91c0NsYXNzL1NlbGZSZWZlcmVuY2UuamF2YQpAQCAtMCwwICsxLDExIEBACitjbGFzcyBBIHsKKyAgICBwdWJsaWMgY2xhc3MgPGNhcmV0PklubmVyIHsKKyAgICAgICAgcHJpdmF0ZSBJbm5lciBteUk7CisgICAgICAgIHByaXZhdGUgSW5uZXIgbXlJMjsKKyAgICB9Cit9CisKK2NsYXNzIEIgeworICAgIHByaXZhdGUgQS5Jbm5lciBiID0gbmV3IEEuSW5uZXIoKTsKKyAgICAKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lVG9Bbm9ueW1vdXNDbGFzcy9TZWxmUmVmZXJlbmNlLmphdmEuYWZ0ZXIgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lVG9Bbm9ueW1vdXNDbGFzcy9TZWxmUmVmZXJlbmNlLmphdmEuYWZ0ZXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWFkZjA0ZAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVUb0Fub255bW91c0NsYXNzL1NlbGZSZWZlcmVuY2UuamF2YS5hZnRlcgpAQCAtMCwwICsxLDEwIEBACitjbGFzcyBBIHsKK30KKworY2xhc3MgQiB7CisgICAgcHJpdmF0ZSBPYmplY3QgYiA9IG5ldyBPYmplY3QoKSB7CisgICAgICAgIHByaXZhdGUgT2JqZWN0IG15STsKKyAgICAgICAgcHJpdmF0ZSBPYmplY3QgbXlJMjsKKyAgICB9OworCit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVRvQW5vbnltb3VzQ2xhc3MvU2ltcGxlLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lVG9Bbm9ueW1vdXNDbGFzcy9TaW1wbGUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZWIzYTJiCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVRvQW5vbnltb3VzQ2xhc3MvU2ltcGxlLmphdmEKQEAgLTAsMCArMSw5IEBACitjbGFzcyBBIHsKKyAgICBwcml2YXRlIE9iamVjdCBiID0gbmV3IElubmVyKCk7CisKKyAgICBwcml2YXRlIGNsYXNzIDxjYXJldD5Jbm5lciB7CisgICAgICAgIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7CisgICAgICAgICAgICByZXR1cm4gIkEiOworICAgICAgICB9CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVUb0Fub255bW91c0NsYXNzL1NpbXBsZS5qYXZhLmFmdGVyIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVRvQW5vbnltb3VzQ2xhc3MvU2ltcGxlLmphdmEuYWZ0ZXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2Y1ZWI2ZgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVUb0Fub255bW91c0NsYXNzL1NpbXBsZS5qYXZhLmFmdGVyCkBAIC0wLDAgKzEsOCBAQAorY2xhc3MgQSB7CisgICAgcHJpdmF0ZSBPYmplY3QgYiA9IG5ldyBPYmplY3QoKSB7CisgICAgICAgIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7CisgICAgICAgICAgICByZXR1cm4gIkEiOworICAgICAgICB9CisgICAgfTsKKworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVUb0Fub255bW91c0NsYXNzL1N0YXRpY0NvbnN0YW50RmllbGQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVUb0Fub255bW91c0NsYXNzL1N0YXRpY0NvbnN0YW50RmllbGQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZWEyMjEzCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVRvQW5vbnltb3VzQ2xhc3MvU3RhdGljQ29uc3RhbnRGaWVsZC5qYXZhCkBAIC0wLDAgKzEsMTEgQEAKK2ltcG9ydCBqYXZhLmlvOworCitjbGFzcyBBIHsKKyAgICBwdWJsaWMgdm9pZCB0ZXN0KCkgeworICAgICAgICBJbmxpbmVkIGkgPSBuZXcgSW5saW5lZCgpOworICAgIH0KK30KKworY2xhc3MgPGNhcmV0PklubGluZWQgeworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIHMgPSAicyI7Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lVG9Bbm9ueW1vdXNDbGFzcy9TdGF0aWNDb25zdGFudEZpZWxkLmphdmEuYWZ0ZXIgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lVG9Bbm9ueW1vdXNDbGFzcy9TdGF0aWNDb25zdGFudEZpZWxkLmphdmEuYWZ0ZXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTJmM2Y4NQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVUb0Fub255bW91c0NsYXNzL1N0YXRpY0NvbnN0YW50RmllbGQuamF2YS5hZnRlcgpAQCAtMCwwICsxLDEwIEBACitpbXBvcnQgamF2YS5pbzsKKworY2xhc3MgQSB7CisgICAgcHVibGljIHZvaWQgdGVzdCgpIHsKKyAgICAgICAgT2JqZWN0IGkgPSBuZXcgT2JqZWN0KCkgeworICAgICAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgcyA9ICJzIjsKKyAgICAgICAgfTsKKyAgICB9Cit9CisKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVUb0Fub255bW91c0NsYXNzL1N0cmluZ0luTWV0aG9kQ2FsbEZyb21Db25zdHJ1Y3Rvci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVRvQW5vbnltb3VzQ2xhc3MvU3RyaW5nSW5NZXRob2RDYWxsRnJvbUNvbnN0cnVjdG9yLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjAwZDVjNgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVUb0Fub255bW91c0NsYXNzL1N0cmluZ0luTWV0aG9kQ2FsbEZyb21Db25zdHJ1Y3Rvci5qYXZhCkBAIC0wLDAgKzEsMTcgQEAKK2NsYXNzIDxjYXJldD5JbmxpbmVkIHsKKyAgICBwcml2YXRlIGludCBteUE7CisKKyAgICBwdWJsaWMgSW5saW5lZChTdHJpbmcgcykgeworICAgICAgICBwcm9jZXNzKHMpOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIHByb2Nlc3MoU3RyaW5nIHMpIHsKKyAgICAgICAgbXlBID0gcy5sZW5ndGgoKTsKKyAgICB9Cit9CisKK2NsYXNzIEMgeworICAgIHB1YmxpYyB2b2lkIHRlc3QoKSB7CisgICAgICAgIElubGluZWQgaSA9IG5ldyBJbmxpbmVkKCJhIik7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVUb0Fub255bW91c0NsYXNzL1N0cmluZ0luTWV0aG9kQ2FsbEZyb21Db25zdHJ1Y3Rvci5qYXZhLmFmdGVyIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVRvQW5vbnltb3VzQ2xhc3MvU3RyaW5nSW5NZXRob2RDYWxsRnJvbUNvbnN0cnVjdG9yLmphdmEuYWZ0ZXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGMyY2E3NzAKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lVG9Bbm9ueW1vdXNDbGFzcy9TdHJpbmdJbk1ldGhvZENhbGxGcm9tQ29uc3RydWN0b3IuamF2YS5hZnRlcgpAQCAtMCwwICsxLDE1IEBACitjbGFzcyBDIHsKKyAgICBwdWJsaWMgdm9pZCB0ZXN0KCkgeworICAgICAgICBPYmplY3QgaSA9IG5ldyBPYmplY3QoKSB7CisgICAgICAgICAgICBwcml2YXRlIGludCBteUE7CisKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBwcm9jZXNzKCJhIik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHB1YmxpYyB2b2lkIHByb2Nlc3MoU3RyaW5nIHMpIHsKKyAgICAgICAgICAgICAgICBteUEgPSBzLmxlbmd0aCgpOworICAgICAgICAgICAgfQorICAgICAgICB9OworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lVG9Bbm9ueW1vdXNDbGFzcy9WYXJhcmdzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lVG9Bbm9ueW1vdXNDbGFzcy9WYXJhcmdzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWViOTBhZQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVUb0Fub255bW91c0NsYXNzL1ZhcmFyZ3MuamF2YQpAQCAtMCwwICsxLDE3IEBACitjbGFzcyBBIHsKKyAgICBwdWJsaWMgdm9pZCB0ZXN0KCkgeworICAgICAgICBPYmplY3QgbyA9IG5ldyBJbm5lcigxLCAyLCAzKTsKKyAgICB9CisKKyAgICBwcml2YXRlIGNsYXNzIDxjYXJldD5Jbm5lciB7CisgICAgICAgIHByaXZhdGUgaW50IGxlbmd0aDsKKworICAgICAgICBwdWJsaWMgSW5uZXIoaW50Li4uIHZhbHVlcykgeworICAgICAgICAgICAgbGVuZ3RoID0gdmFsdWVzLmxlbmd0aDsKKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7CisgICAgICAgICAgICByZXR1cm4gSW50ZWdlci50b1N0cmluZyhsZW5ndGgpOworICAgICAgICB9CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVUb0Fub255bW91c0NsYXNzL1ZhcmFyZ3MuamF2YS5hZnRlciBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVUb0Fub255bW91c0NsYXNzL1ZhcmFyZ3MuamF2YS5hZnRlcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNDA0ZmUxCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVRvQW5vbnltb3VzQ2xhc3MvVmFyYXJncy5qYXZhLmFmdGVyCkBAIC0wLDAgKzEsMTcgQEAKK2NsYXNzIEEgeworICAgIHB1YmxpYyB2b2lkIHRlc3QoKSB7CisgICAgICAgIGZpbmFsIGludFtdIHZhbHVlcyA9IG5ldyBpbnRbXXsxLCAyLCAzfTsKKyAgICAgICAgT2JqZWN0IG8gPSBuZXcgT2JqZWN0KCkgeworICAgICAgICAgICAgcHJpdmF0ZSBpbnQgbGVuZ3RoOworCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbGVuZ3RoID0gdmFsdWVzLmxlbmd0aDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gSW50ZWdlci50b1N0cmluZyhsZW5ndGgpOworICAgICAgICAgICAgfQorICAgICAgICB9OworICAgIH0KKyAgICAKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lVG9Bbm9ueW1vdXNDbGFzcy9Xcml0YWJsZUZpZWxkSW5pdGlhbGl6ZWRXaXRoUGFyYW1ldGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lVG9Bbm9ueW1vdXNDbGFzcy9Xcml0YWJsZUZpZWxkSW5pdGlhbGl6ZWRXaXRoUGFyYW1ldGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWQwNmY5MQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVUb0Fub255bW91c0NsYXNzL1dyaXRhYmxlRmllbGRJbml0aWFsaXplZFdpdGhQYXJhbWV0ZXIuamF2YQpAQCAtMCwwICsxLDE5IEBACitjbGFzcyBBIHsKKyAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7CisgICAgICAgIGludCBpID0gMjsKKyAgICAgICAgT2JqZWN0IGIgPSBuZXcgSW5uZXIoaSoyKTsKKyAgICB9CisKKyAgICBwcml2YXRlIGNsYXNzIDxjYXJldD5Jbm5lciB7CisgICAgICAgIHByaXZhdGUgaW50IGk7CisKKyAgICAgICAgcHVibGljIElubmVyKGludCBhcmcpIHsKKyAgICAgICAgICAgIGk9YXJnOworICAgICAgICB9CisKKyAgICAgICAgcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKKyAgICAgICAgICAgIGkrKzsKKyAgICAgICAgICAgIHJldHVybiAiQSI7CisgICAgICAgIH0KKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVRvQW5vbnltb3VzQ2xhc3MvV3JpdGFibGVGaWVsZEluaXRpYWxpemVkV2l0aFBhcmFtZXRlci5qYXZhLmFmdGVyIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVRvQW5vbnltb3VzQ2xhc3MvV3JpdGFibGVGaWVsZEluaXRpYWxpemVkV2l0aFBhcmFtZXRlci5qYXZhLmFmdGVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNkNGRhZWUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lVG9Bbm9ueW1vdXNDbGFzcy9Xcml0YWJsZUZpZWxkSW5pdGlhbGl6ZWRXaXRoUGFyYW1ldGVyLmphdmEuYWZ0ZXIKQEAgLTAsMCArMSwxNSBAQAorY2xhc3MgQSB7CisgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgeworICAgICAgICBpbnQgaSA9IDI7CisgICAgICAgIGZpbmFsIGludCBhcmcgPSBpICogMjsKKyAgICAgICAgT2JqZWN0IGIgPSBuZXcgT2JqZWN0KCkgeworICAgICAgICAgICAgcHJpdmF0ZSBpbnQgaSA9IGFyZzsKKworICAgICAgICAgICAgcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKKyAgICAgICAgICAgICAgICBpKys7CisgICAgICAgICAgICAgICAgcmV0dXJuICJBIjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfTsKKyAgICB9CisKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lVG9Bbm9ueW1vdXNDbGFzcy9Xcml0YWJsZUluaXRpYWxpemVkRmllbGQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVUb0Fub255bW91c0NsYXNzL1dyaXRhYmxlSW5pdGlhbGl6ZWRGaWVsZC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA2NjdlNmUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lVG9Bbm9ueW1vdXNDbGFzcy9Xcml0YWJsZUluaXRpYWxpemVkRmllbGQuamF2YQpAQCAtMCwwICsxLDE2IEBACitjbGFzcyBBIHsKKyAgICBwcml2YXRlIE9iamVjdCBiID0gbmV3IElubmVyKCk7CisKKyAgICBwcml2YXRlIGNsYXNzIDxjYXJldD5Jbm5lciB7CisgICAgICAgIHByaXZhdGUgaW50IGk7CisKKyAgICAgICAgcHVibGljIElubmVyKCkgeworICAgICAgICAgICAgaT0wOworICAgICAgICB9CisKKyAgICAgICAgcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKKyAgICAgICAgICAgIGkrKzsKKyAgICAgICAgICAgIHJldHVybiAiQSI7CisgICAgICAgIH0KKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVRvQW5vbnltb3VzQ2xhc3MvV3JpdGFibGVJbml0aWFsaXplZEZpZWxkLmphdmEuYWZ0ZXIgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lVG9Bbm9ueW1vdXNDbGFzcy9Xcml0YWJsZUluaXRpYWxpemVkRmllbGQuamF2YS5hZnRlcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NmEzNTVjCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVRvQW5vbnltb3VzQ2xhc3MvV3JpdGFibGVJbml0aWFsaXplZEZpZWxkLmphdmEuYWZ0ZXIKQEAgLTAsMCArMSwxMSBAQAorY2xhc3MgQSB7CisgICAgcHJpdmF0ZSBPYmplY3QgYiA9IG5ldyBPYmplY3QoKSB7CisgICAgICAgIHByaXZhdGUgaW50IGkgPSAwOworCisgICAgICAgIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7CisgICAgICAgICAgICBpKys7CisgICAgICAgICAgICByZXR1cm4gIkEiOworICAgICAgICB9CisgICAgfTsKKworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVUb0Fub255bW91c0NsYXNzL211bHRpZmlsZS9pbXBvcnRGb3JDb25zdHJ1Y3Rvci9hZnRlci9wMS9QYXJlbnRVbmlxdWVOYW1lLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lVG9Bbm9ueW1vdXNDbGFzcy9tdWx0aWZpbGUvaW1wb3J0Rm9yQ29uc3RydWN0b3IvYWZ0ZXIvcDEvUGFyZW50VW5pcXVlTmFtZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM2MGIxZTYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lVG9Bbm9ueW1vdXNDbGFzcy9tdWx0aWZpbGUvaW1wb3J0Rm9yQ29uc3RydWN0b3IvYWZ0ZXIvcDEvUGFyZW50VW5pcXVlTmFtZS5qYXZhCkBAIC0wLDAgKzEsNCBAQAorcGFja2FnZSBwMTsKKworcHVibGljIGNsYXNzIFBhcmVudFVuaXF1ZU5hbWUgeworfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVRvQW5vbnltb3VzQ2xhc3MvbXVsdGlmaWxlL2ltcG9ydEZvckNvbnN0cnVjdG9yL2FmdGVyL3AyL1VzYWdlLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lVG9Bbm9ueW1vdXNDbGFzcy9tdWx0aWZpbGUvaW1wb3J0Rm9yQ29uc3RydWN0b3IvYWZ0ZXIvcDIvVXNhZ2UuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYTk3Y2RjMQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVUb0Fub255bW91c0NsYXNzL211bHRpZmlsZS9pbXBvcnRGb3JDb25zdHJ1Y3Rvci9hZnRlci9wMi9Vc2FnZS5qYXZhCkBAIC0wLDAgKzEsMTIgQEAKK3BhY2thZ2UgcDI7CisKK2ltcG9ydCBwMS5QYXJlbnRVbmlxdWVOYW1lOworCitwdWJsaWMgY2xhc3MgVXNhZ2UgeworICAgIHB1YmxpYyB2b2lkIHRlc3QoKSB7CisgICAgICAgIGVxdWFscyhuZXcgUGFyZW50VW5pcXVlTmFtZSgpIHsKKyAgICAgICAgICAgIHB1YmxpYyB2b2lkIHRlc3QoKSB7CisgICAgICAgICAgICB9CisgICAgICAgIH0pOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lVG9Bbm9ueW1vdXNDbGFzcy9tdWx0aWZpbGUvaW1wb3J0Rm9yQ29uc3RydWN0b3IvYmVmb3JlL3AxL0NoaWxkQ3Rvci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVRvQW5vbnltb3VzQ2xhc3MvbXVsdGlmaWxlL2ltcG9ydEZvckNvbnN0cnVjdG9yL2JlZm9yZS9wMS9DaGlsZEN0b3IuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZjkwZDk2Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVRvQW5vbnltb3VzQ2xhc3MvbXVsdGlmaWxlL2ltcG9ydEZvckNvbnN0cnVjdG9yL2JlZm9yZS9wMS9DaGlsZEN0b3IuamF2YQpAQCAtMCwwICsxLDYgQEAKK3BhY2thZ2UgcDE7CisKK3B1YmxpYyBjbGFzcyBDaGlsZEN0b3IgZXh0ZW5kcyBQYXJlbnRVbmlxdWVOYW1lIHsKKyAgICBwdWJsaWMgdm9pZCB0ZXN0KCkgeworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lVG9Bbm9ueW1vdXNDbGFzcy9tdWx0aWZpbGUvaW1wb3J0Rm9yQ29uc3RydWN0b3IvYmVmb3JlL3AxL1BhcmVudFVuaXF1ZU5hbWUuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVUb0Fub255bW91c0NsYXNzL211bHRpZmlsZS9pbXBvcnRGb3JDb25zdHJ1Y3Rvci9iZWZvcmUvcDEvUGFyZW50VW5pcXVlTmFtZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM2MGIxZTYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lVG9Bbm9ueW1vdXNDbGFzcy9tdWx0aWZpbGUvaW1wb3J0Rm9yQ29uc3RydWN0b3IvYmVmb3JlL3AxL1BhcmVudFVuaXF1ZU5hbWUuamF2YQpAQCAtMCwwICsxLDQgQEAKK3BhY2thZ2UgcDE7CisKK3B1YmxpYyBjbGFzcyBQYXJlbnRVbmlxdWVOYW1lIHsKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVUb0Fub255bW91c0NsYXNzL211bHRpZmlsZS9pbXBvcnRGb3JDb25zdHJ1Y3Rvci9iZWZvcmUvcDIvVXNhZ2UuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVUb0Fub255bW91c0NsYXNzL211bHRpZmlsZS9pbXBvcnRGb3JDb25zdHJ1Y3Rvci9iZWZvcmUvcDIvVXNhZ2UuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZWFmZTU0Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVRvQW5vbnltb3VzQ2xhc3MvbXVsdGlmaWxlL2ltcG9ydEZvckNvbnN0cnVjdG9yL2JlZm9yZS9wMi9Vc2FnZS5qYXZhCkBAIC0wLDAgKzEsOSBAQAorcGFja2FnZSBwMjsKKworaW1wb3J0IHAxLkNoaWxkQ3RvcjsKKworcHVibGljIGNsYXNzIFVzYWdlIHsKKyAgICBwdWJsaWMgdm9pZCB0ZXN0KCkgeworICAgICAgICBlcXVhbHMobmV3IENoaWxkQ3RvcigpKTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVRvQW5vbnltb3VzQ2xhc3MvbXVsdGlmaWxlL3Byb3RlY3RlZE1lbWJlci9hZnRlci9wMS9QYXJlbnRXaXRoUHJvdGVjdGVkLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lVG9Bbm9ueW1vdXNDbGFzcy9tdWx0aWZpbGUvcHJvdGVjdGVkTWVtYmVyL2FmdGVyL3AxL1BhcmVudFdpdGhQcm90ZWN0ZWQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOTc1N2RkCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVRvQW5vbnltb3VzQ2xhc3MvbXVsdGlmaWxlL3Byb3RlY3RlZE1lbWJlci9hZnRlci9wMS9QYXJlbnRXaXRoUHJvdGVjdGVkLmphdmEKQEAgLTAsMCArMSw5IEBACitwYWNrYWdlIHAxOworCitwdWJsaWMgY2xhc3MgUGFyZW50V2l0aFByb3RlY3RlZCB7CisgIHByb3RlY3RlZCBpbnQgbXlPd24gPSAwOworCisgIHByb3RlY3RlZCB2b2lkIGluY3JlYXNlTWUoaW50IGkpIHsKKwlteU93biArPSBpOworICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lVG9Bbm9ueW1vdXNDbGFzcy9tdWx0aWZpbGUvcHJvdGVjdGVkTWVtYmVyL2FmdGVyL3AyL1VzYWdlLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lVG9Bbm9ueW1vdXNDbGFzcy9tdWx0aWZpbGUvcHJvdGVjdGVkTWVtYmVyL2FmdGVyL3AyL1VzYWdlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmM0MDMxOQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVUb0Fub255bW91c0NsYXNzL211bHRpZmlsZS9wcm90ZWN0ZWRNZW1iZXIvYWZ0ZXIvcDIvVXNhZ2UuamF2YQpAQCAtMCwwICsxLDEzIEBACitwYWNrYWdlIHAyOworCitpbXBvcnQgcDEuUGFyZW50V2l0aFByb3RlY3RlZDsKKworcHVibGljIGNsYXNzIFVzYWdlIHsKKyAgICBwdWJsaWMgdm9pZCB0ZXN0KCkgeworICAgICAgICBQYXJlbnRXaXRoUHJvdGVjdGVkIHN3cyA9IG5ldyBQYXJlbnRXaXRoUHJvdGVjdGVkKCkgeworICAgICAgICAgICAgcHVibGljIHZvaWQgY3JlYXNlTWUoaW50IGkpIHsKKyAgICAgICAgICAgICAgaW5jcmVhc2VNZShpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVRvQW5vbnltb3VzQ2xhc3MvbXVsdGlmaWxlL3Byb3RlY3RlZE1lbWJlci9iZWZvcmUvcDEvUGFyZW50V2l0aFByb3RlY3RlZC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVRvQW5vbnltb3VzQ2xhc3MvbXVsdGlmaWxlL3Byb3RlY3RlZE1lbWJlci9iZWZvcmUvcDEvUGFyZW50V2l0aFByb3RlY3RlZC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM5NzU3ZGQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lVG9Bbm9ueW1vdXNDbGFzcy9tdWx0aWZpbGUvcHJvdGVjdGVkTWVtYmVyL2JlZm9yZS9wMS9QYXJlbnRXaXRoUHJvdGVjdGVkLmphdmEKQEAgLTAsMCArMSw5IEBACitwYWNrYWdlIHAxOworCitwdWJsaWMgY2xhc3MgUGFyZW50V2l0aFByb3RlY3RlZCB7CisgIHByb3RlY3RlZCBpbnQgbXlPd24gPSAwOworCisgIHByb3RlY3RlZCB2b2lkIGluY3JlYXNlTWUoaW50IGkpIHsKKwlteU93biArPSBpOworICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lVG9Bbm9ueW1vdXNDbGFzcy9tdWx0aWZpbGUvcHJvdGVjdGVkTWVtYmVyL2JlZm9yZS9wMS9TdWJqZWN0V2l0aFN1cGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lVG9Bbm9ueW1vdXNDbGFzcy9tdWx0aWZpbGUvcHJvdGVjdGVkTWVtYmVyL2JlZm9yZS9wMS9TdWJqZWN0V2l0aFN1cGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTVmYThhOAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVUb0Fub255bW91c0NsYXNzL211bHRpZmlsZS9wcm90ZWN0ZWRNZW1iZXIvYmVmb3JlL3AxL1N1YmplY3RXaXRoU3VwZXIuamF2YQpAQCAtMCwwICsxLDcgQEAKK3BhY2thZ2UgcDE7CisKK3B1YmxpYyBjbGFzcyBTdWJqZWN0V2l0aFN1cGVyIGV4dGVuZHMgUGFyZW50V2l0aFByb3RlY3RlZCB7CisgICAgcHVibGljIHZvaWQgY3JlYXNlTWUoaW50IGkpIHsKKyAgCWluY3JlYXNlTWUoaSk7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVRvQW5vbnltb3VzQ2xhc3MvbXVsdGlmaWxlL3Byb3RlY3RlZE1lbWJlci9iZWZvcmUvcDIvVXNhZ2UuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVUb0Fub255bW91c0NsYXNzL211bHRpZmlsZS9wcm90ZWN0ZWRNZW1iZXIvYmVmb3JlL3AyL1VzYWdlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzI5YjZkOQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVUb0Fub255bW91c0NsYXNzL211bHRpZmlsZS9wcm90ZWN0ZWRNZW1iZXIvYmVmb3JlL3AyL1VzYWdlLmphdmEKQEAgLTAsMCArMSw5IEBACitwYWNrYWdlIHAyOworCitpbXBvcnQgcDEuU3ViamVjdFdpdGhTdXBlcjsKKworcHVibGljIGNsYXNzIFVzYWdlIHsKKyAgICBwdWJsaWMgdm9pZCB0ZXN0KCkgeworICAgICAgICBTdWJqZWN0V2l0aFN1cGVyIHN3cyA9IG5ldyBTdWJqZWN0V2l0aFN1cGVyKCk7ICAgIAorICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lVG9Bbm9ueW1vdXNDbGFzcy9tdWx0aWZpbGUvc3RhdGljSW1wb3J0cy9hZnRlci9wMS9Vc2FnZS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVRvQW5vbnltb3VzQ2xhc3MvbXVsdGlmaWxlL3N0YXRpY0ltcG9ydHMvYWZ0ZXIvcDEvVXNhZ2UuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMDVlM2YxCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVRvQW5vbnltb3VzQ2xhc3MvbXVsdGlmaWxlL3N0YXRpY0ltcG9ydHMvYWZ0ZXIvcDEvVXNhZ2UuamF2YQpAQCAtMCwwICsxLDExIEBACitwYWNrYWdlIHAxOworCitpbXBvcnQgc3RhdGljIHAyLlN0YXRpY3MuUFVCX0NPTlNUOworCitwdWJsaWMgY2xhc3MgVXNhZ2UgeworICAgIHB1YmxpYyB2b2lkIHRlc3QoKSB7CisgICAgICAgIE9iamVjdCBpID0gbmV3IE9iamVjdCgpIHsKKyAgICAgICAgICAgIHB1YmxpYyBpbnQgbXlJbnQgPSBQVUJfQ09OU1Q7CisgICAgICAgIH07CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVUb0Fub255bW91c0NsYXNzL211bHRpZmlsZS9zdGF0aWNJbXBvcnRzL2FmdGVyL3AyL1N0YXRpY3MuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVUb0Fub255bW91c0NsYXNzL211bHRpZmlsZS9zdGF0aWNJbXBvcnRzL2FmdGVyL3AyL1N0YXRpY3MuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMzc5YWQ2Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVRvQW5vbnltb3VzQ2xhc3MvbXVsdGlmaWxlL3N0YXRpY0ltcG9ydHMvYWZ0ZXIvcDIvU3RhdGljcy5qYXZhCkBAIC0wLDAgKzEsNSBAQAorcGFja2FnZSBwMjsKKworcHVibGljIGNsYXNzIFN0YXRpY3MgeworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFBVQl9DT05TVCA9IDA7Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lVG9Bbm9ueW1vdXNDbGFzcy9tdWx0aWZpbGUvc3RhdGljSW1wb3J0cy9iZWZvcmUvcDEvSW5saW5lZC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVRvQW5vbnltb3VzQ2xhc3MvbXVsdGlmaWxlL3N0YXRpY0ltcG9ydHMvYmVmb3JlL3AxL0lubGluZWQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZjczZjJkCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVRvQW5vbnltb3VzQ2xhc3MvbXVsdGlmaWxlL3N0YXRpY0ltcG9ydHMvYmVmb3JlL3AxL0lubGluZWQuamF2YQpAQCAtMCwwICsxLDE1IEBACitwYWNrYWdlIHAxOworCitpbXBvcnQgc3RhdGljIHAyLlN0YXRpY3MuUFVCX0NPTlNUOworCitwdWJsaWMgY2xhc3MgSW5saW5lZCB7CisgICAgcHVibGljIGludCBteUludCA9IFBVQl9DT05TVDsKKworICAgIHB1YmxpYyBJbmxpbmVkKCkgeworICAgICAgIHRoaXMoUFVCX0NPTlNUKTsKKyAgICB9CisKKyAgICBwdWJsaWMgSW5saW5lZChpbnQgaSkgeworICAgICAgICBteUludCA9IGk7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVRvQW5vbnltb3VzQ2xhc3MvbXVsdGlmaWxlL3N0YXRpY0ltcG9ydHMvYmVmb3JlL3AxL1VzYWdlLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lVG9Bbm9ueW1vdXNDbGFzcy9tdWx0aWZpbGUvc3RhdGljSW1wb3J0cy9iZWZvcmUvcDEvVXNhZ2UuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNzExZWJiCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lubGluZVRvQW5vbnltb3VzQ2xhc3MvbXVsdGlmaWxlL3N0YXRpY0ltcG9ydHMvYmVmb3JlL3AxL1VzYWdlLmphdmEKQEAgLTAsMCArMSw3IEBACitwYWNrYWdlIHAxOworCitwdWJsaWMgY2xhc3MgVXNhZ2UgeworICAgIHB1YmxpYyB2b2lkIHRlc3QoKSB7CisgICAgICAgIElubGluZWQgaSA9IG5ldyBJbmxpbmVkKCk7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbmxpbmVUb0Fub255bW91c0NsYXNzL211bHRpZmlsZS9zdGF0aWNJbXBvcnRzL2JlZm9yZS9wMi9TdGF0aWNzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lVG9Bbm9ueW1vdXNDbGFzcy9tdWx0aWZpbGUvc3RhdGljSW1wb3J0cy9iZWZvcmUvcDIvU3RhdGljcy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMzNzlhZDYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5saW5lVG9Bbm9ueW1vdXNDbGFzcy9tdWx0aWZpbGUvc3RhdGljSW1wb3J0cy9iZWZvcmUvcDIvU3RhdGljcy5qYXZhCkBAIC0wLDAgKzEsNSBAQAorcGFja2FnZSBwMjsKKworcHVibGljIGNsYXNzIFN0YXRpY3MgeworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFBVQl9DT05TVCA9IDA7Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5wbGFjZUludHJvZHVjZUNvbnN0YW50L2NvbmZsaWN0aW5nQ29uc3RhbnROYW1lLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5wbGFjZUludHJvZHVjZUNvbnN0YW50L2NvbmZsaWN0aW5nQ29uc3RhbnROYW1lLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWUwYjM3YQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnBsYWNlSW50cm9kdWNlQ29uc3RhbnQvY29uZmxpY3RpbmdDb25zdGFudE5hbWUuamF2YQpAQCAtMCwwICsxLDIyIEBACisvKgorICogQ29weXJpZ2h0IDIwMDAtMjAxMSBKZXRCcmFpbnMgcy5yLm8uCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworY2xhc3MgVGVzdCB7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEZPTyA9ICJmb28iOworICAgIHB1YmxpYyB2b2lkIG1ldGhvZChNYXA8T2JqZWN0LCBPYmplY3Q+IGFyZ3MpIHsKKyAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihGT08pOworICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJmbzxjYXJldD5vIik7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lucGxhY2VJbnRyb2R1Y2VDb25zdGFudC9jb25mbGljdGluZ0NvbnN0YW50TmFtZV9hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lucGxhY2VJbnRyb2R1Y2VDb25zdGFudC9jb25mbGljdGluZ0NvbnN0YW50TmFtZV9hZnRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIwODQ2MWIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5wbGFjZUludHJvZHVjZUNvbnN0YW50L2NvbmZsaWN0aW5nQ29uc3RhbnROYW1lX2FmdGVyLmphdmEKQEAgLTAsMCArMSwyNCBAQAorLyoKKyAqIENvcHlyaWdodCAyMDAwLTIwMTEgSmV0QnJhaW5zIHMuci5vLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KK2NsYXNzIFRlc3QgeworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBGT08gPSAiZm9vIjsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBGT08xID0gImZvbyI7CisKKyAgICBwdWJsaWMgdm9pZCBtZXRob2QoTWFwPE9iamVjdCwgT2JqZWN0PiBhcmdzKSB7CisgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oRk9PKTsKKyAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihGT08xKTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5wbGFjZUludHJvZHVjZUNvbnN0YW50L2NvcnJlY3RDb25zdGFudFBvc2l0aW9uLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5wbGFjZUludHJvZHVjZUNvbnN0YW50L2NvcnJlY3RDb25zdGFudFBvc2l0aW9uLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmI3M2I4NwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnBsYWNlSW50cm9kdWNlQ29uc3RhbnQvY29ycmVjdENvbnN0YW50UG9zaXRpb24uamF2YQpAQCAtMCwwICsxLDE4IEBACitwdWJsaWMgY2xhc3MgUmVzIHsKKworICAgIHZvaWQgYmFyKFIgcil7fQorCisgICAgaW50ZXJmYWNlIFI8UywgVD4geworICAgICAgICB2b2lkIGxhKFMgcywgVCB0KTsKKyAgICB9CisKKyAgICBwcml2YXRlIHZvaWQgdmFsaWRhdGVTdHJ1Y3R1cmVzQ29va2llKFJlcyBjb29raWUpIHsKKyAgICAgICAgY29va2llLmJhcihuZXcgPGNhcmV0PlI8U3RyaW5nLCBPYmplY3Q+KCl7CisgICAgICAgICAgICBmaW5hbCBTdHJpbmcgcGFyYW0gPSAiIjsKKyAgICAgICAgICAgIEBPdmVycmlkZQorICAgICAgICAgICAgcHVibGljIHZvaWQgbGEoU3RyaW5nIHMsIE9iamVjdCBvKSB7CisgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKHBhcmFtKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSk7CisgICAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lucGxhY2VJbnRyb2R1Y2VDb25zdGFudC9jb3JyZWN0Q29uc3RhbnRQb3NpdGlvbl9hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lucGxhY2VJbnRyb2R1Y2VDb25zdGFudC9jb3JyZWN0Q29uc3RhbnRQb3NpdGlvbl9hZnRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFlOTk0YjgKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5wbGFjZUludHJvZHVjZUNvbnN0YW50L2NvcnJlY3RDb25zdGFudFBvc2l0aW9uX2FmdGVyLmphdmEKQEAgLTAsMCArMSwyMSBAQAorcHVibGljIGNsYXNzIFJlcyB7CisKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFJlcy5SPFN0cmluZyxPYmplY3Q+IFIgPSBuZXcgUmVzLlI8U3RyaW5nLCBPYmplY3Q+KCkgeworICAgICAgICBmaW5hbCBTdHJpbmcgcGFyYW0gPSAiIjsKKworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIHZvaWQgbGEoU3RyaW5nIHMsIE9iamVjdCBvKSB7CisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4ocGFyYW0pOworICAgICAgICB9CisgICAgfTsKKworICAgIHZvaWQgYmFyKFIgcil7fQorCisgICAgaW50ZXJmYWNlIFI8UywgVD4geworICAgICAgICB2b2lkIGxhKFMgcywgVCB0KTsKKyAgICB9CisKKyAgICBwcml2YXRlIHZvaWQgdmFsaWRhdGVTdHJ1Y3R1cmVzQ29va2llKFJlcyBjb29raWUpIHsKKyAgICAgICAgY29va2llLmJhcig8Y2FyZXQ+Uik7CisgICAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lucGxhY2VJbnRyb2R1Y2VDb25zdGFudC9jb3JyZWN0RmluYWxQb3NpdGlvbi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lucGxhY2VJbnRyb2R1Y2VDb25zdGFudC9jb3JyZWN0RmluYWxQb3NpdGlvbi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM3NDI3ZDkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5wbGFjZUludHJvZHVjZUNvbnN0YW50L2NvcnJlY3RGaW5hbFBvc2l0aW9uLmphdmEKQEAgLTAsMCArMSwzIEBACitjbGFzcyBUZXN0IHsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgRk9PID0gNjAgKiA2PGNhcmV0PjA7Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5wbGFjZUludHJvZHVjZUNvbnN0YW50L2NvcnJlY3RGaW5hbFBvc2l0aW9uX2FmdGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5wbGFjZUludHJvZHVjZUNvbnN0YW50L2NvcnJlY3RGaW5hbFBvc2l0aW9uX2FmdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjMwYWMzOQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnBsYWNlSW50cm9kdWNlQ29uc3RhbnQvY29ycmVjdEZpbmFsUG9zaXRpb25fYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDQgQEAKK2NsYXNzIFRlc3QgeworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFNFQyA9IDYwOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBGT08gPSA2MCAqIDxjYXJldD5TRUM7Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5wbGFjZUludHJvZHVjZUNvbnN0YW50L2VzY2FwZVBvc2l0aW9uLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5wbGFjZUludHJvZHVjZUNvbnN0YW50L2VzY2FwZVBvc2l0aW9uLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWE0NGUzYgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnBsYWNlSW50cm9kdWNlQ29uc3RhbnQvZXNjYXBlUG9zaXRpb24uamF2YQpAQCAtMCwwICsxLDIxIEBACisvKgorICogQ29weXJpZ2h0IDIwMDAtMjAxMSBKZXRCcmFpbnMgcy5yLm8uCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworY2xhc3MgVGVzdCB7CisgICAgdm9pZCBzaW1wbGVNZXRob2QoKSB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiPGNhcmV0PiIpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIiIpOworICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnBsYWNlSW50cm9kdWNlQ29uc3RhbnQvZXNjYXBlUG9zaXRpb25PbkxvY2FsLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5wbGFjZUludHJvZHVjZUNvbnN0YW50L2VzY2FwZVBvc2l0aW9uT25Mb2NhbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI0ZjAzYWMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5wbGFjZUludHJvZHVjZUNvbnN0YW50L2VzY2FwZVBvc2l0aW9uT25Mb2NhbC5qYXZhCkBAIC0wLDAgKzEsMjAgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwMC0yMDExIEpldEJyYWlucyBzLnIuby4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCitjbGFzcyBUZXN0IHsKKyAgICB2b2lkIHNpbXBsZU1ldGhvZCgpIHsKKyAgICAgICAgYm9vbGVhbiBiPGNhcmV0PmIgPSBmYWxzZTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5wbGFjZUludHJvZHVjZUNvbnN0YW50L2VzY2FwZVBvc2l0aW9uT25Mb2NhbF9hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lucGxhY2VJbnRyb2R1Y2VDb25zdGFudC9lc2NhcGVQb3NpdGlvbk9uTG9jYWxfYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZjdhOThkCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lucGxhY2VJbnRyb2R1Y2VDb25zdGFudC9lc2NhcGVQb3NpdGlvbk9uTG9jYWxfYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDIxIEBACisvKgorICogQ29weXJpZ2h0IDIwMDAtMjAxMSBKZXRCcmFpbnMgcy5yLm8uCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworY2xhc3MgVGVzdCB7CisKKyAgICB2b2lkIHNpbXBsZU1ldGhvZCgpIHsKKyAgICAgICAgYm9vbGVhbiA8Y2FyZXQ+YmIgPSBmYWxzZTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5wbGFjZUludHJvZHVjZUNvbnN0YW50L2VzY2FwZVBvc2l0aW9uX2FmdGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5wbGFjZUludHJvZHVjZUNvbnN0YW50L2VzY2FwZVBvc2l0aW9uX2FmdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTRkZDUzMwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnBsYWNlSW50cm9kdWNlQ29uc3RhbnQvZXNjYXBlUG9zaXRpb25fYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDIyIEBACisvKgorICogQ29weXJpZ2h0IDIwMDAtMjAxMSBKZXRCcmFpbnMgcy5yLm8uCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworY2xhc3MgVGVzdCB7CisKKyAgICB2b2lkIHNpbXBsZU1ldGhvZCgpIHsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKDxjYXJldD4iIik7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiIik7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lucGxhY2VJbnRyb2R1Y2VDb25zdGFudC9ub0NvbmZsaWN0aW5nQ29uc3RhbnROYW1lLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5wbGFjZUludHJvZHVjZUNvbnN0YW50L25vQ29uZmxpY3RpbmdDb25zdGFudE5hbWUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41Y2YxMzJlCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lucGxhY2VJbnRyb2R1Y2VDb25zdGFudC9ub0NvbmZsaWN0aW5nQ29uc3RhbnROYW1lLmphdmEKQEAgLTAsMCArMSwyMSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDAwLTIwMTEgSmV0QnJhaW5zIHMuci5vLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KK2NsYXNzIFRlc3QgeworICAgIHB1YmxpYyB2b2lkIG1ldGhvZChTdHJpbmcgRk9PKSB7CisgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oRk9PKTsKKyAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiZm88Y2FyZXQ+byIpOworICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnBsYWNlSW50cm9kdWNlQ29uc3RhbnQvbm9Db25mbGljdGluZ0NvbnN0YW50TmFtZV9hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lucGxhY2VJbnRyb2R1Y2VDb25zdGFudC9ub0NvbmZsaWN0aW5nQ29uc3RhbnROYW1lX2FmdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTI3YzQxYQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnBsYWNlSW50cm9kdWNlQ29uc3RhbnQvbm9Db25mbGljdGluZ0NvbnN0YW50TmFtZV9hZnRlci5qYXZhCkBAIC0wLDAgKzEsMjQgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwMC0yMDExIEpldEJyYWlucyBzLnIuby4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCitjbGFzcyBUZXN0IHsKKworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEZPTyA9ICJmb28iOworCisgICAgcHVibGljIHZvaWQgbWV0aG9kKFN0cmluZyBGT08pIHsKKyAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihGT08pOworICAgICAgU3lzdGVtLm91dC5wcmludGxuKFRlc3QuRk9PKTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5wbGFjZUludHJvZHVjZUNvbnN0YW50L3JlcGxhY2VBbGwuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnBsYWNlSW50cm9kdWNlQ29uc3RhbnQvcmVwbGFjZUFsbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY4OTdjM2EKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5wbGFjZUludHJvZHVjZUNvbnN0YW50L3JlcGxhY2VBbGwuamF2YQpAQCAtMCwwICsxLDMwIEBACisvKgorICogQ29weXJpZ2h0IDIwMDAtMjAxMSBKZXRCcmFpbnMgcy5yLm8uCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworY2xhc3MgVGVzdCB7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgT2JqZWN0IExPRyA9IG51bGw7CisgICAgcHJpdmF0ZSBmaW5hbCBTZXQ8TWFwPiBteU1ldGhvZHMgPSBuZXcgSGFzaFNldDxNYXA+KCk7CisgICAgcHJpdmF0ZSBmaW5hbCBTZXQ8TWFwPiBteU1ldGhvZHMxID0gbmV3IEhhc2hTZXQ8TWFwPigpOworICAgIHB1YmxpYyB2b2lkIG1ldGhvZChNYXA8T2JqZWN0LCBPYmplY3Q+IGFyZ3MpIHsKKyAgICAgICAgZmluYWwgT2JqZWN0IHRvVGhyb3cgPSBhcmdzLmdldCgidGhyb3dzIik7CisgICAgICAgIGlmICh0b1Rocm93IGluc3RhbmNlb2YgTGlzdCkgeworICAgICAgICAgICAgZmluYWwgQXJyYXlMaXN0PFN0cmluZz4gbGlzdCA9IG5ldyBBcnJheUxpc3Q8U3RyaW5nPigpOworICAgICAgICAgICAgYXJncy5wdXQoInRocjxjYXJldD5vd3MiLCBsaXN0KTsKKyAgICAgICAgfSBlbHNlIGlmICh0b1Rocm93ICE9IG51bGwpIHsKKyAgICAgICAgICAgIGFyZ3MucHV0KCJ0aHJvd3MiLCBDb2xsZWN0aW9ucy5zaW5nbGV0b24odG9UaHJvdykpOworICAgICAgICB9CisgICAgICAgIG15TWV0aG9kcy5hZGQoYXJncyk7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lucGxhY2VJbnRyb2R1Y2VDb25zdGFudC9yZXBsYWNlQWxsRnJvbVNlY29uZE9jY3VycmVuY2UuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnBsYWNlSW50cm9kdWNlQ29uc3RhbnQvcmVwbGFjZUFsbEZyb21TZWNvbmRPY2N1cnJlbmNlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjdlOWZjOQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnBsYWNlSW50cm9kdWNlQ29uc3RhbnQvcmVwbGFjZUFsbEZyb21TZWNvbmRPY2N1cnJlbmNlLmphdmEKQEAgLTAsMCArMSwxNSBAQAoraW1wb3J0IGphdmEubGFuZy5TdHJpbmc7CisKK2NsYXNzIEEgeworICBBKFN0cmluZyBzdHIpIHsKKyAgfQorICAKKyAgcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0VmVyeUxvbmdTdHJpbmcoKSB7CisgICAgcmV0dXJuICIiOworICB9CisgIAorICB2b2lkIGZvbygpIHsKKyAgICBBIGEgPSBuZXcgQShnZXRWZXJ5TG9uZ1N0cmluZygpKTsKKyAgICBBIGExID0gbmV3IEEoZ2V0VmVyeTxjYXJldD5Mb25nU3RyaW5nKCkpOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lucGxhY2VJbnRyb2R1Y2VDb25zdGFudC9yZXBsYWNlQWxsRnJvbVNlY29uZE9jY3VycmVuY2VfYWZ0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnBsYWNlSW50cm9kdWNlQ29uc3RhbnQvcmVwbGFjZUFsbEZyb21TZWNvbmRPY2N1cnJlbmNlX2FmdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGM4YzlmYQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnBsYWNlSW50cm9kdWNlQ29uc3RhbnQvcmVwbGFjZUFsbEZyb21TZWNvbmRPY2N1cnJlbmNlX2FmdGVyLmphdmEKQEAgLTAsMCArMSwxOCBAQAoraW1wb3J0IGphdmEubGFuZy5TdHJpbmc7CisKK2NsYXNzIEEgeworCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgTyA9IGdldFZlcnlMb25nU3RyaW5nKCk7CisKKyAgICBBKFN0cmluZyBzdHIpIHsKKyAgfQorICAKKyAgcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0VmVyeUxvbmdTdHJpbmcoKSB7CisgICAgcmV0dXJuICIiOworICB9CisgIAorICB2b2lkIGZvbygpIHsKKyAgICBBIGEgPSBuZXcgQShPKTsKKyAgICBBIGExID0gbmV3IEEoTyk7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5wbGFjZUludHJvZHVjZUNvbnN0YW50L3JlcGxhY2VBbGxXaXRoQ2xhc3NSZWZUeXBlLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5wbGFjZUludHJvZHVjZUNvbnN0YW50L3JlcGxhY2VBbGxXaXRoQ2xhc3NSZWZUeXBlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGYxOWYyNQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnBsYWNlSW50cm9kdWNlQ29uc3RhbnQvcmVwbGFjZUFsbFdpdGhDbGFzc1JlZlR5cGUuamF2YQpAQCAtMCwwICsxLDEwIEBACitwdWJsaWMgY2xhc3MgRGVyciB7CisKKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisgICAgICAgIGxvbmcgdmFsdWU7CisKKyAgICAgICAgdmFsdWUgPSBuZXcgTG88Y2FyZXQ+bmcoMSk7CisgICAgICAgIHZhbHVlID0gbmV3IExvbmcoMSk7CisgICAgICAgIHZhbHVlID0gbmV3IExvbmcoMSk7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnBsYWNlSW50cm9kdWNlQ29uc3RhbnQvcmVwbGFjZUFsbFdpdGhDbGFzc1JlZlR5cGVfYWZ0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnBsYWNlSW50cm9kdWNlQ29uc3RhbnQvcmVwbGFjZUFsbFdpdGhDbGFzc1JlZlR5cGVfYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZmZiYTAyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lucGxhY2VJbnRyb2R1Y2VDb25zdGFudC9yZXBsYWNlQWxsV2l0aENsYXNzUmVmVHlwZV9hZnRlci5qYXZhCkBAIC0wLDAgKzEsMTIgQEAKK3B1YmxpYyBjbGFzcyBEZXJyIHsKKworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgTG9uZyBMT05HT05FID0gbmV3IExvbmcoMSk7CisKKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisgICAgICAgIGxvbmcgdmFsdWU7CisKKyAgICAgICAgdmFsdWUgPSBMT05HT05FOworICAgICAgICB2YWx1ZSA9IExPTkdPTkU7CisgICAgICAgIHZhbHVlID0gTE9OR09ORTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lucGxhY2VJbnRyb2R1Y2VDb25zdGFudC9yZXBsYWNlQWxsX2FmdGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5wbGFjZUludHJvZHVjZUNvbnN0YW50L3JlcGxhY2VBbGxfYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNWYyN2EzCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lucGxhY2VJbnRyb2R1Y2VDb25zdGFudC9yZXBsYWNlQWxsX2FmdGVyLmphdmEKQEAgLTAsMCArMSwzMSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDAwLTIwMTEgSmV0QnJhaW5zIHMuci5vLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KK2NsYXNzIFRlc3QgeworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIE9iamVjdCBMT0cgPSBudWxsOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFRIUk9XUyA9ICJ0aHJvd3MiOworICAgIHByaXZhdGUgZmluYWwgU2V0PE1hcD4gbXlNZXRob2RzID0gbmV3IEhhc2hTZXQ8TWFwPigpOworICAgIHByaXZhdGUgZmluYWwgU2V0PE1hcD4gbXlNZXRob2RzMSA9IG5ldyBIYXNoU2V0PE1hcD4oKTsKKyAgICBwdWJsaWMgdm9pZCBtZXRob2QoTWFwPE9iamVjdCwgT2JqZWN0PiBhcmdzKSB7CisgICAgICAgIGZpbmFsIE9iamVjdCB0b1Rocm93ID0gYXJncy5nZXQoVEhST1dTKTsKKyAgICAgICAgaWYgKHRvVGhyb3cgaW5zdGFuY2VvZiBMaXN0KSB7CisgICAgICAgICAgICBmaW5hbCBBcnJheUxpc3Q8U3RyaW5nPiBsaXN0ID0gbmV3IEFycmF5TGlzdDxTdHJpbmc+KCk7CisgICAgICAgICAgICBhcmdzLnB1dChUSFJPV1MsIGxpc3QpOworICAgICAgICB9IGVsc2UgaWYgKHRvVGhyb3cgIT0gbnVsbCkgeworICAgICAgICAgICAgYXJncy5wdXQoVEhST1dTLCBDb2xsZWN0aW9ucy5zaW5nbGV0b24odG9UaHJvdykpOworICAgICAgICB9CisgICAgICAgIG15TWV0aG9kcy5hZGQoYXJncyk7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lucGxhY2VJbnRyb2R1Y2VGaWVsZC9hbmNob3IuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnBsYWNlSW50cm9kdWNlRmllbGQvYW5jaG9yLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzIyZjRiOGUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5wbGFjZUludHJvZHVjZUZpZWxkL2FuY2hvci5qYXZhCkBAIC0wLDAgKzEsNSBAQAorY2xhc3MgVGVzdCB7CisgIHZvaWQgZm9vKGJvb2xlYW4gb3BhcXVlKSB7CisgICAgb3BhcTxjYXJldD51ZQorICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lucGxhY2VJbnRyb2R1Y2VGaWVsZC9hbmNob3IxLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5wbGFjZUludHJvZHVjZUZpZWxkL2FuY2hvcjEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMDJkZmEzCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lucGxhY2VJbnRyb2R1Y2VGaWVsZC9hbmNob3IxLmphdmEKQEAgLTAsMCArMSw4IEBACitpbXBvcnQgamF2YS51dGlsLio7CitjbGFzcyBFeHRyYWN0RmllbGRDb21waWxhdGlvbkZhaWx1cmVUZXN0IHsKKyAgcHJpdmF0ZSBBcnJheUxpc3QgYWVsZW1lbnRzID0gbmV3IEFycmF5TGlzdCgpOworCisgIHB1YmxpYyB2b2lkIHRlc3QoKSB7CisgICAgYWVsZW1lbnRzLml0PGNhcmV0PmVyYXRvcigpOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lucGxhY2VJbnRyb2R1Y2VGaWVsZC9hbmNob3IxX2FmdGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5wbGFjZUludHJvZHVjZUZpZWxkL2FuY2hvcjFfYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YTRhZDhkCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lucGxhY2VJbnRyb2R1Y2VGaWVsZC9hbmNob3IxX2FmdGVyLmphdmEKQEAgLTAsMCArMSw5IEBACitpbXBvcnQgamF2YS51dGlsLio7CitjbGFzcyBFeHRyYWN0RmllbGRDb21waWxhdGlvbkZhaWx1cmVUZXN0IHsKKyAgcHJpdmF0ZSBBcnJheUxpc3QgYWVsZW1lbnRzID0gbmV3IEFycmF5TGlzdCgpOworICAgIHByaXZhdGUgSXRlcmF0b3IgaXRlcmF0b3I7CisKKyAgICBwdWJsaWMgdm9pZCB0ZXN0KCkgeworICAgICAgICBpdGVyYXRvciA9IGFlbGVtZW50cy5pdGVyYXRvcigpOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5wbGFjZUludHJvZHVjZUZpZWxkL2FuY2hvcl9hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lucGxhY2VJbnRyb2R1Y2VGaWVsZC9hbmNob3JfYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMjBlOGVlCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lucGxhY2VJbnRyb2R1Y2VGaWVsZC9hbmNob3JfYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDggQEAKK2NsYXNzIFRlc3QgeworCisgICAgcHJpdmF0ZSBib29sZWFuIG9wYXF1ZTsKKworICAgIHZvaWQgZm9vKGJvb2xlYW4gb3BhcXVlKSB7CisgICAgICAgIHRoaXMub3BhcXVlID0gb3BhcXVlOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5wbGFjZUludHJvZHVjZUZpZWxkL2JlZm9yZUFzc2lnbm1lbnQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnBsYWNlSW50cm9kdWNlRmllbGQvYmVmb3JlQXNzaWdubWVudC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdlOGNhY2UKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5wbGFjZUludHJvZHVjZUZpZWxkL2JlZm9yZUFzc2lnbm1lbnQuamF2YQpAQCAtMCwwICsxLDggQEAKK2NsYXNzIFRlc3QgeworICBwcml2YXRlIFN0cmluZyBteVRpbWVyOworCisgIFRlc3QoKSB7CisgICAgIjxjYXJldD4iCisgICAgbXlUaW1lciA9ICJhYmMiOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lucGxhY2VJbnRyb2R1Y2VGaWVsZC9iZWZvcmVBc3NpZ25tZW50UmVwbGFjZUFsbC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lucGxhY2VJbnRyb2R1Y2VGaWVsZC9iZWZvcmVBc3NpZ25tZW50UmVwbGFjZUFsbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRhMzVhMGIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5wbGFjZUludHJvZHVjZUZpZWxkL2JlZm9yZUFzc2lnbm1lbnRSZXBsYWNlQWxsLmphdmEKQEAgLTAsMCArMSw4IEBACitjbGFzcyBUZXN0IHsKKyAgcHJpdmF0ZSBTdHJpbmcgbXlUaW1lcjsKKworICBUZXN0KCkgeworICAgICI8Y2FyZXQ+IgorICAgIG15VGltZXIgPSAiIjsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnBsYWNlSW50cm9kdWNlRmllbGQvYmVmb3JlQXNzaWdubWVudFJlcGxhY2VBbGxDYWxsLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5wbGFjZUludHJvZHVjZUZpZWxkL2JlZm9yZUFzc2lnbm1lbnRSZXBsYWNlQWxsQ2FsbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU3Mzc3NzAKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5wbGFjZUludHJvZHVjZUZpZWxkL2JlZm9yZUFzc2lnbm1lbnRSZXBsYWNlQWxsQ2FsbC5qYXZhCkBAIC0wLDAgKzEsMTAgQEAKK2NsYXNzIFRlc3QgeworICAgIHByaXZhdGUgRm9vIG15Rm9vOworCisgICAgVGVzdCgpIHsKKyAgICAgICAgbmV3IEZvPGNhcmV0Pm8oKQorICAgICAgICBteUZvbyA9IG5ldyBGb28oKTsKKyAgICB9Cit9CisKK2NsYXNzIEZvb3t9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lucGxhY2VJbnRyb2R1Y2VGaWVsZC9iZWZvcmVBc3NpZ25tZW50UmVwbGFjZUFsbENhbGxfYWZ0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnBsYWNlSW50cm9kdWNlRmllbGQvYmVmb3JlQXNzaWdubWVudFJlcGxhY2VBbGxDYWxsX2FmdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWQyNTJhMgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnBsYWNlSW50cm9kdWNlRmllbGQvYmVmb3JlQXNzaWdubWVudFJlcGxhY2VBbGxDYWxsX2FmdGVyLmphdmEKQEAgLTAsMCArMSwxMSBAQAorY2xhc3MgVGVzdCB7CisgICAgcHJpdmF0ZSBmaW5hbCBGb28gZm9vOworICAgIHByaXZhdGUgRm9vIG15Rm9vOworCisgICAgVGVzdCgpIHsKKyAgICAgICAgZm9vID0gbmV3IEZvbygpOworICAgICAgICBteUZvbyA9IGZvbzsKKyAgICB9Cit9CisKK2NsYXNzIEZvb3t9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lucGxhY2VJbnRyb2R1Y2VGaWVsZC9iZWZvcmVBc3NpZ25tZW50UmVwbGFjZUFsbF9hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lucGxhY2VJbnRyb2R1Y2VGaWVsZC9iZWZvcmVBc3NpZ25tZW50UmVwbGFjZUFsbF9hZnRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM1NmJkMzcKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5wbGFjZUludHJvZHVjZUZpZWxkL2JlZm9yZUFzc2lnbm1lbnRSZXBsYWNlQWxsX2FmdGVyLmphdmEKQEAgLTAsMCArMSw5IEBACitjbGFzcyBUZXN0IHsKKyAgICBwcml2YXRlIGZpbmFsIFN0cmluZyBzdHJpbmc7CisgICAgcHJpdmF0ZSBTdHJpbmcgbXlUaW1lcjsKKworICAgIFRlc3QoKSB7CisgICAgICAgIHN0cmluZyA9ICIiOzxjYXJldD4KKyAgICAgICAgbXlUaW1lciA9IHN0cmluZzsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnBsYWNlSW50cm9kdWNlRmllbGQvYmVmb3JlQXNzaWdubWVudF9hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lucGxhY2VJbnRyb2R1Y2VGaWVsZC9iZWZvcmVBc3NpZ25tZW50X2FmdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGMxYTczNwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnBsYWNlSW50cm9kdWNlRmllbGQvYmVmb3JlQXNzaWdubWVudF9hZnRlci5qYXZhCkBAIC0wLDAgKzEsOSBAQAorY2xhc3MgVGVzdCB7CisgICAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgc3RyaW5nOworICAgIHByaXZhdGUgU3RyaW5nIG15VGltZXI7CisKKyAgICBUZXN0KCkgeworICAgICAgICBzdHJpbmcgPSAiIjsKKyAgICAgICAgbXlUaW1lciA9ICJhYmMiOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lucGxhY2VJbnRyb2R1Y2VGaWVsZC9lc2NhcGVQb3NpdGlvbi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lucGxhY2VJbnRyb2R1Y2VGaWVsZC9lc2NhcGVQb3NpdGlvbi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIxYTMzYTQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5wbGFjZUludHJvZHVjZUZpZWxkL2VzY2FwZVBvc2l0aW9uLmphdmEKQEAgLTAsMCArMSw2IEBACitjbGFzcyBUZXN0IHsKKyAgICB2b2lkIHNpbXBsZU1ldGhvZCgpIHsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCI8Y2FyZXQ+Iik7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiIik7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lucGxhY2VJbnRyb2R1Y2VGaWVsZC9lc2NhcGVQb3NpdGlvbk9uTG9jYWwuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnBsYWNlSW50cm9kdWNlRmllbGQvZXNjYXBlUG9zaXRpb25PbkxvY2FsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDI5NTM1ZTNhCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lucGxhY2VJbnRyb2R1Y2VGaWVsZC9lc2NhcGVQb3NpdGlvbk9uTG9jYWwuamF2YQpAQCAtMCwwICsxLDUgQEAKK2NsYXNzIFRlc3QgeworICAgIHZvaWQgc2ltcGxlTWV0aG9kKCkgeworICAgICAgICBib29sZWFuIGI8Y2FyZXQ+YjsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5wbGFjZUludHJvZHVjZUZpZWxkL2VzY2FwZVBvc2l0aW9uT25Mb2NhbF9hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lucGxhY2VJbnRyb2R1Y2VGaWVsZC9lc2NhcGVQb3NpdGlvbk9uTG9jYWxfYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNjYzMTUxCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lucGxhY2VJbnRyb2R1Y2VGaWVsZC9lc2NhcGVQb3NpdGlvbk9uTG9jYWxfYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDYgQEAKK2NsYXNzIFRlc3QgeworCisgICAgdm9pZCBzaW1wbGVNZXRob2QoKSB7CisgICAgICAgIGJvb2xlYW4gPGNhcmV0PmJiOworICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnBsYWNlSW50cm9kdWNlRmllbGQvZXNjYXBlUG9zaXRpb25fYWZ0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnBsYWNlSW50cm9kdWNlRmllbGQvZXNjYXBlUG9zaXRpb25fYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNjM5ZTJjCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lucGxhY2VJbnRyb2R1Y2VGaWVsZC9lc2NhcGVQb3NpdGlvbl9hZnRlci5qYXZhCkBAIC0wLDAgKzEsNyBAQAorY2xhc3MgVGVzdCB7CisKKyAgICB2b2lkIHNpbXBsZU1ldGhvZCgpIHsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKDxjYXJldD4iIik7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiIik7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lucGxhY2VJbnRyb2R1Y2VGaWVsZC9yZXBsYWNlQWxsLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5wbGFjZUludHJvZHVjZUZpZWxkL3JlcGxhY2VBbGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYTQ0ZTNiCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lucGxhY2VJbnRyb2R1Y2VGaWVsZC9yZXBsYWNlQWxsLmphdmEKQEAgLTAsMCArMSwyMSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDAwLTIwMTEgSmV0QnJhaW5zIHMuci5vLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KK2NsYXNzIFRlc3QgeworICAgIHZvaWQgc2ltcGxlTWV0aG9kKCkgeworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIjxjYXJldD4iKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIiKTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5wbGFjZUludHJvZHVjZUZpZWxkL3JlcGxhY2VBbGxfYWZ0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnBsYWNlSW50cm9kdWNlRmllbGQvcmVwbGFjZUFsbF9hZnRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE4MThmYTYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5wbGFjZUludHJvZHVjZUZpZWxkL3JlcGxhY2VBbGxfYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDI1IEBACisvKgorICogQ29weXJpZ2h0IDIwMDAtMjAxMSBKZXRCcmFpbnMgcy5yLm8uCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworY2xhc3MgVGVzdCB7CisKKyAgICBwcml2YXRlIFN0cmluZyB4OworCisgICAgdm9pZCBzaW1wbGVNZXRob2QoKSB7CisgICAgICAgIHggPSAiIjsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKHgpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oeCk7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lucGxhY2VJbnRyb2R1Y2VGaWVsZC9yZXN0b3JlTmV3RXhwcmVzc2lvbi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lucGxhY2VJbnRyb2R1Y2VGaWVsZC9yZXN0b3JlTmV3RXhwcmVzc2lvbi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQwZjI0ODAKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5wbGFjZUludHJvZHVjZUZpZWxkL3Jlc3RvcmVOZXdFeHByZXNzaW9uLmphdmEKQEAgLTAsMCArMSwxOCBAQAorcHVibGljIGNsYXNzIE15Q2xhc3MgeworICAgIHB1YmxpYyB2b2lkIHRlc3QoKSB7CisgICAgICBpZiAobmV3IEluPGNhcmV0Pm5lcigpLmlzV3JpdGVSZXBsYWNlKCkpIHsKKyAgICAgICAgcmV0dXJuIG5ldyBJbm5lcigpLndyaXRlUmVwbGFjZSgpOworICAgICAgfQorICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICBwcml2YXRlIGNsYXNzIElubmVyIHsKKyAgICAgIHB1YmxpYyBib29sZWFuIGlzV3JpdGVSZXBsYWNlKCkgeworICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgIH0KKyAgCisgICAgICBwdWJsaWMgYm9vbGVhbiB3cml0ZVJlcGxhY2UoKSB7CisgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgfQorICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5wbGFjZUludHJvZHVjZUZpZWxkL3Jlc3RvcmVOZXdFeHByZXNzaW9uX2FmdGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5wbGFjZUludHJvZHVjZUZpZWxkL3Jlc3RvcmVOZXdFeHByZXNzaW9uX2FmdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjNhZmYwMwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnBsYWNlSW50cm9kdWNlRmllbGQvcmVzdG9yZU5ld0V4cHJlc3Npb25fYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDIyIEBACitwdWJsaWMgY2xhc3MgTXlDbGFzcyB7CisKKyAgICBwcml2YXRlIElubmVyIGlubmVyOworCisgICAgcHVibGljIHZvaWQgdGVzdCgpIHsKKyAgICAgICAgaW5uZXIgPSBuZXcgSW5uZXIoKTsKKyAgICAgICAgaWYgKGlubmVyLmlzV3JpdGVSZXBsYWNlKCkpIHsKKyAgICAgICAgcmV0dXJuIGlubmVyLndyaXRlUmVwbGFjZSgpOworICAgICAgfQorICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICBwcml2YXRlIGNsYXNzIElubmVyIHsKKyAgICAgIHB1YmxpYyBib29sZWFuIGlzV3JpdGVSZXBsYWNlKCkgeworICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgIH0KKyAgCisgICAgICBwdWJsaWMgYm9vbGVhbiB3cml0ZVJlcGxhY2UoKSB7CisgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgfQorICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5wbGFjZUludHJvZHVjZUZpZWxkL3RlbXBsYXRlQWRqdXN0bWVudC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lucGxhY2VJbnRyb2R1Y2VGaWVsZC90ZW1wbGF0ZUFkanVzdG1lbnQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNWVjNjllCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lucGxhY2VJbnRyb2R1Y2VGaWVsZC90ZW1wbGF0ZUFkanVzdG1lbnQuamF2YQpAQCAtMCwwICsxLDUgQEAKK2NsYXNzIFRlc3QgeworICBpbnQgZigpeworICAgIHJldHVybjxjYXJldD4tMTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnBsYWNlSW50cm9kdWNlRmllbGQvdGVtcGxhdGVBZGp1c3RtZW50X2FmdGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5wbGFjZUludHJvZHVjZUZpZWxkL3RlbXBsYXRlQWRqdXN0bWVudF9hZnRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA0YTNhMzEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5wbGFjZUludHJvZHVjZUZpZWxkL3RlbXBsYXRlQWRqdXN0bWVudF9hZnRlci5qYXZhCkBAIC0wLDAgKzEsOSBAQAorY2xhc3MgVGVzdCB7CisKKyAgICBwcml2YXRlIGludCBhbkludDsKKworICAgIGludCBmKCl7CisgICAgICAgIGFuSW50ID0gLTE7CisgICAgICAgIHJldHVybiBhbkludDsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnBsYWNlSW50cm9kdWNlUGFyYW1ldGVyL2VzY2FwZVBvc2l0aW9uLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5wbGFjZUludHJvZHVjZVBhcmFtZXRlci9lc2NhcGVQb3NpdGlvbi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIxYTMzYTQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5wbGFjZUludHJvZHVjZVBhcmFtZXRlci9lc2NhcGVQb3NpdGlvbi5qYXZhCkBAIC0wLDAgKzEsNiBAQAorY2xhc3MgVGVzdCB7CisgICAgdm9pZCBzaW1wbGVNZXRob2QoKSB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiPGNhcmV0PiIpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIiIpOworICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnBsYWNlSW50cm9kdWNlUGFyYW1ldGVyL2VzY2FwZVBvc2l0aW9uT25Mb2NhbC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lucGxhY2VJbnRyb2R1Y2VQYXJhbWV0ZXIvZXNjYXBlUG9zaXRpb25PbkxvY2FsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDI5NTM1ZTNhCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lucGxhY2VJbnRyb2R1Y2VQYXJhbWV0ZXIvZXNjYXBlUG9zaXRpb25PbkxvY2FsLmphdmEKQEAgLTAsMCArMSw1IEBACitjbGFzcyBUZXN0IHsKKyAgICB2b2lkIHNpbXBsZU1ldGhvZCgpIHsKKyAgICAgICAgYm9vbGVhbiBiPGNhcmV0PmI7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lucGxhY2VJbnRyb2R1Y2VQYXJhbWV0ZXIvZXNjYXBlUG9zaXRpb25PbkxvY2FsX2FmdGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5wbGFjZUludHJvZHVjZVBhcmFtZXRlci9lc2NhcGVQb3NpdGlvbk9uTG9jYWxfYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kN2YzMmVjCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lucGxhY2VJbnRyb2R1Y2VQYXJhbWV0ZXIvZXNjYXBlUG9zaXRpb25PbkxvY2FsX2FmdGVyLmphdmEKQEAgLTAsMCArMSw1IEBACitjbGFzcyBUZXN0IHsKKyAgICB2b2lkIHNpbXBsZU1ldGhvZCgpIHsKKyAgICAgICAgYm9vbGVhbiA8Y2FyZXQ+YmI7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lucGxhY2VJbnRyb2R1Y2VQYXJhbWV0ZXIvZXNjYXBlUG9zaXRpb25fYWZ0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnBsYWNlSW50cm9kdWNlUGFyYW1ldGVyL2VzY2FwZVBvc2l0aW9uX2FmdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmU1OGQ1YQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnBsYWNlSW50cm9kdWNlUGFyYW1ldGVyL2VzY2FwZVBvc2l0aW9uX2FmdGVyLmphdmEKQEAgLTAsMCArMSw2IEBACitjbGFzcyBUZXN0IHsKKyAgICB2b2lkIHNpbXBsZU1ldGhvZCgpIHsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKDxjYXJldD4iIik7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiIik7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lucGxhY2VJbnRyb2R1Y2VQYXJhbWV0ZXIvZXh0cmFjdENvbmZsaWN0aW5nUGFyYW1PdmVyTG9jYWwuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnBsYWNlSW50cm9kdWNlUGFyYW1ldGVyL2V4dHJhY3RDb25mbGljdGluZ1BhcmFtT3ZlckxvY2FsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjU3YWIwZQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnBsYWNlSW50cm9kdWNlUGFyYW1ldGVyL2V4dHJhY3RDb25mbGljdGluZ1BhcmFtT3ZlckxvY2FsLmphdmEKQEAgLTAsMCArMSw4IEBACitjbGFzcyBUZXN0IHsKKworICAgIHZvaWQgZm9vKGludCBwKSB7CisgICAgICAgIGludCBpPGNhcmV0PmkgPSA0ICsgMjsKKyAgICAgICAgLy9jb21tZW50CisgICAgICAgIFN0cmluZyB2YXIgPSAiIjsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lucGxhY2VJbnRyb2R1Y2VQYXJhbWV0ZXIvZXh0cmFjdFBhcmFtT3ZlckxvY2FsLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5wbGFjZUludHJvZHVjZVBhcmFtZXRlci9leHRyYWN0UGFyYW1PdmVyTG9jYWwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MmUxNDQ4Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lucGxhY2VJbnRyb2R1Y2VQYXJhbWV0ZXIvZXh0cmFjdFBhcmFtT3ZlckxvY2FsLmphdmEKQEAgLTAsMCArMSw4IEBACitjbGFzcyBUZXN0IHsKKworICAgIHZvaWQgZm9vKCkgeworICAgICAgICBpbnQgaTxjYXJldD5pID0gNCArIDI7CisgICAgICAgIC8vY29tbWVudAorICAgICAgICBTdHJpbmcgdmFyID0gIiI7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lucGxhY2VJbnRyb2R1Y2VQYXJhbWV0ZXIvZXh0cmFjdFBhcmFtT3ZlckxvY2FsX2FmdGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5wbGFjZUludHJvZHVjZVBhcmFtZXRlci9leHRyYWN0UGFyYW1PdmVyTG9jYWxfYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MDgyOWRlNQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnBsYWNlSW50cm9kdWNlUGFyYW1ldGVyL2V4dHJhY3RQYXJhbU92ZXJMb2NhbF9hZnRlci5qYXZhCkBAIC0wLDAgKzEsNyBAQAorY2xhc3MgVGVzdCB7CisKKyAgICB2b2lkIGZvbyhpbnQgaWkpIHsKKyAgICAgICAgPGNhcmV0Pi8vY29tbWVudAorICAgICAgICBTdHJpbmcgdmFyID0gIiI7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lucGxhY2VJbnRyb2R1Y2VQYXJhbWV0ZXIvcGFyYW1OYW1lRXFNZXRob2ROYW1lLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5wbGFjZUludHJvZHVjZVBhcmFtZXRlci9wYXJhbU5hbWVFcU1ldGhvZE5hbWUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YTcyNGM4Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lucGxhY2VJbnRyb2R1Y2VQYXJhbWV0ZXIvcGFyYW1OYW1lRXFNZXRob2ROYW1lLmphdmEKQEAgLTAsMCArMSwxMCBAQAorY2xhc3MgQSB7CisgIGludCBmKCkgeworICAgIHJldHVybiAwOworICB9CisKKyAgdm9pZCBtKCkgeworICAgIGY8Y2FyZXQ+KCk7CisgICAgZigpOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lucGxhY2VJbnRyb2R1Y2VQYXJhbWV0ZXIvcGFyYW1OYW1lRXFNZXRob2ROYW1lX2FmdGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5wbGFjZUludHJvZHVjZVBhcmFtZXRlci9wYXJhbU5hbWVFcU1ldGhvZE5hbWVfYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MjE2MDkzCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lucGxhY2VJbnRyb2R1Y2VQYXJhbWV0ZXIvcGFyYW1OYW1lRXFNZXRob2ROYW1lX2FmdGVyLmphdmEKQEAgLTAsMCArMSw5IEBACitjbGFzcyBBIHsKKyAgaW50IGYoKSB7CisgICAgcmV0dXJuIDA7CisgIH0KKworICB2b2lkIG0oaW50IGYpIHsKKyAgICAgIGYoKTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnBsYWNlSW50cm9kdWNlUGFyYW1ldGVyL3JlcGxhY2VBbGwuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnBsYWNlSW50cm9kdWNlUGFyYW1ldGVyL3JlcGxhY2VBbGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MzAwYjI5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lucGxhY2VJbnRyb2R1Y2VQYXJhbWV0ZXIvcmVwbGFjZUFsbC5qYXZhCkBAIC0wLDAgKzEsNiBAQAorY2xhc3MgVGVzdCB7CisgICAgdm9pZCBmb28oKSB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiaGVsbG8iKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJoZWw8Y2FyZXQ+bG8iKTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lucGxhY2VJbnRyb2R1Y2VQYXJhbWV0ZXIvcmVwbGFjZUFsbDEuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnBsYWNlSW50cm9kdWNlUGFyYW1ldGVyL3JlcGxhY2VBbGwxLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjYzYTkxOAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnBsYWNlSW50cm9kdWNlUGFyYW1ldGVyL3JlcGxhY2VBbGwxLmphdmEKQEAgLTAsMCArMSw1OSBAQAorcHVibGljIGFic3RyYWN0IGNsYXNzIFBhcnRuZXJBdXRoZW50aWNhdGlvbkludGVyY2VwdG9yIHsKKworCisgICAgcHJvdGVjdGVkIGJvb2xlYW4gdmFsaWRhdGVQcm90ZWN0aW9uKFBhcnRuZXJBdXRoZW50aWNhdGlvbiBwYXJ0bmVyQXV0aGVudGljYXRpb24pIHsKKyAgICAgICAgdHJ5UGFydG5lckF1dGhlbnRpY2F0aW9uVHlwZXMocGFydG5lckF1dGhlbnRpY2F0aW9uLCB2YWxpZGF0ZWQsIGlwLCBwYXJ0bmVyLCAic2VydmljZUdyb3VwIik7CisKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworCisgICAgcHJpdmF0ZSBib29sZWFuIHRyeVBhcnRuZXJBdXRoZW50aWNhdGlvblR5cGVzKFBhcnRuZXJBdXRoZW50aWNhdGlvbiBwYXJ0bmVyQXV0aGVudGljYXRpb24sIGJvb2xlYW4gdmFsaWRhdGVkLCBTdHJpbmcgaXAsIFN0cmluZyBwYXJ0bmVyLCBTdHJpbmcgc2VydmljZUdyb3VwKSB7CisgICAgICAgIGlmIChwYXJ0bmVyQXV0aGVudGljYXRpb24udHlwPGNhcmV0PmUoKSA9PSBQYXJ0bmVyQXV0aGVudGljYXRpb25UeXBlLklQX1BBUlRORVJfSUQpIHsKKworICAgICAgICB9IGVsc2UgaWYgKHBhcnRuZXJBdXRoZW50aWNhdGlvbi50eXBlKCkgPT0gUGFydG5lckF1dGhlbnRpY2F0aW9uVHlwZS5JUCkgeworICAgICAgICB9CisgICAgICAgIHJldHVybiB2YWxpZGF0ZWQ7CisgICAgfQorCisKKyAgICBwcml2YXRlIGNsYXNzIFBhcnRuZXJBdXRoZW50aWNhdGlvbiB7CisgICAgICAgIHB1YmxpYyBTdHJpbmcgc2VydmljZUdyb3VwKCkgeworICAgICAgICAgICAgcmV0dXJuIG51bGw7ICAvL1RvIGNoYW5nZSBib2R5IG9mIGNyZWF0ZWQgbWV0aG9kcyB1c2UgRmlsZSB8IFNldHRpbmdzIHwgRmlsZSBUZW1wbGF0ZXMuCisgICAgICAgIH0KKworICAgICAgICBwdWJsaWMgU3RyaW5nIHR5cGUoKSB7CisgICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgfQorICAgIH0KKworICAgIHByaXZhdGUgc3RhdGljIGNsYXNzIFBhcnRuZXJJZEhvbGRlciB7CisgICAgICAgIHByaXZhdGUgc3RhdGljIFBhcnRuZXJJUCBwYXJ0bmVySVA7CisKKyAgICAgICAgcHVibGljIHN0YXRpYyBQYXJ0bmVySVAgZ2V0UGFydG5lcklQKCkgeworICAgICAgICAgICAgcmV0dXJuIHBhcnRuZXJJUDsKKyAgICAgICAgfQorICAgIH0KKworICAgIHByaXZhdGUgY2xhc3MgUGFydG5lcklQIHsKKyAgICAgICAgcHJpdmF0ZSBTdHJpbmcgaXA7CisgICAgICAgIHByaXZhdGUgU3RyaW5nIHBhcnRuZXI7CisgICAgICAgIHByaXZhdGUgYm9vbGVhbiB2YWxpZDsKKworICAgICAgICBwdWJsaWMgU3RyaW5nIGdldElwKCkgeworICAgICAgICAgICAgcmV0dXJuIGlwOworICAgICAgICB9CisKKyAgICAgICAgcHVibGljIFN0cmluZyBnZXRQYXJ0bmVyKCkgeworICAgICAgICAgICAgcmV0dXJuIHBhcnRuZXI7CisgICAgICAgIH0KKworICAgICAgICBwdWJsaWMgYm9vbGVhbiBpc1ZhbGlkKCkgeworICAgICAgICAgICAgcmV0dXJuIHZhbGlkOworICAgICAgICB9CisgICAgfQorCisgICAgcHJpdmF0ZSBjbGFzcyBQYXJ0bmVyQXV0aGVudGljYXRpb25UeXBlIHsKKyAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSVBfUEFSVE5FUl9JRCA9ICJpZCI7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lucGxhY2VJbnRyb2R1Y2VQYXJhbWV0ZXIvcmVwbGFjZUFsbDFfYWZ0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnBsYWNlSW50cm9kdWNlUGFyYW1ldGVyL3JlcGxhY2VBbGwxX2FmdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjQwY2VhMQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnBsYWNlSW50cm9kdWNlUGFyYW1ldGVyL3JlcGxhY2VBbGwxX2FmdGVyLmphdmEKQEAgLTAsMCArMSw1OSBAQAorcHVibGljIGFic3RyYWN0IGNsYXNzIFBhcnRuZXJBdXRoZW50aWNhdGlvbkludGVyY2VwdG9yIHsKKworCisgICAgcHJvdGVjdGVkIGJvb2xlYW4gdmFsaWRhdGVQcm90ZWN0aW9uKFBhcnRuZXJBdXRoZW50aWNhdGlvbiBwYXJ0bmVyQXV0aGVudGljYXRpb24pIHsKKyAgICAgICAgdHJ5UGFydG5lckF1dGhlbnRpY2F0aW9uVHlwZXModmFsaWRhdGVkLCBpcCwgcGFydG5lciwgInNlcnZpY2VHcm91cCIsIHBhcnRuZXJBdXRoZW50aWNhdGlvbi50eXBlKCkpOworCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKworICAgIHByaXZhdGUgYm9vbGVhbiB0cnlQYXJ0bmVyQXV0aGVudGljYXRpb25UeXBlcyhib29sZWFuIHZhbGlkYXRlZCwgU3RyaW5nIGlwLCBTdHJpbmcgcGFydG5lciwgU3RyaW5nIHNlcnZpY2VHcm91cCwgU3RyaW5nIHR5cGUpIHsKKyAgICAgICAgaWYgKHR5cGUgPT0gUGFydG5lckF1dGhlbnRpY2F0aW9uVHlwZS5JUF9QQVJUTkVSX0lEKSB7CisKKyAgICAgICAgfSBlbHNlIGlmICh0eXBlID09IFBhcnRuZXJBdXRoZW50aWNhdGlvblR5cGUuSVApIHsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdmFsaWRhdGVkOworICAgIH0KKworCisgICAgcHJpdmF0ZSBjbGFzcyBQYXJ0bmVyQXV0aGVudGljYXRpb24geworICAgICAgICBwdWJsaWMgU3RyaW5nIHNlcnZpY2VHcm91cCgpIHsKKyAgICAgICAgICAgIHJldHVybiBudWxsOyAgLy9UbyBjaGFuZ2UgYm9keSBvZiBjcmVhdGVkIG1ldGhvZHMgdXNlIEZpbGUgfCBTZXR0aW5ncyB8IEZpbGUgVGVtcGxhdGVzLgorICAgICAgICB9CisKKyAgICAgICAgcHVibGljIFN0cmluZyB0eXBlKCkgeworICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwcml2YXRlIHN0YXRpYyBjbGFzcyBQYXJ0bmVySWRIb2xkZXIgeworICAgICAgICBwcml2YXRlIHN0YXRpYyBQYXJ0bmVySVAgcGFydG5lcklQOworCisgICAgICAgIHB1YmxpYyBzdGF0aWMgUGFydG5lcklQIGdldFBhcnRuZXJJUCgpIHsKKyAgICAgICAgICAgIHJldHVybiBwYXJ0bmVySVA7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwcml2YXRlIGNsYXNzIFBhcnRuZXJJUCB7CisgICAgICAgIHByaXZhdGUgU3RyaW5nIGlwOworICAgICAgICBwcml2YXRlIFN0cmluZyBwYXJ0bmVyOworICAgICAgICBwcml2YXRlIGJvb2xlYW4gdmFsaWQ7CisKKyAgICAgICAgcHVibGljIFN0cmluZyBnZXRJcCgpIHsKKyAgICAgICAgICAgIHJldHVybiBpcDsKKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyBTdHJpbmcgZ2V0UGFydG5lcigpIHsKKyAgICAgICAgICAgIHJldHVybiBwYXJ0bmVyOworICAgICAgICB9CisKKyAgICAgICAgcHVibGljIGJvb2xlYW4gaXNWYWxpZCgpIHsKKyAgICAgICAgICAgIHJldHVybiB2YWxpZDsKKyAgICAgICAgfQorICAgIH0KKworICAgIHByaXZhdGUgY2xhc3MgUGFydG5lckF1dGhlbnRpY2F0aW9uVHlwZSB7CisgICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIElQX1BBUlRORVJfSUQgPSAiaWQiOworICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnBsYWNlSW50cm9kdWNlUGFyYW1ldGVyL3JlcGxhY2VBbGwyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5wbGFjZUludHJvZHVjZVBhcmFtZXRlci9yZXBsYWNlQWxsMi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYyMzNmNzIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5wbGFjZUludHJvZHVjZVBhcmFtZXRlci9yZXBsYWNlQWxsMi5qYXZhCkBAIC0wLDAgKzEsMTMgQEAKK3B1YmxpYyBjbGFzcyBBVGVzdCB7CisgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEZPTyA9ICJmb28iOworICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBGT08xID0gImZvbzEiOworCisgICAgU3RyaW5nIG1faW50ZXJ2YWwgPSAiIjsKKyAgICB2b2lkIGZvbygpIHsKKyAgICAgIGlmIChGT08uZXF1YWxzKDxjYXJldD5tX2ludGVydmFsLnN1YnN0cmluZygxKSkpIHsKKyAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oRk9PKTsKKyAgICAgIH0gZWxzZSBpZiAoRk9PMS5lcXVhbHMobV9pbnRlcnZhbC5zdWJzdHJpbmcoMSkpKSB7CisgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCk7CisgICAgICB9CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lucGxhY2VJbnRyb2R1Y2VQYXJhbWV0ZXIvcmVwbGFjZUFsbDJfYWZ0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnBsYWNlSW50cm9kdWNlUGFyYW1ldGVyL3JlcGxhY2VBbGwyX2FmdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWNkOTEzNgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnBsYWNlSW50cm9kdWNlUGFyYW1ldGVyL3JlcGxhY2VBbGwyX2FmdGVyLmphdmEKQEAgLTAsMCArMSwxMyBAQAorcHVibGljIGNsYXNzIEFUZXN0IHsKKyAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRk9PID0gImZvbyI7CisgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEZPTzEgPSAiZm9vMSI7CisKKyAgICBTdHJpbmcgbV9pbnRlcnZhbCA9ICIiOworICAgIHZvaWQgZm9vKFN0cmluZyBtX2ludGVydmFsMSkgeworICAgICAgaWYgKEZPTy5lcXVhbHMobV9pbnRlcnZhbDEuc3Vic3RyaW5nKDEpKSkgeworICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihGT08pOworICAgICAgfSBlbHNlIGlmIChGT08xLmVxdWFscyhtX2ludGVydmFsMS5zdWJzdHJpbmcoMSkpKSB7CisgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCk7CisgICAgICB9CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lucGxhY2VJbnRyb2R1Y2VQYXJhbWV0ZXIvcmVwbGFjZUFsbE1ldGhvZENhbGxzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5wbGFjZUludHJvZHVjZVBhcmFtZXRlci9yZXBsYWNlQWxsTWV0aG9kQ2FsbHMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hN2E3ZWJiCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lucGxhY2VJbnRyb2R1Y2VQYXJhbWV0ZXIvcmVwbGFjZUFsbE1ldGhvZENhbGxzLmphdmEKQEAgLTAsMCArMSw5IEBACitwdWJsaWMgY2xhc3MgQWFhIHsKKyAgcHVibGljIFN0cmluZyBtZXRob2QoKSB7CisgICAgcmV0dXJuIGdldDxjYXJldD5TdHJpbmcoKSArIGdldFN0cmluZygpICsgZ2V0U3RyaW5nKCk7CisgIH0KKworICBwdWJsaWMgU3RyaW5nIGdldFN0cmluZygpIHsKKyAgICByZXR1cm4gIjEyMyI7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5wbGFjZUludHJvZHVjZVBhcmFtZXRlci9yZXBsYWNlQWxsTWV0aG9kQ2FsbHNfYWZ0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnBsYWNlSW50cm9kdWNlUGFyYW1ldGVyL3JlcGxhY2VBbGxNZXRob2RDYWxsc19hZnRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY4NTNjYTgKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW5wbGFjZUludHJvZHVjZVBhcmFtZXRlci9yZXBsYWNlQWxsTWV0aG9kQ2FsbHNfYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDkgQEAKK3B1YmxpYyBjbGFzcyBBYWEgeworICBwdWJsaWMgU3RyaW5nIG1ldGhvZChTdHJpbmcgc3RyaW5nc3RyaW5nKSB7CisgICAgcmV0dXJuIHN0cmluZ3N0cmluZyArIHN0cmluZ3N0cmluZyArIHN0cmluZ3N0cmluZzsKKyAgfQorCisgIHB1YmxpYyBTdHJpbmcgZ2V0U3RyaW5nKCkgeworICAgIHJldHVybiAiMTIzIjsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnBsYWNlSW50cm9kdWNlUGFyYW1ldGVyL3JlcGxhY2VBbGxfYWZ0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnBsYWNlSW50cm9kdWNlUGFyYW1ldGVyL3JlcGxhY2VBbGxfYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNTk2ZGY1Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2lucGxhY2VJbnRyb2R1Y2VQYXJhbWV0ZXIvcmVwbGFjZUFsbF9hZnRlci5qYXZhCkBAIC0wLDAgKzEsNiBAQAorY2xhc3MgVGVzdCB7CisgICAgdm9pZCBmb28oU3RyaW5nIGhlbGxvKSB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihoZWxsbyk7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbig8Y2FyZXQ+aGVsbG8pOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlQ29uc3RhbnQvQW5ub3RhdGlvbkRlc2NyaXB0aW9uLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlQ29uc3RhbnQvQW5ub3RhdGlvbkRlc2NyaXB0aW9uLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTIzMTdiNwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VDb25zdGFudC9Bbm5vdGF0aW9uRGVzY3JpcHRpb24uamF2YQpAQCAtMCwwICsxLDQgQEAKK0BTdXBwcmVzc1dhcm5pbmdzKDxzZWxlY3Rpb24+IkNPTlNUIjwvc2VsZWN0aW9uPikKK2NsYXNzIE1lIHsKKworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VDb25zdGFudC9Bbm5vdGF0aW9uRGVzY3JpcHRpb25fYWZ0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VDb25zdGFudC9Bbm5vdGF0aW9uRGVzY3JpcHRpb25fYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNGYzODUyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZUNvbnN0YW50L0Fubm90YXRpb25EZXNjcmlwdGlvbl9hZnRlci5qYXZhCkBAIC0wLDAgKzEsNSBAQAorQFN1cHByZXNzV2FybmluZ3MoTWUueHh4KQorY2xhc3MgTWUgeworCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgeHh4ID0gIkNPTlNUIjsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlQ29uc3RhbnQvQXJyYXlGcm9tVmFyYXJncy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZUNvbnN0YW50L0FycmF5RnJvbVZhcmFyZ3MuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZTZiYThlCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZUNvbnN0YW50L0FycmF5RnJvbVZhcmFyZ3MuamF2YQpAQCAtMCwwICsxLDggQEAKK2NsYXNzIEIxIHsKKyAgcHVibGljIEIxKGludCBpLCBTdHJpbmcuLi4gcykge30KK30KK2NsYXNzIEExIGV4dGVuZHMgQjEgeworICBBMSgpIHsKKyAgICBzdXBlcigxLCA8c2VsZWN0aW9uPiJhIiwgImIiPC9zZWxlY3Rpb24+KTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VDb25zdGFudC9BcnJheUZyb21WYXJhcmdzX2FmdGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlQ29uc3RhbnQvQXJyYXlGcm9tVmFyYXJnc19hZnRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNlMjhhY2EKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlQ29uc3RhbnQvQXJyYXlGcm9tVmFyYXJnc19hZnRlci5qYXZhCkBAIC0wLDAgKzEsMTAgQEAKK2NsYXNzIEIxIHsKKyAgcHVibGljIEIxKGludCBpLCBTdHJpbmcuLi4gcykge30KK30KK2NsYXNzIEExIGV4dGVuZHMgQjEgeworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nW10geHh4ID0gbmV3IFN0cmluZ1tdeyJhIiwgImIifTsKKworICAgIEExKCkgeworICAgIHN1cGVyKDEsIHh4eCk7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlQ29uc3RhbnQvRW51bUNvbnN0YW50LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlQ29uc3RhbnQvRW51bUNvbnN0YW50LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDY2YzFmYwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VDb25zdGFudC9FbnVtQ29uc3RhbnQuamF2YQpAQCAtMCwwICsxLDcgQEAKK3B1YmxpYyBlbnVtIEVudW1Db25zdGFudCB7CisgIDsKKyAgRW51bUNvbnN0YW50KFN0cmluZyBzKXt9CisgIHZvaWQgZm9vKCkgeworICAgIFN0cmluZyA8Y2FyZXQ+czEgPSAiZGRkZGRkIjsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VDb25zdGFudC9FbnVtQ29uc3RhbnRfYWZ0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VDb25zdGFudC9FbnVtQ29uc3RhbnRfYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42Njg3ZGM2Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZUNvbnN0YW50L0VudW1Db25zdGFudF9hZnRlci5qYXZhCkBAIC0wLDAgKzEsNiBAQAorcHVibGljIGVudW0gRW51bUNvbnN0YW50IHsKKyAgICB4eHgoImRkZGRkZCIpOworICBFbnVtQ29uc3RhbnQoU3RyaW5nIHMpe30KKyAgdm9pZCBmb28oKSB7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlQ29uc3RhbnQvRXNjYWxhdGVWaXNpYmlsaXR5LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlQ29uc3RhbnQvRXNjYWxhdGVWaXNpYmlsaXR5LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmU0YjIyNQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VDb25zdGFudC9Fc2NhbGF0ZVZpc2liaWxpdHkuamF2YQpAQCAtMCwwICsxLDYgQEAKK3B1YmxpYyBjbGFzcyBUZXN0IHsKKyAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRklSU1QgPSAiPHNlbGVjdGlvbj5wcmVmPC9zZWxlY3Rpb24+IjsKKyAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgU0VDT05EID0gInByZWYiOworfQorCitjbGFzcyBBbm90aGVyVGVzdCB7fQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VDb25zdGFudC9Fc2NhbGF0ZVZpc2liaWxpdHlfYWZ0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VDb25zdGFudC9Fc2NhbGF0ZVZpc2liaWxpdHlfYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNDY0ODNhCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZUNvbnN0YW50L0VzY2FsYXRlVmlzaWJpbGl0eV9hZnRlci5qYXZhCkBAIC0wLDAgKzEsOCBAQAorcHVibGljIGNsYXNzIFRlc3QgeworICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBGSVJTVCA9IEFub3RoZXJUZXN0Lnh4eDsKKyAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgU0VDT05EID0gQW5vdGhlclRlc3QueHh4OworfQorCitjbGFzcyBBbm90aGVyVGVzdCB7CisgICAgc3RhdGljIGZpbmFsIFN0cmluZyB4eHggPSAicHJlZiI7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZUNvbnN0YW50L0ZvcndhcmRSZWZlcmVuY2VzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlQ29uc3RhbnQvRm9yd2FyZFJlZmVyZW5jZXMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZWVkY2NkCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZUNvbnN0YW50L0ZvcndhcmRSZWZlcmVuY2VzLmphdmEKQEAgLTAsMCArMSw4IEBACitjbGFzcyBUZXN0IHsKKworICAgIHB1YmxpYyB2b2lkIGZvbygpeworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oPHNlbGVjdGlvbj5jb25zdDEuY2hhckF0KDApPC9zZWxlY3Rpb24+KTsKKyAgICB9CisKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBjb25zdDEgPSAiIjsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlQ29uc3RhbnQvRm9yd2FyZFJlZmVyZW5jZXNfYWZ0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VDb25zdGFudC9Gb3J3YXJkUmVmZXJlbmNlc19hZnRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFiNmRmNjQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlQ29uc3RhbnQvRm9yd2FyZFJlZmVyZW5jZXNfYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDkgQEAKK2NsYXNzIFRlc3QgeworCisgICAgcHVibGljIHZvaWQgZm9vKCl7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbih4eHgpOworICAgIH0KKworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIGNvbnN0MSA9ICIiOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgY2hhciB4eHggPSBjb25zdDEuY2hhckF0KDApOworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VDb25zdGFudC9Gcm9tRW51bUNvbnN0YW50SW5pdGlhbGl6ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VDb25zdGFudC9Gcm9tRW51bUNvbnN0YW50SW5pdGlhbGl6ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNDc3NjBmZAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VDb25zdGFudC9Gcm9tRW51bUNvbnN0YW50SW5pdGlhbGl6ZXIuamF2YQpAQCAtMCwwICsxLDEwIEBACitlbnVtIFRlc3RFbnVtIHsKKyAgT05FKCJ0ZTxjYXJldD5zdFN0cmluZyIpOworCisgIFRlc3RFbnVtKFN0cmluZyBzdHIpIHsKKyAgfQorICAKKyAgcHJpdmF0ZSBjbGFzcyBDb25zdGFudHMgeworICAgIHZvaWQgZm9vKCl7fQorICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZUNvbnN0YW50L0Zyb21FbnVtQ29uc3RhbnRJbml0aWFsaXplcjEuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VDb25zdGFudC9Gcm9tRW51bUNvbnN0YW50SW5pdGlhbGl6ZXIxLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTQzNDAxZAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VDb25zdGFudC9Gcm9tRW51bUNvbnN0YW50SW5pdGlhbGl6ZXIxLmphdmEKQEAgLTAsMCArMSwxMCBAQAorZW51bSBUZXN0RW51bSB7CisgIE9ORSgidGU8Y2FyZXQ+c3RTdHJpbmciKTsKKworICBUZXN0RW51bShTdHJpbmcgc3RyKSB7CisgIH0KKworICBwcml2YXRlIHN0YXRpYyBjbGFzcyBDb25zdGFudHMgeworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEZPTyA9ICIiOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZUNvbnN0YW50L0Zyb21FbnVtQ29uc3RhbnRJbml0aWFsaXplcjFfYWZ0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VDb25zdGFudC9Gcm9tRW51bUNvbnN0YW50SW5pdGlhbGl6ZXIxX2FmdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGI2NTczNQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VDb25zdGFudC9Gcm9tRW51bUNvbnN0YW50SW5pdGlhbGl6ZXIxX2FmdGVyLmphdmEKQEAgLTAsMCArMSwxMSBAQAorZW51bSBUZXN0RW51bSB7CisgIE9ORShDb25zdGFudHMueHh4KTsKKworICBUZXN0RW51bShTdHJpbmcgc3RyKSB7CisgIH0KKworICBwcml2YXRlIHN0YXRpYyBjbGFzcyBDb25zdGFudHMgeworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEZPTyA9ICIiOworICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgeHh4ID0gInRlc3RTdHJpbmciOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZUNvbnN0YW50L0Zyb21FbnVtQ29uc3RhbnRJbml0aWFsaXplcl9hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZUNvbnN0YW50L0Zyb21FbnVtQ29uc3RhbnRJbml0aWFsaXplcl9hZnRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEyYTJjYWEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlQ29uc3RhbnQvRnJvbUVudW1Db25zdGFudEluaXRpYWxpemVyX2FmdGVyLmphdmEKQEAgLTAsMCArMSwxNCBAQAorZW51bSBUZXN0RW51bSB7CisgIE9ORShDb25zdGFudHMxLnh4eCk7CisKKyAgVGVzdEVudW0oU3RyaW5nIHN0cikgeworICB9CisKKyAgICBwcml2YXRlIHN0YXRpYyBjbGFzcyBDb25zdGFudHMxIHsKKyAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgeHh4ID0gInRlc3RTdHJpbmciOworICAgIH0KKworICAgIHByaXZhdGUgY2xhc3MgQ29uc3RhbnRzIHsKKyAgICB2b2lkIGZvbygpe30KKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VDb25zdGFudC9Jbk5vbk5scy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZUNvbnN0YW50L0luTm9uTmxzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDlkMWFhMAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VDb25zdGFudC9Jbk5vbk5scy5qYXZhCkBAIC0wLDAgKzEsNiBAQAorcHVibGljIGNsYXNzIFhYWCB7CisgICAgdm9pZCBmKCkgeworICAgICAgICBTdHJpbmcgPGNhcmV0PnMxID0gImRkZGRkZCI7CisgICAgICAgIFN0cmluZyBzID0gczE7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZUNvbnN0YW50L0luTm9uTmxzX2FmdGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlQ29uc3RhbnQvSW5Ob25ObHNfYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMzk5OGY0Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZUNvbnN0YW50L0luTm9uTmxzX2FmdGVyLmphdmEKQEAgLTAsMCArMSwxMCBAQAoraW1wb3J0IG9yZy5qZXRicmFpbnMuYW5ub3RhdGlvbnMuTm9uTmxzOworCitwdWJsaWMgY2xhc3MgWFhYIHsKKyAgICBATm9uTmxzCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIHh4eCA9ICJkZGRkZGQiOworCisgICAgdm9pZCBmKCkgeworICAgICAgICBTdHJpbmcgcyA9IHh4eDsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlQ29uc3RhbnQvSW50cm9kdWNlQ29uc3RhbnRGcm9tVGhpc0NhbGwuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VDb25zdGFudC9JbnRyb2R1Y2VDb25zdGFudEZyb21UaGlzQ2FsbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRmZmNmMDYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlQ29uc3RhbnQvSW50cm9kdWNlQ29uc3RhbnRGcm9tVGhpc0NhbGwuamF2YQpAQCAtMCwwICsxLDggQEAKK2NsYXNzIFRlc3QgeworICAgICAgICBwdWJsaWMgVGVzdCgpIHsKKyAgICAgICAgICAgICAgICB0aGlzKDxzZWxlY3Rpb24+MTA8L3NlbGVjdGlvbj4pOworICAgICAgICB9CisKKyAgICAgICAgcHVibGljIFRlc3QoZmluYWwgaW50IGkpIHsKKyAgICAgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VDb25zdGFudC9JbnRyb2R1Y2VDb25zdGFudEZyb21UaGlzQ2FsbF9hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZUNvbnN0YW50L0ludHJvZHVjZUNvbnN0YW50RnJvbVRoaXNDYWxsX2FmdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjVhZDA3OQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VDb25zdGFudC9JbnRyb2R1Y2VDb25zdGFudEZyb21UaGlzQ2FsbF9hZnRlci5qYXZhCkBAIC0wLDAgKzEsMTAgQEAKK2NsYXNzIFRlc3QgeworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IHh4eCA9IDEwOworCisgICAgcHVibGljIFRlc3QoKSB7CisgICAgICAgICAgICAgICAgdGhpcyh4eHgpOworICAgICAgICB9CisKKyAgICAgICAgcHVibGljIFRlc3QoZmluYWwgaW50IGkpIHsKKyAgICAgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VDb25zdGFudC9QYXJ0aWFsU3RyaW5nTGl0ZXJhbC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZUNvbnN0YW50L1BhcnRpYWxTdHJpbmdMaXRlcmFsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDE2MWRjNAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VDb25zdGFudC9QYXJ0aWFsU3RyaW5nTGl0ZXJhbC5qYXZhCkBAIC0wLDAgKzEsNSBAQAorY2xhc3MgVGVzdHsKKyAgIHZvaWQgZm9vKCkgeworICAgICAgU3RyaW5nIHMgPSAiPHNlbGVjdGlvbj54eHg8L3NlbGVjdGlvbj55eiI7CisgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZUNvbnN0YW50L1BhcnRpYWxTdHJpbmdMaXRlcmFsQW5jaG9yLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlQ29uc3RhbnQvUGFydGlhbFN0cmluZ0xpdGVyYWxBbmNob3IuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNmY4OGZiCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZUNvbnN0YW50L1BhcnRpYWxTdHJpbmdMaXRlcmFsQW5jaG9yLmphdmEKQEAgLTAsMCArMSw0IEBACitwdWJsaWMgY2xhc3MgVGVzdHsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBGSVJTVCA9ICI8c2VsZWN0aW9uPnByZWY8L3NlbGVjdGlvbj4uRklSU1QiOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFNFQ09ORCA9ICJwcmVmLlNFQ09ORCI7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZUNvbnN0YW50L1BhcnRpYWxTdHJpbmdMaXRlcmFsQW5jaG9yX2FmdGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlQ29uc3RhbnQvUGFydGlhbFN0cmluZ0xpdGVyYWxBbmNob3JfYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZDU2YTRkCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZUNvbnN0YW50L1BhcnRpYWxTdHJpbmdMaXRlcmFsQW5jaG9yX2FmdGVyLmphdmEKQEAgLTAsMCArMSw1IEBACitwdWJsaWMgY2xhc3MgVGVzdHsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyB4eHggPSAicHJlZiI7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRklSU1QgPSB4eHggKyAiLkZJUlNUIjsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBTRUNPTkQgPSB4eHggKyAiLlNFQ09ORCI7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZUNvbnN0YW50L1BhcnRpYWxTdHJpbmdMaXRlcmFsUXVhbGlmaWVkLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlQ29uc3RhbnQvUGFydGlhbFN0cmluZ0xpdGVyYWxRdWFsaWZpZWQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NGY2OTVlCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZUNvbnN0YW50L1BhcnRpYWxTdHJpbmdMaXRlcmFsUXVhbGlmaWVkLmphdmEKQEAgLTAsMCArMSw4IEBACitwdWJsaWMgY2xhc3MgVGVzdHsKKyAgIHZvaWQgZm9vKCkgeworICAgICAgU3RyaW5nIHMgPSAiPHNlbGVjdGlvbj54eHg8L3NlbGVjdGlvbj55eiI7CisgICB9CisKKyAgIHN0YXRpYyBjbGFzcyBEIHsKKyAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlQ29uc3RhbnQvUGFydGlhbFN0cmluZ0xpdGVyYWxRdWFsaWZpZWRfYWZ0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VDb25zdGFudC9QYXJ0aWFsU3RyaW5nTGl0ZXJhbFF1YWxpZmllZF9hZnRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYzZjBhNTYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlQ29uc3RhbnQvUGFydGlhbFN0cmluZ0xpdGVyYWxRdWFsaWZpZWRfYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDkgQEAKK3B1YmxpYyBjbGFzcyBUZXN0eworICAgdm9pZCBmb28oKSB7CisgICAgICBTdHJpbmcgcyA9IEQueHh4ICsgInl6IjsKKyAgIH0KKworICAgc3RhdGljIGNsYXNzIEQgeworICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIHh4eCA9ICJ4eHgiOworICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VDb25zdGFudC9QYXJ0aWFsU3RyaW5nTGl0ZXJhbF9hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZUNvbnN0YW50L1BhcnRpYWxTdHJpbmdMaXRlcmFsX2FmdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTFiZGExYwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VDb25zdGFudC9QYXJ0aWFsU3RyaW5nTGl0ZXJhbF9hZnRlci5qYXZhCkBAIC0wLDAgKzEsNyBAQAorY2xhc3MgVGVzdHsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyB4eHggPSAieHh4IjsKKworICAgIHZvaWQgZm9vKCkgeworICAgICAgU3RyaW5nIHMgPSB4eHggKyAieXoiOworICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VDb25zdGFudC9SZXN1bHRlZFR5cGUuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VDb25zdGFudC9SZXN1bHRlZFR5cGUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMjk3MDJhCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZUNvbnN0YW50L1Jlc3VsdGVkVHlwZS5qYXZhCkBAIC0wLDAgKzEsNiBAQAorY2xhc3MgVGVzdCB7CisgIHZvaWQgZm9vKCkgeworICAgIGNsYXNzIEMge30KKyAgICBDIGM8Y2FyZXQ+YzsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VDb25zdGFudC9SZXN1bHRlZFR5cGVXaGVuTm9uTG9jYWwuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VDb25zdGFudC9SZXN1bHRlZFR5cGVXaGVuTm9uTG9jYWwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YjM2NzA3Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZUNvbnN0YW50L1Jlc3VsdGVkVHlwZVdoZW5Ob25Mb2NhbC5qYXZhCkBAIC0wLDAgKzEsNyBAQAorY2xhc3MgVGVzdCB7CisgIGNsYXNzIEMge30KKworICB2b2lkIGZvbygpIHsKKyAgICBDIGM8Y2FyZXQ+YzsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VGaWVsZC9hZnRlcjEuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VGaWVsZC9hZnRlcjEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMzNlZGVhCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZUZpZWxkL2FmdGVyMS5qYXZhCkBAIC0wLDAgKzEsOCBAQAorY2xhc3MgSW5TdGF0aWNJbml0aWFsaXplciB7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgeCA9ICJIZWxsbyBXb3JsZCI7CisKKyAgICBzdGF0aWMgeworCQlTeXN0ZW0ub3V0LnByaW50bG4oeCk7CisgICAgfQorICAgIC8vRmllbGQgbXVzdCBiZSBwbGFjZWQgYmVmb3JlIGluaXRpYWxpemVyIG9yIGlsbGVnYWwgZm9yd2FyZCByZWZlcmVuY2Ugd2lsbCBoYXBwZW4KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlRmllbGQvYWZ0ZXJCZWZvcmVFeGlzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZUZpZWxkL2FmdGVyQmVmb3JlRXhpc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMzk2YzQxCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZUZpZWxkL2FmdGVyQmVmb3JlRXhpc3QuamF2YQpAQCAtMCwwICsxLDEzIEBACitpbXBvcnQgb3JnLmp1bml0Lio7CitwdWJsaWMgY2xhc3MgVCB7CisgICAgcHJpdmF0ZSBpbnQgaTsKKworICAgIEBUZXN0CisgICAgcHVibGljIHZvaWQgdGVzdCgpIHsKKyAgICB9CisKKyAgICBAQmVmb3JlCisgICAgcHVibGljIHZvaWQgc2V0VXAoKXsKKyAgICAgICAgaSA9IDk7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VGaWVsZC9hZnRlckJlZm9yZUV4aXN0Tm9uQW5ub3RhdGVkLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlRmllbGQvYWZ0ZXJCZWZvcmVFeGlzdE5vbkFubm90YXRlZC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEzOTZjNDEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlRmllbGQvYWZ0ZXJCZWZvcmVFeGlzdE5vbkFubm90YXRlZC5qYXZhCkBAIC0wLDAgKzEsMTMgQEAKK2ltcG9ydCBvcmcuanVuaXQuKjsKK3B1YmxpYyBjbGFzcyBUIHsKKyAgICBwcml2YXRlIGludCBpOworCisgICAgQFRlc3QKKyAgICBwdWJsaWMgdm9pZCB0ZXN0KCkgeworICAgIH0KKworICAgIEBCZWZvcmUKKyAgICBwdWJsaWMgdm9pZCBzZXRVcCgpeworICAgICAgICBpID0gOTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZUZpZWxkL2FmdGVyQmVmb3JlTm90RXhpc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VGaWVsZC9hZnRlckJlZm9yZU5vdEV4aXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWYxYTUyNgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VGaWVsZC9hZnRlckJlZm9yZU5vdEV4aXN0LmphdmEKQEAgLTAsMCArMSwxMyBAQAoraW1wb3J0IG9yZy5qdW5pdC4qOworcHVibGljIGNsYXNzIFQgeworICAgIHByaXZhdGUgaW50IGk7CisKKyAgICBAQmVmb3JlCisgICAgcHVibGljIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgaSA9IDk7CisgICAgfQorCisgICAgQFRlc3QKKyAgICBwdWJsaWMgdm9pZCB0ZXN0KCkgeworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlRmllbGQvYWZ0ZXJCZWZvcmVOb3RFeGlzdDEuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VGaWVsZC9hZnRlckJlZm9yZU5vdEV4aXN0MS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlhZDBhM2YKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlRmllbGQvYWZ0ZXJCZWZvcmVOb3RFeGlzdDEuamF2YQpAQCAtMCwwICsxLDE0IEBACitpbXBvcnQgb3JnLmp1bml0LkJlZm9yZTsKK2ltcG9ydCBvcmcuanVuaXQuVGVzdDsKK3B1YmxpYyBjbGFzcyBUIHsKKyAgICBwcml2YXRlIGludCBpOworCisgICAgQEJlZm9yZQorICAgIHB1YmxpYyB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIGkgPSA5OworICAgIH0KKworICAgIEBUZXN0CisgICAgcHVibGljIHZvaWQgdGVzdCgpIHsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZUZpZWxkL2FmdGVyRWxzZUNsYXVzZS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZUZpZWxkL2FmdGVyRWxzZUNsYXVzZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBhMWE4NTUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlRmllbGQvYWZ0ZXJFbHNlQ2xhdXNlLmphdmEKQEAgLTAsMCArMSwxNCBAQAorY2xhc3MgQSB7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgdGVzdDI7CisKKyAgICBwdWJsaWMgdm9pZCBkZW1vKFN0cmluZyB2YWwpeworICAgICAgICBpZiAoInRlc3QxIi5lcXVhbHModmFsKSl7CisgICAgICAgICAgICAvL2RvIHNvbWV0aGlnbgorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgdGVzdDIgPSAidGVzdDIiOworICAgICAgICAgICAgaWYgKHRlc3QyLmVxdWFscyh2YWwpKSB7CisgICAgICAgICAgICAgICAgLy8uLi4gc29tZXRoaW5nIGVsc2UKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VGaWVsZC9hZnRlckVuY2xvc2luZ0Fub255bW91cy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZUZpZWxkL2FmdGVyRW5jbG9zaW5nQW5vbnltb3VzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGQ2ZDhlNwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VGaWVsZC9hZnRlckVuY2xvc2luZ0Fub255bW91cy5qYXZhCkBAIC0wLDAgKzEsMTMgQEAKK2NsYXNzIFRlc3RSZWZhY3RvcmluZyB7CisgICAgcHVibGljIGZpbmFsIEludGVnZXIgaW50ZWdlcjsKKworICAgIHB1YmxpYyBUZXN0UmVmYWN0b3JpbmcoKSB7CisgICAgICAgIGludGVnZXIgPSBuZXcgSW50ZWdlcigiMCIpOworICAgICAgICBSdW5uYWJsZSByID0gbmV3IFJ1bm5hYmxlKCkgeworICAgICAgICAgICAgQE92ZXJyaWRlCisgICAgICAgICAgICBwdWJsaWMgdm9pZCBydW4oKSB7CisgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKGludGVnZXIpOworICAgICAgICAgICAgfQorICAgICAgICB9OworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlRmllbGQvYWZ0ZXJGb3JjZWRGaWVsZFR5cGUuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VGaWVsZC9hZnRlckZvcmNlZEZpZWxkVHlwZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhiY2FjODYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlRmllbGQvYWZ0ZXJGb3JjZWRGaWVsZFR5cGUuamF2YQpAQCAtMCwwICsxLDcgQEAKK3B1YmxpYyBjbGFzcyBGaWVsZFRlc3QgeworICAgIHB1YmxpYyBmaW5hbCBpbnQgaW50ZWdlcjsKKworICAgIHZvaWQgZm9vKCkgeworICAgICAgICBpbnRlZ2VyID0gbmV3IEludGVnZXIoMCk7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VGaWVsZC9hZnRlckZyb21MYW1iZGFFeHByLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlRmllbGQvYWZ0ZXJGcm9tTGFtYmRhRXhwci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZlMGQyZGEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlRmllbGQvYWZ0ZXJGcm9tTGFtYmRhRXhwci5qYXZhCkBAIC0wLDAgKzEsMTQgQEAKK2ludGVyZmFjZSBTQU08WD4geworICAgICAgICBYIG0oaW50IGksIGludCBqKTsKKyAgICB9CisKK2NsYXNzIEZvbyB7CisgICAgcHVibGljIGZpbmFsIGludCBhbkludCA9IDA7CisKKyAgICB2b2lkIHRlc3QoKSB7CisgICAgICAgIG0oKGksIGopIC0+IHsKKyAgICAgICAgICAgIHJldHVybiBpICsgajsKKyAgICAgICAgfSk7CisgICAgfQorICAgIHZvaWQgbShTQU08SW50ZWdlcj4gcykgeyB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZUZpZWxkL2FmdGVySW5TZXRVcC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZUZpZWxkL2FmdGVySW5TZXRVcC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNmZjA3ZGQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlRmllbGQvYWZ0ZXJJblNldFVwLmphdmEKQEAgLTAsMCArMSwxMiBAQAoraW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKK3B1YmxpYyBjbGFzcyBUIGV4dGVuZHMgVGVzdENhc2UgeworICAgIHByaXZhdGUgaW50IGk7CisKKyAgICBwdWJsaWMgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICBzdXBlci5zZXRVcCgpOworICAgICAgICBpID0gOTsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCB0ZXN0KCkgeworICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VGaWVsZC9hZnRlckluaXRpYWxseUluU2V0VXAuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VGaWVsZC9hZnRlckluaXRpYWxseUluU2V0VXAuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ODA5MGQ4Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZUZpZWxkL2FmdGVySW5pdGlhbGx5SW5TZXRVcC5qYXZhCkBAIC0wLDAgKzEsOCBAQAoraW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKK3B1YmxpYyBjbGFzcyBUIGV4dGVuZHMgVGVzdENhc2UgeworICAgIHByaXZhdGUgaW50IGk7CisKKyAgICBwdWJsaWMgdm9pZCBzZXRVcCgpIHsKKyAgICAgICAgaSA9IDk7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZUZpZWxkL2FmdGVyTG9jYWxWYXJBbm5vdGF0aW9ucy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZUZpZWxkL2FmdGVyTG9jYWxWYXJBbm5vdGF0aW9ucy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkxMWUyZTMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlRmllbGQvYWZ0ZXJMb2NhbFZhckFubm90YXRpb25zLmphdmEKQEAgLTAsMCArMSw3IEBACitjbGFzcyBUZXN0IHsKKyAgICBARGVwcmVjYXRlZAorICAgIHB1YmxpYyBmaW5hbCBTdHJpbmcgc3RyaW5nID0gIiI7CisKKyAgICB2b2lkIGZvbygpIHsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZUZpZWxkL2FmdGVyT25DbGFzc0xldmVsQmluYXJ5LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlRmllbGQvYWZ0ZXJPbkNsYXNzTGV2ZWxCaW5hcnkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNzgwMGJiCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZUZpZWxkL2FmdGVyT25DbGFzc0xldmVsQmluYXJ5LmphdmEKQEAgLTAsMCArMSwzIEBACitjbGFzcyBUZXN0IHsKKyAgICBwdWJsaWMgZmluYWwgaW50IGFuSW50ID0gMiArIDI7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZUZpZWxkL2FmdGVyT25DbGFzc0xldmVsQ2xhc3NGb3JOYW1lLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlRmllbGQvYWZ0ZXJPbkNsYXNzTGV2ZWxDbGFzc0Zvck5hbWUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNDAzNjFlCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZUZpZWxkL2FmdGVyT25DbGFzc0xldmVsQ2xhc3NGb3JOYW1lLmphdmEKQEAgLTAsMCArMSw3IEBACitjbGFzcyBUZXN0IHsKKyAgICBwdWJsaWMgZmluYWwgQ2xhc3M8Pz4gYUNsYXNzID0gQ2xhc3MuZm9yTmFtZShUZXN0LmNsYXNzLmdldE5hbWUpOworCisgICAgdm9pZCBmb28oKSB7CisgICAgICBDbGFzcyBjbGF6eiA9IGFDbGFzczsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZUZpZWxkL2FmdGVyT25DbGFzc0xldmVsRHVwbGljYXRlcy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZUZpZWxkL2FmdGVyT25DbGFzc0xldmVsRHVwbGljYXRlcy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjViNGE5ZWYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlRmllbGQvYWZ0ZXJPbkNsYXNzTGV2ZWxEdXBsaWNhdGVzLmphdmEKQEAgLTAsMCArMSw1IEBACitjbGFzcyBUZXN0IHsKKyAgICBwdWJsaWMgZmluYWwgaW50IGFuSW50ID0gSW50ZWdlci5wYXJzZUludCgiIik7CisKKyAgICB2b2lkIGZvbygpIHtpbnQgaSA9IGFuSW50O30KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlRmllbGQvYWZ0ZXJPbkNsYXNzTGV2ZWxEdXBsaWNhdGVzMS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZUZpZWxkL2FmdGVyT25DbGFzc0xldmVsRHVwbGljYXRlczEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YjM5NzY1Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZUZpZWxkL2FmdGVyT25DbGFzc0xldmVsRHVwbGljYXRlczEuamF2YQpAQCAtMCwwICsxLDQgQEAKK2NsYXNzIFRlc3QgeworICAgIHB1YmxpYyBmaW5hbCBpbnQgYW5JbnQgPSBJbnRlZ2VyLnBhcnNlSW50KCIiKTsKKyAgICBpbnQgaSA9IGFuSW50OworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VGaWVsZC9hZnRlck9uQ2xhc3NMZXZlbE5ld0V4cHJlc3Npb24uamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VGaWVsZC9hZnRlck9uQ2xhc3NMZXZlbE5ld0V4cHJlc3Npb24uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOTM2NjA5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZUZpZWxkL2FmdGVyT25DbGFzc0xldmVsTmV3RXhwcmVzc2lvbi5qYXZhCkBAIC0wLDAgKzEsNyBAQAorY2xhc3MgVGVzdCB7CisgICAgcHVibGljIGZpbmFsIEludGVnZXIgaW50ZWdlciA9IG5ldyBJbnRlZ2VyKDApOworCisgIHZvaWQgZm9vKCkgeworICAgIEludGVnZXIgaSA9IGludGVnZXI7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlRmllbGQvYWZ0ZXJPbkNsYXNzTGV2ZWxOb0R1cGxpY2F0ZXMuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VGaWVsZC9hZnRlck9uQ2xhc3NMZXZlbE5vRHVwbGljYXRlcy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgzZTliZmEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlRmllbGQvYWZ0ZXJPbkNsYXNzTGV2ZWxOb0R1cGxpY2F0ZXMuamF2YQpAQCAtMCwwICsxLDMgQEAKK2NsYXNzIFRlc3QgeworICAgIHB1YmxpYyBmaW5hbCBpbnQgYW5JbnQgPSBJbnRlZ2VyLnBhcnNlSW50KCIiKTsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlRmllbGQvYWZ0ZXJPcmRlckluU2V0dXAuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VGaWVsZC9hZnRlck9yZGVySW5TZXR1cC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE3MzFhZDgKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlRmllbGQvYWZ0ZXJPcmRlckluU2V0dXAuamF2YQpAQCAtMCwwICsxLDE2IEBACitpbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOworcHVibGljIGNsYXNzIFQgZXh0ZW5kcyBUZXN0Q2FzZSB7CisgICAgcHJpdmF0ZSBTdHJpbmcgaTsKKworICAgIHB1YmxpYyB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIGkgPSBnZXROYW1lKCk7CisgICAgICAgIG15TmFtZSA9ICIgc2Vjb25kICIgKyBpOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIHRlc3QoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICB9CisKKyAgICBwcml2YXRlIFN0cmluZyBnZXROYW1lKCkgeworICAgICAgICByZXR1cm4gbnVsbDsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlRmllbGQvYWZ0ZXJPdXRlckNsYXNzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlRmllbGQvYWZ0ZXJPdXRlckNsYXNzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWVlNjk4ZgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VGaWVsZC9hZnRlck91dGVyQ2xhc3MuamF2YQpAQCAtMCwwICsxLDE2IEBACitwdWJsaWMgY2xhc3MgRmllbGRUZXN0IHsKKyAgICBwcml2YXRlIE9iamVjdCBjb21ib0JveDsKKworICAgIHByaXZhdGUgY2xhc3MgTm9TZWxlY3Rpb25Db21ib0l0ZW0geworICAgICAgICBwdWJsaWMgZmluYWwgT2JqZWN0IGNvbWJvQm94OworCisgICAgICAgIHByaXZhdGUgTm9TZWxlY3Rpb25Db21ib0l0ZW0oKSB7CisgICAgICAgICAgICBjb21ib0JveCA9IEZpZWxkVGVzdC50aGlzLmNvbWJvQm94OworICAgICAgICB9CisKKyAgICAgICAgcHVibGljIFN0cmluZyBnZXRMYWJlbCgpIHsKKyAgICAgICAgICAgIE9iamVjdCBjb21ib0l0ZW0gPSBjb21ib0JveC5nZXRTZWxlY3RlZEl0ZW0oKTsKKyAgICAgICAgICAgIHJldHVybiBjb21ib0l0ZW0gPT0gdGhpcyA/ICI8UGxlYXNlIFNlbGVjdD4iIDogIjxCYWNrIHRvIG92ZXJ2aWV3PiI7CisgICAgICAgIH0KKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZUZpZWxkL2FmdGVyUHVibGljQmFzZUNsYXNzU2V0VXAuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VGaWVsZC9hZnRlclB1YmxpY0Jhc2VDbGFzc1NldFVwLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTE0ODIyMQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VGaWVsZC9hZnRlclB1YmxpY0Jhc2VDbGFzc1NldFVwLmphdmEKQEAgLTAsMCArMSwxOSBAQAoraW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKKworY2xhc3MgQmFzZSBleHRlbmRzIFRlc3RDYXNlIHsKKyAgICBwdWJsaWMgdm9pZCBzZXRVcCgpIHsKKyAgICAgICAgc3VwZXIuc2V0VXAoKTsKKyAgICB9Cit9CisKK3B1YmxpYyBjbGFzcyBUIGV4dGVuZHMgQmFzZSB7CisgICAgcHJpdmF0ZSBpbnQgaTsKKworICAgIHB1YmxpYyB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIHN1cGVyLnNldFVwKCk7CisgICAgICAgIGkgPSA5OworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIHRlc3QoKSB7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZUZpZWxkL2FmdGVyU3RhdGljRmllbGRJbklubmVyQ2xhc3MuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VGaWVsZC9hZnRlclN0YXRpY0ZpZWxkSW5Jbm5lckNsYXNzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWEzYzJhYQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VGaWVsZC9hZnRlclN0YXRpY0ZpZWxkSW5Jbm5lckNsYXNzLmphdmEKQEAgLTAsMCArMSw5IEBACitwdWJsaWMgY2xhc3MgQSB7CisgIHByaXZhdGUgc3RhdGljIGZpbmFsIGNsYXNzIElubmVyIHsKKyAgICAgIHB1YmxpYyBmaW5hbCBTdHJpbmcgc3RyaW5nOworCisgICAgICBwdWJsaWMgSW5uZXIoSW50ZWdlciBwYXJhbSkgeworICAgICAgICAgIHN0cmluZyA9IHBhcmFtLnRvU3RyaW5nKCk7CisgICAgIH0KKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZUZpZWxkL2FmdGVyVW5yZXNvbHZlZFJlZmVyZW5jZVRvTG9jYWxWYXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VGaWVsZC9hZnRlclVucmVzb2x2ZWRSZWZlcmVuY2VUb0xvY2FsVmFyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWRjMTQxZQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VGaWVsZC9hZnRlclVucmVzb2x2ZWRSZWZlcmVuY2VUb0xvY2FsVmFyLmphdmEKQEAgLTAsMCArMSwxMiBAQAoraW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CisKK3B1YmxpYyBjbGFzcyBUZXN0Cit7CisgICAgcHVibGljIGZpbmFsIEFycmF5TGlzdCBhcnJheUxpc3Q7CisKKyAgICBwdWJsaWMgVGVzdCgpCisgICAgeworICAgICAgICBhcnJheUxpc3QgPSBuZXcgQXJyYXlMaXN0KCk7CisgICAgfQorCit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlRmllbGQvYmVmb3JlMS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZUZpZWxkL2JlZm9yZTEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NzcxN2UzCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZUZpZWxkL2JlZm9yZTEuamF2YQpAQCAtMCwwICsxLDYgQEAKK2NsYXNzIEluU3RhdGljSW5pdGlhbGl6ZXIgeworICAgIHN0YXRpYyB7CisJCVN5c3RlbS5vdXQucHJpbnRsbig8c2VsZWN0aW9uPiJIZWxsbyBXb3JsZCI8L3NlbGVjdGlvbj4pOworICAgIH0KKyAgICAvL0ZpZWxkIG11c3QgYmUgcGxhY2VkIGJlZm9yZSBpbml0aWFsaXplciBvciBpbGxlZ2FsIGZvcndhcmQgcmVmZXJlbmNlIHdpbGwgaGFwcGVuCit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZUZpZWxkL2JlZm9yZUJlZm9yZUV4aXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlRmllbGQvYmVmb3JlQmVmb3JlRXhpc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMDY3ZWU3Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZUZpZWxkL2JlZm9yZUJlZm9yZUV4aXN0LmphdmEKQEAgLTAsMCArMSwxMCBAQAoraW1wb3J0IG9yZy5qdW5pdC4qOworcHVibGljIGNsYXNzIFQgeworICAgIEBUZXN0CisgICAgcHVibGljIHZvaWQgdGVzdCgpIHsKKyAgICAgICAgaW50IDxjYXJldD5pID0gOTsKKyAgICB9CisKKyAgICBAQmVmb3JlCisgICAgcHVibGljIHZvaWQgc2V0VXAoKXt9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZUZpZWxkL2JlZm9yZUJlZm9yZUV4aXN0Tm9uQW5ub3RhdGVkLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlRmllbGQvYmVmb3JlQmVmb3JlRXhpc3ROb25Bbm5vdGF0ZWQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZmI0YzYxCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZUZpZWxkL2JlZm9yZUJlZm9yZUV4aXN0Tm9uQW5ub3RhdGVkLmphdmEKQEAgLTAsMCArMSw5IEBACitpbXBvcnQgb3JnLmp1bml0Lio7CitwdWJsaWMgY2xhc3MgVCB7CisgICAgQFRlc3QKKyAgICBwdWJsaWMgdm9pZCB0ZXN0KCkgeworICAgICAgICBpbnQgPGNhcmV0PmkgPSA5OworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIHNldFVwKCl7fQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VGaWVsZC9iZWZvcmVCZWZvcmVOb3RFeGlzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZUZpZWxkL2JlZm9yZUJlZm9yZU5vdEV4aXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2U4OGMxMgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VGaWVsZC9iZWZvcmVCZWZvcmVOb3RFeGlzdC5qYXZhCkBAIC0wLDAgKzEsNyBAQAoraW1wb3J0IG9yZy5qdW5pdC4qOworcHVibGljIGNsYXNzIFQgeworICAgIEBUZXN0CisgICAgcHVibGljIHZvaWQgdGVzdCgpIHsKKyAgICAgICAgaW50IDxjYXJldD5pID0gOTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZUZpZWxkL2JlZm9yZUJlZm9yZU5vdEV4aXN0MS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZUZpZWxkL2JlZm9yZUJlZm9yZU5vdEV4aXN0MS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJlNGZjZDEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlRmllbGQvYmVmb3JlQmVmb3JlTm90RXhpc3QxLmphdmEKQEAgLTAsMCArMSw3IEBACitpbXBvcnQgb3JnLmp1bml0LlRlc3Q7CitwdWJsaWMgY2xhc3MgVCB7CisgICAgQFRlc3QKKyAgICBwdWJsaWMgdm9pZCB0ZXN0KCkgeworICAgICAgICBpbnQgPGNhcmV0PmkgPSA5OworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlRmllbGQvYmVmb3JlRWxzZUNsYXVzZS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZUZpZWxkL2JlZm9yZUVsc2VDbGF1c2UuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNGVmM2NiCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZUZpZWxkL2JlZm9yZUVsc2VDbGF1c2UuamF2YQpAQCAtMCwwICsxLDkgQEAKK2NsYXNzIEEgeworICAgIHB1YmxpYyB2b2lkIGRlbW8oU3RyaW5nIHZhbCl7CisgICAgICAgIGlmICgidGVzdDEiLmVxdWFscyh2YWwpKXsKKyAgICAgICAgICAgIC8vZG8gc29tZXRoaWduCisgICAgICAgIH0gZWxzZSBpZiAoPHNlbGVjdGlvbj4idGVzdDIiPC9zZWxlY3Rpb24+LmVxdWFscyh2YWwpKSB7CisgICAgICAgICAgICAvLy4uLiBzb21ldGhpbmcgZWxzZQorICAgICAgICB9CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZUZpZWxkL2JlZm9yZUVuY2xvc2luZ0Fub255bW91cy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZUZpZWxkL2JlZm9yZUVuY2xvc2luZ0Fub255bW91cy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg1MGRhOTQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlRmllbGQvYmVmb3JlRW5jbG9zaW5nQW5vbnltb3VzLmphdmEKQEAgLTAsMCArMSwxMSBAQAorY2xhc3MgVGVzdFJlZmFjdG9yaW5nIHsKKyAgICBwdWJsaWMgVGVzdFJlZmFjdG9yaW5nKCkgeworICAgICAgICBSdW5uYWJsZSByID0gbmV3IFJ1bm5hYmxlKCkgeworICAgICAgICAgICAgQE92ZXJyaWRlCisgICAgICAgICAgICBwdWJsaWMgdm9pZCBydW4oKSB7CisgICAgICAgICAgICAgICAgSW50ZWdlciB0bzxjYXJldD5GaWVsZCA9IG5ldyBJbnRlZ2VyKCIwIik7CisgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKHRvRmllbGQpOworICAgICAgICAgICAgfQorICAgICAgICB9OworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlRmllbGQvYmVmb3JlRm9yY2VkRmllbGRUeXBlLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlRmllbGQvYmVmb3JlRm9yY2VkRmllbGRUeXBlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGU5YzM0MAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VGaWVsZC9iZWZvcmVGb3JjZWRGaWVsZFR5cGUuamF2YQpAQCAtMCwwICsxLDUgQEAKK3B1YmxpYyBjbGFzcyBGaWVsZFRlc3QgeworICAgIHZvaWQgZm9vKCkgeworICAgICAgICBJbnRlZ2VyIDxzZWxlY3Rpb24+aWk8L3NlbGVjdGlvbj4gPSBuZXcgSW50ZWdlcigwKTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZUZpZWxkL2JlZm9yZUZyb21MYW1iZGFFeHByLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlRmllbGQvYmVmb3JlRnJvbUxhbWJkYUV4cHIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNmU5NjdmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZUZpZWxkL2JlZm9yZUZyb21MYW1iZGFFeHByLmphdmEKQEAgLTAsMCArMSwxMyBAQAoraW50ZXJmYWNlIFNBTTxYPiB7CisgICAgICAgIFggbShpbnQgaSwgaW50IGopOworICAgIH0KKworY2xhc3MgRm9vIHsgIAorICAgIHZvaWQgdGVzdCgpIHsKKyAgICAgICAgbSgoaSwgaikgLT4geworICAgICAgICAgIDxzZWxlY3Rpb24+MDwvc2VsZWN0aW9uPgorICAgICAgICAgIHJldHVybiBpICsgajsKKyAgICAgICAgfSk7CisgICAgfQorICAgIHZvaWQgbShTQU08SW50ZWdlcj4gcykgeyB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZUZpZWxkL2JlZm9yZUluU2V0VXAuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VGaWVsZC9iZWZvcmVJblNldFVwLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2M5NmIzNAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VGaWVsZC9iZWZvcmVJblNldFVwLmphdmEKQEAgLTAsMCArMSw2IEBACitpbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOworcHVibGljIGNsYXNzIFQgZXh0ZW5kcyBUZXN0Q2FzZSB7CisgICAgcHVibGljIHZvaWQgdGVzdCgpIHsKKyAgICAgICAgaW50IDxjYXJldD5pID0gOTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlRmllbGQvYmVmb3JlSW5pdGlhbGx5SW5TZXRVcC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZUZpZWxkL2JlZm9yZUluaXRpYWxseUluU2V0VXAuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMzczZWUzCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZUZpZWxkL2JlZm9yZUluaXRpYWxseUluU2V0VXAuamF2YQpAQCAtMCwwICsxLDYgQEAKK2ltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7CitwdWJsaWMgY2xhc3MgVCBleHRlbmRzIFRlc3RDYXNlIHsKKyAgICBwdWJsaWMgdm9pZCBzZXRVcCgpIHsKKyAgICAgICAgaW50IDxjYXJldD5pID0gOTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlRmllbGQvYmVmb3JlTG9jYWxWYXJBbm5vdGF0aW9ucy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZUZpZWxkL2JlZm9yZUxvY2FsVmFyQW5ub3RhdGlvbnMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMWRhZDNiCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZUZpZWxkL2JlZm9yZUxvY2FsVmFyQW5ub3RhdGlvbnMuamF2YQpAQCAtMCwwICsxLDUgQEAKK2NsYXNzIFRlc3QgeworICAgIHZvaWQgZm9vKCkgeworICAgICAgICBARGVwcmVjYXRlZCBTdHJpbmcgZjxjYXJldD5vID0gIiI7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VGaWVsZC9iZWZvcmVPbkNsYXNzTGV2ZWxCaW5hcnkuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VGaWVsZC9iZWZvcmVPbkNsYXNzTGV2ZWxCaW5hcnkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZmFhZmUzCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZUZpZWxkL2JlZm9yZU9uQ2xhc3NMZXZlbEJpbmFyeS5qYXZhCkBAIC0wLDAgKzEsMyBAQAorY2xhc3MgVGVzdCB7CisgIDIgPGNhcmV0PiArIDIKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlRmllbGQvYmVmb3JlT25DbGFzc0xldmVsQ2xhc3NGb3JOYW1lLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlRmllbGQvYmVmb3JlT25DbGFzc0xldmVsQ2xhc3NGb3JOYW1lLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmVkZjdmMwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VGaWVsZC9iZWZvcmVPbkNsYXNzTGV2ZWxDbGFzc0Zvck5hbWUuamF2YQpAQCAtMCwwICsxLDcgQEAKK2NsYXNzIFRlc3QgeworICAgIDxzZWxlY3Rpb24+Q2xhc3MuZm9yTmFtZShUZXN0LmNsYXNzLmdldE5hbWUpPC9zZWxlY3Rpb24+CisKKyAgICB2b2lkIGZvbygpIHsKKyAgICAgIENsYXNzIGNsYXp6ID0gQ2xhc3MuZm9yTmFtZShUZXN0LmNsYXNzLmdldE5hbWUpOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlRmllbGQvYmVmb3JlT25DbGFzc0xldmVsRHVwbGljYXRlcy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZUZpZWxkL2JlZm9yZU9uQ2xhc3NMZXZlbER1cGxpY2F0ZXMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMTg2NmU4Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZUZpZWxkL2JlZm9yZU9uQ2xhc3NMZXZlbER1cGxpY2F0ZXMuamF2YQpAQCAtMCwwICsxLDQgQEAKK2NsYXNzIFRlc3QgeworICBJbnRlZ2VyLnBhPGNhcmV0PnJzZUludCgiIikKKyAgdm9pZCBmb28oKSB7aW50IGkgPSBJbnRlZ2VyLnBhcnNlSW50KCIiKTt9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZUZpZWxkL2JlZm9yZU9uQ2xhc3NMZXZlbER1cGxpY2F0ZXMxLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlRmllbGQvYmVmb3JlT25DbGFzc0xldmVsRHVwbGljYXRlczEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43Njc5YzllNgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VGaWVsZC9iZWZvcmVPbkNsYXNzTGV2ZWxEdXBsaWNhdGVzMS5qYXZhCkBAIC0wLDAgKzEsNCBAQAorY2xhc3MgVGVzdCB7CisgIGludCBpID0gSW50ZWdlci5wYXJzZUludCgiIik7CisgIEludGVnZXIucGE8Y2FyZXQ+cnNlSW50KCIiKQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VGaWVsZC9iZWZvcmVPbkNsYXNzTGV2ZWxOZXdFeHByZXNzaW9uLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlRmllbGQvYmVmb3JlT25DbGFzc0xldmVsTmV3RXhwcmVzc2lvbi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUzOTUwNGIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlRmllbGQvYmVmb3JlT25DbGFzc0xldmVsTmV3RXhwcmVzc2lvbi5qYXZhCkBAIC0wLDAgKzEsNyBAQAorY2xhc3MgVGVzdCB7CisgIDxzZWxlY3Rpb24+bmV3IEludGVnZXIoMCk8L3NlbGVjdGlvbj4KKworICB2b2lkIGZvbygpIHsKKyAgICBJbnRlZ2VyIGkgPSBuZXcgSW50ZWdlcigwKTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VGaWVsZC9iZWZvcmVPbkNsYXNzTGV2ZWxOb0R1cGxpY2F0ZXMuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VGaWVsZC9iZWZvcmVPbkNsYXNzTGV2ZWxOb0R1cGxpY2F0ZXMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NzFiYjJlCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZUZpZWxkL2JlZm9yZU9uQ2xhc3NMZXZlbE5vRHVwbGljYXRlcy5qYXZhCkBAIC0wLDAgKzEsMyBAQAorY2xhc3MgVGVzdCB7CisgIEludGVnZXIucGE8Y2FyZXQ+cnNlSW50KCIiKQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VGaWVsZC9iZWZvcmVPcmRlckluU2V0dXAuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VGaWVsZC9iZWZvcmVPcmRlckluU2V0dXAuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMmE5ODVjCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZUZpZWxkL2JlZm9yZU9yZGVySW5TZXR1cC5qYXZhCkBAIC0wLDAgKzEsMTQgQEAKK2ltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7CitwdWJsaWMgY2xhc3MgVCBleHRlbmRzIFRlc3RDYXNlIHsKKyAgICBwdWJsaWMgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICBTdHJpbmcgbmE8Y2FyZXQ+bWUgPSBnZXROYW1lKCk7CisgICAgICAgIG15TmFtZSA9ICIgc2Vjb25kICIgKyBuYW1lOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIHRlc3QoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICB9CisKKyAgICBwcml2YXRlIFN0cmluZyBnZXROYW1lKCkgeworICAgICAgICByZXR1cm4gbnVsbDsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlRmllbGQvYmVmb3JlT3V0ZXJDbGFzcy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZUZpZWxkL2JlZm9yZU91dGVyQ2xhc3MuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMDVmYWE0Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZUZpZWxkL2JlZm9yZU91dGVyQ2xhc3MuamF2YQpAQCAtMCwwICsxLDEzIEBACitwdWJsaWMgY2xhc3MgRmllbGRUZXN0IHsKKyAgICBwcml2YXRlIE9iamVjdCBjb21ib0JveDsKKworICAgIHByaXZhdGUgY2xhc3MgTm9TZWxlY3Rpb25Db21ib0l0ZW0geworICAgICAgICBwcml2YXRlIE5vU2VsZWN0aW9uQ29tYm9JdGVtKCkgeworICAgICAgICB9CisKKyAgICAgICAgcHVibGljIFN0cmluZyBnZXRMYWJlbCgpIHsKKyAgICAgICAgICAgIE9iamVjdCBjb21ib0l0ZW0gPSA8c2VsZWN0aW9uPmNvbWJvQm94PC9zZWxlY3Rpb24+LmdldFNlbGVjdGVkSXRlbSgpOworICAgICAgICAgICAgcmV0dXJuIGNvbWJvSXRlbSA9PSB0aGlzID8gIjxQbGVhc2UgU2VsZWN0PiIgOiAiPEJhY2sgdG8gb3ZlcnZpZXc+IjsKKyAgICAgICAgfQorICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlRmllbGQvYmVmb3JlUHVibGljQmFzZUNsYXNzU2V0VXAuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VGaWVsZC9iZWZvcmVQdWJsaWNCYXNlQ2xhc3NTZXRVcC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU5MTJhZTEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlRmllbGQvYmVmb3JlUHVibGljQmFzZUNsYXNzU2V0VXAuamF2YQpAQCAtMCwwICsxLDEzIEBACitpbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOworCitjbGFzcyBCYXNlIGV4dGVuZHMgVGVzdENhc2UgeworICAgIHB1YmxpYyB2b2lkIHNldFVwKCkgeworICAgICAgICBzdXBlci5zZXRVcCgpOworICAgIH0KK30KKworcHVibGljIGNsYXNzIFQgZXh0ZW5kcyBCYXNlIHsKKyAgICBwdWJsaWMgdm9pZCB0ZXN0KCkgeworICAgICAgICBpbnQgPGNhcmV0PmkgPSA5OworICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VGaWVsZC9iZWZvcmVSZWplY3RJbnRyb2R1Y2VGaWVsZEZyb21FeHBySW5UaGlzQ2FsbC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZUZpZWxkL2JlZm9yZVJlamVjdEludHJvZHVjZUZpZWxkRnJvbUV4cHJJblRoaXNDYWxsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDA1NmU4YQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VGaWVsZC9iZWZvcmVSZWplY3RJbnRyb2R1Y2VGaWVsZEZyb21FeHBySW5UaGlzQ2FsbC5qYXZhCkBAIC0wLDAgKzEsNiBAQAorY2xhc3MgVGVzdCB7CisgIFRlc3QoU3RyaW5nIHMsIFN0cmluZyBzMSkge30KKyAgVGVzdChTdHJpbmcgcykgeworICAgIHRoaXMoPHNlbGVjdGlvbj5zPC9zZWxlY3Rpb24+LCBzKTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VGaWVsZC9iZWZvcmVTdGF0aWNGaWVsZEluSW5uZXJDbGFzcy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZUZpZWxkL2JlZm9yZVN0YXRpY0ZpZWxkSW5Jbm5lckNsYXNzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2UxYjllZgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VGaWVsZC9iZWZvcmVTdGF0aWNGaWVsZEluSW5uZXJDbGFzcy5qYXZhCkBAIC0wLDAgKzEsNyBAQAorcHVibGljIGNsYXNzIEEgeworICBwcml2YXRlIHN0YXRpYyBmaW5hbCBjbGFzcyBJbm5lciB7CisgICAgIHB1YmxpYyBJbm5lcihJbnRlZ2VyIHBhcmFtKSB7CisgICAgICAgIFN0cmluZyBzPGNhcmV0PnRyID0gcGFyYW0udG9TdHJpbmcoKTsKKyAgICAgfQorICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlRmllbGQvYmVmb3JlVW5yZXNvbHZlZFJlZmVyZW5jZVRvTG9jYWxWYXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VGaWVsZC9iZWZvcmVVbnJlc29sdmVkUmVmZXJlbmNlVG9Mb2NhbFZhci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJkMzRhNWQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlRmllbGQvYmVmb3JlVW5yZXNvbHZlZFJlZmVyZW5jZVRvTG9jYWxWYXIuamF2YQpAQCAtMCwwICsxLDEwIEBACitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKKworcHVibGljIGNsYXNzIFRlc3QKK3sKKyAgICBwdWJsaWMgVGVzdCgpCisgICAgeworICAgICAgICBhcnJheTxjYXJldD5MaXN0ID0gbmV3IEFycmF5TGlzdCgpOworICAgIH0KKworfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVBhcmFtZXRlci9hZnRlckFub255bW91c0NsYXNzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlUGFyYW1ldGVyL2FmdGVyQW5vbnltb3VzQ2xhc3MuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOGQ2NzQyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVBhcmFtZXRlci9hZnRlckFub255bW91c0NsYXNzLmphdmEKQEAgLTAsMCArMSwxMCBAQAorcHVibGljIGNsYXNzIFRlc3QgeworICBwdWJsaWMgVGVzdChpbnQgYW5PYmplY3QpIHsKKyAgICBpbnQgaSA9IGFuT2JqZWN0OworICB9CisKKyAgcHVibGljIFRlc3QgZ2V0KCkgeworICAgIHJldHVybiBuZXcgVGVzdCgwKSB7CisgICAgfQorICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVBhcmFtZXRlci9hZnRlckFycmF5SW5pdGlhbGl6ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VQYXJhbWV0ZXIvYWZ0ZXJBcnJheUluaXRpYWxpemVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWZkODdiYgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VQYXJhbWV0ZXIvYWZ0ZXJBcnJheUluaXRpYWxpemVyLmphdmEKQEAgLTAsMCArMSwxMCBAQAorY2xhc3MgVGVzdCB7CisgIHB1YmxpYyBzeW5jaHJvbml6ZWQgYm9vbGVhbiBmb28oU3RyaW5nIG1zZykgeworICAgIHJldHVybiBiYXIobmV3IFN0cmluZ1tde21lc3NhZ2V9KTsKKyAgfQorCisgIHByaXZhdGUgYm9vbGVhbiBiYXIoU3RyaW5nW10gYW5PYmplY3QpIHsKKyAgICBTdHJpbmdbXSBwYXJhbXMgPSBhbk9iamVjdDsKKyAgICByZXR1cm4gZmFsc2U7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlUGFyYW1ldGVyL2FmdGVyQ29uZmxpY3RpbmdGaWVsZC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVBhcmFtZXRlci9hZnRlckNvbmZsaWN0aW5nRmllbGQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MTA2ZmQ1Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVBhcmFtZXRlci9hZnRlckNvbmZsaWN0aW5nRmllbGQuamF2YQpAQCAtMCwwICsxLDI1IEBACitwdWJsaWMgY2xhc3MgVGVzdCB7CisgICAgcHVibGljIGludCBhbk9iamVjdDsKKyAgICBwdWJsaWMgdm9pZCBtZXRob2QoaW50IGFuT2JqZWN0KSB7CisgICAgfQorfQorCitwdWJsaWMgY2xhc3MgVGVzdDEgZXh0ZW5kcyBUZXN0IHsKKyAgICBwdWJsaWMgdm9pZCBtZXRob2QoaW50IGFuT2JqZWN0KSB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihhbk9iamVjdCk7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbih0aGlzLmFuT2JqZWN0KTsKKyAgICB9Cit9CisKK3B1YmxpYyBjbGFzcyBUZXN0MiBleHRlbmRzIFRlc3QxIHsKKyAgICBwdWJsaWMgdm9pZCBtZXRob2QoaW50IGFuT2JqZWN0KSB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbih0aGlzLmFuT2JqZWN0KTsKKyAgICB9Cit9CisKK3B1YmxpYyBjbGFzcyBVc2FnZSB7CisgICAgeworICAgICAgICBUZXN0IHQgPSBuZXcgVGVzdDIoKTsKKyAgICAgICAgdC5tZXRob2QoMSArIDIpOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlUGFyYW1ldGVyL2FmdGVyRGVsZWdhdGVXaXRoVmFyYXJncy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVBhcmFtZXRlci9hZnRlckRlbGVnYXRlV2l0aFZhcmFyZ3MuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ODIxYWRkCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVBhcmFtZXRlci9hZnRlckRlbGVnYXRlV2l0aFZhcmFyZ3MuamF2YQpAQCAtMCwwICsxLDkgQEAKK3B1YmxpYyBjbGFzcyBUZXN0IHsKKyAgICB2b2lkIG0oaW50Li4uIHBzKSB7CisgICAgICAgIG0oImFzZCIsIHBzKTsKKyAgICB9CisKKyAgICB2b2lkIG0oZmluYWwgU3RyaW5nIGFuT2JqZWN0LCBpbnQuLi4gcHMpIHsKKyAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oYW5PYmplY3QpOworICAgICAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVBhcmFtZXRlci9hZnRlckRpYW1vbmQyUmF3LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlUGFyYW1ldGVyL2FmdGVyRGlhbW9uZDJSYXcuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNmY3NjRmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVBhcmFtZXRlci9hZnRlckRpYW1vbmQyUmF3LmphdmEKQEAgLTAsMCArMSw2IEBACitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdAorY2xhc3MgVGVzdCB7CisgIHZvaWQgZm9vKGZpbmFsIEFycmF5TGlzdCBhbk9iamVjdCkgeworICAgIEFycmF5TGlzdCBsID0gYW5PYmplY3Q7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlUGFyYW1ldGVyL2FmdGVyRGlhbW9uZE9jY3VycmVuY2VzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlUGFyYW1ldGVyL2FmdGVyRGlhbW9uZE9jY3VycmVuY2VzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmIxMGJkNQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VQYXJhbWV0ZXIvYWZ0ZXJEaWFtb25kT2NjdXJyZW5jZXMuamF2YQpAQCAtMCwwICsxLDEzIEBACitpbXBvcnQgamF2YS51dGlsLio7CisKK2NsYXNzIFRlc3QgeworICB2b2lkIGZvbyhmaW5hbCBBcnJheUxpc3Q8U3RyaW5nPiBhbk9iamVjdCkgeworICAgIExpc3Q8U3RyaW5nPiBscyA9IGFuT2JqZWN0OworICAgIExpc3Q8U3RyaW5nPiBsc3MgPSBhbk9iamVjdDsKKyAgICBMaXN0PEludGVnZXI+IGxpID0gbmV3IEFycmF5TGlzdDw+KCk7CisgIH0KKyAgCisgIHZvaWQgYmFyKCkgeworICAgIGZvbyhuZXcgQXJyYXlMaXN0PFN0cmluZz4oKSk7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlUGFyYW1ldGVyL2FmdGVyRW5jbG9zaW5nV2l0aFBhcmFtRGVsZXRpb24uamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VQYXJhbWV0ZXIvYWZ0ZXJFbmNsb3NpbmdXaXRoUGFyYW1EZWxldGlvbi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEyMTYwMjYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlUGFyYW1ldGVyL2FmdGVyRW5jbG9zaW5nV2l0aFBhcmFtRGVsZXRpb24uamF2YQpAQCAtMCwwICsxLDI4IEBACisvKgorICogQ29weXJpZ2h0IDIwMDAtMjAxMSBKZXRCcmFpbnMgcy5yLm8uCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworY2xhc3MgQUFBQSB7CisgIHZvaWQgZm9vKCkgeworICAgIHNhbXBsZUVuY2xvc2luZygiQSIgKyAiIik7CisgIH0KKworICBwcml2YXRlIHZvaWQgc2FtcGxlRW5jbG9zaW5nKGZpbmFsIFN0cmluZyBhbk9iamVjdCkgeworICAgIG5ldyBBQUFBKCkgeworICAgICAgdm9pZCBiYXIoKSB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihhbk9iamVjdCk7CisgICAgICB9CisgICAgfS5iYXIoKTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVBhcmFtZXRlci9hZnRlckVudW1zLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlUGFyYW1ldGVyL2FmdGVyRW51bXMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YTQyMzk2Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVBhcmFtZXRlci9hZnRlckVudW1zLmphdmEKQEAgLTAsMCArMSw2IEBACitwdWJsaWMgZW51bSBFeworICBhKDIpLCBiKDIpOworICBwdWJsaWMgRShpbnQgYW5PYmplY3QpIHsKKyAgICBTeXN0ZW0ub3V0LnByaW50KGFuT2JqZWN0KTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VQYXJhbWV0ZXIvYWZ0ZXJFeHBlY3RlZFR5cGUuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VQYXJhbWV0ZXIvYWZ0ZXJFeHBlY3RlZFR5cGUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ODVmZWU4Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVBhcmFtZXRlci9hZnRlckV4cGVjdGVkVHlwZS5qYXZhCkBAIC0wLDAgKzEsMTIgQEAKK2NsYXNzIFRlc3QgeworICAgIHZvaWQgZiAoU3RyaW5nIHMpIHt9CisKKyAgICB2b2lkIHUoZmluYWwgU3RyaW5nIGFuT2JqZWN0KSB7CisgICAgICAgIGYoYW5PYmplY3QpOworICAgIH0KKworICAgIHZvaWQgeSAoKSB7CisgICAgICAgIFN0cmluZyBuYW1lID0gIiI7CisgICAgICAgIHUobmFtZSk7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVBhcmFtZXRlci9hZnRlckZpZWxkQWNjZXNzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlUGFyYW1ldGVyL2FmdGVyRmllbGRBY2Nlc3MuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMjVlMzY0Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVBhcmFtZXRlci9hZnRlckZpZWxkQWNjZXNzLmphdmEKQEAgLTAsMCArMSwxNCBAQAorY2xhc3MgVGVzdCB7CisgICAgaW50IG1ldGhvZChpbnQgYSwgaW50IGIsIGludCBhbk9iamVjdCkgeworICAgICAgICByZXR1cm4gYW5PYmplY3Q7CisgICAgfQorICAgIGludCBpOworfQorCitjbGFzcyBYVGVzdCB7CisgICAgaW50IG4oKSB7CisgICAgICAgIFRlc3QgdDsKKyAgICAgICAgCisgICAgICAgIHJldHVybiB0Lm1ldGhvZCgxLCAyLCB0LmkpOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlUGFyYW1ldGVyL2FmdGVyRmllbGRXaXRoR2V0dGVyUmVwbGFjZW1lbnQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VQYXJhbWV0ZXIvYWZ0ZXJGaWVsZFdpdGhHZXR0ZXJSZXBsYWNlbWVudC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZiYzk3NGIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlUGFyYW1ldGVyL2FmdGVyRmllbGRXaXRoR2V0dGVyUmVwbGFjZW1lbnQuamF2YQpAQCAtMCwwICsxLDE2IEBACitjbGFzcyBUZXN0IHsKKyAgICBpbnQgaTsKKyAgICAKKyAgICBwdWJsaWMgaW50IGdldEkoKSB7IHJldHVybiBpOyB9CisgICAgCisgICAgaW50IG1ldGhvZChpbnQgYSwgaW50IGFuT2JqZWN0KSB7CisgICAgICAgIHJldHVybiBhbk9iamVjdDsKKyAgICB9Cit9CisKK2NsYXNzIFhYWCB7CisgICAgcHVibGljIGludCBtKCkgeworICAgICAgICBUZXN0IHQ7CisgICAgICAgIHJldHVybiB0Lm1ldGhvZCgxLCAxICsgdC5nZXRJKCkpOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlUGFyYW1ldGVyL2FmdGVyRmllbGRXaXRoSW5hY2Nlc3NpYmxlR2V0dGVyUmVwbGFjZW1lbnQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VQYXJhbWV0ZXIvYWZ0ZXJGaWVsZFdpdGhJbmFjY2Vzc2libGVHZXR0ZXJSZXBsYWNlbWVudC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNlOTUzN2IKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlUGFyYW1ldGVyL2FmdGVyRmllbGRXaXRoSW5hY2Nlc3NpYmxlR2V0dGVyUmVwbGFjZW1lbnQuamF2YQpAQCAtMCwwICsxLDE2IEBACitjbGFzcyBUZXN0IHsKKyAgICBwdWJsaWMgaW50IGk7CisgICAgCisgICAgcHVibGljIGludCBnZXRJKCkgeyByZXR1cm4gaTsgfQorICAgIAorICAgIGludCBtZXRob2QoaW50IGEsIGludCBhbk9iamVjdCkgeworICAgICAgICByZXR1cm4gYW5PYmplY3Q7CisgICAgfQorfQorCitjbGFzcyBYWFggeworICAgIHB1YmxpYyBpbnQgbSgpIHsKKyAgICAgICAgVGVzdCB0OworICAgICAgICByZXR1cm4gdC5tZXRob2QoMSwgMSArIHQuaSk7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VQYXJhbWV0ZXIvYWZ0ZXJHZW5lcmF0ZURlbGVnYXRlLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlUGFyYW1ldGVyL2FmdGVyR2VuZXJhdGVEZWxlZ2F0ZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM3MTIyZGYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlUGFyYW1ldGVyL2FmdGVyR2VuZXJhdGVEZWxlZ2F0ZS5qYXZhCkBAIC0wLDAgKzEsMjIgQEAKK2NsYXNzIFRlc3QgeworICAgIHB1YmxpYyBpbnQgbShpbnQgYSwgaW50IGIpIHsKKyAgICAgICAgcmV0dXJuIG0oYSwgYiwgMCk7CisgICAgfQorCisgICAgcHVibGljIGludCBtKGludCBhLCBpbnQgYiwgaW50IGFuT2JqZWN0KSB7CisgICAgICAgIGlmKGEgPiBiKSB7CisgICAgICAgICAgIHJldHVybiBhbk9iamVjdDsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgcmV0dXJuIGFuT2JqZWN0OworICAgICAgICB9CisgICAgfQorfQorCitjbGFzcyBUZXN0MSB7CisgIFRlc3QgdDsKKworICBwdWJsaWMgaW50IG4oaW50IHYpIHsKKyAgICByZXR1cm4gdC5tKHYsIDEpOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVBhcmFtZXRlci9hZnRlckdlbmVyYXRlRGVsZWdhdGVJblN1cGVyQ2xhc3MuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VQYXJhbWV0ZXIvYWZ0ZXJHZW5lcmF0ZURlbGVnYXRlSW5TdXBlckNsYXNzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGFkZGViMgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VQYXJhbWV0ZXIvYWZ0ZXJHZW5lcmF0ZURlbGVnYXRlSW5TdXBlckNsYXNzLmphdmEKQEAgLTAsMCArMSwyMiBAQAorYWJzdHJhY3QgY2xhc3MgQSB7CisgICAgdm9pZCB4eHgoKSB7CisgICAgICAgIHh4eCgyMzkpOworICAgIH0KKworICAgIGFic3RyYWN0IHZvaWQgeHh4KGZpbmFsIGludCBhbk9iamVjdCk7Cit9CisKK2NsYXNzIEIgaW1wbGVtZW50cyBBIHsKKyAgICBwdWJsaWMgdm9pZCB4eHgoKSB7CisgICAgICAgIHh4eCgyMzkpOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIHh4eChmaW5hbCBpbnQgYW5PYmplY3QpIHsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oYW5PYmplY3QpOworICB9CisKKyAgc3RhdGljIHsKKyAgICBBIGEgPSBuZXcgQigpOworICAgIGEueHh4KCk7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlUGFyYW1ldGVyL2FmdGVyR2VuZXJhdGVEZWxlZ2F0ZUluU3VwZXJJbnRlcmZhY2UuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VQYXJhbWV0ZXIvYWZ0ZXJHZW5lcmF0ZURlbGVnYXRlSW5TdXBlckludGVyZmFjZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhlMWNiZjMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlUGFyYW1ldGVyL2FmdGVyR2VuZXJhdGVEZWxlZ2F0ZUluU3VwZXJJbnRlcmZhY2UuamF2YQpAQCAtMCwwICsxLDIwIEBACitpbnRlcmZhY2UgQSB7CisgICAgdm9pZCB4eHgoKTsKKworICAgIHZvaWQgeHh4KGZpbmFsIGludCBhbk9iamVjdCk7Cit9CisKK2NsYXNzIEIgaW1wbGVtZW50cyBBIHsKKyAgICBwdWJsaWMgdm9pZCB4eHgoKSB7CisgICAgICAgIHh4eCgyMzkpOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIHh4eChmaW5hbCBpbnQgYW5PYmplY3QpIHsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oYW5PYmplY3QpOworICB9CisKKyAgc3RhdGljIHsKKyAgICBBIGEgPSBuZXcgQigpOworICAgIGEueHh4KCk7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlUGFyYW1ldGVyL2FmdGVyR2VuZXJhdGVEZWxlZ2F0ZU5vQXJncy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVBhcmFtZXRlci9hZnRlckdlbmVyYXRlRGVsZWdhdGVOb0FyZ3MuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOWVmZDg2Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVBhcmFtZXRlci9hZnRlckdlbmVyYXRlRGVsZWdhdGVOb0FyZ3MuamF2YQpAQCAtMCwwICsxLDE3IEBACitjbGFzcyBUZXN0IHsKKyAgICBwdWJsaWMgaW50IG0oKSB7CisgICAgICAgIHJldHVybiBtKDApOworICAgIH0KKworICAgIHB1YmxpYyBpbnQgbShpbnQgYW5PYmplY3QpIHsKKyAgICAgICAgcmV0dXJuIGFuT2JqZWN0OworICAgIH0KK30KKworY2xhc3MgVGVzdDEgeworICBUZXN0IHQ7CisKKyAgcHVibGljIGludCBuKGludCB2KSB7CisgICAgcmV0dXJuIHQubSgpOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVBhcmFtZXRlci9hZnRlckdlbmVyYXRlRGVsZWdhdGVSZW1vdmVQYXJhbWV0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VQYXJhbWV0ZXIvYWZ0ZXJHZW5lcmF0ZURlbGVnYXRlUmVtb3ZlUGFyYW1ldGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTVlYjVlYwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VQYXJhbWV0ZXIvYWZ0ZXJHZW5lcmF0ZURlbGVnYXRlUmVtb3ZlUGFyYW1ldGVyLmphdmEKQEAgLTAsMCArMSw5IEBACitwdWJsaWMgY2xhc3MgQmFyIHsKKyAgICBwdWJsaWMgaW50IGJheihieXRlIGJsYWgpIHsKKyAgICAgICAgcmV0dXJuIGJheihibGFoICsgYmxhaCArIDMpOworICAgIH0KKworICAgIHB1YmxpYyBpbnQgYmF6KGludCBhbk9iamVjdCkgeworICAgICAgICByZXR1cm4gPGNhcmV0PmFuT2JqZWN0OworICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VQYXJhbWV0ZXIvYWZ0ZXJHZXR0ZXJRdWFsaWZpZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VQYXJhbWV0ZXIvYWZ0ZXJHZXR0ZXJRdWFsaWZpZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMGNlOGMxCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVBhcmFtZXRlci9hZnRlckdldHRlclF1YWxpZmllci5qYXZhCkBAIC0wLDAgKzEsMjMgQEAKK3B1YmxpYyBjbGFzcyBUZXN0IHsKKyAgICBwcml2YXRlIFN0cmluZyBteVN0cjsKKworICAgIHB1YmxpYyBTdHJpbmcgZ2V0TXlTdHIoKSB7CisgICAgICAgIHJldHVybiBteVN0cjsKKyAgICB9CisKKyAgICB2b2lkIGZvbyhTdHJpbmcgYW5PYmplY3QpIHsKKyAgICAgICAgbmV3IFJ1bm5hYmxlKCl7CisgICAgICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKKyAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihhbk9iamVjdCk7CisgICAgICAgICAgICB9CisgICAgICAgIH07CisgICAgfQorfQorCitjbGFzcyBYIHsKKyAgIHB1YmxpYyB2b2lkIG4oKSB7CisgICAgICAgZmluYWwgVGVzdCB0ZXN0ID0gbmV3IFRlc3QoKTsKKyAgICAgICB0ZXN0LmZvbyh0ZXN0LmdldE15U3RyKCkpOworICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VQYXJhbWV0ZXIvYWZ0ZXJJbXBsaWNpdERlZmF1bHRDb25zdHJ1Y3Rvci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVBhcmFtZXRlci9hZnRlckltcGxpY2l0RGVmYXVsdENvbnN0cnVjdG9yLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGMxZmY4MQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VQYXJhbWV0ZXIvYWZ0ZXJJbXBsaWNpdERlZmF1bHRDb25zdHJ1Y3Rvci5qYXZhCkBAIC0wLDAgKzEsMTYgQEAKK2NsYXNzIEEgeworICAgIGludCBpOworICAgIHB1YmxpYyBBKGludCBhbk9iamVjdCkgeworICAgICAgICBpID0gYW5PYmplY3Q7CisgICAgfQorfQorCitjbGFzcyBCIGV4dGVuZHMgQSB7CisgICAgQigpIHsKKyAgICAgICAgc3VwZXIoMjcpOworICAgIH0KK30KKworY2xhc3MgVXNhZ2UgeworICAgIEEgYSA9IG5ldyBCKCk7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVBhcmFtZXRlci9hZnRlckltcGxpY2l0U3VwZXJDYWxsLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlUGFyYW1ldGVyL2FmdGVySW1wbGljaXRTdXBlckNhbGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZjBkNmVmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVBhcmFtZXRlci9hZnRlckltcGxpY2l0U3VwZXJDYWxsLmphdmEKQEAgLTAsMCArMSwxOSBAQAorY2xhc3MgQSB7CisgICAgaW50IGk7CisgICAgcHVibGljIEEoaW50IGFuT2JqZWN0KSB7CisgICAgICAgIGkgPSBhbk9iamVjdDsKKyAgICB9Cit9CisKK2NsYXNzIEIgZXh0ZW5kcyBBIHsKKyAgICBpbnQgazsKKworICAgIHB1YmxpYyBCKCkgeworICAgICAgICBzdXBlcigyNyk7CisgICAgICAgIGsgPSAxMDsKKyAgICB9Cit9CisKK2NsYXNzIFVzYWdlIHsKKyAgICBBIGEgPSBuZXcgQigpOworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VQYXJhbWV0ZXIvYWZ0ZXJJbmNvbXBsZXRlRW51bURlZmluaXRpb24uamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VQYXJhbWV0ZXIvYWZ0ZXJJbmNvbXBsZXRlRW51bURlZmluaXRpb24uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43Nzk2YjM0Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVBhcmFtZXRlci9hZnRlckluY29tcGxldGVFbnVtRGVmaW5pdGlvbi5qYXZhCkBAIC0wLDAgKzEsMTAgQEAKK2VudW0gVGVzdCB7CisgIFJvb3QocG9zaXRpb24gKyAiIik7CisKKyAgcHVibGljIFRlc3QoU3RyaW5nIGRlc2NyaXB0aW9uLCBTdHJpbmcgYW5PYmplY3QpIHsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oZGVzY3JpcHRpb24pOworICAgIFN5c3RlbS5vdXQucHJpbnRsbihhbk9iamVjdCk7CisgIH0KKworfQorCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlUGFyYW1ldGVyL2FmdGVySW5jb3JyZWN0U2NvcGUuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VQYXJhbWV0ZXIvYWZ0ZXJJbmNvcnJlY3RTY29wZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE3MmUxYjEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlUGFyYW1ldGVyL2FmdGVySW5jb3JyZWN0U2NvcGUuamF2YQpAQCAtMCwwICsxLDE3IEBACitwdWJsaWMgY2xhc3MgSW5uZXJPdXRlciB7CisgIFN0cmluZyBhbk9iamVjdCA9ICIiOworCisgIGludGVyZmFjZSBJbm5lciB7CisgICAgdm9pZCBleGVjKGZpbmFsIFN0cmluZyBhbk9iamVjdCk7CisgIH0KKworICBJbm5lciBpbnN0YW5jZSA9IG5ldyBJbm5lcigpIHsKKyAgICBwdWJsaWMgdm9pZCBleGVjKGZpbmFsIFN0cmluZyBhbk9iamVjdCkgeworICAgICAgYW5PYmplY3QuY2hhckF0KDEpOworICAgIH0KKyAgfTsKKworICB2b2lkIGZvbygpIHsKKyAgIGluc3RhbmNlLmV4ZWMoYW5PYmplY3QpOworICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlUGFyYW1ldGVyL2FmdGVySW50ZXJuYWxTaWRlRWZmZWN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlUGFyYW1ldGVyL2FmdGVySW50ZXJuYWxTaWRlRWZmZWN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmZiNzk1MQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VQYXJhbWV0ZXIvYWZ0ZXJJbnRlcm5hbFNpZGVFZmZlY3QuamF2YQpAQCAtMCwwICsxLDIzIEBACitpbXBvcnQgamF2YS51dGlsLio7CisKK3B1YmxpYyBjbGFzcyBUZXN0IHsKKyAgICBpbnQgZmllbGQ7CisgICAgaW50IG1ldGhvZChpbnQgYW5PYmplY3QpIHsKKyAgICAgICAgcmV0dXJuIGFuT2JqZWN0OworICAgIH0KK30KKworcHVibGljIGNsYXNzIFVzYWdlIHsKKyAgICBpbnQgdXNhZ2UoVGVzdFtdIHRlc3RzKSB7CisgICAgICAgIGludCBzdW0gPSAwOworICAgICAgICBmb3IoaW50IGkgPSAwOyBpIDwgdGVzdHMubGVuZ3RoOykgeworICAgICAgICAgICAgZmluYWwgVGVzdCB0ZXN0ID0gdGVzdHNbaSsrXTsKKyAgICAgICAgICAgIHN1bSArPSB0ZXN0Lm1ldGhvZCh0ZXN0LmZpZWxkKTsKKyAgICAgICAgfQorICAgICAgICBMaXN0IGxpc3QgPSBBcnJheXMuYXNMaXN0KHRlc3RzKTsKKyAgICAgICAgZm9yKGludCBpID0gMDsgaSA8IGxpc3Quc2l6ZSgpOykgeworICAgICAgICAgICAgZmluYWwgVGVzdCB0ZXN0ID0gKFRlc3QpIGxpc3QuZ2V0KGkrKyk7CisgICAgICAgICAgICBzdW0gKz0gdGVzdC5tZXRob2QodGVzdC5maWVsZCk7ICAgICAgICAKKyAgICAgICAgfQorICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlUGFyYW1ldGVyL2FmdGVyTG9jYWxWYXJEZWNsYXJhdGlvbi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVBhcmFtZXRlci9hZnRlckxvY2FsVmFyRGVjbGFyYXRpb24uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZmRmMzlmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVBhcmFtZXRlci9hZnRlckxvY2FsVmFyRGVjbGFyYXRpb24uamF2YQpAQCAtMCwwICsxLDUgQEAKK2NsYXNzIEZvbyB7CisgICAgdm9pZCBmKGludCBhbk9iamVjdCkgeworICAgICAgICBpbnQgayA9IGFuT2JqZWN0OworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlUGFyYW1ldGVyL2FmdGVyTG9jYWxWYXJTZWxlY3Rpb24uamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VQYXJhbWV0ZXIvYWZ0ZXJMb2NhbFZhclNlbGVjdGlvbi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU0MGIwYTgKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlUGFyYW1ldGVyL2FmdGVyTG9jYWxWYXJTZWxlY3Rpb24uamF2YQpAQCAtMCwwICsxLDkgQEAKK2NsYXNzIFRlc3QgeworICAgIHB1YmxpYyB2b2lkIHRlc3QoU3RyaW5nIGFuT2JqZWN0KSB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihhbk9iamVjdCk7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgdXNlKCkgeworICAgICAgICB0ZXN0KCIiKTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVBhcmFtZXRlci9hZnRlck1ldGhvZEFjY2Vzcy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVBhcmFtZXRlci9hZnRlck1ldGhvZEFjY2Vzcy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBmNTdmNTkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlUGFyYW1ldGVyL2FmdGVyTWV0aG9kQWNjZXNzLmphdmEKQEAgLTAsMCArMSwxOCBAQAorY2xhc3MgVGVzdCB7CisgICAgaW50IG1ldGhvZChpbnQgYSwgaW50IGIsIGludCBhbk9iamVjdCkgeworICAgICAgICByZXR1cm4gYW5PYmplY3Q7CisgICAgfQorICAgIGludCBpOworICAgIAorICAgIGludCBhbm90aGVyTWV0aG9kKGludCB4KSB7IAorICAgICAgICByZXR1cm4geDsKKyAgICB9Cit9CisKK2NsYXNzIFhUZXN0IHsKKyAgICBpbnQgbigpIHsKKyAgICAgICAgVGVzdCB0OworICAgICAgICAKKyAgICAgICAgcmV0dXJuIHQubWV0aG9kKDEsIDIsIHQuYW5vdGhlck1ldGhvZCgxICsgMikpOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlUGFyYW1ldGVyL2FmdGVyTWV0aG9kVXNhZ2VJblRoaXNNZXRob2RJbmhlcml0b3IuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VQYXJhbWV0ZXIvYWZ0ZXJNZXRob2RVc2FnZUluVGhpc01ldGhvZEluaGVyaXRvci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1YmQ4YWYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlUGFyYW1ldGVyL2FmdGVyTWV0aG9kVXNhZ2VJblRoaXNNZXRob2RJbmhlcml0b3IuamF2YQpAQCAtMCwwICsxLDExIEBACitjbGFzcyBDIHsKKyAgaW50IGZvbyhpbnQgeCwgaW50IGFuT2JqZWN0KSB7CisgICAgIHJldHVybiBhbk9iamVjdDsKKyAgfQorfQorCitjbGFzcyBEIGV4dGVuZHMgQyB7CisgIGludCBmb28oaW50IHgsIGludCBhbk9iamVjdCkgeworICAgIHJldHVybiBzdXBlci5mb28oeCwgYW5PYmplY3QpOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVBhcmFtZXRlci9hZnRlck1ldGhvZFdpdGhvdXRQYXJhbXMuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VQYXJhbWV0ZXIvYWZ0ZXJNZXRob2RXaXRob3V0UGFyYW1zLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTY2MDkyOAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VQYXJhbWV0ZXIvYWZ0ZXJNZXRob2RXaXRob3V0UGFyYW1zLmphdmEKQEAgLTAsMCArMSwxMiBAQAorY2xhc3MgVGVzdCB7CisgICAgaW50IG0oaW50IGFuT2JqZWN0KSB7CisgICAgICAgIHJldHVybiBhbk9iamVjdDsKKyAgICB9Cit9CisKK2NsYXNzIFgzIHsKKyAgICBpbnQgbigpIHsKKyAgICAgICAgVGVzdCB0OworICAgICAgICByZXR1cm4gdC5tKDApOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlUGFyYW1ldGVyL2FmdGVyTm9Vc2FnZXMuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VQYXJhbWV0ZXIvYWZ0ZXJOb1VzYWdlcy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM0MDYxZDAKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlUGFyYW1ldGVyL2FmdGVyTm9Vc2FnZXMuamF2YQpAQCAtMCwwICsxLDUgQEAKK2NsYXNzIFRlc3QgeworICAgcHVibGljIGludCBtKGludCBhLCBpbnQgYiwgaW50IGFuT2JqZWN0KSB7CisJcmV0dXJuIGFuT2JqZWN0OworICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VQYXJhbWV0ZXIvYWZ0ZXJOdWxsLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlUGFyYW1ldGVyL2FmdGVyTnVsbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIzOGQ0OTgKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlUGFyYW1ldGVyL2FmdGVyTnVsbC5qYXZhCkBAIC0wLDAgKzEsNiBAQAorY2xhc3MgVGVzdCB7CisgICAgcHVibGljIFRlc3QgbWV0aG9kKFRlc3QgYW5PYmplY3QpIHsKKyAgICAgICAgcmV0dXJuIGFuT2JqZWN0OworICAgIH0KK30KKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVBhcmFtZXRlci9hZnRlclBhcmFtZXRlckluRm9yLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlUGFyYW1ldGVyL2FmdGVyUGFyYW1ldGVySW5Gb3IuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNTU0OTc3Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVBhcmFtZXRlci9hZnRlclBhcmFtZXRlckluRm9yLmphdmEKQEAgLTAsMCArMSw5IEBACitpbXBvcnQgamF2YS51dGlsLio7CisKK2NsYXNzIFhYIHsKKyAgICBwdWJsaWMgdm9pZCBnKExpc3QgbCwgSXRlcmF0b3IgaXQpIHsKKyAgICAgICAgZm9yKDsgaXQuaGFzTmV4dCgpOykgeworICAgICAgICAgICAgT2JqZWN0IG8gPSBpdC5uZXh0KCk6CisgICAgICAgIH0KKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVBhcmFtZXRlci9hZnRlclBhcmFtZXRlckphdmFEb2MxLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlUGFyYW1ldGVyL2FmdGVyUGFyYW1ldGVySmF2YURvYzEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ODQ4NWUwCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVBhcmFtZXRlci9hZnRlclBhcmFtZXRlckphdmFEb2MxLmphdmEKQEAgLTAsMCArMSw4IEBACitjbGFzcyBUZXN0IHsKKyAgICAvKioKKyAgICAgKiBAcGFyYW0gYW5PYmplY3QKKyAgICAgKi8KKyAgICBpbnQgbWV0aG9kKGZpbmFsIGludCBhbk9iamVjdCkgeworICAgICAgICByZXR1cm4gYW5PYmplY3Q7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVBhcmFtZXRlci9hZnRlclBhcmFtZXRlckphdmFEb2MyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlUGFyYW1ldGVyL2FmdGVyUGFyYW1ldGVySmF2YURvYzIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NjBkYzUwCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVBhcmFtZXRlci9hZnRlclBhcmFtZXRlckphdmFEb2MyLmphdmEKQEAgLTAsMCArMSw5IEBACitjbGFzcyBUZXN0IHsKKyAgICAvKioKKyAgICAgKiBAcGFyYW0gcworICAgICAqIEBwYXJhbSBhbk9iamVjdAorICAgICAqLworICAgIGludCBtZXRob2QoU3RyaW5nIHMsIGZpbmFsIGludCBhbk9iamVjdCkgeworICAgICAgICByZXR1cm4gYW5PYmplY3Q7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVBhcmFtZXRlci9hZnRlclBhcmFtZXRlckphdmFEb2MzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlUGFyYW1ldGVyL2FmdGVyUGFyYW1ldGVySmF2YURvYzMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YmZmYzI5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVBhcmFtZXRlci9hZnRlclBhcmFtZXRlckphdmFEb2MzLmphdmEKQEAgLTAsMCArMSw4IEBACitjbGFzcyBUZXN0IHsKKyAgICAvKioKKyAgICAgKiAgSW5jb21wbGV0ZSBKYXZhRG9jCisgICAgICovCisgICAgaW50IG1ldGhvZChTdHJpbmcgcywgZmluYWwgaW50IGFuT2JqZWN0KSB7CisgICAgICAgIHJldHVybiBhbk9iamVjdDsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlUGFyYW1ldGVyL2FmdGVyUGFyYW1ldGVySmF2YURvY0JlZm9yZVZhcmFyZy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVBhcmFtZXRlci9hZnRlclBhcmFtZXRlckphdmFEb2NCZWZvcmVWYXJhcmcuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNzYzNzZlCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVBhcmFtZXRlci9hZnRlclBhcmFtZXRlckphdmFEb2NCZWZvcmVWYXJhcmcuamF2YQpAQCAtMCwwICsxLDE0IEBACitjbGFzcyBDIHsKKyAgICAvKioKKyAgICAgKiBAcGFyYW0gYW5PYmplY3QKKyAgICAgKiBAcGFyYW0gcworICAgICAqLworICAgIHZvaWQgbWV0aG9kKGZpbmFsIGludCBhbk9iamVjdCwgU3RyaW5nLi4uIHMpIHsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKHNbYW5PYmplY3RdKTsKKyAgICB9CisKKyAgICB7CisgICAgICAgIG1ldGhvZCgwLCAiYSIsICJiIiwgImMiKTsKKyAgICAgICAgbWV0aG9kKDApOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlUGFyYW1ldGVyL2FmdGVyUGFyYW1ldGVyU3Vic3RpdHV0aW9uLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlUGFyYW1ldGVyL2FmdGVyUGFyYW1ldGVyU3Vic3RpdHV0aW9uLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTJlYjViOQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VQYXJhbWV0ZXIvYWZ0ZXJQYXJhbWV0ZXJTdWJzdGl0dXRpb24uamF2YQpAQCAtMCwwICsxLDEzIEBACitjbGFzcyBUZXN0IHsKKyAgICBpbnQgbWV0aG9kKGludCBhLCBpbnQgYiwgaW50IGFuT2JqZWN0KSB7CisgICAgICAgIHJldHVybiBhbk9iamVjdDsKKyAgICB9Cit9CisKK2NsYXNzIFhUZXN0IHsKKyAgICBpbnQgbigpIHsKKyAgICAgICAgVGVzdCB0OworICAgICAgICAKKyAgICAgICAgcmV0dXJuIHQubWV0aG9kKDEsIDIsIDEgKyAyKTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVBhcmFtZXRlci9hZnRlclByZXNlcnZlRGlhbW9uZE9jY3VycmVuY2VzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlUGFyYW1ldGVyL2FmdGVyUHJlc2VydmVEaWFtb25kT2NjdXJyZW5jZXMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZjYyMTM3Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVBhcmFtZXRlci9hZnRlclByZXNlcnZlRGlhbW9uZE9jY3VycmVuY2VzLmphdmEKQEAgLTAsMCArMSwyMiBAQAorCitwdWJsaWMgY2xhc3MgVGVzdENvbXBsZXRpb24geworCisgICAgcHVibGljIHN0YXRpYyA8VCwgVj4gUGFyYWxsZWxQaXBlbGluZTxULCBWPiB0ZXN0KFQgYmFzZSwgViBuZXdTdGFnZSwgVCB1cHN0cmVhbSwgZmluYWwgUGFyYWxsZWxQaXBlbGluZTxULCBWPiBhbk9iamVjdCkgeworICAgICAgICBpZiAoYmFzZSAhPSBudWxsKXsKKyAgICAgICAgICAgIHJldHVybiBhbk9iamVjdDsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHJldHVybiBuZXcgUGFyYWxsZWxQaXBlbGluZTw+KHVwc3RyZWFtLCBuZXdTdGFnZSk7CisgICAgICAgIH0KKworICAgIH0KKworCisgICAgdm9pZCBmKCkgeworICAgICAgICB0ZXN0KG51bGwsIG51bGwsIG51bGwsIG5ldyBQYXJhbGxlbFBpcGVsaW5lPD4obnVsbCwgbnVsbCkpOworICAgIH0KKyAgICBwcml2YXRlIHN0YXRpYyBjbGFzcyBQYXJhbGxlbFBpcGVsaW5lPFQsIFY+IHsKKyAgICAgICAgcHVibGljIFBhcmFsbGVsUGlwZWxpbmUoVCBwMCwgViBwMSkgeworICAgICAgICB9CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVBhcmFtZXRlci9hZnRlclF1YWxpZmllZE5ldy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVBhcmFtZXRlci9hZnRlclF1YWxpZmllZE5ldy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY5OWFjZDUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlUGFyYW1ldGVyL2FmdGVyUXVhbGlmaWVkTmV3LmphdmEKQEAgLTAsMCArMSwxMCBAQAorY2xhc3MgVGVzdCB7CisgICAgY2xhc3MgQSB7CisgICAgICAgIGNsYXNzIEIgeworICAgICAgICB9CisgICAgfQorIAorICAgIE9iamVjdCBtZXRob2QoQS5CIGFuT2JqZWN0KSB7CisgICAgICAgIHJldHVybiBhbk9iamVjdDsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVBhcmFtZXRlci9hZnRlclJlbW92ZVBhcmFtZXRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVBhcmFtZXRlci9hZnRlclJlbW92ZVBhcmFtZXRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE2ZjA3NWYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlUGFyYW1ldGVyL2FmdGVyUmVtb3ZlUGFyYW1ldGVyLmphdmEKQEAgLTAsMCArMSw1IEBACitwdWJsaWMgY2xhc3MgQmFyIHsKKyAgICBwdWJsaWMgaW50IGJheihpbnQgYW5PYmplY3QpIHsKKyAgICAgICAgcmV0dXJuIDxjYXJldD5hbk9iamVjdDsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlUGFyYW1ldGVyL2FmdGVyUmVtb3ZlUGFyYW1ldGVyQWZ0ZXJWYXJpYWJsZS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVBhcmFtZXRlci9hZnRlclJlbW92ZVBhcmFtZXRlckFmdGVyVmFyaWFibGUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZTNjZThlCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVBhcmFtZXRlci9hZnRlclJlbW92ZVBhcmFtZXRlckFmdGVyVmFyaWFibGUuamF2YQpAQCAtMCwwICsxLDUgQEAKK3B1YmxpYyBjbGFzcyBCYXIgeworICAgIHB1YmxpYyBpbnQgYmF6KGludCBhbk9iamVjdCkgeworICAgICAgICA8Y2FyZXQ+cmV0dXJuIGFuT2JqZWN0ICsgOTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlUGFyYW1ldGVyL2FmdGVyUmVtb3ZlUGFyYW1ldGVySW5IaWVyYXJjaHkuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VQYXJhbWV0ZXIvYWZ0ZXJSZW1vdmVQYXJhbWV0ZXJJbkhpZXJhcmNoeS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM2YzA3NWUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlUGFyYW1ldGVyL2FmdGVyUmVtb3ZlUGFyYW1ldGVySW5IaWVyYXJjaHkuamF2YQpAQCAtMCwwICsxLDEwIEBACitwdWJsaWMgY2xhc3MgQmFyIHsKKyAgICBwdWJsaWMgaW50IGJheihpbnQgYW5PYmplY3QpIHsKKyAgICAgICAgcmV0dXJuIGFuT2JqZWN0OworICAgIH0KK30KK2NsYXNzIFMgZXh0ZW5kcyBCYXIgeworICAgIHB1YmxpYyBpbnQgYmF6KGludCBhbk9iamVjdCkgeworICAgICAgICByZXR1cm4gc3VwZXIuYmF6KGFuT2JqZWN0KTsgICAgLy9UbyBjaGFuZ2UgYm9keSBvZiBvdmVycmlkZGVuIG1ldGhvZHMgdXNlIEZpbGUgfCBTZXR0aW5ncyB8IEZpbGUgVGVtcGxhdGVzLgorICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlUGFyYW1ldGVyL2FmdGVyUmVtb3ZlUGFyYW1ldGVyV2l0aEphdmFkb2MuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VQYXJhbWV0ZXIvYWZ0ZXJSZW1vdmVQYXJhbWV0ZXJXaXRoSmF2YWRvYy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMzZWU0ZmUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlUGFyYW1ldGVyL2FmdGVyUmVtb3ZlUGFyYW1ldGVyV2l0aEphdmFkb2MuamF2YQpAQCAtMCwwICsxLDEwIEBACitwdWJsaWMgY2xhc3MgQmFyIHsKKworICAgIC8qKgorICAgICAqCisgICAgICogQHBhcmFtIGFuT2JqZWN0CisgICAgICovCisgICAgcHVibGljIHZvaWQgcHJpbnRFcnJvcihTdHJpbmcgZGV0YWlsLCBTdHJpbmcgYW5PYmplY3QpIHsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKGFuT2JqZWN0ICsgIiBlcnJvcjogIiArIGRldGFpbCk7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVBhcmFtZXRlci9hZnRlclJlcGxhY2VBbGxBbmREZWxldGVVbnVzZWQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VQYXJhbWV0ZXIvYWZ0ZXJSZXBsYWNlQWxsQW5kRGVsZXRlVW51c2VkLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGY5OWY4NwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VQYXJhbWV0ZXIvYWZ0ZXJSZXBsYWNlQWxsQW5kRGVsZXRlVW51c2VkLmphdmEKQEAgLTAsMCArMSwxMSBAQAorcHVibGljIGNsYXNzIFBhcmFtZXRlcnMgeworICAgICAgICBwdWJsaWMgdm9pZCBzdWJqZWN0KGZpbmFsIGludCBhbk9iamVjdCkgeworICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihhbk9iamVjdCk7CisgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKGFuT2JqZWN0KTsKKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyB2b2lkIGNvbnRleHQoKSB7CisgICAgICAgICAgICAgICAgc3ViamVjdCgxICsxKTsKKyAgICAgICAgICAgICAgICBzdWJqZWN0KDIgKzEpOworICAgICAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVBhcmFtZXRlci9hZnRlclNlbGZSZWZlcmVuY2UuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VQYXJhbWV0ZXIvYWZ0ZXJTZWxmUmVmZXJlbmNlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWFkZTVhZAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VQYXJhbWV0ZXIvYWZ0ZXJTZWxmUmVmZXJlbmNlLmphdmEKQEAgLTAsMCArMSw5IEBACitjbGFzcyBUZXN0IHsKKyAgdm9pZCBmb28oYm9vbGVhbiBmbGFnLCBpbnQgaSwgZmluYWwgaW50IGFuT2JqZWN0KSB7CisgICAgaWYgKGZsYWcpIHsKKyAgICAgIGZvbyhmYWxzZSwgaSwgYW5PYmplY3QpOworICAgIH0KKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oKTsKKyAgICBmb28oZmFsc2UsIGksIGFuT2JqZWN0KTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVBhcmFtZXRlci9hZnRlclNlbGZSZWZlcmVuY2VWYXJhcmdzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlUGFyYW1ldGVyL2FmdGVyU2VsZlJlZmVyZW5jZVZhcmFyZ3MuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMDg4ZmQyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVBhcmFtZXRlci9hZnRlclNlbGZSZWZlcmVuY2VWYXJhcmdzLmphdmEKQEAgLTAsMCArMSw5IEBACitjbGFzcyBUZXN0IHsKKyAgdm9pZCBmb28oYm9vbGVhbiBmbGFnLCBmaW5hbCBTdHJpbmcgYW5PYmplY3QsIGludC4uLiBpKSB7CisgICAgaWYgKGZsYWcpIHsKKyAgICAgIGZvbyhmYWxzZSwgYW5PYmplY3QsIGkpOworICAgIH0KKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oKTsKKyAgICBmb28oZmxhZywgYW5PYmplY3QsIGkpOworICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlUGFyYW1ldGVyL2FmdGVyU2VsZlJlZmVyZW5jZVZhcmFyZ3MxLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlUGFyYW1ldGVyL2FmdGVyU2VsZlJlZmVyZW5jZVZhcmFyZ3MxLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmZjYjhhYzYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlUGFyYW1ldGVyL2FmdGVyU2VsZlJlZmVyZW5jZVZhcmFyZ3MxLmphdmEKQEAgLTAsMCArMSw2IEBACitjbGFzcyBUZXN0IHsKKyAgdm9pZCBmb28oZmluYWwgU3RyaW5nIGFuT2JqZWN0LCBpbnQuLi4gaSkgeworICAgIGZvbyhhbk9iamVjdCwgMSk7CisgICAgZm9vKGFuT2JqZWN0LCAzKTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVBhcmFtZXRlci9hZnRlclNpbXBsZVVzYWdlLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlUGFyYW1ldGVyL2FmdGVyU2ltcGxlVXNhZ2UuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZjk5YWE5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVBhcmFtZXRlci9hZnRlclNpbXBsZVVzYWdlLmphdmEKQEAgLTAsMCArMSwxOCBAQAorY2xhc3MgVGVzdCB7CisgICBwdWJsaWMgaW50IG0oaW50IGEsIGludCBiLCBpbnQgYW5PYmplY3QpIHsKKyAgICAgICAgaWYoYSA+IGIpIHsKKyAgICAgICAgICAgcmV0dXJuIGFuT2JqZWN0OworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICByZXR1cm4gYW5PYmplY3Q7CisgICAgICAgIH0KKyAgIH0KK30KKworY2xhc3MgVGVzdDEgeworICBUZXN0IHQ7CisKKyAgcHVibGljIGludCBuKGludCB2KSB7CisgICAgcmV0dXJuIHQubSh2LCAxLCAwKTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VQYXJhbWV0ZXIvYWZ0ZXJTaW1wbGlmaWVkUmVzdWx0ZWRUeXBlLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlUGFyYW1ldGVyL2FmdGVyU2ltcGxpZmllZFJlc3VsdGVkVHlwZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ1NjgxOWQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlUGFyYW1ldGVyL2FmdGVyU2ltcGxpZmllZFJlc3VsdGVkVHlwZS5qYXZhCkBAIC0wLDAgKzEsMjQgQEAKK2ltcG9ydCBqYXZhLnV0aWwuKjsKK3B1YmxpYyBjbGFzcyBJbnRyb2R1Y2VQYXJhbWV0ZXJQcm9kdWNlc1dhcm5pbmcgeworICAgIHByaXZhdGUgZmluYWwgTGlzdDxHZW5lcmljPD8+PiBlbGVtZW50czsKKworICAgIHB1YmxpYyBJbnRyb2R1Y2VQYXJhbWV0ZXJQcm9kdWNlc1dhcm5pbmcoZmluYWwgQXJyYXlMaXN0PEdlbmVyaWM8Pz4+IGFuT2JqZWN0KSB7CisgICAgICAgIGVsZW1lbnRzID0gYW5PYmplY3Q7CisgICAgfQorCisgICAgcHVibGljIHN0YXRpYyA8RT4gQXJyYXlMaXN0PEU+IG5ld0FycmF5TGlzdChFLi4uIGVsZW1lbnRzKSB7CisgICAgICAgIEFycmF5TGlzdDxFPiBsaXN0ID0gbmV3IEFycmF5TGlzdDxFPigpOworICAgICAgICBDb2xsZWN0aW9ucy5hZGRBbGwobGlzdCwgZWxlbWVudHMpOworICAgICAgICByZXR1cm4gbGlzdDsKKyAgICB9CisKKyAgICBwcml2YXRlIHN0YXRpYyBpbnRlcmZhY2UgR2VuZXJpYzxUPnsKKworICAgIH0KKworICAgIHByaXZhdGUgc3RhdGljIGNsYXNzIFNvbWVHZW5lcmljIGltcGxlbWVudHMgR2VuZXJpYzxTdHJpbmc+IHsKKyAgICB9CisKKyAgICBwcml2YXRlIHN0YXRpYyBjbGFzcyBTb21lT3RoZXJHZW5lcmljIGltcGxlbWVudHMgR2VuZXJpYzxPYmplY3Q+IHsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlUGFyYW1ldGVyL2FmdGVyU3RhdGljRmllbGRBY2Nlc3MuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VQYXJhbWV0ZXIvYWZ0ZXJTdGF0aWNGaWVsZEFjY2Vzcy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlmMDQzNWIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlUGFyYW1ldGVyL2FmdGVyU3RhdGljRmllbGRBY2Nlc3MuamF2YQpAQCAtMCwwICsxLDE2IEBACitjbGFzcyBUZXN0IHsKKyAgICBwdWJsaWMgc3RhdGljIGludCBpOworICAgIAorICAgIGludCBtZXRob2QoaW50IGEsIGludCBhbk9iamVjdCkgeworICAgICAgICByZXR1cm4gYW5PYmplY3Q7CisgICAgfQorfQorCitjbGFzcyBYIHsKKyAgICBwdWJsaWMgc3RhdGljIGludCBpOworICAgIAorICAgIGludCB5eXkoaW50IHopIHsKKyAgICAgICAgVGVzdCB0OworICAgICAgICByZXR1cm4gdC5tZXRob2QoeiwgeiArIFRlc3QuaSk7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VQYXJhbWV0ZXIvYWZ0ZXJTdGF0aWNGaWVsZFdpdGhHZXR0ZXJSZXBsYWNlbWVudC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVBhcmFtZXRlci9hZnRlclN0YXRpY0ZpZWxkV2l0aEdldHRlclJlcGxhY2VtZW50LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTAyODhlYgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VQYXJhbWV0ZXIvYWZ0ZXJTdGF0aWNGaWVsZFdpdGhHZXR0ZXJSZXBsYWNlbWVudC5qYXZhCkBAIC0wLDAgKzEsMTcgQEAKK3B1YmxpYyBjbGFzcyBSIHsKKyAgcHJpdmF0ZSBzdGF0aWMgaW50IG91ckludDsKKworICBwdWJsaWMgc3RhdGljIGludCBnZXRPdXJJbnQoKSB7CisgICAgcmV0dXJuIG91ckludDsKKyAgfQorCisgIHB1YmxpYyBzdGF0aWMgdm9pZCBkb1NtdGgoZmluYWwgaW50IGFuT2JqZWN0KSB7CisgICAgU3lzdGVtLm91dC5wcmludGxuKGFuT2JqZWN0KTsKKyAgfQorfQorCitjbGFzcyBVc2FnZSB7CisgIHZvaWQgZm9vKCkgeworICAgIFIuZG9TbXRoKFIuZ2V0T3VySW50KCkpOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVBhcmFtZXRlci9hZnRlclN1YnN0aXR1dGVUeXBlUGFyYW1zLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlUGFyYW1ldGVyL2FmdGVyU3Vic3RpdHV0ZVR5cGVQYXJhbXMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMWFlY2ZkCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVBhcmFtZXRlci9hZnRlclN1YnN0aXR1dGVUeXBlUGFyYW1zLmphdmEKQEAgLTAsMCArMSwxMSBAQAoraW1wb3J0IGphdmEudXRpbC4qOworY2xhc3MgVGVzdCB7CisgPFQ+IHZvaWQgZm9vKFQgdCwgZmluYWwgQXJyYXlMaXN0PFQ+IGFuT2JqZWN0KSB7CisgICAgTGlzdDxUPiBscyA9IGFuT2JqZWN0OworICB9CisKKyAgdm9pZCBiYXIoKSB7CisgICAgU3RyaW5nIHMgPSAiIjsKKyAgICBmb28ocywgbmV3IEFycmF5TGlzdDxTdHJpbmc+KCkpOworICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlUGFyYW1ldGVyL2FmdGVyU3VwZXJJbkV4cHJlc3Npb24uamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VQYXJhbWV0ZXIvYWZ0ZXJTdXBlckluRXhwcmVzc2lvbi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk2NWM1NDIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlUGFyYW1ldGVyL2FmdGVyU3VwZXJJbkV4cHJlc3Npb24uamF2YQpAQCAtMCwwICsxLDE4IEBACitjbGFzcyBUMSB7CisgICAgaW50IG1ldGhvZChpbnQgaSkgeworICAgICAgICByZXR1cm4gMDsKKyAgICB9Cit9CisKK2NsYXNzIFQyIGV4dGVuZHMgVDEgeworICAgIGludCBtZXRob2QoaW50IGksIGludCBhbk9iamVjdCkgeworICAgICAgICByZXR1cm4gYW5PYmplY3Q7CisgICAgfQorfQorCitjbGFzcyBVc2FnZSB7CisgICAgaW50IG0oKSB7CisgICAgICAgIFQyIHRlc3Q7CisgICAgICAgIHJldHVybiB0ZXN0Lm1ldGhvZCgwLCB0ZXN0Lm1ldGhvZCgwKSArIDEpOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlUGFyYW1ldGVyL2FmdGVyU3VwZXJXaXRoU2lkZUVmZmVjdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVBhcmFtZXRlci9hZnRlclN1cGVyV2l0aFNpZGVFZmZlY3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYWFiYjUyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVBhcmFtZXRlci9hZnRlclN1cGVyV2l0aFNpZGVFZmZlY3QuamF2YQpAQCAtMCwwICsxLDE4IEBACitjbGFzcyBUMSB7CisgICAgaW50IG1ldGhvZChpbnQgaSkgeworICAgICAgICByZXR1cm4gMDsKKyAgICB9Cit9CisKK2NsYXNzIFQyIGV4dGVuZHMgVDEgeworICAgIGludCBtZXRob2QoaW50IGksIGludCBhbk9iamVjdCkgeworICAgICAgICByZXR1cm4gYW5PYmplY3Q7CisgICAgfQorfQorCitjbGFzcyBVc2FnZSB7CisgICAgaW50IG0oKSB7CisgICAgICAgIGZpbmFsIFQyIHQyID0gbmV3IFQyKCk7CisgICAgICAgIHJldHVybiB0Mi5tZXRob2QoMCwgdDIubWV0aG9kKDApICsgMSk7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VQYXJhbWV0ZXIvYWZ0ZXJUaGlzU3Vic3RpdHV0aW9uLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlUGFyYW1ldGVyL2FmdGVyVGhpc1N1YnN0aXR1dGlvbi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIxODhkY2MKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlUGFyYW1ldGVyL2FmdGVyVGhpc1N1YnN0aXR1dGlvbi5qYXZhCkBAIC0wLDAgKzEsMTQgQEAKK2NsYXNzIFRlc3QgeworICAgIGludCBtZXRob2QoaW50IGEsIGludCBiLCBUZXN0IGFuT2JqZWN0KSB7CisgICAgICAgIHJldHVybiBhbk9iamVjdC5pOworICAgIH0KKyAgICBwcml2YXRlIGludCBpOworfQorCitjbGFzcyBYVGVzdCB7CisgICAgaW50IG4oKSB7CisgICAgICAgIFRlc3QgdDsKKyAgICAgICAgCisgICAgICAgIHJldHVybiB0Lm1ldGhvZCgxLCAyLCB0KTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVBhcmFtZXRlci9hZnRlclRoaXNTdWJzdGl0dXRpb25JblF1YWxpZmllci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVBhcmFtZXRlci9hZnRlclRoaXNTdWJzdGl0dXRpb25JblF1YWxpZmllci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk3YzZlNTAKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlUGFyYW1ldGVyL2FmdGVyVGhpc1N1YnN0aXR1dGlvbkluUXVhbGlmaWVyLmphdmEKQEAgLTAsMCArMSwxNCBAQAorY2xhc3MgVGVzdCB7CisgICAgaW50IG1ldGhvZChpbnQgYSwgaW50IGIsIGludCBhbk9iamVjdCkgeworICAgICAgICByZXR1cm4gYW5PYmplY3Q7CisgICAgfQorICAgIHByaXZhdGUgaW50IGk7Cit9CisKK2NsYXNzIFhUZXN0IHsKKyAgICBpbnQgbigpIHsKKyAgICAgICAgVGVzdCB0OworICAgICAgICAKKyAgICAgICAgcmV0dXJuIHQubWV0aG9kKDEsIDIsIHQuaSk7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VQYXJhbWV0ZXIvYWZ0ZXJVc2VJbklubmVyQ2xhc3MuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VQYXJhbWV0ZXIvYWZ0ZXJVc2VJbklubmVyQ2xhc3MuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42M2NjNGQ3Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVBhcmFtZXRlci9hZnRlclVzZUluSW5uZXJDbGFzcy5qYXZhCkBAIC0wLDAgKzEsMTMgQEAKK2NsYXNzIFRlc3QgeworICAgIHB1YmxpYyB2b2lkIHRlc3QoZmluYWwgU3RyaW5nIGFuT2JqZWN0KSB7CisgICAgICAgIG5ldyBSdW5uYWJsZSgpIHsKKyAgICAgICAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKKyAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oYW5PYmplY3QpOworICAgICAgICAgICAgfQorICAgICAgICB9LnJ1bigpOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIHVzZSgpIHsKKyAgICAgICAgdGVzdCgiIik7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VQYXJhbWV0ZXIvYWZ0ZXJWYXJhcmdzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlUGFyYW1ldGVyL2FmdGVyVmFyYXJncy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY2ZWUxMGIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlUGFyYW1ldGVyL2FmdGVyVmFyYXJncy5qYXZhCkBAIC0wLDAgKzEsMTggQEAKK2NsYXNzIFRlc3QgeworICAgcHVibGljIGludCBtKGludCBhLCBpbnQgYW5PYmplY3QsIGludC4uLiB2YWx1ZXMpIHsKKyAgICAgICAgaWYoYSA+IHZhbHVlcy5sZW5ndGgpIHsKKyAgICAgICAgICAgcmV0dXJuIGFuT2JqZWN0OworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICByZXR1cm4gYW5PYmplY3Q7CisgICAgICAgIH0KKyAgIH0KK30KKworY2xhc3MgVGVzdDEgeworICBUZXN0IHQ7CisKKyAgcHVibGljIGludCBuKGludCB2KSB7CisgICAgcmV0dXJuIHQubSh2LCAwLCAxKTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VQYXJhbWV0ZXIvYWZ0ZXJWYXJhcmdzMS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVBhcmFtZXRlci9hZnRlclZhcmFyZ3MxLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGE4MjU1MgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VQYXJhbWV0ZXIvYWZ0ZXJWYXJhcmdzMS5qYXZhCkBAIC0wLDAgKzEsOCBAQAoraW1wb3J0IGphdmEudXRpbC4qOworCitwdWJsaWMgY2xhc3MgQ29sbGVjdCB7CisgICAgcHVibGljIHZvaWQgbShMaXN0PFN0cmluZz4gYW5PYmplY3QpIHsKKyAgICAgICBMaXN0IHN0cnMgPSBhbk9iamVjdDsKKyAgIH0KKworfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVBhcmFtZXRlci9hZnRlcldlaXJkUXVhbGlmaWVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlUGFyYW1ldGVyL2FmdGVyV2VpcmRRdWFsaWZpZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNTU4YjkwCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVBhcmFtZXRlci9hZnRlcldlaXJkUXVhbGlmaWVyLmphdmEKQEAgLTAsMCArMSwxNiBAQAorcHVibGljIGNsYXNzIFRlc3QgeworICAgIGludCBtZXRob2QoaW50IGkpIHsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgaW50IG0oaW50IGksIGludCBqLCBpbnQgYW5PYmplY3QpIHsKKyAgICAgICAgcmV0dXJuIGkgKyBhbk9iamVjdDsKKyAgICB9Cit9CisKK2NsYXNzIFggeworICAgcHVibGljIGludCBuKGludCBhKSB7CisgICAgICAgZmluYWwgVGVzdCB0ZXN0ID0gbmV3IFRlc3QoKTsKKyAgICAgICByZXR1cm4gdGVzdC5tKGEsIGEgKiAyLCB0ZXN0Lm1ldGhvZChhICogMikpOworICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VQYXJhbWV0ZXIvYWZ0ZXJXZWlyZFF1YWxpZmllckFuZFBhcmFtZXRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVBhcmFtZXRlci9hZnRlcldlaXJkUXVhbGlmaWVyQW5kUGFyYW1ldGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDRmZjI1ZQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VQYXJhbWV0ZXIvYWZ0ZXJXZWlyZFF1YWxpZmllckFuZFBhcmFtZXRlci5qYXZhCkBAIC0wLDAgKzEsMTYgQEAKK3B1YmxpYyBjbGFzcyBUZXN0IHsgICAgCisgICAgaW50IG1ldGhvZChpbnQgaSkgeworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBpbnQgbShpbnQgaSwgaW50IGosIFRlc3QgdCwgaW50IGFuT2JqZWN0KSB7CisgICAgICAgIHJldHVybiBpICsgYW5PYmplY3Q7CisgICAgfQorfQorCitjbGFzcyBYIHsKKyAgIHB1YmxpYyBpbnQgbihpbnQgYSkgeworICAgICAgIGZpbmFsIFRlc3QgdCA9IG5ldyBUZXN0KCk7CisgICAgICAgcmV0dXJuIChuZXcgVGVzdCgpKS5tKGEsIGEgKiAyLCB0LCB0Lm1ldGhvZChhICogMikpOworICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VQYXJhbWV0ZXIvYmVmb3JlQW5vbnltb3VzQ2xhc3MuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VQYXJhbWV0ZXIvYmVmb3JlQW5vbnltb3VzQ2xhc3MuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNzcyYjEyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVBhcmFtZXRlci9iZWZvcmVBbm9ueW1vdXNDbGFzcy5qYXZhCkBAIC0wLDAgKzEsMTAgQEAKK3B1YmxpYyBjbGFzcyBUZXN0IHsKKyAgcHVibGljIFRlc3QoKSB7CisgICAgaW50IGkgPSA8c2VsZWN0aW9uPjA8L3NlbGVjdGlvbj47CisgIH0KKworICBwdWJsaWMgVGVzdCBnZXQoKSB7CisgICAgcmV0dXJuIG5ldyBUZXN0KCkgeworICAgIH0KKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VQYXJhbWV0ZXIvYmVmb3JlQXJyYXlJbml0aWFsaXplci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVBhcmFtZXRlci9iZWZvcmVBcnJheUluaXRpYWxpemVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjUxZDkwNgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VQYXJhbWV0ZXIvYmVmb3JlQXJyYXlJbml0aWFsaXplci5qYXZhCkBAIC0wLDAgKzEsMTAgQEAKK2NsYXNzIFRlc3QgeworICBwdWJsaWMgc3luY2hyb25pemVkIGJvb2xlYW4gZm9vKFN0cmluZyBtc2cpIHsKKyAgICByZXR1cm4gYmFyKG1lc3NhZ2UpOworICB9CisKKyAgcHJpdmF0ZSBib29sZWFuIGJhcihTdHJpbmcgcGFyYW1ldGVyKSB7CisgICAgU3RyaW5nW10gcGFyYW1zID0gPHNlbGVjdGlvbj57cGFyYW1ldGVyfTwvc2VsZWN0aW9uPjsKKyAgICByZXR1cm4gZmFsc2U7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlUGFyYW1ldGVyL2JlZm9yZUNvbmZsaWN0aW5nRmllbGQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VQYXJhbWV0ZXIvYmVmb3JlQ29uZmxpY3RpbmdGaWVsZC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc3ZDcxNGEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlUGFyYW1ldGVyL2JlZm9yZUNvbmZsaWN0aW5nRmllbGQuamF2YQpAQCAtMCwwICsxLDI1IEBACitwdWJsaWMgY2xhc3MgVGVzdCB7CisgICAgcHVibGljIGludCBhbk9iamVjdDsKKyAgICBwdWJsaWMgdm9pZCBtZXRob2QoKSB7CisgICAgfQorfQorCitwdWJsaWMgY2xhc3MgVGVzdDEgZXh0ZW5kcyBUZXN0IHsKKyAgICBwdWJsaWMgdm9pZCBtZXRob2QoKSB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbig8c2VsZWN0aW9uPjEgKyAyPC9zZWxlY3Rpb24+KTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKGFuT2JqZWN0KTsKKyAgICB9Cit9CisKK3B1YmxpYyBjbGFzcyBUZXN0MiBleHRlbmRzIFRlc3QxIHsKKyAgICBwdWJsaWMgdm9pZCBtZXRob2QoKSB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihhbk9iamVjdCk7CisgICAgfQorfQorCitwdWJsaWMgY2xhc3MgVXNhZ2UgeworICAgIHsKKyAgICAgICAgVGVzdCB0ID0gbmV3IFRlc3QyKCk7CisgICAgICAgIHQubWV0aG9kKCk7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VQYXJhbWV0ZXIvYmVmb3JlRGVsZWdhdGVXaXRoVmFyYXJncy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVBhcmFtZXRlci9iZWZvcmVEZWxlZ2F0ZVdpdGhWYXJhcmdzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGYxYWIzZQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VQYXJhbWV0ZXIvYmVmb3JlRGVsZWdhdGVXaXRoVmFyYXJncy5qYXZhCkBAIC0wLDAgKzEsNSBAQAorcHVibGljIGNsYXNzIFRlc3QgeworICAgICAgICB2b2lkIG0oaW50Li4uIHBzKSB7CisgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKDxzZWxlY3Rpb24+ImFzZCI8L3NlbGVjdGlvbj4pOworICAgICAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVBhcmFtZXRlci9iZWZvcmVEaWFtb25kMlJhdy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVBhcmFtZXRlci9iZWZvcmVEaWFtb25kMlJhdy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI5NzZlZjQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlUGFyYW1ldGVyL2JlZm9yZURpYW1vbmQyUmF3LmphdmEKQEAgLTAsMCArMSw2IEBACitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdAorY2xhc3MgVGVzdCB7CisgIHZvaWQgZm9vKCkgeworICAgIEFycmF5TGlzdCBsID0gPHNlbGVjdGlvbj5uZXcgQXJyYXlMaXN0PD4oKTwvc2VsZWN0aW9uPjsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VQYXJhbWV0ZXIvYmVmb3JlRGlhbW9uZE9jY3VycmVuY2VzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlUGFyYW1ldGVyL2JlZm9yZURpYW1vbmRPY2N1cnJlbmNlcy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI5NmFhMWEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlUGFyYW1ldGVyL2JlZm9yZURpYW1vbmRPY2N1cnJlbmNlcy5qYXZhCkBAIC0wLDAgKzEsMTMgQEAKK2ltcG9ydCBqYXZhLnV0aWwuKjsKKworY2xhc3MgVGVzdCB7CisgIHZvaWQgZm9vKCkgeworICAgIExpc3Q8U3RyaW5nPiBscyA9IDxzZWxlY3Rpb24+bmV3IEFycmF5TGlzdDw+KCk8L3NlbGVjdGlvbj47CisgICAgTGlzdDxTdHJpbmc+IGxzcyA9IG5ldyBBcnJheUxpc3Q8PigpOworICAgIExpc3Q8SW50ZWdlcj4gbGkgPSBuZXcgQXJyYXlMaXN0PD4oKTsKKyAgfQorICAKKyAgdm9pZCBiYXIoKSB7CisgICAgZm9vKCk7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlUGFyYW1ldGVyL2JlZm9yZUVuY2xvc2luZ1dpdGhQYXJhbURlbGV0aW9uLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlUGFyYW1ldGVyL2JlZm9yZUVuY2xvc2luZ1dpdGhQYXJhbURlbGV0aW9uLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjMxOTIwMQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VQYXJhbWV0ZXIvYmVmb3JlRW5jbG9zaW5nV2l0aFBhcmFtRGVsZXRpb24uamF2YQpAQCAtMCwwICsxLDI4IEBACisvKgorICogQ29weXJpZ2h0IDIwMDAtMjAxMSBKZXRCcmFpbnMgcy5yLm8uCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworY2xhc3MgQUFBQSB7CisgIHZvaWQgZm9vKCkgeworICAgIHNhbXBsZUVuY2xvc2luZygiQSIpOworICB9CisKKyAgcHJpdmF0ZSB2b2lkIHNhbXBsZUVuY2xvc2luZyhmaW5hbCBTdHJpbmcgcykgeworICAgIG5ldyBBQUFBKCkgeworICAgICAgdm9pZCBiYXIoKSB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbig8c2VsZWN0aW9uPnMgKyAiIjwvc2VsZWN0aW9uPik7CisgICAgICB9CisgICAgfS5iYXIoKTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVBhcmFtZXRlci9iZWZvcmVFbnVtcy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVBhcmFtZXRlci9iZWZvcmVFbnVtcy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJjZmQ3YzQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlUGFyYW1ldGVyL2JlZm9yZUVudW1zLmphdmEKQEAgLTAsMCArMSw2IEBACitwdWJsaWMgZW51bSBFeworICBhLCBiOworICBwdWJsaWMgRSgpIHsKKyAgICBTeXN0ZW0ub3V0LnByaW50KDxzZWxlY3Rpb24+Mjwvc2VsZWN0aW9uPik7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlUGFyYW1ldGVyL2JlZm9yZUV4cGVjdGVkVHlwZS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVBhcmFtZXRlci9iZWZvcmVFeHBlY3RlZFR5cGUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNDhmY2UwCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVBhcmFtZXRlci9iZWZvcmVFeHBlY3RlZFR5cGUuamF2YQpAQCAtMCwwICsxLDEyIEBACitjbGFzcyBUZXN0IHsKKyAgICB2b2lkIGYgKFN0cmluZyBzKSB7fQorCisgICAgdm9pZCB1ICgpIHsKKyAgICAgICAgZig8c2VsZWN0aW9uPm5hbWU8L3NlbGVjdGlvbj4pOworICAgIH0KKworICAgIHZvaWQgeSAoKSB7CisgICAgICAgIFN0cmluZyBuYW1lID0gIiI7CisgICAgICAgIHUoKTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlUGFyYW1ldGVyL2JlZm9yZUZpZWxkQWNjZXNzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlUGFyYW1ldGVyL2JlZm9yZUZpZWxkQWNjZXNzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTJhOTYzNgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VQYXJhbWV0ZXIvYmVmb3JlRmllbGRBY2Nlc3MuamF2YQpAQCAtMCwwICsxLDE0IEBACitjbGFzcyBUZXN0IHsKKyAgICBpbnQgbWV0aG9kKGludCBhLCBpbnQgYikgeworICAgICAgICByZXR1cm4gPHNlbGVjdGlvbj5pPC9zZWxlY3Rpb24+OworICAgIH0KKyAgICBpbnQgaTsKK30KKworY2xhc3MgWFRlc3QgeworICAgIGludCBuKCkgeworICAgICAgICBUZXN0IHQ7CisgICAgICAgIAorICAgICAgICByZXR1cm4gdC5tZXRob2QoMSwgMik7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VQYXJhbWV0ZXIvYmVmb3JlRmllbGRXaXRoR2V0dGVyUmVwbGFjZW1lbnQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VQYXJhbWV0ZXIvYmVmb3JlRmllbGRXaXRoR2V0dGVyUmVwbGFjZW1lbnQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MjVjOTlkCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVBhcmFtZXRlci9iZWZvcmVGaWVsZFdpdGhHZXR0ZXJSZXBsYWNlbWVudC5qYXZhCkBAIC0wLDAgKzEsMTYgQEAKK2NsYXNzIFRlc3QgeworICAgIGludCBpOworICAgIAorICAgIHB1YmxpYyBpbnQgZ2V0SSgpIHsgcmV0dXJuIGk7IH0KKyAgICAKKyAgICBpbnQgbWV0aG9kKGludCBhKSB7CisgICAgICAgIHJldHVybiA8c2VsZWN0aW9uPmEgKyBpPC9zZWxlY3Rpb24+OworICAgIH0KK30KKworY2xhc3MgWFhYIHsKKyAgICBwdWJsaWMgaW50IG0oKSB7CisgICAgICAgIFRlc3QgdDsKKyAgICAgICAgcmV0dXJuIHQubWV0aG9kKDEpOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlUGFyYW1ldGVyL2JlZm9yZUZpZWxkV2l0aEluYWNjZXNzaWJsZUdldHRlclJlcGxhY2VtZW50LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlUGFyYW1ldGVyL2JlZm9yZUZpZWxkV2l0aEluYWNjZXNzaWJsZUdldHRlclJlcGxhY2VtZW50LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjQwNzlmMQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VQYXJhbWV0ZXIvYmVmb3JlRmllbGRXaXRoSW5hY2Nlc3NpYmxlR2V0dGVyUmVwbGFjZW1lbnQuamF2YQpAQCAtMCwwICsxLDE2IEBACitjbGFzcyBUZXN0IHsKKyAgICBwdWJsaWMgaW50IGk7CisgICAgCisgICAgcHVibGljIGludCBnZXRJKCkgeyByZXR1cm4gaTsgfQorICAgIAorICAgIGludCBtZXRob2QoaW50IGEpIHsKKyAgICAgICAgcmV0dXJuIDxzZWxlY3Rpb24+YSArIGk8L3NlbGVjdGlvbj47CisgICAgfQorfQorCitjbGFzcyBYWFggeworICAgIHB1YmxpYyBpbnQgbSgpIHsKKyAgICAgICAgVGVzdCB0OworICAgICAgICByZXR1cm4gdC5tZXRob2QoMSk7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VQYXJhbWV0ZXIvYmVmb3JlR2VuZXJhdGVEZWxlZ2F0ZS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVBhcmFtZXRlci9iZWZvcmVHZW5lcmF0ZURlbGVnYXRlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGVhNjk0MAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VQYXJhbWV0ZXIvYmVmb3JlR2VuZXJhdGVEZWxlZ2F0ZS5qYXZhCkBAIC0wLDAgKzEsMTggQEAKK2NsYXNzIFRlc3QgeworICAgIHB1YmxpYyBpbnQgbShpbnQgYSwgaW50IGIpIHsKKyAgICAgICAgaWYoYSA+IGIpIHsKKyAgICAgICAgICAgcmV0dXJuIDxzZWxlY3Rpb24+MDwvc2VsZWN0aW9uPjsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKyAgICB9Cit9CisKK2NsYXNzIFRlc3QxIHsKKyAgVGVzdCB0OworCisgIHB1YmxpYyBpbnQgbihpbnQgdikgeworICAgIHJldHVybiB0Lm0odiwgMSk7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlUGFyYW1ldGVyL2JlZm9yZUdlbmVyYXRlRGVsZWdhdGVJblN1cGVyQ2xhc3MuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VQYXJhbWV0ZXIvYmVmb3JlR2VuZXJhdGVEZWxlZ2F0ZUluU3VwZXJDbGFzcy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI2YTc5ZjkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlUGFyYW1ldGVyL2JlZm9yZUdlbmVyYXRlRGVsZWdhdGVJblN1cGVyQ2xhc3MuamF2YQpAQCAtMCwwICsxLDE0IEBACithYnN0cmFjdCBjbGFzcyBBIHsKKyAgYWJzdHJhY3Qgdm9pZCB4eHgoKTsKK30KKworY2xhc3MgQiBpbXBsZW1lbnRzIEEgeworICBwdWJsaWMgdm9pZCB4eHgoKSB7CisgICAgU3lzdGVtLm91dC5wcmludGxuKDxzZWxlY3Rpb24+MjM5PC9zZWxlY3Rpb24+KTsKKyAgfQorCisgIHN0YXRpYyB7CisgICAgQSBhID0gbmV3IEIoKTsKKyAgICBhLnh4eCgpOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVBhcmFtZXRlci9iZWZvcmVHZW5lcmF0ZURlbGVnYXRlSW5TdXBlckludGVyZmFjZS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVBhcmFtZXRlci9iZWZvcmVHZW5lcmF0ZURlbGVnYXRlSW5TdXBlckludGVyZmFjZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJlNmMyMGQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlUGFyYW1ldGVyL2JlZm9yZUdlbmVyYXRlRGVsZWdhdGVJblN1cGVySW50ZXJmYWNlLmphdmEKQEAgLTAsMCArMSwxNCBAQAoraW50ZXJmYWNlIEEgeworICB2b2lkIHh4eCgpOworfQorCitjbGFzcyBCIGltcGxlbWVudHMgQSB7CisgIHB1YmxpYyB2b2lkIHh4eCgpIHsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oPHNlbGVjdGlvbj4yMzk8L3NlbGVjdGlvbj4pOworICB9CisKKyAgc3RhdGljIHsKKyAgICBBIGEgPSBuZXcgQigpOworICAgIGEueHh4KCk7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlUGFyYW1ldGVyL2JlZm9yZUdlbmVyYXRlRGVsZWdhdGVOb0FyZ3MuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VQYXJhbWV0ZXIvYmVmb3JlR2VuZXJhdGVEZWxlZ2F0ZU5vQXJncy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ4MTk1ZmYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlUGFyYW1ldGVyL2JlZm9yZUdlbmVyYXRlRGVsZWdhdGVOb0FyZ3MuamF2YQpAQCAtMCwwICsxLDEzIEBACitjbGFzcyBUZXN0IHsKKyAgICBwdWJsaWMgaW50IG0oKSB7CisgICAgICAgIHJldHVybiA8c2VsZWN0aW9uPjA8L3NlbGVjdGlvbj47CisgICAgfQorfQorCitjbGFzcyBUZXN0MSB7CisgIFRlc3QgdDsKKworICBwdWJsaWMgaW50IG4oaW50IHYpIHsKKyAgICByZXR1cm4gdC5tKCk7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlUGFyYW1ldGVyL2JlZm9yZUdlbmVyYXRlRGVsZWdhdGVSZW1vdmVQYXJhbWV0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VQYXJhbWV0ZXIvYmVmb3JlR2VuZXJhdGVEZWxlZ2F0ZVJlbW92ZVBhcmFtZXRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdiNmQ1ODUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlUGFyYW1ldGVyL2JlZm9yZUdlbmVyYXRlRGVsZWdhdGVSZW1vdmVQYXJhbWV0ZXIuamF2YQpAQCAtMCwwICsxLDUgQEAKK3B1YmxpYyBjbGFzcyBCYXIgeworICAgIHB1YmxpYyBpbnQgYmF6KGJ5dGUgYmxhaCkgeworICAgICAgICByZXR1cm4gPHNlbGVjdGlvbj48Y2FyZXQ+YmxhaCArIGJsYWggKyAzPC9zZWxlY3Rpb24+OworICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VQYXJhbWV0ZXIvYmVmb3JlR2V0dGVyUXVhbGlmaWVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlUGFyYW1ldGVyL2JlZm9yZUdldHRlclF1YWxpZmllci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFjOTM3ZGMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlUGFyYW1ldGVyL2JlZm9yZUdldHRlclF1YWxpZmllci5qYXZhCkBAIC0wLDAgKzEsMjIgQEAKK3B1YmxpYyBjbGFzcyBUZXN0IHsKKyAgICBwcml2YXRlIFN0cmluZyBteVN0cjsKKworICAgIHB1YmxpYyBTdHJpbmcgZ2V0TXlTdHIoKSB7CisgICAgICAgIHJldHVybiBteVN0cjsKKyAgICB9CisKKyAgICB2b2lkIGZvbygpIHsKKyAgICAgICAgbmV3IFJ1bm5hYmxlKCl7CisgICAgICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKKyAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbig8c2VsZWN0aW9uPm15U3RyPC9zZWxlY3Rpb24+KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfTsKKyAgICB9Cit9CisKK2NsYXNzIFggeworICAgcHVibGljIHZvaWQgbigpIHsKKyAgICAgICBuZXcgVGVzdCgpLmZvbygpOworICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VQYXJhbWV0ZXIvYmVmb3JlSW1wbGljaXREZWZhdWx0Q29uc3RydWN0b3IuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VQYXJhbWV0ZXIvYmVmb3JlSW1wbGljaXREZWZhdWx0Q29uc3RydWN0b3IuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MGEwNmMwCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVBhcmFtZXRlci9iZWZvcmVJbXBsaWNpdERlZmF1bHRDb25zdHJ1Y3Rvci5qYXZhCkBAIC0wLDAgKzEsMTMgQEAKK2NsYXNzIEEgeworICAgIGludCBpOworICAgIHB1YmxpYyBBKCkgeworICAgICAgICBpID0gPHNlbGVjdGlvbj4yNzwvc2VsZWN0aW9uPjsKKyAgICB9Cit9CisKK2NsYXNzIEIgZXh0ZW5kcyBBIHsKK30KKworY2xhc3MgVXNhZ2UgeworICAgIEEgYSA9IG5ldyBCKCk7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVBhcmFtZXRlci9iZWZvcmVJbXBsaWNpdFN1cGVyQ2FsbC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVBhcmFtZXRlci9iZWZvcmVJbXBsaWNpdFN1cGVyQ2FsbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMwZDAwOWIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlUGFyYW1ldGVyL2JlZm9yZUltcGxpY2l0U3VwZXJDYWxsLmphdmEKQEAgLTAsMCArMSwxOCBAQAorY2xhc3MgQSB7CisgICAgaW50IGk7CisgICAgcHVibGljIEEoKSB7CisgICAgICAgIGkgPSA8c2VsZWN0aW9uPjI3PC9zZWxlY3Rpb24+OworICAgIH0KK30KKworY2xhc3MgQiBleHRlbmRzIEEgeworICAgIGludCBrOworCisgICAgcHVibGljIEIoKSB7CisgICAgICAgIGsgPSAxMDsKKyAgICB9Cit9CisKK2NsYXNzIFVzYWdlIHsKKyAgICBBIGEgPSBuZXcgQigpOworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VQYXJhbWV0ZXIvYmVmb3JlSW5jb21wbGV0ZUVudW1EZWZpbml0aW9uLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlUGFyYW1ldGVyL2JlZm9yZUluY29tcGxldGVFbnVtRGVmaW5pdGlvbi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxYTNmN2MKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlUGFyYW1ldGVyL2JlZm9yZUluY29tcGxldGVFbnVtRGVmaW5pdGlvbi5qYXZhCkBAIC0wLDAgKzEsMTAgQEAKK2VudW0gVGVzdCB7CisgIFJvb3QoKTsKKworICBwdWJsaWMgVGVzdChTdHJpbmcgZGVzY3JpcHRpb24sIGludCBwb3NpdGlvbikgeworICAgIFN5c3RlbS5vdXQucHJpbnRsbihkZXNjcmlwdGlvbik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKDxzZWxlY3Rpb24+cG9zaXRpb24gKyAiIjwvc2VsZWN0aW9uPik7CisgIH0KKworfQorCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlUGFyYW1ldGVyL2JlZm9yZUluY29tcGxldGVWYXJhcmcuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VQYXJhbWV0ZXIvYmVmb3JlSW5jb21wbGV0ZVZhcmFyZy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg4NmM5MTMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlUGFyYW1ldGVyL2JlZm9yZUluY29tcGxldGVWYXJhcmcuamF2YQpAQCAtMCwwICsxLDEwIEBACitjbGFzcyBDIHsKKyAgICB2b2lkIG1ldGhvZChpbnQgaywgU3RyaW5nLi4uIHMpIHsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKHNbPHNlbGVjdGlvbj5rPC9zZWxlY3Rpb24+XSk7CisgICAgfQorCisgICAgeworICAgICAgICBtZXRob2QoImEiLCAiYiIsICJjIik7CisgICAgICAgIG1ldGhvZCgpOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlUGFyYW1ldGVyL2JlZm9yZUluY29ycmVjdFNjb3BlLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlUGFyYW1ldGVyL2JlZm9yZUluY29ycmVjdFNjb3BlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzcwMWMxNQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VQYXJhbWV0ZXIvYmVmb3JlSW5jb3JyZWN0U2NvcGUuamF2YQpAQCAtMCwwICsxLDE3IEBACitwdWJsaWMgY2xhc3MgSW5uZXJPdXRlciB7CisgIFN0cmluZyBhbk9iamVjdCA9ICIiOworCisgIGludGVyZmFjZSBJbm5lciB7CisgICAgdm9pZCBleGVjKCk7CisgIH0KKworICBJbm5lciBpbnN0YW5jZSA9IG5ldyBJbm5lcigpIHsKKyAgICBwdWJsaWMgdm9pZCBleGVjKCkgeworICAgICAgPHNlbGVjdGlvbj5hbk9iamVjdDwvc2VsZWN0aW9uPi5jaGFyQXQoMSk7CisgICAgfQorICB9OworCisgIHZvaWQgZm9vKCkgeworICAgaW5zdGFuY2UuZXhlYygpOworICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlUGFyYW1ldGVyL2JlZm9yZUludGVybmFsU2lkZUVmZmVjdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVBhcmFtZXRlci9iZWZvcmVJbnRlcm5hbFNpZGVFZmZlY3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MjA0NDQ4Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVBhcmFtZXRlci9iZWZvcmVJbnRlcm5hbFNpZGVFZmZlY3QuamF2YQpAQCAtMCwwICsxLDIxIEBACitpbXBvcnQgamF2YS51dGlsLio7CisKK3B1YmxpYyBjbGFzcyBUZXN0IHsKKyAgICBpbnQgZmllbGQ7CisgICAgaW50IG1ldGhvZCgpIHsKKyAgICAgICAgcmV0dXJuIDxzZWxlY3Rpb24+ZmllbGQ8L3NlbGVjdGlvbj47CisgICAgfQorfQorCitwdWJsaWMgY2xhc3MgVXNhZ2UgeworICAgIGludCB1c2FnZShUZXN0W10gdGVzdHMpIHsKKyAgICAgICAgaW50IHN1bSA9IDA7CisgICAgICAgIGZvcihpbnQgaSA9IDA7IGkgPCB0ZXN0cy5sZW5ndGg7KSB7CisgICAgICAgICAgICBzdW0gKz0gdGVzdHNbaSsrXS5tZXRob2QoKTsKKyAgICAgICAgfQorICAgICAgICBMaXN0IGxpc3QgPSBBcnJheXMuYXNMaXN0KHRlc3RzKTsKKyAgICAgICAgZm9yKGludCBpID0gMDsgaSA8IGxpc3Quc2l6ZSgpOykgeworICAgICAgICAgICAgc3VtICs9ICgoVGVzdClsaXN0LmdldChpKyspKS5tZXRob2QoKTsgICAgICAgIAorICAgICAgICB9CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VQYXJhbWV0ZXIvYmVmb3JlTG9jYWxWYXJEZWNsYXJhdGlvbi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVBhcmFtZXRlci9iZWZvcmVMb2NhbFZhckRlY2xhcmF0aW9uLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTE4YTEwNAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VQYXJhbWV0ZXIvYmVmb3JlTG9jYWxWYXJEZWNsYXJhdGlvbi5qYXZhCkBAIC0wLDAgKzEsNSBAQAorY2xhc3MgRm9vIHsKKyAgICB2b2lkIGYoKSB7CisgICAgICAgIGludCBrID0gPHNlbGVjdGlvbj4wPC9zZWxlY3Rpb24+OworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlUGFyYW1ldGVyL2JlZm9yZUxvY2FsVmFyU2VsZWN0aW9uLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlUGFyYW1ldGVyL2JlZm9yZUxvY2FsVmFyU2VsZWN0aW9uLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTkwNjExZgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VQYXJhbWV0ZXIvYmVmb3JlTG9jYWxWYXJTZWxlY3Rpb24uamF2YQpAQCAtMCwwICsxLDEwIEBACitjbGFzcyBUZXN0IHsKKyAgICBwdWJsaWMgdm9pZCB0ZXN0KCkgeworICAgICAgICBmaW5hbCBTdHJpbmcgPHNlbGVjdGlvbj5zPC9zZWxlY3Rpb24+ID0gIiI7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihzKTsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCB1c2UoKSB7CisgICAgICAgIHRlc3QoKTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVBhcmFtZXRlci9iZWZvcmVNZXRob2RBY2Nlc3MuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VQYXJhbWV0ZXIvYmVmb3JlTWV0aG9kQWNjZXNzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjZkMGM4MAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VQYXJhbWV0ZXIvYmVmb3JlTWV0aG9kQWNjZXNzLmphdmEKQEAgLTAsMCArMSwxOCBAQAorY2xhc3MgVGVzdCB7CisgICAgaW50IG1ldGhvZChpbnQgYSwgaW50IGIpIHsKKyAgICAgICAgcmV0dXJuIDxzZWxlY3Rpb24+YW5vdGhlck1ldGhvZChhICsgYik8L3NlbGVjdGlvbj47CisgICAgfQorICAgIGludCBpOworICAgIAorICAgIGludCBhbm90aGVyTWV0aG9kKGludCB4KSB7IAorICAgICAgICByZXR1cm4geDsKKyAgICB9Cit9CisKK2NsYXNzIFhUZXN0IHsKKyAgICBpbnQgbigpIHsKKyAgICAgICAgVGVzdCB0OworICAgICAgICAKKyAgICAgICAgcmV0dXJuIHQubWV0aG9kKDEsIDIpOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlUGFyYW1ldGVyL2JlZm9yZU1ldGhvZFVzYWdlSW5UaGlzTWV0aG9kSW5oZXJpdG9yLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlUGFyYW1ldGVyL2JlZm9yZU1ldGhvZFVzYWdlSW5UaGlzTWV0aG9kSW5oZXJpdG9yLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjM3MDhhZgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VQYXJhbWV0ZXIvYmVmb3JlTWV0aG9kVXNhZ2VJblRoaXNNZXRob2RJbmhlcml0b3IuamF2YQpAQCAtMCwwICsxLDExIEBACitjbGFzcyBDIHsKKyAgaW50IGZvbyhpbnQgeCkgeworICAgICByZXR1cm4gPHNlbGVjdGlvbj54KzE8L3NlbGVjdGlvbj47CisgIH0KK30KKworY2xhc3MgRCBleHRlbmRzIEMgeworICBpbnQgZm9vKGludCB4KSB7CisgICAgcmV0dXJuIHN1cGVyLmZvbyh4KTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VQYXJhbWV0ZXIvYmVmb3JlTWV0aG9kV2l0aG91dFBhcmFtcy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVBhcmFtZXRlci9iZWZvcmVNZXRob2RXaXRob3V0UGFyYW1zLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWYxZGYxNAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VQYXJhbWV0ZXIvYmVmb3JlTWV0aG9kV2l0aG91dFBhcmFtcy5qYXZhCkBAIC0wLDAgKzEsMTIgQEAKK2NsYXNzIFRlc3QgeworICAgIGludCBtKCkgeworICAgICAgICByZXR1cm4gPHNlbGVjdGlvbj4wPC9zZWxlY3Rpb24+OworICAgIH0KK30KKworY2xhc3MgWDMgeworICAgIGludCBuKCkgeworICAgICAgICBUZXN0IHQ7CisgICAgICAgIHJldHVybiB0Lm0oKTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVBhcmFtZXRlci9iZWZvcmVOb1VzYWdlcy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVBhcmFtZXRlci9iZWZvcmVOb1VzYWdlcy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFlYmU1YzkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlUGFyYW1ldGVyL2JlZm9yZU5vVXNhZ2VzLmphdmEKQEAgLTAsMCArMSw1IEBACitjbGFzcyBUZXN0IHsKKyAgIHB1YmxpYyBpbnQgbShpbnQgYSwgaW50IGIpIHsKKwlyZXR1cm4gPHNlbGVjdGlvbj4wPC9zZWxlY3Rpb24+OworICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VQYXJhbWV0ZXIvYmVmb3JlTnVsbC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVBhcmFtZXRlci9iZWZvcmVOdWxsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2UwZjIwMAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VQYXJhbWV0ZXIvYmVmb3JlTnVsbC5qYXZhCkBAIC0wLDAgKzEsNiBAQAorY2xhc3MgVGVzdCB7CisgICAgcHVibGljIFRlc3QgbWV0aG9kKCkgeworICAgICAgICByZXR1cm4gPHNlbGVjdGlvbj5udWxsPC9zZWxlY3Rpb24+OworICAgIH0KK30KKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVBhcmFtZXRlci9iZWZvcmVQYXJhbWV0ZXJJbkZvci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVBhcmFtZXRlci9iZWZvcmVQYXJhbWV0ZXJJbkZvci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA2NmM2NGMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlUGFyYW1ldGVyL2JlZm9yZVBhcmFtZXRlckluRm9yLmphdmEKQEAgLTAsMCArMSw5IEBACitpbXBvcnQgamF2YS51dGlsLio7CisKK2NsYXNzIFhYIHsKKyAgICBwdWJsaWMgdm9pZCBnKExpc3QgbCkgeworICAgICAgICBmb3IoSXRlcmF0b3IgPGNhcmV0Pml0ID0gbC5pdGVyYXRvcigpOyBpdC5oYXNOZXh0KCk7KSB7CisgICAgICAgICAgICBPYmplY3QgbyA9IGl0Lm5leHQoKToKKyAgICAgICAgfQorICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlUGFyYW1ldGVyL2JlZm9yZVBhcmFtZXRlckphdmFEb2MxLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlUGFyYW1ldGVyL2JlZm9yZVBhcmFtZXRlckphdmFEb2MxLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODdkODQ3NgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VQYXJhbWV0ZXIvYmVmb3JlUGFyYW1ldGVySmF2YURvYzEuamF2YQpAQCAtMCwwICsxLDcgQEAKK2NsYXNzIFRlc3QgeworICAgIC8qKgorICAgICAqLworICAgIGludCBtZXRob2QoKSB7CisgICAgICAgIHJldHVybiA8c2VsZWN0aW9uPjEwPC9zZWxlY3Rpb24+OworICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VQYXJhbWV0ZXIvYmVmb3JlUGFyYW1ldGVySmF2YURvYzIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VQYXJhbWV0ZXIvYmVmb3JlUGFyYW1ldGVySmF2YURvYzIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNWY3YTRjCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVBhcmFtZXRlci9iZWZvcmVQYXJhbWV0ZXJKYXZhRG9jMi5qYXZhCkBAIC0wLDAgKzEsOCBAQAorY2xhc3MgVGVzdCB7CisgICAgLyoqCisgICAgICogQHBhcmFtIHMKKyAgICAgKi8KKyAgICBpbnQgbWV0aG9kKFN0cmluZyBzKSB7CisgICAgICAgIHJldHVybiA8c2VsZWN0aW9uPjEwPC9zZWxlY3Rpb24+OworICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VQYXJhbWV0ZXIvYmVmb3JlUGFyYW1ldGVySmF2YURvYzMuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VQYXJhbWV0ZXIvYmVmb3JlUGFyYW1ldGVySmF2YURvYzMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMmRmY2Q2Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVBhcmFtZXRlci9iZWZvcmVQYXJhbWV0ZXJKYXZhRG9jMy5qYXZhCkBAIC0wLDAgKzEsOCBAQAorY2xhc3MgVGVzdCB7CisgICAgLyoqCisgICAgICogIEluY29tcGxldGUgSmF2YURvYworICAgICAqLworICAgIGludCBtZXRob2QoU3RyaW5nIHMpIHsKKyAgICAgICAgcmV0dXJuIDxzZWxlY3Rpb24+MTA8L3NlbGVjdGlvbj47CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVBhcmFtZXRlci9iZWZvcmVQYXJhbWV0ZXJKYXZhRG9jQmVmb3JlVmFyYXJnLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlUGFyYW1ldGVyL2JlZm9yZVBhcmFtZXRlckphdmFEb2NCZWZvcmVWYXJhcmcuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZjU3NjUyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVBhcmFtZXRlci9iZWZvcmVQYXJhbWV0ZXJKYXZhRG9jQmVmb3JlVmFyYXJnLmphdmEKQEAgLTAsMCArMSwxMyBAQAorY2xhc3MgQyB7CisgICAgLyoqCisgICAgICogQHBhcmFtIHMKKyAgICAgKi8KKyAgICB2b2lkIG1ldGhvZChTdHJpbmcuLi4gcykgeworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oc1s8c2VsZWN0aW9uPjA8L3NlbGVjdGlvbj5dKTsKKyAgICB9CisKKyAgICB7CisgICAgICAgIG1ldGhvZCgiYSIsICJiIiwgImMiKTsKKyAgICAgICAgbWV0aG9kKCk7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VQYXJhbWV0ZXIvYmVmb3JlUGFyYW1ldGVyU3Vic3RpdHV0aW9uLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlUGFyYW1ldGVyL2JlZm9yZVBhcmFtZXRlclN1YnN0aXR1dGlvbi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVmNTQ1NWIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlUGFyYW1ldGVyL2JlZm9yZVBhcmFtZXRlclN1YnN0aXR1dGlvbi5qYXZhCkBAIC0wLDAgKzEsMTMgQEAKK2NsYXNzIFRlc3QgeworICAgIGludCBtZXRob2QoaW50IGEsIGludCBiKSB7CisgICAgICAgIHJldHVybiA8c2VsZWN0aW9uPmEgKyBiPC9zZWxlY3Rpb24+OworICAgIH0KK30KKworY2xhc3MgWFRlc3QgeworICAgIGludCBuKCkgeworICAgICAgICBUZXN0IHQ7CisgICAgICAgIAorICAgICAgICByZXR1cm4gdC5tZXRob2QoMSwgMik7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VQYXJhbWV0ZXIvYmVmb3JlUHJlc2VydmVEaWFtb25kT2NjdXJyZW5jZXMuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VQYXJhbWV0ZXIvYmVmb3JlUHJlc2VydmVEaWFtb25kT2NjdXJyZW5jZXMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYmY5YTg1Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVBhcmFtZXRlci9iZWZvcmVQcmVzZXJ2ZURpYW1vbmRPY2N1cnJlbmNlcy5qYXZhCkBAIC0wLDAgKzEsMjIgQEAKKworcHVibGljIGNsYXNzIFRlc3RDb21wbGV0aW9uIHsKKworICAgIHB1YmxpYyBzdGF0aWMgPFQsIFY+IFBhcmFsbGVsUGlwZWxpbmU8VCwgVj4gdGVzdChUIGJhc2UsIFYgbmV3U3RhZ2UsIFQgdXBzdHJlYW0pIHsKKyAgICAgICAgaWYgKGJhc2UgIT0gbnVsbCl7CisgICAgICAgICAgICByZXR1cm4gPHNlbGVjdGlvbj5uZXcgUGFyYWxsZWxQaXBlbGluZTw+KGJhc2UsIG5ld1N0YWdlKTwvc2VsZWN0aW9uPjsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHJldHVybiBuZXcgUGFyYWxsZWxQaXBlbGluZTw+KHVwc3RyZWFtLCBuZXdTdGFnZSk7CisgICAgICAgIH0KKworICAgIH0KKworCisgICAgdm9pZCBmKCkgeworICAgICAgICB0ZXN0KG51bGwsIG51bGwsIG51bGwpOworICAgIH0KKyAgICBwcml2YXRlIHN0YXRpYyBjbGFzcyBQYXJhbGxlbFBpcGVsaW5lPFQsIFY+IHsKKyAgICAgICAgcHVibGljIFBhcmFsbGVsUGlwZWxpbmUoVCBwMCwgViBwMSkgeworICAgICAgICB9CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVBhcmFtZXRlci9iZWZvcmVRdWFsaWZpZWROZXcuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VQYXJhbWV0ZXIvYmVmb3JlUXVhbGlmaWVkTmV3LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGY3MDU5MgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VQYXJhbWV0ZXIvYmVmb3JlUXVhbGlmaWVkTmV3LmphdmEKQEAgLTAsMCArMSwxMCBAQAorY2xhc3MgVGVzdCB7CisgICAgY2xhc3MgQSB7CisgICAgICAgIGNsYXNzIEIgeworICAgICAgICB9CisgICAgfQorIAorICAgIE9iamVjdCBtZXRob2QoKSB7CisgICAgICAgIHJldHVybiA8c2VsZWN0aW9uPm5ldyBBKCkubmV3IEIoKTwvc2VsZWN0aW9uPjsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVBhcmFtZXRlci9iZWZvcmVSZW1vdmVQYXJhbWV0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VQYXJhbWV0ZXIvYmVmb3JlUmVtb3ZlUGFyYW1ldGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2I2ZDU4NQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VQYXJhbWV0ZXIvYmVmb3JlUmVtb3ZlUGFyYW1ldGVyLmphdmEKQEAgLTAsMCArMSw1IEBACitwdWJsaWMgY2xhc3MgQmFyIHsKKyAgICBwdWJsaWMgaW50IGJheihieXRlIGJsYWgpIHsKKyAgICAgICAgcmV0dXJuIDxzZWxlY3Rpb24+PGNhcmV0PmJsYWggKyBibGFoICsgMzwvc2VsZWN0aW9uPjsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlUGFyYW1ldGVyL2JlZm9yZVJlbW92ZVBhcmFtZXRlckFmdGVyVmFyaWFibGUuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VQYXJhbWV0ZXIvYmVmb3JlUmVtb3ZlUGFyYW1ldGVyQWZ0ZXJWYXJpYWJsZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRmMjk3ZDkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlUGFyYW1ldGVyL2JlZm9yZVJlbW92ZVBhcmFtZXRlckFmdGVyVmFyaWFibGUuamF2YQpAQCAtMCwwICsxLDYgQEAKK3B1YmxpYyBjbGFzcyBCYXIgeworICAgIHB1YmxpYyBpbnQgYmF6KGJ5dGUgYmxhaCkgeworICAgICAgICBpbnQgPGNhcmV0PjxzZWxlY3Rpb24+dmFyPC9zZWxlY3Rpb24+ID0gYmxhaCArIDU7CisgICAgICAgIHJldHVybiB2YXIgKyA5OworICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VQYXJhbWV0ZXIvYmVmb3JlUmVtb3ZlUGFyYW1ldGVySW5IaWVyYXJjaHkuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VQYXJhbWV0ZXIvYmVmb3JlUmVtb3ZlUGFyYW1ldGVySW5IaWVyYXJjaHkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNDA0ZGQzCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVBhcmFtZXRlci9iZWZvcmVSZW1vdmVQYXJhbWV0ZXJJbkhpZXJhcmNoeS5qYXZhCkBAIC0wLDAgKzEsMTAgQEAKK3B1YmxpYyBjbGFzcyBCYXIgeworICAgIHB1YmxpYyBpbnQgYmF6KGJ5dGUgYmxhaCkgeworICAgICAgICByZXR1cm4gPHNlbGVjdGlvbj5ibGFoICsgMzwvc2VsZWN0aW9uPjsKKyAgICB9Cit9CitjbGFzcyBTIGV4dGVuZHMgQmFyIHsKKyAgICBwdWJsaWMgaW50IGJheihieXRlIGJsYWgpIHsKKyAgICAgICAgcmV0dXJuIHN1cGVyLmJheigoYnl0ZSkgMCk7ICAgIC8vVG8gY2hhbmdlIGJvZHkgb2Ygb3ZlcnJpZGRlbiBtZXRob2RzIHVzZSBGaWxlIHwgU2V0dGluZ3MgfCBGaWxlIFRlbXBsYXRlcy4KKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVBhcmFtZXRlci9iZWZvcmVSZW1vdmVQYXJhbWV0ZXJXaXRoSmF2YWRvYy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVBhcmFtZXRlci9iZWZvcmVSZW1vdmVQYXJhbWV0ZXJXaXRoSmF2YWRvYy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVmODE3NDAKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlUGFyYW1ldGVyL2JlZm9yZVJlbW92ZVBhcmFtZXRlcldpdGhKYXZhZG9jLmphdmEKQEAgLTAsMCArMSwxMSBAQAorcHVibGljIGNsYXNzIEJhciB7CisKKyAgICAvKioKKyAgICAgKgorICAgICAqIEBwYXJhbSBsaW5lCisgICAgICogQHBhcmFtIGZpbGUKKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBwcmludEVycm9yKFN0cmluZyBkZXRhaWwsIGludCBsaW5lLCBTdHJpbmcgZmlsZSkgeworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oPHNlbGVjdGlvbj5maWxlICsgIjoiICtsaW5lPC9zZWxlY3Rpb24+ICsgIiBlcnJvcjogIiArIGRldGFpbCk7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVBhcmFtZXRlci9iZWZvcmVSZXBsYWNlQWxsQW5kRGVsZXRlVW51c2VkLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlUGFyYW1ldGVyL2JlZm9yZVJlcGxhY2VBbGxBbmREZWxldGVVbnVzZWQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MjBmNWU1Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVBhcmFtZXRlci9iZWZvcmVSZXBsYWNlQWxsQW5kRGVsZXRlVW51c2VkLmphdmEKQEAgLTAsMCArMSwxMSBAQAorcHVibGljIGNsYXNzIFBhcmFtZXRlcnMgeworICAgICAgICBwdWJsaWMgdm9pZCBzdWJqZWN0KGludCBwKSB7CisgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKDxzZWxlY3Rpb24+cCsxPC9zZWxlY3Rpb24+KTsKKyAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4ocCsxKTsKKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyB2b2lkIGNvbnRleHQoKSB7CisgICAgICAgICAgICAgICAgc3ViamVjdCgxKTsKKyAgICAgICAgICAgICAgICBzdWJqZWN0KDIpOworICAgICAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVBhcmFtZXRlci9iZWZvcmVTZWxmUmVmZXJlbmNlLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlUGFyYW1ldGVyL2JlZm9yZVNlbGZSZWZlcmVuY2UuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMWEwNWRmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVBhcmFtZXRlci9iZWZvcmVTZWxmUmVmZXJlbmNlLmphdmEKQEAgLTAsMCArMSw5IEBACitjbGFzcyBUZXN0IHsKKyAgdm9pZCBmb28oYm9vbGVhbiBmbGFnLCBpbnQgaSkgeworICAgIGlmIChmbGFnKSB7CisgICAgICBmb28oZmFsc2UsIGksIDxzZWxlY3Rpb24+aSArIDE8L3NlbGVjdGlvbj4pOworICAgIH0KKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oKTsKKyAgICBmb28oZmFsc2UsIGkpOworICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlUGFyYW1ldGVyL2JlZm9yZVNlbGZSZWZlcmVuY2VWYXJhcmdzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlUGFyYW1ldGVyL2JlZm9yZVNlbGZSZWZlcmVuY2VWYXJhcmdzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDA3YmFmMQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VQYXJhbWV0ZXIvYmVmb3JlU2VsZlJlZmVyZW5jZVZhcmFyZ3MuamF2YQpAQCAtMCwwICsxLDkgQEAKK2NsYXNzIFRlc3QgeworICB2b2lkIGZvbyhib29sZWFuIGZsYWcsIGludC4uLiBpKSB7CisgICAgaWYgKGZsYWcpIHsKKyAgICAgIGZvbyhmYWxzZSwgPHNlbGVjdGlvbj4iIjwvc2VsZWN0aW9uPiwgaSk7CisgICAgfQorICAgIFN5c3RlbS5vdXQucHJpbnRsbigpOworICAgIGZvbyhmbGFnLCBpKTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVBhcmFtZXRlci9iZWZvcmVTZWxmUmVmZXJlbmNlVmFyYXJnczEuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VQYXJhbWV0ZXIvYmVmb3JlU2VsZlJlZmVyZW5jZVZhcmFyZ3MxLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTk3ZDc1YwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VQYXJhbWV0ZXIvYmVmb3JlU2VsZlJlZmVyZW5jZVZhcmFyZ3MxLmphdmEKQEAgLTAsMCArMSw2IEBACitjbGFzcyBUZXN0IHsKKyAgdm9pZCBmb28oaW50Li4uIGkpIHsKKyAgICBmb28oPHNlbGVjdGlvbj4iIjwvc2VsZWN0aW9uPiwgMSk7CisgICAgZm9vKDMpOworICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlUGFyYW1ldGVyL2JlZm9yZVNpbXBsZVVzYWdlLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlUGFyYW1ldGVyL2JlZm9yZVNpbXBsZVVzYWdlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGEyNTBkMAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VQYXJhbWV0ZXIvYmVmb3JlU2ltcGxlVXNhZ2UuamF2YQpAQCAtMCwwICsxLDE4IEBACitjbGFzcyBUZXN0IHsKKyAgIHB1YmxpYyBpbnQgbShpbnQgYSwgaW50IGIpIHsKKyAgICAgICAgaWYoYSA+IGIpIHsKKyAgICAgICAgICAgcmV0dXJuIDxzZWxlY3Rpb24+MDwvc2VsZWN0aW9uPjsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKyAgIH0KK30KKworY2xhc3MgVGVzdDEgeworICBUZXN0IHQ7CisKKyAgcHVibGljIGludCBuKGludCB2KSB7CisgICAgcmV0dXJuIHQubSh2LCAxKTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VQYXJhbWV0ZXIvYmVmb3JlU2ltcGxpZmllZFJlc3VsdGVkVHlwZS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVBhcmFtZXRlci9iZWZvcmVTaW1wbGlmaWVkUmVzdWx0ZWRUeXBlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWE3ZTgyMwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VQYXJhbWV0ZXIvYmVmb3JlU2ltcGxpZmllZFJlc3VsdGVkVHlwZS5qYXZhCkBAIC0wLDAgKzEsMjQgQEAKK2ltcG9ydCBqYXZhLnV0aWwuKjsKK3B1YmxpYyBjbGFzcyBJbnRyb2R1Y2VQYXJhbWV0ZXJQcm9kdWNlc1dhcm5pbmcgeworICAgIHByaXZhdGUgZmluYWwgTGlzdDxHZW5lcmljPD8+PiBlbGVtZW50czsKKworICAgIHB1YmxpYyBJbnRyb2R1Y2VQYXJhbWV0ZXJQcm9kdWNlc1dhcm5pbmcoKSB7CisgICAgICAgIGVsZW1lbnRzID0gPHNlbGVjdGlvbj5uZXdBcnJheUxpc3QobmV3IFNvbWVHZW5lcmljKCksIG5ldyBTb21lT3RoZXJHZW5lcmljKCkpPC9zZWxlY3Rpb24+OworICAgIH0KKworICAgIHB1YmxpYyBzdGF0aWMgPEU+IEFycmF5TGlzdDxFPiBuZXdBcnJheUxpc3QoRS4uLiBlbGVtZW50cykgeworICAgICAgICBBcnJheUxpc3Q8RT4gbGlzdCA9IG5ldyBBcnJheUxpc3Q8RT4oKTsKKyAgICAgICAgQ29sbGVjdGlvbnMuYWRkQWxsKGxpc3QsIGVsZW1lbnRzKTsKKyAgICAgICAgcmV0dXJuIGxpc3Q7CisgICAgfQorCisgICAgcHJpdmF0ZSBzdGF0aWMgaW50ZXJmYWNlIEdlbmVyaWM8VD57CisKKyAgICB9CisKKyAgICBwcml2YXRlIHN0YXRpYyBjbGFzcyBTb21lR2VuZXJpYyBpbXBsZW1lbnRzIEdlbmVyaWM8U3RyaW5nPiB7CisgICAgfQorCisgICAgcHJpdmF0ZSBzdGF0aWMgY2xhc3MgU29tZU90aGVyR2VuZXJpYyBpbXBsZW1lbnRzIEdlbmVyaWM8T2JqZWN0PiB7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVBhcmFtZXRlci9iZWZvcmVTdGF0aWNGaWVsZEFjY2Vzcy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVBhcmFtZXRlci9iZWZvcmVTdGF0aWNGaWVsZEFjY2Vzcy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZkNjhhOTYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlUGFyYW1ldGVyL2JlZm9yZVN0YXRpY0ZpZWxkQWNjZXNzLmphdmEKQEAgLTAsMCArMSwxNiBAQAorY2xhc3MgVGVzdCB7CisgICAgcHVibGljIHN0YXRpYyBpbnQgaTsKKyAgICAKKyAgICBpbnQgbWV0aG9kKGludCBhKSB7CisgICAgICAgIHJldHVybiA8c2VsZWN0aW9uPmEgKyBpPC9zZWxlY3Rpb24+OworICAgIH0KK30KKworY2xhc3MgWCB7CisgICAgcHVibGljIHN0YXRpYyBpbnQgaTsKKyAgICAKKyAgICBpbnQgeXl5KGludCB6KSB7CisgICAgICAgIFRlc3QgdDsKKyAgICAgICAgcmV0dXJuIHQubWV0aG9kKHopOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlUGFyYW1ldGVyL2JlZm9yZVN0YXRpY0ZpZWxkV2l0aEdldHRlclJlcGxhY2VtZW50LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlUGFyYW1ldGVyL2JlZm9yZVN0YXRpY0ZpZWxkV2l0aEdldHRlclJlcGxhY2VtZW50LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODkxMzVjYwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VQYXJhbWV0ZXIvYmVmb3JlU3RhdGljRmllbGRXaXRoR2V0dGVyUmVwbGFjZW1lbnQuamF2YQpAQCAtMCwwICsxLDE3IEBACitwdWJsaWMgY2xhc3MgUiB7CisgIHByaXZhdGUgc3RhdGljIGludCBvdXJJbnQ7CisKKyAgcHVibGljIHN0YXRpYyBpbnQgZ2V0T3VySW50KCkgeworICAgIHJldHVybiBvdXJJbnQ7CisgIH0KKworICBwdWJsaWMgc3RhdGljIHZvaWQgZG9TbXRoKCkgeworICAgIFN5c3RlbS5vdXQucHJpbnRsbig8c2VsZWN0aW9uPm91ckludDwvc2VsZWN0aW9uPik7CisgIH0KK30KKworY2xhc3MgVXNhZ2UgeworICB2b2lkIGZvbygpIHsKKyAgICBSLmRvU210aCgpOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVBhcmFtZXRlci9iZWZvcmVTdWJzdGl0dXRlVHlwZVBhcmFtcy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVBhcmFtZXRlci9iZWZvcmVTdWJzdGl0dXRlVHlwZVBhcmFtcy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJiMDFlYTcKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlUGFyYW1ldGVyL2JlZm9yZVN1YnN0aXR1dGVUeXBlUGFyYW1zLmphdmEKQEAgLTAsMCArMSwxMSBAQAoraW1wb3J0IGphdmEudXRpbC4qOworY2xhc3MgVGVzdCB7CisgPFQ+IHZvaWQgZm9vKFQgdCkgeworICAgIExpc3Q8VD4gbHMgPSA8c2VsZWN0aW9uPm5ldyBBcnJheUxpc3Q8VD4oKTwvc2VsZWN0aW9uPjsKKyAgfQorCisgIHZvaWQgYmFyKCkgeworICAgIFN0cmluZyBzID0gIiI7CisgICAgZm9vKHMpOworICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlUGFyYW1ldGVyL2JlZm9yZVN1cGVySW5FeHByZXNzaW9uLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlUGFyYW1ldGVyL2JlZm9yZVN1cGVySW5FeHByZXNzaW9uLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNThkMTY1NwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VQYXJhbWV0ZXIvYmVmb3JlU3VwZXJJbkV4cHJlc3Npb24uamF2YQpAQCAtMCwwICsxLDE4IEBACitjbGFzcyBUMSB7CisgICAgaW50IG1ldGhvZChpbnQgaSkgeworICAgICAgICByZXR1cm4gMDsKKyAgICB9Cit9CisKK2NsYXNzIFQyIGV4dGVuZHMgVDEgeworICAgIGludCBtZXRob2QoaW50IGkpIHsKKyAgICAgICAgcmV0dXJuIDxzZWxlY3Rpb24+c3VwZXIubWV0aG9kKGkpICsgMTwvc2VsZWN0aW9uPjsKKyAgICB9Cit9CisKK2NsYXNzIFVzYWdlIHsKKyAgICBpbnQgbSgpIHsKKyAgICAgICAgVDIgdGVzdDsKKyAgICAgICAgcmV0dXJuIHRlc3QubWV0aG9kKDApOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlUGFyYW1ldGVyL2JlZm9yZVN1cGVyV2l0aFNpZGVFZmZlY3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VQYXJhbWV0ZXIvYmVmb3JlU3VwZXJXaXRoU2lkZUVmZmVjdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU1NjhjNWYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlUGFyYW1ldGVyL2JlZm9yZVN1cGVyV2l0aFNpZGVFZmZlY3QuamF2YQpAQCAtMCwwICsxLDE3IEBACitjbGFzcyBUMSB7CisgICAgaW50IG1ldGhvZChpbnQgaSkgeworICAgICAgICByZXR1cm4gMDsKKyAgICB9Cit9CisKK2NsYXNzIFQyIGV4dGVuZHMgVDEgeworICAgIGludCBtZXRob2QoaW50IGkpIHsKKyAgICAgICAgcmV0dXJuIDxzZWxlY3Rpb24+c3VwZXIubWV0aG9kKGkpICsgMTwvc2VsZWN0aW9uPjsKKyAgICB9Cit9CisKK2NsYXNzIFVzYWdlIHsKKyAgICBpbnQgbSgpIHsKKyAgICAgICAgcmV0dXJuIG5ldyBUMigpLm1ldGhvZCgwKTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVBhcmFtZXRlci9iZWZvcmVUaGlzU3Vic3RpdHV0aW9uLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlUGFyYW1ldGVyL2JlZm9yZVRoaXNTdWJzdGl0dXRpb24uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZmM4ZjQ2Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVBhcmFtZXRlci9iZWZvcmVUaGlzU3Vic3RpdHV0aW9uLmphdmEKQEAgLTAsMCArMSwxNCBAQAorY2xhc3MgVGVzdCB7CisgICAgaW50IG1ldGhvZChpbnQgYSwgaW50IGIpIHsKKyAgICAgICAgcmV0dXJuIDxzZWxlY3Rpb24+dGhpczwvc2VsZWN0aW9uPi5pOworICAgIH0KKyAgICBwcml2YXRlIGludCBpOworfQorCitjbGFzcyBYVGVzdCB7CisgICAgaW50IG4oKSB7CisgICAgICAgIFRlc3QgdDsKKyAgICAgICAgCisgICAgICAgIHJldHVybiB0Lm1ldGhvZCgxLCAyKTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVBhcmFtZXRlci9iZWZvcmVUaGlzU3Vic3RpdHV0aW9uSW5RdWFsaWZpZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VQYXJhbWV0ZXIvYmVmb3JlVGhpc1N1YnN0aXR1dGlvbkluUXVhbGlmaWVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjRkYzA1YgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VQYXJhbWV0ZXIvYmVmb3JlVGhpc1N1YnN0aXR1dGlvbkluUXVhbGlmaWVyLmphdmEKQEAgLTAsMCArMSwxNCBAQAorY2xhc3MgVGVzdCB7CisgICAgaW50IG1ldGhvZChpbnQgYSwgaW50IGIpIHsKKyAgICAgICAgcmV0dXJuIDxzZWxlY3Rpb24+dGhpcy5pPC9zZWxlY3Rpb24+OworICAgIH0KKyAgICBwcml2YXRlIGludCBpOworfQorCitjbGFzcyBYVGVzdCB7CisgICAgaW50IG4oKSB7CisgICAgICAgIFRlc3QgdDsKKyAgICAgICAgCisgICAgICAgIHJldHVybiB0Lm1ldGhvZCgxLCAyKTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVBhcmFtZXRlci9iZWZvcmVVc2VJbklubmVyQ2xhc3MuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VQYXJhbWV0ZXIvYmVmb3JlVXNlSW5Jbm5lckNsYXNzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODQyN2U5NAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VQYXJhbWV0ZXIvYmVmb3JlVXNlSW5Jbm5lckNsYXNzLmphdmEKQEAgLTAsMCArMSwxNCBAQAorY2xhc3MgVGVzdCB7CisgICAgcHVibGljIHZvaWQgdGVzdCgpIHsKKyAgICAgICAgZmluYWwgU3RyaW5nIDxjYXJldD5zID0gIiI7CisgICAgICAgIG5ldyBSdW5uYWJsZSgpIHsKKyAgICAgICAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKKyAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4ocyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0ucnVuKCk7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgdXNlKCkgeworICAgICAgICB0ZXN0KCk7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VQYXJhbWV0ZXIvYmVmb3JlVmFyYXJncy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVBhcmFtZXRlci9iZWZvcmVWYXJhcmdzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmVjYTU0YgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VQYXJhbWV0ZXIvYmVmb3JlVmFyYXJncy5qYXZhCkBAIC0wLDAgKzEsMTggQEAKK2NsYXNzIFRlc3QgeworICAgcHVibGljIGludCBtKGludCBhLCBpbnQuLi4gdmFsdWVzKSB7CisgICAgICAgIGlmKGEgPiB2YWx1ZXMubGVuZ3RoKSB7CisgICAgICAgICAgIHJldHVybiA8c2VsZWN0aW9uPjA8L3NlbGVjdGlvbj47CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisgICB9Cit9CisKK2NsYXNzIFRlc3QxIHsKKyAgVGVzdCB0OworCisgIHB1YmxpYyBpbnQgbihpbnQgdikgeworICAgIHJldHVybiB0Lm0odiwgMSk7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlUGFyYW1ldGVyL2JlZm9yZVZhcmFyZ3MxLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlUGFyYW1ldGVyL2JlZm9yZVZhcmFyZ3MxLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODE5NDQ5YgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VQYXJhbWV0ZXIvYmVmb3JlVmFyYXJnczEuamF2YQpAQCAtMCwwICsxLDggQEAKK2ltcG9ydCBqYXZhLnV0aWwuKjsKKworcHVibGljIGNsYXNzIENvbGxlY3QgeworICAgIHB1YmxpYyB2b2lkIG0oU3RyaW5nIG5hbWVzKSB7CisgICAgICAgTGlzdCBzdHJzID0gPHNlbGVjdGlvbj5BcnJheXMuYXNMaXN0KG5hbWVzKTwvc2VsZWN0aW9uPjsKKyAgIH0KKworfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVBhcmFtZXRlci9iZWZvcmVXZWlyZFF1YWxpZmllci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVBhcmFtZXRlci9iZWZvcmVXZWlyZFF1YWxpZmllci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYwNjFiMGYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlUGFyYW1ldGVyL2JlZm9yZVdlaXJkUXVhbGlmaWVyLmphdmEKQEAgLTAsMCArMSwxNSBAQAorcHVibGljIGNsYXNzIFRlc3QgeworICAgIGludCBtZXRob2QoaW50IGkpIHsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgaW50IG0oaW50IGksIGludCBqKSB7CisgICAgICAgIHJldHVybiBpICsgPHNlbGVjdGlvbj5tZXRob2Qoaik8L3NlbGVjdGlvbj47CisgICAgfQorfQorCitjbGFzcyBYIHsKKyAgIHB1YmxpYyBpbnQgbihpbnQgYSkgeworICAgICAgICByZXR1cm4gKG5ldyBUZXN0KCkpLm0oYSwgYSAqIDIpOworICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VQYXJhbWV0ZXIvYmVmb3JlV2VpcmRRdWFsaWZpZXJBbmRQYXJhbWV0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VQYXJhbWV0ZXIvYmVmb3JlV2VpcmRRdWFsaWZpZXJBbmRQYXJhbWV0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZjUwMzY4Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVBhcmFtZXRlci9iZWZvcmVXZWlyZFF1YWxpZmllckFuZFBhcmFtZXRlci5qYXZhCkBAIC0wLDAgKzEsMTUgQEAKK3B1YmxpYyBjbGFzcyBUZXN0IHsgICAgCisgICAgaW50IG1ldGhvZChpbnQgaSkgeworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBpbnQgbShpbnQgaSwgaW50IGosIFRlc3QgdCkgeworICAgICAgICByZXR1cm4gaSArIDxzZWxlY3Rpb24+dC5tZXRob2Qoaik8L3NlbGVjdGlvbj47CisgICAgfQorfQorCitjbGFzcyBYIHsKKyAgIHB1YmxpYyBpbnQgbihpbnQgYSkgeworICAgICAgICByZXR1cm4gKG5ldyBUZXN0KCkpLm0oYSwgYSAqIDIsIG5ldyBUZXN0KCkpOworICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VQYXJhbWV0ZXJPYmplY3QvY29weUphdmFkb2MvYWZ0ZXIvVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVBhcmFtZXRlck9iamVjdC9jb3B5SmF2YWRvYy9hZnRlci9UZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2Q5YTRlMAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VQYXJhbWV0ZXJPYmplY3QvY29weUphdmFkb2MvYWZ0ZXIvVGVzdC5qYXZhCkBAIC0wLDAgKzEsMjYgQEAKK2NsYXNzIFRlc3QgeworICAvKioKKyAgICogZm9vIGNvbW1lbnQKKyAgICogQHBhcmFtIHBhcmFtCisgICAqLworICB2b2lkIGZvbyhQYXJhbSBwYXJhbSkgeworICAgIGJhcihwYXJhbS5nZXRTKCkpOworICB9CisKKyAgdm9pZCBiYXIoU3RyaW5nIHMpe30KKworICAgIHByaXZhdGUgc3RhdGljIGNsYXNzIFBhcmFtIHsKKyAgICAgICAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgczsKKworICAgICAgICAvKioKKyAgICAgICAgICogQHBhcmFtIHMgbG9uZyBkZXNjcmlwdGlvbgorICAgICAgICAgKi8KKyAgICAgICAgcHJpdmF0ZSBQYXJhbShTdHJpbmcgcykgeworICAgICAgICAgICAgdGhpcy5zID0gczsKKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyBTdHJpbmcgZ2V0UygpIHsKKyAgICAgICAgICAgIHJldHVybiBzOworICAgICAgICB9CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVBhcmFtZXRlck9iamVjdC9jb3B5SmF2YWRvYy9iZWZvcmUvVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVBhcmFtZXRlck9iamVjdC9jb3B5SmF2YWRvYy9iZWZvcmUvVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY5MjYwZjAKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlUGFyYW1ldGVyT2JqZWN0L2NvcHlKYXZhZG9jL2JlZm9yZS9UZXN0LmphdmEKQEAgLTAsMCArMSwxMSBAQAorY2xhc3MgVGVzdCB7CisgIC8qKgorICAgKiBmb28gY29tbWVudAorICAgKiBAcGFyYW0gcyBsb25nIGRlc2NyaXB0aW9uCisgICAqLworICB2b2lkIGZvbyhTdHJpbmcgcykgeworICAgIGJhcihzKTsKKyAgfQorCisgIHZvaWQgYmFyKFN0cmluZyBzKXt9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlUGFyYW1ldGVyT2JqZWN0L2RlbGVnYXRlL2FmdGVyL1BhcmFtLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlUGFyYW1ldGVyT2JqZWN0L2RlbGVnYXRlL2FmdGVyL1BhcmFtLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGM4ODhiZgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VQYXJhbWV0ZXJPYmplY3QvZGVsZWdhdGUvYWZ0ZXIvUGFyYW0uamF2YQpAQCAtMCwwICsxLDExIEBACitwdWJsaWMgY2xhc3MgUGFyYW0geworICAgIHByaXZhdGUgZmluYWwgaW50W10gaTsKKworICAgIHB1YmxpYyBQYXJhbShpbnQuLi4gaSkgeworICAgICAgICB0aGlzLmkgPSBpOworICAgIH0KKworICAgIHB1YmxpYyBpbnRbXSBnZXRJKCkgeworICAgICAgICByZXR1cm4gaTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlUGFyYW1ldGVyT2JqZWN0L2RlbGVnYXRlL2FmdGVyL1Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VQYXJhbWV0ZXJPYmplY3QvZGVsZWdhdGUvYWZ0ZXIvVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ5YzU1MWIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlUGFyYW1ldGVyT2JqZWN0L2RlbGVnYXRlL2FmdGVyL1Rlc3QuamF2YQpAQCAtMCwwICsxLDE0IEBACitjbGFzcyBUZXN0IHsKKyAgICB2b2lkIGZvbyhpbnQuLi4gaSkgeworICAgICAgICBmb28obmV3IFBhcmFtKGkpKTsKKyAgICB9CisKKyAgICB2b2lkIGZvbyhQYXJhbSBwYXJhbSkgeworICAgIGlmIChwYXJhbS5nZXRJKCkubGVuZ2h0ID09IDApIHsKKyAgICB9CisgIH0KKworICB2b2lkIGJhcigpeworICAgIGZvbygxLCAyKTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VQYXJhbWV0ZXJPYmplY3QvZGVsZWdhdGUvYmVmb3JlL1Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VQYXJhbWV0ZXJPYmplY3QvZGVsZWdhdGUvYmVmb3JlL1Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMTExN2NjCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVBhcmFtZXRlck9iamVjdC9kZWxlZ2F0ZS9iZWZvcmUvVGVzdC5qYXZhCkBAIC0wLDAgKzEsMTAgQEAKK2NsYXNzIFRlc3QgeworICB2b2lkIGZvbyhpbnQuLi4gaSkgeworICAgIGlmIChpLmxlbmdodCA9PSAwKSB7CisgICAgfQorICB9CisKKyAgdm9pZCBiYXIoKXsKKyAgICBmb28oMSwgMik7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlUGFyYW1ldGVyT2JqZWN0L2V4aXN0ZW50QmVhbi9hZnRlci9QYXJhbS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVBhcmFtZXRlck9iamVjdC9leGlzdGVudEJlYW4vYWZ0ZXIvUGFyYW0uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYzg4OGJmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVBhcmFtZXRlck9iamVjdC9leGlzdGVudEJlYW4vYWZ0ZXIvUGFyYW0uamF2YQpAQCAtMCwwICsxLDExIEBACitwdWJsaWMgY2xhc3MgUGFyYW0geworICAgIHByaXZhdGUgZmluYWwgaW50W10gaTsKKworICAgIHB1YmxpYyBQYXJhbShpbnQuLi4gaSkgeworICAgICAgICB0aGlzLmkgPSBpOworICAgIH0KKworICAgIHB1YmxpYyBpbnRbXSBnZXRJKCkgeworICAgICAgICByZXR1cm4gaTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlUGFyYW1ldGVyT2JqZWN0L2V4aXN0ZW50QmVhbi9hZnRlci9UZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlUGFyYW1ldGVyT2JqZWN0L2V4aXN0ZW50QmVhbi9hZnRlci9UZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGUwYTRkYgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VQYXJhbWV0ZXJPYmplY3QvZXhpc3RlbnRCZWFuL2FmdGVyL1Rlc3QuamF2YQpAQCAtMCwwICsxLDEwIEBACitjbGFzcyBUZXN0IHsKKyAgdm9pZCBmb28oUGFyYW0gcGFyYW0pIHsKKyAgICBpZiAocGFyYW0uZ2V0SSgpLmxlbmdodCA9PSAwKSB7CisgICAgfQorICB9CisKKyAgdm9pZCBiYXIoKXsKKyAgICBmb28obmV3IFBhcmFtKDEsIDIpKTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VQYXJhbWV0ZXJPYmplY3QvZXhpc3RlbnRCZWFuL2JlZm9yZS9QYXJhbS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVBhcmFtZXRlck9iamVjdC9leGlzdGVudEJlYW4vYmVmb3JlL1BhcmFtLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGM4ODhiZgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VQYXJhbWV0ZXJPYmplY3QvZXhpc3RlbnRCZWFuL2JlZm9yZS9QYXJhbS5qYXZhCkBAIC0wLDAgKzEsMTEgQEAKK3B1YmxpYyBjbGFzcyBQYXJhbSB7CisgICAgcHJpdmF0ZSBmaW5hbCBpbnRbXSBpOworCisgICAgcHVibGljIFBhcmFtKGludC4uLiBpKSB7CisgICAgICAgIHRoaXMuaSA9IGk7CisgICAgfQorCisgICAgcHVibGljIGludFtdIGdldEkoKSB7CisgICAgICAgIHJldHVybiBpOworICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VQYXJhbWV0ZXJPYmplY3QvZXhpc3RlbnRCZWFuL2JlZm9yZS9UZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlUGFyYW1ldGVyT2JqZWN0L2V4aXN0ZW50QmVhbi9iZWZvcmUvVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMxMTE3Y2MKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlUGFyYW1ldGVyT2JqZWN0L2V4aXN0ZW50QmVhbi9iZWZvcmUvVGVzdC5qYXZhCkBAIC0wLDAgKzEsMTAgQEAKK2NsYXNzIFRlc3QgeworICB2b2lkIGZvbyhpbnQuLi4gaSkgeworICAgIGlmIChpLmxlbmdodCA9PSAwKSB7CisgICAgfQorICB9CisKKyAgdm9pZCBiYXIoKXsKKyAgICBmb28oMSwgMik7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlUGFyYW1ldGVyT2JqZWN0L2V4aXN0aW5nQmVhbklmTm9HZW5lcmF0aW9uL2FmdGVyL1BhcmFtLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlUGFyYW1ldGVyT2JqZWN0L2V4aXN0aW5nQmVhbklmTm9HZW5lcmF0aW9uL2FmdGVyL1BhcmFtLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGM4ODhiZgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VQYXJhbWV0ZXJPYmplY3QvZXhpc3RpbmdCZWFuSWZOb0dlbmVyYXRpb24vYWZ0ZXIvUGFyYW0uamF2YQpAQCAtMCwwICsxLDExIEBACitwdWJsaWMgY2xhc3MgUGFyYW0geworICAgIHByaXZhdGUgZmluYWwgaW50W10gaTsKKworICAgIHB1YmxpYyBQYXJhbShpbnQuLi4gaSkgeworICAgICAgICB0aGlzLmkgPSBpOworICAgIH0KKworICAgIHB1YmxpYyBpbnRbXSBnZXRJKCkgeworICAgICAgICByZXR1cm4gaTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlUGFyYW1ldGVyT2JqZWN0L2V4aXN0aW5nQmVhbklmTm9HZW5lcmF0aW9uL2FmdGVyL1Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VQYXJhbWV0ZXJPYmplY3QvZXhpc3RpbmdCZWFuSWZOb0dlbmVyYXRpb24vYWZ0ZXIvVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhlMGE0ZGIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlUGFyYW1ldGVyT2JqZWN0L2V4aXN0aW5nQmVhbklmTm9HZW5lcmF0aW9uL2FmdGVyL1Rlc3QuamF2YQpAQCAtMCwwICsxLDEwIEBACitjbGFzcyBUZXN0IHsKKyAgdm9pZCBmb28oUGFyYW0gcGFyYW0pIHsKKyAgICBpZiAocGFyYW0uZ2V0SSgpLmxlbmdodCA9PSAwKSB7CisgICAgfQorICB9CisKKyAgdm9pZCBiYXIoKXsKKyAgICBmb28obmV3IFBhcmFtKDEsIDIpKTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VQYXJhbWV0ZXJPYmplY3QvZXhpc3RpbmdCZWFuSWZOb0dlbmVyYXRpb24vYmVmb3JlL1BhcmFtLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlUGFyYW1ldGVyT2JqZWN0L2V4aXN0aW5nQmVhbklmTm9HZW5lcmF0aW9uL2JlZm9yZS9QYXJhbS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZiNmMxMzUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlUGFyYW1ldGVyT2JqZWN0L2V4aXN0aW5nQmVhbklmTm9HZW5lcmF0aW9uL2JlZm9yZS9QYXJhbS5qYXZhCkBAIC0wLDAgKzEsMTEgQEAKK3B1YmxpYyBjbGFzcyBQYXJhbSB7CisgICAgcHJpdmF0ZSBmaW5hbCBpbnQgaTsKKworICAgIHB1YmxpYyBQYXJhbShpbnQgaSkgeworICAgICAgICB0aGlzLmkgPSBpOworICAgIH0KKworICAgIHB1YmxpYyBpbnQgZ2V0SSgpIHsKKyAgICAgICAgcmV0dXJuIGk7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVBhcmFtZXRlck9iamVjdC9leGlzdGluZ0JlYW5JZk5vR2VuZXJhdGlvbi9iZWZvcmUvVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVBhcmFtZXRlck9iamVjdC9leGlzdGluZ0JlYW5JZk5vR2VuZXJhdGlvbi9iZWZvcmUvVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjljZjFmOGMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlUGFyYW1ldGVyT2JqZWN0L2V4aXN0aW5nQmVhbklmTm9HZW5lcmF0aW9uL2JlZm9yZS9UZXN0LmphdmEKQEAgLTAsMCArMSwxMSBAQAorY2xhc3MgVGVzdCB7CisgIHZvaWQgZm9vKGludCBpKSB7CisgICAgaWYgKGkgPT0gMCkgeworICAgICAgaSsrOworICAgIH0KKyAgfQorCisgIHZvaWQgYmFyKCl7CisgICAgZm9vKDEsIDIpOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVBhcmFtZXRlck9iamVjdC9leGlzdGluZ0JlYW5WaXNpYmlsaXR5L2FmdGVyL3AvUGFyYW0uamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VQYXJhbWV0ZXJPYmplY3QvZXhpc3RpbmdCZWFuVmlzaWJpbGl0eS9hZnRlci9wL1BhcmFtLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTI5NTY1MAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VQYXJhbWV0ZXJPYmplY3QvZXhpc3RpbmdCZWFuVmlzaWJpbGl0eS9hZnRlci9wL1BhcmFtLmphdmEKQEAgLTAsMCArMSwxMiBAQAorcGFja2FnZSBwOworcHVibGljIGNsYXNzIFBhcmFtIHsKKyAgICBwcml2YXRlIGZpbmFsIGludFtdIGk7CisKKyAgICBwdWJsaWMgUGFyYW0oaW50Li4uIGkpIHsKKyAgICAgICAgdGhpcy5pID0gaTsKKyAgICB9CisKKyAgICBwdWJsaWMgaW50W10gZ2V0SSgpIHsKKyAgICAgICAgcmV0dXJuIGk7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVBhcmFtZXRlck9iamVjdC9leGlzdGluZ0JlYW5WaXNpYmlsaXR5L2FmdGVyL3AyL1Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VQYXJhbWV0ZXJPYmplY3QvZXhpc3RpbmdCZWFuVmlzaWJpbGl0eS9hZnRlci9wMi9UZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2I2ZDZhNQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VQYXJhbWV0ZXJPYmplY3QvZXhpc3RpbmdCZWFuVmlzaWJpbGl0eS9hZnRlci9wMi9UZXN0LmphdmEKQEAgLTAsMCArMSwxNCBAQAorcGFja2FnZSBwMjsKKworaW1wb3J0IHAuUGFyYW07CisKK2NsYXNzIFRlc3QgeworICB2b2lkIGZvbyhQYXJhbSBwYXJhbSkgeworICAgIGlmIChwYXJhbS5nZXRJKCkubGVuZ2h0ID09IDApIHsKKyAgICB9CisgIH0KKworICB2b2lkIGJhcigpeworICAgIGZvbyhuZXcgUGFyYW0oMSwgMikpOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVBhcmFtZXRlck9iamVjdC9leGlzdGluZ0JlYW5WaXNpYmlsaXR5L2JlZm9yZS9wL1BhcmFtLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlUGFyYW1ldGVyT2JqZWN0L2V4aXN0aW5nQmVhblZpc2liaWxpdHkvYmVmb3JlL3AvUGFyYW0uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOWViNTBjCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVBhcmFtZXRlck9iamVjdC9leGlzdGluZ0JlYW5WaXNpYmlsaXR5L2JlZm9yZS9wL1BhcmFtLmphdmEKQEAgLTAsMCArMSwxMiBAQAorcGFja2FnZSBwOworY2xhc3MgUGFyYW0geworICAgIHByaXZhdGUgZmluYWwgaW50W10gaTsKKworICAgIFBhcmFtKGludC4uLiBpKSB7CisgICAgICAgIHRoaXMuaSA9IGk7CisgICAgfQorCisgICAgcHVibGljIGludFtdIGdldEkoKSB7CisgICAgICAgIHJldHVybiBpOworICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VQYXJhbWV0ZXJPYmplY3QvZXhpc3RpbmdCZWFuVmlzaWJpbGl0eS9iZWZvcmUvcDIvVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVBhcmFtZXRlck9iamVjdC9leGlzdGluZ0JlYW5WaXNpYmlsaXR5L2JlZm9yZS9wMi9UZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2U2MGY0OQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VQYXJhbWV0ZXJPYmplY3QvZXhpc3RpbmdCZWFuVmlzaWJpbGl0eS9iZWZvcmUvcDIvVGVzdC5qYXZhCkBAIC0wLDAgKzEsMTEgQEAKK3BhY2thZ2UgcDI7CitjbGFzcyBUZXN0IHsKKyAgdm9pZCBmb28oaW50Li4uIGkpIHsKKyAgICBpZiAoaS5sZW5naHQgPT0gMCkgeworICAgIH0KKyAgfQorCisgIHZvaWQgYmFyKCl7CisgICAgZm9vKDEsIDIpOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVBhcmFtZXRlck9iamVjdC9nZW5lcmF0ZUdldHRlclNldHRlckZvckV4aXN0aW5nQmVhbi9hZnRlci9QYXJhbS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVBhcmFtZXRlck9iamVjdC9nZW5lcmF0ZUdldHRlclNldHRlckZvckV4aXN0aW5nQmVhbi9hZnRlci9QYXJhbS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRjOGQ5ZDEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlUGFyYW1ldGVyT2JqZWN0L2dlbmVyYXRlR2V0dGVyU2V0dGVyRm9yRXhpc3RpbmdCZWFuL2FmdGVyL1BhcmFtLmphdmEKQEAgLTAsMCArMSwxNSBAQAorcHVibGljIGNsYXNzIFBhcmFtIHsKKyAgICBwcml2YXRlIGZpbmFsIGludCBpOworCisgICAgcHVibGljIFBhcmFtKGludCBpKSB7CisgICAgICAgIHRoaXMuaSA9IGk7CisgICAgfQorCisgICAgcHVibGljIGludCBnZXRJKCkgeworICAgICAgICByZXR1cm4gaTsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBzZXRJKGludCBpKSB7CisgICAgICAgIHRoaXMuaSA9IGk7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVBhcmFtZXRlck9iamVjdC9nZW5lcmF0ZUdldHRlclNldHRlckZvckV4aXN0aW5nQmVhbi9hZnRlci9UZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlUGFyYW1ldGVyT2JqZWN0L2dlbmVyYXRlR2V0dGVyU2V0dGVyRm9yRXhpc3RpbmdCZWFuL2FmdGVyL1Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40Y2Y4OTBiCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVBhcmFtZXRlck9iamVjdC9nZW5lcmF0ZUdldHRlclNldHRlckZvckV4aXN0aW5nQmVhbi9hZnRlci9UZXN0LmphdmEKQEAgLTAsMCArMSwxMSBAQAorY2xhc3MgVGVzdCB7CisgIHZvaWQgZm9vKFBhcmFtIHBhcmFtKSB7CisgICAgaWYgKHBhcmFtLmdldEkoKSA9PSAwKSB7CisgICAgICAgIHBhcmFtLnNldEkocGFyYW0uZ2V0SSgpICsgMSk7CisgICAgfQorICB9CisKKyAgdm9pZCBiYXIoKXsKKyAgICBmb28obmV3IFBhcmFtKDEpKTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VQYXJhbWV0ZXJPYmplY3QvZ2VuZXJhdGVHZXR0ZXJTZXR0ZXJGb3JFeGlzdGluZ0JlYW4vYmVmb3JlL1BhcmFtLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlUGFyYW1ldGVyT2JqZWN0L2dlbmVyYXRlR2V0dGVyU2V0dGVyRm9yRXhpc3RpbmdCZWFuL2JlZm9yZS9QYXJhbS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1MTk0NjAKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlUGFyYW1ldGVyT2JqZWN0L2dlbmVyYXRlR2V0dGVyU2V0dGVyRm9yRXhpc3RpbmdCZWFuL2JlZm9yZS9QYXJhbS5qYXZhCkBAIC0wLDAgKzEsNyBAQAorcHVibGljIGNsYXNzIFBhcmFtIHsKKyAgICBwcml2YXRlIGZpbmFsIGludCBpOworCisgICAgcHVibGljIFBhcmFtKGludCBpKSB7CisgICAgICAgIHRoaXMuaSA9IGk7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVBhcmFtZXRlck9iamVjdC9nZW5lcmF0ZUdldHRlclNldHRlckZvckV4aXN0aW5nQmVhbi9iZWZvcmUvVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVBhcmFtZXRlck9iamVjdC9nZW5lcmF0ZUdldHRlclNldHRlckZvckV4aXN0aW5nQmVhbi9iZWZvcmUvVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ3NzkxYWVjCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVBhcmFtZXRlck9iamVjdC9nZW5lcmF0ZUdldHRlclNldHRlckZvckV4aXN0aW5nQmVhbi9iZWZvcmUvVGVzdC5qYXZhCkBAIC0wLDAgKzEsMTEgQEAKK2NsYXNzIFRlc3QgeworICB2b2lkIGZvbyhpbnQgaSkgeworICAgIGlmIChpID09IDApIHsKKyAgICAgIGkrKzsKKyAgICB9CisgIH0KKworICB2b2lkIGJhcigpeworICAgIGZvbygxKTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VQYXJhbWV0ZXJPYmplY3QvaGllcmFyY2h5L2FmdGVyL0EuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VQYXJhbWV0ZXJPYmplY3QvaGllcmFyY2h5L2FmdGVyL0EuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMGE2NTdlCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVBhcmFtZXRlck9iamVjdC9oaWVyYXJjaHkvYWZ0ZXIvQS5qYXZhCkBAIC0wLDAgKzEsOSBAQAorY2xhc3MgQSBleHRlbmRzIFRlc3R7CisgICB2b2lkIGZvbyhQYXJhbSBwYXJhbSkgeworICAgICBTeXN0ZW0ub3V0LnByaW50bG4ocGFyYW0uc2V0SShwYXJhbS5nZXRJKCkgKyAxKSk7CisgICB9CisKKyAgIHZvaWQgYmF6eigpeworICAgICBmb28obmV3IFBhcmFtKDApKTsKKyAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlUGFyYW1ldGVyT2JqZWN0L2hpZXJhcmNoeS9hZnRlci9CLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlUGFyYW1ldGVyT2JqZWN0L2hpZXJhcmNoeS9hZnRlci9CLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTQ0MTFlNwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VQYXJhbWV0ZXJPYmplY3QvaGllcmFyY2h5L2FmdGVyL0IuamF2YQpAQCAtMCwwICsxLDkgQEAKK2NsYXNzIEIgZXh0ZW5kcyBUZXN0IHsKKyAgdm9pZCBmb28oUGFyYW0gcGFyYW0pIHsKKyAgICBTeXN0ZW0uZXJyLnByaW50bG4ocGFyYW0uc2V0SShwYXJhbS5nZXRJKCkgLSAxKSk7CisgIH0KKworICB2b2lkIGJhcigpIHsKKyAgICBmb28obmV3IFBhcmFtKDEpKTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VQYXJhbWV0ZXJPYmplY3QvaGllcmFyY2h5L2FmdGVyL1BhcmFtLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlUGFyYW1ldGVyT2JqZWN0L2hpZXJhcmNoeS9hZnRlci9QYXJhbS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRhOWQyZjkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlUGFyYW1ldGVyT2JqZWN0L2hpZXJhcmNoeS9hZnRlci9QYXJhbS5qYXZhCkBAIC0wLDAgKzEsMTUgQEAKK3B1YmxpYyBjbGFzcyBQYXJhbSB7CisgICAgcHJpdmF0ZSBpbnQgaTsKKworICAgIHB1YmxpYyBQYXJhbShpbnQgaSkgeworICAgICAgICB0aGlzLmkgPSBpOworICAgIH0KKworICAgIHB1YmxpYyBpbnQgZ2V0SSgpIHsKKyAgICAgICAgcmV0dXJuIGk7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgc2V0SShpbnQgaSkgeworICAgICAgICB0aGlzLmkgPSBpOworICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VQYXJhbWV0ZXJPYmplY3QvaGllcmFyY2h5L2FmdGVyL1Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VQYXJhbWV0ZXJPYmplY3QvaGllcmFyY2h5L2FmdGVyL1Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMWZiOGI1Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVBhcmFtZXRlck9iamVjdC9oaWVyYXJjaHkvYWZ0ZXIvVGVzdC5qYXZhCkBAIC0wLDAgKzEsOSBAQAorY2xhc3MgVGVzdCB7CisgIHZvaWQgZm9vKFBhcmFtIHBhcmFtKSB7CisgICAgICBwYXJhbS5zZXRJKHBhcmFtLmdldEkoKSArIDEpOworICB9CisKKyAgdm9pZCBiYXIoKXsKKyAgICBmb28obmV3IFBhcmFtKDEpKTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VQYXJhbWV0ZXJPYmplY3QvaGllcmFyY2h5L2JlZm9yZS9BLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlUGFyYW1ldGVyT2JqZWN0L2hpZXJhcmNoeS9iZWZvcmUvQS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc4YmY4ZWYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlUGFyYW1ldGVyT2JqZWN0L2hpZXJhcmNoeS9iZWZvcmUvQS5qYXZhCkBAIC0wLDAgKzEsOSBAQAorY2xhc3MgQSBleHRlbmRzIFRlc3R7CisgICB2b2lkIGZvbyhpbnQgaSkgeworICAgICBTeXN0ZW0ub3V0LnByaW50bG4oaSsrKTsKKyAgIH0KKworICAgdm9pZCBiYXp6KCl7CisgICAgIGZvbygwKTsKKyAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlUGFyYW1ldGVyT2JqZWN0L2hpZXJhcmNoeS9iZWZvcmUvQi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVBhcmFtZXRlck9iamVjdC9oaWVyYXJjaHkvYmVmb3JlL0IuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZDk5NWEyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVBhcmFtZXRlck9iamVjdC9oaWVyYXJjaHkvYmVmb3JlL0IuamF2YQpAQCAtMCwwICsxLDkgQEAKK2NsYXNzIEIgZXh0ZW5kcyBUZXN0IHsKKyAgdm9pZCBmb28oaW50IGkpIHsKKyAgICBTeXN0ZW0uZXJyLnByaW50bG4oLS1pKTsKKyAgfQorCisgIHZvaWQgYmFyKCkgeworICAgIGZvbygxKTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VQYXJhbWV0ZXJPYmplY3QvaGllcmFyY2h5L2JlZm9yZS9UZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlUGFyYW1ldGVyT2JqZWN0L2hpZXJhcmNoeS9iZWZvcmUvVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM2YzhjOTQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlUGFyYW1ldGVyT2JqZWN0L2hpZXJhcmNoeS9iZWZvcmUvVGVzdC5qYXZhCkBAIC0wLDAgKzEsOSBAQAorY2xhc3MgVGVzdCB7CisgIHZvaWQgZm9vKGludCBpKSB7CisgICAgaSsrOworICB9CisKKyAgdm9pZCBiYXIoKXsKKyAgICBmb28oMSk7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlUGFyYW1ldGVyT2JqZWN0L2luY3JlbWVudC9hZnRlci9QYXJhbS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVBhcmFtZXRlck9iamVjdC9pbmNyZW1lbnQvYWZ0ZXIvUGFyYW0uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YTlkMmY5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVBhcmFtZXRlck9iamVjdC9pbmNyZW1lbnQvYWZ0ZXIvUGFyYW0uamF2YQpAQCAtMCwwICsxLDE1IEBACitwdWJsaWMgY2xhc3MgUGFyYW0geworICAgIHByaXZhdGUgaW50IGk7CisKKyAgICBwdWJsaWMgUGFyYW0oaW50IGkpIHsKKyAgICAgICAgdGhpcy5pID0gaTsKKyAgICB9CisKKyAgICBwdWJsaWMgaW50IGdldEkoKSB7CisgICAgICAgIHJldHVybiBpOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIHNldEkoaW50IGkpIHsKKyAgICAgICAgdGhpcy5pID0gaTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlUGFyYW1ldGVyT2JqZWN0L2luY3JlbWVudC9hZnRlci9UZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlUGFyYW1ldGVyT2JqZWN0L2luY3JlbWVudC9hZnRlci9UZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDcxZjQ1ZgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VQYXJhbWV0ZXJPYmplY3QvaW5jcmVtZW50L2FmdGVyL1Rlc3QuamF2YQpAQCAtMCwwICsxLDEwIEBACitjbGFzcyBUZXN0IHsKKyAgdm9pZCBmb28oUGFyYW0gcGFyYW0pIHsKKyAgICAgIHBhcmFtLnNldEkocGFyYW0uZ2V0SSgpICsgMSk7CisgICAgICBpZiAocGFyYW0uZ2V0SSgpID09IDApIDsKKyAgfQorCisgIHZvaWQgYmFyKCl7CisgICAgZm9vKG5ldyBQYXJhbSgxKSk7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlUGFyYW1ldGVyT2JqZWN0L2luY3JlbWVudC9iZWZvcmUvVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVBhcmFtZXRlck9iamVjdC9pbmNyZW1lbnQvYmVmb3JlL1Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMjFmODlkCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVBhcmFtZXRlck9iamVjdC9pbmNyZW1lbnQvYmVmb3JlL1Rlc3QuamF2YQpAQCAtMCwwICsxLDkgQEAKK2NsYXNzIFRlc3QgeworICB2b2lkIGZvbyhpbnQgaSkgeworICAgIGlmIChpKysgPT0gMCkgOworICB9CisKKyAgdm9pZCBiYXIoKXsKKyAgICBmb28oMSk7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlUGFyYW1ldGVyT2JqZWN0L2lubmVyQ2xhc3MvYWZ0ZXIvVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVBhcmFtZXRlck9iamVjdC9pbm5lckNsYXNzL2FmdGVyL1Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jODE5OTM3Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVBhcmFtZXRlck9iamVjdC9pbm5lckNsYXNzL2FmdGVyL1Rlc3QuamF2YQpAQCAtMCwwICsxLDE5IEBACitjbGFzcyBUZXN0IHsKKyAgdm9pZCBmb28oUGFyYW0gcGFyYW0pIHsKKyAgICBiYXIocGFyYW0uZ2V0UygpKTsKKyAgfQorCisgIHZvaWQgYmFyKFN0cmluZyBzKXt9CisKKyAgICBwcml2YXRlIHN0YXRpYyBjbGFzcyBQYXJhbSB7CisgICAgICAgIHByaXZhdGUgZmluYWwgU3RyaW5nIHM7CisKKyAgICAgICAgcHJpdmF0ZSBQYXJhbShTdHJpbmcgcykgeworICAgICAgICAgICAgdGhpcy5zID0gczsKKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyBTdHJpbmcgZ2V0UygpIHsKKyAgICAgICAgICAgIHJldHVybiBzOworICAgICAgICB9CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VQYXJhbWV0ZXJPYmplY3QvaW5uZXJDbGFzcy9iZWZvcmUvVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVBhcmFtZXRlck9iamVjdC9pbm5lckNsYXNzL2JlZm9yZS9UZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWEyMGJjNAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VQYXJhbWV0ZXJPYmplY3QvaW5uZXJDbGFzcy9iZWZvcmUvVGVzdC5qYXZhCkBAIC0wLDAgKzEsNyBAQAorY2xhc3MgVGVzdCB7CisgIHZvaWQgZm9vKFN0cmluZyBzKSB7CisgICAgYmFyKHMpOworICB9CisKKyAgdm9pZCBiYXIoU3RyaW5nIHMpe30KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlUGFyYW1ldGVyT2JqZWN0L2lubmVyQ2xhc3NJbkludGVyZmFjZS9hZnRlci9UZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlUGFyYW1ldGVyT2JqZWN0L2lubmVyQ2xhc3NJbkludGVyZmFjZS9hZnRlci9UZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGQ5NzNhNgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VQYXJhbWV0ZXJPYmplY3QvaW5uZXJDbGFzc0luSW50ZXJmYWNlL2FmdGVyL1Rlc3QuamF2YQpAQCAtMCwwICsxLDIwIEBACitwdWJsaWMgaW50ZXJmYWNlIFRlc3QgeworICB2b2lkIGZvbyhQYXJhbSBwYXJhbSk7CisKKyAgICBwcml2YXRlIHN0YXRpYyBjbGFzcyBQYXJhbSB7CisgICAgICAgIHByaXZhdGUgZmluYWwgU3RyaW5nIHM7CisKKyAgICAgICAgcHJpdmF0ZSBQYXJhbShTdHJpbmcgcykgeworICAgICAgICAgICAgdGhpcy5zID0gczsKKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyBTdHJpbmcgZ2V0UygpIHsKKyAgICAgICAgICAgIHJldHVybiBzOworICAgICAgICB9CisgICAgfQorfQorCitjbGFzcyBUZXN0SW1wbCBpbXBsZW1lbnRzIFRlc3QgeworICB2b2lkIGZvbyhUZXN0LlBhcmFtIHBhcmFtKXt9Cit9CisKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VQYXJhbWV0ZXJPYmplY3QvaW5uZXJDbGFzc0luSW50ZXJmYWNlL2JlZm9yZS9UZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlUGFyYW1ldGVyT2JqZWN0L2lubmVyQ2xhc3NJbkludGVyZmFjZS9iZWZvcmUvVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFmM2FlYmEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlUGFyYW1ldGVyT2JqZWN0L2lubmVyQ2xhc3NJbkludGVyZmFjZS9iZWZvcmUvVGVzdC5qYXZhCkBAIC0wLDAgKzEsOCBAQAorcHVibGljIGludGVyZmFjZSBUZXN0IHsKKyAgdm9pZCBmb28oU3RyaW5nIHMpOworfQorCitjbGFzcyBUZXN0SW1wbCBpbXBsZW1lbnRzIFRlc3QgeworICB2b2lkIGZvbyhTdHJpbmcgcyl7fQorfQorCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlUGFyYW1ldGVyT2JqZWN0L2ludGVnZXJJbmNyZW1lbnRhbC9hZnRlci9UZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlUGFyYW1ldGVyT2JqZWN0L2ludGVnZXJJbmNyZW1lbnRhbC9hZnRlci9UZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTc3MzViZQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VQYXJhbWV0ZXJPYmplY3QvaW50ZWdlckluY3JlbWVudGFsL2FmdGVyL1Rlc3QuamF2YQpAQCAtMCwwICsxLDkgQEAKK2NsYXNzIFRlc3QgeworICB2b2lkIGZvbyhJbnRlZ2VyIGludGVnZXIpIHsKKyAgICBpbnRlZ2VyLmludFZhbHVlKCkgKyAxOworICB9CisKKyAgdm9pZCBiYXIoKXsKKyAgICBmb28obmV3IEludGVnZXIoMSkpOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVBhcmFtZXRlck9iamVjdC9pbnRlZ2VySW5jcmVtZW50YWwvYmVmb3JlL1Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VQYXJhbWV0ZXJPYmplY3QvaW50ZWdlckluY3JlbWVudGFsL2JlZm9yZS9UZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzZjOGM5NAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VQYXJhbWV0ZXJPYmplY3QvaW50ZWdlckluY3JlbWVudGFsL2JlZm9yZS9UZXN0LmphdmEKQEAgLTAsMCArMSw5IEBACitjbGFzcyBUZXN0IHsKKyAgdm9pZCBmb28oaW50IGkpIHsKKyAgICBpKys7CisgIH0KKworICB2b2lkIGJhcigpeworICAgIGZvbygxKTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VQYXJhbWV0ZXJPYmplY3QvaW50ZWdlcldyYXBwZXIvYWZ0ZXIvVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVBhcmFtZXRlck9iamVjdC9pbnRlZ2VyV3JhcHBlci9hZnRlci9UZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTI4NmUwMQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VQYXJhbWV0ZXJPYmplY3QvaW50ZWdlcldyYXBwZXIvYWZ0ZXIvVGVzdC5qYXZhCkBAIC0wLDAgKzEsMTAgQEAKK2NsYXNzIFRlc3QgeworICB2b2lkIGZvbyhJbnRlZ2VyIGludGVnZXIpIHsKKyAgICBpZiAoaW50ZWdlci5pbnRWYWx1ZSgpID09IDApIHsKKyAgICB9CisgIH0KKworICB2b2lkIGJhcigpeworICAgIGZvbyhuZXcgSW50ZWdlcigxKSk7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlUGFyYW1ldGVyT2JqZWN0L2ludGVnZXJXcmFwcGVyL2JlZm9yZS9UZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlUGFyYW1ldGVyT2JqZWN0L2ludGVnZXJXcmFwcGVyL2JlZm9yZS9UZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjkzZDNmZgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VQYXJhbWV0ZXJPYmplY3QvaW50ZWdlcldyYXBwZXIvYmVmb3JlL1Rlc3QuamF2YQpAQCAtMCwwICsxLDEwIEBACitjbGFzcyBUZXN0IHsKKyAgdm9pZCBmb28oaW50IGkpIHsKKyAgICBpZiAoaSA9PSAwKSB7CisgICAgfQorICB9CisKKyAgdm9pZCBiYXIoKXsKKyAgICBmb28oMSk7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlUGFyYW1ldGVyT2JqZWN0L2xoYXNzaWdubWVudC9hZnRlci9QYXJhbS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVBhcmFtZXRlck9iamVjdC9saGFzc2lnbm1lbnQvYWZ0ZXIvUGFyYW0uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YTlkMmY5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVBhcmFtZXRlck9iamVjdC9saGFzc2lnbm1lbnQvYWZ0ZXIvUGFyYW0uamF2YQpAQCAtMCwwICsxLDE1IEBACitwdWJsaWMgY2xhc3MgUGFyYW0geworICAgIHByaXZhdGUgaW50IGk7CisKKyAgICBwdWJsaWMgUGFyYW0oaW50IGkpIHsKKyAgICAgICAgdGhpcy5pID0gaTsKKyAgICB9CisKKyAgICBwdWJsaWMgaW50IGdldEkoKSB7CisgICAgICAgIHJldHVybiBpOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIHNldEkoaW50IGkpIHsKKyAgICAgICAgdGhpcy5pID0gaTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlUGFyYW1ldGVyT2JqZWN0L2xoYXNzaWdubWVudC9hZnRlci9UZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlUGFyYW1ldGVyT2JqZWN0L2xoYXNzaWdubWVudC9hZnRlci9UZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzJmYzNlNAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VQYXJhbWV0ZXJPYmplY3QvbGhhc3NpZ25tZW50L2FmdGVyL1Rlc3QuamF2YQpAQCAtMCwwICsxLDExIEBACitjbGFzcyBUZXN0IHsKKyAgdm9pZCBmb28oUGFyYW0gcGFyYW0pIHsKKyAgICBpZiAocGFyYW0uZ2V0SSgpID09IDApIHsKKyAgICAgICAgcGFyYW0uc2V0SSg5KTsKKyAgICB9CisgIH0KKworICB2b2lkIGJhcigpeworICAgIGZvbyhuZXcgUGFyYW0oMSkpOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVBhcmFtZXRlck9iamVjdC9saGFzc2lnbm1lbnQvYmVmb3JlL1Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VQYXJhbWV0ZXJPYmplY3QvbGhhc3NpZ25tZW50L2JlZm9yZS9UZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjBiYjM4MAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VQYXJhbWV0ZXJPYmplY3QvbGhhc3NpZ25tZW50L2JlZm9yZS9UZXN0LmphdmEKQEAgLTAsMCArMSwxMSBAQAorY2xhc3MgVGVzdCB7CisgIHZvaWQgZm9vKGludCBpKSB7CisgICAgaWYgKGkgPT0gMCkgeworICAgICAgICBpID0gOTsKKyAgICB9CisgIH0KKworICB2b2lkIGJhcigpeworICAgIGZvbygxKTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VQYXJhbWV0ZXJPYmplY3QvbXVsdGlwbGVUeXBlUGFyYW1ldGVycy9hZnRlci9BLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlUGFyYW1ldGVyT2JqZWN0L211bHRpcGxlVHlwZVBhcmFtZXRlcnMvYWZ0ZXIvQS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA3ZWI1MjkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlUGFyYW1ldGVyT2JqZWN0L211bHRpcGxlVHlwZVBhcmFtZXRlcnMvYWZ0ZXIvQS5qYXZhCkBAIC0wLDAgKzEsMyBAQAorY2xhc3MgQTxHLCBUPiBleHRlbmRzIFRlc3Q8RywgVD57CisgIHZvaWQgZm9vKFBhcmFtPFQ+IHBhcmFtKXt9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVBhcmFtZXRlck9iamVjdC9tdWx0aXBsZVR5cGVQYXJhbWV0ZXJzL2FmdGVyL1BhcmFtLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlUGFyYW1ldGVyT2JqZWN0L211bHRpcGxlVHlwZVBhcmFtZXRlcnMvYWZ0ZXIvUGFyYW0uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMmMyZTdkMwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VQYXJhbWV0ZXJPYmplY3QvbXVsdGlwbGVUeXBlUGFyYW1ldGVycy9hZnRlci9QYXJhbS5qYXZhCkBAIC0wLDAgKzEsMTEgQEAKK3B1YmxpYyBjbGFzcyBQYXJhbTxSPiB7CisgICAgcHJpdmF0ZSBmaW5hbCBSIHI7CisKKyAgICBwdWJsaWMgUGFyYW0oUiByKSB7CisgICAgICAgIHRoaXMuciA9IHI7CisgICAgfQorCisgICAgcHVibGljIFIgZ2V0UigpIHsKKyAgICAgICAgcmV0dXJuIHI7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVBhcmFtZXRlck9iamVjdC9tdWx0aXBsZVR5cGVQYXJhbWV0ZXJzL2FmdGVyL1Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VQYXJhbWV0ZXJPYmplY3QvbXVsdGlwbGVUeXBlUGFyYW1ldGVycy9hZnRlci9UZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTM3M2FmNQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VQYXJhbWV0ZXJPYmplY3QvbXVsdGlwbGVUeXBlUGFyYW1ldGVycy9hZnRlci9UZXN0LmphdmEKQEAgLTAsMCArMSwxMCBAQAorY2xhc3MgVGVzdDxHLCBSPiB7CisgIHZvaWQgZm9vKFBhcmFtPFI+IHBhcmFtKSB7CisgICAgaWYgKHBhcmFtLmdldFIoKSA9PSBudWxsKSB7CisgICAgfQorICB9CisKKyAgdm9pZCBiYXIoUiByKXsKKyAgICBmb28obmV3IFBhcmFtPFI+KHIpKTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VQYXJhbWV0ZXJPYmplY3QvbXVsdGlwbGVUeXBlUGFyYW1ldGVycy9iZWZvcmUvQS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVBhcmFtZXRlck9iamVjdC9tdWx0aXBsZVR5cGVQYXJhbWV0ZXJzL2JlZm9yZS9BLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWU5OGQ4MgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VQYXJhbWV0ZXJPYmplY3QvbXVsdGlwbGVUeXBlUGFyYW1ldGVycy9iZWZvcmUvQS5qYXZhCkBAIC0wLDAgKzEsMyBAQAorY2xhc3MgQTxHLCBUPiBleHRlbmRzIFRlc3Q8RywgVD57CisgIHZvaWQgZm9vKFQgdCl7fQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VQYXJhbWV0ZXJPYmplY3QvbXVsdGlwbGVUeXBlUGFyYW1ldGVycy9iZWZvcmUvVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVBhcmFtZXRlck9iamVjdC9tdWx0aXBsZVR5cGVQYXJhbWV0ZXJzL2JlZm9yZS9UZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzIwOWIyZgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VQYXJhbWV0ZXJPYmplY3QvbXVsdGlwbGVUeXBlUGFyYW1ldGVycy9iZWZvcmUvVGVzdC5qYXZhCkBAIC0wLDAgKzEsMTAgQEAKK2NsYXNzIFRlc3Q8RywgUj4geworICB2b2lkIGZvbyhSIHIpIHsKKyAgICBpZiAociA9PSBudWxsKSB7CisgICAgfQorICB9CisKKyAgdm9pZCBiYXIoUiByKXsKKyAgICBmb28ocik7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlUGFyYW1ldGVyT2JqZWN0L3BhcmFtTmFtZUNvbmZsaWN0L2FmdGVyL1BhcmFtLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlUGFyYW1ldGVyT2JqZWN0L3BhcmFtTmFtZUNvbmZsaWN0L2FmdGVyL1BhcmFtLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGM4ODhiZgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VQYXJhbWV0ZXJPYmplY3QvcGFyYW1OYW1lQ29uZmxpY3QvYWZ0ZXIvUGFyYW0uamF2YQpAQCAtMCwwICsxLDExIEBACitwdWJsaWMgY2xhc3MgUGFyYW0geworICAgIHByaXZhdGUgZmluYWwgaW50W10gaTsKKworICAgIHB1YmxpYyBQYXJhbShpbnQuLi4gaSkgeworICAgICAgICB0aGlzLmkgPSBpOworICAgIH0KKworICAgIHB1YmxpYyBpbnRbXSBnZXRJKCkgeworICAgICAgICByZXR1cm4gaTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlUGFyYW1ldGVyT2JqZWN0L3BhcmFtTmFtZUNvbmZsaWN0L2FmdGVyL1Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VQYXJhbWV0ZXJPYmplY3QvcGFyYW1OYW1lQ29uZmxpY3QvYWZ0ZXIvVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBmMTg2YjEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlUGFyYW1ldGVyT2JqZWN0L3BhcmFtTmFtZUNvbmZsaWN0L2FmdGVyL1Rlc3QuamF2YQpAQCAtMCwwICsxLDExIEBACitjbGFzcyBUZXN0IHsKKyAgdm9pZCBmb28oUGFyYW0gcGFyYW0xKSB7CisgICAgaWYgKHBhcmFtMS5nZXRJKCkubGVuZ2h0ID09IDApIHsKKyAgICB9CisgICAgUGFyYW0gcGFyYW0gPSBudWxsOworICB9CisKKyAgdm9pZCBiYXIoKXsKKyAgICBmb28obmV3IFBhcmFtKDEsIDIpKTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VQYXJhbWV0ZXJPYmplY3QvcGFyYW1OYW1lQ29uZmxpY3QvYmVmb3JlL1BhcmFtLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlUGFyYW1ldGVyT2JqZWN0L3BhcmFtTmFtZUNvbmZsaWN0L2JlZm9yZS9QYXJhbS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBjODg4YmYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlUGFyYW1ldGVyT2JqZWN0L3BhcmFtTmFtZUNvbmZsaWN0L2JlZm9yZS9QYXJhbS5qYXZhCkBAIC0wLDAgKzEsMTEgQEAKK3B1YmxpYyBjbGFzcyBQYXJhbSB7CisgICAgcHJpdmF0ZSBmaW5hbCBpbnRbXSBpOworCisgICAgcHVibGljIFBhcmFtKGludC4uLiBpKSB7CisgICAgICAgIHRoaXMuaSA9IGk7CisgICAgfQorCisgICAgcHVibGljIGludFtdIGdldEkoKSB7CisgICAgICAgIHJldHVybiBpOworICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VQYXJhbWV0ZXJPYmplY3QvcGFyYW1OYW1lQ29uZmxpY3QvYmVmb3JlL1Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VQYXJhbWV0ZXJPYmplY3QvcGFyYW1OYW1lQ29uZmxpY3QvYmVmb3JlL1Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNWM1ODVjCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVBhcmFtZXRlck9iamVjdC9wYXJhbU5hbWVDb25mbGljdC9iZWZvcmUvVGVzdC5qYXZhCkBAIC0wLDAgKzEsMTEgQEAKK2NsYXNzIFRlc3QgeworICB2b2lkIGZvbyhpbnQuLi4gaSkgeworICAgIGlmIChpLmxlbmdodCA9PSAwKSB7CisgICAgfQorICAgIFBhcmFtIHBhcmFtID0gbnVsbDsKKyAgfQorCisgIHZvaWQgYmFyKCl7CisgICAgZm9vKDEsIDIpOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVBhcmFtZXRlck9iamVjdC9wcmltaXRpdmUvYWZ0ZXIvUGFyYW0uamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VQYXJhbWV0ZXJPYmplY3QvcHJpbWl0aXZlL2FmdGVyL1BhcmFtLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmI2YzEzNQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VQYXJhbWV0ZXJPYmplY3QvcHJpbWl0aXZlL2FmdGVyL1BhcmFtLmphdmEKQEAgLTAsMCArMSwxMSBAQAorcHVibGljIGNsYXNzIFBhcmFtIHsKKyAgICBwcml2YXRlIGZpbmFsIGludCBpOworCisgICAgcHVibGljIFBhcmFtKGludCBpKSB7CisgICAgICAgIHRoaXMuaSA9IGk7CisgICAgfQorCisgICAgcHVibGljIGludCBnZXRJKCkgeworICAgICAgICByZXR1cm4gaTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlUGFyYW1ldGVyT2JqZWN0L3ByaW1pdGl2ZS9hZnRlci9UZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlUGFyYW1ldGVyT2JqZWN0L3ByaW1pdGl2ZS9hZnRlci9UZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDZiN2RhNgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VQYXJhbWV0ZXJPYmplY3QvcHJpbWl0aXZlL2FmdGVyL1Rlc3QuamF2YQpAQCAtMCwwICsxLDEwIEBACitjbGFzcyBUZXN0IHsKKyAgdm9pZCBmb28oUGFyYW0gcGFyYW0pIHsKKyAgICBpZiAocGFyYW0uZ2V0SSgpID09IDApIHsKKyAgICB9CisgIH0KKworICB2b2lkIGJhcigpeworICAgIGZvbyhuZXcgUGFyYW0oMSkpOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVBhcmFtZXRlck9iamVjdC9wcmltaXRpdmUvYmVmb3JlL1Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VQYXJhbWV0ZXJPYmplY3QvcHJpbWl0aXZlL2JlZm9yZS9UZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjkzZDNmZgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VQYXJhbWV0ZXJPYmplY3QvcHJpbWl0aXZlL2JlZm9yZS9UZXN0LmphdmEKQEAgLTAsMCArMSwxMCBAQAorY2xhc3MgVGVzdCB7CisgIHZvaWQgZm9vKGludCBpKSB7CisgICAgaWYgKGkgPT0gMCkgeworICAgIH0KKyAgfQorCisgIHZvaWQgYmFyKCl7CisgICAgZm9vKDEpOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVBhcmFtZXRlck9iamVjdC9zYW1lVHlwZUFuZFZhcmFyZ3MvYWZ0ZXIvUGFyYW0uamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VQYXJhbWV0ZXJPYmplY3Qvc2FtZVR5cGVBbmRWYXJhcmdzL2FmdGVyL1BhcmFtLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODk0Yjc2MQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VQYXJhbWV0ZXJPYmplY3Qvc2FtZVR5cGVBbmRWYXJhcmdzL2FmdGVyL1BhcmFtLmphdmEKQEAgLTAsMCArMSwxNyBAQAorcHVibGljIGNsYXNzIFBhcmFtIHsKKyAgICBwcml2YXRlIGZpbmFsIFN0cmluZyBhOworICAgIHByaXZhdGUgZmluYWwgU3RyaW5nIGI7CisKKyAgICBwdWJsaWMgUGFyYW0oU3RyaW5nIGEsIFN0cmluZyBiKSB7CisgICAgICAgIHRoaXMuYSA9IGE7CisgICAgICAgIHRoaXMuYiA9IGI7CisgICAgfQorCisgICAgcHVibGljIFN0cmluZyBnZXRBKCkgeworICAgICAgICByZXR1cm4gYTsKKyAgICB9CisKKyAgICBwdWJsaWMgU3RyaW5nIGdldEIoKSB7CisgICAgICAgIHJldHVybiBiOworICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VQYXJhbWV0ZXJPYmplY3Qvc2FtZVR5cGVBbmRWYXJhcmdzL2FmdGVyL1Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VQYXJhbWV0ZXJPYmplY3Qvc2FtZVR5cGVBbmRWYXJhcmdzL2FmdGVyL1Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYjdkYmRhCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVBhcmFtZXRlck9iamVjdC9zYW1lVHlwZUFuZFZhcmFyZ3MvYWZ0ZXIvVGVzdC5qYXZhCkBAIC0wLDAgKzEsMzAgQEAKKy8qCisqIENvcHlyaWdodCAyMDAwLTIwMTEgSmV0QnJhaW5zIHMuci5vLgorKgorKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyoKKyogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisqCisqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisqLworaW50ZXJmYWNlIFRlc3QgeworICB2b2lkIGZvbyhQYXJhbSBwYXJhbSwgU3RyaW5nLi4uIHYpOworfQorCitjbGFzcyBUZXN0SW1wbCBpbXBsZW1lbnRzIFRlc3QgeworICBAT3ZlcnJpZGUKKyAgcHVibGljIHZvaWQgZm9vKFBhcmFtIHBhcmFtLCBTdHJpbmcuLi4gdikgeworICB9CisKKyAgdm9pZCBiYXIoKXsKKyAgICAgZm9vKG5ldyBQYXJhbSgiYSIsICJiIiksICJjIik7CisgICAgIGZvbyhuZXcgUGFyYW0oImEiLCAiYiIpKTsKKyAgICAgZm9vKG5ldyBQYXJhbSgiYSIsICJiIiksICJjIiwgImQiKTsKKyAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlUGFyYW1ldGVyT2JqZWN0L3NhbWVUeXBlQW5kVmFyYXJncy9iZWZvcmUvVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVBhcmFtZXRlck9iamVjdC9zYW1lVHlwZUFuZFZhcmFyZ3MvYmVmb3JlL1Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNGJlYmJmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVBhcmFtZXRlck9iamVjdC9zYW1lVHlwZUFuZFZhcmFyZ3MvYmVmb3JlL1Rlc3QuamF2YQpAQCAtMCwwICsxLDMwIEBACisvKgorKiBDb3B5cmlnaHQgMjAwMC0yMDExIEpldEJyYWlucyBzLnIuby4KKyoKKyogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisqCisqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorKgorKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorKi8KK2ludGVyZmFjZSBUZXN0IHsKKyAgdm9pZCBmb28oU3RyaW5nIGEsIFN0cmluZyBiLCBTdHJpbmcuLi4gdik7Cit9CisKK2NsYXNzIFRlc3RJbXBsIGltcGxlbWVudHMgVGVzdCB7CisgIEBPdmVycmlkZQorICBwdWJsaWMgdm9pZCBmb28oU3RyaW5nIGEsIFN0cmluZyBiLCBTdHJpbmcuLi4gdikgeworICB9CisKKyAgdm9pZCBiYXIoKXsKKyAgICAgZm9vKCJhIiwgImIiLCAiYyIpOworICAgICBmb28oImEiLCAiYiIpOworICAgICBmb28oImEiLCAiYiIsICJjIiwgImQiKTsKKyAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlUGFyYW1ldGVyT2JqZWN0L3N1cGVyQ2FsbHMvYWZ0ZXIvQS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVBhcmFtZXRlck9iamVjdC9zdXBlckNhbGxzL2FmdGVyL0EuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZDdiN2QwCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVBhcmFtZXRlck9iamVjdC9zdXBlckNhbGxzL2FmdGVyL0EuamF2YQpAQCAtMCwwICsxLDEwIEBACitjbGFzcyBBIGV4dGVuZHMgVGVzdHsKKyAgIHZvaWQgZm9vKFBhcmFtIHBhcmFtKSB7CisgICAgIHN1cGVyLmZvbyhwYXJhbSk7CisgICAgIFN5c3RlbS5vdXQucHJpbnRsbihwYXJhbS5zZXRJKHBhcmFtLmdldEkoKSArIDEpKTsKKyAgIH0KKworICAgdm9pZCBiYXp6KCl7CisgICAgIGZvbyhuZXcgUGFyYW0oMCkpOworICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VQYXJhbWV0ZXJPYmplY3Qvc3VwZXJDYWxscy9hZnRlci9CLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlUGFyYW1ldGVyT2JqZWN0L3N1cGVyQ2FsbHMvYWZ0ZXIvQi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFkYjA1ZTYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlUGFyYW1ldGVyT2JqZWN0L3N1cGVyQ2FsbHMvYWZ0ZXIvQi5qYXZhCkBAIC0wLDAgKzEsMTAgQEAKK2NsYXNzIEIgZXh0ZW5kcyBUZXN0IHsKKyAgdm9pZCBmb28oUGFyYW0gcGFyYW0pIHsKKyAgICBzdXBlci5mb28ocGFyYW0pOworICAgIFN5c3RlbS5lcnIucHJpbnRsbihwYXJhbS5zZXRJKHBhcmFtLmdldEkoKSAtIDEpKTsKKyAgfQorCisgIHZvaWQgYmFyKCkgeworICAgIGZvbyhuZXcgUGFyYW0oMSkpOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVBhcmFtZXRlck9iamVjdC9zdXBlckNhbGxzL2FmdGVyL1BhcmFtLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlUGFyYW1ldGVyT2JqZWN0L3N1cGVyQ2FsbHMvYWZ0ZXIvUGFyYW0uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YTlkMmY5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVBhcmFtZXRlck9iamVjdC9zdXBlckNhbGxzL2FmdGVyL1BhcmFtLmphdmEKQEAgLTAsMCArMSwxNSBAQAorcHVibGljIGNsYXNzIFBhcmFtIHsKKyAgICBwcml2YXRlIGludCBpOworCisgICAgcHVibGljIFBhcmFtKGludCBpKSB7CisgICAgICAgIHRoaXMuaSA9IGk7CisgICAgfQorCisgICAgcHVibGljIGludCBnZXRJKCkgeworICAgICAgICByZXR1cm4gaTsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBzZXRJKGludCBpKSB7CisgICAgICAgIHRoaXMuaSA9IGk7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVBhcmFtZXRlck9iamVjdC9zdXBlckNhbGxzL2FmdGVyL1Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VQYXJhbWV0ZXJPYmplY3Qvc3VwZXJDYWxscy9hZnRlci9UZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDFmYjhiNQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VQYXJhbWV0ZXJPYmplY3Qvc3VwZXJDYWxscy9hZnRlci9UZXN0LmphdmEKQEAgLTAsMCArMSw5IEBACitjbGFzcyBUZXN0IHsKKyAgdm9pZCBmb28oUGFyYW0gcGFyYW0pIHsKKyAgICAgIHBhcmFtLnNldEkocGFyYW0uZ2V0SSgpICsgMSk7CisgIH0KKworICB2b2lkIGJhcigpeworICAgIGZvbyhuZXcgUGFyYW0oMSkpOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVBhcmFtZXRlck9iamVjdC9zdXBlckNhbGxzL2JlZm9yZS9BLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlUGFyYW1ldGVyT2JqZWN0L3N1cGVyQ2FsbHMvYmVmb3JlL0EuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMzFlZGU1Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVBhcmFtZXRlck9iamVjdC9zdXBlckNhbGxzL2JlZm9yZS9BLmphdmEKQEAgLTAsMCArMSwxMCBAQAorY2xhc3MgQSBleHRlbmRzIFRlc3R7CisgICB2b2lkIGZvbyhpbnQgaSkgeworICAgICBzdXBlci5mb28oaSk7CisgICAgIFN5c3RlbS5vdXQucHJpbnRsbihpKyspOworICAgfQorCisgICB2b2lkIGJhenooKXsKKyAgICAgZm9vKDApOworICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VQYXJhbWV0ZXJPYmplY3Qvc3VwZXJDYWxscy9iZWZvcmUvQi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVBhcmFtZXRlck9iamVjdC9zdXBlckNhbGxzL2JlZm9yZS9CLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTUwMDBhZQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VQYXJhbWV0ZXJPYmplY3Qvc3VwZXJDYWxscy9iZWZvcmUvQi5qYXZhCkBAIC0wLDAgKzEsMTAgQEAKK2NsYXNzIEIgZXh0ZW5kcyBUZXN0IHsKKyAgdm9pZCBmb28oaW50IGkpIHsKKyAgICBzdXBlci5mb28oaSk7CisgICAgU3lzdGVtLmVyci5wcmludGxuKC0taSk7CisgIH0KKworICB2b2lkIGJhcigpIHsKKyAgICBmb28oMSk7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlUGFyYW1ldGVyT2JqZWN0L3N1cGVyQ2FsbHMvYmVmb3JlL1Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VQYXJhbWV0ZXJPYmplY3Qvc3VwZXJDYWxscy9iZWZvcmUvVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM2YzhjOTQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlUGFyYW1ldGVyT2JqZWN0L3N1cGVyQ2FsbHMvYmVmb3JlL1Rlc3QuamF2YQpAQCAtMCwwICsxLDkgQEAKK2NsYXNzIFRlc3QgeworICB2b2lkIGZvbyhpbnQgaSkgeworICAgIGkrKzsKKyAgfQorCisgIHZvaWQgYmFyKCl7CisgICAgZm9vKDEpOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVBhcmFtZXRlck9iamVjdC90eXBlUGFyYW1ldGVycy9hZnRlci9BLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlUGFyYW1ldGVyT2JqZWN0L3R5cGVQYXJhbWV0ZXJzL2FmdGVyL0EuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MDk0OTc5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVBhcmFtZXRlck9iamVjdC90eXBlUGFyYW1ldGVycy9hZnRlci9BLmphdmEKQEAgLTAsMCArMSwzIEBACitjbGFzcyBBPFQ+IGV4dGVuZHMgVGVzdDxUPnsKKyAgdm9pZCBmb28oUGFyYW08VD4gcGFyYW0pe30KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlUGFyYW1ldGVyT2JqZWN0L3R5cGVQYXJhbWV0ZXJzL2FmdGVyL1BhcmFtLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlUGFyYW1ldGVyT2JqZWN0L3R5cGVQYXJhbWV0ZXJzL2FmdGVyL1BhcmFtLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDJjMmU3ZDMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlUGFyYW1ldGVyT2JqZWN0L3R5cGVQYXJhbWV0ZXJzL2FmdGVyL1BhcmFtLmphdmEKQEAgLTAsMCArMSwxMSBAQAorcHVibGljIGNsYXNzIFBhcmFtPFI+IHsKKyAgICBwcml2YXRlIGZpbmFsIFIgcjsKKworICAgIHB1YmxpYyBQYXJhbShSIHIpIHsKKyAgICAgICAgdGhpcy5yID0gcjsKKyAgICB9CisKKyAgICBwdWJsaWMgUiBnZXRSKCkgeworICAgICAgICByZXR1cm4gcjsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlUGFyYW1ldGVyT2JqZWN0L3R5cGVQYXJhbWV0ZXJzL2FmdGVyL1Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VQYXJhbWV0ZXJPYmplY3QvdHlwZVBhcmFtZXRlcnMvYWZ0ZXIvVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY0N2ZmMTAKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlUGFyYW1ldGVyT2JqZWN0L3R5cGVQYXJhbWV0ZXJzL2FmdGVyL1Rlc3QuamF2YQpAQCAtMCwwICsxLDEwIEBACitjbGFzcyBUZXN0PFI+IHsKKyAgdm9pZCBmb28oUGFyYW08Uj4gcGFyYW0pIHsKKyAgICBpZiAocGFyYW0uZ2V0UigpID09IG51bGwpIHsKKyAgICB9CisgIH0KKworICB2b2lkIGJhcihSIHIpeworICAgIGZvbyhuZXcgUGFyYW08Uj4ocikpOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVBhcmFtZXRlck9iamVjdC90eXBlUGFyYW1ldGVycy9iZWZvcmUvQS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVBhcmFtZXRlck9iamVjdC90eXBlUGFyYW1ldGVycy9iZWZvcmUvQS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU3MGE5ZjMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlUGFyYW1ldGVyT2JqZWN0L3R5cGVQYXJhbWV0ZXJzL2JlZm9yZS9BLmphdmEKQEAgLTAsMCArMSwzIEBACitjbGFzcyBBPFQ+IGV4dGVuZHMgVGVzdDxUPnsKKyAgdm9pZCBmb28oVCB0KXt9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVBhcmFtZXRlck9iamVjdC90eXBlUGFyYW1ldGVycy9iZWZvcmUvVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVBhcmFtZXRlck9iamVjdC90eXBlUGFyYW1ldGVycy9iZWZvcmUvVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRjOTQxODAKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlUGFyYW1ldGVyT2JqZWN0L3R5cGVQYXJhbWV0ZXJzL2JlZm9yZS9UZXN0LmphdmEKQEAgLTAsMCArMSwxMCBAQAorY2xhc3MgVGVzdDxSPiB7CisgIHZvaWQgZm9vKFIgcikgeworICAgIGlmIChyID09IG51bGwpIHsKKyAgICB9CisgIH0KKworICB2b2lkIGJhcihSIHIpeworICAgIGZvbyhyKTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VQYXJhbWV0ZXJPYmplY3QvdHlwZVBhcmFtZXRlcnNXaXRoQ2hvc2VuU3VidHlwZS9hZnRlci9UZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlUGFyYW1ldGVyT2JqZWN0L3R5cGVQYXJhbWV0ZXJzV2l0aENob3NlblN1YnR5cGUvYWZ0ZXIvVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJkNTRlYmMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlUGFyYW1ldGVyT2JqZWN0L3R5cGVQYXJhbWV0ZXJzV2l0aENob3NlblN1YnR5cGUvYWZ0ZXIvVGVzdC5qYXZhCkBAIC0wLDAgKzEsMjQgQEAKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworcHVibGljIGNsYXNzIFRlc3Q8VSBleHRlbmRzIExpc3Q+IHsKKwlwdWJsaWMgQ29sbGVjdGlvbiBmb28oUGFyYW0gcGFyYW0pIHsKKwkJcmV0dXJuIHBhcmFtLmdldFAoKTsKKwl9CisKKwlwdWJsaWMgdm9pZCBjb250ZXh0MShVIHApIHsKKwkJQ29sbGVjdGlvbiB2ID0gZm9vKG5ldyBQYXJhbShwKSk7CisJfQorCisgICAgcHJpdmF0ZSBzdGF0aWMgY2xhc3MgUGFyYW0geworICAgICAgICBwcml2YXRlIGZpbmFsIENvbGxlY3Rpb24gcDsKKworICAgICAgICBwcml2YXRlIFBhcmFtKENvbGxlY3Rpb24gcCkgeworICAgICAgICAgICAgdGhpcy5wID0gcDsKKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyBDb2xsZWN0aW9uIGdldFAoKSB7CisgICAgICAgICAgICByZXR1cm4gcDsKKyAgICAgICAgfQorICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VQYXJhbWV0ZXJPYmplY3QvdHlwZVBhcmFtZXRlcnNXaXRoQ2hvc2VuU3VidHlwZS9iZWZvcmUvVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVBhcmFtZXRlck9iamVjdC90eXBlUGFyYW1ldGVyc1dpdGhDaG9zZW5TdWJ0eXBlL2JlZm9yZS9UZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjJiNDI0NgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VQYXJhbWV0ZXJPYmplY3QvdHlwZVBhcmFtZXRlcnNXaXRoQ2hvc2VuU3VidHlwZS9iZWZvcmUvVGVzdC5qYXZhCkBAIC0wLDAgKzEsMTIgQEAKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworcHVibGljIGNsYXNzIFRlc3Q8VSBleHRlbmRzIExpc3Q+IHsKKwlwdWJsaWMgQ29sbGVjdGlvbiBmb28oVSBwKSB7CisJCXJldHVybiBwOworCX0KKworCXB1YmxpYyB2b2lkIGNvbnRleHQxKFUgcCkgeworCQlDb2xsZWN0aW9uIHYgPSBmb28ocCk7CisJfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVBhcmFtZXRlck9iamVjdC91c2VkSW5uZXJDbGFzcy9hZnRlci9UZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlUGFyYW1ldGVyT2JqZWN0L3VzZWRJbm5lckNsYXNzL2FmdGVyL1Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YzhkMzE4Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVBhcmFtZXRlck9iamVjdC91c2VkSW5uZXJDbGFzcy9hZnRlci9UZXN0LmphdmEKQEAgLTAsMCArMSwxOSBAQAorY2xhc3MgVGVzdCB7CisgIHZvaWQgZm9vKFBhcmFtIHBhcmFtKSB7CisgICAgYmFyKHBhcmFtLmdldFMoKSk7CisgIH0KKworICB2b2lkIGJhcihTdHJpbmcgcyl7fQorCisgICAgc3RhdGljIGNsYXNzIFBhcmFtIHsKKyAgICAgICAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgczsKKworICAgICAgICBQYXJhbShTdHJpbmcgcykgeworICAgICAgICAgICAgdGhpcy5zID0gczsKKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyBTdHJpbmcgZ2V0UygpIHsKKyAgICAgICAgICAgIHJldHVybiBzOworICAgICAgICB9CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VQYXJhbWV0ZXJPYmplY3QvdXNlZElubmVyQ2xhc3MvYWZ0ZXIvVXNhZ2UuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VQYXJhbWV0ZXJPYmplY3QvdXNlZElubmVyQ2xhc3MvYWZ0ZXIvVXNhZ2UuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NDAyODliCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVBhcmFtZXRlck9iamVjdC91c2VkSW5uZXJDbGFzcy9hZnRlci9Vc2FnZS5qYXZhCkBAIC0wLDAgKzEsNSBAQAorY2xhc3MgVXNhZ2UgeworICB2b2lkIGJhcnIoVGVzdCB0KSB7CisgICAgdC5mb28obmV3IFRlc3QuUGFyYW0oIiIpKTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VQYXJhbWV0ZXJPYmplY3QvdXNlZElubmVyQ2xhc3MvYmVmb3JlL1Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VQYXJhbWV0ZXJPYmplY3QvdXNlZElubmVyQ2xhc3MvYmVmb3JlL1Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YTIwYmM0Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVBhcmFtZXRlck9iamVjdC91c2VkSW5uZXJDbGFzcy9iZWZvcmUvVGVzdC5qYXZhCkBAIC0wLDAgKzEsNyBAQAorY2xhc3MgVGVzdCB7CisgIHZvaWQgZm9vKFN0cmluZyBzKSB7CisgICAgYmFyKHMpOworICB9CisKKyAgdm9pZCBiYXIoU3RyaW5nIHMpe30KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlUGFyYW1ldGVyT2JqZWN0L3VzZWRJbm5lckNsYXNzL2JlZm9yZS9Vc2FnZS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVBhcmFtZXRlck9iamVjdC91c2VkSW5uZXJDbGFzcy9iZWZvcmUvVXNhZ2UuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOGY2MmFjCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVBhcmFtZXRlck9iamVjdC91c2VkSW5uZXJDbGFzcy9iZWZvcmUvVXNhZ2UuamF2YQpAQCAtMCwwICsxLDUgQEAKK2NsYXNzIFVzYWdlIHsKKyAgdm9pZCBiYXJyKFRlc3QgdCkgeworICAgIHQuZm9vKCIiKTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VQYXJhbWV0ZXJPYmplY3QvdmFyYXJncy9hZnRlci9QYXJhbS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVBhcmFtZXRlck9iamVjdC92YXJhcmdzL2FmdGVyL1BhcmFtLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGM4ODhiZgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VQYXJhbWV0ZXJPYmplY3QvdmFyYXJncy9hZnRlci9QYXJhbS5qYXZhCkBAIC0wLDAgKzEsMTEgQEAKK3B1YmxpYyBjbGFzcyBQYXJhbSB7CisgICAgcHJpdmF0ZSBmaW5hbCBpbnRbXSBpOworCisgICAgcHVibGljIFBhcmFtKGludC4uLiBpKSB7CisgICAgICAgIHRoaXMuaSA9IGk7CisgICAgfQorCisgICAgcHVibGljIGludFtdIGdldEkoKSB7CisgICAgICAgIHJldHVybiBpOworICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VQYXJhbWV0ZXJPYmplY3QvdmFyYXJncy9hZnRlci9UZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlUGFyYW1ldGVyT2JqZWN0L3ZhcmFyZ3MvYWZ0ZXIvVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhlMGE0ZGIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlUGFyYW1ldGVyT2JqZWN0L3ZhcmFyZ3MvYWZ0ZXIvVGVzdC5qYXZhCkBAIC0wLDAgKzEsMTAgQEAKK2NsYXNzIFRlc3QgeworICB2b2lkIGZvbyhQYXJhbSBwYXJhbSkgeworICAgIGlmIChwYXJhbS5nZXRJKCkubGVuZ2h0ID09IDApIHsKKyAgICB9CisgIH0KKworICB2b2lkIGJhcigpeworICAgIGZvbyhuZXcgUGFyYW0oMSwgMikpOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVBhcmFtZXRlck9iamVjdC92YXJhcmdzL2JlZm9yZS9UZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlUGFyYW1ldGVyT2JqZWN0L3ZhcmFyZ3MvYmVmb3JlL1Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMTExN2NjCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVBhcmFtZXRlck9iamVjdC92YXJhcmdzL2JlZm9yZS9UZXN0LmphdmEKQEAgLTAsMCArMSwxMCBAQAorY2xhc3MgVGVzdCB7CisgIHZvaWQgZm9vKGludC4uLiBpKSB7CisgICAgaWYgKGkubGVuZ2h0ID09IDApIHsKKyAgICB9CisgIH0KKworICB2b2lkIGJhcigpeworICAgIGZvbygxLCAyKTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VQYXJhbWV0ZXJPYmplY3Qvd3JvbmdCZWFuL2FmdGVyL1BhcmFtLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlUGFyYW1ldGVyT2JqZWN0L3dyb25nQmVhbi9hZnRlci9QYXJhbS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJkMDUyMTEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlUGFyYW1ldGVyT2JqZWN0L3dyb25nQmVhbi9hZnRlci9QYXJhbS5qYXZhCkBAIC0wLDAgKzEsNyBAQAorcHVibGljIGNsYXNzIFBhcmFtIHsKKyAgICBwcml2YXRlIGZpbmFsIGludFtdIGk7CisKKyAgICBwdWJsaWMgUGFyYW0oaW50Li4uIGkpIHsKKyAgICAgICAgdGhpcy5pID0gaTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlUGFyYW1ldGVyT2JqZWN0L3dyb25nQmVhbi9hZnRlci9UZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlUGFyYW1ldGVyT2JqZWN0L3dyb25nQmVhbi9hZnRlci9UZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzExMTdjYwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VQYXJhbWV0ZXJPYmplY3Qvd3JvbmdCZWFuL2FmdGVyL1Rlc3QuamF2YQpAQCAtMCwwICsxLDEwIEBACitjbGFzcyBUZXN0IHsKKyAgdm9pZCBmb28oaW50Li4uIGkpIHsKKyAgICBpZiAoaS5sZW5naHQgPT0gMCkgeworICAgIH0KKyAgfQorCisgIHZvaWQgYmFyKCl7CisgICAgZm9vKDEsIDIpOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVBhcmFtZXRlck9iamVjdC93cm9uZ0JlYW4vYmVmb3JlL1BhcmFtLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlUGFyYW1ldGVyT2JqZWN0L3dyb25nQmVhbi9iZWZvcmUvUGFyYW0uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZDA1MjExCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVBhcmFtZXRlck9iamVjdC93cm9uZ0JlYW4vYmVmb3JlL1BhcmFtLmphdmEKQEAgLTAsMCArMSw3IEBACitwdWJsaWMgY2xhc3MgUGFyYW0geworICAgIHByaXZhdGUgZmluYWwgaW50W10gaTsKKworICAgIHB1YmxpYyBQYXJhbShpbnQuLi4gaSkgeworICAgICAgICB0aGlzLmkgPSBpOworICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VQYXJhbWV0ZXJPYmplY3Qvd3JvbmdCZWFuL2JlZm9yZS9UZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlUGFyYW1ldGVyT2JqZWN0L3dyb25nQmVhbi9iZWZvcmUvVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMxMTE3Y2MKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlUGFyYW1ldGVyT2JqZWN0L3dyb25nQmVhbi9iZWZvcmUvVGVzdC5qYXZhCkBAIC0wLDAgKzEsMTAgQEAKK2NsYXNzIFRlc3QgeworICB2b2lkIGZvbyhpbnQuLi4gaSkgeworICAgIGlmIChpLmxlbmdodCA9PSAwKSB7CisgICAgfQorICB9CisKKyAgdm9pZCBiYXIoKXsKKyAgICBmb28oMSwgMik7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlVmFyaWFibGUvQW5kQW5kU3ViZXhwcmVzc2lvbi5hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVZhcmlhYmxlL0FuZEFuZFN1YmV4cHJlc3Npb24uYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOWIzZWQ1Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVZhcmlhYmxlL0FuZEFuZFN1YmV4cHJlc3Npb24uYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDYgQEAKK2NsYXNzIEEgeworICAgIHB1YmxpYyB2b2lkIHRlc3QoYm9vbGVhbiBhLCBib29sZWFuIGIpIHsKKyAgICAgICAgZmluYWwgYm9vbGVhbiBhYiA9IGEgJiYgYjsKKyAgICAgICAgaWYgKHRydWUgJiYgYWIpOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlVmFyaWFibGUvQW5kQW5kU3ViZXhwcmVzc2lvbi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVZhcmlhYmxlL0FuZEFuZFN1YmV4cHJlc3Npb24uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNWEwZGMyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVZhcmlhYmxlL0FuZEFuZFN1YmV4cHJlc3Npb24uamF2YQpAQCAtMCwwICsxLDUgQEAKK2NsYXNzIEEgeworICAgIHB1YmxpYyB2b2lkIHRlc3QoYm9vbGVhbiBhLCBib29sZWFuIGIpIHsKKyAgICAgICAgaWYgKHRydWUgJiYgPHNlbGVjdGlvbj5hICYmIGI8L3NlbGVjdGlvbj4pOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlVmFyaWFibGUvQW5vbnltb3VzQ2xhc3MuYWZ0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VWYXJpYWJsZS9Bbm9ueW1vdXNDbGFzcy5hZnRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI0NWVhOGYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlVmFyaWFibGUvQW5vbnltb3VzQ2xhc3MuYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDEwIEBACitjbGFzcyBUZXN0IHsKKyAgICBwdWJsaWMgdm9pZCBtZXRob2QoKSB7CisgICAgICAgIGZpbmFsIGludCB0ZW1wID0gMSArIDI7CisgICAgICAgIFJ1bm5hYmxlIHIgPSBuZXcgUnVubmFibGUoKSB7CisgICAgICAgICAgICBwdWJsaWMgdm9pZCBydW4oKSB7CisgICAgICAgICAgICAgICAgaW50IGkgPSB0ZW1wOworICAgICAgICAgICAgfQorICAgICAgICB9OworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlVmFyaWFibGUvQW5vbnltb3VzQ2xhc3MuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VWYXJpYWJsZS9Bbm9ueW1vdXNDbGFzcy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNlMGI4OWUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlVmFyaWFibGUvQW5vbnltb3VzQ2xhc3MuamF2YQpAQCAtMCwwICsxLDEwIEBACitjbGFzcyBUZXN0IHsKKyAgICBwdWJsaWMgdm9pZCBtZXRob2QoKSB7CisgICAgICAgIDEgKyAyIDxjYXJldD4KKyAgICAgICAgUnVubmFibGUgciA9IG5ldyBSdW5uYWJsZSgpIHsKKyAgICAgICAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKKyAgICAgICAgICAgICAgICBpbnQgaSA9IDEgKyAyOworICAgICAgICAgICAgfQorICAgICAgICB9OworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlVmFyaWFibGUvQW5vbnltb3VzQ2xhc3MxLmFmdGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlVmFyaWFibGUvQW5vbnltb3VzQ2xhc3MxLmFmdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDI3MGQ3ZAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VWYXJpYWJsZS9Bbm9ueW1vdXNDbGFzczEuYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDkgQEAKK2NsYXNzIEEgeworICAgIHN0YXRpYyB7CisgICAgICAgIFJ1bm5hYmxlIHJ1bm5hYmxlID0gbmV3IFJ1bm5hYmxlKCkgeworICAgICAgICAgICAgcHVibGljIHZvaWQgcnVuKCkgeworICAgICAgICAgICAgfQorICAgICAgICB9OworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4ocnVubmFibGUpOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlVmFyaWFibGUvQW5vbnltb3VzQ2xhc3MxLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlVmFyaWFibGUvQW5vbnltb3VzQ2xhc3MxLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTZhNTVkNAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VWYXJpYWJsZS9Bbm9ueW1vdXNDbGFzczEuamF2YQpAQCAtMCwwICsxLDggQEAKK2NsYXNzIEEgeworICAgIHN0YXRpYyB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbig8c2VsZWN0aW9uPm5ldyBSdW5uYWJsZSgpIHsKKyAgICAgICAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfTwvc2VsZWN0aW9uPik7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VWYXJpYWJsZS9Bbm9ueW1vdXNDbGFzczIuYWZ0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VWYXJpYWJsZS9Bbm9ueW1vdXNDbGFzczIuYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYmRhNjRjCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVZhcmlhYmxlL0Fub255bW91c0NsYXNzMi5hZnRlci5qYXZhCkBAIC0wLDAgKzEsMTMgQEAKK3B1YmxpYyBjbGFzcyBUZXN0Q2xhc3MgeworICAgIHZvaWQgeCgpIHsKKyAgICAgICAgbmV3IEV4Y2VwdGlvbigpIHsKKyAgICAgICAgICAgIGludCBkb1NvbWV0aGluZygpIHsgcmV0dXJuIDE7IH0KKyAgICAgICAgICAgIHZvaWQgYSgpIHsKKyAgICAgICAgICAgICAgICBpbnQgaiA9IGRvU29tZXRoaW5nKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB2b2lkIGIoKSB7CisgICAgICAgICAgICAgICAgZG9Tb21ldGhpbmcoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVZhcmlhYmxlL0Fub255bW91c0NsYXNzMi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVZhcmlhYmxlL0Fub255bW91c0NsYXNzMi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZjZjdhMDUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlVmFyaWFibGUvQW5vbnltb3VzQ2xhc3MyLmphdmEKQEAgLTAsMCArMSwxMyBAQAorcHVibGljIGNsYXNzIFRlc3RDbGFzcyB7CisgICAgdm9pZCB4KCkgeworICAgICAgICBuZXcgRXhjZXB0aW9uKCkgeworICAgICAgICAgICAgaW50IGRvU29tZXRoaW5nKCkgeyByZXR1cm4gMTsgfQorICAgICAgICAgICAgdm9pZCBhKCkgeworICAgICAgICAgICAgICAgIDxzZWxlY3Rpb24+ZG9Tb21ldGhpbmcoKTwvc2VsZWN0aW9uPjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHZvaWQgYigpIHsKKyAgICAgICAgICAgICAgICBkb1NvbWV0aGluZygpOworICAgICAgICAgICAgfQorICAgICAgICB9OworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlVmFyaWFibGUvQXJyYXlGcm9tVmFyYXJncy5hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVZhcmlhYmxlL0FycmF5RnJvbVZhcmFyZ3MuYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOWVkZDkxCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVZhcmlhYmxlL0FycmF5RnJvbVZhcmFyZ3MuYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDggQEAKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlzOworCitjbGFzcyBBIHsKKyAgICBwdWJsaWMgdm9pZCB0ZXN0KCkgeworICAgICAgICBTdHJpbmdbXSBzdHJzID0geyJzY25kIiwgInRoaXJkIn07CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihBcnJheXMuYXNMaXN0KCJmcnN0Iiwgc3RycywgIjR0aCIpKTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVZhcmlhYmxlL0FycmF5RnJvbVZhcmFyZ3MuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VWYXJpYWJsZS9BcnJheUZyb21WYXJhcmdzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzUzYWRjYgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VWYXJpYWJsZS9BcnJheUZyb21WYXJhcmdzLmphdmEKQEAgLTAsMCArMSw3IEBACitpbXBvcnQgamF2YS51dGlsLkFycmF5czsKKworY2xhc3MgQSB7CisgICAgcHVibGljIHZvaWQgdGVzdCgpIHsKKyAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihBcnJheXMuYXNMaXN0KCJmcnN0IiwgPHNlbGVjdGlvbj4ic2NuZCIsICJ0aGlyZCI8L3NlbGVjdGlvbj4sICI0dGgiKSk7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VWYXJpYWJsZS9BcnJheUZyb21WYXJhcmdzMS5hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVZhcmlhYmxlL0FycmF5RnJvbVZhcmFyZ3MxLmFmdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2I4NWJiZAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VWYXJpYWJsZS9BcnJheUZyb21WYXJhcmdzMS5hZnRlci5qYXZhCkBAIC0wLDAgKzEsOSBAQAorcHVibGljIGNsYXNzIEZvbyB7CisgICAgcHVibGljIEZvbyhTdHJpbmcgLi4uIHN0cnMpIHt9CisKKyAgICBwdWJsaWMgdm9pZCB0ZXN0MShGb28gbywgU3RyaW5nLi4uIGZvbykge30KKyAgICB2b2lkIGJhcigpIHsKKyAgICAgICAgU3RyaW5nW10gc3RycyA9IHsiIiwgIiJ9OworICAgICAgICB0ZXN0MShuZXcgRm9vKHN0cnMpKTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVZhcmlhYmxlL0FycmF5RnJvbVZhcmFyZ3MxLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlVmFyaWFibGUvQXJyYXlGcm9tVmFyYXJnczEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYmRkOTc3Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVZhcmlhYmxlL0FycmF5RnJvbVZhcmFyZ3MxLmphdmEKQEAgLTAsMCArMSw4IEBACitwdWJsaWMgY2xhc3MgRm9vIHsKKyAgICBwdWJsaWMgRm9vKFN0cmluZyAuLi4gc3Rycykge30KKworICAgIHB1YmxpYyB2b2lkIHRlc3QxKEZvbyBvLCBTdHJpbmcuLi4gZm9vKSB7fQorICAgIHZvaWQgYmFyKCkgeworICAgICAgICB0ZXN0MShuZXcgRm9vKDxzZWxlY3Rpb24+ICIiLCAiIjwvc2VsZWN0aW9uPikpOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlVmFyaWFibGUvQXNzaWdubWVudFRvVW5yZXNvbHZlZFJlZmVyZW5jZS5hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVZhcmlhYmxlL0Fzc2lnbm1lbnRUb1VucmVzb2x2ZWRSZWZlcmVuY2UuYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMTYzYjUyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVZhcmlhYmxlL0Fzc2lnbm1lbnRUb1VucmVzb2x2ZWRSZWZlcmVuY2UuYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDE1IEBACitpbXBvcnQgamF2YS51dGlsLio7CisKK3B1YmxpYyBjbGFzcyBUZXN0PFQ+Cit7CisgICAgICAgIExpc3Q8Q29sbGVjdGlvbjxUPj4gZ2V0TGlzdCAoKQorICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBBcnJheUxpc3Q8Q29sbGVjdGlvbjxUPj4gKCk7CisgICAgICAgIH0KKworICAgICAgICBwdWJsaWMgdm9pZCB0ZXN0MiAoVGVzdDw/PiBhcmcpCisgICAgICAgIHsKKyAgICAgICAgICAgIGZpbmFsIExpc3Q8PyBleHRlbmRzIENvbGxlY3Rpb248Pz4+IGNvbGxlY3Rpb24gPSByZXN1bHQ7CisgICAgICAgICAgICBjb2xsZWN0aW9uID0gYXJnLmdldExpc3QgKCk7CisgICAgICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlVmFyaWFibGUvQXNzaWdubWVudFRvVW5yZXNvbHZlZFJlZmVyZW5jZS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVZhcmlhYmxlL0Fzc2lnbm1lbnRUb1VucmVzb2x2ZWRSZWZlcmVuY2UuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZDllZTZmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVZhcmlhYmxlL0Fzc2lnbm1lbnRUb1VucmVzb2x2ZWRSZWZlcmVuY2UuamF2YQpAQCAtMCwwICsxLDE0IEBACitpbXBvcnQgamF2YS51dGlsLio7CisKK3B1YmxpYyBjbGFzcyBUZXN0PFQ+Cit7CisgICAgICAgIExpc3Q8Q29sbGVjdGlvbjxUPj4gZ2V0TGlzdCAoKQorICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBBcnJheUxpc3Q8Q29sbGVjdGlvbjxUPj4gKCk7CisgICAgICAgIH0KKworICAgICAgICBwdWJsaWMgdm9pZCB0ZXN0MiAoVGVzdDw/PiBhcmcpCisgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXM8Y2FyZXQ+dWx0ID0gYXJnLmdldExpc3QgKCk7CisgICAgICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlVmFyaWFibGUvQmVmb3JlVm9pZFN0YXRlbWVudC5hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVZhcmlhYmxlL0JlZm9yZVZvaWRTdGF0ZW1lbnQuYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMDNhZjg3ZQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VWYXJpYWJsZS9CZWZvcmVWb2lkU3RhdGVtZW50LmFmdGVyLmphdmEKQEAgLTAsMCArMSw4IEBACitjbGFzcyBUZXN0IHsKKyAgdm9pZCBmb28oKSB7CisgICAgICBPYmplY3QgYyA9IGdldE9iamVjdCgpOworICAgICAgYy5ub3RpZnkoKTsKKyAgfQorCisgIE9iamVjdCBnZXRPYmplY3QoKSB7cmV0dXJuIG51bGw7fQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VWYXJpYWJsZS9CZWZvcmVWb2lkU3RhdGVtZW50LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlVmFyaWFibGUvQmVmb3JlVm9pZFN0YXRlbWVudC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjczZTExMzEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlVmFyaWFibGUvQmVmb3JlVm9pZFN0YXRlbWVudC5qYXZhCkBAIC0wLDAgKzEsNyBAQAorY2xhc3MgVGVzdCB7CisgIHZvaWQgZm9vKCkgeworICAgICA8Y2FyZXQ+Z2V0T2JqZWN0KCkubm90aWZ5KCk7CisgIH0KKworICBPYmplY3QgZ2V0T2JqZWN0KCkge3JldHVybiBudWxsO30KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlVmFyaWFibGUvQ2FudENvbGxhcHNlZFRvRGlhbW9uZC5hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVZhcmlhYmxlL0NhbnRDb2xsYXBzZWRUb0RpYW1vbmQuYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NTk4ZGM0Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVZhcmlhYmxlL0NhbnRDb2xsYXBzZWRUb0RpYW1vbmQuYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDEwIEBACitjbGFzcyBUZXN0IHsKKyAgdm9pZCBmb28oKSB7CisgICAgICBmaW5hbCBGb288TnVtYmVyPiBhID0gbmV3IEZvbzxOdW1iZXI+KDEpOworICB9Cit9CisKK2NsYXNzIEZvbzxUPiB7CisgIEZvbyhUIHQpIHsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VWYXJpYWJsZS9DYW50Q29sbGFwc2VkVG9EaWFtb25kLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlVmFyaWFibGUvQ2FudENvbGxhcHNlZFRvRGlhbW9uZC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRkNGNjNzEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlVmFyaWFibGUvQ2FudENvbGxhcHNlZFRvRGlhbW9uZC5qYXZhCkBAIC0wLDAgKzEsMTAgQEAKK2NsYXNzIFRlc3QgeworICB2b2lkIGZvbygpIHsKKyAgICAgIG5ldyBGb288TnVtPGNhcmV0PmJlcj4oMSk7CisgIH0KK30KKworY2xhc3MgRm9vPFQ+IHsKKyAgRm9vKFQgdCkgeworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVZhcmlhYmxlL0NvbGxhcHNlZFRvRGlhbW9uZC5hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVZhcmlhYmxlL0NvbGxhcHNlZFRvRGlhbW9uZC5hZnRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM5NWQ4NjcKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlVmFyaWFibGUvQ29sbGFwc2VkVG9EaWFtb25kLmFmdGVyLmphdmEKQEAgLTAsMCArMSw2IEBACitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK2NsYXNzIFRlc3QgeworICB2b2lkIGZvbygpIHsKKyAgICAgIGZpbmFsIEFycmF5TGlzdDxTdHJpbmc+IGEgPSBuZXcgQXJyYXlMaXN0PD4oKTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VWYXJpYWJsZS9Db2xsYXBzZWRUb0RpYW1vbmQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VWYXJpYWJsZS9Db2xsYXBzZWRUb0RpYW1vbmQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNzc2Y2NlCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVZhcmlhYmxlL0NvbGxhcHNlZFRvRGlhbW9uZC5qYXZhCkBAIC0wLDAgKzEsNiBAQAoraW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CitjbGFzcyBUZXN0IHsKKyAgdm9pZCBmb28oKSB7CisgICAgbmV3IEFycmF5PGNhcmV0Pkxpc3Q8U3RyaW5nPigpCisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlVmFyaWFibGUvQ29uZmxpY3RpbmdGaWVsZC5hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVZhcmlhYmxlL0NvbmZsaWN0aW5nRmllbGQuYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMzU4MzM1Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVZhcmlhYmxlL0NvbmZsaWN0aW5nRmllbGQuYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDggQEAKK2NsYXNzIEEgeworICAgIHByaXZhdGUgaW50IG5hbWU7CisgICAgcHVibGljIHZvaWQgbWV0aG9kKCkgeworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4obmFtZSk7CisgICAgICAgIFN0cmluZyBuYW1lID0gInh5eiI7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbih0aGlzLm5hbWUpOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlVmFyaWFibGUvQ29uZmxpY3RpbmdGaWVsZC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVZhcmlhYmxlL0NvbmZsaWN0aW5nRmllbGQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YWEwZjQxCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVZhcmlhYmxlL0NvbmZsaWN0aW5nRmllbGQuamF2YQpAQCAtMCwwICsxLDggQEAKK2NsYXNzIEEgeworICAgIHByaXZhdGUgaW50IG5hbWU7CisgICAgcHVibGljIHZvaWQgbWV0aG9kKCkgeworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4obmFtZSk7CisgICAgICAgIDxzZWxlY3Rpb24+Inh5eiI8L3NlbGVjdGlvbj4KKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKG5hbWUpOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlVmFyaWFibGUvQ29uZmxpY3RpbmdGaWVsZEluRXhwcmVzc2lvbi5hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVZhcmlhYmxlL0NvbmZsaWN0aW5nRmllbGRJbkV4cHJlc3Npb24uYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45Njg5ZDNkCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVZhcmlhYmxlL0NvbmZsaWN0aW5nRmllbGRJbkV4cHJlc3Npb24uYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDggQEAKK2NsYXNzIEEgeworICAgIHByaXZhdGUgaW50IG5hbWU7CisgICAgcHVibGljIHZvaWQgbWV0aG9kKCkgeworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4obmFtZSk7CisgICAgICAgIGludCBuYW1lID0gdGhpcy5uYW1lOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4odGhpcy5uYW1lKTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVZhcmlhYmxlL0NvbmZsaWN0aW5nRmllbGRJbkV4cHJlc3Npb24uamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VWYXJpYWJsZS9Db25mbGljdGluZ0ZpZWxkSW5FeHByZXNzaW9uLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWM3ODA4YwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VWYXJpYWJsZS9Db25mbGljdGluZ0ZpZWxkSW5FeHByZXNzaW9uLmphdmEKQEAgLTAsMCArMSw4IEBACitjbGFzcyBBIHsKKyAgICBwcml2YXRlIGludCBuYW1lOworICAgIHB1YmxpYyB2b2lkIG1ldGhvZCgpIHsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKG5hbWUpOworICAgICAgICA8c2VsZWN0aW9uPm5hbWU8L3NlbGVjdGlvbj4KKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKG5hbWUpOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlVmFyaWFibGUvQ29uZmxpY3RpbmdGaWVsZEluT3V0ZXJDbGFzcy5hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVZhcmlhYmxlL0NvbmZsaWN0aW5nRmllbGRJbk91dGVyQ2xhc3MuYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOWE2YmE4Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVZhcmlhYmxlL0NvbmZsaWN0aW5nRmllbGRJbk91dGVyQ2xhc3MuYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDkgQEAKK3B1YmxpYyBjbGFzcyBUZXN0NCB7CisgICAgU3RyaW5nIHRleHQgPSAiSGVsbG8gd29ybGQhIjsKKyAgICBwcml2YXRlIGNsYXNzIFEgeworICAgICAgICB2b2lkIGZvbygpIHsKKyAgICAgICAgICAgIGZpbmFsIFN0cmluZyB0ZXh0ID0gVGVzdDQudGhpcy50ZXh0OworICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJ0ZXh0ID0gIiArIHRleHQpOworICAgICAgICB9CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VWYXJpYWJsZS9Db25mbGljdGluZ0ZpZWxkSW5PdXRlckNsYXNzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlVmFyaWFibGUvQ29uZmxpY3RpbmdGaWVsZEluT3V0ZXJDbGFzcy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBhOTY0ZmMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlVmFyaWFibGUvQ29uZmxpY3RpbmdGaWVsZEluT3V0ZXJDbGFzcy5qYXZhCkBAIC0wLDAgKzEsOCBAQAorcHVibGljIGNsYXNzIFRlc3Q0IHsKKyAgICBTdHJpbmcgdGV4dCA9ICJIZWxsbyB3b3JsZCEiOworICAgIHByaXZhdGUgY2xhc3MgUSB7CisgICAgICAgIHZvaWQgZm9vKCkgeworICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJ0ZXh0ID0gIiArIDxzZWxlY3Rpb24+dGV4dDwvc2VsZWN0aW9uPik7CisgICAgICAgIH0KKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVZhcmlhYmxlL0RpZmZlcmVudEZvcmVhY2hQYXJhbWV0ZXJzLmFmdGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlVmFyaWFibGUvRGlmZmVyZW50Rm9yZWFjaFBhcmFtZXRlcnMuYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMDIxZTA5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVZhcmlhYmxlL0RpZmZlcmVudEZvcmVhY2hQYXJhbWV0ZXJzLmFmdGVyLmphdmEKQEAgLTAsMCArMSwxMiBAQAorY2xhc3MgQSB7CisgIHsKKyAgICBMaXN0PEludGVnZXI+IGwgPSBuZXcgQXJyYXlMaXN0PEludGVnZXI+KCk7CisgICAgZm9yIChJbnRlZ2VyIGkgOiBsKSB7CisgICAgICAgIGZpbmFsIFN0cmluZyB0b3N0ciA9IGkudG9TdHJpbmcoKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKHRvc3RyKTsKKyAgICB9CisgICAgZm9yIChJbnRlZ2VyIGkgOiBsKSB7CisgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oaS50b1N0cmluZygpKTsKKyAgICB9CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlVmFyaWFibGUvRGlmZmVyZW50Rm9yZWFjaFBhcmFtZXRlcnMuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VWYXJpYWJsZS9EaWZmZXJlbnRGb3JlYWNoUGFyYW1ldGVycy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM2ODNiZmEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlVmFyaWFibGUvRGlmZmVyZW50Rm9yZWFjaFBhcmFtZXRlcnMuamF2YQpAQCAtMCwwICsxLDExIEBACitjbGFzcyBBIHsKKyAgeworICAgIExpc3Q8SW50ZWdlcj4gbCA9IG5ldyBBcnJheUxpc3Q8SW50ZWdlcj4oKTsKKyAgICBmb3IgKEludGVnZXIgaSA6IGwpIHsKKyAgICAgIFN5c3RlbS5vdXQucHJpbnRsbig8c2VsZWN0aW9uPmkudG9TdHJpbmcoKTwvc2VsZWN0aW9uPik7CisgICAgfQorICAgIGZvciAoSW50ZWdlciBpIDogbCkgeworICAgICAgU3lzdGVtLm91dC5wcmludGxuKGkudG9TdHJpbmcoKSk7CisgICAgfQorICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVZhcmlhYmxlL0R1cGxpY2F0ZUdlbmVyaWNFeHByZXNzaW9ucy5hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVZhcmlhYmxlL0R1cGxpY2F0ZUdlbmVyaWNFeHByZXNzaW9ucy5hZnRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJmYTJlN2UKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlVmFyaWFibGUvRHVwbGljYXRlR2VuZXJpY0V4cHJlc3Npb25zLmFmdGVyLmphdmEKQEAgLTAsMCArMSwxMiBAQAorY2xhc3MgRm9vMjxUPiB7CisgICAgRm9vMjw/IGV4dGVuZHMgUnVubmFibGU+IGdldExpc3QoKSB7CisgICAgICAgIHJldHVybiBudWxsOworICAgIH0KKworICAgIHsKKyAgICAgICAgRm9vMjxUPiBmID0gbmV3IEZvbzI8VD4oKTsKKyAgICAgICAgRm9vMjw/IGV4dGVuZHMgUnVubmFibGU+IHRlbXAgPSBmLmdldExpc3QoKTsKKyAgICAgICAgT2JqZWN0IGEgPSB0ZW1wOworICAgICAgICBPYmplY3QgYiA9IHRlbXA7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVZhcmlhYmxlL0R1cGxpY2F0ZUdlbmVyaWNFeHByZXNzaW9ucy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVZhcmlhYmxlL0R1cGxpY2F0ZUdlbmVyaWNFeHByZXNzaW9ucy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY1ODc5MGIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlVmFyaWFibGUvRHVwbGljYXRlR2VuZXJpY0V4cHJlc3Npb25zLmphdmEKQEAgLTAsMCArMSwxMSBAQAorY2xhc3MgRm9vMjxUPiB7CisgICAgRm9vMjw/IGV4dGVuZHMgUnVubmFibGU+IGdldExpc3QoKSB7CisgICAgICAgIHJldHVybiBudWxsOworICAgIH0KKworICAgIHsKKyAgICAgICAgRm9vMjxUPiBmID0gbmV3IEZvbzI8VD4oKTsKKyAgICAgICAgT2JqZWN0IGEgPSA8c2VsZWN0aW9uPmYuZ2V0TGlzdCgpPC9zZWxlY3Rpb24+OworICAgICAgICBPYmplY3QgYiA9IGYuZ2V0TGlzdCgpOworICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VWYXJpYWJsZS9EdXBsaWNhdGVzQW5vbnltb3VzQ2xhc3NDcmVhdGlvbldpdGhTaW1pbGFyUGFyYW1ldGVycy5hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVZhcmlhYmxlL0R1cGxpY2F0ZXNBbm9ueW1vdXNDbGFzc0NyZWF0aW9uV2l0aFNpbWlsYXJQYXJhbWV0ZXJzLmFmdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmZkZmQ4MwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VWYXJpYWJsZS9EdXBsaWNhdGVzQW5vbnltb3VzQ2xhc3NDcmVhdGlvbldpdGhTaW1pbGFyUGFyYW1ldGVycy5hZnRlci5qYXZhCkBAIC0wLDAgKzEsMjYgQEAKK3B1YmxpYyBjbGFzcyBGb28geworCisJcHVibGljIHN0YXRpYyB2b2lkIGJhenooaW50IGkpIHsKKyAgICAgICAgZmluYWwgRm9vIGZvbzEgPSBuZXcgRm9vKG5ldyBJQmFyKCkgeworICAgICAgICAgICAgcHVibGljIHZvaWQgZG9Tb21ldGhpbmcoKSB7CisgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJoZWxsbyIpOworICAgICAgICAgICAgfQorICAgICAgICB9KTsKKyAgICAgICAgZmluYWwgRm9vIGZvbyA9IGkgIT0gMCA/IGZvbzEgOiBmb28xOworCQlmb28uYmxhKCk7CisJfQorCisJcHJpdmF0ZSBmaW5hbCBJQmFyIGJhcjsKKworCXB1YmxpYyBGb28oSUJhciBiYXIpIHsKKwkJdGhpcy5iYXIgPSBiYXI7CisJfQorCisJcHVibGljIHZvaWQgYmxhKCkgeworCQliYXIuZG9Tb21ldGhpbmcoKTsKKwl9CisKKwlwdWJsaWMgaW50ZXJmYWNlIElCYXIgeworCQl2b2lkIGRvU29tZXRoaW5nKCk7CisJfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VWYXJpYWJsZS9EdXBsaWNhdGVzQW5vbnltb3VzQ2xhc3NDcmVhdGlvbldpdGhTaW1pbGFyUGFyYW1ldGVycy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVZhcmlhYmxlL0R1cGxpY2F0ZXNBbm9ueW1vdXNDbGFzc0NyZWF0aW9uV2l0aFNpbWlsYXJQYXJhbWV0ZXJzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjZiMWMyNgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VWYXJpYWJsZS9EdXBsaWNhdGVzQW5vbnltb3VzQ2xhc3NDcmVhdGlvbldpdGhTaW1pbGFyUGFyYW1ldGVycy5qYXZhCkBAIC0wLDAgKzEsMjkgQEAKK3B1YmxpYyBjbGFzcyBGb28geworCisJcHVibGljIHN0YXRpYyB2b2lkIGJhenooaW50IGkpIHsKKwkJZmluYWwgRm9vIGZvbyA9IGkgIT0gMCA/IDxzZWxlY3Rpb24+bmV3IEZvbyhuZXcgSUJhcigpIHsKKwkJCXB1YmxpYyB2b2lkIGRvU29tZXRoaW5nKCkgeworCQkJCVN5c3RlbS5vdXQucHJpbnRsbigiaGVsbG8iKTsKKwkJCX0KKwkJfSk8L3NlbGVjdGlvbj4gOiBuZXcgRm9vKG5ldyBJQmFyKCkgeworCQkJcHVibGljIHZvaWQgZG9Tb21ldGhpbmcoKSB7CisJCQkJU3lzdGVtLm91dC5wcmludGxuKCJoZWxsbyIpOworCQkJfQorCQl9KTsKKwkJZm9vLmJsYSgpOworCX0KKworCXByaXZhdGUgZmluYWwgSUJhciBiYXI7CisKKwlwdWJsaWMgRm9vKElCYXIgYmFyKSB7CisJCXRoaXMuYmFyID0gYmFyOworCX0KKworCXB1YmxpYyB2b2lkIGJsYSgpIHsKKwkJYmFyLmRvU29tZXRoaW5nKCk7CisJfQorCisJcHVibGljIGludGVyZmFjZSBJQmFyIHsKKwkJdm9pZCBkb1NvbWV0aGluZygpOworCX0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlVmFyaWFibGUvRW51bUFycmF5RnJvbVZhcmFyZ3MuYWZ0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VWYXJpYWJsZS9FbnVtQXJyYXlGcm9tVmFyYXJncy5hZnRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY0MDdjZmEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlVmFyaWFibGUvRW51bUFycmF5RnJvbVZhcmFyZ3MuYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDEzIEBACitjbGFzcyBUZXN0IHsKKyAgdm9pZCBmb28oRS4uLiBlKSB7CisgIH0KKworICB2b2lkIGJhcigpIHsKKyAgICAgIEVbXSBzdHJzID0ge0UuRTEsIEUuRTJ9OworICAgICAgZm9vKHN0cnMpOworICB9Cit9CisKK3N0YXRpYyBlbnVtIEUgeworICBFMSwgRTI7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVZhcmlhYmxlL0VudW1BcnJheUZyb21WYXJhcmdzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlVmFyaWFibGUvRW51bUFycmF5RnJvbVZhcmFyZ3MuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MzM5OTFjCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVZhcmlhYmxlL0VudW1BcnJheUZyb21WYXJhcmdzLmphdmEKQEAgLTAsMCArMSwxMiBAQAorY2xhc3MgVGVzdCB7CisgIHZvaWQgZm9vKEUuLi4gZSkgeworICB9CisKKyAgdm9pZCBiYXIoKSB7CisgICAgZm9vKDxzZWxlY3Rpb24+RS5FMSwgRS5FMjwvc2VsZWN0aW9uPik7CisgIH0KK30KKworc3RhdGljIGVudW0gRSB7CisgIEUxLCBFMjsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlVmFyaWFibGUvRnJvbUZpbmFsRmllbGRPbkFzc2lnbm1lbnQuYWZ0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VWYXJpYWJsZS9Gcm9tRmluYWxGaWVsZE9uQXNzaWdubWVudC5hZnRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU5MmRlZTYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlVmFyaWFibGUvRnJvbUZpbmFsRmllbGRPbkFzc2lnbm1lbnQuYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDggQEAKK3B1YmxpYyBjbGFzcyBDIHsKKyAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgbXlTdHI7CisKKyAgcHVibGljIEMoKSB7CisgICAgbXlTdHIgPSAiIjsKKyAgICAgIFN0cmluZyBzdHJzID0gbXlTdHI7CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VWYXJpYWJsZS9Gcm9tRmluYWxGaWVsZE9uQXNzaWdubWVudC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVZhcmlhYmxlL0Zyb21GaW5hbEZpZWxkT25Bc3NpZ25tZW50LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDMyYTA1YQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VWYXJpYWJsZS9Gcm9tRmluYWxGaWVsZE9uQXNzaWdubWVudC5qYXZhCkBAIC0wLDAgKzEsNyBAQAorcHVibGljIGNsYXNzIEMgeworICBwcml2YXRlIGZpbmFsIFN0cmluZyBteVN0cjsKKworICBwdWJsaWMgQygpIHsKKyAgICA8c2VsZWN0aW9uPm15U3RyPC9zZWxlY3Rpb24+ID0gIiI7CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VWYXJpYWJsZS9Gcm9tRm9ySW5pdGlhbGl6ZXIuYWZ0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VWYXJpYWJsZS9Gcm9tRm9ySW5pdGlhbGl6ZXIuYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYTVmYzExCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVZhcmlhYmxlL0Zyb21Gb3JJbml0aWFsaXplci5hZnRlci5qYXZhCkBAIC0wLDAgKzEsMTMgQEAKK2ltcG9ydCBqYXZhLnV0aWwuKjsKKworcHVibGljIGNsYXNzIFNvbWVDbGFzcyB7CisKKyAgICBzdGF0aWMgTGlzdCBmb28oKXtyZXR1cm4gbnVsbDt9CisKKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisgICAgICAgIGZpbmFsIExpc3QgbGlzdCA9IGZvbygpOworICAgICAgICBmb3IgKEl0ZXJhdG9yIGl0ID0gbGlzdC5saXN0SXRlcmF0b3IobGlzdC5zaXplKCkpOyBpdC5oYXNOZXh0KCk7ICkgeworCisgICAgICAgIH0KKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVZhcmlhYmxlL0Zyb21Gb3JJbml0aWFsaXplci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVZhcmlhYmxlL0Zyb21Gb3JJbml0aWFsaXplci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFiNTU4N2MKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlVmFyaWFibGUvRnJvbUZvckluaXRpYWxpemVyLmphdmEKQEAgLTAsMCArMSwxMiBAQAoraW1wb3J0IGphdmEudXRpbC4qOworCitwdWJsaWMgY2xhc3MgU29tZUNsYXNzIHsKKworICAgIHN0YXRpYyBMaXN0IGZvbygpe3JldHVybiBudWxsO30KKworICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKyAgICAgICAgZm9yIChJdGVyYXRvciBpdCA9IDxzZWxlY3Rpb24+Zm9vKCk8L3NlbGVjdGlvbj4ubGlzdEl0ZXJhdG9yKGZvbygpLnNpemUoKSk7IGl0Lmhhc05leHQoKTsgKSB7CisKKyAgICAgICAgfQorICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlVmFyaWFibGUvRnJvbUluamVjdGVkLmFmdGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlVmFyaWFibGUvRnJvbUluamVjdGVkLmFmdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWViYjdhZgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VWYXJpYWJsZS9Gcm9tSW5qZWN0ZWQuYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDYgQEAKK2NsYXNzIFRlc3QgeworICB7CisgICAgICBTdHJpbmcgcmVnZXhwID0gInxcdCI7CisgICAgICBTdHJpbmdbXSBwYXJ0cyA9ICIiLnNwbGl0KHJlZ2V4cCk7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlVmFyaWFibGUvRnJvbUluamVjdGVkLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlVmFyaWFibGUvRnJvbUluamVjdGVkLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTlkZjNkMgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VWYXJpYWJsZS9Gcm9tSW5qZWN0ZWQuamF2YQpAQCAtMCwwICsxLDUgQEAKK2NsYXNzIFRlc3QgeworICB7CisgICAgU3RyaW5nW10gcGFydHMgPSAiIi5zcGxpdCgifDxjYXJldD5cdCIpOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVZhcmlhYmxlL0lERUFERVYxMzM2OS5hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVZhcmlhYmxlL0lERUFERVYxMzM2OS5hZnRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY2N2Y3ZmUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlVmFyaWFibGUvSURFQURFVjEzMzY5LmFmdGVyLmphdmEKQEAgLTAsMCArMSw5IEBACitjbGFzcyBUZXN0ZXIgeworICAgIHZvaWQgbWV0aG9kKCkgeworICAgICAgICBmaW5hbCBpbnRbXSBpbnRzID0gezF9OworICAgICAgICBmKGludHMpOworICAgIH0KKworICAgIHByaXZhdGUgdm9pZCBmKGludFtdIGludHMpIHsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVZhcmlhYmxlL0lERUFERVYxMzM2OS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVZhcmlhYmxlL0lERUFERVYxMzM2OS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg3ZTYyN2IKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlVmFyaWFibGUvSURFQURFVjEzMzY5LmphdmEKQEAgLTAsMCArMSw4IEBACitjbGFzcyBUZXN0ZXIgeworICAgIHZvaWQgbWV0aG9kKCkgeworICAgICAgICBmKDxzZWxlY3Rpb24+bmV3IGludFtdezF9PC9zZWxlY3Rpb24+KTsKKyAgICB9CisKKyAgICBwcml2YXRlIHZvaWQgZihpbnRbXSBpbnRzKSB7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VWYXJpYWJsZS9JREVBREVWMzY3OC5hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVZhcmlhYmxlL0lERUFERVYzNjc4LmFmdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTBlYmI1ZQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VWYXJpYWJsZS9JREVBREVWMzY3OC5hZnRlci5qYXZhCkBAIC0wLDAgKzEsOSBAQAorY2xhc3MgQmFyIHsKKyAgICB2b2lkIGJhcihPYmplY3RbXSBjb21wb25lbnRzKSB7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY29tcG9uZW50cy5sZW5ndGg7ICsraSkgeworICAgICAgICAgICAgZmluYWwgT2JqZWN0IGNvbXBvbmVudCA9IGNvbXBvbmVudHNbaV07CisgICAgICAgICAgICBpZiAoY29tcG9uZW50ICE9IG51bGwpCisgICAgICAgICAgICAgICAgYWRkQ2hpbGRyZW4oY29tcG9uZW50KTsKKyAgICAgICAgfQorICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlVmFyaWFibGUvSURFQURFVjM2NzguamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VWYXJpYWJsZS9JREVBREVWMzY3OC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc2ZGQ1ZWUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlVmFyaWFibGUvSURFQURFVjM2NzguamF2YQpAQCAtMCwwICsxLDcgQEAKK2NsYXNzIEJhciB7CisgICAgdm9pZCBiYXIoT2JqZWN0W10gY29tcG9uZW50cykgeworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvbXBvbmVudHMubGVuZ3RoOyArK2kpCisgICAgICAgICAgICBpZiAoPHNlbGVjdGlvbj5jb21wb25lbnRzW2ldPC9zZWxlY3Rpb24+ICE9IG51bGwpCisgICAgICAgICAgICAgICAgYWRkQ2hpbGRyZW4oY29tcG9uZW50c1tpXSk7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VWYXJpYWJsZS9JbmNvcnJlY3RFeHByZXNzaW9uU2VsZWN0ZWQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VWYXJpYWJsZS9JbmNvcnJlY3RFeHByZXNzaW9uU2VsZWN0ZWQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNjFkMDMyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVZhcmlhYmxlL0luY29ycmVjdEV4cHJlc3Npb25TZWxlY3RlZC5qYXZhCkBAIC0wLDAgKzEsNSBAQAorY2xhc3MgRm9vIHsKKyAgdm9pZCBiYXIoKSB7CisgICAgdGhpcy48c2VsZWN0aW9uPnRvU3RyaW5nKCk8L3NlbGVjdGlvbj4KKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VWYXJpYWJsZS9JbnNpZGVFbHNlLmFmdGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlVmFyaWFibGUvSW5zaWRlRWxzZS5hZnRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI4YzU0OWMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlVmFyaWFibGUvSW5zaWRlRWxzZS5hZnRlci5qYXZhCkBAIC0wLDAgKzEsMTIgQEAKK3B1YmxpYyBjbGFzcyBDIHsKKyAgICB7CisgICAgICAgIE9iamVjdCBvID0gZ2V0TygpOworICAgICAgICBTdHJpbmcgczsKKyAgICAgICAgaWYgKG8gPT0gbnVsbCkKKyAgICAgICAgICAgIHMgPSAiIjsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBTdHJpbmcgczEgPSBvLnRvU3RyaW5nKCk7CisgICAgICAgICAgICBzID0gczE7CisgICAgICAgIH0KKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVZhcmlhYmxlL0luc2lkZUVsc2UuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VWYXJpYWJsZS9JbnNpZGVFbHNlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmExMTE5NgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VWYXJpYWJsZS9JbnNpZGVFbHNlLmphdmEKQEAgLTAsMCArMSw5IEBACitwdWJsaWMgY2xhc3MgQyB7CisgICAgeworICAgICAgICBPYmplY3QgbyA9IGdldE8oKTsKKyAgICAgICAgU3RyaW5nIHM7CisgICAgICAgIGlmIChvID09IG51bGwpCisgICAgICAgICAgICBzID0gIiI7CisgICAgICAgIGVsc2UgcyA9IDxzZWxlY3Rpb24+by50b1N0cmluZygpPC9zZWxlY3Rpb24+OworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlVmFyaWFibGUvSW5zaWRlRm9yLmFmdGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlVmFyaWFibGUvSW5zaWRlRm9yLmFmdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjg2ZjkyZAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VWYXJpYWJsZS9JbnNpZGVGb3IuYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDggQEAKK2NsYXNzIFRlc3QgeworICAgIHB1YmxpYyB2b2lkIG1ldGhvZCgpIHsKKyAgICAgICAgZm9yKGludCBpID0gMDsgaSA8IDEwMDsgaSsrKSB7CisgICAgICAgICAgICBpbnQgdGVtcCA9IGkgKiAyOworICAgICAgICAgICAgc3VtICs9IHRlbXA7CisgICAgICAgIH0KKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVZhcmlhYmxlL0luc2lkZUZvci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVZhcmlhYmxlL0luc2lkZUZvci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI4N2RmZmMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlVmFyaWFibGUvSW5zaWRlRm9yLmphdmEKQEAgLTAsMCArMSw2IEBACitjbGFzcyBUZXN0IHsKKyAgICBwdWJsaWMgdm9pZCBtZXRob2QoKSB7CisgICAgICAgIGZvcihpbnQgaSA9IDA7IGkgPCAxMDA7IGkrKykKKyAgICAgICAgICAgIHN1bSArPSA8c2VsZWN0aW9uPmkgKiAyPC9zZWxlY3Rpb24+OworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlVmFyaWFibGUvSW5zaWRlRm9yTG9vcC5hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVZhcmlhYmxlL0luc2lkZUZvckxvb3AuYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45M2FlOTY3Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVZhcmlhYmxlL0luc2lkZUZvckxvb3AuYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDExIEBACitwdWJsaWMgY2xhc3MgQyB7CisKKyAgcHVibGljIEMoaW50W10gaW50cykgeworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGVuZ3RoICYmIGludHNbaV0gPiAwOyBpKyspIHsKKyAgICAgICAgaW50IHRlbXAgPSBpbnRzW2ldOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4odGVtcCk7CisgICAgICBTeXN0ZW0ub3V0LnByaW50bG4odGVtcCk7CisgICAgICBTeXN0ZW0ub3V0LnByaW50bG4odGVtcCk7CisgICAgfQorICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlVmFyaWFibGUvSW5zaWRlRm9yTG9vcC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVZhcmlhYmxlL0luc2lkZUZvckxvb3AuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNWI2NGEyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVZhcmlhYmxlL0luc2lkZUZvckxvb3AuamF2YQpAQCAtMCwwICsxLDEwIEBACitwdWJsaWMgY2xhc3MgQyB7CisKKyAgcHVibGljIEMoaW50W10gaW50cykgeworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGVuZ3RoICYmIGludHNbaV0gPiAwOyBpKyspIHsKKyAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihpbnRzW2ldKTsKKyAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihpbnRzW2ldKTsKKyAgICAgIFN5c3RlbS5vdXQucHJpbnRsbig8c2VsZWN0aW9uPmludHNbaV08L3NlbGVjdGlvbj4pOworICAgIH0KKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVZhcmlhYmxlL0luc2lkZUlmLmFmdGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlVmFyaWFibGUvSW5zaWRlSWYuYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNmY3MGNhCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVZhcmlhYmxlL0luc2lkZUlmLmFmdGVyLmphdmEKQEAgLTAsMCArMSwxMCBAQAorcHVibGljIGNsYXNzIEMgeworICAgIHsKKyAgICAgICAgT2JqZWN0IG8gPSBnZXRPKCk7CisgICAgICAgIFN0cmluZyBzID0gIiI7CisgICAgICAgIGlmIChvICE9IG51bGwpIHsKKyAgICAgICAgICAgIFN0cmluZyBzMSA9IG8udG9TdHJpbmcoKTsKKyAgICAgICAgICAgIHMgKz0gczE7CisgICAgICAgIH0KKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVZhcmlhYmxlL0luc2lkZUlmLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlVmFyaWFibGUvSW5zaWRlSWYuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZGEyNWM4Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVZhcmlhYmxlL0luc2lkZUlmLmphdmEKQEAgLTAsMCArMSw4IEBACitwdWJsaWMgY2xhc3MgQyB7CisgICAgeworICAgICAgICBPYmplY3QgbyA9IGdldE8oKTsKKyAgICAgICAgU3RyaW5nIHMgPSAiIjsKKyAgICAgICAgaWYgKG8gIT0gbnVsbCkKKyAgICAgICAgICAgIHMgKz0gPHNlbGVjdGlvbj5vLnRvU3RyaW5nKCk8L3NlbGVjdGlvbj47CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VWYXJpYWJsZS9JbnNpZGVXaGlsZS5hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVZhcmlhYmxlL0luc2lkZVdoaWxlLmFmdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGUwNjliYgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VWYXJpYWJsZS9JbnNpZGVXaGlsZS5hZnRlci5qYXZhCkBAIC0wLDAgKzEsOSBAQAorY2xhc3MgVGVzdCB7CisgICAgcHVibGljIHZvaWQgbWV0aG9kKCkgeworICAgICAgICBpbnQgaSA9IDA7CisgICAgICAgIHdoaWxlKGkgPCAxMDApIHsKKyAgICAgICAgICAgIGludCB0ZW1wID0gaSsrICogMjsKKyAgICAgICAgICAgIHN1bSArPSB0ZW1wOworICAgICAgICB9CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VWYXJpYWJsZS9JbnNpZGVXaGlsZS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVZhcmlhYmxlL0luc2lkZVdoaWxlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODZiZmQ5MwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VWYXJpYWJsZS9JbnNpZGVXaGlsZS5qYXZhCkBAIC0wLDAgKzEsNyBAQAorY2xhc3MgVGVzdCB7CisgICAgcHVibGljIHZvaWQgbWV0aG9kKCkgeworICAgICAgICBpbnQgaSA9IDA7CisgICAgICAgIHdoaWxlKGkgPCAxMDApCisgICAgICAgICAgICBzdW0gKz0gPHNlbGVjdGlvbj5pKysgKiAyPC9zZWxlY3Rpb24+OworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlVmFyaWFibGUvSW52YWxpZFBvc3RmaXhFeHByLmFmdGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlVmFyaWFibGUvSW52YWxpZFBvc3RmaXhFeHByLmFmdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmYyYTZkMQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VWYXJpYWJsZS9JbnZhbGlkUG9zdGZpeEV4cHIuYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDggQEAKK3B1YmxpYyBjbGFzcyBTb21lQ2xhc3MgeworICAgIGludFtdIGE7CisgICAgCisgICAgeworICAgICAgICBpbnRbXSBhMSA9IGE7CisgICAgICAgIGExKys7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VWYXJpYWJsZS9JbnZhbGlkUG9zdGZpeEV4cHIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VWYXJpYWJsZS9JbnZhbGlkUG9zdGZpeEV4cHIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZjMxMjVjCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVZhcmlhYmxlL0ludmFsaWRQb3N0Zml4RXhwci5qYXZhCkBAIC0wLDAgKzEsNyBAQAorcHVibGljIGNsYXNzIFNvbWVDbGFzcyB7CisgICAgaW50W10gYTsKKyAgICAKKyAgICB7CisgICAgICAgIDxzZWxlY3Rpb24+YTwvc2VsZWN0aW9uPisrOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlVmFyaWFibGUvTGFtYmRhRXhwci5hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVZhcmlhYmxlL0xhbWJkYUV4cHIuYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ODU4NTY3Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVZhcmlhYmxlL0xhbWJkYUV4cHIuYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDExIEBACitpbnRlcmZhY2UgU0FNPFg+IHsKKyAgICAgICAgWCBtKGludCBpLCBpbnQgaik7CisgICAgfQorCitjbGFzcyBGb28geyAgCisgICAgdm9pZCB0ZXN0KCkgeworICAgICAgICBTQU08SW50ZWdlcj4gYyA9IChpLCBqKSAtPiBpICsgajsKKyAgICAgICAgbShjKTsKKyAgICB9CisgICAgdm9pZCBtKFNBTTxJbnRlZ2VyPiBzKSB7IH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlVmFyaWFibGUvTGFtYmRhRXhwci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVZhcmlhYmxlL0xhbWJkYUV4cHIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZDc3ODQ5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVZhcmlhYmxlL0xhbWJkYUV4cHIuamF2YQpAQCAtMCwwICsxLDEwIEBACitpbnRlcmZhY2UgU0FNPFg+IHsKKyAgICAgICAgWCBtKGludCBpLCBpbnQgaik7CisgICAgfQorCitjbGFzcyBGb28geyAgCisgICAgdm9pZCB0ZXN0KCkgeworICAgICAgICBtKDxzZWxlY3Rpb24+KGksIGopIC0+IGkgKyBqPC9zZWxlY3Rpb24+KTsKKyAgICB9CisgICAgdm9pZCBtKFNBTTxJbnRlZ2VyPiBzKSB7IH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlVmFyaWFibGUvTGFtYmRhRXhwck5vdEFjY2VwdGVkLmFmdGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlVmFyaWFibGUvTGFtYmRhRXhwck5vdEFjY2VwdGVkLmFmdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZThkNzcwMgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VWYXJpYWJsZS9MYW1iZGFFeHByTm90QWNjZXB0ZWQuYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDExIEBACitpbnRlcmZhY2UgU0FNPFg+IHsKKyAgICAgICAgWCBtKGludCBpLCBpbnQgaik7CisgICAgfQorCitjbGFzcyBGb28geyAgCisgICAgdm9pZCB0ZXN0KCkgeworICAgICAgICBTQU08U3RyaW5nPiBjID0gKGksIGopIC0+ICIiICsgaSArIGo7CisgICAgICAgIFNBTTxJbnRlZ2VyPiBzMyA9IG0oYyk7CisgICAgfQorICAgIDxYPiBTQU08WD4gbShTQU08WD4gcykgeyByZXR1cm4gbnVsbDsgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VWYXJpYWJsZS9MYW1iZGFFeHByTm90QWNjZXB0ZWQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VWYXJpYWJsZS9MYW1iZGFFeHByTm90QWNjZXB0ZWQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYmI0N2Y5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVZhcmlhYmxlL0xhbWJkYUV4cHJOb3RBY2NlcHRlZC5qYXZhCkBAIC0wLDAgKzEsMTAgQEAKK2ludGVyZmFjZSBTQU08WD4geworICAgICAgICBYIG0oaW50IGksIGludCBqKTsKKyAgICB9CisKK2NsYXNzIEZvbyB7ICAKKyAgICB2b2lkIHRlc3QoKSB7CisgICAgICBTQU08SW50ZWdlcj4gczMgPSBtKDxzZWxlY3Rpb24+KGksIGopIC0+ICIiICsgaSArIGo8L3NlbGVjdGlvbj4pOworICAgIH0KKyAgICA8WD4gU0FNPFg+IG0oU0FNPFg+IHMpIHsgcmV0dXJuIG51bGw7IH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlVmFyaWFibGUvTWV0aG9kQ2FsbC5hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVZhcmlhYmxlL01ldGhvZENhbGwuYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOTYxZjIxCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVZhcmlhYmxlL01ldGhvZENhbGwuYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDExIEBACitjbGFzcyBBIHsKKyAgICBPYmplY3QgZ2V0T2JqZWN0KCkgeworICAgICAgICByZXR1cm4gbnVsbDsKKyAgICB9CisKKyAgICB2b2lkIG1ldGhvZCgpIHsKKyAgICAgICAgZmluYWwgT2JqZWN0IHRlbXAgPSBnZXRPYmplY3QoKTsKKyAgICAgICAgT2JqZWN0IG8gPSB0ZW1wOworICAgICAgICByZXR1cm4gdGVtcC5oYXNoQ29kZSgpOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlVmFyaWFibGUvTWV0aG9kQ2FsbC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVZhcmlhYmxlL01ldGhvZENhbGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NDY3NDBhCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVZhcmlhYmxlL01ldGhvZENhbGwuamF2YQpAQCAtMCwwICsxLDEwIEBACitjbGFzcyBBIHsKKyAgICBPYmplY3QgZ2V0T2JqZWN0KCkgeworICAgICAgICByZXR1cm4gbnVsbDsKKyAgICB9CisKKyAgICB2b2lkIG1ldGhvZCgpIHsKKyAgICAgICAgT2JqZWN0IG8gPSA8c2VsZWN0aW9uPmdldE9iamVjdCgpPC9zZWxlY3Rpb24+OworICAgICAgICByZXR1cm4gZ2V0T2JqZWN0KCkuaGFzaENvZGUoKTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVZhcmlhYmxlL01ldGhvZENhbGxJblN3aXRjaC5hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVZhcmlhYmxlL01ldGhvZENhbGxJblN3aXRjaC5hZnRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRjZmQ2N2QKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlVmFyaWFibGUvTWV0aG9kQ2FsbEluU3dpdGNoLmFmdGVyLmphdmEKQEAgLTAsMCArMSwxMiBAQAorY2xhc3MgQSB7CisgICAgaW50IGdldENvbnRlbnRFbGVtZW50VHlwZSgpIHsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgdm9pZCBtZXRob2QoKSB7CisgICAgICAgIGZpbmFsIGludCBpID0gZ2V0Q29udGVudEVsZW1lbnRUeXBlKCk7CisgICAgICAgIHN3aXRjaCAoaSkgeworICAgICAgICAgICAgZGVmYXVsdDogdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiV3JvbmcgY29udGVudCB0eXBlOiAiICsgaSk7CisgICAgICAgIH0KKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVZhcmlhYmxlL01ldGhvZENhbGxJblN3aXRjaC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVZhcmlhYmxlL01ldGhvZENhbGxJblN3aXRjaC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU4MjZhZDkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlVmFyaWFibGUvTWV0aG9kQ2FsbEluU3dpdGNoLmphdmEKQEAgLTAsMCArMSwxMSBAQAorY2xhc3MgQSB7CisgICAgaW50IGdldENvbnRlbnRFbGVtZW50VHlwZSgpIHsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgdm9pZCBtZXRob2QoKSB7CisgICAgICAgIHN3aXRjaCAoPHNlbGVjdGlvbj5nZXRDb250ZW50RWxlbWVudFR5cGUoKTwvc2VsZWN0aW9uPikgeworICAgICAgICAgICAgZGVmYXVsdDogdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiV3JvbmcgY29udGVudCB0eXBlOiAiICsgZ2V0Q29udGVudEVsZW1lbnRUeXBlKCkpOworICAgICAgICB9CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VWYXJpYWJsZS9NZXRob2RSZWYuYWZ0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VWYXJpYWJsZS9NZXRob2RSZWYuYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mODczYmRlCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVZhcmlhYmxlL01ldGhvZFJlZi5hZnRlci5qYXZhCkBAIC0wLDAgKzEsMTUgQEAKK2NsYXNzIFRlc3QgeworICB7CisgICAgICBCYXIgYyA9IFRlc3Q6Omxlbmd0aDsKKyAgICAgIGJhcihjKTsKKyAgfQorCisgIHB1YmxpYyBzdGF0aWMgSW50ZWdlciBsZW5ndGgoU3RyaW5nIHMpIHsKKyAgICByZXR1cm4gcy5sZW5ndGgoKTsKKyAgfQorCisgICAgc3RhdGljIHZvaWQgYmFyKEJhciBiYXIpIHt9CisgIGludGVyZmFjZSBCYXIgeworICAgIEludGVnZXIgXyhTdHJpbmcgcyk7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlVmFyaWFibGUvTWV0aG9kUmVmLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlVmFyaWFibGUvTWV0aG9kUmVmLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjJlNzNhYgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VWYXJpYWJsZS9NZXRob2RSZWYuamF2YQpAQCAtMCwwICsxLDE0IEBACitjbGFzcyBUZXN0IHsKKyAgeworICAgICAgYmFyKDxzZWxlY3Rpb24+VGVzdDo6bGVuZ3RoPC9zZWxlY3Rpb24+KTsKKyAgfQorCisgIHB1YmxpYyBzdGF0aWMgSW50ZWdlciBsZW5ndGgoU3RyaW5nIHMpIHsKKyAgICByZXR1cm4gcy5sZW5ndGgoKTsKKyAgfQorCisgICAgc3RhdGljIHZvaWQgYmFyKEJhciBiYXIpIHt9CisgIGludGVyZmFjZSBCYXIgeworICAgIEludGVnZXIgXyhTdHJpbmcgcyk7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlVmFyaWFibGUvTXVsdGlDYXRjaFNpbXBsZS5hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVZhcmlhYmxlL011bHRpQ2F0Y2hTaW1wbGUuYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZjE2ZTBiCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVZhcmlhYmxlL011bHRpQ2F0Y2hTaW1wbGUuYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDExIEBACitjbGFzcyBDIHsKKyAgICBzdGF0aWMgY2xhc3MgRTEgZXh0ZW5kcyBFeGNlcHRpb24geyB9CisgICAgc3RhdGljIGNsYXNzIEUyIGV4dGVuZHMgRXhjZXB0aW9uIHsgfQorCisgICAgdm9pZCBtKCkgeworICAgICAgICB0cnkgeyB9CisgICAgICAgIGNhdGNoIChFMSB8IEUyIGV4KSB7CisgICAgICAgICAgICBmaW5hbCBFeGNlcHRpb24gZSA9IGV4OworICAgICAgICB9CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVZhcmlhYmxlL011bHRpQ2F0Y2hTaW1wbGUuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VWYXJpYWJsZS9NdWx0aUNhdGNoU2ltcGxlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTgyNzU1YwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VWYXJpYWJsZS9NdWx0aUNhdGNoU2ltcGxlLmphdmEKQEAgLTAsMCArMSwxMSBAQAorY2xhc3MgQyB7CisgICAgc3RhdGljIGNsYXNzIEUxIGV4dGVuZHMgRXhjZXB0aW9uIHsgfQorICAgIHN0YXRpYyBjbGFzcyBFMiBleHRlbmRzIEV4Y2VwdGlvbiB7IH0KKworICAgIHZvaWQgbSgpIHsKKyAgICAgICAgdHJ5IHsgfQorICAgICAgICBjYXRjaCAoRTEgfCBFMiBleCkgeworICAgICAgICAgICAgPGNhcmV0PmV4OworICAgICAgICB9CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVZhcmlhYmxlL011bHRpQ2F0Y2hUeXBlZC5hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVZhcmlhYmxlL011bHRpQ2F0Y2hUeXBlZC5hZnRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY0ZjZkOTAKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlVmFyaWFibGUvTXVsdGlDYXRjaFR5cGVkLmFmdGVyLmphdmEKQEAgLTAsMCArMSwxMiBAQAorY2xhc3MgQyB7CisgICAgaW50ZXJmYWNlIEI8VD4geyB9CisgICAgc3RhdGljIGNsYXNzIEUxIGV4dGVuZHMgRXhjZXB0aW9uIGltcGxlbWVudHMgQjxJbnRlZ2VyPiB7IH0KKyAgICBzdGF0aWMgY2xhc3MgRTIgZXh0ZW5kcyBFeGNlcHRpb24gaW1wbGVtZW50cyBCPExvbmc+IHsgfQorCisgICAgdm9pZCBtKCkgeworICAgICAgICB0cnkgeyB9CisgICAgICAgIGNhdGNoIChFMSB8IEUyIGV4KSB7CisgICAgICAgICAgICBmaW5hbCBFeGNlcHRpb24gYiA9IGV4OworICAgICAgICB9CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVZhcmlhYmxlL011bHRpQ2F0Y2hUeXBlZC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVZhcmlhYmxlL011bHRpQ2F0Y2hUeXBlZC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZhOGNlNGYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlVmFyaWFibGUvTXVsdGlDYXRjaFR5cGVkLmphdmEKQEAgLTAsMCArMSwxMiBAQAorY2xhc3MgQyB7CisgICAgaW50ZXJmYWNlIEI8VD4geyB9CisgICAgc3RhdGljIGNsYXNzIEUxIGV4dGVuZHMgRXhjZXB0aW9uIGltcGxlbWVudHMgQjxJbnRlZ2VyPiB7IH0KKyAgICBzdGF0aWMgY2xhc3MgRTIgZXh0ZW5kcyBFeGNlcHRpb24gaW1wbGVtZW50cyBCPExvbmc+IHsgfQorCisgICAgdm9pZCBtKCkgeworICAgICAgICB0cnkgeyB9CisgICAgICAgIGNhdGNoIChFMSB8IEUyIGV4KSB7CisgICAgICAgICAgICA8Y2FyZXQ+ZXg7CisgICAgICAgIH0KKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlVmFyaWFibGUvTmFtZVN1Z2dlc3Rpb24uYWZ0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VWYXJpYWJsZS9OYW1lU3VnZ2VzdGlvbi5hZnRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk0ZWUxMmQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlVmFyaWFibGUvTmFtZVN1Z2dlc3Rpb24uYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDkgQEAKK2Fic3RyYWN0IGNsYXNzIFBhdGggaW1wbGVtZW50cyBJdGVyYWJsZTxQYXRoPnt9CitjbGFzcyBQYXRocyB7CisgIHB1YmxpYyBzdGF0aWMgUGF0aCBnZXQoU3RyaW5nIHMpIHtyZXR1cm4gbnVsbDt9Cit9CitjbGFzcyBVc2FnZSB7CisgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKyAgICAgIFBhdGggcGF0aCA9IFBhdGhzLmdldCgiIik7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlVmFyaWFibGUvTmFtZVN1Z2dlc3Rpb24uamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VWYXJpYWJsZS9OYW1lU3VnZ2VzdGlvbi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI2OGFhMDEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlVmFyaWFibGUvTmFtZVN1Z2dlc3Rpb24uamF2YQpAQCAtMCwwICsxLDkgQEAKK2Fic3RyYWN0IGNsYXNzIFBhdGggaW1wbGVtZW50cyBJdGVyYWJsZTxQYXRoPnt9CitjbGFzcyBQYXRocyB7CisgIHB1YmxpYyBzdGF0aWMgUGF0aCBnZXQoU3RyaW5nIHMpIHtyZXR1cm4gbnVsbDt9Cit9CitjbGFzcyBVc2FnZSB7CisgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKyAgICA8c2VsZWN0aW9uPlBhdGhzLmdldCgiIik8L3NlbGVjdGlvbj4KKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VWYXJpYWJsZS9Ob0FycmF5RnJvbVZhcmFyZ3MuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VWYXJpYWJsZS9Ob0FycmF5RnJvbVZhcmFyZ3MuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ODA0MWIyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVZhcmlhYmxlL05vQXJyYXlGcm9tVmFyYXJncy5qYXZhCkBAIC0wLDAgKzEsNyBAQAoraW1wb3J0IGphdmEudXRpbC5BcnJheXM7CisKK2NsYXNzIEEgeworICAgIHB1YmxpYyB2b2lkIHRlc3QoKSB7CisgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oQXJyYXlzLmFzTGlzdCgiZnI8c2VsZWN0aW9uPnN0IiwgInNjbmQiLCAidGhpcmQiPC9zZWxlY3Rpb24+LCAiNHRoIikpOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlVmFyaWFibGUvTm9BcnJheUZyb21WYXJhcmdzMS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVZhcmlhYmxlL05vQXJyYXlGcm9tVmFyYXJnczEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMTA5OGUyZgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VWYXJpYWJsZS9Ob0FycmF5RnJvbVZhcmFyZ3MxLmphdmEKQEAgLTAsMCArMSw3IEBACitpbXBvcnQgamF2YS51dGlsLkFycmF5czsKKworY2xhc3MgQSB7CisgICAgcHVibGljIHZvaWQgdGVzdCgpIHsKKyAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihBcnJheXMuYXNMaXN0KCAyICsgPHNlbGVjdGlvbj4zLCAic2NuZCIsICJ0aGlyZCI8L3NlbGVjdGlvbj4sICI0dGgiKSk7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VWYXJpYWJsZS9Ob25Db25mbGljdGluZ0ZpZWxkLmFmdGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlVmFyaWFibGUvTm9uQ29uZmxpY3RpbmdGaWVsZC5hZnRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ5ODU5ZjQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlVmFyaWFibGUvTm9uQ29uZmxpY3RpbmdGaWVsZC5hZnRlci5qYXZhCkBAIC0wLDAgKzEsOSBAQAorY2xhc3MgQmFzZSB7CisgIHByaXZhdGUgaW50IG5hbWUgPSAwOworfQorCitjbGFzcyBDaGlsZCBleHRlbmRzIEJhc2UgeworICB2b2lkIGZvbygpIHsKKyAgICAgIGludCBuYW1lID0gMTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VWYXJpYWJsZS9Ob25Db25mbGljdGluZ0ZpZWxkLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlVmFyaWFibGUvTm9uQ29uZmxpY3RpbmdGaWVsZC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ3MjEyMmEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlVmFyaWFibGUvTm9uQ29uZmxpY3RpbmdGaWVsZC5qYXZhCkBAIC0wLDAgKzEsOSBAQAorY2xhc3MgQmFzZSB7CisgIHByaXZhdGUgaW50IG5hbWUgPSAwOworfQorCitjbGFzcyBDaGlsZCBleHRlbmRzIEJhc2UgeworICB2b2lkIGZvbygpIHsKKyAgICA8c2VsZWN0aW9uPjE8L3NlbGVjdGlvbj4KKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VWYXJpYWJsZS9Ob25FeHByZXNzaW9uLmFmdGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlVmFyaWFibGUvTm9uRXhwcmVzc2lvbi5hZnRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUwZTVhZTkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlVmFyaWFibGUvTm9uRXhwcmVzc2lvbi5hZnRlci5qYXZhCkBAIC0wLDAgKzEsNyBAQAorY2xhc3MgQSB7CisgICAgcHVibGljIHZvaWQgdGVzdCgpIHsKKyAgICAgICAgaW50IGEgPSAwOyBpbnQgYiA9IDA7IGludCBjID0gMDsKKyAgICAgICAgZmluYWwgaW50IHN1bSA9IGIgKyBjOworICAgICAgICBpbnQgZCA9IGEgKyBzdW07CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VWYXJpYWJsZS9Ob25FeHByZXNzaW9uLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlVmFyaWFibGUvTm9uRXhwcmVzc2lvbi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgyMDdlNjUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlVmFyaWFibGUvTm9uRXhwcmVzc2lvbi5qYXZhCkBAIC0wLDAgKzEsNiBAQAorY2xhc3MgQSB7CisgICAgcHVibGljIHZvaWQgdGVzdCgpIHsKKyAgICAgICAgaW50IGEgPSAwOyBpbnQgYiA9IDA7IGludCBjID0gMDsKKyAgICAgICAgaW50IGQgPSBhICsgPHNlbGVjdGlvbj5iICsgYzwvc2VsZWN0aW9uPjsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVZhcmlhYmxlL05vbkV4cHJlc3Npb25Qcmlvcml0eUZhaWx1cmUuYWZ0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VWYXJpYWJsZS9Ob25FeHByZXNzaW9uUHJpb3JpdHlGYWlsdXJlLmFmdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjAwZjk3ZAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VWYXJpYWJsZS9Ob25FeHByZXNzaW9uUHJpb3JpdHlGYWlsdXJlLmFmdGVyLmphdmEKQEAgLTAsMCArMSw2IEBACitjbGFzcyBBIHsKKyAgICBwdWJsaWMgdm9pZCB0ZXN0KCkgeworICAgICAgICBpbnQgYSA9IDA7IGludCBiID0gMDsgaW50IGMgPSAwOworICAgICAgICBpbnQgZCA9IGEgLSA8c2VsZWN0aW9uPmIgKyBjPC9zZWxlY3Rpb24+OworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlVmFyaWFibGUvTm9uRXhwcmVzc2lvblByaW9yaXR5RmFpbHVyZS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVZhcmlhYmxlL05vbkV4cHJlc3Npb25Qcmlvcml0eUZhaWx1cmUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMDBmOTdkCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVZhcmlhYmxlL05vbkV4cHJlc3Npb25Qcmlvcml0eUZhaWx1cmUuamF2YQpAQCAtMCwwICsxLDYgQEAKK2NsYXNzIEEgeworICAgIHB1YmxpYyB2b2lkIHRlc3QoKSB7CisgICAgICAgIGludCBhID0gMDsgaW50IGIgPSAwOyBpbnQgYyA9IDA7CisgICAgICAgIGludCBkID0gYSAtIDxzZWxlY3Rpb24+YiArIGM8L3NlbGVjdGlvbj47CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VWYXJpYWJsZS9Ob3JtYWxpemVEZWNsYXJhdGlvbnMuYWZ0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VWYXJpYWJsZS9Ob3JtYWxpemVEZWNsYXJhdGlvbnMuYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NWIzODhmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVZhcmlhYmxlL05vcm1hbGl6ZURlY2xhcmF0aW9ucy5hZnRlci5qYXZhCkBAIC0wLDAgKzEsOCBAQAorY2xhc3MgWCB7CisgICAgeworICAgICAgICBpbnQgaSA9IDA7CisgICAgICAgIGludCBpMyA9IGk7CisgICAgICAgIGludCBpMSA9IDA7CisgICAgICAgIGludCBpMiA9IGkzOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlVmFyaWFibGUvTm9ybWFsaXplRGVjbGFyYXRpb25zLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlVmFyaWFibGUvTm9ybWFsaXplRGVjbGFyYXRpb25zLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDU0OTE2MAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VWYXJpYWJsZS9Ob3JtYWxpemVEZWNsYXJhdGlvbnMuamF2YQpAQCAtMCwwICsxLDUgQEAKK2NsYXNzIFggeworICAgIHsKKyAgICAgICAgaW50IGkgPSAwLCBpMSA9IDAsIGkyID0gPHNlbGVjdGlvbj5pPC9zZWxlY3Rpb24+OworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlVmFyaWFibGUvT25lTGluZUxhbWJkYVZhbHVlQ29tcGF0aWJsZS5hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVZhcmlhYmxlL09uZUxpbmVMYW1iZGFWYWx1ZUNvbXBhdGlibGUuYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNGRiZTljCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVZhcmlhYmxlL09uZUxpbmVMYW1iZGFWYWx1ZUNvbXBhdGlibGUuYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDIzIEBACisvKgorICogQ29weXJpZ2h0IDIwMDAtMjAxMiBKZXRCcmFpbnMgcy5yLm8uCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworY2xhc3MgRm9vIHsgIAorICAgIHZvaWQgdGVzdCgpIHsKKyAgICAgICAgQ29tcGFyYWJsZTxTdHJpbmc+IGphdmEgPSBvIC0+IHsKKyAgICAgICAgICAgIGludCBjID0gby5sZW5ndGgoKTsKKyAgICAgICAgICAgIHJldHVybiBjOworICAgICAgICB9OworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlVmFyaWFibGUvT25lTGluZUxhbWJkYVZhbHVlQ29tcGF0aWJsZS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVZhcmlhYmxlL09uZUxpbmVMYW1iZGFWYWx1ZUNvbXBhdGlibGUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMDRlNTIyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVZhcmlhYmxlL09uZUxpbmVMYW1iZGFWYWx1ZUNvbXBhdGlibGUuamF2YQpAQCAtMCwwICsxLDIwIEBACisvKgorICogQ29weXJpZ2h0IDIwMDAtMjAxMiBKZXRCcmFpbnMgcy5yLm8uCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworY2xhc3MgRm9vIHsgIAorICAgIHZvaWQgdGVzdCgpIHsKKyAgICAgICAgQ29tcGFyYWJsZTxTdHJpbmc+IGphdmEgPSBvIC0+IDxzZWxlY3Rpb24+by5sZW5ndGgoKTwvc2VsZWN0aW9uPjsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVZhcmlhYmxlL09uZUxpbmVMYW1iZGFWb2lkQ29tcGF0aWJsZS5hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVZhcmlhYmxlL09uZUxpbmVMYW1iZGFWb2lkQ29tcGF0aWJsZS5hZnRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMzY2Y0N2QKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlVmFyaWFibGUvT25lTGluZUxhbWJkYVZvaWRDb21wYXRpYmxlLmFmdGVyLmphdmEKQEAgLTAsMCArMSw4IEBACitjbGFzcyBGb28geyAgCisgICAgdm9pZCB0ZXN0KCkgeworICAgICAgICBSdW5uYWJsZSBqYXZhID0gKCkgLT4geworICAgICAgICAgICAgU3RyaW5nIGMgPSAiIjsKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihjKTsKKyAgICAgICAgfTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVZhcmlhYmxlL09uZUxpbmVMYW1iZGFWb2lkQ29tcGF0aWJsZS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVZhcmlhYmxlL09uZUxpbmVMYW1iZGFWb2lkQ29tcGF0aWJsZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE5MDVmNmEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlVmFyaWFibGUvT25lTGluZUxhbWJkYVZvaWRDb21wYXRpYmxlLmphdmEKQEAgLTAsMCArMSw1IEBACitjbGFzcyBGb28geyAgCisgICAgdm9pZCB0ZXN0KCkgeworICAgICAgICBSdW5uYWJsZSBqYXZhID0gKCkgLT4gU3lzdGVtLm91dC5wcmludGxuKDxzZWxlY3Rpb24+IiI8L3NlbGVjdGlvbj4pOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlVmFyaWFibGUvUGFyZW50aGl6ZWQuYWZ0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VWYXJpYWJsZS9QYXJlbnRoaXplZC5hZnRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFjZTcwMjcKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlVmFyaWFibGUvUGFyZW50aGl6ZWQuYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDYgQEAKK2NsYXNzIEEgeworICAgIHZvaWQgbWV0aG9kKCkgeworICAgICAgICBpbnQgdGVtcCA9IDEgKyAyOworICAgICAgICBpbnQgayA9IHRlbXA7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VWYXJpYWJsZS9QYXJlbnRoaXplZC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVZhcmlhYmxlL1BhcmVudGhpemVkLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmQ2OTg1MQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VWYXJpYWJsZS9QYXJlbnRoaXplZC5qYXZhCkBAIC0wLDAgKzEsNSBAQAorY2xhc3MgQSB7CisgICAgdm9pZCBtZXRob2QoKSB7CisgICAgICAgIGludCBrID0gPHNlbGVjdGlvbj4oMSArIDIpPC9zZWxlY3Rpb24+OworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlVmFyaWFibGUvUGFyZW50aGl6ZWRPY2N1cmVuY2UuYWZ0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VWYXJpYWJsZS9QYXJlbnRoaXplZE9jY3VyZW5jZS5hZnRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM2ZmFiNmIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlVmFyaWFibGUvUGFyZW50aGl6ZWRPY2N1cmVuY2UuYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDE0IEBACitpbXBvcnQgamF2YS51dGlsLio7CisKK3B1YmxpYyBjbGFzcyBJbnRyb2R1Y2UgeworICAgIHByaXZhdGUgc3RhdGljIExpc3QgX2xpc3QgPSBuZXcgQXJyYXlMaXN0KCk7CisKKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisgICAgICAgIGZpbmFsIGJvb2xlYW4gZW1wdHkgPSBfbGlzdC5pc0VtcHR5KCk7CisgICAgICAgIGZpbmFsIGJvb2xlYW4gaW52aXNpYmxlID0gKCFlbXB0eSk7CisgICAgICAgIGZpbmFsIGJvb2xlYW4gdmlzaWJsZSA9IGVtcHR5OworCisgICAgICAgIGlmKCIiLmVxdWFscyhfbGlzdC5nZXQoMCkpIHx8IGVtcHR5KSB7CisgICAgICAgIH0KKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVZhcmlhYmxlL1BhcmVudGhpemVkT2NjdXJlbmNlLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlVmFyaWFibGUvUGFyZW50aGl6ZWRPY2N1cmVuY2UuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZTAxOGY1Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVZhcmlhYmxlL1BhcmVudGhpemVkT2NjdXJlbmNlLmphdmEKQEAgLTAsMCArMSwxMyBAQAoraW1wb3J0IGphdmEudXRpbC4qOworCitwdWJsaWMgY2xhc3MgSW50cm9kdWNlIHsKKyAgICBwcml2YXRlIHN0YXRpYyBMaXN0IF9saXN0ID0gbmV3IEFycmF5TGlzdCgpOworCisgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworICAgICAgICBmaW5hbCBib29sZWFuIGludmlzaWJsZSA9ICghPHNlbGVjdGlvbj5fbGlzdC5pc0VtcHR5KCk8L3NlbGVjdGlvbj4pOworICAgICAgICBmaW5hbCBib29sZWFuIHZpc2libGUgPSAoX2xpc3QuaXNFbXB0eSgpKTsKKworICAgICAgICBpZigiIi5lcXVhbHMoX2xpc3QuZ2V0KDApKSB8fCBfbGlzdC5pc0VtcHR5KCkpIHsKKyAgICAgICAgfQorICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlVmFyaWFibGUvUGFyZW50aGl6ZWRPY2N1cmVuY2UxLmFmdGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlVmFyaWFibGUvUGFyZW50aGl6ZWRPY2N1cmVuY2UxLmFmdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjU4YWFmNwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VWYXJpYWJsZS9QYXJlbnRoaXplZE9jY3VyZW5jZTEuYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDUgQEAKK3B1YmxpYyBjbGFzcyBJbnRyb2R1Y2UgeworICAgIHZvaWQgZm9vKFN0cmluZyBzdHIpIHsKKyAgICAgICAgZmluYWwgU3RyaW5nIHMgPSAoU3RyaW5nKSBzdHI7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VWYXJpYWJsZS9QYXJlbnRoaXplZE9jY3VyZW5jZTEuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VWYXJpYWJsZS9QYXJlbnRoaXplZE9jY3VyZW5jZTEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MjgxYmEyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVZhcmlhYmxlL1BhcmVudGhpemVkT2NjdXJlbmNlMS5qYXZhCkBAIC0wLDAgKzEsNSBAQAorcHVibGljIGNsYXNzIEludHJvZHVjZSB7CisgICAgdm9pZCBmb28oU3RyaW5nIHN0cikgeworICAgICAgPHNlbGVjdGlvbj4oKFN0cmluZylzdHIpPC9zZWxlY3Rpb24+CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VWYXJpYWJsZS9Qb2x5YWRpYy5hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVZhcmlhYmxlL1BvbHlhZGljLmFmdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjc2YWIxZgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VWYXJpYWJsZS9Qb2x5YWRpYy5hZnRlci5qYXZhCkBAIC0wLDAgKzEsNDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwMC0yMDEyIEpldEJyYWlucyBzLnIuby4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCitwdWJsaWMgY2xhc3MgQyB7CisgIHZvaWQgZm9vKGJvb2xlYW4gYSwgYm9vbGVhbiBiLCBib29sZWFuIGMpIHsKKyAgICAgICBib29sZWFuIG9wdGlvbjEgPSB0cnVlOworICAgICAgIGJvb2xlYW4gb3B0aW9uMiA9IHRydWU7CisgICAgICBmaW5hbCBib29sZWFuIGIxID0gYSAmJiBiOworICAgICAgaWYgKG9wdGlvbjEpIHsKKyAgICAgICAgIGlmIChvcHRpb24yKSB7CisgICAgICAgICAgIGlmIChiMSAmJiBjKSB7CisgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJPbmUiKTsKKyAgICAgICAgICAgfQorICAgICAgICAgfQorICAgICAgICAgZWxzZSB7CisgICAgICAgICAgIGlmIChiMSkgeworICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigidHdvIik7CisgICAgICAgICAgIH0KKyAgICAgICAgIH0KKyAgICAgICB9CisgICAgICAgZWxzZSB7CisgICAgICAgICBpZiAoYjEpIHsKKyAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJ0aHJlZSIpOworICAgICAgICAgfQorICAgICAgIH0KKyAgICAgfQorICAKKyAgICAKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlVmFyaWFibGUvUG9seWFkaWMuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VWYXJpYWJsZS9Qb2x5YWRpYy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM5NTkyZTgKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlVmFyaWFibGUvUG9seWFkaWMuamF2YQpAQCAtMCwwICsxLDQwIEBACisvKgorICogQ29weXJpZ2h0IDIwMDAtMjAxMiBKZXRCcmFpbnMgcy5yLm8uCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworcHVibGljIGNsYXNzIEMgeworICB2b2lkIGZvbyhib29sZWFuIGEsIGJvb2xlYW4gYiwgYm9vbGVhbiBjKSB7CisgICAgICAgYm9vbGVhbiBvcHRpb24xID0gdHJ1ZTsKKyAgICAgICBib29sZWFuIG9wdGlvbjIgPSB0cnVlOworICAgICAgIGlmIChvcHRpb24xKSB7CisgICAgICAgICBpZiAob3B0aW9uMikgeworICAgICAgICAgICBpZiAoPHNlbGVjdGlvbj5hICYmIGI8L3NlbGVjdGlvbj4gJiYgYykgeworICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiT25lIik7CisgICAgICAgICAgIH0KKyAgICAgICAgIH0KKyAgICAgICAgIGVsc2UgeworICAgICAgICAgICBpZiAoYSAmJiBiKSB7CisgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJ0d28iKTsKKyAgICAgICAgICAgfQorICAgICAgICAgfQorICAgICAgIH0KKyAgICAgICBlbHNlIHsKKyAgICAgICAgIGlmIChhICYmIGIpIHsKKyAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJ0aHJlZSIpOworICAgICAgICAgfQorICAgICAgIH0KKyAgICAgfQorICAKKyAgICAKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlVmFyaWFibGUvUmVwbGFjZUFsbC5hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVZhcmlhYmxlL1JlcGxhY2VBbGwuYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NmQ3YmMwCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVZhcmlhYmxlL1JlcGxhY2VBbGwuYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDggQEAKK2NsYXNzIFRlc3QgeworICAgIGludCBtZXRob2QoU3RyaW5nIHAxLCBpbnQgcDIpIHsKKyAgICAgICAgZmluYWwgU3RyaW5nIHMgPSBwMSArIHAyOworICAgICAgICBpbnQgaSA9IHM7CisgICAgICAgIGZvcihpbnQgbCA9IGk7IGwgPD0gczsgbCsrKSAKKyAgICAgICAgICAgIHN1bSArPSBzOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlVmFyaWFibGUvUmVwbGFjZUFsbC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVZhcmlhYmxlL1JlcGxhY2VBbGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MmY1NjUwCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVZhcmlhYmxlL1JlcGxhY2VBbGwuamF2YQpAQCAtMCwwICsxLDcgQEAKK2NsYXNzIFRlc3QgeworICAgIGludCBtZXRob2QoU3RyaW5nIHAxLCBpbnQgcDIpIHsKKyAgICAgICAgaW50IGkgPSA8c2VsZWN0aW9uPnAxICsgcDI8L3NlbGVjdGlvbj47CisgICAgICAgIGZvcihpbnQgbCA9IGk7IGwgPD0gcDEgKyBwMjsgbCsrKSAKKyAgICAgICAgICAgIHN1bSArPSBwMSArIHAyOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlVmFyaWFibGUvUmV0dXJuU3RhdGVtZW50V2l0aG91dFNlbWljb2xvbi5hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVZhcmlhYmxlL1JldHVyblN0YXRlbWVudFdpdGhvdXRTZW1pY29sb24uYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MDU5ZmU2Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVZhcmlhYmxlL1JldHVyblN0YXRlbWVudFdpdGhvdXRTZW1pY29sb24uYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDYgQEAKK2NsYXNzIFRlc3QgeworICBwdWJsaWMgU3RyaW5nIGJsYSgpIHsKKyAgICAgIGZpbmFsIFN0cmluZyBiID0gU3RyaW5nLmZvcm1hdCgiZm9vLmJhci4lcyIsICIiKTsKKyAgICAgIHJldHVybiBiCisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlVmFyaWFibGUvUmV0dXJuU3RhdGVtZW50V2l0aG91dFNlbWljb2xvbi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVZhcmlhYmxlL1JldHVyblN0YXRlbWVudFdpdGhvdXRTZW1pY29sb24uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OWVmZmUwCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVZhcmlhYmxlL1JldHVyblN0YXRlbWVudFdpdGhvdXRTZW1pY29sb24uamF2YQpAQCAtMCwwICsxLDUgQEAKK2NsYXNzIFRlc3QgeworICBwdWJsaWMgU3RyaW5nIGJsYSgpIHsKKyAgICByZXR1cm4gU3RyaW5nLjxjYXJldD5mb3JtYXQoImZvby5iYXIuJXMiLCAiIikKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VWYXJpYWJsZS9TQ1IxMDQxMi5hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVZhcmlhYmxlL1NDUjEwNDEyLmFmdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjFjMWVkYwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VWYXJpYWJsZS9TQ1IxMDQxMi5hZnRlci5qYXZhCkBAIC0wLDAgKzEsNiBAQAorY2xhc3MgVGVzdCB7CisgICAgeworICAgICAgICBTdHJpbmdbXSBuZXdWYXIgPSB7ImEiLCAiYiJ9OworICAgICAgICBTdHJpbmdbXSBzID0gbmV3VmFyOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlVmFyaWFibGUvU0NSMTA0MTIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VWYXJpYWJsZS9TQ1IxMDQxMi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBhNDc2OWQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlVmFyaWFibGUvU0NSMTA0MTIuamF2YQpAQCAtMCwwICsxLDUgQEAKK2NsYXNzIFRlc3QgeworICAgIHsKKyAgICAgICAgU3RyaW5nW10gcyA9IDxzZWxlY3Rpb24+eyAiYSIsICJiIiB9PC9zZWxlY3Rpb24+OworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlVmFyaWFibGUvU0NSMTgyOTUuYWZ0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VWYXJpYWJsZS9TQ1IxODI5NS5hZnRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlkMGU2NzgKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlVmFyaWFibGUvU0NSMTgyOTUuYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDkgQEAKK3B1YmxpYyBjbGFzcyBUaGluZyB7CisKKyAgICBwcml2YXRlIFN0cmluZyBpdDsKKworICAgIHByaXZhdGUgdm9pZCBkdW1iKCkgeworICAgICAgICBTdHJpbmcgaXQgPSB0aGlzLml0OworICAgICAgICBpdC5sZW5ndGgoKTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVZhcmlhYmxlL1NDUjE4Mjk1LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlVmFyaWFibGUvU0NSMTgyOTUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNDgzNTA1Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVZhcmlhYmxlL1NDUjE4Mjk1LmphdmEKQEAgLTAsMCArMSw4IEBACitwdWJsaWMgY2xhc3MgVGhpbmcgeworCisgICAgcHJpdmF0ZSBTdHJpbmcgaXQ7CisKKyAgICBwcml2YXRlIHZvaWQgZHVtYigpIHsKKyAgICAgICAgPHNlbGVjdGlvbj5pdDwvc2VsZWN0aW9uPi5sZW5ndGgoKTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVZhcmlhYmxlL1NDUjE4Mjk1YS5hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVZhcmlhYmxlL1NDUjE4Mjk1YS5hZnRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYwNmJjOTIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlVmFyaWFibGUvU0NSMTgyOTVhLmFmdGVyLmphdmEKQEAgLTAsMCArMSw4IEBACitwdWJsaWMgY2xhc3MgVGhpbmcgeworCisgICAgcHJpdmF0ZSBTdHJpbmcgaXQ7CisKKyAgICBwcml2YXRlIHZvaWQgZHVtYigpIHsKKyAgICAgICAgU3RyaW5nIGl0ID0gdGhpcy5pdDsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVZhcmlhYmxlL1NDUjE4Mjk1YS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVZhcmlhYmxlL1NDUjE4Mjk1YS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFhZTk4NDEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlVmFyaWFibGUvU0NSMTgyOTVhLmphdmEKQEAgLTAsMCArMSw4IEBACitwdWJsaWMgY2xhc3MgVGhpbmcgeworCisgICAgcHJpdmF0ZSBTdHJpbmcgaXQ7CisKKyAgICBwcml2YXRlIHZvaWQgZHVtYigpIHsKKyAgICAgICAgPHNlbGVjdGlvbj5pdDwvc2VsZWN0aW9uPgorICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlVmFyaWFibGUvU0NSMjI3MTguYWZ0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VWYXJpYWJsZS9TQ1IyMjcxOC5hZnRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM0OTI4ZmMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlVmFyaWFibGUvU0NSMjI3MTguYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDggQEAKK2NsYXNzIFRlc3QgeworICAgIE9iamVjdCBvYmplY3Q7CisgICAgdm9pZCBmb28oKSB7CisgICAgICAgIGZpbmFsIE9iamVjdCBvYmplY3QgPSB0aGlzLm9iamVjdDsKKyAgICAgICAgT2JqZWN0IG8gPSBvYmplY3Q7IC8vIG9iamVjdCBpcyBzZWxlY3RlZAorICAgICAgICBPYmplY3QgcCA9IG9iamVjdDsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVZhcmlhYmxlL1NDUjIyNzE4LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlVmFyaWFibGUvU0NSMjI3MTguamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNjRlMDM3Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVZhcmlhYmxlL1NDUjIyNzE4LmphdmEKQEAgLTAsMCArMSw3IEBACitjbGFzcyBUZXN0IHsKKyAgICBPYmplY3Qgb2JqZWN0OworICAgIHZvaWQgZm9vKCkgeworICAgICAgICBPYmplY3QgbyA9IDxzZWxlY3Rpb24+b2JqZWN0PC9zZWxlY3Rpb24+OyAvLyBvYmplY3QgaXMgc2VsZWN0ZWQKKyAgICAgICAgT2JqZWN0IHAgPSBvYmplY3Q7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VWYXJpYWJsZS9TQ1IyNjA3NS5hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVZhcmlhYmxlL1NDUjI2MDc1LmFmdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzkzZDc3MAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VWYXJpYWJsZS9TQ1IyNjA3NS5hZnRlci5qYXZhCkBAIC0wLDAgKzEsMTUgQEAKK2NsYXNzIEMgeworICAgIFN0cmluZyBmICgpIHsKKyAgICAgICByZXR1cm4gbnVsbDsKKyAgICB9CisKKyAgICBDIGdldFBhcmVudCgpIHtyZXR1cm4gbnVsbDt9CisKKyAgICB2b2lkIHRlc3QgKCkgeworICAgICAgICBDIGMgPSBuZXcgQygpOworICAgICAgICBTdHJpbmcgd3JvbmcgPSBjLmYoKTsKKyAgICAgICAgd2hpbGUgKHdyb25nICE9IG51bGwpIHsKKyAgICAgICAgICAgIGMgPSBjLmdldFBhcmVudCgpOworICAgICAgICB9CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VWYXJpYWJsZS9TQ1IyNjA3NS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVZhcmlhYmxlL1NDUjI2MDc1LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTY0NDEyNgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VWYXJpYWJsZS9TQ1IyNjA3NS5qYXZhCkBAIC0wLDAgKzEsMTQgQEAKK2NsYXNzIEMgeworICAgIFN0cmluZyBmICgpIHsKKyAgICAgICByZXR1cm4gbnVsbDsKKyAgICB9CisKKyAgICBDIGdldFBhcmVudCgpIHtyZXR1cm4gbnVsbDt9CisKKyAgICB2b2lkIHRlc3QgKCkgeworICAgICAgICBDIGMgPSBuZXcgQygpOworICAgICAgICB3aGlsZSAoPHNlbGVjdGlvbj5jLmYoKTwvc2VsZWN0aW9uPiAhPSBudWxsKSB7CisgICAgICAgICAgICBjID0gYy5nZXRQYXJlbnQoKTsKKyAgICAgICAgfQorICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlVmFyaWFibGUvU0NSNDAyODEuYWZ0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VWYXJpYWJsZS9TQ1I0MDI4MS5hZnRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIxZjE3ZTEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlVmFyaWFibGUvU0NSNDAyODEuYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDEzIEBACitjbGFzcyBTZXQ8VD4ge30KKworY2xhc3MgTWFwIDxLLFY+IHsKKyAgICBjbGFzcyBFbnRyeTxLLFY+IHsKKyAgICB9CisgICAgU2V0PEVudHJ5PEssVj4+IGVudHJpZXMgKCkgeyByZXR1cm4gbnVsbDsgfQorfQorCitjbGFzcyBDIHsKKyAgICB2b2lkIGZvbyAoTWFwPD8sIFN0cmluZz4gcykgeworICAgICAgICBTZXQ8PyBleHRlbmRzIE1hcDw/LCBTdHJpbmc+LkVudHJ5PD8sIFN0cmluZz4+IHRlbXAgPSBzLmVudHJpZXMoKTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVZhcmlhYmxlL1NDUjQwMjgxLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlVmFyaWFibGUvU0NSNDAyODEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43Njg5ODZmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVZhcmlhYmxlL1NDUjQwMjgxLmphdmEKQEAgLTAsMCArMSwxMyBAQAorY2xhc3MgU2V0PFQ+IHt9CisKK2NsYXNzIE1hcCA8SyxWPiB7CisgICAgY2xhc3MgRW50cnk8SyxWPiB7CisgICAgfQorICAgIFNldDxFbnRyeTxLLFY+PiBlbnRyaWVzICgpIHsgcmV0dXJuIG51bGw7IH0KK30KKworY2xhc3MgQyB7CisgICAgdm9pZCBmb28gKE1hcDw/LCBTdHJpbmc+IHMpIHsKKyAgICAgICAgPHNlbGVjdGlvbj5zLmVudHJpZXMoKTwvc2VsZWN0aW9uPjsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVZhcmlhYmxlL1NjcjE2OTEwLmFmdGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlVmFyaWFibGUvU2NyMTY5MTAuYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YTMwMDdhCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVZhcmlhYmxlL1NjcjE2OTEwLmFmdGVyLmphdmEKQEAgLTAsMCArMSw5IEBACitjbGFzcyBDIHsKKyAgeworICAgIFN0cmluZyBzID0gIlRleHQiOworICAgIGlmICgoKSkgeworICAgICAgICBmaW5hbCBpbnQgaSA9IHMubGVuZ3RoKCk7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiV2hhdGV2ZXIiICsgaSk7CisgICAgfQorICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVZhcmlhYmxlL1NjcjE2OTEwLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlVmFyaWFibGUvU2NyMTY5MTAuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZWYwMmI1Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVZhcmlhYmxlL1NjcjE2OTEwLmphdmEKQEAgLTAsMCArMSw3IEBACitjbGFzcyBDIHsKKyAgeworICAgIFN0cmluZyBzID0gIlRleHQiOworICAgIGlmICgoKSkKKyAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiV2hhdGV2ZXIiICsgPHNlbGVjdGlvbj5zLmxlbmd0aCgpPC9zZWxlY3Rpb24+KTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VWYXJpYWJsZS9TaWJsaW5nSW5uZXJDbGFzc1R5cGUuYWZ0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VWYXJpYWJsZS9TaWJsaW5nSW5uZXJDbGFzc1R5cGUuYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOWY5NGViCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVZhcmlhYmxlL1NpYmxpbmdJbm5lckNsYXNzVHlwZS5hZnRlci5qYXZhCkBAIC0wLDAgKzEsMTAgQEAKK2NsYXNzIEEgeworICBjbGFzcyBCIHsKKyAgfQorCisgIGNsYXNzIEMgeworICAgICB2b2lkIHRlc3RIZXJlKCkgeworICAgICAgICAgQiB2YXJpID0gbmV3IEIoKTsKKyAgICAgfQorICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVZhcmlhYmxlL1NpYmxpbmdJbm5lckNsYXNzVHlwZS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVZhcmlhYmxlL1NpYmxpbmdJbm5lckNsYXNzVHlwZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVhYWVkMWUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlVmFyaWFibGUvU2libGluZ0lubmVyQ2xhc3NUeXBlLmphdmEKQEAgLTAsMCArMSwxMCBAQAorY2xhc3MgQSB7CisgIGNsYXNzIEIgeworICB9CisKKyAgY2xhc3MgQyB7CisgICAgIHZvaWQgdGVzdEhlcmUoKSB7CisgICAgICAgbmV3IDxjYXJldD5CKCkKKyAgICAgfQorICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVZhcmlhYmxlL1NpbXBsZUV4cHJlc3Npb24uYWZ0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VWYXJpYWJsZS9TaW1wbGVFeHByZXNzaW9uLmFmdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzA5OGI2NQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VWYXJpYWJsZS9TaW1wbGVFeHByZXNzaW9uLmFmdGVyLmphdmEKQEAgLTAsMCArMSw1IEBACitwdWJsaWMgY2xhc3MgVGVzdCB7CisgICAgcHVibGljIHZvaWQgbWV0aG9kKCkgeworICAgICAgICBpbnQgaSA9IDEgKyAyOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlVmFyaWFibGUvU2ltcGxlRXhwcmVzc2lvbi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVZhcmlhYmxlL1NpbXBsZUV4cHJlc3Npb24uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NWUxMmQzCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVZhcmlhYmxlL1NpbXBsZUV4cHJlc3Npb24uamF2YQpAQCAtMCwwICsxLDUgQEAKK3B1YmxpYyBjbGFzcyBUZXN0IHsKKyAgICBwdWJsaWMgdm9pZCBtZXRob2QoKSB7CisgICAgICAgIDEgKyAyIDxjYXJldD4KKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVZhcmlhYmxlL1NraXBTZW1pY29sb24uYWZ0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VWYXJpYWJsZS9Ta2lwU2VtaWNvbG9uLmFmdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODc3YmExYwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VWYXJpYWJsZS9Ta2lwU2VtaWNvbG9uLmFmdGVyLmphdmEKQEAgLTAsMCArMSw2IEBACitjbGFzcyBUZXN0IHsKKyAgdm9pZCBmb28oKSB7CisgICAgICBpbnQgbWk1ID0gMDsKKyAgICAgIGludCBpID0gbWk1OworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVZhcmlhYmxlL1NraXBTZW1pY29sb24uamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VWYXJpYWJsZS9Ta2lwU2VtaWNvbG9uLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDgwY2UzNgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VWYXJpYWJsZS9Ta2lwU2VtaWNvbG9uLmphdmEKQEAgLTAsMCArMSw1IEBACitjbGFzcyBUZXN0IHsKKyAgdm9pZCBmb28oKSB7CisgICAgaW50IGkgPSA8c2VsZWN0aW9uPjA7PC9zZWxlY3Rpb24+CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlVmFyaWFibGUvU3RhdGljQ29uZmxpY3RpbmdGaWVsZC5hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVZhcmlhYmxlL1N0YXRpY0NvbmZsaWN0aW5nRmllbGQuYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MWExM2YyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVZhcmlhYmxlL1N0YXRpY0NvbmZsaWN0aW5nRmllbGQuYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDkgQEAKK2NsYXNzIFhZWiB7CisgICAgc3RhdGljIGludCBuYW1lOworCisgICAgdm9pZCBtZXRob2QoKSB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihuYW1lKTsKKyAgICAgICAgaW50IG5hbWUgPSAyNzsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKFhZWi5uYW1lKTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVZhcmlhYmxlL1N0YXRpY0NvbmZsaWN0aW5nRmllbGQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VWYXJpYWJsZS9TdGF0aWNDb25mbGljdGluZ0ZpZWxkLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODhiMmFiMTMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlVmFyaWFibGUvU3RhdGljQ29uZmxpY3RpbmdGaWVsZC5qYXZhCkBAIC0wLDAgKzEsOSBAQAorY2xhc3MgWFlaIHsKKyAgICBzdGF0aWMgaW50IG5hbWU7CisKKyAgICB2b2lkIG1ldGhvZCgpIHsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKG5hbWUpOworICAgICAgICA8c2VsZWN0aW9uPjI3PC9zZWxlY3Rpb24+CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihuYW1lKTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVZhcmlhYmxlL1N0YXRpY0ltcG9ydC5hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVZhcmlhYmxlL1N0YXRpY0ltcG9ydC5hZnRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM5MGU5OWYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlVmFyaWFibGUvU3RhdGljSW1wb3J0LmFmdGVyLmphdmEKQEAgLTAsMCArMSw3IEBACitpbXBvcnQgc3RhdGljIGphdmEubGFuZy5JbnRlZ2VyLio7CisKK2NsYXNzIEEgeworICAgIHB1YmxpYyB2b2lkIHRlc3QoKSB7CisgICAgICAgIGZpbmFsIGludCBpID0gTUFYX1ZBTFVFOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlVmFyaWFibGUvU3RhdGljSW1wb3J0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlVmFyaWFibGUvU3RhdGljSW1wb3J0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTM5N2JmNAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VWYXJpYWJsZS9TdGF0aWNJbXBvcnQuamF2YQpAQCAtMCwwICsxLDcgQEAKK2ltcG9ydCBzdGF0aWMgamF2YS5sYW5nLkludGVnZXIuKjsKKworY2xhc3MgQSB7CisgICAgcHVibGljIHZvaWQgdGVzdCgpIHsKKyAgICAgICAgPHNlbGVjdGlvbj5NQVhfVkFMVUU8L3NlbGVjdGlvbj47IAorICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlVmFyaWFibGUvU3ViRXhwcmVzc2lvbkZyb21JbnRlbGxpamlkZWFydWxlenp6LmFmdGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlVmFyaWFibGUvU3ViRXhwcmVzc2lvbkZyb21JbnRlbGxpamlkZWFydWxlenp6LmFmdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTcyNzdmNAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VWYXJpYWJsZS9TdWJFeHByZXNzaW9uRnJvbUludGVsbGlqaWRlYXJ1bGV6enouYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDYgQEAKK2NsYXNzIEEgeworICAgIHB1YmxpYyB2b2lkIHRlc3QoKSB7CisgICAgICAgIFN0cmluZyBzdHIgPSAic2ludGVsbGlqaWRlYXJ1bGV6enpzIjsKKyAgICAgICAgU3RyaW5nIHMgPSAiaW50ZWxsaWppZGVhcnVsZXp6eiIgKyBzdHIgKyAic2ludGVsbGlqaWRlYXJ1bGV6enoiOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlVmFyaWFibGUvU3ViRXhwcmVzc2lvbkZyb21JbnRlbGxpamlkZWFydWxlenp6LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlVmFyaWFibGUvU3ViRXhwcmVzc2lvbkZyb21JbnRlbGxpamlkZWFydWxlenp6LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTVkNjg3ZQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VWYXJpYWJsZS9TdWJFeHByZXNzaW9uRnJvbUludGVsbGlqaWRlYXJ1bGV6enouamF2YQpAQCAtMCwwICsxLDUgQEAKK2NsYXNzIEEgeworICAgIHB1YmxpYyB2b2lkIHRlc3QoKSB7CisgICAgICAgIFN0cmluZyBzID0gImludGVsbGlqaWRlYXJ1bGV6eno8c2VsZWN0aW9uPnNpbnRlbGxpamlkZWFydWxlenp6czwvc2VsZWN0aW9uPnNpbnRlbGxpamlkZWFydWxlenp6IjsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVZhcmlhYmxlL1N1YkxpdGVyYWwuYWZ0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VWYXJpYWJsZS9TdWJMaXRlcmFsLmFmdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGYwZWZhMgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VWYXJpYWJsZS9TdWJMaXRlcmFsLmFmdGVyLmphdmEKQEAgLTAsMCArMSw2IEBACitjbGFzcyBBIHsKKyAgICBwdWJsaWMgdm9pZCB0ZXN0KCkgeworICAgICAgICBTdHJpbmcgc3RyID0gInNzIjsKKyAgICAgICAgU3RyaW5nIHMgPSAicyIgKyBzdHIgKyAicyI7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VWYXJpYWJsZS9TdWJMaXRlcmFsLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlVmFyaWFibGUvU3ViTGl0ZXJhbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM1MGFmZWMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlVmFyaWFibGUvU3ViTGl0ZXJhbC5qYXZhCkBAIC0wLDAgKzEsNSBAQAorY2xhc3MgQSB7CisgICAgcHVibGljIHZvaWQgdGVzdCgpIHsKKyAgICAgICAgU3RyaW5nIHMgPSAiczxzZWxlY3Rpb24+c3M8L3NlbGVjdGlvbj5zIjsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVZhcmlhYmxlL1N1YkxpdGVyYWwxLmFmdGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlVmFyaWFibGUvU3ViTGl0ZXJhbDEuYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZWExMDlmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVZhcmlhYmxlL1N1YkxpdGVyYWwxLmFmdGVyLmphdmEKQEAgLTAsMCArMSw2IEBACitjbGFzcyBBIHsKKyAgICBwdWJsaWMgdm9pZCB0ZXN0KCkgeworICAgICAgICBTdHJpbmcgc3RyID0gInNzIjsKKyAgICAgICAgU3RyaW5nIHMgPSBzdHI7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VWYXJpYWJsZS9TdWJMaXRlcmFsMS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVZhcmlhYmxlL1N1YkxpdGVyYWwxLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmI2MDYxYgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VWYXJpYWJsZS9TdWJMaXRlcmFsMS5qYXZhCkBAIC0wLDAgKzEsNSBAQAorY2xhc3MgQSB7CisgICAgcHVibGljIHZvaWQgdGVzdCgpIHsKKyAgICAgICAgU3RyaW5nIHMgPSAiPHNlbGVjdGlvbj5zczwvc2VsZWN0aW9uPiI7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VWYXJpYWJsZS9TdWJMaXRlcmFsRnJvbUV4cHJlc3Npb24uYWZ0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VWYXJpYWJsZS9TdWJMaXRlcmFsRnJvbUV4cHJlc3Npb24uYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYjQzNTBiCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVZhcmlhYmxlL1N1YkxpdGVyYWxGcm9tRXhwcmVzc2lvbi5hZnRlci5qYXZhCkBAIC0wLDAgKzEsNyBAQAorY2xhc3MgQSB7CisgICAgcHVibGljIHZvaWQgdGVzdCgpIHsKKyAgICAgICAgaW50IGkgPSAwOworICAgICAgICBTdHJpbmcgc3RyID0gaSArICJzc3MiOworICAgICAgICBTdHJpbmcgcyA9IHN0ciArICJzIjsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVZhcmlhYmxlL1N1YkxpdGVyYWxGcm9tRXhwcmVzc2lvbi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVZhcmlhYmxlL1N1YkxpdGVyYWxGcm9tRXhwcmVzc2lvbi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBjNGFhM2QKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlVmFyaWFibGUvU3ViTGl0ZXJhbEZyb21FeHByZXNzaW9uLmphdmEKQEAgLTAsMCArMSw2IEBACitjbGFzcyBBIHsKKyAgICBwdWJsaWMgdm9pZCB0ZXN0KCkgeworICAgICAgICBpbnQgaSA9IDA7CisgICAgICAgIFN0cmluZyBzID0gPHNlbGVjdGlvbj5pICsgInNzczwvc2VsZWN0aW9uPnMiOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlVmFyaWFibGUvU3ViUHJpbWl0aXZlTGl0ZXJhbC5hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVZhcmlhYmxlL1N1YlByaW1pdGl2ZUxpdGVyYWwuYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42M2M2MDRjCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVZhcmlhYmxlL1N1YlByaW1pdGl2ZUxpdGVyYWwuYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDYgQEAKK2NsYXNzIEEgeworICAgIHB1YmxpYyB2b2lkIHRlc3QoKSB7CisgICAgICAgIGJvb2xlYW4gc3RyID0gdHJ1ZTsKKyAgICAgICAgU3RyaW5nIHMgPSAic3MiICsgc3RyOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlVmFyaWFibGUvU3ViUHJpbWl0aXZlTGl0ZXJhbC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVZhcmlhYmxlL1N1YlByaW1pdGl2ZUxpdGVyYWwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMTFjYTI5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVZhcmlhYmxlL1N1YlByaW1pdGl2ZUxpdGVyYWwuamF2YQpAQCAtMCwwICsxLDUgQEAKK2NsYXNzIEEgeworICAgIHB1YmxpYyB2b2lkIHRlc3QoKSB7CisgICAgICAgIFN0cmluZyBzID0gInNzPHNlbGVjdGlvbj50cnVlPC9zZWxlY3Rpb24+IjsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVZhcmlhYmxlL1N1YmV4cHJlc3Npb25XaXRoU3BhY2VzSW5TZWxlY3Rpb24uYWZ0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VWYXJpYWJsZS9TdWJleHByZXNzaW9uV2l0aFNwYWNlc0luU2VsZWN0aW9uLmFmdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGQ1NzdiMQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VWYXJpYWJsZS9TdWJleHByZXNzaW9uV2l0aFNwYWNlc0luU2VsZWN0aW9uLmFmdGVyLmphdmEKQEAgLTAsMCArMSwxMCBAQAorY2xhc3MgQSB7CisgICAgcHVibGljIHZvaWQgdGVzdChib29sZWFuIGEsIGJvb2xlYW4gYikgeworICAgICAgICBmaW5hbCBib29sZWFuIGFiID0gYSAmJgorICAgICAgICAgICAgICAgIGI7CisgICAgICAgIGlmICh0cnVlICYmIGFiCisvL3NvbWUgY29tbWVudAorCisgICAgICApOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlVmFyaWFibGUvU3ViZXhwcmVzc2lvbldpdGhTcGFjZXNJblNlbGVjdGlvbi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVZhcmlhYmxlL1N1YmV4cHJlc3Npb25XaXRoU3BhY2VzSW5TZWxlY3Rpb24uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMDQ3NWZhCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVZhcmlhYmxlL1N1YmV4cHJlc3Npb25XaXRoU3BhY2VzSW5TZWxlY3Rpb24uamF2YQpAQCAtMCwwICsxLDkgQEAKK2NsYXNzIEEgeworICAgIHB1YmxpYyB2b2lkIHRlc3QoYm9vbGVhbiBhLCBib29sZWFuIGIpIHsKKyAgICAgICAgaWYgKHRydWUgJiYgPHNlbGVjdGlvbj5hICYmCisgICAgICAgICAgICAgICAgICAgICBiCisvL3NvbWUgY29tbWVudAorPC9zZWxlY3Rpb24+CisgICAgICApOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlVmFyaWFibGUvVGhpc1F1YWxpZmllci5hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVZhcmlhYmxlL1RoaXNRdWFsaWZpZXIuYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMjVlZGRkCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVZhcmlhYmxlL1RoaXNRdWFsaWZpZXIuYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDEyIEBACitwdWJsaWMgY2xhc3MgVGVzdDkgeworICAgIHByb3RlY3RlZCBpbnQgY291bnQ7Cit9CisKK2NsYXNzIFRlc3QxMCBleHRlbmRzIFRlc3Q5IHsKKyAgICBwcml2YXRlIGNsYXNzIFRlc3QxMGkgeworICAgICAgICB2b2lkIHRlc3QoKSB7CisgICAgICAgICAgICBmaW5hbCBpbnQgY291bnQgPSBUZXN0MTAudGhpcy5jb3VudDsKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihjb3VudCk7CisgICAgICAgIH0KKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlVmFyaWFibGUvVGhpc1F1YWxpZmllci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVZhcmlhYmxlL1RoaXNRdWFsaWZpZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYjhlZTA0Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVZhcmlhYmxlL1RoaXNRdWFsaWZpZXIuamF2YQpAQCAtMCwwICsxLDExIEBACitwdWJsaWMgY2xhc3MgVGVzdDkgeworICAgIHByb3RlY3RlZCBpbnQgY291bnQ7Cit9CisKK2NsYXNzIFRlc3QxMCBleHRlbmRzIFRlc3Q5IHsKKyAgICBwcml2YXRlIGNsYXNzIFRlc3QxMGkgeworICAgICAgICB2b2lkIHRlc3QoKSB7CisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oPHNlbGVjdGlvbj5jb3VudDwvc2VsZWN0aW9uPik7CisgICAgICAgIH0KKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlVmFyaWFibGUvVHlwZUFubm90YXRpb25zLmFmdGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlVmFyaWFibGUvVHlwZUFubm90YXRpb25zLmFmdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTM1OThhNwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VWYXJpYWJsZS9UeXBlQW5ub3RhdGlvbnMuYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDEzIEBACitpbXBvcnQgamF2YS5sYW5nLmFubm90YXRpb24uKjsKKworQFRhcmdldCh7RWxlbWVudFR5cGUuVFlQRV9VU0UvKiwgRWxlbWVudFR5cGUuVFlQRSovfSkKK0BpbnRlcmZhY2UgVEEgeworCit9CisKK2NsYXNzIEMgeworICAgIHZvaWQgZm9vICgpIHsKKyAgICAgICAgQFRBIEMgeSA9IG51bGw7CisgICAgICAgIEBUQSBDIHkxID0geTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlVmFyaWFibGUvVHlwZUFubm90YXRpb25zLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlVmFyaWFibGUvVHlwZUFubm90YXRpb25zLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmJhOWQ5NAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VWYXJpYWJsZS9UeXBlQW5ub3RhdGlvbnMuamF2YQpAQCAtMCwwICsxLDEzIEBACitpbXBvcnQgamF2YS5sYW5nLmFubm90YXRpb24uKjsKKworQFRhcmdldCh7RWxlbWVudFR5cGUuVFlQRV9VU0UvKiwgRWxlbWVudFR5cGUuVFlQRSovfSkKK0BpbnRlcmZhY2UgVEEgeworCit9CisKK2NsYXNzIEMgeworICAgIHZvaWQgZm9vICgpIHsKKyAgICAgICAgQFRBIEMgeSA9IG51bGw7CisgICAgICAgIDxzZWxlY3Rpb24+eTwvc2VsZWN0aW9uPjsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlVmFyaWFibGUvV2l0aElmQnJhbmNoZXMuYWZ0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VWYXJpYWJsZS9XaXRoSWZCcmFuY2hlcy5hZnRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJhNTdkZTEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlVmFyaWFibGUvV2l0aElmQnJhbmNoZXMuYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDIyIEBACitjbGFzcyBBIHsKKyAgICBwcml2YXRlIGNsYXNzIElubmVyIHsKKyAgICAgICAgcHVibGljIHZvaWQgaW5uZXJNZXRob2QoKSB7CisgICAgICAgICAgICBuZXcgUnVubmFibGUoKSB7CisgICAgICAgICAgICAgICAgcHVibGljIHZvaWQgcnVuKCkgeworICAgICAgICAgICAgICAgICAgICBpZiAodHJ1ZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRydWUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaSA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHRlbXAgPSBpICogaTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaSA9PSAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiIiArIHRlbXApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiIiArIHRlbXApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpID0gdGVtcDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9LnJ1bigpOworICAgICAgICB9CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VWYXJpYWJsZS9XaXRoSWZCcmFuY2hlcy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVZhcmlhYmxlL1dpdGhJZkJyYW5jaGVzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmIwZDY5MAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VWYXJpYWJsZS9XaXRoSWZCcmFuY2hlcy5qYXZhCkBAIC0wLDAgKzEsMjEgQEAKK2NsYXNzIEEgeworICAgIHByaXZhdGUgY2xhc3MgSW5uZXIgeworICAgICAgICBwdWJsaWMgdm9pZCBpbm5lck1ldGhvZCgpIHsKKyAgICAgICAgICAgIG5ldyBSdW5uYWJsZSgpIHsKKyAgICAgICAgICAgICAgICBwdWJsaWMgdm9pZCBydW4oKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICh0cnVlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHJ1ZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaSA9PSAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiIiArIDxzZWxlY3Rpb24+aSAqIGk8L3NlbGVjdGlvbj4pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiIiArIGkgKiBpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSA9IGkgKiBpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0ucnVuKCk7CisgICAgICAgIH0KKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVZhcmlhYmxlL2dlbmVyaWNUeXBlV2l0aElubmVyL2FmdGVyL3Rlc3QvQS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVZhcmlhYmxlL2dlbmVyaWNUeXBlV2l0aElubmVyL2FmdGVyL3Rlc3QvQS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAyNDNiZjgKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlVmFyaWFibGUvZ2VuZXJpY1R5cGVXaXRoSW5uZXIvYWZ0ZXIvdGVzdC9BLmphdmEKQEAgLTAsMCArMSw2IEBACitwYWNrYWdlIHRlc3Q7CisKK3B1YmxpYyBjbGFzcyBBIHsKKyAgICBwdWJsaWMgc3RhdGljIGNsYXNzIEIgeworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlVmFyaWFibGUvZ2VuZXJpY1R5cGVXaXRoSW5uZXIvYWZ0ZXIvdGVzdC9DbGllbnQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VWYXJpYWJsZS9nZW5lcmljVHlwZVdpdGhJbm5lci9hZnRlci90ZXN0L0NsaWVudC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU3ZWZmYTQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlVmFyaWFibGUvZ2VuZXJpY1R5cGVXaXRoSW5uZXIvYWZ0ZXIvdGVzdC9DbGllbnQuamF2YQpAQCAtMCwwICsxLDkgQEAKK3BhY2thZ2UgdGVzdDsKKworcHVibGljIGNsYXNzIENsaWVudCB7CisgICAgcHVibGljIHN0YXRpYyBMaXN0PEEuQj4gZ2V0TGlzdCgpIHsgcmV0dXJuIG51bGw7IH0KKyAgICAKKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWV0aG9kKCkgeworICAgICAgICBmaW5hbCBMaXN0PEEuQj4gbCA9IGdldExpc3QoKTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVZhcmlhYmxlL2dlbmVyaWNUeXBlV2l0aElubmVyL2FmdGVyL3Rlc3QvTGlzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVZhcmlhYmxlL2dlbmVyaWNUeXBlV2l0aElubmVyL2FmdGVyL3Rlc3QvTGlzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU1NGYzYTAKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlVmFyaWFibGUvZ2VuZXJpY1R5cGVXaXRoSW5uZXIvYWZ0ZXIvdGVzdC9MaXN0LmphdmEKQEAgLTAsMCArMSw0IEBACitwYWNrYWdlIHRlc3Q7CisKK3B1YmxpYyBjbGFzcyBMaXN0PEU+IHsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlVmFyaWFibGUvZ2VuZXJpY1R5cGVXaXRoSW5uZXIvYmVmb3JlL3Rlc3QvQS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVZhcmlhYmxlL2dlbmVyaWNUeXBlV2l0aElubmVyL2JlZm9yZS90ZXN0L0EuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMjQzYmY4Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVZhcmlhYmxlL2dlbmVyaWNUeXBlV2l0aElubmVyL2JlZm9yZS90ZXN0L0EuamF2YQpAQCAtMCwwICsxLDYgQEAKK3BhY2thZ2UgdGVzdDsKKworcHVibGljIGNsYXNzIEEgeworICAgIHB1YmxpYyBzdGF0aWMgY2xhc3MgQiB7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VWYXJpYWJsZS9nZW5lcmljVHlwZVdpdGhJbm5lci9iZWZvcmUvdGVzdC9DbGllbnQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VWYXJpYWJsZS9nZW5lcmljVHlwZVdpdGhJbm5lci9iZWZvcmUvdGVzdC9DbGllbnQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNjUzMWZmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVZhcmlhYmxlL2dlbmVyaWNUeXBlV2l0aElubmVyL2JlZm9yZS90ZXN0L0NsaWVudC5qYXZhCkBAIC0wLDAgKzEsOSBAQAorcGFja2FnZSB0ZXN0OworCitwdWJsaWMgY2xhc3MgQ2xpZW50IHsKKyAgICBwdWJsaWMgc3RhdGljIExpc3Q8QS5CPiBnZXRMaXN0KCkgeyByZXR1cm4gbnVsbDsgfQorICAgIAorICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtZXRob2QoKSB7CisgICAgICAgICA8c2VsZWN0aW9uPmdldExpc3QoKTwvc2VsZWN0aW9uPgorICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlVmFyaWFibGUvZ2VuZXJpY1R5cGVXaXRoSW5uZXIvYmVmb3JlL3Rlc3QvTGlzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVZhcmlhYmxlL2dlbmVyaWNUeXBlV2l0aElubmVyL2JlZm9yZS90ZXN0L0xpc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NTRmM2EwCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVZhcmlhYmxlL2dlbmVyaWNUeXBlV2l0aElubmVyL2JlZm9yZS90ZXN0L0xpc3QuamF2YQpAQCAtMCwwICsxLDQgQEAKK3BhY2thZ2UgdGVzdDsKKworcHVibGljIGNsYXNzIExpc3Q8RT4geworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VWYXJpYWJsZS9nZW5lcmljVHlwZVdpdGhJbm5lcjEvYWZ0ZXIvdGVzdC9BLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlVmFyaWFibGUvZ2VuZXJpY1R5cGVXaXRoSW5uZXIxL2FmdGVyL3Rlc3QvQS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAyNDNiZjgKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlVmFyaWFibGUvZ2VuZXJpY1R5cGVXaXRoSW5uZXIxL2FmdGVyL3Rlc3QvQS5qYXZhCkBAIC0wLDAgKzEsNiBAQAorcGFja2FnZSB0ZXN0OworCitwdWJsaWMgY2xhc3MgQSB7CisgICAgcHVibGljIHN0YXRpYyBjbGFzcyBCIHsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVZhcmlhYmxlL2dlbmVyaWNUeXBlV2l0aElubmVyMS9hZnRlci90ZXN0L0NsaWVudC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVZhcmlhYmxlL2dlbmVyaWNUeXBlV2l0aElubmVyMS9hZnRlci90ZXN0L0NsaWVudC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhkODJhMGEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlVmFyaWFibGUvZ2VuZXJpY1R5cGVXaXRoSW5uZXIxL2FmdGVyL3Rlc3QvQ2xpZW50LmphdmEKQEAgLTAsMCArMSw3IEBACitwYWNrYWdlIHRlc3Q7CisKK3B1YmxpYyBjbGFzcyBDbGllbnQgeworICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtZXRob2QoKSB7CisgICAgICAgIGZpbmFsIExpc3Q8QS5CPiBsID0gWC5nZXRMaXN0KCk7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VWYXJpYWJsZS9nZW5lcmljVHlwZVdpdGhJbm5lcjEvYWZ0ZXIvdGVzdC9MaXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlVmFyaWFibGUvZ2VuZXJpY1R5cGVXaXRoSW5uZXIxL2FmdGVyL3Rlc3QvTGlzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU1NGYzYTAKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlVmFyaWFibGUvZ2VuZXJpY1R5cGVXaXRoSW5uZXIxL2FmdGVyL3Rlc3QvTGlzdC5qYXZhCkBAIC0wLDAgKzEsNCBAQAorcGFja2FnZSB0ZXN0OworCitwdWJsaWMgY2xhc3MgTGlzdDxFPiB7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVZhcmlhYmxlL2dlbmVyaWNUeXBlV2l0aElubmVyMS9hZnRlci90ZXN0L1guamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VWYXJpYWJsZS9nZW5lcmljVHlwZVdpdGhJbm5lcjEvYWZ0ZXIvdGVzdC9YLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2I3YmY1MgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VWYXJpYWJsZS9nZW5lcmljVHlwZVdpdGhJbm5lcjEvYWZ0ZXIvdGVzdC9YLmphdmEKQEAgLTAsMCArMSw1IEBACitwYWNrYWdlIHRlc3Q7CisKK3B1YmxpYyBjbGFzcyBYIHsKKyAgICBwdWJsaWMgc3RhdGljIExpc3Q8QS5CPiBnZXRMaXN0KCkgeyByZXR1cm4gbnVsbDsgfSAKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlVmFyaWFibGUvZ2VuZXJpY1R5cGVXaXRoSW5uZXIxL2JlZm9yZS90ZXN0L0EuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VWYXJpYWJsZS9nZW5lcmljVHlwZVdpdGhJbm5lcjEvYmVmb3JlL3Rlc3QvQS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAyNDNiZjgKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlVmFyaWFibGUvZ2VuZXJpY1R5cGVXaXRoSW5uZXIxL2JlZm9yZS90ZXN0L0EuamF2YQpAQCAtMCwwICsxLDYgQEAKK3BhY2thZ2UgdGVzdDsKKworcHVibGljIGNsYXNzIEEgeworICAgIHB1YmxpYyBzdGF0aWMgY2xhc3MgQiB7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VWYXJpYWJsZS9nZW5lcmljVHlwZVdpdGhJbm5lcjEvYmVmb3JlL3Rlc3QvQ2xpZW50LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlVmFyaWFibGUvZ2VuZXJpY1R5cGVXaXRoSW5uZXIxL2JlZm9yZS90ZXN0L0NsaWVudC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE1ZGYxMDAKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlVmFyaWFibGUvZ2VuZXJpY1R5cGVXaXRoSW5uZXIxL2JlZm9yZS90ZXN0L0NsaWVudC5qYXZhCkBAIC0wLDAgKzEsNyBAQAorcGFja2FnZSB0ZXN0OworCitwdWJsaWMgY2xhc3MgQ2xpZW50IHsKKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWV0aG9kKCkgeworICAgICAgICAgPHNlbGVjdGlvbj5YLmdldExpc3QoKTwvc2VsZWN0aW9uPgorICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlVmFyaWFibGUvZ2VuZXJpY1R5cGVXaXRoSW5uZXIxL2JlZm9yZS90ZXN0L0xpc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VWYXJpYWJsZS9nZW5lcmljVHlwZVdpdGhJbm5lcjEvYmVmb3JlL3Rlc3QvTGlzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU1NGYzYTAKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlVmFyaWFibGUvZ2VuZXJpY1R5cGVXaXRoSW5uZXIxL2JlZm9yZS90ZXN0L0xpc3QuamF2YQpAQCAtMCwwICsxLDQgQEAKK3BhY2thZ2UgdGVzdDsKKworcHVibGljIGNsYXNzIExpc3Q8RT4geworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VWYXJpYWJsZS9nZW5lcmljVHlwZVdpdGhJbm5lcjEvYmVmb3JlL3Rlc3QvWC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVZhcmlhYmxlL2dlbmVyaWNUeXBlV2l0aElubmVyMS9iZWZvcmUvdGVzdC9YLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2I3YmY1MgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VWYXJpYWJsZS9nZW5lcmljVHlwZVdpdGhJbm5lcjEvYmVmb3JlL3Rlc3QvWC5qYXZhCkBAIC0wLDAgKzEsNSBAQAorcGFja2FnZSB0ZXN0OworCitwdWJsaWMgY2xhc3MgWCB7CisgICAgcHVibGljIHN0YXRpYyBMaXN0PEEuQj4gZ2V0TGlzdCgpIHsgcmV0dXJuIG51bGw7IH0gCit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVZhcmlhYmxlL2dlbmVyaWNXaXRoVHdvUGFyYW1ldGVycy9hZnRlci9DbGllbnQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VWYXJpYWJsZS9nZW5lcmljV2l0aFR3b1BhcmFtZXRlcnMvYWZ0ZXIvQ2xpZW50LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDc2MGU1ZQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VWYXJpYWJsZS9nZW5lcmljV2l0aFR3b1BhcmFtZXRlcnMvYWZ0ZXIvQ2xpZW50LmphdmEKQEAgLTAsMCArMSw3IEBACitpbXBvcnQgdXRpbC5QYWlyOworCitjbGFzcyBDbGllbnQgeworICAgIHZvaWQgbWV0aG9kKCkgeworICAgICAgICBQYWlyPFN0cmluZyxQYWlyPEludGVnZXIsQm9vbGVhbj4+IHAgPSBQYWlyUHJvdmlkZXIuZ2V0UGFpcigpOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlVmFyaWFibGUvZ2VuZXJpY1dpdGhUd29QYXJhbWV0ZXJzL2FmdGVyL1BhaXJQcm92aWRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVZhcmlhYmxlL2dlbmVyaWNXaXRoVHdvUGFyYW1ldGVycy9hZnRlci9QYWlyUHJvdmlkZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YjZkOWFiCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVZhcmlhYmxlL2dlbmVyaWNXaXRoVHdvUGFyYW1ldGVycy9hZnRlci9QYWlyUHJvdmlkZXIuamF2YQpAQCAtMCwwICsxLDcgQEAKK2ltcG9ydCB1dGlsLlBhaXI7CisKK2NsYXNzIFBhaXJQcm92aWRlciB7CisgICAgcHVibGljIHN0YXRpYyBQYWlyPFN0cmluZywgUGFpcjxJbnRlZ2VyLCBCb29sZWFuPj4gZ2V0UGFpcigpIHsKKyAgICAgICAgcmV0dXJuIG51bGw7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VWYXJpYWJsZS9nZW5lcmljV2l0aFR3b1BhcmFtZXRlcnMvYWZ0ZXIvdXRpbC9QYWlyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlVmFyaWFibGUvZ2VuZXJpY1dpdGhUd29QYXJhbWV0ZXJzL2FmdGVyL3V0aWwvUGFpci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdjMDk1YzUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlVmFyaWFibGUvZ2VuZXJpY1dpdGhUd29QYXJhbWV0ZXJzL2FmdGVyL3V0aWwvUGFpci5qYXZhCkBAIC0wLDAgKzEsMTMgQEAKK3BhY2thZ2UgdXRpbDsKKworY2xhc3MgUGFpcjxMLFI+IHsKKyAgICBwdWJsaWMgUGFpcihMIGwsIFIgcikgeworCisgICAgfQorICAgIHB1YmxpYyBMIGdldEwoKSB7CisgICAgICAgIHJldHVybiBudWxsOworICAgIH0KKyAgICBwdWJsaWMgUiBnZXRSKCkgeworICAgICAgICByZXR1cm4gbnVsbDsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVZhcmlhYmxlL2dlbmVyaWNXaXRoVHdvUGFyYW1ldGVycy9iZWZvcmUvQ2xpZW50LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlVmFyaWFibGUvZ2VuZXJpY1dpdGhUd29QYXJhbWV0ZXJzL2JlZm9yZS9DbGllbnQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYTUzNjlkCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVZhcmlhYmxlL2dlbmVyaWNXaXRoVHdvUGFyYW1ldGVycy9iZWZvcmUvQ2xpZW50LmphdmEKQEAgLTAsMCArMSw1IEBACitjbGFzcyBDbGllbnQgeworICAgIHZvaWQgbWV0aG9kKCkgeworICAgICAgICA8c2VsZWN0aW9uPlBhaXJQcm92aWRlci5nZXRQYWlyKCk8L3NlbGVjdGlvbj4KKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVZhcmlhYmxlL2dlbmVyaWNXaXRoVHdvUGFyYW1ldGVycy9iZWZvcmUvUGFpclByb3ZpZGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlVmFyaWFibGUvZ2VuZXJpY1dpdGhUd29QYXJhbWV0ZXJzL2JlZm9yZS9QYWlyUHJvdmlkZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YjZkOWFiCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVZhcmlhYmxlL2dlbmVyaWNXaXRoVHdvUGFyYW1ldGVycy9iZWZvcmUvUGFpclByb3ZpZGVyLmphdmEKQEAgLTAsMCArMSw3IEBACitpbXBvcnQgdXRpbC5QYWlyOworCitjbGFzcyBQYWlyUHJvdmlkZXIgeworICAgIHB1YmxpYyBzdGF0aWMgUGFpcjxTdHJpbmcsIFBhaXI8SW50ZWdlciwgQm9vbGVhbj4+IGdldFBhaXIoKSB7CisgICAgICAgIHJldHVybiBudWxsOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlVmFyaWFibGUvZ2VuZXJpY1dpdGhUd29QYXJhbWV0ZXJzL2JlZm9yZS91dGlsL1BhaXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VWYXJpYWJsZS9nZW5lcmljV2l0aFR3b1BhcmFtZXRlcnMvYmVmb3JlL3V0aWwvUGFpci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdjMDk1YzUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlVmFyaWFibGUvZ2VuZXJpY1dpdGhUd29QYXJhbWV0ZXJzL2JlZm9yZS91dGlsL1BhaXIuamF2YQpAQCAtMCwwICsxLDEzIEBACitwYWNrYWdlIHV0aWw7CisKK2NsYXNzIFBhaXI8TCxSPiB7CisgICAgcHVibGljIFBhaXIoTCBsLCBSIHIpIHsKKworICAgIH0KKyAgICBwdWJsaWMgTCBnZXRMKCkgeworICAgICAgICByZXR1cm4gbnVsbDsKKyAgICB9CisgICAgcHVibGljIFIgZ2V0UigpIHsKKyAgICAgICAgcmV0dXJuIG51bGw7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VWYXJpYWJsZS9nZW5lcmljV2l0aFR3b1BhcmFtZXRlcnMyL2FmdGVyL0NsaWVudC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVZhcmlhYmxlL2dlbmVyaWNXaXRoVHdvUGFyYW1ldGVyczIvYWZ0ZXIvQ2xpZW50LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTQzZGY0MAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VWYXJpYWJsZS9nZW5lcmljV2l0aFR3b1BhcmFtZXRlcnMyL2FmdGVyL0NsaWVudC5qYXZhCkBAIC0wLDAgKzEsNSBAQAorY2xhc3MgQ2xpZW50IHsKKyAgICB2b2lkIG1ldGhvZCgpIHsKKyAgICAgICAgUGFpcjxTdHJpbmcsIFBhaXI8SW50ZWdlciwgQm9vbGVhbj4+IHAgPSBuZXcgUGFpclByb3ZpZGVyPFN0cmluZywgSW50ZWdlciwgQm9vbGVhbj4oKS5nZXRQYWlyKCk7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VWYXJpYWJsZS9nZW5lcmljV2l0aFR3b1BhcmFtZXRlcnMyL2FmdGVyL1BhaXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VWYXJpYWJsZS9nZW5lcmljV2l0aFR3b1BhcmFtZXRlcnMyL2FmdGVyL1BhaXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNWJhNjFjCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVZhcmlhYmxlL2dlbmVyaWNXaXRoVHdvUGFyYW1ldGVyczIvYWZ0ZXIvUGFpci5qYXZhCkBAIC0wLDAgKzEsMTAgQEAKK2NsYXNzIFBhaXI8TCxSPiB7CisgICAgcHVibGljIFBhaXIoTCBsLCBSIHIpIHsKKyAgICB9CisgICAgcHVibGljIEwgZ2V0TCgpIHsKKyAgICAgICAgcmV0dXJuIG51bGw7CisgICAgfQorICAgIHB1YmxpYyBSIGdldFIoKSB7CisgICAgICAgIHJldHVybiBudWxsOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlVmFyaWFibGUvZ2VuZXJpY1dpdGhUd29QYXJhbWV0ZXJzMi9hZnRlci9QYWlyUHJvdmlkZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VWYXJpYWJsZS9nZW5lcmljV2l0aFR3b1BhcmFtZXRlcnMyL2FmdGVyL1BhaXJQcm92aWRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdlZWQyNWEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlVmFyaWFibGUvZ2VuZXJpY1dpdGhUd29QYXJhbWV0ZXJzMi9hZnRlci9QYWlyUHJvdmlkZXIuamF2YQpAQCAtMCwwICsxLDUgQEAKK2NsYXNzIFBhaXJQcm92aWRlciA8VSwgViwgVz57CisgICAgcHVibGljIFBhaXI8VSwgUGFpcjxWLCBXPj4gZ2V0UGFpcigpIHsKKyAgICAgICAgcmV0dXJuIG51bGw7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VWYXJpYWJsZS9nZW5lcmljV2l0aFR3b1BhcmFtZXRlcnMyL2JlZm9yZS9DbGllbnQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VWYXJpYWJsZS9nZW5lcmljV2l0aFR3b1BhcmFtZXRlcnMyL2JlZm9yZS9DbGllbnQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ODFjNDY1Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVZhcmlhYmxlL2dlbmVyaWNXaXRoVHdvUGFyYW1ldGVyczIvYmVmb3JlL0NsaWVudC5qYXZhCkBAIC0wLDAgKzEsNSBAQAorY2xhc3MgQ2xpZW50IHsKKyAgICB2b2lkIG1ldGhvZCgpIHsKKyAgICAgICAgPHNlbGVjdGlvbj5uZXcgUGFpclByb3ZpZGVyPFN0cmluZywgSW50ZWdlciwgQm9vbGVhbj4oKS5nZXRQYWlyKCk8L3NlbGVjdGlvbj4KKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVZhcmlhYmxlL2dlbmVyaWNXaXRoVHdvUGFyYW1ldGVyczIvYmVmb3JlL1BhaXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VWYXJpYWJsZS9nZW5lcmljV2l0aFR3b1BhcmFtZXRlcnMyL2JlZm9yZS9QYWlyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTViYTYxYwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VWYXJpYWJsZS9nZW5lcmljV2l0aFR3b1BhcmFtZXRlcnMyL2JlZm9yZS9QYWlyLmphdmEKQEAgLTAsMCArMSwxMCBAQAorY2xhc3MgUGFpcjxMLFI+IHsKKyAgICBwdWJsaWMgUGFpcihMIGwsIFIgcikgeworICAgIH0KKyAgICBwdWJsaWMgTCBnZXRMKCkgeworICAgICAgICByZXR1cm4gbnVsbDsKKyAgICB9CisgICAgcHVibGljIFIgZ2V0UigpIHsKKyAgICAgICAgcmV0dXJuIG51bGw7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VWYXJpYWJsZS9nZW5lcmljV2l0aFR3b1BhcmFtZXRlcnMyL2JlZm9yZS9QYWlyUHJvdmlkZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VWYXJpYWJsZS9nZW5lcmljV2l0aFR3b1BhcmFtZXRlcnMyL2JlZm9yZS9QYWlyUHJvdmlkZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZWVkMjVhCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVZhcmlhYmxlL2dlbmVyaWNXaXRoVHdvUGFyYW1ldGVyczIvYmVmb3JlL1BhaXJQcm92aWRlci5qYXZhCkBAIC0wLDAgKzEsNSBAQAorY2xhc3MgUGFpclByb3ZpZGVyIDxVLCBWLCBXPnsKKyAgICBwdWJsaWMgUGFpcjxVLCBQYWlyPFYsIFc+PiBnZXRQYWlyKCkgeworICAgICAgICByZXR1cm4gbnVsbDsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVZhcmlhYmxlL3NhbWVQYWNrYWdlUmVmL2FmdGVyL3BhY2sxL0EuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VWYXJpYWJsZS9zYW1lUGFja2FnZVJlZi9hZnRlci9wYWNrMS9BLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDk2ZjczYQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VWYXJpYWJsZS9zYW1lUGFja2FnZVJlZi9hZnRlci9wYWNrMS9BLmphdmEKQEAgLTAsMCArMSw3IEBACitwYWNrYWdlIHBhY2sxOworCitwdWJsaWMgY2xhc3MgQSB7CisgICAgdm9pZCBtZXRob2QoKSB7CisgICAgICAgIEIgYiA9IG5ldyBCKCk7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VWYXJpYWJsZS9zYW1lUGFja2FnZVJlZi9hZnRlci9wYWNrMS9CLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlVmFyaWFibGUvc2FtZVBhY2thZ2VSZWYvYWZ0ZXIvcGFjazEvQi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg3OTljZTEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlVmFyaWFibGUvc2FtZVBhY2thZ2VSZWYvYWZ0ZXIvcGFjazEvQi5qYXZhCkBAIC0wLDAgKzEsNCBAQAorcGFja2FnZSBwYWNrMTsKKworY2xhc3MgQiB7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVZhcmlhYmxlL3NhbWVQYWNrYWdlUmVmL2JlZm9yZS9wYWNrMS9BLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlVmFyaWFibGUvc2FtZVBhY2thZ2VSZWYvYmVmb3JlL3BhY2sxL0EuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42Mjk4ZmQ2Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludHJvZHVjZVZhcmlhYmxlL3NhbWVQYWNrYWdlUmVmL2JlZm9yZS9wYWNrMS9BLmphdmEKQEAgLTAsMCArMSw3IEBACitwYWNrYWdlIHBhY2sxOworCitwdWJsaWMgY2xhc3MgQSB7CisgICAgdm9pZCBtZXRob2QoKSB7CisgICAgICAgIDxzZWxlY3Rpb24+bmV3IEIoKTwvc2VsZWN0aW9uPgorICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlVmFyaWFibGUvc2FtZVBhY2thZ2VSZWYvYmVmb3JlL3BhY2sxL0IuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnRyb2R1Y2VWYXJpYWJsZS9zYW1lUGFja2FnZVJlZi9iZWZvcmUvcGFjazEvQi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg3OTljZTEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW50cm9kdWNlVmFyaWFibGUvc2FtZVBhY2thZ2VSZWYvYmVmb3JlL3BhY2sxL0IuamF2YQpAQCAtMCwwICsxLDQgQEAKK3BhY2thZ2UgcGFjazE7CisKK2NsYXNzIEIgeworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnZlcnRCb29sZWFuLzEuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnZlcnRCb29sZWFuLzEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNWNhNWI3Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludmVydEJvb2xlYW4vMS5qYXZhCkBAIC0wLDAgKzEsMTcgQEAKK2ludGVyZmFjZSBJIHsKKyAgICBib29sZWFuIDxjYXJldD5pc0ZvbygpOworfQorCitjbGFzcyBSUlIgaW1wbGVtZW50cyBJIHsKKyAgICBwdWJsaWMgYm9vbGVhbiBpc0ZvbygpIHsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgeworICAgICAgICBib29sZWFuIGZvbyA9IGlzRm9vKCk7CisgICAgfQorCisgICAgdm9pZCBnKEkgaSkgeworICAgICAgICBib29sZWFuIGZvbyA9IGkuaXNGb28oKTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW52ZXJ0Qm9vbGVhbi8xX2FmdGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW52ZXJ0Qm9vbGVhbi8xX2FmdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODRhZDUyNwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnZlcnRCb29sZWFuLzFfYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDE3IEBACitpbnRlcmZhY2UgSSB7CisgICAgYm9vbGVhbiBpc0Zvb0ludmVydGVkKCk7Cit9CisKK2NsYXNzIFJSUiBpbXBsZW1lbnRzIEkgeworICAgIHB1YmxpYyBib29sZWFuIGlzRm9vSW52ZXJ0ZWQoKSB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICB7CisgICAgICAgIGJvb2xlYW4gZm9vID0gIWlzRm9vSW52ZXJ0ZWQoKTsKKyAgICB9CisKKyAgICB2b2lkIGcoSSBpKSB7CisgICAgICAgIGJvb2xlYW4gZm9vID0gIWkuaXNGb29JbnZlcnRlZCgpOworICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnZlcnRCb29sZWFuLzIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnZlcnRCb29sZWFuLzIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYTgzM2Y0Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludmVydEJvb2xlYW4vMi5qYXZhCkBAIC0wLDAgKzEsMTcgQEAKK2ludGVyZmFjZSBJIHsKKyAgICBib29sZWFuIGlzRm9vKCk7Cit9CisKK2NsYXNzIFJSUiBpbXBsZW1lbnRzIEkgeworICAgIHB1YmxpYyBib29sZWFuIDxjYXJldD5pc0ZvbygpIHsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgeworICAgICAgICBib29sZWFuIGZvbyA9IGlzRm9vKCk7CisgICAgfQorCisgICAgdm9pZCBnKEkgaSkgeworICAgICAgICBib29sZWFuIGZvbyA9IGkuaXNGb28oKTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW52ZXJ0Qm9vbGVhbi8yX2FmdGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW52ZXJ0Qm9vbGVhbi8yX2FmdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzliNDBiMQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnZlcnRCb29sZWFuLzJfYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDE3IEBACitpbnRlcmZhY2UgSSB7CisgICAgYm9vbGVhbiBpc0ZvbygpOworfQorCitjbGFzcyBSUlIgaW1wbGVtZW50cyBJIHsKKyAgICBwdWJsaWMgYm9vbGVhbiBpc0Zvb0ludmVydGVkKCkgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgeworICAgICAgICBib29sZWFuIGZvbyA9ICFpc0Zvb0ludmVydGVkKCk7CisgICAgfQorCisgICAgdm9pZCBnKEkgaSkgeworICAgICAgICBib29sZWFuIGZvbyA9IGkuaXNGb28oKTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW52ZXJ0Qm9vbGVhbi9hbm9ueW1vdXNDbGFzc2VzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW52ZXJ0Qm9vbGVhbi9hbm9ueW1vdXNDbGFzc2VzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzZlYmQ2MgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnZlcnRCb29sZWFuL2Fub255bW91c0NsYXNzZXMuamF2YQpAQCAtMCwwICsxLDIzIEBACithYnN0cmFjdCBjbGFzcyBEZW1vSW52ZXJ0Qm9vbGVhbiB7CisKKyAgICBib29sZWFuIGI7CisKKyAgICBEZW1vSW52ZXJ0Qm9vbGVhbihib29sZWFuIDxjYXJldD5iKSB7CisgICAgICAgIHRoaXMuYiA9IGI7CisgICAgfQorCisgICAgRGVtb0ludmVydEJvb2xlYW4oKSB7CisgICAgICAgIHRoaXModHJ1ZSk7Ly90aGlzIHRydWUgd2lsbCBiZSBpbnZlcnRlZAorICAgIH0KKworICAgIGFic3RyYWN0IHZvaWQgZjEoKTsKKworICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKyAgICAgICAgRGVtb0ludmVydEJvb2xlYW4gZGVtbyA9IG5ldyBEZW1vSW52ZXJ0Qm9vbGVhbih0cnVlKSB7Ly90aGlzIHRydWUgd2lsbCBub3QgYmUgaW52ZXJ0ZWQKKyAgICAgICAgICAgIEBPdmVycmlkZQorICAgICAgICAgICAgcHVibGljIHZvaWQgZjEoKSB7CisKKyAgICAgICAgICAgIH0KKyAgICAgICAgfTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludmVydEJvb2xlYW4vYW5vbnltb3VzQ2xhc3Nlc19hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludmVydEJvb2xlYW4vYW5vbnltb3VzQ2xhc3Nlc19hZnRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU3YmMzMDEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW52ZXJ0Qm9vbGVhbi9hbm9ueW1vdXNDbGFzc2VzX2FmdGVyLmphdmEKQEAgLTAsMCArMSwyMyBAQAorYWJzdHJhY3QgY2xhc3MgRGVtb0ludmVydEJvb2xlYW4geworCisgICAgYm9vbGVhbiBiOworCisgICAgRGVtb0ludmVydEJvb2xlYW4oYm9vbGVhbiA8Y2FyZXQ+YkludmVydGVkKSB7CisgICAgICAgIHRoaXMuYiA9ICFiSW52ZXJ0ZWQ7CisgICAgfQorCisgICAgRGVtb0ludmVydEJvb2xlYW4oKSB7CisgICAgICAgIHRoaXMoZmFsc2UpOy8vdGhpcyB0cnVlIHdpbGwgYmUgaW52ZXJ0ZWQKKyAgICB9CisKKyAgICBhYnN0cmFjdCB2b2lkIGYxKCk7CisKKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisgICAgICAgIERlbW9JbnZlcnRCb29sZWFuIGRlbW8gPSBuZXcgRGVtb0ludmVydEJvb2xlYW4oZmFsc2UpIHsvL3RoaXMgdHJ1ZSB3aWxsIG5vdCBiZSBpbnZlcnRlZAorICAgICAgICAgICAgQE92ZXJyaWRlCisgICAgICAgICAgICBwdWJsaWMgdm9pZCBmMSgpIHsKKworICAgICAgICAgICAgfQorICAgICAgICB9OworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW52ZXJ0Qm9vbGVhbi9pbm5lckNsYXNzZXMuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnZlcnRCb29sZWFuL2lubmVyQ2xhc3Nlcy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg1Y2YxZDQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW52ZXJ0Qm9vbGVhbi9pbm5lckNsYXNzZXMuamF2YQpAQCAtMCwwICsxLDE2IEBACitwdWJsaWMgY2xhc3MgQ29udmVydDJBdG9taWNUZXN0IHsKKyAgcHVibGljIGJvb2xlYW4gZjxjYXJldD5vbygpIHsKKyAgICBQcm9jZXNzb3IgcHJvY2Vzc29yID0gbmV3IFByb2Nlc3NvcigpIHsKKyAgICAgIEBPdmVycmlkZQorICAgICAgcHVibGljIGJvb2xlYW4gcHJvY2VzcyhPYmplY3QgbykgeworICAgICAgICByZXR1cm4gZmFsc2U7IC8vIENoYW5nZXMgZmFsc2UgdG8gdHJ1ZSBoZXJlLCBXUk9ORyEhIQorICAgICAgfQorICAgIH07CisKKyAgICByZXR1cm4gZmFsc2U7IC8vIENoYW5nZXMgZmFsc2UgdG8gdHJ1ZSBoZXJlLCByaWdodAorICB9Cit9CisKK2ludGVyZmFjZSBQcm9jZXNzb3IgeworICBib29sZWFuIHByb2Nlc3MoT2JqZWN0IG9iamVjdCk7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludmVydEJvb2xlYW4vaW5uZXJDbGFzc2VzX2FmdGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW52ZXJ0Qm9vbGVhbi9pbm5lckNsYXNzZXNfYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NDNjZTllCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludmVydEJvb2xlYW4vaW5uZXJDbGFzc2VzX2FmdGVyLmphdmEKQEAgLTAsMCArMSwxNiBAQAorcHVibGljIGNsYXNzIENvbnZlcnQyQXRvbWljVGVzdCB7CisgIHB1YmxpYyBib29sZWFuIGZvb0ludmVydGVkKCkgeworICAgIFByb2Nlc3NvciBwcm9jZXNzb3IgPSBuZXcgUHJvY2Vzc29yKCkgeworICAgICAgQE92ZXJyaWRlCisgICAgICBwdWJsaWMgYm9vbGVhbiBwcm9jZXNzKE9iamVjdCBvKSB7CisgICAgICAgIHJldHVybiBmYWxzZTsgLy8gQ2hhbmdlcyBmYWxzZSB0byB0cnVlIGhlcmUsIFdST05HISEhCisgICAgICB9CisgICAgfTsKKworICAgIHJldHVybiB0cnVlOyAvLyBDaGFuZ2VzIGZhbHNlIHRvIHRydWUgaGVyZSwgcmlnaHQKKyAgfQorfQorCitpbnRlcmZhY2UgUHJvY2Vzc29yIHsKKyAgYm9vbGVhbiBwcm9jZXNzKE9iamVjdCBvYmplY3QpOworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnZlcnRCb29sZWFuL3BhcmFtZXRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludmVydEJvb2xlYW4vcGFyYW1ldGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjAwY2M3NAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnZlcnRCb29sZWFuL3BhcmFtZXRlci5qYXZhCkBAIC0wLDAgKzEsOSBAQAorY2xhc3MgSW52ZXJ0Qm9vbGVhblBhcmFtZXRlclRlc3QgeworICAgIHZvaWQgZm9vKGJvb2xlYW4gPGNhcmV0PmIpIHsKKyAgICAgICAgYm9vbGVhbiBjID0gIWI7CisgICAgfQorCisgICAgeworICAgICAgICBmb28odHJ1ZSk7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnZlcnRCb29sZWFuL3BhcmFtZXRlcjEuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnZlcnRCb29sZWFuL3BhcmFtZXRlcjEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMmFhODcwCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludmVydEJvb2xlYW4vcGFyYW1ldGVyMS5qYXZhCkBAIC0wLDAgKzEsMTYgQEAKK2NsYXNzIEludmVydEJvb2xlYW5QYXJhbWV0ZXJUZXN0IHsKKyAgICB2b2lkIGZvbyhib29sZWFuIDxjYXJldD5iKSB7CisgICAgICAgIGJvb2xlYW4gYyA9ICFiOworICAgICAgICBiID0gZmFsc2U7CisgICAgfQorCisgICAgeworICAgICAgICBmb28odHJ1ZSk7CisgICAgfQorfQorCitjbGFzcyBEcnYgZXh0ZW5kcyBJbnZlcnRCb29sZWFuUGFyYW1ldGVyVGVzdCB7CisgICAgdm9pZCBmb28oYm9vbGVhbiBiKSB7CisgICAgICAgIHN1cGVyLmZvbyhiKTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludmVydEJvb2xlYW4vcGFyYW1ldGVyMV9hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludmVydEJvb2xlYW4vcGFyYW1ldGVyMV9hZnRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEwYmQ0MTAKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW52ZXJ0Qm9vbGVhbi9wYXJhbWV0ZXIxX2FmdGVyLmphdmEKQEAgLTAsMCArMSwxNiBAQAorY2xhc3MgSW52ZXJ0Qm9vbGVhblBhcmFtZXRlclRlc3QgeworICAgIHZvaWQgZm9vKGJvb2xlYW4gYkludmVydGVkKSB7CisgICAgICAgIGJvb2xlYW4gYyA9IGJJbnZlcnRlZDsKKyAgICAgICAgYkludmVydGVkID0gdHJ1ZTsKKyAgICB9CisKKyAgICB7CisgICAgICAgIGZvbyhmYWxzZSk7CisgICAgfQorfQorCitjbGFzcyBEcnYgZXh0ZW5kcyBJbnZlcnRCb29sZWFuUGFyYW1ldGVyVGVzdCB7CisgICAgdm9pZCBmb28oYm9vbGVhbiBiSW52ZXJ0ZWQpIHsKKyAgICAgICAgc3VwZXIuZm9vKGJJbnZlcnRlZCk7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnZlcnRCb29sZWFuL3BhcmFtZXRlcl9hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludmVydEJvb2xlYW4vcGFyYW1ldGVyX2FmdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmU1YjYyNAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnZlcnRCb29sZWFuL3BhcmFtZXRlcl9hZnRlci5qYXZhCkBAIC0wLDAgKzEsOSBAQAorY2xhc3MgSW52ZXJ0Qm9vbGVhblBhcmFtZXRlclRlc3QgeworICAgIHZvaWQgZm9vKGJvb2xlYW4gYkludmVydGVkKSB7CisgICAgICAgIGJvb2xlYW4gYyA9IGJJbnZlcnRlZDsKKyAgICB9CisKKyAgICB7CisgICAgICAgIGZvbyhmYWxzZSk7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnZlcnRCb29sZWFuL3VudXNlZFJldHVyblZhbHVlLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW52ZXJ0Qm9vbGVhbi91bnVzZWRSZXR1cm5WYWx1ZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE2MmVjNDgKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvaW52ZXJ0Qm9vbGVhbi91bnVzZWRSZXR1cm5WYWx1ZS5qYXZhCkBAIC0wLDAgKzEsOSBAQAorY2xhc3MgQyB7CisgIGJvb2xlYW4gZjxjYXJldD5vbygpIHsKKyAgICByZXR1cm4gZmFsc2U7CisgIH0KKworICB2b2lkIGJhcigpIHsKKyAgICBmb28oKTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL2ludmVydEJvb2xlYW4vdW51c2VkUmV0dXJuVmFsdWVfYWZ0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnZlcnRCb29sZWFuL3VudXNlZFJldHVyblZhbHVlX2FmdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDc0MWFlYgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9pbnZlcnRCb29sZWFuL3VudXNlZFJldHVyblZhbHVlX2FmdGVyLmphdmEKQEAgLTAsMCArMSw5IEBACitjbGFzcyBDIHsKKyAgYm9vbGVhbiBmb29JbnZlcnRlZCgpIHsKKyAgICByZXR1cm4gdHJ1ZTsKKyAgfQorCisgIHZvaWQgYmFyKCkgeworICAgIGZvb0ludmVydGVkKCk7CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tYWtlQ2xhc3NTdGF0aWMvRGVmYXVsdENvbnN0cnVjdG9yQW5vbnltb3VzQ2xhc3MuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tYWtlQ2xhc3NTdGF0aWMvRGVmYXVsdENvbnN0cnVjdG9yQW5vbnltb3VzQ2xhc3MuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43Y2ViOTJmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21ha2VDbGFzc1N0YXRpYy9EZWZhdWx0Q29uc3RydWN0b3JBbm9ueW1vdXNDbGFzcy5qYXZhCkBAIC0wLDAgKzEsMTQgQEAKK3B1YmxpYyBjbGFzcyBBIHsKKyAgY2xhc3MgPGNhcmV0PkIgeworICB9Cit9CisKK2NsYXNzIEMgeworICB2b2lkIGZvbygpIHsKKyAgICBuZXcgQSgpLm5ldyBCKCkgeworICAgICAgcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKKyAgICAgICAgcmV0dXJuIHN1cGVyLnRvU3RyaW5nKCk7CisgICAgICB9CisgICAgfS50b1N0cmluZygpOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21ha2VDbGFzc1N0YXRpYy9EZWZhdWx0Q29uc3RydWN0b3JBbm9ueW1vdXNDbGFzc19hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21ha2VDbGFzc1N0YXRpYy9EZWZhdWx0Q29uc3RydWN0b3JBbm9ueW1vdXNDbGFzc19hZnRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhmMTVkZWIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbWFrZUNsYXNzU3RhdGljL0RlZmF1bHRDb25zdHJ1Y3RvckFub255bW91c0NsYXNzX2FmdGVyLmphdmEKQEAgLTAsMCArMSwxNiBAQAorcHVibGljIGNsYXNzIEEgeworICBzdGF0aWMgY2xhc3MgQiB7CisgICAgICBwdWJsaWMgQigpIHsKKyAgICAgIH0KKyAgfQorfQorCitjbGFzcyBDIHsKKyAgdm9pZCBmb28oKSB7CisgICAgbmV3IEEoKS5uZXcgQigpIHsKKyAgICAgIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7CisgICAgICAgIHJldHVybiBzdXBlci50b1N0cmluZygpOworICAgICAgfQorICAgIH0udG9TdHJpbmcoKTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tYWtlQ2xhc3NTdGF0aWMvRmllbGRJbml0aWFsaXplck1vdmVkVG9UaGVDb25zdHJ1Y3Rvci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21ha2VDbGFzc1N0YXRpYy9GaWVsZEluaXRpYWxpemVyTW92ZWRUb1RoZUNvbnN0cnVjdG9yLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDlhYzg1OQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tYWtlQ2xhc3NTdGF0aWMvRmllbGRJbml0aWFsaXplck1vdmVkVG9UaGVDb25zdHJ1Y3Rvci5qYXZhCkBAIC0wLDAgKzEsMTMgQEAKK3B1YmxpYyBjbGFzcyBZb1lvIHsKKyAgICBPYmplY3QgeTsKKyAgICBjbGFzcyA8Y2FyZXQ+WW9Zb1lvIHsKKyAgICAgICAgT2JqZWN0IHggPSB5OworICAgICAgICBPYmplY3RbXSB4eCA9IHt5fTsgCisgICAgICAgIHZvaWQgZm9vICgpeworICAgICAgICAgICAgWW9ZbyB5b1lveSA9IFlvWW8udGhpczsKKyAgICAgICAgICAgIE9iamVjdCB0ID0geTsKKyAgICAgICAgICAgIE9iamVjdCB0MSA9IHlvWW95Lnk7CisgICAgICAgIH0KKyAgICB9Cit9CisKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tYWtlQ2xhc3NTdGF0aWMvRmllbGRJbml0aWFsaXplck1vdmVkVG9UaGVDb25zdHJ1Y3Rvcl9hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21ha2VDbGFzc1N0YXRpYy9GaWVsZEluaXRpYWxpemVyTW92ZWRUb1RoZUNvbnN0cnVjdG9yX2FmdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTY0YTRlMAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tYWtlQ2xhc3NTdGF0aWMvRmllbGRJbml0aWFsaXplck1vdmVkVG9UaGVDb25zdHJ1Y3Rvcl9hZnRlci5qYXZhCkBAIC0wLDAgKzEsMjMgQEAKK3B1YmxpYyBjbGFzcyBZb1lvIHsKKyAgICBPYmplY3QgeTsKKyAgICBzdGF0aWMgY2xhc3MgWW9Zb1lvIHsKKyAgICAgICAgT2JqZWN0IHg7CisgICAgICAgIE9iamVjdFtdIHh4OworICAgICAgICBwcml2YXRlIFlvWW8gYW5PYmplY3Q7CisgICAgICAgIHByaXZhdGUgT2JqZWN0IHk7CisKKyAgICAgICAgcHVibGljIFlvWW9ZbyhZb1lvIGFuT2JqZWN0LCBPYmplY3QgeSkgeworICAgICAgICAgICAgdGhpcy5hbk9iamVjdCA9IGFuT2JqZWN0OworICAgICAgICAgICAgdGhpcy55ID0geTsKKyAgICAgICAgICAgIHRoaXMueCA9IHk7CisgICAgICAgICAgICB0aGlzLnh4ID0gbmV3IE9iamVjdFtde3l9OworICAgICAgICB9CisKKyAgICAgICAgdm9pZCBmb28gKCl7CisgICAgICAgICAgICBZb1lvIHlvWW95ID0gYW5PYmplY3Q7CisgICAgICAgICAgICBPYmplY3QgdCA9IHk7CisgICAgICAgICAgICBPYmplY3QgdDEgPSB5b1lveS55OworICAgICAgICB9CisgICAgfQorfQorCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbWFrZUNsYXNzU3RhdGljL0ZpZWxkSW5pdGlhbGl6ZXJTcGxpdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21ha2VDbGFzc1N0YXRpYy9GaWVsZEluaXRpYWxpemVyU3BsaXQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZTc3ZjFmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21ha2VDbGFzc1N0YXRpYy9GaWVsZEluaXRpYWxpemVyU3BsaXQuamF2YQpAQCAtMCwwICsxLDYgQEAKK2NsYXNzIE91dGVyIHsKKyAgY2xhc3MgSW48Y2FyZXQ+bmVyIHsKKyAgICBPYmplY3QgeCA9IE91dGVyLnRoaXMuZ2V0Q2xhc3MoKTsKKworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21ha2VDbGFzc1N0YXRpYy9GaWVsZEluaXRpYWxpemVyU3BsaXRfYWZ0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tYWtlQ2xhc3NTdGF0aWMvRmllbGRJbml0aWFsaXplclNwbGl0X2FmdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDA1MjU5ZQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tYWtlQ2xhc3NTdGF0aWMvRmllbGRJbml0aWFsaXplclNwbGl0X2FmdGVyLmphdmEKQEAgLTAsMCArMSwxMiBAQAorY2xhc3MgT3V0ZXIgeworICBzdGF0aWMgY2xhc3MgSW5uZXIgeworICAgIE9iamVjdCB4OworCisgICAgICBwcml2YXRlIE91dGVyIGFuT2JqZWN0OworCisgICAgICBwdWJsaWMgSW5uZXIoT3V0ZXIgYW5PYmplY3QpIHsKKyAgICAgICAgICB0aGlzLmFuT2JqZWN0ID0gYW5PYmplY3Q7CisgICAgICAgICAgdGhpcy54ID0gYW5PYmplY3QuZ2V0Q2xhc3MoKTsKKyAgICAgIH0KKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tYWtlQ2xhc3NTdGF0aWMvRmllbGRXaXRoTXlQcmVmaXguamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tYWtlQ2xhc3NTdGF0aWMvRmllbGRXaXRoTXlQcmVmaXguamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNmNkYzRmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21ha2VDbGFzc1N0YXRpYy9GaWVsZFdpdGhNeVByZWZpeC5qYXZhCkBAIC0wLDAgKzEsMTMgQEAKK2NsYXNzIFQgeworICAgIE9iamVjdCBteU9iamVjdDsKKworICAgIHZvaWQgdGVzdCgpIHsKKyAgICAgICAgbmV3IE15UnVubmFibGUoKS5ydW4oKTsKKyAgICB9CisKKyAgICBwcml2YXRlIGNsYXNzIDxjYXJldD5NeVJ1bm5hYmxlIGltcGxlbWVudHMgUnVubmFibGUgeworICAgICAgICBwdWJsaWMgdm9pZCBydW4oKSB7CisgICAgICAgICAgICBteU9iamVjdC50b1N0cmluZygpOworICAgICAgICB9CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21ha2VDbGFzc1N0YXRpYy9GaWVsZFdpdGhNeVByZWZpeF9hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21ha2VDbGFzc1N0YXRpYy9GaWVsZFdpdGhNeVByZWZpeF9hZnRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU0NTVmMWIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbWFrZUNsYXNzU3RhdGljL0ZpZWxkV2l0aE15UHJlZml4X2FmdGVyLmphdmEKQEAgLTAsMCArMSwxOSBAQAorY2xhc3MgVCB7CisgICAgT2JqZWN0IG15T2JqZWN0OworCisgICAgdm9pZCB0ZXN0KCkgeworICAgICAgICBuZXcgTXlSdW5uYWJsZShteU9iamVjdCkucnVuKCk7CisgICAgfQorCisgICAgcHJpdmF0ZSBzdGF0aWMgY2xhc3MgPGNhcmV0Pk15UnVubmFibGUgaW1wbGVtZW50cyBSdW5uYWJsZSB7CisgICAgICAgIHByaXZhdGUgT2JqZWN0IG15T2JqZWN0OworCisgICAgICAgIHB1YmxpYyBNeVJ1bm5hYmxlKE9iamVjdCBvYmplY3QpIHsKKyAgICAgICAgICAgIHRoaXMubXlPYmplY3QgPSBvYmplY3Q7CisgICAgICAgIH0KKworICAgICAgICBwdWJsaWMgdm9pZCBydW4oKSB7CisgICAgICAgICAgICBteU9iamVjdC50b1N0cmluZygpOworICAgICAgICB9CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21ha2VDbGFzc1N0YXRpYy9JREVBREVWMTE1OTUuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tYWtlQ2xhc3NTdGF0aWMvSURFQURFVjExNTk1LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjJkZDYzNQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tYWtlQ2xhc3NTdGF0aWMvSURFQURFVjExNTk1LmphdmEKQEAgLTAsMCArMSw3IEBACitjbGFzcyBUZXN0IHsKKyAgICBwcml2YXRlIGNsYXNzIDxjYXJldD5BIHsKKyAgICAgICAgcHJpdmF0ZSBCIGIgPSBuZXcgQigpOworICAgICAgICBwcml2YXRlIGNsYXNzIEIgeworICAgICAgICB9CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tYWtlQ2xhc3NTdGF0aWMvSURFQURFVjExNTk1X2FmdGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbWFrZUNsYXNzU3RhdGljL0lERUFERVYxMTU5NV9hZnRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNjZTU5NGEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbWFrZUNsYXNzU3RhdGljL0lERUFERVYxMTU5NV9hZnRlci5qYXZhCkBAIC0wLDAgKzEsMTEgQEAKK2NsYXNzIFRlc3QgeworICAgIHByaXZhdGUgc3RhdGljIGNsYXNzIEEgeworICAgICAgICBwcml2YXRlIEIgYiA9IG5ldyBCKCk7CisKKyAgICAgICAgcHVibGljIEEoKSB7CisgICAgICAgIH0KKworICAgICAgICBwcml2YXRlIGNsYXNzIEIgeworICAgICAgICB9CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tYWtlQ2xhc3NTdGF0aWMvSURFQURFVjEyNzYyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbWFrZUNsYXNzU3RhdGljL0lERUFERVYxMjc2Mi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFiMzhhM2YKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbWFrZUNsYXNzU3RhdGljL0lERUFERVYxMjc2Mi5qYXZhCkBAIC0wLDAgKzEsMTYgQEAKK2NsYXNzIFRlc3QxOCB7CisKKyAgICBTdHJpbmcgc3RyOworCisgICAgY2xhc3MgPGNhcmV0PkEgeworICAgICAgICBib29sZWFuIGZsYWc7CisKKyAgICAgICAgcHVibGljIEEoYm9vbGVhbiBmbGFnKSB7CisgICAgICAgICAgICB0aGlzLmZsYWcgPSBmbGFnOworICAgICAgICB9CisKKyAgICAgICAgdm9pZCBmb28oKSB7CisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oInN0ciA9ICIgKyBzdHIpOworICAgICAgICB9CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tYWtlQ2xhc3NTdGF0aWMvSURFQURFVjEyNzYyX2FmdGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbWFrZUNsYXNzU3RhdGljL0lERUFERVYxMjc2Ml9hZnRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI3NGM2ZTAKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbWFrZUNsYXNzU3RhdGljL0lERUFERVYxMjc2Ml9hZnRlci5qYXZhCkBAIC0wLDAgKzEsMTggQEAKK2NsYXNzIFRlc3QxOCB7CisKKyAgICBTdHJpbmcgc3RyOworCisgICAgc3RhdGljIGNsYXNzIEEgeworICAgICAgICBib29sZWFuIGZsYWc7CisgICAgICAgIHByaXZhdGUgVGVzdDE4IGFuT2JqZWN0OworCisgICAgICAgIHB1YmxpYyBBKFRlc3QxOCBhbk9iamVjdCwgYm9vbGVhbiBmbGFnKSB7CisgICAgICAgICAgICB0aGlzLmZsYWcgPSBmbGFnOworICAgICAgICAgICAgdGhpcy5hbk9iamVjdCA9IGFuT2JqZWN0OworICAgICAgICB9CisKKyAgICAgICAgdm9pZCBmb28oKSB7CisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oInN0ciA9ICIgKyBhbk9iamVjdC5zdHIpOworICAgICAgICB9CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tYWtlQ2xhc3NTdGF0aWMvSURFQURFVjMyNDcuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tYWtlQ2xhc3NTdGF0aWMvSURFQURFVjMyNDcuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NDY5YWQ3Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21ha2VDbGFzc1N0YXRpYy9JREVBREVWMzI0Ny5qYXZhCkBAIC0wLDAgKzEsMTUgQEAKK2NsYXNzIFRlc3Q4IHsKKworICAgIHZvaWQgYmFyKCkgeworICAgIH0KKworICAgIGNsYXNzIDxjYXJldD5CIHsKKworICAgICAgICBpbnQgYzsKKworICAgICAgICB2b2lkIGZvbygpIHsKKyAgICAgICAgICAgIGMgPSAxMDsKKyAgICAgICAgICAgIGJhcigpOworICAgICAgICB9CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21ha2VDbGFzc1N0YXRpYy9JREVBREVWMzI0N19hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21ha2VDbGFzc1N0YXRpYy9JREVBREVWMzI0N19hZnRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRmZWU0ODQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbWFrZUNsYXNzU3RhdGljL0lERUFERVYzMjQ3X2FmdGVyLmphdmEKQEAgLTAsMCArMSwyMCBAQAorY2xhc3MgVGVzdDggeworCisgICAgdm9pZCBiYXIoKSB7CisgICAgfQorCisgICAgc3RhdGljIGNsYXNzIEIgeworCisgICAgICAgIGludCBjOworICAgICAgICBwcml2YXRlIFRlc3Q4IGFuT2JqZWN0OworCisgICAgICAgIHB1YmxpYyBCKFRlc3Q4IGFuT2JqZWN0KSB7CisgICAgICAgICAgICB0aGlzLmFuT2JqZWN0ID0gYW5PYmplY3Q7CisgICAgICAgIH0KKworICAgICAgICB2b2lkIGZvbygpIHsKKyAgICAgICAgICAgIGMgPSAxMDsKKyAgICAgICAgICAgIGFuT2JqZWN0LmJhcigpOworICAgICAgICB9CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21ha2VDbGFzc1N0YXRpYy9OZXdFeHByZXNzaW9uUXVhbGlmaWVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbWFrZUNsYXNzU3RhdGljL05ld0V4cHJlc3Npb25RdWFsaWZpZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zN2JkZjY5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21ha2VDbGFzc1N0YXRpYy9OZXdFeHByZXNzaW9uUXVhbGlmaWVyLmphdmEKQEAgLTAsMCArMSwxNyBAQAorcHVibGljIGNsYXNzIEEgeworICBwcml2YXRlIGNsYXNzIDxjYXJldD5CIHsKKyAgICAgIHB1YmxpYyBCKCkgeworICAgICAgfQorICB9CisKKyAgc3RhdGljIHZvaWQgbShBIGEpIHsKKyAgICBCIGIgPSBuZXcgQSgpLm5ldyBCKCk7CisgICAgQiBiMSA9IGEubmV3IEIoKTsKKyAgICBCIGIyID0gbmV3IEIoKTsKKyAgICBCIGIzID0gZ2V0QSgpLm5ldyBCKCk7CisgIH0KKworICBzdGF0aWMgQSBnZXRBKCl7cmV0dXJuIG51bGw7fQorCisKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tYWtlQ2xhc3NTdGF0aWMvTmV3RXhwcmVzc2lvblF1YWxpZmllcl9hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21ha2VDbGFzc1N0YXRpYy9OZXdFeHByZXNzaW9uUXVhbGlmaWVyX2FmdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWY1NmM1NgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tYWtlQ2xhc3NTdGF0aWMvTmV3RXhwcmVzc2lvblF1YWxpZmllcl9hZnRlci5qYXZhCkBAIC0wLDAgKzEsMTcgQEAKK3B1YmxpYyBjbGFzcyBBIHsKKyAgcHJpdmF0ZSBzdGF0aWMgY2xhc3MgQiB7CisgICAgICBwdWJsaWMgQigpIHsKKyAgICAgIH0KKyAgfQorCisgIHN0YXRpYyB2b2lkIG0oQSBhKSB7CisgICAgQiBiID0gbmV3IEIoKTsKKyAgICBCIGIxID0gbmV3IEIoKTsKKyAgICBCIGIyID0gbmV3IEIoKTsKKyAgICBCIGIzID0gbmV3IEIoKTsKKyAgfQorCisgIHN0YXRpYyBBIGdldEEoKXtyZXR1cm4gbnVsbDt9CisKKworfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21ha2VDbGFzc1N0YXRpYy9Ob25EZWZhdWx0Q29uc3RydWN0b3JBbm9ueW1vdXNDbGFzcy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21ha2VDbGFzc1N0YXRpYy9Ob25EZWZhdWx0Q29uc3RydWN0b3JBbm9ueW1vdXNDbGFzcy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUxZWZhNjIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbWFrZUNsYXNzU3RhdGljL05vbkRlZmF1bHRDb25zdHJ1Y3RvckFub255bW91c0NsYXNzLmphdmEKQEAgLTAsMCArMSwxNiBAQAorcHVibGljIGNsYXNzIEEgeworICBjbGFzcyA8Y2FyZXQ+QiB7CisgICAgQigpIHsKKyAgICB9CisgIH0KK30KKworY2xhc3MgQyB7CisgIHZvaWQgZm9vKCkgeworICAgIG5ldyBBKCkubmV3IEIoKSB7CisgICAgICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgeworICAgICAgICByZXR1cm4gc3VwZXIudG9TdHJpbmcoKTsKKyAgICAgIH0KKyAgICB9LnRvU3RyaW5nKCk7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbWFrZUNsYXNzU3RhdGljL05vbkRlZmF1bHRDb25zdHJ1Y3RvckFub255bW91c0NsYXNzX2FmdGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbWFrZUNsYXNzU3RhdGljL05vbkRlZmF1bHRDb25zdHJ1Y3RvckFub255bW91c0NsYXNzX2FmdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjc5ZTc5ZQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tYWtlQ2xhc3NTdGF0aWMvTm9uRGVmYXVsdENvbnN0cnVjdG9yQW5vbnltb3VzQ2xhc3NfYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDE2IEBACitwdWJsaWMgY2xhc3MgQSB7CisgIHN0YXRpYyBjbGFzcyBCIHsKKyAgICBCKCkgeworICAgIH0KKyAgfQorfQorCitjbGFzcyBDIHsKKyAgdm9pZCBmb28oKSB7CisgICAgbmV3IEEuQigpIHsKKyAgICAgIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7CisgICAgICAgIHJldHVybiBzdXBlci50b1N0cmluZygpOworICAgICAgfQorICAgIH0udG9TdHJpbmcoKTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tYWtlQ2xhc3NTdGF0aWMvUXVhbGlmaWVkVGhpcy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21ha2VDbGFzc1N0YXRpYy9RdWFsaWZpZWRUaGlzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2YwZDAwOQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tYWtlQ2xhc3NTdGF0aWMvUXVhbGlmaWVkVGhpcy5qYXZhCkBAIC0wLDAgKzEsMTMgQEAKK3B1YmxpYyBjbGFzcyBZb1lvIHsKKyAgICBjbGFzcyA8Y2FyZXQ+WW9Zb1lvIHsKKyAgICAgICAgdm9pZCBmb28gKCl7CisgICAgICAgICAgICBZb1lvIHlvWW95ID0gWW9Zby50aGlzOworICAgICAgICB9CisgICAgfQorCisgICAgY2xhc3MgT3RoZXIgeworICAgICAgICB7CisgICAgICAgICAgICBuZXcgWW9Zb1lvKCk7CisgICAgICAgIH0KKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbWFrZUNsYXNzU3RhdGljL1F1YWxpZmllZFRoaXNfYWZ0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tYWtlQ2xhc3NTdGF0aWMvUXVhbGlmaWVkVGhpc19hZnRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhlNTk2YWIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbWFrZUNsYXNzU3RhdGljL1F1YWxpZmllZFRoaXNfYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDE5IEBACitwdWJsaWMgY2xhc3MgWW9ZbyB7CisgICAgc3RhdGljIGNsYXNzIFlvWW9ZbyB7CisgICAgICAgIHByaXZhdGUgWW9ZbyBhbk9iamVjdDsKKworICAgICAgICBwdWJsaWMgWW9Zb1lvKFlvWW8gYW5PYmplY3QpIHsKKyAgICAgICAgICAgIHRoaXMuYW5PYmplY3QgPSBhbk9iamVjdDsKKyAgICAgICAgfQorCisgICAgICAgIHZvaWQgZm9vICgpeworICAgICAgICAgICAgWW9ZbyB5b1lveSA9IGFuT2JqZWN0OworICAgICAgICB9CisgICAgfQorCisgICAgY2xhc3MgT3RoZXIgeworICAgICAgICB7CisgICAgICAgICAgICBuZXcgWW9Zb1lvKFlvWW8udGhpcyk7CisgICAgICAgIH0KKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbWFrZUNsYXNzU3RhdGljL1JlZ1JlZmVyZW5jZS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21ha2VDbGFzc1N0YXRpYy9SZWdSZWZlcmVuY2UuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZTI4Y2ZmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21ha2VDbGFzc1N0YXRpYy9SZWdSZWZlcmVuY2UuamF2YQpAQCAtMCwwICsxLDcgQEAKK3B1YmxpYyBjbGFzcyBBIHsKKyAgcHVibGljIHZvaWQgdGVzdChJbm5lciBpKSB7CisgIH0KKworICBwcml2YXRlIGNsYXNzIDxjYXJldD5Jbm5lciB7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbWFrZUNsYXNzU3RhdGljL1JlZ1JlZmVyZW5jZV9hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21ha2VDbGFzc1N0YXRpYy9SZWdSZWZlcmVuY2VfYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNzc1NGM0Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21ha2VDbGFzc1N0YXRpYy9SZWdSZWZlcmVuY2VfYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDkgQEAKK3B1YmxpYyBjbGFzcyBBIHsKKyAgcHVibGljIHZvaWQgdGVzdChJbm5lciBpKSB7CisgIH0KKworICBwcml2YXRlIHN0YXRpYyBjbGFzcyA8Y2FyZXQ+SW5uZXIgeworICAgICAgcHVibGljIElubmVyKCkgeworICAgICAgfQorICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21ha2VDbGFzc1N0YXRpYy9TaW1wbGUxLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbWFrZUNsYXNzU3RhdGljL1NpbXBsZTEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZjBhZjJmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21ha2VDbGFzc1N0YXRpYy9TaW1wbGUxLmphdmEKQEAgLTAsMCArMSwxNCBAQAorcHVibGljIGNsYXNzIFlvWW8geworICAgIGludCB5OworICAgIGNsYXNzIDxjYXJldD5Zb1lvWW8geworICAgICAgICB2b2lkIGZvbyAoKXsKKyAgICAgICAgICAgIFlvWW8geW9Zb3kgPSBZb1lvLnRoaXM7CisgICAgICAgICAgICBpbnQgdCA9IHk7CisgICAgICAgICAgICBpbnQgdDEgPSB5b1lveS55OworICAgICAgICAgICAgbmV3IE90aGVyKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBjbGFzcyBPdGhlciB7fQorfQorCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbWFrZUNsYXNzU3RhdGljL1NpbXBsZTFfYWZ0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tYWtlQ2xhc3NTdGF0aWMvU2ltcGxlMV9hZnRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZlYjM3NjkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbWFrZUNsYXNzU3RhdGljL1NpbXBsZTFfYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDIwIEBACitwdWJsaWMgY2xhc3MgWW9ZbyB7CisgICAgaW50IHk7CisgICAgc3RhdGljIGNsYXNzIFlvWW9ZbyB7CisgICAgICAgIHByaXZhdGUgWW9ZbyBhbk9iamVjdDsKKworICAgICAgICBwdWJsaWMgWW9Zb1lvKFlvWW8gYW5PYmplY3QpIHsKKyAgICAgICAgICAgIHRoaXMuYW5PYmplY3QgPSBhbk9iamVjdDsKKyAgICAgICAgfQorCisgICAgICAgIHZvaWQgZm9vICgpeworICAgICAgICAgICAgWW9ZbyB5b1lveSA9IGFuT2JqZWN0OworICAgICAgICAgICAgaW50IHQgPSBhbk9iamVjdC55OworICAgICAgICAgICAgaW50IHQxID0geW9Zb3kueTsKKyAgICAgICAgICAgIGFuT2JqZWN0Lm5ldyBPdGhlcigpOworICAgICAgICB9CisgICAgfQorCisgICAgY2xhc3MgT3RoZXIge30KK30KKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21ha2VDbGFzc1N0YXRpYy9TaW1wbGVGaWVsZHMuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tYWtlQ2xhc3NTdGF0aWMvU2ltcGxlRmllbGRzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDRkZmI3YQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tYWtlQ2xhc3NTdGF0aWMvU2ltcGxlRmllbGRzLmphdmEKQEAgLTAsMCArMSwxMSBAQAorcHVibGljIGNsYXNzIFlvWW8geworICAgIGludCB5OworICAgIGNsYXNzIDxjYXJldD5Zb1lvWW8geworICAgICAgICB2b2lkIGZvbyAoKXsKKyAgICAgICAgICAgIFlvWW8geW9Zb3kgPSBZb1lvLnRoaXM7CisgICAgICAgICAgICBpbnQgdCA9IHk7CisgICAgICAgICAgICBpbnQgdDEgPSB5b1lveS55OworICAgICAgICB9CisgICAgfQorfQorCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbWFrZUNsYXNzU3RhdGljL1NpbXBsZUZpZWxkc19hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21ha2VDbGFzc1N0YXRpYy9TaW1wbGVGaWVsZHNfYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNmViMmMxCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21ha2VDbGFzc1N0YXRpYy9TaW1wbGVGaWVsZHNfYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDE5IEBACitwdWJsaWMgY2xhc3MgWW9ZbyB7CisgICAgaW50IHk7CisgICAgc3RhdGljIGNsYXNzIFlvWW9ZbyB7CisgICAgICAgIHByaXZhdGUgWW9ZbyBhbk9iamVjdDsKKyAgICAgICAgcHJpdmF0ZSBpbnQgeTsKKworICAgICAgICBwdWJsaWMgWW9Zb1lvKFlvWW8gYW5PYmplY3QsIGludCB5KSB7CisgICAgICAgICAgICB0aGlzLmFuT2JqZWN0ID0gYW5PYmplY3Q7CisgICAgICAgICAgICB0aGlzLnkgPSB5OworICAgICAgICB9CisKKyAgICAgICAgdm9pZCBmb28gKCl7CisgICAgICAgICAgICBZb1lvIHlvWW95ID0gYW5PYmplY3Q7CisgICAgICAgICAgICBpbnQgdCA9IHk7CisgICAgICAgICAgICBpbnQgdDEgPSB5b1lveS55OworICAgICAgICB9CisgICAgfQorfQorCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbWFrZUNsYXNzU3RhdGljL1RoaXNTdXBlckV4cHJlc3Npb25zLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbWFrZUNsYXNzU3RhdGljL1RoaXNTdXBlckV4cHJlc3Npb25zLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGM1N2MxZAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tYWtlQ2xhc3NTdGF0aWMvVGhpc1N1cGVyRXhwcmVzc2lvbnMuamF2YQpAQCAtMCwwICsxLDIwIEBACitwdWJsaWMgY2xhc3MgbSB7CisgICAgdm9pZCBhYSgpe30KK30KKworY2xhc3MgT3V0ZXIgZXh0ZW5kcyBteworICAgIGNsYXNzIEk8Y2FyZXQ+bm5lciBleHRlbmRzIFN1cGVyIHsKKyAgICAgICAgdm9pZCBiYXIoKXsKKworICAgICAgICB9CisgICAgICAgIHZvaWQgZm9vKCkgeworICAgICAgICAgICAgc3VwZXIuZm9vKCk7CisgICAgICAgICAgICB0aGlzLmJhcigpOworICAgICAgICAgICAgT3V0ZXIuc3VwZXIuYWEoKTsKKyAgICAgICAgICAgIE91dGVyLnRoaXMuYWEoKTsKKyAgICAgICAgfQorICAgIH0KK30KK2NsYXNzIFN1cGVyIHsKKyAgICB2b2lkIGZvbygpIHt9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21ha2VDbGFzc1N0YXRpYy9UaGlzU3VwZXJFeHByZXNzaW9uc19hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21ha2VDbGFzc1N0YXRpYy9UaGlzU3VwZXJFeHByZXNzaW9uc19hZnRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU2MDQ2MzAKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbWFrZUNsYXNzU3RhdGljL1RoaXNTdXBlckV4cHJlc3Npb25zX2FmdGVyLmphdmEKQEAgLTAsMCArMSwyNiBAQAorcHVibGljIGNsYXNzIG0geworICAgIHZvaWQgYWEoKXt9Cit9CisKK2NsYXNzIE91dGVyIGV4dGVuZHMgbXsKKyAgICBzdGF0aWMgY2xhc3MgSW5uZXIgZXh0ZW5kcyBTdXBlciB7CisgICAgICAgIHByaXZhdGUgT3V0ZXIgYW5PYmplY3Q7CisKKyAgICAgICAgcHVibGljIElubmVyKE91dGVyIGFuT2JqZWN0KSB7CisgICAgICAgICAgICB0aGlzLmFuT2JqZWN0ID0gYW5PYmplY3Q7CisgICAgICAgIH0KKworICAgICAgICB2b2lkIGJhcigpeworCisgICAgICAgIH0KKyAgICAgICAgdm9pZCBmb28oKSB7CisgICAgICAgICAgICBzdXBlci5mb28oKTsKKyAgICAgICAgICAgIHRoaXMuYmFyKCk7CisgICAgICAgICAgICBhbk9iamVjdC5hYSgpOworICAgICAgICAgICAgYW5PYmplY3QuYWEoKTsKKyAgICAgICAgfQorICAgIH0KK30KK2NsYXNzIFN1cGVyIHsKKyAgICB2b2lkIGZvbygpIHt9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21ha2VNZXRob2RTdGF0aWMvYWZ0ZXIxLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbWFrZU1ldGhvZFN0YXRpYy9hZnRlcjEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YzE2OTg5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21ha2VNZXRob2RTdGF0aWMvYWZ0ZXIxLmphdmEKQEAgLTAsMCArMSw0IEBACitwdWJsaWMgY2xhc3MgRm9vIHsKKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgPGNhcmV0Pm1ldGhvZChGb28gYW5PYmplY3QpIHsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21ha2VNZXRob2RTdGF0aWMvYWZ0ZXIxMC1ucC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21ha2VNZXRob2RTdGF0aWMvYWZ0ZXIxMC1ucC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE2MzJhMzgKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbWFrZU1ldGhvZFN0YXRpYy9hZnRlcjEwLW5wLmphdmEKQEAgLTAsMCArMSwxMyBAQAorcHVibGljIGNsYXNzIEZvbyB7CisgICAgcHVibGljIGludCBteURhdGE7CisgICAgc3RhdGljIGludCBtZXRob2QoaW50IGkpIHsKKyAgICAgICAgcmV0dXJuIG15RGF0YSArIGk7CisgICAgfQorfQorCitjbGFzcyBCYXIgeworICAgIHB1YmxpYyBGb28gbXlGb287ICAgIAorICAgIGludCBhKGludCBiKSB7CisgICAgICAgIHJldHVybiBGb28ubWV0aG9kKGIgKiAyKTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21ha2VNZXRob2RTdGF0aWMvYWZ0ZXIxMC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21ha2VNZXRob2RTdGF0aWMvYWZ0ZXIxMC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMxZDUxY2MKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbWFrZU1ldGhvZFN0YXRpYy9hZnRlcjEwLmphdmEKQEAgLTAsMCArMSwxMyBAQAorcHVibGljIGNsYXNzIEZvbyB7CisgICAgcHVibGljIGludCBteURhdGE7CisgICAgc3RhdGljIGludCA8Y2FyZXQ+bWV0aG9kKEZvbyBhbk9iamVjdCwgaW50IGkpIHsKKyAgICAgICAgcmV0dXJuIGFuT2JqZWN0Lm15RGF0YSArIGk7CisgICAgfQorfQorCitjbGFzcyBCYXIgeworICAgIHB1YmxpYyBGb28gbXlGb287ICAgIAorICAgIGludCBhKGludCBiKSB7CisgICAgICAgIHJldHVybiBGb28ubWV0aG9kKG15Rm9vLCBiICogMik7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tYWtlTWV0aG9kU3RhdGljL2FmdGVyMTEuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tYWtlTWV0aG9kU3RhdGljL2FmdGVyMTEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYmExNzc5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21ha2VNZXRob2RTdGF0aWMvYWZ0ZXIxMS5qYXZhCkBAIC0wLDAgKzEsMTIgQEAKK3B1YmxpYyBjbGFzcyBGb28geworICAgIHB1YmxpYyBpbnQgbXlEYXRhOworICAgIHN0YXRpYyBpbnQgPGNhcmV0Pm1ldGhvZChGb28gYW5PYmplY3QsIGludCBpKSB7CisgICAgICAgIHJldHVybiBhbk9iamVjdC5teURhdGEgKyBpOworICAgIH0KK30KKworcHVibGljIGNsYXNzIEJhciBleHRlbmRzIEZvbyB7CisgICAgaW50IG1ldGhvZChpbnQgYikgeworICAgICAgICByZXR1cm4gc3VwZXIubWV0aG9kKHRoaXMsIGIqMik7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tYWtlTWV0aG9kU3RhdGljL2FmdGVyMTIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tYWtlTWV0aG9kU3RhdGljL2FmdGVyMTIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOGU3YTIzCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21ha2VNZXRob2RTdGF0aWMvYWZ0ZXIxMi5qYXZhCkBAIC0wLDAgKzEsNiBAQAorY2xhc3MgRm9vIGV4dGVuZHMgamF2YS51dGlsLlZlY3RvciB7CisgICAgc3RhdGljIGludCA8Y2FyZXQ+bWV0aG9kKEZvbyBhbk9iamVjdCkgeworICAgICAgICByZXR1cm4gYW5PYmplY3QudG9TdHJpbmcoKTsKKyAgICB9Cit9CisKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tYWtlTWV0aG9kU3RhdGljL2FmdGVyMTMuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tYWtlTWV0aG9kU3RhdGljL2FmdGVyMTMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZDFjNjViCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21ha2VNZXRob2RTdGF0aWMvYWZ0ZXIxMy5qYXZhCkBAIC0wLDAgKzEsNSBAQAorY2xhc3MgRm9vIHsKKyAgIHN0YXRpYyBGb28gYmFyKEZvbyBhbk9iamVjdCkgeworICAgICAgIHJldHVybiBhbk9iamVjdDsKKyAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbWFrZU1ldGhvZFN0YXRpYy9hZnRlcjE0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbWFrZU1ldGhvZFN0YXRpYy9hZnRlcjE0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDM5YmEzNgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tYWtlTWV0aG9kU3RhdGljL2FmdGVyMTQuamF2YQpAQCAtMCwwICsxLDExIEBACitwdWJsaWMgY2xhc3MgVGVzdCB7CisgICBzdGF0aWMgVGVzdCA8Y2FyZXQ+bWV0aG9kKGZpbmFsIFRlc3QgYW5PYmplY3QpIHsKKyAgICAgZmluYWwgVGVzdFtdIHJlc3VsdCA9IG5ldyBpbnRbMV07CisgICAgIG5ldyBSdW5uYWJsZSgpIHsKKyAgICAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKKyAgICAgICAgICAgIHJlc3VsdFswXSA9IGFuT2JqZWN0OworICAgICAgICAgfSAgICAgICAgIAorICAgICB9LnJ1bigpOworICAgICByZXR1cm4gcmVzdWx0WzBdOworICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tYWtlTWV0aG9kU3RhdGljL2FmdGVyMTUuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tYWtlTWV0aG9kU3RhdGljL2FmdGVyMTUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOTgzMTJkCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21ha2VNZXRob2RTdGF0aWMvYWZ0ZXIxNS5qYXZhCkBAIC0wLDAgKzEsOSBAQAorcHVibGljIGNsYXNzIEZvbyB7CisgIEZvbyBnZXRBbm90aGVyRm9vKCkge30KKyAgCisgIHN0YXRpYyB2b2lkIHRyeU1ha2VNZVN0YXRpYyhGb28gYW5PYmplY3QsIGJvb2xlYW4gYikgeworICAgIGlmIChiKSB7CisgICAgICAgIEZvby50cnlNYWtlTWVTdGF0aWMoYW5PYmplY3QuZ2V0QW5vdGhlckZvbygpLCAhYik7CisgICAgfQorICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbWFrZU1ldGhvZFN0YXRpYy9hZnRlcjE2LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbWFrZU1ldGhvZFN0YXRpYy9hZnRlcjE2LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTgwZTNlYgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tYWtlTWV0aG9kU3RhdGljL2FmdGVyMTYuamF2YQpAQCAtMCwwICsxLDExIEBACitwdWJsaWMgY2xhc3MgVGVzdCB7CisgICAgdm9pZCBhbm90aGVyTWV0aG9kKFN0cmluZyBzKTsKKyAgICBTdHJpbmcgZmllbGQ7CisgICAgLyoqCisgICAgICogQHBhcmFtIGFuT2JqZWN0CisgICAgICogQHBhcmFtIGZpZWxkCisgICAgICovCisgICAgc3RhdGljIHZvaWQgbWV0aG9kKFRlc3QgYW5PYmplY3QsIFN0cmluZyBmaWVsZCkgeworICAgICAgICBhbk9iamVjdC5hbm90aGVyTWV0aG9kKGZpZWxkKTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21ha2VNZXRob2RTdGF0aWMvYWZ0ZXIxNy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21ha2VNZXRob2RTdGF0aWMvYWZ0ZXIxNy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZmNDJjYzMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbWFrZU1ldGhvZFN0YXRpYy9hZnRlcjE3LmphdmEKQEAgLTAsMCArMSwxMCBAQAorcHVibGljIGNsYXNzIFRlc3QgeworICAgIFN0cmluZyBmaWVsZDsKKworICAgIC8qKgorICAgICAqIEBwYXJhbSBmaWVsZAorICAgICAqLworICAgIHN0YXRpYyBTdHJpbmcgbWV0aG9kKFN0cmluZyBmaWVsZCkgeworICAgICAgICByZXR1cm4gZmllbGQ7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tYWtlTWV0aG9kU3RhdGljL2FmdGVyMTguamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tYWtlTWV0aG9kU3RhdGljL2FmdGVyMTguamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jM2NlZmJiCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21ha2VNZXRob2RTdGF0aWMvYWZ0ZXIxOC5qYXZhCkBAIC0wLDAgKzEsNSBAQAorY2xhc3MgQzxUPiB7CisgICAgc3RhdGljIDxUPiB2b2lkIG1ldGhvZChDPFQ+IGFuT2JqZWN0KSAgeworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oYW5PYmplY3QpOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbWFrZU1ldGhvZFN0YXRpYy9hZnRlcjE5LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbWFrZU1ldGhvZFN0YXRpYy9hZnRlcjE5LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzNlYTE2OQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tYWtlTWV0aG9kU3RhdGljL2FmdGVyMTkuamF2YQpAQCAtMCwwICsxLDcgQEAKK2NsYXNzIEMgeworICAgIGludCBteUZpZWxkOworCisgICAgc3RhdGljIHZvaWQgbWV0aG9kKEMgYW5PYmplY3QsIGludCBpKSB7CisgICAgICAgIGFuT2JqZWN0Lm15RmllbGQgPSBpOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbWFrZU1ldGhvZFN0YXRpYy9hZnRlcjIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tYWtlTWV0aG9kU3RhdGljL2FmdGVyMi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQyZjI0NzkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbWFrZU1ldGhvZFN0YXRpYy9hZnRlcjIuamF2YQpAQCAtMCwwICsxLDYgQEAKK3B1YmxpYyBjbGFzcyBGb28geworICAgIHN0YXRpYyBpbnQgaTsKKyAgICBwdWJsaWMgc3RhdGljIGludCA8Y2FyZXQ+bWV0aG9kKEZvbyBhbk9iamVjdCkgeworCXJldHVybiBpOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbWFrZU1ldGhvZFN0YXRpYy9hZnRlcjIwLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbWFrZU1ldGhvZFN0YXRpYy9hZnRlcjIwLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY1MGE0NgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tYWtlTWV0aG9kU3RhdGljL2FmdGVyMjAuamF2YQpAQCAtMCwwICsxLDIwIEBACitpbXBvcnQgamF2YXguc3dpbmcuKjsKK2ltcG9ydCBqYXZhLmF3dC5ldmVudC5XaW5kb3dBZGFwdGVyOworaW1wb3J0IGphdmEuYXd0LmV2ZW50LldpbmRvd0V2ZW50OworCitmaW5hbCBjbGFzcyBCdWcKKyAgIGV4dGVuZHMgSkZyYW1lIHsKKyAgICBwdWJsaWMgQnVnKCkgeworICAgICAgICBmb28odGhpcyk7CisgICAgfQorCisgICAgcHVibGljIHN0YXRpYyB2b2lkIGZvbyhCdWcgYW5PYmplY3QpIHsKKyAgICAgICAgYW5PYmplY3QuYWRkV2luZG93TGlzdGVuZXIoYW5PYmplY3QubmV3IE15V2luZG93TGlzdGVuZXIoKSk7CisgICAgfQorCisgICAgcHJpdmF0ZSBjbGFzcyBNeVdpbmRvd0xpc3RlbmVyCisgICAgICAgZXh0ZW5kcyBXaW5kb3dBZGFwdGVyIHsKKyAgICAgICAgcHVibGljIHZvaWQgd2luZG93QWN0aXZhdGVkKFdpbmRvd0V2ZW50IGUpIHsKKyAgICAgICAgfQorICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbWFrZU1ldGhvZFN0YXRpYy9hZnRlcjIxLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbWFrZU1ldGhvZFN0YXRpYy9hZnRlcjIxLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjQyNTE4MAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tYWtlTWV0aG9kU3RhdGljL2FmdGVyMjEuamF2YQpAQCAtMCwwICsxLDUgQEAKK2NsYXNzIEJhcjEgeworICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBGb28oKSB7CisgICAgICAgIEZvbygpOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbWFrZU1ldGhvZFN0YXRpYy9hZnRlcjIyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbWFrZU1ldGhvZFN0YXRpYy9hZnRlcjIyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGYyY2U0MwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tYWtlTWV0aG9kU3RhdGljL2FmdGVyMjIuamF2YQpAQCAtMCwwICsxLDE1IEBACitjbGFzcyBUZXN0IHsKKworICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBmb28oVGVzdCBhbk9iamVjdCkgeworICAgICAgICBhbk9iamVjdC5iYXIoKTsKKyAgICB9CisKKyAgICB2b2lkIGJhcigpIHsKKyAgICB9CisKKyAgICBjbGFzcyBBIHsKKyAgICAgICAgdm9pZCBibGFoKCkgeworICAgICAgICAgICAgZm9vKFRlc3QudGhpcyk7CisgICAgICAgIH0KKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21ha2VNZXRob2RTdGF0aWMvYWZ0ZXIyMy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21ha2VNZXRob2RTdGF0aWMvYWZ0ZXIyMy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhiMjc2ZWIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbWFrZU1ldGhvZFN0YXRpYy9hZnRlcjIzLmphdmEKQEAgLTAsMCArMSw2IEBACitjbGFzcyBNZXRob2RPd25lcjY8VD4geworICAgIHB1YmxpYyBzdGF0aWMgPFQ+IFQgZm9vKFQgdCkKKyAgICB7CisgICAgICAgIHJldHVybiB0OworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbWFrZU1ldGhvZFN0YXRpYy9hZnRlcjMuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tYWtlTWV0aG9kU3RhdGljL2FmdGVyMy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY0OTdiMGQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbWFrZU1ldGhvZFN0YXRpYy9hZnRlcjMuamF2YQpAQCAtMCwwICsxLDYgQEAKK3B1YmxpYyBjbGFzcyBGb28geworICAgIGludCBpOworICAgIHB1YmxpYyBzdGF0aWMgaW50IG1ldGhvZChGb28gYW5PYmplY3QpIHsKKyAgICAgICAgcmV0dXJuIGFuT2JqZWN0Lmk7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tYWtlTWV0aG9kU3RhdGljL2FmdGVyNC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21ha2VNZXRob2RTdGF0aWMvYWZ0ZXI0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjU4NDU1YQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tYWtlTWV0aG9kU3RhdGljL2FmdGVyNC5qYXZhCkBAIC0wLDAgKzEsNiBAQAorcHVibGljIGNsYXNzIEZvbyB7CisgICAgcHVibGljIGludCBpOworICAgIHB1YmxpYyBzdGF0aWMgaW50IG1ldGhvZChGb28gYW5PYmplY3QpIHsKKyAgICAgICAgcmV0dXJuIGFuT2JqZWN0Lmk7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tYWtlTWV0aG9kU3RhdGljL2FmdGVyNS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21ha2VNZXRob2RTdGF0aWMvYWZ0ZXI1LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjI0ZmQ0MwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tYWtlTWV0aG9kU3RhdGljL2FmdGVyNS5qYXZhCkBAIC0wLDAgKzEsNiBAQAorcHVibGljIGNsYXNzIEZvbyB7CisgICAgcHVibGljIGludCBpOworICAgIHB1YmxpYyBzdGF0aWMgaW50IDxjYXJldD5tZXRob2QoRm9vIGFuT2JqZWN0KSB7CisgICAgICAgIHJldHVybiBhbk9iamVjdC5pOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbWFrZU1ldGhvZFN0YXRpYy9hZnRlcjYuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tYWtlTWV0aG9kU3RhdGljL2FmdGVyNi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFkNmRmZmEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbWFrZU1ldGhvZFN0YXRpYy9hZnRlcjYuamF2YQpAQCAtMCwwICsxLDYgQEAKK3B1YmxpYyBjbGFzcyBGb28gZXh0ZW5kcyBCYXIgeworICAgIHB1YmxpYyBpbnQgaTsKKyAgICBwdWJsaWMgc3RhdGljIGludCA8Y2FyZXQ+bWV0aG9kKEZvbyBhbk9iamVjdCkgeworICAgICAgICByZXR1cm4gYW5PYmplY3QuaTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21ha2VNZXRob2RTdGF0aWMvYWZ0ZXI3LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbWFrZU1ldGhvZFN0YXRpYy9hZnRlcjcuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZDM3MDM3Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21ha2VNZXRob2RTdGF0aWMvYWZ0ZXI3LmphdmEKQEAgLTAsMCArMSwxMCBAQAorcHVibGljIGNsYXNzIEZvbyB7CisgICAgICAgICAgICAKKyAgICBwdWJsaWMgaW50IGYoaW50IGkpIHsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgcHVibGljIHN0YXRpYyBpbnQgPGNhcmV0Pm1ldGhvZChGb28gYW5PYmplY3QsIGludCBpKSB7CisgICAgICAgIHJldHVybiBhbk9iamVjdC5mKGkpOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbWFrZU1ldGhvZFN0YXRpYy9hZnRlcjguamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tYWtlTWV0aG9kU3RhdGljL2FmdGVyOC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhkY2ZjNDMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbWFrZU1ldGhvZFN0YXRpYy9hZnRlcjguamF2YQpAQCAtMCwwICsxLDEyIEBACitwdWJsaWMgY2xhc3MgRm9vIHsKKyAgICBwdWJsaWMgaW50IG15RGF0YTsKKyAgICBzdGF0aWMgaW50IG1ldGhvZChmaW5hbCBGb28gYW5PYmplY3QsIGludCBpKSB7CisgICAgICAgIG5ldyBSdW5uYWJsZSAoKSB7CisgICAgICAgICAgICB2b2lkIGYoKSB7fTsKKyAgICAgICAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKKyAgICAgICAgICAgICAgICB0aGlzLmYoYW5PYmplY3QubXlEYXRhKTsgICAgCisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGFuT2JqZWN0Lm15RGF0YSArIGFuT2JqZWN0Lm15RGF0YTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21ha2VNZXRob2RTdGF0aWMvYWZ0ZXI5LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbWFrZU1ldGhvZFN0YXRpYy9hZnRlcjkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMmZkMjk0Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21ha2VNZXRob2RTdGF0aWMvYWZ0ZXI5LmphdmEKQEAgLTAsMCArMSwxMiBAQAorcHVibGljIGNsYXNzIEZvbyB7CisgICAgcHVibGljIGludCBteURhdGE7CisgICAgc3RhdGljIGludCA8Y2FyZXQ+bWV0aG9kKEZvbyBhbk9iamVjdCwgaW50IGkpIHsKKyAgICAgICAgcmV0dXJuIGFuT2JqZWN0Lm15RGF0YSArIGk7CisgICAgfQorfQorCitwdWJsaWMgY2xhc3MgQmFyIGV4dGVuZHMgRm9vIHsKKyAgICBpbnQgYShpbnQgYikgeworICAgICAgICByZXR1cm4gbWV0aG9kKHRoaXMsIGIqMik7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tYWtlTWV0aG9kU3RhdGljL2FmdGVyTWV0aG9kUmVmZXJlbmNlLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbWFrZU1ldGhvZFN0YXRpYy9hZnRlck1ldGhvZFJlZmVyZW5jZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAzMzE4NTkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbWFrZU1ldGhvZFN0YXRpYy9hZnRlck1ldGhvZFJlZmVyZW5jZS5qYXZhCkBAIC0wLDAgKzEsOSBAQAorY2xhc3MgVGVzdDQgeworICAgIHZvaWQgdGVzdCgpIHsKKyAgICAgICAgRm9vMjxUZXN0ND4gZiA9IFRlc3Q0Ojp5eXk7CisgICAgfQorICAgIHN0YXRpYyB2b2lkIHl5eShUZXN0NCBhbk9iamVjdCkge30KK30KK2ludGVyZmFjZSBGb28yPFQ+IHsKKyAgICB2b2lkIGJhcihUIGopOworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tYWtlTWV0aG9kU3RhdGljL2FmdGVyUHJlc2VydmVQYXJhbWV0ZXJzQWxpZ25tZW50LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbWFrZU1ldGhvZFN0YXRpYy9hZnRlclByZXNlcnZlUGFyYW1ldGVyc0FsaWdubWVudC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhkNzI3MmQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbWFrZU1ldGhvZFN0YXRpYy9hZnRlclByZXNlcnZlUGFyYW1ldGVyc0FsaWdubWVudC5qYXZhCkBAIC0wLDAgKzEsNSBAQAorcHVibGljIGNsYXNzIFRlc3QgeworICAgIHB1YmxpYyBzdGF0aWMgdm9pZCB0ZXN0MTIzKGludCBpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBqKSB7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tYWtlTWV0aG9kU3RhdGljL2FmdGVyUHJlc2VydmVUeXBlUGFyYW1zLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbWFrZU1ldGhvZFN0YXRpYy9hZnRlclByZXNlcnZlVHlwZVBhcmFtcy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY1ZjI3OWEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbWFrZU1ldGhvZFN0YXRpYy9hZnRlclByZXNlcnZlVHlwZVBhcmFtcy5qYXZhCkBAIC0wLDAgKzEsNSBAQAorY2xhc3MgQyB7CisgIHByaXZhdGUgc3RhdGljIDxUPiBMaXN0PFQ+IGdldFRvcExldmVsSXRlbXMoKSB7CisgICAgcmV0dXJuIG51bGw7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbWFrZU1ldGhvZFN0YXRpYy9iZWZvcmUxLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbWFrZU1ldGhvZFN0YXRpYy9iZWZvcmUxLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGQ5NTcxNQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tYWtlTWV0aG9kU3RhdGljL2JlZm9yZTEuamF2YQpAQCAtMCwwICsxLDQgQEAKK3B1YmxpYyBjbGFzcyBGb28geworICAgIHB1YmxpYyB2b2lkIDxjYXJldD5tZXRob2QoKSB7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tYWtlTWV0aG9kU3RhdGljL2JlZm9yZTEwLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbWFrZU1ldGhvZFN0YXRpYy9iZWZvcmUxMC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNlYmYyMzAKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbWFrZU1ldGhvZFN0YXRpYy9iZWZvcmUxMC5qYXZhCkBAIC0wLDAgKzEsMTMgQEAKK3B1YmxpYyBjbGFzcyBGb28geworICAgIHB1YmxpYyBpbnQgbXlEYXRhOworICAgIGludCA8Y2FyZXQ+bWV0aG9kKGludCBpKSB7CisgICAgICAgIHJldHVybiBteURhdGEgKyBpOworICAgIH0KK30KKworY2xhc3MgQmFyIHsKKyAgICBwdWJsaWMgRm9vIG15Rm9vOyAgICAKKyAgICBpbnQgYShpbnQgYikgeworICAgICAgICByZXR1cm4gbXlGb28ubWV0aG9kKGIgKiAyKTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21ha2VNZXRob2RTdGF0aWMvYmVmb3JlMTEuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tYWtlTWV0aG9kU3RhdGljL2JlZm9yZTExLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTBkMDc3ZAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tYWtlTWV0aG9kU3RhdGljL2JlZm9yZTExLmphdmEKQEAgLTAsMCArMSwxMiBAQAorcHVibGljIGNsYXNzIEZvbyB7CisgICAgcHVibGljIGludCBteURhdGE7CisgICAgaW50IDxjYXJldD5tZXRob2QoaW50IGkpIHsKKyAgICAgICAgcmV0dXJuIG15RGF0YSArIGk7CisgICAgfQorfQorCitwdWJsaWMgY2xhc3MgQmFyIGV4dGVuZHMgRm9vIHsKKyAgICBpbnQgbWV0aG9kKGludCBiKSB7CisgICAgICAgIHJldHVybiBzdXBlci5tZXRob2QoYioyKTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21ha2VNZXRob2RTdGF0aWMvYmVmb3JlMTIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tYWtlTWV0aG9kU3RhdGljL2JlZm9yZTEyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGFhYTU3ZAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tYWtlTWV0aG9kU3RhdGljL2JlZm9yZTEyLmphdmEKQEAgLTAsMCArMSw2IEBACitjbGFzcyBGb28gZXh0ZW5kcyBqYXZhLnV0aWwuVmVjdG9yIHsKKyAgICBpbnQgPGNhcmV0Pm1ldGhvZCgpIHsKKyAgICAgICAgcmV0dXJuIHN1cGVyLnRvU3RyaW5nKCk7CisgICAgfQorfQorCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbWFrZU1ldGhvZFN0YXRpYy9iZWZvcmUxMy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21ha2VNZXRob2RTdGF0aWMvYmVmb3JlMTMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZDI1M2M5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21ha2VNZXRob2RTdGF0aWMvYmVmb3JlMTMuamF2YQpAQCAtMCwwICsxLDUgQEAKK2NsYXNzIEZvbyB7CisgICBGb28gPGNhcmV0PmJhcigpIHsKKyAgICAgICByZXR1cm4gdGhpczsKKyAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbWFrZU1ldGhvZFN0YXRpYy9iZWZvcmUxNC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21ha2VNZXRob2RTdGF0aWMvYmVmb3JlMTQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40N2E2NzMzCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21ha2VNZXRob2RTdGF0aWMvYmVmb3JlMTQuamF2YQpAQCAtMCwwICsxLDExIEBACitwdWJsaWMgY2xhc3MgVGVzdCB7CisgICBUZXN0IDxjYXJldD5tZXRob2QoKSB7CisgICAgIGZpbmFsIFRlc3RbXSByZXN1bHQgPSBuZXcgaW50WzFdOworICAgICBuZXcgUnVubmFibGUoKSB7CisgICAgICAgICBwdWJsaWMgdm9pZCBydW4oKSB7CisgICAgICAgICAgICByZXN1bHRbMF0gPSBUZXN0LnRoaXM7CisgICAgICAgICB9ICAgICAgICAgCisgICAgIH0ucnVuKCk7CisgICAgIHJldHVybiByZXN1bHRbMF07CisgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21ha2VNZXRob2RTdGF0aWMvYmVmb3JlMTUuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tYWtlTWV0aG9kU3RhdGljL2JlZm9yZTE1LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGYzNWFlYgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tYWtlTWV0aG9kU3RhdGljL2JlZm9yZTE1LmphdmEKQEAgLTAsMCArMSw5IEBACitwdWJsaWMgY2xhc3MgRm9vIHsKKyAgRm9vIGdldEFub3RoZXJGb28oKSB7fQorICAKKyAgdm9pZCA8Y2FyZXQ+dHJ5TWFrZU1lU3RhdGljKGJvb2xlYW4gYikgeworICAgIGlmIChiKSB7CisgICAgICAgIGdldEFub3RoZXJGb28oKS50cnlNYWtlTWVTdGF0aWMoIWIpOworICAgIH0KKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21ha2VNZXRob2RTdGF0aWMvYmVmb3JlMTYuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tYWtlTWV0aG9kU3RhdGljL2JlZm9yZTE2LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTY5Njk0YQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tYWtlTWV0aG9kU3RhdGljL2JlZm9yZTE2LmphdmEKQEAgLTAsMCArMSw5IEBACitwdWJsaWMgY2xhc3MgVGVzdCB7CisgICAgdm9pZCBhbm90aGVyTWV0aG9kKFN0cmluZyBzKTsKKyAgICBTdHJpbmcgZmllbGQ7CisgICAgLyoqCisgICAgICovCisgICAgdm9pZCA8Y2FyZXQ+bWV0aG9kKCkgeworICAgICAgICBhbm90aGVyTWV0aG9kKGZpZWxkKTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21ha2VNZXRob2RTdGF0aWMvYmVmb3JlMTcuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tYWtlTWV0aG9kU3RhdGljL2JlZm9yZTE3LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2E1ZTBhYQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tYWtlTWV0aG9kU3RhdGljL2JlZm9yZTE3LmphdmEKQEAgLTAsMCArMSw5IEBACitwdWJsaWMgY2xhc3MgVGVzdCB7CisgICAgU3RyaW5nIGZpZWxkOworCisgICAgLyoqCisgICAgICovCisgICAgU3RyaW5nIDxjYXJldD5tZXRob2QoKSB7CisgICAgICAgIHJldHVybiBmaWVsZDsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21ha2VNZXRob2RTdGF0aWMvYmVmb3JlMTguamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tYWtlTWV0aG9kU3RhdGljL2JlZm9yZTE4LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmRlNDBmZAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tYWtlTWV0aG9kU3RhdGljL2JlZm9yZTE4LmphdmEKQEAgLTAsMCArMSw1IEBACitjbGFzcyBDPFQ+IHsKKyAgICB2b2lkIDxjYXJldD5tZXRob2QoKSAgeworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4odGhpcyk7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tYWtlTWV0aG9kU3RhdGljL2JlZm9yZTE5LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbWFrZU1ldGhvZFN0YXRpYy9iZWZvcmUxOS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUxMTBlMWEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbWFrZU1ldGhvZFN0YXRpYy9iZWZvcmUxOS5qYXZhCkBAIC0wLDAgKzEsNyBAQAorY2xhc3MgQyB7CisgICAgaW50IG15RmllbGQ7CisKKyAgICB2b2lkIDxjYXJldD5tZXRob2QoaW50IGkpIHsKKyAgICAgICAgbXlGaWVsZCA9IGk7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tYWtlTWV0aG9kU3RhdGljL2JlZm9yZTIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tYWtlTWV0aG9kU3RhdGljL2JlZm9yZTIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNDMyZjJkCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21ha2VNZXRob2RTdGF0aWMvYmVmb3JlMi5qYXZhCkBAIC0wLDAgKzEsNiBAQAorcHVibGljIGNsYXNzIEZvbyB7CisgICAgc3RhdGljIGludCBpOworICAgIHB1YmxpYyBpbnQgPGNhcmV0Pm1ldGhvZCgpIHsKKwlyZXR1cm4gaTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21ha2VNZXRob2RTdGF0aWMvYmVmb3JlMjAuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tYWtlTWV0aG9kU3RhdGljL2JlZm9yZTIwLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2UzMWM4MgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tYWtlTWV0aG9kU3RhdGljL2JlZm9yZTIwLmphdmEKQEAgLTAsMCArMSwyMCBAQAoraW1wb3J0IGphdmF4LnN3aW5nLio7CitpbXBvcnQgamF2YS5hd3QuZXZlbnQuV2luZG93QWRhcHRlcjsKK2ltcG9ydCBqYXZhLmF3dC5ldmVudC5XaW5kb3dFdmVudDsKKworZmluYWwgY2xhc3MgQnVnCisgICBleHRlbmRzIEpGcmFtZSB7CisgICAgcHVibGljIEJ1ZygpIHsKKyAgICAgICAgZm9vKCk7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgPGNhcmV0PmZvbygpIHsKKyAgICAgICAgYWRkV2luZG93TGlzdGVuZXIobmV3IE15V2luZG93TGlzdGVuZXIoKSk7CisgICAgfQorCisgICAgcHJpdmF0ZSBjbGFzcyBNeVdpbmRvd0xpc3RlbmVyCisgICAgICAgZXh0ZW5kcyBXaW5kb3dBZGFwdGVyIHsKKyAgICAgICAgcHVibGljIHZvaWQgd2luZG93QWN0aXZhdGVkKFdpbmRvd0V2ZW50IGUpIHsKKyAgICAgICAgfQorICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbWFrZU1ldGhvZFN0YXRpYy9iZWZvcmUyMS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21ha2VNZXRob2RTdGF0aWMvYmVmb3JlMjEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMjdmNzYzCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21ha2VNZXRob2RTdGF0aWMvYmVmb3JlMjEuamF2YQpAQCAtMCwwICsxLDUgQEAKK2NsYXNzIEJhcjEgeworICAgIHB1YmxpYyB2b2lkIDxjYXJldD5Gb28oKSB7CisgICAgICAgIHRoaXMuRm9vKCk7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tYWtlTWV0aG9kU3RhdGljL2JlZm9yZTIyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbWFrZU1ldGhvZFN0YXRpYy9iZWZvcmUyMi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg4NGJlY2EKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbWFrZU1ldGhvZFN0YXRpYy9iZWZvcmUyMi5qYXZhCkBAIC0wLDAgKzEsMTUgQEAKK2NsYXNzIFRlc3QgeworCisgICAgcHVibGljIHZvaWQgPGNhcmV0PmZvbygpIHsKKyAgICAgICAgYmFyKCk7CisgICAgfQorCisgICAgdm9pZCBiYXIoKSB7CisgICAgfQorCisgICAgY2xhc3MgQSB7CisgICAgICAgIHZvaWQgYmxhaCgpIHsKKyAgICAgICAgICAgIGZvbygpOworICAgICAgICB9CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tYWtlTWV0aG9kU3RhdGljL2JlZm9yZTIzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbWFrZU1ldGhvZFN0YXRpYy9iZWZvcmUyMy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMwNmJmM2EKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbWFrZU1ldGhvZFN0YXRpYy9iZWZvcmUyMy5qYXZhCkBAIC0wLDAgKzEsNiBAQAorY2xhc3MgTWV0aG9kT3duZXI2PFQ+IHsKKyAgICBwdWJsaWMgVCA8Y2FyZXQ+Zm9vKFQgdCkKKyAgICB7CisgICAgICAgIHJldHVybiB0OworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbWFrZU1ldGhvZFN0YXRpYy9iZWZvcmUzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbWFrZU1ldGhvZFN0YXRpYy9iZWZvcmUzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDIxYThlNQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tYWtlTWV0aG9kU3RhdGljL2JlZm9yZTMuamF2YQpAQCAtMCwwICsxLDYgQEAKK3B1YmxpYyBjbGFzcyBGb28geworICAgIGludCBpOworICAgIHB1YmxpYyBpbnQgPGNhcmV0Pm1ldGhvZCgpIHsKKyAgICAgICAgcmV0dXJuIGk7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tYWtlTWV0aG9kU3RhdGljL2JlZm9yZTQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tYWtlTWV0aG9kU3RhdGljL2JlZm9yZTQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ODE1M2YxCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21ha2VNZXRob2RTdGF0aWMvYmVmb3JlNC5qYXZhCkBAIC0wLDAgKzEsNiBAQAorcHVibGljIGNsYXNzIEZvbyB7CisgICAgcHVibGljIGludCBpOworICAgIHB1YmxpYyBpbnQgPGNhcmV0Pm1ldGhvZCgpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuaTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21ha2VNZXRob2RTdGF0aWMvYmVmb3JlNS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21ha2VNZXRob2RTdGF0aWMvYmVmb3JlNS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFhN2VkNDUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbWFrZU1ldGhvZFN0YXRpYy9iZWZvcmU1LmphdmEKQEAgLTAsMCArMSw2IEBACitwdWJsaWMgY2xhc3MgRm9vIHsKKyAgICBwdWJsaWMgaW50IGk7CisgICAgcHVibGljIGludCA8Y2FyZXQ+bWV0aG9kKCkgeworICAgICAgICByZXR1cm4gc3VwZXIuaTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21ha2VNZXRob2RTdGF0aWMvYmVmb3JlNi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21ha2VNZXRob2RTdGF0aWMvYmVmb3JlNi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI0MGZhMzEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbWFrZU1ldGhvZFN0YXRpYy9iZWZvcmU2LmphdmEKQEAgLTAsMCArMSw2IEBACitwdWJsaWMgY2xhc3MgRm9vIGV4dGVuZHMgQmFyIHsKKyAgICBwdWJsaWMgaW50IGk7CisgICAgcHVibGljIGludCA8Y2FyZXQ+bWV0aG9kKCkgeworICAgICAgICByZXR1cm4gc3VwZXIuaTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21ha2VNZXRob2RTdGF0aWMvYmVmb3JlNy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21ha2VNZXRob2RTdGF0aWMvYmVmb3JlNy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMzM2MwY2FjCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21ha2VNZXRob2RTdGF0aWMvYmVmb3JlNy5qYXZhCkBAIC0wLDAgKzEsMTAgQEAKK3B1YmxpYyBjbGFzcyBGb28geworICAgICAgICAgICAgCisgICAgcHVibGljIGludCBmKGludCBpKSB7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIHB1YmxpYyBpbnQgPGNhcmV0Pm1ldGhvZChpbnQgaSkgeworICAgICAgICByZXR1cm4gZihpKTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21ha2VNZXRob2RTdGF0aWMvYmVmb3JlOC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21ha2VNZXRob2RTdGF0aWMvYmVmb3JlOC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFhOWJmNDcKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbWFrZU1ldGhvZFN0YXRpYy9iZWZvcmU4LmphdmEKQEAgLTAsMCArMSwxMiBAQAorcHVibGljIGNsYXNzIEZvbyB7CisgICAgcHVibGljIGludCBteURhdGE7CisgICAgaW50IDxjYXJldD5tZXRob2QoaW50IGkpIHsKKyAgICAgICAgbmV3IFJ1bm5hYmxlICgpIHsKKyAgICAgICAgICAgIHZvaWQgZigpIHt9OworICAgICAgICAgICAgcHVibGljIHZvaWQgcnVuKCkgeworICAgICAgICAgICAgICAgIHRoaXMuZihteURhdGEpOyAgICAKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdGhpcy5teURhdGEgKyBteURhdGE7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tYWtlTWV0aG9kU3RhdGljL2JlZm9yZTkuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tYWtlTWV0aG9kU3RhdGljL2JlZm9yZTkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZDRhMWU1Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21ha2VNZXRob2RTdGF0aWMvYmVmb3JlOS5qYXZhCkBAIC0wLDAgKzEsMTIgQEAKK3B1YmxpYyBjbGFzcyBGb28geworICAgIHB1YmxpYyBpbnQgbXlEYXRhOworICAgIGludCA8Y2FyZXQ+bWV0aG9kKGludCBpKSB7CisgICAgICAgIHJldHVybiBteURhdGEgKyBpOworICAgIH0KK30KKworcHVibGljIGNsYXNzIEJhciBleHRlbmRzIEZvbyB7CisgICAgaW50IGEoaW50IGIpIHsKKyAgICAgICAgcmV0dXJuIG1ldGhvZChiKjIpOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbWFrZU1ldGhvZFN0YXRpYy9iZWZvcmVJbm5lclN0YXRpY0NsYXNzVXNlZC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21ha2VNZXRob2RTdGF0aWMvYmVmb3JlSW5uZXJTdGF0aWNDbGFzc1VzZWQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MzZlYzM2Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21ha2VNZXRob2RTdGF0aWMvYmVmb3JlSW5uZXJTdGF0aWNDbGFzc1VzZWQuamF2YQpAQCAtMCwwICsxLDcgQEAKK2NsYXNzIEMgeworICBwcml2YXRlIHZvaWQgZjxjYXJldD5vbygpIHsKKyAgICBCYXIgYmFyID0gbmV3IEJhcigpOworICB9CisgIAorICBzdGF0aWMgY2xhc3MgQmFyIHt9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21ha2VNZXRob2RTdGF0aWMvYmVmb3JlTWV0aG9kUmVmZXJlbmNlLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbWFrZU1ldGhvZFN0YXRpYy9iZWZvcmVNZXRob2RSZWZlcmVuY2UuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNWYzMTcyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21ha2VNZXRob2RTdGF0aWMvYmVmb3JlTWV0aG9kUmVmZXJlbmNlLmphdmEKQEAgLTAsMCArMSw5IEBACitjbGFzcyBUZXN0NCB7CisgICAgdm9pZCB0ZXN0KCkgeworICAgICAgICBGb28yPFRlc3Q0PiBmID0gVGVzdDQ6Onl5eTsKKyAgICB9CisgICAgdm9pZCB5eTxjYXJldD55KCkge30KK30KK2ludGVyZmFjZSBGb28yPFQ+IHsKKyAgICB2b2lkIGJhcihUIGopOworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tYWtlTWV0aG9kU3RhdGljL2JlZm9yZVByZXNlcnZlUGFyYW1ldGVyc0FsaWdubWVudC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21ha2VNZXRob2RTdGF0aWMvYmVmb3JlUHJlc2VydmVQYXJhbWV0ZXJzQWxpZ25tZW50LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmE0ZTRmYgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tYWtlTWV0aG9kU3RhdGljL2JlZm9yZVByZXNlcnZlUGFyYW1ldGVyc0FsaWdubWVudC5qYXZhCkBAIC0wLDAgKzEsNSBAQAorcHVibGljIGNsYXNzIFRlc3QgeworICAgIHB1YmxpYyB2b2lkIDxjYXJldD50ZXN0MTIzKGludCBpLAorICAgICAgICAgICAgICAgICAgICAgICAgaW50IGopIHsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21ha2VNZXRob2RTdGF0aWMvYmVmb3JlUHJlc2VydmVUeXBlUGFyYW1zLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbWFrZU1ldGhvZFN0YXRpYy9iZWZvcmVQcmVzZXJ2ZVR5cGVQYXJhbXMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hODRjNzZlCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21ha2VNZXRob2RTdGF0aWMvYmVmb3JlUHJlc2VydmVUeXBlUGFyYW1zLmphdmEKQEAgLTAsMCArMSw1IEBACitjbGFzcyBDIHsKKyAgcHJpdmF0ZSA8VD4gTGlzdDxUPiBnZTxjYXJldD50VG9wTGV2ZWxJdGVtcygpIHsKKyAgICByZXR1cm4gbnVsbDsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tZXRob2REdXBsaWNhdGVzL0FkZFN0YXRpY1Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tZXRob2REdXBsaWNhdGVzL0FkZFN0YXRpY1Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYzkyOTQwCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21ldGhvZER1cGxpY2F0ZXMvQWRkU3RhdGljVGVzdC5qYXZhCkBAIC0wLDAgKzEsOSBAQAorY2xhc3MgQWRkU3RhdGljVGVzdCB7CisgIHN0YXRpYyBtYWluKCl7CisgICBTeXN0ZW0ub3V0LnByaW50bG4oIiIpOworICB9CisKKyAgdm9pZCA8Y2FyZXQ+Zm9vKCl7CisgICBTeXN0ZW0ub3V0LnByaW50bG4oIiIpOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21ldGhvZER1cGxpY2F0ZXMvQWRkU3RhdGljVGVzdC5qYXZhLmFmdGVyIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21ldGhvZER1cGxpY2F0ZXMvQWRkU3RhdGljVGVzdC5qYXZhLmFmdGVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRkMWQ2ZDAKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbWV0aG9kRHVwbGljYXRlcy9BZGRTdGF0aWNUZXN0LmphdmEuYWZ0ZXIKQEAgLTAsMCArMSw5IEBACitjbGFzcyBBZGRTdGF0aWNUZXN0IHsKKyAgc3RhdGljIG1haW4oKXsKKyAgICAgIGZvbygpOworICB9CisKKyAgc3RhdGljIHZvaWQgZm9vKCl7CisgICBTeXN0ZW0ub3V0LnByaW50bG4oIiIpOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21ldGhvZER1cGxpY2F0ZXMvQW5vbnltb3VzVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21ldGhvZER1cGxpY2F0ZXMvQW5vbnltb3VzVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA1NTQ0YmQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbWV0aG9kRHVwbGljYXRlcy9Bbm9ueW1vdXNUZXN0LmphdmEKQEAgLTAsMCArMSwyMSBAQAorY2xhc3MgQW5vbnltb3VzVGVzdCB7CisgIGludGVyZmFjZSBUaGluZyB7CisgICAgYm9vbGVhbiB0aGluZygpOworICB9CisKKyAgdm9pZCBkdXBlSG9sZGVyKCkgeworICAgIFRoaW5nIHRoaW5nID0gbmV3IFRoaW5nKCkgeworICAgICAgcHVibGljIGJvb2xlYW4gdGhpbmcoKSB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgIH0KKyAgICB9OworICB9CisKKyAgVGhpbmcgPGNhcmV0PmR1cGxpY2F0b3IoZmluYWwgYm9vbGVhbiB0aGluZ1JldHVybikgeworICAgIHJldHVybiBuZXcgVGhpbmcoKSB7CisgICAgICBwdWJsaWMgYm9vbGVhbiB0aGluZygpIHsKKyAgICAgICAgcmV0dXJuIHRoaW5nUmV0dXJuOworICAgICAgfQorICAgIH07CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbWV0aG9kRHVwbGljYXRlcy9Bbm9ueW1vdXNUZXN0LmphdmEuYWZ0ZXIgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbWV0aG9kRHVwbGljYXRlcy9Bbm9ueW1vdXNUZXN0LmphdmEuYWZ0ZXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzAxMGZhNAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tZXRob2REdXBsaWNhdGVzL0Fub255bW91c1Rlc3QuamF2YS5hZnRlcgpAQCAtMCwwICsxLDE3IEBACitjbGFzcyBBbm9ueW1vdXNUZXN0IHsKKyAgaW50ZXJmYWNlIFRoaW5nIHsKKyAgICBib29sZWFuIHRoaW5nKCk7CisgIH0KKworICB2b2lkIGR1cGVIb2xkZXIoKSB7CisgICAgVGhpbmcgdGhpbmcgPSBkdXBsaWNhdG9yKGZhbHNlKTsKKyAgfQorCisgIFRoaW5nIGR1cGxpY2F0b3IoZmluYWwgYm9vbGVhbiB0aGluZ1JldHVybikgeworICAgIHJldHVybiBuZXcgVGhpbmcoKSB7CisgICAgICBwdWJsaWMgYm9vbGVhbiB0aGluZygpIHsKKyAgICAgICAgcmV0dXJuIHRoaW5nUmV0dXJuOworICAgICAgfQorICAgIH07CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbWV0aG9kRHVwbGljYXRlcy9Bbm9ueW1vdXNUZXN0MS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21ldGhvZER1cGxpY2F0ZXMvQW5vbnltb3VzVGVzdDEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NWQ2Mjk5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21ldGhvZER1cGxpY2F0ZXMvQW5vbnltb3VzVGVzdDEuamF2YQpAQCAtMCwwICsxLDIxIEBACitjbGFzcyBBbm9ueW1vdXNUZXN0MSB7CisgIGludGVyZmFjZSBUaGluZyB7CisgICAgYm9vbGVhbiB0aGluZygpOworICB9CisKKyAgdm9pZCBkdXBlSG9sZGVyKCkgeworICAgIGlmIChuZXcgVGhpbmcoKSB7CisgICAgICBwdWJsaWMgYm9vbGVhbiB0aGluZygpIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgfQorICAgIH0udGhpbmcoKSk7CisgIH0KKworICB2b2lkIDxjYXJldD5kdXBsaWNhdG9yKGZpbmFsIGJvb2xlYW4gdGhpbmdSZXR1cm4pIHsKKyAgICBpZiAobmV3IFRoaW5nKCkgeworICAgICAgcHVibGljIGJvb2xlYW4gdGhpbmcoKSB7CisgICAgICAgIHJldHVybiB0aGluZ1JldHVybjsKKyAgICAgIH0KKyAgICB9LnRoaW5nKCkpOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21ldGhvZER1cGxpY2F0ZXMvQW5vbnltb3VzVGVzdDEuamF2YS5hZnRlciBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tZXRob2REdXBsaWNhdGVzL0Fub255bW91c1Rlc3QxLmphdmEuYWZ0ZXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGE5Yjk0MwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tZXRob2REdXBsaWNhdGVzL0Fub255bW91c1Rlc3QxLmphdmEuYWZ0ZXIKQEAgLTAsMCArMSwxNyBAQAorY2xhc3MgQW5vbnltb3VzVGVzdDEgeworICBpbnRlcmZhY2UgVGhpbmcgeworICAgIGJvb2xlYW4gdGhpbmcoKTsKKyAgfQorCisgIHZvaWQgZHVwZUhvbGRlcigpIHsKKyAgICAgIGR1cGxpY2F0b3IoZmFsc2UpOworICB9CisKKyAgdm9pZCBkdXBsaWNhdG9yKGZpbmFsIGJvb2xlYW4gdGhpbmdSZXR1cm4pIHsKKyAgICBpZiAobmV3IFRoaW5nKCkgeworICAgICAgcHVibGljIGJvb2xlYW4gdGhpbmcoKSB7CisgICAgICAgIHJldHVybiB0aGluZ1JldHVybjsKKyAgICAgIH0KKyAgICB9LnRoaW5nKCkpOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21ldGhvZER1cGxpY2F0ZXMvQW5vbnltb3VzVGVzdDIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tZXRob2REdXBsaWNhdGVzL0Fub255bW91c1Rlc3QyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzY4YzE2MwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tZXRob2REdXBsaWNhdGVzL0Fub255bW91c1Rlc3QyLmphdmEKQEAgLTAsMCArMSwyMCBAQAorY2xhc3MgQSB7CisKKyAgICBjbGFzcyBJIHsKKyAgICB9CisKKyAgICBjbGFzcyBJMSB7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgZm9vKCkgeworICAgICAgICBPYmplY3QgaW5uZXJPbmUgPSBuZXcgSTEoKSB7CisgICAgICAgIH07CisgICAgICAgIGlubmVyT25lLnRvU3RyaW5nKCk7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgPGNhcmV0PmJhcigpIHsKKyAgICAgICAgT2JqZWN0IGlubmVyVHdvID0gbmV3IEkoKSB7CisgICAgICAgIH07CisgICAgICAgIGlubmVyVHdvLnRvU3RyaW5nKCk7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tZXRob2REdXBsaWNhdGVzL0NoYW5naW5nUmV0dXJuVHlwZS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21ldGhvZER1cGxpY2F0ZXMvQ2hhbmdpbmdSZXR1cm5UeXBlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGJiY2I4YwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tZXRob2REdXBsaWNhdGVzL0NoYW5naW5nUmV0dXJuVHlwZS5qYXZhCkBAIC0wLDAgKzEsMTkgQEAKK3B1YmxpYyBjbGFzcyBBIHsKKyAgICBwcml2YXRlIEIgbXlGaWVsZDsKKworICAgIHB1YmxpYyB2b2lkIG1ldGhvZCgpIHsKKyAgICAgICAgU3RyaW5nIGEgPSBteUZpZWxkLmJiYi54eHgoKTsKKyAgICB9CisKKyAgICBwdWJsaWMgQiBnZXQ8Y2FyZXQ+RmllbGQoKSB7CisgICAgICAgIHJldHVybiBteUZpZWxkOworICAgIH0KKworICAgIHByaXZhdGUgc3RhdGljIGNsYXNzIEIgeworICAgICAgICBwcml2YXRlIEMgYmJiOworICAgIH0KKworICAgIHByaXZhdGUgc3RhdGljIGNsYXNzIEMgeworICAgICAgICBTdHJpbmcgeHh4KCkge3JldHVybiBudWxsO30KKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbWV0aG9kRHVwbGljYXRlcy9DaGFuZ2luZ1JldHVyblR5cGUuamF2YS5hZnRlciBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tZXRob2REdXBsaWNhdGVzL0NoYW5naW5nUmV0dXJuVHlwZS5qYXZhLmFmdGVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFmZmE0NDEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbWV0aG9kRHVwbGljYXRlcy9DaGFuZ2luZ1JldHVyblR5cGUuamF2YS5hZnRlcgpAQCAtMCwwICsxLDE5IEBACitwdWJsaWMgY2xhc3MgQSB7CisgICAgcHJpdmF0ZSBCIG15RmllbGQ7CisKKyAgICBwdWJsaWMgdm9pZCBtZXRob2QoKSB7CisgICAgICAgIFN0cmluZyBhID0gZ2V0RmllbGQoKS5iYmIueHh4KCk7CisgICAgfQorCisgICAgcHVibGljIEIgZ2V0RmllbGQoKSB7CisgICAgICAgIHJldHVybiBteUZpZWxkOworICAgIH0KKworICAgIHByaXZhdGUgc3RhdGljIGNsYXNzIEIgeworICAgICAgICBwcml2YXRlIEMgYmJiOworICAgIH0KKworICAgIHByaXZhdGUgc3RhdGljIGNsYXNzIEMgeworICAgICAgICBTdHJpbmcgeHh4KCkge3JldHVybiBudWxsO30KKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbWV0aG9kRHVwbGljYXRlcy9EZWNsYXJhdGlvblVzYWdlLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbWV0aG9kRHVwbGljYXRlcy9EZWNsYXJhdGlvblVzYWdlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTcyYTI4NwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tZXRob2REdXBsaWNhdGVzL0RlY2xhcmF0aW9uVXNhZ2UuamF2YQpAQCAtMCwwICsxLDExIEBACitwdWJsaWMgY2xhc3MgRGVjbGFyYXRpb25Vc2FnZSB7CisJcHJpdmF0ZSBpbnQgbXlGaWVsZDsKKwlwdWJsaWMgdm9pZCBtZXQ8Y2FyZXQ+aG9kKGludCBwKSB7CisJCWludCB2ID0gMDsKKwkJbXlGaWVsZCArPSBwOworCX0KKwlwdWJsaWMgdm9pZCBjb250ZXh0KCkgeworCQlpbnQgdiA9IDA7CisJCW15RmllbGQgKz0gdjsKKwl9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21ldGhvZER1cGxpY2F0ZXMvR2VubWV0aEV4dGVuZHMuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tZXRob2REdXBsaWNhdGVzL0dlbm1ldGhFeHRlbmRzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzJhYTM1YwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tZXRob2REdXBsaWNhdGVzL0dlbm1ldGhFeHRlbmRzLmphdmEKQEAgLTAsMCArMSwyMCBAQAoraW1wb3J0IGphdmEudXRpbC5BYnN0cmFjdExpc3Q7CitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworcHVibGljIGNsYXNzIEdlbm1ldGggeworCXB1YmxpYyB2b2lkIGNvbnRleHQoKSB7CisJCUludGVnZXIgdjEgPSAwOworCQlpbnQgdjFhID0gdjEuaGFzaENvZGUoKTsKKwkJQWJzdHJhY3RMaXN0PFN0cmluZz4gdjIgPSBuZXcgQXJyYXlMaXN0PFN0cmluZz4oMCk7CisJCWludCB2MmEgPSB2Mi5oYXNoQ29kZSgpOworCQlBYnN0cmFjdExpc3Q8RG91YmxlPiB2MyA9IG5ldyBBcnJheUxpc3Q8RG91YmxlPigwKTsKKwkJaW50IHYzYSA9IHYzLmhhc2hDb2RlKCk7CisJCUFic3RyYWN0TGlzdDxJbnRlZ2VyPiB2NCA9IG5ldyBBcnJheUxpc3Q8SW50ZWdlcj4oMCk7CisJCWludCB2NGEgPSB2NC5oYXNoQ29kZSgpOworCX0KKworCXB1YmxpYyA8VCBleHRlbmRzIExpc3Q+IGludCA8Y2FyZXQ+bWV0aG9kKFQgdCkgeworCQlyZXR1cm4gdC5oYXNoQ29kZSgpOworCX0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tZXRob2REdXBsaWNhdGVzL0dlbm1ldGhFeHRlbmRzLmphdmEuYWZ0ZXIgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbWV0aG9kRHVwbGljYXRlcy9HZW5tZXRoRXh0ZW5kcy5qYXZhLmFmdGVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI1ZTY2NGQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbWV0aG9kRHVwbGljYXRlcy9HZW5tZXRoRXh0ZW5kcy5qYXZhLmFmdGVyCkBAIC0wLDAgKzEsMjAgQEAKK2ltcG9ydCBqYXZhLnV0aWwuQWJzdHJhY3RMaXN0OworaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK3B1YmxpYyBjbGFzcyBHZW5tZXRoIHsKKwlwdWJsaWMgdm9pZCBjb250ZXh0KCkgeworCQlJbnRlZ2VyIHYxID0gMDsKKwkJaW50IHYxYSA9IHYxLmhhc2hDb2RlKCk7CisJCUFic3RyYWN0TGlzdDxTdHJpbmc+IHYyID0gbmV3IEFycmF5TGlzdDxTdHJpbmc+KDApOworCQlpbnQgdjJhID0gbWV0aG9kKHYyKTsKKwkJQWJzdHJhY3RMaXN0PERvdWJsZT4gdjMgPSBuZXcgQXJyYXlMaXN0PERvdWJsZT4oMCk7CisJCWludCB2M2EgPSBtZXRob2QodjMpOworCQlBYnN0cmFjdExpc3Q8SW50ZWdlcj4gdjQgPSBuZXcgQXJyYXlMaXN0PEludGVnZXI+KDApOworCQlpbnQgdjRhID0gbWV0aG9kKHY0KTsKKwl9CisKKwlwdWJsaWMgPFQgZXh0ZW5kcyBMaXN0PiBpbnQgbWV0aG9kKFQgdCkgeworCQlyZXR1cm4gdC5oYXNoQ29kZSgpOworCX0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tZXRob2REdXBsaWNhdGVzL0dlbm1ldGhFeHRlbmRzR2VuZXJpY0V4YWN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbWV0aG9kRHVwbGljYXRlcy9HZW5tZXRoRXh0ZW5kc0dlbmVyaWNFeGFjdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFjMjQ3NDMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbWV0aG9kRHVwbGljYXRlcy9HZW5tZXRoRXh0ZW5kc0dlbmVyaWNFeGFjdC5qYXZhCkBAIC0wLDAgKzEsMjAgQEAKK2ltcG9ydCBqYXZhLnV0aWwuQWJzdHJhY3RMaXN0OworaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK3B1YmxpYyBjbGFzcyBHZW5tZXRoIHsKKwlwdWJsaWMgdm9pZCBjb250ZXh0KCkgeworCQlJbnRlZ2VyIHYxID0gMDsKKwkJaW50IHYxYSA9IHYxLmhhc2hDb2RlKCk7CisJCUFic3RyYWN0TGlzdDxTdHJpbmc+IHYyID0gbmV3IEFycmF5TGlzdDxTdHJpbmc+KDApOworCQlpbnQgdjJhID0gdjIuaGFzaENvZGUoKTsKKwkJQWJzdHJhY3RMaXN0PERvdWJsZT4gdjMgPSBuZXcgQXJyYXlMaXN0PERvdWJsZT4oMCk7CisJCWludCB2M2EgPSB2My5oYXNoQ29kZSgpOworCQlBYnN0cmFjdExpc3Q8SW50ZWdlcj4gdjQgPSBuZXcgQXJyYXlMaXN0PEludGVnZXI+KDApOworCQlpbnQgdjRhID0gdjQuaGFzaENvZGUoKTsKKwl9CisKKwlwdWJsaWMgPFQgZXh0ZW5kcyBMaXN0PEludGVnZXI+PiBpbnQgPGNhcmV0Pm1ldGhvZChUIHQpIHsKKwkJcmV0dXJuIHQuaGFzaENvZGUoKTsKKwl9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbWV0aG9kRHVwbGljYXRlcy9HZW5tZXRoRXh0ZW5kc0dlbmVyaWNFeGFjdC5qYXZhLmFmdGVyIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21ldGhvZER1cGxpY2F0ZXMvR2VubWV0aEV4dGVuZHNHZW5lcmljRXhhY3QuamF2YS5hZnRlcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MDZhYTZhCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21ldGhvZER1cGxpY2F0ZXMvR2VubWV0aEV4dGVuZHNHZW5lcmljRXhhY3QuamF2YS5hZnRlcgpAQCAtMCwwICsxLDIwIEBACitpbXBvcnQgamF2YS51dGlsLkFic3RyYWN0TGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitwdWJsaWMgY2xhc3MgR2VubWV0aCB7CisJcHVibGljIHZvaWQgY29udGV4dCgpIHsKKwkJSW50ZWdlciB2MSA9IDA7CisJCWludCB2MWEgPSB2MS5oYXNoQ29kZSgpOworCQlBYnN0cmFjdExpc3Q8U3RyaW5nPiB2MiA9IG5ldyBBcnJheUxpc3Q8U3RyaW5nPigwKTsKKwkJaW50IHYyYSA9IHYyLmhhc2hDb2RlKCk7CisJCUFic3RyYWN0TGlzdDxEb3VibGU+IHYzID0gbmV3IEFycmF5TGlzdDxEb3VibGU+KDApOworCQlpbnQgdjNhID0gdjMuaGFzaENvZGUoKTsKKwkJQWJzdHJhY3RMaXN0PEludGVnZXI+IHY0ID0gbmV3IEFycmF5TGlzdDxJbnRlZ2VyPigwKTsKKwkJaW50IHY0YSA9IG1ldGhvZCh2NCk7CisJfQorCisJcHVibGljIDxUIGV4dGVuZHMgTGlzdDxJbnRlZ2VyPj4gaW50IG1ldGhvZChUIHQpIHsKKwkJcmV0dXJuIHQuaGFzaENvZGUoKTsKKwl9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbWV0aG9kRHVwbGljYXRlcy9HZW5tZXRoRXh0ZW5kc0dlbmVyaWNXaWxkY2FyZC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21ldGhvZER1cGxpY2F0ZXMvR2VubWV0aEV4dGVuZHNHZW5lcmljV2lsZGNhcmQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ODI2OWIxCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21ldGhvZER1cGxpY2F0ZXMvR2VubWV0aEV4dGVuZHNHZW5lcmljV2lsZGNhcmQuamF2YQpAQCAtMCwwICsxLDIwIEBACitpbXBvcnQgamF2YS51dGlsLkFic3RyYWN0TGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitwdWJsaWMgY2xhc3MgR2VubWV0aCB7CisJcHVibGljIHZvaWQgY29udGV4dCgpIHsKKwkJSW50ZWdlciB2MSA9IDA7CisJCWludCB2MWEgPSB2MS5oYXNoQ29kZSgpOworCQlBYnN0cmFjdExpc3Q8U3RyaW5nPiB2MiA9IG5ldyBBcnJheUxpc3Q8U3RyaW5nPigwKTsKKwkJaW50IHYyYSA9IHYyLmhhc2hDb2RlKCk7CisJCUFic3RyYWN0TGlzdDxEb3VibGU+IHYzID0gbmV3IEFycmF5TGlzdDxEb3VibGU+KDApOworCQlpbnQgdjNhID0gdjMuaGFzaENvZGUoKTsKKwkJQWJzdHJhY3RMaXN0PEludGVnZXI+IHY0ID0gbmV3IEFycmF5TGlzdDxJbnRlZ2VyPigwKTsKKwkJaW50IHY0YSA9IHY0Lmhhc2hDb2RlKCk7CisJfQorCisJcHVibGljIDxUIGV4dGVuZHMgTGlzdDw/IGV4dGVuZHMgTnVtYmVyPj4gaW50IDxjYXJldD5tZXRob2QoVCB0KSB7CisJCXJldHVybiB0Lmhhc2hDb2RlKCk7CisJfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21ldGhvZER1cGxpY2F0ZXMvR2VubWV0aEV4dGVuZHNHZW5lcmljV2lsZGNhcmQuamF2YS5hZnRlciBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tZXRob2REdXBsaWNhdGVzL0dlbm1ldGhFeHRlbmRzR2VuZXJpY1dpbGRjYXJkLmphdmEuYWZ0ZXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjA2Yjg2MgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tZXRob2REdXBsaWNhdGVzL0dlbm1ldGhFeHRlbmRzR2VuZXJpY1dpbGRjYXJkLmphdmEuYWZ0ZXIKQEAgLTAsMCArMSwyMCBAQAoraW1wb3J0IGphdmEudXRpbC5BYnN0cmFjdExpc3Q7CitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworcHVibGljIGNsYXNzIEdlbm1ldGggeworCXB1YmxpYyB2b2lkIGNvbnRleHQoKSB7CisJCUludGVnZXIgdjEgPSAwOworCQlpbnQgdjFhID0gdjEuaGFzaENvZGUoKTsKKwkJQWJzdHJhY3RMaXN0PFN0cmluZz4gdjIgPSBuZXcgQXJyYXlMaXN0PFN0cmluZz4oMCk7CisJCWludCB2MmEgPSB2Mi5oYXNoQ29kZSgpOworCQlBYnN0cmFjdExpc3Q8RG91YmxlPiB2MyA9IG5ldyBBcnJheUxpc3Q8RG91YmxlPigwKTsKKwkJaW50IHYzYSA9IG1ldGhvZCh2Myk7CisJCUFic3RyYWN0TGlzdDxJbnRlZ2VyPiB2NCA9IG5ldyBBcnJheUxpc3Q8SW50ZWdlcj4oMCk7CisJCWludCB2NGEgPSBtZXRob2QodjQpOworCX0KKworCXB1YmxpYyA8VCBleHRlbmRzIExpc3Q8PyBleHRlbmRzIE51bWJlcj4+IGludCBtZXRob2QoVCB0KSB7CisJCXJldHVybiB0Lmhhc2hDb2RlKCk7CisJfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21ldGhvZER1cGxpY2F0ZXMvR2VubWV0aEdlbmVyYWwuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tZXRob2REdXBsaWNhdGVzL0dlbm1ldGhHZW5lcmFsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTZmZjRlMQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tZXRob2REdXBsaWNhdGVzL0dlbm1ldGhHZW5lcmFsLmphdmEKQEAgLTAsMCArMSwyMCBAQAoraW1wb3J0IGphdmEudXRpbC5BYnN0cmFjdExpc3Q7CitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworcHVibGljIGNsYXNzIEdlbm1ldGggeworCXB1YmxpYyB2b2lkIGNvbnRleHQoKSB7CisJCUludGVnZXIgdjEgPSAwOworCQlpbnQgdjFhID0gdjEuaGFzaENvZGUoKTsKKwkJQWJzdHJhY3RMaXN0PFN0cmluZz4gdjIgPSBuZXcgQXJyYXlMaXN0PFN0cmluZz4oMCk7CisJCWludCB2MmEgPSB2Mi5oYXNoQ29kZSgpOworCQlBYnN0cmFjdExpc3Q8RG91YmxlPiB2MyA9IG5ldyBBcnJheUxpc3Q8RG91YmxlPigwKTsKKwkJaW50IHYzYSA9IHYzLmhhc2hDb2RlKCk7CisJCUFic3RyYWN0TGlzdDxJbnRlZ2VyPiB2NCA9IG5ldyBBcnJheUxpc3Q8SW50ZWdlcj4oMCk7CisJCWludCB2NGEgPSB2NC5oYXNoQ29kZSgpOworCX0KKworCXB1YmxpYyA8VD4gaW50IDxjYXJldD5tZXRob2QoVCB0KSB7CisJCXJldHVybiB0Lmhhc2hDb2RlKCk7CisJfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21ldGhvZER1cGxpY2F0ZXMvR2VubWV0aEdlbmVyYWwuamF2YS5hZnRlciBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tZXRob2REdXBsaWNhdGVzL0dlbm1ldGhHZW5lcmFsLmphdmEuYWZ0ZXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWE2ZjhjMQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tZXRob2REdXBsaWNhdGVzL0dlbm1ldGhHZW5lcmFsLmphdmEuYWZ0ZXIKQEAgLTAsMCArMSwyMCBAQAoraW1wb3J0IGphdmEudXRpbC5BYnN0cmFjdExpc3Q7CitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworcHVibGljIGNsYXNzIEdlbm1ldGggeworCXB1YmxpYyB2b2lkIGNvbnRleHQoKSB7CisJCUludGVnZXIgdjEgPSAwOworCQlpbnQgdjFhID0gbWV0aG9kKHYxKTsKKwkJQWJzdHJhY3RMaXN0PFN0cmluZz4gdjIgPSBuZXcgQXJyYXlMaXN0PFN0cmluZz4oMCk7CisJCWludCB2MmEgPSBtZXRob2QodjIpOworCQlBYnN0cmFjdExpc3Q8RG91YmxlPiB2MyA9IG5ldyBBcnJheUxpc3Q8RG91YmxlPigwKTsKKwkJaW50IHYzYSA9IG1ldGhvZCh2Myk7CisJCUFic3RyYWN0TGlzdDxJbnRlZ2VyPiB2NCA9IG5ldyBBcnJheUxpc3Q8SW50ZWdlcj4oMCk7CisJCWludCB2NGEgPSBtZXRob2QodjQpOworCX0KKworCXB1YmxpYyA8VD4gaW50IG1ldGhvZChUIHQpIHsKKwkJcmV0dXJuIHQuaGFzaENvZGUoKTsKKwl9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbWV0aG9kRHVwbGljYXRlcy9HZW5tZXRoU2V2ZXJhbC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21ldGhvZER1cGxpY2F0ZXMvR2VubWV0aFNldmVyYWwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNTA1ZDMzCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21ldGhvZER1cGxpY2F0ZXMvR2VubWV0aFNldmVyYWwuamF2YQpAQCAtMCwwICsxLDE1IEBACitpbXBvcnQgamF2YS51dGlsLkFic3RyYWN0TGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitwdWJsaWMgY2xhc3MgR2VubWV0aCB7CisJcHVibGljIHZvaWQgY29udGV4dCgpIHsKKwkJSW50ZWdlciB2MSA9IDA7CisJCUFic3RyYWN0TGlzdDxTdHJpbmc+IHYyID0gbmV3IEFycmF5TGlzdDxTdHJpbmc+KDApOworCQlpbnQgcmVzID0gdjEuaGFzaENvZGUoKSArIHYyLnNpemUoKTsKKwl9CisKKwlwdWJsaWMgPFQsIFUgZXh0ZW5kcyBMaXN0PiBpbnQgPGNhcmV0Pm1ldGhvZChUIHQsIFUgdSkgeworCQlyZXR1cm4gdC5oYXNoQ29kZSgpICsgdS5zaXplKCk7CisJfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21ldGhvZER1cGxpY2F0ZXMvR2VubWV0aFNldmVyYWwuamF2YS5hZnRlciBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tZXRob2REdXBsaWNhdGVzL0dlbm1ldGhTZXZlcmFsLmphdmEuYWZ0ZXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmI5MTVhMAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tZXRob2REdXBsaWNhdGVzL0dlbm1ldGhTZXZlcmFsLmphdmEuYWZ0ZXIKQEAgLTAsMCArMSwxNSBAQAoraW1wb3J0IGphdmEudXRpbC5BYnN0cmFjdExpc3Q7CitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworcHVibGljIGNsYXNzIEdlbm1ldGggeworCXB1YmxpYyB2b2lkIGNvbnRleHQoKSB7CisJCUludGVnZXIgdjEgPSAwOworCQlBYnN0cmFjdExpc3Q8U3RyaW5nPiB2MiA9IG5ldyBBcnJheUxpc3Q8U3RyaW5nPigwKTsKKwkJaW50IHJlcyA9IG1ldGhvZCh2MSwgdjIpOworCX0KKworCXB1YmxpYyA8VCwgVSBleHRlbmRzIExpc3Q+IGludCA8Y2FyZXQ+bWV0aG9kKFQgdCwgVSB1KSB7CisJCXJldHVybiB0Lmhhc2hDb2RlKCkgKyB1LnNpemUoKTsKKwl9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbWV0aG9kRHVwbGljYXRlcy9JZGVudGl0eUNvbW1lbnQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tZXRob2REdXBsaWNhdGVzL0lkZW50aXR5Q29tbWVudC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEwM2E5MTIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbWV0aG9kRHVwbGljYXRlcy9JZGVudGl0eUNvbW1lbnQuamF2YQpAQCAtMCwwICsxLDE3IEBACitjbGFzcyBJZGVudGl0eUNvbXBsZXRlIHsKKyAgcHJpdmF0ZSBpbnQgbXlGaWVsZDsKKworICBwdWJsaWMgdm9pZCA8Y2FyZXQ+bWV0aG9kKGJvb2xlYW4gYnApIHsKKyAgICAvLyBtZXRob2QgYmVnaW5zCisgICAgU3RyaW5nIC8qZWdnKi8gdmFyID0gLyplZ2cqLyJ2YXIgdmFsdWUiOyAvLyBpbnNpZGUgbWV0aG9kCisgICAgbXlGaWVsZCArPSBicCA/LyplZ2cqLyB2YXIubGVuZ3RoKCkgOiAvKmVnZyovIHRoaXMuaGFzaENvZGUoKTsgIC8qIGluc2lkZSBtZXRob2QgKi8KKyAgICAvKiBtZXRob2QgZW5kcyAqLworICB9CisKKyAgcHVibGljIHZvaWQgY29udGV4dChib29sZWFuIGJwKSB7CisgICAgLyogYmVmb3JlIGZyYWdtZW50ICovCisgICAgU3RyaW5nIHZhci8qZWdnKi8gPSAidmFyIHZhbHVlIi8qZWdnKi87IC8vIGluc2lkZSBjb250ZXh0CisgICAgbXlGaWVsZCArPSAvKmVnZyovIGJwID8gdmFyLmxlbmd0aCgpIDogdGhpcy5oYXNoQ29kZSgvKmVnZyovKTsgLyogaW5zaWRlIGNvbnRleHQgKi8KKyAgICAvLyBhZnRlciBmcmFnbWVudAorICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21ldGhvZER1cGxpY2F0ZXMvSWRlbnRpdHlDb21tZW50LmphdmEuYWZ0ZXIgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbWV0aG9kRHVwbGljYXRlcy9JZGVudGl0eUNvbW1lbnQuamF2YS5hZnRlcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xODA0OWI4Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21ldGhvZER1cGxpY2F0ZXMvSWRlbnRpdHlDb21tZW50LmphdmEuYWZ0ZXIKQEAgLTAsMCArMSwxNiBAQAorY2xhc3MgSWRlbnRpdHlDb21wbGV0ZSB7CisgIHByaXZhdGUgaW50IG15RmllbGQ7CisKKyAgcHVibGljIHZvaWQgbWV0aG9kKGJvb2xlYW4gYnApIHsKKyAgICAvLyBtZXRob2QgYmVnaW5zCisgICAgU3RyaW5nIC8qZWdnKi8gdmFyID0gLyplZ2cqLyJ2YXIgdmFsdWUiOyAvLyBpbnNpZGUgbWV0aG9kCisgICAgbXlGaWVsZCArPSBicCA/LyplZ2cqLyB2YXIubGVuZ3RoKCkgOiAvKmVnZyovIHRoaXMuaGFzaENvZGUoKTsgIC8qIGluc2lkZSBtZXRob2QgKi8KKyAgICAvKiBtZXRob2QgZW5kcyAqLworICB9CisKKyAgcHVibGljIHZvaWQgY29udGV4dChib29sZWFuIGJwKSB7CisgICAgLyogYmVmb3JlIGZyYWdtZW50ICovCisgICAgICBtZXRob2QoYnApOworICAgIC8vIGFmdGVyIGZyYWdtZW50CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbWV0aG9kRHVwbGljYXRlcy9JZGVudGl0eUNvbXBsZXRlLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbWV0aG9kRHVwbGljYXRlcy9JZGVudGl0eUNvbXBsZXRlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTQ3NjhkNgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tZXRob2REdXBsaWNhdGVzL0lkZW50aXR5Q29tcGxldGUuamF2YQpAQCAtMCwwICsxLDEzIEBACitjbGFzcyBJZGVudGl0eUNvbXBsZXRlIHsKKyAgcHJpdmF0ZSBpbnQgbXlGaWVsZDsKKworICBwdWJsaWMgdm9pZCA8Y2FyZXQ+bWV0aG9kKGJvb2xlYW4gYnApIHsKKyAgICBTdHJpbmcgdmFyID0gInZhciB2YWx1ZSI7CisgICAgbXlGaWVsZCArPSBicCA/IHZhci5sZW5ndGgoKSA6IHRoaXMuaGFzaENvZGUoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIGNvbnRleHQoYm9vbGVhbiBicCkgeworICAgIFN0cmluZyB2YXIgPSAidmFyIHZhbHVlIjsKKyAgICBteUZpZWxkICs9IGJwID8gdmFyLmxlbmd0aCgpIDogdGhpcy5oYXNoQ29kZSgpOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21ldGhvZER1cGxpY2F0ZXMvSWRlbnRpdHlDb21wbGV0ZS5qYXZhLmFmdGVyIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21ldGhvZER1cGxpY2F0ZXMvSWRlbnRpdHlDb21wbGV0ZS5qYXZhLmFmdGVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY5NDdmODkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbWV0aG9kRHVwbGljYXRlcy9JZGVudGl0eUNvbXBsZXRlLmphdmEuYWZ0ZXIKQEAgLTAsMCArMSwxMiBAQAorY2xhc3MgSWRlbnRpdHlDb21wbGV0ZSB7CisgIHByaXZhdGUgaW50IG15RmllbGQ7CisKKyAgcHVibGljIHZvaWQgbWV0aG9kKGJvb2xlYW4gYnApIHsKKyAgICBTdHJpbmcgdmFyID0gInZhciB2YWx1ZSI7CisgICAgbXlGaWVsZCArPSBicCA/IHZhci5sZW5ndGgoKSA6IHRoaXMuaGFzaENvZGUoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIGNvbnRleHQoYm9vbGVhbiBicCkgeworICAgICAgbWV0aG9kKGJwKTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tZXRob2REdXBsaWNhdGVzL0lkZW50aXR5TmFtZS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21ldGhvZER1cGxpY2F0ZXMvSWRlbnRpdHlOYW1lLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODQ0YTU1ZgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tZXRob2REdXBsaWNhdGVzL0lkZW50aXR5TmFtZS5qYXZhCkBAIC0wLDAgKzEsMjMgQEAKK2ltcG9ydCBqYXZheC5zd2luZy5KQ29tcG9uZW50OworCitjbGFzcyBJZGVudGl0eUNvbXBsZXRlIHsKKyAgcHJpdmF0ZSBpbnQgbXlGaWVsZDsKKworICBwdWJsaWMgdm9pZCA8Y2FyZXQ+bWV0aG9kKGJvb2xlYW4gbWV0aG9kUGFyKSB7CisgICAgU3RyaW5nIG1ldGhvZFZhciA9ICJ2YXIgdmFsdWUiOworICAgIG15RmllbGQgKz0gbWV0aG9kUGFyID8gbWV0aG9kVmFyLmxlbmd0aCgpIDogdGhpcy5oYXNoQ29kZSgpOworCisgICAgSkNvbXBvbmVudCBtZXRob2RBbm9ueW1vdXMgPSBuZXcgSkNvbXBvbmVudCgpIHsKKyAgICAgIHByaXZhdGUgaW50IG15TWV0aG9kQW5vbnltb3VzSW50OworICAgIH07CisgIH0KKworICBwdWJsaWMgdm9pZCBjb250ZXh0KGJvb2xlYW4gY29udGV4dFBhcikgeworICAgIFN0cmluZyBjb250ZXh0VmFyID0gInZhciB2YWx1ZSI7CisgICAgbXlGaWVsZCArPSBjb250ZXh0UGFyID8gY29udGV4dFZhci5sZW5ndGgoKSA6IHRoaXMuaGFzaENvZGUoKTsKKworICAgIEpDb21wb25lbnQgY29udGV4dEFub255bW91cyA9IG5ldyBKQ29tcG9uZW50KCkgeworICAgICAgcHJpdmF0ZSBpbnQgbXlDb250ZXh0QW5vbnltb3VzSW50OworICAgIH07CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tZXRob2REdXBsaWNhdGVzL0lkZW50aXR5TmFtZS5qYXZhLmFmdGVyIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21ldGhvZER1cGxpY2F0ZXMvSWRlbnRpdHlOYW1lLmphdmEuYWZ0ZXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTA1YzBmMAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tZXRob2REdXBsaWNhdGVzL0lkZW50aXR5TmFtZS5qYXZhLmFmdGVyCkBAIC0wLDAgKzEsMTggQEAKK2ltcG9ydCBqYXZheC5zd2luZy5KQ29tcG9uZW50OworCitjbGFzcyBJZGVudGl0eUNvbXBsZXRlIHsKKyAgcHJpdmF0ZSBpbnQgbXlGaWVsZDsKKworICBwdWJsaWMgdm9pZCBtZXRob2QoYm9vbGVhbiBtZXRob2RQYXIpIHsKKyAgICBTdHJpbmcgbWV0aG9kVmFyID0gInZhciB2YWx1ZSI7CisgICAgbXlGaWVsZCArPSBtZXRob2RQYXIgPyBtZXRob2RWYXIubGVuZ3RoKCkgOiB0aGlzLmhhc2hDb2RlKCk7CisKKyAgICBKQ29tcG9uZW50IG1ldGhvZEFub255bW91cyA9IG5ldyBKQ29tcG9uZW50KCkgeworICAgICAgcHJpdmF0ZSBpbnQgbXlNZXRob2RBbm9ueW1vdXNJbnQ7CisgICAgfTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIGNvbnRleHQoYm9vbGVhbiBjb250ZXh0UGFyKSB7CisgICAgICBtZXRob2QoY29udGV4dFBhcik7CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tZXRob2REdXBsaWNhdGVzL0lkZW50aXR5TmFtZUZhaWx1cmVzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbWV0aG9kRHVwbGljYXRlcy9JZGVudGl0eU5hbWVGYWlsdXJlcy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZmY2ZjOTcKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbWV0aG9kRHVwbGljYXRlcy9JZGVudGl0eU5hbWVGYWlsdXJlcy5qYXZhCkBAIC0wLDAgKzEsMzcgQEAKK2ltcG9ydCBqYXZheC5zd2luZy5KQ29tcG9uZW50OworCitjbGFzcyBJZGVudGl0eUNvbXBsZXRlIHsKKyAgcHJpdmF0ZSBpbnQgbXlGaWVsZDsKKworICBwdWJsaWMgdm9pZCA8Y2FyZXQ+bWV0aG9kKCkgeworICAgIGNsYXNzIE1ldGhvZExvY2FsIHsKKyAgICAgIHByaXZhdGUgaW50IG15TWV0aG9kTG9jYWxJbnQ7CisgICAgICBwdWJsaWMgdm9pZCBtZXRob2RMb2NhbEluYygpIHsKKyAgICAgICAgbXlNZXRob2RMb2NhbEludCsrOworICAgICAgfQorICAgIH0KKworICAgIEpDb21wb25lbnQgbWV0aG9kQW5vbnltb3VzID0gbmV3IEpDb21wb25lbnQoKSB7CisgICAgICBwcml2YXRlIGludCBteU1ldGhvZEFub255bW91c0ludDsKKyAgICAgIHB1YmxpYyB2b2lkIG1ldGhvZEFub255bW91c0luYygpIHsKKyAgICAgICAgbXlNZXRob2RBbm9ueW1vdXNJbnQrKzsKKyAgICAgIH0KKyAgICB9OworICB9CisKKyAgcHVibGljIHZvaWQgY29udGV4dCgpIHsKKyAgICBjbGFzcyBDb250ZXh0TG9jYWwgeworICAgICAgcHJpdmF0ZSBpbnQgbXlDb250ZXh0TG9jYWxJbnQ7CisgICAgICBwdWJsaWMgdm9pZCBjb250ZXh0TG9jYWxJbmMoKSB7CisgICAgICAgIG15Q29udGV4dExvY2FsSW50Kys7CisgICAgICB9CisgICAgfQorCisgICAgSkNvbXBvbmVudCBjb250ZXh0QW5vbnltb3VzID0gbmV3IEpDb21wb25lbnQoKSB7CisgICAgICBwcml2YXRlIGludCBteUNvbnRleHRBbm9ueW1vdXNJbnQ7CisgICAgICBwdWJsaWMgdm9pZCBjb250ZXh0QW5vbnltb3VzSW5jKCkgeworICAgICAgICBteUNvbnRleHRBbm9ueW1vdXNJbnQrKzsKKyAgICAgIH0KKyAgICB9OworICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbWV0aG9kRHVwbGljYXRlcy9JZGVudGl0eU5hbWVGYWlsdXJlcy5qYXZhLmFmdGVyIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21ldGhvZER1cGxpY2F0ZXMvSWRlbnRpdHlOYW1lRmFpbHVyZXMuamF2YS5hZnRlcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMGQwMmQ0Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21ldGhvZER1cGxpY2F0ZXMvSWRlbnRpdHlOYW1lRmFpbHVyZXMuamF2YS5hZnRlcgpAQCAtMCwwICsxLDI1IEBACitpbXBvcnQgamF2YXguc3dpbmcuSkNvbXBvbmVudDsKKworY2xhc3MgSWRlbnRpdHlDb21wbGV0ZSB7CisgIHByaXZhdGUgaW50IG15RmllbGQ7CisKKyAgcHVibGljIHZvaWQgbWV0aG9kKCkgeworICAgIGNsYXNzIE1ldGhvZExvY2FsIHsKKyAgICAgIHByaXZhdGUgaW50IG15TWV0aG9kTG9jYWxJbnQ7CisgICAgICBwdWJsaWMgdm9pZCBtZXRob2RMb2NhbEluYygpIHsKKyAgICAgICAgbXlNZXRob2RMb2NhbEludCsrOworICAgICAgfQorICAgIH0KKworICAgIEpDb21wb25lbnQgbWV0aG9kQW5vbnltb3VzID0gbmV3IEpDb21wb25lbnQoKSB7CisgICAgICBwcml2YXRlIGludCBteU1ldGhvZEFub255bW91c0ludDsKKyAgICAgIHB1YmxpYyB2b2lkIG1ldGhvZEFub255bW91c0luYygpIHsKKyAgICAgICAgbXlNZXRob2RBbm9ueW1vdXNJbnQrKzsKKyAgICAgIH0KKyAgICB9OworICB9CisKKyAgcHVibGljIHZvaWQgY29udGV4dCgpIHsKKyAgICAgIG1ldGhvZCgpOworICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbWV0aG9kRHVwbGljYXRlcy9JZGVudGl0eVdoaXRlc3BhY2UuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tZXRob2REdXBsaWNhdGVzL0lkZW50aXR5V2hpdGVzcGFjZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEzNzlmMDMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbWV0aG9kRHVwbGljYXRlcy9JZGVudGl0eVdoaXRlc3BhY2UuamF2YQpAQCAtMCwwICsxLDE5IEBACitjbGFzcyBJZGVudGl0eUNvbXBsZXRlIHsKKyAgcHJpdmF0ZSBpbnQgbXlGaWVsZDsKKworICBwdWJsaWMgdm9pZCA8Y2FyZXQ+bWV0aG9kKGJvb2xlYW4gYnApIHsKKyAgICBTdHJpbmcgdmFyPSJ2YXIgdmFsdWUiIDsKK215RmllbGQgKz0KK2JwCT8JdmFyLgorCWxlbmd0aCggKTp0aGlzLiBoYXNoQ29kZSAoKSA7CisgIH0KKworICBwdWJsaWMgdm9pZCBjb250ZXh0KGJvb2xlYW4gYnApIHsKKyAgICBTdHJpbmcJdmFyCisgICAgPQorCSJ2YXIgdmFsdWUiCis7bXlGaWVsZAorCSs9YnA/dmFyICAuIGxlbmd0aCAoICkJOgorCXRoaXMJLmhhc2hDb2RlKCk7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbWV0aG9kRHVwbGljYXRlcy9JZGVudGl0eVdoaXRlc3BhY2UuamF2YS5hZnRlciBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tZXRob2REdXBsaWNhdGVzL0lkZW50aXR5V2hpdGVzcGFjZS5qYXZhLmFmdGVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjljYWQ0ZTEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbWV0aG9kRHVwbGljYXRlcy9JZGVudGl0eVdoaXRlc3BhY2UuamF2YS5hZnRlcgpAQCAtMCwwICsxLDE0IEBACitjbGFzcyBJZGVudGl0eUNvbXBsZXRlIHsKKyAgcHJpdmF0ZSBpbnQgbXlGaWVsZDsKKworICBwdWJsaWMgdm9pZCBtZXRob2QoYm9vbGVhbiBicCkgeworICAgIFN0cmluZyB2YXI9InZhciB2YWx1ZSIgOworbXlGaWVsZCArPQorYnAJPwl2YXIuCisJbGVuZ3RoKCApOnRoaXMuIGhhc2hDb2RlICgpIDsKKyAgfQorCisgIHB1YmxpYyB2b2lkIGNvbnRleHQoYm9vbGVhbiBicCkgeworICAgICAgbWV0aG9kKGJwKTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tZXRob2REdXBsaWNhdGVzL0luaGVyaXRhbmNlLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbWV0aG9kRHVwbGljYXRlcy9Jbmhlcml0YW5jZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg5OTNjYjcKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbWV0aG9kRHVwbGljYXRlcy9Jbmhlcml0YW5jZS5qYXZhCkBAIC0wLDAgKzEsMTMgQEAKK3B1YmxpYyBjbGFzcyBJbmhlcml0YW5jZSB7fQorCitjbGFzcyBCYXNlIHsKKyAgdm9pZCBmPGNhcmV0Pm9vKCl7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCIiKTsKKyAgfQorfQorCitjbGFzcyBDaGlsZCBleHRlbmRzIEJhc2UgeworICAgdm9pZCBiYXIoKSB7CisgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiIik7CisgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21ldGhvZER1cGxpY2F0ZXMvSW5oZXJpdGFuY2UuamF2YS5hZnRlciBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tZXRob2REdXBsaWNhdGVzL0luaGVyaXRhbmNlLmphdmEuYWZ0ZXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmZhNTY2ZgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tZXRob2REdXBsaWNhdGVzL0luaGVyaXRhbmNlLmphdmEuYWZ0ZXIKQEAgLTAsMCArMSwxMyBAQAorcHVibGljIGNsYXNzIEluaGVyaXRhbmNlIHt9CisKK2NsYXNzIEJhc2UgeworICB2b2lkIGZvbygpeworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiIik7CisgIH0KK30KKworY2xhc3MgQ2hpbGQgZXh0ZW5kcyBCYXNlIHsKKyAgIHZvaWQgYmFyKCkgeworICAgICAgIGZvbygpOworICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tZXRob2REdXBsaWNhdGVzL0xvY2F0aW9uUXVhbnRpdHkuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tZXRob2REdXBsaWNhdGVzL0xvY2F0aW9uUXVhbnRpdHkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZDU3ZjkyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21ldGhvZER1cGxpY2F0ZXMvTG9jYXRpb25RdWFudGl0eS5qYXZhCkBAIC0wLDAgKzEsMzMgQEAKK2NsYXNzIExvY2F0aW9uUXVhbnRpdHkgeworICBwdWJsaWMgZmluYWwgaW50IG15SW50ID0gMzsKKworICBwdWJsaWMgaW50IDxjYXJldD5tZXRob2QoaW50IHApIHsKKyAgICByZXR1cm4gbXlJbnQgKyBwOworICB9CisKKyAgcHVibGljIHZvaWQgc2FtZUNsYXNzQ29udGV4dCgpIHsKKyAgICBpbnQgdiA9IDE7CisgICAgdisrOworICAgIGludCB2MiA9IG15SW50ICsgdjsKKyAgICBPYmplY3QgbyA9IG5ldyBPYmplY3QoKSB7CisgICAgICBwdWJsaWMgdm9pZCBhbm9ueW1vdXNDbGFzc0NvbnRleHQoKSB7CisgICAgICAgICBpbnQgYXYgPSBteUludCArIDI7CisgICAgICB9CisgICAgfTsKKyAgfQorCisgIHB1YmxpYyBjbGFzcyBJbm5lciB7CisgICAgcHJpdmF0ZSBib29sZWFuIG15RmxhZzsKKyAgICBwdWJsaWMgaW50IGlubmVyQ2xhc3NDb250ZXh0KGludCBpcCkgeworICAgICAgcmV0dXJuIG15RmxhZyA/IG15SW50ICsgaXAgOiAwOworICAgIH0KKyAgfQorfQorCitjbGFzcyBEaWZmZXJlbnRDbGFzcyB7CisgIHByaXZhdGUgaW50IG15SW50OworICBwcml2YXRlIHZvaWQgZGlmZmVyZW50Q2xhc3NDb250ZXh0KCkgeworICAgIExvY2F0aW9uUXVhbnRpdHkgbHEgPSBuZXcgTG9jYXRpb25RdWFudGl0eSgpOworICAgIGludCB2ID0gbHEubXlJbnQgKyBteUludDsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21ldGhvZER1cGxpY2F0ZXMvTG9jYXRpb25RdWFudGl0eS5qYXZhLmFmdGVyIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21ldGhvZER1cGxpY2F0ZXMvTG9jYXRpb25RdWFudGl0eS5qYXZhLmFmdGVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU4MTA4MWYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbWV0aG9kRHVwbGljYXRlcy9Mb2NhdGlvblF1YW50aXR5LmphdmEuYWZ0ZXIKQEAgLTAsMCArMSwzMyBAQAorY2xhc3MgTG9jYXRpb25RdWFudGl0eSB7CisgIHB1YmxpYyBmaW5hbCBpbnQgbXlJbnQgPSAzOworCisgIHB1YmxpYyBpbnQgbWV0aG9kKGludCBwKSB7CisgICAgcmV0dXJuIG15SW50ICsgcDsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHNhbWVDbGFzc0NvbnRleHQoKSB7CisgICAgaW50IHYgPSAxOworICAgIHYrKzsKKyAgICBpbnQgdjIgPSBtZXRob2Qodik7CisgICAgT2JqZWN0IG8gPSBuZXcgT2JqZWN0KCkgeworICAgICAgcHVibGljIHZvaWQgYW5vbnltb3VzQ2xhc3NDb250ZXh0KCkgeworICAgICAgICAgaW50IGF2ID0gbWV0aG9kKDIpOworICAgICAgfQorICAgIH07CisgIH0KKworICBwdWJsaWMgY2xhc3MgSW5uZXIgeworICAgIHByaXZhdGUgYm9vbGVhbiBteUZsYWc7CisgICAgcHVibGljIGludCBpbm5lckNsYXNzQ29udGV4dChpbnQgaXApIHsKKyAgICAgIHJldHVybiBteUZsYWcgPyBtZXRob2QoaXApIDogMDsKKyAgICB9CisgIH0KK30KKworY2xhc3MgRGlmZmVyZW50Q2xhc3MgeworICBwcml2YXRlIGludCBteUludDsKKyAgcHJpdmF0ZSB2b2lkIGRpZmZlcmVudENsYXNzQ29udGV4dCgpIHsKKyAgICBMb2NhdGlvblF1YW50aXR5IGxxID0gbmV3IExvY2F0aW9uUXVhbnRpdHkoKTsKKyAgICBpbnQgdiA9IGxxLm1ldGhvZChteUludCk7CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tZXRob2REdXBsaWNhdGVzL01hcHBpbmdBbnkyUGFyYW1ldGVyUHJpbWl0aXZlTHZhbHVlLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbWV0aG9kRHVwbGljYXRlcy9NYXBwaW5nQW55MlBhcmFtZXRlclByaW1pdGl2ZUx2YWx1ZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM4M2E1ZjIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbWV0aG9kRHVwbGljYXRlcy9NYXBwaW5nQW55MlBhcmFtZXRlclByaW1pdGl2ZUx2YWx1ZS5qYXZhCkBAIC0wLDAgKzEsMTEgQEAKK2NsYXNzIE1hcHBpbmcgeworICBwcml2YXRlIGludCBteUZpZWxkOworCisgIHB1YmxpYyB2b2lkIDxjYXJldD5tZXRob2QoaW50IHApIHsKKyAgICBwKys7CisgIH0KKworICBwdWJsaWMgdm9pZCBjb250ZXh0KCkgeworICAgIG15RmllbGQ7CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tZXRob2REdXBsaWNhdGVzL01hcHBpbmdFeHByZXNzaW9uMkZpZWxkLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbWV0aG9kRHVwbGljYXRlcy9NYXBwaW5nRXhwcmVzc2lvbjJGaWVsZC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE3NWI5YmRhCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21ldGhvZER1cGxpY2F0ZXMvTWFwcGluZ0V4cHJlc3Npb24yRmllbGQuamF2YQpAQCAtMCwwICsxLDExIEBACitjbGFzcyBNYXBwaW5nIHsKKyAgcHJpdmF0ZSBNYXBwaW5nIG15TWFwcGluZzsKKworICBwdWJsaWMgdm9pZCA8Y2FyZXQ+bWV0aG9kKCkgeworICAgIE1hcHBpbmcgbTIgPSBteU1hcHBpbmc7CisgIH0KKworICBwdWJsaWMgdm9pZCBjb250ZXh0KCkgeworICAgIE1hcHBpbmcgbTIgPSBuZXcgTWFwcGluZygpOworICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbWV0aG9kRHVwbGljYXRlcy9NYXBwaW5nRXhwcmVzc2lvbjJMb2NhbFZhci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21ldGhvZER1cGxpY2F0ZXMvTWFwcGluZ0V4cHJlc3Npb24yTG9jYWxWYXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OTY4MWRmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21ldGhvZER1cGxpY2F0ZXMvTWFwcGluZ0V4cHJlc3Npb24yTG9jYWxWYXIuamF2YQpAQCAtMCwwICsxLDEwIEBACitjbGFzcyBNYXBwaW5nIHsKKyAgcHVibGljIHZvaWQgPGNhcmV0Pm1ldGhvZCgpIHsKKyAgICBNYXBwaW5nIG0gPSBuZXcgTWFwcGluZygpOworICAgIE1hcHBpbmcgbTIgPSBtOworICB9CisKKyAgcHVibGljIHZvaWQgY29udGV4dCgpIHsKKyAgICBNYXBwaW5nIG0yID0gbmV3IE1hcHBpbmcoKTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21ldGhvZER1cGxpY2F0ZXMvTWFwcGluZ0V4cHJlc3Npb24yUGFyYW1ldGVyTFZhbHVlcy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21ldGhvZER1cGxpY2F0ZXMvTWFwcGluZ0V4cHJlc3Npb24yUGFyYW1ldGVyTFZhbHVlcy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFiNjNhMWMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbWV0aG9kRHVwbGljYXRlcy9NYXBwaW5nRXhwcmVzc2lvbjJQYXJhbWV0ZXJMVmFsdWVzLmphdmEKQEAgLTAsMCArMSwxMSBAQAorY2xhc3MgTWFwcGluZyB7CisgIHByaXZhdGUgTWFwcGluZyBteU1hcHBpbmc7CisKKyAgcHVibGljIHZvaWQgPGNhcmV0Pm1ldGhvZChNYXBwaW5nIG0pIHsKKyAgICBtID0gbnVsbDsKKyAgfQorCisgIHB1YmxpYyB2b2lkIGNvbnRleHQoKSB7CisgICAgdGhpcy5teU1hcHBpbmcgPSBudWxsOworICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbWV0aG9kRHVwbGljYXRlcy9NYXBwaW5nRXhwcmVzc2lvbjJQYXJhbWV0ZXJMVmFsdWVzLmphdmEuYWZ0ZXIgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbWV0aG9kRHVwbGljYXRlcy9NYXBwaW5nRXhwcmVzc2lvbjJQYXJhbWV0ZXJMVmFsdWVzLmphdmEuYWZ0ZXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2RlNGZlZgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tZXRob2REdXBsaWNhdGVzL01hcHBpbmdFeHByZXNzaW9uMlBhcmFtZXRlckxWYWx1ZXMuamF2YS5hZnRlcgpAQCAtMCwwICsxLDExIEBACitjbGFzcyBNYXBwaW5nIHsKKyAgcHJpdmF0ZSBNYXBwaW5nIG15TWFwcGluZzsKKworICBwdWJsaWMgdm9pZCA8Y2FyZXQ+bWV0aG9kKE1hcHBpbmcgbSkgeworICAgIG0gPSBudWxsOworICB9CisKKyAgcHVibGljIHZvaWQgY29udGV4dCgpIHsKKyAgICAgIG1ldGhvZCh0aGlzLm15TWFwcGluZyk7CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tZXRob2REdXBsaWNhdGVzL01hcHBpbmdFeHByZXNzaW9uMlBhcmFtZXRlckxpdGVyYWxzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbWV0aG9kRHVwbGljYXRlcy9NYXBwaW5nRXhwcmVzc2lvbjJQYXJhbWV0ZXJMaXRlcmFscy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUxODE5YTAKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbWV0aG9kRHVwbGljYXRlcy9NYXBwaW5nRXhwcmVzc2lvbjJQYXJhbWV0ZXJMaXRlcmFscy5qYXZhCkBAIC0wLDAgKzEsMTEgQEAKK2NsYXNzIE1hcHBpbmcgeworICBwcml2YXRlIGludCBteUludDsKKworICBwdWJsaWMgdm9pZCA8Y2FyZXQ+bWV0aG9kKGJvb2xlYW4gYiwgaW50IGksIGNoYXIgYywgZG91YmxlIGQsIGludFtdIGlhLCBTdHJpbmcgcykgeworICAgIG15SW50ID0gYiA/IGkgKyBjIC0gKGludClkOiBpYS5sZW5ndGggKyBzLmhhc2hDb2RlKCk7CisgIH0KKworICBwdWJsaWMgdm9pZCBjb250ZXh0KCkgeworICAgIG15SW50ID0gdHJ1ZSB8fCBmYWxzZSA/IDUgKyAneicgLSAoaW50KTMuMTQgOiBuZXcgaW50W10geyAwLCAxIH0ubGVuZ3RoICsgImFiYyIuaGFzaENvZGUoKTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21ldGhvZER1cGxpY2F0ZXMvTWFwcGluZ0V4cHJlc3Npb24yUGFyYW1ldGVyTGl0ZXJhbHMuamF2YS5hZnRlciBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tZXRob2REdXBsaWNhdGVzL01hcHBpbmdFeHByZXNzaW9uMlBhcmFtZXRlckxpdGVyYWxzLmphdmEuYWZ0ZXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzA3NmZkMgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tZXRob2REdXBsaWNhdGVzL01hcHBpbmdFeHByZXNzaW9uMlBhcmFtZXRlckxpdGVyYWxzLmphdmEuYWZ0ZXIKQEAgLTAsMCArMSwxMSBAQAorY2xhc3MgTWFwcGluZyB7CisgIHByaXZhdGUgaW50IG15SW50OworCisgIHB1YmxpYyB2b2lkIG1ldGhvZChib29sZWFuIGIsIGludCBpLCBjaGFyIGMsIGRvdWJsZSBkLCBpbnRbXSBpYSwgU3RyaW5nIHMpIHsKKyAgICBteUludCA9IGIgPyBpICsgYyAtIChpbnQpZDogaWEubGVuZ3RoICsgcy5oYXNoQ29kZSgpOworICB9CisKKyAgcHVibGljIHZvaWQgY29udGV4dCgpIHsKKyAgICAgIG1ldGhvZCh0cnVlIHx8IGZhbHNlLCA1LCAneicsIDMuMTQsIG5ldyBpbnRbXSB7IDAsIDEgfSwgImFiYyIpOworICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbWV0aG9kRHVwbGljYXRlcy9NYXBwaW5nRXhwcmVzc2lvbjJQYXJhbWV0ZXJNdWx0aXBsZS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21ldGhvZER1cGxpY2F0ZXMvTWFwcGluZ0V4cHJlc3Npb24yUGFyYW1ldGVyTXVsdGlwbGUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYjdhOGE3Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21ldGhvZER1cGxpY2F0ZXMvTWFwcGluZ0V4cHJlc3Npb24yUGFyYW1ldGVyTXVsdGlwbGUuamF2YQpAQCAtMCwwICsxLDIxIEBACitjbGFzcyBNYXBwaW5nIHsKKyAgcHJpdmF0ZSBpbnQgbXlJbnQ7CisKKyAgcHVibGljIHZvaWQgPGNhcmV0Pm1ldGhvZChpbnQgcDEsIGJvb2xlYW4gcDIpIHsKKyAgICBteUludCA9IHAyID8gcDEgOiAwOworICAgIGlmICghcDIpIHsKKyAgICAgIG15SW50ICo9IHAxOworICAgIH0KKyAgfQorCisgIHB1YmxpYyBib29sZWFuIHNheVllcygpIHsKKyAgICByZXR1cm4gdHJ1ZTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIGNvbnRleHQoKSB7CisgICAgbXlJbnQgPSBzYXlZZXMoKSA/IDE1IC8gNSA6IDA7CisgICAgaWYgKCFzYXlZZXMoKSkgeworICAgICAgbXlJbnQgKj0gMTUgLyA1OworICAgIH0KKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tZXRob2REdXBsaWNhdGVzL01hcHBpbmdFeHByZXNzaW9uMlBhcmFtZXRlck11bHRpcGxlLmphdmEuYWZ0ZXIgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbWV0aG9kRHVwbGljYXRlcy9NYXBwaW5nRXhwcmVzc2lvbjJQYXJhbWV0ZXJNdWx0aXBsZS5qYXZhLmFmdGVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA3NTgxMTgKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbWV0aG9kRHVwbGljYXRlcy9NYXBwaW5nRXhwcmVzc2lvbjJQYXJhbWV0ZXJNdWx0aXBsZS5qYXZhLmFmdGVyCkBAIC0wLDAgKzEsMTggQEAKK2NsYXNzIE1hcHBpbmcgeworICBwcml2YXRlIGludCBteUludDsKKworICBwdWJsaWMgdm9pZCA8Y2FyZXQ+bWV0aG9kKGludCBwMSwgYm9vbGVhbiBwMikgeworICAgIG15SW50ID0gcDIgPyBwMSA6IDA7CisgICAgaWYgKCFwMikgeworICAgICAgbXlJbnQgKj0gcDE7CisgICAgfQorICB9CisKKyAgcHVibGljIGJvb2xlYW4gc2F5WWVzKCkgeworICAgIHJldHVybiB0cnVlOworICB9CisKKyAgcHVibGljIHZvaWQgY29udGV4dCgpIHsKKyAgICAgIG1ldGhvZCgxNSAvIDUsIHNheVllcygpKTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tZXRob2REdXBsaWNhdGVzL01hcHBpbmdFeHByZXNzaW9uMlRoaXMuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tZXRob2REdXBsaWNhdGVzL01hcHBpbmdFeHByZXNzaW9uMlRoaXMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zN2FmODFjCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21ldGhvZER1cGxpY2F0ZXMvTWFwcGluZ0V4cHJlc3Npb24yVGhpcy5qYXZhCkBAIC0wLDAgKzEsOSBAQAorY2xhc3MgTWFwcGluZyB7CisgIHB1YmxpYyB2b2lkIDxjYXJldD5tZXRob2QoKSB7CisgICAgTWFwcGluZyBtMiA9IHRoaXM7CisgIH0KKworICBwdWJsaWMgdm9pZCBjb250ZXh0KCkgeworICAgIE1hcHBpbmcgbTIgPSBuZXcgTWFwcGluZygpOworICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbWV0aG9kRHVwbGljYXRlcy9NYXBwaW5nRmllbGQyRmllbGQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tZXRob2REdXBsaWNhdGVzL01hcHBpbmdGaWVsZDJGaWVsZC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUwMTA1OTcKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbWV0aG9kRHVwbGljYXRlcy9NYXBwaW5nRmllbGQyRmllbGQuamF2YQpAQCAtMCwwICsxLDE2IEBACitjbGFzcyBNYXBwaW5nMSB7CisgIHByaXZhdGUgaW50IG15SW50OworICBwdWJsaWMgdm9pZCA8Y2FyZXQ+bWV0aG9kKCkgeworICAgIGludCBpID0gbXlJbnQ7CisgIH0KKyAgcHVibGljIHZvaWQgY29udGV4dCgpIHsKKyAgICBpbnQgaSA9IG15SW50OworICB9Cit9CisKK2NsYXNzIE1hcHBpbmcyIHsKKyAgcHJpdmF0ZSBpbnQgbXlJbnQ7CisgIHB1YmxpYyB2b2lkIGNvbnRleHQoKSB7CisgICAgaW50IGkgPSBteUludDsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21ldGhvZER1cGxpY2F0ZXMvTWFwcGluZ0ZpZWxkMkZpZWxkLmphdmEuYWZ0ZXIgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbWV0aG9kRHVwbGljYXRlcy9NYXBwaW5nRmllbGQyRmllbGQuamF2YS5hZnRlcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYzQxODlhCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21ldGhvZER1cGxpY2F0ZXMvTWFwcGluZ0ZpZWxkMkZpZWxkLmphdmEuYWZ0ZXIKQEAgLTAsMCArMSwxNiBAQAorY2xhc3MgTWFwcGluZzEgeworICBwcml2YXRlIGludCBteUludDsKKyAgcHVibGljIHZvaWQgbWV0aG9kKCkgeworICAgIGludCBpID0gbXlJbnQ7CisgIH0KKyAgcHVibGljIHZvaWQgY29udGV4dCgpIHsKKyAgICAgIG1ldGhvZCgpOworICB9Cit9CisKK2NsYXNzIE1hcHBpbmcyIHsKKyAgcHJpdmF0ZSBpbnQgbXlJbnQ7CisgIHB1YmxpYyB2b2lkIGNvbnRleHQoKSB7CisgICAgaW50IGkgPSBteUludDsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21ldGhvZER1cGxpY2F0ZXMvTWFwcGluZ0ZpZWxkMkxvY2FsVmFyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbWV0aG9kRHVwbGljYXRlcy9NYXBwaW5nRmllbGQyTG9jYWxWYXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OTcwMDRkCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21ldGhvZER1cGxpY2F0ZXMvTWFwcGluZ0ZpZWxkMkxvY2FsVmFyLmphdmEKQEAgLTAsMCArMSwxMSBAQAorY2xhc3MgTWFwcGluZyB7CisgIHByaXZhdGUgaW50IG15SW50OworICBwcml2YXRlIE1hcHBpbmcgbXlNYXBwaW5nID0gbmV3IE1hcHBpbmcoKTsKKyAgcHVibGljIHZvaWQgPGNhcmV0Pm1ldGhvZCgpIHsKKyAgICBNYXBwaW5nIG0gPSBuZXcgTWFwcGluZygpOworICAgIG15SW50ICs9IG0uaGFzaENvZGUoKTsKKyAgfQorICBwdWJsaWMgdm9pZCBjb250ZXh0KCkgeworICAgIG15SW50ICs9IG15TWFwcGluZy5oYXNoQ29kZSgpOyAgCisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbWV0aG9kRHVwbGljYXRlcy9NYXBwaW5nRmllbGQyUGFyYW1ldGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbWV0aG9kRHVwbGljYXRlcy9NYXBwaW5nRmllbGQyUGFyYW1ldGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2VjNWE1MgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tZXRob2REdXBsaWNhdGVzL01hcHBpbmdGaWVsZDJQYXJhbWV0ZXIuamF2YQpAQCAtMCwwICsxLDE1IEBACitjbGFzcyBNYXBwaW5nIHsKKyAgcHJpdmF0ZSBpbnQgbXlJbnQ7CisKKyAgcHVibGljIHZvaWQgPGNhcmV0Pm1ldGhvZChpbnQgcCkgeworICAgIG15SW50ID0gcCArIDE7CisgIH0KKworICBwdWJsaWMgdm9pZCBjb250ZXh0MSgpIHsKKyAgICBteUludCA9IG15SW50ICsgMTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIGNvbnRleHQyKCkgeworICAgIG15SW50ID0gdGhpcy5teUludCArIDE7CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tZXRob2REdXBsaWNhdGVzL01hcHBpbmdGaWVsZDJQYXJhbWV0ZXIuamF2YS5hZnRlciBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tZXRob2REdXBsaWNhdGVzL01hcHBpbmdGaWVsZDJQYXJhbWV0ZXIuamF2YS5hZnRlcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNzhhMzgwCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21ldGhvZER1cGxpY2F0ZXMvTWFwcGluZ0ZpZWxkMlBhcmFtZXRlci5qYXZhLmFmdGVyCkBAIC0wLDAgKzEsMTUgQEAKK2NsYXNzIE1hcHBpbmcgeworICBwcml2YXRlIGludCBteUludDsKKworICBwdWJsaWMgdm9pZCBtZXRob2QoaW50IHApIHsKKyAgICBteUludCA9IHAgKyAxOworICB9CisKKyAgcHVibGljIHZvaWQgY29udGV4dDEoKSB7CisgICAgICBtZXRob2QobXlJbnQpOworICB9CisKKyAgcHVibGljIHZvaWQgY29udGV4dDIoKSB7CisgICAgICBtZXRob2QodGhpcy5teUludCk7CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tZXRob2REdXBsaWNhdGVzL01hcHBpbmdGaWVsZDJUaGlzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbWV0aG9kRHVwbGljYXRlcy9NYXBwaW5nRmllbGQyVGhpcy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNmOGNjNzcKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbWV0aG9kRHVwbGljYXRlcy9NYXBwaW5nRmllbGQyVGhpcy5qYXZhCkBAIC0wLDAgKzEsMTIgQEAKK2NsYXNzIE1hcHBpbmcgeworICBwcml2YXRlIGludCBteUludDsKKyAgcHJpdmF0ZSBNYXBwaW5nIG15RmllbGQ7CisKKyAgcHVibGljIHZvaWQgPGNhcmV0Pm1ldGhvZCgpIHsKKyAgICBteUludCA9IGhhc2hDb2RlKCk7CisgIH0KKworICBwdWJsaWMgdm9pZCBjb250ZXh0KCkgeworICAgIG15SW50ID0gbXlGaWVsZC5oYXNoQ29kZSgpOworICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbWV0aG9kRHVwbGljYXRlcy9NYXBwaW5nTG9jYWxWYXIyRXhwcmVzc2lvbi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21ldGhvZER1cGxpY2F0ZXMvTWFwcGluZ0xvY2FsVmFyMkV4cHJlc3Npb24uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMjM1ZDhhCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21ldGhvZER1cGxpY2F0ZXMvTWFwcGluZ0xvY2FsVmFyMkV4cHJlc3Npb24uamF2YQpAQCAtMCwwICsxLDEzIEBACitjbGFzcyBNYXBwaW5nIHsKKyAgcHJpdmF0ZSBpbnQgbXlJbnQ7CisKKyAgcHVibGljIHZvaWQgPGNhcmV0Pm1ldGhvZCgpIHsKKyAgICBpbnQgY29udGV4dFZhciA9IDE7CisgICAgbXlJbnQgKz0gY29udGV4dFZhciArIDE7CisgIH0KKworICBwdWJsaWMgdm9pZCBjb250ZXh0KCkgeworICAgIGludCBjb250ZXh0VmFyID0gMTsKKyAgICBteUludCArPSBjb250ZXh0VmFyOworICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbWV0aG9kRHVwbGljYXRlcy9NYXBwaW5nTG9jYWxWYXIyRmllbGQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tZXRob2REdXBsaWNhdGVzL01hcHBpbmdMb2NhbFZhcjJGaWVsZC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMwNzc0NDkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbWV0aG9kRHVwbGljYXRlcy9NYXBwaW5nTG9jYWxWYXIyRmllbGQuamF2YQpAQCAtMCwwICsxLDEyIEBACitjbGFzcyBNYXBwaW5nIHsKKyAgcHJpdmF0ZSBNYXBwaW5nIG15TWFwcGluZzsKKworICBwdWJsaWMgdm9pZCA8Y2FyZXQ+bWV0aG9kKCkgeworICAgIE1hcHBpbmcgbTIgPSBteU1hcHBpbmc7CisgIH0KKworICBwdWJsaWMgdm9pZCBjb250ZXh0KCkgeworICAgIE1hcHBpbmcgbSA9IG5ldyBNYXBwaW5nKCk7CisgICAgTWFwcGluZyBtMiA9IG07CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tZXRob2REdXBsaWNhdGVzL01hcHBpbmdMb2NhbFZhcjJMb2NhbFZhci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21ldGhvZER1cGxpY2F0ZXMvTWFwcGluZ0xvY2FsVmFyMkxvY2FsVmFyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTBhYjdiYgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tZXRob2REdXBsaWNhdGVzL01hcHBpbmdMb2NhbFZhcjJMb2NhbFZhci5qYXZhCkBAIC0wLDAgKzEsMTEgQEAKK2NsYXNzIE1hcHBpbmcgeworICBwdWJsaWMgdm9pZCA8Y2FyZXQ+bWV0aG9kKCkgeworICAgIE1hcHBpbmcgbWV0aG9kVmFyID0gbmV3IE1hcHBpbmcoKTsKKyAgICBtZXRob2RWYXIuaGFzaENvZGUoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIGNvbnRleHQoKSB7CisgICAgTWFwcGluZyBjb250ZXh0VmFyID0gbmV3IE1hcHBpbmcoKTsKKyAgICBjb250ZXh0VmFyLmhhc2hDb2RlKCk7CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tZXRob2REdXBsaWNhdGVzL01hcHBpbmdMb2NhbFZhcjJMb2NhbFZhci5qYXZhLmFmdGVyIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21ldGhvZER1cGxpY2F0ZXMvTWFwcGluZ0xvY2FsVmFyMkxvY2FsVmFyLmphdmEuYWZ0ZXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTI2OWFkOAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tZXRob2REdXBsaWNhdGVzL01hcHBpbmdMb2NhbFZhcjJMb2NhbFZhci5qYXZhLmFmdGVyCkBAIC0wLDAgKzEsMTAgQEAKK2NsYXNzIE1hcHBpbmcgeworICBwdWJsaWMgdm9pZCBtZXRob2QoKSB7CisgICAgTWFwcGluZyBtZXRob2RWYXIgPSBuZXcgTWFwcGluZygpOworICAgIG1ldGhvZFZhci5oYXNoQ29kZSgpOworICB9CisKKyAgcHVibGljIHZvaWQgY29udGV4dCgpIHsKKyAgICAgIG1ldGhvZCgpOworICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbWV0aG9kRHVwbGljYXRlcy9NYXBwaW5nTG9jYWxWYXIyUGFyYW1ldGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbWV0aG9kRHVwbGljYXRlcy9NYXBwaW5nTG9jYWxWYXIyUGFyYW1ldGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2MxOTZlYwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tZXRob2REdXBsaWNhdGVzL01hcHBpbmdMb2NhbFZhcjJQYXJhbWV0ZXIuamF2YQpAQCAtMCwwICsxLDEwIEBACitjbGFzcyBNYXBwaW5nIHsKKyAgcHVibGljIHZvaWQgPGNhcmV0Pm1ldGhvZChNYXBwaW5nIG1ldGhvZFBhcikgeworICAgIG1ldGhvZFBhci5oYXNoQ29kZSgpOworICB9CisKKyAgcHVibGljIHZvaWQgY29udGV4dCgpIHsKKyAgICBNYXBwaW5nIGNvbnRleHRWYXIgPSBuZXcgTWFwcGluZygpOworICAgIGNvbnRleHRWYXIuaGFzaENvZGUoKTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21ldGhvZER1cGxpY2F0ZXMvTWFwcGluZ0xvY2FsVmFyMlBhcmFtZXRlci5qYXZhLmFmdGVyIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21ldGhvZER1cGxpY2F0ZXMvTWFwcGluZ0xvY2FsVmFyMlBhcmFtZXRlci5qYXZhLmFmdGVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQyYTg0ZDcKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbWV0aG9kRHVwbGljYXRlcy9NYXBwaW5nTG9jYWxWYXIyUGFyYW1ldGVyLmphdmEuYWZ0ZXIKQEAgLTAsMCArMSwxMCBAQAorY2xhc3MgTWFwcGluZyB7CisgIHB1YmxpYyB2b2lkIG1ldGhvZChNYXBwaW5nIG1ldGhvZFBhcikgeworICAgIG1ldGhvZFBhci5oYXNoQ29kZSgpOworICB9CisKKyAgcHVibGljIHZvaWQgY29udGV4dCgpIHsKKyAgICBNYXBwaW5nIGNvbnRleHRWYXIgPSBuZXcgTWFwcGluZygpOworICAgICAgbWV0aG9kKGNvbnRleHRWYXIpOworICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbWV0aG9kRHVwbGljYXRlcy9NYXBwaW5nTG9jYWxWYXIyVGhpcy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21ldGhvZER1cGxpY2F0ZXMvTWFwcGluZ0xvY2FsVmFyMlRoaXMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NjQ0OWM1Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21ldGhvZER1cGxpY2F0ZXMvTWFwcGluZ0xvY2FsVmFyMlRoaXMuamF2YQpAQCAtMCwwICsxLDEwIEBACitjbGFzcyBNYXBwaW5nIHsKKyAgcHVibGljIHZvaWQgPGNhcmV0Pm1ldGhvZCgpIHsKKyAgICBNYXBwaW5nIG0yID0gdGhpczsKKyAgfQorCisgIHB1YmxpYyB2b2lkIGNvbnRleHQoKSB7CisgICAgTWFwcGluZyBtID0gbmV3IE1hcHBpbmcoKTsKKyAgICBNYXBwaW5nIG0yID0gbTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21ldGhvZER1cGxpY2F0ZXMvTWFwcGluZ01lbWJlcjJNZW1iZXJEaWZmZXJlbnQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tZXRob2REdXBsaWNhdGVzL01hcHBpbmdNZW1iZXIyTWVtYmVyRGlmZmVyZW50LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTE1MmQ5OAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tZXRob2REdXBsaWNhdGVzL01hcHBpbmdNZW1iZXIyTWVtYmVyRGlmZmVyZW50LmphdmEKQEAgLTAsMCArMSwxMCBAQAorY2xhc3MgTWFwcGluZyB7CisgIHB1YmxpYyB2b2lkIDxjYXJldD5tZXRob2QoKSB7CisgICAgdG9TdHJpbmcoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIGNvbnRleHQoKSB7CisgICAgTWFwcGluZyBtID0gbmV3IE1hcHBpbmcoKTsKKyAgICBtLnRvU3RyaW5nKCk7CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tZXRob2REdXBsaWNhdGVzL01hcHBpbmdNZW1iZXIyTWVtYmVyRGlmZmVyZW50LmphdmEuYWZ0ZXIgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbWV0aG9kRHVwbGljYXRlcy9NYXBwaW5nTWVtYmVyMk1lbWJlckRpZmZlcmVudC5qYXZhLmFmdGVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY5MTU5ZTgKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbWV0aG9kRHVwbGljYXRlcy9NYXBwaW5nTWVtYmVyMk1lbWJlckRpZmZlcmVudC5qYXZhLmFmdGVyCkBAIC0wLDAgKzEsMTAgQEAKK2NsYXNzIE1hcHBpbmcgeworICBwdWJsaWMgdm9pZCBtZXRob2QoKSB7CisgICAgdG9TdHJpbmcoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIGNvbnRleHQoKSB7CisgICAgTWFwcGluZyBtID0gbmV3IE1hcHBpbmcoKTsKKyAgICAgIG0ubWV0aG9kKCk7CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tZXRob2REdXBsaWNhdGVzL01hcHBpbmdQYXJhbWV0ZXIyRmllbGQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tZXRob2REdXBsaWNhdGVzL01hcHBpbmdQYXJhbWV0ZXIyRmllbGQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OTg2ZDIwCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21ldGhvZER1cGxpY2F0ZXMvTWFwcGluZ1BhcmFtZXRlcjJGaWVsZC5qYXZhCkBAIC0wLDAgKzEsMTEgQEAKK2NsYXNzIE1hcHBpbmcgeworICBwcml2YXRlIE1hcHBpbmcgbXlNYXBwaW5nOworCisgIHB1YmxpYyB2b2lkIDxjYXJldD5tZXRob2QoKSB7CisgICAgTWFwcGluZyBtMiA9IG15TWFwcGluZzsKKyAgfQorCisgIHB1YmxpYyB2b2lkIGNvbnRleHQoTWFwcGluZyBtKSB7CisgICAgTWFwcGluZyBtMiA9IG07CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tZXRob2REdXBsaWNhdGVzL01hcHBpbmdQYXJhbWV0ZXIyTG9jYWxWYXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tZXRob2REdXBsaWNhdGVzL01hcHBpbmdQYXJhbWV0ZXIyTG9jYWxWYXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MWZkMjJhCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21ldGhvZER1cGxpY2F0ZXMvTWFwcGluZ1BhcmFtZXRlcjJMb2NhbFZhci5qYXZhCkBAIC0wLDAgKzEsMTAgQEAKK2NsYXNzIE1hcHBpbmcgeworICBwdWJsaWMgdm9pZCA8Y2FyZXQ+bWV0aG9kKCkgeworICAgIE1hcHBpbmcgbSA9IG5ldyBNYXBwaW5nKCk7CisgICAgTWFwcGluZyBtMiA9IG07CisgIH0KKworICBwdWJsaWMgdm9pZCBjb250ZXh0KE1hcHBpbmcgbSkgeworICAgIE1hcHBpbmcgbTIgPSBtOworICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbWV0aG9kRHVwbGljYXRlcy9NYXBwaW5nUGFyYW1ldGVyMlBhcmFtZXRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21ldGhvZER1cGxpY2F0ZXMvTWFwcGluZ1BhcmFtZXRlcjJQYXJhbWV0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOThjYjE4Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21ldGhvZER1cGxpY2F0ZXMvTWFwcGluZ1BhcmFtZXRlcjJQYXJhbWV0ZXIuamF2YQpAQCAtMCwwICsxLDkgQEAKK2NsYXNzIE1hcHBpbmcgeworICBwdWJsaWMgdm9pZCA8Y2FyZXQ+bWV0aG9kKE1hcHBpbmcgbWV0aG9kTWFwcGluZykgeworICAgIG1ldGhvZE1hcHBpbmcuaGFzaENvZGUoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIGNvbnRleHQoTWFwcGluZyBjb250ZXh0TWFwcGluZykgeworICAgIGNvbnRleHRNYXBwaW5nLmhhc2hDb2RlKCk7CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tZXRob2REdXBsaWNhdGVzL01hcHBpbmdQYXJhbWV0ZXIyUGFyYW1ldGVyLmphdmEuYWZ0ZXIgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbWV0aG9kRHVwbGljYXRlcy9NYXBwaW5nUGFyYW1ldGVyMlBhcmFtZXRlci5qYXZhLmFmdGVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkxNWMyMzQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbWV0aG9kRHVwbGljYXRlcy9NYXBwaW5nUGFyYW1ldGVyMlBhcmFtZXRlci5qYXZhLmFmdGVyCkBAIC0wLDAgKzEsOSBAQAorY2xhc3MgTWFwcGluZyB7CisgIHB1YmxpYyB2b2lkIDxjYXJldD5tZXRob2QoTWFwcGluZyBtZXRob2RNYXBwaW5nKSB7CisgICAgbWV0aG9kTWFwcGluZy5oYXNoQ29kZSgpOworICB9CisKKyAgcHVibGljIHZvaWQgY29udGV4dChNYXBwaW5nIGNvbnRleHRNYXBwaW5nKSB7CisgICAgICBtZXRob2QoY29udGV4dE1hcHBpbmcpOworICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbWV0aG9kRHVwbGljYXRlcy9NYXBwaW5nUGFyYW1ldGVyMlRoaXMuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tZXRob2REdXBsaWNhdGVzL01hcHBpbmdQYXJhbWV0ZXIyVGhpcy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM0YTJkMTIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbWV0aG9kRHVwbGljYXRlcy9NYXBwaW5nUGFyYW1ldGVyMlRoaXMuamF2YQpAQCAtMCwwICsxLDkgQEAKK2NsYXNzIE1hcHBpbmcgeworICBwdWJsaWMgdm9pZCA8Y2FyZXQ+bWV0aG9kKCkgeworICAgIE1hcHBpbmcgbTIgPSB0aGlzOworICB9CisKKyAgcHVibGljIHZvaWQgY29udGV4dChNYXBwaW5nIG0pIHsKKyAgICBNYXBwaW5nIG0yID0gbTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21ldGhvZER1cGxpY2F0ZXMvTWFwcGluZ1RoaXMyRmllbGQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tZXRob2REdXBsaWNhdGVzL01hcHBpbmdUaGlzMkZpZWxkLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzZlMjM1ZAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tZXRob2REdXBsaWNhdGVzL01hcHBpbmdUaGlzMkZpZWxkLmphdmEKQEAgLTAsMCArMSwxNiBAQAorY2xhc3MgTWFwcGluZyB7CisgIHByaXZhdGUgaW50IG15SW50OworICBwcml2YXRlIE1hcHBpbmcgbXlGaWVsZDsKKworICBwdWJsaWMgdm9pZCA8Y2FyZXQ+bWV0aG9kKCkgeworICAgIG15SW50ID0gbXlGaWVsZC5oYXNoQ29kZSgpOworICB9CisKKyAgcHVibGljIHZvaWQgY29udGV4dDEoKSB7CisgICAgbXlJbnQgPSBoYXNoQ29kZSgpOworICB9CisKKyAgcHVibGljIHZvaWQgY29udGV4dDIoKSB7CisgICAgbXlJbnQgPSB0aGlzLmhhc2hDb2RlKCk7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbWV0aG9kRHVwbGljYXRlcy9NYXBwaW5nVGhpczJMb2NhbFZhci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21ldGhvZER1cGxpY2F0ZXMvTWFwcGluZ1RoaXMyTG9jYWxWYXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYzBjODhiCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21ldGhvZER1cGxpY2F0ZXMvTWFwcGluZ1RoaXMyTG9jYWxWYXIuamF2YQpAQCAtMCwwICsxLDEwIEBACitjbGFzcyBNYXBwaW5nIHsKKyAgcHJpdmF0ZSBpbnQgbXlJbnQ7CisgIHB1YmxpYyB2b2lkIDxjYXJldD5tZXRob2QoKSB7CisgICAgTWFwcGluZyBtID0gbmV3IE1hcHBpbmcoKTsKKyAgICBteUludCArPSBtLmhhc2hDb2RlKCk7CisgIH0KKyAgcHVibGljIHZvaWQgY29udGV4dCgpIHsKKyAgICBteUludCArPSBoYXNoQ29kZSgpOyAgCisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbWV0aG9kRHVwbGljYXRlcy9NYXBwaW5nVGhpczJQYXJhbWV0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tZXRob2REdXBsaWNhdGVzL01hcHBpbmdUaGlzMlBhcmFtZXRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlmOTBjNjUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbWV0aG9kRHVwbGljYXRlcy9NYXBwaW5nVGhpczJQYXJhbWV0ZXIuamF2YQpAQCAtMCwwICsxLDE2IEBACitjbGFzcyBNYXBwaW5nIHsKKyAgcHJpdmF0ZSBpbnQgbXlJbnQ7CisgIHByaXZhdGUgTWFwcGluZyBteUZpZWxkOworCisgIHB1YmxpYyB2b2lkIDxjYXJldD5tZXRob2QoTWFwcGluZyBtKSB7CisgICAgbXlJbnQgPSBtLmhhc2hDb2RlKCk7CisgIH0KKworICBwdWJsaWMgdm9pZCBjb250ZXh0MSgpIHsKKyAgICBteUludCA9IGhhc2hDb2RlKCk7CisgIH0KKworICBwdWJsaWMgdm9pZCBjb250ZXh0MigpIHsKKyAgICBteUludCA9IHRoaXMuaGFzaENvZGUoKTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21ldGhvZER1cGxpY2F0ZXMvTWFwcGluZ1RoaXMyUGFyYW1ldGVyLmphdmEuYWZ0ZXIgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbWV0aG9kRHVwbGljYXRlcy9NYXBwaW5nVGhpczJQYXJhbWV0ZXIuamF2YS5hZnRlcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45Y2QyYWM0Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21ldGhvZER1cGxpY2F0ZXMvTWFwcGluZ1RoaXMyUGFyYW1ldGVyLmphdmEuYWZ0ZXIKQEAgLTAsMCArMSwxNiBAQAorY2xhc3MgTWFwcGluZyB7CisgIHByaXZhdGUgaW50IG15SW50OworICBwcml2YXRlIE1hcHBpbmcgbXlGaWVsZDsKKworICBwdWJsaWMgdm9pZCBtZXRob2QoTWFwcGluZyBtKSB7CisgICAgbXlJbnQgPSBtLmhhc2hDb2RlKCk7CisgIH0KKworICBwdWJsaWMgdm9pZCBjb250ZXh0MSgpIHsKKyAgICAgIG1ldGhvZChNYXBwaW5nLnRoaXMpOworICB9CisKKyAgcHVibGljIHZvaWQgY29udGV4dDIoKSB7CisgICAgICBtZXRob2QodGhpcyk7CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tZXRob2REdXBsaWNhdGVzL01hcHBpbmdUaGlzMlRoaXNEaWZmZXJlbnQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tZXRob2REdXBsaWNhdGVzL01hcHBpbmdUaGlzMlRoaXNEaWZmZXJlbnQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOTlkYjhlCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21ldGhvZER1cGxpY2F0ZXMvTWFwcGluZ1RoaXMyVGhpc0RpZmZlcmVudC5qYXZhCkBAIC0wLDAgKzEsMTYgQEAKK2NsYXNzIE1hcHBpbmcxIHsKKyAgcHJpdmF0ZSBpbnQgbXlJbnQ7CisgIHB1YmxpYyB2b2lkIDxjYXJldD5tZXRob2QoKSB7CisgICAgT2JqZWN0IG8gPSB0aGlzOworICB9CisgIHB1YmxpYyB2b2lkIGNvbnRleHQoKSB7CisgICAgT2JqZWN0IG8gPSB0aGlzOworICB9Cit9CisKK2NsYXNzIE1hcHBpbmcyIHsKKyAgcHJpdmF0ZSBpbnQgbXlJbnQ7CisgIHB1YmxpYyB2b2lkIGNvbnRleHQoKSB7CisgICAgT2JqZWN0IG8gPSB0aGlzOworICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbWV0aG9kRHVwbGljYXRlcy9NYXBwaW5nVGhpczJUaGlzRGlmZmVyZW50LmphdmEuYWZ0ZXIgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbWV0aG9kRHVwbGljYXRlcy9NYXBwaW5nVGhpczJUaGlzRGlmZmVyZW50LmphdmEuYWZ0ZXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjEyODVmNQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tZXRob2REdXBsaWNhdGVzL01hcHBpbmdUaGlzMlRoaXNEaWZmZXJlbnQuamF2YS5hZnRlcgpAQCAtMCwwICsxLDE2IEBACitjbGFzcyBNYXBwaW5nMSB7CisgIHByaXZhdGUgaW50IG15SW50OworICBwdWJsaWMgdm9pZCBtZXRob2QoKSB7CisgICAgT2JqZWN0IG8gPSB0aGlzOworICB9CisgIHB1YmxpYyB2b2lkIGNvbnRleHQoKSB7CisgICAgICBtZXRob2QoKTsKKyAgfQorfQorCitjbGFzcyBNYXBwaW5nMiB7CisgIHByaXZhdGUgaW50IG15SW50OworICBwdWJsaWMgdm9pZCBjb250ZXh0KCkgeworICAgIE9iamVjdCBvID0gdGhpczsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21ldGhvZER1cGxpY2F0ZXMvTWFwcGluZ1RoaXMyVGhpc1F1YWxpZmllZC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21ldGhvZER1cGxpY2F0ZXMvTWFwcGluZ1RoaXMyVGhpc1F1YWxpZmllZC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMxMGI5YjcKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbWV0aG9kRHVwbGljYXRlcy9NYXBwaW5nVGhpczJUaGlzUXVhbGlmaWVkLmphdmEKQEAgLTAsMCArMSwxNSBAQAorY2xhc3MgTWFwcGluZyB7CisgIHByaXZhdGUgaW50IG15SW50OworCisgIHB1YmxpYyB2b2lkIDxjYXJldD5tZXRob2QoKSB7CisgICAgdGhpcy5teUludCsrOworICAgIE1hcHBpbmcudGhpcy5teUludC0tOworICAgIG15SW50ICs9IGhhc2hDb2RlKCk7CisgIH0KKworICBwdWJsaWMgdm9pZCBjb250ZXh0KCkgeworICAgIG15SW50Kys7CisgICAgdGhpcy5teUludC0tOworICAgIG15SW50ICs9IGhhc2hDb2RlKCk7CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tZXRob2REdXBsaWNhdGVzL01hcHBpbmdUaGlzMlRoaXNRdWFsaWZpZWQuamF2YS5hZnRlciBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tZXRob2REdXBsaWNhdGVzL01hcHBpbmdUaGlzMlRoaXNRdWFsaWZpZWQuamF2YS5hZnRlcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNjIyODI4Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21ldGhvZER1cGxpY2F0ZXMvTWFwcGluZ1RoaXMyVGhpc1F1YWxpZmllZC5qYXZhLmFmdGVyCkBAIC0wLDAgKzEsMTMgQEAKK2NsYXNzIE1hcHBpbmcgeworICBwcml2YXRlIGludCBteUludDsKKworICBwdWJsaWMgdm9pZCBtZXRob2QoKSB7CisgICAgdGhpcy5teUludCsrOworICAgIE1hcHBpbmcudGhpcy5teUludC0tOworICAgIG15SW50ICs9IGhhc2hDb2RlKCk7CisgIH0KKworICBwdWJsaWMgdm9pZCBjb250ZXh0KCkgeworICAgICAgbWV0aG9kKCk7CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tZXRob2REdXBsaWNhdGVzL1Bvc3RGcmFnbWVudFVzYWdlLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbWV0aG9kRHVwbGljYXRlcy9Qb3N0RnJhZ21lbnRVc2FnZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmExYzE4YjkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbWV0aG9kRHVwbGljYXRlcy9Qb3N0RnJhZ21lbnRVc2FnZS5qYXZhCkBAIC0wLDAgKzEsNDMgQEAKK2NsYXNzIFBvc3QgeworICBwcml2YXRlIGludCBteUZpZWxkOworCisgIHB1YmxpYyBpbnQgPGNhcmV0Pm1ldGhvZChpbnQgcGFyYW0sIGludCB2YXJGcmVlKSB7CisgICAgaW50IHZhckluY2Fwc3VsYXRlZCA9IDI7CisgICAgcmV0dXJuIHZhckZyZWUgKyB2YXJJbmNhcHN1bGF0ZWQgKyBwYXJhbSArIG15RmllbGQgKyB0aGlzLmhhc2hDb2RlKCk7CisgIH0KKworICBwdWJsaWMgdm9pZCBjb250ZXh0VmFyRnJlZShpbnQgcGFyYW0pIHsKKyAgICBpbnQgdmFyRnJlZSA9IDE7CisgICAgaW50IHZhckluY2Fwc3VsYXRlZCA9IDI7CisgICAgaW50IHZhciA9IHZhckZyZWUgKyB2YXJJbmNhcHN1bGF0ZWQgKyBwYXJhbSArIG15RmllbGQgKyB0aGlzLmhhc2hDb2RlKCk7CisgICAgaW50IHZhclBvc3QgPSB2YXJGcmVlOworICB9CisKKyAgcHVibGljIHZvaWQgY29udGV4dFZhckluY2Fwc3VsYXRlZChpbnQgcGFyYW0pIHsKKyAgICBpbnQgdmFyRnJlZSA9IDE7CisgICAgaW50IHZhckluY2Fwc3VsYXRlZCA9IDI7CisgICAgaW50IHZhciA9IHZhckZyZWUgKyB2YXJJbmNhcHN1bGF0ZWQgKyBwYXJhbSArIG15RmllbGQgKyB0aGlzLmhhc2hDb2RlKCk7CisgICAgaW50IHZhclBvc3QgPSB2YXJJbmNhcHN1bGF0ZWQ7CisgIH0KKworICBwdWJsaWMgdm9pZCBjb250ZXh0UGFyYW0oaW50IHBhcmFtKSB7CisgICAgaW50IHZhckZyZWUgPSAxOworICAgIGludCB2YXJJbmNhcHN1bGF0ZWQgPSAyOworICAgIGludCB2YXIgPSB2YXJGcmVlICsgdmFySW5jYXBzdWxhdGVkICsgcGFyYW0gKyBteUZpZWxkICsgdGhpcy5oYXNoQ29kZSgpOworICAgIGludCB2YXJQb3N0ID0gcGFyYW07CisgIH0KKworICBwdWJsaWMgdm9pZCBjb250ZXh0RmllbGQoaW50IHBhcmFtKSB7CisgICAgaW50IHZhckZyZWUgPSAxOworICAgIGludCB2YXJJbmNhcHN1bGF0ZWQgPSAyOworICAgIGludCB2YXIgPSB2YXJGcmVlICsgdmFySW5jYXBzdWxhdGVkICsgcGFyYW0gKyBteUZpZWxkICsgdGhpcy5oYXNoQ29kZSgpOworICAgIGludCB2YXJQb3N0ID0gbXlGaWVsZDsKKyAgfQorCisgIHB1YmxpYyB2b2lkIGNvbnRleHRUaGlzKGludCBwYXJhbSkgeworICAgIGludCB2YXJGcmVlID0gMTsKKyAgICBpbnQgdmFySW5jYXBzdWxhdGVkID0gMjsKKyAgICBpbnQgdmFyID0gdmFyRnJlZSArIHZhckluY2Fwc3VsYXRlZCArIHBhcmFtICsgbXlGaWVsZCArIHRoaXMuaGFzaENvZGUoKTsKKyAgICBpbnQgdmFyUG9zdCA9IHRoaXMuaGFzaENvZGUoKTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21ldGhvZER1cGxpY2F0ZXMvUG9zdEZyYWdtZW50VXNhZ2UuamF2YS5hZnRlciBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tZXRob2REdXBsaWNhdGVzL1Bvc3RGcmFnbWVudFVzYWdlLmphdmEuYWZ0ZXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjg3YjQ3MAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tZXRob2REdXBsaWNhdGVzL1Bvc3RGcmFnbWVudFVzYWdlLmphdmEuYWZ0ZXIKQEAgLTAsMCArMSwzOSBAQAorY2xhc3MgUG9zdCB7CisgIHByaXZhdGUgaW50IG15RmllbGQ7CisKKyAgcHVibGljIGludCBtZXRob2QoaW50IHBhcmFtLCBpbnQgdmFyRnJlZSkgeworICAgIGludCB2YXJJbmNhcHN1bGF0ZWQgPSAyOworICAgIHJldHVybiB2YXJGcmVlICsgdmFySW5jYXBzdWxhdGVkICsgcGFyYW0gKyBteUZpZWxkICsgdGhpcy5oYXNoQ29kZSgpOworICB9CisKKyAgcHVibGljIHZvaWQgY29udGV4dFZhckZyZWUoaW50IHBhcmFtKSB7CisgICAgaW50IHZhckZyZWUgPSAxOworICAgICAgaW50IHZhciA9IG1ldGhvZChwYXJhbSwgdmFyRnJlZSk7CisgICAgaW50IHZhclBvc3QgPSB2YXJGcmVlOworICB9CisKKyAgcHVibGljIHZvaWQgY29udGV4dFZhckluY2Fwc3VsYXRlZChpbnQgcGFyYW0pIHsKKyAgICBpbnQgdmFyRnJlZSA9IDE7CisgICAgaW50IHZhckluY2Fwc3VsYXRlZCA9IDI7CisgICAgaW50IHZhciA9IHZhckZyZWUgKyB2YXJJbmNhcHN1bGF0ZWQgKyBwYXJhbSArIG15RmllbGQgKyB0aGlzLmhhc2hDb2RlKCk7CisgICAgaW50IHZhclBvc3QgPSB2YXJJbmNhcHN1bGF0ZWQ7CisgIH0KKworICBwdWJsaWMgdm9pZCBjb250ZXh0UGFyYW0oaW50IHBhcmFtKSB7CisgICAgaW50IHZhckZyZWUgPSAxOworICAgICAgaW50IHZhciA9IG1ldGhvZChwYXJhbSwgdmFyRnJlZSk7CisgICAgaW50IHZhclBvc3QgPSBwYXJhbTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIGNvbnRleHRGaWVsZChpbnQgcGFyYW0pIHsKKyAgICBpbnQgdmFyRnJlZSA9IDE7CisgICAgICBpbnQgdmFyID0gbWV0aG9kKHBhcmFtLCB2YXJGcmVlKTsKKyAgICBpbnQgdmFyUG9zdCA9IG15RmllbGQ7CisgIH0KKworICBwdWJsaWMgdm9pZCBjb250ZXh0VGhpcyhpbnQgcGFyYW0pIHsKKyAgICBpbnQgdmFyRnJlZSA9IDE7CisgICAgICBpbnQgdmFyID0gbWV0aG9kKHBhcmFtLCB2YXJGcmVlKTsKKyAgICBpbnQgdmFyUG9zdCA9IHRoaXMuaGFzaENvZGUoKTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21ldGhvZER1cGxpY2F0ZXMvUmVmUmVwbGFjZW1lbnQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tZXRob2REdXBsaWNhdGVzL1JlZlJlcGxhY2VtZW50LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDY2OGQyYQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tZXRob2REdXBsaWNhdGVzL1JlZlJlcGxhY2VtZW50LmphdmEKQEAgLTAsMCArMSwxMyBAQAorY2xhc3MgVGVzdCB7CisgIHN0YXRpYyB2b2lkIDxjYXJldD5tYWluKFRlc3QgdCl7CisgICAgaWYgKHRydWUpIHQuZm9vKCk7CisgIH0KKworICB2b2lkIGZvbygpe30KK30KKworY2xhc3MgVGVzdDEgeworICB2b2lkIGJhcihUZXN0IHQpIHsKKyAgICBpZiAodHJ1ZSkge3QuZm9vKCk7fQorICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21ldGhvZER1cGxpY2F0ZXMvUmVmUmVwbGFjZW1lbnQuamF2YS5hZnRlciBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tZXRob2REdXBsaWNhdGVzL1JlZlJlcGxhY2VtZW50LmphdmEuYWZ0ZXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTI2NDUzMwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tZXRob2REdXBsaWNhdGVzL1JlZlJlcGxhY2VtZW50LmphdmEuYWZ0ZXIKQEAgLTAsMCArMSwxMyBAQAorY2xhc3MgVGVzdCB7CisgIHN0YXRpYyB2b2lkIG1haW4oVGVzdCB0KXsKKyAgICBpZiAodHJ1ZSkgdC5mb28oKTsKKyAgfQorCisgIHZvaWQgZm9vKCl7fQorfQorCitjbGFzcyBUZXN0MSB7CisgIHZvaWQgYmFyKFRlc3QgdCkgeworICAgICAgVGVzdC5tYWluKHQpOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21ldGhvZER1cGxpY2F0ZXMvUmVmUmVwbGFjZW1lbnQxLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbWV0aG9kRHVwbGljYXRlcy9SZWZSZXBsYWNlbWVudDEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41Zjc3MmMwCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21ldGhvZER1cGxpY2F0ZXMvUmVmUmVwbGFjZW1lbnQxLmphdmEKQEAgLTAsMCArMSwxMyBAQAorY2xhc3MgVGVzdCB7CisgICAgdm9pZCBiYXIoKSB7fQorCisgICAgcHVibGljIHZvaWQgbWFpbigpIHsKKyAgICAgICAgYmFyKCk7CisgICAgfQorfQorCitjbGFzcyBUZXN0MSB7CisgIHZvaWQgPGNhcmV0PmZvbyhUZXN0IHQpIHsKKyAgICAgIHQuYmFyKCk7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbWV0aG9kRHVwbGljYXRlcy9SZWZSZXBsYWNlbWVudDEuamF2YS5hZnRlciBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tZXRob2REdXBsaWNhdGVzL1JlZlJlcGxhY2VtZW50MS5qYXZhLmFmdGVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU3ODEwZDIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbWV0aG9kRHVwbGljYXRlcy9SZWZSZXBsYWNlbWVudDEuamF2YS5hZnRlcgpAQCAtMCwwICsxLDEzIEBACitjbGFzcyBUZXN0IHsKKyAgICB2b2lkIGJhcigpIHt9CisKKyAgICBwdWJsaWMgdm9pZCBtYWluKCkgeworICAgICAgICBUZXN0MS5mb28oVGVzdC50aGlzKTsKKyAgICB9Cit9CisKK2NsYXNzIFRlc3QxIHsKKyAgc3RhdGljIHZvaWQgZm9vKFRlc3QgdCkgeworICAgICAgdC5iYXIoKTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tZXRob2REdXBsaWNhdGVzL1JldHVybkV4cHJlc3Npb24uamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tZXRob2REdXBsaWNhdGVzL1JldHVybkV4cHJlc3Npb24uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNDYwMjg1Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21ldGhvZER1cGxpY2F0ZXMvUmV0dXJuRXhwcmVzc2lvbi5qYXZhCkBAIC0wLDAgKzEsMzIgQEAKK2NsYXNzIFJldHVybiB7CisgIHByaXZhdGUgUmV0dXJuIG15UmV0dXJuOworICBwdWJsaWMgUmV0dXJuIGdldFJldHVybigpIHsKKyAgICByZXR1cm4gbXlSZXR1cm47CisgIH0KKyAgcHJpdmF0ZSBpbnQgbXlJbnQ7CisKKyAgcHVibGljIFJldHVybiA8Y2FyZXQ+bWV0aG9kKCkgeworICAgIFJldHVybiByID0gbmV3IFJldHVybigpOworICAgIHIubXlJbnQgPj49IDE7CisgICAgcmV0dXJuIHIuZ2V0UmV0dXJuKCk7CisgIH0KKworICBwdWJsaWMgdm9pZCBjb250ZXh0TFZhbHVlKCkgeworICAgIC8vIENvdWxkIGJlIHByb2Nlc3NlZCwgYnV0IG5vdyBpdCBpcyBub3QuCisgICAgUmV0dXJuIHIgPSBuZXcgUmV0dXJuKCk7CisgICAgci5teUludCA+Pj0gMTsKKyAgICByLmdldFJldHVybigpLm15SW50ID0gMDsKKyAgfQorCisgIHB1YmxpYyB2b2lkIGNvbnRleHROb1VzYWdlKCkgeworICAgIC8vIENvdWxkIGJlIHByb2Nlc3NlZCwgYnV0IG5vdyBpdCBpcyBub3QuCisgICAgUmV0dXJuIHIgPSBuZXcgUmV0dXJuKCk7CisgICAgci5teUludCA+Pj0gMTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIGNvbnRleHRSVmFsdWUoKSB7CisgICAgUmV0dXJuIHIgPSBuZXcgUmV0dXJuKCk7CisgICAgci5teUludCA+Pj0gMTsKKyAgICBSZXR1cm4gcjIgPSByLmdldFJldHVybigpOworICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbWV0aG9kRHVwbGljYXRlcy9SZXR1cm5FeHByZXNzaW9uLmphdmEuYWZ0ZXIgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbWV0aG9kRHVwbGljYXRlcy9SZXR1cm5FeHByZXNzaW9uLmphdmEuYWZ0ZXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDI3YjE0OAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tZXRob2REdXBsaWNhdGVzL1JldHVybkV4cHJlc3Npb24uamF2YS5hZnRlcgpAQCAtMCwwICsxLDMwIEBACitjbGFzcyBSZXR1cm4geworICBwcml2YXRlIFJldHVybiBteVJldHVybjsKKyAgcHVibGljIFJldHVybiBnZXRSZXR1cm4oKSB7CisgICAgcmV0dXJuIG15UmV0dXJuOworICB9CisgIHByaXZhdGUgaW50IG15SW50OworCisgIHB1YmxpYyBSZXR1cm4gbWV0aG9kKCkgeworICAgIFJldHVybiByID0gbmV3IFJldHVybigpOworICAgIHIubXlJbnQgPj49IDE7CisgICAgcmV0dXJuIHIuZ2V0UmV0dXJuKCk7CisgIH0KKworICBwdWJsaWMgdm9pZCBjb250ZXh0TFZhbHVlKCkgeworICAgIC8vIENvdWxkIGJlIHByb2Nlc3NlZCwgYnV0IG5vdyBpdCBpcyBub3QuCisgICAgUmV0dXJuIHIgPSBuZXcgUmV0dXJuKCk7CisgICAgci5teUludCA+Pj0gMTsKKyAgICByLmdldFJldHVybigpLm15SW50ID0gMDsKKyAgfQorCisgIHB1YmxpYyB2b2lkIGNvbnRleHROb1VzYWdlKCkgeworICAgIC8vIENvdWxkIGJlIHByb2Nlc3NlZCwgYnV0IG5vdyBpdCBpcyBub3QuCisgICAgUmV0dXJuIHIgPSBuZXcgUmV0dXJuKCk7CisgICAgci5teUludCA+Pj0gMTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIGNvbnRleHRSVmFsdWUoKSB7CisgICAgICBSZXR1cm4gcjIgPSBtZXRob2QoKTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21ldGhvZER1cGxpY2F0ZXMvUmV0dXJuRXhwcmVzc2lvbkRpZmZlcmVudC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21ldGhvZER1cGxpY2F0ZXMvUmV0dXJuRXhwcmVzc2lvbkRpZmZlcmVudC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcwYmM2YmIwCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21ldGhvZER1cGxpY2F0ZXMvUmV0dXJuRXhwcmVzc2lvbkRpZmZlcmVudC5qYXZhCkBAIC0wLDAgKzEsMTIgQEAKK2NsYXNzIFJldHVybkV4cHJlc3Npb24geworICBpbnQgPGNhcmV0PmJhcihTdHJpbmcgcykgeworICAgIHMgPSBzICsgIiI7CisgICAgcmV0dXJuIHMubGVuZ3RoKCk7CisgIH0KKworICB2b2lkIGZvbygpIHsKKyAgICBTdHJpbmcgczEgPSAiIjsKKyAgICBzMSA9IHMxICsgIiI7CisgICAgU3lzdGVtLm91dC5wcmludGxuKHMxKTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tZXRob2REdXBsaWNhdGVzL1JldHVybkZpZWxkLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbWV0aG9kRHVwbGljYXRlcy9SZXR1cm5GaWVsZC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU0NWE1NmIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbWV0aG9kRHVwbGljYXRlcy9SZXR1cm5GaWVsZC5qYXZhCkBAIC0wLDAgKzEsMzMgQEAKK2NsYXNzIFJldHVybiB7CisgIHByaXZhdGUgUmV0dXJuIG15UmV0dXJuOworICBwcml2YXRlIGludCBteUludDsKKworICBwdWJsaWMgUmV0dXJuIDxjYXJldD5tZXRob2QoKSB7CisgICAgbXlSZXR1cm4gPSBuZXcgUmV0dXJuKCk7CisgICAgbXlSZXR1cm4ubXlJbnQrKzsKKyAgICByZXR1cm4gbXlSZXR1cm47CisgIH0KKworICBwdWJsaWMgdm9pZCBjb250ZXh0TFZhbHVlKCkgeworICAgIG15UmV0dXJuID0gbmV3IFJldHVybigpOworICAgIG15UmV0dXJuLm15SW50Kys7CisgICAgbXlSZXR1cm4gPSBudWxsOworICB9CisKKyAgcHVibGljIHZvaWQgY29udGV4dE5vVXNhZ2UoKSB7CisgICAgbXlSZXR1cm4gPSBuZXcgUmV0dXJuKCk7CisgICAgbXlSZXR1cm4ubXlJbnQrKzsKKyAgfQorCisgIHB1YmxpYyB2b2lkIGNvbnRleHRSVmFsdWUoKSB7CisgICAgbXlSZXR1cm4gPSBuZXcgUmV0dXJuKCk7CisgICAgbXlSZXR1cm4ubXlJbnQrKzsKKyAgICBSZXR1cm4gciA9IG15UmV0dXJuOworICB9CisKKyAgcHVibGljIHZvaWQgY29udGV4dFJWYWx1ZVF1YWxpZmllZCgpIHsKKyAgICBteVJldHVybiA9IG5ldyBSZXR1cm4oKTsKKyAgICBteVJldHVybi5teUludCsrOworICAgIFJldHVybiByID0gdGhpcy5teVJldHVybjsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21ldGhvZER1cGxpY2F0ZXMvUmV0dXJuRmllbGQuamF2YS5hZnRlciBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tZXRob2REdXBsaWNhdGVzL1JldHVybkZpZWxkLmphdmEuYWZ0ZXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjc1OTljZgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tZXRob2REdXBsaWNhdGVzL1JldHVybkZpZWxkLmphdmEuYWZ0ZXIKQEAgLTAsMCArMSwyOSBAQAorY2xhc3MgUmV0dXJuIHsKKyAgcHJpdmF0ZSBSZXR1cm4gbXlSZXR1cm47CisgIHByaXZhdGUgaW50IG15SW50OworCisgIHB1YmxpYyBSZXR1cm4gbWV0aG9kKCkgeworICAgIG15UmV0dXJuID0gbmV3IFJldHVybigpOworICAgIG15UmV0dXJuLm15SW50Kys7CisgICAgcmV0dXJuIG15UmV0dXJuOworICB9CisKKyAgcHVibGljIHZvaWQgY29udGV4dExWYWx1ZSgpIHsKKyAgICAgIG15UmV0dXJuID0gbWV0aG9kKCk7CisgICAgbXlSZXR1cm4gPSBudWxsOworICB9CisKKyAgcHVibGljIHZvaWQgY29udGV4dE5vVXNhZ2UoKSB7CisgICAgICBteVJldHVybiA9IG1ldGhvZCgpOworICB9CisKKyAgcHVibGljIHZvaWQgY29udGV4dFJWYWx1ZSgpIHsKKyAgICAgIG15UmV0dXJuID0gbWV0aG9kKCk7CisgICAgUmV0dXJuIHIgPSBteVJldHVybjsKKyAgfQorCisgIHB1YmxpYyB2b2lkIGNvbnRleHRSVmFsdWVRdWFsaWZpZWQoKSB7CisgICAgICBteVJldHVybiA9IG1ldGhvZCgpOworICAgIFJldHVybiByID0gdGhpcy5teVJldHVybjsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21ldGhvZER1cGxpY2F0ZXMvUmV0dXJuTG9jYWxWYXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tZXRob2REdXBsaWNhdGVzL1JldHVybkxvY2FsVmFyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzQ5MGM5NAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tZXRob2REdXBsaWNhdGVzL1JldHVybkxvY2FsVmFyLmphdmEKQEAgLTAsMCArMSwyNyBAQAorY2xhc3MgUmV0dXJuIHsKKyAgcHJpdmF0ZSBSZXR1cm4gbXlSZXR1cm47CisgIHByaXZhdGUgaW50IG15SW50OworCisgIHB1YmxpYyBSZXR1cm4gPGNhcmV0Pm1ldGhvZCgpIHsKKyAgICBSZXR1cm4gciA9IG5ldyBSZXR1cm4oKTsKKyAgICByLm15SW50ID4+PSAxOworICAgIHJldHVybiByOworICB9CisKKyAgcHVibGljIHZvaWQgY29udGV4dExWYWx1ZSgpIHsKKyAgICBSZXR1cm4gciA9IG5ldyBSZXR1cm4oKTsKKyAgICByLm15SW50ID4+PSAxOworICAgIHIgPSBudWxsOworICB9CisKKyAgcHVibGljIHZvaWQgY29udGV4dE5vVXNhZ2UoKSB7CisgICAgUmV0dXJuIHIgPSBuZXcgUmV0dXJuKCk7CisgICAgci5teUludCA+Pj0gMTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIGNvbnRleHRSVmFsdWUoKSB7CisgICAgUmV0dXJuIHIgPSBuZXcgUmV0dXJuKCk7CisgICAgci5teUludCA+Pj0gMTsKKyAgICBSZXR1cm4gcjIgPSByOworICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbWV0aG9kRHVwbGljYXRlcy9SZXR1cm5Mb2NhbFZhci5qYXZhLmFmdGVyIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21ldGhvZER1cGxpY2F0ZXMvUmV0dXJuTG9jYWxWYXIuamF2YS5hZnRlcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iN2JlZDc2Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21ldGhvZER1cGxpY2F0ZXMvUmV0dXJuTG9jYWxWYXIuamF2YS5hZnRlcgpAQCAtMCwwICsxLDI0IEBACitjbGFzcyBSZXR1cm4geworICBwcml2YXRlIFJldHVybiBteVJldHVybjsKKyAgcHJpdmF0ZSBpbnQgbXlJbnQ7CisKKyAgcHVibGljIFJldHVybiBtZXRob2QoKSB7CisgICAgUmV0dXJuIHIgPSBuZXcgUmV0dXJuKCk7CisgICAgci5teUludCA+Pj0gMTsKKyAgICByZXR1cm4gcjsKKyAgfQorCisgIHB1YmxpYyB2b2lkIGNvbnRleHRMVmFsdWUoKSB7CisgICAgICBSZXR1cm4gciA9IG1ldGhvZCgpOworICAgIHIgPSBudWxsOworICB9CisKKyAgcHVibGljIHZvaWQgY29udGV4dE5vVXNhZ2UoKSB7CisgICAgICBSZXR1cm4gciA9IG1ldGhvZCgpOworICB9CisKKyAgcHVibGljIHZvaWQgY29udGV4dFJWYWx1ZSgpIHsKKyAgICAgIFJldHVybiByID0gbWV0aG9kKCk7CisgICAgUmV0dXJuIHIyID0gcjsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21ldGhvZER1cGxpY2F0ZXMvUmV0dXJuUGFyYW1ldGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbWV0aG9kRHVwbGljYXRlcy9SZXR1cm5QYXJhbWV0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZWNjOTMwCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21ldGhvZER1cGxpY2F0ZXMvUmV0dXJuUGFyYW1ldGVyLmphdmEKQEAgLTAsMCArMSwyOCBAQAorY2xhc3MgUmV0dXJuIHsKKyAgcHJpdmF0ZSBSZXR1cm4gbXlSZXR1cm47CisgIHByaXZhdGUgaW50IG15SW50OworCisgIHB1YmxpYyBSZXR1cm4gPGNhcmV0Pm1ldGhvZChSZXR1cm4gcCkgeworICAgIHAubXlJbnQtLTsKKyAgICByZXR1cm4gcDsKKyAgfQorCisgIHB1YmxpYyB2b2lkIGNvbnRleHRMVmFsdWUoKSB7CisgICAgbXlSZXR1cm4ubXlJbnQtLTsKKyAgICBteVJldHVybiA9IG51bGw7CisgIH0KKworICBwdWJsaWMgdm9pZCBjb250ZXh0Tm9Vc2FnZSgpIHsKKyAgICBteVJldHVybi5teUludC0tOworICB9CisKKyAgcHVibGljIHZvaWQgY29udGV4dFJWYWx1ZSgpIHsKKyAgICBteVJldHVybi5teUludC0tOworICAgIFJldHVybiByID0gbXlSZXR1cm47CisgIH0KKworICBwdWJsaWMgdm9pZCBjb250ZXh0UlZhbHVlUXVhbGlmaWVkKCkgeworICAgIG15UmV0dXJuLm15SW50LS07CisgICAgUmV0dXJuIHIgPSB0aGlzLm15UmV0dXJuOworICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbWV0aG9kRHVwbGljYXRlcy9SZXR1cm5QYXJhbWV0ZXIuamF2YS5hZnRlciBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tZXRob2REdXBsaWNhdGVzL1JldHVyblBhcmFtZXRlci5qYXZhLmFmdGVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYzYzk1ZWQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbWV0aG9kRHVwbGljYXRlcy9SZXR1cm5QYXJhbWV0ZXIuamF2YS5hZnRlcgpAQCAtMCwwICsxLDI4IEBACitjbGFzcyBSZXR1cm4geworICBwcml2YXRlIFJldHVybiBteVJldHVybjsKKyAgcHJpdmF0ZSBpbnQgbXlJbnQ7CisKKyAgcHVibGljIFJldHVybiBtZXRob2QoUmV0dXJuIHApIHsKKyAgICBwLm15SW50LS07CisgICAgcmV0dXJuIHA7CisgIH0KKworICBwdWJsaWMgdm9pZCBjb250ZXh0TFZhbHVlKCkgeworICAgICAgbXlSZXR1cm4gPSBtZXRob2QobXlSZXR1cm4pOworICAgICAgbXlSZXR1cm4gPSBudWxsOworICB9CisKKyAgcHVibGljIHZvaWQgY29udGV4dE5vVXNhZ2UoKSB7CisgICAgICBteVJldHVybiA9IG1ldGhvZChteVJldHVybik7CisgIH0KKworICBwdWJsaWMgdm9pZCBjb250ZXh0UlZhbHVlKCkgeworICAgICAgbXlSZXR1cm4gPSBtZXRob2QobXlSZXR1cm4pOworICAgICAgUmV0dXJuIHIgPSBteVJldHVybjsKKyAgfQorCisgIHB1YmxpYyB2b2lkIGNvbnRleHRSVmFsdWVRdWFsaWZpZWQoKSB7CisgICAgICBteVJldHVybiA9IG1ldGhvZChteVJldHVybik7CisgICAgICBSZXR1cm4gciA9IHRoaXMubXlSZXR1cm47CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tZXRob2REdXBsaWNhdGVzL1JldHVyblRoaXMuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tZXRob2REdXBsaWNhdGVzL1JldHVyblRoaXMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMGY1YmU3Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21ldGhvZER1cGxpY2F0ZXMvUmV0dXJuVGhpcy5qYXZhCkBAIC0wLDAgKzEsMTUgQEAKK2NsYXNzIFJldHVybiB7CisgIHByaXZhdGUgaW50IG15SW50OworCisgIHB1YmxpYyBSZXR1cm4gPGNhcmV0Pm1ldGhvZCgpIHsKKyAgICBteUludCsrOworICAgIHJldHVybiB0aGlzOworICB9CisKKyAgcHVibGljIHZvaWQgY29udGV4dCgpIHsKKyAgICBteUludCsrOworICAgIFJldHVybiByID0gdGhpczsKKyAgICAvLyBDdXJyZW50bHkgdGhlIHN0YXRlbWVudCBiZWxvdyBjb3VsZCBiZSByZXBsYWNlZCwgYnV0IGl0J3Mgbm90LiBOb2JvZHkgaGFzIHJlcXVlc3RlZCB0aGlzLgorICAgIG15SW50Kys7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbWV0aG9kRHVwbGljYXRlcy9SZXR1cm5UaGlzLmphdmEuYWZ0ZXIgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbWV0aG9kRHVwbGljYXRlcy9SZXR1cm5UaGlzLmphdmEuYWZ0ZXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTRiZDc5NwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tZXRob2REdXBsaWNhdGVzL1JldHVyblRoaXMuamF2YS5hZnRlcgpAQCAtMCwwICsxLDE0IEBACitjbGFzcyBSZXR1cm4geworICBwcml2YXRlIGludCBteUludDsKKworICBwdWJsaWMgUmV0dXJuIG1ldGhvZCgpIHsKKyAgICBteUludCsrOworICAgIHJldHVybiB0aGlzOworICB9CisKKyAgcHVibGljIHZvaWQgY29udGV4dCgpIHsKKyAgICAgIFJldHVybiByID0gbWV0aG9kKCk7CisgICAgLy8gQ3VycmVudGx5IHRoZSBzdGF0ZW1lbnQgYmVsb3cgY291bGQgYmUgcmVwbGFjZWQsIGJ1dCBpdCdzIG5vdC4gTm9ib2R5IGhhcyByZXF1ZXN0ZWQgdGhpcy4KKyAgICBteUludCsrOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21ldGhvZER1cGxpY2F0ZXMvUmV0dXJuVmFyaWFibGUuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tZXRob2REdXBsaWNhdGVzL1JldHVyblZhcmlhYmxlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTBjZTkxYQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tZXRob2REdXBsaWNhdGVzL1JldHVyblZhcmlhYmxlLmphdmEKQEAgLTAsMCArMSwxMiBAQAorY2xhc3MgUmV0dXJuVmFyaWFibGUgeworICBTdHJpbmcgPGNhcmV0PmJhcihTdHJpbmcgcykgeworICAgIHMgPSBzICsgIiI7CisgICAgcmV0dXJuIHM7CisgIH0KKworICB2b2lkIGZvbygpIHsKKyAgICBTdHJpbmcgczEgPSAiIjsKKyAgICBzMSA9IHMxICsgIiI7CisgICAgU3lzdGVtLm91dC5wcmludGxuKHMxKTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tZXRob2REdXBsaWNhdGVzL1JldHVyblZhcmlhYmxlLmphdmEuYWZ0ZXIgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbWV0aG9kRHVwbGljYXRlcy9SZXR1cm5WYXJpYWJsZS5qYXZhLmFmdGVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkwZWVjZjYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbWV0aG9kRHVwbGljYXRlcy9SZXR1cm5WYXJpYWJsZS5qYXZhLmFmdGVyCkBAIC0wLDAgKzEsMTIgQEAKK2NsYXNzIFJldHVyblZhcmlhYmxlIHsKKyAgU3RyaW5nIGJhcihTdHJpbmcgcykgeworICAgIHMgPSBzICsgIiI7CisgICAgcmV0dXJuIHM7CisgIH0KKworICB2b2lkIGZvbygpIHsKKyAgICBTdHJpbmcgczEgPSAiIjsKKyAgICAgIHMxID0gYmFyKHMxKTsKKyAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihzMSk7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbWV0aG9kRHVwbGljYXRlcy9SZXR1cm5Wb2lkVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21ldGhvZER1cGxpY2F0ZXMvUmV0dXJuVm9pZFRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNGUxNTVlCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21ldGhvZER1cGxpY2F0ZXMvUmV0dXJuVm9pZFRlc3QuamF2YQpAQCAtMCwwICsxLDEzIEBACitjbGFzcyBSZXR1cm5Wb2lkVGVzdCB7CisgIGludGVyZmFjZSBUaGluZyB7CisgICAgYm9vbGVhbiB0aGluZygpOworICB9CisKKyAgdm9pZCBkdXBlSG9sZGVyKCkgeworICAgIGlmIChmYWxzZSkgcmV0dXJuOworICB9CisKKyAgdm9pZCA8Y2FyZXQ+ZHVwbGljYXRvcihmaW5hbCBib29sZWFuIHRoaW5nUmV0dXJuKSB7CisgICAgaWYgKHRoaW5nUmV0dXJuICkgcmV0dXJuOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21ldGhvZER1cGxpY2F0ZXMvUmV0dXJuVm9pZFRlc3QuamF2YS5hZnRlciBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tZXRob2REdXBsaWNhdGVzL1JldHVyblZvaWRUZXN0LmphdmEuYWZ0ZXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWVmNGZmMgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tZXRob2REdXBsaWNhdGVzL1JldHVyblZvaWRUZXN0LmphdmEuYWZ0ZXIKQEAgLTAsMCArMSwxMyBAQAorY2xhc3MgUmV0dXJuVm9pZFRlc3QgeworICBpbnRlcmZhY2UgVGhpbmcgeworICAgIGJvb2xlYW4gdGhpbmcoKTsKKyAgfQorCisgIHZvaWQgZHVwZUhvbGRlcigpIHsKKyAgICAgIGR1cGxpY2F0b3IoZmFsc2UpOworICB9CisKKyAgdm9pZCBkdXBsaWNhdG9yKGZpbmFsIGJvb2xlYW4gdGhpbmdSZXR1cm4pIHsKKyAgICBpZiAodGhpbmdSZXR1cm4gKSByZXR1cm47CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbWV0aG9kRHVwbGljYXRlcy9TdGF0aWNNZXRob2RSZXBsYWNlbWVudC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21ldGhvZER1cGxpY2F0ZXMvU3RhdGljTWV0aG9kUmVwbGFjZW1lbnQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMzgzNWZjMgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tZXRob2REdXBsaWNhdGVzL1N0YXRpY01ldGhvZFJlcGxhY2VtZW50LmphdmEKQEAgLTAsMCArMSwxMSBAQAorY2xhc3MgU3RhdGljTWV0aG9kUmVwbGFjZW1lbnQgeworICBzdGF0aWMgdm9pZCA8Y2FyZXQ+bWFpbihTdGF0aWNNZXRob2RSZXBsYWNlbWVudCByKSB7CisgICAgci5iYXIoKTsKKyAgfQorCisgIHZvaWQgYmFyKCl7fQorCisgIHZvaWQgZm9vKCkgeworICAgIGJhcigpOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21ldGhvZER1cGxpY2F0ZXMvU3RhdGljTWV0aG9kUmVwbGFjZW1lbnQuamF2YS5hZnRlciBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tZXRob2REdXBsaWNhdGVzL1N0YXRpY01ldGhvZFJlcGxhY2VtZW50LmphdmEuYWZ0ZXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjI1MDIzYgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tZXRob2REdXBsaWNhdGVzL1N0YXRpY01ldGhvZFJlcGxhY2VtZW50LmphdmEuYWZ0ZXIKQEAgLTAsMCArMSwxMSBAQAorY2xhc3MgU3RhdGljTWV0aG9kUmVwbGFjZW1lbnQgeworICBzdGF0aWMgdm9pZCBtYWluKFN0YXRpY01ldGhvZFJlcGxhY2VtZW50IHIpIHsKKyAgICByLmJhcigpOworICB9CisKKyAgdm9pZCBiYXIoKXt9CisKKyAgdm9pZCBmb28oKSB7CisgICAgICBtYWluKFN0YXRpY01ldGhvZFJlcGxhY2VtZW50LnRoaXMpOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21ldGhvZER1cGxpY2F0ZXMvVGhpc1JlZmVyZW5jZVRlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tZXRob2REdXBsaWNhdGVzL1RoaXNSZWZlcmVuY2VUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODMzZThhZQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tZXRob2REdXBsaWNhdGVzL1RoaXNSZWZlcmVuY2VUZXN0LmphdmEKQEAgLTAsMCArMSw5IEBACitjbGFzcyBUaGlzUmVmZXJlbmNlVGVzdCB7CisgIHZvaWQgZm9vKCl7fQorCisgIHZvaWQgPGNhcmV0PmJhcigpe3RoaXMuZm9vKCk7fQorCisgIHN0YXRpYyB2b2lkIG1haW4oVGhpc1JlZmVyZW5jZVRlc3QgdCl7CisgICAgdC5mb28oKTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tZXRob2REdXBsaWNhdGVzL1RoaXNSZWZlcmVuY2VUZXN0LmphdmEuYWZ0ZXIgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbWV0aG9kRHVwbGljYXRlcy9UaGlzUmVmZXJlbmNlVGVzdC5qYXZhLmFmdGVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM3NjU4NmMxCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21ldGhvZER1cGxpY2F0ZXMvVGhpc1JlZmVyZW5jZVRlc3QuamF2YS5hZnRlcgpAQCAtMCwwICsxLDkgQEAKK2NsYXNzIFRoaXNSZWZlcmVuY2VUZXN0IHsKKyAgdm9pZCBmb28oKXt9CisKKyAgdm9pZCBiYXIoKXt0aGlzLmZvbygpO30KKworICBzdGF0aWMgdm9pZCBtYWluKFRoaXNSZWZlcmVuY2VUZXN0IHQpeworICAgICAgdC5iYXIoKTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tZXRob2REdXBsaWNhdGVzL1R5cGVJbmhlcml0YW5jZS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21ldGhvZER1cGxpY2F0ZXMvVHlwZUluaGVyaXRhbmNlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmE2MWNmMQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tZXRob2REdXBsaWNhdGVzL1R5cGVJbmhlcml0YW5jZS5qYXZhCkBAIC0wLDAgKzEsMTMgQEAKK2NsYXNzIFRlc3QgeworICBjbGFzcyBJIHt9CisgIGNsYXNzIEkxIGV4dGVuZHMgSSB7fQorCisgIHZvaWQgPGNhcmV0PmZvbyhJIGkpeworICAgIFN5c3RlbS5vdXQucHJpbnRsbihpKTsKKyAgfQorCisgIHZvaWQgYmFyKEkxIGkpeworICAgIFN5c3RlbS5vdXQucHJpbnRsbihpKTsKKyAgfQorCit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21ldGhvZER1cGxpY2F0ZXMvVHlwZUluaGVyaXRhbmNlLmphdmEuYWZ0ZXIgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbWV0aG9kRHVwbGljYXRlcy9UeXBlSW5oZXJpdGFuY2UuamF2YS5hZnRlcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYTAyNWVmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21ldGhvZER1cGxpY2F0ZXMvVHlwZUluaGVyaXRhbmNlLmphdmEuYWZ0ZXIKQEAgLTAsMCArMSwxMyBAQAorY2xhc3MgVGVzdCB7CisgIGNsYXNzIEkge30KKyAgY2xhc3MgSTEgZXh0ZW5kcyBJIHt9CisKKyAgdm9pZCBmb28oSSBpKXsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oaSk7CisgIH0KKworICB2b2lkIGJhcihJMSBpKXsKKyAgICAgIGZvbyhpKTsKKyAgfQorCit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21ldGhvZER1cGxpY2F0ZXMvVHlwZUluaGVyaXRhbmNlMS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21ldGhvZER1cGxpY2F0ZXMvVHlwZUluaGVyaXRhbmNlMS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI4NzRiMWMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbWV0aG9kRHVwbGljYXRlcy9UeXBlSW5oZXJpdGFuY2UxLmphdmEKQEAgLTAsMCArMSwxMyBAQAorY2xhc3MgVGVzdCB7CisgIGNsYXNzIEkge30KKyAgY2xhc3MgSTEgZXh0ZW5kcyBJIHt9CisKKyAgdm9pZCBmb28oSSBpKXsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oaSk7CisgIH0KKworICB2b2lkIDxjYXJldD5iYXIoSTEgaSl7CisgICAgU3lzdGVtLm91dC5wcmludGxuKGkpOworICB9CisKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbWV0aG9kRHVwbGljYXRlcy9UeXBlc0V4dGVuZHMuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tZXRob2REdXBsaWNhdGVzL1R5cGVzRXh0ZW5kcy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM2Y2FhYmQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbWV0aG9kRHVwbGljYXRlcy9UeXBlc0V4dGVuZHMuamF2YQpAQCAtMCwwICsxLDEwIEBACitjbGFzcyBUeXBlcyB7CisgIHB1YmxpYyB2b2lkIDxjYXJldD5tZXRob2QoT2JqZWN0IHYpIHsKKyAgICBpbnQgaSA9IHYuaGFzaENvZGUoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIGNvbnRleHQoKSB7CisgICAgU3RyaW5nIHYgPSAiY2hpbGQgdHlwZSI7CisgICAgaW50IGkgPSB2Lmhhc2hDb2RlKCk7CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tZXRob2REdXBsaWNhdGVzL1R5cGVzRXh0ZW5kcy5qYXZhLmFmdGVyIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21ldGhvZER1cGxpY2F0ZXMvVHlwZXNFeHRlbmRzLmphdmEuYWZ0ZXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzllZThmYwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tZXRob2REdXBsaWNhdGVzL1R5cGVzRXh0ZW5kcy5qYXZhLmFmdGVyCkBAIC0wLDAgKzEsMTAgQEAKK2NsYXNzIFR5cGVzIHsKKyAgcHVibGljIHZvaWQgbWV0aG9kKE9iamVjdCB2KSB7CisgICAgaW50IGkgPSB2Lmhhc2hDb2RlKCk7CisgIH0KKworICBwdWJsaWMgdm9pZCBjb250ZXh0KCkgeworICAgIFN0cmluZyB2ID0gImNoaWxkIHR5cGUiOworICAgICAgbWV0aG9kKHYpOworICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbWV0aG9kRHVwbGljYXRlcy9UeXBlc0V4dGVuZHNSZXR1cm4uamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tZXRob2REdXBsaWNhdGVzL1R5cGVzRXh0ZW5kc1JldHVybi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFjZDRiMjMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbWV0aG9kRHVwbGljYXRlcy9UeXBlc0V4dGVuZHNSZXR1cm4uamF2YQpAQCAtMCwwICsxLDEwIEBACitjbGFzcyBUeXBlcyB7CisgIHB1YmxpYyBTdHJpbmcgPGNhcmV0Pm1ldGhvZChPYmplY3QgdikgeworICAgIHJldHVybiB2LnRvU3RyaW5nKCk7CisgIH0KKworICBwdWJsaWMgdm9pZCBjb250ZXh0KCkgeworICAgIFN0cmluZyB2ID0gImNoaWxkIHR5cGUiOworICAgIE9iamVjdCBvID0gdi50b1N0cmluZygpOworICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbWV0aG9kRHVwbGljYXRlcy9UeXBlc0V4dGVuZHNSZXR1cm4uamF2YS5hZnRlciBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tZXRob2REdXBsaWNhdGVzL1R5cGVzRXh0ZW5kc1JldHVybi5qYXZhLmFmdGVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU5N2I1ODkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbWV0aG9kRHVwbGljYXRlcy9UeXBlc0V4dGVuZHNSZXR1cm4uamF2YS5hZnRlcgpAQCAtMCwwICsxLDEwIEBACitjbGFzcyBUeXBlcyB7CisgIHB1YmxpYyBTdHJpbmcgbWV0aG9kKE9iamVjdCB2KSB7CisgICAgcmV0dXJuIHYudG9TdHJpbmcoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIGNvbnRleHQoKSB7CisgICAgU3RyaW5nIHYgPSAiY2hpbGQgdHlwZSI7CisgICAgT2JqZWN0IG8gPSBtZXRob2Qodik7CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tZXRob2REdXBsaWNhdGVzL1R5cGVzRXh0ZW5kc1JldHVybkRpZmZlcmVudEFycmF5LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbWV0aG9kRHVwbGljYXRlcy9UeXBlc0V4dGVuZHNSZXR1cm5EaWZmZXJlbnRBcnJheS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg1YmFmZDQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbWV0aG9kRHVwbGljYXRlcy9UeXBlc0V4dGVuZHNSZXR1cm5EaWZmZXJlbnRBcnJheS5qYXZhCkBAIC0wLDAgKzEsOSBAQAorY2xhc3MgVHlwZXMgeworCXB1YmxpYyBzdGF0aWMgT2JqZWN0W10gPGNhcmV0PmFycmF5TWV0aG9kKFN0cmluZyBzKSB7CisJCXJldHVybiBuZXcgU3RyaW5nW10ge3N9OworCX0KKwlwdWJsaWMgc3RhdGljIHZvaWQgYXJyYXlDb250ZXh0KFN0cmluZyBzKSB7CisJCVN0cmluZ1tdIHNhID0gbmV3IFN0cmluZ1tdIHtzLnN1YnN0cmluZygwKX07CisJCU9iamVjdFtdIG9hID0gbmV3IFN0cmluZ1tdIHtzfTsKKwl9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbWV0aG9kRHVwbGljYXRlcy9UeXBlc0V4dGVuZHNSZXR1cm5EaWZmZXJlbnRBcnJheS5qYXZhLmFmdGVyIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21ldGhvZER1cGxpY2F0ZXMvVHlwZXNFeHRlbmRzUmV0dXJuRGlmZmVyZW50QXJyYXkuamF2YS5hZnRlcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZGM0ZTBlCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21ldGhvZER1cGxpY2F0ZXMvVHlwZXNFeHRlbmRzUmV0dXJuRGlmZmVyZW50QXJyYXkuamF2YS5hZnRlcgpAQCAtMCwwICsxLDkgQEAKK2NsYXNzIFR5cGVzIHsKKwlwdWJsaWMgc3RhdGljIFN0cmluZ1tdIGFycmF5TWV0aG9kKFN0cmluZyBzKSB7CisJCXJldHVybiBuZXcgU3RyaW5nW10ge3N9OworCX0KKwlwdWJsaWMgc3RhdGljIHZvaWQgYXJyYXlDb250ZXh0KFN0cmluZyBzKSB7CisJCVN0cmluZ1tdIHNhID0gYXJyYXlNZXRob2Qocy5zdWJzdHJpbmcoMCkpOworCQlPYmplY3RbXSBvYSA9IGFycmF5TWV0aG9kKHMpOworCX0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tZXRob2REdXBsaWNhdGVzL1R5cGVzRXh0ZW5kc1JldHVybkRpZmZlcmVudEdlbmVyaWMuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tZXRob2REdXBsaWNhdGVzL1R5cGVzRXh0ZW5kc1JldHVybkRpZmZlcmVudEdlbmVyaWMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZjcwZjNkCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21ldGhvZER1cGxpY2F0ZXMvVHlwZXNFeHRlbmRzUmV0dXJuRGlmZmVyZW50R2VuZXJpYy5qYXZhCkBAIC0wLDAgKzEsMTIgQEAKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworY2xhc3MgVHlwZXMgeworCXB1YmxpYyBDb2xsZWN0aW9uPFN0cmluZz4gPGNhcmV0PmdlbmVyaWNNZXRob2QoKSB7CisJCXJldHVybiBuZXcgQXJyYXlMaXN0PFN0cmluZz4oKTsKKwl9CisJcHVibGljIHZvaWQgZ2VuZXJpY0NvbnRleHQoKSB7CisJCUxpc3Q8U3RyaW5nPiBzbCA9IG5ldyBBcnJheUxpc3Q8U3RyaW5nPigpOworCQlDb2xsZWN0aW9uPFN0cmluZz4gc2MgPSBnZW5lcmljTWV0aG9kKCk7CisJfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21ldGhvZER1cGxpY2F0ZXMvVHlwZXNFeHRlbmRzUmV0dXJuRGlmZmVyZW50R2VuZXJpYy5qYXZhLmFmdGVyIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21ldGhvZER1cGxpY2F0ZXMvVHlwZXNFeHRlbmRzUmV0dXJuRGlmZmVyZW50R2VuZXJpYy5qYXZhLmFmdGVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFkZDU5NzIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbWV0aG9kRHVwbGljYXRlcy9UeXBlc0V4dGVuZHNSZXR1cm5EaWZmZXJlbnRHZW5lcmljLmphdmEuYWZ0ZXIKQEAgLTAsMCArMSwxMiBAQAoraW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitjbGFzcyBUeXBlcyB7CisJcHVibGljIExpc3Q8U3RyaW5nPiBnZW5lcmljTWV0aG9kKCkgeworCQlyZXR1cm4gbmV3IEFycmF5TGlzdDxTdHJpbmc+KCk7CisJfQorCXB1YmxpYyB2b2lkIGdlbmVyaWNDb250ZXh0KCkgeworCQlMaXN0PFN0cmluZz4gc2wgPSBnZW5lcmljTWV0aG9kKCk7CisJCUNvbGxlY3Rpb248U3RyaW5nPiBzYyA9IGdlbmVyaWNNZXRob2QoKTsKKwl9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbWV0aG9kRHVwbGljYXRlcy9UeXBlc0V4dGVuZHNSZXR1cm5EaWZmZXJlbnRQcmltaXRpdmUuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tZXRob2REdXBsaWNhdGVzL1R5cGVzRXh0ZW5kc1JldHVybkRpZmZlcmVudFByaW1pdGl2ZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZiNTFlNTAKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbWV0aG9kRHVwbGljYXRlcy9UeXBlc0V4dGVuZHNSZXR1cm5EaWZmZXJlbnRQcmltaXRpdmUuamF2YQpAQCAtMCwwICsxLDkgQEAKK2NsYXNzIFR5cGVzIHsKKwlwdWJsaWMgbG9uZyA8Y2FyZXQ+cHJpbWl0aXZlTWV0aG9kKGJvb2xlYW4gYikgeworCQlyZXR1cm4gYiA/IDEgOiAwOworCX0KKwlwdWJsaWMgdm9pZCBwcmltaXRpdmVDb250ZXh0KGJvb2xlYW4gYikgeworCQlpbnQgaSA9ICFiID8gMSA6IDA7CisJCWxvbmcgbCA9IGIgPyAxIDogMDsKKwl9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbWV0aG9kRHVwbGljYXRlcy9UeXBlc0V4dGVuZHNSZXR1cm5EaWZmZXJlbnRQcmltaXRpdmUuamF2YS5hZnRlciBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tZXRob2REdXBsaWNhdGVzL1R5cGVzRXh0ZW5kc1JldHVybkRpZmZlcmVudFByaW1pdGl2ZS5qYXZhLmFmdGVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdjMGFiMGIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbWV0aG9kRHVwbGljYXRlcy9UeXBlc0V4dGVuZHNSZXR1cm5EaWZmZXJlbnRQcmltaXRpdmUuamF2YS5hZnRlcgpAQCAtMCwwICsxLDkgQEAKK2NsYXNzIFR5cGVzIHsKKwlwdWJsaWMgaW50IHByaW1pdGl2ZU1ldGhvZChib29sZWFuIGIpIHsKKwkJcmV0dXJuIGIgPyAxIDogMDsKKwl9CisJcHVibGljIHZvaWQgcHJpbWl0aXZlQ29udGV4dChib29sZWFuIGIpIHsKKwkJaW50IGkgPSBwcmltaXRpdmVNZXRob2QoIWIpOworCQlsb25nIGwgPSBwcmltaXRpdmVNZXRob2QoYik7CisJfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21ldGhvZER1cGxpY2F0ZXMvVHlwZXNFeHRlbmRzUmV0dXJuRGlmZmVyZW50UmVmZXJlbmNlLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbWV0aG9kRHVwbGljYXRlcy9UeXBlc0V4dGVuZHNSZXR1cm5EaWZmZXJlbnRSZWZlcmVuY2UuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNWIzMDI2Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21ldGhvZER1cGxpY2F0ZXMvVHlwZXNFeHRlbmRzUmV0dXJuRGlmZmVyZW50UmVmZXJlbmNlLmphdmEKQEAgLTAsMCArMSw5IEBACitjbGFzcyBUeXBlcyB7CisJcHVibGljIHN0YXRpYyBPYmplY3QgPGNhcmV0PnJlZmVyZW5jZU1ldGhvZChPYmplY3QgbykgeworCQlyZXR1cm4gby50b1N0cmluZygpOworCX0KKwlwdWJsaWMgc3RhdGljIHZvaWQgcmVmZXJlbmNlQ29udGV4dChPYmplY3QgbykgeworCQlTdHJpbmcgcyA9IG8uZ2V0Q2xhc3MoKS50b1N0cmluZygpOworCQlPYmplY3QgdiA9IG8udG9TdHJpbmcoKTsKKwl9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbWV0aG9kRHVwbGljYXRlcy9UeXBlc0V4dGVuZHNSZXR1cm5EaWZmZXJlbnRSZWZlcmVuY2UuamF2YS5hZnRlciBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tZXRob2REdXBsaWNhdGVzL1R5cGVzRXh0ZW5kc1JldHVybkRpZmZlcmVudFJlZmVyZW5jZS5qYXZhLmFmdGVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYzOWU3ZWQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbWV0aG9kRHVwbGljYXRlcy9UeXBlc0V4dGVuZHNSZXR1cm5EaWZmZXJlbnRSZWZlcmVuY2UuamF2YS5hZnRlcgpAQCAtMCwwICsxLDkgQEAKK2NsYXNzIFR5cGVzIHsKKwlwdWJsaWMgc3RhdGljIFN0cmluZyByZWZlcmVuY2VNZXRob2QoT2JqZWN0IG8pIHsKKwkJcmV0dXJuIG8udG9TdHJpbmcoKTsKKwl9CisJcHVibGljIHN0YXRpYyB2b2lkIHJlZmVyZW5jZUNvbnRleHQoT2JqZWN0IG8pIHsKKwkJU3RyaW5nIHMgPSByZWZlcmVuY2VNZXRob2Qoby5nZXRDbGFzcygpKTsKKwkJT2JqZWN0IHYgPSByZWZlcmVuY2VNZXRob2Qobyk7CisJfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21ldGhvZER1cGxpY2F0ZXMvVHlwZXNHZW5lcmljc0NvbmNyZXRlMkNvbmNyZXRlLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbWV0aG9kRHVwbGljYXRlcy9UeXBlc0dlbmVyaWNzQ29uY3JldGUyQ29uY3JldGUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNmRlZTQzCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21ldGhvZER1cGxpY2F0ZXMvVHlwZXNHZW5lcmljc0NvbmNyZXRlMkNvbmNyZXRlLmphdmEKQEAgLTAsMCArMSwxMyBAQAoraW1wb3J0IGphdmEudXRpbC5MaXN0OworCitjbGFzcyBUeXBlcyB7CisgIHByaXZhdGUgTGlzdDxTdHJpbmc+IG15TGlzdDsKKworICBwdWJsaWMgU3RyaW5nIDxjYXJldD5tZXRob2QoTGlzdDxTdHJpbmc+IHYpIHsKKyAgICByZXR1cm4gdi5nZXQoMCk7CisgIH0KKworICBwdWJsaWMgdm9pZCBjb250ZXh0KCkgeworICAgIFN0cmluZyBzID0gbXlMaXN0LmdldCgwKTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tZXRob2REdXBsaWNhdGVzL1R5cGVzR2VuZXJpY3NDb25jcmV0ZTJDb25jcmV0ZS5qYXZhLmFmdGVyIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21ldGhvZER1cGxpY2F0ZXMvVHlwZXNHZW5lcmljc0NvbmNyZXRlMkNvbmNyZXRlLmphdmEuYWZ0ZXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzE5ZmIxOAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tZXRob2REdXBsaWNhdGVzL1R5cGVzR2VuZXJpY3NDb25jcmV0ZTJDb25jcmV0ZS5qYXZhLmFmdGVyCkBAIC0wLDAgKzEsMTMgQEAKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworY2xhc3MgVHlwZXMgeworICBwcml2YXRlIExpc3Q8U3RyaW5nPiBteUxpc3Q7CisKKyAgcHVibGljIFN0cmluZyBtZXRob2QoTGlzdDxTdHJpbmc+IHYpIHsKKyAgICByZXR1cm4gdi5nZXQoMCk7CisgIH0KKworICBwdWJsaWMgdm9pZCBjb250ZXh0KCkgeworICAgIFN0cmluZyBzID0gbWV0aG9kKG15TGlzdCk7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbWV0aG9kRHVwbGljYXRlcy9UeXBlc0dlbmVyaWNzQ29uY3JldGUyQ29uY3JldGVEaWZmZXJlbnQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tZXRob2REdXBsaWNhdGVzL1R5cGVzR2VuZXJpY3NDb25jcmV0ZTJDb25jcmV0ZURpZmZlcmVudC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjllYTQ0ZmYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbWV0aG9kRHVwbGljYXRlcy9UeXBlc0dlbmVyaWNzQ29uY3JldGUyQ29uY3JldGVEaWZmZXJlbnQuamF2YQpAQCAtMCwwICsxLDEzIEBACitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK2NsYXNzIFR5cGVzIHsKKyAgcHJpdmF0ZSBMaXN0PEJvb2xlYW4+IG15TGlzdDsKKworICBwdWJsaWMgdm9pZCA8Y2FyZXQ+bWV0aG9kKExpc3Q8SW50ZWdlcj4gdikgeworICAgIHYuY2xlYXIoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIGNvbnRleHQoKSB7CisgICAgbXlMaXN0LmNsZWFyKCk7CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tZXRob2REdXBsaWNhdGVzL1R5cGVzR2VuZXJpY3NDb25jcmV0ZTJFeHRlbmRzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbWV0aG9kRHVwbGljYXRlcy9UeXBlc0dlbmVyaWNzQ29uY3JldGUyRXh0ZW5kcy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFjMjE3MWEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbWV0aG9kRHVwbGljYXRlcy9UeXBlc0dlbmVyaWNzQ29uY3JldGUyRXh0ZW5kcy5qYXZhCkBAIC0wLDAgKzEsMTIgQEAKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitjbGFzcyBUeXBlcyB7CisgICAgcHVibGljIHZvaWQgPGNhcmV0Pm1ldGhvZChMaXN0PD8gZXh0ZW5kcyBMaXN0PiB2KSB7CisgICAgICAgIGludCBpID0gdi5nZXQoMCkuZ2V0WCgpOworICAgIH0KKyAgICBwdWJsaWMgdm9pZCBjb250ZXh0KCkgeworICAgICAgICBMaXN0PEFycmF5TGlzdD4gbGlzdCA9IG5ldyBBcnJheUxpc3Q8QXJyYXlMaXN0PigpOworICAgICAgICBpbnQgaiA9IGxpc3QuZ2V0KDApLmdldFgoKTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbWV0aG9kRHVwbGljYXRlcy9UeXBlc0dlbmVyaWNzQ29uY3JldGUyRXh0ZW5kcy5qYXZhLmFmdGVyIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21ldGhvZER1cGxpY2F0ZXMvVHlwZXNHZW5lcmljc0NvbmNyZXRlMkV4dGVuZHMuamF2YS5hZnRlcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOTljYmE3Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21ldGhvZER1cGxpY2F0ZXMvVHlwZXNHZW5lcmljc0NvbmNyZXRlMkV4dGVuZHMuamF2YS5hZnRlcgpAQCAtMCwwICsxLDEyIEBACitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworY2xhc3MgVHlwZXMgeworICAgIHB1YmxpYyB2b2lkIG1ldGhvZChMaXN0PD8gZXh0ZW5kcyBMaXN0PiB2KSB7CisgICAgICAgIGludCBpID0gdi5nZXQoMCkuZ2V0WCgpOworICAgIH0KKyAgICBwdWJsaWMgdm9pZCBjb250ZXh0KCkgeworICAgICAgICBMaXN0PEFycmF5TGlzdD4gbGlzdCA9IG5ldyBBcnJheUxpc3Q8QXJyYXlMaXN0PigpOworICAgICAgICBtZXRob2QobGlzdCk7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21ldGhvZER1cGxpY2F0ZXMvVHlwZXNHZW5lcmljc0NvbmNyZXRlMkV4dGVuZHNEaWZmZXJlbnQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tZXRob2REdXBsaWNhdGVzL1R5cGVzR2VuZXJpY3NDb25jcmV0ZTJFeHRlbmRzRGlmZmVyZW50LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDkwYmZiMwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tZXRob2REdXBsaWNhdGVzL1R5cGVzR2VuZXJpY3NDb25jcmV0ZTJFeHRlbmRzRGlmZmVyZW50LmphdmEKQEAgLTAsMCArMSwxMiBAQAoraW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK2NsYXNzIFR5cGVzIHsKKyAgICBwdWJsaWMgdm9pZCA8Y2FyZXQ+bWV0aG9kKExpc3Q8PyBleHRlbmRzIEFycmF5TGlzdD4gdikgeworICAgICAgICBPYmplY3QgbyA9IHYuZ2V0KDApOworICAgIH0KKyAgICBwdWJsaWMgdm9pZCBjb250ZXh0KCkgeworICAgICAgICBMaXN0PExpc3Q+IGxpc3QgPSBuZXcgQXJyYXlMaXN0PExpc3Q+KCk7CisgICAgICAgIE9iamVjdCBvID0gdi5nZXQoMCk7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21ldGhvZER1cGxpY2F0ZXMvVHlwZXNHZW5lcmljc0NvbmNyZXRlMlJhdy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21ldGhvZER1cGxpY2F0ZXMvVHlwZXNHZW5lcmljc0NvbmNyZXRlMlJhdy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA1OGYxNjYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbWV0aG9kRHVwbGljYXRlcy9UeXBlc0dlbmVyaWNzQ29uY3JldGUyUmF3LmphdmEKQEAgLTAsMCArMSwxMyBAQAoraW1wb3J0IGphdmEudXRpbC5MaXN0OworCitjbGFzcyBUeXBlcyB7CisgIHByaXZhdGUgTGlzdDxTdHJpbmc+IG15TGlzdDsKKworICBwdWJsaWMgdm9pZCA8Y2FyZXQ+bWV0aG9kKExpc3QgdikgeworICAgIHYuY2xlYXIoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIGNvbnRleHQoKSB7CisgICAgbXlMaXN0LmNsZWFyKCk7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbWV0aG9kRHVwbGljYXRlcy9UeXBlc0dlbmVyaWNzQ29uY3JldGUyUmF3LmphdmEuYWZ0ZXIgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbWV0aG9kRHVwbGljYXRlcy9UeXBlc0dlbmVyaWNzQ29uY3JldGUyUmF3LmphdmEuYWZ0ZXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWQyMTBlNwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tZXRob2REdXBsaWNhdGVzL1R5cGVzR2VuZXJpY3NDb25jcmV0ZTJSYXcuamF2YS5hZnRlcgpAQCAtMCwwICsxLDEzIEBACitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK2NsYXNzIFR5cGVzIHsKKyAgcHJpdmF0ZSBMaXN0PFN0cmluZz4gbXlMaXN0OworCisgIHB1YmxpYyB2b2lkIG1ldGhvZChMaXN0IHYpIHsKKyAgICB2LmNsZWFyKCk7CisgIH0KKworICBwdWJsaWMgdm9pZCBjb250ZXh0KCkgeworICAgICAgbWV0aG9kKG15TGlzdCk7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbWV0aG9kRHVwbGljYXRlcy9UeXBlc0dlbmVyaWNzQ29uY3JldGUyU3VwZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tZXRob2REdXBsaWNhdGVzL1R5cGVzR2VuZXJpY3NDb25jcmV0ZTJTdXBlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhlYmQ0YTcKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbWV0aG9kRHVwbGljYXRlcy9UeXBlc0dlbmVyaWNzQ29uY3JldGUyU3VwZXIuamF2YQpAQCAtMCwwICsxLDE0IEBACitpbXBvcnQgamF2YS5hd3QuQ29tcG9uZW50OworaW1wb3J0IGphdmF4LnN3aW5nLkpDb21wb25lbnQ7CitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworY2xhc3MgVHlwZXMgeworICAgIHB1YmxpYyB2b2lkIDxjYXJldD5tZXRob2QoTGlzdDw/IHN1cGVyIEpDb21wb25lbnQ+IHYpIHsKKyAgICAgICAgT2JqZWN0IG8gPSB2LmdldCgwKTsKKyAgICB9CisgICAgcHVibGljIHZvaWQgY29udGV4dCgpIHsKKyAgICAgICAgTGlzdDxDb21wb25lbnQ+IGxpc3QgPSBuZXcgQXJyYXlMaXN0PENvbXBvbmVudD4oKTsKKyAgICAgICAgT2JqZWN0IG8gPSBsaXN0LmdldCgwKTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbWV0aG9kRHVwbGljYXRlcy9UeXBlc0dlbmVyaWNzQ29uY3JldGUyU3VwZXIuamF2YS5hZnRlciBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tZXRob2REdXBsaWNhdGVzL1R5cGVzR2VuZXJpY3NDb25jcmV0ZTJTdXBlci5qYXZhLmFmdGVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk0ZDdlNTIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbWV0aG9kRHVwbGljYXRlcy9UeXBlc0dlbmVyaWNzQ29uY3JldGUyU3VwZXIuamF2YS5hZnRlcgpAQCAtMCwwICsxLDE0IEBACitpbXBvcnQgamF2YS5hd3QuQ29tcG9uZW50OworaW1wb3J0IGphdmF4LnN3aW5nLkpDb21wb25lbnQ7CitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworY2xhc3MgVHlwZXMgeworICAgIHB1YmxpYyB2b2lkIG1ldGhvZChMaXN0PD8gc3VwZXIgSkNvbXBvbmVudD4gdikgeworICAgICAgICBPYmplY3QgbyA9IHYuZ2V0KDApOworICAgIH0KKyAgICBwdWJsaWMgdm9pZCBjb250ZXh0KCkgeworICAgICAgICBMaXN0PENvbXBvbmVudD4gbGlzdCA9IG5ldyBBcnJheUxpc3Q8Q29tcG9uZW50PigpOworICAgICAgICBtZXRob2QobGlzdCk7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21ldGhvZER1cGxpY2F0ZXMvVHlwZXNHZW5lcmljc0NvbmNyZXRlMlN1cGVyRGlmZmVyZW50LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbWV0aG9kRHVwbGljYXRlcy9UeXBlc0dlbmVyaWNzQ29uY3JldGUyU3VwZXJEaWZmZXJlbnQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOTlkM2M3Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21ldGhvZER1cGxpY2F0ZXMvVHlwZXNHZW5lcmljc0NvbmNyZXRlMlN1cGVyRGlmZmVyZW50LmphdmEKQEAgLTAsMCArMSwxNCBAQAoraW1wb3J0IGphdmEuYXd0LldpbmRvdzsKK2ltcG9ydCBqYXZheC5zd2luZy5KQ29tcG9uZW50OworaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK2NsYXNzIFR5cGVzIHsKKyAgICBwdWJsaWMgdm9pZCA8Y2FyZXQ+bWV0aG9kKExpc3Q8PyBzdXBlciBKQ29tcG9uZW50PiB2KSB7CisgICAgICAgIE9iamVjdCBvID0gdi5nZXQoMCk7CisgICAgfQorICAgIHB1YmxpYyB2b2lkIGNvbnRleHQoKSB7CisgICAgICAgIExpc3Q8V2luZG93PiBsaXN0ID0gbmV3IEFycmF5TGlzdDxXaW5kb3c+KCk7CisgICAgICAgIE9iamVjdCBvID0gbGlzdC5nZXQoMCk7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21ldGhvZER1cGxpY2F0ZXMvVHlwZXNHZW5lcmljc1JhdzJDb25jcmV0ZS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21ldGhvZER1cGxpY2F0ZXMvVHlwZXNHZW5lcmljc1JhdzJDb25jcmV0ZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdlYWI4YjQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbWV0aG9kRHVwbGljYXRlcy9UeXBlc0dlbmVyaWNzUmF3MkNvbmNyZXRlLmphdmEKQEAgLTAsMCArMSwxMyBAQAoraW1wb3J0IGphdmEudXRpbC5MaXN0OworCitjbGFzcyBUeXBlcyB7CisgIHByaXZhdGUgTGlzdCBteUxpc3Q7CisKKyAgcHVibGljIHZvaWQgPGNhcmV0Pm1ldGhvZChMaXN0PFN0cmluZz4gdikgeworICAgIHYuY2xlYXIoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIGNvbnRleHQoKSB7CisgICAgbXlMaXN0LmNsZWFyKCk7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbWV0aG9kRHVwbGljYXRlcy9UeXBlc0dlbmVyaWNzUmF3MkNvbmNyZXRlLmphdmEuYWZ0ZXIgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbWV0aG9kRHVwbGljYXRlcy9UeXBlc0dlbmVyaWNzUmF3MkNvbmNyZXRlLmphdmEuYWZ0ZXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzRhOTM0YgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tZXRob2REdXBsaWNhdGVzL1R5cGVzR2VuZXJpY3NSYXcyQ29uY3JldGUuamF2YS5hZnRlcgpAQCAtMCwwICsxLDEzIEBACitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK2NsYXNzIFR5cGVzIHsKKyAgcHJpdmF0ZSBMaXN0IG15TGlzdDsKKworICBwdWJsaWMgdm9pZCBtZXRob2QoTGlzdDxTdHJpbmc+IHYpIHsKKyAgICB2LmNsZWFyKCk7CisgIH0KKworICBwdWJsaWMgdm9pZCBjb250ZXh0KCkgeworICAgICAgbWV0aG9kKG15TGlzdCk7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbWV0aG9kRHVwbGljYXRlcy9UeXBlc0dlbmVyaWNzUmF3MlJhdy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21ldGhvZER1cGxpY2F0ZXMvVHlwZXNHZW5lcmljc1JhdzJSYXcuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NjYwMTk0Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21ldGhvZER1cGxpY2F0ZXMvVHlwZXNHZW5lcmljc1JhdzJSYXcuamF2YQpAQCAtMCwwICsxLDEzIEBACitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK2NsYXNzIFR5cGVzIHsKKyAgcHJpdmF0ZSBMaXN0IG15TGlzdDsKKworICBwdWJsaWMgdm9pZCA8Y2FyZXQ+bWV0aG9kKExpc3QgdikgeworICAgIHYuY2xlYXIoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIGNvbnRleHQoKSB7CisgICAgbXlMaXN0LmNsZWFyKCk7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbWV0aG9kRHVwbGljYXRlcy9UeXBlc0dlbmVyaWNzUmF3MlJhdy5qYXZhLmFmdGVyIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21ldGhvZER1cGxpY2F0ZXMvVHlwZXNHZW5lcmljc1JhdzJSYXcuamF2YS5hZnRlcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNDgyZDA4Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21ldGhvZER1cGxpY2F0ZXMvVHlwZXNHZW5lcmljc1JhdzJSYXcuamF2YS5hZnRlcgpAQCAtMCwwICsxLDEzIEBACitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK2NsYXNzIFR5cGVzIHsKKyAgcHJpdmF0ZSBMaXN0IG15TGlzdDsKKworICBwdWJsaWMgdm9pZCBtZXRob2QoTGlzdCB2KSB7CisgICAgdi5jbGVhcigpOworICB9CisKKyAgcHVibGljIHZvaWQgY29udGV4dCgpIHsKKyAgICAgIG1ldGhvZChteUxpc3QpOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21ldGhvZER1cGxpY2F0ZXMvVHlwZXNJbXBsZW1lbnRzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbWV0aG9kRHVwbGljYXRlcy9UeXBlc0ltcGxlbWVudHMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYTk5YTZiCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21ldGhvZER1cGxpY2F0ZXMvVHlwZXNJbXBsZW1lbnRzLmphdmEKQEAgLTAsMCArMSwxMCBAQAorY2xhc3MgVHlwZXMgeworICBwdWJsaWMgY2hhciA8Y2FyZXQ+bWV0aG9kKENoYXJTZXF1ZW5jZSB2KSB7CisgICAgcmV0dXJuIHYuY2hhckF0KDApOworICB9CisKKyAgcHVibGljIHZvaWQgY29udGV4dCgpIHsKKyAgICBTdHJpbmcgdiA9ICJjaGlsZCB0eXBlIjsKKyAgICBjaGFyIGMgPSB2LmNoYXJBdCgwKTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21ldGhvZER1cGxpY2F0ZXMvVHlwZXNJbXBsZW1lbnRzLmphdmEuYWZ0ZXIgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbWV0aG9kRHVwbGljYXRlcy9UeXBlc0ltcGxlbWVudHMuamF2YS5hZnRlcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMzRiMjMxCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21ldGhvZER1cGxpY2F0ZXMvVHlwZXNJbXBsZW1lbnRzLmphdmEuYWZ0ZXIKQEAgLTAsMCArMSwxMCBAQAorY2xhc3MgVHlwZXMgeworICBwdWJsaWMgY2hhciBtZXRob2QoQ2hhclNlcXVlbmNlIHYpIHsKKyAgICByZXR1cm4gdi5jaGFyQXQoMCk7CisgIH0KKworICBwdWJsaWMgdm9pZCBjb250ZXh0KCkgeworICAgIFN0cmluZyB2ID0gImNoaWxkIHR5cGUiOworICAgIGNoYXIgYyA9IG1ldGhvZCh2KTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21ldGhvZER1cGxpY2F0ZXMvVHlwZXNOb1JlbGF0aW9uc2hpcC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21ldGhvZER1cGxpY2F0ZXMvVHlwZXNOb1JlbGF0aW9uc2hpcC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIyNWI5NTEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbWV0aG9kRHVwbGljYXRlcy9UeXBlc05vUmVsYXRpb25zaGlwLmphdmEKQEAgLTAsMCArMSw5IEBACitjbGFzcyBUeXBlcyB7CisgIHB1YmxpYyB2b2lkIDxjYXJldD5tZXRob2QoSW50ZWdlciB2KSB7CisgICAgaW50IGkgPSB2Lmhhc2hDb2RlKCk7CisgIH0KKworICBwdWJsaWMgdm9pZCBjb250ZXh0KEJvb2xlYW4gdikgeworICAgIGludCBpID0gdi5oYXNoQ29kZSgpOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21ldGhvZER1cGxpY2F0ZXMvVW51c2VkUGFyYW1ldGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbWV0aG9kRHVwbGljYXRlcy9VbnVzZWRQYXJhbWV0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lY2RjODU4Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21ldGhvZER1cGxpY2F0ZXMvVW51c2VkUGFyYW1ldGVyLmphdmEKQEAgLTAsMCArMSw5IEBACitjbGFzcyBUZXN0IHsKKyAgdm9pZCA8Y2FyZXQ+Zm9vKGludCBpKSB7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJoZWxsbyIpOworICB9CisKKyAgdm9pZCBiYXIoKSB7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJoZWxsbyIpOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21ldGhvZER1cGxpY2F0ZXMvVW51c2VkUGFyYW1ldGVyLmphdmEuYWZ0ZXIgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbWV0aG9kRHVwbGljYXRlcy9VbnVzZWRQYXJhbWV0ZXIuamF2YS5hZnRlcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZDViMTJlCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21ldGhvZER1cGxpY2F0ZXMvVW51c2VkUGFyYW1ldGVyLmphdmEuYWZ0ZXIKQEAgLTAsMCArMSw5IEBACitjbGFzcyBUZXN0IHsKKyAgdm9pZCBmb28oaW50IGkpIHsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oImhlbGxvIik7CisgIH0KKworICB2b2lkIGJhcigpIHsKKyAgICAgIGZvbygwKTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tZXRob2REdXBsaWNhdGVzL1VudXNlZFBhcmFtZXRlcjEuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tZXRob2REdXBsaWNhdGVzL1VudXNlZFBhcmFtZXRlcjEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYTMzMjQ4Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21ldGhvZER1cGxpY2F0ZXMvVW51c2VkUGFyYW1ldGVyMS5qYXZhCkBAIC0wLDAgKzEsOSBAQAorY2xhc3MgVGVzdCB7CisgIHZvaWQgPGNhcmV0PmZvbyhTdHJpbmcgcykgeworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiaGVsbG8iKTsKKyAgfQorCisgIHZvaWQgYmFyKCkgeworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiaGVsbG8iKTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tZXRob2REdXBsaWNhdGVzL1VudXNlZFBhcmFtZXRlcjEuamF2YS5hZnRlciBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tZXRob2REdXBsaWNhdGVzL1VudXNlZFBhcmFtZXRlcjEuamF2YS5hZnRlcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OGZjMGVjCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21ldGhvZER1cGxpY2F0ZXMvVW51c2VkUGFyYW1ldGVyMS5qYXZhLmFmdGVyCkBAIC0wLDAgKzEsOSBAQAorY2xhc3MgVGVzdCB7CisgIHZvaWQgZm9vKFN0cmluZyBzKSB7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJoZWxsbyIpOworICB9CisKKyAgdm9pZCBiYXIoKSB7CisgICAgICBmb28obnVsbCk7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbWV0aG9kRHVwbGljYXRlcy9WYXJhcmdzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbWV0aG9kRHVwbGljYXRlcy9WYXJhcmdzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGQzYWVmZAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tZXRob2REdXBsaWNhdGVzL1ZhcmFyZ3MuamF2YQpAQCAtMCwwICsxLDE2IEBACitpbXBvcnQgamF2YS51dGlsLio7CisKK3B1YmxpYyBjbGFzcyBWYXJhcmdzIHsKKwlwcml2YXRlIExpc3Q8U3RyaW5nPiA8Y2FyZXQ+bWV0aG9kKFN0cmluZy4uLiB2YWx1ZXMpIHsKKwkJcmV0dXJuIEFycmF5cy5hc0xpc3QodmFsdWVzKTsKKwl9CisJcHJpdmF0ZSB2b2lkIGNvbnRleHQoKSB7CisJCUxpc3Q8U3RyaW5nPiBsaXN0MSA9IEFycmF5cy5hc0xpc3QoImhpIiwgImJ5ZSIpOworCQlMaXN0PFN0cmluZz4gbGlzdDIgPSBBcnJheXMuYXNMaXN0KCJoaSIpOworCQlMaXN0PFN0cmluZz4gbGlzdDMgPSBBcnJheXMuYXNMaXN0KG5ldyBTdHJpbmdbXSB7fSk7CisJCVN0cmluZ1tdIHNhID0gbmV3IFN0cmluZ1tdIHt9OworCQlMaXN0PFN0cmluZz4gbGlzdDQgPSBBcnJheXMuYXNMaXN0KHNhKTsKKworCQlMaXN0IGxpc3RBID0gQXJyYXlzLmFzTGlzdCgwKTsKKwl9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbWV0aG9kRHVwbGljYXRlcy9WYXJhcmdzLmphdmEuYWZ0ZXIgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbWV0aG9kRHVwbGljYXRlcy9WYXJhcmdzLmphdmEuYWZ0ZXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODJhOWQ5NQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tZXRob2REdXBsaWNhdGVzL1ZhcmFyZ3MuamF2YS5hZnRlcgpAQCAtMCwwICsxLDE2IEBACitpbXBvcnQgamF2YS51dGlsLio7CisKK3B1YmxpYyBjbGFzcyBWYXJhcmdzIHsKKwlwcml2YXRlIExpc3Q8U3RyaW5nPiBtZXRob2QoU3RyaW5nLi4uIHZhbHVlcykgeworCQlyZXR1cm4gQXJyYXlzLmFzTGlzdCh2YWx1ZXMpOworCX0KKwlwcml2YXRlIHZvaWQgY29udGV4dCgpIHsKKwkJTGlzdDxTdHJpbmc+IGxpc3QxID0gbWV0aG9kKCJoaSIsICJieWUiKTsKKwkJTGlzdDxTdHJpbmc+IGxpc3QyID0gbWV0aG9kKCJoaSIpOworCQlMaXN0PFN0cmluZz4gbGlzdDMgPSBtZXRob2QobmV3IFN0cmluZ1tdIHt9KTsKKwkJU3RyaW5nW10gc2EgPSBuZXcgU3RyaW5nW10ge307CisJCUxpc3Q8U3RyaW5nPiBsaXN0NCA9IG1ldGhvZChzYSk7CisKKwkJTGlzdCBsaXN0QSA9IEFycmF5cy5hc0xpc3QoMCk7CisJfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21ldGhvZER1cGxpY2F0ZXNNaXNjL0Fub255bW91c0luaXRpYWxpemVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbWV0aG9kRHVwbGljYXRlc01pc2MvQW5vbnltb3VzSW5pdGlhbGl6ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMzMxZjNhCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21ldGhvZER1cGxpY2F0ZXNNaXNjL0Fub255bW91c0luaXRpYWxpemVyLmphdmEKQEAgLTAsMCArMSwxNSBAQAorcHVibGljIGNsYXNzIE1vZGVsIHsKKyAgcHVibGljIHN0YXRpYyBmaW5hbCBSdW5uYWJsZSBGTzxjYXJldD5PID0gbmV3IFJ1bm5hYmxlKCkgeworICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKKyAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiYWJjIik7CisgICAgfQorICB9OworCisgIHB1YmxpYyB2b2lkIGZvbygpIHsKKyAgICBuZXcgUnVubmFibGUoKSB7CisgICAgICBwdWJsaWMgdm9pZCBydW4oKSB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiYWJjIik7CisgICAgICB9CisgICAgfS5ydW4oKTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21ldGhvZER1cGxpY2F0ZXNNaXNjL0Fub255bW91c0luaXRpYWxpemVyLmphdmEuYWZ0ZXIgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbWV0aG9kRHVwbGljYXRlc01pc2MvQW5vbnltb3VzSW5pdGlhbGl6ZXIuamF2YS5hZnRlcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNTIxMTZjCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21ldGhvZER1cGxpY2F0ZXNNaXNjL0Fub255bW91c0luaXRpYWxpemVyLmphdmEuYWZ0ZXIKQEAgLTAsMCArMSwxMSBAQAorcHVibGljIGNsYXNzIE1vZGVsIHsKKyAgcHVibGljIHN0YXRpYyBmaW5hbCBSdW5uYWJsZSBGT08gPSBuZXcgUnVubmFibGUoKSB7CisgICAgcHVibGljIHZvaWQgcnVuKCkgeworICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJhYmMiKTsKKyAgICB9CisgIH07CisKKyAgcHVibGljIHZvaWQgZm9vKCkgeworICAgIEZPTy5ydW4oKTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21ldGhvZER1cGxpY2F0ZXNNaXNjL0NhbmRpZGF0ZVVucXVhbGlmaWVkU3RhdGljQWNjZXNzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbWV0aG9kRHVwbGljYXRlc01pc2MvQ2FuZGlkYXRlVW5xdWFsaWZpZWRTdGF0aWNBY2Nlc3MuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMDg0YTA2Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21ldGhvZER1cGxpY2F0ZXNNaXNjL0NhbmRpZGF0ZVVucXVhbGlmaWVkU3RhdGljQWNjZXNzLmphdmEKQEAgLTAsMCArMSwxNyBAQAorcHVibGljIGNsYXNzIGFhIHsKKyAgICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gaXNWaXM8Y2FyZXQ+dWFsVXBkYXRlKGludCB1cGRhdGVfdHlwZSkgeworICAgICAgICByZXR1cm4gdXBkYXRlX3R5cGUgPD0gSWFhYS5GVUxMX1FVT1RFX1ZJU1VBTDsKKyAgICB9Cit9CisKK2ludGVyZmFjZSBJYWFhIHsKKyAgICBpbnQgRlVMTF9RVU9URV9WSVNVQUwgPSAwOworfQorCitjbGFzcyBhIGltcGxlbWVudHMgSWFhYSB7CisgICAgaW50IHVwZGF0ZV90eXBlID0gODsKKworICAgIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBibGFibGEoaW50IHVwZGF0ZV90eXBlKSB7CisgICAgICAgIHJldHVybiB1cGRhdGVfdHlwZSA8PSBGVUxMX1FVT1RFX1ZJU1VBTDsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21ldGhvZER1cGxpY2F0ZXNNaXNjL0NhbmRpZGF0ZVVucXVhbGlmaWVkU3RhdGljQWNjZXNzLmphdmEuYWZ0ZXIgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbWV0aG9kRHVwbGljYXRlc01pc2MvQ2FuZGlkYXRlVW5xdWFsaWZpZWRTdGF0aWNBY2Nlc3MuamF2YS5hZnRlcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZTc5YzUzCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21ldGhvZER1cGxpY2F0ZXNNaXNjL0NhbmRpZGF0ZVVucXVhbGlmaWVkU3RhdGljQWNjZXNzLmphdmEuYWZ0ZXIKQEAgLTAsMCArMSwxNyBAQAorcHVibGljIGNsYXNzIGFhIHsKKyAgICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gaXNWaXN1YWxVcGRhdGUoaW50IHVwZGF0ZV90eXBlKSB7CisgICAgICAgIHJldHVybiB1cGRhdGVfdHlwZSA8PSBJYWFhLkZVTExfUVVPVEVfVklTVUFMOworICAgIH0KK30KKworaW50ZXJmYWNlIElhYWEgeworICAgIGludCBGVUxMX1FVT1RFX1ZJU1VBTCA9IDA7Cit9CisKK2NsYXNzIGEgaW1wbGVtZW50cyBJYWFhIHsKKyAgICBpbnQgdXBkYXRlX3R5cGUgPSA4OworCisgICAgcHVibGljIHN0YXRpYyBib29sZWFuIGJsYWJsYShpbnQgdXBkYXRlX3R5cGUpIHsKKyAgICAgICAgcmV0dXJuIGFhLmlzVmlzdWFsVXBkYXRlKHVwZGF0ZV90eXBlKTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21ldGhvZER1cGxpY2F0ZXNNaXNjL0NoYW5nZVJldHVyblR5cGVCeUZpZWxkLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbWV0aG9kRHVwbGljYXRlc01pc2MvQ2hhbmdlUmV0dXJuVHlwZUJ5RmllbGQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMDgxNDM3Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21ldGhvZER1cGxpY2F0ZXNNaXNjL0NoYW5nZVJldHVyblR5cGVCeUZpZWxkLmphdmEKQEAgLTAsMCArMSwyMSBAQAorY2xhc3MgVGVzdCB7CisgICAgcHJpdmF0ZSBCIG15RmllbGQ7CisKKyAgICBwdWJsaWMgdm9pZCBtZXRob2QoKSB7CisgICAgICAgIE9iamVjdCBvID0gbXlGaWVsZDsKKyAgICAgICAgU3RyaW5nIGEgPSBteUZpZWxkLmJiYi54eHgoKTsKKyAgICB9CisKKyAgICBwcml2YXRlIE9iamVjdCBmPGNhcmV0Pm9vKCl7CisgICAgICAgIHJldHVybiBteUZpZWxkOworICAgIH0KKworICAgIHByaXZhdGUgc3RhdGljIGNsYXNzIEIgeworICAgICAgICBwcml2YXRlIEMgYmJiOworICAgIH0KKworICAgIHByaXZhdGUgc3RhdGljIGNsYXNzIEMgeworICAgICAgICBTdHJpbmcgeHh4KCkge3JldHVybiAiIjt9CisgICAgfQorCit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21ldGhvZER1cGxpY2F0ZXNNaXNjL0NoYW5nZVJldHVyblR5cGVCeUZpZWxkLmphdmEuYWZ0ZXIgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbWV0aG9kRHVwbGljYXRlc01pc2MvQ2hhbmdlUmV0dXJuVHlwZUJ5RmllbGQuamF2YS5hZnRlcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NTc3YTBkCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21ldGhvZER1cGxpY2F0ZXNNaXNjL0NoYW5nZVJldHVyblR5cGVCeUZpZWxkLmphdmEuYWZ0ZXIKQEAgLTAsMCArMSwyMSBAQAorY2xhc3MgVGVzdCB7CisgICAgcHJpdmF0ZSBCIG15RmllbGQ7CisKKyAgICBwdWJsaWMgdm9pZCBtZXRob2QoKSB7CisgICAgICAgIE9iamVjdCBvID0gZm9vKCk7CisgICAgICAgIFN0cmluZyBhID0gZm9vKCkuYmJiLnh4eCgpOworICAgIH0KKworICAgIHByaXZhdGUgQiBmb28oKXsKKyAgICAgICAgcmV0dXJuIG15RmllbGQ7CisgICAgfQorCisgICAgcHJpdmF0ZSBzdGF0aWMgY2xhc3MgQiB7CisgICAgICAgIHByaXZhdGUgQyBiYmI7CisgICAgfQorCisgICAgcHJpdmF0ZSBzdGF0aWMgY2xhc3MgQyB7CisgICAgICAgIFN0cmluZyB4eHgoKSB7cmV0dXJuICIiO30KKyAgICB9CisKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbWV0aG9kRHVwbGljYXRlc01pc2MvQ2hhbmdlUmV0dXJuVHlwZUJ5UGFyYW1ldGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbWV0aG9kRHVwbGljYXRlc01pc2MvQ2hhbmdlUmV0dXJuVHlwZUJ5UGFyYW1ldGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDAwNjdlOQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tZXRob2REdXBsaWNhdGVzTWlzYy9DaGFuZ2VSZXR1cm5UeXBlQnlQYXJhbWV0ZXIuamF2YQpAQCAtMCwwICsxLDEyIEBACitjbGFzcyBBIHsKKworICAgIHB1YmxpYyB2b2lkIGJhcigpIHsKKyAgICAgICAgbSgiIik7CisgICAgfQorCisgICAgcHJpdmF0ZSBPYmplY3QgZjxjYXJldD5vbygpIHsKKyAgICAgICAgcmV0dXJuICIiOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIG0oU3RyaW5nIHNzKSB7fQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tZXRob2REdXBsaWNhdGVzTWlzYy9DaGFuZ2VSZXR1cm5UeXBlQnlQYXJhbWV0ZXIuamF2YS5hZnRlciBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tZXRob2REdXBsaWNhdGVzTWlzYy9DaGFuZ2VSZXR1cm5UeXBlQnlQYXJhbWV0ZXIuamF2YS5hZnRlcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZTZjNGZhCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21ldGhvZER1cGxpY2F0ZXNNaXNjL0NoYW5nZVJldHVyblR5cGVCeVBhcmFtZXRlci5qYXZhLmFmdGVyCkBAIC0wLDAgKzEsMTIgQEAKK2NsYXNzIEEgeworCisgICAgcHVibGljIHZvaWQgYmFyKCkgeworICAgICAgICBtKGZvbygpKTsKKyAgICB9CisKKyAgICBwcml2YXRlIFN0cmluZyBmb28oKSB7CisgICAgICAgIHJldHVybiAiIjsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBtKFN0cmluZyBzcykge30KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbWV0aG9kRHVwbGljYXRlc01pc2MvQ2hhbmdlUmV0dXJuVHlwZUJ5UmV0dXJuRXhwcmVzc2lvbi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21ldGhvZER1cGxpY2F0ZXNNaXNjL0NoYW5nZVJldHVyblR5cGVCeVJldHVybkV4cHJlc3Npb24uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMWNhODVkCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21ldGhvZER1cGxpY2F0ZXNNaXNjL0NoYW5nZVJldHVyblR5cGVCeVJldHVybkV4cHJlc3Npb24uamF2YQpAQCAtMCwwICsxLDIxIEBACitpbXBvcnQgamF2YS51dGlsLk1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuU2V0OworCitwdWJsaWMgY2xhc3MgQSB7CisgICAgcHVibGljIFN0cmluZyBnZXQoU3RyaW5nIGspIHsKKyAgICAgICAgcmV0dXJuIGJ1aWxkTWFwKCkuZ2V0KGspOworICAgIH0KKworICAgIHB1YmxpYyBTZXQ8U3RyaW5nPiBnZXRBbGwoU3RyaW5nIHgpIHsKKyAgICAgICAgcmV0dXJuIGJ1aWxkTWFwKCkua2V5U2V0KCk7CisgICAgfQorCisgICAgcHVibGljIE1hcDxTdHJpbmcsIFN0cmluZz4gZm88Y2FyZXQ+bygpIHsKKyAgICAgIHJldHVybiBidWlsZE1hcCgpOworICAgIH0KKworICAgIHB1YmxpYyBNYXA8U3RyaW5nLCBTdHJpbmc+IGJ1aWxkTWFwKCkgeworICAgICAgICByZXR1cm4gbnVsbDsKKyAgICB9CisKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbWV0aG9kRHVwbGljYXRlc01pc2MvQ2hhbmdlUmV0dXJuVHlwZUJ5UmV0dXJuRXhwcmVzc2lvbi5qYXZhLmFmdGVyIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21ldGhvZER1cGxpY2F0ZXNNaXNjL0NoYW5nZVJldHVyblR5cGVCeVJldHVybkV4cHJlc3Npb24uamF2YS5hZnRlcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YjhlMzg0Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21ldGhvZER1cGxpY2F0ZXNNaXNjL0NoYW5nZVJldHVyblR5cGVCeVJldHVybkV4cHJlc3Npb24uamF2YS5hZnRlcgpAQCAtMCwwICsxLDIxIEBACitpbXBvcnQgamF2YS51dGlsLk1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuU2V0OworCitwdWJsaWMgY2xhc3MgQSB7CisgICAgcHVibGljIFN0cmluZyBnZXQoU3RyaW5nIGspIHsKKyAgICAgICAgcmV0dXJuIGZvbygpLmdldChrKTsKKyAgICB9CisKKyAgICBwdWJsaWMgU2V0PFN0cmluZz4gZ2V0QWxsKFN0cmluZyB4KSB7CisgICAgICAgIHJldHVybiBmb28oKS5rZXlTZXQoKTsKKyAgICB9CisKKyAgICBwdWJsaWMgTWFwPFN0cmluZywgU3RyaW5nPiBmb28oKSB7CisgICAgICByZXR1cm4gYnVpbGRNYXAoKTsKKyAgICB9CisKKyAgICBwdWJsaWMgTWFwPFN0cmluZywgU3RyaW5nPiBidWlsZE1hcCgpIHsKKyAgICAgICAgcmV0dXJuIG51bGw7CisgICAgfQorCit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21ldGhvZER1cGxpY2F0ZXNNaXNjL0NoYW5nZVJldHVyblR5cGVCeVJldHVyblZhbHVlLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbWV0aG9kRHVwbGljYXRlc01pc2MvQ2hhbmdlUmV0dXJuVHlwZUJ5UmV0dXJuVmFsdWUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NzJlMGYwCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21ldGhvZER1cGxpY2F0ZXNNaXNjL0NoYW5nZVJldHVyblR5cGVCeVJldHVyblZhbHVlLmphdmEKQEAgLTAsMCArMSwxMyBAQAorCitwdWJsaWMgY2xhc3MgQSB7CisKKworICAgIHB1YmxpYyBPYmplY3QgZm88Y2FyZXQ+bygpIHsKKyAgICAgIHJldHVybiBudWxsOworICAgIH0KKworICAgIHB1YmxpYyBTdHJpbmcgYmFyKCkgeworICAgICAgICByZXR1cm4gbnVsbDsKKyAgICB9CisKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbWV0aG9kRHVwbGljYXRlc01pc2MvQ2hhbmdlUmV0dXJuVHlwZUJ5UmV0dXJuVmFsdWUuamF2YS5hZnRlciBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tZXRob2REdXBsaWNhdGVzTWlzYy9DaGFuZ2VSZXR1cm5UeXBlQnlSZXR1cm5WYWx1ZS5qYXZhLmFmdGVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA0OTJkZWIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbWV0aG9kRHVwbGljYXRlc01pc2MvQ2hhbmdlUmV0dXJuVHlwZUJ5UmV0dXJuVmFsdWUuamF2YS5hZnRlcgpAQCAtMCwwICsxLDEzIEBACisKK3B1YmxpYyBjbGFzcyBBIHsKKworCisgICAgcHVibGljIFN0cmluZyBmb28oKSB7CisgICAgICByZXR1cm4gbnVsbDsKKyAgICB9CisKKyAgICBwdWJsaWMgU3RyaW5nIGJhcigpIHsKKyAgICAgICAgcmV0dXJuIGZvbygpOworICAgIH0KKworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tZXRob2REdXBsaWNhdGVzTWlzYy9Db3JyZWN0VGhpcy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21ldGhvZER1cGxpY2F0ZXNNaXNjL0NvcnJlY3RUaGlzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2I5OWE1OAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tZXRob2REdXBsaWNhdGVzTWlzYy9Db3JyZWN0VGhpcy5qYXZhCkBAIC0wLDAgKzEsMTQgQEAKK3B1YmxpYyBjbGFzcyBCYXNlQ2xhc3MgZXh0ZW5kcyBKQ29tcG9uZW50IHsKK30KKworY2xhc3MgU3ViQ2xhc3MgZXh0ZW5kcyBCYXNlQ2xhc3MgeworIHZvaWQgYSgpIHsKKyAgU3lzdGVtLm91dC5wcmludGxuKGdldExvY2F0aW9uKCkpOworIH0KK30KKworY2xhc3MgVXRpbCB7CisgcHVibGljIHN0YXRpYyB2b2lkIG1ldDxjYXJldD5ob2QoQmFzZUNsYXNzIGJhc2UpIHsKKyAgU3lzdGVtLm91dC5wcmludGxuKGJhc2UuZ2V0TG9jYXRpb24oKSk7CisgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21ldGhvZER1cGxpY2F0ZXNNaXNjL0NvcnJlY3RUaGlzLmphdmEuYWZ0ZXIgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbWV0aG9kRHVwbGljYXRlc01pc2MvQ29ycmVjdFRoaXMuamF2YS5hZnRlcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xODFhMTg5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21ldGhvZER1cGxpY2F0ZXNNaXNjL0NvcnJlY3RUaGlzLmphdmEuYWZ0ZXIKQEAgLTAsMCArMSwxNCBAQAorcHVibGljIGNsYXNzIEJhc2VDbGFzcyBleHRlbmRzIEpDb21wb25lbnQgeworfQorCitjbGFzcyBTdWJDbGFzcyBleHRlbmRzIEJhc2VDbGFzcyB7Cisgdm9pZCBhKCkgeworICAgICBVdGlsLm1ldGhvZChTdWJDbGFzcy50aGlzKTsKKyB9Cit9CisKK2NsYXNzIFV0aWwgeworIHB1YmxpYyBzdGF0aWMgdm9pZCBtZXRob2QoQmFzZUNsYXNzIGJhc2UpIHsKKyAgU3lzdGVtLm91dC5wcmludGxuKGJhc2UuZ2V0TG9jYXRpb24oKSk7CisgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21ldGhvZER1cGxpY2F0ZXNNaXNjL0RldGVjdE5hbWVDb25mbGljdHMuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tZXRob2REdXBsaWNhdGVzTWlzYy9EZXRlY3ROYW1lQ29uZmxpY3RzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODA5ODczYQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tZXRob2REdXBsaWNhdGVzTWlzYy9EZXRlY3ROYW1lQ29uZmxpY3RzLmphdmEKQEAgLTAsMCArMSwxNyBAQAorY2xhc3MgVGVzdCB7CisgIHB1YmxpYyBGb28gY3JlYXRlRm9vKCkgeworICAgICAgICByZXR1cm4gbmV3IEZvbygpIHsKKyAgICAgICAgICAgIHB1YmxpYyB2b2lkIGJhcigpIHsKKyAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oMSk7CisgICAgICAgICAgICB9CisgICAgICAgIH07CisgICAgfQorCisgICAgcHVibGljIHZvaWQgYjxjYXJldD5hcigpIHsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKDEpOworICAgIH0KKworICAgIHB1YmxpYyBpbnRlcmZhY2UgRm9vIHsKKyAgICAgICAgdm9pZCBiYXIoKTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21ldGhvZER1cGxpY2F0ZXNNaXNjL0RldGVjdE5hbWVDb25mbGljdHMuamF2YS5hZnRlciBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tZXRob2REdXBsaWNhdGVzTWlzYy9EZXRlY3ROYW1lQ29uZmxpY3RzLmphdmEuYWZ0ZXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjdiYzk2MAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tZXRob2REdXBsaWNhdGVzTWlzYy9EZXRlY3ROYW1lQ29uZmxpY3RzLmphdmEuYWZ0ZXIKQEAgLTAsMCArMSwxNyBAQAorY2xhc3MgVGVzdCB7CisgIHB1YmxpYyBGb28gY3JlYXRlRm9vKCkgeworICAgICAgICByZXR1cm4gbmV3IEZvbygpIHsKKyAgICAgICAgICAgIHB1YmxpYyB2b2lkIGJhcigpIHsKKyAgICAgICAgICAgICAgICBUZXN0LnRoaXMuYmFyKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH07CisgICAgfQorCisgICAgcHVibGljIHZvaWQgYmFyKCkgeworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oMSk7CisgICAgfQorCisgICAgcHVibGljIGludGVyZmFjZSBGb28geworICAgICAgICB2b2lkIGJhcigpOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbWV0aG9kRHVwbGljYXRlc01pc2MvRGV0ZWN0TmFtZUNvbmZsaWN0c1dpdGhTdGF0aWMuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tZXRob2REdXBsaWNhdGVzTWlzYy9EZXRlY3ROYW1lQ29uZmxpY3RzV2l0aFN0YXRpYy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhlMWNkMDEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbWV0aG9kRHVwbGljYXRlc01pc2MvRGV0ZWN0TmFtZUNvbmZsaWN0c1dpdGhTdGF0aWMuamF2YQpAQCAtMCwwICsxLDE3IEBACitjbGFzcyBUZXN0IHsKKyAgcHVibGljIEZvbyBjcmVhdGVGb28oKSB7CisgICAgICAgIHJldHVybiBuZXcgRm9vKCkgeworICAgICAgICAgICAgcHVibGljIHZvaWQgYmFyKCkgeworICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigxKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfTsKKyAgICB9CisKKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgYjxjYXJldD5hcigpIHsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKDEpOworICAgIH0KKworICAgIHB1YmxpYyBpbnRlcmZhY2UgRm9vIHsKKyAgICAgICAgdm9pZCBiYXIoKTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21ldGhvZER1cGxpY2F0ZXNNaXNjL0RldGVjdE5hbWVDb25mbGljdHNXaXRoU3RhdGljLmphdmEuYWZ0ZXIgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbWV0aG9kRHVwbGljYXRlc01pc2MvRGV0ZWN0TmFtZUNvbmZsaWN0c1dpdGhTdGF0aWMuamF2YS5hZnRlcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kN2ExZTVjCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21ldGhvZER1cGxpY2F0ZXNNaXNjL0RldGVjdE5hbWVDb25mbGljdHNXaXRoU3RhdGljLmphdmEuYWZ0ZXIKQEAgLTAsMCArMSwxNyBAQAorY2xhc3MgVGVzdCB7CisgIHB1YmxpYyBGb28gY3JlYXRlRm9vKCkgeworICAgICAgICByZXR1cm4gbmV3IEZvbygpIHsKKyAgICAgICAgICAgIHB1YmxpYyB2b2lkIGJhcigpIHsKKyAgICAgICAgICAgICAgICBUZXN0LmJhcigpOworICAgICAgICAgICAgfQorICAgICAgICB9OworICAgIH0KKworICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBiYXIoKSB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigxKTsKKyAgICB9CisKKyAgICBwdWJsaWMgaW50ZXJmYWNlIEZvbyB7CisgICAgICAgIHZvaWQgYmFyKCk7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tZXRob2REdXBsaWNhdGVzTWlzYy9JbmNvcnJlY3RWYXJhcmdzQWNjZXNzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbWV0aG9kRHVwbGljYXRlc01pc2MvSW5jb3JyZWN0VmFyYXJnc0FjY2Vzcy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU2M2RkZGMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbWV0aG9kRHVwbGljYXRlc01pc2MvSW5jb3JyZWN0VmFyYXJnc0FjY2Vzcy5qYXZhCkBAIC0wLDAgKzEsMTQgQEAKK2NsYXNzIEEgeworICB2b2lkIGJhcihpbnQgaSl7CisgICAgbWV0aG9kKDEpOworICAgIG1ldGhvZChpLCAiYSIpOworICAgIG1ldGhvZCgxLCAiYSIsICJiIik7CisgIH0KKworICB2b2lkIG08Y2FyZXQ+KFN0cmluZy4uLiBhcmdzKSB7CisgICAgbWV0aG9kKDEsIGFyZ3MpOworICB9CisKKyAgdm9pZCBtZXRob2QoaW50IGksIFN0cmluZy4uLiBhcmdzKSB7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbWV0aG9kRHVwbGljYXRlc01pc2MvSW5jb3JyZWN0VmFyYXJnc0FjY2Vzcy5qYXZhLmFmdGVyIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21ldGhvZER1cGxpY2F0ZXNNaXNjL0luY29ycmVjdFZhcmFyZ3NBY2Nlc3MuamF2YS5hZnRlcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZmU2MjE0Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21ldGhvZER1cGxpY2F0ZXNNaXNjL0luY29ycmVjdFZhcmFyZ3NBY2Nlc3MuamF2YS5hZnRlcgpAQCAtMCwwICsxLDE0IEBACitjbGFzcyBBIHsKKyAgdm9pZCBiYXIoaW50IGkpeworICAgICAgbShuZXcgU3RyaW5nWzBdKTsKKyAgICAgIG1ldGhvZChpLCAiYSIpOworICAgICAgbSgiYSIsICJiIik7CisgIH0KKworICB2b2lkIG0oU3RyaW5nLi4uIGFyZ3MpIHsKKyAgICBtZXRob2QoMSwgYXJncyk7CisgIH0KKworICB2b2lkIG1ldGhvZChpbnQgaSwgU3RyaW5nLi4uIGFyZ3MpIHsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tZXRob2REdXBsaWNhdGVzTWlzYy9JbnNlcnRTdXBlclF1YWxpZmllcldoZW5OYW1lQ29uZmxpY3RzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbWV0aG9kRHVwbGljYXRlc01pc2MvSW5zZXJ0U3VwZXJRdWFsaWZpZXJXaGVuTmFtZUNvbmZsaWN0cy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ2ODNjZjcKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbWV0aG9kRHVwbGljYXRlc01pc2MvSW5zZXJ0U3VwZXJRdWFsaWZpZXJXaGVuTmFtZUNvbmZsaWN0cy5qYXZhCkBAIC0wLDAgKzEsMTEgQEAKK3B1YmxpYyBjbGFzcyBhIHsKKyAgdm9pZCBmPGNhcmV0Pm9vKCkgeworICAgIFN5c3RlbS5vdXQucHJpbnRsbigpOworICB9Cit9CisKK2NsYXNzIGIgZXh0ZW5kcyBhIHsKKyAgdm9pZCBmb28oKSB7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCk7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbWV0aG9kRHVwbGljYXRlc01pc2MvSW5zZXJ0U3VwZXJRdWFsaWZpZXJXaGVuTmFtZUNvbmZsaWN0cy5qYXZhLmFmdGVyIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21ldGhvZER1cGxpY2F0ZXNNaXNjL0luc2VydFN1cGVyUXVhbGlmaWVyV2hlbk5hbWVDb25mbGljdHMuamF2YS5hZnRlcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMGQ3YzU3Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21ldGhvZER1cGxpY2F0ZXNNaXNjL0luc2VydFN1cGVyUXVhbGlmaWVyV2hlbk5hbWVDb25mbGljdHMuamF2YS5hZnRlcgpAQCAtMCwwICsxLDExIEBACitwdWJsaWMgY2xhc3MgYSB7CisgIHZvaWQgZm9vKCkgeworICAgIFN5c3RlbS5vdXQucHJpbnRsbigpOworICB9Cit9CisKK2NsYXNzIGIgZXh0ZW5kcyBhIHsKKyAgdm9pZCBmb28oKSB7CisgICAgICBzdXBlci5mb28oKTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tZXRob2REdXBsaWNhdGVzTWlzYy9NZXRob2RUeXBlUGFyYW1ldGVycy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21ldGhvZER1cGxpY2F0ZXNNaXNjL01ldGhvZFR5cGVQYXJhbWV0ZXJzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjVlNDg5MgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tZXRob2REdXBsaWNhdGVzTWlzYy9NZXRob2RUeXBlUGFyYW1ldGVycy5qYXZhCkBAIC0wLDAgKzEsMTQgQEAKK2ltcG9ydCBqYXZhLnV0aWwuKjsKKworY2xhc3MgVGVzdCB7CisgICAgIDxFIGV4dGVuZHMgQT4gTGlzdDxFPiBtZXQ8Y2FyZXQ+aG9kKCkgeworICAgICAgICByZXR1cm4gbmV3IEFycmF5TGlzdDxFPigpOworICAgIH0KKworICAgIHZvaWQgZHVwbGljYXRlZCgpIHsKKyAgICAgICAgTGlzdDxCPiBsID0gbmV3IEFycmF5TGlzdDxCPigpOworICAgIH0KKworICAgIGNsYXNzIEEge30KKyAgICBjbGFzcyBCIGV4dGVuZHMgQSB7fQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tZXRob2REdXBsaWNhdGVzTWlzYy9NZXRob2RUeXBlUGFyYW1ldGVycy5qYXZhLmFmdGVyIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21ldGhvZER1cGxpY2F0ZXNNaXNjL01ldGhvZFR5cGVQYXJhbWV0ZXJzLmphdmEuYWZ0ZXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGRiZTQ2NgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tZXRob2REdXBsaWNhdGVzTWlzYy9NZXRob2RUeXBlUGFyYW1ldGVycy5qYXZhLmFmdGVyCkBAIC0wLDAgKzEsMTQgQEAKK2ltcG9ydCBqYXZhLnV0aWwuKjsKKworY2xhc3MgVGVzdCB7CisgICAgIDxFIGV4dGVuZHMgQT4gTGlzdDxFPiBtZXRob2QoKSB7CisgICAgICAgIHJldHVybiBuZXcgQXJyYXlMaXN0PEU+KCk7CisgICAgfQorCisgICAgdm9pZCBkdXBsaWNhdGVkKCkgeworICAgICAgICBMaXN0PEI+IGwgPSBtZXRob2QoKTsKKyAgICB9CisKKyAgICBjbGFzcyBBIHt9CisgICAgY2xhc3MgQiBleHRlbmRzIEEge30KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbWV0aG9kRHVwbGljYXRlc01pc2MvTm9EZXRlY3ROYW1lQ29uZmxpY3RzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbWV0aG9kRHVwbGljYXRlc01pc2MvTm9EZXRlY3ROYW1lQ29uZmxpY3RzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjY5OGVhNAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tZXRob2REdXBsaWNhdGVzTWlzYy9Ob0RldGVjdE5hbWVDb25mbGljdHMuamF2YQpAQCAtMCwwICsxLDE3IEBACitjbGFzcyBUZXN0IHsKKyAgcHVibGljIEZvbyBjcmVhdGVGb28oKSB7CisgICAgICAgIHJldHVybiBuZXcgRm9vKCkgeworICAgICAgICAgICAgcHVibGljIHZvaWQgYmFyKCkgeworICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigxKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfTsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBiPGNhcmV0PmFyKGludCBpKSB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihpKTsKKyAgICB9CisKKyAgICBwdWJsaWMgaW50ZXJmYWNlIEZvbyB7CisgICAgICAgIHZvaWQgYmFyKCk7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tZXRob2REdXBsaWNhdGVzTWlzYy9Ob0RldGVjdE5hbWVDb25mbGljdHMuamF2YS5hZnRlciBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tZXRob2REdXBsaWNhdGVzTWlzYy9Ob0RldGVjdE5hbWVDb25mbGljdHMuamF2YS5hZnRlcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44Y2MwYzgxCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21ldGhvZER1cGxpY2F0ZXNNaXNjL05vRGV0ZWN0TmFtZUNvbmZsaWN0cy5qYXZhLmFmdGVyCkBAIC0wLDAgKzEsMTcgQEAKK2NsYXNzIFRlc3QgeworICBwdWJsaWMgRm9vIGNyZWF0ZUZvbygpIHsKKyAgICAgICAgcmV0dXJuIG5ldyBGb28oKSB7CisgICAgICAgICAgICBwdWJsaWMgdm9pZCBiYXIoKSB7CisgICAgICAgICAgICAgICAgYmFyKDEpOworICAgICAgICAgICAgfQorICAgICAgICB9OworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIGJhcihpbnQgaSkgeworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oaSk7CisgICAgfQorCisgICAgcHVibGljIGludGVyZmFjZSBGb28geworICAgICAgICB2b2lkIGJhcigpOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbWV0aG9kRHVwbGljYXRlc01pc2MvUGFyYW1ldGVyc01vZGlmaWNhdGlvbi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21ldGhvZER1cGxpY2F0ZXNNaXNjL1BhcmFtZXRlcnNNb2RpZmljYXRpb24uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YWFmN2U4Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21ldGhvZER1cGxpY2F0ZXNNaXNjL1BhcmFtZXRlcnNNb2RpZmljYXRpb24uamF2YQpAQCAtMCwwICsxLDI0IEBACitjbGFzcyBUZXN0IHsKKyAgcHJpdmF0ZSBkb3VibGUgZDxjYXJldD5kMShpbnQgaW5kZXgsIGRvdWJsZSBjb21wVmFsLCBpbnQgbnVtRGF5cykgeworICAgIGRvdWJsZSBhdmVTbG9wZSA9IDA7CisKKyAgICBmb3IgKGludCBpID0gMDsgY29uZGl0aW9uKGluZGV4LCBudW1EYXlzLCBpKTsgaSsrKSB7CisgICAgICAtLWluZGV4OworICAgICAgYXZlU2xvcGUgPSBjb21taW5TZW5kaW5nKGluZGV4LCBjb21wVmFsLCBhdmVTbG9wZSwgaSk7CisgICAgfQorICAgIHJldHVybiBhdmVTbG9wZTsKKyAgfQorCisgIHByaXZhdGUgZG91YmxlIHNzMihpbnQgaW5kZXgsIGRvdWJsZSBjb21wVmFsLCBpbnQgbnVtRGF5cykgeworICAgIGRvdWJsZSBhdmVTbG9wZSA9IDA7CisKKyAgICBmb3IgKGludCBpID0gMDsgY29uZGl0aW9uKGluZGV4LCBudW1EYXlzLCBpKTsgaSsrKSB7CisgICAgICAtLWluZGV4OworICAgICAgYXZlU2xvcGUgPSBjb21taW5TZW5kaW5nKGluZGV4LCBjb21wVmFsLCBhdmVTbG9wZSwgaSk7CisgICAgfQorICAgIHJldHVybiBhdmVTbG9wZTsKKyAgfQorCisgIHByaXZhdGUgYm9vbGVhbiBjb25kaXRpb24oaW50IGlkeCwgaW50IG4sIGludCBpKXtyZXR1cm4gZmFsc2U7fQorICBwcml2YXRlIGRvdWJsZSBjb21taW5TZW5kaW5nKGludCBpZHgsIGRvdWJsZSBkLCBkb3VibGUgYSwgaW50IGkpe3JldHVybiAwO30KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbWV0aG9kRHVwbGljYXRlc01pc2MvUGFyYW1ldGVyc01vZGlmaWNhdGlvbi5qYXZhLmFmdGVyIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21ldGhvZER1cGxpY2F0ZXNNaXNjL1BhcmFtZXRlcnNNb2RpZmljYXRpb24uamF2YS5hZnRlcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNGM1NTNlCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21ldGhvZER1cGxpY2F0ZXNNaXNjL1BhcmFtZXRlcnNNb2RpZmljYXRpb24uamF2YS5hZnRlcgpAQCAtMCwwICsxLDE5IEBACitjbGFzcyBUZXN0IHsKKyAgcHJpdmF0ZSBkb3VibGUgZGQxKGludCBpbmRleCwgZG91YmxlIGNvbXBWYWwsIGludCBudW1EYXlzKSB7CisgICAgZG91YmxlIGF2ZVNsb3BlID0gMDsKKworICAgIGZvciAoaW50IGkgPSAwOyBjb25kaXRpb24oaW5kZXgsIG51bURheXMsIGkpOyBpKyspIHsKKyAgICAgIC0taW5kZXg7CisgICAgICBhdmVTbG9wZSA9IGNvbW1pblNlbmRpbmcoaW5kZXgsIGNvbXBWYWwsIGF2ZVNsb3BlLCBpKTsKKyAgICB9CisgICAgcmV0dXJuIGF2ZVNsb3BlOworICB9CisKKyAgcHJpdmF0ZSBkb3VibGUgc3MyKGludCBpbmRleCwgZG91YmxlIGNvbXBWYWwsIGludCBudW1EYXlzKSB7CisgICAgICBkb3VibGUgYXZlU2xvcGUgPSBkZDEoaW5kZXgsIGNvbXBWYWwsIG51bURheXMpOworICAgIHJldHVybiBhdmVTbG9wZTsKKyAgfQorCisgIHByaXZhdGUgYm9vbGVhbiBjb25kaXRpb24oaW50IGlkeCwgaW50IG4sIGludCBpKXtyZXR1cm4gZmFsc2U7fQorICBwcml2YXRlIGRvdWJsZSBjb21taW5TZW5kaW5nKGludCBpZHgsIGRvdWJsZSBkLCBkb3VibGUgYSwgaW50IGkpe3JldHVybiAwO30KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbWV0aG9kRHVwbGljYXRlc01pc2MvUGFzc0FycmF5MlZhcmFyZ01ldGhvZENhbGwuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tZXRob2REdXBsaWNhdGVzTWlzYy9QYXNzQXJyYXkyVmFyYXJnTWV0aG9kQ2FsbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI5ZGUwMGUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbWV0aG9kRHVwbGljYXRlc01pc2MvUGFzc0FycmF5MlZhcmFyZ01ldGhvZENhbGwuamF2YQpAQCAtMCwwICsxLDEzIEBACitjbGFzcyBUZXN0IHsKKyAgcHVibGljIHZvaWQgcHJpbnQ8Y2FyZXQ+QXJyYXkoU3RyaW5nLi4uIHApIHsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4ocFswXSk7CisgICAgU3lzdGVtLm91dC5wcmludGxuKHBbMV0pOworICB9CisKKyAgcHVibGljIHZvaWQgZG9TbXRoKCkgeworICAgIFN0cmluZ1tdIGFyciA9IHsic210aDEiLCAic210aDIiLCAic210aDMifTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oYXJyWzBdKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oYXJyWzFdKTsKKyAgfQorCit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21ldGhvZER1cGxpY2F0ZXNNaXNjL1Bhc3NBcnJheTJWYXJhcmdNZXRob2RDYWxsLmphdmEuYWZ0ZXIgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbWV0aG9kRHVwbGljYXRlc01pc2MvUGFzc0FycmF5MlZhcmFyZ01ldGhvZENhbGwuamF2YS5hZnRlcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NjkwNTc1Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21ldGhvZER1cGxpY2F0ZXNNaXNjL1Bhc3NBcnJheTJWYXJhcmdNZXRob2RDYWxsLmphdmEuYWZ0ZXIKQEAgLTAsMCArMSwxMiBAQAorY2xhc3MgVGVzdCB7CisgIHB1YmxpYyB2b2lkIHByaW50QXJyYXkoU3RyaW5nLi4uIHApIHsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4ocFswXSk7CisgICAgU3lzdGVtLm91dC5wcmludGxuKHBbMV0pOworICB9CisKKyAgcHVibGljIHZvaWQgZG9TbXRoKCkgeworICAgIFN0cmluZ1tdIGFyciA9IHsic210aDEiLCAic210aDIiLCAic210aDMifTsKKyAgICAgIHByaW50QXJyYXkoYXJyKTsKKyAgfQorCit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21ldGhvZER1cGxpY2F0ZXNNaXNjL1F1YWxpZmllcnMuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tZXRob2REdXBsaWNhdGVzTWlzYy9RdWFsaWZpZXJzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzNkMDViMwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tZXRob2REdXBsaWNhdGVzTWlzYy9RdWFsaWZpZXJzLmphdmEKQEAgLTAsMCArMSwyMCBAQAorY2xhc3MgVXRpbHogeworICAgIHN0YXRpYyBpbnQgZnVuYygpeworICAgICAgICByZXR1cm4gMTsKKyAgICB9CisKKyAgICBzdGF0aWMgaW50IGZvbzEoKXsKKyAgICAgICAgcmV0dXJuIDIqVXRpbHouZnVuYygpOworICAgIH0KKworICAgIHN0YXRpYyBpbnQgZm88Y2FyZXQ+bzIoKXsKKyAgICAgICAgcmV0dXJuIDIqZnVuYygpOworICAgIH0KKworfQorCitjbGFzcyBTb21ldGhpbmcgeworICAgIFNvbWV0aGluZygpeworICAgICAgICBpbnQgeCA9IDIqVXRpbHouZnVuYygpOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbWV0aG9kRHVwbGljYXRlc01pc2MvUXVhbGlmaWVycy5qYXZhLmFmdGVyIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21ldGhvZER1cGxpY2F0ZXNNaXNjL1F1YWxpZmllcnMuamF2YS5hZnRlcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZWJlOGU3Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21ldGhvZER1cGxpY2F0ZXNNaXNjL1F1YWxpZmllcnMuamF2YS5hZnRlcgpAQCAtMCwwICsxLDIwIEBACitjbGFzcyBVdGlseiB7CisgICAgc3RhdGljIGludCBmdW5jKCl7CisgICAgICAgIHJldHVybiAxOworICAgIH0KKworICAgIHN0YXRpYyBpbnQgZm9vMSgpeworICAgICAgICByZXR1cm4gZm9vMigpOworICAgIH0KKworICAgIHN0YXRpYyBpbnQgZm9vMigpeworICAgICAgICByZXR1cm4gMipmdW5jKCk7CisgICAgfQorCit9CisKK2NsYXNzIFNvbWV0aGluZyB7CisgICAgU29tZXRoaW5nKCl7CisgICAgICAgIGludCB4ID0gVXRpbHouZm9vMigpOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbWV0aG9kRHVwbGljYXRlc01pc2MvU2ltcGxlQ29uc3RhbnQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tZXRob2REdXBsaWNhdGVzTWlzYy9TaW1wbGVDb25zdGFudC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRmN2RlMzYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbWV0aG9kRHVwbGljYXRlc01pc2MvU2ltcGxlQ29uc3RhbnQuamF2YQpAQCAtMCwwICsxLDEyIEBACitjbGFzcyBUZXN0IHsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBBPGNhcmV0PkJDID0gImFiYyI7CisgICAgdm9pZCBmb28oKSB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiYWJjIik7CisgICAgfQorfQorCitjbGFzcyBGb28geworICAgIHZvaWQgYmFyKCkgeworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImFiYyIpOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbWV0aG9kRHVwbGljYXRlc01pc2MvU2ltcGxlQ29uc3RhbnQuamF2YS5hZnRlciBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tZXRob2REdXBsaWNhdGVzTWlzYy9TaW1wbGVDb25zdGFudC5qYXZhLmFmdGVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMxNWE3OTAKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbWV0aG9kRHVwbGljYXRlc01pc2MvU2ltcGxlQ29uc3RhbnQuamF2YS5hZnRlcgpAQCAtMCwwICsxLDEyIEBACitjbGFzcyBUZXN0IHsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBBQkMgPSAiYWJjIjsKKyAgICB2b2lkIGZvbygpIHsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKEFCQyk7CisgICAgfQorfQorCitjbGFzcyBGb28geworICAgIHZvaWQgYmFyKCkgeworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oVGVzdC5BQkMpOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbWV0aG9kRHVwbGljYXRlc01pc2MvU2tpcE5vdEFjY2Vzc2libGUuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tZXRob2REdXBsaWNhdGVzTWlzYy9Ta2lwTm90QWNjZXNzaWJsZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYxNDU3OTkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbWV0aG9kRHVwbGljYXRlc01pc2MvU2tpcE5vdEFjY2Vzc2libGUuamF2YQpAQCAtMCwwICsxLDE4IEBACitjbGFzcyBCIHsKKyAgICBwcml2YXRlIHZvaWQgPGNhcmV0PmcoKSB7CisgICAgICAgICAgIGYoKTsKKyAgICAgICB9CisKKyAgICAgICBwcml2YXRlIHZvaWQgZigpIHsKKyAgICAgICB9Cit9CisKKworY2xhc3MgQyBleHRlbmRzIEIgeworICAgIHByaXZhdGUgdm9pZCBnKCkgeworICAgICAgICBmKCk7CisgICAgfQorCisgICAgcHJpdmF0ZSB2b2lkIGYoKSB7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21ldGhvZER1cGxpY2F0ZXNNaXNjL1N1cGVySW5UaGVTYW1lQ29udGV4dC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21ldGhvZER1cGxpY2F0ZXNNaXNjL1N1cGVySW5UaGVTYW1lQ29udGV4dC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmExZDg4N2UKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbWV0aG9kRHVwbGljYXRlc01pc2MvU3VwZXJJblRoZVNhbWVDb250ZXh0LmphdmEKQEAgLTAsMCArMSwxNyBAQAorcHVibGljIGNsYXNzIGEgeworICAgIHB1YmxpYyB2b2lkIGxvZ2luKCkgeworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oKTsKKyAgICB9Cit9CisKK2NsYXNzIGIgZXh0ZW5kcyBhIHsKKyAgICBwdWJsaWMgdm9pZCBkb0w8Y2FyZXQ+b2dpbigpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICBzdXBlci5sb2dpbigpOworICAgIH0KK30KKworY2xhc3MgYyBleHRlbmRzIGEgeworICAgIHB1YmxpYyB2b2lkIGRvTG9naW4oKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgc3VwZXIubG9naW4oKTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21ldGhvZER1cGxpY2F0ZXNNaXNjL1N1cGVySW5UaGVTYW1lQ29udGV4dFF1YWxpZmllZC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21ldGhvZER1cGxpY2F0ZXNNaXNjL1N1cGVySW5UaGVTYW1lQ29udGV4dFF1YWxpZmllZC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNmYTgxOTUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbWV0aG9kRHVwbGljYXRlc01pc2MvU3VwZXJJblRoZVNhbWVDb250ZXh0UXVhbGlmaWVkLmphdmEKQEAgLTAsMCArMSwyMCBAQAorcHVibGljIGNsYXNzIGEgeworICAgIHB1YmxpYyB2b2lkIGxvZ2luKCkgeworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oKTsKKyAgICB9Cit9CisKK2NsYXNzIGIgZXh0ZW5kcyBhIHsKKyAgICBwdWJsaWMgdm9pZCBkb0w8Y2FyZXQ+b2dpbigpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICBzdXBlci5sb2dpbigpOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIGZvbygpIHRocm93cyBFeGNlcHRpb24geworICAgICAgbmV3IFJ1bm5hYmxlKCkgeworICAgICAgICBwdWJsaWMgdm9pZCBydW4oKSB7CisgICAgICAgICAgYi5zdXBlci5sb2dpbigpOworICAgICAgICB9CisgICAgICB9LnJ1bigpOworICAgIH0KK30KKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21ldGhvZER1cGxpY2F0ZXNNaXNjL1N1cGVySW5UaGVTYW1lQ29udGV4dFF1YWxpZmllZC5qYXZhLmFmdGVyIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21ldGhvZER1cGxpY2F0ZXNNaXNjL1N1cGVySW5UaGVTYW1lQ29udGV4dFF1YWxpZmllZC5qYXZhLmFmdGVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhmZGI2MGIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbWV0aG9kRHVwbGljYXRlc01pc2MvU3VwZXJJblRoZVNhbWVDb250ZXh0UXVhbGlmaWVkLmphdmEuYWZ0ZXIKQEAgLTAsMCArMSwyMCBAQAorcHVibGljIGNsYXNzIGEgeworICAgIHB1YmxpYyB2b2lkIGxvZ2luKCkgeworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oKTsKKyAgICB9Cit9CisKK2NsYXNzIGIgZXh0ZW5kcyBhIHsKKyAgICBwdWJsaWMgdm9pZCBkb0xvZ2luKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIHN1cGVyLmxvZ2luKCk7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgZm9vKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICBuZXcgUnVubmFibGUoKSB7CisgICAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKKyAgICAgICAgICAgIGRvTG9naW4oKTsKKyAgICAgICAgfQorICAgICAgfS5ydW4oKTsKKyAgICB9Cit9CisKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tZXRob2REdXBsaWNhdGVzTWlzYy9VbnF1YWxpZmllZFN0YXRpY0FjY2Vzcy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21ldGhvZER1cGxpY2F0ZXNNaXNjL1VucXVhbGlmaWVkU3RhdGljQWNjZXNzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGZiYTAyYgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tZXRob2REdXBsaWNhdGVzTWlzYy9VbnF1YWxpZmllZFN0YXRpY0FjY2Vzcy5qYXZhCkBAIC0wLDAgKzEsMTcgQEAKK3B1YmxpYyBjbGFzcyBhYSB7CisgICAgcHVibGljIHN0YXRpYyBib29sZWFuIGlzVmlzdWFsVXBkYXRlKGludCB1cGRhdGVfdHlwZSkgeworICAgICAgICByZXR1cm4gdXBkYXRlX3R5cGUgPD0gSWFhYS5GVUxMX1FVT1RFX1ZJU1VBTDsKKyAgICB9Cit9CisKK2ludGVyZmFjZSBJYWFhIHsKKyAgICBpbnQgRlVMTF9RVU9URV9WSVNVQUwgPSAwOworfQorCitjbGFzcyBhIGltcGxlbWVudHMgSWFhYSB7CisgICAgaW50IHVwZGF0ZV90eXBlID0gODsKKworICAgIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBibGFiPGNhcmV0PmxhKGludCB1cGRhdGVfdHlwZSkgeworICAgICAgICByZXR1cm4gdXBkYXRlX3R5cGUgPD0gRlVMTF9RVU9URV9WSVNVQUw7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tZXRob2REdXBsaWNhdGVzTWlzYy9VbnF1YWxpZmllZFN0YXRpY0FjY2Vzcy5qYXZhLmFmdGVyIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21ldGhvZER1cGxpY2F0ZXNNaXNjL1VucXVhbGlmaWVkU3RhdGljQWNjZXNzLmphdmEuYWZ0ZXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDQwZjJiMAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tZXRob2REdXBsaWNhdGVzTWlzYy9VbnF1YWxpZmllZFN0YXRpY0FjY2Vzcy5qYXZhLmFmdGVyCkBAIC0wLDAgKzEsMTcgQEAKK3B1YmxpYyBjbGFzcyBhYSB7CisgICAgcHVibGljIHN0YXRpYyBib29sZWFuIGlzVmlzdWFsVXBkYXRlKGludCB1cGRhdGVfdHlwZSkgeworICAgICAgICByZXR1cm4gYS5ibGFibGEodXBkYXRlX3R5cGUpOworICAgIH0KK30KKworaW50ZXJmYWNlIElhYWEgeworICAgIGludCBGVUxMX1FVT1RFX1ZJU1VBTCA9IDA7Cit9CisKK2NsYXNzIGEgaW1wbGVtZW50cyBJYWFhIHsKKyAgICBpbnQgdXBkYXRlX3R5cGUgPSA4OworCisgICAgcHVibGljIHN0YXRpYyBib29sZWFuIGJsYWJsYShpbnQgdXBkYXRlX3R5cGUpIHsKKyAgICAgICAgcmV0dXJuIHVwZGF0ZV90eXBlIDw9IEZVTExfUVVPVEVfVklTVUFMOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbWV0aG9kRHVwbGljYXRlc01pc2MvVmFyVmFyYXJnc0FjY2Vzcy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21ldGhvZER1cGxpY2F0ZXNNaXNjL1ZhclZhcmFyZ3NBY2Nlc3MuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMDMxZWNmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21ldGhvZER1cGxpY2F0ZXNNaXNjL1ZhclZhcmFyZ3NBY2Nlc3MuamF2YQpAQCAtMCwwICsxLDE0IEBACitjbGFzcyBBIHsKKyAgdm9pZCBiYXIoaW50IGkpeworICAgIG1ldGhvZChpKTsKKyAgICBtZXRob2QoaSwgImEiKTsKKyAgICBtZXRob2QoaSwgImEiLCAiYiIpOworICB9CisKKyAgdm9pZCBtPGNhcmV0PihpbnQgaSwgU3RyaW5nLi4uIGFyZ3MpIHsKKyAgICBtZXRob2QoaSwgYXJncyk7CisgIH0KKworICB2b2lkIG1ldGhvZChpbnQgaSwgU3RyaW5nLi4uIGFyZ3MpIHsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tZXRob2REdXBsaWNhdGVzTWlzYy9WYXJWYXJhcmdzQWNjZXNzLmphdmEuYWZ0ZXIgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbWV0aG9kRHVwbGljYXRlc01pc2MvVmFyVmFyYXJnc0FjY2Vzcy5qYXZhLmFmdGVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ0N2I5MGMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbWV0aG9kRHVwbGljYXRlc01pc2MvVmFyVmFyYXJnc0FjY2Vzcy5qYXZhLmFmdGVyCkBAIC0wLDAgKzEsMTQgQEAKK2NsYXNzIEEgeworICB2b2lkIGJhcihpbnQgaSl7CisgICAgICBtKGksIG5ldyBTdHJpbmdbMF0pOworICAgICAgbShpLCAiYSIpOworICAgICAgbShpLCAiYSIsICJiIik7CisgIH0KKworICB2b2lkIG0oaW50IGksIFN0cmluZy4uLiBhcmdzKSB7CisgICAgbWV0aG9kKGksIGFyZ3MpOworICB9CisKKyAgdm9pZCBtZXRob2QoaW50IGksIFN0cmluZy4uLiBhcmdzKSB7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbWV0aG9kRHVwbGljYXRlc01pc2MvVmFyYXJnc0FjY2Vzcy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21ldGhvZER1cGxpY2F0ZXNNaXNjL1ZhcmFyZ3NBY2Nlc3MuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZjljYWNjCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21ldGhvZER1cGxpY2F0ZXNNaXNjL1ZhcmFyZ3NBY2Nlc3MuamF2YQpAQCAtMCwwICsxLDE0IEBACitjbGFzcyBBIHsKKyAgeworICAgIG1ldGhvZCgxKTsKKyAgICBtZXRob2QoMSwgImEiKTsKKyAgICBtZXRob2QoMSwgImEiLCAiYiIpOworICB9CisKKyAgdm9pZCBtPGNhcmV0PihTdHJpbmcuLi4gYXJncykgeworICAgIG1ldGhvZCgxLCBhcmdzKTsKKyAgfQorCisgIHZvaWQgbWV0aG9kKGludCBpLCBTdHJpbmcuLi4gYXJncykgeworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21ldGhvZER1cGxpY2F0ZXNNaXNjL1ZhcmFyZ3NBY2Nlc3MuamF2YS5hZnRlciBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tZXRob2REdXBsaWNhdGVzTWlzYy9WYXJhcmdzQWNjZXNzLmphdmEuYWZ0ZXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjQ1ZDdjNQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tZXRob2REdXBsaWNhdGVzTWlzYy9WYXJhcmdzQWNjZXNzLmphdmEuYWZ0ZXIKQEAgLTAsMCArMSwxNCBAQAorY2xhc3MgQSB7CisgIHsKKyAgICAgIG0obmV3IFN0cmluZ1swXSk7CisgICAgICBtKCJhIik7CisgICAgICBtKCJhIiwgImIiKTsKKyAgfQorCisgIHZvaWQgbShTdHJpbmcuLi4gYXJncykgeworICAgIG1ldGhvZCgxLCBhcmdzKTsKKyAgfQorCisgIHZvaWQgbWV0aG9kKGludCBpLCBTdHJpbmcuLi4gYXJncykgeworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21pZ3JhdGlvbi9wYWNrYWdlL2FmdGVyL3AxL0MuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9taWdyYXRpb24vcGFja2FnZS9hZnRlci9wMS9DLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2Y2ZjI1YgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9taWdyYXRpb24vcGFja2FnZS9hZnRlci9wMS9DLmphdmEKQEAgLTAsMCArMSw3IEBACitwYWNrYWdlIHAxOworCitpbXBvcnQgamF2YS5sYW5nLkFBQTsKKworY2xhc3MgQyB7CisgIEFBQSBhID0gbmV3IEFBQSgpOworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9taWdyYXRpb24vcGFja2FnZS9hZnRlci9wMS9DMS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21pZ3JhdGlvbi9wYWNrYWdlL2FmdGVyL3AxL0MxLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2QwMGMxYgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9taWdyYXRpb24vcGFja2FnZS9hZnRlci9wMS9DMS5qYXZhCkBAIC0wLDAgKzEsNSBAQAorcGFja2FnZSBwMTsKKworY2xhc3MgQyB7CisgIGphdmEubGFuZy5BQUEgYSA9IG5ldyBqYXZhLmxhbmcuQUFBKCk7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21pZ3JhdGlvbi9wYWNrYWdlL2JlZm9yZS9wMS9DLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbWlncmF0aW9uL3BhY2thZ2UvYmVmb3JlL3AxL0MuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MzE2MWRjCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21pZ3JhdGlvbi9wYWNrYWdlL2JlZm9yZS9wMS9DLmphdmEKQEAgLTAsMCArMSw3IEBACitwYWNrYWdlIHAxOworCitpbXBvcnQgcXFxLkFBQTsKKworY2xhc3MgQyB7CisgIEFBQSBhID0gbmV3IEFBQSgpOworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9taWdyYXRpb24vcGFja2FnZS9iZWZvcmUvcDEvQzEuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9taWdyYXRpb24vcGFja2FnZS9iZWZvcmUvcDEvQzEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NDcxNjRiCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21pZ3JhdGlvbi9wYWNrYWdlL2JlZm9yZS9wMS9DMS5qYXZhCkBAIC0wLDAgKzEsNyBAQAorcGFja2FnZSBwMTsKKworaW1wb3J0IHFxcS4qOworCitjbGFzcyBDIHsKKyAgcXFxLkFBQSBhID0gbmV3IHFxcS5BQUEoKTsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbWlncmF0aW9uL3BhY2thZ2VUb05vbkV4aXN0ZW50UGFja2FnZS9hZnRlci9wMS9DLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbWlncmF0aW9uL3BhY2thZ2VUb05vbkV4aXN0ZW50UGFja2FnZS9hZnRlci9wMS9DLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTUzMWQ1NAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9taWdyYXRpb24vcGFja2FnZVRvTm9uRXhpc3RlbnRQYWNrYWdlL2FmdGVyL3AxL0MuamF2YQpAQCAtMCwwICsxLDcgQEAKK3BhY2thZ2UgcDE7CisKK2ltcG9ydCB6enouYmJiLkFBQTsKKworY2xhc3MgQyB7CisgIEFBQSBhID0gbmV3IEFBQSgpOworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9taWdyYXRpb24vcGFja2FnZVRvTm9uRXhpc3RlbnRQYWNrYWdlL2FmdGVyL3AxL0MxLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbWlncmF0aW9uL3BhY2thZ2VUb05vbkV4aXN0ZW50UGFja2FnZS9hZnRlci9wMS9DMS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJkOTBiNTgKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbWlncmF0aW9uL3BhY2thZ2VUb05vbkV4aXN0ZW50UGFja2FnZS9hZnRlci9wMS9DMS5qYXZhCkBAIC0wLDAgKzEsNyBAQAorcGFja2FnZSBwMTsKKworaW1wb3J0IHp6ei5iYmIuKjsKKworY2xhc3MgQyB7CisgIHp6ei5iYmIuQUFBIGEgPSBuZXcgenp6LmJiYi5BQUEoKTsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbWlncmF0aW9uL3BhY2thZ2VUb05vbkV4aXN0ZW50UGFja2FnZS9iZWZvcmUvcDEvQy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21pZ3JhdGlvbi9wYWNrYWdlVG9Ob25FeGlzdGVudFBhY2thZ2UvYmVmb3JlL3AxL0MuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MzE2MWRjCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21pZ3JhdGlvbi9wYWNrYWdlVG9Ob25FeGlzdGVudFBhY2thZ2UvYmVmb3JlL3AxL0MuamF2YQpAQCAtMCwwICsxLDcgQEAKK3BhY2thZ2UgcDE7CisKK2ltcG9ydCBxcXEuQUFBOworCitjbGFzcyBDIHsKKyAgQUFBIGEgPSBuZXcgQUFBKCk7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21pZ3JhdGlvbi9wYWNrYWdlVG9Ob25FeGlzdGVudFBhY2thZ2UvYmVmb3JlL3AxL0MxLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbWlncmF0aW9uL3BhY2thZ2VUb05vbkV4aXN0ZW50UGFja2FnZS9iZWZvcmUvcDEvQzEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NDcxNjRiCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21pZ3JhdGlvbi9wYWNrYWdlVG9Ob25FeGlzdGVudFBhY2thZ2UvYmVmb3JlL3AxL0MxLmphdmEKQEAgLTAsMCArMSw3IEBACitwYWNrYWdlIHAxOworCitpbXBvcnQgcXFxLio7CisKK2NsYXNzIEMgeworICBxcXEuQUFBIGEgPSBuZXcgcXFxLkFBQSgpOworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9taWdyYXRpb24vdG9Ob25FeGlzdGVudENsYXNzL2FmdGVyL3AxL0MuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9taWdyYXRpb24vdG9Ob25FeGlzdGVudENsYXNzL2FmdGVyL3AxL0MuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOTdiMTAzCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21pZ3JhdGlvbi90b05vbkV4aXN0ZW50Q2xhc3MvYWZ0ZXIvcDEvQy5qYXZhCkBAIC0wLDAgKzEsNyBAQAorcGFja2FnZSBwMTsKKworaW1wb3J0IHp6ei5iYmIuUVFROworCitjbGFzcyBDIHsKKyAgUVFRIHlvdSA9IG5ldyBRUVEoKTsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbWlncmF0aW9uL3RvTm9uRXhpc3RlbnRDbGFzcy9hZnRlci9wMS9DMS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21pZ3JhdGlvbi90b05vbkV4aXN0ZW50Q2xhc3MvYWZ0ZXIvcDEvQzEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YmE0MzAyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21pZ3JhdGlvbi90b05vbkV4aXN0ZW50Q2xhc3MvYWZ0ZXIvcDEvQzEuamF2YQpAQCAtMCwwICsxLDggQEAKK3BhY2thZ2UgcDE7CisKK2ltcG9ydCBxcXEuYWFhLio7CitpbXBvcnQgenp6LmJiYi5RUVE7CisKK2NsYXNzIEMxIHsKKyAgUVFRIHlvdSA9IG5ldyBRUVEoKTsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbWlncmF0aW9uL3RvTm9uRXhpc3RlbnRDbGFzcy9iZWZvcmUvcDEvQy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21pZ3JhdGlvbi90b05vbkV4aXN0ZW50Q2xhc3MvYmVmb3JlL3AxL0MuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jODkyN2VmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21pZ3JhdGlvbi90b05vbkV4aXN0ZW50Q2xhc3MvYmVmb3JlL3AxL0MuamF2YQpAQCAtMCwwICsxLDcgQEAKK3BhY2thZ2UgcDE7CisKK2ltcG9ydCBxcXEuYWFhLllhaG9vOworCitjbGFzcyBDIHsKKyAgWWFob28geW91ID0gbmV3IFlhaG9vKCk7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21pZ3JhdGlvbi90b05vbkV4aXN0ZW50Q2xhc3MvYmVmb3JlL3AxL0MxLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbWlncmF0aW9uL3RvTm9uRXhpc3RlbnRDbGFzcy9iZWZvcmUvcDEvQzEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NWE3MWJkCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21pZ3JhdGlvbi90b05vbkV4aXN0ZW50Q2xhc3MvYmVmb3JlL3AxL0MxLmphdmEKQEAgLTAsMCArMSw3IEBACitwYWNrYWdlIHAxOworCitpbXBvcnQgcXFxLmFhYS4qOworCitjbGFzcyBDMSB7CisgIFlhaG9vIHlvdSA9IG5ldyBZYWhvbygpOworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9taWdyYXRpb24vdHdvQ2xhc3Nlcy9hZnRlci9UZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbWlncmF0aW9uL3R3b0NsYXNzZXMvYWZ0ZXIvVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRlNjg5ZWEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbWlncmF0aW9uL3R3b0NsYXNzZXMvYWZ0ZXIvVGVzdC5qYXZhCkBAIC0wLDAgKzEsMTAgQEAKK2NsYXNzIEEge30KK2NsYXNzIEExIHt9CisKK2NsYXNzIEIge30KK2NsYXNzIEIxIHt9CisKK3B1YmxpYyBjbGFzcyBUZXN0IHsKKyAgQTEgYTsKKyAgQjEgYjsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbWlncmF0aW9uL3R3b0NsYXNzZXMvYmVmb3JlL1Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9taWdyYXRpb24vdHdvQ2xhc3Nlcy9iZWZvcmUvVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMwNTM4OWEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbWlncmF0aW9uL3R3b0NsYXNzZXMvYmVmb3JlL1Rlc3QuamF2YQpAQCAtMCwwICsxLDEwIEBACitjbGFzcyBBIHt9CitjbGFzcyBBMSB7fQorCitjbGFzcyBCIHt9CitjbGFzcyBCMSB7fQorCitwdWJsaWMgY2xhc3MgVGVzdCB7CisgIEEgYTsKKyAgQiBiOworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9taWdyYXRpb24vdW5leGlzdGluZ0NsYXNzSW5VbmV4aXN0aW5nUGFja2FnZS9hZnRlci9wMS9DLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbWlncmF0aW9uL3VuZXhpc3RpbmdDbGFzc0luVW5leGlzdGluZ1BhY2thZ2UvYWZ0ZXIvcDEvQy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMxODNhMGYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbWlncmF0aW9uL3VuZXhpc3RpbmdDbGFzc0luVW5leGlzdGluZ1BhY2thZ2UvYWZ0ZXIvcDEvQy5qYXZhCkBAIC0wLDAgKzEsNyBAQAorcGFja2FnZSBwMTsKKworaW1wb3J0IGphdmEubGFuZy5TdHJpbmc7CisKK2NsYXNzIEMgeworICBTdHJpbmcgeW91ID0gbmV3IFN0cmluZygpOworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9taWdyYXRpb24vdW5leGlzdGluZ0NsYXNzSW5VbmV4aXN0aW5nUGFja2FnZS9hZnRlci9wMS9DMS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21pZ3JhdGlvbi91bmV4aXN0aW5nQ2xhc3NJblVuZXhpc3RpbmdQYWNrYWdlL2FmdGVyL3AxL0MxLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjk1MzNiYgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9taWdyYXRpb24vdW5leGlzdGluZ0NsYXNzSW5VbmV4aXN0aW5nUGFja2FnZS9hZnRlci9wMS9DMS5qYXZhCkBAIC0wLDAgKzEsNyBAQAorcGFja2FnZSBwMTsKKworaW1wb3J0IHFxcS5hYWEuKjsKKworY2xhc3MgQzEgeworICBTdHJpbmcgeW91ID0gbmV3IFN0cmluZygpOworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9taWdyYXRpb24vdW5leGlzdGluZ0NsYXNzSW5VbmV4aXN0aW5nUGFja2FnZS9iZWZvcmUvcDEvQy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21pZ3JhdGlvbi91bmV4aXN0aW5nQ2xhc3NJblVuZXhpc3RpbmdQYWNrYWdlL2JlZm9yZS9wMS9DLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzg5MjdlZgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9taWdyYXRpb24vdW5leGlzdGluZ0NsYXNzSW5VbmV4aXN0aW5nUGFja2FnZS9iZWZvcmUvcDEvQy5qYXZhCkBAIC0wLDAgKzEsNyBAQAorcGFja2FnZSBwMTsKKworaW1wb3J0IHFxcS5hYWEuWWFob287CisKK2NsYXNzIEMgeworICBZYWhvbyB5b3UgPSBuZXcgWWFob28oKTsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbWlncmF0aW9uL3VuZXhpc3RpbmdDbGFzc0luVW5leGlzdGluZ1BhY2thZ2UvYmVmb3JlL3AxL0MxLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbWlncmF0aW9uL3VuZXhpc3RpbmdDbGFzc0luVW5leGlzdGluZ1BhY2thZ2UvYmVmb3JlL3AxL0MxLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTVhNzFiZAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9taWdyYXRpb24vdW5leGlzdGluZ0NsYXNzSW5VbmV4aXN0aW5nUGFja2FnZS9iZWZvcmUvcDEvQzEuamF2YQpAQCAtMCwwICsxLDcgQEAKK3BhY2thZ2UgcDE7CisKK2ltcG9ydCBxcXEuYWFhLio7CisKK2NsYXNzIEMxIHsKKyAgWWFob28geW91ID0gbmV3IFlhaG9vKCk7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVDbGFzcy9jbGFzc0FuZFNlY29uZGFyeS9hZnRlci9wYWNrMS9Vc2VyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUNsYXNzL2NsYXNzQW5kU2Vjb25kYXJ5L2FmdGVyL3BhY2sxL1VzZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNDMxYmNiCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVDbGFzcy9jbGFzc0FuZFNlY29uZGFyeS9hZnRlci9wYWNrMS9Vc2VyLmphdmEKQEAgLTAsMCArMSw5IEBACitwYWNrYWdlIHBhY2sxOworCitpbXBvcnQgcGFjazIuQ2xhc3MxOworaW1wb3J0IHBhY2syLkNsYXNzMjsKKworcHVibGljIGNsYXNzIFVzZXIgeworICBDbGFzczEgY2xhc3MxOworICBDbGFzczIgY2xhc3MyOworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlQ2xhc3MvY2xhc3NBbmRTZWNvbmRhcnkvYWZ0ZXIvcGFjazIvQ2xhc3MxLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUNsYXNzL2NsYXNzQW5kU2Vjb25kYXJ5L2FmdGVyL3BhY2syL0NsYXNzMS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFmZTQxNmMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUNsYXNzL2NsYXNzQW5kU2Vjb25kYXJ5L2FmdGVyL3BhY2syL0NsYXNzMS5qYXZhCkBAIC0wLDAgKzEsMTEgQEAKK3BhY2thZ2UgcGFjazI7CisKK3B1YmxpYyBjbGFzcyBDbGFzczEgeworfQorCisvKioKKyAqIEphdmFkb2MuCisgKi8KK2NsYXNzIENsYXNzMiB7CisKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUNsYXNzL2NsYXNzQW5kU2Vjb25kYXJ5L2FmdGVyL3BhY2syL2VtcHR5LnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlQ2xhc3MvY2xhc3NBbmRTZWNvbmRhcnkvYWZ0ZXIvcGFjazIvZW1wdHkudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2OWRlMjkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUNsYXNzL2NsYXNzQW5kU2Vjb25kYXJ5L2FmdGVyL3BhY2syL2VtcHR5LnR4dApkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVDbGFzcy9jbGFzc0FuZFNlY29uZGFyeS9iZWZvcmUvcGFjazEvQ2xhc3MxLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUNsYXNzL2NsYXNzQW5kU2Vjb25kYXJ5L2JlZm9yZS9wYWNrMS9DbGFzczEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNTYzNTc5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVDbGFzcy9jbGFzc0FuZFNlY29uZGFyeS9iZWZvcmUvcGFjazEvQ2xhc3MxLmphdmEKQEAgLTAsMCArMSwxMSBAQAorcGFja2FnZSBwYWNrMTsKKworcHVibGljIGNsYXNzIENsYXNzMSB7Cit9CisKKy8qKgorICogSmF2YWRvYy4KKyAqLworY2xhc3MgQ2xhc3MyIHsKKworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlQ2xhc3MvY2xhc3NBbmRTZWNvbmRhcnkvYmVmb3JlL3BhY2sxL1VzZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlQ2xhc3MvY2xhc3NBbmRTZWNvbmRhcnkvYmVmb3JlL3BhY2sxL1VzZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZTQ2MWFkCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVDbGFzcy9jbGFzc0FuZFNlY29uZGFyeS9iZWZvcmUvcGFjazEvVXNlci5qYXZhCkBAIC0wLDAgKzEsNiBAQAorcGFja2FnZSBwYWNrMTsKKworcHVibGljIGNsYXNzIFVzZXIgeworICBDbGFzczEgY2xhc3MxOworICBDbGFzczIgY2xhc3MyOworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlQ2xhc3MvY2xhc3NBbmRTZWNvbmRhcnkvYmVmb3JlL3BhY2syL2VtcHR5LnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlQ2xhc3MvY2xhc3NBbmRTZWNvbmRhcnkvYmVmb3JlL3BhY2syL2VtcHR5LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjlkZTI5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVDbGFzcy9jbGFzc0FuZFNlY29uZGFyeS9iZWZvcmUvcGFjazIvZW1wdHkudHh0CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUNsYXNzL2NvbnRleHRDaGFuZ2UxL2FmdGVyL3BhY2sxL0NsYXNzMi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVDbGFzcy9jb250ZXh0Q2hhbmdlMS9hZnRlci9wYWNrMS9DbGFzczIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOWRmMWIzCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVDbGFzcy9jb250ZXh0Q2hhbmdlMS9hZnRlci9wYWNrMS9DbGFzczIuamF2YQpAQCAtMCwwICsxLDQgQEAKK3BhY2thZ2UgcGFjazE7CisKK3B1YmxpYyBjbGFzcyBDbGFzczIgeworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlQ2xhc3MvY29udGV4dENoYW5nZTEvYWZ0ZXIvcGFjazEvZW1wdHkudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVDbGFzcy9jb250ZXh0Q2hhbmdlMS9hZnRlci9wYWNrMS9lbXB0eS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY5ZGUyOQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlQ2xhc3MvY29udGV4dENoYW5nZTEvYWZ0ZXIvcGFjazEvZW1wdHkudHh0CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUNsYXNzL2NvbnRleHRDaGFuZ2UxL2FmdGVyL3BhY2syL0NsYXNzMS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVDbGFzcy9jb250ZXh0Q2hhbmdlMS9hZnRlci9wYWNrMi9DbGFzczEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MTU4MmE2Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVDbGFzcy9jb250ZXh0Q2hhbmdlMS9hZnRlci9wYWNrMi9DbGFzczEuamF2YQpAQCAtMCwwICsxLDcgQEAKK3BhY2thZ2UgcGFjazI7CisKK2ltcG9ydCBwYWNrMS5DbGFzczI7CisKK3B1YmxpYyBjbGFzcyBDbGFzczEgeworICBDbGFzczIgYTsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUNsYXNzL2NvbnRleHRDaGFuZ2UxL2FmdGVyL3BhY2syL2VtcHR5LnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlQ2xhc3MvY29udGV4dENoYW5nZTEvYWZ0ZXIvcGFjazIvZW1wdHkudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2OWRlMjkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUNsYXNzL2NvbnRleHRDaGFuZ2UxL2FmdGVyL3BhY2syL2VtcHR5LnR4dApkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVDbGFzcy9jb250ZXh0Q2hhbmdlMS9iZWZvcmUvcGFjazEvQ2xhc3MxLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUNsYXNzL2NvbnRleHRDaGFuZ2UxL2JlZm9yZS9wYWNrMS9DbGFzczEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MmJhZjkxCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVDbGFzcy9jb250ZXh0Q2hhbmdlMS9iZWZvcmUvcGFjazEvQ2xhc3MxLmphdmEKQEAgLTAsMCArMSw1IEBACitwYWNrYWdlIHBhY2sxOworCitwdWJsaWMgY2xhc3MgQ2xhc3MxIHsKKyAgQ2xhc3MyIGE7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVDbGFzcy9jb250ZXh0Q2hhbmdlMS9iZWZvcmUvcGFjazEvQ2xhc3MyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUNsYXNzL2NvbnRleHRDaGFuZ2UxL2JlZm9yZS9wYWNrMS9DbGFzczIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOWRmMWIzCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVDbGFzcy9jb250ZXh0Q2hhbmdlMS9iZWZvcmUvcGFjazEvQ2xhc3MyLmphdmEKQEAgLTAsMCArMSw0IEBACitwYWNrYWdlIHBhY2sxOworCitwdWJsaWMgY2xhc3MgQ2xhc3MyIHsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUNsYXNzL2NvbnRleHRDaGFuZ2UxL2JlZm9yZS9wYWNrMS9lbXB0eS50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUNsYXNzL2NvbnRleHRDaGFuZ2UxL2JlZm9yZS9wYWNrMS9lbXB0eS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY5ZGUyOQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlQ2xhc3MvY29udGV4dENoYW5nZTEvYmVmb3JlL3BhY2sxL2VtcHR5LnR4dApkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVDbGFzcy9jb250ZXh0Q2hhbmdlMS9iZWZvcmUvcGFjazIvZW1wdHkudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVDbGFzcy9jb250ZXh0Q2hhbmdlMS9iZWZvcmUvcGFjazIvZW1wdHkudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2OWRlMjkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUNsYXNzL2NvbnRleHRDaGFuZ2UxL2JlZm9yZS9wYWNrMi9lbXB0eS50eHQKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlQ2xhc3MvY29udGV4dENoYW5nZTIvYWZ0ZXIvcGFjazEvQ2xhc3MyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUNsYXNzL2NvbnRleHRDaGFuZ2UyL2FmdGVyL3BhY2sxL0NsYXNzMi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY5ZGYxYjMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUNsYXNzL2NvbnRleHRDaGFuZ2UyL2FmdGVyL3BhY2sxL0NsYXNzMi5qYXZhCkBAIC0wLDAgKzEsNCBAQAorcGFja2FnZSBwYWNrMTsKKworcHVibGljIGNsYXNzIENsYXNzMiB7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVDbGFzcy9jb250ZXh0Q2hhbmdlMi9hZnRlci9wYWNrMS9lbXB0eS50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUNsYXNzL2NvbnRleHRDaGFuZ2UyL2FmdGVyL3BhY2sxL2VtcHR5LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjlkZTI5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVDbGFzcy9jb250ZXh0Q2hhbmdlMi9hZnRlci9wYWNrMS9lbXB0eS50eHQKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlQ2xhc3MvY29udGV4dENoYW5nZTIvYWZ0ZXIvcGFjazIvQ2xhc3MxLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUNsYXNzL2NvbnRleHRDaGFuZ2UyL2FmdGVyL3BhY2syL0NsYXNzMS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEzNWEwYjMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUNsYXNzL2NvbnRleHRDaGFuZ2UyL2FmdGVyL3BhY2syL0NsYXNzMS5qYXZhCkBAIC0wLDAgKzEsOSBAQAorcGFja2FnZSBwYWNrMjsKKworaW1wb3J0IHBhY2sxLkNsYXNzMjsKKworcHVibGljIGNsYXNzIENsYXNzMSB7CisgIHZvaWQgZm9vKCl7CisgICAgQ2xhc3MyLnh4eCgpOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVDbGFzcy9jb250ZXh0Q2hhbmdlMi9hZnRlci9wYWNrMi9lbXB0eS50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUNsYXNzL2NvbnRleHRDaGFuZ2UyL2FmdGVyL3BhY2syL2VtcHR5LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjlkZTI5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVDbGFzcy9jb250ZXh0Q2hhbmdlMi9hZnRlci9wYWNrMi9lbXB0eS50eHQKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlQ2xhc3MvY29udGV4dENoYW5nZTIvYmVmb3JlL3BhY2sxL0NsYXNzMS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVDbGFzcy9jb250ZXh0Q2hhbmdlMi9iZWZvcmUvcGFjazEvQ2xhc3MxLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2U0MDE0ZgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlQ2xhc3MvY29udGV4dENoYW5nZTIvYmVmb3JlL3BhY2sxL0NsYXNzMS5qYXZhCkBAIC0wLDAgKzEsNyBAQAorcGFja2FnZSBwYWNrMTsKKworcHVibGljIGNsYXNzIENsYXNzMSB7CisgIHZvaWQgZm9vKCl7CisgICAgQ2xhc3MyLnh4eCgpOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVDbGFzcy9jb250ZXh0Q2hhbmdlMi9iZWZvcmUvcGFjazEvQ2xhc3MyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUNsYXNzL2NvbnRleHRDaGFuZ2UyL2JlZm9yZS9wYWNrMS9DbGFzczIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOWRmMWIzCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVDbGFzcy9jb250ZXh0Q2hhbmdlMi9iZWZvcmUvcGFjazEvQ2xhc3MyLmphdmEKQEAgLTAsMCArMSw0IEBACitwYWNrYWdlIHBhY2sxOworCitwdWJsaWMgY2xhc3MgQ2xhc3MyIHsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUNsYXNzL2NvbnRleHRDaGFuZ2UyL2JlZm9yZS9wYWNrMS9lbXB0eS50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUNsYXNzL2NvbnRleHRDaGFuZ2UyL2JlZm9yZS9wYWNrMS9lbXB0eS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY5ZGUyOQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlQ2xhc3MvY29udGV4dENoYW5nZTIvYmVmb3JlL3BhY2sxL2VtcHR5LnR4dApkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVDbGFzcy9jb250ZXh0Q2hhbmdlMi9iZWZvcmUvcGFjazIvZW1wdHkudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVDbGFzcy9jb250ZXh0Q2hhbmdlMi9iZWZvcmUvcGFjazIvZW1wdHkudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2OWRlMjkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUNsYXNzL2NvbnRleHRDaGFuZ2UyL2JlZm9yZS9wYWNrMi9lbXB0eS50eHQKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlQ2xhc3MvaWRlYWRldjI3OTk2L2FmdGVyL3BhY2sxL1guamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlQ2xhc3MvaWRlYWRldjI3OTk2L2FmdGVyL3BhY2sxL1guamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZGI0ZDNlCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVDbGFzcy9pZGVhZGV2Mjc5OTYvYWZ0ZXIvcGFjazEvWC5qYXZhCkBAIC0wLDAgKzEsMyBAQAorcGFja2FnZSBwYWNrMTsKKworY2xhc3MgWSB7fQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlQ2xhc3MvaWRlYWRldjI3OTk2L2FmdGVyL3BhY2syL1guamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlQ2xhc3MvaWRlYWRldjI3OTk2L2FmdGVyL3BhY2syL1guamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NzBhZGUyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVDbGFzcy9pZGVhZGV2Mjc5OTYvYWZ0ZXIvcGFjazIvWC5qYXZhCkBAIC0wLDAgKzEsNSBAQAorcGFja2FnZSBwYWNrMjsKKworcHVibGljIGNsYXNzIFggeworICAgIHB1YmxpYyB2b2lkIGZvbyhYIHgpIHt9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVDbGFzcy9pZGVhZGV2Mjc5OTYvYWZ0ZXIvcGFjazIvZW1wdHkudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVDbGFzcy9pZGVhZGV2Mjc5OTYvYWZ0ZXIvcGFjazIvZW1wdHkudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2OWRlMjkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUNsYXNzL2lkZWFkZXYyNzk5Ni9hZnRlci9wYWNrMi9lbXB0eS50eHQKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlQ2xhc3MvaWRlYWRldjI3OTk2L2JlZm9yZS9wYWNrMS9YLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUNsYXNzL2lkZWFkZXYyNzk5Ni9iZWZvcmUvcGFjazEvWC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEyZjRiODEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUNsYXNzL2lkZWFkZXYyNzk5Ni9iZWZvcmUvcGFjazEvWC5qYXZhCkBAIC0wLDAgKzEsNiBAQAorcGFja2FnZSBwYWNrMTsKKworcHVibGljIGNsYXNzIFggeworICAgIHB1YmxpYyB2b2lkIGZvbyhYIHgpIHt9Cit9CitjbGFzcyBZIHt9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVDbGFzcy9pZGVhZGV2Mjc5OTYvYmVmb3JlL3BhY2syL2VtcHR5LnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlQ2xhc3MvaWRlYWRldjI3OTk2L2JlZm9yZS9wYWNrMi9lbXB0eS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY5ZGUyOQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlQ2xhc3MvaWRlYWRldjI3OTk2L2JlZm9yZS9wYWNrMi9lbXB0eS50eHQKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlQ2xhc3MvanNwL2FmdGVyL1dFQi1JTkYvVGVzdFRFSS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVDbGFzcy9qc3AvYWZ0ZXIvV0VCLUlORi9UZXN0VEVJLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTdlMGRmZAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlQ2xhc3MvanNwL2FmdGVyL1dFQi1JTkYvVGVzdFRFSS5qYXZhCkBAIC0wLDAgKzEsMTMgQEAKKworaW1wb3J0IGphdmF4LnNlcnZsZXQuanNwLnRhZ2V4dC5UYWdFeHRyYUluZm87CitpbXBvcnQgamF2YXguc2VydmxldC5qc3AudGFnZXh0LlZhcmlhYmxlSW5mbzsKK2ltcG9ydCBqYXZheC5zZXJ2bGV0LmpzcC50YWdleHQuVGFnRGF0YTsKKworLyoqCisgKiBAYXV0aG9yIG1pa2UKKyAqLworcHVibGljIGNsYXNzIFRlc3RURUkgZXh0ZW5kcyBUYWdFeHRyYUluZm8geworICBwdWJsaWMgVmFyaWFibGVJbmZvW10gZ2V0VmFyaWFibGVJbmZvKFRhZ0RhdGEgdGFnRGF0YSkgeworICAgIHJldHVybiBuZXcgVmFyaWFibGVJbmZvW10geyBuZXcgVmFyaWFibGVJbmZvKCJ0ZXN0VmFyIiwgdGFnRGF0YS5nZXRBdHRyaWJ1dGVTdHJpbmcoImNsYXNzIiksIHRydWUsIFZhcmlhYmxlSW5mby5BVF9CRUdJTikgfTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVDbGFzcy9qc3AvYWZ0ZXIvV0VCLUlORi9jbGFzc2VzL1Rlc3RURUkuY2xhc3MgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUNsYXNzL2pzcC9hZnRlci9XRUItSU5GL2NsYXNzZXMvVGVzdFRFSS5jbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MGY0MGNmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVDbGFzcy9qc3AvYWZ0ZXIvV0VCLUlORi9jbGFzc2VzL1Rlc3RURUkuY2xhc3MKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVDbGFzcy9qc3AvYWZ0ZXIvV0VCLUlORi90ZXN0LnRsZCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlQ2xhc3MvanNwL2FmdGVyL1dFQi1JTkYvdGVzdC50bGQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzk0NzI5YQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlQ2xhc3MvanNwL2FmdGVyL1dFQi1JTkYvdGVzdC50bGQKQEAgLTAsMCArMSwxMyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSVNPLTg4NTktMSI/PgorPCFET0NUWVBFIHRhZ2xpYiBQVUJMSUMgIi0vL1N1biBNaWNyb3N5c3RlbXMsIEluYy4vL0RURCBKU1AgVGFnIExpYnJhcnkgMS4xLy9FTiIgImh0dHA6Ly9qYXZhLnN1bi5jb20vajJlZS9kdGRzL3dlYi1qc3B0YWdsaWJyYXJ5XzFfMS5kdGQiPgorCis8IS0tIGEgdGFiIGxpYnJhcnkgZGVzY3JpcHRvciAtLT4KKworPHRhZ2xpYj4KKwk8dGFnPgkKKwkJPG5hbWU+dGVzdDwvbmFtZT4KKwkJPHRhZ2NsYXNzPlRlc3RUYWc8L3RhZ2NsYXNzPgorCQk8dGVpY2xhc3M+VGVzdFRFSTwvdGVpY2xhc3M+CisJCTxib2R5Y29udGVudD5qc3A8L2JvZHljb250ZW50PgorCTwvdGFnPgorPC90YWdsaWI+CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUNsYXNzL2pzcC9hZnRlci9wYWNrMS9lbXB0eS50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUNsYXNzL2pzcC9hZnRlci9wYWNrMS9lbXB0eS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY5ZGUyOQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlQ2xhc3MvanNwL2FmdGVyL3BhY2sxL2VtcHR5LnR4dApkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVDbGFzcy9qc3AvYWZ0ZXIvcGFjazIvVGVzdENsYXNzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUNsYXNzL2pzcC9hZnRlci9wYWNrMi9UZXN0Q2xhc3MuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MWI4OGRhCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVDbGFzcy9qc3AvYWZ0ZXIvcGFjazIvVGVzdENsYXNzLmphdmEKQEAgLTAsMCArMSw0IEBACitwYWNrYWdlIHBhY2syOworCitwdWJsaWMgY2xhc3MgVGVzdENsYXNzIHsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUNsYXNzL2pzcC9hZnRlci9wYWNrMi9lbXB0eS50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUNsYXNzL2pzcC9hZnRlci9wYWNrMi9lbXB0eS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY5ZGUyOQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlQ2xhc3MvanNwL2FmdGVyL3BhY2syL2VtcHR5LnR4dApkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVDbGFzcy9qc3AvYWZ0ZXIvdGVzdC5qc3AgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUNsYXNzL2pzcC9hZnRlci90ZXN0LmpzcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZDc3MDZjCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVDbGFzcy9qc3AvYWZ0ZXIvdGVzdC5qc3AKQEAgLTAsMCArMSw3IEBACis8JUAgdGFnbGliIHVyaT0iL1dFQi1JTkYvdGVzdC50bGQiIHByZWZpeD0idGVzdCIgJT4KKworPHRlc3Q6dGVzdCBjbGFzcz0icGFjazIuVGVzdENsYXNzIi8+CisKKzwlCisgICAgU3lzdGVtLm91dC5wcmludGxuKHRlc3RWYXIpOworJT4KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlQ2xhc3MvanNwL2JlZm9yZS9XRUItSU5GL1Rlc3RURUkuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlQ2xhc3MvanNwL2JlZm9yZS9XRUItSU5GL1Rlc3RURUkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xN2UwZGZkCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVDbGFzcy9qc3AvYmVmb3JlL1dFQi1JTkYvVGVzdFRFSS5qYXZhCkBAIC0wLDAgKzEsMTMgQEAKKworaW1wb3J0IGphdmF4LnNlcnZsZXQuanNwLnRhZ2V4dC5UYWdFeHRyYUluZm87CitpbXBvcnQgamF2YXguc2VydmxldC5qc3AudGFnZXh0LlZhcmlhYmxlSW5mbzsKK2ltcG9ydCBqYXZheC5zZXJ2bGV0LmpzcC50YWdleHQuVGFnRGF0YTsKKworLyoqCisgKiBAYXV0aG9yIG1pa2UKKyAqLworcHVibGljIGNsYXNzIFRlc3RURUkgZXh0ZW5kcyBUYWdFeHRyYUluZm8geworICBwdWJsaWMgVmFyaWFibGVJbmZvW10gZ2V0VmFyaWFibGVJbmZvKFRhZ0RhdGEgdGFnRGF0YSkgeworICAgIHJldHVybiBuZXcgVmFyaWFibGVJbmZvW10geyBuZXcgVmFyaWFibGVJbmZvKCJ0ZXN0VmFyIiwgdGFnRGF0YS5nZXRBdHRyaWJ1dGVTdHJpbmcoImNsYXNzIiksIHRydWUsIFZhcmlhYmxlSW5mby5BVF9CRUdJTikgfTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVDbGFzcy9qc3AvYmVmb3JlL1dFQi1JTkYvY2xhc3Nlcy9UZXN0VEVJLmNsYXNzIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVDbGFzcy9qc3AvYmVmb3JlL1dFQi1JTkYvY2xhc3Nlcy9UZXN0VEVJLmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYwZjQwY2YKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUNsYXNzL2pzcC9iZWZvcmUvV0VCLUlORi9jbGFzc2VzL1Rlc3RURUkuY2xhc3MKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVDbGFzcy9qc3AvYmVmb3JlL1dFQi1JTkYvdGVzdC50bGQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUNsYXNzL2pzcC9iZWZvcmUvV0VCLUlORi90ZXN0LnRsZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OTQ3MjlhCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVDbGFzcy9qc3AvYmVmb3JlL1dFQi1JTkYvdGVzdC50bGQKQEAgLTAsMCArMSwxMyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSVNPLTg4NTktMSI/PgorPCFET0NUWVBFIHRhZ2xpYiBQVUJMSUMgIi0vL1N1biBNaWNyb3N5c3RlbXMsIEluYy4vL0RURCBKU1AgVGFnIExpYnJhcnkgMS4xLy9FTiIgImh0dHA6Ly9qYXZhLnN1bi5jb20vajJlZS9kdGRzL3dlYi1qc3B0YWdsaWJyYXJ5XzFfMS5kdGQiPgorCis8IS0tIGEgdGFiIGxpYnJhcnkgZGVzY3JpcHRvciAtLT4KKworPHRhZ2xpYj4KKwk8dGFnPgkKKwkJPG5hbWU+dGVzdDwvbmFtZT4KKwkJPHRhZ2NsYXNzPlRlc3RUYWc8L3RhZ2NsYXNzPgorCQk8dGVpY2xhc3M+VGVzdFRFSTwvdGVpY2xhc3M+CisJCTxib2R5Y29udGVudD5qc3A8L2JvZHljb250ZW50PgorCTwvdGFnPgorPC90YWdsaWI+CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUNsYXNzL2pzcC9iZWZvcmUvcGFjazEvVGVzdENsYXNzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUNsYXNzL2pzcC9iZWZvcmUvcGFjazEvVGVzdENsYXNzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjRhNzEzZQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlQ2xhc3MvanNwL2JlZm9yZS9wYWNrMS9UZXN0Q2xhc3MuamF2YQpAQCAtMCwwICsxLDQgQEAKK3BhY2thZ2UgcGFjazE7CisKK3B1YmxpYyBjbGFzcyBUZXN0Q2xhc3MgeworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlQ2xhc3MvanNwL2JlZm9yZS9wYWNrMS9lbXB0eS50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUNsYXNzL2pzcC9iZWZvcmUvcGFjazEvZW1wdHkudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2OWRlMjkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUNsYXNzL2pzcC9iZWZvcmUvcGFjazEvZW1wdHkudHh0CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUNsYXNzL2pzcC9iZWZvcmUvcGFjazIvZW1wdHkudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVDbGFzcy9qc3AvYmVmb3JlL3BhY2syL2VtcHR5LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjlkZTI5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVDbGFzcy9qc3AvYmVmb3JlL3BhY2syL2VtcHR5LnR4dApkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVDbGFzcy9qc3AvYmVmb3JlL3Rlc3QuanNwIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVDbGFzcy9qc3AvYmVmb3JlL3Rlc3QuanNwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZkY2ExNDAKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUNsYXNzL2pzcC9iZWZvcmUvdGVzdC5qc3AKQEAgLTAsMCArMSw3IEBACis8JUAgdGFnbGliIHVyaT0iL1dFQi1JTkYvdGVzdC50bGQiIHByZWZpeD0idGVzdCIgJT4KKworPHRlc3Q6dGVzdCBjbGFzcz0icGFjazEuVGVzdENsYXNzIi8+CisKKzwlCisgICAgU3lzdGVtLm91dC5wcmludGxuKHRlc3RWYXIpOworJT4KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlQ2xhc3MvbG9jYWxDbGFzcy9hZnRlci9wYWNrMS9lbXB0eS50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUNsYXNzL2xvY2FsQ2xhc3MvYWZ0ZXIvcGFjazEvZW1wdHkudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2OWRlMjkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUNsYXNzL2xvY2FsQ2xhc3MvYWZ0ZXIvcGFjazEvZW1wdHkudHh0CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUNsYXNzL2xvY2FsQ2xhc3MvYWZ0ZXIvcGFjazIvQS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVDbGFzcy9sb2NhbENsYXNzL2FmdGVyL3BhY2syL0EuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNjBkZmUzCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVDbGFzcy9sb2NhbENsYXNzL2FmdGVyL3BhY2syL0EuamF2YQpAQCAtMCwwICsxLDkgQEAKK3BhY2thZ2UgcGFjazI7CisKK3B1YmxpYyBjbGFzcyBBIHsKKyAgICBwdWJsaWMgdm9pZCBtZXRob2QgKCkgeworICAgICAgICBjbGFzcyBYIHsKKyAgICAgICAgfQorICAgICAgICBYIHggPSBuZXcgWCgpOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUNsYXNzL2xvY2FsQ2xhc3MvYWZ0ZXIvcGFjazIvZW1wdHkudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVDbGFzcy9sb2NhbENsYXNzL2FmdGVyL3BhY2syL2VtcHR5LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjlkZTI5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVDbGFzcy9sb2NhbENsYXNzL2FmdGVyL3BhY2syL2VtcHR5LnR4dApkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVDbGFzcy9sb2NhbENsYXNzL2JlZm9yZS9wYWNrMS9BLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUNsYXNzL2xvY2FsQ2xhc3MvYmVmb3JlL3BhY2sxL0EuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZjgxZjVjCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVDbGFzcy9sb2NhbENsYXNzL2JlZm9yZS9wYWNrMS9BLmphdmEKQEAgLTAsMCArMSw5IEBACitwYWNrYWdlIHBhY2sxOworCitwdWJsaWMgY2xhc3MgQSB7CisgICAgcHVibGljIHZvaWQgbWV0aG9kICgpIHsKKyAgICAgICAgY2xhc3MgWCB7CisgICAgICAgIH0KKyAgICAgICAgWCB4ID0gbmV3IFgoKTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVDbGFzcy9sb2NhbENsYXNzL2JlZm9yZS9wYWNrMS9lbXB0eS50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUNsYXNzL2xvY2FsQ2xhc3MvYmVmb3JlL3BhY2sxL2VtcHR5LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjlkZTI5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVDbGFzcy9sb2NhbENsYXNzL2JlZm9yZS9wYWNrMS9lbXB0eS50eHQKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlQ2xhc3MvbG9jYWxDbGFzcy9iZWZvcmUvcGFjazIvZW1wdHkudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVDbGFzcy9sb2NhbENsYXNzL2JlZm9yZS9wYWNrMi9lbXB0eS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY5ZGUyOQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlQ2xhc3MvbG9jYWxDbGFzcy9iZWZvcmUvcGFjazIvZW1wdHkudHh0CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUNsYXNzL21vdmVNdWx0aXBsZTEvYWZ0ZXIvcGFjazEvZW1wdHkudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVDbGFzcy9tb3ZlTXVsdGlwbGUxL2FmdGVyL3BhY2sxL2VtcHR5LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjlkZTI5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVDbGFzcy9tb3ZlTXVsdGlwbGUxL2FmdGVyL3BhY2sxL2VtcHR5LnR4dApkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVDbGFzcy9tb3ZlTXVsdGlwbGUxL2FmdGVyL3BhY2syL0NsYXNzMS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVDbGFzcy9tb3ZlTXVsdGlwbGUxL2FmdGVyL3BhY2syL0NsYXNzMS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAyYjAyZDYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUNsYXNzL21vdmVNdWx0aXBsZTEvYWZ0ZXIvcGFjazIvQ2xhc3MxLmphdmEKQEAgLTAsMCArMSw2IEBACitwYWNrYWdlIHBhY2syOworCitwdWJsaWMgY2xhc3MgQ2xhc3MxIHsKKyAgQ2xhc3MyIGE7CisgIENsYXNzMiBiOworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlQ2xhc3MvbW92ZU11bHRpcGxlMS9hZnRlci9wYWNrMi9DbGFzczIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlQ2xhc3MvbW92ZU11bHRpcGxlMS9hZnRlci9wYWNrMi9DbGFzczIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMDdlZmI4Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVDbGFzcy9tb3ZlTXVsdGlwbGUxL2FmdGVyL3BhY2syL0NsYXNzMi5qYXZhCkBAIC0wLDAgKzEsNCBAQAorcGFja2FnZSBwYWNrMjsKKworcHVibGljIGNsYXNzIENsYXNzMiB7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVDbGFzcy9tb3ZlTXVsdGlwbGUxL2FmdGVyL3BhY2syL2VtcHR5LnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlQ2xhc3MvbW92ZU11bHRpcGxlMS9hZnRlci9wYWNrMi9lbXB0eS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY5ZGUyOQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlQ2xhc3MvbW92ZU11bHRpcGxlMS9hZnRlci9wYWNrMi9lbXB0eS50eHQKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlQ2xhc3MvbW92ZU11bHRpcGxlMS9iZWZvcmUvcGFjazEvQ2xhc3MxLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUNsYXNzL21vdmVNdWx0aXBsZTEvYmVmb3JlL3BhY2sxL0NsYXNzMS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIzNDZmYzEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUNsYXNzL21vdmVNdWx0aXBsZTEvYmVmb3JlL3BhY2sxL0NsYXNzMS5qYXZhCkBAIC0wLDAgKzEsNiBAQAorcGFja2FnZSBwYWNrMTsKKworcHVibGljIGNsYXNzIENsYXNzMSB7CisgIENsYXNzMiBhOworICBDbGFzczIgYjsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUNsYXNzL21vdmVNdWx0aXBsZTEvYmVmb3JlL3BhY2sxL0NsYXNzMi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVDbGFzcy9tb3ZlTXVsdGlwbGUxL2JlZm9yZS9wYWNrMS9DbGFzczIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOWRmMWIzCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVDbGFzcy9tb3ZlTXVsdGlwbGUxL2JlZm9yZS9wYWNrMS9DbGFzczIuamF2YQpAQCAtMCwwICsxLDQgQEAKK3BhY2thZ2UgcGFjazE7CisKK3B1YmxpYyBjbGFzcyBDbGFzczIgeworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlQ2xhc3MvbW92ZU11bHRpcGxlMS9iZWZvcmUvcGFjazEvZW1wdHkudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVDbGFzcy9tb3ZlTXVsdGlwbGUxL2JlZm9yZS9wYWNrMS9lbXB0eS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY5ZGUyOQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlQ2xhc3MvbW92ZU11bHRpcGxlMS9iZWZvcmUvcGFjazEvZW1wdHkudHh0CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUNsYXNzL21vdmVNdWx0aXBsZTEvYmVmb3JlL3BhY2syL2VtcHR5LnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlQ2xhc3MvbW92ZU11bHRpcGxlMS9iZWZvcmUvcGFjazIvZW1wdHkudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2OWRlMjkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUNsYXNzL21vdmVNdWx0aXBsZTEvYmVmb3JlL3BhY2syL2VtcHR5LnR4dApkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVDbGFzcy9ub25KYXZhL2FmdGVyL3BhY2sxL2VtcHR5LnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlQ2xhc3Mvbm9uSmF2YS9hZnRlci9wYWNrMS9lbXB0eS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY5ZGUyOQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlQ2xhc3Mvbm9uSmF2YS9hZnRlci9wYWNrMS9lbXB0eS50eHQKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlQ2xhc3Mvbm9uSmF2YS9hZnRlci9wYWNrMi9DbGFzczEuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlQ2xhc3Mvbm9uSmF2YS9hZnRlci9wYWNrMi9DbGFzczEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YWQ1MjY5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVDbGFzcy9ub25KYXZhL2FmdGVyL3BhY2syL0NsYXNzMS5qYXZhCkBAIC0wLDAgKzEsNCBAQAorcGFja2FnZSBwYWNrMjsKKworcHVibGljIGNsYXNzIENsYXNzMSB7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVDbGFzcy9ub25KYXZhL2FmdGVyL3BhY2syL2VtcHR5LnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlQ2xhc3Mvbm9uSmF2YS9hZnRlci9wYWNrMi9lbXB0eS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY5ZGUyOQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlQ2xhc3Mvbm9uSmF2YS9hZnRlci9wYWNrMi9lbXB0eS50eHQKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlQ2xhc3Mvbm9uSmF2YS9hZnRlci9xcXEudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVDbGFzcy9ub25KYXZhL2FmdGVyL3FxcS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjRjYzBjMgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlQ2xhc3Mvbm9uSmF2YS9hZnRlci9xcXEudHh0CkBAIC0wLDAgKzEsMyBAQAorcGFjazIuQ2xhc3MxCitDbGFzczEKK3BhY2sxLkNsYXNzMWEKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlQ2xhc3Mvbm9uSmF2YS9iZWZvcmUvcGFjazEvQ2xhc3MxLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUNsYXNzL25vbkphdmEvYmVmb3JlL3BhY2sxL0NsYXNzMS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIzMWZlMDYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUNsYXNzL25vbkphdmEvYmVmb3JlL3BhY2sxL0NsYXNzMS5qYXZhCkBAIC0wLDAgKzEsNCBAQAorcGFja2FnZSBwYWNrMTsKKworcHVibGljIGNsYXNzIENsYXNzMSB7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVDbGFzcy9ub25KYXZhL2JlZm9yZS9wYWNrMS9lbXB0eS50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUNsYXNzL25vbkphdmEvYmVmb3JlL3BhY2sxL2VtcHR5LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjlkZTI5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVDbGFzcy9ub25KYXZhL2JlZm9yZS9wYWNrMS9lbXB0eS50eHQKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlQ2xhc3Mvbm9uSmF2YS9iZWZvcmUvcGFjazIvZW1wdHkudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVDbGFzcy9ub25KYXZhL2JlZm9yZS9wYWNrMi9lbXB0eS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY5ZGUyOQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlQ2xhc3Mvbm9uSmF2YS9iZWZvcmUvcGFjazIvZW1wdHkudHh0CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUNsYXNzL25vbkphdmEvYmVmb3JlL3FxcS50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUNsYXNzL25vbkphdmEvYmVmb3JlL3FxcS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDYwZGM3ZQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlQ2xhc3Mvbm9uSmF2YS9iZWZvcmUvcXFxLnR4dApAQCAtMCwwICsxLDMgQEAKK3BhY2sxLkNsYXNzMQorQ2xhc3MxCitwYWNrMS5DbGFzczFhCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUNsYXNzL3JlZkluUHJvcGVydGllc0ZpbGUvYWZ0ZXIvbXkucHJvcGVydGllcyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlQ2xhc3MvcmVmSW5Qcm9wZXJ0aWVzRmlsZS9hZnRlci9teS5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjliNjQwZDIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUNsYXNzL3JlZkluUHJvcGVydGllc0ZpbGUvYWZ0ZXIvbXkucHJvcGVydGllcwpAQCAtMCwwICsxIEBACityZWYgPSBwLk15Q2xhc3MKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUNsYXNzL3JlZkluUHJvcGVydGllc0ZpbGUvYWZ0ZXIvcC9NeUNsYXNzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUNsYXNzL3JlZkluUHJvcGVydGllc0ZpbGUvYWZ0ZXIvcC9NeUNsYXNzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGE0MTNiYwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlQ2xhc3MvcmVmSW5Qcm9wZXJ0aWVzRmlsZS9hZnRlci9wL015Q2xhc3MuamF2YQpAQCAtMCwwICsxLDIgQEAKK3BhY2thZ2UgcDsKK2NsYXNzIE15Q2xhc3N7fQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlQ2xhc3MvcmVmSW5Qcm9wZXJ0aWVzRmlsZS9hZnRlci9wL2VtcHR5LnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlQ2xhc3MvcmVmSW5Qcm9wZXJ0aWVzRmlsZS9hZnRlci9wL2VtcHR5LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjlkZTI5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVDbGFzcy9yZWZJblByb3BlcnRpZXNGaWxlL2FmdGVyL3AvZW1wdHkudHh0CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUNsYXNzL3JlZkluUHJvcGVydGllc0ZpbGUvYWZ0ZXIvcDEvZW1wdHkudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVDbGFzcy9yZWZJblByb3BlcnRpZXNGaWxlL2FmdGVyL3AxL2VtcHR5LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjlkZTI5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVDbGFzcy9yZWZJblByb3BlcnRpZXNGaWxlL2FmdGVyL3AxL2VtcHR5LnR4dApkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVDbGFzcy9yZWZJblByb3BlcnRpZXNGaWxlL2JlZm9yZS9teS5wcm9wZXJ0aWVzIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVDbGFzcy9yZWZJblByb3BlcnRpZXNGaWxlL2JlZm9yZS9teS5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA4MDRhMTMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUNsYXNzL3JlZkluUHJvcGVydGllc0ZpbGUvYmVmb3JlL215LnByb3BlcnRpZXMKQEAgLTAsMCArMSBAQAorcmVmID0gcDEuTXlDbGFzcwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlQ2xhc3MvcmVmSW5Qcm9wZXJ0aWVzRmlsZS9iZWZvcmUvcC9lbXB0eS50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUNsYXNzL3JlZkluUHJvcGVydGllc0ZpbGUvYmVmb3JlL3AvZW1wdHkudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2OWRlMjkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUNsYXNzL3JlZkluUHJvcGVydGllc0ZpbGUvYmVmb3JlL3AvZW1wdHkudHh0CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUNsYXNzL3JlZkluUHJvcGVydGllc0ZpbGUvYmVmb3JlL3AxL015Q2xhc3MuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlQ2xhc3MvcmVmSW5Qcm9wZXJ0aWVzRmlsZS9iZWZvcmUvcDEvTXlDbGFzcy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA4NjRjOWEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUNsYXNzL3JlZkluUHJvcGVydGllc0ZpbGUvYmVmb3JlL3AxL015Q2xhc3MuamF2YQpAQCAtMCwwICsxLDIgQEAKK3BhY2thZ2UgcDE7CitjbGFzcyBNeUNsYXNze30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUNsYXNzL3JlZkluUHJvcGVydGllc0ZpbGUvYmVmb3JlL3AxL2VtcHR5LnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlQ2xhc3MvcmVmSW5Qcm9wZXJ0aWVzRmlsZS9iZWZvcmUvcDEvZW1wdHkudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2OWRlMjkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUNsYXNzL3JlZkluUHJvcGVydGllc0ZpbGUvYmVmb3JlL3AxL2VtcHR5LnR4dApkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVDbGFzcy9zZWNvbmRhcnlDbGFzcy9hZnRlci9wYWNrMS9DbGFzczEuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlQ2xhc3Mvc2Vjb25kYXJ5Q2xhc3MvYWZ0ZXIvcGFjazEvQ2xhc3MxLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWY1MzgyNQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlQ2xhc3Mvc2Vjb25kYXJ5Q2xhc3MvYWZ0ZXIvcGFjazEvQ2xhc3MxLmphdmEKQEAgLTAsMCArMSw1IEBACitwYWNrYWdlIHBhY2sxOworCitwdWJsaWMgY2xhc3MgQ2xhc3MxIHsKK30KKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVDbGFzcy9zZWNvbmRhcnlDbGFzcy9hZnRlci9wYWNrMS9DbGFzczIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlQ2xhc3Mvc2Vjb25kYXJ5Q2xhc3MvYWZ0ZXIvcGFjazEvQ2xhc3MyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODExOGMxYQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlQ2xhc3Mvc2Vjb25kYXJ5Q2xhc3MvYWZ0ZXIvcGFjazEvQ2xhc3MyLmphdmEKQEAgLTAsMCArMSw1IEBACitwYWNrYWdlIHBhY2sxOworCitjbGFzcyBDbGFzczIgeworCit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVDbGFzcy9zZWNvbmRhcnlDbGFzcy9hZnRlci9wYWNrMS9Vc2VyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUNsYXNzL3NlY29uZGFyeUNsYXNzL2FmdGVyL3BhY2sxL1VzZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZTQ2MWFkCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVDbGFzcy9zZWNvbmRhcnlDbGFzcy9hZnRlci9wYWNrMS9Vc2VyLmphdmEKQEAgLTAsMCArMSw2IEBACitwYWNrYWdlIHBhY2sxOworCitwdWJsaWMgY2xhc3MgVXNlciB7CisgIENsYXNzMSBjbGFzczE7CisgIENsYXNzMiBjbGFzczI7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVDbGFzcy9zZWNvbmRhcnlDbGFzcy9iZWZvcmUvcGFjazEvQ2xhc3MxLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUNsYXNzL3NlY29uZGFyeUNsYXNzL2JlZm9yZS9wYWNrMS9DbGFzczEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYmUwZDAwCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVDbGFzcy9zZWNvbmRhcnlDbGFzcy9iZWZvcmUvcGFjazEvQ2xhc3MxLmphdmEKQEAgLTAsMCArMSw4IEBACitwYWNrYWdlIHBhY2sxOworCitwdWJsaWMgY2xhc3MgQ2xhc3MxIHsKK30KKworY2xhc3MgQ2xhc3MyIHsKKworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlQ2xhc3Mvc2Vjb25kYXJ5Q2xhc3MvYmVmb3JlL3BhY2sxL1VzZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlQ2xhc3Mvc2Vjb25kYXJ5Q2xhc3MvYmVmb3JlL3BhY2sxL1VzZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZTQ2MWFkCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVDbGFzcy9zZWNvbmRhcnlDbGFzcy9iZWZvcmUvcGFjazEvVXNlci5qYXZhCkBAIC0wLDAgKzEsNiBAQAorcGFja2FnZSBwYWNrMTsKKworcHVibGljIGNsYXNzIFVzZXIgeworICBDbGFzczEgY2xhc3MxOworICBDbGFzczIgY2xhc3MyOworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlQ2xhc3Mvc3RyaW5nc0FuZENvbW1lbnRzL2FmdGVyL0NsaWVudC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVDbGFzcy9zdHJpbmdzQW5kQ29tbWVudHMvYWZ0ZXIvQ2xpZW50LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWU4NmZhZgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlQ2xhc3Mvc3RyaW5nc0FuZENvbW1lbnRzL2FmdGVyL0NsaWVudC5qYXZhCkBAIC0wLDAgKzEsNiBAQAorcHVibGljIGNsYXNzIENsaWVudCB7CisgIFN0cmluZyBzID0gInBhY2syLkNsYXNzMSI7CisgIC8vIHBhY2syLkNsYXNzMQorICAvLyBhcGFjazEuQ2xhc3MxCisgIC8vIENsYXNzMQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlQ2xhc3Mvc3RyaW5nc0FuZENvbW1lbnRzL2FmdGVyL3BhY2sxL2VtcHR5LnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlQ2xhc3Mvc3RyaW5nc0FuZENvbW1lbnRzL2FmdGVyL3BhY2sxL2VtcHR5LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjlkZTI5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVDbGFzcy9zdHJpbmdzQW5kQ29tbWVudHMvYWZ0ZXIvcGFjazEvZW1wdHkudHh0CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUNsYXNzL3N0cmluZ3NBbmRDb21tZW50cy9hZnRlci9wYWNrMi9DbGFzczEuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlQ2xhc3Mvc3RyaW5nc0FuZENvbW1lbnRzL2FmdGVyL3BhY2syL0NsYXNzMS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlhZDUyNjkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUNsYXNzL3N0cmluZ3NBbmRDb21tZW50cy9hZnRlci9wYWNrMi9DbGFzczEuamF2YQpAQCAtMCwwICsxLDQgQEAKK3BhY2thZ2UgcGFjazI7CisKK3B1YmxpYyBjbGFzcyBDbGFzczEgeworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlQ2xhc3Mvc3RyaW5nc0FuZENvbW1lbnRzL2FmdGVyL3BhY2syL2VtcHR5LnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlQ2xhc3Mvc3RyaW5nc0FuZENvbW1lbnRzL2FmdGVyL3BhY2syL2VtcHR5LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjlkZTI5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVDbGFzcy9zdHJpbmdzQW5kQ29tbWVudHMvYWZ0ZXIvcGFjazIvZW1wdHkudHh0CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUNsYXNzL3N0cmluZ3NBbmRDb21tZW50cy9iZWZvcmUvQ2xpZW50LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUNsYXNzL3N0cmluZ3NBbmRDb21tZW50cy9iZWZvcmUvQ2xpZW50LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODVhNzIzMgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlQ2xhc3Mvc3RyaW5nc0FuZENvbW1lbnRzL2JlZm9yZS9DbGllbnQuamF2YQpAQCAtMCwwICsxLDYgQEAKK3B1YmxpYyBjbGFzcyBDbGllbnQgeworICBTdHJpbmcgcyA9ICJwYWNrMS5DbGFzczEiOworICAvLyBwYWNrMS5DbGFzczEKKyAgLy8gYXBhY2sxLkNsYXNzMQorICAvLyBDbGFzczEKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUNsYXNzL3N0cmluZ3NBbmRDb21tZW50cy9iZWZvcmUvcGFjazEvQ2xhc3MxLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUNsYXNzL3N0cmluZ3NBbmRDb21tZW50cy9iZWZvcmUvcGFjazEvQ2xhc3MxLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjMxZmUwNgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlQ2xhc3Mvc3RyaW5nc0FuZENvbW1lbnRzL2JlZm9yZS9wYWNrMS9DbGFzczEuamF2YQpAQCAtMCwwICsxLDQgQEAKK3BhY2thZ2UgcGFjazE7CisKK3B1YmxpYyBjbGFzcyBDbGFzczEgeworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlQ2xhc3Mvc3RyaW5nc0FuZENvbW1lbnRzL2JlZm9yZS9wYWNrMS9lbXB0eS50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUNsYXNzL3N0cmluZ3NBbmRDb21tZW50cy9iZWZvcmUvcGFjazEvZW1wdHkudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2OWRlMjkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUNsYXNzL3N0cmluZ3NBbmRDb21tZW50cy9iZWZvcmUvcGFjazEvZW1wdHkudHh0CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUNsYXNzL3N0cmluZ3NBbmRDb21tZW50cy9iZWZvcmUvcGFjazIvZW1wdHkudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVDbGFzcy9zdHJpbmdzQW5kQ29tbWVudHMvYmVmb3JlL3BhY2syL2VtcHR5LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjlkZTI5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVDbGFzcy9zdHJpbmdzQW5kQ29tbWVudHMvYmVmb3JlL3BhY2syL2VtcHR5LnR4dApkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVDbGFzcy9zdHJpbmdzQW5kQ29tbWVudHMyL2FmdGVyL3BhY2sxL2VtcHR5LnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlQ2xhc3Mvc3RyaW5nc0FuZENvbW1lbnRzMi9hZnRlci9wYWNrMS9lbXB0eS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY5ZGUyOQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlQ2xhc3Mvc3RyaW5nc0FuZENvbW1lbnRzMi9hZnRlci9wYWNrMS9lbXB0eS50eHQKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlQ2xhc3Mvc3RyaW5nc0FuZENvbW1lbnRzMi9hZnRlci9wYWNrMi9BQ2xhc3MuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlQ2xhc3Mvc3RyaW5nc0FuZENvbW1lbnRzMi9hZnRlci9wYWNrMi9BQ2xhc3MuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZTRkYzE2Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVDbGFzcy9zdHJpbmdzQW5kQ29tbWVudHMyL2FmdGVyL3BhY2syL0FDbGFzcy5qYXZhCkBAIC0wLDAgKzEsNSBAQAorcGFja2FnZSBwYWNrMjsKKworcHVibGljIGNsYXNzIEFDbGFzcyB7CisgIFN0cmluZyBzID0gInBhY2syLkFDbGFzcyI7Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUNsYXNzL3N0cmluZ3NBbmRDb21tZW50czIvYWZ0ZXIvcGFjazIvZW1wdHkudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVDbGFzcy9zdHJpbmdzQW5kQ29tbWVudHMyL2FmdGVyL3BhY2syL2VtcHR5LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjlkZTI5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVDbGFzcy9zdHJpbmdzQW5kQ29tbWVudHMyL2FmdGVyL3BhY2syL2VtcHR5LnR4dApkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVDbGFzcy9zdHJpbmdzQW5kQ29tbWVudHMyL2JlZm9yZS9wYWNrMS9BQ2xhc3MuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlQ2xhc3Mvc3RyaW5nc0FuZENvbW1lbnRzMi9iZWZvcmUvcGFjazEvQUNsYXNzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2NkZTM3YwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlQ2xhc3Mvc3RyaW5nc0FuZENvbW1lbnRzMi9iZWZvcmUvcGFjazEvQUNsYXNzLmphdmEKQEAgLTAsMCArMSw1IEBACitwYWNrYWdlIHBhY2sxOworCitwdWJsaWMgY2xhc3MgQUNsYXNzIHsKKyAgU3RyaW5nIHMgPSAicGFjazEuQUNsYXNzIjsKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlQ2xhc3Mvc3RyaW5nc0FuZENvbW1lbnRzMi9iZWZvcmUvcGFjazEvZW1wdHkudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVDbGFzcy9zdHJpbmdzQW5kQ29tbWVudHMyL2JlZm9yZS9wYWNrMS9lbXB0eS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY5ZGUyOQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlQ2xhc3Mvc3RyaW5nc0FuZENvbW1lbnRzMi9iZWZvcmUvcGFjazEvZW1wdHkudHh0CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUNsYXNzL3N0cmluZ3NBbmRDb21tZW50czIvYmVmb3JlL3BhY2syL2VtcHR5LnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlQ2xhc3Mvc3RyaW5nc0FuZENvbW1lbnRzMi9iZWZvcmUvcGFjazIvZW1wdHkudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2OWRlMjkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUNsYXNzL3N0cmluZ3NBbmRDb21tZW50czIvYmVmb3JlL3BhY2syL2VtcHR5LnR4dApkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVDbGFzcy91bnVzZWRJbXBvcnQvYWZ0ZXIvcDEvRjEuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlQ2xhc3MvdW51c2VkSW1wb3J0L2FmdGVyL3AxL0YxLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTkxYmI1NQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlQ2xhc3MvdW51c2VkSW1wb3J0L2FmdGVyL3AxL0YxLmphdmEKQEAgLTAsMCArMSw1IEBACitwYWNrYWdlIHAxOworCitjbGFzcyBGMSB7CisgIEYyIGYyOworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlQ2xhc3MvdW51c2VkSW1wb3J0L2FmdGVyL3AxL0YyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUNsYXNzL3VudXNlZEltcG9ydC9hZnRlci9wMS9GMi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjExZDBmZmQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUNsYXNzL3VudXNlZEltcG9ydC9hZnRlci9wMS9GMi5qYXZhCkBAIC0wLDAgKzEsMyBAQAorcGFja2FnZSBwMTsKKworcHVibGljIGNsYXNzIEYyIHt9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVDbGFzcy91bnVzZWRJbXBvcnQvYWZ0ZXIvcDIvZW1wdHkudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVDbGFzcy91bnVzZWRJbXBvcnQvYWZ0ZXIvcDIvZW1wdHkudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2OWRlMjkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUNsYXNzL3VudXNlZEltcG9ydC9hZnRlci9wMi9lbXB0eS50eHQKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlQ2xhc3MvdW51c2VkSW1wb3J0L2JlZm9yZS9wMS9GMS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVDbGFzcy91bnVzZWRJbXBvcnQvYmVmb3JlL3AxL0YxLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGNiYzYxMwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlQ2xhc3MvdW51c2VkSW1wb3J0L2JlZm9yZS9wMS9GMS5qYXZhCkBAIC0wLDAgKzEsNyBAQAorcGFja2FnZSBwMTsKKworaW1wb3J0IHAyLkYyOworCitjbGFzcyBGMSB7CisgIEYyIGYyOworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlQ2xhc3MvdW51c2VkSW1wb3J0L2JlZm9yZS9wMi9GMi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVDbGFzcy91bnVzZWRJbXBvcnQvYmVmb3JlL3AyL0YyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWVkZDI3ZAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlQ2xhc3MvdW51c2VkSW1wb3J0L2JlZm9yZS9wMi9GMi5qYXZhCkBAIC0wLDAgKzEsMyBAQAorcGFja2FnZSBwMjsKKworcHVibGljIGNsYXNzIEYyIHt9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVDbGFzcy91bnVzZWRJbXBvcnQvYmVmb3JlL3AyL2VtcHR5LnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlQ2xhc3MvdW51c2VkSW1wb3J0L2JlZm9yZS9wMi9lbXB0eS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY5ZGUyOQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlQ2xhc3MvdW51c2VkSW1wb3J0L2JlZm9yZS9wMi9lbXB0eS50eHQKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlQ2xhc3NBbmRGaWxlL2FsbENsYXNzZXNJbkZpbGUvYWZ0ZXIvcy9lbXB0eS50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUNsYXNzQW5kRmlsZS9hbGxDbGFzc2VzSW5GaWxlL2FmdGVyL3MvZW1wdHkudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2OWRlMjkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUNsYXNzQW5kRmlsZS9hbGxDbGFzc2VzSW5GaWxlL2FmdGVyL3MvZW1wdHkudHh0CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUNsYXNzQW5kRmlsZS9hbGxDbGFzc2VzSW5GaWxlL2FmdGVyL3QvTXlDbGFzcy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVDbGFzc0FuZEZpbGUvYWxsQ2xhc3Nlc0luRmlsZS9hZnRlci90L015Q2xhc3MuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMTZjMTk2Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVDbGFzc0FuZEZpbGUvYWxsQ2xhc3Nlc0luRmlsZS9hZnRlci90L015Q2xhc3MuamF2YQpAQCAtMCwwICsxLDMgQEAKK3BhY2thZ2UgdDsKK2NsYXNzIE15Q2xhc3N7fQorY2xhc3MgTXlPbmVNb3JlQ2xhc3N7fQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlQ2xhc3NBbmRGaWxlL2FsbENsYXNzZXNJbkZpbGUvYWZ0ZXIvdC9lbXB0eS50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUNsYXNzQW5kRmlsZS9hbGxDbGFzc2VzSW5GaWxlL2FmdGVyL3QvZW1wdHkudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2OWRlMjkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUNsYXNzQW5kRmlsZS9hbGxDbGFzc2VzSW5GaWxlL2FmdGVyL3QvZW1wdHkudHh0CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUNsYXNzQW5kRmlsZS9hbGxDbGFzc2VzSW5GaWxlL2FmdGVyL3QvdHh0Mm1vdmUudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVDbGFzc0FuZEZpbGUvYWxsQ2xhc3Nlc0luRmlsZS9hZnRlci90L3R4dDJtb3ZlLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjlkZTI5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVDbGFzc0FuZEZpbGUvYWxsQ2xhc3Nlc0luRmlsZS9hZnRlci90L3R4dDJtb3ZlLnR4dApkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVDbGFzc0FuZEZpbGUvYWxsQ2xhc3Nlc0luRmlsZS9iZWZvcmUvcy9NeUNsYXNzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUNsYXNzQW5kRmlsZS9hbGxDbGFzc2VzSW5GaWxlL2JlZm9yZS9zL015Q2xhc3MuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMjJiNmQyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVDbGFzc0FuZEZpbGUvYWxsQ2xhc3Nlc0luRmlsZS9iZWZvcmUvcy9NeUNsYXNzLmphdmEKQEAgLTAsMCArMSwzIEBACitwYWNrYWdlIHM7CitjbGFzcyBNeUNsYXNze30KK2NsYXNzIE15T25lTW9yZUNsYXNze30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUNsYXNzQW5kRmlsZS9hbGxDbGFzc2VzSW5GaWxlL2JlZm9yZS9zL2VtcHR5LnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlQ2xhc3NBbmRGaWxlL2FsbENsYXNzZXNJbkZpbGUvYmVmb3JlL3MvZW1wdHkudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2OWRlMjkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUNsYXNzQW5kRmlsZS9hbGxDbGFzc2VzSW5GaWxlL2JlZm9yZS9zL2VtcHR5LnR4dApkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVDbGFzc0FuZEZpbGUvYWxsQ2xhc3Nlc0luRmlsZS9iZWZvcmUvcy90eHQybW92ZS50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUNsYXNzQW5kRmlsZS9hbGxDbGFzc2VzSW5GaWxlL2JlZm9yZS9zL3R4dDJtb3ZlLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjlkZTI5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVDbGFzc0FuZEZpbGUvYWxsQ2xhc3Nlc0luRmlsZS9iZWZvcmUvcy90eHQybW92ZS50eHQKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlQ2xhc3NBbmRGaWxlL2FsbENsYXNzZXNJbkZpbGUvYmVmb3JlL3QvZW1wdHkudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVDbGFzc0FuZEZpbGUvYWxsQ2xhc3Nlc0luRmlsZS9iZWZvcmUvdC9lbXB0eS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY5ZGUyOQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlQ2xhc3NBbmRGaWxlL2FsbENsYXNzZXNJbkZpbGUvYmVmb3JlL3QvZW1wdHkudHh0CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUNsYXNzQW5kRmlsZS9sZWF2ZVBhY2thZ2VMb2NhbENsYXNzL2FmdGVyL3MvTXlMb2NhbC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVDbGFzc0FuZEZpbGUvbGVhdmVQYWNrYWdlTG9jYWxDbGFzcy9hZnRlci9zL015TG9jYWwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZjRhM2MxCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVDbGFzc0FuZEZpbGUvbGVhdmVQYWNrYWdlTG9jYWxDbGFzcy9hZnRlci9zL015TG9jYWwuamF2YQpAQCAtMCwwICsxLDMgQEAKK3BhY2thZ2UgczsKKworY2xhc3MgTXlMb2NhbHt9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVDbGFzc0FuZEZpbGUvbGVhdmVQYWNrYWdlTG9jYWxDbGFzcy9hZnRlci9zL2VtcHR5LnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlQ2xhc3NBbmRGaWxlL2xlYXZlUGFja2FnZUxvY2FsQ2xhc3MvYWZ0ZXIvcy9lbXB0eS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY5ZGUyOQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlQ2xhc3NBbmRGaWxlL2xlYXZlUGFja2FnZUxvY2FsQ2xhc3MvYWZ0ZXIvcy9lbXB0eS50eHQKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlQ2xhc3NBbmRGaWxlL2xlYXZlUGFja2FnZUxvY2FsQ2xhc3MvYWZ0ZXIvdC9NeUNsYXNzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUNsYXNzQW5kRmlsZS9sZWF2ZVBhY2thZ2VMb2NhbENsYXNzL2FmdGVyL3QvTXlDbGFzcy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM2Y2M0OGEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUNsYXNzQW5kRmlsZS9sZWF2ZVBhY2thZ2VMb2NhbENsYXNzL2FmdGVyL3QvTXlDbGFzcy5qYXZhCkBAIC0wLDAgKzEsMiBAQAorcGFja2FnZSB0OworcHVibGljIGNsYXNzIE15Q2xhc3N7fQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVDbGFzc0FuZEZpbGUvbGVhdmVQYWNrYWdlTG9jYWxDbGFzcy9hZnRlci90L2VtcHR5LnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlQ2xhc3NBbmRGaWxlL2xlYXZlUGFja2FnZUxvY2FsQ2xhc3MvYWZ0ZXIvdC9lbXB0eS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY5ZGUyOQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlQ2xhc3NBbmRGaWxlL2xlYXZlUGFja2FnZUxvY2FsQ2xhc3MvYWZ0ZXIvdC9lbXB0eS50eHQKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlQ2xhc3NBbmRGaWxlL2xlYXZlUGFja2FnZUxvY2FsQ2xhc3MvYWZ0ZXIvdC90eHQybW92ZS50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUNsYXNzQW5kRmlsZS9sZWF2ZVBhY2thZ2VMb2NhbENsYXNzL2FmdGVyL3QvdHh0Mm1vdmUudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2OWRlMjkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUNsYXNzQW5kRmlsZS9sZWF2ZVBhY2thZ2VMb2NhbENsYXNzL2FmdGVyL3QvdHh0Mm1vdmUudHh0CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUNsYXNzQW5kRmlsZS9sZWF2ZVBhY2thZ2VMb2NhbENsYXNzL2JlZm9yZS9zL015Q2xhc3MuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlQ2xhc3NBbmRGaWxlL2xlYXZlUGFja2FnZUxvY2FsQ2xhc3MvYmVmb3JlL3MvTXlDbGFzcy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA0Zjk1ZmEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUNsYXNzQW5kRmlsZS9sZWF2ZVBhY2thZ2VMb2NhbENsYXNzL2JlZm9yZS9zL015Q2xhc3MuamF2YQpAQCAtMCwwICsxLDMgQEAKK3BhY2thZ2UgczsKK3B1YmxpYyBjbGFzcyBNeUNsYXNze30KK2NsYXNzIE15TG9jYWx7fQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVDbGFzc0FuZEZpbGUvbGVhdmVQYWNrYWdlTG9jYWxDbGFzcy9iZWZvcmUvcy9lbXB0eS50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUNsYXNzQW5kRmlsZS9sZWF2ZVBhY2thZ2VMb2NhbENsYXNzL2JlZm9yZS9zL2VtcHR5LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjlkZTI5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVDbGFzc0FuZEZpbGUvbGVhdmVQYWNrYWdlTG9jYWxDbGFzcy9iZWZvcmUvcy9lbXB0eS50eHQKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlQ2xhc3NBbmRGaWxlL2xlYXZlUGFja2FnZUxvY2FsQ2xhc3MvYmVmb3JlL3MvdHh0Mm1vdmUudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVDbGFzc0FuZEZpbGUvbGVhdmVQYWNrYWdlTG9jYWxDbGFzcy9iZWZvcmUvcy90eHQybW92ZS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY5ZGUyOQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlQ2xhc3NBbmRGaWxlL2xlYXZlUGFja2FnZUxvY2FsQ2xhc3MvYmVmb3JlL3MvdHh0Mm1vdmUudHh0CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUNsYXNzQW5kRmlsZS9sZWF2ZVBhY2thZ2VMb2NhbENsYXNzL2JlZm9yZS90L2VtcHR5LnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlQ2xhc3NBbmRGaWxlL2xlYXZlUGFja2FnZUxvY2FsQ2xhc3MvYmVmb3JlL3QvZW1wdHkudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2OWRlMjkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUNsYXNzQW5kRmlsZS9sZWF2ZVBhY2thZ2VMb2NhbENsYXNzL2JlZm9yZS90L2VtcHR5LnR4dApkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVDbGFzc0FuZEZpbGUvb25seVBhY2thZ2VMb2NhbENsYXNzL2FmdGVyL3MvTXlDbGFzcy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVDbGFzc0FuZEZpbGUvb25seVBhY2thZ2VMb2NhbENsYXNzL2FmdGVyL3MvTXlDbGFzcy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjViY2VhZDMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUNsYXNzQW5kRmlsZS9vbmx5UGFja2FnZUxvY2FsQ2xhc3MvYWZ0ZXIvcy9NeUNsYXNzLmphdmEKQEAgLTAsMCArMSwyIEBACitwYWNrYWdlIHM7CitwdWJsaWMgY2xhc3MgTXlDbGFzc3t9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUNsYXNzQW5kRmlsZS9vbmx5UGFja2FnZUxvY2FsQ2xhc3MvYWZ0ZXIvcy9lbXB0eS50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUNsYXNzQW5kRmlsZS9vbmx5UGFja2FnZUxvY2FsQ2xhc3MvYWZ0ZXIvcy9lbXB0eS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY5ZGUyOQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlQ2xhc3NBbmRGaWxlL29ubHlQYWNrYWdlTG9jYWxDbGFzcy9hZnRlci9zL2VtcHR5LnR4dApkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVDbGFzc0FuZEZpbGUvb25seVBhY2thZ2VMb2NhbENsYXNzL2FmdGVyL3QvTXlMb2NhbC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVDbGFzc0FuZEZpbGUvb25seVBhY2thZ2VMb2NhbENsYXNzL2FmdGVyL3QvTXlMb2NhbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkxZGQzNGQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUNsYXNzQW5kRmlsZS9vbmx5UGFja2FnZUxvY2FsQ2xhc3MvYWZ0ZXIvdC9NeUxvY2FsLmphdmEKQEAgLTAsMCArMSwzIEBACitwYWNrYWdlIHQ7CisKK2NsYXNzIE15TG9jYWx7fQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlQ2xhc3NBbmRGaWxlL29ubHlQYWNrYWdlTG9jYWxDbGFzcy9hZnRlci90L2VtcHR5LnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlQ2xhc3NBbmRGaWxlL29ubHlQYWNrYWdlTG9jYWxDbGFzcy9hZnRlci90L2VtcHR5LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjlkZTI5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVDbGFzc0FuZEZpbGUvb25seVBhY2thZ2VMb2NhbENsYXNzL2FmdGVyL3QvZW1wdHkudHh0CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUNsYXNzQW5kRmlsZS9vbmx5UGFja2FnZUxvY2FsQ2xhc3MvYWZ0ZXIvdC90eHQybW92ZS50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUNsYXNzQW5kRmlsZS9vbmx5UGFja2FnZUxvY2FsQ2xhc3MvYWZ0ZXIvdC90eHQybW92ZS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY5ZGUyOQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlQ2xhc3NBbmRGaWxlL29ubHlQYWNrYWdlTG9jYWxDbGFzcy9hZnRlci90L3R4dDJtb3ZlLnR4dApkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVDbGFzc0FuZEZpbGUvb25seVBhY2thZ2VMb2NhbENsYXNzL2JlZm9yZS9zL015Q2xhc3MuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlQ2xhc3NBbmRGaWxlL29ubHlQYWNrYWdlTG9jYWxDbGFzcy9iZWZvcmUvcy9NeUNsYXNzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDRmOTVmYQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlQ2xhc3NBbmRGaWxlL29ubHlQYWNrYWdlTG9jYWxDbGFzcy9iZWZvcmUvcy9NeUNsYXNzLmphdmEKQEAgLTAsMCArMSwzIEBACitwYWNrYWdlIHM7CitwdWJsaWMgY2xhc3MgTXlDbGFzc3t9CitjbGFzcyBNeUxvY2Fse30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlQ2xhc3NBbmRGaWxlL29ubHlQYWNrYWdlTG9jYWxDbGFzcy9iZWZvcmUvcy9lbXB0eS50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUNsYXNzQW5kRmlsZS9vbmx5UGFja2FnZUxvY2FsQ2xhc3MvYmVmb3JlL3MvZW1wdHkudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2OWRlMjkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUNsYXNzQW5kRmlsZS9vbmx5UGFja2FnZUxvY2FsQ2xhc3MvYmVmb3JlL3MvZW1wdHkudHh0CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUNsYXNzQW5kRmlsZS9vbmx5UGFja2FnZUxvY2FsQ2xhc3MvYmVmb3JlL3MvdHh0Mm1vdmUudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVDbGFzc0FuZEZpbGUvb25seVBhY2thZ2VMb2NhbENsYXNzL2JlZm9yZS9zL3R4dDJtb3ZlLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjlkZTI5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVDbGFzc0FuZEZpbGUvb25seVBhY2thZ2VMb2NhbENsYXNzL2JlZm9yZS9zL3R4dDJtb3ZlLnR4dApkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVDbGFzc0FuZEZpbGUvb25seVBhY2thZ2VMb2NhbENsYXNzL2JlZm9yZS90L2VtcHR5LnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlQ2xhc3NBbmRGaWxlL29ubHlQYWNrYWdlTG9jYWxDbGFzcy9iZWZvcmUvdC9lbXB0eS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY5ZGUyOQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlQ2xhc3NBbmRGaWxlL29ubHlQYWNrYWdlTG9jYWxDbGFzcy9iZWZvcmUvdC9lbXB0eS50eHQKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlQ2xhc3NUb0lubmVyL2NvbnRleHRDaGFuZ2UxL2FmdGVyL3BhY2sxL0NsYXNzMi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVDbGFzc1RvSW5uZXIvY29udGV4dENoYW5nZTEvYWZ0ZXIvcGFjazEvQ2xhc3MyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjlkZjFiMwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlQ2xhc3NUb0lubmVyL2NvbnRleHRDaGFuZ2UxL2FmdGVyL3BhY2sxL0NsYXNzMi5qYXZhCkBAIC0wLDAgKzEsNCBAQAorcGFja2FnZSBwYWNrMTsKKworcHVibGljIGNsYXNzIENsYXNzMiB7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVDbGFzc1RvSW5uZXIvY29udGV4dENoYW5nZTEvYWZ0ZXIvcGFjazEvZW1wdHkudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVDbGFzc1RvSW5uZXIvY29udGV4dENoYW5nZTEvYWZ0ZXIvcGFjazEvZW1wdHkudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2OWRlMjkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUNsYXNzVG9Jbm5lci9jb250ZXh0Q2hhbmdlMS9hZnRlci9wYWNrMS9lbXB0eS50eHQKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlQ2xhc3NUb0lubmVyL2NvbnRleHRDaGFuZ2UxL2FmdGVyL3BhY2syL0EuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlQ2xhc3NUb0lubmVyL2NvbnRleHRDaGFuZ2UxL2FmdGVyL3BhY2syL0EuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYjdjNWE5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVDbGFzc1RvSW5uZXIvY29udGV4dENoYW5nZTEvYWZ0ZXIvcGFjazIvQS5qYXZhCkBAIC0wLDAgKzEsOSBAQAorcGFja2FnZSBwYWNrMjsKKworaW1wb3J0IHBhY2sxLkNsYXNzMjsKKworcHVibGljIGNsYXNzIEEgeworICAgIHB1YmxpYyBzdGF0aWMgY2xhc3MgQ2xhc3MxIHsKKyAgICAgICAgQ2xhc3MyIGE7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVDbGFzc1RvSW5uZXIvY29udGV4dENoYW5nZTEvYWZ0ZXIvcGFjazIvZW1wdHkudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVDbGFzc1RvSW5uZXIvY29udGV4dENoYW5nZTEvYWZ0ZXIvcGFjazIvZW1wdHkudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2OWRlMjkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUNsYXNzVG9Jbm5lci9jb250ZXh0Q2hhbmdlMS9hZnRlci9wYWNrMi9lbXB0eS50eHQKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlQ2xhc3NUb0lubmVyL2NvbnRleHRDaGFuZ2UxL2JlZm9yZS9wYWNrMS9DbGFzczEuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlQ2xhc3NUb0lubmVyL2NvbnRleHRDaGFuZ2UxL2JlZm9yZS9wYWNrMS9DbGFzczEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNzExNWNmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVDbGFzc1RvSW5uZXIvY29udGV4dENoYW5nZTEvYmVmb3JlL3BhY2sxL0NsYXNzMS5qYXZhCkBAIC0wLDAgKzEsNSBAQAorcGFja2FnZSBwYWNrMTsKKworcHVibGljIGNsYXNzIENsYXNzMSB7CisgICAgQ2xhc3MyIGE7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVDbGFzc1RvSW5uZXIvY29udGV4dENoYW5nZTEvYmVmb3JlL3BhY2sxL0NsYXNzMi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVDbGFzc1RvSW5uZXIvY29udGV4dENoYW5nZTEvYmVmb3JlL3BhY2sxL0NsYXNzMi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY5ZGYxYjMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUNsYXNzVG9Jbm5lci9jb250ZXh0Q2hhbmdlMS9iZWZvcmUvcGFjazEvQ2xhc3MyLmphdmEKQEAgLTAsMCArMSw0IEBACitwYWNrYWdlIHBhY2sxOworCitwdWJsaWMgY2xhc3MgQ2xhc3MyIHsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUNsYXNzVG9Jbm5lci9jb250ZXh0Q2hhbmdlMS9iZWZvcmUvcGFjazEvZW1wdHkudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVDbGFzc1RvSW5uZXIvY29udGV4dENoYW5nZTEvYmVmb3JlL3BhY2sxL2VtcHR5LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjlkZTI5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVDbGFzc1RvSW5uZXIvY29udGV4dENoYW5nZTEvYmVmb3JlL3BhY2sxL2VtcHR5LnR4dApkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVDbGFzc1RvSW5uZXIvY29udGV4dENoYW5nZTEvYmVmb3JlL3BhY2syL0EuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlQ2xhc3NUb0lubmVyL2NvbnRleHRDaGFuZ2UxL2JlZm9yZS9wYWNrMi9BLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTE4ODZlNQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlQ2xhc3NUb0lubmVyL2NvbnRleHRDaGFuZ2UxL2JlZm9yZS9wYWNrMi9BLmphdmEKQEAgLTAsMCArMSw0IEBACitwYWNrYWdlIHBhY2syOworCitwdWJsaWMgY2xhc3MgQSB7Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUNsYXNzVG9Jbm5lci9jb250ZXh0Q2hhbmdlMS9iZWZvcmUvcGFjazIvZW1wdHkudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVDbGFzc1RvSW5uZXIvY29udGV4dENoYW5nZTEvYmVmb3JlL3BhY2syL2VtcHR5LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjlkZTI5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVDbGFzc1RvSW5uZXIvY29udGV4dENoYW5nZTEvYmVmb3JlL3BhY2syL2VtcHR5LnR4dApkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVDbGFzc1RvSW5uZXIvY29udGV4dENoYW5nZTIvYWZ0ZXIvcGFjazEvQ2xhc3MyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUNsYXNzVG9Jbm5lci9jb250ZXh0Q2hhbmdlMi9hZnRlci9wYWNrMS9DbGFzczIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOWRmMWIzCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVDbGFzc1RvSW5uZXIvY29udGV4dENoYW5nZTIvYWZ0ZXIvcGFjazEvQ2xhc3MyLmphdmEKQEAgLTAsMCArMSw0IEBACitwYWNrYWdlIHBhY2sxOworCitwdWJsaWMgY2xhc3MgQ2xhc3MyIHsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUNsYXNzVG9Jbm5lci9jb250ZXh0Q2hhbmdlMi9hZnRlci9wYWNrMS9lbXB0eS50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUNsYXNzVG9Jbm5lci9jb250ZXh0Q2hhbmdlMi9hZnRlci9wYWNrMS9lbXB0eS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY5ZGUyOQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlQ2xhc3NUb0lubmVyL2NvbnRleHRDaGFuZ2UyL2FmdGVyL3BhY2sxL2VtcHR5LnR4dApkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVDbGFzc1RvSW5uZXIvY29udGV4dENoYW5nZTIvYWZ0ZXIvcGFjazIvQS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVDbGFzc1RvSW5uZXIvY29udGV4dENoYW5nZTIvYWZ0ZXIvcGFjazIvQS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMwNWE5YzcKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUNsYXNzVG9Jbm5lci9jb250ZXh0Q2hhbmdlMi9hZnRlci9wYWNrMi9BLmphdmEKQEAgLTAsMCArMSwxMSBAQAorcGFja2FnZSBwYWNrMjsKKworaW1wb3J0IHBhY2sxLkNsYXNzMjsKKworcHVibGljIGNsYXNzIEEgeworICAgIHB1YmxpYyBzdGF0aWMgY2xhc3MgQ2xhc3MxIHsKKyAgICAgIHZvaWQgZm9vKCl7CisgICAgICAgIENsYXNzMi54eHgoKTsKKyAgICAgIH0KKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUNsYXNzVG9Jbm5lci9jb250ZXh0Q2hhbmdlMi9hZnRlci9wYWNrMi9lbXB0eS50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUNsYXNzVG9Jbm5lci9jb250ZXh0Q2hhbmdlMi9hZnRlci9wYWNrMi9lbXB0eS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY5ZGUyOQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlQ2xhc3NUb0lubmVyL2NvbnRleHRDaGFuZ2UyL2FmdGVyL3BhY2syL2VtcHR5LnR4dApkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVDbGFzc1RvSW5uZXIvY29udGV4dENoYW5nZTIvYmVmb3JlL3BhY2sxL0NsYXNzMS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVDbGFzc1RvSW5uZXIvY29udGV4dENoYW5nZTIvYmVmb3JlL3BhY2sxL0NsYXNzMS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNlNDAxNGYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUNsYXNzVG9Jbm5lci9jb250ZXh0Q2hhbmdlMi9iZWZvcmUvcGFjazEvQ2xhc3MxLmphdmEKQEAgLTAsMCArMSw3IEBACitwYWNrYWdlIHBhY2sxOworCitwdWJsaWMgY2xhc3MgQ2xhc3MxIHsKKyAgdm9pZCBmb28oKXsKKyAgICBDbGFzczIueHh4KCk7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUNsYXNzVG9Jbm5lci9jb250ZXh0Q2hhbmdlMi9iZWZvcmUvcGFjazEvQ2xhc3MyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUNsYXNzVG9Jbm5lci9jb250ZXh0Q2hhbmdlMi9iZWZvcmUvcGFjazEvQ2xhc3MyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjlkZjFiMwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlQ2xhc3NUb0lubmVyL2NvbnRleHRDaGFuZ2UyL2JlZm9yZS9wYWNrMS9DbGFzczIuamF2YQpAQCAtMCwwICsxLDQgQEAKK3BhY2thZ2UgcGFjazE7CisKK3B1YmxpYyBjbGFzcyBDbGFzczIgeworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlQ2xhc3NUb0lubmVyL2NvbnRleHRDaGFuZ2UyL2JlZm9yZS9wYWNrMS9lbXB0eS50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUNsYXNzVG9Jbm5lci9jb250ZXh0Q2hhbmdlMi9iZWZvcmUvcGFjazEvZW1wdHkudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2OWRlMjkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUNsYXNzVG9Jbm5lci9jb250ZXh0Q2hhbmdlMi9iZWZvcmUvcGFjazEvZW1wdHkudHh0CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUNsYXNzVG9Jbm5lci9jb250ZXh0Q2hhbmdlMi9iZWZvcmUvcGFjazIvQS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVDbGFzc1RvSW5uZXIvY29udGV4dENoYW5nZTIvYmVmb3JlL3BhY2syL0EuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMTg4NmU1Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVDbGFzc1RvSW5uZXIvY29udGV4dENoYW5nZTIvYmVmb3JlL3BhY2syL0EuamF2YQpAQCAtMCwwICsxLDQgQEAKK3BhY2thZ2UgcGFjazI7CisKK3B1YmxpYyBjbGFzcyBBIHsKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlQ2xhc3NUb0lubmVyL2NvbnRleHRDaGFuZ2UyL2JlZm9yZS9wYWNrMi9lbXB0eS50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUNsYXNzVG9Jbm5lci9jb250ZXh0Q2hhbmdlMi9iZWZvcmUvcGFjazIvZW1wdHkudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2OWRlMjkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUNsYXNzVG9Jbm5lci9jb250ZXh0Q2hhbmdlMi9iZWZvcmUvcGFjazIvZW1wdHkudHh0CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUNsYXNzVG9Jbm5lci9kdXBsaWNhdGVJbm5lci9iZWZvcmUvcGFjazEvQ2xhc3MxLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUNsYXNzVG9Jbm5lci9kdXBsaWNhdGVJbm5lci9iZWZvcmUvcGFjazEvQ2xhc3MxLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzc3NThmNgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlQ2xhc3NUb0lubmVyL2R1cGxpY2F0ZUlubmVyL2JlZm9yZS9wYWNrMS9DbGFzczEuamF2YQpAQCAtMCwwICsxLDQgQEAKK3BhY2thZ2UgcGFjazE7CisKK3B1YmxpYyBjbGFzcyBDbGFzczEgeworfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVDbGFzc1RvSW5uZXIvZHVwbGljYXRlSW5uZXIvYmVmb3JlL3BhY2syL0EuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlQ2xhc3NUb0lubmVyL2R1cGxpY2F0ZUlubmVyL2JlZm9yZS9wYWNrMi9BLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDdjNGM1NAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlQ2xhc3NUb0lubmVyL2R1cGxpY2F0ZUlubmVyL2JlZm9yZS9wYWNrMi9BLmphdmEKQEAgLTAsMCArMSw2IEBACitwYWNrYWdlIHBhY2syOworCitjbGFzcyBBIHsKKyAgcHJpdmF0ZSBjbGFzcyBDbGFzczEgeworICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUNsYXNzVG9Jbm5lci9pbm5lckltcG9ydC9hZnRlci9wYWNrMS9lbXB0eS50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUNsYXNzVG9Jbm5lci9pbm5lckltcG9ydC9hZnRlci9wYWNrMS9lbXB0eS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY5ZGUyOQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlQ2xhc3NUb0lubmVyL2lubmVySW1wb3J0L2FmdGVyL3BhY2sxL2VtcHR5LnR4dApkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVDbGFzc1RvSW5uZXIvaW5uZXJJbXBvcnQvYWZ0ZXIvcGFjazIvQS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVDbGFzc1RvSW5uZXIvaW5uZXJJbXBvcnQvYWZ0ZXIvcGFjazIvQS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM4OTAwZDkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUNsYXNzVG9Jbm5lci9pbm5lckltcG9ydC9hZnRlci9wYWNrMi9BLmphdmEKQEAgLTAsMCArMSw2IEBACitwYWNrYWdlIHBhY2syOworCitwdWJsaWMgY2xhc3MgQSB7CisgICAgcHVibGljIHN0YXRpYyBjbGFzcyBDbGFzczEgeworICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlQ2xhc3NUb0lubmVyL2lubmVySW1wb3J0L2FmdGVyL3BhY2syL2VtcHR5LnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlQ2xhc3NUb0lubmVyL2lubmVySW1wb3J0L2FmdGVyL3BhY2syL2VtcHR5LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjlkZTI5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVDbGFzc1RvSW5uZXIvaW5uZXJJbXBvcnQvYWZ0ZXIvcGFjazIvZW1wdHkudHh0CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUNsYXNzVG9Jbm5lci9pbm5lckltcG9ydC9hZnRlci9wYWNrVXNlci9DbGFzczIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlQ2xhc3NUb0lubmVyL2lubmVySW1wb3J0L2FmdGVyL3BhY2tVc2VyL0NsYXNzMi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhjZTQ2MDMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUNsYXNzVG9Jbm5lci9pbm5lckltcG9ydC9hZnRlci9wYWNrVXNlci9DbGFzczIuamF2YQpAQCAtMCwwICsxLDcgQEAKK3BhY2thZ2UgcGFja1VzZXI7CisKK2ltcG9ydCBwYWNrMi5BOworCitwdWJsaWMgY2xhc3MgQ2xhc3MyIHsKKyAgQS5DbGFzczEgbXlDbGFzczE7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVDbGFzc1RvSW5uZXIvaW5uZXJJbXBvcnQvYmVmb3JlL3BhY2sxL0NsYXNzMS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVDbGFzc1RvSW5uZXIvaW5uZXJJbXBvcnQvYmVmb3JlL3BhY2sxL0NsYXNzMS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIzMWZlMDYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUNsYXNzVG9Jbm5lci9pbm5lckltcG9ydC9iZWZvcmUvcGFjazEvQ2xhc3MxLmphdmEKQEAgLTAsMCArMSw0IEBACitwYWNrYWdlIHBhY2sxOworCitwdWJsaWMgY2xhc3MgQ2xhc3MxIHsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUNsYXNzVG9Jbm5lci9pbm5lckltcG9ydC9iZWZvcmUvcGFjazEvZW1wdHkudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVDbGFzc1RvSW5uZXIvaW5uZXJJbXBvcnQvYmVmb3JlL3BhY2sxL2VtcHR5LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjlkZTI5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVDbGFzc1RvSW5uZXIvaW5uZXJJbXBvcnQvYmVmb3JlL3BhY2sxL2VtcHR5LnR4dApkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVDbGFzc1RvSW5uZXIvaW5uZXJJbXBvcnQvYmVmb3JlL3BhY2syL0EuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlQ2xhc3NUb0lubmVyL2lubmVySW1wb3J0L2JlZm9yZS9wYWNrMi9BLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTE4ODZlNQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlQ2xhc3NUb0lubmVyL2lubmVySW1wb3J0L2JlZm9yZS9wYWNrMi9BLmphdmEKQEAgLTAsMCArMSw0IEBACitwYWNrYWdlIHBhY2syOworCitwdWJsaWMgY2xhc3MgQSB7Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUNsYXNzVG9Jbm5lci9pbm5lckltcG9ydC9iZWZvcmUvcGFjazIvZW1wdHkudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVDbGFzc1RvSW5uZXIvaW5uZXJJbXBvcnQvYmVmb3JlL3BhY2syL2VtcHR5LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjlkZTI5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVDbGFzc1RvSW5uZXIvaW5uZXJJbXBvcnQvYmVmb3JlL3BhY2syL2VtcHR5LnR4dApkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVDbGFzc1RvSW5uZXIvaW5uZXJJbXBvcnQvYmVmb3JlL3BhY2tVc2VyL0NsYXNzMi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVDbGFzc1RvSW5uZXIvaW5uZXJJbXBvcnQvYmVmb3JlL3BhY2tVc2VyL0NsYXNzMi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE1NWNmZTAKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUNsYXNzVG9Jbm5lci9pbm5lckltcG9ydC9iZWZvcmUvcGFja1VzZXIvQ2xhc3MyLmphdmEKQEAgLTAsMCArMSw3IEBACitwYWNrYWdlIHBhY2tVc2VyOworCitpbXBvcnQgcGFjazEuQ2xhc3MxOworCitwdWJsaWMgY2xhc3MgQ2xhc3MyIHsKKyAgQ2xhc3MxIG15Q2xhc3MxOworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlQ2xhc3NUb0lubmVyL2luc2VydElubmVyQ2xhc3NJbXBvcnQvYWZ0ZXIvcGFjazEvZW1wdHkudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVDbGFzc1RvSW5uZXIvaW5zZXJ0SW5uZXJDbGFzc0ltcG9ydC9hZnRlci9wYWNrMS9lbXB0eS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY5ZGUyOQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlQ2xhc3NUb0lubmVyL2luc2VydElubmVyQ2xhc3NJbXBvcnQvYWZ0ZXIvcGFjazEvZW1wdHkudHh0CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUNsYXNzVG9Jbm5lci9pbnNlcnRJbm5lckNsYXNzSW1wb3J0L2FmdGVyL3BhY2syL0EuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlQ2xhc3NUb0lubmVyL2luc2VydElubmVyQ2xhc3NJbXBvcnQvYWZ0ZXIvcGFjazIvQS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM4OTAwZDkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUNsYXNzVG9Jbm5lci9pbnNlcnRJbm5lckNsYXNzSW1wb3J0L2FmdGVyL3BhY2syL0EuamF2YQpAQCAtMCwwICsxLDYgQEAKK3BhY2thZ2UgcGFjazI7CisKK3B1YmxpYyBjbGFzcyBBIHsKKyAgICBwdWJsaWMgc3RhdGljIGNsYXNzIENsYXNzMSB7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVDbGFzc1RvSW5uZXIvaW5zZXJ0SW5uZXJDbGFzc0ltcG9ydC9hZnRlci9wYWNrMi9lbXB0eS50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUNsYXNzVG9Jbm5lci9pbnNlcnRJbm5lckNsYXNzSW1wb3J0L2FmdGVyL3BhY2syL2VtcHR5LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjlkZTI5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVDbGFzc1RvSW5uZXIvaW5zZXJ0SW5uZXJDbGFzc0ltcG9ydC9hZnRlci9wYWNrMi9lbXB0eS50eHQKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlQ2xhc3NUb0lubmVyL2luc2VydElubmVyQ2xhc3NJbXBvcnQvYWZ0ZXIvcGFja1VzZXIvQ2xhc3MyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUNsYXNzVG9Jbm5lci9pbnNlcnRJbm5lckNsYXNzSW1wb3J0L2FmdGVyL3BhY2tVc2VyL0NsYXNzMi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRiNWQ2NGQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUNsYXNzVG9Jbm5lci9pbnNlcnRJbm5lckNsYXNzSW1wb3J0L2FmdGVyL3BhY2tVc2VyL0NsYXNzMi5qYXZhCkBAIC0wLDAgKzEsNyBAQAorcGFja2FnZSBwYWNrVXNlcjsKKworaW1wb3J0IHBhY2syLkEuQ2xhc3MxOworCitwdWJsaWMgY2xhc3MgQ2xhc3MyIHsKKyAgQ2xhc3MxIG15Q2xhc3MxOworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlQ2xhc3NUb0lubmVyL2luc2VydElubmVyQ2xhc3NJbXBvcnQvYmVmb3JlL3BhY2sxL0NsYXNzMS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVDbGFzc1RvSW5uZXIvaW5zZXJ0SW5uZXJDbGFzc0ltcG9ydC9iZWZvcmUvcGFjazEvQ2xhc3MxLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjMxZmUwNgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlQ2xhc3NUb0lubmVyL2luc2VydElubmVyQ2xhc3NJbXBvcnQvYmVmb3JlL3BhY2sxL0NsYXNzMS5qYXZhCkBAIC0wLDAgKzEsNCBAQAorcGFja2FnZSBwYWNrMTsKKworcHVibGljIGNsYXNzIENsYXNzMSB7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVDbGFzc1RvSW5uZXIvaW5zZXJ0SW5uZXJDbGFzc0ltcG9ydC9iZWZvcmUvcGFjazEvZW1wdHkudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVDbGFzc1RvSW5uZXIvaW5zZXJ0SW5uZXJDbGFzc0ltcG9ydC9iZWZvcmUvcGFjazEvZW1wdHkudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2OWRlMjkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUNsYXNzVG9Jbm5lci9pbnNlcnRJbm5lckNsYXNzSW1wb3J0L2JlZm9yZS9wYWNrMS9lbXB0eS50eHQKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlQ2xhc3NUb0lubmVyL2luc2VydElubmVyQ2xhc3NJbXBvcnQvYmVmb3JlL3BhY2syL0EuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlQ2xhc3NUb0lubmVyL2luc2VydElubmVyQ2xhc3NJbXBvcnQvYmVmb3JlL3BhY2syL0EuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMTg4NmU1Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVDbGFzc1RvSW5uZXIvaW5zZXJ0SW5uZXJDbGFzc0ltcG9ydC9iZWZvcmUvcGFjazIvQS5qYXZhCkBAIC0wLDAgKzEsNCBAQAorcGFja2FnZSBwYWNrMjsKKworcHVibGljIGNsYXNzIEEgeworfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVDbGFzc1RvSW5uZXIvaW5zZXJ0SW5uZXJDbGFzc0ltcG9ydC9iZWZvcmUvcGFjazIvZW1wdHkudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVDbGFzc1RvSW5uZXIvaW5zZXJ0SW5uZXJDbGFzc0ltcG9ydC9iZWZvcmUvcGFjazIvZW1wdHkudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2OWRlMjkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUNsYXNzVG9Jbm5lci9pbnNlcnRJbm5lckNsYXNzSW1wb3J0L2JlZm9yZS9wYWNrMi9lbXB0eS50eHQKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlQ2xhc3NUb0lubmVyL2luc2VydElubmVyQ2xhc3NJbXBvcnQvYmVmb3JlL3BhY2tVc2VyL0NsYXNzMi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVDbGFzc1RvSW5uZXIvaW5zZXJ0SW5uZXJDbGFzc0ltcG9ydC9iZWZvcmUvcGFja1VzZXIvQ2xhc3MyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTU1Y2ZlMAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlQ2xhc3NUb0lubmVyL2luc2VydElubmVyQ2xhc3NJbXBvcnQvYmVmb3JlL3BhY2tVc2VyL0NsYXNzMi5qYXZhCkBAIC0wLDAgKzEsNyBAQAorcGFja2FnZSBwYWNrVXNlcjsKKworaW1wb3J0IHBhY2sxLkNsYXNzMTsKKworcHVibGljIGNsYXNzIENsYXNzMiB7CisgIENsYXNzMSBteUNsYXNzMTsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUNsYXNzVG9Jbm5lci9sb2NhbGx5VXNlZFBhY2thZ2VMb2NhbFRvUHVibGljSW50ZXJmYWNlL2FmdGVyL3BhY2sxL1VzYWdlLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUNsYXNzVG9Jbm5lci9sb2NhbGx5VXNlZFBhY2thZ2VMb2NhbFRvUHVibGljSW50ZXJmYWNlL2FmdGVyL3BhY2sxL1VzYWdlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTRjZmMyNgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlQ2xhc3NUb0lubmVyL2xvY2FsbHlVc2VkUGFja2FnZUxvY2FsVG9QdWJsaWNJbnRlcmZhY2UvYWZ0ZXIvcGFjazEvVXNhZ2UuamF2YQpAQCAtMCwwICsxLDcgQEAKK3BhY2thZ2UgcGFjazE7CisKK2ltcG9ydCBwYWNrMi5BOworCitjbGFzcyBVc2FnZSB7CisgIEEuQ2xhc3MxIGNsMTsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUNsYXNzVG9Jbm5lci9sb2NhbGx5VXNlZFBhY2thZ2VMb2NhbFRvUHVibGljSW50ZXJmYWNlL2FmdGVyL3BhY2sxL2VtcHR5LnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlQ2xhc3NUb0lubmVyL2xvY2FsbHlVc2VkUGFja2FnZUxvY2FsVG9QdWJsaWNJbnRlcmZhY2UvYWZ0ZXIvcGFjazEvZW1wdHkudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2OWRlMjkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUNsYXNzVG9Jbm5lci9sb2NhbGx5VXNlZFBhY2thZ2VMb2NhbFRvUHVibGljSW50ZXJmYWNlL2FmdGVyL3BhY2sxL2VtcHR5LnR4dApkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVDbGFzc1RvSW5uZXIvbG9jYWxseVVzZWRQYWNrYWdlTG9jYWxUb1B1YmxpY0ludGVyZmFjZS9hZnRlci9wYWNrMi9BLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUNsYXNzVG9Jbm5lci9sb2NhbGx5VXNlZFBhY2thZ2VMb2NhbFRvUHVibGljSW50ZXJmYWNlL2FmdGVyL3BhY2syL0EuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZmU1NjE4NAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlQ2xhc3NUb0lubmVyL2xvY2FsbHlVc2VkUGFja2FnZUxvY2FsVG9QdWJsaWNJbnRlcmZhY2UvYWZ0ZXIvcGFjazIvQS5qYXZhCkBAIC0wLDAgKzEsNiBAQAorcGFja2FnZSBwYWNrMjsKKworcHVibGljIGludGVyZmFjZSBBIHsKKyAgICBjbGFzcyBDbGFzczEgeworICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlQ2xhc3NUb0lubmVyL2xvY2FsbHlVc2VkUGFja2FnZUxvY2FsVG9QdWJsaWNJbnRlcmZhY2UvYWZ0ZXIvcGFjazIvZW1wdHkudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVDbGFzc1RvSW5uZXIvbG9jYWxseVVzZWRQYWNrYWdlTG9jYWxUb1B1YmxpY0ludGVyZmFjZS9hZnRlci9wYWNrMi9lbXB0eS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY5ZGUyOQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlQ2xhc3NUb0lubmVyL2xvY2FsbHlVc2VkUGFja2FnZUxvY2FsVG9QdWJsaWNJbnRlcmZhY2UvYWZ0ZXIvcGFjazIvZW1wdHkudHh0CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUNsYXNzVG9Jbm5lci9sb2NhbGx5VXNlZFBhY2thZ2VMb2NhbFRvUHVibGljSW50ZXJmYWNlL2JlZm9yZS9wYWNrMS9DbGFzczEuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlQ2xhc3NUb0lubmVyL2xvY2FsbHlVc2VkUGFja2FnZUxvY2FsVG9QdWJsaWNJbnRlcmZhY2UvYmVmb3JlL3BhY2sxL0NsYXNzMS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlmYjQ2NjgKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUNsYXNzVG9Jbm5lci9sb2NhbGx5VXNlZFBhY2thZ2VMb2NhbFRvUHVibGljSW50ZXJmYWNlL2JlZm9yZS9wYWNrMS9DbGFzczEuamF2YQpAQCAtMCwwICsxLDQgQEAKK3BhY2thZ2UgcGFjazE7CisKK2NsYXNzIENsYXNzMSB7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVDbGFzc1RvSW5uZXIvbG9jYWxseVVzZWRQYWNrYWdlTG9jYWxUb1B1YmxpY0ludGVyZmFjZS9iZWZvcmUvcGFjazEvVXNhZ2UuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlQ2xhc3NUb0lubmVyL2xvY2FsbHlVc2VkUGFja2FnZUxvY2FsVG9QdWJsaWNJbnRlcmZhY2UvYmVmb3JlL3BhY2sxL1VzYWdlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDdlOGVkNgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlQ2xhc3NUb0lubmVyL2xvY2FsbHlVc2VkUGFja2FnZUxvY2FsVG9QdWJsaWNJbnRlcmZhY2UvYmVmb3JlL3BhY2sxL1VzYWdlLmphdmEKQEAgLTAsMCArMSw0IEBACitwYWNrYWdlIHBhY2sxOworY2xhc3MgVXNhZ2UgeworICBDbGFzczEgY2wxOworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlQ2xhc3NUb0lubmVyL2xvY2FsbHlVc2VkUGFja2FnZUxvY2FsVG9QdWJsaWNJbnRlcmZhY2UvYmVmb3JlL3BhY2sxL2VtcHR5LnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlQ2xhc3NUb0lubmVyL2xvY2FsbHlVc2VkUGFja2FnZUxvY2FsVG9QdWJsaWNJbnRlcmZhY2UvYmVmb3JlL3BhY2sxL2VtcHR5LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjlkZTI5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVDbGFzc1RvSW5uZXIvbG9jYWxseVVzZWRQYWNrYWdlTG9jYWxUb1B1YmxpY0ludGVyZmFjZS9iZWZvcmUvcGFjazEvZW1wdHkudHh0CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUNsYXNzVG9Jbm5lci9sb2NhbGx5VXNlZFBhY2thZ2VMb2NhbFRvUHVibGljSW50ZXJmYWNlL2JlZm9yZS9wYWNrMi9BLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUNsYXNzVG9Jbm5lci9sb2NhbGx5VXNlZFBhY2thZ2VMb2NhbFRvUHVibGljSW50ZXJmYWNlL2JlZm9yZS9wYWNrMi9BLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWJkNzdiNAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlQ2xhc3NUb0lubmVyL2xvY2FsbHlVc2VkUGFja2FnZUxvY2FsVG9QdWJsaWNJbnRlcmZhY2UvYmVmb3JlL3BhY2syL0EuamF2YQpAQCAtMCwwICsxLDQgQEAKK3BhY2thZ2UgcGFjazI7CisKK3B1YmxpYyBpbnRlcmZhY2UgQSB7Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUNsYXNzVG9Jbm5lci9sb2NhbGx5VXNlZFBhY2thZ2VMb2NhbFRvUHVibGljSW50ZXJmYWNlL2JlZm9yZS9wYWNrMi9lbXB0eS50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUNsYXNzVG9Jbm5lci9sb2NhbGx5VXNlZFBhY2thZ2VMb2NhbFRvUHVibGljSW50ZXJmYWNlL2JlZm9yZS9wYWNrMi9lbXB0eS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY5ZGUyOQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlQ2xhc3NUb0lubmVyL2xvY2FsbHlVc2VkUGFja2FnZUxvY2FsVG9QdWJsaWNJbnRlcmZhY2UvYmVmb3JlL3BhY2syL2VtcHR5LnR4dApkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVDbGFzc1RvSW5uZXIvbW92ZUludG9QYWNrYWdlTG9jYWxDbGFzcy9iZWZvcmUvcGFjazEvQ2xhc3MxLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUNsYXNzVG9Jbm5lci9tb3ZlSW50b1BhY2thZ2VMb2NhbENsYXNzL2JlZm9yZS9wYWNrMS9DbGFzczEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNzc1OGY2Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVDbGFzc1RvSW5uZXIvbW92ZUludG9QYWNrYWdlTG9jYWxDbGFzcy9iZWZvcmUvcGFjazEvQ2xhc3MxLmphdmEKQEAgLTAsMCArMSw0IEBACitwYWNrYWdlIHBhY2sxOworCitwdWJsaWMgY2xhc3MgQ2xhc3MxIHsKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlQ2xhc3NUb0lubmVyL21vdmVJbnRvUGFja2FnZUxvY2FsQ2xhc3MvYmVmb3JlL3BhY2sxL0NsYXNzMi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVDbGFzc1RvSW5uZXIvbW92ZUludG9QYWNrYWdlTG9jYWxDbGFzcy9iZWZvcmUvcGFjazEvQ2xhc3MyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjRjM2Y1YgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlQ2xhc3NUb0lubmVyL21vdmVJbnRvUGFja2FnZUxvY2FsQ2xhc3MvYmVmb3JlL3BhY2sxL0NsYXNzMi5qYXZhCkBAIC0wLDAgKzEsNSBAQAorcGFja2FnZSBwYWNrMTsKKworY2xhc3MgQ2xhc3MyIHsKKyAgIENsYXNzMSBjMTsKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlQ2xhc3NUb0lubmVyL21vdmVJbnRvUGFja2FnZUxvY2FsQ2xhc3MvYmVmb3JlL3BhY2syL0EuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlQ2xhc3NUb0lubmVyL21vdmVJbnRvUGFja2FnZUxvY2FsQ2xhc3MvYmVmb3JlL3BhY2syL0EuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iM2YwZmJlCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVDbGFzc1RvSW5uZXIvbW92ZUludG9QYWNrYWdlTG9jYWxDbGFzcy9iZWZvcmUvcGFjazIvQS5qYXZhCkBAIC0wLDAgKzEsNCBAQAorcGFja2FnZSBwYWNrMjsKKworY2xhc3MgQSB7Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUNsYXNzVG9Jbm5lci9tb3ZlSW50b1ByaXZhdGVJbm5lckNsYXNzL2JlZm9yZS9wYWNrMS9BLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUNsYXNzVG9Jbm5lci9tb3ZlSW50b1ByaXZhdGVJbm5lckNsYXNzL2JlZm9yZS9wYWNrMS9BLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTQyNmMyMAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlQ2xhc3NUb0lubmVyL21vdmVJbnRvUHJpdmF0ZUlubmVyQ2xhc3MvYmVmb3JlL3BhY2sxL0EuamF2YQpAQCAtMCwwICsxLDYgQEAKK3BhY2thZ2UgcGFjazE7CisKK3B1YmxpYyBjbGFzcyBBIHsKKyAgcHJpdmF0ZSBzdGF0aWMgY2xhc3MgUHJpdmF0ZUlubmVyIHsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVDbGFzc1RvSW5uZXIvbW92ZUludG9Qcml2YXRlSW5uZXJDbGFzcy9iZWZvcmUvcGFjazEvQ2xhc3MxLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUNsYXNzVG9Jbm5lci9tb3ZlSW50b1ByaXZhdGVJbm5lckNsYXNzL2JlZm9yZS9wYWNrMS9DbGFzczEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNzc1OGY2Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVDbGFzc1RvSW5uZXIvbW92ZUludG9Qcml2YXRlSW5uZXJDbGFzcy9iZWZvcmUvcGFjazEvQ2xhc3MxLmphdmEKQEAgLTAsMCArMSw0IEBACitwYWNrYWdlIHBhY2sxOworCitwdWJsaWMgY2xhc3MgQ2xhc3MxIHsKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlQ2xhc3NUb0lubmVyL21vdmVJbnRvUHJpdmF0ZUlubmVyQ2xhc3MvYmVmb3JlL3BhY2sxL0NsYXNzMi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVDbGFzc1RvSW5uZXIvbW92ZUludG9Qcml2YXRlSW5uZXJDbGFzcy9iZWZvcmUvcGFjazEvQ2xhc3MyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWY1MGI5NwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlQ2xhc3NUb0lubmVyL21vdmVJbnRvUHJpdmF0ZUlubmVyQ2xhc3MvYmVmb3JlL3BhY2sxL0NsYXNzMi5qYXZhCkBAIC0wLDAgKzEsNSBAQAorcGFja2FnZSBwYWNrMTsKKworcHVibGljIGNsYXNzIENsYXNzMiB7CisgICBDbGFzczEgYzE7Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUNsYXNzVG9Jbm5lci9tb3ZlTXVsdGlwbGUxL2FmdGVyL3BhY2sxL2VtcHR5LnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlQ2xhc3NUb0lubmVyL21vdmVNdWx0aXBsZTEvYWZ0ZXIvcGFjazEvZW1wdHkudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2OWRlMjkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUNsYXNzVG9Jbm5lci9tb3ZlTXVsdGlwbGUxL2FmdGVyL3BhY2sxL2VtcHR5LnR4dApkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVDbGFzc1RvSW5uZXIvbW92ZU11bHRpcGxlMS9hZnRlci9wYWNrMi9BLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUNsYXNzVG9Jbm5lci9tb3ZlTXVsdGlwbGUxL2FmdGVyL3BhY2syL0EuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iM2EwMmFjCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVDbGFzc1RvSW5uZXIvbW92ZU11bHRpcGxlMS9hZnRlci9wYWNrMi9BLmphdmEKQEAgLTAsMCArMSwxMSBAQAorcGFja2FnZSBwYWNrMjsKKworcHVibGljIGNsYXNzIEEgeworICAgIHB1YmxpYyBzdGF0aWMgY2xhc3MgQ2xhc3MxIHsKKyAgICAgIENsYXNzMiBhOworICAgICAgQ2xhc3MyIGI7CisgICAgfQorCisgICAgcHVibGljIHN0YXRpYyBjbGFzcyBDbGFzczIgeworICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlQ2xhc3NUb0lubmVyL21vdmVNdWx0aXBsZTEvYWZ0ZXIvcGFjazIvZW1wdHkudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVDbGFzc1RvSW5uZXIvbW92ZU11bHRpcGxlMS9hZnRlci9wYWNrMi9lbXB0eS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY5ZGUyOQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlQ2xhc3NUb0lubmVyL21vdmVNdWx0aXBsZTEvYWZ0ZXIvcGFjazIvZW1wdHkudHh0CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUNsYXNzVG9Jbm5lci9tb3ZlTXVsdGlwbGUxL2JlZm9yZS9wYWNrMS9DbGFzczEuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlQ2xhc3NUb0lubmVyL21vdmVNdWx0aXBsZTEvYmVmb3JlL3BhY2sxL0NsYXNzMS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIzNDZmYzEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUNsYXNzVG9Jbm5lci9tb3ZlTXVsdGlwbGUxL2JlZm9yZS9wYWNrMS9DbGFzczEuamF2YQpAQCAtMCwwICsxLDYgQEAKK3BhY2thZ2UgcGFjazE7CisKK3B1YmxpYyBjbGFzcyBDbGFzczEgeworICBDbGFzczIgYTsKKyAgQ2xhc3MyIGI7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVDbGFzc1RvSW5uZXIvbW92ZU11bHRpcGxlMS9iZWZvcmUvcGFjazEvQ2xhc3MyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUNsYXNzVG9Jbm5lci9tb3ZlTXVsdGlwbGUxL2JlZm9yZS9wYWNrMS9DbGFzczIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOWRmMWIzCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVDbGFzc1RvSW5uZXIvbW92ZU11bHRpcGxlMS9iZWZvcmUvcGFjazEvQ2xhc3MyLmphdmEKQEAgLTAsMCArMSw0IEBACitwYWNrYWdlIHBhY2sxOworCitwdWJsaWMgY2xhc3MgQ2xhc3MyIHsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUNsYXNzVG9Jbm5lci9tb3ZlTXVsdGlwbGUxL2JlZm9yZS9wYWNrMS9lbXB0eS50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUNsYXNzVG9Jbm5lci9tb3ZlTXVsdGlwbGUxL2JlZm9yZS9wYWNrMS9lbXB0eS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY5ZGUyOQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlQ2xhc3NUb0lubmVyL21vdmVNdWx0aXBsZTEvYmVmb3JlL3BhY2sxL2VtcHR5LnR4dApkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVDbGFzc1RvSW5uZXIvbW92ZU11bHRpcGxlMS9iZWZvcmUvcGFjazIvQS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVDbGFzc1RvSW5uZXIvbW92ZU11bHRpcGxlMS9iZWZvcmUvcGFjazIvQS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUxODg2ZTUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUNsYXNzVG9Jbm5lci9tb3ZlTXVsdGlwbGUxL2JlZm9yZS9wYWNrMi9BLmphdmEKQEAgLTAsMCArMSw0IEBACitwYWNrYWdlIHBhY2syOworCitwdWJsaWMgY2xhc3MgQSB7Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUNsYXNzVG9Jbm5lci9tb3ZlTXVsdGlwbGUxL2JlZm9yZS9wYWNrMi9lbXB0eS50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUNsYXNzVG9Jbm5lci9tb3ZlTXVsdGlwbGUxL2JlZm9yZS9wYWNrMi9lbXB0eS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY5ZGUyOQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlQ2xhc3NUb0lubmVyL21vdmVNdWx0aXBsZTEvYmVmb3JlL3BhY2syL2VtcHR5LnR4dApkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVDbGFzc1RvSW5uZXIvbW92ZU9mUGFja2FnZUxvY2FsQ2xhc3MvYmVmb3JlL3BhY2sxL0NsYXNzMS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVDbGFzc1RvSW5uZXIvbW92ZU9mUGFja2FnZUxvY2FsQ2xhc3MvYmVmb3JlL3BhY2sxL0NsYXNzMS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhkY2U0NDEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUNsYXNzVG9Jbm5lci9tb3ZlT2ZQYWNrYWdlTG9jYWxDbGFzcy9iZWZvcmUvcGFjazEvQ2xhc3MxLmphdmEKQEAgLTAsMCArMSw0IEBACitwYWNrYWdlIHBhY2sxOworCitjbGFzcyBDbGFzczEgeworfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVDbGFzc1RvSW5uZXIvbW92ZU9mUGFja2FnZUxvY2FsQ2xhc3MvYmVmb3JlL3BhY2sxL0NsYXNzMi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVDbGFzc1RvSW5uZXIvbW92ZU9mUGFja2FnZUxvY2FsQ2xhc3MvYmVmb3JlL3BhY2sxL0NsYXNzMi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY0YzNmNWIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUNsYXNzVG9Jbm5lci9tb3ZlT2ZQYWNrYWdlTG9jYWxDbGFzcy9iZWZvcmUvcGFjazEvQ2xhc3MyLmphdmEKQEAgLTAsMCArMSw1IEBACitwYWNrYWdlIHBhY2sxOworCitjbGFzcyBDbGFzczIgeworICAgQ2xhc3MxIGMxOworfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVDbGFzc1RvSW5uZXIvbW92ZU9mUGFja2FnZUxvY2FsQ2xhc3MvYmVmb3JlL3BhY2syL0EuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlQ2xhc3NUb0lubmVyL21vdmVPZlBhY2thZ2VMb2NhbENsYXNzL2JlZm9yZS9wYWNrMi9BLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTE4ODZlNQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlQ2xhc3NUb0lubmVyL21vdmVPZlBhY2thZ2VMb2NhbENsYXNzL2JlZm9yZS9wYWNrMi9BLmphdmEKQEAgLTAsMCArMSw0IEBACitwYWNrYWdlIHBhY2syOworCitwdWJsaWMgY2xhc3MgQSB7Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUNsYXNzVG9Jbm5lci9tb3ZlV2l0aFBhY2thZ2VMb2NhbE1lbWJlci9iZWZvcmUvcGFjazEvQ2xhc3MxLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUNsYXNzVG9Jbm5lci9tb3ZlV2l0aFBhY2thZ2VMb2NhbE1lbWJlci9iZWZvcmUvcGFjazEvQ2xhc3MxLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDQ4MGQ1ZgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlQ2xhc3NUb0lubmVyL21vdmVXaXRoUGFja2FnZUxvY2FsTWVtYmVyL2JlZm9yZS9wYWNrMS9DbGFzczEuamF2YQpAQCAtMCwwICsxLDYgQEAKK3BhY2thZ2UgcGFjazE7CisKK3B1YmxpYyBjbGFzcyBDbGFzczEgeworICB2b2lkIGRvU3R1ZmYoKSB7CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlQ2xhc3NUb0lubmVyL21vdmVXaXRoUGFja2FnZUxvY2FsTWVtYmVyL2JlZm9yZS9wYWNrMS9DbGFzczIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlQ2xhc3NUb0lubmVyL21vdmVXaXRoUGFja2FnZUxvY2FsTWVtYmVyL2JlZm9yZS9wYWNrMS9DbGFzczIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41M2UyNTNiCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVDbGFzc1RvSW5uZXIvbW92ZVdpdGhQYWNrYWdlTG9jYWxNZW1iZXIvYmVmb3JlL3BhY2sxL0NsYXNzMi5qYXZhCkBAIC0wLDAgKzEsOCBAQAorcGFja2FnZSBwYWNrMTsKKworY2xhc3MgQ2xhc3MyIHsKKyAgIHB1YmxpYyB2b2lkIHRlc3QoKSB7CisgICAgIENsYXNzMSBjMSA9IG5ldyBDbGFzczEoKTsKKyAgICAgYzEuZG9TdHVmZigpOworICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVDbGFzc1RvSW5uZXIvbW92ZVdpdGhQYWNrYWdlTG9jYWxNZW1iZXIvYmVmb3JlL3BhY2syL0EuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlQ2xhc3NUb0lubmVyL21vdmVXaXRoUGFja2FnZUxvY2FsTWVtYmVyL2JlZm9yZS9wYWNrMi9BLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTE4ODZlNQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlQ2xhc3NUb0lubmVyL21vdmVXaXRoUGFja2FnZUxvY2FsTWVtYmVyL2JlZm9yZS9wYWNrMi9BLmphdmEKQEAgLTAsMCArMSw0IEBACitwYWNrYWdlIHBhY2syOworCitwdWJsaWMgY2xhc3MgQSB7Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUNsYXNzVG9Jbm5lci9ub25KYXZhL2FmdGVyL3BhY2sxL0EuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlQ2xhc3NUb0lubmVyL25vbkphdmEvYWZ0ZXIvcGFjazEvQS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY0OTc0YzAKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUNsYXNzVG9Jbm5lci9ub25KYXZhL2FmdGVyL3BhY2sxL0EuamF2YQpAQCAtMCwwICsxLDYgQEAKK3BhY2thZ2UgcGFjazE7CisKK3B1YmxpYyBjbGFzcyBBIHsKKyAgICBwdWJsaWMgc3RhdGljIGNsYXNzIENsYXNzMSB7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlQ2xhc3NUb0lubmVyL25vbkphdmEvYWZ0ZXIvcGFjazEvZW1wdHkudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVDbGFzc1RvSW5uZXIvbm9uSmF2YS9hZnRlci9wYWNrMS9lbXB0eS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY5ZGUyOQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlQ2xhc3NUb0lubmVyL25vbkphdmEvYWZ0ZXIvcGFjazEvZW1wdHkudHh0CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUNsYXNzVG9Jbm5lci9ub25KYXZhL2FmdGVyL3FxcS50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUNsYXNzVG9Jbm5lci9ub25KYXZhL2FmdGVyL3FxcS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzExYzliOQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlQ2xhc3NUb0lubmVyL25vbkphdmEvYWZ0ZXIvcXFxLnR4dApAQCAtMCwwICsxLDMgQEAKK3BhY2sxLkEuQ2xhc3MxCitDbGFzczEKK3BhY2sxLkNsYXNzMWEKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlQ2xhc3NUb0lubmVyL25vbkphdmEvYmVmb3JlL3BhY2sxL0EuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlQ2xhc3NUb0lubmVyL25vbkphdmEvYmVmb3JlL3BhY2sxL0EuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NmZjNzhmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVDbGFzc1RvSW5uZXIvbm9uSmF2YS9iZWZvcmUvcGFjazEvQS5qYXZhCkBAIC0wLDAgKzEsNCBAQAorcGFja2FnZSBwYWNrMTsKKworcHVibGljIGNsYXNzIEEgeworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlQ2xhc3NUb0lubmVyL25vbkphdmEvYmVmb3JlL3BhY2sxL0NsYXNzMS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVDbGFzc1RvSW5uZXIvbm9uSmF2YS9iZWZvcmUvcGFjazEvQ2xhc3MxLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjMxZmUwNgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlQ2xhc3NUb0lubmVyL25vbkphdmEvYmVmb3JlL3BhY2sxL0NsYXNzMS5qYXZhCkBAIC0wLDAgKzEsNCBAQAorcGFja2FnZSBwYWNrMTsKKworcHVibGljIGNsYXNzIENsYXNzMSB7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVDbGFzc1RvSW5uZXIvbm9uSmF2YS9iZWZvcmUvcGFjazEvZW1wdHkudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVDbGFzc1RvSW5uZXIvbm9uSmF2YS9iZWZvcmUvcGFjazEvZW1wdHkudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2OWRlMjkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUNsYXNzVG9Jbm5lci9ub25KYXZhL2JlZm9yZS9wYWNrMS9lbXB0eS50eHQKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlQ2xhc3NUb0lubmVyL25vbkphdmEvYmVmb3JlL3FxcS50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUNsYXNzVG9Jbm5lci9ub25KYXZhL2JlZm9yZS9xcXEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ2MGRjN2UKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUNsYXNzVG9Jbm5lci9ub25KYXZhL2JlZm9yZS9xcXEudHh0CkBAIC0wLDAgKzEsMyBAQAorcGFjazEuQ2xhc3MxCitDbGFzczEKK3BhY2sxLkNsYXNzMWEKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlQ2xhc3NUb0lubmVyL3BhY2thZ2VMb2NhbENsYXNzL2JlZm9yZS9wYWNrMS9DbGFzczEuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlQ2xhc3NUb0lubmVyL3BhY2thZ2VMb2NhbENsYXNzL2JlZm9yZS9wYWNrMS9DbGFzczEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OTg5OWY1Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVDbGFzc1RvSW5uZXIvcGFja2FnZUxvY2FsQ2xhc3MvYmVmb3JlL3BhY2sxL0NsYXNzMS5qYXZhCkBAIC0wLDAgKzEsNSBAQAorcGFja2FnZSBwYWNrMTsKKworcHVibGljIGNsYXNzIENsYXNzMSB7CisgIHByaXZhdGUgQ2xhc3MyIGMyOworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlQ2xhc3NUb0lubmVyL3BhY2thZ2VMb2NhbENsYXNzL2JlZm9yZS9wYWNrMS9DbGFzczIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlQ2xhc3NUb0lubmVyL3BhY2thZ2VMb2NhbENsYXNzL2JlZm9yZS9wYWNrMS9DbGFzczIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOWMxMjAyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVDbGFzc1RvSW5uZXIvcGFja2FnZUxvY2FsQ2xhc3MvYmVmb3JlL3BhY2sxL0NsYXNzMi5qYXZhCkBAIC0wLDAgKzEsNCBAQAorcGFja2FnZSBwYWNrMTsKKworY2xhc3MgQ2xhc3MyIHsKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlQ2xhc3NUb0lubmVyL3BhY2thZ2VMb2NhbENsYXNzL2JlZm9yZS9wYWNrMi9BLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUNsYXNzVG9Jbm5lci9wYWNrYWdlTG9jYWxDbGFzcy9iZWZvcmUvcGFjazIvQS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUxODg2ZTUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUNsYXNzVG9Jbm5lci9wYWNrYWdlTG9jYWxDbGFzcy9iZWZvcmUvcGFjazIvQS5qYXZhCkBAIC0wLDAgKzEsNCBAQAorcGFja2FnZSBwYWNrMjsKKworcHVibGljIGNsYXNzIEEgeworfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVDbGFzc1RvSW5uZXIvcmVmVG9Db25zdHJ1Y3Rvci9hZnRlci9wYWNrMS9lbXB0eS50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUNsYXNzVG9Jbm5lci9yZWZUb0NvbnN0cnVjdG9yL2FmdGVyL3BhY2sxL2VtcHR5LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjlkZTI5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVDbGFzc1RvSW5uZXIvcmVmVG9Db25zdHJ1Y3Rvci9hZnRlci9wYWNrMS9lbXB0eS50eHQKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlQ2xhc3NUb0lubmVyL3JlZlRvQ29uc3RydWN0b3IvYWZ0ZXIvcGFjazIvQS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVDbGFzc1RvSW5uZXIvcmVmVG9Db25zdHJ1Y3Rvci9hZnRlci9wYWNrMi9BLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjJhNzZlOAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlQ2xhc3NUb0lubmVyL3JlZlRvQ29uc3RydWN0b3IvYWZ0ZXIvcGFjazIvQS5qYXZhCkBAIC0wLDAgKzEsOSBAQAorcGFja2FnZSBwYWNrMjsKKworcHVibGljIGNsYXNzIEEgeworICAgIHB1YmxpYyBzdGF0aWMgY2xhc3MgQ2xhc3MxIHsKKyAgICAgICAgcHVibGljIHN0YXRpYyBDbGFzczEgY3JlYXRlSW5zdGFuY2UoKSB7CisgICAgICAgICAgICByZXR1cm4gbmV3IENsYXNzMSgpOworICAgICAgICB9CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVDbGFzc1RvSW5uZXIvcmVmVG9Db25zdHJ1Y3Rvci9hZnRlci9wYWNrMi9lbXB0eS50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUNsYXNzVG9Jbm5lci9yZWZUb0NvbnN0cnVjdG9yL2FmdGVyL3BhY2syL2VtcHR5LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjlkZTI5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVDbGFzc1RvSW5uZXIvcmVmVG9Db25zdHJ1Y3Rvci9hZnRlci9wYWNrMi9lbXB0eS50eHQKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlQ2xhc3NUb0lubmVyL3JlZlRvQ29uc3RydWN0b3IvYmVmb3JlL3BhY2sxL0NsYXNzMS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVDbGFzc1RvSW5uZXIvcmVmVG9Db25zdHJ1Y3Rvci9iZWZvcmUvcGFjazEvQ2xhc3MxLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzRiYTgwOQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlQ2xhc3NUb0lubmVyL3JlZlRvQ29uc3RydWN0b3IvYmVmb3JlL3BhY2sxL0NsYXNzMS5qYXZhCkBAIC0wLDAgKzEsNyBAQAorcGFja2FnZSBwYWNrMTsKKworcHVibGljIGNsYXNzIENsYXNzMSB7CisgICAgcHVibGljIHN0YXRpYyBDbGFzczEgY3JlYXRlSW5zdGFuY2UoKSB7CisgICAgICAgIHJldHVybiBuZXcgQ2xhc3MxKCk7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlQ2xhc3NUb0lubmVyL3JlZlRvQ29uc3RydWN0b3IvYmVmb3JlL3BhY2sxL2VtcHR5LnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlQ2xhc3NUb0lubmVyL3JlZlRvQ29uc3RydWN0b3IvYmVmb3JlL3BhY2sxL2VtcHR5LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjlkZTI5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVDbGFzc1RvSW5uZXIvcmVmVG9Db25zdHJ1Y3Rvci9iZWZvcmUvcGFjazEvZW1wdHkudHh0CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUNsYXNzVG9Jbm5lci9yZWZUb0NvbnN0cnVjdG9yL2JlZm9yZS9wYWNrMi9BLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUNsYXNzVG9Jbm5lci9yZWZUb0NvbnN0cnVjdG9yL2JlZm9yZS9wYWNrMi9BLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTE4ODZlNQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlQ2xhc3NUb0lubmVyL3JlZlRvQ29uc3RydWN0b3IvYmVmb3JlL3BhY2syL0EuamF2YQpAQCAtMCwwICsxLDQgQEAKK3BhY2thZ2UgcGFjazI7CisKK3B1YmxpYyBjbGFzcyBBIHsKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlQ2xhc3NUb0lubmVyL3JlZlRvQ29uc3RydWN0b3IvYmVmb3JlL3BhY2syL2VtcHR5LnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlQ2xhc3NUb0lubmVyL3JlZlRvQ29uc3RydWN0b3IvYmVmb3JlL3BhY2syL2VtcHR5LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjlkZTI5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVDbGFzc1RvSW5uZXIvcmVmVG9Db25zdHJ1Y3Rvci9iZWZvcmUvcGFjazIvZW1wdHkudHh0CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUNsYXNzVG9Jbm5lci9yZWZUb0lubmVyL2FmdGVyL3BhY2sxL2VtcHR5LnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlQ2xhc3NUb0lubmVyL3JlZlRvSW5uZXIvYWZ0ZXIvcGFjazEvZW1wdHkudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2OWRlMjkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUNsYXNzVG9Jbm5lci9yZWZUb0lubmVyL2FmdGVyL3BhY2sxL2VtcHR5LnR4dApkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVDbGFzc1RvSW5uZXIvcmVmVG9Jbm5lci9hZnRlci9wYWNrMi9BLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUNsYXNzVG9Jbm5lci9yZWZUb0lubmVyL2FmdGVyL3BhY2syL0EuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZWJmYTY3Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVDbGFzc1RvSW5uZXIvcmVmVG9Jbm5lci9hZnRlci9wYWNrMi9BLmphdmEKQEAgLTAsMCArMSwxMSBAQAorcGFja2FnZSBwYWNrMjsKKworcHVibGljIGNsYXNzIEEgeworICAgIHB1YmxpYyBzdGF0aWMgY2xhc3MgQ2xhc3MxIHsKKyAgICAgICAgcHJpdmF0ZSBjbGFzcyBJbm5lciB7CisKKyAgICAgICAgfQorCisgICAgICAgIHByaXZhdGUgSW5uZXIgaTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUNsYXNzVG9Jbm5lci9yZWZUb0lubmVyL2FmdGVyL3BhY2syL2VtcHR5LnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlQ2xhc3NUb0lubmVyL3JlZlRvSW5uZXIvYWZ0ZXIvcGFjazIvZW1wdHkudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2OWRlMjkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUNsYXNzVG9Jbm5lci9yZWZUb0lubmVyL2FmdGVyL3BhY2syL2VtcHR5LnR4dApkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVDbGFzc1RvSW5uZXIvcmVmVG9Jbm5lci9iZWZvcmUvcGFjazEvQ2xhc3MxLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUNsYXNzVG9Jbm5lci9yZWZUb0lubmVyL2JlZm9yZS9wYWNrMS9DbGFzczEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MzFjZGI4Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVDbGFzc1RvSW5uZXIvcmVmVG9Jbm5lci9iZWZvcmUvcGFjazEvQ2xhc3MxLmphdmEKQEAgLTAsMCArMSw5IEBACitwYWNrYWdlIHBhY2sxOworCitwdWJsaWMgY2xhc3MgQ2xhc3MxIHsKKyAgICBwcml2YXRlIGNsYXNzIElubmVyIHsKKworICAgIH0KKworICAgIHByaXZhdGUgSW5uZXIgaTsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUNsYXNzVG9Jbm5lci9yZWZUb0lubmVyL2JlZm9yZS9wYWNrMS9lbXB0eS50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUNsYXNzVG9Jbm5lci9yZWZUb0lubmVyL2JlZm9yZS9wYWNrMS9lbXB0eS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY5ZGUyOQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlQ2xhc3NUb0lubmVyL3JlZlRvSW5uZXIvYmVmb3JlL3BhY2sxL2VtcHR5LnR4dApkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVDbGFzc1RvSW5uZXIvcmVmVG9Jbm5lci9iZWZvcmUvcGFjazIvQS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVDbGFzc1RvSW5uZXIvcmVmVG9Jbm5lci9iZWZvcmUvcGFjazIvQS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUxODg2ZTUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUNsYXNzVG9Jbm5lci9yZWZUb0lubmVyL2JlZm9yZS9wYWNrMi9BLmphdmEKQEAgLTAsMCArMSw0IEBACitwYWNrYWdlIHBhY2syOworCitwdWJsaWMgY2xhc3MgQSB7Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUNsYXNzVG9Jbm5lci9yZWZUb0lubmVyL2JlZm9yZS9wYWNrMi9lbXB0eS50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUNsYXNzVG9Jbm5lci9yZWZUb0lubmVyL2JlZm9yZS9wYWNrMi9lbXB0eS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY5ZGUyOQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlQ2xhc3NUb0lubmVyL3JlZlRvSW5uZXIvYmVmb3JlL3BhY2syL2VtcHR5LnR4dApkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVDbGFzc1RvSW5uZXIvc2Vjb25kYXJ5Q2xhc3MvYWZ0ZXIvcGFjazEvQ2xhc3MxLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUNsYXNzVG9Jbm5lci9zZWNvbmRhcnlDbGFzcy9hZnRlci9wYWNrMS9DbGFzczEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZjUzODI1Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVDbGFzc1RvSW5uZXIvc2Vjb25kYXJ5Q2xhc3MvYWZ0ZXIvcGFjazEvQ2xhc3MxLmphdmEKQEAgLTAsMCArMSw1IEBACitwYWNrYWdlIHBhY2sxOworCitwdWJsaWMgY2xhc3MgQ2xhc3MxIHsKK30KKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVDbGFzc1RvSW5uZXIvc2Vjb25kYXJ5Q2xhc3MvYWZ0ZXIvcGFjazEvVXNlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVDbGFzc1RvSW5uZXIvc2Vjb25kYXJ5Q2xhc3MvYWZ0ZXIvcGFjazEvVXNlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg3OWZmZjcKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUNsYXNzVG9Jbm5lci9zZWNvbmRhcnlDbGFzcy9hZnRlci9wYWNrMS9Vc2VyLmphdmEKQEAgLTAsMCArMSwxMCBAQAorcGFja2FnZSBwYWNrMTsKKworcHVibGljIGNsYXNzIFVzZXIgeworICBDbGFzczEgY2xhc3MxOworICBDbGFzczIgY2xhc3MyOworCisgICAgc3RhdGljIGNsYXNzIENsYXNzMiB7CisKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVDbGFzc1RvSW5uZXIvc2Vjb25kYXJ5Q2xhc3MvYmVmb3JlL3BhY2sxL0NsYXNzMS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVDbGFzc1RvSW5uZXIvc2Vjb25kYXJ5Q2xhc3MvYmVmb3JlL3BhY2sxL0NsYXNzMS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNiZTBkMDAKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUNsYXNzVG9Jbm5lci9zZWNvbmRhcnlDbGFzcy9iZWZvcmUvcGFjazEvQ2xhc3MxLmphdmEKQEAgLTAsMCArMSw4IEBACitwYWNrYWdlIHBhY2sxOworCitwdWJsaWMgY2xhc3MgQ2xhc3MxIHsKK30KKworY2xhc3MgQ2xhc3MyIHsKKworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlQ2xhc3NUb0lubmVyL3NlY29uZGFyeUNsYXNzL2JlZm9yZS9wYWNrMS9Vc2VyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUNsYXNzVG9Jbm5lci9zZWNvbmRhcnlDbGFzcy9iZWZvcmUvcGFjazEvVXNlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVlNDYxYWQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUNsYXNzVG9Jbm5lci9zZWNvbmRhcnlDbGFzcy9iZWZvcmUvcGFjazEvVXNlci5qYXZhCkBAIC0wLDAgKzEsNiBAQAorcGFja2FnZSBwYWNrMTsKKworcHVibGljIGNsYXNzIFVzZXIgeworICBDbGFzczEgY2xhc3MxOworICBDbGFzczIgY2xhc3MyOworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlQ2xhc3NUb0lubmVyL3NpbXVsdGFuZW91c01vdmUvYWZ0ZXIvcGFjazAvZW1wdHkudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVDbGFzc1RvSW5uZXIvc2ltdWx0YW5lb3VzTW92ZS9hZnRlci9wYWNrMC9lbXB0eS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY5ZGUyOQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlQ2xhc3NUb0lubmVyL3NpbXVsdGFuZW91c01vdmUvYWZ0ZXIvcGFjazAvZW1wdHkudHh0CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUNsYXNzVG9Jbm5lci9zaW11bHRhbmVvdXNNb3ZlL2FmdGVyL3BhY2sxL2VtcHR5LnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlQ2xhc3NUb0lubmVyL3NpbXVsdGFuZW91c01vdmUvYWZ0ZXIvcGFjazEvZW1wdHkudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2OWRlMjkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUNsYXNzVG9Jbm5lci9zaW11bHRhbmVvdXNNb3ZlL2FmdGVyL3BhY2sxL2VtcHR5LnR4dApkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVDbGFzc1RvSW5uZXIvc2ltdWx0YW5lb3VzTW92ZS9hZnRlci9wYWNrMi9BLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUNsYXNzVG9Jbm5lci9zaW11bHRhbmVvdXNNb3ZlL2FmdGVyL3BhY2syL0EuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYjNmMWY5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVDbGFzc1RvSW5uZXIvc2ltdWx0YW5lb3VzTW92ZS9hZnRlci9wYWNrMi9BLmphdmEKQEAgLTAsMCArMSwxNyBAQAorcGFja2FnZSBwYWNrMjsKKworcHVibGljIGNsYXNzIEEgeworICAgIC8qKgorICAgICAqIHBhY2syLkEuQ2xhc3MwCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBjbGFzcyBDbGFzczEgeworICAgICAgQ2xhc3MwIGNsMDsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBwYWNrMi5BLkNsYXNzMQorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgY2xhc3MgQ2xhc3MwIHsKKyAgICAgIENsYXNzMSBjbDE7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVDbGFzc1RvSW5uZXIvc2ltdWx0YW5lb3VzTW92ZS9hZnRlci9wYWNrMi9lbXB0eS50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUNsYXNzVG9Jbm5lci9zaW11bHRhbmVvdXNNb3ZlL2FmdGVyL3BhY2syL2VtcHR5LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjlkZTI5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVDbGFzc1RvSW5uZXIvc2ltdWx0YW5lb3VzTW92ZS9hZnRlci9wYWNrMi9lbXB0eS50eHQKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlQ2xhc3NUb0lubmVyL3NpbXVsdGFuZW91c01vdmUvYWZ0ZXIvcGFja1VzZXIvQ2xhc3MyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUNsYXNzVG9Jbm5lci9zaW11bHRhbmVvdXNNb3ZlL2FmdGVyL3BhY2tVc2VyL0NsYXNzMi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIyOWU1YzYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUNsYXNzVG9Jbm5lci9zaW11bHRhbmVvdXNNb3ZlL2FmdGVyL3BhY2tVc2VyL0NsYXNzMi5qYXZhCkBAIC0wLDAgKzEsMTIgQEAKK3BhY2thZ2UgcGFja1VzZXI7CisKK2ltcG9ydCBwYWNrMi5BOworCisvKioKKyAqIHBhY2syLkEuQ2xhc3MxCisgKiBwYWNrMi5BLkNsYXNzMAorICovCitwdWJsaWMgY2xhc3MgQ2xhc3MyIHsKKyAgQS5DbGFzczEgbXlDbGFzczE7CisgIEEuQ2xhc3MwIG15Q2xhc3MwOworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlQ2xhc3NUb0lubmVyL3NpbXVsdGFuZW91c01vdmUvYmVmb3JlL3BhY2swL0NsYXNzMC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVDbGFzc1RvSW5uZXIvc2ltdWx0YW5lb3VzTW92ZS9iZWZvcmUvcGFjazAvQ2xhc3MwLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmE0YmQ0OAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlQ2xhc3NUb0lubmVyL3NpbXVsdGFuZW91c01vdmUvYmVmb3JlL3BhY2swL0NsYXNzMC5qYXZhCkBAIC0wLDAgKzEsMTAgQEAKK3BhY2thZ2UgcGFjazA7CisKK2ltcG9ydCBwYWNrMS4qOworCisvKioKKyAqIHBhY2sxLkNsYXNzMQorICovCitwdWJsaWMgY2xhc3MgQ2xhc3MwIHsKKyAgQ2xhc3MxIGNsMTsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUNsYXNzVG9Jbm5lci9zaW11bHRhbmVvdXNNb3ZlL2JlZm9yZS9wYWNrMC9lbXB0eS50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUNsYXNzVG9Jbm5lci9zaW11bHRhbmVvdXNNb3ZlL2JlZm9yZS9wYWNrMC9lbXB0eS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY5ZGUyOQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlQ2xhc3NUb0lubmVyL3NpbXVsdGFuZW91c01vdmUvYmVmb3JlL3BhY2swL2VtcHR5LnR4dApkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVDbGFzc1RvSW5uZXIvc2ltdWx0YW5lb3VzTW92ZS9iZWZvcmUvcGFjazEvQ2xhc3MxLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUNsYXNzVG9Jbm5lci9zaW11bHRhbmVvdXNNb3ZlL2JlZm9yZS9wYWNrMS9DbGFzczEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNjU1NTU5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVDbGFzc1RvSW5uZXIvc2ltdWx0YW5lb3VzTW92ZS9iZWZvcmUvcGFjazEvQ2xhc3MxLmphdmEKQEAgLTAsMCArMSwxMCBAQAorcGFja2FnZSBwYWNrMTsKKworaW1wb3J0IHBhY2swLio7CisKKy8qKgorICogcGFjazAuQ2xhc3MwCisgKi8KK3B1YmxpYyBjbGFzcyBDbGFzczEgeworICBDbGFzczAgY2wwOworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlQ2xhc3NUb0lubmVyL3NpbXVsdGFuZW91c01vdmUvYmVmb3JlL3BhY2sxL2VtcHR5LnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlQ2xhc3NUb0lubmVyL3NpbXVsdGFuZW91c01vdmUvYmVmb3JlL3BhY2sxL2VtcHR5LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjlkZTI5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVDbGFzc1RvSW5uZXIvc2ltdWx0YW5lb3VzTW92ZS9iZWZvcmUvcGFjazEvZW1wdHkudHh0CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUNsYXNzVG9Jbm5lci9zaW11bHRhbmVvdXNNb3ZlL2JlZm9yZS9wYWNrMi9BLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUNsYXNzVG9Jbm5lci9zaW11bHRhbmVvdXNNb3ZlL2JlZm9yZS9wYWNrMi9BLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTE4ODZlNQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlQ2xhc3NUb0lubmVyL3NpbXVsdGFuZW91c01vdmUvYmVmb3JlL3BhY2syL0EuamF2YQpAQCAtMCwwICsxLDQgQEAKK3BhY2thZ2UgcGFjazI7CisKK3B1YmxpYyBjbGFzcyBBIHsKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlQ2xhc3NUb0lubmVyL3NpbXVsdGFuZW91c01vdmUvYmVmb3JlL3BhY2syL2VtcHR5LnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlQ2xhc3NUb0lubmVyL3NpbXVsdGFuZW91c01vdmUvYmVmb3JlL3BhY2syL2VtcHR5LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjlkZTI5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVDbGFzc1RvSW5uZXIvc2ltdWx0YW5lb3VzTW92ZS9iZWZvcmUvcGFjazIvZW1wdHkudHh0CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUNsYXNzVG9Jbm5lci9zaW11bHRhbmVvdXNNb3ZlL2JlZm9yZS9wYWNrVXNlci9DbGFzczIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlQ2xhc3NUb0lubmVyL3NpbXVsdGFuZW91c01vdmUvYmVmb3JlL3BhY2tVc2VyL0NsYXNzMi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM2Zjc2YzIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUNsYXNzVG9Jbm5lci9zaW11bHRhbmVvdXNNb3ZlL2JlZm9yZS9wYWNrVXNlci9DbGFzczIuamF2YQpAQCAtMCwwICsxLDEzIEBACitwYWNrYWdlIHBhY2tVc2VyOworCitpbXBvcnQgcGFjazEuQ2xhc3MxOworaW1wb3J0IHBhY2swLkNsYXNzMDsKKworLyoqCisgKiBwYWNrMS5DbGFzczEKKyAqIHBhY2swLkNsYXNzMAorICovCitwdWJsaWMgY2xhc3MgQ2xhc3MyIHsKKyAgQ2xhc3MxIG15Q2xhc3MxOworICBDbGFzczAgbXlDbGFzczA7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVDbGFzc1RvSW5uZXIvc3RyaW5nc0FuZENvbW1lbnRzL2FmdGVyL0NsaWVudC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVDbGFzc1RvSW5uZXIvc3RyaW5nc0FuZENvbW1lbnRzL2FmdGVyL0NsaWVudC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEyNTBhNTQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUNsYXNzVG9Jbm5lci9zdHJpbmdzQW5kQ29tbWVudHMvYWZ0ZXIvQ2xpZW50LmphdmEKQEAgLTAsMCArMSw2IEBACitwdWJsaWMgY2xhc3MgQ2xpZW50IHsKKyAgU3RyaW5nIHMgPSAicGFjazEuQS5DbGFzczEiOworICAvLyBwYWNrMS5BLkNsYXNzMQorICAvLyBhcGFjazEuQ2xhc3MxCisgIC8vIENsYXNzMQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlQ2xhc3NUb0lubmVyL3N0cmluZ3NBbmRDb21tZW50cy9hZnRlci9wYWNrMS9BLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUNsYXNzVG9Jbm5lci9zdHJpbmdzQW5kQ29tbWVudHMvYWZ0ZXIvcGFjazEvQS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY0OTc0YzAKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUNsYXNzVG9Jbm5lci9zdHJpbmdzQW5kQ29tbWVudHMvYWZ0ZXIvcGFjazEvQS5qYXZhCkBAIC0wLDAgKzEsNiBAQAorcGFja2FnZSBwYWNrMTsKKworcHVibGljIGNsYXNzIEEgeworICAgIHB1YmxpYyBzdGF0aWMgY2xhc3MgQ2xhc3MxIHsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVDbGFzc1RvSW5uZXIvc3RyaW5nc0FuZENvbW1lbnRzL2FmdGVyL3BhY2sxL2VtcHR5LnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlQ2xhc3NUb0lubmVyL3N0cmluZ3NBbmRDb21tZW50cy9hZnRlci9wYWNrMS9lbXB0eS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY5ZGUyOQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlQ2xhc3NUb0lubmVyL3N0cmluZ3NBbmRDb21tZW50cy9hZnRlci9wYWNrMS9lbXB0eS50eHQKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlQ2xhc3NUb0lubmVyL3N0cmluZ3NBbmRDb21tZW50cy9iZWZvcmUvQ2xpZW50LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUNsYXNzVG9Jbm5lci9zdHJpbmdzQW5kQ29tbWVudHMvYmVmb3JlL0NsaWVudC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg1YTcyMzIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUNsYXNzVG9Jbm5lci9zdHJpbmdzQW5kQ29tbWVudHMvYmVmb3JlL0NsaWVudC5qYXZhCkBAIC0wLDAgKzEsNiBAQAorcHVibGljIGNsYXNzIENsaWVudCB7CisgIFN0cmluZyBzID0gInBhY2sxLkNsYXNzMSI7CisgIC8vIHBhY2sxLkNsYXNzMQorICAvLyBhcGFjazEuQ2xhc3MxCisgIC8vIENsYXNzMQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlQ2xhc3NUb0lubmVyL3N0cmluZ3NBbmRDb21tZW50cy9iZWZvcmUvcGFjazEvQS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVDbGFzc1RvSW5uZXIvc3RyaW5nc0FuZENvbW1lbnRzL2JlZm9yZS9wYWNrMS9BLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDZmYzc4ZgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlQ2xhc3NUb0lubmVyL3N0cmluZ3NBbmRDb21tZW50cy9iZWZvcmUvcGFjazEvQS5qYXZhCkBAIC0wLDAgKzEsNCBAQAorcGFja2FnZSBwYWNrMTsKKworcHVibGljIGNsYXNzIEEgeworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlQ2xhc3NUb0lubmVyL3N0cmluZ3NBbmRDb21tZW50cy9iZWZvcmUvcGFjazEvQ2xhc3MxLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUNsYXNzVG9Jbm5lci9zdHJpbmdzQW5kQ29tbWVudHMvYmVmb3JlL3BhY2sxL0NsYXNzMS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIzMWZlMDYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUNsYXNzVG9Jbm5lci9zdHJpbmdzQW5kQ29tbWVudHMvYmVmb3JlL3BhY2sxL0NsYXNzMS5qYXZhCkBAIC0wLDAgKzEsNCBAQAorcGFja2FnZSBwYWNrMTsKKworcHVibGljIGNsYXNzIENsYXNzMSB7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVDbGFzc1RvSW5uZXIvc3RyaW5nc0FuZENvbW1lbnRzL2JlZm9yZS9wYWNrMS9lbXB0eS50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUNsYXNzVG9Jbm5lci9zdHJpbmdzQW5kQ29tbWVudHMvYmVmb3JlL3BhY2sxL2VtcHR5LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjlkZTI5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVDbGFzc1RvSW5uZXIvc3RyaW5nc0FuZENvbW1lbnRzL2JlZm9yZS9wYWNrMS9lbXB0eS50eHQKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlQ2xhc3NUb0lubmVyL3N0cmluZ3NBbmRDb21tZW50czIvYWZ0ZXIvcGFjazEvQS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVDbGFzc1RvSW5uZXIvc3RyaW5nc0FuZENvbW1lbnRzMi9hZnRlci9wYWNrMS9BLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGQ0Y2NhYQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlQ2xhc3NUb0lubmVyL3N0cmluZ3NBbmRDb21tZW50czIvYWZ0ZXIvcGFjazEvQS5qYXZhCkBAIC0wLDAgKzEsNyBAQAorcGFja2FnZSBwYWNrMTsKKworcHVibGljIGNsYXNzIEEgeworICAgIHB1YmxpYyBzdGF0aWMgY2xhc3MgQ2xhc3MxIHsKKyAgICAgIFN0cmluZyBzID0gInBhY2sxLkEuQ2xhc3MxIjsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVDbGFzc1RvSW5uZXIvc3RyaW5nc0FuZENvbW1lbnRzMi9hZnRlci9wYWNrMS9lbXB0eS50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUNsYXNzVG9Jbm5lci9zdHJpbmdzQW5kQ29tbWVudHMyL2FmdGVyL3BhY2sxL2VtcHR5LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjlkZTI5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVDbGFzc1RvSW5uZXIvc3RyaW5nc0FuZENvbW1lbnRzMi9hZnRlci9wYWNrMS9lbXB0eS50eHQKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlQ2xhc3NUb0lubmVyL3N0cmluZ3NBbmRDb21tZW50czIvYmVmb3JlL3BhY2sxL0EuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlQ2xhc3NUb0lubmVyL3N0cmluZ3NBbmRDb21tZW50czIvYmVmb3JlL3BhY2sxL0EuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NmZjNzhmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVDbGFzc1RvSW5uZXIvc3RyaW5nc0FuZENvbW1lbnRzMi9iZWZvcmUvcGFjazEvQS5qYXZhCkBAIC0wLDAgKzEsNCBAQAorcGFja2FnZSBwYWNrMTsKKworcHVibGljIGNsYXNzIEEgeworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlQ2xhc3NUb0lubmVyL3N0cmluZ3NBbmRDb21tZW50czIvYmVmb3JlL3BhY2sxL0NsYXNzMS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVDbGFzc1RvSW5uZXIvc3RyaW5nc0FuZENvbW1lbnRzMi9iZWZvcmUvcGFjazEvQ2xhc3MxLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTJmOTRmZAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlQ2xhc3NUb0lubmVyL3N0cmluZ3NBbmRDb21tZW50czIvYmVmb3JlL3BhY2sxL0NsYXNzMS5qYXZhCkBAIC0wLDAgKzEsNSBAQAorcGFja2FnZSBwYWNrMTsKKworcHVibGljIGNsYXNzIENsYXNzMSB7CisgIFN0cmluZyBzID0gInBhY2sxLkNsYXNzMSI7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVDbGFzc1RvSW5uZXIvc3RyaW5nc0FuZENvbW1lbnRzMi9iZWZvcmUvcGFjazEvZW1wdHkudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVDbGFzc1RvSW5uZXIvc3RyaW5nc0FuZENvbW1lbnRzMi9iZWZvcmUvcGFjazEvZW1wdHkudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2OWRlMjkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUNsYXNzVG9Jbm5lci9zdHJpbmdzQW5kQ29tbWVudHMyL2JlZm9yZS9wYWNrMS9lbXB0eS50eHQKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlSW5uZXIvY29uc3RydWN0b3JWaXNpYmlsaXR5L2FmdGVyL3AvQS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVJbm5lci9jb25zdHJ1Y3RvclZpc2liaWxpdHkvYWZ0ZXIvcC9BLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWRkMjhjMAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlSW5uZXIvY29uc3RydWN0b3JWaXNpYmlsaXR5L2FmdGVyL3AvQS5qYXZhCkBAIC0wLDAgKzEsOCBAQAorcGFja2FnZSBwOworCitjbGFzcyBBIHsKKyAgICBwdWJsaWMgdm9pZCB0ZXN0KCkgeworICAgICAgICBCIGIgPSBuZXcgQigpOworICAgIH0KKworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlSW5uZXIvY29uc3RydWN0b3JWaXNpYmlsaXR5L2FmdGVyL3AvQi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVJbm5lci9jb25zdHJ1Y3RvclZpc2liaWxpdHkvYWZ0ZXIvcC9CLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2ZlZDMyOTEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUlubmVyL2NvbnN0cnVjdG9yVmlzaWJpbGl0eS9hZnRlci9wL0IuamF2YQpAQCAtMCwwICsxLDcgQEAKK3BhY2thZ2UgcDsKKworY2xhc3MgQiB7CisgICAgQigpIHsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDb25zdHJ1Y3RvciIpOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUlubmVyL2NvbnN0cnVjdG9yVmlzaWJpbGl0eS9iZWZvcmUvcC9BLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUlubmVyL2NvbnN0cnVjdG9yVmlzaWJpbGl0eS9iZWZvcmUvcC9BLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGRmM2ViYwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlSW5uZXIvY29uc3RydWN0b3JWaXNpYmlsaXR5L2JlZm9yZS9wL0EuamF2YQpAQCAtMCwwICsxLDEzIEBACitwYWNrYWdlIHA7CisKK2NsYXNzIEEgeworICAgIHB1YmxpYyB2b2lkIHRlc3QoKSB7CisgICAgICAgIEIgYiA9IG5ldyBCKCk7CisgICAgfQorCisgICAgcHJpdmF0ZSBjbGFzcyBCIHsKKyAgICAgICAgcHJpdmF0ZSBCKCkgeworICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDb25zdHJ1Y3RvciIpOworICAgICAgICB9CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlSW5uZXIvZW51bUNvbnN0cnVjdG9yVmlzaWJpbGl0eS9hZnRlci9wL0EuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlSW5uZXIvZW51bUNvbnN0cnVjdG9yVmlzaWJpbGl0eS9hZnRlci9wL0EuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNDliYjkwCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVJbm5lci9lbnVtQ29uc3RydWN0b3JWaXNpYmlsaXR5L2FmdGVyL3AvQS5qYXZhCkBAIC0wLDAgKzEsNCBAQAorcGFja2FnZSBwOworCitwdWJsaWMgY2xhc3MgQSB7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVJbm5lci9lbnVtQ29uc3RydWN0b3JWaXNpYmlsaXR5L2FmdGVyL3AyL0UuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlSW5uZXIvZW51bUNvbnN0cnVjdG9yVmlzaWJpbGl0eS9hZnRlci9wMi9FLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGVjOTljNwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlSW5uZXIvZW51bUNvbnN0cnVjdG9yVmlzaWJpbGl0eS9hZnRlci9wMi9FLmphdmEKQEAgLTAsMCArMSwxMiBAQAorcGFja2FnZSBwMjsKKworcHVibGljIGVudW0gRSB7CisgICAgIEVBKCJhIiksCisgICAgIEVCKCJiIikKKworICAgICBwdWJsaWMgZmluYWwgU3RyaW5nIFBSRVNFTlRBQkxFX1RFWFQ7CisKKyAgICAgRShmaW5hbCBTdHJpbmcgcHJlc2VudGFibGVUZXh0KSB7CisgICAgICAgUFJFU0VOVEFCTEVfVEVYVCA9IHByZXNlbnRhYmxlVGV4dDsKKyAgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlSW5uZXIvZW51bUNvbnN0cnVjdG9yVmlzaWJpbGl0eS9hZnRlci9wMi9VLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUlubmVyL2VudW1Db25zdHJ1Y3RvclZpc2liaWxpdHkvYWZ0ZXIvcDIvVS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI0NGE3ZTIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUlubmVyL2VudW1Db25zdHJ1Y3RvclZpc2liaWxpdHkvYWZ0ZXIvcDIvVS5qYXZhCkBAIC0wLDAgKzEsNSBAQAorcGFja2FnZSBwMjsKKworcHVibGljIGNsYXNzIFUgeworICAgIEUgbXlFOworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlSW5uZXIvZW51bUNvbnN0cnVjdG9yVmlzaWJpbGl0eS9iZWZvcmUvcC9BLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUlubmVyL2VudW1Db25zdHJ1Y3RvclZpc2liaWxpdHkvYmVmb3JlL3AvQS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZiODBhYzUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUlubmVyL2VudW1Db25zdHJ1Y3RvclZpc2liaWxpdHkvYmVmb3JlL3AvQS5qYXZhCkBAIC0wLDAgKzEsMTQgQEAKK3BhY2thZ2UgcDsKKworcHVibGljIGNsYXNzIEEgeworICAgIHB1YmxpYyBlbnVtIEUgeworICAgICAgICAgRUEoImEiKSwKKyAgICAgICAgIEVCKCJiIikKKworICAgICAgICAgcHVibGljIGZpbmFsIFN0cmluZyBQUkVTRU5UQUJMRV9URVhUOworCisgICAgICAgICBFKGZpbmFsIFN0cmluZyBwcmVzZW50YWJsZVRleHQpIHsKKyAgICAgICAgICAgUFJFU0VOVEFCTEVfVEVYVCA9IHByZXNlbnRhYmxlVGV4dDsKKyAgICAgICAgIH0KKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVJbm5lci9lbnVtQ29uc3RydWN0b3JWaXNpYmlsaXR5L2JlZm9yZS9wMi9VLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUlubmVyL2VudW1Db25zdHJ1Y3RvclZpc2liaWxpdHkvYmVmb3JlL3AyL1UuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MTI1N2Y3Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVJbm5lci9lbnVtQ29uc3RydWN0b3JWaXNpYmlsaXR5L2JlZm9yZS9wMi9VLmphdmEKQEAgLTAsMCArMSw3IEBACitwYWNrYWdlIHAyOworCitpbXBvcnQgc3RhdGljIHAuQS5FOworCitwdWJsaWMgY2xhc3MgVSB7CisgICAgRSBteUU7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVJbm5lci9maWVsZEFjY2Vzc0luU3VwZXIvYWZ0ZXIvcC9BLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUlubmVyL2ZpZWxkQWNjZXNzSW5TdXBlci9hZnRlci9wL0EuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMWMyZDY2Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVJbm5lci9maWVsZEFjY2Vzc0luU3VwZXIvYWZ0ZXIvcC9BLmphdmEKQEAgLTAsMCArMSw1IEBACitwYWNrYWdlIHA7CisKK2NsYXNzIEEgeworICAgIGludCBmb28oKXt9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVJbm5lci9maWVsZEFjY2Vzc0luU3VwZXIvYWZ0ZXIvcC9CLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUlubmVyL2ZpZWxkQWNjZXNzSW5TdXBlci9hZnRlci9wL0IuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZDAzMDQ3Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVJbm5lci9maWVsZEFjY2Vzc0luU3VwZXIvYWZ0ZXIvcC9CLmphdmEKQEAgLTAsMCArMSwxMCBAQAorcGFja2FnZSBwOworCitjbGFzcyBCIGV4dGVuZHMgU3sKKyAgICBwcml2YXRlIEEgYTsKKworICAgIHB1YmxpYyBCKEEgYSkgeworICAgIHN1cGVyKGEuZm9vKCkpOworICAgICAgICB0aGlzLmEgPSBhOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUlubmVyL2ZpZWxkQWNjZXNzSW5TdXBlci9hZnRlci9wL1MuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlSW5uZXIvZmllbGRBY2Nlc3NJblN1cGVyL2FmdGVyL3AvUy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhhOWFlZTYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUlubmVyL2ZpZWxkQWNjZXNzSW5TdXBlci9hZnRlci9wL1MuamF2YQpAQCAtMCwwICsxLDUgQEAKK3BhY2thZ2UgcDsKKworY2xhc3MgUyB7CisgIHB1YmxpYyBTKGludCBpKXt9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVJbm5lci9maWVsZEFjY2Vzc0luU3VwZXIvYmVmb3JlL3AvQS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVJbm5lci9maWVsZEFjY2Vzc0luU3VwZXIvYmVmb3JlL3AvQS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBiNjdhZmQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUlubmVyL2ZpZWxkQWNjZXNzSW5TdXBlci9iZWZvcmUvcC9BLmphdmEKQEAgLTAsMCArMSwxMCBAQAorcGFja2FnZSBwOworCitjbGFzcyBBIHsKKyAgICBpbnQgZm9vKCl7fQorICAgIHByaXZhdGUgY2xhc3MgQiBleHRlbmRzIFN7CisgICAgICBwdWJsaWMgQigpIHsKKyAgICAgICAgc3VwZXIoQS50aGlzLmZvbygpKTsKKyAgICAgIH0gCisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlSW5uZXIvZmllbGRBY2Nlc3NJblN1cGVyL2JlZm9yZS9wL1MuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlSW5uZXIvZmllbGRBY2Nlc3NJblN1cGVyL2JlZm9yZS9wL1MuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YTlhZWU2Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVJbm5lci9maWVsZEFjY2Vzc0luU3VwZXIvYmVmb3JlL3AvUy5qYXZhCkBAIC0wLDAgKzEsNSBAQAorcGFja2FnZSBwOworCitjbGFzcyBTIHsKKyAgcHVibGljIFMoaW50IGkpe30KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUlubmVyL2ltcG9ydFN0YXRpY09mRW51bS9hZnRlci9wL0EuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlSW5uZXIvaW1wb3J0U3RhdGljT2ZFbnVtL2FmdGVyL3AvQS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE0OWJiOTAKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUlubmVyL2ltcG9ydFN0YXRpY09mRW51bS9hZnRlci9wL0EuamF2YQpAQCAtMCwwICsxLDQgQEAKK3BhY2thZ2UgcDsKKworcHVibGljIGNsYXNzIEEgeworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlSW5uZXIvaW1wb3J0U3RhdGljT2ZFbnVtL2FmdGVyL3AvRS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVJbm5lci9pbXBvcnRTdGF0aWNPZkVudW0vYWZ0ZXIvcC9FLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGExYTJmNgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlSW5uZXIvaW1wb3J0U3RhdGljT2ZFbnVtL2FmdGVyL3AvRS5qYXZhCkBAIC0wLDAgKzEsNCBAQAorcGFja2FnZSBwOworCitwdWJsaWMgZW51bSBFIHsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUlubmVyL2ltcG9ydFN0YXRpY09mRW51bS9hZnRlci9wMi9VLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUlubmVyL2ltcG9ydFN0YXRpY09mRW51bS9hZnRlci9wMi9VLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTE3N2VjZjUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUlubmVyL2ltcG9ydFN0YXRpY09mRW51bS9hZnRlci9wMi9VLmphdmEKQEAgLTAsMCArMSw3IEBACitwYWNrYWdlIHAyOworCitpbXBvcnQgcC5FOworCitwdWJsaWMgY2xhc3MgVSB7CisgICAgRSBteUU7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVJbm5lci9pbXBvcnRTdGF0aWNPZkVudW0vYmVmb3JlL3AvQS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVJbm5lci9pbXBvcnRTdGF0aWNPZkVudW0vYmVmb3JlL3AvQS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBjZmExMWQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUlubmVyL2ltcG9ydFN0YXRpY09mRW51bS9iZWZvcmUvcC9BLmphdmEKQEAgLTAsMCArMSw2IEBACitwYWNrYWdlIHA7CisKK3B1YmxpYyBjbGFzcyBBIHsKKyAgICBwdWJsaWMgZW51bSBFIHsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVJbm5lci9pbXBvcnRTdGF0aWNPZkVudW0vYmVmb3JlL3AyL1UuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlSW5uZXIvaW1wb3J0U3RhdGljT2ZFbnVtL2JlZm9yZS9wMi9VLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDEyNTdmNwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlSW5uZXIvaW1wb3J0U3RhdGljT2ZFbnVtL2JlZm9yZS9wMi9VLmphdmEKQEAgLTAsMCArMSw3IEBACitwYWNrYWdlIHAyOworCitpbXBvcnQgc3RhdGljIHAuQS5FOworCitwdWJsaWMgY2xhc3MgVSB7CisgICAgRSBteUU7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVJbm5lci9pbm5lckNsYXNzSW5oZXJpdGFuY2UvYWZ0ZXIvcC9BLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUlubmVyL2lubmVyQ2xhc3NJbmhlcml0YW5jZS9hZnRlci9wL0EuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iM2Q4MzM0Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVJbm5lci9pbm5lckNsYXNzSW5oZXJpdGFuY2UvYWZ0ZXIvcC9BLmphdmEKQEAgLTAsMCArMSw4IEBACitwYWNrYWdlIHA7CisKK2NsYXNzIEEgeworICAgIHByaXZhdGUgc3RhdGljIGNsYXNzIEMgeworCisgICAgfQorCit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVJbm5lci9pbm5lckNsYXNzSW5oZXJpdGFuY2UvYWZ0ZXIvcC9CLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUlubmVyL2lubmVyQ2xhc3NJbmhlcml0YW5jZS9hZnRlci9wL0IuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZDM0Zjc5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVJbm5lci9pbm5lckNsYXNzSW5oZXJpdGFuY2UvYWZ0ZXIvcC9CLmphdmEKQEAgLTAsMCArMSw1IEBACitwYWNrYWdlIHA7CisKK2NsYXNzIEIgZXh0ZW5kcyBBLkMgeworCit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVJbm5lci9pbm5lckNsYXNzSW5oZXJpdGFuY2UvYmVmb3JlL3AvQS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVJbm5lci9pbm5lckNsYXNzSW5oZXJpdGFuY2UvYmVmb3JlL3AvQS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUyMmNhZjAKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUlubmVyL2lubmVyQ2xhc3NJbmhlcml0YW5jZS9iZWZvcmUvcC9BLmphdmEKQEAgLTAsMCArMSwxMSBAQAorcGFja2FnZSBwOworCitjbGFzcyBBIHsKKyAgICBwcml2YXRlIHN0YXRpYyBjbGFzcyBDIHsKKworICAgIH0KKworICAgIHByaXZhdGUgc3RhdGljIGNsYXNzIEIgZXh0ZW5kcyBDeworCisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlSW5uZXIvaW5uZXJDbGFzc1NlbGZSZWYvYWZ0ZXIvcC9BLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUlubmVyL2lubmVyQ2xhc3NTZWxmUmVmL2FmdGVyL3AvQS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIzZmFlM2UKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUlubmVyL2lubmVyQ2xhc3NTZWxmUmVmL2FmdGVyL3AvQS5qYXZhCkBAIC0wLDAgKzEsNCBAQAorcGFja2FnZSBwOworCitjbGFzcyBBIHsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUlubmVyL2lubmVyQ2xhc3NTZWxmUmVmL2FmdGVyL3AvQi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVJbm5lci9pbm5lckNsYXNzU2VsZlJlZi9hZnRlci9wL0IuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NzQyYWZhCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVJbm5lci9pbm5lckNsYXNzU2VsZlJlZi9hZnRlci9wL0IuamF2YQpAQCAtMCwwICsxLDcgQEAKK3BhY2thZ2UgcDsKKworY2xhc3MgQiB7CisgIHB1YmxpYyBzdGF0aWMgQiBjcmVhdGUoKSB7CisgICAgcmV0dXJuIG5ldyBCKCk7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUlubmVyL2lubmVyQ2xhc3NTZWxmUmVmL2JlZm9yZS9wL0EuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlSW5uZXIvaW5uZXJDbGFzc1NlbGZSZWYvYmVmb3JlL3AvQS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFhNmMyZTMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUlubmVyL2lubmVyQ2xhc3NTZWxmUmVmL2JlZm9yZS9wL0EuamF2YQpAQCAtMCwwICsxLDkgQEAKK3BhY2thZ2UgcDsKKworY2xhc3MgQSB7CisgICAgcHJpdmF0ZSBzdGF0aWMgY2xhc3MgQiB7CisgICAgICBwdWJsaWMgc3RhdGljIEIgY3JlYXRlKCkgeworICAgICAgICByZXR1cm4gbmV3IEIoKTsKKyAgICAgIH0KKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVJbm5lci9ub25KYXZhRmlsZXMvYWZ0ZXIvcGFjazEvSW5uZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlSW5uZXIvbm9uSmF2YUZpbGVzL2FmdGVyL3BhY2sxL0lubmVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzlkZWQ4YQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlSW5uZXIvbm9uSmF2YUZpbGVzL2FmdGVyL3BhY2sxL0lubmVyLmphdmEKQEAgLTAsMCArMSw0IEBACitwYWNrYWdlIHBhY2sxOworCitwdWJsaWMgY2xhc3MgSW5uZXIgeworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlSW5uZXIvbm9uSmF2YUZpbGVzL2FmdGVyL3BhY2sxL091dGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUlubmVyL25vbkphdmFGaWxlcy9hZnRlci9wYWNrMS9PdXRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ3NzJlZDkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUlubmVyL25vbkphdmFGaWxlcy9hZnRlci9wYWNrMS9PdXRlci5qYXZhCkBAIC0wLDAgKzEsNiBAQAorcGFja2FnZSBwYWNrMTsKKworcHVibGljIGNsYXNzIE91dGVyIHsKKyAgICAvLyBwYWNrMS5Jbm5lcgorCit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVJbm5lci9ub25KYXZhRmlsZXMvYWZ0ZXIvcGFjazEveC50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUlubmVyL25vbkphdmFGaWxlcy9hZnRlci9wYWNrMS94LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOTdkOTJkCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVJbm5lci9ub25KYXZhRmlsZXMvYWZ0ZXIvcGFjazEveC50eHQKQEAgLTAsMCArMSBAQAorcGFjazEuSW5uZXIKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUlubmVyL25vbkphdmFGaWxlcy9iZWZvcmUvcGFjazEvT3V0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlSW5uZXIvbm9uSmF2YUZpbGVzL2JlZm9yZS9wYWNrMS9PdXRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk3ODc5Y2EKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUlubmVyL25vbkphdmFGaWxlcy9iZWZvcmUvcGFjazEvT3V0ZXIuamF2YQpAQCAtMCwwICsxLDggQEAKK3BhY2thZ2UgcGFjazE7CisKK3B1YmxpYyBjbGFzcyBPdXRlciB7CisgICAgLy8gcGFjazEuT3V0ZXIuSW5uZXIKKworICAgIHB1YmxpYyBjbGFzcyBJbm5lciB7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlSW5uZXIvbm9uSmF2YUZpbGVzL2JlZm9yZS9wYWNrMS94LnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlSW5uZXIvbm9uSmF2YUZpbGVzL2JlZm9yZS9wYWNrMS94LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYTFjMzkwCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVJbm5lci9ub25KYXZhRmlsZXMvYmVmb3JlL3BhY2sxL3gudHh0CkBAIC0wLDAgKzEgQEAKK3BhY2sxLk91dGVyLklubmVyClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVJbm5lci9xdWFsaWZ5VGhpc0hpZXJhcmNoeS9hZnRlci9wYWNrMS9ESW1wbC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVJbm5lci9xdWFsaWZ5VGhpc0hpZXJhcmNoeS9hZnRlci9wYWNrMS9ESW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM3NjlkOGEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUlubmVyL3F1YWxpZnlUaGlzSGllcmFyY2h5L2FmdGVyL3BhY2sxL0RJbXBsLmphdmEKQEAgLTAsMCArMSw5IEBACitwYWNrYWdlIHBhY2sxOworY2xhc3MgRCB7CisgIHByb3RlY3RlZCB2b2lkIGlBbVByb3RlY3RlZCgpIHsKKyAgfQorfQorCitwdWJsaWMgY2xhc3MgREltcGwgZXh0ZW5kcyBEIHsKK30KKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVJbm5lci9xdWFsaWZ5VGhpc0hpZXJhcmNoeS9hZnRlci9wYWNrMS9NeVJ1bm5hYmxlLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUlubmVyL3F1YWxpZnlUaGlzSGllcmFyY2h5L2FmdGVyL3BhY2sxL015UnVubmFibGUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOGE0NjcwCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVJbm5lci9xdWFsaWZ5VGhpc0hpZXJhcmNoeS9hZnRlci9wYWNrMS9NeVJ1bm5hYmxlLmphdmEKQEAgLTAsMCArMSwxMyBAQAorcGFja2FnZSBwYWNrMTsKKworcHVibGljIGNsYXNzIE15UnVubmFibGUgeworICAgIHByaXZhdGUgREltcGwgZDsKKworICAgIHB1YmxpYyBNeVJ1bm5hYmxlKERJbXBsIGQpIHsKKyAgICAgICAgdGhpcy5kID0gZDsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBydW4oKSB7CisgICAgZC5pQW1Qcm90ZWN0ZWQoKTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlSW5uZXIvcXVhbGlmeVRoaXNIaWVyYXJjaHkvYmVmb3JlL3BhY2sxL0RJbXBsLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUlubmVyL3F1YWxpZnlUaGlzSGllcmFyY2h5L2JlZm9yZS9wYWNrMS9ESW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI5Yjc1ZjcKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUlubmVyL3F1YWxpZnlUaGlzSGllcmFyY2h5L2JlZm9yZS9wYWNrMS9ESW1wbC5qYXZhCkBAIC0wLDAgKzEsMTQgQEAKK3BhY2thZ2UgcGFjazE7CitjbGFzcyBEIHsKKyAgcHJvdGVjdGVkIHZvaWQgaUFtUHJvdGVjdGVkKCkgeworICB9Cit9CisKK3B1YmxpYyBjbGFzcyBESW1wbCBleHRlbmRzIEQgeworICBwdWJsaWMgY2xhc3MgTXlSdW5uYWJsZSB7ICAgICAKKyAgICBwdWJsaWMgdm9pZCBydW4oKSB7CisgICAgICBpQW1Qcm90ZWN0ZWQoKTsKKyAgICB9CisgIH0KK30KKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVJbm5lci9zY3IxMzczMC9hZnRlci9wYWNrMS9DbGllbnQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlSW5uZXIvc2NyMTM3MzAvYWZ0ZXIvcGFjazEvQ2xpZW50LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzdhNDhkNgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlSW5uZXIvc2NyMTM3MzAvYWZ0ZXIvcGFjazEvQ2xpZW50LmphdmEKQEAgLTAsMCArMSwxMiBAQAorcGFja2FnZSBwYWNrMTsKKworcHVibGljIGNsYXNzIENsaWVudCB7IAorICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKyAgICAgICAgU3RhdGljSW5uZXIgc3RhdGljSW5uZXIgPSBuZXcgU3RhdGljSW5uZXIoKTsKKyAKKyAgICAgICAgU3RhdGljSW5uZXIuTm9uU3RhdGljSW5uZXJJbm5lciBub25TdGF0aWNJbm5lcklubmVyCisgICAgICAgICAgICA9IHN0YXRpY0lubmVyLm5ldyBOb25TdGF0aWNJbm5lcklubmVyKCJKb2UiKTsKKyAKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKG5vblN0YXRpY0lubmVySW5uZXIudG9TdHJpbmcoKSk7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlSW5uZXIvc2NyMTM3MzAvYWZ0ZXIvcGFjazEvU3RhdGljSW5uZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlSW5uZXIvc2NyMTM3MzAvYWZ0ZXIvcGFjazEvU3RhdGljSW5uZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMzgxZWJhCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVJbm5lci9zY3IxMzczMC9hZnRlci9wYWNrMS9TdGF0aWNJbm5lci5qYXZhCkBAIC0wLDAgKzEsMTUgQEAKK3BhY2thZ2UgcGFjazE7CisKK3B1YmxpYyBjbGFzcyBTdGF0aWNJbm5lciB7CisgICAgcHVibGljIGNsYXNzIE5vblN0YXRpY0lubmVySW5uZXIgeworICAgICAgICBwcml2YXRlIFN0cmluZyBuYW1lOworCisgICAgICAgIHB1YmxpYyBOb25TdGF0aWNJbm5lcklubmVyKFN0cmluZyBuYW1lKSB7CisgICAgICAgICAgICB0aGlzLm5hbWUgPSBuYW1lOworICAgICAgICB9CisKKyAgICAgICAgcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKKyAgICAgICAgICAgIHJldHVybiBuYW1lOworICAgICAgICB9CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlSW5uZXIvc2NyMTM3MzAvYWZ0ZXIvcGFjazEvVG9wTGV2ZWwuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlSW5uZXIvc2NyMTM3MzAvYWZ0ZXIvcGFjazEvVG9wTGV2ZWwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NTVlZDc0Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVJbm5lci9zY3IxMzczMC9hZnRlci9wYWNrMS9Ub3BMZXZlbC5qYXZhCkBAIC0wLDAgKzEsNCBAQAorcGFja2FnZSBwYWNrMTsKKworcHVibGljIGNsYXNzIFRvcExldmVsIHsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUlubmVyL3NjcjEzNzMwL2JlZm9yZS9wYWNrMS9DbGllbnQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlSW5uZXIvc2NyMTM3MzAvYmVmb3JlL3BhY2sxL0NsaWVudC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY2YzM0M2EKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUlubmVyL3NjcjEzNzMwL2JlZm9yZS9wYWNrMS9DbGllbnQuamF2YQpAQCAtMCwwICsxLDEyIEBACitwYWNrYWdlIHBhY2sxOworCitwdWJsaWMgY2xhc3MgQ2xpZW50IHsgCisgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworICAgICAgICBUb3BMZXZlbC5TdGF0aWNJbm5lciBzdGF0aWNJbm5lciA9IG5ldyBUb3BMZXZlbC5TdGF0aWNJbm5lcigpOworIAorICAgICAgICBUb3BMZXZlbC5TdGF0aWNJbm5lci5Ob25TdGF0aWNJbm5lcklubmVyIG5vblN0YXRpY0lubmVySW5uZXIKKyAgICAgICAgICAgID0gc3RhdGljSW5uZXIubmV3IE5vblN0YXRpY0lubmVySW5uZXIoIkpvZSIpOworIAorICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4obm9uU3RhdGljSW5uZXJJbm5lci50b1N0cmluZygpKTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVJbm5lci9zY3IxMzczMC9iZWZvcmUvcGFjazEvVG9wTGV2ZWwuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlSW5uZXIvc2NyMTM3MzAvYmVmb3JlL3BhY2sxL1RvcExldmVsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTYxNDkyYwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlSW5uZXIvc2NyMTM3MzAvYmVmb3JlL3BhY2sxL1RvcExldmVsLmphdmEKQEAgLTAsMCArMSwxNyBAQAorcGFja2FnZSBwYWNrMTsKKworcHVibGljIGNsYXNzIFRvcExldmVsIHsgCisgICAgcHVibGljIHN0YXRpYyBjbGFzcyBTdGF0aWNJbm5lciB7CisgICAgICAgIHB1YmxpYyBjbGFzcyBOb25TdGF0aWNJbm5lcklubmVyIHsKKyAgICAgICAgICAgIHByaXZhdGUgU3RyaW5nIG5hbWU7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHB1YmxpYyBOb25TdGF0aWNJbm5lcklubmVyKFN0cmluZyBuYW1lKSB7CisgICAgICAgICAgICAgICAgdGhpcy5uYW1lID0gbmFtZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbmFtZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUlubmVyL3NjcjE1MTQyL2FmdGVyL3h4eC9Jbm5lci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVJbm5lci9zY3IxNTE0Mi9hZnRlci94eHgvSW5uZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kODFmY2EwCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVJbm5lci9zY3IxNTE0Mi9hZnRlci94eHgvSW5uZXIuamF2YQpAQCAtMCwwICsxLDQgQEAKK3BhY2thZ2UgeHh4OworCitwdWJsaWMgY2xhc3MgSW5uZXIgeworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlSW5uZXIvc2NyMTUxNDIvYWZ0ZXIveHh4L091dGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUlubmVyL3NjcjE1MTQyL2FmdGVyL3h4eC9PdXRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBhNDAyOTcKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUlubmVyL3NjcjE1MTQyL2FmdGVyL3h4eC9PdXRlci5qYXZhCkBAIC0wLDAgKzEsOCBAQAorcGFja2FnZSB4eHg7CisKK3B1YmxpYyBjbGFzcyBPdXRlciB7CisgIHsKKyAgICBJbm5lciBpbm5lciA9IG5ldyBJbm5lcigpOworICB9CisKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUlubmVyL3NjcjE1MTQyL2JlZm9yZS94eHgvT3V0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlSW5uZXIvc2NyMTUxNDIvYmVmb3JlL3h4eC9PdXRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhiYTg3M2IKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUlubmVyL3NjcjE1MTQyL2JlZm9yZS94eHgvT3V0ZXIuamF2YQpAQCAtMCwwICsxLDEwIEBACitwYWNrYWdlIHh4eDsKKworcHVibGljIGNsYXNzIE91dGVyIHsKKyAgeworICAgIElubmVyIGlubmVyID0gbmV3IElubmVyKCk7CisgIH0KKworICBwdWJsaWMgY2xhc3MgSW5uZXIgeworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVJbm5lci9zY3IyMjU5Mi9hZnRlci94eHgvSW5uZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlSW5uZXIvc2NyMjI1OTIvYWZ0ZXIveHh4L0lubmVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjIyODlhZgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlSW5uZXIvc2NyMjI1OTIvYWZ0ZXIveHh4L0lubmVyLmphdmEKQEAgLTAsMCArMSw5IEBACitwYWNrYWdlIHh4eDsKKworY2xhc3MgSW5uZXIgeworICAgIHByaXZhdGUgT3V0ZXIgb3V0ZXI7CisKKyAgICBwdWJsaWMgSW5uZXIoT3V0ZXIgb3V0ZXIpIHsKKyAgICAgICAgdGhpcy5vdXRlciA9IG91dGVyOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUlubmVyL3NjcjIyNTkyL2FmdGVyL3h4eC9PdXRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVJbm5lci9zY3IyMjU5Mi9hZnRlci94eHgvT3V0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NGVlMTdlCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVJbm5lci9zY3IyMjU5Mi9hZnRlci94eHgvT3V0ZXIuamF2YQpAQCAtMCwwICsxLDcgQEAKK3BhY2thZ2UgeHh4OworY2xhc3MgT3V0ZXIgeworCisgICAgeworICAgICAgICBPYmplY3QgbyA9IG5ldyBJbm5lcjsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVJbm5lci9zY3IyMjU5Mi9iZWZvcmUveHh4L091dGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUlubmVyL3NjcjIyNTkyL2JlZm9yZS94eHgvT3V0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMjYyOWVmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVJbm5lci9zY3IyMjU5Mi9iZWZvcmUveHh4L091dGVyLmphdmEKQEAgLTAsMCArMSw5IEBACitwYWNrYWdlIHh4eDsKK2NsYXNzIE91dGVyIHsKKyAgICBjbGFzcyBJbm5lciB7CisgICAgfQorCisgICAgeworICAgICAgICBPYmplY3QgbyA9IG5ldyBJbm5lcjsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVJbm5lci9zY3IzMDEwNi9hZnRlci9wL0EuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlSW5uZXIvc2NyMzAxMDYvYWZ0ZXIvcC9BLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTNhMDkwMwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlSW5uZXIvc2NyMzAxMDYvYWZ0ZXIvcC9BLmphdmEKQEAgLTAsMCArMSw0IEBACitwYWNrYWdlIHA7CisKK3B1YmxpYyBjbGFzcyBBIGV4dGVuZHMgWCB7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVJbm5lci9zY3IzMDEwNi9hZnRlci9wL0IuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlSW5uZXIvc2NyMzAxMDYvYWZ0ZXIvcC9CLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmZhOTE2MgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlSW5uZXIvc2NyMzAxMDYvYWZ0ZXIvcC9CLmphdmEKQEAgLTAsMCArMSwxMyBAQAorcGFja2FnZSBwOworCitwdWJsaWMgY2xhc3MgQiBleHRlbmRzIFggeworICAgIHsKKyAgICAgICAgbWV0aG9kKCk7CisgICAgfQorCisgICAgcHJpdmF0ZSBBIG91dGVyOworCisgICAgcHVibGljIEIoQSBvdXRlcikgeworICAgICAgICB0aGlzLm91dGVyID0gb3V0ZXI7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlSW5uZXIvc2NyMzAxMDYvYWZ0ZXIvcC9YLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUlubmVyL3NjcjMwMTA2L2FmdGVyL3AvWC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYxMzM0NDgKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUlubmVyL3NjcjMwMTA2L2FmdGVyL3AvWC5qYXZhCkBAIC0wLDAgKzEsNSBAQAorcGFja2FnZSBwOworCitwdWJsaWMgY2xhc3MgWCB7CisgICAgdm9pZCBtZXRob2QoKTsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUlubmVyL3NjcjMwMTA2L2JlZm9yZS9wL0EuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlSW5uZXIvc2NyMzAxMDYvYmVmb3JlL3AvQS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM4N2JmNGIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUlubmVyL3NjcjMwMTA2L2JlZm9yZS9wL0EuamF2YQpAQCAtMCwwICsxLDkgQEAKK3BhY2thZ2UgcDsKKworcHVibGljIGNsYXNzIEEgZXh0ZW5kcyBYIHsKKyAgICBwdWJsaWMgY2xhc3MgQiBleHRlbmRzIFggeworICAgICAgICB7CisgICAgICAgICAgICBtZXRob2QoKTsKKyAgICAgICAgfQorICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUlubmVyL3NjcjMwMTA2L2JlZm9yZS9wL1guamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlSW5uZXIvc2NyMzAxMDYvYmVmb3JlL3AvWC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYxMzM0NDgKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUlubmVyL3NjcjMwMTA2L2JlZm9yZS9wL1guamF2YQpAQCAtMCwwICsxLDUgQEAKK3BhY2thZ2UgcDsKKworcHVibGljIGNsYXNzIFggeworICAgIHZvaWQgbWV0aG9kKCk7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVJbm5lci90b090aGVyUGFja2FnZS9hZnRlci9wYWNrYWdlMS9PdXRlckNsYXNzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUlubmVyL3RvT3RoZXJQYWNrYWdlL2FmdGVyL3BhY2thZ2UxL091dGVyQ2xhc3MuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OTA4MTM2Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVJbm5lci90b090aGVyUGFja2FnZS9hZnRlci9wYWNrYWdlMS9PdXRlckNsYXNzLmphdmEKQEAgLTAsMCArMSw4IEBACitwYWNrYWdlIHBhY2thZ2UxOworCitpbXBvcnQgcGFja2FnZTIuSW5uZXJDbGFzczsKKworcHVibGljIGNsYXNzIE91dGVyQ2xhc3MgeworICAgIHByaXZhdGUgSW5uZXJDbGFzcyBpbnN0YW5jZSA9IG5ldyBJbm5lckNsYXNzKCk7CisKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlSW5uZXIvdG9PdGhlclBhY2thZ2UvYWZ0ZXIvcGFja2FnZTIvSW5uZXJDbGFzcy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVJbm5lci90b090aGVyUGFja2FnZS9hZnRlci9wYWNrYWdlMi9Jbm5lckNsYXNzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzU4OTRmYQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlSW5uZXIvdG9PdGhlclBhY2thZ2UvYWZ0ZXIvcGFja2FnZTIvSW5uZXJDbGFzcy5qYXZhCkBAIC0wLDAgKzEsMyBAQAorcGFja2FnZSBwYWNrYWdlMjsKKworcHVibGljIGNsYXNzIElubmVyQ2xhc3MgeyB9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVJbm5lci90b090aGVyUGFja2FnZS9hZnRlci9wYWNrYWdlMi9lbXB0eUZpbGUudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVJbm5lci90b090aGVyUGFja2FnZS9hZnRlci9wYWNrYWdlMi9lbXB0eUZpbGUudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2OWRlMjkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUlubmVyL3RvT3RoZXJQYWNrYWdlL2FmdGVyL3BhY2thZ2UyL2VtcHR5RmlsZS50eHQKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlSW5uZXIvdG9PdGhlclBhY2thZ2UvYmVmb3JlL3BhY2thZ2UxL091dGVyQ2xhc3MuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlSW5uZXIvdG9PdGhlclBhY2thZ2UvYmVmb3JlL3BhY2thZ2UxL091dGVyQ2xhc3MuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNjk0ZTdkCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVJbm5lci90b090aGVyUGFja2FnZS9iZWZvcmUvcGFja2FnZTEvT3V0ZXJDbGFzcy5qYXZhCkBAIC0wLDAgKzEsNyBAQAorcGFja2FnZSBwYWNrYWdlMTsKKworcHVibGljIGNsYXNzIE91dGVyQ2xhc3MgeworICAgIHByaXZhdGUgSW5uZXJDbGFzcyBpbnN0YW5jZSA9IG5ldyBJbm5lckNsYXNzKCk7CisKKyAgICBwcml2YXRlIHN0YXRpYyBjbGFzcyBJbm5lckNsYXNzIHsgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVJbm5lci90b090aGVyUGFja2FnZS9iZWZvcmUvcGFja2FnZTIvZW1wdHlGaWxlLnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlSW5uZXIvdG9PdGhlclBhY2thZ2UvYmVmb3JlL3BhY2thZ2UyL2VtcHR5RmlsZS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY5ZGUyOQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlSW5uZXIvdG9PdGhlclBhY2thZ2UvYmVmb3JlL3BhY2thZ2UyL2VtcHR5RmlsZS50eHQKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlSW5uZXIveG1sUmVmZXJlbmNlcy9hZnRlci9wYWNrMS9Jbm5lci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVJbm5lci94bWxSZWZlcmVuY2VzL2FmdGVyL3BhY2sxL0lubmVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzlkZWQ4YQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlSW5uZXIveG1sUmVmZXJlbmNlcy9hZnRlci9wYWNrMS9Jbm5lci5qYXZhCkBAIC0wLDAgKzEsNCBAQAorcGFja2FnZSBwYWNrMTsKKworcHVibGljIGNsYXNzIElubmVyIHsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUlubmVyL3htbFJlZmVyZW5jZXMvYWZ0ZXIvcGFjazEvT3V0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlSW5uZXIveG1sUmVmZXJlbmNlcy9hZnRlci9wYWNrMS9PdXRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkwZDhmOWMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUlubmVyL3htbFJlZmVyZW5jZXMvYWZ0ZXIvcGFjazEvT3V0ZXIuamF2YQpAQCAtMCwwICsxLDQgQEAKK3BhY2thZ2UgcGFjazE7CisKK3B1YmxpYyBjbGFzcyBPdXRlciB7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVJbm5lci94bWxSZWZlcmVuY2VzL2FmdGVyL3BhY2sxL3gueG1sIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVJbm5lci94bWxSZWZlcmVuY2VzL2FmdGVyL3BhY2sxL3gueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFmNzQ2ZDAKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUlubmVyL3htbFJlZmVyZW5jZXMvYWZ0ZXIvcGFjazEveC54bWwKQEAgLTAsMCArMSBAQAorPHg+cGFjazEuSW5uZXI8L3g+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVJbm5lci94bWxSZWZlcmVuY2VzL2JlZm9yZS9wYWNrMS9PdXRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVJbm5lci94bWxSZWZlcmVuY2VzL2JlZm9yZS9wYWNrMS9PdXRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc2MjAyNGEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUlubmVyL3htbFJlZmVyZW5jZXMvYmVmb3JlL3BhY2sxL091dGVyLmphdmEKQEAgLTAsMCArMSw2IEBACitwYWNrYWdlIHBhY2sxOworCitwdWJsaWMgY2xhc3MgT3V0ZXIgeworICAgIHB1YmxpYyBzdGF0aWMgY2xhc3MgSW5uZXIgeworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUlubmVyL3htbFJlZmVyZW5jZXMvYmVmb3JlL3BhY2sxL3gueG1sIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVJbm5lci94bWxSZWZlcmVuY2VzL2JlZm9yZS9wYWNrMS94LnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNDE5MzllCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVJbm5lci94bWxSZWZlcmVuY2VzL2JlZm9yZS9wYWNrMS94LnhtbApAQCAtMCwwICsxIEBACis8eD5wYWNrMS5PdXRlciRJbm5lcjwveD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUluc3RhbmNlTWV0aG9kL0Fub255bW91c0hpZXJhcmNoeS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVJbnN0YW5jZU1ldGhvZC9Bbm9ueW1vdXNIaWVyYXJjaHkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNzUwZTM5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVJbnN0YW5jZU1ldGhvZC9Bbm9ueW1vdXNIaWVyYXJjaHkuamF2YQpAQCAtMCwwICsxLDMxIEBACitwdWJsaWMgY2xhc3MgVGVzdCB7CisKKyAgICBwdWJsaWMgYm9vbGVhbiBwZXI8Y2FyZXQ+Zm9ybShCYXIgbCkgeworICAgICAgICBmaW5hbCBEaWFsb2cgZGlhbG9nID0gbmV3IERpYWxvZygpIHsKKyAgICAgICAgICAgICAgICAgICAgcHJvdGVjdGVkIHZvaWQgaW52b2tlUmVmYWN0b3JpbmcoKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgZG9SZWZhY3RvcigpOworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICB9OworICAgICAgICBkaWFsb2cuc2hvdygpOworICAgICAgICByZXR1cm4gZGlhbG9nLmlzT0soKTsKKyAgICB9Cit9CisKK2NsYXNzIEJhciB7Cit9CisKK2NsYXNzIElEIHsKKyAgICB2b2lkIGRvUmVmYWN0b3IoKSB7CisKKyAgICB9Cit9CisKK2NsYXNzIERpYWxvZyBleHRlbmRzIElEIHsKKyAgICBwdWJsaWMgdm9pZCBzaG93KCkgeworICAgIH0KKworICAgIHB1YmxpYyBib29sZWFuIGlzT0soKSB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVJbnN0YW5jZU1ldGhvZC9Bbm9ueW1vdXNIaWVyYXJjaHkuamF2YS5hZnRlciBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlSW5zdGFuY2VNZXRob2QvQW5vbnltb3VzSGllcmFyY2h5LmphdmEuYWZ0ZXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWZlZTkxOAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlSW5zdGFuY2VNZXRob2QvQW5vbnltb3VzSGllcmFyY2h5LmphdmEuYWZ0ZXIKQEAgLTAsMCArMSwzMSBAQAorcHVibGljIGNsYXNzIFRlc3QgeworCit9CisKK2NsYXNzIEJhciB7CisgICAgcHVibGljIGJvb2xlYW4gcGVyZm9ybSgpIHsKKyAgICAgICAgZmluYWwgRGlhbG9nIGRpYWxvZyA9IG5ldyBEaWFsb2coKSB7CisgICAgICAgICAgICAgICAgICAgIHByb3RlY3RlZCB2b2lkIGludm9rZVJlZmFjdG9yaW5nKCkgeworICAgICAgICAgICAgICAgICAgICAgICAgIGRvUmVmYWN0b3IoKTsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgZGlhbG9nLnNob3coKTsKKyAgICAgICAgcmV0dXJuIGRpYWxvZy5pc09LKCk7CisgICAgfQorfQorCitjbGFzcyBJRCB7CisgICAgdm9pZCBkb1JlZmFjdG9yKCkgeworCisgICAgfQorfQorCitjbGFzcyBEaWFsb2cgZXh0ZW5kcyBJRCB7CisgICAgcHVibGljIHZvaWQgc2hvdygpIHsKKyAgICB9CisKKyAgICBwdWJsaWMgYm9vbGVhbiBpc09LKCkgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlSW5zdGFuY2VNZXRob2QvQ29ycmVjdFRoaXNSZWZzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUluc3RhbmNlTWV0aG9kL0NvcnJlY3RUaGlzUmVmcy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdkMmE3NWYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUluc3RhbmNlTWV0aG9kL0NvcnJlY3RUaGlzUmVmcy5qYXZhCkBAIC0wLDAgKzEsMTQgQEAKK2NsYXNzIEEgeworICB2b2lkIGJhPGNhcmV0PnIoQiBiKSB7CisgICAgbmV3IFJ1bm5hYmxlKCkgeworICAgICAgQE92ZXJyaWRlCisgICAgICBwdWJsaWMgdm9pZCBydW4oKSB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihiKTsKKyAgICAgIH0KKyAgICB9LnJ1bigpOworICB9Cit9CisKK2NsYXNzIEIgeworCit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVJbnN0YW5jZU1ldGhvZC9Db3JyZWN0VGhpc1JlZnMuamF2YS5hZnRlciBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlSW5zdGFuY2VNZXRob2QvQ29ycmVjdFRoaXNSZWZzLmphdmEuYWZ0ZXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOThkOWI4ZgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlSW5zdGFuY2VNZXRob2QvQ29ycmVjdFRoaXNSZWZzLmphdmEuYWZ0ZXIKQEAgLTAsMCArMSwxNCBAQAorY2xhc3MgQSB7Cit9CisKK2NsYXNzIEIgeworCisgICAgdm9pZCBiYXIoKSB7CisgICAgICBuZXcgUnVubmFibGUoKSB7CisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgdm9pZCBydW4oKSB7CisgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKEIudGhpcyk7CisgICAgICAgIH0KKyAgICAgIH0ucnVuKCk7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlSW5zdGFuY2VNZXRob2QvRXNjYWxhdGVWaXNpYmlsaXR5LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUluc3RhbmNlTWV0aG9kL0VzY2FsYXRlVmlzaWJpbGl0eS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNjMWRhNTcKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUluc3RhbmNlTWV0aG9kL0VzY2FsYXRlVmlzaWJpbGl0eS5qYXZhCkBAIC0wLDAgKzEsOSBAQAorcHVibGljIGNsYXNzIEVzY2FsYXRlVmlzaWJpbGl0eSB7CisgIHB1YmxpYyB2b2lkIHgoQiBiKXsKKyAgICB5eShiKTsKKyAgfQorICBwcml2YXRlIHZvaWQgeTxjYXJldD55KEIgYil7CisgIH0KK30KKworY2xhc3MgQiB7fQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlSW5zdGFuY2VNZXRob2QvRXNjYWxhdGVWaXNpYmlsaXR5LmphdmEuYWZ0ZXIgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUluc3RhbmNlTWV0aG9kL0VzY2FsYXRlVmlzaWJpbGl0eS5qYXZhLmFmdGVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcwN2Q4MDgKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUluc3RhbmNlTWV0aG9kL0VzY2FsYXRlVmlzaWJpbGl0eS5qYXZhLmFmdGVyCkBAIC0wLDAgKzEsMTAgQEAKK3B1YmxpYyBjbGFzcyBFc2NhbGF0ZVZpc2liaWxpdHkgeworICBwdWJsaWMgdm9pZCB4KEIgYil7CisgICAgYi55eSgpOworICB9Cit9CisKK2NsYXNzIEIgeworICAgIHZvaWQgeXkoKXsKK30KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUluc3RhbmNlTWV0aG9kL0lERUFERVYxMTI1Ny5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVJbnN0YW5jZU1ldGhvZC9JREVBREVWMTEyNTcuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMjViNTI4Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVJbnN0YW5jZU1ldGhvZC9JREVBREVWMTEyNTcuamF2YQpAQCAtMCwwICsxLDcgQEAKK2NsYXNzIFRlc3QxIHsKK30KK2NsYXNzIFRlc3QyIHsKKyAgICBwdWJsaWMgdm9pZCA8Y2FyZXQ+dGVzdChUZXN0MSB0KSB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigidGVzdCIpOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUluc3RhbmNlTWV0aG9kL0lERUFERVYxMTI1Ny5qYXZhLmFmdGVyIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVJbnN0YW5jZU1ldGhvZC9JREVBREVWMTEyNTcuamF2YS5hZnRlcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOWUyOGQ1Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVJbnN0YW5jZU1ldGhvZC9JREVBREVWMTEyNTcuamF2YS5hZnRlcgpAQCAtMCwwICsxLDcgQEAKK2NsYXNzIFRlc3QxIHsKKyAgICBwdWJsaWMgdm9pZCB0ZXN0KCkgeworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oInRlc3QiKTsKKyAgICB9Cit9CitjbGFzcyBUZXN0MiB7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVJbnN0YW5jZU1ldGhvZC9JbnRlcmZhY2UuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlSW5zdGFuY2VNZXRob2QvSW50ZXJmYWNlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWQzM2Q4MAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlSW5zdGFuY2VNZXRob2QvSW50ZXJmYWNlLmphdmEKQEAgLTAsMCArMSwxOCBAQAoraW50ZXJmYWNlIEZvcmVpZ24geworfQorCitjbGFzcyBGb3JlaWduSW1wbCBpbXBsZW1lbnRzIEZvcmVpZ24geworfQorCisKK3B1YmxpYyBhYnN0cmFjdCBjbGFzcyBUZXN0MSB7CisgICAgaW50IGZpZWxkOworCisgICAgdm9pZCA8Y2FyZXQ+Zm9vIChGb3JlaWduIGYpIHsKKyAgICAgICAgZmllbGQrKzsKKyAgICB9CisKKyAgICB2b2lkIGJhciAoKSB7CisgICAgICAgIGZvbyhuZXcgRm9yZWlnbkltcGwoKSk7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlSW5zdGFuY2VNZXRob2QvSW50ZXJmYWNlLmphdmEuYWZ0ZXIgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUluc3RhbmNlTWV0aG9kL0ludGVyZmFjZS5qYXZhLmFmdGVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI2NTE0MmEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUluc3RhbmNlTWV0aG9kL0ludGVyZmFjZS5qYXZhLmFmdGVyCkBAIC0wLDAgKzEsMTkgQEAKK2ludGVyZmFjZSBGb3JlaWduIHsKKyAgICB2b2lkIGZvbyhUZXN0MSB0ZXN0MSk7Cit9CisKK2NsYXNzIEZvcmVpZ25JbXBsIGltcGxlbWVudHMgRm9yZWlnbiB7CisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIHZvaWQgZm9vKFRlc3QxIHRlc3QxKSB7CisgICAgICAgIHRlc3QxLmZpZWxkKys7CisgICAgfQorfQorCisKK3B1YmxpYyBhYnN0cmFjdCBjbGFzcyBUZXN0MSB7CisgICAgaW50IGZpZWxkOworCisgICAgdm9pZCBiYXIgKCkgeworICAgICAgICBuZXcgRm9yZWlnbkltcGwoKS5mb28odGhpcyk7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlSW5zdGFuY2VNZXRob2QvSmF2YWRvYy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVJbnN0YW5jZU1ldGhvZC9KYXZhZG9jLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjQ4ZDVjYTcKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUluc3RhbmNlTWV0aG9kL0phdmFkb2MuamF2YQpAQCAtMCwwICsxLDE4IEBACitjbGFzcyBGb3JlaWduIHsKK30KKworcHVibGljIGFic3RyYWN0IGNsYXNzIFRlc3QxIHsKKworICAgIC8qKgorICAgICAqIEBwYXJhbSBmCisgICAgICovCisgICAgdm9pZCA8Y2FyZXQ+Zm9vIChGb3JlaWduIGYpIHsKKyAgICAgIGJhcigpOworICAgIH0KKworICAgIC8qKgorICAgICAqIEBzZWUgI2ZvbyhGb3JlaWduKQorICAgICAqLworICAgIHZvaWQgYmFyICgpIHsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVJbnN0YW5jZU1ldGhvZC9KYXZhZG9jLmphdmEuYWZ0ZXIgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUluc3RhbmNlTWV0aG9kL0phdmFkb2MuamF2YS5hZnRlcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MTcwZGJkCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVJbnN0YW5jZU1ldGhvZC9KYXZhZG9jLmphdmEuYWZ0ZXIKQEAgLTAsMCArMSwxNyBAQAorY2xhc3MgRm9yZWlnbiB7CisgICAgLyoqCisgICAgICogQHBhcmFtIHRlc3QxCisgICAgICovCisgICAgdm9pZCBmb28oVGVzdDEgdGVzdDEpIHsKKyAgICAgIHRlc3QxLmJhcigpOworICAgIH0KK30KKworcHVibGljIGFic3RyYWN0IGNsYXNzIFRlc3QxIHsKKworICAgIC8qKgorICAgICAqIEBzZWUgRm9yZWlnbiNmb28oVGVzdDEpCisgICAgICovCisgICAgdm9pZCBiYXIgKCkgeworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUluc3RhbmNlTWV0aG9kL01ldGhvZFJlZmVyZW5jZS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVJbnN0YW5jZU1ldGhvZC9NZXRob2RSZWZlcmVuY2UuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMjEyMzgxCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVJbnN0YW5jZU1ldGhvZC9NZXRob2RSZWZlcmVuY2UuamF2YQpAQCAtMCwwICsxLDE2IEBACitpbnRlcmZhY2UgU0FNIHsKKyAgU3RyaW5nIG0oTWV0aG9kUmVmZXJlbmNlPFN0cmluZz4gZiwgRiBmMSk7Cit9CisKKworY2xhc3MgRiB7fQorCitjbGFzcyBNZXRob2RSZWZlcmVuY2U8WD4geworICBTdHJpbmcgZ2U8Y2FyZXQ+dFgoRiBmMSkgeworICAgIHJldHVybiBudWxsOworICB9CisKKyAgc3RhdGljIHZvaWQgdGVzdCgpIHsKKyAgICBTQU0gcyA9IE1ldGhvZFJlZmVyZW5jZTxTdHJpbmc+OjpnZXRYOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVJbnN0YW5jZU1ldGhvZC9Ob0dlbmVyaWNzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUluc3RhbmNlTWV0aG9kL05vR2VuZXJpY3MuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MjJlYzEzCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVJbnN0YW5jZU1ldGhvZC9Ob0dlbmVyaWNzLmphdmEKQEAgLTAsMCArMSw5IEBACitjbGFzcyBZb1lvPFQ+IHsKKyAgICBwcml2YXRlIFlvWW9ZbyBteVlvWW9ZbzsKKworICAgIHZvaWQgPGNhcmV0PmZvbyAoKSB7CisgICAgICAgIG15WW9Zb1lvLmdldENsYXNzKCk7CisgICAgfQorfQorCitjbGFzcyBZb1lvWW8gZXh0ZW5kcyBZb1lvIHt9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVJbnN0YW5jZU1ldGhvZC9Ob0dlbmVyaWNzLmphdmEuYWZ0ZXIgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUluc3RhbmNlTWV0aG9kL05vR2VuZXJpY3MuamF2YS5hZnRlcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZjdhMzIyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVJbnN0YW5jZU1ldGhvZC9Ob0dlbmVyaWNzLmphdmEuYWZ0ZXIKQEAgLTAsMCArMSwxMCBAQAorY2xhc3MgWW9ZbzxUPiB7CisgICAgcHJpdmF0ZSBZb1lvWW8gbXlZb1lvWW87CisKK30KKworY2xhc3MgWW9Zb1lvIGV4dGVuZHMgWW9ZbyB7CisgICAgdm9pZCBmb28gKCkgeworICAgICAgICBnZXRDbGFzcygpOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUluc3RhbmNlTWV0aG9kL05vVGhpc1BhcmFtLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUluc3RhbmNlTWV0aG9kL05vVGhpc1BhcmFtLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTE5M2U3NgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlSW5zdGFuY2VNZXRob2QvTm9UaGlzUGFyYW0uamF2YQpAQCAtMCwwICsxLDkgQEAKK2NsYXNzIFlvWW8geworICAgIHByaXZhdGUgWW9Zb1lvIG15WW9Zb1lvOworCisgICAgdm9pZCA8Y2FyZXQ+Zm9vICgpIHsKKyAgICAgICAgbXlZb1lvWW8uZ2V0Q2xhc3MoKTsKKyAgICB9Cit9CisKK2NsYXNzIFlvWW9ZbyBleHRlbmRzIFlvWW8ge30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUluc3RhbmNlTWV0aG9kL05vVGhpc1BhcmFtLmphdmEuYWZ0ZXIgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUluc3RhbmNlTWV0aG9kL05vVGhpc1BhcmFtLmphdmEuYWZ0ZXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZThlZWIwMgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlSW5zdGFuY2VNZXRob2QvTm9UaGlzUGFyYW0uamF2YS5hZnRlcgpAQCAtMCwwICsxLDEwIEBACitjbGFzcyBZb1lvIHsKKyAgICBwcml2YXRlIFlvWW9ZbyBteVlvWW9ZbzsKKworfQorCitjbGFzcyBZb1lvWW8gZXh0ZW5kcyBZb1lvIHsKKyAgICB2b2lkIGZvbyAoKSB7CisgICAgICAgIGdldENsYXNzKCk7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlSW5zdGFuY2VNZXRob2QvT3ZlcmxvYWRpbmdNZXRob2RzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUluc3RhbmNlTWV0aG9kL092ZXJsb2FkaW5nTWV0aG9kcy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA4Y2JlN2IKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUluc3RhbmNlTWV0aG9kL092ZXJsb2FkaW5nTWV0aG9kcy5qYXZhCkBAIC0wLDAgKzEsMTggQEAKK3B1YmxpYyBjbGFzcyBBIHsKKworICAgIHB1YmxpYyB2b2lkIG08Y2FyZXQ+KEIgYil7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbih0aGlzKTsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBzaG93KEIgYil7CisgICAgICAgIG0oYik7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgbSAoQyBjKXsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKHRoaXMpOworICAgIH0KKworfQorCitjbGFzcyBCe30KK2NsYXNzIEN7fQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlSW5zdGFuY2VNZXRob2QvT3ZlcmxvYWRpbmdNZXRob2RzLmphdmEuYWZ0ZXIgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUluc3RhbmNlTWV0aG9kL092ZXJsb2FkaW5nTWV0aG9kcy5qYXZhLmFmdGVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY1YWVhMzQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUluc3RhbmNlTWV0aG9kL092ZXJsb2FkaW5nTWV0aG9kcy5qYXZhLmFmdGVyCkBAIC0wLDAgKzEsMTggQEAKK3B1YmxpYyBjbGFzcyBBIHsKKworICAgIHB1YmxpYyB2b2lkIHNob3coQiBiKXsKKyAgICAgICAgYi5tKHRoaXMpOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIG0gKEMgYyl7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbih0aGlzKTsKKyAgICB9CisKK30KKworY2xhc3MgQnsKKyAgICBwdWJsaWMgdm9pZCBtKEEgYSl7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihhKTsKKyAgICB9Cit9CitjbGFzcyBDe30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUluc3RhbmNlTWV0aG9kL092ZXJsb2FkaW5nTWV0aG9kczEuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlSW5zdGFuY2VNZXRob2QvT3ZlcmxvYWRpbmdNZXRob2RzMS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUzYjc5MDIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUluc3RhbmNlTWV0aG9kL092ZXJsb2FkaW5nTWV0aG9kczEuamF2YQpAQCAtMCwwICsxLDExIEBACitjbGFzcyBCIGV4dGVuZHMgQSB7CisgIHZvaWQgbjxjYXJldD4oQyBjKXsKKyAgICBtKCk7CisgIH0KK30KKworY2xhc3MgQSB7CisgIHZvaWQgbSgpe30KK30KKworY2xhc3MgQyB7fQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlSW5zdGFuY2VNZXRob2QvT3ZlcmxvYWRpbmdNZXRob2RzMS5qYXZhLmFmdGVyIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVJbnN0YW5jZU1ldGhvZC9PdmVybG9hZGluZ01ldGhvZHMxLmphdmEuYWZ0ZXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmIxNzcwNQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlSW5zdGFuY2VNZXRob2QvT3ZlcmxvYWRpbmdNZXRob2RzMS5qYXZhLmFmdGVyCkBAIC0wLDAgKzEsMTIgQEAKK2NsYXNzIEIgZXh0ZW5kcyBBIHsKK30KKworY2xhc3MgQSB7CisgIHZvaWQgbSgpe30KK30KKworY2xhc3MgQyB7CisgICAgdm9pZCBuKEIgYil7CisgICAgICBiLm0oKTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVJbnN0YW5jZU1ldGhvZC9Qb2x5YWRpY0V4cHIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlSW5zdGFuY2VNZXRob2QvUG9seWFkaWNFeHByLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzg3ZWQ1ZAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlSW5zdGFuY2VNZXRob2QvUG9seWFkaWNFeHByLmphdmEKQEAgLTAsMCArMSwyMyBAQAorY2xhc3MgQSB7CisKKyAgICB2b2lkIG4oQiBiKSB7CisgICAgICAgIG0oYik7CisgICAgfQorCisgICAgdm9pZCBtPGNhcmV0PihCIGIpIHsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludCgiZGlzcGxheSBmb3IgbWUgdGhlIHNoYXBlIiArIHRoaXMgKyAiICIgKyBiLmdldEkoKSArICJ0aW1lcyIpOworICAgIH0KK30KKworY2xhc3MgQiB7CisgICAgcHJpdmF0ZSBmaW5hbCBpbnQgaTsKKworICAgIHB1YmxpYyBCKGludCBpKSB7CisgICAgICAgIHRoaXMuaSA9IGk7CisgICAgfQorCisKKyAgICBwdWJsaWMgaW50IGdldEkoKSB7CisgICAgICAgIHJldHVybiBpOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUluc3RhbmNlTWV0aG9kL1BvbHlhZGljRXhwci5qYXZhLmFmdGVyIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVJbnN0YW5jZU1ldGhvZC9Qb2x5YWRpY0V4cHIuamF2YS5hZnRlcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40Y2Q0OTg3Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVJbnN0YW5jZU1ldGhvZC9Qb2x5YWRpY0V4cHIuamF2YS5hZnRlcgpAQCAtMCwwICsxLDI0IEBACitjbGFzcyBBIHsKKworICAgIHZvaWQgbihCIGIpIHsKKyAgICAgICAgYi5tKHRoaXMpOworICAgIH0KKworfQorCitjbGFzcyBCIHsKKyAgICBwcml2YXRlIGZpbmFsIGludCBpOworCisgICAgcHVibGljIEIoaW50IGkpIHsKKyAgICAgICAgdGhpcy5pID0gaTsKKyAgICB9CisKKworICAgIHB1YmxpYyBpbnQgZ2V0SSgpIHsKKyAgICAgICAgcmV0dXJuIGk7CisgICAgfQorCisgICAgdm9pZCBtKEEgYSkgeworICAgICAgICBTeXN0ZW0ub3V0LnByaW50KCJkaXNwbGF5IGZvciBtZSB0aGUgc2hhcGUiICsgYSArICIgIiArIGdldEkoKSArICJ0aW1lcyIpOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUluc3RhbmNlTWV0aG9kL1F1YWxpZmllZFRoaXMuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlSW5zdGFuY2VNZXRob2QvUXVhbGlmaWVkVGhpcy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUxNDNiMDgKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUluc3RhbmNlTWV0aG9kL1F1YWxpZmllZFRoaXMuamF2YQpAQCAtMCwwICsxLDE0IEBACitjbGFzcyBGb3JlaWduIHsKK30KKworY2xhc3MgTW92ZU1ldGhvZFRlc3QgeworICAgIHZvaWQgYmFyKCkge30KKworICAgIHZvaWQgPGNhcmV0PmZvbyhmaW5hbCBGb3JlaWduIGZvcmVpZ24pIHsKKyAgICAgICAgY2xhc3MgSW5uZXIgeworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIE1vdmVNZXRob2RUZXN0LnRoaXMuYmFyKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUluc3RhbmNlTWV0aG9kL1F1YWxpZmllZFRoaXMuamF2YS5hZnRlciBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlSW5zdGFuY2VNZXRob2QvUXVhbGlmaWVkVGhpcy5qYXZhLmFmdGVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZiNTk0MGIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUluc3RhbmNlTWV0aG9kL1F1YWxpZmllZFRoaXMuamF2YS5hZnRlcgpAQCAtMCwwICsxLDE0IEBACitjbGFzcyBGb3JlaWduIHsKKyAgICB2b2lkIGZvbyhNb3ZlTWV0aG9kVGVzdCBtb3ZlTWV0aG9kVGVzdCkgeworICAgICAgICBjbGFzcyBJbm5lciB7CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbW92ZU1ldGhvZFRlc3QuYmFyKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9CisKK2NsYXNzIE1vdmVNZXRob2RUZXN0IHsKKyAgICB2b2lkIGJhcigpIHt9CisKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlSW5zdGFuY2VNZXRob2QvUXVhbGlmaWVyVG9BcmcxLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUluc3RhbmNlTWV0aG9kL1F1YWxpZmllclRvQXJnMS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFkM2NjZjgKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUluc3RhbmNlTWV0aG9kL1F1YWxpZmllclRvQXJnMS5qYXZhCkBAIC0wLDAgKzEsMjMgQEAKK2NsYXNzIENvbW1hbmRRdWV1ZSB7CisKK30KKworY2xhc3MgQ29tbWFuZE1hbmFnZXIgeworICAgIHZvaWQgPGNhcmV0PmYoQ29tbWFuZFF1ZXVlIHEpIHsKKyAgICB9CisKKyAgICB2b2lkIGcoKSB7CisKKyAgICB9CisKKyAgICBDb21tYW5kUXVldWUgZ2V0Q29tbWFuZFF1ZXVlKCkgeworICAgICAgICByZXR1cm4gbnVsbDsKKyAgICB9Cit9CisKK2NsYXNzIEFwcGxpY2F0aW9uIHsKKyAgICBDb21tYW5kTWFuYWdlciBteU1hbmFnZXI7CisgICAgeworICAgICAgICBteU1hbmFnZXIuZihteU1hbmFnZXIuZ2V0Q29tbWFuZFF1ZXVlKCkpOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUluc3RhbmNlTWV0aG9kL1F1YWxpZmllclRvQXJnMS5qYXZhLmFmdGVyIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVJbnN0YW5jZU1ldGhvZC9RdWFsaWZpZXJUb0FyZzEuamF2YS5hZnRlcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZmEzMTJmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVJbnN0YW5jZU1ldGhvZC9RdWFsaWZpZXJUb0FyZzEuamF2YS5hZnRlcgpAQCAtMCwwICsxLDIzIEBACitjbGFzcyBDb21tYW5kUXVldWUgeworCisgICAgdm9pZCBmKCkgeworICAgIH0KK30KKworY2xhc3MgQ29tbWFuZE1hbmFnZXIgeworCisgICAgdm9pZCBnKCkgeworCisgICAgfQorCisgICAgQ29tbWFuZFF1ZXVlIGdldENvbW1hbmRRdWV1ZSgpIHsKKyAgICAgICAgcmV0dXJuIG51bGw7CisgICAgfQorfQorCitjbGFzcyBBcHBsaWNhdGlvbiB7CisgICAgQ29tbWFuZE1hbmFnZXIgbXlNYW5hZ2VyOworICAgIHsKKyAgICAgICAgbXlNYW5hZ2VyLmdldENvbW1hbmRRdWV1ZSgpLmYoKTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVJbnN0YW5jZU1ldGhvZC9RdWFsaWZpZXJUb0FyZzIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlSW5zdGFuY2VNZXRob2QvUXVhbGlmaWVyVG9BcmcyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjMwMjBmYgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlSW5zdGFuY2VNZXRob2QvUXVhbGlmaWVyVG9BcmcyLmphdmEKQEAgLTAsMCArMSwyNCBAQAorY2xhc3MgQ29tbWFuZFF1ZXVlIHsKKworfQorCitjbGFzcyBDb21tYW5kTWFuYWdlciB7CisgICAgdm9pZCA8Y2FyZXQ+ZihDb21tYW5kUXVldWUgcSkgeworICAgICAgZygpOworICAgIH0KKworICAgIHZvaWQgZygpIHsKKworICAgIH0KKworICAgIENvbW1hbmRRdWV1ZSBnZXRDb21tYW5kUXVldWUoKSB7CisgICAgICAgIHJldHVybiBudWxsOworICAgIH0KK30KKworY2xhc3MgQXBwbGljYXRpb24geworICAgIENvbW1hbmRNYW5hZ2VyIG15TWFuYWdlcjsKKyAgICB7CisgICAgICAgIG15TWFuYWdlci5mKG15TWFuYWdlci5nZXRDb21tYW5kUXVldWUoKSk7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlSW5zdGFuY2VNZXRob2QvUXVhbGlmaWVyVG9BcmcyLmphdmEuYWZ0ZXIgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUluc3RhbmNlTWV0aG9kL1F1YWxpZmllclRvQXJnMi5qYXZhLmFmdGVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU1YmY1ZTcKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUluc3RhbmNlTWV0aG9kL1F1YWxpZmllclRvQXJnMi5qYXZhLmFmdGVyCkBAIC0wLDAgKzEsMjQgQEAKK2NsYXNzIENvbW1hbmRRdWV1ZSB7CisKKyAgICB2b2lkIGYoQ29tbWFuZE1hbmFnZXIgY29tbWFuZE1hbmFnZXIpIHsKKyAgICAgIGNvbW1hbmRNYW5hZ2VyLmcoKTsKKyAgICB9Cit9CisKK2NsYXNzIENvbW1hbmRNYW5hZ2VyIHsKKworICAgIHZvaWQgZygpIHsKKworICAgIH0KKworICAgIENvbW1hbmRRdWV1ZSBnZXRDb21tYW5kUXVldWUoKSB7CisgICAgICAgIHJldHVybiBudWxsOworICAgIH0KK30KKworY2xhc3MgQXBwbGljYXRpb24geworICAgIENvbW1hbmRNYW5hZ2VyIG15TWFuYWdlcjsKKyAgICB7CisgICAgICAgIG15TWFuYWdlci5nZXRDb21tYW5kUXVldWUoKS5mKG15TWFuYWdlcik7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlSW5zdGFuY2VNZXRob2QvUXVhbGlmaWVyVG9BcmczLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUluc3RhbmNlTWV0aG9kL1F1YWxpZmllclRvQXJnMy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFjNGJkNzgKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUluc3RhbmNlTWV0aG9kL1F1YWxpZmllclRvQXJnMy5qYXZhCkBAIC0wLDAgKzEsMjQgQEAKK2NsYXNzIENvbW1hbmRRdWV1ZSB7CisKK30KKworY2xhc3MgQ29tbWFuZE1hbmFnZXIgeworICAgIHZvaWQgPGNhcmV0PmYoQ29tbWFuZFF1ZXVlIHEpIHsKKyAgICAgIG5vdGlmeSgpOworICAgIH0KKworICAgIHZvaWQgZygpIHsKKworICAgIH0KKworICAgIENvbW1hbmRRdWV1ZSBnZXRDb21tYW5kUXVldWUoKSB7CisgICAgICAgIHJldHVybiBudWxsOworICAgIH0KK30KKworY2xhc3MgQXBwbGljYXRpb24geworICAgIENvbW1hbmRNYW5hZ2VyIG15TWFuYWdlcjsKKyAgICB7CisgICAgICAgIG15TWFuYWdlci5mKG15TWFuYWdlci5nZXRDb21tYW5kUXVldWUoKSk7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlSW5zdGFuY2VNZXRob2QvUXVhbGlmaWVyVG9BcmczLmphdmEuYWZ0ZXIgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUluc3RhbmNlTWV0aG9kL1F1YWxpZmllclRvQXJnMy5qYXZhLmFmdGVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVjMzVjN2IKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUluc3RhbmNlTWV0aG9kL1F1YWxpZmllclRvQXJnMy5qYXZhLmFmdGVyCkBAIC0wLDAgKzEsMjQgQEAKK2NsYXNzIENvbW1hbmRRdWV1ZSB7CisKKyAgICB2b2lkIGYoQ29tbWFuZE1hbmFnZXIgY29tbWFuZE1hbmFnZXIpIHsKKyAgICAgIGNvbW1hbmRNYW5hZ2VyLm5vdGlmeSgpOworICAgIH0KK30KKworY2xhc3MgQ29tbWFuZE1hbmFnZXIgeworCisgICAgdm9pZCBnKCkgeworCisgICAgfQorCisgICAgQ29tbWFuZFF1ZXVlIGdldENvbW1hbmRRdWV1ZSgpIHsKKyAgICAgICAgcmV0dXJuIG51bGw7CisgICAgfQorfQorCitjbGFzcyBBcHBsaWNhdGlvbiB7CisgICAgQ29tbWFuZE1hbmFnZXIgbXlNYW5hZ2VyOworICAgIHsKKyAgICAgICAgbXlNYW5hZ2VyLmdldENvbW1hbmRRdWV1ZSgpLmYobXlNYW5hZ2VyKTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVJbnN0YW5jZU1ldGhvZC9RdWFsaWZ5RmllbGQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlSW5zdGFuY2VNZXRob2QvUXVhbGlmeUZpZWxkLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjM5NzI3MwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlSW5zdGFuY2VNZXRob2QvUXVhbGlmeUZpZWxkLmphdmEKQEAgLTAsMCArMSwxMyBAQAorY2xhc3MgRmxpbSB7CisgICAgRmxhbSBmbGFtID0gbmV3IEZsYW0oKTsKKworICAgIHZvaWQgYmU8Y2FyZXQ+ZXAoKSB7fQorCisgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworICAgICAgICBGbGltIGZsaW0gPSBuZXcgRmxpbSgpOworICAgICAgICBmbGltLmJlZXAoKTsKKyAgICB9Cit9CisKK2NsYXNzIEZsYW0geworfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVJbnN0YW5jZU1ldGhvZC9RdWFsaWZ5RmllbGQuamF2YS5hZnRlciBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlSW5zdGFuY2VNZXRob2QvUXVhbGlmeUZpZWxkLmphdmEuYWZ0ZXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWFhMDA5NQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlSW5zdGFuY2VNZXRob2QvUXVhbGlmeUZpZWxkLmphdmEuYWZ0ZXIKQEAgLTAsMCArMSwxMiBAQAorY2xhc3MgRmxpbSB7CisgICAgRmxhbSBmbGFtID0gbmV3IEZsYW0oKTsKKworICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKyAgICAgICAgRmxpbSBmbGltID0gbmV3IEZsaW0oKTsKKyAgICAgICAgZmxpbS5mbGFtLmJlZXAoKTsKKyAgICB9Cit9CisKK2NsYXNzIEZsYW0geworICAgIHZvaWQgYmVlcCgpIHt9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUluc3RhbmNlTWV0aG9kL1F1YWxpZnlGaWVsZEFjY2Vzcy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVJbnN0YW5jZU1ldGhvZC9RdWFsaWZ5RmllbGRBY2Nlc3MuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYjMyYmNmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVJbnN0YW5jZU1ldGhvZC9RdWFsaWZ5RmllbGRBY2Nlc3MuamF2YQpAQCAtMCwwICsxLDEyIEBACitwdWJsaWMgY2xhc3MgVGVzdCB7CisKKyAgICBwcml2YXRlIEJhciBiYXIgPSBuZXcgQmFyKCk7CisKKyAgICBwdWJsaWMgdm9pZCA8Y2FyZXQ+Zm9vKGludCB4KSB7CisgICAgICAgIGJhci54ID0geDsKKyAgICB9CisKKyAgICBwcml2YXRlIHN0YXRpYyBjbGFzcyBCYXIgeworICAgICAgICBwcml2YXRlIGludCB4OworICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlSW5zdGFuY2VNZXRob2QvUXVhbGlmeUZpZWxkQWNjZXNzLmphdmEuYWZ0ZXIgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUluc3RhbmNlTWV0aG9kL1F1YWxpZnlGaWVsZEFjY2Vzcy5qYXZhLmFmdGVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUzZmRkM2EKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUluc3RhbmNlTWV0aG9kL1F1YWxpZnlGaWVsZEFjY2Vzcy5qYXZhLmFmdGVyCkBAIC0wLDAgKzEsMTIgQEAKK3B1YmxpYyBjbGFzcyBUZXN0IHsKKworICAgIHByaXZhdGUgQmFyIGJhciA9IG5ldyBCYXIoKTsKKworICAgIHByaXZhdGUgc3RhdGljIGNsYXNzIEJhciB7CisgICAgICAgIHByaXZhdGUgaW50IHg7CisKKyAgICAgICAgcHVibGljIHZvaWQgZm9vKGludCB4KSB7CisgICAgICAgICAgICB0aGlzLnggPSB4OworICAgICAgICB9CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVJbnN0YW5jZU1ldGhvZC9RdWFsaWZ5VGhpc0hpZXJhcmNoeS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVJbnN0YW5jZU1ldGhvZC9RdWFsaWZ5VGhpc0hpZXJhcmNoeS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgxZmM3ZTAKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUluc3RhbmNlTWV0aG9kL1F1YWxpZnlUaGlzSGllcmFyY2h5LmphdmEKQEAgLTAsMCArMSwxOCBAQAorcHVibGljIGNsYXNzIEQgeworICBwcm90ZWN0ZWQgdm9pZCBpQW1Qcm90ZWN0ZWQoKSB7CisgIH0KK30KKworY2xhc3MgREltcGwgZXh0ZW5kcyBEIHsKKyAgdm9pZCBmPGNhcmV0Pm9vKEYgZikgeworICAgIGNsYXNzIE15UnVubmFibGUgeworICAgICAgcHVibGljIHZvaWQgcnVuKCkgeworICAgICAgICBpQW1Qcm90ZWN0ZWQoKTsKKyAgICAgIH0KKyAgICB9CisgIH0KK30KKworY2xhc3MgRiB7CisKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUluc3RhbmNlTWV0aG9kL1F1YWxpZnlUaGlzSGllcmFyY2h5LmphdmEuYWZ0ZXIgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUluc3RhbmNlTWV0aG9kL1F1YWxpZnlUaGlzSGllcmFyY2h5LmphdmEuYWZ0ZXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2UyZGExMAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlSW5zdGFuY2VNZXRob2QvUXVhbGlmeVRoaXNIaWVyYXJjaHkuamF2YS5hZnRlcgpAQCAtMCwwICsxLDE4IEBACitwdWJsaWMgY2xhc3MgRCB7CisgIHByb3RlY3RlZCB2b2lkIGlBbVByb3RlY3RlZCgpIHsKKyAgfQorfQorCitjbGFzcyBESW1wbCBleHRlbmRzIEQgeworfQorCitjbGFzcyBGIHsKKworICAgIHZvaWQgZm9vKEQgZCkgeworICAgICAgY2xhc3MgTXlSdW5uYWJsZSB7CisgICAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKKyAgICAgICAgICBkLmlBbVByb3RlY3RlZCgpOworICAgICAgICB9CisgICAgICB9CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlSW5zdGFuY2VNZXRob2QvUmVjdXJzaXZlLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUluc3RhbmNlTWV0aG9kL1JlY3Vyc2l2ZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBlODFlZjUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUluc3RhbmNlTWV0aG9kL1JlY3Vyc2l2ZS5qYXZhCkBAIC0wLDAgKzEsNiBAQAorcHVibGljIGNsYXNzIE1vdmVNZXRob2RUZXN0IHsKKyAgdm9pZCA8Y2FyZXQ+Zm9vIChNb3ZlTWV0aG9kVGVzdCBmKSB7CisgICAgZm9vKGYpOworICAgIGYuZm9vKGYpOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVJbnN0YW5jZU1ldGhvZC9SZWN1cnNpdmUuamF2YS5hZnRlciBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlSW5zdGFuY2VNZXRob2QvUmVjdXJzaXZlLmphdmEuYWZ0ZXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTJjYmI3YgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlSW5zdGFuY2VNZXRob2QvUmVjdXJzaXZlLmphdmEuYWZ0ZXIKQEAgLTAsMCArMSw2IEBACitwdWJsaWMgY2xhc3MgTW92ZU1ldGhvZFRlc3QgeworICAgIHZvaWQgZm9vKCkgeworICAgICAgZm9vKCk7CisgICAgICBmb28oKTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVJbnN0YW5jZU1ldGhvZC9SZWN1cnNpdmUxLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUluc3RhbmNlTWV0aG9kL1JlY3Vyc2l2ZTEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZDRjYjU4Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVJbnN0YW5jZU1ldGhvZC9SZWN1cnNpdmUxLmphdmEKQEAgLTAsMCArMSwxMyBAQAorY2xhc3MgRmlyc3RDbGFzcyB7CisgICAgdm9pZCA8Y2FyZXQ+eChTZWNvbmRDbGFzcyBzYykgeworICAgICAgICBpZiAoc2MgIT0gbnVsbCkgeChzYy5nKCkpOworICAgIH0KKworICAgIHZvaWQgeSgpIHsKKyAgICAgICAgeChuZXcgU2Vjb25kQ2xhc3MoKSk7CisgICAgfQorfQorCitjbGFzcyBTZWNvbmRDbGFzcyB7CisgICAgU2Vjb25kQ2xhc3MgZygpIHsgcmV0dXJuIG51bGw7IH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUluc3RhbmNlTWV0aG9kL1JlY3Vyc2l2ZTEuamF2YS5hZnRlciBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlSW5zdGFuY2VNZXRob2QvUmVjdXJzaXZlMS5qYXZhLmFmdGVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE5Y2U4NGQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUluc3RhbmNlTWV0aG9kL1JlY3Vyc2l2ZTEuamF2YS5hZnRlcgpAQCAtMCwwICsxLDE0IEBACitjbGFzcyBGaXJzdENsYXNzIHsKKworICAgIHZvaWQgeSgpIHsKKyAgICAgICAgbmV3IFNlY29uZENsYXNzKCkueCgpOworICAgIH0KK30KKworY2xhc3MgU2Vjb25kQ2xhc3MgeworICAgIFNlY29uZENsYXNzIGcoKSB7IHJldHVybiBudWxsOyB9CisKKyAgICB2b2lkIHgoKSB7CisgICAgICAgIGlmICh0aGlzICE9IG51bGwpIGcoKS54KCk7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlSW5zdGFuY2VNZXRob2QvU2FtZU5hbWVzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUluc3RhbmNlTWV0aG9kL1NhbWVOYW1lcy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhlNGY2MTIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUluc3RhbmNlTWV0aG9kL1NhbWVOYW1lcy5qYXZhCkBAIC0wLDAgKzEsMTMgQEAKK3B1YmxpYyBjbGFzcyBBIHsKKyAgICB2b2lkIGY8Y2FyZXQ+b28oQiBiKSB7CisgICAgICBiLmZvbygiIik7CisgICAgfQorfQorCitjbGFzcyBCIHsKKyAgdm9pZCBmb28oU3RyaW5nIHMpIHsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4ocyk7CisgIH0KK30KKworCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUluc3RhbmNlTWV0aG9kL1NhbWVOYW1lcy5qYXZhLmFmdGVyIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVJbnN0YW5jZU1ldGhvZC9TYW1lTmFtZXMuamF2YS5hZnRlcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZjQzYjVhCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVJbnN0YW5jZU1ldGhvZC9TYW1lTmFtZXMuamF2YS5hZnRlcgpAQCAtMCwwICsxLDE0IEBACitwdWJsaWMgY2xhc3MgQSB7Cit9CisKK2NsYXNzIEIgeworICB2b2lkIGZvbyhTdHJpbmcgcykgeworICAgIFN5c3RlbS5vdXQucHJpbnRsbihzKTsKKyAgfQorCisgICAgdm9pZCBmb28oKSB7CisgICAgICBmb28oIiIpOworICAgIH0KK30KKworCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUluc3RhbmNlTWV0aG9kL1NhbWVOYW1lc1JlY3Vyc2lvbi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVJbnN0YW5jZU1ldGhvZC9TYW1lTmFtZXNSZWN1cnNpb24uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MzJkMDVjCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVJbnN0YW5jZU1ldGhvZC9TYW1lTmFtZXNSZWN1cnNpb24uamF2YQpAQCAtMCwwICsxLDE2IEBACitwdWJsaWMgY2xhc3MgQSB7CisgICAgdm9pZCBmPGNhcmV0Pm9vKEIgYikgeworICAgICAgYi5mb28oIiIpOworICAgICAgaWYgKGZhbHNlKSB7CisgICAgICAgIGZvbyhiKTsKKyAgICAgIH0KKyAgfQorfQorCitjbGFzcyBCIHsKKyAgdm9pZCBmb28oU3RyaW5nIHMpIHsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4ocyk7CisgIH0KK30KKworCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUluc3RhbmNlTWV0aG9kL1NhbWVOYW1lc1JlY3Vyc2lvbi5qYXZhLmFmdGVyIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVJbnN0YW5jZU1ldGhvZC9TYW1lTmFtZXNSZWN1cnNpb24uamF2YS5hZnRlcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NDVjOTVjCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVJbnN0YW5jZU1ldGhvZC9TYW1lTmFtZXNSZWN1cnNpb24uamF2YS5hZnRlcgpAQCAtMCwwICsxLDE3IEBACitwdWJsaWMgY2xhc3MgQSB7Cit9CisKK2NsYXNzIEIgeworICB2b2lkIGZvbyhTdHJpbmcgcykgeworICAgIFN5c3RlbS5vdXQucHJpbnRsbihzKTsKKyAgfQorCisgICAgdm9pZCBmb28oKSB7CisgICAgICBmb28oIiIpOworICAgICAgaWYgKGZhbHNlKSB7CisgICAgICAgIGZvbygpOworICAgICAgfQorICB9Cit9CisKKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVJbnN0YW5jZU1ldGhvZC9TaW1wbGUuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlSW5zdGFuY2VNZXRob2QvU2ltcGxlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDQzNWQ1MAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlSW5zdGFuY2VNZXRob2QvU2ltcGxlLmphdmEKQEAgLTAsMCArMSwxNCBAQAorY2xhc3MgRm9yZWlnbiB7Cit9CisKK2NsYXNzIFRlc3QgeworICAgIGludCBmaWVsZDsKKworICAgIHZvaWQgPGNhcmV0PmZvbyAoRm9yZWlnbiBmKSB7CisgICAgICAgIGZpZWxkKys7CisgICAgfQorCisgICAgdm9pZCBiYXIgKCkgeworICAgICAgICBmb28obmV3IEZvcmVpZ24oKSk7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVJbnN0YW5jZU1ldGhvZC9TaW1wbGUuamF2YS5hZnRlciBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlSW5zdGFuY2VNZXRob2QvU2ltcGxlLmphdmEuYWZ0ZXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjFmODFiNgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlSW5zdGFuY2VNZXRob2QvU2ltcGxlLmphdmEuYWZ0ZXIKQEAgLTAsMCArMSwxMyBAQAorY2xhc3MgRm9yZWlnbiB7CisgICAgdm9pZCBmb28oVGVzdCB0ZXN0KSB7CisgICAgICAgIHRlc3QuZmllbGQrKzsKKyAgICB9Cit9CisKK2NsYXNzIFRlc3QgeworICAgIGludCBmaWVsZDsKKworICAgIHZvaWQgYmFyICgpIHsKKyAgICAgICAgbmV3IEZvcmVpZ24oKS5mb28odGhpcyk7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVJbnN0YW5jZU1ldGhvZC9TaW1wbGVXaXRoVGFyZ2V0RmllbGQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlSW5zdGFuY2VNZXRob2QvU2ltcGxlV2l0aFRhcmdldEZpZWxkLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTJkMzc1NwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlSW5zdGFuY2VNZXRob2QvU2ltcGxlV2l0aFRhcmdldEZpZWxkLmphdmEKQEAgLTAsMCArMSwxNSBAQAorY2xhc3MgRm9yZWlnbiB7Cit9CisKK3B1YmxpYyBhYnN0cmFjdCBjbGFzcyBUZXN0MSB7CisgICAgaW50IGZpZWxkOworICAgIEZvcmVpZ24gbXlGb3JlaWduOworCisgICAgdm9pZCA8Y2FyZXQ+Zm9vICgpIHsKKyAgICAgICAgZmllbGQrKzsKKyAgICB9CisKKyAgICB2b2lkIGJhciAoKSB7CisgICAgICAgIGZvbygpOworICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlSW5zdGFuY2VNZXRob2QvU2ltcGxlV2l0aFRhcmdldEZpZWxkLmphdmEuYWZ0ZXIgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUluc3RhbmNlTWV0aG9kL1NpbXBsZVdpdGhUYXJnZXRGaWVsZC5qYXZhLmFmdGVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJmYTgzODIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUluc3RhbmNlTWV0aG9kL1NpbXBsZVdpdGhUYXJnZXRGaWVsZC5qYXZhLmFmdGVyCkBAIC0wLDAgKzEsMTQgQEAKK2NsYXNzIEZvcmVpZ24geworICAgIHZvaWQgZm9vKFRlc3QxIHRlc3QxKSB7CisgICAgICAgIHRlc3QxLmZpZWxkKys7CisgICAgfQorfQorCitwdWJsaWMgYWJzdHJhY3QgY2xhc3MgVGVzdDEgeworICAgIGludCBmaWVsZDsKKyAgICBGb3JlaWduIG15Rm9yZWlnbjsKKworICAgIHZvaWQgYmFyICgpIHsKKyAgICAgICAgbXlGb3JlaWduLmZvbyh0aGlzKTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUluc3RhbmNlTWV0aG9kL1N0cmlwRmllbGRRdWFsaWZpZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlSW5zdGFuY2VNZXRob2QvU3RyaXBGaWVsZFF1YWxpZmllci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkzNzY5YWEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUluc3RhbmNlTWV0aG9kL1N0cmlwRmllbGRRdWFsaWZpZXIuamF2YQpAQCAtMCwwICsxLDEyIEBACitwdWJsaWMgY2xhc3MgVGVzdCB7CisKKyAgICBwcml2YXRlIEJhciBiYXIgPSBuZXcgQmFyKCk7CisKKyAgICBwdWJsaWMgdm9pZCA8Y2FyZXQ+Zm9vKGludCB5KSB7CisgICAgICAgIGJhci54ID0geTsKKyAgICB9CisKKyAgICBwcml2YXRlIHN0YXRpYyBjbGFzcyBCYXIgeworICAgICAgICBwcml2YXRlIGludCB4OworICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlSW5zdGFuY2VNZXRob2QvU3RyaXBGaWVsZFF1YWxpZmllci5qYXZhLmFmdGVyIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVJbnN0YW5jZU1ldGhvZC9TdHJpcEZpZWxkUXVhbGlmaWVyLmphdmEuYWZ0ZXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGExYWJmMAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlSW5zdGFuY2VNZXRob2QvU3RyaXBGaWVsZFF1YWxpZmllci5qYXZhLmFmdGVyCkBAIC0wLDAgKzEsMTIgQEAKK3B1YmxpYyBjbGFzcyBUZXN0IHsKKworICAgIHByaXZhdGUgQmFyIGJhciA9IG5ldyBCYXIoKTsKKworICAgIHByaXZhdGUgc3RhdGljIGNsYXNzIEJhciB7CisgICAgICAgIHByaXZhdGUgaW50IHg7CisKKyAgICAgICAgcHVibGljIHZvaWQgZm9vKGludCB5KSB7CisgICAgICAgICAgICB4ID0geTsKKyAgICAgICAgfQorICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlSW5zdGFuY2VNZXRob2QvVGhpc0luQW5vbnltb3VzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUluc3RhbmNlTWV0aG9kL1RoaXNJbkFub255bW91cy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg3NTQ3NWQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUluc3RhbmNlTWV0aG9kL1RoaXNJbkFub255bW91cy5qYXZhCkBAIC0wLDAgKzEsMTYgQEAKK3B1YmxpYyBjbGFzcyBUZXN0IHsKKyAgICBwcml2YXRlIHZvaWQgcHJlcGFyZTxjYXJldD5Bbm9ueW1vdXNDbGFzc2VzKEpldEVsZW1lbnQgYUNsYXNzKSB7CisgICAgICAgIGFDbGFzcy5hY2NlcHRDaGlsZHJlbihuZXcgSmV0VmlzaXRvcigpIHsKKyAgICAgICAgICAgIHB1YmxpYyB2b2lkIHZpc2l0SmV0RWxlbWVudChKZXRFbGVtZW50IGVsZW1lbnQpIHsKKyAgICAgICAgICAgICAgICBlbGVtZW50LmFjY2VwdENoaWxkcmVuKHRoaXMpOworICAgICAgICAgICAgfQorICAgICAgICB9KTsKKyAgICB9Cit9CisKKworY2xhc3MgSmV0RWxlbWVudCB7CisgICAgdm9pZCBhY2NlcHRDaGlsZHJlbihKZXRWaXNpdG9yIHYpIHt9Cit9CisKK2NsYXNzIEpldFZpc2l0b3Ige30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUluc3RhbmNlTWV0aG9kL1RoaXNJbkFub255bW91cy5qYXZhLmFmdGVyIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVJbnN0YW5jZU1ldGhvZC9UaGlzSW5Bbm9ueW1vdXMuamF2YS5hZnRlcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MTgwOThmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVJbnN0YW5jZU1ldGhvZC9UaGlzSW5Bbm9ueW1vdXMuamF2YS5hZnRlcgpAQCAtMCwwICsxLDE3IEBACitwdWJsaWMgY2xhc3MgVGVzdCB7Cit9CisKKworY2xhc3MgSmV0RWxlbWVudCB7CisgICAgdm9pZCBhY2NlcHRDaGlsZHJlbihKZXRWaXNpdG9yIHYpIHt9CisKKyAgICBwcml2YXRlIHZvaWQgcHJlcGFyZUFub255bW91c0NsYXNzZXMoKSB7CisgICAgICAgIGFjY2VwdENoaWxkcmVuKG5ldyBKZXRWaXNpdG9yKCkgeworICAgICAgICAgICAgcHVibGljIHZvaWQgdmlzaXRKZXRFbGVtZW50KEpldEVsZW1lbnQgZWxlbWVudCkgeworICAgICAgICAgICAgICAgIGVsZW1lbnQuYWNjZXB0Q2hpbGRyZW4odGhpcyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0pOworICAgIH0KK30KKworY2xhc3MgSmV0VmlzaXRvciB7fQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlSW5zdGFuY2VNZXRob2QvVHdvUGFyYW1zLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUluc3RhbmNlTWV0aG9kL1R3b1BhcmFtcy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVkMWU1ZTUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUluc3RhbmNlTWV0aG9kL1R3b1BhcmFtcy5qYXZhCkBAIC0wLDAgKzEsMTIgQEAKK2NsYXNzIEZvcmVpZ24geworfQorCitjbGFzcyBNb3ZlTWV0aG9kVGVzdCB7CisgICAgdm9pZCBiYXIoSW5uZXIgaW5uZXIpIHt9CisKKyAgICBjbGFzcyBJbm5lciB7CisgICAgICB2b2lkIDxjYXJldD5mb28oZmluYWwgRm9yZWlnbiBmb3JlaWduKSB7CisgICAgICAgICBiYXIgKHRoaXMpOworICAgICAgfQorICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlSW5zdGFuY2VNZXRob2QvVHdvUGFyYW1zLmphdmEuYWZ0ZXIgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUluc3RhbmNlTWV0aG9kL1R3b1BhcmFtcy5qYXZhLmFmdGVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZkYzBkZjQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUluc3RhbmNlTWV0aG9kL1R3b1BhcmFtcy5qYXZhLmFmdGVyCkBAIC0wLDAgKzEsMTIgQEAKK2NsYXNzIEZvcmVpZ24geworICAgIHZvaWQgZm9vKE1vdmVNZXRob2RUZXN0IG1vdmVNZXRob2RUZXN0LCBNb3ZlTWV0aG9kVGVzdC5Jbm5lciBpbm5lcikgeworICAgICAgIG1vdmVNZXRob2RUZXN0LmJhciAoaW5uZXIpOworICAgIH0KK30KKworY2xhc3MgTW92ZU1ldGhvZFRlc3QgeworICAgIHZvaWQgYmFyKElubmVyIGlubmVyKSB7fQorCisgICAgY2xhc3MgSW5uZXIgeworICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlSW5zdGFuY2VNZXRob2QvV2l0aElubmVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUluc3RhbmNlTWV0aG9kL1dpdGhJbm5lci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUwZGMzZDQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZUluc3RhbmNlTWV0aG9kL1dpdGhJbm5lci5qYXZhCkBAIC0wLDAgKzEsMTYgQEAKK2NsYXNzIEZvcmVpZ24geworICAgIGNsYXNzIElubmVyIHt9Cit9CisKKworcHVibGljIGFic3RyYWN0IGNsYXNzIFRlc3QxIHsKKyAgICB2b2lkIDxjYXJldD5mb28gKEZvcmVpZ24gZiwgSW5uZXIgaSkgeworICAgICAgbmV3IElubmVyKCk7CisgICAgfQorCisgICAgY2xhc3MgSW5uZXIge30KKworICAgIHZvaWQgYmFyICgpIHsKKyAgICAgICAgZm9vKG5ldyBGb3JlaWduKCksIG5ldyBJbm5lcigpKTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVJbnN0YW5jZU1ldGhvZC9XaXRoSW5uZXIuamF2YS5hZnRlciBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlSW5zdGFuY2VNZXRob2QvV2l0aElubmVyLmphdmEuYWZ0ZXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWMwNzE3MAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlSW5zdGFuY2VNZXRob2QvV2l0aElubmVyLmphdmEuYWZ0ZXIKQEAgLTAsMCArMSwxNyBAQAorY2xhc3MgRm9yZWlnbiB7CisgICAgdm9pZCBmb28oVGVzdDEuSW5uZXIgaSwgVGVzdDEgdGVzdDEpIHsKKyAgICAgIHRlc3QxLm5ldyBJbm5lcigpOworICAgIH0KKworICAgIGNsYXNzIElubmVyIHt9Cit9CisKKworcHVibGljIGFic3RyYWN0IGNsYXNzIFRlc3QxIHsKKworICAgIGNsYXNzIElubmVyIHt9CisKKyAgICB2b2lkIGJhciAoKSB7CisgICAgICAgIG5ldyBGb3JlaWduKCkuZm9vKG5ldyBJbm5lcigpLCB0aGlzKTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVNZW1iZXJzL0lERUFERVYxMTQxNi9hZnRlci9ZLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZU1lbWJlcnMvSURFQURFVjExNDE2L2FmdGVyL1kuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZTc4ZjBmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVNZW1iZXJzL0lERUFERVYxMTQxNi9hZnRlci9ZLmphdmEKQEAgLTAsMCArMSw2IEBACitjbGFzcyBYIHsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBBID0gIklERUEgaXMgdGhlIGJlc3QiOworfQorCitpbnRlcmZhY2UgWSB7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVNZW1iZXJzL0lERUFERVYxMTQxNi9iZWZvcmUvWS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVNZW1iZXJzL0lERUFERVYxMTQxNi9iZWZvcmUvWS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMwYTc5MmMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZU1lbWJlcnMvSURFQURFVjExNDE2L2JlZm9yZS9ZLmphdmEKQEAgLTAsMCArMSw2IEBACitjbGFzcyBYIHsKK30KKworaW50ZXJmYWNlIFkgeworICAgIFN0cmluZyBBID0gIklERUEgaXMgdGhlIGJlc3QiOworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlTWVtYmVycy9JREVBREVWMTI0NDgvYWZ0ZXIvVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVNZW1iZXJzL0lERUFERVYxMjQ0OC9hZnRlci9UZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTEyZjViNwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlTWVtYmVycy9JREVBREVWMTI0NDgvYWZ0ZXIvVGVzdC5qYXZhCkBAIC0wLDAgKzEsMTEgQEAKK0BpbnRlcmZhY2UgU29tZUFubm90YXRpb24geworICAgIFN0cmluZyB2YWx1ZSgpOworfQorCitAU29tZUFubm90YXRpb24oQS5DT05TVCkKK2ludGVyZmFjZSBBIHsKKyAgICBTdHJpbmcgQ09OU1QgPSAiNDIiOworfQorCitpbnRlcmZhY2UgQiB7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVNZW1iZXJzL0lERUFERVYxMjQ0OC9iZWZvcmUvVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVNZW1iZXJzL0lERUFERVYxMjQ0OC9iZWZvcmUvVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjllNjJjMDAKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZU1lbWJlcnMvSURFQURFVjEyNDQ4L2JlZm9yZS9UZXN0LmphdmEKQEAgLTAsMCArMSw4IEBACitAaW50ZXJmYWNlIFNvbWVBbm5vdGF0aW9uIHsKKyAgICBTdHJpbmcgdmFsdWUoKTsKK30KKworQFNvbWVBbm5vdGF0aW9uKEIuQ09OU1QpCitpbnRlcmZhY2UgQSB7fQorCitpbnRlcmZhY2UgQiB7IFN0cmluZyBDT05TVCA9ICI0MiI7IH0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZU1lbWJlcnMvZGVwZW5kYW50RmllbGRzL2FmdGVyL0EuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlTWVtYmVycy9kZXBlbmRhbnRGaWVsZHMvYWZ0ZXIvQS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYyMTNkMTIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZU1lbWJlcnMvZGVwZW5kYW50RmllbGRzL2FmdGVyL0EuamF2YQpAQCAtMCwwICsxLDYgQEAKK3B1YmxpYyBjbGFzcyBBIHsKKyAgICB2b2lkIGZvbygpe30KKworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIE9ORSA9ICIiOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFRXTyA9IE9ORSArICIiOworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlTWVtYmVycy9kZXBlbmRhbnRGaWVsZHMvYWZ0ZXIvQi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVNZW1iZXJzL2RlcGVuZGFudEZpZWxkcy9hZnRlci9CLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWJiZTRkYwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlTWVtYmVycy9kZXBlbmRhbnRGaWVsZHMvYWZ0ZXIvQi5qYXZhCkBAIC0wLDAgKzEsMiBAQAorcHVibGljIGNsYXNzIEIgeworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlTWVtYmVycy9kZXBlbmRhbnRGaWVsZHMvYmVmb3JlL0EuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlTWVtYmVycy9kZXBlbmRhbnRGaWVsZHMvYmVmb3JlL0EuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MTdjYmZjCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVNZW1iZXJzL2RlcGVuZGFudEZpZWxkcy9iZWZvcmUvQS5qYXZhCkBAIC0wLDAgKzEsNCBAQAorcHVibGljIGNsYXNzIEEgeworICAgIHZvaWQgZm9vKCl7fQorICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFRXTyA9IEIuT05FICsgIiI7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVNZW1iZXJzL2RlcGVuZGFudEZpZWxkcy9iZWZvcmUvQi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVNZW1iZXJzL2RlcGVuZGFudEZpZWxkcy9iZWZvcmUvQi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFjZjM0NzgKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZU1lbWJlcnMvZGVwZW5kYW50RmllbGRzL2JlZm9yZS9CLmphdmEKQEAgLTAsMCArMSwzIEBACitwdWJsaWMgY2xhc3MgQiB7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgT05FID0gIiI7IAorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlTWVtYmVycy9lbnVtQ29uc3RhbnQvYWZ0ZXIvQS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVNZW1iZXJzL2VudW1Db25zdGFudC9hZnRlci9BLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTMzMzA1OQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlTWVtYmVycy9lbnVtQ29uc3RhbnQvYWZ0ZXIvQS5qYXZhCkBAIC0wLDAgKzEsNCBAQAorcHVibGljIGVudW0gQSB7CisgICAgT05FKCIiKTsKKyAgQShTdHJpbmcgcyl7fQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlTWVtYmVycy9lbnVtQ29uc3RhbnQvYWZ0ZXIvQi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVNZW1iZXJzL2VudW1Db25zdGFudC9hZnRlci9CLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWJiZTRkYwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlTWVtYmVycy9lbnVtQ29uc3RhbnQvYWZ0ZXIvQi5qYXZhCkBAIC0wLDAgKzEsMiBAQAorcHVibGljIGNsYXNzIEIgeworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlTWVtYmVycy9lbnVtQ29uc3RhbnQvYmVmb3JlL0EuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlTWVtYmVycy9lbnVtQ29uc3RhbnQvYmVmb3JlL0EuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjdmNGJlCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVNZW1iZXJzL2VudW1Db25zdGFudC9iZWZvcmUvQS5qYXZhCkBAIC0wLDAgKzEsNCBAQAorcHVibGljIGVudW0gQSB7CisgIDsKKyAgQShTdHJpbmcgcyl7fQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlTWVtYmVycy9lbnVtQ29uc3RhbnQvYmVmb3JlL0IuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlTWVtYmVycy9lbnVtQ29uc3RhbnQvYmVmb3JlL0IuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hY2YzNDc4Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVNZW1iZXJzL2VudW1Db25zdGFudC9iZWZvcmUvQi5qYXZhCkBAIC0wLDAgKzEsMyBAQAorcHVibGljIGNsYXNzIEIgeworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIE9ORSA9ICIiOyAKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZU1lbWJlcnMvZW51bUNvbnN0YW50RnJvbUNhc2VTdGF0ZW1lbnQvYWZ0ZXIvQS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVNZW1iZXJzL2VudW1Db25zdGFudEZyb21DYXNlU3RhdGVtZW50L2FmdGVyL0EuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNzYyOGQ0Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVNZW1iZXJzL2VudW1Db25zdGFudEZyb21DYXNlU3RhdGVtZW50L2FmdGVyL0EuamF2YQpAQCAtMCwwICsxLDQgQEAKK3B1YmxpYyBlbnVtIEEgeworICAgIE9ORSgxKTsKKyAgQShpbnQgaSl7fQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlTWVtYmVycy9lbnVtQ29uc3RhbnRGcm9tQ2FzZVN0YXRlbWVudC9hZnRlci9CLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZU1lbWJlcnMvZW51bUNvbnN0YW50RnJvbUNhc2VTdGF0ZW1lbnQvYWZ0ZXIvQi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJhZTE0YTMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZU1lbWJlcnMvZW51bUNvbnN0YW50RnJvbUNhc2VTdGF0ZW1lbnQvYWZ0ZXIvQi5qYXZhCkBAIC0wLDAgKzEsMTcgQEAKK3B1YmxpYyBjbGFzcyBCIHsKKyAgICB2b2lkIGZvbyhBIGkpIHsKKyAgICAgICAgc3dpdGNoIChpKSB7CisgICAgICAgICAgICBjYXNlIE9ORSA6CisgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorfQorCitjbGFzcyBVc2FnZSB7CisgICAgdm9pZCBmb28oQSBpKSB7CisgICAgICAgIHN3aXRjaCAoaSkgeworICAgICAgICAgICAgY2FzZSBPTkUgOgorICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZU1lbWJlcnMvZW51bUNvbnN0YW50RnJvbUNhc2VTdGF0ZW1lbnQvYmVmb3JlL0EuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlTWVtYmVycy9lbnVtQ29uc3RhbnRGcm9tQ2FzZVN0YXRlbWVudC9iZWZvcmUvQS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg2ZTk2MzIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZU1lbWJlcnMvZW51bUNvbnN0YW50RnJvbUNhc2VTdGF0ZW1lbnQvYmVmb3JlL0EuamF2YQpAQCAtMCwwICsxLDQgQEAKK3B1YmxpYyBlbnVtIEEgeworICA7CisgIEEoaW50IGkpe30KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZU1lbWJlcnMvZW51bUNvbnN0YW50RnJvbUNhc2VTdGF0ZW1lbnQvYmVmb3JlL0IuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlTWVtYmVycy9lbnVtQ29uc3RhbnRGcm9tQ2FzZVN0YXRlbWVudC9iZWZvcmUvQi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxNWQwZWEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZU1lbWJlcnMvZW51bUNvbnN0YW50RnJvbUNhc2VTdGF0ZW1lbnQvYmVmb3JlL0IuamF2YQpAQCAtMCwwICsxLDE4IEBACitwdWJsaWMgY2xhc3MgQiB7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgT05FID0gMTsKKyAgICB2b2lkIGZvbyhBIGkpIHsKKyAgICAgICAgc3dpdGNoIChpKSB7CisgICAgICAgICAgICBjYXNlIE9ORSA6CisgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorfQorCitjbGFzcyBVc2FnZSB7CisgICAgdm9pZCBmb28oQSBpKSB7CisgICAgICAgIHN3aXRjaCAoaSkgeworICAgICAgICAgICAgY2FzZSBCLk9ORSA6CisgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlTWVtYmVycy9lc2NhbGF0ZVZpc2liaWxpdHkvYWZ0ZXIvcGFjazEvQS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVNZW1iZXJzL2VzY2FsYXRlVmlzaWJpbGl0eS9hZnRlci9wYWNrMS9BLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzBmZDViYgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlTWVtYmVycy9lc2NhbGF0ZVZpc2liaWxpdHkvYWZ0ZXIvcGFjazEvQS5qYXZhCkBAIC0wLDAgKzEsOCBAQAorcGFja2FnZSBwYWNrMTsKKworcHVibGljIGNsYXNzIEEgeworCisgICAgcHVibGljIHN0YXRpYyB2b2lkIGZvbygpIHsKKyAgICAgICAgQy5iYXIoKTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVNZW1iZXJzL2VzY2FsYXRlVmlzaWJpbGl0eS9hZnRlci9wYWNrMS9DLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZU1lbWJlcnMvZXNjYWxhdGVWaXNpYmlsaXR5L2FmdGVyL3BhY2sxL0MuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZGI5NDJmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVNZW1iZXJzL2VzY2FsYXRlVmlzaWJpbGl0eS9hZnRlci9wYWNrMS9DLmphdmEKQEAgLTAsMCArMSw0IEBACitwYWNrYWdlIHBhY2sxOworcHVibGljIGNsYXNzIEMgeworICAgIHN0YXRpYyB2b2lkIGJhcigpe30KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZU1lbWJlcnMvZXNjYWxhdGVWaXNpYmlsaXR5L2JlZm9yZS9wYWNrMS9BLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZU1lbWJlcnMvZXNjYWxhdGVWaXNpYmlsaXR5L2JlZm9yZS9wYWNrMS9BLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDBhZTQ5ZgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlTWVtYmVycy9lc2NhbGF0ZVZpc2liaWxpdHkvYmVmb3JlL3BhY2sxL0EuamF2YQpAQCAtMCwwICsxLDkgQEAKK3BhY2thZ2UgcGFjazE7CisKK3B1YmxpYyBjbGFzcyBBIHsKKyAgICBwcml2YXRlIHN0YXRpYyB2b2lkIGJhcigpe30KKworICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBmb28oKSB7CisgICAgICAgIGJhcigpOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZU1lbWJlcnMvZXNjYWxhdGVWaXNpYmlsaXR5L2JlZm9yZS9wYWNrMS9DLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZU1lbWJlcnMvZXNjYWxhdGVWaXNpYmlsaXR5L2JlZm9yZS9wYWNrMS9DLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDE0NWEzOAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlTWVtYmVycy9lc2NhbGF0ZVZpc2liaWxpdHkvYmVmb3JlL3BhY2sxL0MuamF2YQpAQCAtMCwwICsxLDIgQEAKK3BhY2thZ2UgcGFjazE7CitwdWJsaWMgY2xhc3MgQyB7fQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlTWVtYmVycy9lc2NhbGF0ZVZpc2liaWxpdHkxL2FmdGVyL0EuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlTWVtYmVycy9lc2NhbGF0ZVZpc2liaWxpdHkxL2FmdGVyL0EuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40Njk1NjQ1Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVNZW1iZXJzL2VzY2FsYXRlVmlzaWJpbGl0eTEvYWZ0ZXIvQS5qYXZhCkBAIC0wLDAgKzEsNSBAQAorcHVibGljIGludGVyZmFjZSBBIHsKKyAgICB2b2lkIGJhcigpIHsKKyAgICBCLmZvbygiIik7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZU1lbWJlcnMvZXNjYWxhdGVWaXNpYmlsaXR5MS9hZnRlci9CLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZU1lbWJlcnMvZXNjYWxhdGVWaXNpYmlsaXR5MS9hZnRlci9CLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmFkM2VlNgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlTWVtYmVycy9lc2NhbGF0ZVZpc2liaWxpdHkxL2FmdGVyL0IuamF2YQpAQCAtMCwwICsxLDYgQEAKK3B1YmxpYyBjbGFzcyBCIHsKKyAgICBzdGF0aWMgdm9pZCBmb28oU3RyaW5nIHMpIHt9CisKKyAgICB2b2lkIGZvbyhpbnQgeCkgeworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVNZW1iZXJzL2VzY2FsYXRlVmlzaWJpbGl0eTEvYmVmb3JlL0EuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlTWVtYmVycy9lc2NhbGF0ZVZpc2liaWxpdHkxL2JlZm9yZS9BLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjcwODQxYgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlTWVtYmVycy9lc2NhbGF0ZVZpc2liaWxpdHkxL2JlZm9yZS9BLmphdmEKQEAgLTAsMCArMSw2IEBACitwdWJsaWMgaW50ZXJmYWNlIEEgeworICBwcml2YXRlIHN0YXRpYyB2b2lkIGZvbyhTdHJpbmcgcykge30KKyAgdm9pZCBiYXIoKSB7CisgICAgZm9vKCIiKTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlTWVtYmVycy9lc2NhbGF0ZVZpc2liaWxpdHkxL2JlZm9yZS9CLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZU1lbWJlcnMvZXNjYWxhdGVWaXNpYmlsaXR5MS9iZWZvcmUvQi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRjNTk5ZTEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZU1lbWJlcnMvZXNjYWxhdGVWaXNpYmlsaXR5MS9iZWZvcmUvQi5qYXZhCkBAIC0wLDAgKzEsNCBAQAorcHVibGljIGNsYXNzIEIgeworICB2b2lkIGZvbyhpbnQgeCkgeworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVNZW1iZXJzL2V4cGxpY2l0U3RhdGljSW1wb3J0L2FmdGVyL0EuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlTWVtYmVycy9leHBsaWNpdFN0YXRpY0ltcG9ydC9hZnRlci9BLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODdiMjM1YQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlTWVtYmVycy9leHBsaWNpdFN0YXRpY0ltcG9ydC9hZnRlci9BLmphdmEKQEAgLTAsMCArMSw3IEBACitpbXBvcnQgc3RhdGljIEIuWjsKKworcHVibGljIGNsYXNzIEEgeworICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJaID0gIiArIFopOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVNZW1iZXJzL2V4cGxpY2l0U3RhdGljSW1wb3J0L2FmdGVyL0IuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlTWVtYmVycy9leHBsaWNpdFN0YXRpY0ltcG9ydC9hZnRlci9CLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjhmOTVlNQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlTWVtYmVycy9leHBsaWNpdFN0YXRpY0ltcG9ydC9hZnRlci9CLmphdmEKQEAgLTAsMCArMSwzIEBACitwdWJsaWMgY2xhc3MgQiB7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgWiA9ICJ6IjsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZU1lbWJlcnMvZXhwbGljaXRTdGF0aWNJbXBvcnQvYWZ0ZXIvQy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVNZW1iZXJzL2V4cGxpY2l0U3RhdGljSW1wb3J0L2FmdGVyL0MuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNWVmMDFjCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVNZW1iZXJzL2V4cGxpY2l0U3RhdGljSW1wb3J0L2FmdGVyL0MuamF2YQpAQCAtMCwwICsxLDIgQEAKK3B1YmxpYyBjbGFzcyBDIHsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZU1lbWJlcnMvZXhwbGljaXRTdGF0aWNJbXBvcnQvYmVmb3JlL0EuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlTWVtYmVycy9leHBsaWNpdFN0YXRpY0ltcG9ydC9iZWZvcmUvQS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjViOTE5YWQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZU1lbWJlcnMvZXhwbGljaXRTdGF0aWNJbXBvcnQvYmVmb3JlL0EuamF2YQpAQCAtMCwwICsxLDcgQEAKK2ltcG9ydCBzdGF0aWMgQy5aOworCitwdWJsaWMgY2xhc3MgQSB7CisgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlogPSAiICsgWik7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZU1lbWJlcnMvZXhwbGljaXRTdGF0aWNJbXBvcnQvYmVmb3JlL0IuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlTWVtYmVycy9leHBsaWNpdFN0YXRpY0ltcG9ydC9iZWZvcmUvQi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmViYmU0ZGMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZU1lbWJlcnMvZXhwbGljaXRTdGF0aWNJbXBvcnQvYmVmb3JlL0IuamF2YQpAQCAtMCwwICsxLDIgQEAKK3B1YmxpYyBjbGFzcyBCIHsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZU1lbWJlcnMvZXhwbGljaXRTdGF0aWNJbXBvcnQvYmVmb3JlL0MuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlTWVtYmVycy9leHBsaWNpdFN0YXRpY0ltcG9ydC9iZWZvcmUvQy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEyZDBlNzYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZU1lbWJlcnMvZXhwbGljaXRTdGF0aWNJbXBvcnQvYmVmb3JlL0MuamF2YQpAQCAtMCwwICsxLDMgQEAKK3B1YmxpYyBjbGFzcyBDIHsKKyAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgWiA9ICJ6IjsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZU1lbWJlcnMvZmllbGRGb3J3YXJkUmVmL2FmdGVyL0EuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlTWVtYmVycy9maWVsZEZvcndhcmRSZWYvYWZ0ZXIvQS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmViNjE2MjQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZU1lbWJlcnMvZmllbGRGb3J3YXJkUmVmL2FmdGVyL0EuamF2YQpAQCAtMCwwICsxLDMgQEAKK3B1YmxpYyBjbGFzcyBBIHsKKworfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVNZW1iZXJzL2ZpZWxkRm9yd2FyZFJlZi9hZnRlci9Db25zdGFudHMuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlTWVtYmVycy9maWVsZEZvcndhcmRSZWYvYWZ0ZXIvQ29uc3RhbnRzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjZlMmRhYwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlTWVtYmVycy9maWVsZEZvcndhcmRSZWYvYWZ0ZXIvQ29uc3RhbnRzLmphdmEKQEAgLTAsMCArMSw3IEBACitwdWJsaWMgY2xhc3MgQ29uc3RhbnRzIHsKKyAgICBwcml2YXRlIHN0YXRpYyB2b2lkIGluaXQoKSB7IH0KKworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEEgPSAiYSI7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQiA9ICJiIjsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZ1tdIEFfT1JfQiA9IG5ldyBTdHJpbmdbXXtBLCBCfTsKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlTWVtYmVycy9maWVsZEZvcndhcmRSZWYvYmVmb3JlL0EuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlTWVtYmVycy9maWVsZEZvcndhcmRSZWYvYmVmb3JlL0EuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMGM5YjQ1Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVNZW1iZXJzL2ZpZWxkRm9yd2FyZFJlZi9iZWZvcmUvQS5qYXZhCkBAIC0wLDAgKzEsNCBAQAorcHVibGljIGNsYXNzIEEgeworICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZ1tdIEFfT1JfQiA9IG5ldyBTdHJpbmdbXXsgQ29uc3RhbnRzLkEsIENvbnN0YW50cy5CIH07CisKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlTWVtYmVycy9maWVsZEZvcndhcmRSZWYvYmVmb3JlL0NvbnN0YW50cy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVNZW1iZXJzL2ZpZWxkRm9yd2FyZFJlZi9iZWZvcmUvQ29uc3RhbnRzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmFiNzg4MQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlTWVtYmVycy9maWVsZEZvcndhcmRSZWYvYmVmb3JlL0NvbnN0YW50cy5qYXZhCkBAIC0wLDAgKzEsNiBAQAorcHVibGljIGNsYXNzIENvbnN0YW50cyB7CisgICAgcHJpdmF0ZSBzdGF0aWMgdm9pZCBpbml0KCkgeyB9CisKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBBID0gImEiOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEIgPSAiYiI7Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZU1lbWJlcnMvaW5uZXJDbGFzcy9hZnRlci9BLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZU1lbWJlcnMvaW5uZXJDbGFzcy9hZnRlci9BLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjFmZjJhYgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlTWVtYmVycy9pbm5lckNsYXNzL2FmdGVyL0EuamF2YQpAQCAtMCwwICsxLDIgQEAKK3B1YmxpYyBjbGFzcyBBIHsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZU1lbWJlcnMvaW5uZXJDbGFzcy9hZnRlci9CLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZU1lbWJlcnMvaW5uZXJDbGFzcy9hZnRlci9CLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDVlMWIyYwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlTWVtYmVycy9pbm5lckNsYXNzL2FmdGVyL0IuamF2YQpAQCAtMCwwICsxLDkgQEAKK3B1YmxpYyBjbGFzcyBCIHsKKyAgICBJbm5lciBpID0gbmV3IElubmVyKCk7CisKKyAgICBwdWJsaWMgc3RhdGljIGNsYXNzIElubmVyIHsKKyAgICAgICAgcHVibGljIGJvb2xlYW4gZXF1YWxzKE9iamVjdCBvKSB7CisgICAgICAgICAgICByZXR1cm4gbyBpbnN0YW5jZW9mIElubmVyOworICAgICAgICB9CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlTWVtYmVycy9pbm5lckNsYXNzL2FmdGVyL0MuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlTWVtYmVycy9pbm5lckNsYXNzL2FmdGVyL0MuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMTlkMDA1Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVNZW1iZXJzL2lubmVyQ2xhc3MvYWZ0ZXIvQy5qYXZhCkBAIC0wLDAgKzEsMyBAQAorcHVibGljIGNsYXNzIEMgeworICAgIEIuSW5uZXIgaSA9IG5ldyBCLklubmVyKCk7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVNZW1iZXJzL2lubmVyQ2xhc3MvYmVmb3JlL0EuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlTWVtYmVycy9pbm5lckNsYXNzL2JlZm9yZS9BLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjM2NDA2ZAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlTWVtYmVycy9pbm5lckNsYXNzL2JlZm9yZS9BLmphdmEKQEAgLTAsMCArMSw3IEBACitwdWJsaWMgY2xhc3MgQSB7CisgICAgcHVibGljIHN0YXRpYyBjbGFzcyBJbm5lciB7CisgICAgICAgIHB1YmxpYyBib29sZWFuIGVxdWFscyhPYmplY3QgbykgeworICAgICAgICAgICAgcmV0dXJuIG8gaW5zdGFuY2VvZiBJbm5lcjsKKyAgICAgICAgfQorICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZU1lbWJlcnMvaW5uZXJDbGFzcy9iZWZvcmUvQi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVNZW1iZXJzL2lubmVyQ2xhc3MvYmVmb3JlL0IuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NmQyOWQ4Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVNZW1iZXJzL2lubmVyQ2xhc3MvYmVmb3JlL0IuamF2YQpAQCAtMCwwICsxLDMgQEAKK3B1YmxpYyBjbGFzcyBCIHsKKyAgICBBLklubmVyIGkgPSBuZXcgQS5Jbm5lcigpOworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlTWVtYmVycy9pbm5lckNsYXNzL2JlZm9yZS9DLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZU1lbWJlcnMvaW5uZXJDbGFzcy9iZWZvcmUvQy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY2ZDA5YTUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZU1lbWJlcnMvaW5uZXJDbGFzcy9iZWZvcmUvQy5qYXZhCkBAIC0wLDAgKzEsMyBAQAorcHVibGljIGNsYXNzIEMgeworICAgIEEuSW5uZXIgaSA9IG5ldyBBLklubmVyKCk7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVNZW1iZXJzL2lubmVyVG9JbnRlcmZhY2UvYWZ0ZXIvQS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVNZW1iZXJzL2lubmVyVG9JbnRlcmZhY2UvYWZ0ZXIvQS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYxZmYyYWIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZU1lbWJlcnMvaW5uZXJUb0ludGVyZmFjZS9hZnRlci9BLmphdmEKQEAgLTAsMCArMSwyIEBACitwdWJsaWMgY2xhc3MgQSB7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVNZW1iZXJzL2lubmVyVG9JbnRlcmZhY2UvYWZ0ZXIvQi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVNZW1iZXJzL2lubmVyVG9JbnRlcmZhY2UvYWZ0ZXIvQi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJjODFjNWYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZU1lbWJlcnMvaW5uZXJUb0ludGVyZmFjZS9hZnRlci9CLmphdmEKQEAgLTAsMCArMSw5IEBACitwdWJsaWMgaW50ZXJmYWNlIEIgeworICAgIElubmVyIGkgPSBuZXcgSW5uZXIoKTsKKworICAgIGNsYXNzIElubmVyIHsKKyAgICAgICAgcHVibGljIGJvb2xlYW4gZXF1YWxzKE9iamVjdCBvKSB7CisgICAgICAgICAgICByZXR1cm4gbyBpbnN0YW5jZW9mIElubmVyOworICAgICAgICB9CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlTWVtYmVycy9pbm5lclRvSW50ZXJmYWNlL2FmdGVyL0MuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlTWVtYmVycy9pbm5lclRvSW50ZXJmYWNlL2FmdGVyL0MuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMTlkMDA1Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVNZW1iZXJzL2lubmVyVG9JbnRlcmZhY2UvYWZ0ZXIvQy5qYXZhCkBAIC0wLDAgKzEsMyBAQAorcHVibGljIGNsYXNzIEMgeworICAgIEIuSW5uZXIgaSA9IG5ldyBCLklubmVyKCk7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVNZW1iZXJzL2lubmVyVG9JbnRlcmZhY2UvYmVmb3JlL0EuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlTWVtYmVycy9pbm5lclRvSW50ZXJmYWNlL2JlZm9yZS9BLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjM2NDA2ZAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlTWVtYmVycy9pbm5lclRvSW50ZXJmYWNlL2JlZm9yZS9BLmphdmEKQEAgLTAsMCArMSw3IEBACitwdWJsaWMgY2xhc3MgQSB7CisgICAgcHVibGljIHN0YXRpYyBjbGFzcyBJbm5lciB7CisgICAgICAgIHB1YmxpYyBib29sZWFuIGVxdWFscyhPYmplY3QgbykgeworICAgICAgICAgICAgcmV0dXJuIG8gaW5zdGFuY2VvZiBJbm5lcjsKKyAgICAgICAgfQorICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZU1lbWJlcnMvaW5uZXJUb0ludGVyZmFjZS9iZWZvcmUvQi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVNZW1iZXJzL2lubmVyVG9JbnRlcmZhY2UvYmVmb3JlL0IuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMzEzZGU2Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVNZW1iZXJzL2lubmVyVG9JbnRlcmZhY2UvYmVmb3JlL0IuamF2YQpAQCAtMCwwICsxLDMgQEAKK3B1YmxpYyBpbnRlcmZhY2UgQiB7CisgICAgQS5Jbm5lciBpID0gbmV3IEEuSW5uZXIoKTsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZU1lbWJlcnMvaW5uZXJUb0ludGVyZmFjZS9iZWZvcmUvQy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVNZW1iZXJzL2lubmVyVG9JbnRlcmZhY2UvYmVmb3JlL0MuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NmQwOWE1Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVNZW1iZXJzL2lubmVyVG9JbnRlcmZhY2UvYmVmb3JlL0MuamF2YQpAQCAtMCwwICsxLDMgQEAKK3B1YmxpYyBjbGFzcyBDIHsKKyAgICBBLklubmVyIGkgPSBuZXcgQS5Jbm5lcigpOworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlTWVtYmVycy9qYXZhZG9jUmVmcy9hZnRlci9DbGFzczEuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlTWVtYmVycy9qYXZhZG9jUmVmcy9hZnRlci9DbGFzczEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NjBhMzc4Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVNZW1iZXJzL2phdmFkb2NSZWZzL2FmdGVyL0NsYXNzMS5qYXZhCkBAIC0wLDAgKzEsOSBAQAorCitwdWJsaWMgY2xhc3MgQ2xhc3MxIHsKKworICAgIC8qKgorICAgICAqIEBzZWUgQ2xhc3MyI2ZvbyBTb21lIHRleHQge0BsaW5rIENsYXNzMiNmb28gbGFiZWx9CisgICAgICovCisgICAgdm9pZCB0ZXN0KCkgeworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZU1lbWJlcnMvamF2YWRvY1JlZnMvYWZ0ZXIvQ2xhc3MyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZU1lbWJlcnMvamF2YWRvY1JlZnMvYWZ0ZXIvQ2xhc3MyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODQ1ZmRhMQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlTWVtYmVycy9qYXZhZG9jUmVmcy9hZnRlci9DbGFzczIuamF2YQpAQCAtMCwwICsxLDUgQEAKKworcHVibGljIGNsYXNzIENsYXNzMiB7CisgICAgcHVibGljIHN0YXRpYyB2b2lkIGZvbygpeworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZU1lbWJlcnMvamF2YWRvY1JlZnMvYWZ0ZXIvVXNlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVNZW1iZXJzL2phdmFkb2NSZWZzL2FmdGVyL1VzZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNjc2Y2NlCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVNZW1iZXJzL2phdmFkb2NSZWZzL2FmdGVyL1VzZXIuamF2YQpAQCAtMCwwICsxLDYgQEAKKworLyoqCisgKiBAc2VlIENsYXNzMiNmb28gU29tZSB0ZXh0IHtAbGluayBDbGFzczIjZm9vIGxhYmVsfQorICovCitwdWJsaWMgY2xhc3MgVXNlciB7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVNZW1iZXJzL2phdmFkb2NSZWZzL2JlZm9yZS9DbGFzczEuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlTWVtYmVycy9qYXZhZG9jUmVmcy9iZWZvcmUvQ2xhc3MxLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmEwZjU0MwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlTWVtYmVycy9qYXZhZG9jUmVmcy9iZWZvcmUvQ2xhc3MxLmphdmEKQEAgLTAsMCArMSwxMSBAQAorCitwdWJsaWMgY2xhc3MgQ2xhc3MxIHsKKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgZm9vKCl7CisgICAgfQorCisgICAgLyoqCisgICAgICogQHNlZSAjZm9vIFNvbWUgdGV4dCB7QGxpbmsgI2ZvbyBsYWJlbH0KKyAgICAgKi8KKyAgICB2b2lkIHRlc3QoKSB7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlTWVtYmVycy9qYXZhZG9jUmVmcy9iZWZvcmUvQ2xhc3MyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZU1lbWJlcnMvamF2YWRvY1JlZnMvYmVmb3JlL0NsYXNzMi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI5OTkyNjcKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZU1lbWJlcnMvamF2YWRvY1JlZnMvYmVmb3JlL0NsYXNzMi5qYXZhCkBAIC0wLDAgKzEsMyBAQAorCitwdWJsaWMgY2xhc3MgQ2xhc3MyIHsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZU1lbWJlcnMvamF2YWRvY1JlZnMvYmVmb3JlL1VzZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlTWVtYmVycy9qYXZhZG9jUmVmcy9iZWZvcmUvVXNlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI3MjZmZDUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZU1lbWJlcnMvamF2YWRvY1JlZnMvYmVmb3JlL1VzZXIuamF2YQpAQCAtMCwwICsxLDYgQEAKKworLyoqCisgKiBAc2VlIENsYXNzMSNmb28gU29tZSB0ZXh0IHtAbGluayBDbGFzczEjZm9vIGxhYmVsfQorICovCitwdWJsaWMgY2xhc3MgVXNlciB7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVNZW1iZXJzL211bHRpcGxlV2l0aERlcGVuZGVuY2llcy9hZnRlci9BLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZU1lbWJlcnMvbXVsdGlwbGVXaXRoRGVwZW5kZW5jaWVzL2FmdGVyL0EuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mN2U4Y2MzCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVNZW1iZXJzL211bHRpcGxlV2l0aERlcGVuZGVuY2llcy9hZnRlci9BLmphdmEKQEAgLTAsMCArMSwyIEBACitwdWJsaWMgY2xhc3MgQSB7Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZU1lbWJlcnMvbXVsdGlwbGVXaXRoRGVwZW5kZW5jaWVzL2FmdGVyL0IuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlTWVtYmVycy9tdWx0aXBsZVdpdGhEZXBlbmRlbmNpZXMvYWZ0ZXIvQi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE2ZWQ5YmQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZU1lbWJlcnMvbXVsdGlwbGVXaXRoRGVwZW5kZW5jaWVzL2FmdGVyL0IuamF2YQpAQCAtMCwwICsxLDYgQEAKK3B1YmxpYyBjbGFzcyBCIHsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBTUlQxID0gIiI7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgU1JUID0gIiI7CisgICAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nW10gQUxMID0ge1NSVCwgU1JUMX07CisgICAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nW10gQUxMXzEgPSB7U1JULCBTUlQxfTsKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlTWVtYmVycy9tdWx0aXBsZVdpdGhEZXBlbmRlbmNpZXMvYmVmb3JlL0EuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlTWVtYmVycy9tdWx0aXBsZVdpdGhEZXBlbmRlbmNpZXMvYmVmb3JlL0EuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMTU0ZGJlCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVNZW1iZXJzL211bHRpcGxlV2l0aERlcGVuZGVuY2llcy9iZWZvcmUvQS5qYXZhCkBAIC0wLDAgKzEsNCBAQAorcHVibGljIGNsYXNzIEEgeworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFNSVCA9ICIiOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFNSVDEgPSAiIjsKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlTWVtYmVycy9tdWx0aXBsZVdpdGhEZXBlbmRlbmNpZXMvYmVmb3JlL0IuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlTWVtYmVycy9tdWx0aXBsZVdpdGhEZXBlbmRlbmNpZXMvYmVmb3JlL0IuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NTJkMWUzCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVNZW1iZXJzL211bHRpcGxlV2l0aERlcGVuZGVuY2llcy9iZWZvcmUvQi5qYXZhCkBAIC0wLDAgKzEsNCBAQAorcHVibGljIGNsYXNzIEIgeworICAgIHByaXZhdGUgc3RhdGljIFN0cmluZ1tdIEFMTCA9IHtBLlNSVCwgQS5TUlQxfTsKKyAgICBwcml2YXRlIHN0YXRpYyBTdHJpbmdbXSBBTExfMSA9IHtBLlNSVCwgQS5TUlQxfTsKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlTWVtYmVycy9vdGhlclBhY2thZ2VJbXBvcnQvYWZ0ZXIvcGFjazEvQ2xhc3NXaXRoU3RhdGljTWV0aG9kLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZU1lbWJlcnMvb3RoZXJQYWNrYWdlSW1wb3J0L2FmdGVyL3BhY2sxL0NsYXNzV2l0aFN0YXRpY01ldGhvZC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZjNDIzOGUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZU1lbWJlcnMvb3RoZXJQYWNrYWdlSW1wb3J0L2FmdGVyL3BhY2sxL0NsYXNzV2l0aFN0YXRpY01ldGhvZC5qYXZhCkBAIC0wLDAgKzEsMTEgQEAKK3BhY2thZ2UgcGFjazE7CisKK2ltcG9ydCBwYWNrMi5PdGhlckNsYXNzOworCitwdWJsaWMgY2xhc3MgQ2xhc3NXaXRoU3RhdGljTWV0aG9kIHsKKworICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKyAgICAgICAgT3RoZXJDbGFzcy5jYWxsZWUoKTsKKyAgICB9CisKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZU1lbWJlcnMvb3RoZXJQYWNrYWdlSW1wb3J0L2FmdGVyL3BhY2syL090aGVyQ2xhc3MuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlTWVtYmVycy9vdGhlclBhY2thZ2VJbXBvcnQvYWZ0ZXIvcGFjazIvT3RoZXJDbGFzcy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYwNjkzZjMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZU1lbWJlcnMvb3RoZXJQYWNrYWdlSW1wb3J0L2FmdGVyL3BhY2syL090aGVyQ2xhc3MuamF2YQpAQCAtMCwwICsxLDcgQEAKK3BhY2thZ2UgcGFjazI7CisKK3B1YmxpYyBjbGFzcyBPdGhlckNsYXNzIHsKKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgY2FsbGVlKCkgeworCisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlTWVtYmVycy9vdGhlclBhY2thZ2VJbXBvcnQvYmVmb3JlL3BhY2sxL0NsYXNzV2l0aFN0YXRpY01ldGhvZC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVNZW1iZXJzL290aGVyUGFja2FnZUltcG9ydC9iZWZvcmUvcGFjazEvQ2xhc3NXaXRoU3RhdGljTWV0aG9kLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmE0MDQ3MAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlTWVtYmVycy9vdGhlclBhY2thZ2VJbXBvcnQvYmVmb3JlL3BhY2sxL0NsYXNzV2l0aFN0YXRpY01ldGhvZC5qYXZhCkBAIC0wLDAgKzEsMTIgQEAKK3BhY2thZ2UgcGFjazE7CisKK3B1YmxpYyBjbGFzcyBDbGFzc1dpdGhTdGF0aWNNZXRob2QgeworCisgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworICAgICAgICBjYWxsZWUoKTsKKyAgICB9CisKKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgY2FsbGVlKCkgeworCisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlTWVtYmVycy9vdGhlclBhY2thZ2VJbXBvcnQvYmVmb3JlL3BhY2syL090aGVyQ2xhc3MuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlTWVtYmVycy9vdGhlclBhY2thZ2VJbXBvcnQvYmVmb3JlL3BhY2syL090aGVyQ2xhc3MuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZWI1MjUwCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVNZW1iZXJzL290aGVyUGFja2FnZUltcG9ydC9iZWZvcmUvcGFjazIvT3RoZXJDbGFzcy5qYXZhCkBAIC0wLDAgKzEsNCBAQAorcGFja2FnZSBwYWNrMjsKKworcHVibGljIGNsYXNzIE90aGVyQ2xhc3MgeworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlTWVtYmVycy9vdXRlckNsYXNzVHlwZVBhcmFtZXRlcnMvYWZ0ZXIvcGFjazEvQS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVNZW1iZXJzL291dGVyQ2xhc3NUeXBlUGFyYW1ldGVycy9hZnRlci9wYWNrMS9BLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjUzZDM1NAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlTWVtYmVycy9vdXRlckNsYXNzVHlwZVBhcmFtZXRlcnMvYWZ0ZXIvcGFjazEvQS5qYXZhCkBAIC0wLDAgKzEsNyBAQAorcGFja2FnZSBwYWNrMTsKKworaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK3B1YmxpYyBjbGFzcyBBIHsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZU1lbWJlcnMvb3V0ZXJDbGFzc1R5cGVQYXJhbWV0ZXJzL2FmdGVyL3BhY2sxL091dGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZU1lbWJlcnMvb3V0ZXJDbGFzc1R5cGVQYXJhbWV0ZXJzL2FmdGVyL3BhY2sxL091dGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTI4ZWQ4ZgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlTWVtYmVycy9vdXRlckNsYXNzVHlwZVBhcmFtZXRlcnMvYWZ0ZXIvcGFjazEvT3V0ZXIuamF2YQpAQCAtMCwwICsxLDYgQEAKK3BhY2thZ2UgcGFjazE7CisKK3B1YmxpYyBjbGFzcyBPdXRlciA8VD57CisgICAgcHVibGljIHN0YXRpYyBjbGFzcyBJbm5lcjxUPnsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZU1lbWJlcnMvb3V0ZXJDbGFzc1R5cGVQYXJhbWV0ZXJzL2FmdGVyL3BhY2syL0IuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlTWVtYmVycy9vdXRlckNsYXNzVHlwZVBhcmFtZXRlcnMvYWZ0ZXIvcGFjazIvQi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYzNmI2MjMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZU1lbWJlcnMvb3V0ZXJDbGFzc1R5cGVQYXJhbWV0ZXJzL2FmdGVyL3BhY2syL0IuamF2YQpAQCAtMCwwICsxLDEyIEBACitwYWNrYWdlIHBhY2syOworCitpbXBvcnQgcGFjazEuT3V0ZXI7CisKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitwdWJsaWMgY2xhc3MgQiB7CisgICAgcHVibGljIHN0YXRpYyB2b2lkIGZvbygpeworICAgICAgICBPdXRlcjxBcnJheUxpc3Q+LklubmVyPExpc3Q+IHg7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlTWVtYmVycy9vdXRlckNsYXNzVHlwZVBhcmFtZXRlcnMvYmVmb3JlL3BhY2sxL0EuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlTWVtYmVycy9vdXRlckNsYXNzVHlwZVBhcmFtZXRlcnMvYmVmb3JlL3BhY2sxL0EuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YjZiNzNmZgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlTWVtYmVycy9vdXRlckNsYXNzVHlwZVBhcmFtZXRlcnMvYmVmb3JlL3BhY2sxL0EuamF2YQpAQCAtMCwwICsxLDEwIEBACitwYWNrYWdlIHBhY2sxOworCitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworcHVibGljIGNsYXNzIEEgeworICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBmb28oKXsKKyAgICAgICAgT3V0ZXI8QXJyYXlMaXN0Pi5Jbm5lcjxMaXN0PiB4OworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZU1lbWJlcnMvb3V0ZXJDbGFzc1R5cGVQYXJhbWV0ZXJzL2JlZm9yZS9wYWNrMS9PdXRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVNZW1iZXJzL291dGVyQ2xhc3NUeXBlUGFyYW1ldGVycy9iZWZvcmUvcGFjazEvT3V0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MjhlZDhmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVNZW1iZXJzL291dGVyQ2xhc3NUeXBlUGFyYW1ldGVycy9iZWZvcmUvcGFjazEvT3V0ZXIuamF2YQpAQCAtMCwwICsxLDYgQEAKK3BhY2thZ2UgcGFjazE7CisKK3B1YmxpYyBjbGFzcyBPdXRlciA8VD57CisgICAgcHVibGljIHN0YXRpYyBjbGFzcyBJbm5lcjxUPnsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZU1lbWJlcnMvb3V0ZXJDbGFzc1R5cGVQYXJhbWV0ZXJzL2JlZm9yZS9wYWNrMi9CLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZU1lbWJlcnMvb3V0ZXJDbGFzc1R5cGVQYXJhbWV0ZXJzL2JlZm9yZS9wYWNrMi9CLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGY5NjNiNQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlTWVtYmVycy9vdXRlckNsYXNzVHlwZVBhcmFtZXRlcnMvYmVmb3JlL3BhY2syL0IuamF2YQpAQCAtMCwwICsxLDQgQEAKK3BhY2thZ2UgcGFjazI7CisKK3B1YmxpYyBjbGFzcyBCIHsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZU1lbWJlcnMvcGFyYW1ldGVyaXplZFJlZk9uL2FmdGVyL3BhY2sxL0EuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlTWVtYmVycy9wYXJhbWV0ZXJpemVkUmVmT24vYWZ0ZXIvcGFjazEvQS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBiNmJhYWYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZU1lbWJlcnMvcGFyYW1ldGVyaXplZFJlZk9uL2FmdGVyL3BhY2sxL0EuamF2YQpAQCAtMCwwICsxLDE2IEBACitwYWNrYWdlIHBhY2sxOworCitpbnRlcmZhY2UgRWZmPEEsIEI+IHsKKyAgICBCIGYoQSBhKTsKK30KKworYWJzdHJhY3QgY2xhc3MgUE9uZTxBPiB7CisgICAgYWJzdHJhY3QgQSBfMSgpOworCit9CisKK2ZpbmFsIGNsYXNzIEhvb3JheTxBPiB7CisgICAgcHVibGljIDxCPiBIb29yYXk8Qj4gbWFwKGZpbmFsIEVmZjxBLCBCPiBmKSB7CisgICAgICAgIHJldHVybiBudWxsOworICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlTWVtYmVycy9wYXJhbWV0ZXJpemVkUmVmT24vYWZ0ZXIvcGFjazEvQy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVNZW1iZXJzL3BhcmFtZXRlcml6ZWRSZWZPbi9hZnRlci9wYWNrMS9DLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzFkNGJkNQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlTWVtYmVycy9wYXJhbWV0ZXJpemVkUmVmT24vYWZ0ZXIvcGFjazEvQy5qYXZhCkBAIC0wLDAgKzEsMTUgQEAKK3BhY2thZ2UgcGFjazE7CisKK3B1YmxpYyBjbGFzcyBDIHsKKyAgICBzdGF0aWMgPEE+IFBPbmU8SG9vcmF5PEE+PiBzZXF1ZW5jZShmaW5hbCBIb29yYXk8UE9uZTxBPj4gYXMpIHsKKyAgICAgICAgcmV0dXJuIG5ldyBQT25lPEhvb3JheTxBPj4oKSB7CisgICAgICAgICAgICBwdWJsaWMgSG9vcmF5PEE+IF8xKCkgeworICAgICAgICAgICAgICAgIHJldHVybiBhcy5tYXAoQy48QT5fXzEoKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH07CisgICAgfQorCisgICAgc3RhdGljIDxBPiBFZmY8UE9uZTxBPiwgQT4gX18xKCkgeworICAgICAgICByZXR1cm4gUE9uZTo6XzE7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlTWVtYmVycy9wYXJhbWV0ZXJpemVkUmVmT24vYmVmb3JlL3BhY2sxL0EuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlTWVtYmVycy9wYXJhbWV0ZXJpemVkUmVmT24vYmVmb3JlL3BhY2sxL0EuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YmRkMmU2Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVNZW1iZXJzL3BhcmFtZXRlcml6ZWRSZWZPbi9iZWZvcmUvcGFjazEvQS5qYXZhCkBAIC0wLDAgKzEsMjggQEAKK3BhY2thZ2UgcGFjazE7CisKK2ludGVyZmFjZSBFZmY8QSwgQj4geworICAgIEIgZihBIGEpOworfQorCithYnN0cmFjdCBjbGFzcyBQT25lPEE+IHsKKyAgICBhYnN0cmFjdCBBIF8xKCk7CisKKyAgICBzdGF0aWMgPEE+IFBPbmU8SG9vcmF5PEE+PiBzZXF1ZW5jZShmaW5hbCBIb29yYXk8UE9uZTxBPj4gYXMpIHsKKyAgICAgICAgcmV0dXJuIG5ldyBQT25lPEhvb3JheTxBPj4oKSB7CisgICAgICAgICAgICBwdWJsaWMgSG9vcmF5PEE+IF8xKCkgeworICAgICAgICAgICAgICAgIHJldHVybiBhcy5tYXAoUE9uZS48QT5fXzEoKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH07CisgICAgfQorCisgICAgc3RhdGljIDxBPiBFZmY8UE9uZTxBPiwgQT4gX18xKCkgeworICAgICAgICByZXR1cm4gUE9uZTo6XzE7CisgICAgfQorCit9CisKK2ZpbmFsIGNsYXNzIEhvb3JheTxBPiB7CisgICAgcHVibGljIDxCPiBIb29yYXk8Qj4gbWFwKGZpbmFsIEVmZjxBLCBCPiBmKSB7CisgICAgICAgIHJldHVybiBudWxsOworICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlTWVtYmVycy9wYXJhbWV0ZXJpemVkUmVmT24vYmVmb3JlL3BhY2sxL0MuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlTWVtYmVycy9wYXJhbWV0ZXJpemVkUmVmT24vYmVmb3JlL3BhY2sxL0MuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYjdlM2UwCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVNZW1iZXJzL3BhcmFtZXRlcml6ZWRSZWZPbi9iZWZvcmUvcGFjazEvQy5qYXZhCkBAIC0wLDAgKzEsNCBAQAorcGFja2FnZSBwYWNrMTsKKworcHVibGljIGNsYXNzIEMgeworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlTWVtYmVycy9wcm90ZWN0ZWRDb25zdHJ1Y3Rvci9hZnRlci9wYWNrMS9BLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZU1lbWJlcnMvcHJvdGVjdGVkQ29uc3RydWN0b3IvYWZ0ZXIvcGFjazEvQS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ2ZmM3OGYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZU1lbWJlcnMvcHJvdGVjdGVkQ29uc3RydWN0b3IvYWZ0ZXIvcGFjazEvQS5qYXZhCkBAIC0wLDAgKzEsNCBAQAorcGFja2FnZSBwYWNrMTsKKworcHVibGljIGNsYXNzIEEgeworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlTWVtYmVycy9wcm90ZWN0ZWRDb25zdHJ1Y3Rvci9hZnRlci9wYWNrMS9DLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZU1lbWJlcnMvcHJvdGVjdGVkQ29uc3RydWN0b3IvYWZ0ZXIvcGFjazEvQy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjllY2Y2MDYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZU1lbWJlcnMvcHJvdGVjdGVkQ29uc3RydWN0b3IvYWZ0ZXIvcGFjazEvQy5qYXZhCkBAIC0wLDAgKzEsNyBAQAorcGFja2FnZSBwYWNrMTsKKworcHVibGljIGNsYXNzIEMgeworICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBmb28oKSB7CisgICAgICAgIG5ldyBCKCl7fTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVNZW1iZXJzL3Byb3RlY3RlZENvbnN0cnVjdG9yL2FmdGVyL3BhY2syL0IuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlTWVtYmVycy9wcm90ZWN0ZWRDb25zdHJ1Y3Rvci9hZnRlci9wYWNrMi9CLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmRjY2I0ZQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlTWVtYmVycy9wcm90ZWN0ZWRDb25zdHJ1Y3Rvci9hZnRlci9wYWNrMi9CLmphdmEKQEAgLTAsMCArMSw1IEBACitwYWNrYWdlIHBhY2syOworCitwdWJsaWMgY2xhc3MgQiB7CisgIHByb3RlY3RlZCBCKCl7fQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlTWVtYmVycy9wcm90ZWN0ZWRDb25zdHJ1Y3Rvci9iZWZvcmUvcGFjazEvQS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVNZW1iZXJzL3Byb3RlY3RlZENvbnN0cnVjdG9yL2JlZm9yZS9wYWNrMS9BLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTg3NzY2MWIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZU1lbWJlcnMvcHJvdGVjdGVkQ29uc3RydWN0b3IvYmVmb3JlL3BhY2sxL0EuamF2YQpAQCAtMCwwICsxLDcgQEAKK3BhY2thZ2UgcGFjazE7CisKK3B1YmxpYyBjbGFzcyBBIHsKKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgZm9vKCkgeworICAgICAgICBuZXcgQigpe307CisgICAgfSAgICAKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZU1lbWJlcnMvcHJvdGVjdGVkQ29uc3RydWN0b3IvYmVmb3JlL3BhY2sxL0MuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlTWVtYmVycy9wcm90ZWN0ZWRDb25zdHJ1Y3Rvci9iZWZvcmUvcGFjazEvQy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJiN2UzZTAKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZU1lbWJlcnMvcHJvdGVjdGVkQ29uc3RydWN0b3IvYmVmb3JlL3BhY2sxL0MuamF2YQpAQCAtMCwwICsxLDQgQEAKK3BhY2thZ2UgcGFjazE7CisKK3B1YmxpYyBjbGFzcyBDIHsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZU1lbWJlcnMvcHJvdGVjdGVkQ29uc3RydWN0b3IvYmVmb3JlL3BhY2syL0IuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlTWVtYmVycy9wcm90ZWN0ZWRDb25zdHJ1Y3Rvci9iZWZvcmUvcGFjazIvQi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJkY2NiNGUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZU1lbWJlcnMvcHJvdGVjdGVkQ29uc3RydWN0b3IvYmVmb3JlL3BhY2syL0IuamF2YQpAQCAtMCwwICsxLDUgQEAKK3BhY2thZ2UgcGFjazI7CisKK3B1YmxpYyBjbGFzcyBCIHsKKyAgcHJvdGVjdGVkIEIoKXt9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVNZW1iZXJzL3NjcjExODcxL2FmdGVyL3BhY2sxL0EuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlTWVtYmVycy9zY3IxMTg3MS9hZnRlci9wYWNrMS9BLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWFiMzhkMgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlTWVtYmVycy9zY3IxMTg3MS9hZnRlci9wYWNrMS9BLmphdmEKQEAgLTAsMCArMSw3IEBACitwYWNrYWdlIHBhY2sxOworCitwdWJsaWMgY2xhc3MgQSB7CisKKyAgICBjbGFzcyBJbm5lciB7CisgICAgfSAKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZU1lbWJlcnMvc2NyMTE4NzEvYWZ0ZXIvcGFjazEvQi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVNZW1iZXJzL3NjcjExODcxL2FmdGVyL3BhY2sxL0IuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ODk3NDc1Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVNZW1iZXJzL3NjcjExODcxL2FmdGVyL3BhY2sxL0IuamF2YQpAQCAtMCwwICsxLDcgQEAKK3BhY2thZ2UgcGFjazE7CisKK3B1YmxpYyBjbGFzcyBCIHsKKyAgICBzdGF0aWMgdm9pZCBtZXRob2QoKSB7CisgICAgICAgIEEuSW5uZXIgaSA9IG5ldyBBLklubmVyKCk7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlTWVtYmVycy9zY3IxMTg3MS9iZWZvcmUvcGFjazEvQS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVNZW1iZXJzL3NjcjExODcxL2JlZm9yZS9wYWNrMS9BLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGQ5MGY5MgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlTWVtYmVycy9zY3IxMTg3MS9iZWZvcmUvcGFjazEvQS5qYXZhCkBAIC0wLDAgKzEsMTAgQEAKK3BhY2thZ2UgcGFjazE7CisKK3B1YmxpYyBjbGFzcyBBIHsKKyAgICBzdGF0aWMgdm9pZCBtZXRob2QoKSB7CisgICAgICAgIElubmVyIGkgPSBuZXcgSW5uZXIoKTsKKyAgICB9CisKKyAgICBjbGFzcyBJbm5lciB7CisgICAgfSAKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZU1lbWJlcnMvc2NyMTE4NzEvYmVmb3JlL3BhY2sxL0IuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlTWVtYmVycy9zY3IxMTg3MS9iZWZvcmUvcGFjazEvQi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA3OGE2ZmMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZU1lbWJlcnMvc2NyMTE4NzEvYmVmb3JlL3BhY2sxL0IuamF2YQpAQCAtMCwwICsxLDQgQEAKK3BhY2thZ2UgcGFjazE7CisKK3B1YmxpYyBjbGFzcyBCIHsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZU1lbWJlcnMvc2NyNDAwNjQvYWZ0ZXIvVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVNZW1iZXJzL3NjcjQwMDY0L2FmdGVyL1Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZjcyMzliCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVNZW1iZXJzL3NjcjQwMDY0L2FmdGVyL1Rlc3QuamF2YQpAQCAtMCwwICsxLDE0IEBACitjbGFzcyBUZXN0IHsKKworICAgIHZvaWQgdSgpIHsKKworICAgIH0KK30KKworY2xhc3MgVGVzdDEgeworICAgIHsKKyAgICAgICAgaSA9IDA7CisgICAgfQorCisgICAgc3RhdGljIGludCBpOworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlTWVtYmVycy9zY3I0MDA2NC9iZWZvcmUvVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVNZW1iZXJzL3NjcjQwMDY0L2JlZm9yZS9UZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTBjZDFiOQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlTWVtYmVycy9zY3I0MDA2NC9iZWZvcmUvVGVzdC5qYXZhCkBAIC0wLDAgKzEsMTUgQEAKK2ltcG9ydCBzdGF0aWMgVGVzdC5pOworCitjbGFzcyBUZXN0IHsKKyAgICBzdGF0aWMgaW50IGk7CisKKyAgICB2b2lkIHUoKSB7CisKKyAgICB9Cit9CisKK2NsYXNzIFRlc3QxIHsKKyAgICB7CisgICAgICAgIGkgPSAwOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZU1lbWJlcnMvc2NyNDA5NDcvYWZ0ZXIvVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVNZW1iZXJzL3NjcjQwOTQ3L2FmdGVyL1Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOGFjNzU5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVNZW1iZXJzL3NjcjQwOTQ3L2FmdGVyL1Rlc3QuamF2YQpAQCAtMCwwICsxLDExIEBACitjbGFzcyBBIHsKK30KKworY2xhc3MgVGVzdCB7CisKKyAgICBzdGF0aWMgdm9pZCBmb28oKSB7CisgICAgICBiYXIoKTsgLy8gbm90ZSByZWR1bmRhbnQgIkEiIHF1YWxpZmllcgorICAgIH0KKworICAgIHN0YXRpYyB2b2lkIGJhcigpIHt9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVNZW1iZXJzL3NjcjQwOTQ3L2JlZm9yZS9UZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZU1lbWJlcnMvc2NyNDA5NDcvYmVmb3JlL1Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZWJmN2M1Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVNZW1iZXJzL3NjcjQwOTQ3L2JlZm9yZS9UZXN0LmphdmEKQEAgLTAsMCArMSwxMCBAQAorY2xhc3MgQSB7CisgIHN0YXRpYyB2b2lkIGZvbygpIHsKKyAgICBBLmJhcigpOyAvLyBub3RlIHJlZHVuZGFudCAiQSIgcXVhbGlmaWVyCisgIH0KKyAgc3RhdGljIHZvaWQgYmFyKCkge30KK30KKworY2xhc3MgVGVzdCB7CisKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZU1lbWJlcnMvc3RhdGljSW1wb3J0L2FmdGVyL0EuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlTWVtYmVycy9zdGF0aWNJbXBvcnQvYWZ0ZXIvQS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEzYTU3Y2EKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZU1lbWJlcnMvc3RhdGljSW1wb3J0L2FmdGVyL0EuamF2YQpAQCAtMCwwICsxLDggQEAKK2ltcG9ydCBzdGF0aWMgQi4qOworCitwdWJsaWMgY2xhc3MgQSB7CisgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlggPSAiICsgWCk7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJaID0gIiArIFopOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVNZW1iZXJzL3N0YXRpY0ltcG9ydC9hZnRlci9CLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZU1lbWJlcnMvc3RhdGljSW1wb3J0L2FmdGVyL0IuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YjY1ODIyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVNZW1iZXJzL3N0YXRpY0ltcG9ydC9hZnRlci9CLmphdmEKQEAgLTAsMCArMSw0IEBACitwdWJsaWMgY2xhc3MgQiB7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgWCA9ICJ4IjsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBaID0gInoiOworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlTWVtYmVycy9zdGF0aWNJbXBvcnQvYWZ0ZXIvQy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVNZW1iZXJzL3N0YXRpY0ltcG9ydC9hZnRlci9DLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjVlZjAxYwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlTWVtYmVycy9zdGF0aWNJbXBvcnQvYWZ0ZXIvQy5qYXZhCkBAIC0wLDAgKzEsMiBAQAorcHVibGljIGNsYXNzIEMgeworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlTWVtYmVycy9zdGF0aWNJbXBvcnQvYmVmb3JlL0EuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlTWVtYmVycy9zdGF0aWNJbXBvcnQvYmVmb3JlL0EuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNTAwZGYxCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVNZW1iZXJzL3N0YXRpY0ltcG9ydC9iZWZvcmUvQS5qYXZhCkBAIC0wLDAgKzEsOSBAQAoraW1wb3J0IHN0YXRpYyBDLio7CitpbXBvcnQgc3RhdGljIEIuKjsKKworcHVibGljIGNsYXNzIEEgeworICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJYID0gIiArIFgpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiWiA9ICIgKyBaKTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlTWVtYmVycy9zdGF0aWNJbXBvcnQvYmVmb3JlL0IuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlTWVtYmVycy9zdGF0aWNJbXBvcnQvYmVmb3JlL0IuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNjU5OGNlCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVNZW1iZXJzL3N0YXRpY0ltcG9ydC9iZWZvcmUvQi5qYXZhCkBAIC0wLDAgKzEsMyBAQAorcHVibGljIGNsYXNzIEIgeworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFggPSAieCI7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVNZW1iZXJzL3N0YXRpY0ltcG9ydC9iZWZvcmUvQy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVNZW1iZXJzL3N0YXRpY0ltcG9ydC9iZWZvcmUvQy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEyZDBlNzYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZU1lbWJlcnMvc3RhdGljSW1wb3J0L2JlZm9yZS9DLmphdmEKQEAgLTAsMCArMSwzIEBACitwdWJsaWMgY2xhc3MgQyB7CisgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFogPSAieiI7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVNZW1iZXJzL3N0YXRpY0ltcG9ydEFuZE92ZXJyaWRlbk1ldGhvZHMvYWZ0ZXIvYmFyL0EuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlTWVtYmVycy9zdGF0aWNJbXBvcnRBbmRPdmVycmlkZW5NZXRob2RzL2FmdGVyL2Jhci9BLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGMwODMxYjUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZU1lbWJlcnMvc3RhdGljSW1wb3J0QW5kT3ZlcnJpZGVuTWV0aG9kcy9hZnRlci9iYXIvQS5qYXZhCkBAIC0wLDAgKzEsNSBAQAorcGFja2FnZSBiYXI7CisKK3B1YmxpYyBjbGFzcyBBIHsKKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgZm9vKCkge30KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZU1lbWJlcnMvc3RhdGljSW1wb3J0QW5kT3ZlcnJpZGVuTWV0aG9kcy9hZnRlci9iYXIvQi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVNZW1iZXJzL3N0YXRpY0ltcG9ydEFuZE92ZXJyaWRlbk1ldGhvZHMvYWZ0ZXIvYmFyL0IuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMTBmMDBjCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVNZW1iZXJzL3N0YXRpY0ltcG9ydEFuZE92ZXJyaWRlbk1ldGhvZHMvYWZ0ZXIvYmFyL0IuamF2YQpAQCAtMCwwICsxLDUgQEAKK3BhY2thZ2UgYmFyOworCitwdWJsaWMgY2xhc3MgQiB7CisgICAgcHVibGljIHN0YXRpYyB2b2lkIGZvbyhTdHJpbmcgcykge30KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZU1lbWJlcnMvc3RhdGljSW1wb3J0QW5kT3ZlcnJpZGVuTWV0aG9kcy9hZnRlci9iYXIvVS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVNZW1iZXJzL3N0YXRpY0ltcG9ydEFuZE92ZXJyaWRlbk1ldGhvZHMvYWZ0ZXIvYmFyL1UuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYTQxZmQ4Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVNZW1iZXJzL3N0YXRpY0ltcG9ydEFuZE92ZXJyaWRlbk1ldGhvZHMvYWZ0ZXIvYmFyL1UuamF2YQpAQCAtMCwwICsxLDcgQEAKK2ltcG9ydCBiYXIuQTsKKworY2xhc3MgVXNhZ2UgeworICB2b2lkIGJhcigpIHsKKyAgICBBLmZvbygpOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVNZW1iZXJzL3N0YXRpY0ltcG9ydEFuZE92ZXJyaWRlbk1ldGhvZHMvYmVmb3JlL2Jhci9BLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZU1lbWJlcnMvc3RhdGljSW1wb3J0QW5kT3ZlcnJpZGVuTWV0aG9kcy9iZWZvcmUvYmFyL0EuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMTczMTQ3Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVNZW1iZXJzL3N0YXRpY0ltcG9ydEFuZE92ZXJyaWRlbk1ldGhvZHMvYmVmb3JlL2Jhci9BLmphdmEKQEAgLTAsMCArMSw0IEBACitwYWNrYWdlIGJhcjsKKworcHVibGljIGNsYXNzIEEgeworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlTWVtYmVycy9zdGF0aWNJbXBvcnRBbmRPdmVycmlkZW5NZXRob2RzL2JlZm9yZS9iYXIvQi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVNZW1iZXJzL3N0YXRpY0ltcG9ydEFuZE92ZXJyaWRlbk1ldGhvZHMvYmVmb3JlL2Jhci9CLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjVmZjMwNwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlTWVtYmVycy9zdGF0aWNJbXBvcnRBbmRPdmVycmlkZW5NZXRob2RzL2JlZm9yZS9iYXIvQi5qYXZhCkBAIC0wLDAgKzEsNiBAQAorcGFja2FnZSBiYXI7CisKK3B1YmxpYyBjbGFzcyBCIHsKKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgZm9vKCkge30KKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgZm9vKFN0cmluZyBzKSB7fQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlTWVtYmVycy9zdGF0aWNJbXBvcnRBbmRPdmVycmlkZW5NZXRob2RzL2JlZm9yZS9iYXIvVS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVNZW1iZXJzL3N0YXRpY0ltcG9ydEFuZE92ZXJyaWRlbk1ldGhvZHMvYmVmb3JlL2Jhci9VLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjdjYWY3MwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlTWVtYmVycy9zdGF0aWNJbXBvcnRBbmRPdmVycmlkZW5NZXRob2RzL2JlZm9yZS9iYXIvVS5qYXZhCkBAIC0wLDAgKzEsNyBAQAoraW1wb3J0IHN0YXRpYyBiYXIuQi5mb287CisKK2NsYXNzIFVzYWdlIHsKKyAgdm9pZCBiYXIoKSB7CisgICAgZm9vKCk7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZU1lbWJlcnMvdHdvTWV0aG9kcy9hZnRlci9wYWNrMS9BLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZU1lbWJlcnMvdHdvTWV0aG9kcy9hZnRlci9wYWNrMS9BLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTI2MDk5YQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlTWVtYmVycy90d29NZXRob2RzL2FmdGVyL3BhY2sxL0EuamF2YQpAQCAtMCwwICsxLDUgQEAKK3BhY2thZ2UgcGFjazE7CisKK3B1YmxpYyBjbGFzcyBBIHsKKworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlTWVtYmVycy90d29NZXRob2RzL2FmdGVyL3BhY2sxL0MuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlTWVtYmVycy90d29NZXRob2RzL2FmdGVyL3BhY2sxL0MuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYTJiM2ViCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVNZW1iZXJzL3R3b01ldGhvZHMvYWZ0ZXIvcGFjazEvQy5qYXZhCkBAIC0wLDAgKzEsMTQgQEAKK3BhY2thZ2UgcGFjazE7CisKK3B1YmxpYyBjbGFzcyBDIHsKKyAgICBwdWJsaWMgc3RhdGljIGludCBvdXJGaWVsZCA9IDEwOworCisgICAgcHJpdmF0ZSBzdGF0aWMgdm9pZCBiYXIoKSB7CisgICAgICAgIGZvbygpOworICAgICAgICBvdXJGaWVsZCA9IDExOworICAgIH0KKworICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBmb28oKSB7CisgICAgICAgIGJhcigpOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZU1lbWJlcnMvdHdvTWV0aG9kcy9hZnRlci9wYWNrMi9CLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZU1lbWJlcnMvdHdvTWV0aG9kcy9hZnRlci9wYWNrMi9CLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGY5NjNiNQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlTWVtYmVycy90d29NZXRob2RzL2FmdGVyL3BhY2syL0IuamF2YQpAQCAtMCwwICsxLDQgQEAKK3BhY2thZ2UgcGFjazI7CisKK3B1YmxpYyBjbGFzcyBCIHsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZU1lbWJlcnMvdHdvTWV0aG9kcy9iZWZvcmUvcGFjazEvQS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVNZW1iZXJzL3R3b01ldGhvZHMvYmVmb3JlL3BhY2sxL0EuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZDhiNzI4OAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlTWVtYmVycy90d29NZXRob2RzL2JlZm9yZS9wYWNrMS9BLmphdmEKQEAgLTAsMCArMSwxMyBAQAorcGFja2FnZSBwYWNrMTsKKworcHVibGljIGNsYXNzIEEgeworICAgIHB1YmxpYyBzdGF0aWMgaW50IG91ckZpZWxkID0gMTA7CisgICAgcHJpdmF0ZSBzdGF0aWMgdm9pZCBiYXIoKSB7CisgICAgICAgIGZvbygpOworICAgICAgICBvdXJGaWVsZCA9IDExOworICAgIH0KKworICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBmb28oKSB7CisgICAgICAgIGJhcigpOworICAgIH0gICAgCit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVNZW1iZXJzL3R3b01ldGhvZHMvYmVmb3JlL3BhY2sxL0MuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlTWVtYmVycy90d29NZXRob2RzL2JlZm9yZS9wYWNrMS9DLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmI3ZTNlMAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlTWVtYmVycy90d29NZXRob2RzL2JlZm9yZS9wYWNrMS9DLmphdmEKQEAgLTAsMCArMSw0IEBACitwYWNrYWdlIHBhY2sxOworCitwdWJsaWMgY2xhc3MgQyB7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVNZW1iZXJzL3R3b01ldGhvZHMvYmVmb3JlL3BhY2syL0IuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlTWVtYmVycy90d29NZXRob2RzL2JlZm9yZS9wYWNrMi9CLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGY5NjNiNQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlTWVtYmVycy90d29NZXRob2RzL2JlZm9yZS9wYWNrMi9CLmphdmEKQEAgLTAsMCArMSw0IEBACitwYWNrYWdlIHBhY2syOworCitwdWJsaWMgY2xhc3MgQiB7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVNZW1iZXJzL3VudG91Y2hlZFZpc2liaWxpdHkvYWZ0ZXIvcGFjazEvQS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVNZW1iZXJzL3VudG91Y2hlZFZpc2liaWxpdHkvYWZ0ZXIvcGFjazEvQS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZkZmM3MGQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZU1lbWJlcnMvdW50b3VjaGVkVmlzaWJpbGl0eS9hZnRlci9wYWNrMS9BLmphdmEKQEAgLTAsMCArMSwyMCBAQAorLyoKKyAqIENvcHlyaWdodCAyMDAwLTIwMTEgSmV0QnJhaW5zIHMuci5vLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KK3BhY2thZ2UgcGFjazE7CisKK3B1YmxpYyBjbGFzcyBBIHsKKworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlTWVtYmVycy91bnRvdWNoZWRWaXNpYmlsaXR5L2FmdGVyL3BhY2sxL0MuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlTWVtYmVycy91bnRvdWNoZWRWaXNpYmlsaXR5L2FmdGVyL3BhY2sxL0MuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYzIwMGIxCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVNZW1iZXJzL3VudG91Y2hlZFZpc2liaWxpdHkvYWZ0ZXIvcGFjazEvQy5qYXZhCkBAIC0wLDAgKzEsMjMgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwMC0yMDExIEpldEJyYWlucyBzLnIuby4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCitwYWNrYWdlIHBhY2sxOworcHVibGljIGNsYXNzIEMgeworICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBmb28oKSB7CisgICAgICAgIGJhcigpOworICAgIH0KKworICAgIHByaXZhdGUgc3RhdGljIHZvaWQgYmFyKCl7fQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlTWVtYmVycy91bnRvdWNoZWRWaXNpYmlsaXR5L2FmdGVyL3BhY2syL0IuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlTWVtYmVycy91bnRvdWNoZWRWaXNpYmlsaXR5L2FmdGVyL3BhY2syL0IuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41M2Q1NDlhCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVNZW1iZXJzL3VudG91Y2hlZFZpc2liaWxpdHkvYWZ0ZXIvcGFjazIvQi5qYXZhCkBAIC0wLDAgKzEsMjIgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwMC0yMDExIEpldEJyYWlucyBzLnIuby4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCitwYWNrYWdlIHBhY2syOworaW1wb3J0IHBhY2sxLio7CitwdWJsaWMgY2xhc3MgQiB7CisgIHByb3RlY3RlZCBCKCl7CisgICAgQy5mb28oKTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlTWVtYmVycy91bnRvdWNoZWRWaXNpYmlsaXR5L2JlZm9yZS9wYWNrMS9BLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZU1lbWJlcnMvdW50b3VjaGVkVmlzaWJpbGl0eS9iZWZvcmUvcGFjazEvQS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY5YzZhOWMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZU1lbWJlcnMvdW50b3VjaGVkVmlzaWJpbGl0eS9iZWZvcmUvcGFjazEvQS5qYXZhCkBAIC0wLDAgKzEsMjQgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwMC0yMDExIEpldEJyYWlucyBzLnIuby4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCitwYWNrYWdlIHBhY2sxOworCitwdWJsaWMgY2xhc3MgQSB7CisgICAgcHVibGljIHN0YXRpYyB2b2lkIGZvbygpIHsKKyAgICAgICAgYmFyKCk7CisgICAgfQorCisgICAgcHJpdmF0ZSBzdGF0aWMgdm9pZCBiYXIoKXt9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVNZW1iZXJzL3VudG91Y2hlZFZpc2liaWxpdHkvYmVmb3JlL3BhY2sxL0MuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlTWVtYmVycy91bnRvdWNoZWRWaXNpYmlsaXR5L2JlZm9yZS9wYWNrMS9DLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzc3ZjIwNAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlTWVtYmVycy91bnRvdWNoZWRWaXNpYmlsaXR5L2JlZm9yZS9wYWNrMS9DLmphdmEKQEAgLTAsMCArMSwxNyBAQAorLyoKKyAqIENvcHlyaWdodCAyMDAwLTIwMTEgSmV0QnJhaW5zIHMuci5vLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KK3BhY2thZ2UgcGFjazE7CitwdWJsaWMgY2xhc3MgQyB7fQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlTWVtYmVycy91bnRvdWNoZWRWaXNpYmlsaXR5L2JlZm9yZS9wYWNrMi9CLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZU1lbWJlcnMvdW50b3VjaGVkVmlzaWJpbGl0eS9iZWZvcmUvcGFjazIvQi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU0MTcwM2QKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZU1lbWJlcnMvdW50b3VjaGVkVmlzaWJpbGl0eS9iZWZvcmUvcGFjazIvQi5qYXZhCkBAIC0wLDAgKzEsMjIgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwMC0yMDExIEpldEJyYWlucyBzLnIuby4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCitwYWNrYWdlIHBhY2syOworaW1wb3J0IHBhY2sxLio7CitwdWJsaWMgY2xhc3MgQiB7CisgIHByb3RlY3RlZCBCKCl7CisgICAgQS5mb28oKTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlTWVtYmVycy93ZWlyZERlY2xhcmF0aW9uL2FmdGVyL0EuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlTWVtYmVycy93ZWlyZERlY2xhcmF0aW9uL2FmdGVyL0EuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YmQ3MWIyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVNZW1iZXJzL3dlaXJkRGVjbGFyYXRpb24vYWZ0ZXIvQS5qYXZhCkBAIC0wLDAgKzEsMyBAQAorcHVibGljIGNsYXNzIEEgeworICAgIGZpbmFsIHN0YXRpYyBTdHJpbmcgUklHSFRfSlVTVElGSUVEX1BSRUZJWCAgPSAgICIlbCIgOworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlTWVtYmVycy93ZWlyZERlY2xhcmF0aW9uL2FmdGVyL0IuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlTWVtYmVycy93ZWlyZERlY2xhcmF0aW9uL2FmdGVyL0IuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYmU2ZWNhCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVNZW1iZXJzL3dlaXJkRGVjbGFyYXRpb24vYWZ0ZXIvQi5qYXZhCkBAIC0wLDAgKzEsNCBAQAorcHVibGljIGNsYXNzIEIgeworICAgIGZpbmFsIHN0YXRpYyBTdHJpbmcKKyAgICAgICAgICAgIExFRlRfSlVTVElGSUVEX1BSRUZJWCAgID0gICAiJXIiOworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlTWVtYmVycy93ZWlyZERlY2xhcmF0aW9uL2JlZm9yZS9BLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZU1lbWJlcnMvd2VpcmREZWNsYXJhdGlvbi9iZWZvcmUvQS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg0MWM1Y2IKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZU1lbWJlcnMvd2VpcmREZWNsYXJhdGlvbi9iZWZvcmUvQS5qYXZhCkBAIC0wLDAgKzEsNSBAQAorcHVibGljIGNsYXNzIEEgeworICAgZmluYWwgc3RhdGljIFN0cmluZworICAgICAgICAgICBMRUZUX0pVU1RJRklFRF9QUkVGSVggICA9ICAgIiVyIiAsCisgICAgICAgICAgIFJJR0hUX0pVU1RJRklFRF9QUkVGSVggID0gICAiJWwiIDsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZU1lbWJlcnMvd2VpcmREZWNsYXJhdGlvbi9iZWZvcmUvQi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVNZW1iZXJzL3dlaXJkRGVjbGFyYXRpb24vYmVmb3JlL0IuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYmJlNGRjCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVNZW1iZXJzL3dlaXJkRGVjbGFyYXRpb24vYmVmb3JlL0IuamF2YQpAQCAtMCwwICsxLDIgQEAKK3B1YmxpYyBjbGFzcyBCIHsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZU1lbWJlcnMvd3JpdGFibGVGaWVsZC9hZnRlci9BLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZU1lbWJlcnMvd3JpdGFibGVGaWVsZC9hZnRlci9BLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTc3MmZiMQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlTWVtYmVycy93cml0YWJsZUZpZWxkL2FmdGVyL0EuamF2YQpAQCAtMCwwICsxLDQgQEAKK3B1YmxpYyBpbnRlcmZhY2UgQSB7CisKKyAgICBTdHJpbmcgT05FID0gIiI7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVNZW1iZXJzL3dyaXRhYmxlRmllbGQvYWZ0ZXIvQi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVNZW1iZXJzL3dyaXRhYmxlRmllbGQvYWZ0ZXIvQi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBhNzBhMjUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZU1lbWJlcnMvd3JpdGFibGVGaWVsZC9hZnRlci9CLmphdmEKQEAgLTAsMCArMSw2IEBACitwdWJsaWMgY2xhc3MgQiB7CisKKyAgICB2b2lkIGZvbygpIHsKKyAgICBBLk9ORSA9ICJmb28iOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVNZW1iZXJzL3dyaXRhYmxlRmllbGQvYmVmb3JlL0EuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlTWVtYmVycy93cml0YWJsZUZpZWxkL2JlZm9yZS9BLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzlhYmMwMjgKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZU1lbWJlcnMvd3JpdGFibGVGaWVsZC9iZWZvcmUvQS5qYXZhCkBAIC0wLDAgKzEsMyBAQAorcHVibGljIGludGVyZmFjZSBBIHsKKyAgICAKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZU1lbWJlcnMvd3JpdGFibGVGaWVsZC9iZWZvcmUvQi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVNZW1iZXJzL3dyaXRhYmxlRmllbGQvYmVmb3JlL0IuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNTkzM2RjCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVNZW1iZXJzL3dyaXRhYmxlRmllbGQvYmVmb3JlL0IuamF2YQpAQCAtMCwwICsxLDcgQEAKK3B1YmxpYyBjbGFzcyBCIHsKKyAgcHVibGljIHN0YXRpYyBTdHJpbmcgT05FID0gIiI7CisKKyAgdm9pZCBmb28oKSB7CisgICAgT05FID0gImZvbyI7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZVBhY2thZ2UvaW5zaWRlUGFja2FnZS9hZnRlci9hL2IvYS9BLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZVBhY2thZ2UvaW5zaWRlUGFja2FnZS9hZnRlci9hL2IvYS9BLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTJmNzdiMQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlUGFja2FnZS9pbnNpZGVQYWNrYWdlL2FmdGVyL2EvYi9hL0EuamF2YQpAQCAtMCwwICsxLDQgQEAKK3BhY2thZ2UgYS5iLmE7CisKK2NsYXNzIEEgeworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlUGFja2FnZS9pbnNpZGVQYWNrYWdlL2FmdGVyL2EvYi9hL2IvZW1wdHkudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVQYWNrYWdlL2luc2lkZVBhY2thZ2UvYWZ0ZXIvYS9iL2EvYi9lbXB0eS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY5ZGUyOQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlUGFja2FnZS9pbnNpZGVQYWNrYWdlL2FmdGVyL2EvYi9hL2IvZW1wdHkudHh0CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZVBhY2thZ2UvaW5zaWRlUGFja2FnZS9iZWZvcmUvYS9BLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZVBhY2thZ2UvaW5zaWRlUGFja2FnZS9iZWZvcmUvYS9BLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGU5OTg1YwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlUGFja2FnZS9pbnNpZGVQYWNrYWdlL2JlZm9yZS9hL0EuamF2YQpAQCAtMCwwICsxLDQgQEAKK3BhY2thZ2UgYTsKKworY2xhc3MgQSB7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVQYWNrYWdlL2luc2lkZVBhY2thZ2UvYmVmb3JlL2EvYi9lbXB0eS50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZVBhY2thZ2UvaW5zaWRlUGFja2FnZS9iZWZvcmUvYS9iL2VtcHR5LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjlkZTI5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVQYWNrYWdlL2luc2lkZVBhY2thZ2UvYmVmb3JlL2EvYi9lbXB0eS50eHQKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlUGFja2FnZS9tb3ZlU2luZ2xlL2FmdGVyL3BhY2syL1VzZXIxLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZVBhY2thZ2UvbW92ZVNpbmdsZS9hZnRlci9wYWNrMi9Vc2VyMS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ3YTZkMGYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZVBhY2thZ2UvbW92ZVNpbmdsZS9hZnRlci9wYWNrMi9Vc2VyMS5qYXZhCkBAIC0wLDAgKzEsNyBAQAorcGFja2FnZSBwYWNrMjsKKworaW1wb3J0IHRhcmdldC5wYWNrMS5DbGFzczE7CisKK3B1YmxpYyBjbGFzcyBVc2VyMSB7CisgIENsYXNzMSBhOworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlUGFja2FnZS9tb3ZlU2luZ2xlL2FmdGVyL3BhY2syL1VzZXIyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZVBhY2thZ2UvbW92ZVNpbmdsZS9hZnRlci9wYWNrMi9Vc2VyMi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdlNzgxOTQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZVBhY2thZ2UvbW92ZVNpbmdsZS9hZnRlci9wYWNrMi9Vc2VyMi5qYXZhCkBAIC0wLDAgKzEsNyBAQAorcGFja2FnZSBwYWNrMjsKKworaW1wb3J0IHRhcmdldC5wYWNrMS4qOworCitwdWJsaWMgY2xhc3MgVXNlcjEgeworICBDbGFzczEgYTsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZVBhY2thZ2UvbW92ZVNpbmdsZS9hZnRlci90YXJnZXQvZW1wdHkudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVQYWNrYWdlL21vdmVTaW5nbGUvYWZ0ZXIvdGFyZ2V0L2VtcHR5LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjlkZTI5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVQYWNrYWdlL21vdmVTaW5nbGUvYWZ0ZXIvdGFyZ2V0L2VtcHR5LnR4dApkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVQYWNrYWdlL21vdmVTaW5nbGUvYWZ0ZXIvdGFyZ2V0L3BhY2sxL0NsYXNzMS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVQYWNrYWdlL21vdmVTaW5nbGUvYWZ0ZXIvdGFyZ2V0L3BhY2sxL0NsYXNzMS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA5NGVhYWQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZVBhY2thZ2UvbW92ZVNpbmdsZS9hZnRlci90YXJnZXQvcGFjazEvQ2xhc3MxLmphdmEKQEAgLTAsMCArMSw0IEBACitwYWNrYWdlIHRhcmdldC5wYWNrMTsKKworcHVibGljIGNsYXNzIENsYXNzMSB7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVQYWNrYWdlL21vdmVTaW5nbGUvYmVmb3JlL3BhY2sxL0NsYXNzMS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVQYWNrYWdlL21vdmVTaW5nbGUvYmVmb3JlL3BhY2sxL0NsYXNzMS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIzMWZlMDYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZVBhY2thZ2UvbW92ZVNpbmdsZS9iZWZvcmUvcGFjazEvQ2xhc3MxLmphdmEKQEAgLTAsMCArMSw0IEBACitwYWNrYWdlIHBhY2sxOworCitwdWJsaWMgY2xhc3MgQ2xhc3MxIHsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZVBhY2thZ2UvbW92ZVNpbmdsZS9iZWZvcmUvcGFjazIvVXNlcjEuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlUGFja2FnZS9tb3ZlU2luZ2xlL2JlZm9yZS9wYWNrMi9Vc2VyMS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA3Mjg3YTQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZVBhY2thZ2UvbW92ZVNpbmdsZS9iZWZvcmUvcGFjazIvVXNlcjEuamF2YQpAQCAtMCwwICsxLDcgQEAKK3BhY2thZ2UgcGFjazI7CisKK2ltcG9ydCBwYWNrMS5DbGFzczE7CisKK3B1YmxpYyBjbGFzcyBVc2VyMSB7CisgIENsYXNzMSBhOworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlUGFja2FnZS9tb3ZlU2luZ2xlL2JlZm9yZS9wYWNrMi9Vc2VyMi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVQYWNrYWdlL21vdmVTaW5nbGUvYmVmb3JlL3BhY2syL1VzZXIyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWNmM2NlNQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlUGFja2FnZS9tb3ZlU2luZ2xlL2JlZm9yZS9wYWNrMi9Vc2VyMi5qYXZhCkBAIC0wLDAgKzEsNyBAQAorcGFja2FnZSBwYWNrMjsKKworaW1wb3J0IHBhY2sxLio7CisKK3B1YmxpYyBjbGFzcyBVc2VyMSB7CisgIENsYXNzMSBhOworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlUGFja2FnZS9tb3ZlU2luZ2xlL2JlZm9yZS90YXJnZXQvZW1wdHkudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVQYWNrYWdlL21vdmVTaW5nbGUvYmVmb3JlL3RhcmdldC9lbXB0eS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY5ZGUyOQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlUGFja2FnZS9tb3ZlU2luZ2xlL2JlZm9yZS90YXJnZXQvZW1wdHkudHh0CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZVBhY2thZ2UvcXVhbGlmaWVkUmVmL2FmdGVyL1VzYWdlLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZVBhY2thZ2UvcXVhbGlmaWVkUmVmL2FmdGVyL1VzYWdlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDIzNDExZQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlUGFja2FnZS9xdWFsaWZpZWRSZWYvYWZ0ZXIvVXNhZ2UuamF2YQpAQCAtMCwwICsxLDUgQEAKK3B1YmxpYyBjbGFzcyBVc2FnZSB7CisgICAgT2JqZWN0IG1ldGhvZCgpIHsKKyAgICAgICAgcmV0dXJuIHBhY2thZ2UyLnRlc3QuQS5tZXRob2QoKTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVQYWNrYWdlL3F1YWxpZmllZFJlZi9hZnRlci9wYWNrYWdlMS9lbXB0eS50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZVBhY2thZ2UvcXVhbGlmaWVkUmVmL2FmdGVyL3BhY2thZ2UxL2VtcHR5LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjlkZTI5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVQYWNrYWdlL3F1YWxpZmllZFJlZi9hZnRlci9wYWNrYWdlMS9lbXB0eS50eHQKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlUGFja2FnZS9xdWFsaWZpZWRSZWYvYWZ0ZXIvcGFja2FnZTIvZW1wdHkudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVQYWNrYWdlL3F1YWxpZmllZFJlZi9hZnRlci9wYWNrYWdlMi9lbXB0eS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY5ZGUyOQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlUGFja2FnZS9xdWFsaWZpZWRSZWYvYWZ0ZXIvcGFja2FnZTIvZW1wdHkudHh0CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZVBhY2thZ2UvcXVhbGlmaWVkUmVmL2FmdGVyL3BhY2thZ2UyL3Rlc3QvQS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVQYWNrYWdlL3F1YWxpZmllZFJlZi9hZnRlci9wYWNrYWdlMi90ZXN0L0EuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZTBlNThkCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVQYWNrYWdlL3F1YWxpZmllZFJlZi9hZnRlci9wYWNrYWdlMi90ZXN0L0EuamF2YQpAQCAtMCwwICsxLDcgQEAKK3BhY2thZ2UgcGFja2FnZTIudGVzdDsKKworcHVibGljIGNsYXNzIEEgeworICAgIHN0YXRpYyBPYmplY3QgbWV0aG9kKCkgeworICAgICAgICByZXR1cm4gbnVsbDsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVQYWNrYWdlL3F1YWxpZmllZFJlZi9iZWZvcmUvVXNhZ2UuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlUGFja2FnZS9xdWFsaWZpZWRSZWYvYmVmb3JlL1VzYWdlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWIyMmE1NQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlUGFja2FnZS9xdWFsaWZpZWRSZWYvYmVmb3JlL1VzYWdlLmphdmEKQEAgLTAsMCArMSw1IEBACitwdWJsaWMgY2xhc3MgVXNhZ2UgeworICAgIE9iamVjdCBtZXRob2QoKSB7CisgICAgICAgIHJldHVybiBwYWNrYWdlMS50ZXN0LkEubWV0aG9kKCk7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlUGFja2FnZS9xdWFsaWZpZWRSZWYvYmVmb3JlL3BhY2thZ2UxL2VtcHR5LnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlUGFja2FnZS9xdWFsaWZpZWRSZWYvYmVmb3JlL3BhY2thZ2UxL2VtcHR5LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjlkZTI5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVQYWNrYWdlL3F1YWxpZmllZFJlZi9iZWZvcmUvcGFja2FnZTEvZW1wdHkudHh0CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZVBhY2thZ2UvcXVhbGlmaWVkUmVmL2JlZm9yZS9wYWNrYWdlMS90ZXN0L0EuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlUGFja2FnZS9xdWFsaWZpZWRSZWYvYmVmb3JlL3BhY2thZ2UxL3Rlc3QvQS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI0ODk2MWQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZVBhY2thZ2UvcXVhbGlmaWVkUmVmL2JlZm9yZS9wYWNrYWdlMS90ZXN0L0EuamF2YQpAQCAtMCwwICsxLDcgQEAKK3BhY2thZ2UgcGFja2FnZTEudGVzdDsKKworcHVibGljIGNsYXNzIEEgeworICAgIHN0YXRpYyBPYmplY3QgbWV0aG9kKCkgeworICAgICAgICByZXR1cm4gbnVsbDsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVQYWNrYWdlL3F1YWxpZmllZFJlZi9iZWZvcmUvcGFja2FnZTIvZW1wdHkudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVQYWNrYWdlL3F1YWxpZmllZFJlZi9iZWZvcmUvcGFja2FnZTIvZW1wdHkudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2OWRlMjkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZVBhY2thZ2UvcXVhbGlmaWVkUmVmL2JlZm9yZS9wYWNrYWdlMi9lbXB0eS50eHQKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlUGFja2FnZUFzRGlyL21vdmVQYWNrYWdlL2FmdGVyL3NyYzEvcGFjazIvVXNhZ2VzRnJvbUJvdGguamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlUGFja2FnZUFzRGlyL21vdmVQYWNrYWdlL2FmdGVyL3NyYzEvcGFjazIvVXNhZ2VzRnJvbUJvdGguamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZDQ0MTBmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVQYWNrYWdlQXNEaXIvbW92ZVBhY2thZ2UvYWZ0ZXIvc3JjMS9wYWNrMi9Vc2FnZXNGcm9tQm90aC5qYXZhCkBAIC0wLDAgKzEsOSBAQAorcGFja2FnZSBwYWNrMjsKKworaW1wb3J0IHBhY2sxLio7CitpbXBvcnQgdGFyZ2V0LnBhY2sxLlMxOworCitwdWJsaWMgY2xhc3MgVXNhZ2VzRnJvbUJvdGggeworICBTMSBzMTsKKyAgUzIgczI7Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZVBhY2thZ2VBc0Rpci9tb3ZlUGFja2FnZS9hZnRlci9zcmMxL3RhcmdldC9lbXB0eS50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZVBhY2thZ2VBc0Rpci9tb3ZlUGFja2FnZS9hZnRlci9zcmMxL3RhcmdldC9lbXB0eS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY5ZGUyOQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlUGFja2FnZUFzRGlyL21vdmVQYWNrYWdlL2FmdGVyL3NyYzEvdGFyZ2V0L2VtcHR5LnR4dApkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVQYWNrYWdlQXNEaXIvbW92ZVBhY2thZ2UvYWZ0ZXIvc3JjMS90YXJnZXQvcGFjazEvUzEuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlUGFja2FnZUFzRGlyL21vdmVQYWNrYWdlL2FmdGVyL3NyYzEvdGFyZ2V0L3BhY2sxL1MxLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmFmZDYwZAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlUGFja2FnZUFzRGlyL21vdmVQYWNrYWdlL2FmdGVyL3NyYzEvdGFyZ2V0L3BhY2sxL1MxLmphdmEKQEAgLTAsMCArMSwzIEBACitwYWNrYWdlIHRhcmdldC5wYWNrMTsKKworcHVibGljIGNsYXNzIFMxe30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlUGFja2FnZUFzRGlyL21vdmVQYWNrYWdlL2FmdGVyL3NyYzIvcGFjazEvUzIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlUGFja2FnZUFzRGlyL21vdmVQYWNrYWdlL2FmdGVyL3NyYzIvcGFjazEvUzIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYmQyZDIwCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVQYWNrYWdlQXNEaXIvbW92ZVBhY2thZ2UvYWZ0ZXIvc3JjMi9wYWNrMS9TMi5qYXZhCkBAIC0wLDAgKzEsMyBAQAorcGFja2FnZSBwYWNrMTsKKworcHVibGljIGNsYXNzIFMye30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlUGFja2FnZUFzRGlyL21vdmVQYWNrYWdlL2FmdGVyL3NyYzIvcGFjazIvVXNhZ2VzRnJvbUJvdGgyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZVBhY2thZ2VBc0Rpci9tb3ZlUGFja2FnZS9hZnRlci9zcmMyL3BhY2syL1VzYWdlc0Zyb21Cb3RoMi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjliNTNmMzg1Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVQYWNrYWdlQXNEaXIvbW92ZVBhY2thZ2UvYWZ0ZXIvc3JjMi9wYWNrMi9Vc2FnZXNGcm9tQm90aDIuamF2YQpAQCAtMCwwICsxLDkgQEAKK3BhY2thZ2UgcGFjazI7CisKK2ltcG9ydCBwYWNrMS4qOworaW1wb3J0IHRhcmdldC5wYWNrMS5TMTsKKworcHVibGljIGNsYXNzIFVzYWdlc0Zyb21Cb3RoMiB7CisgIFMxIHMxOworICBTMiBzMjsKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlUGFja2FnZUFzRGlyL21vdmVQYWNrYWdlL2JlZm9yZS9zcmMxL3BhY2sxL1MxLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZVBhY2thZ2VBc0Rpci9tb3ZlUGFja2FnZS9iZWZvcmUvc3JjMS9wYWNrMS9TMS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMwYTVmMzEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZVBhY2thZ2VBc0Rpci9tb3ZlUGFja2FnZS9iZWZvcmUvc3JjMS9wYWNrMS9TMS5qYXZhCkBAIC0wLDAgKzEsMyBAQAorcGFja2FnZSBwYWNrMTsKKworcHVibGljIGNsYXNzIFMxe30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlUGFja2FnZUFzRGlyL21vdmVQYWNrYWdlL2JlZm9yZS9zcmMxL3BhY2syL1VzYWdlc0Zyb21Cb3RoLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZVBhY2thZ2VBc0Rpci9tb3ZlUGFja2FnZS9iZWZvcmUvc3JjMS9wYWNrMi9Vc2FnZXNGcm9tQm90aC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkwNmIxZmUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZVBhY2thZ2VBc0Rpci9tb3ZlUGFja2FnZS9iZWZvcmUvc3JjMS9wYWNrMi9Vc2FnZXNGcm9tQm90aC5qYXZhCkBAIC0wLDAgKzEsOCBAQAorcGFja2FnZSBwYWNrMjsKKworaW1wb3J0IHBhY2sxLio7CisKK3B1YmxpYyBjbGFzcyBVc2FnZXNGcm9tQm90aCB7CisgIFMxIHMxOworICBTMiBzMjsKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlUGFja2FnZUFzRGlyL21vdmVQYWNrYWdlL2JlZm9yZS9zcmMxL3RhcmdldC9lbXB0eS50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZVBhY2thZ2VBc0Rpci9tb3ZlUGFja2FnZS9iZWZvcmUvc3JjMS90YXJnZXQvZW1wdHkudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2OWRlMjkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZVBhY2thZ2VBc0Rpci9tb3ZlUGFja2FnZS9iZWZvcmUvc3JjMS90YXJnZXQvZW1wdHkudHh0CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZVBhY2thZ2VBc0Rpci9tb3ZlUGFja2FnZS9iZWZvcmUvc3JjMi9wYWNrMS9TMi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVQYWNrYWdlQXNEaXIvbW92ZVBhY2thZ2UvYmVmb3JlL3NyYzIvcGFjazEvUzIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYmQyZDIwCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVQYWNrYWdlQXNEaXIvbW92ZVBhY2thZ2UvYmVmb3JlL3NyYzIvcGFjazEvUzIuamF2YQpAQCAtMCwwICsxLDMgQEAKK3BhY2thZ2UgcGFjazE7CisKK3B1YmxpYyBjbGFzcyBTMnt9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZVBhY2thZ2VBc0Rpci9tb3ZlUGFja2FnZS9iZWZvcmUvc3JjMi9wYWNrMi9Vc2FnZXNGcm9tQm90aDIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlUGFja2FnZUFzRGlyL21vdmVQYWNrYWdlL2JlZm9yZS9zcmMyL3BhY2syL1VzYWdlc0Zyb21Cb3RoMi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ4ZWNlMWMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZVBhY2thZ2VBc0Rpci9tb3ZlUGFja2FnZS9iZWZvcmUvc3JjMi9wYWNrMi9Vc2FnZXNGcm9tQm90aDIuamF2YQpAQCAtMCwwICsxLDggQEAKK3BhY2thZ2UgcGFjazI7CisKK2ltcG9ydCBwYWNrMS4qOworCitwdWJsaWMgY2xhc3MgVXNhZ2VzRnJvbUJvdGgyIHsKKyAgUzEgczE7CisgIFMyIHMyOworfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVQYWNrYWdlQXNEaXIvbW92ZVBhY2thZ2VXaXRoVHh0RmlsZXNJbnNpZGUvYWZ0ZXIvc3JjMS9wYWNrMi9Vc2FnZXNGcm9tQm90aC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVQYWNrYWdlQXNEaXIvbW92ZVBhY2thZ2VXaXRoVHh0RmlsZXNJbnNpZGUvYWZ0ZXIvc3JjMS9wYWNrMi9Vc2FnZXNGcm9tQm90aC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZkNDQxMGYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZVBhY2thZ2VBc0Rpci9tb3ZlUGFja2FnZVdpdGhUeHRGaWxlc0luc2lkZS9hZnRlci9zcmMxL3BhY2syL1VzYWdlc0Zyb21Cb3RoLmphdmEKQEAgLTAsMCArMSw5IEBACitwYWNrYWdlIHBhY2syOworCitpbXBvcnQgcGFjazEuKjsKK2ltcG9ydCB0YXJnZXQucGFjazEuUzE7CisKK3B1YmxpYyBjbGFzcyBVc2FnZXNGcm9tQm90aCB7CisgIFMxIHMxOworICBTMiBzMjsKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlUGFja2FnZUFzRGlyL21vdmVQYWNrYWdlV2l0aFR4dEZpbGVzSW5zaWRlL2FmdGVyL3NyYzEvdGFyZ2V0L2VtcHR5LnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlUGFja2FnZUFzRGlyL21vdmVQYWNrYWdlV2l0aFR4dEZpbGVzSW5zaWRlL2FmdGVyL3NyYzEvdGFyZ2V0L2VtcHR5LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjlkZTI5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVQYWNrYWdlQXNEaXIvbW92ZVBhY2thZ2VXaXRoVHh0RmlsZXNJbnNpZGUvYWZ0ZXIvc3JjMS90YXJnZXQvZW1wdHkudHh0CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZVBhY2thZ2VBc0Rpci9tb3ZlUGFja2FnZVdpdGhUeHRGaWxlc0luc2lkZS9hZnRlci9zcmMxL3RhcmdldC9wYWNrMS9TMS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVQYWNrYWdlQXNEaXIvbW92ZVBhY2thZ2VXaXRoVHh0RmlsZXNJbnNpZGUvYWZ0ZXIvc3JjMS90YXJnZXQvcGFjazEvUzEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYWZkNjBkCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVQYWNrYWdlQXNEaXIvbW92ZVBhY2thZ2VXaXRoVHh0RmlsZXNJbnNpZGUvYWZ0ZXIvc3JjMS90YXJnZXQvcGFjazEvUzEuamF2YQpAQCAtMCwwICsxLDMgQEAKK3BhY2thZ2UgdGFyZ2V0LnBhY2sxOworCitwdWJsaWMgY2xhc3MgUzF7fQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVQYWNrYWdlQXNEaXIvbW92ZVBhY2thZ2VXaXRoVHh0RmlsZXNJbnNpZGUvYWZ0ZXIvc3JjMS90YXJnZXQvcGFjazEvdGVzdF9yZWFkbWUudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVQYWNrYWdlQXNEaXIvbW92ZVBhY2thZ2VXaXRoVHh0RmlsZXNJbnNpZGUvYWZ0ZXIvc3JjMS90YXJnZXQvcGFjazEvdGVzdF9yZWFkbWUudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVhNzg2ZmYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZVBhY2thZ2VBc0Rpci9tb3ZlUGFja2FnZVdpdGhUeHRGaWxlc0luc2lkZS9hZnRlci9zcmMxL3RhcmdldC9wYWNrMS90ZXN0X3JlYWRtZS50eHQKQEAgLTAsMCArMSBAQAorcmVhZG1lClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVQYWNrYWdlQXNEaXIvbW92ZVBhY2thZ2VXaXRoVHh0RmlsZXNJbnNpZGUvYWZ0ZXIvc3JjMi9wYWNrMS9TMi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVQYWNrYWdlQXNEaXIvbW92ZVBhY2thZ2VXaXRoVHh0RmlsZXNJbnNpZGUvYWZ0ZXIvc3JjMi9wYWNrMS9TMi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBiZDJkMjAKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZVBhY2thZ2VBc0Rpci9tb3ZlUGFja2FnZVdpdGhUeHRGaWxlc0luc2lkZS9hZnRlci9zcmMyL3BhY2sxL1MyLmphdmEKQEAgLTAsMCArMSwzIEBACitwYWNrYWdlIHBhY2sxOworCitwdWJsaWMgY2xhc3MgUzJ7fQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVQYWNrYWdlQXNEaXIvbW92ZVBhY2thZ2VXaXRoVHh0RmlsZXNJbnNpZGUvYWZ0ZXIvc3JjMi9wYWNrMi9Vc2FnZXNGcm9tQm90aDIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlUGFja2FnZUFzRGlyL21vdmVQYWNrYWdlV2l0aFR4dEZpbGVzSW5zaWRlL2FmdGVyL3NyYzIvcGFjazIvVXNhZ2VzRnJvbUJvdGgyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWI1M2YzODUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZVBhY2thZ2VBc0Rpci9tb3ZlUGFja2FnZVdpdGhUeHRGaWxlc0luc2lkZS9hZnRlci9zcmMyL3BhY2syL1VzYWdlc0Zyb21Cb3RoMi5qYXZhCkBAIC0wLDAgKzEsOSBAQAorcGFja2FnZSBwYWNrMjsKKworaW1wb3J0IHBhY2sxLio7CitpbXBvcnQgdGFyZ2V0LnBhY2sxLlMxOworCitwdWJsaWMgY2xhc3MgVXNhZ2VzRnJvbUJvdGgyIHsKKyAgUzEgczE7CisgIFMyIHMyOworfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVQYWNrYWdlQXNEaXIvbW92ZVBhY2thZ2VXaXRoVHh0RmlsZXNJbnNpZGUvYmVmb3JlL3NyYzEvcGFjazEvUzEuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlUGFja2FnZUFzRGlyL21vdmVQYWNrYWdlV2l0aFR4dEZpbGVzSW5zaWRlL2JlZm9yZS9zcmMxL3BhY2sxL1MxLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzBhNWYzMQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlUGFja2FnZUFzRGlyL21vdmVQYWNrYWdlV2l0aFR4dEZpbGVzSW5zaWRlL2JlZm9yZS9zcmMxL3BhY2sxL1MxLmphdmEKQEAgLTAsMCArMSwzIEBACitwYWNrYWdlIHBhY2sxOworCitwdWJsaWMgY2xhc3MgUzF7fQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVQYWNrYWdlQXNEaXIvbW92ZVBhY2thZ2VXaXRoVHh0RmlsZXNJbnNpZGUvYmVmb3JlL3NyYzEvcGFjazEvdGVzdF9yZWFkbWUudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVQYWNrYWdlQXNEaXIvbW92ZVBhY2thZ2VXaXRoVHh0RmlsZXNJbnNpZGUvYmVmb3JlL3NyYzEvcGFjazEvdGVzdF9yZWFkbWUudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVhNzg2ZmYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZVBhY2thZ2VBc0Rpci9tb3ZlUGFja2FnZVdpdGhUeHRGaWxlc0luc2lkZS9iZWZvcmUvc3JjMS9wYWNrMS90ZXN0X3JlYWRtZS50eHQKQEAgLTAsMCArMSBAQAorcmVhZG1lClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVQYWNrYWdlQXNEaXIvbW92ZVBhY2thZ2VXaXRoVHh0RmlsZXNJbnNpZGUvYmVmb3JlL3NyYzEvcGFjazIvVXNhZ2VzRnJvbUJvdGguamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlUGFja2FnZUFzRGlyL21vdmVQYWNrYWdlV2l0aFR4dEZpbGVzSW5zaWRlL2JlZm9yZS9zcmMxL3BhY2syL1VzYWdlc0Zyb21Cb3RoLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTA2YjFmZQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlUGFja2FnZUFzRGlyL21vdmVQYWNrYWdlV2l0aFR4dEZpbGVzSW5zaWRlL2JlZm9yZS9zcmMxL3BhY2syL1VzYWdlc0Zyb21Cb3RoLmphdmEKQEAgLTAsMCArMSw4IEBACitwYWNrYWdlIHBhY2syOworCitpbXBvcnQgcGFjazEuKjsKKworcHVibGljIGNsYXNzIFVzYWdlc0Zyb21Cb3RoIHsKKyAgUzEgczE7CisgIFMyIHMyOworfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVQYWNrYWdlQXNEaXIvbW92ZVBhY2thZ2VXaXRoVHh0RmlsZXNJbnNpZGUvYmVmb3JlL3NyYzEvdGFyZ2V0L2VtcHR5LnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlUGFja2FnZUFzRGlyL21vdmVQYWNrYWdlV2l0aFR4dEZpbGVzSW5zaWRlL2JlZm9yZS9zcmMxL3RhcmdldC9lbXB0eS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY5ZGUyOQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlUGFja2FnZUFzRGlyL21vdmVQYWNrYWdlV2l0aFR4dEZpbGVzSW5zaWRlL2JlZm9yZS9zcmMxL3RhcmdldC9lbXB0eS50eHQKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlUGFja2FnZUFzRGlyL21vdmVQYWNrYWdlV2l0aFR4dEZpbGVzSW5zaWRlL2JlZm9yZS9zcmMyL3BhY2sxL1MyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZVBhY2thZ2VBc0Rpci9tb3ZlUGFja2FnZVdpdGhUeHRGaWxlc0luc2lkZS9iZWZvcmUvc3JjMi9wYWNrMS9TMi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBiZDJkMjAKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZVBhY2thZ2VBc0Rpci9tb3ZlUGFja2FnZVdpdGhUeHRGaWxlc0luc2lkZS9iZWZvcmUvc3JjMi9wYWNrMS9TMi5qYXZhCkBAIC0wLDAgKzEsMyBAQAorcGFja2FnZSBwYWNrMTsKKworcHVibGljIGNsYXNzIFMye30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlUGFja2FnZUFzRGlyL21vdmVQYWNrYWdlV2l0aFR4dEZpbGVzSW5zaWRlL2JlZm9yZS9zcmMyL3BhY2syL1VzYWdlc0Zyb21Cb3RoMi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVQYWNrYWdlQXNEaXIvbW92ZVBhY2thZ2VXaXRoVHh0RmlsZXNJbnNpZGUvYmVmb3JlL3NyYzIvcGFjazIvVXNhZ2VzRnJvbUJvdGgyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDhlY2UxYwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlUGFja2FnZUFzRGlyL21vdmVQYWNrYWdlV2l0aFR4dEZpbGVzSW5zaWRlL2JlZm9yZS9zcmMyL3BhY2syL1VzYWdlc0Zyb21Cb3RoMi5qYXZhCkBAIC0wLDAgKzEsOCBAQAorcGFja2FnZSBwYWNrMjsKKworaW1wb3J0IHBhY2sxLio7CisKK3B1YmxpYyBjbGFzcyBVc2FnZXNGcm9tQm90aDIgeworICBTMSBzMTsKKyAgUzIgczI7Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZVBhY2thZ2VBc0Rpci9tdWx0aXBsZUNsYXNzZXNJbk9uZUZpbGUvYWZ0ZXIvc3JjMS9wYWNrMi9Vc2FnZXNGcm9tQm90aC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVQYWNrYWdlQXNEaXIvbXVsdGlwbGVDbGFzc2VzSW5PbmVGaWxlL2FmdGVyL3NyYzEvcGFjazIvVXNhZ2VzRnJvbUJvdGguamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZDQ0MTBmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVQYWNrYWdlQXNEaXIvbXVsdGlwbGVDbGFzc2VzSW5PbmVGaWxlL2FmdGVyL3NyYzEvcGFjazIvVXNhZ2VzRnJvbUJvdGguamF2YQpAQCAtMCwwICsxLDkgQEAKK3BhY2thZ2UgcGFjazI7CisKK2ltcG9ydCBwYWNrMS4qOworaW1wb3J0IHRhcmdldC5wYWNrMS5TMTsKKworcHVibGljIGNsYXNzIFVzYWdlc0Zyb21Cb3RoIHsKKyAgUzEgczE7CisgIFMyIHMyOworfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVQYWNrYWdlQXNEaXIvbXVsdGlwbGVDbGFzc2VzSW5PbmVGaWxlL2FmdGVyL3NyYzEvdGFyZ2V0L2VtcHR5LnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlUGFja2FnZUFzRGlyL211bHRpcGxlQ2xhc3Nlc0luT25lRmlsZS9hZnRlci9zcmMxL3RhcmdldC9lbXB0eS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY5ZGUyOQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlUGFja2FnZUFzRGlyL211bHRpcGxlQ2xhc3Nlc0luT25lRmlsZS9hZnRlci9zcmMxL3RhcmdldC9lbXB0eS50eHQKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlUGFja2FnZUFzRGlyL211bHRpcGxlQ2xhc3Nlc0luT25lRmlsZS9hZnRlci9zcmMxL3RhcmdldC9wYWNrMS9TMS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVQYWNrYWdlQXNEaXIvbXVsdGlwbGVDbGFzc2VzSW5PbmVGaWxlL2FmdGVyL3NyYzEvdGFyZ2V0L3BhY2sxL1MxLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmI5M2E1YgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlUGFja2FnZUFzRGlyL211bHRpcGxlQ2xhc3Nlc0luT25lRmlsZS9hZnRlci9zcmMxL3RhcmdldC9wYWNrMS9TMS5qYXZhCkBAIC0wLDAgKzEsMTEgQEAKK3BhY2thZ2UgdGFyZ2V0LnBhY2sxOworCitwdWJsaWMgY2xhc3MgUzF7CisgIFMxMSBzMTE7Cit9CisKK2NsYXNzIFMxMXt9CisKK2NsYXNzIFMxMnt9CisKK2NsYXNzIFMxM3t9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZVBhY2thZ2VBc0Rpci9tdWx0aXBsZUNsYXNzZXNJbk9uZUZpbGUvYWZ0ZXIvc3JjMS90YXJnZXQvcGFjazEvVVMuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlUGFja2FnZUFzRGlyL211bHRpcGxlQ2xhc3Nlc0luT25lRmlsZS9hZnRlci9zcmMxL3RhcmdldC9wYWNrMS9VUy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMxYjMzODQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZVBhY2thZ2VBc0Rpci9tdWx0aXBsZUNsYXNzZXNJbk9uZUZpbGUvYWZ0ZXIvc3JjMS90YXJnZXQvcGFjazEvVVMuamF2YQpAQCAtMCwwICsxLDUgQEAKK3BhY2thZ2UgdGFyZ2V0LnBhY2sxOworCitjbGFzcyBVUyB7CisgIFMxMSBteVMxMVdpdGhvdXRJbXBvcnQ7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVQYWNrYWdlQXNEaXIvbXVsdGlwbGVDbGFzc2VzSW5PbmVGaWxlL2FmdGVyL3NyYzIvcGFjazEvUzIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlUGFja2FnZUFzRGlyL211bHRpcGxlQ2xhc3Nlc0luT25lRmlsZS9hZnRlci9zcmMyL3BhY2sxL1MyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGJkMmQyMAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlUGFja2FnZUFzRGlyL211bHRpcGxlQ2xhc3Nlc0luT25lRmlsZS9hZnRlci9zcmMyL3BhY2sxL1MyLmphdmEKQEAgLTAsMCArMSwzIEBACitwYWNrYWdlIHBhY2sxOworCitwdWJsaWMgY2xhc3MgUzJ7fQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVQYWNrYWdlQXNEaXIvbXVsdGlwbGVDbGFzc2VzSW5PbmVGaWxlL2FmdGVyL3NyYzIvcGFjazIvVXNhZ2VzRnJvbUJvdGgyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZVBhY2thZ2VBc0Rpci9tdWx0aXBsZUNsYXNzZXNJbk9uZUZpbGUvYWZ0ZXIvc3JjMi9wYWNrMi9Vc2FnZXNGcm9tQm90aDIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YjUzZjM4NQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlUGFja2FnZUFzRGlyL211bHRpcGxlQ2xhc3Nlc0luT25lRmlsZS9hZnRlci9zcmMyL3BhY2syL1VzYWdlc0Zyb21Cb3RoMi5qYXZhCkBAIC0wLDAgKzEsOSBAQAorcGFja2FnZSBwYWNrMjsKKworaW1wb3J0IHBhY2sxLio7CitpbXBvcnQgdGFyZ2V0LnBhY2sxLlMxOworCitwdWJsaWMgY2xhc3MgVXNhZ2VzRnJvbUJvdGgyIHsKKyAgUzEgczE7CisgIFMyIHMyOworfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVQYWNrYWdlQXNEaXIvbXVsdGlwbGVDbGFzc2VzSW5PbmVGaWxlL2JlZm9yZS9zcmMxL3BhY2sxL1MxLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZVBhY2thZ2VBc0Rpci9tdWx0aXBsZUNsYXNzZXNJbk9uZUZpbGUvYmVmb3JlL3NyYzEvcGFjazEvUzEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OGUyMmFiCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVQYWNrYWdlQXNEaXIvbXVsdGlwbGVDbGFzc2VzSW5PbmVGaWxlL2JlZm9yZS9zcmMxL3BhY2sxL1MxLmphdmEKQEAgLTAsMCArMSwxMSBAQAorcGFja2FnZSBwYWNrMTsKKworcHVibGljIGNsYXNzIFMxeworICBTMTEgczExOworfQorCitjbGFzcyBTMTF7fQorCitjbGFzcyBTMTJ7fQorCitjbGFzcyBTMTN7fQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVQYWNrYWdlQXNEaXIvbXVsdGlwbGVDbGFzc2VzSW5PbmVGaWxlL2JlZm9yZS9zcmMxL3BhY2sxL1VTLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZVBhY2thZ2VBc0Rpci9tdWx0aXBsZUNsYXNzZXNJbk9uZUZpbGUvYmVmb3JlL3NyYzEvcGFjazEvVVMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNGY3ZGM4Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVQYWNrYWdlQXNEaXIvbXVsdGlwbGVDbGFzc2VzSW5PbmVGaWxlL2JlZm9yZS9zcmMxL3BhY2sxL1VTLmphdmEKQEAgLTAsMCArMSw1IEBACitwYWNrYWdlIHBhY2sxOworCitjbGFzcyBVUyB7CisgIFMxMSBteVMxMVdpdGhvdXRJbXBvcnQ7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVQYWNrYWdlQXNEaXIvbXVsdGlwbGVDbGFzc2VzSW5PbmVGaWxlL2JlZm9yZS9zcmMxL3BhY2syL1VzYWdlc0Zyb21Cb3RoLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZVBhY2thZ2VBc0Rpci9tdWx0aXBsZUNsYXNzZXNJbk9uZUZpbGUvYmVmb3JlL3NyYzEvcGFjazIvVXNhZ2VzRnJvbUJvdGguamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MDZiMWZlCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVQYWNrYWdlQXNEaXIvbXVsdGlwbGVDbGFzc2VzSW5PbmVGaWxlL2JlZm9yZS9zcmMxL3BhY2syL1VzYWdlc0Zyb21Cb3RoLmphdmEKQEAgLTAsMCArMSw4IEBACitwYWNrYWdlIHBhY2syOworCitpbXBvcnQgcGFjazEuKjsKKworcHVibGljIGNsYXNzIFVzYWdlc0Zyb21Cb3RoIHsKKyAgUzEgczE7CisgIFMyIHMyOworfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVQYWNrYWdlQXNEaXIvbXVsdGlwbGVDbGFzc2VzSW5PbmVGaWxlL2JlZm9yZS9zcmMxL3RhcmdldC9lbXB0eS50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZVBhY2thZ2VBc0Rpci9tdWx0aXBsZUNsYXNzZXNJbk9uZUZpbGUvYmVmb3JlL3NyYzEvdGFyZ2V0L2VtcHR5LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjlkZTI5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVQYWNrYWdlQXNEaXIvbXVsdGlwbGVDbGFzc2VzSW5PbmVGaWxlL2JlZm9yZS9zcmMxL3RhcmdldC9lbXB0eS50eHQKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlUGFja2FnZUFzRGlyL211bHRpcGxlQ2xhc3Nlc0luT25lRmlsZS9iZWZvcmUvc3JjMi9wYWNrMS9TMi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVQYWNrYWdlQXNEaXIvbXVsdGlwbGVDbGFzc2VzSW5PbmVGaWxlL2JlZm9yZS9zcmMyL3BhY2sxL1MyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGJkMmQyMAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlUGFja2FnZUFzRGlyL211bHRpcGxlQ2xhc3Nlc0luT25lRmlsZS9iZWZvcmUvc3JjMi9wYWNrMS9TMi5qYXZhCkBAIC0wLDAgKzEsMyBAQAorcGFja2FnZSBwYWNrMTsKKworcHVibGljIGNsYXNzIFMye30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlUGFja2FnZUFzRGlyL211bHRpcGxlQ2xhc3Nlc0luT25lRmlsZS9iZWZvcmUvc3JjMi9wYWNrMi9Vc2FnZXNGcm9tQm90aDIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlUGFja2FnZUFzRGlyL211bHRpcGxlQ2xhc3Nlc0luT25lRmlsZS9iZWZvcmUvc3JjMi9wYWNrMi9Vc2FnZXNGcm9tQm90aDIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOGVjZTFjCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVQYWNrYWdlQXNEaXIvbXVsdGlwbGVDbGFzc2VzSW5PbmVGaWxlL2JlZm9yZS9zcmMyL3BhY2syL1VzYWdlc0Zyb21Cb3RoMi5qYXZhCkBAIC0wLDAgKzEsOCBAQAorcGFja2FnZSBwYWNrMjsKKworaW1wb3J0IHBhY2sxLio7CisKK3B1YmxpYyBjbGFzcyBVc2FnZXNGcm9tQm90aDIgeworICBTMSBzMTsKKyAgUzIgczI7Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZVBhY2thZ2VBc0Rpci9yZW1vdmVVbnJlc29sdmVkSW1wb3J0cy9hZnRlci9zcmMxL3BhY2syL1VzYWdlc0Zyb21Cb3RoLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZVBhY2thZ2VBc0Rpci9yZW1vdmVVbnJlc29sdmVkSW1wb3J0cy9hZnRlci9zcmMxL3BhY2syL1VzYWdlc0Zyb21Cb3RoLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTIxNTA1YQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlUGFja2FnZUFzRGlyL3JlbW92ZVVucmVzb2x2ZWRJbXBvcnRzL2FmdGVyL3NyYzEvcGFjazIvVXNhZ2VzRnJvbUJvdGguamF2YQpAQCAtMCwwICsxLDExIEBACitwYWNrYWdlIHBhY2syOworCitpbXBvcnQgcGFjazEuKjsKK2ltcG9ydCB0YXJnZXQucGFjazEuUzE7CitpbXBvcnQgdGFyZ2V0LnBhY2sxLnN1YnBhY2suU1M7CisKK3B1YmxpYyBjbGFzcyBVc2FnZXNGcm9tQm90aCB7CisgIFMxIHMxOworICBTMiBzMjsKKyAgU1Mgc3M7Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZVBhY2thZ2VBc0Rpci9yZW1vdmVVbnJlc29sdmVkSW1wb3J0cy9hZnRlci9zcmMxL3RhcmdldC9lbXB0eS50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZVBhY2thZ2VBc0Rpci9yZW1vdmVVbnJlc29sdmVkSW1wb3J0cy9hZnRlci9zcmMxL3RhcmdldC9lbXB0eS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY5ZGUyOQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlUGFja2FnZUFzRGlyL3JlbW92ZVVucmVzb2x2ZWRJbXBvcnRzL2FmdGVyL3NyYzEvdGFyZ2V0L2VtcHR5LnR4dApkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVQYWNrYWdlQXNEaXIvcmVtb3ZlVW5yZXNvbHZlZEltcG9ydHMvYWZ0ZXIvc3JjMS90YXJnZXQvcGFjazEvUzEuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlUGFja2FnZUFzRGlyL3JlbW92ZVVucmVzb2x2ZWRJbXBvcnRzL2FmdGVyL3NyYzEvdGFyZ2V0L3BhY2sxL1MxLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmFmZDYwZAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlUGFja2FnZUFzRGlyL3JlbW92ZVVucmVzb2x2ZWRJbXBvcnRzL2FmdGVyL3NyYzEvdGFyZ2V0L3BhY2sxL1MxLmphdmEKQEAgLTAsMCArMSwzIEBACitwYWNrYWdlIHRhcmdldC5wYWNrMTsKKworcHVibGljIGNsYXNzIFMxe30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlUGFja2FnZUFzRGlyL3JlbW92ZVVucmVzb2x2ZWRJbXBvcnRzL2FmdGVyL3NyYzEvdGFyZ2V0L3BhY2sxL3N1YnBhY2svU1MuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlUGFja2FnZUFzRGlyL3JlbW92ZVVucmVzb2x2ZWRJbXBvcnRzL2FmdGVyL3NyYzEvdGFyZ2V0L3BhY2sxL3N1YnBhY2svU1MuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOWNmMGI2Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVQYWNrYWdlQXNEaXIvcmVtb3ZlVW5yZXNvbHZlZEltcG9ydHMvYWZ0ZXIvc3JjMS90YXJnZXQvcGFjazEvc3VicGFjay9TUy5qYXZhCkBAIC0wLDAgKzEsMyBAQAorcGFja2FnZSB0YXJnZXQucGFjazEuc3VicGFjazsKKworcHVibGljIGNsYXNzIFNTIHt9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZVBhY2thZ2VBc0Rpci9yZW1vdmVVbnJlc29sdmVkSW1wb3J0cy9hZnRlci9zcmMyL3BhY2sxL1MyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZVBhY2thZ2VBc0Rpci9yZW1vdmVVbnJlc29sdmVkSW1wb3J0cy9hZnRlci9zcmMyL3BhY2sxL1MyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGJkMmQyMAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlUGFja2FnZUFzRGlyL3JlbW92ZVVucmVzb2x2ZWRJbXBvcnRzL2FmdGVyL3NyYzIvcGFjazEvUzIuamF2YQpAQCAtMCwwICsxLDMgQEAKK3BhY2thZ2UgcGFjazE7CisKK3B1YmxpYyBjbGFzcyBTMnt9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZVBhY2thZ2VBc0Rpci9yZW1vdmVVbnJlc29sdmVkSW1wb3J0cy9hZnRlci9zcmMyL3BhY2syL1VzYWdlc0Zyb21Cb3RoMi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVQYWNrYWdlQXNEaXIvcmVtb3ZlVW5yZXNvbHZlZEltcG9ydHMvYWZ0ZXIvc3JjMi9wYWNrMi9Vc2FnZXNGcm9tQm90aDIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YjUzZjM4NQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlUGFja2FnZUFzRGlyL3JlbW92ZVVucmVzb2x2ZWRJbXBvcnRzL2FmdGVyL3NyYzIvcGFjazIvVXNhZ2VzRnJvbUJvdGgyLmphdmEKQEAgLTAsMCArMSw5IEBACitwYWNrYWdlIHBhY2syOworCitpbXBvcnQgcGFjazEuKjsKK2ltcG9ydCB0YXJnZXQucGFjazEuUzE7CisKK3B1YmxpYyBjbGFzcyBVc2FnZXNGcm9tQm90aDIgeworICBTMSBzMTsKKyAgUzIgczI7Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZVBhY2thZ2VBc0Rpci9yZW1vdmVVbnJlc29sdmVkSW1wb3J0cy9iZWZvcmUvc3JjMS9wYWNrMS9TMS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVQYWNrYWdlQXNEaXIvcmVtb3ZlVW5yZXNvbHZlZEltcG9ydHMvYmVmb3JlL3NyYzEvcGFjazEvUzEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMGE1ZjMxCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVQYWNrYWdlQXNEaXIvcmVtb3ZlVW5yZXNvbHZlZEltcG9ydHMvYmVmb3JlL3NyYzEvcGFjazEvUzEuamF2YQpAQCAtMCwwICsxLDMgQEAKK3BhY2thZ2UgcGFjazE7CisKK3B1YmxpYyBjbGFzcyBTMXt9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZVBhY2thZ2VBc0Rpci9yZW1vdmVVbnJlc29sdmVkSW1wb3J0cy9iZWZvcmUvc3JjMS9wYWNrMS9zdWJwYWNrL1NTLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZVBhY2thZ2VBc0Rpci9yZW1vdmVVbnJlc29sdmVkSW1wb3J0cy9iZWZvcmUvc3JjMS9wYWNrMS9zdWJwYWNrL1NTLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODY5NDIzYwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlUGFja2FnZUFzRGlyL3JlbW92ZVVucmVzb2x2ZWRJbXBvcnRzL2JlZm9yZS9zcmMxL3BhY2sxL3N1YnBhY2svU1MuamF2YQpAQCAtMCwwICsxLDMgQEAKK3BhY2thZ2UgcGFjazEuc3VicGFjazsKKworcHVibGljIGNsYXNzIFNTIHt9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZVBhY2thZ2VBc0Rpci9yZW1vdmVVbnJlc29sdmVkSW1wb3J0cy9iZWZvcmUvc3JjMS9wYWNrMi9Vc2FnZXNGcm9tQm90aC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVQYWNrYWdlQXNEaXIvcmVtb3ZlVW5yZXNvbHZlZEltcG9ydHMvYmVmb3JlL3NyYzEvcGFjazIvVXNhZ2VzRnJvbUJvdGguamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMGY5YTk0Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVQYWNrYWdlQXNEaXIvcmVtb3ZlVW5yZXNvbHZlZEltcG9ydHMvYmVmb3JlL3NyYzEvcGFjazIvVXNhZ2VzRnJvbUJvdGguamF2YQpAQCAtMCwwICsxLDEwIEBACitwYWNrYWdlIHBhY2syOworCitpbXBvcnQgcGFjazEuKjsKK2ltcG9ydCBwYWNrMS5zdWJwYWNrLio7CisKK3B1YmxpYyBjbGFzcyBVc2FnZXNGcm9tQm90aCB7CisgIFMxIHMxOworICBTMiBzMjsKKyAgU1Mgc3M7Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZVBhY2thZ2VBc0Rpci9yZW1vdmVVbnJlc29sdmVkSW1wb3J0cy9iZWZvcmUvc3JjMS90YXJnZXQvZW1wdHkudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVQYWNrYWdlQXNEaXIvcmVtb3ZlVW5yZXNvbHZlZEltcG9ydHMvYmVmb3JlL3NyYzEvdGFyZ2V0L2VtcHR5LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjlkZTI5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVQYWNrYWdlQXNEaXIvcmVtb3ZlVW5yZXNvbHZlZEltcG9ydHMvYmVmb3JlL3NyYzEvdGFyZ2V0L2VtcHR5LnR4dApkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVQYWNrYWdlQXNEaXIvcmVtb3ZlVW5yZXNvbHZlZEltcG9ydHMvYmVmb3JlL3NyYzIvcGFjazEvUzIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlUGFja2FnZUFzRGlyL3JlbW92ZVVucmVzb2x2ZWRJbXBvcnRzL2JlZm9yZS9zcmMyL3BhY2sxL1MyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGJkMmQyMAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlUGFja2FnZUFzRGlyL3JlbW92ZVVucmVzb2x2ZWRJbXBvcnRzL2JlZm9yZS9zcmMyL3BhY2sxL1MyLmphdmEKQEAgLTAsMCArMSwzIEBACitwYWNrYWdlIHBhY2sxOworCitwdWJsaWMgY2xhc3MgUzJ7fQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVQYWNrYWdlQXNEaXIvcmVtb3ZlVW5yZXNvbHZlZEltcG9ydHMvYmVmb3JlL3NyYzIvcGFjazIvVXNhZ2VzRnJvbUJvdGgyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZVBhY2thZ2VBc0Rpci9yZW1vdmVVbnJlc29sdmVkSW1wb3J0cy9iZWZvcmUvc3JjMi9wYWNrMi9Vc2FnZXNGcm9tQm90aDIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOGVjZTFjCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVQYWNrYWdlQXNEaXIvcmVtb3ZlVW5yZXNvbHZlZEltcG9ydHMvYmVmb3JlL3NyYzIvcGFjazIvVXNhZ2VzRnJvbUJvdGgyLmphdmEKQEAgLTAsMCArMSw4IEBACitwYWNrYWdlIHBhY2syOworCitpbXBvcnQgcGFjazEuKjsKKworcHVibGljIGNsYXNzIFVzYWdlc0Zyb21Cb3RoMiB7CisgIFMxIHMxOworICBTMiBzMjsKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlUGFja2FnZUFzRGlyL3htbERpclJlZnMvYWZ0ZXIvc3JjMS9wYWNrMi9Vc2FnZXNGcm9tQm90aC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVQYWNrYWdlQXNEaXIveG1sRGlyUmVmcy9hZnRlci9zcmMxL3BhY2syL1VzYWdlc0Zyb21Cb3RoLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmQ0NDEwZgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlUGFja2FnZUFzRGlyL3htbERpclJlZnMvYWZ0ZXIvc3JjMS9wYWNrMi9Vc2FnZXNGcm9tQm90aC5qYXZhCkBAIC0wLDAgKzEsOSBAQAorcGFja2FnZSBwYWNrMjsKKworaW1wb3J0IHBhY2sxLio7CitpbXBvcnQgdGFyZ2V0LnBhY2sxLlMxOworCitwdWJsaWMgY2xhc3MgVXNhZ2VzRnJvbUJvdGggeworICBTMSBzMTsKKyAgUzIgczI7Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZVBhY2thZ2VBc0Rpci94bWxEaXJSZWZzL2FmdGVyL3NyYzEvdGFyZ2V0L2VtcHR5LnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlUGFja2FnZUFzRGlyL3htbERpclJlZnMvYWZ0ZXIvc3JjMS90YXJnZXQvZW1wdHkudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2OWRlMjkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZVBhY2thZ2VBc0Rpci94bWxEaXJSZWZzL2FmdGVyL3NyYzEvdGFyZ2V0L2VtcHR5LnR4dApkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVQYWNrYWdlQXNEaXIveG1sRGlyUmVmcy9hZnRlci9zcmMxL3RhcmdldC9wYWNrMS9TMS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVQYWNrYWdlQXNEaXIveG1sRGlyUmVmcy9hZnRlci9zcmMxL3RhcmdldC9wYWNrMS9TMS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJhZmQ2MGQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZVBhY2thZ2VBc0Rpci94bWxEaXJSZWZzL2FmdGVyL3NyYzEvdGFyZ2V0L3BhY2sxL1MxLmphdmEKQEAgLTAsMCArMSwzIEBACitwYWNrYWdlIHRhcmdldC5wYWNrMTsKKworcHVibGljIGNsYXNzIFMxe30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlUGFja2FnZUFzRGlyL3htbERpclJlZnMvYWZ0ZXIvc3JjMi9wYWNrMS9TMi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVQYWNrYWdlQXNEaXIveG1sRGlyUmVmcy9hZnRlci9zcmMyL3BhY2sxL1MyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGJkMmQyMAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlUGFja2FnZUFzRGlyL3htbERpclJlZnMvYWZ0ZXIvc3JjMi9wYWNrMS9TMi5qYXZhCkBAIC0wLDAgKzEsMyBAQAorcGFja2FnZSBwYWNrMTsKKworcHVibGljIGNsYXNzIFMye30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlUGFja2FnZUFzRGlyL3htbERpclJlZnMvYWZ0ZXIvc3JjMi9wYWNrMi9Vc2FnZXNGcm9tQm90aDIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlUGFja2FnZUFzRGlyL3htbERpclJlZnMvYWZ0ZXIvc3JjMi9wYWNrMi9Vc2FnZXNGcm9tQm90aDIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YjUzZjM4NQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlUGFja2FnZUFzRGlyL3htbERpclJlZnMvYWZ0ZXIvc3JjMi9wYWNrMi9Vc2FnZXNGcm9tQm90aDIuamF2YQpAQCAtMCwwICsxLDkgQEAKK3BhY2thZ2UgcGFjazI7CisKK2ltcG9ydCBwYWNrMS4qOworaW1wb3J0IHRhcmdldC5wYWNrMS5TMTsKKworcHVibGljIGNsYXNzIFVzYWdlc0Zyb21Cb3RoMiB7CisgIFMxIHMxOworICBTMiBzMjsKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlUGFja2FnZUFzRGlyL3htbERpclJlZnMvYWZ0ZXIvc3JjMi9wYWNrMi91LnhtbCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlUGFja2FnZUFzRGlyL3htbERpclJlZnMvYWZ0ZXIvc3JjMi9wYWNrMi91LnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZTgyZmI3Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVQYWNrYWdlQXNEaXIveG1sRGlyUmVmcy9hZnRlci9zcmMyL3BhY2syL3UueG1sCkBAIC0wLDAgKzEsMyBAQAorPHJvb3QgeG1sbnM6eGk9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWEluY2x1ZGUiPgorICA8eGk6aW5jbHVkZSBocmVmPSIuLi8uLi9zcmMxL3RhcmdldC9wYWNrMS9TMS5qYXZhIiB4cG9pbnRlcj0ieHBvaW50ZXIoL2NvbXBvbmVudHMvKikiLz4KKzwvcm9vdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZVBhY2thZ2VBc0Rpci94bWxEaXJSZWZzL2JlZm9yZS9zcmMxL3BhY2sxL1MxLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZVBhY2thZ2VBc0Rpci94bWxEaXJSZWZzL2JlZm9yZS9zcmMxL3BhY2sxL1MxLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzBhNWYzMQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlUGFja2FnZUFzRGlyL3htbERpclJlZnMvYmVmb3JlL3NyYzEvcGFjazEvUzEuamF2YQpAQCAtMCwwICsxLDMgQEAKK3BhY2thZ2UgcGFjazE7CisKK3B1YmxpYyBjbGFzcyBTMXt9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZVBhY2thZ2VBc0Rpci94bWxEaXJSZWZzL2JlZm9yZS9zcmMxL3BhY2syL1VzYWdlc0Zyb21Cb3RoLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZVBhY2thZ2VBc0Rpci94bWxEaXJSZWZzL2JlZm9yZS9zcmMxL3BhY2syL1VzYWdlc0Zyb21Cb3RoLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTA2YjFmZQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlUGFja2FnZUFzRGlyL3htbERpclJlZnMvYmVmb3JlL3NyYzEvcGFjazIvVXNhZ2VzRnJvbUJvdGguamF2YQpAQCAtMCwwICsxLDggQEAKK3BhY2thZ2UgcGFjazI7CisKK2ltcG9ydCBwYWNrMS4qOworCitwdWJsaWMgY2xhc3MgVXNhZ2VzRnJvbUJvdGggeworICBTMSBzMTsKKyAgUzIgczI7Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZVBhY2thZ2VBc0Rpci94bWxEaXJSZWZzL2JlZm9yZS9zcmMxL3RhcmdldC9lbXB0eS50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZVBhY2thZ2VBc0Rpci94bWxEaXJSZWZzL2JlZm9yZS9zcmMxL3RhcmdldC9lbXB0eS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY5ZGUyOQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlUGFja2FnZUFzRGlyL3htbERpclJlZnMvYmVmb3JlL3NyYzEvdGFyZ2V0L2VtcHR5LnR4dApkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVQYWNrYWdlQXNEaXIveG1sRGlyUmVmcy9iZWZvcmUvc3JjMi9wYWNrMS9TMi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVQYWNrYWdlQXNEaXIveG1sRGlyUmVmcy9iZWZvcmUvc3JjMi9wYWNrMS9TMi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBiZDJkMjAKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZVBhY2thZ2VBc0Rpci94bWxEaXJSZWZzL2JlZm9yZS9zcmMyL3BhY2sxL1MyLmphdmEKQEAgLTAsMCArMSwzIEBACitwYWNrYWdlIHBhY2sxOworCitwdWJsaWMgY2xhc3MgUzJ7fQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVQYWNrYWdlQXNEaXIveG1sRGlyUmVmcy9iZWZvcmUvc3JjMi9wYWNrMi9Vc2FnZXNGcm9tQm90aDIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlUGFja2FnZUFzRGlyL3htbERpclJlZnMvYmVmb3JlL3NyYzIvcGFjazIvVXNhZ2VzRnJvbUJvdGgyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDhlY2UxYwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlUGFja2FnZUFzRGlyL3htbERpclJlZnMvYmVmb3JlL3NyYzIvcGFjazIvVXNhZ2VzRnJvbUJvdGgyLmphdmEKQEAgLTAsMCArMSw4IEBACitwYWNrYWdlIHBhY2syOworCitpbXBvcnQgcGFjazEuKjsKKworcHVibGljIGNsYXNzIFVzYWdlc0Zyb21Cb3RoMiB7CisgIFMxIHMxOworICBTMiBzMjsKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlUGFja2FnZUFzRGlyL3htbERpclJlZnMvYmVmb3JlL3NyYzIvcGFjazIvdS54bWwgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZVBhY2thZ2VBc0Rpci94bWxEaXJSZWZzL2JlZm9yZS9zcmMyL3BhY2syL3UueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ3OTI2Y2IKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZVBhY2thZ2VBc0Rpci94bWxEaXJSZWZzL2JlZm9yZS9zcmMyL3BhY2syL3UueG1sCkBAIC0wLDAgKzEsMyBAQAorPHJvb3QgeG1sbnM6eGk9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWEluY2x1ZGUiPgorICA8eGk6aW5jbHVkZSBocmVmPSIuLi8uLi9zcmMxL3BhY2sxL1MxLmphdmEiIHhwb2ludGVyPSJ4cG9pbnRlcigvY29tcG9uZW50cy8qKSIvPgorPC9yb290PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlUGFja2FnZUFzRGlyL3htbEVtcHR5RGlyUmVmcy9hZnRlci9zcmMxL3RhcmdldC9lbXB0eS50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZVBhY2thZ2VBc0Rpci94bWxFbXB0eURpclJlZnMvYWZ0ZXIvc3JjMS90YXJnZXQvZW1wdHkudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2OWRlMjkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZVBhY2thZ2VBc0Rpci94bWxFbXB0eURpclJlZnMvYWZ0ZXIvc3JjMS90YXJnZXQvZW1wdHkudHh0CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZVBhY2thZ2VBc0Rpci94bWxFbXB0eURpclJlZnMvYWZ0ZXIvc3JjMS90YXJnZXQvcGFjazEvZW1wdHkudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVQYWNrYWdlQXNEaXIveG1sRW1wdHlEaXJSZWZzL2FmdGVyL3NyYzEvdGFyZ2V0L3BhY2sxL2VtcHR5LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjlkZTI5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVQYWNrYWdlQXNEaXIveG1sRW1wdHlEaXJSZWZzL2FmdGVyL3NyYzEvdGFyZ2V0L3BhY2sxL2VtcHR5LnR4dApkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVQYWNrYWdlQXNEaXIveG1sRW1wdHlEaXJSZWZzL2FmdGVyL3NyYzIvcGFjazEvUzIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlUGFja2FnZUFzRGlyL3htbEVtcHR5RGlyUmVmcy9hZnRlci9zcmMyL3BhY2sxL1MyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGJkMmQyMAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlUGFja2FnZUFzRGlyL3htbEVtcHR5RGlyUmVmcy9hZnRlci9zcmMyL3BhY2sxL1MyLmphdmEKQEAgLTAsMCArMSwzIEBACitwYWNrYWdlIHBhY2sxOworCitwdWJsaWMgY2xhc3MgUzJ7fQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVQYWNrYWdlQXNEaXIveG1sRW1wdHlEaXJSZWZzL2FmdGVyL3NyYzIvcGFjazIvdS54bWwgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZVBhY2thZ2VBc0Rpci94bWxFbXB0eURpclJlZnMvYWZ0ZXIvc3JjMi9wYWNrMi91LnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMjM2ZDNjCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVQYWNrYWdlQXNEaXIveG1sRW1wdHlEaXJSZWZzL2FmdGVyL3NyYzIvcGFjazIvdS54bWwKQEAgLTAsMCArMSwzIEBACis8cm9vdCB4bWxuczp4aT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YSW5jbHVkZSI+CisgIDx4aTppbmNsdWRlIGhyZWY9Ii4uLy4uL3NyYzEvdGFyZ2V0L3BhY2sxIiB4cG9pbnRlcj0ieHBvaW50ZXIoL2NvbXBvbmVudHMvKikiLz4KKzwvcm9vdD4KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlUGFja2FnZUFzRGlyL3htbEVtcHR5RGlyUmVmcy9iZWZvcmUvc3JjMS9wYWNrMS9lbXB0eS50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZVBhY2thZ2VBc0Rpci94bWxFbXB0eURpclJlZnMvYmVmb3JlL3NyYzEvcGFjazEvZW1wdHkudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2OWRlMjkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZVBhY2thZ2VBc0Rpci94bWxFbXB0eURpclJlZnMvYmVmb3JlL3NyYzEvcGFjazEvZW1wdHkudHh0CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZVBhY2thZ2VBc0Rpci94bWxFbXB0eURpclJlZnMvYmVmb3JlL3NyYzEvdGFyZ2V0L2VtcHR5LnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlUGFja2FnZUFzRGlyL3htbEVtcHR5RGlyUmVmcy9iZWZvcmUvc3JjMS90YXJnZXQvZW1wdHkudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2OWRlMjkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZVBhY2thZ2VBc0Rpci94bWxFbXB0eURpclJlZnMvYmVmb3JlL3NyYzEvdGFyZ2V0L2VtcHR5LnR4dApkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVQYWNrYWdlQXNEaXIveG1sRW1wdHlEaXJSZWZzL2JlZm9yZS9zcmMyL3BhY2sxL1MyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZVBhY2thZ2VBc0Rpci94bWxFbXB0eURpclJlZnMvYmVmb3JlL3NyYzIvcGFjazEvUzIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYmQyZDIwCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVQYWNrYWdlQXNEaXIveG1sRW1wdHlEaXJSZWZzL2JlZm9yZS9zcmMyL3BhY2sxL1MyLmphdmEKQEAgLTAsMCArMSwzIEBACitwYWNrYWdlIHBhY2sxOworCitwdWJsaWMgY2xhc3MgUzJ7fQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVQYWNrYWdlQXNEaXIveG1sRW1wdHlEaXJSZWZzL2JlZm9yZS9zcmMyL3BhY2syL3UueG1sIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVQYWNrYWdlQXNEaXIveG1sRW1wdHlEaXJSZWZzL2JlZm9yZS9zcmMyL3BhY2syL3UueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA0YTQ2ZTIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZVBhY2thZ2VBc0Rpci94bWxFbXB0eURpclJlZnMvYmVmb3JlL3NyYzIvcGFjazIvdS54bWwKQEAgLTAsMCArMSwzIEBACis8cm9vdCB4bWxuczp4aT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YSW5jbHVkZSI+CisgIDx4aTppbmNsdWRlIGhyZWY9Ii4uLy4uL3NyYzEvcGFjazEiIHhwb2ludGVyPSJ4cG9pbnRlcigvY29tcG9uZW50cy8qKSIvPgorPC9yb290PgpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVQYWNrYWdlTXVsdGlyb290L21vdmVQYWNrYWdlL2FmdGVyL3NyYzEvdGFyZ2V0L2VtcHR5LnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlUGFja2FnZU11bHRpcm9vdC9tb3ZlUGFja2FnZS9hZnRlci9zcmMxL3RhcmdldC9lbXB0eS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY5ZGUyOQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlUGFja2FnZU11bHRpcm9vdC9tb3ZlUGFja2FnZS9hZnRlci9zcmMxL3RhcmdldC9lbXB0eS50eHQKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlUGFja2FnZU11bHRpcm9vdC9tb3ZlUGFja2FnZS9hZnRlci9zcmMxL3RhcmdldC9wYWNrMS9BLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZVBhY2thZ2VNdWx0aXJvb3QvbW92ZVBhY2thZ2UvYWZ0ZXIvc3JjMS90YXJnZXQvcGFjazEvQS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc5MTFmNjUyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVQYWNrYWdlTXVsdGlyb290L21vdmVQYWNrYWdlL2FmdGVyL3NyYzEvdGFyZ2V0L3BhY2sxL0EuamF2YQpAQCAtMCwwICsxLDQgQEAKK3BhY2thZ2UgdGFyZ2V0LnBhY2sxOworCitjbGFzcyBBIHsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZVBhY2thZ2VNdWx0aXJvb3QvbW92ZVBhY2thZ2UvYWZ0ZXIvc3JjMi90YXJnZXQvcGFjazEvQi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVQYWNrYWdlTXVsdGlyb290L21vdmVQYWNrYWdlL2FmdGVyL3NyYzIvdGFyZ2V0L3BhY2sxL0IuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNGNkZDMxCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVQYWNrYWdlTXVsdGlyb290L21vdmVQYWNrYWdlL2FmdGVyL3NyYzIvdGFyZ2V0L3BhY2sxL0IuamF2YQpAQCAtMCwwICsxLDQgQEAKK3BhY2thZ2UgcGFjazI7CisKK2NsYXNzIEIgeworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlUGFja2FnZU11bHRpcm9vdC9tb3ZlUGFja2FnZS9iZWZvcmUvc3JjMS9wYWNrMS9BLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZVBhY2thZ2VNdWx0aXJvb3QvbW92ZVBhY2thZ2UvYmVmb3JlL3NyYzEvcGFjazEvQS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIwYWE4MTAKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZVBhY2thZ2VNdWx0aXJvb3QvbW92ZVBhY2thZ2UvYmVmb3JlL3NyYzEvcGFjazEvQS5qYXZhCkBAIC0wLDAgKzEsNCBAQAorcGFja2FnZSBwYWNrMTsKKworY2xhc3MgQSB7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVQYWNrYWdlTXVsdGlyb290L21vdmVQYWNrYWdlL2JlZm9yZS9zcmMxL3RhcmdldC9lbXB0eS50eHQgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZVBhY2thZ2VNdWx0aXJvb3QvbW92ZVBhY2thZ2UvYmVmb3JlL3NyYzEvdGFyZ2V0L2VtcHR5LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjlkZTI5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL21vdmVQYWNrYWdlTXVsdGlyb290L21vdmVQYWNrYWdlL2JlZm9yZS9zcmMxL3RhcmdldC9lbXB0eS50eHQKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9tb3ZlUGFja2FnZU11bHRpcm9vdC9tb3ZlUGFja2FnZS9iZWZvcmUvc3JjMi9wYWNrMS9CLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZVBhY2thZ2VNdWx0aXJvb3QvbW92ZVBhY2thZ2UvYmVmb3JlL3NyYzIvcGFjazEvQi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU0Y2RkMzEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvbW92ZVBhY2thZ2VNdWx0aXJvb3QvbW92ZVBhY2thZ2UvYmVmb3JlL3NyYzIvcGFjazEvQi5qYXZhCkBAIC0wLDAgKzEsNCBAQAorcGFja2FnZSBwYWNrMjsKKworY2xhc3MgQiB7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3B1bGxVcC9Fc2NhbGF0ZVZpc2liaWxpdHkuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9wdWxsVXAvRXNjYWxhdGVWaXNpYmlsaXR5LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2Y3NTE0ZgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9wdWxsVXAvRXNjYWxhdGVWaXNpYmlsaXR5LmphdmEKQEAgLTAsMCArMSwxMCBAQAorY2xhc3MgRm9vIHsKKyAgCit9CisKK2NsYXNzIEZvb0ltcGwgZXh0ZW5kcyBGb28geworICBwcml2YXRlIHZvaWQgZm88Y2FyZXQ+bygpe30KKyAgdm9pZCBiYXIoKSB7CisgICAgZm9vKCk7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcHVsbFVwL0VzY2FsYXRlVmlzaWJpbGl0eV9hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3B1bGxVcC9Fc2NhbGF0ZVZpc2liaWxpdHlfYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYTI0YzlkCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3B1bGxVcC9Fc2NhbGF0ZVZpc2liaWxpdHlfYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDEwIEBACitjbGFzcyBGb28geworCisgICAgcHJvdGVjdGVkIHZvaWQgZm9vKCl7fQorfQorCitjbGFzcyBGb29JbXBsIGV4dGVuZHMgRm9vIHsKKyAgICB2b2lkIGJhcigpIHsKKyAgICBmb28oKTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9wdWxsVXAvRXh0ZW5zaW9uTWV0aG9kLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcHVsbFVwL0V4dGVuc2lvbk1ldGhvZC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ2ZWMyMTEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcHVsbFVwL0V4dGVuc2lvbk1ldGhvZC5qYXZhCkBAIC0wLDAgKzEsOCBAQAoraW50ZXJmYWNlIEJhc2UgeworfQorCitpbnRlcmZhY2UgSTIgZXh0ZW5kcyBCYXNlIHsKKyAgICB2b2lkIGZvbzxjYXJldD4oKSBkZWZhdWx0IHsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJIaSB0aGVyZS4iKTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3B1bGxVcC9FeHRlbnNpb25NZXRob2RfYWZ0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9wdWxsVXAvRXh0ZW5zaW9uTWV0aG9kX2FmdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzM4NzY0NQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9wdWxsVXAvRXh0ZW5zaW9uTWV0aG9kX2FmdGVyLmphdmEKQEAgLTAsMCArMSw4IEBACitpbnRlcmZhY2UgQmFzZSB7CisgICAgdm9pZCBmb28oKSBkZWZhdWx0IHsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJIaSB0aGVyZS4iKTsKKyAgICB9Cit9CisKK2ludGVyZmFjZSBJMiBleHRlbmRzIEJhc2UgeworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9wdWxsVXAvR2VuZXJpY3NJbkFic3RyYWN0TWV0aG9kLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcHVsbFVwL0dlbmVyaWNzSW5BYnN0cmFjdE1ldGhvZC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJkMmY0OTkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcHVsbFVwL0dlbmVyaWNzSW5BYnN0cmFjdE1ldGhvZC5qYXZhCkBAIC0wLDAgKzEsNSBAQAorcHVibGljIGFic3RyYWN0IGNsYXNzIFBhcmVudDxTPiB7fQorCitjbGFzcyBDaGlsZDxUPiBleHRlbmRzIFBhcmVudDxUPiB7CisgICB2b2lkIDxjYXJldD5tZXRob2QoVCB0KXt9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcHVsbFVwL0dlbmVyaWNzSW5BYnN0cmFjdE1ldGhvZF9hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3B1bGxVcC9HZW5lcmljc0luQWJzdHJhY3RNZXRob2RfYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOTg4MTE3Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3B1bGxVcC9HZW5lcmljc0luQWJzdHJhY3RNZXRob2RfYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDggQEAKK3B1YmxpYyBhYnN0cmFjdCBjbGFzcyBQYXJlbnQ8Uz4geworICAgIGFic3RyYWN0IHZvaWQgbWV0aG9kKFMgdCk7Cit9CisKK2NsYXNzIENoaWxkPFQ+IGV4dGVuZHMgUGFyZW50PFQ+IHsKKyAgIEBPdmVycmlkZQorICAgdm9pZCBtZXRob2QoVCB0KXt9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcHVsbFVwL0dlbmVyaWNzSW5JbXBsZW1lbnRzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcHVsbFVwL0dlbmVyaWNzSW5JbXBsZW1lbnRzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDdlMWY4OWEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcHVsbFVwL0dlbmVyaWNzSW5JbXBsZW1lbnRzLmphdmEKQEAgLTAsMCArMSwxMCBAQAorcHVibGljIGNsYXNzIFBhcmVudDxTPiB7fQorCitpbnRlcmZhY2UgSTxJVD4geworICB2b2lkIG1ldGhvZChJVCB0KTsKK30KKworY2xhc3MgQ2hpbGQ8VD4gZXh0ZW5kcyBQYXJlbnQ8VD4gaW1wbGVtZW50cyBJPFQ+eworICA8Y2FyZXQ+CisgIHB1YmxpYyB2b2lkIG1ldGhvZChUIHQpe30KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9wdWxsVXAvR2VuZXJpY3NJbkltcGxlbWVudHNfYWZ0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9wdWxsVXAvR2VuZXJpY3NJbkltcGxlbWVudHNfYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYWNhOWY4Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3B1bGxVcC9HZW5lcmljc0luSW1wbGVtZW50c19hZnRlci5qYXZhCkBAIC0wLDAgKzEsMTAgQEAKK3B1YmxpYyBjbGFzcyBQYXJlbnQ8Uz4gaW1wbGVtZW50cyBJPFM+IHt9CisKK2ludGVyZmFjZSBJPElUPiB7CisgIHZvaWQgbWV0aG9kKElUIHQpOworfQorCitjbGFzcyBDaGlsZDxUPiBleHRlbmRzIFBhcmVudDxUPiB7CisgIAorICBwdWJsaWMgdm9pZCBtZXRob2QoVCB0KXt9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcHVsbFVwL0lmRmllbGRJbml0aWFsaXphdGlvbldpdGhOb25Nb3ZlZEZpZWxkLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcHVsbFVwL0lmRmllbGRJbml0aWFsaXphdGlvbldpdGhOb25Nb3ZlZEZpZWxkLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmEzNjA5ZAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9wdWxsVXAvSWZGaWVsZEluaXRpYWxpemF0aW9uV2l0aE5vbk1vdmVkRmllbGQuamF2YQpAQCAtMCwwICsxLDE4IEBACitwdWJsaWMgY2xhc3MgQSB7Cit9CisKK2NsYXNzIEIgZXh0ZW5kcyBBIHsKKyAgICBmaW5hbCBTdHJpbmcgPGNhcmV0PmY7CisgICAgZmluYWwgU3RyaW5nIGZvbzsKKworICAgIEIoU3RyaW5nIGZpLCBTdHJpbmcgZm9vKSB7CisgICAgICAgIHRoaXMuZm9vID0gZm9vOworICAgICAgICBpZiAoZmkgPT0gdGhpcy5mb28pIHsKKyAgICAgICAgICAgIGYgPSBmb287CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBmID0gIiI7CisgICAgICAgIH0KKyAgICB9CisKKworfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3B1bGxVcC9JZkZpZWxkSW5pdGlhbGl6YXRpb25XaXRoTm9uTW92ZWRGaWVsZF9hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3B1bGxVcC9JZkZpZWxkSW5pdGlhbGl6YXRpb25XaXRoTm9uTW92ZWRGaWVsZF9hZnRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjViZWM1NjgKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcHVsbFVwL0lmRmllbGRJbml0aWFsaXphdGlvbldpdGhOb25Nb3ZlZEZpZWxkX2FmdGVyLmphdmEKQEAgLTAsMCArMSwxOCBAQAorcHVibGljIGNsYXNzIEEgeworICAgIGZpbmFsIFN0cmluZyBmOworfQorCitjbGFzcyBCIGV4dGVuZHMgQSB7CisgICAgZmluYWwgU3RyaW5nIGZvbzsKKworICAgIEIoU3RyaW5nIGZpLCBTdHJpbmcgZm9vKSB7CisgICAgICAgIHRoaXMuZm9vID0gZm9vOworICAgICAgICBpZiAoZmkgPT0gdGhpcy5mb28pIHsKKyAgICAgICAgICAgIGYgPSBmb287CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBmID0gIiI7CisgICAgICAgIH0KKyAgICB9CisKKworfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3B1bGxVcC9JZkZpZWxkTW92ZWRJbml0aWFsaXphdGlvbi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3B1bGxVcC9JZkZpZWxkTW92ZWRJbml0aWFsaXphdGlvbi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY1NDFmMGUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcHVsbFVwL0lmRmllbGRNb3ZlZEluaXRpYWxpemF0aW9uLmphdmEKQEAgLTAsMCArMSwxOCBAQAorcHVibGljIGNsYXNzIEEgeworfQorCitjbGFzcyBCIGV4dGVuZHMgQSB7CisgICAgZmluYWwgU3RyaW5nIDxjYXJldD5mOworICAgIGZpbmFsIFN0cmluZyBmb287CisKKyAgICBCKFN0cmluZyBmaSwgU3RyaW5nIGZvbykgeworICAgICAgICB0aGlzLmZvbyA9IGZvbzsKKyAgICAgICAgaWYgKGZpID09IGZvbykgeworICAgICAgICAgICAgZiA9IGZvbzsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGYgPSAiIjsKKyAgICAgICAgfQorICAgIH0KKworCit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcHVsbFVwL0lmRmllbGRNb3ZlZEluaXRpYWxpemF0aW9uX2FmdGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcHVsbFVwL0lmRmllbGRNb3ZlZEluaXRpYWxpemF0aW9uX2FmdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDAwMGZkYwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9wdWxsVXAvSWZGaWVsZE1vdmVkSW5pdGlhbGl6YXRpb25fYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDIyIEBACitwdWJsaWMgY2xhc3MgQSB7CisgICAgZmluYWwgU3RyaW5nIGY7CisKKyAgICBwdWJsaWMgQShTdHJpbmcgZmksIFN0cmluZyBmb28pIHsKKyAgICAgICAgaWYgKGZpID09IGZvbykgeworICAgICAgICAgICAgZiA9IGZvbzsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGYgPSAiIjsKKyAgICAgICAgfQorICAgIH0KK30KKworY2xhc3MgQiBleHRlbmRzIEEgeworICAgIGZpbmFsIFN0cmluZyBmb287CisKKyAgICBCKFN0cmluZyBmaSwgU3RyaW5nIGZvbykgeworICAgICAgICBzdXBlcihmaSwgZm9vKTsKKyAgICAgICAgdGhpcy5mb28gPSBmb287CisgICAgfQorCisKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9wdWxsVXAvTWVyZ2VJbnRlcmZhY2VzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcHVsbFVwL01lcmdlSW50ZXJmYWNlcy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY4ZjNkMTEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcHVsbFVwL01lcmdlSW50ZXJmYWNlcy5qYXZhCkBAIC0wLDAgKzEsMyBAQAorY2xhc3MgQmFzZSBpbXBsZW1lbnRzIEk8U3RyaW5nPiB7fQorY2xhc3MgVGU8Y2FyZXQ+c3QgZXh0ZW5kcyBCYXNlIGltcGxlbWVudHMgSTxTdHJpbmc+IHt9CitpbnRlcmZhY2UgSTxUPnt9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3B1bGxVcC9NZXJnZUludGVyZmFjZXNfYWZ0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9wdWxsVXAvTWVyZ2VJbnRlcmZhY2VzX2FmdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGZhZDZmNgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9wdWxsVXAvTWVyZ2VJbnRlcmZhY2VzX2FmdGVyLmphdmEKQEAgLTAsMCArMSwzIEBACitjbGFzcyBCYXNlIGltcGxlbWVudHMgSTxTdHJpbmc+IHt9CitjbGFzcyBUZXN0IGV4dGVuZHMgQmFzZSB7fQoraW50ZXJmYWNlIEk8VD57fQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9wdWxsVXAvTXVsdGlwbGVDb25zdHJ1Y3RvcnNGaWVsZEluaXRpYWxpemF0aW9uLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcHVsbFVwL011bHRpcGxlQ29uc3RydWN0b3JzRmllbGRJbml0aWFsaXphdGlvbi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY4ODRmNDgKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcHVsbFVwL011bHRpcGxlQ29uc3RydWN0b3JzRmllbGRJbml0aWFsaXphdGlvbi5qYXZhCkBAIC0wLDAgKzEsMTcgQEAKK3B1YmxpYyBjbGFzcyBBIHsKK30KKworY2xhc3MgQiBleHRlbmRzIEEgeworICAgIGZpbmFsIFN0cmluZyA8Y2FyZXQ+ZjsKKyAgICBmaW5hbCBTdHJpbmcgZm9vOworCisgICAgQihTdHJpbmcgZmksIFN0cmluZyBmb28pIHsKKyAgICAgICAgdGhpcy5mb28gPSBmb287CisgICAgICAgIGYgPSAiIjsKKyAgICB9CisKKyAgICBCKFN0cmluZyBmb28pIHsKKyAgICAgICAgdGhpcy5mb28gPSBmb287CisgICAgICAgIGYgPSAiIjsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcHVsbFVwL011bHRpcGxlQ29uc3RydWN0b3JzRmllbGRJbml0aWFsaXphdGlvbk5vR29vZC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3B1bGxVcC9NdWx0aXBsZUNvbnN0cnVjdG9yc0ZpZWxkSW5pdGlhbGl6YXRpb25Ob0dvb2QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNTExN2ZjCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3B1bGxVcC9NdWx0aXBsZUNvbnN0cnVjdG9yc0ZpZWxkSW5pdGlhbGl6YXRpb25Ob0dvb2QuamF2YQpAQCAtMCwwICsxLDIxIEBACitwdWJsaWMgY2xhc3MgQSB7Cit9CisKK2NsYXNzIEIgZXh0ZW5kcyBBIHsKKyAgICBmaW5hbCBTdHJpbmcgPGNhcmV0PmY7CisgICAgZmluYWwgU3RyaW5nIGZvbzsKKworICAgIEIoU3RyaW5nIGZpLCBTdHJpbmcgZm9vKSB7CisgICAgICAgIHRoaXMuZm9vID0gZm9vOworICAgICAgICBpZiAoZmkgPT0gdGhpcy5mb28pIHsKKyAgICAgICAgICAgIGYgPSBmb287CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBmID0gIiI7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBCKFN0cmluZyBmKSB7CisgICAgICAgIHRoaXMuZiA9IGY7CisgICAgICAgIGZvbyA9ICIiOworICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9wdWxsVXAvTXVsdGlwbGVDb25zdHJ1Y3RvcnNGaWVsZEluaXRpYWxpemF0aW9uTm9Hb29kX2FmdGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcHVsbFVwL011bHRpcGxlQ29uc3RydWN0b3JzRmllbGRJbml0aWFsaXphdGlvbk5vR29vZF9hZnRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI2NmJhMGIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcHVsbFVwL011bHRpcGxlQ29uc3RydWN0b3JzRmllbGRJbml0aWFsaXphdGlvbk5vR29vZF9hZnRlci5qYXZhCkBAIC0wLDAgKzEsMjEgQEAKK3B1YmxpYyBjbGFzcyBBIHsKKyAgICBmaW5hbCBTdHJpbmcgZjsKK30KKworY2xhc3MgQiBleHRlbmRzIEEgeworICAgIGZpbmFsIFN0cmluZyBmb287CisKKyAgICBCKFN0cmluZyBmaSwgU3RyaW5nIGZvbykgeworICAgICAgICB0aGlzLmZvbyA9IGZvbzsKKyAgICAgICAgaWYgKGZpID09IHRoaXMuZm9vKSB7CisgICAgICAgICAgICBmID0gZm9vOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgZiA9ICIiOworICAgICAgICB9CisgICAgfQorCisgICAgQihTdHJpbmcgZikgeworICAgICAgICB0aGlzLmYgPSBmOworICAgICAgICBmb28gPSAiIjsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcHVsbFVwL011bHRpcGxlQ29uc3RydWN0b3JzRmllbGRJbml0aWFsaXphdGlvbl9hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3B1bGxVcC9NdWx0aXBsZUNvbnN0cnVjdG9yc0ZpZWxkSW5pdGlhbGl6YXRpb25fYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YzE5ZGUxCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3B1bGxVcC9NdWx0aXBsZUNvbnN0cnVjdG9yc0ZpZWxkSW5pdGlhbGl6YXRpb25fYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDIxIEBACitwdWJsaWMgY2xhc3MgQSB7CisgICAgZmluYWwgU3RyaW5nIGY7CisKKyAgICBwdWJsaWMgQSgpIHsKKyAgICAgICAgZiA9ICIiOworICAgIH0KK30KKworY2xhc3MgQiBleHRlbmRzIEEgeworICAgIGZpbmFsIFN0cmluZyBmb287CisKKyAgICBCKFN0cmluZyBmaSwgU3RyaW5nIGZvbykgeworICAgICAgICBzdXBlcigpOworICAgICAgICB0aGlzLmZvbyA9IGZvbzsKKyAgICB9CisKKyAgICBCKFN0cmluZyBmb28pIHsKKyAgICAgICAgc3VwZXIoKTsKKyAgICAgICAgdGhpcy5mb28gPSBmb287CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3B1bGxVcC9QcmVzZXJ2ZU92ZXJyaWRlLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcHVsbFVwL1ByZXNlcnZlT3ZlcnJpZGUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NGYyZjE4Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3B1bGxVcC9QcmVzZXJ2ZU92ZXJyaWRlLmphdmEKQEAgLTAsMCArMSwxMiBAQAorYWJzdHJhY3QgY2xhc3MgQmF6eiB7CisgICAgcHVibGljIGFic3RyYWN0IHZvaWQgZm9vKCk7Cit9CisKK2Fic3RyYWN0IGNsYXNzIEZvbyBleHRlbmRzIEJhenoge30KKworY2xhc3MgQmFyIGV4dGVuZHMgRm9vIHsKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgdm9pZCBmPGNhcmV0Pm9vKCkgeworICAgIH0KK30KKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3B1bGxVcC9QcmVzZXJ2ZU92ZXJyaWRlSW5QdWxsZWRNZXRob2QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9wdWxsVXAvUHJlc2VydmVPdmVycmlkZUluUHVsbGVkTWV0aG9kLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjI0MDkxZgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9wdWxsVXAvUHJlc2VydmVPdmVycmlkZUluUHVsbGVkTWV0aG9kLmphdmEKQEAgLTAsMCArMSwxMiBAQAorcHVibGljIGNsYXNzIFRlc3QgeworICBhYnN0cmFjdCBjbGFzcyBCYXNlIGV4dGVuZHMgSW50SW1wbCB7CisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIGFic3RyYWN0IFN0cmluZzxjYXJldD4gZm9vKCk7CisgIH0KKworICBjbGFzcyBJbnRJbXBsIGV4dGVuZHMgSW50IHt9CisgIAorICBjbGFzcyBJbnQgeworICAgIHB1YmxpYyBhYnN0cmFjdCBTdHJpbmcgZm9vKCk7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcHVsbFVwL1ByZXNlcnZlT3ZlcnJpZGVJblB1bGxlZE1ldGhvZF9hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3B1bGxVcC9QcmVzZXJ2ZU92ZXJyaWRlSW5QdWxsZWRNZXRob2RfYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMTc4MDBkCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3B1bGxVcC9QcmVzZXJ2ZU92ZXJyaWRlSW5QdWxsZWRNZXRob2RfYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDEzIEBACitwdWJsaWMgY2xhc3MgVGVzdCB7CisgIGFic3RyYWN0IGNsYXNzIEJhc2UgZXh0ZW5kcyBJbnRJbXBsIHsKKyAgfQorCisgIGFic3RyYWN0IGNsYXNzIEludEltcGwgZXh0ZW5kcyBJbnQgeworICAgICAgQE92ZXJyaWRlCisgICAgICBwdWJsaWMgYWJzdHJhY3QgU3RyaW5nIGZvbygpOworICB9CisgIAorICBjbGFzcyBJbnQgeworICAgIHB1YmxpYyBhYnN0cmFjdCBTdHJpbmcgZm9vKCk7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcHVsbFVwL1ByZXNlcnZlT3ZlcnJpZGVfYWZ0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9wdWxsVXAvUHJlc2VydmVPdmVycmlkZV9hZnRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVhNTUzYzEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcHVsbFVwL1ByZXNlcnZlT3ZlcnJpZGVfYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDEzIEBACithYnN0cmFjdCBjbGFzcyBCYXp6IHsKKyAgICBwdWJsaWMgYWJzdHJhY3Qgdm9pZCBmb28oKTsKK30KKworYWJzdHJhY3QgY2xhc3MgRm9vIGV4dGVuZHMgQmF6eiB7CisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIHZvaWQgZm9vKCkgeworICAgIH0KK30KKworY2xhc3MgQmFyIGV4dGVuZHMgRm9vIHsKK30KKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3B1bGxVcC9QdWxsVXBBbmRNYWtlQWJzdHJhY3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9wdWxsVXAvUHVsbFVwQW5kTWFrZUFic3RyYWN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTExY2ZiZQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9wdWxsVXAvUHVsbFVwQW5kTWFrZUFic3RyYWN0LmphdmEKQEAgLTAsMCArMSwxMSBAQAorcHVibGljIGNsYXNzIEEyIHsKK30KKworY2xhc3MgQjIgZXh0ZW5kcyBBMiB7CisgIHB1YmxpYyB2b2lkIDxjYXJldD5hKCkgeworICAgIGIoKTsKKyAgfQorCisgIHByaXZhdGUgdm9pZCBiKCkgeworICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcHVsbFVwL1B1bGxVcEFuZE1ha2VBYnN0cmFjdF9hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3B1bGxVcC9QdWxsVXBBbmRNYWtlQWJzdHJhY3RfYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZjE0ZjhlCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3B1bGxVcC9QdWxsVXBBbmRNYWtlQWJzdHJhY3RfYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDE0IEBACitwdWJsaWMgYWJzdHJhY3QgY2xhc3MgQTIgeworICAgIHB1YmxpYyB2b2lkIGEoKSB7CisgICAgICBiKCk7CisgICAgfQorCisgICAgcHJvdGVjdGVkIGFic3RyYWN0IHZvaWQgYigpOworfQorCitjbGFzcyBCMiBleHRlbmRzIEEyIHsKKworICAgIEBPdmVycmlkZQorICAgIHByb3RlY3RlZCB2b2lkIGIoKSB7CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9wdWxsVXAvUHVsbFVwSW5oZXJpdGVkU3RhdGljQ2xhc3Nlcy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3B1bGxVcC9QdWxsVXBJbmhlcml0ZWRTdGF0aWNDbGFzc2VzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDhjYzUwNgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9wdWxsVXAvUHVsbFVwSW5oZXJpdGVkU3RhdGljQ2xhc3Nlcy5qYXZhCkBAIC0wLDAgKzEsOCBAQAorcHVibGljIGNsYXNzIEEgZXh0ZW5kcyBBQSB7CisgIDxjYXJldD4KKyAgc3RhdGljIGNsYXNzIEMgZXh0ZW5kcyBEIHt9CisgIHN0YXRpYyBjbGFzcyBEIGV4dGVuZHMgQiB7fQorICBzdGF0aWMgY2xhc3MgQiB7fQorfQorCitjbGFzcyBBQSB7fQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9wdWxsVXAvUHVsbFVwSW5oZXJpdGVkU3RhdGljQ2xhc3Nlc19hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3B1bGxVcC9QdWxsVXBJbmhlcml0ZWRTdGF0aWNDbGFzc2VzX2FmdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjExYWFiYgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9wdWxsVXAvUHVsbFVwSW5oZXJpdGVkU3RhdGljQ2xhc3Nlc19hZnRlci5qYXZhCkBAIC0wLDAgKzEsMTAgQEAKK3B1YmxpYyBjbGFzcyBBIGV4dGVuZHMgQUEgeworCisgICAgc3RhdGljIGNsYXNzIEIge30KK30KKworY2xhc3MgQUEgeworICAgIHN0YXRpYyBjbGFzcyBDIGV4dGVuZHMgRCB7fQorCisgICAgc3RhdGljIGNsYXNzIEQgZXh0ZW5kcyBBLkIge30KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcHVsbFVwL1B1bGxVcFByaXZhdGVJbm5lckNsYXNzV2l0aFByaXZhdGVDb25zdHJ1Y3Rvci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3B1bGxVcC9QdWxsVXBQcml2YXRlSW5uZXJDbGFzc1dpdGhQcml2YXRlQ29uc3RydWN0b3IuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MGUzZTM5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3B1bGxVcC9QdWxsVXBQcml2YXRlSW5uZXJDbGFzc1dpdGhQcml2YXRlQ29uc3RydWN0b3IuamF2YQpAQCAtMCwwICsxLDE1IEBACitwdWJsaWMgY2xhc3MgQiBleHRlbmRzIEEgeworICAgIHByaXZhdGUgdm9pZCBmKCl7CisgICAgICAgIG5ldyBDKCk7CisgICAgfQorICAgICAgPGNhcmV0PgorICAgIHByaXZhdGUgc3RhdGljIGNsYXNzIEN7CisgICAgICAgIHByaXZhdGUgQygpeworCisgICAgICAgIH0KKyAgICB9Cit9CisKKy8vQS5qYXZhCitjbGFzcyBBIHsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcHVsbFVwL1B1bGxVcFByaXZhdGVJbm5lckNsYXNzV2l0aFByaXZhdGVDb25zdHJ1Y3Rvcl9hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3B1bGxVcC9QdWxsVXBQcml2YXRlSW5uZXJDbGFzc1dpdGhQcml2YXRlQ29uc3RydWN0b3JfYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYzliYWFmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3B1bGxVcC9QdWxsVXBQcml2YXRlSW5uZXJDbGFzc1dpdGhQcml2YXRlQ29uc3RydWN0b3JfYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDE1IEBACitwdWJsaWMgY2xhc3MgQiBleHRlbmRzIEEgeworICAgIHByaXZhdGUgdm9pZCBmKCl7CisgICAgICAgIG5ldyBDKCk7CisgICAgfQorCit9CisKKy8vQS5qYXZhCitjbGFzcyBBIHsKKyAgICBwcm90ZWN0ZWQgc3RhdGljIGNsYXNzIEN7CisgICAgICAgIHByb3RlY3RlZCBDKCl7CisKKyAgICAgICAgfQorICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcHVsbFVwL1F1YWxpZmllZFJlZmVyZW5jZS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3B1bGxVcC9RdWFsaWZpZWRSZWZlcmVuY2UuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMjMzMGY3Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3B1bGxVcC9RdWFsaWZpZWRSZWZlcmVuY2UuamF2YQpAQCAtMCwwICsxLDEzIEBACitjbGFzcyBYIHt9CisKK2NsYXNzIDxjYXJldD5ZIGV4dGVuZHMgWCB7CisgICAgcHJpdmF0ZSBzdGF0aWMgaW50IHggPSAwOworCisgICAgcHVibGljIHN0YXRpYyBpbnQgZ2V0WCgpIHsKKyAgICAgICAgcmV0dXJuIHg7CisgICAgfQorCisgICAgcHVibGljIHN0YXRpYyB2b2lkIHNldFgoaW50IHgpIHsKKyAgICAgICAgWS54ID0geDsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3B1bGxVcC9RdWFsaWZpZWRSZWZlcmVuY2VfYWZ0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9wdWxsVXAvUXVhbGlmaWVkUmVmZXJlbmNlX2FmdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjZhOTc3NwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9wdWxsVXAvUXVhbGlmaWVkUmVmZXJlbmNlX2FmdGVyLmphdmEKQEAgLTAsMCArMSwxNSBAQAorY2xhc3MgWCB7CisgICAgcHJpdmF0ZSBzdGF0aWMgaW50IHggPSAwOworCisgICAgcHVibGljIHN0YXRpYyBpbnQgZ2V0WCgpIHsKKyAgICAgICAgcmV0dXJuIHg7CisgICAgfQorCisgICAgcHVibGljIHN0YXRpYyB2b2lkIHNldFgoaW50IHgpIHsKKyAgICAgICAgWC54ID0geDsKKyAgICB9Cit9CisKK2NsYXNzIFkgZXh0ZW5kcyBYIHsKKworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9wdWxsVXAvUXVhbGlmaWVkU3VwZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9wdWxsVXAvUXVhbGlmaWVkU3VwZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YzU4NjYxCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3B1bGxVcC9RdWFsaWZpZWRTdXBlci5qYXZhCkBAIC0wLDAgKzEsMTIgQEAKK2NsYXNzIDxjYXJldD5RdWFsaWZpZWRTdXBlciBleHRlbmRzIEJhc2UgeworICAgIGNsYXNzIElubmVyIHsKKyAgICAgICAgdm9pZCBnb28oKSB7CisgICAgICAgICAgICBRdWFsaWZpZWRTdXBlci5zdXBlci50b1N0cmluZygpOworICAgICAgICB9CisgICAgfQorfQorCitjbGFzcyBCYXNlIHsKKworCit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcHVsbFVwL1F1YWxpZmllZFN1cGVyX2FmdGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcHVsbFVwL1F1YWxpZmllZFN1cGVyX2FmdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDhlNzI1MAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9wdWxsVXAvUXVhbGlmaWVkU3VwZXJfYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDEyIEBACitjbGFzcyBRdWFsaWZpZWRTdXBlciBleHRlbmRzIEJhc2UgeworfQorCitjbGFzcyBCYXNlIHsKKworCisgICAgY2xhc3MgSW5uZXIgeworICAgICAgICB2b2lkIGdvbygpIHsKKyAgICAgICAgICAgIEJhc2UudGhpcy50b1N0cmluZygpOworICAgICAgICB9CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3B1bGxVcC9RdWFsaWZpZWRUaGlzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcHVsbFVwL1F1YWxpZmllZFRoaXMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jY2MyZDNiCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3B1bGxVcC9RdWFsaWZpZWRUaGlzLmphdmEKQEAgLTAsMCArMSwxNSBAQAorY2xhc3MgQmFzZSB7CisgICAgdm9pZCBmb28oKSB7CisgICAgfQorfQorCitwdWJsaWMgY2xhc3MgPGNhcmV0PlF1YWxpZmllZFRoaXMgZXh0ZW5kcyBCYXNlIHsKKyAgICB2b2lkIGZvbygpIHsKKyAgICB9CisKKyAgICBjbGFzcyBJbm5lciB7CisgICAgICAgIHZvaWQgYmFyKCkgeworICAgICAgICAgICAgUXVhbGlmaWVkVGhpcy50aGlzLmZvbygpOworICAgICAgICB9CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9wdWxsVXAvUXVhbGlmaWVkVGhpc19hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3B1bGxVcC9RdWFsaWZpZWRUaGlzX2FmdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWE0MGQ3YwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9wdWxsVXAvUXVhbGlmaWVkVGhpc19hZnRlci5qYXZhCkBAIC0wLDAgKzEsMTYgQEAKK2NsYXNzIEJhc2UgeworICAgIHZvaWQgZm9vKCkgeworICAgIH0KKworICAgIGNsYXNzIElubmVyIHsKKyAgICAgICAgdm9pZCBiYXIoKSB7CisgICAgICAgICAgICBCYXNlLnRoaXMuZm9vKCk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3B1YmxpYyBjbGFzcyBRdWFsaWZpZWRUaGlzIGV4dGVuZHMgQmFzZSB7CisgICAgdm9pZCBmb28oKSB7CisgICAgfQorCit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3B1bGxVcC9SZW1vdmVPdmVycmlkZS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3B1bGxVcC9SZW1vdmVPdmVycmlkZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMxOTc3MTYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcHVsbFVwL1JlbW92ZU92ZXJyaWRlLmphdmEKQEAgLTAsMCArMSwxNiBAQAorcHVibGljIGNsYXNzIFRlc3QgeworICAgIGNsYXNzIEltcGwgZXh0ZW5kcyBCYXNlIHsKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyBTdHJpbmcgZ2V0KCkgeworICAgICAgICAgICAgcmV0dXJuICIyMzkiOworICAgICAgICB9CisgICAgfQorCisgICAgYWJzdHJhY3QgY2xhc3MgQmFzZSBpbXBsZW1lbnRzIEludCB7CisgICAgICAgIHB1YmxpYyBhYnN0cmFjdCBTdHJpbmcgPGNhcmV0PmdldCgpOworCisgICAgfQorCisgICAgaW50ZXJmYWNlIEludCB7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9wdWxsVXAvUmVtb3ZlT3ZlcnJpZGVGcm9tUHVsbGVkTWV0aG9kLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcHVsbFVwL1JlbW92ZU92ZXJyaWRlRnJvbVB1bGxlZE1ldGhvZC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU1NWYyZTUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcHVsbFVwL1JlbW92ZU92ZXJyaWRlRnJvbVB1bGxlZE1ldGhvZC5qYXZhCkBAIC0wLDAgKzEsOSBAQAorcHVibGljIGNsYXNzIFRlc3QgeworICBhYnN0cmFjdCBjbGFzcyBCYXNlIGV4dGVuZHMgSW50IHsKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgYWJzdHJhY3QgU3RyaW5nPGNhcmV0PiBmb28oKTsKKyAgfQorCisgIGNsYXNzIEludCB7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcHVsbFVwL1JlbW92ZU92ZXJyaWRlRnJvbVB1bGxlZE1ldGhvZF9hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3B1bGxVcC9SZW1vdmVPdmVycmlkZUZyb21QdWxsZWRNZXRob2RfYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43Mzg4ZGQxCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3B1bGxVcC9SZW1vdmVPdmVycmlkZUZyb21QdWxsZWRNZXRob2RfYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDggQEAKK3B1YmxpYyBjbGFzcyBUZXN0IHsKKyAgYWJzdHJhY3QgY2xhc3MgQmFzZSBleHRlbmRzIEludCB7CisgIH0KKworICBhYnN0cmFjdCBjbGFzcyBJbnQgeworICAgICAgcHVibGljIGFic3RyYWN0IFN0cmluZyBmb28oKTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9wdWxsVXAvUmVtb3ZlT3ZlcnJpZGVfYWZ0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9wdWxsVXAvUmVtb3ZlT3ZlcnJpZGVfYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZGVlMDMzCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3B1bGxVcC9SZW1vdmVPdmVycmlkZV9hZnRlci5qYXZhCkBAIC0wLDAgKzEsMTUgQEAKK3B1YmxpYyBjbGFzcyBUZXN0IHsKKyAgICBjbGFzcyBJbXBsIGV4dGVuZHMgQmFzZSB7CisgICAgICAgIHB1YmxpYyBTdHJpbmcgZ2V0KCkgeworICAgICAgICAgICAgcmV0dXJuICIyMzkiOworICAgICAgICB9CisgICAgfQorCisgICAgYWJzdHJhY3QgY2xhc3MgQmFzZSBpbXBsZW1lbnRzIEludCB7CisKKyAgICB9CisKKyAgICBpbnRlcmZhY2UgSW50IHsKKyAgICAgICAgU3RyaW5nIGdldCgpOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcHVsbFVwL1JlcGxhY2VEdXBsaWNhdGVzSW5Jbmhlcml0b3JzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcHVsbFVwL1JlcGxhY2VEdXBsaWNhdGVzSW5Jbmhlcml0b3JzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjdlNGMyZgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9wdWxsVXAvUmVwbGFjZUR1cGxpY2F0ZXNJbkluaGVyaXRvcnMuamF2YQpAQCAtMCwwICsxLDE4IEBACitjbGFzcyBBIHt9CitjbGFzcyBBSW1wbDEgZXh0ZW5kcyBBeworICB2b2lkIGY8Y2FyZXQ+b28oKSB7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJoZWxsbyIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiaGVsbG8iKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oImhlbGxvIik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJoZWxsbyIpOworICB9Cit9CisKK2NsYXNzIEFJbXBsMiBleHRlbmRzIEEgeworICB2b2lkIGJhcigpIHsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oImhlbGxvIik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJoZWxsbyIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiaGVsbG8iKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oImhlbGxvIik7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcHVsbFVwL1JlcGxhY2VEdXBsaWNhdGVzSW5Jbmhlcml0b3JzX2FmdGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcHVsbFVwL1JlcGxhY2VEdXBsaWNhdGVzSW5Jbmhlcml0b3JzX2FmdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzRlOTAwMwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9wdWxsVXAvUmVwbGFjZUR1cGxpY2F0ZXNJbkluaGVyaXRvcnNfYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDE2IEBACitjbGFzcyBBIHsKKyAgICB2b2lkIGZvbygpIHsKKyAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiaGVsbG8iKTsKKyAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiaGVsbG8iKTsKKyAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiaGVsbG8iKTsKKyAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiaGVsbG8iKTsKKyAgICB9Cit9CitjbGFzcyBBSW1wbDEgZXh0ZW5kcyBBeworfQorCitjbGFzcyBBSW1wbDIgZXh0ZW5kcyBBIHsKKyAgdm9pZCBiYXIoKSB7CisgICAgICBmb28oKTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9wdWxsVXAvVHJ5Q2F0Y2hGaWVsZEluaXRpYWxpemVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcHVsbFVwL1RyeUNhdGNoRmllbGRJbml0aWFsaXplci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA0MDFiNmUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcHVsbFVwL1RyeUNhdGNoRmllbGRJbml0aWFsaXplci5qYXZhCkBAIC0wLDAgKzEsMTkgQEAKK3B1YmxpYyBjbGFzcyBTdXAgeworCit9CisKK2NsYXNzIEV4dHJhY3RTdXBlckNsYXNzIGV4dGVuZHMgU3VwIHsKKworICBwcml2YXRlIGZpbmFsIFN0cmluZyA8Y2FyZXQ+ZmllbGQ7CisKKyAgcHVibGljIEV4dHJhY3RTdXBlckNsYXNzKCkgeworCisKKyAgICB0cnkgeworICAgICAgZmllbGQgPSAoU3RyaW5nKSJ0ZXh0IjsKKyAgICB9CisgICAgY2F0Y2ggKFJ1bnRpbWVFeGNlcHRpb24gZSkgeworICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oKTsKKyAgICB9CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcHVsbFVwL1RyeUNhdGNoRmllbGRJbml0aWFsaXplcl9hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3B1bGxVcC9UcnlDYXRjaEZpZWxkSW5pdGlhbGl6ZXJfYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NzA0ZjhhCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3B1bGxVcC9UcnlDYXRjaEZpZWxkSW5pdGlhbGl6ZXJfYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDIyIEBACitwdWJsaWMgY2xhc3MgU3VwIHsKKworICAgIHByb3RlY3RlZCBmaW5hbCBTdHJpbmcgZmllbGQ7CisKKyAgICBwdWJsaWMgU3VwKCkgeworICAgICAgICB0cnkgeworICAgICAgICAgIGZpZWxkID0gKFN0cmluZykidGV4dCI7CisgICAgICAgIH0KKyAgICAgICAgY2F0Y2ggKFJ1bnRpbWVFeGNlcHRpb24gZSkgeworICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK2NsYXNzIEV4dHJhY3RTdXBlckNsYXNzIGV4dGVuZHMgU3VwIHsKKworICAgIHB1YmxpYyBFeHRyYWN0U3VwZXJDbGFzcygpIHsKKyAgICAgICAgc3VwZXIoKTsKKworCisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9wdWxsVXAvVHlwZUFyZ3VtZW50LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcHVsbFVwL1R5cGVBcmd1bWVudC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxMTQwYzgKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcHVsbFVwL1R5cGVBcmd1bWVudC5qYXZhCkBAIC0wLDAgKzEsNSBAQAorcHVibGljIGNsYXNzIFBhcmVudDxTPiB7fQorCitjbGFzcyBDaGlsZCBleHRlbmRzIFBhcmVudDxTdHJpbmc+IHsKKyAgIFN0cmluZyA8Y2FyZXQ+ZjsKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9wdWxsVXAvVHlwZUFyZ3VtZW50X2FmdGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcHVsbFVwL1R5cGVBcmd1bWVudF9hZnRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY1MzBlY2YKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcHVsbFVwL1R5cGVBcmd1bWVudF9hZnRlci5qYXZhCkBAIC0wLDAgKzEsNiBAQAorcHVibGljIGNsYXNzIFBhcmVudDxTPiB7CisgICAgU3RyaW5nIGY7Cit9CisKK2NsYXNzIENoaWxkIGV4dGVuZHMgUGFyZW50PFN0cmluZz4geworfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3B1bGxVcC9UeXBlUGFyYW1FcmFzdXJlLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcHVsbFVwL1R5cGVQYXJhbUVyYXN1cmUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZGJjMjRmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3B1bGxVcC9UeXBlUGFyYW1FcmFzdXJlLmphdmEKQEAgLTAsMCArMSw1IEBACitwdWJsaWMgY2xhc3MgUGFyZW50IHt9CisKK2NsYXNzIENoaWxkPFQ+IGV4dGVuZHMgUGFyZW50IHsKKyAgIFQgPGNhcmV0PmY7Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcHVsbFVwL1R5cGVQYXJhbUVyYXN1cmVfYWZ0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9wdWxsVXAvVHlwZVBhcmFtRXJhc3VyZV9hZnRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZiZTk4ZGEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcHVsbFVwL1R5cGVQYXJhbUVyYXN1cmVfYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDYgQEAKK3B1YmxpYyBjbGFzcyBQYXJlbnQgeworICAgIE9iamVjdCBmOworfQorCitjbGFzcyBDaGlsZDxUPiBleHRlbmRzIFBhcmVudCB7Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcHVsbFVwL1R5cGVQYXJhbVN1YnN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcHVsbFVwL1R5cGVQYXJhbVN1YnN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjJhZDBjNwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9wdWxsVXAvVHlwZVBhcmFtU3Vic3QuamF2YQpAQCAtMCwwICsxLDUgQEAKK3B1YmxpYyBjbGFzcyBQYXJlbnQ8Uz4ge30KKworY2xhc3MgQ2hpbGQ8VD4gZXh0ZW5kcyBQYXJlbnQ8VD4geworICAgVCA8Y2FyZXQ+ZjsKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9wdWxsVXAvVHlwZVBhcmFtU3Vic3RfYWZ0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9wdWxsVXAvVHlwZVBhcmFtU3Vic3RfYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYzc0NzQ1Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3B1bGxVcC9UeXBlUGFyYW1TdWJzdF9hZnRlci5qYXZhCkBAIC0wLDAgKzEsNiBAQAorcHVibGljIGNsYXNzIFBhcmVudDxTPiB7CisgICAgUyBmOworfQorCitjbGFzcyBDaGlsZDxUPiBleHRlbmRzIFBhcmVudDxUPiB7Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcHVsbFVwL1R5cGVQYXJhbXNDb25mbGljdGluZ05hbWVzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcHVsbFVwL1R5cGVQYXJhbXNDb25mbGljdGluZ05hbWVzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDdiNGRmZgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9wdWxsVXAvVHlwZVBhcmFtc0NvbmZsaWN0aW5nTmFtZXMuamF2YQpAQCAtMCwwICsxLDcgQEAKK2ludGVyZmFjZSBCYXI8VD4geyB9CisKK2ludGVyZmFjZSBCYXNlPFQ+IHsgfQorCitjbGFzcyBGb288VCxVPiBpbXBsZW1lbnRzIEJhc2U8VT4geworICAgIHZvaWQgZm88Y2FyZXQ+byhCYXI8VT4gYmFyKSB7IH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcHVsbFVwL1R5cGVQYXJhbXNDb25mbGljdGluZ05hbWVzX2FmdGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcHVsbFVwL1R5cGVQYXJhbXNDb25mbGljdGluZ05hbWVzX2FmdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTg0MTIxOAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9wdWxsVXAvVHlwZVBhcmFtc0NvbmZsaWN0aW5nTmFtZXNfYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDEwIEBACitpbnRlcmZhY2UgQmFyPFQ+IHsgfQorCitpbnRlcmZhY2UgQmFzZTxUPiB7CisgICAgdm9pZCBmb28oQmFyPFQ+IGJhcik7Cit9CisKK2NsYXNzIEZvbzxULFU+IGltcGxlbWVudHMgQmFzZTxVPiB7CisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIHZvaWQgZm9vKEJhcjxVPiBiYXIpIHsgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9wdWxsVXAvVXBkYXRlU3RhdGljUmVmcy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3B1bGxVcC9VcGRhdGVTdGF0aWNSZWZzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGQxNTE3NwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9wdWxsVXAvVXBkYXRlU3RhdGljUmVmcy5qYXZhCkBAIC0wLDAgKzEsMTAgQEAKK2NsYXNzIEZvbyB7fQorY2xhc3MgRm9vSW1wbCBleHRlbmRzIEZvbyB7CisgIHB1YmxpYyBzdGF0aWMgdm9pZCBmb28oKXt9CisgIDxjYXJldD4KK30KK2NsYXNzIFUgeworICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisgICAgRm9vSW1wbC5mb28oKTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9wdWxsVXAvVXBkYXRlU3RhdGljUmVmc19hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3B1bGxVcC9VcGRhdGVTdGF0aWNSZWZzX2FmdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTI2N2Q5OQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9wdWxsVXAvVXBkYXRlU3RhdGljUmVmc19hZnRlci5qYXZhCkBAIC0wLDAgKzEsMTEgQEAKK2NsYXNzIEZvbyB7CisgICAgcHVibGljIHN0YXRpYyB2b2lkIGZvbygpe30KK30KK2NsYXNzIEZvb0ltcGwgZXh0ZW5kcyBGb28geworCit9CitjbGFzcyBVIHsKKyAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworICAgIEZvby5mb28oKTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9wdWxsVXAvaW5hY2Nlc3NpYmxlL2FmdGVyL2EvQS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3B1bGxVcC9pbmFjY2Vzc2libGUvYWZ0ZXIvYS9BLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjYxNzA5YQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9wdWxsVXAvaW5hY2Nlc3NpYmxlL2FmdGVyL2EvQS5qYXZhCkBAIC0wLDAgKzEsNSBAQAorcGFja2FnZSBhOworaW1wb3J0IGIuQjsKK3B1YmxpYyBjbGFzcyBBIGV4dGVuZHMgQiB7CisgICAgdm9pZCBmb28oKXt9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3B1bGxVcC9pbmFjY2Vzc2libGUvYWZ0ZXIvYi9CLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcHVsbFVwL2luYWNjZXNzaWJsZS9hZnRlci9iL0IuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOWNmNzk2Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3B1bGxVcC9pbmFjY2Vzc2libGUvYWZ0ZXIvYi9CLmphdmEKQEAgLTAsMCArMSw2IEBACitwYWNrYWdlIGI7CitwdWJsaWMgY2xhc3MgQiB7CisgICAgdm9pZCBtZXRob2QyTW92ZSgpIHsKKyAgICAgIGZvbygpOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcHVsbFVwL2luYWNjZXNzaWJsZS9iZWZvcmUvYS9BLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcHVsbFVwL2luYWNjZXNzaWJsZS9iZWZvcmUvYS9BLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzc0YmE3YwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9wdWxsVXAvaW5hY2Nlc3NpYmxlL2JlZm9yZS9hL0EuamF2YQpAQCAtMCwwICsxLDggQEAKK3BhY2thZ2UgYTsKK2ltcG9ydCBiLkI7CitwdWJsaWMgY2xhc3MgQSBleHRlbmRzIEIgeworICB2b2lkIG1ldGhvZDJNb3ZlKCkgeworICAgIGZvbygpOworICB9CisgIHZvaWQgZm9vKCl7fQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9wdWxsVXAvaW5hY2Nlc3NpYmxlL2JlZm9yZS9iL0IuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9wdWxsVXAvaW5hY2Nlc3NpYmxlL2JlZm9yZS9iL0IuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ODJjZTQzCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3B1bGxVcC9pbmFjY2Vzc2libGUvYmVmb3JlL2IvQi5qYXZhCkBAIC0wLDAgKzEsMiBAQAorcGFja2FnZSBiOworcHVibGljIGNsYXNzIEIge30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcHVsbFVwL3JldXNlU3VwZXJNZXRob2QvYWZ0ZXIvYS9BLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcHVsbFVwL3JldXNlU3VwZXJNZXRob2QvYWZ0ZXIvYS9BLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTA0YTY5OQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9wdWxsVXAvcmV1c2VTdXBlck1ldGhvZC9hZnRlci9hL0EuamF2YQpAQCAtMCwwICsxLDUgQEAKK3BhY2thZ2UgYTsKK2ltcG9ydCBiLkI7CitwdWJsaWMgY2xhc3MgQSBleHRlbmRzIEIgeworICAgIHByb3RlY3RlZCB2b2lkIGZvbygpe30KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcHVsbFVwL3JldXNlU3VwZXJNZXRob2QvYWZ0ZXIvYi9CLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcHVsbFVwL3JldXNlU3VwZXJNZXRob2QvYWZ0ZXIvYi9CLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGU1NzlmOAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9wdWxsVXAvcmV1c2VTdXBlck1ldGhvZC9hZnRlci9iL0IuamF2YQpAQCAtMCwwICsxLDggQEAKK3BhY2thZ2UgYjsKK3B1YmxpYyBjbGFzcyBCIHsKKyAgcHJvdGVjdGVkIHZvaWQgZm9vKCl7fQorCisgICAgdm9pZCBtZXRob2QyTW92ZSgpIHsKKyAgICAgIGZvbygpOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcHVsbFVwL3JldXNlU3VwZXJNZXRob2QvYmVmb3JlL2EvQS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3B1bGxVcC9yZXVzZVN1cGVyTWV0aG9kL2JlZm9yZS9hL0EuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMDhhNDBlCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3B1bGxVcC9yZXVzZVN1cGVyTWV0aG9kL2JlZm9yZS9hL0EuamF2YQpAQCAtMCwwICsxLDggQEAKK3BhY2thZ2UgYTsKK2ltcG9ydCBiLkI7CitwdWJsaWMgY2xhc3MgQSBleHRlbmRzIEIgeworICB2b2lkIG1ldGhvZDJNb3ZlKCkgeworICAgIGZvbygpOworICB9CisgIHByb3RlY3RlZCB2b2lkIGZvbygpe30KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcHVsbFVwL3JldXNlU3VwZXJNZXRob2QvYmVmb3JlL2IvQi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3B1bGxVcC9yZXVzZVN1cGVyTWV0aG9kL2JlZm9yZS9iL0IuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZWZiNTcxCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3B1bGxVcC9yZXVzZVN1cGVyTWV0aG9kL2JlZm9yZS9iL0IuamF2YQpAQCAtMCwwICsxLDQgQEAKK3BhY2thZ2UgYjsKK3B1YmxpYyBjbGFzcyBCIHsKKyAgcHJvdGVjdGVkIHZvaWQgZm9vKCl7fQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9wdWxsVXAvcmV1c2VTdXBlclN1cGVyTWV0aG9kL2FmdGVyL2EvQS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3B1bGxVcC9yZXVzZVN1cGVyU3VwZXJNZXRob2QvYWZ0ZXIvYS9BLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTA0YTY5OQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9wdWxsVXAvcmV1c2VTdXBlclN1cGVyTWV0aG9kL2FmdGVyL2EvQS5qYXZhCkBAIC0wLDAgKzEsNSBAQAorcGFja2FnZSBhOworaW1wb3J0IGIuQjsKK3B1YmxpYyBjbGFzcyBBIGV4dGVuZHMgQiB7CisgICAgcHJvdGVjdGVkIHZvaWQgZm9vKCl7fQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9wdWxsVXAvcmV1c2VTdXBlclN1cGVyTWV0aG9kL2FmdGVyL2IvQi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3B1bGxVcC9yZXVzZVN1cGVyU3VwZXJNZXRob2QvYWZ0ZXIvYi9CLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjI3YTRlNgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9wdWxsVXAvcmV1c2VTdXBlclN1cGVyTWV0aG9kL2FmdGVyL2IvQi5qYXZhCkBAIC0wLDAgKzEsNyBAQAorcGFja2FnZSBiOworaW1wb3J0IGMuQzsKK3B1YmxpYyBjbGFzcyBCIGV4dGVuZHMgQyB7CisgICAgdm9pZCBtZXRob2QyTW92ZSgpIHsKKyAgICAgIGZvbygpOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcHVsbFVwL3JldXNlU3VwZXJTdXBlck1ldGhvZC9hZnRlci9jL0MuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9wdWxsVXAvcmV1c2VTdXBlclN1cGVyTWV0aG9kL2FmdGVyL2MvQy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmViNWExYTYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcHVsbFVwL3JldXNlU3VwZXJTdXBlck1ldGhvZC9hZnRlci9jL0MuamF2YQpAQCAtMCwwICsxLDQgQEAKK3BhY2thZ2UgYzsKK3B1YmxpYyBjbGFzcyBDIHsKKyAgcHJvdGVjdGVkIHZvaWQgZm9vKCl7fQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9wdWxsVXAvcmV1c2VTdXBlclN1cGVyTWV0aG9kL2JlZm9yZS9hL0EuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9wdWxsVXAvcmV1c2VTdXBlclN1cGVyTWV0aG9kL2JlZm9yZS9hL0EuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMDhhNDBlCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3B1bGxVcC9yZXVzZVN1cGVyU3VwZXJNZXRob2QvYmVmb3JlL2EvQS5qYXZhCkBAIC0wLDAgKzEsOCBAQAorcGFja2FnZSBhOworaW1wb3J0IGIuQjsKK3B1YmxpYyBjbGFzcyBBIGV4dGVuZHMgQiB7CisgIHZvaWQgbWV0aG9kMk1vdmUoKSB7CisgICAgZm9vKCk7CisgIH0KKyAgcHJvdGVjdGVkIHZvaWQgZm9vKCl7fQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9wdWxsVXAvcmV1c2VTdXBlclN1cGVyTWV0aG9kL2JlZm9yZS9iL0IuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9wdWxsVXAvcmV1c2VTdXBlclN1cGVyTWV0aG9kL2JlZm9yZS9iL0IuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNzc5N2Q0Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3B1bGxVcC9yZXVzZVN1cGVyU3VwZXJNZXRob2QvYmVmb3JlL2IvQi5qYXZhCkBAIC0wLDAgKzEsNCBAQAorcGFja2FnZSBiOworaW1wb3J0IGMuQzsKK3B1YmxpYyBjbGFzcyBCIGV4dGVuZHMgQyB7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3B1bGxVcC9yZXVzZVN1cGVyU3VwZXJNZXRob2QvYmVmb3JlL2MvQy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3B1bGxVcC9yZXVzZVN1cGVyU3VwZXJNZXRob2QvYmVmb3JlL2MvQy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmViNWExYTYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcHVsbFVwL3JldXNlU3VwZXJTdXBlck1ldGhvZC9iZWZvcmUvYy9DLmphdmEKQEAgLTAsMCArMSw0IEBACitwYWNrYWdlIGM7CitwdWJsaWMgY2xhc3MgQyB7CisgIHByb3RlY3RlZCB2b2lkIGZvbygpe30KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcHVzaERvd24vQm9keVR5cGVQYXJhbWV0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9wdXNoRG93bi9Cb2R5VHlwZVBhcmFtZXRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNiNWFjZTMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcHVzaERvd24vQm9keVR5cGVQYXJhbWV0ZXIuamF2YQpAQCAtMCwwICsxLDcgQEAKK2NsYXNzIFRlc3QgPFQ+IHsKKyAgIHZvaWQgPGNhcmV0PmZvbyhUIHQpIHsKKyAgICAgVCB0dCA9IHQ7CisgICB9Cit9CisKK2NsYXNzIEkgZXh0ZW5kcyBUZXN0PFN0cmluZz57fQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9wdXNoRG93bi9Cb2R5VHlwZVBhcmFtZXRlcl9hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3B1c2hEb3duL0JvZHlUeXBlUGFyYW1ldGVyX2FmdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2M3MDI3NwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9wdXNoRG93bi9Cb2R5VHlwZVBhcmFtZXRlcl9hZnRlci5qYXZhCkBAIC0wLDAgKzEsOCBAQAorY2xhc3MgVGVzdCA8VD4geworfQorCitjbGFzcyBJIGV4dGVuZHMgVGVzdDxTdHJpbmc+eworICAgIHZvaWQgZm9vKFN0cmluZyB0KSB7CisgICAgICBTdHJpbmcgdHQgPSB0OworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcHVzaERvd24vRGlzYWdyZWVUeXBlUGFyYW1ldGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcHVzaERvd24vRGlzYWdyZWVUeXBlUGFyYW1ldGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOThmZmY5NgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9wdXNoRG93bi9EaXNhZ3JlZVR5cGVQYXJhbWV0ZXIuamF2YQpAQCAtMCwwICsxLDEyIEBACitjbGFzcyBUZXN0IDxUPiB7CisgICB2b2lkIDxjYXJldD5mb28oVCB0KSB7CisgICB9Cit9CisKK2NsYXNzIEkgZXh0ZW5kcyBUZXN0PFN0cmluZz57fQorCitjbGFzcyBVc2FnZSB7CisgIHZvaWQgYmFyKCkgeworICAgIG5ldyBUZXN0PEludGVnZXI+KCkuZm9vKDEpOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3B1c2hEb3duL0Rpc2FncmVlVHlwZVBhcmFtZXRlcl9hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3B1c2hEb3duL0Rpc2FncmVlVHlwZVBhcmFtZXRlcl9hZnRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIyODc5OTUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcHVzaERvd24vRGlzYWdyZWVUeXBlUGFyYW1ldGVyX2FmdGVyLmphdmEKQEAgLTAsMCArMSwxMyBAQAorY2xhc3MgVGVzdCA8VD4geworfQorCitjbGFzcyBJIGV4dGVuZHMgVGVzdDxTdHJpbmc+eworICAgIHZvaWQgZm9vKFN0cmluZyB0KSB7CisgICAgfQorfQorCitjbGFzcyBVc2FnZSB7CisgIHZvaWQgYmFyKCkgeworICAgIG5ldyBUZXN0PEludGVnZXI+KCkuZm9vKDEpOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3B1c2hEb3duL0V4dGVuc2lvbk1ldGhvZFRvQ2xhc3MuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9wdXNoRG93bi9FeHRlbnNpb25NZXRob2RUb0NsYXNzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmIwNzRjYgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9wdXNoRG93bi9FeHRlbnNpb25NZXRob2RUb0NsYXNzLmphdmEKQEAgLTAsMCArMSw4IEBACitpbnRlcmZhY2UgQmFzZSB7CisgICAgdm9pZCBmb288Y2FyZXQ+KCkgZGVmYXVsdCB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSGkgdGhlcmUuIik7CisgICAgfQorfQorCitjbGFzcyBDIGltcGxlbWVudHMgQmFzZSB7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3B1c2hEb3duL0V4dGVuc2lvbk1ldGhvZFRvQ2xhc3NfYWZ0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9wdXNoRG93bi9FeHRlbnNpb25NZXRob2RUb0NsYXNzX2FmdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2E1ZDA2ZgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9wdXNoRG93bi9FeHRlbnNpb25NZXRob2RUb0NsYXNzX2FmdGVyLmphdmEKQEAgLTAsMCArMSw4IEBACitpbnRlcmZhY2UgQmFzZSB7Cit9CisKK2NsYXNzIEMgaW1wbGVtZW50cyBCYXNlIHsKKyAgICBwdWJsaWMgdm9pZCBmb28oKSB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSGkgdGhlcmUuIik7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9wdXNoRG93bi9FeHRlbnNpb25NZXRob2RUb0ludGVyZmFjZS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3B1c2hEb3duL0V4dGVuc2lvbk1ldGhvZFRvSW50ZXJmYWNlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2JmOTRlYQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9wdXNoRG93bi9FeHRlbnNpb25NZXRob2RUb0ludGVyZmFjZS5qYXZhCkBAIC0wLDAgKzEsOCBAQAoraW50ZXJmYWNlIEJhc2UgeworICAgIHZvaWQgZm9vPGNhcmV0PigpIGRlZmF1bHQgeworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkhpIHRoZXJlLiIpOworICAgIH0KK30KKworaW50ZXJmYWNlIEkyIGV4dGVuZHMgQmFzZSB7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3B1c2hEb3duL0V4dGVuc2lvbk1ldGhvZFRvSW50ZXJmYWNlX2FmdGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcHVzaERvd24vRXh0ZW5zaW9uTWV0aG9kVG9JbnRlcmZhY2VfYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZDVmOWI3Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3B1c2hEb3duL0V4dGVuc2lvbk1ldGhvZFRvSW50ZXJmYWNlX2FmdGVyLmphdmEKQEAgLTAsMCArMSw4IEBACitpbnRlcmZhY2UgQmFzZSB7Cit9CisKK2ludGVyZmFjZSBJMiBleHRlbmRzIEJhc2UgeworICAgIHZvaWQgZm9vKCkgZGVmYXVsdCB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSGkgdGhlcmUuIik7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9wdXNoRG93bi9GaWVsZEFuZFJlZmVyZW5jZWRDbGFzcy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3B1c2hEb3duL0ZpZWxkQW5kUmVmZXJlbmNlZENsYXNzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGViNGJiMwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9wdXNoRG93bi9GaWVsZEFuZFJlZmVyZW5jZWRDbGFzcy5qYXZhCkBAIC0wLDAgKzEsMTMgQEAKK3B1YmxpYyBjbGFzcyBUZXN0IHsKKyAgY2xhc3MgPGNhcmV0PkMgeworICAgIEJPT0w7CisgIH0KKworICBSdW5uYWJsZSBmaWVsZFRvTW92ZSA9IG5ldyBSdW5uYWJsZSgpeworICAgIHB1YmxpYyB2b2lkIHJ1bigpeworICAgICAgIGlmIChuZXcgQygpLkJPT0wpe30KKyAgICB9CisgIH07Cit9CisKK2NsYXNzIEIgZXh0ZW5kcyBUZXN0e30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcHVzaERvd24vRmllbGRBbmRSZWZlcmVuY2VkQ2xhc3NfYWZ0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9wdXNoRG93bi9GaWVsZEFuZFJlZmVyZW5jZWRDbGFzc19hZnRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZjMzkzNTMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcHVzaERvd24vRmllbGRBbmRSZWZlcmVuY2VkQ2xhc3NfYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDE1IEBACitwdWJsaWMgY2xhc3MgVGVzdCB7CisKK30KKworY2xhc3MgQiBleHRlbmRzIFRlc3R7CisgICAgUnVubmFibGUgZmllbGRUb01vdmUgPSBuZXcgUnVubmFibGUoKXsKKyAgICAgIHB1YmxpYyB2b2lkIHJ1bigpeworICAgICAgICAgaWYgKG5ldyBDKCkuQk9PTCl7fQorICAgICAgfQorICAgIH07CisKKyAgICBjbGFzcyBDIHsKKyAgICAgIEJPT0w7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9wdXNoRG93bi9GaWVsZEFuZFN0YXRpY1JlZmVyZW5jZWRDbGFzcy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3B1c2hEb3duL0ZpZWxkQW5kU3RhdGljUmVmZXJlbmNlZENsYXNzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWQzYjM3YwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9wdXNoRG93bi9GaWVsZEFuZFN0YXRpY1JlZmVyZW5jZWRDbGFzcy5qYXZhCkBAIC0wLDAgKzEsMTMgQEAKK3B1YmxpYyBjbGFzcyBUZXN0IHsKKyAgc3RhdGljIGNsYXNzIDxjYXJldD5DIHsKKyAgICBzdGF0aWMgQk9PTDsKKyAgfQorCisgIFJ1bm5hYmxlIGZpZWxkVG9Nb3ZlID0gbmV3IFJ1bm5hYmxlKCl7CisgICAgcHVibGljIHZvaWQgcnVuKCl7CisgICAgICAgaWYgKEMuQk9PTCl7fQorICAgIH0KKyAgfTsKK30KKworY2xhc3MgQiBleHRlbmRzIFRlc3R7fQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9wdXNoRG93bi9GaWVsZEFuZFN0YXRpY1JlZmVyZW5jZWRDbGFzc19hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3B1c2hEb3duL0ZpZWxkQW5kU3RhdGljUmVmZXJlbmNlZENsYXNzX2FmdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjJiNThjMgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9wdXNoRG93bi9GaWVsZEFuZFN0YXRpY1JlZmVyZW5jZWRDbGFzc19hZnRlci5qYXZhCkBAIC0wLDAgKzEsMTUgQEAKK3B1YmxpYyBjbGFzcyBUZXN0IHsKKworfQorCitjbGFzcyBCIGV4dGVuZHMgVGVzdHsKKyAgICBSdW5uYWJsZSBmaWVsZFRvTW92ZSA9IG5ldyBSdW5uYWJsZSgpeworICAgICAgcHVibGljIHZvaWQgcnVuKCl7CisgICAgICAgICBpZiAoQy5CT09MKXt9CisgICAgICB9CisgICAgfTsKKworICAgIHN0YXRpYyBjbGFzcyBDIHsKKyAgICAgIHN0YXRpYyBCT09MOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcHVzaERvd24vRmllbGRUeXBlUGFyYW1ldGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcHVzaERvd24vRmllbGRUeXBlUGFyYW1ldGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmFjNGIxNAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9wdXNoRG93bi9GaWVsZFR5cGVQYXJhbWV0ZXIuamF2YQpAQCAtMCwwICsxLDYgQEAKK2NsYXNzIFRlc3QgPFQ+IHsKKyAgIFQgPGNhcmV0PnQ7CisgICBUIHR0OworfQorCitjbGFzcyBJIGV4dGVuZHMgVGVzdDxTdHJpbmc+e30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcHVzaERvd24vRmllbGRUeXBlUGFyYW1ldGVyX2FmdGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcHVzaERvd24vRmllbGRUeXBlUGFyYW1ldGVyX2FmdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWY5YTU3YQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9wdXNoRG93bi9GaWVsZFR5cGVQYXJhbWV0ZXJfYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDcgQEAKK2NsYXNzIFRlc3QgPFQ+IHsKKyAgICBUIHR0OworfQorCitjbGFzcyBJIGV4dGVuZHMgVGVzdDxTdHJpbmc+eworICAgIFN0cmluZyB0OworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9wdXNoRG93bi9NZXRob2RGcm9tSW50ZXJmYWNlVG9BYnN0cmFjdENsYXNzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcHVzaERvd24vTWV0aG9kRnJvbUludGVyZmFjZVRvQWJzdHJhY3RDbGFzcy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ4NjAzODMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcHVzaERvd24vTWV0aG9kRnJvbUludGVyZmFjZVRvQWJzdHJhY3RDbGFzcy5qYXZhCkBAIC0wLDAgKzEsNyBAQAorYWJzdHJhY3QgY2xhc3MgU3RyYWlnaHRMaW5lIGltcGxlbWVudHMgSW5saW5lIHsKK30KKworaW50ZXJmYWNlIElubGluZSB7CisKKyAgdm9pZCBnPGNhcmV0Pm8oKTsgLy8gaW5saW5lIHRoaXMgbWV0aG9kCit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3B1c2hEb3duL01ldGhvZEZyb21JbnRlcmZhY2VUb0Fic3RyYWN0Q2xhc3NfYWZ0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9wdXNoRG93bi9NZXRob2RGcm9tSW50ZXJmYWNlVG9BYnN0cmFjdENsYXNzX2FmdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDdhYTk4ZgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9wdXNoRG93bi9NZXRob2RGcm9tSW50ZXJmYWNlVG9BYnN0cmFjdENsYXNzX2FmdGVyLmphdmEKQEAgLTAsMCArMSw3IEBACithYnN0cmFjdCBjbGFzcyBTdHJhaWdodExpbmUgaW1wbGVtZW50cyBJbmxpbmUgeworICAgIHB1YmxpYyBhYnN0cmFjdCB2b2lkIGdvKCk7IC8vIGlubGluZSB0aGlzIG1ldGhvZAorfQorCitpbnRlcmZhY2UgSW5saW5lIHsKKworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9wdXNoRG93bi9NZXRob2RUeXBlUGFyYW1ldGVyc0xpc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9wdXNoRG93bi9NZXRob2RUeXBlUGFyYW1ldGVyc0xpc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kY2ZhNjY4Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3B1c2hEb3duL01ldGhvZFR5cGVQYXJhbWV0ZXJzTGlzdC5qYXZhCkBAIC0wLDAgKzEsNiBAQAorcHVibGljIGNsYXNzIFRlc3Q8VD4geworICA8UyBleHRlbmRzIFQ+IHZvaWQgZjxjYXJldD5vbygpe30KK30KKworY2xhc3MgQiBleHRlbmRzIFRlc3Q8VGhyb3dhYmxlPnsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcHVzaERvd24vTWV0aG9kVHlwZVBhcmFtZXRlcnNMaXN0X2FmdGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcHVzaERvd24vTWV0aG9kVHlwZVBhcmFtZXRlcnNMaXN0X2FmdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjk5NWZjYQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9wdXNoRG93bi9NZXRob2RUeXBlUGFyYW1ldGVyc0xpc3RfYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDYgQEAKK3B1YmxpYyBjbGFzcyBUZXN0PFQ+IHsKK30KKworY2xhc3MgQiBleHRlbmRzIFRlc3Q8VGhyb3dhYmxlPnsKKyAgICA8UyBleHRlbmRzIFRocm93YWJsZT4gdm9pZCBmb28oKXt9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3B1c2hEb3duL092ZXJyaWRpbmdNZXRob2RXaXRoU3Vic3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9wdXNoRG93bi9PdmVycmlkaW5nTWV0aG9kV2l0aFN1YnN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzI5MjE1NQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9wdXNoRG93bi9PdmVycmlkaW5nTWV0aG9kV2l0aFN1YnN0LmphdmEKQEAgLTAsMCArMSwxMyBAQAorYWJzdHJhY3QgY2xhc3MgQmFzZVRhc2s8VCwgUyBleHRlbmRzIEJhc2VUYXNrPFQsIFM+PiB7CisgIHB1YmxpYyBhYnN0cmFjdCBTIG1ha2U8Y2FyZXQ+VGFzayhpbnQgZGVwdGgsIFBhcmFsbGVsU3RyZWFtPFQ+IGNvbGwpOworfQorCisKK2NsYXNzIEZvckVhY2hUYXNrPFQ+IGV4dGVuZHMgQmFzZVRhc2s8VCwgRm9yRWFjaFRhc2s8VD4+IHsKKyAgcHVibGljIEZvckVhY2hUYXNrPFQ+IG1ha2VUYXNrKGludCBkZXB0aCwgUGFyYWxsZWxTdHJlYW08VD4gY29sbCkgeworICAgIHJldHVybiBuZXcgRm9yRWFjaFRhc2s8VD4oKTsKKyAgfQorfQorCitjbGFzcyBQYXJhbGxlbFN0cmVhbTxUPiB7Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcHVzaERvd24vT3ZlcnJpZGluZ01ldGhvZFdpdGhTdWJzdF9hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3B1c2hEb3duL092ZXJyaWRpbmdNZXRob2RXaXRoU3Vic3RfYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YTM0ZmJhCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3B1c2hEb3duL092ZXJyaWRpbmdNZXRob2RXaXRoU3Vic3RfYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDEyIEBACithYnN0cmFjdCBjbGFzcyBCYXNlVGFzazxULCBTIGV4dGVuZHMgQmFzZVRhc2s8VCwgUz4+IHsKK30KKworCitjbGFzcyBGb3JFYWNoVGFzazxUPiBleHRlbmRzIEJhc2VUYXNrPFQsIEZvckVhY2hUYXNrPFQ+PiB7CisgIHB1YmxpYyBGb3JFYWNoVGFzazxUPiBtYWtlVGFzayhpbnQgZGVwdGgsIFBhcmFsbGVsU3RyZWFtPFQ+IGNvbGwpIHsKKyAgICByZXR1cm4gbmV3IEZvckVhY2hUYXNrPFQ+KCk7CisgIH0KK30KKworY2xhc3MgUGFyYWxsZWxTdHJlYW08VD4geworfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3B1c2hEb3duL1ByZXNlcnZlVHlwZUFyZ3MuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9wdXNoRG93bi9QcmVzZXJ2ZVR5cGVBcmdzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGJmNDYxMAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9wdXNoRG93bi9QcmVzZXJ2ZVR5cGVBcmdzLmphdmEKQEAgLTAsMCArMSw2IEBACitpbXBvcnQgamF2YS51dGlsLio7CithYnN0cmFjdCBjbGFzcyBUZXN0IGltcGxlbWVudHMgTGlzdDxTdHJpbmc+IHsKK30KKworYWJzdHJhY3QgY2xhc3MgQiBleHRlbmRzIFRlc3QgeworfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3B1c2hEb3duL1ByZXNlcnZlVHlwZUFyZ3NfYWZ0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9wdXNoRG93bi9QcmVzZXJ2ZVR5cGVBcmdzX2FmdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWUyNmRkMwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9wdXNoRG93bi9QcmVzZXJ2ZVR5cGVBcmdzX2FmdGVyLmphdmEKQEAgLTAsMCArMSw2IEBACitpbXBvcnQgamF2YS51dGlsLio7CithYnN0cmFjdCBjbGFzcyBUZXN0IHsKK30KKworYWJzdHJhY3QgY2xhc3MgQiBleHRlbmRzIFRlc3QgaW1wbGVtZW50cyBMaXN0PFN0cmluZz4geworfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3B1c2hEb3duL1NhbWVDbGFzc0ludGVyZmFjZS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3B1c2hEb3duL1NhbWVDbGFzc0ludGVyZmFjZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVmNWE1Y2EKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcHVzaERvd24vU2FtZUNsYXNzSW50ZXJmYWNlLmphdmEKQEAgLTAsMCArMSwzIEBACitpbnRlcmZhY2UgSW50IHt9CitwdWJsaWMgY2xhc3MgVGVzdCBpbXBsZW1lbnRzIEluPGNhcmV0PnQge30KK2NsYXNzIEIgZXh0ZW5kcyBUZXN0IGltcGxlbWVudHMgSW50IHt9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3B1c2hEb3duL1NhbWVDbGFzc0ludGVyZmFjZV9hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3B1c2hEb3duL1NhbWVDbGFzc0ludGVyZmFjZV9hZnRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY1Mzc5YjcKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcHVzaERvd24vU2FtZUNsYXNzSW50ZXJmYWNlX2FmdGVyLmphdmEKQEAgLTAsMCArMSwzIEBACitpbnRlcmZhY2UgSW50IHt9CitwdWJsaWMgY2xhc3MgVGVzdCB7fQorY2xhc3MgQiBleHRlbmRzIFRlc3QgaW1wbGVtZW50cyBJbnQge30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcHVzaERvd24vU3Vic3RUeXBlQXJncy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3B1c2hEb3duL1N1YnN0VHlwZUFyZ3MuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YjkwYmE2Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3B1c2hEb3duL1N1YnN0VHlwZUFyZ3MuamF2YQpAQCAtMCwwICsxLDYgQEAKK2ltcG9ydCBqYXZhLnV0aWwuKjsKK2Fic3RyYWN0IGNsYXNzIFRlc3Q8VD4gaW1wbGVtZW50cyBMaXN0PFQ+IHsKK30KKworYWJzdHJhY3QgY2xhc3MgQiBleHRlbmRzIFRlc3Q8U3RyaW5nPiB7Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcHVzaERvd24vU3Vic3RUeXBlQXJnc19hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3B1c2hEb3duL1N1YnN0VHlwZUFyZ3NfYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZWU3OGI5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3B1c2hEb3duL1N1YnN0VHlwZUFyZ3NfYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDYgQEAKK2ltcG9ydCBqYXZhLnV0aWwuKjsKK2Fic3RyYWN0IGNsYXNzIFRlc3Q8VD4geworfQorCithYnN0cmFjdCBjbGFzcyBCIGV4dGVuZHMgVGVzdDxTdHJpbmc+IGltcGxlbWVudHMgTGlzdDxTdHJpbmc+IHsKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9wdXNoRG93bi9TdXBlck92ZXJIaWVyYXJjaHkuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9wdXNoRG93bi9TdXBlck92ZXJIaWVyYXJjaHkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ODA3MjVjCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3B1c2hEb3duL1N1cGVyT3ZlckhpZXJhcmNoeS5qYXZhCkBAIC0wLDAgKzEsMjUgQEAKK2NsYXNzIEEgeworICB2b2lkIGsoKSB7CisgICAgU3lzdGVtLm91dC5wcmludGxuKDIzKTsKKyAgfQorfQorCitjbGFzcyBCIGV4dGVuZHMgQSB7CisgIHZvaWQgaygpIHsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oNDIpOworICB9CisKKyAgdm9pZCA8Y2FyZXQ+bSgpIHsKKyAgICBuZXcgQygpIHsKKyAgICAgIHZvaWQgZm9vKCkgeworICAgICAgICBzdXBlci5rKCk7CisgICAgICB9CisgICAgfTsKKyAgfQorfQorCitwdWJsaWMgY2xhc3MgQyBleHRlbmRzIEIgeworICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisgICAgbmV3IEMoKS5tKCk7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcHVzaERvd24vU3VwZXJPdmVySGllcmFyY2h5Q29uZmxpY3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9wdXNoRG93bi9TdXBlck92ZXJIaWVyYXJjaHlDb25mbGljdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgzZTRiMDQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcHVzaERvd24vU3VwZXJPdmVySGllcmFyY2h5Q29uZmxpY3QuamF2YQpAQCAtMCwwICsxLDIxIEBACitjbGFzcyBBIHsKKyAgdm9pZCBrKCkgeworICAgIFN5c3RlbS5vdXQucHJpbnRsbigyMyk7CisgIH0KK30KKworY2xhc3MgQiBleHRlbmRzIEEgeworICB2b2lkIGsoKSB7CisgICAgU3lzdGVtLm91dC5wcmludGxuKDQyKTsKKyAgfQorCisgIHZvaWQgPGNhcmV0Pm0oKSB7CisgICAgc3VwZXIuaygpOworICB9Cit9CisKK3B1YmxpYyBjbGFzcyBDIGV4dGVuZHMgQiB7CisgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKyAgICBuZXcgQygpLm0oKTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9wdXNoRG93bi9TdXBlck92ZXJIaWVyYXJjaHlDb25mbGljdF9hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3B1c2hEb3duL1N1cGVyT3ZlckhpZXJhcmNoeUNvbmZsaWN0X2FmdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDQwODllYwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9wdXNoRG93bi9TdXBlck92ZXJIaWVyYXJjaHlDb25mbGljdF9hZnRlci5qYXZhCkBAIC0wLDAgKzEsMjIgQEAKK2NsYXNzIEEgeworICB2b2lkIGsoKSB7CisgICAgU3lzdGVtLm91dC5wcmludGxuKDIzKTsKKyAgfQorfQorCitjbGFzcyBCIGV4dGVuZHMgQSB7CisgIHZvaWQgaygpIHsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oNDIpOworICB9CisKK30KKworcHVibGljIGNsYXNzIEMgZXh0ZW5kcyBCIHsKKyAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworICAgIG5ldyBDKCkubSgpOworICB9CisKKyAgICB2b2lkIG0oKSB7CisgICAgICBzdXBlci5rKCk7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9wdXNoRG93bi9TdXBlck92ZXJIaWVyYXJjaHlfYWZ0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9wdXNoRG93bi9TdXBlck92ZXJIaWVyYXJjaHlfYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNzFjOTU4Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3B1c2hEb3duL1N1cGVyT3ZlckhpZXJhcmNoeV9hZnRlci5qYXZhCkBAIC0wLDAgKzEsMjYgQEAKK2NsYXNzIEEgeworICB2b2lkIGsoKSB7CisgICAgU3lzdGVtLm91dC5wcmludGxuKDIzKTsKKyAgfQorfQorCitjbGFzcyBCIGV4dGVuZHMgQSB7CisgIHZvaWQgaygpIHsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oNDIpOworICB9CisKK30KKworcHVibGljIGNsYXNzIEMgZXh0ZW5kcyBCIHsKKyAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworICAgIG5ldyBDKCkubSgpOworICB9CisKKyAgICB2b2lkIG0oKSB7CisgICAgICBuZXcgQygpIHsKKyAgICAgICAgdm9pZCBmb28oKSB7CisgICAgICAgICAgc3VwZXIuaygpOworICAgICAgICB9CisgICAgICB9OworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcHVzaERvd24vVGhpc1JlZkluQW5vbnltb3VzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcHVzaERvd24vVGhpc1JlZkluQW5vbnltb3VzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODg2ZTE2OQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9wdXNoRG93bi9UaGlzUmVmSW5Bbm9ueW1vdXMuamF2YQpAQCAtMCwwICsxLDIwIEBACitjbGFzcyBBIHsKKyAgdm9pZCA8Y2FyZXQ+Zm9vKCkgeworICAgIG5ldyBSdW5uYWJsZSgpIHsKKyAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKKyAgICAgICAgQS50aGlzLnRvU3RyaW5nKCk7CisgICAgICB9CisgICAgfQorICB9CisKKyAgdm9pZCBsZWF2ZUl0KCkgeworICAgIG5ldyBSdW5uYWJsZSgpIHsKKyAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKKyAgICAgICAgQS50aGlzLnRvU3RyaW5nKCk7CisgICAgICB9CisgICAgfQorICB9Cit9CisKK2NsYXNzIEIgZXh0ZW5kcyBBIHsKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9wdXNoRG93bi9UaGlzUmVmSW5Bbm9ueW1vdXNfYWZ0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9wdXNoRG93bi9UaGlzUmVmSW5Bbm9ueW1vdXNfYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZWMzNmUwCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3B1c2hEb3duL1RoaXNSZWZJbkFub255bW91c19hZnRlci5qYXZhCkBAIC0wLDAgKzEsMjAgQEAKK2NsYXNzIEEgeworCisgICAgdm9pZCBsZWF2ZUl0KCkgeworICAgIG5ldyBSdW5uYWJsZSgpIHsKKyAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKKyAgICAgICAgQS50aGlzLnRvU3RyaW5nKCk7CisgICAgICB9CisgICAgfQorICB9Cit9CisKK2NsYXNzIEIgZXh0ZW5kcyBBIHsKKyAgICB2b2lkIGZvbygpIHsKKyAgICAgIG5ldyBSdW5uYWJsZSgpIHsKKyAgICAgICAgcHVibGljIHZvaWQgcnVuKCkgeworICAgICAgICAgIEIudGhpcy50b1N0cmluZygpOworICAgICAgICB9CisgICAgICB9CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3B1c2hEb3duL1R5cGVQYXJhbWV0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9wdXNoRG93bi9UeXBlUGFyYW1ldGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzc5M2UyZQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9wdXNoRG93bi9UeXBlUGFyYW1ldGVyLmphdmEKQEAgLTAsMCArMSw3IEBACitjbGFzcyBUZXN0IDxUPiB7CisgICB2b2lkIDxjYXJldD5mb28oVCB0KSB7CisKKyAgIH0KK30KKworY2xhc3MgSSBleHRlbmRzIFRlc3Q8U3RyaW5nPnt9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3B1c2hEb3duL1R5cGVQYXJhbWV0ZXJFcmFzdXJlLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcHVzaERvd24vVHlwZVBhcmFtZXRlckVyYXN1cmUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMjdkYjk4Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3B1c2hEb3duL1R5cGVQYXJhbWV0ZXJFcmFzdXJlLmphdmEKQEAgLTAsMCArMSw1IEBACitwdWJsaWMgY2xhc3MgUGFyZW50PFQ+IHsKKyAgdm9pZCA8Y2FyZXQ+Zm9vKFQgdCl7fQorfQorCitjbGFzcyBDaGlsZCBleHRlbmRzIFBhcmVudCB7fQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9wdXNoRG93bi9UeXBlUGFyYW1ldGVyRXJhc3VyZV9hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3B1c2hEb3duL1R5cGVQYXJhbWV0ZXJFcmFzdXJlX2FmdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWEwMGVhZgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9wdXNoRG93bi9UeXBlUGFyYW1ldGVyRXJhc3VyZV9hZnRlci5qYXZhCkBAIC0wLDAgKzEsNiBAQAorcHVibGljIGNsYXNzIFBhcmVudDxUPiB7Cit9CisKK2NsYXNzIENoaWxkIGV4dGVuZHMgUGFyZW50IHsKKyAgICB2b2lkIGZvbyhPYmplY3QgdCl7fQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9wdXNoRG93bi9UeXBlUGFyYW1ldGVyX2FmdGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcHVzaERvd24vVHlwZVBhcmFtZXRlcl9hZnRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVlYjVjZDYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcHVzaERvd24vVHlwZVBhcmFtZXRlcl9hZnRlci5qYXZhCkBAIC0wLDAgKzEsOCBAQAorY2xhc3MgVGVzdCA8VD4geworfQorCitjbGFzcyBJIGV4dGVuZHMgVGVzdDxTdHJpbmc+eworICAgIHZvaWQgZm9vKFN0cmluZyB0KSB7CisgCisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9wdXNoRG93bi9mcm9tSW50ZXJmYWNlL2FmdGVyL2EvSS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3B1c2hEb3duL2Zyb21JbnRlcmZhY2UvYWZ0ZXIvYS9JLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWJlNGE0OGUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcHVzaERvd24vZnJvbUludGVyZmFjZS9hZnRlci9hL0kuamF2YQpAQCAtMCwwICsxLDMgQEAKK3BhY2thZ2UgYTsKK3B1YmxpYyBpbnRlcmZhY2UgSSB7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3B1c2hEb3duL2Zyb21JbnRlcmZhY2UvYWZ0ZXIvYS9JMS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3B1c2hEb3duL2Zyb21JbnRlcmZhY2UvYWZ0ZXIvYS9JMS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE0MWVmMTgKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcHVzaERvd24vZnJvbUludGVyZmFjZS9hZnRlci9hL0kxLmphdmEKQEAgLTAsMCArMSw0IEBACitwYWNrYWdlIGE7CitwdWJsaWMgaW50ZXJmYWNlIEkxIGV4dGVuZHMgSSB7CisgICAgdm9pZCBmb28oKTsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcHVzaERvd24vZnJvbUludGVyZmFjZS9hZnRlci9iL0IuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9wdXNoRG93bi9mcm9tSW50ZXJmYWNlL2FmdGVyL2IvQi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQxYTM1ZDUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcHVzaERvd24vZnJvbUludGVyZmFjZS9hZnRlci9iL0IuamF2YQpAQCAtMCwwICsxLDcgQEAKK3BhY2thZ2UgYjsKK2ltcG9ydCBhLio7CitjbGFzcyBCIHsKKyAgdm9pZCBmKEkxIGkxKSB7CisgICAgaTEuZm9vKCk7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcHVzaERvd24vZnJvbUludGVyZmFjZS9iZWZvcmUvYS9JLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcHVzaERvd24vZnJvbUludGVyZmFjZS9iZWZvcmUvYS9JLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGVmOTgzZQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9wdXNoRG93bi9mcm9tSW50ZXJmYWNlL2JlZm9yZS9hL0kuamF2YQpAQCAtMCwwICsxLDQgQEAKK3BhY2thZ2UgYTsKK3B1YmxpYyBpbnRlcmZhY2UgSSB7CisgIHZvaWQgZm9vKCk7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3B1c2hEb3duL2Zyb21JbnRlcmZhY2UvYmVmb3JlL2EvSTEuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9wdXNoRG93bi9mcm9tSW50ZXJmYWNlL2JlZm9yZS9hL0kxLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODdjNzBlNgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9wdXNoRG93bi9mcm9tSW50ZXJmYWNlL2JlZm9yZS9hL0kxLmphdmEKQEAgLTAsMCArMSwyIEBACitwYWNrYWdlIGE7CitwdWJsaWMgaW50ZXJmYWNlIEkxIGV4dGVuZHMgSSB7fQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9wdXNoRG93bi9mcm9tSW50ZXJmYWNlL2JlZm9yZS9iL0IuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9wdXNoRG93bi9mcm9tSW50ZXJmYWNlL2JlZm9yZS9iL0IuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMWEzNWQ1Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3B1c2hEb3duL2Zyb21JbnRlcmZhY2UvYmVmb3JlL2IvQi5qYXZhCkBAIC0wLDAgKzEsNyBAQAorcGFja2FnZSBiOworaW1wb3J0IGEuKjsKK2NsYXNzIEIgeworICB2b2lkIGYoSTEgaTEpIHsKKyAgICBpMS5mb28oKTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9wdXNoRG93bi9yZXVzZU92ZXJyaWRlTWV0aG9kL2FmdGVyL2EvQS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3B1c2hEb3duL3JldXNlT3ZlcnJpZGVNZXRob2QvYWZ0ZXIvYS9BLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDE4YTdjZAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9wdXNoRG93bi9yZXVzZU92ZXJyaWRlTWV0aG9kL2FmdGVyL2EvQS5qYXZhCkBAIC0wLDAgKzEsNCBAQAorcGFja2FnZSBhOworcHVibGljIGNsYXNzIEEgeworICAgIHByb3RlY3RlZCB2b2lkIGJhcigpe30KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcHVzaERvd24vcmV1c2VPdmVycmlkZU1ldGhvZC9hZnRlci9iL0IuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9wdXNoRG93bi9yZXVzZU92ZXJyaWRlTWV0aG9kL2FmdGVyL2IvQi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA5MTJmODYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcHVzaERvd24vcmV1c2VPdmVycmlkZU1ldGhvZC9hZnRlci9iL0IuamF2YQpAQCAtMCwwICsxLDEwIEBACitwYWNrYWdlIGI7CitpbXBvcnQgYS5BOworCitwdWJsaWMgY2xhc3MgQiBleHRlbmRzIEEgeworICBwcm90ZWN0ZWQgdm9pZCBiYXIoKXt9CisKKyAgICBwdWJsaWMgdm9pZCBmb28oKXsKKyAgICAgIGJhcigpOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcHVzaERvd24vcmV1c2VPdmVycmlkZU1ldGhvZC9iZWZvcmUvYS9BLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcHVzaERvd24vcmV1c2VPdmVycmlkZU1ldGhvZC9iZWZvcmUvYS9BLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGE0MTAyMwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9wdXNoRG93bi9yZXVzZU92ZXJyaWRlTWV0aG9kL2JlZm9yZS9hL0EuamF2YQpAQCAtMCwwICsxLDcgQEAKK3BhY2thZ2UgYTsKK3B1YmxpYyBjbGFzcyBBIHsKKyAgcHVibGljIHZvaWQgZm9vKCl7CisgICAgYmFyKCk7CisgIH0KKyAgcHJvdGVjdGVkIHZvaWQgYmFyKCl7fQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9wdXNoRG93bi9yZXVzZU92ZXJyaWRlTWV0aG9kL2JlZm9yZS9iL0IuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9wdXNoRG93bi9yZXVzZU92ZXJyaWRlTWV0aG9kL2JlZm9yZS9iL0IuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNTY0ODY1Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3B1c2hEb3duL3JldXNlT3ZlcnJpZGVNZXRob2QvYmVmb3JlL2IvQi5qYXZhCkBAIC0wLDAgKzEsNiBAQAorcGFja2FnZSBiOworaW1wb3J0IGEuQTsKKworcHVibGljIGNsYXNzIEIgZXh0ZW5kcyBBIHsKKyAgcHJvdGVjdGVkIHZvaWQgYmFyKCl7fQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9wdXNoRG93bi9zdGF0aWNJbXBvcnRPZlB1c2hlZE1ldGhvZC9hZnRlci9hL0EuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9wdXNoRG93bi9zdGF0aWNJbXBvcnRPZlB1c2hlZE1ldGhvZC9hZnRlci9hL0EuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZTg0MzExCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3B1c2hEb3duL3N0YXRpY0ltcG9ydE9mUHVzaGVkTWV0aG9kL2FmdGVyL2EvQS5qYXZhCkBAIC0wLDAgKzEsMyBAQAorcGFja2FnZSBhOworcHVibGljIGNsYXNzIEEgeworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9wdXNoRG93bi9zdGF0aWNJbXBvcnRPZlB1c2hlZE1ldGhvZC9hZnRlci9iL0IuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9wdXNoRG93bi9zdGF0aWNJbXBvcnRPZlB1c2hlZE1ldGhvZC9hZnRlci9iL0IuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZjI0NmQ2Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3B1c2hEb3duL3N0YXRpY0ltcG9ydE9mUHVzaGVkTWV0aG9kL2FmdGVyL2IvQi5qYXZhCkBAIC0wLDAgKzEsNyBAQAorcGFja2FnZSBiOworaW1wb3J0IGEuKjsKKworcHVibGljIGNsYXNzIEIgZXh0ZW5kcyBBIHsKKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgZm9vKCl7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9wdXNoRG93bi9zdGF0aWNJbXBvcnRPZlB1c2hlZE1ldGhvZC9hZnRlci91L1UuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9wdXNoRG93bi9zdGF0aWNJbXBvcnRPZlB1c2hlZE1ldGhvZC9hZnRlci91L1UuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MzAyNDUzCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3B1c2hEb3duL3N0YXRpY0ltcG9ydE9mUHVzaGVkTWV0aG9kL2FmdGVyL3UvVS5qYXZhCkBAIC0wLDAgKzEsNyBAQAorcGFja2FnZSB1OworaW1wb3J0IHN0YXRpYyBiLkIuZm9vOworcHVibGljIGNsYXNzIFUgeworICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisgICAgZm9vKCk7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcHVzaERvd24vc3RhdGljSW1wb3J0T2ZQdXNoZWRNZXRob2QvYmVmb3JlL2EvQS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3B1c2hEb3duL3N0YXRpY0ltcG9ydE9mUHVzaGVkTWV0aG9kL2JlZm9yZS9hL0EuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kODAxMzAwCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3B1c2hEb3duL3N0YXRpY0ltcG9ydE9mUHVzaGVkTWV0aG9kL2JlZm9yZS9hL0EuamF2YQpAQCAtMCwwICsxLDUgQEAKK3BhY2thZ2UgYTsKK3B1YmxpYyBjbGFzcyBBIHsKKyAgcHVibGljIHN0YXRpYyB2b2lkIGZvbygpeworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3B1c2hEb3duL3N0YXRpY0ltcG9ydE9mUHVzaGVkTWV0aG9kL2JlZm9yZS9iL0IuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9wdXNoRG93bi9zdGF0aWNJbXBvcnRPZlB1c2hlZE1ldGhvZC9iZWZvcmUvYi9CLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2I1ZGFjNgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9wdXNoRG93bi9zdGF0aWNJbXBvcnRPZlB1c2hlZE1ldGhvZC9iZWZvcmUvYi9CLmphdmEKQEAgLTAsMCArMSw0IEBACitwYWNrYWdlIGI7CitpbXBvcnQgYS4qOworCitwdWJsaWMgY2xhc3MgQiBleHRlbmRzIEEge30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcHVzaERvd24vc3RhdGljSW1wb3J0T2ZQdXNoZWRNZXRob2QvYmVmb3JlL3UvVS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3B1c2hEb3duL3N0YXRpY0ltcG9ydE9mUHVzaGVkTWV0aG9kL2JlZm9yZS91L1UuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZTRhMDM0Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3B1c2hEb3duL3N0YXRpY0ltcG9ydE9mUHVzaGVkTWV0aG9kL2JlZm9yZS91L1UuamF2YQpAQCAtMCwwICsxLDcgQEAKK3BhY2thZ2UgdTsKK2ltcG9ydCBzdGF0aWMgYS5BLmZvbzsKK3B1YmxpYyBjbGFzcyBVIHsKKyAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworICAgIGZvbygpOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3B1c2hEb3duL3N0YXRpY0ltcG9ydHNJbnNpZGVQdXNoZWRNZXRob2QvYWZ0ZXIvYS9BLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcHVzaERvd24vc3RhdGljSW1wb3J0c0luc2lkZVB1c2hlZE1ldGhvZC9hZnRlci9hL0EuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYjVhZTlmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3B1c2hEb3duL3N0YXRpY0ltcG9ydHNJbnNpZGVQdXNoZWRNZXRob2QvYWZ0ZXIvYS9BLmphdmEKQEAgLTAsMCArMSw0IEBACitwYWNrYWdlIGE7CitpbXBvcnQgc3RhdGljIHUuVS5DOworcHVibGljIGNsYXNzIEEgeworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9wdXNoRG93bi9zdGF0aWNJbXBvcnRzSW5zaWRlUHVzaGVkTWV0aG9kL2FmdGVyL2IvQi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3B1c2hEb3duL3N0YXRpY0ltcG9ydHNJbnNpZGVQdXNoZWRNZXRob2QvYWZ0ZXIvYi9CLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjE1MmQyMQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9wdXNoRG93bi9zdGF0aWNJbXBvcnRzSW5zaWRlUHVzaGVkTWV0aG9kL2FmdGVyL2IvQi5qYXZhCkBAIC0wLDAgKzEsMTAgQEAKK3BhY2thZ2UgYjsKK2ltcG9ydCBhLio7CisKK2ltcG9ydCBzdGF0aWMgdS5VLkM7CisKK3B1YmxpYyBjbGFzcyBCIGV4dGVuZHMgQSB7CisgICAgcHVibGljIHN0YXRpYyB2b2lkIGZvbygpeworICAgICAgU3lzdGVtLm91dC5wcmludGxuKEMpOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcHVzaERvd24vc3RhdGljSW1wb3J0c0luc2lkZVB1c2hlZE1ldGhvZC9hZnRlci91L1UuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9wdXNoRG93bi9zdGF0aWNJbXBvcnRzSW5zaWRlUHVzaGVkTWV0aG9kL2FmdGVyL3UvVS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYwM2VkMTQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcHVzaERvd24vc3RhdGljSW1wb3J0c0luc2lkZVB1c2hlZE1ldGhvZC9hZnRlci91L1UuamF2YQpAQCAtMCwwICsxLDQgQEAKK3BhY2thZ2UgdTsKK3B1YmxpYyBjbGFzcyBVIHsKKyAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQyA9ICJDT05TVEFOVCI7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3B1c2hEb3duL3N0YXRpY0ltcG9ydHNJbnNpZGVQdXNoZWRNZXRob2QvYmVmb3JlL2EvQS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3B1c2hEb3duL3N0YXRpY0ltcG9ydHNJbnNpZGVQdXNoZWRNZXRob2QvYmVmb3JlL2EvQS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkwNWMxNTAKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcHVzaERvd24vc3RhdGljSW1wb3J0c0luc2lkZVB1c2hlZE1ldGhvZC9iZWZvcmUvYS9BLmphdmEKQEAgLTAsMCArMSw3IEBACitwYWNrYWdlIGE7CitpbXBvcnQgc3RhdGljIHUuVS5DOworcHVibGljIGNsYXNzIEEgeworICBwdWJsaWMgc3RhdGljIHZvaWQgZm9vKCl7CisgICAgU3lzdGVtLm91dC5wcmludGxuKEMpOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3B1c2hEb3duL3N0YXRpY0ltcG9ydHNJbnNpZGVQdXNoZWRNZXRob2QvYmVmb3JlL2IvQi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3B1c2hEb3duL3N0YXRpY0ltcG9ydHNJbnNpZGVQdXNoZWRNZXRob2QvYmVmb3JlL2IvQi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNiNWRhYzYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcHVzaERvd24vc3RhdGljSW1wb3J0c0luc2lkZVB1c2hlZE1ldGhvZC9iZWZvcmUvYi9CLmphdmEKQEAgLTAsMCArMSw0IEBACitwYWNrYWdlIGI7CitpbXBvcnQgYS4qOworCitwdWJsaWMgY2xhc3MgQiBleHRlbmRzIEEge30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcHVzaERvd24vc3RhdGljSW1wb3J0c0luc2lkZVB1c2hlZE1ldGhvZC9iZWZvcmUvdS9VLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcHVzaERvd24vc3RhdGljSW1wb3J0c0luc2lkZVB1c2hlZE1ldGhvZC9iZWZvcmUvdS9VLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjAzZWQxNAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9wdXNoRG93bi9zdGF0aWNJbXBvcnRzSW5zaWRlUHVzaGVkTWV0aG9kL2JlZm9yZS91L1UuamF2YQpAQCAtMCwwICsxLDQgQEAKK3BhY2thZ2UgdTsKK3B1YmxpYyBjbGFzcyBVIHsKKyAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQyA9ICJDT05TVEFOVCI7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3B1c2hEb3duL3VzYWdlc0luWG1sL2JlZm9yZS9hL0EuZm9ybSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9wdXNoRG93bi91c2FnZXNJblhtbC9iZWZvcmUvYS9BLmZvcm0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTQ5ZjBmZTcKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcHVzaERvd24vdXNhZ2VzSW5YbWwvYmVmb3JlL2EvQS5mb3JtCkBAIC0wLDAgKzEsMzEgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8Zm9ybSB4bWxucz0iaHR0cDovL3d3dy5pbnRlbGxpai5jb20vdWlkZXNpZ25lci9mb3JtLyIgdmVyc2lvbj0iMSIgYmluZC10by1jbGFzcz0iYS5BIj4KKyAgPGdyaWQgaWQ9IjI3ZGM2IiBsYXlvdXQtbWFuYWdlcj0iR3JpZExheW91dE1hbmFnZXIiIHJvdy1jb3VudD0iMiIgY29sdW1uLWNvdW50PSIyIiBzYW1lLXNpemUtaG9yaXpvbnRhbGx5PSJmYWxzZSIgc2FtZS1zaXplLXZlcnRpY2FsbHk9ImZhbHNlIiBoZ2FwPSItMSIgdmdhcD0iLTEiPgorICAgIDxtYXJnaW4gdG9wPSIwIiBsZWZ0PSIwIiBib3R0b209IjAiIHJpZ2h0PSIwIi8+CisgICAgPGNvbnN0cmFpbnRzPgorICAgICAgPHh5IHg9IjIwIiB5PSIyMCIgd2lkdGg9IjUwMCIgaGVpZ2h0PSI0MDAiLz4KKyAgICA8L2NvbnN0cmFpbnRzPgorICAgIDxwcm9wZXJ0aWVzLz4KKyAgICA8Ym9yZGVyIHR5cGU9Im5vbmUiLz4KKyAgICA8Y2hpbGRyZW4+CisgICAgICA8Y29tcG9uZW50IGlkPSIzZWMyZiIgY2xhc3M9ImphdmF4LnN3aW5nLkpUZXh0RmllbGQiIGJpbmRpbmc9InRleHRGaWVsZDEiIGRlZmF1bHQtYmluZGluZz0idHJ1ZSI+CisgICAgICAgIDxjb25zdHJhaW50cz4KKyAgICAgICAgICA8Z3JpZCByb3c9IjAiIGNvbHVtbj0iMCIgcm93LXNwYW49IjEiIGNvbC1zcGFuPSIxIiB2c2l6ZS1wb2xpY3k9IjAiIGhzaXplLXBvbGljeT0iNiIgYW5jaG9yPSI4IiBmaWxsPSIxIiBpbmRlbnQ9IjAiIHVzZS1wYXJlbnQtbGF5b3V0PSJmYWxzZSI+CisgICAgICAgICAgICA8cHJlZmVycmVkLXNpemUgd2lkdGg9IjE1MCIgaGVpZ2h0PSItMSIvPgorICAgICAgICAgIDwvZ3JpZD4KKyAgICAgICAgPC9jb25zdHJhaW50cz4KKyAgICAgICAgPHByb3BlcnRpZXMvPgorICAgICAgPC9jb21wb25lbnQ+CisgICAgICA8aHNwYWNlciBpZD0iMzhhMTYiPgorICAgICAgICA8Y29uc3RyYWludHM+CisgICAgICAgICAgPGdyaWQgcm93PSIwIiBjb2x1bW49IjEiIHJvdy1zcGFuPSIxIiBjb2wtc3Bhbj0iMSIgdnNpemUtcG9saWN5PSIxIiBoc2l6ZS1wb2xpY3k9IjYiIGFuY2hvcj0iMCIgZmlsbD0iMSIgaW5kZW50PSIwIiB1c2UtcGFyZW50LWxheW91dD0iZmFsc2UiLz4KKyAgICAgICAgPC9jb25zdHJhaW50cz4KKyAgICAgIDwvaHNwYWNlcj4KKyAgICAgIDx2c3BhY2VyIGlkPSJlOWNlMyI+CisgICAgICAgIDxjb25zdHJhaW50cz4KKyAgICAgICAgICA8Z3JpZCByb3c9IjEiIGNvbHVtbj0iMCIgcm93LXNwYW49IjEiIGNvbC1zcGFuPSIxIiB2c2l6ZS1wb2xpY3k9IjYiIGhzaXplLXBvbGljeT0iMSIgYW5jaG9yPSIwIiBmaWxsPSIyIiBpbmRlbnQ9IjAiIHVzZS1wYXJlbnQtbGF5b3V0PSJmYWxzZSIvPgorICAgICAgICA8L2NvbnN0cmFpbnRzPgorICAgICAgPC92c3BhY2VyPgorICAgIDwvY2hpbGRyZW4+CisgIDwvZ3JpZD4KKzwvZm9ybT4KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9wdXNoRG93bi91c2FnZXNJblhtbC9iZWZvcmUvYS9BLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcHVzaERvd24vdXNhZ2VzSW5YbWwvYmVmb3JlL2EvQS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM3NjIxMjcKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcHVzaERvd24vdXNhZ2VzSW5YbWwvYmVmb3JlL2EvQS5qYXZhCkBAIC0wLDAgKzEsNCBAQAorcGFja2FnZSBhOworcHVibGljIGNsYXNzIEEgeworICBwcml2YXRlIEpUZXh0RmllbGQgdGV4dEZpZWxkMTsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcHVzaERvd24vdXNhZ2VzSW5YbWwvYmVmb3JlL2IvQi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3B1c2hEb3duL3VzYWdlc0luWG1sL2JlZm9yZS9iL0IuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOTk4MzVhCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3B1c2hEb3duL3VzYWdlc0luWG1sL2JlZm9yZS9iL0IuamF2YQpAQCAtMCwwICsxLDQgQEAKK3BhY2thZ2UgYjsKKworaW1wb3J0IGEuKjsKK2NsYXNzIEIgZXh0ZW5kcyBBIHt9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3JlbW92ZW1pZGRsZW1hbi9pbnRlcmZhY2UvYWZ0ZXIvQS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3JlbW92ZW1pZGRsZW1hbi9pbnRlcmZhY2UvYWZ0ZXIvQS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM0ZWQ4ZDAKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVtb3ZlbWlkZGxlbWFuL2ludGVyZmFjZS9hZnRlci9BLmphdmEKQEAgLTAsMCArMSwzIEBACitjbGFzcyBBIHsKKyAgdm9pZCBmb28oKXt9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3JlbW92ZW1pZGRsZW1hbi9pbnRlcmZhY2UvYWZ0ZXIvRC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3JlbW92ZW1pZGRsZW1hbi9pbnRlcmZhY2UvYWZ0ZXIvRC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE3ZWJkOWIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVtb3ZlbWlkZGxlbWFuL2ludGVyZmFjZS9hZnRlci9ELmphdmEKQEAgLTAsMCArMSw1IEBACitjbGFzcyBEIHsKKyAgIHZvaWQgYmFyKEkgaSkgeworICAgICBpLmZvbygpOworICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9yZW1vdmVtaWRkbGVtYW4vaW50ZXJmYWNlL2FmdGVyL0kuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9yZW1vdmVtaWRkbGVtYW4vaW50ZXJmYWNlL2FmdGVyL0kuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOGQzZmU1Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3JlbW92ZW1pZGRsZW1hbi9pbnRlcmZhY2UvYWZ0ZXIvSS5qYXZhCkBAIC0wLDAgKzEsMyBAQAoraW50ZXJmYWNlIEkgeworICB2b2lkIGZvbygpOworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9yZW1vdmVtaWRkbGVtYW4vaW50ZXJmYWNlL2FmdGVyL1Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9yZW1vdmVtaWRkbGVtYW4vaW50ZXJmYWNlL2FmdGVyL1Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZDA0MDQzCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3JlbW92ZW1pZGRsZW1hbi9pbnRlcmZhY2UvYWZ0ZXIvVGVzdC5qYXZhCkBAIC0wLDAgKzEsNiBAQAorY2xhc3MgVGVzdCBpbXBsZW1lbnRzIEkgeworICBBIG15RmllbGQ7CisgIHZvaWQgZm9vKCkgeworICAgIG15RmllbGQuZm9vKCk7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVtb3ZlbWlkZGxlbWFuL2ludGVyZmFjZS9iZWZvcmUvQS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3JlbW92ZW1pZGRsZW1hbi9pbnRlcmZhY2UvYmVmb3JlL0EuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNGVkOGQwCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3JlbW92ZW1pZGRsZW1hbi9pbnRlcmZhY2UvYmVmb3JlL0EuamF2YQpAQCAtMCwwICsxLDMgQEAKK2NsYXNzIEEgeworICB2b2lkIGZvbygpe30KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVtb3ZlbWlkZGxlbWFuL2ludGVyZmFjZS9iZWZvcmUvRC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3JlbW92ZW1pZGRsZW1hbi9pbnRlcmZhY2UvYmVmb3JlL0QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xN2ViZDliCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3JlbW92ZW1pZGRsZW1hbi9pbnRlcmZhY2UvYmVmb3JlL0QuamF2YQpAQCAtMCwwICsxLDUgQEAKK2NsYXNzIEQgeworICAgdm9pZCBiYXIoSSBpKSB7CisgICAgIGkuZm9vKCk7CisgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3JlbW92ZW1pZGRsZW1hbi9pbnRlcmZhY2UvYmVmb3JlL0kuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9yZW1vdmVtaWRkbGVtYW4vaW50ZXJmYWNlL2JlZm9yZS9JLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZThkM2ZlNQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9yZW1vdmVtaWRkbGVtYW4vaW50ZXJmYWNlL2JlZm9yZS9JLmphdmEKQEAgLTAsMCArMSwzIEBACitpbnRlcmZhY2UgSSB7CisgIHZvaWQgZm9vKCk7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3JlbW92ZW1pZGRsZW1hbi9pbnRlcmZhY2UvYmVmb3JlL1Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9yZW1vdmVtaWRkbGVtYW4vaW50ZXJmYWNlL2JlZm9yZS9UZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2QwNDA0MwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9yZW1vdmVtaWRkbGVtYW4vaW50ZXJmYWNlL2JlZm9yZS9UZXN0LmphdmEKQEAgLTAsMCArMSw2IEBACitjbGFzcyBUZXN0IGltcGxlbWVudHMgSSB7CisgIEEgbXlGaWVsZDsKKyAgdm9pZCBmb28oKSB7CisgICAgbXlGaWVsZC5mb28oKTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9yZW1vdmVtaWRkbGVtYW4vaW50ZXJmYWNlRGVsZWdhdGlvbi9hZnRlci9BLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVtb3ZlbWlkZGxlbWFuL2ludGVyZmFjZURlbGVnYXRpb24vYWZ0ZXIvQS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU0YmFhZDkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVtb3ZlbWlkZGxlbWFuL2ludGVyZmFjZURlbGVnYXRpb24vYWZ0ZXIvQS5qYXZhCkBAIC0wLDAgKzEsMyBAQAoraW50ZXJmYWNlIEEgeworICB2b2lkIGZvbygpOworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9yZW1vdmVtaWRkbGVtYW4vaW50ZXJmYWNlRGVsZWdhdGlvbi9hZnRlci9JLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVtb3ZlbWlkZGxlbWFuL2ludGVyZmFjZURlbGVnYXRpb24vYWZ0ZXIvSS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc3NmNlYTIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVtb3ZlbWlkZGxlbWFuL2ludGVyZmFjZURlbGVnYXRpb24vYWZ0ZXIvSS5qYXZhCkBAIC0wLDAgKzEsNCBAQAoraW50ZXJmYWNlIEkgeworICBBIGdldE15RmllbGQoKTsKKyAgdm9pZCBmb28oKTsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVtb3ZlbWlkZGxlbWFuL2ludGVyZmFjZURlbGVnYXRpb24vYWZ0ZXIvVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3JlbW92ZW1pZGRsZW1hbi9pbnRlcmZhY2VEZWxlZ2F0aW9uL2FmdGVyL1Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYjlhNDA2Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3JlbW92ZW1pZGRsZW1hbi9pbnRlcmZhY2VEZWxlZ2F0aW9uL2FmdGVyL1Rlc3QuamF2YQpAQCAtMCwwICsxLDE0IEBACitjbGFzcyBUZXN0IGltcGxlbWVudHMgSSB7CisgIEEgbXlGaWVsZDsKKyAgQSBnZXRNeUZpZWxkKCl7CisgICAgcmV0dXJuIG15RmllbGQ7CisgIH0KKworICB2b2lkIGZvbygpIHsKKyAgICBteUZpZWxkLmZvbygpOworICB9CisKKyAgdm9pZCBiYXIoSSBpKSB7CisgICAgaS5mb28oKTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9yZW1vdmVtaWRkbGVtYW4vaW50ZXJmYWNlRGVsZWdhdGlvbi9iZWZvcmUvQS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3JlbW92ZW1pZGRsZW1hbi9pbnRlcmZhY2VEZWxlZ2F0aW9uL2JlZm9yZS9BLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTRiYWFkOQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9yZW1vdmVtaWRkbGVtYW4vaW50ZXJmYWNlRGVsZWdhdGlvbi9iZWZvcmUvQS5qYXZhCkBAIC0wLDAgKzEsMyBAQAoraW50ZXJmYWNlIEEgeworICB2b2lkIGZvbygpOworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9yZW1vdmVtaWRkbGVtYW4vaW50ZXJmYWNlRGVsZWdhdGlvbi9iZWZvcmUvSS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3JlbW92ZW1pZGRsZW1hbi9pbnRlcmZhY2VEZWxlZ2F0aW9uL2JlZm9yZS9JLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzc2Y2VhMgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9yZW1vdmVtaWRkbGVtYW4vaW50ZXJmYWNlRGVsZWdhdGlvbi9iZWZvcmUvSS5qYXZhCkBAIC0wLDAgKzEsNCBAQAoraW50ZXJmYWNlIEkgeworICBBIGdldE15RmllbGQoKTsKKyAgdm9pZCBmb28oKTsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVtb3ZlbWlkZGxlbWFuL2ludGVyZmFjZURlbGVnYXRpb24vYmVmb3JlL1Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9yZW1vdmVtaWRkbGVtYW4vaW50ZXJmYWNlRGVsZWdhdGlvbi9iZWZvcmUvVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJiOWE0MDYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVtb3ZlbWlkZGxlbWFuL2ludGVyZmFjZURlbGVnYXRpb24vYmVmb3JlL1Rlc3QuamF2YQpAQCAtMCwwICsxLDE0IEBACitjbGFzcyBUZXN0IGltcGxlbWVudHMgSSB7CisgIEEgbXlGaWVsZDsKKyAgQSBnZXRNeUZpZWxkKCl7CisgICAgcmV0dXJuIG15RmllbGQ7CisgIH0KKworICB2b2lkIGZvbygpIHsKKyAgICBteUZpZWxkLmZvbygpOworICB9CisKKyAgdm9pZCBiYXIoSSBpKSB7CisgICAgaS5mb28oKTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9yZW1vdmVtaWRkbGVtYW4vbm9HZXR0ZXIvYWZ0ZXIvVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3JlbW92ZW1pZGRsZW1hbi9ub0dldHRlci9hZnRlci9UZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDJhN2UyOAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9yZW1vdmVtaWRkbGVtYW4vbm9HZXR0ZXIvYWZ0ZXIvVGVzdC5qYXZhCkBAIC0wLDAgKzEsMTIgQEAKK2NsYXNzIFRlc3QgeworICBBIG15RmllbGQ7CisKKyAgICB2b2lkIGJhcigpeworICAgICAgICBteUZpZWxkLmZvbygpOworICB9CisKK30KKworY2xhc3MgQSB7CisgIHZvaWQgZm9vKCl7fQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9yZW1vdmVtaWRkbGVtYW4vbm9HZXR0ZXIvYmVmb3JlL1Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9yZW1vdmVtaWRkbGVtYW4vbm9HZXR0ZXIvYmVmb3JlL1Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMDRhNzAxCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3JlbW92ZW1pZGRsZW1hbi9ub0dldHRlci9iZWZvcmUvVGVzdC5qYXZhCkBAIC0wLDAgKzEsMTUgQEAKK2NsYXNzIFRlc3QgeworICBBIG15RmllbGQ7CisgIHZvaWQgZm9vKCl7CisgICAgbXlGaWVsZC5mb28oKTsKKyAgfQorCisgIHZvaWQgYmFyKCl7CisgICAgZm9vKCk7CisgIH0KKworfQorCitjbGFzcyBBIHsKKyAgdm9pZCBmb28oKXt9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3JlbW92ZW1pZGRsZW1hbi9wcmVzZW50R2V0dGVyL2FmdGVyL0EuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9yZW1vdmVtaWRkbGVtYW4vcHJlc2VudEdldHRlci9hZnRlci9BLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzRlZDhkMAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9yZW1vdmVtaWRkbGVtYW4vcHJlc2VudEdldHRlci9hZnRlci9BLmphdmEKQEAgLTAsMCArMSwzIEBACitjbGFzcyBBIHsKKyAgdm9pZCBmb28oKXt9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3JlbW92ZW1pZGRsZW1hbi9wcmVzZW50R2V0dGVyL2FmdGVyL0kuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9yZW1vdmVtaWRkbGVtYW4vcHJlc2VudEdldHRlci9hZnRlci9JLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzc2Y2VhMgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9yZW1vdmVtaWRkbGVtYW4vcHJlc2VudEdldHRlci9hZnRlci9JLmphdmEKQEAgLTAsMCArMSw0IEBACitpbnRlcmZhY2UgSSB7CisgIEEgZ2V0TXlGaWVsZCgpOworICB2b2lkIGZvbygpOworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9yZW1vdmVtaWRkbGVtYW4vcHJlc2VudEdldHRlci9hZnRlci9UZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVtb3ZlbWlkZGxlbWFuL3ByZXNlbnRHZXR0ZXIvYWZ0ZXIvVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJiOWE0MDYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVtb3ZlbWlkZGxlbWFuL3ByZXNlbnRHZXR0ZXIvYWZ0ZXIvVGVzdC5qYXZhCkBAIC0wLDAgKzEsMTQgQEAKK2NsYXNzIFRlc3QgaW1wbGVtZW50cyBJIHsKKyAgQSBteUZpZWxkOworICBBIGdldE15RmllbGQoKXsKKyAgICByZXR1cm4gbXlGaWVsZDsKKyAgfQorCisgIHZvaWQgZm9vKCkgeworICAgIG15RmllbGQuZm9vKCk7CisgIH0KKworICB2b2lkIGJhcihJIGkpIHsKKyAgICBpLmZvbygpOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3JlbW92ZW1pZGRsZW1hbi9wcmVzZW50R2V0dGVyL2JlZm9yZS9BLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVtb3ZlbWlkZGxlbWFuL3ByZXNlbnRHZXR0ZXIvYmVmb3JlL0EuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNGVkOGQwCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3JlbW92ZW1pZGRsZW1hbi9wcmVzZW50R2V0dGVyL2JlZm9yZS9BLmphdmEKQEAgLTAsMCArMSwzIEBACitjbGFzcyBBIHsKKyAgdm9pZCBmb28oKXt9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3JlbW92ZW1pZGRsZW1hbi9wcmVzZW50R2V0dGVyL2JlZm9yZS9JLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVtb3ZlbWlkZGxlbWFuL3ByZXNlbnRHZXR0ZXIvYmVmb3JlL0kuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NzZjZWEyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3JlbW92ZW1pZGRsZW1hbi9wcmVzZW50R2V0dGVyL2JlZm9yZS9JLmphdmEKQEAgLTAsMCArMSw0IEBACitpbnRlcmZhY2UgSSB7CisgIEEgZ2V0TXlGaWVsZCgpOworICB2b2lkIGZvbygpOworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9yZW1vdmVtaWRkbGVtYW4vcHJlc2VudEdldHRlci9iZWZvcmUvVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3JlbW92ZW1pZGRsZW1hbi9wcmVzZW50R2V0dGVyL2JlZm9yZS9UZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmI5YTQwNgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9yZW1vdmVtaWRkbGVtYW4vcHJlc2VudEdldHRlci9iZWZvcmUvVGVzdC5qYXZhCkBAIC0wLDAgKzEsMTQgQEAKK2NsYXNzIFRlc3QgaW1wbGVtZW50cyBJIHsKKyAgQSBteUZpZWxkOworICBBIGdldE15RmllbGQoKXsKKyAgICByZXR1cm4gbXlGaWVsZDsKKyAgfQorCisgIHZvaWQgZm9vKCkgeworICAgIG15RmllbGQuZm9vKCk7CisgIH0KKworICB2b2lkIGJhcihJIGkpIHsKKyAgICBpLmZvbygpOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3JlbW92ZW1pZGRsZW1hbi9zaWJsaW5ncy9hZnRlci9BLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVtb3ZlbWlkZGxlbWFuL3NpYmxpbmdzL2FmdGVyL0EuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMTNkMTY1Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3JlbW92ZW1pZGRsZW1hbi9zaWJsaW5ncy9hZnRlci9BLmphdmEKQEAgLTAsMCArMSwzIEBACithYnN0cmFjdCBjbGFzcyBBeworICBhYnN0cmFjdCB2b2lkIGZvbygpOworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9yZW1vdmVtaWRkbGVtYW4vc2libGluZ3MvYWZ0ZXIvRC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3JlbW92ZW1pZGRsZW1hbi9zaWJsaW5ncy9hZnRlci9ELmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDc2ZDUwYQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9yZW1vdmVtaWRkbGVtYW4vc2libGluZ3MvYWZ0ZXIvRC5qYXZhCkBAIC0wLDAgKzEsMTEgQEAKK2NsYXNzIEQgeworICB2b2lkIGZvbygpe30KKworICB2b2lkIGJhcihBIGEpeworICAgIGEuZm9vKCk7CisgIH0KKworICB2b2lkIGJhenooVGVzdCB0KXsKKyAgICB0LmZvbygpOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3JlbW92ZW1pZGRsZW1hbi9zaWJsaW5ncy9hZnRlci9UZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVtb3ZlbWlkZGxlbWFuL3NpYmxpbmdzL2FmdGVyL1Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MDY2MDc4Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3JlbW92ZW1pZGRsZW1hbi9zaWJsaW5ncy9hZnRlci9UZXN0LmphdmEKQEAgLTAsMCArMSwxMCBAQAorY2xhc3MgVGVzdCBleHRlbmRzIEEgeworICBEIG15RmllbGQ7CisgIHZvaWQgZm9vKCl7CisgICAgbXlGaWVsZC5mb28oKTsKKyAgfQorCisgIHZvaWQgZmYoKXsKKyAgICBmb28oKTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9yZW1vdmVtaWRkbGVtYW4vc2libGluZ3MvYmVmb3JlL0EuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9yZW1vdmVtaWRkbGVtYW4vc2libGluZ3MvYmVmb3JlL0EuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMTNkMTY1Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3JlbW92ZW1pZGRsZW1hbi9zaWJsaW5ncy9iZWZvcmUvQS5qYXZhCkBAIC0wLDAgKzEsMyBAQAorYWJzdHJhY3QgY2xhc3MgQXsKKyAgYWJzdHJhY3Qgdm9pZCBmb28oKTsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVtb3ZlbWlkZGxlbWFuL3NpYmxpbmdzL2JlZm9yZS9ELmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVtb3ZlbWlkZGxlbWFuL3NpYmxpbmdzL2JlZm9yZS9ELmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDc2ZDUwYQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9yZW1vdmVtaWRkbGVtYW4vc2libGluZ3MvYmVmb3JlL0QuamF2YQpAQCAtMCwwICsxLDExIEBACitjbGFzcyBEIHsKKyAgdm9pZCBmb28oKXt9CisKKyAgdm9pZCBiYXIoQSBhKXsKKyAgICBhLmZvbygpOworICB9CisKKyAgdm9pZCBiYXp6KFRlc3QgdCl7CisgICAgdC5mb28oKTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9yZW1vdmVtaWRkbGVtYW4vc2libGluZ3MvYmVmb3JlL1Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9yZW1vdmVtaWRkbGVtYW4vc2libGluZ3MvYmVmb3JlL1Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MDY2MDc4Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3JlbW92ZW1pZGRsZW1hbi9zaWJsaW5ncy9iZWZvcmUvVGVzdC5qYXZhCkBAIC0wLDAgKzEsMTAgQEAKK2NsYXNzIFRlc3QgZXh0ZW5kcyBBIHsKKyAgRCBteUZpZWxkOworICB2b2lkIGZvbygpeworICAgIG15RmllbGQuZm9vKCk7CisgIH0KKworICB2b2lkIGZmKCl7CisgICAgZm9vKCk7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVuYW1lQ2xhc3MvYXV0b21hdGljUmVuYW1lSW5oZXJpdG9ycy9hZnRlci9YLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVuYW1lQ2xhc3MvYXV0b21hdGljUmVuYW1lSW5oZXJpdG9ycy9hZnRlci9YLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGFmNmRiYwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9yZW5hbWVDbGFzcy9hdXRvbWF0aWNSZW5hbWVJbmhlcml0b3JzL2FmdGVyL1guamF2YQpAQCAtMCwwICsxLDEyIEBACitwdWJsaWMgY2xhc3MgWCB7Cit9CisKK2NsYXNzIE15Q2xhc3MxIHt9CisKKy8qKgorICoge0BsaW5rICNNeUNsYXNzMUltcGwoKX0KKyAqLworY2xhc3MgTXlDbGFzczFJbXBsIGV4dGVuZHMgTXlDbGFzczEgeworICAgIE15Q2xhc3MxSW1wbCgpIHsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3JlbmFtZUNsYXNzL2F1dG9tYXRpY1JlbmFtZUluaGVyaXRvcnMvYmVmb3JlL1guamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9yZW5hbWVDbGFzcy9hdXRvbWF0aWNSZW5hbWVJbmhlcml0b3JzL2JlZm9yZS9YLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjQ4MDc1NgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9yZW5hbWVDbGFzcy9hdXRvbWF0aWNSZW5hbWVJbmhlcml0b3JzL2JlZm9yZS9YLmphdmEKQEAgLTAsMCArMSwxMiBAQAorcHVibGljIGNsYXNzIFggeworfQorCitjbGFzcyBNeUNsYXNzIHt9CisKKy8qKgorICoge0BsaW5rICNNeUNsYXNzSW1wbCgpfQorICovCitjbGFzcyBNeUNsYXNzSW1wbCBleHRlbmRzIE15Q2xhc3MgeworICAgIE15Q2xhc3NJbXBsKCkgeworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVuYW1lQ2xhc3MvYXV0b21hdGljUmVuYW1lVmFycy9hZnRlci9YLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVuYW1lQ2xhc3MvYXV0b21hdGljUmVuYW1lVmFycy9hZnRlci9YLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTA2YmYwYgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9yZW5hbWVDbGFzcy9hdXRvbWF0aWNSZW5hbWVWYXJzL2FmdGVyL1guamF2YQpAQCAtMCwwICsxLDYgQEAKK2NsYXNzIFkgeyAvLyByZW5hbWUgbWUgdG8gWSBhbmQgbGV0IHRoZSByZWZhY3RvcmluZyByZW5hbWUgdGhlIHZhcmlhYmxlcyB0b28uCisJdm9pZCBmb28oWSB5KSB7CisJCVN0cmluZyB5eiA9ICJhc2RmIjsKKwkJU3lzdGVtLm91dC5wcmludGxuKCJ4OiAiICsgeSArIHl6KTsKKwl9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVuYW1lQ2xhc3MvYXV0b21hdGljUmVuYW1lVmFycy9iZWZvcmUvWC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3JlbmFtZUNsYXNzL2F1dG9tYXRpY1JlbmFtZVZhcnMvYmVmb3JlL1guamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZmMwMDY1Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3JlbmFtZUNsYXNzL2F1dG9tYXRpY1JlbmFtZVZhcnMvYmVmb3JlL1guamF2YQpAQCAtMCwwICsxLDYgQEAKK2NsYXNzIFhYIHsgLy8gcmVuYW1lIG1lIHRvIFkgYW5kIGxldCB0aGUgcmVmYWN0b3JpbmcgcmVuYW1lIHRoZSB2YXJpYWJsZXMgdG9vLgorCXZvaWQgZm9vKFhYIHh4KSB7CisJCVN0cmluZyB5eiA9ICJhc2RmIjsKKwkJU3lzdGVtLm91dC5wcmludGxuKCJ4OiAiICsgeHggKyB5eik7CisJfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3JlbmFtZUNsYXNzL2F1dG9tYXRpY1JlbmFtZVZhcnNDb2xsaXNpb24vYWZ0ZXIvWC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3JlbmFtZUNsYXNzL2F1dG9tYXRpY1JlbmFtZVZhcnNDb2xsaXNpb24vYWZ0ZXIvWC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAwMDg4MDcKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVuYW1lQ2xhc3MvYXV0b21hdGljUmVuYW1lVmFyc0NvbGxpc2lvbi9hZnRlci9YLmphdmEKQEAgLTAsMCArMSw2IEBACitjbGFzcyBZIHsgLy8gcmVuYW1lIG1lIHRvIFkgYW5kIGxldCB0aGUgcmVmYWN0b3JpbmcgcmVuYW1lIHRoZSB2YXJpYWJsZXMgdG9vLgorCXZvaWQgZm9vKFkgeCkgeworCQlTdHJpbmcgeSA9ICJhc2RmIjsKKwkJU3lzdGVtLm91dC5wcmludGxuKCJ4OiAiICsgeCArIHkpOworCX0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9yZW5hbWVDbGFzcy9hdXRvbWF0aWNSZW5hbWVWYXJzQ29sbGlzaW9uL2JlZm9yZS9YLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVuYW1lQ2xhc3MvYXV0b21hdGljUmVuYW1lVmFyc0NvbGxpc2lvbi9iZWZvcmUvWC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2NTlkZjEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVuYW1lQ2xhc3MvYXV0b21hdGljUmVuYW1lVmFyc0NvbGxpc2lvbi9iZWZvcmUvWC5qYXZhCkBAIC0wLDAgKzEsNiBAQAorY2xhc3MgWFggeyAvLyByZW5hbWUgbWUgdG8gWSBhbmQgbGV0IHRoZSByZWZhY3RvcmluZyByZW5hbWUgdGhlIHZhcmlhYmxlcyB0b28uCisJdm9pZCBmb28oWFggeCkgeworCQlTdHJpbmcgeSA9ICJhc2RmIjsKKwkJU3lzdGVtLm91dC5wcmludGxuKCJ4OiAiICsgeCArIHkpOworCX0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9yZW5hbWVDbGFzcy9jb2xsaXNpb24vYWZ0ZXIvcGFjazEvTGlzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3JlbmFtZUNsYXNzL2NvbGxpc2lvbi9hZnRlci9wYWNrMS9MaXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjhiODIxYwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9yZW5hbWVDbGFzcy9jb2xsaXNpb24vYWZ0ZXIvcGFjazEvTGlzdC5qYXZhCkBAIC0wLDAgKzEsNCBAQAorcGFja2FnZSBwYWNrMTsKKworcHVibGljIGNsYXNzIExpc3QgeworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9yZW5hbWVDbGFzcy9jb2xsaXNpb24vYWZ0ZXIvcGFjazIvVXNhZ2UuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9yZW5hbWVDbGFzcy9jb2xsaXNpb24vYWZ0ZXIvcGFjazIvVXNhZ2UuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OTIxMDIzCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3JlbmFtZUNsYXNzL2NvbGxpc2lvbi9hZnRlci9wYWNrMi9Vc2FnZS5qYXZhCkBAIC0wLDAgKzEsOSBAQAorcGFja2FnZSBwYWNrMjsKK2ltcG9ydCBwYWNrMS4qOworCitwdWJsaWMgY2xhc3MgVXNhZ2UgeworICAgIGludCBtZXRob2QoKSB7CisgICAgICAgIGphdmEudXRpbC5MaXN0IGxpc3QgPSBudWxsOworICAgICAgICBMaXN0IG15TGlzdCA9IG51bGw7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9yZW5hbWVDbGFzcy9jb2xsaXNpb24vYWZ0ZXIvcGFjazIvVXNhZ2UyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVuYW1lQ2xhc3MvY29sbGlzaW9uL2FmdGVyL3BhY2syL1VzYWdlMi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhmNTc3NDUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVuYW1lQ2xhc3MvY29sbGlzaW9uL2FmdGVyL3BhY2syL1VzYWdlMi5qYXZhCkBAIC0wLDAgKzEsMTAgQEAKK3BhY2thZ2UgcGFjazI7CisKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworcHVibGljIGNsYXNzIFVzYWdlMiB7CisgICAgaW50IG1ldGhvZCgpIHsKKyAgICAgICAgTGlzdCBsaXN0ID0gbnVsbDsKKyAgICAgICAgcGFjazEuTGlzdCBteUxpc3QgPSBudWxsOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVuYW1lQ2xhc3MvY29sbGlzaW9uL2JlZm9yZS9wYWNrMS9NeUxpc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9yZW5hbWVDbGFzcy9jb2xsaXNpb24vYmVmb3JlL3BhY2sxL015TGlzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU5ODg3MjQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVuYW1lQ2xhc3MvY29sbGlzaW9uL2JlZm9yZS9wYWNrMS9NeUxpc3QuamF2YQpAQCAtMCwwICsxLDQgQEAKK3BhY2thZ2UgcGFjazE7CisKK3B1YmxpYyBjbGFzcyBNeUxpc3QgeworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9yZW5hbWVDbGFzcy9jb2xsaXNpb24vYmVmb3JlL3BhY2syL1VzYWdlLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVuYW1lQ2xhc3MvY29sbGlzaW9uL2JlZm9yZS9wYWNrMi9Vc2FnZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkwMmM4N2IKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVuYW1lQ2xhc3MvY29sbGlzaW9uL2JlZm9yZS9wYWNrMi9Vc2FnZS5qYXZhCkBAIC0wLDAgKzEsMTAgQEAKK3BhY2thZ2UgcGFjazI7CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CitpbXBvcnQgcGFjazEuKjsKKworcHVibGljIGNsYXNzIFVzYWdlIHsKKyAgICBpbnQgbWV0aG9kKCkgeworICAgICAgICBMaXN0IGxpc3QgPSBudWxsOworICAgICAgICBNeUxpc3QgbXlMaXN0ID0gbnVsbDsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3JlbmFtZUNsYXNzL2NvbGxpc2lvbi9iZWZvcmUvcGFjazIvVXNhZ2UyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVuYW1lQ2xhc3MvY29sbGlzaW9uL2JlZm9yZS9wYWNrMi9Vc2FnZTIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wY2QxYmVhCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3JlbmFtZUNsYXNzL2NvbGxpc2lvbi9iZWZvcmUvcGFjazIvVXNhZ2UyLmphdmEKQEAgLTAsMCArMSw5IEBACitwYWNrYWdlIHBhY2syOworaW1wb3J0IGphdmEudXRpbC4qOworCitwdWJsaWMgY2xhc3MgVXNhZ2UyIHsKKyAgICBpbnQgbWV0aG9kKCkgeworICAgICAgICBMaXN0IGxpc3QgPSBudWxsOworICAgICAgICBwYWNrMS5NeUxpc3QgbXlMaXN0ID0gbnVsbDsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3JlbmFtZUNsYXNzL2NvbGxpc2lvbjEvYWZ0ZXIvVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3JlbmFtZUNsYXNzL2NvbGxpc2lvbjEvYWZ0ZXIvVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc2ZmUwNzkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVuYW1lQ2xhc3MvY29sbGlzaW9uMS9hZnRlci9UZXN0LmphdmEKQEAgLTAsMCArMSw2IEBACitpbXBvcnQgamF2YS5pby4qOworCitjbGFzcyBSZWFkZXIgeworICAgamF2YS5pby5SZWFkZXIgcmVhZGVyOworLy8gbW9yZSBjb2RlCit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVuYW1lQ2xhc3MvY29sbGlzaW9uMS9iZWZvcmUvVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3JlbmFtZUNsYXNzL2NvbGxpc2lvbjEvYmVmb3JlL1Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOTQyMTUzCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3JlbmFtZUNsYXNzL2NvbGxpc2lvbjEvYmVmb3JlL1Rlc3QuamF2YQpAQCAtMCwwICsxLDYgQEAKK2ltcG9ydCBqYXZhLmlvLio7CisKK2NsYXNzIExvYWRlciB7CisgICBSZWFkZXIgcmVhZGVyOworLy8gbW9yZSBjb2RlCit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVuYW1lQ2xhc3MvY29uc3RydWN0b3JKYXZhZG9jL2FmdGVyL1Rlc3QxLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVuYW1lQ2xhc3MvY29uc3RydWN0b3JKYXZhZG9jL2FmdGVyL1Rlc3QxLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmM2YzE4MwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9yZW5hbWVDbGFzcy9jb25zdHJ1Y3RvckphdmFkb2MvYWZ0ZXIvVGVzdDEuamF2YQpAQCAtMCwwICsxLDExIEBACisvKioKKyAqIEBzZWUgI1Rlc3QxCisgKi8KK2NsYXNzIFRlc3QxIHsKKyAgICBwdWJsaWMgVGVzdDEoKSB7CisgICAgICAgIHRoaXMoMCk7CisgICAgICAgIG5ldyBUZXN0MSgpOworICAgIH0KKworICAgIHB1YmxpYyBUZXN0MShpbnQgaSkge30KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9yZW5hbWVDbGFzcy9jb25zdHJ1Y3RvckphdmFkb2MvYmVmb3JlL1Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9yZW5hbWVDbGFzcy9jb25zdHJ1Y3RvckphdmFkb2MvYmVmb3JlL1Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOTAzOGQ1Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3JlbmFtZUNsYXNzL2NvbnN0cnVjdG9ySmF2YWRvYy9iZWZvcmUvVGVzdC5qYXZhCkBAIC0wLDAgKzEsMTEgQEAKKy8qKgorICogQHNlZSAjVGVzdAorICovCitjbGFzcyBUZXN0IHsKKyAgICBwdWJsaWMgVGVzdCgpIHsKKyAgICAgICAgdGhpcygwKTsKKyAgICAgICAgbmV3IFRlc3QoKTsKKyAgICB9CisKKyAgICBwdWJsaWMgVGVzdChpbnQgaSkge30KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9yZW5hbWVDbGFzcy9pbXBsaWNpdFJlZmVyZW5jZVRvRGVmYXVsdEN0ci9hZnRlci9wYWNrMS9EZXJpdmVkLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVuYW1lQ2xhc3MvaW1wbGljaXRSZWZlcmVuY2VUb0RlZmF1bHRDdHIvYWZ0ZXIvcGFjazEvRGVyaXZlZC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZjY2VlYjcKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVuYW1lQ2xhc3MvaW1wbGljaXRSZWZlcmVuY2VUb0RlZmF1bHRDdHIvYWZ0ZXIvcGFjazEvRGVyaXZlZC5qYXZhCkBAIC0wLDAgKzEsNCBAQAorcGFja2FnZSBwYWNrMTsKKworcHVibGljIGNsYXNzIERlcml2ZWQgZXh0ZW5kcyBQYXJlbnRYWFggeworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9yZW5hbWVDbGFzcy9pbXBsaWNpdFJlZmVyZW5jZVRvRGVmYXVsdEN0ci9hZnRlci9wYWNrMS9QYXJlbnRYWFguamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9yZW5hbWVDbGFzcy9pbXBsaWNpdFJlZmVyZW5jZVRvRGVmYXVsdEN0ci9hZnRlci9wYWNrMS9QYXJlbnRYWFguamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZTI4ZTg1Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3JlbmFtZUNsYXNzL2ltcGxpY2l0UmVmZXJlbmNlVG9EZWZhdWx0Q3RyL2FmdGVyL3BhY2sxL1BhcmVudFhYWC5qYXZhCkBAIC0wLDAgKzEsNiBAQAorcGFja2FnZSBwYWNrMTsKKworcHVibGljIGNsYXNzIFBhcmVudFhYWCB7CisgICAgcHVibGljIFBhcmVudFhYWCgpIHsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3JlbmFtZUNsYXNzL2ltcGxpY2l0UmVmZXJlbmNlVG9EZWZhdWx0Q3RyL2JlZm9yZS9wYWNrMS9EZXJpdmVkLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVuYW1lQ2xhc3MvaW1wbGljaXRSZWZlcmVuY2VUb0RlZmF1bHRDdHIvYmVmb3JlL3BhY2sxL0Rlcml2ZWQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOTdkMjhiCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3JlbmFtZUNsYXNzL2ltcGxpY2l0UmVmZXJlbmNlVG9EZWZhdWx0Q3RyL2JlZm9yZS9wYWNrMS9EZXJpdmVkLmphdmEKQEAgLTAsMCArMSw0IEBACitwYWNrYWdlIHBhY2sxOworCitwdWJsaWMgY2xhc3MgRGVyaXZlZCBleHRlbmRzIFBhcmVudCB7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3JlbmFtZUNsYXNzL2ltcGxpY2l0UmVmZXJlbmNlVG9EZWZhdWx0Q3RyL2JlZm9yZS9wYWNrMS9QYXJlbnQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9yZW5hbWVDbGFzcy9pbXBsaWNpdFJlZmVyZW5jZVRvRGVmYXVsdEN0ci9iZWZvcmUvcGFjazEvUGFyZW50LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmYwNmVlYQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9yZW5hbWVDbGFzcy9pbXBsaWNpdFJlZmVyZW5jZVRvRGVmYXVsdEN0ci9iZWZvcmUvcGFjazEvUGFyZW50LmphdmEKQEAgLTAsMCArMSw2IEBACitwYWNrYWdlIHBhY2sxOworCitwdWJsaWMgY2xhc3MgUGFyZW50IHsKKyAgICBwdWJsaWMgUGFyZW50KCkgeworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVuYW1lQ2xhc3MvaW1wbGljaXRseUltcG9ydGVkL2FmdGVyL0IuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9yZW5hbWVDbGFzcy9pbXBsaWNpdGx5SW1wb3J0ZWQvYWZ0ZXIvQi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNmNjMyMzUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVuYW1lQ2xhc3MvaW1wbGljaXRseUltcG9ydGVkL2FmdGVyL0IuamF2YQpAQCAtMCwwICsxLDUgQEAKK2ltcG9ydCBwYWNrMS5PYmplY3Q7CisKK2NsYXNzIEIgeworICBPYmplY3QgYTsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVuYW1lQ2xhc3MvaW1wbGljaXRseUltcG9ydGVkL2FmdGVyL3BhY2sxL09iamVjdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3JlbmFtZUNsYXNzL2ltcGxpY2l0bHlJbXBvcnRlZC9hZnRlci9wYWNrMS9PYmplY3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MjdkZGUyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3JlbmFtZUNsYXNzL2ltcGxpY2l0bHlJbXBvcnRlZC9hZnRlci9wYWNrMS9PYmplY3QuamF2YQpAQCAtMCwwICsxLDMgQEAKK3BhY2thZ2UgcGFjazE7CisKK3B1YmxpYyBjbGFzcyBPYmplY3Qge30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVuYW1lQ2xhc3MvaW1wbGljaXRseUltcG9ydGVkL2JlZm9yZS9CLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVuYW1lQ2xhc3MvaW1wbGljaXRseUltcG9ydGVkL2JlZm9yZS9CLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2ZkZTBiNAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9yZW5hbWVDbGFzcy9pbXBsaWNpdGx5SW1wb3J0ZWQvYmVmb3JlL0IuamF2YQpAQCAtMCwwICsxLDcgQEAKK2ltcG9ydCBqYXZhLmxhbmcuT2JqZWN0OworCitpbXBvcnQgcGFjazEuKjsKKworY2xhc3MgQiB7CisgIEEgYTsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVuYW1lQ2xhc3MvaW1wbGljaXRseUltcG9ydGVkL2JlZm9yZS9wYWNrMS9BLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVuYW1lQ2xhc3MvaW1wbGljaXRseUltcG9ydGVkL2JlZm9yZS9wYWNrMS9BLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDhkMGU2YQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9yZW5hbWVDbGFzcy9pbXBsaWNpdGx5SW1wb3J0ZWQvYmVmb3JlL3BhY2sxL0EuamF2YQpAQCAtMCwwICsxLDMgQEAKK3BhY2thZ2UgcGFjazE7CisKK3B1YmxpYyBjbGFzcyBBIHt9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3JlbmFtZUNsYXNzL2ltcG9ydC9hZnRlci9Gb29CYXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9yZW5hbWVDbGFzcy9pbXBvcnQvYWZ0ZXIvRm9vQmFyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTNjMGRmYgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9yZW5hbWVDbGFzcy9pbXBvcnQvYWZ0ZXIvRm9vQmFyLmphdmEKQEAgLTAsMCArMSw1IEBACitpbXBvcnQgYS5CbHViRm9vOworCitwdWJsaWMgY2xhc3MgRm9vQmFyIHsKKyAgICBCbHViRm9vIGJsdWJmb287Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVuYW1lQ2xhc3MvaW1wb3J0L2FmdGVyL2EvQmx1YkZvby5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3JlbmFtZUNsYXNzL2ltcG9ydC9hZnRlci9hL0JsdWJGb28uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMzE5Y2ViCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3JlbmFtZUNsYXNzL2ltcG9ydC9hZnRlci9hL0JsdWJGb28uamF2YQpAQCAtMCwwICsxLDQgQEAKK3BhY2thZ2UgYTsKKworcHVibGljIGNsYXNzIEJsdWJGb28geworfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3JlbmFtZUNsYXNzL2ltcG9ydC9iZWZvcmUvRm9vQmFyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVuYW1lQ2xhc3MvaW1wb3J0L2JlZm9yZS9Gb29CYXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYTI5NTQ3Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3JlbmFtZUNsYXNzL2ltcG9ydC9iZWZvcmUvRm9vQmFyLmphdmEKQEAgLTAsMCArMSw1IEBACitpbXBvcnQgYS5CbHViZm9vOworCitwdWJsaWMgY2xhc3MgRm9vQmFyIHsKKyAgICBCbHViZm9vIGJsdWJmb287Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVuYW1lQ2xhc3MvaW1wb3J0L2JlZm9yZS9hL0JsdWJmb28uamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9yZW5hbWVDbGFzcy9pbXBvcnQvYmVmb3JlL2EvQmx1YmZvby5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ1Yzc3NDcKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVuYW1lQ2xhc3MvaW1wb3J0L2JlZm9yZS9hL0JsdWJmb28uamF2YQpAQCAtMCwwICsxLDQgQEAKK3BhY2thZ2UgYTsKKworcHVibGljIGNsYXNzIEJsdWJmb28geworfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3JlbmFtZUNsYXNzL2luU2FtZUZpbGUvYWZ0ZXIvVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3JlbmFtZUNsYXNzL2luU2FtZUZpbGUvYWZ0ZXIvVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUyNDFkYTAKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVuYW1lQ2xhc3MvaW5TYW1lRmlsZS9hZnRlci9UZXN0LmphdmEKQEAgLTAsMCArMSw1IEBACitjbGFzcyBPbmUgZXh0ZW5kcyBqYXZhLmxhbmcuT2JqZWN0IHsKK30KKworY2xhc3MgT2JqZWN0IHsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVuYW1lQ2xhc3MvaW5TYW1lRmlsZS9iZWZvcmUvVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3JlbmFtZUNsYXNzL2luU2FtZUZpbGUvYmVmb3JlL1Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YjJmMjMzCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3JlbmFtZUNsYXNzL2luU2FtZUZpbGUvYmVmb3JlL1Rlc3QuamF2YQpAQCAtMCwwICsxLDUgQEAKK2NsYXNzIE9uZSBleHRlbmRzIE9iamVjdCB7Cit9CisKK2NsYXNzIFR3byB7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3JlbmFtZUNsYXNzL2lubmVyQ2xhc3MvYWZ0ZXIvcGFjazEvT3V0ZXJDbGFzcy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3JlbmFtZUNsYXNzL2lubmVyQ2xhc3MvYWZ0ZXIvcGFjazEvT3V0ZXJDbGFzcy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI3MGM4ODQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVuYW1lQ2xhc3MvaW5uZXJDbGFzcy9hZnRlci9wYWNrMS9PdXRlckNsYXNzLmphdmEKQEAgLTAsMCArMSw5IEBACitwYWNrYWdlIHBhY2sxOworCitwdWJsaWMgY2xhc3MgT3V0ZXJDbGFzcyB7CisgICAgcHVibGljIHN0YXRpYyBjbGFzcyBOZXdJbm5lckNsYXNzIHsKKyAgICAgICAgCisgICAgfQorICAgCisgICAgU3RyaW5nIGNsYXNzTG9hZGVyU3RyaW5nID0gInBhY2sxLk91dGVyQ2xhc3MkTmV3SW5uZXJDbGFzcyI7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3JlbmFtZUNsYXNzL2lubmVyQ2xhc3MvYWZ0ZXIvcXFxLnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9yZW5hbWVDbGFzcy9pbm5lckNsYXNzL2FmdGVyL3FxcS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzZhODNmOAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9yZW5hbWVDbGFzcy9pbm5lckNsYXNzL2FmdGVyL3FxcS50eHQKQEAgLTAsMCArMSwzIEBACitwYWNrMS5PdXRlckNsYXNzLk5ld0lubmVyQ2xhc3MKK3BhY2sxLk91dGVyQ2xhc3MkTmV3SW5uZXJDbGFzcworcGFjazEuT3V0ZXJDbGFzcyRJbm5lckNsYXNzWApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9yZW5hbWVDbGFzcy9pbm5lckNsYXNzL2JlZm9yZS9wYWNrMS9PdXRlckNsYXNzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVuYW1lQ2xhc3MvaW5uZXJDbGFzcy9iZWZvcmUvcGFjazEvT3V0ZXJDbGFzcy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEzMTc3MzkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVuYW1lQ2xhc3MvaW5uZXJDbGFzcy9iZWZvcmUvcGFjazEvT3V0ZXJDbGFzcy5qYXZhCkBAIC0wLDAgKzEsOSBAQAorcGFja2FnZSBwYWNrMTsKKworcHVibGljIGNsYXNzIE91dGVyQ2xhc3MgeworICAgIHB1YmxpYyBzdGF0aWMgY2xhc3MgSW5uZXJDbGFzcyB7CisgICAgICAgIAorICAgIH0KKyAgIAorICAgIFN0cmluZyBjbGFzc0xvYWRlclN0cmluZyA9ICJwYWNrMS5PdXRlckNsYXNzJElubmVyQ2xhc3MiOworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9yZW5hbWVDbGFzcy9pbm5lckNsYXNzL2JlZm9yZS9xcXEudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3JlbmFtZUNsYXNzL2lubmVyQ2xhc3MvYmVmb3JlL3FxcS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmEyY2RjMwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9yZW5hbWVDbGFzcy9pbm5lckNsYXNzL2JlZm9yZS9xcXEudHh0CkBAIC0wLDAgKzEsMyBAQAorcGFjazEuT3V0ZXJDbGFzcy5Jbm5lckNsYXNzCitwYWNrMS5PdXRlckNsYXNzJElubmVyQ2xhc3MKK3BhY2sxLk91dGVyQ2xhc3MkSW5uZXJDbGFzc1gKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVuYW1lQ2xhc3Mvbm9uSmF2YS9hZnRlci9wYWNrMS9DbGFzczFOZXcuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9yZW5hbWVDbGFzcy9ub25KYXZhL2FmdGVyL3BhY2sxL0NsYXNzMU5ldy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNkZTg0YTcKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVuYW1lQ2xhc3Mvbm9uSmF2YS9hZnRlci9wYWNrMS9DbGFzczFOZXcuamF2YQpAQCAtMCwwICsxLDMgQEAKK3BhY2thZ2UgcGFjazE7CisKK3B1YmxpYyBjbGFzcyBDbGFzczFOZXcge30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVuYW1lQ2xhc3Mvbm9uSmF2YS9hZnRlci9xcXEudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3JlbmFtZUNsYXNzL25vbkphdmEvYWZ0ZXIvcXFxLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYzFmM2QzCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3JlbmFtZUNsYXNzL25vbkphdmEvYWZ0ZXIvcXFxLnR4dApAQCAtMCwwICsxLDMgQEAKK3BhY2sxLkNsYXNzMU5ldworQ2xhc3MxCitwYWNrMS5DbGFzczFhCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVuYW1lQ2xhc3Mvbm9uSmF2YS9iZWZvcmUvcGFjazEvQ2xhc3MxLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVuYW1lQ2xhc3Mvbm9uSmF2YS9iZWZvcmUvcGFjazEvQ2xhc3MxLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzA4MGI2OAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9yZW5hbWVDbGFzcy9ub25KYXZhL2JlZm9yZS9wYWNrMS9DbGFzczEuamF2YQpAQCAtMCwwICsxLDMgQEAKK3BhY2thZ2UgcGFjazE7CisKK3B1YmxpYyBjbGFzcyBDbGFzczF7fQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9yZW5hbWVDbGFzcy9ub25KYXZhL2JlZm9yZS9xcXEudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3JlbmFtZUNsYXNzL25vbkphdmEvYmVmb3JlL3FxcS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDYwZGM3ZQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9yZW5hbWVDbGFzcy9ub25KYXZhL2JlZm9yZS9xcXEudHh0CkBAIC0wLDAgKzEsMyBAQAorcGFjazEuQ2xhc3MxCitDbGFzczEKK3BhY2sxLkNsYXNzMWEKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9yZW5hbWVDb2xsaXNpb25zL0FsbFVzYWdlc0luQ29kZS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3JlbmFtZUNvbGxpc2lvbnMvQWxsVXNhZ2VzSW5Db2RlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDMxNGNlZQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9yZW5hbWVDb2xsaXNpb25zL0FsbFVzYWdlc0luQ29kZS5qYXZhCkBAIC0wLDAgKzEsNSBAQAorcHVibGljIGNsYXNzIFQ8Y2FyZXQ+b0ZpbmQgeworICB2b2lkIGZvbygpIHsKKyAgICBuZXcgVG9GaW5kKCk7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVuYW1lQ29sbGlzaW9ucy9SZW5hbWVDbGFzc0lubmVyVG9Mb2NhbC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3JlbmFtZUNvbGxpc2lvbnMvUmVuYW1lQ2xhc3NJbm5lclRvTG9jYWwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zODljN2QyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3JlbmFtZUNvbGxpc2lvbnMvUmVuYW1lQ2xhc3NJbm5lclRvTG9jYWwuamF2YQpAQCAtMCwwICsxLDI5IEBACitwYWNrYWdlIHJlbmFtZUNvbGxpc2lvbnM7CisKK2NsYXNzIExvY2FsQ2xhc3MgeworCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFNOX1NUQVRJQ19GSUVMRCA9IDI7CisJcHVibGljIHN0YXRpYyB2b2lkIHNuU3RhdGljTWV0aG9kKCkgeworCX0KK30KKworcHVibGljIGNsYXNzIFJlbmFtZUNvbGxpc2lvbnMgeworCWNsYXNzIElubmVyPGNhcmV0PkNsYXNzIHsKKwkJcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgU05fU1RBVElDX0ZJRUxEID0gMTQ7CisJCXB1YmxpYyB2b2lkIHNuTWV0aG9kKCkgeworCQl9CisJfQorCisJcHVibGljIHZvaWQgaW5zdGFuY2VDb250ZXh0KCkgeworCQlMb2NhbENsYXNzIGxvY2FsQ2xhc3MgPSBuZXcgTG9jYWxDbGFzcygpOworCQlpbnQgdmFyMSA9IExvY2FsQ2xhc3MuU05fU1RBVElDX0ZJRUxEOworCQlMb2NhbENsYXNzLnNuU3RhdGljTWV0aG9kKCk7CisKKwkJSW5uZXJDbGFzcyBpbm5lckNsYXNzID0gbmV3IElubmVyQ2xhc3MoKTsKKwkJaW50IHZhcjQgPSBJbm5lckNsYXNzLlNOX1NUQVRJQ19GSUVMRDsKKwl9CisKKwlwdWJsaWMgc3RhdGljIHZvaWQgc3RhdGljQ29udGV4dCgpIHsKKwkJSW5uZXJDbGFzcyBpbm5lckNsYXNzID0gbmV3IFJlbmFtZUNvbGxpc2lvbnMoKS5uZXcgSW5uZXJDbGFzcygpOworCQlpbnQgdmFyMyA9IElubmVyQ2xhc3MuU05fU1RBVElDX0ZJRUxEOworCX0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9yZW5hbWVDb2xsaXNpb25zL1JlbmFtZUNsYXNzSW5uZXJUb0xvY2FsLmphdmEuYWZ0ZXIgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVuYW1lQ29sbGlzaW9ucy9SZW5hbWVDbGFzc0lubmVyVG9Mb2NhbC5qYXZhLmFmdGVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU0YTY1YTgKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVuYW1lQ29sbGlzaW9ucy9SZW5hbWVDbGFzc0lubmVyVG9Mb2NhbC5qYXZhLmFmdGVyCkBAIC0wLDAgKzEsMjkgQEAKK3BhY2thZ2UgcmVuYW1lQ29sbGlzaW9uczsKKworY2xhc3MgTG9jYWxDbGFzcyB7CisJcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgU05fU1RBVElDX0ZJRUxEID0gMjsKKwlwdWJsaWMgc3RhdGljIHZvaWQgc25TdGF0aWNNZXRob2QoKSB7CisJfQorfQorCitwdWJsaWMgY2xhc3MgUmVuYW1lQ29sbGlzaW9ucyB7CisJY2xhc3MgTG9jYWw8Y2FyZXQ+Q2xhc3MgeworCQlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBTTl9TVEFUSUNfRklFTEQgPSAxNDsKKwkJcHVibGljIHZvaWQgc25NZXRob2QoKSB7CisJCX0KKwl9CisKKwlwdWJsaWMgdm9pZCBpbnN0YW5jZUNvbnRleHQoKSB7CisJCXJlbmFtZUNvbGxpc2lvbnMuTG9jYWxDbGFzcyBsb2NhbENsYXNzID0gbmV3IHJlbmFtZUNvbGxpc2lvbnMuTG9jYWxDbGFzcygpOworCQlpbnQgdmFyMSA9IHJlbmFtZUNvbGxpc2lvbnMuTG9jYWxDbGFzcy5TTl9TVEFUSUNfRklFTEQ7CisJCXJlbmFtZUNvbGxpc2lvbnMuTG9jYWxDbGFzcy5zblN0YXRpY01ldGhvZCgpOworCisJCXJlbmFtZUNvbGxpc2lvbnMuUmVuYW1lQ29sbGlzaW9ucy5Mb2NhbENsYXNzIGlubmVyQ2xhc3MgPSBuZXcgcmVuYW1lQ29sbGlzaW9ucy5SZW5hbWVDb2xsaXNpb25zLkxvY2FsQ2xhc3MoKTsKKwkJaW50IHZhcjQgPSByZW5hbWVDb2xsaXNpb25zLlJlbmFtZUNvbGxpc2lvbnMuTG9jYWxDbGFzcy5TTl9TVEFUSUNfRklFTEQ7CisJfQorCisJcHVibGljIHN0YXRpYyB2b2lkIHN0YXRpY0NvbnRleHQoKSB7CisJCXJlbmFtZUNvbGxpc2lvbnMuUmVuYW1lQ29sbGlzaW9ucy5Mb2NhbENsYXNzIGlubmVyQ2xhc3MgPSBuZXcgUmVuYW1lQ29sbGlzaW9ucygpLm5ldyBMb2NhbENsYXNzKCk7CisJCWludCB2YXIzID0gcmVuYW1lQ29sbGlzaW9ucy5SZW5hbWVDb2xsaXNpb25zLkxvY2FsQ2xhc3MuU05fU1RBVElDX0ZJRUxEOworCX0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9yZW5hbWVDb2xsaXNpb25zL1JlbmFtZUNsYXNzTG9jYWxUb0FsaWVuLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVuYW1lQ29sbGlzaW9ucy9SZW5hbWVDbGFzc0xvY2FsVG9BbGllbi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRmMGFmNmMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVuYW1lQ29sbGlzaW9ucy9SZW5hbWVDbGFzc0xvY2FsVG9BbGllbi5qYXZhCkBAIC0wLDAgKzEsMzUgQEAKK3BhY2thZ2UgcmVuYW1lQ29sbGlzaW9uczsKKworaW1wb3J0IHN0YXRpYyBqYXZhLmxhbmcuU3RyaW5nLkNBU0VfSU5TRU5TSVRJVkVfT1JERVI7CitpbXBvcnQgc3RhdGljIGphdmEubGFuZy5TdHJpbmcudmFsdWVPZjsKKworY2xhc3MgPGNhcmV0PkxvY2FsQ2xhc3MgeworCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFNUQVRJQ19GSUVMRCA9IDU7CisJcHVibGljIHN0YXRpYyB2b2lkIHN0YXRpY01ldGhvZCgpIHsKKwl9CisJaW50IG15RmllbGQ7CisJcHVibGljIHZvaWQgbWV0aG9kKCkgeworCX0KK30KKworcHVibGljIGNsYXNzIFJlbmFtZUNvbGxpc2lvbnMgeworCXByaXZhdGUgU3RyaW5nIG15RGVjbGFyYXRpb25Vc2FnZTsKKwlwdWJsaWMgU3RyaW5nIGRlY2xhcmF0aW9uVXNhZ2UoU3RyaW5nIHMpIHsKKwkJcmV0dXJuIHMgKyBteURlY2xhcmF0aW9uVXNhZ2U7CisJfQorCisJcHVibGljIHN0YXRpYyB2b2lkIHN0YXRpY0NvbnRleHQoKSB7CisJCUNBU0VfSU5TRU5TSVRJVkVfT1JERVIuZ2V0Q2xhc3MoKTsKKwkJdmFsdWVPZigwKTsKKworCQlTdHJpbmcuQ0FTRV9JTlNFTlNJVElWRV9PUkRFUi5nZXRDbGFzcygpOworCQlTdHJpbmcudmFsdWVPZigwKTsKKworCQlpbnQgdmFyNiA9IExvY2FsQ2xhc3MuU1RBVElDX0ZJRUxEOworCQlMb2NhbENsYXNzLnN0YXRpY01ldGhvZCgpOworCisJCUxvY2FsQ2xhc3MgbG9jYWxDbGFzcyA9IG5ldyBMb2NhbENsYXNzKCk7CisJCWxvY2FsQ2xhc3MubXlGaWVsZCsrOworCQlsb2NhbENsYXNzLm1ldGhvZCgpOworCX0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9yZW5hbWVDb2xsaXNpb25zL1JlbmFtZUNsYXNzTG9jYWxUb0FsaWVuLmphdmEuYWZ0ZXIgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVuYW1lQ29sbGlzaW9ucy9SZW5hbWVDbGFzc0xvY2FsVG9BbGllbi5qYXZhLmFmdGVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQxOWM2NWYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVuYW1lQ29sbGlzaW9ucy9SZW5hbWVDbGFzc0xvY2FsVG9BbGllbi5qYXZhLmFmdGVyCkBAIC0wLDAgKzEsMzUgQEAKK3BhY2thZ2UgcmVuYW1lQ29sbGlzaW9uczsKKworaW1wb3J0IHN0YXRpYyBqYXZhLmxhbmcuU3RyaW5nLkNBU0VfSU5TRU5TSVRJVkVfT1JERVI7CitpbXBvcnQgc3RhdGljIGphdmEubGFuZy5TdHJpbmcudmFsdWVPZjsKKworY2xhc3MgPGNhcmV0PlN0cmluZyB7CisJcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgU1RBVElDX0ZJRUxEID0gNTsKKwlwdWJsaWMgc3RhdGljIHZvaWQgc3RhdGljTWV0aG9kKCkgeworCX0KKwlpbnQgbXlGaWVsZDsKKwlwdWJsaWMgdm9pZCBtZXRob2QoKSB7CisJfQorfQorCitwdWJsaWMgY2xhc3MgUmVuYW1lQ29sbGlzaW9ucyB7CisJcHJpdmF0ZSBqYXZhLmxhbmcuU3RyaW5nIG15RGVjbGFyYXRpb25Vc2FnZTsKKwlwdWJsaWMgamF2YS5sYW5nLlN0cmluZyBkZWNsYXJhdGlvblVzYWdlKGphdmEubGFuZy5TdHJpbmcgcykgeworCQlyZXR1cm4gcyArIG15RGVjbGFyYXRpb25Vc2FnZTsKKwl9CisKKwlwdWJsaWMgc3RhdGljIHZvaWQgc3RhdGljQ29udGV4dCgpIHsKKwkJQ0FTRV9JTlNFTlNJVElWRV9PUkRFUi5nZXRDbGFzcygpOworCQl2YWx1ZU9mKDApOworCisJCWphdmEubGFuZy5TdHJpbmcuQ0FTRV9JTlNFTlNJVElWRV9PUkRFUi5nZXRDbGFzcygpOworCQlqYXZhLmxhbmcuU3RyaW5nLnZhbHVlT2YoMCk7CisKKwkJaW50IHZhcjYgPSByZW5hbWVDb2xsaXNpb25zLlN0cmluZy5TVEFUSUNfRklFTEQ7CisJCXJlbmFtZUNvbGxpc2lvbnMuU3RyaW5nLnN0YXRpY01ldGhvZCgpOworCisJCXJlbmFtZUNvbGxpc2lvbnMuU3RyaW5nIGxvY2FsQ2xhc3MgPSBuZXcgcmVuYW1lQ29sbGlzaW9ucy5TdHJpbmcoKTsKKwkJbG9jYWxDbGFzcy5teUZpZWxkKys7CisJCWxvY2FsQ2xhc3MubWV0aG9kKCk7CisJfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3JlbmFtZUNvbGxpc2lvbnMvUmVuYW1lQ2xhc3NMb2NhbFRvQWxpZW5Ob0ltcG9ydHMuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9yZW5hbWVDb2xsaXNpb25zL1JlbmFtZUNsYXNzTG9jYWxUb0FsaWVuTm9JbXBvcnRzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTUxOTgzZQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9yZW5hbWVDb2xsaXNpb25zL1JlbmFtZUNsYXNzTG9jYWxUb0FsaWVuTm9JbXBvcnRzLmphdmEKQEAgLTAsMCArMSwyMCBAQAorY2xhc3MgPGNhcmV0PkxvY2FsQ2xhc3MgeworCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFNUQVRJQ19GSUVMRCA9IDU7CisJcHVibGljIHN0YXRpYyB2b2lkIHN0YXRpY01ldGhvZCgpIHsKKwl9CisJaW50IG15RmllbGQ7CisJcHVibGljIHZvaWQgbWV0aG9kKCkgeworCX0KK30KKworcHVibGljIGNsYXNzIFJlbmFtZUNvbGxpc2lvbnMgeworCXByaXZhdGUgU3RyaW5nIG15RGVjbGFyYXRpb25Vc2FnZTsKKwlwdWJsaWMgU3RyaW5nIGRlY2xhcmF0aW9uVXNhZ2UoU3RyaW5nIHMpIHsKKwkJcmV0dXJuIHMgKyBteURlY2xhcmF0aW9uVXNhZ2U7CisJfQorCisJcHVibGljIHN0YXRpYyB2b2lkIHN0YXRpY0NvbnRleHQoKSB7CisJCVN0cmluZy5DQVNFX0lOU0VOU0lUSVZFX09SREVSLmdldENsYXNzKCk7CisJCVN0cmluZy52YWx1ZU9mKDApOworCX0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9yZW5hbWVDb2xsaXNpb25zL1JlbmFtZUNsYXNzTG9jYWxUb0FsaWVuTm9JbXBvcnRzLmphdmEuYWZ0ZXIgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVuYW1lQ29sbGlzaW9ucy9SZW5hbWVDbGFzc0xvY2FsVG9BbGllbk5vSW1wb3J0cy5qYXZhLmFmdGVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc3MWY3ZDcKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVuYW1lQ29sbGlzaW9ucy9SZW5hbWVDbGFzc0xvY2FsVG9BbGllbk5vSW1wb3J0cy5qYXZhLmFmdGVyCkBAIC0wLDAgKzEsMjAgQEAKK2NsYXNzIDxjYXJldD5TdHJpbmcgeworCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFNUQVRJQ19GSUVMRCA9IDU7CisJcHVibGljIHN0YXRpYyB2b2lkIHN0YXRpY01ldGhvZCgpIHsKKwl9CisJaW50IG15RmllbGQ7CisJcHVibGljIHZvaWQgbWV0aG9kKCkgeworCX0KK30KKworcHVibGljIGNsYXNzIFJlbmFtZUNvbGxpc2lvbnMgeworCXByaXZhdGUgamF2YS5sYW5nLlN0cmluZyBteURlY2xhcmF0aW9uVXNhZ2U7CisJcHVibGljIGphdmEubGFuZy5TdHJpbmcgZGVjbGFyYXRpb25Vc2FnZShqYXZhLmxhbmcuU3RyaW5nIHMpIHsKKwkJcmV0dXJuIHMgKyBteURlY2xhcmF0aW9uVXNhZ2U7CisJfQorCisJcHVibGljIHN0YXRpYyB2b2lkIHN0YXRpY0NvbnRleHQoKSB7CisJCWphdmEubGFuZy5TdHJpbmcuQ0FTRV9JTlNFTlNJVElWRV9PUkRFUi5nZXRDbGFzcygpOworCQlqYXZhLmxhbmcuU3RyaW5nLnZhbHVlT2YoMCk7CisJfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3JlbmFtZUNvbGxpc2lvbnMvUmVuYW1lQ2xhc3NMb2NhbFRvSW5uZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9yZW5hbWVDb2xsaXNpb25zL1JlbmFtZUNsYXNzTG9jYWxUb0lubmVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzk5OTgzZQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9yZW5hbWVDb2xsaXNpb25zL1JlbmFtZUNsYXNzTG9jYWxUb0lubmVyLmphdmEKQEAgLTAsMCArMSwzMSBAQAorcGFja2FnZSByZW5hbWVDb2xsaXNpb25zOworCitjbGFzcyA8Y2FyZXQ+TG9jYWxDbGFzcyB7CisJcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgU05fU1RBVElDX0ZJRUxEID0gMjsKKwlwdWJsaWMgc3RhdGljIHZvaWQgc25TdGF0aWNNZXRob2QoKSB7CisJfQorfQorCitwdWJsaWMgY2xhc3MgUmVuYW1lQ29sbGlzaW9ucyB7CisJcHVibGljIHN0YXRpYyBjbGFzcyBTdGF0aWNJbm5lckNsYXNzIHsKKwkJcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgU05fU1RBVElDX0ZJRUxEID0gMTA7CisJCXB1YmxpYyBzdGF0aWMgdm9pZCBzblN0YXRpY01ldGhvZCgpIHsKKwkJfQorCX0KKworCXB1YmxpYyB2b2lkIGluc3RhbmNlQ29udGV4dCgpIHsKKwkJTG9jYWxDbGFzcyBsb2NhbENsYXNzID0gbmV3IExvY2FsQ2xhc3MoKTsKKwkJaW50IHZhcjEgPSBMb2NhbENsYXNzLlNOX1NUQVRJQ19GSUVMRDsKKwkJTG9jYWxDbGFzcy5zblN0YXRpY01ldGhvZCgpOworCisJCVN0YXRpY0lubmVyQ2xhc3Mgc3RhdGljSW5uZXJDbGFzcyA9IG5ldyBTdGF0aWNJbm5lckNsYXNzKCk7CisJCWludCB2YXIzID0gU3RhdGljSW5uZXJDbGFzcy5TTl9TVEFUSUNfRklFTEQ7CisJCVN0YXRpY0lubmVyQ2xhc3Muc25TdGF0aWNNZXRob2QoKTsKKwl9CisKKwlwdWJsaWMgc3RhdGljIHZvaWQgc3RhdGljQ29udGV4dCgpIHsKKwkJU3RhdGljSW5uZXJDbGFzcyBzdGF0aWNJbm5lckNsYXNzID0gbmV3IFN0YXRpY0lubmVyQ2xhc3MoKTsKKwkJaW50IHZhcjIgPSBTdGF0aWNJbm5lckNsYXNzLlNOX1NUQVRJQ19GSUVMRDsKKwkJU3RhdGljSW5uZXJDbGFzcy5zblN0YXRpY01ldGhvZCgpOworCX0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9yZW5hbWVDb2xsaXNpb25zL1JlbmFtZUNsYXNzTG9jYWxUb0lubmVyLmphdmEuYWZ0ZXIgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVuYW1lQ29sbGlzaW9ucy9SZW5hbWVDbGFzc0xvY2FsVG9Jbm5lci5qYXZhLmFmdGVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE4ZTNiZGYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVuYW1lQ29sbGlzaW9ucy9SZW5hbWVDbGFzc0xvY2FsVG9Jbm5lci5qYXZhLmFmdGVyCkBAIC0wLDAgKzEsMzEgQEAKK3BhY2thZ2UgcmVuYW1lQ29sbGlzaW9uczsKKworY2xhc3MgU3RhdGljSW5uZXJDbGFzcyB7CisJcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgU05fU1RBVElDX0ZJRUxEID0gMjsKKwlwdWJsaWMgc3RhdGljIHZvaWQgc25TdGF0aWNNZXRob2QoKSB7CisJfQorfQorCitwdWJsaWMgY2xhc3MgUmVuYW1lQ29sbGlzaW9ucyB7CisJcHVibGljIHN0YXRpYyBjbGFzcyBTdGF0aWNJbm5lckNsYXNzIHsKKwkJcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgU05fU1RBVElDX0ZJRUxEID0gMTA7CisJCXB1YmxpYyBzdGF0aWMgdm9pZCBzblN0YXRpY01ldGhvZCgpIHsKKwkJfQorCX0KKworCXB1YmxpYyB2b2lkIGluc3RhbmNlQ29udGV4dCgpIHsKKwkJcmVuYW1lQ29sbGlzaW9ucy5TdGF0aWNJbm5lckNsYXNzIGxvY2FsQ2xhc3MgPSBuZXcgcmVuYW1lQ29sbGlzaW9ucy5TdGF0aWNJbm5lckNsYXNzKCk7CisJCWludCB2YXIxID0gcmVuYW1lQ29sbGlzaW9ucy5TdGF0aWNJbm5lckNsYXNzLlNOX1NUQVRJQ19GSUVMRDsKKwkJcmVuYW1lQ29sbGlzaW9ucy5TdGF0aWNJbm5lckNsYXNzLnNuU3RhdGljTWV0aG9kKCk7CisKKwkJcmVuYW1lQ29sbGlzaW9ucy5SZW5hbWVDb2xsaXNpb25zLlN0YXRpY0lubmVyQ2xhc3Mgc3RhdGljSW5uZXJDbGFzcyA9IG5ldyByZW5hbWVDb2xsaXNpb25zLlJlbmFtZUNvbGxpc2lvbnMuU3RhdGljSW5uZXJDbGFzcygpOworCQlpbnQgdmFyMyA9IHJlbmFtZUNvbGxpc2lvbnMuUmVuYW1lQ29sbGlzaW9ucy5TdGF0aWNJbm5lckNsYXNzLlNOX1NUQVRJQ19GSUVMRDsKKwkJcmVuYW1lQ29sbGlzaW9ucy5SZW5hbWVDb2xsaXNpb25zLlN0YXRpY0lubmVyQ2xhc3Muc25TdGF0aWNNZXRob2QoKTsKKwl9CisKKwlwdWJsaWMgc3RhdGljIHZvaWQgc3RhdGljQ29udGV4dCgpIHsKKwkJcmVuYW1lQ29sbGlzaW9ucy5SZW5hbWVDb2xsaXNpb25zLlN0YXRpY0lubmVyQ2xhc3Mgc3RhdGljSW5uZXJDbGFzcyA9IG5ldyByZW5hbWVDb2xsaXNpb25zLlJlbmFtZUNvbGxpc2lvbnMuU3RhdGljSW5uZXJDbGFzcygpOworCQlpbnQgdmFyMiA9IHJlbmFtZUNvbGxpc2lvbnMuUmVuYW1lQ29sbGlzaW9ucy5TdGF0aWNJbm5lckNsYXNzLlNOX1NUQVRJQ19GSUVMRDsKKwkJcmVuYW1lQ29sbGlzaW9ucy5SZW5hbWVDb2xsaXNpb25zLlN0YXRpY0lubmVyQ2xhc3Muc25TdGF0aWNNZXRob2QoKTsKKwl9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVuYW1lQ29sbGlzaW9ucy9SZW5hbWVDbGFzc1RoaXNGcW5Ub0FsaWVuLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVuYW1lQ29sbGlzaW9ucy9SZW5hbWVDbGFzc1RoaXNGcW5Ub0FsaWVuLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDM5MmZmNQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9yZW5hbWVDb2xsaXNpb25zL1JlbmFtZUNsYXNzVGhpc0ZxblRvQWxpZW4uamF2YQpAQCAtMCwwICsxLDM2IEBACitpbXBvcnQgc3RhdGljIGphdmEubGFuZy5TdHJpbmcuQ0FTRV9JTlNFTlNJVElWRV9PUkRFUjsKK2ltcG9ydCBzdGF0aWMgamF2YS5sYW5nLlN0cmluZy52YWx1ZU9mOworCitwdWJsaWMgY2xhc3MgUmVuYW1lQ29sbGlzaW9uczxjYXJldD4geworCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFNUQVRJQ19GSUVMRCA9IDU7CisJcHVibGljIHN0YXRpYyB2b2lkIHN0YXRpY01ldGhvZCgpIHsKKwl9CisJcHJpdmF0ZSBpbnQgbXlGaWVsZDsKKwlwdWJsaWMgdm9pZCBtZXRob2QoKSB7CisJfQorCisJcHVibGljIHZvaWQgaW5zdGFuY2VDb250ZXh0KCkgeworCQlDQVNFX0lOU0VOU0lUSVZFX09SREVSLmdldENsYXNzKCk7CisJCXZhbHVlT2YoMCk7CisKKwkJU3RyaW5nLkNBU0VfSU5TRU5TSVRJVkVfT1JERVIuZ2V0Q2xhc3MoKTsKKwkJU3RyaW5nLnZhbHVlT2YoMCk7CisKKwkJaW50IHZhcjYgPSBSZW5hbWVDb2xsaXNpb25zLlNUQVRJQ19GSUVMRDsKKwkJUmVuYW1lQ29sbGlzaW9ucy5zdGF0aWNNZXRob2QoKTsKKworCQl0aGlzLm15RmllbGQrKzsKKwkJdGhpcy5tZXRob2QoKTsKKwl9CisKKwlwdWJsaWMgc3RhdGljIHZvaWQgc3RhdGljQ29udGV4dCgpIHsKKwkJQ0FTRV9JTlNFTlNJVElWRV9PUkRFUi5nZXRDbGFzcygpOworCQl2YWx1ZU9mKDApOworCisJCVN0cmluZy5DQVNFX0lOU0VOU0lUSVZFX09SREVSLmdldENsYXNzKCk7CisJCVN0cmluZy52YWx1ZU9mKDApOworCisJCWludCB2YXI2ID0gUmVuYW1lQ29sbGlzaW9ucy5TVEFUSUNfRklFTEQ7CisJCVJlbmFtZUNvbGxpc2lvbnMuc3RhdGljTWV0aG9kKCk7CisJfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3JlbmFtZUNvbGxpc2lvbnMvUmVuYW1lQ2xhc3NUaGlzRnFuVG9BbGllbi5qYXZhLmFmdGVyIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3JlbmFtZUNvbGxpc2lvbnMvUmVuYW1lQ2xhc3NUaGlzRnFuVG9BbGllbi5qYXZhLmFmdGVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ5MTNkZDcKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVuYW1lQ29sbGlzaW9ucy9SZW5hbWVDbGFzc1RoaXNGcW5Ub0FsaWVuLmphdmEuYWZ0ZXIKQEAgLTAsMCArMSwzNiBAQAoraW1wb3J0IHN0YXRpYyBqYXZhLmxhbmcuU3RyaW5nLkNBU0VfSU5TRU5TSVRJVkVfT1JERVI7CitpbXBvcnQgc3RhdGljIGphdmEubGFuZy5TdHJpbmcudmFsdWVPZjsKKworcHVibGljIGNsYXNzIFN0cmluZzxjYXJldD4geworCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFNUQVRJQ19GSUVMRCA9IDU7CisJcHVibGljIHN0YXRpYyB2b2lkIHN0YXRpY01ldGhvZCgpIHsKKwl9CisJcHJpdmF0ZSBpbnQgbXlGaWVsZDsKKwlwdWJsaWMgdm9pZCBtZXRob2QoKSB7CisJfQorCisJcHVibGljIHZvaWQgaW5zdGFuY2VDb250ZXh0KCkgeworCQlDQVNFX0lOU0VOU0lUSVZFX09SREVSLmdldENsYXNzKCk7CisJCXZhbHVlT2YoMCk7CisKKwkJamF2YS5sYW5nLlN0cmluZy5DQVNFX0lOU0VOU0lUSVZFX09SREVSLmdldENsYXNzKCk7CisJCWphdmEubGFuZy5TdHJpbmcudmFsdWVPZigwKTsKKworCQlpbnQgdmFyNiA9IFN0cmluZy5TVEFUSUNfRklFTEQ7CisJCVN0cmluZy5zdGF0aWNNZXRob2QoKTsKKworCQl0aGlzLm15RmllbGQrKzsKKwkJdGhpcy5tZXRob2QoKTsKKwl9CisKKwlwdWJsaWMgc3RhdGljIHZvaWQgc3RhdGljQ29udGV4dCgpIHsKKwkJQ0FTRV9JTlNFTlNJVElWRV9PUkRFUi5nZXRDbGFzcygpOworCQl2YWx1ZU9mKDApOworCisJCWphdmEubGFuZy5TdHJpbmcuQ0FTRV9JTlNFTlNJVElWRV9PUkRFUi5nZXRDbGFzcygpOworCQlqYXZhLmxhbmcuU3RyaW5nLnZhbHVlT2YoMCk7CisKKwkJaW50IHZhcjYgPSBTdHJpbmcuU1RBVElDX0ZJRUxEOworCQlTdHJpbmcuc3RhdGljTWV0aG9kKCk7CisJfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3JlbmFtZUNvbGxpc2lvbnMvUmVuYW1lQ2xhc3NUaGlzVG9BbGllbi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3JlbmFtZUNvbGxpc2lvbnMvUmVuYW1lQ2xhc3NUaGlzVG9BbGllbi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ3NTdkMGEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVuYW1lQ29sbGlzaW9ucy9SZW5hbWVDbGFzc1RoaXNUb0FsaWVuLmphdmEKQEAgLTAsMCArMSw0MSBAQAoraW1wb3J0IHN0YXRpYyBqYXZhLmxhbmcuU3RyaW5nLkNBU0VfSU5TRU5TSVRJVkVfT1JERVI7CitpbXBvcnQgc3RhdGljIGphdmEubGFuZy5TdHJpbmcudmFsdWVPZjsKKworcHVibGljIGNsYXNzIFJlbmFtZUNvbGxpc2lvbnM8Y2FyZXQ+IHsKKwlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBTVEFUSUNfRklFTEQgPSA1OworCXB1YmxpYyBzdGF0aWMgdm9pZCBzdGF0aWNNZXRob2QoKSB7CisJfQorCXByaXZhdGUgaW50IG15RmllbGQ7CisJcHVibGljIHZvaWQgbWV0aG9kKCkgeworCX0KKworCXByaXZhdGUgU3RyaW5nIG15RGVjbGFyYXRpb25Vc2FnZTsKKwlwdWJsaWMgU3RyaW5nIGRlY2xhcmF0aW9uVXNhZ2UoU3RyaW5nIHMpIHsKKwkJcmV0dXJuIHMgKyBteURlY2xhcmF0aW9uVXNhZ2U7CisJfQorCisJcHVibGljIHZvaWQgaW5zdGFuY2VDb250ZXh0KCkgeworCQlDQVNFX0lOU0VOU0lUSVZFX09SREVSLmdldENsYXNzKCk7CisJCXZhbHVlT2YoMCk7CisKKwkJU3RyaW5nLkNBU0VfSU5TRU5TSVRJVkVfT1JERVIuZ2V0Q2xhc3MoKTsKKwkJU3RyaW5nLnZhbHVlT2YoMCk7CisKKwkJaW50IHZhcjYgPSBTVEFUSUNfRklFTEQ7CisJCXN0YXRpY01ldGhvZCgpOworCisJCW15RmllbGQrKzsKKwkJbWV0aG9kKCk7CisJfQorCisJcHVibGljIHN0YXRpYyB2b2lkIHN0YXRpY0NvbnRleHQoKSB7CisJCUNBU0VfSU5TRU5TSVRJVkVfT1JERVIuZ2V0Q2xhc3MoKTsKKwkJdmFsdWVPZigwKTsKKworCQlTdHJpbmcuQ0FTRV9JTlNFTlNJVElWRV9PUkRFUi5nZXRDbGFzcygpOworCQlTdHJpbmcudmFsdWVPZigwKTsKKworCQlpbnQgdmFyNiA9IFNUQVRJQ19GSUVMRDsKKwkJc3RhdGljTWV0aG9kKCk7CisJfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3JlbmFtZUNvbGxpc2lvbnMvUmVuYW1lQ2xhc3NUaGlzVG9BbGllbi5qYXZhLmFmdGVyIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3JlbmFtZUNvbGxpc2lvbnMvUmVuYW1lQ2xhc3NUaGlzVG9BbGllbi5qYXZhLmFmdGVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY5MGU1OTYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVuYW1lQ29sbGlzaW9ucy9SZW5hbWVDbGFzc1RoaXNUb0FsaWVuLmphdmEuYWZ0ZXIKQEAgLTAsMCArMSw0MSBAQAoraW1wb3J0IHN0YXRpYyBqYXZhLmxhbmcuU3RyaW5nLkNBU0VfSU5TRU5TSVRJVkVfT1JERVI7CitpbXBvcnQgc3RhdGljIGphdmEubGFuZy5TdHJpbmcudmFsdWVPZjsKKworcHVibGljIGNsYXNzIFN0cmluZzxjYXJldD4geworCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFNUQVRJQ19GSUVMRCA9IDU7CisJcHVibGljIHN0YXRpYyB2b2lkIHN0YXRpY01ldGhvZCgpIHsKKwl9CisJcHJpdmF0ZSBpbnQgbXlGaWVsZDsKKwlwdWJsaWMgdm9pZCBtZXRob2QoKSB7CisJfQorCisJcHJpdmF0ZSBqYXZhLmxhbmcuU3RyaW5nIG15RGVjbGFyYXRpb25Vc2FnZTsKKwlwdWJsaWMgamF2YS5sYW5nLlN0cmluZyBkZWNsYXJhdGlvblVzYWdlKGphdmEubGFuZy5TdHJpbmcgcykgeworCQlyZXR1cm4gcyArIG15RGVjbGFyYXRpb25Vc2FnZTsKKwl9CisKKwlwdWJsaWMgdm9pZCBpbnN0YW5jZUNvbnRleHQoKSB7CisJCUNBU0VfSU5TRU5TSVRJVkVfT1JERVIuZ2V0Q2xhc3MoKTsKKwkJdmFsdWVPZigwKTsKKworCQlqYXZhLmxhbmcuU3RyaW5nLkNBU0VfSU5TRU5TSVRJVkVfT1JERVIuZ2V0Q2xhc3MoKTsKKwkJamF2YS5sYW5nLlN0cmluZy52YWx1ZU9mKDApOworCisJCWludCB2YXI2ID0gU1RBVElDX0ZJRUxEOworCQlzdGF0aWNNZXRob2QoKTsKKworCQlteUZpZWxkKys7CisJCW1ldGhvZCgpOworCX0KKworCXB1YmxpYyBzdGF0aWMgdm9pZCBzdGF0aWNDb250ZXh0KCkgeworCQlDQVNFX0lOU0VOU0lUSVZFX09SREVSLmdldENsYXNzKCk7CisJCXZhbHVlT2YoMCk7CisKKwkJamF2YS5sYW5nLlN0cmluZy5DQVNFX0lOU0VOU0lUSVZFX09SREVSLmdldENsYXNzKCk7CisJCWphdmEubGFuZy5TdHJpbmcudmFsdWVPZigwKTsKKworCQlpbnQgdmFyNiA9IFNUQVRJQ19GSUVMRDsKKwkJc3RhdGljTWV0aG9kKCk7CisJfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3JlbmFtZUNvbGxpc2lvbnMvUmVuYW1lRmllbGRJblN1cGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVuYW1lQ29sbGlzaW9ucy9SZW5hbWVGaWVsZEluU3VwZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYTk5NTIzCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3JlbmFtZUNvbGxpc2lvbnMvUmVuYW1lRmllbGRJblN1cGVyLmphdmEKQEAgLTAsMCArMSwxMiBAQAorY2xhc3MgQSB7CisgICAgYm9vbGVhbiBfZzxjYXJldD5nOworfQorCitjbGFzcyBCIGV4dGVuZHMgQSB7CisgICAgY2xhc3MgRkYgeworICAgICAgICBwdWJsaWMgdm9pZCBzZXRHRyhib29sZWFuIGdnKSB7CisgICAgICAgICAgICAgICAgX2dnID0gZ2c7CisgICAgICAgICAgICB9CisgICAgfQorCit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3JlbmFtZUNvbGxpc2lvbnMvUmVuYW1lRmllbGRJblN1cGVyLmphdmEuYWZ0ZXIgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVuYW1lQ29sbGlzaW9ucy9SZW5hbWVGaWVsZEluU3VwZXIuamF2YS5hZnRlcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMzA3OTliCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3JlbmFtZUNvbGxpc2lvbnMvUmVuYW1lRmllbGRJblN1cGVyLmphdmEuYWZ0ZXIKQEAgLTAsMCArMSwxMiBAQAorY2xhc3MgQSB7CisgICAgYm9vbGVhbiBnZzsKK30KKworY2xhc3MgQiBleHRlbmRzIEEgeworICAgIGNsYXNzIEZGIHsKKyAgICAgICAgcHVibGljIHZvaWQgc2V0R0coYm9vbGVhbiBnZykgeworICAgICAgICAgICAgICAgIEIudGhpcy5nZyA9IGdnOworICAgICAgICAgICAgfQorICAgIH0KKworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9yZW5hbWVDb2xsaXNpb25zL1JlbmFtZUlubmVySW5TdXBlckNsYXNzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVuYW1lQ29sbGlzaW9ucy9SZW5hbWVJbm5lckluU3VwZXJDbGFzcy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUyMmNmNjZhCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3JlbmFtZUNvbGxpc2lvbnMvUmVuYW1lSW5uZXJJblN1cGVyQ2xhc3MuamF2YQpAQCAtMCwwICsxLDE5IEBACitjbGFzcyBBIHsKKyAgY2xhc3MgPGNhcmV0PkIgeworICAgIGludCB4ID0gNDI7CisgIH0KK30KKworcHVibGljIGNsYXNzIEQgeworICBzdGF0aWMgY2xhc3MgQyBleHRlbmRzIEEgeworICAgIGludCB4ID0gMjM7CisKKyAgICBpbnQgbSgpIHsKKyAgICAgIHJldHVybiBDLnRoaXMueDsKKyAgICB9CisgIH0KKworICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisgICAgU3lzdGVtLm91dC5wcmludGxuKG5ldyBDKCkubSgpKTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9yZW5hbWVDb2xsaXNpb25zL1JlbmFtZUlubmVySW5TdXBlckNsYXNzLmphdmEuYWZ0ZXIgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVuYW1lQ29sbGlzaW9ucy9SZW5hbWVJbm5lckluU3VwZXJDbGFzcy5qYXZhLmFmdGVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMyMTY3MWEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVuYW1lQ29sbGlzaW9ucy9SZW5hbWVJbm5lckluU3VwZXJDbGFzcy5qYXZhLmFmdGVyCkBAIC0wLDAgKzEsMTkgQEAKK2NsYXNzIEEgeworICBjbGFzcyBDIHsKKyAgICBpbnQgeCA9IDQyOworICB9Cit9CisKK3B1YmxpYyBjbGFzcyBEIHsKKyAgc3RhdGljIGNsYXNzIEMgZXh0ZW5kcyBBIHsKKyAgICBpbnQgeCA9IDIzOworCisgICAgaW50IG0oKSB7CisgICAgICByZXR1cm4gRC5DLnRoaXMueDsKKyAgICB9CisgIH0KKworICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisgICAgU3lzdGVtLm91dC5wcmludGxuKG5ldyBDKCkubSgpKTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9yZW5hbWVDb2xsaXNpb25zL1JlbmFtZUlubmVySW5TdXBlckNsYXNzU3RhdGljLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVuYW1lQ29sbGlzaW9ucy9SZW5hbWVJbm5lckluU3VwZXJDbGFzc1N0YXRpYy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjViNWQ3MjkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVuYW1lQ29sbGlzaW9ucy9SZW5hbWVJbm5lckluU3VwZXJDbGFzc1N0YXRpYy5qYXZhCkBAIC0wLDAgKzEsMTkgQEAKK2NsYXNzIEEgeworICBzdGF0aWMgY2xhc3MgPGNhcmV0PkIgeworICAgIHN0YXRpYyBpbnQgeCA9IDQyOworICB9Cit9CisKK3B1YmxpYyBjbGFzcyBEIHsKKyAgc3RhdGljIGNsYXNzIEMgZXh0ZW5kcyBBIHsKKyAgICBzdGF0aWMgaW50IHggPSAyMzsKKworICAgIHN0YXRpYyBpbnQgbSgpIHsKKyAgICAgIHJldHVybiBDLng7CisgICAgfQorICB9CisKKyAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworICAgIFN5c3RlbS5vdXQucHJpbnRsbihDLm0oKSk7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVuYW1lQ29sbGlzaW9ucy9SZW5hbWVJbm5lckluU3VwZXJDbGFzc1N0YXRpYy5qYXZhLmFmdGVyIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3JlbmFtZUNvbGxpc2lvbnMvUmVuYW1lSW5uZXJJblN1cGVyQ2xhc3NTdGF0aWMuamF2YS5hZnRlcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MDE5OTdiCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3JlbmFtZUNvbGxpc2lvbnMvUmVuYW1lSW5uZXJJblN1cGVyQ2xhc3NTdGF0aWMuamF2YS5hZnRlcgpAQCAtMCwwICsxLDE5IEBACitjbGFzcyBBIHsKKyAgc3RhdGljIGNsYXNzIEMgeworICAgIHN0YXRpYyBpbnQgeCA9IDQyOworICB9Cit9CisKK3B1YmxpYyBjbGFzcyBEIHsKKyAgc3RhdGljIGNsYXNzIEMgZXh0ZW5kcyBBIHsKKyAgICBzdGF0aWMgaW50IHggPSAyMzsKKworICAgIHN0YXRpYyBpbnQgbSgpIHsKKyAgICAgIHJldHVybiBELkMueDsKKyAgICB9CisgIH0KKworICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisgICAgU3lzdGVtLm91dC5wcmludGxuKEQuQy5tKCkpOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3JlbmFtZUNvbGxpc2lvbnMvUmVuYW1lTG9jYWxWYXJpYWJsZUhpZGVzRmllbGRJbkFub255bW91cy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3JlbmFtZUNvbGxpc2lvbnMvUmVuYW1lTG9jYWxWYXJpYWJsZUhpZGVzRmllbGRJbkFub255bW91cy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU4ZDE3YzI5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3JlbmFtZUNvbGxpc2lvbnMvUmVuYW1lTG9jYWxWYXJpYWJsZUhpZGVzRmllbGRJbkFub255bW91cy5qYXZhCkBAIC0wLDAgKzEsMTYgQEAKK3B1YmxpYyBjbGFzcyBBIHsKKyAgVGhyZWFkIG0oKSB7CisgICAgZmluYWwgaW50IHg8Y2FyZXQ+ID0gNDI7CisgICAgcmV0dXJuIG5ldyBUaHJlYWQoKSB7CisgICAgICBpbnQgeSA9IDIzOworCisgICAgICBwdWJsaWMgdm9pZCBydW4oKSB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbih4KTsKKyAgICAgIH0KKyAgICB9OworICB9CisKKyAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworICAgIG5ldyBBKCkubSgpLnN0YXJ0KCk7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVuYW1lQ29sbGlzaW9ucy9SZW5hbWVNZXRob2RDb2xsaXNpb25XaXRoT3RoZXJTaWduYXR1cmUuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9yZW5hbWVDb2xsaXNpb25zL1JlbmFtZU1ldGhvZENvbGxpc2lvbldpdGhPdGhlclNpZ25hdHVyZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI2MjczY2MKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVuYW1lQ29sbGlzaW9ucy9SZW5hbWVNZXRob2RDb2xsaXNpb25XaXRoT3RoZXJTaWduYXR1cmUuamF2YQpAQCAtMCwwICsxLDEyIEBACitjbGFzcyBSZW5hbWVUZXN0IHsKKyAgICBzdGF0aWMgdm9pZCBmbzxjYXJldD5vMShOdW1iZXIgbikgeworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIjEiKTsKKyAgICB9CisgICAgc3RhdGljIHZvaWQgZm9vMihMb25nIGkpIHsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIyIik7CisgICAgfQorICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKyAgICAgICAgbG9uZyBuID0gMDsKKyAgICAgICAgZm9vMShuKTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3JlbmFtZUNvbGxpc2lvbnMvUmVuYW1lTWV0aG9kSW5kaUluc3RhbmNlc0lubmVyVG9PdXRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3JlbmFtZUNvbGxpc2lvbnMvUmVuYW1lTWV0aG9kSW5kaUluc3RhbmNlc0lubmVyVG9PdXRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQzOTQ3YWEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVuYW1lQ29sbGlzaW9ucy9SZW5hbWVNZXRob2RJbmRpSW5zdGFuY2VzSW5uZXJUb091dGVyLmphdmEKQEAgLTAsMCArMSwxNiBAQAorcHVibGljIGNsYXNzIFJlbmFtZUNvbGxpc2lvbnMgeworICAgIHB1YmxpYyB2b2lkIG1ldGhvZCgpIHsKKyAgICB9CisKKyAgICBwdWJsaWMgc3RhdGljIGNsYXNzIFN0YXRpY0lubmVyQ2xhc3MgeworICAgICAgICBwdWJsaWMgdm9pZCA8Y2FyZXQ+c2lNZXRob2QoKSB7CisgICAgICAgIH0KKyAgICAgICAgcHVibGljIHZvaWQgaW5zdGFuY2VDb250ZXh0KCkgeworICAgICAgICAgICAgc2lNZXRob2QoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHB1YmxpYyB2b2lkIGluc3RhbmNlQ29udGV4dCgpIHsKKyAgICAgICAgbWV0aG9kKCk7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3JlbmFtZUNvbGxpc2lvbnMvUmVuYW1lTWV0aG9kSW5kaUluc3RhbmNlc0lubmVyVG9PdXRlci5qYXZhLmFmdGVyIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3JlbmFtZUNvbGxpc2lvbnMvUmVuYW1lTWV0aG9kSW5kaUluc3RhbmNlc0lubmVyVG9PdXRlci5qYXZhLmFmdGVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZhZGE5ZDVmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3JlbmFtZUNvbGxpc2lvbnMvUmVuYW1lTWV0aG9kSW5kaUluc3RhbmNlc0lubmVyVG9PdXRlci5qYXZhLmFmdGVyCkBAIC0wLDAgKzEsMTYgQEAKK3B1YmxpYyBjbGFzcyBSZW5hbWVDb2xsaXNpb25zIHsKKyAgICBwdWJsaWMgdm9pZCBtZXRob2QoKSB7CisgICAgfQorCisgICAgcHVibGljIHN0YXRpYyBjbGFzcyBTdGF0aWNJbm5lckNsYXNzIHsKKyAgICAgICAgcHVibGljIHZvaWQgPGNhcmV0Pm1ldGhvZCgpIHsKKyAgICAgICAgfQorICAgICAgICBwdWJsaWMgdm9pZCBpbnN0YW5jZUNvbnRleHQoKSB7CisgICAgICAgICAgICBtZXRob2QoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHB1YmxpYyB2b2lkIGluc3RhbmNlQ29udGV4dCgpIHsKKyAgICAgICAgbWV0aG9kKCk7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3JlbmFtZUNvbGxpc2lvbnMvUmVuYW1lTWV0aG9kSW5kaUluc3RhbmNlc091dGVyVG9Jbm5lci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3JlbmFtZUNvbGxpc2lvbnMvUmVuYW1lTWV0aG9kSW5kaUluc3RhbmNlc091dGVyVG9Jbm5lci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU4MTNiZDkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVuYW1lQ29sbGlzaW9ucy9SZW5hbWVNZXRob2RJbmRpSW5zdGFuY2VzT3V0ZXJUb0lubmVyLmphdmEKQEAgLTAsMCArMSwxNiBAQAorcHVibGljIGNsYXNzIFJlbmFtZUNvbGxpc2lvbnMgeworICAgIHB1YmxpYyB2b2lkIDxjYXJldD5tZXRob2QoKSB7CisgICAgfQorCisgICAgcHVibGljIHN0YXRpYyBjbGFzcyBTdGF0aWNJbm5lckNsYXNzIHsKKyAgICAgICAgcHVibGljIHZvaWQgc2lNZXRob2QoKSB7CisgICAgICAgIH0KKyAgICAgICAgcHVibGljIHZvaWQgaW5zdGFuY2VDb250ZXh0KCkgeworICAgICAgICAgICAgc2lNZXRob2QoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHB1YmxpYyB2b2lkIGluc3RhbmNlQ29udGV4dCgpIHsKKyAgICAgICAgbWV0aG9kKCk7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3JlbmFtZUNvbGxpc2lvbnMvUmVuYW1lTWV0aG9kSW5kaUluc3RhbmNlc091dGVyVG9Jbm5lci5qYXZhLmFmdGVyIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3JlbmFtZUNvbGxpc2lvbnMvUmVuYW1lTWV0aG9kSW5kaUluc3RhbmNlc091dGVyVG9Jbm5lci5qYXZhLmFmdGVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE3ZjYxYmMzCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3JlbmFtZUNvbGxpc2lvbnMvUmVuYW1lTWV0aG9kSW5kaUluc3RhbmNlc091dGVyVG9Jbm5lci5qYXZhLmFmdGVyCkBAIC0wLDAgKzEsMTYgQEAKK3B1YmxpYyBjbGFzcyBSZW5hbWVDb2xsaXNpb25zIHsKKyAgICBwdWJsaWMgdm9pZCA8Y2FyZXQ+c2lNZXRob2QoKSB7CisgICAgfQorCisgICAgcHVibGljIHN0YXRpYyBjbGFzcyBTdGF0aWNJbm5lckNsYXNzIHsKKyAgICAgICAgcHVibGljIHZvaWQgc2lNZXRob2QoKSB7CisgICAgICAgIH0KKyAgICAgICAgcHVibGljIHZvaWQgaW5zdGFuY2VDb250ZXh0KCkgeworICAgICAgICAgICAgc2lNZXRob2QoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHB1YmxpYyB2b2lkIGluc3RhbmNlQ29udGV4dCgpIHsKKyAgICAgICAgc2lNZXRob2QoKTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVuYW1lQ29sbGlzaW9ucy9SZW5hbWVNZXRob2RJbm5lckluc3RhbmNlVG9PdXRlckluc3RhbmNlLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVuYW1lQ29sbGlzaW9ucy9SZW5hbWVNZXRob2RJbm5lckluc3RhbmNlVG9PdXRlckluc3RhbmNlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjk5M2M2MQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9yZW5hbWVDb2xsaXNpb25zL1JlbmFtZU1ldGhvZElubmVySW5zdGFuY2VUb091dGVySW5zdGFuY2UuamF2YQpAQCAtMCwwICsxLDEyIEBACitwdWJsaWMgY2xhc3MgUmVuYW1lQ29sbGlzaW9ucyB7CisgICAgcHVibGljIHZvaWQgbWV0aG9kKCkgeworICAgIH0KKyAgICBjbGFzcyBJbm5lckNsYXNzIHsKKyAgICAgICAgcHVibGljIHZvaWQgPGNhcmV0PmlubmVyTWV0aG9kKCkgeworICAgICAgICB9CisgICAgICAgIHB1YmxpYyB2b2lkIGluc3RhbmNlQ29udGV4dCgpIHsKKyAgICAgICAgICAgIG1ldGhvZCgpOworICAgICAgICAgICAgaW5uZXJNZXRob2QoKTsKKyAgICAgICAgfQorICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9yZW5hbWVDb2xsaXNpb25zL1JlbmFtZU1ldGhvZElubmVySW5zdGFuY2VUb091dGVySW5zdGFuY2UuamF2YS5hZnRlciBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9yZW5hbWVDb2xsaXNpb25zL1JlbmFtZU1ldGhvZElubmVySW5zdGFuY2VUb091dGVySW5zdGFuY2UuamF2YS5hZnRlcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MTQxY2NiCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3JlbmFtZUNvbGxpc2lvbnMvUmVuYW1lTWV0aG9kSW5uZXJJbnN0YW5jZVRvT3V0ZXJJbnN0YW5jZS5qYXZhLmFmdGVyCkBAIC0wLDAgKzEsMTIgQEAKK3B1YmxpYyBjbGFzcyBSZW5hbWVDb2xsaXNpb25zIHsKKyAgICBwdWJsaWMgdm9pZCBtZXRob2QoKSB7CisgICAgfQorICAgIGNsYXNzIElubmVyQ2xhc3MgeworICAgICAgICBwdWJsaWMgdm9pZCA8Y2FyZXQ+bWV0aG9kKCkgeworICAgICAgICB9CisgICAgICAgIHB1YmxpYyB2b2lkIGluc3RhbmNlQ29udGV4dCgpIHsKKyAgICAgICAgICAgIFJlbmFtZUNvbGxpc2lvbnMudGhpcy5tZXRob2QoKTsKKyAgICAgICAgICAgIG1ldGhvZCgpOworICAgICAgICB9CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3JlbmFtZUNvbGxpc2lvbnMvUmVuYW1lTWV0aG9kSW5uZXJTdGF0aWNUb091dGVyU3RhdGljLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVuYW1lQ29sbGlzaW9ucy9SZW5hbWVNZXRob2RJbm5lclN0YXRpY1RvT3V0ZXJTdGF0aWMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMGVmMDc0Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3JlbmFtZUNvbGxpc2lvbnMvUmVuYW1lTWV0aG9kSW5uZXJTdGF0aWNUb091dGVyU3RhdGljLmphdmEKQEAgLTAsMCArMSwxNiBAQAorcHVibGljIGNsYXNzIFJlbmFtZUNvbGxpc2lvbnMgeworICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBzdGF0aWNNZXRob2QoKSB7CisgICAgfQorICAgIHB1YmxpYyBzdGF0aWMgY2xhc3MgU3RhdGljSW5uZXJDbGFzcyB7CisgICAgICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBzaVN0YXRpY01ldGhvZDxjYXJldD4oKSB7CisgICAgICAgIH0KKyAgICAgICAgcHVibGljIHZvaWQgaW5zdGFuY2VDb250ZXh0KCkgeworICAgICAgICAgICAgc3RhdGljTWV0aG9kKCk7CisgICAgICAgICAgICBzaVN0YXRpY01ldGhvZCgpOworICAgICAgICB9CisgICAgICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBzdGF0aWNDb250ZXh0KCkgeworICAgICAgICAgICAgc3RhdGljTWV0aG9kKCk7CisgICAgICAgICAgICBzaVN0YXRpY01ldGhvZCgpOworICAgICAgICB9CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3JlbmFtZUNvbGxpc2lvbnMvUmVuYW1lTWV0aG9kSW5uZXJTdGF0aWNUb091dGVyU3RhdGljLmphdmEuYWZ0ZXIgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVuYW1lQ29sbGlzaW9ucy9SZW5hbWVNZXRob2RJbm5lclN0YXRpY1RvT3V0ZXJTdGF0aWMuamF2YS5hZnRlcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYzQ5MWJiCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3JlbmFtZUNvbGxpc2lvbnMvUmVuYW1lTWV0aG9kSW5uZXJTdGF0aWNUb091dGVyU3RhdGljLmphdmEuYWZ0ZXIKQEAgLTAsMCArMSwxNiBAQAorcHVibGljIGNsYXNzIFJlbmFtZUNvbGxpc2lvbnMgeworICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBzdGF0aWNNZXRob2QoKSB7CisgICAgfQorICAgIHB1YmxpYyBzdGF0aWMgY2xhc3MgU3RhdGljSW5uZXJDbGFzcyB7CisgICAgICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBzdGF0aWNNZXRob2Q8Y2FyZXQ+KCkgeworICAgICAgICB9CisgICAgICAgIHB1YmxpYyB2b2lkIGluc3RhbmNlQ29udGV4dCgpIHsKKyAgICAgICAgICAgIFJlbmFtZUNvbGxpc2lvbnMuc3RhdGljTWV0aG9kKCk7CisgICAgICAgICAgICBzdGF0aWNNZXRob2QoKTsKKyAgICAgICAgfQorICAgICAgICBwdWJsaWMgc3RhdGljIHZvaWQgc3RhdGljQ29udGV4dCgpIHsKKyAgICAgICAgICAgIFJlbmFtZUNvbGxpc2lvbnMuc3RhdGljTWV0aG9kKCk7CisgICAgICAgICAgICBzdGF0aWNNZXRob2QoKTsKKyAgICAgICAgfQorICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9yZW5hbWVDb2xsaXNpb25zL1JlbmFtZU1ldGhvZE5vQ29sbGlzaW9uV2l0aE90aGVyU2lnbmF0dXJlLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVuYW1lQ29sbGlzaW9ucy9SZW5hbWVNZXRob2ROb0NvbGxpc2lvbldpdGhPdGhlclNpZ25hdHVyZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY2MTg2MWEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVuYW1lQ29sbGlzaW9ucy9SZW5hbWVNZXRob2ROb0NvbGxpc2lvbldpdGhPdGhlclNpZ25hdHVyZS5qYXZhCkBAIC0wLDAgKzEsMjcgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwMC0yMDEyIEpldEJyYWlucyBzLnIuby4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCitjbGFzcyBSZW5hbWVUZXN0IHsKKyAgICBzdGF0aWMgdm9pZCBmbzxjYXJldD5vMShOdW1iZXIgbikgeworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIjEiKTsKKyAgICB9CisgICAgc3RhdGljIHZvaWQgZm9vMihTdHJpbmcgaSkgeworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIjIiKTsKKyAgICB9CisgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworICAgICAgICBsb25nIG4gPSAwOworICAgICAgICBmb28xKG4pOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVuYW1lQ29sbGlzaW9ucy9SZW5hbWVNZXRob2ROb0NvbGxpc2lvbldpdGhPdGhlclNpZ25hdHVyZS5qYXZhLmFmdGVyIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3JlbmFtZUNvbGxpc2lvbnMvUmVuYW1lTWV0aG9kTm9Db2xsaXNpb25XaXRoT3RoZXJTaWduYXR1cmUuamF2YS5hZnRlcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NTdkNDJhCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3JlbmFtZUNvbGxpc2lvbnMvUmVuYW1lTWV0aG9kTm9Db2xsaXNpb25XaXRoT3RoZXJTaWduYXR1cmUuamF2YS5hZnRlcgpAQCAtMCwwICsxLDI3IEBACisvKgorICogQ29weXJpZ2h0IDIwMDAtMjAxMiBKZXRCcmFpbnMgcy5yLm8uCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworY2xhc3MgUmVuYW1lVGVzdCB7CisgICAgc3RhdGljIHZvaWQgZm9vMihOdW1iZXIgbikgeworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIjEiKTsKKyAgICB9CisgICAgc3RhdGljIHZvaWQgZm9vMihTdHJpbmcgaSkgeworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIjIiKTsKKyAgICB9CisgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworICAgICAgICBsb25nIG4gPSAwOworICAgICAgICBmb28yKG4pOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVuYW1lQ29sbGlzaW9ucy9SZW5hbWVNZXRob2RPdXRlckluc3RhbmNlVG9Jbm5lckluc3RhbmNlLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVuYW1lQ29sbGlzaW9ucy9SZW5hbWVNZXRob2RPdXRlckluc3RhbmNlVG9Jbm5lckluc3RhbmNlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzJhMjEzNgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9yZW5hbWVDb2xsaXNpb25zL1JlbmFtZU1ldGhvZE91dGVySW5zdGFuY2VUb0lubmVySW5zdGFuY2UuamF2YQpAQCAtMCwwICsxLDEyIEBACitwdWJsaWMgY2xhc3MgUmVuYW1lQ29sbGlzaW9ucyB7CisgICAgcHVibGljIHZvaWQgPGNhcmV0Pm1ldGhvZCgpIHsKKyAgICB9CisgICAgY2xhc3MgSW5uZXJDbGFzcyB7CisgICAgICAgIHB1YmxpYyB2b2lkIGlubmVyTWV0aG9kKCkgeworICAgICAgICB9CisgICAgICAgIHB1YmxpYyB2b2lkIGluc3RhbmNlQ29udGV4dCgpIHsKKyAgICAgICAgICAgIG1ldGhvZCgpOworICAgICAgICAgICAgaW5uZXJNZXRob2QoKTsKKyAgICAgICAgfQorICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9yZW5hbWVDb2xsaXNpb25zL1JlbmFtZU1ldGhvZE91dGVySW5zdGFuY2VUb0lubmVySW5zdGFuY2UuamF2YS5hZnRlciBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9yZW5hbWVDb2xsaXNpb25zL1JlbmFtZU1ldGhvZE91dGVySW5zdGFuY2VUb0lubmVySW5zdGFuY2UuamF2YS5hZnRlcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNzA0MzQ4Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3JlbmFtZUNvbGxpc2lvbnMvUmVuYW1lTWV0aG9kT3V0ZXJJbnN0YW5jZVRvSW5uZXJJbnN0YW5jZS5qYXZhLmFmdGVyCkBAIC0wLDAgKzEsMTIgQEAKK3B1YmxpYyBjbGFzcyBSZW5hbWVDb2xsaXNpb25zIHsKKyAgICBwdWJsaWMgdm9pZCA8Y2FyZXQ+aW5uZXJNZXRob2QoKSB7CisgICAgfQorICAgIGNsYXNzIElubmVyQ2xhc3MgeworICAgICAgICBwdWJsaWMgdm9pZCBpbm5lck1ldGhvZCgpIHsKKyAgICAgICAgfQorICAgICAgICBwdWJsaWMgdm9pZCBpbnN0YW5jZUNvbnRleHQoKSB7CisgICAgICAgICAgICBSZW5hbWVDb2xsaXNpb25zLnRoaXMuaW5uZXJNZXRob2QoKTsKKyAgICAgICAgICAgIGlubmVyTWV0aG9kKCk7CisgICAgICAgIH0KKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVuYW1lQ29sbGlzaW9ucy9SZW5hbWVNZXRob2RPdXRlclN0YXRpY1RvSW5uZXJTdGF0aWMuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9yZW5hbWVDb2xsaXNpb25zL1JlbmFtZU1ldGhvZE91dGVyU3RhdGljVG9Jbm5lclN0YXRpYy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFmZGExOWQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVuYW1lQ29sbGlzaW9ucy9SZW5hbWVNZXRob2RPdXRlclN0YXRpY1RvSW5uZXJTdGF0aWMuamF2YQpAQCAtMCwwICsxLDE3IEBACitwdWJsaWMgY2xhc3MgUmVuYW1lQ29sbGlzaW9ucyB7CisgICAgcHVibGljIHN0YXRpYyB2b2lkIHN0YXRpY01ldGhvZDxjYXJldD4oKSB7CisgICAgfQorCisgICAgcHVibGljIHN0YXRpYyBjbGFzcyBTdGF0aWNJbm5lckNsYXNzIHsKKyAgICAgICAgcHVibGljIHN0YXRpYyB2b2lkIHNpU3RhdGljTWV0aG9kKCkgeworICAgICAgICB9CisgICAgICAgIHB1YmxpYyB2b2lkIGluc3RhbmNlQ29udGV4dCgpIHsKKyAgICAgICAgICAgIHN0YXRpY01ldGhvZCgpOworICAgICAgICAgICAgc2lTdGF0aWNNZXRob2QoKTsKKyAgICAgICAgfQorICAgICAgICBwdWJsaWMgc3RhdGljIHZvaWQgc3RhdGljQ29udGV4dCgpIHsKKyAgICAgICAgICAgIHN0YXRpY01ldGhvZCgpOworICAgICAgICAgICAgc2lTdGF0aWNNZXRob2QoKTsKKyAgICAgICAgfQorICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9yZW5hbWVDb2xsaXNpb25zL1JlbmFtZU1ldGhvZE91dGVyU3RhdGljVG9Jbm5lclN0YXRpYy5qYXZhLmFmdGVyIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3JlbmFtZUNvbGxpc2lvbnMvUmVuYW1lTWV0aG9kT3V0ZXJTdGF0aWNUb0lubmVyU3RhdGljLmphdmEuYWZ0ZXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmRhODExNgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9yZW5hbWVDb2xsaXNpb25zL1JlbmFtZU1ldGhvZE91dGVyU3RhdGljVG9Jbm5lclN0YXRpYy5qYXZhLmFmdGVyCkBAIC0wLDAgKzEsMTcgQEAKK3B1YmxpYyBjbGFzcyBSZW5hbWVDb2xsaXNpb25zIHsKKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgc2lTdGF0aWNNZXRob2Q8Y2FyZXQ+KCkgeworICAgIH0KKworICAgIHB1YmxpYyBzdGF0aWMgY2xhc3MgU3RhdGljSW5uZXJDbGFzcyB7CisgICAgICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBzaVN0YXRpY01ldGhvZCgpIHsKKyAgICAgICAgfQorICAgICAgICBwdWJsaWMgdm9pZCBpbnN0YW5jZUNvbnRleHQoKSB7CisgICAgICAgICAgICBSZW5hbWVDb2xsaXNpb25zLnNpU3RhdGljTWV0aG9kKCk7CisgICAgICAgICAgICBzaVN0YXRpY01ldGhvZCgpOworICAgICAgICB9CisgICAgICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBzdGF0aWNDb250ZXh0KCkgeworICAgICAgICAgICAgUmVuYW1lQ29sbGlzaW9ucy5zaVN0YXRpY01ldGhvZCgpOworICAgICAgICAgICAgc2lTdGF0aWNNZXRob2QoKTsKKyAgICAgICAgfQorICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9yZW5hbWVDb2xsaXNpb25zL1JlbmFtZU1ldGhvZFN0YXRpY1RvQWxpZW4uamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9yZW5hbWVDb2xsaXNpb25zL1JlbmFtZU1ldGhvZFN0YXRpY1RvQWxpZW4uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYzIwZTUyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3JlbmFtZUNvbGxpc2lvbnMvUmVuYW1lTWV0aG9kU3RhdGljVG9BbGllbi5qYXZhCkBAIC0wLDAgKzEsMTAgQEAKK2ltcG9ydCBzdGF0aWMgamF2YS5sYW5nLlN0cmluZy52YWx1ZU9mOworCitwdWJsaWMgY2xhc3MgUmVuYW1lQ29sbGlzaW9ucyB7CisgICAgcHVibGljIHN0YXRpYyBjbGFzcyBTdGF0aWNJbm5lckNsYXNzIHsKKyAgICAgICAgcHVibGljIHN0YXRpYyB2b2lkIHNpTWV0aG9kPGNhcmV0PigpIHt9CisgICAgICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBzdGF0aWNDb250ZXh0KCkgeworICAgICAgICAgICAgdmFsdWVPZigwKTsKKyAgICAgICAgfQorICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9yZW5hbWVDb2xsaXNpb25zL1JlbmFtZU1ldGhvZFN0YXRpY1RvQWxpZW4uamF2YS5hZnRlciBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9yZW5hbWVDb2xsaXNpb25zL1JlbmFtZU1ldGhvZFN0YXRpY1RvQWxpZW4uamF2YS5hZnRlcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMTVhMDcwCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3JlbmFtZUNvbGxpc2lvbnMvUmVuYW1lTWV0aG9kU3RhdGljVG9BbGllbi5qYXZhLmFmdGVyCkBAIC0wLDAgKzEsMTAgQEAKK2ltcG9ydCBzdGF0aWMgamF2YS5sYW5nLlN0cmluZy52YWx1ZU9mOworCitwdWJsaWMgY2xhc3MgUmVuYW1lQ29sbGlzaW9ucyB7CisgICAgcHVibGljIHN0YXRpYyBjbGFzcyBTdGF0aWNJbm5lckNsYXNzIHsKKyAgICAgICAgcHVibGljIHN0YXRpYyB2b2lkIHZhbHVlT2Y8Y2FyZXQ+KCkge30KKyAgICAgICAgcHVibGljIHN0YXRpYyB2b2lkIHN0YXRpY0NvbnRleHQoKSB7CisgICAgICAgICAgICBTdHJpbmcudmFsdWVPZigwKTsKKyAgICAgICAgfQorICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9yZW5hbWVDb2xsaXNpb25zL1JlbmFtZVN0YXRpY01ldGhvZFR5cGVQYXJhbWV0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9yZW5hbWVDb2xsaXNpb25zL1JlbmFtZVN0YXRpY01ldGhvZFR5cGVQYXJhbWV0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNGY0YzIxCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3JlbmFtZUNvbGxpc2lvbnMvUmVuYW1lU3RhdGljTWV0aG9kVHlwZVBhcmFtZXRlci5qYXZhCkBAIC0wLDAgKzEsNyBAQAorcHVibGljIGNsYXNzIEhvbGRlcjxFPiB7CisgIHByaXZhdGUgZmluYWwgRSBlbGVtOworCisgIHByaXZhdGUgSG9sZGVyKEUgZWxlbSkgeyB0aGlzLmVsZW0gPSBlbGVtOyB9CisKKyAgcHVibGljIHN0YXRpYyA8PGNhcmV0Plg+IEhvbGRlcjxYPiBvZihYIGVsZW0pIHsgcmV0dXJuIG5ldyBIb2xkZXI8WD4oZWxlbSk7IH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVuYW1lQ29sbGlzaW9ucy9SZW5hbWVTdGF0aWNNZXRob2RUeXBlUGFyYW1ldGVyLmphdmEuYWZ0ZXIgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVuYW1lQ29sbGlzaW9ucy9SZW5hbWVTdGF0aWNNZXRob2RUeXBlUGFyYW1ldGVyLmphdmEuYWZ0ZXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjBiNGY4MQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9yZW5hbWVDb2xsaXNpb25zL1JlbmFtZVN0YXRpY01ldGhvZFR5cGVQYXJhbWV0ZXIuamF2YS5hZnRlcgpAQCAtMCwwICsxLDcgQEAKK3B1YmxpYyBjbGFzcyBIb2xkZXI8RT4geworICBwcml2YXRlIGZpbmFsIEUgZWxlbTsKKworICBwcml2YXRlIEhvbGRlcihFIGVsZW0pIHsgdGhpcy5lbGVtID0gZWxlbTsgfQorCisgIHB1YmxpYyBzdGF0aWMgPEU+IEhvbGRlcjxFPiBvZihFIGVsZW0pIHsgcmV0dXJuIG5ldyBIb2xkZXI8RT4oZWxlbSk7IH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVuYW1lQ29sbGlzaW9ucy9SZW5hbWVUeXBlUGFyYW1ldGVyVG9FeGlzdGluZ0NsYXNzTmFtZS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3JlbmFtZUNvbGxpc2lvbnMvUmVuYW1lVHlwZVBhcmFtZXRlclRvRXhpc3RpbmdDbGFzc05hbWUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYmM4ZjIwCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3JlbmFtZUNvbGxpc2lvbnMvUmVuYW1lVHlwZVBhcmFtZXRlclRvRXhpc3RpbmdDbGFzc05hbWUuamF2YQpAQCAtMCwwICsxLDMgQEAKK3B1YmxpYyBjbGFzcyBUZXN0PFQ8Y2FyZXQ+IGV4dGVuZHMgU3RyaW5nPiB7fQorCitjbGFzcyBQIHt9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3JlbmFtZUNvbGxpc2lvbnMvUmVuYW1lVHlwZVBhcmFtZXRlclRvRXhpc3RpbmdDbGFzc05hbWUuamF2YS5hZnRlciBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9yZW5hbWVDb2xsaXNpb25zL1JlbmFtZVR5cGVQYXJhbWV0ZXJUb0V4aXN0aW5nQ2xhc3NOYW1lLmphdmEuYWZ0ZXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjRmOWFiMAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9yZW5hbWVDb2xsaXNpb25zL1JlbmFtZVR5cGVQYXJhbWV0ZXJUb0V4aXN0aW5nQ2xhc3NOYW1lLmphdmEuYWZ0ZXIKQEAgLTAsMCArMSwzIEBACitwdWJsaWMgY2xhc3MgVGVzdDxQIGV4dGVuZHMgU3RyaW5nPiB7fQorCitjbGFzcyBQIHt9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3JlbmFtZUNvbGxpc2lvbnMvUmVuYW1lVmFyQ29uc3RUb0FsaWVuLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVuYW1lQ29sbGlzaW9ucy9SZW5hbWVWYXJDb25zdFRvQWxpZW4uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YWNjMGJhCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3JlbmFtZUNvbGxpc2lvbnMvUmVuYW1lVmFyQ29uc3RUb0FsaWVuLmphdmEKQEAgLTAsMCArMSwxMCBAQAoraW1wb3J0IHN0YXRpYyBqYXZhLmxhbmcuU3RyaW5nLkNBU0VfSU5TRU5TSVRJVkVfT1JERVI7CisKK3B1YmxpYyBjbGFzcyBSZW5hbWVDb2xsaXNpb25zIHsKKyAgICBwdWJsaWMgc3RhdGljIGNsYXNzIFN0YXRpY0lubmVyQ2xhc3MgeworICAgICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBTSV9TVEFUSUNfRklFTEQ8Y2FyZXQ+ID0gOTsKKyAgICAgICAgcHVibGljIHN0YXRpYyB2b2lkIHN0YXRpY0NvbnRleHQoKSB7CisgICAgICAgICAgICBDQVNFX0lOU0VOU0lUSVZFX09SREVSLmdldENsYXNzKCk7CisgICAgICAgIH0KKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVuYW1lQ29sbGlzaW9ucy9SZW5hbWVWYXJDb25zdFRvQWxpZW4uamF2YS5hZnRlciBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9yZW5hbWVDb2xsaXNpb25zL1JlbmFtZVZhckNvbnN0VG9BbGllbi5qYXZhLmFmdGVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk2OTE3MDEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVuYW1lQ29sbGlzaW9ucy9SZW5hbWVWYXJDb25zdFRvQWxpZW4uamF2YS5hZnRlcgpAQCAtMCwwICsxLDggQEAKK3B1YmxpYyBjbGFzcyBSZW5hbWVDb2xsaXNpb25zIHsKKyAgICBwdWJsaWMgc3RhdGljIGNsYXNzIFN0YXRpY0lubmVyQ2xhc3MgeworICAgICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBDQVNFX0lOU0VOU0lUSVZFX09SREVSPGNhcmV0PiA9IDk7CisgICAgICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBzdGF0aWNDb250ZXh0KCkgeworICAgICAgICAgICAgU3RyaW5nLkNBU0VfSU5TRU5TSVRJVkVfT1JERVIuZ2V0Q2xhc3MoKTsKKyAgICAgICAgfQorICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9yZW5hbWVDb2xsaXNpb25zL1JlbmFtZVZhckNvbnN0VG9BbGllbjEuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9yZW5hbWVDb2xsaXNpb25zL1JlbmFtZVZhckNvbnN0VG9BbGllbjEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZWMxMDc5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3JlbmFtZUNvbGxpc2lvbnMvUmVuYW1lVmFyQ29uc3RUb0FsaWVuMS5qYXZhCkBAIC0wLDAgKzEsMTAgQEAKK2ltcG9ydCBzdGF0aWMgamF2YS5sYW5nLlN0cmluZy52YWx1ZU9mOworCitwdWJsaWMgY2xhc3MgUmVuYW1lQ29sbGlzaW9ucyB7CisgICAgcHVibGljIHN0YXRpYyBjbGFzcyBTdGF0aWNJbm5lckNsYXNzIHsKKyAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgU0lfU1RBVElDX0ZJRUxEPGNhcmV0PiA9IDk7CisgICAgICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBzdGF0aWNDb250ZXh0KCkgeworICAgICAgICAgICAgdmFsdWVPZihudWxsKTsKKyAgICAgICAgfQorICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9yZW5hbWVDb2xsaXNpb25zL1JlbmFtZVZhckNvbnN0VG9BbGllbjEuamF2YS5hZnRlciBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9yZW5hbWVDb2xsaXNpb25zL1JlbmFtZVZhckNvbnN0VG9BbGllbjEuamF2YS5hZnRlcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MDA2ZmI2Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3JlbmFtZUNvbGxpc2lvbnMvUmVuYW1lVmFyQ29uc3RUb0FsaWVuMS5qYXZhLmFmdGVyCkBAIC0wLDAgKzEsMTAgQEAKK2ltcG9ydCBzdGF0aWMgamF2YS5sYW5nLlN0cmluZy52YWx1ZU9mOworCitwdWJsaWMgY2xhc3MgUmVuYW1lQ29sbGlzaW9ucyB7CisgICAgcHVibGljIHN0YXRpYyBjbGFzcyBTdGF0aWNJbm5lckNsYXNzIHsKKyAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQ0FTRV9JTlNFTlNJVElWRV9PUkRFUjxjYXJldD4gPSA5OworICAgICAgICBwdWJsaWMgc3RhdGljIHZvaWQgc3RhdGljQ29udGV4dCgpIHsKKyAgICAgICAgICAgIHZhbHVlT2YobnVsbCk7CisgICAgICAgIH0KKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVuYW1lQ29sbGlzaW9ucy9SZW5hbWVWYXJDb25zdFRvUGFyYW0uamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9yZW5hbWVDb2xsaXNpb25zL1JlbmFtZVZhckNvbnN0VG9QYXJhbS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQyNjc0ZDMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVuYW1lQ29sbGlzaW9ucy9SZW5hbWVWYXJDb25zdFRvUGFyYW0uamF2YQpAQCAtMCwwICsxLDkgQEAKK3B1YmxpYyBjbGFzcyBSZW5hbWVDb2xsaXNpb25zIHsKKyAgICBwcml2YXRlIGNsYXNzIElubmVyQ2xhc3MgeworICAgICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBJTk5FUl9TVEFUSUNfRklFTEQ8Y2FyZXQ+ID0gMTM7CisgICAgICAgIHB1YmxpYyB2b2lkIGluc3RhbmNlQ29udGV4dChpbnQgcGFyYW0zKSB7CisgICAgICAgICAgICBpbnQgbG9jYWxWYXIzID0gMDsKKyAgICAgICAgICAgIGludCB2YXIxID0gbG9jYWxWYXIzICsgcGFyYW0zICsgSU5ORVJfU1RBVElDX0ZJRUxEOworICAgICAgICB9CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3JlbmFtZUNvbGxpc2lvbnMvUmVuYW1lVmFyQ29uc3RUb1BhcmFtLmphdmEuYWZ0ZXIgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVuYW1lQ29sbGlzaW9ucy9SZW5hbWVWYXJDb25zdFRvUGFyYW0uamF2YS5hZnRlcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYWVhYTk1Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3JlbmFtZUNvbGxpc2lvbnMvUmVuYW1lVmFyQ29uc3RUb1BhcmFtLmphdmEuYWZ0ZXIKQEAgLTAsMCArMSw5IEBACitwdWJsaWMgY2xhc3MgUmVuYW1lQ29sbGlzaW9ucyB7CisgICAgcHJpdmF0ZSBjbGFzcyBJbm5lckNsYXNzIHsKKyAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgcGFyYW0zPGNhcmV0PiA9IDEzOworICAgICAgICBwdWJsaWMgdm9pZCBpbnN0YW5jZUNvbnRleHQoaW50IHBhcmFtMykgeworICAgICAgICAgICAgaW50IGxvY2FsVmFyMyA9IDA7CisgICAgICAgICAgICBpbnQgdmFyMSA9IGxvY2FsVmFyMyArIHBhcmFtMyArIElubmVyQ2xhc3MucGFyYW0zOworICAgICAgICB9CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3JlbmFtZUNvbGxpc2lvbnMvUmVuYW1lVmFyRmllbGRUb0xvY2FsLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVuYW1lQ29sbGlzaW9ucy9SZW5hbWVWYXJGaWVsZFRvTG9jYWwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNzVmNGY3Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3JlbmFtZUNvbGxpc2lvbnMvUmVuYW1lVmFyRmllbGRUb0xvY2FsLmphdmEKQEAgLTAsMCArMSw5IEBACitwdWJsaWMgY2xhc3MgUmVuYW1lQ29sbGlzaW9ucyB7CisgICAgcHJpdmF0ZSBjbGFzcyBJbm5lckNsYXNzIHsKKyAgICAgICAgcHJpdmF0ZSBpbnQgbXlJbm5lckZpZWxkPGNhcmV0PiA9IDE1OworICAgICAgICBwdWJsaWMgdm9pZCBpbnN0YW5jZUNvbnRleHQoaW50IHBhcmFtMykgeworICAgICAgICAgICAgaW50IGxvY2FsVmFyMyA9IDA7CisgICAgICAgICAgICBpbnQgdmFyMSA9IGxvY2FsVmFyMyArIHBhcmFtMyArIG15SW5uZXJGaWVsZDsKKyAgICAgICAgfQorICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9yZW5hbWVDb2xsaXNpb25zL1JlbmFtZVZhckZpZWxkVG9Mb2NhbC5qYXZhLmFmdGVyIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3JlbmFtZUNvbGxpc2lvbnMvUmVuYW1lVmFyRmllbGRUb0xvY2FsLmphdmEuYWZ0ZXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTE4ODFjNgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9yZW5hbWVDb2xsaXNpb25zL1JlbmFtZVZhckZpZWxkVG9Mb2NhbC5qYXZhLmFmdGVyCkBAIC0wLDAgKzEsOSBAQAorcHVibGljIGNsYXNzIFJlbmFtZUNvbGxpc2lvbnMgeworICAgIHByaXZhdGUgY2xhc3MgSW5uZXJDbGFzcyB7CisgICAgICAgIHByaXZhdGUgaW50IGxvY2FsVmFyMzxjYXJldD4gPSAxNTsKKyAgICAgICAgcHVibGljIHZvaWQgaW5zdGFuY2VDb250ZXh0KGludCBwYXJhbTMpIHsKKyAgICAgICAgICAgIGludCBsb2NhbFZhcjMgPSAwOworICAgICAgICAgICAgaW50IHZhcjEgPSBsb2NhbFZhcjMgKyBwYXJhbTMgKyB0aGlzLmxvY2FsVmFyMzsKKyAgICAgICAgfQorICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9yZW5hbWVDb2xsaXNpb25zL1JlbmFtZVZhcklubmVyQ29uc3RUb091dGVyQ29uc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9yZW5hbWVDb2xsaXNpb25zL1JlbmFtZVZhcklubmVyQ29uc3RUb091dGVyQ29uc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNDkxODA3Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3JlbmFtZUNvbGxpc2lvbnMvUmVuYW1lVmFySW5uZXJDb25zdFRvT3V0ZXJDb25zdC5qYXZhCkBAIC0wLDAgKzEsMTAgQEAKK3B1YmxpYyBjbGFzcyBSZW5hbWVDb2xsaXNpb25zIHsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBTVEFUSUNfRklFTEQgPSA1OworICAgIHByaXZhdGUgY2xhc3MgSW5uZXJDbGFzcyB7CisgICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IElOTkVSX1NUQVRJQ19GSUVMRDxjYXJldD4gPSAxMzsKKyAgICAgICAgcHVibGljIHZvaWQgaW5zdGFuY2VDb250ZXh0KGludCBwYXJhbTMpIHsKKyAgICAgICAgICAgIGludCBsb2NhbFZhcjMgPSAwOworICAgICAgICAgICAgaW50IHZhcjEgPSBsb2NhbFZhcjMgKyBwYXJhbTMgKyBJTk5FUl9TVEFUSUNfRklFTEQgKyBTVEFUSUNfRklFTEQ7CisgICAgICAgIH0KKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVuYW1lQ29sbGlzaW9ucy9SZW5hbWVWYXJJbm5lckNvbnN0VG9PdXRlckNvbnN0LmphdmEuYWZ0ZXIgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVuYW1lQ29sbGlzaW9ucy9SZW5hbWVWYXJJbm5lckNvbnN0VG9PdXRlckNvbnN0LmphdmEuYWZ0ZXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTc0NTZjMQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9yZW5hbWVDb2xsaXNpb25zL1JlbmFtZVZhcklubmVyQ29uc3RUb091dGVyQ29uc3QuamF2YS5hZnRlcgpAQCAtMCwwICsxLDEwIEBACitwdWJsaWMgY2xhc3MgUmVuYW1lQ29sbGlzaW9ucyB7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgU1RBVElDX0ZJRUxEID0gNTsKKyAgICBwcml2YXRlIGNsYXNzIElubmVyQ2xhc3MgeworICAgICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBTVEFUSUNfRklFTEQ8Y2FyZXQ+ID0gMTM7CisgICAgICAgIHB1YmxpYyB2b2lkIGluc3RhbmNlQ29udGV4dChpbnQgcGFyYW0zKSB7CisgICAgICAgICAgICBpbnQgbG9jYWxWYXIzID0gMDsKKyAgICAgICAgICAgIGludCB2YXIxID0gbG9jYWxWYXIzICsgcGFyYW0zICsgU1RBVElDX0ZJRUxEICsgUmVuYW1lQ29sbGlzaW9ucy5TVEFUSUNfRklFTEQ7CisgICAgICAgIH0KKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVuYW1lQ29sbGlzaW9ucy9SZW5hbWVWYXJJbm5lckZpZWxkVG9PdXRlckZpZWxkLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVuYW1lQ29sbGlzaW9ucy9SZW5hbWVWYXJJbm5lckZpZWxkVG9PdXRlckZpZWxkLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDc1MGJhNQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9yZW5hbWVDb2xsaXNpb25zL1JlbmFtZVZhcklubmVyRmllbGRUb091dGVyRmllbGQuamF2YQpAQCAtMCwwICsxLDEwIEBACitwdWJsaWMgY2xhc3MgUmVuYW1lQ29sbGlzaW9ucyB7CisgICAgcHJpdmF0ZSBpbnQgbXlGaWVsZCA9IDc7CisgICAgcHJpdmF0ZSBjbGFzcyBJbm5lckNsYXNzIHsKKyAgICAgICAgcHJpdmF0ZSBpbnQgbXlJbm5lckZpZWxkPGNhcmV0PiA9IDE1OworICAgICAgICBwdWJsaWMgdm9pZCBpbnN0YW5jZUNvbnRleHQoaW50IHBhcmFtMykgeworICAgICAgICAgICAgaW50IGxvY2FsVmFyMyA9IDA7CisgICAgICAgICAgICBpbnQgdmFyMSA9IGxvY2FsVmFyMyArIHBhcmFtMyArIG15SW5uZXJGaWVsZCArIG15RmllbGQ7CisgICAgICAgIH0KKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVuYW1lQ29sbGlzaW9ucy9SZW5hbWVWYXJJbm5lckZpZWxkVG9PdXRlckZpZWxkLmphdmEuYWZ0ZXIgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVuYW1lQ29sbGlzaW9ucy9SZW5hbWVWYXJJbm5lckZpZWxkVG9PdXRlckZpZWxkLmphdmEuYWZ0ZXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzlmYjZlMQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9yZW5hbWVDb2xsaXNpb25zL1JlbmFtZVZhcklubmVyRmllbGRUb091dGVyRmllbGQuamF2YS5hZnRlcgpAQCAtMCwwICsxLDEwIEBACitwdWJsaWMgY2xhc3MgUmVuYW1lQ29sbGlzaW9ucyB7CisgICAgcHJpdmF0ZSBpbnQgbXlGaWVsZCA9IDc7CisgICAgcHJpdmF0ZSBjbGFzcyBJbm5lckNsYXNzIHsKKyAgICAgICAgcHJpdmF0ZSBpbnQgbXlGaWVsZDxjYXJldD4gPSAxNTsKKyAgICAgICAgcHVibGljIHZvaWQgaW5zdGFuY2VDb250ZXh0KGludCBwYXJhbTMpIHsKKyAgICAgICAgICAgIGludCBsb2NhbFZhcjMgPSAwOworICAgICAgICAgICAgaW50IHZhcjEgPSBsb2NhbFZhcjMgKyBwYXJhbTMgKyBteUZpZWxkICsgUmVuYW1lQ29sbGlzaW9ucy50aGlzLm15RmllbGQ7CisgICAgICAgIH0KKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVuYW1lQ29sbGlzaW9ucy9SZW5hbWVWYXJMb2NhbFRvQWxpZW4uamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9yZW5hbWVDb2xsaXNpb25zL1JlbmFtZVZhckxvY2FsVG9BbGllbi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhlMzdmOTIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVuYW1lQ29sbGlzaW9ucy9SZW5hbWVWYXJMb2NhbFRvQWxpZW4uamF2YQpAQCAtMCwwICsxLDEwIEBACitpbXBvcnQgc3RhdGljIGphdmF4LnN3aW5nLlN3aW5nQ29uc3RhbnRzLkJPVFRPTTsKKworcHVibGljIGNsYXNzIFJlbmFtZUNvbGxpc2lvbnMgeworCXB1YmxpYyBzdGF0aWMgY2xhc3MgU3RhdGljSW5uZXJDbGFzcyB7CisJCXB1YmxpYyBzdGF0aWMgdm9pZCBzdGF0aWNDb250ZXh0KCkgeworCQkJaW50IGxvY2FsVmFyPGNhcmV0PiA9IDA7CisJCQlpbnQgdmFyMSA9IEJPVFRPTTsKKwkJfQorCX0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9yZW5hbWVDb2xsaXNpb25zL1JlbmFtZVZhckxvY2FsVG9BbGllbi5qYXZhLmFmdGVyIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3JlbmFtZUNvbGxpc2lvbnMvUmVuYW1lVmFyTG9jYWxUb0FsaWVuLmphdmEuYWZ0ZXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjI2MDczMgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9yZW5hbWVDb2xsaXNpb25zL1JlbmFtZVZhckxvY2FsVG9BbGllbi5qYXZhLmFmdGVyCkBAIC0wLDAgKzEsMTAgQEAKK2ltcG9ydCBqYXZheC5zd2luZy4qOworCitwdWJsaWMgY2xhc3MgUmVuYW1lQ29sbGlzaW9ucyB7CisJcHVibGljIHN0YXRpYyBjbGFzcyBTdGF0aWNJbm5lckNsYXNzIHsKKwkJcHVibGljIHN0YXRpYyB2b2lkIHN0YXRpY0NvbnRleHQoKSB7CisJCQlpbnQgQk9UVE9NPGNhcmV0PiA9IDA7CisJCQlpbnQgdmFyMSA9IFN3aW5nQ29uc3RhbnRzLkJPVFRPTTsKKwkJfQorCX0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9yZW5hbWVDb2xsaXNpb25zL1JlbmFtZVZhckxvY2FsVG9Db25zdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3JlbmFtZUNvbGxpc2lvbnMvUmVuYW1lVmFyTG9jYWxUb0NvbnN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjMzNjA3NQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9yZW5hbWVDb2xsaXNpb25zL1JlbmFtZVZhckxvY2FsVG9Db25zdC5qYXZhCkBAIC0wLDAgKzEsOSBAQAorcHVibGljIGNsYXNzIFJlbmFtZUNvbGxpc2lvbnMgeworCWNsYXNzIElubmVyQ2xhc3MgeworCQlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBJTk5FUl9TVEFUSUNfRklFTEQgPSAxMzsKKwkJcHVibGljIHZvaWQgaW5zdGFuY2VDb250ZXh0KGludCBwYXJhbSkgeworCQkJaW50IDxjYXJldD5sb2NhbFZhciA9IDA7CisJCQlpbnQgdmFyMSA9IGxvY2FsVmFyICsgcGFyYW0gKyBJTk5FUl9TVEFUSUNfRklFTEQ7CisJCX0KKwl9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVuYW1lQ29sbGlzaW9ucy9SZW5hbWVWYXJMb2NhbFRvQ29uc3QuamF2YS5hZnRlciBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9yZW5hbWVDb2xsaXNpb25zL1JlbmFtZVZhckxvY2FsVG9Db25zdC5qYXZhLmFmdGVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYwYTFhOWQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVuYW1lQ29sbGlzaW9ucy9SZW5hbWVWYXJMb2NhbFRvQ29uc3QuamF2YS5hZnRlcgpAQCAtMCwwICsxLDkgQEAKK3B1YmxpYyBjbGFzcyBSZW5hbWVDb2xsaXNpb25zIHsKKwljbGFzcyBJbm5lckNsYXNzIHsKKwkJcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgSU5ORVJfU1RBVElDX0ZJRUxEID0gMTM7CisJCXB1YmxpYyB2b2lkIGluc3RhbmNlQ29udGV4dChpbnQgcGFyYW0pIHsKKwkJCWludCA8Y2FyZXQ+SU5ORVJfU1RBVElDX0ZJRUxEID0gMDsKKwkJCWludCB2YXIxID0gSU5ORVJfU1RBVElDX0ZJRUxEICsgcGFyYW0gKyBJbm5lckNsYXNzLklOTkVSX1NUQVRJQ19GSUVMRDsKKwkJfQorCX0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9yZW5hbWVDb2xsaXNpb25zL1JlbmFtZVZhckxvY2FsVG9PdXRlckZpZWxkLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVuYW1lQ29sbGlzaW9ucy9SZW5hbWVWYXJMb2NhbFRvT3V0ZXJGaWVsZC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM4MjhjNzkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVuYW1lQ29sbGlzaW9ucy9SZW5hbWVWYXJMb2NhbFRvT3V0ZXJGaWVsZC5qYXZhCkBAIC0wLDAgKzEsOSBAQAorcHVibGljIGNsYXNzIFJlbmFtZUNvbGxpc2lvbnMgeworCXByaXZhdGUgaW50IG15RmllbGQgPSA3OworCWNsYXNzIElubmVyQ2xhc3MgeworCQlwdWJsaWMgdm9pZCBpbnN0YW5jZUNvbnRleHQoaW50IHBhcmFtKSB7CisJCQlpbnQgbG9jYWxWYXI8Y2FyZXQ+ID0gMDsKKwkJCWludCB2YXIxID0gbG9jYWxWYXIgKyBwYXJhbSArIG15RmllbGQ7CisJCX0KKwl9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVuYW1lQ29sbGlzaW9ucy9SZW5hbWVWYXJMb2NhbFRvT3V0ZXJGaWVsZC5qYXZhLmFmdGVyIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3JlbmFtZUNvbGxpc2lvbnMvUmVuYW1lVmFyTG9jYWxUb091dGVyRmllbGQuamF2YS5hZnRlcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jN2JjMGUxCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3JlbmFtZUNvbGxpc2lvbnMvUmVuYW1lVmFyTG9jYWxUb091dGVyRmllbGQuamF2YS5hZnRlcgpAQCAtMCwwICsxLDkgQEAKK3B1YmxpYyBjbGFzcyBSZW5hbWVDb2xsaXNpb25zIHsKKwlwcml2YXRlIGludCBteUZpZWxkID0gNzsKKwljbGFzcyBJbm5lckNsYXNzIHsKKwkJcHVibGljIHZvaWQgaW5zdGFuY2VDb250ZXh0KGludCBwYXJhbSkgeworCQkJaW50IG15RmllbGQ8Y2FyZXQ+ID0gMDsKKwkJCWludCB2YXIxID0gbXlGaWVsZCArIHBhcmFtICsgUmVuYW1lQ29sbGlzaW9ucy50aGlzLm15RmllbGQ7CisJCX0KKwl9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVuYW1lQ29sbGlzaW9ucy9SZW5hbWVWYXJPdXRlckNvbnN0VG9Jbm5lckNvbnN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVuYW1lQ29sbGlzaW9ucy9SZW5hbWVWYXJPdXRlckNvbnN0VG9Jbm5lckNvbnN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjhkMTBkZgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9yZW5hbWVDb2xsaXNpb25zL1JlbmFtZVZhck91dGVyQ29uc3RUb0lubmVyQ29uc3QuamF2YQpAQCAtMCwwICsxLDE3IEBACitwdWJsaWMgY2xhc3MgUmVuYW1lQ29sbGlzaW9ucyB7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgPGNhcmV0PlNUQVRJQ19GSUVMRCA9IDU7CisKKyAgICBwdWJsaWMgc3RhdGljIGNsYXNzIFN0YXRpY0lubmVyQ2xhc3MgeworICAgICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBTSV9TVEFUSUNfRklFTEQgPSA5OworICAgICAgICBwdWJsaWMgc3RhdGljIHZvaWQgc3RhdGljQ29udGV4dChpbnQgcGFyYW0pIHsKKyAgICAgICAgICAgIGludCB2YXIxID0gU0lfU1RBVElDX0ZJRUxEICsgU1RBVElDX0ZJRUxEOworICAgICAgICB9CisgICAgfQorCisgICAgcHJpdmF0ZSBjbGFzcyBJbm5lckNsYXNzIHsKKyAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgSU5ORVJfU1RBVElDX0ZJRUxEID0gMTM7CisgICAgICAgIHB1YmxpYyB2b2lkIGluc3RhbmNlQ29udGV4dChpbnQgcGFyYW0pIHsKKyAgICAgICAgICAgIGludCB2YXIxID0gSU5ORVJfU1RBVElDX0ZJRUxEICsgU1RBVElDX0ZJRUxEOworICAgICAgICB9CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3JlbmFtZUNvbGxpc2lvbnMvUmVuYW1lVmFyT3V0ZXJDb25zdFRvSW5uZXJDb25zdC5qYXZhLmFmdGVyIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3JlbmFtZUNvbGxpc2lvbnMvUmVuYW1lVmFyT3V0ZXJDb25zdFRvSW5uZXJDb25zdC5qYXZhLmFmdGVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVjOTE4ZWIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVuYW1lQ29sbGlzaW9ucy9SZW5hbWVWYXJPdXRlckNvbnN0VG9Jbm5lckNvbnN0LmphdmEuYWZ0ZXIKQEAgLTAsMCArMSwxNyBAQAorcHVibGljIGNsYXNzIFJlbmFtZUNvbGxpc2lvbnMgeworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IDxjYXJldD5TSV9TVEFUSUNfRklFTEQgPSA1OworCisgICAgcHVibGljIHN0YXRpYyBjbGFzcyBTdGF0aWNJbm5lckNsYXNzIHsKKyAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgU0lfU1RBVElDX0ZJRUxEID0gOTsKKyAgICAgICAgcHVibGljIHN0YXRpYyB2b2lkIHN0YXRpY0NvbnRleHQoaW50IHBhcmFtKSB7CisgICAgICAgICAgICBpbnQgdmFyMSA9IFNJX1NUQVRJQ19GSUVMRCArIFJlbmFtZUNvbGxpc2lvbnMuU0lfU1RBVElDX0ZJRUxEOworICAgICAgICB9CisgICAgfQorCisgICAgcHJpdmF0ZSBjbGFzcyBJbm5lckNsYXNzIHsKKyAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgSU5ORVJfU1RBVElDX0ZJRUxEID0gMTM7CisgICAgICAgIHB1YmxpYyB2b2lkIGluc3RhbmNlQ29udGV4dChpbnQgcGFyYW0pIHsKKyAgICAgICAgICAgIGludCB2YXIxID0gSU5ORVJfU1RBVElDX0ZJRUxEICsgU0lfU1RBVElDX0ZJRUxEOworICAgICAgICB9CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3JlbmFtZUNvbGxpc2lvbnMvUmVuYW1lVmFyT3V0ZXJDb25zdFRvTG9jYWwuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9yZW5hbWVDb2xsaXNpb25zL1JlbmFtZVZhck91dGVyQ29uc3RUb0xvY2FsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWIyODZlMgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9yZW5hbWVDb2xsaXNpb25zL1JlbmFtZVZhck91dGVyQ29uc3RUb0xvY2FsLmphdmEKQEAgLTAsMCArMSwyOCBAQAorcHVibGljIGNsYXNzIFJlbmFtZUNvbGxpc2lvbnMgeworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IDxjYXJldD5TVEFUSUNfRklFTEQgPSA1OworICAgIHByaXZhdGUgaW50IG15RmllbGQgPSA3OworCisgICAgcHVibGljIHN0YXRpYyBjbGFzcyBTdGF0aWNJbm5lckNsYXNzIHsKKyAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgU0lfU1RBVElDX0ZJRUxEID0gOTsKKyAgICAgICAgcHJpdmF0ZSBpbnQgbXlTaUZpZWxkID0gMTE7CisKKyAgICAgICAgcHVibGljIHZvaWQgaW5zdGFuY2VDb250ZXh0KGludCBwYXJhbTEpIHsKKyAgICAgICAgICAgIGludCBsb2NhbFZhcjEgPSAwOworICAgICAgICAgICAgaW50IHZhcjEgPSBsb2NhbFZhcjEgKyBwYXJhbTEgKyBTSV9TVEFUSUNfRklFTEQgKyBteVNpRmllbGQgKyBTVEFUSUNfRklFTEQ7CisgICAgICAgIH0KKyAgICAgICAgcHVibGljIHN0YXRpYyB2b2lkIHN0YXRpY0NvbnRleHQoaW50IHBhcmFtMikgeworICAgICAgICAgICAgaW50IGxvY2FsVmFyMiA9IDA7CisgICAgICAgICAgICBpbnQgdmFyMSA9IGxvY2FsVmFyMiArIHBhcmFtMiArIFNJX1NUQVRJQ19GSUVMRCArIFNUQVRJQ19GSUVMRDsKKyAgICAgICAgfQorICAgIH0KKworICAgIHByaXZhdGUgY2xhc3MgSW5uZXJDbGFzcyB7CisgICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IElOTkVSX1NUQVRJQ19GSUVMRCA9IDEzOworICAgICAgICBwcml2YXRlIGludCBteUlubmVyRmllbGQgPSAxNTsKKworICAgICAgICBwdWJsaWMgdm9pZCBpbnN0YW5jZUNvbnRleHQoaW50IHBhcmFtMykgeworICAgICAgICAgICAgaW50IGxvY2FsVmFyMyA9IDA7CisgICAgICAgICAgICBpbnQgdmFyMSA9IGxvY2FsVmFyMyArIHBhcmFtMyArIElOTkVSX1NUQVRJQ19GSUVMRCArIG15SW5uZXJGaWVsZCArIFNUQVRJQ19GSUVMRCArIG15RmllbGQ7CisgICAgICAgIH0KKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVuYW1lQ29sbGlzaW9ucy9SZW5hbWVWYXJPdXRlckNvbnN0VG9Mb2NhbC5qYXZhLmFmdGVyIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3JlbmFtZUNvbGxpc2lvbnMvUmVuYW1lVmFyT3V0ZXJDb25zdFRvTG9jYWwuamF2YS5hZnRlcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MDJkNWY0Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3JlbmFtZUNvbGxpc2lvbnMvUmVuYW1lVmFyT3V0ZXJDb25zdFRvTG9jYWwuamF2YS5hZnRlcgpAQCAtMCwwICsxLDI4IEBACitwdWJsaWMgY2xhc3MgUmVuYW1lQ29sbGlzaW9ucyB7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgPGNhcmV0PmxvY2FsVmFyMyA9IDU7CisgICAgcHJpdmF0ZSBpbnQgbXlGaWVsZCA9IDc7CisKKyAgICBwdWJsaWMgc3RhdGljIGNsYXNzIFN0YXRpY0lubmVyQ2xhc3MgeworICAgICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBTSV9TVEFUSUNfRklFTEQgPSA5OworICAgICAgICBwcml2YXRlIGludCBteVNpRmllbGQgPSAxMTsKKworICAgICAgICBwdWJsaWMgdm9pZCBpbnN0YW5jZUNvbnRleHQoaW50IHBhcmFtMSkgeworICAgICAgICAgICAgaW50IGxvY2FsVmFyMSA9IDA7CisgICAgICAgICAgICBpbnQgdmFyMSA9IGxvY2FsVmFyMSArIHBhcmFtMSArIFNJX1NUQVRJQ19GSUVMRCArIG15U2lGaWVsZCArIGxvY2FsVmFyMzsKKyAgICAgICAgfQorICAgICAgICBwdWJsaWMgc3RhdGljIHZvaWQgc3RhdGljQ29udGV4dChpbnQgcGFyYW0yKSB7CisgICAgICAgICAgICBpbnQgbG9jYWxWYXIyID0gMDsKKyAgICAgICAgICAgIGludCB2YXIxID0gbG9jYWxWYXIyICsgcGFyYW0yICsgU0lfU1RBVElDX0ZJRUxEICsgbG9jYWxWYXIzOworICAgICAgICB9CisgICAgfQorCisgICAgcHJpdmF0ZSBjbGFzcyBJbm5lckNsYXNzIHsKKyAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgSU5ORVJfU1RBVElDX0ZJRUxEID0gMTM7CisgICAgICAgIHByaXZhdGUgaW50IG15SW5uZXJGaWVsZCA9IDE1OworCisgICAgICAgIHB1YmxpYyB2b2lkIGluc3RhbmNlQ29udGV4dChpbnQgcGFyYW0zKSB7CisgICAgICAgICAgICBpbnQgbG9jYWxWYXIzID0gMDsKKyAgICAgICAgICAgIGludCB2YXIxID0gbG9jYWxWYXIzICsgcGFyYW0zICsgSU5ORVJfU1RBVElDX0ZJRUxEICsgbXlJbm5lckZpZWxkICsgUmVuYW1lQ29sbGlzaW9ucy5sb2NhbFZhcjMgKyBteUZpZWxkOworICAgICAgICB9CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3JlbmFtZUNvbGxpc2lvbnMvUmVuYW1lVmFyT3V0ZXJDb25zdFRvUGFyYW0uamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9yZW5hbWVDb2xsaXNpb25zL1JlbmFtZVZhck91dGVyQ29uc3RUb1BhcmFtLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWIyODZlMgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9yZW5hbWVDb2xsaXNpb25zL1JlbmFtZVZhck91dGVyQ29uc3RUb1BhcmFtLmphdmEKQEAgLTAsMCArMSwyOCBAQAorcHVibGljIGNsYXNzIFJlbmFtZUNvbGxpc2lvbnMgeworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IDxjYXJldD5TVEFUSUNfRklFTEQgPSA1OworICAgIHByaXZhdGUgaW50IG15RmllbGQgPSA3OworCisgICAgcHVibGljIHN0YXRpYyBjbGFzcyBTdGF0aWNJbm5lckNsYXNzIHsKKyAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgU0lfU1RBVElDX0ZJRUxEID0gOTsKKyAgICAgICAgcHJpdmF0ZSBpbnQgbXlTaUZpZWxkID0gMTE7CisKKyAgICAgICAgcHVibGljIHZvaWQgaW5zdGFuY2VDb250ZXh0KGludCBwYXJhbTEpIHsKKyAgICAgICAgICAgIGludCBsb2NhbFZhcjEgPSAwOworICAgICAgICAgICAgaW50IHZhcjEgPSBsb2NhbFZhcjEgKyBwYXJhbTEgKyBTSV9TVEFUSUNfRklFTEQgKyBteVNpRmllbGQgKyBTVEFUSUNfRklFTEQ7CisgICAgICAgIH0KKyAgICAgICAgcHVibGljIHN0YXRpYyB2b2lkIHN0YXRpY0NvbnRleHQoaW50IHBhcmFtMikgeworICAgICAgICAgICAgaW50IGxvY2FsVmFyMiA9IDA7CisgICAgICAgICAgICBpbnQgdmFyMSA9IGxvY2FsVmFyMiArIHBhcmFtMiArIFNJX1NUQVRJQ19GSUVMRCArIFNUQVRJQ19GSUVMRDsKKyAgICAgICAgfQorICAgIH0KKworICAgIHByaXZhdGUgY2xhc3MgSW5uZXJDbGFzcyB7CisgICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IElOTkVSX1NUQVRJQ19GSUVMRCA9IDEzOworICAgICAgICBwcml2YXRlIGludCBteUlubmVyRmllbGQgPSAxNTsKKworICAgICAgICBwdWJsaWMgdm9pZCBpbnN0YW5jZUNvbnRleHQoaW50IHBhcmFtMykgeworICAgICAgICAgICAgaW50IGxvY2FsVmFyMyA9IDA7CisgICAgICAgICAgICBpbnQgdmFyMSA9IGxvY2FsVmFyMyArIHBhcmFtMyArIElOTkVSX1NUQVRJQ19GSUVMRCArIG15SW5uZXJGaWVsZCArIFNUQVRJQ19GSUVMRCArIG15RmllbGQ7CisgICAgICAgIH0KKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVuYW1lQ29sbGlzaW9ucy9SZW5hbWVWYXJPdXRlckNvbnN0VG9QYXJhbS5qYXZhLmFmdGVyIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3JlbmFtZUNvbGxpc2lvbnMvUmVuYW1lVmFyT3V0ZXJDb25zdFRvUGFyYW0uamF2YS5hZnRlcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNmJkYzcyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3JlbmFtZUNvbGxpc2lvbnMvUmVuYW1lVmFyT3V0ZXJDb25zdFRvUGFyYW0uamF2YS5hZnRlcgpAQCAtMCwwICsxLDI4IEBACitwdWJsaWMgY2xhc3MgUmVuYW1lQ29sbGlzaW9ucyB7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgPGNhcmV0PnBhcmFtMiA9IDU7CisgICAgcHJpdmF0ZSBpbnQgbXlGaWVsZCA9IDc7CisKKyAgICBwdWJsaWMgc3RhdGljIGNsYXNzIFN0YXRpY0lubmVyQ2xhc3MgeworICAgICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBTSV9TVEFUSUNfRklFTEQgPSA5OworICAgICAgICBwcml2YXRlIGludCBteVNpRmllbGQgPSAxMTsKKworICAgICAgICBwdWJsaWMgdm9pZCBpbnN0YW5jZUNvbnRleHQoaW50IHBhcmFtMSkgeworICAgICAgICAgICAgaW50IGxvY2FsVmFyMSA9IDA7CisgICAgICAgICAgICBpbnQgdmFyMSA9IGxvY2FsVmFyMSArIHBhcmFtMSArIFNJX1NUQVRJQ19GSUVMRCArIG15U2lGaWVsZCArIHBhcmFtMjsKKyAgICAgICAgfQorICAgICAgICBwdWJsaWMgc3RhdGljIHZvaWQgc3RhdGljQ29udGV4dChpbnQgcGFyYW0yKSB7CisgICAgICAgICAgICBpbnQgbG9jYWxWYXIyID0gMDsKKyAgICAgICAgICAgIGludCB2YXIxID0gbG9jYWxWYXIyICsgcGFyYW0yICsgU0lfU1RBVElDX0ZJRUxEICsgUmVuYW1lQ29sbGlzaW9ucy5wYXJhbTI7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwcml2YXRlIGNsYXNzIElubmVyQ2xhc3MgeworICAgICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBJTk5FUl9TVEFUSUNfRklFTEQgPSAxMzsKKyAgICAgICAgcHJpdmF0ZSBpbnQgbXlJbm5lckZpZWxkID0gMTU7CisKKyAgICAgICAgcHVibGljIHZvaWQgaW5zdGFuY2VDb250ZXh0KGludCBwYXJhbTMpIHsKKyAgICAgICAgICAgIGludCBsb2NhbFZhcjMgPSAwOworICAgICAgICAgICAgaW50IHZhcjEgPSBsb2NhbFZhcjMgKyBwYXJhbTMgKyBJTk5FUl9TVEFUSUNfRklFTEQgKyBteUlubmVyRmllbGQgKyBwYXJhbTIgKyBteUZpZWxkOworICAgICAgICB9CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3JlbmFtZUNvbGxpc2lvbnMvUmVuYW1lVmFyT3V0ZXJGaWVsZFRvTG9jYWwuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9yZW5hbWVDb2xsaXNpb25zL1JlbmFtZVZhck91dGVyRmllbGRUb0xvY2FsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmQ0MjEwZgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9yZW5hbWVDb2xsaXNpb25zL1JlbmFtZVZhck91dGVyRmllbGRUb0xvY2FsLmphdmEKQEAgLTAsMCArMSwxMCBAQAorcHVibGljIGNsYXNzIFJlbmFtZUNvbGxpc2lvbnMgeworICAgIHByaXZhdGUgaW50IDxjYXJldD5teUZpZWxkID0gNzsKKworICAgIHByaXZhdGUgY2xhc3MgSW5uZXJDbGFzcyB7CisgICAgICAgIHB1YmxpYyB2b2lkIGluc3RhbmNlQ29udGV4dChpbnQgcGFyYW0zKSB7CisgICAgICAgICAgICBpbnQgbG9jYWxWYXIzID0gMDsKKyAgICAgICAgICAgIGludCB2YXIxID0gbG9jYWxWYXIzICsgcGFyYW0zICsgbXlGaWVsZDsKKyAgICAgICAgfQorICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9yZW5hbWVDb2xsaXNpb25zL1JlbmFtZVZhck91dGVyRmllbGRUb0xvY2FsLmphdmEuYWZ0ZXIgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVuYW1lQ29sbGlzaW9ucy9SZW5hbWVWYXJPdXRlckZpZWxkVG9Mb2NhbC5qYXZhLmFmdGVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdjY2QxODYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVuYW1lQ29sbGlzaW9ucy9SZW5hbWVWYXJPdXRlckZpZWxkVG9Mb2NhbC5qYXZhLmFmdGVyCkBAIC0wLDAgKzEsMTAgQEAKK3B1YmxpYyBjbGFzcyBSZW5hbWVDb2xsaXNpb25zIHsKKyAgICBwcml2YXRlIGludCA8Y2FyZXQ+bG9jYWxWYXIzID0gNzsKKworICAgIHByaXZhdGUgY2xhc3MgSW5uZXJDbGFzcyB7CisgICAgICAgIHB1YmxpYyB2b2lkIGluc3RhbmNlQ29udGV4dChpbnQgcGFyYW0zKSB7CisgICAgICAgICAgICBpbnQgbG9jYWxWYXIzID0gMDsKKyAgICAgICAgICAgIGludCB2YXIxID0gbG9jYWxWYXIzICsgcGFyYW0zICsgUmVuYW1lQ29sbGlzaW9ucy50aGlzLmxvY2FsVmFyMzsKKyAgICAgICAgfQorICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9yZW5hbWVDb2xsaXNpb25zL1JlbmFtZVZhck91dGVyRmllbGRUb1BhcmFtLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVuYW1lQ29sbGlzaW9ucy9SZW5hbWVWYXJPdXRlckZpZWxkVG9QYXJhbS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZkNDIxMGYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVuYW1lQ29sbGlzaW9ucy9SZW5hbWVWYXJPdXRlckZpZWxkVG9QYXJhbS5qYXZhCkBAIC0wLDAgKzEsMTAgQEAKK3B1YmxpYyBjbGFzcyBSZW5hbWVDb2xsaXNpb25zIHsKKyAgICBwcml2YXRlIGludCA8Y2FyZXQ+bXlGaWVsZCA9IDc7CisKKyAgICBwcml2YXRlIGNsYXNzIElubmVyQ2xhc3MgeworICAgICAgICBwdWJsaWMgdm9pZCBpbnN0YW5jZUNvbnRleHQoaW50IHBhcmFtMykgeworICAgICAgICAgICAgaW50IGxvY2FsVmFyMyA9IDA7CisgICAgICAgICAgICBpbnQgdmFyMSA9IGxvY2FsVmFyMyArIHBhcmFtMyArIG15RmllbGQ7CisgICAgICAgIH0KKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVuYW1lQ29sbGlzaW9ucy9SZW5hbWVWYXJPdXRlckZpZWxkVG9QYXJhbS5qYXZhLmFmdGVyIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3JlbmFtZUNvbGxpc2lvbnMvUmVuYW1lVmFyT3V0ZXJGaWVsZFRvUGFyYW0uamF2YS5hZnRlcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NWM3OWNkCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3JlbmFtZUNvbGxpc2lvbnMvUmVuYW1lVmFyT3V0ZXJGaWVsZFRvUGFyYW0uamF2YS5hZnRlcgpAQCAtMCwwICsxLDEwIEBACitwdWJsaWMgY2xhc3MgUmVuYW1lQ29sbGlzaW9ucyB7CisgICAgcHJpdmF0ZSBpbnQgPGNhcmV0PnBhcmFtMyA9IDc7CisKKyAgICBwcml2YXRlIGNsYXNzIElubmVyQ2xhc3MgeworICAgICAgICBwdWJsaWMgdm9pZCBpbnN0YW5jZUNvbnRleHQoaW50IHBhcmFtMykgeworICAgICAgICAgICAgaW50IGxvY2FsVmFyMyA9IDA7CisgICAgICAgICAgICBpbnQgdmFyMSA9IGxvY2FsVmFyMyArIHBhcmFtMyArIFJlbmFtZUNvbGxpc2lvbnMudGhpcy5wYXJhbTM7CisgICAgICAgIH0KKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVuYW1lQ29sbGlzaW9ucy9SZW5hbWVWYXJQYXJhbVRvQWxpZW4uamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9yZW5hbWVDb2xsaXNpb25zL1JlbmFtZVZhclBhcmFtVG9BbGllbi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBhYWYxNmUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVuYW1lQ29sbGlzaW9ucy9SZW5hbWVWYXJQYXJhbVRvQWxpZW4uamF2YQpAQCAtMCwwICsxLDkgQEAKK2ltcG9ydCBzdGF0aWMgamF2YXguc3dpbmcuU3dpbmdDb25zdGFudHMuQk9UVE9NOworCitwdWJsaWMgY2xhc3MgUmVuYW1lQ29sbGlzaW9ucyB7CisJcHVibGljIHN0YXRpYyBjbGFzcyBTdGF0aWNJbm5lckNsYXNzIHsKKwkJcHVibGljIHN0YXRpYyB2b2lkIHN0YXRpY0NvbnRleHQoaW50IHBhcmFtPGNhcmV0PikgeworCQkJaW50IHZhcjEgPSBCT1RUT007CisJCX0KKwl9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVuYW1lQ29sbGlzaW9ucy9SZW5hbWVWYXJQYXJhbVRvQWxpZW4uamF2YS5hZnRlciBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9yZW5hbWVDb2xsaXNpb25zL1JlbmFtZVZhclBhcmFtVG9BbGllbi5qYXZhLmFmdGVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE3ZjY2YzcKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVuYW1lQ29sbGlzaW9ucy9SZW5hbWVWYXJQYXJhbVRvQWxpZW4uamF2YS5hZnRlcgpAQCAtMCwwICsxLDkgQEAKK2ltcG9ydCBqYXZheC5zd2luZy4qOworCitwdWJsaWMgY2xhc3MgUmVuYW1lQ29sbGlzaW9ucyB7CisJcHVibGljIHN0YXRpYyBjbGFzcyBTdGF0aWNJbm5lckNsYXNzIHsKKwkJcHVibGljIHN0YXRpYyB2b2lkIHN0YXRpY0NvbnRleHQoaW50IEJPVFRPTTxjYXJldD4pIHsKKwkJCWludCB2YXIxID0gU3dpbmdDb25zdGFudHMuQk9UVE9NOworCQl9CisJfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3JlbmFtZUNvbGxpc2lvbnMvUmVuYW1lVmFyUGFyYW1Ub0ZpZWxkLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVuYW1lQ29sbGlzaW9ucy9SZW5hbWVWYXJQYXJhbVRvRmllbGQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNjg4MWYwCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3JlbmFtZUNvbGxpc2lvbnMvUmVuYW1lVmFyUGFyYW1Ub0ZpZWxkLmphdmEKQEAgLTAsMCArMSw5IEBACitwdWJsaWMgY2xhc3MgUmVuYW1lQ29sbGlzaW9ucyB7CisJY2xhc3MgSW5uZXJDbGFzcyB7CisJCXByaXZhdGUgaW50IG15SW5uZXJGaWVsZCA9IDE1OworCQlwdWJsaWMgdm9pZCBpbnN0YW5jZUNvbnRleHQoaW50IHBhcmFtPGNhcmV0PikgeworCQkJaW50IGxvY2FsVmFyID0gMDsKKwkJCWludCB2YXIxID0gbG9jYWxWYXIgKyBwYXJhbSArIG15SW5uZXJGaWVsZDsKKwkJfQorCX0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9yZW5hbWVDb2xsaXNpb25zL1JlbmFtZVZhclBhcmFtVG9GaWVsZC5qYXZhLmFmdGVyIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3JlbmFtZUNvbGxpc2lvbnMvUmVuYW1lVmFyUGFyYW1Ub0ZpZWxkLmphdmEuYWZ0ZXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmU3ODMzNgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9yZW5hbWVDb2xsaXNpb25zL1JlbmFtZVZhclBhcmFtVG9GaWVsZC5qYXZhLmFmdGVyCkBAIC0wLDAgKzEsOSBAQAorcHVibGljIGNsYXNzIFJlbmFtZUNvbGxpc2lvbnMgeworCWNsYXNzIElubmVyQ2xhc3MgeworCQlwcml2YXRlIGludCBteUlubmVyRmllbGQgPSAxNTsKKwkJcHVibGljIHZvaWQgaW5zdGFuY2VDb250ZXh0KGludCBteUlubmVyRmllbGQ8Y2FyZXQ+KSB7CisJCQlpbnQgbG9jYWxWYXIgPSAwOworCQkJaW50IHZhcjEgPSBsb2NhbFZhciArIG15SW5uZXJGaWVsZCArIHRoaXMubXlJbm5lckZpZWxkOworCQl9CisJfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3JlbmFtZUNvbGxpc2lvbnMvUmVuYW1lVmFyUGFyYW1Ub091dGVyQ29uc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9yZW5hbWVDb2xsaXNpb25zL1JlbmFtZVZhclBhcmFtVG9PdXRlckNvbnN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDA0MjkwMgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9yZW5hbWVDb2xsaXNpb25zL1JlbmFtZVZhclBhcmFtVG9PdXRlckNvbnN0LmphdmEKQEAgLTAsMCArMSw5IEBACitwdWJsaWMgY2xhc3MgUmVuYW1lQ29sbGlzaW9ucyB7CisJcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgU1RBVElDX0ZJRUxEID0gNTsKKwlwdWJsaWMgc3RhdGljIGNsYXNzIFN0YXRpY0lubmVyQ2xhc3MgeworCQlwdWJsaWMgdm9pZCBpbnN0YW5jZUNvbnRleHQoaW50IHBhcmFtPGNhcmV0PikgeworCQkJaW50IGxvY2FsVmFyID0gMDsKKwkJCWludCB2YXIxID0gbG9jYWxWYXIgKyBwYXJhbSArIFNUQVRJQ19GSUVMRDsKKwkJfQorCX0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9yZW5hbWVDb2xsaXNpb25zL1JlbmFtZVZhclBhcmFtVG9PdXRlckNvbnN0LmphdmEuYWZ0ZXIgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVuYW1lQ29sbGlzaW9ucy9SZW5hbWVWYXJQYXJhbVRvT3V0ZXJDb25zdC5qYXZhLmFmdGVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE3NzcxMWQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVuYW1lQ29sbGlzaW9ucy9SZW5hbWVWYXJQYXJhbVRvT3V0ZXJDb25zdC5qYXZhLmFmdGVyCkBAIC0wLDAgKzEsOSBAQAorcHVibGljIGNsYXNzIFJlbmFtZUNvbGxpc2lvbnMgeworCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFNUQVRJQ19GSUVMRCA9IDU7CisJcHVibGljIHN0YXRpYyBjbGFzcyBTdGF0aWNJbm5lckNsYXNzIHsKKwkJcHVibGljIHZvaWQgaW5zdGFuY2VDb250ZXh0KGludCBTVEFUSUNfRklFTEQ8Y2FyZXQ+KSB7CisJCQlpbnQgbG9jYWxWYXIgPSAwOworCQkJaW50IHZhcjEgPSBsb2NhbFZhciArIFNUQVRJQ19GSUVMRCArIFJlbmFtZUNvbGxpc2lvbnMuU1RBVElDX0ZJRUxEOworCQl9CisJfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3JlbmFtZUZpZWxkL2FmdGVyQ29sbGlzaW9uc0luTWV0aG9kLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVuYW1lRmllbGQvYWZ0ZXJDb2xsaXNpb25zSW5NZXRob2QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOGUwMjI5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3JlbmFtZUZpZWxkL2FmdGVyQ29sbGlzaW9uc0luTWV0aG9kLmphdmEKQEAgLTAsMCArMSwxNCBAQAorY2xhc3MgQSB7CisgICAgaW50IG5ld0ZpZWxkTmFtZTsKKworICAgIGludCBtZXRob2QoaW50IG5ld0ZpZWxkTmFtZSkgeworICAgICAgICBpZihuZXdGaWVsZE5hbWUgPT0gMCkgeworICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLm5ld0ZpZWxkTmFtZTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGludCBuZXdGaWVsZE5hbWUgPSB0aGlzLm5ld0ZpZWxkTmFtZTsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLm5ld0ZpZWxkTmFtZSArIG5ld0ZpZWxkTmFtZTsKKyAgICAgICAgfQorICAgfQorfQorCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVuYW1lRmllbGQvYWZ0ZXJDb2xsaXNpb25zSW5NZXRob2RPZlN1YkNsYXNzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVuYW1lRmllbGQvYWZ0ZXJDb2xsaXNpb25zSW5NZXRob2RPZlN1YkNsYXNzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGFmZDE4ZQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9yZW5hbWVGaWVsZC9hZnRlckNvbGxpc2lvbnNJbk1ldGhvZE9mU3ViQ2xhc3MuamF2YQpAQCAtMCwwICsxLDE2IEBACitjbGFzcyBBIHsKKyAgIGludCBuZXdGaWVsZE5hbWU7Cit9CisgICAKK2NsYXNzIEIgZXh0ZW5kcyBBIHsKKyAgIGludCBtZXRob2QoaW50IG5ld0ZpZWxkTmFtZSkgeworICAgICAgICBpZihuZXdGaWVsZE5hbWUgPT0gMCkgeworICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLm5ld0ZpZWxkTmFtZTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGludCBuZXdGaWVsZE5hbWUgPSB0aGlzLm5ld0ZpZWxkTmFtZTsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLm5ld0ZpZWxkTmFtZSArIG5ld0ZpZWxkTmFtZTsKKyAgICAgICAgfQorICAgfQorfQorCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVuYW1lRmllbGQvYWZ0ZXJDb2xsaXNpb25zUmVuYW1pbmdGaWVsZFdpdGhTZXR0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9yZW5hbWVGaWVsZC9hZnRlckNvbGxpc2lvbnNSZW5hbWluZ0ZpZWxkV2l0aFNldHRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE5MGM1MTMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVuYW1lRmllbGQvYWZ0ZXJDb2xsaXNpb25zUmVuYW1pbmdGaWVsZFdpdGhTZXR0ZXIuamF2YQpAQCAtMCwwICsxLDcgQEAKK3B1YmxpYyBjbGFzcyBUZXN0IHsKKyAgICBwcml2YXRlIGJvb2xlYW4gdXRtOworCisgICAgcHVibGljIHZvaWQgc2V0VXRtKGJvb2xlYW4gdXRtKSB7CisgICAgICAgIHRoaXMudXRtID0gdXRtOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVuYW1lRmllbGQvYWZ0ZXJFbnVtQ29uc3RhbnRXaXRoQ29uc3RydWN0b3IuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9yZW5hbWVGaWVsZC9hZnRlckVudW1Db25zdGFudFdpdGhDb25zdHJ1Y3Rvci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg1NGVlZmMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVuYW1lRmllbGQvYWZ0ZXJFbnVtQ29uc3RhbnRXaXRoQ29uc3RydWN0b3IuamF2YQpAQCAtMCwwICsxLDggQEAKK3B1YmxpYyBlbnVtIEZvbyB7CisKKyAgbmV3TmFtZSg2OSk7CisKKyAgRm9vKGludCBiYXIpCisgIHsKKyAgfQorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVuYW1lRmllbGQvYWZ0ZXJFbnVtQ29uc3RhbnRXaXRoSW5pdGlhbGl6ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9yZW5hbWVGaWVsZC9hZnRlckVudW1Db25zdGFudFdpdGhJbml0aWFsaXplci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNjYzFkZDQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVuYW1lRmllbGQvYWZ0ZXJFbnVtQ29uc3RhbnRXaXRoSW5pdGlhbGl6ZXIuamF2YQpAQCAtMCwwICsxLDExIEBACitwdWJsaWMgZW51bSBNeUVudW0KK3sKKyAgICBBQUEgeworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKKyAgICAgICAgICAgIHJldHVybiAiYSI7CisgICAgICAgIH0KKyAgICB9LAorICAgIEIsCisgICAgQworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9yZW5hbWVGaWVsZC9hZnRlckZpZWxkSW5Db2x1bW5zLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVuYW1lRmllbGQvYWZ0ZXJGaWVsZEluQ29sdW1ucy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIyZjczOTcKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVuYW1lRmllbGQvYWZ0ZXJGaWVsZEluQ29sdW1ucy5qYXZhCkBAIC0wLDAgKzEsMjMgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwMC0yMDEyIEpldEJyYWlucyBzLnIuby4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCitjbGFzcyBUZXN0IHsKKyAgICBpbnQgamogICAgICAgICAgICAgICAgPSAxOworICAgIGludCBmaWVsZFdpdGhMb25nTmFtZSA9IDI7CisKKyAgICB2b2lkIHRlc3QoKSB7CisgICAgICAgIGpqID0gMzsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3JlbmFtZUZpZWxkL2FmdGVySGlkZXNPdXRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3JlbmFtZUZpZWxkL2FmdGVySGlkZXNPdXRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI1ZjlkNDMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVuYW1lRmllbGQvYWZ0ZXJIaWRlc091dGVyLmphdmEKQEAgLTAsMCArMSwxNyBAQAorY2xhc3MgRm9vIHsKKyAgICBwdWJsaWMgaW50IHg7CisKKyAgICBwdWJsaWMgdm9pZCBmb28oKSB7CisgICAgICAgIGludCB5ID0gMDsKKyAgICAgICAgeSA9IHggKyAxOworICAgIH0KKworICAgIHB1YmxpYyBjbGFzcyBJbm5lciB7CisgICAgICAgIHB1YmxpYyBpbnQgPGNhcmV0Png7CisKKyAgICAgICAgcHVibGljIHZvaWQgZm9vKCkgeworICAgICAgICAgICAgeCA9IG5ldyBGb28oKS54ICsgMTsKKyAgICAgICAgICAgIHggPSBGb28udGhpcy54ICsgMTsKKyAgICAgICAgfQorICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9yZW5hbWVGaWVsZC9hZnRlck5vbk5vcm1hbGl6ZWRGaWVsZHMuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9yZW5hbWVGaWVsZC9hZnRlck5vbk5vcm1hbGl6ZWRGaWVsZHMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNjM3MjEzCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3JlbmFtZUZpZWxkL2FmdGVyTm9uTm9ybWFsaXplZEZpZWxkcy5qYXZhCkBAIC0wLDAgKzEsOCBAQAorcHVibGljIGNsYXNzIFRlc3RSZWZhY3RvcgoreworcHVibGljIFN0cmluZyB1aVRlc3QxID0gbmV3IFN0cmluZygiVGVzdDEiKSwKK25ld0ZpZWxkID0gbmV3IFN0cmluZygiVGVzdDIiKSwKK3VpVGVzdDMgPSBuZXcgU3RyaW5nKCJUZXN0MSIpOworeyBTeXN0ZW0ub3V0LnByaW50bG4obmV3RmllbGQpO30KKworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9yZW5hbWVGaWVsZC9hZnRlclNpbXBsZUZpZWxkUmVuYW1pbmcuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9yZW5hbWVGaWVsZC9hZnRlclNpbXBsZUZpZWxkUmVuYW1pbmcuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NTAyMmVjCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3JlbmFtZUZpZWxkL2FmdGVyU2ltcGxlRmllbGRSZW5hbWluZy5qYXZhCkBAIC0wLDAgKzEsOSBAQAorY2xhc3MgQSB7CisgICAgaW50IG15TmV3RmllbGQ7Cit9CisKK2NsYXNzIEIgeworICAgIGludCBtZXRob2QoQSBhKSB7CisgICAgICAgIHJldHVybiBBLm15TmV3RmllbGQ7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9yZW5hbWVGaWVsZC9iZWZvcmVDb2xsaXNpb25zSW5NZXRob2QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9yZW5hbWVGaWVsZC9iZWZvcmVDb2xsaXNpb25zSW5NZXRob2QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MjViMTgwCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3JlbmFtZUZpZWxkL2JlZm9yZUNvbGxpc2lvbnNJbk1ldGhvZC5qYXZhCkBAIC0wLDAgKzEsMTQgQEAKK2NsYXNzIEEgeworICAgIGludCA8Y2FyZXQ+ZmllbGRUb0JlUmVuYW1lZDsKKworICAgIGludCBtZXRob2QoaW50IG5ld0ZpZWxkTmFtZSkgeworICAgICAgICBpZihuZXdGaWVsZE5hbWUgPT0gMCkgeworICAgICAgICAgICAgICAgIHJldHVybiBmaWVsZFRvQmVSZW5hbWVkOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgaW50IG5ld0ZpZWxkTmFtZSA9IGZpZWxkVG9CZVJlbmFtZWQ7CisgICAgICAgICAgICByZXR1cm4gZmllbGRUb0JlUmVuYW1lZCArIG5ld0ZpZWxkTmFtZTsKKyAgICAgICAgfQorICAgfQorfQorCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVuYW1lRmllbGQvYmVmb3JlQ29sbGlzaW9uc0luTWV0aG9kT2ZTdWJDbGFzcy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3JlbmFtZUZpZWxkL2JlZm9yZUNvbGxpc2lvbnNJbk1ldGhvZE9mU3ViQ2xhc3MuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40Y2JmYjg1Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3JlbmFtZUZpZWxkL2JlZm9yZUNvbGxpc2lvbnNJbk1ldGhvZE9mU3ViQ2xhc3MuamF2YQpAQCAtMCwwICsxLDE2IEBACitjbGFzcyBBIHsKKyAgIGludCA8Y2FyZXQ+ZmllbGRUb0JlUmVuYW1lZDsKK30KKyAgIAorY2xhc3MgQiBleHRlbmRzIEEgeworICAgaW50IG1ldGhvZChpbnQgbmV3RmllbGROYW1lKSB7CisgICAgICAgIGlmKG5ld0ZpZWxkTmFtZSA9PSAwKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZpZWxkVG9CZVJlbmFtZWQ7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBpbnQgbmV3RmllbGROYW1lID0gZmllbGRUb0JlUmVuYW1lZDsKKyAgICAgICAgICAgIHJldHVybiBmaWVsZFRvQmVSZW5hbWVkICsgbmV3RmllbGROYW1lOworICAgICAgICB9CisgICB9Cit9CisKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9yZW5hbWVGaWVsZC9iZWZvcmVDb2xsaXNpb25zUmVuYW1pbmdGaWVsZFdpdGhTZXR0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9yZW5hbWVGaWVsZC9iZWZvcmVDb2xsaXNpb25zUmVuYW1pbmdGaWVsZFdpdGhTZXR0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOTUxMTI2Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3JlbmFtZUZpZWxkL2JlZm9yZUNvbGxpc2lvbnNSZW5hbWluZ0ZpZWxkV2l0aFNldHRlci5qYXZhCkBAIC0wLDAgKzEsNyBAQAorcHVibGljIGNsYXNzIFRlc3QgeworICAgIHByaXZhdGUgYm9vbGVhbiA8Y2FyZXQ+aXNVVE07CisKKyAgICBwdWJsaWMgdm9pZCBzZXRVVE0oYm9vbGVhbiBVVE0pIHsKKyAgICAgICAgaXNVVE0gPSBVVE07CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9yZW5hbWVGaWVsZC9iZWZvcmVFbnVtQ29uc3RhbnRXaXRoQ29uc3RydWN0b3IuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9yZW5hbWVGaWVsZC9iZWZvcmVFbnVtQ29uc3RhbnRXaXRoQ29uc3RydWN0b3IuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMDZkMjcwCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3JlbmFtZUZpZWxkL2JlZm9yZUVudW1Db25zdGFudFdpdGhDb25zdHJ1Y3Rvci5qYXZhCkBAIC0wLDAgKzEsOCBAQAorcHVibGljIGVudW0gRm9vIHsKKworICA8Y2FyZXQ+bWVtYmVyKDY5KTsKKworICBGb28oaW50IGJhcikKKyAgeworICB9Cit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9yZW5hbWVGaWVsZC9iZWZvcmVFbnVtQ29uc3RhbnRXaXRoSW5pdGlhbGl6ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9yZW5hbWVGaWVsZC9iZWZvcmVFbnVtQ29uc3RhbnRXaXRoSW5pdGlhbGl6ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNjYzNDZjCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3JlbmFtZUZpZWxkL2JlZm9yZUVudW1Db25zdGFudFdpdGhJbml0aWFsaXplci5qYXZhCkBAIC0wLDAgKzEsMTEgQEAKK3B1YmxpYyBlbnVtIE15RW51bQoreworICAgIDxjYXJldD5BIHsKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7CisgICAgICAgICAgICByZXR1cm4gImEiOworICAgICAgICB9CisgICAgfSwKKyAgICBCLAorICAgIEMKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVuYW1lRmllbGQvYmVmb3JlRmllbGRJbkNvbHVtbnMuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9yZW5hbWVGaWVsZC9iZWZvcmVGaWVsZEluQ29sdW1ucy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjllMjE0MjAxCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3JlbmFtZUZpZWxkL2JlZm9yZUZpZWxkSW5Db2x1bW5zLmphdmEKQEAgLTAsMCArMSwyMyBAQAorLyoKKyAqIENvcHlyaWdodCAyMDAwLTIwMTIgSmV0QnJhaW5zIHMuci5vLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KK2NsYXNzIFRlc3QgeworICAgIGludCBpICAgICAgICAgICAgICAgICA9IDE7CisgICAgaW50IGZpZWxkV2l0aExvbmdOYW1lID0gMjsKKworICAgIHZvaWQgdGVzdCgpIHsKKyAgICAgICAgPGNhcmV0PmkgPSAzOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVuYW1lRmllbGQvYmVmb3JlSGlkZXNPdXRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3JlbmFtZUZpZWxkL2JlZm9yZUhpZGVzT3V0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NTAwN2ZkCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3JlbmFtZUZpZWxkL2JlZm9yZUhpZGVzT3V0ZXIuamF2YQpAQCAtMCwwICsxLDE3IEBACitjbGFzcyBGb28geworICAgIHB1YmxpYyBpbnQgeDsKKworICAgIHB1YmxpYyB2b2lkIGZvbygpIHsKKyAgICAgICAgaW50IHkgPSAwOworICAgICAgICB5ID0geCArIDE7CisgICAgfQorCisgICAgcHVibGljIGNsYXNzIElubmVyIHsKKyAgICAgICAgcHVibGljIGludCA8Y2FyZXQ+ejsKKworICAgICAgICBwdWJsaWMgdm9pZCBmb28oKSB7CisgICAgICAgICAgICB6ID0gbmV3IEZvbygpLnggKyAxOworICAgICAgICAgICAgeiA9IHggKyAxOworICAgICAgICB9CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3JlbmFtZUZpZWxkL2JlZm9yZU5vbk5vcm1hbGl6ZWRGaWVsZHMuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9yZW5hbWVGaWVsZC9iZWZvcmVOb25Ob3JtYWxpemVkRmllbGRzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTYyODJhYwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9yZW5hbWVGaWVsZC9iZWZvcmVOb25Ob3JtYWxpemVkRmllbGRzLmphdmEKQEAgLTAsMCArMSw4IEBACitwdWJsaWMgY2xhc3MgVGVzdFJlZmFjdG9yCit7CitwdWJsaWMgU3RyaW5nIHVpVGVzdDEgPSBuZXcgU3RyaW5nKCJUZXN0MSIpLAordWlUZXN0MjxjYXJldD4gPSBuZXcgU3RyaW5nKCJUZXN0MiIpLAordWlUZXN0MyA9IG5ldyBTdHJpbmcoIlRlc3QxIik7Cit7IFN5c3RlbS5vdXQucHJpbnRsbih1aVRlc3QyKTt9CisKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVuYW1lRmllbGQvYmVmb3JlUmVuYW1lV3JvbmdSZWZEaXNhYmxlZC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3JlbmFtZUZpZWxkL2JlZm9yZVJlbmFtZVdyb25nUmVmRGlzYWJsZWQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZTA2M2YyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3JlbmFtZUZpZWxkL2JlZm9yZVJlbmFtZVdyb25nUmVmRGlzYWJsZWQuamF2YQpAQCAtMCwwICsxLDkgQEAKK2NsYXNzIEEgeworICAgIHByaXZhdGUgaW50IG15RmllbGQ7Cit9CisKK2NsYXNzIEIgZXh0ZW5kcyBBIHsKKyAgICB2b2lkIG1ldGhvZCgpIHsKKyAgICAgICAgbXlGaTxjYXJldD5lbGQ7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9yZW5hbWVGaWVsZC9iZWZvcmVTaW1wbGVGaWVsZFJlbmFtaW5nLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVuYW1lRmllbGQvYmVmb3JlU2ltcGxlRmllbGRSZW5hbWluZy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYyMGZjODcKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVuYW1lRmllbGQvYmVmb3JlU2ltcGxlRmllbGRSZW5hbWluZy5qYXZhCkBAIC0wLDAgKzEsOSBAQAorY2xhc3MgQSB7CisgICAgaW50IDxjYXJldD5teUZpZWxkOworfQorCitjbGFzcyBCIHsKKyAgICBpbnQgbWV0aG9kKEEgYSkgeworICAgICAgICByZXR1cm4gQS5teUZpZWxkOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVuYW1lSW5wbGFjZS9DbGFzc1dpdGhNdWx0aXBsZUNvbnN0cnVjdG9ycy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3JlbmFtZUlucGxhY2UvQ2xhc3NXaXRoTXVsdGlwbGVDb25zdHJ1Y3RvcnMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MTBmZmQ1Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3JlbmFtZUlucGxhY2UvQ2xhc3NXaXRoTXVsdGlwbGVDb25zdHJ1Y3RvcnMuamF2YQpAQCAtMCwwICsxLDEzIEBACitwdWJsaWMgY2xhc3MgQ29uc3RydWN0b3IgeworICBwdWJsaWMgQ29uc3RydWN0b3IoKSB7CisgIH0KKworICBwdWJsaWMgQ29uc3RydWN0b3IoaW50IGkpIHsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oaSk7CisgIH0KKworICB2b2lkIGZvbygpIHsKKyAgICBmaW5hbCBDb25zdHI8Y2FyZXQ+dWN0b3IgY29uc3RydWN0b3IgPSBuZXcgQ29uc3RydWN0b3IoKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oY29uc3RydWN0b3IpOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3JlbmFtZUlucGxhY2UvQ2xhc3NXaXRoTXVsdGlwbGVDb25zdHJ1Y3RvcnNfYWZ0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9yZW5hbWVJbnBsYWNlL0NsYXNzV2l0aE11bHRpcGxlQ29uc3RydWN0b3JzX2FmdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDE3MDk4ZAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9yZW5hbWVJbnBsYWNlL0NsYXNzV2l0aE11bHRpcGxlQ29uc3RydWN0b3JzX2FmdGVyLmphdmEKQEAgLTAsMCArMSwxMyBAQAorcHVibGljIGNsYXNzIEJhciB7CisgIHB1YmxpYyBCYXIoKSB7CisgIH0KKworICBwdWJsaWMgQmFyKGludCBpKSB7CisgICAgU3lzdGVtLm91dC5wcmludGxuKGkpOworICB9CisKKyAgdm9pZCBmb28oKSB7CisgICAgZmluYWwgQmFyIGJhciA9IG5ldyBCYXIoKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oYmFyKTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9yZW5hbWVJbnBsYWNlL0NvbmZsaWN0aW5nTWV0aG9kTmFtZS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3JlbmFtZUlucGxhY2UvQ29uZmxpY3RpbmdNZXRob2ROYW1lLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmIxMmQxMQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9yZW5hbWVJbnBsYWNlL0NvbmZsaWN0aW5nTWV0aG9kTmFtZS5qYXZhCkBAIC0wLDAgKzEsMTIgQEAKK2NsYXNzIEZvbyB7CisgIHZvaWQgZm9vKCl7fQorICB2b2lkIGJhcigpIHsKKyAgICBmb28oKTsKKyAgfQorfQorCitjbGFzcyBGb29JbXBsIGV4dGVuZHMgRm9vIHsKKyAgdm9pZCBmPGNhcmV0Pm9vKCkgeworICAgIHN1cGVyLmZvbygpOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3JlbmFtZUlucGxhY2UvQ29uZmxpY3RpbmdNZXRob2ROYW1lX2FmdGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVuYW1lSW5wbGFjZS9Db25mbGljdGluZ01ldGhvZE5hbWVfYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44Yjc2MDdlCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3JlbmFtZUlucGxhY2UvQ29uZmxpY3RpbmdNZXRob2ROYW1lX2FmdGVyLmphdmEKQEAgLTAsMCArMSwxMiBAQAorY2xhc3MgRm9vIHsKKyAgdm9pZCBmb28oKXt9CisgIHZvaWQgYmFyKCkgeworICAgIGZvbygpOworICB9Cit9CisKK2NsYXNzIEZvb0ltcGwgZXh0ZW5kcyBGb28geworICB2b2lkIGZvbygpIHsKKyAgICBzdXBlci5mb28oKTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9yZW5hbWVJbnBsYWNlL0NvbnN0cnVjdG9yLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVuYW1lSW5wbGFjZS9Db25zdHJ1Y3Rvci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ3YTcxNmIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVuYW1lSW5wbGFjZS9Db25zdHJ1Y3Rvci5qYXZhCkBAIC0wLDAgKzEsOCBAQAorcHVibGljIGNsYXNzIENvbnN0cnVjdG9yIHsKKyAgcHVibGljIENvbnN0cnVjdG9yKCkgeworICB9CisgIHZvaWQgZm9vKCkgeworICAgIGZpbmFsIENvbnN0cnVjdG9yIGNvbnN0cnVjdG9yID0gbmV3IENvPGNhcmV0Pm5zdHJ1Y3RvcigpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbihjb25zdHJ1Y3Rvcik7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVuYW1lSW5wbGFjZS9Db25zdHJ1Y3Rvcl9hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3JlbmFtZUlucGxhY2UvQ29uc3RydWN0b3JfYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNTk0MzQxCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3JlbmFtZUlucGxhY2UvQ29uc3RydWN0b3JfYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDggQEAKK3B1YmxpYyBjbGFzcyBCYXIgeworICBwdWJsaWMgQmFyKCkgeworICB9CisgIHZvaWQgZm9vKCkgeworICAgIGZpbmFsIEJhciBiYXIgPSBuZXcgQmFyKCk7CisgICAgU3lzdGVtLm91dC5wcmludGxuKGJhcik7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVuYW1lSW5wbGFjZS9FbnVtQ29uc3RydWN0b3IuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9yZW5hbWVJbnBsYWNlL0VudW1Db25zdHJ1Y3Rvci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIyNWVmMTAKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVuYW1lSW5wbGFjZS9FbnVtQ29uc3RydWN0b3IuamF2YQpAQCAtMCwwICsxLDggQEAKK2VudW0gRm9vIHsKKyAgQkFSLAorICBCQVoKKyAgOworCisgIEZvPGNhcmV0Pm8oKSB7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVuYW1lSW5wbGFjZS9FbnVtQ29uc3RydWN0b3JfYWZ0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9yZW5hbWVJbnBsYWNlL0VudW1Db25zdHJ1Y3Rvcl9hZnRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgzZmQ2NjIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVuYW1lSW5wbGFjZS9FbnVtQ29uc3RydWN0b3JfYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDggQEAKK2VudW0gQmFyIHsKKyAgQkFSLAorICBCQVoKKyAgOworCisgIEJhcigpIHsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9yZW5hbWVJbnBsYWNlL0lubmVyQ2xhc3MuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9yZW5hbWVJbnBsYWNlL0lubmVyQ2xhc3MuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZGY3ZGEyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3JlbmFtZUlucGxhY2UvSW5uZXJDbGFzcy5qYXZhCkBAIC0wLDAgKzEsMTUgQEAKK3B1YmxpYyBjbGFzcyBSZXNvdXJjZUxvY2F0b3IgeworICAgIHByaXZhdGUgQ29udGVudENvbnRhaW5zQ2hlY2tlciBteUNvbnRlbnRDb250YWluc0NoZWNrZXI7CisgICAgcHJpdmF0ZSBEZWx0YUk8Y2FyZXQ+bmZvR2V0dGVyIG15RGVsdGFJbmZvR2V0dGVyOworCisKKyAgICBwcml2YXRlIGNsYXNzIENvbnRlbnRDb250YWluc0NoZWNrZXIgeworCisgICAgfQorCisgICAgcHJpdmF0ZSBjbGFzcyBSZXZpc2lvbkluZm9Db250YWluc0NoZWNrZXIgeworICAgIH0KKworICAgIHByaXZhdGUgY2xhc3MgRGVsdGFJbmZvR2V0dGVyIHsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVuYW1lSW5wbGFjZS9Jbm5lckNsYXNzX2FmdGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVuYW1lSW5wbGFjZS9Jbm5lckNsYXNzX2FmdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDVlNWQxZgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9yZW5hbWVJbnBsYWNlL0lubmVyQ2xhc3NfYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDE1IEBACitwdWJsaWMgY2xhc3MgUmVzb3VyY2VMb2NhdG9yIHsKKyAgICBwcml2YXRlIENvbnRlbnRDb250YWluc0NoZWNrZXIgbXlDb250ZW50Q29udGFpbnNDaGVja2VyOworICAgIHByaXZhdGUgTkVXX05BTUUgbXlORVdOQU1FOworCisKKyAgICBwcml2YXRlIGNsYXNzIENvbnRlbnRDb250YWluc0NoZWNrZXIgeworCisgICAgfQorCisgICAgcHJpdmF0ZSBjbGFzcyBSZXZpc2lvbkluZm9Db250YWluc0NoZWNrZXIgeworICAgIH0KKworICAgIHByaXZhdGUgY2xhc3MgTkVXX05BTUUgeworICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9yZW5hbWVJbnBsYWNlL01ldGhvZFdpdGhKYXZhZG9jUmVmLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVuYW1lSW5wbGFjZS9NZXRob2RXaXRoSmF2YWRvY1JlZi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY4MDdhZmMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVuYW1lSW5wbGFjZS9NZXRob2RXaXRoSmF2YWRvY1JlZi5qYXZhCkBAIC0wLDAgKzEsMTEgQEAKK3B1YmxpYyBjbGFzcyBSZWZhY3RvckJ1ZyB7CisgICAgcHVibGljIHN0YXRpYyB2b2lkIHNvbTxjYXJldD5ldGhpbmcoaW50IGEsIGZsb2F0IGIpIHsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBAc2VlICNzb21ldGhpbmcoaW50LCBmbG9hdCkKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgc29tZXRoaW5nRWxzZSgpIHsKKworICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9yZW5hbWVJbnBsYWNlL01ldGhvZFdpdGhKYXZhZG9jUmVmX2FmdGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVuYW1lSW5wbGFjZS9NZXRob2RXaXRoSmF2YWRvY1JlZl9hZnRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNmYjFmYzIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVuYW1lSW5wbGFjZS9NZXRob2RXaXRoSmF2YWRvY1JlZl9hZnRlci5qYXZhCkBAIC0wLDAgKzEsMTEgQEAKK3B1YmxpYyBjbGFzcyBSZWZhY3RvckJ1ZyB7CisgICAgcHVibGljIHN0YXRpYyB2b2lkIGJhcihpbnQgYSwgZmxvYXQgYikgeworICAgIH0KKworICAgIC8qKgorICAgICAqIEBzZWUgI2JhcihpbnQsIGZsb2F0KQorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBzb21ldGhpbmdFbHNlKCkgeworCisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3JlbmFtZUlucGxhY2UvTWV0aG9kV2l0aE1ldGhvZFJlZi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3JlbmFtZUlucGxhY2UvTWV0aG9kV2l0aE1ldGhvZFJlZi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc5MDFhZGYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVuYW1lSW5wbGFjZS9NZXRob2RXaXRoTWV0aG9kUmVmLmphdmEKQEAgLTAsMCArMSwxNCBAQAorY2xhc3MgTXlUZXN0IHsKKyAgICAKKyAgICBzdGF0aWMgY2xhc3MgRm9vIHsKKyAgICB9CisgICAgCisgICAgaW50ZXJmYWNlIEkgeworICAgICAgICBGb28gbSgpOworICAgIH0KKyAgICBzdGF0aWMgRm9vIGY8Y2FyZXQ+b28oKSB7IHJldHVybiBudWxsOyB9CisKKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisgICAgICAgIEkgaSA9IE15VGVzdDo6Zm9vOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVuYW1lSW5wbGFjZS9NZXRob2RXaXRoTWV0aG9kUmVmX2FmdGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVuYW1lSW5wbGFjZS9NZXRob2RXaXRoTWV0aG9kUmVmX2FmdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjUwNzY5OAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9yZW5hbWVJbnBsYWNlL01ldGhvZFdpdGhNZXRob2RSZWZfYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDE0IEBACitjbGFzcyBNeVRlc3QgeworICAgIAorICAgIHN0YXRpYyBjbGFzcyBGb28geworICAgIH0KKyAgICAKKyAgICBpbnRlcmZhY2UgSSB7CisgICAgICAgIEZvbyBtKCk7CisgICAgfQorICAgIHN0YXRpYyBGb28gYmFyKCkgeyByZXR1cm4gbnVsbDsgfQorCisgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworICAgICAgICBJIGkgPSBNeVRlc3Q6OmJhcjsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3JlbmFtZUlucGxhY2UvTXVsdGlwbGVDb25zdHJ1Y3RvcnMuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9yZW5hbWVJbnBsYWNlL011bHRpcGxlQ29uc3RydWN0b3JzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjZmMDk4NgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9yZW5hbWVJbnBsYWNlL011bHRpcGxlQ29uc3RydWN0b3JzLmphdmEKQEAgLTAsMCArMSwxMyBAQAorcHVibGljIGNsYXNzIENvbnN0cnVjdG9yIHsKKyAgcHVibGljIENvbnN0cnVjdG9yKCkgeworICB9CisKKyAgcHVibGljIENvbnN0cnVjdG9yKGludCBpKSB7CisgICAgU3lzdGVtLm91dC5wcmludGxuKGkpOworICB9CisKKyAgdm9pZCBmb28oKSB7CisgICAgZmluYWwgQ29uc3RydWN0b3IgY29uc3RydWN0b3IgPSBuZXcgQ288Y2FyZXQ+bnN0cnVjdG9yKCk7CisgICAgU3lzdGVtLm91dC5wcmludGxuKGNvbnN0cnVjdG9yKTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9yZW5hbWVJbnBsYWNlL011bHRpcGxlQ29uc3RydWN0b3JzX2FmdGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVuYW1lSW5wbGFjZS9NdWx0aXBsZUNvbnN0cnVjdG9yc19hZnRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQxNzA5OGQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVuYW1lSW5wbGFjZS9NdWx0aXBsZUNvbnN0cnVjdG9yc19hZnRlci5qYXZhCkBAIC0wLDAgKzEsMTMgQEAKK3B1YmxpYyBjbGFzcyBCYXIgeworICBwdWJsaWMgQmFyKCkgeworICB9CisKKyAgcHVibGljIEJhcihpbnQgaSkgeworICAgIFN5c3RlbS5vdXQucHJpbnRsbihpKTsKKyAgfQorCisgIHZvaWQgZm9vKCkgeworICAgIGZpbmFsIEJhciBiYXIgPSBuZXcgQmFyKCk7CisgICAgU3lzdGVtLm91dC5wcmludGxuKGJhcik7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVuYW1lSW5wbGFjZS9TdXBlck1ldGhvZC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3JlbmFtZUlucGxhY2UvU3VwZXJNZXRob2QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYjEyZDExCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3JlbmFtZUlucGxhY2UvU3VwZXJNZXRob2QuamF2YQpAQCAtMCwwICsxLDEyIEBACitjbGFzcyBGb28geworICB2b2lkIGZvbygpe30KKyAgdm9pZCBiYXIoKSB7CisgICAgZm9vKCk7CisgIH0KK30KKworY2xhc3MgRm9vSW1wbCBleHRlbmRzIEZvbyB7CisgIHZvaWQgZjxjYXJldD5vbygpIHsKKyAgICBzdXBlci5mb28oKTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9yZW5hbWVJbnBsYWNlL1N1cGVyTWV0aG9kQW5vbnltb3VzSW5oZXJpdG9yLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVuYW1lSW5wbGFjZS9TdXBlck1ldGhvZEFub255bW91c0luaGVyaXRvci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQzMGYyZGEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVuYW1lSW5wbGFjZS9TdXBlck1ldGhvZEFub255bW91c0luaGVyaXRvci5qYXZhCkBAIC0wLDAgKzEsMTYgQEAKK2NsYXNzIERlbW8geworICAgIGNsYXNzIE15RXZlbnQ8VD4ge30KKyAgICBpbnRlcmZhY2UgTXlFdmVudExpc3RlbmVyPFQ+IHsKKyAgICAgICAgdm9pZCBhY3Rpb24oTXlFdmVudDxUPiBldmVudCk7CisgICAgfQorCisgICAgY2xhc3MgRHJpdmVyIHsKKyAgICAgICAgdm9pZCBtZXRob2QoKSB7CisgICAgICAgICAgICBNeUV2ZW50TGlzdGVuZXI8T2JqZWN0PiBsID0gbmV3IE15RXZlbnRMaXN0ZW5lcjxPYmplY3Q+KCkgeworICAgICAgICAgICAgICAgIHB1YmxpYyB2b2lkIGFjPGNhcmV0PnRpb24oTXlFdmVudDxPYmplY3Q+IGV2ZW50KSB7CisgICAgICAgICAgICAgICAgICAgIC8vVG8gY2hhbmdlIGJvZHkgb2YgaW1wbGVtZW50ZWQgbWV0aG9kcyB1c2UgRmlsZSB8IFNldHRpbmdzIHwgRmlsZSBUZW1wbGF0ZXMuCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfTsKKyAgICAgICAgfQorICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVuYW1lSW5wbGFjZS9TdXBlck1ldGhvZEFub255bW91c0luaGVyaXRvcl9hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3JlbmFtZUlucGxhY2UvU3VwZXJNZXRob2RBbm9ueW1vdXNJbmhlcml0b3JfYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZTlmOWM2Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3JlbmFtZUlucGxhY2UvU3VwZXJNZXRob2RBbm9ueW1vdXNJbmhlcml0b3JfYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDE2IEBACitjbGFzcyBEZW1vIHsKKyAgICBjbGFzcyBNeUV2ZW50PFQ+IHt9CisgICAgaW50ZXJmYWNlIE15RXZlbnRMaXN0ZW5lcjxUPiB7CisgICAgICAgIHZvaWQgeHh4KE15RXZlbnQ8VD4gZXZlbnQpOworICAgIH0KKworICAgIGNsYXNzIERyaXZlciB7CisgICAgICAgIHZvaWQgbWV0aG9kKCkgeworICAgICAgICAgICAgTXlFdmVudExpc3RlbmVyPE9iamVjdD4gbCA9IG5ldyBNeUV2ZW50TGlzdGVuZXI8T2JqZWN0PigpIHsKKyAgICAgICAgICAgICAgICBwdWJsaWMgdm9pZCB4eHgoTXlFdmVudDxPYmplY3Q+IGV2ZW50KSB7CisgICAgICAgICAgICAgICAgICAgIC8vVG8gY2hhbmdlIGJvZHkgb2YgaW1wbGVtZW50ZWQgbWV0aG9kcyB1c2UgRmlsZSB8IFNldHRpbmdzIHwgRmlsZSBUZW1wbGF0ZXMuCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfTsKKyAgICAgICAgfQorICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVuYW1lSW5wbGFjZS9TdXBlck1ldGhvZF9hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3JlbmFtZUlucGxhY2UvU3VwZXJNZXRob2RfYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMWQyOGNlZQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9yZW5hbWVJbnBsYWNlL1N1cGVyTWV0aG9kX2FmdGVyLmphdmEKQEAgLTAsMCArMSwxMiBAQAorY2xhc3MgRm9vIHsKKyAgdm9pZCB4eHgoKXt9CisgIHZvaWQgYmFyKCkgeworICAgIHh4eCgpOworICB9Cit9CisKK2NsYXNzIEZvb0ltcGwgZXh0ZW5kcyBGb28geworICB2b2lkIHh4eCgpIHsKKyAgICBzdXBlci54eHgoKTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9yZW5hbWVMb2NhbC9DbGFzc05hbWVVc2VkSW5NZXRob2RSZWZzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVuYW1lTG9jYWwvQ2xhc3NOYW1lVXNlZEluTWV0aG9kUmVmcy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk4MmQ2NDAKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVuYW1lTG9jYWwvQ2xhc3NOYW1lVXNlZEluTWV0aG9kUmVmcy5qYXZhCkBAIC0wLDAgKzEsMTcgQEAKK3B1YmxpYyBjbGFzcyBGb29CYXIgeworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGNsYXNzIEI8Y2FyZXQ+YXIgeworICAgICAgICBwcml2YXRlIEJhcigpIHsKKyAgICAgICAgfQorICAgIH0KKworICAgIHByaXZhdGUgaW50ZXJmYWNlIEk8VD4geworICAgICAgICBUIGNyZWF0ZSgpOworICAgIH0KKworICAgIHN0YXRpYyB2b2lkIGZvbyhJIGludGYpIHt9CisKKworICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICBmb28oQmFyOjpuZXcpOworICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9yZW5hbWVMb2NhbC9DbGFzc05hbWVVc2VkSW5NZXRob2RSZWZzX2FmdGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVuYW1lTG9jYWwvQ2xhc3NOYW1lVXNlZEluTWV0aG9kUmVmc19hZnRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZlYzkwOGIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVuYW1lTG9jYWwvQ2xhc3NOYW1lVXNlZEluTWV0aG9kUmVmc19hZnRlci5qYXZhCkBAIC0wLDAgKzEsMTcgQEAKK3B1YmxpYyBjbGFzcyBGb29CYXIgeworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGNsYXNzIEJhcjEgeworICAgICAgICBwcml2YXRlIEJhcjEoKSB7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwcml2YXRlIGludGVyZmFjZSBJPFQ+IHsKKyAgICAgICAgVCBjcmVhdGUoKTsKKyAgICB9CisKKyAgICBzdGF0aWMgdm9pZCBmb28oSSBpbnRmKSB7fQorCisKKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgZm9vKEJhcjE6Om5ldyk7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3JlbmFtZUxvY2FsL0NvbmZsaWN0V2l0aEphdmFkb2NUYWcuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9yZW5hbWVMb2NhbC9Db25mbGljdFdpdGhKYXZhZG9jVGFnLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTNkOTA1YgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9yZW5hbWVMb2NhbC9Db25mbGljdFdpdGhKYXZhZG9jVGFnLmphdmEKQEAgLTAsMCArMSw5IEBACitwdWJsaWMgY2xhc3MgQ29uZmxpY3RXaXRoSmF2YWRvY1RhZyB7CisgIC8qKgorICAgKiBSZWNlaXZlcyBzb21lIHBhcmFtLgorICAgKiBAcGFyYW0gcGFyYW0gc29tZSBwYXJhbQorICAgKi8KKyAgcHVibGljIHZvaWQgbXkoaW50IDxjYXJldD5wYXJhbSkgeworICAgIFN5c3RlbS5vdXQucHJpbnRsbigicGFyYW09IiArIHBhcmFtKTsgIC8vIHByaW50IHBhcmFtCisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVuYW1lTG9jYWwvQ29uZmxpY3RXaXRoSmF2YWRvY1RhZ19hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3JlbmFtZUxvY2FsL0NvbmZsaWN0V2l0aEphdmFkb2NUYWdfYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMDMyMDYzCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3JlbmFtZUxvY2FsL0NvbmZsaWN0V2l0aEphdmFkb2NUYWdfYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDkgQEAKK3B1YmxpYyBjbGFzcyBDb25mbGljdFdpdGhKYXZhZG9jVGFnIHsKKyAgLyoqCisgICAqIFJlY2VpdmVzIHNvbWUgaS4KKyAgICogQHBhcmFtIGkgc29tZSBpCisgICAqLworICBwdWJsaWMgdm9pZCBteShpbnQgaSkgeworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiaT0iICsgaSk7ICAvLyBwcmludCBpCisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVuYW1lTG9jYWwvQ29uZmxpY3RXaXRoT3V0ZXJDbGFzc0ZpZWxkLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVuYW1lTG9jYWwvQ29uZmxpY3RXaXRoT3V0ZXJDbGFzc0ZpZWxkLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjVlMzM3NAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9yZW5hbWVMb2NhbC9Db25mbGljdFdpdGhPdXRlckNsYXNzRmllbGQuamF2YQpAQCAtMCwwICsxLDEwIEBACitwdWJsaWMgY2xhc3MgSGVsbG9Xb3JsZCB7CisgICAgcHJpdmF0ZSBTdHJpbmcgZjsKKworICAgIHB1YmxpYyBjbGFzcyBBIHsKKworICAgICAgICBwdWJsaWMgdm9pZCB0ZXN0KCkgeworICAgICAgICAgICAgU3RyaW5nIDxjYXJldD5zID0gZjsKKyAgICAgICAgfQorICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVuYW1lTG9jYWwvQ29uZmxpY3RXaXRoT3V0ZXJDbGFzc0ZpZWxkX2FmdGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVuYW1lTG9jYWwvQ29uZmxpY3RXaXRoT3V0ZXJDbGFzc0ZpZWxkX2FmdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWQ5OTJkOAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9yZW5hbWVMb2NhbC9Db25mbGljdFdpdGhPdXRlckNsYXNzRmllbGRfYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDEwIEBACitwdWJsaWMgY2xhc3MgSGVsbG9Xb3JsZCB7CisgICAgcHJpdmF0ZSBTdHJpbmcgZjsKKworICAgIHB1YmxpYyBjbGFzcyBBIHsKKworICAgICAgICBwdWJsaWMgdm9pZCB0ZXN0KCkgeworICAgICAgICAgICAgU3RyaW5nIGYgPSBIZWxsb1dvcmxkLnRoaXMuZjsKKyAgICAgICAgfQorICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVuYW1lTG9jYWwvSURFQURFVjEzODQ5LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVuYW1lTG9jYWwvSURFQURFVjEzODQ5LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWE3NTRhZQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9yZW5hbWVMb2NhbC9JREVBREVWMTM4NDkuamF2YQpAQCAtMCwwICsxLDcgQEAKK2NsYXNzIFRlc3QgeworCisgICAgcHJpdmF0ZSB2b2lkIHRlc3QoKSB7CisgICAgICAgIFN0cmluZyA8Y2FyZXQ+YWFhYSA9ICJzZGYiOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlx0YWFhYSIpOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVuYW1lTG9jYWwvSURFQURFVjEzODQ5X2FmdGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVuYW1lTG9jYWwvSURFQURFVjEzODQ5X2FmdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzg3NjkwNAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9yZW5hbWVMb2NhbC9JREVBREVWMTM4NDlfYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDcgQEAKK2NsYXNzIFRlc3QgeworCisgICAgcHJpdmF0ZSB2b2lkIHRlc3QoKSB7CisgICAgICAgIFN0cmluZyA8Y2FyZXQ+YWFhYWEgPSAic2RmIjsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJcdGFhYWFhIik7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9yZW5hbWVMb2NhbC9JREVBREVWMzMyMC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3JlbmFtZUxvY2FsL0lERUFERVYzMzIwLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDJjNzVkZAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9yZW5hbWVMb2NhbC9JREVBREVWMzMyMC5qYXZhCkBAIC0wLDAgKzEsOCBAQAorY2xhc3MgQyB7CisgICAgaW50IGY7CisKKyAgICB7CisgICAgICAgIGludCA8Y2FyZXQ+aiA9IDA7CisgICAgICAgIGludCBrID0gZjsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3JlbmFtZUxvY2FsL0lERUFERVYzMzIwX2FmdGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVuYW1lTG9jYWwvSURFQURFVjMzMjBfYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NzY1ZWVkCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3JlbmFtZUxvY2FsL0lERUFERVYzMzIwX2FmdGVyLmphdmEKQEAgLTAsMCArMSw4IEBACitjbGFzcyBDIHsKKyAgICBpbnQgZjsKKworICAgIHsKKyAgICAgICAgaW50IGYgPSAwOworICAgICAgICBpbnQgayA9IHRoaXMuZjsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3JlbmFtZUxvY2FsL1JlbmFtZUZpZWxkV2l0aENvbnN0cnVjdG9yUGFyYW1BdXRvbWF0aWMuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9yZW5hbWVMb2NhbC9SZW5hbWVGaWVsZFdpdGhDb25zdHJ1Y3RvclBhcmFtQXV0b21hdGljLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTc4YjI0YgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9yZW5hbWVMb2NhbC9SZW5hbWVGaWVsZFdpdGhDb25zdHJ1Y3RvclBhcmFtQXV0b21hdGljLmphdmEKQEAgLTAsMCArMSw3IEBACitjbGFzcyBUZXN0IHsKKyAgcHJpdmF0ZSBib29sZWFuIGlzPGNhcmV0PkZsYWcgPSBmYWxzZTsKKworICBwdWJsaWMgVGVzdChib29sZWFuIGlzRmxhZykgeworICAgIHRoaXMuaXNGbGFnID0gaXNGbGFnOworICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVuYW1lTG9jYWwvUmVuYW1lRmllbGRXaXRoQ29uc3RydWN0b3JQYXJhbUF1dG9tYXRpY19hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3JlbmFtZUxvY2FsL1JlbmFtZUZpZWxkV2l0aENvbnN0cnVjdG9yUGFyYW1BdXRvbWF0aWNfYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNDc0MzMyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3JlbmFtZUxvY2FsL1JlbmFtZUZpZWxkV2l0aENvbnN0cnVjdG9yUGFyYW1BdXRvbWF0aWNfYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDcgQEAKK2NsYXNzIFRlc3QgeworICBwcml2YXRlIGJvb2xlYW4gcHAgPSBmYWxzZTsKKworICBwdWJsaWMgVGVzdChib29sZWFuIHBwKSB7CisgICAgdGhpcy5wcCA9IHBwOworICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVuYW1lTG9jYWwvUmVuYW1lSW5QbGFjZUluU3RhdGljQ29udGV4dFdpdGhDb25mbGljdGluZ0ZpZWxkLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVuYW1lTG9jYWwvUmVuYW1lSW5QbGFjZUluU3RhdGljQ29udGV4dFdpdGhDb25mbGljdGluZ0ZpZWxkLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTk1NzY2YgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9yZW5hbWVMb2NhbC9SZW5hbWVJblBsYWNlSW5TdGF0aWNDb250ZXh0V2l0aENvbmZsaWN0aW5nRmllbGQuamF2YQpAQCAtMCwwICsxLDcgQEAKK2NsYXNzIFggeworICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBzID0gInMiOworCisgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZy4uLiBhcmdzKSB7CisgICAgU3RyaW5nIHM8Y2FyZXQ+MSA9IHM7CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9yZW5hbWVMb2NhbC9SZW5hbWVJblBsYWNlSW5TdGF0aWNDb250ZXh0V2l0aENvbmZsaWN0aW5nRmllbGRfYWZ0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9yZW5hbWVMb2NhbC9SZW5hbWVJblBsYWNlSW5TdGF0aWNDb250ZXh0V2l0aENvbmZsaWN0aW5nRmllbGRfYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZTg2MmYyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3JlbmFtZUxvY2FsL1JlbmFtZUluUGxhY2VJblN0YXRpY0NvbnRleHRXaXRoQ29uZmxpY3RpbmdGaWVsZF9hZnRlci5qYXZhCkBAIC0wLDAgKzEsNyBAQAorY2xhc3MgWCB7CisgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIHMgPSAicyI7CisKKyAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nLi4uIGFyZ3MpIHsKKyAgICBTdHJpbmcgcyA9IFguczsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3JlbmFtZUxvY2FsL1JlbmFtZUluUGxhY2VQYXJhbUluT3ZlcnJpZGVyQXV0b21hdGljUmVuYW1lci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3JlbmFtZUxvY2FsL1JlbmFtZUluUGxhY2VQYXJhbUluT3ZlcnJpZGVyQXV0b21hdGljUmVuYW1lci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE2Mzg0MzEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVuYW1lTG9jYWwvUmVuYW1lSW5QbGFjZVBhcmFtSW5PdmVycmlkZXJBdXRvbWF0aWNSZW5hbWVyLmphdmEKQEAgLTAsMCArMSwxMiBAQAorcHVibGljIGNsYXNzIFRlc3QgeworICBpbnQgbXlJOworICB2b2lkIGZvbyhpbnQgPGNhcmV0PmkpeworICAgIG15SSA9IGk7CisgIH0KK30KKworY2xhc3MgVGVzdEltcGwgZXh0ZW5kcyBUZXN0IHsKKyAgdm9pZCBmb28oaW50IGkpeworICAgIHN1cGVyLmZvbyhpKTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9yZW5hbWVMb2NhbC9SZW5hbWVJblBsYWNlUGFyYW1Jbk92ZXJyaWRlckF1dG9tYXRpY1JlbmFtZXJDb25mbGljdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3JlbmFtZUxvY2FsL1JlbmFtZUluUGxhY2VQYXJhbUluT3ZlcnJpZGVyQXV0b21hdGljUmVuYW1lckNvbmZsaWN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjVhNjE1MgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9yZW5hbWVMb2NhbC9SZW5hbWVJblBsYWNlUGFyYW1Jbk92ZXJyaWRlckF1dG9tYXRpY1JlbmFtZXJDb25mbGljdC5qYXZhCkBAIC0wLDAgKzEsMTQgQEAKK3B1YmxpYyBjbGFzcyBUZXN0IHsKKyAgaW50IG15STsKKyAgdm9pZCBmb28oaW50IDxjYXJldD5pKXsKKyAgICBteUkgPSBpOworICB9Cit9CisKK2NsYXNzIFRlc3RJbXBsIGV4dGVuZHMgVGVzdCB7CisgIHZvaWQgZm9vKGludCBpKXsKKyAgICBzdXBlci5mb28oaSk7CisgICAgaW50IHBwID0gMDsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4ocHApOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3JlbmFtZUxvY2FsL1JlbmFtZUluUGxhY2VQYXJhbUluT3ZlcnJpZGVyQXV0b21hdGljUmVuYW1lckNvbmZsaWN0X2FmdGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVuYW1lTG9jYWwvUmVuYW1lSW5QbGFjZVBhcmFtSW5PdmVycmlkZXJBdXRvbWF0aWNSZW5hbWVyQ29uZmxpY3RfYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNTljNDVlCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3JlbmFtZUxvY2FsL1JlbmFtZUluUGxhY2VQYXJhbUluT3ZlcnJpZGVyQXV0b21hdGljUmVuYW1lckNvbmZsaWN0X2FmdGVyLmphdmEKQEAgLTAsMCArMSwxNCBAQAorcHVibGljIGNsYXNzIFRlc3QgeworICBpbnQgbXlJOworICB2b2lkIGZvbyhpbnQgcHApeworICAgIG15SSA9IHBwOworICB9Cit9CisKK2NsYXNzIFRlc3RJbXBsIGV4dGVuZHMgVGVzdCB7CisgIHZvaWQgZm9vKGludCBpKXsKKyAgICBzdXBlci5mb28oaSk7CisgICAgaW50IHBwID0gMDsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4ocHApOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3JlbmFtZUxvY2FsL1JlbmFtZUluUGxhY2VQYXJhbUluT3ZlcnJpZGVyQXV0b21hdGljUmVuYW1lcl9hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3JlbmFtZUxvY2FsL1JlbmFtZUluUGxhY2VQYXJhbUluT3ZlcnJpZGVyQXV0b21hdGljUmVuYW1lcl9hZnRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJhM2Q5YWEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVuYW1lTG9jYWwvUmVuYW1lSW5QbGFjZVBhcmFtSW5PdmVycmlkZXJBdXRvbWF0aWNSZW5hbWVyX2FmdGVyLmphdmEKQEAgLTAsMCArMSwxMiBAQAorcHVibGljIGNsYXNzIFRlc3QgeworICBpbnQgbXlJOworICB2b2lkIGZvbyhpbnQgcHApeworICAgIG15SSA9IHBwOworICB9Cit9CisKK2NsYXNzIFRlc3RJbXBsIGV4dGVuZHMgVGVzdCB7CisgIHZvaWQgZm9vKGludCBwcCl7CisgICAgc3VwZXIuZm9vKHBwKTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9yZW5hbWVMb2NhbC9SZW5hbWVJblBsYWNlUXVhbGlmeUZpZWxkUmVmZXJlbmNlLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVuYW1lTG9jYWwvUmVuYW1lSW5QbGFjZVF1YWxpZnlGaWVsZFJlZmVyZW5jZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY2MjY4YjMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVuYW1lTG9jYWwvUmVuYW1lSW5QbGFjZVF1YWxpZnlGaWVsZFJlZmVyZW5jZS5qYXZhCkBAIC0wLDAgKzEsNiBAQAorY2xhc3MgVGVzdCB7CisgIGludCBteUk7CisgIHZvaWQgZm9vKGludCA8Y2FyZXQ+aSl7CisgICAgbXlJID0gaTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9yZW5hbWVMb2NhbC9SZW5hbWVJblBsYWNlUXVhbGlmeUZpZWxkUmVmZXJlbmNlSW5DaGlsZC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3JlbmFtZUxvY2FsL1JlbmFtZUluUGxhY2VRdWFsaWZ5RmllbGRSZWZlcmVuY2VJbkNoaWxkLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTAyNTE3ZgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9yZW5hbWVMb2NhbC9SZW5hbWVJblBsYWNlUXVhbGlmeUZpZWxkUmVmZXJlbmNlSW5DaGlsZC5qYXZhCkBAIC0wLDAgKzEsMTAgQEAKK2ludGVyZmFjZSBGIHsKKyAgdm9pZCBmb28oaW50IDxjYXJldD5pKTsKK30KKworY2xhc3MgQSBpbXBsZW1lbnRzIEYgeworICBpbnQgbXlJOworICBwdWJsaWMgdm9pZCBmb28oaW50IGkpeworICAgIG15SSA9IGk7CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9yZW5hbWVMb2NhbC9SZW5hbWVJblBsYWNlUXVhbGlmeUZpZWxkUmVmZXJlbmNlSW5DaGlsZF9hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3JlbmFtZUxvY2FsL1JlbmFtZUluUGxhY2VRdWFsaWZ5RmllbGRSZWZlcmVuY2VJbkNoaWxkX2FmdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjMzODg2ZQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9yZW5hbWVMb2NhbC9SZW5hbWVJblBsYWNlUXVhbGlmeUZpZWxkUmVmZXJlbmNlSW5DaGlsZF9hZnRlci5qYXZhCkBAIC0wLDAgKzEsMTAgQEAKK2ludGVyZmFjZSBGIHsKKyAgdm9pZCBmb28oaW50IG15SSk7Cit9CisKK2NsYXNzIEEgaW1wbGVtZW50cyBGIHsKKyAgaW50IG15STsKKyAgcHVibGljIHZvaWQgZm9vKGludCBteUkpeworICAgIHRoaXMubXlJID0gbXlJOworICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVuYW1lTG9jYWwvUmVuYW1lSW5QbGFjZVF1YWxpZnlGaWVsZFJlZmVyZW5jZV9hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3JlbmFtZUxvY2FsL1JlbmFtZUluUGxhY2VRdWFsaWZ5RmllbGRSZWZlcmVuY2VfYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZmNmNTdiCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3JlbmFtZUxvY2FsL1JlbmFtZUluUGxhY2VRdWFsaWZ5RmllbGRSZWZlcmVuY2VfYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDYgQEAKK2NsYXNzIFRlc3QgeworICBpbnQgbXlJOworICB2b2lkIGZvbyhpbnQgbXlJKXsKKyAgICB0aGlzLm15SSA9IG15STsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9yZW5hbWVMb2NhbC9SZW5hbWVJblBsYWNlVGhpc05lZWRlZC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3JlbmFtZUxvY2FsL1JlbmFtZUluUGxhY2VUaGlzTmVlZGVkLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmU0Yzg1NQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9yZW5hbWVMb2NhbC9SZW5hbWVJblBsYWNlVGhpc05lZWRlZC5qYXZhCkBAIC0wLDAgKzEsMjUgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwMC0yMDEyIEpldEJyYWlucyBzLnIuby4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCitjbGFzcyBUZXN0MSB7CisgICAgY2xhc3MgQSB7CisgICAgICAgIGludCBhOworICAgIH0KKyAgICBjbGFzcyBCIGV4dGVuZHMgQSB7CisgICAgICAgIEIoaW50IDxjYXJldD5iKSB7CisgICAgICAgICAgICBhID0gYjsKKyAgICAgICAgfQorICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9yZW5hbWVMb2NhbC9SZW5hbWVJblBsYWNlVGhpc05lZWRlZF9hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3JlbmFtZUxvY2FsL1JlbmFtZUluUGxhY2VUaGlzTmVlZGVkX2FmdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGNiMTBhOAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9yZW5hbWVMb2NhbC9SZW5hbWVJblBsYWNlVGhpc05lZWRlZF9hZnRlci5qYXZhCkBAIC0wLDAgKzEsMjUgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwMC0yMDEyIEpldEJyYWlucyBzLnIuby4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCitjbGFzcyBUZXN0MSB7CisgICAgY2xhc3MgQSB7CisgICAgICAgIGludCBhOworICAgIH0KKyAgICBjbGFzcyBCIGV4dGVuZHMgQSB7CisgICAgICAgIEIoaW50IGEpIHsKKyAgICAgICAgICAgIHRoaXMuYSA9IGE7CisgICAgICAgIH0KKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVuYW1lTG9jYWwvUmVuYW1lTG9jYWxJbmNvbXBsZXRlLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVuYW1lTG9jYWwvUmVuYW1lTG9jYWxJbmNvbXBsZXRlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODY0MTEyZAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9yZW5hbWVMb2NhbC9SZW5hbWVMb2NhbEluY29tcGxldGUuamF2YQpAQCAtMCwwICsxLDcgQEAKK3B1YmxpYyBjbGFzcyBSZW5hbWVMb2NhbEluY29tcGxldGUgeworICBwdWJsaWMgdm9pZCB0ZXN0KCkgeworICAgIEludGVnZXIgPGNhcmV0PmludGVnZXIgPSAwOworICAgIGludGVnZXIuCisgICAgRG91YmxlIHggPSAzOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3JlbmFtZUxvY2FsL1JlbmFtZUxvY2FsSW5jb21wbGV0ZV9hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3JlbmFtZUxvY2FsL1JlbmFtZUxvY2FsSW5jb21wbGV0ZV9hZnRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNjM2Q2MzcKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVuYW1lTG9jYWwvUmVuYW1lTG9jYWxJbmNvbXBsZXRlX2FmdGVyLmphdmEKQEAgLTAsMCArMSw3IEBACitwdWJsaWMgY2xhc3MgUmVuYW1lTG9jYWxJbmNvbXBsZXRlIHsKKyAgcHVibGljIHZvaWQgdGVzdCgpIHsKKyAgICBJbnRlZ2VyIF9pID0gMDsKKyAgICBfaS4KKyAgICBEb3VibGUgeCA9IDM7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVuYW1lTG9jYWwvUmVuYW1lUGFyYW1JbmNvbXBsZXRlLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVuYW1lTG9jYWwvUmVuYW1lUGFyYW1JbmNvbXBsZXRlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTU2YTlkNQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9yZW5hbWVMb2NhbC9SZW5hbWVQYXJhbUluY29tcGxldGUuamF2YQpAQCAtMCwwICsxLDYgQEAKK3B1YmxpYyBjbGFzcyBSZW5hbWVMb2NhbEluY29tcGxldGUgeworICBwdWJsaWMgdm9pZCB0ZXN0KEludGVnZXIgPGNhcmV0PmludGVnZXIpIHsKKyAgICBpbnRlZ2VyLgorICAgIERvdWJsZSB4ID0gMzsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9yZW5hbWVMb2NhbC9SZW5hbWVQYXJhbUluY29tcGxldGVfYWZ0ZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9yZW5hbWVMb2NhbC9SZW5hbWVQYXJhbUluY29tcGxldGVfYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYTE4YTdhCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3JlbmFtZUxvY2FsL1JlbmFtZVBhcmFtSW5jb21wbGV0ZV9hZnRlci5qYXZhCkBAIC0wLDAgKzEsNiBAQAorcHVibGljIGNsYXNzIFJlbmFtZUxvY2FsSW5jb21wbGV0ZSB7CisgIHB1YmxpYyB2b2lkIHRlc3QoSW50ZWdlciBfaSkgeworICAgIF9pLgorICAgIERvdWJsZSB4ID0gMzsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9yZW5hbWVMb2NhbC9SZW5hbWVQYXJhbVVuaXF1ZU5hbWUuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9yZW5hbWVMb2NhbC9SZW5hbWVQYXJhbVVuaXF1ZU5hbWUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wODBkYTM5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3JlbmFtZUxvY2FsL1JlbmFtZVBhcmFtVW5pcXVlTmFtZS5qYXZhCkBAIC0wLDAgKzEsMjQgQEAKK2ltcG9ydCBqYXZhLmF3dC4qOworCisvKioKKyAqIEBhdXRob3IgcGVnb3YKKyAqLworcHVibGljIGNsYXNzIE1hY01lc3NhZ2VzIHsKKworCisgIHB1YmxpYyBzdGF0aWMgdm9pZCBzaG93T2tNZXNzYWdlRGlhbG9nKFN0cmluZyB0aXRsZSwgU3RyaW5nIG1lc3NhZ2UsIFN0cmluZyBva1RleHQsIFdpbmRvdyBjbzxjYXJldD5tcG9uZW50KSB7CisgICAgc2hvd01lc3NhZ2VEaWFsb2codGl0bGUsIG9rVGV4dCwgbnVsbCwgbnVsbCwgbWVzc2FnZSwgY29tcG9uZW50KTsKKyAgfQorCisKKworICBwdWJsaWMgc3RhdGljIGludCBzaG93TWVzc2FnZURpYWxvZyhTdHJpbmcgdGl0bGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgb2tUZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIGFsdGVybmF0ZVRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgY2FuY2VsVGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBtZXNzYWdlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2luZG93IHdpbmRvdykgeworICAgIHJldHVybiAxOworICB9CisKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVuYW1lTG9jYWwvUmVuYW1lUmVzb3VyY2UuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9yZW5hbWVMb2NhbC9SZW5hbWVSZXNvdXJjZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM3NDc2ZGUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVuYW1lTG9jYWwvUmVuYW1lUmVzb3VyY2UuamF2YQpAQCAtMCwwICsxLDcgQEAKK3B1YmxpYyBjbGFzcyBUZXN0IHsKKyAgdm9pZCBtKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgdHJ5IChBdXRvQ2xvc2VhYmxlIDxjYXJldD5yID0gbnVsbDsgQXV0b0Nsb3NlYWJsZSByMiA9IHIpIHsKKyAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihyICsgIiwgIiArIHIyKTsKKyAgICB9CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVuYW1lTG9jYWwvUmVuYW1lUmVzb3VyY2VJblBsYWNlLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVuYW1lTG9jYWwvUmVuYW1lUmVzb3VyY2VJblBsYWNlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzc0NzZkZQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9yZW5hbWVMb2NhbC9SZW5hbWVSZXNvdXJjZUluUGxhY2UuamF2YQpAQCAtMCwwICsxLDcgQEAKK3B1YmxpYyBjbGFzcyBUZXN0IHsKKyAgdm9pZCBtKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgdHJ5IChBdXRvQ2xvc2VhYmxlIDxjYXJldD5yID0gbnVsbDsgQXV0b0Nsb3NlYWJsZSByMiA9IHIpIHsKKyAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihyICsgIiwgIiArIHIyKTsKKyAgICB9CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVuYW1lTG9jYWwvUmVuYW1lUmVzb3VyY2VJblBsYWNlX2FmdGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVuYW1lTG9jYWwvUmVuYW1lUmVzb3VyY2VJblBsYWNlX2FmdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDQ0ZmVlYgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9yZW5hbWVMb2NhbC9SZW5hbWVSZXNvdXJjZUluUGxhY2VfYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDcgQEAKK3B1YmxpYyBjbGFzcyBUZXN0IHsKKyAgdm9pZCBtKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgdHJ5IChBdXRvQ2xvc2VhYmxlIHIxID0gbnVsbDsgQXV0b0Nsb3NlYWJsZSByMiA9IHIxKSB7CisgICAgICBTeXN0ZW0ub3V0LnByaW50bG4ocjEgKyAiLCAiICsgcjIpOworICAgIH0KKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9yZW5hbWVMb2NhbC9SZW5hbWVSZXNvdXJjZV9hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3JlbmFtZUxvY2FsL1JlbmFtZVJlc291cmNlX2FmdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDQ0ZmVlYgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9yZW5hbWVMb2NhbC9SZW5hbWVSZXNvdXJjZV9hZnRlci5qYXZhCkBAIC0wLDAgKzEsNyBAQAorcHVibGljIGNsYXNzIFRlc3QgeworICB2b2lkIG0oKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICB0cnkgKEF1dG9DbG9zZWFibGUgcjEgPSBudWxsOyBBdXRvQ2xvc2VhYmxlIHIyID0gcjEpIHsKKyAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihyMSArICIsICIgKyByMik7CisgICAgfQorICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3JlbmFtZUxvY2FsL1JlbmFtZVdyb25nUmVmLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVuYW1lTG9jYWwvUmVuYW1lV3JvbmdSZWYuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MGJlNzBiCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3JlbmFtZUxvY2FsL1JlbmFtZVdyb25nUmVmLmphdmEKQEAgLTAsMCArMSw3IEBACitjbGFzcyBUZXN0IHsKKyAgdm9pZCBmb28oKSB7CisgICAgaW50IGkgPSAwOworICAgIFN5c3RlbS5vdXQucHJpbnRsbig8Y2FyZXQ+ayk7CisgICAgU3lzdGVtLm91dC5wcmludGxuKGspOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3JlbmFtZUxvY2FsL1JlbmFtZVdyb25nUmVmX2FmdGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVuYW1lTG9jYWwvUmVuYW1lV3JvbmdSZWZfYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZmRlYThlCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3JlbmFtZUxvY2FsL1JlbmFtZVdyb25nUmVmX2FmdGVyLmphdmEKQEAgLTAsMCArMSw3IEBACitjbGFzcyBUZXN0IHsKKyAgdm9pZCBmb28oKSB7CisgICAgaW50IGkgPSAwOworICAgIFN5c3RlbS5vdXQucHJpbnRsbihpKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oaSk7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVuYW1lTWV0aG9kL211bHRpL2FsaWduZWRNdWx0aWxpbmVQYXJhbWV0ZXJzL2FmdGVyL0FsaWduZWRNdWx0aWxpbmVQYXJhbWV0ZXJzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVuYW1lTWV0aG9kL211bHRpL2FsaWduZWRNdWx0aWxpbmVQYXJhbWV0ZXJzL2FmdGVyL0FsaWduZWRNdWx0aWxpbmVQYXJhbWV0ZXJzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjFiNjFlMQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9yZW5hbWVNZXRob2QvbXVsdGkvYWxpZ25lZE11bHRpbGluZVBhcmFtZXRlcnMvYWZ0ZXIvQWxpZ25lZE11bHRpbGluZVBhcmFtZXRlcnMuamF2YQpAQCAtMCwwICsxLDExIEBACitwdWJsaWMgY2xhc3MgQWxpZ25lZE11bHRpbGluZVBhcmFtZXRlcnMgeworCisgIHB1YmxpYyB2b2lkIHRlc3QxMjNhc2QoaW50IGksCisgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGopIHsKKyAgfQorCisgIHB1YmxpYyB2b2lkIGZvbygpIHsKKyAgICB0ZXN0MTIzYXNkKDEsCisgICAgICAgICAgICAgICAyKTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9yZW5hbWVNZXRob2QvbXVsdGkvYWxpZ25lZE11bHRpbGluZVBhcmFtZXRlcnMvYmVmb3JlL0FsaWduZWRNdWx0aWxpbmVQYXJhbWV0ZXJzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVuYW1lTWV0aG9kL211bHRpL2FsaWduZWRNdWx0aWxpbmVQYXJhbWV0ZXJzL2JlZm9yZS9BbGlnbmVkTXVsdGlsaW5lUGFyYW1ldGVycy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRiOGJkYTgKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVuYW1lTWV0aG9kL211bHRpL2FsaWduZWRNdWx0aWxpbmVQYXJhbWV0ZXJzL2JlZm9yZS9BbGlnbmVkTXVsdGlsaW5lUGFyYW1ldGVycy5qYXZhCkBAIC0wLDAgKzEsMTEgQEAKK3B1YmxpYyBjbGFzcyBBbGlnbmVkTXVsdGlsaW5lUGFyYW1ldGVycyB7CisKKyAgcHVibGljIHZvaWQgdGVzdDEyMyhpbnQgaSwKKyAgICAgICAgICAgICAgICAgICAgICBpbnQgaikgeworICB9CisKKyAgcHVibGljIHZvaWQgZm9vKCkgeworICAgIHRlc3QxMjMoMSwKKyAgICAgICAgICAgIDIpOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3JlbmFtZU1ldGhvZC9tdWx0aS9kZWZhdWx0QW5ub3RhdGlvbk1ldGhvZC9hZnRlci9wYWNrMS9BLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVuYW1lTWV0aG9kL211bHRpL2RlZmF1bHRBbm5vdGF0aW9uTWV0aG9kL2FmdGVyL3BhY2sxL0EuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hODc3YzRmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3JlbmFtZU1ldGhvZC9tdWx0aS9kZWZhdWx0QW5ub3RhdGlvbk1ldGhvZC9hZnRlci9wYWNrMS9BLmphdmEKQEAgLTAsMCArMSw1IEBACitwYWNrYWdlIHBhY2sxOworCitwdWJsaWMgQGludGVyZmFjZSBBIHsKKyAgICBpbnQgaW50VmFsdWUoKTsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVuYW1lTWV0aG9kL211bHRpL2RlZmF1bHRBbm5vdGF0aW9uTWV0aG9kL2FmdGVyL3BhY2sxL1VzYWdlLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVuYW1lTWV0aG9kL211bHRpL2RlZmF1bHRBbm5vdGF0aW9uTWV0aG9kL2FmdGVyL3BhY2sxL1VzYWdlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmEyNGYwYQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9yZW5hbWVNZXRob2QvbXVsdGkvZGVmYXVsdEFubm90YXRpb25NZXRob2QvYWZ0ZXIvcGFjazEvVXNhZ2UuamF2YQpAQCAtMCwwICsxLDExIEBACitwYWNrYWdlIHBhY2sxOworCitjbGFzcyBVc2FnZSB7CisgICAgQEEoaW50VmFsdWUgPSAxMSkKKyAgICB2b2lkIGZvbygpIHsKKyAgICB9CisKKyAgICBAQShpbnRWYWx1ZSA9IDQyKQorICAgIHZvaWQgYmFyKCkgeworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVuYW1lTWV0aG9kL211bHRpL2RlZmF1bHRBbm5vdGF0aW9uTWV0aG9kL2JlZm9yZS9wYWNrMS9BLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVuYW1lTWV0aG9kL211bHRpL2RlZmF1bHRBbm5vdGF0aW9uTWV0aG9kL2JlZm9yZS9wYWNrMS9BLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTc3NzYxNAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9yZW5hbWVNZXRob2QvbXVsdGkvZGVmYXVsdEFubm90YXRpb25NZXRob2QvYmVmb3JlL3BhY2sxL0EuamF2YQpAQCAtMCwwICsxLDUgQEAKK3BhY2thZ2UgcGFjazE7CisKK3B1YmxpYyBAaW50ZXJmYWNlIEEgeworICAgIGludCB2YWx1ZSgpOworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9yZW5hbWVNZXRob2QvbXVsdGkvZGVmYXVsdEFubm90YXRpb25NZXRob2QvYmVmb3JlL3BhY2sxL1VzYWdlLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVuYW1lTWV0aG9kL211bHRpL2RlZmF1bHRBbm5vdGF0aW9uTWV0aG9kL2JlZm9yZS9wYWNrMS9Vc2FnZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUxODhlZWIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVuYW1lTWV0aG9kL211bHRpL2RlZmF1bHRBbm5vdGF0aW9uTWV0aG9kL2JlZm9yZS9wYWNrMS9Vc2FnZS5qYXZhCkBAIC0wLDAgKzEsMTEgQEAKK3BhY2thZ2UgcGFjazE7CisKK2NsYXNzIFVzYWdlIHsKKyAgICBAQSgxMSkKKyAgICB2b2lkIGZvbygpIHsKKyAgICB9CisKKyAgICBAQSh2YWx1ZSA9IDQyKQorICAgIHZvaWQgYmFyKCkgeworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVuYW1lTWV0aG9kL211bHRpL3JlbmFtZTJIaWRlRnJvbUFub255bW91cy9hZnRlci9wL0Zvby5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3JlbmFtZU1ldGhvZC9tdWx0aS9yZW5hbWUySGlkZUZyb21Bbm9ueW1vdXMvYWZ0ZXIvcC9Gb28uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMjUwZjgwCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3JlbmFtZU1ldGhvZC9tdWx0aS9yZW5hbWUySGlkZUZyb21Bbm9ueW1vdXMvYWZ0ZXIvcC9Gb28uamF2YQpAQCAtMCwwICsxLDMzIEBACisvKgorICogQ29weXJpZ2h0IDIwMDAtMjAxMSBKZXRCcmFpbnMgcy5yLm8uCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworcGFja2FnZSBwOworCitjbGFzcyBGb28geworICBwdWJsaWMgQmFyIGNyZWF0ZUJhcigpIHsKKyAgICByZXR1cm4gbmV3IEJhcigpIHsKKyAgICAgIHB1YmxpYyB2b2lkIGJhenooaW50IGkpIHsKKyAgICAgICAgRm9vLnRoaXMuYmF6eihpKTsKKyAgICAgIH0KKyAgICB9OworICB9CisKKyAgcHJpdmF0ZSB2b2lkIGJhenooaW50IGkpIHsKKyAgfQorCisgIHB1YmxpYyBpbnRlcmZhY2UgQmFyIHsKKyAgICB2b2lkIGJhenooaW50IGkpOworICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVuYW1lTWV0aG9kL211bHRpL3JlbmFtZTJIaWRlRnJvbUFub255bW91cy9iZWZvcmUvcC9Gb28uamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9yZW5hbWVNZXRob2QvbXVsdGkvcmVuYW1lMkhpZGVGcm9tQW5vbnltb3VzL2JlZm9yZS9wL0Zvby5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRlOWFjYzgKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVuYW1lTWV0aG9kL211bHRpL3JlbmFtZTJIaWRlRnJvbUFub255bW91cy9iZWZvcmUvcC9Gb28uamF2YQpAQCAtMCwwICsxLDMzIEBACisvKgorICogQ29weXJpZ2h0IDIwMDAtMjAxMSBKZXRCcmFpbnMgcy5yLm8uCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworcGFja2FnZSBwOworCitjbGFzcyBGb28geworICBwdWJsaWMgQmFyIGNyZWF0ZUJhcigpIHsKKyAgICByZXR1cm4gbmV3IEJhcigpIHsKKyAgICAgIHB1YmxpYyB2b2lkIGJhenooaW50IGkpIHsKKyAgICAgICAgYnV6eihpKTsKKyAgICAgIH0KKyAgICB9OworICB9CisKKyAgcHJpdmF0ZSB2b2lkIGJ1enooaW50IGkpIHsKKyAgfQorCisgIHB1YmxpYyBpbnRlcmZhY2UgQmFyIHsKKyAgICB2b2lkIGJhenooaW50IGkpOworICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVuYW1lTWV0aG9kL211bHRpL3JlbmFtZTJPdmVycmlkZUZpbmFsL2FmdGVyL3AvQS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3JlbmFtZU1ldGhvZC9tdWx0aS9yZW5hbWUyT3ZlcnJpZGVGaW5hbC9hZnRlci9wL0EuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNjc2ZGU0Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3JlbmFtZU1ldGhvZC9tdWx0aS9yZW5hbWUyT3ZlcnJpZGVGaW5hbC9hZnRlci9wL0EuamF2YQpAQCAtMCwwICsxLDE2IEBACitwYWNrYWdlIHA7CitwdWJsaWMgY2xhc3MgQSB7CisKKyAgICAgICAgcHVibGljIGZpbmFsIHZvaWQgZmluYWxNZXRob2QoKSB7CisgICAgICAgIH0KK30KKworY2xhc3MgQiBleHRlbmRzIEEgaW1wbGVtZW50cyBJIHsKKworICAgICAgICBwdWJsaWMgdm9pZCBtZXRob2QoKSB7CisgICAgICAgIH0KK30KKworaW50ZXJmYWNlIEkgeworICAgICAgICB2b2lkIG1ldGhvZCgpOworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9yZW5hbWVNZXRob2QvbXVsdGkvcmVuYW1lMk92ZXJyaWRlRmluYWwvYmVmb3JlL3AvQS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3JlbmFtZU1ldGhvZC9tdWx0aS9yZW5hbWUyT3ZlcnJpZGVGaW5hbC9iZWZvcmUvcC9BLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzY3NmRlNAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9yZW5hbWVNZXRob2QvbXVsdGkvcmVuYW1lMk92ZXJyaWRlRmluYWwvYmVmb3JlL3AvQS5qYXZhCkBAIC0wLDAgKzEsMTYgQEAKK3BhY2thZ2UgcDsKK3B1YmxpYyBjbGFzcyBBIHsKKworICAgICAgICBwdWJsaWMgZmluYWwgdm9pZCBmaW5hbE1ldGhvZCgpIHsKKyAgICAgICAgfQorfQorCitjbGFzcyBCIGV4dGVuZHMgQSBpbXBsZW1lbnRzIEkgeworCisgICAgICAgIHB1YmxpYyB2b2lkIG1ldGhvZCgpIHsKKyAgICAgICAgfQorfQorCitpbnRlcmZhY2UgSSB7CisgICAgICAgIHZvaWQgbWV0aG9kKCk7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3JlbmFtZU1ldGhvZC9tdWx0aS9zdGF0aWNJbXBvcnQxL2FmdGVyL3BhY2sxL0EuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9yZW5hbWVNZXRob2QvbXVsdGkvc3RhdGljSW1wb3J0MS9hZnRlci9wYWNrMS9BLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjU5YTJkMgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9yZW5hbWVNZXRob2QvbXVsdGkvc3RhdGljSW1wb3J0MS9hZnRlci9wYWNrMS9BLmphdmEKQEAgLTAsMCArMSw2IEBACitwYWNrYWdlIHBhY2sxOworCitwdWJsaWMgY2xhc3MgQSB7CisgICAgcHVibGljIHN0YXRpYyB2b2lkIHJlbmFtZWRTdGF0aWNNZXRob2QoaW50IGkpIHsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3JlbmFtZU1ldGhvZC9tdWx0aS9zdGF0aWNJbXBvcnQxL2FmdGVyL3BhY2syL1VzYWdlLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVuYW1lTWV0aG9kL211bHRpL3N0YXRpY0ltcG9ydDEvYWZ0ZXIvcGFjazIvVXNhZ2UuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYWM5ZmJlCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3JlbmFtZU1ldGhvZC9tdWx0aS9zdGF0aWNJbXBvcnQxL2FmdGVyL3BhY2syL1VzYWdlLmphdmEKQEAgLTAsMCArMSw5IEBACitwYWNrYWdlIHBhY2syOworCitpbXBvcnQgc3RhdGljIHBhY2sxLkEucmVuYW1lZFN0YXRpY01ldGhvZDsKKworY2xhc3MgVXNhZ2UgeworICAgIHsKKyAgICAgICAgcmVuYW1lZFN0YXRpY01ldGhvZCgyNyk7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9yZW5hbWVNZXRob2QvbXVsdGkvc3RhdGljSW1wb3J0MS9iZWZvcmUvcGFjazEvQS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3JlbmFtZU1ldGhvZC9tdWx0aS9zdGF0aWNJbXBvcnQxL2JlZm9yZS9wYWNrMS9BLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjkzZjRkMwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9yZW5hbWVNZXRob2QvbXVsdGkvc3RhdGljSW1wb3J0MS9iZWZvcmUvcGFjazEvQS5qYXZhCkBAIC0wLDAgKzEsNiBAQAorcGFja2FnZSBwYWNrMTsKKworcHVibGljIGNsYXNzIEEgeworICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBzdGF0aWNNZXRob2QoaW50IGkpIHsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3JlbmFtZU1ldGhvZC9tdWx0aS9zdGF0aWNJbXBvcnQxL2JlZm9yZS9wYWNrMi9Vc2FnZS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3JlbmFtZU1ldGhvZC9tdWx0aS9zdGF0aWNJbXBvcnQxL2JlZm9yZS9wYWNrMi9Vc2FnZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIzMzg3NzkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVuYW1lTWV0aG9kL211bHRpL3N0YXRpY0ltcG9ydDEvYmVmb3JlL3BhY2syL1VzYWdlLmphdmEKQEAgLTAsMCArMSw5IEBACitwYWNrYWdlIHBhY2syOworCitpbXBvcnQgc3RhdGljIHBhY2sxLkEuc3RhdGljTWV0aG9kOworCitjbGFzcyBVc2FnZSB7CisgICAgeworICAgICAgICBzdGF0aWNNZXRob2QoMjcpOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVuYW1lTWV0aG9kL211bHRpL3N0YXRpY0ltcG9ydDIvYWZ0ZXIvcGFjazEvQS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3JlbmFtZU1ldGhvZC9tdWx0aS9zdGF0aWNJbXBvcnQyL2FmdGVyL3BhY2sxL0EuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NTlhMmQyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3JlbmFtZU1ldGhvZC9tdWx0aS9zdGF0aWNJbXBvcnQyL2FmdGVyL3BhY2sxL0EuamF2YQpAQCAtMCwwICsxLDYgQEAKK3BhY2thZ2UgcGFjazE7CisKK3B1YmxpYyBjbGFzcyBBIHsKKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgcmVuYW1lZFN0YXRpY01ldGhvZChpbnQgaSkgeworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVuYW1lTWV0aG9kL211bHRpL3N0YXRpY0ltcG9ydDIvYWZ0ZXIvcGFjazIvVXNhZ2UuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9yZW5hbWVNZXRob2QvbXVsdGkvc3RhdGljSW1wb3J0Mi9hZnRlci9wYWNrMi9Vc2FnZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA4NzA3ZWUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVuYW1lTWV0aG9kL211bHRpL3N0YXRpY0ltcG9ydDIvYWZ0ZXIvcGFjazIvVXNhZ2UuamF2YQpAQCAtMCwwICsxLDkgQEAKK3BhY2thZ2UgcGFjazI7CisKK2ltcG9ydCBzdGF0aWMgcGFjazEuQS4qOworCitjbGFzcyBVc2FnZSB7CisgICAgeworICAgICAgICByZW5hbWVkU3RhdGljTWV0aG9kKDI3KTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3JlbmFtZU1ldGhvZC9tdWx0aS9zdGF0aWNJbXBvcnQyL2JlZm9yZS9wYWNrMS9BLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVuYW1lTWV0aG9kL211bHRpL3N0YXRpY0ltcG9ydDIvYmVmb3JlL3BhY2sxL0EuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOTNmNGQzCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3JlbmFtZU1ldGhvZC9tdWx0aS9zdGF0aWNJbXBvcnQyL2JlZm9yZS9wYWNrMS9BLmphdmEKQEAgLTAsMCArMSw2IEBACitwYWNrYWdlIHBhY2sxOworCitwdWJsaWMgY2xhc3MgQSB7CisgICAgcHVibGljIHN0YXRpYyB2b2lkIHN0YXRpY01ldGhvZChpbnQgaSkgeworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVuYW1lTWV0aG9kL211bHRpL3N0YXRpY0ltcG9ydDIvYmVmb3JlL3BhY2syL1VzYWdlLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVuYW1lTWV0aG9kL211bHRpL3N0YXRpY0ltcG9ydDIvYmVmb3JlL3BhY2syL1VzYWdlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjUwYjkzMwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9yZW5hbWVNZXRob2QvbXVsdGkvc3RhdGljSW1wb3J0Mi9iZWZvcmUvcGFjazIvVXNhZ2UuamF2YQpAQCAtMCwwICsxLDkgQEAKK3BhY2thZ2UgcGFjazI7CisKK2ltcG9ydCBzdGF0aWMgcGFjazEuQS4qOworCitjbGFzcyBVc2FnZSB7CisgICAgeworICAgICAgICBzdGF0aWNNZXRob2QoMjcpOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVuYW1lTWV0aG9kL211bHRpL3N0YXRpY0ltcG9ydDMvYWZ0ZXIvcGFjazEvQS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3JlbmFtZU1ldGhvZC9tdWx0aS9zdGF0aWNJbXBvcnQzL2FmdGVyL3BhY2sxL0EuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lY2U1NTE3Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3JlbmFtZU1ldGhvZC9tdWx0aS9zdGF0aWNJbXBvcnQzL2FmdGVyL3BhY2sxL0EuamF2YQpAQCAtMCwwICsxLDkgQEAKK3BhY2thZ2UgcGFjazE7CisKK3B1YmxpYyBjbGFzcyBBIHsKKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgcmVuYW1lZFN0YXRpY01ldGhvZChpbnQgaSkgeworICAgIH0KKworICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBzdGF0aWNNZXRob2QoU3RyaW5nIHMpIHsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3JlbmFtZU1ldGhvZC9tdWx0aS9zdGF0aWNJbXBvcnQzL2FmdGVyL3BhY2syL1VzYWdlLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVuYW1lTWV0aG9kL211bHRpL3N0YXRpY0ltcG9ydDMvYWZ0ZXIvcGFjazIvVXNhZ2UuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOTY1ZTIyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3JlbmFtZU1ldGhvZC9tdWx0aS9zdGF0aWNJbXBvcnQzL2FmdGVyL3BhY2syL1VzYWdlLmphdmEKQEAgLTAsMCArMSw5IEBACitwYWNrYWdlIHBhY2syOworCitpbXBvcnQgcGFjazEuQTsKKworY2xhc3MgVXNhZ2UgeworICAgIHsKKyAgICAgICAgQS5yZW5hbWVkU3RhdGljTWV0aG9kKDI3KTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3JlbmFtZU1ldGhvZC9tdWx0aS9zdGF0aWNJbXBvcnQzL2JlZm9yZS9wYWNrMS9BLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVuYW1lTWV0aG9kL211bHRpL3N0YXRpY0ltcG9ydDMvYmVmb3JlL3BhY2sxL0EuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZmZmODMxCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3JlbmFtZU1ldGhvZC9tdWx0aS9zdGF0aWNJbXBvcnQzL2JlZm9yZS9wYWNrMS9BLmphdmEKQEAgLTAsMCArMSw5IEBACitwYWNrYWdlIHBhY2sxOworCitwdWJsaWMgY2xhc3MgQSB7CisgICAgcHVibGljIHN0YXRpYyB2b2lkIHN0YXRpY01ldGhvZChpbnQgaSkgeworICAgIH0KKworICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBzdGF0aWNNZXRob2QoU3RyaW5nIHMpIHsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3JlbmFtZU1ldGhvZC9tdWx0aS9zdGF0aWNJbXBvcnQzL2JlZm9yZS9wYWNrMi9Vc2FnZS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3JlbmFtZU1ldGhvZC9tdWx0aS9zdGF0aWNJbXBvcnQzL2JlZm9yZS9wYWNrMi9Vc2FnZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIzMzg3NzkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVuYW1lTWV0aG9kL211bHRpL3N0YXRpY0ltcG9ydDMvYmVmb3JlL3BhY2syL1VzYWdlLmphdmEKQEAgLTAsMCArMSw5IEBACitwYWNrYWdlIHBhY2syOworCitpbXBvcnQgc3RhdGljIHBhY2sxLkEuc3RhdGljTWV0aG9kOworCitjbGFzcyBVc2FnZSB7CisgICAgeworICAgICAgICBzdGF0aWNNZXRob2QoMjcpOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVuYW1lTWV0aG9kL211bHRpL3N0YXRpY0ltcG9ydDQvYWZ0ZXIvcGFjazEvQS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3JlbmFtZU1ldGhvZC9tdWx0aS9zdGF0aWNJbXBvcnQ0L2FmdGVyL3BhY2sxL0EuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZGY1MWNkNQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9yZW5hbWVNZXRob2QvbXVsdGkvc3RhdGljSW1wb3J0NC9hZnRlci9wYWNrMS9BLmphdmEKQEAgLTAsMCArMSw5IEBACitwYWNrYWdlIHBhY2sxOworCitwdWJsaWMgY2xhc3MgQSB7CisgICAgcHVibGljIHN0YXRpYyB2b2lkIHJlbmFtZWRTdGF0aWNNZXRob2QoaW50IGkpIHsKKyAgICB9CisKKyAgICBwcml2YXRlIHN0YXRpYyB2b2lkIHN0YXRpY01ldGhvZChTdHJpbmcgcykgeworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVuYW1lTWV0aG9kL211bHRpL3N0YXRpY0ltcG9ydDQvYWZ0ZXIvcGFjazIvVXNhZ2UuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9yZW5hbWVNZXRob2QvbXVsdGkvc3RhdGljSW1wb3J0NC9hZnRlci9wYWNrMi9Vc2FnZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFhYzlmYmUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVuYW1lTWV0aG9kL211bHRpL3N0YXRpY0ltcG9ydDQvYWZ0ZXIvcGFjazIvVXNhZ2UuamF2YQpAQCAtMCwwICsxLDkgQEAKK3BhY2thZ2UgcGFjazI7CisKK2ltcG9ydCBzdGF0aWMgcGFjazEuQS5yZW5hbWVkU3RhdGljTWV0aG9kOworCitjbGFzcyBVc2FnZSB7CisgICAgeworICAgICAgICByZW5hbWVkU3RhdGljTWV0aG9kKDI3KTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3JlbmFtZU1ldGhvZC9tdWx0aS9zdGF0aWNJbXBvcnQ0L2JlZm9yZS9wYWNrMS9BLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVuYW1lTWV0aG9kL211bHRpL3N0YXRpY0ltcG9ydDQvYmVmb3JlL3BhY2sxL0EuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOWIzNGViCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3JlbmFtZU1ldGhvZC9tdWx0aS9zdGF0aWNJbXBvcnQ0L2JlZm9yZS9wYWNrMS9BLmphdmEKQEAgLTAsMCArMSw5IEBACitwYWNrYWdlIHBhY2sxOworCitwdWJsaWMgY2xhc3MgQSB7CisgICAgcHVibGljIHN0YXRpYyB2b2lkIHN0YXRpY01ldGhvZChpbnQgaSkgeworICAgIH0KKworICAgIHByaXZhdGUgc3RhdGljIHZvaWQgc3RhdGljTWV0aG9kKFN0cmluZyBzKSB7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9yZW5hbWVNZXRob2QvbXVsdGkvc3RhdGljSW1wb3J0NC9iZWZvcmUvcGFjazIvVXNhZ2UuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9yZW5hbWVNZXRob2QvbXVsdGkvc3RhdGljSW1wb3J0NC9iZWZvcmUvcGFjazIvVXNhZ2UuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMzM4Nzc5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3JlbmFtZU1ldGhvZC9tdWx0aS9zdGF0aWNJbXBvcnQ0L2JlZm9yZS9wYWNrMi9Vc2FnZS5qYXZhCkBAIC0wLDAgKzEsOSBAQAorcGFja2FnZSBwYWNrMjsKKworaW1wb3J0IHN0YXRpYyBwYWNrMS5BLnN0YXRpY01ldGhvZDsKKworY2xhc3MgVXNhZ2UgeworICAgIHsKKyAgICAgICAgc3RhdGljTWV0aG9kKDI3KTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3JlcGxhY2VDb25zdHJ1Y3RvcldpdGhCdWlsZGVyL2NvbnN0cnVjdG9yQ2hhaW4vYWZ0ZXIvQnVpbGRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3JlcGxhY2VDb25zdHJ1Y3RvcldpdGhCdWlsZGVyL2NvbnN0cnVjdG9yQ2hhaW4vYWZ0ZXIvQnVpbGRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjczOTVmOTYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVwbGFjZUNvbnN0cnVjdG9yV2l0aEJ1aWxkZXIvY29uc3RydWN0b3JDaGFpbi9hZnRlci9CdWlsZGVyLmphdmEKQEAgLTAsMCArMSwxMiBAQAorcHVibGljIGNsYXNzIEJ1aWxkZXIgeworICAgIHByaXZhdGUgaW50IGkgPSAyOworCisgICAgcHVibGljIEJ1aWxkZXIgc2V0SShpbnQgaSkgeworICAgICAgICB0aGlzLmkgPSBpOworICAgICAgICByZXR1cm4gdGhpczsKKyAgICB9CisKKyAgICBwdWJsaWMgVGVzdCBjcmVhdGVUZXN0KCkgeworICAgICAgICByZXR1cm4gbmV3IFRlc3QoaSk7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9yZXBsYWNlQ29uc3RydWN0b3JXaXRoQnVpbGRlci9jb25zdHJ1Y3RvckNoYWluL2FmdGVyL1Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9yZXBsYWNlQ29uc3RydWN0b3JXaXRoQnVpbGRlci9jb25zdHJ1Y3RvckNoYWluL2FmdGVyL1Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYzZiZmRmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3JlcGxhY2VDb25zdHJ1Y3RvcldpdGhCdWlsZGVyL2NvbnN0cnVjdG9yQ2hhaW4vYWZ0ZXIvVGVzdC5qYXZhCkBAIC0wLDAgKzEsMTAgQEAKK3B1YmxpYyBjbGFzcyBUZXN0IHsKKyAgcHVibGljIFRlc3QoaW50IGkpe30KKyAgcHVibGljIFRlc3QoKXsKKyAgICB0aGlzKDIpOworICB9CisgIHZvaWQgZm9vKCl7fQorICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKXsKKyAgICBuZXcgQnVpbGRlcigpLnNldEkoMSkuY3JlYXRlVGVzdCgpLmZvbygpOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3JlcGxhY2VDb25zdHJ1Y3RvcldpdGhCdWlsZGVyL2NvbnN0cnVjdG9yQ2hhaW4vYmVmb3JlL1Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9yZXBsYWNlQ29uc3RydWN0b3JXaXRoQnVpbGRlci9jb25zdHJ1Y3RvckNoYWluL2JlZm9yZS9UZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWI4ZWExOAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9yZXBsYWNlQ29uc3RydWN0b3JXaXRoQnVpbGRlci9jb25zdHJ1Y3RvckNoYWluL2JlZm9yZS9UZXN0LmphdmEKQEAgLTAsMCArMSwxMCBAQAorcHVibGljIGNsYXNzIFRlc3QgeworICBwdWJsaWMgVGVzdChpbnQgaSl7fQorICBwdWJsaWMgVGVzdCgpeworICAgIHRoaXMoMik7CisgIH0KKyAgdm9pZCBmb28oKXt9CisgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpeworICAgIG5ldyBUZXN0KDEpLmZvbygpOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3JlcGxhY2VDb25zdHJ1Y3RvcldpdGhCdWlsZGVyL2NvbnN0cnVjdG9yQ2hhaW5XaXRob3V0RGVmYXVsdHMvYWZ0ZXIvQnVpbGRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3JlcGxhY2VDb25zdHJ1Y3RvcldpdGhCdWlsZGVyL2NvbnN0cnVjdG9yQ2hhaW5XaXRob3V0RGVmYXVsdHMvYWZ0ZXIvQnVpbGRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM0N2RmYzkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVwbGFjZUNvbnN0cnVjdG9yV2l0aEJ1aWxkZXIvY29uc3RydWN0b3JDaGFpbldpdGhvdXREZWZhdWx0cy9hZnRlci9CdWlsZGVyLmphdmEKQEAgLTAsMCArMSwxOCBAQAorcHVibGljIGNsYXNzIEJ1aWxkZXIgeworICAgIHByaXZhdGUgaW50IGkgPSAyOworICAgIHByaXZhdGUgaW50IGo7CisKKyAgICBwdWJsaWMgQnVpbGRlciBzZXRJKGludCBpKSB7CisgICAgICAgIHRoaXMuaSA9IGk7CisgICAgICAgIHJldHVybiB0aGlzOworICAgIH0KKworICAgIHB1YmxpYyBCdWlsZGVyIHNldEooaW50IGopIHsKKyAgICAgICAgdGhpcy5qID0gajsKKyAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgfQorCisgICAgcHVibGljIFRlc3QgY3JlYXRlVGVzdCgpIHsKKyAgICAgICAgcmV0dXJuIG5ldyBUZXN0KGksIGopOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVwbGFjZUNvbnN0cnVjdG9yV2l0aEJ1aWxkZXIvY29uc3RydWN0b3JDaGFpbldpdGhvdXREZWZhdWx0cy9hZnRlci9UZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVwbGFjZUNvbnN0cnVjdG9yV2l0aEJ1aWxkZXIvY29uc3RydWN0b3JDaGFpbldpdGhvdXREZWZhdWx0cy9hZnRlci9UZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDdjMTY3OQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9yZXBsYWNlQ29uc3RydWN0b3JXaXRoQnVpbGRlci9jb25zdHJ1Y3RvckNoYWluV2l0aG91dERlZmF1bHRzL2FmdGVyL1Rlc3QuamF2YQpAQCAtMCwwICsxLDExIEBACitwdWJsaWMgY2xhc3MgVGVzdCB7CisgIHB1YmxpYyBUZXN0KGludCBpLCBpbnQgail7fQorICBwdWJsaWMgVGVzdChpbnQgail7CisgICAgdGhpcygyLCBqKTsKKyAgfQorICB2b2lkIGZvbygpe30KKyAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncyl7CisgICAgbmV3IEJ1aWxkZXIoKS5zZXRKKDEpLmNyZWF0ZVRlc3QoKS5mb28oKTsKKyAgICBuZXcgQnVpbGRlcigpLnNldEkoMikuc2V0SigzKS5jcmVhdGVUZXN0KCkuZm9vKCk7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVwbGFjZUNvbnN0cnVjdG9yV2l0aEJ1aWxkZXIvY29uc3RydWN0b3JDaGFpbldpdGhvdXREZWZhdWx0cy9iZWZvcmUvVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3JlcGxhY2VDb25zdHJ1Y3RvcldpdGhCdWlsZGVyL2NvbnN0cnVjdG9yQ2hhaW5XaXRob3V0RGVmYXVsdHMvYmVmb3JlL1Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZDYyMjUwCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3JlcGxhY2VDb25zdHJ1Y3RvcldpdGhCdWlsZGVyL2NvbnN0cnVjdG9yQ2hhaW5XaXRob3V0RGVmYXVsdHMvYmVmb3JlL1Rlc3QuamF2YQpAQCAtMCwwICsxLDExIEBACitwdWJsaWMgY2xhc3MgVGVzdCB7CisgIHB1YmxpYyBUZXN0KGludCBpLCBpbnQgail7fQorICBwdWJsaWMgVGVzdChpbnQgail7CisgICAgdGhpcygyLCBqKTsKKyAgfQorICB2b2lkIGZvbygpe30KKyAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncyl7CisgICAgbmV3IFRlc3QoMSkuZm9vKCk7CisgICAgbmV3IFRlc3QoMiwgMykuZm9vKCk7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVwbGFjZUNvbnN0cnVjdG9yV2l0aEJ1aWxkZXIvY29uc3RydWN0b3JUcmVlL2FmdGVyL1Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9yZXBsYWNlQ29uc3RydWN0b3JXaXRoQnVpbGRlci9jb25zdHJ1Y3RvclRyZWUvYWZ0ZXIvVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZiOWI2NTcKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVwbGFjZUNvbnN0cnVjdG9yV2l0aEJ1aWxkZXIvY29uc3RydWN0b3JUcmVlL2FmdGVyL1Rlc3QuamF2YQpAQCAtMCwwICsxLDE1IEBACitwdWJsaWMgY2xhc3MgVGVzdCB7CisgIFN0cmluZyBzdHI7CisgIHB1YmxpYyBUZXN0KGludCBpKXt9CisgIHB1YmxpYyBUZXN0KCl7CisgICAgdGhpcygyKTsKKyAgfQorICBwdWJsaWMgVGVzdChTdHJpbmcgcyl7CisgICAgdGhpcygzKTsKKyAgICBzdHIgPSBzOworICB9CisgIHZvaWQgZm9vKCl7fQorICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKXsKKyAgICBuZXcgVGVzdCgxKS5mb28oKTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9yZXBsYWNlQ29uc3RydWN0b3JXaXRoQnVpbGRlci9jb25zdHJ1Y3RvclRyZWUvYmVmb3JlL1Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9yZXBsYWNlQ29uc3RydWN0b3JXaXRoQnVpbGRlci9jb25zdHJ1Y3RvclRyZWUvYmVmb3JlL1Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YjliNjU3Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3JlcGxhY2VDb25zdHJ1Y3RvcldpdGhCdWlsZGVyL2NvbnN0cnVjdG9yVHJlZS9iZWZvcmUvVGVzdC5qYXZhCkBAIC0wLDAgKzEsMTUgQEAKK3B1YmxpYyBjbGFzcyBUZXN0IHsKKyAgU3RyaW5nIHN0cjsKKyAgcHVibGljIFRlc3QoaW50IGkpe30KKyAgcHVibGljIFRlc3QoKXsKKyAgICB0aGlzKDIpOworICB9CisgIHB1YmxpYyBUZXN0KFN0cmluZyBzKXsKKyAgICB0aGlzKDMpOworICAgIHN0ciA9IHM7CisgIH0KKyAgdm9pZCBmb28oKXt9CisgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpeworICAgIG5ldyBUZXN0KDEpLmZvbygpOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3JlcGxhY2VDb25zdHJ1Y3RvcldpdGhCdWlsZGVyL2V4aXN0aW5nRW1wdHlCdWlsZGVyL2FmdGVyL0J1aWxkZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9yZXBsYWNlQ29uc3RydWN0b3JXaXRoQnVpbGRlci9leGlzdGluZ0VtcHR5QnVpbGRlci9hZnRlci9CdWlsZGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzEzMGVjOAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9yZXBsYWNlQ29uc3RydWN0b3JXaXRoQnVpbGRlci9leGlzdGluZ0VtcHR5QnVpbGRlci9hZnRlci9CdWlsZGVyLmphdmEKQEAgLTAsMCArMSwxMyBAQAorcHVibGljIGNsYXNzIEJ1aWxkZXIgeworCisgICAgcHJpdmF0ZSBpbnRbXSBpOworCisgICAgcHVibGljIEJ1aWxkZXIgc2V0SShpbnQuLi4gaSkgeworICAgICAgICB0aGlzLmkgPSBpOworICAgICAgICByZXR1cm4gdGhpczsKKyAgICB9CisKKyAgICBwdWJsaWMgVGVzdCBjcmVhdGVUZXN0KCkgeworICAgICAgICByZXR1cm4gbmV3IFRlc3QoaSk7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9yZXBsYWNlQ29uc3RydWN0b3JXaXRoQnVpbGRlci9leGlzdGluZ0VtcHR5QnVpbGRlci9hZnRlci9UZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVwbGFjZUNvbnN0cnVjdG9yV2l0aEJ1aWxkZXIvZXhpc3RpbmdFbXB0eUJ1aWxkZXIvYWZ0ZXIvVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjllZmM3ZmYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVwbGFjZUNvbnN0cnVjdG9yV2l0aEJ1aWxkZXIvZXhpc3RpbmdFbXB0eUJ1aWxkZXIvYWZ0ZXIvVGVzdC5qYXZhCkBAIC0wLDAgKzEsNyBAQAorcHVibGljIGNsYXNzIFRlc3QgeworICBwdWJsaWMgVGVzdChpbnQuLi4gaSl7fQorICB2b2lkIGZvbygpe30KKyAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncyl7CisgICAgbmV3IEJ1aWxkZXIoKS5zZXRJKDEsIDIsIDMpLmNyZWF0ZVRlc3QoKS5mb28oKTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9yZXBsYWNlQ29uc3RydWN0b3JXaXRoQnVpbGRlci9leGlzdGluZ0VtcHR5QnVpbGRlci9iZWZvcmUvQnVpbGRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3JlcGxhY2VDb25zdHJ1Y3RvcldpdGhCdWlsZGVyL2V4aXN0aW5nRW1wdHlCdWlsZGVyL2JlZm9yZS9CdWlsZGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTFmZjQ2MQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9yZXBsYWNlQ29uc3RydWN0b3JXaXRoQnVpbGRlci9leGlzdGluZ0VtcHR5QnVpbGRlci9iZWZvcmUvQnVpbGRlci5qYXZhCkBAIC0wLDAgKzEsMyBAQAorcHVibGljIGNsYXNzIEJ1aWxkZXIgeworCit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3JlcGxhY2VDb25zdHJ1Y3RvcldpdGhCdWlsZGVyL2V4aXN0aW5nRW1wdHlCdWlsZGVyL2JlZm9yZS9UZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVwbGFjZUNvbnN0cnVjdG9yV2l0aEJ1aWxkZXIvZXhpc3RpbmdFbXB0eUJ1aWxkZXIvYmVmb3JlL1Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZTBlYmI0Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3JlcGxhY2VDb25zdHJ1Y3RvcldpdGhCdWlsZGVyL2V4aXN0aW5nRW1wdHlCdWlsZGVyL2JlZm9yZS9UZXN0LmphdmEKQEAgLTAsMCArMSw3IEBACitwdWJsaWMgY2xhc3MgVGVzdCB7CisgIHB1YmxpYyBUZXN0KGludC4uLiBpKXt9CisgIHZvaWQgZm9vKCl7fQorICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKXsKKyAgICBuZXcgVGVzdCgxLCAyLCAzKS5mb28oKTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9yZXBsYWNlQ29uc3RydWN0b3JXaXRoQnVpbGRlci9leGlzdGluZ0hhbGZFbXB0eUJ1aWxkZXIvYWZ0ZXIvQnVpbGRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3JlcGxhY2VDb25zdHJ1Y3RvcldpdGhCdWlsZGVyL2V4aXN0aW5nSGFsZkVtcHR5QnVpbGRlci9hZnRlci9CdWlsZGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTJmODNhNwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9yZXBsYWNlQ29uc3RydWN0b3JXaXRoQnVpbGRlci9leGlzdGluZ0hhbGZFbXB0eUJ1aWxkZXIvYWZ0ZXIvQnVpbGRlci5qYXZhCkBAIC0wLDAgKzEsMTggQEAKK3B1YmxpYyBjbGFzcyBCdWlsZGVyIHsKKyAgICBwcml2YXRlIGludFtdIGk7CisgICAgcHJpdmF0ZSBpbnQgajsKKworICAgIHB1YmxpYyBCdWlsZGVyIHNldEkoaW50Li4uIGkpIHsKKyAgICAgICAgdGhpcy5pID0gaTsKKyAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgfQorCisgICAgcHVibGljIFRlc3QgY3JlYXRlVGVzdCgpIHsKKyAgICAgICAgcmV0dXJuIG5ldyBUZXN0KGosIGkpOworICAgIH0KKworICAgIHB1YmxpYyBCdWlsZGVyIHNldEooaW50IGopIHsKKyAgICAgICAgdGhpcy5qID0gajsKKyAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9yZXBsYWNlQ29uc3RydWN0b3JXaXRoQnVpbGRlci9leGlzdGluZ0hhbGZFbXB0eUJ1aWxkZXIvYWZ0ZXIvVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3JlcGxhY2VDb25zdHJ1Y3RvcldpdGhCdWlsZGVyL2V4aXN0aW5nSGFsZkVtcHR5QnVpbGRlci9hZnRlci9UZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTQwM2Q1NgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9yZXBsYWNlQ29uc3RydWN0b3JXaXRoQnVpbGRlci9leGlzdGluZ0hhbGZFbXB0eUJ1aWxkZXIvYWZ0ZXIvVGVzdC5qYXZhCkBAIC0wLDAgKzEsNyBAQAorcHVibGljIGNsYXNzIFRlc3QgeworICBwdWJsaWMgVGVzdChpbnQgaiwgaW50Li4uIGkpe30KKyAgdm9pZCBmb28oKXt9CisgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpeworICAgIG5ldyBCdWlsZGVyKCkuc2V0SigxKS5zZXRJKDIsIDMpLmNyZWF0ZVRlc3QoKS5mb28oKTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9yZXBsYWNlQ29uc3RydWN0b3JXaXRoQnVpbGRlci9leGlzdGluZ0hhbGZFbXB0eUJ1aWxkZXIvYmVmb3JlL0J1aWxkZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9yZXBsYWNlQ29uc3RydWN0b3JXaXRoQnVpbGRlci9leGlzdGluZ0hhbGZFbXB0eUJ1aWxkZXIvYmVmb3JlL0J1aWxkZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lODhhMTUxCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3JlcGxhY2VDb25zdHJ1Y3RvcldpdGhCdWlsZGVyL2V4aXN0aW5nSGFsZkVtcHR5QnVpbGRlci9iZWZvcmUvQnVpbGRlci5qYXZhCkBAIC0wLDAgKzEsMTIgQEAKK3B1YmxpYyBjbGFzcyBCdWlsZGVyIHsKKyAgICBwcml2YXRlIGludFtdIGk7CisKKyAgICBwdWJsaWMgQnVpbGRlciBzZXRJKGludC4uLiBpKSB7CisgICAgICAgIHRoaXMuaSA9IGk7CisgICAgICAgIHJldHVybiB0aGlzOworICAgIH0KKworICAgIHB1YmxpYyBUZXN0IGNyZWF0ZVRlc3QoKSB7CisgICAgICAgIHJldHVybiBuZXcgVGVzdChqLCBpKTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3JlcGxhY2VDb25zdHJ1Y3RvcldpdGhCdWlsZGVyL2V4aXN0aW5nSGFsZkVtcHR5QnVpbGRlci9iZWZvcmUvVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3JlcGxhY2VDb25zdHJ1Y3RvcldpdGhCdWlsZGVyL2V4aXN0aW5nSGFsZkVtcHR5QnVpbGRlci9iZWZvcmUvVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjExM2FmNjYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVwbGFjZUNvbnN0cnVjdG9yV2l0aEJ1aWxkZXIvZXhpc3RpbmdIYWxmRW1wdHlCdWlsZGVyL2JlZm9yZS9UZXN0LmphdmEKQEAgLTAsMCArMSw3IEBACitwdWJsaWMgY2xhc3MgVGVzdCB7CisgIHB1YmxpYyBUZXN0KGludCBqLCBpbnQuLi4gaSl7fQorICB2b2lkIGZvbygpe30KKyAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncyl7CisgICAgbmV3IFRlc3QoMSwgMiwgMykuZm9vKCk7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVwbGFjZUNvbnN0cnVjdG9yV2l0aEJ1aWxkZXIvZXhpc3RpbmdWb2lkU2V0dGVyc0J1aWxkZXIvYWZ0ZXIvQnVpbGRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3JlcGxhY2VDb25zdHJ1Y3RvcldpdGhCdWlsZGVyL2V4aXN0aW5nVm9pZFNldHRlcnNCdWlsZGVyL2FmdGVyL0J1aWxkZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMmY4M2E3Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3JlcGxhY2VDb25zdHJ1Y3RvcldpdGhCdWlsZGVyL2V4aXN0aW5nVm9pZFNldHRlcnNCdWlsZGVyL2FmdGVyL0J1aWxkZXIuamF2YQpAQCAtMCwwICsxLDE4IEBACitwdWJsaWMgY2xhc3MgQnVpbGRlciB7CisgICAgcHJpdmF0ZSBpbnRbXSBpOworICAgIHByaXZhdGUgaW50IGo7CisKKyAgICBwdWJsaWMgQnVpbGRlciBzZXRJKGludC4uLiBpKSB7CisgICAgICAgIHRoaXMuaSA9IGk7CisgICAgICAgIHJldHVybiB0aGlzOworICAgIH0KKworICAgIHB1YmxpYyBUZXN0IGNyZWF0ZVRlc3QoKSB7CisgICAgICAgIHJldHVybiBuZXcgVGVzdChqLCBpKTsKKyAgICB9CisKKyAgICBwdWJsaWMgQnVpbGRlciBzZXRKKGludCBqKSB7CisgICAgICAgIHRoaXMuaiA9IGo7CisgICAgICAgIHJldHVybiB0aGlzOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVwbGFjZUNvbnN0cnVjdG9yV2l0aEJ1aWxkZXIvZXhpc3RpbmdWb2lkU2V0dGVyc0J1aWxkZXIvYWZ0ZXIvVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3JlcGxhY2VDb25zdHJ1Y3RvcldpdGhCdWlsZGVyL2V4aXN0aW5nVm9pZFNldHRlcnNCdWlsZGVyL2FmdGVyL1Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNDAzZDU2Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3JlcGxhY2VDb25zdHJ1Y3RvcldpdGhCdWlsZGVyL2V4aXN0aW5nVm9pZFNldHRlcnNCdWlsZGVyL2FmdGVyL1Rlc3QuamF2YQpAQCAtMCwwICsxLDcgQEAKK3B1YmxpYyBjbGFzcyBUZXN0IHsKKyAgcHVibGljIFRlc3QoaW50IGosIGludC4uLiBpKXt9CisgIHZvaWQgZm9vKCl7fQorICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKXsKKyAgICBuZXcgQnVpbGRlcigpLnNldEooMSkuc2V0SSgyLCAzKS5jcmVhdGVUZXN0KCkuZm9vKCk7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVwbGFjZUNvbnN0cnVjdG9yV2l0aEJ1aWxkZXIvZXhpc3RpbmdWb2lkU2V0dGVyc0J1aWxkZXIvYmVmb3JlL0J1aWxkZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9yZXBsYWNlQ29uc3RydWN0b3JXaXRoQnVpbGRlci9leGlzdGluZ1ZvaWRTZXR0ZXJzQnVpbGRlci9iZWZvcmUvQnVpbGRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFlZDRlNjcKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVwbGFjZUNvbnN0cnVjdG9yV2l0aEJ1aWxkZXIvZXhpc3RpbmdWb2lkU2V0dGVyc0J1aWxkZXIvYmVmb3JlL0J1aWxkZXIuamF2YQpAQCAtMCwwICsxLDExIEBACitwdWJsaWMgY2xhc3MgQnVpbGRlciB7CisgICAgcHJpdmF0ZSBpbnRbXSBpOworCisgICAgcHVibGljIHZvaWQgc2V0SShpbnQuLi4gaSkgeworICAgICAgICB0aGlzLmkgPSBpOworICAgIH0KKworICAgIHB1YmxpYyBUZXN0IGNyZWF0ZVRlc3QoKSB7CisgICAgICAgIHJldHVybiBuZXcgVGVzdChqLCBpKTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3JlcGxhY2VDb25zdHJ1Y3RvcldpdGhCdWlsZGVyL2V4aXN0aW5nVm9pZFNldHRlcnNCdWlsZGVyL2JlZm9yZS9UZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVwbGFjZUNvbnN0cnVjdG9yV2l0aEJ1aWxkZXIvZXhpc3RpbmdWb2lkU2V0dGVyc0J1aWxkZXIvYmVmb3JlL1Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMTNhZjY2Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3JlcGxhY2VDb25zdHJ1Y3RvcldpdGhCdWlsZGVyL2V4aXN0aW5nVm9pZFNldHRlcnNCdWlsZGVyL2JlZm9yZS9UZXN0LmphdmEKQEAgLTAsMCArMSw3IEBACitwdWJsaWMgY2xhc3MgVGVzdCB7CisgIHB1YmxpYyBUZXN0KGludCBqLCBpbnQuLi4gaSl7fQorICB2b2lkIGZvbygpe30KKyAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncyl7CisgICAgbmV3IFRlc3QoMSwgMiwgMykuZm9vKCk7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVwbGFjZUNvbnN0cnVjdG9yV2l0aEJ1aWxkZXIvZ2VuZXJpY3MvYWZ0ZXIvQnVpbGRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3JlcGxhY2VDb25zdHJ1Y3RvcldpdGhCdWlsZGVyL2dlbmVyaWNzL2FmdGVyL0J1aWxkZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZTQzNWMzCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3JlcGxhY2VDb25zdHJ1Y3RvcldpdGhCdWlsZGVyL2dlbmVyaWNzL2FmdGVyL0J1aWxkZXIuamF2YQpAQCAtMCwwICsxLDEyIEBACitwdWJsaWMgY2xhc3MgQnVpbGRlcjxUPiB7CisgICAgcHJpdmF0ZSBUIHQ7CisKKyAgICBwdWJsaWMgQnVpbGRlciBzZXRUKFQgdCkgeworICAgICAgICB0aGlzLnQgPSB0OworICAgICAgICByZXR1cm4gdGhpczsKKyAgICB9CisKKyAgICBwdWJsaWMgVGVzdCBjcmVhdGVUZXN0KCkgeworICAgICAgICByZXR1cm4gbmV3IFRlc3QodCk7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9yZXBsYWNlQ29uc3RydWN0b3JXaXRoQnVpbGRlci9nZW5lcmljcy9hZnRlci9UZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVwbGFjZUNvbnN0cnVjdG9yV2l0aEJ1aWxkZXIvZ2VuZXJpY3MvYWZ0ZXIvVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjczMmM2ZDEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVwbGFjZUNvbnN0cnVjdG9yV2l0aEJ1aWxkZXIvZ2VuZXJpY3MvYWZ0ZXIvVGVzdC5qYXZhCkBAIC0wLDAgKzEsNyBAQAorcHVibGljIGNsYXNzIFRlc3Q8VD4geworICBwdWJsaWMgVGVzdChUIHQpe30KKyAgdm9pZCBmb28oKXt9CisgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFQgYXJncyl7CisgICAgbmV3IEJ1aWxkZXIoKS5zZXRUKGFyZ3MpLmNyZWF0ZVRlc3QoKS5mb28oKTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9yZXBsYWNlQ29uc3RydWN0b3JXaXRoQnVpbGRlci9nZW5lcmljcy9iZWZvcmUvVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3JlcGxhY2VDb25zdHJ1Y3RvcldpdGhCdWlsZGVyL2dlbmVyaWNzL2JlZm9yZS9UZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGJmNjI4NQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9yZXBsYWNlQ29uc3RydWN0b3JXaXRoQnVpbGRlci9nZW5lcmljcy9iZWZvcmUvVGVzdC5qYXZhCkBAIC0wLDAgKzEsNyBAQAorcHVibGljIGNsYXNzIFRlc3Q8VD4geworICBwdWJsaWMgVGVzdChUIHQpe30KKyAgdm9pZCBmb28oKXt9CisgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFQgYXJncyl7CisgICAgbmV3IFRlc3QoYXJncykuZm9vKCk7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVwbGFjZUNvbnN0cnVjdG9yV2l0aEJ1aWxkZXIvaW1wb3J0cy9hZnRlci9CYXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9yZXBsYWNlQ29uc3RydWN0b3JXaXRoQnVpbGRlci9pbXBvcnRzL2FmdGVyL0Jhci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ3MjJlNTEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVwbGFjZUNvbnN0cnVjdG9yV2l0aEJ1aWxkZXIvaW1wb3J0cy9hZnRlci9CYXIuamF2YQpAQCAtMCwwICsxLDUgQEAKK2ltcG9ydCBmb28uQnVpbGRlcjsKKworcHVibGljIGNsYXNzIEJhciB7CisgICAgZmluYWwgVGVzdCBmb28gPSBuZXcgQnVpbGRlcigpLnNldEJhcigiYmFyIikuY3JlYXRlVGVzdCgpOworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9yZXBsYWNlQ29uc3RydWN0b3JXaXRoQnVpbGRlci9pbXBvcnRzL2FmdGVyL1Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9yZXBsYWNlQ29uc3RydWN0b3JXaXRoQnVpbGRlci9pbXBvcnRzL2FmdGVyL1Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zY2MwNWM0Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3JlcGxhY2VDb25zdHJ1Y3RvcldpdGhCdWlsZGVyL2ltcG9ydHMvYWZ0ZXIvVGVzdC5qYXZhCkBAIC0wLDAgKzEsNyBAQAorcHVibGljIGNsYXNzIFRlc3QgeworICAgIHByaXZhdGUgZmluYWwgU3RyaW5nIGJhcjsKKworICAgIHB1YmxpYyBUZXN0KGZpbmFsIFN0cmluZyBiYXIpIHsKKyAgICAgICAgdGhpcy5iYXIgPSBiYXI7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9yZXBsYWNlQ29uc3RydWN0b3JXaXRoQnVpbGRlci9pbXBvcnRzL2FmdGVyL2Zvby9CdWlsZGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVwbGFjZUNvbnN0cnVjdG9yV2l0aEJ1aWxkZXIvaW1wb3J0cy9hZnRlci9mb28vQnVpbGRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA4ODdjNTUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVwbGFjZUNvbnN0cnVjdG9yV2l0aEJ1aWxkZXIvaW1wb3J0cy9hZnRlci9mb28vQnVpbGRlci5qYXZhCkBAIC0wLDAgKzEsMTQgQEAKK3BhY2thZ2UgZm9vOworCitwdWJsaWMgY2xhc3MgQnVpbGRlciB7CisgICAgcHJpdmF0ZSBTdHJpbmcgYmFyOworCisgICAgcHVibGljIEJ1aWxkZXIgc2V0QmFyKFN0cmluZyBiYXIpIHsKKyAgICAgICAgdGhpcy5iYXIgPSBiYXI7CisgICAgICAgIHJldHVybiB0aGlzOworICAgIH0KKworICAgIHB1YmxpYyBUZXN0IGNyZWF0ZVRlc3QoKSB7CisgICAgICAgIHJldHVybiBuZXcgVGVzdChiYXIpOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVwbGFjZUNvbnN0cnVjdG9yV2l0aEJ1aWxkZXIvaW1wb3J0cy9iZWZvcmUvQmFyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVwbGFjZUNvbnN0cnVjdG9yV2l0aEJ1aWxkZXIvaW1wb3J0cy9iZWZvcmUvQmFyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWMwYzVhOQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9yZXBsYWNlQ29uc3RydWN0b3JXaXRoQnVpbGRlci9pbXBvcnRzL2JlZm9yZS9CYXIuamF2YQpAQCAtMCwwICsxLDMgQEAKK3B1YmxpYyBjbGFzcyBCYXIgeworICAgIGZpbmFsIFRlc3QgZm9vID0gbmV3IFRlc3QoImJhciIpOworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9yZXBsYWNlQ29uc3RydWN0b3JXaXRoQnVpbGRlci9pbXBvcnRzL2JlZm9yZS9UZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVwbGFjZUNvbnN0cnVjdG9yV2l0aEJ1aWxkZXIvaW1wb3J0cy9iZWZvcmUvVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNjYzA1YzQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVwbGFjZUNvbnN0cnVjdG9yV2l0aEJ1aWxkZXIvaW1wb3J0cy9iZWZvcmUvVGVzdC5qYXZhCkBAIC0wLDAgKzEsNyBAQAorcHVibGljIGNsYXNzIFRlc3QgeworICAgIHByaXZhdGUgZmluYWwgU3RyaW5nIGJhcjsKKworICAgIHB1YmxpYyBUZXN0KGZpbmFsIFN0cmluZyBiYXIpIHsKKyAgICAgICAgdGhpcy5iYXIgPSBiYXI7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9yZXBsYWNlQ29uc3RydWN0b3JXaXRoQnVpbGRlci9tdWx0aXBsZVBhcmFtcy9hZnRlci9CdWlsZGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVwbGFjZUNvbnN0cnVjdG9yV2l0aEJ1aWxkZXIvbXVsdGlwbGVQYXJhbXMvYWZ0ZXIvQnVpbGRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRmNTc4ZGIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVwbGFjZUNvbnN0cnVjdG9yV2l0aEJ1aWxkZXIvbXVsdGlwbGVQYXJhbXMvYWZ0ZXIvQnVpbGRlci5qYXZhCkBAIC0wLDAgKzEsMTggQEAKK3B1YmxpYyBjbGFzcyBCdWlsZGVyIHsKKyAgICBwcml2YXRlIGludCBqOworICAgIHByaXZhdGUgaW50W10gaTsKKworICAgIHB1YmxpYyBCdWlsZGVyIHNldEooaW50IGopIHsKKyAgICAgICAgdGhpcy5qID0gajsKKyAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgfQorCisgICAgcHVibGljIEJ1aWxkZXIgc2V0SShpbnQuLi4gaSkgeworICAgICAgICB0aGlzLmkgPSBpOworICAgICAgICByZXR1cm4gdGhpczsKKyAgICB9CisKKyAgICBwdWJsaWMgVGVzdCBjcmVhdGVUZXN0KCkgeworICAgICAgICByZXR1cm4gbmV3IFRlc3QoaiwgaSk7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9yZXBsYWNlQ29uc3RydWN0b3JXaXRoQnVpbGRlci9tdWx0aXBsZVBhcmFtcy9hZnRlci9UZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVwbGFjZUNvbnN0cnVjdG9yV2l0aEJ1aWxkZXIvbXVsdGlwbGVQYXJhbXMvYWZ0ZXIvVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE0MDNkNTYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVwbGFjZUNvbnN0cnVjdG9yV2l0aEJ1aWxkZXIvbXVsdGlwbGVQYXJhbXMvYWZ0ZXIvVGVzdC5qYXZhCkBAIC0wLDAgKzEsNyBAQAorcHVibGljIGNsYXNzIFRlc3QgeworICBwdWJsaWMgVGVzdChpbnQgaiwgaW50Li4uIGkpe30KKyAgdm9pZCBmb28oKXt9CisgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpeworICAgIG5ldyBCdWlsZGVyKCkuc2V0SigxKS5zZXRJKDIsIDMpLmNyZWF0ZVRlc3QoKS5mb28oKTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9yZXBsYWNlQ29uc3RydWN0b3JXaXRoQnVpbGRlci9tdWx0aXBsZVBhcmFtcy9iZWZvcmUvVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3JlcGxhY2VDb25zdHJ1Y3RvcldpdGhCdWlsZGVyL211bHRpcGxlUGFyYW1zL2JlZm9yZS9UZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTEzYWY2NgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9yZXBsYWNlQ29uc3RydWN0b3JXaXRoQnVpbGRlci9tdWx0aXBsZVBhcmFtcy9iZWZvcmUvVGVzdC5qYXZhCkBAIC0wLDAgKzEsNyBAQAorcHVibGljIGNsYXNzIFRlc3QgeworICBwdWJsaWMgVGVzdChpbnQgaiwgaW50Li4uIGkpe30KKyAgdm9pZCBmb28oKXt9CisgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpeworICAgIG5ldyBUZXN0KDEsIDIsIDMpLmZvbygpOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3JlcGxhY2VDb25zdHJ1Y3RvcldpdGhCdWlsZGVyL3ZhcmFyZ3MvYWZ0ZXIvQnVpbGRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3JlcGxhY2VDb25zdHJ1Y3RvcldpdGhCdWlsZGVyL3ZhcmFyZ3MvYWZ0ZXIvQnVpbGRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFhMWVlODcKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVwbGFjZUNvbnN0cnVjdG9yV2l0aEJ1aWxkZXIvdmFyYXJncy9hZnRlci9CdWlsZGVyLmphdmEKQEAgLTAsMCArMSwxMiBAQAorcHVibGljIGNsYXNzIEJ1aWxkZXIgeworICAgIHByaXZhdGUgaW50W10gaTsKKworICAgIHB1YmxpYyBCdWlsZGVyIHNldEkoaW50Li4uIGkpIHsKKyAgICAgICAgdGhpcy5pID0gaTsKKyAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgfQorCisgICAgcHVibGljIFRlc3QgY3JlYXRlVGVzdCgpIHsKKyAgICAgICAgcmV0dXJuIG5ldyBUZXN0KGkpOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVwbGFjZUNvbnN0cnVjdG9yV2l0aEJ1aWxkZXIvdmFyYXJncy9hZnRlci9UZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVwbGFjZUNvbnN0cnVjdG9yV2l0aEJ1aWxkZXIvdmFyYXJncy9hZnRlci9UZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDQ4NmE1OQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9yZXBsYWNlQ29uc3RydWN0b3JXaXRoQnVpbGRlci92YXJhcmdzL2FmdGVyL1Rlc3QuamF2YQpAQCAtMCwwICsxLDggQEAKK3B1YmxpYyBjbGFzcyBUZXN0IHsKKyAgcHVibGljIFRlc3QoaW50Li4uIGkpe30KKyAgdm9pZCBmb28oKXt9CisgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpeworICAgIG5ldyBCdWlsZGVyKCkuc2V0SSgxLCAyLCAzKS5jcmVhdGVUZXN0KCkuZm9vKCk7CisgICAgbmV3IEJ1aWxkZXIoKS5jcmVhdGVUZXN0KCkuZm9vKCk7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVwbGFjZUNvbnN0cnVjdG9yV2l0aEJ1aWxkZXIvdmFyYXJncy9iZWZvcmUvVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3JlcGxhY2VDb25zdHJ1Y3RvcldpdGhCdWlsZGVyL3ZhcmFyZ3MvYmVmb3JlL1Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40N2U2OGE1Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3JlcGxhY2VDb25zdHJ1Y3RvcldpdGhCdWlsZGVyL3ZhcmFyZ3MvYmVmb3JlL1Rlc3QuamF2YQpAQCAtMCwwICsxLDggQEAKK3B1YmxpYyBjbGFzcyBUZXN0IHsKKyAgcHVibGljIFRlc3QoaW50Li4uIGkpe30KKyAgdm9pZCBmb28oKXt9CisgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpeworICAgIG5ldyBUZXN0KDEsIDIsIDMpLmZvbygpOworICAgIG5ldyBUZXN0KCkuZm9vKCk7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVwbGFjZUNvbnN0cnVjdG9yV2l0aEZhY3RvcnkvYWZ0ZXIwMS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3JlcGxhY2VDb25zdHJ1Y3RvcldpdGhGYWN0b3J5L2FmdGVyMDEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NWJhMzVjCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3JlcGxhY2VDb25zdHJ1Y3RvcldpdGhGYWN0b3J5L2FmdGVyMDEuamF2YQpAQCAtMCwwICsxLDggQEAKK2NsYXNzIEEgeworICAgIHByaXZhdGUgQSgpIHsKKyAgICB9CisKKyAgICBzdGF0aWMgQSBuZXdBKCkgeworICAgICAgICByZXR1cm4gbmV3IEEoKTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3JlcGxhY2VDb25zdHJ1Y3RvcldpdGhGYWN0b3J5L2FmdGVyMDIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9yZXBsYWNlQ29uc3RydWN0b3JXaXRoRmFjdG9yeS9hZnRlcjAyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDM1NjViMAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9yZXBsYWNlQ29uc3RydWN0b3JXaXRoRmFjdG9yeS9hZnRlcjAyLmphdmEKQEAgLTAsMCArMSwyMiBAQAorY2xhc3MgQSB7CisgICAgQShpbnQgaSkgeworICAgIH0KKworICAgIHB1YmxpYyBzdGF0aWMgQSBuZXdBKGludCBpKSB7CisgICAgICAgIHJldHVybiBuZXcgQShpKTsKKyAgICB9CisKKyAgICBBIG1ldGhvZCgpIHsKKyAgICAgICAgcmV0dXJuIG5ld0EoMTApOworICAgIH0KK30KKworY2xhc3MgQiBleHRlbmRzIEEgeworICAgIEIoaW50IGopIHsKKyAgICAgICAgc3VwZXIoaisxKTsKKyAgICB9Cit9CisKK2NsYXNzIFVzYWdlIHsKKyAgICBBIGEgPSBBLm5ld0EoMik7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3JlcGxhY2VDb25zdHJ1Y3RvcldpdGhGYWN0b3J5L2FmdGVyMDMuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9yZXBsYWNlQ29uc3RydWN0b3JXaXRoRmFjdG9yeS9hZnRlcjAzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjkxZDkyNQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9yZXBsYWNlQ29uc3RydWN0b3JXaXRoRmFjdG9yeS9hZnRlcjAzLmphdmEKQEAgLTAsMCArMSwxMiBAQAorY2xhc3MgQTxjYXJldD4geworICAgIHByaXZhdGUgQSgpIHsKKyAgICB9CisKKyAgICBzdGF0aWMgQSBuZXdBKCkgeworICAgICAgICByZXR1cm4gbmV3IEEoKTsKKyAgICB9Cit9CisKK3B1YmxpYyBjbGFzcyBCIHsKKyAgICBBIGEgPSBBLm5ld0EoKTsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVwbGFjZUNvbnN0cnVjdG9yV2l0aEZhY3RvcnkvYWZ0ZXIwNC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3JlcGxhY2VDb25zdHJ1Y3RvcldpdGhGYWN0b3J5L2FmdGVyMDQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lM2M4NzRkCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3JlcGxhY2VDb25zdHJ1Y3RvcldpdGhGYWN0b3J5L2FmdGVyMDQuamF2YQpAQCAtMCwwICsxLDE3IEBACitjbGFzcyBPdXRlckNsYXNzIHsKKyAgICBJbm5lckNsYXNzIG5ld0lubmVyQ2xhc3MoaW50IF9pKSB7CisgICAgICAgIHJldHVybiBuZXcgSW5uZXJDbGFzcyhfaSk7CisgICAgfQorCisgICAgY2xhc3MgSW5uZXJDbGFzcyB7CisgICAgICAgIGludCBpOworICAgICAgICBwcml2YXRlIElubmVyQ2xhc3MoaW50IF9pKSB7CisgICAgICAgICAgICBpID0gX2k7CisgICAgICAgIH0KKyAgICB9CisgICAgSW5uZXJDbGFzcyBteUlubmVyID0gbmV3SW5uZXJDbGFzcygyNyk7CisgICAgc3RhdGljIGludCBtZXRob2QoKSB7CisgICAgICAgIE91dGVyQ2xhc3MgdGVzdCA9IG5ldyBPdXRlckNsYXNzKCk7CisgICAgICAgIElubmVyQ2xhc3MgaW5uZXIgPSB0ZXN0Lm5ld0lubmVyQ2xhc3MoMTUpOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVwbGFjZUNvbnN0cnVjdG9yV2l0aEZhY3RvcnkvYWZ0ZXIwNS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3JlcGxhY2VDb25zdHJ1Y3RvcldpdGhGYWN0b3J5L2FmdGVyMDUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZGJkNDRhCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3JlcGxhY2VDb25zdHJ1Y3RvcldpdGhGYWN0b3J5L2FmdGVyMDUuamF2YQpAQCAtMCwwICsxLDE0IEBACitjbGFzcyBBIHsKKyAgICBBKGludCBpKSB7CisgICAgfQorCisgICAgc3RhdGljIEEgbmV3QShpbnQgaSkgeworICAgICAgICByZXR1cm4gbmV3IEEoaSk7CisgICAgfQorfQorCitjbGFzcyBCIGV4dGVuZHMgQSB7CisgICAgQihpbnQgaSkgeworICAgICAgc3VwZXIoaSk7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9yZXBsYWNlQ29uc3RydWN0b3JXaXRoRmFjdG9yeS9hZnRlcjA2LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVwbGFjZUNvbnN0cnVjdG9yV2l0aEZhY3RvcnkvYWZ0ZXIwNi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkxZmJkNGQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVwbGFjZUNvbnN0cnVjdG9yV2l0aEZhY3RvcnkvYWZ0ZXIwNi5qYXZhCkBAIC0wLDAgKzEsMTMgQEAKK2NsYXNzIEEgeworICAgIEEoKSB7CisgICAgfQorCisgICAgc3RhdGljIEEgbmV3QSgpIHsKKyAgICAgICAgcmV0dXJuIG5ldyBBKCk7CisgICAgfQorfQorCitjbGFzcyBCIGV4dGVuZHMgQSB7CisgICAgQigpIHsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3JlcGxhY2VDb25zdHJ1Y3RvcldpdGhGYWN0b3J5L2FmdGVyMDcuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9yZXBsYWNlQ29uc3RydWN0b3JXaXRoRmFjdG9yeS9hZnRlcjA3LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTViYTM1YwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9yZXBsYWNlQ29uc3RydWN0b3JXaXRoRmFjdG9yeS9hZnRlcjA3LmphdmEKQEAgLTAsMCArMSw4IEBACitjbGFzcyBBIHsKKyAgICBwcml2YXRlIEEoKSB7CisgICAgfQorCisgICAgc3RhdGljIEEgbmV3QSgpIHsKKyAgICAgICAgcmV0dXJuIG5ldyBBKCk7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9yZXBsYWNlQ29uc3RydWN0b3JXaXRoRmFjdG9yeS9hZnRlcjA4LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVwbGFjZUNvbnN0cnVjdG9yV2l0aEZhY3RvcnkvYWZ0ZXIwOC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNhOGJmZTgKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVwbGFjZUNvbnN0cnVjdG9yV2l0aEZhY3RvcnkvYWZ0ZXIwOC5qYXZhCkBAIC0wLDAgKzEsOCBAQAorY2xhc3MgVGVzdDxBLEIsQz4geworICAgIHByaXZhdGUgVGVzdCgpIHsKKyAgICB9CisKKyAgICBwdWJsaWMgc3RhdGljIDxBLCBCLCBDPiBUZXN0PEEsIEIsIEM+IG5ld1Rlc3QoKSB7CisgICAgICAgIHJldHVybiBuZXcgVGVzdDxBLCBCLCBDPigpOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVwbGFjZUNvbnN0cnVjdG9yV2l0aEZhY3RvcnkvYmVmb3JlMDEuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9yZXBsYWNlQ29uc3RydWN0b3JXaXRoRmFjdG9yeS9iZWZvcmUwMS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZmNDI2ZDEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVwbGFjZUNvbnN0cnVjdG9yV2l0aEZhY3RvcnkvYmVmb3JlMDEuamF2YQpAQCAtMCwwICsxLDQgQEAKK2NsYXNzIEEgeworICAgIEEoKSB7PGNhcmV0PgorICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVwbGFjZUNvbnN0cnVjdG9yV2l0aEZhY3RvcnkvYmVmb3JlMDIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9yZXBsYWNlQ29uc3RydWN0b3JXaXRoRmFjdG9yeS9iZWZvcmUwMi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEyMjMxMTIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVwbGFjZUNvbnN0cnVjdG9yV2l0aEZhY3RvcnkvYmVmb3JlMDIuamF2YQpAQCAtMCwwICsxLDE4IEBACitjbGFzcyBBIHsKKyAgICBwdWJsaWMgQShpbnQgaSkgezxjYXJldD4KKyAgICB9CisKKyAgICBBIG1ldGhvZCgpIHsKKyAgICAgICAgcmV0dXJuIG5ldyBBKDEwKTsKKyAgICB9Cit9CisKK2NsYXNzIEIgZXh0ZW5kcyBBIHsKKyAgICBCKGludCBqKSB7CisgICAgICAgIHN1cGVyKGorMSk7CisgICAgfQorfQorCitjbGFzcyBVc2FnZSB7CisgICAgQSBhID0gbmV3IEEoMik7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3JlcGxhY2VDb25zdHJ1Y3RvcldpdGhGYWN0b3J5L2JlZm9yZTAzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVwbGFjZUNvbnN0cnVjdG9yV2l0aEZhY3RvcnkvYmVmb3JlMDMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MTNjNTM2Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3JlcGxhY2VDb25zdHJ1Y3RvcldpdGhGYWN0b3J5L2JlZm9yZTAzLmphdmEKQEAgLTAsMCArMSw2IEBACitjbGFzcyBBPGNhcmV0PiB7Cit9CisKK3B1YmxpYyBjbGFzcyBCIHsKKyAgICBBIGEgPSBuZXcgQSgpOworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9yZXBsYWNlQ29uc3RydWN0b3JXaXRoRmFjdG9yeS9iZWZvcmUwNC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3JlcGxhY2VDb25zdHJ1Y3RvcldpdGhGYWN0b3J5L2JlZm9yZTA0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjI2MGUyZjMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVwbGFjZUNvbnN0cnVjdG9yV2l0aEZhY3RvcnkvYmVmb3JlMDQuamF2YQpAQCAtMCwwICsxLDEzIEBACitjbGFzcyBPdXRlckNsYXNzIHsKKyAgICBjbGFzcyBJbm5lckNsYXNzIHsKKyAgICAgICAgaW50IGk7CisgICAgICAgIElubmVyQ2xhc3MoaW50IF9pKSB7PGNhcmV0PgorICAgICAgICAgICAgaSA9IF9pOworICAgICAgICB9CisgICAgfQorICAgIElubmVyQ2xhc3MgbXlJbm5lciA9IG5ldyBJbm5lckNsYXNzKDI3KTsKKyAgICBzdGF0aWMgaW50IG1ldGhvZCgpIHsKKyAgICAgICAgT3V0ZXJDbGFzcyB0ZXN0ID0gbmV3IE91dGVyQ2xhc3MoKTsKKyAgICAgICAgSW5uZXJDbGFzcyBpbm5lciA9IHRlc3QubmV3IElubmVyQ2xhc3MoMTUpOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVwbGFjZUNvbnN0cnVjdG9yV2l0aEZhY3RvcnkvYmVmb3JlMDUuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9yZXBsYWNlQ29uc3RydWN0b3JXaXRoRmFjdG9yeS9iZWZvcmUwNS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM5ODMyMmQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVwbGFjZUNvbnN0cnVjdG9yV2l0aEZhY3RvcnkvYmVmb3JlMDUuamF2YQpAQCAtMCwwICsxLDEwIEBACitjbGFzcyBBIHsKKyAgICBBKGludCBpKSB7PGNhcmV0PgorICAgIH0KK30KKworY2xhc3MgQiBleHRlbmRzIEEgeworICAgIEIoaW50IGkpIHsKKyAgICAgIHN1cGVyKGkpOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVwbGFjZUNvbnN0cnVjdG9yV2l0aEZhY3RvcnkvYmVmb3JlMDYuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9yZXBsYWNlQ29uc3RydWN0b3JXaXRoRmFjdG9yeS9iZWZvcmUwNi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRkNTBjY2EwCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3JlcGxhY2VDb25zdHJ1Y3RvcldpdGhGYWN0b3J5L2JlZm9yZTA2LmphdmEKQEAgLTAsMCArMSw5IEBACitjbGFzcyBBIHsKKyAgICBBKCkgezxjYXJldD4KKyAgICB9Cit9CisKK2NsYXNzIEIgZXh0ZW5kcyBBIHsKKyAgICBCKCkgeworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVwbGFjZUNvbnN0cnVjdG9yV2l0aEZhY3RvcnkvYmVmb3JlMDcuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9yZXBsYWNlQ29uc3RydWN0b3JXaXRoRmFjdG9yeS9iZWZvcmUwNy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkyOGE2NjQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVwbGFjZUNvbnN0cnVjdG9yV2l0aEZhY3RvcnkvYmVmb3JlMDcuamF2YQpAQCAtMCwwICsxLDIgQEAKK2NsYXNzIEEgezxjYXJldD4KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVwbGFjZUNvbnN0cnVjdG9yV2l0aEZhY3RvcnkvYmVmb3JlMDguamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9yZXBsYWNlQ29uc3RydWN0b3JXaXRoRmFjdG9yeS9iZWZvcmUwOC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdmNDg0MGIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvcmVwbGFjZUNvbnN0cnVjdG9yV2l0aEZhY3RvcnkvYmVmb3JlMDguamF2YQpAQCAtMCwwICsxLDQgQEAKK2NsYXNzIFRlc3Q8QSxCLEM+IHsKKyAgICBwdWJsaWMgPGNhcmV0PlRlc3QoKSB7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9zYWZlRGVsZXRlL0xhc3RSZXNvdXJjZVZhcmlhYmxlLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3Jpbmcvc2FmZURlbGV0ZS9MYXN0UmVzb3VyY2VWYXJpYWJsZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlmZWQxMDUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3Jpbmcvc2FmZURlbGV0ZS9MYXN0UmVzb3VyY2VWYXJpYWJsZS5qYXZhCkBAIC0wLDAgKzEsNiBAQAorY2xhc3MgQVJNIHsKKyAgdm9pZCBmKCkgeworICAgIHRyeSAoQXV0b0Nsb3NlYWJsZSA8Y2FyZXQ+ciA9IG51bGwpIHsKKyAgICB9CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3Jpbmcvc2FmZURlbGV0ZS9MYXN0UmVzb3VyY2VWYXJpYWJsZV9hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3NhZmVEZWxldGUvTGFzdFJlc291cmNlVmFyaWFibGVfYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOTllODNjCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3NhZmVEZWxldGUvTGFzdFJlc291cmNlVmFyaWFibGVfYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDYgQEAKK2NsYXNzIEFSTSB7CisgIHZvaWQgZigpIHsKKyAgICB0cnkgeworICAgIH0KKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9zYWZlRGVsZXRlL0xhc3RUeXBlUGFyYW0uamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9zYWZlRGVsZXRlL0xhc3RUeXBlUGFyYW0uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNmYwM2E0Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3NhZmVEZWxldGUvTGFzdFR5cGVQYXJhbS5qYXZhCkBAIC0wLDAgKzEsOCBAQAorcHVibGljIGNsYXNzIFRlc3Q8VDxjYXJldD5UPiB7fQorCitjbGFzcyBGb28geworICAgICAgICB2b2lkIHRlc3QoKSB7CisgICAgICAgICAgICAgICAgVGVzdDxTdHJpbmc+IHRlc3QgPSBuZXcgVGVzdDw+KCk7CisgICAgICAgICAgICAgICAgVGVzdDxTdHJpbmc+IHRlc3QyID0gbmV3IFRlc3Q8U3RyaW5nPigpOworICAgICAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3NhZmVEZWxldGUvTGFzdFR5cGVQYXJhbV9hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3NhZmVEZWxldGUvTGFzdFR5cGVQYXJhbV9hZnRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUyZTRkY2YKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3Jpbmcvc2FmZURlbGV0ZS9MYXN0VHlwZVBhcmFtX2FmdGVyLmphdmEKQEAgLTAsMCArMSw4IEBACitwdWJsaWMgY2xhc3MgVGVzdCB7fQorCitjbGFzcyBGb28geworICAgICAgICB2b2lkIHRlc3QoKSB7CisgICAgICAgICAgICAgICAgVGVzdCB0ZXN0ID0gbmV3IFRlc3QoKTsKKyAgICAgICAgICAgICAgICBUZXN0IHRlc3QyID0gbmV3IFRlc3QoKTsKKyAgICAgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9zYWZlRGVsZXRlL1N0cmlwT3ZlcnJpZGUuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9zYWZlRGVsZXRlL1N0cmlwT3ZlcnJpZGUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZTNkZDQ0Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3NhZmVEZWxldGUvU3RyaXBPdmVycmlkZS5qYXZhCkBAIC0wLDAgKzEsMTQgQEAKK2ludGVyZmFjZSBBbSB7CisgICAgU3RyaW5nIGdldEljPGNhcmV0Pm9uKCk7Cit9CisKK2NsYXNzIEFJSW0gaW1wbGVtZW50cyBBbSB7CisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIFN0cmluZyBnZXRJY29uKCkgeworICAgICAgICByZXR1cm4gbnVsbDsKKyAgICB9CisKKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisgICAgICAgIG5ldyBBSUltKCkuZ2V0SWNvbigpOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3Jpbmcvc2FmZURlbGV0ZS9TdHJpcE92ZXJyaWRlX2FmdGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3Jpbmcvc2FmZURlbGV0ZS9TdHJpcE92ZXJyaWRlX2FmdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGZkZjBhMQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9zYWZlRGVsZXRlL1N0cmlwT3ZlcnJpZGVfYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDEyIEBACitpbnRlcmZhY2UgQW0geworfQorCitjbGFzcyBBSUltIGltcGxlbWVudHMgQW0geworICAgIHByaXZhdGUgU3RyaW5nIGdldEljb24oKSB7CisgICAgICAgIHJldHVybiBudWxsOworICAgIH0KKworICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKyAgICAgICAgbmV3IEFJSW0oKS5nZXRJY29uKCk7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9zYWZlRGVsZXRlL1R5cGVQYXJhbUZyb21EaWFtb25kLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3Jpbmcvc2FmZURlbGV0ZS9UeXBlUGFyYW1Gcm9tRGlhbW9uZC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNiNTVjMjEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3Jpbmcvc2FmZURlbGV0ZS9UeXBlUGFyYW1Gcm9tRGlhbW9uZC5qYXZhCkBAIC0wLDAgKzEsOCBAQAorcHVibGljIGNsYXNzIFRlc3Q8PGNhcmV0PlQsIFU+IHt9CisKK2NsYXNzIEZvbyB7CisgICAgICAgIHZvaWQgdGVzdCgpIHsKKyAgICAgICAgICAgICAgICBUZXN0PFN0cmluZywgTG9uZz4gdGVzdCA9IG5ldyBUZXN0PD4oKTsKKyAgICAgICAgICAgICAgICBUZXN0PFN0cmluZywgTG9uZz4gdGVzdDIgPSBuZXcgVGVzdDxTdHJpbmcsIExvbmc+KCk7CisgICAgICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3Jpbmcvc2FmZURlbGV0ZS9UeXBlUGFyYW1Gcm9tRGlhbW9uZF9hZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3NhZmVEZWxldGUvVHlwZVBhcmFtRnJvbURpYW1vbmRfYWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMGIwNzI3Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3NhZmVEZWxldGUvVHlwZVBhcmFtRnJvbURpYW1vbmRfYWZ0ZXIuamF2YQpAQCAtMCwwICsxLDggQEAKK3B1YmxpYyBjbGFzcyBUZXN0PFU+IHt9CisKK2NsYXNzIEZvbyB7CisgICAgICAgIHZvaWQgdGVzdCgpIHsKKyAgICAgICAgICAgICAgICBUZXN0PExvbmc+IHRlc3QgPSBuZXcgVGVzdDw+KCk7CisgICAgICAgICAgICAgICAgVGVzdDxMb25nPiB0ZXN0MiA9IG5ldyBUZXN0PExvbmc+KCk7CisgICAgICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3Jpbmcvc2FmZURlbGV0ZS9lbnVtQ29uc3RydWN0b3JQYXJhbWV0ZXIvYWZ0ZXIvVXNlckZsYWdzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3Jpbmcvc2FmZURlbGV0ZS9lbnVtQ29uc3RydWN0b3JQYXJhbWV0ZXIvYWZ0ZXIvVXNlckZsYWdzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmUyOTZlMgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9zYWZlRGVsZXRlL2VudW1Db25zdHJ1Y3RvclBhcmFtZXRlci9hZnRlci9Vc2VyRmxhZ3MuamF2YQpAQCAtMCwwICsxLDEyIEBACitwdWJsaWMgZW51bSBVc2VyRmxhZ3MgeworICAgIFJvb3QoIkhhcyBzdXBlciBhZG1pbmlzdHJhdGl2ZSBwb3dlcnMiKSwKKyAgICBCbGFja2xpc3RlZCgiUHJvYmFibHkgYSBzcGFtbWVyIik7CisKKyAgICBwdWJsaWMgZmluYWwgU3RyaW5nIGRlc2NyaXB0aW9uOworICAgIHB1YmxpYyBmaW5hbCBpbnQgbWFzazsKKworICAgIFVzZXJGbGFncyhTdHJpbmcgZGVzY3JpcHRpb24pIHsKKyAgICAgICAgdGhpcy5kZXNjcmlwdGlvbiA9IGRlc2NyaXB0aW9uOworICAgICAgICB0aGlzLm1hc2sgPSAxIDw8IG9yZGluYWwoKTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3NhZmVEZWxldGUvZW51bUNvbnN0cnVjdG9yUGFyYW1ldGVyL2JlZm9yZS9Vc2VyRmxhZ3MuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9zYWZlRGVsZXRlL2VudW1Db25zdHJ1Y3RvclBhcmFtZXRlci9iZWZvcmUvVXNlckZsYWdzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTVlYjMxYwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9zYWZlRGVsZXRlL2VudW1Db25zdHJ1Y3RvclBhcmFtZXRlci9iZWZvcmUvVXNlckZsYWdzLmphdmEKQEAgLTAsMCArMSwxMiBAQAorcHVibGljIGVudW0gVXNlckZsYWdzIHsKKyAgICBSb290KCJIYXMgc3VwZXIgYWRtaW5pc3RyYXRpdmUgcG93ZXJzIiwgMCksCisgICAgQmxhY2tsaXN0ZWQoIlByb2JhYmx5IGEgc3BhbW1lciIsIDEpOworCisgICAgcHVibGljIGZpbmFsIFN0cmluZyBkZXNjcmlwdGlvbjsKKyAgICBwdWJsaWMgZmluYWwgaW50IG1hc2s7CisKKyAgICBVc2VyRmxhZ3MoU3RyaW5nIGRlc2NyaXB0aW9uLCBpbnQgPGNhcmV0PnBvc2l0aW9uKSB7CisgICAgICAgIHRoaXMuZGVzY3JpcHRpb24gPSBkZXNjcmlwdGlvbjsKKyAgICAgICAgdGhpcy5tYXNrID0gMSA8PCBvcmRpbmFsKCk7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9zYWZlRGVsZXRlL2V4dGVuZHNMaXN0L2FmdGVyL0EuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9zYWZlRGVsZXRlL2V4dGVuZHNMaXN0L2FmdGVyL0EuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYmNkNGMzCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3NhZmVEZWxldGUvZXh0ZW5kc0xpc3QvYWZ0ZXIvQS5qYXZhCkBAIC0wLDAgKzEgQEAKK2NsYXNzIEE8VEE+e30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3Jpbmcvc2FmZURlbGV0ZS9leHRlbmRzTGlzdC9hZnRlci9DLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3Jpbmcvc2FmZURlbGV0ZS9leHRlbmRzTGlzdC9hZnRlci9DLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGUzNDQxOQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9zYWZlRGVsZXRlL2V4dGVuZHNMaXN0L2FmdGVyL0MuamF2YQpAQCAtMCwwICsxIEBACitjbGFzcyBDPFRDPiBleHRlbmRzIEE8VEM+IHt9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3NhZmVEZWxldGUvZXh0ZW5kc0xpc3QvYmVmb3JlL0EuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9zYWZlRGVsZXRlL2V4dGVuZHNMaXN0L2JlZm9yZS9BLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWJjZDRjMwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9zYWZlRGVsZXRlL2V4dGVuZHNMaXN0L2JlZm9yZS9BLmphdmEKQEAgLTAsMCArMSBAQAorY2xhc3MgQTxUQT57fQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9zYWZlRGVsZXRlL2V4dGVuZHNMaXN0L2JlZm9yZS9CLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3Jpbmcvc2FmZURlbGV0ZS9leHRlbmRzTGlzdC9iZWZvcmUvQi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM4ZTg0NDcKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3Jpbmcvc2FmZURlbGV0ZS9leHRlbmRzTGlzdC9iZWZvcmUvQi5qYXZhCkBAIC0wLDAgKzEsNSBAQAorY2xhc3MgQjxjYXJldD48VEI+IGV4dGVuZHMgQTxUQj57CisgIHB1YmxpYyBCKCkgeworICAgIHN1cGVyKCk7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3Jpbmcvc2FmZURlbGV0ZS9leHRlbmRzTGlzdC9iZWZvcmUvQy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3NhZmVEZWxldGUvZXh0ZW5kc0xpc3QvYmVmb3JlL0MuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MGY4ZmFmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3NhZmVEZWxldGUvZXh0ZW5kc0xpc3QvYmVmb3JlL0MuamF2YQpAQCAtMCwwICsxIEBACitjbGFzcyBDPFRDPiBleHRlbmRzIEI8VEM+e30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3Jpbmcvc2FmZURlbGV0ZS9pbXBsaWNpdEN0ckNhbGwvYmVmb3JlL1N1Yi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3NhZmVEZWxldGUvaW1wbGljaXRDdHJDYWxsL2JlZm9yZS9TdWIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jODhhZjUwCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3NhZmVEZWxldGUvaW1wbGljaXRDdHJDYWxsL2JlZm9yZS9TdWIuamF2YQpAQCAtMCwwICsxLDQgQEAKKyAgICBjbGFzcyBTdWIgZXh0ZW5kcyBTdXBlciB7CisgICAgICAgIHB1YmxpYyBTdWIoKSB7CisgICAgICAgIH0KKyAgICB9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3Jpbmcvc2FmZURlbGV0ZS9pbXBsaWNpdEN0ckNhbGwvYmVmb3JlL1N1cGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3Jpbmcvc2FmZURlbGV0ZS9pbXBsaWNpdEN0ckNhbGwvYmVmb3JlL1N1cGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzZkYTcyMwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9zYWZlRGVsZXRlL2ltcGxpY2l0Q3RyQ2FsbC9iZWZvcmUvU3VwZXIuamF2YQpAQCAtMCwwICsxLDcgQEAKKyAgICBjbGFzcyBTdXBlciB7CisgICAgICAgIHB1YmxpYyA8Y2FyZXQ+U3VwZXIoKSB7CisgICAgICAgIH0gLy9TYWZlIERlbGV0ZSBzaG91bGQgbm90IGFsbG93IHRoaXMgdG8gYmUgZGVsZXRlZCB3aXRob3V0IGZpcnN0IGNoYW5naW5nIGNsYXNzIFN1YidzIGNvbnN0cnVjdG9ycyB0byB1c2UgU3VwZXIoU3RyaW5nKQorCisgICAgICAgIHB1YmxpYyBTdXBlcihTdHJpbmcgbmFtZSkgeworICAgICAgICB9CisgICAgfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3NhZmVEZWxldGUvaW1wbGljaXRDdHJDYWxsMi9iZWZvcmUvU3ViLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3Jpbmcvc2FmZURlbGV0ZS9pbXBsaWNpdEN0ckNhbGwyL2JlZm9yZS9TdWIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMTE1MzlhCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3NhZmVEZWxldGUvaW1wbGljaXRDdHJDYWxsMi9iZWZvcmUvU3ViLmphdmEKQEAgLTAsMCArMSwyIEBACisgICAgY2xhc3MgU3ViIGV4dGVuZHMgU3VwZXIgeworICAgIH0KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9zYWZlRGVsZXRlL2ltcGxpY2l0Q3RyQ2FsbDIvYmVmb3JlL1N1cGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3Jpbmcvc2FmZURlbGV0ZS9pbXBsaWNpdEN0ckNhbGwyL2JlZm9yZS9TdXBlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc2ZGE3MjMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3Jpbmcvc2FmZURlbGV0ZS9pbXBsaWNpdEN0ckNhbGwyL2JlZm9yZS9TdXBlci5qYXZhCkBAIC0wLDAgKzEsNyBAQAorICAgIGNsYXNzIFN1cGVyIHsKKyAgICAgICAgcHVibGljIDxjYXJldD5TdXBlcigpIHsKKyAgICAgICAgfSAvL1NhZmUgRGVsZXRlIHNob3VsZCBub3QgYWxsb3cgdGhpcyB0byBiZSBkZWxldGVkIHdpdGhvdXQgZmlyc3QgY2hhbmdpbmcgY2xhc3MgU3ViJ3MgY29uc3RydWN0b3JzIHRvIHVzZSBTdXBlcihTdHJpbmcpCisKKyAgICAgICAgcHVibGljIFN1cGVyKFN0cmluZyBuYW1lKSB7CisgICAgICAgIH0KKyAgICB9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3Jpbmcvc2FmZURlbGV0ZS9qYXZhZG9jUGFyYW1SZWYvYWZ0ZXIvU3VwZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9zYWZlRGVsZXRlL2phdmFkb2NQYXJhbVJlZi9hZnRlci9TdXBlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlkYjI5YmIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3Jpbmcvc2FmZURlbGV0ZS9qYXZhZG9jUGFyYW1SZWYvYWZ0ZXIvU3VwZXIuamF2YQpAQCAtMCwwICsxLDggQEAKK2NsYXNzIFN1cGVyIHsKKyAgdm9pZCBtMShTdHJpbmcgcDIpIHt9CisKKyAgICAvKioKKyAgICAgKiBAc2VlICNtMShTdHJpbmcpCisgICAgICovCisgICAgdm9pZCBtMigpIHt9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3Jpbmcvc2FmZURlbGV0ZS9qYXZhZG9jUGFyYW1SZWYvYmVmb3JlL1N1cGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3Jpbmcvc2FmZURlbGV0ZS9qYXZhZG9jUGFyYW1SZWYvYmVmb3JlL1N1cGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGVjNzQwZgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9zYWZlRGVsZXRlL2phdmFkb2NQYXJhbVJlZi9iZWZvcmUvU3VwZXIuamF2YQpAQCAtMCwwICsxLDggQEAKK2NsYXNzIFN1cGVyIHsKKyAgdm9pZCBtMShTdHJpbmcgcDxjYXJldD4xLCBTdHJpbmcgcDIpIHt9CisKKyAgICAvKioKKyAgICAgKiBAc2VlICNtMShTdHJpbmcsIFN0cmluZykKKyAgICAgKi8KKyAgICB2b2lkIG0yKCkge30KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9zYWZlRGVsZXRlL2xvY2FsVmFyaWFibGUvYWZ0ZXIvU3VwZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9zYWZlRGVsZXRlL2xvY2FsVmFyaWFibGUvYWZ0ZXIvU3VwZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMjcwZjViCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3NhZmVEZWxldGUvbG9jYWxWYXJpYWJsZS9hZnRlci9TdXBlci5qYXZhCkBAIC0wLDAgKzEsNSBAQAorY2xhc3MgU3VwZXIgeworICAgIHZvaWQgZm9vKCkgeworICAgIH0KKworfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3NhZmVEZWxldGUvbG9jYWxWYXJpYWJsZS9iZWZvcmUvU3VwZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9zYWZlRGVsZXRlL2xvY2FsVmFyaWFibGUvYmVmb3JlL1N1cGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjQyOTZlMgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9zYWZlRGVsZXRlL2xvY2FsVmFyaWFibGUvYmVmb3JlL1N1cGVyLmphdmEKQEAgLTAsMCArMSw4IEBACitjbGFzcyBTdXBlciB7CisgICAgdm9pZCBmb28oKSB7CisgICAgICAgIGludCB2YXI8Y2FyZXQ+TmFtZSA9IDA7CisgICAgICAgIHZhck5hbWUrKzsKKyAgICAgICAgdmFyTmFtZSA9IDEwOworICAgIH0KKworfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3NhZmVEZWxldGUvbG9jYWxWYXJpYWJsZVNpZGVFZmZlY3QvYWZ0ZXIvU3VwZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9zYWZlRGVsZXRlL2xvY2FsVmFyaWFibGVTaWRlRWZmZWN0L2FmdGVyL1N1cGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTEwNDE2OAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9zYWZlRGVsZXRlL2xvY2FsVmFyaWFibGVTaWRlRWZmZWN0L2FmdGVyL1N1cGVyLmphdmEKQEAgLTAsMCArMSw1IEBACitjbGFzcyBTdXBlciB7CisgICAgdm9pZCBmb28oKSB7CisgICAgICAgIH0KKworfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3NhZmVEZWxldGUvbG9jYWxWYXJpYWJsZVNpZGVFZmZlY3QvYmVmb3JlL1N1cGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3Jpbmcvc2FmZURlbGV0ZS9sb2NhbFZhcmlhYmxlU2lkZUVmZmVjdC9iZWZvcmUvU3VwZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNDdiMTQ0Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3NhZmVEZWxldGUvbG9jYWxWYXJpYWJsZVNpZGVFZmZlY3QvYmVmb3JlL1N1cGVyLmphdmEKQEAgLTAsMCArMSw5IEBACitjbGFzcyBTdXBlciB7CisgICAgdm9pZCBmb28oKSB7CisgICAgICAgIGludCB2YXI8Y2FyZXQ+TmFtZSA9IDA7CisgICAgICAgIHZhck5hbWUrKzsKKyAgICAgICAgdmFyTmFtZSA9IGJhcigpOworICAgIH0KKyAgICBpbnQgYmFyKCkge3JldHVybiAwO30KKworfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3NhZmVEZWxldGUvbWV0aG9kRGVlcEhpZXJhcmNoeS9hZnRlci9TdXBlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3NhZmVEZWxldGUvbWV0aG9kRGVlcEhpZXJhcmNoeS9hZnRlci9TdXBlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM0OTAyNGMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3Jpbmcvc2FmZURlbGV0ZS9tZXRob2REZWVwSGllcmFyY2h5L2FmdGVyL1N1cGVyLmphdmEKQEAgLTAsMCArMSw5IEBACitwdWJsaWMgY2xhc3MgU3VwZXIgeworCit9CisKK2NsYXNzIENoaWxkIGV4dGVuZHMgU3VwZXIgeworfQorCitjbGFzcyBDaGlsZENoaWxkIGV4dGVuZHMgQ2hpbGQgeworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9zYWZlRGVsZXRlL21ldGhvZERlZXBIaWVyYXJjaHkvYmVmb3JlL1N1cGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3Jpbmcvc2FmZURlbGV0ZS9tZXRob2REZWVwSGllcmFyY2h5L2JlZm9yZS9TdXBlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVlOGZhMDQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3Jpbmcvc2FmZURlbGV0ZS9tZXRob2REZWVwSGllcmFyY2h5L2JlZm9yZS9TdXBlci5qYXZhCkBAIC0wLDAgKzEsMTkgQEAKK3B1YmxpYyBjbGFzcyBTdXBlciB7CisgICAgdm9pZCBmPGNhcmV0Pm9vKCkgeworICAgIH0KKworfQorCitjbGFzcyBDaGlsZCBleHRlbmRzIFN1cGVyIHsKKyAgICB2b2lkIGZvbygpeworICAgICAgc3VwZXIuZm9vKCk7CisgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImRvIHNvbWUgc3RhZmYiKTsKKyAgICB9Cit9CisKK2NsYXNzIENoaWxkQ2hpbGQgZXh0ZW5kcyBDaGlsZCB7CisgICAgdm9pZCBmb28oKXsKKyAgICAgIHN1cGVyLmZvbygpOworICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJoZXJlIGRvIHNtdGggZWxzZSIpOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3Jpbmcvc2FmZURlbGV0ZS9tdWx0aXBsZUludGVyZmFjZXNJbXBsZW1lbnRhdGlvbi9hZnRlci9CYXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9zYWZlRGVsZXRlL211bHRpcGxlSW50ZXJmYWNlc0ltcGxlbWVudGF0aW9uL2FmdGVyL0Jhci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFlMjE4N2UKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3Jpbmcvc2FmZURlbGV0ZS9tdWx0aXBsZUludGVyZmFjZXNJbXBsZW1lbnRhdGlvbi9hZnRlci9CYXIuamF2YQpAQCAtMCwwICsxLDkgQEAKK3B1YmxpYyBjbGFzcyBCYXIgaW1wbGVtZW50cyBJRm9vLCBJQmFyIHsKKyAgICBwdWJsaWMgU3RyaW5nIGdldFRleHQoKSB7CisgICAgICAgIHJldHVybiAiaGVsbG8iOworICAgIH0KKworICAgIHB1YmxpYyBJQmFyIGdldElCYXIoKSB7CisgICAgICAgIHJldHVybiB0aGlzOworICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9zYWZlRGVsZXRlL211bHRpcGxlSW50ZXJmYWNlc0ltcGxlbWVudGF0aW9uL2FmdGVyL0lCYXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9zYWZlRGVsZXRlL211bHRpcGxlSW50ZXJmYWNlc0ltcGxlbWVudGF0aW9uL2FmdGVyL0lCYXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYWQ2NmU4Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3NhZmVEZWxldGUvbXVsdGlwbGVJbnRlcmZhY2VzSW1wbGVtZW50YXRpb24vYWZ0ZXIvSUJhci5qYXZhCkBAIC0wLDAgKzEsMyBAQAorcHVibGljIGludGVyZmFjZSBJQmFyIHsKKyAgICBTdHJpbmcgZ2V0VGV4dCgpOworfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3NhZmVEZWxldGUvbXVsdGlwbGVJbnRlcmZhY2VzSW1wbGVtZW50YXRpb24vYWZ0ZXIvSUZvby5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3NhZmVEZWxldGUvbXVsdGlwbGVJbnRlcmZhY2VzSW1wbGVtZW50YXRpb24vYWZ0ZXIvSUZvby5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIzM2JmZWQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3Jpbmcvc2FmZURlbGV0ZS9tdWx0aXBsZUludGVyZmFjZXNJbXBsZW1lbnRhdGlvbi9hZnRlci9JRm9vLmphdmEKQEAgLTAsMCArMSwzIEBACitwdWJsaWMgaW50ZXJmYWNlIElGb28geworICAgIElCYXIgZ2V0SUJhcigpOworfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3NhZmVEZWxldGUvbXVsdGlwbGVJbnRlcmZhY2VzSW1wbGVtZW50YXRpb24vYmVmb3JlL0Jhci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3NhZmVEZWxldGUvbXVsdGlwbGVJbnRlcmZhY2VzSW1wbGVtZW50YXRpb24vYmVmb3JlL0Jhci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFlMjE4N2UKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3Jpbmcvc2FmZURlbGV0ZS9tdWx0aXBsZUludGVyZmFjZXNJbXBsZW1lbnRhdGlvbi9iZWZvcmUvQmFyLmphdmEKQEAgLTAsMCArMSw5IEBACitwdWJsaWMgY2xhc3MgQmFyIGltcGxlbWVudHMgSUZvbywgSUJhciB7CisgICAgcHVibGljIFN0cmluZyBnZXRUZXh0KCkgeworICAgICAgICByZXR1cm4gImhlbGxvIjsKKyAgICB9CisKKyAgICBwdWJsaWMgSUJhciBnZXRJQmFyKCkgeworICAgICAgICByZXR1cm4gdGhpczsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3Jpbmcvc2FmZURlbGV0ZS9tdWx0aXBsZUludGVyZmFjZXNJbXBsZW1lbnRhdGlvbi9iZWZvcmUvSUJhci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3NhZmVEZWxldGUvbXVsdGlwbGVJbnRlcmZhY2VzSW1wbGVtZW50YXRpb24vYmVmb3JlL0lCYXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYWQ2NmU4Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3NhZmVEZWxldGUvbXVsdGlwbGVJbnRlcmZhY2VzSW1wbGVtZW50YXRpb24vYmVmb3JlL0lCYXIuamF2YQpAQCAtMCwwICsxLDMgQEAKK3B1YmxpYyBpbnRlcmZhY2UgSUJhciB7CisgICAgU3RyaW5nIGdldFRleHQoKTsKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9zYWZlRGVsZXRlL211bHRpcGxlSW50ZXJmYWNlc0ltcGxlbWVudGF0aW9uL2JlZm9yZS9JRm9vLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3Jpbmcvc2FmZURlbGV0ZS9tdWx0aXBsZUludGVyZmFjZXNJbXBsZW1lbnRhdGlvbi9iZWZvcmUvSUZvby5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRjMjM4OTYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3Jpbmcvc2FmZURlbGV0ZS9tdWx0aXBsZUludGVyZmFjZXNJbXBsZW1lbnRhdGlvbi9iZWZvcmUvSUZvby5qYXZhCkBAIC0wLDAgKzEsNCBAQAorcHVibGljIGludGVyZmFjZSBJRm9vIHsKKyAgICBTdHJpbmcgPGNhcmV0PmdldFRleHQoKTsKKyAgICBJQmFyIGdldElCYXIoKTsKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9zYWZlRGVsZXRlL211bHRpcGxlSW50ZXJmYWNlc0ltcGxlbWVudGF0aW9uVGhyb3VnaENvbW1vbkludGVyZmFjZS9hZnRlci9CYXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9zYWZlRGVsZXRlL211bHRpcGxlSW50ZXJmYWNlc0ltcGxlbWVudGF0aW9uVGhyb3VnaENvbW1vbkludGVyZmFjZS9hZnRlci9CYXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40Y2U2OWU2Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3NhZmVEZWxldGUvbXVsdGlwbGVJbnRlcmZhY2VzSW1wbGVtZW50YXRpb25UaHJvdWdoQ29tbW9uSW50ZXJmYWNlL2FmdGVyL0Jhci5qYXZhCkBAIC0wLDAgKzEsMiBAQAorcHVibGljIGludGVyZmFjZSBCYXIgZXh0ZW5kcyBJRm9vLCBJQmFyIHsKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9zYWZlRGVsZXRlL211bHRpcGxlSW50ZXJmYWNlc0ltcGxlbWVudGF0aW9uVGhyb3VnaENvbW1vbkludGVyZmFjZS9hZnRlci9CYXJJbXBsLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3Jpbmcvc2FmZURlbGV0ZS9tdWx0aXBsZUludGVyZmFjZXNJbXBsZW1lbnRhdGlvblRocm91Z2hDb21tb25JbnRlcmZhY2UvYWZ0ZXIvQmFySW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA0ZDZlMDQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3Jpbmcvc2FmZURlbGV0ZS9tdWx0aXBsZUludGVyZmFjZXNJbXBsZW1lbnRhdGlvblRocm91Z2hDb21tb25JbnRlcmZhY2UvYWZ0ZXIvQmFySW1wbC5qYXZhCkBAIC0wLDAgKzEsOSBAQAorcHVibGljIGNsYXNzIEJhckltcGwgaW1wbGVtZW50cyBCYXIgeworICAgIHB1YmxpYyBTdHJpbmcgZ2V0VGV4dCgpIHsKKyAgICAgICAgcmV0dXJuICJoZWxsbyI7CisgICAgfQorCisgICAgcHVibGljIElCYXIgZ2V0SUJhcigpIHsKKyAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3NhZmVEZWxldGUvbXVsdGlwbGVJbnRlcmZhY2VzSW1wbGVtZW50YXRpb25UaHJvdWdoQ29tbW9uSW50ZXJmYWNlL2FmdGVyL0lCYXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9zYWZlRGVsZXRlL211bHRpcGxlSW50ZXJmYWNlc0ltcGxlbWVudGF0aW9uVGhyb3VnaENvbW1vbkludGVyZmFjZS9hZnRlci9JQmFyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWFkNjZlOAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9zYWZlRGVsZXRlL211bHRpcGxlSW50ZXJmYWNlc0ltcGxlbWVudGF0aW9uVGhyb3VnaENvbW1vbkludGVyZmFjZS9hZnRlci9JQmFyLmphdmEKQEAgLTAsMCArMSwzIEBACitwdWJsaWMgaW50ZXJmYWNlIElCYXIgeworICAgIFN0cmluZyBnZXRUZXh0KCk7Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3Jpbmcvc2FmZURlbGV0ZS9tdWx0aXBsZUludGVyZmFjZXNJbXBsZW1lbnRhdGlvblRocm91Z2hDb21tb25JbnRlcmZhY2UvYWZ0ZXIvSUZvby5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3NhZmVEZWxldGUvbXVsdGlwbGVJbnRlcmZhY2VzSW1wbGVtZW50YXRpb25UaHJvdWdoQ29tbW9uSW50ZXJmYWNlL2FmdGVyL0lGb28uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMzNiZmVkCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3NhZmVEZWxldGUvbXVsdGlwbGVJbnRlcmZhY2VzSW1wbGVtZW50YXRpb25UaHJvdWdoQ29tbW9uSW50ZXJmYWNlL2FmdGVyL0lGb28uamF2YQpAQCAtMCwwICsxLDMgQEAKK3B1YmxpYyBpbnRlcmZhY2UgSUZvbyB7CisgICAgSUJhciBnZXRJQmFyKCk7Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3Jpbmcvc2FmZURlbGV0ZS9tdWx0aXBsZUludGVyZmFjZXNJbXBsZW1lbnRhdGlvblRocm91Z2hDb21tb25JbnRlcmZhY2UvYmVmb3JlL0Jhci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3NhZmVEZWxldGUvbXVsdGlwbGVJbnRlcmZhY2VzSW1wbGVtZW50YXRpb25UaHJvdWdoQ29tbW9uSW50ZXJmYWNlL2JlZm9yZS9CYXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40Y2U2OWU2Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3NhZmVEZWxldGUvbXVsdGlwbGVJbnRlcmZhY2VzSW1wbGVtZW50YXRpb25UaHJvdWdoQ29tbW9uSW50ZXJmYWNlL2JlZm9yZS9CYXIuamF2YQpAQCAtMCwwICsxLDIgQEAKK3B1YmxpYyBpbnRlcmZhY2UgQmFyIGV4dGVuZHMgSUZvbywgSUJhciB7Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3Jpbmcvc2FmZURlbGV0ZS9tdWx0aXBsZUludGVyZmFjZXNJbXBsZW1lbnRhdGlvblRocm91Z2hDb21tb25JbnRlcmZhY2UvYmVmb3JlL0JhckltcGwuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9zYWZlRGVsZXRlL211bHRpcGxlSW50ZXJmYWNlc0ltcGxlbWVudGF0aW9uVGhyb3VnaENvbW1vbkludGVyZmFjZS9iZWZvcmUvQmFySW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA0ZDZlMDQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3Jpbmcvc2FmZURlbGV0ZS9tdWx0aXBsZUludGVyZmFjZXNJbXBsZW1lbnRhdGlvblRocm91Z2hDb21tb25JbnRlcmZhY2UvYmVmb3JlL0JhckltcGwuamF2YQpAQCAtMCwwICsxLDkgQEAKK3B1YmxpYyBjbGFzcyBCYXJJbXBsIGltcGxlbWVudHMgQmFyIHsKKyAgICBwdWJsaWMgU3RyaW5nIGdldFRleHQoKSB7CisgICAgICAgIHJldHVybiAiaGVsbG8iOworICAgIH0KKworICAgIHB1YmxpYyBJQmFyIGdldElCYXIoKSB7CisgICAgICAgIHJldHVybiB0aGlzOworICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9zYWZlRGVsZXRlL211bHRpcGxlSW50ZXJmYWNlc0ltcGxlbWVudGF0aW9uVGhyb3VnaENvbW1vbkludGVyZmFjZS9iZWZvcmUvSUJhci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3NhZmVEZWxldGUvbXVsdGlwbGVJbnRlcmZhY2VzSW1wbGVtZW50YXRpb25UaHJvdWdoQ29tbW9uSW50ZXJmYWNlL2JlZm9yZS9JQmFyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWFkNjZlOAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9zYWZlRGVsZXRlL211bHRpcGxlSW50ZXJmYWNlc0ltcGxlbWVudGF0aW9uVGhyb3VnaENvbW1vbkludGVyZmFjZS9iZWZvcmUvSUJhci5qYXZhCkBAIC0wLDAgKzEsMyBAQAorcHVibGljIGludGVyZmFjZSBJQmFyIHsKKyAgICBTdHJpbmcgZ2V0VGV4dCgpOworfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3NhZmVEZWxldGUvbXVsdGlwbGVJbnRlcmZhY2VzSW1wbGVtZW50YXRpb25UaHJvdWdoQ29tbW9uSW50ZXJmYWNlL2JlZm9yZS9JRm9vLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3Jpbmcvc2FmZURlbGV0ZS9tdWx0aXBsZUludGVyZmFjZXNJbXBsZW1lbnRhdGlvblRocm91Z2hDb21tb25JbnRlcmZhY2UvYmVmb3JlL0lGb28uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YzIzODk2Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3NhZmVEZWxldGUvbXVsdGlwbGVJbnRlcmZhY2VzSW1wbGVtZW50YXRpb25UaHJvdWdoQ29tbW9uSW50ZXJmYWNlL2JlZm9yZS9JRm9vLmphdmEKQEAgLTAsMCArMSw0IEBACitwdWJsaWMgaW50ZXJmYWNlIElGb28geworICAgIFN0cmluZyA8Y2FyZXQ+Z2V0VGV4dCgpOworICAgIElCYXIgZ2V0SUJhcigpOworfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3NhZmVEZWxldGUvcGFyYW1ldGVySW5IaWVyYXJjaHkvYWZ0ZXIvQzEuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9zYWZlRGVsZXRlL3BhcmFtZXRlckluSGllcmFyY2h5L2FmdGVyL0MxLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTZiZjBjOAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9zYWZlRGVsZXRlL3BhcmFtZXRlckluSGllcmFyY2h5L2FmdGVyL0MxLmphdmEKQEAgLTAsMCArMSw1IEBACitwdWJsaWMgY2xhc3MgQzEgaW1wbGVtZW50cyBJIHsKKyAgcHVibGljIHZvaWQgZihpbnQgYTEpIHsKKworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3NhZmVEZWxldGUvcGFyYW1ldGVySW5IaWVyYXJjaHkvYWZ0ZXIvSS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3NhZmVEZWxldGUvcGFyYW1ldGVySW5IaWVyYXJjaHkvYWZ0ZXIvSS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIwMjk2ZDkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3Jpbmcvc2FmZURlbGV0ZS9wYXJhbWV0ZXJJbkhpZXJhcmNoeS9hZnRlci9JLmphdmEKQEAgLTAsMCArMSwzIEBACitwdWJsaWMgaW50ZXJmYWNlIEkgeworICB2b2lkIGYoaW50IGExKTsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3Jpbmcvc2FmZURlbGV0ZS9wYXJhbWV0ZXJJbkhpZXJhcmNoeS9hZnRlci9TdXBlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3NhZmVEZWxldGUvcGFyYW1ldGVySW5IaWVyYXJjaHkvYWZ0ZXIvU3VwZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MDk5NmI5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3NhZmVEZWxldGUvcGFyYW1ldGVySW5IaWVyYXJjaHkvYWZ0ZXIvU3VwZXIuamF2YQpAQCAtMCwwICsxLDUgQEAKK3B1YmxpYyBjbGFzcyBDMiBleHRlbmRzIEMxIHsKKyAgcHVibGljIHZvaWQgZihpbnQgYTEpIHsKKyAgICBzdXBlci5mKGExKTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9zYWZlRGVsZXRlL3BhcmFtZXRlckluSGllcmFyY2h5L2JlZm9yZS9DMS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3NhZmVEZWxldGUvcGFyYW1ldGVySW5IaWVyYXJjaHkvYmVmb3JlL0MxLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTIwM2Y5OQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9zYWZlRGVsZXRlL3BhcmFtZXRlckluSGllcmFyY2h5L2JlZm9yZS9DMS5qYXZhCkBAIC0wLDAgKzEsNSBAQAorcHVibGljIGNsYXNzIEMxIGltcGxlbWVudHMgSSB7CisgIHB1YmxpYyB2b2lkIGYoaW50IGExLCBpbnQgYTIpIHsKKworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3NhZmVEZWxldGUvcGFyYW1ldGVySW5IaWVyYXJjaHkvYmVmb3JlL0kuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9zYWZlRGVsZXRlL3BhcmFtZXRlckluSGllcmFyY2h5L2JlZm9yZS9JLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDdlNDUwNzUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3Jpbmcvc2FmZURlbGV0ZS9wYXJhbWV0ZXJJbkhpZXJhcmNoeS9iZWZvcmUvSS5qYXZhCkBAIC0wLDAgKzEsMyBAQAorcHVibGljIGludGVyZmFjZSBJIHsKKyAgdm9pZCBmKGludCBhMSwgaW50IGEyKTsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3Jpbmcvc2FmZURlbGV0ZS9wYXJhbWV0ZXJJbkhpZXJhcmNoeS9iZWZvcmUvU3VwZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9zYWZlRGVsZXRlL3BhcmFtZXRlckluSGllcmFyY2h5L2JlZm9yZS9TdXBlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNkYTAyYjQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3Jpbmcvc2FmZURlbGV0ZS9wYXJhbWV0ZXJJbkhpZXJhcmNoeS9iZWZvcmUvU3VwZXIuamF2YQpAQCAtMCwwICsxLDUgQEAKK3B1YmxpYyBjbGFzcyBDMiBleHRlbmRzIEMxIHsKKyAgcHVibGljIHZvaWQgZihpbnQgYTEsIGludCBhPGNhcmV0PjIpIHsKKyAgICBzdXBlci5mKGExLCBhMik7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3Jpbmcvc2FmZURlbGV0ZS9yZW1vdmVPdmVycmlkZXJzSW5zcGl0ZU9mVW5zYWZlVXNhZ2VzL2FmdGVyL0EuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9zYWZlRGVsZXRlL3JlbW92ZU92ZXJyaWRlcnNJbnNwaXRlT2ZVbnNhZmVVc2FnZXMvYWZ0ZXIvQS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM3NDA0NTQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3Jpbmcvc2FmZURlbGV0ZS9yZW1vdmVPdmVycmlkZXJzSW5zcGl0ZU9mVW5zYWZlVXNhZ2VzL2FmdGVyL0EuamF2YQpAQCAtMCwwICsxLDkgQEAKK3B1YmxpYyBjbGFzcyBBIHsKKyAgdm9pZCBmb28oKSB7CisgICAgYmFyKCk7CisgIH0KKworfQorCitjbGFzcyBCIGV4dGVuZHMgQSB7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3NhZmVEZWxldGUvcmVtb3ZlT3ZlcnJpZGVyc0luc3BpdGVPZlVuc2FmZVVzYWdlcy9iZWZvcmUvQS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3NhZmVEZWxldGUvcmVtb3ZlT3ZlcnJpZGVyc0luc3BpdGVPZlVuc2FmZVVzYWdlcy9iZWZvcmUvQS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZiMmE2YzEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3Jpbmcvc2FmZURlbGV0ZS9yZW1vdmVPdmVycmlkZXJzSW5zcGl0ZU9mVW5zYWZlVXNhZ2VzL2JlZm9yZS9BLmphdmEKQEAgLTAsMCArMSwxMyBAQAorcHVibGljIGNsYXNzIEEgeworICB2b2lkIGZvbygpIHsKKyAgICBiYXIoKTsKKyAgfQorCisgIHZvaWQgYjxjYXJldD5hcigpIHt9Cit9CisKK2NsYXNzIEIgZXh0ZW5kcyBBIHsKKyAgdm9pZCBiYXIoKXsKKyAgICBzdXBlci5iYXIoKTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9zYWZlRGVsZXRlL3NhZmVEZWxldGVTdGF0aWNJbXBvcnRzL2FmdGVyL0EuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9zYWZlRGVsZXRlL3NhZmVEZWxldGVTdGF0aWNJbXBvcnRzL2FmdGVyL0EuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43M2UyNzBkCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3NhZmVEZWxldGUvc2FmZURlbGV0ZVN0YXRpY0ltcG9ydHMvYWZ0ZXIvQS5qYXZhCkBAIC0wLDAgKzEsMyBAQAorcHVibGljIGNsYXNzIEEgeworfQorCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3Jpbmcvc2FmZURlbGV0ZS9zYWZlRGVsZXRlU3RhdGljSW1wb3J0cy9hZnRlci9CLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3Jpbmcvc2FmZURlbGV0ZS9zYWZlRGVsZXRlU3RhdGljSW1wb3J0cy9hZnRlci9CLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDQ0YmVmNQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9zYWZlRGVsZXRlL3NhZmVEZWxldGVTdGF0aWNJbXBvcnRzL2FmdGVyL0IuamF2YQpAQCAtMCwwICsxLDMgQEAKK2NsYXNzIEIgeworCit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3NhZmVEZWxldGUvc2FmZURlbGV0ZVN0YXRpY0ltcG9ydHMvYmVmb3JlL0EuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9zYWZlRGVsZXRlL3NhZmVEZWxldGVTdGF0aWNJbXBvcnRzL2JlZm9yZS9BLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzNmMzQ0NQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9zYWZlRGVsZXRlL3NhZmVEZWxldGVTdGF0aWNJbXBvcnRzL2JlZm9yZS9BLmphdmEKQEAgLTAsMCArMSw0IEBACitwdWJsaWMgY2xhc3MgQSB7CisgIHN0YXRpYyB2b2lkIGI8Y2FyZXQ+YXIoKSB7fQorfQorCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3Jpbmcvc2FmZURlbGV0ZS9zYWZlRGVsZXRlU3RhdGljSW1wb3J0cy9iZWZvcmUvQi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3NhZmVEZWxldGUvc2FmZURlbGV0ZVN0YXRpY0ltcG9ydHMvYmVmb3JlL0IuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YmE5MGYxCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3NhZmVEZWxldGUvc2FmZURlbGV0ZVN0YXRpY0ltcG9ydHMvYmVmb3JlL0IuamF2YQpAQCAtMCwwICsxLDQgQEAKK2ltcG9ydCBzdGF0aWMgQS5iYXI7CitjbGFzcyBCIHsKKworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9zYWZlRGVsZXRlL3RvcFBhcmFtZXRlckluSGllcmFyY2h5L2FmdGVyL0MxLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3Jpbmcvc2FmZURlbGV0ZS90b3BQYXJhbWV0ZXJJbkhpZXJhcmNoeS9hZnRlci9DMS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2YmYwYzgKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3Jpbmcvc2FmZURlbGV0ZS90b3BQYXJhbWV0ZXJJbkhpZXJhcmNoeS9hZnRlci9DMS5qYXZhCkBAIC0wLDAgKzEsNSBAQAorcHVibGljIGNsYXNzIEMxIGltcGxlbWVudHMgSSB7CisgIHB1YmxpYyB2b2lkIGYoaW50IGExKSB7CisKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9zYWZlRGVsZXRlL3RvcFBhcmFtZXRlckluSGllcmFyY2h5L2FmdGVyL0kuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9zYWZlRGVsZXRlL3RvcFBhcmFtZXRlckluSGllcmFyY2h5L2FmdGVyL0kuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMDI5NmQ5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3NhZmVEZWxldGUvdG9wUGFyYW1ldGVySW5IaWVyYXJjaHkvYWZ0ZXIvSS5qYXZhCkBAIC0wLDAgKzEsMyBAQAorcHVibGljIGludGVyZmFjZSBJIHsKKyAgdm9pZCBmKGludCBhMSk7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3NhZmVEZWxldGUvdG9wUGFyYW1ldGVySW5IaWVyYXJjaHkvYWZ0ZXIvU3VwZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9zYWZlRGVsZXRlL3RvcFBhcmFtZXRlckluSGllcmFyY2h5L2FmdGVyL1N1cGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODA5OTZiOQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9zYWZlRGVsZXRlL3RvcFBhcmFtZXRlckluSGllcmFyY2h5L2FmdGVyL1N1cGVyLmphdmEKQEAgLTAsMCArMSw1IEBACitwdWJsaWMgY2xhc3MgQzIgZXh0ZW5kcyBDMSB7CisgIHB1YmxpYyB2b2lkIGYoaW50IGExKSB7CisgICAgc3VwZXIuZihhMSk7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3Jpbmcvc2FmZURlbGV0ZS90b3BQYXJhbWV0ZXJJbkhpZXJhcmNoeS9iZWZvcmUvQzEuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9zYWZlRGVsZXRlL3RvcFBhcmFtZXRlckluSGllcmFyY2h5L2JlZm9yZS9DMS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUyMDNmOTkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3Jpbmcvc2FmZURlbGV0ZS90b3BQYXJhbWV0ZXJJbkhpZXJhcmNoeS9iZWZvcmUvQzEuamF2YQpAQCAtMCwwICsxLDUgQEAKK3B1YmxpYyBjbGFzcyBDMSBpbXBsZW1lbnRzIEkgeworICBwdWJsaWMgdm9pZCBmKGludCBhMSwgaW50IGEyKSB7CisKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9zYWZlRGVsZXRlL3RvcFBhcmFtZXRlckluSGllcmFyY2h5L2JlZm9yZS9JLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3Jpbmcvc2FmZURlbGV0ZS90b3BQYXJhbWV0ZXJJbkhpZXJhcmNoeS9iZWZvcmUvSS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBmNzViMTcKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3Jpbmcvc2FmZURlbGV0ZS90b3BQYXJhbWV0ZXJJbkhpZXJhcmNoeS9iZWZvcmUvSS5qYXZhCkBAIC0wLDAgKzEsMyBAQAorcHVibGljIGludGVyZmFjZSBJIHsKKyAgdm9pZCBmKGludCBhMSwgaW50IGE8Y2FyZXQ+Mik7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3NhZmVEZWxldGUvdG9wUGFyYW1ldGVySW5IaWVyYXJjaHkvYmVmb3JlL1N1cGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3Jpbmcvc2FmZURlbGV0ZS90b3BQYXJhbWV0ZXJJbkhpZXJhcmNoeS9iZWZvcmUvU3VwZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OTc0ZjY0Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3NhZmVEZWxldGUvdG9wUGFyYW1ldGVySW5IaWVyYXJjaHkvYmVmb3JlL1N1cGVyLmphdmEKQEAgLTAsMCArMSw1IEBACitwdWJsaWMgY2xhc3MgQzIgZXh0ZW5kcyBDMSB7CisgIHB1YmxpYyB2b2lkIGYoaW50IGExLCBpbnQgYTIpIHsKKyAgICBzdXBlci5mKGExLCBhMik7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3Jpbmcvc3VnZ2VzdGVkVHlwZXMvQXNzaWdubWVudFdpdGhDb25jYXRlbmF0aW9uLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3Jpbmcvc3VnZ2VzdGVkVHlwZXMvQXNzaWdubWVudFdpdGhDb25jYXRlbmF0aW9uLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGE2MWNlNAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9zdWdnZXN0ZWRUeXBlcy9Bc3NpZ25tZW50V2l0aENvbmNhdGVuYXRpb24uamF2YQpAQCAtMCwwICsxLDYgQEAKK2NsYXNzIFRlc3QgeworICB2b2lkIGZvbygpIHsKKyAgICBTdHJpbmcgcyA9ICIiOworICAgIDxzZWxlY3Rpb24+cys9ImFicmFjYWRhYnJhIjs8L3NlbGVjdGlvbj4KKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9zdWdnZXN0ZWRUeXBlcy9Bc3NpZ25tZW50V2l0aG91dENvbmNhdGVuYXRpb24uamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9zdWdnZXN0ZWRUeXBlcy9Bc3NpZ25tZW50V2l0aG91dENvbmNhdGVuYXRpb24uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNzY3NWZiCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3N1Z2dlc3RlZFR5cGVzL0Fzc2lnbm1lbnRXaXRob3V0Q29uY2F0ZW5hdGlvbi5qYXZhCkBAIC0wLDAgKzEsNyBAQAorY2xhc3MgVGVzdCB7CisgIHZvaWQgZm9vKCkgeworICAgIFN0cmluZyBzID0gIiI7CisgICAgPHNlbGVjdGlvbj5TeXN0ZW0ub3V0LnByaW50bG4ocyk7CisgICAgcz0iYWJyYWNhZGFicmEiOzwvc2VsZWN0aW9uPgorICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3N1Z2dlc3RlZFR5cGVzL0Nhc3RJbnNpZGUuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9zdWdnZXN0ZWRUeXBlcy9DYXN0SW5zaWRlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTY3ZmUzYwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9zdWdnZXN0ZWRUeXBlcy9DYXN0SW5zaWRlLmphdmEKQEAgLTAsMCArMSw3IEBACitjbGFzcyBUZXN0IHsKKyAgdm9pZCBmb28oT2JqZWN0IG8pIHsKKyAgICA8c2VsZWN0aW9uPigoQSlvKS5kb1NtdGgoKTs8L3NlbGVjdGlvbj4KKyAgfQorfQorCitjbGFzcyBBIHt2b2lkIGRvU210aCgpe319ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3N1Z2dlc3RlZFR5cGVzL0Nhc3ROb0Nhc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9zdWdnZXN0ZWRUeXBlcy9DYXN0Tm9DYXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2UwZmMwZQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9zdWdnZXN0ZWRUeXBlcy9DYXN0Tm9DYXN0LmphdmEKQEAgLTAsMCArMSwxNCBAQAorY2xhc3MgVGVzdCB7CisgIHZvaWQgZm9vKE9iamVjdCBvKSB7CisgICAgPHNlbGVjdGlvbj4KKyAgICBpZiAodHJ1ZSkgeworICAgICAgKChBMSlvKS5kb1NtdGgoKTsKKyAgICB9IGVsc2UgeworICAgICAgby50b1N0cmluZygpOworICAgIH0KKyAgICA8L3NlbGVjdGlvbj4KKyAgfQorfQorCitjbGFzcyBBIHt2b2lkIGRvU210aCgpe319CitjbGFzcyBBMSBleHRlbmRzIEEge30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3Jpbmcvc3VnZ2VzdGVkVHlwZXMvTHRMdEJ5dGUuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9zdWdnZXN0ZWRUeXBlcy9MdEx0Qnl0ZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkwM2E3NzQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3Jpbmcvc3VnZ2VzdGVkVHlwZXMvTHRMdEJ5dGUuamF2YQpAQCAtMCwwICsxLDYgQEAKK2NsYXNzIFRlc3QgeworICB2b2lkIGZvbygpIHsKKyAgICBieXRlIGIgPSAwOworICAgIDxzZWxlY3Rpb24+aW50IGkgPSBiIDw8IDE7PC9zZWxlY3Rpb24+CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3Jpbmcvc3VnZ2VzdGVkVHlwZXMvTHRMdEludC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3N1Z2dlc3RlZFR5cGVzL0x0THRJbnQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNTc1NDk1Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3N1Z2dlc3RlZFR5cGVzL0x0THRJbnQuamF2YQpAQCAtMCwwICsxLDYgQEAKK2NsYXNzIFRlc3QgeworICB2b2lkIGZvbygpIHsKKyAgICBpbnQgYiA9IDA7CisgICAgPHNlbGVjdGlvbj5pbnQgaSA9IGIgPDwgMTs8L3NlbGVjdGlvbj4KKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9zdWdnZXN0ZWRUeXBlcy9NdWx0aXBsZUNhc3RzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3Jpbmcvc3VnZ2VzdGVkVHlwZXMvTXVsdGlwbGVDYXN0cy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkxYWViOGEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3Jpbmcvc3VnZ2VzdGVkVHlwZXMvTXVsdGlwbGVDYXN0cy5qYXZhCkBAIC0wLDAgKzEsMTUgQEAKK2NsYXNzIFRlc3QgeworICB2b2lkIGZvbyhPYmplY3QgbykgeworICAgIDxzZWxlY3Rpb24+CisgICAgaWYgKHRydWUpIHsKKyAgICAgICgoQTEpbykuZG9TbXRoKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICgoQTIpbykuZG9TbXRoKCk7CisgICAgfQorICAgIDwvc2VsZWN0aW9uPgorICB9Cit9CisKK2NsYXNzIEEge3ZvaWQgZG9TbXRoKCl7fX0KK2NsYXNzIEExIGV4dGVuZHMgQSB7fQorY2xhc3MgQTIgZXh0ZW5kcyBBIHt9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3N1Z2dlc3RlZFR5cGVzL05vQ2FzdFdoZW5XcmFwcGVkLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3Jpbmcvc3VnZ2VzdGVkVHlwZXMvTm9DYXN0V2hlbldyYXBwZWQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YmQ4MTg1NgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9zdWdnZXN0ZWRUeXBlcy9Ob0Nhc3RXaGVuV3JhcHBlZC5qYXZhCkBAIC0wLDAgKzEsMTEgQEAKK2NsYXNzIFRlc3QgeworICB2b2lkIGZvbyhPYmplY3QgbykgeworICAgIDxzZWxlY3Rpb24+CisgICAgaWYgKG8gaW5zdGFuY2VvZiBBMSkgeworICAgICAgKChBMSlvKS5kb1NtdGgoKTsKKyAgICB9CisgICAgPC9zZWxlY3Rpb24+CisgIH0KK30KKworY2xhc3MgQTEge30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3Jpbmcvc3VnZ2VzdGVkVHlwZXMvUG9zdGZpeEV4cHJVbnVzZWRBZnRlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3N1Z2dlc3RlZFR5cGVzL1Bvc3RmaXhFeHByVW51c2VkQWZ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NmY0ZmJmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3N1Z2dlc3RlZFR5cGVzL1Bvc3RmaXhFeHByVW51c2VkQWZ0ZXIuamF2YQpAQCAtMCwwICsxLDIxIEBACisvKgorICogQ29weXJpZ2h0IDIwMDAtMjAxMCBKZXRCcmFpbnMgcy5yLm8uCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworY2xhc3MgVGVzdCB7CisgIHZvaWQgZm9vKCkgeworICAgIGJ5dGUgYiA9IDA7CisgICAgPHNlbGVjdGlvbj5iKys7PC9zZWxlY3Rpb24+CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3Jpbmcvc3VnZ2VzdGVkVHlwZXMvUG9zdGZpeEV4cHJVc2VkQXNPdXRwdXQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy9zdWdnZXN0ZWRUeXBlcy9Qb3N0Zml4RXhwclVzZWRBc091dHB1dC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQwMWI3NmQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3Jpbmcvc3VnZ2VzdGVkVHlwZXMvUG9zdGZpeEV4cHJVc2VkQXNPdXRwdXQuamF2YQpAQCAtMCwwICsxLDcgQEAKK2NsYXNzIFRlc3QgeworICB2b2lkIGZvbygpIHsKKyAgICBieXRlIGIgPSAwOworICAgIDxzZWxlY3Rpb24+YisrOzwvc2VsZWN0aW9uPgorICAgIGItLTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90dXJuUmVmc1RvU3VwZXIvSURFQTY1MDUvYWZ0ZXIvVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R1cm5SZWZzVG9TdXBlci9JREVBNjUwNS9hZnRlci9UZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGM4YzRmZgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90dXJuUmVmc1RvU3VwZXIvSURFQTY1MDUvYWZ0ZXIvVGVzdC5qYXZhCkBAIC0wLDAgKzEsMTMgQEAKK2ludGVyZmFjZSBJQSB7Cit9CisKK2ludGVyZmFjZSBJQiB7Cit9CisKKworY2xhc3MgSW1wbCBpbXBsZW1lbnRzIElBLCBJQiB7CisgICAgcHVibGljIHN0YXRpYyBJQSBjcmVhdGVJbnN0YW5jZSgpIHsKKyAgICAgICAgZmluYWwgSW1wbCBpbnN0YW5jZSA9IG5ldyBJbXBsKCk7CisgICAgICAgIHJldHVybiBpbnN0YW5jZTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R1cm5SZWZzVG9TdXBlci9JREVBNjUwNS9iZWZvcmUvVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R1cm5SZWZzVG9TdXBlci9JREVBNjUwNS9iZWZvcmUvVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBjOGM0ZmYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHVyblJlZnNUb1N1cGVyL0lERUE2NTA1L2JlZm9yZS9UZXN0LmphdmEKQEAgLTAsMCArMSwxMyBAQAoraW50ZXJmYWNlIElBIHsKK30KKworaW50ZXJmYWNlIElCIHsKK30KKworCitjbGFzcyBJbXBsIGltcGxlbWVudHMgSUEsIElCIHsKKyAgICBwdWJsaWMgc3RhdGljIElBIGNyZWF0ZUluc3RhbmNlKCkgeworICAgICAgICBmaW5hbCBJbXBsIGluc3RhbmNlID0gbmV3IEltcGwoKTsKKyAgICAgICAgcmV0dXJuIGluc3RhbmNlOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHVyblJlZnNUb1N1cGVyL0lERUFERVYyMzgwNy9hZnRlci9BLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHVyblJlZnNUb1N1cGVyL0lERUFERVYyMzgwNy9hZnRlci9BLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWI0YzM4YQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90dXJuUmVmc1RvU3VwZXIvSURFQURFVjIzODA3L2FmdGVyL0EuamF2YQpAQCAtMCwwICsxLDMgQEAKK2ludGVyZmFjZSBBPFQ+IHsKKyAgVCBnZXRUKCk7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R1cm5SZWZzVG9TdXBlci9JREVBREVWMjM4MDcvYWZ0ZXIvQi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R1cm5SZWZzVG9TdXBlci9JREVBREVWMjM4MDcvYWZ0ZXIvQi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxM2Y5MzAKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHVyblJlZnNUb1N1cGVyL0lERUFERVYyMzgwNy9hZnRlci9CLmphdmEKQEAgLTAsMCArMSw5IEBACitpbXBvcnQgamF2YS51dGlsLio7CitjbGFzcyBCPFY+IGltcGxlbWVudHMgQTxWPiB7CisgIHB1YmxpYyBWIGdldFQoKXtyZXR1cm4gbnVsbDt9CisgIHZvaWQgZm9vKExpc3Q8QTxWPj4gbGlzdCkgeworICAgIGZvcihBPFY+IGIgOiBsaXN0KXsKKyAgICAgIFYgdiA9IGIuZ2V0VCgpOworICAgIH0KKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90dXJuUmVmc1RvU3VwZXIvSURFQURFVjIzODA3L2JlZm9yZS9BLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHVyblJlZnNUb1N1cGVyL0lERUFERVYyMzgwNy9iZWZvcmUvQS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmViNGMzOGEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHVyblJlZnNUb1N1cGVyL0lERUFERVYyMzgwNy9iZWZvcmUvQS5qYXZhCkBAIC0wLDAgKzEsMyBAQAoraW50ZXJmYWNlIEE8VD4geworICBUIGdldFQoKTsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHVyblJlZnNUb1N1cGVyL0lERUFERVYyMzgwNy9iZWZvcmUvQi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R1cm5SZWZzVG9TdXBlci9JREVBREVWMjM4MDcvYmVmb3JlL0IuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZTdkODMyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R1cm5SZWZzVG9TdXBlci9JREVBREVWMjM4MDcvYmVmb3JlL0IuamF2YQpAQCAtMCwwICsxLDkgQEAKK2ltcG9ydCBqYXZhLnV0aWwuKjsKK2NsYXNzIEI8Vj4gaW1wbGVtZW50cyBBPFY+IHsKKyAgcHVibGljIFYgZ2V0VCgpe3JldHVybiBudWxsO30KKyAgdm9pZCBmb28oTGlzdDxCPFY+PiBsaXN0KSB7CisgICAgZm9yKEI8Vj4gYiA6IGxpc3QpeworICAgICAgViB2ID0gYi5nZXRUKCk7CisgICAgfQorICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R1cm5SZWZzVG9TdXBlci9JREVBREVWMjU2NjkvYWZ0ZXIvQ2xpZW50LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHVyblJlZnNUb1N1cGVyL0lERUFERVYyNTY2OS9hZnRlci9DbGllbnQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hM2RjYjdhCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R1cm5SZWZzVG9TdXBlci9JREVBREVWMjU2NjkvYWZ0ZXIvQ2xpZW50LmphdmEKQEAgLTAsMCArMSw1IEBACitpbXBvcnQgcC5BOworCitjbGFzcyBDbGllbnQgeworICBBIGE7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R1cm5SZWZzVG9TdXBlci9JREVBREVWMjU2NjkvYWZ0ZXIvcC9BLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHVyblJlZnNUb1N1cGVyL0lERUFERVYyNTY2OS9hZnRlci9wL0EuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNzg2M2RjCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R1cm5SZWZzVG9TdXBlci9JREVBREVWMjU2NjkvYWZ0ZXIvcC9BLmphdmEKQEAgLTAsMCArMSw5IEBACitwYWNrYWdlIHA7CisKK2NsYXNzIEJhc2UgeworCit9CisKK3B1YmxpYyBjbGFzcyBBIGV4dGVuZHMgQmFzZSB7CisKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHVyblJlZnNUb1N1cGVyL0lERUFERVYyNTY2OS9iZWZvcmUvQ2xpZW50LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHVyblJlZnNUb1N1cGVyL0lERUFERVYyNTY2OS9iZWZvcmUvQ2xpZW50LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTNkY2I3YQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90dXJuUmVmc1RvU3VwZXIvSURFQURFVjI1NjY5L2JlZm9yZS9DbGllbnQuamF2YQpAQCAtMCwwICsxLDUgQEAKK2ltcG9ydCBwLkE7CisKK2NsYXNzIENsaWVudCB7CisgIEEgYTsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHVyblJlZnNUb1N1cGVyL0lERUFERVYyNTY2OS9iZWZvcmUvcC9BLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHVyblJlZnNUb1N1cGVyL0lERUFERVYyNTY2OS9iZWZvcmUvcC9BLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjc4NjNkYwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90dXJuUmVmc1RvU3VwZXIvSURFQURFVjI1NjY5L2JlZm9yZS9wL0EuamF2YQpAQCAtMCwwICsxLDkgQEAKK3BhY2thZ2UgcDsKKworY2xhc3MgQmFzZSB7CisKK30KKworcHVibGljIGNsYXNzIEEgZXh0ZW5kcyBCYXNlIHsKKworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90dXJuUmVmc1RvU3VwZXIvSURFQURFVjU1MTcvYWZ0ZXIvVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R1cm5SZWZzVG9TdXBlci9JREVBREVWNTUxNy9hZnRlci9UZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODUxOWUzYwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90dXJuUmVmc1RvU3VwZXIvSURFQURFVjU1MTcvYWZ0ZXIvVGVzdC5qYXZhCkBAIC0wLDAgKzEsMjEgQEAKK2ludGVyZmFjZSBJbnQ8VD4geworICAgIHZvaWQgbWV0aG9kKFQgeCk7Cit9CisKK2NsYXNzIFN1YiBpbXBsZW1lbnRzIEludDxYSW50PiB7CisgICAgcHVibGljIHZvaWQgbWV0aG9kKFhJbnQgeCkgeworICAgICAgICB4LmluSW50KCk7CisgICAgfQorfQorCitpbnRlcmZhY2UgWEludCB7CisgICAgdm9pZCBpbkludCgpOworfQorCitjbGFzcyBYeXogaW1wbGVtZW50cyBYSW50IHsKKyAgICBwdWJsaWMgdm9pZCBpbkludCgpIHsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBtMSgpIHsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R1cm5SZWZzVG9TdXBlci9JREVBREVWNTUxNy9iZWZvcmUvVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R1cm5SZWZzVG9TdXBlci9JREVBREVWNTUxNy9iZWZvcmUvVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY3M2MzNjUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHVyblJlZnNUb1N1cGVyL0lERUFERVY1NTE3L2JlZm9yZS9UZXN0LmphdmEKQEAgLTAsMCArMSwyMSBAQAoraW50ZXJmYWNlIEludDxUPiB7CisgICAgdm9pZCBtZXRob2QoVCB4KTsKK30KKworY2xhc3MgU3ViIGltcGxlbWVudHMgSW50PFh5ej4geworICAgIHB1YmxpYyB2b2lkIG1ldGhvZChYeXogeCkgeworICAgICAgICB4LmluSW50KCk7CisgICAgfQorfQorCitpbnRlcmZhY2UgWEludCB7CisgICAgdm9pZCBpbkludCgpOworfQorCitjbGFzcyBYeXogaW1wbGVtZW50cyBYSW50IHsKKyAgICBwdWJsaWMgdm9pZCBpbkludCgpIHsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBtMSgpIHsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R1cm5SZWZzVG9TdXBlci9JREVBREVWNTUxN05PT1AvYWZ0ZXIvVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R1cm5SZWZzVG9TdXBlci9JREVBREVWNTUxN05PT1AvYWZ0ZXIvVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMzNTkwODgKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHVyblJlZnNUb1N1cGVyL0lERUFERVY1NTE3Tk9PUC9hZnRlci9UZXN0LmphdmEKQEAgLTAsMCArMSwyNyBAQAoraW50ZXJmYWNlIEludDxUPiB7CisgICAgdm9pZCBtZXRob2QoVCB4KTsKKyAgICB2b2lkIG1ldGhvZDEoVCB4KTsKK30KKworY2xhc3MgU3ViIGltcGxlbWVudHMgSW50PFh5ej4geworICAgIHB1YmxpYyB2b2lkIG1ldGhvZChYeXogeCkgeworICAgICAgICB4LmluSW50KCk7CisgICAgfQorCisKKyAgICBwdWJsaWMgdm9pZCBtZXRob2QxKGZpbmFsIFh5eiB4KSB7CisgICAgICAgIHgubTEoKTsKKyAgICB9Cit9CisKK2ludGVyZmFjZSBYSW50IHsKKyAgICB2b2lkIGluSW50KCk7Cit9CisKK2NsYXNzIFh5eiBpbXBsZW1lbnRzIFhJbnQgeworICAgIHB1YmxpYyB2b2lkIGluSW50KCkgeworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIG0xKCkgeworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHVyblJlZnNUb1N1cGVyL0lERUFERVY1NTE3Tk9PUC9iZWZvcmUvVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R1cm5SZWZzVG9TdXBlci9JREVBREVWNTUxN05PT1AvYmVmb3JlL1Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMzU5MDg4Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R1cm5SZWZzVG9TdXBlci9JREVBREVWNTUxN05PT1AvYmVmb3JlL1Rlc3QuamF2YQpAQCAtMCwwICsxLDI3IEBACitpbnRlcmZhY2UgSW50PFQ+IHsKKyAgICB2b2lkIG1ldGhvZChUIHgpOworICAgIHZvaWQgbWV0aG9kMShUIHgpOworfQorCitjbGFzcyBTdWIgaW1wbGVtZW50cyBJbnQ8WHl6PiB7CisgICAgcHVibGljIHZvaWQgbWV0aG9kKFh5eiB4KSB7CisgICAgICAgIHguaW5JbnQoKTsKKyAgICB9CisKKworICAgIHB1YmxpYyB2b2lkIG1ldGhvZDEoZmluYWwgWHl6IHgpIHsKKyAgICAgICAgeC5tMSgpOworICAgIH0KK30KKworaW50ZXJmYWNlIFhJbnQgeworICAgIHZvaWQgaW5JbnQoKTsKK30KKworY2xhc3MgWHl6IGltcGxlbWVudHMgWEludCB7CisgICAgcHVibGljIHZvaWQgaW5JbnQoKSB7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgbTEoKSB7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90dXJuUmVmc1RvU3VwZXIvSURFQURFVjYxMzYvYWZ0ZXIvQS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R1cm5SZWZzVG9TdXBlci9JREVBREVWNjEzNi9hZnRlci9BLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzUyMTdkMjcKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHVyblJlZnNUb1N1cGVyL0lERUFERVY2MTM2L2FmdGVyL0EuamF2YQpAQCAtMCwwICsxLDEyIEBACitjbGFzcyBCIHsKKyAgICBwdWJsaWMgY2xhc3MgSW5uZXIgeworICAgIH0KK30KKworY2xhc3MgQSBleHRlbmRzIEIge30KKworY2xhc3MgQ2xpZW50IHsKKyAgICBwdWJsaWMgQi5Jbm5lciBnZXRJbm5lcigpIHsKKyAgICAgICAgcmV0dXJuIG51bGw7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R1cm5SZWZzVG9TdXBlci9JREVBREVWNjEzNi9iZWZvcmUvQS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R1cm5SZWZzVG9TdXBlci9JREVBREVWNjEzNi9iZWZvcmUvQS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI5YjU3NTIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHVyblJlZnNUb1N1cGVyL0lERUFERVY2MTM2L2JlZm9yZS9BLmphdmEKQEAgLTAsMCArMSwxMiBAQAorY2xhc3MgQiB7CisgICAgcHVibGljIGNsYXNzIElubmVyIHsKKyAgICB9Cit9CisKK2NsYXNzIEEgZXh0ZW5kcyBCIHt9CisKK2NsYXNzIENsaWVudCB7CisgICAgcHVibGljIEEuSW5uZXIgZ2V0SW5uZXIoKSB7CisgICAgICAgIHJldHVybiBudWxsOworICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90dXJuUmVmc1RvU3VwZXIvYW5vbnltb3VzV2l0aFR5cGVBcmd1bWVudHMvYWZ0ZXIvQ2xhenouamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90dXJuUmVmc1RvU3VwZXIvYW5vbnltb3VzV2l0aFR5cGVBcmd1bWVudHMvYWZ0ZXIvQ2xhenouamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZDVkZmZiCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R1cm5SZWZzVG9TdXBlci9hbm9ueW1vdXNXaXRoVHlwZUFyZ3VtZW50cy9hZnRlci9DbGF6ei5qYXZhCkBAIC0wLDAgKzEsMjAgQEAKK2ludGVyZmFjZSBJbnRGIHsKK30KKworaW50ZXJmYWNlIEZhY3Rvcnk8RSBleHRlbmRzIEludEY+IHsKKyAgICBFIGNyZWF0ZSgpOworICAgIHZvaWQgc2F2ZShFIG9iaik7CisKKyAgICBzdGF0aWMgY2xhc3MgaGVscGVyIHsKKyAgICAgICAgc3RhdGljIEZhY3Rvcnk8SW50Rj4gZ2V0MigpIHsKKyAgICAgICAgICAgIHJldHVybiAoRmFjdG9yeSluZXcgRmFjdG9yeTxJbnRGPigpIHsKKyAgICAgICAgICAgICAgICBwdWJsaWMgSW50RiBjcmVhdGUoKSB7IHJldHVybiBudWxsOyB9CisgICAgICAgICAgICAgICAgcHVibGljIHZvaWQgc2F2ZShJbnRGIG9iaikgeyB9CisgICAgICAgICAgICB9OworICAgICAgICB9CisgICAgfQorfQorCisKK3B1YmxpYyBjbGFzcyBDbGF6eiBpbXBsZW1lbnRzIEludEYgeworfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R1cm5SZWZzVG9TdXBlci9hbm9ueW1vdXNXaXRoVHlwZUFyZ3VtZW50cy9iZWZvcmUvQ2xhenouamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90dXJuUmVmc1RvU3VwZXIvYW5vbnltb3VzV2l0aFR5cGVBcmd1bWVudHMvYmVmb3JlL0NsYXp6LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTE1MWE4MgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90dXJuUmVmc1RvU3VwZXIvYW5vbnltb3VzV2l0aFR5cGVBcmd1bWVudHMvYmVmb3JlL0NsYXp6LmphdmEKQEAgLTAsMCArMSwyMCBAQAoraW50ZXJmYWNlIEludEYgeworfQorCitpbnRlcmZhY2UgRmFjdG9yeTxFIGV4dGVuZHMgSW50Rj4geworICAgIEUgY3JlYXRlKCk7CisgICAgdm9pZCBzYXZlKEUgb2JqKTsKKworICAgIHN0YXRpYyBjbGFzcyBoZWxwZXIgeworICAgICAgICBzdGF0aWMgRmFjdG9yeTxJbnRGPiBnZXQyKCkgeworICAgICAgICAgICAgcmV0dXJuIChGYWN0b3J5KW5ldyBGYWN0b3J5PENsYXp6PigpIHsKKyAgICAgICAgICAgICAgICBwdWJsaWMgQ2xhenogY3JlYXRlKCkgeyByZXR1cm4gbnVsbDsgfQorICAgICAgICAgICAgICAgIHB1YmxpYyB2b2lkIHNhdmUoQ2xhenogb2JqKSB7IH0KKyAgICAgICAgICAgIH07CisgICAgICAgIH0KKyAgICB9Cit9CisKKworcHVibGljIGNsYXNzIENsYXp6IGltcGxlbWVudHMgSW50RiB7Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHVyblJlZnNUb1N1cGVyL2FycmF5RWxlbWVudEFzc2lnbm1lbnQvYWZ0ZXIvQy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R1cm5SZWZzVG9TdXBlci9hcnJheUVsZW1lbnRBc3NpZ25tZW50L2FmdGVyL0MuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOWZjZmUzCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R1cm5SZWZzVG9TdXBlci9hcnJheUVsZW1lbnRBc3NpZ25tZW50L2FmdGVyL0MuamF2YQpAQCAtMCwwICsxLDIgQEAKK3B1YmxpYyBjbGFzcyBDIGltcGxlbWVudHMgSXsKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90dXJuUmVmc1RvU3VwZXIvYXJyYXlFbGVtZW50QXNzaWdubWVudC9hZnRlci9DbGllbnQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90dXJuUmVmc1RvU3VwZXIvYXJyYXlFbGVtZW50QXNzaWdubWVudC9hZnRlci9DbGllbnQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43M2Y1ZTFhCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R1cm5SZWZzVG9TdXBlci9hcnJheUVsZW1lbnRBc3NpZ25tZW50L2FmdGVyL0NsaWVudC5qYXZhCkBAIC0wLDAgKzEsMTAgQEAKK3B1YmxpYyBjbGFzcyBDbGllbnQgeworICAgIElbXSBhcnJheTsKKyAgCisgICAgeworICAgICAgICBhcnJheSA9IG5ldyBJWzBdOworICAgICAgICBmb3IoaW50IGkgPSAwOyBpIDwgYXJyYXkubGVuZ3RoOyBpKyspeworICAgICAgICAgIGFycmF5W2ldID0gbmV3IEMoKTsKKyAgICAgICAgfQorICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90dXJuUmVmc1RvU3VwZXIvYXJyYXlFbGVtZW50QXNzaWdubWVudC9hZnRlci9JLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHVyblJlZnNUb1N1cGVyL2FycmF5RWxlbWVudEFzc2lnbm1lbnQvYWZ0ZXIvSS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI4OGJlYzEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHVyblJlZnNUb1N1cGVyL2FycmF5RWxlbWVudEFzc2lnbm1lbnQvYWZ0ZXIvSS5qYXZhCkBAIC0wLDAgKzEsMiBAQAorcHVibGljIGludGVyZmFjZSBJIHsKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90dXJuUmVmc1RvU3VwZXIvYXJyYXlFbGVtZW50QXNzaWdubWVudC9iZWZvcmUvQy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R1cm5SZWZzVG9TdXBlci9hcnJheUVsZW1lbnRBc3NpZ25tZW50L2JlZm9yZS9DLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTlmY2ZlMwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90dXJuUmVmc1RvU3VwZXIvYXJyYXlFbGVtZW50QXNzaWdubWVudC9iZWZvcmUvQy5qYXZhCkBAIC0wLDAgKzEsMiBAQAorcHVibGljIGNsYXNzIEMgaW1wbGVtZW50cyBJeworfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R1cm5SZWZzVG9TdXBlci9hcnJheUVsZW1lbnRBc3NpZ25tZW50L2JlZm9yZS9DbGllbnQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90dXJuUmVmc1RvU3VwZXIvYXJyYXlFbGVtZW50QXNzaWdubWVudC9iZWZvcmUvQ2xpZW50LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjI3ZTc5NwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90dXJuUmVmc1RvU3VwZXIvYXJyYXlFbGVtZW50QXNzaWdubWVudC9iZWZvcmUvQ2xpZW50LmphdmEKQEAgLTAsMCArMSwxMCBAQAorcHVibGljIGNsYXNzIENsaWVudCB7CisgICAgQ1tdIGFycmF5OworICAKKyAgICB7CisgICAgICAgIGFycmF5ID0gbmV3IENbMF07CisgICAgICAgIGZvcihpbnQgaSA9IDA7IGkgPCBhcnJheS5sZW5ndGg7IGkrKyl7CisgICAgICAgICAgYXJyYXlbaV0gPSBuZXcgQygpOworICAgICAgICB9CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R1cm5SZWZzVG9TdXBlci9hcnJheUVsZW1lbnRBc3NpZ25tZW50L2JlZm9yZS9JLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHVyblJlZnNUb1N1cGVyL2FycmF5RWxlbWVudEFzc2lnbm1lbnQvYmVmb3JlL0kuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yODhiZWMxCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R1cm5SZWZzVG9TdXBlci9hcnJheUVsZW1lbnRBc3NpZ25tZW50L2JlZm9yZS9JLmphdmEKQEAgLTAsMCArMSwyIEBACitwdWJsaWMgaW50ZXJmYWNlIEkgeworfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R1cm5SZWZzVG9TdXBlci9jYXN0L2FmdGVyL0EuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90dXJuUmVmc1RvU3VwZXIvY2FzdC9hZnRlci9BLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTE0ODM0NQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90dXJuUmVmc1RvU3VwZXIvY2FzdC9hZnRlci9BLmphdmEKQEAgLTAsMCArMSw1IEBACitjbGFzcyBBIGltcGxlbWVudHMgSSB7CisgICBpbnQgbWV0aG9kKCkgeworICAgICAgIHJldHVybiAwOworICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90dXJuUmVmc1RvU3VwZXIvY2FzdC9hZnRlci9DbGllbnQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90dXJuUmVmc1RvU3VwZXIvY2FzdC9hZnRlci9DbGllbnQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNThiMzU5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R1cm5SZWZzVG9TdXBlci9jYXN0L2FmdGVyL0NsaWVudC5qYXZhCkBAIC0wLDAgKzEsMTEgQEAKK2NsYXNzIENsaWVudCB7CisgICBJIGdldEkoKSB7IHJldHVybiBudWxsOyB9OworCisgICB2b2lkIG1ldGhvZCgpIHsKKyAgICAgICAgSSBhID0gZ2V0SSgpOworICAgfQorCisgICBpbnQgYW5vdGhlck1ldGhvZCgpIHsKKyAgICAgICByZXR1cm4gZ2V0SSgpLm1ldGhvZCgpOworICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90dXJuUmVmc1RvU3VwZXIvY2FzdC9hZnRlci9JLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHVyblJlZnNUb1N1cGVyL2Nhc3QvYWZ0ZXIvSS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI3ZjNjNjYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHVyblJlZnNUb1N1cGVyL2Nhc3QvYWZ0ZXIvSS5qYXZhCkBAIC0wLDAgKzEsMyBAQAoraW50ZXJmYWNlIEkgeworICAgIGludCBtZXRob2QoKTsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHVyblJlZnNUb1N1cGVyL2Nhc3QvYmVmb3JlL0EuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90dXJuUmVmc1RvU3VwZXIvY2FzdC9iZWZvcmUvQS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUxNDgzNDUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHVyblJlZnNUb1N1cGVyL2Nhc3QvYmVmb3JlL0EuamF2YQpAQCAtMCwwICsxLDUgQEAKK2NsYXNzIEEgaW1wbGVtZW50cyBJIHsKKyAgIGludCBtZXRob2QoKSB7CisgICAgICAgcmV0dXJuIDA7CisgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R1cm5SZWZzVG9TdXBlci9jYXN0L2JlZm9yZS9DbGllbnQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90dXJuUmVmc1RvU3VwZXIvY2FzdC9iZWZvcmUvQ2xpZW50LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGZlNWNkMAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90dXJuUmVmc1RvU3VwZXIvY2FzdC9iZWZvcmUvQ2xpZW50LmphdmEKQEAgLTAsMCArMSwxMSBAQAorY2xhc3MgQ2xpZW50IHsKKyAgIEkgZ2V0SSgpIHsgcmV0dXJuIG51bGw7IH07CisKKyAgIHZvaWQgbWV0aG9kKCkgeworICAgICAgICBBIGEgPSAoQSkgZ2V0SSgpOworICAgfQorCisgICBpbnQgYW5vdGhlck1ldGhvZCgpIHsKKyAgICAgICByZXR1cm4gKChBKSBnZXRJKCkpLm1ldGhvZCgpOworICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90dXJuUmVmc1RvU3VwZXIvY2FzdC9iZWZvcmUvSS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R1cm5SZWZzVG9TdXBlci9jYXN0L2JlZm9yZS9JLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjdmM2M2NgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90dXJuUmVmc1RvU3VwZXIvY2FzdC9iZWZvcmUvSS5qYXZhCkBAIC0wLDAgKzEsMyBAQAoraW50ZXJmYWNlIEkgeworICAgIGludCBtZXRob2QoKTsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHVyblJlZnNUb1N1cGVyL2NsYXNzVXNhZ2UvYWZ0ZXIvQS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R1cm5SZWZzVG9TdXBlci9jbGFzc1VzYWdlL2FmdGVyL0EuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MmI3NjIzCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R1cm5SZWZzVG9TdXBlci9jbGFzc1VzYWdlL2FmdGVyL0EuamF2YQpAQCAtMCwwICsxLDUgQEAKK2NsYXNzIEEgaW1wbGVtZW50cyBJIHsKKyAgIGludCBtZXRob2QoKSB7CisgICAgICAgIHJldHVybiAwOworICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90dXJuUmVmc1RvU3VwZXIvY2xhc3NVc2FnZS9hZnRlci9DbGllbnQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90dXJuUmVmc1RvU3VwZXIvY2xhc3NVc2FnZS9hZnRlci9DbGllbnQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YjM5ZjAxCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R1cm5SZWZzVG9TdXBlci9jbGFzc1VzYWdlL2FmdGVyL0NsaWVudC5qYXZhCkBAIC0wLDAgKzEsOSBAQAorcHVibGljIGNsYXNzIENsaWVudCB7CisgICAgQ2xhc3MgZ2V0Q2xhc3MoKSB7CisgICAgICAgIHJldHVybiBBLmNsYXNzOworICAgIH0KKworICAgIGludCBtKEkgYSkgeworICAgICAgICByZXR1cm4gSS5tZXRob2QoKTsKKyAgICB9IAorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90dXJuUmVmc1RvU3VwZXIvY2xhc3NVc2FnZS9hZnRlci9JLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHVyblJlZnNUb1N1cGVyL2NsYXNzVXNhZ2UvYWZ0ZXIvSS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI3ZjNjNjYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHVyblJlZnNUb1N1cGVyL2NsYXNzVXNhZ2UvYWZ0ZXIvSS5qYXZhCkBAIC0wLDAgKzEsMyBAQAoraW50ZXJmYWNlIEkgeworICAgIGludCBtZXRob2QoKTsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHVyblJlZnNUb1N1cGVyL2NsYXNzVXNhZ2UvYmVmb3JlL0EuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90dXJuUmVmc1RvU3VwZXIvY2xhc3NVc2FnZS9iZWZvcmUvQS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkyYjc2MjMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHVyblJlZnNUb1N1cGVyL2NsYXNzVXNhZ2UvYmVmb3JlL0EuamF2YQpAQCAtMCwwICsxLDUgQEAKK2NsYXNzIEEgaW1wbGVtZW50cyBJIHsKKyAgIGludCBtZXRob2QoKSB7CisgICAgICAgIHJldHVybiAwOworICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90dXJuUmVmc1RvU3VwZXIvY2xhc3NVc2FnZS9iZWZvcmUvQ2xpZW50LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHVyblJlZnNUb1N1cGVyL2NsYXNzVXNhZ2UvYmVmb3JlL0NsaWVudC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZhMmY4OGUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHVyblJlZnNUb1N1cGVyL2NsYXNzVXNhZ2UvYmVmb3JlL0NsaWVudC5qYXZhCkBAIC0wLDAgKzEsOSBAQAorcHVibGljIGNsYXNzIENsaWVudCB7CisgICAgQ2xhc3MgZ2V0Q2xhc3MoKSB7CisgICAgICAgIHJldHVybiBBLmNsYXNzOworICAgIH0KKworICAgIGludCBtKEEgYSkgeworICAgICAgICByZXR1cm4gQS5tZXRob2QoKTsKKyAgICB9IAorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90dXJuUmVmc1RvU3VwZXIvY2xhc3NVc2FnZS9iZWZvcmUvSS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R1cm5SZWZzVG9TdXBlci9jbGFzc1VzYWdlL2JlZm9yZS9JLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjdmM2M2NgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90dXJuUmVmc1RvU3VwZXIvY2xhc3NVc2FnZS9iZWZvcmUvSS5qYXZhCkBAIC0wLDAgKzEsMyBAQAoraW50ZXJmYWNlIEkgeworICAgIGludCBtZXRob2QoKTsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHVyblJlZnNUb1N1cGVyL2NvbW1vbkluaGVyaXRvci9hZnRlci9DbGllbnQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90dXJuUmVmc1RvU3VwZXIvY29tbW9uSW5oZXJpdG9yL2FmdGVyL0NsaWVudC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU3YmE5MmIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHVyblJlZnNUb1N1cGVyL2NvbW1vbkluaGVyaXRvci9hZnRlci9DbGllbnQuamF2YQpAQCAtMCwwICsxLDIwIEBACitjbGFzcyBDbGllbnQKK3sKKworICAgIGludGVyZmFjZSBMIHsgdm9pZCBtICgpOyB9CisKKyAgICBjbGFzcyBWIGltcGxlbWVudHMgTCB7IAorCXZvaWQgbSAoKSB7IH0KKwl2b2lkIHEgKCkgeyB9CisgICAgfQorCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAKKyAgICBjbGFzcyBDICB7CisJaW50IG1ldGhvZChMIHYpIHsgIHJldHVybiAwOyB9CisgICAgfQorICAgIAorICAgIGludGVyZmFjZSBJIHsgaW50IG1ldGhvZChMIHYpOyB9CisKKyAgICBjbGFzcyBEIGV4dGVuZHMgQyBpbXBsZW1lbnRzIEkgeyB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHVyblJlZnNUb1N1cGVyL2NvbW1vbkluaGVyaXRvci9iZWZvcmUvQ2xpZW50LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHVyblJlZnNUb1N1cGVyL2NvbW1vbkluaGVyaXRvci9iZWZvcmUvQ2xpZW50LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmFlNDA2NAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90dXJuUmVmc1RvU3VwZXIvY29tbW9uSW5oZXJpdG9yL2JlZm9yZS9DbGllbnQuamF2YQpAQCAtMCwwICsxLDIwIEBACitjbGFzcyBDbGllbnQKK3sKKworICAgIGludGVyZmFjZSBMIHsgdm9pZCBtICgpOyB9CisKKyAgICBjbGFzcyBWIGltcGxlbWVudHMgTCB7IAorCXZvaWQgbSAoKSB7IH0KKwl2b2lkIHEgKCkgeyB9CisgICAgfQorCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAKKyAgICBjbGFzcyBDICB7CisJaW50IG1ldGhvZChWIHYpIHsgIHJldHVybiAwOyB9CisgICAgfQorICAgIAorICAgIGludGVyZmFjZSBJIHsgaW50IG1ldGhvZChWIHYpOyB9CisKKyAgICBjbGFzcyBEIGV4dGVuZHMgQyBpbXBsZW1lbnRzIEkgeyB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHVyblJlZnNUb1N1cGVyL2NvbW1vbkluaGVyaXRvckZhaWwvYWZ0ZXIvQ2xpZW50LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHVyblJlZnNUb1N1cGVyL2NvbW1vbkluaGVyaXRvckZhaWwvYWZ0ZXIvQ2xpZW50LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2ZkY2Q5NQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90dXJuUmVmc1RvU3VwZXIvY29tbW9uSW5oZXJpdG9yRmFpbC9hZnRlci9DbGllbnQuamF2YQpAQCAtMCwwICsxLDIwIEBACitjbGFzcyBDbGllbnQKK3sKKworICAgIGludGVyZmFjZSBMIHsgdm9pZCBtICgpOyB9CisKKyAgICBjbGFzcyBWIGltcGxlbWVudHMgTCB7IAorCXZvaWQgbSAoKSB7IH0KKwl2b2lkIHEgKCkgeyB9CisgICAgfQorCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAKKyAgICBjbGFzcyBDICB7CisJaW50IG1ldGhvZChWIHYpIHsgdi5xKCk7IHJldHVybiAwOyB9CisgICAgfQorICAgIAorICAgIGludGVyZmFjZSBJIHsgaW50IG1ldGhvZChWIHYpOyB9CisKKyAgICBjbGFzcyBEIGV4dGVuZHMgQyBpbXBsZW1lbnRzIEkgeyB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHVyblJlZnNUb1N1cGVyL2NvbW1vbkluaGVyaXRvckZhaWwvYmVmb3JlL0NsaWVudC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R1cm5SZWZzVG9TdXBlci9jb21tb25Jbmhlcml0b3JGYWlsL2JlZm9yZS9DbGllbnQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZmRjZDk1Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R1cm5SZWZzVG9TdXBlci9jb21tb25Jbmhlcml0b3JGYWlsL2JlZm9yZS9DbGllbnQuamF2YQpAQCAtMCwwICsxLDIwIEBACitjbGFzcyBDbGllbnQKK3sKKworICAgIGludGVyZmFjZSBMIHsgdm9pZCBtICgpOyB9CisKKyAgICBjbGFzcyBWIGltcGxlbWVudHMgTCB7IAorCXZvaWQgbSAoKSB7IH0KKwl2b2lkIHEgKCkgeyB9CisgICAgfQorCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAKKyAgICBjbGFzcyBDICB7CisJaW50IG1ldGhvZChWIHYpIHsgdi5xKCk7IHJldHVybiAwOyB9CisgICAgfQorICAgIAorICAgIGludGVyZmFjZSBJIHsgaW50IG1ldGhvZChWIHYpOyB9CisKKyAgICBjbGFzcyBEIGV4dGVuZHMgQyBpbXBsZW1lbnRzIEkgeyB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHVyblJlZnNUb1N1cGVyL2NvbW1vbkluaGVyaXRvclJlc3VsdHMvYWZ0ZXIvQ2xpZW50LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHVyblJlZnNUb1N1cGVyL2NvbW1vbkluaGVyaXRvclJlc3VsdHMvYWZ0ZXIvQ2xpZW50LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2RkZjIzZAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90dXJuUmVmc1RvU3VwZXIvY29tbW9uSW5oZXJpdG9yUmVzdWx0cy9hZnRlci9DbGllbnQuamF2YQpAQCAtMCwwICsxLDIwIEBACitjbGFzcyBDbGllbnQKK3sKKworICAgIGludGVyZmFjZSBMIHsgdm9pZCBtICgpOyB9CisKKyAgICBjbGFzcyBWIGltcGxlbWVudHMgTCB7IAorCXZvaWQgbSAoKSB7IH0KKwl2b2lkIHEgKCkgeyB9CisgICAgfQorCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAKKyAgICBjbGFzcyBDICB7CisJTCBtZXRob2QoKSB7IEwgcmVzID0gbmV3IFYgKCk7ICByZXR1cm4gcmVzOyB9CisgICAgfQorICAgIAorICAgIGludGVyZmFjZSBJIHsgTCBtZXRob2QoKTsgfQorCisgICAgY2xhc3MgRCBleHRlbmRzIEMgaW1wbGVtZW50cyBJIHsgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R1cm5SZWZzVG9TdXBlci9jb21tb25Jbmhlcml0b3JSZXN1bHRzL2JlZm9yZS9DbGllbnQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90dXJuUmVmc1RvU3VwZXIvY29tbW9uSW5oZXJpdG9yUmVzdWx0cy9iZWZvcmUvQ2xpZW50LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWM0MmMzYwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90dXJuUmVmc1RvU3VwZXIvY29tbW9uSW5oZXJpdG9yUmVzdWx0cy9iZWZvcmUvQ2xpZW50LmphdmEKQEAgLTAsMCArMSwyMCBAQAorY2xhc3MgQ2xpZW50Cit7CisKKyAgICBpbnRlcmZhY2UgTCB7IHZvaWQgbSAoKTsgfQorCisgICAgY2xhc3MgViBpbXBsZW1lbnRzIEwgeyAKKwl2b2lkIG0gKCkgeyB9CisJdm9pZCBxICgpIHsgfQorICAgIH0KKworICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgCisgICAgY2xhc3MgQyAgeworCVYgbWV0aG9kKCkgeyBWIHJlcyA9IG5ldyBWICgpOyAgcmV0dXJuIHJlczsgfQorICAgIH0KKyAgICAKKyAgICBpbnRlcmZhY2UgSSB7IFYgbWV0aG9kKCk7IH0KKworICAgIGNsYXNzIEQgZXh0ZW5kcyBDIGltcGxlbWVudHMgSSB7IH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90dXJuUmVmc1RvU3VwZXIvY29tbW9uSW5oZXJpdG9yUmVzdWx0c0ZhaWwvYWZ0ZXIvQ2xpZW50LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHVyblJlZnNUb1N1cGVyL2NvbW1vbkluaGVyaXRvclJlc3VsdHNGYWlsL2FmdGVyL0NsaWVudC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE3OTFmMjcKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHVyblJlZnNUb1N1cGVyL2NvbW1vbkluaGVyaXRvclJlc3VsdHNGYWlsL2FmdGVyL0NsaWVudC5qYXZhCkBAIC0wLDAgKzEsMjAgQEAKK2NsYXNzIENsaWVudAoreworCisgICAgaW50ZXJmYWNlIEwgeyB2b2lkIG0gKCk7IH0KKworICAgIGNsYXNzIFYgaW1wbGVtZW50cyBMIHsgCisJdm9pZCBtICgpIHsgfQorCXZvaWQgcSAoKSB7IH0KKyAgICB9CisKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIAorICAgIGNsYXNzIEMgIHsKKwlMIG1ldGhvZCgpIHsgViByZXMgPSBuZXcgViAoKTsgIHJlcy5xKCk7IHJldHVybiByZXM7IH0KKyAgICB9CisgICAgCisgICAgaW50ZXJmYWNlIEkgeyBMIG1ldGhvZCgpOyB9CisKKyAgICBjbGFzcyBEIGV4dGVuZHMgQyBpbXBsZW1lbnRzIEkgeyB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHVyblJlZnNUb1N1cGVyL2NvbW1vbkluaGVyaXRvclJlc3VsdHNGYWlsL2JlZm9yZS9DbGllbnQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90dXJuUmVmc1RvU3VwZXIvY29tbW9uSW5oZXJpdG9yUmVzdWx0c0ZhaWwvYmVmb3JlL0NsaWVudC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI1Zjc4NzkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHVyblJlZnNUb1N1cGVyL2NvbW1vbkluaGVyaXRvclJlc3VsdHNGYWlsL2JlZm9yZS9DbGllbnQuamF2YQpAQCAtMCwwICsxLDIwIEBACitjbGFzcyBDbGllbnQKK3sKKworICAgIGludGVyZmFjZSBMIHsgdm9pZCBtICgpOyB9CisKKyAgICBjbGFzcyBWIGltcGxlbWVudHMgTCB7IAorCXZvaWQgbSAoKSB7IH0KKwl2b2lkIHEgKCkgeyB9CisgICAgfQorCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAKKyAgICBjbGFzcyBDICB7CisJViBtZXRob2QoKSB7IFYgcmVzID0gbmV3IFYgKCk7ICByZXMucSgpOyByZXR1cm4gcmVzOyB9CisgICAgfQorICAgIAorICAgIGludGVyZmFjZSBJIHsgViBtZXRob2QoKTsgfQorCisgICAgY2xhc3MgRCBleHRlbmRzIEMgaW1wbGVtZW50cyBJIHsgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R1cm5SZWZzVG9TdXBlci9jb21tb25Jbmhlcml0b3JSZXN1bHRzRmFpbDIvYWZ0ZXIvQ2xpZW50LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHVyblJlZnNUb1N1cGVyL2NvbW1vbkluaGVyaXRvclJlc3VsdHNGYWlsMi9hZnRlci9DbGllbnQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZDQzMTdlCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R1cm5SZWZzVG9TdXBlci9jb21tb25Jbmhlcml0b3JSZXN1bHRzRmFpbDIvYWZ0ZXIvQ2xpZW50LmphdmEKQEAgLTAsMCArMSwyMCBAQAorY2xhc3MgQ2xpZW50Cit7CisKKyAgICBpbnRlcmZhY2UgTCB7IHZvaWQgbSAoKTsgfQorCisgICAgY2xhc3MgViBpbXBsZW1lbnRzIEwgeyAKKwl2b2lkIG0gKCkgeyB9CisJdm9pZCBxICgpIHsgfQorICAgIH0KKworICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgCisgICAgY2xhc3MgQyAgeworCVYgbWV0aG9kKCkgeyBWIHJlcyA9IG5ldyBWICgpOyAgbWV0aG9kKCkucSgpOyByZXR1cm4gcmVzOyB9CisgICAgfQorICAgIAorICAgIGludGVyZmFjZSBJIHsgViBtZXRob2QoKTsgfQorCisgICAgY2xhc3MgRCBleHRlbmRzIEMgaW1wbGVtZW50cyBJIHsgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R1cm5SZWZzVG9TdXBlci9jb21tb25Jbmhlcml0b3JSZXN1bHRzRmFpbDIvYmVmb3JlL0NsaWVudC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R1cm5SZWZzVG9TdXBlci9jb21tb25Jbmhlcml0b3JSZXN1bHRzRmFpbDIvYmVmb3JlL0NsaWVudC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJkNDMxN2UKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHVyblJlZnNUb1N1cGVyL2NvbW1vbkluaGVyaXRvclJlc3VsdHNGYWlsMi9iZWZvcmUvQ2xpZW50LmphdmEKQEAgLTAsMCArMSwyMCBAQAorY2xhc3MgQ2xpZW50Cit7CisKKyAgICBpbnRlcmZhY2UgTCB7IHZvaWQgbSAoKTsgfQorCisgICAgY2xhc3MgViBpbXBsZW1lbnRzIEwgeyAKKwl2b2lkIG0gKCkgeyB9CisJdm9pZCBxICgpIHsgfQorICAgIH0KKworICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgCisgICAgY2xhc3MgQyAgeworCVYgbWV0aG9kKCkgeyBWIHJlcyA9IG5ldyBWICgpOyAgbWV0aG9kKCkucSgpOyByZXR1cm4gcmVzOyB9CisgICAgfQorICAgIAorICAgIGludGVyZmFjZSBJIHsgViBtZXRob2QoKTsgfQorCisgICAgY2xhc3MgRCBleHRlbmRzIEMgaW1wbGVtZW50cyBJIHsgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R1cm5SZWZzVG9TdXBlci9jb3ZhcmlhbnRSZXR1cm5UeXBlcy9hZnRlci9NYWluLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHVyblJlZnNUb1N1cGVyL2NvdmFyaWFudFJldHVyblR5cGVzL2FmdGVyL01haW4uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NzgzOGJkCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R1cm5SZWZzVG9TdXBlci9jb3ZhcmlhbnRSZXR1cm5UeXBlcy9hZnRlci9NYWluLmphdmEKQEAgLTAsMCArMSwxNiBAQAoraW50ZXJmYWNlIEludCB7CisgICAgSW50IGYoKTsKK30KK2NsYXNzIEltcGwgaW1wbGVtZW50cyBJbnQgeworICAgIHZvaWQgZm9vKCl7fQorICAgIEltcGwgZigpIHtyZXR1cm4gdGhpczt9Cit9CisKK2NsYXNzIFVzYWdlIHsKKyAgICB2b2lkIGZrKEltcGwgbCwgSW1wbCBsbCl7CisgICAgICBsLmYoKS5mb28oKTsKKworICAgICAgZmluYWwgSW1wbCBmID0gbGwuZigpOworICAgICAgZi5mb28oKTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHVyblJlZnNUb1N1cGVyL2NvdmFyaWFudFJldHVyblR5cGVzL2JlZm9yZS9NYWluLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHVyblJlZnNUb1N1cGVyL2NvdmFyaWFudFJldHVyblR5cGVzL2JlZm9yZS9NYWluLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODc4MzhiZAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90dXJuUmVmc1RvU3VwZXIvY292YXJpYW50UmV0dXJuVHlwZXMvYmVmb3JlL01haW4uamF2YQpAQCAtMCwwICsxLDE2IEBACitpbnRlcmZhY2UgSW50IHsKKyAgICBJbnQgZigpOworfQorY2xhc3MgSW1wbCBpbXBsZW1lbnRzIEludCB7CisgICAgdm9pZCBmb28oKXt9CisgICAgSW1wbCBmKCkge3JldHVybiB0aGlzO30KK30KKworY2xhc3MgVXNhZ2UgeworICAgIHZvaWQgZmsoSW1wbCBsLCBJbXBsIGxsKXsKKyAgICAgIGwuZigpLmZvbygpOworCisgICAgICBmaW5hbCBJbXBsIGYgPSBsbC5mKCk7CisgICAgICBmLmZvbygpOworICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90dXJuUmVmc1RvU3VwZXIvZmllbGRUZXN0L2FmdGVyL0NvbXBvbmVudDEuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90dXJuUmVmc1RvU3VwZXIvZmllbGRUZXN0L2FmdGVyL0NvbXBvbmVudDEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NjE2OGE1Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R1cm5SZWZzVG9TdXBlci9maWVsZFRlc3QvYWZ0ZXIvQ29tcG9uZW50MS5qYXZhCkBAIC0wLDAgKzEsMTEgQEAKK2ltcG9ydCBqYXZheC5zd2luZy4qOworIAorcHVibGljIGNsYXNzIENvbXBvbmVudDEgZXh0ZW5kcyBKQ29tcG9uZW50IGltcGxlbWVudHMgSURvU29tZXRoaW5nIHsKKyAgICBwdWJsaWMgQ29tcG9uZW50MSgpIHsKKyAgICB9CisgCisgCisgICAgcHVibGljIHZvaWQgZG9Tb21ldGhpbmcoKXsKKyAKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHVyblJlZnNUb1N1cGVyL2ZpZWxkVGVzdC9hZnRlci9Db21wb25lbnRDYWxsZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90dXJuUmVmc1RvU3VwZXIvZmllbGRUZXN0L2FmdGVyL0NvbXBvbmVudENhbGxlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM3MGE4ZjkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHVyblJlZnNUb1N1cGVyL2ZpZWxkVGVzdC9hZnRlci9Db21wb25lbnRDYWxsZXIuamF2YQpAQCAtMCwwICsxLDIxIEBACitpbXBvcnQgamF2YXguc3dpbmcuKjsKK2ltcG9ydCBqYXZhLmF3dC4qOworaW1wb3J0IGphdmF4LnN3aW5nLio7CisgCitwdWJsaWMgY2xhc3MgQ29tcG9uZW50Q2FsbGVyIGV4dGVuZHMgSkNvbXBvbmVudHsKKyAgICBDb21wb25lbnQxIGNvbXBvbmVudDE7CisgCisgICAgcHVibGljIENvbXBvbmVudENhbGxlcigpIHsKKyAgICAgICAgY29tcG9uZW50MSAgPSBuZXcgQ29tcG9uZW50MSgpOworICAgICAgICBidWlsZFVJKCk7CisgICAgfQorIAorICAgIHByaXZhdGUgdm9pZCBidWlsZFVJKCkgeworICAgICAgICBzZXRMYXlvdXQobmV3IEJvcmRlckxheW91dCgpKTsKKyAgICAgICAgYWRkKG5ldyBKU2Nyb2xsUGFuZShjb21wb25lbnQxKSk7CisgICAgfQorIAorICAgIHB1YmxpYyB2b2lkIGRvU29tZXRoaW5nKCl7CisgICAgICAgIGNvbXBvbmVudDEuZG9Tb21ldGhpbmcoKTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHVyblJlZnNUb1N1cGVyL2ZpZWxkVGVzdC9hZnRlci9JRG9Tb21ldGhpbmcuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90dXJuUmVmc1RvU3VwZXIvZmllbGRUZXN0L2FmdGVyL0lEb1NvbWV0aGluZy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU2MDc5NzAKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHVyblJlZnNUb1N1cGVyL2ZpZWxkVGVzdC9hZnRlci9JRG9Tb21ldGhpbmcuamF2YQpAQCAtMCwwICsxLDMgQEAKK3B1YmxpYyBpbnRlcmZhY2UgSURvU29tZXRoaW5nIHsKKyAgICB2b2lkIGRvU29tZXRoaW5nKCk7Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHVyblJlZnNUb1N1cGVyL2ZpZWxkVGVzdC9iZWZvcmUvQ29tcG9uZW50MS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R1cm5SZWZzVG9TdXBlci9maWVsZFRlc3QvYmVmb3JlL0NvbXBvbmVudDEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NjE2OGE1Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R1cm5SZWZzVG9TdXBlci9maWVsZFRlc3QvYmVmb3JlL0NvbXBvbmVudDEuamF2YQpAQCAtMCwwICsxLDExIEBACitpbXBvcnQgamF2YXguc3dpbmcuKjsKKyAKK3B1YmxpYyBjbGFzcyBDb21wb25lbnQxIGV4dGVuZHMgSkNvbXBvbmVudCBpbXBsZW1lbnRzIElEb1NvbWV0aGluZyB7CisgICAgcHVibGljIENvbXBvbmVudDEoKSB7CisgICAgfQorIAorIAorICAgIHB1YmxpYyB2b2lkIGRvU29tZXRoaW5nKCl7CisgCisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R1cm5SZWZzVG9TdXBlci9maWVsZFRlc3QvYmVmb3JlL0NvbXBvbmVudENhbGxlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R1cm5SZWZzVG9TdXBlci9maWVsZFRlc3QvYmVmb3JlL0NvbXBvbmVudENhbGxlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM3MGE4ZjkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHVyblJlZnNUb1N1cGVyL2ZpZWxkVGVzdC9iZWZvcmUvQ29tcG9uZW50Q2FsbGVyLmphdmEKQEAgLTAsMCArMSwyMSBAQAoraW1wb3J0IGphdmF4LnN3aW5nLio7CitpbXBvcnQgamF2YS5hd3QuKjsKK2ltcG9ydCBqYXZheC5zd2luZy4qOworIAorcHVibGljIGNsYXNzIENvbXBvbmVudENhbGxlciBleHRlbmRzIEpDb21wb25lbnR7CisgICAgQ29tcG9uZW50MSBjb21wb25lbnQxOworIAorICAgIHB1YmxpYyBDb21wb25lbnRDYWxsZXIoKSB7CisgICAgICAgIGNvbXBvbmVudDEgID0gbmV3IENvbXBvbmVudDEoKTsKKyAgICAgICAgYnVpbGRVSSgpOworICAgIH0KKyAKKyAgICBwcml2YXRlIHZvaWQgYnVpbGRVSSgpIHsKKyAgICAgICAgc2V0TGF5b3V0KG5ldyBCb3JkZXJMYXlvdXQoKSk7CisgICAgICAgIGFkZChuZXcgSlNjcm9sbFBhbmUoY29tcG9uZW50MSkpOworICAgIH0KKyAKKyAgICBwdWJsaWMgdm9pZCBkb1NvbWV0aGluZygpeworICAgICAgICBjb21wb25lbnQxLmRvU29tZXRoaW5nKCk7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R1cm5SZWZzVG9TdXBlci9maWVsZFRlc3QvYmVmb3JlL0lEb1NvbWV0aGluZy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R1cm5SZWZzVG9TdXBlci9maWVsZFRlc3QvYmVmb3JlL0lEb1NvbWV0aGluZy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU2MDc5NzAKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHVyblJlZnNUb1N1cGVyL2ZpZWxkVGVzdC9iZWZvcmUvSURvU29tZXRoaW5nLmphdmEKQEAgLTAsMCArMSwzIEBACitwdWJsaWMgaW50ZXJmYWNlIElEb1NvbWV0aGluZyB7CisgICAgdm9pZCBkb1NvbWV0aGluZygpOworfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R1cm5SZWZzVG9TdXBlci9mb3JFYWNoMS9hZnRlci9UZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHVyblJlZnNUb1N1cGVyL2ZvckVhY2gxL2FmdGVyL1Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNThjMWFkCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R1cm5SZWZzVG9TdXBlci9mb3JFYWNoMS9hZnRlci9UZXN0LmphdmEKQEAgLTAsMCArMSwxNSBAQAorY2xhc3MgVGVzdCB7CisgIHZvaWQgdGVzdCgpIHRocm93cyBFeGNlcHRpb24geworICAgIE15SXRlcmFibGVJbXBsIHIgPSBuZXcgTXlJdGVyYWJsZUltcGwoKTsKKyAgICBmb3IgKFN0cmluZyBzIDogcikgeworICAgICAgci5sZW5ndGgoKTsKKyAgICB9CisgIH0KKworICBpbnRlcmZhY2UgTXlJdGVyYWJsZSB7CisgIH0KKworICBzdGF0aWMgY2xhc3MgTXlJdGVyYWJsZUltcGwgaW1wbGVtZW50cyBNeUl0ZXJhYmxlLCBJdGVyYWJsZTxTdHJpbmc+IHsKKyAgICBwdWJsaWMgSXRlcmF0b3I8U3RyaW5nPiBpdGVyYXRvcigpIHsgcmV0dXJuIG51bGw7IH0KKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90dXJuUmVmc1RvU3VwZXIvZm9yRWFjaDEvYmVmb3JlL1Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90dXJuUmVmc1RvU3VwZXIvZm9yRWFjaDEvYmVmb3JlL1Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNThjMWFkCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R1cm5SZWZzVG9TdXBlci9mb3JFYWNoMS9iZWZvcmUvVGVzdC5qYXZhCkBAIC0wLDAgKzEsMTUgQEAKK2NsYXNzIFRlc3QgeworICB2b2lkIHRlc3QoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBNeUl0ZXJhYmxlSW1wbCByID0gbmV3IE15SXRlcmFibGVJbXBsKCk7CisgICAgZm9yIChTdHJpbmcgcyA6IHIpIHsKKyAgICAgIHIubGVuZ3RoKCk7CisgICAgfQorICB9CisKKyAgaW50ZXJmYWNlIE15SXRlcmFibGUgeworICB9CisKKyAgc3RhdGljIGNsYXNzIE15SXRlcmFibGVJbXBsIGltcGxlbWVudHMgTXlJdGVyYWJsZSwgSXRlcmFibGU8U3RyaW5nPiB7CisgICAgcHVibGljIEl0ZXJhdG9yPFN0cmluZz4gaXRlcmF0b3IoKSB7IHJldHVybiBudWxsOyB9CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHVyblJlZnNUb1N1cGVyL2ZvckVhY2gyL2FmdGVyL1Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90dXJuUmVmc1RvU3VwZXIvZm9yRWFjaDIvYWZ0ZXIvVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE5MDBjNDAKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHVyblJlZnNUb1N1cGVyL2ZvckVhY2gyL2FmdGVyL1Rlc3QuamF2YQpAQCAtMCwwICsxLDE1IEBACitjbGFzcyBUZXN0IHsKKyAgdm9pZCB0ZXN0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgTXlJdGVyYWJsZSByID0gbmV3IE15SXRlcmFibGVJbXBsKCk7CisgICAgZm9yIChTdHJpbmcgcyA6IHIpIHsKKyAgICAgIHIubGVuZ3RoKCk7CisgICAgfQorICB9CisKKyAgaW50ZXJmYWNlIE15SXRlcmFibGUgZXh0ZW5kcyBJdGVyYWJsZTxTdHJpbmc+IHsKKyAgfQorCisgIHN0YXRpYyBjbGFzcyBNeUl0ZXJhYmxlSW1wbCBpbXBsZW1lbnRzIE15SXRlcmFibGUgeworICAgIHB1YmxpYyBJdGVyYXRvcjxTdHJpbmc+IGl0ZXJhdG9yKCkgeyByZXR1cm4gbnVsbDsgfQorICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R1cm5SZWZzVG9TdXBlci9mb3JFYWNoMi9iZWZvcmUvVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R1cm5SZWZzVG9TdXBlci9mb3JFYWNoMi9iZWZvcmUvVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM4YTVjNDkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHVyblJlZnNUb1N1cGVyL2ZvckVhY2gyL2JlZm9yZS9UZXN0LmphdmEKQEAgLTAsMCArMSwxNSBAQAorY2xhc3MgVGVzdCB7CisgIHZvaWQgdGVzdCgpIHRocm93cyBFeGNlcHRpb24geworICAgIE15SXRlcmFibGVJbXBsIHIgPSBuZXcgTXlJdGVyYWJsZUltcGwoKTsKKyAgICBmb3IgKFN0cmluZyBzIDogcikgeworICAgICAgci5sZW5ndGgoKTsKKyAgICB9CisgIH0KKworICBpbnRlcmZhY2UgTXlJdGVyYWJsZSBleHRlbmRzIEl0ZXJhYmxlPFN0cmluZz4geworICB9CisKKyAgc3RhdGljIGNsYXNzIE15SXRlcmFibGVJbXBsIGltcGxlbWVudHMgTXlJdGVyYWJsZSB7CisgICAgcHVibGljIEl0ZXJhdG9yPFN0cmluZz4gaXRlcmF0b3IoKSB7IHJldHVybiBudWxsOyB9CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHVyblJlZnNUb1N1cGVyL2luc3RhbmNlT2YvYWZ0ZXIvQS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R1cm5SZWZzVG9TdXBlci9pbnN0YW5jZU9mL2FmdGVyL0EuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNGJhNjI5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R1cm5SZWZzVG9TdXBlci9pbnN0YW5jZU9mL2FmdGVyL0EuamF2YQpAQCAtMCwwICsxLDIgQEAKK2NsYXNzIEEgaW1wbGVtZW50cyBJIHsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHVyblJlZnNUb1N1cGVyL2luc3RhbmNlT2YvYWZ0ZXIvQ2xpZW50LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHVyblJlZnNUb1N1cGVyL2luc3RhbmNlT2YvYWZ0ZXIvQ2xpZW50LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2Y5Yjc4YQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90dXJuUmVmc1RvU3VwZXIvaW5zdGFuY2VPZi9hZnRlci9DbGllbnQuamF2YQpAQCAtMCwwICsxLDUgQEAKK2NsYXNzIENsaWVudCB7CisgICBpbnQgbWV0aG9kKEkgYSkgeworICAgICAgIHJldHVybiBhIGluc3RhbmNlb2YgQTsKKyAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHVyblJlZnNUb1N1cGVyL2luc3RhbmNlT2YvYWZ0ZXIvSS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R1cm5SZWZzVG9TdXBlci9pbnN0YW5jZU9mL2FmdGVyL0kuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMGZmOTY1Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R1cm5SZWZzVG9TdXBlci9pbnN0YW5jZU9mL2FmdGVyL0kuamF2YQpAQCAtMCwwICsxLDIgQEAKK2ludGVyZmFjZSBJIHsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHVyblJlZnNUb1N1cGVyL2luc3RhbmNlT2YvYmVmb3JlL0EuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90dXJuUmVmc1RvU3VwZXIvaW5zdGFuY2VPZi9iZWZvcmUvQS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY0YmE2MjkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHVyblJlZnNUb1N1cGVyL2luc3RhbmNlT2YvYmVmb3JlL0EuamF2YQpAQCAtMCwwICsxLDIgQEAKK2NsYXNzIEEgaW1wbGVtZW50cyBJIHsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHVyblJlZnNUb1N1cGVyL2luc3RhbmNlT2YvYmVmb3JlL0NsaWVudC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R1cm5SZWZzVG9TdXBlci9pbnN0YW5jZU9mL2JlZm9yZS9DbGllbnQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NmMzYzQyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R1cm5SZWZzVG9TdXBlci9pbnN0YW5jZU9mL2JlZm9yZS9DbGllbnQuamF2YQpAQCAtMCwwICsxLDUgQEAKK2NsYXNzIENsaWVudCB7CisgICBpbnQgbWV0aG9kKEEgYSkgeworICAgICAgIHJldHVybiBhIGluc3RhbmNlb2YgQTsKKyAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHVyblJlZnNUb1N1cGVyL2luc3RhbmNlT2YvYmVmb3JlL0kuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90dXJuUmVmc1RvU3VwZXIvaW5zdGFuY2VPZi9iZWZvcmUvSS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYwZmY5NjUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHVyblJlZnNUb1N1cGVyL2luc3RhbmNlT2YvYmVmb3JlL0kuamF2YQpAQCAtMCwwICsxLDIgQEAKK2ludGVyZmFjZSBJIHsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHVyblJlZnNUb1N1cGVyL2xpc3RBcmdzL2FmdGVyL01haW4uamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90dXJuUmVmc1RvU3VwZXIvbGlzdEFyZ3MvYWZ0ZXIvTWFpbi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY1NDYxZTMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHVyblJlZnNUb1N1cGVyL2xpc3RBcmdzL2FmdGVyL01haW4uamF2YQpAQCAtMCwwICsxLDE0IEBACitpbXBvcnQgamF2YS51dGlsLio7CitpbnRlcmZhY2UgSW50IHt9CitjbGFzcyBJbXBsIGltcGxlbWVudHMgSW50IHsKKyAgICB2b2lkIGZvbygpe30KK30KKworY2xhc3MgVXNhZ2UgeworICAgIHZvaWQgZihMaXN0PEltcGw+IGwpeworICAgICAgICBmb3IgKEltcGwgYUltcGwgOiBsKSB7CisgICAgICAgICAgICBhSW1wbC5mb28oKTsKKyAgICAgICAgfQorICAgICAgICBsLmdldCgwKS5mb28oKTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHVyblJlZnNUb1N1cGVyL2xpc3RBcmdzL2JlZm9yZS9NYWluLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHVyblJlZnNUb1N1cGVyL2xpc3RBcmdzL2JlZm9yZS9NYWluLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjU0NjFlMwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90dXJuUmVmc1RvU3VwZXIvbGlzdEFyZ3MvYmVmb3JlL01haW4uamF2YQpAQCAtMCwwICsxLDE0IEBACitpbXBvcnQgamF2YS51dGlsLio7CitpbnRlcmZhY2UgSW50IHt9CitjbGFzcyBJbXBsIGltcGxlbWVudHMgSW50IHsKKyAgICB2b2lkIGZvbygpe30KK30KKworY2xhc3MgVXNhZ2UgeworICAgIHZvaWQgZihMaXN0PEltcGw+IGwpeworICAgICAgICBmb3IgKEltcGwgYUltcGwgOiBsKSB7CisgICAgICAgICAgICBhSW1wbC5mb28oKTsKKyAgICAgICAgfQorICAgICAgICBsLmdldCgwKS5mb28oKTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHVyblJlZnNUb1N1cGVyL21ldGhvZEZyb21TdXBlci9hZnRlci9BQ2xhc3MuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90dXJuUmVmc1RvU3VwZXIvbWV0aG9kRnJvbVN1cGVyL2FmdGVyL0FDbGFzcy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk4ZjM0ODgKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHVyblJlZnNUb1N1cGVyL21ldGhvZEZyb21TdXBlci9hZnRlci9BQ2xhc3MuamF2YQpAQCAtMCwwICsxLDUgQEAKKworcHVibGljIGNsYXNzIEFDbGFzcyBleHRlbmRzIEFTdXBlcjIgeworICAgIHB1YmxpYyB2b2lkIGZvbygpIHsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R1cm5SZWZzVG9TdXBlci9tZXRob2RGcm9tU3VwZXIvYWZ0ZXIvQVN1cGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHVyblJlZnNUb1N1cGVyL21ldGhvZEZyb21TdXBlci9hZnRlci9BU3VwZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YzhmMWUyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R1cm5SZWZzVG9TdXBlci9tZXRob2RGcm9tU3VwZXIvYWZ0ZXIvQVN1cGVyLmphdmEKQEAgLTAsMCArMSw0IEBACisKK3B1YmxpYyBjbGFzcyBBU3VwZXIgeworICAgIHB1YmxpYyB2b2lkIGZvbygpe30KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHVyblJlZnNUb1N1cGVyL21ldGhvZEZyb21TdXBlci9hZnRlci9BU3VwZXIyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHVyblJlZnNUb1N1cGVyL21ldGhvZEZyb21TdXBlci9hZnRlci9BU3VwZXIyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzc4MzMzZgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90dXJuUmVmc1RvU3VwZXIvbWV0aG9kRnJvbVN1cGVyL2FmdGVyL0FTdXBlcjIuamF2YQpAQCAtMCwwICsxLDMgQEAKKworcHVibGljIGNsYXNzIEFTdXBlcjIgZXh0ZW5kcyBBU3VwZXIgeworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90dXJuUmVmc1RvU3VwZXIvbWV0aG9kRnJvbVN1cGVyL2FmdGVyL0NsaWVudC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R1cm5SZWZzVG9TdXBlci9tZXRob2RGcm9tU3VwZXIvYWZ0ZXIvQ2xpZW50LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGU0NDdjMAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90dXJuUmVmc1RvU3VwZXIvbWV0aG9kRnJvbVN1cGVyL2FmdGVyL0NsaWVudC5qYXZhCkBAIC0wLDAgKzEsNyBAQAorCitwdWJsaWMgY2xhc3MgQ2xpZW50IHsKKyAgICB7CisgICAgICAgIEFTdXBlciBhQ2xhc3M7CisgICAgICAgIGFDbGFzcy5mb28oKTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R1cm5SZWZzVG9TdXBlci9tZXRob2RGcm9tU3VwZXIvYmVmb3JlL0FDbGFzcy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R1cm5SZWZzVG9TdXBlci9tZXRob2RGcm9tU3VwZXIvYmVmb3JlL0FDbGFzcy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk4ZjM0ODgKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHVyblJlZnNUb1N1cGVyL21ldGhvZEZyb21TdXBlci9iZWZvcmUvQUNsYXNzLmphdmEKQEAgLTAsMCArMSw1IEBACisKK3B1YmxpYyBjbGFzcyBBQ2xhc3MgZXh0ZW5kcyBBU3VwZXIyIHsKKyAgICBwdWJsaWMgdm9pZCBmb28oKSB7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90dXJuUmVmc1RvU3VwZXIvbWV0aG9kRnJvbVN1cGVyL2JlZm9yZS9BU3VwZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90dXJuUmVmc1RvU3VwZXIvbWV0aG9kRnJvbVN1cGVyL2JlZm9yZS9BU3VwZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YzhmMWUyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R1cm5SZWZzVG9TdXBlci9tZXRob2RGcm9tU3VwZXIvYmVmb3JlL0FTdXBlci5qYXZhCkBAIC0wLDAgKzEsNCBAQAorCitwdWJsaWMgY2xhc3MgQVN1cGVyIHsKKyAgICBwdWJsaWMgdm9pZCBmb28oKXt9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R1cm5SZWZzVG9TdXBlci9tZXRob2RGcm9tU3VwZXIvYmVmb3JlL0FTdXBlcjIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90dXJuUmVmc1RvU3VwZXIvbWV0aG9kRnJvbVN1cGVyL2JlZm9yZS9BU3VwZXIyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzc4MzMzZgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90dXJuUmVmc1RvU3VwZXIvbWV0aG9kRnJvbVN1cGVyL2JlZm9yZS9BU3VwZXIyLmphdmEKQEAgLTAsMCArMSwzIEBACisKK3B1YmxpYyBjbGFzcyBBU3VwZXIyIGV4dGVuZHMgQVN1cGVyIHsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHVyblJlZnNUb1N1cGVyL21ldGhvZEZyb21TdXBlci9iZWZvcmUvQ2xpZW50LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHVyblJlZnNUb1N1cGVyL21ldGhvZEZyb21TdXBlci9iZWZvcmUvQ2xpZW50LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjg4Mzg3ZgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90dXJuUmVmc1RvU3VwZXIvbWV0aG9kRnJvbVN1cGVyL2JlZm9yZS9DbGllbnQuamF2YQpAQCAtMCwwICsxLDcgQEAKKworcHVibGljIGNsYXNzIENsaWVudCB7CisgICAgeworICAgICAgICBBQ2xhc3MgYUNsYXNzOworICAgICAgICBhQ2xhc3MuZm9vKCk7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90dXJuUmVmc1RvU3VwZXIvbmV3RXhwci9hZnRlci9NYWluLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHVyblJlZnNUb1N1cGVyL25ld0V4cHIvYWZ0ZXIvTWFpbi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUzZjU5Y2UKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHVyblJlZnNUb1N1cGVyL25ld0V4cHIvYWZ0ZXIvTWFpbi5qYXZhCkBAIC0wLDAgKzEsMjUgQEAKK2ltcG9ydCBqYXZhLnV0aWwuKjsKKworaW50ZXJmYWNlIEludCB7Cit9CisKK2NsYXNzIEltcGwgaW1wbGVtZW50cyBJbnQgeworICAgIHZvaWQgZm9vKCkgeworICAgIH0KK30KKworY2xhc3MgVXNhZ2UgeworICB2b2lkIGYoKSB7CisgICAgICBMaXN0PEltcGw+IGwgPSBuZXcgQXJyYXlMaXN0PEltcGw+KCk7CisgICAgICBsLmdldCgwKS5mb28oKTsKKworCisgICAgICBMaXN0PEludD4gbDEgPSBuZXcgQXJyYXlMaXN0PEludD4oKTsKKyAgICAgIEludCBpID0gbDEuZ2V0KDApOworCisKKyAgICAgIExpc3Q8SW1wbD4gbDIgPSBuZXcgQXJyYXlMaXN0PEltcGw+KCk7CisgICAgICBJbXBsIGkyID0gbDIuZ2V0KDApOworICAgICAgaTIuZm9vKCk7CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90dXJuUmVmc1RvU3VwZXIvbmV3RXhwci9iZWZvcmUvTWFpbi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R1cm5SZWZzVG9TdXBlci9uZXdFeHByL2JlZm9yZS9NYWluLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTBhZTRiOQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90dXJuUmVmc1RvU3VwZXIvbmV3RXhwci9iZWZvcmUvTWFpbi5qYXZhCkBAIC0wLDAgKzEsMjUgQEAKK2ltcG9ydCBqYXZhLnV0aWwuKjsKKworaW50ZXJmYWNlIEludCB7Cit9CisKK2NsYXNzIEltcGwgaW1wbGVtZW50cyBJbnQgeworICAgIHZvaWQgZm9vKCkgeworICAgIH0KK30KKworY2xhc3MgVXNhZ2UgeworICB2b2lkIGYoKSB7CisgICAgICBMaXN0PEltcGw+IGwgPSBuZXcgQXJyYXlMaXN0PEltcGw+KCk7CisgICAgICBsLmdldCgwKS5mb28oKTsKKworCisgICAgICBMaXN0PEltcGw+IGwxID0gbmV3IEFycmF5TGlzdDxJbXBsPigpOworICAgICAgSW1wbCBpID0gbDEuZ2V0KDApOworCisKKyAgICAgIExpc3Q8SW1wbD4gbDIgPSBuZXcgQXJyYXlMaXN0PEltcGw+KCk7CisgICAgICBJbXBsIGkyID0gbDIuZ2V0KDApOworICAgICAgaTIuZm9vKCk7CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90dXJuUmVmc1RvU3VwZXIvcmVtb3ZlSW1wb3J0L2FmdGVyL3BhY2sxL0FDbGFzcy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R1cm5SZWZzVG9TdXBlci9yZW1vdmVJbXBvcnQvYWZ0ZXIvcGFjazEvQUNsYXNzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTE1YjVhOAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90dXJuUmVmc1RvU3VwZXIvcmVtb3ZlSW1wb3J0L2FmdGVyL3BhY2sxL0FDbGFzcy5qYXZhCkBAIC0wLDAgKzEsNSBAQAorCitwYWNrYWdlIHBhY2sxOworCitwdWJsaWMgY2xhc3MgQUNsYXNzIGltcGxlbWVudHMgQW5JbnRlcmZhY2UgeworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90dXJuUmVmc1RvU3VwZXIvcmVtb3ZlSW1wb3J0L2FmdGVyL3BhY2sxL0FuSW50ZXJmYWNlLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHVyblJlZnNUb1N1cGVyL3JlbW92ZUltcG9ydC9hZnRlci9wYWNrMS9BbkludGVyZmFjZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIzNjY5ZDcKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHVyblJlZnNUb1N1cGVyL3JlbW92ZUltcG9ydC9hZnRlci9wYWNrMS9BbkludGVyZmFjZS5qYXZhCkBAIC0wLDAgKzEsNSBAQAorCitwYWNrYWdlIHBhY2sxOworCitwdWJsaWMgaW50ZXJmYWNlIEFuSW50ZXJmYWNlIHsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHVyblJlZnNUb1N1cGVyL3JlbW92ZUltcG9ydC9hZnRlci9wYWNrMi9DbGllbnQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90dXJuUmVmc1RvU3VwZXIvcmVtb3ZlSW1wb3J0L2FmdGVyL3BhY2syL0NsaWVudC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFkMDkwMWYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHVyblJlZnNUb1N1cGVyL3JlbW92ZUltcG9ydC9hZnRlci9wYWNrMi9DbGllbnQuamF2YQpAQCAtMCwwICsxLDEwIEBACisKK3BhY2thZ2UgcGFjazI7CisKK2ltcG9ydCBwYWNrMS5BbkludGVyZmFjZTsKKworcHVibGljIGNsYXNzIENsaWVudCB7CisgICAgeworICAgICAgICBBbkludGVyZmFjZSBhQ2xhc3M7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90dXJuUmVmc1RvU3VwZXIvcmVtb3ZlSW1wb3J0L2FmdGVyL3BhY2syL0NsaWVudDIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90dXJuUmVmc1RvU3VwZXIvcmVtb3ZlSW1wb3J0L2FmdGVyL3BhY2syL0NsaWVudDIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MTM1OTZjCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R1cm5SZWZzVG9TdXBlci9yZW1vdmVJbXBvcnQvYWZ0ZXIvcGFjazIvQ2xpZW50Mi5qYXZhCkBAIC0wLDAgKzEsMTEgQEAKKworcGFja2FnZSBwYWNrMjsKKworaW1wb3J0IHBhY2sxLkFDbGFzczsKK2ltcG9ydCBwYWNrMS5BbkludGVyZmFjZTsKKworcHVibGljIGNsYXNzIENsaWVudCB7CisgICAgeworICAgICAgICBBbkludGVyZmFjZSBhQ2xhc3MgPSBuZXcgQUNsYXNzKCk7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90dXJuUmVmc1RvU3VwZXIvcmVtb3ZlSW1wb3J0L2JlZm9yZS9wYWNrMS9BQ2xhc3MuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90dXJuUmVmc1RvU3VwZXIvcmVtb3ZlSW1wb3J0L2JlZm9yZS9wYWNrMS9BQ2xhc3MuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MTViNWE4Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R1cm5SZWZzVG9TdXBlci9yZW1vdmVJbXBvcnQvYmVmb3JlL3BhY2sxL0FDbGFzcy5qYXZhCkBAIC0wLDAgKzEsNSBAQAorCitwYWNrYWdlIHBhY2sxOworCitwdWJsaWMgY2xhc3MgQUNsYXNzIGltcGxlbWVudHMgQW5JbnRlcmZhY2UgeworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90dXJuUmVmc1RvU3VwZXIvcmVtb3ZlSW1wb3J0L2JlZm9yZS9wYWNrMS9BbkludGVyZmFjZS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R1cm5SZWZzVG9TdXBlci9yZW1vdmVJbXBvcnQvYmVmb3JlL3BhY2sxL0FuSW50ZXJmYWNlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjM2NjlkNwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90dXJuUmVmc1RvU3VwZXIvcmVtb3ZlSW1wb3J0L2JlZm9yZS9wYWNrMS9BbkludGVyZmFjZS5qYXZhCkBAIC0wLDAgKzEsNSBAQAorCitwYWNrYWdlIHBhY2sxOworCitwdWJsaWMgaW50ZXJmYWNlIEFuSW50ZXJmYWNlIHsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHVyblJlZnNUb1N1cGVyL3JlbW92ZUltcG9ydC9iZWZvcmUvcGFjazIvQ2xpZW50LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHVyblJlZnNUb1N1cGVyL3JlbW92ZUltcG9ydC9iZWZvcmUvcGFjazIvQ2xpZW50LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTBhZjIyMQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90dXJuUmVmc1RvU3VwZXIvcmVtb3ZlSW1wb3J0L2JlZm9yZS9wYWNrMi9DbGllbnQuamF2YQpAQCAtMCwwICsxLDEwIEBACisKK3BhY2thZ2UgcGFjazI7CisKK2ltcG9ydCBwYWNrMS5BQ2xhc3M7CisKK3B1YmxpYyBjbGFzcyBDbGllbnQgeworICAgIHsKKyAgICAgICAgQUNsYXNzIGFDbGFzczsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R1cm5SZWZzVG9TdXBlci9yZW1vdmVJbXBvcnQvYmVmb3JlL3BhY2syL0NsaWVudDIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90dXJuUmVmc1RvU3VwZXIvcmVtb3ZlSW1wb3J0L2JlZm9yZS9wYWNrMi9DbGllbnQyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTlkZDhkYgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90dXJuUmVmc1RvU3VwZXIvcmVtb3ZlSW1wb3J0L2JlZm9yZS9wYWNrMi9DbGllbnQyLmphdmEKQEAgLTAsMCArMSwxMCBAQAorCitwYWNrYWdlIHBhY2syOworCitpbXBvcnQgcGFjazEuQUNsYXNzOworCitwdWJsaWMgY2xhc3MgQ2xpZW50IHsKKyAgICB7CisgICAgICAgIEFDbGFzcyBhQ2xhc3MgPSBuZXcgQUNsYXNzKCk7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90dXJuUmVmc1RvU3VwZXIvcmV0dXJuVmFsdWUvYWZ0ZXIvQS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R1cm5SZWZzVG9TdXBlci9yZXR1cm5WYWx1ZS9hZnRlci9BLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzNjMzM0YwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90dXJuUmVmc1RvU3VwZXIvcmV0dXJuVmFsdWUvYWZ0ZXIvQS5qYXZhCkBAIC0wLDAgKzEsMiBAQAorY2xhc3MgQSBpbXBsZW1lbnRzIEkgeworfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R1cm5SZWZzVG9TdXBlci9yZXR1cm5WYWx1ZS9hZnRlci9CLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHVyblJlZnNUb1N1cGVyL3JldHVyblZhbHVlL2FmdGVyL0IuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMDE3YWI3Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R1cm5SZWZzVG9TdXBlci9yZXR1cm5WYWx1ZS9hZnRlci9CLmphdmEKQEAgLTAsMCArMSwxMyBAQAoraW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CisKK2NsYXNzIEIgeworICAgIElbXSBnZXRBKCkgeyByZXR1cm4gbnVsbDsgfTsKKworICAgIGludCBtZXRob2QoQXJyYXlMaXN0IGxpc3QpIHsKKyAgICAgICAgSVtdIGEgPSBnZXRBKCk7CisKKyAgICAgICAgZm9yKGkgPSAwOyBpIDwgYS5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgSSBpdGVtID0gYVtpXTsKKyAgICAgICAgfQorICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHVyblJlZnNUb1N1cGVyL3JldHVyblZhbHVlL2FmdGVyL0kuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90dXJuUmVmc1RvU3VwZXIvcmV0dXJuVmFsdWUvYWZ0ZXIvSS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg0ODg1YmUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHVyblJlZnNUb1N1cGVyL3JldHVyblZhbHVlL2FmdGVyL0kuamF2YQpAQCAtMCwwICsxLDQgQEAKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworaW50ZXJmYWNlIEkgeworfQorCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHVyblJlZnNUb1N1cGVyL3JldHVyblZhbHVlL2JlZm9yZS9BLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHVyblJlZnNUb1N1cGVyL3JldHVyblZhbHVlL2JlZm9yZS9BLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzNjMzM0YwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90dXJuUmVmc1RvU3VwZXIvcmV0dXJuVmFsdWUvYmVmb3JlL0EuamF2YQpAQCAtMCwwICsxLDIgQEAKK2NsYXNzIEEgaW1wbGVtZW50cyBJIHsKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90dXJuUmVmc1RvU3VwZXIvcmV0dXJuVmFsdWUvYmVmb3JlL0IuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90dXJuUmVmc1RvU3VwZXIvcmV0dXJuVmFsdWUvYmVmb3JlL0IuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YzZkMGYwCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R1cm5SZWZzVG9TdXBlci9yZXR1cm5WYWx1ZS9iZWZvcmUvQi5qYXZhCkBAIC0wLDAgKzEsMTMgQEAKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworCitjbGFzcyBCIHsKKyAgICBBW10gZ2V0QSgpIHsgcmV0dXJuIG51bGw7IH07CisKKyAgICBpbnQgbWV0aG9kKEFycmF5TGlzdCBsaXN0KSB7CisgICAgICAgIEFbXSBhID0gZ2V0QSgpOworCisgICAgICAgIGZvcihpID0gMDsgaSA8IGEubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgIEEgaXRlbSA9IGFbaV07CisgICAgICAgIH0KKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R1cm5SZWZzVG9TdXBlci9yZXR1cm5WYWx1ZS9iZWZvcmUvSS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R1cm5SZWZzVG9TdXBlci9yZXR1cm5WYWx1ZS9iZWZvcmUvSS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg0ODg1YmUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHVyblJlZnNUb1N1cGVyL3JldHVyblZhbHVlL2JlZm9yZS9JLmphdmEKQEAgLTAsMCArMSw0IEBACitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK2ludGVyZmFjZSBJIHsKK30KKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R1cm5SZWZzVG9TdXBlci9yZXR1cm5WYWx1ZTIvYWZ0ZXIvQS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R1cm5SZWZzVG9TdXBlci9yZXR1cm5WYWx1ZTIvYWZ0ZXIvQS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjczYzMzNGMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHVyblJlZnNUb1N1cGVyL3JldHVyblZhbHVlMi9hZnRlci9BLmphdmEKQEAgLTAsMCArMSwyIEBACitjbGFzcyBBIGltcGxlbWVudHMgSSB7Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHVyblJlZnNUb1N1cGVyL3JldHVyblZhbHVlMi9hZnRlci9CLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHVyblJlZnNUb1N1cGVyL3JldHVyblZhbHVlMi9hZnRlci9CLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDk0YjBjOAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90dXJuUmVmc1RvU3VwZXIvcmV0dXJuVmFsdWUyL2FmdGVyL0IuamF2YQpAQCAtMCwwICsxLDEzIEBACitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKKworY2xhc3MgQiB7CisgICAgSSBnZXRBKCkgeyByZXR1cm4gbmV3IEEoKTsgfTsKKyAgICB2b2lkIHRlc3QoSSBhKSB7CisgICAgfQorCisgICAgaW50IG1ldGhvZChBcnJheUxpc3QgbGlzdCkgeworICAgICAgICBJIGEgPSBnZXRBKCk7CisKKyAgICAgICAgdGVzdChhKTsKKyAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHVyblJlZnNUb1N1cGVyL3JldHVyblZhbHVlMi9hZnRlci9JLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHVyblJlZnNUb1N1cGVyL3JldHVyblZhbHVlMi9hZnRlci9JLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODQ4ODViZQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90dXJuUmVmc1RvU3VwZXIvcmV0dXJuVmFsdWUyL2FmdGVyL0kuamF2YQpAQCAtMCwwICsxLDQgQEAKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworaW50ZXJmYWNlIEkgeworfQorCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHVyblJlZnNUb1N1cGVyL3JldHVyblZhbHVlMi9iZWZvcmUvQS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R1cm5SZWZzVG9TdXBlci9yZXR1cm5WYWx1ZTIvYmVmb3JlL0EuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43M2MzMzRjCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R1cm5SZWZzVG9TdXBlci9yZXR1cm5WYWx1ZTIvYmVmb3JlL0EuamF2YQpAQCAtMCwwICsxLDIgQEAKK2NsYXNzIEEgaW1wbGVtZW50cyBJIHsKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90dXJuUmVmc1RvU3VwZXIvcmV0dXJuVmFsdWUyL2JlZm9yZS9CLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHVyblJlZnNUb1N1cGVyL3JldHVyblZhbHVlMi9iZWZvcmUvQi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc5NjJlMTRkCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R1cm5SZWZzVG9TdXBlci9yZXR1cm5WYWx1ZTIvYmVmb3JlL0IuamF2YQpAQCAtMCwwICsxLDEzIEBACitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKKworY2xhc3MgQiB7CisgICAgQSBnZXRBKCkgeyByZXR1cm4gbmV3IEEoKTsgfTsKKyAgICB2b2lkIHRlc3QoQSBhKSB7CisgICAgfQorCisgICAgaW50IG1ldGhvZChBcnJheUxpc3QgbGlzdCkgeworICAgICAgICBBIGEgPSBnZXRBKCk7CisKKyAgICAgICAgdGVzdChhKTsKKyAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHVyblJlZnNUb1N1cGVyL3JldHVyblZhbHVlMi9iZWZvcmUvSS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R1cm5SZWZzVG9TdXBlci9yZXR1cm5WYWx1ZTIvYmVmb3JlL0kuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NDg4NWJlCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R1cm5SZWZzVG9TdXBlci9yZXR1cm5WYWx1ZTIvYmVmb3JlL0kuamF2YQpAQCAtMCwwICsxLDQgQEAKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworaW50ZXJmYWNlIEkgeworfQorCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHVyblJlZnNUb1N1cGVyL3NjcjM0MDAwL2FmdGVyL01haW4uamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90dXJuUmVmc1RvU3VwZXIvc2NyMzQwMDAvYWZ0ZXIvTWFpbi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQyOTQ0YTMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHVyblJlZnNUb1N1cGVyL3NjcjM0MDAwL2FmdGVyL01haW4uamF2YQpAQCAtMCwwICsxLDEwIEBACitwdWJsaWMgY2xhc3MgTWFpbiB7CisgICAgcHJpdmF0ZSBzdGF0aWMgdm9pZCBpbnN0YWxsKCkgeworICAgICAgICBNb2RlbCBzaW1wbGVNb2RlbCA9IG5ldyBTaW1wbGVNb2RlbCgpOworICAgICAgICBWaWV3IHZpZXcgPSBuZXcgVmlldyhzaW1wbGVNb2RlbCk7CisgICAgfQorICAgIHB1YmxpYyB2b2lkIGZvbygpIHsKKyAgICAgICAgTW9kZWwgc2ltcGxlTW9kZWwgPSBuZXcgU2ltcGxlTW9kZWwoKTsKKyAgICAgICAgc2ltcGxlTW9kZWwuZG9JdCgpOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHVyblJlZnNUb1N1cGVyL3NjcjM0MDAwL2FmdGVyL01vZGVsLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHVyblJlZnNUb1N1cGVyL3NjcjM0MDAwL2FmdGVyL01vZGVsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDEyZWE2MwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90dXJuUmVmc1RvU3VwZXIvc2NyMzQwMDAvYWZ0ZXIvTW9kZWwuamF2YQpAQCAtMCwwICsxLDMgQEAKK3B1YmxpYyBjbGFzcyBNb2RlbCB7CisgICAgcHVibGljIHZvaWQgZG9JdCgpIHt9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R1cm5SZWZzVG9TdXBlci9zY3IzNDAwMC9hZnRlci9TaW1wbGVNb2RlbC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R1cm5SZWZzVG9TdXBlci9zY3IzNDAwMC9hZnRlci9TaW1wbGVNb2RlbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEzNjc5MGEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHVyblJlZnNUb1N1cGVyL3NjcjM0MDAwL2FmdGVyL1NpbXBsZU1vZGVsLmphdmEKQEAgLTAsMCArMSwyIEBACitjbGFzcyBTaW1wbGVNb2RlbCBleHRlbmRzIE1vZGVsIHsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHVyblJlZnNUb1N1cGVyL3NjcjM0MDAwL2FmdGVyL1ZpZXcuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90dXJuUmVmc1RvU3VwZXIvc2NyMzQwMDAvYWZ0ZXIvVmlldy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYxYTIzZGQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHVyblJlZnNUb1N1cGVyL3NjcjM0MDAwL2FmdGVyL1ZpZXcuamF2YQpAQCAtMCwwICsxLDMgQEAKK3B1YmxpYyBjbGFzcyBWaWV3IHsKKyAgICBwdWJsaWMgVmlldyhNb2RlbCBtb2RlbCkge30KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHVyblJlZnNUb1N1cGVyL3NjcjM0MDAwL2JlZm9yZS9NYWluLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHVyblJlZnNUb1N1cGVyL3NjcjM0MDAwL2JlZm9yZS9NYWluLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGEwNGIyNQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90dXJuUmVmc1RvU3VwZXIvc2NyMzQwMDAvYmVmb3JlL01haW4uamF2YQpAQCAtMCwwICsxLDEwIEBACitwdWJsaWMgY2xhc3MgTWFpbiB7CisgICAgcHJpdmF0ZSBzdGF0aWMgdm9pZCBpbnN0YWxsKCkgeworICAgICAgICBTaW1wbGVNb2RlbCBzaW1wbGVNb2RlbCA9IG5ldyBTaW1wbGVNb2RlbCgpOworICAgICAgICBWaWV3IHZpZXcgPSBuZXcgVmlldyhzaW1wbGVNb2RlbCk7CisgICAgfQorICAgIHB1YmxpYyB2b2lkIGZvbygpIHsKKyAgICAgICAgU2ltcGxlTW9kZWwgc2ltcGxlTW9kZWwgPSBuZXcgU2ltcGxlTW9kZWwoKTsKKyAgICAgICAgc2ltcGxlTW9kZWwuZG9JdCgpOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHVyblJlZnNUb1N1cGVyL3NjcjM0MDAwL2JlZm9yZS9Nb2RlbC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R1cm5SZWZzVG9TdXBlci9zY3IzNDAwMC9iZWZvcmUvTW9kZWwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MTJlYTYzCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R1cm5SZWZzVG9TdXBlci9zY3IzNDAwMC9iZWZvcmUvTW9kZWwuamF2YQpAQCAtMCwwICsxLDMgQEAKK3B1YmxpYyBjbGFzcyBNb2RlbCB7CisgICAgcHVibGljIHZvaWQgZG9JdCgpIHt9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R1cm5SZWZzVG9TdXBlci9zY3IzNDAwMC9iZWZvcmUvU2ltcGxlTW9kZWwuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90dXJuUmVmc1RvU3VwZXIvc2NyMzQwMDAvYmVmb3JlL1NpbXBsZU1vZGVsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTM2NzkwYQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90dXJuUmVmc1RvU3VwZXIvc2NyMzQwMDAvYmVmb3JlL1NpbXBsZU1vZGVsLmphdmEKQEAgLTAsMCArMSwyIEBACitjbGFzcyBTaW1wbGVNb2RlbCBleHRlbmRzIE1vZGVsIHsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHVyblJlZnNUb1N1cGVyL3NjcjM0MDAwL2JlZm9yZS9WaWV3LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHVyblJlZnNUb1N1cGVyL3NjcjM0MDAwL2JlZm9yZS9WaWV3LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjFhMjNkZAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90dXJuUmVmc1RvU3VwZXIvc2NyMzQwMDAvYmVmb3JlL1ZpZXcuamF2YQpAQCAtMCwwICsxLDMgQEAKK3B1YmxpYyBjbGFzcyBWaWV3IHsKKyAgICBwdWJsaWMgVmlldyhNb2RlbCBtb2RlbCkge30KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHVyblJlZnNUb1N1cGVyL3NjcjM0MDIwL2FmdGVyL3Rlc3QvQy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R1cm5SZWZzVG9TdXBlci9zY3IzNDAyMC9hZnRlci90ZXN0L0MuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42Yzc1MjZiCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R1cm5SZWZzVG9TdXBlci9zY3IzNDAyMC9hZnRlci90ZXN0L0MuamF2YQpAQCAtMCwwICsxLDE3IEBACitwYWNrYWdlIHRlc3Q7CisKK2ltcG9ydCBqYXZhLnV0aWwuKjsKKworLyoqCisgKiBDcmVhdGVkIGJ5IEludGVsbGlKIElERUEuCisgKiBVc2VyOiBkc2wKKyAqIERhdGU6IEp1biAxNywgMjAwNAorICogVGltZTogMToyODoxNCBQTQorICogVG8gY2hhbmdlIHRoaXMgdGVtcGxhdGUgdXNlIEZpbGUgfCBTZXR0aW5ncyB8IEZpbGUgVGVtcGxhdGVzLgorICovCitwdWJsaWMgY2xhc3MgQyB7CisgICAgeworICAgICAgICBMaXN0IGwgPSBuZXcgQXJyYXlMaXN0KCk7CisgICAgICAgIENvbGxlY3Rpb25zLmJpbmFyeVNlYXJjaChsLCBudWxsKTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHVyblJlZnNUb1N1cGVyL3NjcjM0MDIwL2JlZm9yZS90ZXN0L0MuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90dXJuUmVmc1RvU3VwZXIvc2NyMzQwMjAvYmVmb3JlL3Rlc3QvQy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZjNzUyNmIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHVyblJlZnNUb1N1cGVyL3NjcjM0MDIwL2JlZm9yZS90ZXN0L0MuamF2YQpAQCAtMCwwICsxLDE3IEBACitwYWNrYWdlIHRlc3Q7CisKK2ltcG9ydCBqYXZhLnV0aWwuKjsKKworLyoqCisgKiBDcmVhdGVkIGJ5IEludGVsbGlKIElERUEuCisgKiBVc2VyOiBkc2wKKyAqIERhdGU6IEp1biAxNywgMjAwNAorICogVGltZTogMToyODoxNCBQTQorICogVG8gY2hhbmdlIHRoaXMgdGVtcGxhdGUgdXNlIEZpbGUgfCBTZXR0aW5ncyB8IEZpbGUgVGVtcGxhdGVzLgorICovCitwdWJsaWMgY2xhc3MgQyB7CisgICAgeworICAgICAgICBMaXN0IGwgPSBuZXcgQXJyYXlMaXN0KCk7CisgICAgICAgIENvbGxlY3Rpb25zLmJpbmFyeVNlYXJjaChsLCBudWxsKTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHVyblJlZnNUb1N1cGVyL3N0YXRpY0NhbGxBcmd1bWVudHMvYWZ0ZXIvTWFpbi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R1cm5SZWZzVG9TdXBlci9zdGF0aWNDYWxsQXJndW1lbnRzL2FmdGVyL01haW4uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NTg2MzA4Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R1cm5SZWZzVG9TdXBlci9zdGF0aWNDYWxsQXJndW1lbnRzL2FmdGVyL01haW4uamF2YQpAQCAtMCwwICsxLDExIEBACitpbXBvcnQgamF2YS51dGlsLio7CitpbnRlcmZhY2UgSW50IHt9CitjbGFzcyBJbXBsIGltcGxlbWVudHMgSW50IHsKK30KKworY2xhc3MgVXNhZ2UgeworICAgIHZvaWQgZihMaXN0PEludD4gbCl7fQorICAgIHZvaWQgYmFyKCkgeworICAgICAgICBmKENvbGxlY3Rpb25zLjxJbnQ+ZW1wdHlMaXN0KCkpOworICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90dXJuUmVmc1RvU3VwZXIvc3RhdGljQ2FsbEFyZ3VtZW50cy9iZWZvcmUvTWFpbi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R1cm5SZWZzVG9TdXBlci9zdGF0aWNDYWxsQXJndW1lbnRzL2JlZm9yZS9NYWluLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmRiZDExYgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90dXJuUmVmc1RvU3VwZXIvc3RhdGljQ2FsbEFyZ3VtZW50cy9iZWZvcmUvTWFpbi5qYXZhCkBAIC0wLDAgKzEsMTEgQEAKK2ltcG9ydCBqYXZhLnV0aWwuKjsKK2ludGVyZmFjZSBJbnQge30KK2NsYXNzIEltcGwgaW1wbGVtZW50cyBJbnQgeworfQorCitjbGFzcyBVc2FnZSB7CisgICAgdm9pZCBmKExpc3Q8SW1wbD4gbCl7fQorICAgIHZvaWQgYmFyKCkgeworICAgICAgICBmKENvbGxlY3Rpb25zLjxJbXBsPmVtcHR5TGlzdCgpKTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHVyblJlZnNUb1N1cGVyL3N1cGVyQ2xhc3MvYWZ0ZXIvQUNsYXNzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHVyblJlZnNUb1N1cGVyL3N1cGVyQ2xhc3MvYWZ0ZXIvQUNsYXNzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmUzNDk3OQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90dXJuUmVmc1RvU3VwZXIvc3VwZXJDbGFzcy9hZnRlci9BQ2xhc3MuamF2YQpAQCAtMCwwICsxLDcgQEAKK3B1YmxpYyBjbGFzcyBBQ2xhc3MgZXh0ZW5kcyBBU3VwZXIgeworCisgIHB1YmxpYyB2b2lkIHNheUJhcigpCisgICAgICB7CisgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJCYXIiKTsKKyAgICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90dXJuUmVmc1RvU3VwZXIvc3VwZXJDbGFzcy9hZnRlci9BU3VwZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90dXJuUmVmc1RvU3VwZXIvc3VwZXJDbGFzcy9hZnRlci9BU3VwZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZjE5ZTRkCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R1cm5SZWZzVG9TdXBlci9zdXBlckNsYXNzL2FmdGVyL0FTdXBlci5qYXZhCkBAIC0wLDAgKzEsNiBAQAorcHVibGljIGNsYXNzIEFTdXBlciB7CisgIHB1YmxpYyB2b2lkIHNheUZvbygpCisgIHsKKyAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRm9vIik7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHVyblJlZnNUb1N1cGVyL3N1cGVyQ2xhc3MvYWZ0ZXIvQ2xpZW50LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHVyblJlZnNUb1N1cGVyL3N1cGVyQ2xhc3MvYWZ0ZXIvQ2xpZW50LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmM2YjM3OQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90dXJuUmVmc1RvU3VwZXIvc3VwZXJDbGFzcy9hZnRlci9DbGllbnQuamF2YQpAQCAtMCwwICsxLDYgQEAKK3B1YmxpYyBjbGFzcyBDbGllbnQgeworICAgIHsKKyAgICAgICAgQVN1cGVyIGIgPSBuZXcgQUNsYXNzKCk7CisgICAgICAgIGIuc2F5Rm9vKCk7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90dXJuUmVmc1RvU3VwZXIvc3VwZXJDbGFzcy9iZWZvcmUvQUNsYXNzLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHVyblJlZnNUb1N1cGVyL3N1cGVyQ2xhc3MvYmVmb3JlL0FDbGFzcy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJlMzQ5NzkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHVyblJlZnNUb1N1cGVyL3N1cGVyQ2xhc3MvYmVmb3JlL0FDbGFzcy5qYXZhCkBAIC0wLDAgKzEsNyBAQAorcHVibGljIGNsYXNzIEFDbGFzcyBleHRlbmRzIEFTdXBlciB7CisKKyAgcHVibGljIHZvaWQgc2F5QmFyKCkKKyAgICAgIHsKKyAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkJhciIpOworICAgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R1cm5SZWZzVG9TdXBlci9zdXBlckNsYXNzL2JlZm9yZS9BU3VwZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90dXJuUmVmc1RvU3VwZXIvc3VwZXJDbGFzcy9iZWZvcmUvQVN1cGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmYxOWU0ZAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90dXJuUmVmc1RvU3VwZXIvc3VwZXJDbGFzcy9iZWZvcmUvQVN1cGVyLmphdmEKQEAgLTAsMCArMSw2IEBACitwdWJsaWMgY2xhc3MgQVN1cGVyIHsKKyAgcHVibGljIHZvaWQgc2F5Rm9vKCkKKyAgeworICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJGb28iKTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90dXJuUmVmc1RvU3VwZXIvc3VwZXJDbGFzcy9iZWZvcmUvQ2xpZW50LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHVyblJlZnNUb1N1cGVyL3N1cGVyQ2xhc3MvYmVmb3JlL0NsaWVudC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY0NjI2YWQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHVyblJlZnNUb1N1cGVyL3N1cGVyQ2xhc3MvYmVmb3JlL0NsaWVudC5qYXZhCkBAIC0wLDAgKzEsNiBAQAorcHVibGljIGNsYXNzIENsaWVudCB7CisgICAgeworICAgICAgICBBQ2xhc3MgYiA9IG5ldyBBQ2xhc3MoKTsKKyAgICAgICAgYi5zYXlGb28oKTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R1cm5SZWZzVG9TdXBlci90b0FycmF5L2FmdGVyL0EuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90dXJuUmVmc1RvU3VwZXIvdG9BcnJheS9hZnRlci9BLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzNjMzM0YwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90dXJuUmVmc1RvU3VwZXIvdG9BcnJheS9hZnRlci9BLmphdmEKQEAgLTAsMCArMSwyIEBACitjbGFzcyBBIGltcGxlbWVudHMgSSB7Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHVyblJlZnNUb1N1cGVyL3RvQXJyYXkvYWZ0ZXIvQi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R1cm5SZWZzVG9TdXBlci90b0FycmF5L2FmdGVyL0IuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ODhhZmViCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R1cm5SZWZzVG9TdXBlci90b0FycmF5L2FmdGVyL0IuamF2YQpAQCAtMCwwICsxLDExIEBACitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKKworY2xhc3MgQiB7CisgICAgaW50IG1ldGhvZChBcnJheUxpc3QgbGlzdCkgeworICAgICAgICBJW10gYSA9IChJW10pbGlzdC50b0FycmF5KG5ldyBJWzBdKTsKKworICAgICAgICBmb3IoaSA9IDA7IGkgPCBhLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICBJIG1lbWJlciA9IGFbaV07CisgICAgICAgIH0KKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R1cm5SZWZzVG9TdXBlci90b0FycmF5L2FmdGVyL0kuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90dXJuUmVmc1RvU3VwZXIvdG9BcnJheS9hZnRlci9JLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODQ4ODViZQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90dXJuUmVmc1RvU3VwZXIvdG9BcnJheS9hZnRlci9JLmphdmEKQEAgLTAsMCArMSw0IEBACitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK2ludGVyZmFjZSBJIHsKK30KKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R1cm5SZWZzVG9TdXBlci90b0FycmF5L2JlZm9yZS9BLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHVyblJlZnNUb1N1cGVyL3RvQXJyYXkvYmVmb3JlL0EuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43M2MzMzRjCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R1cm5SZWZzVG9TdXBlci90b0FycmF5L2JlZm9yZS9BLmphdmEKQEAgLTAsMCArMSwyIEBACitjbGFzcyBBIGltcGxlbWVudHMgSSB7Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHVyblJlZnNUb1N1cGVyL3RvQXJyYXkvYmVmb3JlL0IuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90dXJuUmVmc1RvU3VwZXIvdG9BcnJheS9iZWZvcmUvQi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVmZjc1ZTMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHVyblJlZnNUb1N1cGVyL3RvQXJyYXkvYmVmb3JlL0IuamF2YQpAQCAtMCwwICsxLDExIEBACitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKKworY2xhc3MgQiB7CisgICAgaW50IG1ldGhvZChBcnJheUxpc3QgbGlzdCkgeworICAgICAgICBBW10gYSA9IChBW10pbGlzdC50b0FycmF5KG5ldyBBWzBdKTsKKworICAgICAgICBmb3IoaSA9IDA7IGkgPCBhLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICBBIG1lbWJlciA9IGFbaV07CisgICAgICAgIH0KKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R1cm5SZWZzVG9TdXBlci90b0FycmF5L2JlZm9yZS9JLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHVyblJlZnNUb1N1cGVyL3RvQXJyYXkvYmVmb3JlL0kuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NDg4NWJlCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R1cm5SZWZzVG9TdXBlci90b0FycmF5L2JlZm9yZS9JLmphdmEKQEAgLTAsMCArMSw0IEBACitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK2ludGVyZmFjZSBJIHsKK30KKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R1cm5SZWZzVG9TdXBlci90cnlXaXRoUmVzb3VyY2VzMS9hZnRlci9UZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHVyblJlZnNUb1N1cGVyL3RyeVdpdGhSZXNvdXJjZXMxL2FmdGVyL1Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZjAwZWEyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R1cm5SZWZzVG9TdXBlci90cnlXaXRoUmVzb3VyY2VzMS9hZnRlci9UZXN0LmphdmEKQEAgLTAsMCArMSwxNiBAQAorY2xhc3MgVGVzdCB7CisgIHZvaWQgdGVzdCgpIHRocm93cyBFeGNlcHRpb24geworICAgIHRyeSAoTXlSZXNvdXJjZUltcGwgciA9IG5ldyBNeVJlc291cmNlSW1wbCgpKSB7CisgICAgICByLmdldE5hbWUoKTsKKyAgICB9CisgIH0KKworICBpbnRlcmZhY2UgTXlSZXNvdXJjZSB7CisgICAgU3RyaW5nIGdldE5hbWUoKTsKKyAgfQorCisgIHN0YXRpYyBjbGFzcyBNeVJlc291cmNlSW1wbCBpbXBsZW1lbnRzIE15UmVzb3VyY2UsIEF1dG9DbG9zZWFibGUgeworICAgIHB1YmxpYyBTdHJpbmcgZ2V0TmFtZSgpIHsgcmV0dXJuICIiOyB9CisgICAgcHVibGljIHZvaWQgY2xvc2UoKSB0aHJvd3MgRXhjZXB0aW9uIHsgfQorICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R1cm5SZWZzVG9TdXBlci90cnlXaXRoUmVzb3VyY2VzMS9iZWZvcmUvVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R1cm5SZWZzVG9TdXBlci90cnlXaXRoUmVzb3VyY2VzMS9iZWZvcmUvVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJmMDBlYTIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHVyblJlZnNUb1N1cGVyL3RyeVdpdGhSZXNvdXJjZXMxL2JlZm9yZS9UZXN0LmphdmEKQEAgLTAsMCArMSwxNiBAQAorY2xhc3MgVGVzdCB7CisgIHZvaWQgdGVzdCgpIHRocm93cyBFeGNlcHRpb24geworICAgIHRyeSAoTXlSZXNvdXJjZUltcGwgciA9IG5ldyBNeVJlc291cmNlSW1wbCgpKSB7CisgICAgICByLmdldE5hbWUoKTsKKyAgICB9CisgIH0KKworICBpbnRlcmZhY2UgTXlSZXNvdXJjZSB7CisgICAgU3RyaW5nIGdldE5hbWUoKTsKKyAgfQorCisgIHN0YXRpYyBjbGFzcyBNeVJlc291cmNlSW1wbCBpbXBsZW1lbnRzIE15UmVzb3VyY2UsIEF1dG9DbG9zZWFibGUgeworICAgIHB1YmxpYyBTdHJpbmcgZ2V0TmFtZSgpIHsgcmV0dXJuICIiOyB9CisgICAgcHVibGljIHZvaWQgY2xvc2UoKSB0aHJvd3MgRXhjZXB0aW9uIHsgfQorICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R1cm5SZWZzVG9TdXBlci90cnlXaXRoUmVzb3VyY2VzMi9hZnRlci9UZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHVyblJlZnNUb1N1cGVyL3RyeVdpdGhSZXNvdXJjZXMyL2FmdGVyL1Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wODIzNjEyOQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90dXJuUmVmc1RvU3VwZXIvdHJ5V2l0aFJlc291cmNlczIvYWZ0ZXIvVGVzdC5qYXZhCkBAIC0wLDAgKzEsMTYgQEAKK2NsYXNzIFRlc3QgeworICB2b2lkIHRlc3QoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICB0cnkgKE15UmVzb3VyY2UgciA9IG5ldyBNeVJlc291cmNlSW1wbCgpKSB7CisgICAgICByLmdldE5hbWUoKTsKKyAgICB9CisgIH0KKworICBpbnRlcmZhY2UgTXlSZXNvdXJjZSBleHRlbmRzIEF1dG9DbG9zZWFibGUgeworICAgIFN0cmluZyBnZXROYW1lKCk7CisgIH0KKworICBzdGF0aWMgY2xhc3MgTXlSZXNvdXJjZUltcGwgaW1wbGVtZW50cyBNeVJlc291cmNlIHsKKyAgICBwdWJsaWMgU3RyaW5nIGdldE5hbWUoKSB7IHJldHVybiAiIjsgfQorICAgIHB1YmxpYyB2b2lkIGNsb3NlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7IH0KKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90dXJuUmVmc1RvU3VwZXIvdHJ5V2l0aFJlc291cmNlczIvYmVmb3JlL1Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90dXJuUmVmc1RvU3VwZXIvdHJ5V2l0aFJlc291cmNlczIvYmVmb3JlL1Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYmVmZjM4Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R1cm5SZWZzVG9TdXBlci90cnlXaXRoUmVzb3VyY2VzMi9iZWZvcmUvVGVzdC5qYXZhCkBAIC0wLDAgKzEsMTYgQEAKK2NsYXNzIFRlc3QgeworICB2b2lkIHRlc3QoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICB0cnkgKE15UmVzb3VyY2VJbXBsIHIgPSBuZXcgTXlSZXNvdXJjZUltcGwoKSkgeworICAgICAgci5nZXROYW1lKCk7CisgICAgfQorICB9CisKKyAgaW50ZXJmYWNlIE15UmVzb3VyY2UgZXh0ZW5kcyBBdXRvQ2xvc2VhYmxlIHsKKyAgICBTdHJpbmcgZ2V0TmFtZSgpOworICB9CisKKyAgc3RhdGljIGNsYXNzIE15UmVzb3VyY2VJbXBsIGltcGxlbWVudHMgTXlSZXNvdXJjZSB7CisgICAgcHVibGljIFN0cmluZyBnZXROYW1lKCkgeyByZXR1cm4gIiI7IH0KKyAgICBwdWJsaWMgdm9pZCBjbG9zZSgpIHRocm93cyBFeGNlcHRpb24geyB9CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHVyblJlZnNUb1N1cGVyL3R5cGVBcmd1bWVudHNQYXJhbS9hZnRlci9DbGF6ei5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R1cm5SZWZzVG9TdXBlci90eXBlQXJndW1lbnRzUGFyYW0vYWZ0ZXIvQ2xhenouamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOTJiODhkCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R1cm5SZWZzVG9TdXBlci90eXBlQXJndW1lbnRzUGFyYW0vYWZ0ZXIvQ2xhenouamF2YQpAQCAtMCwwICsxLDIxIEBACitpbnRlcmZhY2UgSW50RiB7Cit9CisKK2ludGVyZmFjZSBGYWN0b3J5PEUgZXh0ZW5kcyBJbnRGPiB7CisgICAgRSBjcmVhdGUoKTsKKworICAgIHZvaWQgc2F2ZShFIG9iaik7CisKKyAgICBzdGF0aWMgY2xhc3MgaGVscGVyIHsKKyAgICAgICAgc3RhdGljIEZhY3Rvcnk8SW50Rj4gZ2V0KCkgeworICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3B1YmxpYyBjbGFzcyBDbGF6eiBpbXBsZW1lbnRzIEludEYgeworICAgIHZvaWQgYmFyKCkgeworICAgICAgICBJbnRGIHkgPSBGYWN0b3J5LmhlbHBlci5nZXQoKS5jcmVhdGUoKTsKKyAgICAgICAgRmFjdG9yeS5oZWxwZXIuZ2V0KCkuc2F2ZSh5KTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHVyblJlZnNUb1N1cGVyL3R5cGVBcmd1bWVudHNQYXJhbS9iZWZvcmUvQ2xhenouamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90dXJuUmVmc1RvU3VwZXIvdHlwZUFyZ3VtZW50c1BhcmFtL2JlZm9yZS9DbGF6ei5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI2MDFjYjgKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHVyblJlZnNUb1N1cGVyL3R5cGVBcmd1bWVudHNQYXJhbS9iZWZvcmUvQ2xhenouamF2YQpAQCAtMCwwICsxLDIxIEBACitpbnRlcmZhY2UgSW50RiB7Cit9CisKK2ludGVyZmFjZSBGYWN0b3J5PEUgZXh0ZW5kcyBJbnRGPiB7CisgICAgRSBjcmVhdGUoKTsKKworICAgIHZvaWQgc2F2ZShFIG9iaik7CisKKyAgICBzdGF0aWMgY2xhc3MgaGVscGVyIHsKKyAgICAgICAgc3RhdGljIEZhY3Rvcnk8SW50Rj4gZ2V0KCkgeworICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3B1YmxpYyBjbGFzcyBDbGF6eiBpbXBsZW1lbnRzIEludEYgeworICAgIHZvaWQgYmFyKCkgeworICAgICAgICBDbGF6eiB5ID0gRmFjdG9yeS5oZWxwZXIuZ2V0KCkuY3JlYXRlKCk7CisgICAgICAgIEZhY3RvcnkuaGVscGVyLmdldCgpLnNhdmUoeSk7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R1cm5SZWZzVG9TdXBlci90eXBlQXJndW1lbnRzUkgvYWZ0ZXIvSS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R1cm5SZWZzVG9TdXBlci90eXBlQXJndW1lbnRzUkgvYWZ0ZXIvSS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNjODgyOTQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHVyblJlZnNUb1N1cGVyL3R5cGVBcmd1bWVudHNSSC9hZnRlci9JLmphdmEKQEAgLTAsMCArMSBAQAoraW50ZXJmYWNlIEl7fQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90dXJuUmVmc1RvU3VwZXIvdHlwZUFyZ3VtZW50c1JIL2FmdGVyL0lJbXBsLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHVyblJlZnNUb1N1cGVyL3R5cGVBcmd1bWVudHNSSC9hZnRlci9JSW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYwNzAwODUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHVyblJlZnNUb1N1cGVyL3R5cGVBcmd1bWVudHNSSC9hZnRlci9JSW1wbC5qYXZhCkBAIC0wLDAgKzEgQEAKK2NsYXNzIElJbXBsIGltcGxlbWVudHMgSXt9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R1cm5SZWZzVG9TdXBlci90eXBlQXJndW1lbnRzUkgvYWZ0ZXIvVS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R1cm5SZWZzVG9TdXBlci90eXBlQXJndW1lbnRzUkgvYWZ0ZXIvVS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY0NGY3YjkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHVyblJlZnNUb1N1cGVyL3R5cGVBcmd1bWVudHNSSC9hZnRlci9VLmphdmEKQEAgLTAsMCArMSw2IEBACitpbXBvcnQgamF2YS51dGlsLio7CitjbGFzcyBVIHsKKyAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworICAgIExpc3Q8TGlzdDxJPj4gbCA9IG5ldyBBcnJheUxpdHM8TGlzdDxJPj4oKTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90dXJuUmVmc1RvU3VwZXIvdHlwZUFyZ3VtZW50c1JIL2JlZm9yZS9JLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHVyblJlZnNUb1N1cGVyL3R5cGVBcmd1bWVudHNSSC9iZWZvcmUvSS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNjODgyOTQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHVyblJlZnNUb1N1cGVyL3R5cGVBcmd1bWVudHNSSC9iZWZvcmUvSS5qYXZhCkBAIC0wLDAgKzEgQEAKK2ludGVyZmFjZSBJe30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHVyblJlZnNUb1N1cGVyL3R5cGVBcmd1bWVudHNSSC9iZWZvcmUvSUltcGwuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90dXJuUmVmc1RvU3VwZXIvdHlwZUFyZ3VtZW50c1JIL2JlZm9yZS9JSW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYwNzAwODUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHVyblJlZnNUb1N1cGVyL3R5cGVBcmd1bWVudHNSSC9iZWZvcmUvSUltcGwuamF2YQpAQCAtMCwwICsxIEBACitjbGFzcyBJSW1wbCBpbXBsZW1lbnRzIEl7fQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90dXJuUmVmc1RvU3VwZXIvdHlwZUFyZ3VtZW50c1JIL2JlZm9yZS9VLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHVyblJlZnNUb1N1cGVyL3R5cGVBcmd1bWVudHNSSC9iZWZvcmUvVS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjMzAwMmYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHVyblJlZnNUb1N1cGVyL3R5cGVBcmd1bWVudHNSSC9iZWZvcmUvVS5qYXZhCkBAIC0wLDAgKzEsNiBAQAoraW1wb3J0IGphdmEudXRpbC4qOworY2xhc3MgVSB7CisgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKyAgICBMaXN0PExpc3Q8SUltcGw+PiBsID0gbmV3IEFycmF5TGl0czxMaXN0PElJbXBsPj4oKTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90dXJuUmVmc1RvU3VwZXIvdHlwZUFyZ3VtZW50c1JIMS9hZnRlci9JLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHVyblJlZnNUb1N1cGVyL3R5cGVBcmd1bWVudHNSSDEvYWZ0ZXIvSS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNjODgyOTQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHVyblJlZnNUb1N1cGVyL3R5cGVBcmd1bWVudHNSSDEvYWZ0ZXIvSS5qYXZhCkBAIC0wLDAgKzEgQEAKK2ludGVyZmFjZSBJe30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHVyblJlZnNUb1N1cGVyL3R5cGVBcmd1bWVudHNSSDEvYWZ0ZXIvSUltcGwuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90dXJuUmVmc1RvU3VwZXIvdHlwZUFyZ3VtZW50c1JIMS9hZnRlci9JSW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYwNzAwODUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHVyblJlZnNUb1N1cGVyL3R5cGVBcmd1bWVudHNSSDEvYWZ0ZXIvSUltcGwuamF2YQpAQCAtMCwwICsxIEBACitjbGFzcyBJSW1wbCBpbXBsZW1lbnRzIEl7fQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90dXJuUmVmc1RvU3VwZXIvdHlwZUFyZ3VtZW50c1JIMS9hZnRlci9VLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHVyblJlZnNUb1N1cGVyL3R5cGVBcmd1bWVudHNSSDEvYWZ0ZXIvVS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVlOGU0MzNlCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R1cm5SZWZzVG9TdXBlci90eXBlQXJndW1lbnRzUkgxL2FmdGVyL1UuamF2YQpAQCAtMCwwICsxLDYgQEAKK2ltcG9ydCBqYXZhLnV0aWwuKjsKK2NsYXNzIFUgeworICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisgICAgTGlzdDxJPiBsID0gbmV3IEFycmF5TGl0czxJPigpOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R1cm5SZWZzVG9TdXBlci90eXBlQXJndW1lbnRzUkgxL2JlZm9yZS9JLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHVyblJlZnNUb1N1cGVyL3R5cGVBcmd1bWVudHNSSDEvYmVmb3JlL0kuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYzg4Mjk0Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R1cm5SZWZzVG9TdXBlci90eXBlQXJndW1lbnRzUkgxL2JlZm9yZS9JLmphdmEKQEAgLTAsMCArMSBAQAoraW50ZXJmYWNlIEl7fQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90dXJuUmVmc1RvU3VwZXIvdHlwZUFyZ3VtZW50c1JIMS9iZWZvcmUvSUltcGwuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90dXJuUmVmc1RvU3VwZXIvdHlwZUFyZ3VtZW50c1JIMS9iZWZvcmUvSUltcGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MDcwMDg1Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R1cm5SZWZzVG9TdXBlci90eXBlQXJndW1lbnRzUkgxL2JlZm9yZS9JSW1wbC5qYXZhCkBAIC0wLDAgKzEgQEAKK2NsYXNzIElJbXBsIGltcGxlbWVudHMgSXt9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R1cm5SZWZzVG9TdXBlci90eXBlQXJndW1lbnRzUkgxL2JlZm9yZS9VLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHVyblJlZnNUb1N1cGVyL3R5cGVBcmd1bWVudHNSSDEvYmVmb3JlL1UuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZTIwM2RmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R1cm5SZWZzVG9TdXBlci90eXBlQXJndW1lbnRzUkgxL2JlZm9yZS9VLmphdmEKQEAgLTAsMCArMSw2IEBACitpbXBvcnQgamF2YS51dGlsLio7CitjbGFzcyBVIHsKKyAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworICAgIExpc3Q8SUltcGw+IGwgPSBuZXcgQXJyYXlMaXRzPElJbXBsPigpOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R1cm5SZWZzVG9TdXBlci91c2VBc0FyZy9hZnRlci9BQ2xhc3MuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90dXJuUmVmc1RvU3VwZXIvdXNlQXNBcmcvYWZ0ZXIvQUNsYXNzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGUxOTYwMQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90dXJuUmVmc1RvU3VwZXIvdXNlQXNBcmcvYWZ0ZXIvQUNsYXNzLmphdmEKQEAgLTAsMCArMSwzIEBACisKK3B1YmxpYyBjbGFzcyBBQ2xhc3MgaW1wbGVtZW50cyBSdW5uYWJsZSwgSXsKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90dXJuUmVmc1RvU3VwZXIvdXNlQXNBcmcvYWZ0ZXIvQ2xpZW50LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHVyblJlZnNUb1N1cGVyL3VzZUFzQXJnL2FmdGVyL0NsaWVudC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU2MTM2MTQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHVyblJlZnNUb1N1cGVyL3VzZUFzQXJnL2FmdGVyL0NsaWVudC5qYXZhCkBAIC0wLDAgKzEsMTQgQEAKKworaW1wb3J0IGphdmF4LnN3aW5nLio7CisKK3B1YmxpYyBjbGFzcyBDbGllbnQgeworICB7CisgICAgQUNsYXNzIGFDbGFzcyA9IG5ldyBBQ2xhc3MoKTsKKyAgICBTd2luZ1V0aWxpdGllcy5pbnZva2VMYXRlcihhQ2xhc3MpOworICB9CisgIAorICB2b2lkIG1ldGhvZCh2b2lkKSB7CisgICAgIFJ1bm5hYmxlIHIgPSBuZXcgQUNsYXNzKCk7CisgICAgIFN3aW5nVXRpbGl0aWVzLmludm9rZUxhdGVyKHIpOworICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHVyblJlZnNUb1N1cGVyL3VzZUFzQXJnL2FmdGVyL0kuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90dXJuUmVmc1RvU3VwZXIvdXNlQXNBcmcvYWZ0ZXIvSS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU5YzRjMGQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHVyblJlZnNUb1N1cGVyL3VzZUFzQXJnL2FmdGVyL0kuamF2YQpAQCAtMCwwICsxLDMgQEAKKworcHVibGljIGludGVyZmFjZSBJIHsKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90dXJuUmVmc1RvU3VwZXIvdXNlQXNBcmcvYmVmb3JlL0FDbGFzcy5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R1cm5SZWZzVG9TdXBlci91c2VBc0FyZy9iZWZvcmUvQUNsYXNzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGUxOTYwMQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90dXJuUmVmc1RvU3VwZXIvdXNlQXNBcmcvYmVmb3JlL0FDbGFzcy5qYXZhCkBAIC0wLDAgKzEsMyBAQAorCitwdWJsaWMgY2xhc3MgQUNsYXNzIGltcGxlbWVudHMgUnVubmFibGUsIEl7Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHVyblJlZnNUb1N1cGVyL3VzZUFzQXJnL2JlZm9yZS9DbGllbnQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90dXJuUmVmc1RvU3VwZXIvdXNlQXNBcmcvYmVmb3JlL0NsaWVudC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU2MTM2MTQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHVyblJlZnNUb1N1cGVyL3VzZUFzQXJnL2JlZm9yZS9DbGllbnQuamF2YQpAQCAtMCwwICsxLDE0IEBACisKK2ltcG9ydCBqYXZheC5zd2luZy4qOworCitwdWJsaWMgY2xhc3MgQ2xpZW50IHsKKyAgeworICAgIEFDbGFzcyBhQ2xhc3MgPSBuZXcgQUNsYXNzKCk7CisgICAgU3dpbmdVdGlsaXRpZXMuaW52b2tlTGF0ZXIoYUNsYXNzKTsKKyAgfQorICAKKyAgdm9pZCBtZXRob2Qodm9pZCkgeworICAgICBSdW5uYWJsZSByID0gbmV3IEFDbGFzcygpOworICAgICBTd2luZ1V0aWxpdGllcy5pbnZva2VMYXRlcihyKTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R1cm5SZWZzVG9TdXBlci91c2VBc0FyZy9iZWZvcmUvSS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R1cm5SZWZzVG9TdXBlci91c2VBc0FyZy9iZWZvcmUvSS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU5YzRjMGQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHVyblJlZnNUb1N1cGVyL3VzZUFzQXJnL2JlZm9yZS9JLmphdmEKQEAgLTAsMCArMSwzIEBACisKK3B1YmxpYyBpbnRlcmZhY2UgSSB7Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDAxL2FmdGVyL1Rlc3QuMS5pdGVtcyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MDEvYWZ0ZXIvVGVzdC4xLml0ZW1zCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM5NGEyNjEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDAxL2FmdGVyL1Rlc3QuMS5pdGVtcwpAQCAtMCwwICsxIEBACitMaW5rZWRMaXN0XG5Qc2lGaWVsZDp4CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDAxL2FmdGVyL1Rlc3QuaXRlbXMgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDAxL2FmdGVyL1Rlc3QuaXRlbXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzk0YTI2MQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MDEvYWZ0ZXIvVGVzdC5pdGVtcwpAQCAtMCwwICsxIEBACitMaW5rZWRMaXN0XG5Qc2lGaWVsZDp4CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDAxL2FmdGVyL3Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MDEvYWZ0ZXIvdGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE3YWYwM2MKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDAxL2FmdGVyL3Rlc3QuamF2YQpAQCAtMCwwICsxLDIwIEBACitjbGFzcyBMaW5rZWRMaXN0PFQ+eworICAgIFQgdDsKKyAgICBwdWJsaWMgVCBnZXQoKXtyZXR1cm4gdDt9CisgICAgcHVibGljIHZvaWQgc2V0IChUIHQpeworCXRoaXMudCA9IHQ7CisgICAgfSAgICAKK30KKworY2xhc3MgU2ltcGxlIHsKK30KKworY2xhc3MgVGVzdHsKKyAgICBMaW5rZWRMaXN0PFNpbXBsZT4gazsKKyAgICBMaW5rZWRMaXN0IHg7CisgICAgCisgICAgdm9pZCBmKCl7CisJeD1rOworICAgICAgICB4LnNldChuZXcgSW50ZWdlcigzKSk7CisgICAgfSAgIAorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QwMS9iZWZvcmUvdGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QwMS9iZWZvcmUvdGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE3YWYwM2MKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDAxL2JlZm9yZS90ZXN0LmphdmEKQEAgLTAsMCArMSwyMCBAQAorY2xhc3MgTGlua2VkTGlzdDxUPnsKKyAgICBUIHQ7CisgICAgcHVibGljIFQgZ2V0KCl7cmV0dXJuIHQ7fQorICAgIHB1YmxpYyB2b2lkIHNldCAoVCB0KXsKKwl0aGlzLnQgPSB0OworICAgIH0gICAgCit9CisKK2NsYXNzIFNpbXBsZSB7Cit9CisKK2NsYXNzIFRlc3R7CisgICAgTGlua2VkTGlzdDxTaW1wbGU+IGs7CisgICAgTGlua2VkTGlzdCB4OworICAgIAorICAgIHZvaWQgZigpeworCXg9azsKKyAgICAgICAgeC5zZXQobmV3IEludGVnZXIoMykpOworICAgIH0gICAKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MDIvYWZ0ZXIvVGVzdC4xLml0ZW1zIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QwMi9hZnRlci9UZXN0LjEuaXRlbXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODY3MWI0YwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MDIvYWZ0ZXIvVGVzdC4xLml0ZW1zCkBAIC0wLDAgKzEgQEAKK0xpbmtlZExpc3Q8amF2YS5sYW5nLkludGVnZXI+XG5Qc2lGaWVsZDp4CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDAyL2FmdGVyL1Rlc3QuaXRlbXMgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDAyL2FmdGVyL1Rlc3QuaXRlbXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzk0YTI2MQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MDIvYWZ0ZXIvVGVzdC5pdGVtcwpAQCAtMCwwICsxIEBACitMaW5rZWRMaXN0XG5Qc2lGaWVsZDp4CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDAyL2FmdGVyL3Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MDIvYWZ0ZXIvdGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEyOWRiZDMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDAyL2FmdGVyL3Rlc3QuamF2YQpAQCAtMCwwICsxLDE5IEBACitjbGFzcyBMaW5rZWRMaXN0PFQ+eworICAgIFQgdDsKKyAgICBwdWJsaWMgVCBnZXQoKXtyZXR1cm4gdDt9CisgICAgcHVibGljIHZvaWQgc2V0IChUIHQpeworCXRoaXMudCA9IHQ7CisgICAgfSAgICAKK30KKworY2xhc3MgU2ltcGxlIHsKK30KKworY2xhc3MgVGVzdHsKKyAgICBMaW5rZWRMaXN0PFNpbXBsZT4gazsKKyAgICBMaW5rZWRMaXN0IHg7CisgICAgCisgICAgdm9pZCBmKCl7CisJeC5zZXQobmV3IEludGVnZXIoKSk7CisgICAgfSAgIAorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QwMi9iZWZvcmUvdGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QwMi9iZWZvcmUvdGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEyOWRiZDMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDAyL2JlZm9yZS90ZXN0LmphdmEKQEAgLTAsMCArMSwxOSBAQAorY2xhc3MgTGlua2VkTGlzdDxUPnsKKyAgICBUIHQ7CisgICAgcHVibGljIFQgZ2V0KCl7cmV0dXJuIHQ7fQorICAgIHB1YmxpYyB2b2lkIHNldCAoVCB0KXsKKwl0aGlzLnQgPSB0OworICAgIH0gICAgCit9CisKK2NsYXNzIFNpbXBsZSB7Cit9CisKK2NsYXNzIFRlc3R7CisgICAgTGlua2VkTGlzdDxTaW1wbGU+IGs7CisgICAgTGlua2VkTGlzdCB4OworICAgIAorICAgIHZvaWQgZigpeworCXguc2V0KG5ldyBJbnRlZ2VyKCkpOworICAgIH0gICAKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MDMvYWZ0ZXIvVGVzdC4xLml0ZW1zIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QwMy9hZnRlci9UZXN0LjEuaXRlbXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWI0Y2ZkMgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MDMvYWZ0ZXIvVGVzdC4xLml0ZW1zCkBAIC0wLDAgKzEgQEAKK0xpbmtlZExpc3Q8U2ltcGxlPlxuUHNpRmllbGQ6eApkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QwMy9hZnRlci9UZXN0Lml0ZW1zIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QwMy9hZnRlci9UZXN0Lml0ZW1zCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM5NGEyNjEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDAzL2FmdGVyL1Rlc3QuaXRlbXMKQEAgLTAsMCArMSBAQAorTGlua2VkTGlzdFxuUHNpRmllbGQ6eApkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QwMy9hZnRlci90ZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDAzL2FmdGVyL3Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMmVkM2ZjCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QwMy9hZnRlci90ZXN0LmphdmEKQEAgLTAsMCArMSwxOSBAQAorY2xhc3MgTGlua2VkTGlzdDxUPnsKKyAgICBUIHQ7CisgICAgcHVibGljIFQgZ2V0KCl7cmV0dXJuIHQ7fQorICAgIHB1YmxpYyB2b2lkIHNldCAoVCB0KXsKKwl0aGlzLnQgPSB0OworICAgIH0gICAgCit9CisKK2NsYXNzIFNpbXBsZSB7Cit9CisKK2NsYXNzIFRlc3R7CisgICAgTGlua2VkTGlzdDxTaW1wbGU+IGs7CisgICAgTGlua2VkTGlzdCB4OworICAgIAorICAgIHZvaWQgZigpeworCXg9azsKKyAgICB9ICAgCit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDAzL2JlZm9yZS90ZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDAzL2JlZm9yZS90ZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTJlZDNmYwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MDMvYmVmb3JlL3Rlc3QuamF2YQpAQCAtMCwwICsxLDE5IEBACitjbGFzcyBMaW5rZWRMaXN0PFQ+eworICAgIFQgdDsKKyAgICBwdWJsaWMgVCBnZXQoKXtyZXR1cm4gdDt9CisgICAgcHVibGljIHZvaWQgc2V0IChUIHQpeworCXRoaXMudCA9IHQ7CisgICAgfSAgICAKK30KKworY2xhc3MgU2ltcGxlIHsKK30KKworY2xhc3MgVGVzdHsKKyAgICBMaW5rZWRMaXN0PFNpbXBsZT4gazsKKyAgICBMaW5rZWRMaXN0IHg7CisgICAgCisgICAgdm9pZCBmKCl7CisJeD1rOworICAgIH0gICAKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MDQvYWZ0ZXIvVGVzdC4xLml0ZW1zIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QwNC9hZnRlci9UZXN0LjEuaXRlbXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWI0Y2ZkMgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MDQvYWZ0ZXIvVGVzdC4xLml0ZW1zCkBAIC0wLDAgKzEgQEAKK0xpbmtlZExpc3Q8U2ltcGxlPlxuUHNpRmllbGQ6eApkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QwNC9hZnRlci9UZXN0Lml0ZW1zIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QwNC9hZnRlci9UZXN0Lml0ZW1zCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM5NGEyNjEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDA0L2FmdGVyL1Rlc3QuaXRlbXMKQEAgLTAsMCArMSBAQAorTGlua2VkTGlzdFxuUHNpRmllbGQ6eApkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QwNC9hZnRlci90ZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDA0L2FmdGVyL3Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lY2I0MWM2Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QwNC9hZnRlci90ZXN0LmphdmEKQEAgLTAsMCArMSwxOCBAQAorY2xhc3MgTGlua2VkTGlzdDxUPnsKKyAgICBUIHQ7CisgICAgcHVibGljIFQgZ2V0KCl7cmV0dXJuIHQ7fQorICAgIHB1YmxpYyB2b2lkIHNldCAoVCB0KXsKKwl0aGlzLnQgPSB0OworICAgIH0gICAgCit9CisKK2NsYXNzIFNpbXBsZSB7Cit9CisKK2NsYXNzIFRlc3R7CisgICAgTGlua2VkTGlzdCB4OworICAgIAorICAgIHZvaWQgZigpeworCVNpbXBsZSBzID0gKFNpbXBsZSkgeC5nZXQoKTsKKyAgICB9ICAgCit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDA0L2JlZm9yZS90ZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDA0L2JlZm9yZS90ZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWNiNDFjNgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MDQvYmVmb3JlL3Rlc3QuamF2YQpAQCAtMCwwICsxLDE4IEBACitjbGFzcyBMaW5rZWRMaXN0PFQ+eworICAgIFQgdDsKKyAgICBwdWJsaWMgVCBnZXQoKXtyZXR1cm4gdDt9CisgICAgcHVibGljIHZvaWQgc2V0IChUIHQpeworCXRoaXMudCA9IHQ7CisgICAgfSAgICAKK30KKworY2xhc3MgU2ltcGxlIHsKK30KKworY2xhc3MgVGVzdHsKKyAgICBMaW5rZWRMaXN0IHg7CisgICAgCisgICAgdm9pZCBmKCl7CisJU2ltcGxlIHMgPSAoU2ltcGxlKSB4LmdldCgpOworICAgIH0gICAKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MDUvYWZ0ZXIvVGVzdC4xLml0ZW1zIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QwNS9hZnRlci9UZXN0LjEuaXRlbXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWI0Y2ZkMgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MDUvYWZ0ZXIvVGVzdC4xLml0ZW1zCkBAIC0wLDAgKzEgQEAKK0xpbmtlZExpc3Q8U2ltcGxlPlxuUHNpRmllbGQ6eApkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QwNS9hZnRlci9UZXN0Lml0ZW1zIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QwNS9hZnRlci9UZXN0Lml0ZW1zCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM5NGEyNjEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDA1L2FmdGVyL1Rlc3QuaXRlbXMKQEAgLTAsMCArMSBAQAorTGlua2VkTGlzdFxuUHNpRmllbGQ6eApkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QwNS9hZnRlci90ZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDA1L2FmdGVyL3Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MDUxNjU5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QwNS9hZnRlci90ZXN0LmphdmEKQEAgLTAsMCArMSwxOSBAQAorY2xhc3MgTGlua2VkTGlzdDxUPnsKKyAgICBUIHQ7CisgICAgcHVibGljIFQgZ2V0KCl7cmV0dXJuIHQ7fQorICAgIHB1YmxpYyB2b2lkIHNldCAoVCB0KXsKKwl0aGlzLnQgPSB0OworICAgIH0gICAgCit9CisKK2NsYXNzIFNpbXBsZSB7Cit9CisKK2NsYXNzIFRlc3R7CisgICAgTGlua2VkTGlzdCB4OworICAgIExpbmtlZExpc3Q8U2ltcGxlPiB5OworICAgIAorICAgIHZvaWQgZigpeworCXkuc2V0KChTaW1wbGUpIHguZ2V0KCkpOworICAgIH0gICAKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MDUvYmVmb3JlL3Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MDUvYmVmb3JlL3Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MDUxNjU5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QwNS9iZWZvcmUvdGVzdC5qYXZhCkBAIC0wLDAgKzEsMTkgQEAKK2NsYXNzIExpbmtlZExpc3Q8VD57CisgICAgVCB0OworICAgIHB1YmxpYyBUIGdldCgpe3JldHVybiB0O30KKyAgICBwdWJsaWMgdm9pZCBzZXQgKFQgdCl7CisJdGhpcy50ID0gdDsKKyAgICB9ICAgIAorfQorCitjbGFzcyBTaW1wbGUgeworfQorCitjbGFzcyBUZXN0eworICAgIExpbmtlZExpc3QgeDsKKyAgICBMaW5rZWRMaXN0PFNpbXBsZT4geTsKKyAgICAKKyAgICB2b2lkIGYoKXsKKwl5LnNldCgoU2ltcGxlKSB4LmdldCgpKTsKKyAgICB9ICAgCit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDA2L2FmdGVyL1Rlc3QuMS5pdGVtcyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MDYvYWZ0ZXIvVGVzdC4xLml0ZW1zCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM2MDMyOTAKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDA2L2FmdGVyL1Rlc3QuMS5pdGVtcwpAQCAtMCwwICsxLDIgQEAKK0xpbmtlZExpc3RcblBzaUZpZWxkOngKK0xpbmtlZExpc3RcblBzaUZpZWxkOnkKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MDYvYWZ0ZXIvVGVzdC5pdGVtcyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MDYvYWZ0ZXIvVGVzdC5pdGVtcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNjAzMjkwCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QwNi9hZnRlci9UZXN0Lml0ZW1zCkBAIC0wLDAgKzEsMiBAQAorTGlua2VkTGlzdFxuUHNpRmllbGQ6eAorTGlua2VkTGlzdFxuUHNpRmllbGQ6eQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QwNi9hZnRlci90ZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDA2L2FmdGVyL3Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjRlMjM1Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QwNi9hZnRlci90ZXN0LmphdmEKQEAgLTAsMCArMSwxOSBAQAorY2xhc3MgTGlua2VkTGlzdDxUPnsKKyAgICBUIHQ7CisgICAgcHVibGljIFQgZ2V0KCl7cmV0dXJuIHQ7fQorICAgIHB1YmxpYyB2b2lkIHNldCAoVCB0KXsKKwl0aGlzLnQgPSB0OworICAgIH0gICAgCit9CisKK2NsYXNzIFNpbXBsZSB7Cit9CisKK2NsYXNzIFRlc3R7CisgICAgTGlua2VkTGlzdCB4OworICAgIExpbmtlZExpc3QgeTsKKyAgICAKKyAgICB2b2lkIGYoKXsKKwl5LnNldCh4LmdldCgpKTsKKyAgICB9ICAgCit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDA2L2JlZm9yZS90ZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDA2L2JlZm9yZS90ZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY0ZTIzNQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MDYvYmVmb3JlL3Rlc3QuamF2YQpAQCAtMCwwICsxLDE5IEBACitjbGFzcyBMaW5rZWRMaXN0PFQ+eworICAgIFQgdDsKKyAgICBwdWJsaWMgVCBnZXQoKXtyZXR1cm4gdDt9CisgICAgcHVibGljIHZvaWQgc2V0IChUIHQpeworCXRoaXMudCA9IHQ7CisgICAgfSAgICAKK30KKworY2xhc3MgU2ltcGxlIHsKK30KKworY2xhc3MgVGVzdHsKKyAgICBMaW5rZWRMaXN0IHg7CisgICAgTGlua2VkTGlzdCB5OworICAgIAorICAgIHZvaWQgZigpeworCXkuc2V0KHguZ2V0KCkpOworICAgIH0gICAKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MDcvYWZ0ZXIvVGVzdC4xLml0ZW1zIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QwNy9hZnRlci9UZXN0LjEuaXRlbXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWZhOGVhYwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MDcvYWZ0ZXIvVGVzdC4xLml0ZW1zCkBAIC0wLDAgKzEsMiBAQAorTGlua2VkTGlzdDxTaW1wbGU+XG5Qc2lGaWVsZDp4CitMaW5rZWRMaXN0PFNpbXBsZT5cblBzaUZpZWxkOnkKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MDcvYWZ0ZXIvVGVzdC5pdGVtcyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MDcvYWZ0ZXIvVGVzdC5pdGVtcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNjAzMjkwCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QwNy9hZnRlci9UZXN0Lml0ZW1zCkBAIC0wLDAgKzEsMiBAQAorTGlua2VkTGlzdFxuUHNpRmllbGQ6eAorTGlua2VkTGlzdFxuUHNpRmllbGQ6eQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QwNy9hZnRlci90ZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDA3L2FmdGVyL3Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ODM1NDE0Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QwNy9hZnRlci90ZXN0LmphdmEKQEAgLTAsMCArMSwyMCBAQAorY2xhc3MgTGlua2VkTGlzdDxUPnsKKyAgICBUIHQ7CisgICAgcHVibGljIFQgZ2V0KCl7cmV0dXJuIHQ7fQorICAgIHB1YmxpYyB2b2lkIHNldCAoVCB0KXsKKwl0aGlzLnQgPSB0OworICAgIH0gICAgCit9CisKK2NsYXNzIFNpbXBsZSB7Cit9CisKK2NsYXNzIFRlc3R7CisgICAgTGlua2VkTGlzdCB4OworICAgIExpbmtlZExpc3QgeTsKKyAgICAKKyAgICB2b2lkIGYoKXsKKwl5LnNldCh4LmdldCgpKTsKKwlTaW1wbGUgdCA9IChTaW1wbGUpIHguZ2V0KCk7CisgICAgfSAgIAorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QwNy9iZWZvcmUvdGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QwNy9iZWZvcmUvdGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc4MzU0MTQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDA3L2JlZm9yZS90ZXN0LmphdmEKQEAgLTAsMCArMSwyMCBAQAorY2xhc3MgTGlua2VkTGlzdDxUPnsKKyAgICBUIHQ7CisgICAgcHVibGljIFQgZ2V0KCl7cmV0dXJuIHQ7fQorICAgIHB1YmxpYyB2b2lkIHNldCAoVCB0KXsKKwl0aGlzLnQgPSB0OworICAgIH0gICAgCit9CisKK2NsYXNzIFNpbXBsZSB7Cit9CisKK2NsYXNzIFRlc3R7CisgICAgTGlua2VkTGlzdCB4OworICAgIExpbmtlZExpc3QgeTsKKyAgICAKKyAgICB2b2lkIGYoKXsKKwl5LnNldCh4LmdldCgpKTsKKwlTaW1wbGUgdCA9IChTaW1wbGUpIHguZ2V0KCk7CisgICAgfSAgIAorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QwOC9hZnRlci9UZXN0LjEuaXRlbXMgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDA4L2FmdGVyL1Rlc3QuMS5pdGVtcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNzk0OTgxCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QwOC9hZnRlci9UZXN0LjEuaXRlbXMKQEAgLTAsMCArMSwyIEBACitMaW5rZWRMaXN0PFNpbXBsZT5cblBzaUZpZWxkOngKK0xpbmtlZExpc3Q8amF2YS5sYW5nLk9iamVjdD5cblBzaUZpZWxkOnkKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MDgvYWZ0ZXIvVGVzdC5pdGVtcyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MDgvYWZ0ZXIvVGVzdC5pdGVtcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNjAzMjkwCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QwOC9hZnRlci9UZXN0Lml0ZW1zCkBAIC0wLDAgKzEsMiBAQAorTGlua2VkTGlzdFxuUHNpRmllbGQ6eAorTGlua2VkTGlzdFxuUHNpRmllbGQ6eQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QwOC9hZnRlci90ZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDA4L2FmdGVyL3Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOGJlMTU5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QwOC9hZnRlci90ZXN0LmphdmEKQEAgLTAsMCArMSwyMSBAQAorY2xhc3MgTGlua2VkTGlzdDxUPnsKKyAgICBUIHQ7CisgICAgcHVibGljIFQgZ2V0KCl7cmV0dXJuIHQ7fQorICAgIHB1YmxpYyB2b2lkIHNldCAoVCB0KXsKKwl0aGlzLnQgPSB0OworICAgIH0gICAgCit9CisKK2NsYXNzIFNpbXBsZSB7Cit9CisKK2NsYXNzIFRlc3R7CisgICAgTGlua2VkTGlzdCB4OworICAgIExpbmtlZExpc3QgeTsKKyAgICAKKyAgICB2b2lkIGYoKXsKKwl5LnNldCh4LmdldCgpKTsKKwlTaW1wbGUgdCA9IChTaW1wbGUpIHguZ2V0KCk7CisJeS5zZXQobmV3IFRlc3QoKSk7CisgICAgfSAgIAorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QwOC9iZWZvcmUvdGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QwOC9iZWZvcmUvdGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM4YmUxNTkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDA4L2JlZm9yZS90ZXN0LmphdmEKQEAgLTAsMCArMSwyMSBAQAorY2xhc3MgTGlua2VkTGlzdDxUPnsKKyAgICBUIHQ7CisgICAgcHVibGljIFQgZ2V0KCl7cmV0dXJuIHQ7fQorICAgIHB1YmxpYyB2b2lkIHNldCAoVCB0KXsKKwl0aGlzLnQgPSB0OworICAgIH0gICAgCit9CisKK2NsYXNzIFNpbXBsZSB7Cit9CisKK2NsYXNzIFRlc3R7CisgICAgTGlua2VkTGlzdCB4OworICAgIExpbmtlZExpc3QgeTsKKyAgICAKKyAgICB2b2lkIGYoKXsKKwl5LnNldCh4LmdldCgpKTsKKwlTaW1wbGUgdCA9IChTaW1wbGUpIHguZ2V0KCk7CisJeS5zZXQobmV3IFRlc3QoKSk7CisgICAgfSAgIAorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QwOS9hZnRlci9UZXN0LjEuaXRlbXMgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDA5L2FmdGVyL1Rlc3QuMS5pdGVtcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNTZhNjM2Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QwOS9hZnRlci9UZXN0LjEuaXRlbXMKQEAgLTAsMCArMSwyIEBACitMaW5rZWRMaXN0W11cblBzaUZpZWxkOngKK0xpbmtlZExpc3RcblBzaUZpZWxkOnkKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MDkvYWZ0ZXIvVGVzdC5pdGVtcyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MDkvYWZ0ZXIvVGVzdC5pdGVtcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNTZhNjM2Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QwOS9hZnRlci9UZXN0Lml0ZW1zCkBAIC0wLDAgKzEsMiBAQAorTGlua2VkTGlzdFtdXG5Qc2lGaWVsZDp4CitMaW5rZWRMaXN0XG5Qc2lGaWVsZDp5CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDA5L2FmdGVyL3Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MDkvYWZ0ZXIvdGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ4MzE0MGYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDA5L2FmdGVyL3Rlc3QuamF2YQpAQCAtMCwwICsxLDE5IEBACitjbGFzcyBMaW5rZWRMaXN0PFQ+eworICAgIFQgdDsKKyAgICBwdWJsaWMgVCBnZXQoKXtyZXR1cm4gdDt9CisgICAgcHVibGljIHZvaWQgc2V0IChUIHQpeworCXRoaXMudCA9IHQ7CisgICAgfSAgICAKK30KKworY2xhc3MgU2ltcGxlIHsKK30KKworY2xhc3MgVGVzdHsKKyAgICBMaW5rZWRMaXN0W10geDsKKyAgICBMaW5rZWRMaXN0IHk7CisgICAgCisgICAgdm9pZCBmKCl7CisJeS5zZXQoeFswXS5nZXQoKSk7CisgICAgfSAgIAorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QwOS9iZWZvcmUvdGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QwOS9iZWZvcmUvdGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ4MzE0MGYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDA5L2JlZm9yZS90ZXN0LmphdmEKQEAgLTAsMCArMSwxOSBAQAorY2xhc3MgTGlua2VkTGlzdDxUPnsKKyAgICBUIHQ7CisgICAgcHVibGljIFQgZ2V0KCl7cmV0dXJuIHQ7fQorICAgIHB1YmxpYyB2b2lkIHNldCAoVCB0KXsKKwl0aGlzLnQgPSB0OworICAgIH0gICAgCit9CisKK2NsYXNzIFNpbXBsZSB7Cit9CisKK2NsYXNzIFRlc3R7CisgICAgTGlua2VkTGlzdFtdIHg7CisgICAgTGlua2VkTGlzdCB5OworICAgIAorICAgIHZvaWQgZigpeworCXkuc2V0KHhbMF0uZ2V0KCkpOworICAgIH0gICAKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MTAvYWZ0ZXIvVGVzdC4xLml0ZW1zIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QxMC9hZnRlci9UZXN0LjEuaXRlbXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmU4YWMzOAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MTAvYWZ0ZXIvVGVzdC4xLml0ZW1zCkBAIC0wLDAgKzEsMiBAQAorTGlua2VkTGlzdDxqYXZhLmxhbmcuT2JqZWN0PltdXG5Qc2lGaWVsZDp4CitMaW5rZWRMaXN0XG5Qc2lGaWVsZDp5CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDEwL2FmdGVyL1Rlc3QuaXRlbXMgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDEwL2FmdGVyL1Rlc3QuaXRlbXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjU2YTYzNgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MTAvYWZ0ZXIvVGVzdC5pdGVtcwpAQCAtMCwwICsxLDIgQEAKK0xpbmtlZExpc3RbXVxuUHNpRmllbGQ6eAorTGlua2VkTGlzdFxuUHNpRmllbGQ6eQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QxMC9hZnRlci90ZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDEwL2FmdGVyL3Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MGMwNDZhCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QxMC9hZnRlci90ZXN0LmphdmEKQEAgLTAsMCArMSwyMCBAQAorY2xhc3MgTGlua2VkTGlzdDxUPnsKKyAgICBUIHQ7CisgICAgcHVibGljIFQgZ2V0KCl7cmV0dXJuIHQ7fQorICAgIHB1YmxpYyB2b2lkIHNldCAoVCB0KXsKKwl0aGlzLnQgPSB0OworICAgIH0gICAgCit9CisKK2NsYXNzIFNpbXBsZSB7Cit9CisKK2NsYXNzIFRlc3R7CisgICAgTGlua2VkTGlzdFtdIHg7CisgICAgTGlua2VkTGlzdCB5OworICAgIAorICAgIHZvaWQgZigpeworCXhbMF0uc2V0IChuZXcgU2ltcGxlKCkpOworCXhbMV0uc2V0IChuZXcgVGVzdCgpKTsKKyAgICB9ICAgCit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDEwL2JlZm9yZS90ZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDEwL2JlZm9yZS90ZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzBjMDQ2YQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MTAvYmVmb3JlL3Rlc3QuamF2YQpAQCAtMCwwICsxLDIwIEBACitjbGFzcyBMaW5rZWRMaXN0PFQ+eworICAgIFQgdDsKKyAgICBwdWJsaWMgVCBnZXQoKXtyZXR1cm4gdDt9CisgICAgcHVibGljIHZvaWQgc2V0IChUIHQpeworCXRoaXMudCA9IHQ7CisgICAgfSAgICAKK30KKworY2xhc3MgU2ltcGxlIHsKK30KKworY2xhc3MgVGVzdHsKKyAgICBMaW5rZWRMaXN0W10geDsKKyAgICBMaW5rZWRMaXN0IHk7CisgICAgCisgICAgdm9pZCBmKCl7CisJeFswXS5zZXQgKG5ldyBTaW1wbGUoKSk7CisJeFsxXS5zZXQgKG5ldyBUZXN0KCkpOworICAgIH0gICAKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MTAwL2FmdGVyL1Rlc3QuMS5pdGVtcyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MTAwL2FmdGVyL1Rlc3QuMS5pdGVtcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNzIwZjdkCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QxMDAvYWZ0ZXIvVGVzdC4xLml0ZW1zCkBAIC0wLDAgKzEgQEAKK0xpc3Q8amF2YS5sYW5nLlN0cmluZz5cblBzaUxvY2FsVmFyaWFibGU6eApkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QxMDAvYWZ0ZXIvVGVzdC5pdGVtcyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MTAwL2FmdGVyL1Rlc3QuaXRlbXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmQyMDg4YgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MTAwL2FmdGVyL1Rlc3QuaXRlbXMKQEAgLTAsMCArMSBAQAorTGlzdFxuUHNpTG9jYWxWYXJpYWJsZTp4CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDEwMC9hZnRlci90ZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDEwMC9hZnRlci90ZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWFjZTQ4MwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MTAwL2FmdGVyL3Rlc3QuamF2YQpAQCAtMCwwICsxLDExIEBACitjbGFzcyBMaXN0PFQ+IHsKKyAgPEEgZXh0ZW5kcyBUPiB2b2lkIGYgKEEgYSl7CisgIH0KK30KKworY2xhc3MgVGVzdCB7CisgIHZvaWQgZm9vICgpeworICAgIExpc3QgeCA9IG51bGw7CisgICAgeC5mKCIiKTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QxMDAvYmVmb3JlL3Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MTAwL2JlZm9yZS90ZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWFjZTQ4MwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MTAwL2JlZm9yZS90ZXN0LmphdmEKQEAgLTAsMCArMSwxMSBAQAorY2xhc3MgTGlzdDxUPiB7CisgIDxBIGV4dGVuZHMgVD4gdm9pZCBmIChBIGEpeworICB9Cit9CisKK2NsYXNzIFRlc3QgeworICB2b2lkIGZvbyAoKXsKKyAgICBMaXN0IHggPSBudWxsOworICAgIHguZigiIik7CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MTAxL2FmdGVyL1Rlc3QuMS5pdGVtcyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MTAxL2FmdGVyL1Rlc3QuMS5pdGVtcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNzIwZjdkCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QxMDEvYWZ0ZXIvVGVzdC4xLml0ZW1zCkBAIC0wLDAgKzEgQEAKK0xpc3Q8amF2YS5sYW5nLlN0cmluZz5cblBzaUxvY2FsVmFyaWFibGU6eApkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QxMDEvYWZ0ZXIvVGVzdC5pdGVtcyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MTAxL2FmdGVyL1Rlc3QuaXRlbXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmQyMDg4YgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MTAxL2FmdGVyL1Rlc3QuaXRlbXMKQEAgLTAsMCArMSBAQAorTGlzdFxuUHNpTG9jYWxWYXJpYWJsZTp4CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDEwMS9hZnRlci90ZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDEwMS9hZnRlci90ZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTMwZjMzYwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MTAxL2FmdGVyL3Rlc3QuamF2YQpAQCAtMCwwICsxLDExIEBACitjbGFzcyBMaXN0PFQ+IHsKKyAgPEE+IHZvaWQgZiAoVCBhKXsKKyAgfQorfQorCitjbGFzcyBUZXN0IHsKKyAgdm9pZCBmb28gKCl7CisgICAgTGlzdCB4ID0gbnVsbDsKKyAgICB4LmYoIiIpOworICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDEwMS9iZWZvcmUvdGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QxMDEvYmVmb3JlL3Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MzBmMzNjCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QxMDEvYmVmb3JlL3Rlc3QuamF2YQpAQCAtMCwwICsxLDExIEBACitjbGFzcyBMaXN0PFQ+IHsKKyAgPEE+IHZvaWQgZiAoVCBhKXsKKyAgfQorfQorCitjbGFzcyBUZXN0IHsKKyAgdm9pZCBmb28gKCl7CisgICAgTGlzdCB4ID0gbnVsbDsKKyAgICB4LmYoIiIpOworICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDEwMi9hZnRlci9UZXN0LjEuaXRlbXMgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDEwMi9hZnRlci9UZXN0LjEuaXRlbXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmQyMDg4YgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MTAyL2FmdGVyL1Rlc3QuMS5pdGVtcwpAQCAtMCwwICsxIEBACitMaXN0XG5Qc2lMb2NhbFZhcmlhYmxlOngKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MTAyL2FmdGVyL1Rlc3QuaXRlbXMgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDEwMi9hZnRlci9UZXN0Lml0ZW1zCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJkMjA4OGIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDEwMi9hZnRlci9UZXN0Lml0ZW1zCkBAIC0wLDAgKzEgQEAKK0xpc3RcblBzaUxvY2FsVmFyaWFibGU6eApkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QxMDIvYWZ0ZXIvdGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QxMDIvYWZ0ZXIvdGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhmMWRiOTQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDEwMi9hZnRlci90ZXN0LmphdmEKQEAgLTAsMCArMSwxMSBAQAorY2xhc3MgTGlzdDxUPiB7CisgIDxBPiB2b2lkIGYgKEEgYSl7CisgIH0KK30KKworY2xhc3MgVGVzdCB7CisgIHZvaWQgZm9vICgpeworICAgIExpc3QgeCA9IG51bGw7CisgICAgeC5mKCIiKTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QxMDIvYmVmb3JlL3Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MTAyL2JlZm9yZS90ZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGYxZGI5NAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MTAyL2JlZm9yZS90ZXN0LmphdmEKQEAgLTAsMCArMSwxMSBAQAorY2xhc3MgTGlzdDxUPiB7CisgIDxBPiB2b2lkIGYgKEEgYSl7CisgIH0KK30KKworY2xhc3MgVGVzdCB7CisgIHZvaWQgZm9vICgpeworICAgIExpc3QgeCA9IG51bGw7CisgICAgeC5mKCIiKTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QxMDMvYWZ0ZXIvVGVzdC4xLml0ZW1zIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QxMDMvYWZ0ZXIvVGVzdC4xLml0ZW1zCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE3MjBmN2QKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDEwMy9hZnRlci9UZXN0LjEuaXRlbXMKQEAgLTAsMCArMSBAQAorTGlzdDxqYXZhLmxhbmcuU3RyaW5nPlxuUHNpTG9jYWxWYXJpYWJsZTp4CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDEwMy9hZnRlci9UZXN0Lml0ZW1zIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QxMDMvYWZ0ZXIvVGVzdC5pdGVtcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZDIwODhiCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QxMDMvYWZ0ZXIvVGVzdC5pdGVtcwpAQCAtMCwwICsxIEBACitMaXN0XG5Qc2lMb2NhbFZhcmlhYmxlOngKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MTAzL2FmdGVyL3Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MTAzL2FmdGVyL3Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOWIxZjhhCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QxMDMvYWZ0ZXIvdGVzdC5qYXZhCkBAIC0wLDAgKzEsMTUgQEAKK2NsYXNzIExpc3Q8VD4geworICA8QSBleHRlbmRzIExpc3Q8VD4+IHZvaWQgZiAoQSBhKXsKKyAgfQorfQorCitjbGFzcyBNaXN0IGV4dGVuZHMgTGlzdDxTdHJpbmc+eworfQorCitjbGFzcyBUZXN0IHsKKyAgdm9pZCBmb28gKCl7CisgICAgTWlzdCB5ID0gbnVsbDsKKyAgICBMaXN0IHggPSBudWxsOworICAgIHguZih5KTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QxMDMvYmVmb3JlL3Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MTAzL2JlZm9yZS90ZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDliMWY4YQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MTAzL2JlZm9yZS90ZXN0LmphdmEKQEAgLTAsMCArMSwxNSBAQAorY2xhc3MgTGlzdDxUPiB7CisgIDxBIGV4dGVuZHMgTGlzdDxUPj4gdm9pZCBmIChBIGEpeworICB9Cit9CisKK2NsYXNzIE1pc3QgZXh0ZW5kcyBMaXN0PFN0cmluZz57Cit9CisKK2NsYXNzIFRlc3QgeworICB2b2lkIGZvbyAoKXsKKyAgICBNaXN0IHkgPSBudWxsOworICAgIExpc3QgeCA9IG51bGw7CisgICAgeC5mKHkpOworICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDEwNC9hZnRlci9UZXN0LjEuaXRlbXMgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDEwNC9hZnRlci9UZXN0LjEuaXRlbXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGZiZjkyZgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MTA0L2FmdGVyL1Rlc3QuMS5pdGVtcwpAQCAtMCwwICsxIEBACitmb288TWlzdD5cblBzaUxvY2FsVmFyaWFibGU6eApkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QxMDQvYWZ0ZXIvVGVzdC5pdGVtcyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MTA0L2FmdGVyL1Rlc3QuaXRlbXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTc3ZDMxOQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MTA0L2FmdGVyL1Rlc3QuaXRlbXMKQEAgLTAsMCArMSBAQAorZm9vXG5Qc2lMb2NhbFZhcmlhYmxlOngKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MTA0L2FmdGVyL3Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MTA0L2FmdGVyL3Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MmEyMWY3Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QxMDQvYWZ0ZXIvdGVzdC5qYXZhCkBAIC0wLDAgKzEsMTcgQEAKK2NsYXNzIExpc3Q8VD4geworfQorCitjbGFzcyBNaXN0IGV4dGVuZHMgTGlzdDxTdHJpbmc+eworfQorCitjbGFzcyBmb288WCBleHRlbmRzIExpc3Q+eworICBYIHg7Cit9CisKK2NsYXNzIFRlc3QgeworICB2b2lkIGZvbyAoKXsKKyAgICBNaXN0IHkgPSBudWxsOworICAgIGZvbyB4ID0gbnVsbDsKKyAgICB4LnggPSB5OworICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDEwNC9iZWZvcmUvdGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QxMDQvYmVmb3JlL3Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MmEyMWY3Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QxMDQvYmVmb3JlL3Rlc3QuamF2YQpAQCAtMCwwICsxLDE3IEBACitjbGFzcyBMaXN0PFQ+IHsKK30KKworY2xhc3MgTWlzdCBleHRlbmRzIExpc3Q8U3RyaW5nPnsKK30KKworY2xhc3MgZm9vPFggZXh0ZW5kcyBMaXN0PnsKKyAgWCB4OworfQorCitjbGFzcyBUZXN0IHsKKyAgdm9pZCBmb28gKCl7CisgICAgTWlzdCB5ID0gbnVsbDsKKyAgICBmb28geCA9IG51bGw7CisgICAgeC54ID0geTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QxMDUvYWZ0ZXIvVGVzdC4xLml0ZW1zIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QxMDUvYWZ0ZXIvVGVzdC4xLml0ZW1zCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk1MDE1OTAKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDEwNS9hZnRlci9UZXN0LjEuaXRlbXMKQEAgLTAsMCArMSBAQAorTWlzdDxqYXZhLmxhbmcuU3RyaW5nPlxuUHNpTG9jYWxWYXJpYWJsZTp4CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDEwNS9hZnRlci9UZXN0Lml0ZW1zIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QxMDUvYWZ0ZXIvVGVzdC5pdGVtcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NzMxODM0Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QxMDUvYWZ0ZXIvVGVzdC5pdGVtcwpAQCAtMCwwICsxIEBACitNaXN0XG5Qc2lMb2NhbFZhcmlhYmxlOngKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MTA1L2FmdGVyL3Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MTA1L2FmdGVyL3Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MjdhZjk1Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QxMDUvYWZ0ZXIvdGVzdC5qYXZhCkBAIC0wLDAgKzEsMTUgQEAKK2NsYXNzIExpc3Q8VD4geworICA8QSBleHRlbmRzIFQ+IHZvaWQgZiAoQSB4KXsKKyAgfQorfQorCitjbGFzcyBNaXN0PFg+IHsKKyAgTGlzdDxYPiB4OworfQorCitjbGFzcyBUZXN0IHsKKyAgdm9pZCBmb28gKCl7CisgICAgTWlzdCB4ID0gbnVsbDsKKyAgICB4LnguZigiIik7CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MTA1L2JlZm9yZS90ZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDEwNS9iZWZvcmUvdGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgyN2FmOTUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDEwNS9iZWZvcmUvdGVzdC5qYXZhCkBAIC0wLDAgKzEsMTUgQEAKK2NsYXNzIExpc3Q8VD4geworICA8QSBleHRlbmRzIFQ+IHZvaWQgZiAoQSB4KXsKKyAgfQorfQorCitjbGFzcyBNaXN0PFg+IHsKKyAgTGlzdDxYPiB4OworfQorCitjbGFzcyBUZXN0IHsKKyAgdm9pZCBmb28gKCl7CisgICAgTWlzdCB4ID0gbnVsbDsKKyAgICB4LnguZigiIik7CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MTA2L2FmdGVyL1Rlc3QuMS5pdGVtcyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MTA2L2FmdGVyL1Rlc3QuMS5pdGVtcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZDIwODhiCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QxMDYvYWZ0ZXIvVGVzdC4xLml0ZW1zCkBAIC0wLDAgKzEgQEAKK0xpc3RcblBzaUxvY2FsVmFyaWFibGU6eApkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QxMDYvYWZ0ZXIvVGVzdC5pdGVtcyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MTA2L2FmdGVyL1Rlc3QuaXRlbXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmQyMDg4YgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MTA2L2FmdGVyL1Rlc3QuaXRlbXMKQEAgLTAsMCArMSBAQAorTGlzdFxuUHNpTG9jYWxWYXJpYWJsZTp4CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDEwNi9hZnRlci90ZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDEwNi9hZnRlci90ZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWY5NWRjMTMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDEwNi9hZnRlci90ZXN0LmphdmEKQEAgLTAsMCArMSwxMiBAQAorY2xhc3MgTGlzdDxUPiB7CisgIDxBPiBBW10gZiAoQVtdIHgpeworICAgIHJldHVybiB4OworICB9Cit9CisKK2NsYXNzIFRlc3QgeworICB2b2lkIGZvbyAoKXsKKyAgICBMaXN0IHggPSBudWxsOworICAgIFN0cmluZ1tdIHkgPSAoU3RyaW5nW10pIHguZihuZXcgU3RyaW5nW10ge30pOworICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDEwNi9iZWZvcmUvdGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QxMDYvYmVmb3JlL3Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZjk1ZGMxMwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MTA2L2JlZm9yZS90ZXN0LmphdmEKQEAgLTAsMCArMSwxMiBAQAorY2xhc3MgTGlzdDxUPiB7CisgIDxBPiBBW10gZiAoQVtdIHgpeworICAgIHJldHVybiB4OworICB9Cit9CisKK2NsYXNzIFRlc3QgeworICB2b2lkIGZvbyAoKXsKKyAgICBMaXN0IHggPSBudWxsOworICAgIFN0cmluZ1tdIHkgPSAoU3RyaW5nW10pIHguZihuZXcgU3RyaW5nW10ge30pOworICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDEwNy9hZnRlci9UZXN0LjEuaXRlbXMgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDEwNy9hZnRlci9UZXN0LjEuaXRlbXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTcyMGY3ZAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MTA3L2FmdGVyL1Rlc3QuMS5pdGVtcwpAQCAtMCwwICsxIEBACitMaXN0PGphdmEubGFuZy5TdHJpbmc+XG5Qc2lMb2NhbFZhcmlhYmxlOngKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MTA3L2FmdGVyL1Rlc3QuaXRlbXMgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDEwNy9hZnRlci9UZXN0Lml0ZW1zCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJkMjA4OGIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDEwNy9hZnRlci9UZXN0Lml0ZW1zCkBAIC0wLDAgKzEgQEAKK0xpc3RcblBzaUxvY2FsVmFyaWFibGU6eApkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QxMDcvYWZ0ZXIvdGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QxMDcvYWZ0ZXIvdGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI1MDUxMDQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDEwNy9hZnRlci90ZXN0LmphdmEKQEAgLTAsMCArMSwxMiBAQAorY2xhc3MgTGlzdDxUPiB7CisgIDxBIGV4dGVuZHMgVD4gQVtdIGYgKEFbXSB4KXsKKyAgICByZXR1cm4geDsKKyAgfQorfQorCitjbGFzcyBUZXN0IHsKKyAgdm9pZCBmb28gKCl7CisgICAgTGlzdCB4ID0gbnVsbDsKKyAgICBTdHJpbmdbXSB5ID0gKFN0cmluZ1tdKSB4LmYobmV3IFN0cmluZ1tdIHt9KTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QxMDcvYmVmb3JlL3Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MTA3L2JlZm9yZS90ZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjUwNTEwNAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MTA3L2JlZm9yZS90ZXN0LmphdmEKQEAgLTAsMCArMSwxMiBAQAorY2xhc3MgTGlzdDxUPiB7CisgIDxBIGV4dGVuZHMgVD4gQVtdIGYgKEFbXSB4KXsKKyAgICByZXR1cm4geDsKKyAgfQorfQorCitjbGFzcyBUZXN0IHsKKyAgdm9pZCBmb28gKCl7CisgICAgTGlzdCB4ID0gbnVsbDsKKyAgICBTdHJpbmdbXSB5ID0gKFN0cmluZ1tdKSB4LmYobmV3IFN0cmluZ1tdIHt9KTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QxMDgvYWZ0ZXIvVGVzdC4xLml0ZW1zIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QxMDgvYWZ0ZXIvVGVzdC4xLml0ZW1zCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE3MjBmN2QKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDEwOC9hZnRlci9UZXN0LjEuaXRlbXMKQEAgLTAsMCArMSBAQAorTGlzdDxqYXZhLmxhbmcuU3RyaW5nPlxuUHNpTG9jYWxWYXJpYWJsZTp4CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDEwOC9hZnRlci9UZXN0Lml0ZW1zIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QxMDgvYWZ0ZXIvVGVzdC5pdGVtcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZDIwODhiCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QxMDgvYWZ0ZXIvVGVzdC5pdGVtcwpAQCAtMCwwICsxIEBACitMaXN0XG5Qc2lMb2NhbFZhcmlhYmxlOngKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MTA4L2FmdGVyL3Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MTA4L2FmdGVyL3Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMzAwMmFlCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QxMDgvYWZ0ZXIvdGVzdC5qYXZhCkBAIC0wLDAgKzEsMTQgQEAKK2NsYXNzIExpc3Q8VD4geworICA8QT4gTGlzdDxBPiBmIChMaXN0PEE+IHgpeworICAgIHJldHVybiB4OworICB9Cit9CisKK2NsYXNzIFRlc3QgeworICB2b2lkIGZvbyAoKXsKKyAgICBMaXN0IHggPSBudWxsOworICAgIExpc3Q8U3RyaW5nPiB5ID0gbnVsbDsKKworICAgIHggPSB4LmYoeSk7CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MTA4L2JlZm9yZS90ZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDEwOC9iZWZvcmUvdGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQzMDAyYWUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDEwOC9iZWZvcmUvdGVzdC5qYXZhCkBAIC0wLDAgKzEsMTQgQEAKK2NsYXNzIExpc3Q8VD4geworICA8QT4gTGlzdDxBPiBmIChMaXN0PEE+IHgpeworICAgIHJldHVybiB4OworICB9Cit9CisKK2NsYXNzIFRlc3QgeworICB2b2lkIGZvbyAoKXsKKyAgICBMaXN0IHggPSBudWxsOworICAgIExpc3Q8U3RyaW5nPiB5ID0gbnVsbDsKKworICAgIHggPSB4LmYoeSk7CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MTA5L2FmdGVyL1Rlc3QuMS5pdGVtcyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MTA5L2FmdGVyL1Rlc3QuMS5pdGVtcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNzIwZjdkCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QxMDkvYWZ0ZXIvVGVzdC4xLml0ZW1zCkBAIC0wLDAgKzEgQEAKK0xpc3Q8amF2YS5sYW5nLlN0cmluZz5cblBzaUxvY2FsVmFyaWFibGU6eApkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QxMDkvYWZ0ZXIvVGVzdC5pdGVtcyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MTA5L2FmdGVyL1Rlc3QuaXRlbXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmQyMDg4YgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MTA5L2FmdGVyL1Rlc3QuaXRlbXMKQEAgLTAsMCArMSBAQAorTGlzdFxuUHNpTG9jYWxWYXJpYWJsZTp4CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDEwOS9hZnRlci90ZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDEwOS9hZnRlci90ZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjBlOTNiMgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MTA5L2FmdGVyL3Rlc3QuamF2YQpAQCAtMCwwICsxLDEyIEBACitjbGFzcyBMaXN0PFQ+IHsKKyAgPEE+IExpc3Q8QT4gZiAoQVtdIHgpeworICAgIHJldHVybiB4OworICB9Cit9CisKK2NsYXNzIFRlc3QgeworICB2b2lkIGZvbyAoKXsKKyAgICBMaXN0IHggPSBudWxsOworICAgIHggPSB4LmYobmV3IFN0cmluZ1tdIHt9KTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QxMDkvYmVmb3JlL3Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MTA5L2JlZm9yZS90ZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjBlOTNiMgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MTA5L2JlZm9yZS90ZXN0LmphdmEKQEAgLTAsMCArMSwxMiBAQAorY2xhc3MgTGlzdDxUPiB7CisgIDxBPiBMaXN0PEE+IGYgKEFbXSB4KXsKKyAgICByZXR1cm4geDsKKyAgfQorfQorCitjbGFzcyBUZXN0IHsKKyAgdm9pZCBmb28gKCl7CisgICAgTGlzdCB4ID0gbnVsbDsKKyAgICB4ID0geC5mKG5ldyBTdHJpbmdbXSB7fSk7CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MTEvYWZ0ZXIvVGVzdC4xLml0ZW1zIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QxMS9hZnRlci9UZXN0LjEuaXRlbXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzYwMzI5MAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MTEvYWZ0ZXIvVGVzdC4xLml0ZW1zCkBAIC0wLDAgKzEsMiBAQAorTGlua2VkTGlzdFxuUHNpRmllbGQ6eAorTGlua2VkTGlzdFxuUHNpRmllbGQ6eQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QxMS9hZnRlci9UZXN0Lml0ZW1zIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QxMS9hZnRlci9UZXN0Lml0ZW1zCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM2MDMyOTAKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDExL2FmdGVyL1Rlc3QuaXRlbXMKQEAgLTAsMCArMSwyIEBACitMaW5rZWRMaXN0XG5Qc2lGaWVsZDp4CitMaW5rZWRMaXN0XG5Qc2lGaWVsZDp5CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDExL2FmdGVyL3Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MTEvYWZ0ZXIvdGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY0OTk0ZTMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDExL2FmdGVyL3Rlc3QuamF2YQpAQCAtMCwwICsxLDE5IEBACitjbGFzcyBMaW5rZWRMaXN0PFQ+eworICAgIFQgdDsKKyAgICBwdWJsaWMgVCBnZXQoKXtyZXR1cm4gdDt9CisgICAgcHVibGljIHZvaWQgc2V0IChUIHQpeworCXRoaXMudCA9IHQ7CisgICAgfSAgICAKK30KKworY2xhc3MgU2ltcGxlIHsKK30KKworY2xhc3MgVGVzdHsKKyAgICBMaW5rZWRMaXN0IHk7CisgICAgTGlua2VkTGlzdCB4OworICAgIAorICAgIHZvaWQgZigpeworICAgICAgIHkuc2V0KHRydWUgPyB4LmdldCgpIDogeC5nZXQoKSk7CisgICAgfSAgIAorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QxMS9iZWZvcmUvdGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QxMS9iZWZvcmUvdGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY0OTk0ZTMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDExL2JlZm9yZS90ZXN0LmphdmEKQEAgLTAsMCArMSwxOSBAQAorY2xhc3MgTGlua2VkTGlzdDxUPnsKKyAgICBUIHQ7CisgICAgcHVibGljIFQgZ2V0KCl7cmV0dXJuIHQ7fQorICAgIHB1YmxpYyB2b2lkIHNldCAoVCB0KXsKKwl0aGlzLnQgPSB0OworICAgIH0gICAgCit9CisKK2NsYXNzIFNpbXBsZSB7Cit9CisKK2NsYXNzIFRlc3R7CisgICAgTGlua2VkTGlzdCB5OworICAgIExpbmtlZExpc3QgeDsKKyAgICAKKyAgICB2b2lkIGYoKXsKKyAgICAgICB5LnNldCh0cnVlID8geC5nZXQoKSA6IHguZ2V0KCkpOworICAgIH0gICAKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MTEwL2FmdGVyL1Rlc3QuMS5pdGVtcyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MTEwL2FmdGVyL1Rlc3QuMS5pdGVtcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZGIxZDViCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QxMTAvYWZ0ZXIvVGVzdC4xLml0ZW1zCkBAIC0wLDAgKzEsMyBAQAorTGlzdDxqYXZhLmxhbmcuU3RyaW5nPlxuUHNpTG9jYWxWYXJpYWJsZTp5CitMaXN0PGphdmEubGFuZy5TdHJpbmc+XG5uZXcKK0xpc3RcblBzaUxvY2FsVmFyaWFibGU6eApkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QxMTAvYWZ0ZXIvVGVzdC5pdGVtcyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MTEwL2FmdGVyL1Rlc3QuaXRlbXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGQ4NGI5OQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MTEwL2FmdGVyL1Rlc3QuaXRlbXMKQEAgLTAsMCArMSwzIEBACitMaXN0XG5Qc2lMb2NhbFZhcmlhYmxlOngKK0xpc3RcblBzaUxvY2FsVmFyaWFibGU6eQorTGlzdFxubmV3CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDExMC9hZnRlci90ZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDExMC9hZnRlci90ZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjZkYjNhZQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MTEwL2FmdGVyL3Rlc3QuamF2YQpAQCAtMCwwICsxLDE1IEBACitjbGFzcyBMaXN0PFQ+IHsKKyAgPEE+IExpc3Q8QT4gZiAoQVtdIHgpeworICAgIHJldHVybiB4OworICB9CisKKyAgPEIgZXh0ZW5kcyBUPiBMaXN0KExpc3Q8Qj4geSl7CisgIH0KK30KKworY2xhc3MgVGVzdCB7CisgIHZvaWQgZm9vICgpeworICAgIExpc3QgeCA9IG51bGw7CisgICAgTGlzdCB5ID0gbmV3IExpc3QoeC5mKG5ldyBTdHJpbmdbXSB7fSkpOworICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDExMC9iZWZvcmUvdGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QxMTAvYmVmb3JlL3Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNmRiM2FlCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QxMTAvYmVmb3JlL3Rlc3QuamF2YQpAQCAtMCwwICsxLDE1IEBACitjbGFzcyBMaXN0PFQ+IHsKKyAgPEE+IExpc3Q8QT4gZiAoQVtdIHgpeworICAgIHJldHVybiB4OworICB9CisKKyAgPEIgZXh0ZW5kcyBUPiBMaXN0KExpc3Q8Qj4geSl7CisgIH0KK30KKworY2xhc3MgVGVzdCB7CisgIHZvaWQgZm9vICgpeworICAgIExpc3QgeCA9IG51bGw7CisgICAgTGlzdCB5ID0gbmV3IExpc3QoeC5mKG5ldyBTdHJpbmdbXSB7fSkpOworICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDExMS9hZnRlci9UZXN0LjEuaXRlbXMgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDExMS9hZnRlci9UZXN0LjEuaXRlbXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDY5OTUxOQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MTExL2FmdGVyL1Rlc3QuMS5pdGVtcwpAQCAtMCwwICsxLDIgQEAKK0xpc3Q8amF2YS5sYW5nLlN0cmluZz5cblBzaUxvY2FsVmFyaWFibGU6eAorTGlzdDxqYXZhLmxhbmcuU3RyaW5nPlxuUHNpTG9jYWxWYXJpYWJsZTp5CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDExMS9hZnRlci9UZXN0Lml0ZW1zIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QxMTEvYWZ0ZXIvVGVzdC5pdGVtcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YjcwMGM0Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QxMTEvYWZ0ZXIvVGVzdC5pdGVtcwpAQCAtMCwwICsxLDIgQEAKK0xpc3RcblBzaUxvY2FsVmFyaWFibGU6eAorTGlzdFxuUHNpTG9jYWxWYXJpYWJsZTp5CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDExMS9hZnRlci90ZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDExMS9hZnRlci90ZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDkyMWRkMQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MTExL2FmdGVyL3Rlc3QuamF2YQpAQCAtMCwwICsxLDE1IEBACitjbGFzcyBMaXN0PFQ+IHsKKyAgPEE+IExpc3Q8QT4gZiAoTGlzdDxBPiB4KXsKKyAgICByZXR1cm4geDsKKyAgfQorICBUIHQ7Cit9CisKK2NsYXNzIFRlc3QgeworICB2b2lkIGZvbyAoKXsKKyAgICBMaXN0IHggPSBudWxsOworICAgIExpc3QgeSA9IHguZih4KTsKKworICAgIHgudCA9ICIiOworICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDExMS9iZWZvcmUvdGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QxMTEvYmVmb3JlL3Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OTIxZGQxCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QxMTEvYmVmb3JlL3Rlc3QuamF2YQpAQCAtMCwwICsxLDE1IEBACitjbGFzcyBMaXN0PFQ+IHsKKyAgPEE+IExpc3Q8QT4gZiAoTGlzdDxBPiB4KXsKKyAgICByZXR1cm4geDsKKyAgfQorICBUIHQ7Cit9CisKK2NsYXNzIFRlc3QgeworICB2b2lkIGZvbyAoKXsKKyAgICBMaXN0IHggPSBudWxsOworICAgIExpc3QgeSA9IHguZih4KTsKKworICAgIHgudCA9ICIiOworICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDExMi9hZnRlci9UZXN0LjEuaXRlbXMgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDExMi9hZnRlci9UZXN0LjEuaXRlbXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGQzNWQ5NAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MTEyL2FmdGVyL1Rlc3QuMS5pdGVtcwpAQCAtMCwwICsxLDIgQEAKK0xpc3Q8amF2YS5sYW5nLlN0cmluZz5cblBzaUxvY2FsVmFyaWFibGU6eQorTGlzdDxqYXZhLmxhbmcuU3RyaW5nPlxubmV3CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDExMi9hZnRlci9UZXN0Lml0ZW1zIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QxMTIvYWZ0ZXIvVGVzdC5pdGVtcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wM2E3ODU2Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QxMTIvYWZ0ZXIvVGVzdC5pdGVtcwpAQCAtMCwwICsxLDIgQEAKK0xpc3RcblBzaUxvY2FsVmFyaWFibGU6eQorTGlzdFxubmV3CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDExMi9hZnRlci90ZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDExMi9hZnRlci90ZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzFiNzY4OQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MTEyL2FmdGVyL3Rlc3QuamF2YQpAQCAtMCwwICsxLDEzIEBACitjbGFzcyBMaXN0PFQ+IHsKKyAgPEEgZXh0ZW5kcyBUPiBMaXN0KEEgeCl7CisgICAgdCA9IHg7CisgIH0KKworICBUIHQ7Cit9CisKK2NsYXNzIFRlc3QgeworICB2b2lkIGZvbyAoKXsKKyAgICBMaXN0IHkgPSBuZXcgTGlzdCgiIik7CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MTEyL2JlZm9yZS90ZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDExMi9iZWZvcmUvdGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMxYjc2ODkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDExMi9iZWZvcmUvdGVzdC5qYXZhCkBAIC0wLDAgKzEsMTMgQEAKK2NsYXNzIExpc3Q8VD4geworICA8QSBleHRlbmRzIFQ+IExpc3QoQSB4KXsKKyAgICB0ID0geDsKKyAgfQorCisgIFQgdDsKK30KKworY2xhc3MgVGVzdCB7CisgIHZvaWQgZm9vICgpeworICAgIExpc3QgeSA9IG5ldyBMaXN0KCIiKTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QxMTMvYWZ0ZXIvVGVzdC4xLml0ZW1zIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QxMTMvYWZ0ZXIvVGVzdC4xLml0ZW1zCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRkMzVkOTQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDExMy9hZnRlci9UZXN0LjEuaXRlbXMKQEAgLTAsMCArMSwyIEBACitMaXN0PGphdmEubGFuZy5TdHJpbmc+XG5Qc2lMb2NhbFZhcmlhYmxlOnkKK0xpc3Q8amF2YS5sYW5nLlN0cmluZz5cbm5ldwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QxMTMvYWZ0ZXIvVGVzdC5pdGVtcyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MTEzL2FmdGVyL1Rlc3QuaXRlbXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDNhNzg1NgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MTEzL2FmdGVyL1Rlc3QuaXRlbXMKQEAgLTAsMCArMSwyIEBACitMaXN0XG5Qc2lMb2NhbFZhcmlhYmxlOnkKK0xpc3Rcbm5ldwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QxMTMvYWZ0ZXIvdGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QxMTMvYWZ0ZXIvdGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMxYjc2ODkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDExMy9hZnRlci90ZXN0LmphdmEKQEAgLTAsMCArMSwxMyBAQAorY2xhc3MgTGlzdDxUPiB7CisgIDxBIGV4dGVuZHMgVD4gTGlzdChBIHgpeworICAgIHQgPSB4OworICB9CisKKyAgVCB0OworfQorCitjbGFzcyBUZXN0IHsKKyAgdm9pZCBmb28gKCl7CisgICAgTGlzdCB5ID0gbmV3IExpc3QoIiIpOworICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDExMy9iZWZvcmUvdGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QxMTMvYmVmb3JlL3Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMWI3Njg5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QxMTMvYmVmb3JlL3Rlc3QuamF2YQpAQCAtMCwwICsxLDEzIEBACitjbGFzcyBMaXN0PFQ+IHsKKyAgPEEgZXh0ZW5kcyBUPiBMaXN0KEEgeCl7CisgICAgdCA9IHg7CisgIH0KKworICBUIHQ7Cit9CisKK2NsYXNzIFRlc3QgeworICB2b2lkIGZvbyAoKXsKKyAgICBMaXN0IHkgPSBuZXcgTGlzdCgiIik7CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MTE0L2FmdGVyL1Rlc3QuMS5pdGVtcyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MTE0L2FmdGVyL1Rlc3QuMS5pdGVtcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NTI1MzA4Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QxMTQvYWZ0ZXIvVGVzdC4xLml0ZW1zCkBAIC0wLDAgKzEgQEAKK0xpc3Q8amF2YS5sYW5nLlN0cmluZz5cblBzaUxvY2FsVmFyaWFibGU6eQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QxMTQvYWZ0ZXIvVGVzdC5pdGVtcyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MTE0L2FmdGVyL1Rlc3QuaXRlbXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGRlMTFlYQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MTE0L2FmdGVyL1Rlc3QuaXRlbXMKQEAgLTAsMCArMSBAQAorTGlzdFxuUHNpTG9jYWxWYXJpYWJsZTp5CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDExNC9hZnRlci90ZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDExNC9hZnRlci90ZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjY0NjNkMQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MTE0L2FmdGVyL3Rlc3QuamF2YQpAQCAtMCwwICsxLDEyIEBACitjbGFzcyBMaXN0PFQ+IHsKKyAgdm9pZCBmKFRbXSB4KXsKKyAgfQorfQorCitjbGFzcyBUZXN0IHsKKyAgdm9pZCBmb28gKCl7CisgICAgTGlzdCB5ID0gbnVsbDsKKworICAgIHkuZihuZXcgU3RyaW5nW10ge30pOworICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDExNC9iZWZvcmUvdGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QxMTQvYmVmb3JlL3Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNjQ2M2QxCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QxMTQvYmVmb3JlL3Rlc3QuamF2YQpAQCAtMCwwICsxLDEyIEBACitjbGFzcyBMaXN0PFQ+IHsKKyAgdm9pZCBmKFRbXSB4KXsKKyAgfQorfQorCitjbGFzcyBUZXN0IHsKKyAgdm9pZCBmb28gKCl7CisgICAgTGlzdCB5ID0gbnVsbDsKKworICAgIHkuZihuZXcgU3RyaW5nW10ge30pOworICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDExNS9hZnRlci9UZXN0LjEuaXRlbXMgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDExNS9hZnRlci9UZXN0LjEuaXRlbXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODUyNTMwOAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MTE1L2FmdGVyL1Rlc3QuMS5pdGVtcwpAQCAtMCwwICsxIEBACitMaXN0PGphdmEubGFuZy5TdHJpbmc+XG5Qc2lMb2NhbFZhcmlhYmxlOnkKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MTE1L2FmdGVyL1Rlc3QuaXRlbXMgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDExNS9hZnRlci9UZXN0Lml0ZW1zCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhkZTExZWEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDExNS9hZnRlci9UZXN0Lml0ZW1zCkBAIC0wLDAgKzEgQEAKK0xpc3RcblBzaUxvY2FsVmFyaWFibGU6eQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QxMTUvYWZ0ZXIvdGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QxMTUvYWZ0ZXIvdGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE4MDFlOTYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDExNS9hZnRlci90ZXN0LmphdmEKQEAgLTAsMCArMSwxMyBAQAorY2xhc3MgTGlzdDxUPiB7CisgIFRbXSBmKCl7CisgICAgcmV0dXJuIG51bGw7CisgIH0KK30KKworY2xhc3MgVGVzdCB7CisgIHZvaWQgZm9vICgpeworICAgIExpc3QgeSA9IG51bGw7CisKKyAgICBTdHJpbmdbXSB4ID0gKFN0cmluZ1tdKSB5LmYoKTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QxMTUvYmVmb3JlL3Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MTE1L2JlZm9yZS90ZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTgwMWU5NgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MTE1L2JlZm9yZS90ZXN0LmphdmEKQEAgLTAsMCArMSwxMyBAQAorY2xhc3MgTGlzdDxUPiB7CisgIFRbXSBmKCl7CisgICAgcmV0dXJuIG51bGw7CisgIH0KK30KKworY2xhc3MgVGVzdCB7CisgIHZvaWQgZm9vICgpeworICAgIExpc3QgeSA9IG51bGw7CisKKyAgICBTdHJpbmdbXSB4ID0gKFN0cmluZ1tdKSB5LmYoKTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QxMTYvYWZ0ZXIvVGVzdC4xLml0ZW1zIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QxMTYvYWZ0ZXIvVGVzdC4xLml0ZW1zCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg1MjUzMDgKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDExNi9hZnRlci9UZXN0LjEuaXRlbXMKQEAgLTAsMCArMSBAQAorTGlzdDxqYXZhLmxhbmcuU3RyaW5nPlxuUHNpTG9jYWxWYXJpYWJsZTp5CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDExNi9hZnRlci9UZXN0Lml0ZW1zIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QxMTYvYWZ0ZXIvVGVzdC5pdGVtcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZGUxMWVhCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QxMTYvYWZ0ZXIvVGVzdC5pdGVtcwpAQCAtMCwwICsxIEBACitMaXN0XG5Qc2lMb2NhbFZhcmlhYmxlOnkKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MTE2L2FmdGVyL3Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MTE2L2FmdGVyL3Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMjM4M2MyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QxMTYvYWZ0ZXIvdGVzdC5qYXZhCkBAIC0wLDAgKzEsMTMgQEAKK2NsYXNzIExpc3Q8VD4geworICBUW10gZigpeworICAgIHJldHVybiBudWxsOworICB9Cit9CisKK2NsYXNzIFRlc3QgeworICB2b2lkIGZvbyAoKXsKKyAgICBMaXN0IHkgPSBudWxsOworCisgICAgU3RyaW5nIHggPSAoU3RyaW5nKSAoeS5mKClbMF0pOworICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDExNi9iZWZvcmUvdGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QxMTYvYmVmb3JlL3Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMjM4M2MyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QxMTYvYmVmb3JlL3Rlc3QuamF2YQpAQCAtMCwwICsxLDEzIEBACitjbGFzcyBMaXN0PFQ+IHsKKyAgVFtdIGYoKXsKKyAgICByZXR1cm4gbnVsbDsKKyAgfQorfQorCitjbGFzcyBUZXN0IHsKKyAgdm9pZCBmb28gKCl7CisgICAgTGlzdCB5ID0gbnVsbDsKKworICAgIFN0cmluZyB4ID0gKFN0cmluZykgKHkuZigpWzBdKTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QxMTcvYWZ0ZXIvVGVzdC4xLml0ZW1zIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QxMTcvYWZ0ZXIvVGVzdC4xLml0ZW1zCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg1MjUzMDgKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDExNy9hZnRlci9UZXN0LjEuaXRlbXMKQEAgLTAsMCArMSBAQAorTGlzdDxqYXZhLmxhbmcuU3RyaW5nPlxuUHNpTG9jYWxWYXJpYWJsZTp5CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDExNy9hZnRlci9UZXN0Lml0ZW1zIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QxMTcvYWZ0ZXIvVGVzdC5pdGVtcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZGUxMWVhCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QxMTcvYWZ0ZXIvVGVzdC5pdGVtcwpAQCAtMCwwICsxIEBACitMaXN0XG5Qc2lMb2NhbFZhcmlhYmxlOnkKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MTE3L2FmdGVyL3Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MTE3L2FmdGVyL3Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMzViMzA4Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QxMTcvYWZ0ZXIvdGVzdC5qYXZhCkBAIC0wLDAgKzEsMTIgQEAKK2NsYXNzIExpc3Q8VD4geworICBzdGF0aWMgPEEsIEIgZXh0ZW5kcyBMaXN0PEE+PiB2b2lkIGYoQSB4LCBCIHkpeworICB9Cit9CisKK2NsYXNzIFRlc3QgeworICB2b2lkIGZvbyAoKXsKKyAgICBMaXN0IHkgPSBudWxsOworCisgICAgTGlzdC5mKCIiLCB5KTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QxMTcvYmVmb3JlL3Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MTE3L2JlZm9yZS90ZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDM1YjMwOAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MTE3L2JlZm9yZS90ZXN0LmphdmEKQEAgLTAsMCArMSwxMiBAQAorY2xhc3MgTGlzdDxUPiB7CisgIHN0YXRpYyA8QSwgQiBleHRlbmRzIExpc3Q8QT4+IHZvaWQgZihBIHgsIEIgeSl7CisgIH0KK30KKworY2xhc3MgVGVzdCB7CisgIHZvaWQgZm9vICgpeworICAgIExpc3QgeSA9IG51bGw7CisKKyAgICBMaXN0LmYoIiIsIHkpOworICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDExOC9hZnRlci9UZXN0LjEuaXRlbXMgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDExOC9hZnRlci9UZXN0LjEuaXRlbXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODRlOTAyNgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MTE4L2FmdGVyL1Rlc3QuMS5pdGVtcwpAQCAtMCwwICsxLDIgQEAKK0xpc3Q8amF2YS5sYW5nLlN0cmluZz5cblBzaUxvY2FsVmFyaWFibGU6eQorTWlzdDxqYXZhLmxhbmcuU3RyaW5nPlxuUHNpTG9jYWxWYXJpYWJsZTp6CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDExOC9hZnRlci9UZXN0Lml0ZW1zIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QxMTgvYWZ0ZXIvVGVzdC5pdGVtcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NTEyZjAxCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QxMTgvYWZ0ZXIvVGVzdC5pdGVtcwpAQCAtMCwwICsxLDIgQEAKK0xpc3RcblBzaUxvY2FsVmFyaWFibGU6eQorTWlzdFxuUHNpTG9jYWxWYXJpYWJsZTp6CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDExOC9hZnRlci90ZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDExOC9hZnRlci90ZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzVjYmM2YwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MTE4L2FmdGVyL3Rlc3QuamF2YQpAQCAtMCwwICsxLDE5IEBACitjbGFzcyBMaXN0PFQ+IHsKKyAgc3RhdGljIDxBLCBCIGV4dGVuZHMgTGlzdDxBPj4gdm9pZCBmKEEgeCwgQiB5KXsKKyAgfQorICBUIHQ7Cit9CisKK2NsYXNzIE1pc3Q8VD4gZXh0ZW5kcyBMaXN0PFQ+eworfQorCitjbGFzcyBUZXN0IHsKKyAgdm9pZCBmb28gKCl7CisgICAgTGlzdCB5ID0gbnVsbDsKKyAgICBNaXN0IHogPSBudWxsOworCisgICAgTGlzdC5mKHkudCwgeik7CisKKyAgICB6LnQgPSAiIjsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QxMTgvYmVmb3JlL3Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MTE4L2JlZm9yZS90ZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzVjYmM2YwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MTE4L2JlZm9yZS90ZXN0LmphdmEKQEAgLTAsMCArMSwxOSBAQAorY2xhc3MgTGlzdDxUPiB7CisgIHN0YXRpYyA8QSwgQiBleHRlbmRzIExpc3Q8QT4+IHZvaWQgZihBIHgsIEIgeSl7CisgIH0KKyAgVCB0OworfQorCitjbGFzcyBNaXN0PFQ+IGV4dGVuZHMgTGlzdDxUPnsKK30KKworY2xhc3MgVGVzdCB7CisgIHZvaWQgZm9vICgpeworICAgIExpc3QgeSA9IG51bGw7CisgICAgTWlzdCB6ID0gbnVsbDsKKworICAgIExpc3QuZih5LnQsIHopOworCisgICAgei50ID0gIiI7CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MTE5L2FmdGVyL1Rlc3QuMS5pdGVtcyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MTE5L2FmdGVyL1Rlc3QuMS5pdGVtcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZGRjNWYxCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QxMTkvYWZ0ZXIvVGVzdC4xLml0ZW1zCkBAIC0wLDAgKzEsMyBAQAorTGlzdDxqYXZhLmxhbmcuU3RyaW5nPlxuUHNpTG9jYWxWYXJpYWJsZTp4CitMaXN0PGphdmEubGFuZy5TdHJpbmc+XG5Qc2lMb2NhbFZhcmlhYmxlOnkKK0xpc3Q8amF2YS5sYW5nLlN0cmluZz5cbm5ldwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QxMTkvYWZ0ZXIvVGVzdC5pdGVtcyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MTE5L2FmdGVyL1Rlc3QuaXRlbXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGQ4NGI5OQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MTE5L2FmdGVyL1Rlc3QuaXRlbXMKQEAgLTAsMCArMSwzIEBACitMaXN0XG5Qc2lMb2NhbFZhcmlhYmxlOngKK0xpc3RcblBzaUxvY2FsVmFyaWFibGU6eQorTGlzdFxubmV3CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDExOS9hZnRlci90ZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDExOS9hZnRlci90ZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODNmNDMzYgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MTE5L2FmdGVyL3Rlc3QuamF2YQpAQCAtMCwwICsxLDE1IEBACitjbGFzcyBMaXN0PFQ+IHsKKyAgPEEgZXh0ZW5kcyBUPiBMaXN0KExpc3Q8QT4geCl7CisgIH0KKworICBUIHQ7Cit9CisKK2NsYXNzIFRlc3QgeworICB2b2lkIGZvbyAoKXsKKyAgICBMaXN0IHggPSBudWxsOworICAgIExpc3QgeSA9IG5ldyBMaXN0KHgpOworCisgICAgeC50ID0gIiI7CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MTE5L2JlZm9yZS90ZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDExOS9iZWZvcmUvdGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgzZjQzM2IKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDExOS9iZWZvcmUvdGVzdC5qYXZhCkBAIC0wLDAgKzEsMTUgQEAKK2NsYXNzIExpc3Q8VD4geworICA8QSBleHRlbmRzIFQ+IExpc3QoTGlzdDxBPiB4KXsKKyAgfQorCisgIFQgdDsKK30KKworY2xhc3MgVGVzdCB7CisgIHZvaWQgZm9vICgpeworICAgIExpc3QgeCA9IG51bGw7CisgICAgTGlzdCB5ID0gbmV3IExpc3QoeCk7CisKKyAgICB4LnQgPSAiIjsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QxMi9hZnRlci9UZXN0LjEuaXRlbXMgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDEyL2FmdGVyL1Rlc3QuMS5pdGVtcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZmE4ZWFjCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QxMi9hZnRlci9UZXN0LjEuaXRlbXMKQEAgLTAsMCArMSwyIEBACitMaW5rZWRMaXN0PFNpbXBsZT5cblBzaUZpZWxkOngKK0xpbmtlZExpc3Q8U2ltcGxlPlxuUHNpRmllbGQ6eQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QxMi9hZnRlci9UZXN0Lml0ZW1zIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QxMi9hZnRlci9UZXN0Lml0ZW1zCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM2MDMyOTAKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDEyL2FmdGVyL1Rlc3QuaXRlbXMKQEAgLTAsMCArMSwyIEBACitMaW5rZWRMaXN0XG5Qc2lGaWVsZDp4CitMaW5rZWRMaXN0XG5Qc2lGaWVsZDp5CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDEyL2FmdGVyL3Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MTIvYWZ0ZXIvdGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgxOTM0MmIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDEyL2FmdGVyL3Rlc3QuamF2YQpAQCAtMCwwICsxLDIyIEBACitjbGFzcyBMaW5rZWRMaXN0PFQ+eworICAgIFQgdDsKKyAgICBwdWJsaWMgVCBnZXQoKXtyZXR1cm4gdDt9CisgICAgcHVibGljIHZvaWQgc2V0IChUIHQpeworCXRoaXMudCA9IHQ7CisgICAgfSAgICAKK30KKworY2xhc3MgU2ltcGxlIHsKKyAgIGJvb2xlYW4gZigpeworICAgIHJldHVybiBmYWxzZTsKKyAgIH0KK30KKworY2xhc3MgVGVzdHsKKyAgICBMaW5rZWRMaXN0IHk7CisgICAgTGlua2VkTGlzdCB4OworICAgIAorICAgIHZvaWQgZigpeworICAgICAgIHkuc2V0KCgoU2ltcGxlKSB5LmdldCgpKS5mKCkgPyB4LmdldCgpIDogeC5nZXQoKSk7CisgICAgfSAgIAorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QxMi9iZWZvcmUvdGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QxMi9iZWZvcmUvdGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgxOTM0MmIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDEyL2JlZm9yZS90ZXN0LmphdmEKQEAgLTAsMCArMSwyMiBAQAorY2xhc3MgTGlua2VkTGlzdDxUPnsKKyAgICBUIHQ7CisgICAgcHVibGljIFQgZ2V0KCl7cmV0dXJuIHQ7fQorICAgIHB1YmxpYyB2b2lkIHNldCAoVCB0KXsKKwl0aGlzLnQgPSB0OworICAgIH0gICAgCit9CisKK2NsYXNzIFNpbXBsZSB7CisgICBib29sZWFuIGYoKXsKKyAgICByZXR1cm4gZmFsc2U7CisgICB9Cit9CisKK2NsYXNzIFRlc3R7CisgICAgTGlua2VkTGlzdCB5OworICAgIExpbmtlZExpc3QgeDsKKyAgICAKKyAgICB2b2lkIGYoKXsKKyAgICAgICB5LnNldCgoKFNpbXBsZSkgeS5nZXQoKSkuZigpID8geC5nZXQoKSA6IHguZ2V0KCkpOworICAgIH0gICAKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MTIwL2FmdGVyL1Rlc3QuMS5pdGVtcyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MTIwL2FmdGVyL1Rlc3QuMS5pdGVtcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NTI1MzA4Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QxMjAvYWZ0ZXIvVGVzdC4xLml0ZW1zCkBAIC0wLDAgKzEgQEAKK0xpc3Q8amF2YS5sYW5nLlN0cmluZz5cblBzaUxvY2FsVmFyaWFibGU6eQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QxMjAvYWZ0ZXIvVGVzdC5pdGVtcyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MTIwL2FmdGVyL1Rlc3QuaXRlbXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGRlMTFlYQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MTIwL2FmdGVyL1Rlc3QuaXRlbXMKQEAgLTAsMCArMSBAQAorTGlzdFxuUHNpTG9jYWxWYXJpYWJsZTp5CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDEyMC9hZnRlci90ZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDEyMC9hZnRlci90ZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmJiZGM2YwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MTIwL2FmdGVyL3Rlc3QuamF2YQpAQCAtMCwwICsxLDE1IEBACitjbGFzcyBBIHt9CisKK2NsYXNzIExpc3Q8VD4gZXh0ZW5kcyBBIHsKKyAgVCB0OworfQorCisKK2NsYXNzIFRlc3QgeworICB2b2lkIGZvbyAoKXsKKyAgICBMaXN0IHkgPSBudWxsOworICAgIEEgYSA9IHk7CisKKyAgICB5LnQgPSAiIjsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QxMjAvYmVmb3JlL3Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MTIwL2JlZm9yZS90ZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmJiZGM2YwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MTIwL2JlZm9yZS90ZXN0LmphdmEKQEAgLTAsMCArMSwxNSBAQAorY2xhc3MgQSB7fQorCitjbGFzcyBMaXN0PFQ+IGV4dGVuZHMgQSB7CisgIFQgdDsKK30KKworCitjbGFzcyBUZXN0IHsKKyAgdm9pZCBmb28gKCl7CisgICAgTGlzdCB5ID0gbnVsbDsKKyAgICBBIGEgPSB5OworCisgICAgeS50ID0gIiI7CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MTIxL2FmdGVyL1Rlc3QuMS5pdGVtcyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MTIxL2FmdGVyL1Rlc3QuMS5pdGVtcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYmJkN2U0Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QxMjEvYWZ0ZXIvVGVzdC4xLml0ZW1zCkBAIC0wLDAgKzEsMiBAQAorQVxuUHNpTG9jYWxWYXJpYWJsZTphCitMaXN0PGphdmEubGFuZy5TdHJpbmc+XG5Qc2lMb2NhbFZhcmlhYmxlOnkKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MTIxL2FmdGVyL1Rlc3QuaXRlbXMgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDEyMS9hZnRlci9UZXN0Lml0ZW1zCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUyYTZmMjgKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDEyMS9hZnRlci9UZXN0Lml0ZW1zCkBAIC0wLDAgKzEsMiBAQAorQVxuUHNpTG9jYWxWYXJpYWJsZTphCitMaXN0XG5Qc2lMb2NhbFZhcmlhYmxlOnkKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MTIxL2FmdGVyL3Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MTIxL2FmdGVyL3Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMzQ3NmM3Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QxMjEvYWZ0ZXIvdGVzdC5qYXZhCkBAIC0wLDAgKzEsMTUgQEAKK2NsYXNzIEE8WD4ge30KKworY2xhc3MgTGlzdDxUPiBleHRlbmRzIEEgeworICBUIHQ7Cit9CisKKworY2xhc3MgVGVzdCB7CisgIHZvaWQgZm9vICgpeworICAgIExpc3QgeSA9IG51bGw7CisgICAgQSBhID0geTsKKworICAgIHkudCA9ICIiOworICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDEyMS9iZWZvcmUvdGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QxMjEvYmVmb3JlL3Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMzQ3NmM3Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QxMjEvYmVmb3JlL3Rlc3QuamF2YQpAQCAtMCwwICsxLDE1IEBACitjbGFzcyBBPFg+IHt9CisKK2NsYXNzIExpc3Q8VD4gZXh0ZW5kcyBBIHsKKyAgVCB0OworfQorCisKK2NsYXNzIFRlc3QgeworICB2b2lkIGZvbyAoKXsKKyAgICBMaXN0IHkgPSBudWxsOworICAgIEEgYSA9IHk7CisKKyAgICB5LnQgPSAiIjsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QxMjIvYWZ0ZXIvVGVzdC4xLml0ZW1zIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QxMjIvYWZ0ZXIvVGVzdC4xLml0ZW1zCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgzNDJiZGQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDEyMi9hZnRlci9UZXN0LjEuaXRlbXMKQEAgLTAsMCArMSwzIEBACitMaXN0PGphdmEubGFuZy5TdHJpbmc+XG5wYXJhbWV0ZXIgMCBvZiBmb28KK01pc3RcblBzaUxvY2FsVmFyaWFibGU6egorTWlzdFxuUHNpVHlwZUNhc3RFeHByZXNzaW9uOihNaXN0KSB5CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDEyMi9hZnRlci9UZXN0Lml0ZW1zIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QxMjIvYWZ0ZXIvVGVzdC5pdGVtcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNjRlMDQ5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QxMjIvYWZ0ZXIvVGVzdC5pdGVtcwpAQCAtMCwwICsxLDMgQEAKK0xpc3RcbnBhcmFtZXRlciAwIG9mIGZvbworTWlzdFxuUHNpTG9jYWxWYXJpYWJsZTp6CitNaXN0XG5Qc2lUeXBlQ2FzdEV4cHJlc3Npb246KE1pc3QpIHkKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MTIyL2FmdGVyL3Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MTIyL2FmdGVyL3Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MWMxY2JmNgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MTIyL2FmdGVyL3Rlc3QuamF2YQpAQCAtMCwwICsxLDEzIEBACitjbGFzcyBMaXN0PFQ+IHsKKyAgVCB0OworfQorCitjbGFzcyBNaXN0PFE+IGV4dGVuZHMgTGlzdCB7Cit9CisKK2NsYXNzIFRlc3QgeworICB2b2lkIGZvbyAoTGlzdCB5KXsKKyAgICB5LnQgPSAiIjsKKyAgICBNaXN0IHogPSAoTWlzdCkgeTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QxMjIvYmVmb3JlL3Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MTIyL2JlZm9yZS90ZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODFjMWNiZjYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDEyMi9iZWZvcmUvdGVzdC5qYXZhCkBAIC0wLDAgKzEsMTMgQEAKK2NsYXNzIExpc3Q8VD4geworICBUIHQ7Cit9CisKK2NsYXNzIE1pc3Q8UT4gZXh0ZW5kcyBMaXN0IHsKK30KKworY2xhc3MgVGVzdCB7CisgIHZvaWQgZm9vIChMaXN0IHkpeworICAgIHkudCA9ICIiOworICAgIE1pc3QgeiA9IChNaXN0KSB5OworICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDEyMy9hZnRlci9UZXN0LjEuaXRlbXMgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDEyMy9hZnRlci9UZXN0LjEuaXRlbXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjJhNWNiMQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MTIzL2FmdGVyL1Rlc3QuMS5pdGVtcwpAQCAtMCwwICsxIEBACitMaXN0PGphdmEubGFuZy5TdHJpbmc+XG5wYXJhbWV0ZXIgMCBvZiBmb28KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MTIzL2FmdGVyL1Rlc3QuaXRlbXMgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDEyMy9hZnRlci9UZXN0Lml0ZW1zCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA0ZDRjYzAKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDEyMy9hZnRlci9UZXN0Lml0ZW1zCkBAIC0wLDAgKzEgQEAKK0xpc3RcbnBhcmFtZXRlciAwIG9mIGZvbwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QxMjMvYWZ0ZXIvdGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QxMjMvYWZ0ZXIvdGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlhMTk3YTQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDEyMy9hZnRlci90ZXN0LmphdmEKQEAgLTAsMCArMSwxMyBAQAorY2xhc3MgTGlzdDxUPiB7CisgIFQgdDsKK30KKworY2xhc3MgQSBleHRlbmRzIExpc3R7Cit9CisKK2NsYXNzIFRlc3QgeworICB2b2lkIGZvbyAoTGlzdCB5KXsKKyAgICB5LnQgPSAiIjsKKyAgICBBIHogPSAoQSkgeTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QxMjMvYmVmb3JlL3Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MTIzL2JlZm9yZS90ZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWExOTdhNAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MTIzL2JlZm9yZS90ZXN0LmphdmEKQEAgLTAsMCArMSwxMyBAQAorY2xhc3MgTGlzdDxUPiB7CisgIFQgdDsKK30KKworY2xhc3MgQSBleHRlbmRzIExpc3R7Cit9CisKK2NsYXNzIFRlc3QgeworICB2b2lkIGZvbyAoTGlzdCB5KXsKKyAgICB5LnQgPSAiIjsKKyAgICBBIHogPSAoQSkgeTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QxMjQvYWZ0ZXIvVGVzdC4xLml0ZW1zIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QxMjQvYWZ0ZXIvVGVzdC4xLml0ZW1zCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFhNTYxZTkxCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QxMjQvYWZ0ZXIvVGVzdC4xLml0ZW1zCkBAIC0wLDAgKzEgQEAKK01hcFtdXG5Qc2lMb2NhbFZhcmlhYmxlOnJlYWRWYXJpYWJsZXMKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MTI0L2FmdGVyL1Rlc3QuaXRlbXMgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDEyNC9hZnRlci9UZXN0Lml0ZW1zCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFhNTYxZTkxCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QxMjQvYWZ0ZXIvVGVzdC5pdGVtcwpAQCAtMCwwICsxIEBACitNYXBbXVxuUHNpTG9jYWxWYXJpYWJsZTpyZWFkVmFyaWFibGVzCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDEyNC9hZnRlci90ZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDEyNC9hZnRlci90ZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzExNWRkYwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MTI0L2FmdGVyL3Rlc3QuamF2YQpAQCAtMCwwICsxLDEyIEBACitpbnRlcmZhY2UgTWFwPEssIFY+IHsKK30KKworY2xhc3MgVEhhc2hNYXAgaW1wbGVtZW50cyBNYXAgeworfQorCitjbGFzcyBUZXN0IHsKKyAgdm9pZCBmKCkgeworICAgIE1hcFtdIHJlYWRWYXJpYWJsZXMgPSBudWxsOworICAgIHJlYWRWYXJpYWJsZXNbMF0gPSBuZXcgVEhhc2hNYXAoKTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QxMjQvYmVmb3JlL3Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MTI0L2JlZm9yZS90ZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzExNWRkYwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MTI0L2JlZm9yZS90ZXN0LmphdmEKQEAgLTAsMCArMSwxMiBAQAoraW50ZXJmYWNlIE1hcDxLLCBWPiB7Cit9CisKK2NsYXNzIFRIYXNoTWFwIGltcGxlbWVudHMgTWFwIHsKK30KKworY2xhc3MgVGVzdCB7CisgIHZvaWQgZigpIHsKKyAgICBNYXBbXSByZWFkVmFyaWFibGVzID0gbnVsbDsKKyAgICByZWFkVmFyaWFibGVzWzBdID0gbmV3IFRIYXNoTWFwKCk7CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MTI1L2FmdGVyL1Rlc3QuMS5pdGVtcyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MTI1L2FmdGVyL1Rlc3QuMS5pdGVtcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NmU4MTZhCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QxMjUvYWZ0ZXIvVGVzdC4xLml0ZW1zCkBAIC0wLDAgKzEgQEAKK01hcDxqYXZhLmxhbmcuU3RyaW5nLExpc3Q+XG5Qc2lMb2NhbFZhcmlhYmxlOnoKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MTI1L2FmdGVyL1Rlc3QuaXRlbXMgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDEyNS9hZnRlci9UZXN0Lml0ZW1zCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRiNGRlM2MKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDEyNS9hZnRlci9UZXN0Lml0ZW1zCkBAIC0wLDAgKzEgQEAKK01hcFxuUHNpTG9jYWxWYXJpYWJsZTp6CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDEyNS9hZnRlci90ZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDEyNS9hZnRlci90ZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGI3ODEzMwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MTI1L2FmdGVyL3Rlc3QuamF2YQpAQCAtMCwwICsxLDIwIEBACitjbGFzcyBNYXA8QSwgQj57CisgIEEgYTsKKyAgQiBiOworfQorCitjbGFzcyBMaXN0PEM+eworfQorCitjbGFzcyBUZXN0IHsKKyAgdm9pZCBmKCkgeworICAgIExpc3Q8SW50ZWdlcj4geCA9IG51bGw7CisgICAgTGlzdDxTdHJpbmc+IHkgPSBudWxsOworCisgICAgTWFwIHogPSBudWxsOworCisgICAgei5hID0gIiI7CisgICAgei5iID0geDsKKyAgICB6LmIgPSB5OworICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDEyNS9iZWZvcmUvdGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QxMjUvYmVmb3JlL3Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYjc4MTMzCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QxMjUvYmVmb3JlL3Rlc3QuamF2YQpAQCAtMCwwICsxLDIwIEBACitjbGFzcyBNYXA8QSwgQj57CisgIEEgYTsKKyAgQiBiOworfQorCitjbGFzcyBMaXN0PEM+eworfQorCitjbGFzcyBUZXN0IHsKKyAgdm9pZCBmKCkgeworICAgIExpc3Q8SW50ZWdlcj4geCA9IG51bGw7CisgICAgTGlzdDxTdHJpbmc+IHkgPSBudWxsOworCisgICAgTWFwIHogPSBudWxsOworCisgICAgei5hID0gIiI7CisgICAgei5iID0geDsKKyAgICB6LmIgPSB5OworICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDEyNi9hZnRlci9UZXN0LjEuaXRlbXMgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDEyNi9hZnRlci9UZXN0LjEuaXRlbXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGI0ZGUzYwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MTI2L2FmdGVyL1Rlc3QuMS5pdGVtcwpAQCAtMCwwICsxIEBACitNYXBcblBzaUxvY2FsVmFyaWFibGU6egpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QxMjYvYWZ0ZXIvVGVzdC5pdGVtcyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MTI2L2FmdGVyL1Rlc3QuaXRlbXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGI0ZGUzYwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MTI2L2FmdGVyL1Rlc3QuaXRlbXMKQEAgLTAsMCArMSBAQAorTWFwXG5Qc2lMb2NhbFZhcmlhYmxlOnoKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MTI2L2FmdGVyL3Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MTI2L2FmdGVyL3Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNDI0NGI1Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QxMjYvYWZ0ZXIvdGVzdC5qYXZhCkBAIC0wLDAgKzEsMTkgQEAKK2NsYXNzIE1hcDxBLCBCPnsKKyAgQSBhOworICBCIGI7Cit9CisKK2NsYXNzIExpc3Q8Qz57Cit9CisKK2NsYXNzIFRlc3QgeworICB2b2lkIGYoKSB7CisgICAgTWFwPFN0cmluZywgTGlzdDxTdHJpbmc+PiB4ID0gbnVsbDsKKyAgICBNYXA8U3RyaW5nLCBMaXN0PEludGVnZXI+PiB5ID0gbnVsbDsKKworICAgIE1hcCB6ID0gbnVsbDsKKworICAgIHogPSB4OworICAgIHogPSB5OworICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDEyNi9iZWZvcmUvdGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QxMjYvYmVmb3JlL3Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNDI0NGI1Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QxMjYvYmVmb3JlL3Rlc3QuamF2YQpAQCAtMCwwICsxLDE5IEBACitjbGFzcyBNYXA8QSwgQj57CisgIEEgYTsKKyAgQiBiOworfQorCitjbGFzcyBMaXN0PEM+eworfQorCitjbGFzcyBUZXN0IHsKKyAgdm9pZCBmKCkgeworICAgIE1hcDxTdHJpbmcsIExpc3Q8U3RyaW5nPj4geCA9IG51bGw7CisgICAgTWFwPFN0cmluZywgTGlzdDxJbnRlZ2VyPj4geSA9IG51bGw7CisKKyAgICBNYXAgeiA9IG51bGw7CisKKyAgICB6ID0geDsKKyAgICB6ID0geTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QxMjcvYWZ0ZXIvVGVzdC4xLml0ZW1zIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QxMjcvYWZ0ZXIvVGVzdC4xLml0ZW1zCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIzNjQyYzYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDEyNy9hZnRlci9UZXN0LjEuaXRlbXMKQEAgLTAsMCArMSwyIEBACitMaXN0PEE+XG5Qc2lMb2NhbFZhcmlhYmxlOmIKK0xpc3Q8QT5cbm5ldwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QxMjcvYWZ0ZXIvVGVzdC5pdGVtcyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MTI3L2FmdGVyL1Rlc3QuaXRlbXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2Y5ZmUxNwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MTI3L2FmdGVyL1Rlc3QuaXRlbXMKQEAgLTAsMCArMSwyIEBACitMaXN0XG5Qc2lMb2NhbFZhcmlhYmxlOmIKK0xpc3Rcbm5ldwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QxMjcvYWZ0ZXIvdGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QxMjcvYWZ0ZXIvdGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNkZWU2YTIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDEyNy9hZnRlci90ZXN0LmphdmEKQEAgLTAsMCArMSwzMiBAQAorY2xhc3MgQSB7Cit9CisKK2NsYXNzIEIgZXh0ZW5kcyBBIHsKK30KKworY2xhc3MgQ29sbGVjdGlvbjxFPnsKK30KKworY2xhc3MgTGlzdDxUPiBleHRlbmRzIENvbGxlY3Rpb248VD4geworICBMaXN0KENvbGxlY3Rpb248VD4gYSl7CisgIH0KKworICBUIHQ7Cit9CisKK2NsYXNzIENvbnZlcnRvcnsKKyAgIHN0YXRpYyA8WD4gTGlzdDxYPiBhc0xpc3QgKFhbXSB4KXsKKyAgICByZXR1cm4gbnVsbDsKKyAgIH0KK30KKworY2xhc3MgVGVzdCB7CisKKyAgdm9pZCBmKCkgeworICAgIEFbXSBhID0gbnVsbDsKKyAgICBMaXN0IGIgPSBuZXcgTGlzdChDb252ZXJ0b3IuYXNMaXN0KGEpKTsKKyAgICBCIGMgPSBudWxsOworICAgIGIudCA9IGM7CisgIH0KKworfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QxMjcvYmVmb3JlL3Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MTI3L2JlZm9yZS90ZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2RlZTZhMgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MTI3L2JlZm9yZS90ZXN0LmphdmEKQEAgLTAsMCArMSwzMiBAQAorY2xhc3MgQSB7Cit9CisKK2NsYXNzIEIgZXh0ZW5kcyBBIHsKK30KKworY2xhc3MgQ29sbGVjdGlvbjxFPnsKK30KKworY2xhc3MgTGlzdDxUPiBleHRlbmRzIENvbGxlY3Rpb248VD4geworICBMaXN0KENvbGxlY3Rpb248VD4gYSl7CisgIH0KKworICBUIHQ7Cit9CisKK2NsYXNzIENvbnZlcnRvcnsKKyAgIHN0YXRpYyA8WD4gTGlzdDxYPiBhc0xpc3QgKFhbXSB4KXsKKyAgICByZXR1cm4gbnVsbDsKKyAgIH0KK30KKworY2xhc3MgVGVzdCB7CisKKyAgdm9pZCBmKCkgeworICAgIEFbXSBhID0gbnVsbDsKKyAgICBMaXN0IGIgPSBuZXcgTGlzdChDb252ZXJ0b3IuYXNMaXN0KGEpKTsKKyAgICBCIGMgPSBudWxsOworICAgIGIudCA9IGM7CisgIH0KKworfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QxMjgvYWZ0ZXIvVGVzdC4xLml0ZW1zIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QxMjgvYWZ0ZXIvVGVzdC4xLml0ZW1zCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFmNDM5NjMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDEyOC9hZnRlci9UZXN0LjEuaXRlbXMKQEAgLTAsMCArMSBAQAorQ29sbGVjdGlvbjxCPlxucGFyYW1ldGVyIDAgb2YgZwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QxMjgvYWZ0ZXIvVGVzdC5pdGVtcyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MTI4L2FmdGVyL1Rlc3QuaXRlbXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmMwODlmYQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MTI4L2FmdGVyL1Rlc3QuaXRlbXMKQEAgLTAsMCArMSBAQAorQ29sbGVjdGlvblxucGFyYW1ldGVyIDAgb2YgZwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QxMjgvYWZ0ZXIvdGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QxMjgvYWZ0ZXIvdGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVmZWZhODYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDEyOC9hZnRlci90ZXN0LmphdmEKQEAgLTAsMCArMSwyMSBAQAorY2xhc3MgQSB7fQorY2xhc3MgQiBleHRlbmRzIEEge30KKworY2xhc3MgQ29sbGVjdGlvbjxUPnsKKyAgVCB0OworfQorCitjbGFzcyBTZXQ8WD4gZXh0ZW5kcyBDb2xsZWN0aW9uPFg+eworCit9CisKK2NsYXNzIFRlc3QgeworICB2b2lkIGcoQ29sbGVjdGlvbiBhbmNlc3RvcnMpIHsKKyAgICBBIGEgPSAoQSkgYW5jZXN0b3JzLnQ7CisgIH0KKworICB2b2lkIGYoKSB7CisgICAgU2V0PEI+IHggPSBudWxsOworICAgIGcoeCk7CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MTI4L2JlZm9yZS90ZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDEyOC9iZWZvcmUvdGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVmZWZhODYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDEyOC9iZWZvcmUvdGVzdC5qYXZhCkBAIC0wLDAgKzEsMjEgQEAKK2NsYXNzIEEge30KK2NsYXNzIEIgZXh0ZW5kcyBBIHt9CisKK2NsYXNzIENvbGxlY3Rpb248VD57CisgIFQgdDsKK30KKworY2xhc3MgU2V0PFg+IGV4dGVuZHMgQ29sbGVjdGlvbjxYPnsKKworfQorCitjbGFzcyBUZXN0IHsKKyAgdm9pZCBnKENvbGxlY3Rpb24gYW5jZXN0b3JzKSB7CisgICAgQSBhID0gKEEpIGFuY2VzdG9ycy50OworICB9CisKKyAgdm9pZCBmKCkgeworICAgIFNldDxCPiB4ID0gbnVsbDsKKyAgICBnKHgpOworICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDEyOS9hZnRlci9UZXN0LjEuaXRlbXMgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDEyOS9hZnRlci9UZXN0LjEuaXRlbXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTRkM2U3NQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MTI5L2FmdGVyL1Rlc3QuMS5pdGVtcwpAQCAtMCwwICsxLDIgQEAKK0NvbGxlY3Rpb248Qj5cbnBhcmFtZXRlciAwIG9mIGcKK1NldDxCPlxuUHNpTG9jYWxWYXJpYWJsZTp4CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDEyOS9hZnRlci9UZXN0Lml0ZW1zIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QxMjkvYWZ0ZXIvVGVzdC5pdGVtcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NTkwYWZlCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QxMjkvYWZ0ZXIvVGVzdC5pdGVtcwpAQCAtMCwwICsxLDIgQEAKK0NvbGxlY3Rpb25cbnBhcmFtZXRlciAwIG9mIGcKK1NldFxuUHNpTG9jYWxWYXJpYWJsZTp4CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDEyOS9hZnRlci90ZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDEyOS9hZnRlci90ZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjIxZWE4MwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MTI5L2FmdGVyL3Rlc3QuamF2YQpAQCAtMCwwICsxLDIyIEBACitjbGFzcyBBIHt9CitjbGFzcyBCIGV4dGVuZHMgQSB7fQorCitjbGFzcyBDb2xsZWN0aW9uPFQ+eworICBUIHQ7Cit9CisKK2NsYXNzIFNldDxYPiBleHRlbmRzIENvbGxlY3Rpb248WD57CisKK30KKworY2xhc3MgVGVzdCB7CisgIHZvaWQgZyhDb2xsZWN0aW9uIGFuY2VzdG9ycykgeworICAgIEEgYSA9IChBKSBhbmNlc3RvcnMudDsKKyAgfQorCisgIHZvaWQgZigpIHsKKyAgICBTZXQgeCA9IG51bGw7CisgICAgeC50ID0gbmV3IEIoKTsKKyAgICBnKHgpOworICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDEyOS9iZWZvcmUvdGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QxMjkvYmVmb3JlL3Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMjFlYTgzCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QxMjkvYmVmb3JlL3Rlc3QuamF2YQpAQCAtMCwwICsxLDIyIEBACitjbGFzcyBBIHt9CitjbGFzcyBCIGV4dGVuZHMgQSB7fQorCitjbGFzcyBDb2xsZWN0aW9uPFQ+eworICBUIHQ7Cit9CisKK2NsYXNzIFNldDxYPiBleHRlbmRzIENvbGxlY3Rpb248WD57CisKK30KKworY2xhc3MgVGVzdCB7CisgIHZvaWQgZyhDb2xsZWN0aW9uIGFuY2VzdG9ycykgeworICAgIEEgYSA9IChBKSBhbmNlc3RvcnMudDsKKyAgfQorCisgIHZvaWQgZigpIHsKKyAgICBTZXQgeCA9IG51bGw7CisgICAgeC50ID0gbmV3IEIoKTsKKyAgICBnKHgpOworICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDEzL2FmdGVyL1Rlc3QuMS5pdGVtcyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MTMvYWZ0ZXIvVGVzdC4xLml0ZW1zCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJkM2U0NjM3Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QxMy9hZnRlci9UZXN0LjEuaXRlbXMKQEAgLTAsMCArMSwzIEBACitMaW5rZWRMaXN0PExpbmtlZExpc3Q+XG5Qc2lGaWVsZDp5CitMaW5rZWRMaXN0XG5Qc2lGaWVsZDp4CitMaW5rZWRMaXN0XG5Qc2lUeXBlQ2FzdEV4cHJlc3Npb246KExpbmtlZExpc3QpIHkuZ2V0KCkKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MTMvYWZ0ZXIvVGVzdC5pdGVtcyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MTMvYWZ0ZXIvVGVzdC5pdGVtcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZjY4NzIwCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QxMy9hZnRlci9UZXN0Lml0ZW1zCkBAIC0wLDAgKzEsMyBAQAorTGlua2VkTGlzdFxuUHNpRmllbGQ6eAorTGlua2VkTGlzdFxuUHNpRmllbGQ6eQorTGlua2VkTGlzdFxuUHNpVHlwZUNhc3RFeHByZXNzaW9uOihMaW5rZWRMaXN0KSB5LmdldCgpCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDEzL2FmdGVyL3Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MTMvYWZ0ZXIvdGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxNDY3NTYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDEzL2FmdGVyL3Rlc3QuamF2YQpAQCAtMCwwICsxLDIyIEBACitjbGFzcyBMaW5rZWRMaXN0PFQ+eworICAgIFQgdDsKKyAgICBwdWJsaWMgVCBnZXQoKXtyZXR1cm4gdDt9CisgICAgcHVibGljIHZvaWQgc2V0IChUIHQpeworCXRoaXMudCA9IHQ7CisgICAgfSAgICAKK30KKworY2xhc3MgU2ltcGxlIHsKKyAgIGJvb2xlYW4gZigpeworICAgIHJldHVybiBmYWxzZTsKKyAgIH0KK30KKworY2xhc3MgVGVzdHsKKyAgICBMaW5rZWRMaXN0IHk7CisgICAgTGlua2VkTGlzdCB4OworICAgIAorICAgIHZvaWQgZigpeworICAgICAgeCA9IChMaW5rZWRMaXN0KSB5LmdldCgpOworICAgIH0gICAKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MTMvYmVmb3JlL3Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MTMvYmVmb3JlL3Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMTQ2NzU2Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QxMy9iZWZvcmUvdGVzdC5qYXZhCkBAIC0wLDAgKzEsMjIgQEAKK2NsYXNzIExpbmtlZExpc3Q8VD57CisgICAgVCB0OworICAgIHB1YmxpYyBUIGdldCgpe3JldHVybiB0O30KKyAgICBwdWJsaWMgdm9pZCBzZXQgKFQgdCl7CisJdGhpcy50ID0gdDsKKyAgICB9ICAgIAorfQorCitjbGFzcyBTaW1wbGUgeworICAgYm9vbGVhbiBmKCl7CisgICAgcmV0dXJuIGZhbHNlOworICAgfQorfQorCitjbGFzcyBUZXN0eworICAgIExpbmtlZExpc3QgeTsKKyAgICBMaW5rZWRMaXN0IHg7CisgICAgCisgICAgdm9pZCBmKCl7CisgICAgICB4ID0gKExpbmtlZExpc3QpIHkuZ2V0KCk7CisgICAgfSAgIAorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QxMzAvYWZ0ZXIvVGVzdC4xLml0ZW1zIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QxMzAvYWZ0ZXIvVGVzdC4xLml0ZW1zCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhiOTBjYmMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDEzMC9hZnRlci9UZXN0LjEuaXRlbXMKQEAgLTAsMCArMSwzIEBACitBcnJheUxpc3RcblBzaUxvY2FsVmFyaWFibGU6cmVxdWVzdHMKK0FycmF5TGlzdFxuUHNpVHlwZUNhc3RFeHByZXNzaW9uOihBcnJheUxpc3QpcmVxdWVzdE1hcC5nZXQobmV3IEEoKSkKK01hcDxBLEFycmF5TGlzdDxCPj5cbnBhcmFtZXRlciAwIG9mIGYKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MTMwL2FmdGVyL1Rlc3QuaXRlbXMgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDEzMC9hZnRlci9UZXN0Lml0ZW1zCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFiNzk4YTEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDEzMC9hZnRlci9UZXN0Lml0ZW1zCkBAIC0wLDAgKzEsMyBAQAorQXJyYXlMaXN0XG5Qc2lMb2NhbFZhcmlhYmxlOnJlcXVlc3RzCitBcnJheUxpc3RcblBzaVR5cGVDYXN0RXhwcmVzc2lvbjooQXJyYXlMaXN0KXJlcXVlc3RNYXAuZ2V0KG5ldyBBKCkpCitNYXBcbnBhcmFtZXRlciAwIG9mIGYKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MTMwL2FmdGVyL3Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MTMwL2FmdGVyL3Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYTdkYjRmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QxMzAvYWZ0ZXIvdGVzdC5qYXZhCkBAIC0wLDAgKzEsMjUgQEAKK2NsYXNzIEEge30KK2NsYXNzIEIge30KKworY2xhc3MgTWFwPFgsIFk+eworIFkgZ2V0IChYIHgpeworICByZXR1cm4gbnVsbDsKKyB9Cit9CisKK2ludGVyZmFjZSBMaXN0PFQ+IHsKKyAgdm9pZCBhZGQoVCB0KTsKK30KKworY2xhc3MgQXJyYXlMaXN0PEU+IGltcGxlbWVudHMgTGlzdDxFPnsKKyAgcHVibGljIHZvaWQgYWRkKEUgZSl7CisgIH0KK30KKworcHVibGljIGNsYXNzIFRlc3QgeworICBwcml2YXRlIHN0YXRpYyB2b2lkIGYoTWFwIHJlcXVlc3RNYXApIHsKKyAgICBBcnJheUxpc3QgcmVxdWVzdHMgPSAoQXJyYXlMaXN0KXJlcXVlc3RNYXAuZ2V0KG5ldyBBKCkpOworICAgIHJlcXVlc3RzLmFkZChuZXcgT2JqZWN0KCkpOworICAgIGYobmV3IE1hcDxBLCBBcnJheUxpc3Q8Qj4+ICgpKTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QxMzAvYmVmb3JlL3Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MTMwL2JlZm9yZS90ZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWE3ZGI0ZgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MTMwL2JlZm9yZS90ZXN0LmphdmEKQEAgLTAsMCArMSwyNSBAQAorY2xhc3MgQSB7fQorY2xhc3MgQiB7fQorCitjbGFzcyBNYXA8WCwgWT57CisgWSBnZXQgKFggeCl7CisgIHJldHVybiBudWxsOworIH0KK30KKworaW50ZXJmYWNlIExpc3Q8VD4geworICB2b2lkIGFkZChUIHQpOworfQorCitjbGFzcyBBcnJheUxpc3Q8RT4gaW1wbGVtZW50cyBMaXN0PEU+eworICBwdWJsaWMgdm9pZCBhZGQoRSBlKXsKKyAgfQorfQorCitwdWJsaWMgY2xhc3MgVGVzdCB7CisgIHByaXZhdGUgc3RhdGljIHZvaWQgZihNYXAgcmVxdWVzdE1hcCkgeworICAgIEFycmF5TGlzdCByZXF1ZXN0cyA9IChBcnJheUxpc3QpcmVxdWVzdE1hcC5nZXQobmV3IEEoKSk7CisgICAgcmVxdWVzdHMuYWRkKG5ldyBPYmplY3QoKSk7CisgICAgZihuZXcgTWFwPEEsIEFycmF5TGlzdDxCPj4gKCkpOworICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDEzMS9hZnRlci9UZXN0LjEuaXRlbXMgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDEzMS9hZnRlci9UZXN0LjEuaXRlbXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmYyMmI0YQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MTMxL2FmdGVyL1Rlc3QuMS5pdGVtcwpAQCAtMCwwICsxLDIgQEAKK0xpc3Q8amF2YS5sYW5nLlN0cmluZz5bXVxucmV0dXJuIG9mIGYKK015TGlzdDxqYXZhLmxhbmcuU3RyaW5nPltdXG5Qc2lGaWVsZDpsCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDEzMS9hZnRlci9UZXN0Lml0ZW1zIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QxMzEvYWZ0ZXIvVGVzdC5pdGVtcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMTBmOGM0Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QxMzEvYWZ0ZXIvVGVzdC5pdGVtcwpAQCAtMCwwICsxLDIgQEAKK0xpc3RbXVxucmV0dXJuIG9mIGYKK015TGlzdFtdXG5Qc2lGaWVsZDpsCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDEzMS9hZnRlci90ZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDEzMS9hZnRlci90ZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzUyNThiYwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MTMxL2FmdGVyL3Rlc3QuamF2YQpAQCAtMCwwICsxLDE5IEBACitjbGFzcyBMaXN0PFQ+IHsKKyAgIFQgdDsKK30KKworY2xhc3MgTXlMaXN0PFA+IGV4dGVuZHMgTGlzdDxQPnsKKworfQorCitwdWJsaWMgY2xhc3MgVGVzdCB7CisgIE15TGlzdFtdIGw7CisKKyAgTGlzdFtdIGYgKCl7CisgICAgcmV0dXJuIGw7CisgIH0KKworICB2b2lkIGcoKXsKKyAgICBsWzBdLnQgPSAiIjsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QxMzEvYmVmb3JlL3Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MTMxL2JlZm9yZS90ZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzUyNThiYwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MTMxL2JlZm9yZS90ZXN0LmphdmEKQEAgLTAsMCArMSwxOSBAQAorY2xhc3MgTGlzdDxUPiB7CisgICBUIHQ7Cit9CisKK2NsYXNzIE15TGlzdDxQPiBleHRlbmRzIExpc3Q8UD57CisKK30KKworcHVibGljIGNsYXNzIFRlc3QgeworICBNeUxpc3RbXSBsOworCisgIExpc3RbXSBmICgpeworICAgIHJldHVybiBsOworICB9CisKKyAgdm9pZCBnKCl7CisgICAgbFswXS50ID0gIiI7CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MTMyL2FmdGVyL1Rlc3QuMS5pdGVtcyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MTMyL2FmdGVyL1Rlc3QuMS5pdGVtcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42Y2I5YTdhCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QxMzIvYWZ0ZXIvVGVzdC4xLml0ZW1zCkBAIC0wLDAgKzEsNiBAQAorVGVzdC5MaXN0PFRlc3QuQT5cbm5ldworVGVzdC5MaXN0PFRlc3QuQT5cbm5ldworVGVzdC5MaXN0PFRlc3QuQT5cbnJldHVybiBvZiBmCitUZXN0Lkxpc3Q8VGVzdC5BPlxucmV0dXJuIG9mIGYKK1Rlc3QuTGlzdDxUZXN0LkE+XG5yZXR1cm4gb2YgZgorVGVzdC5MaXN0PFRlc3QuQT5cbnJldHVybiBvZiBmCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDEzMi9hZnRlci9UZXN0Lml0ZW1zIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QxMzIvYWZ0ZXIvVGVzdC5pdGVtcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYWNlMTc0Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QxMzIvYWZ0ZXIvVGVzdC5pdGVtcwpAQCAtMCwwICsxLDYgQEAKK1Rlc3QuTGlzdFxubmV3CitUZXN0Lkxpc3Rcbm5ldworVGVzdC5MaXN0XG5yZXR1cm4gb2YgZgorVGVzdC5MaXN0XG5yZXR1cm4gb2YgZgorVGVzdC5MaXN0XG5yZXR1cm4gb2YgZgorVGVzdC5MaXN0XG5yZXR1cm4gb2YgZgpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QxMzIvYWZ0ZXIvdGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QxMzIvYWZ0ZXIvdGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUwOGNjNWEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDEzMi9hZnRlci90ZXN0LmphdmEKQEAgLTAsMCArMSwzMiBAQAorcHVibGljIGNsYXNzIFRlc3QgeworICBjbGFzcyBBe30KKyAgY2xhc3MgQiBleHRlbmRzIEF7fQorCisgIGNsYXNzIExpc3Q8WD4geworICAgIExpc3QoWCB4KXsKKworICAgIH0KKyAgfQorCisgIGludGVyZmFjZSBJIHsKKyAgICBMaXN0IGYgKCk7CisgIH0KKworICBJIGkxID0gbmV3IEkoKXsKKyAgICBwdWJsaWMgTGlzdCBmKCl7CisgICAgICByZXR1cm4gaTIuZigpOworICAgIH0KKyAgfTsKKworICBJIGkyID0gbmV3IEkoKXsKKyAgICBwdWJsaWMgTGlzdCBmKCl7CisgICAgICByZXR1cm4gbmV3IExpc3QobmV3IEEoKSk7CisgICAgfQorICB9OworCisgIEkgaTMgPSBuZXcgSSgpeworICAgIHB1YmxpYyBMaXN0IGYoKXsKKyAgICAgIHJldHVybiBuZXcgTGlzdChuZXcgQigpKTsKKyAgICB9CisgIH07Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDEzMi9iZWZvcmUvdGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QxMzIvYmVmb3JlL3Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MDhjYzVhCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QxMzIvYmVmb3JlL3Rlc3QuamF2YQpAQCAtMCwwICsxLDMyIEBACitwdWJsaWMgY2xhc3MgVGVzdCB7CisgIGNsYXNzIEF7fQorICBjbGFzcyBCIGV4dGVuZHMgQXt9CisKKyAgY2xhc3MgTGlzdDxYPiB7CisgICAgTGlzdChYIHgpeworCisgICAgfQorICB9CisKKyAgaW50ZXJmYWNlIEkgeworICAgIExpc3QgZiAoKTsKKyAgfQorCisgIEkgaTEgPSBuZXcgSSgpeworICAgIHB1YmxpYyBMaXN0IGYoKXsKKyAgICAgIHJldHVybiBpMi5mKCk7CisgICAgfQorICB9OworCisgIEkgaTIgPSBuZXcgSSgpeworICAgIHB1YmxpYyBMaXN0IGYoKXsKKyAgICAgIHJldHVybiBuZXcgTGlzdChuZXcgQSgpKTsKKyAgICB9CisgIH07CisKKyAgSSBpMyA9IG5ldyBJKCl7CisgICAgcHVibGljIExpc3QgZigpeworICAgICAgcmV0dXJuIG5ldyBMaXN0KG5ldyBCKCkpOworICAgIH0KKyAgfTsKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MTMzL2FmdGVyL1Rlc3QuMS5pdGVtcyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MTMzL2FmdGVyL1Rlc3QuMS5pdGVtcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNDU3MzgyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QxMzMvYWZ0ZXIvVGVzdC4xLml0ZW1zCkBAIC0wLDAgKzEgQEAKK0xpc3Q8ST5cblBzaUxvY2FsVmFyaWFibGU6eApkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QxMzMvYWZ0ZXIvVGVzdC5pdGVtcyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MTMzL2FmdGVyL1Rlc3QuaXRlbXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmQyMDg4YgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MTMzL2FmdGVyL1Rlc3QuaXRlbXMKQEAgLTAsMCArMSBAQAorTGlzdFxuUHNpTG9jYWxWYXJpYWJsZTp4CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDEzMy9hZnRlci90ZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDEzMy9hZnRlci90ZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjIyYjQxMQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MTMzL2FmdGVyL3Rlc3QuamF2YQpAQCAtMCwwICsxLDEzIEBACitjbGFzcyBMaXN0PFg+eworICBYIHg7Cit9CisKK2ludGVyZmFjZSBJIHt9CisKK3B1YmxpYyBjbGFzcyBUZXN0IHsKKyAgdm9pZCBmb28oKXsKKyAgICBMaXN0IHggPSBudWxsOworICAgIHgueCA9IG5ldyBJKCl7CisgICAgfTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QxMzMvYmVmb3JlL3Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MTMzL2JlZm9yZS90ZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjIyYjQxMQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MTMzL2JlZm9yZS90ZXN0LmphdmEKQEAgLTAsMCArMSwxMyBAQAorY2xhc3MgTGlzdDxYPnsKKyAgWCB4OworfQorCitpbnRlcmZhY2UgSSB7fQorCitwdWJsaWMgY2xhc3MgVGVzdCB7CisgIHZvaWQgZm9vKCl7CisgICAgTGlzdCB4ID0gbnVsbDsKKyAgICB4LnggPSBuZXcgSSgpeworICAgIH07CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MTM0L2FmdGVyL1Rlc3QuMS5pdGVtcyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MTM0L2FmdGVyL1Rlc3QuMS5pdGVtcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44Mzg3YzQxCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QxMzQvYWZ0ZXIvVGVzdC4xLml0ZW1zCkBAIC0wLDAgKzEgQEAKK0FycmF5TGlzdFxuUHNpTG9jYWxWYXJpYWJsZTpzCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDEzNC9hZnRlci9UZXN0Lml0ZW1zIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QxMzQvYWZ0ZXIvVGVzdC5pdGVtcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44Mzg3YzQxCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QxMzQvYWZ0ZXIvVGVzdC5pdGVtcwpAQCAtMCwwICsxIEBACitBcnJheUxpc3RcblBzaUxvY2FsVmFyaWFibGU6cwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QxMzQvYWZ0ZXIvdGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QxMzQvYWZ0ZXIvdGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNkZjI4NTUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDEzNC9hZnRlci90ZXN0LmphdmEKQEAgLTAsMCArMSwyMCBAQAoraW50ZXJmYWNlIExpc3Q8VD57fQorCitjbGFzcyBBcnJheUxpc3Q8UD4gaW1wbGVtZW50cyBMaXN0PFA+e30KKworY2xhc3MgUGFpcjxYLCBZPnt9CisKK2NsYXNzIEMge30KK2NsYXNzIEEge30KK2NsYXNzIEIgZXh0ZW5kcyBBe30KKworY2xhc3MgVGVzdCB7CisgIHZvaWQgYnVpbGRBbGxNYXBzKCl7CisgICAgTGlzdDxQYWlyPEIsIEM+PiBtZXRob2RzID0gbmV3IEFycmF5TGlzdDxQYWlyPEIsIEM+PigpOworICAgIEFycmF5TGlzdCBzID0gbnVsbDsKKyAgICBnKG1ldGhvZHMpOworICB9CisKKyAgPFQ+IHZvaWQgZyhMaXN0PFBhaXI8VCwgQz4+IGxpc3QpIHsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QxMzQvYmVmb3JlL3Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MTM0L2JlZm9yZS90ZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2RmMjg1NQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MTM0L2JlZm9yZS90ZXN0LmphdmEKQEAgLTAsMCArMSwyMCBAQAoraW50ZXJmYWNlIExpc3Q8VD57fQorCitjbGFzcyBBcnJheUxpc3Q8UD4gaW1wbGVtZW50cyBMaXN0PFA+e30KKworY2xhc3MgUGFpcjxYLCBZPnt9CisKK2NsYXNzIEMge30KK2NsYXNzIEEge30KK2NsYXNzIEIgZXh0ZW5kcyBBe30KKworY2xhc3MgVGVzdCB7CisgIHZvaWQgYnVpbGRBbGxNYXBzKCl7CisgICAgTGlzdDxQYWlyPEIsIEM+PiBtZXRob2RzID0gbmV3IEFycmF5TGlzdDxQYWlyPEIsIEM+PigpOworICAgIEFycmF5TGlzdCBzID0gbnVsbDsKKyAgICBnKG1ldGhvZHMpOworICB9CisKKyAgPFQ+IHZvaWQgZyhMaXN0PFBhaXI8VCwgQz4+IGxpc3QpIHsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QxMzUvYWZ0ZXIvVGVzdC4xLml0ZW1zIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QxMzUvYWZ0ZXIvVGVzdC4xLml0ZW1zCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg4ZmJlNTEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDEzNS9hZnRlci9UZXN0LjEuaXRlbXMKQEAgLTAsMCArMSBAQAorTGlzdDxQYWlyPGphdmEubGFuZy5TdHJpbmcsamF2YS5sYW5nLkludGVnZXI+PlxuUHNpTG9jYWxWYXJpYWJsZTphCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDEzNS9hZnRlci9UZXN0Lml0ZW1zIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QxMzUvYWZ0ZXIvVGVzdC5pdGVtcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYmMyMDUyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QxMzUvYWZ0ZXIvVGVzdC5pdGVtcwpAQCAtMCwwICsxIEBACitMaXN0PFBhaXI+XG5Qc2lMb2NhbFZhcmlhYmxlOmEKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MTM1L2FmdGVyL3Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MTM1L2FmdGVyL3Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYTI1M2VkCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QxMzUvYWZ0ZXIvdGVzdC5qYXZhCkBAIC0wLDAgKzEsMTcgQEAKK2NsYXNzIExpc3Q8UD4geworICBQIHA7Cit9CisKK2NsYXNzIFBhaXI8WCwgWT57CisgIFggeDsKKyAgWSB5OworfQorCitjbGFzcyBUZXN0IHsKKyAgdm9pZCBmKCl7CisgICAgTGlzdDxQYWlyPiBhID0gbnVsbDsKKworICAgIGEucC54ID0gIiI7CisgICAgYS5wLnkgPSBuZXcgSW50ZWdlcigzKTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QxMzUvYmVmb3JlL3Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MTM1L2JlZm9yZS90ZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2EyNTNlZAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MTM1L2JlZm9yZS90ZXN0LmphdmEKQEAgLTAsMCArMSwxNyBAQAorY2xhc3MgTGlzdDxQPiB7CisgIFAgcDsKK30KKworY2xhc3MgUGFpcjxYLCBZPnsKKyAgWCB4OworICBZIHk7Cit9CisKK2NsYXNzIFRlc3QgeworICB2b2lkIGYoKXsKKyAgICBMaXN0PFBhaXI+IGEgPSBudWxsOworCisgICAgYS5wLnggPSAiIjsKKyAgICBhLnAueSA9IG5ldyBJbnRlZ2VyKDMpOworICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDEzNi9hZnRlci9UZXN0LjEuaXRlbXMgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDEzNi9hZnRlci9UZXN0LjEuaXRlbXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODhmYmU1MQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MTM2L2FmdGVyL1Rlc3QuMS5pdGVtcwpAQCAtMCwwICsxIEBACitMaXN0PFBhaXI8amF2YS5sYW5nLlN0cmluZyxqYXZhLmxhbmcuSW50ZWdlcj4+XG5Qc2lMb2NhbFZhcmlhYmxlOmEKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MTM2L2FmdGVyL1Rlc3QuaXRlbXMgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDEzNi9hZnRlci9UZXN0Lml0ZW1zCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQzNWEzNjAKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDEzNi9hZnRlci9UZXN0Lml0ZW1zCkBAIC0wLDAgKzEgQEAKK0xpc3RcblBzaUxvY2FsVmFyaWFibGU6YQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QxMzYvYWZ0ZXIvdGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QxMzYvYWZ0ZXIvdGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk0NDVlMjUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDEzNi9hZnRlci90ZXN0LmphdmEKQEAgLTAsMCArMSwxNCBAQAorY2xhc3MgTGlzdDxQPiB7CisgIFAgcDsKK30KKworY2xhc3MgUGFpcjxYLCBZPnsKKyAgWCB4OworICBZIHk7Cit9CisKK2NsYXNzIFRlc3QgeworICB2b2lkIGYoKXsKKyAgICBMaXN0IGEgPSBuZXcgTGlzdDxQYWlyPFN0cmluZyxJbnRlZ2VyPj4gKCk7CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MTM2L2JlZm9yZS90ZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDEzNi9iZWZvcmUvdGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk0NDVlMjUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDEzNi9iZWZvcmUvdGVzdC5qYXZhCkBAIC0wLDAgKzEsMTQgQEAKK2NsYXNzIExpc3Q8UD4geworICBQIHA7Cit9CisKK2NsYXNzIFBhaXI8WCwgWT57CisgIFggeDsKKyAgWSB5OworfQorCitjbGFzcyBUZXN0IHsKKyAgdm9pZCBmKCl7CisgICAgTGlzdCBhID0gbmV3IExpc3Q8UGFpcjxTdHJpbmcsSW50ZWdlcj4+ICgpOworICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDEzNy9hZnRlci9UZXN0LjEuaXRlbXMgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDEzNy9hZnRlci9UZXN0LjEuaXRlbXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY5ZGUyOQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MTM3L2FmdGVyL1Rlc3QuMS5pdGVtcwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QxMzcvYWZ0ZXIvVGVzdC5pdGVtcyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MTM3L2FmdGVyL1Rlc3QuaXRlbXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY5ZGUyOQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MTM3L2FmdGVyL1Rlc3QuaXRlbXMKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MTM3L2FmdGVyL3Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MTM3L2FmdGVyL3Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZmFhZDJmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QxMzcvYWZ0ZXIvdGVzdC5qYXZhCkBAIC0wLDAgKzEsMTkgQEAKK2ludGVyZmFjZSBDb21wYXJhYmxlPFg+IHsKKyAgICBib29sZWFuIGNvbXBhcmUgKFggYSwgWCBiKTsKK30KKworY2xhc3MgVGVzdCB7CisgIDxUPiB2b2lkIHNvcnQoVFtdIHgsIENvbXBhcmFibGU8VD4gYyl7CisgIH0KKworICB2b2lkIGYoKXsKKyAgICBzb3J0KAorICAgICAgbmV3IFN0cmluZ1sxXSwKKyAgICAgIG5ldyBDb21wYXJhYmxlKCl7CisgICAgICAgIHB1YmxpYyBib29sZWFuIGNvbXBhcmUoT2JqZWN0IGEsIE9iamVjdCBiKSB7CisgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICApOworICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDEzNy9iZWZvcmUvdGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QxMzcvYmVmb3JlL3Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZmFhZDJmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QxMzcvYmVmb3JlL3Rlc3QuamF2YQpAQCAtMCwwICsxLDE5IEBACitpbnRlcmZhY2UgQ29tcGFyYWJsZTxYPiB7CisgICAgYm9vbGVhbiBjb21wYXJlIChYIGEsIFggYik7Cit9CisKK2NsYXNzIFRlc3QgeworICA8VD4gdm9pZCBzb3J0KFRbXSB4LCBDb21wYXJhYmxlPFQ+IGMpeworICB9CisKKyAgdm9pZCBmKCl7CisgICAgc29ydCgKKyAgICAgIG5ldyBTdHJpbmdbMV0sCisgICAgICBuZXcgQ29tcGFyYWJsZSgpeworICAgICAgICBwdWJsaWMgYm9vbGVhbiBjb21wYXJlKE9iamVjdCBhLCBPYmplY3QgYikgeworICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICB9CisgICAgKTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QxMzgvYWZ0ZXIvdGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QxMzgvYWZ0ZXIvdGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ0YjFjMTAKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDEzOC9hZnRlci90ZXN0LmphdmEKQEAgLTAsMCArMSwyNSBAQAorY2xhc3MgTWFwPFgsWT57CisgIHZvaWQgcHV0IChYIHgsIFkgeSl7CisgIH0KKworICBZIGdldChYIHgpeworICAgIHJldHVybiBudWxsOworICB9Cit9CisKK2NsYXNzIExpc3Q8Wj57CisgIFogejsKK30KKworY2xhc3MgVGVzdHsKKyAgTWFwPExpc3QsIE9iamVjdD4geTsKKworICB2b2lkIGZvbygpeworICAgIExpc3Q8SW50ZWdlcj4gbGkgPSBudWxsOworICAgIHkucHV0KGxpLCAiIik7CisgIH0KKworICA8VD4gdm9pZCBmIChMaXN0PFQ+IHgsIFQgeil7CisgICAgeS5wdXQoeCwgeik7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDEzOC9iZWZvcmUvdGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QxMzgvYmVmb3JlL3Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNGIxYzEwCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QxMzgvYmVmb3JlL3Rlc3QuamF2YQpAQCAtMCwwICsxLDI1IEBACitjbGFzcyBNYXA8WCxZPnsKKyAgdm9pZCBwdXQgKFggeCwgWSB5KXsKKyAgfQorCisgIFkgZ2V0KFggeCl7CisgICAgcmV0dXJuIG51bGw7CisgIH0KK30KKworY2xhc3MgTGlzdDxaPnsKKyAgWiB6OworfQorCitjbGFzcyBUZXN0eworICBNYXA8TGlzdCwgT2JqZWN0PiB5OworCisgIHZvaWQgZm9vKCl7CisgICAgTGlzdDxJbnRlZ2VyPiBsaSA9IG51bGw7CisgICAgeS5wdXQobGksICIiKTsKKyAgfQorCisgIDxUPiB2b2lkIGYgKExpc3Q8VD4geCwgVCB6KXsKKyAgICB5LnB1dCh4LCB6KTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MTM5L2FmdGVyL1Rlc3QuMS5pdGVtcyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MTM5L2FmdGVyL1Rlc3QuMS5pdGVtcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNDFhMTNjCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QxMzkvYWZ0ZXIvVGVzdC4xLml0ZW1zCkBAIC0wLDAgKzEgQEAKK0xpc3Q8amF2YS5sYW5nLkludGVnZXI+XG5Qc2lMb2NhbFZhcmlhYmxlOngKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MTM5L2FmdGVyL1Rlc3QuaXRlbXMgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDEzOS9hZnRlci9UZXN0Lml0ZW1zCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJkMjA4OGIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDEzOS9hZnRlci9UZXN0Lml0ZW1zCkBAIC0wLDAgKzEgQEAKK0xpc3RcblBzaUxvY2FsVmFyaWFibGU6eApkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QxMzkvYWZ0ZXIvdGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QxMzkvYWZ0ZXIvdGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUxZmRlZTQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDEzOS9hZnRlci90ZXN0LmphdmEKQEAgLTAsMCArMSwxNiBAQAorY2xhc3MgTGlzdDxaPnsKKyAgPFQgZXh0ZW5kcyBaPiB2b2lkIHB1dChUIHQpeworICB9CisKKyAgdm9pZCBtdXQoTGlzdDw/IGV4dGVuZHMgWj4gdCl7CisgIH0KK30KKworCitjbGFzcyBUZXN0eworICB2b2lkIGZvbygpeworICAgIExpc3QgeCA9IG51bGw7CisKKyAgICB4Lm11dChuZXcgTGlzdDxJbnRlZ2VyPigpKTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MTM5L2JlZm9yZS90ZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDEzOS9iZWZvcmUvdGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUxZmRlZTQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDEzOS9iZWZvcmUvdGVzdC5qYXZhCkBAIC0wLDAgKzEsMTYgQEAKK2NsYXNzIExpc3Q8Wj57CisgIDxUIGV4dGVuZHMgWj4gdm9pZCBwdXQoVCB0KXsKKyAgfQorCisgIHZvaWQgbXV0KExpc3Q8PyBleHRlbmRzIFo+IHQpeworICB9Cit9CisKKworY2xhc3MgVGVzdHsKKyAgdm9pZCBmb28oKXsKKyAgICBMaXN0IHggPSBudWxsOworCisgICAgeC5tdXQobmV3IExpc3Q8SW50ZWdlcj4oKSk7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDE0L2FmdGVyL1Rlc3QuMS5pdGVtcyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MTQvYWZ0ZXIvVGVzdC4xLml0ZW1zCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY0NDQ4YTkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDE0L2FmdGVyL1Rlc3QuMS5pdGVtcwpAQCAtMCwwICsxLDIgQEAKK0xpbmtlZExpc3Q8TGlua2VkTGlzdDxTaW1wbGU+PlxuUHNpRmllbGQ6eQorTGlua2VkTGlzdDxTaW1wbGU+XG5Qc2lGaWVsZDp4CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDE0L2FmdGVyL1Rlc3QuaXRlbXMgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDE0L2FmdGVyL1Rlc3QuaXRlbXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzYwMzI5MAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MTQvYWZ0ZXIvVGVzdC5pdGVtcwpAQCAtMCwwICsxLDIgQEAKK0xpbmtlZExpc3RcblBzaUZpZWxkOngKK0xpbmtlZExpc3RcblBzaUZpZWxkOnkKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MTQvYWZ0ZXIvdGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QxNC9hZnRlci90ZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODFjYjAzMgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MTQvYWZ0ZXIvdGVzdC5qYXZhCkBAIC0wLDAgKzEsMjMgQEAKK2NsYXNzIExpbmtlZExpc3Q8VD57CisgICAgVCB0OworICAgIHB1YmxpYyBUIGdldCgpe3JldHVybiB0O30KKyAgICBwdWJsaWMgdm9pZCBzZXQgKFQgdCl7CisJdGhpcy50ID0gdDsKKyAgICB9ICAgIAorfQorCitjbGFzcyBTaW1wbGUgeworICAgYm9vbGVhbiBmKCl7CisgICAgcmV0dXJuIGZhbHNlOworICAgfQorfQorCitjbGFzcyBUZXN0eworICAgIExpbmtlZExpc3QgeTsKKyAgICBMaW5rZWRMaXN0IHg7CisgICAgCisgICAgdm9pZCBmKCl7CisgICAgICB4ID0geS5nZXQoKTsKKyAgICAgIHkuc2V0KG5ldyBMaW5rZWRMaXN0PFNpbXBsZT4gKCkpOworICAgIH0gICAKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MTQvYmVmb3JlL3Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MTQvYmVmb3JlL3Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MWNiMDMyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QxNC9iZWZvcmUvdGVzdC5qYXZhCkBAIC0wLDAgKzEsMjMgQEAKK2NsYXNzIExpbmtlZExpc3Q8VD57CisgICAgVCB0OworICAgIHB1YmxpYyBUIGdldCgpe3JldHVybiB0O30KKyAgICBwdWJsaWMgdm9pZCBzZXQgKFQgdCl7CisJdGhpcy50ID0gdDsKKyAgICB9ICAgIAorfQorCitjbGFzcyBTaW1wbGUgeworICAgYm9vbGVhbiBmKCl7CisgICAgcmV0dXJuIGZhbHNlOworICAgfQorfQorCitjbGFzcyBUZXN0eworICAgIExpbmtlZExpc3QgeTsKKyAgICBMaW5rZWRMaXN0IHg7CisgICAgCisgICAgdm9pZCBmKCl7CisgICAgICB4ID0geS5nZXQoKTsKKyAgICAgIHkuc2V0KG5ldyBMaW5rZWRMaXN0PFNpbXBsZT4gKCkpOworICAgIH0gICAKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MTQwL2FmdGVyL1Rlc3QuMS5pdGVtcyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MTQwL2FmdGVyL1Rlc3QuMS5pdGVtcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZTc0Y2Q0Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QxNDAvYWZ0ZXIvVGVzdC4xLml0ZW1zCkBAIC0wLDAgKzEgQEAKK01hcDxqYXZhLmxhbmcuU3RyaW5nLGphdmEubGFuZy5JbnRlZ2VyPlxuUHNpTG9jYWxWYXJpYWJsZTptYXAKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MTQwL2FmdGVyL1Rlc3QuaXRlbXMgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDE0MC9hZnRlci9UZXN0Lml0ZW1zCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg4ZDhhYjEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDE0MC9hZnRlci9UZXN0Lml0ZW1zCkBAIC0wLDAgKzEgQEAKK01hcFxuUHNpTG9jYWxWYXJpYWJsZTptYXAKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MTQwL2FmdGVyL3Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MTQwL2FmdGVyL3Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMWNjNGNhCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QxNDAvYWZ0ZXIvdGVzdC5qYXZhCkBAIC0wLDAgKzEsMjEgQEAKK2ludGVyZmFjZSBJdGVyYXRvcjxFPiB7CisgICAgRSBuZXh0KCk7Cit9CisKK2ludGVyZmFjZSBDb2xsZWN0aW9uPEU+IHsKKyAgICBJdGVyYXRvcjxFPiBpdGVyYXRvcigpOworfQorCitpbnRlcmZhY2UgTWFwPEssVj4geworICAgIFYgcHV0KEsga2V5LCBWIHZhbHVlKTsKKyAgICBDb2xsZWN0aW9uPFY+IHZhbHVlcygpOworfQorCitjbGFzcyBUZXN0IHsKKwlwdWJsaWMgdm9pZCBkb1Rlc3QgKCkgeworCQlNYXAgbWFwOworCQltYXAucHV0ICgia2V5IiwgbmV3IEludGVnZXIgKDApKTsKKworICAgICAgICBJbnRlZ2VyIHJlcyA9IChJbnRlZ2VyKSBtYXAudmFsdWVzICgpLml0ZXJhdG9yICgpLm5leHQgKCk7CisJfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QxNDAvYmVmb3JlL3Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MTQwL2JlZm9yZS90ZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTFjYzRjYQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MTQwL2JlZm9yZS90ZXN0LmphdmEKQEAgLTAsMCArMSwyMSBAQAoraW50ZXJmYWNlIEl0ZXJhdG9yPEU+IHsKKyAgICBFIG5leHQoKTsKK30KKworaW50ZXJmYWNlIENvbGxlY3Rpb248RT4geworICAgIEl0ZXJhdG9yPEU+IGl0ZXJhdG9yKCk7Cit9CisKK2ludGVyZmFjZSBNYXA8SyxWPiB7CisgICAgViBwdXQoSyBrZXksIFYgdmFsdWUpOworICAgIENvbGxlY3Rpb248Vj4gdmFsdWVzKCk7Cit9CisKK2NsYXNzIFRlc3QgeworCXB1YmxpYyB2b2lkIGRvVGVzdCAoKSB7CisJCU1hcCBtYXA7CisJCW1hcC5wdXQgKCJrZXkiLCBuZXcgSW50ZWdlciAoMCkpOworCisgICAgICAgIEludGVnZXIgcmVzID0gKEludGVnZXIpIG1hcC52YWx1ZXMgKCkuaXRlcmF0b3IgKCkubmV4dCAoKTsKKwl9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDE0MS9iZWZvcmUvdGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QxNDEvYmVmb3JlL3Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MTBjNzA4Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QxNDEvYmVmb3JlL3Rlc3QuamF2YQpAQCAtMCwwICsxLDggQEAKK2ludGVyZmFjZSBJPFQ+e30KKworY2xhc3MgUGFpcjxYIGV4dGVuZHMgSTxZPiwgWSBleHRlbmRzIEk8WD4+IHsKK30KKworcHVibGljIGNsYXNzIFRlc3QgeworICBQYWlyIHBhaXI7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QxNDIvYmVmb3JlL3Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MTQyL2JlZm9yZS90ZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTRiZGYzOQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MTQyL2JlZm9yZS90ZXN0LmphdmEKQEAgLTAsMCArMSw4IEBACitpbnRlcmZhY2UgSTxUPnt9CisKK2NsYXNzIFBhaXI8WCBleHRlbmRzIEk8STw/IGV4dGVuZHMgWT4+LCBZIGV4dGVuZHMgSTxJPD8gc3VwZXIgWD4+PiB7Cit9CisKK3B1YmxpYyBjbGFzcyBUZXN0IHsKKyAgUGFpciBwYWlyOworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MTQzL2JlZm9yZS90ZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDE0My9iZWZvcmUvdGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE0OGVkNDMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDE0My9iZWZvcmUvdGVzdC5qYXZhCkBAIC0wLDAgKzEsMTMgQEAKK2ludGVyZmFjZSBJPFQ+IHt9CisKK2NsYXNzIFBhaXI8WD4geworICB2b2lkIGZvbyAoSTw/IGV4dGVuZHMgWD4gaSl7fQorfQorCitwdWJsaWMgY2xhc3MgVGVzdCB7CisgIFBhaXIgcGFpcjsKKworICB2b2lkIGJhcigpeworICAgIHBhaXIuZm9vIChuZXcgSTxJPiAoKSk7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDE0NC9iZWZvcmUvdGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QxNDQvYmVmb3JlL3Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOGUxZGJjCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QxNDQvYmVmb3JlL3Rlc3QuamF2YQpAQCAtMCwwICsxLDE1IEBACitpbnRlcmZhY2UgSTxUPiB7fQorCitjbGFzcyBQYWlyPFg+IGltcGxlbWVudHMgSTxYPnsKKyAgWCB0OworfQorCitjbGFzcyBUZXN0IHsKKyAgUGFpciBwYWlyOworCisgIDxYPiBYIGZvbyAoSTw/IGV4dGVuZHMgWD4gaSl7cmV0dXJuIG51bGw7fQorCisgIHZvaWQgYmFyKCl7CisgICAgU3RyaW5nIHUgPSAoU3RyaW5nKSBmb28gKHBhaXIpOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QxNDUvYmVmb3JlL3Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MTQ1L2JlZm9yZS90ZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzdjNDA2MjQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDE0NS9iZWZvcmUvdGVzdC5qYXZhCkBAIC0wLDAgKzEsMTMgQEAKK2ludGVyZmFjZSBJPFQ+IHt9CisKK2NsYXNzIFBhaXI8WD4geworICB2b2lkIGdvbyAoSTw/IHN1cGVyIEk8WD4+IGkpe30KK30KKworcHVibGljIGNsYXNzIFRlc3QgeworICBQYWlyIHBhaXI7CisKKyAgdm9pZCBiYXIoKXsKKyAgICBwYWlyLmdvbyAobmV3IEk8ST4gKCkpOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QxNDYvYWZ0ZXIvVGVzdC4xLml0ZW1zIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QxNDYvYWZ0ZXIvVGVzdC4xLml0ZW1zCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM0ZDg1MTAKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDE0Ni9hZnRlci9UZXN0LjEuaXRlbXMKQEAgLTAsMCArMSwyIEBACitMaXN0XG5wYXJhbWV0ZXIgMCBvZiBmCitMaXN0XG5wYXJhbWV0ZXIgMCBvZiBmCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDE0Ni9hZnRlci9UZXN0Lml0ZW1zIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QxNDYvYWZ0ZXIvVGVzdC5pdGVtcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNGQ4NTEwCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QxNDYvYWZ0ZXIvVGVzdC5pdGVtcwpAQCAtMCwwICsxLDIgQEAKK0xpc3RcbnBhcmFtZXRlciAwIG9mIGYKK0xpc3RcbnBhcmFtZXRlciAwIG9mIGYKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MTQ2L2FmdGVyL3Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MTQ2L2FmdGVyL3Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MjA3ODA4Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QxNDYvYWZ0ZXIvdGVzdC5qYXZhCkBAIC0wLDAgKzEsMTcgQEAKK2NsYXNzIExpc3Q8VD4geworICBUIHQ7Cit9CisKK2NsYXNzIFRlc3R7CisgIGNsYXNzIFN1cGVyIHsKKyAgICAgdm9pZCBmIChMaXN0IHgpeworICAgICAgIHggPSBuZXcgTGlzdDxJbnRlZ2VyPigpOworICAgICB9CisgIH0KKworICBjbGFzcyBNaWRkbGUgZXh0ZW5kcyBTdXBlciB7CisgICAgdm9pZCBmIChMaXN0IHgpeworICAgICAgIHgudCA9ICIiOworICAgIH0KKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MTQ2L2JlZm9yZS90ZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDE0Ni9iZWZvcmUvdGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgyMDc4MDgKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDE0Ni9iZWZvcmUvdGVzdC5qYXZhCkBAIC0wLDAgKzEsMTcgQEAKK2NsYXNzIExpc3Q8VD4geworICBUIHQ7Cit9CisKK2NsYXNzIFRlc3R7CisgIGNsYXNzIFN1cGVyIHsKKyAgICAgdm9pZCBmIChMaXN0IHgpeworICAgICAgIHggPSBuZXcgTGlzdDxJbnRlZ2VyPigpOworICAgICB9CisgIH0KKworICBjbGFzcyBNaWRkbGUgZXh0ZW5kcyBTdXBlciB7CisgICAgdm9pZCBmIChMaXN0IHgpeworICAgICAgIHgudCA9ICIiOworICAgIH0KKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MTQ3L2FmdGVyL1Rlc3QuMS5pdGVtcyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MTQ3L2FmdGVyL1Rlc3QuMS5pdGVtcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNTRiOTQ4Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QxNDcvYWZ0ZXIvVGVzdC4xLml0ZW1zCkBAIC0wLDAgKzEsMiBAQAorTGlzdDxqYXZhLmlvLlNlcmlhbGl6YWJsZT5cblBzaUxvY2FsVmFyaWFibGU6Zm9vCitMaXN0PGphdmEuaW8uU2VyaWFsaXphYmxlPlxubmV3CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDE0Ny9hZnRlci9UZXN0Lml0ZW1zIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QxNDcvYWZ0ZXIvVGVzdC5pdGVtcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZTQzN2Y3Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QxNDcvYWZ0ZXIvVGVzdC5pdGVtcwpAQCAtMCwwICsxLDIgQEAKK0xpc3RcblBzaUxvY2FsVmFyaWFibGU6Zm9vCitMaXN0XG5uZXcKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MTQ3L2FmdGVyL3Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MTQ3L2FmdGVyL3Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xODkxNWM1Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QxNDcvYWZ0ZXIvdGVzdC5qYXZhCkBAIC0wLDAgKzEsMTEgQEAKK2NsYXNzIExpc3Q8VD4geworICBwdWJsaWMgdm9pZCBhZGQoVCB0KSB7fQorfQorCitjbGFzcyBUZXN0IHsKKyAgICB2b2lkIGYoKSB7CisgICAgICAgIExpc3QgZm9vID0gbmV3IExpc3QoKTsKKyAgICAgICAgZm9vLmFkZCgzKTsKKyAgICAgICAgZm9vLmFkZCgiYmFyIik7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QxNDcvYmVmb3JlL3Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MTQ3L2JlZm9yZS90ZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTg5MTVjNQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MTQ3L2JlZm9yZS90ZXN0LmphdmEKQEAgLTAsMCArMSwxMSBAQAorY2xhc3MgTGlzdDxUPiB7CisgIHB1YmxpYyB2b2lkIGFkZChUIHQpIHt9Cit9CisKK2NsYXNzIFRlc3QgeworICAgIHZvaWQgZigpIHsKKyAgICAgICAgTGlzdCBmb28gPSBuZXcgTGlzdCgpOworICAgICAgICBmb28uYWRkKDMpOworICAgICAgICBmb28uYWRkKCJiYXIiKTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDE0OC9hZnRlci9UZXN0LjEuaXRlbXMgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDE0OC9hZnRlci9UZXN0LjEuaXRlbXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGQ3YTdmZgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MTQ4L2FmdGVyL1Rlc3QuMS5pdGVtcwpAQCAtMCwwICsxLDMgQEAKK0NvbGxlY3Rpb25cbnBhcmFtZXRlciAwIG9mIHRlc3QKK0xpc3RcblBzaVR5cGVDYXN0RXhwcmVzc2lvbjooTGlzdCljb2xsZWN0aW9uCitMaXN0XG5Qc2lUeXBlQ2FzdEV4cHJlc3Npb246KExpc3QpY29sbGVjdGlvbgpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QxNDgvYWZ0ZXIvVGVzdC5pdGVtcyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MTQ4L2FmdGVyL1Rlc3QuaXRlbXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGQ3YTdmZgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MTQ4L2FmdGVyL1Rlc3QuaXRlbXMKQEAgLTAsMCArMSwzIEBACitDb2xsZWN0aW9uXG5wYXJhbWV0ZXIgMCBvZiB0ZXN0CitMaXN0XG5Qc2lUeXBlQ2FzdEV4cHJlc3Npb246KExpc3QpY29sbGVjdGlvbgorTGlzdFxuUHNpVHlwZUNhc3RFeHByZXNzaW9uOihMaXN0KWNvbGxlY3Rpb24KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MTQ4L2FmdGVyL3Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MTQ4L2FmdGVyL3Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YzAzY2VjCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QxNDgvYWZ0ZXIvdGVzdC5qYXZhCkBAIC0wLDAgKzEsMTcgQEAKK2ludGVyZmFjZSBDb21wYXJhYmxlPFQ+IHt9CitpbnRlcmZhY2UgQ29sbGVjdGlvbjxUPiB7fQoraW50ZXJmYWNlIExpc3Q8VD4gZXh0ZW5kcyBDb2xsZWN0aW9uPFQ+e30KKworY2xhc3MgVGVzdAoreworICAgIHZvaWQgdGVzdChDb2xsZWN0aW9uIGNvbGxlY3Rpb24pIHsKKworICAgICAgICBDb2xsZWN0aW9ucy5zb3J0KChMaXN0KWNvbGxlY3Rpb24pOworICAgICAgICBpZiAoY29sbGVjdGlvbiBpbnN0YW5jZW9mIExpc3QpIHsKKyAgICAgICAgICAgIENvbGxlY3Rpb25zLnNvcnQoKExpc3QpY29sbGVjdGlvbik7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwdWJsaWMgc3RhdGljIDxUIGV4dGVuZHMgQ29tcGFyYWJsZTw/IHN1cGVyIFQ+PiB2b2lkIHNvcnQoTGlzdDxUPiBsaXN0KSB7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MTQ4L2JlZm9yZS90ZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDE0OC9iZWZvcmUvdGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRjMDNjZWMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDE0OC9iZWZvcmUvdGVzdC5qYXZhCkBAIC0wLDAgKzEsMTcgQEAKK2ludGVyZmFjZSBDb21wYXJhYmxlPFQ+IHt9CitpbnRlcmZhY2UgQ29sbGVjdGlvbjxUPiB7fQoraW50ZXJmYWNlIExpc3Q8VD4gZXh0ZW5kcyBDb2xsZWN0aW9uPFQ+e30KKworY2xhc3MgVGVzdAoreworICAgIHZvaWQgdGVzdChDb2xsZWN0aW9uIGNvbGxlY3Rpb24pIHsKKworICAgICAgICBDb2xsZWN0aW9ucy5zb3J0KChMaXN0KWNvbGxlY3Rpb24pOworICAgICAgICBpZiAoY29sbGVjdGlvbiBpbnN0YW5jZW9mIExpc3QpIHsKKyAgICAgICAgICAgIENvbGxlY3Rpb25zLnNvcnQoKExpc3QpY29sbGVjdGlvbik7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwdWJsaWMgc3RhdGljIDxUIGV4dGVuZHMgQ29tcGFyYWJsZTw/IHN1cGVyIFQ+PiB2b2lkIHNvcnQoTGlzdDxUPiBsaXN0KSB7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MTQ5L2FmdGVyL1Rlc3QuMS5pdGVtcyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MTQ5L2FmdGVyL1Rlc3QuMS5pdGVtcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZTVjNjBmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QxNDkvYWZ0ZXIvVGVzdC4xLml0ZW1zCkBAIC0wLDAgKzEsNCBAQAoramF2YS5sYW5nLkludGVnZXJcblBzaVBhcmFtZXRlcjp2YWx1ZQoramF2YS51dGlsLkFycmF5TGlzdDxqYXZhLmxhbmcuSW50ZWdlcj5cbm5ldworamF2YS51dGlsLkxpc3Q8amF2YS5sYW5nLkludGVnZXI+XG5Qc2lMb2NhbFZhcmlhYmxlOmwKK2phdmEudXRpbC5MaXN0PGphdmEubGFuZy5JbnRlZ2VyPlxucGFyYW1ldGVyIDAgb2YgdGVzdEZvckVhY2gKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MTQ5L2FmdGVyL1Rlc3QuaXRlbXMgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDE0OS9hZnRlci9UZXN0Lml0ZW1zCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRjOWNlNGQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDE0OS9hZnRlci9UZXN0Lml0ZW1zCkBAIC0wLDAgKzEsNCBAQAoramF2YS5sYW5nLk9iamVjdFxuUHNpUGFyYW1ldGVyOnZhbHVlCitqYXZhLnV0aWwuQXJyYXlMaXN0XG5uZXcKK2phdmEudXRpbC5MaXN0XG5Qc2lMb2NhbFZhcmlhYmxlOmwKK2phdmEudXRpbC5MaXN0XG5wYXJhbWV0ZXIgMCBvZiB0ZXN0Rm9yRWFjaApkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QxNDkvYWZ0ZXIvdGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QxNDkvYWZ0ZXIvdGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg5YTExMWYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDE0OS9hZnRlci90ZXN0LmphdmEKQEAgLTAsMCArMSwxOCBAQAoraW1wb3J0IGphdmEudXRpbC4qOworCitjbGFzcyBUZXN0Cit7CisgICAgcHJpdmF0ZSB2b2lkIHRlc3RGb3JFYWNoKExpc3QgdmFsdWVzKSB7CisKKyAgICAgICAgZm9yIChPYmplY3QgdmFsdWUgOiB2YWx1ZXMpIHsKKworICAgICAgICB9CisgICAgfQorCisgICAgdm9pZCBmb28oKSB7CisgICAgICAgIExpc3QgbCA9IG5ldyBBcnJheUxpc3QoKTsKKyAgICAgICAgbC5hZGQoMCk7CisgICAgICAgIGwuYWRkKDEpOworICAgICAgICB0ZXN0Rm9yRWFjaChsKTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QxNDkvYmVmb3JlL3Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MTQ5L2JlZm9yZS90ZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODlhMTExZgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MTQ5L2JlZm9yZS90ZXN0LmphdmEKQEAgLTAsMCArMSwxOCBAQAoraW1wb3J0IGphdmEudXRpbC4qOworCitjbGFzcyBUZXN0Cit7CisgICAgcHJpdmF0ZSB2b2lkIHRlc3RGb3JFYWNoKExpc3QgdmFsdWVzKSB7CisKKyAgICAgICAgZm9yIChPYmplY3QgdmFsdWUgOiB2YWx1ZXMpIHsKKworICAgICAgICB9CisgICAgfQorCisgICAgdm9pZCBmb28oKSB7CisgICAgICAgIExpc3QgbCA9IG5ldyBBcnJheUxpc3QoKTsKKyAgICAgICAgbC5hZGQoMCk7CisgICAgICAgIGwuYWRkKDEpOworICAgICAgICB0ZXN0Rm9yRWFjaChsKTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QxNS9hZnRlci9UZXN0LjEuaXRlbXMgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDE1L2FmdGVyL1Rlc3QuMS5pdGVtcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNjAzMjkwCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QxNS9hZnRlci9UZXN0LjEuaXRlbXMKQEAgLTAsMCArMSwyIEBACitMaW5rZWRMaXN0XG5Qc2lGaWVsZDp4CitMaW5rZWRMaXN0XG5Qc2lGaWVsZDp5CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDE1L2FmdGVyL1Rlc3QuaXRlbXMgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDE1L2FmdGVyL1Rlc3QuaXRlbXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzYwMzI5MAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MTUvYWZ0ZXIvVGVzdC5pdGVtcwpAQCAtMCwwICsxLDIgQEAKK0xpbmtlZExpc3RcblBzaUZpZWxkOngKK0xpbmtlZExpc3RcblBzaUZpZWxkOnkKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MTUvYWZ0ZXIvdGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QxNS9hZnRlci90ZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWE2ZjA3ZgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MTUvYWZ0ZXIvdGVzdC5qYXZhCkBAIC0wLDAgKzEsMjIgQEAKK2NsYXNzIExpbmtlZExpc3Q8VD57CisgICAgVCB0OworICAgIHB1YmxpYyBUIGdldCgpe3JldHVybiB0O30KKyAgICBwdWJsaWMgdm9pZCBzZXQgKFQgdCl7CisJdGhpcy50ID0gdDsKKyAgICB9ICAgIAorfQorCitjbGFzcyBTaW1wbGUgeworICAgYm9vbGVhbiBmKCl7CisgICAgcmV0dXJuIGZhbHNlOworICAgfQorfQorCitjbGFzcyBUZXN0eworICAgIExpbmtlZExpc3QgeTsKKyAgICBMaW5rZWRMaXN0IHg7CisgICAgCisgICAgdm9pZCBmKCl7CisgICAgICB5LmdldCgpOworICAgIH0gICAKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MTUvYmVmb3JlL3Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MTUvYmVmb3JlL3Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYTZmMDdmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QxNS9iZWZvcmUvdGVzdC5qYXZhCkBAIC0wLDAgKzEsMjIgQEAKK2NsYXNzIExpbmtlZExpc3Q8VD57CisgICAgVCB0OworICAgIHB1YmxpYyBUIGdldCgpe3JldHVybiB0O30KKyAgICBwdWJsaWMgdm9pZCBzZXQgKFQgdCl7CisJdGhpcy50ID0gdDsKKyAgICB9ICAgIAorfQorCitjbGFzcyBTaW1wbGUgeworICAgYm9vbGVhbiBmKCl7CisgICAgcmV0dXJuIGZhbHNlOworICAgfQorfQorCitjbGFzcyBUZXN0eworICAgIExpbmtlZExpc3QgeTsKKyAgICBMaW5rZWRMaXN0IHg7CisgICAgCisgICAgdm9pZCBmKCl7CisgICAgICB5LmdldCgpOworICAgIH0gICAKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MTUwL2FmdGVyL1Rlc3QuMS5pdGVtcyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MTUwL2FmdGVyL1Rlc3QuMS5pdGVtcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNjliZTJiCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QxNTAvYWZ0ZXIvVGVzdC4xLml0ZW1zCkBAIC0wLDAgKzEsNSBAQAoramF2YS51dGlsLkl0ZXJhdG9yPGphdmEudXRpbC5NYXAuRW50cnk+XG5Qc2lMb2NhbFZhcmlhYmxlOmVudHJ5SXRlcgoramF2YS51dGlsLkxpc3RcblBzaUxvY2FsVmFyaWFibGU6ZXZlbnRMaXN0CitqYXZhLnV0aWwuTGlzdFxuUHNpVHlwZUNhc3RFeHByZXNzaW9uOihMaXN0KSBlbnRyeS5nZXRWYWx1ZSgpCitqYXZhLnV0aWwuTWFwLkVudHJ5XG5Qc2lMb2NhbFZhcmlhYmxlOmVudHJ5CitqYXZhLnV0aWwuTWFwXG5wYXJhbWV0ZXIgMCBvZiB0ZXN0CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDE1MC9hZnRlci9UZXN0Lml0ZW1zIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QxNTAvYWZ0ZXIvVGVzdC5pdGVtcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNjliZTJiCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QxNTAvYWZ0ZXIvVGVzdC5pdGVtcwpAQCAtMCwwICsxLDUgQEAKK2phdmEudXRpbC5JdGVyYXRvcjxqYXZhLnV0aWwuTWFwLkVudHJ5PlxuUHNpTG9jYWxWYXJpYWJsZTplbnRyeUl0ZXIKK2phdmEudXRpbC5MaXN0XG5Qc2lMb2NhbFZhcmlhYmxlOmV2ZW50TGlzdAoramF2YS51dGlsLkxpc3RcblBzaVR5cGVDYXN0RXhwcmVzc2lvbjooTGlzdCkgZW50cnkuZ2V0VmFsdWUoKQoramF2YS51dGlsLk1hcC5FbnRyeVxuUHNpTG9jYWxWYXJpYWJsZTplbnRyeQoramF2YS51dGlsLk1hcFxucGFyYW1ldGVyIDAgb2YgdGVzdApkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QxNTAvYWZ0ZXIvdGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QxNTAvYWZ0ZXIvdGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg3NzllYmUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDE1MC9hZnRlci90ZXN0LmphdmEKQEAgLTAsMCArMSwxMyBAQAoraW1wb3J0IGphdmEudXRpbC4qOworCitjbGFzcyBUZXN0Cit7CisgICAgdm9pZCB0ZXN0KE1hcCBtYXApIHsKKworICAgICAgICBJdGVyYXRvcjxNYXAuRW50cnk+IGVudHJ5SXRlciA9IG1hcC5lbnRyeVNldCgpLml0ZXJhdG9yKCk7CisgICAgICAgIHdoaWxlIChlbnRyeUl0ZXIuaGFzTmV4dCgpKSB7CisgICAgICAgICAgICBNYXAuRW50cnkgZW50cnkgPSBlbnRyeUl0ZXIubmV4dCgpOworICAgICAgICAgICAgTGlzdCBldmVudExpc3QgPSAoTGlzdCkgZW50cnkuZ2V0VmFsdWUoKTsKKyAgICAgICAgfQorICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDE1MC9iZWZvcmUvdGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QxNTAvYmVmb3JlL3Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44Nzc5ZWJlCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QxNTAvYmVmb3JlL3Rlc3QuamF2YQpAQCAtMCwwICsxLDEzIEBACitpbXBvcnQgamF2YS51dGlsLio7CisKK2NsYXNzIFRlc3QKK3sKKyAgICB2b2lkIHRlc3QoTWFwIG1hcCkgeworCisgICAgICAgIEl0ZXJhdG9yPE1hcC5FbnRyeT4gZW50cnlJdGVyID0gbWFwLmVudHJ5U2V0KCkuaXRlcmF0b3IoKTsKKyAgICAgICAgd2hpbGUgKGVudHJ5SXRlci5oYXNOZXh0KCkpIHsKKyAgICAgICAgICAgIE1hcC5FbnRyeSBlbnRyeSA9IGVudHJ5SXRlci5uZXh0KCk7CisgICAgICAgICAgICBMaXN0IGV2ZW50TGlzdCA9IChMaXN0KSBlbnRyeS5nZXRWYWx1ZSgpOworICAgICAgICB9CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MTUxL2FmdGVyL1Rlc3QuMS5pdGVtcyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MTUxL2FmdGVyL1Rlc3QuMS5pdGVtcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OTFlZjc2Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QxNTEvYWZ0ZXIvVGVzdC4xLml0ZW1zCkBAIC0wLDAgKzEsNCBAQAoramF2YS51dGlsLlNldDxqYXZhLmxhbmcuSW50ZWdlcj5cblBzaUxvY2FsVmFyaWFibGU6Zml2ZUwKK2phdmEudXRpbC5TZXQ8amF2YS5sYW5nLkludGVnZXI+XG5Qc2lMb2NhbFZhcmlhYmxlOnJlc3VsdAoramF2YS51dGlsLlNldDxqYXZhLmxhbmcuSW50ZWdlcj5cblBzaUxvY2FsVmFyaWFibGU6dGVuTAoramF2YS51dGlsLlNldDxqYXZhLmxhbmcuSW50ZWdlcj5cbnJldHVybiBvZiBnZXROdW1iZXJTZXQ0CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDE1MS9hZnRlci9UZXN0Lml0ZW1zIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QxNTEvYWZ0ZXIvVGVzdC5pdGVtcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yN2EzN2JjZQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MTUxL2FmdGVyL1Rlc3QuaXRlbXMKQEAgLTAsMCArMSw0IEBACitqYXZhLnV0aWwuU2V0XG5Qc2lMb2NhbFZhcmlhYmxlOmZpdmVMCitqYXZhLnV0aWwuU2V0XG5Qc2lMb2NhbFZhcmlhYmxlOnJlc3VsdAoramF2YS51dGlsLlNldFxuUHNpTG9jYWxWYXJpYWJsZTp0ZW5MCitqYXZhLnV0aWwuU2V0XG5yZXR1cm4gb2YgZ2V0TnVtYmVyU2V0NApkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QxNTEvYWZ0ZXIvdGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QxNTEvYWZ0ZXIvdGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE1OTJiMTMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDE1MS9hZnRlci90ZXN0LmphdmEKQEAgLTAsMCArMSwxOSBAQAoraW1wb3J0IGphdmEudXRpbC4qOworCitjbGFzcyBUZXN0Cit7CisgICAgcHVibGljIHN0YXRpYyB2b2lkIHRlc3RTZXQ0KCkgeworICAgICAgICBTZXQgdGVuTCA9IGdldE51bWJlclNldDQoMTApOworICAgICAgICBTZXQgZml2ZUwgPSBnZXROdW1iZXJTZXQ0KDUpOworCisgICAgICAgIHRlbkwucmVtb3ZlQWxsKGZpdmVMKTsKKyAgICB9CisKKyAgICBwdWJsaWMgc3RhdGljIFNldCBnZXROdW1iZXJTZXQ0KGludCBuKSB7CisgICAgICAgIFNldCByZXN1bHQ7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbjsgaSsrKSB7CisgICAgICAgICAgICByZXN1bHQuYWRkKGkpOworICAgICAgICB9CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MTUxL2JlZm9yZS90ZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDE1MS9iZWZvcmUvdGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE1OTJiMTMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDE1MS9iZWZvcmUvdGVzdC5qYXZhCkBAIC0wLDAgKzEsMTkgQEAKK2ltcG9ydCBqYXZhLnV0aWwuKjsKKworY2xhc3MgVGVzdAoreworICAgIHB1YmxpYyBzdGF0aWMgdm9pZCB0ZXN0U2V0NCgpIHsKKyAgICAgICAgU2V0IHRlbkwgPSBnZXROdW1iZXJTZXQ0KDEwKTsKKyAgICAgICAgU2V0IGZpdmVMID0gZ2V0TnVtYmVyU2V0NCg1KTsKKworICAgICAgICB0ZW5MLnJlbW92ZUFsbChmaXZlTCk7CisgICAgfQorCisgICAgcHVibGljIHN0YXRpYyBTZXQgZ2V0TnVtYmVyU2V0NChpbnQgbikgeworICAgICAgICBTZXQgcmVzdWx0OworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG47IGkrKykgeworICAgICAgICAgICAgcmVzdWx0LmFkZChpKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDE1Mi9hZnRlci9UZXN0LjEuaXRlbXMgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDE1Mi9hZnRlci9UZXN0LjEuaXRlbXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYThmMzI2MQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MTUyL2FmdGVyL1Rlc3QuMS5pdGVtcwpAQCAtMCwwICsxLDIgQEAKK2phdmEudXRpbC5BcnJheUxpc3RcblBzaUZpZWxkOmwKK2phdmEudXRpbC5BcnJheUxpc3Rcbm5ldwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QxNTIvYWZ0ZXIvVGVzdC5pdGVtcyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MTUyL2FmdGVyL1Rlc3QuaXRlbXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYThmMzI2MQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MTUyL2FmdGVyL1Rlc3QuaXRlbXMKQEAgLTAsMCArMSwyIEBACitqYXZhLnV0aWwuQXJyYXlMaXN0XG5Qc2lGaWVsZDpsCitqYXZhLnV0aWwuQXJyYXlMaXN0XG5uZXcKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MTUyL2FmdGVyL3Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MTUyL2FmdGVyL3Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MWFhODFkCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QxNTIvYWZ0ZXIvdGVzdC5qYXZhCkBAIC0wLDAgKzEsNiBAQAoraW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CisKK2NsYXNzIFRlc3QKK3sKKyAgQXJyYXlMaXN0IGwgPSBuZXcgQXJyYXlMaXN0PD4oOCk7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QxNTIvYmVmb3JlL3Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MTUyL2JlZm9yZS90ZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDFhYTgxZAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MTUyL2JlZm9yZS90ZXN0LmphdmEKQEAgLTAsMCArMSw2IEBACitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKKworY2xhc3MgVGVzdAoreworICBBcnJheUxpc3QgbCA9IG5ldyBBcnJheUxpc3Q8Pig4KTsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDE2L2FmdGVyL1Rlc3QuMS5pdGVtcyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MTYvYWZ0ZXIvVGVzdC4xLml0ZW1zCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFmYThlYWMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDE2L2FmdGVyL1Rlc3QuMS5pdGVtcwpAQCAtMCwwICsxLDIgQEAKK0xpbmtlZExpc3Q8U2ltcGxlPlxuUHNpRmllbGQ6eAorTGlua2VkTGlzdDxTaW1wbGU+XG5Qc2lGaWVsZDp5CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDE2L2FmdGVyL1Rlc3QuaXRlbXMgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDE2L2FmdGVyL1Rlc3QuaXRlbXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzYwMzI5MAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MTYvYWZ0ZXIvVGVzdC5pdGVtcwpAQCAtMCwwICsxLDIgQEAKK0xpbmtlZExpc3RcblBzaUZpZWxkOngKK0xpbmtlZExpc3RcblBzaUZpZWxkOnkKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MTYvYWZ0ZXIvdGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QxNi9hZnRlci90ZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmY2YTliMgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MTYvYWZ0ZXIvdGVzdC5qYXZhCkBAIC0wLDAgKzEsMjMgQEAKK2NsYXNzIExpbmtlZExpc3Q8VD57CisgICAgVCB0OworICAgIHB1YmxpYyBUIGdldCgpe3JldHVybiB0O30KKyAgICBwdWJsaWMgdm9pZCBzZXQgKFQgdCl7CisJdGhpcy50ID0gdDsKKyAgICB9ICAgIAorfQorCitjbGFzcyBTaW1wbGUgeworICAgYm9vbGVhbiBmKCl7CisgICAgcmV0dXJuIGZhbHNlOworICAgfQorfQorCitjbGFzcyBUZXN0eworICAgIExpbmtlZExpc3QgeTsKKyAgICBMaW5rZWRMaXN0IHg7CisgICAgCisgICAgdm9pZCBmKCl7CisgICAgICB4LnNldCh5LmdldCgpKTsKKyAgICAgIFNpbXBsZSB0ID0gKFNpbXBsZSkgeS5nZXQoKTsKKyAgICB9ICAgCit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDE2L2JlZm9yZS90ZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDE2L2JlZm9yZS90ZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmY2YTliMgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MTYvYmVmb3JlL3Rlc3QuamF2YQpAQCAtMCwwICsxLDIzIEBACitjbGFzcyBMaW5rZWRMaXN0PFQ+eworICAgIFQgdDsKKyAgICBwdWJsaWMgVCBnZXQoKXtyZXR1cm4gdDt9CisgICAgcHVibGljIHZvaWQgc2V0IChUIHQpeworCXRoaXMudCA9IHQ7CisgICAgfSAgICAKK30KKworY2xhc3MgU2ltcGxlIHsKKyAgIGJvb2xlYW4gZigpeworICAgIHJldHVybiBmYWxzZTsKKyAgIH0KK30KKworY2xhc3MgVGVzdHsKKyAgICBMaW5rZWRMaXN0IHk7CisgICAgTGlua2VkTGlzdCB4OworICAgIAorICAgIHZvaWQgZigpeworICAgICAgeC5zZXQoeS5nZXQoKSk7CisgICAgICBTaW1wbGUgdCA9IChTaW1wbGUpIHkuZ2V0KCk7CisgICAgfSAgIAorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QxNy9hZnRlci9UZXN0LjEuaXRlbXMgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDE3L2FmdGVyL1Rlc3QuMS5pdGVtcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZmE4ZWFjCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QxNy9hZnRlci9UZXN0LjEuaXRlbXMKQEAgLTAsMCArMSwyIEBACitMaW5rZWRMaXN0PFNpbXBsZT5cblBzaUZpZWxkOngKK0xpbmtlZExpc3Q8U2ltcGxlPlxuUHNpRmllbGQ6eQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QxNy9hZnRlci9UZXN0Lml0ZW1zIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QxNy9hZnRlci9UZXN0Lml0ZW1zCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM2MDMyOTAKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDE3L2FmdGVyL1Rlc3QuaXRlbXMKQEAgLTAsMCArMSwyIEBACitMaW5rZWRMaXN0XG5Qc2lGaWVsZDp4CitMaW5rZWRMaXN0XG5Qc2lGaWVsZDp5CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDE3L2FmdGVyL3Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MTcvYWZ0ZXIvdGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE3MTY3M2IKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDE3L2FmdGVyL3Rlc3QuamF2YQpAQCAtMCwwICsxLDIwIEBACitjbGFzcyBMaW5rZWRMaXN0PFQ+eworICAgIFQgdDsKKyAgICBwdWJsaWMgVCBnZXQoKXtyZXR1cm4gdDt9CisgICAgcHVibGljIHZvaWQgc2V0IChUIHQpeworCXRoaXMudCA9IHQ7CisgICAgfSAgICAKK30KKworY2xhc3MgU2ltcGxlIHsKK30KKworY2xhc3MgVGVzdHsKKyAgICBMaW5rZWRMaXN0IHg7CisgICAgTGlua2VkTGlzdCB5OworICAgIAorICAgIHZvaWQgZigpeworCXkuc2V0KHguZ2V0KCkpOworCVNpbXBsZSB0ID0gKFNpbXBsZSkgeS5nZXQoKTsKKyAgICB9ICAgCit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDE3L2JlZm9yZS90ZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDE3L2JlZm9yZS90ZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTcxNjczYgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MTcvYmVmb3JlL3Rlc3QuamF2YQpAQCAtMCwwICsxLDIwIEBACitjbGFzcyBMaW5rZWRMaXN0PFQ+eworICAgIFQgdDsKKyAgICBwdWJsaWMgVCBnZXQoKXtyZXR1cm4gdDt9CisgICAgcHVibGljIHZvaWQgc2V0IChUIHQpeworCXRoaXMudCA9IHQ7CisgICAgfSAgICAKK30KKworY2xhc3MgU2ltcGxlIHsKK30KKworY2xhc3MgVGVzdHsKKyAgICBMaW5rZWRMaXN0IHg7CisgICAgTGlua2VkTGlzdCB5OworICAgIAorICAgIHZvaWQgZigpeworCXkuc2V0KHguZ2V0KCkpOworCVNpbXBsZSB0ID0gKFNpbXBsZSkgeS5nZXQoKTsKKyAgICB9ICAgCit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDE4L2FmdGVyL1Rlc3QuMS5pdGVtcyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MTgvYWZ0ZXIvVGVzdC4xLml0ZW1zCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUyMTZmZjEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDE4L2FmdGVyL1Rlc3QuMS5pdGVtcwpAQCAtMCwwICsxLDIgQEAKK0xpbmtlZExpc3Q8amF2YS5sYW5nLkludGVnZXI+XG5Qc2lGaWVsZDp4CitMaW5rZWRMaXN0PGphdmEubGFuZy5JbnRlZ2VyPlxuUHNpRmllbGQ6eQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QxOC9hZnRlci9UZXN0Lml0ZW1zIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QxOC9hZnRlci9UZXN0Lml0ZW1zCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM2MDMyOTAKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDE4L2FmdGVyL1Rlc3QuaXRlbXMKQEAgLTAsMCArMSwyIEBACitMaW5rZWRMaXN0XG5Qc2lGaWVsZDp4CitMaW5rZWRMaXN0XG5Qc2lGaWVsZDp5CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDE4L2FmdGVyL3Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MTgvYWZ0ZXIvdGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIzM2Y1NTkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDE4L2FmdGVyL3Rlc3QuamF2YQpAQCAtMCwwICsxLDIwIEBACitjbGFzcyBMaW5rZWRMaXN0PFQ+eworICAgIFQgdDsKKyAgICBwdWJsaWMgVCBnZXQoKXtyZXR1cm4gdDt9CisgICAgcHVibGljIHZvaWQgc2V0IChUIHQpeworCXRoaXMudCA9IHQ7CisgICAgfSAgICAKK30KKworY2xhc3MgU2ltcGxlIHsKK30KKworY2xhc3MgVGVzdHsKKyAgICBMaW5rZWRMaXN0IHk7CisgICAgTGlua2VkTGlzdCB4OworICAgIAorICAgIHZvaWQgZigpeworCXg9eTsKKyAgICAgICAgeC5zZXQobmV3IEludGVnZXIoMykpOworICAgIH0gICAKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MTgvYmVmb3JlL3Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MTgvYmVmb3JlL3Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMzNmNTU5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QxOC9iZWZvcmUvdGVzdC5qYXZhCkBAIC0wLDAgKzEsMjAgQEAKK2NsYXNzIExpbmtlZExpc3Q8VD57CisgICAgVCB0OworICAgIHB1YmxpYyBUIGdldCgpe3JldHVybiB0O30KKyAgICBwdWJsaWMgdm9pZCBzZXQgKFQgdCl7CisJdGhpcy50ID0gdDsKKyAgICB9ICAgIAorfQorCitjbGFzcyBTaW1wbGUgeworfQorCitjbGFzcyBUZXN0eworICAgIExpbmtlZExpc3QgeTsKKyAgICBMaW5rZWRMaXN0IHg7CisgICAgCisgICAgdm9pZCBmKCl7CisJeD15OworICAgICAgICB4LnNldChuZXcgSW50ZWdlcigzKSk7CisgICAgfSAgIAorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QxOS9hZnRlci9UZXN0LjEuaXRlbXMgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDE5L2FmdGVyL1Rlc3QuMS5pdGVtcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYWE2OTVlCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QxOS9hZnRlci9UZXN0LjEuaXRlbXMKQEAgLTAsMCArMSwzIEBACitMaW5rZWRMaXN0PExpbmtlZExpc3Q+XG5Qc2lGaWVsZDp4CitMaW5rZWRMaXN0PGphdmEubGFuZy5PYmplY3Q+XG5Qc2lGaWVsZDp5CitMaW5rZWRMaXN0XG5Qc2lUeXBlQ2FzdEV4cHJlc3Npb246KExpbmtlZExpc3QpIHguZ2V0KCkKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MTkvYWZ0ZXIvVGVzdC5pdGVtcyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MTkvYWZ0ZXIvVGVzdC5pdGVtcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNmIwMTZjCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QxOS9hZnRlci9UZXN0Lml0ZW1zCkBAIC0wLDAgKzEsMyBAQAorTGlua2VkTGlzdFxuUHNpRmllbGQ6eAorTGlua2VkTGlzdFxuUHNpRmllbGQ6eQorTGlua2VkTGlzdFxuUHNpVHlwZUNhc3RFeHByZXNzaW9uOihMaW5rZWRMaXN0KSB4LmdldCgpCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDE5L2FmdGVyL3Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MTkvYWZ0ZXIvdGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNjMjRjMWI0Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QxOS9hZnRlci90ZXN0LmphdmEKQEAgLTAsMCArMSwyMCBAQAorY2xhc3MgTGlua2VkTGlzdDxUPnsKKyAgICBUIHQ7CisgICAgcHVibGljIFQgZ2V0KCl7cmV0dXJuIHQ7fQorICAgIHB1YmxpYyB2b2lkIHNldCAoVCB0KXsKKwl0aGlzLnQgPSB0OworICAgIH0gICAgCit9CisKK2NsYXNzIFNpbXBsZSB7Cit9CisKK2NsYXNzIFRlc3R7CisgICAgTGlua2VkTGlzdCB5OworICAgIExpbmtlZExpc3QgeDsKKyAgICAKKyAgICB2b2lkIGYoKXsKKwl5LnNldCgoTGlua2VkTGlzdCkgeC5nZXQoKSk7CisgICAgICAgIHkuc2V0KG5ldyBJbnRlZ2VyKDMpKTsKKyAgICB9ICAgCit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDE5L2JlZm9yZS90ZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDE5L2JlZm9yZS90ZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2MyNGMxYjQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDE5L2JlZm9yZS90ZXN0LmphdmEKQEAgLTAsMCArMSwyMCBAQAorY2xhc3MgTGlua2VkTGlzdDxUPnsKKyAgICBUIHQ7CisgICAgcHVibGljIFQgZ2V0KCl7cmV0dXJuIHQ7fQorICAgIHB1YmxpYyB2b2lkIHNldCAoVCB0KXsKKwl0aGlzLnQgPSB0OworICAgIH0gICAgCit9CisKK2NsYXNzIFNpbXBsZSB7Cit9CisKK2NsYXNzIFRlc3R7CisgICAgTGlua2VkTGlzdCB5OworICAgIExpbmtlZExpc3QgeDsKKyAgICAKKyAgICB2b2lkIGYoKXsKKwl5LnNldCgoTGlua2VkTGlzdCkgeC5nZXQoKSk7CisgICAgICAgIHkuc2V0KG5ldyBJbnRlZ2VyKDMpKTsKKyAgICB9ICAgCit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDIwL2FmdGVyL1Rlc3QuMS5pdGVtcyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MjAvYWZ0ZXIvVGVzdC4xLml0ZW1zCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIxNjBkYmMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDIwL2FmdGVyL1Rlc3QuMS5pdGVtcwpAQCAtMCwwICsxLDIgQEAKK0l0ZXJhdG9yPGphdmEubGFuZy5JbnRlZ2VyPlxuUHNpTG9jYWxWYXJpYWJsZTppCitMaW5rZWRMaXN0PGphdmEubGFuZy5JbnRlZ2VyPlxuUHNpTG9jYWxWYXJpYWJsZTp5CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDIwL2FmdGVyL1Rlc3QuaXRlbXMgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDIwL2FmdGVyL1Rlc3QuaXRlbXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTJhNDVkYwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MjAvYWZ0ZXIvVGVzdC5pdGVtcwpAQCAtMCwwICsxLDIgQEAKK0l0ZXJhdG9yXG5Qc2lMb2NhbFZhcmlhYmxlOmkKK0xpbmtlZExpc3RcblBzaUxvY2FsVmFyaWFibGU6eQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QyMC9hZnRlci90ZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDIwL2FmdGVyL3Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZjAxMjlmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QyMC9hZnRlci90ZXN0LmphdmEKQEAgLTAsMCArMSwyNiBAQAorY2xhc3MgSXRlcmF0b3I8VD57CisgIHB1YmxpYyBUIGdldCgpe3JldHVybiBudWxsO30KK30KKworY2xhc3MgTGlua2VkTGlzdDxUPnsKKyAgICBUIHQ7CisgICAgcHVibGljIFQgZ2V0KCl7cmV0dXJuIHQ7fQorICAgIHB1YmxpYyB2b2lkIHNldCAoVCB0KXsKKwl0aGlzLnQgPSB0OworICAgIH0gICAgCisgICAgcHVibGljIEl0ZXJhdG9yPFQ+IGl0ZXJhdG9yKCl7CisgICAgICByZXR1cm4gbnVsbDsKKyAgICB9Cit9CisKK2NsYXNzIFNpbXBsZSB7Cit9CisKK2NsYXNzIFRlc3R7CisgICAgdm9pZCBmKCl7CisJTGlua2VkTGlzdCB5OyAKKyAgICAgICAgeS5zZXQobmV3IEludGVnZXIoMykpOworCUl0ZXJhdG9yIGk7CisJaSA9IHkuaXRlcmF0b3IoKTsKKyAgICB9ICAgCit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDIwL2JlZm9yZS90ZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDIwL2JlZm9yZS90ZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWYwMTI5ZgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MjAvYmVmb3JlL3Rlc3QuamF2YQpAQCAtMCwwICsxLDI2IEBACitjbGFzcyBJdGVyYXRvcjxUPnsKKyAgcHVibGljIFQgZ2V0KCl7cmV0dXJuIG51bGw7fQorfQorCitjbGFzcyBMaW5rZWRMaXN0PFQ+eworICAgIFQgdDsKKyAgICBwdWJsaWMgVCBnZXQoKXtyZXR1cm4gdDt9CisgICAgcHVibGljIHZvaWQgc2V0IChUIHQpeworCXRoaXMudCA9IHQ7CisgICAgfSAgICAKKyAgICBwdWJsaWMgSXRlcmF0b3I8VD4gaXRlcmF0b3IoKXsKKyAgICAgIHJldHVybiBudWxsOworICAgIH0KK30KKworY2xhc3MgU2ltcGxlIHsKK30KKworY2xhc3MgVGVzdHsKKyAgICB2b2lkIGYoKXsKKwlMaW5rZWRMaXN0IHk7IAorICAgICAgICB5LnNldChuZXcgSW50ZWdlcigzKSk7CisJSXRlcmF0b3IgaTsKKwlpID0geS5pdGVyYXRvcigpOworICAgIH0gICAKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MjEvYWZ0ZXIvVGVzdC4xLml0ZW1zIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QyMS9hZnRlci9UZXN0LjEuaXRlbXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODY3MWI0YwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MjEvYWZ0ZXIvVGVzdC4xLml0ZW1zCkBAIC0wLDAgKzEgQEAKK0xpbmtlZExpc3Q8amF2YS5sYW5nLkludGVnZXI+XG5Qc2lGaWVsZDp4CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDIxL2FmdGVyL1Rlc3QuaXRlbXMgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDIxL2FmdGVyL1Rlc3QuaXRlbXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzk0YTI2MQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MjEvYWZ0ZXIvVGVzdC5pdGVtcwpAQCAtMCwwICsxIEBACitMaW5rZWRMaXN0XG5Qc2lGaWVsZDp4CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDIxL2FmdGVyL3Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MjEvYWZ0ZXIvdGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ2NDM3ZTMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDIxL2FmdGVyL3Rlc3QuamF2YQpAQCAtMCwwICsxLDI5IEBACitjbGFzcyBJdGVyYXRvcjxUPnsKKyAgcHVibGljIFQgZ2V0KCl7cmV0dXJuIG51bGw7fQorfQorCitjbGFzcyBMaW5rZWRMaXN0PFQ+eworICAgIFQgdDsKKyAgICBwdWJsaWMgVCBnZXQoKXtyZXR1cm4gdDt9CisgICAgcHVibGljIHZvaWQgc2V0IChUIHQpeworCXRoaXMudCA9IHQ7CisgICAgfSAgICAKKyAgICBwdWJsaWMgSXRlcmF0b3I8VD4gaXRlcmF0b3IoKXsKKyAgICAgIHJldHVybiBudWxsOworICAgIH0KK30KKworY2xhc3MgU2ltcGxlIHsKK30KKworY2xhc3MgVGVzdHsKKyAgIExpbmtlZExpc3QgeDsKKyAgIAorICAgVGVzdChUZXN0IHQpeworICAgICAgeCA9IHQueDsKKyAgIH0gIAorICAgCisgICB2b2lkIGYgKCl7CisgICAgIHguc2V0KG5ldyBJbnRlZ2VyKDMpKTsKKyAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MjEvYmVmb3JlL3Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MjEvYmVmb3JlL3Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NjQzN2UzCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QyMS9iZWZvcmUvdGVzdC5qYXZhCkBAIC0wLDAgKzEsMjkgQEAKK2NsYXNzIEl0ZXJhdG9yPFQ+eworICBwdWJsaWMgVCBnZXQoKXtyZXR1cm4gbnVsbDt9Cit9CisKK2NsYXNzIExpbmtlZExpc3Q8VD57CisgICAgVCB0OworICAgIHB1YmxpYyBUIGdldCgpe3JldHVybiB0O30KKyAgICBwdWJsaWMgdm9pZCBzZXQgKFQgdCl7CisJdGhpcy50ID0gdDsKKyAgICB9ICAgIAorICAgIHB1YmxpYyBJdGVyYXRvcjxUPiBpdGVyYXRvcigpeworICAgICAgcmV0dXJuIG51bGw7CisgICAgfQorfQorCitjbGFzcyBTaW1wbGUgeworfQorCitjbGFzcyBUZXN0eworICAgTGlua2VkTGlzdCB4OworICAgCisgICBUZXN0KFRlc3QgdCl7CisgICAgICB4ID0gdC54OworICAgfSAgCisgICAKKyAgIHZvaWQgZiAoKXsKKyAgICAgeC5zZXQobmV3IEludGVnZXIoMykpOworICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QyMi9hZnRlci9UZXN0LjEuaXRlbXMgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDIyL2FmdGVyL1Rlc3QuMS5pdGVtcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NjcxYjRjCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QyMi9hZnRlci9UZXN0LjEuaXRlbXMKQEAgLTAsMCArMSBAQAorTGlua2VkTGlzdDxqYXZhLmxhbmcuSW50ZWdlcj5cblBzaUZpZWxkOngKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MjIvYWZ0ZXIvVGVzdC5pdGVtcyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MjIvYWZ0ZXIvVGVzdC5pdGVtcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOTRhMjYxCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QyMi9hZnRlci9UZXN0Lml0ZW1zCkBAIC0wLDAgKzEgQEAKK0xpbmtlZExpc3RcblBzaUZpZWxkOngKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MjIvYWZ0ZXIvdGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QyMi9hZnRlci90ZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGNjMTI4YwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MjIvYWZ0ZXIvdGVzdC5qYXZhCkBAIC0wLDAgKzEsMjUgQEAKK2NsYXNzIEl0ZXJhdG9yPFQ+eworICBwdWJsaWMgVCBnZXQoKXtyZXR1cm4gbnVsbDt9Cit9CisKK2NsYXNzIExpbmtlZExpc3Q8VD57CisgICAgVCB0OworICAgIHB1YmxpYyBJdGVyYXRvcjxUPiBpdGVyYXRvcigpeworICAgICAgcmV0dXJuIG51bGw7CisgICAgfQorfQorCitjbGFzcyBTaW1wbGUgeworfQorCitjbGFzcyBUZXN0eworICAgTGlua2VkTGlzdCB4OworICAgCisgICBUZXN0KFRlc3QgdCl7CisgICAgICB4ID0gdC54OworICAgfSAgCisgICAKKyAgIHZvaWQgZiAoKXsKKyAgICAgeC50ID0gbmV3IEludGVnZXIoMyk7CisgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDIyL2JlZm9yZS90ZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDIyL2JlZm9yZS90ZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGNjMTI4YwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MjIvYmVmb3JlL3Rlc3QuamF2YQpAQCAtMCwwICsxLDI1IEBACitjbGFzcyBJdGVyYXRvcjxUPnsKKyAgcHVibGljIFQgZ2V0KCl7cmV0dXJuIG51bGw7fQorfQorCitjbGFzcyBMaW5rZWRMaXN0PFQ+eworICAgIFQgdDsKKyAgICBwdWJsaWMgSXRlcmF0b3I8VD4gaXRlcmF0b3IoKXsKKyAgICAgIHJldHVybiBudWxsOworICAgIH0KK30KKworY2xhc3MgU2ltcGxlIHsKK30KKworY2xhc3MgVGVzdHsKKyAgIExpbmtlZExpc3QgeDsKKyAgIAorICAgVGVzdChUZXN0IHQpeworICAgICAgeCA9IHQueDsKKyAgIH0gIAorICAgCisgICB2b2lkIGYgKCl7CisgICAgIHgudCA9IG5ldyBJbnRlZ2VyKDMpOworICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QyMy9hZnRlci9UZXN0LjEuaXRlbXMgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDIzL2FmdGVyL1Rlc3QuMS5pdGVtcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NzBiODk4Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QyMy9hZnRlci9UZXN0LjEuaXRlbXMKQEAgLTAsMCArMSwyIEBACitMaW5rZWRMaXN0PGphdmEubGFuZy5TdHJpbmc+XG5Qc2lGaWVsZDp4CitMaW5rZWRMaXN0PGphdmEubGFuZy5TdHJpbmc+XG5Qc2lGaWVsZDp5CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDIzL2FmdGVyL1Rlc3QuaXRlbXMgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDIzL2FmdGVyL1Rlc3QuaXRlbXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzYwMzI5MAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MjMvYWZ0ZXIvVGVzdC5pdGVtcwpAQCAtMCwwICsxLDIgQEAKK0xpbmtlZExpc3RcblBzaUZpZWxkOngKK0xpbmtlZExpc3RcblBzaUZpZWxkOnkKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MjMvYWZ0ZXIvdGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QyMy9hZnRlci90ZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjc4MGI2MgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MjMvYWZ0ZXIvdGVzdC5qYXZhCkBAIC0wLDAgKzEsMjggQEAKK2NsYXNzIEl0ZXJhdG9yPFQ+eworICBwdWJsaWMgVCBnZXQoKXtyZXR1cm4gbnVsbDt9Cit9CisKK2NsYXNzIExpbmtlZExpc3Q8VD57CisgICAgVCB0OworICAgIHB1YmxpYyBJdGVyYXRvcjxUPiBpdGVyYXRvcigpeworICAgICAgcmV0dXJuIG51bGw7CisgICAgfQorICAgIFQgZ2V0KCl7cmV0dXJuIHQ7fQorfQorCitjbGFzcyBTaW1wbGUgeworfQorCitjbGFzcyBUZXN0eworICAgTGlua2VkTGlzdCB4OworICAgTGlua2VkTGlzdCB5OworICAgCisgICBUZXN0KFRlc3QgdCl7CisgICAgICB4ID0gdC54OworICAgfSAgCisgICAKKyAgIHZvaWQgZiAoKXsKKyAgICAgeC50ID0geS5nZXQoKTsKKyAgICAgeS50ID0gbmV3IFN0cmluZygpOworICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QyMy9iZWZvcmUvdGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QyMy9iZWZvcmUvdGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI3ODBiNjIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDIzL2JlZm9yZS90ZXN0LmphdmEKQEAgLTAsMCArMSwyOCBAQAorY2xhc3MgSXRlcmF0b3I8VD57CisgIHB1YmxpYyBUIGdldCgpe3JldHVybiBudWxsO30KK30KKworY2xhc3MgTGlua2VkTGlzdDxUPnsKKyAgICBUIHQ7CisgICAgcHVibGljIEl0ZXJhdG9yPFQ+IGl0ZXJhdG9yKCl7CisgICAgICByZXR1cm4gbnVsbDsKKyAgICB9CisgICAgVCBnZXQoKXtyZXR1cm4gdDt9Cit9CisKK2NsYXNzIFNpbXBsZSB7Cit9CisKK2NsYXNzIFRlc3R7CisgICBMaW5rZWRMaXN0IHg7CisgICBMaW5rZWRMaXN0IHk7CisgICAKKyAgIFRlc3QoVGVzdCB0KXsKKyAgICAgIHggPSB0Lng7CisgICB9ICAKKyAgIAorICAgdm9pZCBmICgpeworICAgICB4LnQgPSB5LmdldCgpOworICAgICB5LnQgPSBuZXcgU3RyaW5nKCk7CisgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDI0L2FmdGVyL1Rlc3QuMS5pdGVtcyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MjQvYWZ0ZXIvVGVzdC4xLml0ZW1zCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY3MGI4OTgKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDI0L2FmdGVyL1Rlc3QuMS5pdGVtcwpAQCAtMCwwICsxLDIgQEAKK0xpbmtlZExpc3Q8amF2YS5sYW5nLlN0cmluZz5cblBzaUZpZWxkOngKK0xpbmtlZExpc3Q8amF2YS5sYW5nLlN0cmluZz5cblBzaUZpZWxkOnkKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MjQvYWZ0ZXIvVGVzdC5pdGVtcyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MjQvYWZ0ZXIvVGVzdC5pdGVtcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNjAzMjkwCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QyNC9hZnRlci9UZXN0Lml0ZW1zCkBAIC0wLDAgKzEsMiBAQAorTGlua2VkTGlzdFxuUHNpRmllbGQ6eAorTGlua2VkTGlzdFxuUHNpRmllbGQ6eQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QyNC9hZnRlci90ZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDI0L2FmdGVyL3Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNmE4MzhlCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QyNC9hZnRlci90ZXN0LmphdmEKQEAgLTAsMCArMSwzMSBAQAorY2xhc3MgSXRlcmF0b3I8VD57CisgIHB1YmxpYyBUIGdldCgpe3JldHVybiBudWxsO30KK30KKworY2xhc3MgTGlua2VkTGlzdDxUPnsKKyAgICBpbnQgaTsKKyAgICBMaW5rZWRMaXN0PFQ+IHo7CisgICAgVCB0OworICAgIHB1YmxpYyBJdGVyYXRvcjxUPiBpdGVyYXRvcigpeworICAgICAgcmV0dXJuIG51bGw7CisgICAgfQorICAgIFQgZ2V0KCl7cmV0dXJuIHQ7fQorfQorCitjbGFzcyBTaW1wbGUgeworfQorCitjbGFzcyBUZXN0eworICAgTGlua2VkTGlzdCB4OworICAgTGlua2VkTGlzdCB5OworICAgCisgICBUZXN0KFRlc3QgdCl7CisgICAgICB4ID0gdC54OworICAgfSAgCisgICAKKyAgIHZvaWQgZiAoKXsKKyAgICAgeC50ID0geS5nZXQoKTsKKyAgICAgeS56LnQgPSBuZXcgU3RyaW5nKCk7CisgICAgIHguaSA9IDM7CisgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDI0L2JlZm9yZS90ZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDI0L2JlZm9yZS90ZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTZhODM4ZQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MjQvYmVmb3JlL3Rlc3QuamF2YQpAQCAtMCwwICsxLDMxIEBACitjbGFzcyBJdGVyYXRvcjxUPnsKKyAgcHVibGljIFQgZ2V0KCl7cmV0dXJuIG51bGw7fQorfQorCitjbGFzcyBMaW5rZWRMaXN0PFQ+eworICAgIGludCBpOworICAgIExpbmtlZExpc3Q8VD4gejsKKyAgICBUIHQ7CisgICAgcHVibGljIEl0ZXJhdG9yPFQ+IGl0ZXJhdG9yKCl7CisgICAgICByZXR1cm4gbnVsbDsKKyAgICB9CisgICAgVCBnZXQoKXtyZXR1cm4gdDt9Cit9CisKK2NsYXNzIFNpbXBsZSB7Cit9CisKK2NsYXNzIFRlc3R7CisgICBMaW5rZWRMaXN0IHg7CisgICBMaW5rZWRMaXN0IHk7CisgICAKKyAgIFRlc3QoVGVzdCB0KXsKKyAgICAgIHggPSB0Lng7CisgICB9ICAKKyAgIAorICAgdm9pZCBmICgpeworICAgICB4LnQgPSB5LmdldCgpOworICAgICB5LnoudCA9IG5ldyBTdHJpbmcoKTsKKyAgICAgeC5pID0gMzsKKyAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MjUvYWZ0ZXIvVGVzdC4xLml0ZW1zIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QyNS9hZnRlci9UZXN0LjEuaXRlbXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWE0NzE1MAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MjUvYWZ0ZXIvVGVzdC4xLml0ZW1zCkBAIC0wLDAgKzEgQEAKK0xpbmtlZExpc3Q8amF2YS5sYW5nLlN0cmluZz5cblBzaUZpZWxkOnkKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MjUvYWZ0ZXIvVGVzdC5pdGVtcyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MjUvYWZ0ZXIvVGVzdC5pdGVtcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NDZlMjZmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QyNS9hZnRlci9UZXN0Lml0ZW1zCkBAIC0wLDAgKzEgQEAKK0xpbmtlZExpc3RcblBzaUZpZWxkOnkKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MjUvYWZ0ZXIvdGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QyNS9hZnRlci90ZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWQ3NDc3OAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MjUvYWZ0ZXIvdGVzdC5qYXZhCkBAIC0wLDAgKzEsMjggQEAKK2NsYXNzIEl0ZXJhdG9yPFQ+eworICBwdWJsaWMgVCBnZXQoKXtyZXR1cm4gbnVsbDt9Cit9CisKK2NsYXNzIExpbmtlZExpc3Q8VD57CisgICAgTGlua2VkTGlzdDxUPiB6OworICAgIFQgdDsKKyAgICBwdWJsaWMgSXRlcmF0b3I8VD4gaXRlcmF0b3IoKXsKKyAgICAgIHJldHVybiBudWxsOworICAgIH0KKyAgICBUIGdldCgpe3JldHVybiB0O30KKyAgICB2b2lkIHNldChUIHQpe30KK30KKworY2xhc3MgU2ltcGxlIHsKK30KKworY2xhc3MgVGVzdHsKKyAgIExpbmtlZExpc3QgeTsKKyAgIAorICAgVGVzdChUZXN0IHQpeworICAgICAgeCA9IHQueDsKKyAgIH0gIAorICAgCisgICB2b2lkIGYgKCl7CisgICAgIHkuei50ID0gbmV3IFN0cmluZygpOworICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QyNS9iZWZvcmUvdGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QyNS9iZWZvcmUvdGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFkNzQ3NzgKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDI1L2JlZm9yZS90ZXN0LmphdmEKQEAgLTAsMCArMSwyOCBAQAorY2xhc3MgSXRlcmF0b3I8VD57CisgIHB1YmxpYyBUIGdldCgpe3JldHVybiBudWxsO30KK30KKworY2xhc3MgTGlua2VkTGlzdDxUPnsKKyAgICBMaW5rZWRMaXN0PFQ+IHo7CisgICAgVCB0OworICAgIHB1YmxpYyBJdGVyYXRvcjxUPiBpdGVyYXRvcigpeworICAgICAgcmV0dXJuIG51bGw7CisgICAgfQorICAgIFQgZ2V0KCl7cmV0dXJuIHQ7fQorICAgIHZvaWQgc2V0KFQgdCl7fQorfQorCitjbGFzcyBTaW1wbGUgeworfQorCitjbGFzcyBUZXN0eworICAgTGlua2VkTGlzdCB5OworICAgCisgICBUZXN0KFRlc3QgdCl7CisgICAgICB4ID0gdC54OworICAgfSAgCisgICAKKyAgIHZvaWQgZiAoKXsKKyAgICAgeS56LnQgPSBuZXcgU3RyaW5nKCk7CisgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDI2L2FmdGVyL1Rlc3QuMS5pdGVtcyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MjYvYWZ0ZXIvVGVzdC4xLml0ZW1zCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVhNDcxNTAKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDI2L2FmdGVyL1Rlc3QuMS5pdGVtcwpAQCAtMCwwICsxIEBACitMaW5rZWRMaXN0PGphdmEubGFuZy5TdHJpbmc+XG5Qc2lGaWVsZDp5CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDI2L2FmdGVyL1Rlc3QuaXRlbXMgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDI2L2FmdGVyL1Rlc3QuaXRlbXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTQ2ZTI2ZgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MjYvYWZ0ZXIvVGVzdC5pdGVtcwpAQCAtMCwwICsxIEBACitMaW5rZWRMaXN0XG5Qc2lGaWVsZDp5CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDI2L2FmdGVyL3Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MjYvYWZ0ZXIvdGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI5MmUwZGIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDI2L2FmdGVyL3Rlc3QuamF2YQpAQCAtMCwwICsxLDE4IEBACitjbGFzcyBJdGVyYXRvcjxUPnsKKyAgcHVibGljIFQgZ2V0KCl7cmV0dXJuIG51bGw7fQorfQorCitjbGFzcyBMaW5rZWRMaXN0PFQ+eworICAgIEl0ZXJhdG9yPExpbmtlZExpc3Q8VD4+IHQ7Cit9CisKK2NsYXNzIFNpbXBsZSB7Cit9CisKK2NsYXNzIFRlc3R7CisgICBMaW5rZWRMaXN0IHk7CisKKyAgIHZvaWQgZiAoKXsKKyAgICAgeS50ID0gbmV3IEl0ZXJhdG9yPExpbmtlZExpc3Q8U3RyaW5nPj4oKTsKKyAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MjYvYmVmb3JlL3Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MjYvYmVmb3JlL3Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOTJlMGRiCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QyNi9iZWZvcmUvdGVzdC5qYXZhCkBAIC0wLDAgKzEsMTggQEAKK2NsYXNzIEl0ZXJhdG9yPFQ+eworICBwdWJsaWMgVCBnZXQoKXtyZXR1cm4gbnVsbDt9Cit9CisKK2NsYXNzIExpbmtlZExpc3Q8VD57CisgICAgSXRlcmF0b3I8TGlua2VkTGlzdDxUPj4gdDsKK30KKworY2xhc3MgU2ltcGxlIHsKK30KKworY2xhc3MgVGVzdHsKKyAgIExpbmtlZExpc3QgeTsKKworICAgdm9pZCBmICgpeworICAgICB5LnQgPSBuZXcgSXRlcmF0b3I8TGlua2VkTGlzdDxTdHJpbmc+PigpOworICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QyNy9hZnRlci9UZXN0LjEuaXRlbXMgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDI3L2FmdGVyL1Rlc3QuMS5pdGVtcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NDZlMjZmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QyNy9hZnRlci9UZXN0LjEuaXRlbXMKQEAgLTAsMCArMSBAQAorTGlua2VkTGlzdFxuUHNpRmllbGQ6eQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QyNy9hZnRlci9UZXN0Lml0ZW1zIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QyNy9hZnRlci9UZXN0Lml0ZW1zCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk0NmUyNmYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDI3L2FmdGVyL1Rlc3QuaXRlbXMKQEAgLTAsMCArMSBAQAorTGlua2VkTGlzdFxuUHNpRmllbGQ6eQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QyNy9hZnRlci90ZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDI3L2FmdGVyL3Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MTNlYmZjCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QyNy9hZnRlci90ZXN0LmphdmEKQEAgLTAsMCArMSwyOCBAQAorY2xhc3MgSXRlcmF0b3I8VD57CisgIHB1YmxpYyBUIGdldCgpe3JldHVybiBudWxsO30KK30KKworY2xhc3MgTGlua2VkTGlzdDxUPnsKKyAgICBMaW5rZWRMaXN0IHo7CisgICAgVCB0OworICAgIHB1YmxpYyBJdGVyYXRvcjxUPiBpdGVyYXRvcigpeworICAgICAgcmV0dXJuIG51bGw7CisgICAgfQorICAgIFQgZ2V0KCl7cmV0dXJuIHQ7fQorICAgIHZvaWQgc2V0KFQgdCl7fQorfQorCitjbGFzcyBTaW1wbGUgeworfQorCitjbGFzcyBUZXN0eworICAgTGlua2VkTGlzdCB5OworICAgCisgICBUZXN0KFRlc3QgdCl7CisgICAgICB4ID0gdC54OworICAgfSAgCisgICAKKyAgIHZvaWQgZiAoKXsKKyAgICAgeS56LnQgPSBuZXcgU3RyaW5nKCk7CisgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDI3L2JlZm9yZS90ZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDI3L2JlZm9yZS90ZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzEzZWJmYwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MjcvYmVmb3JlL3Rlc3QuamF2YQpAQCAtMCwwICsxLDI4IEBACitjbGFzcyBJdGVyYXRvcjxUPnsKKyAgcHVibGljIFQgZ2V0KCl7cmV0dXJuIG51bGw7fQorfQorCitjbGFzcyBMaW5rZWRMaXN0PFQ+eworICAgIExpbmtlZExpc3QgejsKKyAgICBUIHQ7CisgICAgcHVibGljIEl0ZXJhdG9yPFQ+IGl0ZXJhdG9yKCl7CisgICAgICByZXR1cm4gbnVsbDsKKyAgICB9CisgICAgVCBnZXQoKXtyZXR1cm4gdDt9CisgICAgdm9pZCBzZXQoVCB0KXt9Cit9CisKK2NsYXNzIFNpbXBsZSB7Cit9CisKK2NsYXNzIFRlc3R7CisgICBMaW5rZWRMaXN0IHk7CisgICAKKyAgIFRlc3QoVGVzdCB0KXsKKyAgICAgIHggPSB0Lng7CisgICB9ICAKKyAgIAorICAgdm9pZCBmICgpeworICAgICB5LnoudCA9IG5ldyBTdHJpbmcoKTsKKyAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MjgvYWZ0ZXIvVGVzdC4xLml0ZW1zIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QyOC9hZnRlci9UZXN0LjEuaXRlbXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTEyNzU0YwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MjgvYWZ0ZXIvVGVzdC4xLml0ZW1zCkBAIC0wLDAgKzEgQEAKK0xpbmtlZExpc3Q8U2ltcGxlPlxuUHNpRmllbGQ6eQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QyOC9hZnRlci9UZXN0Lml0ZW1zIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QyOC9hZnRlci9UZXN0Lml0ZW1zCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk0NmUyNmYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDI4L2FmdGVyL1Rlc3QuaXRlbXMKQEAgLTAsMCArMSBAQAorTGlua2VkTGlzdFxuUHNpRmllbGQ6eQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QyOC9hZnRlci90ZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDI4L2FmdGVyL3Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZmFiNmJkCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QyOC9hZnRlci90ZXN0LmphdmEKQEAgLTAsMCArMSwxMyBAQAorY2xhc3MgTGlua2VkTGlzdDxUPnsKKyAgICBUIHQ7CisgICAgVCBnZXQoKXtyZXR1cm4gdDt9CisgICAgdm9pZCBzZXQoVCB0KXt9Cit9CisKK2NsYXNzIFNpbXBsZSB7Cit9CisKK2NsYXNzIFRlc3R7CisgICBMaW5rZWRMaXN0PFNpbXBsZT4geDsKKyAgIExpbmtlZExpc3QgeSA9IHg7Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDI4L2JlZm9yZS90ZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDI4L2JlZm9yZS90ZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2ZhYjZiZAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MjgvYmVmb3JlL3Rlc3QuamF2YQpAQCAtMCwwICsxLDEzIEBACitjbGFzcyBMaW5rZWRMaXN0PFQ+eworICAgIFQgdDsKKyAgICBUIGdldCgpe3JldHVybiB0O30KKyAgICB2b2lkIHNldChUIHQpe30KK30KKworY2xhc3MgU2ltcGxlIHsKK30KKworY2xhc3MgVGVzdHsKKyAgIExpbmtlZExpc3Q8U2ltcGxlPiB4OworICAgTGlua2VkTGlzdCB5ID0geDsKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MjkvYWZ0ZXIvVGVzdC4xLml0ZW1zIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QyOS9hZnRlci9UZXN0LjEuaXRlbXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGQ3MmFjYgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MjkvYWZ0ZXIvVGVzdC4xLml0ZW1zCkBAIC0wLDAgKzEgQEAKK0xpbmtlZExpc3Q8U2ltcGxlPlxuUHNpTG9jYWxWYXJpYWJsZTp5CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDI5L2FmdGVyL1Rlc3QuaXRlbXMgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDI5L2FmdGVyL1Rlc3QuaXRlbXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2VjNGJiZgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MjkvYWZ0ZXIvVGVzdC5pdGVtcwpAQCAtMCwwICsxIEBACitMaW5rZWRMaXN0XG5Qc2lMb2NhbFZhcmlhYmxlOnkKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MjkvYWZ0ZXIvdGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QyOS9hZnRlci90ZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDQzOTBjNzIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDI5L2FmdGVyL3Rlc3QuamF2YQpAQCAtMCwwICsxLDE1IEBACitjbGFzcyBMaW5rZWRMaXN0PFQ+eworICAgIFQgdDsKKyAgICBUIGdldCgpe3JldHVybiB0O30KKyAgICB2b2lkIHNldChUIHQpe30KK30KKworY2xhc3MgU2ltcGxlIHsKK30KKworY2xhc3MgVGVzdHsKKyAgIHZvaWQgZiAoKXsKKyAgIExpbmtlZExpc3Q8U2ltcGxlPiB4OworICAgTGlua2VkTGlzdCB5ID0geDsKKyAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MjkvYmVmb3JlL3Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MjkvYmVmb3JlL3Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNDM5MGM3MgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MjkvYmVmb3JlL3Rlc3QuamF2YQpAQCAtMCwwICsxLDE1IEBACitjbGFzcyBMaW5rZWRMaXN0PFQ+eworICAgIFQgdDsKKyAgICBUIGdldCgpe3JldHVybiB0O30KKyAgICB2b2lkIHNldChUIHQpe30KK30KKworY2xhc3MgU2ltcGxlIHsKK30KKworY2xhc3MgVGVzdHsKKyAgIHZvaWQgZiAoKXsKKyAgIExpbmtlZExpc3Q8U2ltcGxlPiB4OworICAgTGlua2VkTGlzdCB5ID0geDsKKyAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MzAvYWZ0ZXIvVGVzdC4xLml0ZW1zIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QzMC9hZnRlci9UZXN0LjEuaXRlbXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGRkOWU1MwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MzAvYWZ0ZXIvVGVzdC4xLml0ZW1zCkBAIC0wLDAgKzEsMiBAQAorTGlua2VkTGlzdDxqYXZhLmxhbmcuSW50ZWdlcj5cblBzaUxvY2FsVmFyaWFibGU6eQorTGlua2VkTGlzdDxqYXZhLmxhbmcuSW50ZWdlcj5cbm5ldwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QzMC9hZnRlci9UZXN0Lml0ZW1zIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QzMC9hZnRlci9UZXN0Lml0ZW1zCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2ZWMyZDIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDMwL2FmdGVyL1Rlc3QuaXRlbXMKQEAgLTAsMCArMSwyIEBACitMaW5rZWRMaXN0XG5Qc2lMb2NhbFZhcmlhYmxlOnkKK0xpbmtlZExpc3Rcbm5ldwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QzMC9hZnRlci90ZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDMwL2FmdGVyL3Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYjJlMjczCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QzMC9hZnRlci90ZXN0LmphdmEKQEAgLTAsMCArMSwxNSBAQAorY2xhc3MgTGlua2VkTGlzdDxUPnsKKyAgICBUIHQ7CisgICAgVCBnZXQoKXtyZXR1cm4gdDt9CisgICAgdm9pZCBzZXQoVCB0KXt9Cit9CisKK2NsYXNzIFNpbXBsZSB7Cit9CisKK2NsYXNzIFRlc3R7CisgICB2b2lkIGYgKCl7CisgICAgICBMaW5rZWRMaXN0IHkgPSBuZXcgTGlua2VkTGlzdCgpOworICAgICAgeS5zZXQobmV3IEludGVnZXIoMykpOworICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QzMC9iZWZvcmUvdGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QzMC9iZWZvcmUvdGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBiMmUyNzMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDMwL2JlZm9yZS90ZXN0LmphdmEKQEAgLTAsMCArMSwxNSBAQAorY2xhc3MgTGlua2VkTGlzdDxUPnsKKyAgICBUIHQ7CisgICAgVCBnZXQoKXtyZXR1cm4gdDt9CisgICAgdm9pZCBzZXQoVCB0KXt9Cit9CisKK2NsYXNzIFNpbXBsZSB7Cit9CisKK2NsYXNzIFRlc3R7CisgICB2b2lkIGYgKCl7CisgICAgICBMaW5rZWRMaXN0IHkgPSBuZXcgTGlua2VkTGlzdCgpOworICAgICAgeS5zZXQobmV3IEludGVnZXIoMykpOworICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QzMS9hZnRlci9UZXN0LjEuaXRlbXMgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDMxL2FmdGVyL1Rlc3QuMS5pdGVtcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZGQ5ZTUzCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QzMS9hZnRlci9UZXN0LjEuaXRlbXMKQEAgLTAsMCArMSwyIEBACitMaW5rZWRMaXN0PGphdmEubGFuZy5JbnRlZ2VyPlxuUHNpTG9jYWxWYXJpYWJsZTp5CitMaW5rZWRMaXN0PGphdmEubGFuZy5JbnRlZ2VyPlxubmV3CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDMxL2FmdGVyL1Rlc3QuaXRlbXMgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDMxL2FmdGVyL1Rlc3QuaXRlbXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTZlYzJkMgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MzEvYWZ0ZXIvVGVzdC5pdGVtcwpAQCAtMCwwICsxLDIgQEAKK0xpbmtlZExpc3RcblBzaUxvY2FsVmFyaWFibGU6eQorTGlua2VkTGlzdFxubmV3CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDMxL2FmdGVyL3Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MzEvYWZ0ZXIvdGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUyMDI2ZmIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDMxL2FmdGVyL3Rlc3QuamF2YQpAQCAtMCwwICsxLDE2IEBACitjbGFzcyBMaW5rZWRMaXN0PFQ+eworICAgIFQgdDsKKyAgICBUIGdldCgpe3JldHVybiB0O30KKyAgICB2b2lkIHNldChUIHQpe30KK30KKworY2xhc3MgU2ltcGxlIHsKK30KKworY2xhc3MgVGVzdHsKKyAgIHZvaWQgZiAoKXsKKyAgICAgIExpbmtlZExpc3QgeTsKKyAgICAgIHkgPSBuZXcgTGlua2VkTGlzdCgpOworICAgICAgeS5zZXQobmV3IEludGVnZXIoMykpOworICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QzMS9iZWZvcmUvdGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QzMS9iZWZvcmUvdGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUyMDI2ZmIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDMxL2JlZm9yZS90ZXN0LmphdmEKQEAgLTAsMCArMSwxNiBAQAorY2xhc3MgTGlua2VkTGlzdDxUPnsKKyAgICBUIHQ7CisgICAgVCBnZXQoKXtyZXR1cm4gdDt9CisgICAgdm9pZCBzZXQoVCB0KXt9Cit9CisKK2NsYXNzIFNpbXBsZSB7Cit9CisKK2NsYXNzIFRlc3R7CisgICB2b2lkIGYgKCl7CisgICAgICBMaW5rZWRMaXN0IHk7CisgICAgICB5ID0gbmV3IExpbmtlZExpc3QoKTsKKyAgICAgIHkuc2V0KG5ldyBJbnRlZ2VyKDMpKTsKKyAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MzIvYWZ0ZXIvVGVzdC4xLml0ZW1zIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QzMi9hZnRlci9UZXN0LjEuaXRlbXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWZjY2JkNwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MzIvYWZ0ZXIvVGVzdC4xLml0ZW1zCkBAIC0wLDAgKzEsMiBAQAorTGlua2VkTGlzdDw8OkI+XG5uZXcKK0xpbmtlZExpc3Q8amF2YS5sYW5nLk9iamVjdD5cblBzaUxvY2FsVmFyaWFibGU6eQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QzMi9hZnRlci9UZXN0Lml0ZW1zIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QzMi9hZnRlci9UZXN0Lml0ZW1zCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2ZWMyZDIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDMyL2FmdGVyL1Rlc3QuaXRlbXMKQEAgLTAsMCArMSwyIEBACitMaW5rZWRMaXN0XG5Qc2lMb2NhbFZhcmlhYmxlOnkKK0xpbmtlZExpc3Rcbm5ldwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QzMi9hZnRlci90ZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDMyL2FmdGVyL3Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yODExMTU5ZGMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDMyL2FmdGVyL3Rlc3QuamF2YQpAQCAtMCwwICsxLDIyIEBACitjbGFzcyBMaW5rZWRMaXN0PFQ+eworICAgIFQgdDsKKyAgICBUIGdldCgpe3JldHVybiB0O30KKyAgICB2b2lkIHNldChUIHQpe30KK30KKworY2xhc3MgQSB7Cit9CisKK2NsYXNzIEIgZXh0ZW5kcyBBIHsKK30KKworY2xhc3MgQyBleHRlbmRzIEEgeworfQorCitjbGFzcyBUZXN0eworICAgdm9pZCBmICgpeworICAgICAgTGlua2VkTGlzdCB5ID0gbmV3IExpbmtlZExpc3QoKTsKKyAgICAgIEIgYiA9IChCKSB5LmdldCgpOworICAgICAgQyBjID0gKEMpIHkuZ2V0KCk7CisgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDMyL2JlZm9yZS90ZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDMyL2JlZm9yZS90ZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjgxMTE1OWRjCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QzMi9iZWZvcmUvdGVzdC5qYXZhCkBAIC0wLDAgKzEsMjIgQEAKK2NsYXNzIExpbmtlZExpc3Q8VD57CisgICAgVCB0OworICAgIFQgZ2V0KCl7cmV0dXJuIHQ7fQorICAgIHZvaWQgc2V0KFQgdCl7fQorfQorCitjbGFzcyBBIHsKK30KKworY2xhc3MgQiBleHRlbmRzIEEgeworfQorCitjbGFzcyBDIGV4dGVuZHMgQSB7Cit9CisKK2NsYXNzIFRlc3R7CisgICB2b2lkIGYgKCl7CisgICAgICBMaW5rZWRMaXN0IHkgPSBuZXcgTGlua2VkTGlzdCgpOworICAgICAgQiBiID0gKEIpIHkuZ2V0KCk7CisgICAgICBDIGMgPSAoQykgeS5nZXQoKTsKKyAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MzMvYWZ0ZXIvVGVzdC4xLml0ZW1zIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QzMy9hZnRlci9UZXN0LjEuaXRlbXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGIyMGVjNwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MzMvYWZ0ZXIvVGVzdC4xLml0ZW1zCkBAIC0wLDAgKzEgQEAKK0xpbmtlZExpc3Q8amF2YS5sYW5nLkludGVnZXI+XG5Qc2lMb2NhbFZhcmlhYmxlOnkKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MzMvYWZ0ZXIvVGVzdC5pdGVtcyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MzMvYWZ0ZXIvVGVzdC5pdGVtcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZWM0YmJmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QzMy9hZnRlci9UZXN0Lml0ZW1zCkBAIC0wLDAgKzEgQEAKK0xpbmtlZExpc3RcblBzaUxvY2FsVmFyaWFibGU6eQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QzMy9hZnRlci90ZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDMzL2FmdGVyL3Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kM2I4OGY5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QzMy9hZnRlci90ZXN0LmphdmEKQEAgLTAsMCArMSwxNCBAQAorY2xhc3MgTGlua2VkTGlzdDxUPnsKKyAgICBUIHQ7CisgICAgVCBnZXQoKXtyZXR1cm4gdDt9CisgICAgdm9pZCBzZXQoVCB0KXt9Cit9CisKK2NsYXNzIExpc3QgZXh0ZW5kcyBMaW5rZWRMaXN0PEludGVnZXI+eworfQorCitjbGFzcyBUZXN0eworICAgdm9pZCBmICgpeworICAgICAgTGlua2VkTGlzdCB5ID0gbmV3IExpc3QoKTsgICAgICAKKyAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MzMvYmVmb3JlL3Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MzMvYmVmb3JlL3Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kM2I4OGY5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QzMy9iZWZvcmUvdGVzdC5qYXZhCkBAIC0wLDAgKzEsMTQgQEAKK2NsYXNzIExpbmtlZExpc3Q8VD57CisgICAgVCB0OworICAgIFQgZ2V0KCl7cmV0dXJuIHQ7fQorICAgIHZvaWQgc2V0KFQgdCl7fQorfQorCitjbGFzcyBMaXN0IGV4dGVuZHMgTGlua2VkTGlzdDxJbnRlZ2VyPnsKK30KKworY2xhc3MgVGVzdHsKKyAgIHZvaWQgZiAoKXsKKyAgICAgIExpbmtlZExpc3QgeSA9IG5ldyBMaXN0KCk7ICAgICAgCisgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDM0L2FmdGVyL1Rlc3QuMS5pdGVtcyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MzQvYWZ0ZXIvVGVzdC4xLml0ZW1zCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBiMjBlYzcKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDM0L2FmdGVyL1Rlc3QuMS5pdGVtcwpAQCAtMCwwICsxIEBACitMaW5rZWRMaXN0PGphdmEubGFuZy5JbnRlZ2VyPlxuUHNpTG9jYWxWYXJpYWJsZTp5CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDM0L2FmdGVyL1Rlc3QuaXRlbXMgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDM0L2FmdGVyL1Rlc3QuaXRlbXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2VjNGJiZgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MzQvYWZ0ZXIvVGVzdC5pdGVtcwpAQCAtMCwwICsxIEBACitMaW5rZWRMaXN0XG5Qc2lMb2NhbFZhcmlhYmxlOnkKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MzQvYWZ0ZXIvdGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QzNC9hZnRlci90ZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWZjZjIzOQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MzQvYWZ0ZXIvdGVzdC5qYXZhCkBAIC0wLDAgKzEsMTcgQEAKK2NsYXNzIExpbmtlZExpc3Q8VD57CisgICAgVCB0OworICAgIFQgZ2V0KCl7cmV0dXJuIHQ7fQorICAgIHZvaWQgc2V0KFQgdCl7fQorfQorCitjbGFzcyBMaXN0IGV4dGVuZHMgTGlua2VkTGlzdDxJbnRlZ2VyPnsKK30KKworY2xhc3MgTWlzdCBleHRlbmRzIExpc3R7Cit9CisKK2NsYXNzIFRlc3R7CisgICB2b2lkIGYgKCl7CisgICAgICBMaW5rZWRMaXN0IHkgPSBuZXcgTWlzdCgpOworICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QzNC9iZWZvcmUvdGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QzNC9iZWZvcmUvdGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVmY2YyMzkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDM0L2JlZm9yZS90ZXN0LmphdmEKQEAgLTAsMCArMSwxNyBAQAorY2xhc3MgTGlua2VkTGlzdDxUPnsKKyAgICBUIHQ7CisgICAgVCBnZXQoKXtyZXR1cm4gdDt9CisgICAgdm9pZCBzZXQoVCB0KXt9Cit9CisKK2NsYXNzIExpc3QgZXh0ZW5kcyBMaW5rZWRMaXN0PEludGVnZXI+eworfQorCitjbGFzcyBNaXN0IGV4dGVuZHMgTGlzdHsKK30KKworY2xhc3MgVGVzdHsKKyAgIHZvaWQgZiAoKXsKKyAgICAgIExpbmtlZExpc3QgeSA9IG5ldyBNaXN0KCk7CisgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDM1L2FmdGVyL1Rlc3QuMS5pdGVtcyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MzUvYWZ0ZXIvVGVzdC4xLml0ZW1zCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY0YzAxMDYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDM1L2FmdGVyL1Rlc3QuMS5pdGVtcwpAQCAtMCwwICsxLDMgQEAKK0xpbmtlZExpc3Q8amF2YS5sYW5nLkludGVnZXIsamF2YS5sYW5nLlN0cmluZz5cblBzaUxvY2FsVmFyaWFibGU6eQorTGlzdExpbmtlZDxqYXZhLmxhbmcuU3RyaW5nLGphdmEubGFuZy5JbnRlZ2VyPlxuUHNpTG9jYWxWYXJpYWJsZTp4CitMaXN0TGlua2VkPGphdmEubGFuZy5TdHJpbmcsamF2YS5sYW5nLkludGVnZXI+XG5uZXcKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MzUvYWZ0ZXIvVGVzdC5pdGVtcyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MzUvYWZ0ZXIvVGVzdC5pdGVtcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNzE0ZDA1Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QzNS9hZnRlci9UZXN0Lml0ZW1zCkBAIC0wLDAgKzEsMyBAQAorTGlua2VkTGlzdFxuUHNpTG9jYWxWYXJpYWJsZTp5CitMaXN0TGlua2VkXG5Qc2lMb2NhbFZhcmlhYmxlOngKK0xpc3RMaW5rZWRcbm5ldwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QzNS9hZnRlci90ZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDM1L2FmdGVyL3Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ODQ5ZWUyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QzNS9hZnRlci90ZXN0LmphdmEKQEAgLTAsMCArMSwyMCBAQAorY2xhc3MgTGlua2VkTGlzdDxULCBFPnsKKyAgICBUIHQ7CisgICAgRSBlOworICAgIFQgZ2V0KCl7cmV0dXJuIHQ7fQorICAgIHZvaWQgc2V0KEUgdCl7fQorfQorCitjbGFzcyBMaXN0TGlua2VkPFQsIEU+IGV4dGVuZHMgTGlua2VkTGlzdDxFLCBUPnsKK30KKworY2xhc3MgVGVzdHsKKworICAgdm9pZCBmICgpeworICAgICAgTGlzdExpbmtlZCB4ID0gbmV3IExpc3RMaW5rZWQoKTsKKyAgICAgIExpbmtlZExpc3QgeSA9IHg7CisKKyAgICAgIEludGVnZXIgaSA9IChJbnRlZ2VyKSB4LmdldCgpOworICAgICAgeC5zZXQoIiIpOworICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QzNS9iZWZvcmUvdGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QzNS9iZWZvcmUvdGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc4NDllZTIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDM1L2JlZm9yZS90ZXN0LmphdmEKQEAgLTAsMCArMSwyMCBAQAorY2xhc3MgTGlua2VkTGlzdDxULCBFPnsKKyAgICBUIHQ7CisgICAgRSBlOworICAgIFQgZ2V0KCl7cmV0dXJuIHQ7fQorICAgIHZvaWQgc2V0KEUgdCl7fQorfQorCitjbGFzcyBMaXN0TGlua2VkPFQsIEU+IGV4dGVuZHMgTGlua2VkTGlzdDxFLCBUPnsKK30KKworY2xhc3MgVGVzdHsKKworICAgdm9pZCBmICgpeworICAgICAgTGlzdExpbmtlZCB4ID0gbmV3IExpc3RMaW5rZWQoKTsKKyAgICAgIExpbmtlZExpc3QgeSA9IHg7CisKKyAgICAgIEludGVnZXIgaSA9IChJbnRlZ2VyKSB4LmdldCgpOworICAgICAgeC5zZXQoIiIpOworICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QzNi9hZnRlci9UZXN0LjEuaXRlbXMgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDM2L2FmdGVyL1Rlc3QuMS5pdGVtcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMGVkODliCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QzNi9hZnRlci9UZXN0LjEuaXRlbXMKQEAgLTAsMCArMSwzIEBACitMaW5rZWRMaXN0PGphdmEubGFuZy5JbnRlZ2VyLGphdmEuaW8uU2VyaWFsaXphYmxlPlxuUHNpTG9jYWxWYXJpYWJsZTp5CitMaXN0TGlua2VkPGphdmEuaW8uU2VyaWFsaXphYmxlLGphdmEubGFuZy5JbnRlZ2VyPlxuUHNpTG9jYWxWYXJpYWJsZTp4CitMaXN0TGlua2VkPGphdmEuaW8uU2VyaWFsaXphYmxlLGphdmEubGFuZy5JbnRlZ2VyPlxubmV3CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDM2L2FmdGVyL1Rlc3QuaXRlbXMgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDM2L2FmdGVyL1Rlc3QuaXRlbXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTcxNGQwNQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MzYvYWZ0ZXIvVGVzdC5pdGVtcwpAQCAtMCwwICsxLDMgQEAKK0xpbmtlZExpc3RcblBzaUxvY2FsVmFyaWFibGU6eQorTGlzdExpbmtlZFxuUHNpTG9jYWxWYXJpYWJsZTp4CitMaXN0TGlua2VkXG5uZXcKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MzYvYWZ0ZXIvdGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QzNi9hZnRlci90ZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWZhNzQ1MwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MzYvYWZ0ZXIvdGVzdC5qYXZhCkBAIC0wLDAgKzEsMjEgQEAKK2NsYXNzIExpbmtlZExpc3Q8VCwgRT57CisgICAgVCB0OworICAgIEUgZTsKKyAgICBUIGdldCgpe3JldHVybiB0O30KKyAgICB2b2lkIHNldChFIHQpe30KK30KKworY2xhc3MgTGlzdExpbmtlZDxULCBFPiBleHRlbmRzIExpbmtlZExpc3Q8RSwgVD57Cit9CisKK2NsYXNzIFRlc3R7CisKKyAgIHZvaWQgZiAoKXsKKyAgICAgIExpc3RMaW5rZWQgeCA9IG5ldyBMaXN0TGlua2VkKCk7CisgICAgICBMaW5rZWRMaXN0IHkgPSB4OworCisgICAgICBJbnRlZ2VyIGkgPSAoSW50ZWdlcikgeC5nZXQoKTsKKyAgICAgIHguc2V0KCIiKTsKKyAgICAgIHkuc2V0KG5ldyBJbnRlZ2VyKDIpKTsKKyAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MzYvYmVmb3JlL3Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MzYvYmVmb3JlL3Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZmE3NDUzCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QzNi9iZWZvcmUvdGVzdC5qYXZhCkBAIC0wLDAgKzEsMjEgQEAKK2NsYXNzIExpbmtlZExpc3Q8VCwgRT57CisgICAgVCB0OworICAgIEUgZTsKKyAgICBUIGdldCgpe3JldHVybiB0O30KKyAgICB2b2lkIHNldChFIHQpe30KK30KKworY2xhc3MgTGlzdExpbmtlZDxULCBFPiBleHRlbmRzIExpbmtlZExpc3Q8RSwgVD57Cit9CisKK2NsYXNzIFRlc3R7CisKKyAgIHZvaWQgZiAoKXsKKyAgICAgIExpc3RMaW5rZWQgeCA9IG5ldyBMaXN0TGlua2VkKCk7CisgICAgICBMaW5rZWRMaXN0IHkgPSB4OworCisgICAgICBJbnRlZ2VyIGkgPSAoSW50ZWdlcikgeC5nZXQoKTsKKyAgICAgIHguc2V0KCIiKTsKKyAgICAgIHkuc2V0KG5ldyBJbnRlZ2VyKDIpKTsKKyAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MzcvYWZ0ZXIvVGVzdC4xLml0ZW1zIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QzNy9hZnRlci9UZXN0LjEuaXRlbXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjRjMDEwNgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MzcvYWZ0ZXIvVGVzdC4xLml0ZW1zCkBAIC0wLDAgKzEsMyBAQAorTGlua2VkTGlzdDxqYXZhLmxhbmcuSW50ZWdlcixqYXZhLmxhbmcuU3RyaW5nPlxuUHNpTG9jYWxWYXJpYWJsZTp5CitMaXN0TGlua2VkPGphdmEubGFuZy5TdHJpbmcsamF2YS5sYW5nLkludGVnZXI+XG5Qc2lMb2NhbFZhcmlhYmxlOngKK0xpc3RMaW5rZWQ8amF2YS5sYW5nLlN0cmluZyxqYXZhLmxhbmcuSW50ZWdlcj5cbm5ldwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QzNy9hZnRlci9UZXN0Lml0ZW1zIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QzNy9hZnRlci9UZXN0Lml0ZW1zCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE3MTRkMDUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDM3L2FmdGVyL1Rlc3QuaXRlbXMKQEAgLTAsMCArMSwzIEBACitMaW5rZWRMaXN0XG5Qc2lMb2NhbFZhcmlhYmxlOnkKK0xpc3RMaW5rZWRcblBzaUxvY2FsVmFyaWFibGU6eAorTGlzdExpbmtlZFxubmV3CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDM3L2FmdGVyL3Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MzcvYWZ0ZXIvdGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMwYmM5Y2MKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDM3L2FmdGVyL3Rlc3QuamF2YQpAQCAtMCwwICsxLDI1IEBACitjbGFzcyBMaW5rZWRMaXN0IDxULCBFPiB7CisgICAgVCB0OworICAgIEUgZTsKKworICAgIFQgZ2V0KCkgeworICAgICAgICByZXR1cm4gdDsKKyAgICB9CisKKyAgICB2b2lkIHNldChFIHQpIHsKKyAgICB9Cit9CisKK2NsYXNzIExpc3RMaW5rZWQgPFQsIEU+IGV4dGVuZHMgTGlua2VkTGlzdDxFLCBUPiB7Cit9CisKK2NsYXNzIFRlc3QgeworCisgICAgdm9pZCBmKCkgeworICAgICAgICBMaXN0TGlua2VkIHggPSBuZXcgTGlzdExpbmtlZCgpOworICAgICAgICBMaW5rZWRMaXN0IHkgPSB4OworCisgICAgICAgIHkudCA9IG5ldyBJbnRlZ2VyKDMpOworICAgICAgICB5LmUgPSAiIjsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QzNy9iZWZvcmUvdGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QzNy9iZWZvcmUvdGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMwYmM5Y2MKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDM3L2JlZm9yZS90ZXN0LmphdmEKQEAgLTAsMCArMSwyNSBAQAorY2xhc3MgTGlua2VkTGlzdCA8VCwgRT4geworICAgIFQgdDsKKyAgICBFIGU7CisKKyAgICBUIGdldCgpIHsKKyAgICAgICAgcmV0dXJuIHQ7CisgICAgfQorCisgICAgdm9pZCBzZXQoRSB0KSB7CisgICAgfQorfQorCitjbGFzcyBMaXN0TGlua2VkIDxULCBFPiBleHRlbmRzIExpbmtlZExpc3Q8RSwgVD4geworfQorCitjbGFzcyBUZXN0IHsKKworICAgIHZvaWQgZigpIHsKKyAgICAgICAgTGlzdExpbmtlZCB4ID0gbmV3IExpc3RMaW5rZWQoKTsKKyAgICAgICAgTGlua2VkTGlzdCB5ID0geDsKKworICAgICAgICB5LnQgPSBuZXcgSW50ZWdlcigzKTsKKyAgICAgICAgeS5lID0gIiI7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MzgvYWZ0ZXIvVGVzdC4xLml0ZW1zIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QzOC9hZnRlci9UZXN0LjEuaXRlbXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjRjMDEwNgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MzgvYWZ0ZXIvVGVzdC4xLml0ZW1zCkBAIC0wLDAgKzEsMyBAQAorTGlua2VkTGlzdDxqYXZhLmxhbmcuSW50ZWdlcixqYXZhLmxhbmcuU3RyaW5nPlxuUHNpTG9jYWxWYXJpYWJsZTp5CitMaXN0TGlua2VkPGphdmEubGFuZy5TdHJpbmcsamF2YS5sYW5nLkludGVnZXI+XG5Qc2lMb2NhbFZhcmlhYmxlOngKK0xpc3RMaW5rZWQ8amF2YS5sYW5nLlN0cmluZyxqYXZhLmxhbmcuSW50ZWdlcj5cbm5ldwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QzOC9hZnRlci9UZXN0Lml0ZW1zIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QzOC9hZnRlci9UZXN0Lml0ZW1zCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE3MTRkMDUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDM4L2FmdGVyL1Rlc3QuaXRlbXMKQEAgLTAsMCArMSwzIEBACitMaW5rZWRMaXN0XG5Qc2lMb2NhbFZhcmlhYmxlOnkKK0xpc3RMaW5rZWRcblBzaUxvY2FsVmFyaWFibGU6eAorTGlzdExpbmtlZFxubmV3CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDM4L2FmdGVyL3Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MzgvYWZ0ZXIvdGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg4MzdhN2IKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDM4L2FmdGVyL3Rlc3QuamF2YQpAQCAtMCwwICsxLDI1IEBACitjbGFzcyBMaW5rZWRMaXN0IDxULCBFPiB7CisgICAgVCB0OworICAgIEUgZTsKKworICAgIFQgZ2V0KCkgeworICAgICAgICByZXR1cm4gdDsKKyAgICB9CisKKyAgICB2b2lkIHNldChFIHQpIHsKKyAgICB9Cit9CisKK2NsYXNzIExpc3RMaW5rZWQgPFQsIEU+IGV4dGVuZHMgTGlua2VkTGlzdDxFLCBUPiB7Cit9CisKK2NsYXNzIFRlc3QgeworCisgICAgdm9pZCBmKCkgeworICAgICAgICBMaXN0TGlua2VkIHggPSBuZXcgTGlzdExpbmtlZCgpOworICAgICAgICBMaW5rZWRMaXN0IHkgPSB4OworCisgICAgICAgIHgudCA9IG5ldyBJbnRlZ2VyKDMpOworICAgICAgICB4LmUgPSAiIjsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDM4L2JlZm9yZS90ZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDM4L2JlZm9yZS90ZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODgzN2E3YgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MzgvYmVmb3JlL3Rlc3QuamF2YQpAQCAtMCwwICsxLDI1IEBACitjbGFzcyBMaW5rZWRMaXN0IDxULCBFPiB7CisgICAgVCB0OworICAgIEUgZTsKKworICAgIFQgZ2V0KCkgeworICAgICAgICByZXR1cm4gdDsKKyAgICB9CisKKyAgICB2b2lkIHNldChFIHQpIHsKKyAgICB9Cit9CisKK2NsYXNzIExpc3RMaW5rZWQgPFQsIEU+IGV4dGVuZHMgTGlua2VkTGlzdDxFLCBUPiB7Cit9CisKK2NsYXNzIFRlc3QgeworCisgICAgdm9pZCBmKCkgeworICAgICAgICBMaXN0TGlua2VkIHggPSBuZXcgTGlzdExpbmtlZCgpOworICAgICAgICBMaW5rZWRMaXN0IHkgPSB4OworCisgICAgICAgIHgudCA9IG5ldyBJbnRlZ2VyKDMpOworICAgICAgICB4LmUgPSAiIjsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDM5L2FmdGVyL1Rlc3QuMS5pdGVtcyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MzkvYWZ0ZXIvVGVzdC4xLml0ZW1zCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEyNTFiM2YKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDM5L2FmdGVyL1Rlc3QuMS5pdGVtcwpAQCAtMCwwICsxLDUgQEAKK0xpbmtlZExpc3Q8amF2YS5sYW5nLkludGVnZXIsamF2YS5sYW5nLkludGVnZXI+XG5Qc2lMb2NhbFZhcmlhYmxlOnkKK0xpbmtlZExpc3Q8amF2YS5sYW5nLkludGVnZXIsamF2YS5sYW5nLkludGVnZXI+XG5wYXJhbWV0ZXIgMCBvZiBmCitMaW5rZWRMaXN0PGphdmEubGFuZy5JbnRlZ2VyLGphdmEubGFuZy5JbnRlZ2VyPlxucmV0dXJuIG9mIGYKK0xpc3RMaW5rZWQ8amF2YS5sYW5nLkludGVnZXI+XG5Qc2lMb2NhbFZhcmlhYmxlOngKK0xpc3RMaW5rZWQ8amF2YS5sYW5nLkludGVnZXI+XG5uZXcKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MzkvYWZ0ZXIvVGVzdC5pdGVtcyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MzkvYWZ0ZXIvVGVzdC5pdGVtcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZmIxNzY2Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QzOS9hZnRlci9UZXN0Lml0ZW1zCkBAIC0wLDAgKzEsNSBAQAorTGlua2VkTGlzdFxuUHNpTG9jYWxWYXJpYWJsZTp5CitMaW5rZWRMaXN0XG5wYXJhbWV0ZXIgMCBvZiBmCitMaW5rZWRMaXN0XG5yZXR1cm4gb2YgZgorTGlzdExpbmtlZFxuUHNpTG9jYWxWYXJpYWJsZTp4CitMaXN0TGlua2VkXG5uZXcKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MzkvYWZ0ZXIvdGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3QzOS9hZnRlci90ZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmM4NTM1ZAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MzkvYWZ0ZXIvdGVzdC5qYXZhCkBAIC0wLDAgKzEsMjkgQEAKK2NsYXNzIExpbmtlZExpc3QgPFQsIEU+IHsKKyAgICBUIHQ7CisgICAgRSBlOworCisgICAgVCBnZXQoKSB7CisgICAgICAgIHJldHVybiB0OworICAgIH0KKworICAgIHZvaWQgc2V0KEUgdCkgeworICAgIH0KK30KKworY2xhc3MgTGlzdExpbmtlZCA8RT4gZXh0ZW5kcyBMaW5rZWRMaXN0PEUsIEludGVnZXI+IHsKK30KKworY2xhc3MgVGVzdCB7CisKKyAgICBMaW5rZWRMaXN0IGYgKExpbmtlZExpc3QgeCl7CisgICAgICAgIHJldHVybiB4OworICAgIH0KKworICAgIHZvaWQgZigpIHsKKyAgICAgICAgTGlzdExpbmtlZCB4ID0gbmV3IExpc3RMaW5rZWQoKTsKKyAgICAgICAgTGlua2VkTGlzdCB5ID0geDsKKworICAgICAgICB5LnQgPSBuZXcgSW50ZWdlcigzKTsKKyAgICAgICAgeSA9IGYgKHkpOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDM5L2JlZm9yZS90ZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDM5L2JlZm9yZS90ZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmM4NTM1ZAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90MzkvYmVmb3JlL3Rlc3QuamF2YQpAQCAtMCwwICsxLDI5IEBACitjbGFzcyBMaW5rZWRMaXN0IDxULCBFPiB7CisgICAgVCB0OworICAgIEUgZTsKKworICAgIFQgZ2V0KCkgeworICAgICAgICByZXR1cm4gdDsKKyAgICB9CisKKyAgICB2b2lkIHNldChFIHQpIHsKKyAgICB9Cit9CisKK2NsYXNzIExpc3RMaW5rZWQgPEU+IGV4dGVuZHMgTGlua2VkTGlzdDxFLCBJbnRlZ2VyPiB7Cit9CisKK2NsYXNzIFRlc3QgeworCisgICAgTGlua2VkTGlzdCBmIChMaW5rZWRMaXN0IHgpeworICAgICAgICByZXR1cm4geDsKKyAgICB9CisKKyAgICB2b2lkIGYoKSB7CisgICAgICAgIExpc3RMaW5rZWQgeCA9IG5ldyBMaXN0TGlua2VkKCk7CisgICAgICAgIExpbmtlZExpc3QgeSA9IHg7CisKKyAgICAgICAgeS50ID0gbmV3IEludGVnZXIoMyk7CisgICAgICAgIHkgPSBmICh5KTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3Q0MC9hZnRlci9UZXN0LjEuaXRlbXMgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDQwL2FmdGVyL1Rlc3QuMS5pdGVtcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MDkwZTRmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3Q0MC9hZnRlci9UZXN0LjEuaXRlbXMKQEAgLTAsMCArMSwyIEBACitMaW5rZWRMaXN0PGphdmEubGFuZy5TdHJpbmcsamF2YS5sYW5nLkludGVnZXI+XG5Qc2lMb2NhbFZhcmlhYmxlOnkKK0xpbmtlZExpc3Q8amF2YS5sYW5nLlN0cmluZyxqYXZhLmxhbmcuSW50ZWdlcj5cbm5ldwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3Q0MC9hZnRlci9UZXN0Lml0ZW1zIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3Q0MC9hZnRlci9UZXN0Lml0ZW1zCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2ZWMyZDIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDQwL2FmdGVyL1Rlc3QuaXRlbXMKQEAgLTAsMCArMSwyIEBACitMaW5rZWRMaXN0XG5Qc2lMb2NhbFZhcmlhYmxlOnkKK0xpbmtlZExpc3Rcbm5ldwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3Q0MC9hZnRlci90ZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDQwL2FmdGVyL3Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNWQxODM5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3Q0MC9hZnRlci90ZXN0LmphdmEKQEAgLTAsMCArMSwyNiBAQAorY2xhc3MgTGlua2VkTGlzdCA8VCwgRT4geworICAgIFQgdDsKKyAgICBFIGU7CisKKyAgICBMaW5rZWRMaXN0PEUsIFQ+IHU7CisKKyAgICBUIGdldCgpIHsKKyAgICAgICAgcmV0dXJuIHQ7CisgICAgfQorCisgICAgdm9pZCBzZXQoRSB0KSB7CisgICAgfQorfQorCitjbGFzcyBMaXN0TGlua2VkIDxFPiBleHRlbmRzIExpbmtlZExpc3Q8RSwgSW50ZWdlcj4geworfQorCitjbGFzcyBUZXN0IHsKKworICAgIHZvaWQgZigpIHsKKyAgICAgICAgTGlua2VkTGlzdCB5ID0gbmV3IExpbmtlZExpc3QoKTsKKworICAgICAgICB5LnUudCA9IG5ldyBJbnRlZ2VyKDMpOworICAgICAgICB5LnUuZSA9ICIiOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDQwL2JlZm9yZS90ZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDQwL2JlZm9yZS90ZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjVkMTgzOQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90NDAvYmVmb3JlL3Rlc3QuamF2YQpAQCAtMCwwICsxLDI2IEBACitjbGFzcyBMaW5rZWRMaXN0IDxULCBFPiB7CisgICAgVCB0OworICAgIEUgZTsKKworICAgIExpbmtlZExpc3Q8RSwgVD4gdTsKKworICAgIFQgZ2V0KCkgeworICAgICAgICByZXR1cm4gdDsKKyAgICB9CisKKyAgICB2b2lkIHNldChFIHQpIHsKKyAgICB9Cit9CisKK2NsYXNzIExpc3RMaW5rZWQgPEU+IGV4dGVuZHMgTGlua2VkTGlzdDxFLCBJbnRlZ2VyPiB7Cit9CisKK2NsYXNzIFRlc3QgeworCisgICAgdm9pZCBmKCkgeworICAgICAgICBMaW5rZWRMaXN0IHkgPSBuZXcgTGlua2VkTGlzdCgpOworCisgICAgICAgIHkudS50ID0gbmV3IEludGVnZXIoMyk7CisgICAgICAgIHkudS5lID0gIiI7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90NDEvYWZ0ZXIvVGVzdC4xLml0ZW1zIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3Q0MS9hZnRlci9UZXN0LjEuaXRlbXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2FhMjI5NwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90NDEvYWZ0ZXIvVGVzdC4xLml0ZW1zCkBAIC0wLDAgKzEsMyBAQAorTGlua2VkTGlzdDxqYXZhLmxhbmcuU3RyaW5nPlxuUHNpTG9jYWxWYXJpYWJsZTp4CitMaW5rZWRMaXN0PGphdmEubGFuZy5TdHJpbmc+XG5uZXcKK0xpbmtlZExpc3Q8amF2YS5sYW5nLlN0cmluZz5cbnBhcmFtZXRlciAwIG9mIGYKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90NDEvYWZ0ZXIvVGVzdC5pdGVtcyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90NDEvYWZ0ZXIvVGVzdC5pdGVtcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZjUxMTFiCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3Q0MS9hZnRlci9UZXN0Lml0ZW1zCkBAIC0wLDAgKzEsMyBAQAorTGlua2VkTGlzdFxuUHNpTG9jYWxWYXJpYWJsZTp4CitMaW5rZWRMaXN0XG5uZXcKK0xpbmtlZExpc3RcbnBhcmFtZXRlciAwIG9mIGYKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90NDEvYWZ0ZXIvdGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3Q0MS9hZnRlci90ZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2UxOGYxZAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90NDEvYWZ0ZXIvdGVzdC5qYXZhCkBAIC0wLDAgKzEsMjEgQEAKK2NsYXNzIExpbmtlZExpc3QgPFQ+IHsKKyAgICBUIHQ7CisKKyAgICBUIGdldCgpIHsKKyAgICAgICAgcmV0dXJuIHQ7CisgICAgfQorfQorCisKK2NsYXNzIFRlc3QgeworCisgICAgdm9pZCBmIChMaW5rZWRMaXN0IHgpeworICAgICAgICB4LnQgPSAiIjsKKyAgICB9CisKKyAgICB2b2lkIGYoKSB7CisgICAgICAgTGlua2VkTGlzdCB4ID0gbmV3IExpbmtlZExpc3QoKTsKKworICAgICAgIGYgKHgpOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDQxL2JlZm9yZS90ZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDQxL2JlZm9yZS90ZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2UxOGYxZAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90NDEvYmVmb3JlL3Rlc3QuamF2YQpAQCAtMCwwICsxLDIxIEBACitjbGFzcyBMaW5rZWRMaXN0IDxUPiB7CisgICAgVCB0OworCisgICAgVCBnZXQoKSB7CisgICAgICAgIHJldHVybiB0OworICAgIH0KK30KKworCitjbGFzcyBUZXN0IHsKKworICAgIHZvaWQgZiAoTGlua2VkTGlzdCB4KXsKKyAgICAgICAgeC50ID0gIiI7CisgICAgfQorCisgICAgdm9pZCBmKCkgeworICAgICAgIExpbmtlZExpc3QgeCA9IG5ldyBMaW5rZWRMaXN0KCk7CisKKyAgICAgICBmICh4KTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3Q0Mi9hZnRlci9UZXN0LjEuaXRlbXMgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDQyL2FmdGVyL1Rlc3QuMS5pdGVtcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYWEyMjk3Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3Q0Mi9hZnRlci9UZXN0LjEuaXRlbXMKQEAgLTAsMCArMSwzIEBACitMaW5rZWRMaXN0PGphdmEubGFuZy5TdHJpbmc+XG5Qc2lMb2NhbFZhcmlhYmxlOngKK0xpbmtlZExpc3Q8amF2YS5sYW5nLlN0cmluZz5cbm5ldworTGlua2VkTGlzdDxqYXZhLmxhbmcuU3RyaW5nPlxucGFyYW1ldGVyIDAgb2YgZgpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3Q0Mi9hZnRlci9UZXN0Lml0ZW1zIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3Q0Mi9hZnRlci9UZXN0Lml0ZW1zCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBmNTExMWIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDQyL2FmdGVyL1Rlc3QuaXRlbXMKQEAgLTAsMCArMSwzIEBACitMaW5rZWRMaXN0XG5Qc2lMb2NhbFZhcmlhYmxlOngKK0xpbmtlZExpc3Rcbm5ldworTGlua2VkTGlzdFxucGFyYW1ldGVyIDAgb2YgZgpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3Q0Mi9hZnRlci90ZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDQyL2FmdGVyL3Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZTI3OWE0Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3Q0Mi9hZnRlci90ZXN0LmphdmEKQEAgLTAsMCArMSwyMSBAQAorY2xhc3MgTGlua2VkTGlzdCA8VD4geworICAgIFQgdDsKKworICAgIFQgZ2V0KCkgeworICAgICAgICByZXR1cm4gdDsKKyAgICB9Cit9CisKKworY2xhc3MgVGVzdCB7CisKKyAgICB2b2lkIGYgKExpbmtlZExpc3QgeCl7CisgICAgICAgIHgudCA9ICIiOworICAgIH0KKworICAgIHZvaWQgZigpIHsKKyAgICAgICBMaW5rZWRMaXN0IHggPSBuZXcgTGlua2VkTGlzdCgpOworCisgICAgICAgZiAoeCk7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3Q0Mi9iZWZvcmUvdGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3Q0Mi9iZWZvcmUvdGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFlMjc5YTQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDQyL2JlZm9yZS90ZXN0LmphdmEKQEAgLTAsMCArMSwyMSBAQAorY2xhc3MgTGlua2VkTGlzdCA8VD4geworICAgIFQgdDsKKworICAgIFQgZ2V0KCkgeworICAgICAgICByZXR1cm4gdDsKKyAgICB9Cit9CisKKworY2xhc3MgVGVzdCB7CisKKyAgICB2b2lkIGYgKExpbmtlZExpc3QgeCl7CisgICAgICAgIHgudCA9ICIiOworICAgIH0KKworICAgIHZvaWQgZigpIHsKKyAgICAgICBMaW5rZWRMaXN0IHggPSBuZXcgTGlua2VkTGlzdCgpOworCisgICAgICAgZiAoeCk7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3Q0My9hZnRlci9UZXN0LjEuaXRlbXMgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDQzL2FmdGVyL1Rlc3QuMS5pdGVtcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZGQ5ZTUzCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3Q0My9hZnRlci9UZXN0LjEuaXRlbXMKQEAgLTAsMCArMSwyIEBACitMaW5rZWRMaXN0PGphdmEubGFuZy5JbnRlZ2VyPlxuUHNpTG9jYWxWYXJpYWJsZTp5CitMaW5rZWRMaXN0PGphdmEubGFuZy5JbnRlZ2VyPlxubmV3CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDQzL2FmdGVyL1Rlc3QuaXRlbXMgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDQzL2FmdGVyL1Rlc3QuaXRlbXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTZlYzJkMgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90NDMvYWZ0ZXIvVGVzdC5pdGVtcwpAQCAtMCwwICsxLDIgQEAKK0xpbmtlZExpc3RcblBzaUxvY2FsVmFyaWFibGU6eQorTGlua2VkTGlzdFxubmV3CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDQzL2FmdGVyL3Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90NDMvYWZ0ZXIvdGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVkNGUwZDgKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDQzL2FmdGVyL3Rlc3QuamF2YQpAQCAtMCwwICsxLDE3IEBACitjbGFzcyBMaW5rZWRMaXN0IDxUPiB7CisgICAgVCBlOworCisgICAgdm9pZCBzZXQoTGlua2VkTGlzdDxUPiB0KSB7CisgICAgICAgIGU9dC5lOworICAgIH0KK30KKworY2xhc3MgVGVzdCB7CisKKyAgICB2b2lkIGYoKSB7CisgICAgICAgIExpbmtlZExpc3QgeSA9IG5ldyBMaW5rZWRMaXN0KCk7CisgICAgICAgIExpbmtlZExpc3Q8SW50ZWdlcj4gej1udWxsOworCisgICAgICAgIHkuc2V0KHopOworICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90NDMvYmVmb3JlL3Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90NDMvYmVmb3JlL3Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZDRlMGQ4Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3Q0My9iZWZvcmUvdGVzdC5qYXZhCkBAIC0wLDAgKzEsMTcgQEAKK2NsYXNzIExpbmtlZExpc3QgPFQ+IHsKKyAgICBUIGU7CisKKyAgICB2b2lkIHNldChMaW5rZWRMaXN0PFQ+IHQpIHsKKyAgICAgICAgZT10LmU7CisgICAgfQorfQorCitjbGFzcyBUZXN0IHsKKworICAgIHZvaWQgZigpIHsKKyAgICAgICAgTGlua2VkTGlzdCB5ID0gbmV3IExpbmtlZExpc3QoKTsKKyAgICAgICAgTGlua2VkTGlzdDxJbnRlZ2VyPiB6PW51bGw7CisKKyAgICAgICAgeS5zZXQoeik7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3Q0NC9hZnRlci9UZXN0LjEuaXRlbXMgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDQ0L2FmdGVyL1Rlc3QuMS5pdGVtcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZGQ5ZTUzCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3Q0NC9hZnRlci9UZXN0LjEuaXRlbXMKQEAgLTAsMCArMSwyIEBACitMaW5rZWRMaXN0PGphdmEubGFuZy5JbnRlZ2VyPlxuUHNpTG9jYWxWYXJpYWJsZTp5CitMaW5rZWRMaXN0PGphdmEubGFuZy5JbnRlZ2VyPlxubmV3CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDQ0L2FmdGVyL1Rlc3QuaXRlbXMgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDQ0L2FmdGVyL1Rlc3QuaXRlbXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTZlYzJkMgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90NDQvYWZ0ZXIvVGVzdC5pdGVtcwpAQCAtMCwwICsxLDIgQEAKK0xpbmtlZExpc3RcblBzaUxvY2FsVmFyaWFibGU6eQorTGlua2VkTGlzdFxubmV3CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDQ0L2FmdGVyL3Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90NDQvYWZ0ZXIvdGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJjNTBjZmUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDQ0L2FmdGVyL3Rlc3QuamF2YQpAQCAtMCwwICsxLDE5IEBACitjbGFzcyBMaW5rZWRMaXN0IDxUPiB7CisgICAgVCBlOworCisgICAgdm9pZCBzZXQoTGlua2VkTGlzdDxUPiB0KSB7CisgICAgICAgIGU9dC5lOworICAgIH0KK30KKworY2xhc3MgTGlzdEludCBleHRlbmRzIExpbmtlZExpc3Q8SW50ZWdlcj57fQorCitjbGFzcyBUZXN0IHsKKworICAgIHZvaWQgZigpIHsKKyAgICAgICAgTGlua2VkTGlzdCB5ID0gbmV3IExpbmtlZExpc3QoKTsKKyAgICAgICAgTGlzdEludCB6PW51bGw7CisKKyAgICAgICAgeS5zZXQoeik7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3Q0NC9iZWZvcmUvdGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3Q0NC9iZWZvcmUvdGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJjNTBjZmUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDQ0L2JlZm9yZS90ZXN0LmphdmEKQEAgLTAsMCArMSwxOSBAQAorY2xhc3MgTGlua2VkTGlzdCA8VD4geworICAgIFQgZTsKKworICAgIHZvaWQgc2V0KExpbmtlZExpc3Q8VD4gdCkgeworICAgICAgICBlPXQuZTsKKyAgICB9Cit9CisKK2NsYXNzIExpc3RJbnQgZXh0ZW5kcyBMaW5rZWRMaXN0PEludGVnZXI+e30KKworY2xhc3MgVGVzdCB7CisKKyAgICB2b2lkIGYoKSB7CisgICAgICAgIExpbmtlZExpc3QgeSA9IG5ldyBMaW5rZWRMaXN0KCk7CisgICAgICAgIExpc3RJbnQgej1udWxsOworCisgICAgICAgIHkuc2V0KHopOworICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90NDUvYWZ0ZXIvVGVzdC4xLml0ZW1zIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3Q0NS9hZnRlci9UZXN0LjEuaXRlbXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGRkOWU1MwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90NDUvYWZ0ZXIvVGVzdC4xLml0ZW1zCkBAIC0wLDAgKzEsMiBAQAorTGlua2VkTGlzdDxqYXZhLmxhbmcuSW50ZWdlcj5cblBzaUxvY2FsVmFyaWFibGU6eQorTGlua2VkTGlzdDxqYXZhLmxhbmcuSW50ZWdlcj5cbm5ldwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3Q0NS9hZnRlci9UZXN0Lml0ZW1zIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3Q0NS9hZnRlci9UZXN0Lml0ZW1zCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2ZWMyZDIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDQ1L2FmdGVyL1Rlc3QuaXRlbXMKQEAgLTAsMCArMSwyIEBACitMaW5rZWRMaXN0XG5Qc2lMb2NhbFZhcmlhYmxlOnkKK0xpbmtlZExpc3Rcbm5ldwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3Q0NS9hZnRlci90ZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDQ1L2FmdGVyL3Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMDIwNzU0Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3Q0NS9hZnRlci90ZXN0LmphdmEKQEAgLTAsMCArMSwxNiBAQAorY2xhc3MgTGlua2VkTGlzdCA8VD4geworICAgIFQgZTsKKworICAgIExpbmtlZExpc3Q8VD4gZ2V0KCkgeworICAgICAgICByZXR1cm4gdGhpczsKKyAgICB9Cit9CisKK2NsYXNzIFRlc3QgeworCisgICAgdm9pZCBmKCkgeworICAgICAgICBMaW5rZWRMaXN0IHkgPSBuZXcgTGlua2VkTGlzdCgpOworCisgICAgICAgICh5LmdldCgpKS5lID0gbmV3IEludGVnZXIoMyk7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3Q0NS9iZWZvcmUvdGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3Q0NS9iZWZvcmUvdGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMwMjA3NTQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDQ1L2JlZm9yZS90ZXN0LmphdmEKQEAgLTAsMCArMSwxNiBAQAorY2xhc3MgTGlua2VkTGlzdCA8VD4geworICAgIFQgZTsKKworICAgIExpbmtlZExpc3Q8VD4gZ2V0KCkgeworICAgICAgICByZXR1cm4gdGhpczsKKyAgICB9Cit9CisKK2NsYXNzIFRlc3QgeworCisgICAgdm9pZCBmKCkgeworICAgICAgICBMaW5rZWRMaXN0IHkgPSBuZXcgTGlua2VkTGlzdCgpOworCisgICAgICAgICh5LmdldCgpKS5lID0gbmV3IEludGVnZXIoMyk7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3Q0Ni9hZnRlci9UZXN0LjEuaXRlbXMgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDQ2L2FmdGVyL1Rlc3QuMS5pdGVtcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZTc5ZmY1Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3Q0Ni9hZnRlci9UZXN0LjEuaXRlbXMKQEAgLTAsMCArMSBAQAorTGlua2VkTGlzdDxqYXZhLmxhbmcuU3RyaW5nPlxucmV0dXJuIG9mIGYKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90NDYvYWZ0ZXIvVGVzdC5pdGVtcyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90NDYvYWZ0ZXIvVGVzdC5pdGVtcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNTljMzY4Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3Q0Ni9hZnRlci9UZXN0Lml0ZW1zCkBAIC0wLDAgKzEgQEAKK0xpbmtlZExpc3RcbnJldHVybiBvZiBmCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDQ2L2FmdGVyL3Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90NDYvYWZ0ZXIvdGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg0ZjRjNDgKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDQ2L2FmdGVyL3Rlc3QuamF2YQpAQCAtMCwwICsxLDE4IEBACitjbGFzcyBMaW5rZWRMaXN0IDxUPiB7CisgICAgVCBlOworCisgICAgTGlua2VkTGlzdDxUPiBnZXQoKSB7CisgICAgICAgIHJldHVybiB0aGlzOworICAgIH0KK30KKworY2xhc3MgVGVzdCB7CisKKyAgICBMaW5rZWRMaXN0IGYoKSB7CisgICAgICAgIHJldHVybiBudWxsOworICAgIH0KKworICAgIHZvaWQgZm9vKCl7CisgICAgICAgIGYoKS5lID0gIiI7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3Q0Ni9iZWZvcmUvdGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3Q0Ni9iZWZvcmUvdGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg0ZjRjNDgKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDQ2L2JlZm9yZS90ZXN0LmphdmEKQEAgLTAsMCArMSwxOCBAQAorY2xhc3MgTGlua2VkTGlzdCA8VD4geworICAgIFQgZTsKKworICAgIExpbmtlZExpc3Q8VD4gZ2V0KCkgeworICAgICAgICByZXR1cm4gdGhpczsKKyAgICB9Cit9CisKK2NsYXNzIFRlc3QgeworCisgICAgTGlua2VkTGlzdCBmKCkgeworICAgICAgICByZXR1cm4gbnVsbDsKKyAgICB9CisKKyAgICB2b2lkIGZvbygpeworICAgICAgICBmKCkuZSA9ICIiOworICAgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90NDcvYWZ0ZXIvVGVzdC4xLml0ZW1zIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3Q0Ny9hZnRlci9UZXN0LjEuaXRlbXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGJmYjgyNgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90NDcvYWZ0ZXIvVGVzdC4xLml0ZW1zCkBAIC0wLDAgKzEgQEAKK0xpbmtlZExpc3Q8amF2YS5sYW5nLkludGVnZXI+XG5yZXR1cm4gb2YgZgpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3Q0Ny9hZnRlci9UZXN0Lml0ZW1zIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3Q0Ny9hZnRlci9UZXN0Lml0ZW1zCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE1OWMzNjgKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDQ3L2FmdGVyL1Rlc3QuaXRlbXMKQEAgLTAsMCArMSBAQAorTGlua2VkTGlzdFxucmV0dXJuIG9mIGYKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90NDcvYWZ0ZXIvdGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3Q0Ny9hZnRlci90ZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWIyNzM4ZgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90NDcvYWZ0ZXIvdGVzdC5qYXZhCkBAIC0wLDAgKzEsMTggQEAKK2NsYXNzIExpbmtlZExpc3QgPFQ+IHsKKyAgICBUIGU7CisKKyAgICBMaW5rZWRMaXN0PFQ+IGdldCgpIHsKKyAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgfQorfQorCitjbGFzcyBUZXN0IHsKKworICAgIExpbmtlZExpc3QgZigpIHsKKyAgICAgICAgcmV0dXJuIG51bGw7CisgICAgfQorCisgICAgdm9pZCBmb28oKXsKKyAgICAgICAgTGlua2VkTGlzdDxJbnRlZ2VyPiB4ID0gKExpbmtlZExpc3Q8SW50ZWdlcj4pIGYoKTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDQ3L2JlZm9yZS90ZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDQ3L2JlZm9yZS90ZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWIyNzM4ZgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90NDcvYmVmb3JlL3Rlc3QuamF2YQpAQCAtMCwwICsxLDE4IEBACitjbGFzcyBMaW5rZWRMaXN0IDxUPiB7CisgICAgVCBlOworCisgICAgTGlua2VkTGlzdDxUPiBnZXQoKSB7CisgICAgICAgIHJldHVybiB0aGlzOworICAgIH0KK30KKworY2xhc3MgVGVzdCB7CisKKyAgICBMaW5rZWRMaXN0IGYoKSB7CisgICAgICAgIHJldHVybiBudWxsOworICAgIH0KKworICAgIHZvaWQgZm9vKCl7CisgICAgICAgIExpbmtlZExpc3Q8SW50ZWdlcj4geCA9IChMaW5rZWRMaXN0PEludGVnZXI+KSBmKCk7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3Q0OC9hZnRlci9UZXN0LjEuaXRlbXMgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDQ4L2FmdGVyL1Rlc3QuMS5pdGVtcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NTI1NTQxCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3Q0OC9hZnRlci9UZXN0LjEuaXRlbXMKQEAgLTAsMCArMSwzIEBACitMaW5rZWRMaXN0PGphdmEuaW8uU2VyaWFsaXphYmxlPlxuUHNpTG9jYWxWYXJpYWJsZTp5CitMaW5rZWRMaXN0PGphdmEuaW8uU2VyaWFsaXphYmxlPlxubmV3CitMaW5rZWRMaXN0PGphdmEuaW8uU2VyaWFsaXphYmxlPlxucGFyYW1ldGVyIDAgb2YgZgpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3Q0OC9hZnRlci9UZXN0Lml0ZW1zIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3Q0OC9hZnRlci9UZXN0Lml0ZW1zCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU1ODA2MjUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDQ4L2FmdGVyL1Rlc3QuaXRlbXMKQEAgLTAsMCArMSwzIEBACitMaW5rZWRMaXN0XG5Qc2lMb2NhbFZhcmlhYmxlOnkKK0xpbmtlZExpc3Rcbm5ldworTGlua2VkTGlzdFxucGFyYW1ldGVyIDAgb2YgZgpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3Q0OC9hZnRlci90ZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDQ4L2FmdGVyL3Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOWU5ZGY2Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3Q0OC9hZnRlci90ZXN0LmphdmEKQEAgLTAsMCArMSwyMCBAQAorY2xhc3MgTGlua2VkTGlzdCA8VD4geworICAgIFQgZTsKKworICAgIExpbmtlZExpc3Q8VD4gZ2V0KCkgeworICAgICAgICByZXR1cm4gdGhpczsKKyAgICB9Cit9CisKK2NsYXNzIFRlc3QgeworCisgICAgdm9pZCBmKExpbmtlZExpc3QgeCkgeworICAgICAgICB4LmUgPSAiIjsKKyAgICB9CisKKyAgICB2b2lkIGZvbygpeworICAgICAgICBMaW5rZWRMaXN0IHkgPSBuZXcgTGlua2VkTGlzdCgpOworICAgICAgICB5LmUgPSBuZXcgSW50ZWdlcigzKTsKKyAgICAgICAgZih5KTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3Q0OC9iZWZvcmUvdGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3Q0OC9iZWZvcmUvdGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU5ZTlkZjYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDQ4L2JlZm9yZS90ZXN0LmphdmEKQEAgLTAsMCArMSwyMCBAQAorY2xhc3MgTGlua2VkTGlzdCA8VD4geworICAgIFQgZTsKKworICAgIExpbmtlZExpc3Q8VD4gZ2V0KCkgeworICAgICAgICByZXR1cm4gdGhpczsKKyAgICB9Cit9CisKK2NsYXNzIFRlc3QgeworCisgICAgdm9pZCBmKExpbmtlZExpc3QgeCkgeworICAgICAgICB4LmUgPSAiIjsKKyAgICB9CisKKyAgICB2b2lkIGZvbygpeworICAgICAgICBMaW5rZWRMaXN0IHkgPSBuZXcgTGlua2VkTGlzdCgpOworICAgICAgICB5LmUgPSBuZXcgSW50ZWdlcigzKTsKKyAgICAgICAgZih5KTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3Q0OS9hZnRlci9UZXN0LjEuaXRlbXMgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDQ5L2FmdGVyL1Rlc3QuMS5pdGVtcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZmQwZTE4Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3Q0OS9hZnRlci9UZXN0LjEuaXRlbXMKQEAgLTAsMCArMSBAQAorTGlua2VkTGlzdDxqYXZhLmxhbmcuSW50ZWdlcj5cbnBhcmFtZXRlciAwIG9mIFRlc3QKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90NDkvYWZ0ZXIvVGVzdC5pdGVtcyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90NDkvYWZ0ZXIvVGVzdC5pdGVtcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YzJlYTE5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3Q0OS9hZnRlci9UZXN0Lml0ZW1zCkBAIC0wLDAgKzEgQEAKK0xpbmtlZExpc3RcbnBhcmFtZXRlciAwIG9mIFRlc3QKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90NDkvYWZ0ZXIvdGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3Q0OS9hZnRlci90ZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTMwM2E5MgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90NDkvYWZ0ZXIvdGVzdC5qYXZhCkBAIC0wLDAgKzEsMTcgQEAKK2NsYXNzIExpbmtlZExpc3QgPFQ+IHsKKyAgICBUIGU7CisKKyAgICBMaW5rZWRMaXN0PFQ+IGdldCgpIHsKKyAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgfQorfQorCitjbGFzcyBUZXN0IHsKKworICAgIFRlc3QoTGlua2VkTGlzdCB4KXsKKyAgICB9CisKKyAgICB2b2lkIGZvbygpeworICAgICAgVGVzdCB4ID0gbmV3IFRlc3QobmV3IExpbmtlZExpc3Q8SW50ZWdlcj4oKSk7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90NDkvYmVmb3JlL3Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90NDkvYmVmb3JlL3Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MzAzYTkyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3Q0OS9iZWZvcmUvdGVzdC5qYXZhCkBAIC0wLDAgKzEsMTcgQEAKK2NsYXNzIExpbmtlZExpc3QgPFQ+IHsKKyAgICBUIGU7CisKKyAgICBMaW5rZWRMaXN0PFQ+IGdldCgpIHsKKyAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgfQorfQorCitjbGFzcyBUZXN0IHsKKworICAgIFRlc3QoTGlua2VkTGlzdCB4KXsKKyAgICB9CisKKyAgICB2b2lkIGZvbygpeworICAgICAgVGVzdCB4ID0gbmV3IFRlc3QobmV3IExpbmtlZExpc3Q8SW50ZWdlcj4oKSk7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90NTAvYWZ0ZXIvVGVzdC4xLml0ZW1zIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3Q1MC9hZnRlci9UZXN0LjEuaXRlbXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGZhZmQ5NwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90NTAvYWZ0ZXIvVGVzdC4xLml0ZW1zCkBAIC0wLDAgKzEsMyBAQAorTGlua2VkTGlzdDxqYXZhLmxhbmcuSW50ZWdlcj5cblBzaUxvY2FsVmFyaWFibGU6eQorTGlua2VkTGlzdDxqYXZhLmxhbmcuSW50ZWdlcj5cbm5ldworTGlua2VkTGlzdDxqYXZhLmxhbmcuSW50ZWdlcj5cbnBhcmFtZXRlciAwIG9mIFRlc3QKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90NTAvYWZ0ZXIvVGVzdC5pdGVtcyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90NTAvYWZ0ZXIvVGVzdC5pdGVtcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNzI3Y2M3Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3Q1MC9hZnRlci9UZXN0Lml0ZW1zCkBAIC0wLDAgKzEsMyBAQAorTGlua2VkTGlzdFxuUHNpTG9jYWxWYXJpYWJsZTp5CitMaW5rZWRMaXN0XG5uZXcKK0xpbmtlZExpc3RcbnBhcmFtZXRlciAwIG9mIFRlc3QKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90NTAvYWZ0ZXIvdGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3Q1MC9hZnRlci90ZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjllOWE0ZgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90NTAvYWZ0ZXIvdGVzdC5qYXZhCkBAIC0wLDAgKzEsMjEgQEAKK2NsYXNzIExpbmtlZExpc3QgPFQ+IHsKKyAgICBUIGU7CisKKyAgICBMaW5rZWRMaXN0PFQ+IGdldCgpIHsKKyAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgfQorfQorCitjbGFzcyBUZXN0IHsKKworICAgIFRlc3QoTGlua2VkTGlzdCB4KXsKKyAgICB9CisKKyAgICB2b2lkIGZvbygpeworICAgICAgTGlua2VkTGlzdCB5ID0gbmV3IExpbmtlZExpc3QoKTsKKworICAgICAgVGVzdCB4ID0gbmV3IFRlc3QoeSk7CisKKyAgICAgIHkuZSA9IG5ldyBJbnRlZ2VyKDMpOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDUwL2JlZm9yZS90ZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDUwL2JlZm9yZS90ZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjllOWE0ZgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90NTAvYmVmb3JlL3Rlc3QuamF2YQpAQCAtMCwwICsxLDIxIEBACitjbGFzcyBMaW5rZWRMaXN0IDxUPiB7CisgICAgVCBlOworCisgICAgTGlua2VkTGlzdDxUPiBnZXQoKSB7CisgICAgICAgIHJldHVybiB0aGlzOworICAgIH0KK30KKworY2xhc3MgVGVzdCB7CisKKyAgICBUZXN0KExpbmtlZExpc3QgeCl7CisgICAgfQorCisgICAgdm9pZCBmb28oKXsKKyAgICAgIExpbmtlZExpc3QgeSA9IG5ldyBMaW5rZWRMaXN0KCk7CisKKyAgICAgIFRlc3QgeCA9IG5ldyBUZXN0KHkpOworCisgICAgICB5LmUgPSBuZXcgSW50ZWdlcigzKTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3Q1MS9hZnRlci9UZXN0LjEuaXRlbXMgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDUxL2FmdGVyL1Rlc3QuMS5pdGVtcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMjQyMzQ3Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3Q1MS9hZnRlci9UZXN0LjEuaXRlbXMKQEAgLTAsMCArMSwyIEBACitMaW5rZWRMaXN0XG5Qc2lMb2NhbFZhcmlhYmxlOnkKK0xpbmtlZExpc3RcbnBhcmFtZXRlciAwIG9mIFRlc3QKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90NTEvYWZ0ZXIvVGVzdC5pdGVtcyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90NTEvYWZ0ZXIvVGVzdC5pdGVtcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMjQyMzQ3Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3Q1MS9hZnRlci9UZXN0Lml0ZW1zCkBAIC0wLDAgKzEsMiBAQAorTGlua2VkTGlzdFxuUHNpTG9jYWxWYXJpYWJsZTp5CitMaW5rZWRMaXN0XG5wYXJhbWV0ZXIgMCBvZiBUZXN0CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDUxL2FmdGVyL3Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90NTEvYWZ0ZXIvdGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRiZDdkMjQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDUxL2FmdGVyL3Rlc3QuamF2YQpAQCAtMCwwICsxLDE5IEBACitjbGFzcyBMaW5rZWRMaXN0IDxUPiB7CisgICAgVCBlOworCisgICAgTGlua2VkTGlzdDxUPiBnZXQoKSB7CisgICAgICAgIHJldHVybiB0aGlzOworICAgIH0KK30KKworY2xhc3MgVGVzdCB7CisKKyAgICBUZXN0KExpbmtlZExpc3QgeCl7CisgICAgfQorCisgICAgdm9pZCBmb28oKXsKKyAgICAgIExpbmtlZExpc3QgeSA9IG51bGw7CisKKyAgICAgIFRlc3QgeCA9IG5ldyBUZXN0KG51bGwpOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDUxL2JlZm9yZS90ZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDUxL2JlZm9yZS90ZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGJkN2QyNAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90NTEvYmVmb3JlL3Rlc3QuamF2YQpAQCAtMCwwICsxLDE5IEBACitjbGFzcyBMaW5rZWRMaXN0IDxUPiB7CisgICAgVCBlOworCisgICAgTGlua2VkTGlzdDxUPiBnZXQoKSB7CisgICAgICAgIHJldHVybiB0aGlzOworICAgIH0KK30KKworY2xhc3MgVGVzdCB7CisKKyAgICBUZXN0KExpbmtlZExpc3QgeCl7CisgICAgfQorCisgICAgdm9pZCBmb28oKXsKKyAgICAgIExpbmtlZExpc3QgeSA9IG51bGw7CisKKyAgICAgIFRlc3QgeCA9IG5ldyBUZXN0KG51bGwpOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDUyL2FmdGVyL1Rlc3QuMS5pdGVtcyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90NTIvYWZ0ZXIvVGVzdC4xLml0ZW1zCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNlYzRiYmYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDUyL2FmdGVyL1Rlc3QuMS5pdGVtcwpAQCAtMCwwICsxIEBACitMaW5rZWRMaXN0XG5Qc2lMb2NhbFZhcmlhYmxlOnkKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90NTIvYWZ0ZXIvVGVzdC5pdGVtcyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90NTIvYWZ0ZXIvVGVzdC5pdGVtcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZWM0YmJmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3Q1Mi9hZnRlci9UZXN0Lml0ZW1zCkBAIC0wLDAgKzEgQEAKK0xpbmtlZExpc3RcblBzaUxvY2FsVmFyaWFibGU6eQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3Q1Mi9hZnRlci90ZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDUyL2FmdGVyL3Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYTkzZGFiCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3Q1Mi9hZnRlci90ZXN0LmphdmEKQEAgLTAsMCArMSwyMSBAQAorY2xhc3MgTGlua2VkTGlzdCA8VD4geworICAgIFQgZTsKKworICAgIExpbmtlZExpc3Q8VD4gZ2V0KCkgeworICAgICAgICByZXR1cm4gdGhpczsKKyAgICB9Cit9CisKK2NsYXNzIEF1eHsKKyAgTGlua2VkTGlzdCB4OworfQorCitjbGFzcyBUZXN0IHsKKyAgICBBdXggYSA9IG51bGw7CisKKyAgICB2b2lkIGZvbygpeworICAgICAgTGlua2VkTGlzdCB5ID0gYS54OworCisgICAgICB5LmUgPSAiIjsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3Q1Mi9iZWZvcmUvdGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3Q1Mi9iZWZvcmUvdGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRhOTNkYWIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDUyL2JlZm9yZS90ZXN0LmphdmEKQEAgLTAsMCArMSwyMSBAQAorY2xhc3MgTGlua2VkTGlzdCA8VD4geworICAgIFQgZTsKKworICAgIExpbmtlZExpc3Q8VD4gZ2V0KCkgeworICAgICAgICByZXR1cm4gdGhpczsKKyAgICB9Cit9CisKK2NsYXNzIEF1eHsKKyAgTGlua2VkTGlzdCB4OworfQorCitjbGFzcyBUZXN0IHsKKyAgICBBdXggYSA9IG51bGw7CisKKyAgICB2b2lkIGZvbygpeworICAgICAgTGlua2VkTGlzdCB5ID0gYS54OworCisgICAgICB5LmUgPSAiIjsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3Q1My9hZnRlci9UZXN0LjEuaXRlbXMgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDUzL2FmdGVyL1Rlc3QuMS5pdGVtcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZjY5ZWMxCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3Q1My9hZnRlci9UZXN0LjEuaXRlbXMKQEAgLTAsMCArMSBAQAorTGlua2VkTGlzdDxqYXZhLmxhbmcuT2JqZWN0PlxuUHNpTG9jYWxWYXJpYWJsZTp5CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDUzL2FmdGVyL1Rlc3QuaXRlbXMgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDUzL2FmdGVyL1Rlc3QuaXRlbXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2VjNGJiZgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90NTMvYWZ0ZXIvVGVzdC5pdGVtcwpAQCAtMCwwICsxIEBACitMaW5rZWRMaXN0XG5Qc2lMb2NhbFZhcmlhYmxlOnkKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90NTMvYWZ0ZXIvdGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3Q1My9hZnRlci90ZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDRhNWY0YQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90NTMvYWZ0ZXIvdGVzdC5qYXZhCkBAIC0wLDAgKzEsMjEgQEAKK2NsYXNzIExpbmtlZExpc3QgPFQ+IHsKKyAgICBUIGU7CisKKyAgICBMaW5rZWRMaXN0PFQ+IGdldCgpIHsKKyAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgfQorfQorCitjbGFzcyBBdXh7CisgIExpbmtlZExpc3Q8T2JqZWN0PiB4OworfQorCitjbGFzcyBUZXN0IHsKKyAgICBBdXggYSA9IG51bGw7CisKKyAgICB2b2lkIGZvbygpeworICAgICAgTGlua2VkTGlzdCB5ID0gYS54OworCisgICAgICB5LmUgPSAiIjsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3Q1My9iZWZvcmUvdGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3Q1My9iZWZvcmUvdGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ0YTVmNGEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDUzL2JlZm9yZS90ZXN0LmphdmEKQEAgLTAsMCArMSwyMSBAQAorY2xhc3MgTGlua2VkTGlzdCA8VD4geworICAgIFQgZTsKKworICAgIExpbmtlZExpc3Q8VD4gZ2V0KCkgeworICAgICAgICByZXR1cm4gdGhpczsKKyAgICB9Cit9CisKK2NsYXNzIEF1eHsKKyAgTGlua2VkTGlzdDxPYmplY3Q+IHg7Cit9CisKK2NsYXNzIFRlc3QgeworICAgIEF1eCBhID0gbnVsbDsKKworICAgIHZvaWQgZm9vKCl7CisgICAgICBMaW5rZWRMaXN0IHkgPSBhLng7CisKKyAgICAgIHkuZSA9ICIiOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDU0L2FmdGVyL1Rlc3QuMS5pdGVtcyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90NTQvYWZ0ZXIvVGVzdC4xLml0ZW1zCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM5NGEyNjEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDU0L2FmdGVyL1Rlc3QuMS5pdGVtcwpAQCAtMCwwICsxIEBACitMaW5rZWRMaXN0XG5Qc2lGaWVsZDp4CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDU0L2FmdGVyL1Rlc3QuaXRlbXMgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDU0L2FmdGVyL1Rlc3QuaXRlbXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzk0YTI2MQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90NTQvYWZ0ZXIvVGVzdC5pdGVtcwpAQCAtMCwwICsxIEBACitMaW5rZWRMaXN0XG5Qc2lGaWVsZDp4CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDU0L2FmdGVyL3Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90NTQvYWZ0ZXIvdGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFlYWQzYTgKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDU0L2FmdGVyL3Rlc3QuamF2YQpAQCAtMCwwICsxLDE1IEBACitjbGFzcyBMaW5rZWRMaXN0IDxUPiB7CisgICAgVCBlOworCisgICAgTGlua2VkTGlzdDxUPiBnZXQoKSB7CisgICAgICAgIHJldHVybiB0aGlzOworICAgIH0KK30KKworY2xhc3MgVGVzdCB7CisgIExpbmtlZExpc3QgeDsKKworICBUZXN0KFRlc3QgeSl7CisgICAgIHggPSB5Lng7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDU0L2JlZm9yZS90ZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDU0L2JlZm9yZS90ZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWVhZDNhOAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90NTQvYmVmb3JlL3Rlc3QuamF2YQpAQCAtMCwwICsxLDE1IEBACitjbGFzcyBMaW5rZWRMaXN0IDxUPiB7CisgICAgVCBlOworCisgICAgTGlua2VkTGlzdDxUPiBnZXQoKSB7CisgICAgICAgIHJldHVybiB0aGlzOworICAgIH0KK30KKworY2xhc3MgVGVzdCB7CisgIExpbmtlZExpc3QgeDsKKworICBUZXN0KFRlc3QgeSl7CisgICAgIHggPSB5Lng7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDU1L2FmdGVyL1Rlc3QuMS5pdGVtcyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90NTUvYWZ0ZXIvVGVzdC4xLml0ZW1zCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI3ZjQ2YTIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDU1L2FmdGVyL1Rlc3QuMS5pdGVtcwpAQCAtMCwwICsxIEBACitMaW5rZWRMaXN0PGphdmEubGFuZy5JbnRlZ2VyLGphdmEubGFuZy5TdHJpbmc+XG5Qc2lGaWVsZDp4CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDU1L2FmdGVyL1Rlc3QuaXRlbXMgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDU1L2FmdGVyL1Rlc3QuaXRlbXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzk0YTI2MQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90NTUvYWZ0ZXIvVGVzdC5pdGVtcwpAQCAtMCwwICsxIEBACitMaW5rZWRMaXN0XG5Qc2lGaWVsZDp4CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDU1L2FmdGVyL3Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90NTUvYWZ0ZXIvdGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBlOTgxNGUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDU1L2FmdGVyL3Rlc3QuamF2YQpAQCAtMCwwICsxLDE3IEBACitjbGFzcyBMaW5rZWRMaXN0IDxULCBFPiB7CisgICAgVCB0OworICAgIEUgZTsKKworICAgIExpbmtlZExpc3Q8RSwgVD4gZ2V0KCkgeworICAgICAgICByZXR1cm4gdGhpczsKKyAgICB9Cit9CisKK2NsYXNzIFRlc3QgeworICBMaW5rZWRMaXN0IHg7CisKKyAgdm9pZCBmb28oKXsKKyAgICB4LmdldCgpLnQgPSAiIjsKKyAgICB4LmdldCgpLmUgPSBuZXcgSW50ZWdlcigzKTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90NTUvYmVmb3JlL3Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90NTUvYmVmb3JlL3Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZTk4MTRlCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3Q1NS9iZWZvcmUvdGVzdC5qYXZhCkBAIC0wLDAgKzEsMTcgQEAKK2NsYXNzIExpbmtlZExpc3QgPFQsIEU+IHsKKyAgICBUIHQ7CisgICAgRSBlOworCisgICAgTGlua2VkTGlzdDxFLCBUPiBnZXQoKSB7CisgICAgICAgIHJldHVybiB0aGlzOworICAgIH0KK30KKworY2xhc3MgVGVzdCB7CisgIExpbmtlZExpc3QgeDsKKworICB2b2lkIGZvbygpeworICAgIHguZ2V0KCkudCA9ICIiOworICAgIHguZ2V0KCkuZSA9IG5ldyBJbnRlZ2VyKDMpOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3Q1Ni9hZnRlci9UZXN0LjEuaXRlbXMgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDU2L2FmdGVyL1Rlc3QuMS5pdGVtcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNDNlMWUwCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3Q1Ni9hZnRlci9UZXN0LjEuaXRlbXMKQEAgLTAsMCArMSwzIEBACitMaW5rZWRMaXN0PExpbmtlZExpc3Q8amF2YS5pby5TZXJpYWxpemFibGU+PlxuUHNpTG9jYWxWYXJpYWJsZTp4CitMaW5rZWRMaXN0PGphdmEuaW8uU2VyaWFsaXphYmxlPlxuUHNpTG9jYWxWYXJpYWJsZTp5CitMaW5rZWRMaXN0PGphdmEuaW8uU2VyaWFsaXphYmxlPlxuUHNpTG9jYWxWYXJpYWJsZTp6CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDU2L2FmdGVyL1Rlc3QuaXRlbXMgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDU2L2FmdGVyL1Rlc3QuaXRlbXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGM2ODdiOAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90NTYvYWZ0ZXIvVGVzdC5pdGVtcwpAQCAtMCwwICsxLDMgQEAKK0xpbmtlZExpc3Q8TGlua2VkTGlzdD5cblBzaUxvY2FsVmFyaWFibGU6eAorTGlua2VkTGlzdFxuUHNpTG9jYWxWYXJpYWJsZTp5CitMaW5rZWRMaXN0XG5Qc2lMb2NhbFZhcmlhYmxlOnoKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90NTYvYWZ0ZXIvdGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3Q1Ni9hZnRlci90ZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmYzOGI2NwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90NTYvYWZ0ZXIvdGVzdC5qYXZhCkBAIC0wLDAgKzEsMjggQEAKK2NsYXNzIExpbmtlZExpc3QgPFQ+IHsKKyAgICBUIGU7CisKKyAgICBUIGdldCgpIHsKKyAgICAgICAgcmV0dXJuIGU7CisgICAgfQorCisgICAgdm9pZCBzZXQoVCB0KSB7CisKKyAgICB9Cit9CisKKworCitjbGFzcyBUZXN0IHsKKworICAgIHZvaWQgZm9vKCkgeworICAgICAgICBMaW5rZWRMaXN0PExpbmtlZExpc3Q+IHggPSBudWxsOworICAgICAgICBMaW5rZWRMaXN0IHkgPSBudWxsOworICAgICAgICBMaW5rZWRMaXN0IHogPSBudWxsOworCisgICAgICAgIHkgPSB4LmdldCgpOworICAgICAgICB6ID0geC5nZXQoKTsKKworICAgICAgICB5LnNldChuZXcgSW50ZWdlcigzKSk7CisgICAgICAgIHouc2V0KCIiKTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3Q1Ni9iZWZvcmUvdGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3Q1Ni9iZWZvcmUvdGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJmMzhiNjcKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDU2L2JlZm9yZS90ZXN0LmphdmEKQEAgLTAsMCArMSwyOCBAQAorY2xhc3MgTGlua2VkTGlzdCA8VD4geworICAgIFQgZTsKKworICAgIFQgZ2V0KCkgeworICAgICAgICByZXR1cm4gZTsKKyAgICB9CisKKyAgICB2b2lkIHNldChUIHQpIHsKKworICAgIH0KK30KKworCisKK2NsYXNzIFRlc3QgeworCisgICAgdm9pZCBmb28oKSB7CisgICAgICAgIExpbmtlZExpc3Q8TGlua2VkTGlzdD4geCA9IG51bGw7CisgICAgICAgIExpbmtlZExpc3QgeSA9IG51bGw7CisgICAgICAgIExpbmtlZExpc3QgeiA9IG51bGw7CisKKyAgICAgICAgeSA9IHguZ2V0KCk7CisgICAgICAgIHogPSB4LmdldCgpOworCisgICAgICAgIHkuc2V0KG5ldyBJbnRlZ2VyKDMpKTsKKyAgICAgICAgei5zZXQoIiIpOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDU3L2FmdGVyL1Rlc3QuMS5pdGVtcyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90NTcvYWZ0ZXIvVGVzdC4xLml0ZW1zCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI4OGNkNjIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDU3L2FmdGVyL1Rlc3QuMS5pdGVtcwpAQCAtMCwwICsxIEBACitDb2xsPGphdmEubGFuZy5TdHJpbmcsamF2YS5sYW5nLkludGVnZXI+XG5Qc2lMb2NhbFZhcmlhYmxlOngKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90NTcvYWZ0ZXIvVGVzdC5pdGVtcyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90NTcvYWZ0ZXIvVGVzdC5pdGVtcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNGQ2NjkyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3Q1Ny9hZnRlci9UZXN0Lml0ZW1zCkBAIC0wLDAgKzEgQEAKK0NvbGxcblBzaUxvY2FsVmFyaWFibGU6eApkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3Q1Ny9hZnRlci90ZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDU3L2FmdGVyL3Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YjJkYTk2Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3Q1Ny9hZnRlci90ZXN0LmphdmEKQEAgLTAsMCArMSwxNiBAQAorY2xhc3MgQ29sbCA8WCwgWT4geworICBYIGY7CisgIFkgczsKKyAgQ29sbDxZLCBYPiBhOworfQorCisKKworY2xhc3MgVGVzdCB7CisKKyAgICB2b2lkIGZvbygpIHsKKyAgICAgICAgQ29sbCB4OworICAgICAgICB4LmYgPSAiIjsKKyAgICAgICAgeC5zID0gbmV3IEludGVnZXIoMyk7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90NTcvYmVmb3JlL3Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90NTcvYmVmb3JlL3Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YjJkYTk2Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3Q1Ny9iZWZvcmUvdGVzdC5qYXZhCkBAIC0wLDAgKzEsMTYgQEAKK2NsYXNzIENvbGwgPFgsIFk+IHsKKyAgWCBmOworICBZIHM7CisgIENvbGw8WSwgWD4gYTsKK30KKworCisKK2NsYXNzIFRlc3QgeworCisgICAgdm9pZCBmb28oKSB7CisgICAgICAgIENvbGwgeDsKKyAgICAgICAgeC5mID0gIiI7CisgICAgICAgIHgucyA9IG5ldyBJbnRlZ2VyKDMpOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDU4L2FmdGVyL1Rlc3QuMS5pdGVtcyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90NTgvYWZ0ZXIvVGVzdC4xLml0ZW1zCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI3M2IwZDgKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDU4L2FmdGVyL1Rlc3QuMS5pdGVtcwpAQCAtMCwwICsxIEBACitDb2xsPGphdmEubGFuZy5JbnRlZ2VyLGphdmEubGFuZy5TdHJpbmc+XG5Qc2lMb2NhbFZhcmlhYmxlOngKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90NTgvYWZ0ZXIvVGVzdC5pdGVtcyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90NTgvYWZ0ZXIvVGVzdC5pdGVtcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNGQ2NjkyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3Q1OC9hZnRlci9UZXN0Lml0ZW1zCkBAIC0wLDAgKzEgQEAKK0NvbGxcblBzaUxvY2FsVmFyaWFibGU6eApkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3Q1OC9hZnRlci90ZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDU4L2FmdGVyL3Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNWVmNGY1Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3Q1OC9hZnRlci90ZXN0LmphdmEKQEAgLTAsMCArMSwxNCBAQAorY2xhc3MgQ29sbCA8WCwgWT4geworICBYIGY7CisgIFkgczsKKyAgQ29sbDxZLCBYPiBhOworfQorCitjbGFzcyBUZXN0IHsKKworICAgIHZvaWQgZm9vKCkgeworICAgICAgICBDb2xsIHg7CisgICAgICAgIHguYS5mID0gIiI7CisgICAgICAgIHguYS5zID0gbmV3IEludGVnZXIoMyk7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90NTgvYmVmb3JlL3Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90NTgvYmVmb3JlL3Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNWVmNGY1Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3Q1OC9iZWZvcmUvdGVzdC5qYXZhCkBAIC0wLDAgKzEsMTQgQEAKK2NsYXNzIENvbGwgPFgsIFk+IHsKKyAgWCBmOworICBZIHM7CisgIENvbGw8WSwgWD4gYTsKK30KKworY2xhc3MgVGVzdCB7CisKKyAgICB2b2lkIGZvbygpIHsKKyAgICAgICAgQ29sbCB4OworICAgICAgICB4LmEuZiA9ICIiOworICAgICAgICB4LmEucyA9IG5ldyBJbnRlZ2VyKDMpOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDU5L2FmdGVyL1Rlc3QuMS5pdGVtcyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90NTkvYWZ0ZXIvVGVzdC4xLml0ZW1zCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI4OGNkNjIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDU5L2FmdGVyL1Rlc3QuMS5pdGVtcwpAQCAtMCwwICsxIEBACitDb2xsPGphdmEubGFuZy5TdHJpbmcsamF2YS5sYW5nLkludGVnZXI+XG5Qc2lMb2NhbFZhcmlhYmxlOngKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90NTkvYWZ0ZXIvVGVzdC5pdGVtcyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90NTkvYWZ0ZXIvVGVzdC5pdGVtcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNGQ2NjkyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3Q1OS9hZnRlci9UZXN0Lml0ZW1zCkBAIC0wLDAgKzEgQEAKK0NvbGxcblBzaUxvY2FsVmFyaWFibGU6eApkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3Q1OS9hZnRlci90ZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDU5L2FmdGVyL3Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MGY5ZmYyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3Q1OS9hZnRlci90ZXN0LmphdmEKQEAgLTAsMCArMSwxNiBAQAorY2xhc3MgQ29sbCA8WCwgWT4geworICBYIGY7CisgIFkgczsKKyAgQ29sbDxZLCBYPiBhOworfQorCisKKworY2xhc3MgVGVzdCB7CisKKyAgICB2b2lkIGZvbygpIHsKKyAgICAgICAgQ29sbCB4OworICAgICAgICB4LmEuYS5mID0gIiI7CisgICAgICAgIHguYS5hLnMgPSBuZXcgSW50ZWdlcigzKTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3Q1OS9iZWZvcmUvdGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3Q1OS9iZWZvcmUvdGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQwZjlmZjIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDU5L2JlZm9yZS90ZXN0LmphdmEKQEAgLTAsMCArMSwxNiBAQAorY2xhc3MgQ29sbCA8WCwgWT4geworICBYIGY7CisgIFkgczsKKyAgQ29sbDxZLCBYPiBhOworfQorCisKKworY2xhc3MgVGVzdCB7CisKKyAgICB2b2lkIGZvbygpIHsKKyAgICAgICAgQ29sbCB4OworICAgICAgICB4LmEuYS5mID0gIiI7CisgICAgICAgIHguYS5hLnMgPSBuZXcgSW50ZWdlcigzKTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3Q2MC9hZnRlci9UZXN0LjEuaXRlbXMgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDYwL2FmdGVyL1Rlc3QuMS5pdGVtcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iODhjZDYyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3Q2MC9hZnRlci9UZXN0LjEuaXRlbXMKQEAgLTAsMCArMSBAQAorQ29sbDxqYXZhLmxhbmcuU3RyaW5nLGphdmEubGFuZy5JbnRlZ2VyPlxuUHNpTG9jYWxWYXJpYWJsZTp4CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDYwL2FmdGVyL1Rlc3QuaXRlbXMgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDYwL2FmdGVyL1Rlc3QuaXRlbXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjRkNjY5MgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90NjAvYWZ0ZXIvVGVzdC5pdGVtcwpAQCAtMCwwICsxIEBACitDb2xsXG5Qc2lMb2NhbFZhcmlhYmxlOngKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90NjAvYWZ0ZXIvdGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3Q2MC9hZnRlci90ZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2ZjMWVlMwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90NjAvYWZ0ZXIvdGVzdC5qYXZhCkBAIC0wLDAgKzEsMjAgQEAKK2NsYXNzIE9oWWVhaDxULFE+eworICBUIHQ7Cit9CisKK2NsYXNzIENvbGwgPFgsIFk+IHsKKyAgWCBmOworICBZIHM7CisgIE9oWWVhaDxZLENvbGw8WCxYPj4gYTsKK30KKworCisKK2NsYXNzIFRlc3QgeworCisgICAgdm9pZCBmb28oKSB7CisgICAgICAgIENvbGwgeDsKKyAgICAgICAgeC5mID0gIiI7CisgICAgICAgIHguYS50ID0gbmV3IEludGVnZXIoMyk7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90NjAvYmVmb3JlL3Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90NjAvYmVmb3JlL3Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZmMxZWUzCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3Q2MC9iZWZvcmUvdGVzdC5qYXZhCkBAIC0wLDAgKzEsMjAgQEAKK2NsYXNzIE9oWWVhaDxULFE+eworICBUIHQ7Cit9CisKK2NsYXNzIENvbGwgPFgsIFk+IHsKKyAgWCBmOworICBZIHM7CisgIE9oWWVhaDxZLENvbGw8WCxYPj4gYTsKK30KKworCisKK2NsYXNzIFRlc3QgeworCisgICAgdm9pZCBmb28oKSB7CisgICAgICAgIENvbGwgeDsKKyAgICAgICAgeC5mID0gIiI7CisgICAgICAgIHguYS50ID0gbmV3IEludGVnZXIoMyk7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90NjEvYWZ0ZXIvVGVzdC4xLml0ZW1zIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3Q2MS9hZnRlci9UZXN0LjEuaXRlbXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjRkNjY5MgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90NjEvYWZ0ZXIvVGVzdC4xLml0ZW1zCkBAIC0wLDAgKzEgQEAKK0NvbGxcblBzaUxvY2FsVmFyaWFibGU6eApkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3Q2MS9hZnRlci9UZXN0Lml0ZW1zIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3Q2MS9hZnRlci9UZXN0Lml0ZW1zCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI0ZDY2OTIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDYxL2FmdGVyL1Rlc3QuaXRlbXMKQEAgLTAsMCArMSBAQAorQ29sbFxuUHNpTG9jYWxWYXJpYWJsZTp4CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDYxL2FmdGVyL3Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90NjEvYWZ0ZXIvdGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU4MDRjYjMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDYxL2FmdGVyL3Rlc3QuamF2YQpAQCAtMCwwICsxLDE0IEBACitjbGFzcyBPaFllYWg8Wj4geworICBaIHQ7Cit9CisKK2NsYXNzIENvbGwgPFQsIFggZXh0ZW5kcyBPaFllYWg8VD4+IHsKKyAgWCBmOworfQorCitjbGFzcyBUZXN0IHsKKyAgICB2b2lkIGZvbygpIHsKKyAgICAgIENvbGwgeDsKKyAgICAgIHguZi50ID0gbmV3IEludGVnZXIoMik7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90NjEvYmVmb3JlL3Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90NjEvYmVmb3JlL3Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lODA0Y2IzCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3Q2MS9iZWZvcmUvdGVzdC5qYXZhCkBAIC0wLDAgKzEsMTQgQEAKK2NsYXNzIE9oWWVhaDxaPiB7CisgIFogdDsKK30KKworY2xhc3MgQ29sbCA8VCwgWCBleHRlbmRzIE9oWWVhaDxUPj4geworICBYIGY7Cit9CisKK2NsYXNzIFRlc3QgeworICAgIHZvaWQgZm9vKCkgeworICAgICAgQ29sbCB4OworICAgICAgeC5mLnQgPSBuZXcgSW50ZWdlcigyKTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3Q2Mi9hZnRlci9UZXN0LjEuaXRlbXMgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDYyL2FmdGVyL1Rlc3QuMS5pdGVtcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNGQ2NjkyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3Q2Mi9hZnRlci9UZXN0LjEuaXRlbXMKQEAgLTAsMCArMSBAQAorQ29sbFxuUHNpTG9jYWxWYXJpYWJsZTp4CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDYyL2FmdGVyL1Rlc3QuaXRlbXMgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDYyL2FmdGVyL1Rlc3QuaXRlbXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjRkNjY5MgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90NjIvYWZ0ZXIvVGVzdC5pdGVtcwpAQCAtMCwwICsxIEBACitDb2xsXG5Qc2lMb2NhbFZhcmlhYmxlOngKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90NjIvYWZ0ZXIvdGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3Q2Mi9hZnRlci90ZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDdiNzUzYQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90NjIvYWZ0ZXIvdGVzdC5qYXZhCkBAIC0wLDAgKzEsMTEgQEAKK2NsYXNzIENvbGwgPFQ+IHsKKyAgVCB0OworICBDb2xsIHg7Cit9CisKK2NsYXNzIFRlc3QgeworICAgIHZvaWQgZm9vKCkgeworICAgICAgQ29sbCB4OworICAgICAgeC54LnQgPSAiIjsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3Q2Mi9iZWZvcmUvdGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3Q2Mi9iZWZvcmUvdGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA3Yjc1M2EKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDYyL2JlZm9yZS90ZXN0LmphdmEKQEAgLTAsMCArMSwxMSBAQAorY2xhc3MgQ29sbCA8VD4geworICBUIHQ7CisgIENvbGwgeDsKK30KKworY2xhc3MgVGVzdCB7CisgICAgdm9pZCBmb28oKSB7CisgICAgICBDb2xsIHg7CisgICAgICB4LngudCA9ICIiOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDYzL2FmdGVyL1Rlc3QuMS5pdGVtcyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90NjMvYWZ0ZXIvVGVzdC4xLml0ZW1zCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI3M2IwZDgKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDYzL2FmdGVyL1Rlc3QuMS5pdGVtcwpAQCAtMCwwICsxIEBACitDb2xsPGphdmEubGFuZy5JbnRlZ2VyLGphdmEubGFuZy5TdHJpbmc+XG5Qc2lMb2NhbFZhcmlhYmxlOngKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90NjMvYWZ0ZXIvVGVzdC5pdGVtcyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90NjMvYWZ0ZXIvVGVzdC5pdGVtcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNGQ2NjkyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3Q2My9hZnRlci9UZXN0Lml0ZW1zCkBAIC0wLDAgKzEgQEAKK0NvbGxcblBzaUxvY2FsVmFyaWFibGU6eApkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3Q2My9hZnRlci90ZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDYzL2FmdGVyL3Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NzRhMDAyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3Q2My9hZnRlci90ZXN0LmphdmEKQEAgLTAsMCArMSwxNCBAQAorY2xhc3MgQ29sbCA8VCwgWD4geworICBUIHQ7CisgIFggeDsKKyAgQ29sbDxYLCBUPiBmKCkge3JldHVybiBudWxsO307Cit9CisKK2NsYXNzIFRlc3QgeworICAgIHZvaWQgZm9vKCkgeworICAgICAgQ29sbCB4OworCisgICAgICB4LmYoKS50ID0gIiI7CisgICAgICB4LnQgPSBuZXcgSW50ZWdlcig0KTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3Q2My9iZWZvcmUvdGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3Q2My9iZWZvcmUvdGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg3NGEwMDIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDYzL2JlZm9yZS90ZXN0LmphdmEKQEAgLTAsMCArMSwxNCBAQAorY2xhc3MgQ29sbCA8VCwgWD4geworICBUIHQ7CisgIFggeDsKKyAgQ29sbDxYLCBUPiBmKCkge3JldHVybiBudWxsO307Cit9CisKK2NsYXNzIFRlc3QgeworICAgIHZvaWQgZm9vKCkgeworICAgICAgQ29sbCB4OworCisgICAgICB4LmYoKS50ID0gIiI7CisgICAgICB4LnQgPSBuZXcgSW50ZWdlcig0KTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3Q2NC9hZnRlci9UZXN0LjEuaXRlbXMgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDY0L2FmdGVyL1Rlc3QuMS5pdGVtcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNGQ2NjkyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3Q2NC9hZnRlci9UZXN0LjEuaXRlbXMKQEAgLTAsMCArMSBAQAorQ29sbFxuUHNpTG9jYWxWYXJpYWJsZTp4CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDY0L2FmdGVyL1Rlc3QuaXRlbXMgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDY0L2FmdGVyL1Rlc3QuaXRlbXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjRkNjY5MgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90NjQvYWZ0ZXIvVGVzdC5pdGVtcwpAQCAtMCwwICsxIEBACitDb2xsXG5Qc2lMb2NhbFZhcmlhYmxlOngKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90NjQvYWZ0ZXIvdGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3Q2NC9hZnRlci90ZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2YwZjk2ZAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90NjQvYWZ0ZXIvdGVzdC5qYXZhCkBAIC0wLDAgKzEsMTcgQEAKK2NsYXNzIE9oWWVhaDxaPnsKKyAgWiB6OworfQorCitjbGFzcyBDb2xsIDxULCBYIGV4dGVuZHMgT2hZZWFoPFQ+PiB7CisgIFQgdDsKKyAgWCB4OworICBYIGYoKSB7cmV0dXJuIG51bGw7fTsKK30KKworY2xhc3MgVGVzdCB7CisgICAgdm9pZCBmb28oKSB7CisgICAgICBDb2xsIHg7CisKKyAgICAgIHguZigpLnogPSAiIjsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3Q2NC9iZWZvcmUvdGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3Q2NC9iZWZvcmUvdGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNmMGY5NmQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDY0L2JlZm9yZS90ZXN0LmphdmEKQEAgLTAsMCArMSwxNyBAQAorY2xhc3MgT2hZZWFoPFo+eworICBaIHo7Cit9CisKK2NsYXNzIENvbGwgPFQsIFggZXh0ZW5kcyBPaFllYWg8VD4+IHsKKyAgVCB0OworICBYIHg7CisgIFggZigpIHtyZXR1cm4gbnVsbDt9OworfQorCitjbGFzcyBUZXN0IHsKKyAgICB2b2lkIGZvbygpIHsKKyAgICAgIENvbGwgeDsKKworICAgICAgeC5mKCkueiA9ICIiOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDY1L2FmdGVyL1Rlc3QuMS5pdGVtcyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90NjUvYWZ0ZXIvVGVzdC4xLml0ZW1zCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMyYzljN2M2Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3Q2NS9hZnRlci9UZXN0LjEuaXRlbXMKQEAgLTAsMCArMSwyIEBACitNYXA8amF2YS5sYW5nLlN0cmluZyxqYXZhLmxhbmcuSW50ZWdlcj5cblBzaUxvY2FsVmFyaWFibGU6eAorTWFwPGphdmEubGFuZy5TdHJpbmcsamF2YS5sYW5nLkludGVnZXI+XG5uZXcKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90NjUvYWZ0ZXIvVGVzdC5pdGVtcyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90NjUvYWZ0ZXIvVGVzdC5pdGVtcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZDViZjhiCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3Q2NS9hZnRlci9UZXN0Lml0ZW1zCkBAIC0wLDAgKzEsMiBAQAorTWFwXG5Qc2lMb2NhbFZhcmlhYmxlOngKK01hcFxubmV3CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDY1L2FmdGVyL3Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90NjUvYWZ0ZXIvdGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhhNDUzNGMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDY1L2FmdGVyL3Rlc3QuamF2YQpAQCAtMCwwICsxLDEzIEBACitjbGFzcyBNYXA8VCwgWD4geworICBUIHQ7CisgIFggeDsKK30KKworY2xhc3MgVGVzdCB7CisgICAgdm9pZCBmb28oKSB7CisgICAgICBNYXAgeCA9IG5ldyBNYXAoKTsKKworICAgICAgeC50ID0gIiI7CisgICAgICB4LnggPSBuZXcgSW50ZWdlcigzKTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3Q2NS9iZWZvcmUvdGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3Q2NS9iZWZvcmUvdGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhhNDUzNGMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDY1L2JlZm9yZS90ZXN0LmphdmEKQEAgLTAsMCArMSwxMyBAQAorY2xhc3MgTWFwPFQsIFg+IHsKKyAgVCB0OworICBYIHg7Cit9CisKK2NsYXNzIFRlc3QgeworICAgIHZvaWQgZm9vKCkgeworICAgICAgTWFwIHggPSBuZXcgTWFwKCk7CisKKyAgICAgIHgudCA9ICIiOworICAgICAgeC54ID0gbmV3IEludGVnZXIoMyk7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90NjYvYWZ0ZXIvVGVzdC4xLml0ZW1zIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3Q2Ni9hZnRlci9UZXN0LjEuaXRlbXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWRjMWE3NgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90NjYvYWZ0ZXIvVGVzdC4xLml0ZW1zCkBAIC0wLDAgKzEsMyBAQAorTWFwPGphdmEubGFuZy5TdHJpbmcsamF2YS5sYW5nLkludGVnZXI+XG5Qc2lMb2NhbFZhcmlhYmxlOngKK01hcDxqYXZhLmxhbmcuU3RyaW5nLGphdmEubGFuZy5JbnRlZ2VyPlxuUHNpTG9jYWxWYXJpYWJsZTp5CitNYXA8amF2YS5sYW5nLlN0cmluZyxqYXZhLmxhbmcuSW50ZWdlcj5cbm5ldwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3Q2Ni9hZnRlci9UZXN0Lml0ZW1zIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3Q2Ni9hZnRlci9UZXN0Lml0ZW1zCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI4NzM1Y2QKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDY2L2FmdGVyL1Rlc3QuaXRlbXMKQEAgLTAsMCArMSwzIEBACitNYXBcblBzaUxvY2FsVmFyaWFibGU6eAorTWFwXG5Qc2lMb2NhbFZhcmlhYmxlOnkKK01hcFxubmV3CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDY2L2FmdGVyL3Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90NjYvYWZ0ZXIvdGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBjOWI2NjgKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDY2L2FmdGVyL3Rlc3QuamF2YQpAQCAtMCwwICsxLDE0IEBACitjbGFzcyBNYXA8VCwgWD4geworICBUIHQ7CisgIFggeDsKK30KKworY2xhc3MgVGVzdCB7CisgICAgdm9pZCBmb28oKSB7CisgICAgICBNYXAgeCA9IG5ldyBNYXAoKTsKKyAgICAgIE1hcCB5ID0geDsKKworICAgICAgeC50ID0gIiI7CisgICAgICB4LnggPSBuZXcgSW50ZWdlcigzKTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3Q2Ni9iZWZvcmUvdGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3Q2Ni9iZWZvcmUvdGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBjOWI2NjgKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDY2L2JlZm9yZS90ZXN0LmphdmEKQEAgLTAsMCArMSwxNCBAQAorY2xhc3MgTWFwPFQsIFg+IHsKKyAgVCB0OworICBYIHg7Cit9CisKK2NsYXNzIFRlc3QgeworICAgIHZvaWQgZm9vKCkgeworICAgICAgTWFwIHggPSBuZXcgTWFwKCk7CisgICAgICBNYXAgeSA9IHg7CisKKyAgICAgIHgudCA9ICIiOworICAgICAgeC54ID0gbmV3IEludGVnZXIoMyk7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90NjcvYWZ0ZXIvVGVzdC4xLml0ZW1zIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3Q2Ny9hZnRlci9UZXN0LjEuaXRlbXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODNlMWRjNAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90NjcvYWZ0ZXIvVGVzdC4xLml0ZW1zCkBAIC0wLDAgKzEsNSBAQAorTWFwPGphdmEubGFuZy5JbnRlZ2VyLGphdmEubGFuZy5TdHJpbmc+XG5Qc2lMb2NhbFZhcmlhYmxlOnkKK01hcDxqYXZhLmxhbmcuSW50ZWdlcixqYXZhLmxhbmcuU3RyaW5nPlxucmV0dXJuIG9mIGYKK1BhbTxqYXZhLmxhbmcuU3RyaW5nPlxuUHNpTG9jYWxWYXJpYWJsZTp4CitQYW08amF2YS5sYW5nLlN0cmluZz5cbm5ldworUGFtPGphdmEubGFuZy5TdHJpbmc+XG5wYXJhbWV0ZXIgMCBvZiBmCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDY3L2FmdGVyL1Rlc3QuaXRlbXMgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDY3L2FmdGVyL1Rlc3QuaXRlbXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTMzYTY1MAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90NjcvYWZ0ZXIvVGVzdC5pdGVtcwpAQCAtMCwwICsxLDUgQEAKK01hcFxuUHNpTG9jYWxWYXJpYWJsZTp5CitNYXBcbnJldHVybiBvZiBmCitQYW1cblBzaUxvY2FsVmFyaWFibGU6eAorUGFtXG5uZXcKK1BhbVxucGFyYW1ldGVyIDAgb2YgZgpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3Q2Ny9hZnRlci90ZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDY3L2FmdGVyL3Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MTdlNTJjCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3Q2Ny9hZnRlci90ZXN0LmphdmEKQEAgLTAsMCArMSwyMiBAQAorY2xhc3MgTWFwPFQsIFg+IHsKKyAgVCB0OworICBYIHg7Cit9CisKK2NsYXNzIFBhbTxZPiBleHRlbmRzIE1hcDxJbnRlZ2VyLCBZPiB7Cit9CisKK2NsYXNzIFRlc3QgeworCisgICAgTWFwIGYgKFBhbSB4KXsKKyAgICAgIHJldHVybiB4OworICAgIH0KKworICAgIHZvaWQgZm9vKCkgeworICAgICAgUGFtIHggPSBuZXcgUGFtICgpOworCisgICAgICB4LnggPSAiIjsKKworICAgICAgTWFwIHkgPSBmICh4KTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3Q2Ny9iZWZvcmUvdGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3Q2Ny9iZWZvcmUvdGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUxN2U1MmMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDY3L2JlZm9yZS90ZXN0LmphdmEKQEAgLTAsMCArMSwyMiBAQAorY2xhc3MgTWFwPFQsIFg+IHsKKyAgVCB0OworICBYIHg7Cit9CisKK2NsYXNzIFBhbTxZPiBleHRlbmRzIE1hcDxJbnRlZ2VyLCBZPiB7Cit9CisKK2NsYXNzIFRlc3QgeworCisgICAgTWFwIGYgKFBhbSB4KXsKKyAgICAgIHJldHVybiB4OworICAgIH0KKworICAgIHZvaWQgZm9vKCkgeworICAgICAgUGFtIHggPSBuZXcgUGFtICgpOworCisgICAgICB4LnggPSAiIjsKKworICAgICAgTWFwIHkgPSBmICh4KTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3Q2OC9hZnRlci9UZXN0LjEuaXRlbXMgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDY4L2FmdGVyL1Rlc3QuMS5pdGVtcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZGMxYTc2Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3Q2OC9hZnRlci9UZXN0LjEuaXRlbXMKQEAgLTAsMCArMSwzIEBACitNYXA8amF2YS5sYW5nLlN0cmluZyxqYXZhLmxhbmcuSW50ZWdlcj5cblBzaUxvY2FsVmFyaWFibGU6eAorTWFwPGphdmEubGFuZy5TdHJpbmcsamF2YS5sYW5nLkludGVnZXI+XG5Qc2lMb2NhbFZhcmlhYmxlOnkKK01hcDxqYXZhLmxhbmcuU3RyaW5nLGphdmEubGFuZy5JbnRlZ2VyPlxubmV3CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDY4L2FmdGVyL1Rlc3QuaXRlbXMgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDY4L2FmdGVyL1Rlc3QuaXRlbXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjg3MzVjZAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90NjgvYWZ0ZXIvVGVzdC5pdGVtcwpAQCAtMCwwICsxLDMgQEAKK01hcFxuUHNpTG9jYWxWYXJpYWJsZTp4CitNYXBcblBzaUxvY2FsVmFyaWFibGU6eQorTWFwXG5uZXcKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90NjgvYWZ0ZXIvdGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3Q2OC9hZnRlci90ZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWQyOThjMAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90NjgvYWZ0ZXIvdGVzdC5qYXZhCkBAIC0wLDAgKzEsMjAgQEAKK2NsYXNzIE1hcDxULCBYPiB7CisgIFQgdDsKKyAgWCB4OworCisgIGludCBzaXplKCl7CisgICAgcmV0dXJuIDA7CisgIH0KK30KKworY2xhc3MgVGVzdCB7CisgICAgdm9pZCBmb28oKSB7CisgICAgICBNYXAgeCA9IG5ldyBNYXAoKTsKKyAgICAgIE1hcCB5ID0geDsKKworICAgICAgeC50ID0gIiI7CisgICAgICB4LnggPSBuZXcgSW50ZWdlcigzKTsKKworICAgICAgVGVzdFtdIHQgPSBuZXcgVGVzdFt4LnNpemUoKV07CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90NjgvYmVmb3JlL3Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90NjgvYmVmb3JlL3Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZDI5OGMwCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3Q2OC9iZWZvcmUvdGVzdC5qYXZhCkBAIC0wLDAgKzEsMjAgQEAKK2NsYXNzIE1hcDxULCBYPiB7CisgIFQgdDsKKyAgWCB4OworCisgIGludCBzaXplKCl7CisgICAgcmV0dXJuIDA7CisgIH0KK30KKworY2xhc3MgVGVzdCB7CisgICAgdm9pZCBmb28oKSB7CisgICAgICBNYXAgeCA9IG5ldyBNYXAoKTsKKyAgICAgIE1hcCB5ID0geDsKKworICAgICAgeC50ID0gIiI7CisgICAgICB4LnggPSBuZXcgSW50ZWdlcigzKTsKKworICAgICAgVGVzdFtdIHQgPSBuZXcgVGVzdFt4LnNpemUoKV07CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90NjkvYWZ0ZXIvVGVzdC4xLml0ZW1zIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3Q2OS9hZnRlci9UZXN0LjEuaXRlbXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTdkM2ZkMQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90NjkvYWZ0ZXIvVGVzdC4xLml0ZW1zCkBAIC0wLDAgKzEsNCBAQAorTWFwPGphdmEubGFuZy5TdHJpbmcsamF2YS5sYW5nLkludGVnZXI+XG5Qc2lMb2NhbFZhcmlhYmxlOngKK01hcDxqYXZhLmxhbmcuU3RyaW5nLGphdmEubGFuZy5JbnRlZ2VyPlxuUHNpTG9jYWxWYXJpYWJsZTp5CitNYXA8amF2YS5sYW5nLlN0cmluZyxqYXZhLmxhbmcuSW50ZWdlcj5cbm5ldworTWFwPGphdmEubGFuZy5TdHJpbmcsamF2YS5sYW5nLkludGVnZXI+XG5wYXJhbWV0ZXIgMCBvZiBmCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDY5L2FmdGVyL1Rlc3QuaXRlbXMgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDY5L2FmdGVyL1Rlc3QuaXRlbXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTc0YTFlNgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90NjkvYWZ0ZXIvVGVzdC5pdGVtcwpAQCAtMCwwICsxLDQgQEAKK01hcFxuUHNpTG9jYWxWYXJpYWJsZTp4CitNYXBcblBzaUxvY2FsVmFyaWFibGU6eQorTWFwXG5uZXcKK01hcFxucGFyYW1ldGVyIDAgb2YgZgpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3Q2OS9hZnRlci90ZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDY5L2FmdGVyL3Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYWU1YTJkCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3Q2OS9hZnRlci90ZXN0LmphdmEKQEAgLTAsMCArMSwyOSBAQAorY2xhc3MgTWFwPFQsIFg+IHsKKyAgVCB0OworICBYIHg7CisKKyAgVCBnZXQoKXsKKyAgICByZXR1cm4gbnVsbDsKKyAgfQorCisgIGludCBzaXplKCl7CisgICAgcmV0dXJuIDA7CisgIH0KK30KKworY2xhc3MgVGVzdCB7CisKKyAgICB2b2lkIGYgKE1hcCB4KXsKKyAgICAgIFN0cmluZyBpID0gKFN0cmluZykgeC5nZXQoKTsKKyAgICB9CisKKyAgICB2b2lkIGZvbygpIHsKKyAgICAgIE1hcCB4ID0gbmV3IE1hcCgpOworICAgICAgTWFwIHkgPSB4OworCisgICAgICB4LnQgPSAiIjsKKyAgICAgIHgueCA9IG5ldyBJbnRlZ2VyKDMpOworCisgICAgICBmKHgpOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDY5L2JlZm9yZS90ZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDY5L2JlZm9yZS90ZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGFlNWEyZAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90NjkvYmVmb3JlL3Rlc3QuamF2YQpAQCAtMCwwICsxLDI5IEBACitjbGFzcyBNYXA8VCwgWD4geworICBUIHQ7CisgIFggeDsKKworICBUIGdldCgpeworICAgIHJldHVybiBudWxsOworICB9CisKKyAgaW50IHNpemUoKXsKKyAgICByZXR1cm4gMDsKKyAgfQorfQorCitjbGFzcyBUZXN0IHsKKworICAgIHZvaWQgZiAoTWFwIHgpeworICAgICAgU3RyaW5nIGkgPSAoU3RyaW5nKSB4LmdldCgpOworICAgIH0KKworICAgIHZvaWQgZm9vKCkgeworICAgICAgTWFwIHggPSBuZXcgTWFwKCk7CisgICAgICBNYXAgeSA9IHg7CisKKyAgICAgIHgudCA9ICIiOworICAgICAgeC54ID0gbmV3IEludGVnZXIoMyk7CisKKyAgICAgIGYoeCk7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90NzAvYWZ0ZXIvVGVzdC4xLml0ZW1zIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3Q3MC9hZnRlci9UZXN0LjEuaXRlbXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDc4ZmYzYQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90NzAvYWZ0ZXIvVGVzdC4xLml0ZW1zCkBAIC0wLDAgKzEsMiBAQAorTGlzdDxqYXZhLmxhbmcuU3RyaW5nLGphdmEubGFuZy5TdHJpbmc+XG5Qc2lMb2NhbFZhcmlhYmxlOngKK0xpc3Q8amF2YS5sYW5nLlN0cmluZyxqYXZhLmxhbmcuU3RyaW5nPlxubmV3CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDcwL2FmdGVyL1Rlc3QuaXRlbXMgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDcwL2FmdGVyL1Rlc3QuaXRlbXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzg1NmU5ZgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90NzAvYWZ0ZXIvVGVzdC5pdGVtcwpAQCAtMCwwICsxLDIgQEAKK0xpc3RcblBzaUxvY2FsVmFyaWFibGU6eAorTGlzdFxubmV3CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDcwL2FmdGVyL3Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90NzAvYWZ0ZXIvdGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMxMmViMjMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDcwL2FmdGVyL3Rlc3QuamF2YQpAQCAtMCwwICsxLDIxIEBACitjbGFzcyBFeHRlcm5hbHsKKyAgc3RhdGljIHZvaWQgZiAoTGlzdCB4KXsKKyAgfQorfQorCitjbGFzcyBMaXN0PFQsIEU+IHsKKyAgVCB0OworCisgIHZvaWQgc2V0KFQgdCwgRSBlKXsKKyAgICB0aGlzLnQgPSB0OworICB9Cit9CisKK2NsYXNzIFRlc3QgeworCisgICAgdm9pZCBmICgpeworICAgICAgTGlzdCB4ID0gbmV3IExpc3QoKTsKKyAgICAgIHguc2V0KCIiLCAiIik7CisgICAgICBFeHRlcm5hbC5mKHgpOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDcwL2JlZm9yZS90ZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDcwL2JlZm9yZS90ZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzEyZWIyMwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90NzAvYmVmb3JlL3Rlc3QuamF2YQpAQCAtMCwwICsxLDIxIEBACitjbGFzcyBFeHRlcm5hbHsKKyAgc3RhdGljIHZvaWQgZiAoTGlzdCB4KXsKKyAgfQorfQorCitjbGFzcyBMaXN0PFQsIEU+IHsKKyAgVCB0OworCisgIHZvaWQgc2V0KFQgdCwgRSBlKXsKKyAgICB0aGlzLnQgPSB0OworICB9Cit9CisKK2NsYXNzIFRlc3QgeworCisgICAgdm9pZCBmICgpeworICAgICAgTGlzdCB4ID0gbmV3IExpc3QoKTsKKyAgICAgIHguc2V0KCIiLCAiIik7CisgICAgICBFeHRlcm5hbC5mKHgpOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDcxL2FmdGVyL1Rlc3QuMS5pdGVtcyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90NzEvYWZ0ZXIvVGVzdC4xLml0ZW1zCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZkODMzNjAKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDcxL2FmdGVyL1Rlc3QuMS5pdGVtcwpAQCAtMCwwICsxLDIgQEAKK0xpc3Q8amF2YS5sYW5nLlN0cmluZz5cblBzaUZpZWxkOngKK0xpc3Q8amF2YS5sYW5nLlN0cmluZz5cbm5ldwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3Q3MS9hZnRlci9UZXN0Lml0ZW1zIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3Q3MS9hZnRlci9UZXN0Lml0ZW1zCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRjNDhkZWYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDcxL2FmdGVyL1Rlc3QuaXRlbXMKQEAgLTAsMCArMSwyIEBACitMaXN0XG5Qc2lGaWVsZDp4CitMaXN0XG5uZXcKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90NzEvYWZ0ZXIvdGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3Q3MS9hZnRlci90ZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjc3N2ZlYgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90NzEvYWZ0ZXIvdGVzdC5qYXZhCkBAIC0wLDAgKzEsMjIgQEAKK2NsYXNzIExpc3Q8VD4geworICBUIHQ7CisKKyAgdm9pZCBzZXQoVCB0KXsKKyAgICB0aGlzLnQgPSB0OworICB9Cit9CisKK2NsYXNzIFRlc3QgeworCisgIHN0YXRpYyBMaXN0IHggPSBuZXcgTGlzdCgpOworCisgIHN0YXRpYyB2b2lkIGYgKCl7CisgICAgeC5zZXQoIiIpOworICB9Cit9CisKK2NsYXNzIEV4dGVybmFseworICBzdGF0aWMgTGlzdCBmICgpeworICAgIHJldHVybiBUZXN0Lng7CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90NzEvYmVmb3JlL3Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90NzEvYmVmb3JlL3Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42Nzc3ZmViCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3Q3MS9iZWZvcmUvdGVzdC5qYXZhCkBAIC0wLDAgKzEsMjIgQEAKK2NsYXNzIExpc3Q8VD4geworICBUIHQ7CisKKyAgdm9pZCBzZXQoVCB0KXsKKyAgICB0aGlzLnQgPSB0OworICB9Cit9CisKK2NsYXNzIFRlc3QgeworCisgIHN0YXRpYyBMaXN0IHggPSBuZXcgTGlzdCgpOworCisgIHN0YXRpYyB2b2lkIGYgKCl7CisgICAgeC5zZXQoIiIpOworICB9Cit9CisKK2NsYXNzIEV4dGVybmFseworICBzdGF0aWMgTGlzdCBmICgpeworICAgIHJldHVybiBUZXN0Lng7CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90NzIvYWZ0ZXIvVGVzdC4xLml0ZW1zIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3Q3Mi9hZnRlci9UZXN0LjEuaXRlbXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjE5MTA2YQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90NzIvYWZ0ZXIvVGVzdC4xLml0ZW1zCkBAIC0wLDAgKzEsNCBAQAorTGlzdDxqYXZhLmxhbmcuU3RyaW5nPltdXG5Qc2lMb2NhbFZhcmlhYmxlOngKK0xpc3Q8amF2YS5sYW5nLlN0cmluZz5bXVxubmV3CitMaXN0PGphdmEubGFuZy5TdHJpbmc+XG5Qc2lMb2NhbFZhcmlhYmxlOnkKK0xpc3Q8amF2YS5sYW5nLlN0cmluZz5cbm5ldwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3Q3Mi9hZnRlci9UZXN0Lml0ZW1zIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3Q3Mi9hZnRlci9UZXN0Lml0ZW1zCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBkOTliYmFmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3Q3Mi9hZnRlci9UZXN0Lml0ZW1zCkBAIC0wLDAgKzEsNCBAQAorTGlzdFtdXG5Qc2lMb2NhbFZhcmlhYmxlOngKK0xpc3RbXVxubmV3CitMaXN0XG5Qc2lMb2NhbFZhcmlhYmxlOnkKK0xpc3Rcbm5ldwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3Q3Mi9hZnRlci90ZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDcyL2FmdGVyL3Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OTMxNDFmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3Q3Mi9hZnRlci90ZXN0LmphdmEKQEAgLTAsMCArMSwxNyBAQAorY2xhc3MgTGlzdDxUPiB7CisgIFQgdDsKKworICB2b2lkIHNldChUIHQpeworICAgIHRoaXMudCA9IHQ7CisgIH0KK30KKworY2xhc3MgVGVzdCB7CisgIHZvaWQgZm9vICgpeworICAgICBMaXN0IHkgPSBuZXcgTGlzdCgpOworCisgICAgIHkuc2V0KCIiKTsKKworICAgICBMaXN0W10geCA9IG5ldyBMaXN0W10ge3l9OworICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDcyL2JlZm9yZS90ZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDcyL2JlZm9yZS90ZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTkzMTQxZgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90NzIvYmVmb3JlL3Rlc3QuamF2YQpAQCAtMCwwICsxLDE3IEBACitjbGFzcyBMaXN0PFQ+IHsKKyAgVCB0OworCisgIHZvaWQgc2V0KFQgdCl7CisgICAgdGhpcy50ID0gdDsKKyAgfQorfQorCitjbGFzcyBUZXN0IHsKKyAgdm9pZCBmb28gKCl7CisgICAgIExpc3QgeSA9IG5ldyBMaXN0KCk7CisKKyAgICAgeS5zZXQoIiIpOworCisgICAgIExpc3RbXSB4ID0gbmV3IExpc3RbXSB7eX07CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90NzMvYWZ0ZXIvVGVzdC4xLml0ZW1zIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3Q3My9hZnRlci9UZXN0LjEuaXRlbXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODc2MDZmMQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90NzMvYWZ0ZXIvVGVzdC4xLml0ZW1zCkBAIC0wLDAgKzEsNCBAQAorTGlzdDxqYXZhLmlvLlNlcmlhbGl6YWJsZT5cblBzaUxvY2FsVmFyaWFibGU6eAorTGlzdDxqYXZhLmlvLlNlcmlhbGl6YWJsZT5cblBzaUxvY2FsVmFyaWFibGU6eQorTGlzdDxqYXZhLmlvLlNlcmlhbGl6YWJsZT5cbm5ldworTGlzdDxqYXZhLmlvLlNlcmlhbGl6YWJsZT5cbm5ldwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3Q3My9hZnRlci9UZXN0Lml0ZW1zIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3Q3My9hZnRlci9UZXN0Lml0ZW1zCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVkNTUwNTgKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDczL2FmdGVyL1Rlc3QuaXRlbXMKQEAgLTAsMCArMSw0IEBACitMaXN0XG5Qc2lMb2NhbFZhcmlhYmxlOngKK0xpc3RcblBzaUxvY2FsVmFyaWFibGU6eQorTGlzdFxubmV3CitMaXN0XG5uZXcKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90NzMvYWZ0ZXIvdGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3Q3My9hZnRlci90ZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjkzNTJhYgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90NzMvYWZ0ZXIvdGVzdC5qYXZhCkBAIC0wLDAgKzEsMTYgQEAKK2NsYXNzIExpc3Q8VD4geworICBUIHQ7Cit9CisKK2NsYXNzIFRlc3QgeworICB2b2lkIGZvbyAoKXsKKyAgICAgTGlzdCB5ID0gbmV3IExpc3QoKTsKKyAgICAgTGlzdCB4ID0gbmV3IExpc3QoKTsKKworICAgICB4LnQgPSB5LnQ7CisgICAgIHkudCA9IHgudDsKKworICAgICB4LnQgPSAiIjsKKyAgICAgeS50ID0gbmV3IEludGVnZXIoMyk7CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90NzMvYmVmb3JlL3Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90NzMvYmVmb3JlL3Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOTM1MmFiCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3Q3My9iZWZvcmUvdGVzdC5qYXZhCkBAIC0wLDAgKzEsMTYgQEAKK2NsYXNzIExpc3Q8VD4geworICBUIHQ7Cit9CisKK2NsYXNzIFRlc3QgeworICB2b2lkIGZvbyAoKXsKKyAgICAgTGlzdCB5ID0gbmV3IExpc3QoKTsKKyAgICAgTGlzdCB4ID0gbmV3IExpc3QoKTsKKworICAgICB4LnQgPSB5LnQ7CisgICAgIHkudCA9IHgudDsKKworICAgICB4LnQgPSAiIjsKKyAgICAgeS50ID0gbmV3IEludGVnZXIoMyk7CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90NzQvYWZ0ZXIvVGVzdC4xLml0ZW1zIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3Q3NC9hZnRlci9UZXN0LjEuaXRlbXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDU4NThlNgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90NzQvYWZ0ZXIvVGVzdC4xLml0ZW1zCkBAIC0wLDAgKzEsMiBAQAorTGlzdDxMaXN0PGphdmEubGFuZy5TdHJpbmc+PlxuUHNpTG9jYWxWYXJpYWJsZTp4CitMaXN0PExpc3Q8amF2YS5sYW5nLlN0cmluZz4+XG5uZXcKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90NzQvYWZ0ZXIvVGVzdC5pdGVtcyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90NzQvYWZ0ZXIvVGVzdC5pdGVtcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NjFjZDU2Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3Q3NC9hZnRlci9UZXN0Lml0ZW1zCkBAIC0wLDAgKzEsMiBAQAorTGlzdDxMaXN0PlxuUHNpTG9jYWxWYXJpYWJsZTp4CitMaXN0PExpc3Q+XG5uZXcKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90NzQvYWZ0ZXIvdGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3Q3NC9hZnRlci90ZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjY2NzJkNwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90NzQvYWZ0ZXIvdGVzdC5qYXZhCkBAIC0wLDAgKzEsMTYgQEAKK2NsYXNzIExpc3Q8VD4geworICBUIHQ7Cit9CisKK2NsYXNzIFRlc3QgeworICB2b2lkIGZvbyAoKXsKKyAgICAgLy9MaXN0PExpc3Q+IHkgPSBuZXcgTGlzdDxMaXN0PigpOworICAgICBMaXN0PExpc3Q+IHggPSBuZXcgTGlzdDxMaXN0PigpOworCisgICAgIC8veC50ID0geS50OworICAgIC8vIHkudCA9IHgudDsKKworICAgICB4LnQudCA9ICIiOworICAgICAvL3kudC50ID0gbmV3IEludGVnZXIoMyk7CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90NzQvYmVmb3JlL3Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90NzQvYmVmb3JlL3Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNjY3MmQ3Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3Q3NC9iZWZvcmUvdGVzdC5qYXZhCkBAIC0wLDAgKzEsMTYgQEAKK2NsYXNzIExpc3Q8VD4geworICBUIHQ7Cit9CisKK2NsYXNzIFRlc3QgeworICB2b2lkIGZvbyAoKXsKKyAgICAgLy9MaXN0PExpc3Q+IHkgPSBuZXcgTGlzdDxMaXN0PigpOworICAgICBMaXN0PExpc3Q+IHggPSBuZXcgTGlzdDxMaXN0PigpOworCisgICAgIC8veC50ID0geS50OworICAgIC8vIHkudCA9IHgudDsKKworICAgICB4LnQudCA9ICIiOworICAgICAvL3kudC50ID0gbmV3IEludGVnZXIoMyk7CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90NzUvYWZ0ZXIvVGVzdC4xLml0ZW1zIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3Q3NS9hZnRlci9UZXN0LjEuaXRlbXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWIxYmM0YQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90NzUvYWZ0ZXIvVGVzdC4xLml0ZW1zCkBAIC0wLDAgKzEsMyBAQAorSXRlcmF0b3I8amF2YS5sYW5nLlN0cmluZz5cblBzaUxvY2FsVmFyaWFibGU6aQorT2ZMaXN0PGphdmEubGFuZy5TdHJpbmc+XG5Qc2lMb2NhbFZhcmlhYmxlOngKK09mTGlzdDxqYXZhLmxhbmcuU3RyaW5nPlxubmV3CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDc1L2FmdGVyL1Rlc3QuaXRlbXMgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDc1L2FmdGVyL1Rlc3QuaXRlbXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTU3ZGZkMAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90NzUvYWZ0ZXIvVGVzdC5pdGVtcwpAQCAtMCwwICsxLDMgQEAKK0l0ZXJhdG9yXG5Qc2lMb2NhbFZhcmlhYmxlOmkKK09mTGlzdFxuUHNpTG9jYWxWYXJpYWJsZTp4CitPZkxpc3Rcbm5ldwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3Q3NS9hZnRlci90ZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDc1L2FmdGVyL3Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZjZjMzVjCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3Q3NS9hZnRlci90ZXN0LmphdmEKQEAgLTAsMCArMSwzMSBAQAorY2xhc3MgTGlzdDxBPiB7CisgIEEgdDsKKworICBTZXQ8QT4gc2V0KCl7CisgICAgcmV0dXJuIG51bGw7CisgIH0KK30KKworY2xhc3MgT2ZMaXN0PEI+IGV4dGVuZHMgTGlzdDxCPiB7CisKK30KKworY2xhc3MgSXRlcmF0b3I8Qz4geworICBDIGdldCAoKXsKKyAgICByZXR1cm4gbnVsbDsKKyAgfQorfQorCitjbGFzcyBTZXQ8RD4geworICBJdGVyYXRvcjxEPiBpdGVyYXRvcigpeworICAgIHJldHVybiBudWxsOworICB9Cit9CisKK2NsYXNzIFRlc3QgeworICB2b2lkIGZvbyAoKXsKKyAgICBPZkxpc3QgeCA9IG5ldyBPZkxpc3QoKTsKKyAgICB4LnQgPSAiIjsKKyAgICBJdGVyYXRvciBpID0geC5zZXQoKS5pdGVyYXRvcigpOworICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDc1L2JlZm9yZS90ZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDc1L2JlZm9yZS90ZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmY2YzM1YwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90NzUvYmVmb3JlL3Rlc3QuamF2YQpAQCAtMCwwICsxLDMxIEBACitjbGFzcyBMaXN0PEE+IHsKKyAgQSB0OworCisgIFNldDxBPiBzZXQoKXsKKyAgICByZXR1cm4gbnVsbDsKKyAgfQorfQorCitjbGFzcyBPZkxpc3Q8Qj4gZXh0ZW5kcyBMaXN0PEI+IHsKKworfQorCitjbGFzcyBJdGVyYXRvcjxDPiB7CisgIEMgZ2V0ICgpeworICAgIHJldHVybiBudWxsOworICB9Cit9CisKK2NsYXNzIFNldDxEPiB7CisgIEl0ZXJhdG9yPEQ+IGl0ZXJhdG9yKCl7CisgICAgcmV0dXJuIG51bGw7CisgIH0KK30KKworY2xhc3MgVGVzdCB7CisgIHZvaWQgZm9vICgpeworICAgIE9mTGlzdCB4ID0gbmV3IE9mTGlzdCgpOworICAgIHgudCA9ICIiOworICAgIEl0ZXJhdG9yIGkgPSB4LnNldCgpLml0ZXJhdG9yKCk7CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90NzYvYWZ0ZXIvVGVzdC4xLml0ZW1zIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3Q3Ni9hZnRlci9UZXN0LjEuaXRlbXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGRmOGZhNQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90NzYvYWZ0ZXIvVGVzdC4xLml0ZW1zCkBAIC0wLDAgKzEsNSBAQAorSXRlcmF0b3I8U2V0PGphdmEubGFuZy5TdHJpbmc+PlxuUHNpTG9jYWxWYXJpYWJsZTppCitPZkxpc3Q8U2V0PGphdmEubGFuZy5TdHJpbmc+PlxuUHNpTG9jYWxWYXJpYWJsZTp4CitPZkxpc3Q8U2V0PGphdmEubGFuZy5TdHJpbmc+PlxubmV3CitTZXQ8amF2YS5sYW5nLlN0cmluZz5cblBzaUxvY2FsVmFyaWFibGU6dQorU2V0PGphdmEubGFuZy5TdHJpbmc+XG5Qc2lUeXBlQ2FzdEV4cHJlc3Npb246KFNldCkgaS5nZXQoKQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3Q3Ni9hZnRlci9UZXN0Lml0ZW1zIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3Q3Ni9hZnRlci9UZXN0Lml0ZW1zCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFkYzcxYjYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDc2L2FmdGVyL1Rlc3QuaXRlbXMKQEAgLTAsMCArMSw1IEBACitJdGVyYXRvclxuUHNpTG9jYWxWYXJpYWJsZTppCitPZkxpc3RcblBzaUxvY2FsVmFyaWFibGU6eAorT2ZMaXN0XG5uZXcKK1NldFxuUHNpTG9jYWxWYXJpYWJsZTp1CitTZXRcblBzaVR5cGVDYXN0RXhwcmVzc2lvbjooU2V0KSBpLmdldCgpCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDc2L2FmdGVyL3Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90NzYvYWZ0ZXIvdGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjViYjAxMzQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDc2L2FmdGVyL3Rlc3QuamF2YQpAQCAtMCwwICsxLDMzIEBACitjbGFzcyBMaXN0PEE+IHsKKyAgQSB0OworCisgIFNldDxBPiBzZXQoKXsKKyAgICByZXR1cm4gbnVsbDsKKyAgfQorfQorCitjbGFzcyBPZkxpc3Q8Qj4gZXh0ZW5kcyBMaXN0PEI+IHsKKworfQorCitjbGFzcyBJdGVyYXRvcjxDPiB7CisgIEMgZ2V0ICgpeworICAgIHJldHVybiBudWxsOworICB9Cit9CisKK2NsYXNzIFNldDxEPiB7CisgIEQgZDsKKyAgSXRlcmF0b3I8RD4gaXRlcmF0b3IoKXsKKyAgICByZXR1cm4gbnVsbDsKKyAgfQorfQorCitjbGFzcyBUZXN0IHsKKyAgdm9pZCBmb28gKCl7CisgICAgT2ZMaXN0IHggPSBuZXcgT2ZMaXN0KCk7CisgICAgSXRlcmF0b3IgaSA9IHguc2V0KCkuaXRlcmF0b3IoKTsKKyAgICBTZXQgdSA9IChTZXQpIGkuZ2V0KCk7CisgICAgdS5kID0gIiI7CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90NzYvYmVmb3JlL3Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90NzYvYmVmb3JlL3Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YmIwMTM0Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3Q3Ni9iZWZvcmUvdGVzdC5qYXZhCkBAIC0wLDAgKzEsMzMgQEAKK2NsYXNzIExpc3Q8QT4geworICBBIHQ7CisKKyAgU2V0PEE+IHNldCgpeworICAgIHJldHVybiBudWxsOworICB9Cit9CisKK2NsYXNzIE9mTGlzdDxCPiBleHRlbmRzIExpc3Q8Qj4geworCit9CisKK2NsYXNzIEl0ZXJhdG9yPEM+IHsKKyAgQyBnZXQgKCl7CisgICAgcmV0dXJuIG51bGw7CisgIH0KK30KKworY2xhc3MgU2V0PEQ+IHsKKyAgRCBkOworICBJdGVyYXRvcjxEPiBpdGVyYXRvcigpeworICAgIHJldHVybiBudWxsOworICB9Cit9CisKK2NsYXNzIFRlc3QgeworICB2b2lkIGZvbyAoKXsKKyAgICBPZkxpc3QgeCA9IG5ldyBPZkxpc3QoKTsKKyAgICBJdGVyYXRvciBpID0geC5zZXQoKS5pdGVyYXRvcigpOworICAgIFNldCB1ID0gKFNldCkgaS5nZXQoKTsKKyAgICB1LmQgPSAiIjsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3Q3Ny9hZnRlci9UZXN0LjEuaXRlbXMgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDc3L2FmdGVyL1Rlc3QuMS5pdGVtcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZGY4ZmE1Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3Q3Ny9hZnRlci9UZXN0LjEuaXRlbXMKQEAgLTAsMCArMSw1IEBACitJdGVyYXRvcjxTZXQ8amF2YS5sYW5nLlN0cmluZz4+XG5Qc2lMb2NhbFZhcmlhYmxlOmkKK09mTGlzdDxTZXQ8amF2YS5sYW5nLlN0cmluZz4+XG5Qc2lMb2NhbFZhcmlhYmxlOngKK09mTGlzdDxTZXQ8amF2YS5sYW5nLlN0cmluZz4+XG5uZXcKK1NldDxqYXZhLmxhbmcuU3RyaW5nPlxuUHNpTG9jYWxWYXJpYWJsZTp1CitTZXQ8amF2YS5sYW5nLlN0cmluZz5cblBzaVR5cGVDYXN0RXhwcmVzc2lvbjooU2V0KSBpLmdldCgpCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDc3L2FmdGVyL1Rlc3QuaXRlbXMgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDc3L2FmdGVyL1Rlc3QuaXRlbXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWRjNzFiNgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90NzcvYWZ0ZXIvVGVzdC5pdGVtcwpAQCAtMCwwICsxLDUgQEAKK0l0ZXJhdG9yXG5Qc2lMb2NhbFZhcmlhYmxlOmkKK09mTGlzdFxuUHNpTG9jYWxWYXJpYWJsZTp4CitPZkxpc3Rcbm5ldworU2V0XG5Qc2lMb2NhbFZhcmlhYmxlOnUKK1NldFxuUHNpVHlwZUNhc3RFeHByZXNzaW9uOihTZXQpIGkuZ2V0KCkKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90NzcvYWZ0ZXIvdGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3Q3Ny9hZnRlci90ZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjgzNGJmYQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90NzcvYWZ0ZXIvdGVzdC5qYXZhCkBAIC0wLDAgKzEsMzMgQEAKK2NsYXNzIExpc3Q8QT4geworICBBIHQ7CisKKyAgU2V0PEE+IHNldCgpeworICAgIHJldHVybiBudWxsOworICB9Cit9CisKK2NsYXNzIE9mTGlzdDxCPiBleHRlbmRzIExpc3Q8Qj4geworCit9CisKK2NsYXNzIEl0ZXJhdG9yPEM+IHsKKyAgQyBnZXQgKCl7CisgICAgcmV0dXJuIG51bGw7CisgIH0KK30KKworY2xhc3MgU2V0PEQ+IHsKKyAgRCBkOworICBJdGVyYXRvcjxEPiBpdGVyYXRvcigpeworICAgIHJldHVybiBudWxsOworICB9Cit9CisKK2NsYXNzIFRlc3QgeworICB2b2lkIGZvbyAoKXsKKyAgICBPZkxpc3QgeCA9IG5ldyBPZkxpc3QoKTsKKyAgICBJdGVyYXRvciBpID0geC5zZXQoKS5pdGVyYXRvcigpOworICAgIFNldCB1ID0gKFNldCkgaS5nZXQoKTsKKyAgICBTdHJpbmcgcyA9IChTdHJpbmcpIHUuZDsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3Q3Ny9iZWZvcmUvdGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3Q3Ny9iZWZvcmUvdGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI4MzRiZmEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDc3L2JlZm9yZS90ZXN0LmphdmEKQEAgLTAsMCArMSwzMyBAQAorY2xhc3MgTGlzdDxBPiB7CisgIEEgdDsKKworICBTZXQ8QT4gc2V0KCl7CisgICAgcmV0dXJuIG51bGw7CisgIH0KK30KKworY2xhc3MgT2ZMaXN0PEI+IGV4dGVuZHMgTGlzdDxCPiB7CisKK30KKworY2xhc3MgSXRlcmF0b3I8Qz4geworICBDIGdldCAoKXsKKyAgICByZXR1cm4gbnVsbDsKKyAgfQorfQorCitjbGFzcyBTZXQ8RD4geworICBEIGQ7CisgIEl0ZXJhdG9yPEQ+IGl0ZXJhdG9yKCl7CisgICAgcmV0dXJuIG51bGw7CisgIH0KK30KKworY2xhc3MgVGVzdCB7CisgIHZvaWQgZm9vICgpeworICAgIE9mTGlzdCB4ID0gbmV3IE9mTGlzdCgpOworICAgIEl0ZXJhdG9yIGkgPSB4LnNldCgpLml0ZXJhdG9yKCk7CisgICAgU2V0IHUgPSAoU2V0KSBpLmdldCgpOworICAgIFN0cmluZyBzID0gKFN0cmluZykgdS5kOworICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDc4L2FmdGVyL1Rlc3QuMS5pdGVtcyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90NzgvYWZ0ZXIvVGVzdC4xLml0ZW1zCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjliMWJjNGEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDc4L2FmdGVyL1Rlc3QuMS5pdGVtcwpAQCAtMCwwICsxLDMgQEAKK0l0ZXJhdG9yPGphdmEubGFuZy5TdHJpbmc+XG5Qc2lMb2NhbFZhcmlhYmxlOmkKK09mTGlzdDxqYXZhLmxhbmcuU3RyaW5nPlxuUHNpTG9jYWxWYXJpYWJsZTp4CitPZkxpc3Q8amF2YS5sYW5nLlN0cmluZz5cbm5ldwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3Q3OC9hZnRlci9UZXN0Lml0ZW1zIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3Q3OC9hZnRlci9UZXN0Lml0ZW1zCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU1N2RmZDAKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDc4L2FmdGVyL1Rlc3QuaXRlbXMKQEAgLTAsMCArMSwzIEBACitJdGVyYXRvclxuUHNpTG9jYWxWYXJpYWJsZTppCitPZkxpc3RcblBzaUxvY2FsVmFyaWFibGU6eAorT2ZMaXN0XG5uZXcKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90NzgvYWZ0ZXIvdGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3Q3OC9hZnRlci90ZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzJlNDk5YQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90NzgvYWZ0ZXIvdGVzdC5qYXZhCkBAIC0wLDAgKzEsMjUgQEAKK2NsYXNzIExpc3Q8QT4geworICBBIHQ7CisKKyAgU2V0PEE+IHNldDsKK30KKworY2xhc3MgT2ZMaXN0PEI+IGV4dGVuZHMgTGlzdDxCPiB7CisKK30KKworY2xhc3MgSXRlcmF0b3I8Qz4geworICBDIGdldDsKK30KKworY2xhc3MgU2V0PEQ+IHsKKyAgSXRlcmF0b3I8RD4gaXRlcmF0b3I7Cit9CisKK2NsYXNzIFRlc3QgeworICB2b2lkIGZvbyAoKXsKKyAgICBPZkxpc3QgeCA9IG5ldyBPZkxpc3QoKTsKKyAgICB4LnQgPSAiIjsKKyAgICBJdGVyYXRvciBpID0geC5zZXQuaXRlcmF0b3I7CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90NzgvYmVmb3JlL3Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90NzgvYmVmb3JlL3Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MmU0OTlhCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3Q3OC9iZWZvcmUvdGVzdC5qYXZhCkBAIC0wLDAgKzEsMjUgQEAKK2NsYXNzIExpc3Q8QT4geworICBBIHQ7CisKKyAgU2V0PEE+IHNldDsKK30KKworY2xhc3MgT2ZMaXN0PEI+IGV4dGVuZHMgTGlzdDxCPiB7CisKK30KKworY2xhc3MgSXRlcmF0b3I8Qz4geworICBDIGdldDsKK30KKworY2xhc3MgU2V0PEQ+IHsKKyAgSXRlcmF0b3I8RD4gaXRlcmF0b3I7Cit9CisKK2NsYXNzIFRlc3QgeworICB2b2lkIGZvbyAoKXsKKyAgICBPZkxpc3QgeCA9IG5ldyBPZkxpc3QoKTsKKyAgICB4LnQgPSAiIjsKKyAgICBJdGVyYXRvciBpID0geC5zZXQuaXRlcmF0b3I7CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90NzkvYWZ0ZXIvVGVzdC4xLml0ZW1zIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3Q3OS9hZnRlci9UZXN0LjEuaXRlbXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWIxYmM0YQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90NzkvYWZ0ZXIvVGVzdC4xLml0ZW1zCkBAIC0wLDAgKzEsMyBAQAorSXRlcmF0b3I8amF2YS5sYW5nLlN0cmluZz5cblBzaUxvY2FsVmFyaWFibGU6aQorT2ZMaXN0PGphdmEubGFuZy5TdHJpbmc+XG5Qc2lMb2NhbFZhcmlhYmxlOngKK09mTGlzdDxqYXZhLmxhbmcuU3RyaW5nPlxubmV3CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDc5L2FmdGVyL1Rlc3QuaXRlbXMgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDc5L2FmdGVyL1Rlc3QuaXRlbXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTU3ZGZkMAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90NzkvYWZ0ZXIvVGVzdC5pdGVtcwpAQCAtMCwwICsxLDMgQEAKK0l0ZXJhdG9yXG5Qc2lMb2NhbFZhcmlhYmxlOmkKK09mTGlzdFxuUHNpTG9jYWxWYXJpYWJsZTp4CitPZkxpc3Rcbm5ldwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3Q3OS9hZnRlci90ZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDc5L2FmdGVyL3Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NzY2YmJlCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3Q3OS9hZnRlci90ZXN0LmphdmEKQEAgLTAsMCArMSwyMSBAQAorY2xhc3MgT2ZMaXN0PEI+IHsKKyAgQiB0OworCisgIFNldDxCPiBzZXQ7Cit9CisKK2NsYXNzIEl0ZXJhdG9yPEM+IHsKKyAgQyBnZXQ7Cit9CisKK2NsYXNzIFNldDxEPiB7CisgIEl0ZXJhdG9yPEQ+IGl0ZXJhdG9yOworfQorCitjbGFzcyBUZXN0IHsKKyAgdm9pZCBmb28gKCl7CisgICAgT2ZMaXN0IHggPSBuZXcgT2ZMaXN0KCk7CisgICAgeC50ID0gIiI7CisgICAgSXRlcmF0b3IgaSA9IHguc2V0Lml0ZXJhdG9yOworICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDc5L2JlZm9yZS90ZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDc5L2JlZm9yZS90ZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzc2NmJiZQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90NzkvYmVmb3JlL3Rlc3QuamF2YQpAQCAtMCwwICsxLDIxIEBACitjbGFzcyBPZkxpc3Q8Qj4geworICBCIHQ7CisKKyAgU2V0PEI+IHNldDsKK30KKworY2xhc3MgSXRlcmF0b3I8Qz4geworICBDIGdldDsKK30KKworY2xhc3MgU2V0PEQ+IHsKKyAgSXRlcmF0b3I8RD4gaXRlcmF0b3I7Cit9CisKK2NsYXNzIFRlc3QgeworICB2b2lkIGZvbyAoKXsKKyAgICBPZkxpc3QgeCA9IG5ldyBPZkxpc3QoKTsKKyAgICB4LnQgPSAiIjsKKyAgICBJdGVyYXRvciBpID0geC5zZXQuaXRlcmF0b3I7CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90ODAvYWZ0ZXIvVGVzdC4xLml0ZW1zIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3Q4MC9hZnRlci9UZXN0LjEuaXRlbXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGRmOGZhNQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90ODAvYWZ0ZXIvVGVzdC4xLml0ZW1zCkBAIC0wLDAgKzEsNSBAQAorSXRlcmF0b3I8U2V0PGphdmEubGFuZy5TdHJpbmc+PlxuUHNpTG9jYWxWYXJpYWJsZTppCitPZkxpc3Q8U2V0PGphdmEubGFuZy5TdHJpbmc+PlxuUHNpTG9jYWxWYXJpYWJsZTp4CitPZkxpc3Q8U2V0PGphdmEubGFuZy5TdHJpbmc+PlxubmV3CitTZXQ8amF2YS5sYW5nLlN0cmluZz5cblBzaUxvY2FsVmFyaWFibGU6dQorU2V0PGphdmEubGFuZy5TdHJpbmc+XG5Qc2lUeXBlQ2FzdEV4cHJlc3Npb246KFNldCkgaS5nZXQoKQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3Q4MC9hZnRlci9UZXN0Lml0ZW1zIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3Q4MC9hZnRlci9UZXN0Lml0ZW1zCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFkYzcxYjYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDgwL2FmdGVyL1Rlc3QuaXRlbXMKQEAgLTAsMCArMSw1IEBACitJdGVyYXRvclxuUHNpTG9jYWxWYXJpYWJsZTppCitPZkxpc3RcblBzaUxvY2FsVmFyaWFibGU6eAorT2ZMaXN0XG5uZXcKK1NldFxuUHNpTG9jYWxWYXJpYWJsZTp1CitTZXRcblBzaVR5cGVDYXN0RXhwcmVzc2lvbjooU2V0KSBpLmdldCgpCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDgwL2FmdGVyL3Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90ODAvYWZ0ZXIvdGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFkNmRiYjkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDgwL2FmdGVyL3Rlc3QuamF2YQpAQCAtMCwwICsxLDI5IEBACitjbGFzcyBPZkxpc3Q8Qj4geworICBCIHQ7CisKKyAgU2V0PEI+IHNldCgpeworICAgIHJldHVybiBudWxsOworICB9Cit9CisKK2NsYXNzIEl0ZXJhdG9yPEM+IHsKKyAgQyBnZXQgKCl7CisgICAgcmV0dXJuIG51bGw7CisgIH0KK30KKworY2xhc3MgU2V0PEQ+IHsKKyAgRCBkOworICBJdGVyYXRvcjxEPiBpdGVyYXRvcigpeworICAgIHJldHVybiBudWxsOworICB9Cit9CisKK2NsYXNzIFRlc3QgeworICB2b2lkIGZvbyAoKXsKKyAgICBPZkxpc3QgeCA9IG5ldyBPZkxpc3QoKTsKKyAgICBJdGVyYXRvciBpID0geC5zZXQoKS5pdGVyYXRvcigpOworICAgIFNldCB1ID0gKFNldCkgaS5nZXQoKTsKKyAgICB1LmQgPSAiIjsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3Q4MC9iZWZvcmUvdGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3Q4MC9iZWZvcmUvdGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFkNmRiYjkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDgwL2JlZm9yZS90ZXN0LmphdmEKQEAgLTAsMCArMSwyOSBAQAorY2xhc3MgT2ZMaXN0PEI+IHsKKyAgQiB0OworCisgIFNldDxCPiBzZXQoKXsKKyAgICByZXR1cm4gbnVsbDsKKyAgfQorfQorCitjbGFzcyBJdGVyYXRvcjxDPiB7CisgIEMgZ2V0ICgpeworICAgIHJldHVybiBudWxsOworICB9Cit9CisKK2NsYXNzIFNldDxEPiB7CisgIEQgZDsKKyAgSXRlcmF0b3I8RD4gaXRlcmF0b3IoKXsKKyAgICByZXR1cm4gbnVsbDsKKyAgfQorfQorCitjbGFzcyBUZXN0IHsKKyAgdm9pZCBmb28gKCl7CisgICAgT2ZMaXN0IHggPSBuZXcgT2ZMaXN0KCk7CisgICAgSXRlcmF0b3IgaSA9IHguc2V0KCkuaXRlcmF0b3IoKTsKKyAgICBTZXQgdSA9IChTZXQpIGkuZ2V0KCk7CisgICAgdS5kID0gIiI7CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90ODEvYWZ0ZXIvVGVzdC4xLml0ZW1zIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3Q4MS9hZnRlci9UZXN0LjEuaXRlbXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjM2MGMxZAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90ODEvYWZ0ZXIvVGVzdC4xLml0ZW1zCkBAIC0wLDAgKzEsMyBAQAorTGlzdDxfPlxuUHNpTG9jYWxWYXJpYWJsZTp4CitMaXN0PGphdmEubGFuZy5TdHJpbmc+W11cblBzaUxvY2FsVmFyaWFibGU6eQorTGlzdDxqYXZhLmxhbmcuU3RyaW5nPltdXG5uZXcKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90ODEvYWZ0ZXIvVGVzdC5pdGVtcyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90ODEvYWZ0ZXIvVGVzdC5pdGVtcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iY2I0MjNjCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3Q4MS9hZnRlci9UZXN0Lml0ZW1zCkBAIC0wLDAgKzEsMyBAQAorTGlzdFtdXG5Qc2lMb2NhbFZhcmlhYmxlOnkKK0xpc3RbXVxubmV3CitMaXN0XG5Qc2lMb2NhbFZhcmlhYmxlOngKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90ODEvYWZ0ZXIvdGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3Q4MS9hZnRlci90ZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzZlMjAxNgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90ODEvYWZ0ZXIvdGVzdC5qYXZhCkBAIC0wLDAgKzEsMTMgQEAKK2NsYXNzIExpc3Q8VD4geworICBUIHQ7Cit9CisKK2NsYXNzIFRlc3QgeworICB2b2lkIGZvbyAoKXsKKyAgICBMaXN0W10geSA9IG5ldyBMaXN0IFsxMF07CisgICAgTGlzdCB4ID0geVswXTsKKworICAgIHlbMV0udCA9ICIiOworICAgIHgudCA9IG5ldyBJbnRlZ2VyKDIpOworICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDgxL2JlZm9yZS90ZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDgxL2JlZm9yZS90ZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzZlMjAxNgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90ODEvYmVmb3JlL3Rlc3QuamF2YQpAQCAtMCwwICsxLDEzIEBACitjbGFzcyBMaXN0PFQ+IHsKKyAgVCB0OworfQorCitjbGFzcyBUZXN0IHsKKyAgdm9pZCBmb28gKCl7CisgICAgTGlzdFtdIHkgPSBuZXcgTGlzdCBbMTBdOworICAgIExpc3QgeCA9IHlbMF07CisKKyAgICB5WzFdLnQgPSAiIjsKKyAgICB4LnQgPSBuZXcgSW50ZWdlcigyKTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3Q4Mi9hZnRlci9UZXN0LjEuaXRlbXMgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDgyL2FmdGVyL1Rlc3QuMS5pdGVtcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OWU1YjkyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3Q4Mi9hZnRlci9UZXN0LjEuaXRlbXMKQEAgLTAsMCArMSw2IEBACitMaXN0PGphdmEuaW8uU2VyaWFsaXphYmxlPltdXG5Qc2lMb2NhbFZhcmlhYmxlOngKK0xpc3Q8amF2YS5pby5TZXJpYWxpemFibGU+W11cbm5ldworTGlzdDxqYXZhLmlvLlNlcmlhbGl6YWJsZT5cblBzaUxvY2FsVmFyaWFibGU6eQorTGlzdDxqYXZhLmlvLlNlcmlhbGl6YWJsZT5cblBzaUxvY2FsVmFyaWFibGU6egorTGlzdDxqYXZhLmlvLlNlcmlhbGl6YWJsZT5cbm5ldworTGlzdDxqYXZhLmlvLlNlcmlhbGl6YWJsZT5cbm5ldwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3Q4Mi9hZnRlci9UZXN0Lml0ZW1zIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3Q4Mi9hZnRlci9UZXN0Lml0ZW1zCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ3Mzg1MzcKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDgyL2FmdGVyL1Rlc3QuaXRlbXMKQEAgLTAsMCArMSw2IEBACitMaXN0W11cblBzaUxvY2FsVmFyaWFibGU6eAorTGlzdFtdXG5uZXcKK0xpc3RcblBzaUxvY2FsVmFyaWFibGU6eQorTGlzdFxuUHNpTG9jYWxWYXJpYWJsZTp6CitMaXN0XG5uZXcKK0xpc3Rcbm5ldwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3Q4Mi9hZnRlci90ZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDgyL2FmdGVyL3Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yODAyYTVhMwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90ODIvYWZ0ZXIvdGVzdC5qYXZhCkBAIC0wLDAgKzEsMTkgQEAKK2NsYXNzIExpc3Q8VD4geworICBUIHQ7CisKKyAgdm9pZCBzZXQoVCB0KXsKKyAgICB0aGlzLnQgPSB0OworICB9Cit9CisKK2NsYXNzIFRlc3QgeworICB2b2lkIGZvbyAoKXsKKyAgICAgTGlzdCB5ID0gbmV3IExpc3QoKTsKKyAgICAgTGlzdCB6ID0gbmV3IExpc3QoKTsKKworICAgICB5LnNldCgiIik7CisgICAgIHouc2V0KG5ldyBJbnRlZ2VyKDMpKTsKKworICAgICBMaXN0W10geCA9IG5ldyBMaXN0W10ge3ksIHp9OworICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDgyL2JlZm9yZS90ZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDgyL2JlZm9yZS90ZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjgwMmE1YTMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDgyL2JlZm9yZS90ZXN0LmphdmEKQEAgLTAsMCArMSwxOSBAQAorY2xhc3MgTGlzdDxUPiB7CisgIFQgdDsKKworICB2b2lkIHNldChUIHQpeworICAgIHRoaXMudCA9IHQ7CisgIH0KK30KKworY2xhc3MgVGVzdCB7CisgIHZvaWQgZm9vICgpeworICAgICBMaXN0IHkgPSBuZXcgTGlzdCgpOworICAgICBMaXN0IHogPSBuZXcgTGlzdCgpOworCisgICAgIHkuc2V0KCIiKTsKKyAgICAgei5zZXQobmV3IEludGVnZXIoMykpOworCisgICAgIExpc3RbXSB4ID0gbmV3IExpc3RbXSB7eSwgen07CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90ODMvYWZ0ZXIvVGVzdC4xLml0ZW1zIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3Q4My9hZnRlci9UZXN0LjEuaXRlbXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGFkNTczNgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90ODMvYWZ0ZXIvVGVzdC4xLml0ZW1zCkBAIC0wLDAgKzEsNiBAQAorTGlzdDxqYXZhLmxhbmcuU3RyaW5nPltdXG5Qc2lMb2NhbFZhcmlhYmxlOngKK0xpc3Q8amF2YS5sYW5nLlN0cmluZz5bXVxubmV3CitMaXN0PGphdmEubGFuZy5TdHJpbmc+XG5Qc2lMb2NhbFZhcmlhYmxlOnkKK0xpc3Q8amF2YS5sYW5nLlN0cmluZz5cblBzaUxvY2FsVmFyaWFibGU6egorTGlzdDxqYXZhLmxhbmcuU3RyaW5nPlxubmV3CitMaXN0PGphdmEubGFuZy5TdHJpbmc+XG5uZXcKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90ODMvYWZ0ZXIvVGVzdC5pdGVtcyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90ODMvYWZ0ZXIvVGVzdC5pdGVtcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNzM4NTM3Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3Q4My9hZnRlci9UZXN0Lml0ZW1zCkBAIC0wLDAgKzEsNiBAQAorTGlzdFtdXG5Qc2lMb2NhbFZhcmlhYmxlOngKK0xpc3RbXVxubmV3CitMaXN0XG5Qc2lMb2NhbFZhcmlhYmxlOnkKK0xpc3RcblBzaUxvY2FsVmFyaWFibGU6egorTGlzdFxubmV3CitMaXN0XG5uZXcKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90ODMvYWZ0ZXIvdGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3Q4My9hZnRlci90ZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWVhZTJhNQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90ODMvYWZ0ZXIvdGVzdC5qYXZhCkBAIC0wLDAgKzEsMTggQEAKK2NsYXNzIExpc3Q8VD4geworICBUIHQ7CisKKyAgdm9pZCBzZXQoVCB0KXsKKyAgICB0aGlzLnQgPSB0OworICB9Cit9CisKK2NsYXNzIFRlc3QgeworICB2b2lkIGZvbyAoKXsKKyAgICAgTGlzdCB5ID0gbmV3IExpc3QoKTsKKyAgICAgTGlzdCB6ID0gbmV3IExpc3QoKTsKKworICAgICB5LnNldCgiIik7CisKKyAgICAgTGlzdFtdIHggPSBuZXcgTGlzdFtdIHt5LCB6fTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3Q4My9iZWZvcmUvdGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3Q4My9iZWZvcmUvdGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjllYWUyYTUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDgzL2JlZm9yZS90ZXN0LmphdmEKQEAgLTAsMCArMSwxOCBAQAorY2xhc3MgTGlzdDxUPiB7CisgIFQgdDsKKworICB2b2lkIHNldChUIHQpeworICAgIHRoaXMudCA9IHQ7CisgIH0KK30KKworY2xhc3MgVGVzdCB7CisgIHZvaWQgZm9vICgpeworICAgICBMaXN0IHkgPSBuZXcgTGlzdCgpOworICAgICBMaXN0IHogPSBuZXcgTGlzdCgpOworCisgICAgIHkuc2V0KCIiKTsKKworICAgICBMaXN0W10geCA9IG5ldyBMaXN0W10ge3ksIHp9OworICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDg0L2FmdGVyL1Rlc3QuMS5pdGVtcyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90ODQvYWZ0ZXIvVGVzdC4xLml0ZW1zCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE2OWJmOTgKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDg0L2FmdGVyL1Rlc3QuMS5pdGVtcwpAQCAtMCwwICsxLDMgQEAKK0xpc3Q8amF2YS5sYW5nLlN0cmluZz5bXVxubmV3CitMaXN0PGphdmEubGFuZy5TdHJpbmc+W11cbnJldHVybiBvZiBmb28KK0xpc3Q8amF2YS5sYW5nLlN0cmluZz5cblBzaUxvY2FsVmFyaWFibGU6eApkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3Q4NC9hZnRlci9UZXN0Lml0ZW1zIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3Q4NC9hZnRlci9UZXN0Lml0ZW1zCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRhNjJlNDEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDg0L2FmdGVyL1Rlc3QuaXRlbXMKQEAgLTAsMCArMSwzIEBACitMaXN0W11cbm5ldworTGlzdFtdXG5yZXR1cm4gb2YgZm9vCitMaXN0XG5Qc2lMb2NhbFZhcmlhYmxlOngKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90ODQvYWZ0ZXIvdGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3Q4NC9hZnRlci90ZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTJmZGYwZQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90ODQvYWZ0ZXIvdGVzdC5qYXZhCkBAIC0wLDAgKzEsMTIgQEAKK2NsYXNzIExpc3Q8VD4geworICBUIHQ7Cit9CisKK2NsYXNzIFRlc3QgeworICBMaXN0W10gZm9vICgpeworICAgIExpc3QgeCA9IG51bGw7CisgICAgeC50ID0gIiI7CisKKyAgICByZXR1cm4gbmV3IExpc3RbXXt4fTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3Q4NC9iZWZvcmUvdGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3Q4NC9iZWZvcmUvdGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkyZmRmMGUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDg0L2JlZm9yZS90ZXN0LmphdmEKQEAgLTAsMCArMSwxMiBAQAorY2xhc3MgTGlzdDxUPiB7CisgIFQgdDsKK30KKworY2xhc3MgVGVzdCB7CisgIExpc3RbXSBmb28gKCl7CisgICAgTGlzdCB4ID0gbnVsbDsKKyAgICB4LnQgPSAiIjsKKworICAgIHJldHVybiBuZXcgTGlzdFtde3h9OworICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDg1L2FmdGVyL1Rlc3QuMS5pdGVtcyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90ODUvYWZ0ZXIvVGVzdC4xLml0ZW1zCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE3MjBmN2QKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDg1L2FmdGVyL1Rlc3QuMS5pdGVtcwpAQCAtMCwwICsxIEBACitMaXN0PGphdmEubGFuZy5TdHJpbmc+XG5Qc2lMb2NhbFZhcmlhYmxlOngKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90ODUvYWZ0ZXIvVGVzdC5pdGVtcyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90ODUvYWZ0ZXIvVGVzdC5pdGVtcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZDIwODhiCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3Q4NS9hZnRlci9UZXN0Lml0ZW1zCkBAIC0wLDAgKzEgQEAKK0xpc3RcblBzaUxvY2FsVmFyaWFibGU6eApkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3Q4NS9hZnRlci90ZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDg1L2FmdGVyL3Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ODdjOGZiCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3Q4NS9hZnRlci90ZXN0LmphdmEKQEAgLTAsMCArMSwxMiBAQAorY2xhc3MgTGlzdDxUPiB7CisgIDxBIGV4dGVuZHMgTGlzdDxUPj4gdm9pZCBmIChBIGEpeworICB9Cit9CisKK2NsYXNzIFRlc3QgeworICB2b2lkIGZvbyAoKXsKKyAgICBMaXN0IHggPSBudWxsOworICAgIExpc3Q8U3RyaW5nPiB5ID0gbnVsbDsKKyAgICB4LmYoeSk7CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90ODUvYmVmb3JlL3Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90ODUvYmVmb3JlL3Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ODdjOGZiCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3Q4NS9iZWZvcmUvdGVzdC5qYXZhCkBAIC0wLDAgKzEsMTIgQEAKK2NsYXNzIExpc3Q8VD4geworICA8QSBleHRlbmRzIExpc3Q8VD4+IHZvaWQgZiAoQSBhKXsKKyAgfQorfQorCitjbGFzcyBUZXN0IHsKKyAgdm9pZCBmb28gKCl7CisgICAgTGlzdCB4ID0gbnVsbDsKKyAgICBMaXN0PFN0cmluZz4geSA9IG51bGw7CisgICAgeC5mKHkpOworICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDg2L2FmdGVyL1Rlc3QuMS5pdGVtcyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90ODYvYWZ0ZXIvVGVzdC4xLml0ZW1zCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJkMjA4OGIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDg2L2FmdGVyL1Rlc3QuMS5pdGVtcwpAQCAtMCwwICsxIEBACitMaXN0XG5Qc2lMb2NhbFZhcmlhYmxlOngKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90ODYvYWZ0ZXIvVGVzdC5pdGVtcyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90ODYvYWZ0ZXIvVGVzdC5pdGVtcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZDIwODhiCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3Q4Ni9hZnRlci9UZXN0Lml0ZW1zCkBAIC0wLDAgKzEgQEAKK0xpc3RcblBzaUxvY2FsVmFyaWFibGU6eApkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3Q4Ni9hZnRlci90ZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDg2L2FmdGVyL3Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOGJlNWM3Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3Q4Ni9hZnRlci90ZXN0LmphdmEKQEAgLTAsMCArMSwxNSBAQAorY2xhc3MgTGlzdDxUPiB7CisgIFQgdDsKK30KKworY2xhc3MgTWlzdCBleHRlbmRzIExpc3R7CisKK30KKworY2xhc3MgVGVzdCB7CisgIHZvaWQgZm9vICgpeworICAgIExpc3QgeCA9IG5ldyBNaXN0KCk7CisKKyAgICB4LnQgPSAiIjsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3Q4Ni9iZWZvcmUvdGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3Q4Ni9iZWZvcmUvdGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI4YmU1YzcKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDg2L2JlZm9yZS90ZXN0LmphdmEKQEAgLTAsMCArMSwxNSBAQAorY2xhc3MgTGlzdDxUPiB7CisgIFQgdDsKK30KKworY2xhc3MgTWlzdCBleHRlbmRzIExpc3R7CisKK30KKworY2xhc3MgVGVzdCB7CisgIHZvaWQgZm9vICgpeworICAgIExpc3QgeCA9IG5ldyBNaXN0KCk7CisKKyAgICB4LnQgPSAiIjsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3Q4Ny9hZnRlci9UZXN0LjEuaXRlbXMgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDg3L2FmdGVyL1Rlc3QuMS5pdGVtcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YTE2MzJjCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3Q4Ny9hZnRlci9UZXN0LjEuaXRlbXMKQEAgLTAsMCArMSwyIEBACitMaXN0PGludFtdPlxuUHNpTG9jYWxWYXJpYWJsZTp4CitMaXN0PGludFtdPlxubmV3CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDg3L2FmdGVyL1Rlc3QuaXRlbXMgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDg3L2FmdGVyL1Rlc3QuaXRlbXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzg1NmU5ZgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90ODcvYWZ0ZXIvVGVzdC5pdGVtcwpAQCAtMCwwICsxLDIgQEAKK0xpc3RcblBzaUxvY2FsVmFyaWFibGU6eAorTGlzdFxubmV3CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDg3L2FmdGVyL3Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90ODcvYWZ0ZXIvdGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhhNzIwNmYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDg3L2FmdGVyL3Rlc3QuamF2YQpAQCAtMCwwICsxLDExIEBACitjbGFzcyBMaXN0PFQ+IHsKKyAgVCB0OworfQorCitjbGFzcyBUZXN0IHsKKyAgdm9pZCBmb28gKCl7CisgICAgTGlzdCB4ID0gbmV3IExpc3QoKTsKKworICAgIGludCBbXSB5ID0gKGludFtdKSB4LnQ7CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90ODcvYmVmb3JlL3Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90ODcvYmVmb3JlL3Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YTcyMDZmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3Q4Ny9iZWZvcmUvdGVzdC5qYXZhCkBAIC0wLDAgKzEsMTEgQEAKK2NsYXNzIExpc3Q8VD4geworICBUIHQ7Cit9CisKK2NsYXNzIFRlc3QgeworICB2b2lkIGZvbyAoKXsKKyAgICBMaXN0IHggPSBuZXcgTGlzdCgpOworCisgICAgaW50IFtdIHkgPSAoaW50W10pIHgudDsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3Q4OC9hZnRlci9UZXN0LjEuaXRlbXMgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDg4L2FmdGVyL1Rlc3QuMS5pdGVtcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YTE2MzJjCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3Q4OC9hZnRlci9UZXN0LjEuaXRlbXMKQEAgLTAsMCArMSwyIEBACitMaXN0PGludFtdPlxuUHNpTG9jYWxWYXJpYWJsZTp4CitMaXN0PGludFtdPlxubmV3CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDg4L2FmdGVyL1Rlc3QuaXRlbXMgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDg4L2FmdGVyL1Rlc3QuaXRlbXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzg1NmU5ZgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90ODgvYWZ0ZXIvVGVzdC5pdGVtcwpAQCAtMCwwICsxLDIgQEAKK0xpc3RcblBzaUxvY2FsVmFyaWFibGU6eAorTGlzdFxubmV3CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDg4L2FmdGVyL3Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90ODgvYWZ0ZXIvdGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjliZjM5YjYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDg4L2FmdGVyL3Rlc3QuamF2YQpAQCAtMCwwICsxLDExIEBACitjbGFzcyBMaXN0PFQ+IHsKKyAgVCB0OworfQorCitjbGFzcyBUZXN0IHsKKyAgdm9pZCBmb28gKCl7CisgICAgTGlzdCB4ID0gbmV3IExpc3QoKTsKKworICAgIHgudCA9IG5ldyBpbnRbM107CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90ODgvYmVmb3JlL3Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90ODgvYmVmb3JlL3Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YmYzOWI2Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3Q4OC9iZWZvcmUvdGVzdC5qYXZhCkBAIC0wLDAgKzEsMTEgQEAKK2NsYXNzIExpc3Q8VD4geworICBUIHQ7Cit9CisKK2NsYXNzIFRlc3QgeworICB2b2lkIGZvbyAoKXsKKyAgICBMaXN0IHggPSBuZXcgTGlzdCgpOworCisgICAgeC50ID0gbmV3IGludFszXTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3Q4OS9hZnRlci9UZXN0LjEuaXRlbXMgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDg5L2FmdGVyL1Rlc3QuMS5pdGVtcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kM2RlMjQyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3Q4OS9hZnRlci9UZXN0LjEuaXRlbXMKQEAgLTAsMCArMSwyIEBACitMaXN0PGphdmEubGFuZy5TdHJpbmc+XG5Qc2lMb2NhbFZhcmlhYmxlOngKK0xpc3Q8amF2YS5sYW5nLlN0cmluZz5cbnBhcmFtZXRlciAwIG9mIFRlc3QKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90ODkvYWZ0ZXIvVGVzdC5pdGVtcyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90ODkvYWZ0ZXIvVGVzdC5pdGVtcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOTFlZGQ1Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3Q4OS9hZnRlci9UZXN0Lml0ZW1zCkBAIC0wLDAgKzEsMiBAQAorTGlzdFxuUHNpTG9jYWxWYXJpYWJsZTp4CitMaXN0XG5wYXJhbWV0ZXIgMCBvZiBUZXN0CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDg5L2FmdGVyL3Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90ODkvYWZ0ZXIvdGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM4NGYyYTUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDg5L2FmdGVyL3Rlc3QuamF2YQpAQCAtMCwwICsxLDE0IEBACitjbGFzcyBMaXN0PFQ+IHsKKyAgVCB0OworfQorCitjbGFzcyBUZXN0IHsKKyAgVGVzdChMaXN0IHgpeworICB9CisKKyAgdm9pZCBmb28gKCl7CisgICAgTGlzdCB4ID0gbnVsbDsKKyAgICB4LnQgPSAiIjsKKyAgICBUZXN0IHkgPSBuZXcgVGVzdCh4KSB7fTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3Q4OS9iZWZvcmUvdGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3Q4OS9iZWZvcmUvdGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM4NGYyYTUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDg5L2JlZm9yZS90ZXN0LmphdmEKQEAgLTAsMCArMSwxNCBAQAorY2xhc3MgTGlzdDxUPiB7CisgIFQgdDsKK30KKworY2xhc3MgVGVzdCB7CisgIFRlc3QoTGlzdCB4KXsKKyAgfQorCisgIHZvaWQgZm9vICgpeworICAgIExpc3QgeCA9IG51bGw7CisgICAgeC50ID0gIiI7CisgICAgVGVzdCB5ID0gbmV3IFRlc3QoeCkge307CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90OTAvYWZ0ZXIvVGVzdC4xLml0ZW1zIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3Q5MC9hZnRlci9UZXN0LjEuaXRlbXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDM3NWVmOQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90OTAvYWZ0ZXIvVGVzdC4xLml0ZW1zCkBAIC0wLDAgKzEsMiBAQAorTGlzdFxucGFyYW1ldGVyIDAgb2YgZgorTGlzdFxucGFyYW1ldGVyIDAgb2YgZwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3Q5MC9hZnRlci9UZXN0Lml0ZW1zIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3Q5MC9hZnRlci9UZXN0Lml0ZW1zCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQzNzVlZjkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDkwL2FmdGVyL1Rlc3QuaXRlbXMKQEAgLTAsMCArMSwyIEBACitMaXN0XG5wYXJhbWV0ZXIgMCBvZiBmCitMaXN0XG5wYXJhbWV0ZXIgMCBvZiBnCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDkwL2FmdGVyL3Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90OTAvYWZ0ZXIvdGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZkZmQyYjAKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDkwL2FmdGVyL3Rlc3QuamF2YQpAQCAtMCwwICsxLDIzIEBACitjbGFzcyBMaXN0PFQ+IHsKKyAgVCB0OworfQorCitjbGFzcyBTdXBlciB7CisgICB2b2lkIGYgKExpc3QgeCl7CisgICB9Cit9CisKK2NsYXNzIFRlc3QgZXh0ZW5kcyBTdXBlciB7CisgIHZvaWQgZiAoTGlzdCB4KXsKKyAgICAgeC50ID0gIiI7CisgIH0KKworICB2b2lkIGcgKExpc3QgeCl7CisgICAgIHgudCA9ICIiOworICB9Cit9CisKK2NsYXNzIFN1YiBleHRlbmRzIFRlc3R7CisgIHZvaWQgZyAoTGlzdCB4KXsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3Q5MC9iZWZvcmUvdGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3Q5MC9iZWZvcmUvdGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZkZmQyYjAKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDkwL2JlZm9yZS90ZXN0LmphdmEKQEAgLTAsMCArMSwyMyBAQAorY2xhc3MgTGlzdDxUPiB7CisgIFQgdDsKK30KKworY2xhc3MgU3VwZXIgeworICAgdm9pZCBmIChMaXN0IHgpeworICAgfQorfQorCitjbGFzcyBUZXN0IGV4dGVuZHMgU3VwZXIgeworICB2b2lkIGYgKExpc3QgeCl7CisgICAgIHgudCA9ICIiOworICB9CisKKyAgdm9pZCBnIChMaXN0IHgpeworICAgICB4LnQgPSAiIjsKKyAgfQorfQorCitjbGFzcyBTdWIgZXh0ZW5kcyBUZXN0eworICB2b2lkIGcgKExpc3QgeCl7CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90OTEvYWZ0ZXIvVGVzdC4xLml0ZW1zIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3Q5MS9hZnRlci9UZXN0LjEuaXRlbXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTE3MTY1YgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90OTEvYWZ0ZXIvVGVzdC4xLml0ZW1zCkBAIC0wLDAgKzEsNCBAQAorTGlzdDxqYXZhLmxhbmcuU3RyaW5nPlxucGFyYW1ldGVyIDAgb2YgZgorTGlzdDxqYXZhLmxhbmcuU3RyaW5nPlxucGFyYW1ldGVyIDAgb2YgZgorTGlzdDxqYXZhLmxhbmcuU3RyaW5nPlxucGFyYW1ldGVyIDAgb2YgZworTGlzdDxqYXZhLmxhbmcuU3RyaW5nPlxucGFyYW1ldGVyIDAgb2YgZwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3Q5MS9hZnRlci9UZXN0Lml0ZW1zIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3Q5MS9hZnRlci9UZXN0Lml0ZW1zCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI2ZmQ2MjAKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDkxL2FmdGVyL1Rlc3QuaXRlbXMKQEAgLTAsMCArMSw0IEBACitMaXN0XG5wYXJhbWV0ZXIgMCBvZiBmCitMaXN0XG5wYXJhbWV0ZXIgMCBvZiBmCitMaXN0XG5wYXJhbWV0ZXIgMCBvZiBnCitMaXN0XG5wYXJhbWV0ZXIgMCBvZiBnCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDkxL2FmdGVyL3Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90OTEvYWZ0ZXIvdGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJmZWNkM2IKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDkxL2FmdGVyL3Rlc3QuamF2YQpAQCAtMCwwICsxLDI2IEBACitjbGFzcyBMaXN0PFQ+IHsKKyAgVCB0OworfQorCitjbGFzcyBUZXN0eworICBjbGFzcyBTdXBlciB7CisgICAgIHZvaWQgZiAoTGlzdCB4KXsKKyAgICAgfQorICB9CisKKyAgY2xhc3MgTWlkZGxlIGV4dGVuZHMgU3VwZXIgeworICAgIHZvaWQgZiAoTGlzdCB4KXsKKyAgICAgICBnKHgpOworICAgICAgIHgudCA9ICIiOworICAgIH0KKworICAgIHZvaWQgZyAoTGlzdCB4KXsKKyAgICAgeC50ID0gIiI7CisgICB9CisgIH0KKworICBjbGFzcyBTdWIgZXh0ZW5kcyBNaWRkbGV7CisgICAgIHZvaWQgZyAoTGlzdCB4KXsKKyAgICB9CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDkxL2JlZm9yZS90ZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDkxL2JlZm9yZS90ZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmZlY2QzYgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90OTEvYmVmb3JlL3Rlc3QuamF2YQpAQCAtMCwwICsxLDI2IEBACitjbGFzcyBMaXN0PFQ+IHsKKyAgVCB0OworfQorCitjbGFzcyBUZXN0eworICBjbGFzcyBTdXBlciB7CisgICAgIHZvaWQgZiAoTGlzdCB4KXsKKyAgICAgfQorICB9CisKKyAgY2xhc3MgTWlkZGxlIGV4dGVuZHMgU3VwZXIgeworICAgIHZvaWQgZiAoTGlzdCB4KXsKKyAgICAgICBnKHgpOworICAgICAgIHgudCA9ICIiOworICAgIH0KKworICAgIHZvaWQgZyAoTGlzdCB4KXsKKyAgICAgeC50ID0gIiI7CisgICB9CisgIH0KKworICBjbGFzcyBTdWIgZXh0ZW5kcyBNaWRkbGV7CisgICAgIHZvaWQgZyAoTGlzdCB4KXsKKyAgICB9CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDkyL2FmdGVyL1Rlc3QuMS5pdGVtcyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90OTIvYWZ0ZXIvVGVzdC4xLml0ZW1zCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhiNmU3MmUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDkyL2FmdGVyL1Rlc3QuMS5pdGVtcwpAQCAtMCwwICsxLDIgQEAKK0xpc3Q8amF2YS5sYW5nLkludGVnZXI+XG5yZXR1cm4gb2YgZworTGlzdDxqYXZhLmxhbmcuSW50ZWdlcj5cbnJldHVybiBvZiBnCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDkyL2FmdGVyL1Rlc3QuaXRlbXMgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDkyL2FmdGVyL1Rlc3QuaXRlbXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjc4YWU3MwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90OTIvYWZ0ZXIvVGVzdC5pdGVtcwpAQCAtMCwwICsxLDIgQEAKK0xpc3RcbnJldHVybiBvZiBnCitMaXN0XG5yZXR1cm4gb2YgZwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3Q5Mi9hZnRlci90ZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDkyL2FmdGVyL3Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMjA0YjI0Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3Q5Mi9hZnRlci90ZXN0LmphdmEKQEAgLTAsMCArMSwxNiBAQAorY2xhc3MgTGlzdDxUPiB7CisgIFQgdDsKK30KKworY2xhc3MgVGVzdHsKKyAgY2xhc3MgTWlkZGxlIGV4dGVuZHMgU3VwZXIgeworICAgIExpc3QgZyAoKXsKKyAgICAgcmV0dXJuIG5ldyBMaXN0PEludGVnZXI+KCk7CisgICB9CisgIH0KKworICBjbGFzcyBTdWIgZXh0ZW5kcyBNaWRkbGV7CisgICAgIExpc3QgZyAoKXsKKyAgICB9CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDkyL2JlZm9yZS90ZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDkyL2JlZm9yZS90ZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTIwNGIyNAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90OTIvYmVmb3JlL3Rlc3QuamF2YQpAQCAtMCwwICsxLDE2IEBACitjbGFzcyBMaXN0PFQ+IHsKKyAgVCB0OworfQorCitjbGFzcyBUZXN0eworICBjbGFzcyBNaWRkbGUgZXh0ZW5kcyBTdXBlciB7CisgICAgTGlzdCBnICgpeworICAgICByZXR1cm4gbmV3IExpc3Q8SW50ZWdlcj4oKTsKKyAgIH0KKyAgfQorCisgIGNsYXNzIFN1YiBleHRlbmRzIE1pZGRsZXsKKyAgICAgTGlzdCBnICgpeworICAgIH0KKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90OTMvYWZ0ZXIvVGVzdC4xLml0ZW1zIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3Q5My9hZnRlci9UZXN0LjEuaXRlbXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjRhMjc0OQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90OTMvYWZ0ZXIvVGVzdC4xLml0ZW1zCkBAIC0wLDAgKzEgQEAKK0xpc3Q8amF2YS5sYW5nLkludGVnZXI+XG5yZXR1cm4gb2YgZwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3Q5My9hZnRlci9UZXN0Lml0ZW1zIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3Q5My9hZnRlci9UZXN0Lml0ZW1zCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZjNzMzODMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDkzL2FmdGVyL1Rlc3QuaXRlbXMKQEAgLTAsMCArMSBAQAorTGlzdFxucmV0dXJuIG9mIGcKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90OTMvYWZ0ZXIvdGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3Q5My9hZnRlci90ZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmMyYTFiYQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90OTMvYWZ0ZXIvdGVzdC5qYXZhCkBAIC0wLDAgKzEsOSBAQAorY2xhc3MgTGlzdDxUPiB7CisgIFQgdDsKK30KKworY2xhc3MgVGVzdHsKKyAgTGlzdCBnICgpeworICAgIHJldHVybiBuZXcgTGlzdDxJbnRlZ2VyPigpOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3Q5My9iZWZvcmUvdGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3Q5My9iZWZvcmUvdGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZjMmExYmEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDkzL2JlZm9yZS90ZXN0LmphdmEKQEAgLTAsMCArMSw5IEBACitjbGFzcyBMaXN0PFQ+IHsKKyAgVCB0OworfQorCitjbGFzcyBUZXN0eworICBMaXN0IGcgKCl7CisgICAgcmV0dXJuIG5ldyBMaXN0PEludGVnZXI+KCk7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDk0L2FmdGVyL1Rlc3QuMS5pdGVtcyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90OTQvYWZ0ZXIvVGVzdC4xLml0ZW1zCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZhYjgwYjYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDk0L2FmdGVyL1Rlc3QuMS5pdGVtcwpAQCAtMCwwICsxLDQgQEAKK0xpc3Q8amF2YS5sYW5nLlN0cmluZz5cblBzaUxvY2FsVmFyaWFibGU6eAorTGlzdDxqYXZhLmxhbmcuU3RyaW5nPlxuUHNpTG9jYWxWYXJpYWJsZTp5CitMaXN0PGphdmEubGFuZy5TdHJpbmc+XG5uZXcKK0xpc3Q8amF2YS5sYW5nLlN0cmluZz5cbm5ldwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3Q5NC9hZnRlci9UZXN0Lml0ZW1zIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3Q5NC9hZnRlci9UZXN0Lml0ZW1zCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVkNTUwNTgKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDk0L2FmdGVyL1Rlc3QuaXRlbXMKQEAgLTAsMCArMSw0IEBACitMaXN0XG5Qc2lMb2NhbFZhcmlhYmxlOngKK0xpc3RcblBzaUxvY2FsVmFyaWFibGU6eQorTGlzdFxubmV3CitMaXN0XG5uZXcKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90OTQvYWZ0ZXIvdGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3Q5NC9hZnRlci90ZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDY3NTIwNQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90OTQvYWZ0ZXIvdGVzdC5qYXZhCkBAIC0wLDAgKzEsMTIgQEAKK2NsYXNzIExpc3Q8VD4geworICBUIHQ7Cit9CisKK2NsYXNzIFRlc3R7CisgIHZvaWQgZm9vKCl7CisgICAgIExpc3QgeCA9IG5ldyBMaXN0KCk7CisgICAgIExpc3QgeSA9IG5ldyBMaXN0KCk7CisKKyAgICAgKHRydWUgPyB4IDogeSkudCA9ICIiOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3Q5NC9iZWZvcmUvdGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3Q5NC9iZWZvcmUvdGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ2NzUyMDUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDk0L2JlZm9yZS90ZXN0LmphdmEKQEAgLTAsMCArMSwxMiBAQAorY2xhc3MgTGlzdDxUPiB7CisgIFQgdDsKK30KKworY2xhc3MgVGVzdHsKKyAgdm9pZCBmb28oKXsKKyAgICAgTGlzdCB4ID0gbmV3IExpc3QoKTsKKyAgICAgTGlzdCB5ID0gbmV3IExpc3QoKTsKKworICAgICAodHJ1ZSA/IHggOiB5KS50ID0gIiI7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDk1L2FmdGVyL1Rlc3QuMS5pdGVtcyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90OTUvYWZ0ZXIvVGVzdC4xLml0ZW1zCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ3OGQ1NjYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDk1L2FmdGVyL1Rlc3QuMS5pdGVtcwpAQCAtMCwwICsxLDIgQEAKK0xpc3Q8Qj5cblBzaUxvY2FsVmFyaWFibGU6eQorTGlzdFxuUHNpTG9jYWxWYXJpYWJsZTp4CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDk1L2FmdGVyL1Rlc3QuaXRlbXMgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDk1L2FmdGVyL1Rlc3QuaXRlbXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGI3MDBjNAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90OTUvYWZ0ZXIvVGVzdC5pdGVtcwpAQCAtMCwwICsxLDIgQEAKK0xpc3RcblBzaUxvY2FsVmFyaWFibGU6eAorTGlzdFxuUHNpTG9jYWxWYXJpYWJsZTp5CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDk1L2FmdGVyL3Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90OTUvYWZ0ZXIvdGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQxZmJkNGEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDk1L2FmdGVyL3Rlc3QuamF2YQpAQCAtMCwwICsxLDE1IEBACitjbGFzcyBMaXN0PFQ+IHsKKyAgVCB0OworfQorCitjbGFzcyBBIHt9CitjbGFzcyBCIGV4dGVuZHMgQSB7fQorCitjbGFzcyBUZXN0eworICB2b2lkIGZvbygpeworICAgICBMaXN0IHggPSBuZXcgTGlzdDxBPigpOworICAgICBMaXN0IHkgPSBuZXcgTGlzdDxCPigpOworCisgICAgIHggPSB5OworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3Q5NS9iZWZvcmUvdGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3Q5NS9iZWZvcmUvdGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQxZmJkNGEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDk1L2JlZm9yZS90ZXN0LmphdmEKQEAgLTAsMCArMSwxNSBAQAorY2xhc3MgTGlzdDxUPiB7CisgIFQgdDsKK30KKworY2xhc3MgQSB7fQorY2xhc3MgQiBleHRlbmRzIEEge30KKworY2xhc3MgVGVzdHsKKyAgdm9pZCBmb28oKXsKKyAgICAgTGlzdCB4ID0gbmV3IExpc3Q8QT4oKTsKKyAgICAgTGlzdCB5ID0gbmV3IExpc3Q8Qj4oKTsKKworICAgICB4ID0geTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90OTYvYWZ0ZXIvVGVzdC4xLml0ZW1zIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3Q5Ni9hZnRlci9UZXN0LjEuaXRlbXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODU0MzExYwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90OTYvYWZ0ZXIvVGVzdC4xLml0ZW1zCkBAIC0wLDAgKzEsNCBAQAorTGlzdDxMaXN0PGphdmEuaW8uU2VyaWFsaXphYmxlPj5cblBzaUxvY2FsVmFyaWFibGU6eAorTGlzdDxMaXN0PGphdmEuaW8uU2VyaWFsaXphYmxlPj5cblBzaUxvY2FsVmFyaWFibGU6eQorTGlzdDxMaXN0PGphdmEuaW8uU2VyaWFsaXphYmxlPj5cbm5ldworTGlzdDxMaXN0PGphdmEuaW8uU2VyaWFsaXphYmxlPj5cbm5ldwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3Q5Ni9hZnRlci9UZXN0Lml0ZW1zIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3Q5Ni9hZnRlci9UZXN0Lml0ZW1zCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZjNzZkYWQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDk2L2FmdGVyL1Rlc3QuaXRlbXMKQEAgLTAsMCArMSw0IEBACitMaXN0PExpc3Q+XG5Qc2lMb2NhbFZhcmlhYmxlOngKK0xpc3Q8TGlzdD5cblBzaUxvY2FsVmFyaWFibGU6eQorTGlzdDxMaXN0PlxubmV3CitMaXN0PExpc3Q+XG5uZXcKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90OTYvYWZ0ZXIvdGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3Q5Ni9hZnRlci90ZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjE1ZDUzOAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90OTYvYWZ0ZXIvdGVzdC5qYXZhCkBAIC0wLDAgKzEsMTcgQEAKK2NsYXNzIExpc3Q8VD4geworICBUIHQ7Cit9CisKK2NsYXNzIEEge30KK2NsYXNzIEIgZXh0ZW5kcyBBIHt9CisKK2NsYXNzIFRlc3R7CisgIHZvaWQgZm9vKCl7CisgICAgIExpc3Q8TGlzdD4geCA9IG5ldyBMaXN0PExpc3Q+KCk7CisgICAgIExpc3Q8TGlzdD4geSA9IG5ldyBMaXN0PExpc3Q+KCk7CisKKyAgICAgeC50LnQgPSAiIjsKKyAgICAgeS50ID0geC50OworICAgICB5LnQudCA9IG5ldyBJbnRlZ2VyKDMpOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3Q5Ni9iZWZvcmUvdGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3Q5Ni9iZWZvcmUvdGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYxNWQ1MzgKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDk2L2JlZm9yZS90ZXN0LmphdmEKQEAgLTAsMCArMSwxNyBAQAorY2xhc3MgTGlzdDxUPiB7CisgIFQgdDsKK30KKworY2xhc3MgQSB7fQorY2xhc3MgQiBleHRlbmRzIEEge30KKworY2xhc3MgVGVzdHsKKyAgdm9pZCBmb28oKXsKKyAgICAgTGlzdDxMaXN0PiB4ID0gbmV3IExpc3Q8TGlzdD4oKTsKKyAgICAgTGlzdDxMaXN0PiB5ID0gbmV3IExpc3Q8TGlzdD4oKTsKKworICAgICB4LnQudCA9ICIiOworICAgICB5LnQgPSB4LnQ7CisgICAgIHkudC50ID0gbmV3IEludGVnZXIoMyk7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDk3L2FmdGVyL1Rlc3QuMS5pdGVtcyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90OTcvYWZ0ZXIvVGVzdC4xLml0ZW1zCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE3MjBmN2QKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDk3L2FmdGVyL1Rlc3QuMS5pdGVtcwpAQCAtMCwwICsxIEBACitMaXN0PGphdmEubGFuZy5TdHJpbmc+XG5Qc2lMb2NhbFZhcmlhYmxlOngKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90OTcvYWZ0ZXIvVGVzdC5pdGVtcyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90OTcvYWZ0ZXIvVGVzdC5pdGVtcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZDIwODhiCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3Q5Ny9hZnRlci9UZXN0Lml0ZW1zCkBAIC0wLDAgKzEgQEAKK0xpc3RcblBzaUxvY2FsVmFyaWFibGU6eApkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3Q5Ny9hZnRlci90ZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDk3L2FmdGVyL3Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNTI0YTI2Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3Q5Ny9hZnRlci90ZXN0LmphdmEKQEAgLTAsMCArMSwxNCBAQAorY2xhc3MgTGlzdDxUPiB7CisgIFQgdDsKK30KKworaW50ZXJmYWNlIEEge30KKworY2xhc3MgVGVzdHsKKyAgQSBmb28oKXsKKyAgICBMaXN0IHggPSBudWxsOworICAgIHgudCA9ICIiOworCisgICAgcmV0dXJuIChBKSB4OworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3Q5Ny9iZWZvcmUvdGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3Q5Ny9iZWZvcmUvdGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE1MjRhMjYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDk3L2JlZm9yZS90ZXN0LmphdmEKQEAgLTAsMCArMSwxNCBAQAorY2xhc3MgTGlzdDxUPiB7CisgIFQgdDsKK30KKworaW50ZXJmYWNlIEEge30KKworY2xhc3MgVGVzdHsKKyAgQSBmb28oKXsKKyAgICBMaXN0IHggPSBudWxsOworICAgIHgudCA9ICIiOworCisgICAgcmV0dXJuIChBKSB4OworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3Q5OC9hZnRlci9UZXN0LjEuaXRlbXMgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDk4L2FmdGVyL1Rlc3QuMS5pdGVtcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZDIwODhiCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3Q5OC9hZnRlci9UZXN0LjEuaXRlbXMKQEAgLTAsMCArMSBAQAorTGlzdFxuUHNpTG9jYWxWYXJpYWJsZTp4CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDk4L2FmdGVyL1Rlc3QuaXRlbXMgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDk4L2FmdGVyL1Rlc3QuaXRlbXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmQyMDg4YgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90OTgvYWZ0ZXIvVGVzdC5pdGVtcwpAQCAtMCwwICsxIEBACitMaXN0XG5Qc2lMb2NhbFZhcmlhYmxlOngKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90OTgvYWZ0ZXIvdGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3Q5OC9hZnRlci90ZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDkxMTcwNQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90OTgvYWZ0ZXIvdGVzdC5qYXZhCkBAIC0wLDAgKzEsMTUgQEAKK2NsYXNzIExpc3Q8VD4geworICBjbGFzcyBNaXN0PEEgZXh0ZW5kcyBUPnsKKyAgICBBIGE7CisgIH0KKworICBUIHQ7CisgIE1pc3QgbTsKK30KKworY2xhc3MgVGVzdHsKKyAgdm9pZCBmb28oKXsKKyAgICBMaXN0IHggPSBudWxsOworICAgIHgubS5hID0gIiI7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDk4L2JlZm9yZS90ZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDk4L2JlZm9yZS90ZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDkxMTcwNQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90OTgvYmVmb3JlL3Rlc3QuamF2YQpAQCAtMCwwICsxLDE1IEBACitjbGFzcyBMaXN0PFQ+IHsKKyAgY2xhc3MgTWlzdDxBIGV4dGVuZHMgVD57CisgICAgQSBhOworICB9CisKKyAgVCB0OworICBNaXN0IG07Cit9CisKK2NsYXNzIFRlc3R7CisgIHZvaWQgZm9vKCl7CisgICAgTGlzdCB4ID0gbnVsbDsKKyAgICB4Lm0uYSA9ICIiOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3Q5OS9hZnRlci9UZXN0LjEuaXRlbXMgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDk5L2FmdGVyL1Rlc3QuMS5pdGVtcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOTcwNDhlCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3Q5OS9hZnRlci9UZXN0LjEuaXRlbXMKQEAgLTAsMCArMSBAQAorTGlzdDxqYXZhLmxhbmcuT2JqZWN0PlxuUHNpTG9jYWxWYXJpYWJsZTp4CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDk5L2FmdGVyL1Rlc3QuaXRlbXMgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3JpbmcvdHlwZUNvb2svdDk5L2FmdGVyL1Rlc3QuaXRlbXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmQyMDg4YgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90OTkvYWZ0ZXIvVGVzdC5pdGVtcwpAQCAtMCwwICsxIEBACitMaXN0XG5Qc2lMb2NhbFZhcmlhYmxlOngKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90OTkvYWZ0ZXIvdGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3Q5OS9hZnRlci90ZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWYzNDE1MQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90OTkvYWZ0ZXIvdGVzdC5qYXZhCkBAIC0wLDAgKzEsMTggQEAKK2NsYXNzIExpc3Q8VD4geworICBUIHQ7Cit9CisKK2ludGVyZmFjZSBBIHsKKyAgICAgTGlzdCBnZXQoKTsKK30KKworY2xhc3MgVGVzdHsKKworICB2b2lkIGZvbygpeworICAgIExpc3QgeCA9IG5ldyBBKCkgeworICAgICAgcHVibGljIExpc3QgZ2V0KCl7CisgICAgICAgIHJldHVybiBuZXcgTGlzdDxTdHJpbmc+KCk7CisgICAgICB9CisgICAgfS5nZXQoKTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90OTkvYmVmb3JlL3Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy90eXBlQ29vay90OTkvYmVmb3JlL3Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZjM0MTUxCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3R5cGVDb29rL3Q5OS9iZWZvcmUvdGVzdC5qYXZhCkBAIC0wLDAgKzEsMTggQEAKK2NsYXNzIExpc3Q8VD4geworICBUIHQ7Cit9CisKK2ludGVyZmFjZSBBIHsKKyAgICAgTGlzdCBnZXQoKTsKK30KKworY2xhc3MgVGVzdHsKKworICB2b2lkIGZvbygpeworICAgIExpc3QgeCA9IG5ldyBBKCkgeworICAgICAgcHVibGljIExpc3QgZ2V0KCl7CisgICAgICAgIHJldHVybiBuZXcgTGlzdDxTdHJpbmc+KCk7CisgICAgICB9CisgICAgfS5nZXQoKTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy93cmFwUmV0dXJuVmFsdWUvYW5vbnltb3VzL2FmdGVyL1Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy93cmFwUmV0dXJuVmFsdWUvYW5vbnltb3VzL2FmdGVyL1Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZTlkOTdmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3dyYXBSZXR1cm5WYWx1ZS9hbm9ueW1vdXMvYWZ0ZXIvVGVzdC5qYXZhCkBAIC0wLDAgKzEsMTggQEAKK2NsYXNzIFRlc3QgeworICAgcHVibGljIFdyYXBwZXIgZm9vKGludCBwKSB7CisgICAJCU9iamVjdCBvID0gbmV3IE9iamVjdCgpIHsKKyAgIAkJCXByaXZhdGUgU3RyaW5nIG15SW50RnVsbCA9ICIiOworICAgCQkJcHVibGljIFN0cmluZyBnZXRJbnRGdWxsKCkgeworICAgCQkJCXJldHVybiBteUludEZ1bGw7CisgICAJCQl9CisgICAJCX07CisKKyAgIAkJaWYgKHAgPiAwKSB7CisgICAJCQlyZXR1cm4gbmV3IFdyYXBwZXIoIiIpOworICAgCQl9IGVsc2UgeworICAgCQkJcmV0dXJuIG5ldyBXcmFwcGVyKCIiKTsKKyAgIAkJfQorICAgCX0KKworCit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3dyYXBSZXR1cm5WYWx1ZS9hbm9ueW1vdXMvYWZ0ZXIvV3JhcHBlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3dyYXBSZXR1cm5WYWx1ZS9hbm9ueW1vdXMvYWZ0ZXIvV3JhcHBlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRlY2E3MjMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3Jpbmcvd3JhcFJldHVyblZhbHVlL2Fub255bW91cy9hZnRlci9XcmFwcGVyLmphdmEKQEAgLTAsMCArMSwxMCBAQAorY2xhc3MgV3JhcHBlciB7CisgIFN0cmluZyBteUZpZWxkOworICBXcmFwcGVyKFN0cmluZyBzKSB7CisgICAgbXlGaWVsZCA9IHM7CisgIH0KKworICBTdHJpbmcgZ2V0TXlGaWVsZCgpIHsKKyAgICByZXR1cm4gbXlGaWVsZDsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy93cmFwUmV0dXJuVmFsdWUvYW5vbnltb3VzL2JlZm9yZS9UZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3Jpbmcvd3JhcFJldHVyblZhbHVlL2Fub255bW91cy9iZWZvcmUvVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjllNDhlZWIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3Jpbmcvd3JhcFJldHVyblZhbHVlL2Fub255bW91cy9iZWZvcmUvVGVzdC5qYXZhCkBAIC0wLDAgKzEsMTggQEAKK2NsYXNzIFRlc3QgeworICAgcHVibGljIFN0cmluZyBmb28oaW50IHApIHsKKyAgIAkJT2JqZWN0IG8gPSBuZXcgT2JqZWN0KCkgeworICAgCQkJcHJpdmF0ZSBTdHJpbmcgbXlJbnRGdWxsID0gIiI7CisgICAJCQlwdWJsaWMgU3RyaW5nIGdldEludEZ1bGwoKSB7CisgICAJCQkJcmV0dXJuIG15SW50RnVsbDsKKyAgIAkJCX0KKyAgIAkJfTsKKworICAgCQlpZiAocCA+IDApIHsKKyAgIAkJCXJldHVybiAiIjsKKyAgIAkJfSBlbHNlIHsKKyAgIAkJCXJldHVybiAiIjsKKyAgIAkJfQorICAgCX0KKworCit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3dyYXBSZXR1cm5WYWx1ZS9hbm9ueW1vdXMvYmVmb3JlL1dyYXBwZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy93cmFwUmV0dXJuVmFsdWUvYW5vbnltb3VzL2JlZm9yZS9XcmFwcGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGVjYTcyMwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy93cmFwUmV0dXJuVmFsdWUvYW5vbnltb3VzL2JlZm9yZS9XcmFwcGVyLmphdmEKQEAgLTAsMCArMSwxMCBAQAorY2xhc3MgV3JhcHBlciB7CisgIFN0cmluZyBteUZpZWxkOworICBXcmFwcGVyKFN0cmluZyBzKSB7CisgICAgbXlGaWVsZCA9IHM7CisgIH0KKworICBTdHJpbmcgZ2V0TXlGaWVsZCgpIHsKKyAgICByZXR1cm4gbXlGaWVsZDsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy93cmFwUmV0dXJuVmFsdWUvZ2VuZXJpY3MvYWZ0ZXIvVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3dyYXBSZXR1cm5WYWx1ZS9nZW5lcmljcy9hZnRlci9UZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTJmMzY1ZQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy93cmFwUmV0dXJuVmFsdWUvZ2VuZXJpY3MvYWZ0ZXIvVGVzdC5qYXZhCkBAIC0wLDAgKzEsNyBAQAorY2xhc3MgVGVzdDxUPiB7CisgIFQgbXlUOworCisgICAgV3JhcHBlcjxUPiBmb28oKSB7CisgICAgcmV0dXJuIG5ldyBXcmFwcGVyPFQ+KG15VCk7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3Jpbmcvd3JhcFJldHVyblZhbHVlL2dlbmVyaWNzL2FmdGVyL1dyYXBwZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy93cmFwUmV0dXJuVmFsdWUvZ2VuZXJpY3MvYWZ0ZXIvV3JhcHBlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBiMzUxZWUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3Jpbmcvd3JhcFJldHVyblZhbHVlL2dlbmVyaWNzL2FmdGVyL1dyYXBwZXIuamF2YQpAQCAtMCwwICsxLDEzIEBACitwdWJsaWMgY2xhc3MgV3JhcHBlcjxUPiB7CisgICAgcHJpdmF0ZSBmaW5hbCBUIHZhbHVlOworCisgICAgcHVibGljIFdyYXBwZXIoVCB2YWx1ZSkgeworICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWU7CisgICAgfQorCisKKyAgICBwdWJsaWMgVCBnZXRWYWx1ZSgpIHsKKyAgICAgICAgcmV0dXJuIHZhbHVlOworICAgIH0KKworfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3dyYXBSZXR1cm5WYWx1ZS9nZW5lcmljcy9iZWZvcmUvVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3dyYXBSZXR1cm5WYWx1ZS9nZW5lcmljcy9iZWZvcmUvVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2OGRmZjYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3Jpbmcvd3JhcFJldHVyblZhbHVlL2dlbmVyaWNzL2JlZm9yZS9UZXN0LmphdmEKQEAgLTAsMCArMSw2IEBACitjbGFzcyBUZXN0PFQ+IHsKKyAgVCBteVQ7CisgIFQgZm9vKCkgeworICAgIHJldHVybiBteVQ7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3Jpbmcvd3JhcFJldHVyblZhbHVlL2hpZXJhcmNoeS9hZnRlci9Jbmhlcml0b3IuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy93cmFwUmV0dXJuVmFsdWUvaGllcmFyY2h5L2FmdGVyL0luaGVyaXRvci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkwNmU1ZDgKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3Jpbmcvd3JhcFJldHVyblZhbHVlL2hpZXJhcmNoeS9hZnRlci9Jbmhlcml0b3IuamF2YQpAQCAtMCwwICsxLDkgQEAKK2NsYXNzIEluaGVyaXRvciBleHRlbmRzIFRlc3QgeworICAgIFdyYXBwZXIgZm9vKCkgeworICAgIHJldHVybiBuZXcgV3JhcHBlcigiIik7CisgIH0KKworICB2b2lkIGJhcihUZXN0IHQpIHsKKyAgICBTdHJpbmcgcyA9IHQuZm9vKCkuZ2V0VmFsdWUoKTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy93cmFwUmV0dXJuVmFsdWUvaGllcmFyY2h5L2FmdGVyL1Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy93cmFwUmV0dXJuVmFsdWUvaGllcmFyY2h5L2FmdGVyL1Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hN2MyYTJkCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3dyYXBSZXR1cm5WYWx1ZS9oaWVyYXJjaHkvYWZ0ZXIvVGVzdC5qYXZhCkBAIC0wLDAgKzEsMTcgQEAKK2Fic3RyYWN0IGNsYXNzIFRlc3QgeworICBhYnN0cmFjdCBXcmFwcGVyIGZvbygpOworCisgICAgcHVibGljIGNsYXNzIFdyYXBwZXIgeworICAgICAgICBwcml2YXRlIGZpbmFsIFN0cmluZyB2YWx1ZTsKKworICAgICAgICBwdWJsaWMgV3JhcHBlcihTdHJpbmcgdmFsdWUpIHsKKyAgICAgICAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZTsKKyAgICAgICAgfQorCisKKyAgICAgICAgcHVibGljIFN0cmluZyBnZXRWYWx1ZSgpIHsKKyAgICAgICAgICAgIHJldHVybiB2YWx1ZTsKKyAgICAgICAgfQorCisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy93cmFwUmV0dXJuVmFsdWUvaGllcmFyY2h5L2JlZm9yZS9Jbmhlcml0b3IuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy93cmFwUmV0dXJuVmFsdWUvaGllcmFyY2h5L2JlZm9yZS9Jbmhlcml0b3IuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYTgzOTRiCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3dyYXBSZXR1cm5WYWx1ZS9oaWVyYXJjaHkvYmVmb3JlL0luaGVyaXRvci5qYXZhCkBAIC0wLDAgKzEsOSBAQAorY2xhc3MgSW5oZXJpdG9yIGV4dGVuZHMgVGVzdCB7CisgIFN0cmluZyBmb28oKSB7CisgICAgcmV0dXJuICIiOworICB9CisKKyAgdm9pZCBiYXIoVGVzdCB0KSB7CisgICAgU3RyaW5nIHMgPSB0LmZvbygpOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3dyYXBSZXR1cm5WYWx1ZS9oaWVyYXJjaHkvYmVmb3JlL1Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy93cmFwUmV0dXJuVmFsdWUvaGllcmFyY2h5L2JlZm9yZS9UZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWIxMTczNmIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3Jpbmcvd3JhcFJldHVyblZhbHVlL2hpZXJhcmNoeS9iZWZvcmUvVGVzdC5qYXZhCkBAIC0wLDAgKzEsMyBAQAorYWJzdHJhY3QgY2xhc3MgVGVzdCB7CisgIGFic3RyYWN0IFN0cmluZyBmb28oKTsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3Jpbmcvd3JhcFJldHVyblZhbHVlL2luY29uc2lzdGVudFdyYXBwZXIvYWZ0ZXIvVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3dyYXBSZXR1cm5WYWx1ZS9pbmNvbnNpc3RlbnRXcmFwcGVyL2FmdGVyL1Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OWUzNDgzCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3dyYXBSZXR1cm5WYWx1ZS9pbmNvbnNpc3RlbnRXcmFwcGVyL2FmdGVyL1Rlc3QuamF2YQpAQCAtMCwwICsxLDUgQEAKK2NsYXNzIFRlc3QgeworICAgIFdyYXBwZXIgZm9vKCkgeworICAgIHJldHVybiBuZXcgV3JhcHBlcigiIik7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3Jpbmcvd3JhcFJldHVyblZhbHVlL2luY29uc2lzdGVudFdyYXBwZXIvYWZ0ZXIvV3JhcHBlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3dyYXBSZXR1cm5WYWx1ZS9pbmNvbnNpc3RlbnRXcmFwcGVyL2FmdGVyL1dyYXBwZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNzQ0MDVhCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3dyYXBSZXR1cm5WYWx1ZS9pbmNvbnNpc3RlbnRXcmFwcGVyL2FmdGVyL1dyYXBwZXIuamF2YQpAQCAtMCwwICsxLDYgQEAKK2NsYXNzIFdyYXBwZXIgeworICBTdHJpbmcgbXlGaWVsZDsKKyAgV3JhcHBlcihTdHJpbmcgcykgeworICAgIG15RmllbGQgPSBzOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3dyYXBSZXR1cm5WYWx1ZS9pbmNvbnNpc3RlbnRXcmFwcGVyL2JlZm9yZS9UZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3Jpbmcvd3JhcFJldHVyblZhbHVlL2luY29uc2lzdGVudFdyYXBwZXIvYmVmb3JlL1Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYWIwMTkzCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3dyYXBSZXR1cm5WYWx1ZS9pbmNvbnNpc3RlbnRXcmFwcGVyL2JlZm9yZS9UZXN0LmphdmEKQEAgLTAsMCArMSw1IEBACitjbGFzcyBUZXN0IHsKKyAgU3RyaW5nIGZvbygpIHsKKyAgICByZXR1cm4gIiI7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3Jpbmcvd3JhcFJldHVyblZhbHVlL2luY29uc2lzdGVudFdyYXBwZXIvYmVmb3JlL1dyYXBwZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy93cmFwUmV0dXJuVmFsdWUvaW5jb25zaXN0ZW50V3JhcHBlci9iZWZvcmUvV3JhcHBlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY3NDQwNWEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3Jpbmcvd3JhcFJldHVyblZhbHVlL2luY29uc2lzdGVudFdyYXBwZXIvYmVmb3JlL1dyYXBwZXIuamF2YQpAQCAtMCwwICsxLDYgQEAKK2NsYXNzIFdyYXBwZXIgeworICBTdHJpbmcgbXlGaWVsZDsKKyAgV3JhcHBlcihTdHJpbmcgcykgeworICAgIG15RmllbGQgPSBzOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3dyYXBSZXR1cm5WYWx1ZS9pbm5lckNsYXNzL2FmdGVyL1Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy93cmFwUmV0dXJuVmFsdWUvaW5uZXJDbGFzcy9hZnRlci9UZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTk1MDljMgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy93cmFwUmV0dXJuVmFsdWUvaW5uZXJDbGFzcy9hZnRlci9UZXN0LmphdmEKQEAgLTAsMCArMSwyMyBAQAorY2xhc3MgVGVzdCB7CisgICAgV3JhcHBlciBmb28oKSB7CisgICAgcmV0dXJuIG5ldyBXcmFwcGVyKCIiKTsKKyAgfQorCisgIHZvaWQgYmFyKCkgeworICAgIFN0cmluZyBzID0gZm9vKCkuZ2V0VmFsdWUoKTsKKyAgfQorCisgICAgcHVibGljIGNsYXNzIFdyYXBwZXIgeworICAgICAgICBwcml2YXRlIGZpbmFsIFN0cmluZyB2YWx1ZTsKKworICAgICAgICBwdWJsaWMgV3JhcHBlcihTdHJpbmcgdmFsdWUpIHsKKyAgICAgICAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZTsKKyAgICAgICAgfQorCisKKyAgICAgICAgcHVibGljIFN0cmluZyBnZXRWYWx1ZSgpIHsKKyAgICAgICAgICAgIHJldHVybiB2YWx1ZTsKKyAgICAgICAgfQorCisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy93cmFwUmV0dXJuVmFsdWUvaW5uZXJDbGFzcy9iZWZvcmUvVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3dyYXBSZXR1cm5WYWx1ZS9pbm5lckNsYXNzL2JlZm9yZS9UZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDI5YmRhOQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy93cmFwUmV0dXJuVmFsdWUvaW5uZXJDbGFzcy9iZWZvcmUvVGVzdC5qYXZhCkBAIC0wLDAgKzEsOSBAQAorY2xhc3MgVGVzdCB7CisgIFN0cmluZyBmb28oKSB7CisgICAgcmV0dXJuICIiOworICB9CisKKyAgdm9pZCBiYXIoKSB7CisgICAgU3RyaW5nIHMgPSBmb28oKTsgCisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3Jpbmcvd3JhcFJldHVyblZhbHVlL25vQ29uc3RydWN0b3IvYWZ0ZXIvVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3dyYXBSZXR1cm5WYWx1ZS9ub0NvbnN0cnVjdG9yL2FmdGVyL1Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OWUzNDgzCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3dyYXBSZXR1cm5WYWx1ZS9ub0NvbnN0cnVjdG9yL2FmdGVyL1Rlc3QuamF2YQpAQCAtMCwwICsxLDUgQEAKK2NsYXNzIFRlc3QgeworICAgIFdyYXBwZXIgZm9vKCkgeworICAgIHJldHVybiBuZXcgV3JhcHBlcigiIik7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3Jpbmcvd3JhcFJldHVyblZhbHVlL25vQ29uc3RydWN0b3IvYWZ0ZXIvV3JhcHBlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3dyYXBSZXR1cm5WYWx1ZS9ub0NvbnN0cnVjdG9yL2FmdGVyL1dyYXBwZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZTA1ZDU4Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3dyYXBSZXR1cm5WYWx1ZS9ub0NvbnN0cnVjdG9yL2FmdGVyL1dyYXBwZXIuamF2YQpAQCAtMCwwICsxLDQgQEAKK2NsYXNzIFdyYXBwZXIgeworICBTdHJpbmcgbXlGaWVsZDsKKyAgU3RyaW5nIGdldE15RmllbGQoKXtyZXR1cm4gbXlGaWVsZDt9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3dyYXBSZXR1cm5WYWx1ZS9ub0NvbnN0cnVjdG9yL2JlZm9yZS9UZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3Jpbmcvd3JhcFJldHVyblZhbHVlL25vQ29uc3RydWN0b3IvYmVmb3JlL1Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYWIwMTkzCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3dyYXBSZXR1cm5WYWx1ZS9ub0NvbnN0cnVjdG9yL2JlZm9yZS9UZXN0LmphdmEKQEAgLTAsMCArMSw1IEBACitjbGFzcyBUZXN0IHsKKyAgU3RyaW5nIGZvbygpIHsKKyAgICByZXR1cm4gIiI7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3Jpbmcvd3JhcFJldHVyblZhbHVlL25vQ29uc3RydWN0b3IvYmVmb3JlL1dyYXBwZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy93cmFwUmV0dXJuVmFsdWUvbm9Db25zdHJ1Y3Rvci9iZWZvcmUvV3JhcHBlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFlMDVkNTgKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3Jpbmcvd3JhcFJldHVyblZhbHVlL25vQ29uc3RydWN0b3IvYmVmb3JlL1dyYXBwZXIuamF2YQpAQCAtMCwwICsxLDQgQEAKK2NsYXNzIFdyYXBwZXIgeworICBTdHJpbmcgbXlGaWVsZDsKKyAgU3RyaW5nIGdldE15RmllbGQoKXtyZXR1cm4gbXlGaWVsZDt9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3dyYXBSZXR1cm5WYWx1ZS9yYXdSZXR1cm5UeXBlL2FmdGVyL1Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy93cmFwUmV0dXJuVmFsdWUvcmF3UmV0dXJuVHlwZS9hZnRlci9UZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTFmZTE2NAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy93cmFwUmV0dXJuVmFsdWUvcmF3UmV0dXJuVHlwZS9hZnRlci9UZXN0LmphdmEKQEAgLTAsMCArMSw2IEBACitpbXBvcnQgamF2YS51dGlsLio7CitjbGFzcyBUZXN0IHsKKyAgICBXcmFwcGVyIGZvbygpIHsKKyAgICAgIHJldHVybiBuZXcgV3JhcHBlcihuZXcgQXJyYXlMaXN0PFN0cmluZz4oKSk7CisgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3dyYXBSZXR1cm5WYWx1ZS9yYXdSZXR1cm5UeXBlL2FmdGVyL1dyYXBwZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy93cmFwUmV0dXJuVmFsdWUvcmF3UmV0dXJuVHlwZS9hZnRlci9XcmFwcGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDJlZGE0ZAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy93cmFwUmV0dXJuVmFsdWUvcmF3UmV0dXJuVHlwZS9hZnRlci9XcmFwcGVyLmphdmEKQEAgLTAsMCArMSwxMSBAQAoraW1wb3J0IGphdmEudXRpbC4qOworY2xhc3MgV3JhcHBlciB7CisgIExpc3Q8Q2hhclNlcXVlbmNlPiBteUZpZWxkOworICBXcmFwcGVyKExpc3Q8Q2hhclNlcXVlbmNlPiBzKSB7CisgICAgbXlGaWVsZCA9IHM7CisgIH0KKworICBMaXN0PENoYXJTZXF1ZW5jZT4gZ2V0TXlGaWVsZCgpIHsKKyAgICByZXR1cm4gbXlGaWVsZDsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy93cmFwUmV0dXJuVmFsdWUvcmF3UmV0dXJuVHlwZS9iZWZvcmUvVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3dyYXBSZXR1cm5WYWx1ZS9yYXdSZXR1cm5UeXBlL2JlZm9yZS9UZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmNiYWY1MgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy93cmFwUmV0dXJuVmFsdWUvcmF3UmV0dXJuVHlwZS9iZWZvcmUvVGVzdC5qYXZhCkBAIC0wLDAgKzEsNiBAQAoraW1wb3J0IGphdmEudXRpbC4qOworY2xhc3MgVGVzdCB7CisgICBMaXN0IGZvbygpIHsKKyAgICAgIHJldHVybiBuZXcgQXJyYXlMaXN0PFN0cmluZz4oKTsKKyAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3Jpbmcvd3JhcFJldHVyblZhbHVlL3Jhd1JldHVyblR5cGUvYmVmb3JlL1dyYXBwZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy93cmFwUmV0dXJuVmFsdWUvcmF3UmV0dXJuVHlwZS9iZWZvcmUvV3JhcHBlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQyZWRhNGQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3Jpbmcvd3JhcFJldHVyblZhbHVlL3Jhd1JldHVyblR5cGUvYmVmb3JlL1dyYXBwZXIuamF2YQpAQCAtMCwwICsxLDExIEBACitpbXBvcnQgamF2YS51dGlsLio7CitjbGFzcyBXcmFwcGVyIHsKKyAgTGlzdDxDaGFyU2VxdWVuY2U+IG15RmllbGQ7CisgIFdyYXBwZXIoTGlzdDxDaGFyU2VxdWVuY2U+IHMpIHsKKyAgICBteUZpZWxkID0gczsKKyAgfQorCisgIExpc3Q8Q2hhclNlcXVlbmNlPiBnZXRNeUZpZWxkKCkgeworICAgIHJldHVybiBteUZpZWxkOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3dyYXBSZXR1cm5WYWx1ZS9yZXR1cm5JbnNpZGVMYW1iZGEvYWZ0ZXIvVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3dyYXBSZXR1cm5WYWx1ZS9yZXR1cm5JbnNpZGVMYW1iZGEvYWZ0ZXIvVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY3NGRiYjkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3Jpbmcvd3JhcFJldHVyblZhbHVlL3JldHVybkluc2lkZUxhbWJkYS9hZnRlci9UZXN0LmphdmEKQEAgLTAsMCArMSwyMSBAQAorY2xhc3MgVGVzdCB7CisgICAgV3JhcHBlciBmb28oKSB7CisgICAgcmV0dXJuIG5ldyBXcmFwcGVyKChvKSAtPiB7CisgICAgICAgIHJldHVybiAwOworICAgIH0pOworICB9CisKKyAgICBwdWJsaWMgY2xhc3MgV3JhcHBlciB7CisgICAgICAgIHByaXZhdGUgZmluYWwgQ29tcGFyYWJsZTxTdHJpbmc+IHZhbHVlOworCisgICAgICAgIHB1YmxpYyBXcmFwcGVyKENvbXBhcmFibGU8U3RyaW5nPiB2YWx1ZSkgeworICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlOworICAgICAgICB9CisKKworICAgICAgICBwdWJsaWMgQ29tcGFyYWJsZTxTdHJpbmc+IGdldFZhbHVlKCkgeworICAgICAgICAgICAgcmV0dXJuIHZhbHVlOworICAgICAgICB9CisKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3dyYXBSZXR1cm5WYWx1ZS9yZXR1cm5JbnNpZGVMYW1iZGEvYmVmb3JlL1Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy93cmFwUmV0dXJuVmFsdWUvcmV0dXJuSW5zaWRlTGFtYmRhL2JlZm9yZS9UZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmJjNTdjMQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy93cmFwUmV0dXJuVmFsdWUvcmV0dXJuSW5zaWRlTGFtYmRhL2JlZm9yZS9UZXN0LmphdmEKQEAgLTAsMCArMSw3IEBACitjbGFzcyBUZXN0IHsKKyAgQ29tcGFyYWJsZTxTdHJpbmc+IGZvbygpIHsKKyAgICByZXR1cm4gKG8pIC0+IHsKKyAgICAgIHJldHVybiAwOworICAgIH07CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3Jpbmcvd3JhcFJldHVyblZhbHVlL3NpbXBsZS9hZnRlci9UZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3Jpbmcvd3JhcFJldHVyblZhbHVlL3NpbXBsZS9hZnRlci9UZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDllMzQ4MwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy93cmFwUmV0dXJuVmFsdWUvc2ltcGxlL2FmdGVyL1Rlc3QuamF2YQpAQCAtMCwwICsxLDUgQEAKK2NsYXNzIFRlc3QgeworICAgIFdyYXBwZXIgZm9vKCkgeworICAgIHJldHVybiBuZXcgV3JhcHBlcigiIik7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3Jpbmcvd3JhcFJldHVyblZhbHVlL3NpbXBsZS9hZnRlci9XcmFwcGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3Jpbmcvd3JhcFJldHVyblZhbHVlL3NpbXBsZS9hZnRlci9XcmFwcGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzVmYmEzMQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy93cmFwUmV0dXJuVmFsdWUvc2ltcGxlL2FmdGVyL1dyYXBwZXIuamF2YQpAQCAtMCwwICsxLDEzIEBACitwdWJsaWMgY2xhc3MgV3JhcHBlciB7CisgICAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgdmFsdWU7CisKKyAgICBwdWJsaWMgV3JhcHBlcihTdHJpbmcgdmFsdWUpIHsKKyAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlOworICAgIH0KKworCisgICAgcHVibGljIFN0cmluZyBnZXRWYWx1ZSgpIHsKKyAgICAgICAgcmV0dXJuIHZhbHVlOworICAgIH0KKworfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3dyYXBSZXR1cm5WYWx1ZS9zaW1wbGUvYmVmb3JlL1Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy93cmFwUmV0dXJuVmFsdWUvc2ltcGxlL2JlZm9yZS9UZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmFiMDE5MwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy93cmFwUmV0dXJuVmFsdWUvc2ltcGxlL2JlZm9yZS9UZXN0LmphdmEKQEAgLTAsMCArMSw1IEBACitjbGFzcyBUZXN0IHsKKyAgU3RyaW5nIGZvbygpIHsKKyAgICByZXR1cm4gIiI7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3Jpbmcvd3JhcFJldHVyblZhbHVlL3N0YXRpY01ldGhvZElubmVyQ2xhc3MvYWZ0ZXIvVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3dyYXBSZXR1cm5WYWx1ZS9zdGF0aWNNZXRob2RJbm5lckNsYXNzL2FmdGVyL1Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMzUyMTJjCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3dyYXBSZXR1cm5WYWx1ZS9zdGF0aWNNZXRob2RJbm5lckNsYXNzL2FmdGVyL1Rlc3QuamF2YQpAQCAtMCwwICsxLDIzIEBACitjbGFzcyBUZXN0IHsKKyAgc3RhdGljIFdyYXBwZXIgZm9vKCkgeworICAgIHJldHVybiBuZXcgV3JhcHBlcigiIik7CisgIH0KKworICB2b2lkIGJhcigpIHsKKyAgICBTdHJpbmcgcyA9IGZvbygpLmdldFZhbHVlKCk7CisgIH0KKworICAgIHB1YmxpYyBzdGF0aWMgY2xhc3MgV3JhcHBlciB7CisgICAgICAgIHByaXZhdGUgZmluYWwgU3RyaW5nIHZhbHVlOworCisgICAgICAgIHB1YmxpYyBXcmFwcGVyKFN0cmluZyB2YWx1ZSkgeworICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlOworICAgICAgICB9CisKKworICAgICAgICBwdWJsaWMgU3RyaW5nIGdldFZhbHVlKCkgeworICAgICAgICAgICAgcmV0dXJuIHZhbHVlOworICAgICAgICB9CisKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3dyYXBSZXR1cm5WYWx1ZS9zdGF0aWNNZXRob2RJbm5lckNsYXNzL2JlZm9yZS9UZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3Jpbmcvd3JhcFJldHVyblZhbHVlL3N0YXRpY01ldGhvZElubmVyQ2xhc3MvYmVmb3JlL1Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNDA2Mzc5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3dyYXBSZXR1cm5WYWx1ZS9zdGF0aWNNZXRob2RJbm5lckNsYXNzL2JlZm9yZS9UZXN0LmphdmEKQEAgLTAsMCArMSw5IEBACitjbGFzcyBUZXN0IHsKKyAgc3RhdGljIFN0cmluZyBmb28oKSB7CisgICAgcmV0dXJuICIiOworICB9CisKKyAgdm9pZCBiYXIoKSB7CisgICAgU3RyaW5nIHMgPSBmb28oKTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy93cmFwUmV0dXJuVmFsdWUvc3RyaXAvYWZ0ZXIvVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3dyYXBSZXR1cm5WYWx1ZS9zdHJpcC9hZnRlci9UZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTliNmYzYgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy93cmFwUmV0dXJuVmFsdWUvc3RyaXAvYWZ0ZXIvVGVzdC5qYXZhCkBAIC0wLDAgKzEsMTAgQEAKK2NsYXNzIFRlc3QgeworICAgIFdyYXBwZXIgZm9vKCkgeworICAgIHJldHVybiBuZXcgV3JhcHBlcigiIik7CisgIH0KKworICB2b2lkIGJhcigpIHsKKyAgICBTdHJpbmcgcyA9IGZvbygpLmdldE15RmllbGQoKTsKKyAgfQorCit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3dyYXBSZXR1cm5WYWx1ZS9zdHJpcC9hZnRlci9XcmFwcGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3Jpbmcvd3JhcFJldHVyblZhbHVlL3N0cmlwL2FmdGVyL1dyYXBwZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZWNhNzIzCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3dyYXBSZXR1cm5WYWx1ZS9zdHJpcC9hZnRlci9XcmFwcGVyLmphdmEKQEAgLTAsMCArMSwxMCBAQAorY2xhc3MgV3JhcHBlciB7CisgIFN0cmluZyBteUZpZWxkOworICBXcmFwcGVyKFN0cmluZyBzKSB7CisgICAgbXlGaWVsZCA9IHM7CisgIH0KKworICBTdHJpbmcgZ2V0TXlGaWVsZCgpIHsKKyAgICByZXR1cm4gbXlGaWVsZDsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy93cmFwUmV0dXJuVmFsdWUvc3RyaXAvYmVmb3JlL1Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy93cmFwUmV0dXJuVmFsdWUvc3RyaXAvYmVmb3JlL1Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mY2Q1M2Q2Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3dyYXBSZXR1cm5WYWx1ZS9zdHJpcC9iZWZvcmUvVGVzdC5qYXZhCkBAIC0wLDAgKzEsMTAgQEAKK2NsYXNzIFRlc3QgeworICBTdHJpbmcgZm9vKCkgeworICAgIHJldHVybiBuZXcgV3JhcHBlcigiIikuZ2V0TXlGaWVsZCgpOworICB9CisKKyAgdm9pZCBiYXIoKSB7CisgICAgU3RyaW5nIHMgPSBmb28oKTsKKyAgfQorCit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3dyYXBSZXR1cm5WYWx1ZS9zdHJpcC9iZWZvcmUvV3JhcHBlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3dyYXBSZXR1cm5WYWx1ZS9zdHJpcC9iZWZvcmUvV3JhcHBlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRlY2E3MjMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3Jpbmcvd3JhcFJldHVyblZhbHVlL3N0cmlwL2JlZm9yZS9XcmFwcGVyLmphdmEKQEAgLTAsMCArMSwxMCBAQAorY2xhc3MgV3JhcHBlciB7CisgIFN0cmluZyBteUZpZWxkOworICBXcmFwcGVyKFN0cmluZyBzKSB7CisgICAgbXlGaWVsZCA9IHM7CisgIH0KKworICBTdHJpbmcgZ2V0TXlGaWVsZCgpIHsKKyAgICByZXR1cm4gbXlGaWVsZDsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy93cmFwUmV0dXJuVmFsdWUvd3JhcHBlci9hZnRlci9UZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3Jpbmcvd3JhcFJldHVyblZhbHVlL3dyYXBwZXIvYWZ0ZXIvVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk5YjZmM2IKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3Jpbmcvd3JhcFJldHVyblZhbHVlL3dyYXBwZXIvYWZ0ZXIvVGVzdC5qYXZhCkBAIC0wLDAgKzEsMTAgQEAKK2NsYXNzIFRlc3QgeworICAgIFdyYXBwZXIgZm9vKCkgeworICAgIHJldHVybiBuZXcgV3JhcHBlcigiIik7CisgIH0KKworICB2b2lkIGJhcigpIHsKKyAgICBTdHJpbmcgcyA9IGZvbygpLmdldE15RmllbGQoKTsKKyAgfQorCit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3dyYXBSZXR1cm5WYWx1ZS93cmFwcGVyL2FmdGVyL1dyYXBwZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy93cmFwUmV0dXJuVmFsdWUvd3JhcHBlci9hZnRlci9XcmFwcGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGVjYTcyMwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy93cmFwUmV0dXJuVmFsdWUvd3JhcHBlci9hZnRlci9XcmFwcGVyLmphdmEKQEAgLTAsMCArMSwxMCBAQAorY2xhc3MgV3JhcHBlciB7CisgIFN0cmluZyBteUZpZWxkOworICBXcmFwcGVyKFN0cmluZyBzKSB7CisgICAgbXlGaWVsZCA9IHM7CisgIH0KKworICBTdHJpbmcgZ2V0TXlGaWVsZCgpIHsKKyAgICByZXR1cm4gbXlGaWVsZDsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy93cmFwUmV0dXJuVmFsdWUvd3JhcHBlci9iZWZvcmUvVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3dyYXBSZXR1cm5WYWx1ZS93cmFwcGVyL2JlZm9yZS9UZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGYxYThkZgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy93cmFwUmV0dXJuVmFsdWUvd3JhcHBlci9iZWZvcmUvVGVzdC5qYXZhCkBAIC0wLDAgKzEsMTAgQEAKK2NsYXNzIFRlc3QgeworICBTdHJpbmcgZm9vKCkgeworICAgIHJldHVybiAiIjsKKyAgfQorCisgIHZvaWQgYmFyKCkgeworICAgIFN0cmluZyBzID0gZm9vKCk7CisgIH0KKworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy93cmFwUmV0dXJuVmFsdWUvd3JhcHBlci9iZWZvcmUvV3JhcHBlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3dyYXBSZXR1cm5WYWx1ZS93cmFwcGVyL2JlZm9yZS9XcmFwcGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGVjYTcyMwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy93cmFwUmV0dXJuVmFsdWUvd3JhcHBlci9iZWZvcmUvV3JhcHBlci5qYXZhCkBAIC0wLDAgKzEsMTAgQEAKK2NsYXNzIFdyYXBwZXIgeworICBTdHJpbmcgbXlGaWVsZDsKKyAgV3JhcHBlcihTdHJpbmcgcykgeworICAgIG15RmllbGQgPSBzOworICB9CisKKyAgU3RyaW5nIGdldE15RmllbGQoKSB7CisgICAgcmV0dXJuIG15RmllbGQ7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3Jpbmcvd3JhcFJldHVyblZhbHVlL3dyb25nRmllbGRBc3NpZ25tZW50L2FmdGVyL1Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy93cmFwUmV0dXJuVmFsdWUvd3JvbmdGaWVsZEFzc2lnbm1lbnQvYWZ0ZXIvVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk5YjZmM2IKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3Jpbmcvd3JhcFJldHVyblZhbHVlL3dyb25nRmllbGRBc3NpZ25tZW50L2FmdGVyL1Rlc3QuamF2YQpAQCAtMCwwICsxLDEwIEBACitjbGFzcyBUZXN0IHsKKyAgICBXcmFwcGVyIGZvbygpIHsKKyAgICByZXR1cm4gbmV3IFdyYXBwZXIoIiIpOworICB9CisKKyAgdm9pZCBiYXIoKSB7CisgICAgU3RyaW5nIHMgPSBmb28oKS5nZXRNeUZpZWxkKCk7CisgIH0KKworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy93cmFwUmV0dXJuVmFsdWUvd3JvbmdGaWVsZEFzc2lnbm1lbnQvYWZ0ZXIvV3JhcHBlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3dyYXBSZXR1cm5WYWx1ZS93cm9uZ0ZpZWxkQXNzaWdubWVudC9hZnRlci9XcmFwcGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGVjYTcyMwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy93cmFwUmV0dXJuVmFsdWUvd3JvbmdGaWVsZEFzc2lnbm1lbnQvYWZ0ZXIvV3JhcHBlci5qYXZhCkBAIC0wLDAgKzEsMTAgQEAKK2NsYXNzIFdyYXBwZXIgeworICBTdHJpbmcgbXlGaWVsZDsKKyAgV3JhcHBlcihTdHJpbmcgcykgeworICAgIG15RmllbGQgPSBzOworICB9CisKKyAgU3RyaW5nIGdldE15RmllbGQoKSB7CisgICAgcmV0dXJuIG15RmllbGQ7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3Jpbmcvd3JhcFJldHVyblZhbHVlL3dyb25nRmllbGRBc3NpZ25tZW50L2JlZm9yZS9UZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3Jpbmcvd3JhcFJldHVyblZhbHVlL3dyb25nRmllbGRBc3NpZ25tZW50L2JlZm9yZS9UZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGYxYThkZgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy93cmFwUmV0dXJuVmFsdWUvd3JvbmdGaWVsZEFzc2lnbm1lbnQvYmVmb3JlL1Rlc3QuamF2YQpAQCAtMCwwICsxLDEwIEBACitjbGFzcyBUZXN0IHsKKyAgU3RyaW5nIGZvbygpIHsKKyAgICByZXR1cm4gIiI7CisgIH0KKworICB2b2lkIGJhcigpIHsKKyAgICBTdHJpbmcgcyA9IGZvbygpOworICB9CisKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3Jpbmcvd3JhcFJldHVyblZhbHVlL3dyb25nRmllbGRBc3NpZ25tZW50L2JlZm9yZS9XcmFwcGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3Jpbmcvd3JhcFJldHVyblZhbHVlL3dyb25nRmllbGRBc3NpZ25tZW50L2JlZm9yZS9XcmFwcGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjM1MzE3OAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy93cmFwUmV0dXJuVmFsdWUvd3JvbmdGaWVsZEFzc2lnbm1lbnQvYmVmb3JlL1dyYXBwZXIuamF2YQpAQCAtMCwwICsxLDExIEBACitjbGFzcyBXcmFwcGVyIHsKKyAgU3RyaW5nIG15RmllbGQ7CisgIFN0cmluZyBteUZpZWxkMTsKKyAgV3JhcHBlcihTdHJpbmcgcykgeworICAgIG15RmllbGQxID0gczsKKyAgfQorCisgIFN0cmluZyBnZXRNeUZpZWxkKCkgeworICAgIHJldHVybiBteUZpZWxkOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3dyYXBSZXR1cm5WYWx1ZS93cm9uZ0ZpZWxkVHlwZS9hZnRlci9UZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3Jpbmcvd3JhcFJldHVyblZhbHVlL3dyb25nRmllbGRUeXBlL2FmdGVyL1Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZTY0ODBkCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3dyYXBSZXR1cm5WYWx1ZS93cm9uZ0ZpZWxkVHlwZS9hZnRlci9UZXN0LmphdmEKQEAgLTAsMCArMSwxMSBAQAorY2xhc3MgVGVzdCB7CisgICBwdWJsaWMgV3JhcHBlciBmb28oaW50IHApIHsKKyAgIAkJaWYgKHAgPiAwKSB7CisgICAJCQlyZXR1cm4gbmV3IFdyYXBwZXIoMSk7CisgICAJCX0gZWxzZSB7CisgICAJCQlyZXR1cm4gbmV3IFdyYXBwZXIoMik7CisgICAJCX0KKyAgIAl9CisKKworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy93cmFwUmV0dXJuVmFsdWUvd3JvbmdGaWVsZFR5cGUvYWZ0ZXIvV3JhcHBlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3dyYXBSZXR1cm5WYWx1ZS93cm9uZ0ZpZWxkVHlwZS9hZnRlci9XcmFwcGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmVkNWYzZgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy93cmFwUmV0dXJuVmFsdWUvd3JvbmdGaWVsZFR5cGUvYWZ0ZXIvV3JhcHBlci5qYXZhCkBAIC0wLDAgKzEsMTAgQEAKK2NsYXNzIFdyYXBwZXIgeworICBpbnQgbXlGaWVsZDsKKyAgV3JhcHBlcihpbnQgcykgeworICAgIG15RmllbGQgPSBzOworICB9CisKKyAgaW50IGdldE15RmllbGQoKSB7CisgICAgcmV0dXJuIG15RmllbGQ7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3Jpbmcvd3JhcFJldHVyblZhbHVlL3dyb25nRmllbGRUeXBlL2JlZm9yZS9UZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3Jpbmcvd3JhcFJldHVyblZhbHVlL3dyb25nRmllbGRUeXBlL2JlZm9yZS9UZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzMyMzRkYwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9yZWZhY3RvcmluZy93cmFwUmV0dXJuVmFsdWUvd3JvbmdGaWVsZFR5cGUvYmVmb3JlL1Rlc3QuamF2YQpAQCAtMCwwICsxLDExIEBACitjbGFzcyBUZXN0IHsKKyAgIHB1YmxpYyBkb3VibGUgZm9vKGludCBwKSB7CisgICAJCWlmIChwID4gMCkgeworICAgCQkJcmV0dXJuIDE7CisgICAJCX0gZWxzZSB7CisgICAJCQlyZXR1cm4gMjsKKyAgIAkJfQorICAgCX0KKworCit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3dyYXBSZXR1cm5WYWx1ZS93cm9uZ0ZpZWxkVHlwZS9iZWZvcmUvV3JhcHBlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3JlZmFjdG9yaW5nL3dyYXBSZXR1cm5WYWx1ZS93cm9uZ0ZpZWxkVHlwZS9iZWZvcmUvV3JhcHBlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZlZDVmM2YKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvcmVmYWN0b3Jpbmcvd3JhcFJldHVyblZhbHVlL3dyb25nRmllbGRUeXBlL2JlZm9yZS9XcmFwcGVyLmphdmEKQEAgLTAsMCArMSwxMCBAQAorY2xhc3MgV3JhcHBlciB7CisgIGludCBteUZpZWxkOworICBXcmFwcGVyKGludCBzKSB7CisgICAgbXlGaWVsZCA9IHM7CisgIH0KKworICBpbnQgZ2V0TXlGaWVsZCgpIHsKKyAgICByZXR1cm4gbXlGaWVsZDsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9zdHJ1Y3R1cmVWaWV3L2V4cGFuZEVsZW1lbnRXaXRoRXhpdGluZ05hbWUvdGVzdC54bWwgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvc3RydWN0dXJlVmlldy9leHBhbmRFbGVtZW50V2l0aEV4aXRpbmdOYW1lL3Rlc3QueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc0Mjg4ODIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvc3RydWN0dXJlVmlldy9leHBhbmRFbGVtZW50V2l0aEV4aXRpbmdOYW1lL3Rlc3QueG1sCkBAIC0wLDAgKzEsMjQgQEAKKzw/eG1sIHZlcnNpb249IjEuMCI/PgorCis8dGVzdD4KKwk8bGV2ZWwxPgorCQk8bGV2ZWwyPgorCQkJPGxldmVsMz48L2xldmVsMz4KKwkJPC9sZXZlbDI+CisJPC9sZXZlbDE+CisJPGxldmVsMT4KKwkJPGxldmVsMj4KKwkJCTxsZXZlbDM+PC9sZXZlbDM+CisJCTwvbGV2ZWwyPgorCTwvbGV2ZWwxPgorCTxsZXZlbDE+CisJCTxsZXZlbDI+CisJCQk8bGV2ZWwzPjwvbGV2ZWwzPgorCQk8L2xldmVsMj4KKwk8L2xldmVsMT4KKwk8bGV2ZWwxPgorCQk8bGV2ZWwyPgorCQkJPGxldmVsMz48L2xldmVsMz4KKwkJPC9sZXZlbDI+CisJPC9sZXZlbDE+Cis8L3Rlc3Q+CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvc3RydWN0dXJlVmlldy9qYXZhQ2xhc3NTdHJ1Y3R1cmUvc3JjL2NvbS9wYWNrYWdlMS9DbGFzczEuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9zdHJ1Y3R1cmVWaWV3L2phdmFDbGFzc1N0cnVjdHVyZS9zcmMvY29tL3BhY2thZ2UxL0NsYXNzMS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgzNzZhOTIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvc3RydWN0dXJlVmlldy9qYXZhQ2xhc3NTdHJ1Y3R1cmUvc3JjL2NvbS9wYWNrYWdlMS9DbGFzczEuamF2YQpAQCAtMCwwICsxLDEwIEBACitwYWNrYWdlIGNvbS5wYWNrYWdlMTsKKworcHVibGljIGNsYXNzIENsYXNzMSB7CisgIHB1YmxpYyBib29sZWFuIG15RmllbGQxOworICBwdWJsaWMgYm9vbGVhbiBteUZpZWxkMjsKKyAgCisgIHB1YmxpYyBpbnQgZ2V0VmFsdWUoKXsKKyAgIHJldHVybiAwOworICB9ICAKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9zdHJ1Y3R1cmVWaWV3L21lbWJlcnNPcmRlci9zcmMvY29tL3BhY2thZ2UxL0NsYXNzMi5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3N0cnVjdHVyZVZpZXcvbWVtYmVyc09yZGVyL3NyYy9jb20vcGFja2FnZTEvQ2xhc3MyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2VjYjA5OAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9zdHJ1Y3R1cmVWaWV3L21lbWJlcnNPcmRlci9zcmMvY29tL3BhY2thZ2UxL0NsYXNzMi5qYXZhCkBAIC0wLDAgKzEsNyBAQAorcHVibGljIGNsYXNzIENsYXNzMiB7CisgIHByaXZhdGUgaW50IGFiOworICBwcm90ZWN0ZWQgaW50IHo7CisgIHB1YmxpYyB2b2lkIGFmKCl7fQorICBwdWJsaWMgdm9pZCB6Zigpe30KKyAgcHVibGljIENsYXNzMigpe30KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvc3RydWN0dXJlVmlldy9zaG93Q2xhc3NNZW1iZXJzL3NyYy9jb20vcGFja2FnZTEvQ2xhc3MyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvc3RydWN0dXJlVmlldy9zaG93Q2xhc3NNZW1iZXJzL3NyYy9jb20vcGFja2FnZTEvQ2xhc3MyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzlkMmFhYgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9zdHJ1Y3R1cmVWaWV3L3Nob3dDbGFzc01lbWJlcnMvc3JjL2NvbS9wYWNrYWdlMS9DbGFzczIuamF2YQpAQCAtMCwwICsxLDUzIEBACitwYWNrYWdlIGNvbS5wYWNrYWdlMTsKKworcHVibGljIGNsYXNzIENsYXNzMiB7CisgIHByaXZhdGUgYm9vbGVhbiBteUZpZWxkMTsKKyAgcHVibGljIGJvb2xlYW4gbXlGaWVsZDI7CisgIHB1YmxpYyBib29sZWFuIG15RmllbGQzOworICBwdWJsaWMgYm9vbGVhbiBteUZpZWxkNDsKKworICBwdWJsaWMgaW50IGdldFZhbHVlKCkgeworICAgIHJldHVybiAwOworICB9CisKKyAgcHVibGljIGNsYXNzIElubmVyQ2xhc3MxIHsKKyAgICBwdWJsaWMgaW50IG15SW5uZXJDbGFzc0ZpZWxkOworCisgICAgcHVibGljIGNsYXNzIElubmVyQ2xhc3MxMiB7CisgICAgICBwdWJsaWMgaW50IG15SW5uZXJDbGFzc0ZpZWxkOworCisgICAgICBwdWJsaWMgY2xhc3MgSW5uZXJDbGFzczEzIHsKKyAgICAgICAgcHVibGljIGludCBteUlubmVyQ2xhc3NGaWVsZDsKKworICAgICAgICBwdWJsaWMgY2xhc3MgSW5uZXJDbGFzczE0IHsKKyAgICAgICAgICBwdWJsaWMgaW50IG15SW5uZXJDbGFzc0ZpZWxkOworCisgICAgICAgICAgcHVibGljIGNsYXNzIElubmVyQ2xhc3MxNSB7CisgICAgICAgICAgICBwdWJsaWMgaW50IG15SW5uZXJDbGFzc0ZpZWxkOworICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKyAgfQorCisgIHB1YmxpYyBjbGFzcyBJbm5lckNsYXNzMiB7CisgICAgcHVibGljIGludCBteUlubmVyQ2xhc3NGaWVsZDsKKworICAgIHB1YmxpYyBjbGFzcyBJbm5lckNsYXNzMjIgeworICAgICAgcHVibGljIGludCBteUlubmVyQ2xhc3NGaWVsZDsKKworICAgICAgcHVibGljIGNsYXNzIElubmVyQ2xhc3MyMyB7CisgICAgICAgIHB1YmxpYyBpbnQgbXlJbm5lckNsYXNzRmllbGQ7CisKKyAgICAgICAgcHVibGljIGNsYXNzIElubmVyQ2xhc3MyNCB7CisgICAgICAgICAgcHVibGljIGludCBteUZpZWxkVG9TZWxlY3Q7CisKKyAgICAgICAgICBwdWJsaWMgY2xhc3MgSW5uZXJDbGFzczI1IHsKKyAgICAgICAgICAgIHB1YmxpYyBpbnQgbXlJbm5lckNsYXNzRmllbGQ7CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICB9CisgICAgfQorICB9CisKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9zdHJ1Y3R1cmVWaWV3L3Zpc2liaWxpdHlTb3J0ZXIvc3JjL2NvbS9wYWNrYWdlMS9DbGFzczIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS9zdHJ1Y3R1cmVWaWV3L3Zpc2liaWxpdHlTb3J0ZXIvc3JjL2NvbS9wYWNrYWdlMS9DbGFzczIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MDMxNDY0Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3N0cnVjdHVyZVZpZXcvdmlzaWJpbGl0eVNvcnRlci9zcmMvY29tL3BhY2thZ2UxL0NsYXNzMi5qYXZhCkBAIC0wLDAgKzEsNSBAQAorcHVibGljIGNsYXNzIENsYXNzMiB7CisgIHByaXZhdGUgaW50IF9fbXlQcml2YXRlRmlpZWxkOworICBwcm90ZWN0ZWQgaW50IF9teVByb3RlY3RlZEZpZWxkOworICBwdWJsaWMgaW50IG15UHVibGljRmllbGQ7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3Vuc2NyYW1ibGUvZGVhZGxvY2sudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3Vuc2NyYW1ibGUvZGVhZGxvY2sudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk4ZTgzZmMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvdW5zY3JhbWJsZS9kZWFkbG9jay50eHQKQEAgLTAsMCArMSw3NzMgQEAKKzIwMTEtMTEtMjUgMjA6MTI6MzAKK0Z1bGwgdGhyZWFkIGR1bXAgSmF2YSBIb3RTcG90KFRNKSA2NC1CaXQgU2VydmVyIFZNICgxNy4xLWIwMy0zMDcgbWl4ZWQgbW9kZSk6CisKKyJBdHRhY2ggTGlzdGVuZXIiIGRhZW1vbiBwcmlvPTkgdGlkPTEwMzU4ODAwMCBuaWQ9MHgxMTNmYjYwMDAgd2FpdGluZyBvbiBjb25kaXRpb24gWzAwMDAwMDAwXQorICAgamF2YS5sYW5nLlRocmVhZC5TdGF0ZTogUlVOTkFCTEUKKworICAgTG9ja2VkIG93bmFibGUgc3luY2hyb25pemVyczoKKwktIE5vbmUKKworInByb2Nlc3MgcmVhcGVyIiBkYWVtb24gcHJpbz00IHRpZD0xMWQxOTA4MDAgbmlkPTB4MTE2NzU1MDAwIHJ1bm5hYmxlIFsxMTY3NTQwMDBdCisgICBqYXZhLmxhbmcuVGhyZWFkLlN0YXRlOiBSVU5OQUJMRQorCWF0IGphdmEubGFuZy5VTklYUHJvY2Vzcy53YWl0Rm9yUHJvY2Vzc0V4aXQoTmF0aXZlIE1ldGhvZCkKKwlhdCBqYXZhLmxhbmcuVU5JWFByb2Nlc3MuYWNjZXNzJDkwMChVTklYUHJvY2Vzcy5qYXZhOjE3KQorCWF0IGphdmEubGFuZy5VTklYUHJvY2VzcyQyJDEucnVuKFVOSVhQcm9jZXNzLmphdmE6ODYpCisKKyAgIExvY2tlZCBvd25hYmxlIHN5bmNocm9uaXplcnM6CisJLSBOb25lCisKKyJBbGFybSBwb29sKG93bikiIGRhZW1vbiBwcmlvPTMgdGlkPTExNDQ4NjAwMCBuaWQ9MHgxMWIxMDIwMDAgd2FpdGluZyBvbiBjb25kaXRpb24gWzExYjEwMTAwMF0KKyAgIGphdmEubGFuZy5UaHJlYWQuU3RhdGU6IFdBSVRJTkcgKHBhcmtpbmcpCisJYXQgc3VuLm1pc2MuVW5zYWZlLnBhcmsoTmF0aXZlIE1ldGhvZCkKKwktIHBhcmtpbmcgdG8gd2FpdCBmb3IgIDw3Y2FmMTVjNjA+IChhIGphdmEudXRpbC5jb25jdXJyZW50LmxvY2tzLkFic3RyYWN0UXVldWVkU3luY2hyb25pemVyJENvbmRpdGlvbk9iamVjdCkKKwlhdCBqYXZhLnV0aWwuY29uY3VycmVudC5sb2Nrcy5Mb2NrU3VwcG9ydC5wYXJrKExvY2tTdXBwb3J0LmphdmE6MTU4KQorCWF0IGphdmEudXRpbC5jb25jdXJyZW50LmxvY2tzLkFic3RyYWN0UXVldWVkU3luY2hyb25pemVyJENvbmRpdGlvbk9iamVjdC5hd2FpdChBYnN0cmFjdFF1ZXVlZFN5bmNocm9uaXplci5qYXZhOjE5ODcpCisJYXQgamF2YS51dGlsLmNvbmN1cnJlbnQuTGlua2VkQmxvY2tpbmdRdWV1ZS50YWtlKExpbmtlZEJsb2NraW5nUXVldWUuamF2YTozOTkpCisJYXQgamF2YS51dGlsLmNvbmN1cnJlbnQuVGhyZWFkUG9vbEV4ZWN1dG9yLmdldFRhc2soVGhyZWFkUG9vbEV4ZWN1dG9yLmphdmE6OTQ3KQorCWF0IGphdmEudXRpbC5jb25jdXJyZW50LlRocmVhZFBvb2xFeGVjdXRvciRXb3JrZXIucnVuKFRocmVhZFBvb2xFeGVjdXRvci5qYXZhOjkwNykKKwlhdCBqYXZhLmxhbmcuVGhyZWFkLnJ1bihUaHJlYWQuamF2YTo2ODApCisKKyAgIExvY2tlZCBvd25hYmxlIHN5bmNocm9uaXplcnM6CisJLSBOb25lCisKKyJKb2JTY2hlZHVsZXIgcG9vbCAwLzEiIHByaW89NSB0aWQ9MTE1NjU5MDAwIG5pZD0weDExYWM2YzAwMCB3YWl0aW5nIGZvciBtb25pdG9yIGVudHJ5IFsxMWFjNmEwMDBdCisgICBqYXZhLmxhbmcuVGhyZWFkLlN0YXRlOiBCTE9DS0VEIChvbiBvYmplY3QgbW9uaXRvcikKKwlhdCBjb20uaW50ZWxsaWoudXRpbC5pby5QZXJzaXN0ZW50SGFzaE1hcC5nZXQoUGVyc2lzdGVudEhhc2hNYXAuamF2YTozMzkpCisJLSB3YWl0aW5nIHRvIGxvY2sgPDdjOTczNDAwOD4gKGEgY29tLmludGVsbGlqLnV0aWwuaW8uUGVyc2lzdGVudEJUcmVlRW51bWVyYXRvcikKKwlhdCBjb20uaW50ZWxsaWoudXRpbC5pbmRleGluZy5NYXBJbmRleFN0b3JhZ2UkMSQxLmNvbXB1dGUoTWFwSW5kZXhTdG9yYWdlLmphdmE6NzcpCisJYXQgY29tLmludGVsbGlqLnV0aWwuaW5kZXhpbmcuTWFwSW5kZXhTdG9yYWdlJDEkMS5jb21wdXRlKE1hcEluZGV4U3RvcmFnZS5qYXZhOjY3KQorCWF0IGNvbS5pbnRlbGxpai51dGlsLmluZGV4aW5nLkNoYW5nZVRyYWNraW5nVmFsdWVDb250YWluZXIuZ2V0TWVyZ2VkRGF0YShDaGFuZ2VUcmFja2luZ1ZhbHVlQ29udGFpbmVyLmphdmE6MTM0KQorCS0gbG9ja2VkIDw3Yzk3MzNmYTA+IChhIGNvbS5pbnRlbGxpai51dGlsLmluZGV4aW5nLlZhbHVlQ29udGFpbmVyTWFwKQorCWF0IGNvbS5pbnRlbGxpai51dGlsLmluZGV4aW5nLkNoYW5nZVRyYWNraW5nVmFsdWVDb250YWluZXIuZ2V0VmFsdWVJdGVyYXRvcihDaGFuZ2VUcmFja2luZ1ZhbHVlQ29udGFpbmVyLmphdmE6OTgpCisJYXQgY29tLmludGVsbGlqLnV0aWwuaW5kZXhpbmcuRmlsZUJhc2VkSW5kZXgucHJvY2Vzc1ZhbHVlc0ltcGwoRmlsZUJhc2VkSW5kZXguamF2YTo5MDApCisJYXQgY29tLmludGVsbGlqLnV0aWwuaW5kZXhpbmcuRmlsZUJhc2VkSW5kZXguZ2V0VmFsdWVzKEZpbGVCYXNlZEluZGV4LmphdmE6ODIyKQorCWF0IGNvbS5pbnRlbGxpai5qYXZhc2NyaXB0LmZsZXguY3NzLkZsZXhDc3NFbGVtZW50RGVzY3JpcHRvclByb3ZpZGVyLmdldFByb3BlcnR5RGVzY3JpcHRvcihGbGV4Q3NzRWxlbWVudERlc2NyaXB0b3JQcm92aWRlci5qYXZhOjE4MCkKKwlhdCBjb20uaW50ZWxsaWoucHNpLmNzcy5pbXBsLnV0aWwudGFibGUuQ3NzRGVzY3JpcHRvcnNVdGlsLmdldFByb3BlcnR5RGVzY3JpcHRvcihDc3NEZXNjcmlwdG9yc1V0aWwuamF2YTo1MCkKKwlhdCBjb20uaW50ZWxsaWoucHNpLmNzcy5pbXBsLnV0aWwudGFibGUuQ3NzRGVzY3JpcHRvcnNVdGlsLmdldENhbm5vbmljYWxQcm9wZXJ0eU5hbWUoQ3NzRGVzY3JpcHRvcnNVdGlsLmphdmE6OTgpCisJYXQgY29tLmludGVsbGlqLnBzaS5jc3MuaW1wbC51dGlsLnRhYmxlLkNzc0Rlc2NyaXB0b3JzVXRpbC5nZXRDYW5ub25pY2FsUHJvcGVydHlOYW1lKENzc0Rlc2NyaXB0b3JzVXRpbC5qYXZhOjEwNCkKKwlhdCBjb20uaW50ZWxsaWoucHNpLmNzcy5icm93c2UuQ3NzQ29sb3JBbm5vdGF0b3IuYW5ub3RhdGUoQ3NzQ29sb3JBbm5vdGF0b3IuamF2YToxMDUpCisJYXQgY29tLmludGVsbGlqLmNvZGVJbnNpZ2h0LmRhZW1vbi5pbXBsLkRlZmF1bHRIaWdobGlnaHRWaXNpdG9yLnJ1bkFubm90YXRvcnMoRGVmYXVsdEhpZ2hsaWdodFZpc2l0b3IuamF2YToxNTcpCisJYXQgY29tLmludGVsbGlqLmNvZGVJbnNpZ2h0LmRhZW1vbi5pbXBsLkRlZmF1bHRIaWdobGlnaHRWaXNpdG9yLnZpc2l0KERlZmF1bHRIaWdobGlnaHRWaXNpdG9yLmphdmE6MTAwKQorCWF0IGNvbS5pbnRlbGxpai5jb2RlSW5zaWdodC5kYWVtb24uaW1wbC5HZW5lcmFsSGlnaGxpZ2h0aW5nUGFzcyQ4LnJ1bihHZW5lcmFsSGlnaGxpZ2h0aW5nUGFzcy5qYXZhOjU5MykKKwlhdCBjb20uaW50ZWxsaWouY29kZUluc2lnaHQuZGFlbW9uLmltcGwuR2VuZXJhbEhpZ2hsaWdodGluZ1Bhc3MuYW5hbHl6ZUJ5VmlzaXRvcnMoR2VuZXJhbEhpZ2hsaWdodGluZ1Bhc3MuamF2YTo3NzEpCisJYXQgY29tLmludGVsbGlqLmNvZGVJbnNpZ2h0LmRhZW1vbi5pbXBsLkdlbmVyYWxIaWdobGlnaHRpbmdQYXNzLmFjY2VzcyQzNjAwKEdlbmVyYWxIaWdobGlnaHRpbmdQYXNzLmphdmE6ODApCisJYXQgY29tLmludGVsbGlqLmNvZGVJbnNpZ2h0LmRhZW1vbi5pbXBsLkdlbmVyYWxIaWdobGlnaHRpbmdQYXNzJDEwLnJ1bihHZW5lcmFsSGlnaGxpZ2h0aW5nUGFzcy5qYXZhOjc3NykKKwlhdCBjb20uaW50ZWxsaWouY29kZUluc2lnaHQuZGFlbW9uLmltcGwuRGVmYXVsdEhpZ2hsaWdodFZpc2l0b3IuYW5hbHl6ZShEZWZhdWx0SGlnaGxpZ2h0VmlzaXRvci5qYXZhOjg0KQorCWF0IGNvbS5pbnRlbGxpai5jb2RlSW5zaWdodC5kYWVtb24uaW1wbC5HZW5lcmFsSGlnaGxpZ2h0aW5nUGFzcy5hbmFseXplQnlWaXNpdG9ycyhHZW5lcmFsSGlnaGxpZ2h0aW5nUGFzcy5qYXZhOjc3NCkKKwlhdCBjb20uaW50ZWxsaWouY29kZUluc2lnaHQuZGFlbW9uLmltcGwuR2VuZXJhbEhpZ2hsaWdodGluZ1Bhc3MuYWNjZXNzJDM2MDAoR2VuZXJhbEhpZ2hsaWdodGluZ1Bhc3MuamF2YTo4MCkKKwlhdCBjb20uaW50ZWxsaWouY29kZUluc2lnaHQuZGFlbW9uLmltcGwuR2VuZXJhbEhpZ2hsaWdodGluZ1Bhc3MkMTAucnVuKEdlbmVyYWxIaWdobGlnaHRpbmdQYXNzLmphdmE6Nzc3KQorCWF0IGNvbS5pbnRlbGxpai5jb2RlSW5zaWdodC5kYWVtb24uaW1wbC5EZWZhdWx0SGlnaGxpZ2h0VmlzaXRvci5hbmFseXplKERlZmF1bHRIaWdobGlnaHRWaXNpdG9yLmphdmE6ODQpCisJYXQgY29tLmludGVsbGlqLmNvZGVJbnNpZ2h0LmRhZW1vbi5pbXBsLkdlbmVyYWxIaWdobGlnaHRpbmdQYXNzLmFuYWx5emVCeVZpc2l0b3JzKEdlbmVyYWxIaWdobGlnaHRpbmdQYXNzLmphdmE6Nzc0KQorCWF0IGNvbS5pbnRlbGxpai5jb2RlSW5zaWdodC5kYWVtb24uaW1wbC5HZW5lcmFsSGlnaGxpZ2h0aW5nUGFzcy5jb2xsZWN0SGlnaGxpZ2h0cyhHZW5lcmFsSGlnaGxpZ2h0aW5nUGFzcy5qYXZhOjYzOSkKKwlhdCBjb20uaW50ZWxsaWouY29kZUluc2lnaHQuZGFlbW9uLmltcGwuR2VuZXJhbEhpZ2hsaWdodGluZ1Bhc3MuY29sbGVjdEluZm9ybWF0aW9uV2l0aFByb2dyZXNzKEdlbmVyYWxIaWdobGlnaHRpbmdQYXNzLmphdmE6MjA0KQorCWF0IGNvbS5pbnRlbGxpai5jb2RlSW5zaWdodC5kYWVtb24uaW1wbC5Qcm9ncmVzc2FibGVUZXh0RWRpdG9ySGlnaGxpZ2h0aW5nUGFzcy5kb0NvbGxlY3RJbmZvcm1hdGlvbihQcm9ncmVzc2FibGVUZXh0RWRpdG9ySGlnaGxpZ2h0aW5nUGFzcy5qYXZhOjU4KQorCWF0IGNvbS5pbnRlbGxpai5jb2RlSGlnaGxpZ2h0aW5nLlRleHRFZGl0b3JIaWdobGlnaHRpbmdQYXNzLmNvbGxlY3RJbmZvcm1hdGlvbihUZXh0RWRpdG9ySGlnaGxpZ2h0aW5nUGFzcy5qYXZhOjYxKQorCWF0IGNvbS5pbnRlbGxpai5jb2RlSW5zaWdodC5kYWVtb24uaW1wbC5QYXNzRXhlY3V0b3JTZXJ2aWNlJFNjaGVkdWxlZFBhc3MkMSQxLnJ1bihQYXNzRXhlY3V0b3JTZXJ2aWNlLmphdmE6MzUwKQorCWF0IGNvbS5pbnRlbGxpai5vcGVuYXBpLmFwcGxpY2F0aW9uLmltcGwuQXBwbGljYXRpb25JbXBsLnRyeVJ1blJlYWRBY3Rpb24oQXBwbGljYXRpb25JbXBsLmphdmE6MTAzNCkKKwlhdCBjb20uaW50ZWxsaWouY29kZUluc2lnaHQuZGFlbW9uLmltcGwuUGFzc0V4ZWN1dG9yU2VydmljZSRTY2hlZHVsZWRQYXNzJDEucnVuKFBhc3NFeGVjdXRvclNlcnZpY2UuamF2YTozNDIpCisJYXQgY29tLmludGVsbGlqLm9wZW5hcGkucHJvZ3Jlc3MuaW1wbC5Qcm9ncmVzc01hbmFnZXJJbXBsLmV4ZWN1dGVQcm9jZXNzVW5kZXJQcm9ncmVzcyhQcm9ncmVzc01hbmFnZXJJbXBsLmphdmE6MjA2KQorCWF0IGNvbS5pbnRlbGxpai5jb2RlSW5zaWdodC5kYWVtb24uaW1wbC5QYXNzRXhlY3V0b3JTZXJ2aWNlJFNjaGVkdWxlZFBhc3MuZG9SdW4oUGFzc0V4ZWN1dG9yU2VydmljZS5qYXZhOjM0MCkKKwlhdCBjb20uaW50ZWxsaWouY29kZUluc2lnaHQuZGFlbW9uLmltcGwuUGFzc0V4ZWN1dG9yU2VydmljZSRTY2hlZHVsZWRQYXNzLnJ1bihQYXNzRXhlY3V0b3JTZXJ2aWNlLmphdmE6MzE2KQorCWF0IGNvbS5pbnRlbGxpai5jb25jdXJyZW5jeS5Kb2JMYXVuY2hlciQzLmNhbGwoSm9iVXRpbC5qYXZhOjEzNCkKKwlhdCBjb20uaW50ZWxsaWouY29uY3VycmVuY3kuSm9iTGF1bmNoZXIkMy5jYWxsKEpvYlV0aWwuamF2YToxMzEpCisJYXQgamF2YS51dGlsLmNvbmN1cnJlbnQuRnV0dXJlVGFzayRTeW5jLmlubmVyUnVuKEZ1dHVyZVRhc2suamF2YTozMDMpCisJYXQgamF2YS51dGlsLmNvbmN1cnJlbnQuRnV0dXJlVGFzay5ydW4oRnV0dXJlVGFzay5qYXZhOjEzOCkKKwlhdCBjb20uaW50ZWxsaWouY29uY3VycmVuY3kuUHJpb3JpdGl6ZWRGdXR1cmVUYXNrLmFjY2VzcyQxMDEoUHJpb3JpdGl6ZWRGdXR1cmVUYXNrLmphdmE6MzEpCisJYXQgY29tLmludGVsbGlqLmNvbmN1cnJlbmN5LlByaW9yaXRpemVkRnV0dXJlVGFzayQxLnJ1bihQcmlvcml0aXplZEZ1dHVyZVRhc2suamF2YTo3MCkKKwlhdCBjb20uaW50ZWxsaWouY29uY3VycmVuY3kuUHJpb3JpdGl6ZWRGdXR1cmVUYXNrLnJ1bihQcmlvcml0aXplZEZ1dHVyZVRhc2suamF2YToxMTMpCisJYXQgamF2YS51dGlsLmNvbmN1cnJlbnQuVGhyZWFkUG9vbEV4ZWN1dG9yJFdvcmtlci5ydW5UYXNrKFRocmVhZFBvb2xFeGVjdXRvci5qYXZhOjg4NikKKwlhdCBqYXZhLnV0aWwuY29uY3VycmVudC5UaHJlYWRQb29sRXhlY3V0b3IkV29ya2VyLnJ1bihUaHJlYWRQb29sRXhlY3V0b3IuamF2YTo5MDgpCisJYXQgamF2YS5sYW5nLlRocmVhZC5ydW4oVGhyZWFkLmphdmE6NjgwKQorCisgICBMb2NrZWQgb3duYWJsZSBzeW5jaHJvbml6ZXJzOgorCS0gPDdjYTZiZjUxOD4gKGEgamF2YS51dGlsLmNvbmN1cnJlbnQubG9ja3MuUmVlbnRyYW50TG9jayROb25mYWlyU3luYykKKworIlJlZkNvdW50aW5nU3RvcmFnZSB3cml0ZSBjb250ZW50IGhlbHBlciIgcHJpbz00IHRpZD0xMTU3MGYwMDAgbmlkPTB4MTFhNDM0MDAwIHdhaXRpbmcgb24gY29uZGl0aW9uIFsxMWE0MzMwMDBdCisgICBqYXZhLmxhbmcuVGhyZWFkLlN0YXRlOiBXQUlUSU5HIChwYXJraW5nKQorCWF0IHN1bi5taXNjLlVuc2FmZS5wYXJrKE5hdGl2ZSBNZXRob2QpCisJLSBwYXJraW5nIHRvIHdhaXQgZm9yICA8N2M4ZmRkZGMwPiAoYSBqYXZhLnV0aWwuY29uY3VycmVudC5sb2Nrcy5BYnN0cmFjdFF1ZXVlZFN5bmNocm9uaXplciRDb25kaXRpb25PYmplY3QpCisJYXQgamF2YS51dGlsLmNvbmN1cnJlbnQubG9ja3MuTG9ja1N1cHBvcnQucGFyayhMb2NrU3VwcG9ydC5qYXZhOjE1OCkKKwlhdCBqYXZhLnV0aWwuY29uY3VycmVudC5sb2Nrcy5BYnN0cmFjdFF1ZXVlZFN5bmNocm9uaXplciRDb25kaXRpb25PYmplY3QuYXdhaXQoQWJzdHJhY3RRdWV1ZWRTeW5jaHJvbml6ZXIuamF2YToxOTg3KQorCWF0IGphdmEudXRpbC5jb25jdXJyZW50LkxpbmtlZEJsb2NraW5nUXVldWUudGFrZShMaW5rZWRCbG9ja2luZ1F1ZXVlLmphdmE6Mzk5KQorCWF0IGphdmEudXRpbC5jb25jdXJyZW50LlRocmVhZFBvb2xFeGVjdXRvci5nZXRUYXNrKFRocmVhZFBvb2xFeGVjdXRvci5qYXZhOjk0NykKKwlhdCBqYXZhLnV0aWwuY29uY3VycmVudC5UaHJlYWRQb29sRXhlY3V0b3IkV29ya2VyLnJ1bihUaHJlYWRQb29sRXhlY3V0b3IuamF2YTo5MDcpCisJYXQgamF2YS5sYW5nLlRocmVhZC5ydW4oVGhyZWFkLmphdmE6NjgwKQorCisgICBMb2NrZWQgb3duYWJsZSBzeW5jaHJvbml6ZXJzOgorCS0gTm9uZQorCisiQXBwbGljYXRpb25JbXBsIHBvb2xlZCB0aHJlYWQgOCIgcHJpbz00IHRpZD0xMDM2N2U4MDAgbmlkPTB4MTE4YjQ1MDAwIHdhaXRpbmcgb24gY29uZGl0aW9uIFsxMThiNDQwMDBdCisgICBqYXZhLmxhbmcuVGhyZWFkLlN0YXRlOiBUSU1FRF9XQUlUSU5HIChzbGVlcGluZykKKwlhdCBqYXZhLmxhbmcuVGhyZWFkLnNsZWVwKE5hdGl2ZSBNZXRob2QpCisJYXQgY29tLmludGVsbGlqLnV0aWwuaW8uT3V0cHV0UmVhZGVyLmRvUnVuKE91dHB1dFJlYWRlci5qYXZhOjY1KQorCWF0IGNvbS5pbnRlbGxpai51dGlsLmlvLk91dHB1dFJlYWRlci5hY2Nlc3MkMDAwKE91dHB1dFJlYWRlci5qYXZhOjI3KQorCWF0IGNvbS5pbnRlbGxpai51dGlsLmlvLk91dHB1dFJlYWRlciQxLnJ1bihPdXRwdXRSZWFkZXIuamF2YTo0NCkKKwlhdCBjb20uaW50ZWxsaWoub3BlbmFwaS5hcHBsaWNhdGlvbi5pbXBsLkFwcGxpY2F0aW9uSW1wbCQ2LnJ1bihBcHBsaWNhdGlvbkltcGwuamF2YTo0MjEpCisJYXQgamF2YS51dGlsLmNvbmN1cnJlbnQuRXhlY3V0b3JzJFJ1bm5hYmxlQWRhcHRlci5jYWxsKEV4ZWN1dG9ycy5qYXZhOjQ0MSkKKwlhdCBqYXZhLnV0aWwuY29uY3VycmVudC5GdXR1cmVUYXNrJFN5bmMuaW5uZXJSdW4oRnV0dXJlVGFzay5qYXZhOjMwMykKKwlhdCBqYXZhLnV0aWwuY29uY3VycmVudC5GdXR1cmVUYXNrLnJ1bihGdXR1cmVUYXNrLmphdmE6MTM4KQorCWF0IGphdmEudXRpbC5jb25jdXJyZW50LlRocmVhZFBvb2xFeGVjdXRvciRXb3JrZXIucnVuVGFzayhUaHJlYWRQb29sRXhlY3V0b3IuamF2YTo4ODYpCisJYXQgamF2YS51dGlsLmNvbmN1cnJlbnQuVGhyZWFkUG9vbEV4ZWN1dG9yJFdvcmtlci5ydW4oVGhyZWFkUG9vbEV4ZWN1dG9yLmphdmE6OTA4KQorCWF0IGphdmEubGFuZy5UaHJlYWQucnVuKFRocmVhZC5qYXZhOjY4MCkKKwlhdCBjb20uaW50ZWxsaWoub3BlbmFwaS5hcHBsaWNhdGlvbi5pbXBsLkFwcGxpY2F0aW9uSW1wbCQxJDEucnVuKEFwcGxpY2F0aW9uSW1wbC5qYXZhOjEzNykKKworICAgTG9ja2VkIG93bmFibGUgc3luY2hyb25pemVyczoKKwktIDw3YzliNWMxNTA+IChhIGphdmEudXRpbC5jb25jdXJyZW50LmxvY2tzLlJlZW50cmFudExvY2skTm9uZmFpclN5bmMpCisKKyJBcHBsaWNhdGlvbkltcGwgcG9vbGVkIHRocmVhZCA3IiBwcmlvPTQgdGlkPTExNDViYjgwMCBuaWQ9MHgxMThhNDIwMDAgd2FpdGluZyBvbiBjb25kaXRpb24gWzExOGE0MTAwMF0KKyAgIGphdmEubGFuZy5UaHJlYWQuU3RhdGU6IFRJTUVEX1dBSVRJTkcgKHBhcmtpbmcpCisJYXQgc3VuLm1pc2MuVW5zYWZlLnBhcmsoTmF0aXZlIE1ldGhvZCkKKwktIHBhcmtpbmcgdG8gd2FpdCBmb3IgIDw3Yzk0ZGM3ZDA+IChhIGphdmEudXRpbC5jb25jdXJyZW50LlN5bmNocm9ub3VzUXVldWUkVHJhbnNmZXJTdGFjaykKKwlhdCBqYXZhLnV0aWwuY29uY3VycmVudC5sb2Nrcy5Mb2NrU3VwcG9ydC5wYXJrTmFub3MoTG9ja1N1cHBvcnQuamF2YToxOTgpCisJYXQgamF2YS51dGlsLmNvbmN1cnJlbnQuU3luY2hyb25vdXNRdWV1ZSRUcmFuc2ZlclN0YWNrLmF3YWl0RnVsZmlsbChTeW5jaHJvbm91c1F1ZXVlLmphdmE6NDI0KQorCWF0IGphdmEudXRpbC5jb25jdXJyZW50LlN5bmNocm9ub3VzUXVldWUkVHJhbnNmZXJTdGFjay50cmFuc2ZlcihTeW5jaHJvbm91c1F1ZXVlLmphdmE6MzIzKQorCWF0IGphdmEudXRpbC5jb25jdXJyZW50LlN5bmNocm9ub3VzUXVldWUucG9sbChTeW5jaHJvbm91c1F1ZXVlLmphdmE6ODc0KQorCWF0IGphdmEudXRpbC5jb25jdXJyZW50LlRocmVhZFBvb2xFeGVjdXRvci5nZXRUYXNrKFRocmVhZFBvb2xFeGVjdXRvci5qYXZhOjk0NSkKKwlhdCBqYXZhLnV0aWwuY29uY3VycmVudC5UaHJlYWRQb29sRXhlY3V0b3IkV29ya2VyLnJ1bihUaHJlYWRQb29sRXhlY3V0b3IuamF2YTo5MDcpCisJYXQgamF2YS5sYW5nLlRocmVhZC5ydW4oVGhyZWFkLmphdmE6NjgwKQorCWF0IGNvbS5pbnRlbGxpai5vcGVuYXBpLmFwcGxpY2F0aW9uLmltcGwuQXBwbGljYXRpb25JbXBsJDEkMS5ydW4oQXBwbGljYXRpb25JbXBsLmphdmE6MTM3KQorCisgICBMb2NrZWQgb3duYWJsZSBzeW5jaHJvbml6ZXJzOgorCS0gTm9uZQorCisiQXBwbGljYXRpb25JbXBsIHBvb2xlZCB0aHJlYWQgNiIgcHJpbz00IHRpZD0xMTQxMTI4MDAgbmlkPTB4MTE4OTNmMDAwIHdhaXRpbmcgb24gY29uZGl0aW9uIFsxMTg5M2UwMDBdCisgICBqYXZhLmxhbmcuVGhyZWFkLlN0YXRlOiBUSU1FRF9XQUlUSU5HIChzbGVlcGluZykKKwlhdCBqYXZhLmxhbmcuVGhyZWFkLnNsZWVwKE5hdGl2ZSBNZXRob2QpCisJYXQgY29tLmludGVsbGlqLnV0aWwuaW8uT3V0cHV0UmVhZGVyLmRvUnVuKE91dHB1dFJlYWRlci5qYXZhOjY1KQorCWF0IGNvbS5pbnRlbGxpai51dGlsLmlvLk91dHB1dFJlYWRlci5hY2Nlc3MkMDAwKE91dHB1dFJlYWRlci5qYXZhOjI3KQorCWF0IGNvbS5pbnRlbGxpai51dGlsLmlvLk91dHB1dFJlYWRlciQxLnJ1bihPdXRwdXRSZWFkZXIuamF2YTo0NCkKKwlhdCBjb20uaW50ZWxsaWoub3BlbmFwaS5hcHBsaWNhdGlvbi5pbXBsLkFwcGxpY2F0aW9uSW1wbCQ2LnJ1bihBcHBsaWNhdGlvbkltcGwuamF2YTo0MjEpCisJYXQgamF2YS51dGlsLmNvbmN1cnJlbnQuRXhlY3V0b3JzJFJ1bm5hYmxlQWRhcHRlci5jYWxsKEV4ZWN1dG9ycy5qYXZhOjQ0MSkKKwlhdCBqYXZhLnV0aWwuY29uY3VycmVudC5GdXR1cmVUYXNrJFN5bmMuaW5uZXJSdW4oRnV0dXJlVGFzay5qYXZhOjMwMykKKwlhdCBqYXZhLnV0aWwuY29uY3VycmVudC5GdXR1cmVUYXNrLnJ1bihGdXR1cmVUYXNrLmphdmE6MTM4KQorCWF0IGphdmEudXRpbC5jb25jdXJyZW50LlRocmVhZFBvb2xFeGVjdXRvciRXb3JrZXIucnVuVGFzayhUaHJlYWRQb29sRXhlY3V0b3IuamF2YTo4ODYpCisJYXQgamF2YS51dGlsLmNvbmN1cnJlbnQuVGhyZWFkUG9vbEV4ZWN1dG9yJFdvcmtlci5ydW4oVGhyZWFkUG9vbEV4ZWN1dG9yLmphdmE6OTA4KQorCWF0IGphdmEubGFuZy5UaHJlYWQucnVuKFRocmVhZC5qYXZhOjY4MCkKKwlhdCBjb20uaW50ZWxsaWoub3BlbmFwaS5hcHBsaWNhdGlvbi5pbXBsLkFwcGxpY2F0aW9uSW1wbCQxJDEucnVuKEFwcGxpY2F0aW9uSW1wbC5qYXZhOjEzNykKKworICAgTG9ja2VkIG93bmFibGUgc3luY2hyb25pemVyczoKKwktIDw3YzliNWJiZjg+IChhIGphdmEudXRpbC5jb25jdXJyZW50LmxvY2tzLlJlZW50cmFudExvY2skTm9uZmFpclN5bmMpCisKKyJBcHBsaWNhdGlvbkltcGwgcG9vbGVkIHRocmVhZCA1IiBwcmlvPTQgdGlkPTEwMzM0NjAwMCBuaWQ9MHgxMTc2ODkwMDAgd2FpdGluZyBvbiBjb25kaXRpb24gWzExNzY4ODAwMF0KKyAgIGphdmEubGFuZy5UaHJlYWQuU3RhdGU6IFRJTUVEX1dBSVRJTkcgKHBhcmtpbmcpCisJYXQgc3VuLm1pc2MuVW5zYWZlLnBhcmsoTmF0aXZlIE1ldGhvZCkKKwktIHBhcmtpbmcgdG8gd2FpdCBmb3IgIDw3Yzk0ZGM3ZDA+IChhIGphdmEudXRpbC5jb25jdXJyZW50LlN5bmNocm9ub3VzUXVldWUkVHJhbnNmZXJTdGFjaykKKwlhdCBqYXZhLnV0aWwuY29uY3VycmVudC5sb2Nrcy5Mb2NrU3VwcG9ydC5wYXJrTmFub3MoTG9ja1N1cHBvcnQuamF2YToxOTgpCisJYXQgamF2YS51dGlsLmNvbmN1cnJlbnQuU3luY2hyb25vdXNRdWV1ZSRUcmFuc2ZlclN0YWNrLmF3YWl0RnVsZmlsbChTeW5jaHJvbm91c1F1ZXVlLmphdmE6NDI0KQorCWF0IGphdmEudXRpbC5jb25jdXJyZW50LlN5bmNocm9ub3VzUXVldWUkVHJhbnNmZXJTdGFjay50cmFuc2ZlcihTeW5jaHJvbm91c1F1ZXVlLmphdmE6MzIzKQorCWF0IGphdmEudXRpbC5jb25jdXJyZW50LlN5bmNocm9ub3VzUXVldWUucG9sbChTeW5jaHJvbm91c1F1ZXVlLmphdmE6ODc0KQorCWF0IGphdmEudXRpbC5jb25jdXJyZW50LlRocmVhZFBvb2xFeGVjdXRvci5nZXRUYXNrKFRocmVhZFBvb2xFeGVjdXRvci5qYXZhOjk0NSkKKwlhdCBqYXZhLnV0aWwuY29uY3VycmVudC5UaHJlYWRQb29sRXhlY3V0b3IkV29ya2VyLnJ1bihUaHJlYWRQb29sRXhlY3V0b3IuamF2YTo5MDcpCisJYXQgamF2YS5sYW5nLlRocmVhZC5ydW4oVGhyZWFkLmphdmE6NjgwKQorCWF0IGNvbS5pbnRlbGxpai5vcGVuYXBpLmFwcGxpY2F0aW9uLmltcGwuQXBwbGljYXRpb25JbXBsJDEkMS5ydW4oQXBwbGljYXRpb25JbXBsLmphdmE6MTM3KQorCisgICBMb2NrZWQgb3duYWJsZSBzeW5jaHJvbml6ZXJzOgorCS0gTm9uZQorCisiQXBwbGljYXRpb25JbXBsIHBvb2xlZCB0aHJlYWQgNCIgcHJpbz00IHRpZD0xMTQ2OTg4MDAgbmlkPTB4MTE3NTg2MDAwIGluIE9iamVjdC53YWl0KCkgWzExNzU4NTAwMF0KKyAgIGphdmEubGFuZy5UaHJlYWQuU3RhdGU6IFdBSVRJTkcgKG9uIG9iamVjdCBtb25pdG9yKQorCWF0IGphdmEubGFuZy5PYmplY3Qud2FpdChOYXRpdmUgTWV0aG9kKQorCS0gd2FpdGluZyBvbiA8N2NlMDJmNGIwPiAoYSBqYXZhLmxhbmcuVU5JWFByb2Nlc3MpCisJYXQgamF2YS5sYW5nLk9iamVjdC53YWl0KE9iamVjdC5qYXZhOjQ4NSkKKwlhdCBqYXZhLmxhbmcuVU5JWFByb2Nlc3Mud2FpdEZvcihVTklYUHJvY2Vzcy5qYXZhOjExNSkKKwktIGxvY2tlZCA8N2NlMDJmNGIwPiAoYSBqYXZhLmxhbmcuVU5JWFByb2Nlc3MpCisJYXQgY29tLmludGVsbGlqLmV4ZWN1dGlvbi5wcm9jZXNzLkJhc2VPU1Byb2Nlc3NIYW5kbGVyJFByb2Nlc3NXYWl0Rm9yJDEucnVuKEJhc2VPU1Byb2Nlc3NIYW5kbGVyLmphdmE6MjIxKQorCWF0IGNvbS5pbnRlbGxpai5vcGVuYXBpLmFwcGxpY2F0aW9uLmltcGwuQXBwbGljYXRpb25JbXBsJDYucnVuKEFwcGxpY2F0aW9uSW1wbC5qYXZhOjQyMSkKKwlhdCBqYXZhLnV0aWwuY29uY3VycmVudC5FeGVjdXRvcnMkUnVubmFibGVBZGFwdGVyLmNhbGwoRXhlY3V0b3JzLmphdmE6NDQxKQorCWF0IGphdmEudXRpbC5jb25jdXJyZW50LkZ1dHVyZVRhc2skU3luYy5pbm5lclJ1bihGdXR1cmVUYXNrLmphdmE6MzAzKQorCWF0IGphdmEudXRpbC5jb25jdXJyZW50LkZ1dHVyZVRhc2sucnVuKEZ1dHVyZVRhc2suamF2YToxMzgpCisJYXQgamF2YS51dGlsLmNvbmN1cnJlbnQuVGhyZWFkUG9vbEV4ZWN1dG9yJFdvcmtlci5ydW5UYXNrKFRocmVhZFBvb2xFeGVjdXRvci5qYXZhOjg4NikKKwlhdCBqYXZhLnV0aWwuY29uY3VycmVudC5UaHJlYWRQb29sRXhlY3V0b3IkV29ya2VyLnJ1bihUaHJlYWRQb29sRXhlY3V0b3IuamF2YTo5MDgpCisJYXQgamF2YS5sYW5nLlRocmVhZC5ydW4oVGhyZWFkLmphdmE6NjgwKQorCWF0IGNvbS5pbnRlbGxpai5vcGVuYXBpLmFwcGxpY2F0aW9uLmltcGwuQXBwbGljYXRpb25JbXBsJDEkMS5ydW4oQXBwbGljYXRpb25JbXBsLmphdmE6MTM3KQorCisgICBMb2NrZWQgb3duYWJsZSBzeW5jaHJvbml6ZXJzOgorCS0gPDdjOWI1YjdkOD4gKGEgamF2YS51dGlsLmNvbmN1cnJlbnQubG9ja3MuUmVlbnRyYW50TG9jayROb25mYWlyU3luYykKKworIkFwcGxpY2F0aW9uSW1wbCBwb29sZWQgdGhyZWFkIDMiIHByaW89NCB0aWQ9MTAzMmJiMDAwIG5pZD0weDExNzQ4MzAwMCBpbiBPYmplY3Qud2FpdCgpIFsxMTc0ODIwMDBdCisgICBqYXZhLmxhbmcuVGhyZWFkLlN0YXRlOiBXQUlUSU5HIChvbiBvYmplY3QgbW9uaXRvcikKKwlhdCBqYXZhLmxhbmcuT2JqZWN0LndhaXQoTmF0aXZlIE1ldGhvZCkKKwktIHdhaXRpbmcgb24gPDdjOTQ5OTJjMD4gKGEgY29tLmludGVsbGlqLnV0aWwuY29uY3VycmVuY3kuV3JpdGVyUHJlZmVyZW5jZVJlYWRXcml0ZUxvY2skUmVhZGVyTG9jaykKKwlhdCBqYXZhLmxhbmcuT2JqZWN0LndhaXQoT2JqZWN0LmphdmE6NDg1KQorCWF0IGNvbS5pbnRlbGxpai51dGlsLmNvbmN1cnJlbmN5LldyaXRlclByZWZlcmVuY2VSZWFkV3JpdGVMb2NrJFJlYWRlckxvY2suYWNxdWlyZShXcml0ZXJQcmVmZXJlbmNlUmVhZFdyaXRlTG9jay5qYXZhOjE2MikKKwktIGxvY2tlZCA8N2M5NDk5MmMwPiAoYSBjb20uaW50ZWxsaWoudXRpbC5jb25jdXJyZW5jeS5Xcml0ZXJQcmVmZXJlbmNlUmVhZFdyaXRlTG9jayRSZWFkZXJMb2NrKQorCWF0IGNvbS5pbnRlbGxpai5vcGVuYXBpLmFwcGxpY2F0aW9uLmltcGwuQXBwbGljYXRpb25JbXBsJFJlYWRBY2Nlc3NUb2tlbi48aW5pdD4oQXBwbGljYXRpb25JbXBsLmphdmE6MTE2MSkKKwlhdCBjb20uaW50ZWxsaWoub3BlbmFwaS5hcHBsaWNhdGlvbi5pbXBsLkFwcGxpY2F0aW9uSW1wbC5hY3F1aXJlUmVhZEFjdGlvbkxvY2tJbXBsKEFwcGxpY2F0aW9uSW1wbC5qYXZhOjEwODcpCisJYXQgY29tLmludGVsbGlqLm9wZW5hcGkuYXBwbGljYXRpb24uaW1wbC5BcHBsaWNhdGlvbkltcGwucnVuUmVhZEFjdGlvbihBcHBsaWNhdGlvbkltcGwuamF2YTo4NzApCisJYXQgY29tLmludGVsbGlqLm9wZW5hcGkuY29tcG9uZW50cy5pbXBsLlNlcnZpY2VNYW5hZ2VySW1wbCRNeUNvbXBvbmVudEFkYXB0ZXIuZ2V0Q29tcG9uZW50SW5zdGFuY2UoU2VydmljZU1hbmFnZXJJbXBsLmphdmE6MTM5KQorCWF0IGNvbS5pbnRlbGxpai51dGlsLnBpY28uRGVmYXVsdFBpY29Db250YWluZXIuZ2V0TG9jYWxJbnN0YW5jZShEZWZhdWx0UGljb0NvbnRhaW5lci5qYXZhOjI0MikKKwlhdCBjb20uaW50ZWxsaWoudXRpbC5waWNvLkRlZmF1bHRQaWNvQ29udGFpbmVyLmdldEluc3RhbmNlKERlZmF1bHRQaWNvQ29udGFpbmVyLmphdmE6MjI5KQorCWF0IGNvbS5pbnRlbGxpai51dGlsLnBpY28uRGVmYXVsdFBpY29Db250YWluZXIuZ2V0Q29tcG9uZW50SW5zdGFuY2UoRGVmYXVsdFBpY29Db250YWluZXIuamF2YToyMTEpCisJYXQgY29tLmludGVsbGlqLmZsZXgudWlEZXNpZ25lci5EZXNpZ25lckFwcGxpY2F0aW9uTWFuYWdlci5nZXRTZXJ2aWNlKERlc2lnbmVyQXBwbGljYXRpb25NYW5hZ2VyLmphdmE6NTYpCisJYXQgY29tLmludGVsbGlqLmZsZXgudWlEZXNpZ25lci5DbGllbnQuZ2V0SW5zdGFuY2UoQ2xpZW50LmphdmE6NDApCisJYXQgY29tLmludGVsbGlqLmZsZXgudWlEZXNpZ25lci5pby5NZXNzYWdlU29ja2V0TWFuYWdlci5zZXRPdXQoTWVzc2FnZVNvY2tldE1hbmFnZXIuamF2YToyMykKKwlhdCBjb20uaW50ZWxsaWouZmxleC51aURlc2lnbmVyLmlvLlNvY2tldE1hbmFnZXIucnVuKFNvY2tldE1hbmFnZXIuamF2YTozMikKKwlhdCBjb20uaW50ZWxsaWouZmxleC51aURlc2lnbmVyLmlvLk1lc3NhZ2VTb2NrZXRNYW5hZ2VyLnJ1bihNZXNzYWdlU29ja2V0TWFuYWdlci5qYXZhOjEyKQorCWF0IGNvbS5pbnRlbGxpai5vcGVuYXBpLmFwcGxpY2F0aW9uLmltcGwuQXBwbGljYXRpb25JbXBsJDYucnVuKEFwcGxpY2F0aW9uSW1wbC5qYXZhOjQyMSkKKwlhdCBqYXZhLnV0aWwuY29uY3VycmVudC5FeGVjdXRvcnMkUnVubmFibGVBZGFwdGVyLmNhbGwoRXhlY3V0b3JzLmphdmE6NDQxKQorCWF0IGphdmEudXRpbC5jb25jdXJyZW50LkZ1dHVyZVRhc2skU3luYy5pbm5lclJ1bihGdXR1cmVUYXNrLmphdmE6MzAzKQorCWF0IGphdmEudXRpbC5jb25jdXJyZW50LkZ1dHVyZVRhc2sucnVuKEZ1dHVyZVRhc2suamF2YToxMzgpCisJYXQgamF2YS51dGlsLmNvbmN1cnJlbnQuVGhyZWFkUG9vbEV4ZWN1dG9yJFdvcmtlci5ydW5UYXNrKFRocmVhZFBvb2xFeGVjdXRvci5qYXZhOjg4NikKKwlhdCBqYXZhLnV0aWwuY29uY3VycmVudC5UaHJlYWRQb29sRXhlY3V0b3IkV29ya2VyLnJ1bihUaHJlYWRQb29sRXhlY3V0b3IuamF2YTo5MDgpCisJYXQgamF2YS5sYW5nLlRocmVhZC5ydW4oVGhyZWFkLmphdmE6NjgwKQorCWF0IGNvbS5pbnRlbGxpai5vcGVuYXBpLmFwcGxpY2F0aW9uLmltcGwuQXBwbGljYXRpb25JbXBsJDEkMS5ydW4oQXBwbGljYXRpb25JbXBsLmphdmE6MTM3KQorCisgICBMb2NrZWQgb3duYWJsZSBzeW5jaHJvbml6ZXJzOgorCS0gPDdjOWI1YjVjOD4gKGEgamF2YS51dGlsLmNvbmN1cnJlbnQubG9ja3MuUmVlbnRyYW50TG9jayROb25mYWlyU3luYykKKworIkZTIFN5bmNocm9uaXplciIgZGFlbW9uIHByaW89NSB0aWQ9MTAzMmI0MDAwIG5pZD0weDExNzM4MDAwMCB3YWl0aW5nIG9uIGNvbmRpdGlvbiBbMTE3MzdmMDAwXQorICAgamF2YS5sYW5nLlRocmVhZC5TdGF0ZTogV0FJVElORyAocGFya2luZykKKwlhdCBzdW4ubWlzYy5VbnNhZmUucGFyayhOYXRpdmUgTWV0aG9kKQorCS0gcGFya2luZyB0byB3YWl0IGZvciAgPDdjOGZmNzc4OD4gKGEgamF2YS51dGlsLmNvbmN1cnJlbnQubG9ja3MuQWJzdHJhY3RRdWV1ZWRTeW5jaHJvbml6ZXIkQ29uZGl0aW9uT2JqZWN0KQorCWF0IGphdmEudXRpbC5jb25jdXJyZW50LmxvY2tzLkxvY2tTdXBwb3J0LnBhcmsoTG9ja1N1cHBvcnQuamF2YToxNTgpCisJYXQgamF2YS51dGlsLmNvbmN1cnJlbnQubG9ja3MuQWJzdHJhY3RRdWV1ZWRTeW5jaHJvbml6ZXIkQ29uZGl0aW9uT2JqZWN0LmF3YWl0KEFic3RyYWN0UXVldWVkU3luY2hyb25pemVyLmphdmE6MTk4NykKKwlhdCBqYXZhLnV0aWwuY29uY3VycmVudC5MaW5rZWRCbG9ja2luZ1F1ZXVlLnRha2UoTGlua2VkQmxvY2tpbmdRdWV1ZS5qYXZhOjM5OSkKKwlhdCBqYXZhLnV0aWwuY29uY3VycmVudC5UaHJlYWRQb29sRXhlY3V0b3IuZ2V0VGFzayhUaHJlYWRQb29sRXhlY3V0b3IuamF2YTo5NDcpCisJYXQgamF2YS51dGlsLmNvbmN1cnJlbnQuVGhyZWFkUG9vbEV4ZWN1dG9yJFdvcmtlci5ydW4oVGhyZWFkUG9vbEV4ZWN1dG9yLmphdmE6OTA3KQorCWF0IGphdmEubGFuZy5UaHJlYWQucnVuKFRocmVhZC5qYXZhOjY4MCkKKworICAgTG9ja2VkIG93bmFibGUgc3luY2hyb25pemVyczoKKwktIE5vbmUKKworIkFuaW1hdGlvbnMiIGRhZW1vbiBwcmlvPTUgdGlkPTExNDYyNjAwMCBuaWQ9MHgxMTZhYTAwMDAgcnVubmFibGUgWzExNmE5ZjAwMF0KKyAgIGphdmEubGFuZy5UaHJlYWQuU3RhdGU6IFRJTUVEX1dBSVRJTkcgKHBhcmtpbmcpCisJYXQgc3VuLm1pc2MuVW5zYWZlLnBhcmsoTmF0aXZlIE1ldGhvZCkKKwktIHBhcmtpbmcgdG8gd2FpdCBmb3IgIDw3Yzk3OTY2OTg+IChhIGphdmEudXRpbC5jb25jdXJyZW50LmxvY2tzLkFic3RyYWN0UXVldWVkU3luY2hyb25pemVyJENvbmRpdGlvbk9iamVjdCkKKwlhdCBqYXZhLnV0aWwuY29uY3VycmVudC5sb2Nrcy5Mb2NrU3VwcG9ydC5wYXJrTmFub3MoTG9ja1N1cHBvcnQuamF2YToxOTgpCisJYXQgamF2YS51dGlsLmNvbmN1cnJlbnQubG9ja3MuQWJzdHJhY3RRdWV1ZWRTeW5jaHJvbml6ZXIkQ29uZGl0aW9uT2JqZWN0LmF3YWl0TmFub3MoQWJzdHJhY3RRdWV1ZWRTeW5jaHJvbml6ZXIuamF2YToyMDI1KQorCWF0IGphdmEudXRpbC5jb25jdXJyZW50LkRlbGF5UXVldWUudGFrZShEZWxheVF1ZXVlLmphdmE6MTY0KQorCWF0IGphdmEudXRpbC5jb25jdXJyZW50LlNjaGVkdWxlZFRocmVhZFBvb2xFeGVjdXRvciREZWxheWVkV29ya1F1ZXVlLnRha2UoU2NoZWR1bGVkVGhyZWFkUG9vbEV4ZWN1dG9yLmphdmE6NjA5KQorCWF0IGphdmEudXRpbC5jb25jdXJyZW50LlNjaGVkdWxlZFRocmVhZFBvb2xFeGVjdXRvciREZWxheWVkV29ya1F1ZXVlLnRha2UoU2NoZWR1bGVkVGhyZWFkUG9vbEV4ZWN1dG9yLmphdmE6NjAyKQorCWF0IGphdmEudXRpbC5jb25jdXJyZW50LlRocmVhZFBvb2xFeGVjdXRvci5nZXRUYXNrKFRocmVhZFBvb2xFeGVjdXRvci5qYXZhOjk0NykKKwlhdCBqYXZhLnV0aWwuY29uY3VycmVudC5UaHJlYWRQb29sRXhlY3V0b3IkV29ya2VyLnJ1bihUaHJlYWRQb29sRXhlY3V0b3IuamF2YTo5MDcpCisJYXQgamF2YS5sYW5nLlRocmVhZC5ydW4oVGhyZWFkLmphdmE6NjgwKQorCisgICBMb2NrZWQgb3duYWJsZSBzeW5jaHJvbml6ZXJzOgorCS0gTm9uZQorCisiVGltZXJRdWV1ZSIgZGFlbW9uIHByaW89NSB0aWQ9MTE0NWIzMDAwIG5pZD0weDExNjk5ZDAwMCBpbiBPYmplY3Qud2FpdCgpIFsxMTY5OWMwMDBdCisgICBqYXZhLmxhbmcuVGhyZWFkLlN0YXRlOiBUSU1FRF9XQUlUSU5HIChvbiBvYmplY3QgbW9uaXRvcikKKwlhdCBqYXZhLmxhbmcuT2JqZWN0LndhaXQoTmF0aXZlIE1ldGhvZCkKKwktIHdhaXRpbmcgb24gPDdjOThiOGZkMD4gKGEgamF2YXguc3dpbmcuVGltZXJRdWV1ZSkKKwlhdCBqYXZheC5zd2luZy5UaW1lclF1ZXVlLnJ1bihUaW1lclF1ZXVlLmphdmE6MjMyKQorCS0gbG9ja2VkIDw3Yzk4YjhmZDA+IChhIGphdmF4LnN3aW5nLlRpbWVyUXVldWUpCisJYXQgamF2YS5sYW5nLlRocmVhZC5ydW4oVGhyZWFkLmphdmE6NjgwKQorCisgICBMb2NrZWQgb3duYWJsZSBzeW5jaHJvbml6ZXJzOgorCS0gTm9uZQorCisiQWxhcm0gcG9vbChzaGFyZWQpIiBkYWVtb24gcHJpbz0zIHRpZD0xMTQyNmQ4MDAgbmlkPTB4MTE2ODlhMDAwIGluIE9iamVjdC53YWl0KCkgWzExNjg5OTAwMF0KKyAgIGphdmEubGFuZy5UaHJlYWQuU3RhdGU6IFdBSVRJTkcgKG9uIG9iamVjdCBtb25pdG9yKQorCWF0IGphdmEubGFuZy5PYmplY3Qud2FpdChOYXRpdmUgTWV0aG9kKQorCS0gd2FpdGluZyBvbiA8N2I4NWQ1NmQ4PiAoYSBqYXZhLmF3dC5FdmVudFF1ZXVlJDFBV1RJbnZvY2F0aW9uTG9jaykKKwlhdCBqYXZhLmxhbmcuT2JqZWN0LndhaXQoT2JqZWN0LmphdmE6NDg1KQorCWF0IGphdmEuYXd0LkV2ZW50UXVldWUuaW52b2tlQW5kV2FpdChFdmVudFF1ZXVlLmphdmE6MTAyOSkKKwktIGxvY2tlZCA8N2I4NWQ1NmQ4PiAoYSBqYXZhLmF3dC5FdmVudFF1ZXVlJDFBV1RJbnZvY2F0aW9uTG9jaykKKwlhdCBqYXZheC5zd2luZy5Td2luZ1V0aWxpdGllcy5pbnZva2VBbmRXYWl0KFN3aW5nVXRpbGl0aWVzLmphdmE6MTMyMCkKKwlhdCBjb20uaW50ZWxsaWoudXRpbC5BbGFybSRSZXF1ZXN0JDEucnVuKEFsYXJtLmphdmE6MjIyKQorCWF0IGphdmEudXRpbC5jb25jdXJyZW50LkV4ZWN1dG9ycyRSdW5uYWJsZUFkYXB0ZXIuY2FsbChFeGVjdXRvcnMuamF2YTo0NDEpCisJYXQgamF2YS51dGlsLmNvbmN1cnJlbnQuRnV0dXJlVGFzayRTeW5jLmlubmVyUnVuKEZ1dHVyZVRhc2suamF2YTozMDMpCisJYXQgamF2YS51dGlsLmNvbmN1cnJlbnQuRnV0dXJlVGFzay5ydW4oRnV0dXJlVGFzay5qYXZhOjEzOCkKKwlhdCBqYXZhLnV0aWwuY29uY3VycmVudC5UaHJlYWRQb29sRXhlY3V0b3IkV29ya2VyLnJ1blRhc2soVGhyZWFkUG9vbEV4ZWN1dG9yLmphdmE6ODg2KQorCWF0IGphdmEudXRpbC5jb25jdXJyZW50LlRocmVhZFBvb2xFeGVjdXRvciRXb3JrZXIucnVuKFRocmVhZFBvb2xFeGVjdXRvci5qYXZhOjkwOCkKKwlhdCBqYXZhLmxhbmcuVGhyZWFkLnJ1bihUaHJlYWQuamF2YTo2ODApCisKKyAgIExvY2tlZCBvd25hYmxlIHN5bmNocm9uaXplcnM6CisJLSA8N2M5N2FhZWMwPiAoYSBqYXZhLnV0aWwuY29uY3VycmVudC5sb2Nrcy5SZWVudHJhbnRMb2NrJE5vbmZhaXJTeW5jKQorCisiTG93TWVtb3J5V2F0Y2hlciIgZGFlbW9uIHByaW89NCB0aWQ9MTAzN2M4ODAwIG5pZD0weDExNjI4YjAwMCBpbiBPYmplY3Qud2FpdCgpIFsxMTYyOGEwMDBdCisgICBqYXZhLmxhbmcuVGhyZWFkLlN0YXRlOiBXQUlUSU5HIChvbiBvYmplY3QgbW9uaXRvcikKKwlhdCBqYXZhLmxhbmcuT2JqZWN0LndhaXQoTmF0aXZlIE1ldGhvZCkKKwktIHdhaXRpbmcgb24gPDdjOTZjOWQyOD4gKGEgamF2YS5sYW5nLnJlZi5SZWZlcmVuY2VRdWV1ZSRMb2NrKQorCWF0IGphdmEubGFuZy5yZWYuUmVmZXJlbmNlUXVldWUucmVtb3ZlKFJlZmVyZW5jZVF1ZXVlLmphdmE6MTE4KQorCS0gbG9ja2VkIDw3Yzk2YzlkMjg+IChhIGphdmEubGFuZy5yZWYuUmVmZXJlbmNlUXVldWUkTG9jaykKKwlhdCBqYXZhLmxhbmcucmVmLlJlZmVyZW5jZVF1ZXVlLnJlbW92ZShSZWZlcmVuY2VRdWV1ZS5qYXZhOjEzNCkKKwlhdCBjb20uaW50ZWxsaWoub3BlbmFwaS51dGlsLkxvd01lbW9yeVdhdGNoZXIkMS5ydW4oTG93TWVtb3J5V2F0Y2hlci5qYXZhOjYwKQorCisgICBMb2NrZWQgb3duYWJsZSBzeW5jaHJvbml6ZXJzOgorCS0gTm9uZQorCisiRm9jdXNNYW5hZ2VyIHRpbWVyIiBkYWVtb24gcHJpbz0yIHRpZD0xMTQxNTI4MDAgbmlkPTB4MTE1ZmU2MDAwIGluIE9iamVjdC53YWl0KCkgWzExNWZlNTAwMF0KKyAgIGphdmEubGFuZy5UaHJlYWQuU3RhdGU6IFdBSVRJTkcgKG9uIG9iamVjdCBtb25pdG9yKQorCWF0IGphdmEubGFuZy5PYmplY3Qud2FpdChOYXRpdmUgTWV0aG9kKQorCS0gd2FpdGluZyBvbiA8N2M5NmI0MjI4PiAoYSBqYXZhLnV0aWwuVGFza1F1ZXVlKQorCWF0IGphdmEubGFuZy5PYmplY3Qud2FpdChPYmplY3QuamF2YTo0ODUpCisJYXQgamF2YS51dGlsLlRpbWVyVGhyZWFkLm1haW5Mb29wKFRpbWVyLmphdmE6NDgzKQorCS0gbG9ja2VkIDw3Yzk2YjQyMjg+IChhIGphdmEudXRpbC5UYXNrUXVldWUpCisJYXQgamF2YS51dGlsLlRpbWVyVGhyZWFkLnJ1bihUaW1lci5qYXZhOjQ2MikKKworICAgTG9ja2VkIG93bmFibGUgc3luY2hyb25pemVyczoKKwktIE5vbmUKKworIlNoYXJlZCBTaW1wbGVUaW1lciIgZGFlbW9uIHByaW89MiB0aWQ9MTAzNjk0ODAwIG5pZD0weDExNWVlMzAwMCBpbiBPYmplY3Qud2FpdCgpIFsxMTVlZTIwMDBdCisgICBqYXZhLmxhbmcuVGhyZWFkLlN0YXRlOiBXQUlUSU5HIChvbiBvYmplY3QgbW9uaXRvcikKKwlhdCBqYXZhLmxhbmcuT2JqZWN0LndhaXQoTmF0aXZlIE1ldGhvZCkKKwktIHdhaXRpbmcgb24gPDdjOTZiM2Q0OD4gKGEgamF2YS51dGlsLlRhc2tRdWV1ZSkKKwlhdCBqYXZhLmxhbmcuT2JqZWN0LndhaXQoT2JqZWN0LmphdmE6NDg1KQorCWF0IGphdmEudXRpbC5UaW1lclRocmVhZC5tYWluTG9vcChUaW1lci5qYXZhOjQ4MykKKwktIGxvY2tlZCA8N2M5NmIzZDQ4PiAoYSBqYXZhLnV0aWwuVGFza1F1ZXVlKQorCWF0IGphdmEudXRpbC5UaW1lclRocmVhZC5ydW4oVGltZXIuamF2YTo0NjIpCisKKyAgIExvY2tlZCBvd25hYmxlIHN5bmNocm9uaXplcnM6CisJLSBOb25lCisKKyJYTUwtUlBDIFdlYmxpc3RlbmVyIiBwcmlvPTMgdGlkPTEwMzc4NDgwMCBuaWQ9MHgxMTVkZTAwMDAgcnVubmFibGUgWzExNWRkZjAwMF0KKyAgIGphdmEubGFuZy5UaHJlYWQuU3RhdGU6IFJVTk5BQkxFCisJYXQgamF2YS5uZXQuUGxhaW5Tb2NrZXRJbXBsLnNvY2tldEFjY2VwdChOYXRpdmUgTWV0aG9kKQorCWF0IGphdmEubmV0LlBsYWluU29ja2V0SW1wbC5hY2NlcHQoUGxhaW5Tb2NrZXRJbXBsLmphdmE6MzkwKQorCS0gbG9ja2VkIDw3Yzk2YTBmYTg+IChhIGphdmEubmV0LlNvY2tzU29ja2V0SW1wbCkKKwlhdCBqYXZhLm5ldC5TZXJ2ZXJTb2NrZXQuaW1wbEFjY2VwdChTZXJ2ZXJTb2NrZXQuamF2YTo0NTMpCisJYXQgamF2YS5uZXQuU2VydmVyU29ja2V0LmFjY2VwdChTZXJ2ZXJTb2NrZXQuamF2YTo0MjEpCisJYXQgb3JnLmFwYWNoZS54bWxycGMuV2ViU2VydmVyLnJ1bihXZWJTZXJ2ZXIuamF2YTo0NTMpCisJYXQgamF2YS5sYW5nLlRocmVhZC5ydW4oVGhyZWFkLmphdmE6NjgwKQorCisgICBMb2NrZWQgb3duYWJsZSBzeW5jaHJvbml6ZXJzOgorCS0gTm9uZQorCisiUGVyZm9ybWFuY2Ugd2F0Y2hlciIgcHJpbz0xIHRpZD0xMDM3MGIwMDAgbmlkPTB4MTE1Y2RkMDAwIHdhaXRpbmcgb24gY29uZGl0aW9uIFsxMTVjZGMwMDBdCisgICBqYXZhLmxhbmcuVGhyZWFkLlN0YXRlOiBUSU1FRF9XQUlUSU5HIChwYXJraW5nKQorCWF0IHN1bi5taXNjLlVuc2FmZS5wYXJrKE5hdGl2ZSBNZXRob2QpCisJLSBwYXJraW5nIHRvIHdhaXQgZm9yICA8N2M5NjllOTEwPiAoYSBqYXZhLnV0aWwuY29uY3VycmVudC5TZW1hcGhvcmUkTm9uZmFpclN5bmMpCisJYXQgamF2YS51dGlsLmNvbmN1cnJlbnQubG9ja3MuTG9ja1N1cHBvcnQucGFya05hbm9zKExvY2tTdXBwb3J0LmphdmE6MTk4KQorCWF0IGphdmEudXRpbC5jb25jdXJyZW50LmxvY2tzLkFic3RyYWN0UXVldWVkU3luY2hyb25pemVyLmRvQWNxdWlyZVNoYXJlZE5hbm9zKEFic3RyYWN0UXVldWVkU3luY2hyb25pemVyLmphdmE6MTAxMSkKKwlhdCBqYXZhLnV0aWwuY29uY3VycmVudC5sb2Nrcy5BYnN0cmFjdFF1ZXVlZFN5bmNocm9uaXplci50cnlBY3F1aXJlU2hhcmVkTmFub3MoQWJzdHJhY3RRdWV1ZWRTeW5jaHJvbml6ZXIuamF2YToxMzAzKQorCWF0IGphdmEudXRpbC5jb25jdXJyZW50LlNlbWFwaG9yZS50cnlBY3F1aXJlKFNlbWFwaG9yZS5qYXZhOjM4MykKKwlhdCBjb20uaW50ZWxsaWouZGlhZ25vc3RpYy5QZXJmb3JtYW5jZVdhdGNoZXIuY2hlY2tFRFRSZXNwb25zaXZlbmVzcyhQZXJmb3JtYW5jZVdhdGNoZXIuamF2YToxNTYpCisJYXQgY29tLmludGVsbGlqLmRpYWdub3N0aWMuUGVyZm9ybWFuY2VXYXRjaGVyLmFjY2VzcyQxMDAoUGVyZm9ybWFuY2VXYXRjaGVyLmphdmE6NDApCisJYXQgY29tLmludGVsbGlqLmRpYWdub3N0aWMuUGVyZm9ybWFuY2VXYXRjaGVyJDIucnVuKFBlcmZvcm1hbmNlV2F0Y2hlci5qYXZhOjExMSkKKwlhdCBqYXZhLmxhbmcuVGhyZWFkLnJ1bihUaHJlYWQuamF2YTo2ODApCisKKyAgIExvY2tlZCBvd25hYmxlIHN5bmNocm9uaXplcnM6CisJLSBOb25lCisKKyJEb2N1bWVudCBjb21taXQgdGhyZWFkIiBwcmlvPTYgdGlkPTExNDBhODgwMCBuaWQ9MHgxMTU5MDEwMDAgaW4gT2JqZWN0LndhaXQoKSBbMTE1OTAwMDAwXQorICAgamF2YS5sYW5nLlRocmVhZC5TdGF0ZTogV0FJVElORyAob24gb2JqZWN0IG1vbml0b3IpCisJYXQgamF2YS5sYW5nLk9iamVjdC53YWl0KE5hdGl2ZSBNZXRob2QpCisJLSB3YWl0aW5nIG9uIDw3YzkwYmM1OTg+IChhIGNvbS5pbnRlbGxpai51dGlsLmNvbnRhaW5lcnMuUXVldWUpCisJYXQgamF2YS5sYW5nLk9iamVjdC53YWl0KE9iamVjdC5qYXZhOjQ4NSkKKwlhdCBjb20uaW50ZWxsaWoucHNpLmltcGwuRG9jdW1lbnRDb21taXRUaHJlYWQucnVuKERvY3VtZW50Q29tbWl0VGhyZWFkLmphdmE6Mjc1KQorCS0gbG9ja2VkIDw3YzkwYmM1OTg+IChhIGNvbS5pbnRlbGxpai51dGlsLmNvbnRhaW5lcnMuUXVldWUpCisJYXQgamF2YS5sYW5nLlRocmVhZC5ydW4oVGhyZWFkLmphdmE6NjgwKQorCisgICBMb2NrZWQgb3duYWJsZSBzeW5jaHJvbml6ZXJzOgorCS0gTm9uZQorCisiQXBwbGljYXRpb25JbXBsIHBvb2xlZCB0aHJlYWQgMCBbUmVhZEFjY2Vzc1Rva2VuXSIgcHJpbz00IHRpZD0xMDM2OTM4MDAgbmlkPTB4MTE0OTAxMDAwIHdhaXRpbmcgZm9yIG1vbml0b3IgZW50cnkgWzExNDhmZjAwMF0KKyAgIGphdmEubGFuZy5UaHJlYWQuU3RhdGU6IEJMT0NLRUQgKG9uIG9iamVjdCBtb25pdG9yKQorCWF0IGNvbS5pbnRlbGxpai51dGlsLmluZGV4aW5nLkNoYW5nZVRyYWNraW5nVmFsdWVDb250YWluZXIuZ2V0TWVyZ2VkRGF0YShDaGFuZ2VUcmFja2luZ1ZhbHVlQ29udGFpbmVyLmphdmE6MTI3KQorCS0gd2FpdGluZyB0byBsb2NrIDw3Yzk3MzNmYTA+IChhIGNvbS5pbnRlbGxpai51dGlsLmluZGV4aW5nLlZhbHVlQ29udGFpbmVyTWFwKQorCWF0IGNvbS5pbnRlbGxpai51dGlsLmluZGV4aW5nLkNoYW5nZVRyYWNraW5nVmFsdWVDb250YWluZXIuZ2V0VmFsdWVJdGVyYXRvcihDaGFuZ2VUcmFja2luZ1ZhbHVlQ29udGFpbmVyLmphdmE6OTgpCisJYXQgY29tLmludGVsbGlqLnV0aWwuaW5kZXhpbmcuRmlsZUJhc2VkSW5kZXgucHJvY2Vzc1ZhbHVlc0ltcGwoRmlsZUJhc2VkSW5kZXguamF2YTo4ODcpCisJYXQgY29tLmludGVsbGlqLnV0aWwuaW5kZXhpbmcuRmlsZUJhc2VkSW5kZXgucHJvY2Vzc1ZhbHVlcyhGaWxlQmFzZWRJbmRleC5qYXZhOjg2MCkKKwlhdCBjb20uaW50ZWxsaWouZmxleC51aURlc2lnbmVyLmxpYnJhcmllcy5MaWJyYXJ5U3R5bGVJbmZvQ29sbGVjdG9yJDEucHJvY2VzcyhMaWJyYXJ5U3R5bGVJbmZvQ29sbGVjdG9yLmphdmE6NDIpCisJYXQgY29tLmludGVsbGlqLmZsZXgudWlEZXNpZ25lci5saWJyYXJpZXMuTGlicmFyeVN0eWxlSW5mb0NvbGxlY3RvciQxLnByb2Nlc3MoTGlicmFyeVN0eWxlSW5mb0NvbGxlY3Rvci5qYXZhOjM5KQorCWF0IGNvbS5pbnRlbGxpai51dGlsLmluZGV4aW5nLk1lbW9yeUluZGV4U3RvcmFnZSQxLnByb2Nlc3MoTWVtb3J5SW5kZXhTdG9yYWdlLmphdmE6MTE4KQorCWF0IGNvbS5pbnRlbGxpai51dGlsLmlvLlBlcnNpc3RlbnRFbnVtZXJhdG9yQmFzZS5pdGVyYXRlRGF0YShQZXJzaXN0ZW50RW51bWVyYXRvckJhc2UuamF2YTozNzMpCisJLSBsb2NrZWQgPDdjOGZkNDU1OD4gKGEgY29tLmludGVsbGlqLnV0aWwuaW8uUGFnZWRGaWxlU3RvcmFnZSRTdG9yYWdlTG9jaykKKwlhdCBjb20uaW50ZWxsaWoudXRpbC5pby5QZXJzaXN0ZW50SGFzaE1hcC5wcm9jZXNzS2V5cyhQZXJzaXN0ZW50SGFzaE1hcC5qYXZhOjMxOCkKKwktIGxvY2tlZCA8N2M5NzM0MDA4PiAoYSBjb20uaW50ZWxsaWoudXRpbC5pby5QZXJzaXN0ZW50QlRyZWVFbnVtZXJhdG9yKQorCWF0IGNvbS5pbnRlbGxpai51dGlsLmluZGV4aW5nLk1hcEluZGV4U3RvcmFnZS5wcm9jZXNzS2V5cyhNYXBJbmRleFN0b3JhZ2UuamF2YToxNzMpCisJYXQgY29tLmludGVsbGlqLnV0aWwuaW5kZXhpbmcuTWVtb3J5SW5kZXhTdG9yYWdlLnByb2Nlc3NLZXlzKE1lbW9yeUluZGV4U3RvcmFnZS5qYXZhOjEyNikKKwlhdCBjb20uaW50ZWxsaWoudXRpbC5pbmRleGluZy5NYXBSZWR1Y2VJbmRleC5wcm9jZXNzQWxsS2V5cyhNYXBSZWR1Y2VJbmRleC5qYXZhOjE2NCkKKwlhdCBjb20uaW50ZWxsaWoudXRpbC5pbmRleGluZy5GaWxlQmFzZWRJbmRleC5wcm9jZXNzQWxsS2V5cyhGaWxlQmFzZWRJbmRleC5qYXZhOjY4OCkKKwlhdCBjb20uaW50ZWxsaWouZmxleC51aURlc2lnbmVyLmxpYnJhcmllcy5MaWJyYXJ5U3R5bGVJbmZvQ29sbGVjdG9yLmNvbGxlY3RJbmhlcml0ZWQoTGlicmFyeVN0eWxlSW5mb0NvbGxlY3Rvci5qYXZhOjM5KQorCWF0IGNvbS5pbnRlbGxpai5mbGV4LnVpRGVzaWduZXIubGlicmFyaWVzLkxpYnJhcnlTdHlsZUluZm9Db2xsZWN0b3IuY29uc3VtZShMaWJyYXJ5U3R5bGVJbmZvQ29sbGVjdG9yLmphdmE6NzMpCisJYXQgY29tLmludGVsbGlqLmZsZXgudWlEZXNpZ25lci5saWJyYXJpZXMuTGlicmFyeVN0eWxlSW5mb0NvbGxlY3Rvci5jb25zdW1lKExpYnJhcnlTdHlsZUluZm9Db2xsZWN0b3IuamF2YToxOSkKKwlhdCBjb20uaW50ZWxsaWouZmxleC51aURlc2lnbmVyLmxpYnJhcmllcy5MaWJyYXJ5TWFuYWdlci5jcmVhdGVPcmlnaW5hbExpYnJhcnkoTGlicmFyeU1hbmFnZXIuamF2YToyNjgpCisJYXQgY29tLmludGVsbGlqLmZsZXgudWlEZXNpZ25lci5saWJyYXJpZXMuTGlicmFyeUNvbGxlY3Rvci5hZGRMaWJyYXJ5KExpYnJhcnlDb2xsZWN0b3IuamF2YToyNDMpCisJYXQgY29tLmludGVsbGlqLmZsZXgudWlEZXNpZ25lci5saWJyYXJpZXMuTGlicmFyeUNvbGxlY3Rvci5jb2xsZWN0RnJvbVNka09yZGVyRW50cnkoTGlicmFyeUNvbGxlY3Rvci5qYXZhOjIyMykKKwlhdCBjb20uaW50ZWxsaWouZmxleC51aURlc2lnbmVyLmxpYnJhcmllcy5MaWJyYXJ5Q29sbGVjdG9yLmNvbGxlY3QoTGlicmFyeUNvbGxlY3Rvci5qYXZhOjEzOCkKKwlhdCBjb20uaW50ZWxsaWouZmxleC51aURlc2lnbmVyLmxpYnJhcmllcy5MaWJyYXJ5TWFuYWdlci5pbml0TGlicmFyeVNldHMoTGlicmFyeU1hbmFnZXIuamF2YTo5NSkKKwlhdCBjb20uaW50ZWxsaWouZmxleC51aURlc2lnbmVyLkRlc2lnbmVyQXBwbGljYXRpb25MYXVuY2hlciQ3LmNhbGwoRGVzaWduZXJBcHBsaWNhdGlvbkxhdW5jaGVyLmphdmE6Mzc2KQorCWF0IGNvbS5pbnRlbGxpai5mbGV4LnVpRGVzaWduZXIuRGVzaWduZXJBcHBsaWNhdGlvbkxhdW5jaGVyJDcuY2FsbChEZXNpZ25lckFwcGxpY2F0aW9uTGF1bmNoZXIuamF2YTozNjQpCisJYXQgY29tLmludGVsbGlqLm9wZW5hcGkuYXBwbGljYXRpb24uaW1wbC5BcHBsaWNhdGlvbkltcGwkNy5jYWxsKEFwcGxpY2F0aW9uSW1wbC5qYXZhOjQ0MSkKKwlhdCBqYXZhLnV0aWwuY29uY3VycmVudC5GdXR1cmVUYXNrJFN5bmMuaW5uZXJSdW4oRnV0dXJlVGFzay5qYXZhOjMwMykKKwlhdCBqYXZhLnV0aWwuY29uY3VycmVudC5GdXR1cmVUYXNrLnJ1bihGdXR1cmVUYXNrLmphdmE6MTM4KQorCWF0IGphdmEudXRpbC5jb25jdXJyZW50LlRocmVhZFBvb2xFeGVjdXRvciRXb3JrZXIucnVuVGFzayhUaHJlYWRQb29sRXhlY3V0b3IuamF2YTo4ODYpCisJYXQgamF2YS51dGlsLmNvbmN1cnJlbnQuVGhyZWFkUG9vbEV4ZWN1dG9yJFdvcmtlci5ydW4oVGhyZWFkUG9vbEV4ZWN1dG9yLmphdmE6OTA4KQorCWF0IGphdmEubGFuZy5UaHJlYWQucnVuKFRocmVhZC5qYXZhOjY4MCkKKwlhdCBjb20uaW50ZWxsaWoub3BlbmFwaS5hcHBsaWNhdGlvbi5pbXBsLkFwcGxpY2F0aW9uSW1wbCQxJDEucnVuKEFwcGxpY2F0aW9uSW1wbC5qYXZhOjEzNykKKworICAgTG9ja2VkIG93bmFibGUgc3luY2hyb25pemVyczoKKwktIDw3YzkwNTRhMTA+IChhIGphdmEudXRpbC5jb25jdXJyZW50LmxvY2tzLlJlZW50cmFudExvY2skTm9uZmFpclN5bmMpCisJLSA8N2M5NzMzZjgwPiAoYSBqYXZhLnV0aWwuY29uY3VycmVudC5sb2Nrcy5SZWVudHJhbnRMb2NrJE5vbmZhaXJTeW5jKQorCisiUHJvZ3Jlc3MgQ2FuY2VsIENoZWNrZXIiIHByaW89OSB0aWQ9MTAzNWMwODAwIG5pZD0weDExNGY0NjAwMCB3YWl0aW5nIG9uIGNvbmRpdGlvbiBbMTE0ZjQ1MDAwXQorICAgamF2YS5sYW5nLlRocmVhZC5TdGF0ZTogVElNRURfV0FJVElORyAoc2xlZXBpbmcpCisJYXQgamF2YS5sYW5nLlRocmVhZC5zbGVlcChOYXRpdmUgTWV0aG9kKQorCWF0IGNvbS5pbnRlbGxpai5vcGVuYXBpLnByb2dyZXNzLmltcGwuUHJvZ3Jlc3NNYW5hZ2VySW1wbCQxLnJ1bihQcm9ncmVzc01hbmFnZXJJbXBsLmphdmE6NjApCisKKyAgIExvY2tlZCBvd25hYmxlIHN5bmNocm9uaXplcnM6CisJLSBOb25lCisKKyJTdG9yZVJlZnJlc2hTdGF0dXNUaHJlYWQiIGRhZW1vbiBwcmlvPTEgdGlkPTEwMzViODAwMCBuaWQ9MHgxMTRlNDMwMDAgd2FpdGluZyBvbiBjb25kaXRpb24gWzExNGU0MjAwMF0KKyAgIGphdmEubGFuZy5UaHJlYWQuU3RhdGU6IFRJTUVEX1dBSVRJTkcgKHNsZWVwaW5nKQorCWF0IGphdmEubGFuZy5UaHJlYWQuc2xlZXAoTmF0aXZlIE1ldGhvZCkKKwlhdCBjb20uaW50ZWxsaWoub3BlbmFwaS52ZnMuaW1wbC5sb2NhbC5Mb2NhbEZpbGVTeXN0ZW1JbXBsJFN0b3JlUmVmcmVzaFN0YXR1c1RocmVhZC5ydW4oTG9jYWxGaWxlU3lzdGVtSW1wbC5qYXZhOjMyNSkKKworICAgTG9ja2VkIG93bmFibGUgc3luY2hyb25pemVyczoKKwktIE5vbmUKKworIldhdGNoRm9yQ2hhbmdlc1RocmVhZCIgcHJpbz02IHRpZD0xMDMwYTUwMDAgbmlkPTB4MTE0ZDQwMDAwIHJ1bm5hYmxlIFsxMTRkM2YwMDBdCisgICBqYXZhLmxhbmcuVGhyZWFkLlN0YXRlOiBSVU5OQUJMRQorCWF0IGphdmEuaW8uRmlsZUlucHV0U3RyZWFtLnJlYWRCeXRlcyhOYXRpdmUgTWV0aG9kKQorCWF0IGphdmEuaW8uRmlsZUlucHV0U3RyZWFtLnJlYWQoRmlsZUlucHV0U3RyZWFtLmphdmE6MTk5KQorCWF0IGphdmEubGFuZy5VTklYUHJvY2VzcyREZWZlcnJlZENsb3NlSW5wdXRTdHJlYW0ucmVhZChVTklYUHJvY2Vzcy5qYXZhOjIyNykKKwlhdCBqYXZhLmlvLkJ1ZmZlcmVkSW5wdXRTdHJlYW0ucmVhZDEoQnVmZmVyZWRJbnB1dFN0cmVhbS5qYXZhOjI1NikKKwlhdCBqYXZhLmlvLkJ1ZmZlcmVkSW5wdXRTdHJlYW0ucmVhZChCdWZmZXJlZElucHV0U3RyZWFtLmphdmE6MzE3KQorCS0gbG9ja2VkIDw3YzhmZTIwMTA+IChhIGphdmEuaW8uQnVmZmVyZWRJbnB1dFN0cmVhbSkKKwlhdCBzdW4ubmlvLmNzLlN0cmVhbURlY29kZXIucmVhZEJ5dGVzKFN0cmVhbURlY29kZXIuamF2YToyNjQpCisJYXQgc3VuLm5pby5jcy5TdHJlYW1EZWNvZGVyLmltcGxSZWFkKFN0cmVhbURlY29kZXIuamF2YTozMDYpCisJYXQgc3VuLm5pby5jcy5TdHJlYW1EZWNvZGVyLnJlYWQoU3RyZWFtRGVjb2Rlci5qYXZhOjE1OCkKKwktIGxvY2tlZCA8N2M4ZmU0MjQ4PiAoYSBqYXZhLmlvLklucHV0U3RyZWFtUmVhZGVyKQorCWF0IGphdmEuaW8uSW5wdXRTdHJlYW1SZWFkZXIucmVhZChJbnB1dFN0cmVhbVJlYWRlci5qYXZhOjE2NykKKwlhdCBqYXZhLmlvLkJ1ZmZlcmVkUmVhZGVyLmZpbGwoQnVmZmVyZWRSZWFkZXIuamF2YToxMzYpCisJYXQgamF2YS5pby5CdWZmZXJlZFJlYWRlci5yZWFkTGluZShCdWZmZXJlZFJlYWRlci5qYXZhOjI5OSkKKwktIGxvY2tlZCA8N2M4ZmU0MjQ4PiAoYSBqYXZhLmlvLklucHV0U3RyZWFtUmVhZGVyKQorCWF0IGphdmEuaW8uQnVmZmVyZWRSZWFkZXIucmVhZExpbmUoQnVmZmVyZWRSZWFkZXIuamF2YTozNjIpCisJYXQgY29tLmludGVsbGlqLm9wZW5hcGkudmZzLmltcGwubG9jYWwuRmlsZVdhdGNoZXIucmVhZExpbmUoRmlsZVdhdGNoZXIuamF2YTo0ODEpCisJYXQgY29tLmludGVsbGlqLm9wZW5hcGkudmZzLmltcGwubG9jYWwuRmlsZVdhdGNoZXIuYWNjZXNzJDMwMChGaWxlV2F0Y2hlci5qYXZhOjQ4KQorCWF0IGNvbS5pbnRlbGxpai5vcGVuYXBpLnZmcy5pbXBsLmxvY2FsLkZpbGVXYXRjaGVyJFdhdGNoRm9yQ2hhbmdlc1RocmVhZC5ydW4oRmlsZVdhdGNoZXIuamF2YTozNTQpCisKKyAgIExvY2tlZCBvd25hYmxlIHN5bmNocm9uaXplcnM6CisJLSBOb25lCisKKyJwcm9jZXNzIHJlYXBlciIgZGFlbW9uIHByaW89NiB0aWQ9MTAzMGE0MDAwIG5pZD0weDExNGMzZDAwMCBydW5uYWJsZSBbMTE0YzNjMDAwXQorICAgamF2YS5sYW5nLlRocmVhZC5TdGF0ZTogUlVOTkFCTEUKKwlhdCBqYXZhLmxhbmcuVU5JWFByb2Nlc3Mud2FpdEZvclByb2Nlc3NFeGl0KE5hdGl2ZSBNZXRob2QpCisJYXQgamF2YS5sYW5nLlVOSVhQcm9jZXNzLmFjY2VzcyQ5MDAoVU5JWFByb2Nlc3MuamF2YToxNykKKwlhdCBqYXZhLmxhbmcuVU5JWFByb2Nlc3MkMiQxLnJ1bihVTklYUHJvY2Vzcy5qYXZhOjg2KQorCisgICBMb2NrZWQgb3duYWJsZSBzeW5jaHJvbml6ZXJzOgorCS0gTm9uZQorCisiRmx1c2hpbmcgdGhyZWFkIiBkYWVtb24gcHJpbz01IHRpZD0xMDMwYTM4MDAgbmlkPTB4MTE0YWRkMDAwIHdhaXRpbmcgb24gY29uZGl0aW9uIFsxMTRhZGMwMDBdCisgICBqYXZhLmxhbmcuVGhyZWFkLlN0YXRlOiBXQUlUSU5HIChwYXJraW5nKQorCWF0IHN1bi5taXNjLlVuc2FmZS5wYXJrKE5hdGl2ZSBNZXRob2QpCisJLSBwYXJraW5nIHRvIHdhaXQgZm9yICA8N2M5NzMzZjgwPiAoYSBqYXZhLnV0aWwuY29uY3VycmVudC5sb2Nrcy5SZWVudHJhbnRMb2NrJE5vbmZhaXJTeW5jKQorCWF0IGphdmEudXRpbC5jb25jdXJyZW50LmxvY2tzLkxvY2tTdXBwb3J0LnBhcmsoTG9ja1N1cHBvcnQuamF2YToxNTgpCisJYXQgamF2YS51dGlsLmNvbmN1cnJlbnQubG9ja3MuQWJzdHJhY3RRdWV1ZWRTeW5jaHJvbml6ZXIucGFya0FuZENoZWNrSW50ZXJydXB0KEFic3RyYWN0UXVldWVkU3luY2hyb25pemVyLmphdmE6ODExKQorCWF0IGphdmEudXRpbC5jb25jdXJyZW50LmxvY2tzLkFic3RyYWN0UXVldWVkU3luY2hyb25pemVyLmFjcXVpcmVRdWV1ZWQoQWJzdHJhY3RRdWV1ZWRTeW5jaHJvbml6ZXIuamF2YTo4NDIpCisJYXQgamF2YS51dGlsLmNvbmN1cnJlbnQubG9ja3MuQWJzdHJhY3RRdWV1ZWRTeW5jaHJvbml6ZXIuYWNxdWlyZShBYnN0cmFjdFF1ZXVlZFN5bmNocm9uaXplci5qYXZhOjExNzgpCisJYXQgamF2YS51dGlsLmNvbmN1cnJlbnQubG9ja3MuUmVlbnRyYW50TG9jayROb25mYWlyU3luYy5sb2NrKFJlZW50cmFudExvY2suamF2YToxODYpCisJYXQgamF2YS51dGlsLmNvbmN1cnJlbnQubG9ja3MuUmVlbnRyYW50TG9jay5sb2NrKFJlZW50cmFudExvY2suamF2YToyNjIpCisJYXQgY29tLmludGVsbGlqLnV0aWwuaW5kZXhpbmcuTWFwSW5kZXhTdG9yYWdlLmZsdXNoKE1hcEluZGV4U3RvcmFnZS5qYXZhOjEwOCkKKwlhdCBjb20uaW50ZWxsaWoudXRpbC5pbmRleGluZy5NZW1vcnlJbmRleFN0b3JhZ2UuZmx1c2goTWVtb3J5SW5kZXhTdG9yYWdlLmphdmE6OTcpCisJYXQgY29tLmludGVsbGlqLnV0aWwuaW5kZXhpbmcuTWFwUmVkdWNlSW5kZXguZmx1c2goTWFwUmVkdWNlSW5kZXguamF2YTo5NikKKwlhdCBjb20uaW50ZWxsaWoudXRpbC5pbmRleGluZy5GaWxlQmFzZWRJbmRleC5mbHVzaEFsbEluZGljZXMoRmlsZUJhc2VkSW5kZXguamF2YTo2NTIpCisJYXQgY29tLmludGVsbGlqLnV0aWwuaW5kZXhpbmcuRmlsZUJhc2VkSW5kZXguYWNjZXNzJDEyMDAoRmlsZUJhc2VkSW5kZXguamF2YTo5NSkKKwlhdCBjb20uaW50ZWxsaWoudXRpbC5pbmRleGluZy5GaWxlQmFzZWRJbmRleCQ3LnJ1bihGaWxlQmFzZWRJbmRleC5qYXZhOjMzMikKKwlhdCBqYXZhLnV0aWwuY29uY3VycmVudC5FeGVjdXRvcnMkUnVubmFibGVBZGFwdGVyLmNhbGwoRXhlY3V0b3JzLmphdmE6NDQxKQorCWF0IGphdmEudXRpbC5jb25jdXJyZW50LkZ1dHVyZVRhc2skU3luYy5pbm5lclJ1bkFuZFJlc2V0KEZ1dHVyZVRhc2suamF2YTozMTcpCisJYXQgamF2YS51dGlsLmNvbmN1cnJlbnQuRnV0dXJlVGFzay5ydW5BbmRSZXNldChGdXR1cmVUYXNrLmphdmE6MTUwKQorCWF0IGphdmEudXRpbC5jb25jdXJyZW50LlNjaGVkdWxlZFRocmVhZFBvb2xFeGVjdXRvciRTY2hlZHVsZWRGdXR1cmVUYXNrLmFjY2VzcyQxMDEoU2NoZWR1bGVkVGhyZWFkUG9vbEV4ZWN1dG9yLmphdmE6OTgpCisJYXQgamF2YS51dGlsLmNvbmN1cnJlbnQuU2NoZWR1bGVkVGhyZWFkUG9vbEV4ZWN1dG9yJFNjaGVkdWxlZEZ1dHVyZVRhc2sucnVuUGVyaW9kaWMoU2NoZWR1bGVkVGhyZWFkUG9vbEV4ZWN1dG9yLmphdmE6MTgwKQorCWF0IGphdmEudXRpbC5jb25jdXJyZW50LlNjaGVkdWxlZFRocmVhZFBvb2xFeGVjdXRvciRTY2hlZHVsZWRGdXR1cmVUYXNrLnJ1bihTY2hlZHVsZWRUaHJlYWRQb29sRXhlY3V0b3IuamF2YToyMDQpCisJYXQgamF2YS51dGlsLmNvbmN1cnJlbnQuVGhyZWFkUG9vbEV4ZWN1dG9yJFdvcmtlci5ydW5UYXNrKFRocmVhZFBvb2xFeGVjdXRvci5qYXZhOjg4NikKKwlhdCBqYXZhLnV0aWwuY29uY3VycmVudC5UaHJlYWRQb29sRXhlY3V0b3IkV29ya2VyLnJ1bihUaHJlYWRQb29sRXhlY3V0b3IuamF2YTo5MDgpCisJYXQgamF2YS5sYW5nLlRocmVhZC5ydW4oVGhyZWFkLmphdmE6NjgwKQorCisgICBMb2NrZWQgb3duYWJsZSBzeW5jaHJvbml6ZXJzOgorCS0gPDdjOGZkZWFkMD4gKGEgamF2YS51dGlsLmNvbmN1cnJlbnQubG9ja3MuUmVlbnRyYW50TG9jayROb25mYWlyU3luYykKKworIlBvbGxlciBTdW5QS0NTMTEtRGFyd2luIiBkYWVtb24gcHJpbz0xIHRpZD0xMTQ3YzAwMDAgbmlkPTB4MTEzY2FiMDAwIHdhaXRpbmcgb24gY29uZGl0aW9uIFsxMTNjYWEwMDBdCisgICBqYXZhLmxhbmcuVGhyZWFkLlN0YXRlOiBUSU1FRF9XQUlUSU5HIChzbGVlcGluZykKKwlhdCBqYXZhLmxhbmcuVGhyZWFkLnNsZWVwKE5hdGl2ZSBNZXRob2QpCisJYXQgc3VuLnNlY3VyaXR5LnBrY3MxMS5TdW5QS0NTMTEkVG9rZW5Qb2xsZXIucnVuKFN1blBLQ1MxMS5qYXZhOjY5MikKKwlhdCBqYXZhLmxhbmcuVGhyZWFkLnJ1bihUaHJlYWQuamF2YTo2ODApCisKKyAgIExvY2tlZCBvd25hYmxlIHN5bmNocm9uaXplcnM6CisJLSBOb25lCisKKyJ0aW1lZCByZWZlcmVuY2UgZGlzcG9zZXIiIGRhZW1vbiBwcmlvPTIgdGlkPTExNTQyMTAwMCBuaWQ9MHgxMTNlYjMwMDAgd2FpdGluZyBvbiBjb25kaXRpb24gWzExM2ViMjAwMF0KKyAgIGphdmEubGFuZy5UaHJlYWQuU3RhdGU6IFRJTUVEX1dBSVRJTkcgKHBhcmtpbmcpCisJYXQgc3VuLm1pc2MuVW5zYWZlLnBhcmsoTmF0aXZlIE1ldGhvZCkKKwktIHBhcmtpbmcgdG8gd2FpdCBmb3IgIDw3YzkwY2ZmMjg+IChhIGphdmEudXRpbC5jb25jdXJyZW50LmxvY2tzLkFic3RyYWN0UXVldWVkU3luY2hyb25pemVyJENvbmRpdGlvbk9iamVjdCkKKwlhdCBqYXZhLnV0aWwuY29uY3VycmVudC5sb2Nrcy5Mb2NrU3VwcG9ydC5wYXJrTmFub3MoTG9ja1N1cHBvcnQuamF2YToxOTgpCisJYXQgamF2YS51dGlsLmNvbmN1cnJlbnQubG9ja3MuQWJzdHJhY3RRdWV1ZWRTeW5jaHJvbml6ZXIkQ29uZGl0aW9uT2JqZWN0LmF3YWl0TmFub3MoQWJzdHJhY3RRdWV1ZWRTeW5jaHJvbml6ZXIuamF2YToyMDI1KQorCWF0IGphdmEudXRpbC5jb25jdXJyZW50LkRlbGF5UXVldWUudGFrZShEZWxheVF1ZXVlLmphdmE6MTY0KQorCWF0IGphdmEudXRpbC5jb25jdXJyZW50LlNjaGVkdWxlZFRocmVhZFBvb2xFeGVjdXRvciREZWxheWVkV29ya1F1ZXVlLnRha2UoU2NoZWR1bGVkVGhyZWFkUG9vbEV4ZWN1dG9yLmphdmE6NjA5KQorCWF0IGphdmEudXRpbC5jb25jdXJyZW50LlNjaGVkdWxlZFRocmVhZFBvb2xFeGVjdXRvciREZWxheWVkV29ya1F1ZXVlLnRha2UoU2NoZWR1bGVkVGhyZWFkUG9vbEV4ZWN1dG9yLmphdmE6NjAyKQorCWF0IGphdmEudXRpbC5jb25jdXJyZW50LlRocmVhZFBvb2xFeGVjdXRvci5nZXRUYXNrKFRocmVhZFBvb2xFeGVjdXRvci5qYXZhOjk0NykKKwlhdCBqYXZhLnV0aWwuY29uY3VycmVudC5UaHJlYWRQb29sRXhlY3V0b3IkV29ya2VyLnJ1bihUaHJlYWRQb29sRXhlY3V0b3IuamF2YTo5MDcpCisJYXQgamF2YS5sYW5nLlRocmVhZC5ydW4oVGhyZWFkLmphdmE6NjgwKQorCisgICBMb2NrZWQgb3duYWJsZSBzeW5jaHJvbml6ZXJzOgorCS0gTm9uZQorCisiQVdULUV2ZW50UXVldWUtMSAxLjAjMTEyLjExLCBlYXA6dHJ1ZSIgcHJpbz02IHRpZD0xMDMyOTEwMDAgbmlkPTB4MTEyMjRjMDAwIGluIE9iamVjdC53YWl0KCkgWzExMjI0YTAwMF0KKyAgIGphdmEubGFuZy5UaHJlYWQuU3RhdGU6IFdBSVRJTkcgKG9uIG9iamVjdCBtb25pdG9yKQorCWF0IGphdmEubGFuZy5PYmplY3Qud2FpdChOYXRpdmUgTWV0aG9kKQorCS0gd2FpdGluZyBvbiA8N2M5NDk5MmQwPiAoYSBjb20uaW50ZWxsaWoudXRpbC5jb25jdXJyZW5jeS5Xcml0ZXJQcmVmZXJlbmNlUmVhZFdyaXRlTG9jayRXcml0ZXJMb2NrKQorCWF0IGphdmEubGFuZy5PYmplY3Qud2FpdChPYmplY3QuamF2YTo0ODUpCisJYXQgY29tLmludGVsbGlqLnV0aWwuY29uY3VycmVuY3kuV3JpdGVyUHJlZmVyZW5jZVJlYWRXcml0ZUxvY2skV3JpdGVyTG9jay5hY3F1aXJlKFdyaXRlclByZWZlcmVuY2VSZWFkV3JpdGVMb2NrLmphdmE6MjQxKQorCS0gbG9ja2VkIDw3Yzk0OTkyZDA+IChhIGNvbS5pbnRlbGxpai51dGlsLmNvbmN1cnJlbmN5LldyaXRlclByZWZlcmVuY2VSZWFkV3JpdGVMb2NrJFdyaXRlckxvY2spCisJYXQgY29tLmludGVsbGlqLm9wZW5hcGkuYXBwbGljYXRpb24uaW1wbC5BcHBsaWNhdGlvbkltcGwkV3JpdGVBY2Nlc3NUb2tlbi48aW5pdD4oQXBwbGljYXRpb25JbXBsLmphdmE6MTEyNykKKwlhdCBjb20uaW50ZWxsaWoub3BlbmFwaS5hcHBsaWNhdGlvbi5pbXBsLkFwcGxpY2F0aW9uSW1wbC5hY3F1aXJlV3JpdGVBY3Rpb25Mb2NrKEFwcGxpY2F0aW9uSW1wbC5qYXZhOjEwOTIpCisJYXQgY29tLmludGVsbGlqLm9wZW5hcGkuYXBwbGljYXRpb24uaW1wbC5BcHBsaWNhdGlvbkltcGwucnVuV3JpdGVBY3Rpb24oQXBwbGljYXRpb25JbXBsLmphdmE6ODgxKQorCWF0IGNvbS5pbnRlbGxpai5vcGVuYXBpLmNvbXBvbmVudHMuaW1wbC5zdG9yZXMuU3RvcmFnZVV0aWwuc2F2ZShTdG9yYWdlVXRpbC5qYXZhOjEwNykKKwlhdCBjb20uaW50ZWxsaWoub3BlbmFwaS5jb21wb25lbnRzLmltcGwuc3RvcmVzLkZpbGVCYXNlZFN0b3JhZ2UkRmlsZVNhdmVTZXNzaW9uLmRvU2F2ZShGaWxlQmFzZWRTdG9yYWdlLmphdmE6MTY5KQorCWF0IGNvbS5pbnRlbGxpai5vcGVuYXBpLmNvbXBvbmVudHMuaW1wbC5zdG9yZXMuWG1sRWxlbWVudFN0b3JhZ2UkTXlTYXZlU2Vzc2lvbi5zYXZlTG9jYWxseShYbWxFbGVtZW50U3RvcmFnZS5qYXZhOjQyNikKKwlhdCBjb20uaW50ZWxsaWoub3BlbmFwaS5jb21wb25lbnRzLmltcGwuc3RvcmVzLlhtbEVsZW1lbnRTdG9yYWdlJE15U2F2ZVNlc3Npb24uc2F2ZShYbWxFbGVtZW50U3RvcmFnZS5qYXZhOjQxOCkKKwlhdCBjb20uaW50ZWxsaWoub3BlbmFwaS5jb21wb25lbnRzLmltcGwuc3RvcmVzLkNvbXBvdW5kU2F2ZVNlc3Npb24uc2F2ZShDb21wb3VuZFNhdmVTZXNzaW9uLmphdmE6NTIpCisJYXQgY29tLmludGVsbGlqLm9wZW5hcGkuY29tcG9uZW50cy5pbXBsLnN0b3Jlcy5TdGF0ZVN0b3JhZ2VNYW5hZ2VySW1wbCRNeVNhdmVTZXNzaW9uLnNhdmUoU3RhdGVTdG9yYWdlTWFuYWdlckltcGwuamF2YTo1MTEpCisJYXQgY29tLmludGVsbGlqLm9wZW5hcGkuY29tcG9uZW50cy5pbXBsLnN0b3Jlcy5Db21wb25lbnRTdG9yZUltcGwkU2F2ZVNlc3Npb25JbXBsLnNhdmUoQ29tcG9uZW50U3RvcmVJbXBsLmphdmE6NDM2KQorCWF0IGNvbS5pbnRlbGxpai5vcGVuYXBpLmNvbXBvbmVudHMuaW1wbC5zdG9yZXMuUHJvamVjdFN0b3JlSW1wbCRQcm9qZWN0U2F2ZVNlc3Npb24uc2F2ZShQcm9qZWN0U3RvcmVJbXBsLmphdmE6NTA4KQorCWF0IGNvbS5pbnRlbGxpai5vcGVuYXBpLmNvbXBvbmVudHMuaW1wbC5zdG9yZXMuU3RvcmVVdGlsLmRvU2F2ZShTdG9yZVV0aWwuamF2YTozMSkKKwlhdCBjb20uaW50ZWxsaWoub3BlbmFwaS5wcm9qZWN0LmltcGwuUHJvamVjdEltcGwuc2F2ZShQcm9qZWN0SW1wbC5qYXZhOjMyMykKKwlhdCBjb20uaW50ZWxsaWouaWRlLlNhdmVBbmRTeW5jSGFuZGxlci5zYXZlUHJvamVjdHNBbmREb2N1bWVudHMoU2F2ZUFuZFN5bmNIYW5kbGVyLmphdmE6MTM0KQorCWF0IGNvbS5pbnRlbGxpai5pZGUuU2F2ZUFuZFN5bmNIYW5kbGVyJDMub25GcmFtZURlYWN0aXZhdGVkKFNhdmVBbmRTeW5jSGFuZGxlci5qYXZhOjkxKQorCWF0IGNvbS5pbnRlbGxpai5pZGUuRnJhbWVTdGF0ZU1hbmFnZXJJbXBsLmZpcmVEZWFjdGl2YXRpb25FdmVudChGcmFtZVN0YXRlTWFuYWdlckltcGwuamF2YToxMDApCisJYXQgY29tLmludGVsbGlqLmlkZS5GcmFtZVN0YXRlTWFuYWdlckltcGwuYWNjZXNzJDUwMChGcmFtZVN0YXRlTWFuYWdlckltcGwuamF2YTozMSkKKwlhdCBjb20uaW50ZWxsaWouaWRlLkZyYW1lU3RhdGVNYW5hZ2VySW1wbCQyJDEucnVuKEZyYW1lU3RhdGVNYW5hZ2VySW1wbC5qYXZhOjcyKQorCWF0IGNvbS5pbnRlbGxpai51dGlsLkFsYXJtJFJlcXVlc3QkMS5ydW4oQWxhcm0uamF2YToyMzApCisJYXQgY29tLmludGVsbGlqLm9wZW5hcGkuYXBwbGljYXRpb24uaW1wbC5MYXRlckludm9jYXRvciRGbHVzaFF1ZXVlLnJ1bihMYXRlckludm9jYXRvci5qYXZhOjMzMykKKwktIGxvY2tlZCA8N2M5MDUxYzcwPiAoYSBqYXZhLmxhbmcuT2JqZWN0KQorCWF0IGphdmEuYXd0LmV2ZW50Lkludm9jYXRpb25FdmVudC5kaXNwYXRjaChJbnZvY2F0aW9uRXZlbnQuamF2YToyMDkpCisJYXQgamF2YS5hd3QuRXZlbnRRdWV1ZS5kaXNwYXRjaEV2ZW50KEV2ZW50UXVldWUuamF2YTo2MzMpCisJYXQgY29tLmludGVsbGlqLmlkZS5JZGVFdmVudFF1ZXVlLmRlZmF1bHREaXNwYXRjaEV2ZW50KElkZUV2ZW50UXVldWUuamF2YTo2ODYpCisJYXQgY29tLmludGVsbGlqLmlkZS5JZGVFdmVudFF1ZXVlLl9kaXNwYXRjaEV2ZW50KElkZUV2ZW50UXVldWUuamF2YTo1MzQpCisJYXQgY29tLmludGVsbGlqLmlkZS5JZGVFdmVudFF1ZXVlLl9kaXNwYXRjaEV2ZW50KElkZUV2ZW50UXVldWUuamF2YTo0MTYpCisJYXQgY29tLmludGVsbGlqLmlkZS5JZGVFdmVudFF1ZXVlLmRpc3BhdGNoRXZlbnQoSWRlRXZlbnRRdWV1ZS5qYXZhOjM3NCkKKwlhdCBqYXZhLmF3dC5FdmVudERpc3BhdGNoVGhyZWFkLnB1bXBPbmVFdmVudEZvckZpbHRlcnMoRXZlbnREaXNwYXRjaFRocmVhZC5qYXZhOjI5NikKKwlhdCBqYXZhLmF3dC5FdmVudERpc3BhdGNoVGhyZWFkLnB1bXBFdmVudHNGb3JGaWx0ZXIoRXZlbnREaXNwYXRjaFRocmVhZC5qYXZhOjIxMSkKKwlhdCBqYXZhLmF3dC5FdmVudERpc3BhdGNoVGhyZWFkLnB1bXBFdmVudHNGb3JIaWVyYXJjaHkoRXZlbnREaXNwYXRjaFRocmVhZC5qYXZhOjIwMSkKKwlhdCBqYXZhLmF3dC5FdmVudERpc3BhdGNoVGhyZWFkLnB1bXBFdmVudHMoRXZlbnREaXNwYXRjaFRocmVhZC5qYXZhOjE5NikKKwlhdCBqYXZhLmF3dC5FdmVudERpc3BhdGNoVGhyZWFkLnB1bXBFdmVudHMoRXZlbnREaXNwYXRjaFRocmVhZC5qYXZhOjE4OCkKKwlhdCBqYXZhLmF3dC5FdmVudERpc3BhdGNoVGhyZWFkLnJ1bihFdmVudERpc3BhdGNoVGhyZWFkLmphdmE6MTIyKQorCisgICBMb2NrZWQgb3duYWJsZSBzeW5jaHJvbml6ZXJzOgorCS0gTm9uZQorCisiUGVyaW9kaWMgdGFza3MgdGhyZWFkIiBkYWVtb24gcHJpbz01IHRpZD0xMDMxOWM4MDAgbmlkPTB4MTA4YmIwMDAwIHJ1bm5hYmxlIFsxMDhiYWYwMDBdCisgICBqYXZhLmxhbmcuVGhyZWFkLlN0YXRlOiBUSU1FRF9XQUlUSU5HIChwYXJraW5nKQorCWF0IHN1bi5taXNjLlVuc2FmZS5wYXJrKE5hdGl2ZSBNZXRob2QpCisJLSBwYXJraW5nIHRvIHdhaXQgZm9yICA8N2M4ZDE3NDY4PiAoYSBqYXZhLnV0aWwuY29uY3VycmVudC5sb2Nrcy5BYnN0cmFjdFF1ZXVlZFN5bmNocm9uaXplciRDb25kaXRpb25PYmplY3QpCisJYXQgamF2YS51dGlsLmNvbmN1cnJlbnQubG9ja3MuTG9ja1N1cHBvcnQucGFya05hbm9zKExvY2tTdXBwb3J0LmphdmE6MTk4KQorCWF0IGphdmEudXRpbC5jb25jdXJyZW50LmxvY2tzLkFic3RyYWN0UXVldWVkU3luY2hyb25pemVyJENvbmRpdGlvbk9iamVjdC5hd2FpdE5hbm9zKEFic3RyYWN0UXVldWVkU3luY2hyb25pemVyLmphdmE6MjAyNSkKKwlhdCBqYXZhLnV0aWwuY29uY3VycmVudC5EZWxheVF1ZXVlLnRha2UoRGVsYXlRdWV1ZS5qYXZhOjE2NCkKKwlhdCBqYXZhLnV0aWwuY29uY3VycmVudC5TY2hlZHVsZWRUaHJlYWRQb29sRXhlY3V0b3IkRGVsYXllZFdvcmtRdWV1ZS50YWtlKFNjaGVkdWxlZFRocmVhZFBvb2xFeGVjdXRvci5qYXZhOjYwOSkKKwlhdCBqYXZhLnV0aWwuY29uY3VycmVudC5TY2hlZHVsZWRUaHJlYWRQb29sRXhlY3V0b3IkRGVsYXllZFdvcmtRdWV1ZS50YWtlKFNjaGVkdWxlZFRocmVhZFBvb2xFeGVjdXRvci5qYXZhOjYwMikKKwlhdCBqYXZhLnV0aWwuY29uY3VycmVudC5UaHJlYWRQb29sRXhlY3V0b3IuZ2V0VGFzayhUaHJlYWRQb29sRXhlY3V0b3IuamF2YTo5NDcpCisJYXQgamF2YS51dGlsLmNvbmN1cnJlbnQuVGhyZWFkUG9vbEV4ZWN1dG9yJFdvcmtlci5ydW4oVGhyZWFkUG9vbEV4ZWN1dG9yLmphdmE6OTA3KQorCWF0IGphdmEubGFuZy5UaHJlYWQucnVuKFRocmVhZC5qYXZhOjY4MCkKKworICAgTG9ja2VkIG93bmFibGUgc3luY2hyb25pemVyczoKKwktIE5vbmUKKworIkFXVC1TaHV0ZG93biIgcHJpbz01IHRpZD0xMDMzNzgwMDAgbmlkPTB4MTEwZjQ4MDAwIGluIE9iamVjdC53YWl0KCkgWzExMGY0NzAwMF0KKyAgIGphdmEubGFuZy5UaHJlYWQuU3RhdGU6IFdBSVRJTkcgKG9uIG9iamVjdCBtb25pdG9yKQorCWF0IGphdmEubGFuZy5PYmplY3Qud2FpdChOYXRpdmUgTWV0aG9kKQorCS0gd2FpdGluZyBvbiA8N2M4ZDE3NWEwPiAoYSBqYXZhLmxhbmcuT2JqZWN0KQorCWF0IGphdmEubGFuZy5PYmplY3Qud2FpdChPYmplY3QuamF2YTo0ODUpCisJYXQgc3VuLmF3dC5BV1RBdXRvU2h1dGRvd24ucnVuKEFXVEF1dG9TaHV0ZG93bi5qYXZhOjI2NSkKKwktIGxvY2tlZCA8N2M4ZDE3NWEwPiAoYSBqYXZhLmxhbmcuT2JqZWN0KQorCWF0IGphdmEubGFuZy5UaHJlYWQucnVuKFRocmVhZC5qYXZhOjY4MCkKKworICAgTG9ja2VkIG93bmFibGUgc3luY2hyb25pemVyczoKKwktIE5vbmUKKworIkxvY2sgdGhyZWFkIiBwcmlvPTEgdGlkPTEwMzI0YjgwMCBuaWQ9MHgxMTE4ZWUwMDAgcnVubmFibGUgWzExMThlZDAwMF0KKyAgIGphdmEubGFuZy5UaHJlYWQuU3RhdGU6IFJVTk5BQkxFCisJYXQgamF2YS5uZXQuUGxhaW5Tb2NrZXRJbXBsLnNvY2tldEFjY2VwdChOYXRpdmUgTWV0aG9kKQorCWF0IGphdmEubmV0LlBsYWluU29ja2V0SW1wbC5hY2NlcHQoUGxhaW5Tb2NrZXRJbXBsLmphdmE6MzkwKQorCS0gbG9ja2VkIDw3YzhkMTc2NTg+IChhIGphdmEubmV0LlNvY2tzU29ja2V0SW1wbCkKKwlhdCBqYXZhLm5ldC5TZXJ2ZXJTb2NrZXQuaW1wbEFjY2VwdChTZXJ2ZXJTb2NrZXQuamF2YTo0NTMpCisJYXQgamF2YS5uZXQuU2VydmVyU29ja2V0LmFjY2VwdChTZXJ2ZXJTb2NrZXQuamF2YTo0MjEpCisJYXQgY29tLmludGVsbGlqLmlkZWEuU29ja2V0TG9jayRNeVJ1bm5hYmxlLnJ1bihTb2NrZXRMb2NrLmphdmE6MjE2KQorCWF0IGphdmEubGFuZy5UaHJlYWQucnVuKFRocmVhZC5qYXZhOjY4MCkKKworICAgTG9ja2VkIG93bmFibGUgc3luY2hyb25pemVyczoKKwktIE5vbmUKKworIkphdmEyRCBEaXNwb3NlciIgZGFlbW9uIHByaW89MTAgdGlkPTEwMzI0NTgwMCBuaWQ9MHgxMTE2ZTgwMDAgaW4gT2JqZWN0LndhaXQoKSBbMTExNmU3MDAwXQorICAgamF2YS5sYW5nLlRocmVhZC5TdGF0ZTogV0FJVElORyAob24gb2JqZWN0IG1vbml0b3IpCisJYXQgamF2YS5sYW5nLk9iamVjdC53YWl0KE5hdGl2ZSBNZXRob2QpCisJLSB3YWl0aW5nIG9uIDw3YzhkMTc4NDA+IChhIGphdmEubGFuZy5yZWYuUmVmZXJlbmNlUXVldWUkTG9jaykKKwlhdCBqYXZhLmxhbmcucmVmLlJlZmVyZW5jZVF1ZXVlLnJlbW92ZShSZWZlcmVuY2VRdWV1ZS5qYXZhOjExOCkKKwktIGxvY2tlZCA8N2M4ZDE3ODQwPiAoYSBqYXZhLmxhbmcucmVmLlJlZmVyZW5jZVF1ZXVlJExvY2spCisJYXQgamF2YS5sYW5nLnJlZi5SZWZlcmVuY2VRdWV1ZS5yZW1vdmUoUmVmZXJlbmNlUXVldWUuamF2YToxMzQpCisJYXQgc3VuLmphdmEyZC5EaXNwb3Nlci5ydW4oRGlzcG9zZXIuamF2YToxMjcpCisJYXQgamF2YS5sYW5nLlRocmVhZC5ydW4oVGhyZWFkLmphdmE6NjgwKQorCisgICBMb2NrZWQgb3duYWJsZSBzeW5jaHJvbml6ZXJzOgorCS0gTm9uZQorCisiQVdULUFwcEtpdCIgZGFlbW9uIHByaW89NSB0aWQ9MTAzMzc3MDAwIG5pZD0weDdmZmY3MGQ1ZmNhMCBydW5uYWJsZSBbMDAwMDAwMDBdCisgICBqYXZhLmxhbmcuVGhyZWFkLlN0YXRlOiBSVU5OQUJMRQorCisgICBMb2NrZWQgb3duYWJsZSBzeW5jaHJvbml6ZXJzOgorCS0gTm9uZQorCisiRGVzdHJveUphdmFWTSIgcHJpbz01IHRpZD0xMDMwMDE4MDAgbmlkPTB4MTAyNTViMDAwIHdhaXRpbmcgb24gY29uZGl0aW9uIFswMDAwMDAwMF0KKyAgIGphdmEubGFuZy5UaHJlYWQuU3RhdGU6IFJVTk5BQkxFCisKKyAgIExvY2tlZCBvd25hYmxlIHN5bmNocm9uaXplcnM6CisJLSBOb25lCisKKyJ0aW1lZCByZWZlcmVuY2UgZGlzcG9zZXIiIGRhZW1vbiBwcmlvPTIgdGlkPTEwMzE1NzgwMCBuaWQ9MHgxMDg1MGQwMDAgd2FpdGluZyBvbiBjb25kaXRpb24gWzEwODUwYzAwMF0KKyAgIGphdmEubGFuZy5UaHJlYWQuU3RhdGU6IFRJTUVEX1dBSVRJTkcgKHBhcmtpbmcpCisJYXQgc3VuLm1pc2MuVW5zYWZlLnBhcmsoTmF0aXZlIE1ldGhvZCkKKwktIHBhcmtpbmcgdG8gd2FpdCBmb3IgIDw3YzhkMTdhMTg+IChhIGphdmEudXRpbC5jb25jdXJyZW50LmxvY2tzLkFic3RyYWN0UXVldWVkU3luY2hyb25pemVyJENvbmRpdGlvbk9iamVjdCkKKwlhdCBqYXZhLnV0aWwuY29uY3VycmVudC5sb2Nrcy5Mb2NrU3VwcG9ydC5wYXJrTmFub3MoTG9ja1N1cHBvcnQuamF2YToxOTgpCisJYXQgamF2YS51dGlsLmNvbmN1cnJlbnQubG9ja3MuQWJzdHJhY3RRdWV1ZWRTeW5jaHJvbml6ZXIkQ29uZGl0aW9uT2JqZWN0LmF3YWl0TmFub3MoQWJzdHJhY3RRdWV1ZWRTeW5jaHJvbml6ZXIuamF2YToyMDI1KQorCWF0IGphdmEudXRpbC5jb25jdXJyZW50LkRlbGF5UXVldWUudGFrZShEZWxheVF1ZXVlLmphdmE6MTY0KQorCWF0IGphdmEudXRpbC5jb25jdXJyZW50LlNjaGVkdWxlZFRocmVhZFBvb2xFeGVjdXRvciREZWxheWVkV29ya1F1ZXVlLnRha2UoU2NoZWR1bGVkVGhyZWFkUG9vbEV4ZWN1dG9yLmphdmE6NjA5KQorCWF0IGphdmEudXRpbC5jb25jdXJyZW50LlNjaGVkdWxlZFRocmVhZFBvb2xFeGVjdXRvciREZWxheWVkV29ya1F1ZXVlLnRha2UoU2NoZWR1bGVkVGhyZWFkUG9vbEV4ZWN1dG9yLmphdmE6NjAyKQorCWF0IGphdmEudXRpbC5jb25jdXJyZW50LlRocmVhZFBvb2xFeGVjdXRvci5nZXRUYXNrKFRocmVhZFBvb2xFeGVjdXRvci5qYXZhOjk0NykKKwlhdCBqYXZhLnV0aWwuY29uY3VycmVudC5UaHJlYWRQb29sRXhlY3V0b3IkV29ya2VyLnJ1bihUaHJlYWRQb29sRXhlY3V0b3IuamF2YTo5MDcpCisJYXQgamF2YS5sYW5nLlRocmVhZC5ydW4oVGhyZWFkLmphdmE6NjgwKQorCisgICBMb2NrZWQgb3duYWJsZSBzeW5jaHJvbml6ZXJzOgorCS0gTm9uZQorCisiTG93IE1lbW9yeSBEZXRlY3RvciIgZGFlbW9uIHByaW89NSB0aWQ9MTAzMDYwMDAwIG5pZD0weDEwODFiNDAwMCBydW5uYWJsZSBbMDAwMDAwMDBdCisgICBqYXZhLmxhbmcuVGhyZWFkLlN0YXRlOiBSVU5OQUJMRQorCisgICBMb2NrZWQgb3duYWJsZSBzeW5jaHJvbml6ZXJzOgorCS0gTm9uZQorCisiQ29tcGlsZXJUaHJlYWQxIiBkYWVtb24gcHJpbz05IHRpZD0xMDMwNWY4MDAgbmlkPTB4MTA4MGIxMDAwIHdhaXRpbmcgb24gY29uZGl0aW9uIFswMDAwMDAwMF0KKyAgIGphdmEubGFuZy5UaHJlYWQuU3RhdGU6IFJVTk5BQkxFCisKKyAgIExvY2tlZCBvd25hYmxlIHN5bmNocm9uaXplcnM6CisJLSBOb25lCisKKyJDb21waWxlclRocmVhZDAiIGRhZW1vbiBwcmlvPTkgdGlkPTEwMzA1ZTgwMCBuaWQ9MHgxMDdmYWUwMDAgd2FpdGluZyBvbiBjb25kaXRpb24gWzAwMDAwMDAwXQorICAgamF2YS5sYW5nLlRocmVhZC5TdGF0ZTogUlVOTkFCTEUKKworICAgTG9ja2VkIG93bmFibGUgc3luY2hyb25pemVyczoKKwktIE5vbmUKKworIlNpZ25hbCBEaXNwYXRjaGVyIiBkYWVtb24gcHJpbz05IHRpZD0xMDMwNWUwMDAgbmlkPTB4MTA3ZWFiMDAwIHJ1bm5hYmxlIFswMDAwMDAwMF0KKyAgIGphdmEubGFuZy5UaHJlYWQuU3RhdGU6IFJVTk5BQkxFCisKKyAgIExvY2tlZCBvd25hYmxlIHN5bmNocm9uaXplcnM6CisJLSBOb25lCisKKyJGaW5hbGl6ZXIiIGRhZW1vbiBwcmlvPTggdGlkPTEwMzA0NDAwMCBuaWQ9MHgxMDdkYTgwMDAgaW4gT2JqZWN0LndhaXQoKSBbMTA3ZGE3MDAwXQorICAgamF2YS5sYW5nLlRocmVhZC5TdGF0ZTogV0FJVElORyAob24gb2JqZWN0IG1vbml0b3IpCisJYXQgamF2YS5sYW5nLk9iamVjdC53YWl0KE5hdGl2ZSBNZXRob2QpCisJLSB3YWl0aW5nIG9uIDw3YzhkMTdkNDA+IChhIGphdmEubGFuZy5yZWYuUmVmZXJlbmNlUXVldWUkTG9jaykKKwlhdCBqYXZhLmxhbmcucmVmLlJlZmVyZW5jZVF1ZXVlLnJlbW92ZShSZWZlcmVuY2VRdWV1ZS5qYXZhOjExOCkKKwktIGxvY2tlZCA8N2M4ZDE3ZDQwPiAoYSBqYXZhLmxhbmcucmVmLlJlZmVyZW5jZVF1ZXVlJExvY2spCisJYXQgamF2YS5sYW5nLnJlZi5SZWZlcmVuY2VRdWV1ZS5yZW1vdmUoUmVmZXJlbmNlUXVldWUuamF2YToxMzQpCisJYXQgamF2YS5sYW5nLnJlZi5GaW5hbGl6ZXIkRmluYWxpemVyVGhyZWFkLnJ1bihGaW5hbGl6ZXIuamF2YToxNTkpCisKKyAgIExvY2tlZCBvd25hYmxlIHN5bmNocm9uaXplcnM6CisJLSBOb25lCisKKyJSZWZlcmVuY2UgSGFuZGxlciIgZGFlbW9uIHByaW89MTAgdGlkPTEwMzA0MzgwMCBuaWQ9MHgxMDdjYTUwMDAgaW4gT2JqZWN0LndhaXQoKSBbMTA3Y2E0MDAwXQorICAgamF2YS5sYW5nLlRocmVhZC5TdGF0ZTogV0FJVElORyAob24gb2JqZWN0IG1vbml0b3IpCisJYXQgamF2YS5sYW5nLk9iamVjdC53YWl0KE5hdGl2ZSBNZXRob2QpCisJLSB3YWl0aW5nIG9uIDw3YzhkMTcxNzA+IChhIGphdmEubGFuZy5yZWYuUmVmZXJlbmNlJExvY2spCisJYXQgamF2YS5sYW5nLk9iamVjdC53YWl0KE9iamVjdC5qYXZhOjQ4NSkKKwlhdCBqYXZhLmxhbmcucmVmLlJlZmVyZW5jZSRSZWZlcmVuY2VIYW5kbGVyLnJ1bihSZWZlcmVuY2UuamF2YToxMTYpCisJLSBsb2NrZWQgPDdjOGQxNzE3MD4gKGEgamF2YS5sYW5nLnJlZi5SZWZlcmVuY2UkTG9jaykKKworICAgTG9ja2VkIG93bmFibGUgc3luY2hyb25pemVyczoKKwktIE5vbmUKKworIlZNIFRocmVhZCIgcHJpbz05IHRpZD0xMDMwNDEwMDAgbmlkPTB4MTA3YmEyMDAwIHJ1bm5hYmxlIAorCisiVk0gUGVyaW9kaWMgVGFzayBUaHJlYWQiIHByaW89MTAgdGlkPTEwMzA2YTAwMCBuaWQ9MHgxMDgyYjcwMDAgd2FpdGluZyBvbiBjb25kaXRpb24gCisKKyJFeGNlcHRpb24gQ2F0Y2hlciBUaHJlYWQiIHByaW89MTAgdGlkPTEwMzAwMjAwMCBuaWQ9MHgxMDJjOTgwMDAgcnVubmFibGUgCitKTkkgZ2xvYmFsIHJlZmVyZW5jZXM6IDY3MDMKKworCitGb3VuZCBvbmUgSmF2YS1sZXZlbCBkZWFkbG9jazoKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisiSm9iU2NoZWR1bGVyIHBvb2wgMC8xIjoKKyAgd2FpdGluZyB0byBsb2NrIG1vbml0b3IgMTAwZDU4NDIwIChvYmplY3QgN2M5NzM0MDA4LCBhIGNvbS5pbnRlbGxpai51dGlsLmlvLlBlcnNpc3RlbnRCVHJlZUVudW1lcmF0b3IpLAorICB3aGljaCBpcyBoZWxkIGJ5ICJBcHBsaWNhdGlvbkltcGwgcG9vbGVkIHRocmVhZCAwIFtSZWFkQWNjZXNzVG9rZW5dIgorIkFwcGxpY2F0aW9uSW1wbCBwb29sZWQgdGhyZWFkIDAgW1JlYWRBY2Nlc3NUb2tlbl0iOgorICB3YWl0aW5nIHRvIGxvY2sgbW9uaXRvciAxMDA4YTg3NjggKG9iamVjdCA3Yzk3MzNmYTAsIGEgY29tLmludGVsbGlqLnV0aWwuaW5kZXhpbmcuVmFsdWVDb250YWluZXJNYXApLAorICB3aGljaCBpcyBoZWxkIGJ5ICJKb2JTY2hlZHVsZXIgcG9vbCAwLzEiCisKK0phdmEgc3RhY2sgaW5mb3JtYXRpb24gZm9yIHRoZSB0aHJlYWRzIGxpc3RlZCBhYm92ZToKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIkpvYlNjaGVkdWxlciBwb29sIDAvMSI6CisJYXQgY29tLmludGVsbGlqLnV0aWwuaW8uUGVyc2lzdGVudEhhc2hNYXAuZ2V0KFBlcnNpc3RlbnRIYXNoTWFwLmphdmE6MzM5KQorCS0gd2FpdGluZyB0byBsb2NrIDw3Yzk3MzQwMDg+IChhIGNvbS5pbnRlbGxpai51dGlsLmlvLlBlcnNpc3RlbnRCVHJlZUVudW1lcmF0b3IpCisJYXQgY29tLmludGVsbGlqLnV0aWwuaW5kZXhpbmcuTWFwSW5kZXhTdG9yYWdlJDEkMS5jb21wdXRlKE1hcEluZGV4U3RvcmFnZS5qYXZhOjc3KQorCWF0IGNvbS5pbnRlbGxpai51dGlsLmluZGV4aW5nLk1hcEluZGV4U3RvcmFnZSQxJDEuY29tcHV0ZShNYXBJbmRleFN0b3JhZ2UuamF2YTo2NykKKwlhdCBjb20uaW50ZWxsaWoudXRpbC5pbmRleGluZy5DaGFuZ2VUcmFja2luZ1ZhbHVlQ29udGFpbmVyLmdldE1lcmdlZERhdGEoQ2hhbmdlVHJhY2tpbmdWYWx1ZUNvbnRhaW5lci5qYXZhOjEzNCkKKwktIGxvY2tlZCA8N2M5NzMzZmEwPiAoYSBjb20uaW50ZWxsaWoudXRpbC5pbmRleGluZy5WYWx1ZUNvbnRhaW5lck1hcCkKKwlhdCBjb20uaW50ZWxsaWoudXRpbC5pbmRleGluZy5DaGFuZ2VUcmFja2luZ1ZhbHVlQ29udGFpbmVyLmdldFZhbHVlSXRlcmF0b3IoQ2hhbmdlVHJhY2tpbmdWYWx1ZUNvbnRhaW5lci5qYXZhOjk4KQorCWF0IGNvbS5pbnRlbGxpai51dGlsLmluZGV4aW5nLkZpbGVCYXNlZEluZGV4LnByb2Nlc3NWYWx1ZXNJbXBsKEZpbGVCYXNlZEluZGV4LmphdmE6OTAwKQorCWF0IGNvbS5pbnRlbGxpai51dGlsLmluZGV4aW5nLkZpbGVCYXNlZEluZGV4LmdldFZhbHVlcyhGaWxlQmFzZWRJbmRleC5qYXZhOjgyMikKKwlhdCBjb20uaW50ZWxsaWouamF2YXNjcmlwdC5mbGV4LmNzcy5GbGV4Q3NzRWxlbWVudERlc2NyaXB0b3JQcm92aWRlci5nZXRQcm9wZXJ0eURlc2NyaXB0b3IoRmxleENzc0VsZW1lbnREZXNjcmlwdG9yUHJvdmlkZXIuamF2YToxODApCisJYXQgY29tLmludGVsbGlqLnBzaS5jc3MuaW1wbC51dGlsLnRhYmxlLkNzc0Rlc2NyaXB0b3JzVXRpbC5nZXRQcm9wZXJ0eURlc2NyaXB0b3IoQ3NzRGVzY3JpcHRvcnNVdGlsLmphdmE6NTApCisJYXQgY29tLmludGVsbGlqLnBzaS5jc3MuaW1wbC51dGlsLnRhYmxlLkNzc0Rlc2NyaXB0b3JzVXRpbC5nZXRDYW5ub25pY2FsUHJvcGVydHlOYW1lKENzc0Rlc2NyaXB0b3JzVXRpbC5qYXZhOjk4KQorCWF0IGNvbS5pbnRlbGxpai5wc2kuY3NzLmltcGwudXRpbC50YWJsZS5Dc3NEZXNjcmlwdG9yc1V0aWwuZ2V0Q2Fubm9uaWNhbFByb3BlcnR5TmFtZShDc3NEZXNjcmlwdG9yc1V0aWwuamF2YToxMDQpCisJYXQgY29tLmludGVsbGlqLnBzaS5jc3MuYnJvd3NlLkNzc0NvbG9yQW5ub3RhdG9yLmFubm90YXRlKENzc0NvbG9yQW5ub3RhdG9yLmphdmE6MTA1KQorCWF0IGNvbS5pbnRlbGxpai5jb2RlSW5zaWdodC5kYWVtb24uaW1wbC5EZWZhdWx0SGlnaGxpZ2h0VmlzaXRvci5ydW5Bbm5vdGF0b3JzKERlZmF1bHRIaWdobGlnaHRWaXNpdG9yLmphdmE6MTU3KQorCWF0IGNvbS5pbnRlbGxpai5jb2RlSW5zaWdodC5kYWVtb24uaW1wbC5EZWZhdWx0SGlnaGxpZ2h0VmlzaXRvci52aXNpdChEZWZhdWx0SGlnaGxpZ2h0VmlzaXRvci5qYXZhOjEwMCkKKwlhdCBjb20uaW50ZWxsaWouY29kZUluc2lnaHQuZGFlbW9uLmltcGwuR2VuZXJhbEhpZ2hsaWdodGluZ1Bhc3MkOC5ydW4oR2VuZXJhbEhpZ2hsaWdodGluZ1Bhc3MuamF2YTo1OTMpCisJYXQgY29tLmludGVsbGlqLmNvZGVJbnNpZ2h0LmRhZW1vbi5pbXBsLkdlbmVyYWxIaWdobGlnaHRpbmdQYXNzLmFuYWx5emVCeVZpc2l0b3JzKEdlbmVyYWxIaWdobGlnaHRpbmdQYXNzLmphdmE6NzcxKQorCWF0IGNvbS5pbnRlbGxpai5jb2RlSW5zaWdodC5kYWVtb24uaW1wbC5HZW5lcmFsSGlnaGxpZ2h0aW5nUGFzcy5hY2Nlc3MkMzYwMChHZW5lcmFsSGlnaGxpZ2h0aW5nUGFzcy5qYXZhOjgwKQorCWF0IGNvbS5pbnRlbGxpai5jb2RlSW5zaWdodC5kYWVtb24uaW1wbC5HZW5lcmFsSGlnaGxpZ2h0aW5nUGFzcyQxMC5ydW4oR2VuZXJhbEhpZ2hsaWdodGluZ1Bhc3MuamF2YTo3NzcpCisJYXQgY29tLmludGVsbGlqLmNvZGVJbnNpZ2h0LmRhZW1vbi5pbXBsLkRlZmF1bHRIaWdobGlnaHRWaXNpdG9yLmFuYWx5emUoRGVmYXVsdEhpZ2hsaWdodFZpc2l0b3IuamF2YTo4NCkKKwlhdCBjb20uaW50ZWxsaWouY29kZUluc2lnaHQuZGFlbW9uLmltcGwuR2VuZXJhbEhpZ2hsaWdodGluZ1Bhc3MuYW5hbHl6ZUJ5VmlzaXRvcnMoR2VuZXJhbEhpZ2hsaWdodGluZ1Bhc3MuamF2YTo3NzQpCisJYXQgY29tLmludGVsbGlqLmNvZGVJbnNpZ2h0LmRhZW1vbi5pbXBsLkdlbmVyYWxIaWdobGlnaHRpbmdQYXNzLmFjY2VzcyQzNjAwKEdlbmVyYWxIaWdobGlnaHRpbmdQYXNzLmphdmE6ODApCisJYXQgY29tLmludGVsbGlqLmNvZGVJbnNpZ2h0LmRhZW1vbi5pbXBsLkdlbmVyYWxIaWdobGlnaHRpbmdQYXNzJDEwLnJ1bihHZW5lcmFsSGlnaGxpZ2h0aW5nUGFzcy5qYXZhOjc3NykKKwlhdCBjb20uaW50ZWxsaWouY29kZUluc2lnaHQuZGFlbW9uLmltcGwuRGVmYXVsdEhpZ2hsaWdodFZpc2l0b3IuYW5hbHl6ZShEZWZhdWx0SGlnaGxpZ2h0VmlzaXRvci5qYXZhOjg0KQorCWF0IGNvbS5pbnRlbGxpai5jb2RlSW5zaWdodC5kYWVtb24uaW1wbC5HZW5lcmFsSGlnaGxpZ2h0aW5nUGFzcy5hbmFseXplQnlWaXNpdG9ycyhHZW5lcmFsSGlnaGxpZ2h0aW5nUGFzcy5qYXZhOjc3NCkKKwlhdCBjb20uaW50ZWxsaWouY29kZUluc2lnaHQuZGFlbW9uLmltcGwuR2VuZXJhbEhpZ2hsaWdodGluZ1Bhc3MuY29sbGVjdEhpZ2hsaWdodHMoR2VuZXJhbEhpZ2hsaWdodGluZ1Bhc3MuamF2YTo2MzkpCisJYXQgY29tLmludGVsbGlqLmNvZGVJbnNpZ2h0LmRhZW1vbi5pbXBsLkdlbmVyYWxIaWdobGlnaHRpbmdQYXNzLmNvbGxlY3RJbmZvcm1hdGlvbldpdGhQcm9ncmVzcyhHZW5lcmFsSGlnaGxpZ2h0aW5nUGFzcy5qYXZhOjIwNCkKKwlhdCBjb20uaW50ZWxsaWouY29kZUluc2lnaHQuZGFlbW9uLmltcGwuUHJvZ3Jlc3NhYmxlVGV4dEVkaXRvckhpZ2hsaWdodGluZ1Bhc3MuZG9Db2xsZWN0SW5mb3JtYXRpb24oUHJvZ3Jlc3NhYmxlVGV4dEVkaXRvckhpZ2hsaWdodGluZ1Bhc3MuamF2YTo1OCkKKwlhdCBjb20uaW50ZWxsaWouY29kZUhpZ2hsaWdodGluZy5UZXh0RWRpdG9ySGlnaGxpZ2h0aW5nUGFzcy5jb2xsZWN0SW5mb3JtYXRpb24oVGV4dEVkaXRvckhpZ2hsaWdodGluZ1Bhc3MuamF2YTo2MSkKKwlhdCBjb20uaW50ZWxsaWouY29kZUluc2lnaHQuZGFlbW9uLmltcGwuUGFzc0V4ZWN1dG9yU2VydmljZSRTY2hlZHVsZWRQYXNzJDEkMS5ydW4oUGFzc0V4ZWN1dG9yU2VydmljZS5qYXZhOjM1MCkKKwlhdCBjb20uaW50ZWxsaWoub3BlbmFwaS5hcHBsaWNhdGlvbi5pbXBsLkFwcGxpY2F0aW9uSW1wbC50cnlSdW5SZWFkQWN0aW9uKEFwcGxpY2F0aW9uSW1wbC5qYXZhOjEwMzQpCisJYXQgY29tLmludGVsbGlqLmNvZGVJbnNpZ2h0LmRhZW1vbi5pbXBsLlBhc3NFeGVjdXRvclNlcnZpY2UkU2NoZWR1bGVkUGFzcyQxLnJ1bihQYXNzRXhlY3V0b3JTZXJ2aWNlLmphdmE6MzQyKQorCWF0IGNvbS5pbnRlbGxpai5vcGVuYXBpLnByb2dyZXNzLmltcGwuUHJvZ3Jlc3NNYW5hZ2VySW1wbC5leGVjdXRlUHJvY2Vzc1VuZGVyUHJvZ3Jlc3MoUHJvZ3Jlc3NNYW5hZ2VySW1wbC5qYXZhOjIwNikKKwlhdCBjb20uaW50ZWxsaWouY29kZUluc2lnaHQuZGFlbW9uLmltcGwuUGFzc0V4ZWN1dG9yU2VydmljZSRTY2hlZHVsZWRQYXNzLmRvUnVuKFBhc3NFeGVjdXRvclNlcnZpY2UuamF2YTozNDApCisJYXQgY29tLmludGVsbGlqLmNvZGVJbnNpZ2h0LmRhZW1vbi5pbXBsLlBhc3NFeGVjdXRvclNlcnZpY2UkU2NoZWR1bGVkUGFzcy5ydW4oUGFzc0V4ZWN1dG9yU2VydmljZS5qYXZhOjMxNikKKwlhdCBjb20uaW50ZWxsaWouY29uY3VycmVuY3kuSm9iTGF1bmNoZXIkMy5jYWxsKEpvYlV0aWwuamF2YToxMzQpCisJYXQgY29tLmludGVsbGlqLmNvbmN1cnJlbmN5LkpvYkxhdW5jaGVyJDMuY2FsbChKb2JVdGlsLmphdmE6MTMxKQorCWF0IGphdmEudXRpbC5jb25jdXJyZW50LkZ1dHVyZVRhc2skU3luYy5pbm5lclJ1bihGdXR1cmVUYXNrLmphdmE6MzAzKQorCWF0IGphdmEudXRpbC5jb25jdXJyZW50LkZ1dHVyZVRhc2sucnVuKEZ1dHVyZVRhc2suamF2YToxMzgpCisJYXQgY29tLmludGVsbGlqLmNvbmN1cnJlbmN5LlByaW9yaXRpemVkRnV0dXJlVGFzay5hY2Nlc3MkMTAxKFByaW9yaXRpemVkRnV0dXJlVGFzay5qYXZhOjMxKQorCWF0IGNvbS5pbnRlbGxpai5jb25jdXJyZW5jeS5Qcmlvcml0aXplZEZ1dHVyZVRhc2skMS5ydW4oUHJpb3JpdGl6ZWRGdXR1cmVUYXNrLmphdmE6NzApCisJYXQgY29tLmludGVsbGlqLmNvbmN1cnJlbmN5LlByaW9yaXRpemVkRnV0dXJlVGFzay5ydW4oUHJpb3JpdGl6ZWRGdXR1cmVUYXNrLmphdmE6MTEzKQorCWF0IGphdmEudXRpbC5jb25jdXJyZW50LlRocmVhZFBvb2xFeGVjdXRvciRXb3JrZXIucnVuVGFzayhUaHJlYWRQb29sRXhlY3V0b3IuamF2YTo4ODYpCisJYXQgamF2YS51dGlsLmNvbmN1cnJlbnQuVGhyZWFkUG9vbEV4ZWN1dG9yJFdvcmtlci5ydW4oVGhyZWFkUG9vbEV4ZWN1dG9yLmphdmE6OTA4KQorCWF0IGphdmEubGFuZy5UaHJlYWQucnVuKFRocmVhZC5qYXZhOjY4MCkKKyJBcHBsaWNhdGlvbkltcGwgcG9vbGVkIHRocmVhZCAwIFtSZWFkQWNjZXNzVG9rZW5dIjoKKwlhdCBjb20uaW50ZWxsaWoudXRpbC5pbmRleGluZy5DaGFuZ2VUcmFja2luZ1ZhbHVlQ29udGFpbmVyLmdldE1lcmdlZERhdGEoQ2hhbmdlVHJhY2tpbmdWYWx1ZUNvbnRhaW5lci5qYXZhOjEyNykKKwktIHdhaXRpbmcgdG8gbG9jayA8N2M5NzMzZmEwPiAoYSBjb20uaW50ZWxsaWoudXRpbC5pbmRleGluZy5WYWx1ZUNvbnRhaW5lck1hcCkKKwlhdCBjb20uaW50ZWxsaWoudXRpbC5pbmRleGluZy5DaGFuZ2VUcmFja2luZ1ZhbHVlQ29udGFpbmVyLmdldFZhbHVlSXRlcmF0b3IoQ2hhbmdlVHJhY2tpbmdWYWx1ZUNvbnRhaW5lci5qYXZhOjk4KQorCWF0IGNvbS5pbnRlbGxpai51dGlsLmluZGV4aW5nLkZpbGVCYXNlZEluZGV4LnByb2Nlc3NWYWx1ZXNJbXBsKEZpbGVCYXNlZEluZGV4LmphdmE6ODg3KQorCWF0IGNvbS5pbnRlbGxpai51dGlsLmluZGV4aW5nLkZpbGVCYXNlZEluZGV4LnByb2Nlc3NWYWx1ZXMoRmlsZUJhc2VkSW5kZXguamF2YTo4NjApCisJYXQgY29tLmludGVsbGlqLmZsZXgudWlEZXNpZ25lci5saWJyYXJpZXMuTGlicmFyeVN0eWxlSW5mb0NvbGxlY3RvciQxLnByb2Nlc3MoTGlicmFyeVN0eWxlSW5mb0NvbGxlY3Rvci5qYXZhOjQyKQorCWF0IGNvbS5pbnRlbGxpai5mbGV4LnVpRGVzaWduZXIubGlicmFyaWVzLkxpYnJhcnlTdHlsZUluZm9Db2xsZWN0b3IkMS5wcm9jZXNzKExpYnJhcnlTdHlsZUluZm9Db2xsZWN0b3IuamF2YTozOSkKKwlhdCBjb20uaW50ZWxsaWoudXRpbC5pbmRleGluZy5NZW1vcnlJbmRleFN0b3JhZ2UkMS5wcm9jZXNzKE1lbW9yeUluZGV4U3RvcmFnZS5qYXZhOjExOCkKKwlhdCBjb20uaW50ZWxsaWoudXRpbC5pby5QZXJzaXN0ZW50RW51bWVyYXRvckJhc2UuaXRlcmF0ZURhdGEoUGVyc2lzdGVudEVudW1lcmF0b3JCYXNlLmphdmE6MzczKQorCS0gbG9ja2VkIDw3YzhmZDQ1NTg+IChhIGNvbS5pbnRlbGxpai51dGlsLmlvLlBhZ2VkRmlsZVN0b3JhZ2UkU3RvcmFnZUxvY2spCisJYXQgY29tLmludGVsbGlqLnV0aWwuaW8uUGVyc2lzdGVudEhhc2hNYXAucHJvY2Vzc0tleXMoUGVyc2lzdGVudEhhc2hNYXAuamF2YTozMTgpCisJLSBsb2NrZWQgPDdjOTczNDAwOD4gKGEgY29tLmludGVsbGlqLnV0aWwuaW8uUGVyc2lzdGVudEJUcmVlRW51bWVyYXRvcikKKwlhdCBjb20uaW50ZWxsaWoudXRpbC5pbmRleGluZy5NYXBJbmRleFN0b3JhZ2UucHJvY2Vzc0tleXMoTWFwSW5kZXhTdG9yYWdlLmphdmE6MTczKQorCWF0IGNvbS5pbnRlbGxpai51dGlsLmluZGV4aW5nLk1lbW9yeUluZGV4U3RvcmFnZS5wcm9jZXNzS2V5cyhNZW1vcnlJbmRleFN0b3JhZ2UuamF2YToxMjYpCisJYXQgY29tLmludGVsbGlqLnV0aWwuaW5kZXhpbmcuTWFwUmVkdWNlSW5kZXgucHJvY2Vzc0FsbEtleXMoTWFwUmVkdWNlSW5kZXguamF2YToxNjQpCisJYXQgY29tLmludGVsbGlqLnV0aWwuaW5kZXhpbmcuRmlsZUJhc2VkSW5kZXgucHJvY2Vzc0FsbEtleXMoRmlsZUJhc2VkSW5kZXguamF2YTo2ODgpCisJYXQgY29tLmludGVsbGlqLmZsZXgudWlEZXNpZ25lci5saWJyYXJpZXMuTGlicmFyeVN0eWxlSW5mb0NvbGxlY3Rvci5jb2xsZWN0SW5oZXJpdGVkKExpYnJhcnlTdHlsZUluZm9Db2xsZWN0b3IuamF2YTozOSkKKwlhdCBjb20uaW50ZWxsaWouZmxleC51aURlc2lnbmVyLmxpYnJhcmllcy5MaWJyYXJ5U3R5bGVJbmZvQ29sbGVjdG9yLmNvbnN1bWUoTGlicmFyeVN0eWxlSW5mb0NvbGxlY3Rvci5qYXZhOjczKQorCWF0IGNvbS5pbnRlbGxpai5mbGV4LnVpRGVzaWduZXIubGlicmFyaWVzLkxpYnJhcnlTdHlsZUluZm9Db2xsZWN0b3IuY29uc3VtZShMaWJyYXJ5U3R5bGVJbmZvQ29sbGVjdG9yLmphdmE6MTkpCisJYXQgY29tLmludGVsbGlqLmZsZXgudWlEZXNpZ25lci5saWJyYXJpZXMuTGlicmFyeU1hbmFnZXIuY3JlYXRlT3JpZ2luYWxMaWJyYXJ5KExpYnJhcnlNYW5hZ2VyLmphdmE6MjY4KQorCWF0IGNvbS5pbnRlbGxpai5mbGV4LnVpRGVzaWduZXIubGlicmFyaWVzLkxpYnJhcnlDb2xsZWN0b3IuYWRkTGlicmFyeShMaWJyYXJ5Q29sbGVjdG9yLmphdmE6MjQzKQorCWF0IGNvbS5pbnRlbGxpai5mbGV4LnVpRGVzaWduZXIubGlicmFyaWVzLkxpYnJhcnlDb2xsZWN0b3IuY29sbGVjdEZyb21TZGtPcmRlckVudHJ5KExpYnJhcnlDb2xsZWN0b3IuamF2YToyMjMpCisJYXQgY29tLmludGVsbGlqLmZsZXgudWlEZXNpZ25lci5saWJyYXJpZXMuTGlicmFyeUNvbGxlY3Rvci5jb2xsZWN0KExpYnJhcnlDb2xsZWN0b3IuamF2YToxMzgpCisJYXQgY29tLmludGVsbGlqLmZsZXgudWlEZXNpZ25lci5saWJyYXJpZXMuTGlicmFyeU1hbmFnZXIuaW5pdExpYnJhcnlTZXRzKExpYnJhcnlNYW5hZ2VyLmphdmE6OTUpCisJYXQgY29tLmludGVsbGlqLmZsZXgudWlEZXNpZ25lci5EZXNpZ25lckFwcGxpY2F0aW9uTGF1bmNoZXIkNy5jYWxsKERlc2lnbmVyQXBwbGljYXRpb25MYXVuY2hlci5qYXZhOjM3NikKKwlhdCBjb20uaW50ZWxsaWouZmxleC51aURlc2lnbmVyLkRlc2lnbmVyQXBwbGljYXRpb25MYXVuY2hlciQ3LmNhbGwoRGVzaWduZXJBcHBsaWNhdGlvbkxhdW5jaGVyLmphdmE6MzY0KQorCWF0IGNvbS5pbnRlbGxpai5vcGVuYXBpLmFwcGxpY2F0aW9uLmltcGwuQXBwbGljYXRpb25JbXBsJDcuY2FsbChBcHBsaWNhdGlvbkltcGwuamF2YTo0NDEpCisJYXQgamF2YS51dGlsLmNvbmN1cnJlbnQuRnV0dXJlVGFzayRTeW5jLmlubmVyUnVuKEZ1dHVyZVRhc2suamF2YTozMDMpCisJYXQgamF2YS51dGlsLmNvbmN1cnJlbnQuRnV0dXJlVGFzay5ydW4oRnV0dXJlVGFzay5qYXZhOjEzOCkKKwlhdCBqYXZhLnV0aWwuY29uY3VycmVudC5UaHJlYWRQb29sRXhlY3V0b3IkV29ya2VyLnJ1blRhc2soVGhyZWFkUG9vbEV4ZWN1dG9yLmphdmE6ODg2KQorCWF0IGphdmEudXRpbC5jb25jdXJyZW50LlRocmVhZFBvb2xFeGVjdXRvciRXb3JrZXIucnVuKFRocmVhZFBvb2xFeGVjdXRvci5qYXZhOjkwOCkKKwlhdCBqYXZhLmxhbmcuVGhyZWFkLnJ1bihUaHJlYWQuamF2YTo2ODApCisJYXQgY29tLmludGVsbGlqLm9wZW5hcGkuYXBwbGljYXRpb24uaW1wbC5BcHBsaWNhdGlvbkltcGwkMSQxLnJ1bihBcHBsaWNhdGlvbkltcGwuamF2YToxMzcpCisKK0ZvdW5kIDEgZGVhZGxvY2suCisKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS91bnNjcmFtYmxlL3RocmVhZGR1bXAudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3Vuc2NyYW1ibGUvdGhyZWFkZHVtcC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzhiMmY2YwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS91bnNjcmFtYmxlL3RocmVhZGR1bXAudHh0CkBAIC0wLDAgKzEsNDg1IEBACisyMDEwLTA4LTA2IDE0OjEyOjMwCitGdWxsIHRocmVhZCBkdW1wIEphdmEgSG90U3BvdChUTSkgQ2xpZW50IFZNICgxNC4zLWIwMSBtaXhlZCBtb2RlKToKKworIkFsYXJtIHBvb2wob3duKSIgcHJpbz00IHRpZD0weDM2NmRmMDAwIG5pZD0weDExOCB3YWl0aW5nIG9uIGNvbmRpdGlvbiBbMHgzNTdlZjAwMF0KKyAgIGphdmEubGFuZy5UaHJlYWQuU3RhdGU6IFdBSVRJTkcgKHBhcmtpbmcpCisgICAgICAgIGF0IHN1bi5taXNjLlVuc2FmZS5wYXJrKE5hdGl2ZSBNZXRob2QpCisgICAgICAgIC0gcGFya2luZyB0byB3YWl0IGZvciAgPDB4MGYzMDdhODg+IChhIGphdmEudXRpbC5jb25jdXJyZW50LmxvY2tzLkFic3RyYWN0UXVldWVkU3luY2hyb25pemVyJENvbmRpdGlvbk9iamVjdCkKKyAgICAgICAgYXQgamF2YS51dGlsLmNvbmN1cnJlbnQubG9ja3MuTG9ja1N1cHBvcnQucGFyayhMb2NrU3VwcG9ydC5qYXZhOjE1OCkKKyAgICAgICAgYXQgamF2YS51dGlsLmNvbmN1cnJlbnQubG9ja3MuQWJzdHJhY3RRdWV1ZWRTeW5jaHJvbml6ZXIkQ29uZGl0aW9uT2JqZWN0LmF3YWl0KEFic3RyYWN0UXVldWVkU3luY2hyb25pemVyLmphdmE6MTkyNSkKKyAgICAgICAgYXQgamF2YS51dGlsLmNvbmN1cnJlbnQuTGlua2VkQmxvY2tpbmdRdWV1ZS50YWtlKExpbmtlZEJsb2NraW5nUXVldWUuamF2YTozNTgpCisgICAgICAgIGF0IGphdmEudXRpbC5jb25jdXJyZW50LlRocmVhZFBvb2xFeGVjdXRvci5nZXRUYXNrKFRocmVhZFBvb2xFeGVjdXRvci5qYXZhOjk0NykKKyAgICAgICAgYXQgamF2YS51dGlsLmNvbmN1cnJlbnQuVGhyZWFkUG9vbEV4ZWN1dG9yJFdvcmtlci5ydW4oVGhyZWFkUG9vbEV4ZWN1dG9yLmphdmE6OTA3KQorICAgICAgICBhdCBqYXZhLmxhbmcuVGhyZWFkLnJ1bihUaHJlYWQuamF2YTo2MTkpCisKKyJBbGFybSBwb29sKG93bikiIHByaW89NCB0aWQ9MHgzNjY1OTgwMCBuaWQ9MHhkOTAgd2FpdGluZyBvbiBjb25kaXRpb24gWzB4MzU5N2YwMDBdCisgICBqYXZhLmxhbmcuVGhyZWFkLlN0YXRlOiBXQUlUSU5HIChwYXJraW5nKQorICAgICAgICBhdCBzdW4ubWlzYy5VbnNhZmUucGFyayhOYXRpdmUgTWV0aG9kKQorICAgICAgICAtIHBhcmtpbmcgdG8gd2FpdCBmb3IgIDwweDBlYWNjYTk4PiAoYSBqYXZhLnV0aWwuY29uY3VycmVudC5sb2Nrcy5BYnN0cmFjdFF1ZXVlZFN5bmNocm9uaXplciRDb25kaXRpb25PYmplY3QpCisgICAgICAgIGF0IGphdmEudXRpbC5jb25jdXJyZW50LmxvY2tzLkxvY2tTdXBwb3J0LnBhcmsoTG9ja1N1cHBvcnQuamF2YToxNTgpCisgICAgICAgIGF0IGphdmEudXRpbC5jb25jdXJyZW50LmxvY2tzLkFic3RyYWN0UXVldWVkU3luY2hyb25pemVyJENvbmRpdGlvbk9iamVjdC5hd2FpdChBYnN0cmFjdFF1ZXVlZFN5bmNocm9uaXplci5qYXZhOjE5MjUpCisgICAgICAgIGF0IGphdmEudXRpbC5jb25jdXJyZW50LkxpbmtlZEJsb2NraW5nUXVldWUudGFrZShMaW5rZWRCbG9ja2luZ1F1ZXVlLmphdmE6MzU4KQorICAgICAgICBhdCBqYXZhLnV0aWwuY29uY3VycmVudC5UaHJlYWRQb29sRXhlY3V0b3IuZ2V0VGFzayhUaHJlYWRQb29sRXhlY3V0b3IuamF2YTo5NDcpCisgICAgICAgIGF0IGphdmEudXRpbC5jb25jdXJyZW50LlRocmVhZFBvb2xFeGVjdXRvciRXb3JrZXIucnVuKFRocmVhZFBvb2xFeGVjdXRvci5qYXZhOjkwNykKKyAgICAgICAgYXQgamF2YS5sYW5nLlRocmVhZC5ydW4oVGhyZWFkLmphdmE6NjE5KQorCisiQWxhcm0gcG9vbChvd24pIiBwcmlvPTQgdGlkPTB4MzY0OTM0MDAgbmlkPTB4OTY4IHdhaXRpbmcgb24gY29uZGl0aW9uIFsweDM2ZWZmMDAwXQorICAgamF2YS5sYW5nLlRocmVhZC5TdGF0ZTogV0FJVElORyAocGFya2luZykKKyAgICAgICAgYXQgc3VuLm1pc2MuVW5zYWZlLnBhcmsoTmF0aXZlIE1ldGhvZCkKKyAgICAgICAgLSBwYXJraW5nIHRvIHdhaXQgZm9yICA8MHgwNWE1MjY5OD4gKGEgamF2YS51dGlsLmNvbmN1cnJlbnQubG9ja3MuQWJzdHJhY3RRdWV1ZWRTeW5jaHJvbml6ZXIkQ29uZGl0aW9uT2JqZWN0KQorICAgICAgICBhdCBqYXZhLnV0aWwuY29uY3VycmVudC5sb2Nrcy5Mb2NrU3VwcG9ydC5wYXJrKExvY2tTdXBwb3J0LmphdmE6MTU4KQorICAgICAgICBhdCBqYXZhLnV0aWwuY29uY3VycmVudC5sb2Nrcy5BYnN0cmFjdFF1ZXVlZFN5bmNocm9uaXplciRDb25kaXRpb25PYmplY3QuYXdhaXQoQWJzdHJhY3RRdWV1ZWRTeW5jaHJvbml6ZXIuamF2YToxOTI1KQorICAgICAgICBhdCBqYXZhLnV0aWwuY29uY3VycmVudC5MaW5rZWRCbG9ja2luZ1F1ZXVlLnRha2UoTGlua2VkQmxvY2tpbmdRdWV1ZS5qYXZhOjM1OCkKKyAgICAgICAgYXQgamF2YS51dGlsLmNvbmN1cnJlbnQuVGhyZWFkUG9vbEV4ZWN1dG9yLmdldFRhc2soVGhyZWFkUG9vbEV4ZWN1dG9yLmphdmE6OTQ3KQorICAgICAgICBhdCBqYXZhLnV0aWwuY29uY3VycmVudC5UaHJlYWRQb29sRXhlY3V0b3IkV29ya2VyLnJ1bihUaHJlYWRQb29sRXhlY3V0b3IuamF2YTo5MDcpCisgICAgICAgIGF0IGphdmEubGFuZy5UaHJlYWQucnVuKFRocmVhZC5qYXZhOjYxOSkKKworIkFsYXJtIHBvb2wob3duKSIgcHJpbz00IHRpZD0weDM2MWIyNDAwIG5pZD0weDVjYyB3YWl0aW5nIG9uIGNvbmRpdGlvbiBbMHgzNWNiZjAwMF0KKyAgIGphdmEubGFuZy5UaHJlYWQuU3RhdGU6IFdBSVRJTkcgKHBhcmtpbmcpCisgICAgICAgIGF0IHN1bi5taXNjLlVuc2FmZS5wYXJrKE5hdGl2ZSBNZXRob2QpCisgICAgICAgIC0gcGFya2luZyB0byB3YWl0IGZvciAgPDB4MDVhNTJhYjA+IChhIGphdmEudXRpbC5jb25jdXJyZW50LmxvY2tzLkFic3RyYWN0UXVldWVkU3luY2hyb25pemVyJENvbmRpdGlvbk9iamVjdCkKKyAgICAgICAgYXQgamF2YS51dGlsLmNvbmN1cnJlbnQubG9ja3MuTG9ja1N1cHBvcnQucGFyayhMb2NrU3VwcG9ydC5qYXZhOjE1OCkKKyAgICAgICAgYXQgamF2YS51dGlsLmNvbmN1cnJlbnQubG9ja3MuQWJzdHJhY3RRdWV1ZWRTeW5jaHJvbml6ZXIkQ29uZGl0aW9uT2JqZWN0LmF3YWl0KEFic3RyYWN0UXVldWVkU3luY2hyb25pemVyLmphdmE6MTkyNSkKKyAgICAgICAgYXQgamF2YS51dGlsLmNvbmN1cnJlbnQuTGlua2VkQmxvY2tpbmdRdWV1ZS50YWtlKExpbmtlZEJsb2NraW5nUXVldWUuamF2YTozNTgpCisgICAgICAgIGF0IGphdmEudXRpbC5jb25jdXJyZW50LlRocmVhZFBvb2xFeGVjdXRvci5nZXRUYXNrKFRocmVhZFBvb2xFeGVjdXRvci5qYXZhOjk0NykKKyAgICAgICAgYXQgamF2YS51dGlsLmNvbmN1cnJlbnQuVGhyZWFkUG9vbEV4ZWN1dG9yJFdvcmtlci5ydW4oVGhyZWFkUG9vbEV4ZWN1dG9yLmphdmE6OTA3KQorICAgICAgICBhdCBqYXZhLmxhbmcuVGhyZWFkLnJ1bihUaHJlYWQuamF2YTo2MTkpCisKKyJTaW1wbGVUaW1lciIgZGFlbW9uIHByaW89MiB0aWQ9MHgzNGJmNjQwMCBuaWQ9MHg5MjggaW4gT2JqZWN0LndhaXQoKSBbMHgzNTc5ZjAwMF0KKyAgIGphdmEubGFuZy5UaHJlYWQuU3RhdGU6IFdBSVRJTkcgKG9uIG9iamVjdCBtb25pdG9yKQorICAgICAgICBhdCBqYXZhLmxhbmcuT2JqZWN0LndhaXQoTmF0aXZlIE1ldGhvZCkKKyAgICAgICAgYXQgamF2YS5sYW5nLk9iamVjdC53YWl0KE9iamVjdC5qYXZhOjQ4NSkKKyAgICAgICAgYXQgamF2YS51dGlsLlRpbWVyVGhyZWFkLm1haW5Mb29wKFRpbWVyLmphdmE6NDgzKQorICAgICAgICAtIGxvY2tlZCA8MHgwN2M5NmRiMD4gKGEgamF2YS51dGlsLlRhc2tRdWV1ZSkKKyAgICAgICAgYXQgamF2YS51dGlsLlRpbWVyVGhyZWFkLnJ1bihUaW1lci5qYXZhOjQ2MikKKworIlN3aW5nLVNoZWxsIiBkYWVtb24gcHJpbz02IHRpZD0weDM2Mzc3NDAwIG5pZD0weGJlOCB3YWl0aW5nIG9uIGNvbmRpdGlvbiBbMHgzODRjZjAwMF0KKyAgIGphdmEubGFuZy5UaHJlYWQuU3RhdGU6IFdBSVRJTkcgKHBhcmtpbmcpCisgICAgICAgIGF0IHN1bi5taXNjLlVuc2FmZS5wYXJrKE5hdGl2ZSBNZXRob2QpCisgICAgICAgIC0gcGFya2luZyB0byB3YWl0IGZvciAgPDB4MDZmZGE4YzA+IChhIGphdmEudXRpbC5jb25jdXJyZW50LmxvY2tzLkFic3RyYWN0UXVldWVkU3luY2hyb25pemVyJENvbmRpdGlvbk9iamVjdCkKKyAgICAgICAgYXQgamF2YS51dGlsLmNvbmN1cnJlbnQubG9ja3MuTG9ja1N1cHBvcnQucGFyayhMb2NrU3VwcG9ydC5qYXZhOjE1OCkKKyAgICAgICAgYXQgamF2YS51dGlsLmNvbmN1cnJlbnQubG9ja3MuQWJzdHJhY3RRdWV1ZWRTeW5jaHJvbml6ZXIkQ29uZGl0aW9uT2JqZWN0LmF3YWl0KEFic3RyYWN0UXVldWVkU3luY2hyb25pemVyLmphdmE6MTkyNSkKKyAgICAgICAgYXQgamF2YS51dGlsLmNvbmN1cnJlbnQuTGlua2VkQmxvY2tpbmdRdWV1ZS50YWtlKExpbmtlZEJsb2NraW5nUXVldWUuamF2YTozNTgpCisgICAgICAgIGF0IGphdmEudXRpbC5jb25jdXJyZW50LlRocmVhZFBvb2xFeGVjdXRvci5nZXRUYXNrKFRocmVhZFBvb2xFeGVjdXRvci5qYXZhOjk0NykKKyAgICAgICAgYXQgamF2YS51dGlsLmNvbmN1cnJlbnQuVGhyZWFkUG9vbEV4ZWN1dG9yJFdvcmtlci5ydW4oVGhyZWFkUG9vbEV4ZWN1dG9yLmphdmE6OTA3KQorICAgICAgICBhdCBzdW4uYXd0LnNoZWxsLldpbjMyU2hlbGxGb2xkZXJNYW5hZ2VyMiRDb21JbnZva2VyJDMucnVuKFdpbjMyU2hlbGxGb2xkZXJNYW5hZ2VyMi5qYXZhOjQ1OCkKKyAgICAgICAgYXQgamF2YS5sYW5nLlRocmVhZC5ydW4oVGhyZWFkLmphdmE6NjE5KQorCisiSm9iU2NoZWR1bGVyIHBvb2wgMC8xIiBwcmlvPTYgdGlkPTB4MzRhYmUwMDAgbmlkPTB4YjJjIHdhaXRpbmcgb24gY29uZGl0aW9uIFsweDM4NDdmMDAwXQorICAgamF2YS5sYW5nLlRocmVhZC5TdGF0ZTogV0FJVElORyAocGFya2luZykKKyAgICAgICAgYXQgc3VuLm1pc2MuVW5zYWZlLnBhcmsoTmF0aXZlIE1ldGhvZCkKKyAgICAgICAgLSBwYXJraW5nIHRvIHdhaXQgZm9yICA8MHgwNmYzMmIzOD4gKGEgamF2YS51dGlsLmNvbmN1cnJlbnQubG9ja3MuQWJzdHJhY3RRdWV1ZWRTeW5jaHJvbml6ZXIkQ29uZGl0aW9uT2JqZWN0KQorICAgICAgICBhdCBqYXZhLnV0aWwuY29uY3VycmVudC5sb2Nrcy5Mb2NrU3VwcG9ydC5wYXJrKExvY2tTdXBwb3J0LmphdmE6MTU4KQorICAgICAgICBhdCBqYXZhLnV0aWwuY29uY3VycmVudC5sb2Nrcy5BYnN0cmFjdFF1ZXVlZFN5bmNocm9uaXplciRDb25kaXRpb25PYmplY3QuYXdhaXQoQWJzdHJhY3RRdWV1ZWRTeW5jaHJvbml6ZXIuamF2YToxOTI1KQorICAgICAgICBhdCBqYXZhLnV0aWwuY29uY3VycmVudC5Qcmlvcml0eUJsb2NraW5nUXVldWUudGFrZShQcmlvcml0eUJsb2NraW5nUXVldWUuamF2YToyMjApCisgICAgICAgIGF0IGphdmEudXRpbC5jb25jdXJyZW50LlRocmVhZFBvb2xFeGVjdXRvci5nZXRUYXNrKFRocmVhZFBvb2xFeGVjdXRvci5qYXZhOjk0NykKKyAgICAgICAgYXQgamF2YS51dGlsLmNvbmN1cnJlbnQuVGhyZWFkUG9vbEV4ZWN1dG9yJFdvcmtlci5ydW4oVGhyZWFkUG9vbEV4ZWN1dG9yLmphdmE6OTA3KQorICAgICAgICBhdCBqYXZhLmxhbmcuVGhyZWFkLnJ1bihUaHJlYWQuamF2YTo2MTkpCisKKyJBcHBsaWNhdGlvbkltcGwgcG9vbGVkIHRocmVhZCIgcHJpbz00IHRpZD0weDM0YjNhYzAwIG5pZD0weDhhOCB3YWl0aW5nIG9uIGNvbmRpdGlvbiBbMHgzODQyZjAwMF0KKyAgIGphdmEubGFuZy5UaHJlYWQuU3RhdGU6IFRJTUVEX1dBSVRJTkcgKHBhcmtpbmcpCisgICAgICAgIGF0IHN1bi5taXNjLlVuc2FmZS5wYXJrKE5hdGl2ZSBNZXRob2QpCisgICAgICAgIC0gcGFya2luZyB0byB3YWl0IGZvciAgPDB4MDUzMzdlMDg+IChhIGphdmEudXRpbC5jb25jdXJyZW50LlN5bmNocm9ub3VzUXVldWUkVHJhbnNmZXJTdGFjaykKKyAgICAgICAgYXQgamF2YS51dGlsLmNvbmN1cnJlbnQubG9ja3MuTG9ja1N1cHBvcnQucGFya05hbm9zKExvY2tTdXBwb3J0LmphdmE6MTk4KQorICAgICAgICBhdCBqYXZhLnV0aWwuY29uY3VycmVudC5TeW5jaHJvbm91c1F1ZXVlJFRyYW5zZmVyU3RhY2suYXdhaXRGdWxmaWxsKFN5bmNocm9ub3VzUXVldWUuamF2YTo0MjQpCisgICAgICAgIGF0IGphdmEudXRpbC5jb25jdXJyZW50LlN5bmNocm9ub3VzUXVldWUkVHJhbnNmZXJTdGFjay50cmFuc2ZlcihTeW5jaHJvbm91c1F1ZXVlLmphdmE6MzIzKQorICAgICAgICBhdCBqYXZhLnV0aWwuY29uY3VycmVudC5TeW5jaHJvbm91c1F1ZXVlLnBvbGwoU3luY2hyb25vdXNRdWV1ZS5qYXZhOjg3NCkKKyAgICAgICAgYXQgamF2YS51dGlsLmNvbmN1cnJlbnQuVGhyZWFkUG9vbEV4ZWN1dG9yLmdldFRhc2soVGhyZWFkUG9vbEV4ZWN1dG9yLmphdmE6OTQ1KQorICAgICAgICBhdCBqYXZhLnV0aWwuY29uY3VycmVudC5UaHJlYWRQb29sRXhlY3V0b3IkV29ya2VyLnJ1bihUaHJlYWRQb29sRXhlY3V0b3IuamF2YTo5MDcpCisgICAgICAgIGF0IGphdmEubGFuZy5UaHJlYWQucnVuKFRocmVhZC5qYXZhOjYxOSkKKyAgICAgICAgYXQgY29tLmludGVsbGlqLm9wZW5hcGkuYXBwbGljYXRpb24uaW1wbC5BcHBsaWNhdGlvbkltcGwkMSQxLnJ1bihBcHBsaWNhdGlvbkltcGwuamF2YToxMjUpCisKKyJBcHBsaWNhdGlvbkltcGwgcG9vbGVkIHRocmVhZCIgcHJpbz00IHRpZD0weDM2NDgxMDAwIG5pZD0weDhhMCB3YWl0aW5nIG9uIGNvbmRpdGlvbiBbMHgzODNkZjAwMF0KKyAgIGphdmEubGFuZy5UaHJlYWQuU3RhdGU6IFRJTUVEX1dBSVRJTkcgKHBhcmtpbmcpCisgICAgICAgIGF0IHN1bi5taXNjLlVuc2FmZS5wYXJrKE5hdGl2ZSBNZXRob2QpCisgICAgICAgIC0gcGFya2luZyB0byB3YWl0IGZvciAgPDB4MDUzMzdlMDg+IChhIGphdmEudXRpbC5jb25jdXJyZW50LlN5bmNocm9ub3VzUXVldWUkVHJhbnNmZXJTdGFjaykKKyAgICAgICAgYXQgamF2YS51dGlsLmNvbmN1cnJlbnQubG9ja3MuTG9ja1N1cHBvcnQucGFya05hbm9zKExvY2tTdXBwb3J0LmphdmE6MTk4KQorICAgICAgICBhdCBqYXZhLnV0aWwuY29uY3VycmVudC5TeW5jaHJvbm91c1F1ZXVlJFRyYW5zZmVyU3RhY2suYXdhaXRGdWxmaWxsKFN5bmNocm9ub3VzUXVldWUuamF2YTo0MjQpCisgICAgICAgIGF0IGphdmEudXRpbC5jb25jdXJyZW50LlN5bmNocm9ub3VzUXVldWUkVHJhbnNmZXJTdGFjay50cmFuc2ZlcihTeW5jaHJvbm91c1F1ZXVlLmphdmE6MzIzKQorICAgICAgICBhdCBqYXZhLnV0aWwuY29uY3VycmVudC5TeW5jaHJvbm91c1F1ZXVlLnBvbGwoU3luY2hyb25vdXNRdWV1ZS5qYXZhOjg3NCkKKyAgICAgICAgYXQgamF2YS51dGlsLmNvbmN1cnJlbnQuVGhyZWFkUG9vbEV4ZWN1dG9yLmdldFRhc2soVGhyZWFkUG9vbEV4ZWN1dG9yLmphdmE6OTQ1KQorICAgICAgICBhdCBqYXZhLnV0aWwuY29uY3VycmVudC5UaHJlYWRQb29sRXhlY3V0b3IkV29ya2VyLnJ1bihUaHJlYWRQb29sRXhlY3V0b3IuamF2YTo5MDcpCisgICAgICAgIGF0IGphdmEubGFuZy5UaHJlYWQucnVuKFRocmVhZC5qYXZhOjYxOSkKKyAgICAgICAgYXQgY29tLmludGVsbGlqLm9wZW5hcGkuYXBwbGljYXRpb24uaW1wbC5BcHBsaWNhdGlvbkltcGwkMSQxLnJ1bihBcHBsaWNhdGlvbkltcGwuamF2YToxMjUpCisKKyJDaGFuZ2UgTGlzdCBVcGRhdGVyIiBwcmlvPTIgdGlkPTB4MzQ0NDdjMDAgbmlkPTB4OTAwIHdhaXRpbmcgb24gY29uZGl0aW9uIFsweDM2ZmZmMDAwXQorICAgamF2YS5sYW5nLlRocmVhZC5TdGF0ZTogV0FJVElORyAocGFya2luZykKKyAgICAgICAgYXQgc3VuLm1pc2MuVW5zYWZlLnBhcmsoTmF0aXZlIE1ldGhvZCkKKyAgICAgICAgLSBwYXJraW5nIHRvIHdhaXQgZm9yICA8MHgwNjM4MTU3MD4gKGEgamF2YS51dGlsLmNvbmN1cnJlbnQubG9ja3MuQWJzdHJhY3RRdWV1ZWRTeW5jaHJvbml6ZXIkQ29uZGl0aW9uT2JqZWN0KQorICAgICAgICBhdCBqYXZhLnV0aWwuY29uY3VycmVudC5sb2Nrcy5Mb2NrU3VwcG9ydC5wYXJrKExvY2tTdXBwb3J0LmphdmE6MTU4KQorICAgICAgICBhdCBqYXZhLnV0aWwuY29uY3VycmVudC5sb2Nrcy5BYnN0cmFjdFF1ZXVlZFN5bmNocm9uaXplciRDb25kaXRpb25PYmplY3QuYXdhaXQoQWJzdHJhY3RRdWV1ZWRTeW5jaHJvbml6ZXIuamF2YToxOTI1KQorICAgICAgICBhdCBqYXZhLnV0aWwuY29uY3VycmVudC5EZWxheVF1ZXVlLnRha2UoRGVsYXlRdWV1ZS5qYXZhOjE2MCkKKyAgICAgICAgYXQgamF2YS51dGlsLmNvbmN1cnJlbnQuU2NoZWR1bGVkVGhyZWFkUG9vbEV4ZWN1dG9yJERlbGF5ZWRXb3JrUXVldWUudGFrZShTY2hlZHVsZWRUaHJlYWRQb29sRXhlY3V0b3IuamF2YTo1ODMpCisgICAgICAgIGF0IGphdmEudXRpbC5jb25jdXJyZW50LlNjaGVkdWxlZFRocmVhZFBvb2xFeGVjdXRvciREZWxheWVkV29ya1F1ZXVlLnRha2UoU2NoZWR1bGVkVGhyZWFkUG9vbEV4ZWN1dG9yLmphdmE6NTc2KQorICAgICAgICBhdCBqYXZhLnV0aWwuY29uY3VycmVudC5UaHJlYWRQb29sRXhlY3V0b3IuZ2V0VGFzayhUaHJlYWRQb29sRXhlY3V0b3IuamF2YTo5NDcpCisgICAgICAgIGF0IGphdmEudXRpbC5jb25jdXJyZW50LlRocmVhZFBvb2xFeGVjdXRvciRXb3JrZXIucnVuKFRocmVhZFBvb2xFeGVjdXRvci5qYXZhOjkwNykKKyAgICAgICAgYXQgamF2YS5sYW5nLlRocmVhZC5ydW4oVGhyZWFkLmphdmE6NjE5KQorCisiVGltZXItMCIgZGFlbW9uIHByaW89NiB0aWQ9MHgzNGJlNzQwMCBuaWQ9MHg4ZmMgaW4gT2JqZWN0LndhaXQoKSBbMHgzNmZhZjAwMF0KKyAgIGphdmEubGFuZy5UaHJlYWQuU3RhdGU6IFdBSVRJTkcgKG9uIG9iamVjdCBtb25pdG9yKQorICAgICAgICBhdCBqYXZhLmxhbmcuT2JqZWN0LndhaXQoTmF0aXZlIE1ldGhvZCkKKyAgICAgICAgLSB3YWl0aW5nIG9uIDwweDA2ZWIwNTU4PiAoYSBqYXZhLnV0aWwuVGFza1F1ZXVlKQorICAgICAgICBhdCBqYXZhLmxhbmcuT2JqZWN0LndhaXQoT2JqZWN0LmphdmE6NDg1KQorICAgICAgICBhdCBqYXZhLnV0aWwuVGltZXJUaHJlYWQubWFpbkxvb3AoVGltZXIuamF2YTo0ODMpCisgICAgICAgIC0gbG9ja2VkIDwweDA2ZWIwNTU4PiAoYSBqYXZhLnV0aWwuVGFza1F1ZXVlKQorICAgICAgICBhdCBqYXZhLnV0aWwuVGltZXJUaHJlYWQucnVuKFRpbWVyLmphdmE6NDYyKQorCisiQXBwbGljYXRpb25JbXBsIHBvb2xlZCB0aHJlYWQiIHByaW89NCB0aWQ9MHgzNjFiNWMwMCBuaWQ9MHg4Nzggd2FpdGluZyBvbiBjb25kaXRpb24gWzB4MzVjNmYwMDBdCisgICBqYXZhLmxhbmcuVGhyZWFkLlN0YXRlOiBUSU1FRF9XQUlUSU5HIChwYXJraW5nKQorICAgICAgICBhdCBzdW4ubWlzYy5VbnNhZmUucGFyayhOYXRpdmUgTWV0aG9kKQorICAgICAgICAtIHBhcmtpbmcgdG8gd2FpdCBmb3IgIDwweDA1MzM3ZTA4PiAoYSBqYXZhLnV0aWwuY29uY3VycmVudC5TeW5jaHJvbm91c1F1ZXVlJFRyYW5zZmVyU3RhY2spCisgICAgICAgIGF0IGphdmEudXRpbC5jb25jdXJyZW50LmxvY2tzLkxvY2tTdXBwb3J0LnBhcmtOYW5vcyhMb2NrU3VwcG9ydC5qYXZhOjE5OCkKKyAgICAgICAgYXQgamF2YS51dGlsLmNvbmN1cnJlbnQuU3luY2hyb25vdXNRdWV1ZSRUcmFuc2ZlclN0YWNrLmF3YWl0RnVsZmlsbChTeW5jaHJvbm91c1F1ZXVlLmphdmE6NDI0KQorICAgICAgICBhdCBqYXZhLnV0aWwuY29uY3VycmVudC5TeW5jaHJvbm91c1F1ZXVlJFRyYW5zZmVyU3RhY2sudHJhbnNmZXIoU3luY2hyb25vdXNRdWV1ZS5qYXZhOjMyMykKKyAgICAgICAgYXQgamF2YS51dGlsLmNvbmN1cnJlbnQuU3luY2hyb25vdXNRdWV1ZS5wb2xsKFN5bmNocm9ub3VzUXVldWUuamF2YTo4NzQpCisgICAgICAgIGF0IGphdmEudXRpbC5jb25jdXJyZW50LlRocmVhZFBvb2xFeGVjdXRvci5nZXRUYXNrKFRocmVhZFBvb2xFeGVjdXRvci5qYXZhOjk0NSkKKyAgICAgICAgYXQgamF2YS51dGlsLmNvbmN1cnJlbnQuVGhyZWFkUG9vbEV4ZWN1dG9yJFdvcmtlci5ydW4oVGhyZWFkUG9vbEV4ZWN1dG9yLmphdmE6OTA3KQorICAgICAgICBhdCBqYXZhLmxhbmcuVGhyZWFkLnJ1bihUaHJlYWQuamF2YTo2MTkpCisgICAgICAgIGF0IGNvbS5pbnRlbGxpai5vcGVuYXBpLmFwcGxpY2F0aW9uLmltcGwuQXBwbGljYXRpb25JbXBsJDEkMS5ydW4oQXBwbGljYXRpb25JbXBsLmphdmE6MTI1KQorCisiQWxhcm0gcG9vbChvd24pIiBwcmlvPTQgdGlkPTB4MzYwMGNjMDAgbmlkPTB4ODljIHdhaXRpbmcgb24gY29uZGl0aW9uIFsweDM2ZWFmMDAwXQorICAgamF2YS5sYW5nLlRocmVhZC5TdGF0ZTogV0FJVElORyAocGFya2luZykKKyAgICAgICAgYXQgc3VuLm1pc2MuVW5zYWZlLnBhcmsoTmF0aXZlIE1ldGhvZCkKKyAgICAgICAgLSBwYXJraW5nIHRvIHdhaXQgZm9yICA8MHgwNWE1MmRkOD4gKGEgamF2YS51dGlsLmNvbmN1cnJlbnQubG9ja3MuQWJzdHJhY3RRdWV1ZWRTeW5jaHJvbml6ZXIkQ29uZGl0aW9uT2JqZWN0KQorICAgICAgICBhdCBqYXZhLnV0aWwuY29uY3VycmVudC5sb2Nrcy5Mb2NrU3VwcG9ydC5wYXJrKExvY2tTdXBwb3J0LmphdmE6MTU4KQorICAgICAgICBhdCBqYXZhLnV0aWwuY29uY3VycmVudC5sb2Nrcy5BYnN0cmFjdFF1ZXVlZFN5bmNocm9uaXplciRDb25kaXRpb25PYmplY3QuYXdhaXQoQWJzdHJhY3RRdWV1ZWRTeW5jaHJvbml6ZXIuamF2YToxOTI1KQorICAgICAgICBhdCBqYXZhLnV0aWwuY29uY3VycmVudC5MaW5rZWRCbG9ja2luZ1F1ZXVlLnRha2UoTGlua2VkQmxvY2tpbmdRdWV1ZS5qYXZhOjM1OCkKKyAgICAgICAgYXQgamF2YS51dGlsLmNvbmN1cnJlbnQuVGhyZWFkUG9vbEV4ZWN1dG9yLmdldFRhc2soVGhyZWFkUG9vbEV4ZWN1dG9yLmphdmE6OTQ3KQorICAgICAgICBhdCBqYXZhLnV0aWwuY29uY3VycmVudC5UaHJlYWRQb29sRXhlY3V0b3IkV29ya2VyLnJ1bihUaHJlYWRQb29sRXhlY3V0b3IuamF2YTo5MDcpCisgICAgICAgIGF0IGphdmEubGFuZy5UaHJlYWQucnVuKFRocmVhZC5qYXZhOjYxOSkKKworIkFwcGxpY2F0aW9uSW1wbCBwb29sZWQgdGhyZWFkIiBwcmlvPTQgdGlkPTB4MzRlNDUwMDAgbmlkPTB4OGFjIHdhaXRpbmcgb24gY29uZGl0aW9uIFsweDM2ZTVmMDAwXQorICAgamF2YS5sYW5nLlRocmVhZC5TdGF0ZTogVElNRURfV0FJVElORyAocGFya2luZykKKyAgICAgICAgYXQgc3VuLm1pc2MuVW5zYWZlLnBhcmsoTmF0aXZlIE1ldGhvZCkKKyAgICAgICAgLSBwYXJraW5nIHRvIHdhaXQgZm9yICA8MHgwNTMzN2UwOD4gKGEgamF2YS51dGlsLmNvbmN1cnJlbnQuU3luY2hyb25vdXNRdWV1ZSRUcmFuc2ZlclN0YWNrKQorICAgICAgICBhdCBqYXZhLnV0aWwuY29uY3VycmVudC5sb2Nrcy5Mb2NrU3VwcG9ydC5wYXJrTmFub3MoTG9ja1N1cHBvcnQuamF2YToxOTgpCisgICAgICAgIGF0IGphdmEudXRpbC5jb25jdXJyZW50LlN5bmNocm9ub3VzUXVldWUkVHJhbnNmZXJTdGFjay5hd2FpdEZ1bGZpbGwoU3luY2hyb25vdXNRdWV1ZS5qYXZhOjQyNCkKKyAgICAgICAgYXQgamF2YS51dGlsLmNvbmN1cnJlbnQuU3luY2hyb25vdXNRdWV1ZSRUcmFuc2ZlclN0YWNrLnRyYW5zZmVyKFN5bmNocm9ub3VzUXVldWUuamF2YTozMjMpCisgICAgICAgIGF0IGphdmEudXRpbC5jb25jdXJyZW50LlN5bmNocm9ub3VzUXVldWUucG9sbChTeW5jaHJvbm91c1F1ZXVlLmphdmE6ODc0KQorICAgICAgICBhdCBqYXZhLnV0aWwuY29uY3VycmVudC5UaHJlYWRQb29sRXhlY3V0b3IuZ2V0VGFzayhUaHJlYWRQb29sRXhlY3V0b3IuamF2YTo5NDUpCisgICAgICAgIGF0IGphdmEudXRpbC5jb25jdXJyZW50LlRocmVhZFBvb2xFeGVjdXRvciRXb3JrZXIucnVuKFRocmVhZFBvb2xFeGVjdXRvci5qYXZhOjkwNykKKyAgICAgICAgYXQgamF2YS5sYW5nLlRocmVhZC5ydW4oVGhyZWFkLmphdmE6NjE5KQorICAgICAgICBhdCBjb20uaW50ZWxsaWoub3BlbmFwaS5hcHBsaWNhdGlvbi5pbXBsLkFwcGxpY2F0aW9uSW1wbCQxJDEucnVuKEFwcGxpY2F0aW9uSW1wbC5qYXZhOjEyNSkKKworIlByb2dyZXNzIENhbmNlbCBDaGVja2VyIiBwcmlvPTEwIHRpZD0weDM0ZTU1NDAwIG5pZD0weGExYyB3YWl0aW5nIG9uIGNvbmRpdGlvbiBbMHgzNWUyZjAwMF0KKyAgIGphdmEubGFuZy5UaHJlYWQuU3RhdGU6IFRJTUVEX1dBSVRJTkcgKHNsZWVwaW5nKQorICAgICAgICBhdCBqYXZhLmxhbmcuVGhyZWFkLnNsZWVwKE5hdGl2ZSBNZXRob2QpCisgICAgICAgIGF0IGNvbS5pbnRlbGxpai5vcGVuYXBpLnByb2dyZXNzLmltcGwuUHJvZ3Jlc3NNYW5hZ2VySW1wbCQxLnJ1bihQcm9ncmVzc01hbmFnZXJJbXBsLmphdmE6NjIpCisKKyJBcHBsaWNhdGlvbkltcGwgcG9vbGVkIHRocmVhZCIgcHJpbz00IHRpZD0weDM0Y2UxNDAwIG5pZD0weDlkYyB3YWl0aW5nIG9uIGNvbmRpdGlvbiBbMHgzNWRkZjAwMF0KKyAgIGphdmEubGFuZy5UaHJlYWQuU3RhdGU6IFRJTUVEX1dBSVRJTkcgKHBhcmtpbmcpCisgICAgICAgIGF0IHN1bi5taXNjLlVuc2FmZS5wYXJrKE5hdGl2ZSBNZXRob2QpCisgICAgICAgIC0gcGFya2luZyB0byB3YWl0IGZvciAgPDB4MDUzMzdlMDg+IChhIGphdmEudXRpbC5jb25jdXJyZW50LlN5bmNocm9ub3VzUXVldWUkVHJhbnNmZXJTdGFjaykKKyAgICAgICAgYXQgamF2YS51dGlsLmNvbmN1cnJlbnQubG9ja3MuTG9ja1N1cHBvcnQucGFya05hbm9zKExvY2tTdXBwb3J0LmphdmE6MTk4KQorICAgICAgICBhdCBqYXZhLnV0aWwuY29uY3VycmVudC5TeW5jaHJvbm91c1F1ZXVlJFRyYW5zZmVyU3RhY2suYXdhaXRGdWxmaWxsKFN5bmNocm9ub3VzUXVldWUuamF2YTo0MjQpCisgICAgICAgIGF0IGphdmEudXRpbC5jb25jdXJyZW50LlN5bmNocm9ub3VzUXVldWUkVHJhbnNmZXJTdGFjay50cmFuc2ZlcihTeW5jaHJvbm91c1F1ZXVlLmphdmE6MzIzKQorICAgICAgICBhdCBqYXZhLnV0aWwuY29uY3VycmVudC5TeW5jaHJvbm91c1F1ZXVlLnBvbGwoU3luY2hyb25vdXNRdWV1ZS5qYXZhOjg3NCkKKyAgICAgICAgYXQgamF2YS51dGlsLmNvbmN1cnJlbnQuVGhyZWFkUG9vbEV4ZWN1dG9yLmdldFRhc2soVGhyZWFkUG9vbEV4ZWN1dG9yLmphdmE6OTQ1KQorICAgICAgICBhdCBqYXZhLnV0aWwuY29uY3VycmVudC5UaHJlYWRQb29sRXhlY3V0b3IkV29ya2VyLnJ1bihUaHJlYWRQb29sRXhlY3V0b3IuamF2YTo5MDcpCisgICAgICAgIGF0IGphdmEubGFuZy5UaHJlYWQucnVuKFRocmVhZC5qYXZhOjYxOSkKKyAgICAgICAgYXQgY29tLmludGVsbGlqLm9wZW5hcGkuYXBwbGljYXRpb24uaW1wbC5BcHBsaWNhdGlvbkltcGwkMSQxLnJ1bihBcHBsaWNhdGlvbkltcGwuamF2YToxMjUpCisKKyJBbGFybSBwb29sKHNoYXJlZCkiIHByaW89NCB0aWQ9MHgzNGU1MjgwMCBuaWQ9MHg4ZTggd2FpdGluZyBvbiBjb25kaXRpb24gWzB4MzVkMGYwMDBdCisgICBqYXZhLmxhbmcuVGhyZWFkLlN0YXRlOiBXQUlUSU5HIChwYXJraW5nKQorICAgICAgICBhdCBzdW4ubWlzYy5VbnNhZmUucGFyayhOYXRpdmUgTWV0aG9kKQorICAgICAgICAtIHBhcmtpbmcgdG8gd2FpdCBmb3IgIDwweDA1MzMyZDYwPiAoYSBqYXZhLnV0aWwuY29uY3VycmVudC5sb2Nrcy5BYnN0cmFjdFF1ZXVlZFN5bmNocm9uaXplciRDb25kaXRpb25PYmplY3QpCisgICAgICAgIGF0IGphdmEudXRpbC5jb25jdXJyZW50LmxvY2tzLkxvY2tTdXBwb3J0LnBhcmsoTG9ja1N1cHBvcnQuamF2YToxNTgpCisgICAgICAgIGF0IGphdmEudXRpbC5jb25jdXJyZW50LmxvY2tzLkFic3RyYWN0UXVldWVkU3luY2hyb25pemVyJENvbmRpdGlvbk9iamVjdC5hd2FpdChBYnN0cmFjdFF1ZXVlZFN5bmNocm9uaXplci5qYXZhOjE5MjUpCisgICAgICAgIGF0IGphdmEudXRpbC5jb25jdXJyZW50LkxpbmtlZEJsb2NraW5nUXVldWUudGFrZShMaW5rZWRCbG9ja2luZ1F1ZXVlLmphdmE6MzU4KQorICAgICAgICBhdCBqYXZhLnV0aWwuY29uY3VycmVudC5UaHJlYWRQb29sRXhlY3V0b3IuZ2V0VGFzayhUaHJlYWRQb29sRXhlY3V0b3IuamF2YTo5NDcpCisgICAgICAgIGF0IGphdmEudXRpbC5jb25jdXJyZW50LlRocmVhZFBvb2xFeGVjdXRvciRXb3JrZXIucnVuKFRocmVhZFBvb2xFeGVjdXRvci5qYXZhOjkwNykKKyAgICAgICAgYXQgamF2YS5sYW5nLlRocmVhZC5ydW4oVGhyZWFkLmphdmE6NjE5KQorCisiVGltZXJRdWV1ZSIgZGFlbW9uIHByaW89NiB0aWQ9MHgzNGUzZjgwMCBuaWQ9MHg5NDggaW4gT2JqZWN0LndhaXQoKSBbMHgzNTc0ZjAwMF0KKyAgIGphdmEubGFuZy5UaHJlYWQuU3RhdGU6IFRJTUVEX1dBSVRJTkcgKG9uIG9iamVjdCBtb25pdG9yKQorICAgICAgICBhdCBqYXZhLmxhbmcuT2JqZWN0LndhaXQoTmF0aXZlIE1ldGhvZCkKKyAgICAgICAgYXQgamF2YXguc3dpbmcuVGltZXJRdWV1ZS5ydW4oVGltZXJRdWV1ZS5qYXZhOjIzMikKKyAgICAgICAgLSBsb2NrZWQgPDB4MDVlMDgxMjA+IChhIGphdmF4LnN3aW5nLlRpbWVyUXVldWUpCisgICAgICAgIGF0IGphdmEubGFuZy5UaHJlYWQucnVuKFRocmVhZC5qYXZhOjYxOSkKKworIkV4ZTRKU3RhcnR1cFRocmVhZCIgZGFlbW9uIHByaW89NiB0aWQ9MHgzNGFiOTgwMCBuaWQ9MHg0ZjAgd2FpdGluZyBvbiBjb25kaXRpb24gWzB4MzU2ZWYwMDBdCisgICBqYXZhLmxhbmcuVGhyZWFkLlN0YXRlOiBUSU1FRF9XQUlUSU5HIChzbGVlcGluZykKKyAgICAgICAgYXQgamF2YS5sYW5nLlRocmVhZC5zbGVlcChOYXRpdmUgTWV0aG9kKQorICAgICAgICBhdCBjb20uZXhlNGouQ29udHJvbGxlciRTdGFydHVwVGhyZWFkLnJ1bihVbmtub3duIFNvdXJjZSkKKworIkZTIFN5bmNocm9uaXplciIgcHJpbz02IHRpZD0weDM0ZTQ4NDAwIG5pZD0weGY2NCB3YWl0aW5nIGZvciBtb25pdG9yIGVudHJ5IFsweDM1NjlmMDAwXQorICAgamF2YS5sYW5nLlRocmVhZC5TdGF0ZTogQkxPQ0tFRCAob24gb2JqZWN0IG1vbml0b3IpCisgICAgICAgIGF0IGNvbS5pbnRlbGxpai5vcGVuYXBpLnZmcy5pbXBsLmxvY2FsLkZpbGVXYXRjaGVyLmdldERpcnR5UGF0aHMoRmlsZVdhdGNoZXIuamF2YToxMTQpCisgICAgICAgIC0gd2FpdGluZyB0byBsb2NrIDwweDA1OTVhZTQwPiAoYSBqYXZhLmxhbmcuT2JqZWN0KQorICAgICAgICBhdCBjb20uaW50ZWxsaWoub3BlbmFwaS52ZnMuaW1wbC5sb2NhbC5Mb2NhbEZpbGVTeXN0ZW1JbXBsLmIoTG9jYWxGaWxlU3lzdGVtSW1wbC5qYXZhOjE4OSkKKyAgICAgICAgYXQgY29tLmludGVsbGlqLm9wZW5hcGkudmZzLmltcGwubG9jYWwuTG9jYWxGaWxlU3lzdGVtSW1wbC5tYXJrU3VzcGljb3VzRmlsZXNEaXJ0eShMb2NhbEZpbGVTeXN0ZW1JbXBsLmphdmE6MjMwKQorICAgICAgICBhdCBjb20uaW50ZWxsaWoub3BlbmFwaS52ZnMubmV3dmZzLlJlZnJlc2hTZXNzaW9uSW1wbC5zY2FuKFJlZnJlc2hTZXNzaW9uSW1wbC5qYXZhOjg2KQorICAgICAgICBhdCBjb20uaW50ZWxsaWoub3BlbmFwaS52ZnMubmV3dmZzLlJlZnJlc2hRdWV1ZUltcGwkMS5ydW4oUmVmcmVzaFF1ZXVlSW1wbC5qYXZhOjc0KQorICAgICAgICBhdCBqYXZhLnV0aWwuY29uY3VycmVudC5FeGVjdXRvcnMkUnVubmFibGVBZGFwdGVyLmNhbGwoRXhlY3V0b3JzLmphdmE6NDQxKQorICAgICAgICBhdCBqYXZhLnV0aWwuY29uY3VycmVudC5GdXR1cmVUYXNrJFN5bmMuaW5uZXJSdW4oRnV0dXJlVGFzay5qYXZhOjMwMykKKyAgICAgICAgYXQgamF2YS51dGlsLmNvbmN1cnJlbnQuRnV0dXJlVGFzay5ydW4oRnV0dXJlVGFzay5qYXZhOjEzOCkKKyAgICAgICAgYXQgamF2YS51dGlsLmNvbmN1cnJlbnQuVGhyZWFkUG9vbEV4ZWN1dG9yJFdvcmtlci5ydW5UYXNrKFRocmVhZFBvb2xFeGVjdXRvci5qYXZhOjg4NikKKyAgICAgICAgYXQgamF2YS51dGlsLmNvbmN1cnJlbnQuVGhyZWFkUG9vbEV4ZWN1dG9yJFdvcmtlci5ydW4oVGhyZWFkUG9vbEV4ZWN1dG9yLmphdmE6OTA4KQorICAgICAgICBhdCBqYXZhLmxhbmcuVGhyZWFkLnJ1bihUaHJlYWQuamF2YTo2MTkpCisKKyJYTUwtUlBDIFdlYmxpc3RlbmVyIiBwcmlvPTQgdGlkPTB4MzRjMGU0MDAgbmlkPTB4OGRjIHJ1bm5hYmxlIFsweDM1ZmRmMDAwXQorICAgamF2YS5sYW5nLlRocmVhZC5TdGF0ZTogUlVOTkFCTEUKKyAgICAgICAgYXQgamF2YS5uZXQuUGxhaW5Tb2NrZXRJbXBsLnNvY2tldEFjY2VwdChOYXRpdmUgTWV0aG9kKQorICAgICAgICBhdCBqYXZhLm5ldC5QbGFpblNvY2tldEltcGwuYWNjZXB0KFBsYWluU29ja2V0SW1wbC5qYXZhOjM5MCkKKyAgICAgICAgLSBsb2NrZWQgPDB4MDVhNzNkOTA+IChhIGphdmEubmV0LlNvY2tzU29ja2V0SW1wbCkKKyAgICAgICAgYXQgamF2YS5uZXQuU2VydmVyU29ja2V0LmltcGxBY2NlcHQoU2VydmVyU29ja2V0LmphdmE6NDUzKQorICAgICAgICBhdCBqYXZhLm5ldC5TZXJ2ZXJTb2NrZXQuYWNjZXB0KFNlcnZlclNvY2tldC5qYXZhOjQyMSkKKyAgICAgICAgYXQgb3JnLmFwYWNoZS54bWxycGMuV2ViU2VydmVyLnJ1bihXZWJTZXJ2ZXIuamF2YTo0NTMpCisgICAgICAgIGF0IGphdmEubGFuZy5UaHJlYWQucnVuKFRocmVhZC5qYXZhOjYxOSkKKworIlBlcmZvcm1hbmNlIHdhdGNoZXIiIHByaW89MiB0aWQ9MHgzNGQwYzQwMCBuaWQ9MHg4Y2Mgd2FpdGluZyBvbiBjb25kaXRpb24gWzB4MzVmOGYwMDBdCisgICBqYXZhLmxhbmcuVGhyZWFkLlN0YXRlOiBUSU1FRF9XQUlUSU5HIChwYXJraW5nKQorICAgICAgICBhdCBzdW4ubWlzYy5VbnNhZmUucGFyayhOYXRpdmUgTWV0aG9kKQorICAgICAgICAtIHBhcmtpbmcgdG8gd2FpdCBmb3IgIDwweDA1YTczZWI4PiAoYSBqYXZhLnV0aWwuY29uY3VycmVudC5TZW1hcGhvcmUkTm9uZmFpclN5bmMpCisgICAgICAgIGF0IGphdmEudXRpbC5jb25jdXJyZW50LmxvY2tzLkxvY2tTdXBwb3J0LnBhcmtOYW5vcyhMb2NrU3VwcG9ydC5qYXZhOjE5OCkKKyAgICAgICAgYXQgamF2YS51dGlsLmNvbmN1cnJlbnQubG9ja3MuQWJzdHJhY3RRdWV1ZWRTeW5jaHJvbml6ZXIuZG9BY3F1aXJlU2hhcmVkTmFub3MoQWJzdHJhY3RRdWV1ZWRTeW5jaHJvbml6ZXIuamF2YTo5NDcpCisgICAgICAgIGF0IGphdmEudXRpbC5jb25jdXJyZW50LmxvY2tzLkFic3RyYWN0UXVldWVkU3luY2hyb25pemVyLnRyeUFjcXVpcmVTaGFyZWROYW5vcyhBYnN0cmFjdFF1ZXVlZFN5bmNocm9uaXplci5qYXZhOjEyMzkpCisgICAgICAgIGF0IGphdmEudXRpbC5jb25jdXJyZW50LlNlbWFwaG9yZS50cnlBY3F1aXJlKFNlbWFwaG9yZS5qYXZhOjM4MykKKyAgICAgICAgYXQgY29tLmludGVsbGlqLmRpYWdub3N0aWMuUGVyZm9ybWFuY2VXYXRjaGVyLmMoUGVyZm9ybWFuY2VXYXRjaGVyLmphdmE6MTU4KQorICAgICAgICBhdCBjb20uaW50ZWxsaWouZGlhZ25vc3RpYy5QZXJmb3JtYW5jZVdhdGNoZXIuYWNjZXNzJDEwMChQZXJmb3JtYW5jZVdhdGNoZXIuamF2YTo0MikKKyAgICAgICAgYXQgY29tLmludGVsbGlqLmRpYWdub3N0aWMuUGVyZm9ybWFuY2VXYXRjaGVyJDIucnVuKFBlcmZvcm1hbmNlV2F0Y2hlci5qYXZhOjExNikKKyAgICAgICAgYXQgamF2YS5sYW5nLlRocmVhZC5ydW4oVGhyZWFkLmphdmE6NjE5KQorCisiQXBwbGljYXRpb25JbXBsIHBvb2xlZCB0aHJlYWQiIHByaW89NCB0aWQ9MHgzNDQzNDQwMCBuaWQ9MHg4OTggd2FpdGluZyBvbiBjb25kaXRpb24gWzB4MzVmM2YwMDBdCisgICBqYXZhLmxhbmcuVGhyZWFkLlN0YXRlOiBUSU1FRF9XQUlUSU5HIChwYXJraW5nKQorICAgICAgICBhdCBzdW4ubWlzYy5VbnNhZmUucGFyayhOYXRpdmUgTWV0aG9kKQorICAgICAgICAtIHBhcmtpbmcgdG8gd2FpdCBmb3IgIDwweDA1MzM3ZTA4PiAoYSBqYXZhLnV0aWwuY29uY3VycmVudC5TeW5jaHJvbm91c1F1ZXVlJFRyYW5zZmVyU3RhY2spCisgICAgICAgIGF0IGphdmEudXRpbC5jb25jdXJyZW50LmxvY2tzLkxvY2tTdXBwb3J0LnBhcmtOYW5vcyhMb2NrU3VwcG9ydC5qYXZhOjE5OCkKKyAgICAgICAgYXQgamF2YS51dGlsLmNvbmN1cnJlbnQuU3luY2hyb25vdXNRdWV1ZSRUcmFuc2ZlclN0YWNrLmF3YWl0RnVsZmlsbChTeW5jaHJvbm91c1F1ZXVlLmphdmE6NDI0KQorICAgICAgICBhdCBqYXZhLnV0aWwuY29uY3VycmVudC5TeW5jaHJvbm91c1F1ZXVlJFRyYW5zZmVyU3RhY2sudHJhbnNmZXIoU3luY2hyb25vdXNRdWV1ZS5qYXZhOjMyMykKKyAgICAgICAgYXQgamF2YS51dGlsLmNvbmN1cnJlbnQuU3luY2hyb25vdXNRdWV1ZS5wb2xsKFN5bmNocm9ub3VzUXVldWUuamF2YTo4NzQpCisgICAgICAgIGF0IGphdmEudXRpbC5jb25jdXJyZW50LlRocmVhZFBvb2xFeGVjdXRvci5nZXRUYXNrKFRocmVhZFBvb2xFeGVjdXRvci5qYXZhOjk0NSkKKyAgICAgICAgYXQgamF2YS51dGlsLmNvbmN1cnJlbnQuVGhyZWFkUG9vbEV4ZWN1dG9yJFdvcmtlci5ydW4oVGhyZWFkUG9vbEV4ZWN1dG9yLmphdmE6OTA3KQorICAgICAgICBhdCBqYXZhLmxhbmcuVGhyZWFkLnJ1bihUaHJlYWQuamF2YTo2MTkpCisgICAgICAgIGF0IGNvbS5pbnRlbGxpai5vcGVuYXBpLmFwcGxpY2F0aW9uLmltcGwuQXBwbGljYXRpb25JbXBsJDEkMS5ydW4oQXBwbGljYXRpb25JbXBsLmphdmE6MTI1KQorCisiU3RvcmVSZWZyZXNoU3RhdHVzVGhyZWFkIiBkYWVtb24gcHJpbz0yIHRpZD0weDM0YzFlNDAwIG5pZD0weDFkYyB3YWl0aW5nIGZvciBtb25pdG9yIGVudHJ5IFsweDM1M2RmMDAwXQorICAgamF2YS5sYW5nLlRocmVhZC5TdGF0ZTogQkxPQ0tFRCAob24gb2JqZWN0IG1vbml0b3IpCisgICAgICAgIGF0IGNvbS5pbnRlbGxpai5vcGVuYXBpLnZmcy5pbXBsLmxvY2FsLkZpbGVXYXRjaGVyLmdldERpcnR5UGF0aHMoRmlsZVdhdGNoZXIuamF2YToxMTQpCisgICAgICAgIC0gd2FpdGluZyB0byBsb2NrIDwweDA1OTVhZTQwPiAoYSBqYXZhLmxhbmcuT2JqZWN0KQorICAgICAgICBhdCBjb20uaW50ZWxsaWoub3BlbmFwaS52ZnMuaW1wbC5sb2NhbC5Mb2NhbEZpbGVTeXN0ZW1JbXBsLmIoTG9jYWxGaWxlU3lzdGVtSW1wbC5qYXZhOjE4OSkKKyAgICAgICAgYXQgY29tLmludGVsbGlqLm9wZW5hcGkudmZzLmltcGwubG9jYWwuTG9jYWxGaWxlU3lzdGVtSW1wbC5hY2Nlc3MkMjAwKExvY2FsRmlsZVN5c3RlbUltcGwuamF2YTo0MykKKyAgICAgICAgYXQgY29tLmludGVsbGlqLm9wZW5hcGkudmZzLmltcGwubG9jYWwuTG9jYWxGaWxlU3lzdGVtSW1wbCRTdG9yZVJlZnJlc2hTdGF0dXNUaHJlYWQucnVuKExvY2FsRmlsZVN5c3RlbUltcGwuamF2YToyOTcpCisKKyJXYXRjaEZvckNoYW5nZXNUaHJlYWQiIHByaW89NiB0aWQ9MHgzNGE4NDgwMCBuaWQ9MHgxYzggd2FpdGluZyBmb3IgbW9uaXRvciBlbnRyeSBbMHgzNTJiZjAwMF0KKyAgIGphdmEubGFuZy5UaHJlYWQuU3RhdGU6IEJMT0NLRUQgKG9uIG9iamVjdCBtb25pdG9yKQorICAgICAgICBhdCBjb20uaW50ZWxsaWoub3BlbmFwaS52ZnMuaW1wbC5sb2NhbC5GaWxlV2F0Y2hlci5hKEZpbGVXYXRjaGVyLmphdmE6MTg1KQorICAgICAgICAtIHdhaXRpbmcgdG8gbG9jayA8MHgwNTk1YWU0MD4gKGEgamF2YS5sYW5nLk9iamVjdCkKKyAgICAgICAgYXQgY29tLmludGVsbGlqLm9wZW5hcGkudmZzLmltcGwubG9jYWwuRmlsZVdhdGNoZXIuYWNjZXNzJDcwMChGaWxlV2F0Y2hlci5qYXZhOjQ5KQorICAgICAgICBhdCBjb20uaW50ZWxsaWoub3BlbmFwaS52ZnMuaW1wbC5sb2NhbC5GaWxlV2F0Y2hlciRXYXRjaEZvckNoYW5nZXNUaHJlYWQucnVuKEZpbGVXYXRjaGVyLmphdmE6MjcxKQorCisiQVdULUV2ZW50UXVldWUtMSA5LjAuMyNJVS05NS40NzQsIGVhcDpmYWxzZSIgcHJpbz02IHRpZD0weDM0ZDUyMDAwIG5pZD0weGMxYyBydW5uYWJsZSBbMHgzNTQ3ZTAwMF0KKyAgIGphdmEubGFuZy5UaHJlYWQuU3RhdGU6IFJVTk5BQkxFCisgICAgICAgIGF0IGphdmEuaW8uRmlsZU91dHB1dFN0cmVhbS53cml0ZUJ5dGVzKE5hdGl2ZSBNZXRob2QpCisgICAgICAgIGF0IGphdmEuaW8uRmlsZU91dHB1dFN0cmVhbS53cml0ZShGaWxlT3V0cHV0U3RyZWFtLmphdmE6MjYwKQorICAgICAgICBhdCBqYXZhLmlvLkJ1ZmZlcmVkT3V0cHV0U3RyZWFtLmZsdXNoQnVmZmVyKEJ1ZmZlcmVkT3V0cHV0U3RyZWFtLmphdmE6NjUpCisgICAgICAgIGF0IGphdmEuaW8uQnVmZmVyZWRPdXRwdXRTdHJlYW0uZmx1c2goQnVmZmVyZWRPdXRwdXRTdHJlYW0uamF2YToxMjMpCisgICAgICAgIC0gbG9ja2VkIDwweDA1OTY2MWE4PiAoYSBqYXZhLmlvLkJ1ZmZlcmVkT3V0cHV0U3RyZWFtKQorICAgICAgICBhdCBzdW4ubmlvLmNzLlN0cmVhbUVuY29kZXIuaW1wbEZsdXNoKFN0cmVhbUVuY29kZXIuamF2YToyNzgpCisgICAgICAgIGF0IHN1bi5uaW8uY3MuU3RyZWFtRW5jb2Rlci5mbHVzaChTdHJlYW1FbmNvZGVyLmphdmE6MTIyKQorICAgICAgICAtIGxvY2tlZCA8MHgwNTk2NjFkMD4gKGEgamF2YS5pby5PdXRwdXRTdHJlYW1Xcml0ZXIpCisgICAgICAgIGF0IGphdmEuaW8uT3V0cHV0U3RyZWFtV3JpdGVyLmZsdXNoKE91dHB1dFN0cmVhbVdyaXRlci5qYXZhOjIxMikKKyAgICAgICAgYXQgamF2YS5pby5CdWZmZXJlZFdyaXRlci5mbHVzaChCdWZmZXJlZFdyaXRlci5qYXZhOjIzNikKKyAgICAgICAgLSBsb2NrZWQgPDB4MDU5NjYxZDA+IChhIGphdmEuaW8uT3V0cHV0U3RyZWFtV3JpdGVyKQorICAgICAgICBhdCBjb20uaW50ZWxsaWoub3BlbmFwaS52ZnMuaW1wbC5sb2NhbC5GaWxlV2F0Y2hlci5iKEZpbGVXYXRjaGVyLmphdmE6MzQ0KQorICAgICAgICBhdCBjb20uaW50ZWxsaWoub3BlbmFwaS52ZnMuaW1wbC5sb2NhbC5GaWxlV2F0Y2hlci5zZXRXYXRjaFJvb3RzKEZpbGVXYXRjaGVyLmphdmE6MTU5KQorICAgICAgICAtIGxvY2tlZCA8MHgwNTk1YWU0MD4gKGEgamF2YS5sYW5nLk9iamVjdCkKKyAgICAgICAgYXQgY29tLmludGVsbGlqLm9wZW5hcGkudmZzLmltcGwubG9jYWwuTG9jYWxGaWxlU3lzdGVtSW1wbCQyLnJ1bihMb2NhbEZpbGVTeXN0ZW1JbXBsLmphdmE6MjcyKQorICAgICAgICBhdCBjb20uaW50ZWxsaWoub3BlbmFwaS5hcHBsaWNhdGlvbi5pbXBsLkFwcGxpY2F0aW9uSW1wbC5ydW5SZWFkQWN0aW9uKEFwcGxpY2F0aW9uSW1wbC5qYXZhOjY5NykKKyAgICAgICAgYXQgY29tLmludGVsbGlqLm9wZW5hcGkudmZzLmltcGwubG9jYWwuTG9jYWxGaWxlU3lzdGVtSW1wbC5jKExvY2FsRmlsZVN5c3RlbUltcGwuamF2YToyNTUpCisgICAgICAgIGF0IGNvbS5pbnRlbGxpai5vcGVuYXBpLnZmcy5pbXBsLmxvY2FsLkxvY2FsRmlsZVN5c3RlbUltcGwucmVtb3ZlV2F0Y2hlZFJvb3RzKExvY2FsRmlsZVN5c3RlbUltcGwuamF2YTo0MDIpCisgICAgICAgIGF0IGNvbS5pbnRlbGxpai5vcGVuYXBpLnJvb3RzLmltcGwuUHJvamVjdFJvb3RNYW5hZ2VySW1wbC5kKFByb2plY3RSb290TWFuYWdlckltcGwuamF2YTo2NjkpCisgICAgICAgIGF0IGNvbS5pbnRlbGxpai5vcGVuYXBpLnJvb3RzLmltcGwuUHJvamVjdFJvb3RNYW5hZ2VySW1wbC5jKFByb2plY3RSb290TWFuYWdlckltcGwuamF2YTo1NDIpCisgICAgICAgIGF0IGNvbS5pbnRlbGxpai5vcGVuYXBpLnJvb3RzLmltcGwuUHJvamVjdFJvb3RNYW5hZ2VySW1wbC5hY2Nlc3MkMTAwKFByb2plY3RSb290TWFuYWdlckltcGwuamF2YTo3MCkKKyAgICAgICAgYXQgY29tLmludGVsbGlqLm9wZW5hcGkucm9vdHMuaW1wbC5Qcm9qZWN0Um9vdE1hbmFnZXJJbXBsJEJhdGNoU2Vzc2lvbi5maXJlQ2hhbmdlKFByb2plY3RSb290TWFuYWdlckltcGwuamF2YToxMzUpCisgICAgICAgIGF0IGNvbS5pbnRlbGxpai5vcGVuYXBpLnJvb3RzLmltcGwuUHJvamVjdFJvb3RNYW5hZ2VySW1wbCRCYXRjaFNlc3Npb24ucm9vdHNDaGFuZ2VkKFByb2plY3RSb290TWFuYWdlckltcGwuamF2YToxNDgpCisgICAgICAgIGF0IGNvbS5pbnRlbGxpai5vcGVuYXBpLnJvb3RzLmltcGwuUHJvamVjdFJvb3RNYW5hZ2VySW1wbC5tYWtlUm9vdHNDaGFuZ2UoUHJvamVjdFJvb3RNYW5hZ2VySW1wbC5qYXZhOjQ2OSkKKyAgICAgICAgYXQgY29tLmludGVsbGlqLm9wZW5hcGkubW9kdWxlLmltcGwuTW9kdWxlTWFuYWdlckltcGwuYShNb2R1bGVNYW5hZ2VySW1wbC5qYXZhOjg5NCkKKyAgICAgICAgYXQgY29tLmludGVsbGlqLm9wZW5hcGkubW9kdWxlLmltcGwuTW9kdWxlTWFuYWdlckltcGwuYWNjZXNzJDIwMDAoTW9kdWxlTWFuYWdlckltcGwuamF2YTo3MykKKyAgICAgICAgYXQgY29tLmludGVsbGlqLm9wZW5hcGkubW9kdWxlLmltcGwuTW9kdWxlTWFuYWdlckltcGwkTW9kdWxlTW9kZWxJbXBsLmNvbW1pdFdpdGhSdW5uYWJsZShNb2R1bGVNYW5hZ2VySW1wbC5qYXZhOjgwMCkKKyAgICAgICAgYXQgY29tLmludGVsbGlqLm9wZW5hcGkubW9kdWxlLmltcGwuTW9kdWxlTWFuYWdlckltcGwuY29tbWl0TW9kZWxXaXRoUnVubmFibGUoTW9kdWxlTWFuYWdlckltcGwuamF2YTo1NjcpCisgICAgICAgIGF0IGNvbS5pbnRlbGxpai5vcGVuYXBpLnJvb3RzLmltcGwuTW9kdWxlUm9vdE1hbmFnZXJJbXBsLm11bHRpQ29tbWl0KE1vZHVsZVJvb3RNYW5hZ2VySW1wbC5qYXZhOjMwNCkKKyAgICAgICAgYXQgY29tLmludGVsbGlqLm9wZW5hcGkucm9vdHMuaW1wbC5Qcm9qZWN0Um9vdE1hbmFnZXJJbXBsLm11bHRpQ29tbWl0KFByb2plY3RSb290TWFuYWdlckltcGwuamF2YToyNDIpCisgICAgICAgIGF0IGNvbS5pbnRlbGxpai5vcGVuYXBpLm1vZHVsZS5pbXBsLk1vZHVsZU1hbmFnZXJJbXBsJE1vZHVsZU1vZGVsSW1wbC5jb21taXQoTW9kdWxlTWFuYWdlckltcGwuamF2YTo3OTYpCisgICAgICAgIGF0IGNvbS5pbnRlbGxpai5pZGUudXRpbC5wcm9qZWN0V2l6YXJkLk1vZHVsZUJ1aWxkZXIuY3JlYXRlQW5kQ29tbWl0SWZOZWVkZWQoTW9kdWxlQnVpbGRlci5qYXZhOjE1MikKKyAgICAgICAgYXQgY29tLmludGVsbGlqLmlkZS51dGlsLnByb2plY3RXaXphcmQuTW9kdWxlQnVpbGRlciQyLmNvbXB1dGUoTW9kdWxlQnVpbGRlci5qYXZhOjIwMikKKyAgICAgICAgYXQgY29tLmludGVsbGlqLmlkZS51dGlsLnByb2plY3RXaXphcmQuTW9kdWxlQnVpbGRlciQyLmNvbXB1dGUoTW9kdWxlQnVpbGRlci5qYXZhOjE5OSkKKyAgICAgICAgYXQgY29tLmludGVsbGlqLm9wZW5hcGkuYXBwbGljYXRpb24uaW1wbC5BcHBsaWNhdGlvbkltcGwkMTEucnVuKEFwcGxpY2F0aW9uSW1wbC5qYXZhOjc3NCkKKyAgICAgICAgYXQgY29tLmludGVsbGlqLm9wZW5hcGkuYXBwbGljYXRpb24uaW1wbC5BcHBsaWNhdGlvbkltcGwucnVuV3JpdGVBY3Rpb24oQXBwbGljYXRpb25JbXBsLmphdmE6NzU0KQorICAgICAgICBhdCBjb20uaW50ZWxsaWoub3BlbmFwaS5hcHBsaWNhdGlvbi5pbXBsLkFwcGxpY2F0aW9uSW1wbC5ydW5Xcml0ZUFjdGlvbihBcHBsaWNhdGlvbkltcGwuamF2YTo3NzIpCisgICAgICAgIGF0IGNvbS5pbnRlbGxpai5pZGUudXRpbC5wcm9qZWN0V2l6YXJkLk1vZHVsZUJ1aWxkZXIuY29tbWl0TW9kdWxlKE1vZHVsZUJ1aWxkZXIuamF2YToxOTkpCisgICAgICAgIGF0IGNvbS5pbnRlbGxpai5pZGUudXRpbC5wcm9qZWN0V2l6YXJkLk1vZHVsZUJ1aWxkZXIuY29tbWl0KE1vZHVsZUJ1aWxkZXIuamF2YToxODYpCisgICAgICAgIGF0IGNvbS5pbnRlbGxpai5pZGUuaW1wbC5OZXdQcm9qZWN0VXRpbC5jcmVhdGVOZXdQcm9qZWN0KE5ld1Byb2plY3RVdGlsLmphdmE6MTM1KQorICAgICAgICBhdCBjb20uaW50ZWxsaWouaWRlLmFjdGlvbnMuTmV3UHJvamVjdEFjdGlvbi5hY3Rpb25QZXJmb3JtZWQoTmV3UHJvamVjdEFjdGlvbi5qYXZhOjI5KQorICAgICAgICBhdCBjb20uaW50ZWxsaWoub3BlbmFwaS53bS5pbXBsLndlbGNvbWVTY3JlZW4uV2VsY29tZVNjcmVlbiRBY3Rpb25Hcm91cERlc2NyaXB0b3IkMy5vblByZXNzKFdlbGNvbWVTY3JlZW4uamF2YToyMTUpCisgICAgICAgIGF0IGNvbS5pbnRlbGxpai5vcGVuYXBpLndtLmltcGwud2VsY29tZVNjcmVlbi5XZWxjb21lU2NyZWVuJEJ1dHRvbldpdGhFeHRlbnNpb24ub25QcmVzcyhXZWxjb21lU2NyZWVuLmphdmE6ODI5KQorICAgICAgICBhdCBjb20uaW50ZWxsaWoub3BlbmFwaS53bS5pbXBsLndlbGNvbWVTY3JlZW4uV2VsY29tZVNjcmVlbiRBY3Rpb25Hcm91cERlc2NyaXB0b3IkMi5tb3VzZUNsaWNrZWQoV2VsY29tZVNjcmVlbi5qYXZhOjE1MSkKKyAgICAgICAgYXQgamF2YS5hd3QuQ29tcG9uZW50LnByb2Nlc3NNb3VzZUV2ZW50KENvbXBvbmVudC5qYXZhOjYyNjYpCisgICAgICAgIGF0IGphdmF4LnN3aW5nLkpDb21wb25lbnQucHJvY2Vzc01vdXNlRXZlbnQoSkNvbXBvbmVudC5qYXZhOjMyNTUpCisgICAgICAgIGF0IGphdmEuYXd0LkNvbXBvbmVudC5wcm9jZXNzRXZlbnQoQ29tcG9uZW50LmphdmE6NjAyOCkKKyAgICAgICAgYXQgamF2YS5hd3QuQ29udGFpbmVyLnByb2Nlc3NFdmVudChDb250YWluZXIuamF2YToyMDQxKQorICAgICAgICBhdCBqYXZhLmF3dC5Db21wb25lbnQuZGlzcGF0Y2hFdmVudEltcGwoQ29tcG9uZW50LmphdmE6NDYzMCkKKyAgICAgICAgYXQgamF2YS5hd3QuQ29udGFpbmVyLmRpc3BhdGNoRXZlbnRJbXBsKENvbnRhaW5lci5qYXZhOjIwOTkpCisgICAgICAgIGF0IGphdmEuYXd0LkNvbXBvbmVudC5kaXNwYXRjaEV2ZW50KENvbXBvbmVudC5qYXZhOjQ0NjApCisgICAgICAgIGF0IGphdmEuYXd0LkxpZ2h0d2VpZ2h0RGlzcGF0Y2hlci5yZXRhcmdldE1vdXNlRXZlbnQoQ29udGFpbmVyLmphdmE6NDU3NCkKKyAgICAgICAgYXQgamF2YS5hd3QuTGlnaHR3ZWlnaHREaXNwYXRjaGVyLnByb2Nlc3NNb3VzZUV2ZW50KENvbnRhaW5lci5qYXZhOjQyNDcpCisgICAgICAgIGF0IGphdmEuYXd0LkxpZ2h0d2VpZ2h0RGlzcGF0Y2hlci5kaXNwYXRjaEV2ZW50KENvbnRhaW5lci5qYXZhOjQxNjgpCisgICAgICAgIGF0IGphdmEuYXd0LkNvbnRhaW5lci5kaXNwYXRjaEV2ZW50SW1wbChDb250YWluZXIuamF2YToyMDg1KQorICAgICAgICBhdCBqYXZhLmF3dC5XaW5kb3cuZGlzcGF0Y2hFdmVudEltcGwoV2luZG93LmphdmE6MjQ3NSkKKyAgICAgICAgYXQgamF2YS5hd3QuQ29tcG9uZW50LmRpc3BhdGNoRXZlbnQoQ29tcG9uZW50LmphdmE6NDQ2MCkKKyAgICAgICAgYXQgamF2YS5hd3QuRXZlbnRRdWV1ZS5kaXNwYXRjaEV2ZW50KEV2ZW50UXVldWUuamF2YTo1OTkpCisgICAgICAgIGF0IGNvbS5pbnRlbGxpai5pZGUuSWRlRXZlbnRRdWV1ZS5mKElkZUV2ZW50UXVldWUuamF2YTo2MjcpCisgICAgICAgIGF0IGNvbS5pbnRlbGxpai5pZGUuSWRlRXZlbnRRdWV1ZS5fZGlzcGF0Y2hFdmVudChJZGVFdmVudFF1ZXVlLmphdmE6NTA0KQorICAgICAgICBhdCBjb20uaW50ZWxsaWouaWRlLklkZUV2ZW50UXVldWUuYihJZGVFdmVudFF1ZXVlLmphdmE6NDA1KQorICAgICAgICBhdCBjb20uaW50ZWxsaWouaWRlLklkZUV2ZW50UXVldWUuZGlzcGF0Y2hFdmVudChJZGVFdmVudFF1ZXVlLmphdmE6MzY5KQorICAgICAgICBhdCBqYXZhLmF3dC5FdmVudERpc3BhdGNoVGhyZWFkLnB1bXBPbmVFdmVudEZvckZpbHRlcnMoRXZlbnREaXNwYXRjaFRocmVhZC5qYXZhOjI2OSkKKyAgICAgICAgYXQgamF2YS5hd3QuRXZlbnREaXNwYXRjaFRocmVhZC5wdW1wRXZlbnRzRm9yRmlsdGVyKEV2ZW50RGlzcGF0Y2hUaHJlYWQuamF2YToxODQpCisgICAgICAgIGF0IGphdmEuYXd0LkV2ZW50RGlzcGF0Y2hUaHJlYWQucHVtcEV2ZW50c0ZvckhpZXJhcmNoeShFdmVudERpc3BhdGNoVGhyZWFkLmphdmE6MTc0KQorICAgICAgICBhdCBqYXZhLmF3dC5FdmVudERpc3BhdGNoVGhyZWFkLnB1bXBFdmVudHMoRXZlbnREaXNwYXRjaFRocmVhZC5qYXZhOjE2OSkKKyAgICAgICAgYXQgamF2YS5hd3QuRXZlbnREaXNwYXRjaFRocmVhZC5wdW1wRXZlbnRzKEV2ZW50RGlzcGF0Y2hUaHJlYWQuamF2YToxNjEpCisgICAgICAgIGF0IGphdmEuYXd0LkV2ZW50RGlzcGF0Y2hUaHJlYWQucnVuKEV2ZW50RGlzcGF0Y2hUaHJlYWQuamF2YToxMjIpCisKKyJ0aW1lZCByZWZlcmVuY2UgZGlzcG9zZXIiIHByaW89MiB0aWQ9MHgzNDQ0NzQwMCBuaWQ9MHhlMTggd2FpdGluZyBvbiBjb25kaXRpb24gWzB4MzUzOGYwMDBdCisgICBqYXZhLmxhbmcuVGhyZWFkLlN0YXRlOiBUSU1FRF9XQUlUSU5HIChwYXJraW5nKQorICAgICAgICBhdCBzdW4ubWlzYy5VbnNhZmUucGFyayhOYXRpdmUgTWV0aG9kKQorICAgICAgICAtIHBhcmtpbmcgdG8gd2FpdCBmb3IgIDwweDA1NjA1ZWYwPiAoYSBqYXZhLnV0aWwuY29uY3VycmVudC5sb2Nrcy5BYnN0cmFjdFF1ZXVlZFN5bmNocm9uaXplciRDb25kaXRpb25PYmplY3QpCisgICAgICAgIGF0IGphdmEudXRpbC5jb25jdXJyZW50LmxvY2tzLkxvY2tTdXBwb3J0LnBhcmtOYW5vcyhMb2NrU3VwcG9ydC5qYXZhOjE5OCkKKyAgICAgICAgYXQgamF2YS51dGlsLmNvbmN1cnJlbnQubG9ja3MuQWJzdHJhY3RRdWV1ZWRTeW5jaHJvbml6ZXIkQ29uZGl0aW9uT2JqZWN0LmF3YWl0TmFub3MoQWJzdHJhY3RRdWV1ZWRTeW5jaHJvbml6ZXIuamF2YToxOTYzKQorICAgICAgICBhdCBqYXZhLnV0aWwuY29uY3VycmVudC5EZWxheVF1ZXVlLnRha2UoRGVsYXlRdWV1ZS5qYXZhOjE2NCkKKyAgICAgICAgYXQgamF2YS51dGlsLmNvbmN1cnJlbnQuU2NoZWR1bGVkVGhyZWFkUG9vbEV4ZWN1dG9yJERlbGF5ZWRXb3JrUXVldWUudGFrZShTY2hlZHVsZWRUaHJlYWRQb29sRXhlY3V0b3IuamF2YTo1ODMpCisgICAgICAgIGF0IGphdmEudXRpbC5jb25jdXJyZW50LlNjaGVkdWxlZFRocmVhZFBvb2xFeGVjdXRvciREZWxheWVkV29ya1F1ZXVlLnRha2UoU2NoZWR1bGVkVGhyZWFkUG9vbEV4ZWN1dG9yLmphdmE6NTc2KQorICAgICAgICBhdCBqYXZhLnV0aWwuY29uY3VycmVudC5UaHJlYWRQb29sRXhlY3V0b3IuZ2V0VGFzayhUaHJlYWRQb29sRXhlY3V0b3IuamF2YTo5NDcpCisgICAgICAgIGF0IGphdmEudXRpbC5jb25jdXJyZW50LlRocmVhZFBvb2xFeGVjdXRvciRXb3JrZXIucnVuKFRocmVhZFBvb2xFeGVjdXRvci5qYXZhOjkwNykKKyAgICAgICAgYXQgamF2YS5sYW5nLlRocmVhZC5ydW4oVGhyZWFkLmphdmE6NjE5KQorCisiUGVyaW9kaWMgdGFza3MgdGhyZWFkIiBwcmlvPTYgdGlkPTB4MzQ0Mzg0MDAgbmlkPTB4OTVjIHdhaXRpbmcgb24gY29uZGl0aW9uIFsweDM0OWNmMDAwXQorICAgamF2YS5sYW5nLlRocmVhZC5TdGF0ZTogVElNRURfV0FJVElORyAocGFya2luZykKKyAgICAgICAgYXQgc3VuLm1pc2MuVW5zYWZlLnBhcmsoTmF0aXZlIE1ldGhvZCkKKyAgICAgICAgLSBwYXJraW5nIHRvIHdhaXQgZm9yICA8MHgwNTMyN2ZjMD4gKGEgamF2YS51dGlsLmNvbmN1cnJlbnQubG9ja3MuQWJzdHJhY3RRdWV1ZWRTeW5jaHJvbml6ZXIkQ29uZGl0aW9uT2JqZWN0KQorICAgICAgICBhdCBqYXZhLnV0aWwuY29uY3VycmVudC5sb2Nrcy5Mb2NrU3VwcG9ydC5wYXJrTmFub3MoTG9ja1N1cHBvcnQuamF2YToxOTgpCisgICAgICAgIGF0IGphdmEudXRpbC5jb25jdXJyZW50LmxvY2tzLkFic3RyYWN0UXVldWVkU3luY2hyb25pemVyJENvbmRpdGlvbk9iamVjdC5hd2FpdE5hbm9zKEFic3RyYWN0UXVldWVkU3luY2hyb25pemVyLmphdmE6MTk2MykKKyAgICAgICAgYXQgamF2YS51dGlsLmNvbmN1cnJlbnQuRGVsYXlRdWV1ZS50YWtlKERlbGF5UXVldWUuamF2YToxNjQpCisgICAgICAgIGF0IGphdmEudXRpbC5jb25jdXJyZW50LlNjaGVkdWxlZFRocmVhZFBvb2xFeGVjdXRvciREZWxheWVkV29ya1F1ZXVlLnRha2UoU2NoZWR1bGVkVGhyZWFkUG9vbEV4ZWN1dG9yLmphdmE6NTgzKQorICAgICAgICBhdCBqYXZhLnV0aWwuY29uY3VycmVudC5TY2hlZHVsZWRUaHJlYWRQb29sRXhlY3V0b3IkRGVsYXllZFdvcmtRdWV1ZS50YWtlKFNjaGVkdWxlZFRocmVhZFBvb2xFeGVjdXRvci5qYXZhOjU3NikKKyAgICAgICAgYXQgamF2YS51dGlsLmNvbmN1cnJlbnQuVGhyZWFkUG9vbEV4ZWN1dG9yLmdldFRhc2soVGhyZWFkUG9vbEV4ZWN1dG9yLmphdmE6OTQ3KQorICAgICAgICBhdCBqYXZhLnV0aWwuY29uY3VycmVudC5UaHJlYWRQb29sRXhlY3V0b3IkV29ya2VyLnJ1bihUaHJlYWRQb29sRXhlY3V0b3IuamF2YTo5MDcpCisgICAgICAgIGF0IGphdmEubGFuZy5UaHJlYWQucnVuKFRocmVhZC5qYXZhOjYxOSkKKworIkFXVC1TaHV0ZG93biIgcHJpbz02IHRpZD0weDM0M2UwYzAwIG5pZD0weGNlOCBpbiBPYmplY3Qud2FpdCgpIFsweDM1MjZmMDAwXQorICAgamF2YS5sYW5nLlRocmVhZC5TdGF0ZTogV0FJVElORyAob24gb2JqZWN0IG1vbml0b3IpCisgICAgICAgIGF0IGphdmEubGFuZy5PYmplY3Qud2FpdChOYXRpdmUgTWV0aG9kKQorICAgICAgICBhdCBqYXZhLmxhbmcuT2JqZWN0LndhaXQoT2JqZWN0LmphdmE6NDg1KQorICAgICAgICBhdCBzdW4uYXd0LkFXVEF1dG9TaHV0ZG93bi5ydW4oQVdUQXV0b1NodXRkb3duLmphdmE6MjU5KQorICAgICAgICAtIGxvY2tlZCA8MHgwNTJjNzljMD4gKGEgamF2YS5sYW5nLk9iamVjdCkKKyAgICAgICAgYXQgamF2YS5sYW5nLlRocmVhZC5ydW4oVGhyZWFkLmphdmE6NjE5KQorCisiU29ja2V0TGlzdGVuZXJUaHJlYWQiIHByaW89MiB0aWQ9MHgzNDhkZjQwMCBuaWQ9MHhjZGMgcnVubmFibGUgWzB4MzUyMWYwMDBdCisgICBqYXZhLmxhbmcuVGhyZWFkLlN0YXRlOiBSVU5OQUJMRQorICAgICAgICBhdCBqYXZhLm5ldC5QbGFpbkRhdGFncmFtU29ja2V0SW1wbC5yZWNlaXZlMChOYXRpdmUgTWV0aG9kKQorICAgICAgICAtIGxvY2tlZCA8MHgwNTJjYTE5MD4gKGEgamF2YS5uZXQuUGxhaW5EYXRhZ3JhbVNvY2tldEltcGwpCisgICAgICAgIGF0IGphdmEubmV0LlBsYWluRGF0YWdyYW1Tb2NrZXRJbXBsLnJlY2VpdmUoUGxhaW5EYXRhZ3JhbVNvY2tldEltcGwuamF2YToxMzYpCisgICAgICAgIC0gbG9ja2VkIDwweDA1MmNhMTkwPiAoYSBqYXZhLm5ldC5QbGFpbkRhdGFncmFtU29ja2V0SW1wbCkKKyAgICAgICAgYXQgamF2YS5uZXQuRGF0YWdyYW1Tb2NrZXQucmVjZWl2ZShEYXRhZ3JhbVNvY2tldC5qYXZhOjcxMikKKyAgICAgICAgLSBsb2NrZWQgPDB4MDUyY2ExZDA+IChhIGphdmEubmV0LkRhdGFncmFtUGFja2V0KQorICAgICAgICAtIGxvY2tlZCA8MHgwNTJjYTFmMD4gKGEgamF2YS5uZXQuTXVsdGljYXN0U29ja2V0KQorICAgICAgICBhdCBjb20uaW50ZWxsaWouYS5lLmEuZS5hKGUuamF2YTo1NykKKyAgICAgICAgYXQgY29tLmludGVsbGlqLmEuZS5hLmYucnVuKGYuamF2YToyNSkKKworIlNvY2tldExpc3RlbmVyVGhyZWFkIiBwcmlvPTIgdGlkPTB4MzQ3ODM4MDAgbmlkPTB4Y2Q4IHJ1bm5hYmxlIFsweDM1MWNmMDAwXQorICAgamF2YS5sYW5nLlRocmVhZC5TdGF0ZTogUlVOTkFCTEUKKyAgICAgICAgYXQgamF2YS5uZXQuUGxhaW5EYXRhZ3JhbVNvY2tldEltcGwucmVjZWl2ZTAoTmF0aXZlIE1ldGhvZCkKKyAgICAgICAgLSBsb2NrZWQgPDB4MDUyY2M5ZTA+IChhIGphdmEubmV0LlBsYWluRGF0YWdyYW1Tb2NrZXRJbXBsKQorICAgICAgICBhdCBqYXZhLm5ldC5QbGFpbkRhdGFncmFtU29ja2V0SW1wbC5yZWNlaXZlKFBsYWluRGF0YWdyYW1Tb2NrZXRJbXBsLmphdmE6MTM2KQorICAgICAgICAtIGxvY2tlZCA8MHgwNTJjYzllMD4gKGEgamF2YS5uZXQuUGxhaW5EYXRhZ3JhbVNvY2tldEltcGwpCisgICAgICAgIGF0IGphdmEubmV0LkRhdGFncmFtU29ja2V0LnJlY2VpdmUoRGF0YWdyYW1Tb2NrZXQuamF2YTo3MTIpCisgICAgICAgIC0gbG9ja2VkIDwweDA1MmNjYTIwPiAoYSBqYXZhLm5ldC5EYXRhZ3JhbVBhY2tldCkKKyAgICAgICAgLSBsb2NrZWQgPDB4MDUyY2NhNDA+IChhIGphdmEubmV0LkRhdGFncmFtU29ja2V0KQorICAgICAgICBhdCBjb20uaW50ZWxsaWouYS5lLmEuZS5hKGUuamF2YTo1NykKKyAgICAgICAgYXQgY29tLmludGVsbGlqLmEuZS5hLmYucnVuKGYuamF2YToyNSkKKworIk1lc3NhZ2VEZWxpdmVyeVRocmVhZCIgcHJpbz02IHRpZD0weDM0NzkzNDAwIG5pZD0weGNkNCBpbiBPYmplY3Qud2FpdCgpIFsweDM1MTdmMDAwXQorICAgamF2YS5sYW5nLlRocmVhZC5TdGF0ZTogV0FJVElORyAob24gb2JqZWN0IG1vbml0b3IpCisgICAgICAgIGF0IGphdmEubGFuZy5PYmplY3Qud2FpdChOYXRpdmUgTWV0aG9kKQorICAgICAgICAtIHdhaXRpbmcgb24gPDB4MDUyY2NhZjA+IChhIGphdmEubGFuZy5PYmplY3QpCisgICAgICAgIGF0IGphdmEubGFuZy5PYmplY3Qud2FpdChPYmplY3QuamF2YTo0ODUpCisgICAgICAgIGF0IGNvbS5pbnRlbGxpai5hLmUuaS5ydW4oaS5qYXZhOjI2KQorICAgICAgICAtIGxvY2tlZCA8MHgwNTJjY2FmMD4gKGEgamF2YS5sYW5nLk9iamVjdCkKKworIkFXVC1XaW5kb3dzIiBkYWVtb24gcHJpbz02IHRpZD0weDM0NDI0ODAwIG5pZD0weGI4OCBydW5uYWJsZSBbMHgzNGY5ZjAwMF0KKyAgIGphdmEubGFuZy5UaHJlYWQuU3RhdGU6IFJVTk5BQkxFCisgICAgICAgIGF0IHN1bi5hd3Qud2luZG93cy5XVG9vbGtpdC5ldmVudExvb3AoTmF0aXZlIE1ldGhvZCkKKyAgICAgICAgYXQgc3VuLmF3dC53aW5kb3dzLldUb29sa2l0LnJ1bihXVG9vbGtpdC5qYXZhOjI5MSkKKyAgICAgICAgYXQgamF2YS5sYW5nLlRocmVhZC5ydW4oVGhyZWFkLmphdmE6NjE5KQorCisiSmF2YTJEIERpc3Bvc2VyIiBkYWVtb24gcHJpbz0xMCB0aWQ9MHgzNDhlNDQwMCBuaWQ9MHhiNjggaW4gT2JqZWN0LndhaXQoKSBbMHgzNGVmZjAwMF0KKyAgIGphdmEubGFuZy5UaHJlYWQuU3RhdGU6IFdBSVRJTkcgKG9uIG9iamVjdCBtb25pdG9yKQorICAgICAgICBhdCBqYXZhLmxhbmcuT2JqZWN0LndhaXQoTmF0aXZlIE1ldGhvZCkKKyAgICAgICAgYXQgamF2YS5sYW5nLnJlZi5SZWZlcmVuY2VRdWV1ZS5yZW1vdmUoUmVmZXJlbmNlUXVldWUuamF2YToxMTgpCisgICAgICAgIC0gbG9ja2VkIDwweDA1MmNjYmM4PiAoYSBqYXZhLmxhbmcucmVmLlJlZmVyZW5jZVF1ZXVlJExvY2spCisgICAgICAgIGF0IGphdmEubGFuZy5yZWYuUmVmZXJlbmNlUXVldWUucmVtb3ZlKFJlZmVyZW5jZVF1ZXVlLmphdmE6MTM0KQorICAgICAgICBhdCBzdW4uamF2YTJkLkRpc3Bvc2VyLnJ1bihEaXNwb3Nlci5qYXZhOjEyNSkKKyAgICAgICAgYXQgamF2YS5sYW5nLlRocmVhZC5ydW4oVGhyZWFkLmphdmE6NjE5KQorCisiTG9jayB0aHJlYWQiIHByaW89MiB0aWQ9MHgzNDg3NTQwMCBuaWQ9MHg3ODAgcnVubmFibGUgWzB4MzRhMWYwMDBdCisgICBqYXZhLmxhbmcuVGhyZWFkLlN0YXRlOiBSVU5OQUJMRQorICAgICAgICBhdCBqYXZhLm5ldC5QbGFpblNvY2tldEltcGwuc29ja2V0QWNjZXB0KE5hdGl2ZSBNZXRob2QpCisgICAgICAgIGF0IGphdmEubmV0LlBsYWluU29ja2V0SW1wbC5hY2NlcHQoUGxhaW5Tb2NrZXRJbXBsLmphdmE6MzkwKQorICAgICAgICAtIGxvY2tlZCA8MHgwNTIzY2MzMD4gKGEgamF2YS5uZXQuU29ja3NTb2NrZXRJbXBsKQorICAgICAgICBhdCBqYXZhLm5ldC5TZXJ2ZXJTb2NrZXQuaW1wbEFjY2VwdChTZXJ2ZXJTb2NrZXQuamF2YTo0NTMpCisgICAgICAgIGF0IGphdmEubmV0LlNlcnZlclNvY2tldC5hY2NlcHQoU2VydmVyU29ja2V0LmphdmE6NDIxKQorICAgICAgICBhdCBjb20uaW50ZWxsaWouaWRlYS5Tb2NrZXRMb2NrJE15UnVubmFibGUucnVuKFNvY2tldExvY2suamF2YToxOTEpCisgICAgICAgIGF0IGphdmEubGFuZy5UaHJlYWQucnVuKFRocmVhZC5qYXZhOjYxOSkKKworInRpbWVkIHJlZmVyZW5jZSBkaXNwb3NlciIgcHJpbz0yIHRpZD0weDM0NzZlNDAwIG5pZD0weGFjNCB3YWl0aW5nIG9uIGNvbmRpdGlvbiBbMHgzNDk3ZjAwMF0KKyAgIGphdmEubGFuZy5UaHJlYWQuU3RhdGU6IFRJTUVEX1dBSVRJTkcgKHBhcmtpbmcpCisgICAgICAgIGF0IHN1bi5taXNjLlVuc2FmZS5wYXJrKE5hdGl2ZSBNZXRob2QpCisgICAgICAgIC0gcGFya2luZyB0byB3YWl0IGZvciAgPDB4MDUxZTVlZTg+IChhIGphdmEudXRpbC5jb25jdXJyZW50LmxvY2tzLkFic3RyYWN0UXVldWVkU3luY2hyb25pemVyJENvbmRpdGlvbk9iamVjdCkKKyAgICAgICAgYXQgamF2YS51dGlsLmNvbmN1cnJlbnQubG9ja3MuTG9ja1N1cHBvcnQucGFya05hbm9zKExvY2tTdXBwb3J0LmphdmE6MTk4KQorICAgICAgICBhdCBqYXZhLnV0aWwuY29uY3VycmVudC5sb2Nrcy5BYnN0cmFjdFF1ZXVlZFN5bmNocm9uaXplciRDb25kaXRpb25PYmplY3QuYXdhaXROYW5vcyhBYnN0cmFjdFF1ZXVlZFN5bmNocm9uaXplci5qYXZhOjE5NjMpCisgICAgICAgIGF0IGphdmEudXRpbC5jb25jdXJyZW50LkRlbGF5UXVldWUudGFrZShEZWxheVF1ZXVlLmphdmE6MTY0KQorICAgICAgICBhdCBqYXZhLnV0aWwuY29uY3VycmVudC5TY2hlZHVsZWRUaHJlYWRQb29sRXhlY3V0b3IkRGVsYXllZFdvcmtRdWV1ZS50YWtlKFNjaGVkdWxlZFRocmVhZFBvb2xFeGVjdXRvci5qYXZhOjU4MykKKyAgICAgICAgYXQgamF2YS51dGlsLmNvbmN1cnJlbnQuU2NoZWR1bGVkVGhyZWFkUG9vbEV4ZWN1dG9yJERlbGF5ZWRXb3JrUXVldWUudGFrZShTY2hlZHVsZWRUaHJlYWRQb29sRXhlY3V0b3IuamF2YTo1NzYpCisgICAgICAgIGF0IGphdmEudXRpbC5jb25jdXJyZW50LlRocmVhZFBvb2xFeGVjdXRvci5nZXRUYXNrKFRocmVhZFBvb2xFeGVjdXRvci5qYXZhOjk0NykKKyAgICAgICAgYXQgamF2YS51dGlsLmNvbmN1cnJlbnQuVGhyZWFkUG9vbEV4ZWN1dG9yJFdvcmtlci5ydW4oVGhyZWFkUG9vbEV4ZWN1dG9yLmphdmE6OTA3KQorICAgICAgICBhdCBqYXZhLmxhbmcuVGhyZWFkLnJ1bihUaHJlYWQuamF2YTo2MTkpCisKKyJFeGU0SlN0YXJ0dXBUaHJlYWQiIGRhZW1vbiBwcmlvPTYgdGlkPTB4MzQ0MjA4MDAgbmlkPTB4YWMwIHdhaXRpbmcgb24gY29uZGl0aW9uIFsweDM0NzJmMDAwXQorICAgamF2YS5sYW5nLlRocmVhZC5TdGF0ZTogVElNRURfV0FJVElORyAoc2xlZXBpbmcpCisgICAgICAgIGF0IGphdmEubGFuZy5UaHJlYWQuc2xlZXAoTmF0aXZlIE1ldGhvZCkKKyAgICAgICAgYXQgY29tLmV4ZTRqLkNvbnRyb2xsZXIkU3RhcnR1cFRocmVhZC5ydW4oVW5rbm93biBTb3VyY2UpCisKKyJMb3cgTWVtb3J5IERldGVjdG9yIiBkYWVtb24gcHJpbz02IHRpZD0weDM0M2YyNDAwIG5pZD0weGE5YyBydW5uYWJsZSBbMHgwMDAwMDAwMF0KKyAgIGphdmEubGFuZy5UaHJlYWQuU3RhdGU6IFJVTk5BQkxFCisKKyJDb21waWxlclRocmVhZDAiIGRhZW1vbiBwcmlvPTEwIHRpZD0weDM0M2VjMDAwIG5pZD0weGE5OCB3YWl0aW5nIG9uIGNvbmRpdGlvbiBbMHgwMDAwMDAwMF0KKyAgIGphdmEubGFuZy5UaHJlYWQuU3RhdGU6IFJVTk5BQkxFCisKKyJBdHRhY2ggTGlzdGVuZXIiIGRhZW1vbiBwcmlvPTEwIHRpZD0weDM0M2VhODAwIG5pZD0weGE5NCB3YWl0aW5nIG9uIGNvbmRpdGlvbiBbMHgwMDAwMDAwMF0KKyAgIGphdmEubGFuZy5UaHJlYWQuU3RhdGU6IFJVTk5BQkxFCisKKyJTaWduYWwgRGlzcGF0Y2hlciIgZGFlbW9uIHByaW89MTAgdGlkPTB4MzQzZTk0MDAgbmlkPTB4YTkwIHJ1bm5hYmxlIFsweDAwMDAwMDAwXQorICAgamF2YS5sYW5nLlRocmVhZC5TdGF0ZTogUlVOTkFCTEUKKworIkZpbmFsaXplciIgZGFlbW9uIHByaW89OCB0aWQ9MHgzNDNkYTAwMCBuaWQ9MHhhNzggaW4gT2JqZWN0LndhaXQoKSBbMHgzNDU0ZjAwMF0KKyAgIGphdmEubGFuZy5UaHJlYWQuU3RhdGU6IFdBSVRJTkcgKG9uIG9iamVjdCBtb25pdG9yKQorICAgICAgICBhdCBqYXZhLmxhbmcuT2JqZWN0LndhaXQoTmF0aXZlIE1ldGhvZCkKKyAgICAgICAgYXQgamF2YS5sYW5nLnJlZi5SZWZlcmVuY2VRdWV1ZS5yZW1vdmUoUmVmZXJlbmNlUXVldWUuamF2YToxMTgpCisgICAgICAgIC0gbG9ja2VkIDwweDA1MWMwNDc4PiAoYSBqYXZhLmxhbmcucmVmLlJlZmVyZW5jZVF1ZXVlJExvY2spCisgICAgICAgIGF0IGphdmEubGFuZy5yZWYuUmVmZXJlbmNlUXVldWUucmVtb3ZlKFJlZmVyZW5jZVF1ZXVlLmphdmE6MTM0KQorICAgICAgICBhdCBqYXZhLmxhbmcucmVmLkZpbmFsaXplciRGaW5hbGl6ZXJUaHJlYWQucnVuKEZpbmFsaXplci5qYXZhOjE1OSkKKworIlJlZmVyZW5jZSBIYW5kbGVyIiBkYWVtb24gcHJpbz0xMCB0aWQ9MHgzNDNkNTQwMCBuaWQ9MHhhNzQgaW4gT2JqZWN0LndhaXQoKSBbMHgzNDRmZjAwMF0KKyAgIGphdmEubGFuZy5UaHJlYWQuU3RhdGU6IFdBSVRJTkcgKG9uIG9iamVjdCBtb25pdG9yKQorICAgICAgICBhdCBqYXZhLmxhbmcuT2JqZWN0LndhaXQoTmF0aXZlIE1ldGhvZCkKKyAgICAgICAgYXQgamF2YS5sYW5nLk9iamVjdC53YWl0KE9iamVjdC5qYXZhOjQ4NSkKKyAgICAgICAgYXQgamF2YS5sYW5nLnJlZi5SZWZlcmVuY2UkUmVmZXJlbmNlSGFuZGxlci5ydW4oUmVmZXJlbmNlLmphdmE6MTE2KQorICAgICAgICAtIGxvY2tlZCA8MHgwNTFjMDBhOD4gKGEgamF2YS5sYW5nLnJlZi5SZWZlcmVuY2UkTG9jaykKKworIm1haW4iIHByaW89NiB0aWQ9MHgwMDNjN2MwMCBuaWQ9MHg5NDQgd2FpdGluZyBvbiBjb25kaXRpb24gWzB4MDAwMDAwMDBdCisgICBqYXZhLmxhbmcuVGhyZWFkLlN0YXRlOiBSVU5OQUJMRQorCisiVk0gVGhyZWFkIiBwcmlvPTEwIHRpZD0weDM0M2QxNDAwIG5pZD0weGE3MCBydW5uYWJsZQorCisiVk0gUGVyaW9kaWMgVGFzayBUaHJlYWQiIHByaW89MTAgdGlkPTB4MzQ0MGRjMDAgbmlkPTB4YWJjIHdhaXRpbmcgb24gY29uZGl0aW9uCisKK0pOSSBnbG9iYWwgcmVmZXJlbmNlczogMjc2NApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS92ZnMvY2hhbmdlcy9Qc2lDaGFuZ2VzVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3Zmcy9jaGFuZ2VzL1BzaUNoYW5nZXNUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWVlZDViMwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS92ZnMvY2hhbmdlcy9Qc2lDaGFuZ2VzVGVzdC5qYXZhCkBAIC0wLDAgKzEsMTMgQEAKK3B1YmxpYyBjbGFzcyBQc2lDaGFuZ2VzVGVzdCB7CisgIHByaXZhdGUgaW50IGE7CisgIHByaXZhdGUgaW50IGI7CisKKyAgUHNpQ2hhbmdlc1Rlc3QoKSB7CisgIH0KKworICB2b2lkIGZvbygpIHsKKyAgfQorCisgIHZvaWQgYmFyKCkgeworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3Zmcy9jaGFuZ2VzL1BzaUNoYW5nZXNUZXN0X2NoYW5nZWQuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS92ZnMvY2hhbmdlcy9Qc2lDaGFuZ2VzVGVzdF9jaGFuZ2VkLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDFiNjMyNAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS92ZnMvY2hhbmdlcy9Qc2lDaGFuZ2VzVGVzdF9jaGFuZ2VkLmphdmEKQEAgLTAsMCArMSwxNSBAQAorcHVibGljIGNsYXNzIFBzaUNoYW5nZXNUZXN0IHsKKyAgcHJvdGVjdGVkIGludCBhOworICBwcml2YXRlIGludCBjOworCisgIFBzaUNoYW5nZXNUZXN0KCkgeworICAgIGludCBpID0gMDsKKyAgfQorCisgIHZvaWQgZm9vKCkgeworICAgIGludCBpID0gMDsKKyAgfQorCisgIHZvaWQgYmFyMigpIHsKKyAgfSAgCit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3Zmcy9jaGFuZ2VzL3Jlc3VsdHMvZmllbGRzLnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS92ZnMvY2hhbmdlcy9yZXN1bHRzL2ZpZWxkcy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGI0ZWNlNAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS92ZnMvY2hhbmdlcy9yZXN1bHRzL2ZpZWxkcy50eHQKQEAgLTAsMCArMSwzIEBACithIDogTW9kaWZpZWQKK2IgOiBEZWxldGVkCitjIDogQWRkZWQKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvdmZzL2NoYW5nZXMvcmVzdWx0cy9tZXRob2RzLnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS92ZnMvY2hhbmdlcy9yZXN1bHRzL21ldGhvZHMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNlOTM1NzMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdERhdGEvdmZzL2NoYW5nZXMvcmVzdWx0cy9tZXRob2RzLnR4dApAQCAtMCwwICsxLDQgQEAKK1BzaUNoYW5nZXNUZXN0IDogTW9kaWZpZWQKK2ZvbyA6IE1vZGlmaWVkCitiYXIgOiBEZWxldGVkCitiYXIyIDogQWRkZWQKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS92ZnMvZmluZEZpbGVCeVVybC8xLnR4dCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS92ZnMvZmluZEZpbGVCeVVybC8xLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNzZlNzg5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3Zmcy9maW5kRmlsZUJ5VXJsLzEudHh0CkBAIC0wLDAgKzEgQEAKK3Rlc3QgdGV4dApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS92ZnMvZmluZEZpbGVCeVVybC90ZXN0LnppcCBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS92ZnMvZmluZEZpbGVCeVVybC90ZXN0LnppcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNjAyMWZiCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3Zmcy9maW5kRmlsZUJ5VXJsL3Rlc3QuemlwCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS92ZnMvcmVsYXRpdmVQYXRoL3N1YkRpci9zdWJTdWJEaXIvZW1wdHkudHh0IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3REYXRhL3Zmcy9yZWxhdGl2ZVBhdGgvc3ViRGlyL3N1YlN1YkRpci9lbXB0eS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDEzZWQwZAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0RGF0YS92ZnMvcmVsYXRpdmVQYXRoL3N1YkRpci9zdWJTdWJEaXIvZW1wdHkudHh0CkBAIC0wLDAgKzEgQEAKK0VtcHR5IGZpbGUKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovSmF2YVRlc3RVdGlsLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovSmF2YVRlc3RVdGlsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDNlMzhlMAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9KYXZhVGVzdFV0aWwuamF2YQpAQCAtMCwwICsxLDY5IEBACisvKgorICogQ29weXJpZ2h0IDIwMDAtMjAxMiBKZXRCcmFpbnMgcy5yLm8uCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworcGFja2FnZSBjb20uaW50ZWxsaWo7CisKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS5hcHBsaWNhdGlvbi5BcHBsaWNhdGlvbk1hbmFnZXI7CitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkuYXBwbGljYXRpb24uUGF0aE1hbmFnZXI7CitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkuYXBwbGljYXRpb24uZXguUGF0aE1hbmFnZXJFeDsKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS5wcm9qZWN0Um9vdHMuUHJvamVjdEpka1RhYmxlOworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLnByb2plY3RSb290cy5TZGs7CitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkucHJvamVjdFJvb3RzLmltcGwuSmF2YUF3YXJlUHJvamVjdEpka1RhYmxlSW1wbDsKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS5wcm9qZWN0Um9vdHMuaW1wbC5Qcm9qZWN0SmRrSW1wbDsKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS51dGlsLnRleHQuU3RyaW5nVXRpbDsKKworLyoqCisgKiBAYXV0aG9yIHlvbGUKKyAqIEBhdXRob3IgS29uc3RhbnRpbiBCdWxlbmtvdgorICovCitwdWJsaWMgY2xhc3MgSmF2YVRlc3RVdGlsIHsKKworICBwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRKYXZhVGVzdERhdGFQYXRoKCkgeworICAgIHJldHVybiBQYXRoTWFuYWdlckV4LmdldFRlc3REYXRhUGF0aCgpOworICB9CisKKyAgcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0UmVsYXRpdmVKYXZhVGVzdERhdGFQYXRoKCkgeworICAgIGZpbmFsIFN0cmluZyBhYnNvbHV0ZSA9IGdldEphdmFUZXN0RGF0YVBhdGgoKTsKKyAgICByZXR1cm4gU3RyaW5nVXRpbC50cmltU3RhcnQoYWJzb2x1dGUsIFBhdGhNYW5hZ2VyLmdldEhvbWVQYXRoKCkpOworICB9CisKKyAgcHVibGljIHN0YXRpYyB2b2lkIHNldHVwVGVzdEpESygpIHsKKyAgICBBcHBsaWNhdGlvbk1hbmFnZXIuZ2V0QXBwbGljYXRpb24oKS5ydW5Xcml0ZUFjdGlvbihuZXcgUnVubmFibGUoKSB7CisgICAgICBAT3ZlcnJpZGUKKyAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKKyAgICAgICAgU2RrIGpkayA9IFByb2plY3RKZGtUYWJsZS5nZXRJbnN0YW5jZSgpLmZpbmRKZGsoIkpESyIpOworICAgICAgICBpZiAoamRrICE9IG51bGwpIHsKKyAgICAgICAgICBQcm9qZWN0SmRrVGFibGUuZ2V0SW5zdGFuY2UoKS5yZW1vdmVKZGsoamRrKTsKKyAgICAgICAgfQorCisgICAgICAgIFByb2plY3RKZGtUYWJsZS5nZXRJbnN0YW5jZSgpLmFkZEpkayhnZXRUZXN0SmRrKCkpOworICAgICAgfQorICAgIH0pOworICB9CisKKyAgcHJpdmF0ZSBzdGF0aWMgU2RrIGdldFRlc3RKZGsoKSB7CisgICAgdHJ5IHsKKyAgICAgIFByb2plY3RKZGtJbXBsIGpkayA9IChQcm9qZWN0SmRrSW1wbClKYXZhQXdhcmVQcm9qZWN0SmRrVGFibGVJbXBsLmdldEluc3RhbmNlRXgoKS5nZXRJbnRlcm5hbEpkaygpLmNsb25lKCk7CisgICAgICBqZGsuc2V0TmFtZSgiSkRLIik7CisgICAgICByZXR1cm4gamRrOworICAgIH0KKyAgICBjYXRjaCAoQ2xvbmVOb3RTdXBwb3J0ZWRFeGNlcHRpb24gZSkgeworICAgICAgLy9MT0cuZXJyb3IoZSk7CisgICAgICByZXR1cm4gbnVsbDsKKyAgICB9CisgIH0KKworCit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovVGVzdENsYXNzZXNGaWx0ZXJUZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovVGVzdENsYXNzZXNGaWx0ZXJUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmEwMGU3NgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9UZXN0Q2xhc3Nlc0ZpbHRlclRlc3QuamF2YQpAQCAtMCwwICsxLDEyNSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNCBKZXRCcmFpbnMgcy5yLm8uIEFsbCAgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIC1SZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqCisgKiAtUmVkaXN0cmlidXRpb24gaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y3QgdGhlIGFib3ZlIGNvcHlyaWdodAorICogIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIE5laXRoZXIgdGhlIG5hbWUgb2YgSmV0QnJhaW5zIG9yIEludGVsbGlKIElERUEKKyAqIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBwcm92aWRlZCAiQVMgSVMsIiB3aXRob3V0IGEgd2FycmFudHkgb2YgYW55IGtpbmQuIEFMTAorICogRVhQUkVTUyBPUiBJTVBMSUVEIENPTkRJVElPTlMsIFJFUFJFU0VOVEFUSU9OUyBBTkQgV0FSUkFOVElFUywgSU5DTFVESU5HCisgKiBBTlkgSU1QTElFRCBXQVJSQU5UWSBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBPUiBOT04tSU5GUklOR0VNRU5ULCBBUkUgSEVSRUJZIEVYQ0xVREVELiBKRVRCUkFJTlMgQU5EIElUUyBMSUNFTlNPUlMgU0hBTEwgTk9UCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBEQU1BR0VTIE9SIExJQUJJTElUSUVTIFNVRkZFUkVEIEJZIExJQ0VOU0VFIEFTIEEgUkVTVUxUCisgKiBPRiBPUiBSRUxBVElORyBUTyBVU0UsIE1PRElGSUNBVElPTiBPUiBESVNUUklCVVRJT04gT0YgVEhFIFNPRlRXQVJFIE9SIElUUworICogREVSSVZBVElWRVMuIElOIE5PIEVWRU5UIFdJTEwgSkVUQlJBSU5TIE9SIElUUyBMSUNFTlNPUlMgQkUgTElBQkxFIEZPUiBBTlkgTE9TVAorICogUkVWRU5VRSwgUFJPRklUIE9SIERBVEEsIE9SIEZPUiBESVJFQ1QsIElORElSRUNULCBTUEVDSUFMLCBDT05TRVFVRU5USUFMLAorICogSU5DSURFTlRBTCBPUiBQVU5JVElWRSBEQU1BR0VTLCBIT1dFVkVSIENBVVNFRCBBTkQgUkVHQVJETEVTUyBPRiBUSEUgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIEFSSVNJTkcgT1VUIE9GIFRIRSBVU0UgT0YgT1IgSU5BQklMSVRZIFRPIFVTRSBTT0ZUV0FSRSwgRVZFTgorICogSUYgSkVUQlJBSU5TIEhBUyBCRUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4KKyAqCisgKi8KK3BhY2thZ2UgY29tLmludGVsbGlqOworCitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkuZGlhZ25vc3RpYy5Mb2dnZXI7CitpbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOworCitpbXBvcnQgamF2YS5pby5CeXRlQXJyYXlJbnB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW1SZWFkZXI7CisKK3B1YmxpYyBjbGFzcyBUZXN0Q2xhc3Nlc0ZpbHRlclRlc3QgZXh0ZW5kcyBUZXN0Q2FzZSB7CisgIHByaXZhdGUgc3RhdGljIGZpbmFsIExvZ2dlciBMT0cgPSBMb2dnZXIuZ2V0SW5zdGFuY2UoIiNjb20uaW50ZWxsaWouVGVzdENsYXNzZXNGaWx0ZXJUZXN0Iik7CisKKyAgQFN1cHByZXNzV2FybmluZ3MoeyJJT1Jlc291cmNlT3BlbmVkQnV0Tm90U2FmZWx5Q2xvc2VkIn0pCisgIHB1YmxpYyB2b2lkIHRlc3QoKSB0aHJvd3MgSU9FeGNlcHRpb24geworCisgICAgTE9HLmluZm8oInRlc3QiKTsKKworICAgIFN0cmluZyBmaWx0ZXJUZXh0ID0gIltHcm91cDFdXG4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICJjb20uaW50ZWxsaWoucGFja2FnZTEuKlxuIiArCisgICAgICAgICAgICAgICAgICAgICAgICAiY29tLmludGVsbGlqLnBhY2thZ2UyLkV4Y2x1ZGVkVGVzdFxuIiArCisgICAgICAgICAgICAgICAgICAgICAgICAiY29tLmludGVsbGlqLnBhY2thZ2UzLipwYWNrYWdlNFxuIiArCisgICAgICAgICAgICAgICAgICAgICAgICAiW0dyb3VwMl1cbiIgKworICAgICAgICAgICAgICAgICAgICAgICAgImNvbS5pbnRlbGxpai5wYWNrYWdlNS4qXG4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICJjb20uaW50ZWxsaWoucGFja2FnZTYuRXhjbHVkZWRUZXN0XG4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICJjb20uaW50ZWxsaWoucGFja2FnZTcuKnBhY2thZ2U4IjsKKworCisgICAgVGVzdENsYXNzZXNGaWx0ZXIgY2xhc3Nlc0ZpbHRlciA9IEdyb3VwQmFzZWRUZXN0Q2xhc3NGaWx0ZXIKKyAgICAgIC5jcmVhdGVPbihuZXcgSW5wdXRTdHJlYW1SZWFkZXIobmV3IEJ5dGVBcnJheUlucHV0U3RyZWFtKGZpbHRlclRleHQuZ2V0Qnl0ZXMoKSkpLCAiR3JvdXAxIik7CisgICAgYXNzZXJ0VHJ1ZShjbGFzc2VzRmlsdGVyLm1hdGNoZXMoImNvbS5pbnRlbGxpai5wYWNrYWdlMS5UZXN0IikpOworICAgIGFzc2VydFRydWUoY2xhc3Nlc0ZpbHRlci5tYXRjaGVzKCJjb20uaW50ZWxsaWoucGFja2FnZTEuVGVzdDIiKSk7CisgICAgYXNzZXJ0RmFsc2UoY2xhc3Nlc0ZpbHRlci5tYXRjaGVzKCJjb20uaW50ZWxsaWoucGFja2FnZTIuVGVzdCIpKTsKKyAgICBhc3NlcnRUcnVlKGNsYXNzZXNGaWx0ZXIubWF0Y2hlcygiY29tLmludGVsbGlqLnBhY2thZ2UyLkV4Y2x1ZGVkVGVzdCIpKTsKKyAgICBhc3NlcnRUcnVlKGNsYXNzZXNGaWx0ZXIubWF0Y2hlcygiY29tLmludGVsbGlqLnBhY2thZ2UzLnBhY2thZ2U0IikpOworICAgIGFzc2VydFRydWUoY2xhc3Nlc0ZpbHRlci5tYXRjaGVzKCJjb20uaW50ZWxsaWoucGFja2FnZTMucGFja2FnZTUucGFja2FnZTQiKSk7CisgICAgYXNzZXJ0RmFsc2UoY2xhc3Nlc0ZpbHRlci5tYXRjaGVzKCJjb20uaW50ZWxsaWoucGFja2FnZTMiKSk7CisgICAgYXNzZXJ0RmFsc2UoY2xhc3Nlc0ZpbHRlci5tYXRjaGVzKCJjb20uaW50ZWxsaWoiKSk7CisgICAgYXNzZXJ0RmFsc2UoY2xhc3Nlc0ZpbHRlci5tYXRjaGVzKCJjb20uaW50ZWxsaWouVGVzdCIpKTsKKworICAgIGFzc2VydEZhbHNlKGNsYXNzZXNGaWx0ZXIubWF0Y2hlcygiY29tLmludGVsbGlqLnBhY2thZ2U1LlRlc3QiKSk7CisgICAgYXNzZXJ0RmFsc2UoY2xhc3Nlc0ZpbHRlci5tYXRjaGVzKCJjb20uaW50ZWxsaWoucGFja2FnZTUuVGVzdDIiKSk7CisgICAgYXNzZXJ0RmFsc2UoY2xhc3Nlc0ZpbHRlci5tYXRjaGVzKCJjb20uaW50ZWxsaWoucGFja2FnZTYuVGVzdCIpKTsKKyAgICBhc3NlcnRGYWxzZShjbGFzc2VzRmlsdGVyLm1hdGNoZXMoImNvbS5pbnRlbGxpai5wYWNrYWdlNi5FeGNsdWRlZFRlc3QiKSk7CisgICAgYXNzZXJ0RmFsc2UoY2xhc3Nlc0ZpbHRlci5tYXRjaGVzKCJjb20uaW50ZWxsaWoucGFja2FnZTcucGFja2FnZTgiKSk7CisgICAgYXNzZXJ0RmFsc2UoY2xhc3Nlc0ZpbHRlci5tYXRjaGVzKCJjb20uaW50ZWxsaWoucGFja2FnZTcucGFja2FnZTUucGFja2FnZTgiKSk7CisgICAgYXNzZXJ0RmFsc2UoY2xhc3Nlc0ZpbHRlci5tYXRjaGVzKCJjb20uaW50ZWxsaWoucGFja2FnZTciKSk7CisKKyAgICBjbGFzc2VzRmlsdGVyID0gR3JvdXBCYXNlZFRlc3RDbGFzc0ZpbHRlcgorICAgICAgLmNyZWF0ZU9uKG5ldyBJbnB1dFN0cmVhbVJlYWRlcihuZXcgQnl0ZUFycmF5SW5wdXRTdHJlYW0oZmlsdGVyVGV4dC5nZXRCeXRlcygpKSksICJHcm91cDIiKTsKKyAgICBhc3NlcnRGYWxzZShjbGFzc2VzRmlsdGVyLm1hdGNoZXMoImNvbS5pbnRlbGxpai5wYWNrYWdlMS5UZXN0IikpOworICAgIGFzc2VydEZhbHNlKGNsYXNzZXNGaWx0ZXIubWF0Y2hlcygiY29tLmludGVsbGlqLnBhY2thZ2UxLlRlc3QyIikpOworICAgIGFzc2VydEZhbHNlKGNsYXNzZXNGaWx0ZXIubWF0Y2hlcygiY29tLmludGVsbGlqLnBhY2thZ2UyLlRlc3QiKSk7CisgICAgYXNzZXJ0RmFsc2UoY2xhc3Nlc0ZpbHRlci5tYXRjaGVzKCJjb20uaW50ZWxsaWoucGFja2FnZTIuRXhjbHVkZWRUZXN0IikpOworICAgIGFzc2VydEZhbHNlKGNsYXNzZXNGaWx0ZXIubWF0Y2hlcygiY29tLmludGVsbGlqLnBhY2thZ2UzLnBhY2thZ2U0IikpOworICAgIGFzc2VydEZhbHNlKGNsYXNzZXNGaWx0ZXIubWF0Y2hlcygiY29tLmludGVsbGlqLnBhY2thZ2UzLnBhY2thZ2U1LnBhY2thZ2U0IikpOworICAgIGFzc2VydEZhbHNlKGNsYXNzZXNGaWx0ZXIubWF0Y2hlcygiY29tLmludGVsbGlqLnBhY2thZ2UzIikpOworICAgIGFzc2VydEZhbHNlKGNsYXNzZXNGaWx0ZXIubWF0Y2hlcygiY29tLmludGVsbGlqIikpOworICAgIGFzc2VydEZhbHNlKGNsYXNzZXNGaWx0ZXIubWF0Y2hlcygiY29tLmludGVsbGlqLlRlc3QiKSk7CisKKyAgICBhc3NlcnRUcnVlKGNsYXNzZXNGaWx0ZXIubWF0Y2hlcygiY29tLmludGVsbGlqLnBhY2thZ2U1LlRlc3QiKSk7CisgICAgYXNzZXJ0VHJ1ZShjbGFzc2VzRmlsdGVyLm1hdGNoZXMoImNvbS5pbnRlbGxpai5wYWNrYWdlNS5UZXN0MiIpKTsKKyAgICBhc3NlcnRGYWxzZShjbGFzc2VzRmlsdGVyLm1hdGNoZXMoImNvbS5pbnRlbGxpai5wYWNrYWdlNi5UZXN0IikpOworICAgIGFzc2VydFRydWUoY2xhc3Nlc0ZpbHRlci5tYXRjaGVzKCJjb20uaW50ZWxsaWoucGFja2FnZTYuRXhjbHVkZWRUZXN0IikpOworICAgIGFzc2VydFRydWUoY2xhc3Nlc0ZpbHRlci5tYXRjaGVzKCJjb20uaW50ZWxsaWoucGFja2FnZTcucGFja2FnZTgiKSk7CisgICAgYXNzZXJ0VHJ1ZShjbGFzc2VzRmlsdGVyLm1hdGNoZXMoImNvbS5pbnRlbGxpai5wYWNrYWdlNy5wYWNrYWdlNS5wYWNrYWdlOCIpKTsKKyAgICBhc3NlcnRGYWxzZShjbGFzc2VzRmlsdGVyLm1hdGNoZXMoImNvbS5pbnRlbGxpai5wYWNrYWdlNyIpKTsKKworICAgIGNoZWNrRm9yTnVsbEdyb3VwKGZpbHRlclRleHQsIG51bGwpOworICAgIGNoZWNrRm9yTnVsbEdyb3VwKGZpbHRlclRleHQsIEdyb3VwQmFzZWRUZXN0Q2xhc3NGaWx0ZXIuQUxMX0VYQ0xVREVfREVGSU5FRCk7CisKKyAgfQorCisgIHByaXZhdGUgc3RhdGljIHZvaWQgY2hlY2tGb3JOdWxsR3JvdXAoU3RyaW5nIGZpbHRlclRleHQsIFN0cmluZyBncm91cDBOYW1lKSB7CisgICAgVGVzdENsYXNzZXNGaWx0ZXIgY2xhc3Nlc0ZpbHRlciA9IEdyb3VwQmFzZWRUZXN0Q2xhc3NGaWx0ZXIuY3JlYXRlT24obmV3IElucHV0U3RyZWFtUmVhZGVyKG5ldyBCeXRlQXJyYXlJbnB1dFN0cmVhbShmaWx0ZXJUZXh0LmdldEJ5dGVzKCkpKSwgZ3JvdXAwTmFtZSk7CisKKyAgICBhc3NlcnRGYWxzZShjbGFzc2VzRmlsdGVyLm1hdGNoZXMoImNvbS5pbnRlbGxpai5wYWNrYWdlMS5UZXN0IikpOworICAgIGFzc2VydEZhbHNlKGNsYXNzZXNGaWx0ZXIubWF0Y2hlcygiY29tLmludGVsbGlqLnBhY2thZ2UxLlRlc3QyIikpOworICAgIGFzc2VydFRydWUoY2xhc3Nlc0ZpbHRlci5tYXRjaGVzKCJjb20uaW50ZWxsaWoucGFja2FnZTIuVGVzdCIpKTsKKyAgICBhc3NlcnRGYWxzZShjbGFzc2VzRmlsdGVyLm1hdGNoZXMoImNvbS5pbnRlbGxpai5wYWNrYWdlMi5FeGNsdWRlZFRlc3QiKSk7CisgICAgYXNzZXJ0RmFsc2UoY2xhc3Nlc0ZpbHRlci5tYXRjaGVzKCJjb20uaW50ZWxsaWoucGFja2FnZTMucGFja2FnZTQiKSk7CisgICAgYXNzZXJ0RmFsc2UoY2xhc3Nlc0ZpbHRlci5tYXRjaGVzKCJjb20uaW50ZWxsaWoucGFja2FnZTMucGFja2FnZTUucGFja2FnZTQiKSk7CisgICAgYXNzZXJ0VHJ1ZShjbGFzc2VzRmlsdGVyLm1hdGNoZXMoImNvbS5pbnRlbGxpai5wYWNrYWdlMyIpKTsKKyAgICBhc3NlcnRUcnVlKGNsYXNzZXNGaWx0ZXIubWF0Y2hlcygiY29tLmludGVsbGlqIikpOworICAgIGFzc2VydFRydWUoY2xhc3Nlc0ZpbHRlci5tYXRjaGVzKCJjb20uaW50ZWxsaWouVGVzdCIpKTsKKworICAgIGFzc2VydEZhbHNlKGNsYXNzZXNGaWx0ZXIubWF0Y2hlcygiY29tLmludGVsbGlqLnBhY2thZ2U1LlRlc3QiKSk7CisgICAgYXNzZXJ0RmFsc2UoY2xhc3Nlc0ZpbHRlci5tYXRjaGVzKCJjb20uaW50ZWxsaWoucGFja2FnZTUuVGVzdDIiKSk7CisgICAgYXNzZXJ0VHJ1ZShjbGFzc2VzRmlsdGVyLm1hdGNoZXMoImNvbS5pbnRlbGxpai5wYWNrYWdlNi5UZXN0IikpOworICAgIGFzc2VydEZhbHNlKGNsYXNzZXNGaWx0ZXIubWF0Y2hlcygiY29tLmludGVsbGlqLnBhY2thZ2U2LkV4Y2x1ZGVkVGVzdCIpKTsKKyAgICBhc3NlcnRGYWxzZShjbGFzc2VzRmlsdGVyLm1hdGNoZXMoImNvbS5pbnRlbGxpai5wYWNrYWdlNy5wYWNrYWdlOCIpKTsKKyAgICBhc3NlcnRGYWxzZShjbGFzc2VzRmlsdGVyLm1hdGNoZXMoImNvbS5pbnRlbGxpai5wYWNrYWdlNy5wYWNrYWdlNS5wYWNrYWdlOCIpKTsKKyAgICBhc3NlcnRUcnVlKGNsYXNzZXNGaWx0ZXIubWF0Y2hlcygiY29tLmludGVsbGlqLnBhY2thZ2U3IikpOworICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovY29kZUluc2lnaHQvQWRkQW5ub3RhdGlvbkZpeFRlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9jb2RlSW5zaWdodC9BZGRBbm5vdGF0aW9uRml4VGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBhZjM2MWEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovY29kZUluc2lnaHQvQWRkQW5ub3RhdGlvbkZpeFRlc3QuamF2YQpAQCAtMCwwICsxLDQyMiBAQAorLyoKKyAqIFVzZXI6IGFubmEKKyAqIERhdGU6IDI3LUp1bi0yMDA3CisgKi8KK3BhY2thZ2UgY29tLmludGVsbGlqLmNvZGVJbnNpZ2h0OworCitpbXBvcnQgY29tLmludGVsbGlqLmNvZGVJbnNpZ2h0LmludGVudGlvbi5BZGRBbm5vdGF0aW9uRml4OworaW1wb3J0IGNvbS5pbnRlbGxpai5jb2RlSW5zaWdodC5pbnRlbnRpb24uSW50ZW50aW9uQWN0aW9uOworaW1wb3J0IGNvbS5pbnRlbGxpai5jb2RlSW5zaWdodC5pbnRlbnRpb24uaW1wbC5EZWFubm90YXRlSW50ZW50aW9uQWN0aW9uOworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLmFwcGxpY2F0aW9uLkFwcGxpY2F0aW9uTWFuYWdlcjsKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS5hcHBsaWNhdGlvbi5SZXN1bHQ7CitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkuYXBwbGljYXRpb24uZXguUGF0aE1hbmFnZXJFeDsKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS5jb21tYW5kLldyaXRlQ29tbWFuZEFjdGlvbjsKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS5lZGl0b3IuQ2FyZXRNb2RlbDsKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS5lZGl0b3IuRWRpdG9yOworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLmZpbGVFZGl0b3IuRmlsZURvY3VtZW50TWFuYWdlcjsKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS5tb2R1bGUuTW9kdWxlOworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLnByb2plY3QuUHJvamVjdDsKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS5yb290cy5Bbm5vdGF0aW9uT3JkZXJSb290VHlwZTsKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS5yb290cy5Nb2RpZmlhYmxlUm9vdE1vZGVsOworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLnJvb3RzLk1vZHVsZVJvb3RNYW5hZ2VyOworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLnJvb3RzLk9yZGVyUm9vdFR5cGU7CitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkucm9vdHMubGlicmFyaWVzLkxpYnJhcnk7CitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkucm9vdHMubGlicmFyaWVzLkxpYnJhcnlUYWJsZTsKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS51dGlsLlRyaW5pdHk7CitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkudXRpbC5pby5GaWxlVXRpbDsKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS51dGlsLmlvLlN0cmVhbVV0aWw7CitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkudmZzLkxvY2FsRmlsZVN5c3RlbTsKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS52ZnMuVmZzVXRpbDsKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS52ZnMuVmlydHVhbEZpbGU7CitpbXBvcnQgY29tLmludGVsbGlqLnBzaS4qOworaW1wb3J0IGNvbS5pbnRlbGxpai5wc2kudXRpbC5Qc2lUcmVlVXRpbDsKK2ltcG9ydCBjb20uaW50ZWxsaWoudGVzdEZyYW1ld29yay5JZGVhVGVzdENhc2U7CitpbXBvcnQgY29tLmludGVsbGlqLnRlc3RGcmFtZXdvcmsuUHNpVGVzdFV0aWw7CitpbXBvcnQgY29tLmludGVsbGlqLnRlc3RGcmFtZXdvcmsuVXNlZnVsVGVzdENhc2U7CitpbXBvcnQgY29tLmludGVsbGlqLnRlc3RGcmFtZXdvcmsuYnVpbGRlcnMuSmF2YU1vZHVsZUZpeHR1cmVCdWlsZGVyOworaW1wb3J0IGNvbS5pbnRlbGxpai50ZXN0RnJhbWV3b3JrLmZpeHR1cmVzLio7CitpbXBvcnQgY29tLmludGVsbGlqLnV0aWwubWVzc2FnZXMuTWVzc2FnZUJ1c0Nvbm5lY3Rpb247CitpbXBvcnQgb3JnLmpldGJyYWlucy5hbm5vdGF0aW9ucy5Ob25ObHM7CitpbXBvcnQgb3JnLmpldGJyYWlucy5hbm5vdGF0aW9ucy5Ob3ROdWxsOworCitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlzOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitwdWJsaWMgY2xhc3MgQWRkQW5ub3RhdGlvbkZpeFRlc3QgZXh0ZW5kcyBVc2VmdWxUZXN0Q2FzZSB7CisgIHByaXZhdGUgQ29kZUluc2lnaHRUZXN0Rml4dHVyZSBteUZpeHR1cmU7CisgIHByaXZhdGUgTW9kdWxlIG15TW9kdWxlOworICBwcml2YXRlIFByb2plY3QgbXlQcm9qZWN0OworICBwcml2YXRlIGJvb2xlYW4gbXlFeHBlY3RlZEV2ZW50V2FzUHJvZHVjZWQgPSBmYWxzZTsKKyAgcHJpdmF0ZSBib29sZWFuIG15VW5leHBlY3RlZEV2ZW50V2FzUHJvZHVjZWQgPSBmYWxzZTsKKyAgcHJpdmF0ZSBNZXNzYWdlQnVzQ29ubmVjdGlvbiBteUJ1c0Nvbm5lY3Rpb24gPSBudWxsOworCisgIHB1YmxpYyBBZGRBbm5vdGF0aW9uRml4VGVzdCgpIHsKKyAgICBJZGVhVGVzdENhc2UuaW5pdFBsYXRmb3JtUHJlZml4KCk7CisgIH0KKworICBAT3ZlcnJpZGUKKyAgcHVibGljIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBzdXBlci5zZXRVcCgpOworICAgIGZpbmFsIFRlc3RGaXh0dXJlQnVpbGRlcjxJZGVhUHJvamVjdFRlc3RGaXh0dXJlPiBwcm9qZWN0QnVpbGRlciA9IElkZWFUZXN0Rml4dHVyZUZhY3RvcnkuZ2V0Rml4dHVyZUZhY3RvcnkoKS5jcmVhdGVGaXh0dXJlQnVpbGRlcihnZXROYW1lKCkpOworCisgICAgbXlGaXh0dXJlID0gSmF2YVRlc3RGaXh0dXJlRmFjdG9yeS5nZXRGaXh0dXJlRmFjdG9yeSgpLmNyZWF0ZUNvZGVJbnNpZ2h0Rml4dHVyZShwcm9qZWN0QnVpbGRlci5nZXRGaXh0dXJlKCkpOworICAgIGZpbmFsIFN0cmluZyBkYXRhUGF0aCA9IFBhdGhNYW5hZ2VyRXguZ2V0VGVzdERhdGFQYXRoKCkgKyAiL2NvZGVJbnNpZ2h0L2V4dGVybmFsQW5ub3RhdGlvbnMiOworICAgIG15Rml4dHVyZS5zZXRUZXN0RGF0YVBhdGgoZGF0YVBhdGgpOworICAgIGZpbmFsIEphdmFNb2R1bGVGaXh0dXJlQnVpbGRlciBidWlsZGVyID0gcHJvamVjdEJ1aWxkZXIuYWRkTW9kdWxlKEphdmFNb2R1bGVGaXh0dXJlQnVpbGRlci5jbGFzcyk7CisgICAgYnVpbGRlci5zZXRNb2NrSmRrTGV2ZWwoSmF2YU1vZHVsZUZpeHR1cmVCdWlsZGVyLk1vY2tKZGtMZXZlbC5qZGsxNSk7CisKKyAgICBteUZpeHR1cmUuc2V0VXAoKTsKKyAgICBteU1vZHVsZSA9IGJ1aWxkZXIuZ2V0Rml4dHVyZSgpLmdldE1vZHVsZSgpOworICAgIG15UHJvamVjdCA9IG15Rml4dHVyZS5nZXRQcm9qZWN0KCk7CisgIH0KKworICBAT3ZlcnJpZGUKKyAgcHJvdGVjdGVkIHZvaWQgdGVhckRvd24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBzdXBlci50ZWFyRG93bigpOworICAgIG15Rml4dHVyZS50ZWFyRG93bigpOworICAgIG15Rml4dHVyZSA9IG51bGw7CisgICAgbXlNb2R1bGUgPSBudWxsOworICAgIG15UHJvamVjdCA9IG51bGw7CisgICAgYXNzZXJ0TnVsbChteUJ1c0Nvbm5lY3Rpb24pOworICB9CisKKyAgcHJpdmF0ZSB2b2lkIGFkZERlZmF1bHRMaWJyYXJ5KCkgeworICAgIGFkZExpYnJhcnkoIi9jb250ZW50L2Fubm8iKTsKKyAgfQorCisgIHByaXZhdGUgdm9pZCBhZGRMaWJyYXJ5KGZpbmFsIEBOb3ROdWxsIFN0cmluZy4uLiBhbm5vdGF0aW9uc0RpcnMpIHsKKyAgICBBcHBsaWNhdGlvbk1hbmFnZXIuZ2V0QXBwbGljYXRpb24oKS5ydW5Xcml0ZUFjdGlvbihuZXcgUnVubmFibGUoKSB7CisgICAgICBAT3ZlcnJpZGUKKyAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKKyAgICAgICAgZmluYWwgTW9kaWZpYWJsZVJvb3RNb2RlbCBtb2RlbCA9IE1vZHVsZVJvb3RNYW5hZ2VyLmdldEluc3RhbmNlKG15TW9kdWxlKS5nZXRNb2RpZmlhYmxlTW9kZWwoKTsKKyAgICAgICAgZmluYWwgTGlicmFyeVRhYmxlIGxpYnJhcnlUYWJsZSA9IG1vZGVsLmdldE1vZHVsZUxpYnJhcnlUYWJsZSgpOworICAgICAgICBmaW5hbCBMaWJyYXJ5IGxpYnJhcnkgPSBsaWJyYXJ5VGFibGUuY3JlYXRlTGlicmFyeSgidGVzdCIpOworCisgICAgICAgIGZpbmFsIExpYnJhcnkuTW9kaWZpYWJsZU1vZGVsIGxpYnJhcnlNb2RlbCA9IGxpYnJhcnkuZ2V0TW9kaWZpYWJsZU1vZGVsKCk7CisgICAgICAgIGxpYnJhcnlNb2RlbC5hZGRSb290KFZmc1V0aWwucGF0aFRvVXJsKG15Rml4dHVyZS5nZXRUZW1wRGlyUGF0aCgpICsgIi9saWIiKSwgT3JkZXJSb290VHlwZS5TT1VSQ0VTKTsKKyAgICAgICAgZm9yIChTdHJpbmcgYW5ub3RhdGlvbnNEaXIgOiBhbm5vdGF0aW9uc0RpcnMpIHsKKyAgICAgICAgICBsaWJyYXJ5TW9kZWwuYWRkUm9vdChWZnNVdGlsLnBhdGhUb1VybChteUZpeHR1cmUuZ2V0VGVtcERpclBhdGgoKSArIGFubm90YXRpb25zRGlyKSwgQW5ub3RhdGlvbk9yZGVyUm9vdFR5cGUuZ2V0SW5zdGFuY2UoKSk7CisgICAgICAgIH0KKyAgICAgICAgbGlicmFyeU1vZGVsLmNvbW1pdCgpOworICAgICAgICBtb2RlbC5jb21taXQoKTsKKyAgICAgIH0KKyAgICB9KTsKKyAgfQorCisgIEBOb3ROdWxsCisgIHByaXZhdGUgUHNpTW9kaWZpZXJMaXN0T3duZXIgZ2V0T3duZXIoKSB7CisgICAgQ2FyZXRNb2RlbCBjYXJldE1vZGVsID0gbXlGaXh0dXJlLmdldEVkaXRvcigpLmdldENhcmV0TW9kZWwoKTsKKyAgICBpbnQgcG9zaXRpb24gPSBjYXJldE1vZGVsLmdldE9mZnNldCgpOworICAgIFBzaUVsZW1lbnQgZWxlbWVudCA9IG15Rml4dHVyZS5nZXRGaWxlKCkuZmluZEVsZW1lbnRBdChwb3NpdGlvbik7CisgICAgYXNzZXJ0IGVsZW1lbnQgIT0gbnVsbDsKKyAgICBQc2lNb2RpZmllckxpc3RPd25lciBjb250YWluZXIgPSBBZGRBbm5vdGF0aW9uRml4LmdldENvbnRhaW5lcihlbGVtZW50KTsKKyAgICBhc3NlcnQgY29udGFpbmVyICE9IG51bGw7CisgICAgcmV0dXJuIGNvbnRhaW5lcjsKKyAgfQorCisgIHByaXZhdGUgdm9pZCBzdGFydExpc3RlbmluZyhATm90TnVsbCBmaW5hbCBMaXN0PFRyaW5pdHk8UHNpTW9kaWZpZXJMaXN0T3duZXIsIFN0cmluZywgQm9vbGVhbj4+IGV4cGVjdGVkU2VxdWVuY2UpIHsKKyAgICBteUJ1c0Nvbm5lY3Rpb24gPSBteVByb2plY3QuZ2V0TWVzc2FnZUJ1cygpLmNvbm5lY3QoKTsKKyAgICBteUJ1c0Nvbm5lY3Rpb24uc3Vic2NyaWJlKEV4dGVybmFsQW5ub3RhdGlvbnNNYW5hZ2VyLlRPUElDLCBuZXcgRGVmYXVsdEFubm90YXRpb25zTGlzdGVuZXIoKSB7CisgICAgICBwcml2YXRlIGludCBpbmRleCA9IDA7CisKKyAgICAgIEBPdmVycmlkZQorICAgICAgcHVibGljIHZvaWQgYWZ0ZXJFeHRlcm5hbEFubm90YXRpb25DaGFuZ2luZyhATm90TnVsbCBQc2lNb2RpZmllckxpc3RPd25lciBvd25lciwgQE5vdE51bGwgU3RyaW5nIGFubm90YXRpb25GUU5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2xlYW4gc3VjY2Vzc2Z1bCkgeworICAgICAgICBpZiAoaW5kZXggPCBleHBlY3RlZFNlcXVlbmNlLnNpemUoKSAmJiBleHBlY3RlZFNlcXVlbmNlLmdldChpbmRleCkuZmlyc3QgPT0gb3duZXIKKyAgICAgICAgICAgICYmIGV4cGVjdGVkU2VxdWVuY2UuZ2V0KGluZGV4KS5zZWNvbmQuZXF1YWxzKGFubm90YXRpb25GUU5hbWUpICYmIGV4cGVjdGVkU2VxdWVuY2UuZ2V0KGluZGV4KS50aGlyZCA9PSBzdWNjZXNzZnVsKSB7CisgICAgICAgICAgaW5kZXgrKzsKKyAgICAgICAgICBteUV4cGVjdGVkRXZlbnRXYXNQcm9kdWNlZCA9IHRydWU7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgc3VwZXIuYWZ0ZXJFeHRlcm5hbEFubm90YXRpb25DaGFuZ2luZyhvd25lciwgYW5ub3RhdGlvbkZRTmFtZSwgc3VjY2Vzc2Z1bCk7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9KTsKKyAgfQorCisgIHByaXZhdGUgdm9pZCBzdGFydExpc3RlbmluZyhATm90TnVsbCBmaW5hbCBQc2lNb2RpZmllckxpc3RPd25lciBleHBlY3RlZE93bmVyLCBATm90TnVsbCBmaW5hbCBTdHJpbmcgZXhwZWN0ZWRBbm5vdGF0aW9uRlFOYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmluYWwgYm9vbGVhbiBleHBlY3RlZFN1Y2Nlc3NmdWwpIHsKKyAgICBzdGFydExpc3RlbmluZyhBcnJheXMuYXNMaXN0KFRyaW5pdHkuY3JlYXRlKGV4cGVjdGVkT3duZXIsIGV4cGVjdGVkQW5ub3RhdGlvbkZRTmFtZSwgZXhwZWN0ZWRTdWNjZXNzZnVsKSkpOworICB9CisKKyAgcHJpdmF0ZSB2b2lkIHN0YXJ0TGlzdGVuaW5nRm9yRXh0ZXJuYWxDaGFuZ2VzKCkgeworICAgIG15QnVzQ29ubmVjdGlvbiA9IG15UHJvamVjdC5nZXRNZXNzYWdlQnVzKCkuY29ubmVjdCgpOworICAgIG15QnVzQ29ubmVjdGlvbi5zdWJzY3JpYmUoRXh0ZXJuYWxBbm5vdGF0aW9uc01hbmFnZXIuVE9QSUMsIG5ldyBEZWZhdWx0QW5ub3RhdGlvbnNMaXN0ZW5lcigpIHsKKyAgICAgIHByaXZhdGUgYm9vbGVhbiBub3RpZmllZE9uY2U7CisKKyAgICAgIEBPdmVycmlkZQorICAgICAgcHVibGljIHZvaWQgZXh0ZXJuYWxBbm5vdGF0aW9uc0NoYW5nZWRFeHRlcm5hbGx5KCkgeworICAgICAgICBpZiAoIW5vdGlmaWVkT25jZSkgeworICAgICAgICAgIG15RXhwZWN0ZWRFdmVudFdhc1Byb2R1Y2VkID0gdHJ1ZTsKKyAgICAgICAgICBub3RpZmllZE9uY2UgPSB0cnVlOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgIHN1cGVyLmV4dGVybmFsQW5ub3RhdGlvbnNDaGFuZ2VkRXh0ZXJuYWxseSgpOworICAgICAgICB9CisgICAgICB9CisgICAgfSk7CisgIH0KKworICBwcml2YXRlIHZvaWQgc3RvcExpc3RlbmluZ0FuZENoZWNrRXZlbnRzKCkgeworICAgIG15QnVzQ29ubmVjdGlvbi5kaXNjb25uZWN0KCk7CisgICAgbXlCdXNDb25uZWN0aW9uID0gbnVsbDsKKworICAgIGFzc2VydFRydWUobXlFeHBlY3RlZEV2ZW50V2FzUHJvZHVjZWQpOworICAgIGFzc2VydEZhbHNlKG15VW5leHBlY3RlZEV2ZW50V2FzUHJvZHVjZWQpOworCisgICAgbXlFeHBlY3RlZEV2ZW50V2FzUHJvZHVjZWQgPSBmYWxzZTsKKyAgICBteVVuZXhwZWN0ZWRFdmVudFdhc1Byb2R1Y2VkID0gZmFsc2U7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0QW5ub3RhdGVMaWJyYXJ5KCkgdGhyb3dzIFRocm93YWJsZSB7CisKKyAgICBhZGREZWZhdWx0TGlicmFyeSgpOworICAgIG15Rml4dHVyZS5jb25maWd1cmVCeUZpbGVzKCJsaWIvcC9UZXN0UHJpbWl0aXZlLmphdmEiLCAiY29udGVudC9hbm5vL3AvYW5ub3RhdGlvbnMueG1sIik7CisgICAgbXlGaXh0dXJlLmNvbmZpZ3VyZUJ5RmlsZXMoImxpYi9wL1Rlc3QuamF2YSIpOworICAgIGZpbmFsIFBzaUZpbGUgZmlsZSA9IG15Rml4dHVyZS5nZXRGaWxlKCk7CisgICAgZmluYWwgRWRpdG9yIGVkaXRvciA9IG15Rml4dHVyZS5nZXRFZGl0b3IoKTsKKworICAgIGZpbmFsIEludGVudGlvbkFjdGlvbiBmaXggPSBteUZpeHR1cmUuZmluZFNpbmdsZUludGVudGlvbigiQW5ub3RhdGUgbWV0aG9kICdnZXQnIGFzIEBOb3ROdWxsIik7CisgICAgYXNzZXJ0VHJ1ZShmaXguaXNBdmFpbGFibGUobXlQcm9qZWN0LCBlZGl0b3IsIGZpbGUpKTsKKworICAgIC8vIGV4cGVjdGluZyBvdGhlciBATnVsbGFibGUgYW5ub3RhdGlvbnMgdG8gYmUgcmVtb3ZlZCwgYW5kIGRlZmF1bHQgQE5vdE51bGwgdG8gYmUgYWRkZWQKKyAgICBMaXN0PFRyaW5pdHk8UHNpTW9kaWZpZXJMaXN0T3duZXIsIFN0cmluZywgQm9vbGVhbj4+IGV4cGVjdGVkU2VxdWVuY2UKKyAgICAgID0gbmV3IEFycmF5TGlzdDxUcmluaXR5PFBzaU1vZGlmaWVyTGlzdE93bmVyLCBTdHJpbmcsIEJvb2xlYW4+PigpOworICAgIGZvciAoU3RyaW5nIG5vdE51bGwgOiBOdWxsYWJsZU5vdE51bGxNYW5hZ2VyLmdldEluc3RhbmNlKG15UHJvamVjdCkuZ2V0TnVsbGFibGVzKCkpIHsKKyAgICAgIGV4cGVjdGVkU2VxdWVuY2UuYWRkKFRyaW5pdHkuY3JlYXRlKGdldE93bmVyKCksIG5vdE51bGwsIGZhbHNlKSk7CisgICAgfQorICAgIGV4cGVjdGVkU2VxdWVuY2UuYWRkKFRyaW5pdHkuY3JlYXRlKGdldE93bmVyKCksIEFubm90YXRpb25VdGlsLk5PVF9OVUxMLCB0cnVlKSk7CisgICAgc3RhcnRMaXN0ZW5pbmcoZXhwZWN0ZWRTZXF1ZW5jZSk7CisgICAgbmV3IFdyaXRlQ29tbWFuZEFjdGlvbihteVByb2plY3QpeworICAgICAgQE92ZXJyaWRlCisgICAgICBwcm90ZWN0ZWQgdm9pZCBydW4oZmluYWwgUmVzdWx0IHJlc3VsdCkgdGhyb3dzIFRocm93YWJsZSB7CisgICAgICAgIGZpeC5pbnZva2UobXlQcm9qZWN0LCBlZGl0b3IsIGZpbGUpOworICAgICAgfQorICAgIH0uZXhlY3V0ZSgpOworCisgICAgRmlsZURvY3VtZW50TWFuYWdlci5nZXRJbnN0YW5jZSgpLnNhdmVBbGxEb2N1bWVudHMoKTsKKworICAgIGZpbmFsIFBzaUVsZW1lbnQgcHNpRWxlbWVudCA9IGZpbGUuZmluZEVsZW1lbnRBdChlZGl0b3IuZ2V0Q2FyZXRNb2RlbCgpLmdldE9mZnNldCgpKTsKKyAgICBhc3NlcnROb3ROdWxsKHBzaUVsZW1lbnQpOworICAgIGZpbmFsIFBzaU1vZGlmaWVyTGlzdE93bmVyIGxpc3RPd25lciA9IFBzaVRyZWVVdGlsLmdldFBhcmVudE9mVHlwZShwc2lFbGVtZW50LCBQc2lNb2RpZmllckxpc3RPd25lci5jbGFzcyk7CisgICAgYXNzZXJ0Tm90TnVsbChsaXN0T3duZXIpOworICAgIGFzc2VydE5vdE51bGwoRXh0ZXJuYWxBbm5vdGF0aW9uc01hbmFnZXIuZ2V0SW5zdGFuY2UobXlQcm9qZWN0KS5maW5kRXh0ZXJuYWxBbm5vdGF0aW9uKGxpc3RPd25lciwgQW5ub3RhdGlvblV0aWwuTk9UX05VTEwpKTsKKyAgICBzdG9wTGlzdGVuaW5nQW5kQ2hlY2tFdmVudHMoKTsKKworICAgIG15Rml4dHVyZS5jaGVja1Jlc3VsdEJ5RmlsZSgiY29udGVudC9hbm5vL3AvYW5ub3RhdGlvbnMueG1sIiwgImNvbnRlbnQvYW5uby9wL2Fubm90YXRpb25zQW5ub3RhdGVMaWJyYXJ5X2FmdGVyLnhtbCIsIGZhbHNlKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RQcmltaXRpdmUoKSB0aHJvd3MgVGhyb3dhYmxlIHsKKyAgICBQc2lGaWxlIHBzaUZpbGUgPSBteUZpeHR1cmUuY29uZmlndXJlQnlGaWxlKCJsaWIvcC9UZXN0UHJpbWl0aXZlLmphdmEiKTsKKyAgICBQc2lUZXN0VXRpbC5hZGRTb3VyY2VSb290KG15TW9kdWxlLCBwc2lGaWxlLmdldFZpcnR1YWxGaWxlKCkuZ2V0UGFyZW50KCkpOworCisgICAgYXNzZXJ0Tm90QXZhaWxhYmxlKCJBbm5vdGF0ZSBtZXRob2QgJ2dldCcgYXMgQE5vdE51bGwiKTsKKyAgfQorCisgIHByaXZhdGUgdm9pZCBhc3NlcnROb3RBdmFpbGFibGUoU3RyaW5nIGhpbnQpIHsKKyAgICBMaXN0PEludGVudGlvbkFjdGlvbj4gYWN0aW9ucyA9IG15Rml4dHVyZS5maWx0ZXJBdmFpbGFibGVJbnRlbnRpb25zKGhpbnQpOworICAgIGFzc2VydEVtcHR5KGFjdGlvbnMpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEFubm90YXRlZCgpIHRocm93cyBUaHJvd2FibGUgeworICAgIFBzaUZpbGUgcHNpRmlsZSA9IG15Rml4dHVyZS5jb25maWd1cmVCeUZpbGUoImxpYi9wL1Rlc3RBbm5vdGF0ZWQuamF2YSIpOworICAgIFBzaVRlc3RVdGlsLmFkZFNvdXJjZVJvb3QobXlNb2R1bGUsIHBzaUZpbGUuZ2V0VmlydHVhbEZpbGUoKS5nZXRQYXJlbnQoKSk7CisgICAgZmluYWwgUHNpRmlsZSBmaWxlID0gbXlGaXh0dXJlLmdldEZpbGUoKTsKKyAgICBmaW5hbCBFZGl0b3IgZWRpdG9yID0gbXlGaXh0dXJlLmdldEVkaXRvcigpOworICAgIGFzc2VydE5vdEF2YWlsYWJsZSgiQW5ub3RhdGUgbWV0aG9kICdnZXQnIGFzIEBOb3ROdWxsIik7CisgICAgYXNzZXJ0Tm90QXZhaWxhYmxlKCJBbm5vdGF0ZSBtZXRob2QgJ2dldCcgYXMgQE51bGxhYmxlIik7CisKKyAgICBmaW5hbCBEZWFubm90YXRlSW50ZW50aW9uQWN0aW9uIGRlYW5ub3RhdGVGaXggPSBuZXcgRGVhbm5vdGF0ZUludGVudGlvbkFjdGlvbigpOworICAgIGFzc2VydEZhbHNlKGRlYW5ub3RhdGVGaXguaXNBdmFpbGFibGUobXlQcm9qZWN0LCBlZGl0b3IsIGZpbGUpKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3REZWFubm90YXRpb24oKSB0aHJvd3MgVGhyb3dhYmxlIHsKKyAgICBhZGREZWZhdWx0TGlicmFyeSgpOworICAgIG15Rml4dHVyZS5jb25maWd1cmVCeUZpbGVzKCJsaWIvcC9UZXN0UHJpbWl0aXZlLmphdmEiLCAiY29udGVudC9hbm5vL3AvYW5ub3RhdGlvbnMueG1sIik7CisgICAgZG9EZWFubm90YXRlKCJsaWIvcC9UZXN0RGVhbm5vdGF0aW9uLmphdmEiLCAiQW5ub3RhdGUgbWV0aG9kICdnZXQnIGFzIEBOb3ROdWxsIiwgIkFubm90YXRlIG1ldGhvZCAnZ2V0JyBhcyBATnVsbGFibGUiKTsKKyAgICBteUZpeHR1cmUuY2hlY2tSZXN1bHRCeUZpbGUoImNvbnRlbnQvYW5uby9wL2Fubm90YXRpb25zLnhtbCIsICJjb250ZW50L2Fubm8vcC9hbm5vdGF0aW9uc0RlYW5ub3RhdGlvbl9hZnRlci54bWwiLCBmYWxzZSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0RGVhbm5vdGF0aW9uMSgpIHRocm93cyBUaHJvd2FibGUgeworICAgIGFkZERlZmF1bHRMaWJyYXJ5KCk7CisgICAgbXlGaXh0dXJlLmNvbmZpZ3VyZUJ5RmlsZXMoImxpYi9wL1Rlc3RQcmltaXRpdmUuamF2YSIsICJjb250ZW50L2Fubm8vcC9hbm5vdGF0aW9ucy54bWwiKTsKKyAgICBkb0RlYW5ub3RhdGUoImxpYi9wL1Rlc3REZWFubm90YXRpb24xLmphdmEiLCAiQW5ub3RhdGUgcGFyYW1ldGVyICdzcycgYXMgQE5vdE51bGwiLCAiQW5ub3RhdGUgcGFyYW1ldGVyICdzcycgYXMgQE51bGxhYmxlIik7CisgICAgbXlGaXh0dXJlLmNoZWNrUmVzdWx0QnlGaWxlKCJjb250ZW50L2Fubm8vcC9hbm5vdGF0aW9ucy54bWwiLCAiY29udGVudC9hbm5vL3AvYW5ub3RhdGlvbnNEZWFubm90YXRpb24xX2FmdGVyLnhtbCIsIGZhbHNlKTsKKyAgfQorCisgIHByaXZhdGUgdm9pZCBkb0RlYW5ub3RhdGUoQE5vbk5scyBmaW5hbCBTdHJpbmcgdGVzdFBhdGgsIFN0cmluZyBoaW50MSwgU3RyaW5nIGhpbnQyKSB0aHJvd3MgVGhyb3dhYmxlIHsKKyAgICBteUZpeHR1cmUuY29uZmlndXJlQnlGaWxlKHRlc3RQYXRoKTsKKyAgICBmaW5hbCBQc2lGaWxlIGZpbGUgPSBteUZpeHR1cmUuZ2V0RmlsZSgpOworICAgIGZpbmFsIEVkaXRvciBlZGl0b3IgPSBteUZpeHR1cmUuZ2V0RWRpdG9yKCk7CisKKyAgICBhc3NlcnROb3RBdmFpbGFibGUoaGludDEpOworICAgIGFzc2VydE5vdEF2YWlsYWJsZShoaW50Mik7CisKKyAgICBmaW5hbCBEZWFubm90YXRlSW50ZW50aW9uQWN0aW9uIGRlYW5ub3RhdGVGaXggPSBuZXcgRGVhbm5vdGF0ZUludGVudGlvbkFjdGlvbigpOworICAgIGFzc2VydFRydWUoZGVhbm5vdGF0ZUZpeC5pc0F2YWlsYWJsZShteVByb2plY3QsIGVkaXRvciwgZmlsZSkpOworCisgICAgZmluYWwgUHNpTW9kaWZpZXJMaXN0T3duZXIgY29udGFpbmVyID0gRGVhbm5vdGF0ZUludGVudGlvbkFjdGlvbi5nZXRDb250YWluZXIoZWRpdG9yLCBmaWxlKTsKKyAgICBzdGFydExpc3RlbmluZyhjb250YWluZXIsIEFubm90YXRpb25VdGlsLk5PVF9OVUxMLCB0cnVlKTsKKyAgICBuZXcgV3JpdGVDb21tYW5kQWN0aW9uKG15UHJvamVjdCl7CisgICAgICBAT3ZlcnJpZGUKKyAgICAgIHByb3RlY3RlZCB2b2lkIHJ1bihmaW5hbCBSZXN1bHQgcmVzdWx0KSB0aHJvd3MgVGhyb3dhYmxlIHsKKyAgICAgICAgRXh0ZXJuYWxBbm5vdGF0aW9uc01hbmFnZXIuZ2V0SW5zdGFuY2UobXlQcm9qZWN0KS5kZWFubm90YXRlKGNvbnRhaW5lciwgQW5ub3RhdGlvblV0aWwuTk9UX05VTEwpOworICAgICAgfQorICAgIH0uZXhlY3V0ZSgpOworICAgIHN0b3BMaXN0ZW5pbmdBbmRDaGVja0V2ZW50cygpOworCisgICAgRmlsZURvY3VtZW50TWFuYWdlci5nZXRJbnN0YW5jZSgpLnNhdmVBbGxEb2N1bWVudHMoKTsKKworICAgIEludGVudGlvbkFjdGlvbiBmaXggPSBteUZpeHR1cmUuZmluZFNpbmdsZUludGVudGlvbihoaW50MSk7CisgICAgYXNzZXJ0Tm90TnVsbChmaXgpOworCisgICAgZml4ID0gbXlGaXh0dXJlLmZpbmRTaW5nbGVJbnRlbnRpb24oaGludDIpOworICAgIGFzc2VydE5vdE51bGwoZml4KTsKKworICAgIGFzc2VydEZhbHNlKGRlYW5ub3RhdGVGaXguaXNBdmFpbGFibGUobXlQcm9qZWN0LCBlZGl0b3IsIGZpbGUpKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RSZWFkaW5nT2xkUGVyc2lzdGVuY2VGb3JtYXQoKSB0aHJvd3MgVGhyb3dhYmxlIHsKKyAgICBhZGREZWZhdWx0TGlicmFyeSgpOworICAgIG15Rml4dHVyZS5jb25maWd1cmVCeUZpbGVzKCJjb250ZW50L2Fubm8vcGVyc2lzdGVuY2UvYW5ub3RhdGlvbnMueG1sIik7CisgICAgbXlGaXh0dXJlLmNvbmZpZ3VyZUJ5RmlsZXMoImxpYi9wZXJzaXN0ZW5jZS9UZXN0LmphdmEiKTsKKworCisgICAgRXh0ZXJuYWxBbm5vdGF0aW9uc01hbmFnZXIgbWFuYWdlciA9IEV4dGVybmFsQW5ub3RhdGlvbnNNYW5hZ2VyLmdldEluc3RhbmNlKG15UHJvamVjdCk7CisgICAgUHNpTWV0aG9kIG1ldGhvZCA9ICgoUHNpSmF2YUZpbGUpbXlGaXh0dXJlLmdldEZpbGUoKSkuZ2V0Q2xhc3NlcygpWzBdLmdldE1ldGhvZHMoKVswXTsKKyAgICBQc2lQYXJhbWV0ZXIgcGFyYW1ldGVyID0gbWV0aG9kLmdldFBhcmFtZXRlckxpc3QoKS5nZXRQYXJhbWV0ZXJzKClbMF07CisKKyAgICBhc3NlcnROb3ROdWxsKG1hbmFnZXIuZmluZEV4dGVybmFsQW5ub3RhdGlvbihtZXRob2QsIEFubm90YXRpb25VdGlsLk5VTExBQkxFKSk7CisgICAgYXNzZXJ0Tm90TnVsbChtYW5hZ2VyLmZpbmRFeHRlcm5hbEFubm90YXRpb24obWV0aG9kLCBBbm5vdGF0aW9uVXRpbC5OTFMpKTsKKyAgICBhc3NlcnRFcXVhbHMoMiwgbWFuYWdlci5maW5kRXh0ZXJuYWxBbm5vdGF0aW9ucyhtZXRob2QpLmxlbmd0aCk7CisKKyAgICBhc3NlcnROb3ROdWxsKG1hbmFnZXIuZmluZEV4dGVybmFsQW5ub3RhdGlvbihwYXJhbWV0ZXIsIEFubm90YXRpb25VdGlsLk5PVF9OVUxMKSk7CisgICAgYXNzZXJ0Tm90TnVsbChtYW5hZ2VyLmZpbmRFeHRlcm5hbEFubm90YXRpb24ocGFyYW1ldGVyLCBBbm5vdGF0aW9uVXRpbC5OT05fTkxTKSk7CisgICAgYXNzZXJ0RXF1YWxzKDIsIG1hbmFnZXIuZmluZEV4dGVybmFsQW5ub3RhdGlvbnMocGFyYW1ldGVyKS5sZW5ndGgpOworICB9CisKKyAgcHJpdmF0ZSBzdGF0aWMgdm9pZCBhc3NlcnRNZXRob2RBbmRQYXJhbWV0ZXJBbm5vdGF0aW9uc1ZhbHVlcyhFeHRlcm5hbEFubm90YXRpb25zTWFuYWdlciBtYW5hZ2VyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHNpTWV0aG9kIG1ldGhvZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBzaVBhcmFtZXRlciBwYXJhbWV0ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgZXhwZWN0ZWRWYWx1ZSkgeworICAgIFBzaUFubm90YXRpb24gbWV0aG9kQW5ub3RhdGlvbiA9IG1hbmFnZXIuZmluZEV4dGVybmFsQW5ub3RhdGlvbihtZXRob2QsIEFubm90YXRpb25VdGlsLk5VTExBQkxFKTsKKyAgICBhc3NlcnROb3ROdWxsKG1ldGhvZEFubm90YXRpb24pOworICAgIGFzc2VydEVxdWFscyhleHBlY3RlZFZhbHVlLCBtZXRob2RBbm5vdGF0aW9uLmZpbmRBdHRyaWJ1dGVWYWx1ZSgidmFsdWUiKS5nZXRUZXh0KCkpOworCisgICAgUHNpQW5ub3RhdGlvbiBwYXJhbWV0ZXJBbm5vdGF0aW9uID0gbWFuYWdlci5maW5kRXh0ZXJuYWxBbm5vdGF0aW9uKHBhcmFtZXRlciwgQW5ub3RhdGlvblV0aWwuTk9UX05VTEwpOworICAgIGFzc2VydE5vdE51bGwocGFyYW1ldGVyQW5ub3RhdGlvbik7CisgICAgYXNzZXJ0RXF1YWxzKGV4cGVjdGVkVmFsdWUsIHBhcmFtZXRlckFubm90YXRpb24uZmluZEF0dHJpYnV0ZVZhbHVlKCJ2YWx1ZSIpLmdldFRleHQoKSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0RWRpdGluZ011bHRpUm9vdEFubm90YXRpb25zKCkgeworICAgIGFkZExpYnJhcnkoIi9jb250ZW50L2Fubm9NdWx0aVJvb3Qvcm9vdDEiLCAiL2NvbnRlbnQvYW5ub011bHRpUm9vdC9yb290MiIpOworICAgIG15Rml4dHVyZS5jb25maWd1cmVCeUZpbGVzKCIvY29udGVudC9hbm5vTXVsdGlSb290L3Jvb3QxL211bHRpUm9vdC9hbm5vdGF0aW9ucy54bWwiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIvY29udGVudC9hbm5vTXVsdGlSb290L3Jvb3QyL211bHRpUm9vdC9hbm5vdGF0aW9ucy54bWwiKTsKKyAgICBteUZpeHR1cmUuY29uZmlndXJlQnlGaWxlcygibGliL211bHRpUm9vdC9UZXN0LmphdmEiKTsKKworICAgIGZpbmFsIEV4dGVybmFsQW5ub3RhdGlvbnNNYW5hZ2VyIG1hbmFnZXIgPSBFeHRlcm5hbEFubm90YXRpb25zTWFuYWdlci5nZXRJbnN0YW5jZShteVByb2plY3QpOworICAgIGZpbmFsIFBzaU1ldGhvZCBtZXRob2QgPSAoKFBzaUphdmFGaWxlKW15Rml4dHVyZS5nZXRGaWxlKCkpLmdldENsYXNzZXMoKVswXS5nZXRNZXRob2RzKClbMF07CisgICAgZmluYWwgUHNpUGFyYW1ldGVyIHBhcmFtZXRlciA9IG1ldGhvZC5nZXRQYXJhbWV0ZXJMaXN0KCkuZ2V0UGFyYW1ldGVycygpWzBdOworCisgICAgYXNzZXJ0TWV0aG9kQW5kUGFyYW1ldGVyQW5ub3RhdGlvbnNWYWx1ZXMobWFuYWdlciwgbWV0aG9kLCBwYXJhbWV0ZXIsICJcImZvb1wiIik7CisKKyAgICBmaW5hbCBQc2lBbm5vdGF0aW9uIGFubm90YXRpb25Gcm9tVGV4dCA9CisgICAgICBKYXZhUHNpRmFjYWRlLmdldEVsZW1lbnRGYWN0b3J5KG15UHJvamVjdCkuY3JlYXRlQW5ub3RhdGlvbkZyb21UZXh0KCJAQW5ub3RhdGlvbih2YWx1ZT1cImJhclwiKSIsIG51bGwpOworCisgICAgc3RhcnRMaXN0ZW5pbmcobWV0aG9kLCBBbm5vdGF0aW9uVXRpbC5OVUxMQUJMRSwgdHJ1ZSk7CisgICAgbmV3IFdyaXRlQ29tbWFuZEFjdGlvbihteVByb2plY3QpIHsKKyAgICAgIEBPdmVycmlkZQorICAgICAgcHJvdGVjdGVkIHZvaWQgcnVuKGZpbmFsIFJlc3VsdCByZXN1bHQpIHRocm93cyBUaHJvd2FibGUgeworICAgICAgICBtYW5hZ2VyLmVkaXRFeHRlcm5hbEFubm90YXRpb24obWV0aG9kLCBBbm5vdGF0aW9uVXRpbC5OVUxMQUJMRSwgYW5ub3RhdGlvbkZyb21UZXh0LmdldFBhcmFtZXRlckxpc3QoKS5nZXRBdHRyaWJ1dGVzKCkpOworICAgICAgfQorICAgIH0uZXhlY3V0ZSgpOworICAgIHN0b3BMaXN0ZW5pbmdBbmRDaGVja0V2ZW50cygpOworCisgICAgc3RhcnRMaXN0ZW5pbmcocGFyYW1ldGVyLCBBbm5vdGF0aW9uVXRpbC5OT1RfTlVMTCwgdHJ1ZSk7CisgICAgbmV3IFdyaXRlQ29tbWFuZEFjdGlvbihteVByb2plY3QpIHsKKyAgICAgIEBPdmVycmlkZQorICAgICAgcHJvdGVjdGVkIHZvaWQgcnVuKGZpbmFsIFJlc3VsdCByZXN1bHQpIHRocm93cyBUaHJvd2FibGUgeworICAgICAgICBtYW5hZ2VyLmVkaXRFeHRlcm5hbEFubm90YXRpb24ocGFyYW1ldGVyLCBBbm5vdGF0aW9uVXRpbC5OT1RfTlVMTCwgYW5ub3RhdGlvbkZyb21UZXh0LmdldFBhcmFtZXRlckxpc3QoKS5nZXRBdHRyaWJ1dGVzKCkpOworICAgICAgfQorICAgIH0uZXhlY3V0ZSgpOworICAgIHN0b3BMaXN0ZW5pbmdBbmRDaGVja0V2ZW50cygpOworCisgICAgYXNzZXJ0TWV0aG9kQW5kUGFyYW1ldGVyQW5ub3RhdGlvbnNWYWx1ZXMobWFuYWdlciwgbWV0aG9kLCBwYXJhbWV0ZXIsICJcImJhclwiIik7CisKKyAgICBteUZpeHR1cmUuY2hlY2tSZXN1bHRCeUZpbGUoImNvbnRlbnQvYW5ub011bHRpUm9vdC9yb290MS9tdWx0aVJvb3QvYW5ub3RhdGlvbnMueG1sIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvbnRlbnQvYW5ub011bHRpUm9vdC9yb290MS9tdWx0aVJvb3QvYW5ub3RhdGlvbnNfYWZ0ZXIueG1sIiwgZmFsc2UpOworICAgIG15Rml4dHVyZS5jaGVja1Jlc3VsdEJ5RmlsZSgiY29udGVudC9hbm5vTXVsdGlSb290L3Jvb3QyL211bHRpUm9vdC9hbm5vdGF0aW9ucy54bWwiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29udGVudC9hbm5vTXVsdGlSb290L3Jvb3QyL211bHRpUm9vdC9hbm5vdGF0aW9uc19hZnRlci54bWwiLCBmYWxzZSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0TGlzdGVuZXJOb3RpZmllZFdoZW5PcGVyYXRpb25zRmFpbCgpIHsKKyAgICBhZGRMaWJyYXJ5KCk7IC8vIG5vIGFubm90YXRpb24gcm9vdHM6IGFsbCBvcGVyYXRpb25zIHNob3VsZCBmYWlsCisgICAgbXlGaXh0dXJlLmNvbmZpZ3VyZUJ5RmlsZXMoImxpYi9wL1Rlc3QuamF2YSIpOworICAgIGZpbmFsIFBzaU1ldGhvZCBtZXRob2QgPSAoKFBzaUphdmFGaWxlKW15Rml4dHVyZS5nZXRGaWxlKCkpLmdldENsYXNzZXMoKVswXS5nZXRNZXRob2RzKClbMF07CisKKyAgICBzdGFydExpc3RlbmluZyhtZXRob2QsIEFubm90YXRpb25VdGlsLk5PVF9OVUxMLCBmYWxzZSk7CisgICAgbmV3IFdyaXRlQ29tbWFuZEFjdGlvbihteVByb2plY3QpeworICAgICAgQE92ZXJyaWRlCisgICAgICBwcm90ZWN0ZWQgdm9pZCBydW4oZmluYWwgUmVzdWx0IHJlc3VsdCkgdGhyb3dzIFRocm93YWJsZSB7CisgICAgICAgIEV4dGVybmFsQW5ub3RhdGlvbnNNYW5hZ2VyLmdldEluc3RhbmNlKG15UHJvamVjdCkuYW5ub3RhdGVFeHRlcm5hbGx5KG1ldGhvZCwgQW5ub3RhdGlvblV0aWwuTk9UX05VTEwsIG15Rml4dHVyZS5nZXRGaWxlKCksIG51bGwpOworICAgICAgfQorICAgIH0uZXhlY3V0ZSgpOworICAgIHN0b3BMaXN0ZW5pbmdBbmRDaGVja0V2ZW50cygpOworCisgICAgc3RhcnRMaXN0ZW5pbmcobWV0aG9kLCBBbm5vdGF0aW9uVXRpbC5OT1RfTlVMTCwgZmFsc2UpOworICAgIG5ldyBXcml0ZUNvbW1hbmRBY3Rpb24obXlQcm9qZWN0KXsKKyAgICAgIEBPdmVycmlkZQorICAgICAgcHJvdGVjdGVkIHZvaWQgcnVuKGZpbmFsIFJlc3VsdCByZXN1bHQpIHRocm93cyBUaHJvd2FibGUgeworICAgICAgICBFeHRlcm5hbEFubm90YXRpb25zTWFuYWdlci5nZXRJbnN0YW5jZShteVByb2plY3QpLmVkaXRFeHRlcm5hbEFubm90YXRpb24obWV0aG9kLCBBbm5vdGF0aW9uVXRpbC5OT1RfTlVMTCwgbnVsbCk7CisgICAgICB9CisgICAgfS5leGVjdXRlKCk7CisgICAgc3RvcExpc3RlbmluZ0FuZENoZWNrRXZlbnRzKCk7CisKKyAgICBzdGFydExpc3RlbmluZyhtZXRob2QsIEFubm90YXRpb25VdGlsLk5PVF9OVUxMLCBmYWxzZSk7CisgICAgbmV3IFdyaXRlQ29tbWFuZEFjdGlvbihteVByb2plY3QpeworICAgICAgQE92ZXJyaWRlCisgICAgICBwcm90ZWN0ZWQgdm9pZCBydW4oZmluYWwgUmVzdWx0IHJlc3VsdCkgdGhyb3dzIFRocm93YWJsZSB7CisgICAgICAgIEV4dGVybmFsQW5ub3RhdGlvbnNNYW5hZ2VyLmdldEluc3RhbmNlKG15UHJvamVjdCkuZGVhbm5vdGF0ZShtZXRob2QsIEFubm90YXRpb25VdGlsLk5PVF9OVUxMKTsKKyAgICAgIH0KKyAgICB9LmV4ZWN1dGUoKTsKKyAgICBzdG9wTGlzdGVuaW5nQW5kQ2hlY2tFdmVudHMoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RMaXN0ZW5lck5vdGlmaWVkT25FeHRlcm5hbENoYW5nZXMoKSB7CisgICAgYWRkRGVmYXVsdExpYnJhcnkoKTsKKyAgICBteUZpeHR1cmUuY29uZmlndXJlQnlGaWxlcygiL2NvbnRlbnQvYW5uby9wL2Fubm90YXRpb25zLnhtbCIpOworICAgIG15Rml4dHVyZS5jb25maWd1cmVCeUZpbGVzKCJsaWIvcC9UZXN0LmphdmEiKTsKKworICAgIEV4dGVybmFsQW5ub3RhdGlvbnNNYW5hZ2VyLmdldEluc3RhbmNlKG15UHJvamVjdCkuZmluZEV4dGVybmFsQW5ub3RhdGlvbihnZXRPd25lcigpLCBBbm5vdGF0aW9uVXRpbC5OT1RfTlVMTCk7IC8vIGZvcmNlIGNyZWF0aW5nIHNlcnZpY2UKKworICAgIHN0YXJ0TGlzdGVuaW5nRm9yRXh0ZXJuYWxDaGFuZ2VzKCk7CisgICAgbmV3IFdyaXRlQ29tbWFuZEFjdGlvbihteVByb2plY3QpeworICAgICAgQE92ZXJyaWRlCisgICAgICBwcm90ZWN0ZWQgdm9pZCBydW4oZmluYWwgUmVzdWx0IHJlc3VsdCkgdGhyb3dzIFRocm93YWJsZSB7CisgICAgICAgIFZpcnR1YWxGaWxlIGZpbGUgPSBMb2NhbEZpbGVTeXN0ZW0uZ2V0SW5zdGFuY2UoKS5maW5kRmlsZUJ5UGF0aChteUZpeHR1cmUuZ2V0VGVtcERpclBhdGgoKSArICIvY29udGVudC9hbm5vL3AvYW5ub3RhdGlvbnMueG1sIik7CisgICAgICAgIGFzc2VydCBmaWxlICE9IG51bGw7CisgICAgICAgIFN0cmluZyBuZXdUZXh0ID0gIiAgIiArIFN0cmVhbVV0aWwucmVhZFRleHQoZmlsZS5nZXRJbnB1dFN0cmVhbSgpKSArICIgICAgICAiOyAvLyBhZGRpbmcgbmV3c3BhY2UgdG8gdGhlIGJlZ2lubmluZyBhbmQgZW5kIG9mIGZpbGUKKyAgICAgICAgRmlsZVV0aWwud3JpdGVUb0ZpbGUoVmZzVXRpbC52aXJ0dWFsVG9Jb0ZpbGUoZmlsZSksIG5ld1RleHQpOyAvLyB3cml0aW5nIHVzaW5nIGphdmEuaW8uRmlsZSB0byBtYWtlIHRoaXMgY2hhbmdlIGV4dGVybmFsCisgICAgICAgIGZpbGUucmVmcmVzaChmYWxzZSwgZmFsc2UpOworICAgICAgfQorICAgIH0uZXhlY3V0ZSgpOworICAgIHN0b3BMaXN0ZW5pbmdBbmRDaGVja0V2ZW50cygpOworICB9CisKKyAgcHJpdmF0ZSBjbGFzcyBEZWZhdWx0QW5ub3RhdGlvbnNMaXN0ZW5lciBleHRlbmRzIEV4dGVybmFsQW5ub3RhdGlvbnNMaXN0ZW5lci5BZGFwdGVyIHsKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgdm9pZCBhZnRlckV4dGVybmFsQW5ub3RhdGlvbkNoYW5naW5nKEBOb3ROdWxsIFBzaU1vZGlmaWVyTGlzdE93bmVyIG93bmVyLCBATm90TnVsbCBTdHJpbmcgYW5ub3RhdGlvbkZRTmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2xlYW4gc3VjY2Vzc2Z1bCkgeworICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJVbmV4cGVjdGVkIEV4dGVybmFsQW5ub3RhdGlvbnNMaXN0ZW5lci5hZnRlckV4dGVybmFsQW5ub3RhdGlvbkNoYW5naW5nIGV2ZW50IHByb2R1Y2VkIik7CisgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIm93bmVyID0gWyIgKyBvd25lciArICJdLCBhbm5vdGF0aW9uRlFOYW1lID0gWyIgKyBhbm5vdGF0aW9uRlFOYW1lICsgIl0sIHN1Y2Nlc3NmdWwgPSBbIiArIHN1Y2Nlc3NmdWwgKyAiXSIpOworICAgICAgbXlVbmV4cGVjdGVkRXZlbnRXYXNQcm9kdWNlZCA9IHRydWU7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIHZvaWQgZXh0ZXJuYWxBbm5vdGF0aW9uc0NoYW5nZWRFeHRlcm5hbGx5KCkgeworICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJVbmV4cGVjdGVkIEV4dGVybmFsQW5ub3RhdGlvbnNMaXN0ZW5lci5leHRlcm5hbEFubm90YXRpb25zQ2hhbmdlZEV4dGVybmFsbHkgZXZlbnQgcHJvZHVjZWQiKTsKKyAgICAgIG15VW5leHBlY3RlZEV2ZW50V2FzUHJvZHVjZWQgPSB0cnVlOworICAgIH0KKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNpZ2h0L0NvbXBsZXRlU3RhdGVtZW50VGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNpZ2h0L0NvbXBsZXRlU3RhdGVtZW50VGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc1YzQyZDIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovY29kZUluc2lnaHQvQ29tcGxldGVTdGF0ZW1lbnRUZXN0LmphdmEKQEAgLTAsMCArMSwyODMgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwMC0yMDExIEpldEJyYWlucyBzLnIuby4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCitwYWNrYWdlIGNvbS5pbnRlbGxpai5jb2RlSW5zaWdodDsKKworaW1wb3J0IGNvbS5pbnRlbGxpai5KYXZhVGVzdFV0aWw7CitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkuYWN0aW9uU3lzdGVtLklkZUFjdGlvbnM7CitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkucm9vdHMuTGFuZ3VhZ2VMZXZlbFByb2plY3RFeHRlbnNpb247CitpbXBvcnQgY29tLmludGVsbGlqLnBvbS5qYXZhLkxhbmd1YWdlTGV2ZWw7CitpbXBvcnQgY29tLmludGVsbGlqLnBzaS5KYXZhUHNpRmFjYWRlOworaW1wb3J0IGNvbS5pbnRlbGxpai5wc2kuY29kZVN0eWxlLkNvZGVTdHlsZVNldHRpbmdzOworaW1wb3J0IGNvbS5pbnRlbGxpai5wc2kuY29kZVN0eWxlLkNvZGVTdHlsZVNldHRpbmdzTWFuYWdlcjsKK2ltcG9ydCBjb20uaW50ZWxsaWoucHNpLmNvZGVTdHlsZS5Db21tb25Db2RlU3R5bGVTZXR0aW5nczsKK2ltcG9ydCBjb20uaW50ZWxsaWoudGVzdEZyYW1ld29yay5FZGl0b3JBY3Rpb25UZXN0Q2FzZTsKK2ltcG9ydCBjb20uaW50ZWxsaWoudGVzdEZyYW1ld29yay5UZXN0RGF0YVBhdGg7CitpbXBvcnQgb3JnLmpldGJyYWlucy5hbm5vdGF0aW9ucy5Ob3ROdWxsOworCisvKioKKyAqIEBhdXRob3IgbWF4CisgKi8KK0BUZXN0RGF0YVBhdGgoIiRDT05URU5UX1JPT1QvdGVzdERhdGEiKQorcHVibGljIGNsYXNzIENvbXBsZXRlU3RhdGVtZW50VGVzdCBleHRlbmRzIEVkaXRvckFjdGlvblRlc3RDYXNlIHsKKyAgcHVibGljIHZvaWQgdGVzdEFkZE1pc3NpbmdTZW1pY29sb24oKSB0aHJvd3MgRXhjZXB0aW9uIHsgZG9UZXN0KCk7IH0KKworICBwdWJsaWMgdm9pZCB0ZXN0QWRkTWlzc2luZ1BhcmVuKCkgdGhyb3dzIEV4Y2VwdGlvbiB7IGRvVGVzdCgpOyB9CisKKyAgcHVibGljIHZvaWQgdGVzdENvbXBsZXRlSWYoKSB0aHJvd3MgRXhjZXB0aW9uIHsgZG9UZXN0KCk7IH0KKworICBwdWJsaWMgdm9pZCB0ZXN0Q29tcGxldGVJZktleXdvcmQoKSB0aHJvd3MgRXhjZXB0aW9uIHsgZG9UZXN0KCk7IH0KKworICBwdWJsaWMgdm9pZCB0ZXN0Q29tcGxldGVJZlN0YXRlbWVudEdvZXNUb1RoZW4oKSB0aHJvd3MgRXhjZXB0aW9uIHsgZG9UZXN0KCk7IH0KKworICBwdWJsaWMgdm9pZCB0ZXN0Q29tcGxldGVJZktleXdvcmRTdGF0ZW1lbnRHb2VzVG9UaGVuKCkgdGhyb3dzIEV4Y2VwdGlvbiB7IGRvVGVzdCgpOyB9CisKKyAgcHVibGljIHZvaWQgdGVzdEluZGVudGF0aW9uKCkgdGhyb3dzIEV4Y2VwdGlvbiB7IGRvVGVzdCgpOyB9CisKKyAgcHVibGljIHZvaWQgdGVzdEVycm9yTmF2aWdhdGlvbigpIHRocm93cyBFeGNlcHRpb24geyBkb1Rlc3QoKTsgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RTdHJpbmdMaXRlcmFsKCkgdGhyb3dzIEV4Y2VwdGlvbiB7IGRvVGVzdCgpOyB9CisKKyAgcHVibGljIHZvaWQgdGVzdENvbXBsZXRlQ2F0Y2goKSB0aHJvd3MgRXhjZXB0aW9uIHsgZG9UZXN0KCk7IH0KKyAgCisgIHB1YmxpYyB2b2lkIHRlc3RDb21wbGV0ZUNhdGNoTFBhcmVuKCkgdGhyb3dzIEV4Y2VwdGlvbiB7IGRvVGVzdCgpOyB9CisKKyAgcHVibGljIHZvaWQgdGVzdENvbXBsZXRlQ2F0Y2hXaXRoRXhwcmVzc2lvbigpIHRocm93cyBFeGNlcHRpb24geyBkb1Rlc3QoKTsgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RDb21wbGV0ZUNhdGNoQm9keSgpIHRocm93cyBFeGNlcHRpb24geyBkb1Rlc3QoKTsgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RTQ1IxMTE0NygpIHRocm93cyBFeGNlcHRpb24geyBkb1Rlc3QoKTsgfQorCisgIHB1YmxpYyB2b2lkIHRlc3ROb0Vycm9ycygpIHRocm93cyBFeGNlcHRpb24geyBkb1Rlc3QoKTsgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RUaHJvdygpIHRocm93cyBFeGNlcHRpb24geyBkb1Rlc3QoKTsgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RSZXR1cm4oKSB0aHJvd3MgRXhjZXB0aW9uIHsgZG9UZXN0KCk7IH0KKworICBwdWJsaWMgdm9pZCB0ZXN0RW1wdHlMaW5lKCkgdGhyb3dzIEV4Y2VwdGlvbiB7IGRvVGVzdCgpOyB9CisKKyAgcHVibGljIHZvaWQgdGVzdEJsb2NrKCkgdGhyb3dzIEV4Y2VwdGlvbiB7IGRvVGVzdCgpOyB9CisKKyAgcHVibGljIHZvaWQgdGVzdFR3b1N0YXRlbWVudHNJbkxpbmUoKSB0aHJvd3MgRXhjZXB0aW9uIHsgZG9UZXN0KCk7IH0KKworICBwdWJsaWMgdm9pZCB0ZXN0Rm9yKCkgdGhyb3dzIEV4Y2VwdGlvbiB7IGRvVGVzdCgpOyB9CisKKyAgcHVibGljIHZvaWQgdGVzdEZvckVhY2goKSB0aHJvd3MgRXhjZXB0aW9uIHsgZG9UZXN0KCk7IH0KKworICBwdWJsaWMgdm9pZCB0ZXN0Rm9yQmxvY2soKSB0aHJvd3MgRXhjZXB0aW9uIHsgZG9UZXN0KCk7IH0KKworICBwdWJsaWMgdm9pZCB0ZXN0Rm9ySW5jcmVtZW50RXhwcmVzc2lvbkFuZEJvZHkoKSB0aHJvd3MgRXhjZXB0aW9uIHsgZG9UZXN0KCk7IH0KKworICBwdWJsaWMgdm9pZCB0ZXN0RW1wdHlCZWZvcmVSZXR1cm4oKSB0aHJvd3MgRXhjZXB0aW9uIHsgZG9UZXN0KCk7IH0KKworICBwdWJsaWMgdm9pZCB0ZXN0SWYoKSB0aHJvd3MgRXhjZXB0aW9uIHsgZG9UZXN0KCk7IH0KKworICBwdWJsaWMgdm9pZCB0ZXN0QmVmb3JlU3RhdGVtZW50KCkgdGhyb3dzIEV4Y2VwdGlvbiB7IGRvVGVzdCgpOyB9CisKKyAgcHVibGljIHZvaWQgdGVzdFRyeTEoKSB0aHJvd3MgRXhjZXB0aW9uIHsgZG9UZXN0KCk7IH0KKworICBwdWJsaWMgdm9pZCB0ZXN0QmxvY2sxKCkgdGhyb3dzIEV4Y2VwdGlvbiB7IGRvVGVzdCgpOyB9CisKKyAgcHVibGljIHZvaWQgdGVzdEFmdGVyRm9yKCkgdGhyb3dzIEV4Y2VwdGlvbiB7IGRvVGVzdCgpOyB9CisKKyAgcHVibGljIHZvaWQgdGVzdEJlZm9yZUZvcigpIHRocm93cyBFeGNlcHRpb24geyBkb1Rlc3QoKTsgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RBdEJsb2NrRW5kKCkgdGhyb3dzIEV4Y2VwdGlvbiB7IGRvVGVzdCgpOyB9CisKKyAgcHVibGljIHZvaWQgdGVzdEZvcmNlQmxvY2soKSB0aHJvd3MgRXhjZXB0aW9uIHsgZG9UZXN0KCk7IH0KKworICBwdWJsaWMgdm9pZCB0ZXN0RWxzZUlmKCkgdGhyb3dzIEV4Y2VwdGlvbiB7IGRvVGVzdCgpOyB9CisKKyAgcHVibGljIHZvaWQgdGVzdEluY29tcGxldGVFbHNlSWYoKSB0aHJvd3MgRXhjZXB0aW9uIHsgZG9UZXN0KCk7IH0KKworICBwdWJsaWMgdm9pZCB0ZXN0RmllbGQoKSB0aHJvd3MgRXhjZXB0aW9uIHsgZG9UZXN0KCk7IH0KKworICBwdWJsaWMgdm9pZCB0ZXN0TWV0aG9kKCkgdGhyb3dzIEV4Y2VwdGlvbiB7IGRvVGVzdCgpOyB9CisKKyAgcHVibGljIHZvaWQgdGVzdENvbXBsZXRlRWxzZUlmKCkgdGhyb3dzIEV4Y2VwdGlvbiB7IGRvVGVzdCgpOyB9CisKKyAgcHVibGljIHZvaWQgdGVzdENvbXBsZXRlU3RyaW5nTGl0ZXJhbCgpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdCgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdE5vbkFic3RyYWN0TWV0aG9kV2l0aFNlbWljb2xvbigpIHRocm93cyBFeGNlcHRpb24geyBkb1Rlc3QoKTsgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RSZXR1cm5Gcm9tTm9uVm9pZCgpIHRocm93cyBFeGNlcHRpb24geyBkb1Rlc3QoKTsgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RSZXR1cm5Gcm9tVm9pZCgpIHRocm93cyBFeGNlcHRpb24geyBkb1Rlc3QoKTsgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RJbmNvbXBsZXRlQ2FsbCgpIHRocm93cyBFeGNlcHRpb24geyBkb1Rlc3QoKTsgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RDb21wbGV0ZUNhbGwoKSB0aHJvd3MgRXhjZXB0aW9uIHsgZG9UZXN0KCk7IH0KKworICBwdWJsaWMgdm9pZCB0ZXN0U3RhcnROZXdCbG9jaygpIHRocm93cyBFeGNlcHRpb24geyBkb1Rlc3QoKTsgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RJblByZWNlZWRpbmdCbGFua3MoKSB0aHJvd3MgRXhjZXB0aW9uIHsgZG9UZXN0KCk7IH0KKworICBwdWJsaWMgdm9pZCB0ZXN0Tm9CbG9ja1JldHVybigpIHRocm93cyBFeGNlcHRpb24geyBkb1Rlc3QoKTsgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RJbkNvbW1lbnQoKSB0aHJvd3MgRXhjZXB0aW9uIHsgZG9UZXN0KCk7IH0KKworICBwdWJsaWMgdm9pZCB0ZXN0SW5Db21tZW50MigpIHRocm93cyBFeGNlcHRpb24geyBkb1Rlc3QoKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0SW5Db21tZW50MygpIHRocm93cyBFeGNlcHRpb24geyBkb1Rlc3QoKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0SW5Db21tZW50NCgpIHRocm93cyBFeGNlcHRpb24geyBkb1Rlc3QoKTsgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RTQ1IyMjkwNCgpIHRocm93cyBFeGNlcHRpb24geyBkb1Rlc3QoKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0U0NSMzAyMjcoKSB0aHJvd3MgRXhjZXB0aW9uIHsgZG9UZXN0KCk7IH0KKworICBwdWJsaWMgdm9pZCB0ZXN0RmllbGRXaXRoSW5pdGlhbGl6ZXIoKSB0aHJvd3MgRXhjZXB0aW9uIHsgZG9UZXN0KCk7IH0KKworICBwdWJsaWMgdm9pZCB0ZXN0UGFyZW50aGVzaXplZCgpIHRocm93cyBFeGNlcHRpb24geyBkb1Rlc3QoKTsgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RDb21wbGV0ZUJyZWFrKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0Q29tcGxldGVJZk5leHRMaW5lQnJhY2VTdHlsZSgpIHRocm93cyBFeGNlcHRpb24geworICAgIENvZGVTdHlsZVNldHRpbmdzIHNldHRpbmdzID0gQ29kZVN0eWxlU2V0dGluZ3NNYW5hZ2VyLmdldFNldHRpbmdzKGdldFByb2plY3QoKSk7CisgICAgc2V0dGluZ3MuQlJBQ0VfU1RZTEUgPSBDb21tb25Db2RlU3R5bGVTZXR0aW5ncy5ORVhUX0xJTkU7CisgICAgZG9UZXN0KCk7CisgICAgc2V0dGluZ3MuQlJBQ0VfU1RZTEUgPSBDb21tb25Db2RlU3R5bGVTZXR0aW5ncy5FTkRfT0ZfTElORTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RDb21wbGV0ZUlmTmV4dExpbmVCcmFjZVN0eWxlMigpIHRocm93cyBFeGNlcHRpb24geworICAgIENvZGVTdHlsZVNldHRpbmdzIHNldHRpbmdzID0gQ29kZVN0eWxlU2V0dGluZ3NNYW5hZ2VyLmdldFNldHRpbmdzKGdldFByb2plY3QoKSk7CisgICAgc2V0dGluZ3MuQlJBQ0VfU1RZTEUgPSBDb21tb25Db2RlU3R5bGVTZXR0aW5ncy5ORVhUX0xJTkU7CisgICAgZG9UZXN0KCk7CisgICAgc2V0dGluZ3MuQlJBQ0VfU1RZTEUgPSBDb21tb25Db2RlU3R5bGVTZXR0aW5ncy5FTkRfT0ZfTElORTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RTQ1IzNjExMCgpIHRocm93cyBFeGNlcHRpb24geworICAgIEphdmFQc2lGYWNhZGUgZmFjYWRlID0gSmF2YVBzaUZhY2FkZS5nZXRJbnN0YW5jZShnZXRQcm9qZWN0KCkpOworICAgIExhbmd1YWdlTGV2ZWwgb2xkID0gTGFuZ3VhZ2VMZXZlbFByb2plY3RFeHRlbnNpb24uZ2V0SW5zdGFuY2UoZmFjYWRlLmdldFByb2plY3QoKSkuZ2V0TGFuZ3VhZ2VMZXZlbCgpOworICAgIGRvVGVzdCgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFNDUjM3MzMxKCkgdGhyb3dzIEV4Y2VwdGlvbiB7IGRvVGVzdCgpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RJREVBREVWNDM0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgQ29kZVN0eWxlU2V0dGluZ3NNYW5hZ2VyLmdldFNldHRpbmdzKGdldFByb2plY3QoKSkuS0VFUF9TSU1QTEVfQkxPQ0tTX0lOX09ORV9MSU5FID0gdHJ1ZTsKKyAgICBkb1Rlc3QoKTsKKyAgICBDb2RlU3R5bGVTZXR0aW5nc01hbmFnZXIuZ2V0U2V0dGluZ3MoZ2V0UHJvamVjdCgpKS5LRUVQX1NJTVBMRV9CTE9DS1NfSU5fT05FX0xJTkUgPSBmYWxzZTsKKyAgICBkb1Rlc3QoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RJREVBREVWMTA5MygpIHRocm93cyBFeGNlcHRpb24geyBkb1Rlc3QoKTsgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RJREVBREVWMTcxMCgpIHRocm93cyBFeGNlcHRpb24geyBkb1Rlc3QoKTsgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RJbnRlcmZhY2VNZXRob2RTZW1pY29sb24oKSB0aHJvd3MgRXhjZXB0aW9uIHsgZG9UZXN0KCk7IH0KKworICBwdWJsaWMgdm9pZCB0ZXN0U3luY2hyb25pemVkKCkgdGhyb3dzIEV4Y2VwdGlvbiB7IGRvVGVzdCgpOyB9CisKKyAgcHVibGljIHZvaWQgdGVzdENkckVuZGxlc3NMb29wKCkgdGhyb3dzIEV4Y2VwdGlvbiB7IGRvVGVzdCgpOyB9CisKKyAgcHVibGljIHZvaWQgdGVzdEZvbGxvd2VkQnlDb21tZW50KCkgdGhyb3dzIEV4Y2VwdGlvbiB7IGRvVGVzdCgpOyB9CisKKyAgcHVibGljIHZvaWQgdGVzdEJyYWNlRml4ZU5ld0xpbmUoKSB0aHJvd3MgRXhjZXB0aW9uIHsgZG9UZXN0KCk7IH0KKworICBwdWJsaWMgdm9pZCB0ZXN0U3dpdGNoS2V5d29yZCgpIHRocm93cyBFeGNlcHRpb24geyBkb1Rlc3QoKTsgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RTd2l0Y2hLZXl3b3JkV2l0aENvbmRpdGlvbigpIHRocm93cyBFeGNlcHRpb24geyBkb1Rlc3QoKTsgfQorCisgIHB1YmxpYyB2b2lkIHRlc3ROZXdJblBhcmVudGhlc2VzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7IGRvVGVzdCgpOyB9CisgIAorICBwdWJsaWMgdm9pZCB0ZXN0SURFQURFVjIwNzEzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7IGRvVGVzdCgpOyB9CisKKyAgcHVibGljIHZvaWQgdGVzdElERUEyMjEyNSgpIHRocm93cyBFeGNlcHRpb24geyBkb1Rlc3QoKTsgfQorICAKKyAgcHVibGljIHZvaWQgdGVzdElERUEyMjM4NSgpIHRocm93cyBFeGNlcHRpb24geyBkb1Rlc3QoKTsgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RJREVBREVWNDA0NzkoKSB0aHJvd3MgRXhjZXB0aW9uIHsgZG9UZXN0KCk7IH0KKworICBwdWJsaWMgdm9pZCB0ZXN0TXVsdGlsaW5lUmV0dXJuKCkgdGhyb3dzIEV4Y2VwdGlvbiB7IGRvVGVzdCgpOyB9CisKKyAgcHVibGljIHZvaWQgdGVzdElERUFERVYxMzAxOSgpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdEJyYWNlc05leHRMaW5lU3R5bGUoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RJREVBMjUxMzkoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3RCcmFjZXNOZXh0TGluZVN0eWxlKCk7CisgIH0KKyAgCisgIHB1YmxpYyB2b2lkIHRlc3RCZWZvcmVJZlJCcmFjZSgpIHRocm93cyBFeGNlcHRpb24geworICAgIENvZGVTdHlsZVNldHRpbmdzTWFuYWdlci5nZXRTZXR0aW5ncyhnZXRQcm9qZWN0KCkpLktFRVBfU0lNUExFX0JMT0NLU19JTl9PTkVfTElORSA9IHRydWU7CisgICAgZG9UZXN0KCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0Tm9Vbm5lY2Vzc2FyeUVtcHR5TGluZUF0Q29kZUJsb2NrKCkgdGhyb3dzIEV4Y2VwdGlvbiB7IGRvVGVzdCgpOyB9CisKKyAgcHVibGljIHZvaWQgdGVzdEZvclN0YXRlbWVudEdlbmVyYXRpb24oKSB0aHJvd3MgRXhjZXB0aW9uIHsgZG9UZXN0KCk7IH0KKworICBwdWJsaWMgdm9pZCB0ZXN0U3BhY2VBZnRlclNlbWljb2xvbigpIHRocm93cyBFeGNlcHRpb24geworICAgIENvZGVTdHlsZVNldHRpbmdzTWFuYWdlci5nZXRTZXR0aW5ncyhnZXRQcm9qZWN0KCkpLlNQQUNFX0FGVEVSX1NFTUlDT0xPTiA9IHRydWU7CisgICAgZG9UZXN0KCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0Tm9TcGFjZUFmdGVyU2VtaWNvbG9uKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgQ29kZVN0eWxlU2V0dGluZ3NNYW5hZ2VyLmdldFNldHRpbmdzKGdldFByb2plY3QoKSkuU1BBQ0VfQUZURVJfU0VNSUNPTE9OID0gZmFsc2U7CisgICAgZG9UZXN0KCk7CisgIH0KKyAgCisgIHB1YmxpYyB2b2lkIHRlc3RGb3JVcGRhdGVHZW5lcmF0aW9uKCkgdGhyb3dzIEV4Y2VwdGlvbiB7IGRvVGVzdCgpOyB9CisKKyAgcHVibGljIHZvaWQgdGVzdFZhbGlkQ29kZUJsb2NrKCkgdGhyb3dzIEV4Y2VwdGlvbiB7IGRvVGVzdCgpOyB9CisKKyAgcHVibGljIHZvaWQgdGVzdFZhbGlkQ29kZUJsb2NrV2l0aEVtcHR5TGluZUFmdGVySXQoKSB0aHJvd3MgRXhjZXB0aW9uIHsgZG9UZXN0KCk7IH0KKyAgCisgIHB1YmxpYyB2b2lkIHRlc3RGcm9tSmF2YWRvY1BhcmFtZXRlckRlc2NyaXB0aW9uRW5kVG9OZXh0UGFyYW1ldGVyKCkgdGhyb3dzIEV4Y2VwdGlvbiB7IGRvVGVzdCgpOyB9CisKKyAgcHVibGljIHZvaWQgdGVzdEZyb21KYXZhZG9jUGFyYW1ldGVyRGVzY3JpcHRpb25NaWRkbGVUb05leHRQYXJhbWV0ZXIoKSB0aHJvd3MgRXhjZXB0aW9uIHsgZG9UZXN0KCk7IH0KKworICBwdWJsaWMgdm9pZCB0ZXN0TGFzdEphdmFkb2NQYXJhbWV0ZXJEZXNjcmlwdGlvbigpIHRocm93cyBFeGNlcHRpb24geyBkb1Rlc3QoKTsgfQorICAKKyAgcHVibGljIHZvaWQgdGVzdExhc3RKYXZhZG9jUGFyYW1ldGVyRGVzY3JpcHRpb25Ub1JldHVybigpIHRocm93cyBFeGNlcHRpb24geyBkb1Rlc3QoKTsgfQorICAKKyAgcHVibGljIHZvaWQgdGVzdENvbXBsZXRlTWV0aG9kQ2FsbEF0UmV0dXJuKCkgdGhyb3dzIEV4Y2VwdGlvbiB7IGRvVGVzdCgpOyB9CisgIAorICBwcml2YXRlIHZvaWQgZG9UZXN0QnJhY2VzTmV4dExpbmVTdHlsZSgpIHRocm93cyBFeGNlcHRpb24geworICAgIENvZGVTdHlsZVNldHRpbmdzIHNldHRpbmdzID0gQ29kZVN0eWxlU2V0dGluZ3NNYW5hZ2VyLmdldFNldHRpbmdzKGdldFByb2plY3QoKSk7CisgICAgc2V0dGluZ3MuQlJBQ0VfU1RZTEUgPSBDb21tb25Db2RlU3R5bGVTZXR0aW5ncy5ORVhUX0xJTkU7CisgICAgc2V0dGluZ3MuTUVUSE9EX0JSQUNFX1NUWUxFID0gQ29tbW9uQ29kZVN0eWxlU2V0dGluZ3MuTkVYVF9MSU5FOworICAgIHNldHRpbmdzLkNMQVNTX0JSQUNFX1NUWUxFID0gQ29tbW9uQ29kZVN0eWxlU2V0dGluZ3MuTkVYVF9MSU5FOworICAgIHRyeSB7CisgICAgICBkb1Rlc3QoKTsKKyAgICB9CisgICAgZmluYWxseSB7CisgICAgICBzZXR0aW5ncy5CUkFDRV9TVFlMRSA9IENvbW1vbkNvZGVTdHlsZVNldHRpbmdzLkVORF9PRl9MSU5FOworICAgICAgc2V0dGluZ3MuTUVUSE9EX0JSQUNFX1NUWUxFID0gQ29tbW9uQ29kZVN0eWxlU2V0dGluZ3MuRU5EX09GX0xJTkU7CisgICAgICBzZXR0aW5ncy5DTEFTU19CUkFDRV9TVFlMRSA9IENvbW1vbkNvZGVTdHlsZVNldHRpbmdzLkVORF9PRl9MSU5FOworICAgIH0KKyAgfQorCisgIHByaXZhdGUgdm9pZCBkb1Rlc3QoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoImphdmEiKTsKKyAgfQorCisgIHByaXZhdGUgdm9pZCBkb1Rlc3QoU3RyaW5nIGV4dCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgU3RyaW5nIHBhdGggPSAiL2NvZGVJbnNpZ2h0L2NvbXBsZXRlU3RhdGVtZW50LyI7CisgICAgZG9GaWxlVGVzdChwYXRoICsgZ2V0VGVzdE5hbWUoZmFsc2UpICsgIi4iICsgZXh0LCBwYXRoICsgZ2V0VGVzdE5hbWUoZmFsc2UpICsgIl9hZnRlci4iICsgZXh0LCB0cnVlKTsKKyAgfQorCisgIEBPdmVycmlkZQorICBwcm90ZWN0ZWQgU3RyaW5nIGdldEFjdGlvbklkKCkgeworICAgIHJldHVybiBJZGVBY3Rpb25zLkFDVElPTl9FRElUT1JfQ09NUExFVEVfU1RBVEVNRU5UOworICB9CisKKyAgQE5vdE51bGwKKyAgQE92ZXJyaWRlCisgIHByb3RlY3RlZCBTdHJpbmcgZ2V0VGVzdERhdGFQYXRoKCkgeworICAgIHJldHVybiBKYXZhVGVzdFV0aWwuZ2V0SmF2YVRlc3REYXRhUGF0aCgpOworICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovY29kZUluc2lnaHQvQ29weVJlZmVyZW5jZVRlc3QuZ3Jvb3Z5IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNpZ2h0L0NvcHlSZWZlcmVuY2VUZXN0Lmdyb292eQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZWMxZWQ2Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNpZ2h0L0NvcHlSZWZlcmVuY2VUZXN0Lmdyb292eQpAQCAtMCwwICsxLDEwMyBAQAorcGFja2FnZSBjb20uaW50ZWxsaWouY29kZUluc2lnaHQKKworaW1wb3J0IGNvbS5pbnRlbGxpai5KYXZhVGVzdFV0aWw7CitpbXBvcnQgY29tLmludGVsbGlqLmlkZS5hY3Rpb25zLkNvcHlSZWZlcmVuY2VBY3Rpb247CitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkuYWN0aW9uU3lzdGVtLkFjdGlvbk1hbmFnZXI7CitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkuYWN0aW9uU3lzdGVtLklkZUFjdGlvbnM7CitpbXBvcnQgY29tLmludGVsbGlqLnBzaS5Qc2lGaWxlOworaW1wb3J0IGNvbS5pbnRlbGxpai50ZXN0RnJhbWV3b3JrLmZpeHR1cmVzLkxpZ2h0Q29kZUluc2lnaHRGaXh0dXJlVGVzdENhc2U7CitpbXBvcnQgb3JnLmpldGJyYWlucy5hbm5vdGF0aW9ucy5Ob25ObHMKKworcHVibGljIGNsYXNzIENvcHlSZWZlcmVuY2VUZXN0IGV4dGVuZHMgTGlnaHRDb2RlSW5zaWdodEZpeHR1cmVUZXN0Q2FzZSB7CisgIEBOb25ObHMgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEJBU0VfUEFUSCA9ICIvY29kZUluc2lnaHQvY29weVJlZmVyZW5jZSI7CisgIHByb3RlY3RlZCBpbnQgb2xkU2V0dGluZzsKKworICBAT3ZlcnJpZGUKKyAgcHJvdGVjdGVkIFN0cmluZyBnZXRCYXNlUGF0aCgpIHsKKyAgICByZXR1cm4gSmF2YVRlc3RVdGlsLmdldFJlbGF0aXZlSmF2YVRlc3REYXRhUGF0aCgpICsgQkFTRV9QQVRIOworICB9CisKKyAgQE92ZXJyaWRlCisgIHByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgc3VwZXIuc2V0VXAoKTsKKworICAgIENvZGVJbnNpZ2h0U2V0dGluZ3Mgc2V0dGluZ3MgPSBDb2RlSW5zaWdodFNldHRpbmdzLmdldEluc3RhbmNlKCk7CisgICAgb2xkU2V0dGluZyA9IHNldHRpbmdzLkFERF9JTVBPUlRTX09OX1BBU1RFOworICAgIHNldHRpbmdzLkFERF9JTVBPUlRTX09OX1BBU1RFID0gQ29kZUluc2lnaHRTZXR0aW5ncy5ZRVM7CisgIH0KKworICBAT3ZlcnJpZGUKKyAgcHJvdGVjdGVkIHZvaWQgdGVhckRvd24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBDb2RlSW5zaWdodFNldHRpbmdzIHNldHRpbmdzID0gQ29kZUluc2lnaHRTZXR0aW5ncy5nZXRJbnN0YW5jZSgpOworICAgIHNldHRpbmdzLkFERF9JTVBPUlRTX09OX1BBU1RFID0gb2xkU2V0dGluZzsKKyAgICBzdXBlci50ZWFyRG93bigpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdENvbnN0cnVjdG9yKCkgdGhyb3dzIEV4Y2VwdGlvbiB7IGRvVGVzdCgpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3REZWZhdWx0Q29uc3RydWN0b3IoKSB0aHJvd3MgRXhjZXB0aW9uIHsgZG9UZXN0KCk7IH0KKyAgcHVibGljIHZvaWQgdGVzdElkZW50aWZpZXJTZXBhcmF0b3IoKSB0aHJvd3MgRXhjZXB0aW9uIHsgZG9UZXN0KCk7IH0KKyAgcHVibGljIHZvaWQgdGVzdE1ldGhvZEZyb21Bbm9ueW1vdXNDbGFzcygpIHRocm93cyBFeGNlcHRpb24geyBkb1Rlc3QoKTsgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RDb3B5RmlsZSgpIHRocm93cyBFeGNlcHRpb24geworICAgIFBzaUZpbGUgcHNpRmlsZSA9IG15Rml4dHVyZS5hZGRGaWxlVG9Qcm9qZWN0KCJ4L3gudHh0IiwgIiIpOworICAgIGFzc2VydFRydWUoQ29weVJlZmVyZW5jZUFjdGlvbi5kb0NvcHkocHNpRmlsZSwgZ2V0UHJvamVjdCgpKSk7CisKKyAgICBTdHJpbmcgbmFtZSA9IGdldFRlc3ROYW1lKGZhbHNlKTsKKyAgICBteUZpeHR1cmUuY29uZmlndXJlQnlGaWxlKG5hbWUgKyAiX2RzdC5qYXZhIik7CisgICAgcGVyZm9ybVBhc3RlKCk7CisgICAgbXlGaXh0dXJlLmNoZWNrUmVzdWx0QnlGaWxlKG5hbWUgKyAiX2FmdGVyLmphdmEiKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RDb3B5TGluZU51bWJlcigpIHsKKyAgICBteUZpeHR1cmUuY29uZmlndXJlQnlUZXh0ICdhLmphdmEnLCAnJycKKzxjYXJldD5jbGFzcyBGb28geworfScnJworICAgIHBlcmZvcm1Db3B5KCkKKyAgICBteUZpeHR1cmUuY29uZmlndXJlQnlUZXh0ICdhLnR4dCcsICcnCisgICAgcGVyZm9ybVBhc3RlKCkKKyAgICBteUZpeHR1cmUuY2hlY2tSZXN1bHQgIi9hLmphdmE6MiIKKyAgfQorCisgIHB1YmxpYyB2b2lkIF90ZXN0TWV0aG9kT3ZlcmxvYWRDb3B5KCkgeworICAgIG15Rml4dHVyZS5jb25maWd1cmVCeVRleHQgJ2EuamF2YScsICcnJworY2xhc3MgS29vIHsKKyAgcHVibGljIHZvaWQgZm9vKGludCBhKSB7IH0KKyAgcHVibGljIHZvaWQgZm9vKGJvb2xlYW4gYSkgeyB9CisgIAorICB7CisgICAgZm88Y2FyZXQ+byh0cnVlKTsKKyAgfQorfScnJworICAgIHBlcmZvcm1Db3B5KCkKKyAgICBteUZpeHR1cmUuY29uZmlndXJlQnlUZXh0ICdiLmphdmEnLCAnJycKKy8qKgorICogPGNhcmV0PgorICovCitjbGFzcyBLb28yIHsgfQorJycnCisgICAgcGVyZm9ybVBhc3RlKCkKKyAgICBteUZpeHR1cmUuY2hlY2tSZXN1bHQgJycnCisvKioKKyAqIEtvbyNmb28oYm9vbGVhbik8Y2FyZXQ+CisgKi8KK2NsYXNzIEtvbzIgeyB9CisnJycKKyAgfQorCisgIHByaXZhdGUgdm9pZCBkb1Rlc3QoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBTdHJpbmcgbmFtZSA9IGdldFRlc3ROYW1lKGZhbHNlKTsKKyAgICBteUZpeHR1cmUuY29uZmlndXJlQnlGaWxlKG5hbWUgKyAiLmphdmEiKTsKKyAgICBwZXJmb3JtQ29weSgpOworICAgIG15Rml4dHVyZS5jb25maWd1cmVCeUZpbGUobmFtZSArICJfZHN0LmphdmEiKTsKKyAgICBwZXJmb3JtUGFzdGUoKTsKKyAgICBteUZpeHR1cmUuY2hlY2tSZXN1bHRCeUZpbGUobmFtZSArICJfYWZ0ZXIuamF2YSIpOworICB9CisKKyAgcHJpdmF0ZSB2b2lkIHBlcmZvcm1Db3B5KCkgeworICAgIG15Rml4dHVyZS50ZXN0QWN0aW9uKEFjdGlvbk1hbmFnZXIuZ2V0SW5zdGFuY2UoKS5nZXRBY3Rpb24oSWRlQWN0aW9ucy5BQ1RJT05fQ09QWV9SRUZFUkVOQ0UpKTsKKyAgfQorCisgIHByaXZhdGUgdm9pZCBwZXJmb3JtUGFzdGUoKSB7CisgICAgbXlGaXh0dXJlLnBlcmZvcm1FZGl0b3JBY3Rpb24oSWRlQWN0aW9ucy5BQ1RJT05fRURJVE9SX1BBU1RFKTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNpZ2h0L0R1cGxpY2F0ZUFjdGlvblRlc3QuZ3Jvb3Z5IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNpZ2h0L0R1cGxpY2F0ZUFjdGlvblRlc3QuZ3Jvb3Z5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY4YjBkZTUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovY29kZUluc2lnaHQvRHVwbGljYXRlQWN0aW9uVGVzdC5ncm9vdnkKQEAgLTAsMCArMSw3OSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDAwLTIwMTIgSmV0QnJhaW5zIHMuci5vLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KK3BhY2thZ2UgY29tLmludGVsbGlqLmNvZGVJbnNpZ2h0OworCisKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS5hY3Rpb25TeXN0ZW0uSWRlQWN0aW9ucworaW1wb3J0IGNvbS5pbnRlbGxpai50ZXN0RnJhbWV3b3JrLmZpeHR1cmVzLkxpZ2h0Q29kZUluc2lnaHRGaXh0dXJlVGVzdENhc2UKK2ltcG9ydCBvcmcuamV0YnJhaW5zLmFubm90YXRpb25zLk5vbk5scworCitwdWJsaWMgY2xhc3MgRHVwbGljYXRlQWN0aW9uVGVzdCBleHRlbmRzIExpZ2h0Q29kZUluc2lnaHRGaXh0dXJlVGVzdENhc2UgeworICBwdWJsaWMgdm9pZCB0ZXN0T25lTGluZSgpIHsKKyAgICBkb1Rlc3QgJycneHh4PGNhcmV0PgorJycnLCAidHh0IiwgJycneHh4Cit4eHg8Y2FyZXQ+CisnJycKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RFbXB0eSgpIHsKKyAgICBkb1Rlc3QgJzxjYXJldD4nLCAidHh0IiwgJzxjYXJldD4nCisgIH0KKworICBwcml2YXRlIHZvaWQgZG9UZXN0KFN0cmluZyBiZWZvcmUsIEBOb25ObHMgU3RyaW5nIGV4dCwgU3RyaW5nIGFmdGVyKSB7CisgICAgbXlGaXh0dXJlLmNvbmZpZ3VyZUJ5VGV4dCgiYS4iICsgZXh0LCBiZWZvcmUpOworICAgIG15Rml4dHVyZS5wZXJmb3JtRWRpdG9yQWN0aW9uKElkZUFjdGlvbnMuQUNUSU9OX0VESVRPUl9EVVBMSUNBVEUpCisgICAgbXlGaXh0dXJlLmNoZWNrUmVzdWx0KGFmdGVyKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RTZWxlY3ROYW1lKCkgeworICAgIGRvVGVzdCAnJycKK2NsYXNzIEMgeworICB2b2lkIGZvbygpIHt9PGNhcmV0PgorfQorJycnLCAnamF2YScsICcnJworY2xhc3MgQyB7CisgIHZvaWQgZm9vKCkge30KKyAgdm9pZCA8Y2FyZXQ+Zm9vKCkge30KK30KKycnJworICB9CisKKyAgcHVibGljIHZvaWQgInRlc3QgcHJlc2VydmUgY2FyZXQgcG9zaXRpb24gd2hlbiBpdCdzIGFscmVhZHkgaW5zaWRlIGVsZW1lbnQncyBuYW1lIigpIHsKKyAgICBkb1Rlc3QgJycnCitjbGFzcyBDIHsKKyAgdm9pZCBmbzxjYXJldD5vKCkge30KK30KKycnJywgJ2phdmEnLCAnJycKK2NsYXNzIEMgeworICB2b2lkIGZvbygpIHt9CisgIHZvaWQgZm88Y2FyZXQ+bygpIHt9Cit9CisnJycKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RYbWxUYWcoKSB7CisgICAgZG9UZXN0ICcnJworPHJvb3Q+CisgIDxmb28vPjxjYXJldD4KKzwvcm9vdD4KKycnJywgJ3htbCcsICcnJworPHJvb3Q+CisgIDxmb28vPgorICA8Zm9vLz48Y2FyZXQ+Cis8L3Jvb3Q+CisnJycKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNpZ2h0L0V4dGVybmFsSmF2YWRvY1VybHNUZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovY29kZUluc2lnaHQvRXh0ZXJuYWxKYXZhZG9jVXJsc1Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZWM1NGY0Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNpZ2h0L0V4dGVybmFsSmF2YWRvY1VybHNUZXN0LmphdmEKQEAgLTAsMCArMSw1MiBAQAorLyoKKyAqIENvcHlyaWdodCAyMDAwLTIwMTEgSmV0QnJhaW5zIHMuci5vLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KK3BhY2thZ2UgY29tLmludGVsbGlqLmNvZGVJbnNpZ2h0OworCitpbXBvcnQgY29tLmludGVsbGlqLmxhbmcuamF2YS5KYXZhRG9jdW1lbnRhdGlvblByb3ZpZGVyOworaW1wb3J0IGNvbS5pbnRlbGxpai5wc2kuUHNpRWxlbWVudDsKK2ltcG9ydCBjb20uaW50ZWxsaWoucHNpLlBzaU1ldGhvZDsKK2ltcG9ydCBjb20uaW50ZWxsaWoucHNpLnV0aWwuUHNpVHJlZVV0aWw7CitpbXBvcnQgY29tLmludGVsbGlqLnRlc3RGcmFtZXdvcmsuZml4dHVyZXMuTGlnaHRDb2RlSW5zaWdodEZpeHR1cmVUZXN0Q2FzZTsKKworLyoqCisgKiBVc2VyOiBhbm5hCisgKiBEYXRlOiAxMS8yNy8xMQorICovCitwdWJsaWMgY2xhc3MgRXh0ZXJuYWxKYXZhZG9jVXJsc1Rlc3QgZXh0ZW5kcyBMaWdodENvZGVJbnNpZ2h0Rml4dHVyZVRlc3RDYXNlIHsKKyAgcHJpdmF0ZSB2b2lkIGRvVGVzdChTdHJpbmcgdGV4dCwgU3RyaW5nLi4uIGV4cGVjdGVkU2lnbmF0dXJlKSB7CisgICAgbXlGaXh0dXJlLmNvbmZpZ3VyZUJ5VGV4dCgiVGVzdC5qYXZhIiwgdGV4dCk7CisgICAgZmluYWwgUHNpRWxlbWVudCBlbGVtZW50QXRDYXJldCA9IG15Rml4dHVyZS5nZXRFbGVtZW50QXRDYXJldCgpOworICAgIGZpbmFsIFBzaU1ldGhvZCBtZW1iZXIgPSBQc2lUcmVlVXRpbC5nZXRQYXJlbnRPZlR5cGUoZWxlbWVudEF0Q2FyZXQsIFBzaU1ldGhvZC5jbGFzcywgZmFsc2UpOworICAgIGFzc2VydE5vdE51bGwobWVtYmVyKTsKKyAgICBmaW5hbCBTdHJpbmcgc2lnbmF0dXJlID0gSmF2YURvY3VtZW50YXRpb25Qcm92aWRlci5mb3JtYXRNZXRob2RTaWduYXR1cmUobWVtYmVyKTsKKyAgICBhc3NlcnROb3ROdWxsKHNpZ25hdHVyZSk7CisgICAgYXNzZXJ0RXF1YWxzKCJmb3VuZDoiICsgc2lnbmF0dXJlLCBleHBlY3RlZFNpZ25hdHVyZVswXSwgc2lnbmF0dXJlKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RWYXJhcmdzKCkgeworICAgIGRvVGVzdCgiY2xhc3MgVGVzdCB7XG4iICsKKyAgICAgICAgICAgIiB2b2lkIGZvPGNhcmV0Pm8oQ2xhc3M8Pz4uLi4gY2wpe31cbiIgKworICAgICAgICAgICAifSIsICJmb28oamF2YS5sYW5nLkNsYXNzLi4uKSIpOworCisgIH0KKyAgCisgIHB1YmxpYyB2b2lkIHRlc3RUeXBlUGFyYW1zKCkgeworICAgIGRvVGVzdCgiY2xhc3MgVGVzdCB7XG4iICsKKyAgICAgICAgICAgIiA8VD4gdm9pZCBzbzxjYXJldD5ydChUW10gYSwgQ29tcGFyYXRvcjw/IHN1cGVyIFQ+IGMpIHt9XG4iICsKKyAgICAgICAgICAgIn1cbiIgKworICAgICAgICAgICAiIGNsYXNzIENvbXBhcmF0b3I8WD57fSIsICJzb3J0KFRbXSwgQ29tcGFyYXRvcikiKTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNpZ2h0L0dlbmVyYXRlQ29uc3RydWN0b3JUZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovY29kZUluc2lnaHQvR2VuZXJhdGVDb25zdHJ1Y3RvclRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYWViMTZjCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNpZ2h0L0dlbmVyYXRlQ29uc3RydWN0b3JUZXN0LmphdmEKQEAgLTAsMCArMSw3NyBAQAorLyoKKyAqIENvcHlyaWdodCAyMDAwLTIwMTIgSmV0QnJhaW5zIHMuci5vLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KK3BhY2thZ2UgY29tLmludGVsbGlqLmNvZGVJbnNpZ2h0OworCitpbXBvcnQgY29tLmludGVsbGlqLmNvZGVJbnNpZ2h0LmdlbmVyYXRpb24uQ2xhc3NNZW1iZXI7CitpbXBvcnQgY29tLmludGVsbGlqLmNvZGVJbnNpZ2h0LmdlbmVyYXRpb24uR2VuZXJhdGVDb25zdHJ1Y3RvckhhbmRsZXI7CitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkuZWRpdG9yLkVkaXRvcjsKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS5wcm9qZWN0LlByb2plY3Q7CitpbXBvcnQgY29tLmludGVsbGlqLnBzaS5jb2RlU3R5bGUuQ29kZVN0eWxlU2V0dGluZ3NNYW5hZ2VyOworaW1wb3J0IGNvbS5pbnRlbGxpai5wc2kuY29kZVN0eWxlLkNvbW1vbkNvZGVTdHlsZVNldHRpbmdzOworaW1wb3J0IGNvbS5pbnRlbGxpai50ZXN0RnJhbWV3b3JrLkxpZ2h0Q29kZUluc2lnaHRUZXN0Q2FzZTsKKworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCisvKioKKyAqIEBhdXRob3IgdmVuCisgKi8KK3B1YmxpYyBjbGFzcyBHZW5lcmF0ZUNvbnN0cnVjdG9yVGVzdCBleHRlbmRzIExpZ2h0Q29kZUluc2lnaHRUZXN0Q2FzZSB7CisgIHB1YmxpYyB2b2lkIHRlc3RBYnN0cmFjdENsYXNzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7IGRvVGVzdCgpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RQYWNrYWdlTG9jYWxDbGFzcygpIHRocm93cyBFeGNlcHRpb24geyBkb1Rlc3QoKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0UHJpdmF0ZUNsYXNzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7IGRvVGVzdCgpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RCb3VuZENvbW1lbnRzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7IGRvVGVzdCgpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RTYW1lTmFtZWRGaWVsZHMoKSB0aHJvd3MgRXhjZXB0aW9uIHsgZG9UZXN0KCk7IH0KKyAgcHVibGljIHZvaWQgdGVzdEVudW1XaXRoQWJzdHJhY3RNZXRob2QoKSB0aHJvd3MgRXhjZXB0aW9uIHsgZG9UZXN0KCk7IH0KKyAgcHVibGljIHZvaWQgdGVzdE5vTW9yZUNvbnN0cnVjdG9yc0NhbkJlR2VuZXJhdGVkKCkgdGhyb3dzIEV4Y2VwdGlvbiB7IGRvVGVzdCgpOyB9CisKKyAgcHVibGljIHZvaWQgdGVzdEltbWVkaWF0ZWx5QWZ0ZXJSQnJhY2UoKSB0aHJvd3MgRXhjZXB0aW9uIHsgICAgLy8gSURFQURFVi0yODgxMQorICAgIENvZGVTdHlsZVNldHRpbmdzTWFuYWdlci5nZXRJbnN0YW5jZShnZXRQcm9qZWN0KCkpLmdldEN1cnJlbnRTZXR0aW5ncygpLkNMQVNTX0JSQUNFX1NUWUxFID0gQ29tbW9uQ29kZVN0eWxlU2V0dGluZ3MuTkVYVF9MSU5FOworICAgIGRvVGVzdCgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEJvdW5kQ29tbWVudHNLZWVwc0JsYW5rTGluZSgpIHRocm93cyBFeGNlcHRpb24geworICAgIENvZGVTdHlsZVNldHRpbmdzTWFuYWdlci5nZXRJbnN0YW5jZShnZXRQcm9qZWN0KCkpLmdldEN1cnJlbnRTZXR0aW5ncygpLkJMQU5LX0xJTkVTX0FGVEVSX0NMQVNTX0hFQURFUiA9IDE7CisgICAgZG9UZXN0KCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0RmluYWxGaWVsZFByZXNlbGVjdGlvbigpIHRocm93cyBFeGNlcHRpb24geyBkb1Rlc3QodHJ1ZSk7IH0KKyAgcHVibGljIHZvaWQgdGVzdFN1YnN0aXR1dGlvbigpIHRocm93cyBFeGNlcHRpb24geyBkb1Rlc3QodHJ1ZSk7IH0KKworICBwcml2YXRlIHZvaWQgZG9UZXN0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KGZhbHNlKTsKKyAgfQorCisgIHByaXZhdGUgdm9pZCBkb1Rlc3QoZmluYWwgYm9vbGVhbiBwcmVTZWxlY3QpIHRocm93cyBFeGNlcHRpb24geworICAgIFN0cmluZyBuYW1lID0gZ2V0VGVzdE5hbWUoZmFsc2UpOworICAgIGNvbmZpZ3VyZUJ5RmlsZSgiL2NvZGVJbnNpZ2h0L2dlbmVyYXRlQ29uc3RydWN0b3IvYmVmb3JlIiArIG5hbWUgKyAiLmphdmEiKTsKKyAgICBuZXcgR2VuZXJhdGVDb25zdHJ1Y3RvckhhbmRsZXIoKSB7CisgICAgICBAT3ZlcnJpZGUKKyAgICAgIHByb3RlY3RlZCBDbGFzc01lbWJlcltdIGNob29zZU1lbWJlcnMoQ2xhc3NNZW1iZXJbXSBtZW1iZXJzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sZWFuIGFsbG93RW1wdHlTZWxlY3Rpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2xlYW4gY29weUphdmFkb2NDaGVja2JveCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvamVjdCBwcm9qZWN0LCBFZGl0b3IgZWRpdG9yKSB7CisgICAgICAgIGlmIChwcmVTZWxlY3QpIHsKKyAgICAgICAgICBmaW5hbCBMaXN0PENsYXNzTWVtYmVyPiBwcmVzZWxlY3Rpb24gPSBHZW5lcmF0ZUNvbnN0cnVjdG9ySGFuZGxlci5wcmVzZWxlY3QobWVtYmVycyk7CisgICAgICAgICAgcmV0dXJuIHByZXNlbGVjdGlvbi50b0FycmF5KG5ldyBDbGFzc01lbWJlcltwcmVzZWxlY3Rpb24uc2l6ZSgpXSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgcmV0dXJuIG1lbWJlcnM7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9Lmludm9rZShnZXRQcm9qZWN0KCksIGdldEVkaXRvcigpLCBnZXRGaWxlKCkpOworICAgIGNoZWNrUmVzdWx0QnlGaWxlKCIvY29kZUluc2lnaHQvZ2VuZXJhdGVDb25zdHJ1Y3Rvci9hZnRlciIgKyBuYW1lICsgIi5qYXZhIik7CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9jb2RlSW5zaWdodC9HZW5lcmF0ZUphdmFkb2NUZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovY29kZUluc2lnaHQvR2VuZXJhdGVKYXZhZG9jVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI3MmRkNzgKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovY29kZUluc2lnaHQvR2VuZXJhdGVKYXZhZG9jVGVzdC5qYXZhCkBAIC0wLDAgKzEsMzQgQEAKK3BhY2thZ2UgY29tLmludGVsbGlqLmNvZGVJbnNpZ2h0OworCitpbXBvcnQgY29tLmludGVsbGlqLmlkZS5EYXRhTWFuYWdlcjsKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS5hY3Rpb25TeXN0ZW0uSWRlQWN0aW9uczsKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS5lZGl0b3IuYWN0aW9uU3lzdGVtLkVkaXRvckFjdGlvbkhhbmRsZXI7CitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkuZWRpdG9yLmFjdGlvblN5c3RlbS5FZGl0b3JBY3Rpb25NYW5hZ2VyOworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLmZpbGVFZGl0b3IuaW1wbC5UcmFpbGluZ1NwYWNlc1N0cmlwcGVyOworaW1wb3J0IGNvbS5pbnRlbGxpai50ZXN0RnJhbWV3b3JrLlBsYXRmb3JtVGVzdENhc2U7CisKKy8qKgorICogQGF1dGhvciBtaWtlCisgKi8KK0BQbGF0Zm9ybVRlc3RDYXNlLldyYXBJbkNvbW1hbmQKK3B1YmxpYyBjbGFzcyBHZW5lcmF0ZUphdmFkb2NUZXN0IGV4dGVuZHMgQ29kZUluc2lnaHRUZXN0Q2FzZSB7CisgIHB1YmxpYyB2b2lkIHRlc3QxKCkgdGhyb3dzIEV4Y2VwdGlvbiB7IGRvVGVzdCgpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3QyKCkgdGhyb3dzIEV4Y2VwdGlvbiB7IGRvVGVzdCgpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3QzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7IGRvVGVzdCgpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RJZGVhZGV2MjMyOCgpIHRocm93cyBFeGNlcHRpb24geyBkb1Rlc3QoKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0SWRlYWRldjIzMjhfMigpIHRocm93cyBFeGNlcHRpb24geyBkb1Rlc3QoKTsgfQorCisgIHByaXZhdGUgdm9pZCBkb1Rlc3QoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBTdHJpbmcgbmFtZSA9IGdldFRlc3ROYW1lKGZhbHNlKTsKKyAgICBjb25maWd1cmVCeUZpbGUoIi9jb2RlSW5zaWdodC9nZW5lcmF0ZUphdmFkb2MvYmVmb3JlIiArIG5hbWUgKyAiLmphdmEiKTsKKyAgICBwZXJmb3JtQWN0aW9uKCk7CisgICAgY2hlY2tSZXN1bHRCeUZpbGUoIi9jb2RlSW5zaWdodC9nZW5lcmF0ZUphdmFkb2MvYWZ0ZXIiICsgbmFtZSArICIuamF2YSIsIHRydWUpOworICB9CisKKyAgcHJpdmF0ZSB2b2lkIHBlcmZvcm1BY3Rpb24oKSB7CisgICAgRWRpdG9yQWN0aW9uTWFuYWdlciBhY3Rpb25NYW5hZ2VyID0gRWRpdG9yQWN0aW9uTWFuYWdlci5nZXRJbnN0YW5jZSgpOworICAgIEVkaXRvckFjdGlvbkhhbmRsZXIgYWN0aW9uSGFuZGxlciA9IGFjdGlvbk1hbmFnZXIuZ2V0QWN0aW9uSGFuZGxlcihJZGVBY3Rpb25zLkFDVElPTl9FRElUT1JfRU5URVIpOworICAgIGFjdGlvbkhhbmRsZXIuZXhlY3V0ZShteUVkaXRvciwgRGF0YU1hbmFnZXIuZ2V0SW5zdGFuY2UoKS5nZXREYXRhQ29udGV4dCgpKTsKKyAgICBUcmFpbGluZ1NwYWNlc1N0cmlwcGVyLnN0cmlwSWZOb3RDdXJyZW50TGluZShteUVkaXRvci5nZXREb2N1bWVudCgpLCBmYWxzZSk7CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9jb2RlSW5zaWdodC9JbXBsZW1lbnRBYnN0cmFjdEZyb21OZXdUZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovY29kZUluc2lnaHQvSW1wbGVtZW50QWJzdHJhY3RGcm9tTmV3VGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVhOTE1ZWEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovY29kZUluc2lnaHQvSW1wbGVtZW50QWJzdHJhY3RGcm9tTmV3VGVzdC5qYXZhCkBAIC0wLDAgKzEsMTggQEAKK3BhY2thZ2UgY29tLmludGVsbGlqLmNvZGVJbnNpZ2h0OworCitpbXBvcnQgY29tLmludGVsbGlqLmNvZGVJbnNpZ2h0LmRhZW1vbi5xdWlja0ZpeC5MaWdodFF1aWNrRml4QXZhaWxhYmlsaXR5VGVzdENhc2U7CisKKy8qKgorICogVXNlcjogYW5uYQorICogRGF0ZTogMTAvNy8xMQorICovCitwdWJsaWMgY2xhc3MgSW1wbGVtZW50QWJzdHJhY3RGcm9tTmV3VGVzdCBleHRlbmRzIExpZ2h0UXVpY2tGaXhBdmFpbGFiaWxpdHlUZXN0Q2FzZSB7CisgIHB1YmxpYyB2b2lkIHRlc3QoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb0FsbFRlc3RzKCk7CisgIH0KKworICBAT3ZlcnJpZGUKKyAgcHJvdGVjdGVkIFN0cmluZyBnZXRCYXNlUGF0aCgpIHsKKyAgICByZXR1cm4gIi9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvaW1wbGVtZW50QWJzdHJhY3RGcm9tTmV3IjsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNpZ2h0L0phdmFEb2N1bWVudGF0aW9uVGVzdC5ncm9vdnkgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovY29kZUluc2lnaHQvSmF2YURvY3VtZW50YXRpb25UZXN0Lmdyb292eQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MjZkZDlmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNpZ2h0L0phdmFEb2N1bWVudGF0aW9uVGVzdC5ncm9vdnkKQEAgLTAsMCArMSw1MiBAQAorLyoKKyAqIENvcHlyaWdodCAyMDAwLTIwMTIgSmV0QnJhaW5zIHMuci5vLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KK3BhY2thZ2UgY29tLmludGVsbGlqLmNvZGVJbnNpZ2h0CisKK2ltcG9ydCBjb20uaW50ZWxsaWouY29kZUluc2lnaHQubmF2aWdhdGlvbi5DdHJsTW91c2VIYW5kbGVyCitpbXBvcnQgY29tLmludGVsbGlqLnRlc3RGcmFtZXdvcmsuZml4dHVyZXMuTGlnaHRDb2RlSW5zaWdodEZpeHR1cmVUZXN0Q2FzZQorCisvKioKKyAqIEBhdXRob3IgcGV0ZXIKKyAqLworY2xhc3MgSmF2YURvY3VtZW50YXRpb25UZXN0IGV4dGVuZHMgTGlnaHRDb2RlSW5zaWdodEZpeHR1cmVUZXN0Q2FzZSB7CisKKyAgcHVibGljIHZvaWQgdGVzdEdlbmVyaWNNZXRob2QoKSB7CisgICAgbXlGaXh0dXJlLmNvbmZpZ3VyZUJ5VGV4dCAnYS5qYXZhJywgJycnCitjbGFzcyBCYXI8VD4geyBqYXZhLnV0aWwuTGlzdDxUPiBmb28oVCBwYXJhbSk7IH0KKworY2xhc3MgRm9vIHt7CisgIG5ldyBCYXI8U3RyaW5nPigpLmY8Y2FyZXQ+b28oKTsKK319CisnJycKKyAgICBkZWYgcmVmID0gbXlGaXh0dXJlLmZpbGUuZmluZFJlZmVyZW5jZUF0KG15Rml4dHVyZS5lZGl0b3IuY2FyZXRNb2RlbC5vZmZzZXQpCisgICAgYXNzZXJ0IEN0cmxNb3VzZUhhbmRsZXIuZ2V0SW5mbyhyZWYucmVzb2x2ZSgpLCByZWYuZWxlbWVudCkgPT0gIiIiQmFyCisgamF2YS51dGlsLkxpc3QmbHQ7amF2YS5sYW5nLlN0cmluZyZndDsgZm9vIChqYXZhLmxhbmcuU3RyaW5nIHBhcmFtKSIiIgorICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEdlbmVyaWNGaWVsZCgpIHsKKyAgICBteUZpeHR1cmUuY29uZmlndXJlQnlUZXh0ICdhLmphdmEnLCAnJycKK2NsYXNzIEJhcjxUPiB7IFQgZmllbGQ7IH0KKworY2xhc3MgRm9vIHt7CisgIG5ldyBCYXI8SW50ZWdlcj4oKS5maTxjYXJldD5lbGQKK319CisnJycKKyAgICBkZWYgcmVmID0gbXlGaXh0dXJlLmZpbGUuZmluZFJlZmVyZW5jZUF0KG15Rml4dHVyZS5lZGl0b3IuY2FyZXRNb2RlbC5vZmZzZXQpCisgICAgYXNzZXJ0IEN0cmxNb3VzZUhhbmRsZXIuZ2V0SW5mbyhyZWYucmVzb2x2ZSgpLCByZWYuZWxlbWVudCkgPT0gIiIiQmFyCisgamF2YS5sYW5nLkludGVnZXIgZmllbGQiIiIKKyAgfQorCit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovY29kZUluc2lnaHQvTnVsbGl0eUluZmVycmVyVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNpZ2h0L051bGxpdHlJbmZlcnJlclRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMjk2NGQ5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNpZ2h0L051bGxpdHlJbmZlcnJlclRlc3QuamF2YQpAQCAtMCwwICsxLDEwOCBAQAorLyoKKyAqIENvcHlyaWdodCAyMDAwLTIwMTAgSmV0QnJhaW5zIHMuci5vLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KK3BhY2thZ2UgY29tLmludGVsbGlqLmNvZGVJbnNpZ2h0OworCitpbXBvcnQgY29tLmludGVsbGlqLkphdmFUZXN0VXRpbDsKK2ltcG9ydCBjb20uaW50ZWxsaWouY29kZUluc3BlY3Rpb24uaW5mZXJOdWxsaXR5Lk51bGxpdHlJbmZlcnJlcjsKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS5yb290cy5Nb2R1bGVSb290TW9kaWZpY2F0aW9uVXRpbDsKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS51dGlsLkNvbXBhcmluZzsKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS52ZnMuSmFyRmlsZVN5c3RlbTsKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS52ZnMuTG9jYWxGaWxlU3lzdGVtOworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLnZmcy5WaXJ0dWFsRmlsZTsKKworLyoqCisgKiBVc2VyOiBhbm5hCisgKiBEYXRlOiBTZXAgMiwgMjAxMAorICovCitwdWJsaWMgY2xhc3MgTnVsbGl0eUluZmVycmVyVGVzdCBleHRlbmRzIENvZGVJbnNpZ2h0VGVzdENhc2UgeworICBAT3ZlcnJpZGUKKyAgcHJvdGVjdGVkIFN0cmluZyBnZXRUZXN0RGF0YVBhdGgoKSB7CisgICAgcmV0dXJuIEphdmFUZXN0VXRpbC5nZXRKYXZhVGVzdERhdGFQYXRoKCk7CisgIH0KKworICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tcGFyYW1zIGFuZCByZXR1cm4gdmFsdWVzLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIHB1YmxpYyB2b2lkIHRlc3RQYXJhbWV0ZXJQYXNzZWQyTm90TnVsbCgpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdChmYWxzZSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0UGFyYW1ldGVyQ2hlY2tlZEZvck51bGwoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoZmFsc2UpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFBhcmFtZXRlckRlcmVmZXJlbmNlZCgpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdChmYWxzZSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0UGFyYW1ldGVyQ2hlY2tlZEZvckluc3RhbmNlb2YoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICB0cnkgeworICAgICAgZG9UZXN0KGZhbHNlKTsKKyAgICAgIGZhaWwoIlNob3VsZCBpbmZlciBub3RoaW5nIik7CisgICAgfQorICAgIGNhdGNoIChSdW50aW1lRXhjZXB0aW9uIGUpIHsKKyAgICAgIGlmICghQ29tcGFyaW5nLnN0ckVxdWFsKGUuZ2V0TWVzc2FnZSgpLCBOdWxsaXR5SW5mZXJyZXIuTk9USElOR19GT1VORF9UT19JTkZFUikpIHsKKyAgICAgICAgZmFpbCgpOworICAgICAgfQorICAgIH0KKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RQYXJhbWV0ZXJVc2VkSW5Gb3JlYWNoSXRlcmF0ZWRWYWx1ZSgpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdChmYWxzZSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0Rm9yRWFjaFBhcmFtZXRlcigpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdCh0cnVlKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RDb25kaXRpb25hbFJldHVybk5vdE51bGwoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoZmFsc2UpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEFzc2VydFBhcmFtTm90TnVsbCgpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdCh0cnVlKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RUcnlFbnVtU3dpdGNoKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KHRydWUpOworICB9CisKKyAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLWZpZWxkcy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICBwdWJsaWMgdm9pZCB0ZXN0RmllbGRzQXNzaWdubWVudCgpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdChmYWxzZSk7CisgIH0KKworICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tbWV0aG9kcy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICBwdWJsaWMgdm9pZCB0ZXN0TWV0aG9kUmV0dXJuVmFsdWUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoZmFsc2UpOworICB9CisKKworICBwcml2YXRlIHZvaWQgZG9UZXN0KGJvb2xlYW4gYW5ub3RhdGVMb2NhbFZhcmlhYmxlcykgdGhyb3dzIEV4Y2VwdGlvbiAgeworICAgIGZpbmFsIFN0cmluZyBudWxsaXR5UGF0aCA9ICIvY29kZUluc2lnaHQvbnVsbGl0eWluZmVycmVyIjsKKyAgICBmaW5hbCBWaXJ0dWFsRmlsZSBhTGliID0gTG9jYWxGaWxlU3lzdGVtLmdldEluc3RhbmNlKCkuZmluZEZpbGVCeVBhdGgoZ2V0VGVzdERhdGFQYXRoKCkgKyBudWxsaXR5UGF0aCArICIvbGliL2Fubm90YXRpb25zLmphciIpOworICAgIGlmIChhTGliICE9IG51bGwpIHsKKyAgICAgIGZpbmFsIFZpcnR1YWxGaWxlIGZpbGUgPSBKYXJGaWxlU3lzdGVtLmdldEluc3RhbmNlKCkuZ2V0SmFyUm9vdEZvckxvY2FsRmlsZShhTGliKTsKKyAgICAgIGlmIChmaWxlICE9IG51bGwpIHsKKyAgICAgICAgTW9kdWxlUm9vdE1vZGlmaWNhdGlvblV0aWwuYWRkTW9kdWxlTGlicmFyeShteU1vZHVsZSwgZmlsZS5nZXRVcmwoKSk7CisgICAgICB9CisgICAgfQorCisgICAgY29uZmlndXJlQnlGaWxlKG51bGxpdHlQYXRoICsgIi9iZWZvcmUiICsgZ2V0VGVzdE5hbWUoZmFsc2UpICsgIi5qYXZhIik7CisgICAgZmluYWwgTnVsbGl0eUluZmVycmVyIG51bGxpdHlJbmZlcnJlciA9IG5ldyBOdWxsaXR5SW5mZXJyZXIoYW5ub3RhdGVMb2NhbFZhcmlhYmxlcywgZ2V0UHJvamVjdCgpKTsKKyAgICBudWxsaXR5SW5mZXJyZXIuY29sbGVjdChnZXRGaWxlKCkpOworICAgIG51bGxpdHlJbmZlcnJlci5hcHBseShnZXRQcm9qZWN0KCkpOworICAgIGNoZWNrUmVzdWx0QnlGaWxlKG51bGxpdHlQYXRoICsgIi9hZnRlciIgKyBnZXRUZXN0TmFtZShmYWxzZSkrICIuamF2YSIpOworICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovY29kZUluc2lnaHQvT3ZlcnJpZGVJbXBsZW1lbnRUZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovY29kZUluc2lnaHQvT3ZlcnJpZGVJbXBsZW1lbnRUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTM0OWJjYgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9jb2RlSW5zaWdodC9PdmVycmlkZUltcGxlbWVudFRlc3QuamF2YQpAQCAtMCwwICsxLDE1OSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDAwLTIwMTIgSmV0QnJhaW5zIHMuci5vLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KK3BhY2thZ2UgY29tLmludGVsbGlqLmNvZGVJbnNpZ2h0OworCitpbXBvcnQgY29tLmludGVsbGlqLmNvZGVJbnNpZ2h0LmdlbmVyYXRpb24uT3ZlcnJpZGVJbXBsZW1lbnRVdGlsOworaW1wb3J0IGNvbS5pbnRlbGxpai5jb2RlSW5zaWdodC5nZW5lcmF0aW9uLlBzaU1ldGhvZE1lbWJlcjsKK2ltcG9ydCBjb20uaW50ZWxsaWouY29kZUluc2lnaHQuaW50ZW50aW9uLmltcGwuSW1wbGVtZW50QWJzdHJhY3RNZXRob2RIYW5kbGVyOworaW1wb3J0IGNvbS5pbnRlbGxpai5sYW5nLmphdmEuSmF2YUxhbmd1YWdlOworaW1wb3J0IGNvbS5pbnRlbGxpai5wb20uamF2YS5MYW5ndWFnZUxldmVsOworaW1wb3J0IGNvbS5pbnRlbGxpai5wc2kuKjsKK2ltcG9ydCBjb20uaW50ZWxsaWoucHNpLmNvZGVTdHlsZS5Db2RlU3R5bGVTZXR0aW5nczsKK2ltcG9ydCBjb20uaW50ZWxsaWoucHNpLmNvZGVTdHlsZS5Db2RlU3R5bGVTZXR0aW5nc01hbmFnZXI7CitpbXBvcnQgY29tLmludGVsbGlqLnBzaS5jb2RlU3R5bGUuQ29tbW9uQ29kZVN0eWxlU2V0dGluZ3M7CitpbXBvcnQgY29tLmludGVsbGlqLnBzaS51dGlsLk1ldGhvZFNpZ25hdHVyZTsKK2ltcG9ydCBjb20uaW50ZWxsaWoucHNpLnV0aWwuUHNpVHJlZVV0aWw7CitpbXBvcnQgY29tLmludGVsbGlqLnBzaS51dGlsLlR5cGVDb252ZXJzaW9uVXRpbDsKK2ltcG9ydCBjb20uaW50ZWxsaWoudGVzdEZyYW1ld29yay5MaWdodENvZGVJbnNpZ2h0VGVzdENhc2U7CitpbXBvcnQgY29tLmludGVsbGlqLnV0aWwuRnVuY3Rpb25VdGlsOworaW1wb3J0IGNvbS5pbnRlbGxpai51dGlsLmNvbnRhaW5lcnMuQ29udGFpbmVyVXRpbDsKK2ltcG9ydCBvcmcuamV0YnJhaW5zLmFubm90YXRpb25zLk51bGxhYmxlOworCitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb25zOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCisvKioKKyAqIEBhdXRob3IgdmVuCisgKi8KK3B1YmxpYyBjbGFzcyBPdmVycmlkZUltcGxlbWVudFRlc3QgZXh0ZW5kcyBMaWdodENvZGVJbnNpZ2h0VGVzdENhc2UgeworICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQkFTRV9ESVIgPSAiL2NvZGVJbnNpZ2h0L292ZXJyaWRlSW1wbGVtZW50LyI7CisKKyAgQE92ZXJyaWRlCisgIHByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgc3VwZXIuc2V0VXAoKTsKKyAgICBzZXRMYW5ndWFnZUxldmVsKExhbmd1YWdlTGV2ZWwuSkRLXzFfNSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0U2ltcGxlKCkgeyBkb1Rlc3QodHJ1ZSk7IH0KKyAgcHVibGljIHZvaWQgdGVzdEFubm90YXRpb24oKSB7IGRvVGVzdCh0cnVlKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0SW5jb21wbGV0ZSgpIHsgZG9UZXN0KGZhbHNlKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0U3Vic3RpdHV0aW9uSW5UeXBlUGFyYW1ldGVyc0xpc3QoKSB7IGRvVGVzdChmYWxzZSk7IH0KKyAgcHVibGljIHZvaWQgdGVzdFRlc3RNaXNzZWQoKSB7IGRvVGVzdChmYWxzZSk7IH0KKyAgcHVibGljIHZvaWQgdGVzdFdpbGRjYXJkKCkgeyBkb1Rlc3QoZmFsc2UpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RUeXBlUGFyYW0oKSB7IGRvVGVzdChmYWxzZSk7IH0KKyAgcHVibGljIHZvaWQgdGVzdEludGVyZmFjZUFuZEFic3RyYWN0Q2xhc3MoKSB7IGRvVGVzdChmYWxzZSk7IH0KKyAgcHVibGljIHZvaWQgdGVzdFJhd1N1cGVyKCkgeyBkb1Rlc3QoZmFsc2UpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RTdWJzdGl0dXRlQm91bmRJbk1ldGhvZFR5cGVQYXJhbSgpIHsgZG9UZXN0KGZhbHNlKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0Q2xvbmUoKSB7IGRvVGVzdChmYWxzZSk7IH0KKyAgcHVibGljIHZvaWQgdGVzdE9uVGhlTGluZVdpdGhFeGlzdGluZ0V4cHJlc3Npb24oKSB7IGRvVGVzdChmYWxzZSk7IH0KKyAgcHVibGljIHZvaWQgdGVzdFNpbXBsaWZ5T2JqZWN0V2lsZGNhcmQoKSB7IGRvVGVzdChmYWxzZSk7IH0KKyAgcHVibGljIHZvaWQgdGVzdEVyYXN1cmVXaWxkY2FyZCgpIHsgZG9UZXN0KGZhbHNlKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0TXVsdGlwbGVJbnRlcmZhY2VJbmhlcml0YW5jZSgpIHsgZG9UZXN0KGZhbHNlKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0UmVzb2x2ZVR5cGVQYXJhbUNvbmZsaWN0KCkgeyBkb1Rlc3QoZmFsc2UpOyB9CisKKyAgcHVibGljIHZvaWQgdGVzdEltcGxlbWVudEV4dGVuc2lvbk1ldGhvZHMoKSB7IGRvVGVzdDgoZmFsc2UsIHRydWUpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3REb05vdEltcGxlbWVudEV4dGVuc2lvbk1ldGhvZHMoKSB7IGRvVGVzdDgoZmFsc2UsIHRydWUpOyB9CisKKyAgcHVibGljIHZvaWQgdGVzdExvbmdGaW5hbFBhcmFtZXRlckxpc3QoKSB7CisgICAgQ29kZVN0eWxlU2V0dGluZ3MgY29kZVN0eWxlU2V0dGluZ3MgPSBDb2RlU3R5bGVTZXR0aW5nc01hbmFnZXIuZ2V0U2V0dGluZ3MoZ2V0UHJvamVjdCgpKS5jbG9uZSgpOworICAgIHRyeSB7CisgICAgICBDb21tb25Db2RlU3R5bGVTZXR0aW5ncyBqYXZhU2V0dGluZ3MgPSBjb2RlU3R5bGVTZXR0aW5ncy5nZXRDb21tb25TZXR0aW5ncyhKYXZhTGFuZ3VhZ2UuSU5TVEFOQ0UpOworICAgICAgY29kZVN0eWxlU2V0dGluZ3MuUklHSFRfTUFSR0lOID0gODA7CisgICAgICBqYXZhU2V0dGluZ3MuS0VFUF9MSU5FX0JSRUFLUyA9IHRydWU7CisgICAgICBjb2RlU3R5bGVTZXR0aW5ncy5HRU5FUkFURV9GSU5BTF9QQVJBTUVURVJTID0gdHJ1ZTsKKyAgICAgIGphdmFTZXR0aW5ncy5NRVRIT0RfUEFSQU1FVEVSU19XUkFQID0gQ29tbW9uQ29kZVN0eWxlU2V0dGluZ3MuV1JBUF9PTl9FVkVSWV9JVEVNOworICAgICAgQ29kZVN0eWxlU2V0dGluZ3NNYW5hZ2VyLmdldEluc3RhbmNlKGdldFByb2plY3QoKSkuc2V0VGVtcG9yYXJ5U2V0dGluZ3MoY29kZVN0eWxlU2V0dGluZ3MpOworICAgICAgZG9UZXN0KGZhbHNlKTsKKyAgICB9CisgICAgZmluYWxseSB7CisgICAgICBDb2RlU3R5bGVTZXR0aW5nc01hbmFnZXIuZ2V0SW5zdGFuY2UoZ2V0UHJvamVjdCgpKS5kcm9wVGVtcG9yYXJ5U2V0dGluZ3MoKTsKKyAgICB9CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0TG9uZ1BhcmFtZXRlckxpc3QoKSB7CisgICAgQ29kZVN0eWxlU2V0dGluZ3MgY29kZVN0eWxlU2V0dGluZ3MgPSBDb2RlU3R5bGVTZXR0aW5nc01hbmFnZXIuZ2V0U2V0dGluZ3MoZ2V0UHJvamVjdCgpKS5jbG9uZSgpOworICAgIHRyeSB7CisgICAgICBDb21tb25Db2RlU3R5bGVTZXR0aW5ncyBqYXZhU2V0dGluZ3MgPSBjb2RlU3R5bGVTZXR0aW5ncy5nZXRDb21tb25TZXR0aW5ncyhKYXZhTGFuZ3VhZ2UuSU5TVEFOQ0UpOworICAgICAgY29kZVN0eWxlU2V0dGluZ3MuUklHSFRfTUFSR0lOID0gODA7CisgICAgICBqYXZhU2V0dGluZ3MuS0VFUF9MSU5FX0JSRUFLUyA9IGZhbHNlOworICAgICAgY29kZVN0eWxlU2V0dGluZ3MuR0VORVJBVEVfRklOQUxfUEFSQU1FVEVSUyA9IGZhbHNlOworICAgICAgamF2YVNldHRpbmdzLk1FVEhPRF9QQVJBTUVURVJTX1dSQVAgPSBDb21tb25Db2RlU3R5bGVTZXR0aW5ncy5XUkFQX09OX0VWRVJZX0lURU07CisgICAgICBDb2RlU3R5bGVTZXR0aW5nc01hbmFnZXIuZ2V0SW5zdGFuY2UoZ2V0UHJvamVjdCgpKS5zZXRUZW1wb3JhcnlTZXR0aW5ncyhjb2RlU3R5bGVTZXR0aW5ncyk7CisgICAgICBkb1Rlc3QoZmFsc2UpOworICAgIH0KKyAgICBmaW5hbGx5IHsKKyAgICAgIENvZGVTdHlsZVNldHRpbmdzTWFuYWdlci5nZXRJbnN0YW5jZShnZXRQcm9qZWN0KCkpLmRyb3BUZW1wb3JhcnlTZXR0aW5ncygpOworICAgIH0KKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RJbXBsZW1lbnRlZENvbnN0cnVjdG9yc0V4Y2x1ZGVkKCkgeworICAgIGNvbmZpZ3VyZUJ5RmlsZShCQVNFX0RJUiArIGdldFRlc3ROYW1lKGZhbHNlKSArICIuamF2YSIpOworICAgIGludCBvZmZzZXQgPSBnZXRFZGl0b3IoKS5nZXRDYXJldE1vZGVsKCkuZ2V0T2Zmc2V0KCk7CisgICAgUHNpRWxlbWVudCBjb250ZXh0ID0gZ2V0RmlsZSgpLmZpbmRFbGVtZW50QXQob2Zmc2V0KTsKKyAgICBQc2lDbGFzcyBwc2lDbGFzcyA9IFBzaVRyZWVVdGlsLmdldFBhcmVudE9mVHlwZShjb250ZXh0LCBQc2lDbGFzcy5jbGFzcyk7CisgICAgYXNzZXJ0IHBzaUNsYXNzICE9IG51bGw7CisKKyAgICBmaW5hbCBDb2xsZWN0aW9uPE1ldGhvZFNpZ25hdHVyZT4gc2lnbmF0dXJlcyA9IE92ZXJyaWRlSW1wbGVtZW50VXRpbC5nZXRNZXRob2RTaWduYXR1cmVzVG9PdmVycmlkZShwc2lDbGFzcyk7CisgICAgZmluYWwgQ29sbGVjdGlvbjxTdHJpbmc+IHN0cmluZ3MgPSBDb250YWluZXJVdGlsLm1hcChzaWduYXR1cmVzLCBGdW5jdGlvblV0aWwuc3RyaW5nKCkpOworCisgICAgYXNzZXJ0VHJ1ZShzdHJpbmdzLnRvU3RyaW5nKCksIHN0cmluZ3MuY29udGFpbnMoIkhpZXJhcmNoaWNhbE1ldGhvZFNpZ25hdHVyZUltcGw6IEEoW1BzaVR5cGU6U3RyaW5nXSkiKSk7CisgICAgYXNzZXJ0RmFsc2Uoc3RyaW5ncy50b1N0cmluZygpLCBzdHJpbmdzLmNvbnRhaW5zKCJIaWVyYXJjaGljYWxNZXRob2RTaWduYXR1cmVJbXBsOiBBKFtdKSIpKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RFbnVtQ29uc3RhbnQoKSB7CisgICAgU3RyaW5nIG5hbWUgPSBnZXRUZXN0TmFtZShmYWxzZSk7CisgICAgY29uZmlndXJlQnlGaWxlKEJBU0VfRElSICsgImJlZm9yZSIgKyBuYW1lICsgIi5qYXZhIik7CisgICAgaW50IG9mZnNldCA9IGdldEVkaXRvcigpLmdldENhcmV0TW9kZWwoKS5nZXRPZmZzZXQoKTsKKyAgICBQc2lFbGVtZW50IGNvbnRleHQgPSBnZXRGaWxlKCkuZmluZEVsZW1lbnRBdChvZmZzZXQpOworICAgIFBzaU1ldGhvZCBwc2lNZXRob2QgPSBQc2lUcmVlVXRpbC5nZXRQYXJlbnRPZlR5cGUoY29udGV4dCwgUHNpTWV0aG9kLmNsYXNzKTsKKyAgICBhc3NlcnQgcHNpTWV0aG9kICE9IG51bGw7CisgICAgZmluYWwgUHNpQ2xhc3MgYUNsYXNzID0gcHNpTWV0aG9kLmdldENvbnRhaW5pbmdDbGFzcygpOworICAgIGFzc2VydCBhQ2xhc3MgIT0gbnVsbCAmJiBhQ2xhc3MuaXNFbnVtKCk7CisgICAgZmluYWwgUHNpRmllbGRbXSBmaWVsZHMgPSBhQ2xhc3MuZ2V0RmllbGRzKCk7CisgICAgbmV3IEltcGxlbWVudEFic3RyYWN0TWV0aG9kSGFuZGxlcihnZXRQcm9qZWN0KCksIGdldEVkaXRvcigpLCBwc2lNZXRob2QpLmltcGxlbWVudEluQ2xhc3MoZmllbGRzKTsKKyAgICBjaGVja1Jlc3VsdEJ5RmlsZShCQVNFX0RJUiArICJhZnRlciIgKyBuYW1lICsgIi5qYXZhIik7CisgIH0KKworICBwcml2YXRlIHZvaWQgZG9UZXN0KGJvb2xlYW4gY29weUphdmFkb2MpIHsgZG9UZXN0KGNvcHlKYXZhZG9jLCBudWxsKTsgfQorCisgIHByaXZhdGUgdm9pZCBkb1Rlc3Q4KGJvb2xlYW4gY29weUphdmFkb2MsIEBOdWxsYWJsZSBCb29sZWFuIHRvSW1wbGVtZW50KSB7CisgICAgc2V0TGFuZ3VhZ2VMZXZlbChMYW5ndWFnZUxldmVsLkpES18xXzgpOworICAgIGRvVGVzdChjb3B5SmF2YWRvYywgdG9JbXBsZW1lbnQpOworICB9CisKKyAgcHJpdmF0ZSB2b2lkIGRvVGVzdChib29sZWFuIGNvcHlKYXZhZG9jLCBATnVsbGFibGUgQm9vbGVhbiB0b0ltcGxlbWVudCkgeworICAgIFN0cmluZyBuYW1lID0gZ2V0VGVzdE5hbWUoZmFsc2UpOworICAgIGNvbmZpZ3VyZUJ5RmlsZShCQVNFX0RJUiArICJiZWZvcmUiICsgbmFtZSArICIuamF2YSIpOworICAgIGludCBvZmZzZXQgPSBnZXRFZGl0b3IoKS5nZXRDYXJldE1vZGVsKCkuZ2V0T2Zmc2V0KCk7CisgICAgUHNpRWxlbWVudCBjb250ZXh0ID0gZ2V0RmlsZSgpLmZpbmRFbGVtZW50QXQob2Zmc2V0KTsKKyAgICBQc2lDbGFzcyBwc2lDbGFzcyA9IFBzaVRyZWVVdGlsLmdldFBhcmVudE9mVHlwZShjb250ZXh0LCBQc2lDbGFzcy5jbGFzcyk7CisgICAgYXNzZXJ0IHBzaUNsYXNzICE9IG51bGw7CisgICAgaWYgKHRvSW1wbGVtZW50ID09IG51bGwpIHsKKyAgICAgIFBzaUNsYXNzVHlwZVtdIGltcGxlbWVudCA9IHBzaUNsYXNzLmdldEltcGxlbWVudHNMaXN0VHlwZXMoKTsKKyAgICAgIGZpbmFsIFBzaUNsYXNzIHN1cGVyQ2xhc3MgPSBpbXBsZW1lbnQubGVuZ3RoID09IDAgPyBwc2lDbGFzcy5nZXRTdXBlckNsYXNzKCkgOiBpbXBsZW1lbnRbMF0ucmVzb2x2ZSgpOworICAgICAgYXNzZXJ0IHN1cGVyQ2xhc3MgIT0gbnVsbDsKKyAgICAgIFBzaU1ldGhvZCBtZXRob2QgPSBzdXBlckNsYXNzLmdldE1ldGhvZHMoKVswXTsKKyAgICAgIGZpbmFsIFBzaVN1YnN0aXR1dG9yIHN1YnN0aXR1dG9yID0gVHlwZUNvbnZlcnNpb25VdGlsLmdldFN1cGVyQ2xhc3NTdWJzdGl0dXRvcihzdXBlckNsYXNzLCBwc2lDbGFzcywgUHNpU3Vic3RpdHV0b3IuRU1QVFkpOworICAgICAgZmluYWwgTGlzdDxQc2lNZXRob2RNZW1iZXI+IGNhbmRpZGF0ZXMgPSBDb2xsZWN0aW9ucy5zaW5nbGV0b25MaXN0KG5ldyBQc2lNZXRob2RNZW1iZXIobWV0aG9kLCBzdWJzdGl0dXRvcikpOworICAgICAgT3ZlcnJpZGVJbXBsZW1lbnRVdGlsLm92ZXJyaWRlT3JJbXBsZW1lbnRNZXRob2RzSW5SaWdodFBsYWNlKGdldEVkaXRvcigpLCBwc2lDbGFzcywgY2FuZGlkYXRlcywgY29weUphdmFkb2MsIHRydWUpOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgIE92ZXJyaWRlSW1wbGVtZW50VXRpbC5jaG9vc2VBbmRPdmVycmlkZU9ySW1wbGVtZW50TWV0aG9kcyhnZXRQcm9qZWN0KCksIGdldEVkaXRvcigpLCBwc2lDbGFzcywgdG9JbXBsZW1lbnQpOworICAgIH0KKyAgICBjaGVja1Jlc3VsdEJ5RmlsZShCQVNFX0RJUiArICJhZnRlciIgKyBuYW1lICsgIi5qYXZhIik7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovY29kZUluc2lnaHQvU3VwcHJlc3NFeHRlcm5hbFRlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9jb2RlSW5zaWdodC9TdXBwcmVzc0V4dGVybmFsVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI0YmNjZTEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovY29kZUluc2lnaHQvU3VwcHJlc3NFeHRlcm5hbFRlc3QuamF2YQpAQCAtMCwwICsxLDEwMSBAQAorLyoKKyAqIFVzZXI6IGFubmEKKyAqIERhdGU6IDE3LUp1bi0yMDEwCisgKi8KK3BhY2thZ2UgY29tLmludGVsbGlqLmNvZGVJbnNpZ2h0OworCitpbXBvcnQgY29tLmludGVsbGlqLmNvZGVJbnNpZ2h0LmludGVudGlvbi5JbnRlbnRpb25BY3Rpb247CitpbXBvcnQgY29tLmludGVsbGlqLmNvZGVJbnNwZWN0aW9uLnNpbGx5QXNzaWdubWVudC5TaWxseUFzc2lnbm1lbnRJbnNwZWN0aW9uOworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLmFwcGxpY2F0aW9uLkFwcGxpY2F0aW9uTWFuYWdlcjsKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS5hcHBsaWNhdGlvbi5leC5QYXRoTWFuYWdlckV4OworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLm1vZHVsZS5Nb2R1bGU7CitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkucm9vdHMuSmF2YU1vZHVsZUV4dGVybmFsUGF0aHM7CitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkucm9vdHMuTGFuZ3VhZ2VMZXZlbFByb2plY3RFeHRlbnNpb247CitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkucm9vdHMuTW9kaWZpYWJsZVJvb3RNb2RlbDsKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS5yb290cy5Nb2R1bGVSb290TWFuYWdlcjsKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS52ZnMuVmZzVXRpbENvcmU7CitpbXBvcnQgY29tLmludGVsbGlqLnBvbS5qYXZhLkxhbmd1YWdlTGV2ZWw7CitpbXBvcnQgY29tLmludGVsbGlqLnBzaS5KYXZhUHNpRmFjYWRlOworaW1wb3J0IGNvbS5pbnRlbGxpai50ZXN0RnJhbWV3b3JrLklkZWFUZXN0Q2FzZTsKK2ltcG9ydCBjb20uaW50ZWxsaWoudGVzdEZyYW1ld29yay5Vc2VmdWxUZXN0Q2FzZTsKK2ltcG9ydCBjb20uaW50ZWxsaWoudGVzdEZyYW1ld29yay5idWlsZGVycy5KYXZhTW9kdWxlRml4dHVyZUJ1aWxkZXI7CitpbXBvcnQgY29tLmludGVsbGlqLnRlc3RGcmFtZXdvcmsuZml4dHVyZXMuKjsKKworaW1wb3J0IGphdmEuaW8uRmlsZTsKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworCitwdWJsaWMgY2xhc3MgU3VwcHJlc3NFeHRlcm5hbFRlc3QgZXh0ZW5kcyBVc2VmdWxUZXN0Q2FzZSB7CisgIHByb3RlY3RlZCBDb2RlSW5zaWdodFRlc3RGaXh0dXJlIG15Rml4dHVyZTsKKworICBwcml2YXRlIExhbmd1YWdlTGV2ZWwgbXlMYW5ndWFnZUxldmVsOworCisgIHB1YmxpYyBTdXBwcmVzc0V4dGVybmFsVGVzdCgpIHsKKyAgICBJZGVhVGVzdENhc2UuaW5pdFBsYXRmb3JtUHJlZml4KCk7CisgIH0KKworICBAT3ZlcnJpZGUKKyAgcHVibGljIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBzdXBlci5zZXRVcCgpOworICAgIGZpbmFsIElkZWFUZXN0Rml4dHVyZUZhY3RvcnkgZml4dHVyZUZhY3RvcnkgPSBJZGVhVGVzdEZpeHR1cmVGYWN0b3J5LmdldEZpeHR1cmVGYWN0b3J5KCk7CisgICAgZmluYWwgVGVzdEZpeHR1cmVCdWlsZGVyPElkZWFQcm9qZWN0VGVzdEZpeHR1cmU+IHRlc3RGaXh0dXJlQnVpbGRlciA9IGZpeHR1cmVGYWN0b3J5LmNyZWF0ZUZpeHR1cmVCdWlsZGVyKGdldE5hbWUoKSk7CisgICAgbXlGaXh0dXJlID0gSmF2YVRlc3RGaXh0dXJlRmFjdG9yeS5nZXRGaXh0dXJlRmFjdG9yeSgpLmNyZWF0ZUNvZGVJbnNpZ2h0Rml4dHVyZSh0ZXN0Rml4dHVyZUJ1aWxkZXIuZ2V0Rml4dHVyZSgpKTsKKyAgICBteUZpeHR1cmUuc2V0VGVzdERhdGFQYXRoKFBhdGhNYW5hZ2VyRXguZ2V0VGVzdERhdGFQYXRoKCkgKyAiL2NvZGVJbnNpZ2h0L2V4dGVybmFsQW5ub3RhdGlvbnMiKTsKKyAgICBmaW5hbCBKYXZhTW9kdWxlRml4dHVyZUJ1aWxkZXIgYnVpbGRlciA9IHRlc3RGaXh0dXJlQnVpbGRlci5hZGRNb2R1bGUoSmF2YU1vZHVsZUZpeHR1cmVCdWlsZGVyLmNsYXNzKTsKKyAgICBuZXcgRmlsZShteUZpeHR1cmUuZ2V0VGVtcERpclBhdGgoKSArICIvc3JjLyIpLm1rZGlyKCk7CisgICAgYnVpbGRlci5hZGRDb250ZW50Um9vdChteUZpeHR1cmUuZ2V0VGVtcERpclBhdGgoKSkuYWRkU291cmNlUm9vdCgic3JjIik7CisgICAgYnVpbGRlci5zZXRNb2NrSmRrTGV2ZWwoSmF2YU1vZHVsZUZpeHR1cmVCdWlsZGVyLk1vY2tKZGtMZXZlbC5qZGsxNSk7CisgICAgbXlGaXh0dXJlLmVuYWJsZUluc3BlY3Rpb25zKG5ldyBTaWxseUFzc2lnbm1lbnRJbnNwZWN0aW9uKCkpOworICAgIG15Rml4dHVyZS5zZXRVcCgpOworCisgICAgYWRkQW5ub3RhdGlvbnNNb2R1bGVSb290KCk7CisKKyAgICBmaW5hbCBKYXZhUHNpRmFjYWRlIGZhY2FkZSA9IEphdmFQc2lGYWNhZGUuZ2V0SW5zdGFuY2UobXlGaXh0dXJlLmdldFByb2plY3QoKSk7CisgICAgbXlMYW5ndWFnZUxldmVsID0gTGFuZ3VhZ2VMZXZlbFByb2plY3RFeHRlbnNpb24uZ2V0SW5zdGFuY2UoZmFjYWRlLmdldFByb2plY3QoKSkuZ2V0TGFuZ3VhZ2VMZXZlbCgpOworICAgIExhbmd1YWdlTGV2ZWxQcm9qZWN0RXh0ZW5zaW9uLmdldEluc3RhbmNlKGZhY2FkZS5nZXRQcm9qZWN0KCkpLnNldExhbmd1YWdlTGV2ZWwoTGFuZ3VhZ2VMZXZlbC5KREtfMV81KTsKKyAgfQorCisgIHByaXZhdGUgdm9pZCBhZGRBbm5vdGF0aW9uc01vZHVsZVJvb3QoKSB0aHJvd3MgSU9FeGNlcHRpb24geworICAgIG15Rml4dHVyZS5jb3B5RGlyZWN0b3J5VG9Qcm9qZWN0KCJjb250ZW50L2Fubm8vc3VwcHJlc3NlZCIsICJjb250ZW50L2Fubm8vc3VwcHJlc3NlZCIpOworICAgIEFwcGxpY2F0aW9uTWFuYWdlci5nZXRBcHBsaWNhdGlvbigpLnJ1bldyaXRlQWN0aW9uKG5ldyBSdW5uYWJsZSgpIHsKKyAgICAgIEBPdmVycmlkZQorICAgICAgcHVibGljIHZvaWQgcnVuKCkgeworICAgICAgICBmaW5hbCBNb2R1bGUgbW9kdWxlID0gbXlGaXh0dXJlLmdldE1vZHVsZSgpOworICAgICAgICBmaW5hbCBNb2RpZmlhYmxlUm9vdE1vZGVsIG1vZGVsID0gTW9kdWxlUm9vdE1hbmFnZXIuZ2V0SW5zdGFuY2UobW9kdWxlKS5nZXRNb2RpZmlhYmxlTW9kZWwoKTsKKyAgICAgICAgZmluYWwgU3RyaW5nIHVybCA9IFZmc1V0aWxDb3JlLnBhdGhUb1VybChteUZpeHR1cmUuZ2V0VGVtcERpclBhdGgoKSArICIvY29udGVudC9hbm5vIik7CisgICAgICAgIG1vZGVsLmdldE1vZHVsZUV4dGVuc2lvbihKYXZhTW9kdWxlRXh0ZXJuYWxQYXRocy5jbGFzcykuc2V0RXh0ZXJuYWxBbm5vdGF0aW9uVXJscyhuZXcgU3RyaW5nW117dXJsfSk7CisgICAgICAgIG1vZGVsLmNvbW1pdCgpOworICAgICAgfQorICAgIH0pOworICB9CisKKworICBAT3ZlcnJpZGUKKyAgcHVibGljIHZvaWQgdGVhckRvd24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBMYW5ndWFnZUxldmVsUHJvamVjdEV4dGVuc2lvbi5nZXRJbnN0YW5jZShteUZpeHR1cmUuZ2V0UHJvamVjdCgpKS5zZXRMYW5ndWFnZUxldmVsKG15TGFuZ3VhZ2VMZXZlbCk7CisgICAgbXlGaXh0dXJlLnRlYXJEb3duKCk7CisgICAgbXlGaXh0dXJlID0gbnVsbDsKKyAgICBzdXBlci50ZWFyRG93bigpOworICB9CisKKworICBwcml2YXRlIHZvaWQgZG9UZXN0KFN0cmluZyB0ZXN0TmFtZSkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZmluYWwgSW50ZW50aW9uQWN0aW9uIGFjdGlvbiA9IG15Rml4dHVyZS5nZXRBdmFpbGFibGVJbnRlbnRpb24oIlN1cHByZXNzIGZvciBtZXRob2QiLCAic3JjL3N1cHByZXNzZWQvIiArIHRlc3ROYW1lICsgIi5qYXZhIik7CisgICAgYXNzZXJ0Tm90TnVsbChhY3Rpb24pOworICAgIG15Rml4dHVyZS5sYXVuY2hBY3Rpb24oYWN0aW9uKTsKKyAgICBteUZpeHR1cmUuY2hlY2tSZXN1bHRCeUZpbGUoImNvbnRlbnQvYW5uby9zdXBwcmVzc2VkL2Fubm90YXRpb25zLnhtbCIsICJjb250ZW50L2Fubm8vc3VwcHJlc3NlZC9hbm5vdGF0aW9ucyIgKyB0ZXN0TmFtZSArICJfYWZ0ZXIueG1sIiwgdHJ1ZSk7CisgIH0KKworCisgIHB1YmxpYyB2b2lkIHRlc3ROZXdTdXBwcmVzcygpIHRocm93cyBUaHJvd2FibGUgeworICAgIGRvVGVzdCgiTmV3U3VwcHJlc3MiKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RFeGlzdGluZ0V4dGVybmFsTmFtZSgpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdCgiRXhpc3RpbmdFeHRlcm5hbE5hbWUiKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RTZWNvbmRTdXBwcmVzc2lvbigpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdCgiU2Vjb25kU3VwcHJlc3Npb24iKTsKKyAgfQorCit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovY29kZUluc2lnaHQvY29tcGxldGlvbi9DbGFzc05hbWVDb21wbGV0aW9uVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vQ2xhc3NOYW1lQ29tcGxldGlvblRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wM2YxMWFhCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vQ2xhc3NOYW1lQ29tcGxldGlvblRlc3QuamF2YQpAQCAtMCwwICsxLDI2OSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDAwLTIwMTIgSmV0QnJhaW5zIHMuci5vLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KK3BhY2thZ2UgY29tLmludGVsbGlqLmNvZGVJbnNpZ2h0LmNvbXBsZXRpb247CisKK2ltcG9ydCBjb20uaW50ZWxsaWouSmF2YVRlc3RVdGlsOworaW1wb3J0IGNvbS5pbnRlbGxpai5jb2RlSW5zaWdodC5sb29rdXAuTG9va3VwTWFuYWdlcjsKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS5hcHBsaWNhdGlvbi5BcHBsaWNhdGlvbk1hbmFnZXI7CitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkuZmlsZUVkaXRvci5GaWxlRG9jdW1lbnRNYW5hZ2VyOworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLnJvb3RzLkxhbmd1YWdlTGV2ZWxQcm9qZWN0RXh0ZW5zaW9uOworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLnZmcy5WaXJ0dWFsRmlsZTsKK2ltcG9ydCBjb20uaW50ZWxsaWoucG9tLmphdmEuTGFuZ3VhZ2VMZXZlbDsKK2ltcG9ydCBjb20uaW50ZWxsaWoudGVzdEZyYW1ld29yay5UZXN0RGF0YVBhdGg7CisKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworCitAVGVzdERhdGFQYXRoKCIkQ09OVEVOVF9ST09UL3Rlc3REYXRhIikKK3B1YmxpYyBjbGFzcyBDbGFzc05hbWVDb21wbGV0aW9uVGVzdCBleHRlbmRzIExpZ2h0Rml4dHVyZUNvbXBsZXRpb25UZXN0Q2FzZSB7CisKKyAgQE92ZXJyaWRlCisgIHByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgc3VwZXIuc2V0VXAoKTsKKyAgICBMYW5ndWFnZUxldmVsUHJvamVjdEV4dGVuc2lvbi5nZXRJbnN0YW5jZShnZXRQcm9qZWN0KCkpLnNldExhbmd1YWdlTGV2ZWwoTGFuZ3VhZ2VMZXZlbC5KREtfMV83KTsKKyAgfQorCisgIEBPdmVycmlkZQorICBwcm90ZWN0ZWQgU3RyaW5nIGdldEJhc2VQYXRoKCkgeworICAgIHJldHVybiBKYXZhVGVzdFV0aWwuZ2V0UmVsYXRpdmVKYXZhVGVzdERhdGFQYXRoKCkgKyAiL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vY2xhc3NOYW1lLyI7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0SW1wb3J0QWZ0ZXJOZXcoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBjcmVhdGVDbGFzcygicGFja2FnZSBwYWNrOyBwdWJsaWMgY2xhc3MgQUFDbGFzcyB7fSIpOworICAgIGNyZWF0ZUNsYXNzKCJwYWNrYWdlIHBhY2s7IHB1YmxpYyBjbGFzcyBXaXRoSW5uZXJBQ2xhc3N7XG4iICsKKyAgICAgICAgICAgICAgICAiICBwdWJsaWMgc3RhdGljIGNsYXNzIElubmVye31cbiIgKworICAgICAgICAgICAgICAgICJ9Iik7CisKKyAgICBTdHJpbmcgcGF0aCA9ICIvaW1wb3J0QWZ0ZXJOZXciOworCisgICAgY29uZmlndXJlQnlGaWxlKHBhdGggKyAiL2JlZm9yZTEuamF2YSIpOworICAgIGNoZWNrUmVzdWx0QnlGaWxlKHBhdGggKyAiL2FmdGVyMS5qYXZhIik7CisKKyAgICBjb25maWd1cmVCeUZpbGUocGF0aCArICIvYmVmb3JlMi5qYXZhIik7CisgICAgc2VsZWN0SXRlbShteUl0ZW1zWzBdKTsKKyAgICBjaGVja1Jlc3VsdEJ5RmlsZShwYXRoICsgIi9hZnRlcjIuamF2YSIpOworICB9CisKKyAgcHJpdmF0ZSB2b2lkIGNyZWF0ZUNsYXNzKFN0cmluZyB0ZXh0KSB7CisgICAgbXlGaXh0dXJlLmFkZENsYXNzKHRleHQpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEFmdGVyTmV3VGhyb3dhYmxlMSgpIHRocm93cyBFeGNlcHRpb24geworICAgIGFkZENsYXNzZXNGb3JBZnRlck5ld1Rocm93YWJsZSgpOworICAgIFN0cmluZyBwYXRoID0gIi9hZnRlck5ld1Rocm93YWJsZSI7CisKKyAgICBjb25maWd1cmVCeUZpbGUocGF0aCArICIvYmVmb3JlMS5qYXZhIik7CisgICAgbXlGaXh0dXJlLnR5cGUoJ1xuJyk7CisgICAgY2hlY2tSZXN1bHRCeUZpbGUocGF0aCArICIvYWZ0ZXIxLmphdmEiKTsKKyAgfQorCisgIHByaXZhdGUgdm9pZCBhZGRDbGFzc2VzRm9yQWZ0ZXJOZXdUaHJvd2FibGUoKSB0aHJvd3MgSU9FeGNlcHRpb24geworICAgIGNyZWF0ZUNsYXNzKCJwdWJsaWMgY2xhc3MgT3VyRXhjZXB0aW9uIGV4dGVuZHMgVGhyb3dhYmxle30iKTsKKyAgICBjcmVhdGVDbGFzcygicHVibGljIGNsYXNzIE91ck5vdEV4Y2VwdGlvbiB7XG4iICsKKyAgICAgICAgICAgICAgICAiICBwdWJsaWMgc3RhdGljIGNsYXNzIElubmVyRXhjZXB0aW9uIGV4dGVuZHMgVGhyb3dhYmxle31cbiIgKworICAgICAgICAgICAgICAgICIgIHB1YmxpYyBzdGF0aWMgY2xhc3MgSW5uZXJOb25FeGNlcHRpb257fVxuIiArCisgICAgICAgICAgICAgICAgIn0iKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RBZnRlck5ld1Rocm93YWJsZTIoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBhZGRDbGFzc2VzRm9yQWZ0ZXJOZXdUaHJvd2FibGUoKTsKKyAgICBTdHJpbmcgcGF0aCA9ICIvYWZ0ZXJOZXdUaHJvd2FibGUiOworCisgICAgY29uZmlndXJlQnlGaWxlKHBhdGggKyAiL2JlZm9yZTIuamF2YSIpOworICAgIG15Rml4dHVyZS50eXBlKCdcbicpOworICAgIGNoZWNrUmVzdWx0QnlGaWxlKHBhdGggKyAiL2FmdGVyMi5qYXZhIik7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0RXhjZXNzUGFyZW5zQWZ0ZXJOZXcoKSB0aHJvd3MgRXhjZXB0aW9uIHsgZG9UZXN0KCk7IH0KKworICBwdWJsaWMgdm9pZCB0ZXN0UmV1c2VQYXJlbnNBZnRlck5ldygpIHRocm93cyBFeGNlcHRpb24geyBkb1Rlc3QoKTsgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RCcmFjZXNBZnRlck5ldygpIHRocm93cyBFeGNlcHRpb24geyBkb1Rlc3QoKTsgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RJblBsYWluVGV4dEZpbGUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBjb25maWd1cmVCeUZpbGUoZ2V0VGVzdE5hbWUoZmFsc2UpICsgIi50eHQiKTsKKyAgICBjaGVja1Jlc3VsdEJ5RmlsZShnZXRUZXN0TmFtZShmYWxzZSkgKyAiX2FmdGVyLnR4dCIpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEluUHJvcGVydGllc0ZpbGUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBteUZpeHR1cmUuY29uZmlndXJlQnlUZXh0KCJhLnByb3BlcnRpZXMiLCAiYWJjID0gU3RyaW5CdWk8Y2FyZXQ+Iik7CisgICAgY29tcGxldGUoKTsKKyAgICBteUZpeHR1cmUuY2hlY2tSZXN1bHQoImFiYyA9IGphdmEubGFuZy5TdHJpbmdCdWlsZGVyPGNhcmV0PiIpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdERvdWJsZVN0cmluZ0J1ZmZlcigpIHRocm93cyBFeGNlcHRpb24geworICAgIGNyZWF0ZUNsYXNzKCJwYWNrYWdlIGphdmEubGFuZzsgcHVibGljIGNsYXNzIFN0cmluZ0J1ZmZlciB7fSIpOworICAgIGRvVGVzdCgpOworICAgIGFzc2VydE51bGwobXlJdGVtcyk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0UmVwbGFjZVJlZmVyZW5jZUV4cHJlc3Npb25XaXRoVHlwZUVsZW1lbnQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBjcmVhdGVDbGFzcygicGFja2FnZSBmb28uYmFyOyBwdWJsaWMgY2xhc3MgQUJDREVGIHt9Iik7CisgICAgZG9UZXN0KCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0Q2FtZWxIdW1wUHJlZml4KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgU3RyaW5nIHBhdGggPSAiL2phdmEvIjsKKyAgICBjb25maWd1cmVCeUZpbGUocGF0aCArIGdldFRlc3ROYW1lKGZhbHNlKSArICIuamF2YSIpOworICAgIGNvbXBsZXRlKCk7CisgICAgYXNzZXJ0RXF1YWxzKDIsIG15SXRlbXMubGVuZ3RoKTsKKyAgfQorCisgIHByaXZhdGUgdm9pZCBkb1Rlc3QoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBTdHJpbmcgcGF0aCA9ICIvamF2YS8iOworICAgIGNvbmZpZ3VyZUJ5RmlsZShwYXRoICsgZ2V0VGVzdE5hbWUoZmFsc2UpICsgIi5qYXZhIik7CisgICAgY2hlY2tSZXN1bHRCeUZpbGUocGF0aCArIGdldFRlc3ROYW1lKGZhbHNlKSArICJfYWZ0ZXIuamF2YSIpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdE5hbWVDb21wbGV0aW9uSmF2YSgpIHRocm93cyBFeGNlcHRpb24geworICAgIFN0cmluZyBwYXRoID0gIi9uYW1lQ29tcGxldGlvbi9qYXZhIjsKKyAgICBjb25maWd1cmVCeUZpbGUocGF0aCArICIvdGVzdDEtc291cmNlLmphdmEiKTsKKyAgICBwZXJmb3JtQWN0aW9uKCk7CisgICAgY2hlY2tSZXN1bHRCeUZpbGUocGF0aCArICIvdGVzdDEtcmVzdWx0LmphdmEiKTsKKyAgICBjb25maWd1cmVCeUZpbGUocGF0aCArICIvdGVzdDItc291cmNlLmphdmEiKTsKKyAgICBwZXJmb3JtQWN0aW9uKCk7CisgICAgY2hlY2tSZXN1bHRCeUZpbGUocGF0aCArICIvdGVzdDItcmVzdWx0LmphdmEiKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RJbXBsZW1lbnRzRmlsdGVyaW5nMSgpIHRocm93cyBFeGNlcHRpb24geworICAgIGZpbmFsIFN0cmluZyBwYXRoID0gIi9uYW1lQ29tcGxldGlvbi9qYXZhIjsKKyAgICBjb25maWd1cmVCeUZpbGUocGF0aCArICIvdGVzdDQtc291cmNlLmphdmEiKTsKKyAgICBwZXJmb3JtQWN0aW9uKCk7CisgICAgY2hlY2tSZXN1bHRCeUZpbGUocGF0aCArICIvdGVzdDQtcmVzdWx0LmphdmEiKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RJbXBsZW1lbnRzRmlsdGVyaW5nMigpIHRocm93cyBFeGNlcHRpb24geworICAgIGZpbmFsIFN0cmluZyBwYXRoID0gIi9uYW1lQ29tcGxldGlvbi9qYXZhIjsKKyAgICBjb25maWd1cmVCeUZpbGUocGF0aCArICIvdGVzdDMtc291cmNlLmphdmEiKTsKKyAgICBwZXJmb3JtQWN0aW9uKCk7CisgICAgY2hlY2tSZXN1bHRCeUZpbGUocGF0aCArICIvdGVzdDMtcmVzdWx0LmphdmEiKTsKKworICAgIGNvbmZpZ3VyZUJ5RmlsZShwYXRoICsgIi9pbXBsZW1lbnRzMi1zb3VyY2UuamF2YSIpOworICAgIHBlcmZvcm1BY3Rpb24oKTsKKyAgICBjaGVja1Jlc3VsdEJ5RmlsZShwYXRoICsgIi9pbXBsZW1lbnRzMi1yZXN1bHQuamF2YSIpOworCisgICAgY29uZmlndXJlQnlGaWxlKHBhdGggKyAiL2ltcGxlbWVudHMzLXNvdXJjZS5qYXZhIik7CisgICAgcGVyZm9ybUFjdGlvbigpOworICAgIGNoZWNrUmVzdWx0QnlGaWxlKHBhdGggKyAiL2ltcGxlbWVudHMzLXJlc3VsdC5qYXZhIik7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0QW5ub3RhdGlvbkZpbHRlcmluZygpIHRocm93cyBFeGNlcHRpb24geworICAgIGNyZWF0ZUNsYXNzKCJAaW50ZXJmYWNlIE15T2JqZWN0VHlwZSB7fSIpOworCisgICAgZmluYWwgU3RyaW5nIHBhdGggPSAiL25hbWVDb21wbGV0aW9uL2phdmEiOworICAgIGNvbmZpZ3VyZUJ5RmlsZShwYXRoICsgIi90ZXN0OC1zb3VyY2UuamF2YSIpOworICAgIHBlcmZvcm1BY3Rpb24oKTsKKyAgICBjaGVja1Jlc3VsdEJ5RmlsZShwYXRoICsgIi90ZXN0OC1yZXN1bHQuamF2YSIpOworICAgIGNsZWFudXBWZnMoKTsKKworICAgIGNvbmZpZ3VyZUJ5RmlsZShwYXRoICsgIi90ZXN0OS1zb3VyY2UuamF2YSIpOworICAgIHBlcmZvcm1BY3Rpb24oKTsKKyAgICBjaGVja1Jlc3VsdEJ5RmlsZShwYXRoICsgIi90ZXN0OS1yZXN1bHQuamF2YSIpOworICAgIGNsZWFudXBWZnMoKTsKKworICAgIGNvbmZpZ3VyZUJ5RmlsZShwYXRoICsgIi90ZXN0OV8yLXNvdXJjZS5qYXZhIik7CisgICAgcGVyZm9ybUFjdGlvbigpOworICAgIGNoZWNrUmVzdWx0QnlGaWxlKHBhdGggKyAiL3Rlc3Q5XzItcmVzdWx0LmphdmEiKTsKKyAgICBjbGVhbnVwVmZzKCk7CisKKyAgICBjb25maWd1cmVCeUZpbGUocGF0aCArICIvdGVzdDlfMy1zb3VyY2UuamF2YSIpOworICAgIHBlcmZvcm1BY3Rpb24oKTsKKyAgICBjaGVja1Jlc3VsdEJ5RmlsZShwYXRoICsgIi90ZXN0OV8zLXJlc3VsdC5qYXZhIik7CisgICAgY2xlYW51cFZmcygpOworCisgICAgY29uZmlndXJlQnlGaWxlKHBhdGggKyAiL3Rlc3QxMS1zb3VyY2UuamF2YSIpOworICAgIHBlcmZvcm1BY3Rpb24oKTsKKyAgICBjaGVja1Jlc3VsdEJ5RmlsZShwYXRoICsgIi90ZXN0MTEtcmVzdWx0LmphdmEiKTsKKyAgICBjbGVhbnVwVmZzKCk7CisKKyAgICBjb25maWd1cmVCeUZpbGUocGF0aCArICIvdGVzdDEwLXNvdXJjZS5qYXZhIik7CisgICAgcGVyZm9ybUFjdGlvbigpOworICAgIGNoZWNrUmVzdWx0QnlGaWxlKHBhdGggKyAiL3Rlc3QxMC1yZXN1bHQuamF2YSIpOworICAgIGNsZWFudXBWZnMoKTsKKworICAgIGNvbmZpZ3VyZUJ5RmlsZShwYXRoICsgIi90ZXN0MTItc291cmNlLmphdmEiKTsKKyAgICBwZXJmb3JtQWN0aW9uKCk7CisgICAgY2hlY2tSZXN1bHRCeUZpbGUocGF0aCArICIvdGVzdDEyLXJlc3VsdC5qYXZhIik7CisgICAgY2xlYW51cFZmcygpOworCisgICAgY29uZmlndXJlQnlGaWxlKHBhdGggKyAiL3Rlc3QxMy1zb3VyY2UuamF2YSIpOworICAgIHBlcmZvcm1BY3Rpb24oKTsKKyAgICBjaGVja1Jlc3VsdEJ5RmlsZShwYXRoICsgIi90ZXN0MTMtcmVzdWx0LmphdmEiKTsKKyAgfQorCisgIHByaXZhdGUgdm9pZCBjbGVhbnVwVmZzKCkgeworICAgIEFwcGxpY2F0aW9uTWFuYWdlci5nZXRBcHBsaWNhdGlvbigpLnJ1bldyaXRlQWN0aW9uKG5ldyBSdW5uYWJsZSgpIHsKKyAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKKyAgICAgICAgRmlsZURvY3VtZW50TWFuYWdlci5nZXRJbnN0YW5jZSgpLnNhdmVBbGxEb2N1bWVudHMoKTsKKyAgICAgICAgZm9yIChWaXJ0dWFsRmlsZSBmaWxlIDogbXlGaXh0dXJlLmdldFRlbXBEaXJGaXh0dXJlKCkuZ2V0RmlsZSgiIikuZ2V0Q2hpbGRyZW4oKSkgeworICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICBmaWxlLmRlbGV0ZSh0aGlzKTsKKyAgICAgICAgICB9CisgICAgICAgICAgY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKGUpOworICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgfQorICAgIH0pOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEluTWV0aG9kQ2FsbCgpIHRocm93cyBFeGNlcHRpb24geworICAgIGZpbmFsIFN0cmluZyBwYXRoID0gIi9uYW1lQ29tcGxldGlvbi9qYXZhIjsKKyAgICBjb25maWd1cmVCeUZpbGUocGF0aCArICIvbWV0aG9kQ2FsbC1zb3VyY2UuamF2YSIpOworICAgIHBlcmZvcm1BY3Rpb24oKTsKKyAgICBjaGVja1Jlc3VsdEJ5RmlsZShwYXRoICsgIi9tZXRob2RDYWxsLXJlc3VsdC5qYXZhIik7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0SW5NZXRob2RDYWxsUXVhbGlmaWVyKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZmluYWwgU3RyaW5nIHBhdGggPSAiL25hbWVDb21wbGV0aW9uL2phdmEiOworICAgIGNvbmZpZ3VyZUJ5RmlsZShwYXRoICsgIi9tZXRob2RDYWxsMS1zb3VyY2UuamF2YSIpOworICAgIHBlcmZvcm1BY3Rpb24oKTsKKyAgICBjaGVja1Jlc3VsdEJ5RmlsZShwYXRoICsgIi9tZXRob2RDYWxsMS1yZXN1bHQuamF2YSIpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEluVmFyaWFibGVEZWNsYXJhdGlvblR5cGUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBmaW5hbCBTdHJpbmcgcGF0aCA9ICIvbmFtZUNvbXBsZXRpb24vamF2YSI7CisgICAgY29uZmlndXJlQnlGaWxlKHBhdGggKyAiL3ZhclR5cGUtc291cmNlLmphdmEiKTsKKyAgICBwZXJmb3JtQWN0aW9uKCk7CisgICAgY2hlY2tSZXN1bHRCeUZpbGUocGF0aCArICIvdmFyVHlwZS1yZXN1bHQuamF2YSIpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEV4dHJhU3BhY2UoKSB0aHJvd3MgRXhjZXB0aW9uIHsgZG9KYXZhVGVzdCgpOyB9CisKKyAgcHVibGljIHZvaWQgdGVzdEFubm90YXRpb24oKSB0aHJvd3MgRXhjZXB0aW9uIHsgZG9KYXZhVGVzdCgpOyB9CisKKyAgcHVibGljIHZvaWQgdGVzdEluU3RhdGljSW1wb3J0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7IGRvSmF2YVRlc3QoKTsgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RJbkNvbW1lbnRXaXRoUGFja2FnZVByZWZpeCgpIHRocm93cyBFeGNlcHRpb24geyBkb0phdmFUZXN0KCk7IH0KKworICBwcml2YXRlIHZvaWQgZG9KYXZhVGVzdCgpIHRocm93cyBFeGNlcHRpb24geworICAgIGZpbmFsIFN0cmluZyBwYXRoID0gIi9uYW1lQ29tcGxldGlvbi9qYXZhIjsKKyAgICBteUZpeHR1cmUuY29uZmlndXJlQnlGaWxlKHBhdGggKyAiLyIgKyBnZXRUZXN0TmFtZShmYWxzZSkgKyAiLXNvdXJjZS5qYXZhIik7CisgICAgcGVyZm9ybUFjdGlvbigpOworICAgIGNoZWNrUmVzdWx0QnlGaWxlKHBhdGggKyAiLyIgKyBnZXRUZXN0TmFtZShmYWxzZSkgKyAiLXJlc3VsdC5qYXZhIik7CisgIH0KKworICBAT3ZlcnJpZGUKKyAgcHJvdGVjdGVkIHZvaWQgY29tcGxldGUoKSB7CisgICAgbXlJdGVtcyA9IG15Rml4dHVyZS5jb21wbGV0ZShDb21wbGV0aW9uVHlwZS5CQVNJQywgMik7CisgIH0KKworICBwcml2YXRlIHZvaWQgcGVyZm9ybUFjdGlvbigpIHsKKyAgICBjb21wbGV0ZSgpOworICAgIGlmIChMb29rdXBNYW5hZ2VyLmdldEFjdGl2ZUxvb2t1cChteUZpeHR1cmUuZ2V0RWRpdG9yKCkpICE9IG51bGwpIHsKKyAgICAgIG15Rml4dHVyZS50eXBlKCdcbicpOworICAgIH0KKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vQ29tcGxldGlvblNvcnRpbmdUZXN0Q2FzZS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vQ29tcGxldGlvblNvcnRpbmdUZXN0Q2FzZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUwN2UxZGEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovY29kZUluc2lnaHQvY29tcGxldGlvbi9Db21wbGV0aW9uU29ydGluZ1Rlc3RDYXNlLmphdmEKQEAgLTAsMCArMSw4MiBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwMC0yMDA1IGJ5IEpldEJyYWlucyBzLnIuby4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIFVzZSBpcyBzdWJqZWN0IHRvIGxpY2Vuc2UgdGVybXMuCisgKi8KK3BhY2thZ2UgY29tLmludGVsbGlqLmNvZGVJbnNpZ2h0LmNvbXBsZXRpb247CisKK2ltcG9ydCBjb20uaW50ZWxsaWouY29kZUluc2lnaHQuQ29kZUluc2lnaHRTZXR0aW5nczsKK2ltcG9ydCBjb20uaW50ZWxsaWouY29kZUluc2lnaHQubG9va3VwLkxvb2t1cEVsZW1lbnQ7CitpbXBvcnQgY29tLmludGVsbGlqLmNvZGVJbnNpZ2h0Lmxvb2t1cC5Mb29rdXBNYW5hZ2VyOworaW1wb3J0IGNvbS5pbnRlbGxpai5jb2RlSW5zaWdodC5sb29rdXAuaW1wbC5Mb29rdXBJbXBsOworaW1wb3J0IGNvbS5pbnRlbGxpai5pZGUudWkuVUlTZXR0aW5nczsKK2ltcG9ydCBjb20uaW50ZWxsaWoucHNpLnN0YXRpc3RpY3MuU3RhdGlzdGljc01hbmFnZXI7CitpbXBvcnQgY29tLmludGVsbGlqLnBzaS5zdGF0aXN0aWNzLmltcGwuU3RhdGlzdGljc01hbmFnZXJJbXBsOworaW1wb3J0IGNvbS5pbnRlbGxpai50ZXN0RnJhbWV3b3JrLlRlc3REYXRhUGF0aDsKK2ltcG9ydCBvcmcuamV0YnJhaW5zLmFubm90YXRpb25zLk5vbk5sczsKKworLyoqCisgKiBAYXV0aG9yIHBldGVyCisgKi8KK0BUZXN0RGF0YVBhdGgoIiRDT05URU5UX1JPT1QvdGVzdERhdGEiKQorcHVibGljIGFic3RyYWN0IGNsYXNzIENvbXBsZXRpb25Tb3J0aW5nVGVzdENhc2UgZXh0ZW5kcyBMaWdodEZpeHR1cmVDb21wbGV0aW9uVGVzdENhc2UgeworICBwcml2YXRlIGZpbmFsIENvbXBsZXRpb25UeXBlIG15VHlwZTsKKworICBAU3VwcHJlc3NXYXJuaW5ncyh7IkpVbml0VGVzdENhc2VXaXRoTm9uVHJpdmlhbENvbnN0cnVjdG9ycyJ9KQorICBwcm90ZWN0ZWQgQ29tcGxldGlvblNvcnRpbmdUZXN0Q2FzZShDb21wbGV0aW9uVHlwZSB0eXBlKSB7CisgICAgbXlUeXBlID0gdHlwZTsKKyAgfQorCisgIEBPdmVycmlkZQorICBwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24geworICAgIHN1cGVyLnNldFVwKCk7CisgICAgKChTdGF0aXN0aWNzTWFuYWdlckltcGwpU3RhdGlzdGljc01hbmFnZXIuZ2V0SW5zdGFuY2UoKSkuZW5hYmxlU3RhdGlzdGljcyhnZXRUZXN0Um9vdERpc3Bvc2FibGUoKSk7CisgIH0KKworICBAT3ZlcnJpZGUKKyAgcHJvdGVjdGVkIHZvaWQgdGVhckRvd24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBMb29rdXBNYW5hZ2VyLmdldEluc3RhbmNlKGdldFByb2plY3QoKSkuaGlkZUFjdGl2ZUxvb2t1cCgpOworICAgIFVJU2V0dGluZ3MuZ2V0SW5zdGFuY2UoKS5TT1JUX0xPT0tVUF9FTEVNRU5UU19MRVhJQ09HUkFQSElDQUxMWSA9IGZhbHNlOworICAgIENvZGVJbnNpZ2h0U2V0dGluZ3MuZ2V0SW5zdGFuY2UoKS5DT01QTEVUSU9OX0NBU0VfU0VOU0lUSVZFID0gQ29kZUluc2lnaHRTZXR0aW5ncy5GSVJTVF9MRVRURVI7CisgICAgc3VwZXIudGVhckRvd24oKTsKKyAgfQorCisgIEBPdmVycmlkZQorICBwcm90ZWN0ZWQgYWJzdHJhY3QgU3RyaW5nIGdldEJhc2VQYXRoKCk7CisKKyAgcHJvdGVjdGVkIHZvaWQgY2hlY2tQcmVmZXJyZWRJdGVtcyhmaW5hbCBpbnQgc2VsZWN0ZWQsIEBOb25ObHMgZmluYWwgU3RyaW5nLi4uIGV4cGVjdGVkKSB7CisgICAgaW52b2tlQ29tcGxldGlvbihnZXRUZXN0TmFtZShmYWxzZSkgKyAiLmphdmEiKTsKKyAgICBhc3NlcnRQcmVmZXJyZWRJdGVtcyhzZWxlY3RlZCwgZXhwZWN0ZWQpOworICB9CisKKyAgcHJvdGVjdGVkIHZvaWQgYXNzZXJ0UHJlZmVycmVkSXRlbXMoZmluYWwgaW50IHNlbGVjdGVkLCBATm9uTmxzIGZpbmFsIFN0cmluZy4uLiBleHBlY3RlZCkgeworICAgIG15Rml4dHVyZS5hc3NlcnRQcmVmZXJyZWRDb21wbGV0aW9uSXRlbXMoc2VsZWN0ZWQsIGV4cGVjdGVkKTsKKyAgfQorCisgIHByb3RlY3RlZCBMb29rdXBJbXBsIGludm9rZUNvbXBsZXRpb24oZmluYWwgU3RyaW5nIHBhdGgpIHsKKyAgICBjb25maWd1cmVOb0NvbXBsZXRpb24ocGF0aCk7CisgICAgbXlGaXh0dXJlLmNvbXBsZXRlKG15VHlwZSk7CisgICAgcmV0dXJuIGdldExvb2t1cCgpOworICB9CisKKyAgcHJvdGVjdGVkIHZvaWQgY29uZmlndXJlTm9Db21wbGV0aW9uKFN0cmluZyBwYXRoKSB7CisgICAgbXlGaXh0dXJlLmNvbmZpZ3VyZUZyb21FeGlzdGluZ1ZpcnR1YWxGaWxlKAorICAgICAgbXlGaXh0dXJlLmNvcHlGaWxlVG9Qcm9qZWN0KHBhdGgsIGNvbS5pbnRlbGxpai5vcGVuYXBpLnV0aWwudGV4dC5TdHJpbmdVdGlsLmdldFNob3J0TmFtZShwYXRoLCAnLycpKSk7CisgIH0KKworICBwcm90ZWN0ZWQgc3RhdGljIHZvaWQgaW5jVXNlQ291bnQoZmluYWwgTG9va3VwSW1wbCBsb29rdXAsIGZpbmFsIGludCBpbmRleCkgeworICAgIGltaXRhdGVJdGVtU2VsZWN0aW9uKGxvb2t1cCwgaW5kZXgpOworICAgIHJlZnJlc2hTb3J0aW5nKGxvb2t1cCk7CisgIH0KKworICBwcm90ZWN0ZWQgc3RhdGljIHZvaWQgcmVmcmVzaFNvcnRpbmcoZmluYWwgTG9va3VwSW1wbCBsb29rdXApIHsKKyAgICBsb29rdXAuc2V0U2VsZWN0aW9uVG91Y2hlZChmYWxzZSk7CisgICAgbG9va3VwLnJlc29ydCh0cnVlKTsKKyAgfQorCisgIHByb3RlY3RlZCBzdGF0aWMgdm9pZCBpbWl0YXRlSXRlbVNlbGVjdGlvbihmaW5hbCBMb29rdXBJbXBsIGxvb2t1cCwgZmluYWwgaW50IGluZGV4KSB7CisgICAgZmluYWwgTG9va3VwRWxlbWVudCBpdGVtID0gbG9va3VwLmdldEl0ZW1zKCkuZ2V0KGluZGV4KTsKKyAgICBsb29rdXAuc2V0Q3VycmVudEl0ZW0oaXRlbSk7CisgICAgQ29tcGxldGlvbkxvb2t1cEFycmFuZ2VyLmNvbGxlY3RTdGF0aXN0aWNDaGFuZ2VzKGl0ZW0sIGxvb2t1cCk7CisgICAgQ29tcGxldGlvbkxvb2t1cEFycmFuZ2VyLmFwcGx5TGFzdENvbXBsZXRpb25TdGF0aXN0aWNzVXBkYXRlKCk7CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9jb2RlSW5zaWdodC9jb21wbGV0aW9uL0NvbXBsZXRpb25TdHlsZVRlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9jb2RlSW5zaWdodC9jb21wbGV0aW9uL0NvbXBsZXRpb25TdHlsZVRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lODM3ZWRlCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vQ29tcGxldGlvblN0eWxlVGVzdC5qYXZhCkBAIC0wLDAgKzEsMzU1IEBACitwYWNrYWdlIGNvbS5pbnRlbGxpai5jb2RlSW5zaWdodC5jb21wbGV0aW9uOworCitpbXBvcnQgY29tLmludGVsbGlqLkphdmFUZXN0VXRpbDsKK2ltcG9ydCBjb20uaW50ZWxsaWouY29kZUluc2lnaHQubG9va3VwLkxvb2t1cDsKK2ltcG9ydCBjb20uaW50ZWxsaWouY29kZUluc2lnaHQubG9va3VwLkxvb2t1cEVsZW1lbnQ7CitpbXBvcnQgY29tLmludGVsbGlqLmNvZGVJbnNpZ2h0Lmxvb2t1cC5Mb29rdXBNYW5hZ2VyOworaW1wb3J0IGNvbS5pbnRlbGxpai5jb2RlSW5zaWdodC5sb29rdXAuaW1wbC5Mb29rdXBNYW5hZ2VySW1wbDsKK2ltcG9ydCBjb20uaW50ZWxsaWoubGFuZy5qYXZhLkphdmFMYW5ndWFnZTsKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS5yb290cy5MYW5ndWFnZUxldmVsUHJvamVjdEV4dGVuc2lvbjsKK2ltcG9ydCBjb20uaW50ZWxsaWoucG9tLmphdmEuTGFuZ3VhZ2VMZXZlbDsKK2ltcG9ydCBjb20uaW50ZWxsaWoucHNpLmNvZGVTdHlsZS5Db2RlU3R5bGVTZXR0aW5nc01hbmFnZXI7CitpbXBvcnQgY29tLmludGVsbGlqLnBzaS5jb2RlU3R5bGUuQ29tbW9uQ29kZVN0eWxlU2V0dGluZ3M7CitpbXBvcnQgY29tLmludGVsbGlqLnRlc3RGcmFtZXdvcmsuTGlnaHRDb2RlSW5zaWdodFRlc3RDYXNlOworaW1wb3J0IGNvbS5pbnRlbGxpai50ZXN0RnJhbWV3b3JrLlRlc3REYXRhUGF0aDsKK2ltcG9ydCBvcmcuamV0YnJhaW5zLmFubm90YXRpb25zLk5vdE51bGw7CisKKy8qKgorICogQ3JlYXRlZCBieSBJbnRlbGxpSiBJREVBLgorICogVXNlcjogaWsKKyAqIERhdGU6IDIwLjA4LjIwMDMKKyAqIFRpbWU6IDE1OjQ0OjE4CisgKiBUbyBjaGFuZ2UgdGhpcyB0ZW1wbGF0ZSB1c2UgT3B0aW9ucyB8IEZpbGUgVGVtcGxhdGVzLgorICovCitAVGVzdERhdGFQYXRoKCIkQ09OVEVOVF9ST09UL3Rlc3REYXRhIikKK3B1YmxpYyBjbGFzcyBDb21wbGV0aW9uU3R5bGVUZXN0IGV4dGVuZHMgTGlnaHRDb2RlSW5zaWdodFRlc3RDYXNleworICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQkFTRV9QQVRIID0gIi9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3N0eWxlIjsKKworICBAT3ZlcnJpZGUKKyAgcHJvdGVjdGVkIExhbmd1YWdlTGV2ZWwgZ2V0TGFuZ3VhZ2VMZXZlbCgpIHsKKyAgICByZXR1cm4gTGFuZ3VhZ2VMZXZlbC5KREtfMV82OworICB9CisKKyAgQE5vdE51bGwKKyAgQE92ZXJyaWRlCisgIHByb3RlY3RlZCBTdHJpbmcgZ2V0VGVzdERhdGFQYXRoKCkgeworICAgIHJldHVybiBKYXZhVGVzdFV0aWwuZ2V0SmF2YVRlc3REYXRhUGF0aCgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEdlbmVyaWNQYXJhbWV0ZXJzUmVwbGFjZSgpIHRocm93cyBFeGNlcHRpb257CisgICAgZmluYWwgU3RyaW5nIHBhdGggPSBCQVNFX1BBVEg7CisKKyAgICBjb25maWd1cmVCeUZpbGUocGF0aCArICIvYmVmb3JlMS5qYXZhIik7CisgICAgcGVyZm9ybVNtYXJ0Q29tcGxldGlvbigpOworICAgIHNlbGVjdChMb29rdXAuUkVQTEFDRV9TRUxFQ1RfQ0hBUiwgMik7CisgICAgY2hlY2tSZXN1bHRCeUZpbGUocGF0aCArICIvYWZ0ZXIxLmphdmEiKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RJREVBREVWNTkzNSgpIHRocm93cyBFeGNlcHRpb24geworICAgIGNvbmZpZ3VyZUZyb21GaWxlVGV4dCgiQS5qYXZhIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgInB1YmxpYyBjbGFzcyBBIHtcbiIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAiICBwdWJsaWMgc3RhdGljIHZvaWQgZm9vKFN0cmluZyBwYXJhbTEsIFN0cmluZyBwYXJhbTIpIHtcbiIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAiICB9XG4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIlxuIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICIgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHtcbiIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgIFN0cmluZyBwYXJhbTEgPSBhcmdzWzBdO1xuIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICIgICAgU3RyaW5nIHBhcmFtMiA9IGFyZ3NbMV07XG4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgICBmb28oPGNhcmV0Pik7XG4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgfVxuIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICJ9IgorICAgICk7CisgICAgcGVyZm9ybVNtYXJ0Q29tcGxldGlvbigpOworICAgIHNlbGVjdChMb29rdXAuTk9STUFMX1NFTEVDVF9DSEFSLCBnZXRTZWxlY3RlZCgpKTsKKyAgICBjaGVja1Jlc3VsdEJ5VGV4dCgKKyAgICAgICJwdWJsaWMgY2xhc3MgQSB7XG4iICsKKyAgICAgICIgIHB1YmxpYyBzdGF0aWMgdm9pZCBmb28oU3RyaW5nIHBhcmFtMSwgU3RyaW5nIHBhcmFtMikge1xuIiArCisgICAgICAiICB9XG4iICsKKyAgICAgICJcbiIgKworICAgICAgIiAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykge1xuIiArCisgICAgICAiICAgIFN0cmluZyBwYXJhbTEgPSBhcmdzWzBdO1xuIiArCisgICAgICAiICAgIFN0cmluZyBwYXJhbTIgPSBhcmdzWzFdO1xuIiArCisgICAgICAiICAgIGZvbyhwYXJhbTEsIDxjYXJldD4pO1xuIiArCisgICAgICAiICB9XG4iICsKKyAgICAgICJ9IgorICAgICk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0SURFQURFVjI4NzgoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBjb25maWd1cmVGcm9tRmlsZVRleHQoCisgICAgICAiQS5qYXZhIiwKKyAgICAgICJjbGFzcyBCYXI8VD4ge31cbiIgKworICAgICAgImNsYXNzIEZvbyB7XG4iICsKKyAgICAgICJwdWJsaWMgdm9pZCBjcmVhdGVGb28oQmFyPD8+IDxjYXJldD4pXG4iICsgIn0iKTsKKyAgICBwZXJmb3JtTm9ybWFsQ29tcGxldGlvbigpOworICAgIGNoZWNrUmVzdWx0QnlUZXh0KAorICAgICAgImNsYXNzIEJhcjxUPiB7fVxuIiArCisgICAgICAiY2xhc3MgRm9vIHtcbiIgKworICAgICAgInB1YmxpYyB2b2lkIGNyZWF0ZUZvbyhCYXI8Pz4gYmFyPGNhcmV0PilcbiIgKyAifSIpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdE1ldGhvZHNQYXJhbWV0ZXJzU3R5bGUxKCkgdGhyb3dzIEV4Y2VwdGlvbnsKKyAgICBmaW5hbCBTdHJpbmcgcGF0aCA9IEJBU0VfUEFUSDsKKworICAgIGNvbmZpZ3VyZUJ5RmlsZShwYXRoICsgIi9iZWZvcmUzLmphdmEiKTsKKyAgICBwZXJmb3JtU21hcnRDb21wbGV0aW9uKCk7CisgICAgY2hlY2tSZXN1bHRCeUZpbGUocGF0aCArICIvYWZ0ZXIzLmphdmEiKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RNZXRob2RzUGFyYW1ldGVyc1N0eWxlMigpIHRocm93cyBFeGNlcHRpb257CisgICAgZmluYWwgU3RyaW5nIHBhdGggPSBCQVNFX1BBVEg7CisKKyAgICBjb25maWd1cmVCeUZpbGUocGF0aCArICIvYmVmb3JlNC5qYXZhIik7CisgICAgcGVyZm9ybVNtYXJ0Q29tcGxldGlvbigpOworICAgIGNoZWNrUmVzdWx0QnlGaWxlKHBhdGggKyAiL2FmdGVyNC5qYXZhIik7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0S2V5d29yZHNSZXBsYWNlKCkgdGhyb3dzIEV4Y2VwdGlvbnsKKyAgICBmaW5hbCBTdHJpbmcgcGF0aCA9IEJBU0VfUEFUSDsKKworICAgIGNvbmZpZ3VyZUJ5RmlsZShwYXRoICsgIi9iZWZvcmU2LmphdmEiKTsKKyAgICBwZXJmb3JtTm9ybWFsQ29tcGxldGlvbigpOworICAgIHNlbGVjdChMb29rdXAuUkVQTEFDRV9TRUxFQ1RfQ0hBUiwgMCk7CisgICAgY2hlY2tSZXN1bHRCeUZpbGUocGF0aCArICIvYWZ0ZXI2LmphdmEiKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RMb2NhbFZhcmlhYmxlUHJlc2VsZWN0KCkgdGhyb3dzIEV4Y2VwdGlvbnsKKyAgICBmaW5hbCBTdHJpbmcgcGF0aCA9IEJBU0VfUEFUSDsKKworICAgIGNvbmZpZ3VyZUJ5RmlsZShwYXRoICsgIi9iZWZvcmU1LmphdmEiKTsKKyAgICBwZXJmb3JtU21hcnRDb21wbGV0aW9uKCk7CisgICAgYXNzZXJ0RXF1YWxzKCJ4eHh4IiwgZ2V0U2VsZWN0ZWQoKS5nZXRMb29rdXBTdHJpbmcoKSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0TWV0aG9kQ29tcGxldGlvbkluc2lkZUlubGluZVRhZ3MoKSB0aHJvd3MgRXhjZXB0aW9ueworICAgIGZpbmFsIFN0cmluZyBwYXRoID0gQkFTRV9QQVRIOworCisgICAgY29uZmlndXJlQnlGaWxlKHBhdGggKyAiL2JlZm9yZTcuamF2YSIpOworICAgIHBlcmZvcm1Ob3JtYWxDb21wbGV0aW9uKCk7CisgICAgc2VsZWN0KExvb2t1cC5SRVBMQUNFX1NFTEVDVF9DSEFSLCAxKTsKKyAgICBjaGVja1Jlc3VsdEJ5RmlsZShwYXRoICsgIi9hZnRlcjcuamF2YSIpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdENvbnN0YW50c0NvbXBsZXRpb24xKCkgdGhyb3dzIEV4Y2VwdGlvbnsKKyAgICBmaW5hbCBTdHJpbmcgcGF0aCA9IEJBU0VfUEFUSDsKKworICAgIGNvbmZpZ3VyZUJ5RmlsZShwYXRoICsgIi9iZWZvcmU4LmphdmEiKTsKKyAgICBwZXJmb3JtU21hcnRDb21wbGV0aW9uKCk7CisgICAgc2VsZWN0KExvb2t1cC5SRVBMQUNFX1NFTEVDVF9DSEFSLCAwKTsKKyAgICBjaGVja1Jlc3VsdEJ5RmlsZShwYXRoICsgIi9hZnRlcjguamF2YSIpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdENvbnN0YW50c0NvbXBsZXRpb24yKCkgdGhyb3dzIEV4Y2VwdGlvbnsKKyAgICBmaW5hbCBTdHJpbmcgcGF0aCA9IEJBU0VfUEFUSDsKKworICAgIGNvbmZpZ3VyZUJ5RmlsZShwYXRoICsgIi9iZWZvcmU5LmphdmEiKTsKKyAgICBwZXJmb3JtU21hcnRDb21wbGV0aW9uKCk7CisgICAgc2VsZWN0KExvb2t1cC5SRVBMQUNFX1NFTEVDVF9DSEFSLCAwKTsKKyAgICBjaGVja1Jlc3VsdEJ5RmlsZShwYXRoICsgIi9hZnRlcjkuamF2YSIpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdENvbnN0YW50c0NvbXBsZXRpb24zKCkgdGhyb3dzIEV4Y2VwdGlvbnsKKyAgICBmaW5hbCBTdHJpbmcgcGF0aCA9IEJBU0VfUEFUSDsKKworICAgIGNvbmZpZ3VyZUJ5RmlsZShwYXRoICsgIi9iZWZvcmUxMC5qYXZhIik7CisgICAgcGVyZm9ybVNtYXJ0Q29tcGxldGlvbigpOworICAgIHNlbGVjdChMb29rdXAuUkVQTEFDRV9TRUxFQ1RfQ0hBUiwgMCk7CisgICAgY2hlY2tSZXN1bHRCeUZpbGUocGF0aCArICIvYWZ0ZXIxMC5qYXZhIik7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0Q2FyZXRQb3NpdGlvbkFmdGVyQ29tcGxldGlvbjEoKSB0aHJvd3MgRXhjZXB0aW9ueworICAgIGZpbmFsIFN0cmluZyBwYXRoID0gQkFTRV9QQVRIOworCisgICAgY29uZmlndXJlQnlGaWxlKHBhdGggKyAiL2JlZm9yZTExLmphdmEiKTsKKyAgICBwZXJmb3JtTm9ybWFsQ29tcGxldGlvbigpOworICAgIHNlbGVjdChMb29rdXAuTk9STUFMX1NFTEVDVF9DSEFSLCAwKTsKKyAgICBjaGVja1Jlc3VsdEJ5RmlsZShwYXRoICsgIi9hZnRlcjExLmphdmEiKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RDYXJldFBvc2l0aW9uQWZ0ZXJDb21wbGV0aW9uMigpIHRocm93cyBFeGNlcHRpb257CisgICAgZmluYWwgU3RyaW5nIHBhdGggPSBCQVNFX1BBVEg7CisKKyAgICBjb25maWd1cmVCeUZpbGUocGF0aCArICIvYmVmb3JlMTIuamF2YSIpOworICAgIHBlcmZvcm1TbWFydENvbXBsZXRpb24oKTsKKyAgICBzZWxlY3QoTG9va3VwLk5PUk1BTF9TRUxFQ1RfQ0hBUiwgMCk7CisgICAgY2hlY2tSZXN1bHRCeUZpbGUocGF0aCArICIvYWZ0ZXIxMi5qYXZhIik7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0UGFyZW5zUmV1c2UoKSB0aHJvd3MgRXhjZXB0aW9ueworICAgIGZpbmFsIFN0cmluZyBwYXRoID0gQkFTRV9QQVRIOworCisgICAgY29uZmlndXJlQnlGaWxlKHBhdGggKyAiL2JlZm9yZTEzLmphdmEiKTsKKyAgICBwZXJmb3JtTm9ybWFsQ29tcGxldGlvbigpOworICAgIGNoZWNrUmVzdWx0QnlGaWxlKHBhdGggKyAiL2FmdGVyMTMuamF2YSIpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFBhcmVuc0luU3luY2hyb25pemVkKCkgdGhyb3dzIEV4Y2VwdGlvbnsKKyAgICBDb21tb25Db2RlU3R5bGVTZXR0aW5ncyBzdHlsZVNldHRpbmdzID0gZ2V0Q29kZVN0eWxlU2V0dGluZ3MoKTsKKyAgICBzdHlsZVNldHRpbmdzLlNQQUNFX0JFRk9SRV9TWU5DSFJPTklaRURfUEFSRU5USEVTRVMgPSBmYWxzZTsKKyAgICBzdHlsZVNldHRpbmdzLlNQQUNFX1dJVEhJTl9TWU5DSFJPTklaRURfUEFSRU5USEVTRVMgPSB0cnVlOworICAgIGZpbmFsIFN0cmluZyBwYXRoID0gQkFTRV9QQVRIOworCisgICAgY29uZmlndXJlQnlGaWxlKHBhdGggKyAiL2JlZm9yZTIyLmphdmEiKTsKKyAgICBwZXJmb3JtTm9ybWFsQ29tcGxldGlvbigpOworICAgIGNoZWNrUmVzdWx0QnlGaWxlKHBhdGggKyAiL2FmdGVyMjIuamF2YSIpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdE1ldGhvZFJlcGxhY2VtZW50UmV1c2VQYXJlbnMxKCkgdGhyb3dzIEV4Y2VwdGlvbnsKKyAgICBmaW5hbCBTdHJpbmcgcGF0aCA9IEJBU0VfUEFUSDsKKworICAgIGNvbmZpZ3VyZUJ5RmlsZShwYXRoICsgIi9iZWZvcmUxNS5qYXZhIik7CisgICAgcGVyZm9ybU5vcm1hbENvbXBsZXRpb24oKTsKKyAgICBzZWxlY3QoTG9va3VwLlJFUExBQ0VfU0VMRUNUX0NIQVIsIGdldFNlbGVjdGVkKCkpOworICAgIGNoZWNrUmVzdWx0QnlGaWxlKHBhdGggKyAiL2FmdGVyMTUuamF2YSIpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdE1ldGhvZFJlcGxhY2VtZW50UmV1c2VQYXJlbnMyKCkgdGhyb3dzIEV4Y2VwdGlvbnsKKyAgICBmaW5hbCBTdHJpbmcgcGF0aCA9IEJBU0VfUEFUSDsKKworICAgIGNvbmZpZ3VyZUJ5RmlsZShwYXRoICsgIi9iZWZvcmUxNi5qYXZhIik7CisgICAgcGVyZm9ybU5vcm1hbENvbXBsZXRpb24oKTsKKyAgICBzZWxlY3QoTG9va3VwLlJFUExBQ0VfU0VMRUNUX0NIQVIsIGdldFNlbGVjdGVkKCkpOworICAgIGNoZWNrUmVzdWx0QnlGaWxlKHBhdGggKyAiL2FmdGVyMTYuamF2YSIpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdE1ldGhvZFJlcGxhY2VtZW50UmV1c2VQYXJlbnMzKCkgdGhyb3dzIEV4Y2VwdGlvbnsKKyAgICBmaW5hbCBTdHJpbmcgcGF0aCA9IEJBU0VfUEFUSDsKKworICAgIGNvbmZpZ3VyZUJ5RmlsZShwYXRoICsgIi9iZWZvcmUxNy5qYXZhIik7CisgICAgcGVyZm9ybU5vcm1hbENvbXBsZXRpb24oKTsKKyAgICBzZWxlY3QoTG9va3VwLlJFUExBQ0VfU0VMRUNUX0NIQVIsIGdldFNlbGVjdGVkKCkpOworICAgIGNoZWNrUmVzdWx0QnlGaWxlKHBhdGggKyAiL2FmdGVyMTcuamF2YSIpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdENhc3RBZnRlck5ldzEoKSB0aHJvd3MgRXhjZXB0aW9ueworICAgIGZpbmFsIFN0cmluZyBwYXRoID0gQkFTRV9QQVRIOworCisgICAgY29uZmlndXJlQnlGaWxlKHBhdGggKyAiL2JlZm9yZTIxLmphdmEiKTsKKyAgICBwZXJmb3JtU21hcnRDb21wbGV0aW9uKCk7CisgICAgY2hlY2tSZXN1bHRCeUZpbGUocGF0aCArICIvYWZ0ZXIyMS5qYXZhIik7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0Q2FzdFBhcmVuc1N0eWxlMSgpIHRocm93cyBFeGNlcHRpb257CisgICAgZmluYWwgU3RyaW5nIHBhdGggPSBCQVNFX1BBVEg7CisKKyAgICBnZXRDb2RlU3R5bGVTZXR0aW5ncygpLlNQQUNFX1dJVEhJTl9DQVNUX1BBUkVOVEhFU0VTID0gdHJ1ZTsKKyAgICBnZXRDb2RlU3R5bGVTZXR0aW5ncygpLlNQQUNFX0FGVEVSX1RZUEVfQ0FTVCA9IGZhbHNlOworICAgIGNvbmZpZ3VyZUJ5RmlsZShwYXRoICsgIi9iZWZvcmUzMS5qYXZhIik7CisgICAgcGVyZm9ybVNtYXJ0Q29tcGxldGlvbigpOworICAgIGNoZWNrUmVzdWx0QnlGaWxlKHBhdGggKyAiL2FmdGVyMzEuamF2YSIpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdE1ldGhvZFBhcmVuc1N0eWxlMigpIHRocm93cyBFeGNlcHRpb257CisgICAgZmluYWwgU3RyaW5nIHBhdGggPSBCQVNFX1BBVEg7CisgICAgQ29tbW9uQ29kZVN0eWxlU2V0dGluZ3Mgc3R5bGVTZXR0aW5ncyA9IGdldENvZGVTdHlsZVNldHRpbmdzKCk7CisgICAgZmluYWwgYm9vbGVhbiBzcGFjZV9iZWZvcmVfbWV0aG9kX2NhbGxfcGFyZW50aGVzZXMgPSBzdHlsZVNldHRpbmdzLlNQQUNFX0JFRk9SRV9NRVRIT0RfQ0FMTF9QQVJFTlRIRVNFUzsKKyAgICBzdHlsZVNldHRpbmdzLlNQQUNFX0JFRk9SRV9NRVRIT0RfQ0FMTF9QQVJFTlRIRVNFUyA9IHRydWU7CisgICAgY29uZmlndXJlQnlGaWxlKHBhdGggKyAiL2JlZm9yZTMyLmphdmEiKTsKKyAgICBwZXJmb3JtTm9ybWFsQ29tcGxldGlvbigpOworICAgIGNoZWNrUmVzdWx0QnlGaWxlKHBhdGggKyAiL2FmdGVyMzIuamF2YSIpOworICAgIHN0eWxlU2V0dGluZ3MuU1BBQ0VfQkVGT1JFX01FVEhPRF9DQUxMX1BBUkVOVEhFU0VTID0gc3BhY2VfYmVmb3JlX21ldGhvZF9jYWxsX3BhcmVudGhlc2VzOworICB9CisKKyAgcHJpdmF0ZSBzdGF0aWMgQ29tbW9uQ29kZVN0eWxlU2V0dGluZ3MgZ2V0Q29kZVN0eWxlU2V0dGluZ3MoKSB7CisgICAgcmV0dXJuIENvZGVTdHlsZVNldHRpbmdzTWFuYWdlci5nZXRTZXR0aW5ncyhnZXRQcm9qZWN0KCkpLmdldENvbW1vblNldHRpbmdzKEphdmFMYW5ndWFnZS5JTlNUQU5DRSk7CisgIH0KKworCisgIHB1YmxpYyB2b2lkIHRlc3RNZXRob2RQYXJlbnNTdHlsZTMoKSB0aHJvd3MgRXhjZXB0aW9ueworICAgIGZpbmFsIFN0cmluZyBwYXRoID0gQkFTRV9QQVRIOworICAgIENvbW1vbkNvZGVTdHlsZVNldHRpbmdzIHN0eWxlU2V0dGluZ3MgPSBnZXRDb2RlU3R5bGVTZXR0aW5ncygpOworICAgIGZpbmFsIGJvb2xlYW4gc3BhY2VfYmVmb3JlX21ldGhvZF9jYWxsX3BhcmVudGhlc2VzID0gc3R5bGVTZXR0aW5ncy5TUEFDRV9CRUZPUkVfTUVUSE9EX0NBTExfUEFSRU5USEVTRVM7CisgICAgZmluYWwgYm9vbGVhbiBzcGFjZV93aXRoaW5fbWV0aG9kX2NhbGxfcGFyZW50aGVzZXMgPSBzdHlsZVNldHRpbmdzLlNQQUNFX1dJVEhJTl9NRVRIT0RfQ0FMTF9QQVJFTlRIRVNFUzsKKworICAgIHN0eWxlU2V0dGluZ3MuU1BBQ0VfQkVGT1JFX01FVEhPRF9DQUxMX1BBUkVOVEhFU0VTID0gdHJ1ZTsKKyAgICBzdHlsZVNldHRpbmdzLlNQQUNFX1dJVEhJTl9NRVRIT0RfQ0FMTF9QQVJFTlRIRVNFUyA9IHRydWU7CisgICAgY29uZmlndXJlQnlGaWxlKHBhdGggKyAiL2JlZm9yZTMyLmphdmEiKTsKKyAgICBwZXJmb3JtTm9ybWFsQ29tcGxldGlvbigpOworICAgIGNoZWNrUmVzdWx0QnlGaWxlKHBhdGggKyAiL2FmdGVyMzItYS5qYXZhIik7CisgICAgc3R5bGVTZXR0aW5ncy5TUEFDRV9CRUZPUkVfTUVUSE9EX0NBTExfUEFSRU5USEVTRVMgPSBzcGFjZV9iZWZvcmVfbWV0aG9kX2NhbGxfcGFyZW50aGVzZXM7CisgICAgc3R5bGVTZXR0aW5ncy5TUEFDRV9XSVRISU5fTUVUSE9EX0NBTExfUEFSRU5USEVTRVMgPSBzcGFjZV93aXRoaW5fbWV0aG9kX2NhbGxfcGFyZW50aGVzZXM7CisgIH0KKworICAvKnB1YmxpYyB2b2lkIHRlc3RDbGFzc05hbWVDb21wbGV0aW9uMSgpIHRocm93cyBFeGNlcHRpb257CisgICAgZmluYWwgU3RyaW5nIHBhdGggPSBCQVNFX1BBVEg7CisgICAgY29uZmlndXJlQnlGaWxlKHBhdGggKyAiL2JlZm9yZTM0LmphdmEiKTsKKyAgICBwZXJmb3JtQ2xhc3NOYW1lQ29tcGxldGlvbigpOworICAgIHNlbGVjdCgnPCcsIGdldFNlbGVjdGVkKCkpOworICAgIGNoZWNrUmVzdWx0QnlGaWxlKHBhdGggKyAiL2FmdGVyMzQuamF2YSIpOworICB9ICovCisKKyAgcHVibGljIHZvaWQgdGVzdFN0YXRpY3NDb21wbGV0aW9uMSgpIHRocm93cyBFeGNlcHRpb257CisgICAgZmluYWwgU3RyaW5nIHBhdGggPSBCQVNFX1BBVEg7CisgICAgY29uZmlndXJlQnlGaWxlKHBhdGggKyAiL2JlZm9yZTMzLmphdmEiKTsKKyAgICBwZXJmb3JtU21hcnRDb21wbGV0aW9uKCk7CisgICAgc2VsZWN0KExvb2t1cC5OT1JNQUxfU0VMRUNUX0NIQVIsIGdldFNlbGVjdGVkKCkpOworICAgIGNoZWNrUmVzdWx0QnlGaWxlKHBhdGggKyAiL2FmdGVyMzMuamF2YSIpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFN0YXRpY3NDb21wbGV0aW9uMigpIHRocm93cyBFeGNlcHRpb257CisgICAgZmluYWwgU3RyaW5nIHBhdGggPSBCQVNFX1BBVEg7CisgICAgY29uZmlndXJlQnlGaWxlKHBhdGggKyAiL2JlZm9yZTM5LmphdmEiKTsKKyAgICBwZXJmb3JtU21hcnRDb21wbGV0aW9uKCk7CisgICAgc2VsZWN0KExvb2t1cC5OT1JNQUxfU0VMRUNUX0NIQVIsIGdldFNlbGVjdGVkKCkpOworICAgIGNoZWNrUmVzdWx0QnlGaWxlKHBhdGggKyAiL2FmdGVyMzkuamF2YSIpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEphdmFEb2NMaW5rQ29tcGxldGlvbjEoKSB0aHJvd3MgRXhjZXB0aW9ueworICAgIGZpbmFsIFN0cmluZyBwYXRoID0gQkFTRV9QQVRIOworICAgIGNvbmZpZ3VyZUJ5RmlsZShwYXRoICsgIi9iZWZvcmUzNi5qYXZhIik7CisgICAgcGVyZm9ybU5vcm1hbENvbXBsZXRpb24oKTsKKyAgICBzZWxlY3QoTG9va3VwLlJFUExBQ0VfU0VMRUNUX0NIQVIsIGdldFNlbGVjdGVkKCkpOworICAgIGNoZWNrUmVzdWx0QnlGaWxlKHBhdGggKyAiL2FmdGVyMzYuamF2YSIpOworICB9CisKKworICBwdWJsaWMgdm9pZCB0ZXN0R2V0dGVyTmFtZUluSW50ZXJmYWNlKCkgdGhyb3dzIEV4Y2VwdGlvbnsKKyAgICBmaW5hbCBTdHJpbmcgcGF0aCA9IEJBU0VfUEFUSDsKKyAgICBjb25maWd1cmVCeUZpbGUocGF0aCArICIvYmVmb3JlMzguamF2YSIpOworICAgIHBlcmZvcm1Ob3JtYWxDb21wbGV0aW9uKCk7CisgICAgY2hlY2tSZXN1bHRCeUZpbGUocGF0aCArICIvYWZ0ZXIzOC5qYXZhIik7CisgIH0KKworICBwcml2YXRlIHZvaWQgcGVyZm9ybVNtYXJ0Q29tcGxldGlvbigpeworICAgIG5ldyBDb2RlQ29tcGxldGlvbkhhbmRsZXJCYXNlKENvbXBsZXRpb25UeXBlLlNNQVJUKS5pbnZva2VDb21wbGV0aW9uKGdldFByb2plY3QoKSwgZ2V0RWRpdG9yKCkpOworICB9CisKKyAgcHJpdmF0ZSB2b2lkIHBlcmZvcm1Ob3JtYWxDb21wbGV0aW9uKCl7CisgICAgbmV3IENvZGVDb21wbGV0aW9uSGFuZGxlckJhc2UoQ29tcGxldGlvblR5cGUuQkFTSUMpLmludm9rZUNvbXBsZXRpb24oZ2V0UHJvamVjdCgpLCBnZXRFZGl0b3IoKSk7CisgIH0KKworICBwcml2YXRlIHZvaWQgc2VsZWN0KGNoYXIgY29tcGxldGlvbkNoYXIsIGludCBpbmRleCl7CisgICAgKChMb29rdXBNYW5hZ2VySW1wbClMb29rdXBNYW5hZ2VyLmdldEluc3RhbmNlKGdldFByb2plY3QoKSkpLmZvcmNlU2VsZWN0aW9uKGNvbXBsZXRpb25DaGFyLCBpbmRleCk7CisgIH0KKworICBwcml2YXRlIHZvaWQgc2VsZWN0KGNoYXIgY29tcGxldGlvbkNoYXIsIExvb2t1cEVsZW1lbnQgaXRlbSl7CisgICAgKChMb29rdXBNYW5hZ2VySW1wbClMb29rdXBNYW5hZ2VyLmdldEluc3RhbmNlKGdldFByb2plY3QoKSkpLmZvcmNlU2VsZWN0aW9uKGNvbXBsZXRpb25DaGFyLCBpdGVtKTsKKyAgfQorCisgIHByaXZhdGUgTG9va3VwRWxlbWVudCBnZXRTZWxlY3RlZCgpeworICAgIHJldHVybiBMb29rdXBNYW5hZ2VyLmdldEluc3RhbmNlKGdldFByb2plY3QoKSkuZ2V0QWN0aXZlTG9va3VwKCkuZ2V0Q3VycmVudEl0ZW0oKTsKKyAgfQorCisgIEBPdmVycmlkZQorICBwcm90ZWN0ZWQgdm9pZCB0ZWFyRG93bigpIHRocm93cyBFeGNlcHRpb24geworICAgIExvb2t1cE1hbmFnZXIuZ2V0SW5zdGFuY2UoZ2V0UHJvamVjdCgpKS5oaWRlQWN0aXZlTG9va3VwKCk7CisgICAgc3VwZXIudGVhckRvd24oKTsgICAgLy9UbyBjaGFuZ2UgYm9keSBvZiBvdmVycmlkZW4gbWV0aG9kcyB1c2UgT3B0aW9ucyB8IEZpbGUgVGVtcGxhdGVzLgorICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEFmdGVyTmV3MTUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBmaW5hbCBMYW5ndWFnZUxldmVsUHJvamVjdEV4dGVuc2lvbiBsbCA9IExhbmd1YWdlTGV2ZWxQcm9qZWN0RXh0ZW5zaW9uLmdldEluc3RhbmNlKGdldFByb2plY3QoKSk7CisgICAgZmluYWwgTGFuZ3VhZ2VMZXZlbCBvbGQgPSBsbC5nZXRMYW5ndWFnZUxldmVsKCk7CisgICAgbGwuc2V0TGFuZ3VhZ2VMZXZlbChMYW5ndWFnZUxldmVsLkpES18xXzUpOworCisgICAgdHJ5IHsKKyAgICAgIGZpbmFsIFN0cmluZyBwYXRoID0gQkFTRV9QQVRIOworICAgICAgY29uZmlndXJlQnlGaWxlKHBhdGggKyAiL0FmdGVyTmV3MTUuamF2YSIpOworICAgICAgcGVyZm9ybVNtYXJ0Q29tcGxldGlvbigpOworICAgICAgc2VsZWN0KCdcbicsIGdldFNlbGVjdGVkKCkpOworICAgICAgY2hlY2tSZXN1bHRCeUZpbGUocGF0aCArICIvQWZ0ZXJOZXcxNS1vdXQuamF2YSIpOworICAgIH0KKyAgICBmaW5hbGx5IHsKKyAgICAgIGxsLnNldExhbmd1YWdlTGV2ZWwob2xkKTsKKyAgICB9CisgIH0KKworfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vQ3VzdG9tRmlsZVR5cGVDb21wbGV0aW9uVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vQ3VzdG9tRmlsZVR5cGVDb21wbGV0aW9uVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIzMjk3OGEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovY29kZUluc2lnaHQvY29tcGxldGlvbi9DdXN0b21GaWxlVHlwZUNvbXBsZXRpb25UZXN0LmphdmEKQEAgLTAsMCArMSwzNSBAQAorcGFja2FnZSBjb20uaW50ZWxsaWouY29kZUluc2lnaHQuY29tcGxldGlvbjsKKworaW1wb3J0IGNvbS5pbnRlbGxpai5KYXZhVGVzdFV0aWw7CitpbXBvcnQgb3JnLmpldGJyYWlucy5hbm5vdGF0aW9ucy5Ob3ROdWxsOworCisvKioKKyAqIEBhdXRob3IgTWF4aW0uTW9zc2llbmtvCisgKi8KK3B1YmxpYyBjbGFzcyBDdXN0b21GaWxlVHlwZUNvbXBsZXRpb25UZXN0IGV4dGVuZHMgTGlnaHRDb21wbGV0aW9uVGVzdENhc2UgeworICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQkFTRV9QQVRIID0gIi9jb2RlSW5zaWdodC9jb21wbGV0aW9uL2N1c3RvbUZpbGVUeXBlLyI7CisKKyAgQE5vdE51bGwKKyAgQE92ZXJyaWRlCisgIHByb3RlY3RlZCBTdHJpbmcgZ2V0VGVzdERhdGFQYXRoKCkgeworICAgIHJldHVybiBKYXZhVGVzdFV0aWwuZ2V0SmF2YVRlc3REYXRhUGF0aCgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEtleVdvcmRDb21wbGV0aW9uKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgY29uZmlndXJlQnlGaWxlKEJBU0VfUEFUSCArICIxLmNzIik7CisgICAgY2hlY2tSZXN1bHRCeUZpbGUoQkFTRV9QQVRIICsgIjFfYWZ0ZXIuY3MiKTsKKworICAgIGNvbmZpZ3VyZUJ5RmlsZShCQVNFX1BBVEggKyAiMi5jcyIpOworICAgIGNoZWNrUmVzdWx0QnlGaWxlKEJBU0VfUEFUSCArICIyX2FmdGVyLmNzIik7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0V29yZENvbXBsZXRpb24oKSB0aHJvd3MgVGhyb3dhYmxlIHsKKyAgICBjb25maWd1cmVCeUZpbGUoQkFTRV9QQVRIICsgIldvcmRDb21wbGV0aW9uLmNzIik7CisgICAgdGVzdEJ5Q291bnQoMiwgIndoaWxlIiwgIndoaXdoaXdoaSIpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEVybGFuZygpIHRocm93cyBUaHJvd2FibGUgeworICAgIGNvbmZpZ3VyZUJ5RmlsZShCQVNFX1BBVEggKyAiRXJsYW5nLmVybCIpOworICAgIHRlc3RCeUNvdW50KDIsICJjYXNlIiwgImNhdGNoIik7CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9jb2RlSW5zaWdodC9jb21wbGV0aW9uL0RvdENvbXBsZXRpb25UZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovY29kZUluc2lnaHQvY29tcGxldGlvbi9Eb3RDb21wbGV0aW9uVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUxNTk1M2QKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovY29kZUluc2lnaHQvY29tcGxldGlvbi9Eb3RDb21wbGV0aW9uVGVzdC5qYXZhCkBAIC0wLDAgKzEsMTEyIEBACisvKgorICogQ29weXJpZ2h0IDIwMDAtMjAxMSBKZXRCcmFpbnMgcy5yLm8uCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworcGFja2FnZSBjb20uaW50ZWxsaWouY29kZUluc2lnaHQuY29tcGxldGlvbjsKKworaW1wb3J0IGNvbS5pbnRlbGxpai5KYXZhVGVzdFV0aWw7CitpbXBvcnQgY29tLmludGVsbGlqLmNvZGVJbnNpZ2h0LkNvZGVJbnNpZ2h0U2V0dGluZ3M7CitpbXBvcnQgb3JnLmpldGJyYWlucy5hbm5vdGF0aW9ucy5Ob3ROdWxsOworCisvKioKKyAqIEBhdXRob3IgaWsKKyAqIERhdGU6IDIxLjAxLjIwMDMKKyAqLworcHVibGljIGNsYXNzIERvdENvbXBsZXRpb25UZXN0IGV4dGVuZHMgTGlnaHRDb21wbGV0aW9uVGVzdENhc2UgeworICBATm90TnVsbAorICBAT3ZlcnJpZGUKKyAgcHJvdGVjdGVkIFN0cmluZyBnZXRUZXN0RGF0YVBhdGgoKSB7CisgICAgcmV0dXJuIEphdmFUZXN0VXRpbC5nZXRKYXZhVGVzdERhdGFQYXRoKCkgKyAiL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vZG90LyI7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0SW5zdGFuY2UoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBjb25maWd1cmVCeUZpbGUoIkRvdDEuamF2YSIpOworICAgIGFzc2VydEVxdWFscygiIiwgbXlQcmVmaXgpOworICAgIGFzc2VydENvbnRhaW5zSXRlbXMoImEiLCAiZm9vIik7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0Q2xhc3MoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBjb25maWd1cmVCeUZpbGUoIkRvdDIuamF2YSIpOworICAgIGFzc2VydEVxdWFscygiIiwgbXlQcmVmaXgpOworICAgIGFzc2VydENvbnRhaW5zSXRlbXMoImEiLCAiZm9vIik7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0QW5vbnltb3VzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgY29uZmlndXJlQnlGaWxlKCJEb3QzLmphdmEiKTsKKyAgICBhc3NlcnRFcXVhbHMoIiIsIG15UHJlZml4KTsKKyAgICBhc3NlcnRDb250YWluc0l0ZW1zKCJhIiwgImZvbyIpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFNob3dTdGF0aWMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBDb2RlSW5zaWdodFNldHRpbmdzIHNldHRpbmdzID0gQ29kZUluc2lnaHRTZXR0aW5ncy5nZXRJbnN0YW5jZSgpOworICAgIGJvb2xlYW4gb2xkU2V0dGluZyA9IHNldHRpbmdzLlNIT1dfU1RBVElDX0FGVEVSX0lOU1RBTkNFOworICAgIHNldHRpbmdzLlNIT1dfU1RBVElDX0FGVEVSX0lOU1RBTkNFID0gZmFsc2U7CisgICAgdHJ5IHsKKyAgICAgIGNvbmZpZ3VyZUJ5RmlsZSgiRG90NC5qYXZhIik7CisgICAgICBhc3NlcnRFcXVhbHMoIiIsIG15UHJlZml4KTsKKyAgICAgIGFzc2VydENvbnRhaW5zSXRlbXMoImZvbyIpOworICAgICAgYXNzZXJ0Tm90Q29udGFpbkl0ZW1zKCJhIik7CisgICAgfQorICAgIGZpbmFsbHkgeworICAgICAgc2V0dGluZ3MuU0hPV19TVEFUSUNfQUZURVJfSU5TVEFOQ0UgPSBvbGRTZXR0aW5nOworICAgIH0KKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RJbXBvcnRzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgY29uZmlndXJlQnlGaWxlKCJEb3Q1LmphdmEiKTsKKyAgICBhc3NlcnRDb250YWluc0l0ZW1zKCJ1dGlsIiwgImxhbmciKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RBcnJheUVsZW1lbnQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBjb25maWd1cmVCeUZpbGUoIkRvdDYuamF2YSIpOworICAgIGFzc2VydENvbnRhaW5zSXRlbXMoInRvU3RyaW5nIiwgInN1YnN0cmluZyIpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEFycmF5KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgY29uZmlndXJlQnlGaWxlKCJEb3Q3LmphdmEiKTsKKyAgICBhc3NlcnRDb250YWluc0l0ZW1zKCJjbG9uZSIsICJsZW5ndGgiKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3REdXBsaWNhdGVzRnJvbUluaGVyaXRhbmNlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgY29uZmlndXJlQnlGaWxlKCJEb3Q4LmphdmEiKTsKKyAgICBhc3NlcnRDb250YWluc0l0ZW1zKCJ0b1N0cmluZyIpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdENvbnN0cnVjdG9yRXhjbHVzaW9uKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgY29uZmlndXJlQnlGaWxlKCJEb3Q5LmphdmEiKTsKKyAgICBhc3NlcnRDb250YWluc0l0ZW1zKCJmb28iKTsKKyAgICBhc3NlcnROb3RDb250YWluSXRlbXMoIkEiKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RQcmltaXRpdmVBcnJheSgpIHRocm93cyBFeGNlcHRpb24geworICAgIGNvbmZpZ3VyZUJ5RmlsZSgiRG90MTAuamF2YSIpOworICAgIGFzc2VydENvbnRhaW5zSXRlbXMoImNsb25lIiwgImxlbmd0aCIpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFRoaXNFeHByZXNzaW9uKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgY29uZmlndXJlQnlGaWxlKCJEb3QxMS5qYXZhIik7CisgICAgYXNzZXJ0Q29udGFpbnNJdGVtcygiZm9vIiwgImZvbzEiKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RTdXBlckV4cHJlc3Npb24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBjb25maWd1cmVCeUZpbGUoIkRvdDEyLmphdmEiKTsKKyAgICBhc3NlcnRDb250YWluc0l0ZW1zKCJmb28iKTsKKyAgICBhc3NlcnROb3RDb250YWluSXRlbXMoImZvbzEiKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RNdWx0aUNhdGNoKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgY29uZmlndXJlQnlGaWxlKCJNdWx0aUNhdGNoLmphdmEiKTsKKyAgICBhc3NlcnRDb250YWluc0l0ZW1zKCJpIiwgImFkZFN1cHByZXNzZWQiLCAiZ2V0TWVzc2FnZSIsICJwcmludFN0YWNrVHJhY2UiKTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vRnJhZ21lbnRDb21wbGV0aW9uVGVzdC5ncm9vdnkgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovY29kZUluc2lnaHQvY29tcGxldGlvbi9GcmFnbWVudENvbXBsZXRpb25UZXN0Lmdyb292eQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZjAwMGYyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vRnJhZ21lbnRDb21wbGV0aW9uVGVzdC5ncm9vdnkKQEAgLTAsMCArMSw4MSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDAwLTIwMTIgSmV0QnJhaW5zIHMuci5vLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KK3BhY2thZ2UgY29tLmludGVsbGlqLmNvZGVJbnNpZ2h0LmNvbXBsZXRpb247CisKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS5maWxlVHlwZXMuU3RkRmlsZVR5cGVzOworaW1wb3J0IGNvbS5pbnRlbGxpai5wc2kuQ29tbW9uQ2xhc3NOYW1lczsKK2ltcG9ydCBjb20uaW50ZWxsaWoucHNpLkphdmFDb2RlRnJhZ21lbnRGYWN0b3J5OworaW1wb3J0IGNvbS5pbnRlbGxpai5wc2kuUHNpRmlsZQoraW1wb3J0IGNvbS5pbnRlbGxpai50ZXN0RnJhbWV3b3JrLmZpeHR1cmVzLkxpZ2h0Q29kZUluc2lnaHRGaXh0dXJlVGVzdENhc2U7CisKKy8qKgorICogQGF1dGhvciBwZXRlcgorICovCitwdWJsaWMgY2xhc3MgRnJhZ21lbnRDb21wbGV0aW9uVGVzdCBleHRlbmRzIExpZ2h0Q29kZUluc2lnaHRGaXh0dXJlVGVzdENhc2UgeworICBwdWJsaWMgdm9pZCB0ZXN0RG9udENvbXBsZXRlRmllbGRzQW5kTWV0aG9kc0luUmVmZXJlbmNlQ29kZUZyYWdtZW50KCkgdGhyb3dzIFRocm93YWJsZSB7CisgICAgZmluYWwgU3RyaW5nIHRleHQgPSBDb21tb25DbGFzc05hbWVzLkpBVkFfTEFOR19PQkpFQ1QgKyAiLjxjYXJldD4iOworICAgIFBzaUZpbGUgZmlsZSA9IEphdmFDb2RlRnJhZ21lbnRGYWN0b3J5LmdldEluc3RhbmNlKHByb2plY3QpLmNyZWF0ZVJlZmVyZW5jZUNvZGVGcmFnbWVudCh0ZXh0LCBudWxsLCB0cnVlLCB0cnVlKTsKKyAgICBteUZpeHR1cmUuY29uZmlndXJlRnJvbUV4aXN0aW5nVmlydHVhbEZpbGUoZmlsZS5nZXRWaXJ0dWFsRmlsZSgpKTsKKyAgICBhc3NlcnQgIW15Rml4dHVyZS5jb21wbGV0ZUJhc2ljKCkKKyAgICBteUZpeHR1cmUuY2hlY2tSZXN1bHQodGV4dCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0Tm9LZXl3b3Jkc0luUmVmZXJlbmNlQ29kZUZyYWdtZW50KCkgdGhyb3dzIFRocm93YWJsZSB7CisgICAgUHNpRmlsZSBmaWxlID0gSmF2YUNvZGVGcmFnbWVudEZhY3RvcnkuZ2V0SW5zdGFuY2UocHJvamVjdCkuY3JlYXRlUmVmZXJlbmNlQ29kZUZyYWdtZW50KCI8Y2FyZXQ+IiwgbnVsbCwgdHJ1ZSwgdHJ1ZSk7CisgICAgbXlGaXh0dXJlLmNvbmZpZ3VyZUZyb21FeGlzdGluZ1ZpcnR1YWxGaWxlKGZpbGUuZ2V0VmlydHVhbEZpbGUoKSk7CisgICAgYXNzZXJ0IG15Rml4dHVyZS5jb21wbGV0ZUJhc2ljKCkKKyAgICBhc3NlcnQgISgncGFja2FnZScgaW4gbXlGaXh0dXJlLmxvb2t1cEVsZW1lbnRTdHJpbmdzKQorICAgIGFzc2VydCAhKCdpbXBvcnQnIGluIG15Rml4dHVyZS5sb29rdXBFbGVtZW50U3RyaW5ncykKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3ROb1BhY2thZ2VzSW5FeHByZXNzaW9uQ29kZUZyYWdtZW50KCkgdGhyb3dzIFRocm93YWJsZSB7CisgICAgZmluYWwgU3RyaW5nIHRleHQgPSAiamF2PGNhcmV0PiI7CisgICAgUHNpRmlsZSBmaWxlID0gSmF2YUNvZGVGcmFnbWVudEZhY3RvcnkuZ2V0SW5zdGFuY2UocHJvamVjdCkuY3JlYXRlRXhwcmVzc2lvbkNvZGVGcmFnbWVudCh0ZXh0LCBudWxsLCBudWxsLCB0cnVlKTsKKyAgICBteUZpeHR1cmUuY29uZmlndXJlRnJvbUV4aXN0aW5nVmlydHVhbEZpbGUoZmlsZS5nZXRWaXJ0dWFsRmlsZSgpKTsKKyAgICBhc3NlcnQgIW15Rml4dHVyZS5jb21wbGV0ZUJhc2ljKCkKKyAgICBteUZpeHR1cmUuY2hlY2tSZXN1bHQodGV4dCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0U3ViUGFja2FnZXNJbkV4cHJlc3Npb25Db2RlRnJhZ21lbnQoKSB0aHJvd3MgVGhyb3dhYmxlIHsKKyAgICBQc2lGaWxlIGZpbGUgPSBKYXZhQ29kZUZyYWdtZW50RmFjdG9yeS5nZXRJbnN0YW5jZShwcm9qZWN0KS5jcmVhdGVFeHByZXNzaW9uQ29kZUZyYWdtZW50KCJqYXZhLmxhPGNhcmV0PiIsIG51bGwsIG51bGwsIHRydWUpOworICAgIG15Rml4dHVyZS5jb25maWd1cmVGcm9tRXhpc3RpbmdWaXJ0dWFsRmlsZShmaWxlLmdldFZpcnR1YWxGaWxlKCkpOworICAgIGFzc2VydCAhbXlGaXh0dXJlLmNvbXBsZXRlQmFzaWMoKQorICAgIG15Rml4dHVyZS5jaGVja1Jlc3VsdCgiamF2YS5sYW5nLjxjYXJldD4iKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RQcmltaXRpdmVzSW5UeXBlQ29kZUZyYWdtZW50V2l0aFBhcmFtZXRlckxpc3RDb250ZXh0KCkgdGhyb3dzIFRocm93YWJsZSB7CisgICAgZGVmIGNsYXp6ID0gbXlGaXh0dXJlLmFkZENsYXNzKCJjbGFzcyBGb28geyB2b2lkIGZvbyhpbnQgYSkge30gfSIpCisKKyAgICBQc2lGaWxlIGZpbGUgPSBKYXZhQ29kZUZyYWdtZW50RmFjdG9yeS5nZXRJbnN0YW5jZShwcm9qZWN0KS5jcmVhdGVUeXBlQ29kZUZyYWdtZW50KCJiPGNhcmV0PiIsIGNsYXp6Lm1ldGhvZHNbMF0ucGFyYW1ldGVyTGlzdCwgdHJ1ZSk7CisgICAgbXlGaXh0dXJlLmNvbmZpZ3VyZUZyb21FeGlzdGluZ1ZpcnR1YWxGaWxlKGZpbGUuZ2V0VmlydHVhbEZpbGUoKSk7CisgICAgbXlGaXh0dXJlLmNvbXBsZXRlQmFzaWMoKQorICAgIGFzc2VydCBteUZpeHR1cmUubG9va3VwRWxlbWVudFN0cmluZ3NbMC4uMV0gPT0gWydib29sZWFuJywgJ2J5dGUnXQorICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFF1YWxpZmllckNhc3RpbmdJbkV4cHJlc3Npb25Db2RlRnJhZ21lbnQoKSB0aHJvd3MgVGhyb3dhYmxlIHsKKyAgICBmaW5hbCBjdHhUZXh0ID0gImNsYXNzIEJhciB7eyBPYmplY3Qgbzsgbz1udWxsIH19IgorICAgIGZpbmFsIGN0eEZpbGUgPSBjcmVhdGVMaWdodEZpbGUoU3RkRmlsZVR5cGVzLkpBVkEsIGN0eFRleHQpCisgICAgZmluYWwgY29udGV4dCA9IGN0eEZpbGUuZmluZEVsZW1lbnRBdChjdHhUZXh0LmluZGV4T2YoIm89IikpCisgICAgYXNzZXJ0IGNvbnRleHQKKworICAgIFBzaUZpbGUgZmlsZSA9IEphdmFDb2RlRnJhZ21lbnRGYWN0b3J5LmdldEluc3RhbmNlKHByb2plY3QpLmNyZWF0ZUV4cHJlc3Npb25Db2RlRnJhZ21lbnQoIm8gaW5zdGFuY2VvZiBTdHJpbmcgJiYgby5zdWJzdDxjYXJldD4iLCBjb250ZXh0LCBudWxsLCB0cnVlKTsKKyAgICBteUZpeHR1cmUuY29uZmlndXJlRnJvbUV4aXN0aW5nVmlydHVhbEZpbGUoZmlsZS5nZXRWaXJ0dWFsRmlsZSgpKTsKKyAgICBhc3NlcnQgIW15Rml4dHVyZS5jb21wbGV0ZUJhc2ljKCkKKyAgICBteUZpeHR1cmUuY2hlY2tSZXN1bHQoIm8gaW5zdGFuY2VvZiBTdHJpbmcgJiYgKChTdHJpbmcpIG8pLnN1YnN0cmluZyg8Y2FyZXQ+KSIpOworICB9CisKKworfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vR2xvYmFsTWVtYmVyTmFtZUNvbXBsZXRpb25UZXN0Lmdyb292eSBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9jb2RlSW5zaWdodC9jb21wbGV0aW9uL0dsb2JhbE1lbWJlck5hbWVDb21wbGV0aW9uVGVzdC5ncm9vdnkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWZjNDE0NQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9jb2RlSW5zaWdodC9jb21wbGV0aW9uL0dsb2JhbE1lbWJlck5hbWVDb21wbGV0aW9uVGVzdC5ncm9vdnkKQEAgLTAsMCArMSwyMTEgQEAKK3BhY2thZ2UgY29tLmludGVsbGlqLmNvZGVJbnNpZ2h0LmNvbXBsZXRpb247CisKK2ltcG9ydCBjb20uaW50ZWxsaWoudGVzdEZyYW1ld29yay5maXh0dXJlcy5MaWdodENvZGVJbnNpZ2h0Rml4dHVyZVRlc3RDYXNlCitpbXBvcnQgY29tLmludGVsbGlqLmNvZGVJbnNpZ2h0LkNvZGVJbnNpZ2h0U2V0dGluZ3MKK2ltcG9ydCBjb20uaW50ZWxsaWoudXRpbC5BcnJheVV0aWwKK2ltcG9ydCBjb20uaW50ZWxsaWouY29kZUluc2lnaHQubG9va3VwLkxvb2t1cEVsZW1lbnRQcmVzZW50YXRpb24KK2ltcG9ydCBjb20uaW50ZWxsaWouY29kZUluc2lnaHQubG9va3VwLkxvb2t1cEVsZW1lbnQ7CisKKy8qKgorICogQGF1dGhvciBwZXRlcgorICovCitwdWJsaWMgY2xhc3MgR2xvYmFsTWVtYmVyTmFtZUNvbXBsZXRpb25UZXN0IGV4dGVuZHMgTGlnaHRDb2RlSW5zaWdodEZpeHR1cmVUZXN0Q2FzZSB7CisKKyAgcHVibGljIHZvaWQgdGVzdE1ldGhvZE5hbWUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBteUZpeHR1cmUuYWRkQ2xhc3MoIiIiCitwYWNrYWdlIGZvbzsKKworcHVibGljIGNsYXNzIEZvbyB7CisgIHB1YmxpYyBzdGF0aWMgaW50IGFiY21ldGhvZCgpIHt9CisgIHN0YXRpYyB2b2lkIG1ldGhvZFRoYXRzTm90VmlzaWJsZSgpIHt9Cit9CisiIiIpCisKKyAgICBkb1Rlc3QgImNsYXNzIEJhciB7eyBhYmNtPGNhcmV0PiB9fSIsIHRydWUsICIiImltcG9ydCBzdGF0aWMgZm9vLkZvby5hYmNtZXRob2Q7CisKK2NsYXNzIEJhciB7eyBhYmNtZXRob2QoKTxjYXJldD4gfX0iIiIKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RGaWVsZE5hbWUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBteUZpeHR1cmUuYWRkQ2xhc3MoIiIiCitwYWNrYWdlIGZvbzsKKworcHVibGljIGNsYXNzIEZvbyB7CisgIHB1YmxpYyBzdGF0aWMgaW50IGFiY2ZpZWxkID0gMgorICBzdGF0aWMgZmluYWwgaW50IGZpZWxkVGhhdHNOb3RWaXNpYmxlID0gMworfQorIiIiKQorCisgICAgZG9UZXN0ICJjbGFzcyBCYXIge3sgYWJjZjxjYXJldD4gfX0iLCB0cnVlLCAiIiJpbXBvcnQgc3RhdGljIGZvby5Gb28uYWJjZmllbGQ7CisKK2NsYXNzIEJhciB7eyBhYmNmaWVsZDxjYXJldD4gfX0iIiIKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RGaWVsZE5hbWVRdWFsaWZpZWQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBteUZpeHR1cmUuYWRkQ2xhc3MoIiIiCitwYWNrYWdlIGZvbzsKKworcHVibGljIGNsYXNzIEZvbyB7CisgIHB1YmxpYyBzdGF0aWMgaW50IGFiY2ZpZWxkID0gMgorICBzdGF0aWMgZmluYWwgaW50IGZpZWxkVGhhdHNOb3RWaXNpYmxlID0gMworfQorIiIiKQorCisgICAgZG9UZXN0ICJjbGFzcyBCYXIge3sgYWJjZjxjYXJldD4gfX0iLCBmYWxzZSwgIiIiaW1wb3J0IGZvby5Gb287CisKK2NsYXNzIEJhciB7eyBGb28uYWJjZmllbGQ8Y2FyZXQ+IH19IiIiCisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0RmllbGROYW1lUHJlc2VudGF0aW9uKCkgeworICAgIG15Rml4dHVyZS5hZGRDbGFzcygiIiIKK3BhY2thZ2UgZm9vOworCitwdWJsaWMgY2xhc3MgRm9vIHsKKyAgcHVibGljIHN0YXRpYyBpbnQgYWJjZmllbGQgPSAyCisgIHN0YXRpYyBmaW5hbCBpbnQgZmllbGRUaGF0c05vdFZpc2libGUgPSAzCit9CisiIiIpCisgICAgbXlGaXh0dXJlLmNvbmZpZ3VyZUJ5VGV4dCAiYS5qYXZhIiwgImNsYXNzIEJhciB7eyBhYmNmPGNhcmV0PiB9fSIKKyAgICBkZWYgZWxlbWVudCA9IGNvbXBsZXRlKClbMF0KKyAgICBkZWYgcHJlc2VudGF0aW9uID0gTG9va3VwRWxlbWVudFByZXNlbnRhdGlvbi5yZW5kZXJFbGVtZW50KGVsZW1lbnQpCisgICAgYXNzZXJ0ICdGb28uYWJjZmllbGQnID09IHByZXNlbnRhdGlvbi5pdGVtVGV4dAorICAgIGFzc2VydCAnIChmb28pJyA9PSBwcmVzZW50YXRpb24udGFpbFRleHQKKyAgICBhc3NlcnQgJ2ludCcgPT0gcHJlc2VudGF0aW9uLnR5cGVUZXh0CisgIH0KKworICBwcml2YXRlIExvb2t1cEVsZW1lbnRbXSBjb21wbGV0ZSgpIHsKKyAgICBteUZpeHR1cmUuY29tcGxldGUoQ29tcGxldGlvblR5cGUuQkFTSUMsIDIpCisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0UXVhbGlmaWVkTWV0aG9kTmFtZSgpIHRocm93cyBFeGNlcHRpb24geworICAgIG15Rml4dHVyZS5hZGRDbGFzcygiIiIKK3BhY2thZ2UgZm9vOworCitwdWJsaWMgY2xhc3MgRm9vIHsKKyAgcHVibGljIHN0YXRpYyBpbnQgYWJjbWV0aG9kKCkge30KK30KKyIiIikKKworICAgIGRvVGVzdCAiY2xhc3MgQmFyIHt7IGFiY208Y2FyZXQ+IH19IiwgZmFsc2UsICIiImltcG9ydCBmb28uRm9vOworCitjbGFzcyBCYXIge3sgRm9vLmFiY21ldGhvZCgpPGNhcmV0PiB9fSIiIgorICB9CisKKyAgcHVibGljIHZvaWQgdGVzdElmVGhlcmVBcmVBbHJlYWR5U3RhdGljSW1wb3J0c1dpdGhUaGF0Q2xhc3MoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBteUZpeHR1cmUuYWRkQ2xhc3MoIiIiCitwYWNrYWdlIGZvbzsKKworcHVibGljIGNsYXNzIEZvbyB7CisgIHB1YmxpYyBzdGF0aWMgaW50IGFub3RoZXJNZXRob2QoaW50IGEpIHt9CisgIHB1YmxpYyBzdGF0aWMgaW50IGFiY21ldGhvZCgpIHt9CisgIHZvaWQgbWV0aG9kVGhhdHNOb3RWaXNpYmxlKCkge30KK30KKyIiIikKKworICAgIGRvVGVzdCAiIiJpbXBvcnQgc3RhdGljIGZvby5Gb28uYWJjbWV0aG9kOworCitjbGFzcyBCYXIge3sgYWJjbWV0aG9kKCk7IGFub01lPGNhcmV0PiB9fSIiIiwgZmFsc2UsCisgICAgICAgICAgICIiImltcG9ydCBzdGF0aWMgZm9vLkZvby5hYmNtZXRob2Q7CitpbXBvcnQgc3RhdGljIGZvby5Gb28uYW5vdGhlck1ldGhvZDsKKworY2xhc3MgQmFyIHt7IGFiY21ldGhvZCgpOyBhbm90aGVyTWV0aG9kKDxjYXJldD4pIH19IiIiCisgIH0KKworCisgIEBPdmVycmlkZSBwcm90ZWN0ZWQgdm9pZCB0ZWFyRG93bigpIHsKKyAgICBDb2RlSW5zaWdodFNldHRpbmdzLmluc3RhbmNlLkVYQ0xVREVEX1BBQ0tBR0VTID0gQXJyYXlVdGlsLkVNUFRZX1NUUklOR19BUlJBWQorICAgIHN1cGVyLnRlYXJEb3duKCkKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RFeGNsdWRlQ2xhc3NGcm9tQ29tcGxldGlvbigpIHRocm93cyBFeGNlcHRpb24geworICAgIG15Rml4dHVyZS5hZGRDbGFzcygiIiJwYWNrYWdlIGZvbzsKKyAgICAgIHB1YmxpYyBjbGFzcyBGb28geworICAgICAgICBwdWJsaWMgc3RhdGljIGludCBhYmNtZXRob2QoKSB7fQorICAgICAgfQorICAgICIiIikKKyAgICBteUZpeHR1cmUuYWRkQ2xhc3MoIiIicGFja2FnZSBmb287CisgICAgICBwdWJsaWMgY2xhc3MgRXhjbCB7CisgICAgICAgIHB1YmxpYyBzdGF0aWMgaW50IGFiY21ldGhvZDIoKSB7fQorICAgICAgfQorICAgICIiIikKKworICAgIENvZGVJbnNpZ2h0U2V0dGluZ3MuaW5zdGFuY2UuRVhDTFVERURfUEFDS0FHRVMgPSBbImZvby5FeGNsIl0gYXMgU3RyaW5nW10KKworICAgIGRvVGVzdCAiY2xhc3MgQmFyIHt7IGFiY208Y2FyZXQ+IH19IiwgdHJ1ZSwgIiIiaW1wb3J0IHN0YXRpYyBmb28uRm9vLmFiY21ldGhvZDsKKworY2xhc3MgQmFyIHt7IGFiY21ldGhvZCgpPGNhcmV0PiB9fSIiIgorICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEV4Y2x1ZGVNZXRob2RGcm9tQ29tcGxldGlvbigpIHRocm93cyBFeGNlcHRpb24geworICAgIG15Rml4dHVyZS5hZGRDbGFzcygiIiJwYWNrYWdlIGZvbzsKKyAgICAgIHB1YmxpYyBjbGFzcyBGb28geworICAgICAgICBwdWJsaWMgc3RhdGljIGludCBhYmNtZXRob2QxKCkge30KKyAgICAgICAgcHVibGljIHN0YXRpYyBpbnQgYWJjbWV0aG9kRXhjbHVkZWQoKSB7fQorICAgICAgfQorICAgICIiIikKKworICAgIENvZGVJbnNpZ2h0U2V0dGluZ3MuaW5zdGFuY2UuRVhDTFVERURfUEFDS0FHRVMgPSBbImZvby5Gb28uYWJjbWV0aG9kRXhjbHVkZWQiXSBhcyBTdHJpbmdbXQorCisgICAgZG9UZXN0ICJjbGFzcyBCYXIge3sgYWJjbTxjYXJldD4gfX0iLCB0cnVlLCAiIiJpbXBvcnQgc3RhdGljIGZvby5Gb28uYWJjbWV0aG9kMTsKKworY2xhc3MgQmFyIHt7IGFiY21ldGhvZDEoKTxjYXJldD4gfX0iIiIKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RNZXJnZU92ZXJsb2FkcygpIHRocm93cyBFeGNlcHRpb24geworICAgIG15Rml4dHVyZS5hZGRDbGFzcygiIiJwYWNrYWdlIGZvbzsKKyAgICAgIHB1YmxpYyBjbGFzcyBGb28geworICAgICAgICBwdWJsaWMgc3RhdGljIGludCBhYmNtZXRob2QoaW50IGEpIHt9CisgICAgICAgIHB1YmxpYyBzdGF0aWMgaW50IGFiY21ldGhvZChib29sZWFuIGEpIHt9CisgICAgICAgIHB1YmxpYyBzdGF0aWMgaW50IGFiY21ldGhvZDEoYm9vbGVhbiBhKSB7fQorICAgICAgfQorICAgICIiIikKKworICAgIG15Rml4dHVyZS5jb25maWd1cmVCeVRleHQoImEuamF2YSIsICJjbGFzcyBCYXIge3sgYWJjbTxjYXJldD4gfX0iKQorICAgIGRlZiBlbGVtZW50ID0gY29tcGxldGUoKVswXQorCisgICAgZGVmIHRhaWwgPSBMb29rdXBFbGVtZW50UHJlc2VudGF0aW9uLnJlbmRlckVsZW1lbnQoZWxlbWVudCkudGFpbEZyYWdtZW50cworICAgIGFzc2VydCB0YWlsWzBdLnRleHQgPT0gJyguLi4pJworICAgIGFzc2VydCAhdGFpbFswXS5ncmF5ZWQKKyAgICBhc3NlcnQgdGFpbFsxXS50ZXh0ID09ICcgKGZvbyknCisgICAgYXNzZXJ0IHRhaWxbMV0uZ3JheWVkCisKKyAgICBhc3NlcnRPcmRlcmVkRXF1YWxzIG15Rml4dHVyZS5sb29rdXBFbGVtZW50U3RyaW5ncywgImFiY21ldGhvZCIsICJhYmNtZXRob2QxIgorICB9CisKKyAgcHVibGljIHZvaWQgdGVzdE1ldGhvZEZyb21UaGVTYW1lQ2xhc3MoKSB7CisgICAgbXlGaXh0dXJlLmNvbmZpZ3VyZUJ5VGV4dCgiYS5qYXZhIiwgIiIiCitjbGFzcyBBIHsKKyAgc3RhdGljIHZvaWQgZm9vKCkge30KKworICBzdGF0aWMgdm9pZCBnb28oKSB7CisgICAgZjxjYXJldD4KKyAgfQorfQorIiIiKQorICAgIGRlZiBlbGVtZW50ID0gY29tcGxldGUoKVswXQorICAgIGRlZiBwcmVzZW50YXRpb24gPSBMb29rdXBFbGVtZW50UHJlc2VudGF0aW9uLnJlbmRlckVsZW1lbnQoZWxlbWVudCkKKyAgICBhc3NlcnQgJ2ZvbycgPT0gcHJlc2VudGF0aW9uLml0ZW1UZXh0CisgICAgbXlGaXh0dXJlLnR5cGUgJ1xuJworICAgIG15Rml4dHVyZS5jaGVja1Jlc3VsdCAnJycKK2NsYXNzIEEgeworICBzdGF0aWMgdm9pZCBmb28oKSB7fQorCisgIHN0YXRpYyB2b2lkIGdvbygpIHsKKyAgICBmb28oKTs8Y2FyZXQ+CisgIH0KK30KKycnJworICB9CisKKyAgcHJpdmF0ZSB2b2lkIGRvVGVzdChTdHJpbmcgaW5wdXQsIGJvb2xlYW4gaW1wb3J0U3RhdGljLCBTdHJpbmcgb3V0cHV0KSB7CisgICAgbXlGaXh0dXJlLmNvbmZpZ3VyZUJ5VGV4dCgiYS5qYXZhIiwgaW5wdXQpCisKKyAgICBkZWYgaXRlbSA9IGFzc2VydE9uZUVsZW1lbnQoY29tcGxldGUoKSkKKyAgICBpZiAoaW1wb3J0U3RhdGljKSB7CisgICAgICBpdGVtLidhcycoU3RhdGljYWxseUltcG9ydGFibGUpLnNob3VsZEJlSW1wb3J0ZWQgPSB0cnVlCisgICAgfQorICAgIG15Rml4dHVyZS50eXBlKCdcbicpCisgICAgbXlGaXh0dXJlLmNoZWNrUmVzdWx0IG91dHB1dAorICB9CisKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9jb2RlSW5zaWdodC9jb21wbGV0aW9uL0hlYXZ5Tm9ybWFsQ29tcGxldGlvblRlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9jb2RlSW5zaWdodC9jb21wbGV0aW9uL0hlYXZ5Tm9ybWFsQ29tcGxldGlvblRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZDJiOGE4Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vSGVhdnlOb3JtYWxDb21wbGV0aW9uVGVzdC5qYXZhCkBAIC0wLDAgKzEsMTEzIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDAwLTIwMDUgYnkgSmV0QnJhaW5zIHMuci5vLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogVXNlIGlzIHN1YmplY3QgdG8gbGljZW5zZSB0ZXJtcy4KKyAqLworcGFja2FnZSBjb20uaW50ZWxsaWouY29kZUluc2lnaHQuY29tcGxldGlvbjsKKworaW1wb3J0IGNvbS5pbnRlbGxpai5KYXZhVGVzdFV0aWw7CitpbXBvcnQgY29tLmludGVsbGlqLmNvZGVJbnNpZ2h0Lmxvb2t1cC5Mb29rdXBFbGVtZW50OworaW1wb3J0IGNvbS5pbnRlbGxpai5jb2RlSW5zaWdodC5sb29rdXAuTG9va3VwTWFuYWdlcjsKK2ltcG9ydCBjb20uaW50ZWxsaWouY29kZUluc2lnaHQubG9va3VwLmltcGwuTG9va3VwSW1wbDsKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS5jb21tYW5kLldyaXRlQ29tbWFuZEFjdGlvbjsKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS5tb2R1bGUuU3RkTW9kdWxlVHlwZXM7CitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkucm9vdHMuQ29udGVudEVudHJ5OworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLnJvb3RzLk1vZGlmaWFibGVSb290TW9kZWw7CitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkucm9vdHMuTW9kdWxlUm9vdE1hbmFnZXI7CitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkucm9vdHMuU291cmNlRm9sZGVyOworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLnZmcy5Mb2NhbEZpbGVTeXN0ZW07CitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkudmZzLlZpcnR1YWxGaWxlOworaW1wb3J0IGNvbS5pbnRlbGxpai5wc2kuSmF2YVBzaUZhY2FkZTsKK2ltcG9ydCBjb20uaW50ZWxsaWoudGVzdEZyYW1ld29yay5Qc2lUZXN0VXRpbDsKK2ltcG9ydCBjb20uaW50ZWxsaWoudGVzdEZyYW1ld29yay5maXh0dXJlcy5KYXZhQ29kZUluc2lnaHRGaXh0dXJlVGVzdENhc2U7CisKKy8qKgorICogQGF1dGhvciBwZXRlcgorICovCitwdWJsaWMgY2xhc3MgSGVhdnlOb3JtYWxDb21wbGV0aW9uVGVzdCBleHRlbmRzIEphdmFDb2RlSW5zaWdodEZpeHR1cmVUZXN0Q2FzZSB7CisKKyAgQE92ZXJyaWRlCisgIHByb3RlY3RlZCBTdHJpbmcgZ2V0VGVzdERhdGFQYXRoKCkgeworICAgIHJldHVybiBKYXZhVGVzdFV0aWwuZ2V0SmF2YVRlc3REYXRhUGF0aCgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFBhY2thZ2VQcmVmaXgoKSB0aHJvd3MgVGhyb3dhYmxlIHsKKyAgICBteUZpeHR1cmUuY29uZmlndXJlQnlGaWxlKCIvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvIiArIGdldFRlc3ROYW1lKGZhbHNlKSArICIuamF2YSIpOworICAgIG5ldyBXcml0ZUNvbW1hbmRBY3Rpb24uU2ltcGxlKGdldFByb2plY3QoKSkgeworICAgICAgQE92ZXJyaWRlCisgICAgICBwcm90ZWN0ZWQgdm9pZCBydW4oKSB0aHJvd3MgVGhyb3dhYmxlIHsKKyAgICAgICAgZmluYWwgTW9kaWZpYWJsZVJvb3RNb2RlbCBtb2RlbCA9IE1vZHVsZVJvb3RNYW5hZ2VyLmdldEluc3RhbmNlKG15Rml4dHVyZS5nZXRNb2R1bGUoKSkuZ2V0TW9kaWZpYWJsZU1vZGVsKCk7CisgICAgICAgIG1vZGVsLmdldENvbnRlbnRFbnRyaWVzKClbMF0uZ2V0U291cmNlRm9sZGVycygpWzBdLnNldFBhY2thZ2VQcmVmaXgoImZvby5iYXIuZ29vIik7CisgICAgICAgIG1vZGVsLmNvbW1pdCgpOworICAgICAgfQorICAgIH0uZXhlY3V0ZSgpLnRocm93RXhjZXB0aW9uKCk7CisKKyAgICBteUZpeHR1cmUuY29tcGxldGVCYXNpYygpOworICAgIG15Rml4dHVyZS5jaGVja1Jlc3VsdEJ5RmlsZSgiL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsLyIgKyBnZXRUZXN0TmFtZShmYWxzZSkgKyAiX2FmdGVyLmphdmEiKTsKKyAgICBhc3NlcnRUcnVlKEphdmFQc2lGYWNhZGUuZ2V0SW5zdGFuY2UoZ2V0UHJvamVjdCgpKS5maW5kUGFja2FnZSgiZm9vIikuaXNWYWxpZCgpKTsKKyAgICBhc3NlcnRUcnVlKEphdmFQc2lGYWNhZGUuZ2V0SW5zdGFuY2UoZ2V0UHJvamVjdCgpKS5maW5kUGFja2FnZSgiZm9vLmJhciIpLmlzVmFsaWQoKSk7CisgICAgYXNzZXJ0VHJ1ZShKYXZhUHNpRmFjYWRlLmdldEluc3RhbmNlKGdldFByb2plY3QoKSkuZmluZFBhY2thZ2UoImZvby5iYXIuZ29vIikuaXNWYWxpZCgpKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RQcmVmZXJUZXN0Q2FzZXMoKSB0aHJvd3MgVGhyb3dhYmxlIHsKKyAgICBteUZpeHR1cmUuY29uZmlndXJlQnlGaWxlKCIvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvIiArIGdldFRlc3ROYW1lKGZhbHNlKSArICIuamF2YSIpOworICAgIG5ldyBXcml0ZUNvbW1hbmRBY3Rpb24uU2ltcGxlKGdldFByb2plY3QoKSkgeworICAgICAgQE92ZXJyaWRlCisgICAgICBwcm90ZWN0ZWQgdm9pZCBydW4oKSB0aHJvd3MgVGhyb3dhYmxlIHsKKyAgICAgICAgZmluYWwgTW9kaWZpYWJsZVJvb3RNb2RlbCBtb2RlbCA9IE1vZHVsZVJvb3RNYW5hZ2VyLmdldEluc3RhbmNlKG15Rml4dHVyZS5nZXRNb2R1bGUoKSkuZ2V0TW9kaWZpYWJsZU1vZGVsKCk7CisgICAgICAgIENvbnRlbnRFbnRyeSBjb250ZW50RW50cnkgPSBtb2RlbC5nZXRDb250ZW50RW50cmllcygpWzBdOworICAgICAgICBTb3VyY2VGb2xkZXIgc291cmNlRm9sZGVyID0gY29udGVudEVudHJ5LmdldFNvdXJjZUZvbGRlcnMoKVswXTsKKyAgICAgICAgVmlydHVhbEZpbGUgZmlsZSA9IHNvdXJjZUZvbGRlci5nZXRGaWxlKCk7CisgICAgICAgIGNvbnRlbnRFbnRyeS5yZW1vdmVTb3VyY2VGb2xkZXIoc291cmNlRm9sZGVyKTsKKyAgICAgICAgY29udGVudEVudHJ5LmFkZFNvdXJjZUZvbGRlcihmaWxlLCB0cnVlKTsKKyAgICAgICAgbW9kZWwuY29tbWl0KCk7CisgICAgICB9CisgICAgfS5leGVjdXRlKCkudGhyb3dFeGNlcHRpb24oKTsKKworICAgIG15Rml4dHVyZS5hZGRDbGFzcygicGFja2FnZSBmb287IHB1YmxpYyBjbGFzcyBTb21lVGVzdENhc2Uge30iKTsKKyAgICBteUZpeHR1cmUuYWRkQ2xhc3MoInBhY2thZ2UgYmFyOyBwdWJsaWMgY2xhc3MgU29tZVRlc3RlYyB7fSIpOworICAgIG15Rml4dHVyZS5hZGRDbGFzcygicGFja2FnZSBnb287IHB1YmxpYyBjbGFzcyBTb21lQW5jaG9yIHt9Iik7CisKKyAgICBteUZpeHR1cmUuY29tcGxldGVCYXNpYygpOworICAgIG15Rml4dHVyZS5hc3NlcnRQcmVmZXJyZWRDb21wbGV0aW9uSXRlbXMoMCwgIlNvbWVUZXN0Q2FzZSIsICJTb21lQW5jaG9yIiwgIlNvbWVUZXN0ZWMiKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RBbGxDbGFzc2VzV2hlbk5vdGhpbmdJc0ZvdW5kKCkgdGhyb3dzIFRocm93YWJsZSB7CisgICAgbXlGaXh0dXJlLmFkZENsYXNzKCJwYWNrYWdlIGZvby5iYXI7IHB1YmxpYyBjbGFzcyBBeEJ4Q3hEeEV4IHt9Iik7CisKKyAgICBteUZpeHR1cmUuY29uZmlndXJlQnlGaWxlKCIvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvIiArIGdldFRlc3ROYW1lKGZhbHNlKSArICIuamF2YSIpOworICAgIG15Rml4dHVyZS5jb21wbGV0ZUJhc2ljKCk7CisgICAgbXlGaXh0dXJlLnR5cGUoJ1xuJyk7CisgICAgbXlGaXh0dXJlLmNoZWNrUmVzdWx0QnlGaWxlKCIvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvIiArIGdldFRlc3ROYW1lKGZhbHNlKSArICJfYWZ0ZXIuamF2YSIpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEFsbENsYXNzZXNPblNlY29uZEJhc2ljQ29tcGxldGlvbigpIHRocm93cyBUaHJvd2FibGUgeworICAgIG15Rml4dHVyZS5hZGRDbGFzcygicGFja2FnZSBmb28uYmFyOyBwdWJsaWMgY2xhc3MgQXhCeEN4RHhFeCB7fSIpOworCisgICAgbXlGaXh0dXJlLmNvbmZpZ3VyZUJ5RmlsZSgiL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsLyIgKyBnZXRUZXN0TmFtZShmYWxzZSkgKyAiLmphdmEiKTsKKyAgICBteUZpeHR1cmUuY29tcGxldGUoQ29tcGxldGlvblR5cGUuQkFTSUMsIDIpOworICAgIExvb2t1cEltcGwgbG9va3VwID0gKExvb2t1cEltcGwpTG9va3VwTWFuYWdlci5nZXRBY3RpdmVMb29rdXAobXlGaXh0dXJlLmdldEVkaXRvcigpKTsKKyAgICBMb29rdXBFbGVtZW50W10gbXlJdGVtcyA9IGxvb2t1cC5nZXRJdGVtcygpLnRvQXJyYXkoTG9va3VwRWxlbWVudC5FTVBUWV9BUlJBWSk7CisgICAgYXNzZXJ0RXF1YWxzKDIsIG15SXRlbXMubGVuZ3RoKTsKKyAgICBhc3NlcnRFcXVhbHMoIkF4QnhDeER4RXgiLCBteUl0ZW1zWzFdLmdldExvb2t1cFN0cmluZygpKTsKKyAgICBhc3NlcnRFcXVhbHMoIkF5QnlDeUR5RXkiLCBteUl0ZW1zWzBdLmdldExvb2t1cFN0cmluZygpKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RNYXBzSW52YWxpZGF0aW9uKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgbXlGaXh0dXJlLmNvbmZpZ3VyZUJ5RmlsZSgiL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsLyIgKyBnZXRUZXN0TmFtZShmYWxzZSkgKyAiLmphdmEiKTsKKyAgICBhc3NlcnRJbnN0YW5jZU9mKG15Rml4dHVyZS5nZXRGaWxlKCkuZ2V0VmlydHVhbEZpbGUoKS5nZXRGaWxlU3lzdGVtKCksIExvY2FsRmlsZVN5c3RlbS5jbGFzcyk7IC8vIG90aGVyd2lzZSB0aGUgY29tcGxldGlvbiBjb3B5IHdvbid0IGJlIHByZXNlcnZlZCB3aGljaCBpcyBjcml0aWNhbCBoZXJlCisgICAgbXlGaXh0dXJlLmNvbXBsZXRlQmFzaWMoKTsKKyAgICBhc3NlcnRPcmRlcmVkRXF1YWxzKG15Rml4dHVyZS5nZXRMb29rdXBFbGVtZW50U3RyaW5ncygpLCAiZ2V0QWFhIiwgImdldEJiYiIpOworICAgIG15Rml4dHVyZS5nZXRFZGl0b3IoKS5nZXRDYXJldE1vZGVsKCkubW92ZVRvT2Zmc2V0KG15Rml4dHVyZS5nZXRFZGl0b3IoKS5nZXRDYXJldE1vZGVsKCkuZ2V0T2Zmc2V0KCkgKyAyKTsKKyAgICBhc3NlcnROdWxsKG15Rml4dHVyZS5jb21wbGV0ZUJhc2ljKCkpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFF1YWxpZnlJbmFjY2Vzc2libGVDbGFzc05hbWUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBQc2lUZXN0VXRpbC5hZGRNb2R1bGUoZ2V0UHJvamVjdCgpLCBTdGRNb2R1bGVUeXBlcy5KQVZBLCAic2Vjb25kIiwgbXlGaXh0dXJlLmdldFRlbXBEaXJGaXh0dXJlKCkuZmluZE9yQ3JlYXRlRGlyKCJzZWNvbmQiKSk7CisgICAgbXlGaXh0dXJlLmFkZEZpbGVUb1Byb2plY3QoInNlY29uZC9mb28vYmFyL0F4QnhDeER4RXguamF2YSIsICJwYWNrYWdlIGZvby5iYXI7IGNsYXNzIEF4QnhDeER4RXgge30iKTsKKworICAgIG15Rml4dHVyZS5jb25maWd1cmVCeVRleHQoImEuamF2YSIsICJjbGFzcyBNYWluIHsgQUJDREU8Y2FyZXQ+IH0iKTsKKyAgICBteUZpeHR1cmUuY29tcGxldGUoQ29tcGxldGlvblR5cGUuQkFTSUMsIDMpOworICAgIG15Rml4dHVyZS5jaGVja1Jlc3VsdCgiY2xhc3MgTWFpbiB7IGZvby5iYXIuQXhCeEN4RHhFeDxjYXJldD4gfSIpOworICB9CisKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9jb2RlSW5zaWdodC9jb21wbGV0aW9uL0hlYXZ5U21hcnRUeXBlQ29tcGxldGlvbjE1VGVzdC5ncm9vdnkgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovY29kZUluc2lnaHQvY29tcGxldGlvbi9IZWF2eVNtYXJ0VHlwZUNvbXBsZXRpb24xNVRlc3QuZ3Jvb3Z5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI1OWY3MjkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovY29kZUluc2lnaHQvY29tcGxldGlvbi9IZWF2eVNtYXJ0VHlwZUNvbXBsZXRpb24xNVRlc3QuZ3Jvb3Z5CkBAIC0wLDAgKzEsOTcgQEAKK3BhY2thZ2UgY29tLmludGVsbGlqLmNvZGVJbnNpZ2h0LmNvbXBsZXRpb247CisKK2ltcG9ydCBjb20uaW50ZWxsaWouSmF2YVRlc3RVdGlsOworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLm1vZHVsZS5Nb2R1bGU7CitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkubW9kdWxlLlN0ZE1vZHVsZVR5cGVzOworaW1wb3J0IGNvbS5pbnRlbGxpai50ZXN0RnJhbWV3b3JrLlBzaVRlc3RVdGlsOworaW1wb3J0IGNvbS5pbnRlbGxpai50ZXN0RnJhbWV3b3JrLmZpeHR1cmVzLkphdmFDb2RlSW5zaWdodEZpeHR1cmVUZXN0Q2FzZQoraW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLnJvb3RzLk1vZHVsZVJvb3RNb2RpZmljYXRpb25VdGlsOworCitAU3VwcHJlc3NXYXJuaW5ncyhbIkFMTCJdKQorcHVibGljIGNsYXNzIEhlYXZ5U21hcnRUeXBlQ29tcGxldGlvbjE1VGVzdCBleHRlbmRzIEphdmFDb2RlSW5zaWdodEZpeHR1cmVUZXN0Q2FzZSB7CisgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBCQVNFX1BBVEggPSAiL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vc21hcnRUeXBlIjsKKworICBAT3ZlcnJpZGUKKyAgcHJvdGVjdGVkIFN0cmluZyBnZXRUZXN0RGF0YVBhdGgoKSB7CisgICAgcmV0dXJuIEphdmFUZXN0VXRpbC5nZXRKYXZhVGVzdERhdGFQYXRoKCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0R2V0SW5zdGFuY2UoKSB0aHJvd3MgVGhyb3dhYmxlIHsKKyAgICBteUZpeHR1cmUuY29uZmlndXJlRnJvbUV4aXN0aW5nVmlydHVhbEZpbGUoCisgICAgICAgICAgICBteUZpeHR1cmUuY29weUZpbGVUb1Byb2plY3QoQkFTRV9QQVRIICsgIi9mb28vIiArIGdldFRlc3ROYW1lKGZhbHNlKSArICIuamF2YSIsICJmb28vIiArIGdldFRlc3ROYW1lKGZhbHNlKSArICIuamF2YSIpKTsKKyAgICBteUZpeHR1cmUuY29tcGxldGUoQ29tcGxldGlvblR5cGUuU01BUlQpOworICAgIG15Rml4dHVyZS50eXBlKCdcbicpOworICAgIG15Rml4dHVyZS5jaGVja1Jlc3VsdEJ5RmlsZShCQVNFX1BBVEggKyAiL2Zvby8iICsgZ2V0VGVzdE5hbWUoZmFsc2UpICsgIi1vdXQuamF2YSIpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFByb3RlY3RlZEFub255bW91c0NvbnN0cnVjdG9yKCkgdGhyb3dzIFRocm93YWJsZSB7CisgICAgbXlGaXh0dXJlLmFkZENsYXNzKCJwYWNrYWdlIHBrZzsiICsKKyAgICAgICAgICAgICAgICAgICAgICAgInB1YmxpYyBjbGFzcyBGb28geyIgKworICAgICAgICAgICAgICAgICAgICAgICAiICBwcm90ZWN0ZWQgRm9vKGludCBhKSB7fSIgKworICAgICAgICAgICAgICAgICAgICAgICAifSIpOworICAgIG15Rml4dHVyZS5hZGRDbGFzcygicGFja2FnZSBwa2c7IiArCisgICAgICAgICAgICAgICAgICAgICAgICJwdWJsaWMgY2xhc3MgQmFyPFQ+IHsiICsKKyAgICAgICAgICAgICAgICAgICAgICAgIiAgcHJvdGVjdGVkIEJhcihqYXZhLnV0aWwuTGlzdDxUPiBsaXN0KSB7fSIgKworICAgICAgICAgICAgICAgICAgICAgICAifSIpOworICAgIGRvVGVzdCgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFByb3RlY3RlZEFub255bW91c0NvbnN0cnVjdG9yMigpIHRocm93cyBUaHJvd2FibGUgeworICAgIG15Rml4dHVyZS5hZGRDbGFzcygicGFja2FnZSBwa2c7IiArCisgICAgICAgICAgICAgICAgICAgICAgICJwdWJsaWMgY2xhc3MgRm9vIHsiICsKKyAgICAgICAgICAgICAgICAgICAgICAgIiAgcHJvdGVjdGVkIEZvbyhpbnQgYSkge30iICsKKyAgICAgICAgICAgICAgICAgICAgICAgIn0iKTsKKyAgICBteUZpeHR1cmUuYWRkQ2xhc3MoInBhY2thZ2UgcGtnOyIgKworICAgICAgICAgICAgICAgICAgICAgICAicHVibGljIGNsYXNzIEJhcjxUPiB7IiArCisgICAgICAgICAgICAgICAgICAgICAgICIgIHByb3RlY3RlZCBCYXIoamF2YS51dGlsLkxpc3Q8VD4gbGlzdCkge30iICsKKyAgICAgICAgICAgICAgICAgICAgICAgIn0iKTsKKyAgICBkb1Rlc3QoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RVbmxvY2tEb2N1bWVudCgpIHRocm93cyBUaHJvd2FibGUgeworICAgIG15Rml4dHVyZS5hZGRDbGFzcygicGFja2FnZSBwa2c7IHB1YmxpYyBjbGFzcyBCYXIge30iKTsKKyAgICBteUZpeHR1cmUuYWRkQ2xhc3MoInBhY2thZ2UgcGtnOyBwdWJsaWMgY2xhc3MgRm9vIHsiICsKKyAgICAgICAgICAgICAgICAgICAgICAgIiAgcHVibGljIHN0YXRpYyB2b2lkIGZvbyhqYXZhLnV0aWwuTGlzdDxwa2cuQmFyPiBsaXN0KSB7fSIgKworICAgICAgICAgICAgICAgICAgICAgICAifSIpOworCisgICAgZG9UZXN0KCk7CisgIH0KKworICBwcml2YXRlIHZvaWQgZG9UZXN0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgY29uZmlndXJlKCk7CisgICAgY2hlY2tSZXN1bHQoKTsKKyAgfQorCisgIHByaXZhdGUgdm9pZCBjaGVja1Jlc3VsdCgpIHsKKyAgICBteUZpeHR1cmUuY2hlY2tSZXN1bHRCeUZpbGUoQkFTRV9QQVRIICsgIi8iICsgZ2V0VGVzdE5hbWUoZmFsc2UpICsgIi1vdXQuamF2YSIpOworICB9CisKKyAgcHJpdmF0ZSB2b2lkIGNvbmZpZ3VyZSgpIHsKKyAgICBteUZpeHR1cmUuY29uZmlndXJlQnlGaWxlKEJBU0VfUEFUSCArICIvIiArIGdldFRlc3ROYW1lKGZhbHNlKSArICIuamF2YSIpOworICAgIG15Rml4dHVyZS5jb21wbGV0ZShDb21wbGV0aW9uVHlwZS5TTUFSVCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0Q2xhc3NMaXRlcmFsU2hvdWxkSW5zZXJ0SW1wb3J0KCkgdGhyb3dzIFRocm93YWJsZSB7CisgICAgbXlGaXh0dXJlLmFkZENsYXNzKCJwYWNrYWdlIGJhcjsgcHVibGljIGNsYXNzIEludGYge30iKTsKKyAgICBteUZpeHR1cmUuYWRkQ2xhc3MoInBhY2thZ2UgZm9vOyBwdWJsaWMgY2xhc3MgQmFyIGV4dGVuZHMgYmFyLkludGYge30iKTsKKworICAgIGNvbmZpZ3VyZSgpOworICAgIG15Rml4dHVyZS50eXBlKCdcbicpOworICAgIGNoZWNrUmVzdWx0KCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0SW5hY2Nlc3NpYmxlQ2xhc3NBZnRlck5ldygpIHsKKyAgICBNb2R1bGUgbW9kdWxlQSA9IFBzaVRlc3RVdGlsLmFkZE1vZHVsZShwcm9qZWN0LCBTdGRNb2R1bGVUeXBlcy5KQVZBLCAnQScsIG15Rml4dHVyZS50ZW1wRGlyRml4dHVyZS5maW5kT3JDcmVhdGVEaXIoImEiKSkKKyAgICBNb2R1bGUgbW9kdWxlQiA9IFBzaVRlc3RVdGlsLmFkZE1vZHVsZShwcm9qZWN0LCBTdGRNb2R1bGVUeXBlcy5KQVZBLCAnQicsIG15Rml4dHVyZS50ZW1wRGlyRml4dHVyZS5maW5kT3JDcmVhdGVEaXIoImIiKSkKKworICAgIE1vZHVsZVJvb3RNb2RpZmljYXRpb25VdGlsLmFkZERlcGVuZGVuY3kobXlNb2R1bGUsIG1vZHVsZUIpCisgICAgTW9kdWxlUm9vdE1vZGlmaWNhdGlvblV0aWwuYWRkRGVwZW5kZW5jeShtb2R1bGVCLCBtb2R1bGVBKQorCisgICAgbXlGaXh0dXJlLmFkZEZpbGVUb1Byb2plY3QoJ2EvZm9vL0Zvby5qYXZhJywgJ3BhY2thZ2UgZm9vOyBwdWJsaWMgaW50ZXJmYWNlIEZvbyB7fScpCisgICAgbXlGaXh0dXJlLmFkZEZpbGVUb1Byb2plY3QoJ2IvYmFyL0Jhci5qYXZhJywgJ3BhY2thZ2UgYmFyOyBwdWJsaWMgY2xhc3MgQmFyIHsgcHVibGljIHN0YXRpYyB2b2lkIGFjY2VwdChmb28uRm9vIGkpIHt9ICB9JykKKworICAgIGNvbmZpZ3VyZSgpCisgICAgbXlGaXh0dXJlLnR5cGUoJ1xuJykKKyAgICBjaGVja1Jlc3VsdCgpCisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovY29kZUluc2lnaHQvY29tcGxldGlvbi9KYXZhQXV0b1BvcHVwVGVzdC5ncm9vdnkgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovY29kZUluc2lnaHQvY29tcGxldGlvbi9KYXZhQXV0b1BvcHVwVGVzdC5ncm9vdnkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTA0ZTgzYwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9jb2RlSW5zaWdodC9jb21wbGV0aW9uL0phdmFBdXRvUG9wdXBUZXN0Lmdyb292eQpAQCAtMCwwICsxLDEzODEgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwMC0yMDEwIEpldEJyYWlucyBzLnIuby4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCitwYWNrYWdlIGNvbS5pbnRlbGxpai5jb2RlSW5zaWdodC5jb21wbGV0aW9uCitpbXBvcnQgY29tLmludGVsbGlqLmNvZGVJbnNpZ2h0LkNvZGVJbnNpZ2h0U2V0dGluZ3MKK2ltcG9ydCBjb20uaW50ZWxsaWouY29kZUluc2lnaHQuVGFyZ2V0RWxlbWVudFV0aWwKK2ltcG9ydCBjb20uaW50ZWxsaWouY29kZUluc2lnaHQuY29tcGxldGlvbi5pbXBsLkNvbXBsZXRpb25TZXJ2aWNlSW1wbAoraW1wb3J0IGNvbS5pbnRlbGxpai5jb2RlSW5zaWdodC5lZGl0b3JBY3Rpb25zLkNvbXBsZXRpb25BdXRvUG9wdXBIYW5kbGVyCitpbXBvcnQgY29tLmludGVsbGlqLmNvZGVJbnNpZ2h0Lmxvb2t1cC5Mb29rdXAKK2ltcG9ydCBjb20uaW50ZWxsaWouY29kZUluc2lnaHQubG9va3VwLkxvb2t1cE1hbmFnZXIKK2ltcG9ydCBjb20uaW50ZWxsaWouY29kZUluc2lnaHQubG9va3VwLmltcGwuTG9va3VwSW1wbAoraW1wb3J0IGNvbS5pbnRlbGxpai5jb2RlSW5zaWdodC50ZW1wbGF0ZS5UZW1wbGF0ZU1hbmFnZXIKK2ltcG9ydCBjb20uaW50ZWxsaWouY29kZUluc2lnaHQudGVtcGxhdGUuaW1wbC5UZW1wbGF0ZU1hbmFnZXJJbXBsCitpbXBvcnQgY29tLmludGVsbGlqLmlkZS5EYXRhTWFuYWdlcgoraW1wb3J0IGNvbS5pbnRlbGxpai5pZGUudWkuVUlTZXR0aW5ncworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLkRpc3Bvc2FibGUKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS5hY3Rpb25TeXN0ZW0uSWRlQWN0aW9ucworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLmFwcGxpY2F0aW9uLkFwcGxpY2F0aW9uTWFuYWdlcgoraW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLmNvbW1hbmQuQ29tbWFuZFByb2Nlc3NvcgoraW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLmNvbW1hbmQuV3JpdGVDb21tYW5kQWN0aW9uCitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkuY29tbWFuZC5pbXBsLkN1cnJlbnRFZGl0b3JQcm92aWRlcgoraW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLmNvbW1hbmQuaW1wbC5VbmRvTWFuYWdlckltcGwKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS5jb21tYW5kLnVuZG8uVW5kb01hbmFnZXIKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS5lZGl0b3IuRWRpdG9yCitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkuZWRpdG9yLkVkaXRvckZhY3RvcnkKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS5lZGl0b3IuTG9naWNhbFBvc2l0aW9uCitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkuZWRpdG9yLmFjdGlvblN5c3RlbS5FZGl0b3JBY3Rpb25NYW5hZ2VyCitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkuZXh0ZW5zaW9ucy5FeHRlbnNpb25zCitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkuZXh0ZW5zaW9ucy5Mb2FkaW5nT3JkZXIKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS5maWxlRWRpdG9yLkZpbGVFZGl0b3IKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS5maWxlRWRpdG9yLkZpbGVFZGl0b3JNYW5hZ2VyCitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkucHJvZ3Jlc3MuUHJvZ3Jlc3NNYW5hZ2VyCitpbXBvcnQgY29tLmludGVsbGlqLnBzaS5Qc2lGaWxlCitpbXBvcnQgY29tLmludGVsbGlqLnBzaS5Qc2lKYXZhRmlsZQoraW1wb3J0IGNvbS5pbnRlbGxpai5wc2kuc3RhdGlzdGljcy5TdGF0aXN0aWNzTWFuYWdlcgoraW1wb3J0IGNvbS5pbnRlbGxpai5wc2kuc3RhdGlzdGljcy5pbXBsLlN0YXRpc3RpY3NNYW5hZ2VySW1wbAorLyoqCisgKiBAYXV0aG9yIHBldGVyCisgKi8KK2NsYXNzIEphdmFBdXRvUG9wdXBUZXN0IGV4dGVuZHMgQ29tcGxldGlvbkF1dG9Qb3B1cFRlc3RDYXNlIHsKKworICBwdWJsaWMgdm9pZCB0ZXN0TmV3SXRlbXNPbkxvbmdlclByZWZpeCgpIHsKKyAgICBteUZpeHR1cmUuY29uZmlndXJlQnlUZXh0KCJhLmphdmEiLCAiIiIKKyAgICAgIGNsYXNzIEZvbyB7CisgICAgICAgIHZvaWQgZm9vKFN0cmluZyBpdGVyYWJsZSkgeworICAgICAgICAgIDxjYXJldD4KKyAgICAgICAgfQorICAgICAgfQorICAgICIiIikKKyAgICB0eXBlKCdpJykKKyAgICBhc3NlcnRDb250YWlucygiaWYiLCAiaXRlcmFibGUiLCAiaW50IikKKworICAgIHR5cGUoJ3QnKQorICAgIGFzc2VydENvbnRhaW5zICJpdGVyYWJsZSIKKyAgICBhc3NlcnRFcXVhbHMgJ2l0ZXJhYmxlJywgbG9va3VwLmN1cnJlbnRJdGVtLmxvb2t1cFN0cmluZworCisgICAgdHlwZSgnZXInKQorICAgIGFzc2VydENvbnRhaW5zKCJpdGVyIiwgIml0ZXJhYmxlIikKKyAgICBhc3NlcnRFcXVhbHMgJ2l0ZXJhYmxlJywgbG9va3VwLmN1cnJlbnRJdGVtLmxvb2t1cFN0cmluZworICAgIGFzc2VydCBsb29rdXAuZm9jdXNlZAorCisgICAgdHlwZSAnYScKKyAgICBhc3NlcnQgbG9va3VwLmZvY3VzZWQKKyAgfQorCisgIGRlZiBhc3NlcnRDb250YWlucyhTdHJpbmcuLi4gaXRlbXMpIHsKKyAgICBhc3NlcnQgbXlGaXh0dXJlLmxvb2t1cEVsZW1lbnRTdHJpbmdzLmNvbnRhaW5zQWxsKGl0ZW1zIGFzIExpc3QpCisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0UmVjYWxjdWxhdGVJdGVtc09uQmFja3NwYWNlKCkgeworICAgIG15Rml4dHVyZS5jb25maWd1cmVCeVRleHQoImEuamF2YSIsICIiIgorICAgICAgY2xhc3MgRm9vIHsKKyAgICAgICAgdm9pZCBmb28oU3RyaW5nIGl0ZXJhYmxlKSB7CisgICAgICAgICAgaW50IGl0YWE7CisgICAgICAgICAgaXRlPGNhcmV0PgorICAgICAgICB9CisgICAgICB9CisgICAgIiIiKQorICAgIHR5cGUgInIiCisgICAgYXNzZXJ0Q29udGFpbnMgIml0ZXIiLCAiaXRlcmFibGUiCisKKyAgICB0eXBlICdcYicKKyAgICBhc3NlcnRDb250YWlucyAiaXRlcmFibGUiCisKKyAgICB0eXBlICdcYicKKyAgICBhc3NlcnRDb250YWlucyAiaXRhYSIsICJpdGVyYWJsZSIKKyAgICB0eXBlICJhIgorICAgIGFzc2VydENvbnRhaW5zICJpdGFhIgorICAgIHR5cGUgJ1xiJworICAgIGFzc2VydENvbnRhaW5zICJpdGFhIiwgIml0ZXJhYmxlIgorICAgIHR5cGUgImUiCisgICAgYXNzZXJ0Q29udGFpbnMgIml0ZXJhYmxlIgorCisgICAgdHlwZSAiciIKKyAgICBhc3NlcnRDb250YWlucyAiaXRlciIsICJpdGVyYWJsZSIKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RFeHBsaWNpdFNlbGVjdGlvblNob3VsZFN1cnZpdmUoKSB7CisgICAgbXlGaXh0dXJlLmNvbmZpZ3VyZUJ5VGV4dCgiYS5qYXZhIiwgIiIiCisgICAgICBjbGFzcyBGb28geworICAgICAgICB2b2lkIGZvbyhTdHJpbmcgaXRlcmFibGUpIHsKKyAgICAgICAgICBpbnQgaXRlcmFibGUyOworICAgICAgICAgIGl0PGNhcmV0PgorICAgICAgICB9CisgICAgICB9CisgICAgIiIiKQorICAgIHR5cGUgImUiCisgICAgYXNzZXJ0Q29udGFpbnMgIml0ZXJhYmxlIiwgIml0ZXJhYmxlMiIKKworICAgIGFzc2VydEVxdWFscyAnaXRlcmFibGUnLCBsb29rdXAuY3VycmVudEl0ZW0ubG9va3VwU3RyaW5nCisgICAgZWR0IHsgbXlGaXh0dXJlLnBlcmZvcm1FZGl0b3JBY3Rpb24gSWRlQWN0aW9ucy5BQ1RJT05fRURJVE9SX01PVkVfQ0FSRVRfRE9XTiB9CisgICAgYXNzZXJ0RXF1YWxzICdpdGVyYWJsZTInLCBsb29rdXAuY3VycmVudEl0ZW0ubG9va3VwU3RyaW5nCisKKyAgICB0eXBlICJyIgorICAgIGFzc2VydENvbnRhaW5zICJpdGVyIiwgIml0ZXJhYmxlIiwgJ2l0ZXJhYmxlMicKKyAgICBhc3NlcnRFcXVhbHMgJ2l0ZXJhYmxlMicsIGxvb2t1cC5jdXJyZW50SXRlbS5sb29rdXBTdHJpbmcKKworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEV4cGxpY2l0TW91c2VTZWxlY3Rpb25TaG91bGRTdXJ2aXZlKCkgeworICAgIG15Rml4dHVyZS5jb25maWd1cmVCeVRleHQoImEuamF2YSIsICIiIgorICAgICAgY2xhc3MgRm9vIHsKKyAgICAgICAgdm9pZCBmb28oU3RyaW5nIGl0ZXJhYmxlKSB7CisgICAgICAgICAgaW50IGl0ZXJhYmxlMjsKKyAgICAgICAgICBpdDxjYXJldD4KKyAgICAgICAgfQorICAgICAgfQorICAgICIiIikKKyAgICB0eXBlICJlIgorICAgIGFzc2VydENvbnRhaW5zICJpdGVyYWJsZSIsICJpdGVyYWJsZTIiCisKKyAgICBhc3NlcnRFcXVhbHMgJ2l0ZXJhYmxlJywgbG9va3VwLmN1cnJlbnRJdGVtLmxvb2t1cFN0cmluZworICAgIGVkdCB7IGxvb2t1cC5jdXJyZW50SXRlbSA9IGxvb2t1cC5pdGVtc1sxXSB9CisgICAgYXNzZXJ0RXF1YWxzICdpdGVyYWJsZTInLCBsb29rdXAuY3VycmVudEl0ZW0ubG9va3VwU3RyaW5nCisKKyAgICB0eXBlICJyIgorICAgIGFzc2VydENvbnRhaW5zICJpdGVyIiwgIml0ZXJhYmxlIiwgJ2l0ZXJhYmxlMicKKyAgICBhc3NlcnRFcXVhbHMgJ2l0ZXJhYmxlMicsIGxvb2t1cC5jdXJyZW50SXRlbS5sb29rdXBTdHJpbmcKKworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEdlbmVyYWxseUZvY3VzTG9va3VwSW5KYXZhTWV0aG9kKCkgeworICAgIG15Rml4dHVyZS5jb25maWd1cmVCeVRleHQoImEuamF2YSIsICIiIgorICAgICAgY2xhc3MgRm9vIHsKKyAgICAgICAgU3RyaW5nIGZvbyhTdHJpbmcgaXRlcmFibGUpIHsKKyAgICAgICAgICByZXR1cm4gaXQ8Y2FyZXQ+OworICAgICAgICB9CisgICAgICB9CisgICAgIiIiKQorICAgIHR5cGUgJ2UnCisgICAgYXNzZXJ0VHJ1ZSBsb29rdXAuZm9jdXNlZAorICB9CisKKyAgcHVibGljIHZvaWQgdGVzdE5vTG9va3VwRm9jdXNJbkphdmFWYXJpYWJsZSgpIHsKKyAgICBteUZpeHR1cmUuY29uZmlndXJlQnlUZXh0KCJhLmphdmEiLCAiIiIKKyAgICAgIGNsYXNzIEZvbyB7CisgICAgICAgIFN0cmluZyBmb28oU3RyaW5nIHN0PGNhcmV0PikgeworICAgICAgICB9CisgICAgICB9CisgICAgIiIiKQorICAgIHR5cGUgJ3InCisgICAgYXNzZXJ0RmFsc2UgbG9va3VwLmZvY3VzZWQKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3ROb1N0dXBpZE5hbWVTdWdnZXN0aW9ucygpIHsKKyAgICBteUZpeHR1cmUuY29uZmlndXJlQnlUZXh0KCJhLmphdmEiLCAiIiIKKyAgICAgIGNsYXNzIEZvbyB7CisgICAgICAgIFN0cmluZyBmb28oU3RyaW5nIDxjYXJldD4pIHsKKyAgICAgICAgfQorICAgICAgfQorICAgICIiIikKKyAgICB0eXBlICd4JworICAgIGFzc2VydCAhbXlGaXh0dXJlLmxvb2t1cEVsZW1lbnRTdHJpbmdzCisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0RXhwbGljaXRTZWxlY3Rpb25TaG91bGRCZUhvbm9yZWRGb2N1c2VkKCkgeworICAgIG15Rml4dHVyZS5jb25maWd1cmVCeVRleHQoImEuamF2YSIsICIiIgorICAgICAgY2xhc3MgRm9vIHsKKyAgICAgICAgU3RyaW5nIGZvbygpIHsKKyAgICAgICAgICBpbnQgYWJjZDsKKyAgICAgICAgICBpbnQgYWJjZTsKKyAgICAgICAgICBhPGNhcmV0PgorICAgICAgICB9CisgICAgICB9CisgICAgIiIiKQorICAgIHR5cGUgJ2InCisgICAgYXNzZXJ0IGxvb2t1cC5mb2N1c2VkCisgICAgdHlwZSAnYycKKworICAgIGFzc2VydENvbnRhaW5zICdhYmNkJywgJ2FiY2UnCisgICAgYXNzZXJ0RXF1YWxzICdhYmNkJywgbG9va3VwLmN1cnJlbnRJdGVtLmxvb2t1cFN0cmluZworICAgIGVkdCB7IGxvb2t1cC5jdXJyZW50SXRlbSA9IGxvb2t1cC5pdGVtc1sxXSB9CisgICAgYXNzZXJ0RXF1YWxzICdhYmNlJywgbG9va3VwLmN1cnJlbnRJdGVtLmxvb2t1cFN0cmluZworCisgICAgdHlwZSAnXHQnCisgICAgbXlGaXh0dXJlLmNoZWNrUmVzdWx0ICIiIgorICAgICAgY2xhc3MgRm9vIHsKKyAgICAgICAgU3RyaW5nIGZvbygpIHsKKyAgICAgICAgICBpbnQgYWJjZDsKKyAgICAgICAgICBpbnQgYWJjZTsKKyAgICAgICAgICBhYmNlPGNhcmV0PgorICAgICAgICB9CisgICAgICB9CisgICAgIiIiCisgIH0KKworCisgIHB1YmxpYyB2b2lkIHRlc3RGb2N1c0luSmF2YWRvYygpIHsKKyAgICBteUZpeHR1cmUuY29uZmlndXJlQnlUZXh0KCJhLmphdmEiLCAiIiIKKyAgICAvKioKKyAgICAqIHtAbGluayBBSU88Y2FyZXQ+fQorICAgICovCisgICAgICBjbGFzcyBGb28ge30KKyAgICAiIiIpCisgICAgdHlwZSAnTycKKyAgICBhc3NlcnQgbG9va3VwLmZvY3VzZWQKKworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFByZWZpeExlbmd0aERlcGVuZGVudFNvcnRpbmcoKSB7CisgICAgbXlGaXh0dXJlLmFkZENsYXNzKCJwYWNrYWdlIGZvbzsgcHVibGljIGNsYXNzIFBzaUphdmFDb2RlUmVmZXJlbmNlRWxlbWVudCB7fSIpCisgICAgbXlGaXh0dXJlLmNvbmZpZ3VyZUJ5VGV4dCgiYS5qYXZhIiwgIiIiCisgICAgaW1wb3J0IGZvby5Qc2lKYXZhQ29kZVJlZmVyZW5jZUVsZW1lbnQ7CisKKyAgICBjbGFzcyBQc2lKYXZhQ29kZVJlZmVyZW5jZUVsZW1lbnRJbXBsIHsKKyAgICAgIHsgPGNhcmV0PiB9CisgICAgfQorICAgICIiIikKKyAgICB0eXBlICdQSkNSJworICAgIGFzc2VydENvbnRhaW5zICdQc2lKYXZhQ29kZVJlZmVyZW5jZUVsZW1lbnQnLCAnUHNpSmF2YUNvZGVSZWZlcmVuY2VFbGVtZW50SW1wbCcKKworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFF1aWNrU2VsZWN0QWZ0ZXJSZXVzZSgpIHsKKyAgICBteUZpeHR1cmUuY29uZmlndXJlQnlUZXh0KCJhLmphdmEiLCAiIiIKKyAgICBjbGFzcyBBIHsgSXRlcmFibGUgaXRlcmFibGU7CisgICAgICB7IDxjYXJldD4gfQorICAgIH0KKyAgICAiIiIpCisgICAgdHlwZSAnaXRlJworICAgIGVkdCB7CisgICAgICBteUZpeHR1cmUudHlwZSAncicKKyAgICAgIGxvb2t1cC5tYXJrUmV1c2VkKCkKKyAgICAgIGxvb2t1cC5jdXJyZW50SXRlbSA9IGxvb2t1cC5pdGVtc1swXQorICAgICAgQ29tbWFuZFByb2Nlc3Nvci5pbnN0YW5jZS5leGVjdXRlQ29tbWFuZCBwcm9qZWN0LCB7bG9va3VwLmZpbmlzaExvb2t1cCBMb29rdXAuTk9STUFMX1NFTEVDVF9DSEFSfSwgbnVsbCwgbnVsbAorCisgICAgfQorICAgIG15Rml4dHVyZS5jaGVja1Jlc3VsdCAiIiIKKyAgICBjbGFzcyBBIHsgSXRlcmFibGUgaXRlcmFibGU7CisgICAgICB7IGl0ZXJhYmxlPGNhcmV0PiB9CisgICAgfQorICAgICIiIgorICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFF1aWNrU2VsZWN0QWZ0ZXJSZXVzZUFuZEJhY2tzcGFjZSgpIHsKKyAgICBteUZpeHR1cmUuY29uZmlndXJlQnlUZXh0KCJhLmphdmEiLCAiIiIKKyAgICBjbGFzcyBBIHsgSXRlcmFibGUgaXRlcmFibGU7CisgICAgICB7IDxjYXJldD4gfQorICAgIH0KKyAgICAiIiIpCisgICAgdHlwZSAnaXRlJworICAgIGVkdCB7CisgICAgICBteUZpeHR1cmUudHlwZSAncicKKyAgICAgIGxvb2t1cC5tYXJrUmV1c2VkKCkKKyAgICAgIG15Rml4dHVyZS50eXBlICdcYlxiJworICAgICAgbG9va3VwLmN1cnJlbnRJdGVtID0gbG9va3VwLml0ZW1zWzBdCisgICAgICBDb21tYW5kUHJvY2Vzc29yLmluc3RhbmNlLmV4ZWN1dGVDb21tYW5kIHByb2plY3QsICh7bG9va3VwLmZpbmlzaExvb2t1cCBMb29rdXAuTk9STUFMX1NFTEVDVF9DSEFSfSBhcyBSdW5uYWJsZSksIG51bGwsIG51bGwKKyAgICB9CisgICAgbXlGaXh0dXJlLmNoZWNrUmVzdWx0ICIiIgorICAgIGNsYXNzIEEgeyBJdGVyYWJsZSBpdGVyYWJsZTsKKyAgICAgIHsgaXRlcmFibGU8Y2FyZXQ+IH0KKyAgICB9CisgICAgIiIiCisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0UXVpY2tTZWxlY3RMaXZlVGVtcGxhdGUoKSB7CisgICAgbXlGaXh0dXJlLmNvbmZpZ3VyZUJ5VGV4dCgiYS5qYXZhIiwgIiIiCisgICAgY2xhc3MgQSB7CisgICAgICB7IDxjYXJldD4gfQorICAgIH0KKyAgICAiIiIpCisgICAgdHlwZSAndGgnCisgICAgZWR0IHsgbXlGaXh0dXJlLnR5cGUgJ3JcdCd9CisgICAgbXlGaXh0dXJlLmNoZWNrUmVzdWx0ICIiIgorICAgIGNsYXNzIEEgeworICAgICAgeyB0aHJvdyBuZXcgPGNhcmV0PiB9CisgICAgfQorICAgICIiIgorICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFR3b1F1aWNrUmVzdGFydHNBZnRlckhpZGluZygpIHsKKyAgICBmb3IgKGkgaW4gMC4uMTApIHsKKyAgICAgIG15Rml4dHVyZS5jb25maWd1cmVCeVRleHQoImEke2l9LmphdmEiLCAiIiIKKyAgICAgIGNsYXNzIEEgeworICAgICAgICB7IDxjYXJldD4gfQorICAgICAgfQorICAgICAgIiIiKQorICAgICAgZWR0IHsgbXlGaXh0dXJlLnR5cGUgJ0EnIH0KKyAgICAgIGpvaW5BdXRvcG9wdXAoKSAvLyBjb21wbGV0aW9uIHN0YXJ0ZWQKKyAgICAgIGJvb2xlYW4gdG9vUXVpY2sgPSBmYWxzZQorICAgICAgZWR0IHsKKyAgICAgICAgdG9vUXVpY2sgPSBsb29rdXAgPT0gbnVsbAorICAgICAgICBteUZpeHR1cmUudHlwZSAnSU8nCisgICAgICB9CisgICAgICBqb2luQXV0b3BvcHVwKCkgLy9JCisgICAgICBqb2luQXV0b3BvcHVwKCkgLy9PCisgICAgICBqb2luQ29tcGxldGlvbigpCisgICAgICBhc3NlcnQgbG9va3VwCisgICAgICBhc3NlcnQgJ0FycmF5SW5kZXhPdXRPZkJvdW5kc0V4Y2VwdGlvbicgaW4gbXlGaXh0dXJlLmxvb2t1cEVsZW1lbnRTdHJpbmdzCisgICAgICBpZiAoIXRvb1F1aWNrKSB7CisgICAgICAgIHJldHVybgorICAgICAgfQorICAgICAgZWR0IHsKKyAgICAgICAgTG9va3VwTWFuYWdlci5nZXRJbnN0YW5jZShwcm9qZWN0KS5oaWRlQWN0aXZlTG9va3VwKCkKKyAgICAgICAgQ29tcGxldGlvblByb2dyZXNzSW5kaWNhdG9yLmNsZWFudXBGb3JOZXh0VGVzdCgpCisgICAgICB9CisgICAgfQorICAgIGZhaWwgInRvbyBtYW55IHRvbyBxdWljayBhdHRlbXB0cyIKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RUeXBpbmdEdXJpbmdFeHBsaWNpdENvbXBsZXRpb24oKSB7CisgICAgbXlGaXh0dXJlLmNvbmZpZ3VyZUJ5VGV4dCgiYS5qYXZhIiwgIiIiCisgICAgY2xhc3MgQSB7CisgICAgICB7IFJ1bm5hYmxlIHIgPSBuZXcgPGNhcmV0PiB9CisgICAgfQorICAgICIiIikKKyAgICBteUZpeHR1cmUuY29tcGxldGUgQ29tcGxldGlvblR5cGUuU01BUlQKKyAgICBlZHQgeyBteUZpeHR1cmUudHlwZSAnVGhyJyB9CisgICAgam9pbkNvbXBsZXRpb24oKQorICAgIGFzc2VydCBsb29rdXAKKyAgICBhc3NlcnQgJ1RocmVhZCcgaW4gbXlGaXh0dXJlLmxvb2t1cEVsZW1lbnRTdHJpbmdzCisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0RG90QWZ0ZXJWYXJpYWJsZSgpIHsKKyAgICBteUZpeHR1cmUuY29uZmlndXJlQnlUZXh0KCJhLmphdmEiLCAiIiIKKyAgICBjbGFzcyBBIHsKKyAgICAgIHsgT2JqZWN0IG9vbzsgPGNhcmV0PiB9CisgICAgfQorICAgICIiIikKKyAgICB0eXBlICdvLicKKyAgICBhc3NlcnQgbXlGaXh0dXJlLmZpbGUudGV4dC5jb250YWlucygib29vLiIpCisgICAgYXNzZXJ0IGxvb2t1cAorICB9CisKKyAgcHVibGljIHZvaWQgdGVzdERvdEFmdGVyQ2FsbCgpIHsKKyAgICBteUZpeHR1cmUuY29uZmlndXJlQnlUZXh0KCJhLmphdmEiLCAiIiIKKyAgICBjbGFzcyBBIHsKKyAgICAgIHsgPGNhcmV0PiB9CisgICAgfQorICAgICIiIikKKyAgICB0eXBlICd0b3MuJworICAgIGFzc2VydCBteUZpeHR1cmUuZmlsZS50ZXh0LmNvbnRhaW5zKCJ0b1N0cmluZygpLiIpCisgICAgYXNzZXJ0IGxvb2t1cAorICB9CisKKyAgcHVibGljIHZvaWQgdGVzdERvdEFmdGVyQ2xhc3NOYW1lKCkgeworICAgIG15Rml4dHVyZS5jb25maWd1cmVCeVRleHQoImEuamF2YSIsICIiIgorICAgIGNsYXNzIEEgeworICAgICAgeyA8Y2FyZXQ+IH0KKyAgICB9CisgICAgIiIiKQorICAgIHR5cGUgJ0FJT08uJworICAgIGFzc2VydCBteUZpeHR1cmUuZmlsZS50ZXh0LmNvbnRhaW5zKCJBcnJheUluZGV4T3V0T2ZCb3VuZHNFeGNlcHRpb24uIikKKyAgICBhc3NlcnQgbG9va3VwCisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0RG90QWZ0ZXJDbGFzc05hbWVJblBhcmFtZXRlcigpIHsKKyAgICBteUZpeHR1cmUuY29uZmlndXJlQnlUZXh0KCJhLmphdmEiLCAiIiIKKyAgICBjbGFzcyBBIHsKKyAgICAgIHZvaWQgZm9vKDxjYXJldD4pIHt9CisgICAgfQorICAgICIiIikKKyAgICB0eXBlICdBSU9PLi4uJworICAgIGFzc2VydCBteUZpeHR1cmUuZWRpdG9yLmRvY3VtZW50LnRleHQuY29udGFpbnMoIkFycmF5SW5kZXhPdXRPZkJvdW5kc0V4Y2VwdGlvbi4uLiIpCisgICAgYXNzZXJ0ICFsb29rdXAKKyAgfQorCisgIHZvaWQgdGVzdEFycm93KGJvb2xlYW4gdXAsIGJvb2xlYW4gY3ljbGVTY3JvbGxpbmcsIGJvb2xlYW4gbG9va3VwQWJvdmUsIGludCBpbmRleCkgeworICAgIG15Rml4dHVyZS5jb25maWd1cmVCeVRleHQoImEuamF2YSIsICIiIgorICAgIGNsYXNzIEEgeworICAgICAgeyBBcnJheUluZGV4T3V0T2ZCb3VuZHNFeGNlcHRpb24gPGNhcmV0PiB9CisgICAgfQorICAgICIiIikKKworICAgIHR5cGUgJ2luZCcKKyAgICBhc3NlcnQgbG9va3VwCisgICAgYXNzZXJ0ICFsb29rdXAuZm9jdXNlZAorICAgIGFzc2VydCBsb29rdXAuaXRlbXMuc2l6ZSgpID09IDIKKworICAgIGxvb2t1cC5wb3NpdGlvbmVkQWJvdmUgPSBsb29rdXBBYm92ZQorICAgIFVJU2V0dGluZ3MuaW5zdGFuY2UuQ1lDTEVfU0NST0xMSU5HID0gY3ljbGVTY3JvbGxpbmcKKworICAgIGRlZiBhY3Rpb24gPSB1cCA/IElkZUFjdGlvbnMuQUNUSU9OX0VESVRPUl9NT1ZFX0NBUkVUX1VQIDogSWRlQWN0aW9ucy5BQ1RJT05fRURJVE9SX01PVkVfQ0FSRVRfRE9XTgorICAgIHRyeSB7CisgICAgICBlZHQgeyBteUZpeHR1cmUucGVyZm9ybUVkaXRvckFjdGlvbihhY3Rpb24pIH0KKyAgICAgIGlmIChsb29rdXApIHsKKyAgICAgICAgYXNzZXJ0IGxvb2t1cC5mb2N1c2VkCisgICAgICAgIGFzc2VydCBpbmRleCA+PSAwCisgICAgICAgIGFzc2VydCBsb29rdXAuaXRlbXNbaW5kZXhdID09IGxvb2t1cC5jdXJyZW50SXRlbQorICAgICAgICBlZHQgeyBsb29rdXAuaGlkZSgpIH0KKyAgICAgIH0gZWxzZSB7CisgICAgICAgIGFzc2VydCBpbmRleCA9PSAtMQorICAgICAgfQorICAgICAgdHlwZSAnXGInCisgICAgfQorICAgIGZpbmFsbHkgeworICAgICAgVUlTZXR0aW5ncy5pbnN0YW5jZS5DWUNMRV9TQ1JPTExJTkcgPSB0cnVlCisgICAgfQorCisgIH0KKworICB2b2lkIHRlc3RBcnJvd3MoYm9vbGVhbiBjeWNsZVNjcm9sbGluZywgYm9vbGVhbiBsb29rdXBBYm92ZSwgaW50IGluZGV4RG93biwgaW50IGluZGV4VXApIHsKKyAgICB0ZXN0QXJyb3cgdHJ1ZSwgY3ljbGVTY3JvbGxpbmcsIGxvb2t1cEFib3ZlLCBpbmRleFVwCisgICAgdGVzdEFycm93IGZhbHNlLCBjeWNsZVNjcm9sbGluZywgbG9va3VwQWJvdmUsIGluZGV4RG93bgorICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFZlcnRpY2FsQXJyb3dzKCkgeworICAgIHRlc3RBcnJvd3MgZmFsc2UsIGZhbHNlLCAwLCAtMQorICAgIHRlc3RBcnJvd3MgZmFsc2UsIHRydWUsIDAsIC0xCisgICAgdGVzdEFycm93cyB0cnVlLCBmYWxzZSwgMCwgMQorICAgIHRlc3RBcnJvd3MgdHJ1ZSwgdHJ1ZSwgMCwgMQorICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEhpZGVPbk9uZVByZWZpeFZhcmlhbnQoKSB7CisgICAgbXlGaXh0dXJlLmNvbmZpZ3VyZUJ5VGV4dCgiYS5qYXZhIiwgIiIiCisgICAgY2xhc3MgQSB7CisgICAgICBPYmplY3QgZm9vKCkgeyByZXR1cm4gbnU8Y2FyZXQ+IH0KKyAgICB9CisgICAgIiIiKQorICAgIHR5cGUgJ2xsJworICAgIGFzc2VydCAhbG9va3VwCisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0UmVzdW1lQWZ0ZXJCYWNrc3BhY2UoKSB7CisgICAgbXlGaXh0dXJlLmNvbmZpZ3VyZUJ5VGV4dCgiYS5qYXZhIiwgIiIiCisgICAgY2xhc3MgQSB7CisgICAgICBPYmplY3QgZm9vKCkgeyB0aGlzPGNhcmV0PiB9CisgICAgfQorICAgICIiIikKKyAgICB0eXBlICcuJworICAgIGFzc2VydCBsb29rdXAKKyAgICB0eXBlICd4JworICAgIGFzc2VydCAhbG9va3VwCisgICAgdHlwZSAnXGInCisgICAgYXNzZXJ0ICFsb29rdXAKKyAgICB0eXBlICdjJworICAgIGFzc2VydCBsb29rdXAKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RIaWRlT25JbnZhbGlkU3ltYm9sQWZ0ZXJCYWNrc3BhY2UoKSB7CisgICAgbXlGaXh0dXJlLmNvbmZpZ3VyZUJ5VGV4dCgiYS5qYXZhIiwgIiIiCisgICAgY2xhc3MgQSB7CisgICAgICBPYmplY3QgZm9vKCkgeyB0aGlzPGNhcmV0PiB9CisgICAgfQorICAgICIiIikKKyAgICB0eXBlICcuJworICAgIGFzc2VydCBsb29rdXAKKyAgICB0eXBlICdjJworICAgIGFzc2VydCBsb29rdXAKKyAgICB0eXBlICdcYicKKyAgICBhc3NlcnQgbG9va3VwCisgICAgdHlwZSAneCcKKyAgICBhc3NlcnQgIWxvb2t1cAorICB9CisKKyAgcHVibGljIHZvaWQgdGVzdERvdWJsZUxpdGVyYWxJbkZpZWxkKCkgeworICAgIG15Rml4dHVyZS5jb25maWd1cmVCeVRleHQgImEuamF2YSIsICIiIgorcHVibGljIGludGVyZmFjZSBUZXN0IHsKKyAgZG91YmxlIEZVTEwgPSAxLjA8Y2FyZXQ+Cit9IiIiCisgICAgdHlwZSAnZCcKKyAgICBhc3NlcnQgIWxvb2t1cAorICB9CisKKyAgcHVibGljIHZvaWQgdGVzdENhbmNlbGxpbmdEdXJpbmdDYWxjdWxhdGlvbigpIHsKKyAgICBteUZpeHR1cmUuY29uZmlndXJlQnlUZXh0ICJhLmphdmEiLCAiIiIKK2NsYXNzIEFhYWFhYWEge30KK3B1YmxpYyBpbnRlcmZhY2UgVGVzdCB7CisgIDxjYXJldD4KK30iIiIKKyAgICBlZHQgeyBteUZpeHR1cmUudHlwZSAnQScgfQorICAgIGpvaW5BdXRvcG9wdXAoKQorICAgIGRlZiBmaXJzdCA9IGxvb2t1cAorICAgIGFzc2VydCBmaXJzdAorICAgIGVkdCB7CisgICAgICBhc3NlcnQgZmlyc3QgPT0gbG9va3VwCisgICAgICBsb29rdXAuaGlkZSgpCisgICAgICBteUZpeHR1cmUudHlwZSAnYScKKyAgICB9CisgICAgam9pbkF1dG9wb3B1cCgpCisgICAgam9pbkF1dG9wb3B1cCgpCisgICAgam9pbkF1dG9wb3B1cCgpCisgICAgYXNzZXJ0IGxvb2t1cCAhPSBmaXJzdAorICB9CisKKyAgc3RhdGljIGNsYXNzIExvbmdSZXBsYWNlbWVudE9mZnNldENvbnRyaWJ1dG9yIGV4dGVuZHMgQ29tcGxldGlvbkNvbnRyaWJ1dG9yIHsKKyAgICBAT3ZlcnJpZGUKKyAgICB2b2lkIGR1cmluZ0NvbXBsZXRpb24oQ29tcGxldGlvbkluaXRpYWxpemF0aW9uQ29udGV4dCBjeHQpIHsKKyAgICAgIFRocmVhZC5zbGVlcCA1MDAKKyAgICAgIFByb2dyZXNzTWFuYWdlci5jaGVja0NhbmNlbGVkKCkKKyAgICAgIGN4dC5yZXBsYWNlbWVudE9mZnNldC0tOworICAgIH0KKyAgfQorCisgIHN0YXRpYyBjbGFzcyBMb25nQ29udHJpYnV0b3IgZXh0ZW5kcyBDb21wbGV0aW9uQ29udHJpYnV0b3IgeworCisgICAgQE92ZXJyaWRlCisgICAgdm9pZCBmaWxsQ29tcGxldGlvblZhcmlhbnRzKENvbXBsZXRpb25QYXJhbWV0ZXJzIHBhcmFtZXRlcnMsIENvbXBsZXRpb25SZXN1bHRTZXQgcmVzdWx0KSB7CisgICAgICByZXN1bHQucnVuUmVtYWluaW5nQ29udHJpYnV0b3JzKHBhcmFtZXRlcnMsIHRydWUpCisgICAgICBUaHJlYWQuc2xlZXAgMTAwMAorICAgIH0KKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3REdXJpbmdDb21wbGV0aW9uTXVzdEZpbmlzaCgpIHsKKyAgICByZWdpc3RlckNvbnRyaWJ1dG9yKExvbmdSZXBsYWNlbWVudE9mZnNldENvbnRyaWJ1dG9yKQorCisgICAgZWR0IHsgbXlGaXh0dXJlLmFkZEZpbGVUb1Byb2plY3QgJ2RpcmVjdG9yeS9mb28udHh0JywgJycgfQorICAgIG15Rml4dHVyZS5jb25maWd1cmVCeVRleHQgImEuamF2YSIsICdwdWJsaWMgaW50ZXJmYWNlIFRlc3QgeyBSdW50aUV4Y2U8Y2FyZXQ+eHh4IH0nCisgICAgbXlGaXh0dXJlLmNvbXBsZXRlQmFzaWMoKQorICAgIHdoaWxlICghbG9va3VwLml0ZW1zKSB7CisgICAgICBUaHJlYWQuc2xlZXAoMTApCisgICAgICBlZHQgeyBsb29rdXAucmVmcmVzaFVpKGZhbHNlLCBmYWxzZSkgfQorICAgIH0KKyAgICBlZHQgeyBteUZpeHR1cmUudHlwZSAnXHQnIH0KKyAgICBteUZpeHR1cmUuY2hlY2tSZXN1bHQgJ3B1YmxpYyBpbnRlcmZhY2UgVGVzdCB7IFJ1bnRpbWVFeGNlcHRpb248Y2FyZXQ+eCB9JworIH0KKworICBwcml2YXRlIGRlZiByZWdpc3RlckNvbnRyaWJ1dG9yKGZpbmFsIENsYXNzIGNvbnRyaWJ1dG9yLCBMb2FkaW5nT3JkZXIgb3JkZXIgPSBMb2FkaW5nT3JkZXIuTEFTVCkgeworICAgIGRlZiBlcCA9IEV4dGVuc2lvbnMucm9vdEFyZWEuZ2V0RXh0ZW5zaW9uUG9pbnQoImNvbS5pbnRlbGxpai5jb21wbGV0aW9uLmNvbnRyaWJ1dG9yIikKKyAgICBkZWYgYmVhbiA9IG5ldyBDb21wbGV0aW9uQ29udHJpYnV0b3JFUChsYW5ndWFnZTogJ0pBVkEnLCBpbXBsZW1lbnRhdGlvbkNsYXNzOiBjb250cmlidXRvci5uYW1lKQorICAgIGVwLnJlZ2lzdGVyRXh0ZW5zaW9uKGJlYW4sIG9yZGVyKQorICAgIGRpc3Bvc2VPblRlYXJEb3duKHsgZXAudW5yZWdpc3RlckV4dGVuc2lvbihiZWFuKSB9IGFzIERpc3Bvc2FibGUpCisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0TGVmdFJpZ2h0TW92ZW1lbnRzKCkgeworICAgIG15Rml4dHVyZS5jb25maWd1cmVCeVRleHQoImEuamF2YSIsICIiIgorICAgICAgY2xhc3MgRm9vIHsKKyAgICAgICAgdm9pZCBmb28oU3RyaW5nIGl0ZXJhYmxlKSB7CisgICAgICAgICAgPGNhcmV0PnRlciAgIHgKKyAgICAgICAgfQorICAgICAgfQorICAgICIiIikKKyAgICB0eXBlKCdpJykKKyAgICBkZWYgb2Zmc2V0ID0gbXlGaXh0dXJlLmVkaXRvci5jYXJldE1vZGVsLm9mZnNldAorICAgIGFzc2VydENvbnRhaW5zICJpZiIsICJpdGVyYWJsZSIsICJpbnQiCisKKyAgICBlZHQgeyBteUZpeHR1cmUucGVyZm9ybUVkaXRvckFjdGlvbihJZGVBY3Rpb25zLkFDVElPTl9FRElUT1JfTU9WRV9DQVJFVF9SSUdIVCkgfQorICAgIGFzc2VydCBteUZpeHR1cmUuZWRpdG9yLmNhcmV0TW9kZWwub2Zmc2V0ID09IG9mZnNldCArIDEKKyAgICBqb2luQXV0b3BvcHVwKCkKKyAgICBqb2luQ29tcGxldGlvbigpCisgICAgYXNzZXJ0ICFsb29rdXAuY2FsY3VsYXRpbmcKKyAgICBhc3NlcnRDb250YWlucyAiaXRlcmFibGUiCisgICAgYXNzZXJ0RXF1YWxzICdpdGVyYWJsZScsIGxvb2t1cC5jdXJyZW50SXRlbS5sb29rdXBTdHJpbmcKKworICAgIGVkdCB7IG15Rml4dHVyZS5wZXJmb3JtRWRpdG9yQWN0aW9uKElkZUFjdGlvbnMuQUNUSU9OX0VESVRPUl9NT1ZFX0NBUkVUX0xFRlQpIH0KKyAgICBhc3NlcnQgbXlGaXh0dXJlLmVkaXRvci5jYXJldE1vZGVsLm9mZnNldCA9PSBvZmZzZXQKKyAgICBqb2luQXV0b3BvcHVwKCkKKyAgICBqb2luQ29tcGxldGlvbigpCisgICAgYXNzZXJ0ICFsb29rdXAuY2FsY3VsYXRpbmcKKyAgICBhc3NlcnRDb250YWlucyAiaWYiLCAiaXRlcmFibGUiLCAiaW50IgorICAgIGFzc2VydEVxdWFscyAnaXRlcmFibGUnLCBsb29rdXAuY3VycmVudEl0ZW0ubG9va3VwU3RyaW5nCisKKyAgICBlZHQgeyBteUZpeHR1cmUucGVyZm9ybUVkaXRvckFjdGlvbihJZGVBY3Rpb25zLkFDVElPTl9FRElUT1JfTU9WRV9DQVJFVF9MRUZUKSB9CisgICAgam9pbkF1dG9wb3B1cCgpCisgICAgam9pbkNvbXBsZXRpb24oKQorICAgIGFzc2VydCAhbG9va3VwLmNhbGN1bGF0aW5nCisgICAgYXNzZXJ0IGxvb2t1cC5pdGVtcy5zaXplKCkgPiAzCisKKyAgICBmb3IgKGkgaW4gMC4uIml0ZXIiLnNpemUoKSkgeworICAgICAgZWR0IHsgbXlGaXh0dXJlLnBlcmZvcm1FZGl0b3JBY3Rpb24oSWRlQWN0aW9ucy5BQ1RJT05fRURJVE9SX01PVkVfQ0FSRVRfUklHSFQpIH0KKyAgICB9CisgICAgYXNzZXJ0ICFsb29rdXAKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RUeXBpbmdJbkFub3RoZXJFZGl0b3IoKSB7CisgICAgbXlGaXh0dXJlLmNvbmZpZ3VyZUJ5VGV4dCgiYS5qYXZhIiwgIiIpCisgICAgdHlwZSAnYycKKyAgICBhc3NlcnQgbG9va3VwCisKKyAgICBFZGl0b3IgYW5vdGhlciA9IG51bGwKKyAgICBkZWYgd2NhID0gbmV3IFdyaXRlQ29tbWFuZEFjdGlvbi5TaW1wbGUoZ2V0UHJvamVjdCgpLCBuZXcgUHNpRmlsZVswXSkgeworICAgICAgQE92ZXJyaWRlCisgICAgICBwcm90ZWN0ZWQgdm9pZCBydW4oKSB7CisgICAgICAgIEVkaXRvckFjdGlvbk1hbmFnZXIuaW5zdGFuY2UuZ2V0VHlwZWRBY3Rpb24oKS5oYW5kbGVyLmV4ZWN1dGUoYW5vdGhlciwgKGNoYXIpICd4JywgRGF0YU1hbmFnZXIuaW5zdGFuY2UuZGF0YUNvbnRleHQpCisgICAgICB9CisgICAgfQorCisgICAgdHJ5IHsKKyAgICAgIGVkdCB7CisgICAgICAgIGFzc2VydCAhbG9va3VwLmNhbGN1bGF0aW5nCisgICAgICAgIGxvb2t1cC5oaWRlKCkKKyAgICAgICAgZGVmIGZpbGUgPSBteUZpeHR1cmUuYWRkRmlsZVRvUHJvamVjdCgiYi5qYXZhIiwgIiIpCisgICAgICAgIGFub3RoZXIgPSBFZGl0b3JGYWN0b3J5Lmluc3RhbmNlLmNyZWF0ZUVkaXRvcihmaWxlLnZpZXdQcm92aWRlci5kb2N1bWVudCwgcHJvamVjdCkKKyAgICAgICAgd2NhLmV4ZWN1dGUoKQorICAgICAgICBhc3NlcnQgJ3gnID09IGFub3RoZXIuZG9jdW1lbnQudGV4dAorICAgICAgfQorICAgICAgam9pbkF1dG9wb3B1cCgpCisgICAgICBqb2luQ29tcGxldGlvbigpCisgICAgICBMb29rdXBJbXBsIGwxID0gTG9va3VwTWFuYWdlci5nZXRBY3RpdmVMb29rdXAoYW5vdGhlcikKKyAgICAgIGlmIChsMSkgeworICAgICAgICBwcmludFRocmVhZER1bXAoKQorICAgICAgICBwcmludGxuIGwxLml0ZW1zCisgICAgICAgIHByaW50bG4gbDEuY2FsY3VsYXRpbmcKKyAgICAgICAgcHJpbnRsbiBteUZpeHR1cmUuZWRpdG9yCisgICAgICAgIHByaW50bG4gYW5vdGhlcgorICAgICAgICBwcmludGxuIENvbXBsZXRpb25TZXJ2aWNlSW1wbC5jb21wbGV0aW9uUGhhc2UKKyAgICAgICAgYXNzZXJ0IGZhbHNlIDogbDEuaXRlbXMKKyAgICAgIH0KKyAgICAgIHR5cGUgJ2wnCisgICAgICBhc3NlcnQgbG9va3VwCisgICAgfQorICAgIGZpbmFsbHkgeworICAgICAgZWR0IHsgRWRpdG9yRmFjdG9yeS5pbnN0YW5jZS5yZWxlYXNlRWRpdG9yKGFub3RoZXIpIH0KKyAgICB9CisKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RFeHBsaWNpdENvbXBsZXRpb25PbkVtcHR5QXV0b3BvcHVwKCkgeworICAgIG15Rml4dHVyZS5jb25maWd1cmVCeVRleHQoImEuamF2YSIsICI8Y2FyZXQ+IikKKyAgICB0eXBlICdjY2NjY2MnCisgICAgbXlGaXh0dXJlLmNvbXBsZXRlQmFzaWMoKQorICAgIGpvaW5Db21wbGV0aW9uKCkKKyAgICBhc3NlcnQgIWxvb2t1cAorICB9CisKKyAgcHVibGljIHZvaWQgdGVzdE5vU2luZ2xlVGVtcGxhdGVMb29rdXAoKSB7CisgICAgbXlGaXh0dXJlLmNvbmZpZ3VyZUJ5VGV4dCAnYS5qYXZhJywgJ2NsYXNzIEZvbyB7eyBpdGU8Y2FyZXQ+IH19JworICAgIHR5cGUgJ3InCisgICAgYXNzZXJ0ICFsb29rdXAKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RUZW1wbGF0ZXNXaXRoTm9uSW1wb3J0ZWRDbGFzc2VzKCkgeworICAgIENvZGVJbnNpZ2h0U2V0dGluZ3MuaW5zdGFuY2UuQ09NUExFVElPTl9DQVNFX1NFTlNJVElWRSA9IENvZGVJbnNpZ2h0U2V0dGluZ3MuTk9ORQorICAgIG15Rml4dHVyZS5hZGRDbGFzcygicGFja2FnZSBmb28uYmFyOyBwdWJsaWMgY2xhc3MgVG9BcnJheSB7fSIpCisgICAgdHJ5IHsKKyAgICAgIG15Rml4dHVyZS5jb25maWd1cmVCeVRleHQgJ2EuamF2YScsICdjbGFzcyBGb28ge3sgZm9vKDxjYXJldD4pIH19JworICAgICAgdHlwZSAndG9hcicKKyAgICAgIGFzc2VydCBsb29rdXAKKyAgICAgIGFzc2VydCAndG9hcicgaW4gbXlGaXh0dXJlLmxvb2t1cEVsZW1lbnRTdHJpbmdzCisgICAgICBhc3NlcnQgJ1RvQXJyYXknIGluIG15Rml4dHVyZS5sb29rdXBFbGVtZW50U3RyaW5ncworICAgIH0KKyAgICBmaW5hbGx5IHsKKyAgICAgIENvZGVJbnNpZ2h0U2V0dGluZ3MuaW5zdGFuY2UuQ09NUExFVElPTl9DQVNFX1NFTlNJVElWRSA9IENvZGVJbnNpZ2h0U2V0dGluZ3MuRklSU1RfTEVUVEVSCisgICAgfQorICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFRlbXBsYXRlU2VsZWN0aW9uQnlDb21tYSgpIHsKKyAgICBteUZpeHR1cmUuY29uZmlndXJlQnlUZXh0KCJhLmphdmEiLCAiIiIKK2NsYXNzIEZvbyB7CisgICAgaW50IGl0ZWEgPSAyOworICAgIGludCBpdGVyYSA9IDI7CisKKyAgICB7CisgICAgICAgIGl0PGNhcmV0PgorICAgIH0KK30KKyIiIikKKyAgICB0eXBlICdlJworICAgIGFzc2VydENvbnRhaW5zICJpdGVhIiwgIml0ZXJhIgorICAgIHR5cGUgJ3InCisgICAgYXNzZXJ0Q29udGFpbnMgIml0ZXIiLCAiaXRlcmEiCisgICAgdHlwZSAnLCcKKyAgICBhc3NlcnQgIWxvb2t1cAorICAgIGFzc2VydCBteUZpeHR1cmUuZWRpdG9yLmRvY3VtZW50LnRleHQuY29udGFpbnMoJ2l0ZXJhLCcpCisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0VGVtcGxhdGVTZWxlY3Rpb25CeVNwYWNlKCkgeworICAgIG15Rml4dHVyZS5jb25maWd1cmVCeVRleHQoImEuamF2YSIsICIiIgorY2xhc3MgRm9vIHsKKyAgICBpbnQgSVRFUiA9IDI7CisgICAgaW50IGl0ZWEgPSAyOworCisgICAgeworICAgICAgICBpdDxjYXJldD4KKyAgICB9Cit9CisiIiIpCisgICAgdHlwZSAnZXIgJworICAgIGFzc2VydCBteUZpeHR1cmUuZWRpdG9yLmRvY3VtZW50LnRleHQuY29udGFpbnMoJ2l0ZXIgJykKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3ROZXdDbGFzc1BhcmVudGhlc2lzKCkgeworICAgIENvZGVJbnNpZ2h0U2V0dGluZ3MuaW5zdGFuY2UuQ09NUExFVElPTl9DQVNFX1NFTlNJVElWRSA9IENvZGVJbnNpZ2h0U2V0dGluZ3MuTk9ORQorICAgIHRyeSB7CisgICAgICBteUZpeHR1cmUuY29uZmlndXJlQnlUZXh0KCJhLmphdmEiLCAiIiIgY2xhc3MgRm9vIHsgeyBuZXcgPGNhcmV0PiB9IH0gIiIiKQorICAgICAgdHlwZSAnYWlvbygnCisgICAgICBhc3NlcnQgbXlGaXh0dXJlLmVkaXRvci5kb2N1bWVudC50ZXh0LmNvbnRhaW5zKCduZXcgQXJyYXlJbmRleE91dE9mQm91bmRzRXhjZXB0aW9uKCknKQorICAgIH0KKyAgICBmaW5hbGx5IHsKKyAgICAgIENvZGVJbnNpZ2h0U2V0dGluZ3MuaW5zdGFuY2UuQ09NUExFVElPTl9DQVNFX1NFTlNJVElWRSA9IENvZGVJbnNpZ2h0U2V0dGluZ3MuRklSU1RfTEVUVEVSCisgICAgfQorICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFVua25vd25NZXRob2RQYXJlbnRoZXNpcygpIHsKKyAgICBteUZpeHR1cmUuY29uZmlndXJlQnlUZXh0KCJhLmphdmEiLCAiIiIgY2xhc3MgRm9vIHsgeyA8Y2FyZXQ+IH0gfSAiIiIpCisgICAgdHlwZSAnZmlsaW5wc3RyKCcKKyAgICBhc3NlcnQgbXlGaXh0dXJlLmVkaXRvci5kb2N1bWVudC50ZXh0LmNvbnRhaW5zKCdmaWxpbnBzdHIoKScpCisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0Tm9BdXRvcG9wdXBBZnRlclNwYWNlKCkgeworICAgIG15Rml4dHVyZS5jb25maWd1cmVCeVRleHQoImEuamF2YSIsICIiIiBjbGFzcyBGb28geyB7IGludCBuZXdhOyA8Y2FyZXQ+IH0gfSAiIiIpCisgICAgZWR0IHsgbXlGaXh0dXJlLnR5cGUoJ25ldyAnKSB9CisgICAgam9pbkF1dG9wb3B1cCgpCisgICAgam9pbkNvbXBsZXRpb24oKQorICAgIGFzc2VydCAhbG9va3VwCisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0UmVzdGFydEFuZFR5cGluZ0R1cmluZ0NvcHlDb21taXQoKSB7CisgICAgcmVnaXN0ZXJDb250cmlidXRvcihMb25nUmVwbGFjZW1lbnRPZmZzZXRDb250cmlidXRvcikKKworICAgIG15Rml4dHVyZS5jb25maWd1cmVCeVRleHQoImEuamF2YSIsICIiIiBjbGFzcyBGb28geyB7IGludCBuZXdhOyA8Y2FyZXQ+IH0gfSAiIiIpCisgICAgbXlGaXh0dXJlLnR5cGUgJ24nCisgICAgam9pbkF1dG9wb3B1cCgpCisgICAgbXlGaXh0dXJlLnR5cGUgJ2UnCisgICAgam9pbkNvbW1pdCgpIC8vIG9yaWdpbmFsIGNvbW1pdAorICAgIG15Rml4dHVyZS50eXBlICd3JworICAgIGpvaW5BdXRvcG9wdXAoKQorICAgIGpvaW5Db21wbGV0aW9uKCkKKyAgICBteUZpeHR1cmUudHlwZSAnXG4nCisgICAgbXlGaXh0dXJlLmNoZWNrUmVzdWx0KCIgY2xhc3MgRm9vIHsgeyBpbnQgbmV3YTsgbmV3IDxjYXJldD4gfSB9ICIpCisgICAgYXNzZXJ0ICFsb29rdXAKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RBdXRvUmVzdGFydEFuZFR5cGluZ0R1cmluZ0NvcHlDb21taXQoKSB7CisgICAgcmVnaXN0ZXJDb250cmlidXRvcihMb25nUmVwbGFjZW1lbnRPZmZzZXRDb250cmlidXRvcikKKworICAgIG15Rml4dHVyZS5jb25maWd1cmVCeVRleHQoImEuamF2YSIsICIiIiBjbGFzcyBGb28geyB7IGludCBpdGVyYWFhOyA8Y2FyZXQ+IH0gfSAiIiIpCisgICAgdHlwZSAnaXRlJworICAgIGFzc2VydCAhKCdpdGVyJyBpbiBteUZpeHR1cmUubG9va3VwRWxlbWVudFN0cmluZ3MpCisgICAgbXlGaXh0dXJlLnR5cGUgJ3InCisgICAgam9pbkNvbW1pdCgpCisgICAgbXlGaXh0dXJlLnR5cGUgJ2EnCisgICAgam9pbkF1dG9wb3B1cCgpCisgICAgam9pbkNvbXBsZXRpb24oKQorICAgIG15Rml4dHVyZS50eXBlICdcbicKKyAgICBteUZpeHR1cmUuY2hlY2tSZXN1bHQoIiBjbGFzcyBGb28geyB7IGludCBpdGVyYWFhOyBpdGVyYWFhPGNhcmV0PiB9IH0gIikKKyAgICBhc3NlcnQgIWxvb2t1cAorICB9CisgIAorICBwdWJsaWMgdm9pZCB0ZXN0Q2hvb3NpbmdJdGVtRHVyaW5nQ29weUNvbW1pdCgpIHsKKyAgICByZWdpc3RlckNvbnRyaWJ1dG9yKExvbmdSZXBsYWNlbWVudE9mZnNldENvbnRyaWJ1dG9yKQorCisgICAgbXlGaXh0dXJlLmNvbmZpZ3VyZUJ5VGV4dCgiYS5qYXZhIiwgIiIiIGNsYXNzIEZvbyB7IHsgaW50IGl0ZXJhYWE7IDxjYXJldD4gfSB9ICIiIikKKyAgICB0eXBlICdpdGUnCisgICAgYXNzZXJ0ICEoJ2l0ZXInIGluIG15Rml4dHVyZS5sb29rdXBFbGVtZW50U3RyaW5ncykKKyAgICBhc3NlcnQgJ2l0ZXJhYWEnIGluIG15Rml4dHVyZS5sb29rdXBFbGVtZW50U3RyaW5ncworICAgIG15Rml4dHVyZS50eXBlICdyJworICAgIGpvaW5Db21taXQoKQorICAgIG15Rml4dHVyZS50eXBlICdhLicKKyAgICBteUZpeHR1cmUuY2hlY2tSZXN1bHQoIiBjbGFzcyBGb28geyB7IGludCBpdGVyYWFhOyBpdGVyYWFhLjxjYXJldD4gfSB9ICIpCisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0UmVzdGFydFdpdGhJbnZpc2libGVMb29rdXAoKSB7CisgICAgcmVnaXN0ZXJDb250cmlidXRvcihMb25nUmVwbGFjZW1lbnRPZmZzZXRDb250cmlidXRvcikKKworICAgIG15Rml4dHVyZS5jb25maWd1cmVCeVRleHQoImEuamF2YSIsICIiIiBjbGFzcyBGb28geyB7IGludCBhYmNkZWY7IDxjYXJldD4gfSB9ICIiIikKKyAgICBteUZpeHR1cmUudHlwZSAnYScKKyAgICBqb2luQXV0b3BvcHVwKCkKKyAgICBhc3NlcnQgbG9va3VwCisgICAgZWR0IHsgbXlGaXh0dXJlLnR5cGUgJ2JjJyB9CisgICAgam9pbkF1dG9wb3B1cCgpCisgICAgam9pbkF1dG9wb3B1cCgpCisgICAgam9pbkNvbXBsZXRpb24oKQorICAgIGFzc2VydCBsb29rdXAKKyAgICBhc3NlcnQgbG9va3VwLnNob3duCisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0UmVzdGFydFdpdGhWaXNpYmxlTG9va3VwKCkgeworICAgIHJlZ2lzdGVyQ29udHJpYnV0b3IoTG9uZ0NvbnRyaWJ1dG9yLCBMb2FkaW5nT3JkZXIuRklSU1QpCisKKyAgICBteUZpeHR1cmUuY29uZmlndXJlQnlUZXh0KCJhLmphdmEiLCAiIiIgY2xhc3MgRm9vIHsgeyBpbnQgYWJjZGVmLCBhYmNkZWZnOyBhYjxjYXJldD4gfSB9ICIiIikKKyAgICBteUZpeHR1cmUuY29tcGxldGVCYXNpYygpCisgICAgd2hpbGUgKCFsb29rdXAuc2hvd24pIHsKKyAgICAgIFRocmVhZC5zbGVlcCgxKQorICAgIH0KKyAgICBkZWYgbCA9IGxvb2t1cAorICAgIGVkdCB7CisgICAgICBhc3NlcnQgbG9va3VwLmNhbGN1bGF0aW5nCisgICAgICBteUZpeHR1cmUudHlwZSAnYycKKyAgICB9CisgICAgam9pbkNvbW1pdCB7CisgICAgICBteUZpeHR1cmUudHlwZSAnZCcKKyAgICB9CisgICAgam9pbkF1dG9wb3B1cCgpCisgICAgam9pbkNvbXBsZXRpb24oKQorICAgIGFzc2VydCBsb29rdXAgPT0gbAorICAgIGFzc2VydCAhbG9va3VwLmNhbGN1bGF0aW5nCisgICAgYXNzZXJ0IGxvb2t1cC5zaG93bgorICB9CisKKyAgcHJpdmF0ZSB2b2lkIGpvaW5Tb21ldGhpbmcoaW50IGRlZ3JlZSkgeworICAgIGlmIChkZWdyZWUgPT0gMCkgcmV0dXJuCisgICAgam9pbkFsYXJtKCkKKyAgICBpZiAoZGVncmVlID09IDEpIHJldHVybgorICAgIGpvaW5Db21taXQoKQorICAgIGlmIChkZWdyZWUgPT0gMikgcmV0dXJuCisgICAgam9pbkNvbW1pdCgpCisgICAgaWYgKGRlZ3JlZSA9PSAzKSByZXR1cm4KKyAgICBlZHQge30KKyAgICBpZiAoZGVncmVlID09IDQpIHJldHVybgorICAgIGpvaW5Db21wbGV0aW9uKCkKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RFdmVyeVBvc3NpYmxlV2F5VG9UeXBlSWYoKSB7CisgICAgZGVmIHNyYyA9ICJjbGFzcyBGb28geyB7IGludCBpZmE7IDxjYXJldD4gfSB9IgorICAgIGRlZiByZXN1bHQgPSAiY2xhc3MgRm9vIHsgeyBpbnQgaWZhOyBpZiA8Y2FyZXQ+IH0gfSIKKyAgICBpbnQgYWN0aW9ucyA9IDUKKworICAgIGZvciAoYTEgaW4gMC4uYWN0aW9ucykgeworICAgICAgcHJpbnRsbiAiYTEgPSAkYTEiCisgICAgICBmb3IgKGEyIGluIDAuLmFjdGlvbnMpIHsKKyAgICAgICAgbXlGaXh0dXJlLmNvbmZpZ3VyZUJ5VGV4dCgiJGExICRhMiAuamF2YSIsIHNyYykKKyAgICAgICAgbXlGaXh0dXJlLnR5cGUgJ2knCisgICAgICAgIGpvaW5Tb21ldGhpbmcoYTEpCisgICAgICAgIG15Rml4dHVyZS50eXBlICdmJworICAgICAgICBqb2luU29tZXRoaW5nKGEyKQorICAgICAgICBteUZpeHR1cmUudHlwZSAnICcKKworICAgICAgICBqb2luQXV0b3BvcHVwKCkKKyAgICAgICAgam9pbkNvbXBsZXRpb24oKQorICAgICAgICBteUZpeHR1cmUuY2hlY2tSZXN1bHQocmVzdWx0KQorICAgICAgICBhc3NlcnQgIWxvb2t1cAorICAgICAgfQorICAgIH0KKworICAgIGZvciAoYTEgaW4gMC4uYWN0aW9ucykgeworICAgICAgbXlGaXh0dXJlLmNvbmZpZ3VyZUJ5VGV4dCgiJGExIGlmIC5qYXZhIiwgc3JjKQorICAgICAgZWR0IHsgbXlGaXh0dXJlLnR5cGUgJ2lmJyB9CisgICAgICBqb2luU29tZXRoaW5nKGExKQorCisgICAgICBteUZpeHR1cmUudHlwZSAnICcKKworICAgICAgam9pbkF1dG9wb3B1cCgpCisgICAgICBqb2luQ29tcGxldGlvbigpCisgICAgICBteUZpeHR1cmUuY2hlY2tSZXN1bHQocmVzdWx0KQorICAgICAgYXNzZXJ0ICFsb29rdXAKKyAgICB9CisKKyAgICBmb3IgKGExIGluIDAuLmFjdGlvbnMpIHsKKyAgICAgIG15Rml4dHVyZS5jb25maWd1cmVCeVRleHQoIiRhMSBpZiAuamF2YSIsIHNyYykKKyAgICAgIG15Rml4dHVyZS50eXBlICdpJworICAgICAgam9pblNvbWV0aGluZyhhMSkKKworICAgICAgZWR0IHsgbXlGaXh0dXJlLnR5cGUgJ2YgJyB9CisKKyAgICAgIGpvaW5BdXRvcG9wdXAoKQorICAgICAgam9pbkNvbXBsZXRpb24oKQorICAgICAgbXlGaXh0dXJlLmNoZWNrUmVzdWx0KHJlc3VsdCkKKyAgICAgIGFzc2VydCAhbG9va3VwCisgICAgfQorCisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0Tm9uRmluaXNoZWRQYXJhbWV0ZXJDb21tYSgpIHsKKyAgICBteUZpeHR1cmUuY29uZmlndXJlQnlUZXh0KCJhLmphdmEiLCAiIiIKK2NsYXNzIEZvbyB7CisgIHZvaWQgZm9vKGludCBhYWEsIGludCBhYWFhYSkgeyB9CisgIHZvaWQgYmFyKGludCBhYWEsIGludCBhYWFhYSkgeyBmb28oPGNhcmV0PikgfQorfSAiIiIpCisgICAgdHlwZSAnYSwnCisgICAgYXNzZXJ0IG15Rml4dHVyZS5lZGl0b3IuZG9jdW1lbnQudGV4dC5jb250YWlucygnZm9vKGFhYSwgKScpCisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0RmluaXNoZWRQYXJhbWV0ZXJDb21tYSgpIHsKKyAgICBteUZpeHR1cmUuY29uZmlndXJlQnlUZXh0KCJhLmphdmEiLCAiIiIgY2xhc3MgRm9vIHsgdm9pZCBmb28oaW50IGFhYSwgaW50IGFhYWFhKSB7IGZvbyg8Y2FyZXQ+KSB9IH0gIiIiKQorICAgIHR5cGUgJ2FhYSwnCisgICAgYXNzZXJ0IG15Rml4dHVyZS5lZGl0b3IuZG9jdW1lbnQudGV4dC5jb250YWlucygnZm9vKGFhYSwpJykKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3ROb25GaW5pc2hlZFZhcmlhYmxlRXEoKSB7CisgICAgbXlGaXh0dXJlLmNvbmZpZ3VyZUJ5VGV4dCgiYS5qYXZhIiwgIiIiIGNsYXNzIEZvbyB7IHZvaWQgZm9vKGludCBhYWEsIGludCBhYWFhYSkgeyA8Y2FyZXQ+IH0gfSAiIiIpCisgICAgdHlwZSAnYT0nCisgICAgYXNzZXJ0IG15Rml4dHVyZS5lZGl0b3IuZG9jdW1lbnQudGV4dC5jb250YWlucygnYWFhID0gJykKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RGaW5pc2hlZFZhcmlhYmxlRXEoKSB7CisgICAgbXlGaXh0dXJlLmNvbmZpZ3VyZUJ5VGV4dCgiYS5qYXZhIiwgIiIiIGNsYXNzIEZvbyB7IHZvaWQgZm9vKGludCBhYWEsIGludCBhYWFhYSkgeyA8Y2FyZXQ+IH0gfSAiIiIpCisgICAgdHlwZSAnYWFhPScKKyAgICBhc3NlcnQgbXlGaXh0dXJlLmVkaXRvci5kb2N1bWVudC50ZXh0LmNvbnRhaW5zKCdhYWE9JykKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RDb21wbGV0aW9uV2hlbkxpdmVUZW1wbGF0ZUFyZU5vdFN1ZmZpY2llbnQoKSB7CisgICAgKChUZW1wbGF0ZU1hbmFnZXJJbXBsKVRlbXBsYXRlTWFuYWdlci5nZXRJbnN0YW5jZShnZXRQcm9qZWN0KCkpKS5zZXRUZW1wbGF0ZVRlc3RpbmcodHJ1ZSk7CisgICAgdHJ5IHsKKyAgICAgIG15Rml4dHVyZS5jb25maWd1cmVCeVRleHQoImEuamF2YSIsICIiIgorICBjbGFzcyBGb28geworICAgICAgeworICAgICAgICAgIEl0ZXJhYmxlPFN0cmluZz4gbDEgPSBudWxsOworICAgICAgICAgIEl0ZXJhYmxlPFN0cmluZz4gbDIgPSBudWxsOworICAgICAgICAgIE9iamVjdCBhc2RmID0gbnVsbDsKKyAgICAgICAgICBpdGVyPGNhcmV0PgorICAgICAgfQorICB9CisgICIiIikKKyAgICAgIHR5cGUgJ1x0JworICAgICAgYXNzZXJ0IG15Rml4dHVyZS5sb29rdXBFbGVtZW50U3RyaW5ncyA9PSBbJ2wyJywgJ2wxJ10KKyAgICAgIHR5cGUgJ2FzJworICAgICAgYXNzZXJ0IGxvb2t1cAorICAgICAgYXNzZXJ0Q29udGFpbnMgJ2FzZGYnLCAnYXNzZXJ0JworICAgICAgdHlwZSAnXG4uJworICAgICAgYXNzZXJ0IGxvb2t1cAorICAgICAgYXNzZXJ0ICdoYXNoQ29kZScgaW4gbXlGaXh0dXJlLmxvb2t1cEVsZW1lbnRTdHJpbmdzCisgICAgICBhc3NlcnQgbXlGaXh0dXJlLmZpbGUudGV4dC5jb250YWlucygnYXNkZi4nKQorICAgIH0KKyAgICBmaW5hbGx5IHsKKyAgICAgICgoVGVtcGxhdGVNYW5hZ2VySW1wbClUZW1wbGF0ZU1hbmFnZXIuZ2V0SW5zdGFuY2UoZ2V0UHJvamVjdCgpKSkuc2V0VGVtcGxhdGVUZXN0aW5nKGZhbHNlKTsKKyAgICB9CisKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3ROb1dvcmRDb21wbGV0aW9uQXV0b1BvcHVwKCkgeworICAgIG15Rml4dHVyZS5jb25maWd1cmVCeVRleHQgImEuamF2YSIsICdjbGFzcyBCYXIgeyB2b2lkIGZvbygpIHsgImY8Y2FyZXQ+IiB9fScKKyAgICB0eXBlICdvJworICAgIGFzc2VydCAhbG9va3VwCisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0TWV0aG9kTmFtZVJlc3RhcnQoKSB7CisgICAgbXlGaXh0dXJlLmNvbmZpZ3VyZUJ5VGV4dCAiYS5qYXZhIiwgJycnCitwdWJsaWMgY2xhc3MgQmFyIHsKKyAgICBwcml2YXRlIHN0YXRpYyBMaXN0PGphdmEuaW8uRmlsZT4gZ2V0UzxjYXJldD4KKworfQorJycnCisgICAgdHlwZSAndGEnCisgICAgYXNzZXJ0ICFsb29rdXAKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RUYXJnZXRFbGVtZW50SW5Mb29rdXAoKSB7CisgICAgbXlGaXh0dXJlLmNvbmZpZ3VyZUJ5VGV4dCAnYS5qYXZhJywgJycnCitjbGFzcyBGb28geworICB2b2lkIHhfX2ZvbygpIHt9CisgIHZvaWQgYmFyKCkgeworICAgIDxjYXJldD4KKyAgfQorICB2b2lkIHhfX2dvbygpIHt9Cit9CisnJycKKyAgICBkZWYgY2xzID0gKChQc2lKYXZhRmlsZSlteUZpeHR1cmUuZmlsZSkuZ2V0Q2xhc3NlcygpWzBdCisgICAgZGVmIGZvbyA9IGNscy5tZXRob2RzWzBdCisgICAgZGVmIGdvbyA9IGNscy5tZXRob2RzWzJdCisgICAgdHlwZSgneCcpCisgICAgYXNzZXJ0Q29udGFpbnMgJ3hfX2ZvbycsICd4X19nb28nCisgICAgZWR0IHsKKyAgICAgIGFzc2VydCBmb28gPT0gVGFyZ2V0RWxlbWVudFV0aWwuaW5zdGFuY2UuZmluZFRhcmdldEVsZW1lbnQobXlGaXh0dXJlLmVkaXRvciwgVGFyZ2V0RWxlbWVudFV0aWwuTE9PS1VQX0lURU1fQUNDRVBURUQpCisgICAgICBteUZpeHR1cmUucGVyZm9ybUVkaXRvckFjdGlvbihJZGVBY3Rpb25zLkFDVElPTl9FRElUT1JfTU9WRV9DQVJFVF9ET1dOKQorICAgICAgYXNzZXJ0IGdvbyA9PSBUYXJnZXRFbGVtZW50VXRpbC5pbnN0YW5jZS5maW5kVGFyZ2V0RWxlbWVudChteUZpeHR1cmUuZWRpdG9yLCBUYXJnZXRFbGVtZW50VXRpbC5MT09LVVBfSVRFTV9BQ0NFUFRFRCkKKyAgICB9CisKKyAgICB0eXBlKCdfJykKKyAgICBhc3NlcnRDb250YWlucyAneF9fZm9vJywgJ3hfX2dvbycKKyAgICBlZHQgeworICAgICAgYXNzZXJ0IGdvbyA9PSBUYXJnZXRFbGVtZW50VXRpbC5pbnN0YW5jZS5maW5kVGFyZ2V0RWxlbWVudChteUZpeHR1cmUuZWRpdG9yLCBUYXJnZXRFbGVtZW50VXRpbC5MT09LVVBfSVRFTV9BQ0NFUFRFRCkKKyAgICAgIG15Rml4dHVyZS5wZXJmb3JtRWRpdG9yQWN0aW9uKElkZUFjdGlvbnMuQUNUSU9OX0VESVRPUl9NT1ZFX0NBUkVUX1VQKQorICAgICAgYXNzZXJ0IGZvbyA9PSBUYXJnZXRFbGVtZW50VXRpbC5pbnN0YW5jZS5maW5kVGFyZ2V0RWxlbWVudChteUZpeHR1cmUuZWRpdG9yLCBUYXJnZXRFbGVtZW50VXRpbC5MT09LVVBfSVRFTV9BQ0NFUFRFRCkKKyAgICB9CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0RXhwbGljaXRBdXRvY29tcGxldGlvbkFmdGVyQXV0b1BvcHVwKCkgeworICAgIG15Rml4dHVyZS5jb25maWd1cmVCeVRleHQgJ2EuamF2YScsICdjbGFzcyBGb28gPGNhcmV0PicKKyAgICB0eXBlICdleHQnCisKKyAgICBDb21wbGV0aW9uQXV0b1BvcHVwSGFuZGxlci5vdXJUZXN0aW5nQXV0b3BvcHVwID0gZmFsc2UKKyAgICBlZHQgeworICAgICAgbXlGaXh0dXJlLmNvbXBsZXRlQmFzaWMoKQorICAgIH0KKyAgICBteUZpeHR1cmUuY2hlY2tSZXN1bHQgJ2NsYXNzIEZvbyBleHRlbmRzIDxjYXJldD4nCisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0RXhwbGljaXRNdWx0aXBsZVZhcmlhbnRDb21wbGV0aW9uQWZ0ZXJBdXRvUG9wdXAoKSB7CisgICAgbXlGaXh0dXJlLmNvbmZpZ3VyZUJ5VGV4dCAnYS5qYXZhJywgJ2NsYXNzIEZvbyB7PGNhcmV0Pn0nCisgICAgdHlwZSAncHInCisKKyAgICBDb21wbGV0aW9uQXV0b1BvcHVwSGFuZGxlci5vdXJUZXN0aW5nQXV0b3BvcHVwID0gZmFsc2UKKyAgICBlZHQgeworICAgICAgbXlGaXh0dXJlLmNvbXBsZXRlQmFzaWMoKQorICAgIH0KKyAgICBteUZpeHR1cmUuY2hlY2tSZXN1bHQgJ2NsYXNzIEZvbyB7cHI8Y2FyZXQ+fScKKworICAgIEFwcGxpY2F0aW9uTWFuYWdlci5nZXRBcHBsaWNhdGlvbigpLnJ1blJlYWRBY3Rpb24obmV3IFJ1bm5hYmxlKCkgeworICAgICAgQE92ZXJyaWRlCisgICAgICB2b2lkIHJ1bigpIHsKKyAgICAgICAgZ2V0TG9va3VwKCkuaXRlbXMuZWFjaCB7CisgICAgICAgICAgZ2V0TG9va3VwKCkubGlzdC5jZWxsUmVuZGVyZXIuZ2V0TGlzdENlbGxSZW5kZXJlckNvbXBvbmVudChnZXRMb29rdXAoKS5saXN0LCBpdCwgMCwgZmFsc2UsIGZhbHNlKQorICAgICAgICB9CisgICAgICB9CisgICAgfSk7CisgICAgYXNzZXJ0IG15Rml4dHVyZS5sb29rdXBFbGVtZW50U3RyaW5ncy5jb250YWluc0FsbChbJ3ByaXZhdGUnLCAncHJvdGVjdGVkJ10pCisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0QXJyYXlzKCkgeworICAgIG15Rml4dHVyZS5jb25maWd1cmVCeVRleHQgImEuamF2YSIsICJjbGFzcyBGb28ge3sgPGNhcmV0PiB9fSIKKyAgICB0eXBlICdBcnJheXMuJworICAgIG15Rml4dHVyZS5jaGVja1Jlc3VsdCAiY2xhc3MgRm9vIHt7IEFycmF5cy48Y2FyZXQ+IH19IgorICAgIGFzc2VydCAnQXJyYXlzLmFzTGlzdCcgaW4gbXlGaXh0dXJlLmxvb2t1cEVsZW1lbnRTdHJpbmdzCisgIH0KKworCisgIHB1YmxpYyB2b2lkIHRlc3RFeGFjdE1hdGNoZXNGaXJzdCgpIHsKKyAgICBteUZpeHR1cmUuY29uZmlndXJlQnlUZXh0KCJhLmphdmEiLCAiIiIKK3B1YmxpYyBjbGFzcyBVVGVzdCB7CisgICAgdm9pZCBuZXh0V29yZCgpIHt9CisKKyAgICB2b2lkIGZvbygpIHsKKyAgICAgICAgbjxjYXJldD4KKyAgICB9Cit9IiIiKQorICAgIHR5cGUgJ2V3JworICAgIGFzc2VydCBteUZpeHR1cmUubG9va3VwRWxlbWVudFN0cmluZ3MgPT0gWyduZXcnLCAnbmV4dFdvcmQnXQorICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFVwZGF0ZVByZWZpeE1hdGNoaW5nT25UeXBpbmcoKSB7CisgICAgbXlGaXh0dXJlLmFkZENsYXNzKCJjbGFzcyBDZXJ0aWZpY2F0ZUVuY29kaW5nRXhjZXB0aW9uIHt9IikKKyAgICBteUZpeHR1cmUuYWRkQ2xhc3MoImNsYXNzIENlcnRpZmljYXRlRXhjZXB0aW9uIHt9IikKKyAgICBteUZpeHR1cmUuY29uZmlndXJlQnlUZXh0ICdhLmphdmEnLCAnY2xhc3MgRm9vIHs8Y2FyZXQ+fScKKyAgICB0eXBlICdDZXJ0aWZpY2F0ZUV4Y2UnCisgICAgYXNzZXJ0IG15Rml4dHVyZS5sb29rdXBFbGVtZW50U3RyaW5ncyA9PSBbJ0NlcnRpZmljYXRlRXhjZXB0aW9uJywgJ0NlcnRpZmljYXRlRW5jb2RpbmdFeGNlcHRpb24nXQorICB9CisKKyAgcHVibGljIHZvaWQgdGVzdE5vQ2xhc3Nlc0luVW5xdWFsaWZpZWRJbXBvcnRzKCkgeworICAgIG15Rml4dHVyZS5hZGRDbGFzcygicGFja2FnZSB4eHh4eDsgcHVibGljIGNsYXNzIFh4eHh4eHh4eCB7fSIpCisgICAgbXlGaXh0dXJlLmNvbmZpZ3VyZUJ5VGV4dCAnYS5qYXZhJywgJ3BhY2thZ2UgZm9vOyBpbXBvcnQgPGNhcmV0PicKKyAgICB0eXBlICd4eHgnCisgICAgYXNzZXJ0ICFsb29rdXAKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RQb3B1cEFmdGVyRG90QWZ0ZXJQYWNrYWdlKCkgeworICAgIG15Rml4dHVyZS5jb25maWd1cmVCeVRleHQgJ2EuamF2YScsICc8Y2FyZXQ+JworICAgIHR5cGUgJ2ltcG9ydCBqYXYnCisgICAgYXNzZXJ0IGxvb2t1cAorICAgIHR5cGUgJy4nCisgICAgYXNzZXJ0IGxvb2t1cAorICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFNhbWVQcmVmaXhJZ25vcmVDYXNlKCkgeworICAgIG15Rml4dHVyZS5hZGRDbGFzcygicGFja2FnZSB4eHh4eDsgcHVibGljIGNsYXNzIFNZU1RFTV9FWENFUFRJT04ge30iKQorICAgIG15Rml4dHVyZS5jb25maWd1cmVCeVRleHQgImEuamF2YSIsICJpbXBvcnQgeHh4eHguKjsgY2xhc3MgRm9vIHsgUzxjYXJldD4gfSIKKyAgICB0eXBlICdZc3RlbScKKyAgICBhc3NlcnQgJ2phdmEubGFuZy5TeXN0ZW0nID09ICgoSmF2YVBzaUNsYXNzUmVmZXJlbmNlRWxlbWVudCkgbXlGaXh0dXJlLmxvb2t1cEVsZW1lbnRzWzBdKS5xdWFsaWZpZWROYW1lCisgICAgYXNzZXJ0ICd4eHh4eC5TWVNURU1fRVhDRVBUSU9OJyA9PSAoKEphdmFQc2lDbGFzc1JlZmVyZW5jZUVsZW1lbnQpIG15Rml4dHVyZS5sb29rdXBFbGVtZW50c1sxXSkucXVhbGlmaWVkTmFtZQorICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFNhbWVQcmVmaXhJZ25vcmVDYXNlMigpIHsKKyAgICBteUZpeHR1cmUuYWRkQ2xhc3MoInBhY2thZ2UgeHh4eHg7IHB1YmxpYyBjbGFzcyBTWVNURU1fRVhDRVBUSU9OIHt9IikKKyAgICBteUZpeHR1cmUuYWRkQ2xhc3MoInBhY2thZ2UgeHh4eHg7IHB1YmxpYyBjbGFzcyBTWXN0ZW0ge30iKQorICAgIG15Rml4dHVyZS5jb25maWd1cmVCeVRleHQgImEuamF2YSIsICJpbXBvcnQgeHh4eHguKjsgY2xhc3MgRm9vIHsgUzxjYXJldD4gfSIKKyAgICB0eXBlICdZc3RlbScKKyAgICBhc3NlcnQgJ3h4eHh4LlNZc3RlbScgPT0gKChKYXZhUHNpQ2xhc3NSZWZlcmVuY2VFbGVtZW50KSBteUZpeHR1cmUubG9va3VwRWxlbWVudHNbMF0pLnF1YWxpZmllZE5hbWUKKyAgICBhc3NlcnQgJ2phdmEubGFuZy5TeXN0ZW0nID09ICgoSmF2YVBzaUNsYXNzUmVmZXJlbmNlRWxlbWVudCkgbXlGaXh0dXJlLmxvb2t1cEVsZW1lbnRzWzFdKS5xdWFsaWZpZWROYW1lCisgICAgYXNzZXJ0ICd4eHh4eC5TWVNURU1fRVhDRVBUSU9OJyA9PSAoKEphdmFQc2lDbGFzc1JlZmVyZW5jZUVsZW1lbnQpIG15Rml4dHVyZS5sb29rdXBFbGVtZW50c1syXSkucXVhbGlmaWVkTmFtZQorICB9CisKKyAgcHJpdmF0ZSBGaWxlRWRpdG9yIG9wZW5FZGl0b3JGb3JVbmRvKCkgeworICAgIEZpbGVFZGl0b3IgZWRpdG9yOworICAgIGVkdCB7IGVkaXRvciA9IEZpbGVFZGl0b3JNYW5hZ2VyLmdldEluc3RhbmNlKHByb2plY3QpLm9wZW5GaWxlKG15Rml4dHVyZS5maWxlLnZpcnR1YWxGaWxlLCBmYWxzZSlbMF0gfQorICAgIGRlZiBtYW5hZ2VyID0gKFVuZG9NYW5hZ2VySW1wbCkgVW5kb01hbmFnZXIuZ2V0SW5zdGFuY2UocHJvamVjdCkKKyAgICBkZWYgb2xkID0gbWFuYWdlci5lZGl0b3JQcm92aWRlcgorICAgIG1hbmFnZXIuZWRpdG9yUHJvdmlkZXIgPSBuZXcgQ3VycmVudEVkaXRvclByb3ZpZGVyKCkgeworICAgICAgQE92ZXJyaWRlCisgICAgICBwdWJsaWMgRmlsZUVkaXRvciBnZXRDdXJyZW50RWRpdG9yKCkgeworICAgICAgICByZXR1cm4gZWRpdG9yOworICAgICAgfQorICAgIH07CisgICAgZGlzcG9zZU9uVGVhckRvd24gKHsgbWFuYWdlci5lZGl0b3JQcm92aWRlciA9IG9sZCB9IGFzIERpc3Bvc2FibGUpCisgICAgcmV0dXJuIGVkaXRvcgorICB9CisKKyAgcHVibGljIHZvaWQgX3Rlc3RDaGFyU2VsZWN0aW9uVW5kbygpIHsKKyAgICBteUZpeHR1cmUuY29uZmlndXJlQnlUZXh0ICJhLmphdmEiLCAiY2xhc3MgRm9vIHt7IDxjYXJldD4gfX0iCisgICAgZGVmIGVkaXRvciA9IG9wZW5FZGl0b3JGb3JVbmRvKCk7CisgICAgdHlwZSgnQXJyU3RvRXhjZS4nKQorICAgIGVkdCB7IFVuZG9NYW5hZ2VyLmdldEluc3RhbmNlKHByb2plY3QpLnVuZG8oZWRpdG9yKSB9CisgICAgYXNzZXJ0IG15Rml4dHVyZS5lZGl0b3IuZG9jdW1lbnQudGV4dC5jb250YWlucygnQXJyU3RvRXhjZS4nKQorICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEF1dG9wb3B1cFR5cGluZ1VuZG8oKSB7CisgICAgbXlGaXh0dXJlLmNvbmZpZ3VyZUJ5VGV4dCAiYS5qYXZhIiwgImNsYXNzIEZvbyB7eyA8Y2FyZXQ+IH19IgorICAgIGRlZiBlZGl0b3IgPSBvcGVuRWRpdG9yRm9yVW5kbygpOworICAgIHR5cGUgJ2Fpb29iZWVlZScKKyAgICBlZHQgeyBVbmRvTWFuYWdlci5nZXRJbnN0YW5jZShwcm9qZWN0KS51bmRvKGVkaXRvcikgfQorICAgIGFzc2VydCAhbXlGaXh0dXJlLmVkaXRvci5kb2N1bWVudC50ZXh0LmNvbnRhaW5zKCdhaW9vJykKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3ROb0xpdmVUZW1wbGF0ZXNBZnRlckRvdCgpIHsKKyAgICBteUZpeHR1cmUuY29uZmlndXJlQnlUZXh0ICJhLmphdmEiLCAiY2xhc3MgRm9vIHt7IEl0ZXJhYmxlIHQ7IHQuPGNhcmV0PiB9fSIKKyAgICB0eXBlICdpdGVyJworICAgIGFzc2VydCBteUZpeHR1cmUubG9va3VwRWxlbWVudFN0cmluZ3MgPT0gWydpdGVyYXRvciddCisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0VHlwaW5nTm9uSW1wb3J0ZWRDbGFzc05hbWUoKSB7CisgICAgbXlGaXh0dXJlLmFkZENsYXNzKCJwYWNrYWdlIGZvbzsgcHVibGljIGNsYXNzIEZvbzIzOSB7fSAiKQorICAgIG15Rml4dHVyZS5hZGRDbGFzcygiY2xhc3MgRm9vMjM5VXRpbCB7fSAiKQorICAgIG15Rml4dHVyZS5hZGRDbGFzcygiY2xhc3MgRm9vMjM5VXRpbDIge30gIikKKworICAgIG15Rml4dHVyZS5jb25maWd1cmVCeVRleHQgImEuamF2YSIsICJjbGFzcyBGb28ge3sgPGNhcmV0PiB9fSIKKyAgICB0eXBlICdGb28yMzkgJworICAgIGFzc2VydCBteUZpeHR1cmUuZmlsZS50ZXh0LmNvbnRhaW5zKCdGb28yMzkgJykKKyAgICAKKyAgICBteUZpeHR1cmUuY29uZmlndXJlQnlUZXh0ICJhLmphdmEiLCAiY2xhc3MgRm9vIHt7IDxjYXJldD4gfX0iCisgICAgdHlwZSAnRm9vMjM5JworICAgIGVkdCB7IG15Rml4dHVyZS5wZXJmb3JtRWRpdG9yQWN0aW9uIElkZUFjdGlvbnMuQUNUSU9OX0VESVRPUl9NT1ZFX0NBUkVUX0RPV04gfQorICAgIHR5cGUgJyAnCisgICAgYXNzZXJ0IG15Rml4dHVyZS5maWxlLnRleHQuY29udGFpbnMoJ0ZvbzIzOVV0aWwyICcpCisKKyAgICBteUZpeHR1cmUuY29uZmlndXJlQnlUZXh0ICJhLmphdmEiLCAiY2xhc3MgRm9vIHt7IDxjYXJldD4gfX0iCisgICAgdHlwZSAnbmV3IEZvbzIzOSgnCisgICAgYXNzZXJ0IG15Rml4dHVyZS5maWxlLnRleHQuY29udGFpbnMoJ25ldyBGb28yMzkoKScpCisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0VHlwaW5nRmlyc3RWYXJhcmdEb3QoKSB7CisgICAgbXlGaXh0dXJlLmNvbmZpZ3VyZUJ5VGV4dCAiYS5qYXZhIiwgImNsYXNzIEZvbyB7IHZvaWQgZm9vKEZvbzxjYXJldD5bXSBhKSB7IH07IGNsYXNzIEJhciB7fX0iCisgICAgdHlwZSAnLicKKyAgICBhc3NlcnQgIWxvb2t1cAorICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEJsb2NrU2VsZWN0aW9uKCkgeworICAgIGRvVGVzdEJsb2NrU2VsZWN0aW9uICIiIgorY2xhc3MgRm9vIHt7CisgIDxjYXJldD50eDsKKyAgdHg7Cit9fSIiIiwgJ1xuJywgJycnCitjbGFzcyBGb28ge3sKKyAgdG9TdHJpbmcoKXg7CisgIHRvU3RyaW5nKCk8Y2FyZXQ+eDsKK319JycnCisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0QmxvY2tTZWxlY3Rpb25UYWIoKSB7CisgICAgZG9UZXN0QmxvY2tTZWxlY3Rpb24gIiIiCitjbGFzcyBGb28ge3sKKyAgPGNhcmV0PnR4OworICB0eDsKK319IiIiLCAnXHQnLCAnJycKK2NsYXNzIEZvbyB7eworICB0b1N0cmluZygpOworICB0b1N0cmluZygpPGNhcmV0PjsKK319JycnCisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0QmxvY2tTZWxlY3Rpb25CYWNrc3BhY2UoKSB7CisgICAgZG9UZXN0QmxvY2tTZWxlY3Rpb24gIiIiCitjbGFzcyBGb28ge3sKKyAgPGNhcmV0PnQ7CisgIHQ7Cit9fSIiIiwgJ1xiXHQnLCAnJycKK2NsYXNzIEZvbyB7eworICB0b1N0cmluZygpOworICB0b1N0cmluZygpPGNhcmV0PjsKK319JycnCisgIH0KKworICBwcml2YXRlIGRvVGVzdEJsb2NrU2VsZWN0aW9uKGZpbmFsIFN0cmluZyB0ZXh0QmVmb3JlLCBmaW5hbCBTdHJpbmcgdG9UeXBlLCBmaW5hbCBTdHJpbmcgdGV4dEFmdGVyKSB7CisgICAgbXlGaXh0dXJlLmNvbmZpZ3VyZUJ5VGV4dCAiYS5qYXZhIiwgdGV4dEJlZm9yZQorICAgIGVkdCB7CisgICAgICBkZWYgY2FyZXQgPSBteUZpeHR1cmUuZWRpdG9yLm9mZnNldFRvTG9naWNhbFBvc2l0aW9uKG15Rml4dHVyZS5lZGl0b3IuY2FyZXRNb2RlbC5vZmZzZXQpCisgICAgICBteUZpeHR1cmUuZWRpdG9yLnNlbGVjdGlvbk1vZGVsLnNldEJsb2NrU2VsZWN0aW9uKGNhcmV0LCBuZXcgTG9naWNhbFBvc2l0aW9uKGNhcmV0LmxpbmUgKyAxLCBjYXJldC5jb2x1bW4gKyAxKSkKKyAgICB9CisgICAgdHlwZSAndG9TdHInCisgICAgYXNzZXJ0IGxvb2t1cAorICAgIHR5cGUgdG9UeXBlCisgICAgbXlGaXh0dXJlLmNoZWNrUmVzdWx0IHRleHRBZnRlcgorICAgIGRlZiBzdGFydCA9IG15Rml4dHVyZS5lZGl0b3Iuc2VsZWN0aW9uTW9kZWwuYmxvY2tTdGFydAorICAgIGRlZiBlbmQgPSBteUZpeHR1cmUuZWRpdG9yLnNlbGVjdGlvbk1vZGVsLmJsb2NrRW5kCisgICAgYXNzZXJ0IHN0YXJ0LmxpbmUgPT0gZW5kLmxpbmUgLSAxCisgICAgYXNzZXJ0IHN0YXJ0LmNvbHVtbiA9PSBlbmQuY29sdW1uCisgICAgYXNzZXJ0IGVuZCA9PSBteUZpeHR1cmUuZWRpdG9yLmNhcmV0TW9kZWwubG9naWNhbFBvc2l0aW9uCisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0Tm9uSW1wb3J0ZWRDbGFzcygpIHsKKyAgICBteUZpeHR1cmUuYWRkQ2xhc3MoInBhY2thZ2UgZm9vOyBwdWJsaWMgY2xhc3MgQWJjZGVmZyB7fSIpCisgICAgbXlGaXh0dXJlLmNvbmZpZ3VyZUJ5VGV4dCAnYS5qYXZhJywgJ2NsYXNzIEZvbyBleHRlbmRzIDxjYXJldD4nCisgICAgdHlwZSAnQWJjZGUgJworICAgIG15Rml4dHVyZS5jaGVja1Jlc3VsdCAnaW1wb3J0IGZvby5BYmNkZWZnO1xuXG5jbGFzcyBGb28gZXh0ZW5kcyBBYmNkZWZnIDxjYXJldD4nCisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0VHdvTm9uSW1wb3J0ZWRDbGFzc2VzKCkgeworICAgIG15Rml4dHVyZS5hZGRDbGFzcygicGFja2FnZSBmb287IHB1YmxpYyBjbGFzcyBBYmNkZWZnIHt9IikKKyAgICBteUZpeHR1cmUuYWRkQ2xhc3MoInBhY2thZ2UgYmFyOyBwdWJsaWMgY2xhc3MgQWJjZGVmZyB7fSIpCisgICAgbXlGaXh0dXJlLmNvbmZpZ3VyZUJ5VGV4dCAnYS5qYXZhJywgJ2NsYXNzIEZvbyBleHRlbmRzIDxjYXJldD4nCisgICAgdHlwZSAnQWJjZGUgJworICAgIG15Rml4dHVyZS5jaGVja1Jlc3VsdCAnY2xhc3MgRm9vIGV4dGVuZHMgQWJjZGVmZyA8Y2FyZXQ+JworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdENsYXNzTmFtZUluUHJvcGVydGllcygpIHsKKyAgICBteUZpeHR1cmUuYWRkQ2xhc3MoInBhY2thZ2UgamF2YS5sYW5nYTsgcHVibGljIGNsYXNzIEFiY2RlZmcge30iKQorICAgIG15Rml4dHVyZS5jb25maWd1cmVCeVRleHQgJ2EucHJvcGVydGllcycsICdrZXkuMTE9amF2YTxjYXJldD4nCisgICAgdHlwZSAnLicKKyAgICBhc3NlcnQgbG9va3VwCisgICAgdHlwZSAnbGFuZycKKyAgICBhc3NlcnQgbXlGaXh0dXJlLmxvb2t1cEVsZW1lbnRTdHJpbmdzLnNpemUoKSA+PSAyCisgICAgdHlwZSAnLicKKyAgICBhc3NlcnQgbG9va3VwCisgICAgZWR0IHsgbXlGaXh0dXJlLmVkaXRvci5jYXJldE1vZGVsLm1vdmVUb09mZnNldChteUZpeHR1cmUuZWRpdG9yLmRvY3VtZW50LnRleHQuaW5kZXhPZignbGFuZycpKSB9CisgICAgYXNzZXJ0ICFsb29rdXAKKyAgICB0eXBlICdpJworICAgIGFzc2VydCAnaW8nIGluIG15Rml4dHVyZS5sb29rdXBFbGVtZW50U3RyaW5ncworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEVudGVyaW5nTGFiZWwoKSB7CisgICAgbXlGaXh0dXJlLmNvbmZpZ3VyZUJ5VGV4dCAnYS5qYXZhJywgJycnY2xhc3MgRm9vIHt7CisgIDxjYXJldD4KK319CisnJycKKyAgICB0eXBlICdGSVM6JworICAgIGFzc2VydCBteUZpeHR1cmUuZmlsZS50ZXh0LmNvbnRhaW5zKCdGSVM6JykKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RTb3V0dlRlbXBsYXRlKCkgeworICAgICgoVGVtcGxhdGVNYW5hZ2VySW1wbClUZW1wbGF0ZU1hbmFnZXIuZ2V0SW5zdGFuY2UoZ2V0UHJvamVjdCgpKSkuc2V0VGVtcGxhdGVUZXN0aW5nKHRydWUpOworICAgIHRyeSB7CisgICAgICBteUZpeHR1cmUuY29uZmlndXJlQnlUZXh0ICdhLmphdmEnLCAnY2xhc3MgRm9vIHt7IDxjYXJldD4gfX0nCisgICAgICB0eXBlICdzb3V0dlx0Z2V0Y2wuJworICAgICAgbXlGaXh0dXJlLmNoZWNrUmVzdWx0ICcnJ2NsYXNzIEZvbyB7eworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiZ2V0Q2xhc3MoKS4gPSAiICsgZ2V0Q2xhc3MoKS48Y2FyZXQ+KTsgfX0nJycKKyAgICB9CisgICAgZmluYWxseSB7CisgICAgICAoKFRlbXBsYXRlTWFuYWdlckltcGwpVGVtcGxhdGVNYW5hZ2VyLmdldEluc3RhbmNlKGdldFByb2plY3QoKSkpLnNldFRlbXBsYXRlVGVzdGluZyhmYWxzZSk7CisgICAgfQorICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFJldHVybkxQYXJlbigpIHsKKyAgICBteUZpeHR1cmUuY29uZmlndXJlQnlUZXh0ICdhLmphdmEnLCAnY2xhc3MgRm9vIHsgaW50IGZvbygpIHsgPGNhcmV0PiB9fScKKyAgICB0eXBlICdyZSgnCisgICAgbXlGaXh0dXJlLmNoZWNrUmVzdWx0ICdjbGFzcyBGb28geyBpbnQgZm9vKCkgeyByZSg8Y2FyZXQ+KSB9fScKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RBbWJpZ3VvdXNDbGFzc1F1YWxpZmllcigpIHsKKyAgICBteUZpeHR1cmUuYWRkQ2xhc3MoInBhY2thZ2UgZm9vOyBwdWJsaWMgY2xhc3MgVXRpbCB7IHB1YmxpYyBzdGF0aWMgdm9pZCBmb28oKSB7fSB9IikKKyAgICBteUZpeHR1cmUuYWRkQ2xhc3MoInBhY2thZ2UgYmFyOyBwdWJsaWMgY2xhc3MgVXRpbCB7IHB1YmxpYyBzdGF0aWMgdm9pZCBiYXIoKSB7fSB9IikKKyAgICBteUZpeHR1cmUuY29uZmlndXJlQnlUZXh0ICdhLmphdmEnLCAnY2xhc3MgRm9vIHt7IDxjYXJldD4gfX0nCisgICAgdHlwZSAnVXRpbC4nCisgICAgYXNzZXJ0IG15Rml4dHVyZS5sb29rdXBFbGVtZW50U3RyaW5ncyA9PSBbJ1V0aWwuYmFyJywgJ1V0aWwuZm9vJ10KKyAgICB0eXBlICdmb1xuJworICAgIG15Rml4dHVyZS5jaGVja1Jlc3VsdCAnJydpbXBvcnQgZm9vLlV0aWw7CisKK2NsYXNzIEZvbyB7eworICAgIFV0aWwuZm9vKCk7PGNhcmV0PiB9fScnJworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFBhY2thZ2VRdWFsaWZpZXIoKSB7CisgICAgbXlGaXh0dXJlLmFkZENsYXNzKCJwYWNrYWdlIGNvbS50b287IHB1YmxpYyBjbGFzcyBVdGlsIHt9IikKKyAgICBteUZpeHR1cmUuY29uZmlndXJlQnlUZXh0ICdhLmphdmEnLCAnY2xhc3MgRm9vIHsgdm9pZCBmb28oT2JqZWN0IGNvbW1hbmQpIHsgPGNhcmV0PiB9fScKKyAgICB0eXBlICdjb20udCcKKyAgICBhc3NlcnQgbXlGaXh0dXJlLmxvb2t1cEVsZW1lbnRTdHJpbmdzLmNvbnRhaW5zQWxsKFsndG9vJywgJ2NvbW1hbmQudG9TdHJpbmcnXSkKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RVbmZpbmlzaGVkU3RyaW5nKCkgeworICAgIG15Rml4dHVyZS5jb25maWd1cmVCeVRleHQgJ2EuamF2YScsICcnJworLy8gRGF0ZQorY2xhc3MgRm9vIHsKKyAgU3RyaW5nIHMgPSAiPGNhcmV0PgorICBTdHJpbmcgczIgPSBzOworfQorJycnCisgICAgdHlwZSAnRCcKKyAgICBhc3NlcnQgIWxvb2t1cAorICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFZhcmFyZ1BhcmVudGhlc2lzKCkgeworICAgIG15Rml4dHVyZS5jb25maWd1cmVCeVRleHQgJ2EuamF2YScsICcnJworY2xhc3MgRm9vIHsKKyAgdm9pZCBmb28oRmlsZS4uLiBmaWxlcykgeyB9CisgIHsgZm9vKG5ldyA8Y2FyZXQ+KSB9Cit9CisnJycKKyAgICB0eXBlICdGaWxlKCcKKyAgICBhc3NlcnQgbXlGaXh0dXJlLmZpbGUudGV4dC5jb250YWlucygnbmV3IEZpbGUoKScpCisgIH0KKworICBwdWJsaWMgdm9pZCAidGVzdCBpbmFjY2Vzc2libGUgY2xhc3MgaW4gYW5vdGhlciBwYWNrYWdlIHNob3VsZG4ndCBwcmV2ZW50IGNob29zaW5nIGJ5IHNwYWNlIigpIHsKKyAgICBteUZpeHR1cmUuYWRkQ2xhc3MoInBhY2thZ2UgZm9vOyBjbGFzcyBiIHt9IikKKyAgICBteUZpeHR1cmUuY29uZmlndXJlQnlUZXh0ICdhLmphdmEnLCAnY2xhc3MgRm9vIHt7IDxjYXJldD4gfX0nCisgICAgdHlwZSAnYicKKyAgICBhc3NlcnQgbG9va3VwPy5jdXJyZW50SXRlbT8ubG9va3VwU3RyaW5nID09ICdib29sZWFuJworICAgIHR5cGUgJyAnCisgICAgbXlGaXh0dXJlLmNoZWNrUmVzdWx0ICdjbGFzcyBGb28ge3sgYm9vbGVhbiA8Y2FyZXQ+IH19JworICB9CisKKyAgQE92ZXJyaWRlCisgIHByb3RlY3RlZCB2b2lkIHRlYXJEb3duKCkgeworICAgIENvZGVJbnNpZ2h0U2V0dGluZ3MuaW5zdGFuY2UuQ09NUExFVElPTl9DQVNFX1NFTlNJVElWRSA9IENvZGVJbnNpZ2h0U2V0dGluZ3MuRklSU1RfTEVUVEVSCisgICAgc3VwZXIudGVhckRvd24oKQorICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEJhY2tzcGFjZVNob3VsZFNob3dQcmV2aW91c1ZhcmlhbnRzKCkgeworICAgIENvZGVJbnNpZ2h0U2V0dGluZ3MuaW5zdGFuY2UuQ09NUExFVElPTl9DQVNFX1NFTlNJVElWRSA9IENvZGVJbnNpZ2h0U2V0dGluZ3MuTk9ORQorICAgIG15Rml4dHVyZS5hZGRDbGFzcygiY2xhc3MgT3V0ZXJYIHsgc3RhdGljIGNsYXNzIFRydWVMaW5lIHt9IH0iKQorICAgIG15Rml4dHVyZS5jb25maWd1cmVCeVRleHQgJ2EuamF2YScsICdjbGFzcyBGb297IHZvaWQgZm9vKGludCB0cnVleCkgeyByZXR1cm4gdHI8Y2FyZXQ+IH19JworICAgIHR5cGUgJ3VlJworICAgIGFzc2VydCBteUZpeHR1cmUubG9va3VwRWxlbWVudFN0cmluZ3MgPT0gWyd0cnVlJywgJ3RydWV4J10KKyAgICB0eXBlICdsJworICAgIGFzc2VydCBteUZpeHR1cmUubG9va3VwRWxlbWVudFN0cmluZ3MgPT0gWydUcnVlTGluZSddCisgICAgdHlwZSAnXGInCisgICAgYXNzZXJ0IG15Rml4dHVyZS5sb29rdXBFbGVtZW50U3RyaW5ncyA9PSBbJ3RydWUnLCAndHJ1ZXgnXQorICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEJhY2tzcGFjZVVudGlsRG90KCkgeworICAgIG15Rml4dHVyZS5jb25maWd1cmVCeVRleHQgJ2EuamF2YScsICdjbGFzcyBGb297IHZvaWQgZm9vKFN0cmluZyBzKSB7IHM8Y2FyZXQ+IH19JworICAgIHR5cGUgJy5zdWInCisgICAgYXNzZXJ0IG15Rml4dHVyZS5sb29rdXBFbGVtZW50U3RyaW5ncworICAgIHR5cGUgJ1xiXGJcYicKKyAgICBhc3NlcnQgbG9va3VwCisgICAgdHlwZSAnXGInCisgICAgYXNzZXJ0ICFsb29rdXAKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RSZXBsYWNlVHlwZWRQcmVmaXhQYXJ0KCkgeworICAgICgoU3RhdGlzdGljc01hbmFnZXJJbXBsKVN0YXRpc3RpY3NNYW5hZ2VyLmdldEluc3RhbmNlKCkpLmVuYWJsZVN0YXRpc3RpY3MoZ2V0VGVzdFJvb3REaXNwb3NhYmxlKCkpOworICAgIG15Rml4dHVyZS5jb25maWd1cmVCeVRleHQgJ2EuamF2YScsICdjbGFzcyBGb297IHsgPGNhcmV0PiB9fScKKyAgICBmb3IgKGkgaW4gMC4uU3RhdGlzdGljc01hbmFnZXIuT0JMSVZJT05fVEhSRVNIT0xEKSB7CisgICAgICB0eXBlICdTeXN0ZW0ub3V0LnByaW50bFxuXG4nCisgICAgfQorICAgIHR5cGUgJ1N5c3RlbS5vdXQucHInCisgICAgYXNzZXJ0IGxvb2t1cC5jdXJyZW50SXRlbS5sb29rdXBTdHJpbmcgPT0gJ3ByaW50bG4nCisgICAgdHlwZSAnXG4yJworICAgIGFzc2VydCBteUZpeHR1cmUuZmlsZS50ZXh0LmNvbnRhaW5zKCcucHJpbnRsbigpOzInKQorICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFF1aWNrQmFja3NwYWNlRW50ZXIoKSB7CisgICAgbXlGaXh0dXJlLmNvbmZpZ3VyZUJ5VGV4dCAnYS5qYXZhJywgJzxjYXJldD4nCisgICAgdHlwZSAnY2wnCisgICAgYXNzZXJ0IG15Rml4dHVyZS5sb29rdXBFbGVtZW50U3RyaW5ncyA9PSBbJ2NsYXNzJ10KKyAgICBteUZpeHR1cmUudHlwZSgnXGJcbicpCisgICAgbXlGaXh0dXJlLmNoZWNrUmVzdWx0KCdjbGFzcyA8Y2FyZXQ+JykKKyAgfQorCisgIHB1YmxpYyB2b2lkICJ0ZXN0IGNoZWNrIGZvciBjbGFzcyBleGlzdGluZyBnbG9iYWxseSB3aGVuIHR5cGluZyBjb21tYSIoKSB7CisgICAgbXlGaXh0dXJlLmFkZENsYXNzKCdwYWNrYWdlIHA7IHB1YmxpYyBjbGFzcyBYWVoge30nKQorICAgIG15Rml4dHVyZS5hZGRDbGFzcygncHVibGljIGNsYXNzIFhZWkFzcGVjdCB7fScpCisgICAgbXlGaXh0dXJlLmNvbmZpZ3VyZUJ5VGV4dCAnYS5qYXZhJywgJ2NsYXNzIEZvbyBleHRlbmRzIE1hcDxjYXJldD4nCisgICAgdHlwZSAnPFhZWiwgWFlaPicKKyAgICBteUZpeHR1cmUuY2hlY2tSZXN1bHQgJ2NsYXNzIEZvbyBleHRlbmRzIE1hcDxYWVosIFhZWj48Y2FyZXQ+JworICB9CisKKyAgdm9pZCBqb2luQ29tcGxldGlvbigpIHsKKyAgICBteVRlc3Rlci5qb2luQ29tcGxldGlvbigpCisgIH0KKworICBwcm90ZWN0ZWQgZGVmIGpvaW5Db21taXQoQ2xvc3VyZSBjMT17fSkgeworICAgIG15VGVzdGVyLmpvaW5Db21taXQoYzEpCisgIH0KKworICBwcm90ZWN0ZWQgdm9pZCBqb2luQXV0b3BvcHVwKCkgeworICAgIG15VGVzdGVyLmpvaW5BdXRvcG9wdXAoKQorICB9CisKKyAgcHJvdGVjdGVkIGRlZiBqb2luQWxhcm0oKSB7CisgICAgbXlUZXN0ZXIuam9pbkFsYXJtKCkKKyAgfQorCisgIHB1YmxpYyB2b2lkICJ0ZXN0IG5ldyBwcmltaXRpdmUgYXJyYXkgaW4gT2JqZWN0IHZhcmlhYmxlIigpIHsKKyAgICBDb2RlSW5zaWdodFNldHRpbmdzLmluc3RhbmNlLkNPTVBMRVRJT05fQ0FTRV9TRU5TSVRJVkUgPSBDb2RlSW5zaWdodFNldHRpbmdzLk5PTkUKKyAgICBteUZpeHR1cmUuY29uZmlndXJlQnlUZXh0ICdhLmphdmEnLCAnJycKK2NsYXNzIEZvbyB7CisgIHZvaWQgZm9vKCkgeworICAgIE9iamVjdCBvID0gbmV3IDxjYXJldD4KKyAgfQorfQorJycnCisgICAgdHlwZSAnaW50WycKKyAgICBteUZpeHR1cmUuY2hlY2tSZXN1bHQgJycnCitjbGFzcyBGb28geworICB2b2lkIGZvbygpIHsKKyAgICBPYmplY3QgbyA9IG5ldyBpbnRbPGNhcmV0Pl0KKyAgfQorfQorJycnCisgIH0KKworfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vSmF2YVJlZmxlY3Rpb25Db21wbGV0aW9uVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vSmF2YVJlZmxlY3Rpb25Db21wbGV0aW9uVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhhYTc4MGEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovY29kZUluc2lnaHQvY29tcGxldGlvbi9KYXZhUmVmbGVjdGlvbkNvbXBsZXRpb25UZXN0LmphdmEKQEAgLTAsMCArMSw3NiBAQAorLyoKKyAqIENvcHlyaWdodCAyMDAwLTIwMTIgSmV0QnJhaW5zIHMuci5vLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KK3BhY2thZ2UgY29tLmludGVsbGlqLmNvZGVJbnNpZ2h0LmNvbXBsZXRpb247CisKK2ltcG9ydCBjb20uaW50ZWxsaWouSmF2YVRlc3RVdGlsOworCisvKioKKyAqIEBhdXRob3IgS29uc3RhbnRpbiBCdWxlbmtvdgorICovCitwdWJsaWMgY2xhc3MgSmF2YVJlZmxlY3Rpb25Db21wbGV0aW9uVGVzdCBleHRlbmRzIExpZ2h0Rml4dHVyZUNvbXBsZXRpb25UZXN0Q2FzZSB7CisKKyAgQE92ZXJyaWRlCisgIHByb3RlY3RlZCBTdHJpbmcgZ2V0QmFzZVBhdGgoKSB7CisgICAgcmV0dXJuIEphdmFUZXN0VXRpbC5nZXRSZWxhdGl2ZUphdmFUZXN0RGF0YVBhdGgoKSArICIvY29kZUluc2lnaHQvY29tcGxldGlvbi9yZWZsZWN0aW9uLyI7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0RmllbGQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoMSwgIm51bSIsICJudW0yIik7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0RGVjbGFyZWRGaWVsZCgpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdCgxLCAibnVtIiwgIm51bTIiLCAibnVtMyIpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdERlY2xhcmVkTWV0aG9kKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KDEsICJtZXRob2QiLCAibWV0aG9kMiIsICJtZXRob2QzIik7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0RGVjbGFyZWRNZXRob2QyKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KDIsICJtZXRob2QiLCAibWV0aG9kMiIsICJtZXRob2QzIik7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0TWV0aG9kKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KDEsICJtZXRob2QiLCAibWV0aG9kMiIpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEZvck5hbWVEZWNsYXJlZE1ldGhvZCgpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdCgxLCAibWV0aG9kIiwgIm1ldGhvZDIiLCAibWV0aG9kMyIpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEZvck5hbWVNZXRob2QoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoMSwgIm1ldGhvZCIsICJtZXRob2QyIik7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0Rm9yTmFtZUZpZWxkKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KDEsICJudW0iLCAibnVtMiIpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEZvck5hbWVEZWNsYXJlZEZpZWxkKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KDIsICJudW0iLCAibnVtMiIsICJudW0zIik7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0R2VuZXJpY3MoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoMCwgImZvbyIpOworICB9CisKKyAgcHJpdmF0ZSB2b2lkIGRvVGVzdChpbnQgaW5kZXgsIFN0cmluZy4uLiBleHBlY3RlZCkgeworICAgIGNvbmZpZ3VyZUJ5RmlsZShnZXRUZXN0TmFtZShmYWxzZSkgKyAiLmphdmEiKTsKKyAgICBhc3NlcnRTdHJpbmdJdGVtcyhleHBlY3RlZCk7CisgICAgc2VsZWN0SXRlbShnZXRMb29rdXAoKS5nZXRJdGVtcygpLmdldChpbmRleCkpOworICAgIG15Rml4dHVyZS5jaGVja1Jlc3VsdEJ5RmlsZShnZXRUZXN0TmFtZShmYWxzZSkgKyAiX2FmdGVyLmphdmEiKTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vSmF2YWRvY0NvbXBsZXRpb25UZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovY29kZUluc2lnaHQvY29tcGxldGlvbi9KYXZhZG9jQ29tcGxldGlvblRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZjE2MzEwCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vSmF2YWRvY0NvbXBsZXRpb25UZXN0LmphdmEKQEAgLTAsMCArMSwyMzIgQEAKK3BhY2thZ2UgY29tLmludGVsbGlqLmNvZGVJbnNpZ2h0LmNvbXBsZXRpb247CisKK2ltcG9ydCBjb20uaW50ZWxsaWouSmF2YVRlc3RVdGlsOworaW1wb3J0IGNvbS5pbnRlbGxpai5jb2RlSW5zaWdodC5Db2RlSW5zaWdodFNldHRpbmdzOworaW1wb3J0IGNvbS5pbnRlbGxpai5jb2RlSW5zaWdodC5sb29rdXAuTG9va3VwRWxlbWVudDsKK2ltcG9ydCBjb20uaW50ZWxsaWouY29kZUluc3BlY3Rpb24uamF2YURvYy5KYXZhRG9jTG9jYWxJbnNwZWN0aW9uOworaW1wb3J0IGNvbS5pbnRlbGxpai5sYW5nLlN0ZExhbmd1YWdlczsKK2ltcG9ydCBjb20uaW50ZWxsaWoucHNpLlBzaUVsZW1lbnQ7CitpbXBvcnQgY29tLmludGVsbGlqLnBzaS5Qc2lSZWZlcmVuY2U7CitpbXBvcnQgY29tLmludGVsbGlqLnBzaS5Qc2lSZWZlcmVuY2VCYXNlOworaW1wb3J0IGNvbS5pbnRlbGxpai5wc2kuUHNpUmVmZXJlbmNlUHJvdmlkZXI7CitpbXBvcnQgY29tLmludGVsbGlqLnBzaS5jb2RlU3R5bGUuQ29kZVN0eWxlU2V0dGluZ3NNYW5hZ2VyOworaW1wb3J0IGNvbS5pbnRlbGxpai5wc2kuaW1wbC5zb3VyY2UucmVzb2x2ZS5yZWZlcmVuY2UuUHNpUmVmZXJlbmNlUmVnaXN0cmFySW1wbDsKK2ltcG9ydCBjb20uaW50ZWxsaWoucHNpLmltcGwuc291cmNlLnJlc29sdmUucmVmZXJlbmNlLlJlZmVyZW5jZVByb3ZpZGVyc1JlZ2lzdHJ5OworaW1wb3J0IGNvbS5pbnRlbGxpai5wc2kuamF2YWRvYy5Qc2lEb2NUYWc7CitpbXBvcnQgY29tLmludGVsbGlqLnV0aWwuT2JqZWN0VXRpbHM7CitpbXBvcnQgY29tLmludGVsbGlqLnV0aWwuUHJvY2Vzc2luZ0NvbnRleHQ7CitpbXBvcnQgb3JnLmpldGJyYWlucy5hbm5vdGF0aW9ucy5Ob3ROdWxsOworCitpbXBvcnQgamF2YS51dGlsLkFycmF5czsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworCisvKioKKyAqIEBhdXRob3IgbWlrZQorICovCitwdWJsaWMgY2xhc3MgSmF2YWRvY0NvbXBsZXRpb25UZXN0IGV4dGVuZHMgTGlnaHRGaXh0dXJlQ29tcGxldGlvblRlc3RDYXNlIHsKKworICBAT3ZlcnJpZGUKKyAgcHJvdGVjdGVkIFN0cmluZyBnZXRCYXNlUGF0aCgpIHsKKyAgICByZXR1cm4gSmF2YVRlc3RVdGlsLmdldFJlbGF0aXZlSmF2YVRlc3REYXRhUGF0aCgpICsgIi9jb2RlSW5zaWdodC9jb21wbGV0aW9uL2phdmFkb2MvIjsKKyAgfQorCisgIEBPdmVycmlkZQorICBwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24geworICAgIHN1cGVyLnNldFVwKCk7CisgICAgbXlGaXh0dXJlLmVuYWJsZUluc3BlY3Rpb25zKG5ldyBKYXZhRG9jTG9jYWxJbnNwZWN0aW9uKCkpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdE5hbWVzSW5DbGFzcygpIHRocm93cyBFeGNlcHRpb24geworICAgIGNvbmZpZ3VyZUJ5RmlsZSgiQ2xhc3NUYWdOYW1lLmphdmEiKTsKKyAgICBhc3NlcnRTdHJpbmdJdGVtcygiYXV0aG9yIiwgImRlcHJlY2F0ZWQiLCAicGFyYW0iLCAic2VlIiwgInNlcmlhbCIsICJzaW5jZSIsICJ2ZXJzaW9uIik7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0TmFtZXNJbkZpZWxkKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgY29uZmlndXJlQnlGaWxlKCJGaWVsZFRhZ05hbWUuamF2YSIpOworICAgIGFzc2VydFN0cmluZ0l0ZW1zKCJkZXByZWNhdGVkIiwgInNlZSIsICJzZXJpYWwiLCAic2VyaWFsRmllbGQiLCAic2luY2UiKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3ROYW1lc0luTWV0aG9kMCgpIHRocm93cyBFeGNlcHRpb24geworICAgIGNvbmZpZ3VyZUJ5RmlsZSgiTWV0aG9kVGFnTmFtZTAuamF2YSIpOworICAgIGFzc2VydFN0cmluZ0l0ZW1zKCJkZXByZWNhdGVkIiwgImV4Y2VwdGlvbiIsICJwYXJhbSIsICJyZXR1cm4iLCAic2VlIiwgInNlcmlhbERhdGEiLCAic2luY2UiLCAidGhyb3dzIik7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0TmFtZXNJbk1ldGhvZDEoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBjb25maWd1cmVCeUZpbGUoIk1ldGhvZFRhZ05hbWUxLmphdmEiKTsKKyAgICBhc3NlcnRTdHJpbmdJdGVtcygic2VlIiwgInNlcmlhbERhdGEiLCAic2luY2UiLCAiY2xhc3MiLCAidGhyb3dzIik7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0UGFyYW1WYWx1ZUNvbXBsZXRpb24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBjb25maWd1cmVCeUZpbGUoIlBhcmFtVmFsdWUwLmphdmEiKTsKKyAgICBhc3NlcnRTdHJpbmdJdGVtcygiYSIsICJiIiwgImMiKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RQYXJhbVZhbHVlV2l0aFByZWZpeENvbXBsZXRpb24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBjb25maWd1cmVCeUZpbGUoIlBhcmFtVmFsdWUxLmphdmEiKTsKKyAgICBhc3NlcnRTdHJpbmdJdGVtcygiYTEiLCAiYTIiLCAiYTMiKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3REZXNjcmliZWRQYXJhbWV0ZXJzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgY29uZmlndXJlQnlGaWxlKCJQYXJhbVZhbHVlMi5qYXZhIik7CisgICAgYXNzZXJ0U3RyaW5nSXRlbXMoImEyIiwgImEzIik7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0U2VlMCgpIHRocm93cyBFeGNlcHRpb24geworICAgIGNvbmZpZ3VyZUJ5RmlsZSgiU2VlMC5qYXZhIik7CisgICAgYXNzZXJ0U3RyaW5nSXRlbXMoImZvbyIsICJjbG9uZSIsICJlcXVhbHMiLCAiZ2V0Q2xhc3MiLCAiaGFzaENvZGUiLCAibm90aWZ5IiwgIm5vdGlmeUFsbCIsICJPYmplY3QiLCAidG9TdHJpbmciLCAid2FpdCIsICJ3YWl0IiwgIndhaXQiLCAiZmluYWxpemUiLCAicmVnaXN0ZXJOYXRpdmVzIik7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0U2VlMSgpIHRocm93cyBFeGNlcHRpb24geworICAgIGNvbmZpZ3VyZUJ5RmlsZSgiU2VlMS5qYXZhIik7CisgICAgYXNzZXJ0U3RyaW5nSXRlbXMoIm5vdGlmeSIsICJub3RpZnlBbGwiKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RTZWUyKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgY29uZmlndXJlQnlGaWxlKCJTZWUyLmphdmEiKTsKKyAgICBhc3NlcnRTdHJpbmdJdGVtcygibm90aWZ5IiwgIm5vdGlmeUFsbCIpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFNlZTMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBjb25maWd1cmVCeUZpbGUoIlNlZTMuamF2YSIpOworCisgICAgYXNzZXJ0VHJ1ZShnZXRMb29rdXBFbGVtZW50U3RyaW5ncygpLmNvbnRhaW5zQWxsKEFycmF5cy5hc0xpc3QoImZvbyIsICJteUZpZWxkIikpKTsKKyAgfQorCisgIEBOb3ROdWxsCisgIHByaXZhdGUgTGlzdDxTdHJpbmc+IGdldExvb2t1cEVsZW1lbnRTdHJpbmdzKCkgeworICAgIHJldHVybiBPYmplY3RVdGlscy5hc3NlcnROb3ROdWxsKG15Rml4dHVyZS5nZXRMb29rdXBFbGVtZW50U3RyaW5ncygpKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RTZWU0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgY29uZmlndXJlQnlGaWxlKCJTZWU0LmphdmEiKTsKKworICAgIGFzc2VydFRydWUoZ2V0TG9va3VwRWxlbWVudFN0cmluZ3MoKS5jb250YWluc0FsbChBcnJheXMuYXNMaXN0KCJBIiwgIkIiLCAiQyIpKSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0U2VlNSgpIHRocm93cyBFeGNlcHRpb24geworICAgIGNvbmZpZ3VyZUJ5RmlsZSgiU2VlNS5qYXZhIik7CisKKyAgICBhc3NlcnRUcnVlKGdldExvb2t1cEVsZW1lbnRTdHJpbmdzKCkuY29udGFpbnNBbGwoQXJyYXlzLmFzTGlzdCgiZm9vIiwgIm15TmFtZSIpKSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0SURFQURFVjEwNjIwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgY29uZmlndXJlQnlGaWxlKCJJREVBREVWMTA2MjAuamF2YSIpOworCisgICAgY2hlY2tSZXN1bHRCeUZpbGUoIklERUFERVYxMDYyMC1hZnRlci5qYXZhIik7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0RXhjZXB0aW9uMCgpIHRocm93cyBFeGNlcHRpb24geworICAgIGNvbmZpZ3VyZUJ5RmlsZSgiRXhjZXB0aW9uMC5qYXZhIik7CisgICAgYXNzZXJ0U3RyaW5nSXRlbXMoImRlcHJlY2F0ZWQiLCAiZXhjZXB0aW9uIiwgInBhcmFtIiwgInNlZSIsICJzZXJpYWxEYXRhIiwgInNpbmNlIiwgInRocm93cyIpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEV4Y2VwdGlvbjEoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBjb25maWd1cmVCeUZpbGUoIkV4Y2VwdGlvbjEuamF2YSIpOworICAgIGFzc2VydFRydWUobXlJdGVtcy5sZW5ndGggPiAxOCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0RXhjZXB0aW9uMigpIHRocm93cyBFeGNlcHRpb24geworICAgIG15Rml4dHVyZS5jb25maWd1cmVCeUZpbGUoIkV4Y2VwdGlvbjIuamF2YSIpOworICAgIG15Rml4dHVyZS5jb21wbGV0ZShDb21wbGV0aW9uVHlwZS5TTUFSVCk7CisgICAgYXNzZXJ0U3RyaW5nSXRlbXMoIklsbGVnYWxTdGF0ZUV4Y2VwdGlvbiIsICJJT0V4Y2VwdGlvbiIpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdElubGluZUxvb2t1cCgpIHRocm93cyBFeGNlcHRpb24geworICAgIGNvbmZpZ3VyZUJ5RmlsZSgiSW5saW5lVGFnTmFtZS5qYXZhIik7CisgICAgYXNzZXJ0U3RyaW5nSXRlbXMoImNvZGUiLCAiZG9jUm9vdCIsICJpbmhlcml0RG9jIiwgImxpbmsiLCAibGlua3BsYWluIiwgImxpdGVyYWwiLCAidmFsdWUiKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RGaW5pc2hXaXRoU2hhcnAoKSB0aHJvd3MgVGhyb3dhYmxlIHsKKyAgICBib29sZWFuIG9sZCA9IENvZGVJbnNpZ2h0U2V0dGluZ3MuZ2V0SW5zdGFuY2UoKS5BVVRPQ09NUExFVEVfT05fQ09ERV9DT01QTEVUSU9OOworICAgIENvZGVJbnNpZ2h0U2V0dGluZ3MuZ2V0SW5zdGFuY2UoKS5BVVRPQ09NUExFVEVfT05fQ09ERV9DT01QTEVUSU9OID0gZmFsc2U7CisgICAgdHJ5IHsKKyAgICAgIGNoZWNrRmluaXNoV2l0aFNoYXJwKCk7CisgICAgfQorICAgIGZpbmFsbHkgeworICAgICAgQ29kZUluc2lnaHRTZXR0aW5ncy5nZXRJbnN0YW5jZSgpLkFVVE9DT01QTEVURV9PTl9DT0RFX0NPTVBMRVRJT04gPSBvbGQ7CisgICAgfQorICB9CisKKyAgcHJpdmF0ZSB2b2lkIGNoZWNrRmluaXNoV2l0aFNoYXJwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgbXlGaXh0dXJlLmNvbmZpZ3VyZUJ5RmlsZSgiRmluaXNoV2l0aFNoYXJwLmphdmEiKTsKKyAgICBteUZpeHR1cmUuY29tcGxldGVCYXNpYygpOworICAgIHR5cGUoJyMnKTsKKyAgICBjaGVja1Jlc3VsdEJ5RmlsZSgiRmluaXNoV2l0aFNoYXJwX2FmdGVyLmphdmEiKTsKKyAgICBmaW5hbCBMaXN0PExvb2t1cEVsZW1lbnQ+IGl0ZW1zID0gZ2V0TG9va3VwKCkuZ2V0SXRlbXMoKTsKKyAgICBhc3NlcnRFcXVhbHMoImJhciIsIGl0ZW1zLmdldCgwKS5nZXRMb29rdXBTdHJpbmcoKSk7CisgICAgYXNzZXJ0RXF1YWxzKCJmb28iLCBpdGVtcy5nZXQoMSkuZ2V0TG9va3VwU3RyaW5nKCkpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFNob3J0ZW5DbGFzc05hbWUoKSB0aHJvd3MgVGhyb3dhYmxlIHsKKyAgICBDb2RlU3R5bGVTZXR0aW5nc01hbmFnZXIuZ2V0U2V0dGluZ3MoZ2V0UHJvamVjdCgpKS5VU0VfRlFfQ0xBU1NfTkFNRVNfSU5fSkFWQURPQyA9IGZhbHNlOworICAgIHRyeSB7CisgICAgICBkb1Rlc3QoKTsKKyAgICB9CisgICAgZmluYWxseSB7CisgICAgICBDb2RlU3R5bGVTZXR0aW5nc01hbmFnZXIuZ2V0U2V0dGluZ3MoZ2V0UHJvamVjdCgpKS5VU0VfRlFfQ0xBU1NfTkFNRVNfSU5fSkFWQURPQyA9IHRydWU7CisgICAgfQorICB9CisKKyAgcHVibGljIHZvaWQgdGVzdE1ldGhvZEJlZm9yZVNoYXJwKCkgdGhyb3dzIFRocm93YWJsZSB7CisgICAgZG9UZXN0KCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0RmllbGRSZWZlcmVuY2VJbklubmVyQ2xhc3NKYXZhZG9jKCkgdGhyb3dzIFRocm93YWJsZSB7CisgICAgZG9UZXN0KCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0U2hvcnRlbkNsYXNzUmVmZXJlbmNlKCkgdGhyb3dzIFRocm93YWJsZSB7IGRvVGVzdCgpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RRdWFsaWZpZWRDbGFzc1JlZmVyZW5jZSgpIHRocm93cyBUaHJvd2FibGUgeworICAgIGNvbmZpZ3VyZUJ5RmlsZShnZXRUZXN0TmFtZShmYWxzZSkgKyAiLmphdmEiKTsKKyAgICBteUZpeHR1cmUuY29tcGxldGUoQ29tcGxldGlvblR5cGUuQkFTSUMsIDIpOworICAgIGNoZWNrUmVzdWx0QnlGaWxlKGdldFRlc3ROYW1lKGZhbHNlKSArICJfYWZ0ZXIuamF2YSIpOworICB9CisgIHB1YmxpYyB2b2lkIHRlc3RUaHJvd3NOb25JbXBvcnRlZCgpIHRocm93cyBUaHJvd2FibGUgeworICAgIGNvbmZpZ3VyZUJ5RmlsZShnZXRUZXN0TmFtZShmYWxzZSkgKyAiLmphdmEiKTsKKyAgICBteUZpeHR1cmUuY29tcGxldGUoQ29tcGxldGlvblR5cGUuQkFTSUMsIDIpOworICAgIGNoZWNrUmVzdWx0QnlGaWxlKGdldFRlc3ROYW1lKGZhbHNlKSArICJfYWZ0ZXIuamF2YSIpOworICB9CisKKyAgcHJpdmF0ZSB2b2lkIGRvVGVzdCgpIHRocm93cyBFeGNlcHRpb24geworICAgIGNvbmZpZ3VyZUJ5RmlsZShnZXRUZXN0TmFtZShmYWxzZSkgKyAiLmphdmEiKTsKKyAgICBjaGVja1Jlc3VsdEJ5RmlsZShnZXRUZXN0TmFtZShmYWxzZSkgKyAiX2FmdGVyLmphdmEiKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RJbmxpbmVQYWNrYWdlUmVmZXJlbmNlQ29tcGxldGlvbigpIHRocm93cyBFeGNlcHRpb24geworICAgIGNvbmZpZ3VyZUJ5RmlsZSgiSW5saW5lUmVmZXJlbmNlLmphdmEiKTsKKyAgICBhc3NlcnRUcnVlKGdldExvb2t1cEVsZW1lbnRTdHJpbmdzKCkuY29udGFpbnNBbGwoQXJyYXlzLmFzTGlzdCgiaW8iLCAibGFuZyIsICJ1dGlsIikpKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RDdXN0b21SZWZlcmVuY2VQcm92aWRlcigpIHRocm93cyBFeGNlcHRpb24geworICAgIFBzaVJlZmVyZW5jZVJlZ2lzdHJhckltcGwgcmVnaXN0cmFyID0KKyAgICAgIChQc2lSZWZlcmVuY2VSZWdpc3RyYXJJbXBsKSBSZWZlcmVuY2VQcm92aWRlcnNSZWdpc3RyeS5nZXRJbnN0YW5jZSgpLmdldFJlZ2lzdHJhcihTdGRMYW5ndWFnZXMuSkFWQSk7CisgICAgUHNpUmVmZXJlbmNlUHJvdmlkZXIgcHJvdmlkZXIgPSBuZXcgUHNpUmVmZXJlbmNlUHJvdmlkZXIoKSB7CisgICAgICBAT3ZlcnJpZGUKKyAgICAgIEBOb3ROdWxsCisgICAgICBwdWJsaWMgUHNpUmVmZXJlbmNlW10gZ2V0UmVmZXJlbmNlc0J5RWxlbWVudChATm90TnVsbCBmaW5hbCBQc2lFbGVtZW50IGVsZW1lbnQsIEBOb3ROdWxsIGZpbmFsIFByb2Nlc3NpbmdDb250ZXh0IGNvbnRleHQpIHsKKyAgICAgICAgcmV0dXJuIG5ldyBQc2lSZWZlcmVuY2VbXXtuZXcgUHNpUmVmZXJlbmNlQmFzZTxQc2lFbGVtZW50PihlbGVtZW50KSB7CisKKyAgICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgICBwdWJsaWMgUHNpRWxlbWVudCByZXNvbHZlKCkgeworICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnQ7CisgICAgICAgICAgfQorCisgICAgICAgICAgQE92ZXJyaWRlCisgICAgICAgICAgQE5vdE51bGwKKyAgICAgICAgICBwdWJsaWMgT2JqZWN0W10gZ2V0VmFyaWFudHMoKSB7CisgICAgICAgICAgICByZXR1cm4gbmV3IE9iamVjdFtdeyIxIiwgIjIiLCAiMyJ9OworICAgICAgICAgIH0KKyAgICAgICAgfX07CisgICAgICB9CisgICAgfTsKKyAgICB0cnkgeworICAgICAgcmVnaXN0cmFyLnJlZ2lzdGVyUmVmZXJlbmNlUHJvdmlkZXIoUHNpRG9jVGFnLmNsYXNzLCBwcm92aWRlcik7CisgICAgICBjb25maWd1cmVCeUZpbGUoIlJlZmVyZW5jZVByb3ZpZGVyLmphdmEiKTsKKyAgICAgIGFzc2VydFN0cmluZ0l0ZW1zKCIxIiwgIjIiLCAiMyIpOworICAgIH0KKyAgICBmaW5hbGx5IHsKKyAgICAgIHJlZ2lzdHJhci51bnJlZ2lzdGVyUmVmZXJlbmNlUHJvdmlkZXIoUHNpRG9jVGFnLmNsYXNzLCBwcm92aWRlcik7CisgICAgfQorICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovY29kZUluc2lnaHQvY29tcGxldGlvbi9LZXl3b3JkQ29tcGxldGlvblRlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9jb2RlSW5zaWdodC9jb21wbGV0aW9uL0tleXdvcmRDb21wbGV0aW9uVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM1MGE0YjUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovY29kZUluc2lnaHQvY29tcGxldGlvbi9LZXl3b3JkQ29tcGxldGlvblRlc3QuamF2YQpAQCAtMCwwICsxLDEzOSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDAwLTIwMTIgSmV0QnJhaW5zIHMuci5vLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KK3BhY2thZ2UgY29tLmludGVsbGlqLmNvZGVJbnNpZ2h0LmNvbXBsZXRpb247CisKK2ltcG9ydCBjb20uaW50ZWxsaWouSmF2YVRlc3RVdGlsOworaW1wb3J0IGNvbS5pbnRlbGxpai5wc2kuY29kZVN0eWxlLkNvZGVTdHlsZVNldHRpbmdzTWFuYWdlcjsKK2ltcG9ydCBvcmcuamV0YnJhaW5zLmFubm90YXRpb25zLk5vbk5sczsKK2ltcG9ydCBvcmcuamV0YnJhaW5zLmFubm90YXRpb25zLk5vdE51bGw7CisKKy8qKgorICogQGF1dGhvciBpaworICogQHNpbmNlIDIwLjAyLjIwMDMKKyAqLworcHVibGljIGNsYXNzIEtleXdvcmRDb21wbGV0aW9uVGVzdCBleHRlbmRzIExpZ2h0Q29tcGxldGlvblRlc3RDYXNlIHsKKyAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEJBU0VfUEFUSCA9ICIvY29kZUluc2lnaHQvY29tcGxldGlvbi9rZXl3b3JkcyI7CisKKyAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nW10gRklMRV9TQ09QRV9LRVlXT1JEUyA9IHsKKyAgICAicGFja2FnZSIsICJwdWJsaWMiLCAicHJpdmF0ZSIsICJpbXBvcnQiLCAiZmluYWwiLCAiY2xhc3MiLCAiaW50ZXJmYWNlIiwgImFic3RyYWN0IiwgImVudW0iLCAiZGVmYXVsdCIsIG51bGx9OworICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmdbXSBDTEFTU19TQ09QRV9LRVlXT1JEUyA9IHsKKyAgICAicHVibGljIiwgInByaXZhdGUiLCAicHJvdGVjdGVkIiwgImltcG9ydCIsICJmaW5hbCIsICJjbGFzcyIsICJpbnRlcmZhY2UiLCAiYWJzdHJhY3QiLCAiZW51bSIsICJkZWZhdWx0IiwgbnVsbH07CisgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZ1tdIENMQVNTX1NDT1BFX0tFWVdPUkRTXzIgPSB7CisgICAgInBhY2thZ2UiLCAicHVibGljIiwgInByaXZhdGUiLCAicHJvdGVjdGVkIiwgInRyYW5zaWVudCIsICJ2b2xhdGlsZSIsICJzdGF0aWMiLCAiaW1wb3J0IiwgImZpbmFsIiwgImNsYXNzIiwgImludGVyZmFjZSIsICJhYnN0cmFjdCIsICJkZWZhdWx0In07CisgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZ1tdIElOVEVSRkFDRV9TQ09QRV9LRVlXT1JEUyA9IHsKKyAgICAicGFja2FnZSIsICJwdWJsaWMiLCAicHJpdmF0ZSIsICJwcm90ZWN0ZWQiLCAidHJhbnNpZW50IiwgInZvbGF0aWxlIiwgInN0YXRpYyIsICJpbXBvcnQiLCAiZmluYWwiLCAiY2xhc3MiLCAiaW50ZXJmYWNlIiwgImFic3RyYWN0IiwgImRlZmF1bHQifTsKKworICBATm90TnVsbAorICBAT3ZlcnJpZGUKKyAgcHJvdGVjdGVkIFN0cmluZyBnZXRUZXN0RGF0YVBhdGgoKSB7CisgICAgcmV0dXJuIEphdmFUZXN0VXRpbC5nZXRKYXZhVGVzdERhdGFQYXRoKCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0RmlsZVNjb3BlMSgpIHRocm93cyBFeGNlcHRpb24geyBkb1Rlc3QoOCwgRklMRV9TQ09QRV9LRVlXT1JEUyk7IH0KKyAgcHVibGljIHZvaWQgdGVzdEZpbGVTY29wZTIoKSB0aHJvd3MgRXhjZXB0aW9uIHsgZG9UZXN0KDcsIENMQVNTX1NDT1BFX0tFWVdPUkRTKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0Q2xhc3NTY29wZTEoKSB0aHJvd3MgRXhjZXB0aW9uIHsgZG9UZXN0KDUsIENMQVNTX1NDT1BFX0tFWVdPUkRTKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0Q2xhc3NTY29wZTIoKSB0aHJvd3MgRXhjZXB0aW9uIHsgZG9UZXN0KDQsIENMQVNTX1NDT1BFX0tFWVdPUkRTKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0Q2xhc3NTY29wZTMoKSB0aHJvd3MgRXhjZXB0aW9uIHsgZG9UZXN0KDAsIENMQVNTX1NDT1BFX0tFWVdPUkRTKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0Q2xhc3NTY29wZTQoKSB0aHJvd3MgRXhjZXB0aW9uIHsgZG9UZXN0KDEwLCBDTEFTU19TQ09QRV9LRVlXT1JEU18yKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0SW50ZXJmYWNlU2NvcGUoKSB0aHJvd3MgRXhjZXB0aW9uIHsgZG9UZXN0KDgsIElOVEVSRkFDRV9TQ09QRV9LRVlXT1JEUyk7IH0KKyAgcHVibGljIHZvaWQgdGVzdEFmdGVyQW5ub3RhdGlvbnMoKSB0aHJvd3MgRXhjZXB0aW9uIHsgZG9UZXN0KDYsICJwdWJsaWMiLCAiZmluYWwiLCAiY2xhc3MiLCAiaW50ZXJmYWNlIiwgImFic3RyYWN0IiwgImVudW0iLCBudWxsKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0RXh0ZW5kczEoKSB0aHJvd3MgRXhjZXB0aW9uIHsgZG9UZXN0KDIsICJleHRlbmRzIiwgImltcGxlbWVudHMiLCBudWxsKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0RXh0ZW5kczIoKSB0aHJvd3MgRXhjZXB0aW9uIHsgZG9UZXN0KDEsICJleHRlbmRzIiwgImltcGxlbWVudHMiLCAiQUFBIiwgIkJCQiIsICJpbnN0YW5jZW9mIik7IH0KKyAgcHVibGljIHZvaWQgdGVzdEV4dGVuZHMzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7IGRvVGVzdCgyLCAiZXh0ZW5kcyIsICJpbXBsZW1lbnRzIiwgIkFBQSIsICJCQkIiLCAiQ0NDIiwgImluc3RhbmNlb2YiKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0RXh0ZW5kczQoKSB0aHJvd3MgRXhjZXB0aW9uIHsgZG9UZXN0KDIsICJleHRlbmRzIiwgImltcGxlbWVudHMiLCAiQUFBIiwgIkJCQiIsICJDQ0MiLCAiaW5zdGFuY2VvZiIpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RFeHRlbmRzNSgpIHRocm93cyBFeGNlcHRpb24geyBkb1Rlc3QoMSwgImV4dGVuZHMiLCAiaW1wbGVtZW50cyIsICJBQUEiLCAiQkJCIiwgIkNDQyIsICJpbnN0YW5jZW9mIik7IH0KKyAgcHVibGljIHZvaWQgdGVzdEV4dGVuZHM2KCkgdGhyb3dzIEV4Y2VwdGlvbiB7IGRvVGVzdCgxLCAiZXh0ZW5kcyIsICJpbXBsZW1lbnRzIiwgIkFBQSIsICJCQkIiLCAiQ0NDIiwgImluc3RhbmNlb2YiKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0RXh0ZW5kczcoKSB0aHJvd3MgRXhjZXB0aW9uIHsgZG9UZXN0KGZhbHNlKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0RXh0ZW5kczgoKSB0aHJvd3MgRXhjZXB0aW9uIHsgZG9UZXN0KGZhbHNlKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0RXh0ZW5kczkoKSB0aHJvd3MgRXhjZXB0aW9uIHsgZG9UZXN0KGZhbHNlKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0RXh0ZW5kczEwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7IGRvVGVzdChmYWxzZSk7IH0KKyAgcHVibGljIHZvaWQgdGVzdEV4dGVuZHMxMSgpIHRocm93cyBFeGNlcHRpb24geyBkb1Rlc3QoZmFsc2UpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RFeHRlbmRzMTIoKSB0aHJvd3MgRXhjZXB0aW9uIHsgZG9UZXN0KGZhbHNlKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0U3luY2hyb25pemVkMSgpIHRocm93cyBFeGNlcHRpb24geyBkb1Rlc3QoZmFsc2UpOyB9CisKKyAgcHVibGljIHZvaWQgdGVzdFN5bmNocm9uaXplZDIoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBDb2RlU3R5bGVTZXR0aW5nc01hbmFnZXIuZ2V0U2V0dGluZ3MoZ2V0UHJvamVjdCgpKS5TUEFDRV9CRUZPUkVfU1lOQ0hST05JWkVEX1BBUkVOVEhFU0VTID0gZmFsc2U7CisgICAgZG9UZXN0KGZhbHNlKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RNZXRob2RTY29wZTEoKSB0aHJvd3MgRXhjZXB0aW9uIHsgZG9UZXN0KDEsICJ0aHJvd3MiKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0TWV0aG9kU2NvcGUyKCkgdGhyb3dzIEV4Y2VwdGlvbiB7IGRvVGVzdCgxLCAiZmluYWwiLCAicHVibGljIiwgInN0YXRpYyIsICJ2b2xhdGlsZSIsICJhYnN0cmFjdCIpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RNZXRob2RTY29wZTMoKSB0aHJvd3MgRXhjZXB0aW9uIHsgZG9UZXN0KDEsICJmaW5hbCIsICJwdWJsaWMiLCAic3RhdGljIiwgInZvbGF0aWxlIiwgImFic3RyYWN0IiwgInRocm93cyIsICJpbnN0YW5jZW9mIik7IH0KKyAgcHVibGljIHZvaWQgdGVzdE1ldGhvZFNjb3BlNCgpIHRocm93cyBFeGNlcHRpb24geyBkb1Rlc3QoNiwgImZpbmFsIiwgInRyeSIsICJmb3IiLCAid2hpbGUiLCAicmV0dXJuIiwgInRocm93Iik7IH0KKyAgcHVibGljIHZvaWQgdGVzdE1ldGhvZFNjb3BlNSgpIHRocm93cyBFeGNlcHRpb24geyBkb1Rlc3QodHJ1ZSk7IH0KKyAgcHVibGljIHZvaWQgdGVzdEV4dHJhQnJhY2tldEFmdGVyRmluYWxseTEoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBjb25maWd1cmVCeUZpbGUoQkFTRV9QQVRIICsgIi8iICsgZ2V0VGVzdE5hbWUodHJ1ZSkgKyAiLmphdmEiKTsKKyAgICBzZWxlY3RJdGVtKG15SXRlbXNbMV0pOworICAgIGNoZWNrUmVzdWx0QnlGaWxlKEJBU0VfUEFUSCArICIvIiArIGdldFRlc3ROYW1lKHRydWUpICsgIl9hZnRlci5qYXZhIik7CisgIH0KKyAgcHVibGljIHZvaWQgdGVzdEV4dHJhQnJhY2tldEFmdGVyRmluYWxseTIoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBjb25maWd1cmVCeUZpbGUoQkFTRV9QQVRIICsgIi8iICsgZ2V0VGVzdE5hbWUodHJ1ZSkgKyAiLmphdmEiKTsKKyAgICBzZWxlY3RJdGVtKG15SXRlbXNbMV0pOworICAgIGNoZWNrUmVzdWx0QnlGaWxlKEJBU0VfUEFUSCArICIvIiArIGdldFRlc3ROYW1lKHRydWUpICsgIl9hZnRlci5qYXZhIik7CisgIH0KKyAgcHVibGljIHZvaWQgdGVzdEV4dGVuZHNJbkNhc3RUeXBlUGFyYW1ldGVycygpIHRocm93cyBFeGNlcHRpb24geyBkb1Rlc3QoZmFsc2UpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RFeHRlbmRzSW5DYXN0VHlwZVBhcmFtZXRlcnMyKCkgdGhyb3dzIEV4Y2VwdGlvbiB7IGRvVGVzdCgyLCAiZXh0ZW5kcyIsICJzdXBlciIpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RFeHRlbmRzV2l0aFJpZ2h0Q29udGV4dEluQ2xhc3NUeXBlUGFyYW1ldGVycygpIHRocm93cyBFeGNlcHRpb24geyBkb1Rlc3QoZmFsc2UpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RUcnVlSW5WYXJpYWJsZURlY2xhcmF0aW9uKCkgdGhyb3dzIEV4Y2VwdGlvbiB7IGRvVGVzdCh0cnVlKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0TnVsbEluSWYoKSB0aHJvd3MgRXhjZXB0aW9uIHsgZG9UZXN0KHRydWUpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3ROdWxsSW5SZXR1cm4oKSB0aHJvd3MgRXhjZXB0aW9uIHsgZG9UZXN0KHRydWUpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RFeHRlbmRzSW5NZXRob2RQYXJhbWV0ZXJzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7IGRvVGVzdChmYWxzZSk7IH0KKyAgcHVibGljIHZvaWQgdGVzdEluc3RhbmNlT2YxKCkgdGhyb3dzIEV4Y2VwdGlvbiB7IGRvVGVzdChmYWxzZSk7IH0KKyAgcHVibGljIHZvaWQgdGVzdEluc3RhbmNlT2YyKCkgdGhyb3dzIEV4Y2VwdGlvbiB7IGRvVGVzdChmYWxzZSk7IH0KKyAgcHVibGljIHZvaWQgdGVzdEluc3RhbmNlT2YzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7IGRvVGVzdChmYWxzZSk7IH0KKyAgcHVibGljIHZvaWQgdGVzdENhdGNoRmluYWxseSgpIHRocm93cyBFeGNlcHRpb24geyBkb1Rlc3QoMiwgImNhdGNoIiwgImZpbmFsbHkiKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0U3VwZXIxKCkgdGhyb3dzIEV4Y2VwdGlvbiB7IGRvVGVzdCgxLCAic3VwZXIiKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0U3VwZXIyKCkgdGhyb3dzIEV4Y2VwdGlvbiB7IGRvVGVzdCgwLCAic3VwZXIiKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0Q29udGludWUoKSB0aHJvd3MgRXhjZXB0aW9uIHsgZG9UZXN0KGZhbHNlKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0VGhyb3dzT25TZXBhcmF0ZUxpbmUoKSB0aHJvd3MgRXhjZXB0aW9uIHsgZG9UZXN0KHRydWUpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3REZWZhdWx0SW5Bbm5vKCkgdGhyb3dzIEV4Y2VwdGlvbiB7IGRvVGVzdChmYWxzZSk7IH0KKyAgcHVibGljIHZvaWQgdGVzdE51bGxJbk1ldGhvZENhbGwoKSB0aHJvd3MgRXhjZXB0aW9uIHsgZG9UZXN0KHRydWUpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3ROdWxsSW5NZXRob2RDYWxsMigpIHRocm93cyBFeGNlcHRpb24geyBkb1Rlc3QoZmFsc2UpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3ROZXdJbk1ldGhvZFJlZnMoKSB0aHJvd3MgRXhjZXB0aW9uIHsgZG9UZXN0KDEsICJuZXciKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0U3BhY2VBZnRlckluc3RhbmNlb2YoKSB0aHJvd3MgRXhjZXB0aW9uIHsgZG9UZXN0KGZhbHNlKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0QWJzdHJhY3RJbkludGVyZmFjZSgpIHRocm93cyBFeGNlcHRpb24geyBkb1Rlc3QoMSwgImFic3RyYWN0Iik7IH0KKyAgcHVibGljIHZvaWQgdGVzdENoYXJJbkFubm90YXRlZFBhcmFtZXRlcigpIHRocm93cyBFeGNlcHRpb24geyBkb1Rlc3QoMSwgImNoYXIiKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0UmV0dXJuSW5UZXJuYXJ5KCkgdGhyb3dzIEV4Y2VwdGlvbiB7IGRvVGVzdCgxLCAicmV0dXJuIik7IH0KKyAgcHVibGljIHZvaWQgdGVzdEZpbmFsQWZ0ZXJQYXJhbWV0ZXJBbm5vKCkgdGhyb3dzIEV4Y2VwdGlvbiB7IGRvVGVzdCgyLCAiZmluYWwiLCAiZmxvYXQiLCAiY2xhc3MiKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0RmluYWxBZnRlclBhcmFtZXRlckFubm8yKCkgdGhyb3dzIEV4Y2VwdGlvbiB7IGRvVGVzdCgyLCAiZmluYWwiLCAiZmxvYXQiLCAiY2xhc3MiKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0RmluYWxJblRyeVdpdGhSZXNvdXJjZXMoKSB0aHJvd3MgRXhjZXB0aW9uIHsgZG9UZXN0KDEsICJmaW5hbCIsICJmbG9hdCIsICJjbGFzcyIpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RDbGFzc0luTWV0aG9kKCkgdGhyb3dzIEV4Y2VwdGlvbiB7IGRvVGVzdCgyLCAiY2xhc3MiLCAiY2hhciIpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RJbnRJbkNsYXNzQXJyYXkoKSB0aHJvd3MgVGhyb3dhYmxlIHsgZG9UZXN0KDIsICJpbnQiLCAiY2hhciIsICJmaW5hbCIpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RJbnRJbkNsYXNzQXJyYXkyKCkgdGhyb3dzIFRocm93YWJsZSB7IGRvVGVzdCgyLCAiaW50IiwgImNoYXIiLCAiZmluYWwiKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0SW50SW5DbGFzc0FycmF5MygpIHRocm93cyBUaHJvd2FibGUgeyBkb1Rlc3QoMiwgImludCIsICJjaGFyIiwgImZpbmFsIik7IH0KKyAgcHVibGljIHZvaWQgdGVzdEludEluR2VuZXJpY3MoKSB0aHJvd3MgVGhyb3dhYmxlIHsgZG9UZXN0KDIsICJpbnQiLCAiY2hhciIsICJmaW5hbCIpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RJbnRJbkdlbmVyaWNzMigpIHRocm93cyBUaHJvd2FibGUgeyBkb1Rlc3QoMiwgImludCIsICJjaGFyIiwgImZpbmFsIik7IH0KKworICBwdWJsaWMgdm9pZCB0ZXN0VHJ5SW5FeHByZXNzaW9uKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgY29uZmlndXJlQnlGaWxlKEJBU0VfUEFUSCArICIvIiArIGdldFRlc3ROYW1lKHRydWUpICsgIi5qYXZhIik7CisgICAgYXNzZXJ0RXF1YWxzKCJ0b1N0cmluZyIsIG15SXRlbXNbMF0uZ2V0TG9va3VwU3RyaW5nKCkpOworICAgIGFzc2VydEVxdWFscygidGhpcyIsIG15SXRlbXNbMV0uZ2V0TG9va3VwU3RyaW5nKCkpOworICB9CisKKyAgcHJpdmF0ZSB2b2lkIGRvVGVzdChib29sZWFuIHNlbGVjdCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgY29uZmlndXJlQnlGaWxlKEJBU0VfUEFUSCArICIvIiArIGdldFRlc3ROYW1lKHRydWUpICsgIi5qYXZhIik7CisgICAgaWYgKHNlbGVjdCkgeworICAgICAgc2VsZWN0SXRlbShteUl0ZW1zWzBdKTsKKyAgICB9CisgICAgY2hlY2tSZXN1bHRCeUZpbGUoQkFTRV9QQVRIICsgIi8iICsgZ2V0VGVzdE5hbWUodHJ1ZSkgKyAiX2FmdGVyLmphdmEiKTsKKyAgfQorCisgIC8vIHRvZG86IGNoZWNrIGluY2x1ZGVkL2V4Y2x1ZGVkIHZhcmlhbnRzIHNlcGFyYXRlbHkKKyAgcHJvdGVjdGVkIHZvaWQgZG9UZXN0KGludCBmaW5hbENvdW50LCBATm9uTmxzIFN0cmluZy4uLiB2YWx1ZXMpIHsKKyAgICBjb25maWd1cmVCeUZpbGUoQkFTRV9QQVRIICsgIi8iICsgZ2V0VGVzdE5hbWUodHJ1ZSkgKyAiLmphdmEiKTsKKyAgICB0ZXN0QnlDb3VudChmaW5hbENvdW50LCB2YWx1ZXMpOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vTGlnaHRGaXh0dXJlQ29tcGxldGlvblRlc3RDYXNlLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovY29kZUluc2lnaHQvY29tcGxldGlvbi9MaWdodEZpeHR1cmVDb21wbGV0aW9uVGVzdENhc2UuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xN2YwMzA4Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vTGlnaHRGaXh0dXJlQ29tcGxldGlvblRlc3RDYXNlLmphdmEKQEAgLTAsMCArMSw4NCBAQAorcGFja2FnZSBjb20uaW50ZWxsaWouY29kZUluc2lnaHQuY29tcGxldGlvbjsKKworaW1wb3J0IGNvbS5pbnRlbGxpai5jb2RlSW5zaWdodC5sb29rdXAuTG9va3VwOworaW1wb3J0IGNvbS5pbnRlbGxpai5jb2RlSW5zaWdodC5sb29rdXAuTG9va3VwRWxlbWVudDsKK2ltcG9ydCBjb20uaW50ZWxsaWouY29kZUluc2lnaHQubG9va3VwLkxvb2t1cEV2ZW50OworaW1wb3J0IGNvbS5pbnRlbGxpai5jb2RlSW5zaWdodC5sb29rdXAuTG9va3VwTWFuYWdlcjsKK2ltcG9ydCBjb20uaW50ZWxsaWouY29kZUluc2lnaHQubG9va3VwLmltcGwuTG9va3VwSW1wbDsKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS5jb21tYW5kLldyaXRlQ29tbWFuZEFjdGlvbjsKK2ltcG9ydCBjb20uaW50ZWxsaWoudGVzdEZyYW1ld29yay5MaWdodFByb2plY3REZXNjcmlwdG9yOworaW1wb3J0IGNvbS5pbnRlbGxpai50ZXN0RnJhbWV3b3JrLmZpeHR1cmVzLkxpZ2h0Q29kZUluc2lnaHRGaXh0dXJlVGVzdENhc2U7CitpbXBvcnQgb3JnLmpldGJyYWlucy5hbm5vdGF0aW9ucy5Ob3ROdWxsOworCitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKKy8qKgorICogQGF1dGhvciBwZXRlcgorICovCitwdWJsaWMgYWJzdHJhY3QgY2xhc3MgTGlnaHRGaXh0dXJlQ29tcGxldGlvblRlc3RDYXNlIGV4dGVuZHMgTGlnaHRDb2RlSW5zaWdodEZpeHR1cmVUZXN0Q2FzZSB7CisgIHByb3RlY3RlZCBMb29rdXBFbGVtZW50W10gbXlJdGVtczsKKworICBATm90TnVsbAorICBAT3ZlcnJpZGUKKyAgcHJvdGVjdGVkIExpZ2h0UHJvamVjdERlc2NyaXB0b3IgZ2V0UHJvamVjdERlc2NyaXB0b3IoKSB7CisgICAgcmV0dXJuIEpBVkFfMV82OworICB9CisKKyAgQE92ZXJyaWRlCisgIHByb3RlY3RlZCB2b2lkIHRlYXJEb3duKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgbXlJdGVtcyA9IG51bGw7CisgICAgc3VwZXIudGVhckRvd24oKTsKKyAgfQorCisgIHByb3RlY3RlZCB2b2lkIGNvbmZpZ3VyZUJ5RmlsZShTdHJpbmcgcGF0aCkgeworICAgIG15Rml4dHVyZS5jb25maWd1cmVGcm9tRXhpc3RpbmdWaXJ0dWFsRmlsZShteUZpeHR1cmUuY29weUZpbGVUb1Byb2plY3QocGF0aCwgY29tLmludGVsbGlqLm9wZW5hcGkudXRpbC50ZXh0LlN0cmluZ1V0aWwuZ2V0U2hvcnROYW1lKHBhdGgsICcvJykpKTsKKyAgICBjb21wbGV0ZSgpOworICB9CisKKyAgcHJvdGVjdGVkIHZvaWQgY29tcGxldGUoKSB7CisgICAgbXlJdGVtcyA9IG15Rml4dHVyZS5jb21wbGV0ZUJhc2ljKCk7CisgIH0KKworICBwcm90ZWN0ZWQgdm9pZCBzZWxlY3RJdGVtKExvb2t1cEVsZW1lbnQgaXRlbSkgeworICAgIHNlbGVjdEl0ZW0oaXRlbSwgKGNoYXIpMCk7CisgIH0KKworICBwcm90ZWN0ZWQgdm9pZCBjaGVja1Jlc3VsdEJ5RmlsZShTdHJpbmcgcGF0aCkgeworICAgIG15Rml4dHVyZS5jaGVja1Jlc3VsdEJ5RmlsZShwYXRoKTsKKyAgfQorCisgIHByb3RlY3RlZCB2b2lkIHNlbGVjdEl0ZW0oTG9va3VwRWxlbWVudCBpdGVtLCBmaW5hbCBjaGFyIGNvbXBsZXRpb25DaGFyKSB7CisgICAgZmluYWwgTG9va3VwSW1wbCBsb29rdXAgPSBnZXRMb29rdXAoKTsKKyAgICBsb29rdXAuc2V0Q3VycmVudEl0ZW0oaXRlbSk7CisgICAgaWYgKExvb2t1cEV2ZW50LmlzU3BlY2lhbENvbXBsZXRpb25DaGFyKGNvbXBsZXRpb25DaGFyKSkgeworICAgICAgbmV3IFdyaXRlQ29tbWFuZEFjdGlvbi5TaW1wbGUoZ2V0UHJvamVjdCgpKSB7CisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwcm90ZWN0ZWQgdm9pZCBydW4oKSB0aHJvd3MgVGhyb3dhYmxlIHsKKyAgICAgICAgICBsb29rdXAuZmluaXNoTG9va3VwKGNvbXBsZXRpb25DaGFyKTsKKyAgICAgICAgfQorICAgICAgfS5leGVjdXRlKCkudGhyb3dFeGNlcHRpb24oKTsKKyAgICB9IGVsc2UgeworICAgICAgdHlwZShjb21wbGV0aW9uQ2hhcik7CisgICAgfQorICB9CisKKyAgcHJvdGVjdGVkIExvb2t1cEltcGwgZ2V0TG9va3VwKCkgeworICAgIHJldHVybiAoTG9va3VwSW1wbClMb29rdXBNYW5hZ2VyLmdldEluc3RhbmNlKGdldFByb2plY3QoKSkuZ2V0QWN0aXZlTG9va3VwKCk7CisgIH0KKworICBwcm90ZWN0ZWQgdm9pZCBhc3NlcnRGaXJzdFN0cmluZ0l0ZW1zKFN0cmluZy4uLiBpdGVtcykgeworICAgIExpc3Q8U3RyaW5nPiBzdHJpbmdzID0gbXlGaXh0dXJlLmdldExvb2t1cEVsZW1lbnRTdHJpbmdzKCk7CisgICAgYXNzZXJ0Tm90TnVsbChzdHJpbmdzKTsKKyAgICBhc3NlcnRPcmRlcmVkRXF1YWxzKHN0cmluZ3Muc3ViTGlzdCgwLCBNYXRoLm1pbihpdGVtcy5sZW5ndGgsIHN0cmluZ3Muc2l6ZSgpKSksIGl0ZW1zKTsKKyAgfQorICBwcm90ZWN0ZWQgdm9pZCBhc3NlcnRTdHJpbmdJdGVtcyhTdHJpbmcuLi4gaXRlbXMpIHsKKyAgICBhc3NlcnRPcmRlcmVkRXF1YWxzKG15Rml4dHVyZS5nZXRMb29rdXBFbGVtZW50U3RyaW5ncygpLCBpdGVtcyk7CisgIH0KKworICBwcm90ZWN0ZWQgdm9pZCB0eXBlKFN0cmluZyBzKSB7CisgICAgbXlGaXh0dXJlLnR5cGUocyk7CisgIH0KKyAgcHJvdGVjdGVkIHZvaWQgdHlwZShjaGFyIGMpIHsKKyAgICBteUZpeHR1cmUudHlwZShjKTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vTm9ybWFsMTdDb21wbGV0aW9uVGVzdC5ncm9vdnkgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovY29kZUluc2lnaHQvY29tcGxldGlvbi9Ob3JtYWwxN0NvbXBsZXRpb25UZXN0Lmdyb292eQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MGIwOWE0Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vTm9ybWFsMTdDb21wbGV0aW9uVGVzdC5ncm9vdnkKQEAgLTAsMCArMSw1NyBAQAorLyoKKyAqIENvcHlyaWdodCAyMDAwLTIwMTEgSmV0QnJhaW5zIHMuci5vLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KK3BhY2thZ2UgY29tLmludGVsbGlqLmNvZGVJbnNpZ2h0LmNvbXBsZXRpb24KKworaW1wb3J0IGNvbS5pbnRlbGxpai5KYXZhVGVzdFV0aWwKK2ltcG9ydCBjb20uaW50ZWxsaWoudGVzdEZyYW1ld29yay5MaWdodFByb2plY3REZXNjcmlwdG9yCitpbXBvcnQgb3JnLmpldGJyYWlucy5hbm5vdGF0aW9ucy5Ob3ROdWxsCisKK3B1YmxpYyBjbGFzcyBOb3JtYWwxN0NvbXBsZXRpb25UZXN0IGV4dGVuZHMgTGlnaHRGaXh0dXJlQ29tcGxldGlvblRlc3RDYXNlIHsKKyAgQE92ZXJyaWRlCisgIHByb3RlY3RlZCBTdHJpbmcgZ2V0QmFzZVBhdGgoKSB7CisgICAgcmV0dXJuIEphdmFUZXN0VXRpbC5nZXRSZWxhdGl2ZUphdmFUZXN0RGF0YVBhdGgoKSArICIvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvIjsKKyAgfQorCisgIEBOb3ROdWxsCisgIEBPdmVycmlkZQorICBwcm90ZWN0ZWQgTGlnaHRQcm9qZWN0RGVzY3JpcHRvciBnZXRQcm9qZWN0RGVzY3JpcHRvcigpIHsKKyAgICByZXR1cm4gSkFWQV9MQVRFU1QKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RPbmx5RXhjZXB0aW9uc0luTXVsdGlDYXRjaDEoKSB7IGRvVGVzdCgpIH0KKyAgcHVibGljIHZvaWQgdGVzdE9ubHlFeGNlcHRpb25zSW5NdWx0aUNhdGNoMigpIHsgZG9UZXN0KCkgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RPbmx5UmVzb3VyY2VzSW5SZXNvdXJjZUxpc3QxKCkgeyBkb1Rlc3QoKSB9CisgIHB1YmxpYyB2b2lkIHRlc3RPbmx5UmVzb3VyY2VzSW5SZXNvdXJjZUxpc3QyKCkgeyBkb1Rlc3QoKSB9CisgIHB1YmxpYyB2b2lkIHRlc3RPbmx5UmVzb3VyY2VzSW5SZXNvdXJjZUxpc3QzKCkgeyBkb1Rlc3QoKSB9CisgIHB1YmxpYyB2b2lkIHRlc3RPbmx5UmVzb3VyY2VzSW5SZXNvdXJjZUxpc3Q0KCkgeyBkb1Rlc3QoKSB9CisKKyAgcHVibGljIHZvaWQgdGVzdE1ldGhvZFJlZmVyZW5jZU5vU3RhdGljKCkgeyBkb1Rlc3QoKSB9CisgIHB1YmxpYyB2b2lkIHRlc3RNZXRob2RSZWZlcmVuY2VDYWxsQ29udGV4dCgpIHsgZG9UZXN0KCkgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RSZXNvdXJjZVBhcmVudEluUmVzb3VyY2VMaXN0KCkgeworICAgIGNvbmZpZ3VyZUJ5RmlsZShnZXRUZXN0TmFtZShmYWxzZSkgKyAiLmphdmEiKQorICAgIGFzc2VydCAnTXlPdXRlclJlc291cmNlJyA9PSBteUZpeHR1cmUubG9va3VwRWxlbWVudFN0cmluZ3NbMF0KKyAgICBhc3NlcnQgJ015Q2xhc3MnIGluIG15Rml4dHVyZS5sb29rdXBFbGVtZW50U3RyaW5ncworICAgIG15Rml4dHVyZS50eXBlKCdDXG4nKQorICAgIGNoZWNrUmVzdWx0QnlGaWxlKGdldFRlc3ROYW1lKGZhbHNlKSArICJfYWZ0ZXIuamF2YSIpIH0KKworICBwcml2YXRlIHZvaWQgZG9UZXN0KCkgeworICAgIGNvbmZpZ3VyZUJ5RmlsZShnZXRUZXN0TmFtZShmYWxzZSkgKyAiLmphdmEiKQorICAgIG15Rml4dHVyZS50eXBlKCdcbicpCisgICAgY2hlY2tSZXN1bHRCeUZpbGUoZ2V0VGVzdE5hbWUoZmFsc2UpICsgIl9hZnRlci5qYXZhIikKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vTm9ybWFsQ29tcGxldGlvbk9yZGVyaW5nVGVzdC5ncm9vdnkgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovY29kZUluc2lnaHQvY29tcGxldGlvbi9Ob3JtYWxDb21wbGV0aW9uT3JkZXJpbmdUZXN0Lmdyb292eQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MTQ2NjQ1Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vTm9ybWFsQ29tcGxldGlvbk9yZGVyaW5nVGVzdC5ncm9vdnkKQEAgLTAsMCArMSw1NDcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDAtMjAwNyBKZXRCcmFpbnMgcy5yLm8uIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKi8KKworcGFja2FnZSBjb20uaW50ZWxsaWouY29kZUluc2lnaHQuY29tcGxldGlvbjsKKworCitpbXBvcnQgY29tLmludGVsbGlqLkphdmFUZXN0VXRpbAoraW1wb3J0IGNvbS5pbnRlbGxpai5jb2RlSW5zaWdodC5Db2RlSW5zaWdodFNldHRpbmdzCitpbXBvcnQgY29tLmludGVsbGlqLmNvZGVJbnNpZ2h0Lmxvb2t1cC5Mb29rdXBFbGVtZW50CitpbXBvcnQgY29tLmludGVsbGlqLmNvZGVJbnNpZ2h0Lmxvb2t1cC5Mb29rdXBFbGVtZW50UHJlc2VudGF0aW9uCitpbXBvcnQgY29tLmludGVsbGlqLmNvZGVJbnNpZ2h0Lmxvb2t1cC5pbXBsLkxvb2t1cEltcGwKK2ltcG9ydCBjb20uaW50ZWxsaWouaWRlLnVpLlVJU2V0dGluZ3MKK2ltcG9ydCBjb20uaW50ZWxsaWoucHNpLlBzaUNsYXNzCitpbXBvcnQgY29tLmludGVsbGlqLnBzaS5Qc2lGaWVsZAoraW1wb3J0IGNvbS5pbnRlbGxpai5wc2kuUHNpTWV0aG9kCitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkuZmlsZUVkaXRvci5GaWxlRG9jdW1lbnRNYW5hZ2VyCitpbXBvcnQgY29tLmludGVsbGlqLnBzaS5zdGF0aXN0aWNzLlN0YXRpc3RpY3NNYW5hZ2VyCisKK3B1YmxpYyBjbGFzcyBOb3JtYWxDb21wbGV0aW9uT3JkZXJpbmdUZXN0IGV4dGVuZHMgQ29tcGxldGlvblNvcnRpbmdUZXN0Q2FzZSB7CisgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBCQVNFX1BBVEggPSAiL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vbm9ybWFsU29ydGluZyI7CisKKyAgcHVibGljIE5vcm1hbENvbXBsZXRpb25PcmRlcmluZ1Rlc3QoKSB7CisgICAgc3VwZXIoQ29tcGxldGlvblR5cGUuQkFTSUMpOworICB9CisKKyAgcHJvdGVjdGVkIFN0cmluZyBnZXRCYXNlUGF0aCgpIHsKKyAgICByZXR1cm4gSmF2YVRlc3RVdGlsLmdldFJlbGF0aXZlSmF2YVRlc3REYXRhUGF0aCgpICsgQkFTRV9QQVRIOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdERvbnRQcmVmZXJSZWN1cnNpdmVNZXRob2QoKSB0aHJvd3MgVGhyb3dhYmxlIHsKKyAgICBjaGVja1ByZWZlcnJlZEl0ZW1zKDAsICJyZWdpc3RyYXIiLCAicmVnaXN0ZXIiKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3REb250UHJlZmVyUmVjdXJzaXZlTWV0aG9kMigpIHRocm93cyBUaHJvd2FibGUgeworICAgIGNoZWNrUHJlZmVycmVkSXRlbXMoMCwgInJldHVybiIsICJyZWdpc3RlciIpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFByZWZlckFubm90YXRpb25NZXRob2RzKCkgdGhyb3dzIFRocm93YWJsZSB7CisgICAgY2hlY2tQcmVmZXJyZWRJdGVtcygwLCAibmFtZSIsICJ2YWx1ZSIsICJGb28iLCAiQW5ubyIpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFByZWZlclN1cGVyTWV0aG9kcygpIHRocm93cyBUaHJvd2FibGUgeworICAgIGNoZWNrUHJlZmVycmVkSXRlbXMoMCwgImZvbyIsICJiYXIiKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RTdWJzdHJpbmdWc1N1YlNlcXVlbmNlKCkgdGhyb3dzIFRocm93YWJsZSB7CisgICAgY2hlY2tQcmVmZXJyZWRJdGVtcygwLCAic3Vic3RyaW5nIiwgInN1YnN0cmluZyIsICJzdWJTZXF1ZW5jZSIpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFJldHVybkYoKSB0aHJvd3MgVGhyb3dhYmxlIHsKKyAgICBjaGVja1ByZWZlcnJlZEl0ZW1zKDAsICJmYWxzZSIsICJmbG9hdCIsICJmaW5hbGl6ZSIpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFByZWZlckRlZmF1bHRUeXBlVG9FeHBlY3RlZCgpIHRocm93cyBUaHJvd2FibGUgeworICAgIGNoZWNrUHJlZmVycmVkSXRlbXMoMCwgImdldE5hbWUiLCAiZ2V0TmFtZUlkZW50aWZpZXIiKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RTaG9ydGVyUHJlZml4ZXNHb0ZpcnN0KCkgdGhyb3dzIFRocm93YWJsZSB7CisgICAgZmluYWwgTG9va3VwSW1wbCBsb29rdXAgPSBpbnZva2VDb21wbGV0aW9uKGdldFRlc3ROYW1lKGZhbHNlKSArICIuaHRtbCIpOworICAgIGFzc2VydFByZWZlcnJlZEl0ZW1zKDAsICJwIiwgInBhcmFtIiwgInByZSIpOworICAgIGluY1VzZUNvdW50KGxvb2t1cCwgMik7CisgICAgYXNzZXJ0UHJlZmVycmVkSXRlbXMoMCwgInAiLCAicHJlIiwgInBhcmFtIik7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0VXBwZXJjYXNlTWF0dGVyczIoKSB0aHJvd3MgVGhyb3dhYmxlIHsKKyAgICBmaW5hbCBpbnQgb2xkID0gQ29kZUluc2lnaHRTZXR0aW5ncy5nZXRJbnN0YW5jZSgpLkNPTVBMRVRJT05fQ0FTRV9TRU5TSVRJVkU7CisgICAgdHJ5IHsKKyAgICAgIENvZGVJbnNpZ2h0U2V0dGluZ3MuZ2V0SW5zdGFuY2UoKS5DT01QTEVUSU9OX0NBU0VfU0VOU0lUSVZFID0gQ29kZUluc2lnaHRTZXR0aW5ncy5BTEw7CisgICAgICBjaGVja1ByZWZlcnJlZEl0ZW1zKDAsICJjbGFzc0xvYWRlciIsICJjbGFzc0xvYWRlcjIiKTsKKyAgICB9CisgICAgZmluYWxseSB7CisgICAgICBDb2RlSW5zaWdodFNldHRpbmdzLmdldEluc3RhbmNlKCkuQ09NUExFVElPTl9DQVNFX1NFTlNJVElWRSA9IG9sZDsKKyAgICB9CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0U2hvcnRlclNob3VsZEJlUHJlc2VsZWN0ZWQoKSB0aHJvd3MgVGhyb3dhYmxlIHsKKyAgICBjaGVja1ByZWZlcnJlZEl0ZW1zKDAsICJmb28iLCAiZm9vTG9uZ0J1dE9mRGVmYXVsdFR5cGUiKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RHZW5lcmljTWV0aG9kc1dpdGhCb3VuZFBhcmFtZXRlcnNBcmVTdGlsbEJldHRlclRoYW5DbGFzc0xpdGVyYWwoKSB0aHJvd3MgVGhyb3dhYmxlIHsKKyAgICBjaGVja1ByZWZlcnJlZEl0ZW1zKDAsICJnZXRTZXJ2aWNlIiwgImdldFNlcnZpY2UiLCAiY2xhc3MiKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RDbGFzc1N0YXRpY01lbWJlcnNJblZvaWRDb250ZXh0KCkgdGhyb3dzIFRocm93YWJsZSB7CisgICAgY2hlY2tQcmVmZXJyZWRJdGVtcygwLCAiYm9vbGVhbk1ldGhvZCIsICJ2b2lkTWV0aG9kIiwgIkFOX09CSkVDVCIsICJCT09MRUFOIiwgImNsYXNzIik7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0SkNvbXBvbmVudEluc3RhbmNlTWVtYmVycygpIHRocm93cyBUaHJvd2FibGUgeworICAgIGNoZWNrUHJlZmVycmVkSXRlbXMoMCwgImdldEFjY2Vzc2libGVDb250ZXh0IiwgImdldFVJIik7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0Q2xhc3NTdGF0aWNNZW1iZXJzSW5Cb29sZWFuQ29udGV4dCgpIHRocm93cyBUaHJvd2FibGUgeworICAgIGZpbmFsIFN0cmluZyBwYXRoID0gZ2V0VGVzdE5hbWUoZmFsc2UpICsgIi5qYXZhIjsKKyAgICBteUZpeHR1cmUuY29uZmlndXJlQnlGaWxlKHBhdGgpOworICAgIG15Rml4dHVyZS5jb21wbGV0ZShDb21wbGV0aW9uVHlwZS5CQVNJQywgMik7CisgICAgYXNzZXJ0UHJlZmVycmVkSXRlbXMoMCwgIkJPT0xFQU4iLCAiYm9vbGVhbk1ldGhvZCIsICJBTl9PQkpFQ1QiLCAidm9pZE1ldGhvZCIsICJyZWdpc3Rlck5hdGl2ZXMiKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3REaXNwcmVmZXJEZWNsYXJlZCgpIHRocm93cyBUaHJvd2FibGUgeworICAgIGNoZWNrUHJlZmVycmVkSXRlbXMoMCwgImFhYmJiIiwgImFhYSIpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdERpc3ByZWZlckRlY2xhcmVkT2ZFeHBlY3RlZFR5cGUoKSB0aHJvd3MgVGhyb3dhYmxlIHsKKyAgICBjaGVja1ByZWZlcnJlZEl0ZW1zKDAsICJhYWJiYiIsICJhYWEiKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3REaXNwcmVmZXJJbXBscygpIHRocm93cyBUaHJvd2FibGUgeworICAgIG15Rml4dHVyZS5hZGRDbGFzcygicGFja2FnZSBmb287IHB1YmxpYyBjbGFzcyBYeHgge30iKTsKKyAgICBjb25maWd1cmVTZWNvbmRDb21wbGV0aW9uKCk7CisgICAgYXNzZXJ0UHJlZmVycmVkSXRlbXMoMCwgIlh4eCIsICJYeHhFeCIsICJYeHhJbXBsIiwgIlh4eSIpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFByZWZlck93bklubmVyQ2xhc3NlcygpIHRocm93cyBUaHJvd2FibGUgeworICAgIGNoZWNrUHJlZmVycmVkSXRlbXMoMCwgIll5eVh4eCIsICJZeXlaenoiKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RQcmVmZXJUb3BMZXZlbENsYXNzZXMoKSB0aHJvd3MgVGhyb3dhYmxlIHsKKyAgICBjb25maWd1cmVTZWNvbmRDb21wbGV0aW9uKCk7CisgICAgYXNzZXJ0UHJlZmVycmVkSXRlbXMoMCwgIlh4eFl5eSIsICJYeHpZeXkiKTsKKyAgfQorCisgIHByaXZhdGUgdm9pZCBjb25maWd1cmVTZWNvbmRDb21wbGV0aW9uKCkgeworICAgIGNvbmZpZ3VyZU5vQ29tcGxldGlvbihnZXRUZXN0TmFtZShmYWxzZSkgKyAiLmphdmEiKTsKKyAgICBteUZpeHR1cmUuY29tcGxldGUoQ29tcGxldGlvblR5cGUuQkFTSUMsIDIpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEltcGxzQWZ0ZXJOZXcoKSB7CisgICAgbXlGaXh0dXJlLmFkZENsYXNzKCJwYWNrYWdlIGZvbzsgcHVibGljIGludGVyZmFjZSBYeHgge30iKTsKKyAgICBjb25maWd1cmVTZWNvbmRDb21wbGV0aW9uKCk7CisgICAgYXNzZXJ0UHJlZmVycmVkSXRlbXMoMCwgIlh4eEltcGwiLCAiWHh4Iik7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0UHJlZmVyTGVzc0h1bXBzKCkgdGhyb3dzIFRocm93YWJsZSB7CisgICAgbXlGaXh0dXJlLmFkZENsYXNzKCJwYWNrYWdlIGZvbzsgcHVibGljIGludGVyZmFjZSBYYVlhIHt9Iik7CisgICAgbXlGaXh0dXJlLmFkZENsYXNzKCJwYWNrYWdlIGZvbzsgcHVibGljIGludGVyZmFjZSBYeVlhIHt9Iik7CisgICAgY29uZmlndXJlU2Vjb25kQ29tcGxldGlvbigpOworICAgIGFzc2VydFByZWZlcnJlZEl0ZW1zKDAsICJYYVlhIiwgIlhhWWFFeCIsICJYYVlhSW1wbCIsICJYeVlhIiwgIlh5WWFYYSIpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFByZWZlckxlc3NQYXJhbWV0ZXJzKCkgdGhyb3dzIFRocm93YWJsZSB7CisgICAgY2hlY2tQcmVmZXJyZWRJdGVtcygwLCAiZm9vIiwgImZvbyIsICJmb28iLCAiZm94Iik7CisgICAgZmluYWwgTGlzdDxMb29rdXBFbGVtZW50PiBpdGVtcyA9IGdldExvb2t1cCgpLmdldEl0ZW1zKCk7CisgICAgYXNzZXJ0RXF1YWxzKDAsICgoUHNpTWV0aG9kKWl0ZW1zLmdldCgwKS5nZXRPYmplY3QoKSkuZ2V0UGFyYW1ldGVyTGlzdCgpLmdldFBhcmFtZXRlcnNDb3VudCgpKTsKKyAgICBhc3NlcnRFcXVhbHMoMSwgKChQc2lNZXRob2QpaXRlbXMuZ2V0KDEpLmdldE9iamVjdCgpKS5nZXRQYXJhbWV0ZXJMaXN0KCkuZ2V0UGFyYW1ldGVyc0NvdW50KCkpOworICAgIGFzc2VydEVxdWFscygyLCAoKFBzaU1ldGhvZClpdGVtcy5nZXQoMikuZ2V0T2JqZWN0KCkpLmdldFBhcmFtZXRlckxpc3QoKS5nZXRQYXJhbWV0ZXJzQ291bnQoKSk7CisgIH0KKyAgcHVibGljIHZvaWQgdGVzdFN0YXRzRm9yQ2xhc3NOYW1lSW5FeHByZXNzaW9uKCkgdGhyb3dzIFRocm93YWJsZSB7CisgICAgbXlGaXh0dXJlLmFkZENsYXNzKCJwYWNrYWdlIGZvbzsgcHVibGljIGludGVyZmFjZSBGb29CYXIge30iKTsKKyAgICBteUZpeHR1cmUuYWRkQ2xhc3MoInBhY2thZ2UgZm9vOyBwdWJsaWMgaW50ZXJmYWNlIEZvb0JlZSB7fSIpOworCisgICAgaW52b2tlQ29tcGxldGlvbihnZXRUZXN0TmFtZShmYWxzZSkgKyAiLmphdmEiKTsKKyAgICBjb25maWd1cmVTZWNvbmRDb21wbGV0aW9uKCk7CisgICAgaW5jVXNlQ291bnQoZ2V0TG9va3VwKCksIDEpOworICAgIGFzc2VydFByZWZlcnJlZEl0ZW1zKDAsICJGb29CZWUiLCAiRm9vQmFyIik7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0U2FtZVN0YXRzRm9yRGlmZmVyZW50UXVhbGlmaWVycygpIHRocm93cyBUaHJvd2FibGUgeworICAgIGludm9rZUNvbXBsZXRpb24oIlNhbWVTdGF0c0ZvckRpZmZlcmVudFF1YWxpZmllcnNKTGFiZWwuamF2YSIpOworICAgIGFzc2VydFByZWZlcnJlZEl0ZW1zKDAsICJnZXRDb21wb25lbnQiKTsKKyAgICBpbmNVc2VDb3VudChnZXRMb29rdXAoKSwgbXlGaXh0dXJlLmxvb2t1cEVsZW1lbnRTdHJpbmdzLmluZGV4T2YoJ2dldENvbXBvbmVudHMnKSk7CisgICAgRmlsZURvY3VtZW50TWFuYWdlci5pbnN0YW5jZS5zYXZlQWxsRG9jdW1lbnRzKCkKKworICAgIGludm9rZUNvbXBsZXRpb24oIlNhbWVTdGF0c0ZvckRpZmZlcmVudFF1YWxpZmllcnNKTGFiZWwuamF2YSIpOworICAgIGFzc2VydFByZWZlcnJlZEl0ZW1zKDAsICJnZXRDb21wb25lbnRzIiwgImdldENvbXBvbmVudCIpOworCisgICAgaW52b2tlQ29tcGxldGlvbigiU2FtZVN0YXRzRm9yRGlmZmVyZW50UXVhbGlmaWVyc0pDb21wb25lbnQuamF2YSIpOworICAgIGFzc2VydFByZWZlcnJlZEl0ZW1zKDAsICJnZXRDb21wb25lbnRzIiwgImdldENvbXBvbmVudCIpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFNhbWVTdGF0c0ZvckRpZmZlcmVudFF1YWxpZmllcnMyKCkgdGhyb3dzIFRocm93YWJsZSB7CisgICAgaW52b2tlQ29tcGxldGlvbigiU2FtZVN0YXRzRm9yRGlmZmVyZW50UXVhbGlmaWVyc0pDb21wb25lbnQuamF2YSIpOworICAgIGFzc2VydFByZWZlcnJlZEl0ZW1zKDAsICJnZXRDb21wb25lbnQiKTsKKyAgICBpbmNVc2VDb3VudChnZXRMb29rdXAoKSwgbXlGaXh0dXJlLmxvb2t1cEVsZW1lbnRTdHJpbmdzLmluZGV4T2YoJ2dldENvbXBvbmVudHMnKSk7CisgICAgRmlsZURvY3VtZW50TWFuYWdlci5pbnN0YW5jZS5zYXZlQWxsRG9jdW1lbnRzKCkKKworICAgIGludm9rZUNvbXBsZXRpb24oIlNhbWVTdGF0c0ZvckRpZmZlcmVudFF1YWxpZmllcnNKQ29tcG9uZW50LmphdmEiKTsKKyAgICBhc3NlcnRQcmVmZXJyZWRJdGVtcygwLCAiZ2V0Q29tcG9uZW50cyIsICJnZXRDb21wb25lbnQiKTsKKworICAgIGludm9rZUNvbXBsZXRpb24oIlNhbWVTdGF0c0ZvckRpZmZlcmVudFF1YWxpZmllcnNKTGFiZWwuamF2YSIpOworICAgIGFzc2VydFByZWZlcnJlZEl0ZW1zKDAsICJnZXRDb21wb25lbnRzIiwgImdldENvbXBvbmVudCIpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdERpc3ByZWZlckZpbmFsaXplKCkgdGhyb3dzIFRocm93YWJsZSB7CisgICAgY2hlY2tQcmVmZXJyZWRJdGVtcygwLCAiZmluYWwiLCAiZmluYWxpemUiKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RQcmVmZXJOZXdFeHBlY3RlZElubmVyKCkgdGhyb3dzIFRocm93YWJsZSB7CisgICAgY2hlY2tQcmVmZXJyZWRJdGVtcygwLCAiRm9vb28uQmFyIiwgIkZvb29vIik7CisKKyAgICAvKmZpbmFsIExvb2t1cEVsZW1lbnRQcmVzZW50YXRpb24gcHJlc2VudGF0aW9uID0gbmV3IExvb2t1cEVsZW1lbnRQcmVzZW50YXRpb24oKTsKKyAgICBnZXRMb29rdXAoKS5nZXRJdGVtcygpLmdldCgwKS5yZW5kZXJFbGVtZW50KHByZXNlbnRhdGlvbik7CisgICAgYXNzZXJ0RXF1YWxzKCJGb29vby5CYXIiLCBwcmVzZW50YXRpb24uZ2V0SXRlbVRleHQoKSk7Ki8KKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3REZWNsYXJlZE1lbWJlcnNHb0ZpcnN0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgaW52b2tlQ29tcGxldGlvbihnZXRUZXN0TmFtZShmYWxzZSkgKyAiLmphdmEiKTsKKyAgICBhc3NlcnRTdHJpbmdJdGVtcygiZnJvbVRoaXMiLCAib3ZlcnJpZGRlbiIsICJmcm9tU3VwZXIiLCAiZXF1YWxzIiwgImdldENsYXNzIiwgImhhc2hDb2RlIiwgIm5vdGlmeSIsICJub3RpZnlBbGwiLCAidG9TdHJpbmciLCAid2FpdCIsCisgICAgICAgICAgICAgICAgICAgICAgIndhaXQiLCAid2FpdCIpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdExvY2FsVmFyc092ZXJNZXRob2RzKCkgeworICAgIGNoZWNrUHJlZmVycmVkSXRlbXMoMCwgInZhbHVlIiwgInZhbGlkYXRlIiwgInZhbGlkYXRlVHJlZSIpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEN1cnJlbnRDbGFzc0Jlc3QoKSB7CisgICAgY2hlY2tQcmVmZXJyZWRJdGVtcygwLCAiWGNvZGVQcm9qZWN0VGVtcGxhdGUiLCAiWGNvZGVDb25maWd1cmFibGUiKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RGcW5TdGF0cygpIHsKKyAgICBteUZpeHR1cmUuYWRkQ2xhc3MoInB1YmxpYyBpbnRlcmZhY2UgQmFhYWFhYWFyIHt9Iik7CisgICAgbXlGaXh0dXJlLmFkZENsYXNzKCJwYWNrYWdlIHpvbzsgcHVibGljIGludGVyZmFjZSBCYWFhYWFhYXIge30iKTsKKworICAgIGNvbmZpZ3VyZVNlY29uZENvbXBsZXRpb24oKTsKKworICAgIGZpbmFsIExvb2t1cEltcGwgbG9va3VwID0gZ2V0TG9va3VwKCk7CisgICAgYXNzZXJ0RXF1YWxzKCJCYWFhYWFhYXIiLCAoKEphdmFQc2lDbGFzc1JlZmVyZW5jZUVsZW1lbnQpIGxvb2t1cC5nZXRJdGVtcygpLmdldCgwKSkuZ2V0UXVhbGlmaWVkTmFtZSgpKTsKKyAgICBhc3NlcnRFcXVhbHMoInpvby5CYWFhYWFhYXIiLCAoKEphdmFQc2lDbGFzc1JlZmVyZW5jZUVsZW1lbnQpIGxvb2t1cC5nZXRJdGVtcygpLmdldCgxKSkuZ2V0UXVhbGlmaWVkTmFtZSgpKTsKKyAgICBpbmNVc2VDb3VudChsb29rdXAsIDEpOworCisgICAgYXNzZXJ0RXF1YWxzKCJ6b28uQmFhYWFhYWFyIiwgKChKYXZhUHNpQ2xhc3NSZWZlcmVuY2VFbGVtZW50KSBsb29rdXAuZ2V0SXRlbXMoKS5nZXQoMCkpLmdldFF1YWxpZmllZE5hbWUoKSk7CisgICAgYXNzZXJ0RXF1YWxzKCJCYWFhYWFhYXIiLCAoKEphdmFQc2lDbGFzc1JlZmVyZW5jZUVsZW1lbnQpbG9va3VwLmdldEl0ZW1zKCkuZ2V0KDEpKS5nZXRRdWFsaWZpZWROYW1lKCkpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFNraXBMaWZ0ZWQoKSB7CisgICAgY2hlY2tQcmVmZXJyZWRJdGVtcygwLCAiaGFzaENvZGVNaW5lIiwgImhhc2hDb2RlIikKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3REaXNwcmVmZXJJbm5lckNsYXNzZXMoKSB7CisgICAgY2hlY2tQcmVmZXJyZWRJdGVtcygwKTsgLy9ubyBjaG9zZW4gaXRlbXMKKyAgICBhc3NlcnRGYWxzZShnZXRMb29rdXAoKS5nZXRJdGVtcygpLmdldCgwKS5nZXRPYmplY3QoKSBpbnN0YW5jZW9mIFBzaUNsYXNzKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RQcmVmZXJTYW1lTmFtZWRNZXRob2RzKCkgeworICAgIGNoZWNrUHJlZmVycmVkSXRlbXMoMCwgImZvbyIsICJib28iLCAiZG9vIiwgImhhc2hDb2RlIik7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0UHJlZmVySW50ZXJmYWNlc0luSW1wbGVtZW50cygpIHsKKyAgICBjaGVja1ByZWZlcnJlZEl0ZW1zKDAsICJGb29JbnRmIiwgIkZvb0NsYXNzIik7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0UHJlZmVyQ2xhc3Nlc0luRXh0ZW5kcygpIHsKKyAgICBjaGVja1ByZWZlcnJlZEl0ZW1zKDAsICJGb29DbGFzcyIsICJGb29fSW50ZiIpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFByZWZlckNsYXNzU3RhdGljTWVtYmVycygpIHsKKyAgICBjaGVja1ByZWZlcnJlZEl0ZW1zKDAsICJab28uQSIsICJab28iLCAiWm9vLkIiLCAiWm9vLkMiLCAiWm9vLkQiLCAiWm9vLkUiLCAiWm9vLkYiLCAiWm9vLkciLCAiWm9vLkgiKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RQcmVmZXJGaW5hbGx5VG9GaW5hbCgpIHsKKyAgICBjaGVja1ByZWZlcnJlZEl0ZW1zKDAsICJmaW5hbGx5IiwgImZpbmFsIik7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0UHJlZmVyUmV0dXJuKCkgeworICAgIGNoZWNrUHJlZmVycmVkSXRlbXMoMCwgInJldHVybiIsICJyTG9jYWwiLCAiclBhcmFtIiwgInJNZXRob2QiKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RQcmVmZXJNb2RpZmllcnMoKSB7CisgICAgY2hlY2tQcmVmZXJyZWRJdGVtcygwLCAicHJpdmF0ZSIsICJwcm90ZWN0ZWQiLCAicHVibGljIiwgInBhYWEiLCAicGFhYiIpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFByZWZlckVudW1Db25zdGFudHMoKSB7CisgICAgY2hlY2tQcmVmZXJyZWRJdGVtcygwLCAiTXlFbnVtLmJhciIsICJNeUVudW0iLCAiTXlFbnVtLmZvbyIpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFByZWZlckVsc2UoKSB7CisgICAgY2hlY2tQcmVmZXJyZWRJdGVtcygwLCAiZWxzZSIsICJlbGVtZW50Iik7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0UHJlZmVyTW9yZU1hdGNoaW5nKCkgeworICAgIGNoZWNrUHJlZmVycmVkSXRlbXMoMCwgIkZvb09DU29tZXRoaW5nIiwgIkZvb09iamVjdENvbGxlY3RvciIpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFByZWZlclNhbWVQYWNrYWdlT3ZlckltcG9ydGVkKCkgeworICAgIG15Rml4dHVyZS5hZGRDbGFzcygicGFja2FnZSBiYXI7IHB1YmxpYyBjbGFzcyBCYXIxIHt9Iik7CisgICAgbXlGaXh0dXJlLmFkZENsYXNzKCJwYWNrYWdlIGJhcjsgcHVibGljIGNsYXNzIEJhcjIge30iKTsKKyAgICBteUZpeHR1cmUuYWRkQ2xhc3MoInBhY2thZ2UgYmFyOyBwdWJsaWMgY2xhc3MgQmFyMyB7fSIpOworICAgIG15Rml4dHVyZS5hZGRDbGFzcygicGFja2FnZSBiYXI7IHB1YmxpYyBjbGFzcyBCYXI0IHt9Iik7CisgICAgbXlGaXh0dXJlLmFkZENsYXNzKCJjbGFzcyBCYXI5IHt9Iik7CisgICAgbXlGaXh0dXJlLmFkZENsYXNzKCJwYWNrYWdlIGRvbzsgcHVibGljIGNsYXNzIEJhcjAge30iKTsKKworICAgIGNoZWNrUHJlZmVycmVkSXRlbXMoMCwgIkJhcjkiLCAiQmFyMSIsICJCYXIyIiwgIkJhcjMiLCAiQmFyNCIpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFByZXNlbGVjdE1vc3RSZWxldmFudEluVGhlTWlkZGxlQWxwaGEoKSB7CisgICAgVUlTZXR0aW5ncy5nZXRJbnN0YW5jZSgpLlNPUlRfTE9PS1VQX0VMRU1FTlRTX0xFWElDT0dSQVBISUNBTExZID0gdHJ1ZTsKKworICAgIG15Rml4dHVyZS5hZGRDbGFzcygicGFja2FnZSBmb287IHB1YmxpYyBjbGFzcyBFTFhhYWFhYWFhYWFhYWFhYWFhYWFhYSB7fSIpOworICAgIGludm9rZUNvbXBsZXRpb24oZ2V0VGVzdE5hbWUoZmFsc2UpICsgIi5qYXZhIik7CisgICAgbXlGaXh0dXJlLmNvbXBsZXRlQmFzaWMoKTsKKyAgICBMb29rdXBJbXBsIGxvb2t1cCA9IGdldExvb2t1cCgpOworICAgIGFzc2VydFByZWZlcnJlZEl0ZW1zKGxvb2t1cC5nZXRMaXN0KCkuZ2V0U2VsZWN0ZWRJbmRleCgpKTsKKyAgICBhc3NlcnRFcXVhbHMoIkVMWGFhYWFhYWFhYWFhYWFhYWFhYWFhIiwgbG9va3VwLmdldEl0ZW1zKCkuZ2V0KDApLmdldExvb2t1cFN0cmluZygpKTsKKyAgICBhc3NlcnRFcXVhbHMoIkVMWEVNRU5UX0EiLCBsb29rdXAuZ2V0Q3VycmVudEl0ZW0oKS5nZXRMb29rdXBTdHJpbmcoKSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0UmVhbGx5QWxwaGFTb3J0aW5nKCkgeworICAgIFVJU2V0dGluZ3MuZ2V0SW5zdGFuY2UoKS5TT1JUX0xPT0tVUF9FTEVNRU5UU19MRVhJQ09HUkFQSElDQUxMWSA9IHRydWU7CisKKyAgICBpbnZva2VDb21wbGV0aW9uKGdldFRlc3ROYW1lKGZhbHNlKSArICIuamF2YSIpOworICAgIGFzc2VydCBteUZpeHR1cmUubG9va3VwRWxlbWVudFN0cmluZ3Muc29ydCgpID09IG15Rml4dHVyZS5sb29rdXBFbGVtZW50U3RyaW5ncworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEFscGhhU29ydFBhY2thZ2VzKCkgeworICAgIFVJU2V0dGluZ3MuZ2V0SW5zdGFuY2UoKS5TT1JUX0xPT0tVUF9FTEVNRU5UU19MRVhJQ09HUkFQSElDQUxMWSA9IHRydWUKKworICAgIGRlZiBwa2dzID0gWydiYXInLCAnZm9vJywgJ2dvbycsICdyb28nLCAnem9vJ10KKyAgICBmb3IgKHMgaW4gcGtncykgeworICAgICAgbXlGaXh0dXJlLmFkZENsYXNzKCJwYWNrYWdlICRzOyBwdWJsaWMgY2xhc3MgRm9veCB7fSIpCisgICAgfQorICAgIGludm9rZUNvbXBsZXRpb24oZ2V0VGVzdE5hbWUoZmFsc2UpICsgIi5qYXZhIikKKyAgICBmb3IgKGkgaW4gMC4uPHBrZ3Muc2l6ZSgpKSB7CisgICAgICBhc3NlcnQgTG9va3VwRWxlbWVudFByZXNlbnRhdGlvbi5yZW5kZXJFbGVtZW50KG15Rml4dHVyZS5sb29rdXBFbGVtZW50c1tpXSkudGFpbFRleHQ/LmNvbnRhaW5zKHBrZ3NbaV0pCisgICAgfQorICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFNvcnRTYW1lTmFtZWRWYXJpYW50c0J5UHJveGltaXR5KCkgeworICAgIG15Rml4dHVyZS5hZGRDbGFzcygicHVibGljIGNsYXNzIEJhciB7fSIpOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMTA7IGkrKykgeworICAgICAgbXlGaXh0dXJlLmFkZENsYXNzKCJwdWJsaWMgY2xhc3MgQmFyIiArIGkgKyAiIHt9Iik7CisgICAgICBteUZpeHR1cmUuYWRkQ2xhc3MoInB1YmxpYyBjbGFzcyBCYXIiICsgaSArICJDb2xsZWFndWUge30iKTsKKyAgICB9CisgICAgbXlGaXh0dXJlLmFkZENsYXNzKCJwYWNrYWdlIGJhcjsgcHVibGljIGNsYXNzIEJhciB7fSIpOworICAgIG15Rml4dHVyZS5jb25maWd1cmVCeUZpbGUoZ2V0VGVzdE5hbWUoZmFsc2UpICsgIi5qYXZhIik7CisgICAgbXlGaXh0dXJlLmNvbXBsZXRlKENvbXBsZXRpb25UeXBlLkJBU0lDLCAyKTsKKyAgICBhc3NlcnRQcmVmZXJyZWRJdGVtcygwLCAiQmFyIiwgIkJhciIpOworICAgIExpc3Q8TG9va3VwRWxlbWVudD4gaXRlbXMgPSBnZXRMb29rdXAoKS5nZXRJdGVtcygpOworICAgIGFzc2VydEVxdWFscygoKEphdmFQc2lDbGFzc1JlZmVyZW5jZUVsZW1lbnQpaXRlbXMuZ2V0KDApKS5nZXRRdWFsaWZpZWROYW1lKCksICJCYXIiKTsKKyAgICBhc3NlcnRFcXVhbHMoKChKYXZhUHNpQ2xhc3NSZWZlcmVuY2VFbGVtZW50KWl0ZW1zLmdldCgxKSkuZ2V0UXVhbGlmaWVkTmFtZSgpLCAiYmFyLkJhciIpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdENhc2VJbnNlbnNpdGl2ZVByZWZpeE1hdGNoKCkgeworICAgIENvZGVJbnNpZ2h0U2V0dGluZ3MuZ2V0SW5zdGFuY2UoKS5DT01QTEVUSU9OX0NBU0VfU0VOU0lUSVZFID0gQ29kZUluc2lnaHRTZXR0aW5ncy5OT05FOworICAgIGNoZWNrUHJlZmVycmVkSXRlbXMoMSwgIkZvbyIsICJmb28xIiwgImZvbzIiKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RFeHBlY3RlZFR5cGVJc01vcmVJbXBvcnRhbnRUaGFuQ2FzZSgpIHsKKyAgICBDb2RlSW5zaWdodFNldHRpbmdzLmdldEluc3RhbmNlKCkuQ09NUExFVElPTl9DQVNFX1NFTlNJVElWRSA9IENvZGVJbnNpZ2h0U2V0dGluZ3MuTk9ORTsKKyAgICBjaGVja1ByZWZlcnJlZEl0ZW1zIDAsICJlbmFibGUiLCAiRU5BQkxFRCIKKyAgICBpbmNVc2VDb3VudChsb29rdXAsIDEpCisgICAgYXNzZXJ0UHJlZmVycmVkSXRlbXMgMCwgIkVOQUJMRUQiLCAiZW5hYmxlIgorICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFByZWZlcktleXdvcmRzVG9Wb2lkTWV0aG9kc0luRXhwZWN0ZWRUeXBlQ29udGV4dCgpIHsKKyAgICBjaGVja1ByZWZlcnJlZEl0ZW1zIDAsICdub28nLCAnbmV3JywgJ251bGwnLCAnbm9vMicsICdub3RpZnknLCAnbm90aWZ5QWxsJworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFByZWZlckJldHRlck1hdGNoaW5nQ29uc3RhbnRUb01ldGhvZHMoKSB7CisgICAgY2hlY2tQcmVmZXJyZWRJdGVtcyAwLCAnc2VyaWFsJywgJ3N1cGVyRXhwcmVzc2lvbkluSWxsZWdhbENvbnRleHQnCisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0UHJlZmVyQXBwbGljYWJsZUFubm90YXRpb25zKCkgdGhyb3dzIFRocm93YWJsZSB7CisgICAgbXlGaXh0dXJlLmFkZENsYXNzICcnJworaW1wb3J0IGphdmEubGFuZy5hbm5vdGF0aW9uLkVsZW1lbnRUeXBlOworaW1wb3J0IGphdmEubGFuZy5hbm5vdGF0aW9uLlRhcmdldDsKKworQFRhcmdldCh7RWxlbWVudFR5cGUuQU5OT1RBVElPTl9UWVBFfSkKK0BpbnRlcmZhY2UgVE1ldGFBbm5vIHt9CisKK0BUYXJnZXQoe0VsZW1lbnRUeXBlLkxPQ0FMX1ZBUklBQkxFfSkKK0BpbnRlcmZhY2UgVExvY2FsQW5ubyB7fScnJworICAgIGNoZWNrUHJlZmVycmVkSXRlbXMgMCwgJ1RNZXRhQW5ubycsICdUYXJnZXQnLCAnVHJlZVNlbGVjdGlvbk1vZGUnLCAnVExvY2FsQW5ubycKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RQcmVmZXJBcHBsaWNhYmxlQW5ub3RhdGlvbnNNZXRob2QoKSB0aHJvd3MgVGhyb3dhYmxlIHsKKyAgICBteUZpeHR1cmUuYWRkQ2xhc3MgJycnCitpbXBvcnQgamF2YS5sYW5nLmFubm90YXRpb24uRWxlbWVudFR5cGU7CitpbXBvcnQgamF2YS5sYW5nLmFubm90YXRpb24uVGFyZ2V0OworCitAVGFyZ2V0KHtFbGVtZW50VHlwZS5UWVBFfSkKK0BpbnRlcmZhY2UgVENsYXNzQW5ubyB7fQorCitAVGFyZ2V0KHtFbGVtZW50VHlwZS5NRVRIT0R9KQorQGludGVyZmFjZSBUTWV0aG9kQW5ubyB7fScnJworICAgIGNoZWNrUHJlZmVycmVkSXRlbXMgMCwgJ1RNZXRob2RBbm5vJywgJ1RDbGFzc0Fubm8nCisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0SkNvbXBvbmVudEFkZE5ld1dpdGhTdGF0cygpIHRocm93cyBUaHJvd2FibGUgeworICAgIGZpbmFsIExvb2t1cEltcGwgbG9va3VwID0gaW52b2tlQ29tcGxldGlvbigiLy4uL3NtYXJ0VHlwZVNvcnRpbmcvSkNvbXBvbmVudEFkZE5ldy5qYXZhIik7CisgICAgYXNzZXJ0UHJlZmVycmVkSXRlbXMoMCwgIkZvb0JlYW4zIiwgIkpDb21wb25lbnQiLCAiQ29tcG9uZW50Iik7CisgICAgaW5jVXNlQ291bnQobG9va3VwLCAyKTsgLy9Db21wb25lbnQKKyAgICBhc3NlcnRQcmVmZXJyZWRJdGVtcygwLCAiQ29tcG9uZW50IiwgIkZvb0JlYW4zIiwgIkpDb21wb25lbnQiKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3REaXNwcmVmZXJSZXR1cm5CZWZvcmVTdGF0ZW1lbnQoKSB7CisgICAgY2hlY2tQcmVmZXJyZWRJdGVtcyAwLCAncmVhY3Rpb24nLCAncmV6ZXQnLCAncmV0dXJuJworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdERvTm90UHJlZmVyR2V0Q2xhc3MoKSB7CisgICAgY2hlY2tQcmVmZXJyZWRJdGVtcyAwLCAnZ2V0JywgJ2dldENsYXNzJworICAgIGluY1VzZUNvdW50KGxvb2t1cCwgMSkKKyAgICBhc3NlcnRQcmVmZXJyZWRJdGVtcyAwLCAnZ2V0JywgJ2dldENsYXNzJworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEVxdWFsc1N0YXRzKCkgeworICAgIGNoZWNrUHJlZmVycmVkSXRlbXMgMCwgJ2VxdWFscycsICdlcXVhbHNJZ25vcmVDYXNlJworICAgIGluY1VzZUNvdW50KGxvb2t1cCwgMSkKKyAgICBhc3NlcnRQcmVmZXJyZWRJdGVtcyAwLCAnZXF1YWxzSWdub3JlQ2FzZScsICdlcXVhbHMnCisgICAgaW5jVXNlQ291bnQobG9va3VwLCAxKQorICAgIGNoZWNrUHJlZmVycmVkSXRlbXMgMCwgJ2VxdWFscycsICdlcXVhbHNJZ25vcmVDYXNlJworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFByZWZlckNsYXNzVG9JdHNDb25zdGFudHMoKSB7CisgICAgY2hlY2tQcmVmZXJyZWRJdGVtcyAwLCAnQ2FsZW5kYXIuRklFTERfQ09VTlQnLCAnQ2FsZW5kYXInLCAnQ2FsZW5kYXIuQU0nCisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0UHJlZmVyTG9jYWxzVG9TdGF0aWNzSW5TZWNvbmRDb21wbGV0aW9uKCkgeworICAgIG15Rml4dHVyZS5hZGRDbGFzcygncHVibGljIGNsYXNzIEZvb1pvbyB7IHB1YmxpYyBzdGF0aWMgdm9pZCBmb29CYXIoKSB7fSAgfScpCisgICAgbXlGaXh0dXJlLmFkZENsYXNzKCdwdWJsaWMgY2xhc3MgZm9vQUNsYXNzIHt9JykKKyAgICBjb25maWd1cmVOb0NvbXBsZXRpb24oZ2V0VGVzdE5hbWUoZmFsc2UpICsgIi5qYXZhIik7CisgICAgbXlGaXh0dXJlLmNvbXBsZXRlKENvbXBsZXRpb25UeXBlLkJBU0lDLCAyKTsKKyAgICBhc3NlcnRQcmVmZXJyZWRJdGVtcygwLCAnZm9veScsICdmb29BQ2xhc3MnLCAnZm9vQmFyJywgJ2Zvb3gnKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RDaGFuZ2VQcmVzZWxlY3Rpb25PblNlY29uZEludm9jYXRpb24oKSB7CisgICAgbXlGaXh0dXJlLmFkZENsYXNzKCdwYWNrYWdlIGZvbzsgcHVibGljIGNsYXNzIEZvb1pvbyB7IH0nKQorICAgIG15Rml4dHVyZS5hZGRDbGFzcygncHVibGljIGNsYXNzIEZvb1pvb0ltcGwgeyB9JykKKyAgICBteUZpeHR1cmUuYWRkQ2xhc3MoJ3B1YmxpYyBjbGFzcyBGb29ab29Hb28ge30nKQorICAgIGNvbmZpZ3VyZU5vQ29tcGxldGlvbihnZXRUZXN0TmFtZShmYWxzZSkgKyAiLmphdmEiKTsKKyAgICBteUZpeHR1cmUuY29tcGxldGUoQ29tcGxldGlvblR5cGUuQkFTSUMpOworICAgIGFzc2VydFByZWZlcnJlZEl0ZW1zKDAsICdGb29ab29Hb28nLCAnRm9vWm9vSW1wbCcpOworICAgIG15Rml4dHVyZS5jb21wbGV0ZShDb21wbGV0aW9uVHlwZS5CQVNJQyk7CisgICAgYXNzZXJ0UHJlZmVycmVkSXRlbXMoMCwgJ0Zvb1pvbycsICdGb29ab29Hb28nLCAnRm9vWm9vSW1wbCcpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFVuZGVyc2NvcmVzRG9udE1ha2VNYXRjaE1pZGRsZSgpIHsKKyAgICBDb2RlSW5zaWdodFNldHRpbmdzLmdldEluc3RhbmNlKCkuQ09NUExFVElPTl9DQVNFX1NFTlNJVElWRSA9IENvZGVJbnNpZ2h0U2V0dGluZ3MuTk9ORTsKKyAgICBjaGVja1ByZWZlcnJlZEl0ZW1zKDAsICdfZm9vQmFyJywgJ0Zvb0JhcicpCisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0U3RhdGlzdGljc01hdHRlcnNPbk5leHRDb21wbGV0aW9uKCkgeworICAgIGNvbmZpZ3VyZUJ5RmlsZShnZXRUZXN0TmFtZShmYWxzZSkgKyAiLmphdmEiKQorICAgIG15Rml4dHVyZS5jb21wbGV0ZUJhc2ljKCk7CisgICAgYXNzZXJ0IGxvb2t1cAorICAgIGFzc2VydCBsb29rdXAuY3VycmVudEl0ZW0ubG9va3VwU3RyaW5nICE9ICdKQ29tcG9uZW50JworICAgIG15Rml4dHVyZS50eXBlKCdwb25lbnQgYztcbkpDb20nKQorICAgIG15Rml4dHVyZS5jb21wbGV0ZUJhc2ljKCk7CisgICAgYXNzZXJ0IGxvb2t1cAorICAgIGFzc2VydCBsb29rdXAuY3VycmVudEl0ZW0ubG9va3VwU3RyaW5nID09ICdKQ29tcG9uZW50JworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFN0YXRpc3RpY3NCeVByZWZpeCgpIHsKKyAgICBDbG9zdXJlIHJlcGVhdENvbXBsZXRpb24gPSB7IFN0cmluZyBsZXR0ZXIgLT4KKyAgICAgIFN0cmluZyB2YXIxID0gIl8ke2xldHRlcn1vbzEiCisgICAgICBTdHJpbmcgdmFyMiA9ICJfJHtsZXR0ZXJ9b28yIgorCisgICAgICBteUZpeHR1cmUudHlwZSgiXyRsZXR0ZXIiKTsKKyAgICAgIG15Rml4dHVyZS5jb21wbGV0ZUJhc2ljKCk7CisgICAgICBhc3NlcnRQcmVmZXJyZWRJdGVtcygwLCB2YXIxLCB2YXIyKQorICAgICAgbXlGaXh0dXJlLnR5cGUoJzJcbjtcbicpCisKKyAgICAgIGZvciAoaSBpbiAwLi48U3RhdGlzdGljc01hbmFnZXIuT0JMSVZJT05fVEhSRVNIT0xEIC0gMikgeworICAgICAgICBteUZpeHR1cmUudHlwZSgnXycpOworICAgICAgICBteUZpeHR1cmUuY29tcGxldGVCYXNpYygpOworICAgICAgICBhc3NlcnQgbXlGaXh0dXJlLmxvb2t1cEVsZW1lbnRTdHJpbmdzLmluZGV4T2YodmFyMikgPCBteUZpeHR1cmUubG9va3VwRWxlbWVudFN0cmluZ3MuaW5kZXhPZih2YXIxKQorICAgICAgICBteUZpeHR1cmUudHlwZShsZXR0ZXIpCisgICAgICAgIGFzc2VydFByZWZlcnJlZEl0ZW1zKDAsIHZhcjIsIHZhcjEpCisgICAgICAgIG15Rml4dHVyZS50eXBlKCdcbjtcbicpCisgICAgICB9CisgICAgfQorCisgICAgY29uZmlndXJlQnlGaWxlKGdldFRlc3ROYW1lKGZhbHNlKSArICIuamF2YSIpCisgICAgcmVwZWF0Q29tcGxldGlvbiAnZycKKyAgICByZXBlYXRDb21wbGV0aW9uICdmJworICAgIHJlcGVhdENvbXBsZXRpb24gJ2InCisKKyAgICBteUZpeHR1cmUuY29tcGxldGVCYXNpYygpOworICAgIGFzc2VydFByZWZlcnJlZEl0ZW1zKDAsICdfYm9vMicsICdfZm9vMicsICdyZXR1cm4nLCAnX2JvbzEnLCAnX2ZvbzEnLCAnX2dvbzEnLCAnX2dvbzInKQorICAgIG15Rml4dHVyZS50eXBlKCdfJyk7CisgICAgYXNzZXJ0UHJlZmVycmVkSXRlbXMoMCwgJ19ib28yJywgJ19mb28yJywgJ19ib28xJywgJ19mb28xJywgJ19nb28xJywgJ19nb28yJykKKyAgICBteUZpeHR1cmUudHlwZSgnZycpCisgICAgYXNzZXJ0UHJlZmVycmVkSXRlbXMoMCwgJ19nb28yJywgJ19nb28xJykKKyAgICBteUZpeHR1cmUudHlwZSgnbycpCisgICAgYXNzZXJ0UHJlZmVycmVkSXRlbXMoMCwgJ19nb28yJywgJ19nb28xJykKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RQcmVmZXJGaWVsZFRvTWV0aG9kKCkgeworICAgIGNoZWNrUHJlZmVycmVkSXRlbXMoMCwgJ3NpemUnLCAnc2l6ZScpCisgICAgYXNzZXJ0IGxvb2t1cC5pdGVtc1swXS5vYmplY3QgaW5zdGFuY2VvZiBQc2lGaWVsZAorICAgIGFzc2VydCBsb29rdXAuaXRlbXNbMV0ub2JqZWN0IGluc3RhbmNlb2YgUHNpTWV0aG9kCisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0UHJlc2VsZWN0TGFzdENob3NlbigpIHsKKyAgICBjaGVja1ByZWZlcnJlZEl0ZW1zKDAsICdhZGQnLCAnYWRkQWxsJykKKyAgICBmb3IgKGkgaW4gMC4uMTApIHsKKyAgICAgIGluY1VzZUNvdW50KGxvb2t1cCwgMSkKKyAgICB9CisgICAgYXNzZXJ0UHJlZmVycmVkSXRlbXMgMCwgJ2FkZEFsbCcsICdhZGQnCisgICAgaW5jVXNlQ291bnQobG9va3VwLCAxKQorICAgIGFzc2VydFByZWZlcnJlZEl0ZW1zIDAsICdhZGQnLCAnYWRkQWxsJworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdERvbnRQcmVzZWxlY3RMYXN0Q2hvc2VuV2l0aFVucmVsYXRlZFByZWZpeCgpIHsKKyAgICBpbnZva2VDb21wbGV0aW9uKGdldFRlc3ROYW1lKGZhbHNlKSArICIuamF2YSIpCisgICAgbXlGaXh0dXJlLnR5cGUoJztcbm15Y2wnKQorICAgIG15Rml4dHVyZS5jb21wbGV0ZUJhc2ljKCkKKyAgICBhc3NlcnRQcmVmZXJyZWRJdGVtcyAwLCAnbXlDbGFzcycsICdteUV4dGVuZHNDbGF1c2UnCisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0Q29tbW9uUHJlZml4TW9yZUltcG9ydGFudFRoYW5FeHBlY3RlZFR5cGUoKSB7CisgICAgY2hlY2tQcmVmZXJyZWRJdGVtcyAwLCAnbXlTdGVwJywgJ215Q3VycmVudFN0ZXAnCisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0U3RhdHNNb3JlSW1wb3J0YW50VGhhbkV4cGVjdGVkVHlwZSgpIHsKKyAgICBpbnZva2VDb21wbGV0aW9uKGdldFRlc3ROYW1lKGZhbHNlKSArICIuamF2YSIpCisgICAgYXNzZXJ0UHJlZmVycmVkSXRlbXMgMCwgJ2dldE51bWJlcicsICdnZXROdW1Qcm92aWRlcicKKyAgICBsb29rdXAuY3VycmVudEl0ZW0gPSBsb29rdXAuaXRlbXNbMV0KKyAgICBteUZpeHR1cmUudHlwZSAnXG4sIGdldG4nCisgICAgbXlGaXh0dXJlLmNvbXBsZXRlQmFzaWMoKQorICAgIGFzc2VydFByZWZlcnJlZEl0ZW1zIDAsICdnZXROdW1Qcm92aWRlcicsICdnZXROdW1iZXInCisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0SWZDb25kaXRpb25TdGF0cygpIHsKKyAgICBpbnZva2VDb21wbGV0aW9uKGdldFRlc3ROYW1lKGZhbHNlKSArICIuamF2YSIpCisgICAgbXlGaXh0dXJlLmNvbXBsZXRlQmFzaWMoKQorICAgIG15Rml4dHVyZS50eXBlKCdjb250JykKKyAgICBhc3NlcnRQcmVmZXJyZWRJdGVtcyAwLCAnY29udGFpbnNBbGwnLCAnY29udGFpbnMnCisgICAgbXlGaXh0dXJlLmxvb2t1cC5jdXJyZW50SXRlbSA9IG15Rml4dHVyZS5sb29rdXBFbGVtZW50c1sxXQorICAgIG15Rml4dHVyZS50eXBlKCdcbmMpKSB7XG5pZiAoc2V0LicpCisgICAgbXlGaXh0dXJlLmNvbXBsZXRlQmFzaWMoKQorICAgIG15Rml4dHVyZS50eXBlKCdjb250JykKKyAgICBhc3NlcnRQcmVmZXJyZWRJdGVtcyAwLCAnY29udGFpbnMnLCAnY29udGFpbnNBbGwnCisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0RGVlcGVzdFN1cGVyTWV0aG9kU3RhdHMoKSB7CisgICAgaW52b2tlQ29tcGxldGlvbihnZXRUZXN0TmFtZShmYWxzZSkgKyAiLmphdmEiKQorICAgIGFzc2VydFByZWZlcnJlZEl0ZW1zIDAsICdhZGRYJywgJ2FkZFknCisgICAgbXlGaXh0dXJlLnR5cGUoJ3lcbjtzZXQxLmFkJykKKworICAgIG15Rml4dHVyZS5jb21wbGV0ZUJhc2ljKCkKKyAgICBhc3NlcnRQcmVmZXJyZWRJdGVtcyAwLCAnYWRkWScsICdhZGRYJworICAgIG15Rml4dHVyZS50eXBlKCd4XG47c2V0Mi5hZCcpCisKKyAgICBteUZpeHR1cmUuY29tcGxldGVCYXNpYygpCisgICAgYXNzZXJ0UHJlZmVycmVkSXRlbXMgMCwgJ2FkZFgnLCAnYWRkWScKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RDb21tb25QcmVmaXhNb3JlSW1wb3J0YW50VGhhbktpbmQoKSB7CisgICAgQ29kZUluc2lnaHRTZXR0aW5ncy5nZXRJbnN0YW5jZSgpLkNPTVBMRVRJT05fQ0FTRV9TRU5TSVRJVkUgPSBDb2RlSW5zaWdodFNldHRpbmdzLk5PTkU7CisgICAgY2hlY2tQcmVmZXJyZWRJdGVtcygwLCAnUHNpRWxlbWVudCcsICdwc2lFbGVtZW50JykKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3ROb0V4cGVjdGVkVHlwZUluU3RyaW5nQ29uY2F0ZW5hdGlvbigpIHsKKyAgICBjaGVja1ByZWZlcnJlZEl0ZW1zKDAsICd2eCcpCisgIH0KKworfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vTm9ybWFsQ29tcGxldGlvblRlc3QuZ3Jvb3Z5IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vTm9ybWFsQ29tcGxldGlvblRlc3QuZ3Jvb3Z5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg4MGU3YjE3Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vTm9ybWFsQ29tcGxldGlvblRlc3QuZ3Jvb3Z5CkBAIC0wLDAgKzEsMTMwNiBAQAorLyoKKyAqIENvcHlyaWdodCAyMDAwLTIwMTEgSmV0QnJhaW5zIHMuci5vLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KK3BhY2thZ2UgY29tLmludGVsbGlqLmNvZGVJbnNpZ2h0LmNvbXBsZXRpb24KK2ltcG9ydCBjb20uaW50ZWxsaWouSmF2YVRlc3RVdGlsCitpbXBvcnQgY29tLmludGVsbGlqLmNvZGVJbnNpZ2h0LkNvZGVJbnNpZ2h0U2V0dGluZ3MKK2ltcG9ydCBjb20uaW50ZWxsaWouY29kZUluc2lnaHQubG9va3VwLkxvb2t1cAoraW1wb3J0IGNvbS5pbnRlbGxpai5jb2RlSW5zaWdodC5sb29rdXAuTG9va3VwRWxlbWVudAoraW1wb3J0IGNvbS5pbnRlbGxpai5jb2RlSW5zaWdodC5sb29rdXAuTG9va3VwRWxlbWVudFByZXNlbnRhdGlvbgoraW1wb3J0IGNvbS5pbnRlbGxpai5jb2RlSW5zaWdodC5sb29rdXAuTG9va3VwTWFuYWdlcgoraW1wb3J0IGNvbS5pbnRlbGxpai5sYW5nLmphdmEuSmF2YUxhbmd1YWdlCitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkuYWN0aW9uU3lzdGVtLklkZUFjdGlvbnMKK2ltcG9ydCBjb20uaW50ZWxsaWoucHNpLlBzaURvY3VtZW50TWFuYWdlcgoraW1wb3J0IGNvbS5pbnRlbGxpai5wc2kuUHNpTWV0aG9kCitpbXBvcnQgY29tLmludGVsbGlqLnBzaS5jb2RlU3R5bGUuQ29kZVN0eWxlU2V0dGluZ3NNYW5hZ2VyCitpbXBvcnQgY29tLmludGVsbGlqLnBzaS5jb2RlU3R5bGUuQ29tbW9uQ29kZVN0eWxlU2V0dGluZ3MKKworcHVibGljIGNsYXNzIE5vcm1hbENvbXBsZXRpb25UZXN0IGV4dGVuZHMgTGlnaHRGaXh0dXJlQ29tcGxldGlvblRlc3RDYXNlIHsKKyAgQE92ZXJyaWRlCisgIHByb3RlY3RlZCBTdHJpbmcgZ2V0QmFzZVBhdGgoKSB7CisgICAgcmV0dXJuIEphdmFUZXN0VXRpbC5nZXRSZWxhdGl2ZUphdmFUZXN0RGF0YVBhdGgoKSArICIvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwvIjsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RTaW1wbGUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBjb25maWd1cmVCeUZpbGUoIlNpbXBsZS5qYXZhIik7CisgICAgYXNzZXJ0U3RyaW5nSXRlbXMoIl9sb2NhbDEiLCAiX2xvY2FsMiIsICJfZmllbGQiLCAiX21ldGhvZCIsICJfYmFzZUZpZWxkIiwgIl9iYXNlTWV0aG9kIik7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0Q2FzdFRvUHJpbWl0aXZlMSgpIHRocm93cyBFeGNlcHRpb24geworICAgIGNvbmZpZ3VyZUJ5RmlsZSgiQ2FzdFRvUHJpbWl0aXZlMS5qYXZhIik7CisKKyAgICBmb3IgKGZpbmFsIExvb2t1cEVsZW1lbnQgaXRlbSA6IG15SXRlbXMpIHsKKyAgICAgIGlmIChpdGVtLmdldExvb2t1cFN0cmluZygpLmVxdWFscygiaW50IikpIHJldHVybjsKKyAgICB9CisgICAgYXNzZXJ0VHJ1ZShmYWxzZSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0Q2FzdFRvUHJpbWl0aXZlMigpIHRocm93cyBFeGNlcHRpb24geworICAgIGNvbmZpZ3VyZUJ5RmlsZSgiQ2FzdFRvUHJpbWl0aXZlMi5qYXZhIik7CisKKyAgICBmb3IgKGZpbmFsIExvb2t1cEVsZW1lbnQgaXRlbSA6IG15SXRlbXMpIHsKKyAgICAgIGlmIChpdGVtLmdldExvb2t1cFN0cmluZygpLmVxdWFscygiaW50IikpIHJldHVybjsKKyAgICB9CisgICAgYXNzZXJ0VHJ1ZShmYWxzZSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0Q2FzdFRvUHJpbWl0aXZlMygpIHRocm93cyBFeGNlcHRpb24geworICAgIGNvbmZpZ3VyZUJ5RmlsZSgiQ2FzdFRvUHJpbWl0aXZlMy5qYXZhIik7CisKKyAgICBmb3IgKGZpbmFsIExvb2t1cEVsZW1lbnQgaXRlbSA6IG15SXRlbXMpIHsKKyAgICAgIGlmIChpdGVtLmdldExvb2t1cFN0cmluZygpLmVxdWFscygiaW50IikpIHJldHVybjsKKyAgICB9CisgICAgYXNzZXJ0VHJ1ZShmYWxzZSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0V3JpdGVJbkludm9rZUxhdGVyKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgY29uZmlndXJlQnlGaWxlKCJXcml0ZUluSW52b2tlTGF0ZXIuamF2YSIpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFF1YWxpZmllZE5ldzEoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBjb25maWd1cmUoKQorICAgIGFzc2VydFN0cmluZ0l0ZW1zICJJSW5uZXIiLCAiSW5uZXIiCisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0UXVhbGlmaWVkTmV3MigpIHRocm93cyBFeGNlcHRpb24geworICAgIGNvbmZpZ3VyZSgpCisgICAgYXNzZXJ0U3RyaW5nSXRlbXMgIkFuSW5uZXIiLCAiSW5uZXIiCisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0S2V5d29yZHNJbk5hbWUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QgJ2FcbicKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RTaW1wbGVWYXJpYWJsZSgpIHRocm93cyBFeGNlcHRpb24geyBkb1Rlc3QoJ1xuJykgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RNZXRob2RJdGVtUHJlc2VudGF0aW9uKCkgeworICAgIGNvbmZpZ3VyZSgpCisgICAgTG9va3VwRWxlbWVudFByZXNlbnRhdGlvbiBwcmVzZW50YXRpb24gPSByZW5kZXJFbGVtZW50KG15SXRlbXNbMF0pCisgICAgYXNzZXJ0ICJlcXVhbHMiID09IHByZXNlbnRhdGlvbi5pdGVtVGV4dAorICAgIGFzc2VydCAiKE9iamVjdCBhbk9iamVjdCkiID09IHByZXNlbnRhdGlvbi50YWlsVGV4dAorICAgIGFzc2VydCAiYm9vbGVhbiIgPT0gcHJlc2VudGF0aW9uLnR5cGVUZXh0CisKKyAgICBhc3NlcnQgIXByZXNlbnRhdGlvbi50YWlsR3JheWVkCisgICAgYXNzZXJ0IHByZXNlbnRhdGlvbi5pdGVtVGV4dEJvbGQKKyAgfQorCisgIHByaXZhdGUgTG9va3VwRWxlbWVudFByZXNlbnRhdGlvbiByZW5kZXJFbGVtZW50KExvb2t1cEVsZW1lbnQgZWxlbWVudCkgeworICAgIHJldHVybiBMb29rdXBFbGVtZW50UHJlc2VudGF0aW9uLnJlbmRlckVsZW1lbnQoZWxlbWVudCkKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RGaWVsZEl0ZW1QcmVzZW50YXRpb25HZW5lcmljcygpIHsKKyAgICBjb25maWd1cmUoKQorICAgIExvb2t1cEVsZW1lbnRQcmVzZW50YXRpb24gcHJlc2VudGF0aW9uID0gcmVuZGVyRWxlbWVudChteUl0ZW1zWzBdKQorICAgIGFzc2VydCAidGFyZ2V0IiA9PSBwcmVzZW50YXRpb24uaXRlbVRleHQKKyAgICBhc3NlcnQgIXByZXNlbnRhdGlvbi50YWlsVGV4dAorICAgIGFzc2VydCAiU3RyaW5nIiA9PSBwcmVzZW50YXRpb24udHlwZVRleHQKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RNZXRob2RJdGVtUHJlc2VudGF0aW9uR2VuZXJpY3MoKSB7CisgICAgY29uZmlndXJlKCkKKyAgICBMb29rdXBFbGVtZW50UHJlc2VudGF0aW9uIHByZXNlbnRhdGlvbiA9IHJlbmRlckVsZW1lbnQobXlJdGVtc1swXSkKKyAgICBhc3NlcnQgImFkZCIgPT0gcHJlc2VudGF0aW9uLml0ZW1UZXh0CisgICAgYXNzZXJ0ICIoaW50IGluZGV4LCBTdHJpbmcgZWxlbWVudCkiID09IHByZXNlbnRhdGlvbi50YWlsVGV4dAorICAgIGFzc2VydCAidm9pZCIgPT0gcHJlc2VudGF0aW9uLnR5cGVUZXh0CisKKyAgICBwcmVzZW50YXRpb24gPSByZW5kZXJFbGVtZW50KG15SXRlbXNbMV0pCisgICAgYXNzZXJ0ICIoU3RyaW5nIG8pIiA9PSBwcmVzZW50YXRpb24udGFpbFRleHQKKyAgICBhc3NlcnQgImJvb2xlYW4iID09IHByZXNlbnRhdGlvbi50eXBlVGV4dAorCisgICAgYXNzZXJ0ICFwcmVzZW50YXRpb24udGFpbEdyYXllZAorICAgIGFzc2VydCBwcmVzZW50YXRpb24uaXRlbVRleHRCb2xkCisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0UHJlZmVyTG9uZ2VyTmFtZXNPcHRpb24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBjb25maWd1cmVCeUZpbGUoIlByZWZlckxvbmdlck5hbWVzT3B0aW9uLmphdmEiKTsKKworICAgIGFzc2VydEVxdWFscygzLCBteUl0ZW1zLmxlbmd0aCk7CisgICAgYXNzZXJ0RXF1YWxzKCJhYmNkRWZnaElqayIsIG15SXRlbXNbMF0uZ2V0TG9va3VwU3RyaW5nKCkpOworICAgIGFzc2VydEVxdWFscygiZWZnaElqayIsIG15SXRlbXNbMV0uZ2V0TG9va3VwU3RyaW5nKCkpOworICAgIGFzc2VydEVxdWFscygiaWprIiwgbXlJdGVtc1syXS5nZXRMb29rdXBTdHJpbmcoKSk7CisKKyAgICBMb29rdXBNYW5hZ2VyLmdldEluc3RhbmNlKGdldFByb2plY3QoKSkuaGlkZUFjdGl2ZUxvb2t1cCgpOworCisgICAgQ29kZVN0eWxlU2V0dGluZ3NNYW5hZ2VyLmdldFNldHRpbmdzKGdldFByb2plY3QoKSkuUFJFRkVSX0xPTkdFUl9OQU1FUyA9IGZhbHNlOworICAgIHRyeXsKKyAgICAgIGNvbmZpZ3VyZUJ5RmlsZSgiUHJlZmVyTG9uZ2VyTmFtZXNPcHRpb24uamF2YSIpOworCisgICAgICBhc3NlcnRFcXVhbHMoMywgbXlJdGVtcy5sZW5ndGgpOworICAgICAgYXNzZXJ0RXF1YWxzKCJpamsiLCBteUl0ZW1zWzBdLmdldExvb2t1cFN0cmluZygpKTsKKyAgICAgIGFzc2VydEVxdWFscygiZWZnaElqayIsIG15SXRlbXNbMV0uZ2V0TG9va3VwU3RyaW5nKCkpOworICAgICAgYXNzZXJ0RXF1YWxzKCJhYmNkRWZnaElqayIsIG15SXRlbXNbMl0uZ2V0TG9va3VwU3RyaW5nKCkpOworICAgIH0KKyAgICBmaW5hbGx5eworICAgICAgQ29kZVN0eWxlU2V0dGluZ3NNYW5hZ2VyLmdldFNldHRpbmdzKGdldFByb2plY3QoKSkuUFJFRkVSX0xPTkdFUl9OQU1FUyA9IHRydWU7CisgICAgfQorICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFNDUjcyMDgoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBjb25maWd1cmVCeUZpbGUoIlNDUjcyMDguamF2YSIpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFByb3RlY3RlZEZyb21TdXBlcigpIHRocm93cyBFeGNlcHRpb24geworICAgIGNvbmZpZ3VyZUJ5RmlsZSgiUHJvdGVjdGVkRnJvbVN1cGVyLmphdmEiKTsKKyAgICBBcnJheXMuc29ydChteUl0ZW1zKTsKKyAgICBhc3NlcnRUcnVlKCJFeGNlcHRpb24gbm90IGZvdW5kIiwgQXJyYXlzLmJpbmFyeVNlYXJjaChteUl0ZW1zLCAieHh4IikgPiAwKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RCZWZvcmVJbml0aWFsaXphdGlvbigpIHRocm93cyBFeGNlcHRpb24geworICAgIGNvbmZpZ3VyZUJ5RmlsZSgiQmVmb3JlSW5pdGlhbGl6YXRpb24uamF2YSIpOworICAgIGFzc2VydE5vdE51bGwobXlJdGVtcyk7CisgICAgYXNzZXJ0VHJ1ZShteUl0ZW1zLmxlbmd0aCA+IDApOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFByb3RlY3RlZEZyb21TdXBlcjIoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKworICAgIGNvbmZpZ3VyZUJ5RmlsZSgiUHJvdGVjdGVkRnJvbVN1cGVyLmphdmEiKTsKKyAgICBBcnJheXMuc29ydChteUl0ZW1zKTsKKyAgICBhc3NlcnRUcnVlKCJFeGNlcHRpb24gbm90IGZvdW5kIiwgQXJyYXlzLmJpbmFyeVNlYXJjaChteUl0ZW1zLCAieHh4IikgPiAwKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RDbGFzc0xpdGVyYWxJbkFycmF5QW5ub0luaXRpYWxpemVyKCkgdGhyb3dzIFRocm93YWJsZSB7IGRvVGVzdCgpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RDbGFzc0xpdGVyYWxJbkFycmF5QW5ub0luaXRpYWxpemVyMigpIHRocm93cyBUaHJvd2FibGUgeyBkb1Rlc3QoKTsgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RSZWZlcmVuY2VQYXJhbWV0ZXJzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgY29uZmlndXJlQnlGaWxlKCJSZWZlcmVuY2VQYXJhbWV0ZXJzLmphdmEiKTsKKyAgICBhc3NlcnROb3ROdWxsKG15SXRlbXMpOworICAgIGFzc2VydEVxdWFscyhteUl0ZW1zLmxlbmd0aCwgMik7CisgICAgYXNzZXJ0RXF1YWxzKG15SXRlbXNbMF0uZ2V0TG9va3VwU3RyaW5nKCksICJBQUFBIik7CisgICAgYXNzZXJ0RXF1YWxzKG15SXRlbXNbMV0uZ2V0TG9va3VwU3RyaW5nKCksICJBQUFCIik7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0Q29uc3RydWN0b3JOYW1lMSgpIHRocm93cyBFeGNlcHRpb257CisgICAgZmluYWwgQ29kZUluc2lnaHRTZXR0aW5ncyBzZXR0aW5ncyA9IENvZGVJbnNpZ2h0U2V0dGluZ3MuZ2V0SW5zdGFuY2UoKTsKKyAgICBmaW5hbCBib29sZWFuIGF1dG9jb21wbGV0ZV9vbl9jb2RlX2NvbXBsZXRpb24gPSBzZXR0aW5ncy5BVVRPQ09NUExFVEVfT05fQ09ERV9DT01QTEVUSU9OOworICAgIHNldHRpbmdzLkFVVE9DT01QTEVURV9PTl9DT0RFX0NPTVBMRVRJT04gPSBmYWxzZTsKKyAgICBjb25maWd1cmVCeUZpbGUoIkNvbnN0cnVjdG9yTmFtZTEuamF2YSIpOworICAgIGFzc2VydE5vdE51bGwobXlJdGVtcyk7CisgICAgYm9vbGVhbiBmYWlsZWQgPSB0cnVlOworICAgIGZvciAoZmluYWwgTG9va3VwRWxlbWVudCBpdGVtIDogbXlJdGVtcykgeworICAgICAgaWYgKGl0ZW0uZ2V0TG9va3VwU3RyaW5nKCkuZXF1YWxzKCJBQkNERSIpKSB7CisgICAgICAgIGZhaWxlZCA9IGZhbHNlOworICAgICAgfQorICAgIH0KKyAgICBhc3NlcnRGYWxzZShmYWlsZWQpOworICAgIHNldHRpbmdzLkFVVE9DT01QTEVURV9PTl9DT0RFX0NPTVBMRVRJT04gPSBhdXRvY29tcGxldGVfb25fY29kZV9jb21wbGV0aW9uOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdENvbnN0cnVjdG9yTmFtZTIoKSB0aHJvd3MgRXhjZXB0aW9ueworICAgIGZpbmFsIENvZGVJbnNpZ2h0U2V0dGluZ3Mgc2V0dGluZ3MgPSBDb2RlSW5zaWdodFNldHRpbmdzLmdldEluc3RhbmNlKCk7CisgICAgZmluYWwgYm9vbGVhbiBhdXRvY29tcGxldGVfb25fY29kZV9jb21wbGV0aW9uID0gc2V0dGluZ3MuQVVUT0NPTVBMRVRFX09OX0NPREVfQ09NUExFVElPTjsKKyAgICBzZXR0aW5ncy5BVVRPQ09NUExFVEVfT05fQ09ERV9DT01QTEVUSU9OID0gZmFsc2U7CisgICAgY29uZmlndXJlQnlGaWxlKCJDb25zdHJ1Y3Rvck5hbWUyLmphdmEiKTsKKyAgICBhc3NlcnROb3ROdWxsKG15SXRlbXMpOworICAgIGJvb2xlYW4gZmFpbGVkID0gdHJ1ZTsKKyAgICBmb3IgKGZpbmFsIExvb2t1cEVsZW1lbnQgaXRlbSA6IG15SXRlbXMpIHsKKyAgICAgIGlmIChpdGVtLmdldExvb2t1cFN0cmluZygpLmVxdWFscygiQUJDREUiKSkgeworICAgICAgICBmYWlsZWQgPSBmYWxzZTsKKyAgICAgIH0KKyAgICB9CisgICAgYXNzZXJ0RmFsc2UoZmFpbGVkKTsKKyAgICBzZXR0aW5ncy5BVVRPQ09NUExFVEVfT05fQ09ERV9DT01QTEVUSU9OID0gYXV0b2NvbXBsZXRlX29uX2NvZGVfY29tcGxldGlvbjsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RPYmplY3RzSW5UaHJvd3NCbG9jaygpIHRocm93cyBFeGNlcHRpb24geworICAgIGNvbmZpZ3VyZUJ5RmlsZSgiSW5UaHJvd3NDb21wbGV0aW9uLmphdmEiKTsKKyAgICBhc3NlcnQgIkMiID09IG15Rml4dHVyZS5sb29rdXBFbGVtZW50U3RyaW5nc1swXQorICAgIGFzc2VydCAiQiIgaW4gbXlGaXh0dXJlLmxvb2t1cEVsZW1lbnRTdHJpbmdzCisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0QW5ub1BhcmFtZXRlclZhbHVlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgY29uZmlndXJlKCkKKyAgICBkZWYgc3RyaW5ncyA9IG15Rml4dHVyZS5sb29rdXBFbGVtZW50U3RyaW5ncworICAgIGFzc2VydCAnQXNzZXJ0aW9uRXJyb3InIGluIHN0cmluZ3MKKyAgICBhc3NlcnQgISgnZW51bScgaW4gc3RyaW5ncykKKyAgICBhc3NlcnQgISgnZmluYWwnIGluIHN0cmluZ3MpCisgICAgYXNzZXJ0ICEoJ2VxdWFscycgaW4gc3RyaW5ncykKKyAgICBhc3NlcnQgISgnbmV3JyBpbiBzdHJpbmdzKQorICAgIGFzc2VydCAhKCdudWxsJyBpbiBzdHJpbmdzKQorICAgIGFzc2VydCAhKCdwdWJsaWMnIGluIHN0cmluZ3MpCisgICAgYXNzZXJ0ICEoJ3N1cGVyJyBpbiBzdHJpbmdzKQorICAgIGFzc2VydCAhKCdudWxsJyBpbiBzdHJpbmdzKQorICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEFmdGVySW5zdGFuY2VvZigpIHRocm93cyBFeGNlcHRpb24geworICAgIGNvbmZpZ3VyZUJ5RmlsZSgiQWZ0ZXJJbnN0YW5jZW9mLmphdmEiKTsKKyAgICBhc3NlcnQgIkEiIGluIG15Rml4dHVyZS5sb29rdXBFbGVtZW50U3RyaW5ncworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEFmdGVyQ2FzdDEoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBjb25maWd1cmVCeUZpbGUoIkFmdGVyQ2FzdDEuamF2YSIpOworCisgICAgYXNzZXJ0Tm90TnVsbChteUl0ZW1zKTsKKyAgICBhc3NlcnRFcXVhbHMoMiwgbXlJdGVtcy5sZW5ndGgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEFmdGVyQ2FzdDIoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBjb25maWd1cmVCeUZpbGUoIkFmdGVyQ2FzdDIuamF2YSIpOworICAgIGNoZWNrUmVzdWx0QnlGaWxlKCJBZnRlckNhc3QyLXJlc3VsdC5qYXZhIik7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0TWV0aG9kQ2FsbEZvclR3b0xldmVsU2VsZWN0aW9uKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgY29uZmlndXJlQnlGaWxlKCJNZXRob2RMb29rdXAuamF2YSIpOworICAgIGFzc2VydEVxdWFscygyLCBteUl0ZW1zLmxlbmd0aCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0TWV0aG9kQ2FsbEJlZm9yZUFub3RoZXJTdGF0ZW1lbnRXaXRoUGFyZW4oKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBjb25maWd1cmVCeUZpbGUoIk1ldGhvZExvb2t1cDIuamF2YSIpOworICAgIGNoZWNrUmVzdWx0QnlGaWxlKCJNZXRob2RMb29rdXAyX0FmdGVyLmphdmEiKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RNZXRob2RDYWxsQmVmb3JlQW5vdGhlclN0YXRlbWVudFdpdGhQYXJlbjIoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBjb2RlU3R5bGVTZXR0aW5ncy5NRVRIT0RfUEFSQU1FVEVSU19MUEFSRU5fT05fTkVYVF9MSU5FID0gdHJ1ZTsKKyAgICBjb25maWd1cmVCeUZpbGUoIk1ldGhvZExvb2t1cDIuamF2YSIpOworICAgIGNoZWNrUmVzdWx0QnlGaWxlKCJNZXRob2RMb29rdXAyX0FmdGVyMi5qYXZhIik7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0U3dpdGNoRW51bUxhYmVsKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgY29uZmlndXJlQnlGaWxlKCJTd2l0Y2hFbnVtTGFiZWwuamF2YSIpOworICAgIGFzc2VydEVxdWFscygzLCBteUl0ZW1zLmxlbmd0aCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0TWV0aG9kSW5Bbm5vdGF0aW9uKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgY29uZmlndXJlQnlGaWxlKCJBbm5vdGF0aW9uLmphdmEiKTsKKyAgICBteUZpeHR1cmUudHlwZSgnXG4nKQorICAgIGNoZWNrUmVzdWx0QnlGaWxlKCJBbm5vdGF0aW9uX2FmdGVyLmphdmEiKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RNZXRob2RJbkFubm90YXRpb24yKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgY29uZmlndXJlQnlGaWxlKCJBbm5vdGF0aW9uMi5qYXZhIik7CisgICAgY2hlY2tSZXN1bHRCeUZpbGUoIkFubm90YXRpb24yX2FmdGVyLmphdmEiKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RNZXRob2RJbkFubm90YXRpb24zKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgY29uZmlndXJlQnlGaWxlKCJBbm5vdGF0aW9uMy5qYXZhIik7CisgICAgY2hlY2tSZXN1bHRCeUZpbGUoIkFubm90YXRpb24zX2FmdGVyLmphdmEiKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RNZXRob2RJbkFubm90YXRpb241KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgY29uZmlndXJlQnlGaWxlKCJBbm5vdGF0aW9uNS5qYXZhIik7CisgICAgY2hlY2tSZXN1bHRCeUZpbGUoIkFubm90YXRpb241X2FmdGVyLmphdmEiKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RNZXRob2RJbkFubm90YXRpb243KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgY29uZmlndXJlQnlGaWxlKCJBbm5vdGF0aW9uNy5qYXZhIik7CisgICAgc2VsZWN0SXRlbShteUl0ZW1zWzBdKTsKKyAgICBjaGVja1Jlc3VsdEJ5RmlsZSgiQW5ub3RhdGlvbjdfYWZ0ZXIuamF2YSIpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEVudW1JbkFubm90YXRpb24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBjb25maWd1cmVCeUZpbGUoIkFubm90YXRpb240LmphdmEiKTsKKyAgICBjaGVja1Jlc3VsdEJ5RmlsZSgiQW5ub3RhdGlvbjRfYWZ0ZXIuamF2YSIpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFNlY29uZEF0dHJpYnV0ZSgpIHRocm93cyBFeGNlcHRpb24geworICAgIGNvbmZpZ3VyZUJ5RmlsZSgiQW5ub3RhdGlvbjYuamF2YSIpOworICAgIGNoZWNrUmVzdWx0QnlGaWxlKCJBbm5vdGF0aW9uNl9hZnRlci5qYXZhIik7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0SURFQURFVjY0MDgoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBjb25maWd1cmVCeUZpbGUoIklERUFERVY2NDA4LmphdmEiKTsKKyAgICBhc3NlcnRGaXJzdFN0cmluZ0l0ZW1zICJib29sZWFuIiwgImJ5dGUiCisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0TWV0aG9kV2l0aExlZnRQYXJUYWlsVHlwZSgpIHRocm93cyBFeGNlcHRpb24geworICAgIGNvbmZpZ3VyZUJ5RmlsZSgiTWV0aG9kV2l0aExlZnRQYXJUYWlsVHlwZS5qYXZhIik7CisgICAgdHlwZSgnKCcpOworICAgIGNoZWNrUmVzdWx0QnlGaWxlKCJNZXRob2RXaXRoTGVmdFBhclRhaWxUeXBlX2FmdGVyLmphdmEiKTsKKworICAgIGNvbmZpZ3VyZUJ5RmlsZSgiTWV0aG9kV2l0aExlZnRQYXJUYWlsVHlwZTIuamF2YSIpOworICAgIHR5cGUoJygnKTsKKyAgICBjaGVja1Jlc3VsdEJ5RmlsZSgiTWV0aG9kV2l0aExlZnRQYXJUYWlsVHlwZTJfYWZ0ZXIuamF2YSIpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdE1ldGhvZFdpdGhMZWZ0UGFyVGFpbFR5cGVOb1BhaXJCcmFjZSgpIHRocm93cyBFeGNlcHRpb24geworICAgIGZpbmFsIGJvb2xlYW4gb2xkID0gQ29kZUluc2lnaHRTZXR0aW5ncy5nZXRJbnN0YW5jZSgpLkFVVE9JTlNFUlRfUEFJUl9CUkFDS0VUOworICAgIENvZGVJbnNpZ2h0U2V0dGluZ3MuZ2V0SW5zdGFuY2UoKS5BVVRPSU5TRVJUX1BBSVJfQlJBQ0tFVCA9IGZhbHNlOworCisgICAgdHJ5IHsKKyAgICAgIGNvbmZpZ3VyZUJ5RmlsZShnZXRUZXN0TmFtZShmYWxzZSkgKyAiLmphdmEiKTsKKyAgICAgIHR5cGUoJygnKTsKKyAgICAgIGNoZWNrUmVzdWx0KCkKKyAgICB9CisgICAgZmluYWxseSB7CisgICAgICBDb2RlSW5zaWdodFNldHRpbmdzLmdldEluc3RhbmNlKCkuQVVUT0lOU0VSVF9QQUlSX0JSQUNLRVQgPSBvbGQ7CisgICAgfQorICB9CisKKyAgcHVibGljIHZvaWQgdGVzdE1ldGhvZFdpdGhMZWZ0UGFyVGFpbFR5cGVOb1BhaXJCcmFjZTIoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBmaW5hbCBib29sZWFuIG9sZCA9IENvZGVJbnNpZ2h0U2V0dGluZ3MuZ2V0SW5zdGFuY2UoKS5BVVRPSU5TRVJUX1BBSVJfQlJBQ0tFVDsKKyAgICBDb2RlSW5zaWdodFNldHRpbmdzLmdldEluc3RhbmNlKCkuQVVUT0lOU0VSVF9QQUlSX0JSQUNLRVQgPSBmYWxzZTsKKworICAgIHRyeSB7CisgICAgICAvL25vIHRhaWwgdHlwZSBzaG91bGQgd29yayB0aGUgbm9ybWFsIHdheQorICAgICAgY29uZmlndXJlQnlGaWxlKCJNZXRob2RXaXRoTGVmdFBhclRhaWxUeXBlTm9QYWlyQnJhY2UuamF2YSIpOworICAgICAgc2VsZWN0SXRlbShteUl0ZW1zWzBdKTsKKyAgICAgIGNoZWNrUmVzdWx0QnlGaWxlKCJNZXRob2RXaXRoTGVmdFBhclRhaWxUeXBlTm9QYWlyQnJhY2VfYWZ0ZXIyLmphdmEiKTsKKyAgICB9CisgICAgZmluYWxseSB7CisgICAgICBDb2RlSW5zaWdodFNldHRpbmdzLmdldEluc3RhbmNlKCkuQVVUT0lOU0VSVF9QQUlSX0JSQUNLRVQgPSBvbGQ7CisgICAgfQorICB9CisKKyAgcHVibGljIHZvaWQgdGVzdE1ldGhvZE5vUGFpckJyYWNlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZmluYWwgYm9vbGVhbiBvbGQgPSBDb2RlSW5zaWdodFNldHRpbmdzLmdldEluc3RhbmNlKCkuQVVUT0lOU0VSVF9QQUlSX0JSQUNLRVQ7CisgICAgQ29kZUluc2lnaHRTZXR0aW5ncy5nZXRJbnN0YW5jZSgpLkFVVE9JTlNFUlRfUEFJUl9CUkFDS0VUID0gZmFsc2U7CisKKyAgICB0cnkgeworICAgICAgZG9UZXN0ICdcbicKKyAgICB9CisgICAgZmluYWxseSB7CisgICAgICBDb2RlSW5zaWdodFNldHRpbmdzLmdldEluc3RhbmNlKCkuQVVUT0lOU0VSVF9QQUlSX0JSQUNLRVQgPSBvbGQ7CisgICAgfQorICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEV4Y2Vzc1NwYWNlSW5UeXBlQ2FzdCgpIHRocm93cyBUaHJvd2FibGUgeworICAgY29uZmlndXJlKCkKKyAgIHNlbGVjdEl0ZW0obXlJdGVtc1swXSk7CisgICBjaGVja1Jlc3VsdCgpCisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0RmllbGRUeXBlKCkgdGhyb3dzIFRocm93YWJsZSB7IGRvVGVzdCgnXG4nKTsgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RQYWNrYWdlSW5Bbm5vUGFyYW0oKSB0aHJvd3MgVGhyb3dhYmxlIHsKKyAgICBkb1Rlc3QoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RBbm9ueW1vdXNUeXBlUGFyYW1ldGVyKCkgdGhyb3dzIFRocm93YWJsZSB7IGRvVGVzdCgpOyB9CisKKyAgcHVibGljIHZvaWQgdGVzdENsYXNzTGl0ZXJhbEluQW5ub1BhcmFtKCkgdGhyb3dzIFRocm93YWJsZSB7CisgICAgZG9UZXN0KCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0Tm9Gb3JjZUJyYWNlcygpIHsKKyAgICBjb2RlU3R5bGVTZXR0aW5ncy5JRl9CUkFDRV9GT1JDRSA9IENvbW1vbkNvZGVTdHlsZVNldHRpbmdzLkZPUkNFX0JSQUNFU19BTFdBWVMKKyAgICBkb1Rlc3QoJ1xuJykKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RFeGNsdWRlU3RyaW5nQnVmZmVyKCkgdGhyb3dzIFRocm93YWJsZSB7CisgICAgQ29kZUluc2lnaHRTZXR0aW5ncy5nZXRJbnN0YW5jZSgpLkVYQ0xVREVEX1BBQ0tBR0VTID0gW1N0cmluZ0J1ZmZlci5uYW1lXSBhcyBTdHJpbmdbXQorICAgIHRyeSB7CisgICAgICBkb0FudGlUZXN0KCkKKyAgICB9CisgICAgZmluYWxseSB7CisgICAgICBDb2RlSW5zaWdodFNldHRpbmdzLmdldEluc3RhbmNlKCkuRVhDTFVERURfUEFDS0FHRVMgPSBuZXcgU3RyaW5nWzBdCisgICAgfQorICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEV4Y2x1ZGVJbnN0YW5jZUlubmVyQ2xhc3NlcygpIHRocm93cyBUaHJvd2FibGUgeworICAgIENvZGVJbnNpZ2h0U2V0dGluZ3MuZ2V0SW5zdGFuY2UoKS5FWENMVURFRF9QQUNLQUdFUyA9IFsnZm9vJ10KKyAgICBteUZpeHR1cmUuYWRkQ2xhc3MgJ3BhY2thZ2UgZm9vOyBwdWJsaWMgY2xhc3MgT3V0ZXIgeyBwdWJsaWMgY2xhc3MgSW5uZXIge30gfScKKyAgICBteUZpeHR1cmUuYWRkQ2xhc3MgJ3BhY2thZ2UgYmFyOyBwdWJsaWMgY2xhc3MgSW5uZXIge30nCisgICAgdHJ5IHsKKyAgICAgIGNvbmZpZ3VyZSgpCisgICAgICBhc3NlcnQgJ2Jhci5Jbm5lcicgPT0gKChKYXZhUHNpQ2xhc3NSZWZlcmVuY2VFbGVtZW50KW15Rml4dHVyZS5sb29rdXBFbGVtZW50c1swXSkucXVhbGlmaWVkTmFtZQorICAgICAgYXNzZXJ0IG15Rml4dHVyZS5sb29rdXBFbGVtZW50U3RyaW5ncyA9PSBbJ0lubmVyJ10KKyAgICB9CisgICAgZmluYWxseSB7CisgICAgICBDb2RlSW5zaWdodFNldHRpbmdzLmdldEluc3RhbmNlKCkuRVhDTFVERURfUEFDS0FHRVMgPSBuZXcgU3RyaW5nWzBdCisgICAgfQorICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEV4Y2x1ZGVkSW5zdGFuY2VJbm5lckNsYXNzQ3JlYXRpb24oKSB0aHJvd3MgVGhyb3dhYmxlIHsKKyAgICBDb2RlSW5zaWdodFNldHRpbmdzLmdldEluc3RhbmNlKCkuRVhDTFVERURfUEFDS0FHRVMgPSBbJ2ZvbyddCisgICAgbXlGaXh0dXJlLmFkZENsYXNzICdwYWNrYWdlIGZvbzsgcHVibGljIGNsYXNzIE91dGVyIHsgcHVibGljIGNsYXNzIElubmVyIHt9IH0nCisgICAgbXlGaXh0dXJlLmFkZENsYXNzICdwYWNrYWdlIGJhcjsgcHVibGljIGNsYXNzIElubmVyIHt9JworICAgIHRyeSB7CisgICAgICBjb25maWd1cmUoKQorICAgICAgYXNzZXJ0ICdmb28uT3V0ZXIuSW5uZXInID09ICgoSmF2YVBzaUNsYXNzUmVmZXJlbmNlRWxlbWVudClteUZpeHR1cmUubG9va3VwRWxlbWVudHNbMF0pLnF1YWxpZmllZE5hbWUKKyAgICAgIGFzc2VydCBteUZpeHR1cmUubG9va3VwRWxlbWVudFN0cmluZ3MgPT0gWydJbm5lciddCisgICAgfQorICAgIGZpbmFsbHkgeworICAgICAgQ29kZUluc2lnaHRTZXR0aW5ncy5nZXRJbnN0YW5jZSgpLkVYQ0xVREVEX1BBQ0tBR0VTID0gbmV3IFN0cmluZ1swXQorICAgIH0KKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RFeGNsdWRlZEluc3RhbmNlSW5uZXJDbGFzc1F1YWxpZmllZFJlZmVyZW5jZSgpIHRocm93cyBUaHJvd2FibGUgeworICAgIENvZGVJbnNpZ2h0U2V0dGluZ3MuZ2V0SW5zdGFuY2UoKS5FWENMVURFRF9QQUNLQUdFUyA9IFsnZm9vJ10KKyAgICBteUZpeHR1cmUuYWRkQ2xhc3MgJ3BhY2thZ2UgZm9vOyBwdWJsaWMgY2xhc3MgT3V0ZXIgeyBwdWJsaWMgY2xhc3MgSW5uZXIge30gfScKKyAgICBteUZpeHR1cmUuYWRkQ2xhc3MgJ3BhY2thZ2UgYmFyOyBwdWJsaWMgY2xhc3MgSW5uZXIge30nCisgICAgdHJ5IHsKKyAgICAgIGNvbmZpZ3VyZSgpCisgICAgICBhc3NlcnQgJ2Zvby5PdXRlci5Jbm5lcicgPT0gKChKYXZhUHNpQ2xhc3NSZWZlcmVuY2VFbGVtZW50KW15Rml4dHVyZS5sb29rdXBFbGVtZW50c1swXSkucXVhbGlmaWVkTmFtZQorICAgICAgYXNzZXJ0IG15Rml4dHVyZS5sb29rdXBFbGVtZW50U3RyaW5ncyA9PSBbJ0lubmVyJ10KKyAgICB9CisgICAgZmluYWxseSB7CisgICAgICBDb2RlSW5zaWdodFNldHRpbmdzLmdldEluc3RhbmNlKCkuRVhDTFVERURfUEFDS0FHRVMgPSBuZXcgU3RyaW5nWzBdCisgICAgfQorICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEF0VW5kZXJDbGFzcygpIHRocm93cyBUaHJvd2FibGUgeworICAgIGRvVGVzdCgnXG4nKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RMb2NhbENsYXNzTmFtZSgpIHRocm93cyBUaHJvd2FibGUgeyBkb1Rlc3QoKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0QXNzaWduaW5nRmllbGRGb3JUaGVGaXJzdFRpbWUoKSB0aHJvd3MgVGhyb3dhYmxlIHsgZG9UZXN0KCk7IH0KKworICBwdWJsaWMgdm9pZCB0ZXN0Q2xhc3NUeXBlUGFyYW1ldGVycygpIHRocm93cyBUaHJvd2FibGUgeworICAgIGNvbmZpZ3VyZSgpCisgICAgYXNzZXJ0ICdLJyBpbiBteUZpeHR1cmUubG9va3VwRWxlbWVudFN0cmluZ3MKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RDbGFzc1R5cGVQYXJhbWV0ZXJzR2VuZXJpY0JvdW5kcygpIHRocm93cyBUaHJvd2FibGUgeworICAgIGNvbmZpZ3VyZSgpCisgICAgYXNzZXJ0ICdLJyBpbiBteUZpeHR1cmUubG9va3VwRWxlbWVudFN0cmluZ3MKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RMb2NhbENsYXNzVHdpY2UoKSB0aHJvd3MgVGhyb3dhYmxlIHsKKyAgICBjb25maWd1cmUoKQorICAgIGFzc2VydE9yZGVyZWRFcXVhbHMgbXlGaXh0dXJlLmxvb2t1cEVsZW1lbnRTdHJpbmdzLCAnWm9vb3onLCAnWm9vb29vJworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdExvY2FsVG9wTGV2ZWxDb25mbGljdCgpIHRocm93cyBUaHJvd2FibGUgeworICAgIGNvbmZpZ3VyZSgpCisgICAgYXNzZXJ0T3JkZXJlZEVxdWFscyBteUZpeHR1cmUubG9va3VwRWxlbWVudFN0cmluZ3MsICdab29veicsICdab29vb28nCisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0RmluYWxCZWZvcmVNZXRob2RDYWxsKCkgdGhyb3dzIFRocm93YWJsZSB7CisgICAgY29uZmlndXJlKCkKKyAgICBhc3NlcnRTdHJpbmdJdGVtcyAnZmluYWwnLCAnZmluYWxpemUnCisgIH0KKyAgcHVibGljIHZvaWQgdGVzdFByaXZhdGVJbkFub255bW91cygpIHRocm93cyBUaHJvd2FibGUgeyBkb1Rlc3QoKSB9CisKKyAgcHVibGljIHZvaWQgdGVzdE1ldGhvZFBhcmVudGhlc2VzU3BhY2VzKCkgdGhyb3dzIFRocm93YWJsZSB7CisgICAgY29kZVN0eWxlU2V0dGluZ3MuU1BBQ0VfQkVGT1JFX01FVEhPRF9DQUxMX1BBUkVOVEhFU0VTID0gdHJ1ZQorICAgIGNvZGVTdHlsZVNldHRpbmdzLlNQQUNFX1dJVEhJTl9NRVRIT0RfQ0FMTF9QQVJFTlRIRVNFUyA9IHRydWUKKyAgICBkb1Rlc3QoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RNZXRob2RQYXJlbnRoZXNlc1NwYWNlc0FyZ3MoKSB0aHJvd3MgVGhyb3dhYmxlIHsKKyAgICBjb2RlU3R5bGVTZXR0aW5ncy5TUEFDRV9CRUZPUkVfTUVUSE9EX0NBTExfUEFSRU5USEVTRVMgPSB0cnVlCisgICAgY29kZVN0eWxlU2V0dGluZ3MuU1BBQ0VfV0lUSElOX01FVEhPRF9DQUxMX1BBUkVOVEhFU0VTID0gdHJ1ZQorICAgIGRvVGVzdCgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEF0VW5kZXJDbGFzc05vTW9kaWZpZXJzKCkgdGhyb3dzIFRocm93YWJsZSB7CisgICAgZG9UZXN0KCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0QnJlYWtJbklmQ29uZGl0aW9uKCkgdGhyb3dzIFRocm93YWJsZSB7IGRvVGVzdCgpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RBY2Nlc3NTdGF0aWNWaWFJbnN0YW5jZSgpIHRocm93cyBUaHJvd2FibGUgeyBkb1Rlc3QoKTsgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RBY2Nlc3NTdGF0aWNWaWFJbnN0YW5jZVNlY29uZCgpIHRocm93cyBUaHJvd2FibGUgeworICAgIGNvbmZpZ3VyZSgpCisgICAgbXlGaXh0dXJlLmNvbXBsZXRlKENvbXBsZXRpb25UeXBlLkJBU0lDLCAyKQorICAgIGNoZWNrUmVzdWx0KCkKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RBY2Nlc3NJbnN0YW5jZUZyb21TdGF0aWNTZWNvbmQoKSB0aHJvd3MgVGhyb3dhYmxlIHsKKyAgICBjb25maWd1cmUoKQorICAgIG15Rml4dHVyZS5jb21wbGV0ZShDb21wbGV0aW9uVHlwZS5CQVNJQywgMikKKyAgICBjaGVja1Jlc3VsdCgpCisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0Q29udGludWVMYWJlbCgpIHRocm93cyBUaHJvd2FibGUgeyBkb1Rlc3QoKTsgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RBbm9ueW1vdXNQcm9jZXNzKCkgeworICAgIG15Rml4dHVyZS5hZGRDbGFzcyAncGFja2FnZSBqYXZhLmxhbmc7IHB1YmxpYyBjbGFzcyBQcm9jZXNzIHt9JworICAgIG15Rml4dHVyZS5hZGRDbGFzcyAnJycKK2ltcG9ydCBqYXZhLnV0aWwuKjsKK3B1YmxpYyBjbGFzcyBQcm9jZXNzIHt9CitpbnRlcmZhY2UgUHJlZCA8QT4geyBib29sZWFuIHByZWRpY2F0ZShBIGVsZW0pOyB9CitwdWJsaWMgY2xhc3MgTGlzdFV0aWxzIHsKKyAgICBwdWJsaWMgc3RhdGljIDxBPiBMaXN0PEE+IGZpbHRlcihMaXN0PEE+IGxpc3QsIFByZWQ8QT4gcHJlZCkge30KK30KKycnJworICAgIGNvbmZpZ3VyZSgpCisgICAgdHlwZSAnXG4nCisgICAgY2hlY2tSZXN1bHQoKQorICB9CisKKyAgcHVibGljIHZvaWQgdGVzdE5vVGhpc0luQ29tbWVudCgpIHRocm93cyBUaHJvd2FibGUgeyBkb0FudGlUZXN0KCkgfQorICBwdWJsaWMgdm9pZCB0ZXN0SW5jTnVsbCgpIHRocm93cyBUaHJvd2FibGUgeyBkb0FudGlUZXN0KCkgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RMYXN0RXhwcmVzc2lvbkluRm9yKCkgdGhyb3dzIFRocm93YWJsZSB7IGRvVGVzdCgpOyB9CisKKyAgcHVibGljIHZvaWQgdGVzdE9ubHlLZXl3b3Jkc0luc2lkZVN3aXRjaCgpIHRocm93cyBUaHJvd2FibGUgeworICAgIGNvbmZpZ3VyZUJ5RmlsZShnZXRUZXN0TmFtZShmYWxzZSkgKyAiLmphdmEiKTsKKyAgICBhc3NlcnRTdHJpbmdJdGVtcygiY2FzZSIsICJkZWZhdWx0Iik7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0Qm9vbGVhbkxpdGVyYWxzKCkgdGhyb3dzIFRocm93YWJsZSB7CisgICAgZG9UZXN0KCdcbicpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdERvdWJsZUJvb2xlYW5JblBhcmFtZXRlcigpIHRocm93cyBUaHJvd2FibGUgeworICAgIGNvbmZpZ3VyZSgpCisgICAgYXNzZXJ0Rmlyc3RTdHJpbmdJdGVtcygiYm9vbGVhbiIsICJieXRlIikKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3REb3VibGVDb25zdGFudCgpIHRocm93cyBUaHJvd2FibGUgeworICAgIGNvbmZpZ3VyZSgpCisgICAgYXNzZXJ0U3RyaW5nSXRlbXMoIlhGT08iKQorICB9CisKKyAgcHVibGljIHZvaWQgdGVzdE5vdE9ubHlLZXl3b3Jkc0luc2lkZVN3aXRjaCgpIHRocm93cyBUaHJvd2FibGUgeworICAgIGRvVGVzdCgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdENoYWluZWRDYWxsT25OZXh0TGluZSgpIHRocm93cyBUaHJvd2FibGUgeworICAgIGNvbmZpZ3VyZUJ5RmlsZShnZXRUZXN0TmFtZShmYWxzZSkgKyAiLmphdmEiKTsKKyAgICBzZWxlY3RJdGVtKG15SXRlbXNbMF0pOworICAgIGNoZWNrUmVzdWx0KCkKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RGaW5pc2hXaXRoRG90KCkgdGhyb3dzIFRocm93YWJsZSB7CisgICAgY29uZmlndXJlQnlGaWxlKGdldFRlc3ROYW1lKGZhbHNlKSArICIuamF2YSIpOworICAgIHR5cGUoJy4nKTsKKyAgICBjaGVja1Jlc3VsdCgpCisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0RW5jbG9zaW5nVGhpcygpIHRocm93cyBUaHJvd2FibGUgeyBkb1Rlc3QoKTsgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RTZWFtbGVzc0NvbnN0YW50KCkgdGhyb3dzIFRocm93YWJsZSB7CisgICAgY29uZmlndXJlQnlGaWxlKGdldFRlc3ROYW1lKGZhbHNlKSArICIuamF2YSIpOworICAgIHNlbGVjdEl0ZW0obXlJdGVtc1swXSk7CisgICAgY2hlY2tSZXN1bHQoKQorICB9CisKKyAgcHVibGljIHZvaWQgdGVzdERlZmF1bHRBbm5vUGFyYW0oKSB0aHJvd3MgVGhyb3dhYmxlIHsgZG9UZXN0KCk7IH0KKworICBwdWJsaWMgdm9pZCB0ZXN0U3BhY2VBZnRlckxvb2t1cFN0cmluZygpIHRocm93cyBUaHJvd2FibGUgeworICAgIGNvbmZpZ3VyZUJ5RmlsZShnZXRUZXN0TmFtZShmYWxzZSkgKyAiLmphdmEiKTsKKyAgICB0eXBlKCcgJyk7CisgICAgYXNzZXJ0TnVsbChnZXRMb29rdXAoKSk7CisgICAgY2hlY2tSZXN1bHQoKQorICB9CisKKyAgcHVibGljIHZvaWQgdGVzdE5vU3BhY2VJblBhcmVuc1dpdGhvdXRQYXJhbXMoKSB0aHJvd3MgVGhyb3dhYmxlIHsKKyAgICBjb2RlU3R5bGVTZXR0aW5ncy5TUEFDRV9XSVRISU5fTUVUSE9EX0NBTExfUEFSRU5USEVTRVMgPSB0cnVlOworICAgIHRyeSB7CisgICAgICBkb1Rlc3QoKTsKKyAgICB9CisgICAgZmluYWxseSB7CisgICAgICBjb2RlU3R5bGVTZXR0aW5ncy5TUEFDRV9XSVRISU5fTUVUSE9EX0NBTExfUEFSRU5USEVTRVMgPSBmYWxzZTsKKyAgICB9CisgIH0KKyAgCisgIHB1YmxpYyB2b2lkIHRlc3RUd29TcGFjZXNJblBhcmVuc1dpdGhQYXJhbXMoKSB0aHJvd3MgVGhyb3dhYmxlIHsKKyAgICBjb2RlU3R5bGVTZXR0aW5ncy5TUEFDRV9XSVRISU5fTUVUSE9EX0NBTExfUEFSRU5USEVTRVMgPSB0cnVlOworICAgIGRvVGVzdCgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFF1YWxpZmllckFzUGFja2FnZSgpIHRocm93cyBUaHJvd2FibGUgeworICAgIGNvbmZpZ3VyZUJ5RmlsZShnZXRUZXN0TmFtZShmYWxzZSkgKyAiLmphdmEiKTsKKyAgICBzZWxlY3RJdGVtKG15SXRlbXNbMF0pOworICAgIGNoZWNrUmVzdWx0KCkKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RRdWFsaWZpZXJBc1BhY2thZ2UyKCkgdGhyb3dzIFRocm93YWJsZSB7CisgICAgZG9UZXN0KCk7CisgIH0KKyAgCisgIHB1YmxpYyB2b2lkIHRlc3RRdWFsaWZpZXJBc1BhY2thZ2UzKCkgdGhyb3dzIFRocm93YWJsZSB7CisgICAgZG9UZXN0KCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0UHJlc2VsZWN0RWRpdG9yU2VsZWN0aW9uKCkgeworICAgIGNvbmZpZ3VyZSgpCisgICAgYXNzZXJ0IGxvb2t1cC5jdXJyZW50SXRlbSAhPSBteUZpeHR1cmUubG9va3VwRWxlbWVudHNbMF0KKyAgICBhc3NlcnQgJ2ZpbmFsaXplJyA9PSBsb29rdXAuY3VycmVudEl0ZW0ubG9va3VwU3RyaW5nCisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0Tm9NZXRob2RzSW5Ob25TdGF0aWNJbXBvcnRzKCkgeworICAgIGNvbmZpZ3VyZSgpCisgICAgYXNzZXJ0U3RyaW5nSXRlbXMoIioiKQorICB9CisKKyAgcHVibGljIHZvaWQgdGVzdE1lbWJlcnNJblN0YXRpY0ltcG9ydHMoKSB7IGRvVGVzdCgpIH0KKyAgCisgIHB1YmxpYyB2b2lkIHRlc3RQYWNrYWdlTmFtZWRWYXJpYWJsZUJlZm9yZUFzc2lnbm1lbnQoKSB0aHJvd3MgVGhyb3dhYmxlIHsKKyAgICBkb1Rlc3QoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RGaWVsZFdpdGhDYXN0aW5nQ2FyZXQoKSB0aHJvd3MgVGhyb3dhYmxlIHsgZG9UZXN0KCk7IH0KKworICBwdWJsaWMgdm9pZCB0ZXN0SW5uZXJFbnVtQ29uc3RhbnQoKSB0aHJvd3MgVGhyb3dhYmxlIHsgZG9UZXN0KCdcbicpOyB9CisKKyAgcHVibGljIHZvaWQgdGVzdE1ldGhvZFJldHVyblR5cGUoKSB0aHJvd3MgVGhyb3dhYmxlIHsKKyAgICBkb1Rlc3QoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RNZXRob2RSZXR1cm5UeXBlTm9TcGFjZSgpIHRocm93cyBUaHJvd2FibGUgeworICAgIGNvbmZpZ3VyZUJ5RmlsZShnZXRUZXN0TmFtZShmYWxzZSkgKyAiLmphdmEiKTsKKyAgICBzZWxlY3RJdGVtKG15SXRlbXNbMF0pOworICAgIGNoZWNrUmVzdWx0KCkKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RFbnVtV2l0aG91dENvbnN0YW50cygpIHRocm93cyBUaHJvd2FibGUgeworICAgIGRvVGVzdCgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdERvV2hpbGVNZXRob2RDYWxsKCkgdGhyb3dzIFRocm93YWJsZSB7CisgICAgZG9UZXN0KCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0U2Vjb25kVHlwZVBhcmFtZXRlckV4dGVuZHMoKSB0aHJvd3MgVGhyb3dhYmxlIHsKKyAgICBkb1Rlc3QoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RHZXR0ZXJXaXRoRXhpc3RpbmdOb25FbXB0eVBhcmFtZXRlckxpc3QoKSB0aHJvd3MgVGhyb3dhYmxlIHsKKyAgICBkb1Rlc3QoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3ROb3RoaW5nQWZ0ZXJOdW1lcmljTGl0ZXJhbCgpIHRocm93cyBUaHJvd2FibGUgeyBkb0FudGlUZXN0KCk7IH0KKworICBwdWJsaWMgdm9pZCB0ZXN0U3BhY2VzQXJvdW5kRXEoKSB0aHJvd3MgVGhyb3dhYmxlIHsgZG9UZXN0KCc9Jyk7IH0KKworICBwdWJsaWMgdm9pZCBfdGVzdENsYXNzQmVmb3JlQ2FzdCgpIHRocm93cyBUaHJvd2FibGUgeyBkb1Rlc3QgJ1xuJyB9CisKKyAgcHVibGljIHZvaWQgdGVzdE5vQWxsQ2xhc3Nlc09uUXVhbGlmaWVkUmVmZXJlbmNlKCkgdGhyb3dzIFRocm93YWJsZSB7CisgICAgZG9BbnRpVGVzdCgpCisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0RmluaXNoQ2xhc3NOYW1lV2l0aERvdCgpIHRocm93cyBUaHJvd2FibGUgeworICAgIGRvVGVzdCgnLicpCisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0RmluaXNoQ2xhc3NOYW1lV2l0aExQYXJlbigpIHRocm93cyBUaHJvd2FibGUgeworICAgIGRvVGVzdCgnKCcpCisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0U2VsZWN0Tm9QYXJhbWV0ZXJTaWduYXR1cmUoKSB0aHJvd3MgVGhyb3dhYmxlIHsKKyAgICBjb25maWd1cmVCeUZpbGUoZ2V0VGVzdE5hbWUoZmFsc2UpICsgIi5qYXZhIik7CisgICAgZmluYWwgaW50IHBhcmFtZXRlcnNDb3VudCA9ICgoUHNpTWV0aG9kKWdldExvb2t1cCgpLmdldEN1cnJlbnRJdGVtKCkuZ2V0T2JqZWN0KCkpLmdldFBhcmFtZXRlckxpc3QoKS5nZXRQYXJhbWV0ZXJzQ291bnQoKTsKKyAgICBhc3NlcnRFcXVhbHMoMCwgcGFyYW1ldGVyc0NvdW50KTsKKyAgICB0eXBlICdcbicKKyAgICBjaGVja1Jlc3VsdCgpCisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0Q29tcGxldGlvbkluc2lkZUNsYXNzTGl0ZXJhbCgpIHRocm93cyBUaHJvd2FibGUgeworICAgIGNvbmZpZ3VyZUJ5RmlsZShnZXRUZXN0TmFtZShmYWxzZSkgKyAiLmphdmEiKTsKKyAgICB0eXBlKCdcbicpCisgICAgY2hlY2tSZXN1bHQoKQorICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEZpZWxkTmVnYXRpb24oKSB0aHJvd3MgVGhyb3dhYmxlIHsgZG9UZXN0KCchJyk7fQorICBwdWJsaWMgdm9pZCB0ZXN0RGVmYXVsdEluU3dpdGNoKCkgdGhyb3dzIFRocm93YWJsZSB7IGRvVGVzdCgpfQorICBwdWJsaWMgdm9pZCB0ZXN0QnJlYWtJblN3aXRjaCgpIHRocm93cyBUaHJvd2FibGUgeyBkb1Rlc3QoKSB9CisKKyAgcHVibGljIHZvaWQgdGVzdFN1cGVySW5Db25zdHJ1Y3RvcigpIHRocm93cyBUaHJvd2FibGUgeworICAgIGRvVGVzdCgnXG4nKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RTdXBlckluQ29uc3RydWN0b3JXaXRoUGFyYW1zKCkgdGhyb3dzIFRocm93YWJsZSB7CisgICAgZG9UZXN0KCdcbicpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFN1cGVySW5NZXRob2QoKSB0aHJvd3MgVGhyb3dhYmxlIHsKKyAgICBkb1Rlc3QoJ1xuJyk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0U2Vjb25kTWV0aG9kUGFyYW1ldGVyTmFtZSgpIHRocm93cyBUaHJvd2FibGUgeworICAgIGRvVGVzdCgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEFubm90YXRpb25Bc1VzdWFsT2JqZWN0KCkgdGhyb3dzIFRocm93YWJsZSB7CisgICAgZG9UZXN0KCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0QW5ub3RhdGlvbkFzVXN1YWxPYmplY3RGcm9tSmF2YWRvYygpIHRocm93cyBUaHJvd2FibGUgeworICAgIGRvVGVzdCgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEFubm90YXRpb25Bc1VzdWFsT2JqZWN0SW5zaWRlQ2xhc3MoKSB0aHJvd3MgVGhyb3dhYmxlIHsKKyAgICBkb1Rlc3QoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RBbm5vdGF0aW9uT25Ob3RoaW5nUGFyZW5zKCkgdGhyb3dzIFRocm93YWJsZSB7CisgICAgZG9UZXN0KCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0TXVsdGlSZXNvbHZlUXVhbGlmaWVyKCkgdGhyb3dzIFRocm93YWJsZSB7CisgICAgZG9UZXN0KCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0U2Vjb25kTWV0aG9kUGFyYW1ldGVyKCkgdGhyb3dzIFRocm93YWJsZSB7IGRvVGVzdCgpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RSZXR1cm5JbkNhc2UoKSB0aHJvd3MgVGhyb3dhYmxlIHsgZG9UZXN0KCk7IH0KKyAgcHVibGljIHZvaWQgdGVzdFVuYm94ZWRDb25zdGFudHNJbkNhc2UoKSB0aHJvd3MgVGhyb3dhYmxlIHsgZG9UZXN0KCk7IH0KKworICBwdWJsaWMgdm9pZCB0ZXN0QW5ub3RhdGlvbldpdGhvdXRWYWx1ZU1ldGhvZCgpIHRocm93cyBUaHJvd2FibGUgeworICAgIGNvbmZpZ3VyZUJ5RmlsZShnZXRUZXN0TmFtZShmYWxzZSkgKyAiLmphdmEiKTsKKyAgICBhc3NlcnRTdHJpbmdJdGVtcygiYmFyIiwgImZvbyIpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFVubmVjZXNzYXJ5TWV0aG9kTWVyZ2luZygpIHRocm93cyBUaHJvd2FibGUgeworICAgIGNvbmZpZ3VyZUJ5RmlsZShnZXRUZXN0TmFtZShmYWxzZSkgKyAiLmphdmEiKTsKKyAgICBhc3NlcnRTdHJpbmdJdGVtcygiZm9mb28iLCAiZm9mb28iKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RBbm5vdGF0aW9uUXVhbGlmaWVkTmFtZSgpIHRocm93cyBUaHJvd2FibGUgeworICAgIGRvVGVzdCgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdENsYXNzTmFtZUdlbmVyaWNzKCkgdGhyb3dzIFRocm93YWJsZSB7CisgICAgZG9UZXN0KCdcbicpCisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0Q2xhc3NOYW1lQW5vbnltb3VzKCkgdGhyb3dzIFRocm93YWJsZSB7CisgICAgZG9UZXN0KCdcbicpCisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0Q2xhc3NOYW1lV2l0aElubmVyKCkgdGhyb3dzIFRocm93YWJsZSB7CisgICAgY29uZmlndXJlKCkKKyAgICBhc3NlcnRTdHJpbmdJdGVtcyAnWnpvbycsICdaem9vLkltcGwnCisgICAgdHlwZSAnXG4nCisgICAgY2hlY2tSZXN1bHQoKQorICB9CisgIHB1YmxpYyB2b2lkIHRlc3RDbGFzc05hbWVXaXRoSW5uZXIyKCkgdGhyb3dzIFRocm93YWJsZSB7IGRvVGVzdCgnXG4nKSB9CisKKyAgcHVibGljIHZvaWQgdGVzdENsYXNzTmFtZVdpdGhJbnN0YW5jZUlubmVyKCkgdGhyb3dzIFRocm93YWJsZSB7IGRvVGVzdCgnXG4nKSB9CisKKyAgcHVibGljIHZvaWQgdGVzdERvdWJsZUZhbHNlKCkgdGhyb3dzIFRocm93YWJsZSB7CisgICAgY29uZmlndXJlQnlGaWxlKGdldFRlc3ROYW1lKGZhbHNlKSArICIuamF2YSIpOworICAgIGFzc2VydEZpcnN0U3RyaW5nSXRlbXMoImZhbHNlIiwgImZlZmVmZWYiLCAiZmxvYXQiLCAiZmluYWxpemUiKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RTYW1lTmFtZWRWYXJpYWJsZUluTmVzdGVkQ2xhc3NlcygpIHRocm93cyBUaHJvd2FibGUgeworICAgIGRvVGVzdCgnXG4nKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RIb25vclVuZGVyc2NvcmVJblByZWZpeCgpIHRocm93cyBUaHJvd2FibGUgeworICAgIGRvVGVzdCgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdE5vU2VtaWNvbG9uQWZ0ZXJFeGlzdGluZ1BhcmVudGhlc2VzRXNwZWNpYWxseUlmSXRzQUNhc3QoKSB0aHJvd3MgVGhyb3dhYmxlIHsgZG9UZXN0KCk7IH0KKyAgcHVibGljIHZvaWQgdGVzdFJldHVybmluZ1R5cGVWYXJpYWJsZSgpIHRocm93cyBUaHJvd2FibGUgeyBkb1Rlc3QoKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0UmV0dXJuaW5nVHlwZVZhcmlhYmxlMigpIHRocm93cyBUaHJvd2FibGUgeyBkb1Rlc3QoKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0UmV0dXJuaW5nVHlwZVZhcmlhYmxlMygpIHRocm93cyBUaHJvd2FibGUgeyBkb1Rlc3QoKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0SW1wb3J0SW5HZW5lcmljVHlwZSgpIHRocm93cyBUaHJvd2FibGUgeworICAgIGNvbmZpZ3VyZSgpCisgICAgbXlGaXh0dXJlLmNvbXBsZXRlKENvbXBsZXRpb25UeXBlLkJBU0lDLCAyKQorICAgIG15Rml4dHVyZS50eXBlKCdcbicpCisgICAgY2hlY2tSZXN1bHQoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RDYXNlVGFpbFR5cGUoKSB0aHJvd3MgVGhyb3dhYmxlIHsgZG9UZXN0KCk7IH0KKworICBkZWYgZG9QcmltaXRpdmVUeXBlVGVzdCgpIHsKKyAgICBjb25maWd1cmUoKQorICAgIGNoZWNrUmVzdWx0QnlGaWxlKGdldFRlc3ROYW1lKGZhbHNlKSArICIuamF2YSIpOworICAgIGFzc2VydFRydWUgJ2Jvb2xlYW4nIGluIG15Rml4dHVyZS5sb29rdXBFbGVtZW50U3RyaW5ncworICB9CisKKyAgcHJpdmF0ZSBkZWYgY29uZmlndXJlKCkgeworICAgIGNvbmZpZ3VyZUJ5RmlsZShnZXRUZXN0TmFtZShmYWxzZSkgKyAiLmphdmEiKQorICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEZpbmFsSW5Gb3JMb29wKCkgdGhyb3dzIFRocm93YWJsZSB7CisgICAgY29uZmlndXJlKCkKKyAgICBhc3NlcnRTdHJpbmdJdGVtcyAnZmluYWwnCisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0RmluYWxJbkZvckxvb3AyKCkgdGhyb3dzIFRocm93YWJsZSB7CisgICAgY29uZmlndXJlKCkKKyAgICBteUZpeHR1cmUuYXNzZXJ0UHJlZmVycmVkQ29tcGxldGlvbkl0ZW1zIDAsICdmaW5hbGl6ZScsICdmaW5hbCcKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RPbmx5Q2xhc3Nlc0luRXh0ZW5kcygpIHRocm93cyBUaHJvd2FibGUgeworICAgIGNvbmZpZ3VyZSgpCisgICAgYXNzZXJ0U3RyaW5nSXRlbXMgJ0lubmVyJworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFByaW1pdGl2ZVR5cGVzSW5Gb3JMb29wKCkgdGhyb3dzIFRocm93YWJsZSB7IGRvUHJpbWl0aXZlVHlwZVRlc3QoKSB9CisgIHB1YmxpYyB2b2lkIHRlc3RQcmltaXRpdmVUeXBlc0luRm9yTG9vcDIoKSB0aHJvd3MgVGhyb3dhYmxlIHsgZG9QcmltaXRpdmVUeXBlVGVzdCgpIH0KKyAgcHVibGljIHZvaWQgdGVzdFByaW1pdGl2ZVR5cGVzSW5Gb3JMb29wMygpIHRocm93cyBUaHJvd2FibGUgeyBkb1ByaW1pdGl2ZVR5cGVUZXN0KCkgfQorICBwdWJsaWMgdm9pZCB0ZXN0UHJpbWl0aXZlVHlwZXNJbkZvckxvb3A0KCkgdGhyb3dzIFRocm93YWJsZSB7IGRvUHJpbWl0aXZlVHlwZVRlc3QoKSB9CisgIHB1YmxpYyB2b2lkIHRlc3RQcmltaXRpdmVUeXBlc0luRm9yTG9vcDUoKSB0aHJvd3MgVGhyb3dhYmxlIHsgZG9QcmltaXRpdmVUeXBlVGVzdCgpIH0KKyAgcHVibGljIHZvaWQgdGVzdFByaW1pdGl2ZVR5cGVzSW5Gb3JMb29wNigpIHRocm93cyBUaHJvd2FibGUgeyBkb1ByaW1pdGl2ZVR5cGVUZXN0KCkgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RQcmltaXRpdmVUeXBlc0luRm9yTG9vcFNwYWNlKCkgdGhyb3dzIFRocm93YWJsZSB7CisgICAgY29uZmlndXJlKCkKKyAgICBteUZpeHR1cmUudHlwZSAnICcKKyAgICBjaGVja1Jlc3VsdEJ5RmlsZShnZXRUZXN0TmFtZShmYWxzZSkgKyAiX2FmdGVyLmphdmEiKQorICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFN1Z2dlc3RJbmFjY2Vzc2libGVPblNlY29uZEludm9jYXRpb24oKSB0aHJvd3MgVGhyb3dhYmxlIHsKKyAgICBjb25maWd1cmUoKQorICAgIGFzc2VydFN0cmluZ0l0ZW1zKCJfYmFyIiwgIl9nb28iKTsKKyAgICBjb21wbGV0ZSgpOworICAgIGFzc2VydFN0cmluZ0l0ZW1zKCJfYmFyIiwgIl9nb28iLCAiX2ZvbyIpOworICAgIGdldExvb2t1cCgpLnNldEN1cnJlbnRJdGVtKGdldExvb2t1cCgpLmdldEl0ZW1zKCkuZ2V0KDIpKTsKKyAgICBzZWxlY3RJdGVtKGxvb2t1cC5pdGVtc1syXSwgTG9va3VwLk5PUk1BTF9TRUxFQ1RfQ0hBUikKKyAgICBjaGVja1Jlc3VsdCgpCisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0Tm9Db21tb25QcmVmaXhJbnNpZGVJZGVudGlmaWVyKCkgdGhyb3dzIFRocm93YWJsZSB7CisgICAgZmluYWwgU3RyaW5nIHBhdGggPSBnZXRUZXN0TmFtZShmYWxzZSkgKyAiLmphdmEiOworICAgIGNvbmZpZ3VyZUJ5RmlsZShwYXRoKTsKKyAgICBjaGVja1Jlc3VsdEJ5RmlsZShwYXRoKTsKKyAgICBhc3NlcnRTdHJpbmdJdGVtcygiZmFpMSIsICJmYWkyIik7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0UHJvdGVjdGVkSW5hY2Nlc3NpYmxlT25TZWNvbmRJbnZvY2F0aW9uKCkgdGhyb3dzIFRocm93YWJsZSB7CisgICAgbXlGaXh0dXJlLmNvbmZpZ3VyZUJ5RmlsZShnZXRUZXN0TmFtZShmYWxzZSkgKyAiLmphdmEiKTsKKyAgICBteUZpeHR1cmUuY29tcGxldGUoQ29tcGxldGlvblR5cGUuQkFTSUMsIDIpOworICAgIG15Rml4dHVyZS50eXBlKCdcbicpCisgICAgY2hlY2tSZXN1bHQoKQorICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFByb3BlcnR5UmVmZXJlbmNlUHJlZml4KCkgdGhyb3dzIFRocm93YWJsZSB7CisgICAgbXlGaXh0dXJlLmFkZEZpbGVUb1Byb2plY3QoInRlc3QucHJvcGVydGllcyIsICJmb28uYmFyPUZvbyEgQmFyISIpLmdldFZpcnR1YWxGaWxlKCk7CisgICAgZG9BbnRpVGVzdCgpCisgIH0KKworICBwcml2YXRlIHZvaWQgZG9UZXN0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgY29uZmlndXJlKCkKKyAgICBjaGVja1Jlc3VsdCgpOworICB9CisKKyAgcHJpdmF0ZSB2b2lkIGRvVGVzdChTdHJpbmcgZmluaXNoQ2hhcikgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgY29uZmlndXJlKCkKKyAgICB0eXBlIGZpbmlzaENoYXIKKyAgICBjaGVja1Jlc3VsdCgpOworICB9CisKKyAgcHJpdmF0ZSB2b2lkIGRvQW50aVRlc3QoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBjb25maWd1cmUoKQorICAgIGNoZWNrUmVzdWx0QnlGaWxlKGdldFRlc3ROYW1lKGZhbHNlKSArICIuamF2YSIpOworICAgIGFzc2VydEVtcHR5KG15SXRlbXMpOworICAgIGFzc2VydE51bGwoZ2V0TG9va3VwKCkpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFNlY29uZEFub255bW91c0NsYXNzUGFyYW1ldGVyKCkgdGhyb3dzIFRocm93YWJsZSB7IGRvVGVzdCgnXG4nKTsgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RTcGFjZUFmdGVyUmV0dXJuKCkgdGhyb3dzIFRocm93YWJsZSB7CisgICAgY29uZmlndXJlKCkKKyAgICB0eXBlICdcbicKKyAgICBjaGVja1Jlc3VsdCgpCisgIH0KKworICBwcml2YXRlIGRlZiBjaGVja1Jlc3VsdCgpIHsKKyAgICBjaGVja1Jlc3VsdEJ5RmlsZShnZXRUZXN0TmFtZShmYWxzZSkgKyAiX2FmdGVyLmphdmEiKQorICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEludGVyc2VjdGlvblR5cGVNZW1iZXJzKCkgdGhyb3dzIFRocm93YWJsZSB7CisgICAgY29uZmlndXJlKCkKKyAgICBhc3NlcnRTdHJpbmdJdGVtcyAiZm9vYSIsICJmb29iIgorICB9CisKKyAgcHVibGljIHZvaWQgdGVzdENhc3RJbnN0YW5jZW9mZWRRdWFsaWZpZXIoKSB0aHJvd3MgVGhyb3dhYmxlIHsgZG9UZXN0KCk7IH0KKyAgcHVibGljIHZvaWQgdGVzdENhc3RJbnN0YW5jZW9mZWRRdWFsaWZpZXJJbkZvcmVhY2goKSB0aHJvd3MgVGhyb3dhYmxlIHsgZG9UZXN0KCk7IH0KKyAgcHVibGljIHZvaWQgdGVzdENhc3RDb21wbGV4SW5zdGFuY2VvZmVkUXVhbGlmaWVyKCkgdGhyb3dzIFRocm93YWJsZSB7IGRvVGVzdCgpOyB9CisKKyAgcHVibGljIHZvaWQgdGVzdENhc3RUb29Db21wbGV4SW5zdGFuY2VvZmVkUXVhbGlmaWVyKCkgdGhyb3dzIFRocm93YWJsZSB7IGRvQW50aVRlc3QoKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0RG9udENhc3RJbnN0YW5jZW9mZWRRdWFsaWZpZXIoKSB0aHJvd3MgVGhyb3dhYmxlIHsgZG9UZXN0KCk7IH0KKyAgcHVibGljIHZvaWQgdGVzdFF1YWxpZmllckNhc3RpbmdXaXRoVW5rbm93bkFzc2lnbm1lbnRzKCkgdGhyb3dzIFRocm93YWJsZSB7IGRvVGVzdCgpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RRdWFsaWZpZXJDYXN0aW5nQmVmb3JlTHQoKSB0aHJvd3MgVGhyb3dhYmxlIHsgZG9UZXN0KCk7IH0KKyAgcHVibGljIHZvaWQgdGVzdE5vUmV0dXJuSW5UZXJuYXJ5KCkgdGhyb3dzIFRocm93YWJsZSB7IGRvVGVzdCgpOyB9CisKKyAgcHVibGljIHZvaWQgdGVzdE9yQXNzaWdubWVudERmYSgpIHRocm93cyBUaHJvd2FibGUgeyBkb1Rlc3QoKTsgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RXaWxkY2FyZHNJbkxvb2t1cCgpIHRocm93cyBFeGNlcHRpb24geworICAgIGNvbmZpZ3VyZSgpCisgICAgYXNzZXJ0Tm90TnVsbChnZXRMb29rdXAoKSk7CisgICAgdHlwZSgnKmZ6Jyk7CisgICAgYXNzZXJ0ICFsb29rdXAKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RTbWFydEVudGVyV3JhcHNDb25zdHJ1Y3RvckNhbGwoKSB0aHJvd3MgVGhyb3dhYmxlIHsgZG9UZXN0KExvb2t1cC5DT01QTEVURV9TVEFURU1FTlRfU0VMRUNUX0NIQVIgYXMgU3RyaW5nKSB9CisgIHB1YmxpYyB2b2lkIHRlc3RUYWJSZXBsYWNlc01ldGhvZE5hbWVXaXRoTG9jYWxWYXJpYWJsZU5hbWUoKSB0aHJvd3MgVGhyb3dhYmxlIHsgZG9UZXN0KCdcdCcpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RNZXRob2RQYXJhbWV0ZXJBbm5vdGF0aW9uQ2xhc3MoKSB0aHJvd3MgVGhyb3dhYmxlIHsgZG9UZXN0KCk7IH0KKyAgcHVibGljIHZvaWQgdGVzdFByaW1pdGl2ZUNhc3RPdmVyd3JpdGUoKSB0aHJvd3MgVGhyb3dhYmxlIHsgZG9UZXN0ICdcdCcgfQorICBwdWJsaWMgdm9pZCB0ZXN0Q2xhc3NSZWZlcmVuY2VJbkZvcigpIHRocm93cyBUaHJvd2FibGUgeyBkb1Rlc3QgJyAnIH0KKyAgcHVibGljIHZvaWQgdGVzdENsYXNzUmVmZXJlbmNlSW5Gb3IyKCkgdGhyb3dzIFRocm93YWJsZSB7IGRvVGVzdCAnICcgfQorICBwdWJsaWMgdm9pZCB0ZXN0Q2xhc3NSZWZlcmVuY2VJbkZvcjMoKSB0aHJvd3MgVGhyb3dhYmxlIHsKKyAgICBDb2RlSW5zaWdodFNldHRpbmdzLmluc3RhbmNlLkNPTVBMRVRJT05fQ0FTRV9TRU5TSVRJVkUgPSBDb2RlSW5zaWdodFNldHRpbmdzLk5PTkUKKyAgICB0cnkgeworICAgICAgZG9UZXN0ICcgJworICAgIH0KKyAgICBmaW5hbGx5IHsKKyAgICAgIENvZGVJbnNpZ2h0U2V0dGluZ3MuaW5zdGFuY2UuQ09NUExFVElPTl9DQVNFX1NFTlNJVElWRSA9IENvZGVJbnNpZ2h0U2V0dGluZ3MuRklSU1RfTEVUVEVSCisgICAgfQorICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEVudW1Db25zdGFudEZyb21FbnVtTWVtYmVyKCkgdGhyb3dzIFRocm93YWJsZSB7IGRvVGVzdCgpOyB9CisKKyAgcHVibGljIHZvaWQgdGVzdFByaW1pdGl2ZU1ldGhvZFBhcmFtZXRlcigpIHRocm93cyBUaHJvd2FibGUgeyBkb1Rlc3QoJ1xuJyk7IH0KKworICBwdWJsaWMgdm9pZCB0ZXN0TmV3RXhwZWN0ZWRDbGFzc1BhcmVucygpIHRocm93cyBUaHJvd2FibGUgeyBkb1Rlc3QoJ1xuJyk7IH0KKworICBwdWJsaWMgdm9pZCB0ZXN0UXVhbGlmeUlubmVyTWVtYmVycygpIHRocm93cyBUaHJvd2FibGUgeyBkb1Rlc3QoJ1xuJykgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RTdWdnZXN0RXhwZWN0ZWRUeXBlTWVtYmVycygpIHRocm93cyBUaHJvd2FibGUgeyBkb1Rlc3QoJ1xuJykgfQorICBwdWJsaWMgdm9pZCB0ZXN0U3VnZ2VzdEV4cGVjdGVkVHlwZU1lbWJlcnNJbkNhbGwoKSB0aHJvd3MgVGhyb3dhYmxlIHsgZG9UZXN0KCdcbicpIH0KKyAgcHVibGljIHZvaWQgdGVzdFN1Z2dlc3RFeHBlY3RlZFR5cGVNZW1iZXJzSW5Bbm5vKCkgdGhyb3dzIFRocm93YWJsZSB7IGRvVGVzdCgnXG4nKSB9CisgIHB1YmxpYyB2b2lkIHRlc3RFeHBlY3RlZFR5cGVzRG90U2VsZWN0c0l0ZW0oKSB0aHJvd3MgVGhyb3dhYmxlIHsgZG9UZXN0KCcuJykgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RFeHBlY3RlZFR5cGVNZW1iZXJzVmVyc3VzU3RhdGljSW1wb3J0cygpIHRocm93cyBUaHJvd2FibGUgeworICAgIGNvbmZpZ3VyZSgpCisgICAgYXNzZXJ0U3RyaW5nSXRlbXMoJ1hGT08nLCAnWEZPWCcpCisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0RG91YmxlRXhwZWN0ZWRUeXBlRmFjdG9yeU1ldGhvZCgpIHRocm93cyBUaHJvd2FibGUgeworICAgIGNvbmZpZ3VyZSgpCisgICAgYXNzZXJ0U3RyaW5nSXRlbXMoJ0tleScsICdjcmVhdGUnLCAnY3JlYXRlJykKKyAgICBhc3NlcnQgcmVuZGVyRWxlbWVudChteUl0ZW1zWzFdKS5pdGVtVGV4dCA9PSAnS2V5LjxCb29sZWFuPmNyZWF0ZScKKyAgICBhc3NlcnQgcmVuZGVyRWxlbWVudChteUl0ZW1zWzJdKS5pdGVtVGV4dCA9PSAnS2V5LmNyZWF0ZScKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RTdWdnZXN0RXhwZWN0ZWRUeXBlTWVtYmVyc05vbkltcG9ydGVkKCkgdGhyb3dzIFRocm93YWJsZSB7CisgICAgbXlGaXh0dXJlLmFkZENsYXNzKCJwYWNrYWdlIGZvbzsgcHVibGljIGNsYXNzIFN1cGVyIHsgcHVibGljIHN0YXRpYyBmaW5hbCBTdXBlciBGT08gPSBudWxsOyB9IikKKyAgICBteUZpeHR1cmUuYWRkQ2xhc3MoInBhY2thZ2UgZm9vOyBwdWJsaWMgY2xhc3MgVXNhZ2UgeyBwdWJsaWMgc3RhdGljIHZvaWQgZm9vKFN1cGVyIHMpIHt9IH0iKQorICAgIGRvVGVzdCgnXG4nKQorICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFN0YXRpY2FsbHlJbXBvcnRlZElubmVyKCkgdGhyb3dzIFRocm93YWJsZSB7CisgICAgY29uZmlndXJlKCkKKyAgICBhc3NlcnRTdHJpbmdJdGVtcygnQUlPSW5uZXInLCAnQXJyYXlJbmRleE91dE9mQm91bmRzRXhjZXB0aW9uJykKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RDbGFzc05hbWVJbklmQmVmb3JlSWRlbnRpZmllcigpIHRocm93cyBUaHJvd2FibGUgeworICAgIG15Rml4dHVyZS5hZGRDbGFzcygicHVibGljIGNsYXNzIEFCQ0RFRkZGRkYge30iKQorICAgIGRvVGVzdCgnXG4nKQorICB9CisKKyAgcHVibGljIHZvaWQgdGVzdENsYXNzTmFtZVdpdGhJbm5lcnNUYWIoKSB0aHJvd3MgVGhyb3dhYmxlIHsgZG9UZXN0KCdcdCcpIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0Q2xhc3NOYW1lV2l0aEdlbmVyaWNzVGFiKCkgdGhyb3dzIFRocm93YWJsZSB7ZG9UZXN0KCdcdCcpIH0KKyAgcHVibGljIHZvaWQgdGVzdENsYXNzTmFtZVdpdGhHZW5lcmljc1RhYjIoKSB0aHJvd3MgVGhyb3dhYmxlIHtkb1Rlc3QoJ1x0JykgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RMaXZlVGVtcGxhdGVQcmVmaXhUYWIoKSB0aHJvd3MgVGhyb3dhYmxlIHtkb1Rlc3QoJ1x0JykgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RPbmx5QW5ub3RhdGlvbnNBZnRlckF0KCkgdGhyb3dzIFRocm93YWJsZSB7IGRvVGVzdCgpIH0KKyAgcHVibGljIHZvaWQgdGVzdE9ubHlBbm5vdGF0aW9uc0FmdGVyQXQyKCkgdGhyb3dzIFRocm93YWJsZSB7IGRvVGVzdCgpIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0T25seUV4Y2VwdGlvbnNJbkNhdGNoMSgpIHRocm93cyBFeGNlcHRpb24geyBkb1Rlc3QoJ1xuJykgfQorICBwdWJsaWMgdm9pZCB0ZXN0T25seUV4Y2VwdGlvbnNJbkNhdGNoMigpIHRocm93cyBFeGNlcHRpb24geyBkb1Rlc3QoJ1xuJykgfQorICBwdWJsaWMgdm9pZCB0ZXN0T25seUV4Y2VwdGlvbnNJbkNhdGNoMygpIHRocm93cyBFeGNlcHRpb24geyBkb1Rlc3QoJ1xuJykgfQorICBwdWJsaWMgdm9pZCB0ZXN0T25seUV4Y2VwdGlvbnNJbkNhdGNoNCgpIHRocm93cyBFeGNlcHRpb24geyBkb1Rlc3QoJ1xuJykgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RDb21tYUFmdGVyVmFyaWFibGUoKSB0aHJvd3MgVGhyb3dhYmxlIHsgZG9UZXN0KCcsJykgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RDbGFzc0FuZ2xlQnJhY2tldCgpIHRocm93cyBUaHJvd2FibGUgeyBkb1Rlc3QoJzwnKSB9CisgIHB1YmxpYyB2b2lkIHRlc3ROb0FyZ3NNZXRob2RTcGFjZSgpIHRocm93cyBUaHJvd2FibGUgeyBkb1Rlc3QoJyAnKSB9CisKKyAgcHVibGljIHZvaWQgdGVzdENsYXNzU3F1YXJlQnJhY2tldCgpIHRocm93cyBUaHJvd2FibGUgeyBkb1Rlc3QoJ1snKSB9CisgIHB1YmxpYyB2b2lkIHRlc3RQcmltaXRpdmVTcXVhcmVCcmFja2V0KCkgdGhyb3dzIFRocm93YWJsZSB7IGRvVGVzdCgnWycpIH0KKyAgcHVibGljIHZvaWQgdGVzdFZhcmlhYmxlU3F1YXJlQnJhY2tldCgpIHRocm93cyBUaHJvd2FibGUgeyBkb1Rlc3QoJ1snKSB9CisgIHB1YmxpYyB2b2lkIHRlc3RNZXRob2RTcXVhcmVCcmFja2V0KCkgdGhyb3dzIFRocm93YWJsZSB7IGRvVGVzdCgnWycpIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0TWV0aG9kUGFyYW1ldGVyVHlwZURvdCgpIHRocm93cyBUaHJvd2FibGUgeyBkb0FudGlUZXN0KCkgfQorICBwdWJsaWMgdm9pZCB0ZXN0TmV3R2VuZXJpY0NsYXNzKCkgdGhyb3dzIFRocm93YWJsZSB7IGRvVGVzdCgnXG4nKSB9CisgIHB1YmxpYyB2b2lkIHRlc3ROZXdHZW5lcmljSW50ZXJmYWNlKCkgdGhyb3dzIFRocm93YWJsZSB7IGRvVGVzdCgpIH0KKyAgcHVibGljIHZvaWQgdGVzdEVudW1Qcml2YXRlRmluYWwoKSB0aHJvd3MgVGhyb3dhYmxlIHsgZG9UZXN0KCkgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RTd2l0Y2hDb25zdGFudHNGcm9tUmVmZXJlbmNlZENsYXNzKCkgdGhyb3dzIFRocm93YWJsZSB7IGRvVGVzdCgnXG4nKSB9CisKKyAgcHVibGljIHZvaWQgdGVzdFVuZmluaXNoZWRNZXRob2RUeXBlUGFyYW1ldGVyKCkgdGhyb3dzIFRocm93YWJsZSB7CisgICAgY29uZmlndXJlKCkKKyAgICBhc3NlcnRTdHJpbmdJdGVtcygiTXlQYXJhbWV0ZXIiLCAiTXlTZWNvbmRQYXJhbWV0ZXIiKQorICB9CisgIHB1YmxpYyB2b2lkIHRlc3RVbmZpbmlzaGVkTWV0aG9kVHlwZVBhcmFtZXRlcjIoKSB0aHJvd3MgVGhyb3dhYmxlIHsKKyAgICBjb25maWd1cmUoKQorICAgIGFzc2VydFN0cmluZ0l0ZW1zKCJNeVBhcmFtZXRlciIsICJNeVNlY29uZFBhcmFtZXRlciIpCisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0U3VwZXJQcm90ZWN0ZWRNZXRob2QoKSB0aHJvd3MgVGhyb3dhYmxlIHsKKyAgICBteUZpeHR1cmUuYWRkQ2xhc3MgIiIicGFja2FnZSBmb287CisgICAgICBwdWJsaWMgY2xhc3MgQmFyIHsKKyAgICAgICAgICBwcm90ZWN0ZWQgdm9pZCBmb28oKSB7IH0KKyAgICAgIH0iIiIKKyAgICBkb1Rlc3QoKQorICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFRvcExldmVsQ2xhc3Nlc0Zyb21QYWNrYWdlZCgpIHRocm93cyBUaHJvd2FibGUgeworICAgIG15Rml4dHVyZS5hZGRDbGFzcyAicHVibGljIGNsYXNzIEZvb29vbyB7fSIKKyAgICBmaW5hbCB0ZXh0ID0gInBhY2thZ2UgZm9vOyBjbGFzcyBCYXIgeyBGb29vPGNhcmV0PiB9IgorICAgIGRlZiBmaWxlID0gbXlGaXh0dXJlLmFkZEZpbGVUb1Byb2plY3QoImZvby9CYXIuamF2YSIsIHRleHQpCisgICAgbXlGaXh0dXJlLmNvbmZpZ3VyZUZyb21FeGlzdGluZ1ZpcnR1YWxGaWxlIGZpbGUudmlydHVhbEZpbGUKKyAgICBhc3NlcnRFbXB0eSBteUZpeHR1cmUuY29tcGxldGVCYXNpYygpCisgICAgbXlGaXh0dXJlLmNoZWNrUmVzdWx0IHRleHQKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RSaWdodFNoaWZ0KCkgdGhyb3dzIFRocm93YWJsZSB7CisgICAgY29uZmlndXJlKCkKKyAgICBhc3NlcnRTdHJpbmdJdGVtcygibXlGaWVsZDEiLCAibXlGaWVsZDIiKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RBZnRlckNvbW1vblByZWZpeCgpIHRocm93cyBUaHJvd2FibGUgeworICAgIGNvbmZpZ3VyZSgpCisgICAgdHlwZSAnZXEnCisgICAgYXNzZXJ0Rmlyc3RTdHJpbmdJdGVtcygiZXF1YWxzIiwgImVxdWFsc0lnbm9yZUNhc2UiKTsKKyAgICBjb21wbGV0ZSgpCisgICAgYXNzZXJ0Rmlyc3RTdHJpbmdJdGVtcygiZXF1YWxzIiwgImVxdWFsc0lnbm9yZUNhc2UiKTsKKyAgICB0eXBlICcoJworICAgIGNoZWNrUmVzdWx0KCkKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RDbGFzc05hbWVJbnNpZGVJZGVudGlmaWVySW5JZigpIHRocm93cyBUaHJvd2FibGUgeworICAgIGNvbmZpZ3VyZSgpCisgICAgbXlGaXh0dXJlLmNvbXBsZXRlKENvbXBsZXRpb25UeXBlLkJBU0lDLCAyKQorICAgIHR5cGUgJ1xuJworICAgIGNoZWNrUmVzdWx0KCkKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RLZXl3b3JkU21hcnRFbnRlcigpIHsKKyAgICBjb25maWd1cmUoKQorICAgIG15Rml4dHVyZS5wZXJmb3JtRWRpdG9yQWN0aW9uKElkZUFjdGlvbnMuQUNUSU9OX0NIT09TRV9MT09LVVBfSVRFTV9DT01QTEVURV9TVEFURU1FTlQpCisgICAgY2hlY2tSZXN1bHQoKQorICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEltcG9ydFN0cmluZ1ZhbHVlKCkgdGhyb3dzIFRocm93YWJsZSB7CisgICAgbXlGaXh0dXJlLmFkZENsYXNzKCJwYWNrYWdlIGZvbzsgcHVibGljIGNsYXNzIFN0cmluZ1ZhbHVlIHt9IikKKyAgICBteUZpeHR1cmUuYWRkQ2xhc3MoInBhY2thZ2UgamF2YS5sYW5nOyBjbGFzcyBTdHJpbmdWYWx1ZSB7fSIpCisgICAgY29uZmlndXJlKCkKKyAgICBteUZpeHR1cmUuY29tcGxldGUoQ29tcGxldGlvblR5cGUuQkFTSUMsIDIpCisgICAgdHlwZSAnICcKKyAgICBjaGVja1Jlc3VsdCgpCisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0UHJpbWl0aXZlQXJyYXlXaXRoUkJyYWNlKCkgdGhyb3dzIFRocm93YWJsZSB7IGRvVGVzdCAnWycgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RTdWdnZXN0TWVtYmVyc09mU3RhdGljYWxseUltcG9ydGVkQ2xhc3NlcygpIHRocm93cyBFeGNlcHRpb24geworICAgIG15Rml4dHVyZS5hZGRDbGFzcygiIiJwYWNrYWdlIGZvbzsKKyAgICBwdWJsaWMgY2xhc3MgRm9vIHsKKyAgICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBmb28oKSB7fQorICAgICAgcHVibGljIHN0YXRpYyB2b2lkIGJhcigpIHt9CisgICAgfQorICAgICIiIikKKyAgICBkb1Rlc3QoJ1xuJykKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RTdWdnZXN0TWVtYmVyc09mU3RhdGljYWxseUltcG9ydGVkQ2xhc3Nlc1VucXVhbGlmaWVkT25seSgpIHRocm93cyBFeGNlcHRpb24geworICAgIGRlZiBvbGQgPSBDb2RlSW5zaWdodFNldHRpbmdzLmluc3RhbmNlLlNIT1dfU1RBVElDX0FGVEVSX0lOU1RBTkNFCisgICAgQ29kZUluc2lnaHRTZXR0aW5ncy5pbnN0YW5jZS5TSE9XX1NUQVRJQ19BRlRFUl9JTlNUQU5DRSA9IHRydWUKKworICAgIHRyeSB7CisgICAgICBteUZpeHR1cmUuYWRkQ2xhc3MoIiIicGFja2FnZSBmb287CisgICAgICBwdWJsaWMgY2xhc3MgRm9vIHsKKyAgICAgICAgcHVibGljIHN0YXRpYyB2b2lkIGZvbygpIHt9CisgICAgICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBiYXIoKSB7fQorICAgICAgfQorICAgICAgIiIiKQorICAgICAgY29uZmlndXJlKCkKKyAgICAgIGFzc2VydE9uZUVsZW1lbnQobXlGaXh0dXJlLmdldExvb2t1cEVsZW1lbnRzKCkpCisgICAgICBteUZpeHR1cmUudHlwZSAnXHQnCisgICAgICBjaGVja1Jlc3VsdCgpCisgICAgfQorICAgIGZpbmFsbHkgeworICAgICAgQ29kZUluc2lnaHRTZXR0aW5ncy5pbnN0YW5jZS5TSE9XX1NUQVRJQ19BRlRFUl9JTlNUQU5DRSA9IG9sZAorICAgIH0KKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RJbnN0YW5jZU1hZ2ljTWV0aG9kKCkgdGhyb3dzIEV4Y2VwdGlvbiB7IGRvVGVzdCgpIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0Tm9Eb3RPdmVyd3JpdGUoKSB0aHJvd3MgRXhjZXB0aW9uIHsgZG9UZXN0KCcuJykgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RTdGF0aWNJbm5lckV4dGVuZGluZ091dGVyKCkgdGhyb3dzIEV4Y2VwdGlvbiB7IGRvVGVzdCgpIH0KKyAgcHVibGljIHZvaWQgdGVzdFByaW1pdGl2ZUNsYXNzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7IGRvVGVzdCgpIH0KKyAgcHVibGljIHZvaWQgdGVzdFByaW1pdGl2ZUFycmF5Q2xhc3MoKSB0aHJvd3MgRXhjZXB0aW9uIHsgZG9UZXN0KCkgfQorICBwdWJsaWMgdm9pZCB0ZXN0UHJpbWl0aXZlQXJyYXlPbmx5Q2xhc3MoKSB0aHJvd3MgRXhjZXB0aW9uIHsgZG9BbnRpVGVzdCgpIH0KKyAgcHVibGljIHZvaWQgdGVzdFByaW1pdGl2ZUFycmF5SW5Bbm5vKCkgdGhyb3dzIEV4Y2VwdGlvbiB7IGRvVGVzdCgpIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0TmV3Q2xhc3NBbmdsZUJyYWNrZXQoKSB0aHJvd3MgRXhjZXB0aW9uIHsgZG9UZXN0KCc8JykgfQorICBwdWJsaWMgdm9pZCB0ZXN0TmV3Q2xhc3NBbmdsZUJyYWNrZXRFeHBlY3RlZCgpIHRocm93cyBFeGNlcHRpb24geyBkb1Rlc3QoJzwnKSB9CisgIHB1YmxpYyB2b2lkIHRlc3ROZXdDbGFzc1NxdWFyZUJyYWNrZXQoKSB0aHJvd3MgRXhjZXB0aW9uIHsgZG9UZXN0KCdbJykgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RNZXRob2RDb2xvbigpIHRocm93cyBFeGNlcHRpb24geyBkb1Rlc3QoJzonKSB9CisgIHB1YmxpYyB2b2lkIHRlc3RWYXJpYWJsZUNvbG9uKCkgdGhyb3dzIEV4Y2VwdGlvbiB7IGRvVGVzdCgnOicpIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0Tm9NZXRob2RzSW5QYXJhbWV0ZXJUeXBlKCkgeworICAgIGNvbmZpZ3VyZSgpCisgICAgYXNzZXJ0Rmlyc3RTdHJpbmdJdGVtcyAiZmluYWwiLCAiZmxvYXQiCisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0Tm9uSW1wb3J0ZWRDbGFzc0luQW5ub3RhdGlvbigpIHsKKyAgICBteUZpeHR1cmUuYWRkQ2xhc3MoInBhY2thZ2UgZm9vOyBwdWJsaWMgY2xhc3MgWEludGVybmFsVGltZXJTZXJ2aWNlQ29udHJvbGxlciB7fSIpCisgICAgbXlGaXh0dXJlLmNvbmZpZ3VyZUJ5VGV4dCAiYS5qYXZhIiwgIiIiCitjbGFzcyBYSW50ZXJuYWxFcnJvciB7fQorCitAQW5ubyhYSW50ZXJuYWw8Y2FyZXQ+KQorIiIiCisgICAgbXlGaXh0dXJlLmNvbXBsZXRlKENvbXBsZXRpb25UeXBlLkJBU0lDLCAyKQorICAgIGFzc2VydEZpcnN0U3RyaW5nSXRlbXMgIlhJbnRlcm5hbEVycm9yIiwgIlhJbnRlcm5hbFRpbWVyU2VydmljZUNvbnRyb2xsZXIiCisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0QW5ub3RhdGlvbkNsYXNzRnJvbVdpdGhpbkFubm90YXRpb24oKSB7IGRvVGVzdCgpIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0U3RhdGljYWxseUltcG9ydGVkRmllbGRzVHdpY2UoKSB7CisgICAgbXlGaXh0dXJlLmFkZENsYXNzKCIiIgorICAgICAgY2xhc3MgRm9vIHsKKyAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgYVpPTzsKKyAgICAgIH0KKyAgICAiIiIpCisgICAgbXlGaXh0dXJlLmNvbmZpZ3VyZUJ5VGV4dCgiYS5qYXZhIiwgIiIiCisgICAgICBpbXBvcnQgc3RhdGljIEZvby4qCisgICAgICBjbGFzcyBCYXIge3sKKyAgICAgICAgYVo8Y2FyZXQ+YQorICAgICAgfX0KKyAgICAiIiIpCisgICAgYXNzZXJ0T25lRWxlbWVudCBteUZpeHR1cmUuY29tcGxldGVCYXNpYygpCisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0U3RhdGVtZW50S2V5d29yZHMoKSB7CisgICAgbXlGaXh0dXJlLmNvbmZpZ3VyZUJ5VGV4dCgiYS5qYXZhIiwgIiIiCisgICAgICBjbGFzcyBCYXIge3sKKyAgICAgICAgPGNhcmV0Pnh4eAorICAgICAgfX0KKyAgICAiIiIpCisgICAgbXlGaXh0dXJlLmNvbXBsZXRlQmFzaWMoKQorICAgIGZpbmFsIGRlZiBzdHJpbmdzID0gbXlGaXh0dXJlLmxvb2t1cEVsZW1lbnRTdHJpbmdzCisgICAgYXNzZXJ0VHJ1ZSAnaWYnIGluIHN0cmluZ3MKKyAgICBhc3NlcnRUcnVlICd3aGlsZScgaW4gc3RyaW5ncworICAgIGFzc2VydFRydWUgJ2RvJyBpbiBzdHJpbmdzCisgICAgYXNzZXJ0VHJ1ZSAnbmV3JyBpbiBzdHJpbmdzCisgICAgYXNzZXJ0VHJ1ZSAndHJ5JyBpbiBzdHJpbmdzCisKKyAgICBzdHJpbmdzLnJlbW92ZSAnbmV3JworICAgIGFzc2VydEZhbHNlICduZXcnIGluIHN0cmluZ3MKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RFeHByZXNzaW9uS2V5d29yZHMoKSB7CisgICAgbXlGaXh0dXJlLmNvbmZpZ3VyZUJ5VGV4dCgiYS5qYXZhIiwgIiIiCisgICAgICBjbGFzcyBCYXIge3sKKyAgICAgICAgZm9vKDxjYXJldD54eHgpCisgICAgICB9fQorICAgICIiIikKKyAgICBteUZpeHR1cmUuY29tcGxldGVCYXNpYygpCisgICAgZmluYWwgZGVmIHN0cmluZ3MgPSBteUZpeHR1cmUubG9va3VwRWxlbWVudFN0cmluZ3MKKyAgICBhc3NlcnRUcnVlICduZXcnIGluIHN0cmluZ3MKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RJbXBvcnRBc3RlcmlzaygpIHsKKyAgICBteUZpeHR1cmUuY29uZmlndXJlQnlUZXh0ICJhLmphdmEiLCAiaW1wb3J0IGphdmEubGFuZy48Y2FyZXQ+IgorICAgIG15Rml4dHVyZS5jb21wbGV0ZUJhc2ljKCkKKyAgICBteUZpeHR1cmUudHlwZSAnKjsnCisgICAgbXlGaXh0dXJlLmNoZWNrUmVzdWx0ICJpbXBvcnQgamF2YS5sYW5nLio7PGNhcmV0PiIKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3REb250UHJlc2VsZWN0Q2FzZUluc2Vuc2l0aXZlUHJlZml4TWF0Y2goKSB7CisgICAgQ29kZUluc2lnaHRTZXR0aW5ncy5pbnN0YW5jZS5DT01QTEVUSU9OX0NBU0VfU0VOU0lUSVZFID0gQ29kZUluc2lnaHRTZXR0aW5ncy5OT05FCisgICAgdHJ5IHsKKyAgICAgIG15Rml4dHVyZS5jb25maWd1cmVCeVRleHQgImEuamF2YSIsICJpbXBvcnQgamF2YS5pby4qOyBjbGFzcyBGb28ge3sgaW50IGZpbGVTaXplOyBmaWw8Y2FyZXQ+eCB9fSIKKyAgICAgIG15Rml4dHVyZS5jb21wbGV0ZUJhc2ljKCkKKyAgICAgIGFzc2VydCBsb29rdXAuY3VycmVudEl0ZW0ubG9va3VwU3RyaW5nID09ICdmaWxlU2l6ZScKKyAgICAgIG15Rml4dHVyZS50eXBlKCdlJykKKyAgICAgIAorICAgICAgYXNzZXJ0IGxvb2t1cC5pdGVtc1swXS5sb29rdXBTdHJpbmcgPT0gJ0ZpbGUnCisgICAgICBhc3NlcnQgbG9va3VwLml0ZW1zWzFdLmxvb2t1cFN0cmluZyA9PSAnZmlsZVNpemUnCisgICAgICBhc3NlcnQgbG9va3VwLmN1cnJlbnRJdGVtID09IGxvb2t1cC5pdGVtc1sxXQorICAgIH0KKyAgICBmaW5hbGx5IHsKKyAgICAgIENvZGVJbnNpZ2h0U2V0dGluZ3MuaW5zdGFuY2UuQ09NUExFVElPTl9DQVNFX1NFTlNJVElWRSA9IENvZGVJbnNpZ2h0U2V0dGluZ3MuRklSU1RfTEVUVEVSCisgICAgfQorICB9CisKKyAgcHVibGljIHZvaWQgdGVzdE5vR2VuZXJpY3NXaGVuQ2hvb3NpbmdXaXRoUGFyZW4oKSB7IGRvVGVzdCgnTWEoJykgfQorCisgIHB1YmxpYyB2b2lkIHRlc3ROb0Nsb3NpbmdXaGVuQ2hvb3NpbmdXaXRoUGFyZW5CZWZvcmVJZGVudGlmaWVyKCkgeyBkb1Rlc3QgJygnIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0UGFja2FnZUluTWVtYmVyVHlwZSgpIHsgZG9UZXN0KCkgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RDb25zdGFudEluQW5ubygpIHsgZG9UZXN0KCkgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RJbm5lckNsYXNzSW5FeHRlbmRzR2VuZXJpY3MoKSB7CisgICAgZGVmIHRleHQgPSAicGFja2FnZSBiYXI7IGNsYXNzIEZvbyBleHRlbmRzIExpc3Q8SW5uZTxjYXJldD4+IHsgcHVibGljIHN0YXRpYyBjbGFzcyBJbm5lciB7fSB9IgorICAgIG15Rml4dHVyZS5jb25maWd1cmVGcm9tRXhpc3RpbmdWaXJ0dWFsRmlsZShteUZpeHR1cmUuYWRkQ2xhc3ModGV4dCkuY29udGFpbmluZ0ZpbGUudmlydHVhbEZpbGUpCisgICAgbXlGaXh0dXJlLmNvbXBsZXRlQmFzaWMoKQorICAgIG15Rml4dHVyZS50eXBlKCdcbicpCisgICAgbXlGaXh0dXJlLmNoZWNrUmVzdWx0KHRleHQucmVwbGFjZSgnSW5uZTxjYXJldD4nLCAnRm9vLklubmVyPGNhcmV0PicpKQorICB9CisKKyAgcHVibGljIHZvaWQgdGVzdENsYXNzTmFtZURvdCgpIHsgZG9UZXN0KCcuJykgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RDbGFzc05hbWVEb3RCZWZvcmVDYWxsKCkgeworICAgIG15Rml4dHVyZS5hZGRDbGFzcygicGFja2FnZSBmb287IHB1YmxpYyBjbGFzcyBGaWxlSW5wdXRTdHJlYW1TbXRoIHt9IikKKyAgICBteUZpeHR1cmUuY29uZmlndXJlQnlGaWxlKGdldFRlc3ROYW1lKGZhbHNlKSArICIuamF2YSIpCisgICAgUHNpRG9jdW1lbnRNYW5hZ2VyLmdldEluc3RhbmNlKHByb2plY3QpLmNvbW1pdEFsbERvY3VtZW50cygpCisgICAgdHlwZSAnXGInCisgICAgUHNpRG9jdW1lbnRNYW5hZ2VyLmdldEluc3RhbmNlKHByb2plY3QpLmNvbW1pdEFsbERvY3VtZW50cygpCisgICAgbXlGaXh0dXJlLmNvbXBsZXRlKENvbXBsZXRpb25UeXBlLkJBU0lDLCAyKQorICAgIGFzc2VydCBsb29rdXAKKyAgICB0eXBlICcuJworICAgIGNoZWNrUmVzdWx0KCkKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3ROb1JldHVybkFmdGVyRG90KCkgeworICAgIGNvbmZpZ3VyZSgpCisgICAgYXNzZXJ0ICEoJ3JldHVybicgaW4gbXlGaXh0dXJlLmxvb2t1cEVsZW1lbnRTdHJpbmdzKQorICB9CisKKyAgcHVibGljIHZvaWQgdGVzdER1cGxpY2F0ZUV4cGVjdGVkVHlwZUluVHlwZUFyZ3VtZW50TGlzdCgpIHsKKyAgICBjb25maWd1cmUoKQorICAgIGRlZiBpdGVtcyA9IG15Rml4dHVyZS5sb29rdXBFbGVtZW50cy5maW5kQWxsIHsgaXQubG9va3VwU3RyaW5nID09ICdTdHJpbmcnIH0KKyAgICBhc3NlcnQgaXRlbXMuc2l6ZSgpID09IDEKKyAgICBhc3NlcnQgTG9va3VwRWxlbWVudFByZXNlbnRhdGlvbi5yZW5kZXJFbGVtZW50KGl0ZW1zWzBdKS50YWlsVGV4dD8uY29udGFpbnMoJ2phdmEubGFuZycpCisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0U2FtZVNpZ25hdHVyZSgpIHsKKyAgICBjb25maWd1cmUoKQorICAgIG15Rml4dHVyZS5hc3NlcnRQcmVmZXJyZWRDb21wbGV0aW9uSXRlbXMoMCwgJ3MnLCAncywgZmlsZScsICdzLCBmaWxlLCBhJykKKyAgICBsb29rdXAuc2V0Q3VycmVudEl0ZW0obG9va3VwLml0ZW1zWzJdKQorICAgIG15Rml4dHVyZS50eXBlKCdcbicpCisgICAgY2hlY2tSZXN1bHQoKQorICB9CisKKyAgcHVibGljIHZvaWQgdGVzdE5vUGFyZW50aGVzZXNBcm91bmRDYWxsUXVhbGlmaWVyKCkgeyBkb1Rlc3QoKSB9CisKKyAgcHVibGljIHZvaWQgdGVzdEFsbEFzc2VydENsYXNzZXNNZXRob2RzKCkgeworICAgIG15Rml4dHVyZS5hZGRDbGFzcyAncGFja2FnZSBmb287IHB1YmxpYyBjbGFzcyBBc3NlcnQgeyBwdWJsaWMgc3RhdGljIGJvb2xlYW4gZm9vKCkge30gfScKKyAgICBteUZpeHR1cmUuYWRkQ2xhc3MgJ3BhY2thZ2UgYmFyOyBwdWJsaWMgY2xhc3MgQXNzZXJ0IHsgcHVibGljIHN0YXRpYyBib29sZWFuIGJhcigpIHt9IH0nCisgICAgY29uZmlndXJlKCkKKyAgICBhc3NlcnQgbXlGaXh0dXJlLmxvb2t1cEVsZW1lbnRTdHJpbmdzID09IFsnQXNzZXJ0LmJhcicsICdBc3NlcnQuZm9vJ10KKyAgICBteUZpeHR1cmUudHlwZSAnXG4nCisgICAgY2hlY2tSZXN1bHQoKQorICB9CisKKyAgcHVibGljIHZvaWQgdGVzdENhc3RWaXN1YWxseSgpIHsKKyAgICBjb25maWd1cmUoKQorICAgIGRlZiBwID0gTG9va3VwRWxlbWVudFByZXNlbnRhdGlvbi5yZW5kZXJFbGVtZW50KG15Rml4dHVyZS5sb29rdXBFbGVtZW50c1swXSkKKyAgICBhc3NlcnQgcC5pdGVtVGV4dCA9PSAnZ2V0VmFsdWUnCisgICAgYXNzZXJ0IHAuaXRlbVRleHRCb2xkCisgICAgYXNzZXJ0IHAudHlwZVRleHQgPT0gJ0ZvbycKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RTdWdnZXN0RW1wdHlTZXQoKSB7CisgICAgY29uZmlndXJlKCkKKyAgICBhc3NlcnQgJ2VtcHR5U2V0JyA9PSBteUZpeHR1cmUubG9va3VwRWxlbWVudFN0cmluZ3NbMF0KKyAgICB0eXBlICdcbicKKyAgICBjaGVja1Jlc3VsdCgpCisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0U3VnZ2VzdEFsbFR5cGVBcmd1bWVudHMoKSB7CisgICAgY29uZmlndXJlKCkKKyAgICBhc3NlcnQgJ1N0cmluZywgU3RyaW5nJyA9PSBsb29rdXAuaXRlbXNbMV0ubG9va3VwU3RyaW5nCisgICAgbG9va3VwLmN1cnJlbnRJdGVtID0gbG9va3VwLml0ZW1zWzFdCisgICAgdHlwZSAnXG4nCisgICAgY2hlY2tSZXN1bHQoKQorCisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0TGlzdEFycmF5TGlzdENhc3QoKSB7IGRvVGVzdCgnXG4nKSB9CisgIHB1YmxpYyB2b2lkIHRlc3RJbnRlcmZhY2VJbXBsZW1lbnRhdGlvbk5vQ2FzdCgpIHsgZG9UZXN0KCkgfQorICBwdWJsaWMgdm9pZCB0ZXN0U3RhdGljYWxseUltcG9ydGVkTWV0aG9kc0JlZm9yZUV4cHJlc3Npb24oKSB7IGRvVGVzdCgpIH0KKyAgcHVibGljIHZvaWQgdGVzdElubmVyQ2hhaW5lZFJldHVyblR5cGUoKSB7IGRvVGVzdCgpIH0KKyAgcHVibGljIHZvaWQgdGVzdE92ZXJ3cml0ZUdlbmVyaWNzQWZ0ZXJOZXcoKSB7IGRvVGVzdCgnXG4nKSB9CisKKyAgcHJpdmF0ZSBDb21tb25Db2RlU3R5bGVTZXR0aW5ncyBnZXRDb2RlU3R5bGVTZXR0aW5ncygpIHsKKyAgICByZXR1cm4gQ29kZVN0eWxlU2V0dGluZ3NNYW5hZ2VyLmdldFNldHRpbmdzKGdldFByb2plY3QoKSkuZ2V0Q29tbW9uU2V0dGluZ3MoSmF2YUxhbmd1YWdlLklOU1RBTkNFKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RDb21wYXRpYmxlSW50ZXJmYWNlc0Nhc3QoKSB7CisgICAgY29uZmlndXJlKCkKKyAgICBhc3NlcnQgbXlGaXh0dXJlLmxvb2t1cEVsZW1lbnRTdHJpbmdzLmNvbnRhaW5zQWxsKFsnZm9vJywgJ2JhciddKQorICB9CisKKyAgcHVibGljIHZvaWQgdGVzdERvbnRBdXRvSW5zZXJ0TWlkZGxlTWF0Y2goKSB7CisgICAgY29uZmlndXJlKCkKKyAgICBjaGVja1Jlc3VsdCgpCisgICAgYXNzZXJ0IGxvb2t1cC5pdGVtcy5zaXplKCkgPT0gMQorICB9CisKKworfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vU2Vjb25kU21hcnRUeXBlQ29tcGxldGlvblRlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9jb2RlSW5zaWdodC9jb21wbGV0aW9uL1NlY29uZFNtYXJ0VHlwZUNvbXBsZXRpb25UZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2MyMjMzZQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9jb2RlSW5zaWdodC9jb21wbGV0aW9uL1NlY29uZFNtYXJ0VHlwZUNvbXBsZXRpb25UZXN0LmphdmEKQEAgLTAsMCArMSwyMjkgQEAKK3BhY2thZ2UgY29tLmludGVsbGlqLmNvZGVJbnNpZ2h0LmNvbXBsZXRpb247CisKK2ltcG9ydCBjb20uaW50ZWxsaWouSmF2YVRlc3RVdGlsOworaW1wb3J0IGNvbS5pbnRlbGxpai5jb2RlSW5zaWdodC5Db2RlSW5zaWdodFNldHRpbmdzOworaW1wb3J0IGNvbS5pbnRlbGxpai5jb2RlSW5zaWdodC5sb29rdXAuTG9va3VwRWxlbWVudERlY29yYXRvcjsKK2ltcG9ydCBjb20uaW50ZWxsaWouY29kZUluc2lnaHQubG9va3VwLkxvb2t1cEVsZW1lbnRQcmVzZW50YXRpb247CitpbXBvcnQgY29tLmludGVsbGlqLmNvZGVJbnNpZ2h0Lmxvb2t1cC5Mb29rdXBJdGVtOworaW1wb3J0IGNvbS5pbnRlbGxpai5jb2RlSW5zaWdodC5sb29rdXAuTG9va3VwTWFuYWdlcjsKK2ltcG9ydCBjb20uaW50ZWxsaWoudGVzdEZyYW1ld29yay5QbGF0Zm9ybVRlc3RVdGlsOworaW1wb3J0IGNvbS5pbnRlbGxpai51dGlsLlRocm93YWJsZVJ1bm5hYmxlOworaW1wb3J0IG9yZy5qZXRicmFpbnMuYW5ub3RhdGlvbnMuTm9uTmxzOworCitAU3VwcHJlc3NXYXJuaW5ncyh7IkFMTCJ9KQorcHVibGljIGNsYXNzIFNlY29uZFNtYXJ0VHlwZUNvbXBsZXRpb25UZXN0IGV4dGVuZHMgTGlnaHRGaXh0dXJlQ29tcGxldGlvblRlc3RDYXNlIHsKKworICBAT3ZlcnJpZGUKKyAgcHJvdGVjdGVkIHZvaWQgY29tcGxldGUoKSB7CisgICAgbXlJdGVtcyA9IG15Rml4dHVyZS5jb21wbGV0ZShDb21wbGV0aW9uVHlwZS5TTUFSVCwgMik7CisgIH0KKworICBAT3ZlcnJpZGUKKyAgcHJvdGVjdGVkIFN0cmluZyBnZXRCYXNlUGF0aCgpIHsKKyAgICByZXR1cm4gSmF2YVRlc3RVdGlsLmdldFJlbGF0aXZlSmF2YVRlc3REYXRhUGF0aCgpICsgIi9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS9zZWNvbmQiOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdE1ldGhvZEFzUXVhbGlmaWVyKCkgdGhyb3dzIFRocm93YWJsZSB7IGRvVGVzdCgpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RGaWVsZEFzUXVhbGlmaWVyKCkgdGhyb3dzIFRocm93YWJsZSB7IGRvVGVzdCgpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RBcnJheVJlZkFzUXVhbGlmaWVyKCkgdGhyb3dzIFRocm93YWJsZSB7IGRvVGVzdCgpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RNZXRob2RXaXRoUGFyYW1zKCkgdGhyb3dzIFRocm93YWJsZSB7IGRvVGVzdCgpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RNZXJnZU1ldGhvZHMoKSB0aHJvd3MgVGhyb3dhYmxlIHsgZG9UZXN0KCk7IH0KKworICBwdWJsaWMgdm9pZCB0ZXN0TWV0aG9kRGVsZWdhdGlvbigpIHRocm93cyBUaHJvd2FibGUgeyBkb1Rlc3QoKTsgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RHZW5lcmljcygpIHRocm93cyBUaHJvd2FibGUgeyBkb1Rlc3QoKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0UXVhbGlmaWVyTWF0dGVycygpIHRocm93cyBUaHJvd2FibGUgeyBkb1Rlc3QoKTsgfQorCisgIHB1YmxpYyB2b2lkIHRlc3REaWZmZXJlbnRRdWFsaWZpZXJzKCkgdGhyb3dzIFRocm93YWJsZSB7CisgICAgY29uZmlndXJlKCk7CisgICAgYXNzZXJ0U3RyaW5nSXRlbXMoImIuZ2V0R29vIiwgImdldEJhcigpLmdldEdvbyIpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFN1Z2dlc3RBcnJheXNBc0xpc3QoKSB0aHJvd3MgVGhyb3dhYmxlIHsgZG9UZXN0KCk7IH0KKyAgcHVibGljIHZvaWQgdGVzdFN1Z2dlc3RBcnJheXNBc0xpc3RXaWxkY2FyZCgpIHRocm93cyBUaHJvd2FibGUgeyBkb1Rlc3QoKTsgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RTdWdnZXN0VG9BcnJheVdpdGhOZXdFbXB0eUFycmF5KCkgdGhyb3dzIFRocm93YWJsZSB7IGRvVGVzdCgpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RTdWdnZXN0VG9BcnJheVdpdGhOZXdOb25FbXB0eUFycmF5KCkgdGhyb3dzIFRocm93YWJsZSB7IGRvVGVzdCgpOyB9CisgIAorICBwdWJsaWMgdm9pZCB0ZXN0U3VnZ2VzdFRvQXJyYXlXaXRoRXhpc3RpbmdFbXB0eUFycmF5KCkgdGhyb3dzIFRocm93YWJsZSB7CisgICAgY29uZmlndXJlKCk7CisgICAgYXNzZXJ0U3RyaW5nSXRlbXMoImZvb3MoKS50b0FycmF5KEVNUFRZX0FSUkFZKSIsICJmb29zKCkudG9BcnJheShFTVBUWV9BUlJBWTIpIik7CisgICAgc2VsZWN0SXRlbShteUl0ZW1zWzBdKTsKKyAgICBjaGVja1Jlc3VsdCgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFRvQXJyYXlHZW5lcmljQXJyYXlDcmVhdGlvbigpIHRocm93cyBUaHJvd2FibGUgeyBkb1Rlc3QoKTsgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RUb0FycmF5RmllbGRzUXVhbGlmaWVyKCkgdGhyb3dzIFRocm93YWJsZSB7IGRvVGVzdCgpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RUb0FycmF5TWV0aG9kUXVhbGlmaWVyKCkgdGhyb3dzIFRocm93YWJsZSB7IGRvVGVzdCgpOyB9CisKKyAgcHVibGljIHZvaWQgdGVzdFRvTGlzdFdpdGhRdWFsaWZpZXIoKSB0aHJvd3MgVGhyb3dhYmxlIHsgZG9UZXN0KCk7IH0KKworICBwdWJsaWMgdm9pZCB0ZXN0U3VnZ2VzdFRvQXJyYXlXaXRoRXhpc3RpbmdFbXB0eUFycmF5RnJvbUFub3RoZXJDbGFzcygpIHRocm93cyBUaHJvd2FibGUgeworICAgIGNvbmZpZ3VyZSgpOworICAgIGFzc2VydFN0cmluZ0l0ZW1zKCJmb29zKCkudG9BcnJheShCYXIuRU1QVFlfQVJSQVkpIiwgImZvb3MoKS50b0FycmF5KEJhci5FTVBUWV9BUlJBWTIpIik7CisgICAgc2VsZWN0SXRlbShteUl0ZW1zWzBdKTsKKyAgICBjaGVja1Jlc3VsdCgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdE5vbkluaXRpYWxpemVkRmllbGQoKSB0aHJvd3MgVGhyb3dhYmxlIHsgZG9UZXN0KCk7IH0KKyAgcHVibGljIHZvaWQgdGVzdElnbm9yZVRvU3RyaW5nKCkgdGhyb3dzIFRocm93YWJsZSB7IGRvVGVzdCgpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3REb250SWdub3JlVG9TdHJpbmdJbnNpZGVJdCgpIHRocm93cyBUaHJvd2FibGUgeyBkb1Rlc3QoKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0RG9udElnbm9yZVRvU3RyaW5nSW5TdHJpbmdCdWlsZGVycygpIHRocm93cyBUaHJvd2FibGUgeworICAgIGNvbmZpZ3VyZSgpOworICAgIG15Rml4dHVyZS5hc3NlcnRQcmVmZXJyZWRDb21wbGV0aW9uSXRlbXMoMCwgImJhci5zdWJzdHJpbmciLCAiYmFyLnN1YnN0cmluZyIsICJiYXIudG9TdHJpbmciKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3ROb09iamVjdE1ldGhvZHNBc0ZpcnN0UGFydCgpIHRocm93cyBUaHJvd2FibGUgeyBkb1Rlc3QoKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0R2V0Q2xhc3NMb2FkZXIoKSB0aHJvd3MgVGhyb3dhYmxlIHsKKyAgICBjb25maWd1cmUoKTsKKyAgICBzZWxlY3RJdGVtKG15SXRlbXNbMF0pOworICAgIGNoZWNrUmVzdWx0KCk7CisgIH0KKyAgcHVibGljIHZvaWQgdGVzdE5ld1N0YXRpY1Byb2JsZW0oKSB0aHJvd3MgVGhyb3dhYmxlIHsgZG9UZXN0KCk7IH0KKworICBwdWJsaWMgdm9pZCB0ZXN0Q2hhaW5pbmdQZXJmb3JtYW5jZSgpIHRocm93cyBUaHJvd2FibGUgeworICAgIG15Rml4dHVyZS5jb25maWd1cmVCeUZpbGUoZ2V0VGVzdE5hbWUoZmFsc2UpICsgIi5qYXZhIik7CisgICAgUGxhdGZvcm1UZXN0VXRpbC5zdGFydFBlcmZvcm1hbmNlVGVzdChnZXRUZXN0TmFtZShmYWxzZSksIDEwMDAsIG5ldyBUaHJvd2FibGVSdW5uYWJsZSgpIHsKKyAgICAgIEBPdmVycmlkZQorICAgICAgcHVibGljIHZvaWQgcnVuKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIGNvbmZpZ3VyZSgpOworICAgICAgICBhc3NlcnROb3ROdWxsKG15SXRlbXMpOworICAgICAgICBMb29rdXBNYW5hZ2VyLmdldEluc3RhbmNlKGdldFByb2plY3QoKSkuaGlkZUFjdGl2ZUxvb2t1cCgpOworICAgICAgfQorICAgIH0pLmNwdUJvdW5kKCkuYXNzZXJ0VGltaW5nKCk7CisKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RBcnJheU1lbWJlckFjY2VzcygpIHRocm93cyBUaHJvd2FibGUgeyBkb1Rlc3QoKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0VmFyYXJnTWVtYmVyQWNjZXNzKCkgdGhyb3dzIFRocm93YWJsZSB7IGRvVGVzdCgpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RRdWFsaWZpZWRBcnJheU1lbWJlckFjY2VzcygpIHRocm93cyBUaHJvd2FibGUgeyBkb1Rlc3QoKTsgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RQcmVmZXJGaWVsZEFuZEdldHRlclF1YWxpZmllcnMoKSB7CisgICAgY29uZmlndXJlKCk7CisgICAgYXNzZXJ0U3RyaW5nSXRlbXMoImxvY2FsQmFyLmdldEZvbyIsICJiYXIuZ2V0Rm9vIiwgImdldEJhcigpLmdldEZvbyIsICJmaW5kQmFyKCkuZ2V0Rm9vIik7CisgIH0KKworICBwcml2YXRlIHZvaWQgY29uZmlndXJlKCkgeworICAgIGNvbmZpZ3VyZUJ5RmlsZShnZXRUZXN0TmFtZShmYWxzZSkgKyAiLmphdmEiKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3ROb0FycmF5c0FzTGlzdENvbW1vblByZWZpeCgpIHRocm93cyBUaHJvd2FibGUgeworICAgIGNvbmZpZ3VyZSgpOworICAgIGNoZWNrUmVzdWx0QnlGaWxlKGdldFRlc3ROYW1lKGZhbHNlKSArICIuamF2YSIpOworICAgIGFzc2VydFN0cmluZ0l0ZW1zKCJiYXIoKSIsICJmb28oKSIpOworICAgIGFzc2VydEVxdWFscygiQXJyYXlzLmFzTGlzdChmLmJhcigpKSIsICgoTG9va3VwSXRlbSkoKExvb2t1cEVsZW1lbnREZWNvcmF0b3IpbXlJdGVtc1swXSkuZ2V0RGVsZWdhdGUoKSkuZ2V0UHJlc2VudGFibGVUZXh0KCkpOworICAgIGFzc2VydEVxdWFscygiQXJyYXlzLmFzTGlzdChmLmZvbygpKSIsICgoTG9va3VwSXRlbSkoKExvb2t1cEVsZW1lbnREZWNvcmF0b3IpbXlJdGVtc1sxXSkuZ2V0RGVsZWdhdGUoKSkuZ2V0UHJlc2VudGFibGVUZXh0KCkpOworICAgIHNlbGVjdEl0ZW0obXlJdGVtc1sxXSk7CisgICAgY2hlY2tSZXN1bHQoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RSZXN0b3JlSW5pdGlhbFByZWZpeCgpIHRocm93cyBUaHJvd2FibGUgeworICAgIG15Rml4dHVyZS5jb25maWd1cmVCeUZpbGUoZ2V0VGVzdE5hbWUoZmFsc2UpICsgIi5qYXZhIik7CisgICAgbXlGaXh0dXJlLmNvbXBsZXRlKENvbXBsZXRpb25UeXBlLlNNQVJUKTsKKyAgICBhc3NlcnRTdHJpbmdJdGVtcygiTXlFbnVtLkJhciIsICJNeUVudW0uRm9vIik7CisgICAgbXlGaXh0dXJlLmNvbXBsZXRlKENvbXBsZXRpb25UeXBlLlNNQVJUKTsKKyAgICBhc3NlcnRTdHJpbmdJdGVtcygibXkuZ2V0RW51bSIsICJNeUVudW0uQmFyIiwgIk15RW51bS5Gb28iKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3REb250Q2hhaW5TdHJpbmdNZXRob2RzT25TdHJpbmcoKSB0aHJvd3MgVGhyb3dhYmxlIHsgZG9UZXN0KCk7IH0KKyAgcHVibGljIHZvaWQgdGVzdFN0cmluZ01ldGhvZHNXaGVuTm90aGluZ0ZvdW5kKCkgdGhyb3dzIFRocm93YWJsZSB7IGRvVGVzdCgpOyB9CisKKyAgcHVibGljIHZvaWQgdGVzdERvbnRTdWdnZXN0VG9vR2VuZXJpY01ldGhvZHMoKSB0aHJvd3MgVGhyb3dhYmxlIHsKKyAgICBjb25maWd1cmUoKTsKKyAgICBhc3NlcnRFcXVhbHMoImYuYmFyQW55IiwgbXlJdGVtc1swXS5nZXRMb29rdXBTdHJpbmcoKSk7CisgICAgYXNzZXJ0RXF1YWxzKCJmLnppcEFueSIsIG15SXRlbXNbMV0uZ2V0TG9va3VwU3RyaW5nKCkpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdE5vVW5xdWFsaWZpZWRDYXN0c0luUXVhbGlmaWVkQ29udGV4dCgpIHRocm93cyBUaHJvd2FibGUgeyBkb0FudGlUZXN0KCk7IH0KKworICBwcml2YXRlIHZvaWQgZG9BbnRpVGVzdCgpIHRocm93cyBFeGNlcHRpb24geworICAgIGNvbmZpZ3VyZSgpOworICAgIGFzc2VydEVtcHR5KG15SXRlbXMpOworICAgIGNoZWNrUmVzdWx0QnlGaWxlKGdldFRlc3ROYW1lKGZhbHNlKSArICIuamF2YSIpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdENhc3RJbnN0YW5jZW9mZWRRdWFsaWZpZXIoKSB0aHJvd3MgVGhyb3dhYmxlIHsgZG9UZXN0KCk7IH0KKworICBwdWJsaWMgdm9pZCB0ZXN0Tm9MZWZ0UmVjdXJzaW9uKCkgdGhyb3dzIFRocm93YWJsZSB7CisgICAgZmluYWwgYm9vbGVhbiBvbGQgPSBDb2RlSW5zaWdodFNldHRpbmdzLmdldEluc3RhbmNlKCkuU0hPV19TVEFUSUNfQUZURVJfSU5TVEFOQ0U7CisgICAgQ29kZUluc2lnaHRTZXR0aW5ncy5nZXRJbnN0YW5jZSgpLlNIT1dfU1RBVElDX0FGVEVSX0lOU1RBTkNFID0gdHJ1ZTsKKyAgICB0cnkgeworICAgICAgZG9BbnRpVGVzdCgpOworICAgIH0KKyAgICBmaW5hbGx5IHsKKyAgICAgIENvZGVJbnNpZ2h0U2V0dGluZ3MuZ2V0SW5zdGFuY2UoKS5TSE9XX1NUQVRJQ19BRlRFUl9JTlNUQU5DRSA9IG9sZDsKKyAgICB9CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0Tm9SZWR1bmRhbnRDYXN0cygpIHRocm93cyBUaHJvd2FibGUgeworICAgIGNvbmZpZ3VyZSgpOworICAgIGNoZWNrUmVzdWx0QnlGaWxlKGdldFRlc3ROYW1lKGZhbHNlKSArICIuamF2YSIpOworICAgIGFzc2VydFN0cmluZ0l0ZW1zKCJvLmdnZ2ciLCAiZmFsc2UiLCAidHJ1ZSIpOyAKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RFbXB0eUxpc3RJbk1ldGhvZENhbGwoKSB0aHJvd3MgVGhyb3dhYmxlIHsKKyAgICBjb25maWd1cmUoKTsKKyAgICBzZWxlY3RJdGVtKG15SXRlbXNbMF0pOworICAgIGNoZWNrUmVzdWx0KCk7CisgIH0KKworICBwcml2YXRlIHZvaWQgY2hlY2tSZXN1bHQoKSB7CisgICAgY2hlY2tSZXN1bHRCeUZpbGUoZ2V0VGVzdE5hbWUoZmFsc2UpICsgIi1vdXQuamF2YSIpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFNpbmdsZXRvbk1hcCgpIHRocm93cyBUaHJvd2FibGUgeworICAgIGNvbmZpZ3VyZSgpOworICAgIHNlbGVjdEl0ZW0obXlJdGVtc1swXSk7CisgICAgY2hlY2tSZXN1bHQoKTsKKyAgfQorCisgIHByb3RlY3RlZCB2b2lkIGNoZWNrUmVzdWx0QnlGaWxlKEBOb25ObHMgZmluYWwgU3RyaW5nIGZpbGVQYXRoKSAgeworICAgIGlmIChteUl0ZW1zICE9IG51bGwpIHsKKyAgICAgIC8vU3lzdGVtLm91dC5wcmludGxuKCJpdGVtcyA9ICIgKyBBcnJheXMuYXNMaXN0KG15SXRlbXMpKTsKKyAgICB9CisgICAgc3VwZXIuY2hlY2tSZXN1bHRCeUZpbGUoZmlsZVBhdGgpOworICB9CisKKworICBwcml2YXRlIHZvaWQgZG9UZXN0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgY29uZmlndXJlKCk7CisgICAgY2hlY2tSZXN1bHQoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RJbmhlcml0b3JNZW1iZXJzKCkgdGhyb3dzIFRocm93YWJsZSB7CisgICAgY29uZmlndXJlKCk7CisgICAgc2VsZWN0SXRlbShteUl0ZW1zWzBdKTsKKyAgICBjaGVja1Jlc3VsdCgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEluaGVyaXRvckVudW1NZW1iZXJzKCkgdGhyb3dzIFRocm93YWJsZSB7CisgICAgY29uZmlndXJlKCk7CisgICAgc2VsZWN0SXRlbShteUl0ZW1zWzBdKTsKKyAgICBjaGVja1Jlc3VsdCgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEdsb2JhbEZhY3RvcnlNZXRob2RzKCkgeworICAgIGNvbmZpZ3VyZSgpOworICAgIGFzc2VydFN0cmluZ0l0ZW1zKCJjcmVhdGVFeHBlY3RlZCIsICJDb25zdGFudHMuU1VCU1RSSU5HIiwgImNyZWF0ZVN1YkdlbmVyaWMiLCAiY3JlYXRlU3ViUmF3IiwgImNyZWF0ZVN1YlN0cmluZyIpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEVtcHR5TWFwUHJlc2VudGF0aW9uKCkgeworICAgIGNvbmZpZ3VyZSgpOworICAgIExvb2t1cEVsZW1lbnRQcmVzZW50YXRpb24gcHJlc2VudGF0aW9uID0gbmV3IExvb2t1cEVsZW1lbnRQcmVzZW50YXRpb24oKTsKKyAgICBteUl0ZW1zWzBdLnJlbmRlckVsZW1lbnQocHJlc2VudGF0aW9uKTsKKyAgICBhc3NlcnRFcXVhbHMoIkNvbGxlY3Rpb25zLjxTdHJpbmcsIFMuLi4+ZW1wdHlNYXAiLCBwcmVzZW50YXRpb24uZ2V0SXRlbVRleHQoKSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0RW1wdHlNYXBQcmVzZW50YXRpb24yKCkgeworICAgIGNvbmZpZ3VyZSgpOworICAgIExvb2t1cEVsZW1lbnRQcmVzZW50YXRpb24gcHJlc2VudGF0aW9uID0gbmV3IExvb2t1cEVsZW1lbnRQcmVzZW50YXRpb24oKTsKKyAgICBteUl0ZW1zWzBdLnJlbmRlckVsZW1lbnQocHJlc2VudGF0aW9uKTsKKyAgICBhc3NlcnRFcXVhbHMoIkNvbGxlY3Rpb25zLmVtcHR5TWFwIiwgcHJlc2VudGF0aW9uLmdldEl0ZW1UZXh0KCkpOworICB9CisKKyAgcHJvdGVjdGVkIHZvaWQgdGVhckRvd24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBMb29rdXBNYW5hZ2VyLmdldEluc3RhbmNlKGdldFByb2plY3QoKSkuaGlkZUFjdGl2ZUxvb2t1cCgpOworICAgIHN1cGVyLnRlYXJEb3duKCk7CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9jb2RlSW5zaWdodC9jb21wbGV0aW9uL1NtYXJ0VHlwZTE3Q29tcGxldGlvblRlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9jb2RlSW5zaWdodC9jb21wbGV0aW9uL1NtYXJ0VHlwZTE3Q29tcGxldGlvblRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NDhmNWRmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vU21hcnRUeXBlMTdDb21wbGV0aW9uVGVzdC5qYXZhCkBAIC0wLDAgKzEsODMgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwMC0yMDExIEpldEJyYWlucyBzLnIuby4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCitwYWNrYWdlIGNvbS5pbnRlbGxpai5jb2RlSW5zaWdodC5jb21wbGV0aW9uOworCitpbXBvcnQgY29tLmludGVsbGlqLkphdmFUZXN0VXRpbDsKK2ltcG9ydCBjb20uaW50ZWxsaWouY29kZUluc2lnaHQubG9va3VwLkxvb2t1cDsKK2ltcG9ydCBjb20uaW50ZWxsaWouY29kZUluc2lnaHQubG9va3VwLkxvb2t1cEVsZW1lbnRQcmVzZW50YXRpb247CitpbXBvcnQgY29tLmludGVsbGlqLnRlc3RGcmFtZXdvcmsuTGlnaHRQcm9qZWN0RGVzY3JpcHRvcjsKK2ltcG9ydCBvcmcuamV0YnJhaW5zLmFubm90YXRpb25zLk5vdE51bGw7CisKK3B1YmxpYyBjbGFzcyBTbWFydFR5cGUxN0NvbXBsZXRpb25UZXN0IGV4dGVuZHMgTGlnaHRGaXh0dXJlQ29tcGxldGlvblRlc3RDYXNlIHsKKyAgQE92ZXJyaWRlCisgIHByb3RlY3RlZCBTdHJpbmcgZ2V0QmFzZVBhdGgoKSB7CisgICAgcmV0dXJuIEphdmFUZXN0VXRpbC5nZXRSZWxhdGl2ZUphdmFUZXN0RGF0YVBhdGgoKSArICIvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvIjsKKyAgfQorCisgIEBPdmVycmlkZQorICBwcm90ZWN0ZWQgdm9pZCBjb21wbGV0ZSgpIHsKKyAgICBteUl0ZW1zID0gbXlGaXh0dXJlLmNvbXBsZXRlKENvbXBsZXRpb25UeXBlLlNNQVJUKTsKKyAgfQorCisgIEBOb3ROdWxsCisgIEBPdmVycmlkZQorICBwcm90ZWN0ZWQgTGlnaHRQcm9qZWN0RGVzY3JpcHRvciBnZXRQcm9qZWN0RGVzY3JpcHRvcigpIHsKKyAgICByZXR1cm4gSkFWQV9MQVRFU1Q7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0RGlhbW9uZENvbGxhcHNlZCgpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdCgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdERpYW1vbmROb3RDb2xsYXBzZWQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3REaWFtb25kTm90Q29sbGFwc2VkTm90QXBwbGljYWJsZSgpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdCgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdERpYW1vbmROb3RDb2xsYXBzZWRJbkNhc2VPZkFub255bW91c0NsYXNzZXMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3REaWFtb25kTm90Q29sbGFwc2VkSW5DYXNlT2ZJbmFwcGxpY2FibGVJbmZlcmVuY2UoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RUcnlXaXRoUmVzb3VyY2VzTm9TZW1pY29sb24oKSB7IGRvVGVzdCgpOyB9CisKKyAgcHVibGljIHZvaWQgdGVzdFRyeVdpdGhSZXNvdXJjZXNUaHJvd3NFeGNlcHRpb24oKSB7IGRvVGVzdCgpOyB9CisKKyAgcHVibGljIHZvaWQgdGVzdERpYW1vbmRQcmVzZW50YXRpb24oKSB7CisgICAgY29uZmlndXJlQnlGaWxlKCIvIiArIGdldFRlc3ROYW1lKGZhbHNlKSArICIuamF2YSIpOworICAgIExvb2t1cEVsZW1lbnRQcmVzZW50YXRpb24gcHJlc2VudGF0aW9uID0gbmV3IExvb2t1cEVsZW1lbnRQcmVzZW50YXRpb24oKTsKKyAgICBteUl0ZW1zWzBdLnJlbmRlckVsZW1lbnQocHJlc2VudGF0aW9uKTsKKyAgICBhc3NlcnRFcXVhbHMoIk15REQ8PiIsIHByZXNlbnRhdGlvbi5nZXRJdGVtVGV4dCgpKTsKKyAgfQorCisKKyAgcHJpdmF0ZSB2b2lkIGRvVGVzdCgpIHsKKyAgICBjb25maWd1cmVCeUZpbGUoIi8iICsgZ2V0VGVzdE5hbWUoZmFsc2UpICsgIi5qYXZhIik7CisgICAgaWYgKG15SXRlbXMgIT0gbnVsbCAmJiBteUl0ZW1zLmxlbmd0aCA9PSAxKSB7CisgICAgICBmaW5hbCBMb29rdXAgbG9va3VwID0gZ2V0TG9va3VwKCk7CisgICAgICBpZiAobG9va3VwICE9IG51bGwpIHsKKyAgICAgICAgc2VsZWN0SXRlbShsb29rdXAuZ2V0Q3VycmVudEl0ZW0oKSwgTG9va3VwLk5PUk1BTF9TRUxFQ1RfQ0hBUik7CisgICAgICB9CisgICAgfQorICAgIGNoZWNrUmVzdWx0QnlGaWxlKCIvIiArIGdldFRlc3ROYW1lKGZhbHNlKSArICItb3V0LmphdmEiKTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vU21hcnRUeXBlMThDb21wbGV0aW9uVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vU21hcnRUeXBlMThDb21wbGV0aW9uVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA2YmViYTMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovY29kZUluc2lnaHQvY29tcGxldGlvbi9TbWFydFR5cGUxOENvbXBsZXRpb25UZXN0LmphdmEKQEAgLTAsMCArMSw3NiBAQAorLyoKKyAqIENvcHlyaWdodCAyMDAwLTIwMTIgSmV0QnJhaW5zIHMuci5vLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KK3BhY2thZ2UgY29tLmludGVsbGlqLmNvZGVJbnNpZ2h0LmNvbXBsZXRpb247CisKK2ltcG9ydCBjb20uaW50ZWxsaWouSmF2YVRlc3RVdGlsOworaW1wb3J0IGNvbS5pbnRlbGxpai5jb2RlSW5zaWdodC5sb29rdXAuTG9va3VwOworaW1wb3J0IGNvbS5pbnRlbGxpai5jb2RlSW5zaWdodC5sb29rdXAuTG9va3VwRWxlbWVudFByZXNlbnRhdGlvbjsKK2ltcG9ydCBjb20uaW50ZWxsaWoudGVzdEZyYW1ld29yay5MaWdodFByb2plY3REZXNjcmlwdG9yOworaW1wb3J0IG9yZy5qZXRicmFpbnMuYW5ub3RhdGlvbnMuTm90TnVsbDsKKworcHVibGljIGNsYXNzIFNtYXJ0VHlwZTE4Q29tcGxldGlvblRlc3QgZXh0ZW5kcyBMaWdodEZpeHR1cmVDb21wbGV0aW9uVGVzdENhc2UgeworICBAT3ZlcnJpZGUKKyAgcHJvdGVjdGVkIFN0cmluZyBnZXRCYXNlUGF0aCgpIHsKKyAgICByZXR1cm4gSmF2YVRlc3RVdGlsLmdldFJlbGF0aXZlSmF2YVRlc3REYXRhUGF0aCgpICsgIi9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZS8iOworICB9CisKKyAgQE92ZXJyaWRlCisgIHByb3RlY3RlZCB2b2lkIGNvbXBsZXRlKCkgeworICAgIG15SXRlbXMgPSBteUZpeHR1cmUuY29tcGxldGUoQ29tcGxldGlvblR5cGUuU01BUlQpOworICB9CisKKyAgQE5vdE51bGwKKyAgQE92ZXJyaWRlCisgIHByb3RlY3RlZCBMaWdodFByb2plY3REZXNjcmlwdG9yIGdldFByb2plY3REZXNjcmlwdG9yKCkgeworICAgIHJldHVybiBKQVZBX0xBVEVTVDsKKyAgfQorCisKKyAgcHVibGljIHZvaWQgdGVzdEV4cGVjdGVkUmV0dXJuVHlwZSgpIHsKKyAgICBkb1Rlc3QoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RFeHBlY3RlZFJldHVyblR5cGVXaXRoU3Vic3RpdHV0aW9uKCkgeworICAgIGRvVGVzdCgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEV4cGVjdGVkUmV0dXJuVHlwZTEoKSB7CisgICAgZG9UZXN0KCk7CisgIH0KKyAgCisgIHB1YmxpYyB2b2lkIHRlc3RTZW1pY29sb25JbkV4cHJlc3Npb25Cb2R5SW5Mb2NhbFZhcmlhYmxlKCkgeworICAgIGRvVGVzdCgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFNlbWljb2xvbkluQ29kZUJsb2NCb2R5SW5Mb2NhbFZhcmlhYmxlKCkgeworICAgIGRvVGVzdCgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFNlbWljb2xvbkluRXhwcmVzc2lvbkJvZHlJbkV4cHJlc3Npb25MaXN0KCkgeworICAgIGRvVGVzdCgpOworICB9CisKKyAgcHJpdmF0ZSB2b2lkIGRvVGVzdCgpIHsKKyAgICBjb25maWd1cmVCeUZpbGUoIi8iICsgZ2V0VGVzdE5hbWUoZmFsc2UpICsgIi5qYXZhIik7CisgICAgYXNzZXJ0Tm90TnVsbChteUl0ZW1zKTsKKyAgICBhc3NlcnRUcnVlKG15SXRlbXMubGVuZ3RoID4gMCk7CisgICAgZmluYWwgTG9va3VwIGxvb2t1cCA9IGdldExvb2t1cCgpOworICAgIGlmIChsb29rdXAgIT0gbnVsbCkgeworICAgICAgc2VsZWN0SXRlbShsb29rdXAuZ2V0Q3VycmVudEl0ZW0oKSwgTG9va3VwLk5PUk1BTF9TRUxFQ1RfQ0hBUik7CisgICAgfQorICAgIGNoZWNrUmVzdWx0QnlGaWxlKCIvIiArIGdldFRlc3ROYW1lKGZhbHNlKSArICItb3V0LmphdmEiKTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vU21hcnRUeXBlQ29tcGxldGlvbk9yZGVyaW5nVGVzdC5ncm9vdnkgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovY29kZUluc2lnaHQvY29tcGxldGlvbi9TbWFydFR5cGVDb21wbGV0aW9uT3JkZXJpbmdUZXN0Lmdyb292eQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMTRhNjQ1Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vU21hcnRUeXBlQ29tcGxldGlvbk9yZGVyaW5nVGVzdC5ncm9vdnkKQEAgLTAsMCArMSwzMTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDAtMjAwNyBKZXRCcmFpbnMgcy5yLm8uIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKi8KKworcGFja2FnZSBjb20uaW50ZWxsaWouY29kZUluc2lnaHQuY29tcGxldGlvbjsKKworCitpbXBvcnQgY29tLmludGVsbGlqLkphdmFUZXN0VXRpbAoraW1wb3J0IGNvbS5pbnRlbGxpai5jb2RlSW5zaWdodC5sb29rdXAuTG9va3VwRWxlbWVudAoraW1wb3J0IGNvbS5pbnRlbGxpai5jb2RlSW5zaWdodC5sb29rdXAuTG9va3VwRWxlbWVudFByZXNlbnRhdGlvbgoraW1wb3J0IGNvbS5pbnRlbGxpai5jb2RlSW5zaWdodC5sb29rdXAuaW1wbC5Mb29rdXBJbXBsCitpbXBvcnQgY29tLmludGVsbGlqLnBzaS5Qc2lDbGFzcworaW1wb3J0IGNvbS5pbnRlbGxpai5wc2kuc3RhdGlzdGljcy5TdGF0aXN0aWNzTWFuYWdlcgoraW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLmZpbGVFZGl0b3IuRmlsZURvY3VtZW50TWFuYWdlcgorCitwdWJsaWMgY2xhc3MgU21hcnRUeXBlQ29tcGxldGlvbk9yZGVyaW5nVGVzdCBleHRlbmRzIENvbXBsZXRpb25Tb3J0aW5nVGVzdENhc2UgeworICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQkFTRV9QQVRIID0gIi9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3NtYXJ0VHlwZVNvcnRpbmciOyAKKworICBwdWJsaWMgU21hcnRUeXBlQ29tcGxldGlvbk9yZGVyaW5nVGVzdCgpIHsKKyAgICBzdXBlcihDb21wbGV0aW9uVHlwZS5TTUFSVCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0SkNvbXBvbmVudEFkZCgpIHRocm93cyBUaHJvd2FibGUgeworICAgIGNoZWNrUHJlZmVycmVkSXRlbXMoMCwgIm5hbWUiLCAiZ2V0TmFtZSIsICJiIiwgImZvb0JlYW4yMzkiLCAiZm9vIiwgInRoaXMiKTsKKyAgfQorICAKKyAgcHVibGljIHZvaWQgdGVzdEpDb21wb25lbnRBZGROZXcoKSB0aHJvd3MgVGhyb3dhYmxlIHsKKyAgICAvL3RoZXJlJ3Mgbm8gUG9wdXBNZW51IGluIG1vY2sgamRrCisgICAgY2hlY2tQcmVmZXJyZWRJdGVtcygyLCAiQ29tcG9uZW50IiwgIlN0cmluZyIsICJGb29CZWFuMyIsICJKQ29tcG9uZW50IiwgIkNvbnRhaW5lciIpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEpDb21wb25lbnRBZGROZXdXaXRoU3RhdHMoKSB0aHJvd3MgVGhyb3dhYmxlIHsKKyAgICAvL3RoZXJlJ3Mgbm8gUG9wdXBNZW51IGluIG1vY2sgamRrCisgICAgZmluYWwgTG9va3VwSW1wbCBsb29rdXAgPSBpbnZva2VDb21wbGV0aW9uKCIvSkNvbXBvbmVudEFkZE5ldy5qYXZhIik7CisgICAgYXNzZXJ0UHJlZmVycmVkSXRlbXMoMiwgIkNvbXBvbmVudCIsICJTdHJpbmciLCAiRm9vQmVhbjMiLCAiSkNvbXBvbmVudCIsICJDb250YWluZXIiKTsKKyAgICBpbmNVc2VDb3VudChsb29rdXAsIDQpOyAvL0NvbnRhaW5lcgorICAgIGFzc2VydFByZWZlcnJlZEl0ZW1zKDIsICJDb21wb25lbnQiLCAiU3RyaW5nIiwgIkNvbnRhaW5lciIsICJGb29CZWFuMyIsICJKQ29tcG9uZW50Iik7CisgICAgaW1pdGF0ZUl0ZW1TZWxlY3Rpb24obG9va3VwLCAzKTsgLy9Gb29CZWFuMworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgU3RhdGlzdGljc01hbmFnZXIuT0JMSVZJT05fVEhSRVNIT0xEOyBpKyspIHsKKyAgICAgIGltaXRhdGVJdGVtU2VsZWN0aW9uKGxvb2t1cCwgMik7IC8vQ29udGFpbmVyCisgICAgfQorICAgIHJlZnJlc2hTb3J0aW5nKGxvb2t1cCk7CisgICAgYXNzZXJ0UHJlZmVycmVkSXRlbXMoMiwgIkNvbXBvbmVudCIsICJTdHJpbmciLCAiQ29udGFpbmVyIiwgIkZvb0JlYW4zIiwgIkpDb21wb25lbnQiKTsKKworICAgIGludCBjb21wb25lbnQgPSBsb29rdXAuaXRlbXMuZmluZEluZGV4T2YgeyBpdC5sb29rdXBTdHJpbmcgPT0gJ0NvbXBvbmVudCcgfQorICAgIGZvciAoaW50IGkgPSAwOyBpIDwgU3RhdGlzdGljc01hbmFnZXIuT0JMSVZJT05fVEhSRVNIT0xEOyBpKyspIHsKKyAgICAgIGltaXRhdGVJdGVtU2VsZWN0aW9uKGxvb2t1cCwgY29tcG9uZW50KTsKKyAgICB9CisgICAgcmVmcmVzaFNvcnRpbmcobG9va3VwKTsKKyAgICBhc3NlcnRQcmVmZXJyZWRJdGVtcygxLCAiU3RyaW5nIiwgIkNvbXBvbmVudCIsICJGb29CZWFuMyIpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdE5ld0xpc3RBbHdheXNGaXJzdCgpIHsKKyAgICBkZWYgbG9va3VwID0gaW52b2tlQ29tcGxldGlvbihnZXRUZXN0TmFtZShmYWxzZSkgKyAiLmphdmEiKQorICAgIGFzc2VydFByZWZlcnJlZEl0ZW1zIDEsICdMaXN0JywgJ0Fic3RyYWN0TGlzdCcsICdBYnN0cmFjdFNlcXVlbnRpYWxMaXN0JywgJ0FycmF5TGlzdCcKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IFN0YXRpc3RpY3NNYW5hZ2VyLk9CTElWSU9OX1RIUkVTSE9MRCArIDEwOyBpKyspIHsKKyAgICAgIGltaXRhdGVJdGVtU2VsZWN0aW9uKGxvb2t1cCwgMykgLy9BcnJheUxpc3QKKyAgICB9CisgICAgcmVmcmVzaFNvcnRpbmcobG9va3VwKQorICAgIGFzc2VydFByZWZlcnJlZEl0ZW1zIDEsICdMaXN0JywgJ0FycmF5TGlzdCcsICdBYnN0cmFjdExpc3QnLCAnQWJzdHJhY3RTZXF1ZW50aWFsTGlzdCcKKyAgfQorICAKKyAgcHVibGljIHZvaWQgdGVzdE5vU3RhdHNPblVuc3VjY2Vzc2Z1bEF0dGVtcHQoKSB7CisgICAgZmluYWwgTG9va3VwSW1wbCBsb29rdXAgPSBpbnZva2VDb21wbGV0aW9uKCIvSkNvbXBvbmVudEFkZE5ldy5qYXZhIik7CisgICAgYXNzZXJ0UHJlZmVycmVkSXRlbXMoMiwgIkNvbXBvbmVudCIsICJTdHJpbmciLCAiRm9vQmVhbjMiLCAiSkNvbXBvbmVudCIsICJDb250YWluZXIiKTsKKyAgICBsb29rdXAuY3VycmVudEl0ZW0gPSBsb29rdXAuaXRlbXNbNF0gLy9Db250YWluZXIKKyAgICBteUZpeHR1cmUudHlwZSgnXG5cYicpCisgICAgQ29tcGxldGlvbkxvb2t1cEFycmFuZ2VyLmFwcGx5TGFzdENvbXBsZXRpb25TdGF0aXN0aWNzVXBkYXRlKCkKKyAgICBGaWxlRG9jdW1lbnRNYW5hZ2VyLmluc3RhbmNlLnNhdmVBbGxEb2N1bWVudHMoKQorICAgIGludm9rZUNvbXBsZXRpb24oIi9KQ29tcG9uZW50QWRkTmV3LmphdmEiKQorICAgIGFzc2VydFByZWZlcnJlZEl0ZW1zKDIsICJDb21wb25lbnQiLCAiU3RyaW5nIiwgIkZvb0JlYW4zIiwgIkpDb21wb25lbnQiLCAiQ29udGFpbmVyIik7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0TWV0aG9kU3RhdHMoKSB0aHJvd3MgVGhyb3dhYmxlIHsKKyAgICBmaW5hbCBMb29rdXBJbXBsIGxvb2t1cCA9IGludm9rZUNvbXBsZXRpb24oZ2V0VGVzdE5hbWUoZmFsc2UpICsgIi5qYXZhIik7CisgICAgYXNzZXJ0UHJlZmVycmVkSXRlbXMoMCwgImJhciIsICJmb28iLCAiZ29vIik7CisgICAgaW5jVXNlQ291bnQobG9va3VwLCAyKTsKKyAgICBhc3NlcnRQcmVmZXJyZWRJdGVtcygwLCAiZ29vIiwgImJhciIsICJmb28iKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3ROZXdSdW5uYWJsZSgpIHRocm93cyBUaHJvd2FibGUgeworICAgIGNoZWNrUHJlZmVycmVkSXRlbXMoMCwgIlJ1bm5hYmxlIiwgIk15QW5vdGhlclJ1bm5hYmxlIiwgIk15UnVubmFibGUiLCAiVGhyZWFkIik7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0TmV3Q29tcG9uZW50KCkgdGhyb3dzIFRocm93YWJsZSB7CisgICAgY2hlY2tQcmVmZXJyZWRJdGVtcygxLCAiQ29tcG9uZW50IiwgIkZvbyIsICJKQ29tcG9uZW50IiwgIkNvbnRhaW5lciIpOworICB9CisgIAorICBwdWJsaWMgdm9pZCB0ZXN0Q2xhc3NMaXRlcmFsKCkgdGhyb3dzIFRocm93YWJsZSB7CisgICAgY2hlY2tQcmVmZXJyZWRJdGVtcygwLCAiU3RyaW5nLmNsYXNzIik7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0TWV0aG9kc1dpdGhTdWJzdGl0dXRhYmxlUmV0dXJuVHlwZSgpIHRocm93cyBUaHJvd2FibGUgeworICAgIGNoZWNrUHJlZmVycmVkSXRlbXMoMCwgImZvbyIsICJ0b1N0cmluZyIsICJiYXIiKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3REb250UHJlZmVyS2V5d29yZHMoKSB0aHJvd3MgVGhyb3dhYmxlIHsKKyAgICBjaGVja1ByZWZlcnJlZEl0ZW1zKDAsICJvMSIsICJmb28iLCAibmFtZSIsICJ0aGlzIiwgImdldENsYXNzIik7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0RW51bVZhbHVlT2YoKSB0aHJvd3MgVGhyb3dhYmxlIHsKKyAgICBjaGVja1ByZWZlcnJlZEl0ZW1zKDAsICJlIiwgIk15RW51bS5CQVIiLCAiTXlFbnVtLkZPTyIsICJ2YWx1ZU9mIiwgInZhbHVlT2YiKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RFbnVtVmFsdWVPZjIoKSB0aHJvd3MgVGhyb3dhYmxlIHsKKyAgICBjaGVja1ByZWZlcnJlZEl0ZW1zKDAsICJlIiwgIk15RW51bS5CQVIiLCAiTXlFbnVtLkZPTyIsICJiYXIiLCAidmFsdWVPZiIpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFByZWZlck1hdGNoZWRXb3JkcygpIHRocm93cyBUaHJvd2FibGUgeworICAgIGNoZWNrUHJlZmVycmVkSXRlbXMoMCwgImdldFZlcnNpb25TdHJpbmciLCAiZ2V0VGl0bGUiKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RQcmVmZXJJbXBvcnRlZENsYXNzZXMoKSB0aHJvd3MgVGhyb3dhYmxlIHsKKyAgICAvL3RoZXJlJ3Mgbm8gUG9wdXBNZW51IGluIG1vY2sgamRrCisgICAgY2hlY2tQcmVmZXJyZWRJdGVtcygyLCAiQ29tcG9uZW50IiwgIlN0cmluZyIsICJGb29CZWFuMyIsICJKUGFuZWwiLCAiSkNvbXBvbmVudCIpOworICB9CisgIAorICBwdWJsaWMgdm9pZCB0ZXN0UHJlZmVyTmVzdGVkQ2xhc3NlcygpIHRocm93cyBUaHJvd2FibGUgeworICAgIC8vdGhlcmUncyBubyBQb3B1cE1lbnUgaW4gbW9jayBqZGsKKyAgICBjaGVja1ByZWZlcnJlZEl0ZW1zKDIsICJDb21wb25lbnQiLCAiU3RyaW5nIiwgIkZvb0JlYW4zIiwgIk5lc3RlZENsYXNzIiwgIkpDb21wb25lbnQiKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RTbWFydENvbGxlY3Rpb25zKCkgdGhyb3dzIFRocm93YWJsZSB7CisgICAgY2hlY2tQcmVmZXJyZWRJdGVtcygwLCAicyIpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFNtYXJ0RXF1YWxzKCkgdGhyb3dzIFRocm93YWJsZSB7CisgICAgY2hlY2tQcmVmZXJyZWRJdGVtcygwLCAicyIpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFNtYXJ0RXF1YWxzMigpIHRocm93cyBUaHJvd2FibGUgeworICAgIGNoZWNrUHJlZmVycmVkSXRlbXMoMCwgImZvbyIsICJ0aGlzIiwgIm8iLCAicyIsICJnZXRDbGFzcyIpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFNtYXJ0RXF1YWxzMygpIHRocm93cyBUaHJvd2FibGUgeworICAgIGNoZWNrUHJlZmVycmVkSXRlbXMoMCwgImIiLCAidGhpcyIsICJhIiwgInoiLCAiZ2V0Q2xhc3MiKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RTbWFydENvbGxlY3Rpb25zTmV3KCkgdGhyb3dzIFRocm93YWJsZSB7CisgICAgY2hlY2tQcmVmZXJyZWRJdGVtcygxLCAiRm9vIiwgIkJhciIpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFNtYXJ0RXF1YWxzTmV3KCkgdGhyb3dzIFRocm93YWJsZSB7CisgICAgY2hlY2tQcmVmZXJyZWRJdGVtcygxLCAiRm9vIiwgIkJhciIpOworICB9CisgIAorICBwdWJsaWMgdm9pZCB0ZXN0U21hcnRFcXVhbHNOZXcyKCkgdGhyb3dzIFRocm93YWJsZSB7CisgICAgY2hlY2tQcmVmZXJyZWRJdGVtcygwLCAiRm9vIik7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0Qm9vbGVhblZhbHVlT2YoKSB0aHJvd3MgVGhyb3dhYmxlIHsKKyAgICBjaGVja1ByZWZlcnJlZEl0ZW1zKDAsICJiIiwgInZhbHVlT2YiLCAidmFsdWVPZiIsICJCb29sZWFuLkZBTFNFIiwgIkJvb2xlYW4uVFJVRSIpOworICB9CisgIAorICBwdWJsaWMgdm9pZCB0ZXN0WG1sVGFnR2V0QXR0cmlidXRlKCkgdGhyb3dzIFRocm93YWJsZSB7CisgICAgY2hlY2tQcmVmZXJyZWRJdGVtcygwLCAiZ2V0QXR0cmlidXRlVmFsdWUiLCAiZ2V0TmFtZXNwYWNlIiwgInRvU3RyaW5nIik7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0UHJlZmVyRmllbGRzVG9NZXRob2RzKCkgdGhyb3dzIFRocm93YWJsZSB7CisgICAgY2hlY2tQcmVmZXJyZWRJdGVtcygwLCAibXlWZXJzaW9uIiwgImdldFZlcnNpb24iLCAiZ2V0U2VsZWN0ZWRWZXJzaW9uIiwgImNhbGN1bGF0ZVZlcnNpb24iKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RQcmVmZXJQYXJhbWV0ZXJzVG9HZXR0ZXJzKCkgdGhyb3dzIFRocm93YWJsZSB7CisgICAgY2hlY2tQcmVmZXJyZWRJdGVtcygwLCAiYSIsICJJLl8xIiwgInZhbHVlT2YiLCAiZ2V0TGFzdEkiKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RFeHBlY3RlZEludGVyZmFjZVNob3VsZEdvRmlyc3QoKSB0aHJvd3MgVGhyb3dhYmxlIHsKKyAgICBjaGVja1ByZWZlcnJlZEl0ZW1zKDAsICJNeVByb2Nlc3NvciIsICJQcm9jMSIpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFN0YXRpc3RpY3NBZmZlY3RzTm9uUHJlZmVyYWJsZUV4cGVjdGVkSXRlbXMoKSB0aHJvd3MgVGhyb3dhYmxlIHsKKyAgICBmaW5hbCBMb29rdXBJbXBsIGxvb2t1cCA9IGludm9rZUNvbXBsZXRpb24oZ2V0VGVzdE5hbWUoZmFsc2UpICsgIi5qYXZhIik7CisgICAgYXNzZXJ0UHJlZmVycmVkSXRlbXMoMSwgIkxpc3QiLCAiQWJzdHJhY3RMaXN0IiwgIkFic3RyYWN0U2VxdWVudGlhbExpc3QiLCAiQXJyYXlMaXN0Iik7CisgICAgaW5jVXNlQ291bnQobG9va3VwLCAwKTsKKyAgICBhc3NlcnRQcmVmZXJyZWRJdGVtcygxLCAiTGlzdCIsICJBYnN0cmFjdExpc3QiLCAiQWJzdHJhY3RTZXF1ZW50aWFsTGlzdCIsICJBcnJheUxpc3QiKTsKKyAgICBpbmNVc2VDb3VudChsb29rdXAsIDApOworICAgIGFzc2VydFByZWZlcnJlZEl0ZW1zKDAsICJMaXN0IiwgIkFic3RyYWN0TGlzdCIsICJBYnN0cmFjdFNlcXVlbnRpYWxMaXN0IiwgIkFycmF5TGlzdCIpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFByZWZlck5vblJlY3Vyc2l2ZU1ldGhvZFBhcmFtcygpIHRocm93cyBUaHJvd2FibGUgeworICAgIGNoZWNrUHJlZmVycmVkSXRlbXMoMCwgImIiLCAiaGFzaENvZGUiLCAicyIsICJhIik7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0UHJlZmVyRGVsZWdhdGluZ01ldGhvZFBhcmFtcygpIHRocm93cyBUaHJvd2FibGUgeworICAgIC8vdGhlcmUncyBubyBQb3B1cE1lbnUgaW4gbW9jayBqZGsKKyAgICBmaW5hbCBMb29rdXBJbXBsIGxvb2t1cCA9IGludm9rZUNvbXBsZXRpb24oZ2V0VGVzdE5hbWUoZmFsc2UpICsgIi5qYXZhIik7CisgICAgYXNzZXJ0UHJlZmVycmVkSXRlbXMoMCwgInh5eiIsICJhYmMiKTsKKyAgICBpbmNVc2VDb3VudChsb29rdXAsIDEpOworICAgIGFzc2VydFByZWZlcnJlZEl0ZW1zKDAsICJ4eXoiLCAiYWJjIik7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0R3d0QnV0dG9ucygpIHRocm93cyBUaHJvd2FibGUgeworICAgIGNoZWNrUHJlZmVycmVkSXRlbXMoMCwgIkJ1dHRvbiIsICJCdXR0b25CYXNlIik7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0TmV3QXJyYXlMaXN0KCkgdGhyb3dzIFRocm93YWJsZSB7CisgICAgY2hlY2tQcmVmZXJyZWRJdGVtcygwLCAiQXJyYXlMaXN0IiwgIk90aGVyTGlzdCIpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFBhc3NpbmdRdWFsaWZpZXJUb01ldGhvZENhbGwoKSB0aHJvd3MgVGhyb3dhYmxlIHsKKyAgICBjaGVja1ByZWZlcnJlZEl0ZW1zKDAsICJ0aGlzIiwgInBhcmFtIik7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0UGFzc2luZ1RoaXNUb1VucXVhbGlmaWVkTWV0aG9kQ2FsbCgpIHRocm93cyBUaHJvd2FibGUgeworICAgIGNoZWNrUHJlZmVycmVkSXRlbXMoMCwgInBhcmFtIiwgInRoaXMiKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RQcmVmZXJBY2Nlc3NpYmxlTWVtYmVycygpIHRocm93cyBUaHJvd2FibGUgeworICAgIGNoZWNrUHJlZmVycmVkSXRlbXMoMCwgIkZvby5DX05PUk1BTCIsICJGb28uQl9ERVBSRUNBVEVEIik7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0Tm9Ta2lwcGluZ0luU21hcnRDYXN0KCkgdGhyb3dzIFRocm93YWJsZSB7CisgICAgY2hlY2tQcmVmZXJyZWRJdGVtcygwLCAiRm9vIiwgIkJhciIsICJHb28iKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RMaXRlcmFsSW5SZXR1cm4oKSB0aHJvd3MgVGhyb3dhYmxlIHsKKyAgICBjaGVja1ByZWZlcnJlZEl0ZW1zKDAsICJmYWxzZSIsICJ0cnVlIiwgImVxdWFscyIpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdExpdGVyYWxJbklmKCkgdGhyb3dzIFRocm93YWJsZSB7CisgICAgY2hlY2tQcmVmZXJyZWRJdGVtcygwLCAiZXF1YWxzIiwgImZhbHNlIiwgInRydWUiKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RGYWN0b3J5TWV0aG9kRm9yRGVmYXVsdFR5cGUoKSB0aHJvd3MgVGhyb3dhYmxlIHsKKyAgICBjaGVja1ByZWZlcnJlZEl0ZW1zKDAsICJjcmVhdGUiLCAidGhpcyIsICJnZXRDbGFzcyIpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdExvY2FsVmFyc0JlZm9yZUNsYXNzTGl0ZXJhbHMoKSB0aHJvd3MgVGhyb3dhYmxlIHsKKyAgICBjaGVja1ByZWZlcnJlZEl0ZW1zKDAsICJsb2NhbCIsICJGb28uY2xhc3MiLCAiQmFyLmNsYXNzIik7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0RG9udFByZWZlckNhc3RlZCgpIHRocm93cyBUaHJvd2FibGUgeworICAgIGNoZWNrUHJlZmVycmVkSXRlbXMoMCwgImIiLCAiX28iKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RJbm5lckNsYXNzZXNQcm94aW1pdHkoKSB0aHJvd3MgVGhyb3dhYmxlIHsKKyAgICBjaGVja1ByZWZlcnJlZEl0ZW1zKDAsICJHb28iLCAiSW5uZXJHb28iLCAiQmFyIiwgIkFHb28iKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RMb2NhbFZhcmlhYmxlc091dHdlaWdoU3RhdHMoKSB0aHJvd3MgVGhyb3dhYmxlIHsKKyAgICBmaW5hbCBMb29rdXBJbXBsIGxvb2t1cCA9IGludm9rZUNvbXBsZXRpb24oZ2V0VGVzdE5hbWUoZmFsc2UpICsgIi5qYXZhIik7CisgICAgYXNzZXJ0UHJlZmVycmVkSXRlbXMoMCwgImZvbyIsICJwYXJhbSIsICJ0aGlzIiwgImJhciIsICJnb28iKTsKKyAgICBpbmNVc2VDb3VudChsb29rdXAsIDQpOworICAgIGFzc2VydFByZWZlcnJlZEl0ZW1zKDAsICJmb28iLCAicGFyYW0iLCAidGhpcyIsICJnb28iLCAiYmFyIik7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBTdGF0aXN0aWNzTWFuYWdlci5PQkxJVklPTl9USFJFU0hPTEQ7IGkrKykgeworICAgICAgaW1pdGF0ZUl0ZW1TZWxlY3Rpb24obG9va3VwLCAzKTsgLy9nb28KKyAgICB9CisgICAgcmVmcmVzaFNvcnRpbmcobG9va3VwKTsKKyAgICBhc3NlcnRQcmVmZXJyZWRJdGVtcygwLCAiZm9vIiwgInBhcmFtIiwgInRoaXMiLCAiZ29vIiwgImJhciIpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFByZWZlcnJlZEJ5TmFtZURvbnRDaGFuZ2VTdGF0aXN0aWNzKCkgdGhyb3dzIFRocm93YWJsZSB7CisgICAgaW52b2tlQ29tcGxldGlvbihnZXRUZXN0TmFtZShmYWxzZSkgKyAiLmphdmEiKTsKKyAgICBhc3NlcnRQcmVmZXJyZWRJdGVtcygwLCAiZm9vIiwgImZhbHNlIik7CisgICAgbXlGaXh0dXJlLnR5cGUoJywnKTsKKyAgICBjb21wbGV0ZSgpOworICAgIGFzc2VydFByZWZlcnJlZEl0ZW1zKDAsICJiYXIiLCAiZm9vIiwgImVxdWFscyIsICJmYWxzZSIsICJ0cnVlIik7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0RmllbGROYW1lT3V0d2VpZ2hzU3RhdHMoKSB0aHJvd3MgVGhyb3dhYmxlIHsKKyAgICBmaW5hbCBMb29rdXBJbXBsIGxvb2t1cCA9IGludm9rZUNvbXBsZXRpb24oZ2V0VGVzdE5hbWUoZmFsc2UpICsgIi5qYXZhIik7CisgICAgYXNzZXJ0UHJlZmVycmVkSXRlbXMoMCwgIm15Rm9vIiwgIm15QmFyIik7CisgICAgaW5jVXNlQ291bnQobG9va3VwLCAxKTsgLy9teUJhcgorICAgIGFzc2VydFByZWZlcnJlZEl0ZW1zKDAsICJteUZvbyIsICJteUJhciIpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFByZWZlclNhbWVOYW1lZE1ldGhvZHMoKSB7CisgICAgY2hlY2tQcmVmZXJyZWRJdGVtcygwLCAiZm9vIiwgImJvbyIsICJkb28iLCAiaGFzaENvZGUiKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RFcmFzdXJlTm90QWZmZWN0aW5nUHJveGltaXR5KCkgeworICAgIG15Rml4dHVyZS5hZGRDbGFzcygicGFja2FnZSBmb287IHB1YmxpYyBpbnRlcmZhY2UgRm9vPFQ+IHt9Iik7CisgICAgbXlGaXh0dXJlLmFkZENsYXNzKCJwYWNrYWdlIGJhcjsgcHVibGljIGNsYXNzIEJhciBpbXBsZW1lbnRzIGZvby5Gb28ge30iKTsKKyAgICBteUZpeHR1cmUuYWRkQ2xhc3MoInB1YmxpYyBjbGFzcyBCYXI8VD4gaW1wbGVtZW50cyBmb28uRm9vPFQ+IHt9Iik7CisgICAgY2hlY2tQcmVmZXJyZWRJdGVtcygwLCAiQmFyIiwgIkJhciIpOworCisgICAgTG9va3VwRWxlbWVudFByZXNlbnRhdGlvbiBwcmVzZW50YXRpb24gPSBuZXcgTG9va3VwRWxlbWVudFByZXNlbnRhdGlvbigpOworICAgIExpc3Q8TG9va3VwRWxlbWVudD4gaXRlbXMgPSBnZXRMb29rdXAoKS5nZXRJdGVtcygpOworCisgICAgTG9va3VwRWxlbWVudCBmaXJzdCA9IGl0ZW1zLmdldCgwKTsKKyAgICBhc3NlcnRFcXVhbHMoIkJhciIsICgoUHNpQ2xhc3MpZmlyc3QuZ2V0T2JqZWN0KCkpLmdldFF1YWxpZmllZE5hbWUoKSk7CisgICAgZmlyc3QucmVuZGVyRWxlbWVudChwcmVzZW50YXRpb24pOworICAgIGFzc2VydEVxdWFscygiQmFyPFN0cmluZz4iLCBwcmVzZW50YXRpb24uZ2V0SXRlbVRleHQoKSk7CisKKyAgICBMb29rdXBFbGVtZW50IHNlY29uZCA9IGl0ZW1zLmdldCgxKTsKKyAgICBhc3NlcnRFcXVhbHMoImJhci5CYXIiLCAoKFBzaUNsYXNzKXNlY29uZC5nZXRPYmplY3QoKSkuZ2V0UXVhbGlmaWVkTmFtZSgpKTsKKyAgICBzZWNvbmQucmVuZGVyRWxlbWVudChwcmVzZW50YXRpb24pOworICAgIGFzc2VydEVxdWFscygiQmFyIiwgcHJlc2VudGF0aW9uLmdldEl0ZW1UZXh0KCkpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEFzc2VydEVxdWFscygpIHRocm93cyBUaHJvd2FibGUgeworICAgIG15Rml4dHVyZS5hZGRDbGFzcygicGFja2FnZSBqdW5pdC5mcmFtZXdvcms7IHB1YmxpYyBjbGFzcyBBc3NlcnQgeyBwdWJsaWMgc3RhdGljIHZvaWQgYXNzZXJ0RXF1YWxzKE9iamVjdCBhLCBPYmplY3QgYikge30gfSIpOworICAgIGNoZWNrUHJlZmVycmVkSXRlbXMoMCwgImJvbyIsICJiYXIiKQorICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFByZWZlckNvbGxlY3Rpb25zRW1wdHlMaXN0KCkgdGhyb3dzIFRocm93YWJsZSB7CisgICAgbXlGaXh0dXJlLmFkZENsYXNzKCJwYWNrYWdlIGZvbzsgcHVibGljIGNsYXNzIEZMaXN0PFQ+IGltcGxlbWVudHMgamF2YS51dGlsLkxpc3Q8VD4geyBwdWJsaWMgc3RhdGljIDxUPiBGTGlzdDxUPiBlbXB0eUxpc3QoKSB7fSB9Iik7CisgICAgY29uZmlndXJlTm9Db21wbGV0aW9uKGdldFRlc3ROYW1lKGZhbHNlKSArICIuamF2YSIpOworICAgIG15Rml4dHVyZS5jb21wbGV0ZShDb21wbGV0aW9uVHlwZS5TTUFSVCwgMik7CisgICAgYXNzZXJ0IGxvb2t1cC5pdGVtcy5maW5kSW5kZXhPZiB7ICdDb2xsZWN0aW9ucy5lbXB0eUxpc3QnIGluIGl0LmFsbExvb2t1cFN0cmluZ3MgfSA8IGxvb2t1cC5pdGVtcy5maW5kSW5kZXhPZiB7ICdGTGlzdC5lbXB0eUxpc3QnIGluIGl0LmFsbExvb2t1cFN0cmluZ3MgfQorICAgIGFzc2VydFByZWZlcnJlZEl0ZW1zKDAsICJsb2NhbCIsICJsb2NhbC5zdWJMaXN0IiwgImxvY01ldGhvZCIpCisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0RGlzcHJlZmVyR2V0dGVySW5TZXR0ZXJDYWxsKCkgeworICAgIGNoZWNrUHJlZmVycmVkSXRlbXMgMCwgJ2dldFpvb0NvbG9yJywgJ2hhc2hDb2RlJywgJ2NvbG9yJywgJ2dldENvbG9yJworICB9CisgIHB1YmxpYyB2b2lkIHRlc3RQcmVmZXJPdGhlckdldHRlckluU2V0dGVyQ2FsbCgpIHsKKyAgICBjaGVja1ByZWZlcnJlZEl0ZW1zIDAsICdjb2xvcicsICdnZXRDb2xvcicsICdnZXRab29Db2xvcicsICdoYXNoQ29kZScKKyAgfQorCisgIEBPdmVycmlkZQorICBwcm90ZWN0ZWQgU3RyaW5nIGdldEJhc2VQYXRoKCkgeworICAgIHJldHVybiBKYXZhVGVzdFV0aWwuZ2V0UmVsYXRpdmVKYXZhVGVzdERhdGFQYXRoKCkgKyBCQVNFX1BBVEg7CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9jb2RlSW5zaWdodC9jb21wbGV0aW9uL1NtYXJ0VHlwZUNvbXBsZXRpb25UZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovY29kZUluc2lnaHQvY29tcGxldGlvbi9TbWFydFR5cGVDb21wbGV0aW9uVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc3NDFhMDkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovY29kZUluc2lnaHQvY29tcGxldGlvbi9TbWFydFR5cGVDb21wbGV0aW9uVGVzdC5qYXZhCkBAIC0wLDAgKzEsMTIwMCBAQAorcGFja2FnZSBjb20uaW50ZWxsaWouY29kZUluc2lnaHQuY29tcGxldGlvbjsKKworaW1wb3J0IGNvbS5pbnRlbGxpai5KYXZhVGVzdFV0aWw7CitpbXBvcnQgY29tLmludGVsbGlqLmNvZGVJbnNpZ2h0LkNvZGVJbnNpZ2h0U2V0dGluZ3M7CitpbXBvcnQgY29tLmludGVsbGlqLmNvZGVJbnNpZ2h0Lmxvb2t1cC5Mb29rdXA7CitpbXBvcnQgY29tLmludGVsbGlqLmNvZGVJbnNpZ2h0Lmxvb2t1cC5Mb29rdXBFbGVtZW50OworaW1wb3J0IGNvbS5pbnRlbGxpai5jb2RlSW5zaWdodC5sb29rdXAuTG9va3VwRWxlbWVudFByZXNlbnRhdGlvbjsKK2ltcG9ydCBjb20uaW50ZWxsaWouY29kZUluc2lnaHQudGVtcGxhdGUuU21hcnRDb21wbGV0aW9uQ29udGV4dFR5cGU7CitpbXBvcnQgY29tLmludGVsbGlqLmNvZGVJbnNpZ2h0LnRlbXBsYXRlLlRlbXBsYXRlOworaW1wb3J0IGNvbS5pbnRlbGxpai5jb2RlSW5zaWdodC50ZW1wbGF0ZS5UZW1wbGF0ZUNvbnRleHRUeXBlOworaW1wb3J0IGNvbS5pbnRlbGxpai5jb2RlSW5zaWdodC50ZW1wbGF0ZS5UZW1wbGF0ZU1hbmFnZXI7CitpbXBvcnQgY29tLmludGVsbGlqLmNvZGVJbnNpZ2h0LnRlbXBsYXRlLmltcGwuVGVtcGxhdGVJbXBsOworaW1wb3J0IGNvbS5pbnRlbGxpai5jb2RlSW5zaWdodC50ZW1wbGF0ZS5pbXBsLlRlbXBsYXRlU2V0dGluZ3M7CitpbXBvcnQgY29tLmludGVsbGlqLmxhbmcuamF2YS5KYXZhTGFuZ3VhZ2U7CitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkuZmlsZUVkaXRvci5GaWxlRG9jdW1lbnRNYW5hZ2VyOworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLnV0aWwuQ29uZGl0aW9uOworaW1wb3J0IGNvbS5pbnRlbGxpai5wc2kuY29kZVN0eWxlLkNvZGVTdHlsZVNldHRpbmdzOworaW1wb3J0IGNvbS5pbnRlbGxpai5wc2kuY29kZVN0eWxlLkNvZGVTdHlsZVNldHRpbmdzTWFuYWdlcjsKK2ltcG9ydCBjb20uaW50ZWxsaWoucHNpLmNvZGVTdHlsZS5Db21tb25Db2RlU3R5bGVTZXR0aW5nczsKK2ltcG9ydCBjb20uaW50ZWxsaWoudXRpbC5jb250YWluZXJzLkNvbnRhaW5lclV0aWw7CisKK3B1YmxpYyBjbGFzcyBTbWFydFR5cGVDb21wbGV0aW9uVGVzdCBleHRlbmRzIExpZ2h0Rml4dHVyZUNvbXBsZXRpb25UZXN0Q2FzZSB7CisKKyAgQE92ZXJyaWRlCisgIHByb3RlY3RlZCBTdHJpbmcgZ2V0QmFzZVBhdGgoKSB7CisgICAgcmV0dXJuIEphdmFUZXN0VXRpbC5nZXRSZWxhdGl2ZUphdmFUZXN0RGF0YVBhdGgoKSArICIvY29kZUluc2lnaHQvY29tcGxldGlvbi9zbWFydFR5cGUvIjsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RQYXJlbkFmdGVyQ2FzdDEoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBTdHJpbmcgcGF0aCA9ICIvcGFyZW5BZnRlckNhc3QiOworCisgICAgY29uZmlndXJlQnlGaWxlKHBhdGggKyAiL2JlZm9yZTEuamF2YSIpOworICAgIGNoZWNrUmVzdWx0QnlGaWxlKHBhdGggKyAiL2FmdGVyMS5qYXZhIik7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0UGFyZW5BZnRlckNhc3QyKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgU3RyaW5nIHBhdGggPSAiL3BhcmVuQWZ0ZXJDYXN0IjsKKworICAgIGNvbmZpZ3VyZUJ5RmlsZShwYXRoICsgIi9iZWZvcmUyLmphdmEiKTsKKyAgICBjaGVja1Jlc3VsdEJ5RmlsZShwYXRoICsgIi9hZnRlcjIuamF2YSIpOworICB9CisKKworICBwdWJsaWMgdm9pZCB0ZXN0UGFyZW5BZnRlckNhc3QzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgU3RyaW5nIHBhdGggPSAiL3BhcmVuQWZ0ZXJDYXN0IjsKKworICAgIGNvbmZpZ3VyZUJ5RmlsZShwYXRoICsgIi9iZWZvcmUzLmphdmEiKTsKKyAgICBjaGVja1Jlc3VsdEJ5RmlsZShwYXRoICsgIi9hZnRlcjMuamF2YSIpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFBhcmVuQWZ0ZXJDYWxsMSgpIHRocm93cyBFeGNlcHRpb24geworICAgIFN0cmluZyBwYXRoID0gIi9wYXJlbkFmdGVyQ2FsbCI7CisKKyAgICBjb25maWd1cmVCeUZpbGUocGF0aCArICIvYmVmb3JlMS5qYXZhIik7CisgICAgY2hlY2tSZXN1bHRCeUZpbGUocGF0aCArICIvYWZ0ZXIxLmphdmEiKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RQYXJlbkFmdGVyQ2FsbDIoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBTdHJpbmcgcGF0aCA9ICIvcGFyZW5BZnRlckNhbGwiOworCisgICAgY29uZmlndXJlQnlGaWxlKHBhdGggKyAiL2JlZm9yZTIuamF2YSIpOworICAgIGNoZWNrUmVzdWx0QnlGaWxlKHBhdGggKyAiL2FmdGVyMi5qYXZhIik7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0UGFyZW5BZnRlckNhbGwzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgU3RyaW5nIHBhdGggPSAiL3BhcmVuQWZ0ZXJDYWxsIjsKKworICAgIGNvbmZpZ3VyZUJ5RmlsZShwYXRoICsgIi9iZWZvcmUzLmphdmEiKTsKKyAgICBjaGVja1Jlc3VsdEJ5RmlsZShwYXRoICsgIi9hZnRlcjMuamF2YSIpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFBhcmVuQWZ0ZXJDYWxsNCgpIHRocm93cyBFeGNlcHRpb24geworICAgIFN0cmluZyBwYXRoID0gIi9wYXJlbkFmdGVyQ2FsbCI7CisKKyAgICBjb25maWd1cmVCeUZpbGUocGF0aCArICIvYmVmb3JlNC5qYXZhIik7CisgICAgY2hlY2tSZXN1bHRCeUZpbGUocGF0aCArICIvYWZ0ZXI0LmphdmEiKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RQYXJlbkFmdGVyQ2FsbDUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBTdHJpbmcgcGF0aCA9ICIvcGFyZW5BZnRlckNhbGwiOworCisgICAgY29uZmlndXJlQnlGaWxlKHBhdGggKyAiL2JlZm9yZTUuamF2YSIpOworICAgIGNoZWNrUmVzdWx0QnlGaWxlKHBhdGggKyAiL2FmdGVyNS5qYXZhIik7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0UGFyZW5BZnRlckNhbGw2KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgU3RyaW5nIHBhdGggPSAiL3BhcmVuQWZ0ZXJDYWxsIjsKKworICAgIGNvbmZpZ3VyZUJ5RmlsZShwYXRoICsgIi9iZWZvcmU2LmphdmEiKTsKKyAgICBjaGVja1Jlc3VsdEJ5RmlsZShwYXRoICsgIi9hZnRlcjYuamF2YSIpOworICB9CisgIAorICBwdWJsaWMgdm9pZCB0ZXN0UGFyZW5BZnRlckNhbGwxX1NwYWNlV2l0aGluTWV0aG9kQ2FsbFBhcmVucygpIHRocm93cyBFeGNlcHRpb24geworICAgIFN0cmluZyBwYXRoID0gIi9wYXJlbkFmdGVyQ2FsbCI7CisKKyAgICBteUZpeHR1cmUuY29uZmlndXJlQnlGaWxlKHBhdGggKyAiL2JlZm9yZTEuamF2YSIpOworICAgIGdldENvZGVTdHlsZVNldHRpbmdzKCkuU1BBQ0VfV0lUSElOX01FVEhPRF9DQUxMX1BBUkVOVEhFU0VTID0gdHJ1ZTsKKyAgICBjb21wbGV0ZSgpOworICAgIGNoZWNrUmVzdWx0QnlGaWxlKHBhdGggKyAiL2FmdGVyMV9zcGFjZS5qYXZhIik7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0UGFyZW5BZnRlcklmMSgpIHRocm93cyBFeGNlcHRpb24geworICAgIFN0cmluZyBwYXRoID0gIi9wYXJlbkFmdGVySWYiOworCisgICAgY29uZmlndXJlQnlGaWxlKHBhdGggKyAiL2JlZm9yZTEuamF2YSIpOworICAgIGNoZWNrUmVzdWx0QnlGaWxlKHBhdGggKyAiL2FmdGVyMS5qYXZhIik7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0UGFyZW5BZnRlcklmMigpIHRocm93cyBFeGNlcHRpb24geworICAgIFN0cmluZyBwYXRoID0gIi9wYXJlbkFmdGVySWYiOworCisgICAgY29uZmlndXJlQnlGaWxlKHBhdGggKyAiL2JlZm9yZTIuamF2YSIpOworICAgIGNoZWNrUmVzdWx0QnlGaWxlKHBhdGggKyAiL2FmdGVyMi5qYXZhIik7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0Rm9yY2VMb29rdXBGb3JBYnN0cmFjdENsYXNzZXMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBTdHJpbmcgcGF0aCA9ICIvYWZ0ZXJOZXciOworCisgICAgY29uZmlndXJlQnlGaWxlKHBhdGggKyAiL2JlZm9yZTkuamF2YSIpOworICAgIGNoZWNrUmVzdWx0QnlGaWxlKHBhdGggKyAiL2FmdGVyOS5qYXZhIik7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0QWZ0ZXJOZXcxKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgU3RyaW5nIHBhdGggPSAiL2FmdGVyTmV3IjsKKworICAgIGNvbmZpZ3VyZUJ5RmlsZShwYXRoICsgIi9iZWZvcmUxLmphdmEiKTsKKyAgICBzZWxlY3QoKTsKKyAgICBjaGVja1Jlc3VsdEJ5RmlsZShwYXRoICsgIi9hZnRlcjEuamF2YSIpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEFmdGVyTmV3MigpIHRocm93cyBFeGNlcHRpb24geworICAgIFN0cmluZyBwYXRoID0gIi9hZnRlck5ldyI7CisKKyAgICBjb25maWd1cmVCeUZpbGUocGF0aCArICIvYmVmb3JlMi5qYXZhIik7CisgICAgc2VsZWN0KCk7CisgICAgY2hlY2tSZXN1bHRCeUZpbGUocGF0aCArICIvYWZ0ZXIyLmphdmEiKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RBZnRlck5ldzMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBTdHJpbmcgcGF0aCA9ICIvYWZ0ZXJOZXciOworCisgICAgY29uZmlndXJlQnlGaWxlKHBhdGggKyAiL2JlZm9yZTMuamF2YSIpOworICAgIHNlbGVjdCgpOworICAgIGNoZWNrUmVzdWx0QnlGaWxlKHBhdGggKyAiL2FmdGVyMy5qYXZhIik7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0QWZ0ZXJOZXc0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgU3RyaW5nIHBhdGggPSAiL2FmdGVyTmV3IjsKKworICAgIGNvbmZpZ3VyZUJ5RmlsZShwYXRoICsgIi9iZWZvcmU0LmphdmEiKTsKKyAgICBzZWxlY3QoKTsKKyAgICBjaGVja1Jlc3VsdEJ5RmlsZShwYXRoICsgIi9hZnRlcjQuamF2YSIpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEFmdGVyTmV3NSgpIHRocm93cyBFeGNlcHRpb24geworICAgIFN0cmluZyBwYXRoID0gIi9hZnRlck5ldyI7CisKKyAgICBjb25maWd1cmVCeUZpbGUocGF0aCArICIvYmVmb3JlNS5qYXZhIik7CisgICAgc2VsZWN0KCk7CisgICAgY2hlY2tSZXN1bHRCeUZpbGUocGF0aCArICIvYWZ0ZXI1LmphdmEiKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RBZnRlck5ldzYoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBTdHJpbmcgcGF0aCA9ICIvYWZ0ZXJOZXciOworCisgICAgY29uZmlndXJlQnlGaWxlKHBhdGggKyAiL2JlZm9yZTYuamF2YSIpOworICAgIHNlbGVjdCgpOworICAgIGNoZWNrUmVzdWx0QnlGaWxlKHBhdGggKyAiL2FmdGVyNi5qYXZhIik7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0QWZ0ZXJOZXc3KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgU3RyaW5nIHBhdGggPSAiL2FmdGVyTmV3IjsKKworICAgIGNvbmZpZ3VyZUJ5RmlsZShwYXRoICsgIi9iZWZvcmU3LmphdmEiKTsKKyAgICBzZWxlY3QoKTsKKyAgICBjaGVja1Jlc3VsdEJ5RmlsZShwYXRoICsgIi9hZnRlcjcuamF2YSIpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEFmdGVyTmV3OCgpIHRocm93cyBFeGNlcHRpb24geworICAgIFN0cmluZyBwYXRoID0gIi9hZnRlck5ldyI7CisKKyAgICBjb25maWd1cmVCeUZpbGUocGF0aCArICIvYmVmb3JlOC5qYXZhIik7CisgICAgc2VsZWN0KCk7CisgICAgY2hlY2tSZXN1bHRCeUZpbGUocGF0aCArICIvYWZ0ZXI4LmphdmEiKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RBZnRlck5ldzkoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBTdHJpbmcgcGF0aCA9ICIvYWZ0ZXJOZXciOworCisgICAgY29uZmlndXJlQnlGaWxlKHBhdGggKyAiL2JlZm9yZTEwLmphdmEiKTsKKyAgICBzZWxlY3QoKTsKKyAgICBjaGVja1Jlc3VsdEJ5RmlsZShwYXRoICsgIi9hZnRlcjEwLmphdmEiKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RBZnRlck5ldzEwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgU3RyaW5nIHBhdGggPSAiL2FmdGVyTmV3IjsKKworICAgIGNvbmZpZ3VyZUJ5RmlsZShwYXRoICsgIi9iZWZvcmUxMi5qYXZhIik7CisgICAgLy9zZWxlY3QoKTsKKyAgICBjaGVja1Jlc3VsdEJ5RmlsZShwYXRoICsgIi9hZnRlcjEyLmphdmEiKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RBZnRlck5ldzExKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgU3RyaW5nIHBhdGggPSAiL2FmdGVyTmV3IjsKKworICAgIGNvbmZpZ3VyZUJ5RmlsZShwYXRoICsgIi9iZWZvcmUxMy5qYXZhIik7CisgICAgLy9zZWxlY3QoKTsKKyAgICBjaGVja1Jlc3VsdEJ5RmlsZShwYXRoICsgIi9hZnRlcjEzLmphdmEiKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RBZnRlclRocm93TmV3MSgpIHRocm93cyBFeGNlcHRpb24geworICAgIFN0cmluZyBwYXRoID0gIi9hZnRlck5ldyI7CisKKyAgICBjb25maWd1cmVCeUZpbGUocGF0aCArICIvYmVmb3JlMTQuamF2YSIpOworICAgIC8vc2VsZWN0KCk7CisgICAgY2hlY2tSZXN1bHRCeUZpbGUocGF0aCArICIvYWZ0ZXIxNC5qYXZhIik7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0QWZ0ZXJUaHJvd05ldzIoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBTdHJpbmcgcGF0aCA9ICIvYWZ0ZXJOZXciOworCisgICAgY29uZmlndXJlQnlGaWxlKHBhdGggKyAiL2JlZm9yZTE1LmphdmEiKTsKKyAgICBzZWxlY3QoKTsKKyAgICBjaGVja1Jlc3VsdEJ5RmlsZShwYXRoICsgIi9hZnRlcjE1LmphdmEiKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RBZnRlclRocm93TmV3MygpIHRocm93cyBFeGNlcHRpb24geworICAgIFN0cmluZyBwYXRoID0gIi9hZnRlck5ldyI7CisKKyAgICBjb25maWd1cmVCeUZpbGUocGF0aCArICIvYmVmb3JlMTYuamF2YSIpOworICAgIC8vc2VsZWN0KCk7CisgICAgY2hlY2tSZXN1bHRCeUZpbGUocGF0aCArICIvYWZ0ZXIxNi5qYXZhIik7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0Q2FzdEluVGhyb3coKSB0aHJvd3MgRXhjZXB0aW9uIHsgZG9UZXN0KCk7IH0KKyAgcHVibGljIHZvaWQgdGVzdE5vbkV4aXN0ZW50R2VuZXJpY0FmdGVyTmV3KCkgdGhyb3dzIEV4Y2VwdGlvbiB7IGRvVGVzdCgnXG4nKTsgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RQYXJlbkFmdGVyTmV3V2l0aGluSW5uZXJFeHByKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgU3RyaW5nIHBhdGggPSAiL2FmdGVyTmV3IjsKKworICAgIGNvbmZpZ3VyZUJ5RmlsZShwYXRoICsgIi9MYXN0QXJnSW5Jbm5lck5ld0JlZm9yZS5qYXZhIik7CisgICAgY2hlY2tSZXN1bHRCeUZpbGUocGF0aCArICIvTGFzdEFyZ0luSW5uZXJOZXdBZnRlci5qYXZhIik7CisKKyAgICAvL2NvbmZpZ3VyZUJ5RmlsZShwYXRoICsgIi9MYXN0QXJnSW5Jbm5lck5ld0JlZm9yZTIuamF2YSIpOworICAgIC8vcGVyZm9ybUFjdGlvbigpOworICAgIC8vY2hlY2tSZXN1bHRCeUZpbGUocGF0aCArICIvTGFzdEFyZ0luSW5uZXJOZXdBZnRlcjIuamF2YSIpOworCisgICAgY29uZmlndXJlQnlGaWxlKHBhdGggKyAiL0xhc3RBcmdJbklubmVyTmV3QmVmb3JlMy5qYXZhIik7CisgICAgY2hlY2tSZXN1bHRCeUZpbGUocGF0aCArICIvTGFzdEFyZ0luSW5uZXJOZXdBZnRlcjMuamF2YSIpOworCisgICAgY29uZmlndXJlQnlGaWxlKHBhdGggKyAiL0xhc3RBcmdJbklubmVyTmV3QmVmb3JlNC5qYXZhIik7CisgICAgY2hlY2tSZXN1bHRCeUZpbGUocGF0aCArICIvTGFzdEFyZ0luSW5uZXJOZXdBZnRlcjQuamF2YSIpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFJldHVybjEoKSB0aHJvd3MgRXhjZXB0aW9ueworICAgIFN0cmluZyBwYXRoID0gIi9yZXR1cm4iOworICAgIGNvbmZpZ3VyZUJ5RmlsZShwYXRoICsgIi9iZWZvcmUxLmphdmEiKTsKKyAgICBjaGVja1Jlc3VsdEJ5RmlsZShwYXRoICsgIi9hZnRlcjEuamF2YSIpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFJldHVybjIoKSB0aHJvd3MgRXhjZXB0aW9ueworICAgIFN0cmluZyBwYXRoID0gIi9yZXR1cm4iOworCisgICAgY29uZmlndXJlQnlGaWxlKHBhdGggKyAiL2JlZm9yZTIuamF2YSIpOworICAgIGNoZWNrUmVzdWx0QnlGaWxlKHBhdGggKyAiL2FmdGVyMi5qYXZhIik7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0UmV0dXJuMygpIHRocm93cyBFeGNlcHRpb257CisgICAgU3RyaW5nIHBhdGggPSAiL3JldHVybiI7CisKKyAgICBjb25maWd1cmVCeUZpbGUocGF0aCArICIvYmVmb3JlMy5qYXZhIik7CisgICAgY2hlY2tSZXN1bHRCeUZpbGUocGF0aCArICIvYWZ0ZXIzLmphdmEiKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RHZW5lcmljczEoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBTdHJpbmcgcGF0aCA9ICIvZ2VuZXJpY3MiOworCisgICAgY29uZmlndXJlQnlGaWxlKHBhdGggKyAiL2JlZm9yZTEuamF2YSIpOworICAgIGNoZWNrUmVzdWx0QnlGaWxlKHBhdGggKyAiL2FmdGVyMS5qYXZhIik7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0R2VuZXJpY3MyKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgU3RyaW5nIHBhdGggPSAiL2dlbmVyaWNzIjsKKworICAgIGNvbmZpZ3VyZUJ5RmlsZShwYXRoICsgIi9iZWZvcmUyLmphdmEiKTsKKyAgICBjaGVja1Jlc3VsdEJ5RmlsZShwYXRoICsgIi9hZnRlcjIuamF2YSIpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEdlbmVyaWNzMygpIHRocm93cyBFeGNlcHRpb24geworICAgIFN0cmluZyBwYXRoID0gIi9nZW5lcmljcyI7CisKKyAgICBjb25maWd1cmVCeUZpbGUocGF0aCArICIvYmVmb3JlMy5qYXZhIik7CisgICAgY2hlY2tSZXN1bHRCeUZpbGUocGF0aCArICIvYWZ0ZXIzLmphdmEiKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RHZW5lcmljczQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBTdHJpbmcgcGF0aCA9ICIvZ2VuZXJpY3MiOworCisgICAgY29uZmlndXJlQnlGaWxlKHBhdGggKyAiL2JlZm9yZTQuamF2YSIpOworICAgIGNoZWNrUmVzdWx0QnlGaWxlKHBhdGggKyAiL2FmdGVyNC5qYXZhIik7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0R2VuZXJpY3M1KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgU3RyaW5nIHBhdGggPSAiL2dlbmVyaWNzIjsKKworICAgIGNvbmZpZ3VyZUJ5RmlsZShwYXRoICsgIi9iZWZvcmU1LmphdmEiKTsKKyAgICBjaGVja1Jlc3VsdEJ5RmlsZShwYXRoICsgIi9hZnRlcjUuamF2YSIpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEFmdGVySW5zdGFuY2VPZjEoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBTdHJpbmcgcGF0aCA9ICIvYWZ0ZXJJbnN0YW5jZU9mIjsKKworICAgIGNvbmZpZ3VyZUJ5RmlsZShwYXRoICsgIi9iZWZvcmUxLmphdmEiKTsKKyAgICBjaGVja1Jlc3VsdEJ5RmlsZShwYXRoICsgIi9hZnRlcjEuamF2YSIpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEFmdGVySW5zdGFuY2VPZjIoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBTdHJpbmcgcGF0aCA9ICIvYWZ0ZXJJbnN0YW5jZU9mIjsKKworICAgIGNvbmZpZ3VyZUJ5RmlsZShwYXRoICsgIi9iZWZvcmUyLmphdmEiKTsKKyAgICBjaGVja1Jlc3VsdEJ5RmlsZShwYXRoICsgIi9hZnRlcjIuamF2YSIpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEluc2lkZUNhdGNoKCkgdGhyb3dzIEV4Y2VwdGlvbiB7IGRvVGVzdCgpOyB9CisKKyAgcHVibGljIHZvaWQgdGVzdEdlbmVyaWNzNigpIHRocm93cyBFeGNlcHRpb24geworICAgIFN0cmluZyBwYXRoID0gIi9nZW5lcmljcyI7CisKKyAgICBjb25maWd1cmVCeUZpbGUocGF0aCArICIvYmVmb3JlNi5qYXZhIik7CisgICAgY2hlY2tSZXN1bHRCeUZpbGUocGF0aCArICIvYWZ0ZXI2LmphdmEiKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RXaWxkY2FyZE5ldzEoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBTdHJpbmcgcGF0aCA9ICIvZ2VuZXJpY3MiOworCisgICAgY29uZmlndXJlQnlGaWxlKHBhdGggKyAiL2JlZm9yZTcuamF2YSIpOworICAgIGNoZWNrUmVzdWx0QnlGaWxlKHBhdGggKyAiL2FmdGVyNy5qYXZhIik7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0V2lsZGNhcmROZXcyKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgU3RyaW5nIHBhdGggPSAiL2dlbmVyaWNzIjsKKworICAgIGNvbmZpZ3VyZUJ5RmlsZShwYXRoICsgIi9iZWZvcmU4LmphdmEiKTsKKyAgICBjaGVja1Jlc3VsdEJ5RmlsZShwYXRoICsgIi9hZnRlcjguamF2YSIpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFdpbGRjYXJkRWxpbWluYXRlZCgpIHRocm93cyBFeGNlcHRpb24geworICAgIFN0cmluZyBwYXRoID0gIi9nZW5lcmljcyI7CisKKyAgICBjb25maWd1cmVCeUZpbGUocGF0aCArICIvYmVmb3JlOS5qYXZhIik7CisgICAgY2hlY2tSZXN1bHRCeUZpbGUocGF0aCArICIvYWZ0ZXI5LmphdmEiKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RCdWcxKCkgdGhyb3dzIEV4Y2VwdGlvbiB7IGRvVGVzdCgpOyB9CisKKyAgcHVibGljIHZvaWQgdGVzdFF1YWxpZmllZFRoaXMoKSB0aHJvd3MgRXhjZXB0aW9uIHsgZG9UZXN0KCk7IH0KKworICBwdWJsaWMgdm9pZCB0ZXN0QnVnMigpIHRocm93cyBFeGNlcHRpb24geworICAgIGNvbmZpZ3VyZUJ5RmlsZSgiL0J1ZzIuamF2YSIpOworICB9CisKKworICBwdWJsaWMgdm9pZCB0ZXN0U2lsbHlBc3NpZ25tZW50MSgpIHRocm93cyBFeGNlcHRpb24geworICAgIGNvbmZpZ3VyZUJ5RmlsZSgiL1NpbGx5MS5qYXZhIik7CisgICAgY2hlY2tSZXN1bHRCeUZpbGUoIi9TaWxseTEuamF2YSIpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFZhcmFyZ3MxKCkgdGhyb3dzIEV4Y2VwdGlvbiB7IGRvVGVzdCgnXG4nKTsgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RFbnVtQ29uc3RJblN3aXRjaCgpIHRocm93cyBFeGNlcHRpb24geyBkb1Rlc3QoKTsgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RFbnVtQ29uc3RJblN3aXRjaE91dHNpZGUoKSB0aHJvd3MgRXhjZXB0aW9uIHsgZG9UZXN0KCk7IH0KKworICBwdWJsaWMgdm9pZCB0ZXN0SW50Q29uc3RJblN3aXRjaCgpIHRocm93cyBFeGNlcHRpb24geyBkb1Rlc3QoKTsgfQorCisgIHB1YmxpYyB2b2lkIHRlc3REb3VibGVFbXB0eUFycmF5KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgY29uZmlndXJlQnlUZXN0TmFtZSgpOworICAgIGNoZWNrUmVzdWx0QnlGaWxlKCIvIitnZXRUZXN0TmFtZShmYWxzZSkgKyAiLmphdmEiKTsKKyAgICBhc3NlcnRFcXVhbHMoMiwgbXlJdGVtcy5sZW5ndGgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdENvbGxlY3Rpb25zRW1wdHlTZXRJbk1ldGhvZENhbGwoKSB0aHJvd3MgVGhyb3dhYmxlIHsgZG9UZXN0KCk7IH0KKworICBwdWJsaWMgdm9pZCB0ZXN0Q29sbGVjdGlvbnNFbXB0eVNldEluVGVybmFyeSgpIHRocm93cyBUaHJvd2FibGUgeyBkb1Rlc3QoKTsgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RTdHJpbmdDb25zdGFudEluQW5ubygpIHRocm93cyBUaHJvd2FibGUgeyBkb1Rlc3QoKTsgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RDb2xsZWN0aW9uc0VtcHR5U2V0SW5UZXJuYXJ5MigpIHRocm93cyBUaHJvd2FibGUgeyBkb1Rlc3QoKTsgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RDb25zdHJ1Y3Rvck9uU2VwYXJhdGVMaW5lSW5NZXRob2RDYWxsKCkgdGhyb3dzIFRocm93YWJsZSB7IGRvVGVzdCgpOyB9CisKKyAgcHVibGljIHZvaWQgdGVzdENvbnN0cnVjdG9yV2l0aEV4aXN0aW5nUGFyZW5zKCkgdGhyb3dzIFRocm93YWJsZSB7IGRvVGVzdCgpOyB9CisKKyAgcHVibGljIHZvaWQgdGVzdE1ldGhvZEFubm90YXRpb25OYW1lZFBhcmFtZXRlcigpIHRocm93cyBUaHJvd2FibGUgeyBkb1Rlc3QoKTsgfQorICAKKyAgcHVibGljIHZvaWQgdGVzdEluaGVyaXRlZENsYXNzKCkgdGhyb3dzIFRocm93YWJsZSB7IGRvVGVzdCgpOyB9CisKKyAgcHVibGljIHZvaWQgdGVzdENsYXNzTGl0ZXJhbEluQW5ubzEoKSB0aHJvd3MgVGhyb3dhYmxlIHsgZG9UZXN0KCk7IH0KKworICBwdWJsaWMgdm9pZCB0ZXN0TWVhbmluZ2xlc3NFeHBsaWNpdFdpbGRjYXJkUGFyYW0oKSB0aHJvd3MgVGhyb3dhYmxlIHsgZG9UZXN0KCk7IH0KKworICBwdWJsaWMgdm9pZCB0ZXN0RXhwbGljaXRXaWxkY2FyZEFycmF5UGFyYW0oKSB0aHJvd3MgVGhyb3dhYmxlIHsgZG9UZXN0KCk7IH0KKworICBwdWJsaWMgdm9pZCB0ZXN0Q2F0Y2hJbkFub255bW91cygpIHRocm93cyBUaHJvd2FibGUgeyBkb1Rlc3QoKTsgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RUaHJvd1J1bnRpbWVFeGNlcHRpb24oKSB0aHJvd3MgVGhyb3dhYmxlIHsgZG9UZXN0KCk7IH0KKworICBwdWJsaWMgdm9pZCB0ZXN0UGFyYW1ldGVyaXplZENvbnN0cnVjdG9yKCkgdGhyb3dzIFRocm93YWJsZSB7IGRvVGVzdCgpOyB9CisKKyAgcHVibGljIHZvaWQgdGVzdE5ld0lubmVyQ2xhc3NOYW1lU2hvcnRQcmVmaXgoKSB0aHJvd3MgVGhyb3dhYmxlIHsgZG9UZXN0KCdcbicpOyB9CisKKyAgcHVibGljIHZvaWQgdGVzdE5ld0lubmVyT2ZQYXJhbWV0ZXJpemVkQ2xhc3MoKSB0aHJvd3MgVGhyb3dhYmxlIHsgZG9UZXN0KCk7IH0KKworICBwdWJsaWMgdm9pZCB0ZXN0UXVhbGlmaWVkVGhpc0luQW5vbnltb3VzQ29uc3RydWN0b3IoKSB0aHJvd3MgVGhyb3dhYmxlIHsgZG9UZXN0KCk7IH0KKworICBwdWJsaWMgdm9pZCB0ZXN0RXhjZXB0aW9uVHdpY2UoKSB0aHJvd3MgVGhyb3dhYmxlIHsgZG9UZXN0KCk7IH0KKworICBwdWJsaWMgdm9pZCB0ZXN0RXhjZXB0aW9uVHdpY2UyKCkgdGhyb3dzIFRocm93YWJsZSB7IGRvVGVzdCgpOyB9CisKKyAgcHVibGljIHZvaWQgdGVzdE5ld0lubmVyUnVubmFibGUoKSB0aHJvd3MgVGhyb3dhYmxlIHsgZG9UZXN0KCk7IH0KKworICBwdWJsaWMgdm9pZCB0ZXN0QXJyYXlBY2Nlc3NJbmRleCgpIHRocm93cyBUaHJvd2FibGUgeyBkb1Rlc3QoKTsgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RUaHJvd0V4Y2VwdGlvbkNvbnN0cnVjdG9yKCkgdGhyb3dzIFRocm93YWJsZSB7IGRvVGVzdCgpOyB9CisKKyAgcHVibGljIHZvaWQgdGVzdEphdmFkb2NUaHJvd3MoKSB0aHJvd3MgVGhyb3dhYmxlIHsgZG9UZXN0KCk7IH0KKworICBwdWJsaWMgdm9pZCB0ZXN0RG9Ob3RFeGNsdWRlQXNzaWduZWRWYXJpYWJsZSgpIHRocm93cyBUaHJvd2FibGUgeyBkb1Rlc3QoKTsgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RBcnJheUluZGV4VGFpbFR5cGUoKSB0aHJvd3MgVGhyb3dhYmxlIHsgZG9UZXN0KCk7IH0KKworICBwdWJsaWMgdm9pZCB0ZXN0UHJpdmF0ZU92ZXJsb2FkcygpIHRocm93cyBUaHJvd2FibGUgeyBkb1Rlc3QoKTsgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RQb2x5YWRpY0V4cHJlc3Npb24oKSB0aHJvd3MgVGhyb3dhYmxlIHsgZG9UZXN0KCk7IH0KKworICBwdWJsaWMgdm9pZCB0ZXN0Q2FzdEF1dG9ib3hpbmcoKSB0aHJvd3MgVGhyb3dhYmxlIHsKKyAgICBkb0l0ZW1UZXN0KCk7CisgIH0KKyAgcHVibGljIHZvaWQgdGVzdENhc3RBdXRvYm94aW5nMigpIHRocm93cyBUaHJvd2FibGUgeworICAgIGRvSXRlbVRlc3QoKTsKKyAgfQorICBwdWJsaWMgdm9pZCB0ZXN0Q2FzdEF1dG9ib3hpbmczKCkgdGhyb3dzIFRocm93YWJsZSB7CisgICAgZG9JdGVtVGVzdCgpOworICB9CisgIHB1YmxpYyB2b2lkIHRlc3RDYXN0V2lsZGNhcmRzKCkgdGhyb3dzIFRocm93YWJsZSB7IGRvVGVzdCgpOyB9CisKKyAgcHVibGljIHZvaWQgdGVzdE5vU2Vjb25kTWV0aG9kVHlwZUFyZ3VtZW50cygpIHRocm93cyBUaHJvd2FibGUgeyBkb1Rlc3QoTG9va3VwLlJFUExBQ0VfU0VMRUNUX0NIQVIpOyB9CisKKyAgcHVibGljIHZvaWQgdGVzdE5vRmllbGRzSW5TdXBlckNvbnN0cnVjdG9yQ2FsbCgpIHRocm93cyBUaHJvd2FibGUgeyBkb1Rlc3QoKTsgfQorCisgIHB1YmxpYyB2b2lkIHRlc3ROb1VuaW5pdGlhbGl6ZWRGaWVsZHNJbkNvbnN0cnVjdG9yKCkgdGhyb3dzIFRocm93YWJsZSB7CisgICAgY29uZmlndXJlQnlUZXN0TmFtZSgpOworICAgIGFzc2VydFN0cmluZ0l0ZW1zKCJhYWMiLCAiYWFiIiwgImhhc2hDb2RlIik7CisgIH0KKyAgcHVibGljIHZvaWQgdGVzdEZpZWxkc1NldEluQW5vdGhlckNvbnN0cnVjdG9yKCkgdGhyb3dzIFRocm93YWJsZSB7IGRvVGVzdCgpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RGaWVsZHNTZXRBYm92ZSgpIHRocm93cyBUaHJvd2FibGUgeyBkb1Rlc3QoKTsgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RIb25vclNlbGVjdGlvbigpIHRocm93cyBUaHJvd2FibGUgeworICAgIGNvbmZpZ3VyZUJ5VGVzdE5hbWUoKTsKKyAgICBzZWxlY3QoKTsKKyAgICBjaGVja1Jlc3VsdEJ5VGVzdE5hbWUoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RUeXBlUGFyYW1ldGVyc0luaGVyaXRvcnMoKSB0aHJvd3MgVGhyb3dhYmxlIHsKKyAgICBjb25maWd1cmVCeVRlc3ROYW1lKCk7CisgICAgYXNzZXJ0U3RyaW5nSXRlbXMoIkZvbyIsICJCYXIiLCAiR29vIik7CisgICAgc2VsZWN0KCk7CisgICAgY2hlY2tSZXN1bHRCeVRlc3ROYW1lKCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0Vm9pZEV4cGVjdGVkVHlwZSgpIHRocm93cyBUaHJvd2FibGUgeworICAgIGNvbmZpZ3VyZUJ5VGVzdE5hbWUoKTsKKyAgICBhc3NlcnRTdHJpbmdJdGVtcygibm90aWZ5IiwgIm5vdGlmeUFsbCIsICJ3YWl0IiwgIndhaXQiLCAid2FpdCIsICJnZXRDbGFzcyIsICJlcXVhbHMiLCAiaGFzaENvZGUiLCAidG9TdHJpbmciKTsKKyAgICB0eXBlKCJlcSIpOworICAgIGFzc2VydEVxdWFscygiZXF1YWxzIiwgYXNzZXJ0T25lRWxlbWVudChnZXRMb29rdXAoKS5nZXRJdGVtcygpKS5nZXRMb29rdXBTdHJpbmcoKSk7CisgICAgc2VsZWN0KCk7CisgICAgY2hlY2tSZXN1bHRCeVRlc3ROYW1lKCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0RG91YmxlU2VtaWNvbG9uUGVuZXRyYXRpb24oKSB0aHJvd3MgVGhyb3dhYmxlIHsgZG9UZXN0KCk7IH0KKworICBwdWJsaWMgdm9pZCB0ZXN0VHlwZVBhcmFtZXRlcnNJbmhlcml0b3JzQ29tbWEoKSB0aHJvd3MgVGhyb3dhYmxlIHsgZG9UZXN0KCk7IH0KKworICBwdWJsaWMgdm9pZCB0ZXN0VHlwZVBhcmFtZXRlcnNJbmhlcml0b3JzSW5FeHByZXNzaW9uKCkgdGhyb3dzIFRocm93YWJsZSB7IGRvVGVzdCgpOyB9CisKKyAgLy9kbyB3ZSBuZWVkIHRvIHNlZSBhbGwgT2JqZWN0IGluaGVyaXRvcnMgYXQgYWxsPworICBwdWJsaWMgdm9pZCBfdGVzdFR5cGVQYXJhbWV0ZXJzT2JqZWN0SW5oZXJpdG9ycygpIHRocm93cyBUaHJvd2FibGUgeyBkb1Rlc3QoKTsgfQorCisgIHB1YmxpYyB2b2lkIHRlc3REb3VibGVUaGlzKCkgdGhyb3dzIFRocm93YWJsZSB7CisgICAgZG9UZXN0KCk7CisgICAgYXNzZXJ0TnVsbChteUl0ZW1zKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RTbWFydEZpbmlzaCgpIHRocm93cyBUaHJvd2FibGUgeyBkb1Rlc3QoTG9va3VwLkNPTVBMRVRFX1NUQVRFTUVOVF9TRUxFQ1RfQ0hBUik7IH0KKworICBwdWJsaWMgdm9pZCB0ZXN0U2lsbHlBc3NpZ25tZW50SW5UZXJuYXJ5KCkgdGhyb3dzIFRocm93YWJsZSB7IGRvVGVzdCgpOyB9CisKKyAgcHVibGljIHZvaWQgdGVzdFNhbWVGaWVsZEluQW5vdGhlck9iamVjdCgpIHRocm93cyBUaHJvd2FibGUgeyBkb1Rlc3QoKTsgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RVbnF1YWxpZmllZENvbnN0YW50SW5Td2l0Y2goKSB0aHJvd3MgVGhyb3dhYmxlIHsgZG9UZXN0KCk7IH0KKworICBwdWJsaWMgdm9pZCB0ZXN0QW1iaWd1b3VzQ29uc3RhbnQoKSB0aHJvd3MgVGhyb3dhYmxlIHsgZG9UZXN0KCk7IH0KKworICBwdWJsaWMgdm9pZCB0ZXN0U2FtZU5hbWVkRmllbGRBbmRMb2NhbCgpIHRocm93cyBUaHJvd2FibGUgeyBkb1Rlc3QoKTsgfQorCisgIHB1YmxpYyB2b2lkIHRlc3ROb1RhaWxXaGVuTm9QYWlyQnJhY2tldCgpIHRocm93cyBUaHJvd2FibGUgeyBkb1Rlc3ROb1BhaXJCcmFja2V0KExvb2t1cC5OT1JNQUxfU0VMRUNUX0NIQVIpOyB9CisKKyAgcHVibGljIHZvaWQgdGVzdE5vVGFpbFdoZW5Ob1BhaXJCcmFja2V0MigpIHRocm93cyBUaHJvd2FibGUgeyBkb1Rlc3ROb1BhaXJCcmFja2V0KExvb2t1cC5OT1JNQUxfU0VMRUNUX0NIQVIpOyB9CisKKyAgcHVibGljIHZvaWQgdGVzdEFub255bW91c05vUGFpckJyYWNrZXQoKSB0aHJvd3MgVGhyb3dhYmxlIHsgZG9UZXN0Tm9QYWlyQnJhY2tldChMb29rdXAuTk9STUFMX1NFTEVDVF9DSEFSKTsgfQorCisgIHByaXZhdGUgdm9pZCBkb1Rlc3ROb1BhaXJCcmFja2V0KGZpbmFsIGNoYXIgYykgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgYm9vbGVhbiBvbGQgPSBDb2RlSW5zaWdodFNldHRpbmdzLmdldEluc3RhbmNlKCkuQVVUT0lOU0VSVF9QQUlSX0JSQUNLRVQ7CisgICAgQ29kZUluc2lnaHRTZXR0aW5ncy5nZXRJbnN0YW5jZSgpLkFVVE9JTlNFUlRfUEFJUl9CUkFDS0VUID0gZmFsc2U7CisgICAgdHJ5IHsKKyAgICAgIGRvVGVzdChjKTsKKyAgICB9CisgICAgZmluYWxseSB7CisgICAgICBDb2RlSW5zaWdodFNldHRpbmdzLmdldEluc3RhbmNlKCkuQVVUT0lOU0VSVF9QQUlSX0JSQUNLRVQgPSBvbGQ7CisgICAgfQorICB9CisKKyAgcHVibGljIHZvaWQgdGVzdE5vQ29uc3RydWN0b3JUYWlsV2hlbk5vUGFpckJyYWNrZXQoKSB0aHJvd3MgVGhyb3dhYmxlIHsgZG9UZXN0Tm9QYWlyQnJhY2tldChMb29rdXAuTk9STUFMX1NFTEVDVF9DSEFSKTsgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RDb25zdHJ1Y3Rvck5vUGFpckJyYWNrZXRTZW1pY29sb24oKSB0aHJvd3MgVGhyb3dhYmxlIHsgZG9UZXN0Tm9QYWlyQnJhY2tldCgnOycpOyB9CisKKyAgcHVibGljIHZvaWQgdGVzdE1ldGhvZE5vUGFpckJyYWNrZXRDb21tYSgpIHRocm93cyBUaHJvd2FibGUgeyBkb1Rlc3ROb1BhaXJCcmFja2V0KCcsJyk7IH0KKworICBwdWJsaWMgdm9pZCB0ZXN0QWJzdHJhY3RDbGFzc1R3aWNlKCkgdGhyb3dzIFRocm93YWJsZSB7CisgICAgY29uZmlndXJlQnlUZXN0TmFtZSgpOworICAgIGFzc2VydE9uZUVsZW1lbnQobXlJdGVtcyk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0Q29uc3RhbnRUd2ljZSgpIHRocm93cyBUaHJvd2FibGUgeyBkb1Rlc3QoKTsgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RDb25zdGFudFR3aWNlMigpIHRocm93cyBUaHJvd2FibGUgeworICAgIGNvbmZpZ3VyZUJ5VGVzdE5hbWUoKTsKKyAgICBhc3NlcnRFcXVhbHMoMiwgbXlJdGVtcy5sZW5ndGgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdE5vS2V5Q29uc3RhbnQoKSB0aHJvd3MgVGhyb3dhYmxlIHsKKyAgICBjb25maWd1cmVCeVRlc3ROYW1lKCk7CisgICAgYXNzZXJ0U3RyaW5nSXRlbXMoIkFfS0VZIiwgImNyZWF0ZSIpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFVzZXJEYXRhTGlzdEFkZEFsbCgpIHRocm93cyBUaHJvd2FibGUgeworICAgIGRvVGVzdCgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFN0YXRpY1N1YmNsYXNzKCkgdGhyb3dzIFRocm93YWJsZSB7CisgICAgZG9UZXN0KCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0TWV0aG9kQ2FsbERvdCgpIHRocm93cyBUaHJvd2FibGUgeyBkb1Rlc3QoJ1xuJyk7IH0KKyAgcHVibGljIHZvaWQgdGVzdE5lZ2F0ZVZhcmlhYmxlKCkgdGhyb3dzIFRocm93YWJsZSB7IGRvVGVzdCgpOyB9CisKKyAgcHVibGljIHZvaWQgdGVzdEV4Y2xhbWF0aW9uTWV0aG9kRmluaXNoKCkgdGhyb3dzIFRocm93YWJsZSB7IGRvVGVzdCgnIScpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RFeGNsYW1hdGlvblZhcmlhYmxlRmluaXNoKCkgdGhyb3dzIFRocm93YWJsZSB7IGRvVGVzdCgnIScpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RFeGNsYW1hdGlvblN0YXRpY0ZpZWxkRmluaXNoKCkgdGhyb3dzIFRocm93YWJsZSB7IGRvVGVzdCgnIScpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RFeGNsYW1hdGlvbkZpbmlzaE5vbkJvb2xlYW4oKSB0aHJvd3MgVGhyb3dhYmxlIHsgZG9UZXN0KCchJyk7IH0KKworICBwdWJsaWMgdm9pZCB0ZXN0RXhjbHVkZURlY2xhcmVkQ29uc3RhbnQoKSB0aHJvd3MgVGhyb3dhYmxlIHsgZG9UZXN0KCk7IH0KKworICBwdWJsaWMgdm9pZCB0ZXN0VGFiTWV0aG9kSW5CaW5hcnlFeHByZXNzaW9uKCkgdGhyb3dzIFRocm93YWJsZSB7IGRvVGVzdCgnXHQnKTsgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RJZkNvbmRpdGlvbkJpbmFyeUV4cHJlc3Npb24oKSB0aHJvd3MgVGhyb3dhYmxlIHsgZG9UZXN0KCk7IH0KKworICBwdWJsaWMgdm9pZCB0ZXN0RGVsZWdhdGlvblRvUGFyZW50KCkgdGhyb3dzIFRocm93YWJsZSB7IGRvVGVzdCgnXHQnKTsgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RCZWZvcmVCaW5hcnlFeHByZXNzaW9uSW5NZXRob2RDYWxsKCkgdGhyb3dzIFRocm93YWJsZSB7IGRvVGVzdCgpOyB9CisKKyAgcHVibGljIHZvaWQgdGVzdEFzc2lnbmFibGVUb0FmdGVyQ2FzdCgpIHRocm93cyBUaHJvd2FibGUgeyBkb1Rlc3QoKTsgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RJbnN0YW5jZU1ldGhvZFBhcmFtZXRlcnNGcm9tU3RhdGljQ29udGV4dCgpIHRocm93cyBUaHJvd2FibGUgeyBkb1Rlc3QoKTsgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RJbnN0YW5jZU1ldGhvZFBhcmFtZXRlcnNGcm9tU3RhdGljQ29udGV4dDIoKSB0aHJvd3MgVGhyb3dhYmxlIHsgZG9UZXN0KCk7IH0KKworICBwdWJsaWMgdm9pZCB0ZXN0QmVmb3JlQ2FzdFRvQXJyYXkoKSB0aHJvd3MgVGhyb3dhYmxlIHsgZG9UZXN0KCk7IH0KKworICBwdWJsaWMgdm9pZCB0ZXN0SGlkaW5nRmllbGRzKCkgdGhyb3dzIFRocm93YWJsZSB7IGRvVGVzdCgpOyB9CisKKyAgcHVibGljIHZvaWQgdGVzdFZvaWRDYXN0KCkgdGhyb3dzIFRocm93YWJsZSB7IGRvQW50aVRlc3QoKTsgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RJbnRQbHVzTG9uZ05vdERvdWJsZSgpIHRocm93cyBUaHJvd2FibGUgeyBkb1Rlc3QoKTsgfQorCisgIHB1YmxpYyB2b2lkIHRlc3ROZXN0ZWRBc3NpZ25tZW50cygpIHRocm93cyBUaHJvd2FibGUgeyBkb1Rlc3QoKTsgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RBZnRlck5ld0luVGVybmFyeSgpIHRocm93cyBUaHJvd2FibGUgeyBkb1Rlc3QoKTsgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RTdWdnZXN0QW55dGhpbmdXaGVuV2lsZGNhcmRFeHBlY3RlZCgpIHRocm93cyBUaHJvd2FibGUgeworICAgIGNvbmZpZ3VyZUJ5VGVzdE5hbWUoKTsKKyAgICBhc3NlcnRTdHJpbmdJdGVtcygiWCIsICJZIiwgIloiKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3ROZXdWYXJhcmcoKSB0aHJvd3MgVGhyb3dhYmxlIHsKKyAgICBjb25maWd1cmVCeVRlc3ROYW1lKCk7CisgICAgYXNzZXJ0U3RyaW5nSXRlbXMoIkZvbyIsICJGb28iKTsKKyAgICBhc3NlcnRFcXVhbHMoInsuLi59IChkZWZhdWx0IHBhY2thZ2UpIiwgTG9va3VwRWxlbWVudFByZXNlbnRhdGlvbi5yZW5kZXJFbGVtZW50KG15SXRlbXNbMF0pLmdldFRhaWxUZXh0KCkpOworICAgIGFzc2VydEVxdWFscygiW10gKGRlZmF1bHQgcGFja2FnZSkiLCBMb29rdXBFbGVtZW50UHJlc2VudGF0aW9uLnJlbmRlckVsZW1lbnQobXlJdGVtc1sxXSkuZ2V0VGFpbFRleHQoKSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0TmV3VmFyYXJnMigpIHRocm93cyBUaHJvd2FibGUgeworICAgIGNvbmZpZ3VyZUJ5VGVzdE5hbWUoKTsKKyAgICBhc3NlcnRTdHJpbmdJdGVtcygiU3RyaW5nIiwgIlN0cmluZyIpOworICAgIGFzc2VydEVxdWFscygiIChqYXZhLmxhbmcpIiwgTG9va3VwRWxlbWVudFByZXNlbnRhdGlvbi5yZW5kZXJFbGVtZW50KG15SXRlbXNbMF0pLmdldFRhaWxUZXh0KCkpOworICAgIGFzc2VydEVxdWFscygiW10gKGphdmEubGFuZykiLCBMb29rdXBFbGVtZW50UHJlc2VudGF0aW9uLnJlbmRlckVsZW1lbnQobXlJdGVtc1sxXSkuZ2V0VGFpbFRleHQoKSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0TmV3Qnl0ZUFycmF5KCkgeworICAgIGNvbmZpZ3VyZUJ5VGVzdE5hbWUoKTsKKyAgICBhc3NlcnRTdHJpbmdJdGVtcygiYnl0ZSIpOworICAgIGFzc2VydEVxdWFscygiW10iLCBMb29rdXBFbGVtZW50UHJlc2VudGF0aW9uLnJlbmRlckVsZW1lbnQobXlJdGVtc1swXSkuZ2V0VGFpbFRleHQoKSk7CisKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RJbnNpZGVTdHJpbmdMaXRlcmFsKCkgdGhyb3dzIFRocm93YWJsZSB7IGRvQW50aVRlc3QoKTsgfQorCisgIHB1YmxpYyB2b2lkIHRlc3REZWZhdWx0QW5ub1BhcmFtKCkgdGhyb3dzIFRocm93YWJsZSB7IGRvVGVzdCgpOyB9CisKKyAgcHVibGljIHZvaWQgdGVzdENhc3RHZW5lcmljUXVhbGlmaWVyKCkgdGhyb3dzIFRocm93YWJsZSB7IGRvVGVzdCgpOyB9CisKKyAgcHVibGljIHZvaWQgdGVzdEV2ZXJ5dGhpbmdEb3VibGVzKCkgdGhyb3dzIFRocm93YWJsZSB7CisgICAgY29uZmlndXJlQnlUZXN0TmFtZSgpOworICAgIGFzc2VydFN0cmluZ0l0ZW1zKCJoYXNoQ29kZSIsICJpbmRleE9mIiwgImxhc3RJbmRleE9mIiwgInNpemUiKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3ROb25TdGF0aWNJbm5lckNsYXNzKCkgdGhyb3dzIFRocm93YWJsZSB7CisgICAgY29uZmlndXJlQnlUZXN0TmFtZSgpOworICAgIGFzc2VydEVtcHR5KG15SXRlbXMpOworICAgIGNoZWNrUmVzdWx0QnlGaWxlKCIvIiArIGdldFRlc3ROYW1lKGZhbHNlKSArICIuamF2YSIpOworICB9CisKKyAgLy90b2RvIDJuZCBjb21wbGV0aW9uCisgIHB1YmxpYyB2b2lkIF90ZXN0RGVmYXVsdEFubm9QYXJhbTIoKSB0aHJvd3MgVGhyb3dhYmxlIHsgZG9UZXN0KCk7IH0KKworICBwdWJsaWMgdm9pZCB0ZXN0TGl2ZVRlbXBsYXRlKCkgdGhyb3dzIFRocm93YWJsZSB7CisgICAgZmluYWwgVGVtcGxhdGUgdGVtcGxhdGUgPSBUZW1wbGF0ZU1hbmFnZXIuZ2V0SW5zdGFuY2UoZ2V0UHJvamVjdCgpKS5jcmVhdGVUZW1wbGF0ZSgiZm9vIiwgInp6eiIpOworICAgIHRlbXBsYXRlLmFkZFRleHRTZWdtZW50KCJGb29GYWN0b3J5LmNyZWF0ZUZvbygpIik7CisgICAgZmluYWwgU21hcnRDb21wbGV0aW9uQ29udGV4dFR5cGUgY29tcGxldGlvbkNvbnRleHRUeXBlID0KKyAgICAgIENvbnRhaW5lclV0aWwuZmluZEluc3RhbmNlKFRlbXBsYXRlQ29udGV4dFR5cGUuRVBfTkFNRS5nZXRFeHRlbnNpb25zKCksIFNtYXJ0Q29tcGxldGlvbkNvbnRleHRUeXBlLmNsYXNzKTsKKyAgICAoKFRlbXBsYXRlSW1wbCl0ZW1wbGF0ZSkuZ2V0VGVtcGxhdGVDb250ZXh0KCkuc2V0RW5hYmxlZChjb21wbGV0aW9uQ29udGV4dFR5cGUsIHRydWUpOworICAgIFRlbXBsYXRlU2V0dGluZ3MuZ2V0SW5zdGFuY2UoKS5hZGRUZW1wbGF0ZSh0ZW1wbGF0ZSk7CisgICAgdHJ5IHsKKyAgICAgIGRvVGVzdCgpOworICAgIH0KKyAgICBmaW5hbGx5IHsKKyAgICAgIFRlbXBsYXRlU2V0dGluZ3MuZ2V0SW5zdGFuY2UoKS5yZW1vdmVUZW1wbGF0ZSh0ZW1wbGF0ZSk7CisgICAgfQorICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEluVGhpc0V4cHJlc3Npb24oKSB0aHJvd3MgVGhyb3dhYmxlIHsgZG9UZXN0KCk7IH0KKworICBwdWJsaWMgdm9pZCB0ZXN0U3VnZ2VzdE51bGwoKSB0aHJvd3MgVGhyb3dhYmxlIHsgZG9UZXN0KCk7IH0KKworICBwdWJsaWMgdm9pZCB0ZXN0Tm9OdWxsQWZ0ZXJEb3QoKSB0aHJvd3MgVGhyb3dhYmxlIHsKKyAgICBjb25maWd1cmVCeVRlc3ROYW1lKCk7CisgICAgYXNzZXJ0RW1wdHkobXlJdGVtcyk7CisgICAgY2hlY2tSZXN1bHRCeUZpbGUoIi8iICsgZ2V0VGVzdE5hbWUoZmFsc2UpICsgIi5qYXZhIik7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0RGVmYXVsdEFubm9NZXRob2RWYWx1ZSgpIHRocm93cyBUaHJvd2FibGUgeyBkb1Rlc3QoKTsgfQorCisgIHB1YmxpYyB2b2lkIHRlc3ROZXdBbm9ueW1vdXNGdW5jdGlvbigpIHRocm93cyBUaHJvd2FibGUgeyBkb1Rlc3QoKTsgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RVc2VJbnRDb25zdGFudHNGcm9tVGFyZ2V0Q2xhc3MoKSB0aHJvd3MgVGhyb3dhYmxlIHsgZG9UZXN0KCk7IH0KKyAgcHVibGljIHZvaWQgdGVzdFVzZUludENvbnN0YW50c0Zyb21UYXJnZXRDbGFzc1JldHVyblZhbHVlKCkgdGhyb3dzIFRocm93YWJsZSB7IGRvVGVzdCgpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RVc2VJbnRDb25zdGFudHNGcm9tQ29uc3RydWN0ZWRDbGFzcygpIHRocm93cyBUaHJvd2FibGUgeyBkb1Rlc3QoKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0VXNlSW50Q29uc3RhbnRzSW5QbHVzKCkgdGhyb3dzIFRocm93YWJsZSB7IGRvVGVzdCgpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RVc2VJbnRDb25zdGFudHNJbk9yKCkgdGhyb3dzIFRocm93YWJsZSB7IGRvVGVzdCgpOyB9CisKKyAgcHVibGljIHZvaWQgdGVzdEV4dHJhU2VtaWNvbG9uQWZ0ZXJNZXRob2RQYXJhbSgpIHRocm93cyBUaHJvd2FibGUgeworICAgIGdldENvZGVTdHlsZVNldHRpbmdzKCkuU1BBQ0VfV0lUSElOX01FVEhPRF9DQUxMX1BBUkVOVEhFU0VTID0gdHJ1ZTsKKyAgICBkb1Rlc3QoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RBc3NpZ25Gcm9tVGhlU2FtZUZpZWxkT2ZBbm90aGVyT2JqZWN0KCkgdGhyb3dzIFRocm93YWJsZSB7CisgICAgZG9UZXN0KCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0VGFpbEFmdGVySW5zdGFuY2VPZigpIHRocm93cyBUaHJvd2FibGUgeworICAgIGRvVGVzdCgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFN1Z2dlc3RJbnN0YW5jZW9mZWRWYWx1ZSgpIHRocm93cyBUaHJvd2FibGUgeworICAgIGRvVGVzdCgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFN1Z2dlc3RJbnN0YW5jZW9mZWRWYWx1ZUluVGVybmFyeSgpIHRocm93cyBUaHJvd2FibGUgeworICAgIGRvVGVzdCgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFN1Z2dlc3RJbnN0YW5jZW9mZWRWYWx1ZUluQ29tcGxleElmKCkgdGhyb3dzIFRocm93YWJsZSB7IGRvVGVzdCgnXG4nKTsgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RTdWdnZXN0SW5zdGFuY2VvZmVkVmFsdWVJbkVsc2VOZWdhdGVkKCkgdGhyb3dzIFRocm93YWJsZSB7IGRvVGVzdCgnXG4nKTsgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RTdWdnZXN0SW5zdGFuY2VvZmVkVmFsdWVBZnRlclJldHVybigpIHRocm93cyBUaHJvd2FibGUgeyBkb1Rlc3QoJ1xuJyk7IH0KKworICBwdWJsaWMgdm9pZCB0ZXN0Tm9JbnN0YW5jZW9mZWRWYWx1ZVdoZW5CYXNpY1N1aXRzKCkgdGhyb3dzIFRocm93YWJsZSB7IGRvVGVzdCgpOyB9CisKKyAgcHVibGljIHZvaWQgdGVzdFN1Z2dlc3RDYXN0ZWRWYWx1ZUFmdGVyQ2FzdCgpIHRocm93cyBUaHJvd2FibGUgeyBkb1Rlc3QoJ1xuJyk7IH0KKworICBwdWJsaWMgdm9pZCB0ZXN0Tm9JbnN0YW5jZW9mZWRWYWx1ZUluRWxzZSgpIHRocm93cyBUaHJvd2FibGUgeyBkb0FudGlUZXN0KCk7IH0KKworICBwdWJsaWMgdm9pZCB0ZXN0Tm9JbnN0YW5jZW9mZWRWYWx1ZUluVGhlbk5lZ2F0ZWQoKSB0aHJvd3MgVGhyb3dhYmxlIHsgZG9BbnRpVGVzdCgpOyB9CisKKyAgcHVibGljIHZvaWQgdGVzdE5vSW5zdGFuY2VvZmVkVmFsdWVJbkVsc2VXaXRoQ29tcGxleElmKCkgdGhyb3dzIFRocm93YWJsZSB7IGRvQW50aVRlc3QoKTsgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RSZXBsYWNlV2hvbGVSZWZlcmVuY2VDaGFpbigpIHRocm93cyBUaHJvd2FibGUgeyBkb1Rlc3QoTG9va3VwLlJFUExBQ0VfU0VMRUNUX0NIQVIpOyB9CisKKyAgcHVibGljIHZvaWQgdGVzdEluc3RhbmNlb2ZlZEluc2lkZUFub255bW91cygpIHRocm93cyBUaHJvd2FibGUgeyBkb1Rlc3QoTG9va3VwLlJFUExBQ0VfU0VMRUNUX0NIQVIpOyB9CisKKyAgcHVibGljIHZvaWQgdGVzdERvdWJsZVRydWVJbk92ZXJsb2FkZWRNZXRob2RDYWxsKCkgdGhyb3dzIFRocm93YWJsZSB7IGRvVGVzdChMb29rdXAuUkVQTEFDRV9TRUxFQ1RfQ0hBUik7IH0KKworICBwdWJsaWMgdm9pZCB0ZXN0TWV0aG9kQ29sb24oKSB0aHJvd3MgRXhjZXB0aW9uIHsgZG9GaXJzdEl0ZW1UZXN0KCc6Jyk7IH0KKyAgcHVibGljIHZvaWQgdGVzdFZhcmlhYmxlQ29sb24oKSB0aHJvd3MgRXhjZXB0aW9uIHsgZG9GaXJzdEl0ZW1UZXN0KCc6Jyk7IH0KKworICBwcml2YXRlIHZvaWQgZG9GaXJzdEl0ZW1UZXN0KGNoYXIgYykgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgY29uZmlndXJlQnlUZXN0TmFtZSgpOworICAgIHNlbGVjdChjKTsKKyAgICBjaGVja1Jlc3VsdEJ5VGVzdE5hbWUoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RPbmVFbGVtZW50QXJyYXkoKSB0aHJvd3MgVGhyb3dhYmxlIHsgZG9UZXN0KCk7IH0KKworICBwdWJsaWMgdm9pZCB0ZXN0Q2FzdFRvQXJyYXkoKSB0aHJvd3MgVGhyb3dhYmxlIHsgZG9UZXN0KCk7IH0KKworICBwdWJsaWMgdm9pZCB0ZXN0RG9udEF1dG9DYXN0V2hlbkFscmVhZHlDYXN0ZWQoKSB0aHJvd3MgVGhyb3dhYmxlIHsKKyAgICBjb25maWd1cmVCeVRlc3ROYW1lKCk7CisgICAgbXlGaXh0dXJlLmFzc2VydFByZWZlcnJlZENvbXBsZXRpb25JdGVtcygwLCAicyIsICJ0b1N0cmluZyIpOworICAgIHNlbGVjdCgpOworICAgIGNoZWNrUmVzdWx0QnlUZXN0TmFtZSgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEF1dG9DYXN0V2hlbkFscmVhZHlDYXN0ZWQoKSB0aHJvd3MgVGhyb3dhYmxlIHsgZG9UZXN0KCdcbicpOyB9CisKKyAgcHVibGljIHZvaWQgdGVzdENvbW1hRG91YmxlUGVuZXRyYXRpb24oKSB0aHJvd3MgVGhyb3dhYmxlIHsKKyAgICBkb0ZpcnN0SXRlbVRlc3QoJywnKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RTdXBlck1ldGhvZEFyZ3VtZW50cygpIHRocm93cyBUaHJvd2FibGUgeworICAgIGNvbmZpZ3VyZUJ5VGVzdE5hbWUoKTsKKyAgICBnZXRMb29rdXAoKS5zZXRDdXJyZW50SXRlbShnZXRMb29rdXAoKS5nZXRJdGVtcygpLmdldCgxKSk7CisgICAgc2VsZWN0KCk7CisgICAgY2hlY2tSZXN1bHRCeVRlc3ROYW1lKCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0RGVsZWdhdGVNZXRob2RBcmd1bWVudHMoKSB0aHJvd3MgVGhyb3dhYmxlIHsKKyAgICBjb25maWd1cmVCeVRlc3ROYW1lKCk7CisgICAgZ2V0TG9va3VwKCkuc2V0Q3VycmVudEl0ZW0oZ2V0TG9va3VwKCkuZ2V0SXRlbXMoKS5nZXQoMSkpOworICAgIHNlbGVjdCgpOworICAgIGNoZWNrUmVzdWx0QnlUZXN0TmFtZSgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFNhbWVNZXRob2RBcmd1bWVudHNJbklmKCkgdGhyb3dzIFRocm93YWJsZSB7CisgICAgY29uZmlndXJlQnlUZXN0TmFtZSgpOworICAgIGdldExvb2t1cCgpLnNldEN1cnJlbnRJdGVtKGdldExvb2t1cCgpLmdldEl0ZW1zKCkuZ2V0KDEpKTsKKyAgICBzZWxlY3QoKTsKKyAgICBjaGVja1Jlc3VsdEJ5VGVzdE5hbWUoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RTdXBlckNvbnN0cnVjdG9yQXJndW1lbnRzKCkgdGhyb3dzIFRocm93YWJsZSB7CisgICAgY29uZmlndXJlQnlUZXN0TmFtZSgpOworICAgIGdldExvb2t1cCgpLnNldEN1cnJlbnRJdGVtKGdldExvb2t1cCgpLmdldEl0ZW1zKCkuZ2V0KDIpKTsKKyAgICBzZWxlY3QoKTsKKyAgICBjaGVja1Jlc3VsdEJ5VGVzdE5hbWUoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RTYW1lTmFtZWRBcmd1bWVudHMoKSB0aHJvd3MgVGhyb3dhYmxlIHsKKyAgICBjb25maWd1cmVCeVRlc3ROYW1lKCk7CisgICAgZ2V0TG9va3VwKCkuc2V0Q3VycmVudEl0ZW0oZ2V0TG9va3VwKCkuZ2V0SXRlbXMoKS5nZXQoNCkpOworICAgIHNlbGVjdCgpOworICAgIGNoZWNrUmVzdWx0QnlUZXN0TmFtZSgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFNhbWVOYW1lZEFyZ3VtZW50c0RlbGVnYXRpb24oKSB0aHJvd3MgVGhyb3dhYmxlIHsKKyAgICBjb25maWd1cmVCeVRlc3ROYW1lKCk7CisgICAgZ2V0TG9va3VwKCkuc2V0Q3VycmVudEl0ZW0oZ2V0TG9va3VwKCkuZ2V0SXRlbXMoKS5nZXQoMSkpOworICAgIHNlbGVjdCgpOworICAgIGNoZWNrUmVzdWx0QnlUZXN0TmFtZSgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFdyb25nQW5vbnltb3VzKCkgdGhyb3dzIFRocm93YWJsZSB7CisgICAgY29uZmlndXJlQnlUZXN0TmFtZSgpOworICAgIHNlbGVjdCgpOworICAgIGNoZWNrUmVzdWx0QnlUZXN0TmFtZSgpOworICB9CisKKyAgcHJpdmF0ZSB2b2lkIGRvQW50aVRlc3QoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBjb25maWd1cmVCeVRlc3ROYW1lKCk7CisgICAgYXNzZXJ0RW1wdHkobXlJdGVtcyk7CisgICAgY2hlY2tSZXN1bHRCeUZpbGUoIi8iICsgZ2V0VGVzdE5hbWUoZmFsc2UpICsgIi5qYXZhIik7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0QWZ0ZXJOZXdXaXRoR2VuZXJpY3MoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb0FjdGlvblRlc3QoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RDbGFzc0xpdGVyYWwoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb0FjdGlvblRlc3QoKTsKKyAgICBhc3NlcnRTdHJpbmdJdGVtcygiU3RyaW5nLmNsYXNzIik7CisKKyAgICBMb29rdXBFbGVtZW50UHJlc2VudGF0aW9uIHAgPSBuZXcgTG9va3VwRWxlbWVudFByZXNlbnRhdGlvbigpOworICAgIG15Rml4dHVyZS5nZXRMb29rdXBFbGVtZW50cygpWzBdLnJlbmRlckVsZW1lbnQocCk7CisgICAgYXNzZXJ0RXF1YWxzKCJTdHJpbmcuY2xhc3MiLCBwLmdldEl0ZW1UZXh0KCkpOworICAgIGFzc2VydEVxdWFscygiIChqYXZhLmxhbmcpIiwgcC5nZXRUYWlsVGV4dCgpKTsKKyAgICBhc3NlcnROdWxsKHAuZ2V0VHlwZVRleHQoKSk7CisgIH0KKyAgcHVibGljIHZvaWQgdGVzdE5vQ2xhc3NMaXRlcmFsKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9BY3Rpb25UZXN0KCk7CisgICAgYXNzZXJ0U3RyaW5nSXRlbXMoIk9iamVjdC5jbGFzcyIsICJmb3JOYW1lIiwgImZvck5hbWUiLCAiZ2V0Q2xhc3MiKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RDbGFzc0xpdGVyYWxJbkFubm8yKCkgdGhyb3dzIFRocm93YWJsZSB7CisgICAgZG9JdGVtVGVzdCgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdENsYXNzTGl0ZXJhbEluaGVyaXRvcnMoKSB0aHJvd3MgVGhyb3dhYmxlIHsKKyAgICBkb0l0ZW1UZXN0KCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0SW5zZXJ0T3ZlcnJpZGUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBDb2RlU3R5bGVTZXR0aW5ncyBzdHlsZVNldHRpbmdzID0gQ29kZVN0eWxlU2V0dGluZ3NNYW5hZ2VyLmdldFNldHRpbmdzKGdldFByb2plY3QoKSk7CisgICAgc3R5bGVTZXR0aW5ncy5JTlNFUlRfT1ZFUlJJREVfQU5OT1RBVElPTiA9IHRydWU7CisgICAgZG9JdGVtVGVzdCgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEZvcmVhY2goKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb0FjdGlvblRlc3QoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RJREVBREVWMjYyNigpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvQWN0aW9uVGVzdCgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdENhc3RXaXRoMlR5cGVQYXJhbWV0ZXJzKCkgdGhyb3dzIFRocm93YWJsZSB7IGRvVGVzdCgpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RDbGFzc0xpdGVyYWxJbkFycmF5QW5ub0luaXRpYWxpemVyKCkgdGhyb3dzIFRocm93YWJsZSB7IGRvVGVzdCgpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RDbGFzc0xpdGVyYWxJbkFycmF5QW5ub0luaXRpYWxpemVyMigpIHRocm93cyBUaHJvd2FibGUgeyBkb1Rlc3QoKTsgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RBbm5vdGF0aW9uKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgY29uZmlndXJlQnlUZXN0TmFtZSgpOworICAgIGFzc2VydFN0cmluZ0l0ZW1zKCJFbGVtZW50VHlwZS5BTk5PVEFUSU9OX1RZUEUiLCAiRWxlbWVudFR5cGUuQ09OU1RSVUNUT1IiLAorICAgICAgICAgICAgICAgICAgICAgICJFbGVtZW50VHlwZS5GSUVMRCIsICJFbGVtZW50VHlwZS5MT0NBTF9WQVJJQUJMRSIsCisgICAgICAgICAgICAgICAgICAgICAgIkVsZW1lbnRUeXBlLk1FVEhPRCIsICJFbGVtZW50VHlwZS5QQUNLQUdFIiwgIkVsZW1lbnRUeXBlLlBBUkFNRVRFUiIsCisgICAgICAgICAgICAgICAgICAgICAgIkVsZW1lbnRUeXBlLlRZUEUiLCAiRWxlbWVudFR5cGUuVFlQRV9QQVJBTUVURVIiLCAiRWxlbWVudFR5cGUuVFlQRV9VU0UiKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RBbm5vdGF0aW9uMigpIHRocm93cyBFeGNlcHRpb24geworICAgIGNvbmZpZ3VyZUJ5VGVzdE5hbWUoKTsKKyAgICBhc3NlcnRTdHJpbmdJdGVtcygiUmV0ZW50aW9uUG9saWN5LkNMQVNTIiwgIlJldGVudGlvblBvbGljeS5SVU5USU1FIiwgIlJldGVudGlvblBvbGljeS5TT1VSQ0UiKTsKKyAgfQorICBwdWJsaWMgdm9pZCB0ZXN0QW5ub3RhdGlvbjJfMigpIHRocm93cyBFeGNlcHRpb24geworICAgIGNvbmZpZ3VyZUJ5VGVzdE5hbWUoKTsKKyAgICBhc3NlcnRTYW1lRWxlbWVudHMobXlGaXh0dXJlLmdldExvb2t1cEVsZW1lbnRTdHJpbmdzKCksICJSZXRlbnRpb25Qb2xpY3kuQ0xBU1MiLCAiUmV0ZW50aW9uUG9saWN5LlNPVVJDRSIsICJSZXRlbnRpb25Qb2xpY3kuUlVOVElNRSIpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEFubm90YXRpb24zKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0QW5ub3RhdGlvbjNfMigpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdCgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEFubm90YXRpb240KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgY29uZmlndXJlQnlUZXN0TmFtZSgpOworICAgIGNoZWNrUmVzdWx0QnlUZXN0TmFtZSgpOworCisgICAgYXNzZXJ0U3RyaW5nSXRlbXMoImZhbHNlIiwgInRydWUiKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RBbm5vdGF0aW9uNSgpIHRocm93cyBFeGNlcHRpb24geworICAgIGNvbmZpZ3VyZUJ5VGVzdE5hbWUoKTsKKyAgICBjaGVja1Jlc3VsdEJ5VGVzdE5hbWUoKTsKKworICAgIGFzc2VydFN0cmluZ0l0ZW1zKCJDT05ORUNUSU9OIiwgIk5PX0NPTk5FQ1RJT04iKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RBbm5vdGF0aW9uNigpIHRocm93cyBFeGNlcHRpb24geworICAgIGNvbmZpZ3VyZUJ5VGVzdE5hbWUoKTsKKyAgCisgICAgYXNzZXJ0U3RyaW5nSXRlbXMoIkVsZW1lbnRUeXBlLkFOTk9UQVRJT05fVFlQRSIsICJFbGVtZW50VHlwZS5DT05TVFJVQ1RPUiIsCisgICAgICAgICAgICAgICAgICAgICAgIkVsZW1lbnRUeXBlLkZJRUxEIiwgIkVsZW1lbnRUeXBlLkxPQ0FMX1ZBUklBQkxFIiwKKyAgICAgICAgICAgICAgICAgICAgICAiRWxlbWVudFR5cGUuTUVUSE9EIiwgIkVsZW1lbnRUeXBlLlBBQ0tBR0UiLCAiRWxlbWVudFR5cGUuUEFSQU1FVEVSIiwKKyAgICAgICAgICAgICAgICAgICAgICAiRWxlbWVudFR5cGUuVFlQRSIsICJFbGVtZW50VHlwZS5UWVBFX1BBUkFNRVRFUiIsICJFbGVtZW50VHlwZS5UWVBFX1VTRSIpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEFycmF5Q2xvbmUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RJREVBREVWNTE1MCgpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdCgnXG4nKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RJREVBREVWNzgzNSgpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdCgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFR5cGVBcmdzMSgpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdCgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFR5cGVBcmdzMigpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdCgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdElmQ29uZGl0aW9uRXhwZWN0ZWRUeXBlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7IGRvVGVzdCgpOyB9CisKKyAgcHVibGljIHZvaWQgdGVzdFVuYm91bmRUeXBlQXJncygpIHRocm93cyBFeGNlcHRpb24geyBkb1Rlc3QoKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0VW5ib3VuZFR5cGVBcmdzMigpIHRocm93cyBFeGNlcHRpb24geyBkb1Rlc3QoKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0U2FtZVR5cGVBcmcoKSB0aHJvd3MgRXhjZXB0aW9uIHsgZG9UZXN0KCk7IH0KKworICBwdWJsaWMgdm9pZCB0ZXN0SURFQURFVjI2NjgoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RFeGNlc3NpdmVUYWlsKCkgdGhyb3dzIEV4Y2VwdGlvbiB7IGRvVGVzdCgpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RTZXZlcmFsVHlwZUFyZ3VtZW50cygpIHRocm93cyBFeGNlcHRpb24geyBkb1Rlc3QoKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0U2V2ZXJhbFR5cGVBcmd1bWVudHNTb21lVW5rbm93bigpIHRocm93cyBFeGNlcHRpb24geyBkb1Rlc3QoKTsgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RFeHRlbmRzSW5UeXBlQ2FzdCgpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdCgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFRhYk1ldGhvZENhbGwoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb0ZpcnN0SXRlbVRlc3QoTG9va3VwLlJFUExBQ0VfU0VMRUNUX0NIQVIpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdENvbnN0cnVjdG9yQXJnc1NtYXJ0RW50ZXIoKSB0aHJvd3MgRXhjZXB0aW9uIHsgZG9UZXN0KExvb2t1cC5DT01QTEVURV9TVEFURU1FTlRfU0VMRUNUX0NIQVIpOyB9CisKKyAgcHJpdmF0ZSB2b2lkIGNvbmZpZ3VyZUJ5VGVzdE5hbWUoKSB7CisgICAgY29uZmlndXJlQnlGaWxlKCIvIiArIGdldFRlc3ROYW1lKGZhbHNlKSArICIuamF2YSIpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdElERUFERVYxMzE0OCgpIHRocm93cyBFeGNlcHRpb24geworICAgIGNvbmZpZ3VyZUJ5RmlsZSgiL0lERUFERVYxMzE0OC5qYXZhIik7CisgICAgYXNzZXJ0U3RyaW5nSXRlbXMoImZhbHNlIiwgInRydWUiKTsgLy90b2RvIGRvbid0IHN1Z2dlc3QgYm9vbGVhbiBsaXRlcmFscyBpbiBzeW5jaHJvbml6ZWQKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RTdWdnZXN0TmFtZXMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBjb25maWd1cmVCeVRlc3ROYW1lKCk7CisgICAgYXNzZXJ0U3RyaW5nSXRlbXMoImFycmF5TGlzdCIsICJsaXN0Iik7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0T3ZlcmxvYWRlZE1ldGhvZHMoKSB0aHJvd3MgVGhyb3dhYmxlIHsKKyAgICBkb1Rlc3QoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3ROb0NvbW1hQmVmb3JlVmFyYXJncygpIHRocm93cyBUaHJvd2FibGUgeyBkb1Rlc3QoKTsgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RFbnVtRmllbGQoKSB0aHJvd3MgVGhyb3dhYmxlIHsKKyAgICBkb0l0ZW1UZXN0KCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0RW51bUZpZWxkMSgpIHRocm93cyBFeGNlcHRpb24geworICAgIGNvbmZpZ3VyZUJ5VGVzdE5hbWUoKTsKKyAgICBjaGVja1Jlc3VsdEJ5VGVzdE5hbWUoKTsKKyAgICBhc3NlcnRFcXVhbHMoNCwgbXlJdGVtcy5sZW5ndGgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEluc2VydFR5cGVQYXJhbWV0ZXJzT25JbXBvcnRpbmcoKSB0aHJvd3MgVGhyb3dhYmxlIHsgZG9UZXN0KCdcbicpOyB9CisKKyAgcHVibGljIHZvaWQgdGVzdEVtcHR5TGlzdEluUmV0dXJuKCkgdGhyb3dzIFRocm93YWJsZSB7IGRvSXRlbVRlc3QoKTsgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RFbXB0eUxpc3RJblJldHVybjIoKSB0aHJvd3MgVGhyb3dhYmxlIHsgZG9UZXN0KCk7IH0KKworICBwdWJsaWMgdm9pZCB0ZXN0RW1wdHlMaXN0SW5SZXR1cm5UZXJuYXJ5KCkgdGhyb3dzIFRocm93YWJsZSB7IGRvSXRlbVRlc3QoKTsgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RFbXB0eUxpc3RCZWZvcmVTZW1pY29sb24oKSB0aHJvd3MgVGhyb3dhYmxlIHsgZG9JdGVtVGVzdCgpOyB9CisKKyAgcHVibGljIHZvaWQgdGVzdEVtcHR5TGlzdFdpdGhDb2xsZWN0aW9uc1ByZWZpeCgpIHRocm93cyBUaHJvd2FibGUgeyBkb0l0ZW1UZXN0KCk7IH0KKworICBwdWJsaWMgdm9pZCB0ZXN0Rm9yZWFjaExvb3BWYXJpYWJsZUluSXRlcmFibGVFeHByZXNzaW9uKCkgdGhyb3dzIFRocm93YWJsZSB7IGRvQW50aVRlc3QoKTsgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RTdGF0aWNhbGx5SW1wb3J0ZWRNYWdpY01ldGhvZCgpIHRocm93cyBUaHJvd2FibGUgeworICAgIGNvbmZpZ3VyZUJ5VGVzdE5hbWUoKTsKKyAgICBhc3NlcnRTdHJpbmdJdGVtcygiZm9vIik7CisgICAgc2VsZWN0SXRlbShteUl0ZW1zWzBdLCAnXHQnKTsKKyAgICBjaGVja1Jlc3VsdEJ5VGVzdE5hbWUoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIF90ZXN0Q2FsbFZhcmFyZ0FyZ3VtZW50KCkgdGhyb3dzIFRocm93YWJsZSB7IGRvVGVzdCgpOyB9CisKKyAgcHVibGljIHZvaWQgdGVzdFRhYlRvUmVwbGFjZUNsYXNzS2V5d29yZCgpIHRocm93cyBUaHJvd2FibGUgeworICAgIGNvbmZpZ3VyZUJ5VGVzdE5hbWUoKTsKKyAgICBzZWxlY3RJdGVtKG15SXRlbXNbMF0sIExvb2t1cC5SRVBMQUNFX1NFTEVDVF9DSEFSKTsKKyAgICBjaGVja1Jlc3VsdEJ5VGVzdE5hbWUoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3ROb1R5cGVQYXJhbWV0ZXJzRm9yVG9BcnJheSgpIHRocm93cyBUaHJvd2FibGUgeworICAgIGRvVGVzdCgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFN0YXRpY2FsbHlJbXBvcnRlZEZpZWxkKCkgdGhyb3dzIFRocm93YWJsZSB7IGRvVGVzdCgnXG4nKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0U2libGluZ09mQVN0YXRpY2FsbHlJbXBvcnRlZEZpZWxkKCkgdGhyb3dzIFRocm93YWJsZSB7IGRvVGVzdCgpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RQcmltaXRpdmVBcnJheUNsYXNzSW5NZXRob2QoKSB0aHJvd3MgVGhyb3dhYmxlIHsgZG9UZXN0KCk7IH0KKyAgcHVibGljIHZvaWQgdGVzdFByaW1pdGl2ZUNsYXNzSW5Bbm5vKCkgdGhyb3dzIFRocm93YWJsZSB7IGRvVGVzdCgpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3ROZXdJbm5lckNsYXNzT2ZTdXBlcigpIHRocm93cyBUaHJvd2FibGUgeyBkb1Rlc3QoKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0QXNzZXJ0VGhhdE1hdGNoZXIoKSB0aHJvd3MgVGhyb3dhYmxlIHsgZG9UZXN0KCk7IH0KKworICBwdWJsaWMgdm9pZCB0ZXN0SW5mZXJGcm9tQ2FsbCgpIHRocm93cyBUaHJvd2FibGUgeworICAgIGRvVGVzdCgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEluZmVyRnJvbUNhbGwxKCkgdGhyb3dzIFRocm93YWJsZSB7CisgICAgZG9UZXN0KCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0Q2FzdFRvUGFyYW1ldGVyaXplZFR5cGUoKSB0aHJvd3MgVGhyb3dhYmxlIHsgZG9BY3Rpb25UZXN0KCk7IH0KKworICBwdWJsaWMgdm9pZCB0ZXN0SW5uZXJFbnVtSW5NZXRob2QoKSB0aHJvd3MgVGhyb3dhYmxlIHsKKyAgICBkb0l0ZW1UZXN0KCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0RW51bUFzRGVmYXVsdEFubm90YXRpb25QYXJhbSgpIHRocm93cyBUaHJvd2FibGUgeyBkb1Rlc3QoKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0QnJlYWtMYWJlbCgpIHRocm93cyBUaHJvd2FibGUgeyBkb1Rlc3QoKTsgfQorCisgIHB1YmxpYyB2b2lkIHRlc3ROZXdBYnN0cmFjdEluc2lkZUFub255bW91cygpIHRocm93cyBUaHJvd2FibGUgeyBkb1Rlc3QoKTsgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RGaWx0ZXJQcml2YXRlQ29uc3RydWN0b3JzKCkgdGhyb3dzIFRocm93YWJsZSB7IGRvVGVzdCgpOyB9CisKKyAgcHVibGljIHZvaWQgdGVzdEV4cGxpY2l0TWV0aG9kVHlwZVBhcmFtZXRlcnNRdWFsaWZ5KCkgdGhyb3dzIFRocm93YWJsZSB7IGRvVGVzdCgpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RFeHBsaWNpdE1ldGhvZFR5cGVQYXJhbWV0ZXJzT3ZlclplYWxvdXMoKSB0aHJvd3MgVGhyb3dhYmxlIHsgZG9UZXN0KCk7IH0KKyAgcHVibGljIHZvaWQgdGVzdEV4cGxpY2l0TWV0aG9kVHlwZVBhcmFtZXRlcnNGcm9tU3VwZXJDbGFzcygpIHRocm93cyBUaHJvd2FibGUgeyBkb1Rlc3QoKTsgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RXaWxkY2FyZGVkSW5zdGFuY2VvZigpIHRocm93cyBUaHJvd2FibGUgeyBkb1Rlc3QoKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0V2lsZGNhcmRlZEluc3RhbmNlb2YyKCkgdGhyb3dzIFRocm93YWJsZSB7IGRvVGVzdCgpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RXaWxkY2FyZGVkSW5zdGFuY2VvZjMoKSB0aHJvd3MgVGhyb3dhYmxlIHsgZG9UZXN0KCk7IH0KKworICBwdWJsaWMgdm9pZCB0ZXN0Q2hlY2tTdGF0aWNJbXBvcnRzVHlwZSgpIHRocm93cyBUaHJvd2FibGUgeyBkb0FudGlUZXN0KCk7IH0KKyAgcHVibGljIHZvaWQgdGVzdFRoaXNGaWVsZEFzc2lnbmVkVG9JdHNlbGYoKSB0aHJvd3MgVGhyb3dhYmxlIHsgZG9BbnRpVGVzdCgpOyB9CisKKyAgcHVibGljIHZvaWQgdGVzdENhc2VNaXNzaW5nRW51bVZhbHVlKCkgdGhyb3dzIFRocm93YWJsZSB7IGRvVGVzdCgpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RDYXNlTWlzc2luZ0VudW1WYWx1ZTIoKSB0aHJvd3MgVGhyb3dhYmxlIHsgZG9UZXN0KCk7IH0KKworICBwdWJsaWMgdm9pZCB0ZXN0VHlwZVZhcmlhYmxlSW5zdGFuY2VPZigpIHRocm93cyBUaHJvd2FibGUgeworICAgIGNvbmZpZ3VyZUJ5VGVzdE5hbWUoKTsKKyAgICBwZXJmb3JtQWN0aW9uKCk7CisgICAgYXNzZXJ0U3RyaW5nSXRlbXMoIkJhciIsICJHb28iKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3ROb1dyb25nU3Vic3RpdHV0b3JGcm9tU3RhdHMoKSB0aHJvd3MgVGhyb3dhYmxlIHsKKyAgICBkb1Rlc3QoKTsKKyAgICBGaWxlRG9jdW1lbnRNYW5hZ2VyLmdldEluc3RhbmNlKCkuc2F2ZURvY3VtZW50KG15Rml4dHVyZS5nZXRFZGl0b3IoKS5nZXREb2N1bWVudCgpKTsKKyAgICBkb1Rlc3QoKTsgLy8gc3RhdHMgYXJlIGNoYW5nZWQgbm93CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0Q29tbW9uUHJlZml4V2l0aFNlbGVjdGlvbigpIHRocm93cyBUaHJvd2FibGUgeworICAgIGRvSXRlbVRlc3QoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3ROZXdBYnN0cmFjdENsYXNzV2l0aENvbnN0cnVjdG9yQXJncygpIHRocm93cyBUaHJvd2FibGUgeworICAgIGRvSXRlbVRlc3QoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RBcnJheUluaXRpYWxpemVyQmVmb3JlVmFyYXJncygpIHRocm93cyBUaHJvd2FibGUgeyBkb1Rlc3QoKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0RHVwbGljYXRlTWVtYmVyc0Zyb21TdXBlckNsYXNzKCkgdGhyb3dzIFRocm93YWJsZSB7IGRvVGVzdCgpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RJbm5lckFmdGVyTmV3KCkgdGhyb3dzIFRocm93YWJsZSB7IGRvVGVzdCgpOyB9CisKKyAgcHVibGljIHZvaWQgdGVzdE1lbWJlckltcG9ydFN0YXRpY2FsbHkoKSB7CisgICAgY29uZmlndXJlQnlUZXN0TmFtZSgpOworICAgIFN0YXRpY2FsbHlJbXBvcnRhYmxlIGl0ZW0gPSBteUl0ZW1zWzBdLmFzKFN0YXRpY2FsbHlJbXBvcnRhYmxlLkNMQVNTX0NPTkRJVElPTl9LRVkpOworICAgIGFzc2VydE5vdE51bGwoaXRlbSk7CisgICAgYXNzZXJ0VHJ1ZShpdGVtLmNhbkJlSW1wb3J0ZWQoKSk7CisgICAgYXNzZXJ0VHJ1ZShteUl0ZW1zWzFdLmFzKFN0YXRpY2FsbHlJbXBvcnRhYmxlLkNMQVNTX0NPTkRJVElPTl9LRVkpLmNhbkJlSW1wb3J0ZWQoKSk7CisgICAgaXRlbS5zZXRTaG91bGRCZUltcG9ydGVkKHRydWUpOworICAgIHR5cGUoJ1xuJyk7CisgICAgY2hlY2tSZXN1bHRCeVRlc3ROYW1lKCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0Tm9OZXdFbnVtKCkgdGhyb3dzIFRocm93YWJsZSB7CisgICAgY29uZmlndXJlQnlUZXN0TmFtZSgpOworICAgIGFzc2VydFN0cmluZ0l0ZW1zKCJGb28iKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3REdXBsaWNhdGVNZW1iZXJzRnJvbVN1cGVyQ2xhc3NJbkFub3RoZXJGaWxlKCkgdGhyb3dzIFRocm93YWJsZSB7CisgICAgbXlGaXh0dXJlLmFkZENsYXNzKCJjbGFzcyBTdXBlciB7IHB1YmxpYyBzdGF0aWMgZmluYWwgU3VwZXIgRk9PID0gbnVsbDsgfSIpOworICAgIGRvVGVzdCgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEluc2lkZUdlbmVyaWNDbGFzc0xpdGVyYWwoKSB0aHJvd3MgVGhyb3dhYmxlIHsKKyAgICBjb25maWd1cmVCeVRlc3ROYW1lKCk7CisgICAgYXNzZXJ0U3RyaW5nSXRlbXMoIlN0cmluZy5jbGFzcyIsICJTdHJpbmdCdWZmZXIuY2xhc3MiLCAiU3RyaW5nQnVpbGRlci5jbGFzcyIpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEFycmF5QW5ub1BhcmFtZXRlcigpIHRocm93cyBUaHJvd2FibGUgeworICAgIGRvQWN0aW9uVGVzdCgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdElubmVyQ2xhc3NJbXBvcnRzKCkgdGhyb3dzIFRocm93YWJsZSB7CisgICAgQ29kZVN0eWxlU2V0dGluZ3NNYW5hZ2VyLmdldFNldHRpbmdzKGdldFByb2plY3QoKSkuSU5TRVJUX0lOTkVSX0NMQVNTX0lNUE9SVFMgPSB0cnVlOworICAgIHRyeSB7CisgICAgICBteUZpeHR1cmUuYWRkQ2xhc3MoInBhY2thZ2UgamF2YS5hd3QuZ2VvbTsgcHVibGljIGNsYXNzIFBvaW50MkQgeyBwdWJsaWMgc3RhdGljIGNsYXNzIERvdWJsZSB7fSB9Iik7CisgICAgICBkb0FjdGlvblRlc3QoKTsKKyAgICB9CisgICAgZmluYWxseSB7CisgICAgICBDb2RlU3R5bGVTZXR0aW5nc01hbmFnZXIuZ2V0U2V0dGluZ3MoZ2V0UHJvamVjdCgpKS5JTlNFUlRfSU5ORVJfQ0xBU1NfSU1QT1JUUyA9IGZhbHNlOworICAgIH0KKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RDYXN0V2l0aEdlbmVyaWNzKCkgdGhyb3dzIFRocm93YWJsZSB7CisgICAgZG9BY3Rpb25UZXN0KCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0SW5uZXJFbnVtKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgY29uZmlndXJlQnlUZXN0TmFtZSgpOworCisgICAgZ2V0TG9va3VwKCkuc2V0Q3VycmVudEl0ZW0oQ29udGFpbmVyVXRpbC5maW5kKG15SXRlbXMsIG5ldyBDb25kaXRpb248TG9va3VwRWxlbWVudD4oKSB7CisgICAgICBAT3ZlcnJpZGUKKyAgICAgIHB1YmxpYyBib29sZWFuIHZhbHVlKGZpbmFsIExvb2t1cEVsZW1lbnQgbG9va3VwSXRlbSkgeworICAgICAgICByZXR1cm4gIkJhci5GdWJhci5CYXIiLmVxdWFscyhsb29rdXBJdGVtLmdldExvb2t1cFN0cmluZygpKTsKKyAgICAgIH0KKyAgICB9KSk7CisgICAgc2VsZWN0KCdcbicpOworICAgIGNoZWNrUmVzdWx0QnlUZXN0TmFtZSgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFF1YWxpZmllZEFmdGVyTmV3KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgbXlGaXh0dXJlLmFkZENsYXNzKCJwYWNrYWdlIGZvbzsgcHVibGljIGludGVyZmFjZSBGb288VD4ge30iKTsKKyAgICBteUZpeHR1cmUuYWRkQ2xhc3MoInBhY2thZ2UgYmFyOyBwdWJsaWMgY2xhc3MgQmFyIGltcGxlbWVudHMgZm9vLkZvbyB7fSIpOworICAgIGRvVGVzdCgpOworICB9CisgIHB1YmxpYyB2b2lkIHRlc3RBZnRlclF1YWxpZmllZE5ldygpIHRocm93cyBFeGNlcHRpb24geworICAgIG15Rml4dHVyZS5hZGRDbGFzcygiY2xhc3MgQWEgeyBwdWJsaWMgY2xhc3MgQiB7IH0gfSIpOworICAgIGRvVGVzdCgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFRhYkFmdGVyTmV3KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9GaXJzdEl0ZW1UZXN0KCdcdCcpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdE5vblN0YXRpY0ZpZWxkKCkgdGhyb3dzIEV4Y2VwdGlvbiB7IGRvQW50aVRlc3QoKTsgfQorCisgIHByaXZhdGUgdm9pZCBkb0FjdGlvblRlc3QoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBjb25maWd1cmVCeVRlc3ROYW1lKCk7CisgICAgY2hlY2tSZXN1bHRCeVRlc3ROYW1lKCk7CisgIH0KKworICBwcml2YXRlIHZvaWQgZG9JdGVtVGVzdCgpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvRmlyc3RJdGVtVGVzdCgnXG4nKTsKKyAgfQorCisgIHByaXZhdGUgdm9pZCBwZXJmb3JtQWN0aW9uKCkgeworICAgIGNvbXBsZXRlKCk7CisgIH0KKworICBwcml2YXRlIHZvaWQgZG9UZXN0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KExvb2t1cC5OT1JNQUxfU0VMRUNUX0NIQVIpOworICB9CisKKyAgcHJpdmF0ZSB2b2lkIGRvVGVzdChmaW5hbCBjaGFyIGMpIHsKKyAgICBib29sZWFuIG9sZCA9IENvZGVJbnNpZ2h0U2V0dGluZ3MuZ2V0SW5zdGFuY2UoKS5BVVRPQ09NUExFVEVfT05fU01BUlRfVFlQRV9DT01QTEVUSU9OOworICAgIGlmIChjICE9IExvb2t1cC5OT1JNQUxfU0VMRUNUX0NIQVIpIHsKKyAgICAgIENvZGVJbnNpZ2h0U2V0dGluZ3MuZ2V0SW5zdGFuY2UoKS5BVVRPQ09NUExFVEVfT05fU01BUlRfVFlQRV9DT01QTEVUSU9OID0gZmFsc2U7CisgICAgfQorCisgICAgdHJ5IHsKKyAgICAgIGNvbmZpZ3VyZUJ5VGVzdE5hbWUoKTsKKyAgICAgIGlmIChteUl0ZW1zICE9IG51bGwpIHsKKyAgICAgICAgc2VsZWN0KGMpOworICAgICAgfQorICAgICAgY2hlY2tSZXN1bHRCeVRlc3ROYW1lKCk7CisgICAgfQorICAgIGZpbmFsbHkgeworICAgICAgaWYgKGMgIT0gTG9va3VwLk5PUk1BTF9TRUxFQ1RfQ0hBUikgeworICAgICAgICBDb2RlSW5zaWdodFNldHRpbmdzLmdldEluc3RhbmNlKCkuQVVUT0NPTVBMRVRFX09OX1NNQVJUX1RZUEVfQ09NUExFVElPTiA9IG9sZDsKKyAgICAgIH0KKyAgICB9CisKKyAgfQorCisgIHByaXZhdGUgdm9pZCBjaGVja1Jlc3VsdEJ5VGVzdE5hbWUoKSB7CisgICAgY2hlY2tSZXN1bHRCeUZpbGUoIi8iICsgZ2V0VGVzdE5hbWUoZmFsc2UpICsgIi1vdXQuamF2YSIpOworICB9CisKKyAgQE92ZXJyaWRlCisgIHByb3RlY3RlZCB2b2lkIGNvbXBsZXRlKCkgeworICAgIG15SXRlbXMgPSBteUZpeHR1cmUuY29tcGxldGUoQ29tcGxldGlvblR5cGUuU01BUlQpOworICB9CisKKyAgcHJpdmF0ZSB2b2lkIHNlbGVjdCgpIHsKKyAgICBzZWxlY3QoTG9va3VwLk5PUk1BTF9TRUxFQ1RfQ0hBUik7CisgIH0KKworICBwcml2YXRlIHZvaWQgc2VsZWN0KGZpbmFsIGNoYXIgYykgeworICAgIGZpbmFsIExvb2t1cCBsb29rdXAgPSBnZXRMb29rdXAoKTsKKyAgICBpZiAobG9va3VwICE9IG51bGwpIHsKKyAgICAgIHNlbGVjdEl0ZW0obG9va3VwLmdldEN1cnJlbnRJdGVtKCksIGMpOworICAgIH0KKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RTcGFjZUFmdGVyQ29tbWFJbk1ldGhvZENhbGwoKSB7CisgICAgZ2V0Q29kZVN0eWxlU2V0dGluZ3MoKS5TUEFDRV9BRlRFUl9DT01NQSA9IGZhbHNlOworICAgIGRvVGVzdCgnLCcpOworICB9CisKKyAgcHJpdmF0ZSBDb21tb25Db2RlU3R5bGVTZXR0aW5ncyBnZXRDb2RlU3R5bGVTZXR0aW5ncygpIHsKKyAgICByZXR1cm4gQ29kZVN0eWxlU2V0dGluZ3NNYW5hZ2VyLmdldFNldHRpbmdzKGdldFByb2plY3QoKSkuZ2V0Q29tbW9uU2V0dGluZ3MoSmF2YUxhbmd1YWdlLklOU1RBTkNFKTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vVGFiQ29tcGxldGlvblRlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9jb2RlSW5zaWdodC9jb21wbGV0aW9uL1RhYkNvbXBsZXRpb25UZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTI0ODFhNAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9jb2RlSW5zaWdodC9jb21wbGV0aW9uL1RhYkNvbXBsZXRpb25UZXN0LmphdmEKQEAgLTAsMCArMSwzOCBAQAorCitwYWNrYWdlIGNvbS5pbnRlbGxpai5jb2RlSW5zaWdodC5jb21wbGV0aW9uOworCitpbXBvcnQgY29tLmludGVsbGlqLkphdmFUZXN0VXRpbDsKKworcHVibGljIGNsYXNzIFRhYkNvbXBsZXRpb25UZXN0IGV4dGVuZHMgTGlnaHRGaXh0dXJlQ29tcGxldGlvblRlc3RDYXNlIHsKKyAgQE92ZXJyaWRlCisgIHByb3RlY3RlZCBTdHJpbmcgZ2V0QmFzZVBhdGgoKSB7CisgICAgcmV0dXJuIEphdmFUZXN0VXRpbC5nZXRSZWxhdGl2ZUphdmFUZXN0RGF0YVBhdGgoKSArICIvY29kZUluc2lnaHQvY29tcGxldGlvbi9ub3JtYWwiOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdE1ldGhvZENhbGxDb21wbGV0aW9uV2l0aFRhYigpIHRocm93cyBFeGNlcHRpb24geworICAgIGNvbmZpZ3VyZUJ5RmlsZSgiTWV0aG9kTG9va3VwMy5qYXZhIik7CisgICAgY2hlY2tSZXN1bHRCeUZpbGUoIk1ldGhvZExvb2t1cDNfQWZ0ZXIuamF2YSIpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFJlcGxhY2VUaGlzV2l0aFN1cGVyKCkgdGhyb3dzIFRocm93YWJsZSB7CisgICAgY29uZmlndXJlQnlGaWxlKCJSZXBsYWNlVGhpc1dpdGhTdXBlci5qYXZhIik7CisgICAgY2hlY2tSZXN1bHRCeUZpbGUoIlJlcGxhY2VUaGlzV2l0aFN1cGVyX0FmdGVyLmphdmEiKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RUYWJJblhtbCgpIHRocm93cyBUaHJvd2FibGUgeworICAgIGNvbmZpZ3VyZUJ5RmlsZSgiVGFiSW5YbWwueG1sIik7CisgICAgY2hlY2tSZXN1bHRCeUZpbGUoIlRhYkluWG1sX0FmdGVyLnhtbCIpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFRhYkluWG1sMigpIHRocm93cyBUaHJvd2FibGUgeworICAgIGNvbmZpZ3VyZUJ5RmlsZSgiVGFiSW5YbWwyLnhtbCIpOworICAgIGNoZWNrUmVzdWx0QnlGaWxlKCJUYWJJblhtbDJfQWZ0ZXIueG1sIik7CisgIH0KKworICBAT3ZlcnJpZGUKKyAgcHJvdGVjdGVkIHZvaWQgY29tcGxldGUoKSB7CisgICAgc3VwZXIuY29tcGxldGUoKTsKKyAgICBzZWxlY3RJdGVtKG15SXRlbXNbMF0sICdcdCcpOworICB9CisKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovY29kZUluc2lnaHQvY29tcGxldGlvbi9WYXJpYWJsZXNDb21wbGV0aW9uVGVzdC5ncm9vdnkgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovY29kZUluc2lnaHQvY29tcGxldGlvbi9WYXJpYWJsZXNDb21wbGV0aW9uVGVzdC5ncm9vdnkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGY0MGJkNQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9jb2RlSW5zaWdodC9jb21wbGV0aW9uL1ZhcmlhYmxlc0NvbXBsZXRpb25UZXN0Lmdyb292eQpAQCAtMCwwICsxLDIwNCBAQAorcGFja2FnZSBjb20uaW50ZWxsaWouY29kZUluc2lnaHQuY29tcGxldGlvbgoraW1wb3J0IGNvbS5pbnRlbGxpai5KYXZhVGVzdFV0aWwKK2ltcG9ydCBjb20uaW50ZWxsaWouaWRlLmhpZ2hsaWdodGVyLkphdmFGaWxlVHlwZQoraW1wb3J0IGNvbS5pbnRlbGxpai5wc2kuY29kZVN0eWxlLkNvZGVTdHlsZVNldHRpbmdzCitpbXBvcnQgY29tLmludGVsbGlqLnBzaS5jb2RlU3R5bGUuQ29kZVN0eWxlU2V0dGluZ3NNYW5hZ2VyCisKK3B1YmxpYyBjbGFzcyBWYXJpYWJsZXNDb21wbGV0aW9uVGVzdCBleHRlbmRzIExpZ2h0Rml4dHVyZUNvbXBsZXRpb25UZXN0Q2FzZSB7CisgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEZJTEVfUFJFRklYID0gIi9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3ZhcmlhYmxlcy8iOworCisgIEBPdmVycmlkZQorICBwcm90ZWN0ZWQgU3RyaW5nIGdldEJhc2VQYXRoKCkgeworICAgIHJldHVybiBKYXZhVGVzdFV0aWwuZ2V0UmVsYXRpdmVKYXZhVGVzdERhdGFQYXRoKCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0T2JqZWN0VmFyaWFibGUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBjb25maWd1cmVCeUZpbGUoRklMRV9QUkVGSVggKyAibG9jYWxzLyIgKyBnZXRUZXN0TmFtZShmYWxzZSkgKyAiLmphdmEiKTsKKyAgICBjaGVja1Jlc3VsdEJ5RmlsZShGSUxFX1BSRUZJWCArICJsb2NhbHMvIiArIGdldFRlc3ROYW1lKGZhbHNlKSArICJfYWZ0ZXIuamF2YSIpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFN0cmluZ1ZhcmlhYmxlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgY29uZmlndXJlQnlGaWxlKEZJTEVfUFJFRklYICsgImxvY2Fscy8iICsgZ2V0VGVzdE5hbWUoZmFsc2UpICsgIi5qYXZhIik7CisgICAgY2hlY2tSZXN1bHRCeUZpbGUoRklMRV9QUkVGSVggKyAibG9jYWxzLyIgKyBnZXRUZXN0TmFtZShmYWxzZSkgKyAiX2FmdGVyLmphdmEiKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RJbnB1dE1ldGhvZEV2ZW50VmFyaWFibGUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBteUZpeHR1cmUuYWRkQ2xhc3MoInBhY2thZ2UgamF2YS5hd3QuZXZlbnQ7IHB1YmxpYyBpbnRlcmZhY2UgSW5wdXRNZXRob2RFdmVudCB7fSIpOworCisgICAgY29uZmlndXJlQnlGaWxlKEZJTEVfUFJFRklYICsgImxvY2Fscy8iICsgZ2V0VGVzdE5hbWUoZmFsc2UpICsgIi5qYXZhIik7CisgICAgY2hlY2tSZXN1bHRCeUZpbGUoRklMRV9QUkVGSVggKyAibG9jYWxzLyIgKyBnZXRUZXN0TmFtZShmYWxzZSkgKyAiX2FmdGVyLmphdmEiKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RMb2NhbHMxKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9TZWxlY3RUZXN0KCJUZXN0U291cmNlMS5qYXZhIiwgIlRlc3RSZXN1bHQxLmphdmEiKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RJbnRlcmZhY2VNZXRob2QoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBjb25maWd1cmVCeUZpbGUoRklMRV9QUkVGSVggKyAibG9jYWxzLyIgKyAiSW50ZXJmYWNlTWV0aG9kLmphdmEiKTsKKyAgICBhc3NlcnRTdHJpbmdJdGVtcygiY2FsY0dvb0JhckRvbyIsICJjYWxjQmFyRG9vIiwgImNhbGNEb28iKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RMb2NhbHMyKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgY29uZmlndXJlQnlGaWxlKEZJTEVfUFJFRklYICsgImxvY2Fscy8iICsgIlRlc3RTb3VyY2UyLmphdmEiKTsKKyAgICBteUZpeHR1cmUuYXNzZXJ0UHJlZmVycmVkQ29tcGxldGlvbkl0ZW1zIDAsICdhYmMnLCAnYWFhJworICAgIGNoZWNrUmVzdWx0QnlGaWxlKEZJTEVfUFJFRklYICsgImxvY2Fscy8iICsgIlRlc3RSZXN1bHQyLmphdmEiKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RMb2NhbHMzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9TZWxlY3RUZXN0KCJUZXN0U291cmNlMy5qYXZhIiwgIlRlc3RSZXN1bHQzLmphdmEiKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RMb2NhbHM0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9TZWxlY3RUZXN0KCJUZXN0U291cmNlNC5qYXZhIiwgIlRlc3RSZXN1bHQ0LmphdmEiKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RMb2NhbHM1KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9TZWxlY3RUZXN0KCJUZXN0U291cmNlNS5qYXZhIiwgIlRlc3RSZXN1bHQ1LmphdmEiKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RMb2NhbHM2KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9TZWxlY3RUZXN0KCJUZXN0U291cmNlNi5qYXZhIiwgIlRlc3RSZXN1bHQ2LmphdmEiKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RMb2NhbHM3KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KCJUZXN0U291cmNlNy5qYXZhIiwgIlRlc3RSZXN1bHQ3LmphdmEiKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RMb2NhbFJlc2VydmVkKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KCJMb2NhbFJlc2VydmVkLmphdmEiLCAiTG9jYWxSZXNlcnZlZF9hZnRlci5qYXZhIik7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0TG9jYWxSZXNlcnZlZDIoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBjb25maWd1cmVCeUZpbGUoRklMRV9QUkVGSVggKyAibG9jYWxzLyIgKyAiTG9jYWxSZXNlcnZlZDIuamF2YSIpCisgICAgY2hlY2tSZXN1bHRCeUZpbGUoRklMRV9QUkVGSVggKyAibG9jYWxzLyIgKyAiTG9jYWxSZXNlcnZlZDIuamF2YSIpOworICAgIGFzc2VydCAhbXlGaXh0dXJlLmxvb2t1cEVsZW1lbnRTdHJpbmdzCisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0VW5pcXVlTmFtZUluRm9yKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KGdldFRlc3ROYW1lKGZhbHNlKSArICIuamF2YSIsIGdldFRlc3ROYW1lKGZhbHNlKSArICJfYWZ0ZXIuamF2YSIpOworICB9CisgIHB1YmxpYyB2b2lkIHRlc3RXaXRoQnVpbGRlclBhcmFtZXRlcigpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdChnZXRUZXN0TmFtZShmYWxzZSkgKyAiLmphdmEiLCBnZXRUZXN0TmFtZShmYWxzZSkgKyAiX2FmdGVyLmphdmEiKTsKKyAgfQorCisgIHByaXZhdGUgdm9pZCBkb1Rlc3QoU3RyaW5nIGJlZm9yZSwgU3RyaW5nIGFmdGVyKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBjb25maWd1cmVCeUZpbGUoRklMRV9QUkVGSVggKyAibG9jYWxzLyIgKyBiZWZvcmUpOworICAgIGNoZWNrUmVzdWx0QnlGaWxlKEZJTEVfUFJFRklYICsgImxvY2Fscy8iICsgYWZ0ZXIpOworICB9CisKKyAgcHJpdmF0ZSB2b2lkIGRvU2VsZWN0VGVzdChTdHJpbmcgYmVmb3JlLCBTdHJpbmcgYWZ0ZXIpIHRocm93cyBFeGNlcHRpb24geworICAgIGNvbmZpZ3VyZUJ5RmlsZShGSUxFX1BSRUZJWCArICJsb2NhbHMvIiArIGJlZm9yZSk7CisgICAgbXlGaXh0dXJlLnR5cGUoJ1xuJykKKyAgICBjaGVja1Jlc3VsdEJ5RmlsZShGSUxFX1BSRUZJWCArICJsb2NhbHMvIiArIGFmdGVyKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RMb2NhbHM4KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KCJUZXN0U291cmNlOC5qYXZhIiwgIlRlc3RSZXN1bHQ4LmphdmEiKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RVbnJlc29sdmVkUmVmZXJlbmNlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgY29uZmlndXJlQnlGaWxlKEZJTEVfUFJFRklYICsgImxvY2Fscy8iICsgZ2V0VGVzdE5hbWUoZmFsc2UpICsgIi5qYXZhIik7CisgICAgYXNzZXJ0U3RyaW5nSXRlbXMoIm8iLCAicHNpQ2xhc3MiKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RGaWVsZE5hbWVDb21wbGV0aW9uMSgpIHRocm93cyBFeGNlcHRpb24geworICAgIENvZGVTdHlsZVNldHRpbmdzIHNldHRpbmdzID0gQ29kZVN0eWxlU2V0dGluZ3NNYW5hZ2VyLmdldFNldHRpbmdzKGdldFByb2plY3QoKSk7CisgICAgU3RyaW5nIG9sZFByZWZpeCA9IHNldHRpbmdzLkZJRUxEX05BTUVfUFJFRklYOworICAgIHNldHRpbmdzLkZJRUxEX05BTUVfUFJFRklYID0gIm15IjsKKyAgICB0cnkgeworICAgICAgZG9TZWxlY3RUZXN0KCJGaWVsZE5hbWVDb21wbGV0aW9uMS5qYXZhIiwgIkZpZWxkTmFtZUNvbXBsZXRpb24xLXJlc3VsdC5qYXZhIik7CisgICAgfQorICAgIGZpbmFsbHkgeworICAgICAgc2V0dGluZ3MuRklFTERfTkFNRV9QUkVGSVggPSBvbGRQcmVmaXg7CisgICAgfQorICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEZpZWxkTmFtZUNvbXBsZXRpb24yKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgQ29kZVN0eWxlU2V0dGluZ3Mgc2V0dGluZ3MgPSBDb2RlU3R5bGVTZXR0aW5nc01hbmFnZXIuZ2V0U2V0dGluZ3MocHJvamVjdCk7CisgICAgU3RyaW5nIG9sZFByZWZpeCA9IHNldHRpbmdzLkZJRUxEX05BTUVfUFJFRklYOworICAgIHNldHRpbmdzLkZJRUxEX05BTUVfUFJFRklYID0gIm15IjsKKyAgICBjb25maWd1cmVCeUZpbGUoRklMRV9QUkVGSVggKyAibG9jYWxzLyIgKyAiRmllbGROYW1lQ29tcGxldGlvbjIuamF2YSIpOworICAgIHNldHRpbmdzLkZJRUxEX05BTUVfUFJFRklYID0gb2xkUHJlZml4OworICAgIGNoZWNrUmVzdWx0QnlGaWxlKEZJTEVfUFJFRklYICsgImxvY2Fscy8iICsgIkZpZWxkTmFtZUNvbXBsZXRpb24yLXJlc3VsdC5qYXZhIik7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0RmllbGROYW1lQ29tcGxldGlvbjMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBDb2RlU3R5bGVTZXR0aW5ncyBzZXR0aW5ncyA9IENvZGVTdHlsZVNldHRpbmdzTWFuYWdlci5nZXRTZXR0aW5ncyhwcm9qZWN0KTsKKyAgICBTdHJpbmcgb2xkUHJlZml4ID0gc2V0dGluZ3MuRklFTERfTkFNRV9QUkVGSVg7CisgICAgc2V0dGluZ3MuRklFTERfTkFNRV9QUkVGSVggPSAibXkiOworICAgIGNvbmZpZ3VyZUJ5RmlsZShGSUxFX1BSRUZJWCArICJsb2NhbHMvIiArICJGaWVsZE5hbWVDb21wbGV0aW9uMy5qYXZhIik7CisgICAgY29tcGxldGUoKTsKKyAgICBzZXR0aW5ncy5GSUVMRF9OQU1FX1BSRUZJWCA9IG9sZFByZWZpeDsKKyAgICBjaGVja1Jlc3VsdEJ5RmlsZShGSUxFX1BSRUZJWCArICJsb2NhbHMvIiArICJGaWVsZE5hbWVDb21wbGV0aW9uMy1yZXN1bHQuamF2YSIpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdExvY2FsczkoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1NlbGVjdFRlc3QoIlRlc3RTb3VyY2U5LmphdmEiLCAiVGVzdFJlc3VsdDkuamF2YSIpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEZpZWxkT3V0T2ZBbm9ueW1vdXMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoIlRlc3RGaWVsZE91dE9mQW5vbnltb3VzLmphdmEiLCAiVGVzdEZpZWxkT3V0T2ZBbm9ueW1vdXNSZXN1bHQuamF2YSIpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFVucmVzb2x2ZWRNZXRob2ROYW1lKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgY29uZmlndXJlQnlGaWxlKEZJTEVfUFJFRklYICsgImxvY2Fscy8iICsgIlVucmVzb2x2ZWRNZXRob2ROYW1lLmphdmEiKTsKKyAgICBjb21wbGV0ZSgpOworICAgIGNoZWNrUmVzdWx0QnlGaWxlKEZJTEVfUFJFRklYICsgImxvY2Fscy8iICsgIlVucmVzb2x2ZWRNZXRob2ROYW1lX2FmdGVyLmphdmEiKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RBcnJheU1ldGhvZE5hbWUoKSB0aHJvd3MgVGhyb3dhYmxlIHsKKyAgICBkb1Rlc3QoIkFycmF5TWV0aG9kTmFtZS5qYXZhIiwgIkFycmF5TWV0aG9kTmFtZS1yZXN1bHQuamF2YSIpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEluaXRpYWxpemVyTWF0dGVycygpIHRocm93cyBFeGNlcHRpb24geworICAgIG15Rml4dHVyZS5jb25maWd1cmVCeVRleHQoSmF2YUZpbGVUeXBlLklOU1RBTkNFLCAiY2xhc3MgRm9vIHt7IFN0cmluZyBmPGNhcmV0PnggPSBnZXRGb28oKTsgfTsgU3RyaW5nIGdldEZvbygpIHt9OyB9Iik7CisgICAgY29tcGxldGUoKTsKKyAgICBhc3NlcnRTdHJpbmdJdGVtcygiZm9vIik7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0RmllbGRJbml0aWFsaXplck1hdHRlcnMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBteUZpeHR1cmUuY29uZmlndXJlQnlUZXh0KEphdmFGaWxlVHlwZS5JTlNUQU5DRSwgImNsYXNzIEZvbyB7IFN0cmluZyBmPGNhcmV0PnggPSBnZXRGb28oKTsgU3RyaW5nIGdldEZvbygpIHt9OyB9Iik7CisgICAgY29tcGxldGUoKTsKKyAgICBhc3NlcnRTdHJpbmdJdGVtcygiZm9vIiwgImZTdHJpbmciKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3ROb0tleXdvcmRzSW5Gb3JMb29wVmFyaWFibGVOYW1lKCkgdGhyb3dzIFRocm93YWJsZSB7CisgICAgY29uZmlndXJlKCkKKyAgICBhc3NlcnRTdHJpbmdJdGVtcygic3RyaW5nQnVmZmVyIiwgImJ1ZmZlciIpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdER1cGxpY2F0ZVN1Z2dlc3Rpb25zRnJvbVVzYWdlKCkgeworICAgIGNvbmZpZ3VyZSgpOworICAgIGFzc2VydFN0cmluZ0l0ZW1zKCJwcmVmZXJlbmNlUG9saWN5IiwgInBvbGljeSIsICJhUHJlZmVyZW5jZVBvbGljeSIpOworICB9CisKKyAgcHVibGljIHZvaWQgY29uZmlndXJlKCkgeworICAgIGNvbmZpZ3VyZUJ5RmlsZShGSUxFX1BSRUZJWCArIGdldFRlc3ROYW1lKGZhbHNlKSArICIuamF2YSIpCisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0QW5ub3RhdGlvblZhbHVlKCkgeworICAgIGNvbmZpZ3VyZSgpCisgICAgY2hlY2tSZXN1bHRCeUZpbGUoRklMRV9QUkVGSVggKyBnZXRUZXN0TmFtZShmYWxzZSkgKyAiX2FmdGVyLmphdmEiKQorICB9CisKKyAgcHVibGljIHZvaWQgdGVzdENvbnN0cnVjdG9yUGFyYW1ldGVyTmFtZSgpIHsKKyAgICBjb25maWd1cmUoKQorICAgIGFzc2VydFN0cmluZ0l0ZW1zKCJjb2xvciIpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdENvbnN0cnVjdG9yUGFyYW1ldGVyTmFtZVdpdGhQcmVmaXgoKSB7CisgICAgQ29kZVN0eWxlU2V0dGluZ3Mgc2V0dGluZ3MgPSBDb2RlU3R5bGVTZXR0aW5nc01hbmFnZXIuZ2V0U2V0dGluZ3MocHJvamVjdCk7CisgICAgU3RyaW5nIG9sZEZpZWxkID0gc2V0dGluZ3MuRklFTERfTkFNRV9QUkVGSVg7CisgICAgU3RyaW5nIG9sZFBhcmFtID0gc2V0dGluZ3MuUEFSQU1FVEVSX05BTUVfUFJFRklYOworICAgIHNldHRpbmdzLkZJRUxEX05BTUVfUFJFRklYID0gIm15IjsKKyAgICBzZXR0aW5ncy5QQVJBTUVURVJfTkFNRV9QUkVGSVggPSAicCI7CisKKyAgICBjb25maWd1cmUoKQorCisgICAgc2V0dGluZ3MuRklFTERfTkFNRV9QUkVGSVggPSBvbGRGaWVsZAorICAgIHNldHRpbmdzLlBBUkFNRVRFUl9OQU1FX1BSRUZJWCA9IG9sZFBhcmFtCisKKyAgICBhc3NlcnRTdHJpbmdJdGVtcygicENvbG9yIik7CisgIH0KKworfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vV29yZENvbXBsZXRpb25UZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovY29kZUluc2lnaHQvY29tcGxldGlvbi9Xb3JkQ29tcGxldGlvblRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZmRiMTMwCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNpZ2h0L2NvbXBsZXRpb24vV29yZENvbXBsZXRpb25UZXN0LmphdmEKQEAgLTAsMCArMSwxMTggQEAKK3BhY2thZ2UgY29tLmludGVsbGlqLmNvZGVJbnNpZ2h0LmNvbXBsZXRpb247CisKK2ltcG9ydCBjb20uaW50ZWxsaWouSmF2YVRlc3RVdGlsOworaW1wb3J0IGNvbS5pbnRlbGxpai5sYW5nLlN0ZExhbmd1YWdlczsKK2ltcG9ydCBjb20uaW50ZWxsaWoucHNpLio7CitpbXBvcnQgY29tLmludGVsbGlqLnBzaS5pbXBsLnNvdXJjZS5yZXNvbHZlLnJlZmVyZW5jZS5Qc2lSZWZlcmVuY2VSZWdpc3RyYXJJbXBsOworaW1wb3J0IGNvbS5pbnRlbGxpai5wc2kuaW1wbC5zb3VyY2UucmVzb2x2ZS5yZWZlcmVuY2UuUmVmZXJlbmNlUHJvdmlkZXJzUmVnaXN0cnk7CitpbXBvcnQgY29tLmludGVsbGlqLnV0aWwuUHJvY2Vzc2luZ0NvbnRleHQ7CitpbXBvcnQgb3JnLmpldGJyYWlucy5hbm5vdGF0aW9ucy5Ob3ROdWxsOworCisvKioKKyAqIEBhdXRob3IgTWF4aW0uTW9zc2llbmtvCisgKi8KK3B1YmxpYyBjbGFzcyBXb3JkQ29tcGxldGlvblRlc3QgZXh0ZW5kcyBDb21wbGV0aW9uVGVzdENhc2UgeworICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQkFTRV9QQVRIID0gIi9jb2RlSW5zaWdodC9jb21wbGV0aW9uL3dvcmQvIjsKKworICBAT3ZlcnJpZGUKKyAgcHJvdGVjdGVkIFN0cmluZyBnZXRUZXN0RGF0YVBhdGgoKSB7CisgICAgcmV0dXJuIEphdmFUZXN0VXRpbC5nZXRKYXZhVGVzdERhdGFQYXRoKCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0S2V5V29yZENvbXBsZXRpb24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBjb25maWd1cmVCeUZpbGUoQkFTRV9QQVRIICsgIjEudHh0Iik7CisgICAgY2hlY2tSZXN1bHRCeUZpbGUoQkFTRV9QQVRIICsgIjFfYWZ0ZXIudHh0Iik7CisgICAgCisgICAgY29uZmlndXJlQnlGaWxlKEJBU0VfUEFUSCArICIxLnByb3BlcnRpZXMiKTsKKyAgICBjaGVja1Jlc3VsdEJ5RmlsZShCQVNFX1BBVEggKyAiMV9hZnRlci5wcm9wZXJ0aWVzIik7CisKKyAgICBjb25maWd1cmVCeUZpbGUoQkFTRV9QQVRIICsgIjEueG1sIik7CisgICAgY2hlY2tSZXN1bHRCeUZpbGUoQkFTRV9QQVRIICsgIjFfYWZ0ZXIueG1sIik7CisKKyAgICBjb25maWd1cmVCeUZpbGUoQkFTRV9QQVRIICsgIjIueG1sIik7CisgICAgY29uZmlndXJlQnlGaWxlKEJBU0VfUEFUSCArICIyX2FmdGVyLnhtbCIpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdE5vV29yZENvbXBsZXRpb25Gb3JOb25Tb2Z0UmVmZXJlbmNlKCkgdGhyb3dzIFRocm93YWJsZSB7CisgICAgZmluYWwgUHNpUmVmZXJlbmNlUHJvdmlkZXIgc29mdFByb3ZpZGVyID0gbmV3IFBzaVJlZmVyZW5jZVByb3ZpZGVyKCkgeworICAgICAgQE92ZXJyaWRlCisgICAgICBATm90TnVsbAorICAgICAgcHVibGljIFBzaVJlZmVyZW5jZVtdIGdldFJlZmVyZW5jZXNCeUVsZW1lbnQoQE5vdE51bGwgUHNpRWxlbWVudCBlbGVtZW50LCBATm90TnVsbCBmaW5hbCBQcm9jZXNzaW5nQ29udGV4dCBjb250ZXh0KSB7CisgICAgICAgIHJldHVybiBuZXcgUHNpUmVmZXJlbmNlW117bmV3IFBzaVJlZmVyZW5jZUJhc2U8UHNpRWxlbWVudD4oZWxlbWVudCwgdHJ1ZSkgeworICAgICAgICAgIEBPdmVycmlkZQorICAgICAgICAgIHB1YmxpYyBQc2lFbGVtZW50IHJlc29sdmUoKSB7CisgICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgICB9CisKKyAgICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgICBATm90TnVsbAorICAgICAgICAgIHB1YmxpYyBPYmplY3RbXSBnZXRWYXJpYW50cygpIHsKKyAgICAgICAgICAgIHJldHVybiBuZXcgT2JqZWN0W117Ik15U29mdFZhcmlhbnQifTsKKyAgICAgICAgICB9CisgICAgICAgIH19OworICAgICAgfQorICAgIH07CisgICAgZmluYWwgUHNpUmVmZXJlbmNlUHJvdmlkZXIgaGFyZFByb3ZpZGVyID0gbmV3IFBzaVJlZmVyZW5jZVByb3ZpZGVyKCkgeworICAgICAgQE92ZXJyaWRlCisgICAgICBATm90TnVsbAorICAgICAgcHVibGljIFBzaVJlZmVyZW5jZVtdIGdldFJlZmVyZW5jZXNCeUVsZW1lbnQoQE5vdE51bGwgUHNpRWxlbWVudCBlbGVtZW50LCBATm90TnVsbCBmaW5hbCBQcm9jZXNzaW5nQ29udGV4dCBjb250ZXh0KSB7CisgICAgICAgIHJldHVybiBuZXcgUHNpUmVmZXJlbmNlW117bmV3IFBzaVJlZmVyZW5jZUJhc2U8UHNpRWxlbWVudD4oZWxlbWVudCwgZmFsc2UpIHsKKyAgICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgICBwdWJsaWMgUHNpRWxlbWVudCByZXNvbHZlKCkgeworICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgICAgfQorCisgICAgICAgICAgQE92ZXJyaWRlCisgICAgICAgICAgQE5vdE51bGwKKyAgICAgICAgICBwdWJsaWMgT2JqZWN0W10gZ2V0VmFyaWFudHMoKSB7CisgICAgICAgICAgICByZXR1cm4gbmV3IE9iamVjdFtdeyJNeUhhcmRWYXJpYW50In07CisgICAgICAgICAgfQorICAgICAgICB9fTsKKyAgICAgIH0KKyAgICB9OworICAgIFBzaVJlZmVyZW5jZVJlZ2lzdHJhckltcGwgcmVnaXN0cmFyID0KKyAgICAgIChQc2lSZWZlcmVuY2VSZWdpc3RyYXJJbXBsKVJlZmVyZW5jZVByb3ZpZGVyc1JlZ2lzdHJ5LmdldEluc3RhbmNlKCkuZ2V0UmVnaXN0cmFyKFN0ZExhbmd1YWdlcy5KQVZBKTsKKyAgICB0cnkgeworICAgICAgcmVnaXN0cmFyLnJlZ2lzdGVyUmVmZXJlbmNlUHJvdmlkZXIoUHNpTGl0ZXJhbEV4cHJlc3Npb24uY2xhc3MsIHNvZnRQcm92aWRlcik7CisgICAgICByZWdpc3RyYXIucmVnaXN0ZXJSZWZlcmVuY2VQcm92aWRlcihQc2lMaXRlcmFsRXhwcmVzc2lvbi5jbGFzcywgaGFyZFByb3ZpZGVyKTsKKworICAgICAgY29uZmlndXJlQnlGaWxlKEJBU0VfUEFUSCArICIzLmphdmEiKTsKKyAgICAgIGNoZWNrUmVzdWx0QnlGaWxlKEJBU0VfUEFUSCArICIzX2FmdGVyLmphdmEiKTsKKyAgICB9CisgICAgZmluYWxseSB7CisgICAgICByZWdpc3RyYXIudW5yZWdpc3RlclJlZmVyZW5jZVByb3ZpZGVyKFBzaUxpdGVyYWxFeHByZXNzaW9uLmNsYXNzLCBzb2Z0UHJvdmlkZXIpOworICAgICAgcmVnaXN0cmFyLnVucmVnaXN0ZXJSZWZlcmVuY2VQcm92aWRlcihQc2lMaXRlcmFsRXhwcmVzc2lvbi5jbGFzcywgaGFyZFByb3ZpZGVyKTsKKyAgICB9CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0SW5KYXZhTGl0ZXJhbHMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBjb25maWd1cmVCeUZpbGUoQkFTRV9QQVRIICsgIkluSmF2YUxpdGVyYWxzLmphdmEiKTsKKyAgICBjaGVja1Jlc3VsdEJ5RmlsZShCQVNFX1BBVEggKyAiSW5KYXZhTGl0ZXJhbHNfYWZ0ZXIuamF2YSIpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdENvbW1lbnRzKCkgdGhyb3dzIFRocm93YWJsZSB7CisgICAgY29uZmlndXJlQnlGaWxlKEJBU0VfUEFUSCArICI0LmphdmEiKTsKKyAgICBjaGVja1Jlc3VsdEJ5RmlsZShCQVNFX1BBVEggKyAiNF9hZnRlci5qYXZhIik7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0U3BhY2VJbkNvbW1lbnQoKSB0aHJvd3MgVGhyb3dhYmxlIHsKKyAgICBjb25maWd1cmVCeUZpbGUoQkFTRV9QQVRIICsgIlNwYWNlSW5Db21tZW50LmphdmEiKTsKKyAgICBjaGVja1Jlc3VsdEJ5RmlsZShCQVNFX1BBVEggKyAiU3BhY2VJbkNvbW1lbnQuamF2YSIpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFRleHRJbkNvbW1lbnQoKSB0aHJvd3MgVGhyb3dhYmxlIHsKKyAgICBjb25maWd1cmVCeUZpbGUoQkFTRV9QQVRIICsgIlRleHRJbkNvbW1lbnQuamF2YSIpOworICAgIGNoZWNrUmVzdWx0QnlGaWxlKEJBU0VfUEFUSCArICJUZXh0SW5Db21tZW50X2FmdGVyLmphdmEiKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3REb2xsYXJzSW5QcmVmaXgoKSB0aHJvd3MgVGhyb3dhYmxlIHsKKyAgICBjb25maWd1cmVCeUZpbGUoQkFTRV9QQVRIICsgZ2V0VGVzdE5hbWUoZmFsc2UpICsgIi50eHQiKTsKKyAgICBjaGVja1Jlc3VsdEJ5RmlsZShCQVNFX1BBVEggKyBnZXRUZXN0TmFtZShmYWxzZSkgKyAiX2FmdGVyLnR4dCIpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdENvbXBsZXRlU3RyaW5nTGl0ZXJhbENvcHkoKSB0aHJvd3MgVGhyb3dhYmxlIHsKKyAgICBjb25maWd1cmVCeUZpbGUoQkFTRV9QQVRIICsgZ2V0VGVzdE5hbWUoZmFsc2UpICsgIi5qYXZhIik7CisgICAgY2hlY2tSZXN1bHRCeUZpbGUoQkFTRV9QQVRIICsgZ2V0VGVzdE5hbWUoZmFsc2UpICsgIl9hZnRlci5qYXZhIik7CisgIH0KKworfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNpZ2h0L2RhZW1vbi9BZHZIaWdobGlnaHRpbmdKZGs3VGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNpZ2h0L2RhZW1vbi9BZHZIaWdobGlnaHRpbmdKZGs3VGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkyYzRkN2MKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovY29kZUluc2lnaHQvZGFlbW9uL0FkdkhpZ2hsaWdodGluZ0pkazdUZXN0LmphdmEKQEAgLTAsMCArMSwxOTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwMC0yMDEyIEpldEJyYWlucyBzLnIuby4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCitwYWNrYWdlIGNvbS5pbnRlbGxpai5jb2RlSW5zaWdodC5kYWVtb247CisKK2ltcG9ydCBjb20uaW50ZWxsaWouY29kZUluc3BlY3Rpb24uTG9jYWxJbnNwZWN0aW9uVG9vbDsKK2ltcG9ydCBjb20uaW50ZWxsaWouY29kZUluc3BlY3Rpb24uZGVmVXNlLkRlZlVzZUluc3BlY3Rpb247CitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkucHJvamVjdFJvb3RzLkphdmFTZGtWZXJzaW9uOworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLnByb2plY3RSb290cy5KYXZhVmVyc2lvblNlcnZpY2U7CitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkucHJvamVjdFJvb3RzLkphdmFWZXJzaW9uU2VydmljZUltcGw7CitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkucHJvamVjdFJvb3RzLlNkazsKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS5yb290cy5MYW5ndWFnZUxldmVsUHJvamVjdEV4dGVuc2lvbjsKK2ltcG9ydCBjb20uaW50ZWxsaWoucG9tLmphdmEuTGFuZ3VhZ2VMZXZlbDsKK2ltcG9ydCBjb20uaW50ZWxsaWoudGVzdEZyYW1ld29yay5JZGVhVGVzdFV0aWw7CitpbXBvcnQgb3JnLmpldGJyYWlucy5hbm5vdGF0aW9ucy5Ob25ObHM7CisKKy8qKgorICogVGhpcyBjbGFzcyBpbnRlbmRlZCBmb3IgImhlYXZpbHktbG9hZGVkIiB0ZXN0cyBvbmx5LCBlLmcuIHRob3NlIG5lZWQgdG8gc2V0dXAgc2VwYXJhdGUgcHJvamVjdCBkaXJlY3Rvcnkgc3RydWN0dXJlIHRvIHJ1bi4KKyAqIEZvciAibGlnaHR3ZWlnaHQiIHRlc3RzIHBsZWFzZSB1c2Uge0BsaW5rcGxhaW4gTGlnaHRBZHZIaWdobGlnaHRpbmdKZGs3VGVzdH0uCisgKi8KK3B1YmxpYyBjbGFzcyBBZHZIaWdobGlnaHRpbmdKZGs3VGVzdCBleHRlbmRzIERhZW1vbkFuYWx5emVyVGVzdENhc2UgeworICBATm9uTmxzIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBCQVNFX1BBVEggPSAiL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9hZHZIaWdobGlnaHRpbmc3LyI7CisKKyAgQE92ZXJyaWRlCisgIHByb3RlY3RlZCBTZGsgZ2V0VGVzdFByb2plY3RKZGsoKSB7CisgICAgTGFuZ3VhZ2VMZXZlbFByb2plY3RFeHRlbnNpb24uZ2V0SW5zdGFuY2UobXlQcm9qZWN0KS5zZXRMYW5ndWFnZUxldmVsKExhbmd1YWdlTGV2ZWwuSkRLXzFfNyk7CisgICAgcmV0dXJuIElkZWFUZXN0VXRpbC5nZXRNb2NrSmRrMTcoKTsKKyAgfQorCisgIEBPdmVycmlkZQorICBwcm90ZWN0ZWQgTG9jYWxJbnNwZWN0aW9uVG9vbFtdIGNvbmZpZ3VyZUxvY2FsSW5zcGVjdGlvblRvb2xzKCkgeworICAgIHJldHVybiBuZXcgTG9jYWxJbnNwZWN0aW9uVG9vbFtde25ldyBEZWZVc2VJbnNwZWN0aW9uKCl9OworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFN0YXRpY0ltcG9ydHMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoQkFTRV9QQVRIICsgInN0YXRpY0ltcG9ydHMvc3RhdGljSW1wb3J0cy5qYXZhIiwgQkFTRV9QQVRIICsgIi9zdGF0aWNJbXBvcnRzIiwgZmFsc2UsIGZhbHNlKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RTdGF0aWNJbXBvcnRDb25mbGljdCgpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdChCQVNFX1BBVEggKyAic3RhdGljSW1wb3J0Q29uZmxpY3QvVXNhZ2UuamF2YSIsIEJBU0VfUEFUSCArICIvc3RhdGljSW1wb3J0Q29uZmxpY3QiLCBmYWxzZSwgZmFsc2UpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFN0YXRpY09uRGVtYW5kSW1wb3J0Q29uZmxpY3QoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoQkFTRV9QQVRIICsgInN0YXRpY0ltcG9ydENvbmZsaWN0L1VzYWdlT25EZW1hbmQuamF2YSIsIEJBU0VfUEFUSCArICIvc3RhdGljSW1wb3J0Q29uZmxpY3QiLCBmYWxzZSwgZmFsc2UpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFN0YXRpY0ltcG9ydE1ldGhvZFNoYWRvd2luZygpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdChCQVNFX1BBVEggKyAic3RhdGljSW1wb3J0cy9QMS9NZXRob2RTaGFkb3dpbmcuamF2YSIsIEJBU0VfUEFUSCArICIvc3RhdGljSW1wb3J0cyIsIGZhbHNlLCBmYWxzZSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0U3RhdGljQW5kU2luZ2xlSW1wb3J0Q29uZmxpY3QoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoQkFTRV9QQVRIICsgInN0YXRpY0ltcG9ydENvbmZsaWN0L1VzYWdlTWl4ZWQuamF2YSIsIEJBU0VfUEFUSCArICIvc3RhdGljSW1wb3J0Q29uZmxpY3QiLCBmYWxzZSwgZmFsc2UpOworICB9CisKKyAgLy9hbWJpZ3VvdXMgbWV0aG9kIGNhbGxzCisgIHByaXZhdGUgdm9pZCBkb1Rlc3RBbWJpZ3VvdXMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3RBbWJpZ3VvdXMoSmF2YVNka1ZlcnNpb24uSkRLXzFfNyk7CisgIH0KKworICAvL2FtYmlndW91cyBtZXRob2QgY2FsbHMKKyAgcHJpdmF0ZSB2b2lkIGRvVGVzdEFtYmlndW91cyhKYXZhU2RrVmVyc2lvbiBqYXZhU2RrVmVyc2lvbikgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZmluYWwgU3RyaW5nIG5hbWUgPSBnZXRUZXN0TmFtZSh0cnVlKTsKKyAgICAoKEphdmFWZXJzaW9uU2VydmljZUltcGwpSmF2YVZlcnNpb25TZXJ2aWNlLmdldEluc3RhbmNlKCkpLnNldFRlc3RWZXJzaW9uKGphdmFTZGtWZXJzaW9uLCBteVRlc3RSb290RGlzcG9zYWJsZSk7CisgICAgZG9UZXN0KEJBU0VfUEFUSCArIG5hbWUgKyAiL3Bjay9BbWJpZ3VvdXNNZXRob2RDYWxsLmphdmEiLCBCQVNFX1BBVEggKyAiLyIgKyBuYW1lLCBmYWxzZSwgZmFsc2UpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEFtYmlndW91cygpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdEFtYmlndW91cygpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEFtYmlndW91c0FycmF5SW5TdWJzdCgpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdEFtYmlndW91cygpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEFtYmlndW91c1R5cGVQYXJhbUV4dGVuZHMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3RBbWJpZ3VvdXMoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RBbWJpZ3VvdXNUeXBlUGFyYW1ObWIoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3RBbWJpZ3VvdXMoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RBbWJpZ3VvdXNUeXBlUGFyYW1ObWIxKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0QW1iaWd1b3VzKCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0QW1iaWd1b3VzSW5oZXJpdGFuY2UoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3RBbWJpZ3VvdXMoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RBbWJpZ3VvdXNJbmhlcml0YW5jZTEoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3RBbWJpZ3VvdXMoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RBbWJpZ3VvdXNWYXJhcmdzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0QW1iaWd1b3VzKEphdmFTZGtWZXJzaW9uLkpES18xXzgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEFtYmlndW91c1ZhcmFyZ3MxKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0QW1iaWd1b3VzKCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0QW1iaWd1b3VzTXVsdGlJbnRJbmhlcml0YW5jZSgpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdEFtYmlndW91cygpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEFtYmlndW91c011bHRpcGxlVHlwZVBhcmFtRXh0ZW5kcygpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdEFtYmlndW91cygpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEFtYmlndW91c011bHRpcGxlVHlwZVBhcmFtRXh0ZW5kczEoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3RBbWJpZ3VvdXMoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RBbWJpZ3VvdXNNdWx0aXBsZVR5cGVQYXJhbUV4dGVuZHMyKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0QW1iaWd1b3VzKCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0QW1iaWd1b3VzTXVsdGlwbGVUeXBlUGFyYW1FeHRlbmRzMygpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdEFtYmlndW91cygpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEFtYmlndW91c0lERUE1NzMxNygpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdEFtYmlndW91cygpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEFtYmlndW91c0lERUE1NzI3OCgpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdEFtYmlndW91cygpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEFtYmlndW91c0lERUE1NzI2OSgpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdEFtYmlndW91cygpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEFtYmlndW91c0lERUE2NzU3MygpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdEFtYmlndW91cygpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEFtYmlndW91c0lERUE1NzMwNigpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdEFtYmlndW91cygpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEFtYmlndW91c0lERUE1NzUzNSgpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdEFtYmlndW91cygpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEFtYmlndW91c0lERUE2NzgzMigpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdEFtYmlndW91cygpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEFtYmlndW91c0lERUE2NzgzNygpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdEFtYmlndW91cygpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEFtYmlndW91c0lERUE3ODAyNygpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdEFtYmlndW91cygpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEFtYmlndW91c0lERUEyNTA5NygpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdEFtYmlndW91cygpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEFtYmlndW91c0lERUEyNDc2OCgpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdEFtYmlndW91cygpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEFtYmlndW91c0lERUEyMTY2MCgpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdEFtYmlndW91cygpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEFtYmlndW91c0lERUEyMjU0NygpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdEFtYmlndW91cygpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEFtYmlndW91c0luZmVyZW5jZU9yZGVyKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0QW1iaWd1b3VzKCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0QW1iaWd1b3VzSURFQTg3NjcyKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0QW1iaWd1b3VzKCk7CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9jb2RlSW5zaWdodC9kYWVtb24vQWR2SGlnaGxpZ2h0aW5nVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNpZ2h0L2RhZW1vbi9BZHZIaWdobGlnaHRpbmdUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTVjZGY5ZAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9jb2RlSW5zaWdodC9kYWVtb24vQWR2SGlnaGxpZ2h0aW5nVGVzdC5qYXZhCkBAIC0wLDAgKzEsMjg0IEBACisvKgorICogQ29weXJpZ2h0IDIwMDAtMjAxMiBKZXRCcmFpbnMgcy5yLm8uCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworcGFja2FnZSBjb20uaW50ZWxsaWouY29kZUluc2lnaHQuZGFlbW9uOworCitpbXBvcnQgY29tLmludGVsbGlqLmFuYWx5c2lzLlBhY2thZ2VzU2NvcGVzUHJvdmlkZXI7CitpbXBvcnQgY29tLmludGVsbGlqLmFwcGxpY2F0aW9uLm9wdGlvbnMuY29sb3JzLkNvbG9yQW5kRm9udE9wdGlvbnM7CitpbXBvcnQgY29tLmludGVsbGlqLmNvZGVJbnNpZ2h0LmRhZW1vbi5pbXBsLkhpZ2hsaWdodEluZm87CitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkuYXBwbGljYXRpb24uZXguUGF0aE1hbmFnZXJFeDsKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS5lZGl0b3IuY29sb3JzLkVkaXRvckNvbG9yc01hbmFnZXI7CitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkuZWRpdG9yLmNvbG9ycy5FZGl0b3JDb2xvcnNTY2hlbWU7CitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkuZWRpdG9yLmNvbG9ycy5UZXh0QXR0cmlidXRlc0tleTsKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS5lZGl0b3IubWFya3VwLkVmZmVjdFR5cGU7CitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkuZWRpdG9yLm1hcmt1cC5UZXh0QXR0cmlidXRlczsKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS5tb2R1bGUuTW9kdWxlOworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLm1vZHVsZS5Nb2R1bGVNYW5hZ2VyOworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLnByb2plY3RSb290cy5TZGs7CitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkucHJvamVjdFJvb3RzLmltcGwuSmF2YVNka0ltcGw7CitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkucm9vdHMuTGFuZ3VhZ2VMZXZlbFByb2plY3RFeHRlbnNpb247CitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkucm9vdHMuTW9kdWxlUm9vdE1vZGlmaWNhdGlvblV0aWw7CitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkudmZzLkxvY2FsRmlsZVN5c3RlbTsKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS52ZnMuVmlydHVhbEZpbGU7CitpbXBvcnQgY29tLmludGVsbGlqLnBhY2thZ2VEZXBlbmRlbmNpZXMuRGVwZW5kZW5jeVZhbGlkYXRpb25NYW5hZ2VyOworaW1wb3J0IGNvbS5pbnRlbGxpai5wb20uamF2YS5MYW5ndWFnZUxldmVsOworaW1wb3J0IGNvbS5pbnRlbGxpai5wc2kuUHNpQ2xhc3M7CitpbXBvcnQgY29tLmludGVsbGlqLnBzaS5Qc2lDbGFzc1R5cGU7CitpbXBvcnQgY29tLmludGVsbGlqLnBzaS5Qc2lGaWVsZDsKK2ltcG9ydCBjb20uaW50ZWxsaWoucHNpLlBzaUphdmFGaWxlOworaW1wb3J0IGNvbS5pbnRlbGxpai5wc2kuc2VhcmNoLnNjb3BlLnBhY2thZ2VTZXQuTmFtZWRTY29wZTsKK2ltcG9ydCBjb20uaW50ZWxsaWoucHNpLnNlYXJjaC5zY29wZS5wYWNrYWdlU2V0Lk5hbWVkU2NvcGVNYW5hZ2VyOworaW1wb3J0IGNvbS5pbnRlbGxpai5wc2kuc2VhcmNoLnNjb3BlLnBhY2thZ2VTZXQuTmFtZWRTY29wZXNIb2xkZXI7CitpbXBvcnQgY29tLmludGVsbGlqLnBzaS5zZWFyY2guc2NvcGUucGFja2FnZVNldC5QYXR0ZXJuUGFja2FnZVNldDsKK2ltcG9ydCBjb20uaW50ZWxsaWoudGVzdEZyYW1ld29yay5JZGVhVGVzdFV0aWw7CitpbXBvcnQgb3JnLmpldGJyYWlucy5hbm5vdGF0aW9ucy5Ob25ObHM7CisKK2ltcG9ydCBqYXZhLmF3dC4qOworaW1wb3J0IGphdmEuaW8uRmlsZTsKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKKworLyoqCisgKiBUaGlzIGNsYXNzIGludGVuZGVkIGZvciAiaGVhdmlseS1sb2FkZWQiIHRlc3RzIG9ubHksIGUuZy4gdGhvc2UgbmVlZCB0byBzZXR1cCBzZXBhcmF0ZSBwcm9qZWN0IGRpcmVjdG9yeSBzdHJ1Y3R1cmUgdG8gcnVuCisgKiBGb3IgImxpZ2h0d2VpZ2h0IiB0ZXN0cyB1c2UgTGlnaHRBZHZIaWdobGlnaHRpbmdUZXN0CisgKi8KK3B1YmxpYyBjbGFzcyBBZHZIaWdobGlnaHRpbmdUZXN0IGV4dGVuZHMgRGFlbW9uQW5hbHl6ZXJUZXN0Q2FzZSB7CisgIEBOb25ObHMgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEJBU0VfUEFUSCA9ICIvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZyI7CisKKyAgQE92ZXJyaWRlCisgIHByb3RlY3RlZCBTZGsgZ2V0VGVzdFByb2plY3RKZGsoKSB7CisgICAgTGFuZ3VhZ2VMZXZlbFByb2plY3RFeHRlbnNpb24uZ2V0SW5zdGFuY2UobXlQcm9qZWN0KS5zZXRMYW5ndWFnZUxldmVsKExhbmd1YWdlTGV2ZWwuSkRLXzFfNCk7CisgICAgcmV0dXJuIElkZWFUZXN0VXRpbC5nZXRNb2NrSmRrMTQoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RQYWNrYWdlTG9jYWxzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KEJBU0VfUEFUSCArICIvcGFja2FnZUxvY2Fscy94L3N1Yi9Vc2luZ01haW4uamF2YSIsIEJBU0VfUEFUSCArICIvcGFja2FnZUxvY2FscyIsIGZhbHNlLCBmYWxzZSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0UGFja2FnZUxvY2FsQ2xhc3NJblRoZU1pZGRsZSgpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdChCQVNFX1BBVEggKyAiL3BhY2thZ2VMb2NhbHMveC9BLmphdmEiLCBCQVNFX1BBVEggKyAiL3BhY2thZ2VMb2NhbHMiLCBmYWxzZSwgZmFsc2UpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEVmZmVjdGl2ZUFjY2Vzc0xldmVsKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KEJBU0VfUEFUSCArICIvYWNjZXNzTGV2ZWwvZWZmZWN0aXZlQWNjZXNzL3AyL3AzLmphdmEiLCBCQVNFX1BBVEggKyAiL2FjY2Vzc0xldmVsIiwgZmFsc2UsIGZhbHNlKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RTaW5nbGVJbXBvcnRDb25mbGljdCgpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdChCQVNFX1BBVEggKyAiL3NpbmdsZUltcG9ydC9kLmphdmEiLCBCQVNFX1BBVEggKyAiL3NpbmdsZUltcG9ydCIsIGZhbHNlLCBmYWxzZSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0RHVwbGljYXRlVG9wTGV2ZWxDbGFzcygpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdChCQVNFX1BBVEggKyAiL2R1cGxpY2F0ZUNsYXNzL0EuamF2YSIsIEJBU0VfUEFUSCArICIvZHVwbGljYXRlQ2xhc3MiLCBmYWxzZSwgZmFsc2UpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdER1cGxpY2F0ZVRvcExldmVsQ2xhc3MyKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KEJBU0VfUEFUSCArICIvZHVwbGljYXRlQ2xhc3MvamF2YS9sYW5nL1J1bm5hYmxlLmphdmEiLCBCQVNFX1BBVEggKyAiL2R1cGxpY2F0ZUNsYXNzIiwgZmFsc2UsIGZhbHNlKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RQcm90ZWN0ZWRDb25zdHJ1Y3RvckNhbGwoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoQkFTRV9QQVRIICsgIi9wcm90ZWN0ZWRDb25zdHJ1Y3Rvci9wMi9DMi5qYXZhIiwgQkFTRV9QQVRIICsgIi9wcm90ZWN0ZWRDb25zdHJ1Y3RvciIsIGZhbHNlLCBmYWxzZSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0UHJvdGVjdGVkQ29uc3RydWN0b3JDYWxsSW5TYW1lUGFja2FnZSgpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdChCQVNFX1BBVEggKyAiL3Byb3RlY3RlZENvbnN0cnVjdG9yL3NhbWVQYWNrYWdlL0MyLmphdmEiLCBCQVNFX1BBVEggKyAiL3Byb3RlY3RlZENvbnN0cnVjdG9yIiwgZmFsc2UsIGZhbHNlKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RQcm90ZWN0ZWRDb25zdHJ1Y3RvckNhbGxJbklubmVyKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KEJBU0VfUEFUSCArICIvcHJvdGVjdGVkQ29uc3RydWN0b3JJbklubmVyL3AyL0MyLmphdmEiLCBCQVNFX1BBVEggKyAiL3Byb3RlY3RlZENvbnN0cnVjdG9ySW5Jbm5lciIsIGZhbHNlLCBmYWxzZSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0QXJyYXlMZW5ndGhBY2Nlc3NGcm9tU3ViQ2xhc3MoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoQkFTRV9QQVRIICsgIi9hcnJheUxlbmd0aC9wMi9TdWJUZXN0LmphdmEiLCBCQVNFX1BBVEggKyAiL2FycmF5TGVuZ3RoIiwgZmFsc2UsIGZhbHNlKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RBY2Nlc3NpYmxlTWVtYmVyKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KEJBU0VfUEFUSCArICIvYWNjZXNzaWJsZU1lbWJlci9jb20vcmVkL0MuamF2YSIsIEJBU0VfUEFUSCArICIvYWNjZXNzaWJsZU1lbWJlciIsIGZhbHNlLCBmYWxzZSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0T25EZW1hbmRJbXBvcnRDb25mbGljdCgpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdChCQVNFX1BBVEggKyAiL29uRGVtYW5kSW1wb3J0Q29uZmxpY3QvT3V0ZXIuamF2YSIsIEJBU0VfUEFUSCArICIvb25EZW1hbmRJbXBvcnRDb25mbGljdCIsIGZhbHNlLCBmYWxzZSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0UGFja2FnZUxvY2FsT3ZlcnJpZGUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoQkFTRV9QQVRIICsgIi9wYWNrYWdlTG9jYWxPdmVycmlkZS95L0MuamF2YSIsIEJBU0VfUEFUSCArICIvcGFja2FnZUxvY2FsT3ZlcnJpZGUiLCBmYWxzZSwgZmFsc2UpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFBhY2thZ2VMb2NhbE92ZXJyaWRlSnVzdENoZWNrVGhhdFBhY2thZ2VMb2NhbE1ldGhvZERvZXNOb3RHZXRPdmVycmlkZGVuKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KEJBU0VfUEFUSCArICIvcGFja2FnZUxvY2FsT3ZlcnJpZGUveS9CLmphdmEiLCBCQVNFX1BBVEggKyAiL3BhY2thZ2VMb2NhbE92ZXJyaWRlIiwgZmFsc2UsIGZhbHNlKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RQcm90ZWN0ZWRBY2Nlc3NGcm9tT3RoZXJQYWNrYWdlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KEJBU0VfUEFUSCArICIvcHJvdGVjdGVkQWNjZXNzRnJvbU90aGVyUGFja2FnZS9hL01haW4uamF2YSIsIEJBU0VfUEFUSCArICIvcHJvdGVjdGVkQWNjZXNzRnJvbU90aGVyUGFja2FnZSIsIGZhbHNlLCBmYWxzZSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0UHJvdGVjdGVkRmllbGRBY2Nlc3NGcm9tT3RoZXJQYWNrYWdlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KEJBU0VfUEFUSCArICIvcHJvdGVjdGVkQWNjZXNzRnJvbU90aGVyUGFja2FnZS9hL0EuamF2YSIsIEJBU0VfUEFUSCArICIvcHJvdGVjdGVkQWNjZXNzRnJvbU90aGVyUGFja2FnZSIsIGZhbHNlLCBmYWxzZSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0UGFja2FnZUxvY2FsQ2xhc3NJblRoZU1pZGRsZTEoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoQkFTRV9QQVRIICsgIi9mb3JlaWduUGFja2FnZUluQmV0d2Vlbi9hL0ExLmphdmEiLCBCQVNFX1BBVEggKyAiL2ZvcmVpZ25QYWNrYWdlSW5CZXR3ZWVuIiwgZmFsc2UsIGZhbHNlKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RJbXBvcnRPbkRlbWFuZCgpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdChCQVNFX1BBVEggKyAiL2ltcG9ydE9uRGVtYW5kL3kvWS5qYXZhIiwgQkFTRV9QQVRIICsgIi9pbXBvcnRPbkRlbWFuZCIsIGZhbHNlLCBmYWxzZSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0SW1wb3J0T25EZW1hbmRWc1NpbmdsZSgpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdChCQVNFX1BBVEggKyAiL2ltcG9ydE9uRGVtYW5kVnNTaW5nbGUveS9ZLmphdmEiLCBCQVNFX1BBVEggKyAiL2ltcG9ydE9uRGVtYW5kVnNTaW5nbGUiLCBmYWxzZSwgZmFsc2UpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEltcG9ydFNpbmdsZVZzU2FtZVBhY2thZ2UoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoQkFTRV9QQVRIICsgIi9pbXBvcnRTaW5nbGVWc1NhbWVQYWNrYWdlL3kvWS5qYXZhIiwgQkFTRV9QQVRIICsgIi9pbXBvcnRTaW5nbGVWc1NhbWVQYWNrYWdlIiwgZmFsc2UsIGZhbHNlKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RJbXBvcnRTaW5nbGVWc0luaGVyaXRlZCgpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdChCQVNFX1BBVEggKyAiL2ltcG9ydFNpbmdsZVZzSW5oZXJpdGVkL1Rlc3QuamF2YSIsIEJBU0VfUEFUSCArICIvaW1wb3J0U2luZ2xlVnNJbmhlcml0ZWQiLCBmYWxzZSwgZmFsc2UpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEltcG9ydE9uRGVtYW5kVnNJbmhlcml0ZWQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoQkFTRV9QQVRIICsgIi9pbXBvcnRPbkRlbWFuZFZzSW5oZXJpdGVkL1Rlc3QuamF2YSIsIEJBU0VfUEFUSCArICIvaW1wb3J0T25EZW1hbmRWc0luaGVyaXRlZCIsIGZhbHNlLCBmYWxzZSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0T3ZlcnJpZGVQYWNrYWdlTG9jYWwoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoQkFTRV9QQVRIICsgIi9vdmVycmlkZVBhY2thZ2VMb2NhbC94L3kvRGVyaXZlZC5qYXZhIiwgQkFTRV9QQVRIICsgIi9vdmVycmlkZVBhY2thZ2VMb2NhbCIsIGZhbHNlLCBmYWxzZSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0QWxyZWFkeUltcG9ydGVkQ2xhc3MoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoQkFTRV9QQVRIICsgIi9hbHJlYWR5SW1wb3J0ZWRDbGFzcy9wYWNrL0FscmVhZHlJbXBvcnRlZENsYXNzLmphdmEiLCBCQVNFX1BBVEggKyAiL2FscmVhZHlJbXBvcnRlZENsYXNzIiwgZmFsc2UsIGZhbHNlKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RJbXBvcnREZWZhdWx0UGFja2FnZSgpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdChCQVNFX1BBVEggKyAiL2ltcG9ydERlZmF1bHRQYWNrYWdlL3gvVXNhZ2UuamF2YSIsIEJBU0VfUEFUSCArICIvaW1wb3J0RGVmYXVsdFBhY2thZ2UiLCBmYWxzZSwgZmFsc2UpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEltcG9ydERlZmF1bHRQYWNrYWdlMigpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdChCQVNFX1BBVEggKyAiL2ltcG9ydERlZmF1bHRQYWNrYWdlL3gvSW1wb3J0T25EZW1hbmRVc2FnZS5qYXZhIiwgQkFTRV9QQVRIICsgIi9pbXBvcnREZWZhdWx0UGFja2FnZSIsIGZhbHNlLCBmYWxzZSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0SW1wb3J0RGVmYXVsdFBhY2thZ2VJbnZhbGlkKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KEJBU0VfUEFUSCArICIvaW1wb3J0RGVmYXVsdFBhY2thZ2UveC9JbnZhbGlkVXNlLmphdmEiLCBCQVNFX1BBVEggKyAiL2ltcG9ydERlZmF1bHRQYWNrYWdlIiwgZmFsc2UsIGZhbHNlKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RTY29wZUJhc2VkKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgTmFtZWRTY29wZSB4U2NvcGUgPSBuZXcgTmFtZWRTY29wZSgieHh4IiwgbmV3IFBhdHRlcm5QYWNrYWdlU2V0KCJ4Li4qIiwgUGF0dGVyblBhY2thZ2VTZXQuU0NPUEVfU09VUkNFLCBudWxsKSk7CisgICAgTmFtZWRTY29wZSB1dGlsU2NvcGUgPSBuZXcgTmFtZWRTY29wZSgidXRpbCIsIG5ldyBQYXR0ZXJuUGFja2FnZVNldCgiamF2YS51dGlsLioiLCBQYXR0ZXJuUGFja2FnZVNldC5TQ09QRV9MSUJSQVJZLCBudWxsKSk7CisgICAgTmFtZWRTY29wZU1hbmFnZXIgc2NvcGVNYW5hZ2VyID0gTmFtZWRTY29wZU1hbmFnZXIuZ2V0SW5zdGFuY2UoZ2V0UHJvamVjdCgpKTsKKyAgICBzY29wZU1hbmFnZXIuYWRkU2NvcGUoeFNjb3BlKTsKKyAgICBzY29wZU1hbmFnZXIuYWRkU2NvcGUodXRpbFNjb3BlKTsKKworICAgIEVkaXRvckNvbG9yc01hbmFnZXIgbWFuYWdlciA9IEVkaXRvckNvbG9yc01hbmFnZXIuZ2V0SW5zdGFuY2UoKTsKKyAgICBFZGl0b3JDb2xvcnNTY2hlbWUgc2NoZW1lID0gKEVkaXRvckNvbG9yc1NjaGVtZSltYW5hZ2VyLmdldEdsb2JhbFNjaGVtZSgpLmNsb25lKCk7CisgICAgbWFuYWdlci5hZGRDb2xvcnNTY2hlbWUoc2NoZW1lKTsKKyAgICBFZGl0b3JDb2xvcnNNYW5hZ2VyLmdldEluc3RhbmNlKCkuc2V0R2xvYmFsU2NoZW1lKHNjaGVtZSk7CisgICAgVGV4dEF0dHJpYnV0ZXNLZXkgeEtleSA9IENvbG9yQW5kRm9udE9wdGlvbnMuZ2V0U2NvcGVUZXh0QXR0cmlidXRlS2V5KHhTY29wZS5nZXROYW1lKCkpOworICAgIFRleHRBdHRyaWJ1dGVzIHhBdHRyaWJ1dGVzID0gbmV3IFRleHRBdHRyaWJ1dGVzKENvbG9yLmN5YW4sIENvbG9yLmRhcmtHcmF5LCBDb2xvci5ibHVlLCBFZmZlY3RUeXBlLkJPWEVELCBGb250LklUQUxJQyk7CisgICAgc2NoZW1lLnNldEF0dHJpYnV0ZXMoeEtleSwgeEF0dHJpYnV0ZXMpOworCisgICAgVGV4dEF0dHJpYnV0ZXNLZXkgdXRpbEtleSA9IENvbG9yQW5kRm9udE9wdGlvbnMuZ2V0U2NvcGVUZXh0QXR0cmlidXRlS2V5KHV0aWxTY29wZS5nZXROYW1lKCkpOworICAgIFRleHRBdHRyaWJ1dGVzIHV0aWxBdHRyaWJ1dGVzID0gbmV3IFRleHRBdHRyaWJ1dGVzKENvbG9yLmdyYXksIENvbG9yLm1hZ2VudGEsIENvbG9yLm9yYW5nZSwgRWZmZWN0VHlwZS5TVFJJS0VPVVQsIEZvbnQuQk9MRCk7CisgICAgc2NoZW1lLnNldEF0dHJpYnV0ZXModXRpbEtleSwgdXRpbEF0dHJpYnV0ZXMpOworCisgICAgdHJ5IHsKKyAgICAgIHRlc3RGaWxlKEJBU0VfUEFUSCArICIvc2NvcGVCYXNlZC94L1guamF2YSIpLnByb2plY3RSb290KEJBU0VfUEFUSCArICIvc2NvcGVCYXNlZCIpLmNoZWNrU3ltYm9sTmFtZXMoKS50ZXN0KCk7CisgICAgfQorICAgIGZpbmFsbHkgeworICAgICAgc2NvcGVNYW5hZ2VyLnJlbW92ZUFsbFNldHMoKTsKKyAgICB9CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0U2hhcmVkU2NvcGVCYXNlZCgpIHRocm93cyBFeGNlcHRpb24geworICAgIE5hbWVkU2NvcGUgeFNjb3BlID0gbmV3IE5hbWVkU2NvcGUoInh4eCIsIG5ldyBQYXR0ZXJuUGFja2FnZVNldCgieC4uKiIsIFBhdHRlcm5QYWNrYWdlU2V0LlNDT1BFX0FOWSwgbnVsbCkpOworICAgIE5hbWVkU2NvcGUgdXRpbFNjb3BlID0gbmV3IE5hbWVkU2NvcGUoInV0aWwiLCBuZXcgUGF0dGVyblBhY2thZ2VTZXQoImphdmEudXRpbC4qIiwgUGF0dGVyblBhY2thZ2VTZXQuU0NPUEVfTElCUkFSWSwgbnVsbCkpOworICAgIE5hbWVkU2NvcGVzSG9sZGVyIHNjb3BlTWFuYWdlciA9IERlcGVuZGVuY3lWYWxpZGF0aW9uTWFuYWdlci5nZXRJbnN0YW5jZShnZXRQcm9qZWN0KCkpOworICAgIHNjb3BlTWFuYWdlci5hZGRTY29wZSh4U2NvcGUpOworICAgIHNjb3BlTWFuYWdlci5hZGRTY29wZSh1dGlsU2NvcGUpOworCisgICAgRWRpdG9yQ29sb3JzTWFuYWdlciBtYW5hZ2VyID0gRWRpdG9yQ29sb3JzTWFuYWdlci5nZXRJbnN0YW5jZSgpOworICAgIEVkaXRvckNvbG9yc1NjaGVtZSBzY2hlbWUgPSAoRWRpdG9yQ29sb3JzU2NoZW1lKW1hbmFnZXIuZ2V0R2xvYmFsU2NoZW1lKCkuY2xvbmUoKTsKKyAgICBtYW5hZ2VyLmFkZENvbG9yc1NjaGVtZShzY2hlbWUpOworICAgIEVkaXRvckNvbG9yc01hbmFnZXIuZ2V0SW5zdGFuY2UoKS5zZXRHbG9iYWxTY2hlbWUoc2NoZW1lKTsKKyAgICBUZXh0QXR0cmlidXRlc0tleSB4S2V5ID0gQ29sb3JBbmRGb250T3B0aW9ucy5nZXRTY29wZVRleHRBdHRyaWJ1dGVLZXkoeFNjb3BlLmdldE5hbWUoKSk7CisgICAgVGV4dEF0dHJpYnV0ZXMgeEF0dHJpYnV0ZXMgPSBuZXcgVGV4dEF0dHJpYnV0ZXMoQ29sb3IuY3lhbiwgQ29sb3IuZGFya0dyYXksIENvbG9yLmJsdWUsIG51bGwsIEZvbnQuSVRBTElDKTsKKyAgICBzY2hlbWUuc2V0QXR0cmlidXRlcyh4S2V5LCB4QXR0cmlidXRlcyk7CisKKyAgICBUZXh0QXR0cmlidXRlc0tleSB1dGlsS2V5ID0gQ29sb3JBbmRGb250T3B0aW9ucy5nZXRTY29wZVRleHRBdHRyaWJ1dGVLZXkodXRpbFNjb3BlLmdldE5hbWUoKSk7CisgICAgVGV4dEF0dHJpYnV0ZXMgdXRpbEF0dHJpYnV0ZXMgPSBuZXcgVGV4dEF0dHJpYnV0ZXMoQ29sb3IuZ3JheSwgQ29sb3IubWFnZW50YSwgQ29sb3Iub3JhbmdlLCBFZmZlY3RUeXBlLlNUUklLRU9VVCwgRm9udC5CT0xEKTsKKyAgICBzY2hlbWUuc2V0QXR0cmlidXRlcyh1dGlsS2V5LCB1dGlsQXR0cmlidXRlcyk7CisKKyAgICBOYW1lZFNjb3BlIHByb2plY3RTY29wZSA9IFBhY2thZ2VzU2NvcGVzUHJvdmlkZXIuZ2V0SW5zdGFuY2UobXlQcm9qZWN0KS5nZXRQcm9qZWN0UHJvZHVjdGlvblNjb3BlKCk7CisgICAgVGV4dEF0dHJpYnV0ZXNLZXkgcHJvamVjdEtleSA9IENvbG9yQW5kRm9udE9wdGlvbnMuZ2V0U2NvcGVUZXh0QXR0cmlidXRlS2V5KHByb2plY3RTY29wZS5nZXROYW1lKCkpOworICAgIFRleHRBdHRyaWJ1dGVzIHByb2plY3RBdHRyaWJ1dGVzID0gbmV3IFRleHRBdHRyaWJ1dGVzKG51bGwsIG51bGwsIENvbG9yLmJsdWUsIEVmZmVjdFR5cGUuQk9YRUQsIEZvbnQuSVRBTElDKTsKKyAgICBzY2hlbWUuc2V0QXR0cmlidXRlcyhwcm9qZWN0S2V5LCBwcm9qZWN0QXR0cmlidXRlcyk7CisKKyAgICB0cnkgeworICAgICAgdGVzdEZpbGUoQkFTRV9QQVRIICsgIi9zY29wZUJhc2VkL3gvU2hhcmVkLmphdmEiKS5wcm9qZWN0Um9vdChCQVNFX1BBVEggKyAiL3Njb3BlQmFzZWQiKS5jaGVja1N5bWJvbE5hbWVzKCkudGVzdCgpOworICAgIH0KKyAgICBmaW5hbGx5IHsKKyAgICAgIHNjb3BlTWFuYWdlci5yZW1vdmVBbGxTZXRzKCk7CisgICAgfQorICB9CisKKyAgcHVibGljIHZvaWQgdGVzdE11bHRpSkRLQ29uZmxpY3QoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBTdHJpbmcgcGF0aCA9IFBhdGhNYW5hZ2VyRXguZ2V0VGVzdERhdGFQYXRoKCkgKyBCQVNFX1BBVEggKyAiLyIgKyBnZXRUZXN0TmFtZSh0cnVlKTsKKyAgICBWaXJ0dWFsRmlsZSByb290ID0gTG9jYWxGaWxlU3lzdGVtLmdldEluc3RhbmNlKCkuZmluZEZpbGVCeUlvRmlsZShuZXcgRmlsZShwYXRoKSk7CisgICAgbG9hZEFsbE1vZHVsZXNVbmRlcihyb290KTsKKyAgICBNb2R1bGVNYW5hZ2VyIG1vZHVsZU1hbmFnZXIgPSBNb2R1bGVNYW5hZ2VyLmdldEluc3RhbmNlKGdldFByb2plY3QoKSk7CisgICAgZmluYWwgTW9kdWxlIGphdmE0ID0gbW9kdWxlTWFuYWdlci5maW5kTW9kdWxlQnlOYW1lKCJqYXZhNCIpOworICAgIE1vZHVsZSBqYXZhNSA9IG1vZHVsZU1hbmFnZXIuZmluZE1vZHVsZUJ5TmFtZSgiamF2YTUiKTsKKyAgICBNb2R1bGVSb290TW9kaWZpY2F0aW9uVXRpbC5zZXRNb2R1bGVTZGsoamF2YTQsIElkZWFUZXN0VXRpbC5nZXRNb2NrSmRrMTcoImphdmEgMS40IikpOworICAgIE1vZHVsZVJvb3RNb2RpZmljYXRpb25VdGlsLnNldE1vZHVsZVNkayhqYXZhNSwgSWRlYVRlc3RVdGlsLmdldE1vY2tKZGsxNygiamF2YSAxLjUiKSk7CisgICAgTW9kdWxlUm9vdE1vZGlmaWNhdGlvblV0aWwuYWRkRGVwZW5kZW5jeShqYXZhNSwgamF2YTQpOworCisgICAgYXNzZXJ0IHJvb3QgIT0gbnVsbDsKKyAgICBjb25maWd1cmVCeUV4aXN0aW5nRmlsZShyb290LmZpbmRGaWxlQnlSZWxhdGl2ZVBhdGgoIm1vZHVsZUphdmE1L2NvbS9KYXZhNS5qYXZhIikpOworICAgIENvbGxlY3Rpb248SGlnaGxpZ2h0SW5mbz4gaW5mb3MgPSBoaWdobGlnaHRFcnJvcnMoKTsKKyAgICBhc3NlcnRFbXB0eShpbmZvcyk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0U2FtZUZRTkNsYXNzZXMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBTdHJpbmcgcGF0aCA9IFBhdGhNYW5hZ2VyRXguZ2V0VGVzdERhdGFQYXRoKCkgKyBCQVNFX1BBVEggKyAiLyIgKyBnZXRUZXN0TmFtZSh0cnVlKTsKKyAgICBWaXJ0dWFsRmlsZSByb290ID0gTG9jYWxGaWxlU3lzdGVtLmdldEluc3RhbmNlKCkuZmluZEZpbGVCeUlvRmlsZShuZXcgRmlsZShwYXRoKSk7CisgICAgbG9hZEFsbE1vZHVsZXNVbmRlcihyb290KTsKKworICAgIGFzc2VydCByb290ICE9IG51bGw7CisgICAgY29uZmlndXJlQnlFeGlzdGluZ0ZpbGUocm9vdC5maW5kRmlsZUJ5UmVsYXRpdmVQYXRoKCJjbGllbnQvc3JjL0J1Z1Rlc3QuamF2YSIpKTsKKyAgICBDb2xsZWN0aW9uPEhpZ2hsaWdodEluZm8+IGluZm9zID0gaGlnaGxpZ2h0RXJyb3JzKCk7CisgICAgYXNzZXJ0RW1wdHkoaW5mb3MpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFNhbWVDbGFzc2VzSW5Tb3VyY2VBbmRMaWIoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBTdHJpbmcgcGF0aCA9IFBhdGhNYW5hZ2VyRXguZ2V0VGVzdERhdGFQYXRoKCkgKyBCQVNFX1BBVEggKyAiLyIgKyBnZXRUZXN0TmFtZSh0cnVlKTsKKyAgICBWaXJ0dWFsRmlsZSByb290ID0gTG9jYWxGaWxlU3lzdGVtLmdldEluc3RhbmNlKCkuZmluZEZpbGVCeUlvRmlsZShuZXcgRmlsZShwYXRoKSk7CisgICAgbG9hZEFsbE1vZHVsZXNVbmRlcihyb290KTsKKworICAgIGFzc2VydCByb290ICE9IG51bGw7CisgICAgY29uZmlndXJlQnlFeGlzdGluZ0ZpbGUocm9vdC5maW5kRmlsZUJ5UmVsYXRpdmVQYXRoKCJzcmMvcHBwL1NvbWVDbGFzcy5qYXZhIikpOworICAgIFBzaUZpZWxkIGZpZWxkID0gKChQc2lKYXZhRmlsZSlteUZpbGUpLmdldENsYXNzZXMoKVswXS5maW5kRmllbGRCeU5hbWUoImYiLCBmYWxzZSk7CisgICAgYXNzZXJ0IGZpZWxkICE9IG51bGw7CisgICAgUHNpQ2xhc3MgYUNsYXNzID0gKChQc2lDbGFzc1R5cGUpZmllbGQuZ2V0VHlwZSgpKS5yZXNvbHZlKCk7CisgICAgYXNzZXJ0IGFDbGFzcyAhPSBudWxsOworICAgIGFzc2VydEVxdWFscygicHBwLkJhZENsYXNzIiwgYUNsYXNzLmdldFF1YWxpZmllZE5hbWUoKSk7CisgICAgLy9saWVzIGluIHNvdXJjZQorICAgIGZpbmFsIFZpcnR1YWxGaWxlIHZGaWxlMSA9IG15RmlsZS5nZXRWaXJ0dWFsRmlsZSgpOworICAgIGZpbmFsIFZpcnR1YWxGaWxlIHZGaWxlMiA9IGFDbGFzcy5nZXRDb250YWluaW5nRmlsZSgpLmdldFZpcnR1YWxGaWxlKCk7CisgICAgYXNzZXJ0IHZGaWxlMSAhPSBudWxsOworICAgIGFzc2VydCB2RmlsZTIgIT0gbnVsbDsKKyAgICBhc3NlcnRFcXVhbHModkZpbGUxLmdldFBhcmVudCgpLCB2RmlsZTIuZ2V0UGFyZW50KCkpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdE5vdEFLZXl3b3JkcygpIHRocm93cyBFeGNlcHRpb24geworICAgIExhbmd1YWdlTGV2ZWxQcm9qZWN0RXh0ZW5zaW9uLmdldEluc3RhbmNlKG15UHJvamVjdCkuc2V0TGFuZ3VhZ2VMZXZlbChMYW5ndWFnZUxldmVsLkpES18xXzQpOworICAgIGRvVGVzdChCQVNFX1BBVEggKyAiL25vdEFLZXl3b3Jkcy9UZXN0LmphdmEiLCBCQVNFX1BBVEggKyAiL25vdEFLZXl3b3JkcyIsIGZhbHNlLCBmYWxzZSk7CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9jb2RlSW5zaWdodC9kYWVtb24vQW1iaWd1b3VzTWV0aG9kQ2FsbFRlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9jb2RlSW5zaWdodC9kYWVtb24vQW1iaWd1b3VzTWV0aG9kQ2FsbFRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNzE2ZGJmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNpZ2h0L2RhZW1vbi9BbWJpZ3VvdXNNZXRob2RDYWxsVGVzdC5qYXZhCkBAIC0wLDAgKzEsNjAgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwMC0yMDEyIEpldEJyYWlucyBzLnIuby4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCitwYWNrYWdlIGNvbS5pbnRlbGxpai5jb2RlSW5zaWdodC5kYWVtb247CisKK2ltcG9ydCBjb20uaW50ZWxsaWouY29kZUluc3BlY3Rpb24uSW5zcGVjdGlvblByb2ZpbGVFbnRyeTsKK2ltcG9ydCBjb20uaW50ZWxsaWouY29kZUluc3BlY3Rpb24uTG9jYWxJbnNwZWN0aW9uVG9vbDsKK2ltcG9ydCBjb20uaW50ZWxsaWouY29kZUluc3BlY3Rpb24uY29tcGlsZXIuSmF2YWNRdWlya3NJbnNwZWN0aW9uOworaW1wb3J0IGNvbS5pbnRlbGxpai5jb2RlSW5zcGVjdGlvbi5yZWR1bmRhbnRDYXN0LlJlZHVuZGFudENhc3RJbnNwZWN0aW9uOworaW1wb3J0IGNvbS5pbnRlbGxpai5jb2RlSW5zcGVjdGlvbi51bmNoZWNrZWRXYXJuaW5ncy5VbmNoZWNrZWRXYXJuaW5nTG9jYWxJbnNwZWN0aW9uOworaW1wb3J0IGNvbS5pbnRlbGxpai5jb2RlSW5zcGVjdGlvbi51bnVzZWRTeW1ib2wuVW51c2VkU3ltYm9sTG9jYWxJbnNwZWN0aW9uOworaW1wb3J0IG9yZy5qZXRicmFpbnMuYW5ub3RhdGlvbnMuTm9uTmxzOworCisvKioKKyAqIFRoaXMgY2xhc3MgaXMgZm9yICJsaWdodHdlaWdodCIgdGVzdHMgb25seSwgaS5lLiB0aG9zZSB3aGljaCBjYW4gcnVuIGluc2lkZSBkZWZhdWx0IGxpZ2h0IHByb2plY3Qgc2V0IHVwCisgKiBGb3IgImhlYXZ5d2VpZ2h0IiB0ZXN0cyB1c2UgQWR2SGlnaGxpZ2h0aW5nVGVzdAorICovCitwdWJsaWMgY2xhc3MgQW1iaWd1b3VzTWV0aG9kQ2FsbFRlc3QgZXh0ZW5kcyBMaWdodERhZW1vbkFuYWx5emVyVGVzdENhc2UgeworICBATm9uTmxzIHN0YXRpYyBmaW5hbCBTdHJpbmcgQkFTRV9QQVRIID0gIi9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYW1iaWd1b3VzQ2FsbHMiOworCisgIHByaXZhdGUgdm9pZCBkb1Rlc3QoYm9vbGVhbiBjaGVja1dhcm5pbmdzLCBib29sZWFuIGNoZWNrSW5mb3MsIEluc3BlY3Rpb25Qcm9maWxlRW50cnkuLi4gdG9vbHMpIHRocm93cyBFeGNlcHRpb24geworICAgIGZvciAoSW5zcGVjdGlvblByb2ZpbGVFbnRyeSB0b29sIDogdG9vbHMpIHsgZW5hYmxlSW5zcGVjdGlvblRvb2wodG9vbCk7IH0KKyAgICBkb1Rlc3QoQkFTRV9QQVRIICsgIi8iICsgZ2V0VGVzdE5hbWUoZmFsc2UpICsgIi5qYXZhIiwgY2hlY2tXYXJuaW5ncywgY2hlY2tJbmZvcyk7CisgIH0KKworICBwcml2YXRlIHZvaWQgZG9UZXN0KGJvb2xlYW4gY2hlY2tXYXJuaW5ncywgYm9vbGVhbiBjaGVja1dlYWtXYXJuaW5ncywgYm9vbGVhbiBjaGVja0luZm9zLCBJbnNwZWN0aW9uUHJvZmlsZUVudHJ5Li4uIHRvb2xzKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBmb3IgKEluc3BlY3Rpb25Qcm9maWxlRW50cnkgdG9vbCA6IHRvb2xzKSB7IGVuYWJsZUluc3BlY3Rpb25Ub29sKHRvb2wpOyB9CisgICAgZG9UZXN0KEJBU0VfUEFUSCArICIvIiArIGdldFRlc3ROYW1lKGZhbHNlKSArICIuamF2YSIsIGNoZWNrV2FybmluZ3MsIGNoZWNrV2Vha1dhcm5pbmdzLCBjaGVja0luZm9zKTsKKyAgfQorCisgIEBPdmVycmlkZQorICBwcm90ZWN0ZWQgTG9jYWxJbnNwZWN0aW9uVG9vbFtdIGNvbmZpZ3VyZUxvY2FsSW5zcGVjdGlvblRvb2xzKCkgeworICAgIHJldHVybiBuZXcgTG9jYWxJbnNwZWN0aW9uVG9vbFtdeworICAgICAgbmV3IFVudXNlZFN5bWJvbExvY2FsSW5zcGVjdGlvbigpLAorICAgICAgbmV3IFVuY2hlY2tlZFdhcm5pbmdMb2NhbEluc3BlY3Rpb24oKSwKKyAgICAgIG5ldyBKYXZhY1F1aXJrc0luc3BlY3Rpb24oKSwKKyAgICAgIG5ldyBSZWR1bmRhbnRDYXN0SW5zcGVjdGlvbigpCisgICAgfTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RCb3hpbmdBbmRTdGF0aWNNZXRob2RzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KGZhbHNlLCBmYWxzZSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0TXVsdGlwbGVJbmhlcml0YW5jZSgpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdChmYWxzZSwgZmFsc2UpOworICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovY29kZUluc2lnaHQvZGFlbW9uL0Fubm90YXRpb25zSGlnaGxpZ2h0aW5nVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNpZ2h0L2RhZW1vbi9Bbm5vdGF0aW9uc0hpZ2hsaWdodGluZ1Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zN2VjYzk0Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNpZ2h0L2RhZW1vbi9Bbm5vdGF0aW9uc0hpZ2hsaWdodGluZ1Rlc3QuamF2YQpAQCAtMCwwICsxLDUzIEBACisvKgorICogQ29weXJpZ2h0IDIwMDAtMjAxMiBKZXRCcmFpbnMgcy5yLm8uCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworcGFja2FnZSBjb20uaW50ZWxsaWouY29kZUluc2lnaHQuZGFlbW9uOworCitpbXBvcnQgY29tLmludGVsbGlqLnBvbS5qYXZhLkxhbmd1YWdlTGV2ZWw7CitpbXBvcnQgb3JnLmpldGJyYWlucy5hbm5vdGF0aW9ucy5Ob25ObHM7CisKKy8qKgorICogQGF1dGhvciB2ZW4KKyAqLworcHVibGljIGNsYXNzIEFubm90YXRpb25zSGlnaGxpZ2h0aW5nVGVzdCBleHRlbmRzIExpZ2h0RGFlbW9uQW5hbHl6ZXJUZXN0Q2FzZSB7CisgIEBOb25ObHMKKyAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEJBU0VfUEFUSCA9ICIvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2Fubm90YXRpb25zIjsKKworICBwcml2YXRlIHZvaWQgZG9UZXN0KGJvb2xlYW4gY2hlY2tXYXJuaW5ncykgeworICAgIHNldExhbmd1YWdlTGV2ZWwoTGFuZ3VhZ2VMZXZlbC5KREtfMV83KTsKKyAgICBkb1Rlc3QoQkFTRV9QQVRIICsgIi8iICsgZ2V0VGVzdE5hbWUodHJ1ZSkgKyAiLmphdmEiLCBjaGVja1dhcm5pbmdzLCBmYWxzZSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0V3JvbmdQbGFjZSgpIHsgZG9UZXN0KGZhbHNlKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0Tm90VmFsdWVOYW1lT21pdHRlZCgpIHsgZG9UZXN0KGZhbHNlKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0Q2Fubm90RmluZE1ldGhvZCgpIHsgZG9UZXN0KGZhbHNlKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0SW5jb21wYXRpYmxlVHlwZTEoKSB7IGRvVGVzdChmYWxzZSk7IH0KKyAgcHVibGljIHZvaWQgdGVzdEluY29tcGF0aWJsZVR5cGUyKCkgeyBkb1Rlc3QoZmFsc2UpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RJbmNvbXBhdGlibGVUeXBlMygpIHsgZG9UZXN0KGZhbHNlKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0SW5jb21wYXRpYmxlVHlwZTQoKSB7IGRvVGVzdChmYWxzZSk7IH0KKyAgcHVibGljIHZvaWQgdGVzdEluY29tcGF0aWJsZVR5cGU1KCkgeyBkb1Rlc3QoZmFsc2UpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RNaXNzaW5nQXR0cmlidXRlKCkgeyBkb1Rlc3QoZmFsc2UpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3REdXBsaWNhdGVBbm5vdGF0aW9uKCkgeyBkb1Rlc3QoZmFsc2UpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3ROb25Db25zdGFudEluaXRpYWxpemVyKCkgeyBkb1Rlc3QoZmFsc2UpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RJbnZhbGlkVHlwZSgpIHsgZG9UZXN0KGZhbHNlKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0SW5hcHBsaWNhYmxlKCkgeyBkb1Rlc3QoZmFsc2UpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3REdXBsaWNhdGVBdHRyaWJ1dGUoKSB7IGRvVGVzdChmYWxzZSk7IH0KKyAgcHVibGljIHZvaWQgdGVzdER1cGxpY2F0ZVRhcmdldCgpIHsgZG9UZXN0KGZhbHNlKTsgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RJbnZhbGlkUGFja2FnZUFubm90YXRpb25UYXJnZXQoKSB7IGRvVGVzdChCQVNFX1BBVEggKyAiLyIgKyBnZXRUZXN0TmFtZSh0cnVlKSArICIvcGFja2FnZS1pbmZvLmphdmEiLCBmYWxzZSwgZmFsc2UpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RQYWNrYWdlQW5ub3RhdGlvbk5vdEluUGFja2FnZUluZm8oKSB7IGRvVGVzdChCQVNFX1BBVEggKyAiLyIgKyBnZXRUZXN0TmFtZSh0cnVlKSArICIvbm90UGFja2FnZUluZm8uamF2YSIsIGZhbHNlLCBmYWxzZSk7IH0KKworICAvL3B1YmxpYyB2b2lkIHRlc3RUeXBlQW5ub3RhdGlvbnMoKSB7IGRvVGVzdChmYWxzZSk7IH0gIC8vIHRvZG9bci5zaF0gbWFrZSBzZXBhcmF0ZSB0ZXN0IHdpdGggY29ycmVjdCBsYW5ndWFnZSBsZXZlbAorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNpZ2h0L2RhZW1vbi9EaWFtb25kU3VpdGUuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9jb2RlSW5zaWdodC9kYWVtb24vRGlhbW9uZFN1aXRlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmMwNzIzNQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9jb2RlSW5zaWdodC9kYWVtb24vRGlhbW9uZFN1aXRlLmphdmEKQEAgLTAsMCArMSw0MSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDAwLTIwMTEgSmV0QnJhaW5zIHMuci5vLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KK3BhY2thZ2UgY29tLmludGVsbGlqLmNvZGVJbnNpZ2h0LmRhZW1vbjsKKworaW1wb3J0IGNvbS5pbnRlbGxpai5jb2RlSW5zaWdodC5kYWVtb24ucXVpY2tGaXguQ2hhbmdlTmV3T3BlcmF0b3JUeXBlVGVzdDsKK2ltcG9ydCBjb20uaW50ZWxsaWouY29kZUluc2lnaHQuZGFlbW9uLnF1aWNrRml4LlNpbXBsaWZ5MkRpYW1vbmRJbnNwZWN0aW9uc1Rlc3Q7CitpbXBvcnQgY29tLmludGVsbGlqLnJlZmFjdG9yaW5nLio7CitpbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7CitpbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RTdWl0ZTsKKworLyoqCisgKiBVc2VyOiBhbm5hCisgKiBEYXRlOiAzLzkvMTEKKyAqLworcHVibGljIGNsYXNzIERpYW1vbmRTdWl0ZSB7CisgIHByaXZhdGUgRGlhbW9uZFN1aXRlKCkgeworICB9CisKKyAgcHVibGljIHN0YXRpYyBUZXN0IHN1aXRlKCkgeworICAgIGZpbmFsIFRlc3RTdWl0ZSB0ZXN0U3VpdGUgPSBuZXcgVGVzdFN1aXRlKCJEaWFtb25kIFN1aXRlIik7CisgICAgdGVzdFN1aXRlLmFkZFRlc3RTdWl0ZShMaWdodEFkdkhpZ2hsaWdodGluZ0pkazdUZXN0LmNsYXNzKTsKKyAgICB0ZXN0U3VpdGUuYWRkVGVzdFN1aXRlKFNpbXBsaWZ5MkRpYW1vbmRJbnNwZWN0aW9uc1Rlc3QuY2xhc3MpOworICAgIHRlc3RTdWl0ZS5hZGRUZXN0U3VpdGUoSW50cm9kdWNlUGFyYW1ldGVyVGVzdC5jbGFzcyk7CisgICAgdGVzdFN1aXRlLmFkZFRlc3RTdWl0ZShJbnRyb2R1Y2VWYXJpYWJsZVRlc3QuY2xhc3MpOworICAgIHRlc3RTdWl0ZS5hZGRUZXN0U3VpdGUoQ2hhbmdlTmV3T3BlcmF0b3JUeXBlVGVzdC5jbGFzcyk7CisgICAgcmV0dXJuIHRlc3RTdWl0ZTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNpZ2h0L2RhZW1vbi9HZW5lcmljc0hpZ2hsaWdodGluZ1Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9jb2RlSW5zaWdodC9kYWVtb24vR2VuZXJpY3NIaWdobGlnaHRpbmdUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjFiMGZjYgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9jb2RlSW5zaWdodC9kYWVtb24vR2VuZXJpY3NIaWdobGlnaHRpbmdUZXN0LmphdmEKQEAgLTAsMCArMSwyMTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwMC0yMDEzIEpldEJyYWlucyBzLnIuby4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCitwYWNrYWdlIGNvbS5pbnRlbGxpai5jb2RlSW5zaWdodC5kYWVtb247CisKK2ltcG9ydCBjb20uaW50ZWxsaWouY29kZUluc3BlY3Rpb24uTG9jYWxJbnNwZWN0aW9uVG9vbDsKK2ltcG9ydCBjb20uaW50ZWxsaWouY29kZUluc3BlY3Rpb24udW5jaGVja2VkV2FybmluZ3MuVW5jaGVja2VkV2FybmluZ0xvY2FsSW5zcGVjdGlvbjsKK2ltcG9ydCBjb20uaW50ZWxsaWouY29kZUluc3BlY3Rpb24udW51c2VkSW1wb3J0LlVudXNlZEltcG9ydExvY2FsSW5zcGVjdGlvbjsKK2ltcG9ydCBjb20uaW50ZWxsaWouY29kZUluc3BlY3Rpb24udW51c2VkU3ltYm9sLlVudXNlZFN5bWJvbExvY2FsSW5zcGVjdGlvbjsKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS5wcm9qZWN0Um9vdHMuSmF2YVNka1ZlcnNpb247CitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkucHJvamVjdFJvb3RzLkphdmFWZXJzaW9uU2VydmljZTsKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS5wcm9qZWN0Um9vdHMuSmF2YVZlcnNpb25TZXJ2aWNlSW1wbDsKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS5wcm9qZWN0Um9vdHMuU2RrOworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLnJvb3RzLkxhbmd1YWdlTGV2ZWxQcm9qZWN0RXh0ZW5zaW9uOworaW1wb3J0IGNvbS5pbnRlbGxpai5wb20uamF2YS5MYW5ndWFnZUxldmVsOworaW1wb3J0IGNvbS5pbnRlbGxpai5wc2kuUHNpQ2xhc3M7CitpbXBvcnQgY29tLmludGVsbGlqLnBzaS5zZWFyY2guR2xvYmFsU2VhcmNoU2NvcGU7CitpbXBvcnQgY29tLmludGVsbGlqLnRlc3RGcmFtZXdvcmsuSWRlYVRlc3RVdGlsOworaW1wb3J0IG9yZy5qZXRicmFpbnMuYW5ub3RhdGlvbnMuTm9uTmxzOworCitwdWJsaWMgY2xhc3MgR2VuZXJpY3NIaWdobGlnaHRpbmdUZXN0IGV4dGVuZHMgTGlnaHREYWVtb25BbmFseXplclRlc3RDYXNlIHsKKyAgQE5vbk5scyBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQkFTRV9QQVRIID0gIi9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvZ2VuZXJpY3NIaWdobGlnaHRpbmciOworCisgIEBPdmVycmlkZQorICBwcm90ZWN0ZWQgTG9jYWxJbnNwZWN0aW9uVG9vbFtdIGNvbmZpZ3VyZUxvY2FsSW5zcGVjdGlvblRvb2xzKCkgeworICAgIHJldHVybiBuZXcgTG9jYWxJbnNwZWN0aW9uVG9vbFtde25ldyBVbmNoZWNrZWRXYXJuaW5nTG9jYWxJbnNwZWN0aW9uKCksIG5ldyBVbnVzZWRTeW1ib2xMb2NhbEluc3BlY3Rpb24oKSwgbmV3IFVudXNlZEltcG9ydExvY2FsSW5zcGVjdGlvbigpfTsKKyAgfQorCisgIEBPdmVycmlkZQorICBwcm90ZWN0ZWQgU2RrIGdldFByb2plY3RKREsoKSB7CisgICAgcmV0dXJuIGdldFRlc3ROYW1lKGZhbHNlKS5jb250YWlucygiSmRrMTQiKSA/IElkZWFUZXN0VXRpbC5nZXRNb2NrSmRrMTQoKSA6IHN1cGVyLmdldFByb2plY3RKREsoKTsKKyAgfQorCisgIHByaXZhdGUgdm9pZCBkb1Rlc3QoTGFuZ3VhZ2VMZXZlbCBsYW5ndWFnZUxldmVsLCBKYXZhU2RrVmVyc2lvbiBzZGtWZXJzaW9uLCBib29sZWFuIGNoZWNrV2FybmluZ3MpIHsKKyAgICBMYW5ndWFnZUxldmVsUHJvamVjdEV4dGVuc2lvbi5nZXRJbnN0YW5jZShnZXRKYXZhRmFjYWRlKCkuZ2V0UHJvamVjdCgpKS5zZXRMYW5ndWFnZUxldmVsKGxhbmd1YWdlTGV2ZWwpOworICAgICgoSmF2YVZlcnNpb25TZXJ2aWNlSW1wbClKYXZhVmVyc2lvblNlcnZpY2UuZ2V0SW5zdGFuY2UoKSkuc2V0VGVzdFZlcnNpb24oc2RrVmVyc2lvbiwgbXlUZXN0Um9vdERpc3Bvc2FibGUpOworICAgIGRvVGVzdChCQVNFX1BBVEggKyAiLyIgKyBnZXRUZXN0TmFtZShmYWxzZSkgKyAiLmphdmEiLCBjaGVja1dhcm5pbmdzLCBmYWxzZSk7CisgIH0KKyAgcHJpdmF0ZSB2b2lkIGRvVGVzdDUoYm9vbGVhbiBjaGVja1dhcm5pbmdzKSB7IGRvVGVzdChMYW5ndWFnZUxldmVsLkpES18xXzUsIEphdmFTZGtWZXJzaW9uLkpES18xXzYsIGNoZWNrV2FybmluZ3MpOyB9CisgIHByaXZhdGUgdm9pZCBkb1Rlc3Q2KGJvb2xlYW4gY2hlY2tXYXJuaW5ncykgeyBkb1Rlc3QoTGFuZ3VhZ2VMZXZlbC5KREtfMV82LCBKYXZhU2RrVmVyc2lvbi5KREtfMV82LCBjaGVja1dhcm5pbmdzKTsgfQorICBwcml2YXRlIHZvaWQgZG9UZXN0N0luY29tcGF0aWJpbGl0eShib29sZWFuIGNoZWNrV2FybmluZ3MpIHsgZG9UZXN0KExhbmd1YWdlTGV2ZWwuSkRLXzFfNSwgSmF2YVNka1ZlcnNpb24uSkRLXzFfNywgY2hlY2tXYXJuaW5ncyk7IH0KKworICBwdWJsaWMgdm9pZCB0ZXN0UmVmZXJlbmNlVHlwZVBhcmFtcygpIHsgZG9UZXN0NShmYWxzZSk7IH0KKyAgcHVibGljIHZvaWQgdGVzdE92ZXJyaWRpbmdNZXRob2RzKCkgeyBkb1Rlc3Q1KGZhbHNlKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0VHlwZVBhcmFtZXRlckJvdW5kc0xpc3QoKSB7IGRvVGVzdDUoZmFsc2UpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RDbGFzc0luaGVyaXRhbmNlKCkgeyBkb1Rlc3Q1KGZhbHNlKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0VHlwZUluZmVyZW5jZSgpIHsgZG9UZXN0NShmYWxzZSk7IH0KKyAgcHVibGljIHZvaWQgdGVzdFJhdygpIHsgZG9UZXN0NSh0cnVlKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0RXhjZXB0aW9ucygpIHsgZG9UZXN0NShmYWxzZSk7IH0KKyAgcHVibGljIHZvaWQgdGVzdEV4cGxpY2l0TWV0aG9kUGFyYW1ldGVycygpIHsgZG9UZXN0NShmYWxzZSk7IH0KKyAgcHVibGljIHZvaWQgdGVzdEV4cGxpY2l0TWV0aG9kUGFyYW1ldGVyczEoKSB7IGRvVGVzdDUoZmFsc2UpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RJbmZlcmVuY2VXaXRoQm91bmRzKCkgeyBkb1Rlc3Q1KGZhbHNlKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0SW5mZXJlbmNlV2l0aFN1cGVyQm91bmRzKCkgeyBkb1Rlc3Q1KGZhbHNlKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0SW5mZXJlbmNlV2l0aFVwcGVyQm91bmRQcm9tb3Rpb24oKSB7IGRvVGVzdDdJbmNvbXBhdGliaWxpdHkoZmFsc2UpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RWYXJpYW5jZSgpIHsgZG9UZXN0NShmYWxzZSk7IH0KKyAgcHVibGljIHZvaWQgdGVzdEZvcmVhY2hUeXBlcygpIHsgZG9UZXN0NShmYWxzZSk7IH0KKyAgcHVibGljIHZvaWQgdGVzdFJhd092ZXJyaWRpbmdNZXRob2RzKCkgeyBkb1Rlc3Q1KGZhbHNlKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0QXV0b2JveGluZygpIHsgZG9UZXN0NShmYWxzZSk7IH0KKyAgcHVibGljIHZvaWQgdGVzdEF1dG9ib3hpbmdNZXRob2RzKCkgeyBkb1Rlc3Q1KGZhbHNlKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0QXV0b2JveGluZ0NvbnN0cnVjdG9ycygpIHsgZG9UZXN0NShmYWxzZSk7IH0KKyAgcHVibGljIHZvaWQgdGVzdEVudW1XaXRoQWJzdHJhY3RNZXRob2RzKCkgeyBkb1Rlc3Q1KGZhbHNlKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0RW51bSgpIHsgZG9UZXN0NShmYWxzZSk7IH0KKyAgcHVibGljIHZvaWQgdGVzdFNhbWVFcmFzdXJlKCkgeyBkb1Rlc3Q1KGZhbHNlKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0TWV0aG9kcygpIHsgZG9UZXN0NShmYWxzZSk7IH0KKyAgcHVibGljIHZvaWQgdGVzdEZpZWxkcygpIHsgZG9UZXN0NShmYWxzZSk7IH0KKyAgcHVibGljIHZvaWQgdGVzdFN0YXRpY0ltcG9ydHMoKSB7IGRvVGVzdDUodHJ1ZSk7IH0KKyAgcHVibGljIHZvaWQgdGVzdFVuY2hlY2tlZENhc3RzKCkgeyBkb1Rlc3Q1KHRydWUpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RVbmNoZWNrZWRPdmVycmlkaW5nKCkgeyBkb1Rlc3Q1KHRydWUpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RXaWxkY2FyZFR5cGVzKCkgeyBkb1Rlc3Q1KHRydWUpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RDb252ZXJ0aWJsZVR5cGVzKCkgeyBkb1Rlc3Q1KHRydWUpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RJbnRlcnNlY3Rpb25UeXBlcygpIHsgZG9UZXN0N0luY29tcGF0aWJpbGl0eSh0cnVlKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0VmFyYXJncygpIHsgZG9UZXN0NSh0cnVlKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0VHlwZUFyZ3NPblJhdygpIHsgZG9UZXN0NShmYWxzZSk7IH0KKyAgcHVibGljIHZvaWQgdGVzdENvbmRpdGlvbmFsRXhwcmVzc2lvbigpIHsgZG9UZXN0NShmYWxzZSk7IH0KKyAgcHVibGljIHZvaWQgdGVzdFVudXNlZCgpIHsgZG9UZXN0NSh0cnVlKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0SURFQURFVjczMzcoKSB7IGRvVGVzdDUodHJ1ZSk7IH0KKyAgcHVibGljIHZvaWQgdGVzdElERUFERVYxMDQ1OSgpIHsgZG9UZXN0NSh0cnVlKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0SURFQURFVjEyOTUxKCkgeyBkb1Rlc3Q1KHRydWUpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RJREVBREVWMTMwMTEoKSB7IGRvVGVzdDUodHJ1ZSk7IH0KKyAgcHVibGljIHZvaWQgdGVzdElERUFERVYxNDAwNigpIHsgZG9UZXN0NSh0cnVlKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0SURFQURFVjE0MTAzKCkgeyBkb1Rlc3Q1KHRydWUpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RJREVBREVWMTU1MzQoKSB7IGRvVGVzdDUodHJ1ZSk7IH0KKyAgcHVibGljIHZvaWQgdGVzdElERUFERVYyMzE1NygpIHsgZG9UZXN0NSh0cnVlKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0SURFQURFVjI0MTY2KCkgeyBkb1Rlc3Q1KHRydWUpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RJREVBREVWMjU3NzgoKSB7IGRvVGVzdDUodHJ1ZSk7IH0KKyAgcHVibGljIHZvaWQgdGVzdElERUFERVY1NzM0MygpIHsgZG9UZXN0NShmYWxzZSk7IH0KKyAgcHVibGljIHZvaWQgdGVzdFNPRSgpIHsgZG9UZXN0NSh0cnVlKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0R2VuZXJpY0V4dGVuZEV4Y2VwdGlvbigpIHsgZG9UZXN0NShmYWxzZSk7IH0KKyAgcHVibGljIHZvaWQgdGVzdFNhbWVFcmFzdXJlRGlmZmVyZW50UmV0dXJuVHlwZXMoKSB7IGRvVGVzdDdJbmNvbXBhdGliaWxpdHkoZmFsc2UpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RTYW1lRXJhc3VyZURpZmZlcmVudFJldHVyblR5cGVzSmRrMTQoKSB7IGRvVGVzdDUoZmFsc2UpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3REZWVwQ29uZmxpY3RpbmdSZXR1cm5UeXBlcygpIHsgZG9UZXN0NShmYWxzZSk7IH0KKyAgcHVibGljIHZvaWQgdGVzdEluaGVyaXRGcm9tVHlwZVBhcmFtZXRlcigpIHsgZG9UZXN0NShmYWxzZSk7IH0KKyAgcHVibGljIHZvaWQgdGVzdEFubm90YXRpb25zQXNQYXJ0T2ZNb2RpZmllckxpc3QoKSB7IGRvVGVzdDUoZmFsc2UpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RJbXBsZW1lbnRBbm5vdGF0aW9uKCkgeyBkb1Rlc3Q1KGZhbHNlKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0T3ZlcnJpZGVBdExhbmd1YWdlTGV2ZWw1KCkgeyBkb1Rlc3Q1KGZhbHNlKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0T3ZlcnJpZGVBdExhbmd1YWdlTGV2ZWw2KCkgeyBkb1Rlc3Q2KGZhbHNlKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0U3VwZXJNZXRob2RDYWxsV2l0aEVyYXN1cmUoKSB7IGRvVGVzdDUoZmFsc2UpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RXaWxkY2FyZENhc3RDb252ZXJzaW9uKCkgeyBkb1Rlc3Q1KGZhbHNlKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0VHlwZVdpdGhpbkl0c1dpbGRjYXJkQm91bmQoKSB7IGRvVGVzdDUoZmFsc2UpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RNZXRob2RTaWduYXR1cmVFcXVhbGl0eSgpIHsgZG9UZXN0NShmYWxzZSk7IH0KKyAgcHVibGljIHZvaWQgdGVzdElubmVyQ2xhc3NSZWYoKSB7IGRvVGVzdDUoZmFsc2UpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RQcml2YXRlSW5uZXJDbGFzc1JlZigpIHsgZG9UZXN0NShmYWxzZSk7IH0KKyAgcHVibGljIHZvaWQgdGVzdFdpZGVuaW5nQ2FzdFRvVHlwZVBhcmFtKCkgeyBkb1Rlc3Q1KGZhbHNlKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0Q2FwdHVyZWRXaWxkY2FyZEFzc2lnbm1lbnRzKCkgeyBkb1Rlc3Q1KGZhbHNlKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0VHlwZVBhcmFtZXRlckJvdW5kVmlzaWJpbGl0eSgpIHsgZG9UZXN0N0luY29tcGF0aWJpbGl0eShmYWxzZSk7IH0KKyAgcHVibGljIHZvaWQgdGVzdFR5cGVQYXJhbWV0ZXJCb3VuZFZpc2liaWxpdHlKZGsxNCgpIHsgZG9UZXN0NShmYWxzZSk7IH0KKyAgcHVibGljIHZvaWQgdGVzdFVuY2hlY2tlZFdhcm5pbmdzTGV2ZWw2KCkgeyBkb1Rlc3Q2KHRydWUpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RJREVBNzc5OTEoKSB7IGRvVGVzdDUoZmFsc2UpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RJREVBODAzODYoKSB7IGRvVGVzdDUoZmFsc2UpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RJREVBNjYzMTEoKSB7IGRvVGVzdDdJbmNvbXBhdGliaWxpdHkoZmFsc2UpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RJREVBNjc2NzIoKSB7IGRvVGVzdDdJbmNvbXBhdGliaWxpdHkoZmFsc2UpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RJREVBODg4OTUoKSB7IGRvVGVzdDdJbmNvbXBhdGliaWxpdHkoZmFsc2UpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RJREVBNjc2NjcoKSB7IGRvVGVzdDdJbmNvbXBhdGliaWxpdHkoZmFsc2UpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RJREVBNjYzMTFfMTYoKSB7IGRvVGVzdDUoZmFsc2UpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RJREVBNzYyODMoKSB7IGRvVGVzdDUoZmFsc2UpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RJREVBNzQ4OTkoKSB7IGRvVGVzdDUoZmFsc2UpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RJREVBNjMyOTEoKSB7IGRvVGVzdDUoZmFsc2UpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RJREVBNzI5MTIoKSB7IGRvVGVzdDUoZmFsc2UpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RJbGxlZ2FsR2VuZXJpY1R5cGVJbkluc3RhbmNlb2YoKSB7IGRvVGVzdDUoZmFsc2UpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RJREVBNTczMzkoKSB7IGRvVGVzdDUoZmFsc2UpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RJREVBNTczNDAoKSB7IGRvVGVzdDUoZmFsc2UpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RJREVBODk3NzEoKSB7IGRvVGVzdDUoZmFsc2UpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RJREVBODk4MDEoKSB7IGRvVGVzdDUoZmFsc2UpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RJREVBNjc2ODEoKSB7IGRvVGVzdDUoZmFsc2UpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RJREVBNjc1OTkoKSB7IGRvVGVzdDUoZmFsc2UpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RJREVBNTc2NjgoKSB7IGRvVGVzdDUoZmFsc2UpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RJREVBNTc2NjcoKSB7IGRvVGVzdDdJbmNvbXBhdGliaWxpdHkoZmFsc2UpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RJREVBNTc2NTAoKSB7IGRvVGVzdDdJbmNvbXBhdGliaWxpdHkoZmFsc2UpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RJREVBNTczNzgoKSB7IGRvVGVzdDUoZmFsc2UpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RJREVBNTc1NTcoKSB7IGRvVGVzdDUoZmFsc2UpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RJREVBNTc1NjMoKSB7IGRvVGVzdDUoZmFsc2UpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RJREVBNTcyNzUoKSB7IGRvVGVzdDUoZmFsc2UpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RJREVBNTc1MzMoKSB7IGRvVGVzdDUoZmFsc2UpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RJREVBNTc1MDkoKSB7IGRvVGVzdDUoZmFsc2UpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RJREVBNTc0MTAoKSB7IGRvVGVzdDUoZmFsc2UpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RJREVBNTc0MTEoKSB7IGRvVGVzdDUoZmFsc2UpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RJREVBNTc0ODQoKSB7IGRvVGVzdDUoZmFsc2UpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RJREVBNTc0ODUoKSB7IGRvVGVzdDUoZmFsc2UpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RJREVBNTc0ODYoKSB7IGRvVGVzdDUoZmFsc2UpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RJREVBNTc0OTIoKSB7IGRvVGVzdDUoZmFsc2UpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RJREVBNTc0OTMoKSB7IGRvVGVzdDUoZmFsc2UpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RJREVBNTc0OTUoKSB7IGRvVGVzdDUoZmFsc2UpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RJREVBNTc0OTQoKSB7IGRvVGVzdDUoZmFsc2UpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RJREVBNTc0OTYoKSB7IGRvVGVzdDUoZmFsc2UpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RJREVBNTcyNjQoKSB7IGRvVGVzdDUoZmFsc2UpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RJREVBNTczMTUoKSB7IGRvVGVzdDUoZmFsc2UpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RJREVBNTczNDYoKSB7IGRvVGVzdDUoZmFsc2UpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RJREVBNTcyODQoKSB7IGRvVGVzdDUoZmFsc2UpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RJREVBNTcyODYoKSB7IGRvVGVzdDUoZmFsc2UpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RJREVBNTczMDcoKSB7IGRvVGVzdDUodHJ1ZSk7IH0KKyAgcHVibGljIHZvaWQgdGVzdElERUE1NzMwOCgpIHsgZG9UZXN0NShmYWxzZSk7IH0KKyAgcHVibGljIHZvaWQgdGVzdElERUE1NzMxMCgpIHsgZG9UZXN0NShmYWxzZSk7IH0KKyAgcHVibGljIHZvaWQgdGVzdElERUE1NzMxMSgpIHsgZG9UZXN0NShmYWxzZSk7IH0KKyAgcHVibGljIHZvaWQgdGVzdElERUE1NzMwOSgpIHsgZG9UZXN0NShmYWxzZSk7IH0KKyAgcHVibGljIHZvaWQgdGVzdElERUE5MDgwMigpIHsgZG9UZXN0NShmYWxzZSk7IH0KKyAgcHVibGljIHZvaWQgdGVzdElERUE3MDM3MCgpIHsgZG9UZXN0NSh0cnVlKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0SW5hY2Nlc3NpYmxlVGhyb3VnaFdpbGRjYXJkKCkgeyBkb1Rlc3Q3SW5jb21wYXRpYmlsaXR5KGZhbHNlKTt9CisgIHB1YmxpYyB2b2lkIHRlc3RJbmNvbnZlcnRpYmxlVHlwZXMoKSB7IGRvVGVzdDUoZmFsc2UpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RJbmNvbXBhdGlibGVSZXR1cm5UeXBlKCkgeyBkb1Rlc3Q1KGZhbHNlKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0Q29udGludWVJbmZlcmVuY2VBZnRlckZpcnN0UmF3UmVzdWx0KCkgeyBkb1Rlc3Q1KGZhbHNlKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0RG9Ob3RBY2NlcHRMb3dlckJvdW5kSWZSYXcoKSB7IGRvVGVzdDUoZmFsc2UpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RTdGF0aWNPdmVycmlkZSgpIHsgZG9UZXN0NShmYWxzZSk7IH0KKyAgcHVibGljIHZvaWQgdGVzdFR5cGVBcmd1bWVudHNHaXZlbk9uUmF3VHlwZSgpIHsgZG9UZXN0NShmYWxzZSk7IH0KKyAgcHVibGljIHZvaWQgdGVzdFR5cGVBcmd1bWVudHNHaXZlbk9uQW5vbnltb3VzQ2xhc3NDcmVhdGlvbigpIHsgZG9UZXN0NShmYWxzZSk7IH0KKyAgLy9wdWJsaWMgdm9pZCB0ZXN0SURFQTk0MDExKCkgeyBkb1Rlc3Q1KGZhbHNlKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0RGlmZmVyZW50VHlwZVBhcmFtc0luT3ZlcmxvYWRlZE1ldGhvZHMoKSB7IGRvVGVzdDUodHJ1ZSk7IH0KKyAgcHVibGljIHZvaWQgdGVzdElERUE5MTYyNigpIHsgZG9UZXN0NSh0cnVlKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0SURFQTkyMDIyKCkgeyBkb1Rlc3Q1KGZhbHNlKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0UmF3T25QYXJhbWV0ZXJpemVkKCkgeyBkb1Rlc3Q1KGZhbHNlKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0RmFpbGVkSW5mZXJlbmNlV2l0aEJveGluZygpIHsgZG9UZXN0NShmYWxzZSk7IH0KKyAgcHVibGljIHZvaWQgdGVzdEZpeGVkRmFpbGVkSW5mZXJlbmNlV2l0aEJveGluZygpIHsgZG9UZXN0N0luY29tcGF0aWJpbGl0eShmYWxzZSk7IH0KKyAgcHVibGljIHZvaWQgdGVzdEluZmVyZW5jZVdpdGhCb3hpbmdDb3ZhcmlhbnQoKSB7IGRvVGVzdDdJbmNvbXBhdGliaWxpdHkoZmFsc2UpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RTdXBlcldpbGRjYXJkSXNOb3RXaXRoaW5JdHNCb3VuZCgpIHsgZG9UZXN0N0luY29tcGF0aWJpbGl0eShmYWxzZSk7IH0KKyAgcHVibGljIHZvaWQgdGVzdFNwZWNpZmljUmV0dXJuVHlwZSgpIHsgZG9UZXN0N0luY29tcGF0aWJpbGl0eShmYWxzZSk7IH0KKyAgcHVibGljIHZvaWQgdGVzdFBhcmFtZXRlcml6ZWRQYXJhbWV0ZXJCb3VuZCgpIHsgZG9UZXN0N0luY29tcGF0aWJpbGl0eShmYWxzZSk7IH0KKyAgcHVibGljIHZvaWQgdGVzdEluc3RhbmNlQ2xhc3NJblN0YXRpY0NvbnRleHRBY2Nlc3MoKSB7IGRvVGVzdDdJbmNvbXBhdGliaWxpdHkoZmFsc2UpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RGbGF0dGVuSW50ZXJzZWN0aW9uVHlwZSgpIHsgZG9UZXN0N0luY29tcGF0aWJpbGl0eShmYWxzZSk7IH0KKyAgcHVibGljIHZvaWQgdGVzdElERUE5NzI3NigpIHsgZG9UZXN0N0luY29tcGF0aWJpbGl0eShmYWxzZSk7IH0KKyAgcHVibGljIHZvaWQgdGVzdFdpbGRjYXJkc0JvdW5kc0ludGVyc2VjdGlvbigpIHsgZG9UZXN0N0luY29tcGF0aWJpbGl0eShmYWxzZSk7IH0KKyAgcHVibGljIHZvaWQgdGVzdE92ZXJyaWRlV2l0aE1vcmVTcGVjaWZpY1JldHVybigpIHsgZG9UZXN0N0luY29tcGF0aWJpbGl0eShmYWxzZSk7IH0KKyAgcHVibGljIHZvaWQgdGVzdElERUE5Nzg4OCgpIHsgZG9UZXN0N0luY29tcGF0aWJpbGl0eShmYWxzZSk7IH0KKyAgcHVibGljIHZvaWQgdGVzdE1ldGhvZENhbGxQYXJhbXNPblJhd1R5cGUoKSB7IGRvVGVzdDUoZmFsc2UpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RJREVBOTg0MjEoKSB7IGRvVGVzdDUoZmFsc2UpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RFcmFzdXJlVHlwZVBhcmFtZXRlckJvdW5kKCkgeyBkb1Rlc3Q1KGZhbHNlKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0VGhpc0FzQWNjZXNzT2JqZWN0KCkgeyBkb1Rlc3Q1KGZhbHNlKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0SURFQTY3ODYxKCkgeyBkb1Rlc3Q3SW5jb21wYXRpYmlsaXR5KGZhbHNlKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0SURFQTY3NTk3KCkgeyBkb1Rlc3Q1KGZhbHNlKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0SURFQTU3NTM5KCkgeyBkb1Rlc3Q1KGZhbHNlKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0SURFQTY3NTcwKCkgeyBkb1Rlc3Q1KGZhbHNlKTsgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RKYXZhVXRpbENvbGxlY3Rpb25zX05vVmVyaWZ5KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgUHNpQ2xhc3MgY29sbGVjdGlvbnNDbGFzcyA9IGdldEphdmFGYWNhZGUoKS5maW5kQ2xhc3MoImphdmEudXRpbC5Db2xsZWN0aW9ucyIsIEdsb2JhbFNlYXJjaFNjb3BlLm1vZHVsZVdpdGhMaWJyYXJpZXNTY29wZShnZXRNb2R1bGUoKSkpOworICAgIGFzc2VydE5vdE51bGwoY29sbGVjdGlvbnNDbGFzcyk7CisgICAgY29sbGVjdGlvbnNDbGFzcyA9IChQc2lDbGFzcyljb2xsZWN0aW9uc0NsYXNzLmdldE5hdmlnYXRpb25FbGVtZW50KCk7CisgICAgZmluYWwgU3RyaW5nIHRleHQgPSBjb2xsZWN0aW9uc0NsYXNzLmdldENvbnRhaW5pbmdGaWxlKCkuZ2V0VGV4dCgpOworICAgIGNvbmZpZ3VyZUZyb21GaWxlVGV4dCgiQ29sbGVjdGlvbnMuamF2YSIsIHRleHQucmVwbGFjZUFsbCgiXHIiLCAiXG4iKSk7CisgICAgZG9UZXN0Q29uZmlndXJlZEZpbGUoZmFsc2UsIGZhbHNlLCBudWxsKTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNpZ2h0L2RhZW1vbi9IaWdobGlnaHRTZXZlcml0eVRlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9jb2RlSW5zaWdodC9kYWVtb24vSGlnaGxpZ2h0U2V2ZXJpdHlUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODk4ODg5YgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9jb2RlSW5zaWdodC9kYWVtb24vSGlnaGxpZ2h0U2V2ZXJpdHlUZXN0LmphdmEKQEAgLTAsMCArMSwzOCBAQAorLyoKKyAqIENvcHlyaWdodCAyMDAwLTIwMTEgSmV0QnJhaW5zIHMuci5vLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KK3BhY2thZ2UgY29tLmludGVsbGlqLmNvZGVJbnNpZ2h0LmRhZW1vbjsKKworaW1wb3J0IGNvbS5pbnRlbGxpai5jb2RlSGlnaGxpZ2h0aW5nLkhpZ2hsaWdodERpc3BsYXlMZXZlbDsKK2ltcG9ydCBjb20uaW50ZWxsaWouY29kZUluc3BlY3Rpb24uZXguTG9jYWxJbnNwZWN0aW9uVG9vbFdyYXBwZXI7CitpbXBvcnQgY29tLmludGVsbGlqLmNvZGVJbnNwZWN0aW9uLnVudXNlZFN5bWJvbC5VbnVzZWRTeW1ib2xMb2NhbEluc3BlY3Rpb247CitpbXBvcnQgb3JnLmpldGJyYWlucy5hbm5vdGF0aW9ucy5Ob25ObHM7CitpbXBvcnQgb3JnLmpldGJyYWlucy5hbm5vdGF0aW9ucy5Ob3ROdWxsOworCitwdWJsaWMgY2xhc3MgSGlnaGxpZ2h0U2V2ZXJpdHlUZXN0IGV4dGVuZHMgTGlnaHREYWVtb25BbmFseXplclRlc3RDYXNlIHsKKyAgQE5vbk5scyBzdGF0aWMgZmluYWwgU3RyaW5nIEJBU0VfUEFUSCA9ICIvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2hpZ2hsaWdodFNldmVyaXR5IjsKKworCisgIHB1YmxpYyB2b2lkIHRlc3RFcnJvckxpa2VVbnVzZWRTeW1ib2woKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBlbmFibGVJbnNwZWN0aW9uVG9vbChuZXcgTG9jYWxJbnNwZWN0aW9uVG9vbFdyYXBwZXIobmV3IFVudXNlZFN5bWJvbExvY2FsSW5zcGVjdGlvbigpKSB7CisgICAgICBATm90TnVsbAorICAgICAgQE92ZXJyaWRlCisgICAgICBwdWJsaWMgSGlnaGxpZ2h0RGlzcGxheUxldmVsIGdldERlZmF1bHRMZXZlbCgpIHsKKyAgICAgICAgcmV0dXJuIEhpZ2hsaWdodERpc3BsYXlMZXZlbC5FUlJPUjsKKyAgICAgIH0KKyAgICB9KTsKKyAgICBkb1Rlc3QoQkFTRV9QQVRIICsgIi8iICsgZ2V0VGVzdE5hbWUoZmFsc2UpICsgIi5qYXZhIiwgdHJ1ZSwgZmFsc2UpOworICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovY29kZUluc2lnaHQvZGFlbW9uL0ltcGxlbWVudGF0aW9uc1ZpZXdUZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovY29kZUluc2lnaHQvZGFlbW9uL0ltcGxlbWVudGF0aW9uc1ZpZXdUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjk2MzcxMgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9jb2RlSW5zaWdodC9kYWVtb24vSW1wbGVtZW50YXRpb25zVmlld1Rlc3QuamF2YQpAQCAtMCwwICsxLDE3NyBAQAorcGFja2FnZSBjb20uaW50ZWxsaWouY29kZUluc2lnaHQuZGFlbW9uOworCitpbXBvcnQgY29tLmludGVsbGlqLmNvZGVJbnNpZ2h0LlRhcmdldEVsZW1lbnRVdGlsQmFzZTsKK2ltcG9ydCBjb20uaW50ZWxsaWouY29kZUluc2lnaHQuaGludC5JbXBsZW1lbnRhdGlvblZpZXdDb21wb25lbnQ7CitpbXBvcnQgY29tLmludGVsbGlqLnBzaS5Qc2lDbGFzczsKK2ltcG9ydCBjb20uaW50ZWxsaWoucHNpLlBzaUVsZW1lbnQ7CitpbXBvcnQgY29tLmludGVsbGlqLnBzaS5Qc2lNZXRob2Q7CitpbXBvcnQgY29tLmludGVsbGlqLnBzaS5zZWFyY2guc2VhcmNoZXMuQ2xhc3NJbmhlcml0b3JzU2VhcmNoOworaW1wb3J0IGNvbS5pbnRlbGxpai5wc2kuc2VhcmNoLnNlYXJjaGVzLk92ZXJyaWRpbmdNZXRob2RzU2VhcmNoOworaW1wb3J0IGNvbS5pbnRlbGxpai50ZXN0RnJhbWV3b3JrLmZpeHR1cmVzLkxpZ2h0Q29kZUluc2lnaHRGaXh0dXJlVGVzdENhc2U7CitpbXBvcnQgb3JnLmp1bml0LkFzc2VydDsKKworaW1wb3J0IGphdmEudXRpbC4qOworCisvKioKKyAqIFVzZXI6IGFubmEKKyAqLworcHVibGljIGNsYXNzIEltcGxlbWVudGF0aW9uc1ZpZXdUZXN0IGV4dGVuZHMgTGlnaHRDb2RlSW5zaWdodEZpeHR1cmVUZXN0Q2FzZSB7CisgIHB1YmxpYyB2b2lkIHRlc3RGcm9tQ29tcGxldGlvbigpIHsKKyAgICBteUZpeHR1cmUuY29uZmlndXJlQnlUZXh0KCJhLmphdmEiLCAicHVibGljIGNsYXNzIEZvbyB7XG4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgIHByaXZhdGUgZmluYWwgU3RyaW5nIHRleHQ7XG4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiXG4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgIHB1YmxpYyBGb28oU3RyaW5nIHRleHQpIHtcbiIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIvLyAgICAgICAgdGhpcy50ZXh0ID0gdGV4dDtcbiIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgICAgfVxuIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlxuIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgICBwdWJsaWMgRm9vKGludCBpKSB7XG4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgIH1cbiIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJcbiIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykge1xuIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgICAgICAgZmluYWwgRm9vIGZvbyA9IG5ldyBGb28oXCJcIik7XG4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgICAgICBmb28udG88Y2FyZXQ+XG4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgIH1cbiIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJcbiIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgICAgQE92ZXJyaWRlXG4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7XG4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgICAgICByZXR1cm4gXCJ0ZXh0XCI7XG4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgIH1cbiIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgICAgcHVibGljIHZvaWQgdG90dHR0KCl7fSIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ9Iik7CisgICAgbXlGaXh0dXJlLmNvbXBsZXRlQmFzaWMoKTsKKworICAgIFBzaUVsZW1lbnQgZWxlbWVudCA9CisgICAgICBUYXJnZXRFbGVtZW50VXRpbEJhc2UuZmluZFRhcmdldEVsZW1lbnQobXlGaXh0dXJlLmdldEVkaXRvcigpLCBUYXJnZXRFbGVtZW50VXRpbEJhc2UuZ2V0SW5zdGFuY2UoKS5nZXRBbGxBY2NlcHRlZCgpKTsKKworICAgIGFzc2VydCBlbGVtZW50ICE9IG51bGw7CisgICAgZmluYWwgU3RyaW5nIG5ld1RleHQgPSBJbXBsZW1lbnRhdGlvblZpZXdDb21wb25lbnQuZ2V0TmV3VGV4dChlbGVtZW50KTsKKworICAgIGFzc2VydEVxdWFscygiICAgIEBPdmVycmlkZVxuIiArCisgICAgICAgICAgICAgICAgICIgICAgcHVibGljIFN0cmluZyB0b1N0cmluZygpIHtcbiIgKworICAgICAgICAgICAgICAgICAiICAgICAgICByZXR1cm4gXCJ0ZXh0XCI7XG4iICsKKyAgICAgICAgICAgICAgICAgIiAgICB9IiwgbmV3VGV4dCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0RnJvbUVkaXRvcigpIHsKKyAgICBteUZpeHR1cmUuY29uZmlndXJlQnlUZXh0KCJhLmphdmEiLCAicHVibGljIGNsYXNzIEZvbyB7XG4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgIHByaXZhdGUgZmluYWwgU3RyaW5nIHRleHQ7XG4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiXG4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgIHB1YmxpYyBGb28oU3RyaW5nIHRleHQpIHtcbiIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIvLyAgICAgICAgdGhpcy50ZXh0ID0gdGV4dDtcbiIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgICAgfVxuIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlxuIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgICBwdWJsaWMgRm9vKGludCBpKSB7XG4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgIH1cbiIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJcbiIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgICAgQE92ZXJyaWRlXG4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgIHB1YmxpYyBTdHJpbmcgdG88Y2FyZXQ+U3RyaW5nKCkge1xuIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgICAgICAgcmV0dXJuIFwidGV4dFwiO1xuIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgICB9XG4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAifSIpOworICAgIFBzaUVsZW1lbnQgZWxlbWVudCA9CisgICAgICBUYXJnZXRFbGVtZW50VXRpbEJhc2UuZmluZFRhcmdldEVsZW1lbnQobXlGaXh0dXJlLmdldEVkaXRvcigpLCBUYXJnZXRFbGVtZW50VXRpbEJhc2UuZ2V0SW5zdGFuY2UoKS5nZXRBbGxBY2NlcHRlZCgpKTsKKworICAgIGFzc2VydCBlbGVtZW50ICE9IG51bGw7CisgICAgZmluYWwgU3RyaW5nIG5ld1RleHQgPSBJbXBsZW1lbnRhdGlvblZpZXdDb21wb25lbnQuZ2V0TmV3VGV4dChlbGVtZW50KTsKKworICAgIGFzc2VydEVxdWFscygiICAgIEBPdmVycmlkZVxuIiArCisgICAgICAgICAgICAgICAgICIgICAgcHVibGljIFN0cmluZyB0b1N0cmluZygpIHtcbiIgKworICAgICAgICAgICAgICAgICAiICAgICAgICByZXR1cm4gXCJ0ZXh0XCI7XG4iICsKKyAgICAgICAgICAgICAgICAgIiAgICB9IiwgbmV3VGV4dCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0SW5uZXJDbGFzc2VzKCkgeworICAgIG15Rml4dHVyZS5jb25maWd1cmVCeVRleHQoImEuamF2YSIsICJhYnN0cmFjdCBjbGFzcyBBRjxjYXJldD5vb3tcbiIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgICAgYWJzdHJhY3QgYm9vbGVhbiBhYWEoKTtcbiIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgICAgc3RhdGljIGNsYXNzIEFGb28xIGV4dGVuZHMgQUZvbyB7XG4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgICAgICBAT3ZlcnJpZGVcbiIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgICAgICAgIGJvb2xlYW4gYWFhKCkge1xuIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgICAgICAgIH1cbiIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgICAgfVxuIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgICBzdGF0aWMgY2xhc3MgQUZvbzMgZXh0ZW5kcyBBRm9vIHtcbiIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgICAgICAgIEBPdmVycmlkZVxuIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgICAgICAgYm9vbGVhbiBhYWEoKSB7XG4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgICAgICAgfVxuIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgICB9XG4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgIHN0YXRpYyBjbGFzcyBBRm9vMiBleHRlbmRzIEFGb28ge1xuIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgICAgICAgQE92ZXJyaWRlXG4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgICAgICBib29sZWFuIGFhYSgpIHtcbiIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgICAgICB9XG4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgIH1cbiIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgICAgXG4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAifSIpOworICAgIFBzaUNsYXNzIHBzaUNsYXNzID0KKyAgICAgIChQc2lDbGFzcylUYXJnZXRFbGVtZW50VXRpbEJhc2UuZmluZFRhcmdldEVsZW1lbnQobXlGaXh0dXJlLmdldEVkaXRvcigpLCBUYXJnZXRFbGVtZW50VXRpbEJhc2UuZ2V0SW5zdGFuY2UoKS5nZXRBbGxBY2NlcHRlZCgpKTsKKworICAgIGFzc2VydCBwc2lDbGFzcyAhPSBudWxsOworICAgIGZpbmFsIENvbGxlY3Rpb248UHNpQ2xhc3M+IGNsYXNzZXMgPSBDbGFzc0luaGVyaXRvcnNTZWFyY2guc2VhcmNoKHBzaUNsYXNzKS5maW5kQWxsKCk7CisgICAgTGlzdDxQc2lDbGFzcz4gYWxsID0gbmV3IEFycmF5TGlzdDxQc2lDbGFzcz4oKTsKKyAgICBhbGwuYWRkKHBzaUNsYXNzKTsKKyAgICBhbGwuYWRkQWxsKGNsYXNzZXMpOworICAgIGZpbmFsIEltcGxlbWVudGF0aW9uVmlld0NvbXBvbmVudCBjb21wb25lbnQgPQorICAgICAgbmV3IEltcGxlbWVudGF0aW9uVmlld0NvbXBvbmVudChhbGwudG9BcnJheShuZXcgUHNpRWxlbWVudFthbGwuc2l6ZSgpXSksIDApOworICAgIHRyeSB7CisgICAgICBmaW5hbCBTdHJpbmdbXSB2aXNpYmxlRmlsZXMgPSBjb21wb25lbnQuZ2V0VmlzaWJsZUZpbGVzKCk7CisgICAgICBBc3NlcnQuYXNzZXJ0QXJyYXlFcXVhbHMoQXJyYXlzLnRvU3RyaW5nKHZpc2libGVGaWxlcyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IFN0cmluZ1tdeyJhLmphdmEgKEFGb28pIiwgImEuamF2YSAoQUZvbzEgaW4gQUZvbykiLCAiYS5qYXZhIChBRm9vMyBpbiBBRm9vKSIsICJhLmphdmEgKEFGb28yIGluIEFGb28pIn0sIHZpc2libGVGaWxlcyk7CisgICAgfQorICAgIGZpbmFsbHkgeworICAgICAgY29tcG9uZW50LnJlbW92ZU5vdGlmeSgpOworICAgIH0KKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RNZXRob2RzSW5Jbm5lckNsYXNzZXMoKSB7CisgICAgICBteUZpeHR1cmUuY29uZmlndXJlQnlUZXh0KCJhLmphdmEiLCAiYWJzdHJhY3QgY2xhc3MgQUZvb3tcbiIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgICBhYnN0cmFjdCBib29sZWFuIGE8Y2FyZXQ+YWEoKTtcbiIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgICBzdGF0aWMgY2xhc3MgQUZvbzEgZXh0ZW5kcyBBRm9vIHtcbiIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgICAgICAgQE92ZXJyaWRlXG4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgICAgICAgIGJvb2xlYW4gYWFhKCkge1xuIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgICAgICB9XG4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgICAgfVxuIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgIHN0YXRpYyBjbGFzcyBBRm9vMyBleHRlbmRzIEFGb28ge1xuIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgICAgICBAT3ZlcnJpZGVcbiIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgICAgICAgYm9vbGVhbiBhYWEoKSB7XG4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgICAgICAgIH1cbiIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgICB9XG4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgICAgc3RhdGljIGNsYXNzIEFGb28yIGV4dGVuZHMgQUZvbyB7XG4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgICAgICAgIEBPdmVycmlkZVxuIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgICAgICBib29sZWFuIGFhYSgpIHtcbiIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgICAgICAgfVxuIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgIH1cbiIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgICBcbiIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIn0iKTsKKyAgICAgIFBzaU1ldGhvZCBwc2lNZXRob2QgPQorICAgICAgICAoUHNpTWV0aG9kKVRhcmdldEVsZW1lbnRVdGlsQmFzZS5maW5kVGFyZ2V0RWxlbWVudChteUZpeHR1cmUuZ2V0RWRpdG9yKCksIFRhcmdldEVsZW1lbnRVdGlsQmFzZS5nZXRJbnN0YW5jZSgpLmdldEFsbEFjY2VwdGVkKCkpOworCisgICAgYXNzZXJ0IHBzaU1ldGhvZCAhPSBudWxsOworICAgIGZpbmFsIENvbGxlY3Rpb248UHNpTWV0aG9kPiBtZXRob2RzID0gT3ZlcnJpZGluZ01ldGhvZHNTZWFyY2guc2VhcmNoKHBzaU1ldGhvZCkuZmluZEFsbCgpOworICAgIExpc3Q8UHNpTWV0aG9kPiBhbGwgPSBuZXcgQXJyYXlMaXN0PFBzaU1ldGhvZD4oKTsKKyAgICBhbGwuYWRkKHBzaU1ldGhvZCk7CisgICAgYWxsLmFkZEFsbChtZXRob2RzKTsKKworICAgIC8vbWFrZSBzdXJlIHRoZXkgYXJlIGluIHByZWRlZmluZWQgb3JkZXIKKyAgICBDb2xsZWN0aW9ucy5zb3J0KGFsbCwgbmV3IENvbXBhcmF0b3I8UHNpTWV0aG9kPigpIHsKKyAgICAgIEBPdmVycmlkZQorICAgICAgcHVibGljIGludCBjb21wYXJlKFBzaU1ldGhvZCBvMSwgUHNpTWV0aG9kIG8yKSB7CisgICAgICAgIHJldHVybiBvMS5nZXRDb250YWluaW5nQ2xhc3MoKS5nZXRRdWFsaWZpZWROYW1lKCkKKyAgICAgICAgICAuY29tcGFyZVRvKG8yLmdldENvbnRhaW5pbmdDbGFzcygpLmdldFF1YWxpZmllZE5hbWUoKSk7CisgICAgICB9CisgICAgfSk7CisgICAgZmluYWwgSW1wbGVtZW50YXRpb25WaWV3Q29tcG9uZW50IGNvbXBvbmVudCA9CisgICAgICBuZXcgSW1wbGVtZW50YXRpb25WaWV3Q29tcG9uZW50KGFsbC50b0FycmF5KG5ldyBQc2lFbGVtZW50W2FsbC5zaXplKCldKSwgMCk7CisgICAgdHJ5IHsKKyAgICAgIGZpbmFsIFN0cmluZ1tdIHZpc2libGVGaWxlcyA9IGNvbXBvbmVudC5nZXRWaXNpYmxlRmlsZXMoKTsKKyAgICAgIEFzc2VydC5hc3NlcnRBcnJheUVxdWFscyhBcnJheXMudG9TdHJpbmcodmlzaWJsZUZpbGVzKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgU3RyaW5nW117ImEuamF2YSAoQUZvbykiLCAiYS5qYXZhIChBRm9vMSBpbiBBRm9vKSIsICJhLmphdmEgKEFGb28yIGluIEFGb28pIiwgImEuamF2YSAoQUZvbzMgaW4gQUZvbykifSwgdmlzaWJsZUZpbGVzKTsKKyAgICB9CisgICAgZmluYWxseSB7CisgICAgICBjb21wb25lbnQucmVtb3ZlTm90aWZ5KCk7CisgICAgfQorICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovY29kZUluc2lnaHQvZGFlbW9uL0ltcG9ydEhlbHBlclRlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9jb2RlSW5zaWdodC9kYWVtb24vSW1wb3J0SGVscGVyVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE2NjEzNGYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovY29kZUluc2lnaHQvZGFlbW9uL0ltcG9ydEhlbHBlclRlc3QuamF2YQpAQCAtMCwwICsxLDQ1MiBAQAorcGFja2FnZSBjb20uaW50ZWxsaWouY29kZUluc2lnaHQuZGFlbW9uOworCitpbXBvcnQgY29tLmludGVsbGlqLmNvZGVJbnNpZ2h0LkNvZGVJbnNpZ2h0U2V0dGluZ3M7CitpbXBvcnQgY29tLmludGVsbGlqLmNvZGVJbnNpZ2h0LmRhZW1vbi5pbXBsLkRhZW1vbkNvZGVBbmFseXplckltcGw7CitpbXBvcnQgY29tLmludGVsbGlqLmNvZGVJbnNpZ2h0LmRhZW1vbi5pbXBsLkhpZ2hsaWdodEluZm87CitpbXBvcnQgY29tLmludGVsbGlqLmNvZGVJbnNpZ2h0LmRhZW1vbi5pbXBsLnF1aWNrZml4LkltcG9ydENsYXNzRml4OworaW1wb3J0IGNvbS5pbnRlbGxpai5jb2RlSW5zaWdodC5kYWVtb24uaW1wbC5xdWlja2ZpeC5JbXBvcnRDbGFzc0ZpeEJhc2U7CitpbXBvcnQgY29tLmludGVsbGlqLmNvZGVJbnNpZ2h0LmdlbmVyYXRpb24uYWN0aW9ucy5Db21tZW50QnlCbG9ja0NvbW1lbnRBY3Rpb247CitpbXBvcnQgY29tLmludGVsbGlqLmNvZGVJbnNwZWN0aW9uLkxvY2FsSW5zcGVjdGlvblRvb2w7CitpbXBvcnQgY29tLmludGVsbGlqLmNvZGVJbnNwZWN0aW9uLnVudXNlZEltcG9ydC5VbnVzZWRJbXBvcnRMb2NhbEluc3BlY3Rpb247CitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkuYXBwbGljYXRpb24uQXBwbGljYXRpb25NYW5hZ2VyOworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLmNvbW1hbmQuQ29tbWFuZFByb2Nlc3NvcjsKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS5jb21tYW5kLldyaXRlQ29tbWFuZEFjdGlvbjsKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS5jb21tYW5kLmltcGwuVW5kb01hbmFnZXJJbXBsOworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLmNvbW1hbmQudW5kby5VbmRvTWFuYWdlcjsKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS5maWxlRWRpdG9yLmltcGwuTG9hZFRleHRVdGlsOworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLmZpbGVUeXBlcy5TdGRGaWxlVHlwZXM7CitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkudXRpbC50ZXh0LlN0cmluZ1V0aWw7CitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkudmZzLkxvY2FsRmlsZVN5c3RlbTsKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS52ZnMuVmlydHVhbEZpbGU7CitpbXBvcnQgY29tLmludGVsbGlqLnBzaS4qOworaW1wb3J0IGNvbS5pbnRlbGxpai5wc2kuY29kZVN0eWxlLio7CitpbXBvcnQgY29tLmludGVsbGlqLnBzaS5pbXBsLnNvdXJjZS5jb2RlU3R5bGUuSW1wb3J0SGVscGVyOworaW1wb3J0IGNvbS5pbnRlbGxpai5wc2kuc2VhcmNoLkdsb2JhbFNlYXJjaFNjb3BlOworaW1wb3J0IGNvbS5pbnRlbGxpai51dGlsLnVpLlVJVXRpbDsKK2ltcG9ydCBvcmcuamV0YnJhaW5zLmFubm90YXRpb25zLk5vbk5sczsKKworaW1wb3J0IGphdmEuaW8uRmlsZTsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworQERhZW1vbkFuYWx5emVyVGVzdENhc2UuQ2FuQ2hhbmdlRG9jdW1lbnREdXJpbmdIaWdobGlnaHRpbmcKK3B1YmxpYyBjbGFzcyBJbXBvcnRIZWxwZXJUZXN0IGV4dGVuZHMgRGFlbW9uQW5hbHl6ZXJUZXN0Q2FzZSB7CisgIEBPdmVycmlkZQorICBwcm90ZWN0ZWQgTG9jYWxJbnNwZWN0aW9uVG9vbFtdIGNvbmZpZ3VyZUxvY2FsSW5zcGVjdGlvblRvb2xzKCkgeworICAgIHJldHVybiBuZXcgTG9jYWxJbnNwZWN0aW9uVG9vbFtde25ldyBVbnVzZWRJbXBvcnRMb2NhbEluc3BlY3Rpb24oKX07CisgIH0KKworICBAT3ZlcnJpZGUKKyAgcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBzdXBlci5zZXRVcCgpOworICAgIENvZGVTdHlsZVNldHRpbmdzIHNldHRpbmdzID0gQ29kZVN0eWxlU2V0dGluZ3NNYW5hZ2VyLmdldFNldHRpbmdzKGdldFByb2plY3QoKSkuY2xvbmUoKTsKKyAgICBzZXR0aW5ncy5DTEFTU19DT1VOVF9UT19VU0VfSU1QT1JUX09OX0RFTUFORCA9IDEwMDsKKyAgICBDb2RlU3R5bGVTZXR0aW5nc01hbmFnZXIuZ2V0SW5zdGFuY2UoZ2V0UHJvamVjdCgpKS5zZXRUZW1wb3JhcnlTZXR0aW5ncyhzZXR0aW5ncyk7CisgICAgRGFlbW9uQ29kZUFuYWx5emVyLmdldEluc3RhbmNlKGdldFByb2plY3QoKSkuc2V0VXBkYXRlQnlUaW1lckVuYWJsZWQoZmFsc2UpOworICB9CisKKyAgQE92ZXJyaWRlCisgIHByb3RlY3RlZCB2b2lkIHRlYXJEb3duKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgQ29kZVN0eWxlU2V0dGluZ3NNYW5hZ2VyLmdldEluc3RhbmNlKGdldFByb2plY3QoKSkuZHJvcFRlbXBvcmFyeVNldHRpbmdzKCk7CisgICAgc3VwZXIudGVhckRvd24oKTsKKyAgfQorCisgIEBXcmFwSW5Db21tYW5kCisgIHB1YmxpYyB2b2lkIHRlc3RJbXBvcnRzSW5zZXJ0ZWRBbHBoYWJldGljYWxseSgpIHRocm93cyBUaHJvd2FibGUgeworICAgIEBOb25ObHMgU3RyaW5nIHRleHQgPSAiY2xhc3MgSSB7fSI7CisgICAgZmluYWwgUHNpSmF2YUZpbGUgZmlsZSA9IChQc2lKYXZhRmlsZSljb25maWd1cmVCeVRleHQoU3RkRmlsZVR5cGVzLkpBVkEsIHRleHQpOworICAgIGFzc2VydEVtcHR5KGhpZ2hsaWdodEVycm9ycygpKTsKKyAgICBDb21tYW5kUHJvY2Vzc29yLmdldEluc3RhbmNlKCkuZXhlY3V0ZUNvbW1hbmQoCisgICAgICBnZXRQcm9qZWN0KCksIG5ldyBSdW5uYWJsZSgpIHsKKyAgICAgIEBPdmVycmlkZQorICAgICAgcHVibGljIHZvaWQgcnVuKCkgeworICAgICAgICBBcHBsaWNhdGlvbk1hbmFnZXIuZ2V0QXBwbGljYXRpb24oKS5ydW5Xcml0ZUFjdGlvbihuZXcgUnVubmFibGUoKSB7CisgICAgICAgICAgQE92ZXJyaWRlCisgICAgICAgICAgcHVibGljIHZvaWQgcnVuKCkgeworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgY2hlY2tBZGRJbXBvcnQoZmlsZSwgQ29tbW9uQ2xhc3NOYW1lcy5KQVZBX1VUSUxfTElTVCwgQ29tbW9uQ2xhc3NOYW1lcy5KQVZBX1VUSUxfTElTVCk7CisgICAgICAgICAgICAgIGNoZWNrQWRkSW1wb3J0KGZpbGUsICJqYXZhLnV0aWwuQXJyYXlMaXN0IiwgImphdmEudXRpbC5BcnJheUxpc3QiLCBDb21tb25DbGFzc05hbWVzLkpBVkFfVVRJTF9MSVNUKTsKKyAgICAgICAgICAgICAgY2hlY2tBZGRJbXBvcnQoZmlsZSwgImphdmEudXRpbC5IYXNoTWFwIiwgImphdmEudXRpbC5BcnJheUxpc3QiLCJqYXZhLnV0aWwuSGFzaE1hcCIsIENvbW1vbkNsYXNzTmFtZXMuSkFWQV9VVElMX0xJU1QpOworICAgICAgICAgICAgICBjaGVja0FkZEltcG9ydChmaWxlLCAiamF2YS51dGlsLlNvcnRlZE1hcCIsICJqYXZhLnV0aWwuQXJyYXlMaXN0IiwiamF2YS51dGlsLkhhc2hNYXAiLCBDb21tb25DbGFzc05hbWVzLkpBVkFfVVRJTF9MSVNULCJqYXZhLnV0aWwuU29ydGVkTWFwIik7CisgICAgICAgICAgICAgIGNoZWNrQWRkSW1wb3J0KGZpbGUsIENvbW1vbkNsYXNzTmFtZXMuSkFWQV9VVElMX01BUCwgImphdmEudXRpbC5BcnJheUxpc3QiLCJqYXZhLnV0aWwuSGFzaE1hcCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbW1vbkNsYXNzTmFtZXMuSkFWQV9VVElMX0xJU1QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbW1vbkNsYXNzTmFtZXMuSkFWQV9VVElMX01BUCwiamF2YS51dGlsLlNvcnRlZE1hcCIpOworICAgICAgICAgICAgICBjaGVja0FkZEltcG9ydChmaWxlLCAiamF2YS51dGlsLkFic3RyYWN0TGlzdCIsICJqYXZhLnV0aWwuQWJzdHJhY3RMaXN0IiwiamF2YS51dGlsLkFycmF5TGlzdCIsImphdmEudXRpbC5IYXNoTWFwIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29tbW9uQ2xhc3NOYW1lcy5KQVZBX1VUSUxfTElTVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29tbW9uQ2xhc3NOYW1lcy5KQVZBX1VUSUxfTUFQLCJqYXZhLnV0aWwuU29ydGVkTWFwIik7CisgICAgICAgICAgICAgIGNoZWNrQWRkSW1wb3J0KGZpbGUsICJqYXZhLnV0aWwuQWJzdHJhY3RMaXN0IiwgImphdmEudXRpbC5BYnN0cmFjdExpc3QiLCJqYXZhLnV0aWwuQXJyYXlMaXN0IiwiamF2YS51dGlsLkhhc2hNYXAiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb21tb25DbGFzc05hbWVzLkpBVkFfVVRJTF9MSVNULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb21tb25DbGFzc05hbWVzLkpBVkFfVVRJTF9NQVAsImphdmEudXRpbC5Tb3J0ZWRNYXAiKTsKKyAgICAgICAgICAgICAgY2hlY2tBZGRJbXBvcnQoZmlsZSwgImphdmEudXRpbC5UcmVlTWFwIiwgImphdmEudXRpbC5BYnN0cmFjdExpc3QiLCJqYXZhLnV0aWwuQXJyYXlMaXN0IiwiamF2YS51dGlsLkhhc2hNYXAiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb21tb25DbGFzc05hbWVzLkpBVkFfVVRJTF9MSVNULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb21tb25DbGFzc05hbWVzLkpBVkFfVVRJTF9NQVAsImphdmEudXRpbC5Tb3J0ZWRNYXAiLCAiamF2YS51dGlsLlRyZWVNYXAiKTsKKyAgICAgICAgICAgICAgY2hlY2tBZGRJbXBvcnQoZmlsZSwgImphdmEudXRpbC5jb25jdXJyZW50LmF0b21pYy5BdG9taWNCb29sZWFuIiwgImphdmEudXRpbC5BYnN0cmFjdExpc3QiLCJqYXZhLnV0aWwuQXJyYXlMaXN0IiwiamF2YS51dGlsLkhhc2hNYXAiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb21tb25DbGFzc05hbWVzLkpBVkFfVVRJTF9MSVNULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb21tb25DbGFzc05hbWVzLkpBVkFfVVRJTF9NQVAsImphdmEudXRpbC5Tb3J0ZWRNYXAiLCAiamF2YS51dGlsLlRyZWVNYXAiLCAiamF2YS51dGlsLmNvbmN1cnJlbnQuYXRvbWljLkF0b21pY0Jvb2xlYW4iKTsKKyAgICAgICAgICAgICAgY2hlY2tBZGRJbXBvcnQoZmlsZSwgImphdmEuaW8uRmlsZSIsICJqYXZhLmlvLkZpbGUiLCJqYXZhLnV0aWwuQWJzdHJhY3RMaXN0IiwiamF2YS51dGlsLkFycmF5TGlzdCIsImphdmEudXRpbC5IYXNoTWFwIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29tbW9uQ2xhc3NOYW1lcy5KQVZBX1VUSUxfTElTVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29tbW9uQ2xhc3NOYW1lcy5KQVZBX1VUSUxfTUFQLCJqYXZhLnV0aWwuU29ydGVkTWFwIiwgImphdmEudXRpbC5UcmVlTWFwIiwgImphdmEudXRpbC5jb25jdXJyZW50LmF0b21pYy5BdG9taWNCb29sZWFuIik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjYXRjaCAoVGhyb3dhYmxlIGUpIHsKKyAgICAgICAgICAgICAgTE9HLmVycm9yKGUpOworICAgICAgICAgICAgfQorICAgICAgICAgIH0KKyAgICAgICAgfSk7CisgICAgICB9CisgICAgfSwgIiIsICIiKTsKKyAgfQorICBAV3JhcEluQ29tbWFuZAorICBwdWJsaWMgdm9pZCB0ZXN0U3RhdGljSW1wb3J0c0dyb3VwaW5nKCkgdGhyb3dzIFRocm93YWJsZSB7CisgICAgQE5vbk5scyBTdHJpbmcgdGV4dCA9ICJpbXBvcnQgc3RhdGljIGphdmEubGFuZy5NYXRoLm1heDtcbiIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAiaW1wb3J0IGphdmEudXRpbC5NYXA7XG4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIlxuIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICJpbXBvcnQgc3RhdGljIGphdmEubGFuZy5NYXRoLm1pbjtcbiIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAiXG4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgImltcG9ydCBqYXZhLmF3dC5Db21wb25lbnQ7XG4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIlxuIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICJcbiIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAiXG4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgImltcG9ydCBzdGF0aWMgamF2YXguc3dpbmcuU3dpbmdDb25zdGFudHMuQ0VOVEVSO1xuIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICJjbGFzcyBJIHt7IG1heCgwLCAwKTsgTWFwLmNsYXNzLmhhc2hDb2RlKCk7IG1pbigwLDApOyBDb21wb25lbnQuY2xhc3MuaGFzaENvZGUoKTsgaW50IGkgPSBDRU5URVI7IH19IjsKKworICAgIGZpbmFsIFBzaUphdmFGaWxlIGZpbGUgPSAoUHNpSmF2YUZpbGUpY29uZmlndXJlQnlUZXh0KFN0ZEZpbGVUeXBlcy5KQVZBLCB0ZXh0KTsKKyAgICBhc3NlcnRFbXB0eShoaWdobGlnaHRFcnJvcnMoKSk7CisgICAgQ29tbWFuZFByb2Nlc3Nvci5nZXRJbnN0YW5jZSgpLmV4ZWN1dGVDb21tYW5kKAorICAgICAgZ2V0UHJvamVjdCgpLCBuZXcgUnVubmFibGUoKSB7CisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgdm9pZCBydW4oKSB7CisgICAgICAgICAgQXBwbGljYXRpb25NYW5hZ2VyLmdldEFwcGxpY2F0aW9uKCkucnVuV3JpdGVBY3Rpb24obmV3IFJ1bm5hYmxlKCkgeworICAgICAgICAgICAgQE92ZXJyaWRlCisgICAgICAgICAgICBwdWJsaWMgdm9pZCBydW4oKSB7CisgICAgICAgICAgICAgIHRyeSB7CisKKyAgICAgICAgICAgICAgICBDb2RlU3R5bGVTZXR0aW5ncyBzZXR0aW5ncyA9IENvZGVTdHlsZVNldHRpbmdzTWFuYWdlci5nZXRTZXR0aW5ncyhnZXRQcm9qZWN0KCkpLmNsb25lKCk7CisgICAgICAgICAgICAgICAgc2V0dGluZ3MuTEFZT1VUX1NUQVRJQ19JTVBPUlRTX1NFUEFSQVRFTFkgPSB0cnVlOworICAgICAgICAgICAgICAgIFBhY2thZ2VFbnRyeVRhYmxlIHRhYmxlID0gbmV3IFBhY2thZ2VFbnRyeVRhYmxlKCk7CisgICAgICAgICAgICAgICAgdGFibGUuYWRkRW50cnkoUGFja2FnZUVudHJ5LkFMTF9PVEhFUl9JTVBPUlRTX0VOVFJZKTsKKyAgICAgICAgICAgICAgICB0YWJsZS5hZGRFbnRyeShQYWNrYWdlRW50cnkuQkxBTktfTElORV9FTlRSWSk7CisgICAgICAgICAgICAgICAgdGFibGUuYWRkRW50cnkobmV3IFBhY2thZ2VFbnRyeShmYWxzZSwgImphdmF4IiwgdHJ1ZSkpOworICAgICAgICAgICAgICAgIHRhYmxlLmFkZEVudHJ5KG5ldyBQYWNrYWdlRW50cnkoZmFsc2UsICJqYXZhIiwgdHJ1ZSkpOworICAgICAgICAgICAgICAgIHRhYmxlLmFkZEVudHJ5KFBhY2thZ2VFbnRyeS5CTEFOS19MSU5FX0VOVFJZKTsKKyAgICAgICAgICAgICAgICB0YWJsZS5hZGRFbnRyeShuZXcgUGFja2FnZUVudHJ5KHRydWUsICJqYXZhIiwgdHJ1ZSkpOworICAgICAgICAgICAgICAgIHRhYmxlLmFkZEVudHJ5KFBhY2thZ2VFbnRyeS5CTEFOS19MSU5FX0VOVFJZKTsKKyAgICAgICAgICAgICAgICB0YWJsZS5hZGRFbnRyeShQYWNrYWdlRW50cnkuQUxMX09USEVSX1NUQVRJQ19JTVBPUlRTX0VOVFJZKTsKKworICAgICAgICAgICAgICAgIHNldHRpbmdzLklNUE9SVF9MQVlPVVRfVEFCTEUuY29weUZyb20odGFibGUpOworICAgICAgICAgICAgICAgIENvZGVTdHlsZVNldHRpbmdzTWFuYWdlci5nZXRJbnN0YW5jZShnZXRQcm9qZWN0KCkpLnNldFRlbXBvcmFyeVNldHRpbmdzKHNldHRpbmdzKTsKKyAgICAgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgICAgSmF2YUNvZGVTdHlsZU1hbmFnZXIuZ2V0SW5zdGFuY2UoZ2V0UHJvamVjdCgpKS5vcHRpbWl6ZUltcG9ydHMoZmlsZSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGZpbmFsbHkgeworICAgICAgICAgICAgICAgICAgQ29kZVN0eWxlU2V0dGluZ3NNYW5hZ2VyLmdldEluc3RhbmNlKGdldFByb2plY3QoKSkuZHJvcFRlbXBvcmFyeVNldHRpbmdzKCk7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgYXNzZXJ0T3JkZXIoZmlsZSwgImphdmEuYXd0LioiLCBDb21tb25DbGFzc05hbWVzLkpBVkFfVVRJTF9NQVAsICJzdGF0aWMgamF2YS5sYW5nLk1hdGgubWF4IiwgInN0YXRpYyBqYXZhLmxhbmcuTWF0aC5taW4iLCAic3RhdGljIGphdmF4LnN3aW5nLlN3aW5nQ29uc3RhbnRzLkNFTlRFUiIpOworCisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgY2F0Y2ggKFRocm93YWJsZSBlKSB7CisgICAgICAgICAgICAgICAgTE9HLmVycm9yKGUpOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgfSk7CisgICAgICAgIH0KKyAgICAgIH0sICIiLCAiIik7CisgIH0KKworICBwcml2YXRlIHZvaWQgY2hlY2tBZGRJbXBvcnQoUHNpSmF2YUZpbGUgZmlsZSwgU3RyaW5nIGZxbiwgU3RyaW5nLi4uIGV4cGVjdGVkT3JkZXIpIHsKKyAgICBDb2RlU3R5bGVTZXR0aW5ncyBzZXR0aW5ncyA9IENvZGVTdHlsZVNldHRpbmdzTWFuYWdlci5nZXRTZXR0aW5ncyhnZXRQcm9qZWN0KCkpOworICAgIEltcG9ydEhlbHBlciBpbXBvcnRIZWxwZXIgPSBuZXcgSW1wb3J0SGVscGVyKHNldHRpbmdzKTsKKworICAgIFBzaUNsYXNzIHBzaUNsYXNzID0gSmF2YVBzaUZhY2FkZS5nZXRJbnN0YW5jZShnZXRQcm9qZWN0KCkpLmZpbmRDbGFzcyhmcW4sIEdsb2JhbFNlYXJjaFNjb3BlLmFsbFNjb3BlKGdldFByb2plY3QoKSkpOworICAgIGJvb2xlYW4gYiA9IGltcG9ydEhlbHBlci5hZGRJbXBvcnQoZmlsZSwgcHNpQ2xhc3MpOworICAgIGFzc2VydFRydWUoYik7CisKKyAgICBhc3NlcnRPcmRlcihmaWxlLCBleHBlY3RlZE9yZGVyKTsKKyAgfQorCisgIHByaXZhdGUgc3RhdGljIHZvaWQgYXNzZXJ0T3JkZXIoUHNpSmF2YUZpbGUgZmlsZSwgQE5vbk5scyBTdHJpbmcuLi4gZXhwZWN0ZWRPcmRlcikgeworICAgIFBzaUltcG9ydFN0YXRlbWVudEJhc2VbXSBzdGF0ZW1lbnRzID0gZmlsZS5nZXRJbXBvcnRMaXN0KCkuZ2V0QWxsSW1wb3J0U3RhdGVtZW50cygpOworCisgICAgYXNzZXJ0RXF1YWxzKGV4cGVjdGVkT3JkZXIubGVuZ3RoLCBzdGF0ZW1lbnRzLmxlbmd0aCk7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzdGF0ZW1lbnRzLmxlbmd0aDsgaSsrKSB7CisgICAgICBQc2lJbXBvcnRTdGF0ZW1lbnRCYXNlIHN0YXRlbWVudCA9IHN0YXRlbWVudHNbaV07CisgICAgICBTdHJpbmcgdGV4dCA9IFN0cmluZ1V0aWwudHJpbUVuZChTdHJpbmdVdGlsLnRyaW1TdGFydChzdGF0ZW1lbnQuZ2V0VGV4dCgpLCAiaW1wb3J0ICIpLCAiOyIpOworICAgICAgYXNzZXJ0RXF1YWxzKGV4cGVjdGVkT3JkZXJbaV0sIHRleHQpOworICAgIH0KKyAgfQorCisgIEBOb25ObHMgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEJBU0VfUEFUSCA9ICIvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZy9yZWltcG9ydENvbmZsaWN0aW5nQ2xhc3NlcyI7CisgIEBXcmFwSW5Db21tYW5kCisgIHB1YmxpYyB2b2lkIHRlc3RSZWltcG9ydENvbmZsaWN0aW5nQ2xhc3NlcygpIHRocm93cyBFeGNlcHRpb24geworICAgIGNvbmZpZ3VyZUJ5RmlsZShCQVNFX1BBVEgrIi94L1VzYWdlLmphdmEiLCBCQVNFX1BBVEgpOworICAgIGFzc2VydEVtcHR5KGhpZ2hsaWdodEVycm9ycygpKTsKKworICAgIENvZGVTdHlsZVNldHRpbmdzIHNldHRpbmdzID0gQ29kZVN0eWxlU2V0dGluZ3NNYW5hZ2VyLmdldFNldHRpbmdzKGdldFByb2plY3QoKSkuY2xvbmUoKTsKKyAgICBzZXR0aW5ncy5DTEFTU19DT1VOVF9UT19VU0VfSU1QT1JUX09OX0RFTUFORCA9IDI7CisgICAgQ29kZVN0eWxlU2V0dGluZ3NNYW5hZ2VyLmdldEluc3RhbmNlKGdldFByb2plY3QoKSkuc2V0VGVtcG9yYXJ5U2V0dGluZ3Moc2V0dGluZ3MpOworICAgIHRyeSB7CisgICAgICBuZXcgV3JpdGVDb21tYW5kQWN0aW9uLlNpbXBsZShnZXRQcm9qZWN0KCkpIHsKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHByb3RlY3RlZCB2b2lkIHJ1bigpIHRocm93cyBUaHJvd2FibGUgeworICAgICAgICAgIEphdmFDb2RlU3R5bGVNYW5hZ2VyLmdldEluc3RhbmNlKGdldFByb2plY3QoKSkub3B0aW1pemVJbXBvcnRzKGdldEZpbGUoKSk7CisgICAgICAgIH0KKyAgICAgIH0uZXhlY3V0ZSgpLnRocm93RXhjZXB0aW9uKCk7CisgICAgfQorICAgIGZpbmFsbHkgeworICAgICAgQ29kZVN0eWxlU2V0dGluZ3NNYW5hZ2VyLmdldEluc3RhbmNlKGdldFByb2plY3QoKSkuZHJvcFRlbXBvcmFyeVNldHRpbmdzKCk7CisgICAgfQorCisKKyAgICBATm9uTmxzIFN0cmluZyBmdWxsUGF0aCA9IGdldFRlc3REYXRhUGF0aCgpICsgQkFTRV9QQVRIICsgIi94L1VzYWdlX2FmdGVyT3B0aW1pemUudHh0IjsKKyAgICBmaW5hbCBWaXJ0dWFsRmlsZSB2RmlsZSA9IExvY2FsRmlsZVN5c3RlbS5nZXRJbnN0YW5jZSgpLmZpbmRGaWxlQnlQYXRoKGZ1bGxQYXRoLnJlcGxhY2UoRmlsZS5zZXBhcmF0b3JDaGFyLCAnLycpKTsKKyAgICBTdHJpbmcgdGV4dCA9IExvYWRUZXh0VXRpbC5sb2FkVGV4dCh2RmlsZSkudG9TdHJpbmcoKTsKKyAgICBhc3NlcnRFcXVhbHModGV4dCwgZ2V0RmlsZSgpLmdldFRleHQoKSk7CisgIH0KKyAgQFdyYXBJbkNvbW1hbmQKKyAgcHVibGljIHZvaWQgdGVzdENvbmZsaWN0aW5nQ2xhc3Nlc0Zyb21DdXJyZW50UGFja2FnZSgpIHRocm93cyBUaHJvd2FibGUgeworICAgIGZpbmFsIFBzaUZpbGUgZmlsZSA9IGNvbmZpZ3VyZUJ5VGV4dChTdGRGaWxlVHlwZXMuSkFWQSwgInBhY2thZ2UgamF2YS51dGlsOyBjbGFzcyBYeyBEYXRlIGQ7fSIpOworICAgIGFzc2VydEVtcHR5KGhpZ2hsaWdodEVycm9ycygpKTsKKworICAgIG5ldyBXcml0ZUNvbW1hbmRBY3Rpb24uU2ltcGxlKGdldFByb2plY3QoKSkgeworICAgICAgQE92ZXJyaWRlCisgICAgICBwcm90ZWN0ZWQgdm9pZCBydW4oKSB0aHJvd3MgVGhyb3dhYmxlIHsKKyAgICAgICAgQ29kZVN0eWxlU2V0dGluZ3Mgc2V0dGluZ3MgPSBDb2RlU3R5bGVTZXR0aW5nc01hbmFnZXIuZ2V0U2V0dGluZ3MoZ2V0UHJvamVjdCgpKTsKKyAgICAgICAgSW1wb3J0SGVscGVyIGltcG9ydEhlbHBlciA9IG5ldyBJbXBvcnRIZWxwZXIoc2V0dGluZ3MpOworCisgICAgICAgIFBzaUNsYXNzIHBzaUNsYXNzID0gSmF2YVBzaUZhY2FkZS5nZXRJbnN0YW5jZShnZXRQcm9qZWN0KCkpLmZpbmRDbGFzcygiamF2YS5zcWwuRGF0ZSIsIEdsb2JhbFNlYXJjaFNjb3BlLmFsbFNjb3BlKGdldFByb2plY3QoKSkpOworICAgICAgICBib29sZWFuIGIgPSBpbXBvcnRIZWxwZXIuYWRkSW1wb3J0KChQc2lKYXZhRmlsZSlmaWxlLCBwc2lDbGFzcyk7CisgICAgICAgIGFzc2VydEZhbHNlKGIpOyAvLyBtdXN0IGZhaWwKKyAgICAgIH0KKyAgICB9LmV4ZWN1dGUoKS50aHJvd0V4Y2VwdGlvbigpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEF1dG9JbXBvcnRDYXJldExvY2F0aW9uKCkgdGhyb3dzIFRocm93YWJsZSB7CisgICAgYm9vbGVhbiBvbGQgPSBDb2RlSW5zaWdodFNldHRpbmdzLmdldEluc3RhbmNlKCkuQUREX1VOQU1CSUdJT1VTX0lNUE9SVFNfT05fVEhFX0ZMWTsKKyAgICB0cnkgeworICAgICAgQ29kZUluc2lnaHRTZXR0aW5ncy5nZXRJbnN0YW5jZSgpLkFERF9VTkFNQklHSU9VU19JTVBPUlRTX09OX1RIRV9GTFkgPSB0cnVlOworICAgICAgY29uZmlndXJlQnlUZXh0KFN0ZEZpbGVUeXBlcy5KQVZBLCAiY2xhc3MgWCB7IEFycmF5TGlzdDxjYXJldD4gYzsgfSIpOworICAgICAgKChVbmRvTWFuYWdlckltcGwpVW5kb01hbmFnZXIuZ2V0SW5zdGFuY2UoZ2V0UHJvamVjdCgpKSkuZmx1c2hDdXJyZW50Q29tbWFuZE1lcmdlcigpOworICAgICAgKChVbmRvTWFuYWdlckltcGwpVW5kb01hbmFnZXIuZ2V0SW5zdGFuY2UoZ2V0UHJvamVjdCgpKSkuY2xlYXJVbmRvUmVkb1F1ZXVlSW5UZXN0cyhnZXRGaWxlKCkuZ2V0VmlydHVhbEZpbGUoKSk7CisgICAgICB0eXBlKCIgIik7CisgICAgICBiYWNrc3BhY2UoKTsKKyAgICAgIAorICAgICAgYXNzZXJ0T25lRWxlbWVudChoaWdobGlnaHRFcnJvcnMoKSk7CisKKyAgICAgIGludCBvZmZzZXQgPSBteUVkaXRvci5nZXRDYXJldE1vZGVsKCkuZ2V0T2Zmc2V0KCk7CisgICAgICBQc2lSZWZlcmVuY2UgcmVmID0gbXlGaWxlLmZpbmRSZWZlcmVuY2VBdChvZmZzZXQgLSAxKTsKKyAgICAgIGFzc2VydFRydWUocmVmIGluc3RhbmNlb2YgUHNpSmF2YUNvZGVSZWZlcmVuY2VFbGVtZW50KTsKKworICAgICAgSW1wb3J0Q2xhc3NGaXhCYXNlLlJlc3VsdCByZXN1bHQgPSBuZXcgSW1wb3J0Q2xhc3NGaXgoKFBzaUphdmFDb2RlUmVmZXJlbmNlRWxlbWVudClyZWYpLmRvRml4KGdldEVkaXRvcigpLCB0cnVlLCBmYWxzZSk7CisgICAgICBhc3NlcnRFcXVhbHMoSW1wb3J0Q2xhc3NGaXhCYXNlLlJlc3VsdC5QT1BVUF9OT1RfU0hPV04sIHJlc3VsdCk7CisgICAgICBVSVV0aWwuZGlzcGF0Y2hBbGxJbnZvY2F0aW9uRXZlbnRzKCk7CisKKyAgICAgIG15RWRpdG9yLmdldENhcmV0TW9kZWwoKS5tb3ZlVG9PZmZzZXQob2Zmc2V0IC0gMSk7CisgICAgICByZXN1bHQgPSBuZXcgSW1wb3J0Q2xhc3NGaXgoKFBzaUphdmFDb2RlUmVmZXJlbmNlRWxlbWVudClyZWYpLmRvRml4KGdldEVkaXRvcigpLCB0cnVlLCBmYWxzZSk7CisgICAgICBhc3NlcnRFcXVhbHMoSW1wb3J0Q2xhc3NGaXhCYXNlLlJlc3VsdC5DTEFTU19BVVRPX0lNUE9SVEVELCByZXN1bHQpOworICAgICAgVUlVdGlsLmRpc3BhdGNoQWxsSW52b2NhdGlvbkV2ZW50cygpOworCisgICAgICBhc3NlcnRFbXB0eShoaWdobGlnaHRFcnJvcnMoKSk7CisgICAgfQorICAgIGZpbmFsbHkgeworICAgICAgQ29kZUluc2lnaHRTZXR0aW5ncy5nZXRJbnN0YW5jZSgpLkFERF9VTkFNQklHSU9VU19JTVBPUlRTX09OX1RIRV9GTFkgPSBvbGQ7CisgICAgfQorICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEF1dG9JbXBvcnRDYXJldExvY2F0aW9uMigpIHRocm93cyBUaHJvd2FibGUgeworICAgIGJvb2xlYW4gb2xkID0gQ29kZUluc2lnaHRTZXR0aW5ncy5nZXRJbnN0YW5jZSgpLkFERF9VTkFNQklHSU9VU19JTVBPUlRTX09OX1RIRV9GTFk7CisgICAgdHJ5IHsKKyAgICAgIENvZGVJbnNpZ2h0U2V0dGluZ3MuZ2V0SW5zdGFuY2UoKS5BRERfVU5BTUJJR0lPVVNfSU1QT1JUU19PTl9USEVfRkxZID0gdHJ1ZTsKKyAgICAgIGNvbmZpZ3VyZUJ5VGV4dChTdGRGaWxlVHlwZXMuSkFWQSwgImNsYXNzIFggeyA8Y2FyZXQ+QXJyYXlMaXN0IGMgPSBuZXcgQXJyYXlMaXN0KCk7IH0iKTsKKyAgICAgICgoVW5kb01hbmFnZXJJbXBsKVVuZG9NYW5hZ2VyLmdldEluc3RhbmNlKGdldFByb2plY3QoKSkpLmZsdXNoQ3VycmVudENvbW1hbmRNZXJnZXIoKTsKKyAgICAgICgoVW5kb01hbmFnZXJJbXBsKVVuZG9NYW5hZ2VyLmdldEluc3RhbmNlKGdldFByb2plY3QoKSkpLmNsZWFyVW5kb1JlZG9RdWV1ZUluVGVzdHMoZ2V0RmlsZSgpLmdldFZpcnR1YWxGaWxlKCkpOworICAgICAgdHlwZSgiICIpOworICAgICAgYmFja3NwYWNlKCk7CisgICAgICAKKyAgICAgIGFzc2VydEVxdWFscygyLCBoaWdobGlnaHRFcnJvcnMoKS5zaXplKCkpOworICAgICAgVUlVdGlsLmRpc3BhdGNoQWxsSW52b2NhdGlvbkV2ZW50cygpOworCisgICAgICBpbnQgb2Zmc2V0ID0gbXlFZGl0b3IuZ2V0Q2FyZXRNb2RlbCgpLmdldE9mZnNldCgpOworICAgICAgUHNpUmVmZXJlbmNlIHJlZiA9IG15RmlsZS5maW5kUmVmZXJlbmNlQXQob2Zmc2V0KTsKKyAgICAgIGFzc2VydFRydWUocmVmIGluc3RhbmNlb2YgUHNpSmF2YUNvZGVSZWZlcmVuY2VFbGVtZW50KTsKKworICAgICAgSW1wb3J0Q2xhc3NGaXhCYXNlLlJlc3VsdCByZXN1bHQgPSBuZXcgSW1wb3J0Q2xhc3NGaXgoKFBzaUphdmFDb2RlUmVmZXJlbmNlRWxlbWVudClyZWYpLmRvRml4KGdldEVkaXRvcigpLCB0cnVlLCBmYWxzZSk7CisgICAgICBhc3NlcnRFcXVhbHMoSW1wb3J0Q2xhc3NGaXhCYXNlLlJlc3VsdC5DTEFTU19BVVRPX0lNUE9SVEVELCByZXN1bHQpOworICAgICAgVUlVdGlsLmRpc3BhdGNoQWxsSW52b2NhdGlvbkV2ZW50cygpOworCisgICAgICBhc3NlcnRFbXB0eShoaWdobGlnaHRFcnJvcnMoKSk7CisgICAgfQorICAgIGZpbmFsbHkgeworICAgICAgQ29kZUluc2lnaHRTZXR0aW5ncy5nZXRJbnN0YW5jZSgpLkFERF9VTkFNQklHSU9VU19JTVBPUlRTX09OX1RIRV9GTFkgPSBvbGQ7CisgICAgfQorICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEF1dG9JbXBvcnRXb3Jrc1doZW5JVHlwZVNwYWNlQWZ0ZXJDbGFzc05hbWUoKSB0aHJvd3MgVGhyb3dhYmxlIHsKKyAgICBATm9uTmxzIFN0cmluZyB0ZXh0ID0gImNsYXNzIFMgeyBBcnJheUxpc3Q8Y2FyZXQ+IH0iOworICAgIGNvbmZpZ3VyZUJ5VGV4dChTdGRGaWxlVHlwZXMuSkFWQSwgdGV4dCk7CisKKyAgICBib29sZWFuIG9sZCA9IENvZGVJbnNpZ2h0U2V0dGluZ3MuZ2V0SW5zdGFuY2UoKS5BRERfVU5BTUJJR0lPVVNfSU1QT1JUU19PTl9USEVfRkxZOworICAgIENvZGVJbnNpZ2h0U2V0dGluZ3MuZ2V0SW5zdGFuY2UoKS5BRERfVU5BTUJJR0lPVVNfSU1QT1JUU19PTl9USEVfRkxZID0gdHJ1ZTsKKyAgICBEYWVtb25Db2RlQW5hbHl6ZXJTZXR0aW5ncy5nZXRJbnN0YW5jZSgpLnNldEltcG9ydEhpbnRFbmFibGVkKHRydWUpOworCisgICAgdHJ5IHsKKyAgICAgIGRvSGlnaGxpZ2h0aW5nKCk7CisgICAgICAvL2NhcmV0IGlzIHRvbyBjbG9zZQorICAgICAgYXNzZXJ0RW1wdHkoKChQc2lKYXZhRmlsZSlnZXRGaWxlKCkpLmdldEltcG9ydExpc3QoKS5nZXRBbGxJbXBvcnRTdGF0ZW1lbnRzKCkpOworCisgICAgICB0eXBlKCIgIik7CisKKyAgICAgIFBzaUphdmFDb2RlUmVmZXJlbmNlRWxlbWVudCBlbGVtZW50ID0KKyAgICAgICAgKFBzaUphdmFDb2RlUmVmZXJlbmNlRWxlbWVudClnZXRGaWxlKCkuZmluZFJlZmVyZW5jZUF0KGdldEVkaXRvcigpLmdldENhcmV0TW9kZWwoKS5nZXRPZmZzZXQoKSAtIDIpOworICAgICAgSW1wb3J0Q2xhc3NGaXggZml4ID0gbmV3IEltcG9ydENsYXNzRml4KGVsZW1lbnQpOworICAgICAgSW1wb3J0Q2xhc3NGaXhCYXNlLlJlc3VsdCByZXN1bHQgPSBmaXguZG9GaXgoZ2V0RWRpdG9yKCksIGZhbHNlLCBmYWxzZSk7CisgICAgICBhc3NlcnRFcXVhbHMoSW1wb3J0Q2xhc3NGaXhCYXNlLlJlc3VsdC5DTEFTU19BVVRPX0lNUE9SVEVELCByZXN1bHQpOworCisgICAgICBhc3NlcnROb3RTYW1lKDAsICgoUHNpSmF2YUZpbGUpZ2V0RmlsZSgpKS5nZXRJbXBvcnRMaXN0KCkuZ2V0QWxsSW1wb3J0U3RhdGVtZW50cygpLmxlbmd0aCk7CisgICAgfQorICAgIGZpbmFsbHkgeworICAgICAgIENvZGVJbnNpZ2h0U2V0dGluZ3MuZ2V0SW5zdGFuY2UoKS5BRERfVU5BTUJJR0lPVVNfSU1QT1JUU19PTl9USEVfRkxZID0gb2xkOworICAgIH0KKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RBdXRvSW1wb3J0QWZ0ZXJVbmNvbW1lbnQoKSB0aHJvd3MgVGhyb3dhYmxlIHsKKyAgICBATm9uTmxzIFN0cmluZyB0ZXh0ID0gImNsYXNzIFMgeyAvKkFycmF5TGlzdCBsOyBIYXNoTWFwIGg7IDxjYXJldD4qLyB9IjsKKyAgICBjb25maWd1cmVCeVRleHQoU3RkRmlsZVR5cGVzLkpBVkEsIHRleHQpOworCisgICAgYm9vbGVhbiBvbGQgPSBDb2RlSW5zaWdodFNldHRpbmdzLmdldEluc3RhbmNlKCkuQUREX1VOQU1CSUdJT1VTX0lNUE9SVFNfT05fVEhFX0ZMWTsKKyAgICBDb2RlSW5zaWdodFNldHRpbmdzLmdldEluc3RhbmNlKCkuQUREX1VOQU1CSUdJT1VTX0lNUE9SVFNfT05fVEhFX0ZMWSA9IHRydWU7CisgICAgRGFlbW9uQ29kZUFuYWx5emVyU2V0dGluZ3MuZ2V0SW5zdGFuY2UoKS5zZXRJbXBvcnRIaW50RW5hYmxlZCh0cnVlKTsKKworICAgIHRyeSB7CisgICAgICBkb0hpZ2hsaWdodGluZygpOworCisgICAgICBhc3NlcnRFbXB0eSgoKFBzaUphdmFGaWxlKWdldEZpbGUoKSkuZ2V0SW1wb3J0TGlzdCgpLmdldEFsbEltcG9ydFN0YXRlbWVudHMoKSk7CisKKyAgICAgIENvbW1lbnRCeUJsb2NrQ29tbWVudEFjdGlvbiBhY3Rpb24gPSBuZXcgQ29tbWVudEJ5QmxvY2tDb21tZW50QWN0aW9uKCk7CisgICAgICBhY3Rpb24uYWN0aW9uUGVyZm9ybWVkSW1wbChnZXRQcm9qZWN0KCksIGdldEVkaXRvcigpKTsKKworICAgICAgYXNzZXJ0RW1wdHkoaGlnaGxpZ2h0RXJyb3JzKCkpOworCisgICAgICBhc3NlcnROb3RTYW1lKDAsICgoUHNpSmF2YUZpbGUpZ2V0RmlsZSgpKS5nZXRJbXBvcnRMaXN0KCkuZ2V0QWxsSW1wb3J0U3RhdGVtZW50cygpLmxlbmd0aCk7CisgICAgfQorICAgIGZpbmFsbHkgeworICAgICAgIENvZGVJbnNpZ2h0U2V0dGluZ3MuZ2V0SW5zdGFuY2UoKS5BRERfVU5BTUJJR0lPVVNfSU1QT1JUU19PTl9USEVfRkxZID0gb2xkOworICAgIH0KKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RBdXRvSW1wb3J0V29ya3MoKSB0aHJvd3MgVGhyb3dhYmxlIHsKKyAgICBATm9uTmxzIGZpbmFsIFN0cmluZyB0ZXh0ID0gImNsYXNzIFMgeyBKRnJhbWUgeDsgPGNhcmV0PiB9IjsKKyAgICBjb25maWd1cmVCeVRleHQoU3RkRmlsZVR5cGVzLkpBVkEsIHRleHQpOworICAgICgoVW5kb01hbmFnZXJJbXBsKVVuZG9NYW5hZ2VyLmdldEluc3RhbmNlKGdldFByb2plY3QoKSkpLmZsdXNoQ3VycmVudENvbW1hbmRNZXJnZXIoKTsKKyAgICAoKFVuZG9NYW5hZ2VySW1wbClVbmRvTWFuYWdlci5nZXRJbnN0YW5jZShnZXRQcm9qZWN0KCkpKS5jbGVhclVuZG9SZWRvUXVldWVJblRlc3RzKGdldEZpbGUoKS5nZXRWaXJ0dWFsRmlsZSgpKTsKKyAgICBhc3NlcnRGYWxzZSgoKERhZW1vbkNvZGVBbmFseXplckltcGwpRGFlbW9uQ29kZUFuYWx5emVyLmdldEluc3RhbmNlKGdldFByb2plY3QoKSkpLmNhbkNoYW5nZUZpbGVTaWxlbnRseShnZXRGaWxlKCkpKTsKKworCisgICAgZG9IaWdobGlnaHRpbmcoKTsKKyAgICBhc3NlcnRGYWxzZSgoKERhZW1vbkNvZGVBbmFseXplckltcGwpRGFlbW9uQ29kZUFuYWx5emVyLmdldEluc3RhbmNlKGdldFByb2plY3QoKSkpLmNhbkNoYW5nZUZpbGVTaWxlbnRseShnZXRGaWxlKCkpKTsKKworICAgIHR5cGUoIiAiKTsKKyAgICBhc3NlcnRUcnVlKCgoRGFlbW9uQ29kZUFuYWx5emVySW1wbClEYWVtb25Db2RlQW5hbHl6ZXIuZ2V0SW5zdGFuY2UoZ2V0UHJvamVjdCgpKSkuY2FuQ2hhbmdlRmlsZVNpbGVudGx5KGdldEZpbGUoKSkpOworCisgICAgdW5kbygpOworCisgICAgYXNzZXJ0RmFsc2UoKChEYWVtb25Db2RlQW5hbHl6ZXJJbXBsKURhZW1vbkNvZGVBbmFseXplci5nZXRJbnN0YW5jZShnZXRQcm9qZWN0KCkpKS5jYW5DaGFuZ2VGaWxlU2lsZW50bHkoZ2V0RmlsZSgpKSk7Ly9Db2RlSW5zaWdodFNldHRpbmdzLmdldEluc3RhbmNlKCkuQUREX1VOQU1CSUdJT1VTX0lNUE9SVFNfT05fVEhFX0ZMWSA9IG9sZDsKKyAgfQorCisKKyAgcHVibGljIHZvaWQgdGVzdEF1dG9JbXBvcnRPZkdlbmVyaWNSZWZlcmVuY2UoKSB0aHJvd3MgVGhyb3dhYmxlIHsKKyAgICBATm9uTmxzIGZpbmFsIFN0cmluZyB0ZXh0ID0gImNsYXNzIFMge3sgbmV3IEFycmF5TGlzdDxjYXJldD48PiB9fSI7CisgICAgY29uZmlndXJlQnlUZXh0KFN0ZEZpbGVUeXBlcy5KQVZBLCB0ZXh0KTsKKyAgICBib29sZWFuIG9sZCA9IENvZGVJbnNpZ2h0U2V0dGluZ3MuZ2V0SW5zdGFuY2UoKS5BRERfVU5BTUJJR0lPVVNfSU1QT1JUU19PTl9USEVfRkxZOworICAgIENvZGVJbnNpZ2h0U2V0dGluZ3MuZ2V0SW5zdGFuY2UoKS5BRERfVU5BTUJJR0lPVVNfSU1QT1JUU19PTl9USEVfRkxZID0gdHJ1ZTsKKyAgICBEYWVtb25Db2RlQW5hbHl6ZXJTZXR0aW5ncy5nZXRJbnN0YW5jZSgpLnNldEltcG9ydEhpbnRFbmFibGVkKHRydWUpOworCisgICAgKChVbmRvTWFuYWdlckltcGwpVW5kb01hbmFnZXIuZ2V0SW5zdGFuY2UoZ2V0UHJvamVjdCgpKSkuZmx1c2hDdXJyZW50Q29tbWFuZE1lcmdlcigpOworICAgICgoVW5kb01hbmFnZXJJbXBsKVVuZG9NYW5hZ2VyLmdldEluc3RhbmNlKGdldFByb2plY3QoKSkpLmNsZWFyVW5kb1JlZG9RdWV1ZUluVGVzdHMoZ2V0RmlsZSgpLmdldFZpcnR1YWxGaWxlKCkpOworICAgIHR5cGUoIiAiKTsKKyAgICBiYWNrc3BhY2UoKTsKKworICAgIHRyeSB7CisgICAgICBkb0hpZ2hsaWdodGluZygpOworICAgICAgLy9jYXJldCBpcyB0b28gY2xvc2UKKyAgICAgIGFzc2VydEVtcHR5KCgoUHNpSmF2YUZpbGUpZ2V0RmlsZSgpKS5nZXRJbXBvcnRMaXN0KCkuZ2V0QWxsSW1wb3J0U3RhdGVtZW50cygpKTsKKworICAgICAgY2FyZXRSaWdodCgpOworCisgICAgICBkb0hpZ2hsaWdodGluZygpOworCisgICAgICBhc3NlcnROb3RTYW1lKDAsICgoUHNpSmF2YUZpbGUpZ2V0RmlsZSgpKS5nZXRJbXBvcnRMaXN0KCkuZ2V0QWxsSW1wb3J0U3RhdGVtZW50cygpLmxlbmd0aCk7CisgICAgfQorICAgIGZpbmFsbHkgeworICAgICAgIENvZGVJbnNpZ2h0U2V0dGluZ3MuZ2V0SW5zdGFuY2UoKS5BRERfVU5BTUJJR0lPVVNfSU1QT1JUU19PTl9USEVfRkxZID0gb2xkOworICAgIH0KKyAgfQorCisgICBwdWJsaWMgdm9pZCB0ZXN0QXV0b09wdGltaXplVW5yZXNvbHZlZEltcG9ydHMoKSB0aHJvd3MgVGhyb3dhYmxlIHsKKyAgICAgQE5vbk5scyBTdHJpbmcgdGV4dCA9ICJpbXBvcnQgeHh4Lnl5eTsgY2xhc3MgUyB7IH0gPGNhcmV0PiAiOworICAgICBjb25maWd1cmVCeVRleHQoU3RkRmlsZVR5cGVzLkpBVkEsIHRleHQpOworCisgICAgIGJvb2xlYW4gb2xkID0gQ29kZUluc2lnaHRTZXR0aW5ncy5nZXRJbnN0YW5jZSgpLk9QVElNSVpFX0lNUE9SVFNfT05fVEhFX0ZMWTsKKyAgICAgQ29kZUluc2lnaHRTZXR0aW5ncy5nZXRJbnN0YW5jZSgpLk9QVElNSVpFX0lNUE9SVFNfT05fVEhFX0ZMWSA9IHRydWU7CisgICAgIERhZW1vbkNvZGVBbmFseXplclNldHRpbmdzLmdldEluc3RhbmNlKCkuc2V0SW1wb3J0SGludEVuYWJsZWQodHJ1ZSk7CisKKyAgICAgdHJ5IHsKKyAgICAgICBMaXN0PEhpZ2hsaWdodEluZm8+IGVycnMgPSBoaWdobGlnaHRFcnJvcnMoKTsKKworICAgICAgIGFzc2VydEVxdWFscygxLCBlcnJzLnNpemUoKSk7CisKKyAgICAgICBhc3NlcnRFcXVhbHMoMSwgKChQc2lKYXZhRmlsZSlnZXRGaWxlKCkpLmdldEltcG9ydExpc3QoKS5nZXRBbGxJbXBvcnRTdGF0ZW1lbnRzKCkubGVuZ3RoKTsKKworICAgICAgIHR5cGUoIi8qICovIik7CisgICAgICAgZG9IaWdobGlnaHRpbmcoKTsKKyAgICAgICBVSVV0aWwuZGlzcGF0Y2hBbGxJbnZvY2F0aW9uRXZlbnRzKCk7CisKKyAgICAgICBhc3NlcnRFbXB0eSgoKFBzaUphdmFGaWxlKWdldEZpbGUoKSkuZ2V0SW1wb3J0TGlzdCgpLmdldEFsbEltcG9ydFN0YXRlbWVudHMoKSk7CisgICAgIH0KKyAgICAgZmluYWxseSB7CisgICAgICAgIENvZGVJbnNpZ2h0U2V0dGluZ3MuZ2V0SW5zdGFuY2UoKS5PUFRJTUlaRV9JTVBPUlRTX09OX1RIRV9GTFkgPSBvbGQ7CisgICAgIH0KKyAgIH0KKworICAgcHVibGljIHZvaWQgdGVzdEF1dG9JbnNlcnRJbXBvcnRGb3JJbm5lckNsYXNzKCkgdGhyb3dzIFRocm93YWJsZSB7CisgICAgIEBOb25ObHMgU3RyaW5nIHRleHQgPSAicGFja2FnZSB4OyBjbGFzcyBTIHsgdm9pZCBmKFJlYWRMb2NrIHIpe30gfSA8Y2FyZXQ+ICI7CisgICAgIGNvbmZpZ3VyZUJ5VGV4dChTdGRGaWxlVHlwZXMuSkFWQSwgdGV4dCk7CisKKyAgICAgYm9vbGVhbiBvbGQgPSBDb2RlSW5zaWdodFNldHRpbmdzLmdldEluc3RhbmNlKCkuQUREX1VOQU1CSUdJT1VTX0lNUE9SVFNfT05fVEhFX0ZMWTsKKyAgICAgQ29kZUluc2lnaHRTZXR0aW5ncy5nZXRJbnN0YW5jZSgpLkFERF9VTkFNQklHSU9VU19JTVBPUlRTX09OX1RIRV9GTFkgPSB0cnVlOworICAgICBEYWVtb25Db2RlQW5hbHl6ZXJTZXR0aW5ncy5nZXRJbnN0YW5jZSgpLnNldEltcG9ydEhpbnRFbmFibGVkKHRydWUpOworCisgICAgIHRyeSB7CisgICAgICAgTGlzdDxIaWdobGlnaHRJbmZvPiBlcnJzID0gaGlnaGxpZ2h0RXJyb3JzKCk7CisgICAgICAgYXNzZXJ0RXF1YWxzKDEsIGVycnMuc2l6ZSgpKTsKKworICAgICAgIGFzc2VydEVtcHR5KCgoUHNpSmF2YUZpbGUpZ2V0RmlsZSgpKS5nZXRJbXBvcnRMaXN0KCkuZ2V0QWxsSW1wb3J0U3RhdGVtZW50cygpKTsKKyAgICAgICB0eXBlKCIvKiAqLyIpOworICAgICAgIGRvSGlnaGxpZ2h0aW5nKCk7CisgICAgICAgVUlVdGlsLmRpc3BhdGNoQWxsSW52b2NhdGlvbkV2ZW50cygpOworICAgICAgIGFzc2VydEVtcHR5KCgoUHNpSmF2YUZpbGUpZ2V0RmlsZSgpKS5nZXRJbXBvcnRMaXN0KCkuZ2V0QWxsSW1wb3J0U3RhdGVtZW50cygpKTsKKyAgICAgfQorICAgICBmaW5hbGx5IHsKKyAgICAgICAgQ29kZUluc2lnaHRTZXR0aW5ncy5nZXRJbnN0YW5jZSgpLkFERF9VTkFNQklHSU9VU19JTVBPUlRTX09OX1RIRV9GTFkgPSBvbGQ7CisgICAgIH0KKyAgIH0KKworICAgcHVibGljIHZvaWQgdGVzdEF1dG9JbXBvcnREb05vdEJyZWFrQ29kZSgpIHRocm93cyBUaHJvd2FibGUgeworICAgICBATm9uTmxzIFN0cmluZyB0ZXh0ID0gInBhY2thZ2UgeDsgY2xhc3MgUyB7eyBTLjxjYXJldD5cbiBSdW5uYWJsZSByOyB9fSI7CisgICAgIGNvbmZpZ3VyZUJ5VGV4dChTdGRGaWxlVHlwZXMuSkFWQSwgdGV4dCk7CisKKyAgICAgYm9vbGVhbiBvbGQgPSBDb2RlSW5zaWdodFNldHRpbmdzLmdldEluc3RhbmNlKCkuQUREX1VOQU1CSUdJT1VTX0lNUE9SVFNfT05fVEhFX0ZMWTsKKyAgICAgYm9vbGVhbiBvcHQgPSBDb2RlSW5zaWdodFNldHRpbmdzLmdldEluc3RhbmNlKCkuT1BUSU1JWkVfSU1QT1JUU19PTl9USEVfRkxZOworICAgICBDb2RlSW5zaWdodFNldHRpbmdzLmdldEluc3RhbmNlKCkuQUREX1VOQU1CSUdJT1VTX0lNUE9SVFNfT05fVEhFX0ZMWSA9IHRydWU7CisgICAgIENvZGVJbnNpZ2h0U2V0dGluZ3MuZ2V0SW5zdGFuY2UoKS5PUFRJTUlaRV9JTVBPUlRTX09OX1RIRV9GTFkgPSB0cnVlOworICAgICBEYWVtb25Db2RlQW5hbHl6ZXJTZXR0aW5ncy5nZXRJbnN0YW5jZSgpLnNldEltcG9ydEhpbnRFbmFibGVkKHRydWUpOworCisgICAgIHRyeSB7CisgICAgICAgTGlzdDxIaWdobGlnaHRJbmZvPiBlcnJzID0gaGlnaGxpZ2h0RXJyb3JzKCk7CisgICAgICAgYXNzZXJ0RXF1YWxzKDEsIGVycnMuc2l6ZSgpKTsKKyAgICAgfQorICAgICBmaW5hbGx5IHsKKyAgICAgICAgQ29kZUluc2lnaHRTZXR0aW5ncy5nZXRJbnN0YW5jZSgpLkFERF9VTkFNQklHSU9VU19JTVBPUlRTX09OX1RIRV9GTFkgPSBvbGQ7CisgICAgICAgIENvZGVJbnNpZ2h0U2V0dGluZ3MuZ2V0SW5zdGFuY2UoKS5PUFRJTUlaRV9JTVBPUlRTX09OX1RIRV9GTFkgPSBvcHQ7CisgICAgIH0KKyAgIH0KKworfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNpZ2h0L2RhZW1vbi9KYXZhZG9jSGlnaGxpZ2h0aW5nVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNpZ2h0L2RhZW1vbi9KYXZhZG9jSGlnaGxpZ2h0aW5nVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFjNjNmOTQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovY29kZUluc2lnaHQvZGFlbW9uL0phdmFkb2NIaWdobGlnaHRpbmdUZXN0LmphdmEKQEAgLTAsMCArMSwxMTAgQEAKK3BhY2thZ2UgY29tLmludGVsbGlqLmNvZGVJbnNpZ2h0LmRhZW1vbjsKKworaW1wb3J0IGNvbS5pbnRlbGxpai5KYXZhVGVzdFV0aWw7CitpbXBvcnQgY29tLmludGVsbGlqLmNvZGVJbnNwZWN0aW9uLkxvY2FsSW5zcGVjdGlvblRvb2w7CitpbXBvcnQgY29tLmludGVsbGlqLmNvZGVJbnNwZWN0aW9uLmphdmFEb2MuSmF2YURvY0xvY2FsSW5zcGVjdGlvbjsKK2ltcG9ydCBjb20uaW50ZWxsaWouY29kZUluc3BlY3Rpb24uamF2YURvYy5KYXZhRG9jUmVmZXJlbmNlSW5zcGVjdGlvbjsKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS5yb290cy5MYW5ndWFnZUxldmVsUHJvamVjdEV4dGVuc2lvbjsKK2ltcG9ydCBjb20uaW50ZWxsaWoucG9tLmphdmEuTGFuZ3VhZ2VMZXZlbDsKK2ltcG9ydCBvcmcuamV0YnJhaW5zLmFubm90YXRpb25zLk5vdE51bGw7CisKKworcHVibGljIGNsYXNzIEphdmFkb2NIaWdobGlnaHRpbmdUZXN0IGV4dGVuZHMgTGlnaHREYWVtb25BbmFseXplclRlc3RDYXNlIHsKKyAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEJBU0VfUEFUSCA9ICIvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2phdmFEb2MiOworCisgIEBOb3ROdWxsCisgIEBPdmVycmlkZQorICBwcm90ZWN0ZWQgU3RyaW5nIGdldFRlc3REYXRhUGF0aCgpIHsKKyAgICByZXR1cm4gSmF2YVRlc3RVdGlsLmdldEphdmFUZXN0RGF0YVBhdGgoKTsKKyAgfQorCisgIEBPdmVycmlkZQorICBwcm90ZWN0ZWQgTG9jYWxJbnNwZWN0aW9uVG9vbFtdIGNvbmZpZ3VyZUxvY2FsSW5zcGVjdGlvblRvb2xzKCkgeworICAgIHJldHVybiBuZXcgTG9jYWxJbnNwZWN0aW9uVG9vbFtdeworICAgICAgbmV3IEphdmFEb2NMb2NhbEluc3BlY3Rpb24oKSwKKyAgICAgIG5ldyBKYXZhRG9jUmVmZXJlbmNlSW5zcGVjdGlvbigpCisgICAgfTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RKYXZhZG9jUGVyaW9kKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZmluYWwgSmF2YURvY0xvY2FsSW5zcGVjdGlvbiBqYXZhRG9jTG9jYWxJbnNwZWN0aW9uID0gbmV3IEphdmFEb2NMb2NhbEluc3BlY3Rpb24oKTsKKyAgICBqYXZhRG9jTG9jYWxJbnNwZWN0aW9uLklHTk9SRV9KQVZBRE9DX1BFUklPRCA9IGZhbHNlOworICAgIGVuYWJsZUluc3BlY3Rpb25Ub29sKGphdmFEb2NMb2NhbEluc3BlY3Rpb24pOworICAgIGRvVGVzdCgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEphdmFkb2NQZXJpb2QxKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZmluYWwgSmF2YURvY0xvY2FsSW5zcGVjdGlvbiBqYXZhRG9jTG9jYWxJbnNwZWN0aW9uID0gbmV3IEphdmFEb2NMb2NhbEluc3BlY3Rpb24oKTsKKyAgICBqYXZhRG9jTG9jYWxJbnNwZWN0aW9uLklHTk9SRV9KQVZBRE9DX1BFUklPRCA9IGZhbHNlOworICAgIGVuYWJsZUluc3BlY3Rpb25Ub29sKGphdmFEb2NMb2NhbEluc3BlY3Rpb24pOworICAgIGRvVGVzdCgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEphdmFkb2NQZXJpb2QyKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZmluYWwgSmF2YURvY0xvY2FsSW5zcGVjdGlvbiBqYXZhRG9jTG9jYWxJbnNwZWN0aW9uID0gbmV3IEphdmFEb2NMb2NhbEluc3BlY3Rpb24oKTsKKyAgICBqYXZhRG9jTG9jYWxJbnNwZWN0aW9uLklHTk9SRV9KQVZBRE9DX1BFUklPRCA9IGZhbHNlOworICAgIGVuYWJsZUluc3BlY3Rpb25Ub29sKGphdmFEb2NMb2NhbEluc3BlY3Rpb24pOworICAgIGRvVGVzdCgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdElubGluZVRhZ0FzRGVzY3JpcHRpb24oKSB0aHJvd3MgRXhjZXB0aW9uIHsgZG9UZXN0KCk7IH0KKworICBwdWJsaWMgdm9pZCB0ZXN0UGFyYW0wKCkgdGhyb3dzIEV4Y2VwdGlvbiB7IGRvVGVzdFdpdGhMYW5nTGV2ZWwoTGFuZ3VhZ2VMZXZlbC5ISUdIRVNUKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0UGFyYW0xKCkgdGhyb3dzIEV4Y2VwdGlvbiB7IGRvVGVzdCgpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RQYXJhbTIoKSB0aHJvd3MgRXhjZXB0aW9uIHsgZG9UZXN0KCk7IH0KKyAgcHVibGljIHZvaWQgdGVzdFBhcmFtMygpIHRocm93cyBFeGNlcHRpb24geyBkb1Rlc3QoKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0UGFyYW00KCkgdGhyb3dzIEV4Y2VwdGlvbiB7IGRvVGVzdCgpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RTZWUwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7IGRvVGVzdCgpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RTZWUxKCkgdGhyb3dzIEV4Y2VwdGlvbiB7IGRvVGVzdCgpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RTZWUyKCkgdGhyb3dzIEV4Y2VwdGlvbiB7IGRvVGVzdCgpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RTZWUzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7IGRvVGVzdCgpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RTZWU0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7IGRvVGVzdCgpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RTZWU1KCkgdGhyb3dzIEV4Y2VwdGlvbiB7IGRvVGVzdCgpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RTZWU2KCkgdGhyb3dzIEV4Y2VwdGlvbiB7IGRvVGVzdCgpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RTZWVDb25zdGFudHMoKSB0aHJvd3MgRXhjZXB0aW9uIHsgZG9UZXN0KCk7IH0KKyAgcHVibGljIHZvaWQgdGVzdFJldHVybjAoKSB0aHJvd3MgRXhjZXB0aW9uIHsgZG9UZXN0KCk7IH0KKyAgcHVibGljIHZvaWQgdGVzdEV4Y2VwdGlvbjAoKSB0aHJvd3MgRXhjZXB0aW9uIHsgZG9UZXN0KCk7IH0KKyAgcHVibGljIHZvaWQgdGVzdEV4Y2VwdGlvbjEoKSB0aHJvd3MgRXhjZXB0aW9uIHsgZG9UZXN0KCk7IH0KKyAgcHVibGljIHZvaWQgdGVzdEV4Y2VwdGlvbjIoKSB0aHJvd3MgRXhjZXB0aW9uIHsgZG9UZXN0KCk7IH0KKyAgcHVibGljIHZvaWQgdGVzdEV4Y2VwdGlvbjMoKSB0aHJvd3MgRXhjZXB0aW9uIHsgZG9UZXN0KCk7IH0KKyAgcHVibGljIHZvaWQgdGVzdEV4Y2VwdGlvbjQoKSB0aHJvd3MgRXhjZXB0aW9uIHsgCisgICAgZmluYWwgSmF2YURvY0xvY2FsSW5zcGVjdGlvbiBqYXZhRG9jTG9jYWxJbnNwZWN0aW9uID0gbmV3IEphdmFEb2NMb2NhbEluc3BlY3Rpb24oKTsKKyAgICBqYXZhRG9jTG9jYWxJbnNwZWN0aW9uLk1FVEhPRF9PUFRJT05TLkFDQ0VTU19KQVZBRE9DX1JFUVVJUkVEX0ZPUiA9ICJwYWNrYWdlIjsKKyAgICBlbmFibGVJbnNwZWN0aW9uVG9vbChqYXZhRG9jTG9jYWxJbnNwZWN0aW9uKTsKKyAgICBkb1Rlc3QoKTsgCisgIH0KKyAgcHVibGljIHZvaWQgdGVzdE11bHRpcGxlVGhyb3dzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7IGRvVGVzdCgpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RJbmhlcml0SmF2YURvYygpIHRocm93cyBFeGNlcHRpb24ge2RvVGVzdFdpdGhMYW5nTGV2ZWwoTGFuZ3VhZ2VMZXZlbC5KREtfMV8zKTt9CisgIHB1YmxpYyB2b2lkIHRlc3RMaW5rMCgpIHRocm93cyBFeGNlcHRpb24geyBkb1Rlc3QoKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0TGlua0Zyb21Jbm5lckNsYXNzVG9TZWxmTWV0aG9kKCkgdGhyb3dzIEV4Y2VwdGlvbiB7IGRvVGVzdCgpOyB9CisKKyAgcHVibGljIHZvaWQgdGVzdFZhbHVlQmFkUmVmZXJlbmNlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7IGRvVGVzdFdpdGhMYW5nTGV2ZWwoTGFuZ3VhZ2VMZXZlbC5ISUdIRVNUKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0VmFsdWVHb29kUmVmZXJlbmNlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7IGRvVGVzdFdpdGhMYW5nTGV2ZWwoTGFuZ3VhZ2VMZXZlbC5ISUdIRVNUKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0VmFsdWVSZWZlcmVuY2UxNCgpIHRocm93cyBFeGNlcHRpb24geyBkb1Rlc3RXaXRoTGFuZ0xldmVsKExhbmd1YWdlTGV2ZWwuSkRLXzFfNCk7IH0KKyAgcHVibGljIHZvaWQgdGVzdFZhbHVlRW1wdHkoKSB0aHJvd3MgRXhjZXB0aW9uIHsgZG9UZXN0V2l0aExhbmdMZXZlbChMYW5ndWFnZUxldmVsLkpES18xXzQpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RWYWx1ZU5vdE9uRmllbGQoKSB0aHJvd3MgRXhjZXB0aW9uIHsgZG9UZXN0V2l0aExhbmdMZXZlbChMYW5ndWFnZUxldmVsLkhJR0hFU1QpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RWYWx1ZU5vdE9uU3RhdGljRmllbGQoKSB0aHJvd3MgRXhjZXB0aW9uIHsgZG9UZXN0V2l0aExhbmdMZXZlbChMYW5ndWFnZUxldmVsLkhJR0hFU1QpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RWYWx1ZU9uTm90SW5pdGlhbGl6ZWRGaWVsZCgpIHRocm93cyBFeGNlcHRpb24geyBkb1Rlc3RXaXRoTGFuZ0xldmVsKExhbmd1YWdlTGV2ZWwuSElHSEVTVCk7IH0KKworICBwdWJsaWMgdm9pZCB0ZXN0VW5rbm93bklubGluZVRhZygpIHRocm93cyBFeGNlcHRpb24geyBkb1Rlc3QoKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0VW5rbm93blRhZ3MoKSB0aHJvd3MgRXhjZXB0aW9uIHsgZG9UZXN0KCk7IH0KKworICBwdWJsaWMgdm9pZCB0ZXN0QmFkQ2hhcmFjdGVycygpIHRocm93cyBFeGNlcHRpb24geyBkb1Rlc3QoKTsgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RWYXJhcmcoKSB0aHJvd3MgRXhjZXB0aW9uIHsgZG9UZXN0KCk7IH0KKworICBwdWJsaWMgdm9pZCB0ZXN0SW5uZXJDbGFzc1JlZmVyZW5jZUluU2lnbmF0dXJlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7IGRvVGVzdCgpOyB9CisKKyAgcHVibGljIHZvaWQgdGVzdEJhZFJlZmVyZW5jZSgpIHRocm93cyBFeGNlcHRpb24geyBkb1Rlc3QoKTsgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RNaXNzaW5nUmV0dXJuRGVzY3JpcHRpb24oKSB0aHJvd3MgRXhjZXB0aW9uIHsgZG9UZXN0KCk7IH0KKworICBwcml2YXRlIHZvaWQgZG9UZXN0V2l0aExhbmdMZXZlbChmaW5hbCBMYW5ndWFnZUxldmVsIGxhbmdMZXZlbCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgTGFuZ3VhZ2VMZXZlbFByb2plY3RFeHRlbnNpb24uZ2V0SW5zdGFuY2UoZ2V0UHJvamVjdCgpKS5zZXRMYW5ndWFnZUxldmVsKGxhbmdMZXZlbCk7CisgICAgZG9UZXN0KCk7CisgIH0KKworICBwcm90ZWN0ZWQgdm9pZCBkb1Rlc3QoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBzdXBlci5kb1Rlc3QoQkFTRV9QQVRIICsgIi8iICsgZ2V0VGVzdE5hbWUoZmFsc2UpICsgIi5qYXZhIiwgdHJ1ZSwgZmFsc2UpOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNpZ2h0L2RhZW1vbi9KYXZhZG9jUmVzb2x2ZVRlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9jb2RlSW5zaWdodC9kYWVtb24vSmF2YWRvY1Jlc29sdmVUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2I3NzZkNwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9jb2RlSW5zaWdodC9kYWVtb24vSmF2YWRvY1Jlc29sdmVUZXN0LmphdmEKQEAgLTAsMCArMSwzOCBAQAorLyoKKyAqIENvcHlyaWdodCAyMDAwLTIwMTEgSmV0QnJhaW5zIHMuci5vLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KK3BhY2thZ2UgY29tLmludGVsbGlqLmNvZGVJbnNpZ2h0LmRhZW1vbjsKKworaW1wb3J0IGNvbS5pbnRlbGxpai5jb2RlSW5zcGVjdGlvbi5Mb2NhbEluc3BlY3Rpb25Ub29sOworaW1wb3J0IGNvbS5pbnRlbGxpai5jb2RlSW5zcGVjdGlvbi5qYXZhRG9jLkphdmFEb2NMb2NhbEluc3BlY3Rpb247CitpbXBvcnQgY29tLmludGVsbGlqLmNvZGVJbnNwZWN0aW9uLmphdmFEb2MuSmF2YURvY1JlZmVyZW5jZUluc3BlY3Rpb247CisKK3B1YmxpYyBjbGFzcyBKYXZhZG9jUmVzb2x2ZVRlc3QgZXh0ZW5kcyBEYWVtb25BbmFseXplclRlc3RDYXNlIHsKKyAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEJBU0VfUEFUSCA9ICIvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2phdmFEb2MvcmVzb2x2ZSI7CisKKyAgQE92ZXJyaWRlCisgIHByb3RlY3RlZCBMb2NhbEluc3BlY3Rpb25Ub29sW10gY29uZmlndXJlTG9jYWxJbnNwZWN0aW9uVG9vbHMoKSB7CisgICAgcmV0dXJuIG5ldyBMb2NhbEluc3BlY3Rpb25Ub29sW117bmV3IEphdmFEb2NMb2NhbEluc3BlY3Rpb24oKSwgbmV3IEphdmFEb2NSZWZlcmVuY2VJbnNwZWN0aW9uKCl9OworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFNlZTAoKSB0aHJvd3MgRXhjZXB0aW9uIHsgZG9UZXN0KCk7IH0KKyAgcHVibGljIHZvaWQgdGVzdFNlZTEoKSB0aHJvd3MgRXhjZXB0aW9uIHsgZG9UZXN0KCk7IH0KKyAgcHVibGljIHZvaWQgdGVzdFNlZTIoKSB0aHJvd3MgRXhjZXB0aW9uIHsgZG9UZXN0KCk7IH0KKyAgcHVibGljIHZvaWQgdGVzdFNlZTMoKSB0aHJvd3MgRXhjZXB0aW9uIHsgZG9UZXN0KCk7IH0KKworICBwcml2YXRlIHZvaWQgZG9UZXN0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KEJBU0VfUEFUSCArICIvcGtnLyIgKyBnZXRUZXN0TmFtZShmYWxzZSkgKyAiLmphdmEiLCBCQVNFX1BBVEgsIGZhbHNlLCBmYWxzZSk7CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9jb2RlSW5zaWdodC9kYWVtb24vTGlnaHRBZHZIaWdobGlnaHRpbmdKZGs3VGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNpZ2h0L2RhZW1vbi9MaWdodEFkdkhpZ2hsaWdodGluZ0pkazdUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWI3MmEyMwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9jb2RlSW5zaWdodC9kYWVtb24vTGlnaHRBZHZIaWdobGlnaHRpbmdKZGs3VGVzdC5qYXZhCkBAIC0wLDAgKzEsMTY1IEBACisvKgorICogQ29weXJpZ2h0IDIwMDAtMjAxMiBKZXRCcmFpbnMgcy5yLm8uCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworcGFja2FnZSBjb20uaW50ZWxsaWouY29kZUluc2lnaHQuZGFlbW9uOworCitpbXBvcnQgY29tLmludGVsbGlqLkV4dGVuc2lvblBvaW50czsKK2ltcG9ydCBjb20uaW50ZWxsaWouY29kZUluc2lnaHQuZGFlbW9uLmltcGwuSGlnaGxpZ2h0SW5mbzsKK2ltcG9ydCBjb20uaW50ZWxsaWouY29kZUluc3BlY3Rpb24uTG9jYWxJbnNwZWN0aW9uVG9vbDsKK2ltcG9ydCBjb20uaW50ZWxsaWouY29kZUluc3BlY3Rpb24uY29tcGlsZXIuSmF2YWNRdWlya3NJbnNwZWN0aW9uOworaW1wb3J0IGNvbS5pbnRlbGxpai5jb2RlSW5zcGVjdGlvbi5kZWFkQ29kZS5VbnVzZWREZWNsYXJhdGlvbkluc3BlY3Rpb247CitpbXBvcnQgY29tLmludGVsbGlqLmNvZGVJbnNwZWN0aW9uLmRlZlVzZS5EZWZVc2VJbnNwZWN0aW9uOworaW1wb3J0IGNvbS5pbnRlbGxpai5jb2RlSW5zcGVjdGlvbi5kZXByZWNhdGlvbi5EZXByZWNhdGVkRGVmZW5kZXJTeW50YXhJbnNwZWN0aW9uOworaW1wb3J0IGNvbS5pbnRlbGxpai5jb2RlSW5zcGVjdGlvbi5yZWR1bmRhbnRDYXN0LlJlZHVuZGFudENhc3RJbnNwZWN0aW9uOworaW1wb3J0IGNvbS5pbnRlbGxpai5jb2RlSW5zcGVjdGlvbi5yZWZlcmVuY2UuRW50cnlQb2ludDsKK2ltcG9ydCBjb20uaW50ZWxsaWouY29kZUluc3BlY3Rpb24ucmVmZXJlbmNlLlJlZkVsZW1lbnQ7CitpbXBvcnQgY29tLmludGVsbGlqLmNvZGVJbnNwZWN0aW9uLnVuY2hlY2tlZFdhcm5pbmdzLlVuY2hlY2tlZFdhcm5pbmdMb2NhbEluc3BlY3Rpb247CitpbXBvcnQgY29tLmludGVsbGlqLmNvZGVJbnNwZWN0aW9uLnVudXNlZFN5bWJvbC5VbnVzZWRTeW1ib2xMb2NhbEluc3BlY3Rpb247CitpbXBvcnQgY29tLmludGVsbGlqLmxhbmcuYW5ub3RhdGlvbi5IaWdobGlnaHRTZXZlcml0eTsKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS5leHRlbnNpb25zLkV4dGVuc2lvblBvaW50OworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLmV4dGVuc2lvbnMuRXh0ZW5zaW9uczsKK2ltcG9ydCBjb20uaW50ZWxsaWoucG9tLmphdmEuTGFuZ3VhZ2VMZXZlbDsKK2ltcG9ydCBjb20uaW50ZWxsaWoucHNpLlBzaUVsZW1lbnQ7CitpbXBvcnQgb3JnLmpkb20uRWxlbWVudDsKK2ltcG9ydCBvcmcuamV0YnJhaW5zLmFubm90YXRpb25zLk5vbk5sczsKK2ltcG9ydCBvcmcuamV0YnJhaW5zLmFubm90YXRpb25zLk5vdE51bGw7CisKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworLyoqCisgKiBUaGlzIGNsYXNzIGlzIGZvciAibGlnaHR3ZWlnaHQiIHRlc3RzIG9ubHksIGkuZS4gdGhvc2Ugd2hpY2ggY2FuIHJ1biBpbnNpZGUgZGVmYXVsdCBsaWdodCBwcm9qZWN0IHNldCB1cAorICogRm9yICJoZWF2eXdlaWdodCIgdGVzdHMgdXNlIEFkdkhpZ2hsaWdodGluZ1Rlc3QKKyAqLworcHVibGljIGNsYXNzIExpZ2h0QWR2SGlnaGxpZ2h0aW5nSmRrN1Rlc3QgZXh0ZW5kcyBMaWdodERhZW1vbkFuYWx5emVyVGVzdENhc2UgeworICBATm9uTmxzIHN0YXRpYyBmaW5hbCBTdHJpbmcgQkFTRV9QQVRIID0gIi9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nNyI7CisKKyAgcHJpdmF0ZSB2b2lkIGRvVGVzdChib29sZWFuIGNoZWNrV2FybmluZ3MsIGJvb2xlYW4gY2hlY2tJbmZvcywgQ2xhc3M8Pz4uLi4gY2xhc3NlcykgeworICAgIGVuYWJsZUluc3BlY3Rpb25Ub29scyhjbGFzc2VzKTsKKyAgICBkb1Rlc3QoQkFTRV9QQVRIICsgIi8iICsgZ2V0VGVzdE5hbWUoZmFsc2UpICsgIi5qYXZhIiwgY2hlY2tXYXJuaW5ncywgY2hlY2tJbmZvcyk7CisgIH0KKworICBwcml2YXRlIHZvaWQgZG9UZXN0KGJvb2xlYW4gY2hlY2tXYXJuaW5ncywgYm9vbGVhbiBjaGVja1dlYWtXYXJuaW5ncywgYm9vbGVhbiBjaGVja0luZm9zLCBDbGFzczw/Pi4uLiBjbGFzc2VzKSB7CisgICAgZW5hYmxlSW5zcGVjdGlvblRvb2xzKGNsYXNzZXMpOworICAgIGRvVGVzdChCQVNFX1BBVEggKyAiLyIgKyBnZXRUZXN0TmFtZShmYWxzZSkgKyAiLmphdmEiLCBjaGVja1dhcm5pbmdzLCBjaGVja1dlYWtXYXJuaW5ncywgY2hlY2tJbmZvcyk7CisgIH0KKworICBAT3ZlcnJpZGUKKyAgcHJvdGVjdGVkIExvY2FsSW5zcGVjdGlvblRvb2xbXSBjb25maWd1cmVMb2NhbEluc3BlY3Rpb25Ub29scygpIHsKKyAgICByZXR1cm4gbmV3IExvY2FsSW5zcGVjdGlvblRvb2xbXXsKKyAgICAgIG5ldyBVbnVzZWRTeW1ib2xMb2NhbEluc3BlY3Rpb24oKSwKKyAgICAgIG5ldyBVbmNoZWNrZWRXYXJuaW5nTG9jYWxJbnNwZWN0aW9uKCksCisgICAgICBuZXcgSmF2YWNRdWlya3NJbnNwZWN0aW9uKCksCisgICAgICBuZXcgUmVkdW5kYW50Q2FzdEluc3BlY3Rpb24oKQorICAgIH07CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0QWxsSmF2YTE1RmVhdHVyZXMoKSB0aHJvd3MgRXhjZXB0aW9uIHsgZG9UZXN0KGZhbHNlLCBmYWxzZSk7IH0KKyAgcHVibGljIHZvaWQgdGVzdEVudW1TeW50aGV0aWNNZXRob2RzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7IGRvVGVzdChmYWxzZSwgZmFsc2UpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3REdXBsaWNhdGVBbm5vdGF0aW9ucygpIHRocm93cyBFeGNlcHRpb24geyBkb1Rlc3QoZmFsc2UsIGZhbHNlKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0U3dpdGNoQnlTdHJpbmcoKSB0aHJvd3MgRXhjZXB0aW9uIHsgZG9UZXN0KGZhbHNlLCBmYWxzZSk7IH0KKyAgcHVibGljIHZvaWQgdGVzdFN3aXRjaEJ5SW5hY2Nlc3NpYmxlRW51bSgpIHRocm93cyBFeGNlcHRpb24geyBkb1Rlc3QoZmFsc2UsIGZhbHNlKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0RGlhbW9uZFBvczEoKSB0aHJvd3MgRXhjZXB0aW9uIHsgZG9UZXN0KGZhbHNlLCBmYWxzZSk7IH0KKyAgcHVibGljIHZvaWQgdGVzdERpYW1vbmRQb3MyKCkgdGhyb3dzIEV4Y2VwdGlvbiB7IGRvVGVzdChmYWxzZSwgZmFsc2UpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3REaWFtb25kUG9zMygpIHRocm93cyBFeGNlcHRpb24geyBkb1Rlc3QoZmFsc2UsIGZhbHNlKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0RGlhbW9uZFBvczQoKSB0aHJvd3MgRXhjZXB0aW9uIHsgZG9UZXN0KGZhbHNlLCBmYWxzZSk7IH0KKyAgcHVibGljIHZvaWQgdGVzdERpYW1vbmRQb3M1KCkgdGhyb3dzIEV4Y2VwdGlvbiB7IGRvVGVzdChmYWxzZSwgZmFsc2UpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3REaWFtb25kUG9zNigpIHRocm93cyBFeGNlcHRpb24geyBkb1Rlc3QoZmFsc2UsIGZhbHNlKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0RGlhbW9uZFBvczcoKSB0aHJvd3MgRXhjZXB0aW9uIHsgZG9UZXN0KGZhbHNlLCBmYWxzZSk7IH0KKyAgcHVibGljIHZvaWQgdGVzdERpYW1vbmROZWcxNSgpIHRocm93cyBFeGNlcHRpb24geyBkb1Rlc3QoZmFsc2UsIGZhbHNlKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0RGlhbW9uZFBvczkoKSB0aHJvd3MgRXhjZXB0aW9uIHsgZG9UZXN0KGZhbHNlLCBmYWxzZSk7IH0KKyAgcHVibGljIHZvaWQgdGVzdERpYW1vbmROZWcxKCkgdGhyb3dzIEV4Y2VwdGlvbiB7IGRvVGVzdChmYWxzZSwgZmFsc2UpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3REaWFtb25kTmVnMigpIHRocm93cyBFeGNlcHRpb24geyBkb1Rlc3QoZmFsc2UsIGZhbHNlKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0RGlhbW9uZE5lZzMoKSB0aHJvd3MgRXhjZXB0aW9uIHsgZG9UZXN0KGZhbHNlLCBmYWxzZSk7IH0KKyAgcHVibGljIHZvaWQgdGVzdERpYW1vbmROZWc0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7IGRvVGVzdChmYWxzZSwgZmFsc2UpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3REaWFtb25kTmVnNSgpIHRocm93cyBFeGNlcHRpb24geyBkb1Rlc3QoZmFsc2UsIGZhbHNlKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0RGlhbW9uZE5lZzYoKSB0aHJvd3MgRXhjZXB0aW9uIHsgZG9UZXN0KGZhbHNlLCBmYWxzZSk7IH0KKyAgcHVibGljIHZvaWQgdGVzdERpYW1vbmROZWc3KCkgdGhyb3dzIEV4Y2VwdGlvbiB7IGRvVGVzdChmYWxzZSwgZmFsc2UpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3REaWFtb25kTmVnOCgpIHRocm93cyBFeGNlcHRpb24geyBkb1Rlc3QoZmFsc2UsIGZhbHNlKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0RGlhbW9uZE5lZzkoKSB0aHJvd3MgRXhjZXB0aW9uIHsgZG9UZXN0KGZhbHNlLCBmYWxzZSk7IH0KKyAgcHVibGljIHZvaWQgdGVzdERpYW1vbmROZWcxMCgpIHRocm93cyBFeGNlcHRpb24geyBkb1Rlc3QoZmFsc2UsIGZhbHNlKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0RGlhbW9uZE5lZzExKCkgdGhyb3dzIEV4Y2VwdGlvbiB7IGRvVGVzdChmYWxzZSwgZmFsc2UpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3REaWFtb25kTmVnMTIoKSB0aHJvd3MgRXhjZXB0aW9uIHsgZG9UZXN0KGZhbHNlLCBmYWxzZSk7IH0KKyAgcHVibGljIHZvaWQgdGVzdERpYW1vbmROZWcxMygpIHRocm93cyBFeGNlcHRpb24geyBkb1Rlc3QoZmFsc2UsIGZhbHNlKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0RGlhbW9uZE5lZzE0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7IGRvVGVzdChmYWxzZSwgZmFsc2UpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3REaWFtb25kTWlzYygpIHRocm93cyBFeGNlcHRpb24geyBzZXRMYW5ndWFnZUxldmVsKExhbmd1YWdlTGV2ZWwuSkRLXzFfNyk7IGRvVGVzdChmYWxzZSwgZmFsc2UpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RIaWdobGlnaHRJbmFjY2Vzc2libGVGcm9tQ2xhc3NNb2RpZmllckxpc3QoKSB0aHJvd3MgRXhjZXB0aW9uIHsgZG9UZXN0KGZhbHNlLCBmYWxzZSk7IH0KKyAgcHVibGljIHZvaWQgdGVzdElubmVySW5UeXBlQXJndW1lbnRzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7IGRvVGVzdChmYWxzZSwgZmFsc2UpOyB9CisKKyAgcHVibGljIHZvaWQgdGVzdER5bmFtaWNhbGx5QWRkSWdub3JlZEFubm90YXRpb25zKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgRXh0ZW5zaW9uUG9pbnQ8RW50cnlQb2ludD4gcG9pbnQgPSBFeHRlbnNpb25zLmdldFJvb3RBcmVhKCkuZ2V0RXh0ZW5zaW9uUG9pbnQoRXh0ZW5zaW9uUG9pbnRzLkRFQURfQ09ERV9UT09MKTsKKyAgICBFbnRyeVBvaW50IGV4dGVuc2lvbiA9IG5ldyBFbnRyeVBvaW50KCkgeworICAgICAgQE5vdE51bGwgQE92ZXJyaWRlIHB1YmxpYyBTdHJpbmcgZ2V0RGlzcGxheU5hbWUoKSB7IHJldHVybiAiZHVoIjsgfQorICAgICAgQE92ZXJyaWRlIHB1YmxpYyBib29sZWFuIGlzRW50cnlQb2ludChSZWZFbGVtZW50IHJlZkVsZW1lbnQsIFBzaUVsZW1lbnQgcHNpRWxlbWVudCkgeyByZXR1cm4gZmFsc2U7IH0KKyAgICAgIEBPdmVycmlkZSBwdWJsaWMgYm9vbGVhbiBpc0VudHJ5UG9pbnQoUHNpRWxlbWVudCBwc2lFbGVtZW50KSB7IHJldHVybiBmYWxzZTsgfQorICAgICAgQE92ZXJyaWRlIHB1YmxpYyBib29sZWFuIGlzU2VsZWN0ZWQoKSB7IHJldHVybiBmYWxzZTsgfQorICAgICAgQE92ZXJyaWRlIHB1YmxpYyB2b2lkIHNldFNlbGVjdGVkKGJvb2xlYW4gc2VsZWN0ZWQpIHsgfQorICAgICAgQE92ZXJyaWRlIHB1YmxpYyB2b2lkIHJlYWRFeHRlcm5hbChFbGVtZW50IGVsZW1lbnQpIHsgfQorICAgICAgQE92ZXJyaWRlIHB1YmxpYyB2b2lkIHdyaXRlRXh0ZXJuYWwoRWxlbWVudCBlbGVtZW50KSB7IH0KKyAgICAgIEBPdmVycmlkZSBwdWJsaWMgU3RyaW5nW10gZ2V0SWdub3JlQW5ub3RhdGlvbnMoKSB7IHJldHVybiBuZXcgU3RyaW5nW117Ik15QW5ubyJ9OyB9CisgICAgfTsKKworICAgIFVudXNlZERlY2xhcmF0aW9uSW5zcGVjdGlvbiBkZWFkQ29kZUluc3BlY3Rpb24gPSBuZXcgVW51c2VkRGVjbGFyYXRpb25JbnNwZWN0aW9uKCk7CisgICAgZW5hYmxlSW5zcGVjdGlvblRvb2woZGVhZENvZGVJbnNwZWN0aW9uKTsKKworICAgIGRvVGVzdCh0cnVlLCBmYWxzZSk7CisgICAgTGlzdDxIaWdobGlnaHRJbmZvPiBpbmZvcyA9IGRvSGlnaGxpZ2h0aW5nKEhpZ2hsaWdodFNldmVyaXR5LldBUk5JTkcpOworICAgIGFzc2VydEVxdWFscygyLCBpbmZvcy5zaXplKCkpOyAvLyB1bnVzZWQgY2xhc3MgYW5kIHVudXNlZCBtZXRob2QKKworICAgIHRyeSB7CisgICAgICBwb2ludC5yZWdpc3RlckV4dGVuc2lvbihleHRlbnNpb24pOworCisgICAgICBpbmZvcyA9IGRvSGlnaGxpZ2h0aW5nKEhpZ2hsaWdodFNldmVyaXR5LldBUk5JTkcpOworICAgICAgSGlnaGxpZ2h0SW5mbyBpbmZvID0gYXNzZXJ0T25lRWxlbWVudChpbmZvcyk7CisgICAgICBhc3NlcnRFcXVhbHMoIkNsYXNzICdXaXRoTWFpbicgaXMgbmV2ZXIgdXNlZCIsIGluZm8uZGVzY3JpcHRpb24pOworICAgIH0KKyAgICBmaW5hbGx5IHsKKyAgICAgIHBvaW50LnVucmVnaXN0ZXJFeHRlbnNpb24oZXh0ZW5zaW9uKTsKKyAgICB9CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0SmF2YWNRdWlya3MoKSB0aHJvd3MgRXhjZXB0aW9uIHsgc2V0TGFuZ3VhZ2VMZXZlbChMYW5ndWFnZUxldmVsLkpES18xXzYpOyBkb1Rlc3QodHJ1ZSwgZmFsc2UpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3ROdW1lcmljTGl0ZXJhbHMoKSB0aHJvd3MgRXhjZXB0aW9uIHsgZG9UZXN0KGZhbHNlLCBmYWxzZSk7IH0KKyAgcHVibGljIHZvaWQgdGVzdE11bHRpQ2F0Y2goKSB0aHJvd3MgRXhjZXB0aW9uIHsgZG9UZXN0KGZhbHNlLCBmYWxzZSk7IH0KKyAgcHVibGljIHZvaWQgdGVzdFRyeVdpdGhSZXNvdXJjZXMoKSB0aHJvd3MgRXhjZXB0aW9uIHsgZG9UZXN0KGZhbHNlLCBmYWxzZSk7IH0KKyAgcHVibGljIHZvaWQgdGVzdFRyeVdpdGhSZXNvdXJjZXNXYXJuKCkgdGhyb3dzIEV4Y2VwdGlvbiB7IGRvVGVzdCh0cnVlLCBmYWxzZSwgRGVmVXNlSW5zcGVjdGlvbi5jbGFzcyk7IH0KKyAgcHVibGljIHZvaWQgdGVzdFNhZmVWYXJhcmdzQXBwbGljYWJpbGl0eSgpIHRocm93cyBFeGNlcHRpb24geyBkb1Rlc3QodHJ1ZSwgZmFsc2UpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RVbmNoZWNrZWRHZW5lcmljc0FycmF5Q3JlYXRpb24oKSB0aHJvd3MgRXhjZXB0aW9uIHsgZG9UZXN0KHRydWUsIGZhbHNlKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0R2VuZXJpY3NBcnJheUNyZWF0aW9uKCkgdGhyb3dzIEV4Y2VwdGlvbiB7IGRvVGVzdChmYWxzZSwgZmFsc2UpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RQcmVjaXNlUmV0aHJvdygpIHRocm93cyBFeGNlcHRpb24geyBkb1Rlc3QoZmFsc2UsIGZhbHNlKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0SW1wcm92ZWRDYXRjaEFuYWx5c2lzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7IGRvVGVzdCh0cnVlLCBmYWxzZSk7IH0KKyAgcHVibGljIHZvaWQgdGVzdFBvbHltb3JwaGljVHlwZUNhc3QoKSB0aHJvd3MgRXhjZXB0aW9uIHsgZG9UZXN0KHRydWUsIGZhbHNlKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0RXJhc3VyZUNsYXNoQ29uZnVzaW9uKCkgdGhyb3dzIEV4Y2VwdGlvbiB7IGRvVGVzdCh0cnVlLCBmYWxzZSwgVW51c2VkRGVjbGFyYXRpb25JbnNwZWN0aW9uLmNsYXNzKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0VW51c2VkKCkgdGhyb3dzIEV4Y2VwdGlvbiB7IGRvVGVzdCh0cnVlLCBmYWxzZSwgVW51c2VkRGVjbGFyYXRpb25JbnNwZWN0aW9uLmNsYXNzKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0U3VwZXJCb3VuZCgpIHRocm93cyBFeGNlcHRpb24geyBkb1Rlc3QoZmFsc2UsIGZhbHNlKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0RXh0ZW5kc0JvdW5kKCkgdGhyb3dzIEV4Y2VwdGlvbiB7IGRvVGVzdChmYWxzZSwgZmFsc2UpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RJREVBODQ1MzMoKSB0aHJvd3MgRXhjZXB0aW9uIHsgZG9UZXN0KGZhbHNlLCBmYWxzZSk7IH0KKyAgcHVibGljIHZvaWQgdGVzdENsYXNzTGl0ZXJhbCgpIHRocm93cyBFeGNlcHRpb24geyBkb1Rlc3QoZmFsc2UsIGZhbHNlKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0RXh0ZW5zaW9uTWV0aG9kcygpIHRocm93cyBFeGNlcHRpb24geyBkb1Rlc3QoZmFsc2UsIGZhbHNlKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0RXh0ZW5zaW9uTWV0aG9kU3ludGF4KCkgdGhyb3dzIEV4Y2VwdGlvbiB7IGRvVGVzdCh0cnVlLCBmYWxzZSwgRGVwcmVjYXRlZERlZmVuZGVyU3ludGF4SW5zcGVjdGlvbi5jbGFzcyk7IH0KKyAgcHVibGljIHZvaWQgdGVzdE1ldGhvZFJlZmVyZW5jZXMoKSB0aHJvd3MgRXhjZXB0aW9uIHsgZG9UZXN0KGZhbHNlLCB0cnVlLCBmYWxzZSk7IH0KKyAgcHVibGljIHZvaWQgdGVzdFVzZWRNZXRob2RzQnlNZXRob2RSZWZlcmVuY2VzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7IGRvVGVzdCh0cnVlLCB0cnVlLCBmYWxzZSk7IH0KKyAgcHVibGljIHZvaWQgdGVzdExhbWJkYUV4cHJlc3Npb25zKCkgdGhyb3dzIEV4Y2VwdGlvbiB7IGRvVGVzdChmYWxzZSwgdHJ1ZSwgZmFsc2UpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RKYXZhN0Nhc3RDb252ZW50aW9ucygpIHRocm93cyBFeGNlcHRpb24geyBkb1Rlc3QoZmFsc2UsIHRydWUsIGZhbHNlKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0VW5jaGVja2VkV2FybmluZygpIHRocm93cyBFeGNlcHRpb24geyBkb1Rlc3QodHJ1ZSwgZmFsc2UpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RVbmNoZWNrZWRXYXJuaW5nSURFQTU5MjkwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7IGRvVGVzdCh0cnVlLCBmYWxzZSk7IH0KKyAgcHVibGljIHZvaWQgdGVzdFVuY2hlY2tlZFdhcm5pbmdJREVBNzA2MjAoKSB0aHJvd3MgRXhjZXB0aW9uIHsgZG9UZXN0KHRydWUsIGZhbHNlKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0VW5jaGVja2VkV2FybmluZ0lERUE2MDE2NigpIHRocm93cyBFeGNlcHRpb24geyBkb1Rlc3QodHJ1ZSwgZmFsc2UpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RVbmNoZWNrZWRXYXJuaW5nSURFQTIxNDMyKCkgdGhyb3dzIEV4Y2VwdGlvbiB7IGRvVGVzdCh0cnVlLCBmYWxzZSk7IH0KKyAgcHVibGljIHZvaWQgdGVzdFVuY2hlY2tlZFdhcm5pbmdJREVBMjY3MzgoKSB0aHJvd3MgRXhjZXB0aW9uIHsgZG9UZXN0KHRydWUsIGZhbHNlKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0RGVmYXVsdE1ldGhvZFZpc2liaWxpdHkoKSB0aHJvd3MgRXhjZXB0aW9uIHsgZG9UZXN0KHRydWUsIGZhbHNlKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0RW5jbG9zaW5nSW5zdGFuY2UoKSB0aHJvd3MgRXhjZXB0aW9uIHsgZG9UZXN0KGZhbHNlLCBmYWxzZSk7IH0KKyAgcHVibGljIHZvaWQgdGVzdFdyb25nQXJnc0FuZFVua25vd25UeXBlUGFyYW1zKCkgdGhyb3dzIEV4Y2VwdGlvbiB7IGRvVGVzdChmYWxzZSwgZmFsc2UpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RBbWJpZ3VvdXNNZXRob2RDYWxsSURFQTk3OTgzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7IGRvVGVzdChmYWxzZSwgZmFsc2UpOyB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovY29kZUluc2lnaHQvZGFlbW9uL0xpZ2h0QWR2SGlnaGxpZ2h0aW5nUGVyZm9ybWFuY2VUZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovY29kZUluc2lnaHQvZGFlbW9uL0xpZ2h0QWR2SGlnaGxpZ2h0aW5nUGVyZm9ybWFuY2VUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTMzMWUzMwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9jb2RlSW5zaWdodC9kYWVtb24vTGlnaHRBZHZIaWdobGlnaHRpbmdQZXJmb3JtYW5jZVRlc3QuamF2YQpAQCAtMCwwICsxLDEyNyBAQAorLyoKKyAqIENvcHlyaWdodCAyMDAwLTIwMTIgSmV0QnJhaW5zIHMuci5vLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KK3BhY2thZ2UgY29tLmludGVsbGlqLmNvZGVJbnNpZ2h0LmRhZW1vbjsKKworaW1wb3J0IGNvbS5pbnRlbGxpai5jb2RlSW5zaWdodC5kYWVtb24uaW1wbC5IaWdobGlnaHRJbmZvOworaW1wb3J0IGNvbS5pbnRlbGxpai5jb2RlSW5zaWdodC5pbnRlbnRpb24uSW50ZW50aW9uTWFuYWdlcjsKK2ltcG9ydCBjb20uaW50ZWxsaWouY29uY3VycmVuY3kuSm9iU2NoZWR1bGVySW1wbDsKK2ltcG9ydCBjb20uaW50ZWxsaWoubGFuZy5MYW5ndWFnZUFubm90YXRvcnM7CitpbXBvcnQgY29tLmludGVsbGlqLmxhbmcuaW5qZWN0aW9uLk11bHRpSG9zdEluamVjdG9yOworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLkRpc3Bvc2FibGU7CitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkuYXBwbGljYXRpb24uZXguUGF0aE1hbmFnZXJFeDsKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS5leHRlbnNpb25zLkV4dGVuc2lvblBvaW50OworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLmV4dGVuc2lvbnMuRXh0ZW5zaW9uczsKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS51dGlsLkRpc3Bvc2VyOworaW1wb3J0IGNvbS5pbnRlbGxpai5wc2kuUHNpRG9jdW1lbnRNYW5hZ2VyOworaW1wb3J0IGNvbS5pbnRlbGxpai5wc2kuaW1wbC5zb3VyY2UudHJlZS5pbmplY3RlZC5KYXZhQ29uY2F0ZW5hdGlvbkluamVjdG9yTWFuYWdlcjsKK2ltcG9ydCBjb20uaW50ZWxsaWoudGVzdEZyYW1ld29yay5QbGF0Zm9ybVRlc3RVdGlsOworaW1wb3J0IGNvbS5pbnRlbGxpai50ZXN0RnJhbWV3b3JrLmZpeHR1cmVzLmltcGwuQ29kZUluc2lnaHRUZXN0Rml4dHVyZUltcGw7CitpbXBvcnQgY29tLmludGVsbGlqLnV0aWwuVGhyb3dhYmxlUnVubmFibGU7CisKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitwdWJsaWMgY2xhc3MgTGlnaHRBZHZIaWdobGlnaHRpbmdQZXJmb3JtYW5jZVRlc3QgZXh0ZW5kcyBMaWdodERhZW1vbkFuYWx5emVyVGVzdENhc2UgeworICBwcml2YXRlIGZpbmFsIERpc3Bvc2FibGUgbXkgPSBEaXNwb3Nlci5uZXdEaXNwb3NhYmxlKCk7CisgIEBPdmVycmlkZQorICBwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24geworICAgIHN1cGVyLnNldFVwKCk7CisKKyAgICBEaXNwb3Nlci5yZWdpc3RlcihteSwgQmxvY2tFeHRlbnNpb25zLmNyZWF0ZShFeHRlbnNpb25zLmdldFJvb3RBcmVhKCkuZ2V0RXh0ZW5zaW9uUG9pbnQoTGFuZ3VhZ2VBbm5vdGF0b3JzLkVQX05BTUUpKSk7CisgICAgRGlzcG9zZXIucmVnaXN0ZXIobXksIEJsb2NrRXh0ZW5zaW9ucy5jcmVhdGUoRXh0ZW5zaW9ucy5nZXRSb290QXJlYSgpLmdldEV4dGVuc2lvblBvaW50KExpbmVNYXJrZXJQcm92aWRlcnMuRVBfTkFNRSkpKTsKKyAgICBEaXNwb3Nlci5yZWdpc3RlcihteSwgQmxvY2tFeHRlbnNpb25zLmNyZWF0ZShFeHRlbnNpb25zLmdldEFyZWEoZ2V0UHJvamVjdCgpKS5nZXRFeHRlbnNpb25Qb2ludChKYXZhQ29uY2F0ZW5hdGlvbkluamVjdG9yTWFuYWdlci5DT05DQVRFTkFUSU9OX0lOSkVDVE9SX0VQX05BTUUpKSk7CisgICAgRGlzcG9zZXIucmVnaXN0ZXIobXksIEJsb2NrRXh0ZW5zaW9ucy5jcmVhdGUoRXh0ZW5zaW9ucy5nZXRBcmVhKGdldFByb2plY3QoKSkuZ2V0RXh0ZW5zaW9uUG9pbnQoTXVsdGlIb3N0SW5qZWN0b3IuTVVMVElIT1NUX0lOSkVDVE9SX0VQX05BTUUpKSk7CisKKyAgICBJbnRlbnRpb25NYW5hZ2VyLmdldEluc3RhbmNlKCkuZ2V0QXZhaWxhYmxlSW50ZW50aW9uQWN0aW9ucygpOyAgLy8gaGFjayB0byBhdm9pZCBzbG93ZG93bnMgaW4gUHlFeHRlbnNpb25GYWN0b3J5CisgICAgUGF0aE1hbmFnZXJFeC5nZXRUZXN0RGF0YVBhdGgoKTsgLy8gdG8gY2FjaGUgc3R1ZmYKKyAgfQorCisgIEBPdmVycmlkZQorICBwcm90ZWN0ZWQgdm9pZCB0ZWFyRG93bigpIHRocm93cyBFeGNlcHRpb24geworICAgIERpc3Bvc2VyLmRpc3Bvc2UobXkpOworICAgIHN1cGVyLnRlYXJEb3duKCk7CisgIH0KKworICBwcml2YXRlIHN0YXRpYyBjbGFzcyBCbG9ja0V4dGVuc2lvbnM8VD4gaW1wbGVtZW50cyBEaXNwb3NhYmxlIHsKKyAgICBwcml2YXRlIGZpbmFsIEV4dGVuc2lvblBvaW50PFQ+IG15RXA7CisgICAgcHJpdmF0ZSBUW10gbXlFeHRlbnNpb25zOworICAgIHB1YmxpYyBCbG9ja0V4dGVuc2lvbnMoRXh0ZW5zaW9uUG9pbnQ8VD4gZXh0ZW5zaW9uUG9pbnQpIHsKKyAgICAgIG15RXAgPSBleHRlbnNpb25Qb2ludDsKKyAgICAgIGJsb2NrKCk7CisgICAgfQorICAgIHZvaWQgYmxvY2soKSB7CisgICAgICBteUV4dGVuc2lvbnMgPSBteUVwLmdldEV4dGVuc2lvbnMoKTsKKyAgICAgIGZvciAoVCBleHRlbnNpb24gOiBteUV4dGVuc2lvbnMpIHsKKyAgICAgICAgbXlFcC51bnJlZ2lzdGVyRXh0ZW5zaW9uKGV4dGVuc2lvbik7CisgICAgICB9CisgICAgfQorCisgICAgdm9pZCB1bmJsb2NrKCkgeworICAgICAgZm9yIChUIGV4dGVuc2lvbiA6IG15RXh0ZW5zaW9ucykgeworICAgICAgICBteUVwLnJlZ2lzdGVyRXh0ZW5zaW9uKGV4dGVuc2lvbik7CisgICAgICB9CisgICAgICBteUV4dGVuc2lvbnMgPSBudWxsOworICAgIH0KKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgdm9pZCBkaXNwb3NlKCkgeworICAgICAgdW5ibG9jaygpOworICAgIH0KKyAgICBwdWJsaWMgc3RhdGljIDxUPiBCbG9ja0V4dGVuc2lvbnM8VD4gY3JlYXRlKEV4dGVuc2lvblBvaW50PFQ+IGV4dGVuc2lvblBvaW50KSB7CisgICAgICByZXR1cm4gbmV3IEJsb2NrRXh0ZW5zaW9uczxUPihleHRlbnNpb25Qb2ludCk7CisgICAgfQorICB9CisKKyAgcHJpdmF0ZSBTdHJpbmcgZ2V0RmlsZVBhdGgoZmluYWwgU3RyaW5nIHN1ZmZpeCkgeworICAgIHJldHVybiBMaWdodEFkdkhpZ2hsaWdodGluZ1Rlc3QuQkFTRV9QQVRIICsgIi8iICsgZ2V0VGVzdE5hbWUodHJ1ZSkgKyBzdWZmaXggKyAiLmphdmEiOworICB9CisKKyAgcHJpdmF0ZSBMaXN0PEhpZ2hsaWdodEluZm8+IGRvVGVzdChmaW5hbCBpbnQgbWF4TWlsbGlzKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBjb25maWd1cmVCeUZpbGUoZ2V0RmlsZVBhdGgoIiIpKTsKKworICAgIFBzaURvY3VtZW50TWFuYWdlci5nZXRJbnN0YW5jZShnZXRQcm9qZWN0KCkpLmNvbW1pdEFsbERvY3VtZW50cygpOworICAgIGdldEZpbGUoKS5nZXRUZXh0KCk7IC8vdG8gbG9hZCB0ZXh0CisgICAgQ29kZUluc2lnaHRUZXN0Rml4dHVyZUltcGwuZW5zdXJlSW5kZXhlc1VwVG9EYXRlKGdldFByb2plY3QoKSk7CisKKyAgICBmaW5hbCBMaXN0PEhpZ2hsaWdodEluZm8+IGluZm9zID0gbmV3IEFycmF5TGlzdDxIaWdobGlnaHRJbmZvPigpOworICAgIFBsYXRmb3JtVGVzdFV0aWwuc3RhcnRQZXJmb3JtYW5jZVRlc3QoZ2V0VGVzdE5hbWUoZmFsc2UpLCBtYXhNaWxsaXMsIG5ldyBUaHJvd2FibGVSdW5uYWJsZSgpIHsKKyAgICAgIEBPdmVycmlkZQorICAgICAgcHVibGljIHZvaWQgcnVuKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIGluZm9zLmNsZWFyKCk7CisgICAgICAgIERhZW1vbkNvZGVBbmFseXplci5nZXRJbnN0YW5jZShnZXRQcm9qZWN0KCkpLnJlc3RhcnQoKTsKKyAgICAgICAgTGlzdDxIaWdobGlnaHRJbmZvPiBoID0gZG9IaWdobGlnaHRpbmcoKTsKKyAgICAgICAgaW5mb3MuYWRkQWxsKGgpOworICAgICAgfQorICAgIH0pLmNwdUJvdW5kKCkudXNlc0FsbENQVUNvcmVzKCkuYXNzZXJ0VGltaW5nKCk7CisKKyAgICByZXR1cm4gaGlnaGxpZ2h0RXJyb3JzKCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0QVRoaW5sZXQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBMaXN0PEhpZ2hsaWdodEluZm8+IGVycm9ycyA9IGRvVGVzdChNYXRoLm1heCgxMDAwMCwgMjQwMDAgLSBKb2JTY2hlZHVsZXJJbXBsLkNPUkVTX0NPVU5UICogMTAwMCkpOworICAgIGlmICgxMjI2ICE9IGVycm9ycy5zaXplKCkpIHsKKyAgICAgIGRvVGVzdChnZXRGaWxlUGF0aCgiX2hsIiksIGZhbHNlLCBmYWxzZSk7CisgICAgICBmYWlsKCJBY3R1YWw6ICIgKyBlcnJvcnMuc2l6ZSgpKTsKKyAgICB9CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0QUNsYXNzTG9hZGVyKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgTGlzdDxIaWdobGlnaHRJbmZvPiBlcnJvcnMgPSBkb1Rlc3QoTWF0aC5tYXgoMTAwMCwgMTAwMDAgLSBKb2JTY2hlZHVsZXJJbXBsLkNPUkVTX0NPVU5UICogMTAwMCkpOworICAgIGlmICgxNzMgIT0gZXJyb3JzLnNpemUoKSkgeworICAgICAgZG9UZXN0KGdldEZpbGVQYXRoKCJfaGwiKSwgZmFsc2UsIGZhbHNlKTsKKyAgICAgIGZhaWwoIkFjdHVhbDogIiArIGVycm9ycy5zaXplKCkpOworICAgIH0KKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNpZ2h0L2RhZW1vbi9MaWdodEFkdkhpZ2hsaWdodGluZ1Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9jb2RlSW5zaWdodC9kYWVtb24vTGlnaHRBZHZIaWdobGlnaHRpbmdUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTliMWViYwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9jb2RlSW5zaWdodC9kYWVtb24vTGlnaHRBZHZIaWdobGlnaHRpbmdUZXN0LmphdmEKQEAgLTAsMCArMSwzNjMgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwMC0yMDEyIEpldEJyYWlucyBzLnIuby4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCitwYWNrYWdlIGNvbS5pbnRlbGxpai5jb2RlSW5zaWdodC5kYWVtb247CisKK2ltcG9ydCBjb20uaW50ZWxsaWouRXh0ZW5zaW9uUG9pbnRzOworaW1wb3J0IGNvbS5pbnRlbGxpai5jb2RlSW5zaWdodC5kYWVtb24uaW1wbC5IaWdobGlnaHRJbmZvOworaW1wb3J0IGNvbS5pbnRlbGxpai5jb2RlSW5zcGVjdGlvbi5Mb2NhbEluc3BlY3Rpb25Ub29sOworaW1wb3J0IGNvbS5pbnRlbGxpai5jb2RlSW5zcGVjdGlvbi5hY2Nlc3NTdGF0aWNWaWFJbnN0YW5jZS5BY2Nlc3NTdGF0aWNWaWFJbnN0YW5jZTsKK2ltcG9ydCBjb20uaW50ZWxsaWouY29kZUluc3BlY3Rpb24uZGVhZENvZGUuVW51c2VkRGVjbGFyYXRpb25JbnNwZWN0aW9uOworaW1wb3J0IGNvbS5pbnRlbGxpai5jb2RlSW5zcGVjdGlvbi5kZXByZWNhdGlvbi5EZXByZWNhdGlvbkluc3BlY3Rpb247CitpbXBvcnQgY29tLmludGVsbGlqLmNvZGVJbnNwZWN0aW9uLmphdmFEb2MuSmF2YURvY0xvY2FsSW5zcGVjdGlvbjsKK2ltcG9ydCBjb20uaW50ZWxsaWouY29kZUluc3BlY3Rpb24ucmVmZXJlbmNlLkVudHJ5UG9pbnQ7CitpbXBvcnQgY29tLmludGVsbGlqLmNvZGVJbnNwZWN0aW9uLnJlZmVyZW5jZS5SZWZFbGVtZW50OworaW1wb3J0IGNvbS5pbnRlbGxpai5jb2RlSW5zcGVjdGlvbi5zaWxseUFzc2lnbm1lbnQuU2lsbHlBc3NpZ25tZW50SW5zcGVjdGlvbjsKK2ltcG9ydCBjb20uaW50ZWxsaWouY29kZUluc3BlY3Rpb24udW5jaGVja2VkV2FybmluZ3MuVW5jaGVja2VkV2FybmluZ0xvY2FsSW5zcGVjdGlvbjsKK2ltcG9ydCBjb20uaW50ZWxsaWouY29kZUluc3BlY3Rpb24udW5uZWVkZWRUaHJvd3MuUmVkdW5kYW50VGhyb3dzRGVjbGFyYXRpb247CitpbXBvcnQgY29tLmludGVsbGlqLmNvZGVJbnNwZWN0aW9uLnVudXNlZEltcG9ydC5VbnVzZWRJbXBvcnRMb2NhbEluc3BlY3Rpb247CitpbXBvcnQgY29tLmludGVsbGlqLmNvZGVJbnNwZWN0aW9uLnVudXNlZFN5bWJvbC5VbnVzZWRTeW1ib2xMb2NhbEluc3BlY3Rpb247CitpbXBvcnQgY29tLmludGVsbGlqLmxhbmcuTGFuZ3VhZ2U7CitpbXBvcnQgY29tLmludGVsbGlqLmxhbmcuTGFuZ3VhZ2VBbm5vdGF0b3JzOworaW1wb3J0IGNvbS5pbnRlbGxpai5sYW5nLmFubm90YXRpb24uQW5ub3RhdGlvbkhvbGRlcjsKK2ltcG9ydCBjb20uaW50ZWxsaWoubGFuZy5hbm5vdGF0aW9uLkFubm90YXRvcjsKK2ltcG9ydCBjb20uaW50ZWxsaWoubGFuZy5hbm5vdGF0aW9uLkhpZ2hsaWdodFNldmVyaXR5OworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLmFwcGxpY2F0aW9uLkFwcGxpY2F0aW9uTWFuYWdlcjsKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS5leHRlbnNpb25zLkV4dGVuc2lvblBvaW50OworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLmV4dGVuc2lvbnMuRXh0ZW5zaW9uczsKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS5maWxlVHlwZXMuU3RkRmlsZVR5cGVzOworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLnJvb3RzLkxhbmd1YWdlTGV2ZWxQcm9qZWN0RXh0ZW5zaW9uOworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLnZmcy5WZnNVdGlsOworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLnZmcy5WaXJ0dWFsRmlsZTsKK2ltcG9ydCBjb20uaW50ZWxsaWoucG9tLmphdmEuTGFuZ3VhZ2VMZXZlbDsKK2ltcG9ydCBjb20uaW50ZWxsaWoucHNpLio7CitpbXBvcnQgY29tLmludGVsbGlqLnBzaS54bWwuWG1sQXR0cmlidXRlOworaW1wb3J0IGNvbS5pbnRlbGxpai5wc2kueG1sLlhtbFRhZzsKK2ltcG9ydCBjb20uaW50ZWxsaWoucHNpLnhtbC5YbWxUb2tlbjsKK2ltcG9ydCBjb20uaW50ZWxsaWoucHNpLnhtbC5YbWxUb2tlblR5cGU7CitpbXBvcnQgb3JnLmpkb20uRWxlbWVudDsKK2ltcG9ydCBvcmcuamV0YnJhaW5zLmFubm90YXRpb25zLk5vbk5sczsKK2ltcG9ydCBvcmcuamV0YnJhaW5zLmFubm90YXRpb25zLk5vdE51bGw7CisKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCisvKioKKyAqIFRoaXMgY2xhc3MgaXMgZm9yICJsaWdodHdlaWdodCIgdGVzdHMgb25seSwgaS5lLiB0aG9zZSB3aGljaCBjYW4gcnVuIGluc2lkZSBkZWZhdWx0IGxpZ2h0IHByb2plY3Qgc2V0IHVwCisgKiBGb3IgImhlYXZ5d2VpZ2h0IiB0ZXN0cyB1c2UgQWR2SGlnaGxpZ2h0aW5nVGVzdAorICovCitwdWJsaWMgY2xhc3MgTGlnaHRBZHZIaWdobGlnaHRpbmdUZXN0IGV4dGVuZHMgTGlnaHREYWVtb25BbmFseXplclRlc3RDYXNlIHsKKyAgQE5vbk5scyBzdGF0aWMgZmluYWwgU3RyaW5nIEJBU0VfUEFUSCA9ICIvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2FkdkhpZ2hsaWdodGluZyI7CisKKyAgcHJpdmF0ZSBVbnVzZWRTeW1ib2xMb2NhbEluc3BlY3Rpb24gbXlVbnVzZWRTeW1ib2xMb2NhbEluc3BlY3Rpb247CisKKyAgcHJpdmF0ZSB2b2lkIGRvVGVzdChib29sZWFuIGNoZWNrV2FybmluZ3MsIGJvb2xlYW4gY2hlY2tJbmZvcykgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KEJBU0VfUEFUSCArICIvIiArIGdldFRlc3ROYW1lKGZhbHNlKSArICIuamF2YSIsIGNoZWNrV2FybmluZ3MsIGNoZWNrSW5mb3MpOworICB9CisKKyAgQE92ZXJyaWRlCisgIHByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgc3VwZXIuc2V0VXAoKTsKKyAgICBzZXRMYW5ndWFnZUxldmVsKExhbmd1YWdlTGV2ZWwuSkRLXzFfNCk7CisgIH0KKworICBAT3ZlcnJpZGUKKyAgcHJvdGVjdGVkIExvY2FsSW5zcGVjdGlvblRvb2xbXSBjb25maWd1cmVMb2NhbEluc3BlY3Rpb25Ub29scygpIHsKKyAgICByZXR1cm4gbmV3IExvY2FsSW5zcGVjdGlvblRvb2xbXXsKKyAgICAgIG5ldyBTaWxseUFzc2lnbm1lbnRJbnNwZWN0aW9uKCksCisgICAgICBuZXcgQWNjZXNzU3RhdGljVmlhSW5zdGFuY2UoKSwKKyAgICAgIG5ldyBEZXByZWNhdGlvbkluc3BlY3Rpb24oKSwKKyAgICAgIG5ldyBSZWR1bmRhbnRUaHJvd3NEZWNsYXJhdGlvbigpLAorICAgICAgbXlVbnVzZWRTeW1ib2xMb2NhbEluc3BlY3Rpb24gPSBuZXcgVW51c2VkU3ltYm9sTG9jYWxJbnNwZWN0aW9uKCksCisgICAgICBuZXcgVW51c2VkSW1wb3J0TG9jYWxJbnNwZWN0aW9uKCksCisgICAgICBuZXcgVW5jaGVja2VkV2FybmluZ0xvY2FsSW5zcGVjdGlvbigpCisgICAgfTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RDYW5IYXZlQm9keSgpIHRocm93cyBFeGNlcHRpb24geyBkb1Rlc3QoZmFsc2UsIGZhbHNlKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0SW5oZXJpdEZpbmFsKCkgdGhyb3dzIEV4Y2VwdGlvbiB7IGRvVGVzdChmYWxzZSwgZmFsc2UpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RCcmVha091dHNpZGUoKSB0aHJvd3MgRXhjZXB0aW9uIHsgZG9UZXN0KGZhbHNlLCBmYWxzZSk7IH0KKyAgcHVibGljIHZvaWQgdGVzdExvb3AoKSB0aHJvd3MgRXhjZXB0aW9uIHsgZG9UZXN0KGZhbHNlLCBmYWxzZSk7IH0KKyAgcHVibGljIHZvaWQgdGVzdElsbGVnYWxNb2RpZmllcnNDb21iaW5hdGlvbigpIHRocm93cyBFeGNlcHRpb24geyBkb1Rlc3QoZmFsc2UsIGZhbHNlKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0TW9kaWZpZXJBbGxvd2VkKCkgdGhyb3dzIEV4Y2VwdGlvbiB7IGRvVGVzdChmYWxzZSwgZmFsc2UpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RBYnN0cmFjdE1ldGhvZHMoKSB0aHJvd3MgRXhjZXB0aW9uIHsgZG9UZXN0KGZhbHNlLCBmYWxzZSk7IH0KKyAgcHVibGljIHZvaWQgdGVzdEluc3RhbnRpYXRlQWJzdHJhY3QoKSB0aHJvd3MgRXhjZXB0aW9uIHsgZG9UZXN0KGZhbHNlLCBmYWxzZSk7IH0KKyAgcHVibGljIHZvaWQgdGVzdER1cGxpY2F0ZUNsYXNzTWV0aG9kKCkgdGhyb3dzIEV4Y2VwdGlvbiB7IGRvVGVzdChmYWxzZSwgZmFsc2UpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RTdHJpbmdMaXRlcmFscygpIHRocm93cyBFeGNlcHRpb24geyBkb1Rlc3QoZmFsc2UsIGZhbHNlKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0U3RhdGljSW5Jbm5lcigpIHRocm93cyBFeGNlcHRpb24geyBkb1Rlc3QoZmFsc2UsIGZhbHNlKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0SW52YWxpZEV4cHJlc3Npb25zKCkgdGhyb3dzIEV4Y2VwdGlvbiB7IGRvVGVzdChmYWxzZSwgZmFsc2UpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RJbGxlZ2FsVm9pZFR5cGUoKSB0aHJvd3MgRXhjZXB0aW9uIHsgZG9UZXN0KGZhbHNlLCBmYWxzZSk7IH0KKyAgcHVibGljIHZvaWQgdGVzdElsbGVnYWxUeXBlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7IGRvVGVzdChmYWxzZSwgZmFsc2UpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RPcGVyYXRvckFwcGxpY2FiaWxpdHkoKSB0aHJvd3MgRXhjZXB0aW9uIHsgZG9UZXN0KGZhbHNlLCBmYWxzZSk7IH0KKyAgcHVibGljIHZvaWQgdGVzdEluY29tcGF0aWJsZVR5cGVzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7IGRvVGVzdChmYWxzZSwgZmFsc2UpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RDdHJDYWxsSXNGaXJzdCgpIHRocm93cyBFeGNlcHRpb24geyBkb1Rlc3QoZmFsc2UsIGZhbHNlKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0QWNjZXNzTGV2ZWxDbGFzaCgpIHRocm93cyBFeGNlcHRpb24geyBkb1Rlc3QoZmFsc2UsIGZhbHNlKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0Q2FzdHMoKSB0aHJvd3MgRXhjZXB0aW9uIHsgZG9UZXN0KGZhbHNlLCBmYWxzZSk7IH0KKyAgcHVibGljIHZvaWQgdGVzdE92ZXJyaWRlQ29uZmxpY3RzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7IGRvVGVzdChmYWxzZSwgZmFsc2UpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RPdmVycmlkZGVuTWV0aG9kSXNGaW5hbCgpIHRocm93cyBFeGNlcHRpb24geyBkb1Rlc3QoZmFsc2UsIGZhbHNlKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0TWlzc2luZ1JldHVybigpIHRocm93cyBFeGNlcHRpb24geyBkb1Rlc3QoZmFsc2UsIGZhbHNlKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0VW5yZWFjaGFibGUoKSB0aHJvd3MgRXhjZXB0aW9uIHsgZG9UZXN0KGZhbHNlLCBmYWxzZSk7IH0KKyAgcHVibGljIHZvaWQgdGVzdEZpbmFsRmllbGRJbml0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7IGRvVGVzdChmYWxzZSwgZmFsc2UpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RMb2NhbFZhcmlhYmxlSW5pdGlhbGl6YXRpb24oKSB0aHJvd3MgRXhjZXB0aW9uIHsgZG9UZXN0KGZhbHNlLCBmYWxzZSk7IH0KKyAgcHVibGljIHZvaWQgdGVzdFZhckRvdWJsZUluaXRpYWxpemF0aW9uKCkgdGhyb3dzIEV4Y2VwdGlvbiB7IGRvVGVzdChmYWxzZSwgZmFsc2UpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RGaWVsZERvdWJsZUluaXRpYWxpemF0aW9uKCkgdGhyb3dzIEV4Y2VwdGlvbiB7IGRvVGVzdChmYWxzZSwgZmFsc2UpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RBc3NpZ25Ub0ZpbmFsKCkgdGhyb3dzIEV4Y2VwdGlvbiB7IGRvVGVzdChmYWxzZSwgZmFsc2UpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RVbmhhbmRsZWRFeGNlcHRpb25zSW5TdXBlcmNsYXNzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7IGRvVGVzdChmYWxzZSwgZmFsc2UpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RBc3NpZ25tZW50Q29tcGF0aWJsZSAoKSB0aHJvd3MgRXhjZXB0aW9uIHsgZG9UZXN0KGZhbHNlLCBmYWxzZSk7IH0KKyAgcHVibGljIHZvaWQgdGVzdE11c3RCZUJvb2xlYW4oKSB0aHJvd3MgRXhjZXB0aW9uIHsgZG9UZXN0KGZhbHNlLCBmYWxzZSk7IH0KKworICBwdWJsaWMgdm9pZCB0ZXN0TnVtZXJpY0xpdGVyYWxzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7IGRvVGVzdChmYWxzZSwgZmFsc2UpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RJbml0aWFsaXplckNvbXBsZXRpb24oKSB0aHJvd3MgRXhjZXB0aW9uIHsgZG9UZXN0KGZhbHNlLCBmYWxzZSk7IH0KKworICBwdWJsaWMgdm9pZCB0ZXN0VW5kZWZpbmVkTGFiZWwoKSB0aHJvd3MgRXhjZXB0aW9uIHsgZG9UZXN0KGZhbHNlLCBmYWxzZSk7IH0KKyAgcHVibGljIHZvaWQgdGVzdER1cGxpY2F0ZVN3aXRjaExhYmVscygpIHRocm93cyBFeGNlcHRpb24geyBkb1Rlc3QoZmFsc2UsIGZhbHNlKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0U3RyaW5nU3dpdGNoTGFiZWxzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7IGRvVGVzdChmYWxzZSwgZmFsc2UpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RJbGxlZ2FsRm9yd2FyZFJlZmVyZW5jZSgpIHRocm93cyBFeGNlcHRpb24geyBkb1Rlc3QoZmFsc2UsIGZhbHNlKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0U3RhdGljT3ZlcnJpZGUoKSB0aHJvd3MgRXhjZXB0aW9uIHsgZG9UZXN0KGZhbHNlLCBmYWxzZSk7IH0KKyAgcHVibGljIHZvaWQgdGVzdEN5Y2xpY0luaGVyaXRhbmNlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7IGRvVGVzdChmYWxzZSwgZmFsc2UpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RSZWZlcmVuY2VNZW1iZXJCZWZvcmVDdHJDYWxsZWQoKSB0aHJvd3MgRXhjZXB0aW9uIHsgZG9UZXN0KGZhbHNlLCBmYWxzZSk7IH0KKyAgcHVibGljIHZvaWQgdGVzdExhYmVscygpIHRocm93cyBFeGNlcHRpb24geyBkb1Rlc3QoZmFsc2UsIGZhbHNlKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0VW5jbG9zZWRCbG9ja0NvbW1lbnQoKSB0aHJvd3MgRXhjZXB0aW9uIHsgZG9UZXN0KGZhbHNlLCBmYWxzZSk7IH0KKyAgcHVibGljIHZvaWQgdGVzdFVuY2xvc2VkQ29tbWVudCgpIHRocm93cyBFeGNlcHRpb24geyBkb1Rlc3QoZmFsc2UsIGZhbHNlKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0VW5jbG9zZWREZWNsKCkgdGhyb3dzIEV4Y2VwdGlvbiB7IGRvVGVzdChmYWxzZSwgZmFsc2UpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RTaWxseUFzc2lnbm1lbnQoKSB0aHJvd3MgRXhjZXB0aW9uIHsgZG9UZXN0KHRydWUsIGZhbHNlKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0VGVybmFyeSgpIHRocm93cyBFeGNlcHRpb24geyBkb1Rlc3QoZmFsc2UsIGZhbHNlKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0RHVwbGljYXRlQ2xhc3MoKSB0aHJvd3MgRXhjZXB0aW9uIHsgZG9UZXN0KGZhbHNlLCBmYWxzZSk7IH0KKyAgcHVibGljIHZvaWQgdGVzdENhdGNoVHlwZSgpIHRocm93cyBFeGNlcHRpb24geyBkb1Rlc3QoZmFsc2UsIGZhbHNlKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0TXVzdEJlVGhyb3dhYmxlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7IGRvVGVzdChmYWxzZSwgZmFsc2UpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RVbmhhbmRsZWRNZXNzaW5nV2l0aEZpbmFsbHkoKSB0aHJvd3MgRXhjZXB0aW9uIHsgZG9UZXN0KGZhbHNlLCBmYWxzZSk7IH0KKyAgcHVibGljIHZvaWQgdGVzdFNlcmlhbGl6YWJsZVN0dWZmKCkgdGhyb3dzIEV4Y2VwdGlvbiB7IGRvVGVzdCh0cnVlLCBmYWxzZSk7IH0KKyAgcHVibGljIHZvaWQgdGVzdERlcHJlY2F0ZWQoKSB0aHJvd3MgRXhjZXB0aW9uIHsgZG9UZXN0KHRydWUsIGZhbHNlKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0SmF2YWRvYygpIHRocm93cyBFeGNlcHRpb24geyBlbmFibGVJbnNwZWN0aW9uVG9vbChuZXcgSmF2YURvY0xvY2FsSW5zcGVjdGlvbigpKTsgZG9UZXN0KHRydWUsIGZhbHNlKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0RXhwcmVzc2lvbnNJblN3aXRjaCAoKSB0aHJvd3MgRXhjZXB0aW9uIHsgZG9UZXN0KGZhbHNlLCBmYWxzZSk7IH0KKyAgcHVibGljIHZvaWQgdGVzdEFjY2Vzc0lubmVyICgpIHRocm93cyBFeGNlcHRpb24geyBkb1Rlc3QoZmFsc2UsIGZhbHNlKTsgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RFeGNlcHRpb25OZXZlclRocm93bigpIHRocm93cyBFeGNlcHRpb24geyBkb1Rlc3QodHJ1ZSwgZmFsc2UpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RFeGNlcHRpb25OZXZlclRocm93bkluVHJ5KCkgdGhyb3dzIEV4Y2VwdGlvbiB7IGRvVGVzdChmYWxzZSwgZmFsc2UpOyB9CisKKyAgcHVibGljIHZvaWQgdGVzdFN3aXRjaFN0YXRlbWVudCgpIHRocm93cyBFeGNlcHRpb24geyBkb1Rlc3QoZmFsc2UsIGZhbHNlKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0QXNzZXJ0RXhwcmVzc2lvbigpIHRocm93cyBFeGNlcHRpb24geyBkb1Rlc3QoZmFsc2UsIGZhbHNlKTsgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RTeW5jaHJvbml6ZWRFeHByZXNzaW9uKCkgdGhyb3dzIEV4Y2VwdGlvbiB7IGRvVGVzdChmYWxzZSwgZmFsc2UpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RFeHRlbmRNdWx0aXBsZUNsYXNzZXMoKSB0aHJvd3MgRXhjZXB0aW9uIHsgZG9UZXN0KGZhbHNlLCBmYWxzZSk7IH0KKyAgcHVibGljIHZvaWQgdGVzdFJlY3Vyc2l2ZUNvbnN0cnVjdG9ySW52b2NhdGlvbigpIHRocm93cyBFeGNlcHRpb24geyBkb1Rlc3QoZmFsc2UsIGZhbHNlKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0TWV0aG9kQ2FsbHMoKSB0aHJvd3MgRXhjZXB0aW9uIHsgZG9UZXN0KGZhbHNlLCBmYWxzZSk7IH0KKyAgcHVibGljIHZvaWQgdGVzdFNpbmdsZVR5cGVJbXBvcnRDb25mbGljdHMoKSB0aHJvd3MgRXhjZXB0aW9uIHsgZG9UZXN0KGZhbHNlLCBmYWxzZSk7IH0KKyAgcHVibGljIHZvaWQgdGVzdE11bHRpcGxlU2luZ2xlVHlwZUltcG9ydHMoKSB0aHJvd3MgRXhjZXB0aW9uIHsgZG9UZXN0KHRydWUsIGZhbHNlKTsgfSAvL2R1cGxpY2F0ZSBpbXBvcnRzCisgIHB1YmxpYyB2b2lkIHRlc3ROb3RBbGxvd2VkSW5JbnRlcmZhY2UoKSB0aHJvd3MgRXhjZXB0aW9uIHsgZG9UZXN0KGZhbHNlLCBmYWxzZSk7IH0KKyAgcHVibGljIHZvaWQgdGVzdFF1YWxpZmllZE5ldygpIHRocm93cyBFeGNlcHRpb24geyBkb1Rlc3QoZmFsc2UsIGZhbHNlKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0RW5jbG9zaW5nSW5zdGFuY2UoKSB0aHJvd3MgRXhjZXB0aW9uIHsgZG9UZXN0KGZhbHNlLCBmYWxzZSk7IH0KKworICBwdWJsaWMgdm9pZCB0ZXN0U3RhdGljVmlhSW5zdGFuY2UoKSB0aHJvd3MgRXhjZXB0aW9uIHsgZG9UZXN0KHRydWUsIGZhbHNlKTsgfSAvLyBzdGF0aWMgdmlhIGluc3RhbmNlCisgIHB1YmxpYyB2b2lkIHRlc3RRdWFsaWZpZWRUaGlzU3VwZXIoKSB0aHJvd3MgRXhjZXB0aW9uIHsgZG9UZXN0KHRydWUsIGZhbHNlKTsgfSAvL2lsbGVnYWwgcXVhbGlmaWVkIHRoaXMgb3Igc3VwZXIKKworICBwdWJsaWMgdm9pZCB0ZXN0QW1iaWd1b3VzTWV0aG9kQ2FsbCgpIHRocm93cyBFeGNlcHRpb24geyBkb1Rlc3QoZmFsc2UsIGZhbHNlKTsgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RJbXBsaWNpdENvbnN0cnVjdG9yKCkgdGhyb3dzIEV4Y2VwdGlvbiB7IGRvVGVzdChmYWxzZSwgZmFsc2UpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3REb3RCZWZvcmVEZWNsKCkgdGhyb3dzIEV4Y2VwdGlvbiB7IGRvVGVzdChmYWxzZSwgZmFsc2UpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RDb21wdXRlQ29uc3RhbnQoKSB0aHJvd3MgRXhjZXB0aW9uIHsgZG9UZXN0KGZhbHNlLCBmYWxzZSk7IH0KKworICBwdWJsaWMgdm9pZCB0ZXN0QW5vbkluQW5vbigpIHRocm93cyBFeGNlcHRpb24geyBkb1Rlc3QoZmFsc2UsIGZhbHNlKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0QW5vbkJhc2VSZWYoKSB0aHJvd3MgRXhjZXB0aW9uIHsgZG9UZXN0KGZhbHNlLCBmYWxzZSk7IH0KKyAgcHVibGljIHZvaWQgdGVzdFJldHVybigpIHRocm93cyBFeGNlcHRpb24geyBkb1Rlc3QoZmFsc2UsIGZhbHNlKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0SW50ZXJmYWNlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7IGRvVGVzdChmYWxzZSwgZmFsc2UpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RFeHRlbmRzQ2xhdXNlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7IGRvVGVzdChmYWxzZSwgZmFsc2UpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RNdXN0QmVGaW5hbCgpIHRocm93cyBFeGNlcHRpb24geyBkb1Rlc3QoZmFsc2UsIGZhbHNlKTsgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RYWFgoKSB0aHJvd3MgRXhjZXB0aW9uIHsgZG9UZXN0KGZhbHNlLCBmYWxzZSk7IH0KKyAgcHVibGljIHZvaWQgdGVzdFVudXNlZCgpIHRocm93cyBFeGNlcHRpb24geyBkb1Rlc3QodHJ1ZSwgZmFsc2UpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RRdWFsaWZpZXJCZWZvcmVDbGFzc05hbWUoKSB0aHJvd3MgRXhjZXB0aW9uIHsgZG9UZXN0KGZhbHNlLCBmYWxzZSk7IH0KKyAgcHVibGljIHZvaWQgdGVzdFF1YWxpZmllZFN1cGVyKCkgdGhyb3dzIEV4Y2VwdGlvbiB7IGRvVGVzdChmYWxzZSwgZmFsc2UpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RDYXN0RnJvbVZvaWQoKSB0aHJvd3MgRXhjZXB0aW9uIHsgZG9UZXN0KGZhbHNlLCBmYWxzZSk7IH0KKyAgcHVibGljIHZvaWQgdGVzdENhdGNoVW5rbm93bk1ldGhvZCgpIHRocm93cyBFeGNlcHRpb24geyBkb1Rlc3QoZmFsc2UsIGZhbHNlKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0SURFQURFVjg4MjIoKSB0aHJvd3MgRXhjZXB0aW9uIHsgZG9UZXN0KGZhbHNlLCBmYWxzZSk7IH0KKyAgcHVibGljIHZvaWQgdGVzdElERUFERVY5MjAxKCkgdGhyb3dzIEV4Y2VwdGlvbiB7IGRvVGVzdChmYWxzZSwgZmFsc2UpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RJREVBREVWMTE4NzcoKSB0aHJvd3MgRXhjZXB0aW9uIHsgZG9UZXN0KGZhbHNlLCBmYWxzZSk7IH0KKyAgcHVibGljIHZvaWQgdGVzdElERUFERVYyNTc4NCgpIHRocm93cyBFeGNlcHRpb24geyBkb1Rlc3QoZmFsc2UsIGZhbHNlKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0SURFQURFVjEzMjQ5KCkgdGhyb3dzIEV4Y2VwdGlvbiB7IGRvVGVzdChmYWxzZSwgZmFsc2UpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RJREVBREVWMTE5MTkoKSB0aHJvd3MgRXhjZXB0aW9uIHsgZG9UZXN0KGZhbHNlLCBmYWxzZSk7IH0KKyAgcHVibGljIHZvaWQgdGVzdE1ldGhvZENhbm5vdEJlQXBwbGllZCgpIHRocm93cyBFeGNlcHRpb24geyBkb1Rlc3QoZmFsc2UsIGZhbHNlKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0RGVmYXVsdFBhY2thZ2VDbGFzc0luU3RhdGljSW1wb3J0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7IGRvVGVzdChmYWxzZSwgZmFsc2UpOyB9CisKKyAgcHVibGljIHZvaWQgdGVzdFVudXNlZFBhcmFtc09mUHVibGljTWV0aG9kKCkgdGhyb3dzIEV4Y2VwdGlvbiB7IGRvVGVzdCh0cnVlLCBmYWxzZSk7IH0KKyAgcHVibGljIHZvaWQgdGVzdElubmVyQ2xhc3Nlc1NoYWRvd2luZygpIHRocm93cyBFeGNlcHRpb24geyBkb1Rlc3QoZmFsc2UsIGZhbHNlKTsgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RVbnVzZWRQYXJhbXNPZlB1YmxpY01ldGhvZERpc2FibGVkKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgbXlVbnVzZWRTeW1ib2xMb2NhbEluc3BlY3Rpb24uUkVQT1JUX1BBUkFNRVRFUl9GT1JfUFVCTElDX01FVEhPRFMgPSBmYWxzZTsKKyAgICBkb1Rlc3QodHJ1ZSwgZmFsc2UpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFVudXNlZE5vblByaXZhdGVNZW1iZXJzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgVW51c2VkRGVjbGFyYXRpb25JbnNwZWN0aW9uIGRlYWRDb2RlSW5zcGVjdGlvbiA9IG5ldyBVbnVzZWREZWNsYXJhdGlvbkluc3BlY3Rpb24oKTsKKyAgICBlbmFibGVJbnNwZWN0aW9uVG9vbChkZWFkQ29kZUluc3BlY3Rpb24pOworICAgIGRvVGVzdCh0cnVlLCBmYWxzZSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0VW51c2VkTm9uUHJpdmF0ZU1lbWJlcnMyKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgRXh0ZW5zaW9uUG9pbnQ8RW50cnlQb2ludD4gcG9pbnQgPSBFeHRlbnNpb25zLmdldFJvb3RBcmVhKCkuZ2V0RXh0ZW5zaW9uUG9pbnQoRXh0ZW5zaW9uUG9pbnRzLkRFQURfQ09ERV9UT09MKTsKKyAgICBFbnRyeVBvaW50IGV4dGVuc2lvbiA9IG5ldyBFbnRyeVBvaW50KCkgeworICAgICAgQE5vdE51bGwKKyAgICAgIEBPdmVycmlkZQorICAgICAgcHVibGljIFN0cmluZyBnZXREaXNwbGF5TmFtZSgpIHsKKyAgICAgICAgcmV0dXJuICJkdWgiOworICAgICAgfQorCisgICAgICBAT3ZlcnJpZGUKKyAgICAgIHB1YmxpYyBib29sZWFuIGlzRW50cnlQb2ludChSZWZFbGVtZW50IHJlZkVsZW1lbnQsIFBzaUVsZW1lbnQgcHNpRWxlbWVudCkgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICB9CisKKyAgICAgIEBPdmVycmlkZQorICAgICAgcHVibGljIGJvb2xlYW4gaXNFbnRyeVBvaW50KFBzaUVsZW1lbnQgcHNpRWxlbWVudCkgeworICAgICAgICByZXR1cm4gcHNpRWxlbWVudCBpbnN0YW5jZW9mIFBzaU1ldGhvZCAmJiAoKFBzaU1ldGhvZClwc2lFbGVtZW50KS5nZXROYW1lKCkuZXF1YWxzKCJteVRlc3RNZXRob2QiKTsKKyAgICAgIH0KKworICAgICAgQE92ZXJyaWRlCisgICAgICBwdWJsaWMgYm9vbGVhbiBpc1NlbGVjdGVkKCkgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICB9CisKKyAgICAgIEBPdmVycmlkZQorICAgICAgcHVibGljIHZvaWQgc2V0U2VsZWN0ZWQoYm9vbGVhbiBzZWxlY3RlZCkgeyB9CisKKyAgICAgIEBPdmVycmlkZQorICAgICAgcHVibGljIHZvaWQgcmVhZEV4dGVybmFsKEVsZW1lbnQgZWxlbWVudCkgeyB9CisKKyAgICAgIEBPdmVycmlkZQorICAgICAgcHVibGljIHZvaWQgd3JpdGVFeHRlcm5hbChFbGVtZW50IGVsZW1lbnQpIHsgfQorICAgIH07CisKKyAgICBwb2ludC5yZWdpc3RlckV4dGVuc2lvbihleHRlbnNpb24pOworICAgIAorICAgIHRyeSB7CisgICAgICBVbnVzZWREZWNsYXJhdGlvbkluc3BlY3Rpb24gZGVhZENvZGVJbnNwZWN0aW9uID0gbmV3IFVudXNlZERlY2xhcmF0aW9uSW5zcGVjdGlvbigpOworICAgICAgZW5hYmxlSW5zcGVjdGlvblRvb2woZGVhZENvZGVJbnNwZWN0aW9uKTsKKworICAgICAgZG9UZXN0KHRydWUsIGZhbHNlKTsKKyAgICB9CisgICAgZmluYWxseSB7CisgICAgICBwb2ludC51bnJlZ2lzdGVyRXh0ZW5zaW9uKGV4dGVuc2lvbik7CisgICAgfQorICB9CisgIHB1YmxpYyB2b2lkIHRlc3RVbnVzZWROb25Qcml2YXRlTWVtYmVyc1JlZmVyZW5jZWRGcm9tVGV4dCgpIHRocm93cyBFeGNlcHRpb24geworICAgIFVudXNlZERlY2xhcmF0aW9uSW5zcGVjdGlvbiBkZWFkQ29kZUluc3BlY3Rpb24gPSBuZXcgVW51c2VkRGVjbGFyYXRpb25JbnNwZWN0aW9uKCk7CisgICAgZW5hYmxlSW5zcGVjdGlvblRvb2woZGVhZENvZGVJbnNwZWN0aW9uKTsKKworICAgIGRvVGVzdCh0cnVlLCBmYWxzZSk7CisgICAgQXBwbGljYXRpb25NYW5hZ2VyLmdldEFwcGxpY2F0aW9uKCkucnVuV3JpdGVBY3Rpb24obmV3IFJ1bm5hYmxlKCkgeworICAgICAgQE92ZXJyaWRlCisgICAgICBwdWJsaWMgdm9pZCBydW4oKSB7CisgICAgICAgIFBzaURpcmVjdG9yeSBkaXJlY3RvcnkgPSBteUZpbGUuZ2V0UGFyZW50KCk7CisgICAgICAgIGFzc2VydE5vdE51bGwobXlGaWxlLnRvU3RyaW5nKCksIGRpcmVjdG9yeSk7CisgICAgICAgIFBzaUZpbGUgdHh0ID0gZGlyZWN0b3J5LmNyZWF0ZUZpbGUoIngudHh0Iik7CisgICAgICAgIFZpcnR1YWxGaWxlIHZGaWxlID0gdHh0LmdldFZpcnR1YWxGaWxlKCk7CisgICAgICAgIGFzc2VydE5vdE51bGwodHh0LnRvU3RyaW5nKCksIHZGaWxlKTsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICBWZnNVdGlsLnNhdmVUZXh0KHZGaWxlLCAiWFhYIik7CisgICAgICAgIH0KKyAgICAgICAgY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbihlKTsKKyAgICAgICAgfQorICAgICAgfQorICAgIH0pOworCisgICAgTGlzdDxIaWdobGlnaHRJbmZvPiBpbmZvcyA9IGRvSGlnaGxpZ2h0aW5nKEhpZ2hsaWdodFNldmVyaXR5LldBUk5JTkcpOworICAgIGFzc2VydEVtcHR5KGluZm9zKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3ROYW1lc0hpZ2hsaWdodGluZygpIHRocm93cyBFeGNlcHRpb24geworICAgIExhbmd1YWdlTGV2ZWxQcm9qZWN0RXh0ZW5zaW9uLmdldEluc3RhbmNlKGdldEphdmFGYWNhZGUoKS5nZXRQcm9qZWN0KCkpLnNldExhbmd1YWdlTGV2ZWwoTGFuZ3VhZ2VMZXZlbC5KREtfMV81KTsKKyAgICBkb1Rlc3RGaWxlKEJBU0VfUEFUSCArICIvIiArIGdldFRlc3ROYW1lKGZhbHNlKSArICIuamF2YSIpLmNoZWNrU3ltYm9sTmFtZXMoKS50ZXN0KCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0TXVsdGlGaWVsZERlY2xOYW1lcygpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdEZpbGUoQkFTRV9QQVRIICsgIi8iICsgZ2V0VGVzdE5hbWUoZmFsc2UpICsgIi5qYXZhIikuY2hlY2tTeW1ib2xOYW1lcygpLnRlc3QoKTsKKyAgfQorCisgIHB1YmxpYyBzdGF0aWMgY2xhc3MgTXlBbm5vdGF0b3IgaW1wbGVtZW50cyBBbm5vdGF0b3IgeworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyB2b2lkIGFubm90YXRlKEBOb3ROdWxsIFBzaUVsZW1lbnQgcHNpRWxlbWVudCwgQE5vdE51bGwgZmluYWwgQW5ub3RhdGlvbkhvbGRlciBob2xkZXIpIHsKKyAgICAgIHBzaUVsZW1lbnQuYWNjZXB0KG5ldyBYbWxFbGVtZW50VmlzaXRvcigpIHsKKyAgICAgICAgQE92ZXJyaWRlIHB1YmxpYyB2b2lkIHZpc2l0WG1sVGFnKFhtbFRhZyB0YWcpIHsKKyAgICAgICAgICBYbWxBdHRyaWJ1dGUgYXR0cmlidXRlID0gdGFnLmdldEF0dHJpYnV0ZSgiYWFhIiwgIiIpOworICAgICAgICAgIGlmIChhdHRyaWJ1dGUgIT0gbnVsbCkgeworICAgICAgICAgICAgaG9sZGVyLmNyZWF0ZVdhcm5pbmdBbm5vdGF0aW9uKGF0dHJpYnV0ZSwgIkFBQVRUUiIpOworICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIEBPdmVycmlkZSBwdWJsaWMgdm9pZCB2aXNpdFhtbFRva2VuKFhtbFRva2VuIHRva2VuKSB7CisgICAgICAgICAgaWYgKHRva2VuLmdldFRva2VuVHlwZSgpID09IFhtbFRva2VuVHlwZS5YTUxfRU5USVRZX1JFRl9UT0tFTikgeworICAgICAgICAgICAgaG9sZGVyLmNyZWF0ZVdhcm5pbmdBbm5vdGF0aW9uKHRva2VuLCAiRU5USVRZIik7CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICB9KTsKKyAgICB9CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0SW5qZWN0ZWRBbm5vdGF0b3IoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBBbm5vdGF0b3IgYW5ub3RhdG9yID0gbmV3IE15QW5ub3RhdG9yKCk7CisgICAgTGFuZ3VhZ2UgeG1sID0gU3RkRmlsZVR5cGVzLlhNTC5nZXRMYW5ndWFnZSgpOworICAgIExhbmd1YWdlQW5ub3RhdG9ycy5JTlNUQU5DRS5hZGRFeHBsaWNpdEV4dGVuc2lvbih4bWwsIGFubm90YXRvcik7CisgICAgdHJ5IHsKKyAgICAgIExpc3Q8QW5ub3RhdG9yPiBsaXN0ID0gTGFuZ3VhZ2VBbm5vdGF0b3JzLklOU1RBTkNFLmFsbEZvckxhbmd1YWdlKHhtbCk7CisgICAgICBhc3NlcnRUcnVlKGxpc3QudG9TdHJpbmcoKSwgbGlzdC5jb250YWlucyhhbm5vdGF0b3IpKTsKKyAgICAgIGRvVGVzdChCQVNFX1BBVEggKyAiLyIgKyBnZXRUZXN0TmFtZShmYWxzZSkgKyAiLnhtbCIsdHJ1ZSxmYWxzZSk7CisgICAgfQorICAgIGZpbmFsbHkgeworICAgICAgTGFuZ3VhZ2VBbm5vdGF0b3JzLklOU1RBTkNFLnJlbW92ZUV4cGxpY2l0RXh0ZW5zaW9uKHhtbCwgYW5ub3RhdG9yKTsKKyAgICB9CisKKyAgICBMaXN0PEFubm90YXRvcj4gbGlzdCA9IExhbmd1YWdlQW5ub3RhdG9ycy5JTlNUQU5DRS5hbGxGb3JMYW5ndWFnZSh4bWwpOworICAgIGFzc2VydEZhbHNlKGxpc3QudG9TdHJpbmcoKSwgbGlzdC5jb250YWlucyhhbm5vdGF0b3IpKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RTT0VGb3JUeXBlT2ZIdWdlQmluYXJ5RXhwcmVzc2lvbigpIHRocm93cyBJT0V4Y2VwdGlvbiB7CisgICAgY29uZmlndXJlRnJvbUZpbGVUZXh0KCJhLmphdmEiLCAiY2xhc3MgQSB7IFN0cmluZyBzID0gXCJcIjsgfSIpOworICAgIGFzc2VydEVtcHR5KGhpZ2hsaWdodEVycm9ycygpKTsKKyAgICBQc2lEb2N1bWVudE1hbmFnZXIuZ2V0SW5zdGFuY2UoZ2V0UHJvamVjdCgpKS5jb21taXRBbGxEb2N1bWVudHMoKTsKKworICAgIGZpbmFsIFN0cmluZ0J1aWxkZXIgc2IgPSBuZXcgU3RyaW5nQnVpbGRlcigiXCItXCIiKTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IDEwMDAwOyBpKyspIHNiLmFwcGVuZCgiK1wiYlwiIik7CisgICAgZmluYWwgU3RyaW5nIGh1Z2VFeHByID0gc2IudG9TdHJpbmcoKTsKKyAgICBmaW5hbCBpbnQgcG9zID0gZ2V0RWRpdG9yKCkuZ2V0RG9jdW1lbnQoKS5nZXRUZXh0KCkuaW5kZXhPZigiXCJcIiIpOworCisgICAgQXBwbGljYXRpb25NYW5hZ2VyLmdldEFwcGxpY2F0aW9uKCkucnVuV3JpdGVBY3Rpb24obmV3IFJ1bm5hYmxlKCkgeworICAgICAgQE92ZXJyaWRlCisgICAgICBwdWJsaWMgdm9pZCBydW4oKSB7CisgICAgICAgIGdldEVkaXRvcigpLmdldERvY3VtZW50KCkucmVwbGFjZVN0cmluZyhwb3MsIHBvcyArIDIsIGh1Z2VFeHByKTsKKyAgICAgICAgUHNpRG9jdW1lbnRNYW5hZ2VyLmdldEluc3RhbmNlKGdldFByb2plY3QoKSkuY29tbWl0QWxsRG9jdW1lbnRzKCk7CisgICAgICB9CisgICAgfSk7CisKKyAgICBmaW5hbCBQc2lGaWVsZCBmaWVsZCA9ICgoUHNpSmF2YUZpbGUpZ2V0RmlsZSgpKS5nZXRDbGFzc2VzKClbMF0uZ2V0RmllbGRzKClbMF07CisgICAgZmluYWwgUHNpRXhwcmVzc2lvbiBleHByZXNzaW9uID0gZmllbGQuZ2V0SW5pdGlhbGl6ZXIoKTsKKyAgICBhc3NlcnQgZXhwcmVzc2lvbiAhPSBudWxsOworICAgIGZpbmFsIFBzaVR5cGUgdHlwZSA9IGV4cHJlc3Npb24uZ2V0VHlwZSgpOworICAgIGFzc2VydCB0eXBlICE9IG51bGw7CisgICAgYXNzZXJ0RXF1YWxzKCJQc2lUeXBlOlN0cmluZyIsIHR5cGUudG9TdHJpbmcoKSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0U09FRm9yQ3ljbGljSW5oZXJpdGFuY2UoKSB0aHJvd3MgSU9FeGNlcHRpb24geworICAgIGNvbmZpZ3VyZUZyb21GaWxlVGV4dCgiYS5qYXZhIiwgImNsYXNzIEEgZXh0ZW5kcyBCIHsgU3RyaW5nIHMgPSBcIlwiOyB2b2lkIGYoKSB7fX0gY2xhc3MgQiBleHRlbmRzIEEgeyB2b2lkIGYoKSB7fSB9ICIpOworICAgIGRvSGlnaGxpZ2h0aW5nKCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0Q2xhc3NpY1JldGhyb3coKSB0aHJvd3MgRXhjZXB0aW9uIHsgZG9UZXN0KGZhbHNlLCBmYWxzZSk7IH0KKyAgcHVibGljIHZvaWQgdGVzdFJlZ2V4cCgpIHRocm93cyBFeGNlcHRpb24geyBkb1Rlc3QoZmFsc2UsIGZhbHNlKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0VW5zdXBwb3J0ZWRGZWF0dXJlcygpIHRocm93cyBFeGNlcHRpb24geyBkb1Rlc3QoZmFsc2UsIGZhbHNlKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0VGhpc0JlZm9yZVN1cGVyKCkgdGhyb3dzIEV4Y2VwdGlvbiB7IGRvVGVzdChmYWxzZSwgZmFsc2UpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RFeHBsaWNpdENvbnN0cnVjdG9ySW52b2NhdGlvbigpIHRocm93cyBFeGNlcHRpb24geyBkb1Rlc3QoZmFsc2UsIGZhbHNlKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0VGhpc0luSW50ZXJmYWNlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7IGRvVGVzdChmYWxzZSwgZmFsc2UpOyB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovY29kZUluc2lnaHQvZGFlbW9uL0xvc3N5RW5jb2RpbmdUZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovY29kZUluc2lnaHQvZGFlbW9uL0xvc3N5RW5jb2RpbmdUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmFjMjkyMQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9jb2RlSW5zaWdodC9kYWVtb24vTG9zc3lFbmNvZGluZ1Rlc3QuamF2YQpAQCAtMCwwICsxLDEzMyBAQAorLyoKKyAqIENvcHlyaWdodCAyMDAwLTIwMTEgSmV0QnJhaW5zIHMuci5vLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworLyoKKyAqIENyZWF0ZWQgYnkgSW50ZWxsaUogSURFQS4KKyAqIFVzZXI6IG1heAorICogRGF0ZTogQXByIDExLCAyMDAyCisgKiBUaW1lOiA3OjUxOjE2IFBNCisgKiBUbyBjaGFuZ2UgdGVtcGxhdGUgZm9yIG5ldyBjbGFzcyB1c2UgCisgKiBDb2RlIFN0eWxlIHwgQ2xhc3MgVGVtcGxhdGVzIG9wdGlvbnMgKFRvb2xzIHwgSURFIE9wdGlvbnMpLgorICovCitwYWNrYWdlIGNvbS5pbnRlbGxpai5jb2RlSW5zaWdodC5kYWVtb247CisKK2ltcG9ydCBjb20uaW50ZWxsaWouY29kZUluc2lnaHQuZGFlbW9uLmltcGwuRGFlbW9uQ29kZUFuYWx5emVySW1wbDsKK2ltcG9ydCBjb20uaW50ZWxsaWouY29kZUluc2lnaHQuZGFlbW9uLmltcGwuSGlnaGxpZ2h0SW5mbzsKK2ltcG9ydCBjb20uaW50ZWxsaWouY29kZUluc3BlY3Rpb24uTG9jYWxJbnNwZWN0aW9uVG9vbDsKK2ltcG9ydCBjb20uaW50ZWxsaWouY29kZUluc3BlY3Rpb24uTG9zc3lFbmNvZGluZ0luc3BlY3Rpb247CitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkuZmlsZUVkaXRvci5GaWxlRG9jdW1lbnRNYW5hZ2VyOworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLnZmcy5DaGFyc2V0VG9vbGtpdDsKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS52ZnMuVmlydHVhbEZpbGU7CitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkudmZzLmVuY29kaW5nLkVuY29kaW5nTWFuYWdlcjsKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS52ZnMuZW5jb2RpbmcuRW5jb2RpbmdQcm9qZWN0TWFuYWdlcjsKK2ltcG9ydCBjb20uaW50ZWxsaWoudXRpbC51aS5VSVV0aWw7CitpbXBvcnQgb3JnLmpldGJyYWlucy5hbm5vdGF0aW9ucy5Ob25ObHM7CisKK2ltcG9ydCBqYXZhLm5pby5jaGFyc2V0LkNoYXJzZXQ7CitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK3B1YmxpYyBjbGFzcyBMb3NzeUVuY29kaW5nVGVzdCBleHRlbmRzIExpZ2h0RGFlbW9uQW5hbHl6ZXJUZXN0Q2FzZSB7CisgIEBOb25ObHMgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEJBU0VfUEFUSCA9ICIvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2xvc3N5RW5jb2RpbmciOworCisgIEBPdmVycmlkZQorICBwcm90ZWN0ZWQgTG9jYWxJbnNwZWN0aW9uVG9vbFtdIGNvbmZpZ3VyZUxvY2FsSW5zcGVjdGlvblRvb2xzKCkgeworICAgIHJldHVybiBuZXcgTG9jYWxJbnNwZWN0aW9uVG9vbFtde25ldyBMb3NzeUVuY29kaW5nSW5zcGVjdGlvbigpfTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RUZXh0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KCJUZXh0LnR4dCIpOworICAgIEVuY29kaW5nTWFuYWdlci5nZXRJbnN0YW5jZSgpLnNldEVuY29kaW5nKG15VkZpbGUsIENoYXJzZXQuZm9yTmFtZSgiVVMtQVNDSUkiKSk7CisgICAgaW50IHN0YXJ0ID0gbXlFZGl0b3IuZ2V0Q2FyZXRNb2RlbCgpLmdldE9mZnNldCgpOworICAgIHR5cGUoKGNoYXIpMHg0NDUpOworICAgIHR5cGUoKGNoYXIpMHg0MzgpOworICAgIGludCBlbmQgPSBteUVkaXRvci5nZXRDYXJldE1vZGVsKCkuZ2V0T2Zmc2V0KCk7CisKKyAgICBDb2xsZWN0aW9uPEhpZ2hsaWdodEluZm8+IGluZm9zID0gZG9IaWdobGlnaHRpbmcoKTsKKyAgICBIaWdobGlnaHRJbmZvIGluZm8gPSBhc3NlcnRPbmVFbGVtZW50KGluZm9zKTsKKyAgICBhc3NlcnRFcXVhbHMoIlVuc3VwcG9ydGVkIGNoYXJhY3RlcnMgZm9yIHRoZSBjaGFyc2V0ICdVUy1BU0NJSSciLCBpbmZvLmRlc2NyaXB0aW9uKTsKKyAgICBhc3NlcnRFcXVhbHMoc3RhcnQsIGluZm8uc3RhcnRPZmZzZXQpOworICAgIGFzc2VydEVxdWFscyhlbmQsIGluZm8uZW5kT2Zmc2V0KTsKKworICAgIGJhY2tzcGFjZSgpOworICAgIGJhY2tzcGFjZSgpOworICAgIGRvVGVzdENvbmZpZ3VyZWRGaWxlKHRydWUsIGZhbHNlLCBudWxsKTsKKyAgfQorICBwdWJsaWMgdm9pZCB0ZXN0TmF0aXZlQ29udmVyc2lvbigpIHRocm93cyBFeGNlcHRpb24geworICAgIGNvbmZpZ3VyZUZyb21GaWxlVGV4dCgieC5wcm9wZXJ0aWVzIiwiYT08Y2FyZXQ+diIpOworICAgIEVuY29kaW5nUHJvamVjdE1hbmFnZXIuZ2V0SW5zdGFuY2UoZ2V0UHJvamVjdCgpKS5zZXROYXRpdmUyQXNjaWlGb3JQcm9wZXJ0aWVzRmlsZXMobnVsbCwgdHJ1ZSk7CisgICAgVUlVdGlsLmRpc3BhdGNoQWxsSW52b2NhdGlvbkV2ZW50cygpOyAgLy9yZWxvYWQgZmlsZXMKKworICAgIHR5cGUoJ1xcJyk7CisgICAgdHlwZSgnXFwnKTsKKworICAgIENvbGxlY3Rpb248SGlnaGxpZ2h0SW5mbz4gaW5mb3MgPSBkb0hpZ2hsaWdodGluZygpOworICAgIGFzc2VydEVxdWFscygwLCBpbmZvcy5zaXplKCkpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFR5cGluZygpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdCgiU2ltcGxlLnhtbCIpOworICAgIHR5cGUoIlVTLUFTQ0lJIik7CisKKyAgICBDb2xsZWN0aW9uPEhpZ2hsaWdodEluZm8+IGluZm9zID0gZG9IaWdobGlnaHRpbmcoKTsKKyAgICBhc3NlcnRFcXVhbHMoMSwgaW5mb3Muc2l6ZSgpKTsKKyAgICBib29sZWFuIGZvdW5kID0gZmFsc2U7CisKKyAgICBmb3IoSGlnaGxpZ2h0SW5mbyBpbmZvOmluZm9zKSB7CisgICAgICBpZiAoaW5mby5kZXNjcmlwdGlvbi5lcXVhbHMoIlVuc3VwcG9ydGVkIGNoYXJhY3RlcnMgZm9yIHRoZSBjaGFyc2V0ICdVUy1BU0NJSSciKSkgeworICAgICAgICBmb3VuZCA9IHRydWU7CisgICAgICAgIGJyZWFrOworICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgfQorICAgIGFzc2VydFRydWUoZm91bmQpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdE11bHRpcGxlUmFuZ2VzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgY29uZmlndXJlQnlGaWxlKEJBU0VfUEFUSCArICIvIiArICJNdWx0aXBsZVJhbmdlcy54bWwiKTsKKyAgICB0eXBlKCJVUy1BU0NJSSIpOworCisgICAgZG9UZXN0Q29uZmlndXJlZEZpbGUodHJ1ZSwgZmFsc2UsIG51bGwpOworICB9CisKKyAgcHJpdmF0ZSB2b2lkIGRvVGVzdChATm9uTmxzIFN0cmluZyBmaWxlUGF0aCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KEJBU0VfUEFUSCArICIvIiArIGZpbGVQYXRoLCB0cnVlLCBmYWxzZSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0TmF0aXZlRW5jb2RpbmcoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBFbmNvZGluZ01hbmFnZXIuZ2V0SW5zdGFuY2UoKS5zZXROYXRpdmUyQXNjaWlGb3JQcm9wZXJ0aWVzRmlsZXMobnVsbCwgdHJ1ZSk7CisgICAgY29uZmlndXJlQnlGaWxlKEJBU0VfUEFUSCArICIvIiArICJOYXRpdmVFbmNvZGluZy5wcm9wZXJ0aWVzIik7CisKKyAgICBkb1Rlc3RDb25maWd1cmVkRmlsZSh0cnVlLCBmYWxzZSwgbnVsbCk7CisgIH0KKworICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBUSFJFRV9OT1RPUklPVVNfUlVTU0lBTl9MRVRURVJTID0gIlx1MDQxNlx1MDQxZVx1MDQxZiI7CisgIHB1YmxpYyB2b2lkIHRlc3REZXRlY3RXcm9uZ0VuY29kaW5nKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgY29uZmlndXJlRnJvbUZpbGVUZXh0KCJXaW4xMjUxLnR4dCIsIFRIUkVFX05PVE9SSU9VU19SVVNTSUFOX0xFVFRFUlMpOworICAgIFZpcnR1YWxGaWxlIHZpcnR1YWxGaWxlID0gZ2V0RmlsZSgpLmdldFZpcnR1YWxGaWxlKCk7CisgICAgYXNzZXJ0RXF1YWxzKENoYXJzZXRUb29sa2l0LlVURjhfQ0hBUlNFVCwgdmlydHVhbEZpbGUuZ2V0Q2hhcnNldCgpKTsKKyAgICBDaGFyc2V0IFdJTkRPV1NfMTI1MSA9IENoYXJzZXQuZm9yTmFtZSgid2luZG93cy0xMjUxIik7CisgICAgdmlydHVhbEZpbGUuc2V0Q2hhcnNldChXSU5ET1dTXzEyNTEpOworICAgIEZpbGVEb2N1bWVudE1hbmFnZXIuZ2V0SW5zdGFuY2UoKS5zYXZlQWxsRG9jdW1lbnRzKCk7CisgICAgYXNzZXJ0RXF1YWxzKFdJTkRPV1NfMTI1MSwgdmlydHVhbEZpbGUuZ2V0Q2hhcnNldCgpKTsKKyAgICBhc3NlcnRFcXVhbHMoVEhSRUVfTk9UT1JJT1VTX1JVU1NJQU5fTEVUVEVSUywgbmV3IFN0cmluZyh2aXJ0dWFsRmlsZS5jb250ZW50c1RvQnl0ZUFycmF5KCksIFdJTkRPV1NfMTI1MSkpOworICAgIHZpcnR1YWxGaWxlLnNldENoYXJzZXQoQ2hhcnNldFRvb2xraXQuVVRGOF9DSEFSU0VUKTsKKworICAgIGRvSGlnaGxpZ2h0aW5nKCk7CisgICAgTGlzdDxIaWdobGlnaHRJbmZvPiBpbmZvcyA9IERhZW1vbkNvZGVBbmFseXplckltcGwuZ2V0RmlsZUxldmVsSGlnaGxpZ2h0cyhnZXRQcm9qZWN0KCksIGdldEZpbGUoKSk7CisgICAgSGlnaGxpZ2h0SW5mbyBpbmZvID0gYXNzZXJ0T25lRWxlbWVudChpbmZvcyk7CisgICAgYXNzZXJ0RXF1YWxzKCJGaWxlIHdhcyBsb2FkZWQgaW4gdGhlIHdyb25nIGVuY29kaW5nOiAnVVRGLTgnIiwgaW5mby5kZXNjcmlwdGlvbik7CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9jb2RlSW5zaWdodC9kYWVtb24vUmVjdXJzaXZlVmlzaXRvclRlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9jb2RlSW5zaWdodC9kYWVtb24vUmVjdXJzaXZlVmlzaXRvclRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYmQ3OWI0Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNpZ2h0L2RhZW1vbi9SZWN1cnNpdmVWaXNpdG9yVGVzdC5qYXZhCkBAIC0wLDAgKzEsNjQgQEAKK3BhY2thZ2UgY29tLmludGVsbGlqLmNvZGVJbnNpZ2h0LmRhZW1vbjsKKworaW1wb3J0IGNvbS5pbnRlbGxpai5wc2kuKjsKK2ltcG9ydCBjb20uaW50ZWxsaWoudGVzdEZyYW1ld29yay5QbGF0Zm9ybVRlc3RVdGlsOworaW1wb3J0IGNvbS5pbnRlbGxpai51dGlsLkluY29ycmVjdE9wZXJhdGlvbkV4Y2VwdGlvbjsKK2ltcG9ydCBjb20uaW50ZWxsaWoudXRpbC5UaHJvd2FibGVSdW5uYWJsZTsKKworLyoqCisgKiBAYXV0aG9yIGNkcgorICovCitwdWJsaWMgY2xhc3MgUmVjdXJzaXZlVmlzaXRvclRlc3QgZXh0ZW5kcyBMaWdodERhZW1vbkFuYWx5emVyVGVzdENhc2V7CisgIHB1YmxpYyB2b2lkIHRlc3RIdWdlQ29uY2F0ZW5hdGlvblZpc2l0aW5nUGVyZm9ybWFuY2UoKSB0aHJvd3MgSW5jb3JyZWN0T3BlcmF0aW9uRXhjZXB0aW9uIHsKKyAgICBTdHJpbmdCdWlsZGVyIHRleHQgPSBuZXcgU3RyaW5nQnVpbGRlcigiU3RyaW5nIHMgPSBudWxsIik7CisgICAgZmluYWwgaW50IE4gPSAyMDAwMDsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IE47IGkrKykgeworICAgICAgdGV4dC5hcHBlbmQoIitcInh4eFwiIik7CisgICAgfQorICAgIHRleHQuYXBwZW5kKCI7Iik7CisgICAgZmluYWwgUHNpRWxlbWVudCBleHByZXNzaW9uID0KKyAgICAgIEphdmFQc2lGYWNhZGUuZ2V0SW5zdGFuY2UoZ2V0UHJvamVjdCgpKS5nZXRFbGVtZW50RmFjdG9yeSgpLmNyZWF0ZVN0YXRlbWVudEZyb21UZXh0KHRleHQudG9TdHJpbmcoKSwgbnVsbCk7CisgICAgZmluYWwgaW50W10gbiA9IHswfTsKKyAgICBQbGF0Zm9ybVRlc3RVdGlsLnN0YXJ0UGVyZm9ybWFuY2VUZXN0KGdldFRlc3ROYW1lKGZhbHNlKSwgMTAwLCBuZXcgVGhyb3dhYmxlUnVubmFibGUoKSB7CisgICAgICBAT3ZlcnJpZGUKKyAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICBuWzBdID0gMDsKKyAgICAgICAgZXhwcmVzc2lvbi5hY2NlcHQobmV3IEphdmFSZWN1cnNpdmVFbGVtZW50V2Fsa2luZ1Zpc2l0b3IoKSB7CisgICAgICAgICAgQE92ZXJyaWRlCisgICAgICAgICAgcHVibGljIHZvaWQgdmlzaXRFeHByZXNzaW9uKFBzaUV4cHJlc3Npb24gZXhwcmVzc2lvbikgeworICAgICAgICAgICAgUHNpRXhwcmVzc2lvbiBzID0gZXhwcmVzc2lvbjsKKyAgICAgICAgICAgIHN1cGVyLnZpc2l0RXhwcmVzc2lvbihleHByZXNzaW9uKTsKKyAgICAgICAgICAgIHMuaGFzaENvZGUoKTsgLy9ob2xkIG9uIHN0YWNrCisgICAgICAgICAgICBuWzBdKys7CisgICAgICAgICAgfQorICAgICAgICB9KTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKE4rMiwgblswXSk7CisgICAgICB9CisgICAgfSkuY3B1Qm91bmQoKS5hc3NlcnRUaW1pbmcoKTsKKyAgfQorICBwdWJsaWMgdm9pZCB0ZXN0SHVnZU1ldGhvZENoYWluaW5nVmlzaXRpbmdQZXJmb3JtYW5jZSgpIHRocm93cyBJbmNvcnJlY3RPcGVyYXRpb25FeGNlcHRpb24geworICAgIFN0cmluZ0J1aWxkZXIgdGV4dCA9IG5ldyBTdHJpbmdCdWlsZGVyKCJPYmplY3QgcyA9IG5ldyBTdHJpbmdCdWlsZGVyKCkiKTsKKyAgICBmaW5hbCBpbnQgTiA9IDIwMDAwOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgTjsgaSsrKSB7CisgICAgICB0ZXh0LmFwcGVuZCgiLmFwcGVuZChcInh4eFwiKSIpOworICAgIH0KKyAgICB0ZXh0LmFwcGVuZCgiOyIpOworICAgIGZpbmFsIFBzaUVsZW1lbnQgZXhwcmVzc2lvbiA9CisgICAgICBKYXZhUHNpRmFjYWRlLmdldEluc3RhbmNlKGdldFByb2plY3QoKSkuZ2V0RWxlbWVudEZhY3RvcnkoKS5jcmVhdGVTdGF0ZW1lbnRGcm9tVGV4dCh0ZXh0LnRvU3RyaW5nKCksIG51bGwpOworICAgIGZpbmFsIGludFtdIG4gPSB7MH07CisgICAgUGxhdGZvcm1UZXN0VXRpbC5zdGFydFBlcmZvcm1hbmNlVGVzdChnZXRUZXN0TmFtZShmYWxzZSksIDIwMCwgbmV3IFRocm93YWJsZVJ1bm5hYmxlKCkgeworICAgICAgQE92ZXJyaWRlCisgICAgICBwdWJsaWMgdm9pZCBydW4oKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgblswXSA9IDA7CisgICAgICAgIGV4cHJlc3Npb24uYWNjZXB0KG5ldyBKYXZhUmVjdXJzaXZlRWxlbWVudFdhbGtpbmdWaXNpdG9yKCkgeworICAgICAgICAgIEBPdmVycmlkZQorICAgICAgICAgIHB1YmxpYyB2b2lkIHZpc2l0TWV0aG9kQ2FsbEV4cHJlc3Npb24oUHNpTWV0aG9kQ2FsbEV4cHJlc3Npb24gZXhwcmVzc2lvbikgeworICAgICAgICAgICAgc3VwZXIudmlzaXRNZXRob2RDYWxsRXhwcmVzc2lvbihleHByZXNzaW9uKTsKKyAgICAgICAgICAgIG5bMF0rKzsKKyAgICAgICAgICB9CisgICAgICAgIH0pOworICAgICAgICBhc3NlcnRFcXVhbHMoTiwgblswXSk7CisgICAgICB9CisgICAgfSkuY3B1Qm91bmQoKS5hc3NlcnRUaW1pbmcoKTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNpZ2h0L2RhZW1vbi9SZWhpZ2hsaWdodGluZ1Rlc3QuZ3Jvb3Z5IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNpZ2h0L2RhZW1vbi9SZWhpZ2hsaWdodGluZ1Rlc3QuZ3Jvb3Z5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM0YjlmNzUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovY29kZUluc2lnaHQvZGFlbW9uL1JlaGlnaGxpZ2h0aW5nVGVzdC5ncm9vdnkKQEAgLTAsMCArMSw2NSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDAwLTIwMTEgSmV0QnJhaW5zIHMuci5vLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KK3BhY2thZ2UgY29tLmludGVsbGlqLmNvZGVJbnNpZ2h0LmRhZW1vbgorCitpbXBvcnQgY29tLmludGVsbGlqLnRlc3RGcmFtZXdvcmsuZml4dHVyZXMuSmF2YUNvZGVJbnNpZ2h0Rml4dHVyZVRlc3RDYXNlCitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkuYXBwbGljYXRpb24uQXBwbGljYXRpb25NYW5hZ2VyCisKKy8qKgorICogQGF1dGhvciBwZXRlcgorICovCitjbGFzcyBSZWhpZ2hsaWdodGluZ1Rlc3QgZXh0ZW5kcyBKYXZhQ29kZUluc2lnaHRGaXh0dXJlVGVzdENhc2UgeworCisgIHB1YmxpYyB2b2lkIHRlc3REZWxldGVDbGFzc0NhcHRpb25VbmRvKCkgeworICAgIG15Rml4dHVyZS5hZGRDbGFzcygncGFja2FnZSBqYXZhLmxhbmcucmVmbGVjdDsgcHVibGljIGNsYXNzIE1vZGlmaWVyIHt9JykKKworICAgIG15Rml4dHVyZS5jb25maWd1cmVCeVRleHQgJ2EuamF2YScsICcnJworaW1wb3J0IGphdmEubGFuZy5yZWZsZWN0Lk1vZGlmaWVyOworCis8Y2FyZXQ+PHNlbGVjdGlvbj5jbGFzcyBNZW1iZXJNb2RpZmllcnMgZXh0ZW5kcyBNb2RpZmllciB7PC9zZWxlY3Rpb24+CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBNZW1iZXJNb2RpZmllcnMgREVGQVVMVF9NT0RJRklFUlMgPSBuZXcgTWVtYmVyTW9kaWZpZXJzKGZhbHNlLCBmYWxzZSwgZmFsc2UpOworCisgICAgcHJpdmF0ZSBmaW5hbCBib29sZWFuIGlzVmlydHVhbDsKKyAgICBwcml2YXRlIGZpbmFsIGJvb2xlYW4gaXNPdmVycmlkZTsKKworICAgIHB1YmxpYyBNZW1iZXJNb2RpZmllcnMoYm9vbGVhbiBpc0Fic3RyYWN0LCBib29sZWFuIGlzVmlydHVhbCwgYm9vbGVhbiBpc092ZXJyaWRlKSB7CisgICAgICAgIHRoaXMuaXNWaXJ0dWFsID0gaXNWaXJ0dWFsOworICAgICAgICB0aGlzLmlzT3ZlcnJpZGUgPSBpc092ZXJyaWRlOworICAgIH0KKworCisgICAgcHVibGljIGJvb2xlYW4gaXNWaXJ0dWFsKCkgeworICAgICAgICByZXR1cm4gaXNWaXJ0dWFsOworICAgIH0KKworICAgIHB1YmxpYyBib29sZWFuIGlzT3ZlcnJpZGUoKSB7CisgICAgICAgIHJldHVybiBpc092ZXJyaWRlOworICAgIH0KK30KKycnJworICAgIG15Rml4dHVyZS5jaGVja0hpZ2hsaWdodGluZyhmYWxzZSwgZmFsc2UsIGZhbHNlKQorICAgIGRlZiBjYXB0aW9uID0gbXlGaXh0dXJlLmVkaXRvci5zZWxlY3Rpb25Nb2RlbC5zZWxlY3RlZFRleHQKKyAgICBteUZpeHR1cmUudHlwZSgnICcpCisgICAgYXNzZXJ0IG15Rml4dHVyZS5kb0hpZ2hsaWdodGluZygpLnNpemUoKSA+IDAKKworICAgIEFwcGxpY2F0aW9uTWFuYWdlci5hcHBsaWNhdGlvbi5ydW5Xcml0ZUFjdGlvbiB7CisgICAgICBteUZpeHR1cmUuZWRpdG9yLmRvY3VtZW50Lmluc2VydFN0cmluZyhteUZpeHR1cmUuZWRpdG9yLmNhcmV0TW9kZWwub2Zmc2V0LCBjYXB0aW9uKQorICAgIH0KKworICAgIG15Rml4dHVyZS5jaGVja0hpZ2hsaWdodGluZyhmYWxzZSwgZmFsc2UsIGZhbHNlKQorICB9CisKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9jb2RlSW5zaWdodC9kYWVtb24vU3VwcHJlc3NXYXJuaW5nc1Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9jb2RlSW5zaWdodC9kYWVtb24vU3VwcHJlc3NXYXJuaW5nc1Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YmRlZTFhCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNpZ2h0L2RhZW1vbi9TdXBwcmVzc1dhcm5pbmdzVGVzdC5qYXZhCkBAIC0wLDAgKzEsNDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwMC0yMDEyIEpldEJyYWlucyBzLnIuby4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKy8qCisgKiBVc2VyOiBhbm5hCisgKiBEYXRlOiAwMy1TZXAtMjAwNworICovCitwYWNrYWdlIGNvbS5pbnRlbGxpai5jb2RlSW5zaWdodC5kYWVtb247CisKK2ltcG9ydCBjb20uaW50ZWxsaWouY29kZUluc3BlY3Rpb24uTG9jYWxJbnNwZWN0aW9uVG9vbDsKK2ltcG9ydCBjb20uaW50ZWxsaWouY29kZUluc3BlY3Rpb24udW51c2VkU3ltYm9sLlVudXNlZFN5bWJvbExvY2FsSW5zcGVjdGlvbjsKK2ltcG9ydCBvcmcuamV0YnJhaW5zLmFubm90YXRpb25zLk5vbk5sczsKKworcHVibGljIGNsYXNzIFN1cHByZXNzV2FybmluZ3NUZXN0IGV4dGVuZHMgTGlnaHREYWVtb25BbmFseXplclRlc3RDYXNlIHsKKyAgQE5vbk5scyBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQkFTRV9QQVRIID0gIi9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvYWR2SGlnaGxpZ2h0aW5nIjsKKworICBwcml2YXRlIHZvaWQgZG9UZXN0KGJvb2xlYW4gY2hlY2tXYXJuaW5ncykgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KEJBU0VfUEFUSCArICIvIiArIGdldFRlc3ROYW1lKGZhbHNlKSArICIuamF2YSIsIGNoZWNrV2FybmluZ3MsIGZhbHNlKTsKKyAgfQorCisgIEBPdmVycmlkZQorICBwcm90ZWN0ZWQgTG9jYWxJbnNwZWN0aW9uVG9vbFtdIGNvbmZpZ3VyZUxvY2FsSW5zcGVjdGlvblRvb2xzKCkgeworICAgIHJldHVybiBuZXcgTG9jYWxJbnNwZWN0aW9uVG9vbFtde25ldyBVbnVzZWRTeW1ib2xMb2NhbEluc3BlY3Rpb24oKX07CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0U3VwcHJlc3NlZCgpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdCh0cnVlKTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNpZ2h0L2RhZW1vbi9UeXBlTWF0Y2hpbmdUZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovY29kZUluc2lnaHQvZGFlbW9uL1R5cGVNYXRjaGluZ1Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZDQ2YjVhCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNpZ2h0L2RhZW1vbi9UeXBlTWF0Y2hpbmdUZXN0LmphdmEKQEAgLTAsMCArMSwyNiBAQAorcGFja2FnZSBjb20uaW50ZWxsaWouY29kZUluc2lnaHQuZGFlbW9uOworCitwdWJsaWMgY2xhc3MgVHlwZU1hdGNoaW5nVGVzdCBleHRlbmRzIExpZ2h0RGFlbW9uQW5hbHl6ZXJUZXN0Q2FzZSB7CisgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBCQVNFX1BBVEggPSAiL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci90eXBlTWF0Y2hpbmciOworCisgIHB1YmxpYyB2b2lkIHRlc3RJZigpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdCgiSWYuamF2YSIpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFdoaWxlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KCJXaGlsZS5qYXZhIik7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0Rm9yKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KCJGb3IxLmphdmEiKTsKKyAgICBkb1Rlc3QoIkZvcjIuamF2YSIpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFNob3J0Q29uc3RXaXRoQ2FzdCgpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdCgiU2hvcnRDb25zdFdpdGhDYXN0LmphdmEiKTsKKyAgfQorCisgIHByb3RlY3RlZCB2b2lkIGRvVGVzdChTdHJpbmcgZmlsZVBhdGgpIHRocm93cyBFeGNlcHRpb24geworICAgIHN1cGVyLmRvVGVzdChCQVNFX1BBVEggKyAiLyIgKyBmaWxlUGF0aCwgZmFsc2UsIGZhbHNlKTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9jb2RlSW5zaWdodC9kYWVtb24vVW5jb21wbGV0ZUNvbnN0cnVjdHNUZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovY29kZUluc2lnaHQvZGFlbW9uL1VuY29tcGxldGVDb25zdHJ1Y3RzVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJkYmNkODYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovY29kZUluc2lnaHQvZGFlbW9uL1VuY29tcGxldGVDb25zdHJ1Y3RzVGVzdC5qYXZhCkBAIC0wLDAgKzEsMzkgQEAKK3BhY2thZ2UgY29tLmludGVsbGlqLmNvZGVJbnNpZ2h0LmRhZW1vbjsKKworcHVibGljIGNsYXNzIFVuY29tcGxldGVDb25zdHJ1Y3RzVGVzdCBleHRlbmRzIExpZ2h0RGFlbW9uQW5hbHl6ZXJUZXN0Q2FzZSB7CisgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBCQVNFX1BBVEggPSAiL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci91bmNvbXBsZXRlQ29uc3RydWN0cyI7CisKKyAgcHVibGljIHZvaWQgdGVzdElmMSgpIHRocm93cyBFeGNlcHRpb24geyBkb1Rlc3QoKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0SWYyKCkgdGhyb3dzIEV4Y2VwdGlvbiB7IGRvVGVzdCgpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RJZjMoKSB0aHJvd3MgRXhjZXB0aW9uIHsgZG9UZXN0KCk7IH0KKyAgcHVibGljIHZvaWQgdGVzdElmNCgpIHRocm93cyBFeGNlcHRpb24geyBkb1Rlc3QoKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0SWY1KCkgdGhyb3dzIEV4Y2VwdGlvbiB7IGRvVGVzdCgpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RJZjYoKSB0aHJvd3MgRXhjZXB0aW9uIHsgZG9UZXN0KCk7IH0KKworICBwdWJsaWMgdm9pZCB0ZXN0V2hpbGUxKCkgdGhyb3dzIEV4Y2VwdGlvbiB7IGRvVGVzdCgpO30KKyAgcHVibGljIHZvaWQgdGVzdFdoaWxlMigpIHRocm93cyBFeGNlcHRpb24geyBkb1Rlc3QoKTt9CisgIHB1YmxpYyB2b2lkIHRlc3RXaGlsZTMoKSB0aHJvd3MgRXhjZXB0aW9uIHsgZG9UZXN0KCk7fQorICBwdWJsaWMgdm9pZCB0ZXN0V2hpbGU0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7IGRvVGVzdCgpO30KKyAgcHVibGljIHZvaWQgdGVzdFdoaWxlNSgpIHRocm93cyBFeGNlcHRpb24geyBkb1Rlc3QoKTt9CisKKyAgcHVibGljIHZvaWQgdGVzdEZvcjEoKSB0aHJvd3MgRXhjZXB0aW9uIHsgZG9UZXN0KCk7IH0KKyAgcHVibGljIHZvaWQgdGVzdEZvcjIoKSB0aHJvd3MgRXhjZXB0aW9uIHsgZG9UZXN0KCk7IH0KKyAgcHVibGljIHZvaWQgdGVzdEZvcjMoKSB0aHJvd3MgRXhjZXB0aW9uIHsgZG9UZXN0KCk7IH0KKyAgcHVibGljIHZvaWQgdGVzdEZvcjQoKSB0aHJvd3MgRXhjZXB0aW9uIHsgZG9UZXN0KCk7IH0KKyAgcHVibGljIHZvaWQgdGVzdEZvcjUoKSB0aHJvd3MgRXhjZXB0aW9uIHsgZG9UZXN0KCk7IH0KKyAgcHVibGljIHZvaWQgdGVzdEZvcjYoKSB0aHJvd3MgRXhjZXB0aW9uIHsgZG9UZXN0KCk7IH0KKyAgcHVibGljIHZvaWQgdGVzdEZvcjcoKSB0aHJvd3MgRXhjZXB0aW9uIHsgZG9UZXN0KCk7IH0KKyAgcHVibGljIHZvaWQgdGVzdEZvcjgoKSB0aHJvd3MgRXhjZXB0aW9uIHsgZG9UZXN0KCk7IH0KKyAgcHVibGljIHZvaWQgdGVzdEZvcjkoKSB0aHJvd3MgRXhjZXB0aW9uIHsgZG9UZXN0KCk7IH0KKyAgcHVibGljIHZvaWQgdGVzdEZvcjEwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7IGRvVGVzdCgpOyB9CisKKyAgcHVibGljIHZvaWQgdGVzdFJldHVybjEoKSB0aHJvd3MgRXhjZXB0aW9uIHsgZG9UZXN0KCk7IH0KKyAgcHVibGljIHZvaWQgdGVzdFJldHVybjIoKSB0aHJvd3MgRXhjZXB0aW9uIHsgZG9UZXN0KCk7IH0KKworICBwcml2YXRlIHZvaWQgZG9UZXN0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KGdldFRlc3ROYW1lKGZhbHNlKSsiLmphdmEiKTsKKyAgfQorICBwcm90ZWN0ZWQgdm9pZCBkb1Rlc3QoU3RyaW5nIGZpbGVQYXRoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBzdXBlci5kb1Rlc3QoQkFTRV9QQVRIICsgIi8iICsgZmlsZVBhdGgsIGZhbHNlLCBmYWxzZSk7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovY29kZUluc2lnaHQvZGFlbW9uL1VudXNlZEltcG9ydHNUZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovY29kZUluc2lnaHQvZGFlbW9uL1VudXNlZEltcG9ydHNUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTExMGUyZQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9jb2RlSW5zaWdodC9kYWVtb24vVW51c2VkSW1wb3J0c1Rlc3QuamF2YQpAQCAtMCwwICsxLDU0IEBACitwYWNrYWdlIGNvbS5pbnRlbGxpai5jb2RlSW5zaWdodC5kYWVtb247CisKK2ltcG9ydCBjb20uaW50ZWxsaWouY29kZUluc2lnaHQuZGFlbW9uLmltcGwuYW5hbHlzaXMuRmlsZUhpZ2hsaWdoaW5nU2V0dGluZzsKK2ltcG9ydCBjb20uaW50ZWxsaWouY29kZUluc2lnaHQuZGFlbW9uLmltcGwuYW5hbHlzaXMuSGlnaGxpZ2h0aW5nU2V0dGluZ3NQZXJGaWxlOworaW1wb3J0IGNvbS5pbnRlbGxpai5jb2RlSW5zcGVjdGlvbi5Mb2NhbEluc3BlY3Rpb25Ub29sOworaW1wb3J0IGNvbS5pbnRlbGxpai5jb2RlSW5zcGVjdGlvbi51bnVzZWRJbXBvcnQuVW51c2VkSW1wb3J0TG9jYWxJbnNwZWN0aW9uOworaW1wb3J0IGNvbS5pbnRlbGxpai5wc2kuUHNpRmlsZTsKKworcHVibGljIGNsYXNzIFVudXNlZEltcG9ydHNUZXN0IGV4dGVuZHMgRGFlbW9uQW5hbHl6ZXJUZXN0Q2FzZSB7CisgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBCQVNFX1BBVEggPSAiL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci91bnVzZWRJbXBvcnRzIjsKKworICBAT3ZlcnJpZGUKKyAgcHJvdGVjdGVkIExvY2FsSW5zcGVjdGlvblRvb2xbXSBjb25maWd1cmVMb2NhbEluc3BlY3Rpb25Ub29scygpIHsKKyAgICByZXR1cm4gbmV3IExvY2FsSW5zcGVjdGlvblRvb2xbXXtuZXcgVW51c2VkSW1wb3J0TG9jYWxJbnNwZWN0aW9uKCl9OworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdDEoKSB0aHJvd3MgRXhjZXB0aW9uIHsgZG9UZXN0KCk7IH0KKyAgcHVibGljIHZvaWQgdGVzdDIoKSB0aHJvd3MgRXhjZXB0aW9uIHsgZG9UZXN0KCk7IH0KKyAgCisgIHB1YmxpYyB2b2lkIHRlc3RXaXRoSGlnaGxpZ2h0aW5nT2ZmKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgY29uZmlndXJlQnlGaWxlKEJBU0VfUEFUSCArICIvIiArIGdldFRlc3ROYW1lKGZhbHNlKSArICIuamF2YSIpOworICAgIGZpbmFsIFBzaUZpbGUgZmlsZSA9IGdldEZpbGUoKTsKKyAgICBmaW5hbCBIaWdobGlnaHRpbmdTZXR0aW5nc1BlckZpbGUgc2V0dGluZ3NQZXJGaWxlID0gSGlnaGxpZ2h0aW5nU2V0dGluZ3NQZXJGaWxlLmdldEluc3RhbmNlKG15UHJvamVjdCk7CisgICAgZmluYWwgRmlsZUhpZ2hsaWdoaW5nU2V0dGluZyBvbGRTZXR0aW5nID0gc2V0dGluZ3NQZXJGaWxlLmdldEhpZ2hsaWdodGluZ1NldHRpbmdGb3JSb290KGZpbGUpOworICAgIHRyeSB7CisgICAgICBzZXR0aW5nc1BlckZpbGUuc2V0SGlnaGxpZ2h0aW5nU2V0dGluZ0ZvclJvb3QoZmlsZSwgRmlsZUhpZ2hsaWdoaW5nU2V0dGluZy5OT05FKTsKKyAgICAgIGRvRG9UZXN0KHRydWUsIGZhbHNlLCBmYWxzZSk7CisgICAgfQorICAgIGZpbmFsbHkgeworICAgICAgc2V0dGluZ3NQZXJGaWxlLnNldEhpZ2hsaWdodGluZ1NldHRpbmdGb3JSb290KGZpbGUsIG9sZFNldHRpbmcpOworICAgIH0KKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RVbmNsb3NlZCgpIHRocm93cyBFeGNlcHRpb24geyBkb1Rlc3QoKTsgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RRdWFsaWZpZWQoKSB0aHJvd3MgRXhjZXB0aW9uIHsgZG9UZXN0KCk7IH0KKworICBwdWJsaWMgdm9pZCB0ZXN0SW5uZXJzT25EZW1hbmQxKCkgdGhyb3dzIEV4Y2VwdGlvbiB7IGRvVGVzdCgpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RJbm5lcnNPbkRlbWFuZDIoKSB0aHJvd3MgRXhjZXB0aW9uIHsgZG9UZXN0KCk7IH0KKyAgcHVibGljIHZvaWQgdGVzdFN0YXRpY0ltcG9ydGluZ0lubmVyKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KEJBU0VfUEFUSCArICIvIiArIGdldFRlc3ROYW1lKGZhbHNlKSArICIuamF2YSIsIEJBU0VfUEFUSCwgdHJ1ZSwgZmFsc2UpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEltcG9ydEZyb21TYW1lUGFja2FnZTEoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoQkFTRV9QQVRIKyIvcGFja2FnZTEvYS5qYXZhIiwgQkFTRV9QQVRILHRydWUsZmFsc2UpOworICB9CisgIHB1YmxpYyB2b2lkIHRlc3RJbXBvcnRGcm9tU2FtZVBhY2thZ2UyKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KEJBU0VfUEFUSCsiL3BhY2thZ2UxL2IuamF2YSIsIEJBU0VfUEFUSCx0cnVlLGZhbHNlKTsKKyAgfQorCisgIHByb3RlY3RlZCB2b2lkIGRvVGVzdCgpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdChCQVNFX1BBVEggKyAiLyIgKyBnZXRUZXN0TmFtZShmYWxzZSkgKyAiLmphdmEiLCB0cnVlLCBmYWxzZSk7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovY29kZUluc2lnaHQvZGFlbW9uL1VudXNlZFN5bWJvbExvY2FsVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNpZ2h0L2RhZW1vbi9VbnVzZWRTeW1ib2xMb2NhbFRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYTJjMDNiCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNpZ2h0L2RhZW1vbi9VbnVzZWRTeW1ib2xMb2NhbFRlc3QuamF2YQpAQCAtMCwwICsxLDUwIEBACitwYWNrYWdlIGNvbS5pbnRlbGxpai5jb2RlSW5zaWdodC5kYWVtb247CisKK2ltcG9ydCBjb20uaW50ZWxsaWouY29kZUluc2lnaHQuZGFlbW9uLmltcGwuSGlnaGxpZ2h0SW5mbzsKK2ltcG9ydCBjb20uaW50ZWxsaWouY29kZUluc3BlY3Rpb24uTG9jYWxJbnNwZWN0aW9uVG9vbDsKK2ltcG9ydCBjb20uaW50ZWxsaWouY29kZUluc3BlY3Rpb24udW51c2VkU3ltYm9sLlVudXNlZFN5bWJvbExvY2FsSW5zcGVjdGlvbjsKK2ltcG9ydCBjb20uaW50ZWxsaWoubGFuZy5hbm5vdGF0aW9uLkhpZ2hsaWdodFNldmVyaXR5OworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLmFwcGxpY2F0aW9uLkFwcGxpY2F0aW9uTWFuYWdlcjsKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS5lZGl0b3IuRG9jdW1lbnQ7CitpbXBvcnQgY29tLmludGVsbGlqLnBzaS5Qc2lEb2N1bWVudE1hbmFnZXI7CisKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKKworcHVibGljIGNsYXNzIFVudXNlZFN5bWJvbExvY2FsVGVzdCBleHRlbmRzIERhZW1vbkFuYWx5emVyVGVzdENhc2UgeworICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQkFTRV9QQVRIID0gIi9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvdW51c2VkRGVjbHMiOworCisgIEBPdmVycmlkZQorICBwcm90ZWN0ZWQgTG9jYWxJbnNwZWN0aW9uVG9vbFtdIGNvbmZpZ3VyZUxvY2FsSW5zcGVjdGlvblRvb2xzKCkgeworICAgIHJldHVybiBuZXcgTG9jYWxJbnNwZWN0aW9uVG9vbFtde25ldyBVbnVzZWRTeW1ib2xMb2NhbEluc3BlY3Rpb24oKX07CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0SW5uZXJDbGFzcygpIHRocm93cyBFeGNlcHRpb24geyBkb1Rlc3QoKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0SW5uZXJVc2VzU2VsZigpIHRocm93cyBFeGNlcHRpb24geyBkb1Rlc3QoKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0TG9jYWxDbGFzcygpIHRocm93cyBFeGNlcHRpb24geyBkb1Rlc3QoKTsgfQorICAvL0BCb21iZWQoZGF5ID0gNSwgbW9udGggPSBDYWxlbmRhci5TRVBURU1CRVIsIHVzZXIgPSAiYW5ldCIpCisgIC8vcHVibGljIHZvaWQgdGVzdEluamVjdGVkQW5ubygpIHRocm93cyBFeGNlcHRpb24geyBkb1Rlc3QoKTsgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RDaGFuZ2VJbnNpZGVDb2RlQmxvY2soKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoKTsKKyAgICBmaW5hbCBEb2N1bWVudCBkb2N1bWVudCA9IG15RWRpdG9yLmdldERvY3VtZW50KCk7CisgICAgQ29sbGVjdGlvbjxIaWdobGlnaHRJbmZvPiBjb2xsZWN0aW9uID0gZG9IaWdobGlnaHRpbmcoSGlnaGxpZ2h0U2V2ZXJpdHkuV0FSTklORyk7CisgICAgYXNzZXJ0RXF1YWxzKDAsIGNvbGxlY3Rpb24uc2l6ZSgpKTsKKworICAgIGZpbmFsIGludCBvZmZzZXQgPSBteUVkaXRvci5nZXRDYXJldE1vZGVsKCkuZ2V0T2Zmc2V0KCk7CisgICAgQXBwbGljYXRpb25NYW5hZ2VyLmdldEFwcGxpY2F0aW9uKCkucnVuV3JpdGVBY3Rpb24obmV3IFJ1bm5hYmxlKCkgeworICAgICAgQE92ZXJyaWRlCisgICAgICBwdWJsaWMgdm9pZCBydW4oKSB7CisgICAgICAgIGRvY3VtZW50Lmluc2VydFN0cmluZyhvZmZzZXQsICIvLyIpOworICAgICAgfQorICAgIH0pOworCisgICAgUHNpRG9jdW1lbnRNYW5hZ2VyLmdldEluc3RhbmNlKGdldFByb2plY3QoKSkuY29tbWl0RG9jdW1lbnQoZG9jdW1lbnQpOworCisgICAgQ29sbGVjdGlvbjxIaWdobGlnaHRJbmZvPiBpbmZvcyA9IGRvSGlnaGxpZ2h0aW5nKEhpZ2hsaWdodFNldmVyaXR5LldBUk5JTkcpOworICAgIGFzc2VydEVxdWFscygxLCBpbmZvcy5zaXplKCkpOworICB9CisKKyAgcHJpdmF0ZSB2b2lkIGRvVGVzdCgpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdChCQVNFX1BBVEggKyAiLyIgKyBnZXRUZXN0TmFtZShmYWxzZSkgKyAiLmphdmEiLCB0cnVlLCBmYWxzZSk7CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9jb2RlSW5zaWdodC9kYWVtb24vbGFtYmRhL0RpYW1vbmQ4SGlnaGxpZ2h0aW5nVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNpZ2h0L2RhZW1vbi9sYW1iZGEvRGlhbW9uZDhIaWdobGlnaHRpbmdUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmU3ZmYwMQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9jb2RlSW5zaWdodC9kYWVtb24vbGFtYmRhL0RpYW1vbmQ4SGlnaGxpZ2h0aW5nVGVzdC5qYXZhCkBAIC0wLDAgKzEsMzEgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwMC0yMDEyIEpldEJyYWlucyBzLnIuby4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCitwYWNrYWdlIGNvbS5pbnRlbGxpai5jb2RlSW5zaWdodC5kYWVtb24ubGFtYmRhOworCitpbXBvcnQgY29tLmludGVsbGlqLmNvZGVJbnNpZ2h0LmRhZW1vbi5MaWdodERhZW1vbkFuYWx5emVyVGVzdENhc2U7CitpbXBvcnQgb3JnLmpldGJyYWlucy5hbm5vdGF0aW9ucy5Ob25ObHM7CisKK3B1YmxpYyBjbGFzcyBEaWFtb25kOEhpZ2hsaWdodGluZ1Rlc3QgZXh0ZW5kcyBMaWdodERhZW1vbkFuYWx5emVyVGVzdENhc2UgeworICBATm9uTmxzIHN0YXRpYyBmaW5hbCBTdHJpbmcgQkFTRV9QQVRIID0gIi9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvbGFtYmRhL2RpYW1vbmQiOworCisgIHB1YmxpYyB2b2lkIHRlc3RJREVBOTcyOTQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoKTsKKyAgfQorCisgIHByaXZhdGUgdm9pZCBkb1Rlc3QoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoQkFTRV9QQVRIICsgIi8iICsgZ2V0VGVzdE5hbWUoZmFsc2UpICsgIi5qYXZhIiwgZmFsc2UsIGZhbHNlKTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNpZ2h0L2RhZW1vbi9sYW1iZGEvRnVuY3Rpb25hbEludGVyZmFjZVRlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9jb2RlSW5zaWdodC9kYWVtb24vbGFtYmRhL0Z1bmN0aW9uYWxJbnRlcmZhY2VUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGJhNTJiNwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9jb2RlSW5zaWdodC9kYWVtb24vbGFtYmRhL0Z1bmN0aW9uYWxJbnRlcmZhY2VUZXN0LmphdmEKQEAgLTAsMCArMSw4OSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDAwLTIwMTIgSmV0QnJhaW5zIHMuci5vLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KK3BhY2thZ2UgY29tLmludGVsbGlqLmNvZGVJbnNpZ2h0LmRhZW1vbi5sYW1iZGE7CisKK2ltcG9ydCBjb20uaW50ZWxsaWouY29kZUluc2lnaHQuZGFlbW9uLkxpZ2h0RGFlbW9uQW5hbHl6ZXJUZXN0Q2FzZTsKK2ltcG9ydCBjb20uaW50ZWxsaWoucHNpLkxhbWJkYUhpZ2hsaWdodGluZ1V0aWw7CitpbXBvcnQgY29tLmludGVsbGlqLnBzaS5Qc2lDbGFzczsKK2ltcG9ydCBjb20uaW50ZWxsaWoucHNpLnNlYXJjaC5HbG9iYWxTZWFyY2hTY29wZTsKK2ltcG9ydCBvcmcuamV0YnJhaW5zLmFubm90YXRpb25zLk5vbk5sczsKK2ltcG9ydCBvcmcuamV0YnJhaW5zLmFubm90YXRpb25zLk51bGxhYmxlOworCitwdWJsaWMgY2xhc3MgRnVuY3Rpb25hbEludGVyZmFjZVRlc3QgZXh0ZW5kcyBMaWdodERhZW1vbkFuYWx5emVyVGVzdENhc2UgeworICBATm9uTmxzIHN0YXRpYyBmaW5hbCBTdHJpbmcgQkFTRV9QQVRIID0gIi9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvbGFtYmRhL2Z1bmN0aW9uYWxJbnRlcmZhY2UiOworCisgIHByaXZhdGUgdm9pZCBkb1Rlc3RGdW5jdGlvbmFsSW50ZXJmYWNlKEBOdWxsYWJsZSBTdHJpbmcgZXhwZWN0ZWRFcnJvck1lc3NhZ2UpIHRocm93cyBFeGNlcHRpb24geworICAgIFN0cmluZyBmaWxlUGF0aCA9IEJBU0VfUEFUSCArICIvIiArIGdldFRlc3ROYW1lKGZhbHNlKSArICIuamF2YSI7CisgICAgY29uZmlndXJlQnlGaWxlKGZpbGVQYXRoKTsKKyAgICBmaW5hbCBQc2lDbGFzcyBwc2lDbGFzcyA9IGdldEphdmFGYWNhZGUoKS5maW5kQ2xhc3MoIkZvbyIsIEdsb2JhbFNlYXJjaFNjb3BlLnByb2plY3RTY29wZShnZXRQcm9qZWN0KCkpKTsKKyAgICBhc3NlcnROb3ROdWxsKCJDbGFzcyBGb28gbm90IGZvdW5kIiwgcHNpQ2xhc3MpOworCisgICAgZmluYWwgU3RyaW5nIGVycm9yTWVzc2FnZSA9IExhbWJkYUhpZ2hsaWdodGluZ1V0aWwuY2hlY2tJbnRlcmZhY2VGdW5jdGlvbmFsKHBzaUNsYXNzKTsKKyAgICBhc3NlcnRFcXVhbHMoZXhwZWN0ZWRFcnJvck1lc3NhZ2UsIGVycm9yTWVzc2FnZSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0U2ltcGxlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0RnVuY3Rpb25hbEludGVyZmFjZShudWxsKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3ROb01ldGhvZHMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3RGdW5jdGlvbmFsSW50ZXJmYWNlKCJObyB0YXJnZXQgbWV0aG9kIGZvdW5kIik7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0TXVsdGlwbGVNZXRob2RzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0RnVuY3Rpb25hbEludGVyZmFjZShudWxsKTsKKyAgfQorICAKKyAgcHVibGljIHZvaWQgdGVzdE11bHRpcGxlTWV0aG9kc0luT25lKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0RnVuY3Rpb25hbEludGVyZmFjZShudWxsKTsKKyAgfSAKKworICBwdWJsaWMgdm9pZCB0ZXN0Q2xvbmUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3RGdW5jdGlvbmFsSW50ZXJmYWNlKCJNdWx0aXBsZSBub24tb3ZlcnJpZGluZyBhYnN0cmFjdCBtZXRob2RzIGZvdW5kIik7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0VHdvTWV0aG9kc1NhbWVTaWduYXR1cmUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3RGdW5jdGlvbmFsSW50ZXJmYWNlKG51bGwpOworICB9IAorICAKKyAgcHVibGljIHZvaWQgdGVzdFR3b01ldGhvZHNTdWJTaWduYXR1cmUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3RGdW5jdGlvbmFsSW50ZXJmYWNlKG51bGwpOworICB9CisgIAorICBwdWJsaWMgdm9pZCB0ZXN0VHdvTWV0aG9kc05vU3ViU2lnbmF0dXJlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0RnVuY3Rpb25hbEludGVyZmFjZSgiTXVsdGlwbGUgbm9uLW92ZXJyaWRpbmcgYWJzdHJhY3QgbWV0aG9kcyBmb3VuZCIpOworICB9CisgIAorICBwdWJsaWMgdm9pZCB0ZXN0VHdvTWV0aG9kc05vU3ViU2lnbmF0dXJlMSgpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdEZ1bmN0aW9uYWxJbnRlcmZhY2UoIk11bHRpcGxlIG5vbi1vdmVycmlkaW5nIGFic3RyYWN0IG1ldGhvZHMgZm91bmQiKTsKKyAgfSAKKyAgCisgIHB1YmxpYyB2b2lkIHRlc3RUd29NZXRob2RzU2FtZVN1YnN0U2lnbmF0dXJlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0RnVuY3Rpb25hbEludGVyZmFjZShudWxsKTsKKyAgfQorICAKKyAgcHVibGljIHZvaWQgdGVzdE1ldGhvZFdpdGhUeXBlUGFyYW0oKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3RGdW5jdGlvbmFsSW50ZXJmYWNlKG51bGwpOworICB9CisgIAorICBwdWJsaWMgdm9pZCB0ZXN0VHdvTWV0aG9kc1NhbWVTaWduYXR1cmVUeXBlUGFyYW1zKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0RnVuY3Rpb25hbEludGVyZmFjZShudWxsKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RBYnN0cmFjdENsYXNzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0RnVuY3Rpb25hbEludGVyZmFjZSgiVGFyZ2V0IHR5cGUgb2YgYSBsYW1iZGEgY29udmVyc2lvbiBtdXN0IGJlIGFuIGludGVyZmFjZSIpOworICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovY29kZUluc2lnaHQvZGFlbW9uL2xhbWJkYS9MYW1iZGFIaWdobGlnaHRpbmdUZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovY29kZUluc2lnaHQvZGFlbW9uL2xhbWJkYS9MYW1iZGFIaWdobGlnaHRpbmdUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmI5ZTE2YQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9jb2RlSW5zaWdodC9kYWVtb24vbGFtYmRhL0xhbWJkYUhpZ2hsaWdodGluZ1Rlc3QuamF2YQpAQCAtMCwwICsxLDE4MyBAQAorLyoKKyAqIENvcHlyaWdodCAyMDAwLTIwMTIgSmV0QnJhaW5zIHMuci5vLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KK3BhY2thZ2UgY29tLmludGVsbGlqLmNvZGVJbnNpZ2h0LmRhZW1vbi5sYW1iZGE7CisKK2ltcG9ydCBjb20uaW50ZWxsaWouY29kZUluc2lnaHQuZGFlbW9uLkxpZ2h0RGFlbW9uQW5hbHl6ZXJUZXN0Q2FzZTsKK2ltcG9ydCBvcmcuamV0YnJhaW5zLmFubm90YXRpb25zLk5vbk5sczsKKworcHVibGljIGNsYXNzIExhbWJkYUhpZ2hsaWdodGluZ1Rlc3QgZXh0ZW5kcyBMaWdodERhZW1vbkFuYWx5emVyVGVzdENhc2UgeworICBATm9uTmxzIHN0YXRpYyBmaW5hbCBTdHJpbmcgQkFTRV9QQVRIID0gIi9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvbGFtYmRhL2hpZ2hsaWdodGluZyI7CisKKyAgcHVibGljIHZvaWQgdGVzdFN0YXRpY0FjY2VzcygpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdCgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEVmZmVjdGl2ZUZpbmFsKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KCk7CisgIH0KKyAgCisgIHB1YmxpYyB2b2lkIHRlc3RSZWFzc2lnblVzZWRWYXJzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KCk7CisgIH0KKyAgCisgIHB1YmxpYyB2b2lkIHRlc3RMYW1iZGFDb250ZXh0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0UmV0dXJuVHlwZUNvbXBhdGliaWxpdHkoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoKTsKKyAgfQorICAKKyAgcHVibGljIHZvaWQgdGVzdFR5cGVBcmdzQ29uc2lzdGVuY3koKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RUeXBlQXJnc0NvbnNpc3RlbmN5TWlzYzEoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RUeXBlQXJnc0NvbnNpc3RlbmN5TWlzYzIoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RUeXBlQXJnc0NvbnNpc3RlbmN5V2l0aG91dFBhcmFtcygpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdCgpOworICB9IAorCisgIHB1YmxpYyB2b2lkIHRlc3RJbmNvbXBhdGlibGVSZXR1cm5UeXBlcygpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdCgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFdpbGRjYXJkQm91bmRzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0SW5mZXJlbmNlT25NZXRob2RDYWxsU2l0ZSgpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdCgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEluZmVyRnJvbVR5cGVBcmdzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KCk7CisgIH0KKyAgCisgIHB1YmxpYyB2b2lkIHRlc3RBbWJpZ3VpdHkxKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KCk7CisgIH0KKworICBwdWJsaWMgdm9pZCBfdGVzdEFtYmlndWl0eTIoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoKTsKKyAgfQorICAKKyAgcHVibGljIHZvaWQgdGVzdEFtYmlndWl0eVZhcmFyZ3MoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RBbWJpZ3VpdHlSYXdHZW5lcmljcygpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdCgpOworICB9CisgIAorICBwdWJsaWMgdm9pZCB0ZXN0RGVmYXVsdE1ldGhvZCgpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdCgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdExhbWJkYU9uVmFyYXJnUGxhY2UoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RMYW1iZGFSYXdPck5vdCgpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdCgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFJldHVyblR5cGVDb21wYXRpYmlsaXR5MSgpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdCgpOworICB9CisgIAorICBwdWJsaWMgdm9pZCB0ZXN0Tm9JbmZlcmVuY2VSZXN1bHQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RJbmZlcmVuY2VGcm9tQXJncygpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdCgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEluQ29udGV4dHMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RDYXN0SW5Db250ZXh0cygpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdCgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFVuaGFuZGxlZEV4Y2VwdGlvbigpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdCgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdENvbmRpdGlvbmFsRXhwcigpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdCgpOworICB9CisgIAorICBwdWJsaWMgdm9pZCB0ZXN0SW5jb21wbGV0ZVN1YnN0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0VmFyaWFibGVJbml0aWFsaXphdGlvbigpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdCgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFVucmVhY2hhYmxlU3RhdGVtZW50KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0UmV0dXJuVmFsdWUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoKTsKKyAgfQorICAKKyAgcHVibGljIHZvaWQgdGVzdEFscmVhZHlVc2VkUGFyYW1OYW1lKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0UmVjdXJzaXZlQWNjZXNzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0SW5jb21wYXRpYmxlRm9ybWFsUGFyYW1ldGVyVHlwZXMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3ROZXN0ZWRMYW1iZGFzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0RW51bUNvbnN0YW50cygpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdCgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFJhd1doZW5Ob1BhcmFtcygpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdCgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFVzZUluY29tcGxldGVQYXJlbnRTdWJzdGl0dXRvcigpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdCgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFJldHVyblR5cGVDb21wYXRpYmlsaXR5QmVmb3JlU3BlY2lmaWNzQ2hlY2soKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoKTsKKyAgfQorCisgIHByaXZhdGUgdm9pZCBkb1Rlc3QoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoQkFTRV9QQVRIICsgIi8iICsgZ2V0VGVzdE5hbWUoZmFsc2UpICsgIi5qYXZhIiwgZmFsc2UsIGZhbHNlKTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNpZ2h0L2RhZW1vbi9sYW1iZGEvTGFtYmRhSW5mZXJlbmNlVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNpZ2h0L2RhZW1vbi9sYW1iZGEvTGFtYmRhSW5mZXJlbmNlVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY1ODRjZGMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovY29kZUluc2lnaHQvZGFlbW9uL2xhbWJkYS9MYW1iZGFJbmZlcmVuY2VUZXN0LmphdmEKQEAgLTAsMCArMSwzNSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDAwLTIwMTIgSmV0QnJhaW5zIHMuci5vLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KK3BhY2thZ2UgY29tLmludGVsbGlqLmNvZGVJbnNpZ2h0LmRhZW1vbi5sYW1iZGE7CisKK2ltcG9ydCBjb20uaW50ZWxsaWouY29kZUluc2lnaHQuZGFlbW9uLkxpZ2h0RGFlbW9uQW5hbHl6ZXJUZXN0Q2FzZTsKK2ltcG9ydCBvcmcuamV0YnJhaW5zLmFubm90YXRpb25zLk5vbk5sczsKKworcHVibGljIGNsYXNzIExhbWJkYUluZmVyZW5jZVRlc3QgZXh0ZW5kcyBMaWdodERhZW1vbkFuYWx5emVyVGVzdENhc2UgeworICBATm9uTmxzIHN0YXRpYyBmaW5hbCBTdHJpbmcgQkFTRV9QQVRIID0gIi9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvbGFtYmRhL2luZmVyZW5jZSI7CisKKyAgcHVibGljIHZvaWQgdGVzdEZ1bmN0aW9uYWxJbnRlcmZhY2VTaG91bGRIYXZlRXhhY3RseU9uZU1ldGhvZCgpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdCgpOworICB9CisgIAorICBwdWJsaWMgdm9pZCB0ZXN0U2ltcGxlQ3ljbGljSW5mZXJlbmNlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KCk7CisgIH0KKworICBwcml2YXRlIHZvaWQgZG9UZXN0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KEJBU0VfUEFUSCArICIvIiArIGdldFRlc3ROYW1lKGZhbHNlKSArICIuamF2YSIsIGZhbHNlLCBmYWxzZSk7CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9jb2RlSW5zaWdodC9kYWVtb24vbGFtYmRhL0xhbWJkYVBhcmFtc1Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9jb2RlSW5zaWdodC9kYWVtb24vbGFtYmRhL0xhbWJkYVBhcmFtc1Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYzFjMDgzCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNpZ2h0L2RhZW1vbi9sYW1iZGEvTGFtYmRhUGFyYW1zVGVzdC5qYXZhCkBAIC0wLDAgKzEsNDcgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwMC0yMDEyIEpldEJyYWlucyBzLnIuby4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCitwYWNrYWdlIGNvbS5pbnRlbGxpai5jb2RlSW5zaWdodC5kYWVtb24ubGFtYmRhOworCitpbXBvcnQgY29tLmludGVsbGlqLmNvZGVJbnNpZ2h0LmRhZW1vbi5MaWdodERhZW1vbkFuYWx5emVyVGVzdENhc2U7CitpbXBvcnQgb3JnLmpldGJyYWlucy5hbm5vdGF0aW9ucy5Ob25ObHM7CisKK3B1YmxpYyBjbGFzcyBMYW1iZGFQYXJhbXNUZXN0IGV4dGVuZHMgTGlnaHREYWVtb25BbmFseXplclRlc3RDYXNlIHsKKyAgQE5vbk5scyBzdGF0aWMgZmluYWwgU3RyaW5nIEJBU0VfUEFUSCA9ICIvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2xhbWJkYS9wYXJhbXMiOworCisgIHB1YmxpYyB2b2lkIHRlc3RGb3JtYWxQYXJhbXMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoKTsKKyAgfQorICAKKyAgcHVibGljIHZvaWQgdGVzdEluZmVycmVkUGFyYW1zKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0TWV0aG9kQXBwbGljYWJpbGl0eSgpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdCgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEluY29tcGF0aWJsZVR5cGVzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0UmF3KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KCk7CisgIH0KKworICBwcml2YXRlIHZvaWQgZG9UZXN0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KEJBU0VfUEFUSCArICIvIiArIGdldFRlc3ROYW1lKGZhbHNlKSArICIuamF2YSIsIGZhbHNlLCBmYWxzZSk7CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9jb2RlSW5zaWdodC9kYWVtb24vbGFtYmRhL01ldGhvZFJlZkhpZ2hsaWdodGluZ1Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9jb2RlSW5zaWdodC9kYWVtb24vbGFtYmRhL01ldGhvZFJlZkhpZ2hsaWdodGluZ1Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YjM4ZGUxCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNpZ2h0L2RhZW1vbi9sYW1iZGEvTWV0aG9kUmVmSGlnaGxpZ2h0aW5nVGVzdC5qYXZhCkBAIC0wLDAgKzEsMTY0IEBACisvKgorICogQ29weXJpZ2h0IDIwMDAtMjAxMiBKZXRCcmFpbnMgcy5yLm8uCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworcGFja2FnZSBjb20uaW50ZWxsaWouY29kZUluc2lnaHQuZGFlbW9uLmxhbWJkYTsKKworaW1wb3J0IGNvbS5pbnRlbGxpai5jb2RlSW5zaWdodC5kYWVtb24uTGlnaHREYWVtb25BbmFseXplclRlc3RDYXNlOworaW1wb3J0IGNvbS5pbnRlbGxpai5jb2RlSW5zcGVjdGlvbi5Mb2NhbEluc3BlY3Rpb25Ub29sOworaW1wb3J0IGNvbS5pbnRlbGxpai5jb2RlSW5zcGVjdGlvbi51bnVzZWRTeW1ib2wuVW51c2VkU3ltYm9sTG9jYWxJbnNwZWN0aW9uOworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLnByb2plY3RSb290cy5KYXZhU2RrVmVyc2lvbjsKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS5wcm9qZWN0Um9vdHMuSmF2YVZlcnNpb25TZXJ2aWNlOworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLnByb2plY3RSb290cy5KYXZhVmVyc2lvblNlcnZpY2VJbXBsOworaW1wb3J0IG9yZy5qZXRicmFpbnMuYW5ub3RhdGlvbnMuTm9uTmxzOworCitwdWJsaWMgY2xhc3MgTWV0aG9kUmVmSGlnaGxpZ2h0aW5nVGVzdCBleHRlbmRzIExpZ2h0RGFlbW9uQW5hbHl6ZXJUZXN0Q2FzZSB7CisgIEBOb25ObHMgc3RhdGljIGZpbmFsIFN0cmluZyBCQVNFX1BBVEggPSAiL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9sYW1iZGEvbWV0aG9kUmVmIjsKKworICBAT3ZlcnJpZGUKKyAgcHJvdGVjdGVkIExvY2FsSW5zcGVjdGlvblRvb2xbXSBjb25maWd1cmVMb2NhbEluc3BlY3Rpb25Ub29scygpIHsKKyAgICByZXR1cm4gbmV3IExvY2FsSW5zcGVjdGlvblRvb2xbXXsKKyAgICAgIG5ldyBVbnVzZWRTeW1ib2xMb2NhbEluc3BlY3Rpb24oKSwKKyAgICB9OworICB9CisgIAorICBwdWJsaWMgdm9pZCB0ZXN0VmFsaWRDb250ZXh0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0QXNzaWduYWJpbGl0eSgpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdCgpOworICB9CisgIAorICBwdWJsaWMgdm9pZCB0ZXN0QW1iaWd1aXR5KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0TWV0aG9kUmVmZXJlbmNlUmVjZWl2ZXIoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoKTsKKyAgfQorICAKKyAgcHVibGljIHZvaWQgdGVzdE1ldGhvZFJlZk1pc2MoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RNZXRob2RUeXBlUGFyYW1zSW5mZXJlbmNlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0TWV0aG9kUmVmTWlzYzEoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RRdWFsaWZpZXJUeXBlQXJncygpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdCgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFN0YXRpY1Byb2JsZW1zKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0Q29uc3RydWN0b3JSZWZzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0Q29uc3RydWN0b3JSZWZzSW5uZXJDbGFzc2VzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KCk7CisgIH0KKyAgCisgIHB1YmxpYyB2b2lkIHRlc3RWYXJhcmdzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0VmFyYXJnczEoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RDb25zdHJ1Y3RvclJlZklubmVyRnJvbVN1cGVyKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0UmVmZXJlbmNlUGFyYW1ldGVycygpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdCgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFJhd1F1YWxpZmllcigpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdCgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEN5Y2xpY0luZmVyZW5jZSgpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdCgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEFjY2Vzc01vZGlmaWVycygpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdCgpOworICB9CisgIAorICBwdWJsaWMgdm9pZCB0ZXN0RGVmYXVsdENvbnN0cnVjdG9yKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0V2lsZGNhcmRzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0VmFyYXJnc0luUmVjZWl2ZXJQb3NpdGlvbigpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdCgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEluZmVyZW5jZUZyb21NZXRob2RSZWZlcmVuY2UoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RBc3NpZ25hYmlsaXR5MSgpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdCgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFR5cGVBcmd1bWVudHNPbk1ldGhvZFJlZnMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RDb25zdHJ1Y3RvckFzc2lnbmFiaWxpdHkoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RDb25zdHJ1Y3RvcldpdGhvdXRQYXJhbXMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RTT0UoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RJbmZlcmVuY2VGcm9tUmV0dXJuVHlwZSgpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdCh0cnVlKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RSZXR1cm5UeXBlU3BlY2lmaWMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QodHJ1ZSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0UmVzb2x2ZUNvbmZsaWN0cygpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdCh0cnVlKTsKKyAgfQorCisgIHByaXZhdGUgdm9pZCBkb1Rlc3QoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoZmFsc2UpOworICB9CisKKyAgcHJpdmF0ZSB2b2lkIGRvVGVzdChmaW5hbCBib29sZWFuIHdhcm5pbmdzKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAoKEphdmFWZXJzaW9uU2VydmljZUltcGwpSmF2YVZlcnNpb25TZXJ2aWNlLmdldEluc3RhbmNlKCkpLnNldFRlc3RWZXJzaW9uKEphdmFTZGtWZXJzaW9uLkpES18xXzgsIGdldFRlc3RSb290RGlzcG9zYWJsZSgpKTsKKyAgICBkb1Rlc3QoQkFTRV9QQVRIICsgIi8iICsgZ2V0VGVzdE5hbWUoZmFsc2UpICsgIi5qYXZhIiwgd2FybmluZ3MsIGZhbHNlKTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNpZ2h0L2RhZW1vbi9sYW1iZGEvTWV0aG9kUmVmZXJlbmNlc0ZpbmRVc2FnZXNUZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovY29kZUluc2lnaHQvZGFlbW9uL2xhbWJkYS9NZXRob2RSZWZlcmVuY2VzRmluZFVzYWdlc1Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMGJmYjc1Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNpZ2h0L2RhZW1vbi9sYW1iZGEvTWV0aG9kUmVmZXJlbmNlc0ZpbmRVc2FnZXNUZXN0LmphdmEKQEAgLTAsMCArMSw0NyBAQAorLyoKKyAqIENvcHlyaWdodCAyMDAwLTIwMTIgSmV0QnJhaW5zIHMuci5vLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KK3BhY2thZ2UgY29tLmludGVsbGlqLmNvZGVJbnNpZ2h0LmRhZW1vbi5sYW1iZGE7CisKK2ltcG9ydCBjb20uaW50ZWxsaWouY29kZUluc2lnaHQuZGFlbW9uLkxpZ2h0RGFlbW9uQW5hbHl6ZXJUZXN0Q2FzZTsKK2ltcG9ydCBjb20uaW50ZWxsaWoucHNpLlBzaUNsYXNzOworaW1wb3J0IGNvbS5pbnRlbGxpai5wc2kuUHNpTWV0aG9kOworaW1wb3J0IGNvbS5pbnRlbGxpai5wc2kuUHNpUmVmZXJlbmNlOworaW1wb3J0IGNvbS5pbnRlbGxpai5wc2kuc2VhcmNoLnNlYXJjaGVzLk1ldGhvZFJlZmVyZW5jZXNTZWFyY2g7CitpbXBvcnQgb3JnLmpldGJyYWlucy5hbm5vdGF0aW9ucy5Ob25ObHM7CisKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKKworLyoqCisgKiBVc2VyOiBhbm5hCisgKiBEYXRlOiAxMC8xNS8xMgorICovCitwdWJsaWMgY2xhc3MgTWV0aG9kUmVmZXJlbmNlc0ZpbmRVc2FnZXNUZXN0IGV4dGVuZHMgTGlnaHREYWVtb25BbmFseXplclRlc3RDYXNlIHsKKyAgQE5vbk5scyBzdGF0aWMgZmluYWwgU3RyaW5nIEJBU0VfUEFUSCA9ICIvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL2xhbWJkYS9tZXRob2RSZWYvZmluZFVzYWdlcy8iOworICAKKyAgCisKKyAgcHVibGljIHZvaWQgdGVzdENvbnN0cnVjdG9yVXNhZ2VzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZmluYWwgU3RyaW5nIHRlc3ROYW1lID0gZ2V0VGVzdE5hbWUoZmFsc2UpOworICAgIGNvbmZpZ3VyZUJ5RmlsZShCQVNFX1BBVEggKyB0ZXN0TmFtZSArICIuamF2YSIpOworCisgICAgZmluYWwgUHNpQ2xhc3MgYUNsYXNzID0gZ2V0SmF2YUZhY2FkZSgpLmZpbmRDbGFzcyh0ZXN0TmFtZSk7CisgICAgYXNzZXJ0Tm90TnVsbChhQ2xhc3MpOworICAgIGZpbmFsIFBzaU1ldGhvZFtdIGNvbnN0cnVjdG9ycyA9IGFDbGFzcy5nZXRDb25zdHJ1Y3RvcnMoKTsKKyAgICBhc3NlcnRFcXVhbHMoY29uc3RydWN0b3JzLmxlbmd0aCwgMSk7CisgICAgQ29sbGVjdGlvbjxQc2lSZWZlcmVuY2U+IHJlZmVyZW5jZXMgPSBNZXRob2RSZWZlcmVuY2VzU2VhcmNoLnNlYXJjaChjb25zdHJ1Y3RvcnNbMF0pLmZpbmRBbGwoKTsKKyAgICBhc3NlcnRFcXVhbHMoMSwgcmVmZXJlbmNlcy5zaXplKCkpOworICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovY29kZUluc2lnaHQvZGFlbW9uL3F1aWNrRml4L0FjY2Vzc1N0YXRpY1ZpYUluc3RhbmNlVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNpZ2h0L2RhZW1vbi9xdWlja0ZpeC9BY2Nlc3NTdGF0aWNWaWFJbnN0YW5jZVRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZTgyYjMyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNpZ2h0L2RhZW1vbi9xdWlja0ZpeC9BY2Nlc3NTdGF0aWNWaWFJbnN0YW5jZVRlc3QuamF2YQpAQCAtMCwwICsxLDI3IEBACisvKgorICogQ29weXJpZ2h0IDIwMDAtMjAxMiBKZXRCcmFpbnMgcy5yLm8uCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworcGFja2FnZSBjb20uaW50ZWxsaWouY29kZUluc2lnaHQuZGFlbW9uLnF1aWNrRml4OworCitpbXBvcnQgY29tLmludGVsbGlqLmNvZGVJbnNwZWN0aW9uLmFjY2Vzc1N0YXRpY1ZpYUluc3RhbmNlLkFjY2Vzc1N0YXRpY1ZpYUluc3RhbmNlOworCitwdWJsaWMgY2xhc3MgQWNjZXNzU3RhdGljVmlhSW5zdGFuY2VUZXN0IGV4dGVuZHMgTGlnaHRRdWlja0ZpeFRlc3RDYXNlIHsKKyAgQE92ZXJyaWRlCisgIHByb3RlY3RlZCBTdHJpbmcgZ2V0QmFzZVBhdGgoKSB7CisgICAgcmV0dXJuICIvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2FjY2Vzc1N0YXRpY1ZpYUluc3RhbmNlIjsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3QoKSB0aHJvd3MgRXhjZXB0aW9uIHsgZW5hYmxlSW5zcGVjdGlvblRvb2wobmV3IEFjY2Vzc1N0YXRpY1ZpYUluc3RhbmNlKCkpOyBkb0FsbFRlc3RzKCk7IH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9jb2RlSW5zaWdodC9kYWVtb24vcXVpY2tGaXgvQWRkRXhjZXB0aW9uVG9DYXRjaFRlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9jb2RlSW5zaWdodC9kYWVtb24vcXVpY2tGaXgvQWRkRXhjZXB0aW9uVG9DYXRjaFRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZmRmMWJhCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNpZ2h0L2RhZW1vbi9xdWlja0ZpeC9BZGRFeGNlcHRpb25Ub0NhdGNoVGVzdC5qYXZhCkBAIC0wLDAgKzEsMTIgQEAKK3BhY2thZ2UgY29tLmludGVsbGlqLmNvZGVJbnNpZ2h0LmRhZW1vbi5xdWlja0ZpeDsKKworcHVibGljIGNsYXNzIEFkZEV4Y2VwdGlvblRvQ2F0Y2hUZXN0IGV4dGVuZHMgTGlnaHRRdWlja0ZpeFRlc3RDYXNlIHsKKyAgcHVibGljIHZvaWQgdGVzdCgpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvQWxsVGVzdHMoKTsKKyAgfQorCisgIEBPdmVycmlkZQorICBwcm90ZWN0ZWQgU3RyaW5nIGdldEJhc2VQYXRoKCkgeworICAgIHJldHVybiAiL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9hZGRDYXRjaEJsb2NrIjsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNpZ2h0L2RhZW1vbi9xdWlja0ZpeC9BZGRFeGNlcHRpb25Ub1Rocm93c1Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9jb2RlSW5zaWdodC9kYWVtb24vcXVpY2tGaXgvQWRkRXhjZXB0aW9uVG9UaHJvd3NUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzBlNjFkYgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9jb2RlSW5zaWdodC9kYWVtb24vcXVpY2tGaXgvQWRkRXhjZXB0aW9uVG9UaHJvd3NUZXN0LmphdmEKQEAgLTAsMCArMSwxMiBAQAorcGFja2FnZSBjb20uaW50ZWxsaWouY29kZUluc2lnaHQuZGFlbW9uLnF1aWNrRml4OworCitwdWJsaWMgY2xhc3MgQWRkRXhjZXB0aW9uVG9UaHJvd3NUZXN0IGV4dGVuZHMgTGlnaHRRdWlja0ZpeFRlc3RDYXNlIHsKKyAgcHVibGljIHZvaWQgdGVzdCgpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvQWxsVGVzdHMoKTsKKyAgfQorCisgIEBPdmVycmlkZQorICBwcm90ZWN0ZWQgU3RyaW5nIGdldEJhc2VQYXRoKCkgeworICAgIHJldHVybiAiL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9hZGRUb1Rocm93cyI7CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9jb2RlSW5zaWdodC9kYWVtb24vcXVpY2tGaXgvQWRkTWV0aG9kQm9keVRlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9jb2RlSW5zaWdodC9kYWVtb24vcXVpY2tGaXgvQWRkTWV0aG9kQm9keVRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xODYyYWRiCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNpZ2h0L2RhZW1vbi9xdWlja0ZpeC9BZGRNZXRob2RCb2R5VGVzdC5qYXZhCkBAIC0wLDAgKzEsMTYgQEAKKworcGFja2FnZSBjb20uaW50ZWxsaWouY29kZUluc2lnaHQuZGFlbW9uLnF1aWNrRml4OworCisKKworcHVibGljIGNsYXNzIEFkZE1ldGhvZEJvZHlUZXN0IGV4dGVuZHMgTGlnaHRRdWlja0ZpeFRlc3RDYXNlIHsKKworICBwdWJsaWMgdm9pZCB0ZXN0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7IGRvQWxsVGVzdHMoKTsgfQorCisgIEBPdmVycmlkZQorICBwcm90ZWN0ZWQgU3RyaW5nIGdldEJhc2VQYXRoKCkgeworICAgIHJldHVybiAiL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9hZGRNZXRob2RCb2R5IjsKKyAgfQorCit9CisKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9jb2RlSW5zaWdodC9kYWVtb24vcXVpY2tGaXgvQWRkTmV3QXJyYXlFeHByZXNzaW9uVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNpZ2h0L2RhZW1vbi9xdWlja0ZpeC9BZGROZXdBcnJheUV4cHJlc3Npb25UZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjg5ZGRkMAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9jb2RlSW5zaWdodC9kYWVtb24vcXVpY2tGaXgvQWRkTmV3QXJyYXlFeHByZXNzaW9uVGVzdC5qYXZhCkBAIC0wLDAgKzEsMTEgQEAKK3BhY2thZ2UgY29tLmludGVsbGlqLmNvZGVJbnNpZ2h0LmRhZW1vbi5xdWlja0ZpeDsKKworcHVibGljIGNsYXNzIEFkZE5ld0FycmF5RXhwcmVzc2lvblRlc3QgZXh0ZW5kcyBMaWdodFF1aWNrRml4VGVzdENhc2UgeworICBwdWJsaWMgdm9pZCB0ZXN0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7IGRvQWxsVGVzdHMoKTsgfQorCisgIEBPdmVycmlkZQorICBwcm90ZWN0ZWQgU3RyaW5nIGdldEJhc2VQYXRoKCkgeworICAgIHJldHVybiAiL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9hZGROZXdBcnJheUV4cHJlc3Npb24iOworICB9Cit9CisKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9jb2RlSW5zaWdodC9kYWVtb24vcXVpY2tGaXgvQWRkUmV0dXJuVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNpZ2h0L2RhZW1vbi9xdWlja0ZpeC9BZGRSZXR1cm5UZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTZiZWVlZAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9jb2RlSW5zaWdodC9kYWVtb24vcXVpY2tGaXgvQWRkUmV0dXJuVGVzdC5qYXZhCkBAIC0wLDAgKzEsMTQgQEAKKworcGFja2FnZSBjb20uaW50ZWxsaWouY29kZUluc2lnaHQuZGFlbW9uLnF1aWNrRml4OworCitwdWJsaWMgY2xhc3MgQWRkUmV0dXJuVGVzdCBleHRlbmRzIExpZ2h0UXVpY2tGaXhUZXN0Q2FzZSB7CisKKyAgcHVibGljIHZvaWQgdGVzdCgpIHRocm93cyBFeGNlcHRpb24geyBkb0FsbFRlc3RzKCk7IH0KKworICBAT3ZlcnJpZGUKKyAgcHJvdGVjdGVkIFN0cmluZyBnZXRCYXNlUGF0aCgpIHsKKyAgICByZXR1cm4gIi9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvYWRkUmV0dXJuIjsKKyAgfQorCit9CisKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9jb2RlSW5zaWdodC9kYWVtb24vcXVpY2tGaXgvQWRkUnVudGltZUV4Y2VwdGlvblRvVGhyb3dzVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNpZ2h0L2RhZW1vbi9xdWlja0ZpeC9BZGRSdW50aW1lRXhjZXB0aW9uVG9UaHJvd3NUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzgwZDA2ZQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9jb2RlSW5zaWdodC9kYWVtb24vcXVpY2tGaXgvQWRkUnVudGltZUV4Y2VwdGlvblRvVGhyb3dzVGVzdC5qYXZhCkBAIC0wLDAgKzEsMTQgQEAKK3BhY2thZ2UgY29tLmludGVsbGlqLmNvZGVJbnNpZ2h0LmRhZW1vbi5xdWlja0ZpeDsKK2ltcG9ydCBjb20uaW50ZWxsaWouY29kZUluc2lnaHQuZGFlbW9uLkxpZ2h0SW50ZW50aW9uQWN0aW9uVGVzdENhc2U7CisKKy8qKgorICogQGF1dGhvciB2ZW4KKyAqLworcHVibGljIGNsYXNzIEFkZFJ1bnRpbWVFeGNlcHRpb25Ub1Rocm93c1Rlc3QgZXh0ZW5kcyBMaWdodEludGVudGlvbkFjdGlvblRlc3RDYXNlIHsKKyAgcHVibGljIHZvaWQgdGVzdCgpIHRocm93cyBFeGNlcHRpb24geyBkb0FsbFRlc3RzKCk7IH0KKworICBAT3ZlcnJpZGUKKyAgcHJvdGVjdGVkIFN0cmluZyBnZXRCYXNlUGF0aCgpIHsKKyAgICByZXR1cm4gIi9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvYWRkUnVudGltZUV4Y2VwdGlvblRvVGhyb3dzIjsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNpZ2h0L2RhZW1vbi9xdWlja0ZpeC9BZGRUeXBlQXJndW1lbnRzQ29uZGl0aW9uYWxUZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovY29kZUluc2lnaHQvZGFlbW9uL3F1aWNrRml4L0FkZFR5cGVBcmd1bWVudHNDb25kaXRpb25hbFRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZjEzY2YzCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNpZ2h0L2RhZW1vbi9xdWlja0ZpeC9BZGRUeXBlQXJndW1lbnRzQ29uZGl0aW9uYWxUZXN0LmphdmEKQEAgLTAsMCArMSwyNiBAQAorLyoKKyAqIENvcHlyaWdodCAyMDAwLTIwMTIgSmV0QnJhaW5zIHMuci5vLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KK3BhY2thZ2UgY29tLmludGVsbGlqLmNvZGVJbnNpZ2h0LmRhZW1vbi5xdWlja0ZpeDsKKworcHVibGljIGNsYXNzIEFkZFR5cGVBcmd1bWVudHNDb25kaXRpb25hbFRlc3QgZXh0ZW5kcyBMaWdodFF1aWNrRml4MTVUZXN0Q2FzZSB7CisKKyAgcHVibGljIHZvaWQgdGVzdCgpIHRocm93cyBFeGNlcHRpb24geyBkb0FsbFRlc3RzKCk7IH0KKworICBAT3ZlcnJpZGUKKyAgcHJvdGVjdGVkIFN0cmluZyBnZXRCYXNlUGF0aCgpIHsKKyAgICByZXR1cm4gIi9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvYWRkVHlwZUFyZ3VtZW50c0NvbmRpdGlvbmFsIjsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNpZ2h0L2RhZW1vbi9xdWlja0ZpeC9BZGRUeXBlQXJndW1lbnRzVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNpZ2h0L2RhZW1vbi9xdWlja0ZpeC9BZGRUeXBlQXJndW1lbnRzVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY1ZGU1MzUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovY29kZUluc2lnaHQvZGFlbW9uL3F1aWNrRml4L0FkZFR5cGVBcmd1bWVudHNUZXN0LmphdmEKQEAgLTAsMCArMSwxMiBAQAorcGFja2FnZSBjb20uaW50ZWxsaWouY29kZUluc2lnaHQuZGFlbW9uLnF1aWNrRml4OworCitwdWJsaWMgY2xhc3MgQWRkVHlwZUFyZ3VtZW50c1Rlc3QgZXh0ZW5kcyBMaWdodFF1aWNrRml4MTVUZXN0Q2FzZSB7CisKKyAgcHVibGljIHZvaWQgdGVzdCgpIHRocm93cyBFeGNlcHRpb24geyBkb0FsbFRlc3RzKCk7IH0KKworICBAT3ZlcnJpZGUKKyAgcHJvdGVjdGVkIFN0cmluZyBnZXRCYXNlUGF0aCgpIHsKKyAgICByZXR1cm4gIi9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvYWRkVHlwZUFyZ3VtZW50cyI7CisgIH0KKworfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNpZ2h0L2RhZW1vbi9xdWlja0ZpeC9BZGRUeXBlQ2FzdFRlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9jb2RlSW5zaWdodC9kYWVtb24vcXVpY2tGaXgvQWRkVHlwZUNhc3RUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2UyNDgyMwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9jb2RlSW5zaWdodC9kYWVtb24vcXVpY2tGaXgvQWRkVHlwZUNhc3RUZXN0LmphdmEKQEAgLTAsMCArMSwxNiBAQAorCitwYWNrYWdlIGNvbS5pbnRlbGxpai5jb2RlSW5zaWdodC5kYWVtb24ucXVpY2tGaXg7CisKKworCitwdWJsaWMgY2xhc3MgQWRkVHlwZUNhc3RUZXN0IGV4dGVuZHMgTGlnaHRRdWlja0ZpeDE1VGVzdENhc2UgeworCisgIHB1YmxpYyB2b2lkIHRlc3QoKSB0aHJvd3MgRXhjZXB0aW9uIHsgZG9BbGxUZXN0cygpOyB9CisKKyAgQE92ZXJyaWRlCisgIHByb3RlY3RlZCBTdHJpbmcgZ2V0QmFzZVBhdGgoKSB7CisgICAgcmV0dXJuICIvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2FkZFR5cGVDYXN0IjsKKyAgfQorCit9CisKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9jb2RlSW5zaWdodC9kYWVtb24vcXVpY2tGaXgvQWRkVmFyaWFibGVJbml0aWFsaXplclRlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9jb2RlSW5zaWdodC9kYWVtb24vcXVpY2tGaXgvQWRkVmFyaWFibGVJbml0aWFsaXplclRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMWViNTFhCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNpZ2h0L2RhZW1vbi9xdWlja0ZpeC9BZGRWYXJpYWJsZUluaXRpYWxpemVyVGVzdC5qYXZhCkBAIC0wLDAgKzEsMTUgQEAKK3BhY2thZ2UgY29tLmludGVsbGlqLmNvZGVJbnNpZ2h0LmRhZW1vbi5xdWlja0ZpeDsKKworcHVibGljIGNsYXNzIEFkZFZhcmlhYmxlSW5pdGlhbGl6ZXJUZXN0IGV4dGVuZHMgTGlnaHRRdWlja0ZpeFRlc3RDYXNlIHsKKworICBwdWJsaWMgdm9pZCB0ZXN0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9BbGxUZXN0cygpOworICB9CisKKyAgQE92ZXJyaWRlCisgIHByb3RlY3RlZCBTdHJpbmcgZ2V0QmFzZVBhdGgoKSB7CisgICAgcmV0dXJuICIvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2FkZFZhcmlhYmxlSW5pdGlhbGl6ZXIiOworICB9CisKK30KKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNpZ2h0L2RhZW1vbi9xdWlja0ZpeC9Bbm5vdGF0ZU1ldGhvZFRlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9jb2RlSW5zaWdodC9kYWVtb24vcXVpY2tGaXgvQW5ub3RhdGVNZXRob2RUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTk2ODNhZQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9jb2RlSW5zaWdodC9kYWVtb24vcXVpY2tGaXgvQW5ub3RhdGVNZXRob2RUZXN0LmphdmEKQEAgLTAsMCArMSw0NSBAQAorcGFja2FnZSBjb20uaW50ZWxsaWouY29kZUluc2lnaHQuZGFlbW9uLnF1aWNrRml4OworCitpbXBvcnQgY29tLmludGVsbGlqLmNvZGVJbnNwZWN0aW9uLkFubm90YXRlTWV0aG9kRml4OworaW1wb3J0IGNvbS5pbnRlbGxpai5jb2RlSW5zcGVjdGlvbi5Mb2NhbEluc3BlY3Rpb25Ub29sOworaW1wb3J0IGNvbS5pbnRlbGxpai5jb2RlSW5zcGVjdGlvbi5udWxsYWJsZS5OdWxsYWJsZVN0dWZmSW5zcGVjdGlvbjsKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS5wcm9qZWN0LlByb2plY3Q7CitpbXBvcnQgY29tLmludGVsbGlqLnBzaS5Qc2lNZXRob2Q7CitpbXBvcnQgb3JnLmpldGJyYWlucy5hbm5vdGF0aW9ucy5Ob25ObHM7CisKK3B1YmxpYyBjbGFzcyBBbm5vdGF0ZU1ldGhvZFRlc3QgZXh0ZW5kcyBMaWdodFF1aWNrRml4MTVUZXN0Q2FzZSB7CisgIHByaXZhdGUgYm9vbGVhbiBteU11c3RCZUF2YWlsYWJsZUFmdGVySW52b2tlOworCisgIEBPdmVycmlkZQorICBwcm90ZWN0ZWQgU3RyaW5nIGdldEJhc2VQYXRoKCkgeworICAgIHJldHVybiAiL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9hbm5vdGF0ZU1ldGhvZCI7CisgIH0KKworICBAT3ZlcnJpZGUKKyAgcHJvdGVjdGVkIExvY2FsSW5zcGVjdGlvblRvb2xbXSBjb25maWd1cmVMb2NhbEluc3BlY3Rpb25Ub29scygpIHsKKyAgICByZXR1cm4gbmV3IExvY2FsSW5zcGVjdGlvblRvb2xbXXtuZXcgTnVsbGFibGVTdHVmZkluc3BlY3Rpb24oKXsKKyAgICAgIEBPdmVycmlkZQorICAgICAgcHJvdGVjdGVkIEFubm90YXRlTWV0aG9kRml4IGNyZWF0ZUFubm90YXRlTWV0aG9kRml4KFN0cmluZyBkZWZhdWx0Tm90TnVsbCwgU3RyaW5nW10gYW5ub3RhdGlvbnNUb1JlbW92ZSkgeworICAgICAgICByZXR1cm4gbmV3IEFubm90YXRlTWV0aG9kRml4KGRlZmF1bHROb3ROdWxsLCBhbm5vdGF0aW9uc1RvUmVtb3ZlKXsKKyAgICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgICBwdWJsaWMgaW50IGFubm90YXRlQmFzZU1ldGhvZChmaW5hbCBQc2lNZXRob2QgbWV0aG9kLCBmaW5hbCBQc2lNZXRob2Qgc3VwZXJNZXRob2QsIGZpbmFsIFByb2plY3QgcHJvamVjdCkgeworICAgICAgICAgICAgQE5vbk5scyBTdHJpbmcgbmFtZSA9IG1ldGhvZC5nZXROYW1lKCk7CisgICAgICAgICAgICBpbnQgcmV0ID0gbmFtZS5zdGFydHNXaXRoKCJhbm5vdGF0ZUJhc2UiKSA/IDAgIC8vIHllcywgYW5ub3RhdGUgYWxsCisgICAgICAgICAgICAgICAgICAgICAgOiBuYW1lLnN0YXJ0c1dpdGgoImRvbnRBbm5vdGF0ZUJhc2UiKSA/IDEgLy8gZG8gbm90IGFubm90YXRlIGJhc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIDogMjsgLy9hYm9ydAorICAgICAgICAgICAgbXlNdXN0QmVBdmFpbGFibGVBZnRlckludm9rZSA9IHJldCA9PSAyOworICAgICAgICAgICAgcmV0dXJuIHJldDsKKyAgICAgICAgICB9CisgICAgICAgIH07CisgICAgICB9CisKKyAgICB9fTsKKyAgfQorCisgIEBPdmVycmlkZQorICBwcm90ZWN0ZWQgYm9vbGVhbiBzaG91bGRCZUF2YWlsYWJsZUFmdGVyRXhlY3V0aW9uKCkgeworICAgIHJldHVybiBteU11c3RCZUF2YWlsYWJsZUFmdGVySW52b2tlOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdCgpIHRocm93cyBFeGNlcHRpb24geyBkb0FsbFRlc3RzKCk7IH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9jb2RlSW5zaWdodC9kYWVtb24vcXVpY2tGaXgvQW5vbnltb3VzMkxhbWJkYUluc3BlY3Rpb25UZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovY29kZUluc2lnaHQvZGFlbW9uL3F1aWNrRml4L0Fub255bW91czJMYW1iZGFJbnNwZWN0aW9uVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg5MmE5MmIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovY29kZUluc2lnaHQvZGFlbW9uL3F1aWNrRml4L0Fub255bW91czJMYW1iZGFJbnNwZWN0aW9uVGVzdC5qYXZhCkBAIC0wLDAgKzEsMzcgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwMC0yMDEyIEpldEJyYWlucyBzLnIuby4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCitwYWNrYWdlIGNvbS5pbnRlbGxpai5jb2RlSW5zaWdodC5kYWVtb24ucXVpY2tGaXg7CisKK2ltcG9ydCBjb20uaW50ZWxsaWouY29kZUluc3BlY3Rpb24uQW5vbnltb3VzQ2FuQmVMYW1iZGFJbnNwZWN0aW9uOworaW1wb3J0IGNvbS5pbnRlbGxpai5jb2RlSW5zcGVjdGlvbi5Mb2NhbEluc3BlY3Rpb25Ub29sOworCisKK3B1YmxpYyBjbGFzcyBBbm9ueW1vdXMyTGFtYmRhSW5zcGVjdGlvblRlc3QgZXh0ZW5kcyBMaWdodFF1aWNrRml4VGVzdENhc2UgeworICBAT3ZlcnJpZGUKKyAgcHJvdGVjdGVkIExvY2FsSW5zcGVjdGlvblRvb2xbXSBjb25maWd1cmVMb2NhbEluc3BlY3Rpb25Ub29scygpIHsKKyAgICByZXR1cm4gbmV3IExvY2FsSW5zcGVjdGlvblRvb2xbXXsKKyAgICAgIG5ldyBBbm9ueW1vdXNDYW5CZUxhbWJkYUluc3BlY3Rpb24oKSwKKyAgICB9OworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdCgpIHRocm93cyBFeGNlcHRpb24geyBkb0FsbFRlc3RzKCk7IH0KKworICBAT3ZlcnJpZGUKKyAgcHJvdGVjdGVkIFN0cmluZyBnZXRCYXNlUGF0aCgpIHsKKyAgICByZXR1cm4gIi9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvYW5vbnltb3VzMmxhbWJkYSI7CisgIH0KKworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9jb2RlSW5zaWdodC9kYWVtb24vcXVpY2tGaXgvQW5vbnltb3VzMk1ldGhvZFJlZmVyZW5jZUluc3BlY3Rpb25UZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovY29kZUluc2lnaHQvZGFlbW9uL3F1aWNrRml4L0Fub255bW91czJNZXRob2RSZWZlcmVuY2VJbnNwZWN0aW9uVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU3ZmIzYmUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovY29kZUluc2lnaHQvZGFlbW9uL3F1aWNrRml4L0Fub255bW91czJNZXRob2RSZWZlcmVuY2VJbnNwZWN0aW9uVGVzdC5qYXZhCkBAIC0wLDAgKzEsMzcgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwMC0yMDEyIEpldEJyYWlucyBzLnIuby4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCitwYWNrYWdlIGNvbS5pbnRlbGxpai5jb2RlSW5zaWdodC5kYWVtb24ucXVpY2tGaXg7CisKK2ltcG9ydCBjb20uaW50ZWxsaWouY29kZUluc3BlY3Rpb24uQW5vbnltb3VzQ2FuQmVNZXRob2RSZWZlcmVuY2VJbnNwZWN0aW9uOworaW1wb3J0IGNvbS5pbnRlbGxpai5jb2RlSW5zcGVjdGlvbi5Mb2NhbEluc3BlY3Rpb25Ub29sOworCisKK3B1YmxpYyBjbGFzcyBBbm9ueW1vdXMyTWV0aG9kUmVmZXJlbmNlSW5zcGVjdGlvblRlc3QgZXh0ZW5kcyBMaWdodFF1aWNrRml4VGVzdENhc2UgeworICBAT3ZlcnJpZGUKKyAgcHJvdGVjdGVkIExvY2FsSW5zcGVjdGlvblRvb2xbXSBjb25maWd1cmVMb2NhbEluc3BlY3Rpb25Ub29scygpIHsKKyAgICByZXR1cm4gbmV3IExvY2FsSW5zcGVjdGlvblRvb2xbXXsKKyAgICAgIG5ldyBBbm9ueW1vdXNDYW5CZU1ldGhvZFJlZmVyZW5jZUluc3BlY3Rpb24oKSwKKyAgICB9OworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdCgpIHRocm93cyBFeGNlcHRpb24geyBkb0FsbFRlc3RzKCk7IH0KKworICBAT3ZlcnJpZGUKKyAgcHJvdGVjdGVkIFN0cmluZyBnZXRCYXNlUGF0aCgpIHsKKyAgICByZXR1cm4gIi9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvYW5vbnltb3VzMm1ldGhvZFJlZmVyZW5jZSI7CisgIH0KKworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9jb2RlSW5zaWdodC9kYWVtb24vcXVpY2tGaXgvQXNzaWduRmllbGRGcm9tUGFyYW1ldGVyVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNpZ2h0L2RhZW1vbi9xdWlja0ZpeC9Bc3NpZ25GaWVsZEZyb21QYXJhbWV0ZXJUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGUxY2ExOQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9jb2RlSW5zaWdodC9kYWVtb24vcXVpY2tGaXgvQXNzaWduRmllbGRGcm9tUGFyYW1ldGVyVGVzdC5qYXZhCkBAIC0wLDAgKzEsMzggQEAKK3BhY2thZ2UgY29tLmludGVsbGlqLmNvZGVJbnNpZ2h0LmRhZW1vbi5xdWlja0ZpeDsKKworaW1wb3J0IGNvbS5pbnRlbGxpai5wc2kuY29kZVN0eWxlLkNvZGVTdHlsZVNldHRpbmdzOworaW1wb3J0IGNvbS5pbnRlbGxpai5wc2kuY29kZVN0eWxlLkNvZGVTdHlsZVNldHRpbmdzTWFuYWdlcjsKK2ltcG9ydCBjb20uaW50ZWxsaWouY29kZUluc2lnaHQuZGFlbW9uLkxpZ2h0SW50ZW50aW9uQWN0aW9uVGVzdENhc2U7CitpbXBvcnQgb3JnLmpkb20uRWxlbWVudDsKKworLyoqCisgKiBAYXV0aG9yIHZlbgorICovCitwdWJsaWMgY2xhc3MgQXNzaWduRmllbGRGcm9tUGFyYW1ldGVyVGVzdCBleHRlbmRzIExpZ2h0SW50ZW50aW9uQWN0aW9uVGVzdENhc2UgeworICBwcml2YXRlIEVsZW1lbnQgbXlPbGRTZXR0aW5nczsKKworICBAT3ZlcnJpZGUKKyAgcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBzdXBlci5zZXRVcCgpOworICAgIENvZGVTdHlsZVNldHRpbmdzIHNldHRpbmdzID0gQ29kZVN0eWxlU2V0dGluZ3NNYW5hZ2VyLmdldFNldHRpbmdzKGdldFByb2plY3QoKSk7CisgICAgbXlPbGRTZXR0aW5ncyA9IG5ldyBFbGVtZW50KCJkdW1teTIiKTsKKyAgICBzZXR0aW5ncy53cml0ZUV4dGVybmFsKG15T2xkU2V0dGluZ3MpOworICAgIHNldHRpbmdzLkZJRUxEX05BTUVfUFJFRklYID0gIm15IjsKKyAgICBzZXR0aW5ncy5TVEFUSUNfRklFTERfTkFNRV9QUkVGSVggPSAib3VyIjsKKyAgfQorCisgIEBPdmVycmlkZQorICBwcm90ZWN0ZWQgdm9pZCB0ZWFyRG93bigpIHRocm93cyBFeGNlcHRpb24geworICAgIENvZGVTdHlsZVNldHRpbmdzIHNldHRpbmdzID0gQ29kZVN0eWxlU2V0dGluZ3NNYW5hZ2VyLmdldFNldHRpbmdzKGdldFByb2plY3QoKSk7CisgICAgc2V0dGluZ3MucmVhZEV4dGVybmFsKG15T2xkU2V0dGluZ3MpOworICAgIHN1cGVyLnRlYXJEb3duKCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7IGRvQWxsVGVzdHMoKTsgfQorCisgIEBPdmVycmlkZQorICBwcm90ZWN0ZWQgU3RyaW5nIGdldEJhc2VQYXRoKCkgeworICAgIHJldHVybiAiL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9hc3NpZ25GaWVsZEZyb21QYXJhbWV0ZXIiOworICB9CisKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9jb2RlSW5zaWdodC9kYWVtb24vcXVpY2tGaXgvQmluZEZpZWxkc0Zyb21QYXJhbWV0ZXJzVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNpZ2h0L2RhZW1vbi9xdWlja0ZpeC9CaW5kRmllbGRzRnJvbVBhcmFtZXRlcnNUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmIwYmVkMAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9jb2RlSW5zaWdodC9kYWVtb24vcXVpY2tGaXgvQmluZEZpZWxkc0Zyb21QYXJhbWV0ZXJzVGVzdC5qYXZhCkBAIC0wLDAgKzEsNDYgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwMC0yMDEyIEpldEJyYWlucyBzLnIuby4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCitwYWNrYWdlIGNvbS5pbnRlbGxpai5jb2RlSW5zaWdodC5kYWVtb24ucXVpY2tGaXg7CisKK2ltcG9ydCBjb20uaW50ZWxsaWouY29kZUluc2lnaHQuZGFlbW9uLkxpZ2h0SW50ZW50aW9uQWN0aW9uVGVzdENhc2U7CitpbXBvcnQgY29tLmludGVsbGlqLnBzaS5jb2RlU3R5bGUuQ29kZVN0eWxlU2V0dGluZ3M7CitpbXBvcnQgY29tLmludGVsbGlqLnBzaS5jb2RlU3R5bGUuQ29kZVN0eWxlU2V0dGluZ3NNYW5hZ2VyOworCisvKioKKyAqIEBhdXRob3IgRGFuaWxhIFBvbm9tYXJlbmtvCisgKi8KK3B1YmxpYyBjbGFzcyBCaW5kRmllbGRzRnJvbVBhcmFtZXRlcnNUZXN0IGV4dGVuZHMgTGlnaHRJbnRlbnRpb25BY3Rpb25UZXN0Q2FzZSB7CisgIEBPdmVycmlkZQorICBwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24geworICAgIHN1cGVyLnNldFVwKCk7CisgICAgQ29kZVN0eWxlU2V0dGluZ3Mgc2V0dGluZ3MgPSBDb2RlU3R5bGVTZXR0aW5nc01hbmFnZXIuZ2V0U2V0dGluZ3MoZ2V0UHJvamVjdCgpKTsKKyAgICBzZXR0aW5ncy5GSUVMRF9OQU1FX1BSRUZJWCA9ICJteSI7CisgIH0KKworICBAT3ZlcnJpZGUKKyAgcHJvdGVjdGVkIHZvaWQgdGVhckRvd24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBDb2RlU3R5bGVTZXR0aW5ncyBzZXR0aW5ncyA9IENvZGVTdHlsZVNldHRpbmdzTWFuYWdlci5nZXRTZXR0aW5ncyhnZXRQcm9qZWN0KCkpOworICAgIHNldHRpbmdzLkZJRUxEX05BTUVfUFJFRklYID0gIiI7CisgICAgc3VwZXIudGVhckRvd24oKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3QoKSB0aHJvd3MgRXhjZXB0aW9uIHsgZG9BbGxUZXN0cygpOyB9CisKKyAgQE92ZXJyaWRlCisgIHByb3RlY3RlZCBTdHJpbmcgZ2V0QmFzZVBhdGgoKSB7CisgICAgcmV0dXJuICIvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2JpbmRGaWVsZHNGcm9tUGFyYW1ldGVycyI7CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9jb2RlSW5zaWdodC9kYWVtb24vcXVpY2tGaXgvQnJlYWtTdHJpbmdPbkxpbmVCcmVha3NUZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovY29kZUluc2lnaHQvZGFlbW9uL3F1aWNrRml4L0JyZWFrU3RyaW5nT25MaW5lQnJlYWtzVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk0NjgxNzIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovY29kZUluc2lnaHQvZGFlbW9uL3F1aWNrRml4L0JyZWFrU3RyaW5nT25MaW5lQnJlYWtzVGVzdC5qYXZhCkBAIC0wLDAgKzEsMzAgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwMC0yMDEyIEpldEJyYWlucyBzLnIuby4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCitwYWNrYWdlIGNvbS5pbnRlbGxpai5jb2RlSW5zaWdodC5kYWVtb24ucXVpY2tGaXg7CisKKy8qKgorICogQGF1dGhvciBEYW5pbGEgUG9ub21hcmVua28KKyAqLworcHVibGljIGNsYXNzIEJyZWFrU3RyaW5nT25MaW5lQnJlYWtzVGVzdCBleHRlbmRzIExpZ2h0UXVpY2tGaXhUZXN0Q2FzZSB7CisKKyAgcHVibGljIHZvaWQgdGVzdCgpIHRocm93cyBFeGNlcHRpb24geyBkb0FsbFRlc3RzKCk7IH0KKworICBAT3ZlcnJpZGUKKyAgcHJvdGVjdGVkIFN0cmluZyBnZXRCYXNlUGF0aCgpIHsKKyAgICByZXR1cm4gIi9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvYnJlYWtTdHJpbmdPbkxpbmVCcmVha3MiOworICB9CisKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovY29kZUluc2lnaHQvZGFlbW9uL3F1aWNrRml4L0JyaW5nVmFyaWFibGVJbnRvU2NvcGVUZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovY29kZUluc2lnaHQvZGFlbW9uL3F1aWNrRml4L0JyaW5nVmFyaWFibGVJbnRvU2NvcGVUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzY2MzQwMQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9jb2RlSW5zaWdodC9kYWVtb24vcXVpY2tGaXgvQnJpbmdWYXJpYWJsZUludG9TY29wZVRlc3QuamF2YQpAQCAtMCwwICsxLDE1IEBACitwYWNrYWdlIGNvbS5pbnRlbGxpai5jb2RlSW5zaWdodC5kYWVtb24ucXVpY2tGaXg7CisKKy8qKgorICogQGF1dGhvciB2ZW4KKyAqLworcHVibGljIGNsYXNzIEJyaW5nVmFyaWFibGVJbnRvU2NvcGVUZXN0IGV4dGVuZHMgTGlnaHRRdWlja0ZpeFRlc3RDYXNlIHsKKworICBwdWJsaWMgdm9pZCB0ZXN0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7IGRvQWxsVGVzdHMoKTsgfQorCisgIEBPdmVycmlkZQorICBwcm90ZWN0ZWQgU3RyaW5nIGdldEJhc2VQYXRoKCkgeworICAgIHJldHVybiAiL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9icmluZ1ZhcmlhYmxlSW50b1Njb3BlIjsKKyAgfQorCit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovY29kZUluc2lnaHQvZGFlbW9uL3F1aWNrRml4L0Nhc3RDb25zdHJ1Y3RvclBhcmFtZXRlcnNUZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovY29kZUluc2lnaHQvZGFlbW9uL3F1aWNrRml4L0Nhc3RDb25zdHJ1Y3RvclBhcmFtZXRlcnNUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTUzOThlYwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9jb2RlSW5zaWdodC9kYWVtb24vcXVpY2tGaXgvQ2FzdENvbnN0cnVjdG9yUGFyYW1ldGVyc1Rlc3QuamF2YQpAQCAtMCwwICsxLDE2IEBACisKK3BhY2thZ2UgY29tLmludGVsbGlqLmNvZGVJbnNpZ2h0LmRhZW1vbi5xdWlja0ZpeDsKKworCisKK3B1YmxpYyBjbGFzcyBDYXN0Q29uc3RydWN0b3JQYXJhbWV0ZXJzVGVzdCBleHRlbmRzIExpZ2h0UXVpY2tGaXhUZXN0Q2FzZSB7CisKKyAgcHVibGljIHZvaWQgdGVzdCgpIHRocm93cyBFeGNlcHRpb24geyBkb0FsbFRlc3RzKCk7IH0KKworICBAT3ZlcnJpZGUKKyAgcHJvdGVjdGVkIFN0cmluZyBnZXRCYXNlUGF0aCgpIHsKKyAgICByZXR1cm4gIi9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY2FzdENvbnN0cnVjdG9yUGFyYW1ldGVycyI7CisgIH0KKworfQorCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovY29kZUluc2lnaHQvZGFlbW9uL3F1aWNrRml4L0Nhc3RNZXRob2RQYXJhbWV0ZXJzVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNpZ2h0L2RhZW1vbi9xdWlja0ZpeC9DYXN0TWV0aG9kUGFyYW1ldGVyc1Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YWNiMWZlCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNpZ2h0L2RhZW1vbi9xdWlja0ZpeC9DYXN0TWV0aG9kUGFyYW1ldGVyc1Rlc3QuamF2YQpAQCAtMCwwICsxLDIyIEBACisKK3BhY2thZ2UgY29tLmludGVsbGlqLmNvZGVJbnNpZ2h0LmRhZW1vbi5xdWlja0ZpeDsKKworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLnJvb3RzLkxhbmd1YWdlTGV2ZWxQcm9qZWN0RXh0ZW5zaW9uOworaW1wb3J0IGNvbS5pbnRlbGxpai5wb20uamF2YS5MYW5ndWFnZUxldmVsOworCitwdWJsaWMgY2xhc3MgQ2FzdE1ldGhvZFBhcmFtZXRlcnNUZXN0IGV4dGVuZHMgTGlnaHRRdWlja0ZpeFRlc3RDYXNlIHsKKworICBAT3ZlcnJpZGUKKyAgcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBzdXBlci5zZXRVcCgpOworICAgIExhbmd1YWdlTGV2ZWxQcm9qZWN0RXh0ZW5zaW9uLmdldEluc3RhbmNlKGdldFByb2plY3QoKSkuc2V0TGFuZ3VhZ2VMZXZlbChMYW5ndWFnZUxldmVsLkpES18xXzMpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdCgpIHRocm93cyBFeGNlcHRpb24geyBkb0FsbFRlc3RzKCk7IH0KKworICBAT3ZlcnJpZGUKKyAgcHJvdGVjdGVkIFN0cmluZyBnZXRCYXNlUGF0aCgpIHsKKyAgICByZXR1cm4gIi9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY2FzdE1ldGhvZFBhcmFtZXRlcnMiOworICB9Cit9CisKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9jb2RlSW5zaWdodC9kYWVtb24vcXVpY2tGaXgvQ2hhbmdlRXh0ZW5kc1RvSW1wbGVtZW50c1Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9jb2RlSW5zaWdodC9kYWVtb24vcXVpY2tGaXgvQ2hhbmdlRXh0ZW5kc1RvSW1wbGVtZW50c1Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZjg3Njg5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNpZ2h0L2RhZW1vbi9xdWlja0ZpeC9DaGFuZ2VFeHRlbmRzVG9JbXBsZW1lbnRzVGVzdC5qYXZhCkBAIC0wLDAgKzEsMTEgQEAKK3BhY2thZ2UgY29tLmludGVsbGlqLmNvZGVJbnNpZ2h0LmRhZW1vbi5xdWlja0ZpeDsKKworcHVibGljIGNsYXNzIENoYW5nZUV4dGVuZHNUb0ltcGxlbWVudHNUZXN0IGV4dGVuZHMgTGlnaHRRdWlja0ZpeDE1VGVzdENhc2UgeworICBwdWJsaWMgdm9pZCB0ZXN0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7IGRvQWxsVGVzdHMoKTsgfQorCisgIEBPdmVycmlkZQorICBwcm90ZWN0ZWQgU3RyaW5nIGdldEJhc2VQYXRoKCkgeworICAgIHJldHVybiAiL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jaGFuZ2VFeHRlbmRzVG9JbXBsZW1lbnRzIjsKKyAgfQorfQorCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovY29kZUluc2lnaHQvZGFlbW9uL3F1aWNrRml4L0NoYW5nZU1ldGhvZFNpZ25hdHVyZUZyb21Vc2FnZVRlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9jb2RlSW5zaWdodC9kYWVtb24vcXVpY2tGaXgvQ2hhbmdlTWV0aG9kU2lnbmF0dXJlRnJvbVVzYWdlVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVlMDNhNDAKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovY29kZUluc2lnaHQvZGFlbW9uL3F1aWNrRml4L0NoYW5nZU1ldGhvZFNpZ25hdHVyZUZyb21Vc2FnZVRlc3QuamF2YQpAQCAtMCwwICsxLDE0IEBACitwYWNrYWdlIGNvbS5pbnRlbGxpai5jb2RlSW5zaWdodC5kYWVtb24ucXVpY2tGaXg7CisKKy8qKgorICogQGF1dGhvciBjZHIKKyAqLworcHVibGljIGNsYXNzIENoYW5nZU1ldGhvZFNpZ25hdHVyZUZyb21Vc2FnZVRlc3QgZXh0ZW5kcyBMaWdodFF1aWNrRml4MTVUZXN0Q2FzZSB7CisKKyAgcHVibGljIHZvaWQgdGVzdCgpIHRocm93cyBFeGNlcHRpb24geyBkb0FsbFRlc3RzKCk7IH0KKworICBAT3ZlcnJpZGUKKyAgcHJvdGVjdGVkIFN0cmluZyBnZXRCYXNlUGF0aCgpIHsKKyAgICByZXR1cm4gIi9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY2hhbmdlTWV0aG9kU2lnbmF0dXJlRnJvbVVzYWdlIjsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNpZ2h0L2RhZW1vbi9xdWlja0ZpeC9DaGFuZ2VOZXdPcGVyYXRvclR5cGVUZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovY29kZUluc2lnaHQvZGFlbW9uL3F1aWNrRml4L0NoYW5nZU5ld09wZXJhdG9yVHlwZVRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OGU0MzhiCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNpZ2h0L2RhZW1vbi9xdWlja0ZpeC9DaGFuZ2VOZXdPcGVyYXRvclR5cGVUZXN0LmphdmEKQEAgLTAsMCArMSwxMiBAQAorcGFja2FnZSBjb20uaW50ZWxsaWouY29kZUluc2lnaHQuZGFlbW9uLnF1aWNrRml4OworCitwdWJsaWMgY2xhc3MgQ2hhbmdlTmV3T3BlcmF0b3JUeXBlVGVzdCBleHRlbmRzIExpZ2h0UXVpY2tGaXgxNVRlc3RDYXNlIHsKKworICBwdWJsaWMgdm9pZCB0ZXN0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7IGRvQWxsVGVzdHMoKTsgfQorCisgIEBPdmVycmlkZQorICBwcm90ZWN0ZWQgU3RyaW5nIGdldEJhc2VQYXRoKCkgeworICAgIHJldHVybiAiL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jaGFuZ2VOZXdPcGVyYXRvclR5cGUiOworICB9CisKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9jb2RlSW5zaWdodC9kYWVtb24vcXVpY2tGaXgvQ2hhbmdlUGFyYW1ldGVyQ2xhc3NUZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovY29kZUluc2lnaHQvZGFlbW9uL3F1aWNrRml4L0NoYW5nZVBhcmFtZXRlckNsYXNzVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY2ZGU4NWUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovY29kZUluc2lnaHQvZGFlbW9uL3F1aWNrRml4L0NoYW5nZVBhcmFtZXRlckNsYXNzVGVzdC5qYXZhCkBAIC0wLDAgKzEsMjEgQEAKKworcGFja2FnZSBjb20uaW50ZWxsaWouY29kZUluc2lnaHQuZGFlbW9uLnF1aWNrRml4OworCitpbXBvcnQgY29tLmludGVsbGlqLnBvbS5qYXZhLkxhbmd1YWdlTGV2ZWw7CisKKworCitwdWJsaWMgY2xhc3MgQ2hhbmdlUGFyYW1ldGVyQ2xhc3NUZXN0IGV4dGVuZHMgTGlnaHRRdWlja0ZpeDE1VGVzdENhc2UgeworCisgIHB1YmxpYyB2b2lkIHRlc3QoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBzZXRMYW5ndWFnZUxldmVsKExhbmd1YWdlTGV2ZWwuSkRLXzFfNSk7CisgICAgZG9BbGxUZXN0cygpOworICB9CisKKyAgQE92ZXJyaWRlCisgIHByb3RlY3RlZCBTdHJpbmcgZ2V0QmFzZVBhdGgoKSB7CisgICAgcmV0dXJuICIvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NoYW5nZVBhcmFtZXRlckNsYXNzIjsKKyAgfQorCit9CisKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9jb2RlSW5zaWdodC9kYWVtb24vcXVpY2tGaXgvQ2hhbmdlU3RyaW5nTGl0ZXJhbFRvQ2hhckluTWV0aG9kQ2FsbFRlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9jb2RlSW5zaWdodC9kYWVtb24vcXVpY2tGaXgvQ2hhbmdlU3RyaW5nTGl0ZXJhbFRvQ2hhckluTWV0aG9kQ2FsbFRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZTI4OTFhCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNpZ2h0L2RhZW1vbi9xdWlja0ZpeC9DaGFuZ2VTdHJpbmdMaXRlcmFsVG9DaGFySW5NZXRob2RDYWxsVGVzdC5qYXZhCkBAIC0wLDAgKzEsMTEgQEAKK3BhY2thZ2UgY29tLmludGVsbGlqLmNvZGVJbnNpZ2h0LmRhZW1vbi5xdWlja0ZpeDsKKworcHVibGljIGNsYXNzIENoYW5nZVN0cmluZ0xpdGVyYWxUb0NoYXJJbk1ldGhvZENhbGxUZXN0IGV4dGVuZHMgTGlnaHRRdWlja0ZpeFRlc3RDYXNlIHsKKworICBwdWJsaWMgdm9pZCB0ZXN0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7IGRvQWxsVGVzdHMoKTsgfQorCisgIEBPdmVycmlkZQorICBwcm90ZWN0ZWQgU3RyaW5nIGdldEJhc2VQYXRoKCkgeworICAgIHJldHVybiAiL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9zdHJpbmdUb0NoYXJhY3RlckxpdGVyYWwiOworICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovY29kZUluc2lnaHQvZGFlbW9uL3F1aWNrRml4L0NoYW5nZVRvQXBwZW5kVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNpZ2h0L2RhZW1vbi9xdWlja0ZpeC9DaGFuZ2VUb0FwcGVuZFRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jN2QxYTdiCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNpZ2h0L2RhZW1vbi9xdWlja0ZpeC9DaGFuZ2VUb0FwcGVuZFRlc3QuamF2YQpAQCAtMCwwICsxLDExIEBACitwYWNrYWdlIGNvbS5pbnRlbGxpai5jb2RlSW5zaWdodC5kYWVtb24ucXVpY2tGaXg7CisKK3B1YmxpYyBjbGFzcyBDaGFuZ2VUb0FwcGVuZFRlc3QgZXh0ZW5kcyBMaWdodFF1aWNrRml4VGVzdENhc2UgeworCisgIHB1YmxpYyB2b2lkIHRlc3QoKSB0aHJvd3MgRXhjZXB0aW9uIHsgZG9BbGxUZXN0cygpOyB9CisKKyAgQE92ZXJyaWRlCisgIHByb3RlY3RlZCBTdHJpbmcgZ2V0QmFzZVBhdGgoKSB7CisgICAgcmV0dXJuICIvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NoYW5nZVRvQXBwZW5kIjsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNpZ2h0L2RhZW1vbi9xdWlja0ZpeC9DaGFuZ2VUeXBlQXJndW1lbnRzRml4VGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNpZ2h0L2RhZW1vbi9xdWlja0ZpeC9DaGFuZ2VUeXBlQXJndW1lbnRzRml4VGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdhYTI4OWM0Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNpZ2h0L2RhZW1vbi9xdWlja0ZpeC9DaGFuZ2VUeXBlQXJndW1lbnRzRml4VGVzdC5qYXZhCkBAIC0wLDAgKzEsMjYgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwMC0yMDEyIEpldEJyYWlucyBzLnIuby4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCitwYWNrYWdlIGNvbS5pbnRlbGxpai5jb2RlSW5zaWdodC5kYWVtb24ucXVpY2tGaXg7CisKK3B1YmxpYyBjbGFzcyBDaGFuZ2VUeXBlQXJndW1lbnRzRml4VGVzdCBleHRlbmRzIExpZ2h0UXVpY2tGaXgxNVRlc3RDYXNlIHsKKworICBwdWJsaWMgdm9pZCB0ZXN0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7IGRvQWxsVGVzdHMoKTsgfQorCisgIEBPdmVycmlkZQorICBwcm90ZWN0ZWQgU3RyaW5nIGdldEJhc2VQYXRoKCkgeworICAgIHJldHVybiAiL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jaGFuZ2VUeXBlQXJncyI7CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9jb2RlSW5zaWdodC9kYWVtb24vcXVpY2tGaXgvQ29udmVydENvbG9yUmVwcmVzZW50YXRpb25UZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovY29kZUluc2lnaHQvZGFlbW9uL3F1aWNrRml4L0NvbnZlcnRDb2xvclJlcHJlc2VudGF0aW9uVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmExM2YwNzgKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovY29kZUluc2lnaHQvZGFlbW9uL3F1aWNrRml4L0NvbnZlcnRDb2xvclJlcHJlc2VudGF0aW9uVGVzdC5qYXZhCkBAIC0wLDAgKzEsMjkgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwMC0yMDEyIEpldEJyYWlucyBzLnIuby4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCitwYWNrYWdlIGNvbS5pbnRlbGxpai5jb2RlSW5zaWdodC5kYWVtb24ucXVpY2tGaXg7CisKKy8qKgorICogQGF1dGhvciBEYW5pbGEgUG9ub21hcmVua28KKyAqLworcHVibGljIGNsYXNzIENvbnZlcnRDb2xvclJlcHJlc2VudGF0aW9uVGVzdCBleHRlbmRzIExpZ2h0UXVpY2tGaXgxNVRlc3RDYXNlIHsKKworICBwdWJsaWMgdm9pZCB0ZXN0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7IGRvQWxsVGVzdHMoKTsgfQorCisgIEBPdmVycmlkZQorICBwcm90ZWN0ZWQgU3RyaW5nIGdldEJhc2VQYXRoKCkgeworICAgIHJldHVybiAiL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jb252ZXJ0Q29sb3JSZXByZXNlbnRhdGlvbiI7CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9jb2RlSW5zaWdodC9kYWVtb24vcXVpY2tGaXgvQ29udmVydERvdWJsZVRvRmxvYXRGaXhUZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovY29kZUluc2lnaHQvZGFlbW9uL3F1aWNrRml4L0NvbnZlcnREb3VibGVUb0Zsb2F0Rml4VGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFmNTdhZDkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovY29kZUluc2lnaHQvZGFlbW9uL3F1aWNrRml4L0NvbnZlcnREb3VibGVUb0Zsb2F0Rml4VGVzdC5qYXZhCkBAIC0wLDAgKzEsMjkgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwMC0yMDEyIEpldEJyYWlucyBzLnIuby4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCitwYWNrYWdlIGNvbS5pbnRlbGxpai5jb2RlSW5zaWdodC5kYWVtb24ucXVpY2tGaXg7CisKKy8qKgorICogQGF1dGhvciBjZHIKKyAqLworcHVibGljIGNsYXNzIENvbnZlcnREb3VibGVUb0Zsb2F0Rml4VGVzdCBleHRlbmRzIExpZ2h0UXVpY2tGaXgxNVRlc3RDYXNlIHsKKworICBwdWJsaWMgdm9pZCB0ZXN0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7IGRvQWxsVGVzdHMoKTsgfQorCisgIEBPdmVycmlkZQorICBwcm90ZWN0ZWQgU3RyaW5nIGdldEJhc2VQYXRoKCkgeworICAgIHJldHVybiAiL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jb252ZXJ0RG91YmxlVG9GbG9hdCI7CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9jb2RlSW5zaWdodC9kYWVtb24vcXVpY2tGaXgvQ29udmVydFN3aXRjaFRvSWZUZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovY29kZUluc2lnaHQvZGFlbW9uL3F1aWNrRml4L0NvbnZlcnRTd2l0Y2hUb0lmVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFkNzEyM2UKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovY29kZUluc2lnaHQvZGFlbW9uL3F1aWNrRml4L0NvbnZlcnRTd2l0Y2hUb0lmVGVzdC5qYXZhCkBAIC0wLDAgKzEsMjYgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwMC0yMDEyIEpldEJyYWlucyBzLnIuby4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCitwYWNrYWdlIGNvbS5pbnRlbGxpai5jb2RlSW5zaWdodC5kYWVtb24ucXVpY2tGaXg7CisKK3B1YmxpYyBjbGFzcyBDb252ZXJ0U3dpdGNoVG9JZlRlc3QgZXh0ZW5kcyBMaWdodFF1aWNrRml4VGVzdENhc2UgeworICBwdWJsaWMgdm9pZCB0ZXN0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7IGRvQWxsVGVzdHMoKTsgfQorCisgIEBPdmVycmlkZQorICBwcm90ZWN0ZWQgU3RyaW5nIGdldEJhc2VQYXRoKCkgeworICAgIHJldHVybiAiL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jb252ZXJ0U3dpdGNoVG9JZiI7CisgIH0KK30KKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNpZ2h0L2RhZW1vbi9xdWlja0ZpeC9DcmVhdGVBbm5vdGF0aW9uTWV0aG9kRnJvbVVzYWdlVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNpZ2h0L2RhZW1vbi9xdWlja0ZpeC9DcmVhdGVBbm5vdGF0aW9uTWV0aG9kRnJvbVVzYWdlVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY4NGMyN2QKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovY29kZUluc2lnaHQvZGFlbW9uL3F1aWNrRml4L0NyZWF0ZUFubm90YXRpb25NZXRob2RGcm9tVXNhZ2VUZXN0LmphdmEKQEAgLTAsMCArMSwyNiBAQAorLyoKKyAqIENvcHlyaWdodCAyMDAwLTIwMTEgSmV0QnJhaW5zIHMuci5vLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KK3BhY2thZ2UgY29tLmludGVsbGlqLmNvZGVJbnNpZ2h0LmRhZW1vbi5xdWlja0ZpeDsKKworcHVibGljIGNsYXNzIENyZWF0ZUFubm90YXRpb25NZXRob2RGcm9tVXNhZ2VUZXN0IGV4dGVuZHMgTGlnaHRRdWlja0ZpeDE1VGVzdENhc2UgeworICBwdWJsaWMgdm9pZCB0ZXN0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7IGRvQWxsVGVzdHMoKTsgfQorCisgIEBPdmVycmlkZQorICBwcm90ZWN0ZWQgU3RyaW5nIGdldEJhc2VQYXRoKCkgeworICAgIHJldHVybiAiL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVBbm5vdGF0aW9uTWV0aG9kRnJvbVVzYWdlIjsKKyAgfQorCit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovY29kZUluc2lnaHQvZGFlbW9uL3F1aWNrRml4L0NyZWF0ZUFubm90YXRpb25UeXBlRnJvbVVzYWdlVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNpZ2h0L2RhZW1vbi9xdWlja0ZpeC9DcmVhdGVBbm5vdGF0aW9uVHlwZUZyb21Vc2FnZVRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NjllMjdlCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNpZ2h0L2RhZW1vbi9xdWlja0ZpeC9DcmVhdGVBbm5vdGF0aW9uVHlwZUZyb21Vc2FnZVRlc3QuamF2YQpAQCAtMCwwICsxLDI4IEBACisvKgorICogQ29weXJpZ2h0IDIwMDAtMjAxMSBKZXRCcmFpbnMgcy5yLm8uCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworcGFja2FnZSBjb20uaW50ZWxsaWouY29kZUluc2lnaHQuZGFlbW9uLnF1aWNrRml4OworCisvKioKKyAqIEBhdXRob3IgdmVuCisgKi8KK3B1YmxpYyBjbGFzcyBDcmVhdGVBbm5vdGF0aW9uVHlwZUZyb21Vc2FnZVRlc3QgZXh0ZW5kcyBMaWdodFF1aWNrRml4VGVzdENhc2V7CisgIHB1YmxpYyB2b2lkIHRlc3QoKSB0aHJvd3MgRXhjZXB0aW9uIHsgZG9BbGxUZXN0cygpOyB9CisKKyAgQE92ZXJyaWRlCisgIHByb3RlY3RlZCBTdHJpbmcgZ2V0QmFzZVBhdGgoKSB7CisgICAgcmV0dXJuICIvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUFubm90YXRpb25UeXBlRnJvbVVzYWdlIjsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNpZ2h0L2RhZW1vbi9xdWlja0ZpeC9DcmVhdGVDYXN0RXhwcmVzc2lvbkZyb21JbnN0YW5jZW9mVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNpZ2h0L2RhZW1vbi9xdWlja0ZpeC9DcmVhdGVDYXN0RXhwcmVzc2lvbkZyb21JbnN0YW5jZW9mVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkyZTI4ZTQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovY29kZUluc2lnaHQvZGFlbW9uL3F1aWNrRml4L0NyZWF0ZUNhc3RFeHByZXNzaW9uRnJvbUluc3RhbmNlb2ZUZXN0LmphdmEKQEAgLTAsMCArMSwxMCBAQAorcGFja2FnZSBjb20uaW50ZWxsaWouY29kZUluc2lnaHQuZGFlbW9uLnF1aWNrRml4O2ltcG9ydCBjb20uaW50ZWxsaWouY29kZUluc2lnaHQuZGFlbW9uLkxpZ2h0SW50ZW50aW9uQWN0aW9uVGVzdENhc2U7CisKK3B1YmxpYyBjbGFzcyBDcmVhdGVDYXN0RXhwcmVzc2lvbkZyb21JbnN0YW5jZW9mVGVzdCBleHRlbmRzIExpZ2h0SW50ZW50aW9uQWN0aW9uVGVzdENhc2UgeworICBwdWJsaWMgdm9pZCB0ZXN0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7IGRvQWxsVGVzdHMoKTsgfQorCisgIEBPdmVycmlkZQorICBwcm90ZWN0ZWQgU3RyaW5nIGdldEJhc2VQYXRoKCkgeworICAgIHJldHVybiAiL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVDYXN0RXhwcmVzc2lvbkZyb21JbnN0YW5jZW9mIjsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9jb2RlSW5zaWdodC9kYWVtb24vcXVpY2tGaXgvQ3JlYXRlQ2xhc3NGcm9tTmV3VGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNpZ2h0L2RhZW1vbi9xdWlja0ZpeC9DcmVhdGVDbGFzc0Zyb21OZXdUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjkwZWU2MAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9jb2RlSW5zaWdodC9kYWVtb24vcXVpY2tGaXgvQ3JlYXRlQ2xhc3NGcm9tTmV3VGVzdC5qYXZhCkBAIC0wLDAgKzEsMTkgQEAKK3BhY2thZ2UgY29tLmludGVsbGlqLmNvZGVJbnNpZ2h0LmRhZW1vbi5xdWlja0ZpeDsKKworaW1wb3J0IGNvbS5pbnRlbGxpai5wc2kuY29kZVN0eWxlLkNvZGVTdHlsZVNldHRpbmdzTWFuYWdlcjsKKworLyoqCisgKiBAYXV0aG9yIHZlbgorICovCitwdWJsaWMgY2xhc3MgQ3JlYXRlQ2xhc3NGcm9tTmV3VGVzdCBleHRlbmRzIExpZ2h0UXVpY2tGaXhUZXN0Q2FzZSB7CisKKyAgcHVibGljIHZvaWQgdGVzdCgpIHRocm93cyBFeGNlcHRpb24geworICAgIENvZGVTdHlsZVNldHRpbmdzTWFuYWdlci5nZXRTZXR0aW5ncyhnZXRQcm9qZWN0KCkpLlNQQUNFX0JFRk9SRV9DTEFTU19MQlJBQ0UgPSB0cnVlOworICAgIGRvQWxsVGVzdHMoKTsgCisgIH0KKworICBAT3ZlcnJpZGUKKyAgcHJvdGVjdGVkIFN0cmluZyBnZXRCYXNlUGF0aCgpIHsKKyAgICByZXR1cm4gIi9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlQ2xhc3NGcm9tTmV3IjsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNpZ2h0L2RhZW1vbi9xdWlja0ZpeC9DcmVhdGVDbGFzc0Zyb21Vc2FnZVRlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9jb2RlSW5zaWdodC9kYWVtb24vcXVpY2tGaXgvQ3JlYXRlQ2xhc3NGcm9tVXNhZ2VUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDczMmNhMwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9jb2RlSW5zaWdodC9kYWVtb24vcXVpY2tGaXgvQ3JlYXRlQ2xhc3NGcm9tVXNhZ2VUZXN0LmphdmEKQEAgLTAsMCArMSwxMyBAQAorcGFja2FnZSBjb20uaW50ZWxsaWouY29kZUluc2lnaHQuZGFlbW9uLnF1aWNrRml4OworCisvKioKKyAqIEBhdXRob3IgdmVuCisgKi8KK3B1YmxpYyBjbGFzcyBDcmVhdGVDbGFzc0Zyb21Vc2FnZVRlc3QgZXh0ZW5kcyBMaWdodFF1aWNrRml4VGVzdENhc2V7CisgIHB1YmxpYyB2b2lkIHRlc3QoKSB0aHJvd3MgRXhjZXB0aW9uIHsgZG9BbGxUZXN0cygpOyB9CisKKyAgQE92ZXJyaWRlCisgIHByb3RlY3RlZCBTdHJpbmcgZ2V0QmFzZVBhdGgoKSB7CisgICAgcmV0dXJuICIvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUNsYXNzRnJvbVVzYWdlIjsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNpZ2h0L2RhZW1vbi9xdWlja0ZpeC9DcmVhdGVDb25zdHJ1Y3RvckZyb21DYWxsVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNpZ2h0L2RhZW1vbi9xdWlja0ZpeC9DcmVhdGVDb25zdHJ1Y3RvckZyb21DYWxsVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk2YjdlNmIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovY29kZUluc2lnaHQvZGFlbW9uL3F1aWNrRml4L0NyZWF0ZUNvbnN0cnVjdG9yRnJvbUNhbGxUZXN0LmphdmEKQEAgLTAsMCArMSwxNCBAQAorcGFja2FnZSBjb20uaW50ZWxsaWouY29kZUluc2lnaHQuZGFlbW9uLnF1aWNrRml4OworCisvKioKKyAqIEBhdXRob3IgdmVuCisgKi8KK3B1YmxpYyBjbGFzcyBDcmVhdGVDb25zdHJ1Y3RvckZyb21DYWxsVGVzdCBleHRlbmRzIExpZ2h0UXVpY2tGaXhUZXN0Q2FzZSB7CisKKyAgcHVibGljIHZvaWQgdGVzdCgpIHRocm93cyBFeGNlcHRpb24geyBkb0FsbFRlc3RzKCk7IH0KKworICBAT3ZlcnJpZGUKKyAgcHJvdGVjdGVkIFN0cmluZyBnZXRCYXNlUGF0aCgpIHsKKyAgICByZXR1cm4gIi9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlQ29uc3RydWN0b3JGcm9tQ2FsbCI7CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9jb2RlSW5zaWdodC9kYWVtb24vcXVpY2tGaXgvQ3JlYXRlQ29uc3RydWN0b3JGcm9tU3VwZXJUZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovY29kZUluc2lnaHQvZGFlbW9uL3F1aWNrRml4L0NyZWF0ZUNvbnN0cnVjdG9yRnJvbVN1cGVyVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcwMjBkNGEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovY29kZUluc2lnaHQvZGFlbW9uL3F1aWNrRml4L0NyZWF0ZUNvbnN0cnVjdG9yRnJvbVN1cGVyVGVzdC5qYXZhCkBAIC0wLDAgKzEsMTUgQEAKK3BhY2thZ2UgY29tLmludGVsbGlqLmNvZGVJbnNpZ2h0LmRhZW1vbi5xdWlja0ZpeDsKKworLyoqCisgKiBAYXV0aG9yIHZlbgorICovCitwdWJsaWMgY2xhc3MgQ3JlYXRlQ29uc3RydWN0b3JGcm9tU3VwZXJUZXN0IGV4dGVuZHMgTGlnaHRRdWlja0ZpeFRlc3RDYXNlIHsKKworICBwdWJsaWMgdm9pZCB0ZXN0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7IGRvQWxsVGVzdHMoKTsgfQorCisgIEBPdmVycmlkZQorICBwcm90ZWN0ZWQgU3RyaW5nIGdldEJhc2VQYXRoKCkgeworICAgIHJldHVybiAiL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVDb25zdHJ1Y3RvckZyb21TdXBlciI7CisgIH0KKworfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNpZ2h0L2RhZW1vbi9xdWlja0ZpeC9DcmVhdGVDb25zdHJ1Y3Rvck1hdGNoaW5nU3VwZXJUZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovY29kZUluc2lnaHQvZGFlbW9uL3F1aWNrRml4L0NyZWF0ZUNvbnN0cnVjdG9yTWF0Y2hpbmdTdXBlclRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xM2Q1YjdiCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNpZ2h0L2RhZW1vbi9xdWlja0ZpeC9DcmVhdGVDb25zdHJ1Y3Rvck1hdGNoaW5nU3VwZXJUZXN0LmphdmEKQEAgLTAsMCArMSwxNSBAQAorcGFja2FnZSBjb20uaW50ZWxsaWouY29kZUluc2lnaHQuZGFlbW9uLnF1aWNrRml4OworCisvKioKKyAqIEBhdXRob3IgdmVuCisgKi8KK3B1YmxpYyBjbGFzcyBDcmVhdGVDb25zdHJ1Y3Rvck1hdGNoaW5nU3VwZXJUZXN0IGV4dGVuZHMgTGlnaHRRdWlja0ZpeFRlc3RDYXNlIHsKKworICBwdWJsaWMgdm9pZCB0ZXN0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7IGRvQWxsVGVzdHMoKTsgfQorCisgIEBPdmVycmlkZQorICBwcm90ZWN0ZWQgU3RyaW5nIGdldEJhc2VQYXRoKCkgeworICAgIHJldHVybiAiL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVDb25zdHJ1Y3Rvck1hdGNoaW5nU3VwZXIiOworICB9CisKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9jb2RlSW5zaWdodC9kYWVtb24vcXVpY2tGaXgvQ3JlYXRlQ29uc3RydWN0b3JQYXJhbWV0ZXJGcm9tRmllbGRUZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovY29kZUluc2lnaHQvZGFlbW9uL3F1aWNrRml4L0NyZWF0ZUNvbnN0cnVjdG9yUGFyYW1ldGVyRnJvbUZpZWxkVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY1YzA5YTYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovY29kZUluc2lnaHQvZGFlbW9uL3F1aWNrRml4L0NyZWF0ZUNvbnN0cnVjdG9yUGFyYW1ldGVyRnJvbUZpZWxkVGVzdC5qYXZhCkBAIC0wLDAgKzEsMjIgQEAKK3BhY2thZ2UgY29tLmludGVsbGlqLmNvZGVJbnNpZ2h0LmRhZW1vbi5xdWlja0ZpeDsKKworaW1wb3J0IGNvbS5pbnRlbGxpai5jb2RlSW5zcGVjdGlvbi5Mb2NhbEluc3BlY3Rpb25Ub29sOworaW1wb3J0IGNvbS5pbnRlbGxpai5jb2RlSW5zcGVjdGlvbi51bnVzZWRTeW1ib2wuVW51c2VkU3ltYm9sTG9jYWxJbnNwZWN0aW9uOworCisvKioKKyAqIEBhdXRob3IgY2RyCisgKi8KK3B1YmxpYyBjbGFzcyBDcmVhdGVDb25zdHJ1Y3RvclBhcmFtZXRlckZyb21GaWVsZFRlc3QgZXh0ZW5kcyBMaWdodFF1aWNrRml4VGVzdENhc2UgeworICBAT3ZlcnJpZGUKKyAgcHJvdGVjdGVkIExvY2FsSW5zcGVjdGlvblRvb2xbXSBjb25maWd1cmVMb2NhbEluc3BlY3Rpb25Ub29scygpIHsKKyAgICByZXR1cm4gbmV3IExvY2FsSW5zcGVjdGlvblRvb2xbXXsgbmV3IFVudXNlZFN5bWJvbExvY2FsSW5zcGVjdGlvbigpfTsKKyAgfQorCisKKyAgcHVibGljIHZvaWQgdGVzdCgpIHRocm93cyBFeGNlcHRpb24geyBkb0FsbFRlc3RzKCk7IH0KKworICBAT3ZlcnJpZGUKKyAgcHJvdGVjdGVkIFN0cmluZyBnZXRCYXNlUGF0aCgpIHsKKyAgICByZXR1cm4gIi9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlQ29uc3RydWN0b3JQYXJhbWV0ZXJGcm9tRmllbGQiOworICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovY29kZUluc2lnaHQvZGFlbW9uL3F1aWNrRml4L0NyZWF0ZUVudW1Db25zdGFudEZyb21Vc2FnZVRlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9jb2RlSW5zaWdodC9kYWVtb24vcXVpY2tGaXgvQ3JlYXRlRW51bUNvbnN0YW50RnJvbVVzYWdlVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAxZGZmMjgKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovY29kZUluc2lnaHQvZGFlbW9uL3F1aWNrRml4L0NyZWF0ZUVudW1Db25zdGFudEZyb21Vc2FnZVRlc3QuamF2YQpAQCAtMCwwICsxLDE1IEBACitwYWNrYWdlIGNvbS5pbnRlbGxpai5jb2RlSW5zaWdodC5kYWVtb24ucXVpY2tGaXg7CisKKy8qKgorICogQGF1dGhvciB2ZW4KKyAqLworcHVibGljIGNsYXNzIENyZWF0ZUVudW1Db25zdGFudEZyb21Vc2FnZVRlc3QgZXh0ZW5kcyBMaWdodFF1aWNrRml4MTVUZXN0Q2FzZXsKKworICBwdWJsaWMgdm9pZCB0ZXN0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7IGRvQWxsVGVzdHMoKTsgfQorCisgIEBPdmVycmlkZQorICBwcm90ZWN0ZWQgU3RyaW5nIGdldEJhc2VQYXRoKCkgeworICAgIHJldHVybiAiL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVFbnVtQ29uc3RhbnRGcm9tVXNhZ2UiOworICB9CisKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9jb2RlSW5zaWdodC9kYWVtb24vcXVpY2tGaXgvQ3JlYXRlRmllbGRGcm9tUGFyYW1ldGVyVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNpZ2h0L2RhZW1vbi9xdWlja0ZpeC9DcmVhdGVGaWVsZEZyb21QYXJhbWV0ZXJUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjcxNWU5OQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9jb2RlSW5zaWdodC9kYWVtb24vcXVpY2tGaXgvQ3JlYXRlRmllbGRGcm9tUGFyYW1ldGVyVGVzdC5qYXZhCkBAIC0wLDAgKzEsNDYgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwMC0yMDEyIEpldEJyYWlucyBzLnIuby4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCitwYWNrYWdlIGNvbS5pbnRlbGxpai5jb2RlSW5zaWdodC5kYWVtb24ucXVpY2tGaXg7CisKK2ltcG9ydCBjb20uaW50ZWxsaWouY29kZUluc2lnaHQuZGFlbW9uLkxpZ2h0SW50ZW50aW9uQWN0aW9uVGVzdENhc2U7CitpbXBvcnQgY29tLmludGVsbGlqLnBzaS5jb2RlU3R5bGUuQ29kZVN0eWxlU2V0dGluZ3M7CitpbXBvcnQgY29tLmludGVsbGlqLnBzaS5jb2RlU3R5bGUuQ29kZVN0eWxlU2V0dGluZ3NNYW5hZ2VyOworCisvKioKKyAqIEBhdXRob3IgdmVuCisgKi8KK3B1YmxpYyBjbGFzcyBDcmVhdGVGaWVsZEZyb21QYXJhbWV0ZXJUZXN0IGV4dGVuZHMgTGlnaHRJbnRlbnRpb25BY3Rpb25UZXN0Q2FzZSB7CisgIEBPdmVycmlkZQorICBwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24geworICAgIHN1cGVyLnNldFVwKCk7CisgICAgQ29kZVN0eWxlU2V0dGluZ3Mgc2V0dGluZ3MgPSBDb2RlU3R5bGVTZXR0aW5nc01hbmFnZXIuZ2V0U2V0dGluZ3MoZ2V0UHJvamVjdCgpKTsKKyAgICBzZXR0aW5ncy5GSUVMRF9OQU1FX1BSRUZJWCA9ICJteSI7CisgIH0KKworICBAT3ZlcnJpZGUKKyAgcHJvdGVjdGVkIHZvaWQgdGVhckRvd24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBDb2RlU3R5bGVTZXR0aW5ncyBzZXR0aW5ncyA9IENvZGVTdHlsZVNldHRpbmdzTWFuYWdlci5nZXRTZXR0aW5ncyhnZXRQcm9qZWN0KCkpOworICAgIHNldHRpbmdzLkZJRUxEX05BTUVfUFJFRklYID0gIiI7CisgICAgc3VwZXIudGVhckRvd24oKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3QoKSB0aHJvd3MgRXhjZXB0aW9uIHsgZG9BbGxUZXN0cygpOyB9CisKKyAgQE92ZXJyaWRlCisgIHByb3RlY3RlZCBTdHJpbmcgZ2V0QmFzZVBhdGgoKSB7CisgICAgcmV0dXJuICIvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUZpZWxkRnJvbVBhcmFtZXRlciI7CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9jb2RlSW5zaWdodC9kYWVtb24vcXVpY2tGaXgvQ3JlYXRlRmllbGRGcm9tVXNhZ2VUZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovY29kZUluc2lnaHQvZGFlbW9uL3F1aWNrRml4L0NyZWF0ZUZpZWxkRnJvbVVzYWdlVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAzOGY1YTNiCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNpZ2h0L2RhZW1vbi9xdWlja0ZpeC9DcmVhdGVGaWVsZEZyb21Vc2FnZVRlc3QuamF2YQpAQCAtMCwwICsxLDYwIEBACitwYWNrYWdlIGNvbS5pbnRlbGxpai5jb2RlSW5zaWdodC5kYWVtb24ucXVpY2tGaXg7CisKK2ltcG9ydCBjb20uaW50ZWxsaWoubGFuZy5qYXZhLkphdmFMYW5ndWFnZTsKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS5hcHBsaWNhdGlvbi5SZXN1bHQ7CitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkuY29tbWFuZC5Xcml0ZUNvbW1hbmRBY3Rpb247CitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkudmZzLlZmc1V0aWw7CitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkudmZzLlZpcnR1YWxGaWxlOworaW1wb3J0IGNvbS5pbnRlbGxpai5wc2kuY29kZVN0eWxlLkNvZGVTdHlsZVNldHRpbmdzTWFuYWdlcjsKK2ltcG9ydCBjb20uaW50ZWxsaWoucHNpLmNvZGVTdHlsZS5Db21tb25Db2RlU3R5bGVTZXR0aW5nczsKKworLyoqCisgKiBAYXV0aG9yIHZlbgorICovCitwdWJsaWMgY2xhc3MgQ3JlYXRlRmllbGRGcm9tVXNhZ2VUZXN0IGV4dGVuZHMgTGlnaHRRdWlja0ZpeFRlc3RDYXNleworCisgIHB1YmxpYyB2b2lkIHRlc3RBbm9ueW1vdXNDbGFzcygpIHRocm93cyBFeGNlcHRpb24geyBkb1NpbmdsZVRlc3QoKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0RXhwZWN0ZWRUeXBlcygpIHRocm93cyBFeGNlcHRpb24geyBkb1NpbmdsZVRlc3QoKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0SW50ZXJmYWNlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7IGRvU2luZ2xlVGVzdCgpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RNdWx0aXBsZVR5cGVzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7IGRvU2luZ2xlVGVzdCgpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RNdWx0aXBsZVR5cGVzMigpIHRocm93cyBFeGNlcHRpb24geyBkb1NpbmdsZVRlc3QoKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0UGFyYW1ldGVyaWNNZXRob2QoKSB0aHJvd3MgRXhjZXB0aW9uIHsgZG9TaW5nbGVUZXN0KCk7IH0KKyAgcHVibGljIHZvaWQgdGVzdFF1YWxpZnlJbm5lcigpIHRocm93cyBFeGNlcHRpb24geyBkb1NpbmdsZVRlc3QoKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0VHlwZUFyZ3NGb3JtYXR0ZWQoKSB0aHJvd3MgRXhjZXB0aW9uIHsgZG9TaW5nbGVUZXN0KCk7IH0KKyAgcHVibGljIHZvaWQgdGVzdEluc2lkZVN0YXRpY0lubmVyQ2xhc3MoKSB0aHJvd3MgRXhjZXB0aW9uIHsgZG9TaW5nbGVUZXN0KCk7IH0KKyAgcHVibGljIHZvaWQgdGVzdENyZWF0ZUZyb21FcXVhbHMoKSB0aHJvd3MgRXhjZXB0aW9uIHsgZG9TaW5nbGVUZXN0KCk7IH0KKyAgcHVibGljIHZvaWQgdGVzdENyZWF0ZUZyb21FcXVhbHNUb1ByaW1pdGl2ZVR5cGUoKSB0aHJvd3MgRXhjZXB0aW9uIHsgZG9TaW5nbGVUZXN0KCk7IH0KKyAgcHVibGljIHZvaWQgdGVzdFdpdGhBbGlnbm1lbnQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBmaW5hbCBDb21tb25Db2RlU3R5bGVTZXR0aW5ncyBzZXR0aW5ncyA9IENvZGVTdHlsZVNldHRpbmdzTWFuYWdlci5nZXRTZXR0aW5ncyhnZXRQcm9qZWN0KCkpLmdldENvbW1vblNldHRpbmdzKEphdmFMYW5ndWFnZS5JTlNUQU5DRSk7CisgICAgYm9vbGVhbiBvbGQgPSBzZXR0aW5ncy5BTElHTl9HUk9VUF9GSUVMRF9ERUNMQVJBVElPTlM7CisgICAgdHJ5IHsKKyAgICAgIHNldHRpbmdzLkFMSUdOX0dST1VQX0ZJRUxEX0RFQ0xBUkFUSU9OUyA9IHRydWU7CisgICAgICBkb1NpbmdsZVRlc3QoKTsKKyAgICB9CisgICAgZmluYWxseSB7CisgICAgICBzZXR0aW5ncy5BTElHTl9HUk9VUF9GSUVMRF9ERUNMQVJBVElPTlMgPSBvbGQ7CisgICAgfQorICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFNvcnRCeVJlbGV2YW5jZSgpIHRocm93cyBFeGNlcHRpb24geworICAgIG5ldyBXcml0ZUNvbW1hbmRBY3Rpb24oZ2V0UHJvamVjdCgpKSB7CisgICAgICBAT3ZlcnJpZGUKKyAgICAgIHByb3RlY3RlZCB2b2lkIHJ1bihSZXN1bHQgcmVzdWx0KSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgVmlydHVhbEZpbGUgZm9vID0gZ2V0U291cmNlUm9vdCgpLmNyZWF0ZUNoaWxkRGlyZWN0b3J5KHRoaXMsICJmb28iKS5jcmVhdGVDaGlsZERhdGEodGhpcywgIkZvby5qYXZhIik7CisgICAgICAgIFZmc1V0aWwuc2F2ZVRleHQoZm9vLCAicGFja2FnZSBmb287IHB1YmxpYyBjbGFzcyBGb28geyBwdWJsaWMgdm9pZCBwdXQoT2JqZWN0IGtleSwgT2JqZWN0IHZhbHVlKSB7fSB9Iik7CisgICAgICB9CisgICAgfS5leGVjdXRlKCk7CisKKyAgICBkb1NpbmdsZVRlc3QoKTsKKyAgfQorCisgIHByb3RlY3RlZCB2b2lkIGRvU2luZ2xlVGVzdCgpIHsKKyAgICBkb1NpbmdsZVRlc3QoZ2V0VGVzdE5hbWUoZmFsc2UpICsgIi5qYXZhIik7CisgIH0KKworICBAT3ZlcnJpZGUKKyAgcHJvdGVjdGVkIFN0cmluZyBnZXRCYXNlUGF0aCgpIHsKKyAgICByZXR1cm4gIi9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlRmllbGRGcm9tVXNhZ2UiOworICB9CisKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9jb2RlSW5zaWdodC9kYWVtb24vcXVpY2tGaXgvQ3JlYXRlR2V0dGVyT3JTZXR0ZXJUZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovY29kZUluc2lnaHQvZGFlbW9uL3F1aWNrRml4L0NyZWF0ZUdldHRlck9yU2V0dGVyVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE3M2YyMjJiCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNpZ2h0L2RhZW1vbi9xdWlja0ZpeC9DcmVhdGVHZXR0ZXJPclNldHRlclRlc3QuamF2YQpAQCAtMCwwICsxLDM0IEBACisvKgorICogQ29weXJpZ2h0IDIwMDAtMjAxMiBKZXRCcmFpbnMgcy5yLm8uCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworcGFja2FnZSBjb20uaW50ZWxsaWouY29kZUluc2lnaHQuZGFlbW9uLnF1aWNrRml4OworCitpbXBvcnQgY29tLmludGVsbGlqLmNvZGVJbnNwZWN0aW9uLnVudXNlZFN5bWJvbC5VbnVzZWRTeW1ib2xMb2NhbEluc3BlY3Rpb247CisKKy8qKgorICogQGF1dGhvciBEYW5pbGEgUG9ub21hcmVua28KKyAqLworcHVibGljIGNsYXNzIENyZWF0ZUdldHRlck9yU2V0dGVyVGVzdCBleHRlbmRzIExpZ2h0UXVpY2tGaXhUZXN0Q2FzZSB7CisgIHB1YmxpYyB2b2lkIHRlc3QoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBlbmFibGVJbnNwZWN0aW9uVG9vbChuZXcgVW51c2VkU3ltYm9sTG9jYWxJbnNwZWN0aW9uKCkpOworICAgIGRvQWxsVGVzdHMoKTsKKyAgfQorCisKKyAgQE92ZXJyaWRlCisgIHByb3RlY3RlZCBTdHJpbmcgZ2V0QmFzZVBhdGgoKSB7CisgICAgcmV0dXJuICIvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUdldHRlck9yU2V0dGVyIjsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9jb2RlSW5zaWdodC9kYWVtb24vcXVpY2tGaXgvQ3JlYXRlSW5uZXJDbGFzc0Zyb21OZXdUZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovY29kZUluc2lnaHQvZGFlbW9uL3F1aWNrRml4L0NyZWF0ZUlubmVyQ2xhc3NGcm9tTmV3VGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkwMmYwZmYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovY29kZUluc2lnaHQvZGFlbW9uL3F1aWNrRml4L0NyZWF0ZUlubmVyQ2xhc3NGcm9tTmV3VGVzdC5qYXZhCkBAIC0wLDAgKzEsMTMgQEAKK3BhY2thZ2UgY29tLmludGVsbGlqLmNvZGVJbnNpZ2h0LmRhZW1vbi5xdWlja0ZpeDsKKworLyoqCisgKiBAYXV0aG9yIHlvbGUKKyAqLworcHVibGljIGNsYXNzIENyZWF0ZUlubmVyQ2xhc3NGcm9tTmV3VGVzdCBleHRlbmRzIExpZ2h0UXVpY2tGaXhUZXN0Q2FzZSB7CisgIHB1YmxpYyB2b2lkIHRlc3QoKSB0aHJvd3MgRXhjZXB0aW9uIHsgZG9BbGxUZXN0cygpOyB9CisKKyAgQE92ZXJyaWRlCisgIHByb3RlY3RlZCBTdHJpbmcgZ2V0QmFzZVBhdGgoKSB7CisgICAgcmV0dXJuICIvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUlubmVyQ2xhc3NGcm9tTmV3IjsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9jb2RlSW5zaWdodC9kYWVtb24vcXVpY2tGaXgvQ3JlYXRlSW5uZXJDbGFzc0Zyb21Vc2FnZVRlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9jb2RlSW5zaWdodC9kYWVtb24vcXVpY2tGaXgvQ3JlYXRlSW5uZXJDbGFzc0Zyb21Vc2FnZVRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMDg4ZWE1Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNpZ2h0L2RhZW1vbi9xdWlja0ZpeC9DcmVhdGVJbm5lckNsYXNzRnJvbVVzYWdlVGVzdC5qYXZhCkBAIC0wLDAgKzEsMTMgQEAKK3BhY2thZ2UgY29tLmludGVsbGlqLmNvZGVJbnNpZ2h0LmRhZW1vbi5xdWlja0ZpeDsKKworLyoqCisgKiBAYXV0aG9yIHZlbgorICovCitwdWJsaWMgY2xhc3MgQ3JlYXRlSW5uZXJDbGFzc0Zyb21Vc2FnZVRlc3QgZXh0ZW5kcyBMaWdodFF1aWNrRml4VGVzdENhc2V7CisgIHB1YmxpYyB2b2lkIHRlc3QoKSB0aHJvd3MgRXhjZXB0aW9uIHsgZG9BbGxUZXN0cygpOyB9CisKKyAgQE92ZXJyaWRlCisgIHByb3RlY3RlZCBTdHJpbmcgZ2V0QmFzZVBhdGgoKSB7CisgICAgcmV0dXJuICIvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUlubmVyQ2xhc3NGcm9tVXNhZ2UiOworICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovY29kZUluc2lnaHQvZGFlbW9uL3F1aWNrRml4L0NyZWF0ZUxvY2FsRnJvbVVzYWdlVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNpZ2h0L2RhZW1vbi9xdWlja0ZpeC9DcmVhdGVMb2NhbEZyb21Vc2FnZVRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNTI5Mjg4Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNpZ2h0L2RhZW1vbi9xdWlja0ZpeC9DcmVhdGVMb2NhbEZyb21Vc2FnZVRlc3QuamF2YQpAQCAtMCwwICsxLDEzIEBACitwYWNrYWdlIGNvbS5pbnRlbGxpai5jb2RlSW5zaWdodC5kYWVtb24ucXVpY2tGaXg7CisKKy8qKgorICogQGF1dGhvciB2ZW4KKyAqLworcHVibGljIGNsYXNzIENyZWF0ZUxvY2FsRnJvbVVzYWdlVGVzdCBleHRlbmRzIExpZ2h0UXVpY2tGaXhUZXN0Q2FzZSB7CisgIHB1YmxpYyB2b2lkIHRlc3QoKSB0aHJvd3MgRXhjZXB0aW9uIHsgZG9BbGxUZXN0cygpOyB9CisKKyAgQE92ZXJyaWRlCisgIHByb3RlY3RlZCBTdHJpbmcgZ2V0QmFzZVBhdGgoKSB7CisgICAgcmV0dXJuICIvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUxvY2FsRnJvbVVzYWdlIjsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNpZ2h0L2RhZW1vbi9xdWlja0ZpeC9DcmVhdGVMb2NhbFZhckZyb21JbnN0YW5jZW9mVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNpZ2h0L2RhZW1vbi9xdWlja0ZpeC9DcmVhdGVMb2NhbFZhckZyb21JbnN0YW5jZW9mVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIzOGUzNTcKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovY29kZUluc2lnaHQvZGFlbW9uL3F1aWNrRml4L0NyZWF0ZUxvY2FsVmFyRnJvbUluc3RhbmNlb2ZUZXN0LmphdmEKQEAgLTAsMCArMSwxMyBAQAorcGFja2FnZSBjb20uaW50ZWxsaWouY29kZUluc2lnaHQuZGFlbW9uLnF1aWNrRml4O2ltcG9ydCBjb20uaW50ZWxsaWouY29kZUluc2lnaHQuZGFlbW9uLkxpZ2h0SW50ZW50aW9uQWN0aW9uVGVzdENhc2U7CisKKy8qKgorICogQGF1dGhvciB2ZW4KKyAqLworcHVibGljIGNsYXNzIENyZWF0ZUxvY2FsVmFyRnJvbUluc3RhbmNlb2ZUZXN0IGV4dGVuZHMgTGlnaHRJbnRlbnRpb25BY3Rpb25UZXN0Q2FzZSB7CisgIHB1YmxpYyB2b2lkIHRlc3QoKSB0aHJvd3MgRXhjZXB0aW9uIHsgZG9BbGxUZXN0cygpOyB9CisKKyAgQE92ZXJyaWRlCisgIHByb3RlY3RlZCBTdHJpbmcgZ2V0QmFzZVBhdGgoKSB7CisgICAgcmV0dXJuICIvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZUxvY2FsVmFyRnJvbUluc3RhbmNlb2YiOworICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovY29kZUluc2lnaHQvZGFlbW9uL3F1aWNrRml4L0NyZWF0ZU1ldGhvZEZyb21Vc2FnZVRlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9jb2RlSW5zaWdodC9kYWVtb24vcXVpY2tGaXgvQ3JlYXRlTWV0aG9kRnJvbVVzYWdlVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNhZDU3OWIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovY29kZUluc2lnaHQvZGFlbW9uL3F1aWNrRml4L0NyZWF0ZU1ldGhvZEZyb21Vc2FnZVRlc3QuamF2YQpAQCAtMCwwICsxLDE0IEBACitwYWNrYWdlIGNvbS5pbnRlbGxpai5jb2RlSW5zaWdodC5kYWVtb24ucXVpY2tGaXg7CisKKy8qKgorICogQGF1dGhvciB2ZW4KKyAqLworcHVibGljIGNsYXNzIENyZWF0ZU1ldGhvZEZyb21Vc2FnZVRlc3QgZXh0ZW5kcyBMaWdodFF1aWNrRml4MTVUZXN0Q2FzZSB7CisgIHB1YmxpYyB2b2lkIHRlc3QoKSB0aHJvd3MgRXhjZXB0aW9uIHsgZG9BbGxUZXN0cygpOyB9CisKKyAgQE92ZXJyaWRlCisgIHByb3RlY3RlZCBTdHJpbmcgZ2V0QmFzZVBhdGgoKSB7CisgICAgcmV0dXJuICIvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2NyZWF0ZU1ldGhvZEZyb21Vc2FnZSI7CisgIH0KKworfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNpZ2h0L2RhZW1vbi9xdWlja0ZpeC9DcmVhdGVQYXJhbWV0ZXJGcm9tVXNhZ2VUZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovY29kZUluc2lnaHQvZGFlbW9uL3F1aWNrRml4L0NyZWF0ZVBhcmFtZXRlckZyb21Vc2FnZVRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43M2M1Y2QyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNpZ2h0L2RhZW1vbi9xdWlja0ZpeC9DcmVhdGVQYXJhbWV0ZXJGcm9tVXNhZ2VUZXN0LmphdmEKQEAgLTAsMCArMSwxMyBAQAorcGFja2FnZSBjb20uaW50ZWxsaWouY29kZUluc2lnaHQuZGFlbW9uLnF1aWNrRml4OworCisvKioKKyAqIEBhdXRob3IgdmVuCisgKi8KK3B1YmxpYyBjbGFzcyBDcmVhdGVQYXJhbWV0ZXJGcm9tVXNhZ2VUZXN0IGV4dGVuZHMgTGlnaHRRdWlja0ZpeFRlc3RDYXNleworICBwdWJsaWMgdm9pZCB0ZXN0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7IGRvQWxsVGVzdHMoKTsgfQorCisgIEBPdmVycmlkZQorICBwcm90ZWN0ZWQgU3RyaW5nIGdldEJhc2VQYXRoKCkgeworICAgIHJldHVybiAiL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jcmVhdGVQYXJhbWV0ZXJGcm9tVXNhZ2UiOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNpZ2h0L2RhZW1vbi9xdWlja0ZpeC9DcmVhdGVQcm9wZXJ0eUZyb21Vc2FnZVRlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9jb2RlSW5zaWdodC9kYWVtb24vcXVpY2tGaXgvQ3JlYXRlUHJvcGVydHlGcm9tVXNhZ2VUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGFkNzI1MgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9jb2RlSW5zaWdodC9kYWVtb24vcXVpY2tGaXgvQ3JlYXRlUHJvcGVydHlGcm9tVXNhZ2VUZXN0LmphdmEKQEAgLTAsMCArMSwyNiBAQAorLyoKKyAqIENvcHlyaWdodCAyMDAwLTIwMTIgSmV0QnJhaW5zIHMuci5vLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KK3BhY2thZ2UgY29tLmludGVsbGlqLmNvZGVJbnNpZ2h0LmRhZW1vbi5xdWlja0ZpeDsKKworcHVibGljIGNsYXNzIENyZWF0ZVByb3BlcnR5RnJvbVVzYWdlVGVzdCBleHRlbmRzIExpZ2h0UXVpY2tGaXgxNVRlc3RDYXNlIHsKKyAgcHVibGljIHZvaWQgdGVzdCgpIHRocm93cyBFeGNlcHRpb24geyBkb0FsbFRlc3RzKCk7IH0KKworICBAT3ZlcnJpZGUKKyAgcHJvdGVjdGVkIFN0cmluZyBnZXRCYXNlUGF0aCgpIHsKKyAgICByZXR1cm4gIi9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvY3JlYXRlUHJvcGVydHlGcm9tVXNhZ2UiOworICB9CisKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9jb2RlSW5zaWdodC9kYWVtb24vcXVpY2tGaXgvRGVmZXJGaW5hbEFzc2lnbm1lbnRUZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovY29kZUluc2lnaHQvZGFlbW9uL3F1aWNrRml4L0RlZmVyRmluYWxBc3NpZ25tZW50VGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJiNWFlYWQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovY29kZUluc2lnaHQvZGFlbW9uL3F1aWNrRml4L0RlZmVyRmluYWxBc3NpZ25tZW50VGVzdC5qYXZhCkBAIC0wLDAgKzEsMTYgQEAKKworcGFja2FnZSBjb20uaW50ZWxsaWouY29kZUluc2lnaHQuZGFlbW9uLnF1aWNrRml4OworCisKKworcHVibGljIGNsYXNzIERlZmVyRmluYWxBc3NpZ25tZW50VGVzdCBleHRlbmRzIExpZ2h0UXVpY2tGaXhUZXN0Q2FzZSB7CisKKyAgcHVibGljIHZvaWQgdGVzdCgpIHRocm93cyBFeGNlcHRpb24geyBkb0FsbFRlc3RzKCk7IH0KKworICBAT3ZlcnJpZGUKKyAgcHJvdGVjdGVkIFN0cmluZyBnZXRCYXNlUGF0aCgpIHsKKyAgICByZXR1cm4gIi9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvZGVmZXJGaW5hbEFzc2lnbm1lbnQiOworICB9CisKK30KKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNpZ2h0L2RhZW1vbi9xdWlja0ZpeC9EZWxlZ2F0ZVdpdGhEZWZhdWx0UGFyYW1WYWx1ZVRlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9jb2RlSW5zaWdodC9kYWVtb24vcXVpY2tGaXgvRGVsZWdhdGVXaXRoRGVmYXVsdFBhcmFtVmFsdWVUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTE1MzQ5YQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9jb2RlSW5zaWdodC9kYWVtb24vcXVpY2tGaXgvRGVsZWdhdGVXaXRoRGVmYXVsdFBhcmFtVmFsdWVUZXN0LmphdmEKQEAgLTAsMCArMSw1MiBAQAorLyoKKyAqIENvcHlyaWdodCAyMDAwLTIwMTEgSmV0QnJhaW5zIHMuci5vLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KK3BhY2thZ2UgY29tLmludGVsbGlqLmNvZGVJbnNpZ2h0LmRhZW1vbi5xdWlja0ZpeDsKKworaW1wb3J0IGNvbS5pbnRlbGxpai5jb2RlSW5zaWdodC50ZW1wbGF0ZS5UZW1wbGF0ZU1hbmFnZXI7CitpbXBvcnQgY29tLmludGVsbGlqLmNvZGVJbnNpZ2h0LnRlbXBsYXRlLmltcGwuVGVtcGxhdGVNYW5hZ2VySW1wbDsKK2ltcG9ydCBjb20uaW50ZWxsaWouY29kZUluc2lnaHQudGVtcGxhdGUuaW1wbC5UZW1wbGF0ZVN0YXRlOworCisvKioKKyAqIEBhdXRob3IgYW5uYQorICovCitwdWJsaWMgY2xhc3MgRGVsZWdhdGVXaXRoRGVmYXVsdFBhcmFtVmFsdWVUZXN0IGV4dGVuZHMgTGlnaHRRdWlja0ZpeFRlc3RDYXNlIHsKKyAgQE92ZXJyaWRlCisgIHByb3RlY3RlZCB2b2lkIGRvQWN0aW9uKFN0cmluZyB0ZXh0LCBib29sZWFuIGFjdGlvblNob3VsZEJlQXZhaWxhYmxlLCBTdHJpbmcgdGVzdEZ1bGxQYXRoLCBTdHJpbmcgdGVzdE5hbWUpCisgICAgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgdHJ5IHsKKyAgICAgICgoVGVtcGxhdGVNYW5hZ2VySW1wbClUZW1wbGF0ZU1hbmFnZXIuZ2V0SW5zdGFuY2UoZ2V0UHJvamVjdCgpKSkuc2V0VGVtcGxhdGVUZXN0aW5nKHRydWUpOworICAgICAgc3VwZXIuZG9BY3Rpb24odGV4dCwgYWN0aW9uU2hvdWxkQmVBdmFpbGFibGUsIHRlc3RGdWxsUGF0aCwgdGVzdE5hbWUpOworCisgICAgICBpZiAoYWN0aW9uU2hvdWxkQmVBdmFpbGFibGUpIHsKKyAgICAgICAgVGVtcGxhdGVTdGF0ZSBzdGF0ZSA9IFRlbXBsYXRlTWFuYWdlckltcGwuZ2V0VGVtcGxhdGVTdGF0ZShnZXRFZGl0b3IoKSk7CisgICAgICAgIGFzc2VydCBzdGF0ZSAhPSBudWxsOworICAgICAgICBzdGF0ZS5nb3RvRW5kKGZhbHNlKTsKKyAgICAgIH0KKyAgICB9IGZpbmFsbHkgeworICAgICAgKChUZW1wbGF0ZU1hbmFnZXJJbXBsKVRlbXBsYXRlTWFuYWdlci5nZXRJbnN0YW5jZShnZXRQcm9qZWN0KCkpKS5zZXRUZW1wbGF0ZVRlc3RpbmcoZmFsc2UpOworICAgIH0KKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3QoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb0FsbFRlc3RzKCk7CisKKyAgfQorCisgIEBPdmVycmlkZQorICBwcm90ZWN0ZWQgU3RyaW5nIGdldEJhc2VQYXRoKCkgeworICAgIHJldHVybiAiL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9kZWxlZ2F0ZVdpdGhEZWZhdWx0VmFsdWUiOworICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovY29kZUluc2lnaHQvZGFlbW9uL3F1aWNrRml4L0RlbGV0ZUNhdGNoVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNpZ2h0L2RhZW1vbi9xdWlja0ZpeC9EZWxldGVDYXRjaFRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZmQ3YTcxCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNpZ2h0L2RhZW1vbi9xdWlja0ZpeC9EZWxldGVDYXRjaFRlc3QuamF2YQpAQCAtMCwwICsxLDExIEBACitwYWNrYWdlIGNvbS5pbnRlbGxpai5jb2RlSW5zaWdodC5kYWVtb24ucXVpY2tGaXg7CisKK3B1YmxpYyBjbGFzcyBEZWxldGVDYXRjaFRlc3QgZXh0ZW5kcyBMaWdodFF1aWNrRml4VGVzdENhc2UgeworICBwdWJsaWMgdm9pZCB0ZXN0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7IGRvQWxsVGVzdHMoKTsgfQorCisgIEBPdmVycmlkZQorICBwcm90ZWN0ZWQgU3RyaW5nIGdldEJhc2VQYXRoKCkgeworICAgIHJldHVybiAiL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9kZWxldGVDYXRjaCI7CisgIH0KK30KKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNpZ2h0L2RhZW1vbi9xdWlja0ZpeC9EZWxldGVNdWx0aUNhdGNoVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNpZ2h0L2RhZW1vbi9xdWlja0ZpeC9EZWxldGVNdWx0aUNhdGNoVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI4ZDBjMDIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovY29kZUluc2lnaHQvZGFlbW9uL3F1aWNrRml4L0RlbGV0ZU11bHRpQ2F0Y2hUZXN0LmphdmEKQEAgLTAsMCArMSwyNSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDAwLTIwMTEgSmV0QnJhaW5zIHMuci5vLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KK3BhY2thZ2UgY29tLmludGVsbGlqLmNvZGVJbnNpZ2h0LmRhZW1vbi5xdWlja0ZpeDsKKworcHVibGljIGNsYXNzIERlbGV0ZU11bHRpQ2F0Y2hUZXN0IGV4dGVuZHMgTGlnaHRRdWlja0ZpeFRlc3RDYXNlIHsKKyAgcHVibGljIHZvaWQgdGVzdCgpIHRocm93cyBFeGNlcHRpb24geyBkb0FsbFRlc3RzKCk7IH0KKworICBAT3ZlcnJpZGUKKyAgcHJvdGVjdGVkIFN0cmluZyBnZXRCYXNlUGF0aCgpIHsKKyAgICByZXR1cm4gIi9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvZGVsZXRlTXVsdGlDYXRjaCI7CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9jb2RlSW5zaWdodC9kYWVtb24vcXVpY2tGaXgvRW1wdHlJbnRlbnRpb25JbnNwZWN0aW9uUXVpY2tGaXhUZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovY29kZUluc2lnaHQvZGFlbW9uL3F1aWNrRml4L0VtcHR5SW50ZW50aW9uSW5zcGVjdGlvblF1aWNrRml4VGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEyZmVhOTkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovY29kZUluc2lnaHQvZGFlbW9uL3F1aWNrRml4L0VtcHR5SW50ZW50aW9uSW5zcGVjdGlvblF1aWNrRml4VGVzdC5qYXZhCkBAIC0wLDAgKzEsOTYgQEAKK3BhY2thZ2UgY29tLmludGVsbGlqLmNvZGVJbnNpZ2h0LmRhZW1vbi5xdWlja0ZpeDsKKworaW1wb3J0IGNvbS5pbnRlbGxpai5jb2RlSW5zaWdodC5pbnRlbnRpb24uRW1wdHlJbnRlbnRpb25BY3Rpb247CitpbXBvcnQgY29tLmludGVsbGlqLmNvZGVJbnNpZ2h0LmludGVudGlvbi5JbnRlbnRpb25BY3Rpb247CitpbXBvcnQgY29tLmludGVsbGlqLmNvZGVJbnNwZWN0aW9uLkxvY2FsSW5zcGVjdGlvblRvb2w7CitpbXBvcnQgY29tLmludGVsbGlqLmNvZGVJbnNwZWN0aW9uLlByb2JsZW1zSG9sZGVyOworaW1wb3J0IGNvbS5pbnRlbGxpai5jb2RlSW5zcGVjdGlvbi5kZWZVc2UuRGVmVXNlSW5zcGVjdGlvbjsKK2ltcG9ydCBjb20uaW50ZWxsaWoucHNpLkphdmFFbGVtZW50VmlzaXRvcjsKK2ltcG9ydCBjb20uaW50ZWxsaWoucHNpLlBzaUVsZW1lbnRWaXNpdG9yOworaW1wb3J0IGNvbS5pbnRlbGxpai5wc2kuUHNpTGl0ZXJhbEV4cHJlc3Npb247CitpbXBvcnQgb3JnLmpldGJyYWlucy5hbm5vdGF0aW9ucy5ObHM7CitpbXBvcnQgb3JnLmpldGJyYWlucy5hbm5vdGF0aW9ucy5Ob25ObHM7CitpbXBvcnQgb3JnLmpldGJyYWlucy5hbm5vdGF0aW9ucy5Ob3ROdWxsOworCitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKKy8qKgorICogQGF1dGhvciBjZHIKKyAqLworcHVibGljIGNsYXNzIEVtcHR5SW50ZW50aW9uSW5zcGVjdGlvblF1aWNrRml4VGVzdCBleHRlbmRzIExpZ2h0UXVpY2tGaXhUZXN0Q2FzZXsKKyAgQE92ZXJyaWRlCisgIEBOb25ObHMKKyAgcHJvdGVjdGVkIFN0cmluZyBnZXRCYXNlUGF0aCgpIHsKKyAgICByZXR1cm4gIi9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvZW1wdHlJbnRlbnRpb24iOworICB9CisKKyAgQE92ZXJyaWRlCisgIHByb3RlY3RlZCBMb2NhbEluc3BlY3Rpb25Ub29sW10gY29uZmlndXJlTG9jYWxJbnNwZWN0aW9uVG9vbHMoKSB7CisgICAgcmV0dXJuIG5ldyBMb2NhbEluc3BlY3Rpb25Ub29sW117bmV3IERlZlVzZUluc3BlY3Rpb24oKSwgbmV3IExvY2FsSW5zcGVjdGlvblRvb2woKSB7CisgICAgICBAT3ZlcnJpZGUKKyAgICAgIEBObHMKKyAgICAgIEBOb3ROdWxsCisgICAgICBwdWJsaWMgU3RyaW5nIGdldEdyb3VwRGlzcGxheU5hbWUoKSB7CisgICAgICAgIHJldHVybiAiTXlHcm91cCI7CisgICAgICB9CisKKyAgICAgIEBPdmVycmlkZQorICAgICAgQE5scworICAgICAgQE5vdE51bGwKKyAgICAgIHB1YmxpYyBTdHJpbmcgZ2V0RGlzcGxheU5hbWUoKSB7CisgICAgICAgIHJldHVybiAiTXkiOworICAgICAgfQorCisgICAgICBAT3ZlcnJpZGUKKyAgICAgIEBOb25ObHMKKyAgICAgIEBOb3ROdWxsCisgICAgICBwdWJsaWMgU3RyaW5nIGdldFNob3J0TmFtZSgpIHsKKyAgICAgICAgcmV0dXJuIGdldERpc3BsYXlOYW1lKCk7CisgICAgICB9CisKKyAgICAgIEBPdmVycmlkZQorICAgICAgQE5vdE51bGwKKyAgICAgIHB1YmxpYyBQc2lFbGVtZW50VmlzaXRvciBidWlsZFZpc2l0b3IoQE5vdE51bGwgZmluYWwgUHJvYmxlbXNIb2xkZXIgaG9sZGVyLCBib29sZWFuIGlzT25UaGVGbHkpIHsKKyAgICAgICAgcmV0dXJuIG5ldyBKYXZhRWxlbWVudFZpc2l0b3IoKSB7CisgICAgICAgICAgQE92ZXJyaWRlIHB1YmxpYyB2b2lkIHZpc2l0TGl0ZXJhbEV4cHJlc3Npb24oUHNpTGl0ZXJhbEV4cHJlc3Npb24gZXhwcmVzc2lvbikgeworICAgICAgICAgICAgZmluYWwgU3RyaW5nIHMgPSAoU3RyaW5nKWV4cHJlc3Npb24uZ2V0VmFsdWUoKTsKKyAgICAgICAgICAgIGlmIChzLmNvbnRhaW5zKCJhIikpIGhvbGRlci5yZWdpc3RlclByb2JsZW0oZXhwcmVzc2lvbiwgIkxvb2sgbWEhIFRoaXMgU3RyaW5nIGNvbnRhaW5zICdhJyIpOworICAgICAgICAgICAgaWYgKHMuY29udGFpbnMoImIiKSkgaG9sZGVyLnJlZ2lzdGVyUHJvYmxlbShleHByZXNzaW9uLCAiTG9vayBtYSEgVGhpcyBTdHJpbmcgY29udGFpbnMgJ2InIik7CisgICAgICAgICAgfQorICAgICAgICB9OworICAgICAgfQorICAgIH19OworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFgoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBjb25maWd1cmVCeUZpbGUoZ2V0QmFzZVBhdGgoKSsiL1guamF2YSIpOworICAgIExpc3Q8SW50ZW50aW9uQWN0aW9uPiBlbXB0eUFjdGlvbnMgPSBnZXRBdmFpbGFibGVBY3Rpb25zKCk7CisgICAgZm9yIChpbnQgaSA9IGVtcHR5QWN0aW9ucy5zaXplKCktMTsgaT49MDsgaS0tKSB7CisgICAgICBJbnRlbnRpb25BY3Rpb24gYWN0aW9uID0gZW1wdHlBY3Rpb25zLmdldChpKTsKKyAgICAgIGlmICghKGFjdGlvbiBpbnN0YW5jZW9mIEVtcHR5SW50ZW50aW9uQWN0aW9uKSkgZW1wdHlBY3Rpb25zLnJlbW92ZShpKTsKKyAgICB9CisgICAgYXNzZXJ0RXF1YWxzKGVtcHR5QWN0aW9ucy50b1N0cmluZygpLCAxLCBlbXB0eUFjdGlvbnMuc2l6ZSgpKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RMb3dQcmlvcml0eSgpIHRocm93cyBFeGNlcHRpb24geworICAgIGNvbmZpZ3VyZUJ5RmlsZShnZXRCYXNlUGF0aCgpICsgIi9Mb3dQcmlvcml0eS5qYXZhIik7CisgICAgTGlzdDxJbnRlbnRpb25BY3Rpb24+IGVtcHR5QWN0aW9ucyA9IGdldEF2YWlsYWJsZUFjdGlvbnMoKTsKKyAgICBpbnQgaSA9IDA7CisgICAgZm9yKDtpIDwgZW1wdHlBY3Rpb25zLnNpemUoKTsgaSsrKSB7CisgICAgICBmaW5hbCBJbnRlbnRpb25BY3Rpb24gaW50ZW50aW9uQWN0aW9uID0gZW1wdHlBY3Rpb25zLmdldChpKTsKKyAgICAgIGlmICgiTWFrZSAnaScgbm90IGZpbmFsIi5lcXVhbHMoaW50ZW50aW9uQWN0aW9uLmdldFRleHQoKSkpIHsKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgICBpZiAoaW50ZW50aW9uQWN0aW9uIGluc3RhbmNlb2YgRW1wdHlJbnRlbnRpb25BY3Rpb24pIHsKKyAgICAgICAgZmFpbCgiTG93IHByaW9yaXR5IGFjdGlvbiBwcmlvciB0byBxdWljayBmaXgiKTsKKyAgICAgIH0KKyAgICB9CisgICAgYXNzZXJ0VHJ1ZShpIDwgZW1wdHlBY3Rpb25zLnNpemUoKSk7CisgICAgZm9yICg7IGkgPCBlbXB0eUFjdGlvbnMuc2l6ZSgpOyBpKyspIHsKKyAgICAgIGlmIChlbXB0eUFjdGlvbnMuZ2V0KGkpIGluc3RhbmNlb2YgRW1wdHlJbnRlbnRpb25BY3Rpb24pIHsKKyAgICAgICAgcmV0dXJuOworICAgICAgfQorICAgIH0KKyAgICBmYWlsKCJNaXNzZWQgaW5zcGVjdGlvbiBzZXR0aW5nIGFjdGlvbiIpOworICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovY29kZUluc2lnaHQvZGFlbW9uL3F1aWNrRml4L0VuYWJsZU9wdGltaXplSW1wb3J0c09uVGhlRmx5VGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNpZ2h0L2RhZW1vbi9xdWlja0ZpeC9FbmFibGVPcHRpbWl6ZUltcG9ydHNPblRoZUZseVRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNDU1OTA2MQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9jb2RlSW5zaWdodC9kYWVtb24vcXVpY2tGaXgvRW5hYmxlT3B0aW1pemVJbXBvcnRzT25UaGVGbHlUZXN0LmphdmEKQEAgLTAsMCArMSw0MyBAQAorcGFja2FnZSBjb20uaW50ZWxsaWouY29kZUluc2lnaHQuZGFlbW9uLnF1aWNrRml4OworCitpbXBvcnQgY29tLmludGVsbGlqLmNvZGVJbnNpZ2h0LkNvZGVJbnNpZ2h0U2V0dGluZ3M7CitpbXBvcnQgY29tLmludGVsbGlqLmNvZGVJbnNpZ2h0LmludGVudGlvbi5JbnRlbnRpb25BY3Rpb247CitpbXBvcnQgY29tLmludGVsbGlqLmNvZGVJbnNwZWN0aW9uLkxvY2FsSW5zcGVjdGlvblRvb2w7CitpbXBvcnQgY29tLmludGVsbGlqLmNvZGVJbnNwZWN0aW9uLnVudXNlZEltcG9ydC5VbnVzZWRJbXBvcnRMb2NhbEluc3BlY3Rpb247CisKKworcHVibGljIGNsYXNzIEVuYWJsZU9wdGltaXplSW1wb3J0c09uVGhlRmx5VGVzdCBleHRlbmRzIExpZ2h0UXVpY2tGaXhUZXN0Q2FzZSB7CisgIEBPdmVycmlkZQorICBwcm90ZWN0ZWQgTG9jYWxJbnNwZWN0aW9uVG9vbFtdIGNvbmZpZ3VyZUxvY2FsSW5zcGVjdGlvblRvb2xzKCkgeworICAgIHJldHVybiBuZXcgTG9jYWxJbnNwZWN0aW9uVG9vbFtde25ldyBVbnVzZWRJbXBvcnRMb2NhbEluc3BlY3Rpb24oKX07CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7IGRvQWxsVGVzdHMoKTsgfQorCisgIEBPdmVycmlkZQorICBwcm90ZWN0ZWQgdm9pZCBkb0FjdGlvbihmaW5hbCBTdHJpbmcgdGV4dCwgZmluYWwgYm9vbGVhbiBhY3Rpb25TaG91bGRCZUF2YWlsYWJsZSwgZmluYWwgU3RyaW5nIHRlc3RGdWxsUGF0aCwgZmluYWwgU3RyaW5nIHRlc3ROYW1lKQorICAgIHRocm93cyBFeGNlcHRpb24geworICAgIGJvb2xlYW4gb2xkID0gQ29kZUluc2lnaHRTZXR0aW5ncy5nZXRJbnN0YW5jZSgpLk9QVElNSVpFX0lNUE9SVFNfT05fVEhFX0ZMWTsKKworICAgIHRyeSB7CisgICAgICBDb2RlSW5zaWdodFNldHRpbmdzLmdldEluc3RhbmNlKCkuT1BUSU1JWkVfSU1QT1JUU19PTl9USEVfRkxZID0gZmFsc2U7CisgICAgICBJbnRlbnRpb25BY3Rpb24gYWN0aW9uID0gZmluZEFjdGlvbldpdGhUZXh0KHRleHQpOworICAgICAgaWYgKGFjdGlvbiA9PSBudWxsICYmIGFjdGlvblNob3VsZEJlQXZhaWxhYmxlKSB7CisgICAgICAgIGZhaWwoIkFjdGlvbiB3aXRoIHRleHQgJyIgKyB0ZXh0ICsgIicgaXMgbm90IGF2YWlsYWJsZSBpbiB0ZXN0ICIgKyB0ZXN0RnVsbFBhdGgpOworICAgICAgfQorICAgICAgaWYgKGFjdGlvbiAhPSBudWxsICYmIGFjdGlvblNob3VsZEJlQXZhaWxhYmxlKSB7CisgICAgICAgIGFjdGlvbi5pbnZva2UoZ2V0UHJvamVjdCgpLCBnZXRFZGl0b3IoKSwgZ2V0RmlsZSgpKTsKKyAgICAgICAgYXNzZXJ0VHJ1ZShDb2RlSW5zaWdodFNldHRpbmdzLmdldEluc3RhbmNlKCkuT1BUSU1JWkVfSU1QT1JUU19PTl9USEVfRkxZKTsKKyAgICAgIH0KKyAgICB9CisgICAgZmluYWxseSB7CisgICAgICBDb2RlSW5zaWdodFNldHRpbmdzLmdldEluc3RhbmNlKCkuT1BUSU1JWkVfSU1QT1JUU19PTl9USEVfRkxZID0gb2xkOworICAgIH0KKyAgfQorCisgIEBPdmVycmlkZQorICBwcm90ZWN0ZWQgU3RyaW5nIGdldEJhc2VQYXRoKCkgeworICAgIHJldHVybiAiL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9lbmFibGVPcHRpbWl6ZUltcG9ydHNPblRoZUZseSI7CisgIH0KK30KKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNpZ2h0L2RhZW1vbi9xdWlja0ZpeC9GaXhBbGxBbm5vdGF0b3JRdWlja2ZpeFRlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9jb2RlSW5zaWdodC9kYWVtb24vcXVpY2tGaXgvRml4QWxsQW5ub3RhdG9yUXVpY2tmaXhUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWJlZWVjMmIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovY29kZUluc2lnaHQvZGFlbW9uL3F1aWNrRml4L0ZpeEFsbEFubm90YXRvclF1aWNrZml4VGVzdC5qYXZhCkBAIC0wLDAgKzEsMTIzIEBACisvKgorICogQ29weXJpZ2h0IDIwMDAtMjAxMiBKZXRCcmFpbnMgcy5yLm8uCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisvKgorICogVXNlcjogYW5uYQorICogRGF0ZTogMTctSnVuLTIwMDcKKyAqLworcGFja2FnZSBjb20uaW50ZWxsaWouY29kZUluc2lnaHQuZGFlbW9uLnF1aWNrRml4OworCitpbXBvcnQgY29tLmludGVsbGlqLmNvZGVJbnNpZ2h0LmludGVudGlvbi5JbnRlbnRpb25BY3Rpb247CitpbXBvcnQgY29tLmludGVsbGlqLmNvZGVJbnNwZWN0aW9uLio7CitpbXBvcnQgY29tLmludGVsbGlqLmxhbmcuTGFuZ3VhZ2U7CitpbXBvcnQgY29tLmludGVsbGlqLmxhbmcuTGFuZ3VhZ2VBbm5vdGF0b3JzOworaW1wb3J0IGNvbS5pbnRlbGxpai5sYW5nLmFubm90YXRpb24uQW5ub3RhdGlvbjsKK2ltcG9ydCBjb20uaW50ZWxsaWoubGFuZy5hbm5vdGF0aW9uLkFubm90YXRpb25Ib2xkZXI7CitpbXBvcnQgY29tLmludGVsbGlqLmxhbmcuYW5ub3RhdGlvbi5Bbm5vdGF0b3I7CitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkuZWRpdG9yLkVkaXRvcjsKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS5lZGl0b3IuY29sb3JzLkNvZGVJbnNpZ2h0Q29sb3JzOworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLmZpbGVUeXBlcy5TdGRGaWxlVHlwZXM7CitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkucHJvamVjdC5Qcm9qZWN0OworaW1wb3J0IGNvbS5pbnRlbGxpai5wc2kuUHNpRWxlbWVudDsKK2ltcG9ydCBjb20uaW50ZWxsaWoucHNpLlBzaUZpbGU7CitpbXBvcnQgY29tLmludGVsbGlqLnBzaS5Qc2lNZXRob2Q7CitpbXBvcnQgY29tLmludGVsbGlqLnV0aWwuSW5jb3JyZWN0T3BlcmF0aW9uRXhjZXB0aW9uOworaW1wb3J0IG9yZy5qZXRicmFpbnMuYW5ub3RhdGlvbnMuTm9uTmxzOworaW1wb3J0IG9yZy5qZXRicmFpbnMuYW5ub3RhdGlvbnMuTm90TnVsbDsKKworcHVibGljIGNsYXNzIEZpeEFsbEFubm90YXRvclF1aWNrZml4VGVzdCBleHRlbmRzIExpZ2h0UXVpY2tGaXhUZXN0Q2FzZSB7CisgIHB1YmxpYyB2b2lkIHRlc3RBbm5vdGF0b3IoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBBbm5vdGF0b3IgYW5ub3RhdG9yID0gbmV3IE15QW5ub3RhdG9yKCk7CisgICAgTGFuZ3VhZ2UgamF2YUxhbmd1YWdlID0gU3RkRmlsZVR5cGVzLkpBVkEuZ2V0TGFuZ3VhZ2UoKTsKKyAgICBMYW5ndWFnZUFubm90YXRvcnMuSU5TVEFOQ0UuYWRkRXhwbGljaXRFeHRlbnNpb24oamF2YUxhbmd1YWdlLCBhbm5vdGF0b3IpOworICAgIGVuYWJsZUluc3BlY3Rpb25Ub29sKG5ldyBEZWZhdWx0SGlnaGxpZ2h0VmlzaXRvckJhc2VkSW5zcGVjdGlvbi5Bbm5vdGF0b3JCYXNlZEluc3BlY3Rpb24oKSk7CisgICAgdHJ5IHsKKyAgICAgIGRvQWxsVGVzdHMoKTsKKyAgICB9CisgICAgZmluYWxseSB7CisgICAgICBMYW5ndWFnZUFubm90YXRvcnMuSU5TVEFOQ0UucmVtb3ZlRXhwbGljaXRFeHRlbnNpb24oamF2YUxhbmd1YWdlLCBhbm5vdGF0b3IpOworICAgIH0KKyAgfQorCisgIEBPdmVycmlkZQorICBwcm90ZWN0ZWQgYm9vbGVhbiBzaG91bGRCZUF2YWlsYWJsZUFmdGVyRXhlY3V0aW9uKCkgeworICAgIHJldHVybiB0cnVlOworICB9CisKKyAgQE92ZXJyaWRlCisgIEBOb25ObHMKKyAgcHJvdGVjdGVkIFN0cmluZyBnZXRCYXNlUGF0aCgpIHsKKyAgICByZXR1cm4gIi9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvZml4QWxsQW5ub3RhdG9yIjsKKyAgfQorCisgIHB1YmxpYyBzdGF0aWMgY2xhc3MgTXlBbm5vdGF0b3IgaW1wbGVtZW50cyBBbm5vdGF0b3IgeworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyB2b2lkIGFubm90YXRlKEBOb3ROdWxsIFBzaUVsZW1lbnQgZWxlbWVudCwgQE5vdE51bGwgQW5ub3RhdGlvbkhvbGRlciBob2xkZXIpIHsKKyAgICAgIGlmIChlbGVtZW50IGluc3RhbmNlb2YgUHNpTWV0aG9kKSB7CisgICAgICAgIEFubm90YXRpb24gYW5ub3RhdGlvbiA9IGhvbGRlci5jcmVhdGVFcnJvckFubm90YXRpb24oKChQc2lNZXRob2QpZWxlbWVudCkuZ2V0TmFtZUlkZW50aWZpZXIoKSwgbnVsbCk7CisgICAgICAgIGFubm90YXRpb24ucmVnaXN0ZXJVbml2ZXJzYWxGaXgobmV3IE15Rml4KCksIG51bGwsIG51bGwpOworICAgICAgICBhbm5vdGF0aW9uLnNldFRleHRBdHRyaWJ1dGVzKENvZGVJbnNpZ2h0Q29sb3JzLkRPQ19DT01NRU5UX1RBR19WQUxVRSk7CisgICAgICB9CisgICAgfQorCisgICAgc3RhdGljIGNsYXNzIE15Rml4IGltcGxlbWVudHMgSW50ZW50aW9uQWN0aW9uLCBMb2NhbFF1aWNrRml4IHsKKworICAgICAgQE5vdE51bGwKKyAgICAgIEBPdmVycmlkZQorICAgICAgcHVibGljIFN0cmluZyBnZXRUZXh0KCkgeworICAgICAgICByZXR1cm4gZ2V0TmFtZSgpOworICAgICAgfQorCisgICAgICBATm90TnVsbAorICAgICAgQE92ZXJyaWRlCisgICAgICBwdWJsaWMgU3RyaW5nIGdldE5hbWUoKSB7CisgICAgICAgIHJldHVybiAiTXlGaXgiOworICAgICAgfQorCisgICAgICBATm90TnVsbAorICAgICAgQE92ZXJyaWRlCisgICAgICBwdWJsaWMgU3RyaW5nIGdldEZhbWlseU5hbWUoKSB7CisgICAgICAgIHJldHVybiBnZXROYW1lKCk7CisgICAgICB9CisKKyAgICAgIEBPdmVycmlkZQorICAgICAgcHVibGljIHZvaWQgYXBwbHlGaXgoQE5vdE51bGwgUHJvamVjdCBwcm9qZWN0LCBATm90TnVsbCBQcm9ibGVtRGVzY3JpcHRvciBkZXNjcmlwdG9yKSB7CisgICAgICAgIGZpbmFsIFBzaUVsZW1lbnQgZWxlbWVudCA9IGRlc2NyaXB0b3IuZ2V0UHNpRWxlbWVudCgpOworICAgICAgICBpZiAoZWxlbWVudCAhPSBudWxsKSB7CisgICAgICAgICAgZmluYWwgUHNpRWxlbWVudCBwYXJlbnQgPSBlbGVtZW50LmdldFBhcmVudCgpOworICAgICAgICAgIGlmIChwYXJlbnQgaW5zdGFuY2VvZiBQc2lNZXRob2QpIHsKKyAgICAgICAgICAgICgoUHNpTWV0aG9kKXBhcmVudCkuc2V0TmFtZSgoKFBzaU1ldGhvZClwYXJlbnQpLmdldE5hbWUoKSArICJGIik7CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICB9CisKKyAgICAgIEBPdmVycmlkZQorICAgICAgcHVibGljIGJvb2xlYW4gaXNBdmFpbGFibGUoQE5vdE51bGwgUHJvamVjdCBwcm9qZWN0LCBFZGl0b3IgZWRpdG9yLCBQc2lGaWxlIGZpbGUpIHsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICB9CisKKyAgICAgIEBPdmVycmlkZQorICAgICAgcHVibGljIHZvaWQgaW52b2tlKEBOb3ROdWxsIFByb2plY3QgcHJvamVjdCwgRWRpdG9yIGVkaXRvciwgUHNpRmlsZSBmaWxlKSB0aHJvd3MgSW5jb3JyZWN0T3BlcmF0aW9uRXhjZXB0aW9uIHsKKyAgICAgICAgZmFpbCgpOworICAgICAgfQorCisgICAgICBAT3ZlcnJpZGUKKyAgICAgIHB1YmxpYyBib29sZWFuIHN0YXJ0SW5Xcml0ZUFjdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICB9CisgICAgfQorICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNpZ2h0L2RhZW1vbi9xdWlja0ZpeC9GaXhBbGxRdWlja2ZpeFRlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9jb2RlSW5zaWdodC9kYWVtb24vcXVpY2tGaXgvRml4QWxsUXVpY2tmaXhUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGRhMjZhYQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9jb2RlSW5zaWdodC9kYWVtb24vcXVpY2tGaXgvRml4QWxsUXVpY2tmaXhUZXN0LmphdmEKQEAgLTAsMCArMSwyNiBAQAorLyoKKyAqIFVzZXI6IGFubmEKKyAqIERhdGU6IDE3LUp1bi0yMDA3CisgKi8KK3BhY2thZ2UgY29tLmludGVsbGlqLmNvZGVJbnNpZ2h0LmRhZW1vbi5xdWlja0ZpeDsKKworaW1wb3J0IGNvbS5pbnRlbGxpai5jb2RlSW5zcGVjdGlvbi5Mb2NhbEluc3BlY3Rpb25Ub29sOworaW1wb3J0IGNvbS5pbnRlbGxpai5jb2RlSW5zcGVjdGlvbi5kYXRhRmxvdy5EYXRhRmxvd0luc3BlY3Rpb247CitpbXBvcnQgb3JnLmpldGJyYWlucy5hbm5vdGF0aW9ucy5Ob25ObHM7CisKK3B1YmxpYyBjbGFzcyBGaXhBbGxRdWlja2ZpeFRlc3QgZXh0ZW5kcyBMaWdodFF1aWNrRml4VGVzdENhc2UgeworICBAT3ZlcnJpZGUKKyAgcHJvdGVjdGVkIExvY2FsSW5zcGVjdGlvblRvb2xbXSBjb25maWd1cmVMb2NhbEluc3BlY3Rpb25Ub29scygpIHsKKyAgICByZXR1cm4gbmV3IExvY2FsSW5zcGVjdGlvblRvb2xbXSB7CisgICAgICBuZXcgRGF0YUZsb3dJbnNwZWN0aW9uKCkKKyAgICB9OworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdCgpIHRocm93cyBFeGNlcHRpb24geyBkb0FsbFRlc3RzKCk7IH0KKworICBAT3ZlcnJpZGUKKyAgQE5vbk5scworICBwcm90ZWN0ZWQgU3RyaW5nIGdldEJhc2VQYXRoKCkgeworICAgIHJldHVybiAiL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9maXhBbGwiOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNpZ2h0L2RhZW1vbi9xdWlja0ZpeC9HZW5lcmFsaXplQ2F0Y2hUZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovY29kZUluc2lnaHQvZGFlbW9uL3F1aWNrRml4L0dlbmVyYWxpemVDYXRjaFRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wODY3OGM5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNpZ2h0L2RhZW1vbi9xdWlja0ZpeC9HZW5lcmFsaXplQ2F0Y2hUZXN0LmphdmEKQEAgLTAsMCArMSwxMiBAQAorcGFja2FnZSBjb20uaW50ZWxsaWouY29kZUluc2lnaHQuZGFlbW9uLnF1aWNrRml4OworCitwdWJsaWMgY2xhc3MgR2VuZXJhbGl6ZUNhdGNoVGVzdCBleHRlbmRzIExpZ2h0UXVpY2tGaXhUZXN0Q2FzZSB7CisgIHB1YmxpYyB2b2lkIHRlc3QoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb0FsbFRlc3RzKCk7CisgIH0KKworICBAT3ZlcnJpZGUKKyAgcHJvdGVjdGVkIFN0cmluZyBnZXRCYXNlUGF0aCgpIHsKKyAgICByZXR1cm4gIi9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvZ2VuZXJhbGl6ZUNhdGNoIjsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNpZ2h0L2RhZW1vbi9xdWlja0ZpeC9HZW5lcmljQ3JlYXRlRnJvbVVzYWdlVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNpZ2h0L2RhZW1vbi9xdWlja0ZpeC9HZW5lcmljQ3JlYXRlRnJvbVVzYWdlVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEyNGVhNTgKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovY29kZUluc2lnaHQvZGFlbW9uL3F1aWNrRml4L0dlbmVyaWNDcmVhdGVGcm9tVXNhZ2VUZXN0LmphdmEKQEAgLTAsMCArMSwxNCBAQAorcGFja2FnZSBjb20uaW50ZWxsaWouY29kZUluc2lnaHQuZGFlbW9uLnF1aWNrRml4OworCisvKioKKyAqIEBhdXRob3IgdmVuCisgKi8KK3B1YmxpYyBjbGFzcyBHZW5lcmljQ3JlYXRlRnJvbVVzYWdlVGVzdCBleHRlbmRzIExpZ2h0UXVpY2tGaXgxNVRlc3RDYXNlIHsKKworICBwdWJsaWMgdm9pZCB0ZXN0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7IGRvQWxsVGVzdHMoKTsgfQorCisgIEBPdmVycmlkZQorICBwcm90ZWN0ZWQgU3RyaW5nIGdldEJhc2VQYXRoKCkgeworICAgIHJldHVybiAiL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9nZW5lcmljQ3JlYXRlRnJvbVVzYWdlIjsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNpZ2h0L2RhZW1vbi9xdWlja0ZpeC9HZW5lcmlmeUZpbGVUZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovY29kZUluc2lnaHQvZGFlbW9uL3F1aWNrRml4L0dlbmVyaWZ5RmlsZVRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZDBkMTE0Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNpZ2h0L2RhZW1vbi9xdWlja0ZpeC9HZW5lcmlmeUZpbGVUZXN0LmphdmEKQEAgLTAsMCArMSwyMSBAQAorcGFja2FnZSBjb20uaW50ZWxsaWouY29kZUluc2lnaHQuZGFlbW9uLnF1aWNrRml4OworCitpbXBvcnQgY29tLmludGVsbGlqLmNvZGVJbnNwZWN0aW9uLkxvY2FsSW5zcGVjdGlvblRvb2w7CitpbXBvcnQgY29tLmludGVsbGlqLmNvZGVJbnNwZWN0aW9uLnVuY2hlY2tlZFdhcm5pbmdzLlVuY2hlY2tlZFdhcm5pbmdMb2NhbEluc3BlY3Rpb247CisKKworcHVibGljIGNsYXNzIEdlbmVyaWZ5RmlsZVRlc3QgZXh0ZW5kcyBMaWdodFF1aWNrRml4QXZhaWxhYmlsaXR5VGVzdENhc2UgeworCisgIEBPdmVycmlkZQorICBwcm90ZWN0ZWQgTG9jYWxJbnNwZWN0aW9uVG9vbFtdIGNvbmZpZ3VyZUxvY2FsSW5zcGVjdGlvblRvb2xzKCkgeworICAgIHJldHVybiBuZXcgTG9jYWxJbnNwZWN0aW9uVG9vbFtdIHtuZXcgVW5jaGVja2VkV2FybmluZ0xvY2FsSW5zcGVjdGlvbigpfTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3QoKSB0aHJvd3MgRXhjZXB0aW9uIHsgZG9BbGxUZXN0cygpOyB9CisKKyAgQE92ZXJyaWRlCisgIHByb3RlY3RlZCBTdHJpbmcgZ2V0QmFzZVBhdGgoKSB7CisgICAgcmV0dXJuICIvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2dlbmVyaWZ5RmlsZSI7CisgIH0KK30KKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNpZ2h0L2RhZW1vbi9xdWlja0ZpeC9JMThuUXVpY2tGaXhUZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovY29kZUluc2lnaHQvZGFlbW9uL3F1aWNrRml4L0kxOG5RdWlja0ZpeFRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZDZjYjkwCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNpZ2h0L2RhZW1vbi9xdWlja0ZpeC9JMThuUXVpY2tGaXhUZXN0LmphdmEKQEAgLTAsMCArMSwzNyBAQAorcGFja2FnZSBjb20uaW50ZWxsaWouY29kZUluc2lnaHQuZGFlbW9uLnF1aWNrRml4OworCitpbXBvcnQgY29tLmludGVsbGlqLmNvZGVJbnNpZ2h0LmRhZW1vbi5xdWlja0ZpeC5MaWdodFF1aWNrRml4MTVUZXN0Q2FzZTsKK2ltcG9ydCBjb20uaW50ZWxsaWouY29kZUluc3BlY3Rpb24uTG9jYWxJbnNwZWN0aW9uVG9vbDsKK2ltcG9ydCBjb20uaW50ZWxsaWouY29kZUluc3BlY3Rpb24uaTE4bi5JMThuSW5zcGVjdGlvbjsKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS51dGlsLkNvbXBhcmluZzsKKworLyoqCisgKiBAYXV0aG9yIHlvbGUKKyAqLworcHVibGljIGNsYXNzIEkxOG5RdWlja0ZpeFRlc3QgZXh0ZW5kcyBMaWdodFF1aWNrRml4MTVUZXN0Q2FzZSB7CisgIHByaXZhdGUgYm9vbGVhbiBteU11c3RCZUF2YWlsYWJsZUFmdGVySW52b2tlOworCisgIEBPdmVycmlkZQorICBwcm90ZWN0ZWQgTG9jYWxJbnNwZWN0aW9uVG9vbFtdIGNvbmZpZ3VyZUxvY2FsSW5zcGVjdGlvblRvb2xzKCkgeworICAgIHJldHVybiBuZXcgTG9jYWxJbnNwZWN0aW9uVG9vbFtde25ldyBJMThuSW5zcGVjdGlvbigpfTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3QoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb0FsbFRlc3RzKCk7CisgIH0KKworICBAT3ZlcnJpZGUKKyAgcHJvdGVjdGVkIFN0cmluZyBnZXRCYXNlUGF0aCgpIHsKKyAgICByZXR1cm4gIi9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvaTE4biI7CisgIH0KKworICBAT3ZlcnJpZGUKKyAgcHJvdGVjdGVkIHZvaWQgYmVmb3JlQWN0aW9uU3RhcnRlZChmaW5hbCBTdHJpbmcgdGVzdE5hbWUsIGZpbmFsIFN0cmluZyBjb250ZW50cykgeworICAgIG15TXVzdEJlQXZhaWxhYmxlQWZ0ZXJJbnZva2UgPSBDb21wYXJpbmcuc3RyRXF1YWwodGVzdE5hbWUsICJTeXN0ZW1DYWxsLmphdmEiKTsKKyAgfQorCisgIEBPdmVycmlkZQorICBwcm90ZWN0ZWQgYm9vbGVhbiBzaG91bGRCZUF2YWlsYWJsZUFmdGVyRXhlY3V0aW9uKCkgeworICAgIHJldHVybiBteU11c3RCZUF2YWlsYWJsZUFmdGVySW52b2tlOworICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovY29kZUluc2lnaHQvZGFlbW9uL3F1aWNrRml4L0kxOG5pemVUZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovY29kZUluc2lnaHQvZGFlbW9uL3F1aWNrRml4L0kxOG5pemVUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzFlMzg1ZAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9jb2RlSW5zaWdodC9kYWVtb24vcXVpY2tGaXgvSTE4bml6ZVRlc3QuamF2YQpAQCAtMCwwICsxLDYyIEBACitwYWNrYWdlIGNvbS5pbnRlbGxpai5jb2RlSW5zaWdodC5kYWVtb24ucXVpY2tGaXg7CisKK2ltcG9ydCBjb20uaW50ZWxsaWouY29kZUluc3BlY3Rpb24uaTE4bi5JMThuUXVpY2tGaXhIYW5kbGVyOworaW1wb3J0IGNvbS5pbnRlbGxpai5jb2RlSW5zcGVjdGlvbi5pMThuLkkxOG5pemVBY3Rpb247CitpbXBvcnQgY29tLmludGVsbGlqLmNvZGVJbnNwZWN0aW9uLmkxOG4uSmF2YUkxOG5VdGlsOworaW1wb3J0IGNvbS5pbnRlbGxpai5pZGUuRGF0YU1hbmFnZXI7CitpbXBvcnQgY29tLmludGVsbGlqLmxhbmcucHJvcGVydGllcy5wc2kuUHJvcGVydGllc0ZpbGU7CitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkuYWN0aW9uU3lzdGVtLkFuQWN0aW9uRXZlbnQ7CitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkuYWN0aW9uU3lzdGVtLkRhdGFDb250ZXh0OworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLmFwcGxpY2F0aW9uLmV4LlBhdGhNYW5hZ2VyRXg7CitpbXBvcnQgY29tLmludGVsbGlqLnBzaS5Qc2lFeHByZXNzaW9uOworaW1wb3J0IGNvbS5pbnRlbGxpai5wc2kuUHNpTGl0ZXJhbEV4cHJlc3Npb247CitpbXBvcnQgY29tLmludGVsbGlqLnRlc3RGcmFtZXdvcmsuTGlnaHRDb2RlSW5zaWdodFRlc3RDYXNlOworaW1wb3J0IGNvbS5pbnRlbGxpai51dGlsLkluY29ycmVjdE9wZXJhdGlvbkV4Y2VwdGlvbjsKK2ltcG9ydCBvcmcuamV0YnJhaW5zLmFubm90YXRpb25zLk5vbk5sczsKKworaW1wb3J0IGphdmEuaW8uRmlsZTsKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbnM7CisKKworcHVibGljIGNsYXNzIEkxOG5pemVUZXN0IGV4dGVuZHMgTGlnaHRDb2RlSW5zaWdodFRlc3RDYXNlIHsKKyAgQE5vbk5scworICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgZ2V0QmFzZVBhdGgoKSB7CisgICAgcmV0dXJuICIvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2kxOG5pemUiOworICB9CisKKyAgcHJpdmF0ZSB2b2lkIGRvVGVzdChATm9uTmxzIFN0cmluZyBleHQpIHRocm93cyBFeGNlcHRpb24geworICAgIGNvbmZpZ3VyZUJ5RmlsZShnZXRCYXNlUGF0aCgpICsgIi9iZWZvcmUiK2dldFRlc3ROYW1lKGZhbHNlKSsiLiIrZXh0KTsKKyAgICBJMThuaXplQWN0aW9uIGFjdGlvbiA9IG5ldyBJMThuaXplQWN0aW9uKCk7CisgICAgRGF0YUNvbnRleHQgZGF0YUNvbnRleHQgPSBEYXRhTWFuYWdlci5nZXRJbnN0YW5jZSgpLmdldERhdGFDb250ZXh0KG15RWRpdG9yLmdldENvbXBvbmVudCgpKTsKKyAgICBBbkFjdGlvbkV2ZW50IGV2ZW50ID0gbmV3IEFuQWN0aW9uRXZlbnQobnVsbCwgZGF0YUNvbnRleHQsICJwbGFjZSIsIGFjdGlvbi5nZXRUZW1wbGF0ZVByZXNlbnRhdGlvbigpLCBudWxsLCAwKTsKKyAgICBhY3Rpb24udXBkYXRlKGV2ZW50KTsKKyAgICBATm9uTmxzIFN0cmluZyBhZnRlckZpbGUgPSBnZXRCYXNlUGF0aCgpICsgIi9hZnRlciIgKyBnZXRUZXN0TmFtZShmYWxzZSkgKyAiLiIgKyBleHQ7CisgICAgYm9vbGVhbiBhZnRlckZpbGVFeGlzdHMgPSBuZXcgRmlsZShQYXRoTWFuYWdlckV4LmdldFRlc3REYXRhUGF0aCgpICsgYWZ0ZXJGaWxlKS5leGlzdHMoKTsKKyAgICBJMThuUXVpY2tGaXhIYW5kbGVyIGhhbmRsZXIgPSBhY3Rpb24uZ2V0SGFuZGxlcihldmVudCk7CisgICAgdHJ5IHsKKyAgICAgIGlmIChoYW5kbGVyICE9IG51bGwpIHsKKyAgICAgICAgaGFuZGxlci5jaGVja0FwcGxpY2FiaWxpdHkoZ2V0RmlsZSgpLCBnZXRFZGl0b3IoKSk7CisgICAgICB9CisgICAgfQorICAgIGNhdGNoIChJbmNvcnJlY3RPcGVyYXRpb25FeGNlcHRpb24gZSkgeworICAgICAgZXZlbnQuZ2V0UHJlc2VudGF0aW9uKCkuc2V0RW5hYmxlZChmYWxzZSk7CisgICAgfQorICAgIGFzc2VydEVxdWFscyhhZnRlckZpbGVFeGlzdHMsIGV2ZW50LmdldFByZXNlbnRhdGlvbigpLmlzRW5hYmxlZCgpKTsKKworICAgIGlmIChhZnRlckZpbGVFeGlzdHMpIHsKKyAgICAgIFBzaUxpdGVyYWxFeHByZXNzaW9uIGxpdGVyYWxFeHByZXNzaW9uID0gSTE4bml6ZUFjdGlvbi5nZXRFbmNsb3NpbmdTdHJpbmdMaXRlcmFsKGdldEZpbGUoKSwgZ2V0RWRpdG9yKCkpOworICAgICAgYXNzZXJ0Tm90TnVsbChoYW5kbGVyKTsKKyAgICAgIGhhbmRsZXIucGVyZm9ybUkxOG5pemF0aW9uKGdldEZpbGUoKSwgZ2V0RWRpdG9yKCksIGxpdGVyYWxFeHByZXNzaW9uLCBDb2xsZWN0aW9ucy48UHJvcGVydGllc0ZpbGU+ZW1wdHlMaXN0KCksICJrZXkxIiwgInZhbHVlMSIsICJpMThuaXplZEV4cHIiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHNpRXhwcmVzc2lvbi5FTVBUWV9BUlJBWSwgSmF2YUkxOG5VdGlsLkRFRkFVTFRfUFJPUEVSVFlfQ1JFQVRJT05fSEFORExFUik7CisgICAgICBjaGVja1Jlc3VsdEJ5RmlsZShhZnRlckZpbGUpOworICAgIH0KKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RMaXRlcmFsKCkgdGhyb3dzIEV4Y2VwdGlvbiB7ZG9UZXN0KCJqYXZhIik7fQorICBwdWJsaWMgdm9pZCB0ZXN0T3V0c2lkZUxpdGVyYWwoKSB0aHJvd3MgRXhjZXB0aW9uIHtkb1Rlc3QoImphdmEiKTt9CisgIHB1YmxpYyB2b2lkIHRlc3RMaXRlcmFsUmlnaHRTdWJTZWxlY3Rpb24oKSB0aHJvd3MgRXhjZXB0aW9uIHtkb1Rlc3QoImphdmEiKTt9CisgIHB1YmxpYyB2b2lkIHRlc3RDYXJldEF0UGx1cygpIHRocm93cyBFeGNlcHRpb24ge2RvVGVzdCgiamF2YSIpO30KKworICBwdWJsaWMgdm9pZCB0ZXN0TG9uZ0NvbmNhdCgpIHRocm93cyBFeGNlcHRpb24ge2RvVGVzdCgiamF2YSIpO30KKyAgcHVibGljIHZvaWQgdGVzdENoYXJhY3RlckxpdGVyYWwoKSB0aHJvd3MgRXhjZXB0aW9uIHtkb1Rlc3QoImphdmEiKTt9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovY29kZUluc2lnaHQvZGFlbW9uL3F1aWNrRml4L0luaXRpYWxpemVGaW5hbEZpZWxkSW5Db25zdHJ1Y3RvckZpeFRlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9jb2RlSW5zaWdodC9kYWVtb24vcXVpY2tGaXgvSW5pdGlhbGl6ZUZpbmFsRmllbGRJbkNvbnN0cnVjdG9yRml4VGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRkYWRhYmMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovY29kZUluc2lnaHQvZGFlbW9uL3F1aWNrRml4L0luaXRpYWxpemVGaW5hbEZpZWxkSW5Db25zdHJ1Y3RvckZpeFRlc3QuamF2YQpAQCAtMCwwICsxLDE4IEBACitwYWNrYWdlIGNvbS5pbnRlbGxpai5jb2RlSW5zaWdodC5kYWVtb24ucXVpY2tGaXg7CisKK2ltcG9ydCBjb20uaW50ZWxsaWouY29kZUluc3BlY3Rpb24uTG9jYWxJbnNwZWN0aW9uVG9vbDsKK2ltcG9ydCBjb20uaW50ZWxsaWouY29kZUluc3BlY3Rpb24udW51c2VkU3ltYm9sLlVudXNlZFN5bWJvbExvY2FsSW5zcGVjdGlvbjsKKworcHVibGljIGNsYXNzIEluaXRpYWxpemVGaW5hbEZpZWxkSW5Db25zdHJ1Y3RvckZpeFRlc3QgZXh0ZW5kcyBMaWdodFF1aWNrRml4VGVzdENhc2UgeworICBAT3ZlcnJpZGUKKyAgcHJvdGVjdGVkIExvY2FsSW5zcGVjdGlvblRvb2xbXSBjb25maWd1cmVMb2NhbEluc3BlY3Rpb25Ub29scygpIHsKKyAgICByZXR1cm4gbmV3IExvY2FsSW5zcGVjdGlvblRvb2xbXXsgbmV3IFVudXNlZFN5bWJvbExvY2FsSW5zcGVjdGlvbigpfTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3QoKSB0aHJvd3MgRXhjZXB0aW9uIHsgZG9BbGxUZXN0cygpOyB9CisKKyAgQE92ZXJyaWRlCisgIHByb3RlY3RlZCBTdHJpbmcgZ2V0QmFzZVBhdGgoKSB7CisgICAgcmV0dXJuICIvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2luaXRpYWxpemVGaW5hbEZpZWxkSW5Db25zdHJ1Y3RvciI7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovY29kZUluc2lnaHQvZGFlbW9uL3F1aWNrRml4L0luc2VydE5ld1Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9jb2RlSW5zaWdodC9kYWVtb24vcXVpY2tGaXgvSW5zZXJ0TmV3VGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMyM2U3Y2JiCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNpZ2h0L2RhZW1vbi9xdWlja0ZpeC9JbnNlcnROZXdUZXN0LmphdmEKQEAgLTAsMCArMSwxMyBAQAorcGFja2FnZSBjb20uaW50ZWxsaWouY29kZUluc2lnaHQuZGFlbW9uLnF1aWNrRml4OworCitwdWJsaWMgY2xhc3MgSW5zZXJ0TmV3VGVzdCBleHRlbmRzIExpZ2h0UXVpY2tGaXhUZXN0Q2FzZSB7CisKKyAgcHVibGljIHZvaWQgdGVzdCgpIHRocm93cyBFeGNlcHRpb24geyBkb0FsbFRlc3RzKCk7IH0KKworICBAT3ZlcnJpZGUKKyAgcHJvdGVjdGVkIFN0cmluZyBnZXRCYXNlUGF0aCgpIHsKKyAgICByZXR1cm4gIi9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvaW5zZXJ0TmV3IjsKKyAgfQorCit9CisKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9jb2RlSW5zaWdodC9kYWVtb24vcXVpY2tGaXgvSW5zZXJ0U3VwZXJUZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovY29kZUluc2lnaHQvZGFlbW9uL3F1aWNrRml4L0luc2VydFN1cGVyVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM3M2MwMzkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovY29kZUluc2lnaHQvZGFlbW9uL3F1aWNrRml4L0luc2VydFN1cGVyVGVzdC5qYXZhCkBAIC0wLDAgKzEsMTYgQEAKKworcGFja2FnZSBjb20uaW50ZWxsaWouY29kZUluc2lnaHQuZGFlbW9uLnF1aWNrRml4OworCisKKworcHVibGljIGNsYXNzIEluc2VydFN1cGVyVGVzdCBleHRlbmRzIExpZ2h0UXVpY2tGaXhUZXN0Q2FzZSB7CisKKyAgcHVibGljIHZvaWQgdGVzdCgpIHRocm93cyBFeGNlcHRpb24geyBkb0FsbFRlc3RzKCk7IH0KKworICBAT3ZlcnJpZGUKKyAgcHJvdGVjdGVkIFN0cmluZyBnZXRCYXNlUGF0aCgpIHsKKyAgICByZXR1cm4gIi9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvaW5zZXJ0U3VwZXIiOworICB9CisKK30KKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNpZ2h0L2RhZW1vbi9xdWlja0ZpeC9JdGVyYXRlT3ZlclRlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9jb2RlSW5zaWdodC9kYWVtb24vcXVpY2tGaXgvSXRlcmF0ZU92ZXJUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTdjZjBkZAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9jb2RlSW5zaWdodC9kYWVtb24vcXVpY2tGaXgvSXRlcmF0ZU92ZXJUZXN0LmphdmEKQEAgLTAsMCArMSwzMSBAQAorCisvKgorICogQ29weXJpZ2h0IDIwMDAtMjAxMiBKZXRCcmFpbnMgcy5yLm8uCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworcGFja2FnZSBjb20uaW50ZWxsaWouY29kZUluc2lnaHQuZGFlbW9uLnF1aWNrRml4OworCisKKworcHVibGljIGNsYXNzIEl0ZXJhdGVPdmVyVGVzdCBleHRlbmRzIExpZ2h0UXVpY2tGaXgxNVRlc3RDYXNlIHsKKworICBwdWJsaWMgdm9pZCB0ZXN0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7IGRvQWxsVGVzdHMoKTsgfQorCisgIEBPdmVycmlkZQorICBwcm90ZWN0ZWQgU3RyaW5nIGdldEJhc2VQYXRoKCkgeworICAgIHJldHVybiAiL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9pdGVyYXRlT3ZlciI7CisgIH0KKworfQorCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovY29kZUluc2lnaHQvZGFlbW9uL3F1aWNrRml4L0phdmFkb2NJbnNwZWN0aW9uUXVpY2tGaXhUZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovY29kZUluc2lnaHQvZGFlbW9uL3F1aWNrRml4L0phdmFkb2NJbnNwZWN0aW9uUXVpY2tGaXhUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmM0MGJmNgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9jb2RlSW5zaWdodC9kYWVtb24vcXVpY2tGaXgvSmF2YWRvY0luc3BlY3Rpb25RdWlja0ZpeFRlc3QuamF2YQpAQCAtMCwwICsxLDM5IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDAwLTIwMDYgSmV0QnJhaW5zIHMuci5vLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICovCisKKy8qCisgKiBDcmVhdGVkIGJ5IEludGVsbGlKIElERUEuCisgKiBVc2VyOiBBbm5hLktvemxvdmEKKyAqIERhdGU6IDA2LVNlcC0yMDA2CisgKiBUaW1lOiAxMzo1NjoxMQorICovCitwYWNrYWdlIGNvbS5pbnRlbGxpai5jb2RlSW5zaWdodC5kYWVtb24ucXVpY2tGaXg7CisKK2ltcG9ydCBjb20uaW50ZWxsaWouY29kZUluc3BlY3Rpb24uTG9jYWxJbnNwZWN0aW9uVG9vbDsKK2ltcG9ydCBjb20uaW50ZWxsaWouY29kZUluc3BlY3Rpb24uamF2YURvYy5KYXZhRG9jTG9jYWxJbnNwZWN0aW9uOworCitwdWJsaWMgY2xhc3MgSmF2YWRvY0luc3BlY3Rpb25RdWlja0ZpeFRlc3QgZXh0ZW5kcyBMaWdodFF1aWNrRml4MTVUZXN0Q2FzZSB7CisKKyAgQE92ZXJyaWRlCisgIHByb3RlY3RlZCBMb2NhbEluc3BlY3Rpb25Ub29sW10gY29uZmlndXJlTG9jYWxJbnNwZWN0aW9uVG9vbHMoKSB7CisgICAgZmluYWwgSmF2YURvY0xvY2FsSW5zcGVjdGlvbiBqYXZhRG9jTG9jYWxJbnNwZWN0aW9uID0gbmV3IEphdmFEb2NMb2NhbEluc3BlY3Rpb24oKTsKKyAgICBqYXZhRG9jTG9jYWxJbnNwZWN0aW9uLlRPUF9MRVZFTF9DTEFTU19PUFRJT05TLlJFUVVJUkVEX1RBR1MgPSAicGFyYW0iOworICAgIGphdmFEb2NMb2NhbEluc3BlY3Rpb24uVE9QX0xFVkVMX0NMQVNTX09QVElPTlMuQUNDRVNTX0pBVkFET0NfUkVRVUlSRURfRk9SID0gInBhY2thZ2UiOworICAgIGphdmFEb2NMb2NhbEluc3BlY3Rpb24uTUVUSE9EX09QVElPTlMuQUNDRVNTX0pBVkFET0NfUkVRVUlSRURfRk9SID0gInBhY2thZ2UiOworICAgIHJldHVybiBuZXcgTG9jYWxJbnNwZWN0aW9uVG9vbFtde2phdmFEb2NMb2NhbEluc3BlY3Rpb259OworICB9CisKKyAgQE92ZXJyaWRlCisgIHByb3RlY3RlZCB2b2lkIHRlYXJEb3duKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgc3VwZXIudGVhckRvd24oKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3QoKSB0aHJvd3MgRXhjZXB0aW9uIHsgZG9BbGxUZXN0cygpOyB9CisKKyAgQE92ZXJyaWRlCisgIHByb3RlY3RlZCBTdHJpbmcgZ2V0QmFzZVBhdGgoKSB7CisgICAgcmV0dXJuICIvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2phdmFkb2NUYWdzIjsKKyAgfQorCit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNpZ2h0L2RhZW1vbi9xdWlja0ZpeC9MYW1iZGEyTWV0aG9kUmVmZXJlbmNlSW5zcGVjdGlvblRlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9jb2RlSW5zaWdodC9kYWVtb24vcXVpY2tGaXgvTGFtYmRhMk1ldGhvZFJlZmVyZW5jZUluc3BlY3Rpb25UZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGZlZDlhOAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9jb2RlSW5zaWdodC9kYWVtb24vcXVpY2tGaXgvTGFtYmRhMk1ldGhvZFJlZmVyZW5jZUluc3BlY3Rpb25UZXN0LmphdmEKQEAgLTAsMCArMSwzNyBAQAorLyoKKyAqIENvcHlyaWdodCAyMDAwLTIwMTIgSmV0QnJhaW5zIHMuci5vLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KK3BhY2thZ2UgY29tLmludGVsbGlqLmNvZGVJbnNpZ2h0LmRhZW1vbi5xdWlja0ZpeDsKKworaW1wb3J0IGNvbS5pbnRlbGxpai5jb2RlSW5zcGVjdGlvbi5MYW1iZGFDYW5CZU1ldGhSZWZlcmVuY2VJbnNwZWN0aW9uOworaW1wb3J0IGNvbS5pbnRlbGxpai5jb2RlSW5zcGVjdGlvbi5Mb2NhbEluc3BlY3Rpb25Ub29sOworCisKK3B1YmxpYyBjbGFzcyBMYW1iZGEyTWV0aG9kUmVmZXJlbmNlSW5zcGVjdGlvblRlc3QgZXh0ZW5kcyBMaWdodFF1aWNrRml4VGVzdENhc2UgeworICBAT3ZlcnJpZGUKKyAgcHJvdGVjdGVkIExvY2FsSW5zcGVjdGlvblRvb2xbXSBjb25maWd1cmVMb2NhbEluc3BlY3Rpb25Ub29scygpIHsKKyAgICByZXR1cm4gbmV3IExvY2FsSW5zcGVjdGlvblRvb2xbXXsKKyAgICAgIG5ldyBMYW1iZGFDYW5CZU1ldGhSZWZlcmVuY2VJbnNwZWN0aW9uKCksCisgICAgfTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3QoKSB0aHJvd3MgRXhjZXB0aW9uIHsgZG9BbGxUZXN0cygpOyB9CisKKyAgQE92ZXJyaWRlCisgIHByb3RlY3RlZCBTdHJpbmcgZ2V0QmFzZVBhdGgoKSB7CisgICAgcmV0dXJuICIvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2xhbWJkYTJtZXRob2RSZWZlcmVuY2UiOworICB9CisKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovY29kZUluc2lnaHQvZGFlbW9uL3F1aWNrRml4L0xpZ2h0UXVpY2tGaXgxNVRlc3RDYXNlLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovY29kZUluc2lnaHQvZGFlbW9uL3F1aWNrRml4L0xpZ2h0UXVpY2tGaXgxNVRlc3RDYXNlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTk3ZTdhZQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9jb2RlSW5zaWdodC9kYWVtb24vcXVpY2tGaXgvTGlnaHRRdWlja0ZpeDE1VGVzdENhc2UuamF2YQpAQCAtMCwwICsxLDIyIEBACisvKgorICogQ29weXJpZ2h0IDIwMDAtMjAxMiBKZXRCcmFpbnMgcy5yLm8uCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworcGFja2FnZSBjb20uaW50ZWxsaWouY29kZUluc2lnaHQuZGFlbW9uLnF1aWNrRml4OworCisvKioKKyAqIEBhdXRob3IgdmVuCisgKi8KK3B1YmxpYyBhYnN0cmFjdCBjbGFzcyBMaWdodFF1aWNrRml4MTVUZXN0Q2FzZSBleHRlbmRzIExpZ2h0UXVpY2tGaXhUZXN0Q2FzZSB7Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovY29kZUluc2lnaHQvZGFlbW9uL3F1aWNrRml4L0xpZ2h0UXVpY2tGaXhBdmFpbGFiaWxpdHlUZXN0Q2FzZS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNpZ2h0L2RhZW1vbi9xdWlja0ZpeC9MaWdodFF1aWNrRml4QXZhaWxhYmlsaXR5VGVzdENhc2UuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OGEzZGFjCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNpZ2h0L2RhZW1vbi9xdWlja0ZpeC9MaWdodFF1aWNrRml4QXZhaWxhYmlsaXR5VGVzdENhc2UuamF2YQpAQCAtMCwwICsxLDE4IEBACitwYWNrYWdlIGNvbS5pbnRlbGxpai5jb2RlSW5zaWdodC5kYWVtb24ucXVpY2tGaXg7CisKK2ltcG9ydCBjb20uaW50ZWxsaWouY29kZUluc2lnaHQuaW50ZW50aW9uLkludGVudGlvbkFjdGlvbjsKKworLyoqCisgKiB0ZXN0cyBjb3JyZXNwb25kaW5nIGludGVudGlvbiBmb3IgYXZhaWxhYmlsaXR5IG9ubHksIGRvZXMgbm90IGludm9rZSBhY3Rpb24KKyAqIEBhdXRob3IgY2RyCisgKi8KK3B1YmxpYyBhYnN0cmFjdCBjbGFzcyBMaWdodFF1aWNrRml4QXZhaWxhYmlsaXR5VGVzdENhc2UgZXh0ZW5kcyBMaWdodFF1aWNrRml4VGVzdENhc2UgeworICBAT3ZlcnJpZGUKKyAgcHJvdGVjdGVkIHZvaWQgZG9BY3Rpb24oZmluYWwgU3RyaW5nIHRleHQsIGZpbmFsIGJvb2xlYW4gYWN0aW9uU2hvdWxkQmVBdmFpbGFibGUsIGZpbmFsIFN0cmluZyB0ZXN0RnVsbFBhdGgsIGZpbmFsIFN0cmluZyB0ZXN0TmFtZSkKKyAgICB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBJbnRlbnRpb25BY3Rpb24gYWN0aW9uID0gZmluZEFjdGlvbldpdGhUZXh0KHRleHQpOworICAgIGFzc2VydFRydWUoIkFjdGlvbiB3aXRoIHRleHQgJyIgKyB0ZXh0ICsgIicgaXMgIiArIChhY3Rpb24gPT0gbnVsbCA/ICJub3QgIiA6IiIpICsKKyAgICAgICAgICAgICAgICJhdmFpbGFibGUgaW4gdGVzdCAiICsgdGVzdEZ1bGxQYXRoLAorICAgICAgKGFjdGlvbiAhPSBudWxsKSA9PSBhY3Rpb25TaG91bGRCZUF2YWlsYWJsZSk7CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9jb2RlSW5zaWdodC9kYWVtb24vcXVpY2tGaXgvTWFrZVR5cGVHZW5lcmljVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNpZ2h0L2RhZW1vbi9xdWlja0ZpeC9NYWtlVHlwZUdlbmVyaWNUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzVkOWNhYgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9jb2RlSW5zaWdodC9kYWVtb24vcXVpY2tGaXgvTWFrZVR5cGVHZW5lcmljVGVzdC5qYXZhCkBAIC0wLDAgKzEsMjYgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwMC0yMDEyIEpldEJyYWlucyBzLnIuby4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCitwYWNrYWdlIGNvbS5pbnRlbGxpai5jb2RlSW5zaWdodC5kYWVtb24ucXVpY2tGaXg7CitpbXBvcnQgY29tLmludGVsbGlqLmNvZGVJbnNpZ2h0LmRhZW1vbi5MaWdodEludGVudGlvbkFjdGlvblRlc3RDYXNlOworCitwdWJsaWMgY2xhc3MgTWFrZVR5cGVHZW5lcmljVGVzdCBleHRlbmRzIExpZ2h0SW50ZW50aW9uQWN0aW9uVGVzdENhc2UgeworICBwdWJsaWMgdm9pZCB0ZXN0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7IGRvQWxsVGVzdHMoKTsgfQorCisgIEBPdmVycmlkZQorICBwcm90ZWN0ZWQgU3RyaW5nIGdldEJhc2VQYXRoKCkgeworICAgIHJldHVybiAiL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9tYWtlVHlwZUdlbmVyaWMiOworICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovY29kZUluc2lnaHQvZGFlbW9uL3F1aWNrRml4L01ldGhvZFJldHVybkJvb2xlYW5UZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovY29kZUluc2lnaHQvZGFlbW9uL3F1aWNrRml4L01ldGhvZFJldHVybkJvb2xlYW5UZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODRlOWMzMwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9jb2RlSW5zaWdodC9kYWVtb24vcXVpY2tGaXgvTWV0aG9kUmV0dXJuQm9vbGVhblRlc3QuamF2YQpAQCAtMCwwICsxLDEzIEBACitwYWNrYWdlIGNvbS5pbnRlbGxpai5jb2RlSW5zaWdodC5kYWVtb24ucXVpY2tGaXg7CisKK3B1YmxpYyBjbGFzcyBNZXRob2RSZXR1cm5Cb29sZWFuVGVzdCBleHRlbmRzIExpZ2h0UXVpY2tGaXhUZXN0Q2FzZSB7CisKKyAgcHVibGljIHZvaWQgdGVzdCgpIHRocm93cyBFeGNlcHRpb24geyAKKyAgICBkb0FsbFRlc3RzKCk7CisgIH0KKworICBAT3ZlcnJpZGUKKyAgcHJvdGVjdGVkIFN0cmluZyBnZXRCYXNlUGF0aCgpIHsKKyAgICByZXR1cm4gIi9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvbWV0aG9kUmV0dXJuQm9vbGVhbkZpeCI7CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9jb2RlSW5zaWdodC9kYWVtb24vcXVpY2tGaXgvTWV0aG9kUmV0dXJuVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNpZ2h0L2RhZW1vbi9xdWlja0ZpeC9NZXRob2RSZXR1cm5UZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGQ3NmYzNwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9jb2RlSW5zaWdodC9kYWVtb24vcXVpY2tGaXgvTWV0aG9kUmV0dXJuVGVzdC5qYXZhCkBAIC0wLDAgKzEsMTYgQEAKKworcGFja2FnZSBjb20uaW50ZWxsaWouY29kZUluc2lnaHQuZGFlbW9uLnF1aWNrRml4OworCisKKworcHVibGljIGNsYXNzIE1ldGhvZFJldHVyblRlc3QgZXh0ZW5kcyBMaWdodFF1aWNrRml4MTVUZXN0Q2FzZSB7CisKKyAgcHVibGljIHZvaWQgdGVzdCgpIHRocm93cyBFeGNlcHRpb24geyBkb0FsbFRlc3RzKCk7IH0KKworICBAT3ZlcnJpZGUKKyAgcHJvdGVjdGVkIFN0cmluZyBnZXRCYXNlUGF0aCgpIHsKKyAgICByZXR1cm4gIi9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvbWV0aG9kUmV0dXJuIjsKKyAgfQorCit9CisKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9jb2RlSW5zaWdodC9kYWVtb24vcXVpY2tGaXgvTWV0aG9kVGhyb3dzVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNpZ2h0L2RhZW1vbi9xdWlja0ZpeC9NZXRob2RUaHJvd3NUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTc5ZmJhZQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9jb2RlSW5zaWdodC9kYWVtb24vcXVpY2tGaXgvTWV0aG9kVGhyb3dzVGVzdC5qYXZhCkBAIC0wLDAgKzEsMTcgQEAKKworcGFja2FnZSBjb20uaW50ZWxsaWouY29kZUluc2lnaHQuZGFlbW9uLnF1aWNrRml4OworCitpbXBvcnQgY29tLmludGVsbGlqLmNvZGVJbnNwZWN0aW9uLnVubmVlZGVkVGhyb3dzLlJlZHVuZGFudFRocm93c0RlY2xhcmF0aW9uOworCisKK3B1YmxpYyBjbGFzcyBNZXRob2RUaHJvd3NUZXN0IGV4dGVuZHMgTGlnaHRRdWlja0ZpeFRlc3RDYXNlIHsKKworICBwdWJsaWMgdm9pZCB0ZXN0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7IGVuYWJsZUluc3BlY3Rpb25Ub29sKG5ldyBSZWR1bmRhbnRUaHJvd3NEZWNsYXJhdGlvbigpKTsgZG9BbGxUZXN0cygpOyB9CisKKyAgQE92ZXJyaWRlCisgIHByb3RlY3RlZCBTdHJpbmcgZ2V0QmFzZVBhdGgoKSB7CisgICAgcmV0dXJuICIvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L21ldGhvZFRocm93cyI7CisgIH0KKworfQorCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovY29kZUluc2lnaHQvZGFlbW9uL3F1aWNrRml4L01vZGlmaWVyVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNpZ2h0L2RhZW1vbi9xdWlja0ZpeC9Nb2RpZmllclRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMGVhZWI4Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNpZ2h0L2RhZW1vbi9xdWlja0ZpeC9Nb2RpZmllclRlc3QuamF2YQpAQCAtMCwwICsxLDEwIEBACitwYWNrYWdlIGNvbS5pbnRlbGxpai5jb2RlSW5zaWdodC5kYWVtb24ucXVpY2tGaXg7CisKK3B1YmxpYyBjbGFzcyBNb2RpZmllclRlc3QgZXh0ZW5kcyBMaWdodFF1aWNrRml4VGVzdENhc2UgeworICBwdWJsaWMgdm9pZCB0ZXN0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7IGRvQWxsVGVzdHMoKTsgfQorCisgIEBPdmVycmlkZQorICBwcm90ZWN0ZWQgU3RyaW5nIGdldEJhc2VQYXRoKCkgeworICAgIHJldHVybiAiL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9tb2RpZmllciI7CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9jb2RlSW5zaWdodC9kYWVtb24vcXVpY2tGaXgvTW92ZUJvdW5kQ2xhc3NUb0Zyb250VGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNpZ2h0L2RhZW1vbi9xdWlja0ZpeC9Nb3ZlQm91bmRDbGFzc1RvRnJvbnRUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjE1ZDI0YQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9jb2RlSW5zaWdodC9kYWVtb24vcXVpY2tGaXgvTW92ZUJvdW5kQ2xhc3NUb0Zyb250VGVzdC5qYXZhCkBAIC0wLDAgKzEsMTMgQEAKK3BhY2thZ2UgY29tLmludGVsbGlqLmNvZGVJbnNpZ2h0LmRhZW1vbi5xdWlja0ZpeDsKKworcHVibGljIGNsYXNzIE1vdmVCb3VuZENsYXNzVG9Gcm9udFRlc3QgZXh0ZW5kcyBMaWdodFF1aWNrRml4VGVzdENhc2UgeworICBwdWJsaWMgdm9pZCB0ZXN0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9BbGxUZXN0cygpOworICB9CisKKyAgQE92ZXJyaWRlCisgIHByb3RlY3RlZCBTdHJpbmcgZ2V0QmFzZVBhdGgoKSB7CisgICAgcmV0dXJuICIvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L21vdmVCb3VuZENsYXNzVG9Gcm9udCI7CisgIH0KK30KKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNpZ2h0L2RhZW1vbi9xdWlja0ZpeC9Nb3ZlQ2F0Y2hVcFRlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9jb2RlSW5zaWdodC9kYWVtb24vcXVpY2tGaXgvTW92ZUNhdGNoVXBUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2MxNWFiMQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9jb2RlSW5zaWdodC9kYWVtb24vcXVpY2tGaXgvTW92ZUNhdGNoVXBUZXN0LmphdmEKQEAgLTAsMCArMSwxNiBAQAorCitwYWNrYWdlIGNvbS5pbnRlbGxpai5jb2RlSW5zaWdodC5kYWVtb24ucXVpY2tGaXg7CisKK3B1YmxpYyBjbGFzcyBNb3ZlQ2F0Y2hVcFRlc3QgZXh0ZW5kcyBMaWdodFF1aWNrRml4VGVzdENhc2UgeworCisgIHB1YmxpYyB2b2lkIHRlc3QoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb0FsbFRlc3RzKCk7CisgIH0KKworICBAT3ZlcnJpZGUKKyAgcHJvdGVjdGVkIFN0cmluZyBnZXRCYXNlUGF0aCgpIHsKKyAgICByZXR1cm4gIi9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvbW92ZUNhdGNoVXAiOworICB9CisKK30KKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNpZ2h0L2RhZW1vbi9xdWlja0ZpeC9OZWdhdGlvbkJyb2FkU2NvcGVUZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovY29kZUluc2lnaHQvZGFlbW9uL3F1aWNrRml4L05lZ2F0aW9uQnJvYWRTY29wZVRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYmU3NTExCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNpZ2h0L2RhZW1vbi9xdWlja0ZpeC9OZWdhdGlvbkJyb2FkU2NvcGVUZXN0LmphdmEKQEAgLTAsMCArMSwxMSBAQAorcGFja2FnZSBjb20uaW50ZWxsaWouY29kZUluc2lnaHQuZGFlbW9uLnF1aWNrRml4OworCitwdWJsaWMgY2xhc3MgTmVnYXRpb25Ccm9hZFNjb3BlVGVzdCBleHRlbmRzIExpZ2h0UXVpY2tGaXhUZXN0Q2FzZSB7CisgIHB1YmxpYyB2b2lkIHRlc3QoKSB0aHJvd3MgRXhjZXB0aW9uIHsgZG9BbGxUZXN0cygpOyB9CisKKyAgQE92ZXJyaWRlCisgIHByb3RlY3RlZCBTdHJpbmcgZ2V0QmFzZVBhdGgoKSB7CisgICAgcmV0dXJuICIvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L25lZ2F0aW9uQnJvYWRTY29wZSI7CisgIH0KK30KKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNpZ2h0L2RhZW1vbi9xdWlja0ZpeC9PcmRlckVudHJ5VGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNpZ2h0L2RhZW1vbi9xdWlja0ZpeC9PcmRlckVudHJ5VGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZiZDY3MWIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovY29kZUluc2lnaHQvZGFlbW9uL3F1aWNrRml4L09yZGVyRW50cnlUZXN0LmphdmEKQEAgLTAsMCArMSwxNjMgQEAKK3BhY2thZ2UgY29tLmludGVsbGlqLmNvZGVJbnNpZ2h0LmRhZW1vbi5xdWlja0ZpeDsKKworaW1wb3J0IGNvbS5pbnRlbGxpai5jb2RlSW5zaWdodC5kYWVtb24uRGFlbW9uQW5hbHl6ZXJUZXN0Q2FzZTsKK2ltcG9ydCBjb20uaW50ZWxsaWouY29kZUluc2lnaHQuZGFlbW9uLmltcGwuSGlnaGxpZ2h0SW5mbzsKK2ltcG9ydCBjb20uaW50ZWxsaWouY29kZUluc2lnaHQuaW50ZW50aW9uLkludGVudGlvbkFjdGlvbjsKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS5hcHBsaWNhdGlvbi5BcHBsaWNhdGlvbk1hbmFnZXI7CitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkuYXBwbGljYXRpb24uZXguUGF0aE1hbmFnZXJFeDsKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS5jb21wb25lbnRzLlByb2plY3RDb21wb25lbnQ7CitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkubW9kdWxlLk1vZHVsZTsKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS5tb2R1bGUuTW9kdWxlTWFuYWdlcjsKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS5tb2R1bGUuaW1wbC5Nb2R1bGVNYW5hZ2VySW1wbDsKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS5wcm9qZWN0LmV4LlByb2plY3RNYW5hZ2VyRXg7CitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkucm9vdHMuTW9kaWZpYWJsZVJvb3RNb2RlbDsKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS5yb290cy5Nb2R1bGVSb290TWFuYWdlcjsKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS5yb290cy5Nb2R1bGVSb290TW9kaWZpY2F0aW9uVXRpbDsKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS5yb290cy5PcmRlckVudHJ5OworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLnV0aWwuUGFpcjsKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS51dGlsLmlvLkZpbGVVdGlsOworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLnZmcy5WaXJ0dWFsRmlsZTsKK2ltcG9ydCBjb20uaW50ZWxsaWoudGVzdEZyYW1ld29yay5Qc2lUZXN0VXRpbDsKK2ltcG9ydCBvcmcuamV0YnJhaW5zLmFubm90YXRpb25zLk5vbk5sczsKKworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCisvKioKKyAqIEBhdXRob3IgY2RyCisgKi8KK3B1YmxpYyBjbGFzcyBPcmRlckVudHJ5VGVzdCBleHRlbmRzIERhZW1vbkFuYWx5emVyVGVzdENhc2UgeworICBATm9uTmxzIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBCQVNFX1BBVEggPSAiL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9vcmRlckVudHJ5LyI7CisKKyAgQE92ZXJyaWRlCisgIHByb3RlY3RlZCB2b2lkIHNldFVwUHJvamVjdCgpIHRocm93cyBFeGNlcHRpb24geworICAgIGZpbmFsIFN0cmluZyByb290ID0gUGF0aE1hbmFnZXJFeC5nZXRUZXN0RGF0YVBhdGgoKSArIEJBU0VfUEFUSDsKKworICAgIFZpcnR1YWxGaWxlIHRlbXBQcm9qZWN0Um9vdERpciA9CisgICAgICBQc2lUZXN0VXRpbC5jcmVhdGVUZXN0UHJvamVjdFN0cnVjdHVyZShnZXRUZXN0TmFtZSh0cnVlKSwgbnVsbCwgRmlsZVV0aWwudG9TeXN0ZW1JbmRlcGVuZGVudE5hbWUocm9vdCksIG15RmlsZXNUb0RlbGV0ZSwgZmFsc2UpOworCisgICAgVmlydHVhbEZpbGUgcHJvamVjdEZpbGUgPSB0ZW1wUHJvamVjdFJvb3REaXIuZmluZENoaWxkKCJvcmRlckVudHJ5LmlwciIpOworCisgICAgbXlQcm9qZWN0ID0gUHJvamVjdE1hbmFnZXJFeC5nZXRJbnN0YW5jZUV4KCkubG9hZFByb2plY3QocHJvamVjdEZpbGUuZ2V0UGF0aCgpKTsKKyAgICBQcm9qZWN0TWFuYWdlckV4LmdldEluc3RhbmNlRXgoKS5vcGVuVGVzdFByb2plY3QobXlQcm9qZWN0KTsKKyAgICBNb2R1bGVNYW5hZ2VySW1wbCBtbSA9IChNb2R1bGVNYW5hZ2VySW1wbClNb2R1bGVNYW5hZ2VyLmdldEluc3RhbmNlKG15UHJvamVjdCk7CisgICAgbW0ucHJvamVjdE9wZW5lZCgpOworICAgIHNldFVwSmRrKCk7CisgICAgbXlNb2R1bGUgPSBNb2R1bGVNYW5hZ2VyLmdldEluc3RhbmNlKGdldFByb2plY3QoKSkuZ2V0TW9kdWxlcygpWzBdOworICB9CisKKyAgQE92ZXJyaWRlCisgIHByb3RlY3RlZCB2b2lkIHRlYXJEb3duKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgcmVtb3ZlTGlicygpOworICAgICgoUHJvamVjdENvbXBvbmVudClNb2R1bGVNYW5hZ2VyLmdldEluc3RhbmNlKG15UHJvamVjdCkpLnByb2plY3RDbG9zZWQoKTsKKyAgICBzdXBlci50ZWFyRG93bigpOworICB9CisKKyAgcHJpdmF0ZSB2b2lkIGRvVGVzdChTdHJpbmcgZmlsZU5hbWUpIHRocm93cyBFeGNlcHRpb24geworICAgIFN0cmluZyB0ZXN0RnVsbFBhdGggPSBCQVNFX1BBVEggKyBmaWxlTmFtZTsKKworICAgIFZpcnR1YWxGaWxlIHJvb3QgPSBNb2R1bGVSb290TWFuYWdlci5nZXRJbnN0YW5jZShteU1vZHVsZSkuZ2V0Q29udGVudFJvb3RzKClbMF0uZ2V0UGFyZW50KCk7CisgICAgVmlydHVhbEZpbGUgdmlydHVhbEZpbGUgPSByb290LmZpbmRGaWxlQnlSZWxhdGl2ZVBhdGgoZmlsZU5hbWUpOworICAgIGNvbmZpZ3VyZUJ5RXhpc3RpbmdGaWxlKHZpcnR1YWxGaWxlKTsKKyAgICBQYWlyPFN0cmluZywgQm9vbGVhbj4gcGFpciA9IExpZ2h0UXVpY2tGaXhUZXN0Q2FzZS5wYXJzZUFjdGlvbkhpbnQoZ2V0RmlsZSgpLCBnZXRGaWxlKCkuZ2V0VGV4dCgpKTsKKyAgICBmaW5hbCBTdHJpbmcgdGV4dCA9IHBhaXIuZ2V0Rmlyc3QoKTsKKyAgICBmaW5hbCBib29sZWFuIGFjdGlvblNob3VsZEJlQXZhaWxhYmxlID0gcGFpci5nZXRTZWNvbmQoKS5ib29sZWFuVmFsdWUoKTsKKyAgICBDb2xsZWN0aW9uPEhpZ2hsaWdodEluZm8+IGluZm9zQmVmb3JlID0gaGlnaGxpZ2h0RXJyb3JzKCk7CisgICAgZmluYWwgSW50ZW50aW9uQWN0aW9uIGFjdGlvbiA9IGZpbmRBY3Rpb25XaXRoVGV4dCh0ZXh0LCBpbmZvc0JlZm9yZSk7CisKKyAgICBpZiAoYWN0aW9uID09IG51bGwpIHsKKyAgICAgIGlmIChhY3Rpb25TaG91bGRCZUF2YWlsYWJsZSkgeworICAgICAgICBmYWlsKCJBY3Rpb24gd2l0aCB0ZXh0ICciICsgdGV4dCArICInIGlzIG5vdCBhdmFpbGFibGUgaW4gdGVzdCAiICsgdGVzdEZ1bGxQYXRoICsgIi4iICsKKyAgICAgICAgICAgICAiXG5BdmFpbGFibGUgYWN0aW9ucyBhcmU6ICIgKyBMaWdodFF1aWNrRml4VGVzdENhc2UuZ2V0QXZhaWxhYmxlQWN0aW9ucyhnZXRFZGl0b3IoKSwgZ2V0RmlsZSgpKQorICAgICAgICAgICAgICsgIlxuSW5mb3MgYXJlOiAiICsgaW5mb3NCZWZvcmUKKyAgICAgICAgKTsKKyAgICAgIH0KKyAgICB9CisgICAgZWxzZSB7CisgICAgICBpZiAoIWFjdGlvblNob3VsZEJlQXZhaWxhYmxlKSB7CisgICAgICAgIGZhaWwoIkFjdGlvbiAnIiArIHRleHQgKyAiJyBpcyBhdmFpbGFibGUgaW4gdGVzdCAiICsgdGVzdEZ1bGxQYXRoKTsKKyAgICAgIH0KKyAgICAgIEFwcGxpY2F0aW9uTWFuYWdlci5nZXRBcHBsaWNhdGlvbigpLnJ1bldyaXRlQWN0aW9uKG5ldyBSdW5uYWJsZSgpIHsKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKKyAgICAgICAgICBhY3Rpb24uaW52b2tlKGdldFByb2plY3QoKSwgZ2V0RWRpdG9yKCksIGdldEZpbGUoKSk7CisgICAgICAgIH0KKyAgICAgIH0pOworCisgICAgICBDb2xsZWN0aW9uPEhpZ2hsaWdodEluZm8+IGluZm9zQWZ0ZXIgPSBoaWdobGlnaHRFcnJvcnMoKTsKKyAgICAgIGZpbmFsIEludGVudGlvbkFjdGlvbiBhZnRlckFjdGlvbiA9IGZpbmRBY3Rpb25XaXRoVGV4dCh0ZXh0LCBpbmZvc0FmdGVyKTsKKyAgICAgIGlmIChhZnRlckFjdGlvbiAhPSBudWxsKSB7CisgICAgICAgIGZhaWwoIkFjdGlvbiAnIiArIHRleHQgKyAiJyBpcyBzdGlsbCBhdmFpbGFibGUgYWZ0ZXIgaXRzIGludm9jYXRpb24gaW4gdGVzdCAiICsgdGVzdEZ1bGxQYXRoKTsKKyAgICAgIH0KKyAgICAgIGFzc2VydEVxdWFscyhpbmZvc0JlZm9yZS5zaXplKCkgLSAxLCBpbmZvc0FmdGVyLnNpemUoKSk7CisgICAgfQorICB9CisKKyAgcHJpdmF0ZSBJbnRlbnRpb25BY3Rpb24gZmluZEFjdGlvbldpdGhUZXh0KGZpbmFsIFN0cmluZyBhY3Rpb25UZXh0LCBmaW5hbCBDb2xsZWN0aW9uPEhpZ2hsaWdodEluZm8+IGluZm9zKSB7CisgICAgTGlzdDxJbnRlbnRpb25BY3Rpb24+IGFjdGlvbnMgPSBMaWdodFF1aWNrRml4VGVzdENhc2UuZ2V0QXZhaWxhYmxlQWN0aW9ucyhnZXRFZGl0b3IoKSwgZ2V0RmlsZSgpKTsKKyAgICByZXR1cm4gTGlnaHRRdWlja0ZpeFRlc3RDYXNlLmZpbmRBY3Rpb25XaXRoVGV4dChhY3Rpb25zLCBhY3Rpb25UZXh0KTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RBZGREZXBlbmRlbmN5KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KCJCL3NyYy95L0FkZERlcGVuZGVuY3kuamF2YSIpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEFkZExpYnJhcnkoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoIkIvc3JjL3kvQWRkTGlicmFyeS5qYXZhIik7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0QWRkQ2lyY3VsYXJEZXBlbmRlbmN5KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZmluYWwgTW9kdWxlIGEgPSBNb2R1bGVNYW5hZ2VyLmdldEluc3RhbmNlKGdldFByb2plY3QoKSkuZmluZE1vZHVsZUJ5TmFtZSgiQSIpOworICAgIGZpbmFsIE1vZHVsZSBiID0gTW9kdWxlTWFuYWdlci5nZXRJbnN0YW5jZShnZXRQcm9qZWN0KCkpLmZpbmRNb2R1bGVCeU5hbWUoIkIiKTsKKyAgICBNb2R1bGVSb290TW9kaWZpY2F0aW9uVXRpbC5hZGREZXBlbmRlbmN5KGEsIGIpOworCisgICAgdHJ5IHsKKyAgICAgIGRvVGVzdCgiQi9zcmMveS9BZGREZXBlbmRlbmN5LmphdmEiKTsKKyAgICAgIGZhaWwoInVzZXIgc2hvdWxkIGhhdmUgYmVlbiB3YXJuZWQiKTsKKyAgICB9CisgICAgY2F0Y2ggKFJ1bnRpbWVFeGNlcHRpb24gZSkgeworICAgICAgZmluYWwgU3RyaW5nIGV4cGVjdGVkID0gIkFkZGluZyBkZXBlbmRlbmN5IG9uIG1vZHVsZSAnIiArIGEuZ2V0TmFtZSgpICsgIiciICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgd2lsbCBpbnRyb2R1Y2UgY2lyY3VsYXIgZGVwZW5kZW5jeSBiZXR3ZWVuIG1vZHVsZXMgJyIgKyBhLmdldE5hbWUoKSArICInIGFuZCAnIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiLmdldE5hbWUoKSArICInLlxuIiArICJBZGQgZGVwZW5kZW5jeSBhbnl3YXk/IjsKKyAgICAgIFN0cmluZyBtZXNzYWdlID0gZS5nZXRNZXNzYWdlKCk7CisgICAgICBhc3NlcnRFcXVhbHMoZXhwZWN0ZWQsIG1lc3NhZ2UpOworICAgIH0KKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RBZGRKdW5pdCgpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdCgiQS9zcmMveC9Eb1Rlc3QuamF2YSIpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEFkZEp1bml0NCgpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdCgiQS9zcmMveC9Eb1Rlc3Q0LmphdmEiKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RBZGRKdW5pdDRpbkp1bml0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KCJBL3NyYy94L0RvVGVzdDRqdW5pdC5qYXZhIik7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0RXhpc3RpbmdKdW5pdCgpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdCgiQi9zcmMveS9BZGRFeGlzdGluZ0p1bml0LmphdmEiKTsKKyAgfQorCisgIHByaXZhdGUgdm9pZCByZW1vdmVMaWJzKCkgeworICAgIEFwcGxpY2F0aW9uTWFuYWdlci5nZXRBcHBsaWNhdGlvbigpLnJ1bldyaXRlQWN0aW9uKG5ldyBSdW5uYWJsZSgpIHsKKyAgICAgIEBPdmVycmlkZQorICAgICAgcHVibGljIHZvaWQgcnVuKCkgeworICAgICAgICB0cnkgeworICAgICAgICAgIGZvciAoTW9kdWxlIG1vZHVsZSA6IE1vZHVsZU1hbmFnZXIuZ2V0SW5zdGFuY2UoZ2V0UHJvamVjdCgpKS5nZXRNb2R1bGVzKCkpIHsKKyAgICAgICAgICAgIE1vZHVsZVJvb3RNYW5hZ2VyIHJvb3RNYW5hZ2VyID0gTW9kdWxlUm9vdE1hbmFnZXIuZ2V0SW5zdGFuY2UobW9kdWxlKTsKKyAgICAgICAgICAgIE1vZGlmaWFibGVSb290TW9kZWwgbW9kZWwgPSByb290TWFuYWdlci5nZXRNb2RpZmlhYmxlTW9kZWwoKTsKKyAgICAgICAgICAgIGZvciAoT3JkZXJFbnRyeSBvcmRlckVudHJ5IDogbW9kZWwuZ2V0T3JkZXJFbnRyaWVzKCkpIHsKKyAgICAgICAgICAgICAgbW9kZWwucmVtb3ZlT3JkZXJFbnRyeShvcmRlckVudHJ5KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1vZGVsLmNvbW1pdCgpOworICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBjYXRjaCAoVGhyb3dhYmxlIGUpIHsKKyAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOyAgLy8gd2hlbiBydW5uaW5nIHRlc3QgZnJvbSB3aXRoaW4gSURFQSBpdCB3b3VsZCBmYWlsIGJlY2F1c2UganVuaXQuamFyIGNhY2hlIGlzIGxvY2tlZCBieSBob3N0IElERUEgaW5zdGFuY2UKKyAgICAgICAgfQorICAgICAgfQorICAgIH0pOworICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovY29kZUluc2lnaHQvZGFlbW9uL3F1aWNrRml4L092ZXJyaWRlTWV0aG9kVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNpZ2h0L2RhZW1vbi9xdWlja0ZpeC9PdmVycmlkZU1ldGhvZFRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYjI3ZWUwCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNpZ2h0L2RhZW1vbi9xdWlja0ZpeC9PdmVycmlkZU1ldGhvZFRlc3QuamF2YQpAQCAtMCwwICsxLDMxIEBACisKKy8qCisgKiBDb3B5cmlnaHQgMjAwMC0yMDEyIEpldEJyYWlucyBzLnIuby4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCitwYWNrYWdlIGNvbS5pbnRlbGxpai5jb2RlSW5zaWdodC5kYWVtb24ucXVpY2tGaXg7CisKK3B1YmxpYyBjbGFzcyBPdmVycmlkZU1ldGhvZFRlc3QgZXh0ZW5kcyBMaWdodFF1aWNrRml4MTVUZXN0Q2FzZSB7CisKKyAgcHVibGljIHZvaWQgdGVzdCgpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvQWxsVGVzdHMoKTsKKyAgfQorCisgIEBPdmVycmlkZQorICBwcm90ZWN0ZWQgU3RyaW5nIGdldEJhc2VQYXRoKCkgeworICAgIHJldHVybiAiL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9vdmVycmlkZU1ldGhvZCI7CisgIH0KKworfQorCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovY29kZUluc2lnaHQvZGFlbW9uL3F1aWNrRml4L1Blcm11dGVBcmd1bWVudHNUZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovY29kZUluc2lnaHQvZGFlbW9uL3F1aWNrRml4L1Blcm11dGVBcmd1bWVudHNUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODA5M2FhOQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9jb2RlSW5zaWdodC9kYWVtb24vcXVpY2tGaXgvUGVybXV0ZUFyZ3VtZW50c1Rlc3QuamF2YQpAQCAtMCwwICsxLDEyIEBACitwYWNrYWdlIGNvbS5pbnRlbGxpai5jb2RlSW5zaWdodC5kYWVtb24ucXVpY2tGaXg7CisKK3B1YmxpYyBjbGFzcyBQZXJtdXRlQXJndW1lbnRzVGVzdCBleHRlbmRzIExpZ2h0UXVpY2tGaXhUZXN0Q2FzZSB7CisKKyAgcHVibGljIHZvaWQgdGVzdCgpIHRocm93cyBFeGNlcHRpb24geyBkb0FsbFRlc3RzKCk7IH0KKworICBAT3ZlcnJpZGUKKyAgcHJvdGVjdGVkIFN0cmluZyBnZXRCYXNlUGF0aCgpIHsKKyAgICByZXR1cm4gIi9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvcGVybXV0ZUFyZ3VtZW50cyI7CisgIH0KKworfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNpZ2h0L2RhZW1vbi9xdWlja0ZpeC9QdWxsT3ZlcnJpZGVNZXRob2RVcEZpeFRlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9jb2RlSW5zaWdodC9kYWVtb24vcXVpY2tGaXgvUHVsbE92ZXJyaWRlTWV0aG9kVXBGaXhUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTc1NGRiNwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9jb2RlSW5zaWdodC9kYWVtb24vcXVpY2tGaXgvUHVsbE92ZXJyaWRlTWV0aG9kVXBGaXhUZXN0LmphdmEKQEAgLTAsMCArMSw1OSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDAwLTIwMTEgSmV0QnJhaW5zIHMuci5vLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KK3BhY2thZ2UgY29tLmludGVsbGlqLmNvZGVJbnNpZ2h0LmRhZW1vbi5xdWlja0ZpeDsKKworaW1wb3J0IGNvbS5pbnRlbGxpai5jb2RlSW5zaWdodC5pbnRlbnRpb24uSW50ZW50aW9uQWN0aW9uOworCitwdWJsaWMgY2xhc3MgUHVsbE92ZXJyaWRlTWV0aG9kVXBGaXhUZXN0IGV4dGVuZHMgTGlnaHRRdWlja0ZpeFRlc3RDYXNlIHsKKyAgcHVibGljIHZvaWQgdGVzdDEoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1NpbmdsZVRlc3QoIjEuamF2YSIpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdDIoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1NpbmdsZVRlc3QoIjIuamF2YSIpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdDMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1NpbmdsZVRlc3QoIjMuamF2YSIpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdDQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1NpbmdsZVRlc3QoIjQuamF2YSIpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdDYoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1NpbmdsZVRlc3QoIjYuamF2YSIpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFJlZmFjdG9yaW5nSW50ZW50aW9uc0F2YWlsYWJsZSgpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdEFjdGlvbkF2YWlsYWJsZSg1LCAiUHVsbCBtZW1iZXJzIHVwIik7CisgICAgZG9UZXN0QWN0aW9uQXZhaWxhYmxlKDUsICJFeHRyYWN0IGludGVyZmFjZSIpOworICAgIGRvVGVzdEFjdGlvbkF2YWlsYWJsZSg1LCAiRXh0cmFjdCBzdXBlcmNsYXNzIik7CisgIH0KKworICBwcml2YXRlIHZvaWQgZG9UZXN0QWN0aW9uQXZhaWxhYmxlKGZpbmFsIGludCBzdWZmaXgsIGZpbmFsIFN0cmluZyBhY3Rpb25UZXh0KSB7CisgICAgZmluYWwgU3RyaW5nIHRlc3RGdWxsUGF0aCA9IGdldEJhc2VQYXRoKCkgKyAiL2JlZm9yZSIgKyBzdWZmaXggKyAiLmphdmEiOworICAgIGNvbmZpZ3VyZUJ5RmlsZSh0ZXN0RnVsbFBhdGgpOworICAgIGRvSGlnaGxpZ2h0aW5nKCk7CisgICAgZmluYWwgSW50ZW50aW9uQWN0aW9uIGFjdGlvbiA9IGZpbmRBY3Rpb25XaXRoVGV4dChhY3Rpb25UZXh0KTsKKyAgICBhc3NlcnROb3ROdWxsKGFjdGlvbik7CisgIH0KKworICBAT3ZlcnJpZGUKKyAgcHJvdGVjdGVkIFN0cmluZyBnZXRCYXNlUGF0aCgpIHsKKyAgICByZXR1cm4gIi9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvcHVsbFVwIjsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNpZ2h0L2RhZW1vbi9xdWlja0ZpeC9QdXNoQ29uZGl0aW9uSW5DYWxsVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNpZ2h0L2RhZW1vbi9xdWlja0ZpeC9QdXNoQ29uZGl0aW9uSW5DYWxsVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI4MGQ0YTkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovY29kZUluc2lnaHQvZGFlbW9uL3F1aWNrRml4L1B1c2hDb25kaXRpb25JbkNhbGxUZXN0LmphdmEKQEAgLTAsMCArMSwyNSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDAwLTIwMTIgSmV0QnJhaW5zIHMuci5vLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KK3BhY2thZ2UgY29tLmludGVsbGlqLmNvZGVJbnNpZ2h0LmRhZW1vbi5xdWlja0ZpeDsKKworcHVibGljIGNsYXNzIFB1c2hDb25kaXRpb25JbkNhbGxUZXN0IGV4dGVuZHMgTGlnaHRRdWlja0ZpeFRlc3RDYXNleworICBwdWJsaWMgdm9pZCB0ZXN0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7IGRvQWxsVGVzdHMoKTsgfQorCisgIEBPdmVycmlkZQorICBwcm90ZWN0ZWQgU3RyaW5nIGdldEJhc2VQYXRoKCkgeworICAgIHJldHVybiAiL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9wdXNoQ29uZGl0aW9uSW5DYWxsIjsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNpZ2h0L2RhZW1vbi9xdWlja0ZpeC9RdWFsaWZ5VGhpc0FyZ3VtZW50Rml4VGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNpZ2h0L2RhZW1vbi9xdWlja0ZpeC9RdWFsaWZ5VGhpc0FyZ3VtZW50Rml4VGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM5MmNiMWYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovY29kZUluc2lnaHQvZGFlbW9uL3F1aWNrRml4L1F1YWxpZnlUaGlzQXJndW1lbnRGaXhUZXN0LmphdmEKQEAgLTAsMCArMSwyNyBAQAorLyoKKyAqIENvcHlyaWdodCAyMDAwLTIwMTEgSmV0QnJhaW5zIHMuci5vLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KK3BhY2thZ2UgY29tLmludGVsbGlqLmNvZGVJbnNpZ2h0LmRhZW1vbi5xdWlja0ZpeDsKKworcHVibGljIGNsYXNzIFF1YWxpZnlUaGlzQXJndW1lbnRGaXhUZXN0IGV4dGVuZHMgTGlnaHRRdWlja0ZpeFRlc3RDYXNlIHsKKworICBwdWJsaWMgdm9pZCB0ZXN0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7IGRvQWxsVGVzdHMoKTsgfQorCisgIEBPdmVycmlkZQorICBwcm90ZWN0ZWQgU3RyaW5nIGdldEJhc2VQYXRoKCkgeworICAgIHJldHVybiAiL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9xdWFsaWZ5VGhpcyI7CisgIH0KK30KKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNpZ2h0L2RhZW1vbi9xdWlja0ZpeC9RdWFsaWZ5V2l0aFRoaXNGaXhUZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovY29kZUluc2lnaHQvZGFlbW9uL3F1aWNrRml4L1F1YWxpZnlXaXRoVGhpc0ZpeFRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZThkMmVkCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNpZ2h0L2RhZW1vbi9xdWlja0ZpeC9RdWFsaWZ5V2l0aFRoaXNGaXhUZXN0LmphdmEKQEAgLTAsMCArMSwyOSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDAwLTIwMTEgSmV0QnJhaW5zIHMuci5vLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KK3BhY2thZ2UgY29tLmludGVsbGlqLmNvZGVJbnNpZ2h0LmRhZW1vbi5xdWlja0ZpeDsKKworLyoqCisgKiBAYXV0aG9yIGFubmEKKyAqLworcHVibGljIGNsYXNzIFF1YWxpZnlXaXRoVGhpc0ZpeFRlc3QgZXh0ZW5kcyBMaWdodFF1aWNrRml4VGVzdENhc2UgeworCisgIHB1YmxpYyB2b2lkIHRlc3QoKSB0aHJvd3MgRXhjZXB0aW9uIHsgZG9BbGxUZXN0cygpOyB9CisKKyAgQE92ZXJyaWRlCisgIHByb3RlY3RlZCBTdHJpbmcgZ2V0QmFzZVBhdGgoKSB7CisgICAgcmV0dXJuICIvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3F1YWxpZnlXaXRoVGhpc0luU3VwZXJDYWxsIjsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNpZ2h0L2RhZW1vbi9xdWlja0ZpeC9SZWR1bmRhbnRMYW1iZGFDb2RlQmxvY2tJbnNwZWN0aW9uVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNpZ2h0L2RhZW1vbi9xdWlja0ZpeC9SZWR1bmRhbnRMYW1iZGFDb2RlQmxvY2tJbnNwZWN0aW9uVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkxOTllMTQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovY29kZUluc2lnaHQvZGFlbW9uL3F1aWNrRml4L1JlZHVuZGFudExhbWJkYUNvZGVCbG9ja0luc3BlY3Rpb25UZXN0LmphdmEKQEAgLTAsMCArMSwzNyBAQAorLyoKKyAqIENvcHlyaWdodCAyMDAwLTIwMTIgSmV0QnJhaW5zIHMuci5vLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KK3BhY2thZ2UgY29tLmludGVsbGlqLmNvZGVJbnNpZ2h0LmRhZW1vbi5xdWlja0ZpeDsKKworaW1wb3J0IGNvbS5pbnRlbGxpai5jb2RlSW5zcGVjdGlvbi5Mb2NhbEluc3BlY3Rpb25Ub29sOworaW1wb3J0IGNvbS5pbnRlbGxpai5jb2RlSW5zcGVjdGlvbi5SZWR1bmRhbnRMYW1iZGFDb2RlQmxvY2tJbnNwZWN0aW9uOworCisKK3B1YmxpYyBjbGFzcyBSZWR1bmRhbnRMYW1iZGFDb2RlQmxvY2tJbnNwZWN0aW9uVGVzdCBleHRlbmRzIExpZ2h0UXVpY2tGaXhUZXN0Q2FzZSB7CisgIEBPdmVycmlkZQorICBwcm90ZWN0ZWQgTG9jYWxJbnNwZWN0aW9uVG9vbFtdIGNvbmZpZ3VyZUxvY2FsSW5zcGVjdGlvblRvb2xzKCkgeworICAgIHJldHVybiBuZXcgTG9jYWxJbnNwZWN0aW9uVG9vbFtdeworICAgICAgbmV3IFJlZHVuZGFudExhbWJkYUNvZGVCbG9ja0luc3BlY3Rpb24oKSwKKyAgICB9OworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdCgpIHRocm93cyBFeGNlcHRpb24geyBkb0FsbFRlc3RzKCk7IH0KKworICBAT3ZlcnJpZGUKKyAgcHJvdGVjdGVkIFN0cmluZyBnZXRCYXNlUGF0aCgpIHsKKyAgICByZXR1cm4gIi9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvbGFtYmRhQ29kZUJsb2NrMkV4cHIiOworICB9CisKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovY29kZUluc2lnaHQvZGFlbW9uL3F1aWNrRml4L1JlZHVuZGFudExhbWJkYVBhcmFtZXRlclR5cGVJbnRlbnRpb25UZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovY29kZUluc2lnaHQvZGFlbW9uL3F1aWNrRml4L1JlZHVuZGFudExhbWJkYVBhcmFtZXRlclR5cGVJbnRlbnRpb25UZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODRiZGJjNgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9jb2RlSW5zaWdodC9kYWVtb24vcXVpY2tGaXgvUmVkdW5kYW50TGFtYmRhUGFyYW1ldGVyVHlwZUludGVudGlvblRlc3QuamF2YQpAQCAtMCwwICsxLDI2IEBACisvKgorICogQ29weXJpZ2h0IDIwMDAtMjAxMiBKZXRCcmFpbnMgcy5yLm8uCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworcGFja2FnZSBjb20uaW50ZWxsaWouY29kZUluc2lnaHQuZGFlbW9uLnF1aWNrRml4OworCitwdWJsaWMgY2xhc3MgUmVkdW5kYW50TGFtYmRhUGFyYW1ldGVyVHlwZUludGVudGlvblRlc3QgZXh0ZW5kcyBMaWdodFF1aWNrRml4VGVzdENhc2UgeworICBwdWJsaWMgdm9pZCB0ZXN0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7IGRvQWxsVGVzdHMoKTsgfQorCisgIEBPdmVycmlkZQorICBwcm90ZWN0ZWQgU3RyaW5nIGdldEJhc2VQYXRoKCkgeworICAgIHJldHVybiAiL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9yZWR1bmRhbnRMYW1iZGFQYXJhbWV0ZXJUeXBlIjsKKyAgfQorCit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNpZ2h0L2RhZW1vbi9xdWlja0ZpeC9SZW1vdmVOZXdRdWFsaWZpZXJUZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovY29kZUluc2lnaHQvZGFlbW9uL3F1aWNrRml4L1JlbW92ZU5ld1F1YWxpZmllclRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMjdmYzcxCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNpZ2h0L2RhZW1vbi9xdWlja0ZpeC9SZW1vdmVOZXdRdWFsaWZpZXJUZXN0LmphdmEKQEAgLTAsMCArMSwxNiBAQAorCitwYWNrYWdlIGNvbS5pbnRlbGxpai5jb2RlSW5zaWdodC5kYWVtb24ucXVpY2tGaXg7CisKKworCitwdWJsaWMgY2xhc3MgUmVtb3ZlTmV3UXVhbGlmaWVyVGVzdCBleHRlbmRzIExpZ2h0UXVpY2tGaXhUZXN0Q2FzZSB7CisKKyAgcHVibGljIHZvaWQgdGVzdCgpIHRocm93cyBFeGNlcHRpb24geyBkb0FsbFRlc3RzKCk7IH0KKworICBAT3ZlcnJpZGUKKyAgcHJvdGVjdGVkIFN0cmluZyBnZXRCYXNlUGF0aCgpIHsKKyAgICByZXR1cm4gIi9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvcmVtb3ZlTmV3UXVhbGlmaWVyIjsKKyAgfQorCit9CisKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9jb2RlSW5zaWdodC9kYWVtb24vcXVpY2tGaXgvUmVtb3ZlUXVhbGlmaWVyVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNpZ2h0L2RhZW1vbi9xdWlja0ZpeC9SZW1vdmVRdWFsaWZpZXJUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWQwYmI2MgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9jb2RlSW5zaWdodC9kYWVtb24vcXVpY2tGaXgvUmVtb3ZlUXVhbGlmaWVyVGVzdC5qYXZhCkBAIC0wLDAgKzEsMTEgQEAKK3BhY2thZ2UgY29tLmludGVsbGlqLmNvZGVJbnNpZ2h0LmRhZW1vbi5xdWlja0ZpeDsKKworcHVibGljIGNsYXNzIFJlbW92ZVF1YWxpZmllclRlc3QgZXh0ZW5kcyBMaWdodFF1aWNrRml4VGVzdENhc2UgeworCisgIHB1YmxpYyB2b2lkIHRlc3QoKSB0aHJvd3MgRXhjZXB0aW9uIHsgZG9BbGxUZXN0cygpOyB9CisKKyAgQE92ZXJyaWRlCisgIHByb3RlY3RlZCBTdHJpbmcgZ2V0QmFzZVBhdGgoKSB7CisgICAgcmV0dXJuICIvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3JlbW92ZVF1YWxpZmllciI7CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9jb2RlSW5zaWdodC9kYWVtb24vcXVpY2tGaXgvUmVtb3ZlUmVkdW5kYW50QXJndW1lbnRUZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovY29kZUluc2lnaHQvZGFlbW9uL3F1aWNrRml4L1JlbW92ZVJlZHVuZGFudEFyZ3VtZW50VGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI5MzBkNWQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovY29kZUluc2lnaHQvZGFlbW9uL3F1aWNrRml4L1JlbW92ZVJlZHVuZGFudEFyZ3VtZW50VGVzdC5qYXZhCkBAIC0wLDAgKzEsMTIgQEAKK3BhY2thZ2UgY29tLmludGVsbGlqLmNvZGVJbnNpZ2h0LmRhZW1vbi5xdWlja0ZpeDsKKworcHVibGljIGNsYXNzIFJlbW92ZVJlZHVuZGFudEFyZ3VtZW50VGVzdCBleHRlbmRzIExpZ2h0UXVpY2tGaXhUZXN0Q2FzZSB7CisKKyAgcHVibGljIHZvaWQgdGVzdCgpIHRocm93cyBFeGNlcHRpb24geyBkb0FsbFRlc3RzKCk7IH0KKworICBAT3ZlcnJpZGUKKyAgcHJvdGVjdGVkIFN0cmluZyBnZXRCYXNlUGF0aCgpIHsKKyAgICByZXR1cm4gIi9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvcmVtb3ZlUmVkdW5kYW50QXJndW1lbnQiOworICB9CisKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9jb2RlSW5zaWdodC9kYWVtb24vcXVpY2tGaXgvUmVtb3ZlUmVkdW5kYW50RWxzZUFjdGlvblRlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9jb2RlSW5zaWdodC9kYWVtb24vcXVpY2tGaXgvUmVtb3ZlUmVkdW5kYW50RWxzZUFjdGlvblRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYzQ2NWIxCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNpZ2h0L2RhZW1vbi9xdWlja0ZpeC9SZW1vdmVSZWR1bmRhbnRFbHNlQWN0aW9uVGVzdC5qYXZhCkBAIC0wLDAgKzEsMzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwMC0yMDEwIEpldEJyYWlucyBzLnIuby4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCitwYWNrYWdlIGNvbS5pbnRlbGxpai5jb2RlSW5zaWdodC5kYWVtb24ucXVpY2tGaXg7CisKKy8qKgorICogVXNlcjogYW5uYQorICogRGF0ZTogQXVnIDMwLCAyMDEwCisgKi8KK3B1YmxpYyBjbGFzcyBSZW1vdmVSZWR1bmRhbnRFbHNlQWN0aW9uVGVzdCBleHRlbmRzIExpZ2h0UXVpY2tGaXhUZXN0Q2FzZSB7CisKKyAgcHVibGljIHZvaWQgdGVzdCgpIHRocm93cyBFeGNlcHRpb24geyBkb0FsbFRlc3RzKCk7IH0KKworICBAT3ZlcnJpZGUKKyAgcHJvdGVjdGVkIFN0cmluZyBnZXRCYXNlUGF0aCgpIHsKKyAgICByZXR1cm4gIi9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvcmVtb3ZlUmVkdW5kYW50RWxzZSI7CisgIH0KKworfQorCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovY29kZUluc2lnaHQvZGFlbW9uL3F1aWNrRml4L1JlbW92ZVJlZHVuZGFudFVuY2hlY2tlZFN1cHByZXNzaW9uVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNpZ2h0L2RhZW1vbi9xdWlja0ZpeC9SZW1vdmVSZWR1bmRhbnRVbmNoZWNrZWRTdXBwcmVzc2lvblRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNDhmYzFlCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNpZ2h0L2RhZW1vbi9xdWlja0ZpeC9SZW1vdmVSZWR1bmRhbnRVbmNoZWNrZWRTdXBwcmVzc2lvblRlc3QuamF2YQpAQCAtMCwwICsxLDEwNCBAQAorLyoKKyAqIENvcHlyaWdodCAyMDAwLTIwMTEgSmV0QnJhaW5zIHMuci5vLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KK3BhY2thZ2UgY29tLmludGVsbGlqLmNvZGVJbnNpZ2h0LmRhZW1vbi5xdWlja0ZpeDsKKworaW1wb3J0IGNvbS5pbnRlbGxpai5jb2RlSW5zcGVjdGlvbi4qOworaW1wb3J0IGNvbS5pbnRlbGxpai5jb2RlSW5zcGVjdGlvbi5leC5JbnNwZWN0aW9uVG9vbDsKK2ltcG9ydCBjb20uaW50ZWxsaWouY29kZUluc3BlY3Rpb24uZXguTG9jYWxJbnNwZWN0aW9uVG9vbFdyYXBwZXI7CitpbXBvcnQgY29tLmludGVsbGlqLmNvZGVJbnNwZWN0aW9uLnVuY2hlY2tlZFdhcm5pbmdzLlVuY2hlY2tlZFdhcm5pbmdMb2NhbEluc3BlY3Rpb247CitpbXBvcnQgY29tLmludGVsbGlqLnBzaS4qOworaW1wb3J0IG9yZy5qZXRicmFpbnMuYW5ub3RhdGlvbnMuTmxzOworaW1wb3J0IG9yZy5qZXRicmFpbnMuYW5ub3RhdGlvbnMuTm90TnVsbDsKKworCitwdWJsaWMgY2xhc3MgUmVtb3ZlUmVkdW5kYW50VW5jaGVja2VkU3VwcHJlc3Npb25UZXN0IGV4dGVuZHMgTGlnaHRRdWlja0ZpeFRlc3RDYXNlIHsKKyAgQE92ZXJyaWRlCisgIHByb3RlY3RlZCBMb2NhbEluc3BlY3Rpb25Ub29sW10gY29uZmlndXJlTG9jYWxJbnNwZWN0aW9uVG9vbHMoKSB7CisgICAgZmluYWwgUG9zc2libGVIZWFwUG9sbHV0aW9uVmFyYXJnc0luc3BlY3Rpb24gdmFyYXJnc0luc3BlY3Rpb24gPSBuZXcgUG9zc2libGVIZWFwUG9sbHV0aW9uVmFyYXJnc0luc3BlY3Rpb24oKTsKKyAgICBmaW5hbCBVbmNoZWNrZWRXYXJuaW5nTG9jYWxJbnNwZWN0aW9uIHdhcm5pbmdMb2NhbEluc3BlY3Rpb24gPSBuZXcgVW5jaGVja2VkV2FybmluZ0xvY2FsSW5zcGVjdGlvbigpOworICAgIGZpbmFsIFJlZHVuZGFudFN1cHByZXNzSW5zcGVjdGlvbiBpbnNwZWN0aW9uID0gbmV3IFJlZHVuZGFudFN1cHByZXNzSW5zcGVjdGlvbigpeworICAgICAgQE92ZXJyaWRlCisgICAgICBwcm90ZWN0ZWQgSW5zcGVjdGlvblRvb2xbXSBnZXRJbnNwZWN0aW9uVG9vbHMoUHNpRWxlbWVudCBwc2lFbGVtZW50LCBJbnNwZWN0aW9uTWFuYWdlciBtYW5hZ2VyKSB7CisgICAgICAgIHJldHVybiBuZXcgSW5zcGVjdGlvblRvb2xbXXsKKyAgICAgICAgICBuZXcgTG9jYWxJbnNwZWN0aW9uVG9vbFdyYXBwZXIodmFyYXJnc0luc3BlY3Rpb24pLAorICAgICAgICAgIG5ldyBMb2NhbEluc3BlY3Rpb25Ub29sV3JhcHBlcih3YXJuaW5nTG9jYWxJbnNwZWN0aW9uKQorICAgICAgICB9OworICAgICAgfQorICAgIH07CisKKyAgICByZXR1cm4gbmV3IExvY2FsSW5zcGVjdGlvblRvb2xbXSB7CisgICAgICBuZXcgTG9jYWxJbnNwZWN0aW9uVG9vbCgpIHsKKyAgICAgICAgQE5scworICAgICAgICBATm90TnVsbAorICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIFN0cmluZyBnZXRHcm91cERpc3BsYXlOYW1lKCkgeworICAgICAgICAgIHJldHVybiBpbnNwZWN0aW9uLmdldEdyb3VwRGlzcGxheU5hbWUoKTsKKyAgICAgICAgfQorCisgICAgICAgIEBObHMKKyAgICAgICAgQE5vdE51bGwKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyBTdHJpbmcgZ2V0RGlzcGxheU5hbWUoKSB7CisgICAgICAgICAgcmV0dXJuIGluc3BlY3Rpb24uZ2V0RGlzcGxheU5hbWUoKTsKKyAgICAgICAgfQorCisgICAgICAgIEBOb3ROdWxsCisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgU3RyaW5nIGdldFNob3J0TmFtZSgpIHsKKyAgICAgICAgICByZXR1cm4gaW5zcGVjdGlvbi5nZXRTaG9ydE5hbWUoKTsKKyAgICAgICAgfQorCisgICAgICAgIEBOb3ROdWxsCisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgUHNpRWxlbWVudFZpc2l0b3IgYnVpbGRWaXNpdG9yKEBOb3ROdWxsIGZpbmFsIFByb2JsZW1zSG9sZGVyIGhvbGRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sZWFuIGlzT25UaGVGbHksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQE5vdE51bGwgTG9jYWxJbnNwZWN0aW9uVG9vbFNlc3Npb24gc2Vzc2lvbikgeworICAgICAgICAgIHJldHVybiBuZXcgSmF2YUVsZW1lbnRWaXNpdG9yKCkgeworICAgICAgICAgICAgQE92ZXJyaWRlCisgICAgICAgICAgICBwdWJsaWMgdm9pZCB2aXNpdENsYXNzKFBzaUNsYXNzIGFDbGFzcykgeworICAgICAgICAgICAgICBjaGVja01lbWJlcihhQ2xhc3MsIGluc3BlY3Rpb24sIGhvbGRlcik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIEBPdmVycmlkZQorICAgICAgICAgICAgcHVibGljIHZvaWQgdmlzaXRNZXRob2QoUHNpTWV0aG9kIG1ldGhvZCkgeworICAgICAgICAgICAgICBjaGVja01lbWJlcihtZXRob2QsIGluc3BlY3Rpb24sIGhvbGRlcik7CisgICAgICAgICAgICB9CisgICAgICAgICAgfTsKKyAgICAgICAgfQorCisgICAgICAgIHByaXZhdGUgdm9pZCBjaGVja01lbWJlcihQc2lNZW1iZXIgbWVtYmVyLCBSZWR1bmRhbnRTdXBwcmVzc0luc3BlY3Rpb24gaW5zcGVjdGlvbiwgUHJvYmxlbXNIb2xkZXIgaG9sZGVyKSB7CisgICAgICAgICAgZmluYWwgUHJvYmxlbURlc2NyaXB0b3JbXSBwcm9ibGVtRGVzY3JpcHRvcnMgPQorICAgICAgICAgICAgKFByb2JsZW1EZXNjcmlwdG9yW10paW5zcGVjdGlvbi5jaGVja0VsZW1lbnQobWVtYmVyLCBJbnNwZWN0aW9uTWFuYWdlci5nZXRJbnN0YW5jZShnZXRQcm9qZWN0KCkpLCBnZXRQcm9qZWN0KCkpOworICAgICAgICAgIGlmIChwcm9ibGVtRGVzY3JpcHRvcnMgIT0gbnVsbCkgeworICAgICAgICAgICAgZm9yIChQcm9ibGVtRGVzY3JpcHRvciBwcm9ibGVtRGVzY3JpcHRvciA6IHByb2JsZW1EZXNjcmlwdG9ycykgeworICAgICAgICAgICAgICBob2xkZXIucmVnaXN0ZXJQcm9ibGVtKHByb2JsZW1EZXNjcmlwdG9yKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIH0sCisgICAgICB2YXJhcmdzSW5zcGVjdGlvbiwKKyAgICAgIHdhcm5pbmdMb2NhbEluc3BlY3Rpb24KKyAgICB9OworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdCgpIHRocm93cyBFeGNlcHRpb24geyBkb0FsbFRlc3RzKCk7IH0KKworICBAT3ZlcnJpZGUKKyAgcHJvdGVjdGVkIFN0cmluZyBnZXRCYXNlUGF0aCgpIHsKKyAgICByZXR1cm4gIi9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvcmVkdW5kYW50VW5jaGVja2VkVmFyYXJncyI7CisgIH0KKworfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNpZ2h0L2RhZW1vbi9xdWlja0ZpeC9SZW1vdmVUeXBlQXJndW1lbnRzVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNpZ2h0L2RhZW1vbi9xdWlja0ZpeC9SZW1vdmVUeXBlQXJndW1lbnRzVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNkMWEwOTYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovY29kZUluc2lnaHQvZGFlbW9uL3F1aWNrRml4L1JlbW92ZVR5cGVBcmd1bWVudHNUZXN0LmphdmEKQEAgLTAsMCArMSwyNSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDAwLTIwMTIgSmV0QnJhaW5zIHMuci5vLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KK3BhY2thZ2UgY29tLmludGVsbGlqLmNvZGVJbnNpZ2h0LmRhZW1vbi5xdWlja0ZpeDsKKworcHVibGljIGNsYXNzIFJlbW92ZVR5cGVBcmd1bWVudHNUZXN0IGV4dGVuZHMgTGlnaHRRdWlja0ZpeFRlc3RDYXNlIHsKKyAgcHVibGljIHZvaWQgdGVzdCgpIHRocm93cyBFeGNlcHRpb24geyBkb0FsbFRlc3RzKCk7IH0KKworICBAT3ZlcnJpZGUKKyAgcHJvdGVjdGVkIFN0cmluZyBnZXRCYXNlUGF0aCgpIHsKKyAgICByZXR1cm4gIi9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvcmVtb3ZlVHlwZUFyZ3VtZW50cyI7CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9jb2RlSW5zaWdodC9kYWVtb24vcXVpY2tGaXgvUmVtb3ZlVW51c2VkUGFyYW1ldGVyVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNpZ2h0L2RhZW1vbi9xdWlja0ZpeC9SZW1vdmVVbnVzZWRQYXJhbWV0ZXJUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmFkZTk3NwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9jb2RlSW5zaWdodC9kYWVtb24vcXVpY2tGaXgvUmVtb3ZlVW51c2VkUGFyYW1ldGVyVGVzdC5qYXZhCkBAIC0wLDAgKzEsMjQgQEAKKworcGFja2FnZSBjb20uaW50ZWxsaWouY29kZUluc2lnaHQuZGFlbW9uLnF1aWNrRml4OworCitpbXBvcnQgY29tLmludGVsbGlqLmNvZGVJbnNwZWN0aW9uLkxvY2FsSW5zcGVjdGlvblRvb2w7CitpbXBvcnQgY29tLmludGVsbGlqLmNvZGVJbnNwZWN0aW9uLnVudXNlZFN5bWJvbC5VbnVzZWRTeW1ib2xMb2NhbEluc3BlY3Rpb247CisKKworcHVibGljIGNsYXNzIFJlbW92ZVVudXNlZFBhcmFtZXRlclRlc3QgZXh0ZW5kcyBMaWdodFF1aWNrRml4VGVzdENhc2UgeworCisKKyAgQE92ZXJyaWRlCisgIHByb3RlY3RlZCBMb2NhbEluc3BlY3Rpb25Ub29sW10gY29uZmlndXJlTG9jYWxJbnNwZWN0aW9uVG9vbHMoKSB7CisgICAgcmV0dXJuIG5ldyBMb2NhbEluc3BlY3Rpb25Ub29sW117IG5ldyBVbnVzZWRTeW1ib2xMb2NhbEluc3BlY3Rpb24oKX07CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7IGRvQWxsVGVzdHMoKTsgfQorCisgIEBPdmVycmlkZQorICBwcm90ZWN0ZWQgU3RyaW5nIGdldEJhc2VQYXRoKCkgeworICAgIHJldHVybiAiL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9yZW1vdmVVbnVzZWRQYXJhbWV0ZXIiOworICB9CisKK30KKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNpZ2h0L2RhZW1vbi9xdWlja0ZpeC9SZW1vdmVVbnVzZWRWYXJpYWJsZVRlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9jb2RlSW5zaWdodC9kYWVtb24vcXVpY2tGaXgvUmVtb3ZlVW51c2VkVmFyaWFibGVUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjE4MjFhNgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9jb2RlSW5zaWdodC9kYWVtb24vcXVpY2tGaXgvUmVtb3ZlVW51c2VkVmFyaWFibGVUZXN0LmphdmEKQEAgLTAsMCArMSwyNCBAQAorCitwYWNrYWdlIGNvbS5pbnRlbGxpai5jb2RlSW5zaWdodC5kYWVtb24ucXVpY2tGaXg7CisKK2ltcG9ydCBjb20uaW50ZWxsaWouY29kZUluc3BlY3Rpb24uTG9jYWxJbnNwZWN0aW9uVG9vbDsKK2ltcG9ydCBjb20uaW50ZWxsaWouY29kZUluc3BlY3Rpb24udW51c2VkU3ltYm9sLlVudXNlZFN5bWJvbExvY2FsSW5zcGVjdGlvbjsKKworcHVibGljIGNsYXNzIFJlbW92ZVVudXNlZFZhcmlhYmxlVGVzdCBleHRlbmRzIExpZ2h0UXVpY2tGaXhUZXN0Q2FzZSB7CisgIEBPdmVycmlkZQorICBwcm90ZWN0ZWQgTG9jYWxJbnNwZWN0aW9uVG9vbFtdIGNvbmZpZ3VyZUxvY2FsSW5zcGVjdGlvblRvb2xzKCkgeworICAgIHJldHVybiBuZXcgTG9jYWxJbnNwZWN0aW9uVG9vbFtdeyBuZXcgVW51c2VkU3ltYm9sTG9jYWxJbnNwZWN0aW9uKCl9OworICB9CisgIAorCisgIHB1YmxpYyB2b2lkIHRlc3QoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb0FsbFRlc3RzKCk7CisgIH0KKworICBAT3ZlcnJpZGUKKyAgcHJvdGVjdGVkIFN0cmluZyBnZXRCYXNlUGF0aCgpIHsKKyAgICByZXR1cm4gIi9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvcmVtb3ZlVW51c2VkVmFyaWFibGUiOworICB9CisKK30KKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNpZ2h0L2RhZW1vbi9xdWlja0ZpeC9SZW5hbWVXcm9uZ1JlZmVyZW5jZVRlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9jb2RlSW5zaWdodC9kYWVtb24vcXVpY2tGaXgvUmVuYW1lV3JvbmdSZWZlcmVuY2VUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWUyYzg0NwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9jb2RlSW5zaWdodC9kYWVtb24vcXVpY2tGaXgvUmVuYW1lV3JvbmdSZWZlcmVuY2VUZXN0LmphdmEKQEAgLTAsMCArMSwxMiBAQAorcGFja2FnZSBjb20uaW50ZWxsaWouY29kZUluc2lnaHQuZGFlbW9uLnF1aWNrRml4OworCitwdWJsaWMgY2xhc3MgUmVuYW1lV3JvbmdSZWZlcmVuY2VUZXN0IGV4dGVuZHMgTGlnaHRRdWlja0ZpeEF2YWlsYWJpbGl0eVRlc3RDYXNlIHsKKworICBwdWJsaWMgdm9pZCB0ZXN0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7IGRvQWxsVGVzdHMoKTsgfQorCisgIEBPdmVycmlkZQorICBwcm90ZWN0ZWQgU3RyaW5nIGdldEJhc2VQYXRoKCkgeworICAgIHJldHVybiAiL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9yZW5hbWVXcm9uZ1JlZmVyZW5jZSI7CisgIH0KK30KKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNpZ2h0L2RhZW1vbi9xdWlja0ZpeC9SZXBsYWNlQWRkQWxsQXJyYXlUb0NvbGxlY3Rpb25zRml4VGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNpZ2h0L2RhZW1vbi9xdWlja0ZpeC9SZXBsYWNlQWRkQWxsQXJyYXlUb0NvbGxlY3Rpb25zRml4VGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ3ZDdmMzUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovY29kZUluc2lnaHQvZGFlbW9uL3F1aWNrRml4L1JlcGxhY2VBZGRBbGxBcnJheVRvQ29sbGVjdGlvbnNGaXhUZXN0LmphdmEKQEAgLTAsMCArMSwzMiBAQAorLyoKKyAqIENvcHlyaWdodCAyMDAwLTIwMTIgSmV0QnJhaW5zIHMuci5vLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworLyoKKyAqIFVzZXI6IGFubmEKKyAqIERhdGU6IDIxLU1hci0yMDA4CisgKi8KK3BhY2thZ2UgY29tLmludGVsbGlqLmNvZGVJbnNpZ2h0LmRhZW1vbi5xdWlja0ZpeDsKKworcHVibGljIGNsYXNzIFJlcGxhY2VBZGRBbGxBcnJheVRvQ29sbGVjdGlvbnNGaXhUZXN0IGV4dGVuZHMgTGlnaHRRdWlja0ZpeFRlc3RDYXNlIHsKKyAgIHB1YmxpYyB2b2lkIHRlc3QoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgZG9BbGxUZXN0cygpOworICAgfQorCisgIEBPdmVycmlkZQorICBwcm90ZWN0ZWQgU3RyaW5nIGdldEJhc2VQYXRoKCkgeworICAgIHJldHVybiAiL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9yZXBsYWNlQWRkQWxsQXJyYXlUb0NvbGxlY3Rpb25zIjsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9jb2RlSW5zaWdodC9kYWVtb24vcXVpY2tGaXgvUmVwbGFjZUltcGxlbWVudHNXaXRoU3RhdGljSW1wb3J0VGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNpZ2h0L2RhZW1vbi9xdWlja0ZpeC9SZXBsYWNlSW1wbGVtZW50c1dpdGhTdGF0aWNJbXBvcnRUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2YzNzk2NAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9jb2RlSW5zaWdodC9kYWVtb24vcXVpY2tGaXgvUmVwbGFjZUltcGxlbWVudHNXaXRoU3RhdGljSW1wb3J0VGVzdC5qYXZhCkBAIC0wLDAgKzEsNDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwMC0yMDEwIEpldEJyYWlucyBzLnIuby4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKy8qCisgKiBVc2VyOiBhbm5hCisgKiBEYXRlOiAwNy1NYXktMjAxMAorICovCitwYWNrYWdlIGNvbS5pbnRlbGxpai5jb2RlSW5zaWdodC5kYWVtb24ucXVpY2tGaXg7CisKK2ltcG9ydCBjb20uaW50ZWxsaWouSmF2YVRlc3RVdGlsOworaW1wb3J0IG9yZy5qZXRicmFpbnMuYW5ub3RhdGlvbnMuTm90TnVsbDsKKworcHVibGljIGNsYXNzIFJlcGxhY2VJbXBsZW1lbnRzV2l0aFN0YXRpY0ltcG9ydFRlc3QgZXh0ZW5kcyBMaWdodFF1aWNrRml4VGVzdENhc2UgeworICBATm90TnVsbAorICBAT3ZlcnJpZGUKKyAgcHJvdGVjdGVkIFN0cmluZyBnZXRUZXN0RGF0YVBhdGgoKSB7CisgICAgcmV0dXJuIEphdmFUZXN0VXRpbC5nZXRKYXZhVGVzdERhdGFQYXRoKCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9BbGxUZXN0cygpOworICB9CisKKyAgQE92ZXJyaWRlCisgIHByb3RlY3RlZCBTdHJpbmcgZ2V0QmFzZVBhdGgoKSB7CisgICAgcmV0dXJuICIvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3JlcGxhY2VJbXBsZW1lbnRzV2l0aFN0YXRpY0ltcG9ydCI7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovY29kZUluc2lnaHQvZGFlbW9uL3F1aWNrRml4L1JlcGxhY2VJbmFjY2Vzc2libGVGaWVsZFdpdGhHZXR0ZXJTZXR0ZXJGaXhUZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovY29kZUluc2lnaHQvZGFlbW9uL3F1aWNrRml4L1JlcGxhY2VJbmFjY2Vzc2libGVGaWVsZFdpdGhHZXR0ZXJTZXR0ZXJGaXhUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDI2YTc3MQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9jb2RlSW5zaWdodC9kYWVtb24vcXVpY2tGaXgvUmVwbGFjZUluYWNjZXNzaWJsZUZpZWxkV2l0aEdldHRlclNldHRlckZpeFRlc3QuamF2YQpAQCAtMCwwICsxLDI1IEBACisvKgorICogQ29weXJpZ2h0IDIwMDAtMjAxMSBKZXRCcmFpbnMgcy5yLm8uCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworcGFja2FnZSBjb20uaW50ZWxsaWouY29kZUluc2lnaHQuZGFlbW9uLnF1aWNrRml4OworCitwdWJsaWMgY2xhc3MgUmVwbGFjZUluYWNjZXNzaWJsZUZpZWxkV2l0aEdldHRlclNldHRlckZpeFRlc3QgZXh0ZW5kcyBMaWdodFF1aWNrRml4VGVzdENhc2UgeworICBwdWJsaWMgdm9pZCB0ZXN0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7IGRvQWxsVGVzdHMoKTsgfQorCisgIEBPdmVycmlkZQorICBwcm90ZWN0ZWQgU3RyaW5nIGdldEJhc2VQYXRoKCkgeworICAgIHJldHVybiAiL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9yZXBsYWNlRmllbGRXaXRoR2V0dGVyU2V0dGVyIjsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNpZ2h0L2RhZW1vbi9xdWlja0ZpeC9SZXBsYWNlUHJpbWl0aXZlV2l0aEJveGVkVHlwZVRlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9jb2RlSW5zaWdodC9kYWVtb24vcXVpY2tGaXgvUmVwbGFjZVByaW1pdGl2ZVdpdGhCb3hlZFR5cGVUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjc4NDE4NQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9jb2RlSW5zaWdodC9kYWVtb24vcXVpY2tGaXgvUmVwbGFjZVByaW1pdGl2ZVdpdGhCb3hlZFR5cGVUZXN0LmphdmEKQEAgLTAsMCArMSwyNiBAQAorLyoKKyAqIENvcHlyaWdodCAyMDAwLTIwMTIgSmV0QnJhaW5zIHMuci5vLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KK3BhY2thZ2UgY29tLmludGVsbGlqLmNvZGVJbnNpZ2h0LmRhZW1vbi5xdWlja0ZpeDsKKworcHVibGljIGNsYXNzIFJlcGxhY2VQcmltaXRpdmVXaXRoQm94ZWRUeXBlVGVzdCBleHRlbmRzIExpZ2h0UXVpY2tGaXgxNVRlc3RDYXNlIHsKKyAgcHVibGljIHZvaWQgdGVzdCgpIHRocm93cyBFeGNlcHRpb24geyBkb0FsbFRlc3RzKCk7IH0KKworICBAT3ZlcnJpZGUKKyAgcHJvdGVjdGVkIFN0cmluZyBnZXRCYXNlUGF0aCgpIHsKKyAgICByZXR1cm4gIi9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvcmVwbGFjZVByaW1pdGl2ZVdpdGhCb3hlZCI7CisgIH0KK30KKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNpZ2h0L2RhZW1vbi9xdWlja0ZpeC9SZXBsYWNlV2l0aExpc3RBY2Nlc3NUZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovY29kZUluc2lnaHQvZGFlbW9uL3F1aWNrRml4L1JlcGxhY2VXaXRoTGlzdEFjY2Vzc1Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNTc3NzY0Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNpZ2h0L2RhZW1vbi9xdWlja0ZpeC9SZXBsYWNlV2l0aExpc3RBY2Nlc3NUZXN0LmphdmEKQEAgLTAsMCArMSwyOSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDAwLTIwMTIgSmV0QnJhaW5zIHMuci5vLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KK3BhY2thZ2UgY29tLmludGVsbGlqLmNvZGVJbnNpZ2h0LmRhZW1vbi5xdWlja0ZpeDsKKworLyoqCisgKiBAYXV0aG9yIERhbmlsYSBQb25vbWFyZW5rbworICovCitwdWJsaWMgY2xhc3MgUmVwbGFjZVdpdGhMaXN0QWNjZXNzVGVzdCBleHRlbmRzIExpZ2h0UXVpY2tGaXhUZXN0Q2FzZSB7CisKKyAgcHVibGljIHZvaWQgdGVzdCgpIHRocm93cyBFeGNlcHRpb24geyBkb0FsbFRlc3RzKCk7IH0KKworICBAT3ZlcnJpZGUKKyAgcHJvdGVjdGVkIFN0cmluZyBnZXRCYXNlUGF0aCgpIHsKKyAgICByZXR1cm4gIi9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvcmVwbGFjZVdpdGhMaXN0QWNjZXNzIjsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNpZ2h0L2RhZW1vbi9xdWlja0ZpeC9SZXBsYWNlV2l0aFRlcm5hcnlPcGVyYXRvclRlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9jb2RlSW5zaWdodC9kYWVtb24vcXVpY2tGaXgvUmVwbGFjZVdpdGhUZXJuYXJ5T3BlcmF0b3JUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjQxOTA4OAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9jb2RlSW5zaWdodC9kYWVtb24vcXVpY2tGaXgvUmVwbGFjZVdpdGhUZXJuYXJ5T3BlcmF0b3JUZXN0LmphdmEKQEAgLTAsMCArMSw0MSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDAwLTIwMTIgSmV0QnJhaW5zIHMuci5vLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworLyoKKyAqIFVzZXI6IGFubmEKKyAqIERhdGU6IDIxLU1hci0yMDA4CisgKi8KK3BhY2thZ2UgY29tLmludGVsbGlqLmNvZGVJbnNpZ2h0LmRhZW1vbi5xdWlja0ZpeDsKKworaW1wb3J0IGNvbS5pbnRlbGxpai5jb2RlSW5zcGVjdGlvbi5Mb2NhbEluc3BlY3Rpb25Ub29sOworaW1wb3J0IGNvbS5pbnRlbGxpai5jb2RlSW5zcGVjdGlvbi5kYXRhRmxvdy5EYXRhRmxvd0luc3BlY3Rpb247CitpbXBvcnQgY29tLmludGVsbGlqLmNvZGVJbnNwZWN0aW9uLm51bGxhYmxlLk51bGxhYmxlU3R1ZmZJbnNwZWN0aW9uOworCitwdWJsaWMgY2xhc3MgUmVwbGFjZVdpdGhUZXJuYXJ5T3BlcmF0b3JUZXN0IGV4dGVuZHMgTGlnaHRRdWlja0ZpeFRlc3RDYXNlIHsKKyAgQE92ZXJyaWRlCisgIHByb3RlY3RlZCBMb2NhbEluc3BlY3Rpb25Ub29sW10gY29uZmlndXJlTG9jYWxJbnNwZWN0aW9uVG9vbHMoKSB7CisgICAgcmV0dXJuIG5ldyBMb2NhbEluc3BlY3Rpb25Ub29sW117bmV3IERhdGFGbG93SW5zcGVjdGlvbigpLCBuZXcgTnVsbGFibGVTdHVmZkluc3BlY3Rpb24oKX07CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgIGRvQWxsVGVzdHMoKTsKKyAgIH0KKworICBAT3ZlcnJpZGUKKyAgcHJvdGVjdGVkIFN0cmluZyBnZXRCYXNlUGF0aCgpIHsKKyAgICByZXR1cm4gIi9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvcmVwbGFjZVdpdGhUZXJuYXJ5T3BlcmF0b3IiOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNpZ2h0L2RhZW1vbi9xdWlja0ZpeC9SZXVzZVZhcmlhYmxlRGVjbGFyYXRpb25UZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovY29kZUluc2lnaHQvZGFlbW9uL3F1aWNrRml4L1JldXNlVmFyaWFibGVEZWNsYXJhdGlvblRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNDNlNjc4Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNpZ2h0L2RhZW1vbi9xdWlja0ZpeC9SZXVzZVZhcmlhYmxlRGVjbGFyYXRpb25UZXN0LmphdmEKQEAgLTAsMCArMSwxMiBAQAorcGFja2FnZSBjb20uaW50ZWxsaWouY29kZUluc2lnaHQuZGFlbW9uLnF1aWNrRml4OworCisKK3B1YmxpYyBjbGFzcyBSZXVzZVZhcmlhYmxlRGVjbGFyYXRpb25UZXN0IGV4dGVuZHMgTGlnaHRRdWlja0ZpeFRlc3RDYXNlIHsKKworICBwdWJsaWMgdm9pZCB0ZXN0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7IGRvQWxsVGVzdHMoKTsgfQorCisgIEBPdmVycmlkZQorICBwcm90ZWN0ZWQgU3RyaW5nIGdldEJhc2VQYXRoKCkgeworICAgIHJldHVybiAiL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9yZXVzZVZhcmlhYmxlRGVjbGFyYXRpb24iOworICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovY29kZUluc2lnaHQvZGFlbW9uL3F1aWNrRml4L1NhZmVWYXJhcmdzQ2FuQmVVc2VkVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNpZ2h0L2RhZW1vbi9xdWlja0ZpeC9TYWZlVmFyYXJnc0NhbkJlVXNlZFRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YjcyMTJlCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNpZ2h0L2RhZW1vbi9xdWlja0ZpeC9TYWZlVmFyYXJnc0NhbkJlVXNlZFRlc3QuamF2YQpAQCAtMCwwICsxLDM3IEBACisvKgorICogQ29weXJpZ2h0IDIwMDAtMjAxMSBKZXRCcmFpbnMgcy5yLm8uCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworcGFja2FnZSBjb20uaW50ZWxsaWouY29kZUluc2lnaHQuZGFlbW9uLnF1aWNrRml4OworCitpbXBvcnQgY29tLmludGVsbGlqLmNvZGVJbnNwZWN0aW9uLkxvY2FsSW5zcGVjdGlvblRvb2w7CitpbXBvcnQgY29tLmludGVsbGlqLmNvZGVJbnNwZWN0aW9uLlBvc3NpYmxlSGVhcFBvbGx1dGlvblZhcmFyZ3NJbnNwZWN0aW9uOworCisKK3B1YmxpYyBjbGFzcyBTYWZlVmFyYXJnc0NhbkJlVXNlZFRlc3QgZXh0ZW5kcyBMaWdodFF1aWNrRml4VGVzdENhc2UgeworICBAT3ZlcnJpZGUKKyAgcHJvdGVjdGVkIExvY2FsSW5zcGVjdGlvblRvb2xbXSBjb25maWd1cmVMb2NhbEluc3BlY3Rpb25Ub29scygpIHsKKyAgICByZXR1cm4gbmV3IExvY2FsSW5zcGVjdGlvblRvb2xbXXsKKyAgICAgIG5ldyBQb3NzaWJsZUhlYXBQb2xsdXRpb25WYXJhcmdzSW5zcGVjdGlvbigpLAorICAgIH07CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7IGRvQWxsVGVzdHMoKTsgfQorCisgIEBPdmVycmlkZQorICBwcm90ZWN0ZWQgU3RyaW5nIGdldEJhc2VQYXRoKCkgeworICAgIHJldHVybiAiL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9zYWZlVmFyYXJncyI7CisgIH0KKworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9jb2RlSW5zaWdodC9kYWVtb24vcXVpY2tGaXgvU2ltcGxpZnkyRGlhbW9uZEluc3BlY3Rpb25zVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNpZ2h0L2RhZW1vbi9xdWlja0ZpeC9TaW1wbGlmeTJEaWFtb25kSW5zcGVjdGlvbnNUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzYxMzZiNQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9jb2RlSW5zaWdodC9kYWVtb24vcXVpY2tGaXgvU2ltcGxpZnkyRGlhbW9uZEluc3BlY3Rpb25zVGVzdC5qYXZhCkBAIC0wLDAgKzEsMzggQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwMC0yMDExIEpldEJyYWlucyBzLnIuby4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCitwYWNrYWdlIGNvbS5pbnRlbGxpai5jb2RlSW5zaWdodC5kYWVtb24ucXVpY2tGaXg7CisKK2ltcG9ydCBjb20uaW50ZWxsaWouY29kZUluc3BlY3Rpb24uRXhwbGljaXRUeXBlQ2FuQmVEaWFtb25kSW5zcGVjdGlvbjsKK2ltcG9ydCBjb20uaW50ZWxsaWouY29kZUluc3BlY3Rpb24uTG9jYWxJbnNwZWN0aW9uVG9vbDsKKworCisvL3RvZG8gdGVzdDMgc2hvdWxkIGJlIGNoZWNrZWQgaWYgaXQgY29tcGlsZXMgLSBhcyBub3cgamF2YWMgaW5mZXJzIE9iamVjdCBpbnN0ZWFkIG9mIFN0cmluZz8hCitwdWJsaWMgY2xhc3MgU2ltcGxpZnkyRGlhbW9uZEluc3BlY3Rpb25zVGVzdCBleHRlbmRzIExpZ2h0UXVpY2tGaXhUZXN0Q2FzZSB7CisgIEBPdmVycmlkZQorICBwcm90ZWN0ZWQgTG9jYWxJbnNwZWN0aW9uVG9vbFtdIGNvbmZpZ3VyZUxvY2FsSW5zcGVjdGlvblRvb2xzKCkgeworICAgIHJldHVybiBuZXcgTG9jYWxJbnNwZWN0aW9uVG9vbFtdeworICAgICAgbmV3IEV4cGxpY2l0VHlwZUNhbkJlRGlhbW9uZEluc3BlY3Rpb24oKSwKKyAgICB9OworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdCgpIHRocm93cyBFeGNlcHRpb24geyBkb0FsbFRlc3RzKCk7IH0KKworICBAT3ZlcnJpZGUKKyAgcHJvdGVjdGVkIFN0cmluZyBnZXRCYXNlUGF0aCgpIHsKKyAgICByZXR1cm4gIi9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvZXhwbGljaXQyZGlhbW9uZCI7CisgIH0KKworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9jb2RlSW5zaWdodC9kYWVtb24vcXVpY2tGaXgvU2ltcGxpZnlCb29sZWFuRXhwcmVzc2lvblRlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9jb2RlSW5zaWdodC9kYWVtb24vcXVpY2tGaXgvU2ltcGxpZnlCb29sZWFuRXhwcmVzc2lvblRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNDZiMTQ1Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNpZ2h0L2RhZW1vbi9xdWlja0ZpeC9TaW1wbGlmeUJvb2xlYW5FeHByZXNzaW9uVGVzdC5qYXZhCkBAIC0wLDAgKzEsMTMgQEAKK3BhY2thZ2UgY29tLmludGVsbGlqLmNvZGVJbnNpZ2h0LmRhZW1vbi5xdWlja0ZpeDsKKworaW1wb3J0IGNvbS5pbnRlbGxpai5jb2RlSW5zaWdodC5kYWVtb24uTGlnaHRJbnRlbnRpb25BY3Rpb25UZXN0Q2FzZTsKKworcHVibGljIGNsYXNzIFNpbXBsaWZ5Qm9vbGVhbkV4cHJlc3Npb25UZXN0IGV4dGVuZHMgTGlnaHRJbnRlbnRpb25BY3Rpb25UZXN0Q2FzZSB7CisgIHB1YmxpYyB2b2lkIHRlc3QoKSB0aHJvd3MgRXhjZXB0aW9uIHsgZG9BbGxUZXN0cygpOyB9CisKKyAgQE92ZXJyaWRlCisgIHByb3RlY3RlZCBTdHJpbmcgZ2V0QmFzZVBhdGgoKSB7CisgICAgcmV0dXJuICIvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3NpbXBsaWZ5Qm9vbGVhbkV4cHJlc3Npb24iOworICB9Cit9CisKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9jb2RlSW5zaWdodC9kYWVtb24vcXVpY2tGaXgvU3RhdGljSW1wb3J0TWV0aG9kVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNpZ2h0L2RhZW1vbi9xdWlja0ZpeC9TdGF0aWNJbXBvcnRNZXRob2RUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWEwZjgyNwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9jb2RlSW5zaWdodC9kYWVtb24vcXVpY2tGaXgvU3RhdGljSW1wb3J0TWV0aG9kVGVzdC5qYXZhCkBAIC0wLDAgKzEsMTEgQEAKK3BhY2thZ2UgY29tLmludGVsbGlqLmNvZGVJbnNpZ2h0LmRhZW1vbi5xdWlja0ZpeDsKKworcHVibGljIGNsYXNzIFN0YXRpY0ltcG9ydE1ldGhvZFRlc3QgZXh0ZW5kcyBMaWdodFF1aWNrRml4MTVUZXN0Q2FzZSB7CisKKyAgcHVibGljIHZvaWQgdGVzdCgpIHRocm93cyBFeGNlcHRpb24geyBkb0FsbFRlc3RzKCk7IH0KKworICBAT3ZlcnJpZGUKKyAgcHJvdGVjdGVkIFN0cmluZyBnZXRCYXNlUGF0aCgpIHsKKyAgICByZXR1cm4gIi9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvc3RhdGljSW1wb3J0TWV0aG9kIjsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNpZ2h0L2RhZW1vbi9xdWlja0ZpeC9TdXBlck1ldGhvZFJldHVyblRlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9jb2RlSW5zaWdodC9kYWVtb24vcXVpY2tGaXgvU3VwZXJNZXRob2RSZXR1cm5UZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODMwODNjNAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9jb2RlSW5zaWdodC9kYWVtb24vcXVpY2tGaXgvU3VwZXJNZXRob2RSZXR1cm5UZXN0LmphdmEKQEAgLTAsMCArMSwxNiBAQAorCitwYWNrYWdlIGNvbS5pbnRlbGxpai5jb2RlSW5zaWdodC5kYWVtb24ucXVpY2tGaXg7CisKKworCitwdWJsaWMgY2xhc3MgU3VwZXJNZXRob2RSZXR1cm5UZXN0IGV4dGVuZHMgTGlnaHRRdWlja0ZpeFRlc3RDYXNlIHsKKworICBwdWJsaWMgdm9pZCB0ZXN0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7ZG9BbGxUZXN0cygpO30KKworICBAT3ZlcnJpZGUKKyAgcHJvdGVjdGVkIFN0cmluZyBnZXRCYXNlUGF0aCgpIHsKKyAgICByZXR1cm4gIi9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvc3VwZXJNZXRob2RSZXR1cm4iOworICB9CisKK30KKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNpZ2h0L2RhZW1vbi9xdWlja0ZpeC9TdXBwcmVzczE1SW5zcGVjdGlvbnNUZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovY29kZUluc2lnaHQvZGFlbW9uL3F1aWNrRml4L1N1cHByZXNzMTVJbnNwZWN0aW9uc1Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OTMxZDE3Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNpZ2h0L2RhZW1vbi9xdWlja0ZpeC9TdXBwcmVzczE1SW5zcGVjdGlvbnNUZXN0LmphdmEKQEAgLTAsMCArMSw1OCBAQAorCisvKgorICogQ29weXJpZ2h0IDIwMDAtMjAxMiBKZXRCcmFpbnMgcy5yLm8uCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworcGFja2FnZSBjb20uaW50ZWxsaWouY29kZUluc2lnaHQuZGFlbW9uLnF1aWNrRml4OworCitpbXBvcnQgY29tLmludGVsbGlqLmNvZGVJbnNwZWN0aW9uLkxvY2FsSW5zcGVjdGlvblRvb2w7CitpbXBvcnQgY29tLmludGVsbGlqLmNvZGVJbnNwZWN0aW9uLmFjY2Vzc1N0YXRpY1ZpYUluc3RhbmNlLkFjY2Vzc1N0YXRpY1ZpYUluc3RhbmNlOworaW1wb3J0IGNvbS5pbnRlbGxpai5jb2RlSW5zcGVjdGlvbi5kZXByZWNhdGlvbi5EZXByZWNhdGlvbkluc3BlY3Rpb247CitpbXBvcnQgY29tLmludGVsbGlqLmNvZGVJbnNwZWN0aW9uLmV4Lkdsb2JhbEluc3BlY3Rpb25Ub29sV3JhcHBlcjsKK2ltcG9ydCBjb20uaW50ZWxsaWouY29kZUluc3BlY3Rpb24uamF2YURvYy5KYXZhRG9jUmVmZXJlbmNlSW5zcGVjdGlvbjsKK2ltcG9ydCBjb20uaW50ZWxsaWouY29kZUluc3BlY3Rpb24uc2lsbHlBc3NpZ25tZW50LlNpbGx5QXNzaWdubWVudEluc3BlY3Rpb247CitpbXBvcnQgY29tLmludGVsbGlqLmNvZGVJbnNwZWN0aW9uLnVuY2hlY2tlZFdhcm5pbmdzLlVuY2hlY2tlZFdhcm5pbmdMb2NhbEluc3BlY3Rpb247CitpbXBvcnQgY29tLmludGVsbGlqLmNvZGVJbnNwZWN0aW9uLnVubmVlZGVkVGhyb3dzLlJlZHVuZGFudFRocm93c0RlY2xhcmF0aW9uOworaW1wb3J0IGNvbS5pbnRlbGxpai5jb2RlSW5zcGVjdGlvbi51bnVzZWRQYXJhbWV0ZXJzLlVudXNlZFBhcmFtZXRlcnNJbnNwZWN0aW9uOworaW1wb3J0IGNvbS5pbnRlbGxpai5jb2RlSW5zcGVjdGlvbi51bnVzZWRTeW1ib2wuVW51c2VkU3ltYm9sTG9jYWxJbnNwZWN0aW9uOworCisKK3B1YmxpYyBjbGFzcyBTdXBwcmVzczE1SW5zcGVjdGlvbnNUZXN0IGV4dGVuZHMgTGlnaHRRdWlja0ZpeFRlc3RDYXNlIHsKKyAgQE92ZXJyaWRlCisgIHByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgc3VwZXIuc2V0VXAoKTsKKyAgICBlbmFibGVJbnNwZWN0aW9uVG9vbChuZXcgR2xvYmFsSW5zcGVjdGlvblRvb2xXcmFwcGVyKG5ldyBVbnVzZWRQYXJhbWV0ZXJzSW5zcGVjdGlvbigpKSk7CisgIH0KKworICBAT3ZlcnJpZGUKKyAgcHJvdGVjdGVkIExvY2FsSW5zcGVjdGlvblRvb2xbXSBjb25maWd1cmVMb2NhbEluc3BlY3Rpb25Ub29scygpIHsKKyAgICByZXR1cm4gbmV3IExvY2FsSW5zcGVjdGlvblRvb2xbXXsKKyAgICAgIG5ldyBSZWR1bmRhbnRUaHJvd3NEZWNsYXJhdGlvbigpLAorICAgICAgbmV3IFNpbGx5QXNzaWdubWVudEluc3BlY3Rpb24oKSwKKyAgICAgIG5ldyBBY2Nlc3NTdGF0aWNWaWFJbnN0YW5jZSgpLAorICAgICAgbmV3IERlcHJlY2F0aW9uSW5zcGVjdGlvbigpLAorICAgICAgbmV3IEphdmFEb2NSZWZlcmVuY2VJbnNwZWN0aW9uKCksCisgICAgICBuZXcgVW51c2VkU3ltYm9sTG9jYWxJbnNwZWN0aW9uKCksCisgICAgICBuZXcgVW5jaGVja2VkV2FybmluZ0xvY2FsSW5zcGVjdGlvbigpCisgICAgfTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3QoKSB0aHJvd3MgRXhjZXB0aW9uIHsgZG9BbGxUZXN0cygpOyB9CisKKyAgQE92ZXJyaWRlCisgIHByb3RlY3RlZCBTdHJpbmcgZ2V0QmFzZVBhdGgoKSB7CisgICAgcmV0dXJuICIvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3N1cHByZXNzMTVJbnNwZWN0aW9ucyI7CisgIH0KKworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9jb2RlSW5zaWdodC9kYWVtb24vcXVpY2tGaXgvU3VwcHJlc3NMb2NhbEluc3BlY3Rpb25UZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovY29kZUluc2lnaHQvZGFlbW9uL3F1aWNrRml4L1N1cHByZXNzTG9jYWxJbnNwZWN0aW9uVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMwOTZmZjUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovY29kZUluc2lnaHQvZGFlbW9uL3F1aWNrRml4L1N1cHByZXNzTG9jYWxJbnNwZWN0aW9uVGVzdC5qYXZhCkBAIC0wLDAgKzEsMzYgQEAKKworcGFja2FnZSBjb20uaW50ZWxsaWouY29kZUluc2lnaHQuZGFlbW9uLnF1aWNrRml4OworCitpbXBvcnQgY29tLmludGVsbGlqLmNvZGVJbnNwZWN0aW9uLkxvY2FsSW5zcGVjdGlvblRvb2w7CitpbXBvcnQgY29tLmludGVsbGlqLmNvZGVJbnNwZWN0aW9uLmxvY2FsQ2FuQmVGaW5hbC5Mb2NhbENhbkJlRmluYWw7CitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkucm9vdHMuTGFuZ3VhZ2VMZXZlbFByb2plY3RFeHRlbnNpb247CitpbXBvcnQgY29tLmludGVsbGlqLnBvbS5qYXZhLkxhbmd1YWdlTGV2ZWw7CisKKworcHVibGljIGNsYXNzIFN1cHByZXNzTG9jYWxJbnNwZWN0aW9uVGVzdCBleHRlbmRzIExpZ2h0UXVpY2tGaXhUZXN0Q2FzZSB7CisKKyAgQE92ZXJyaWRlCisgIHByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgc3VwZXIuc2V0VXAoKTsKKyAgICBMYW5ndWFnZUxldmVsUHJvamVjdEV4dGVuc2lvbi5nZXRJbnN0YW5jZShnZXRQcm9qZWN0KCkpLnNldExhbmd1YWdlTGV2ZWwoTGFuZ3VhZ2VMZXZlbC5KREtfMV8zKTsKKyAgfQorCisgIEBPdmVycmlkZQorICBwcm90ZWN0ZWQgTG9jYWxJbnNwZWN0aW9uVG9vbFtdIGNvbmZpZ3VyZUxvY2FsSW5zcGVjdGlvblRvb2xzKCkgeworICAgIHJldHVybiBuZXcgTG9jYWxJbnNwZWN0aW9uVG9vbFtde25ldyBMb2NhbENhbkJlRmluYWwoKX07CisgIH0KKworICBAT3ZlcnJpZGUKKyAgcHJvdGVjdGVkIHZvaWQgdGVhckRvd24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBzdXBlci50ZWFyRG93bigpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdCgpIHRocm93cyBFeGNlcHRpb24geyBkb0FsbFRlc3RzKCk7IH0KKworICBAT3ZlcnJpZGUKKyAgcHJvdGVjdGVkIFN0cmluZyBnZXRCYXNlUGF0aCgpIHsKKyAgICByZXR1cm4gIi9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvc3VwcHJlc3NMb2NhbEluc3BlY3Rpb24iOworICB9CisKK30KKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNpZ2h0L2RhZW1vbi9xdWlja0ZpeC9TdXBwcmVzc05vbkluc3BlY3Rpb25zVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNpZ2h0L2RhZW1vbi9xdWlja0ZpeC9TdXBwcmVzc05vbkluc3BlY3Rpb25zVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA0YTZhMDUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovY29kZUluc2lnaHQvZGFlbW9uL3F1aWNrRml4L1N1cHByZXNzTm9uSW5zcGVjdGlvbnNUZXN0LmphdmEKQEAgLTAsMCArMSw0NSBAQAorCitwYWNrYWdlIGNvbS5pbnRlbGxpai5jb2RlSW5zaWdodC5kYWVtb24ucXVpY2tGaXg7CisKK2ltcG9ydCBjb20uaW50ZWxsaWouY29kZUluc3BlY3Rpb24uTG9jYWxJbnNwZWN0aW9uVG9vbDsKK2ltcG9ydCBjb20uaW50ZWxsaWouY29kZUluc3BlY3Rpb24uYWNjZXNzU3RhdGljVmlhSW5zdGFuY2UuQWNjZXNzU3RhdGljVmlhSW5zdGFuY2U7CitpbXBvcnQgY29tLmludGVsbGlqLmNvZGVJbnNwZWN0aW9uLmRlcHJlY2F0aW9uLkRlcHJlY2F0aW9uSW5zcGVjdGlvbjsKK2ltcG9ydCBjb20uaW50ZWxsaWouY29kZUluc3BlY3Rpb24uamF2YURvYy5KYXZhRG9jUmVmZXJlbmNlSW5zcGVjdGlvbjsKK2ltcG9ydCBjb20uaW50ZWxsaWouY29kZUluc3BlY3Rpb24uc2lsbHlBc3NpZ25tZW50LlNpbGx5QXNzaWdubWVudEluc3BlY3Rpb247CitpbXBvcnQgY29tLmludGVsbGlqLmNvZGVJbnNwZWN0aW9uLnVuY2hlY2tlZFdhcm5pbmdzLlVuY2hlY2tlZFdhcm5pbmdMb2NhbEluc3BlY3Rpb247CitpbXBvcnQgY29tLmludGVsbGlqLmNvZGVJbnNwZWN0aW9uLnVubmVlZGVkVGhyb3dzLlJlZHVuZGFudFRocm93c0RlY2xhcmF0aW9uOworaW1wb3J0IGNvbS5pbnRlbGxpai5jb2RlSW5zcGVjdGlvbi51bnVzZWRTeW1ib2wuVW51c2VkU3ltYm9sTG9jYWxJbnNwZWN0aW9uOworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLnJvb3RzLkxhbmd1YWdlTGV2ZWxQcm9qZWN0RXh0ZW5zaW9uOworaW1wb3J0IGNvbS5pbnRlbGxpai5wb20uamF2YS5MYW5ndWFnZUxldmVsOworCisKK3B1YmxpYyBjbGFzcyBTdXBwcmVzc05vbkluc3BlY3Rpb25zVGVzdCBleHRlbmRzIExpZ2h0UXVpY2tGaXhUZXN0Q2FzZSB7CisKKyAgQE92ZXJyaWRlCisgIHByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgc3VwZXIuc2V0VXAoKTsKKyAgICBMYW5ndWFnZUxldmVsUHJvamVjdEV4dGVuc2lvbi5nZXRJbnN0YW5jZShnZXRQcm9qZWN0KCkpLnNldExhbmd1YWdlTGV2ZWwoTGFuZ3VhZ2VMZXZlbC5KREtfMV8zKTsKKyAgfQorCisgIEBPdmVycmlkZQorICBwcm90ZWN0ZWQgTG9jYWxJbnNwZWN0aW9uVG9vbFtdIGNvbmZpZ3VyZUxvY2FsSW5zcGVjdGlvblRvb2xzKCkgeworICAgIHJldHVybiBuZXcgTG9jYWxJbnNwZWN0aW9uVG9vbFtdeworICAgICAgbmV3IFJlZHVuZGFudFRocm93c0RlY2xhcmF0aW9uKCksCisgICAgICBuZXcgU2lsbHlBc3NpZ25tZW50SW5zcGVjdGlvbigpLAorICAgICAgbmV3IEFjY2Vzc1N0YXRpY1ZpYUluc3RhbmNlKCksCisgICAgICBuZXcgRGVwcmVjYXRpb25JbnNwZWN0aW9uKCksCisgICAgICBuZXcgSmF2YURvY1JlZmVyZW5jZUluc3BlY3Rpb24oKSwKKyAgICAgIG5ldyBVbnVzZWRTeW1ib2xMb2NhbEluc3BlY3Rpb24oKSwKKyAgICAgIG5ldyBVbmNoZWNrZWRXYXJuaW5nTG9jYWxJbnNwZWN0aW9uKCkKKyAgICB9OworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdCgpIHRocm93cyBFeGNlcHRpb24geyBkb0FsbFRlc3RzKCk7IH0KKworICBAT3ZlcnJpZGUKKyAgcHJvdGVjdGVkIFN0cmluZyBnZXRCYXNlUGF0aCgpIHsKKyAgICByZXR1cm4gIi9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvc3VwcHJlc3NOb25JbnNwZWN0aW9ucyI7CisgIH0KKworfQorCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovY29kZUluc2lnaHQvZGFlbW9uL3F1aWNrRml4L1N1cnJvdW5kV2l0aEFycmF5Rml4VGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNpZ2h0L2RhZW1vbi9xdWlja0ZpeC9TdXJyb3VuZFdpdGhBcnJheUZpeFRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yODdlZGVhCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNpZ2h0L2RhZW1vbi9xdWlja0ZpeC9TdXJyb3VuZFdpdGhBcnJheUZpeFRlc3QuamF2YQpAQCAtMCwwICsxLDMyIEBACisvKgorICogQ29weXJpZ2h0IDIwMDAtMjAxMiBKZXRCcmFpbnMgcy5yLm8uCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisvKgorICogVXNlcjogYW5uYQorICogRGF0ZTogMjEtTWFyLTIwMDgKKyAqLworcGFja2FnZSBjb20uaW50ZWxsaWouY29kZUluc2lnaHQuZGFlbW9uLnF1aWNrRml4OworCitwdWJsaWMgY2xhc3MgU3Vycm91bmRXaXRoQXJyYXlGaXhUZXN0IGV4dGVuZHMgTGlnaHRRdWlja0ZpeDE1VGVzdENhc2UgeworICAgcHVibGljIHZvaWQgdGVzdCgpIHRocm93cyBFeGNlcHRpb24geworICAgICBkb0FsbFRlc3RzKCk7CisgICB9CisKKyAgQE92ZXJyaWRlCisgIHByb3RlY3RlZCBTdHJpbmcgZ2V0QmFzZVBhdGgoKSB7CisgICAgcmV0dXJuICIvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3N1cnJvdW5kV2l0aEFycmF5IjsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNpZ2h0L2RhZW1vbi9xdWlja0ZpeC9TdXJyb3VuZFdpdGhJZkZpeFRlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9jb2RlSW5zaWdodC9kYWVtb24vcXVpY2tGaXgvU3Vycm91bmRXaXRoSWZGaXhUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWE0YTE2OQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9jb2RlSW5zaWdodC9kYWVtb24vcXVpY2tGaXgvU3Vycm91bmRXaXRoSWZGaXhUZXN0LmphdmEKQEAgLTAsMCArMSw0MCBAQAorLyoKKyAqIENvcHlyaWdodCAyMDAwLTIwMTIgSmV0QnJhaW5zIHMuci5vLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworLyoKKyAqIFVzZXI6IGFubmEKKyAqIERhdGU6IDIxLU1hci0yMDA4CisgKi8KK3BhY2thZ2UgY29tLmludGVsbGlqLmNvZGVJbnNpZ2h0LmRhZW1vbi5xdWlja0ZpeDsKKworaW1wb3J0IGNvbS5pbnRlbGxpai5jb2RlSW5zcGVjdGlvbi5Mb2NhbEluc3BlY3Rpb25Ub29sOworaW1wb3J0IGNvbS5pbnRlbGxpai5jb2RlSW5zcGVjdGlvbi5kYXRhRmxvdy5EYXRhRmxvd0luc3BlY3Rpb247CisKK3B1YmxpYyBjbGFzcyBTdXJyb3VuZFdpdGhJZkZpeFRlc3QgZXh0ZW5kcyBMaWdodFF1aWNrRml4VGVzdENhc2UgeworICBAT3ZlcnJpZGUKKyAgcHJvdGVjdGVkIExvY2FsSW5zcGVjdGlvblRvb2xbXSBjb25maWd1cmVMb2NhbEluc3BlY3Rpb25Ub29scygpIHsKKyAgICByZXR1cm4gbmV3IExvY2FsSW5zcGVjdGlvblRvb2xbXXtuZXcgRGF0YUZsb3dJbnNwZWN0aW9uKCl9OworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdCgpIHRocm93cyBFeGNlcHRpb24geworICAgICBkb0FsbFRlc3RzKCk7CisgICB9CisKKyAgQE92ZXJyaWRlCisgIHByb3RlY3RlZCBTdHJpbmcgZ2V0QmFzZVBhdGgoKSB7CisgICAgcmV0dXJuICIvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3N1cnJvdW5kV2l0aElmIjsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9jb2RlSW5zaWdodC9kYWVtb24vcXVpY2tGaXgvU3Vycm91bmRXaXRoVHJ5Q2F0Y2hUZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovY29kZUluc2lnaHQvZGFlbW9uL3F1aWNrRml4L1N1cnJvdW5kV2l0aFRyeUNhdGNoVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIwN2RjZjM4Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNpZ2h0L2RhZW1vbi9xdWlja0ZpeC9TdXJyb3VuZFdpdGhUcnlDYXRjaFRlc3QuamF2YQpAQCAtMCwwICsxLDI3IEBACisvKgorICogQ29weXJpZ2h0IDIwMDAtMjAxMSBKZXRCcmFpbnMgcy5yLm8uCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworcGFja2FnZSBjb20uaW50ZWxsaWouY29kZUluc2lnaHQuZGFlbW9uLnF1aWNrRml4OworCitwdWJsaWMgY2xhc3MgU3Vycm91bmRXaXRoVHJ5Q2F0Y2hUZXN0IGV4dGVuZHMgTGlnaHRRdWlja0ZpeFRlc3RDYXNlIHsKKyAgcHVibGljIHZvaWQgdGVzdCgpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvQWxsVGVzdHMoKTsKKyAgfQorCisgIEBPdmVycmlkZQorICBwcm90ZWN0ZWQgU3RyaW5nIGdldEJhc2VQYXRoKCkgeworICAgIHJldHVybiAiL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9zdXJyb3VuZFdpdGhUcnkiOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNpZ2h0L2RhZW1vbi9xdWlja0ZpeC9VbmltcGxlbWVudEludGVudGlvblRlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9jb2RlSW5zaWdodC9kYWVtb24vcXVpY2tGaXgvVW5pbXBsZW1lbnRJbnRlbnRpb25UZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWNjZDU5MgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9jb2RlSW5zaWdodC9kYWVtb24vcXVpY2tGaXgvVW5pbXBsZW1lbnRJbnRlbnRpb25UZXN0LmphdmEKQEAgLTAsMCArMSwyOCBAQAorLyoKKyAqIENvcHlyaWdodCAyMDAwLTIwMTAgSmV0QnJhaW5zIHMuci5vLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KK3BhY2thZ2UgY29tLmludGVsbGlqLmNvZGVJbnNpZ2h0LmRhZW1vbi5xdWlja0ZpeDsKKworcHVibGljIGNsYXNzIFVuaW1wbGVtZW50SW50ZW50aW9uVGVzdCBleHRlbmRzIExpZ2h0UXVpY2tGaXhUZXN0Q2FzZSB7CisKKyAgcHVibGljIHZvaWQgdGVzdCgpIHRocm93cyBFeGNlcHRpb24geyBkb0FsbFRlc3RzKCk7IH0KKworICBAT3ZlcnJpZGUKKyAgcHJvdGVjdGVkIFN0cmluZyBnZXRCYXNlUGF0aCgpIHsKKyAgICByZXR1cm4gIi9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvdW5pbXBsZW1lbnQiOworICB9CisKK30KKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNpZ2h0L2RhZW1vbi9xdWlja0ZpeC9WYXJpYWJsZUFjY2Vzc0Zyb21Jbm5lckNsYXNzMThUZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovY29kZUluc2lnaHQvZGFlbW9uL3F1aWNrRml4L1ZhcmlhYmxlQWNjZXNzRnJvbUlubmVyQ2xhc3MxOFRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kN2M0ZTc2MwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9jb2RlSW5zaWdodC9kYWVtb24vcXVpY2tGaXgvVmFyaWFibGVBY2Nlc3NGcm9tSW5uZXJDbGFzczE4VGVzdC5qYXZhCkBAIC0wLDAgKzEsNDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwMC0yMDEyIEpldEJyYWlucyBzLnIuby4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCitwYWNrYWdlIGNvbS5pbnRlbGxpai5jb2RlSW5zaWdodC5kYWVtb24ucXVpY2tGaXg7CisKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS5hcHBsaWNhdGlvbi5BcHBsaWNhdGlvbk1hbmFnZXI7CisKKy8qKgorICogVXNlcjogYW5uYQorICovCitwdWJsaWMgY2xhc3MgVmFyaWFibGVBY2Nlc3NGcm9tSW5uZXJDbGFzczE4VGVzdCBleHRlbmRzIExpZ2h0UXVpY2tGaXhUZXN0Q2FzZSB7CisgIHB1YmxpYyB2b2lkIHRlc3QoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb0FsbFRlc3RzKCk7CisgIH0KKworICBAT3ZlcnJpZGUKKyAgcHJvdGVjdGVkIFN0cmluZyBnZXRCYXNlUGF0aCgpIHsKKyAgICByZXR1cm4gIi9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvbXVzdEJlRmluYWwxOCI7CisgIH0KKworICBAT3ZlcnJpZGUKKyAgcHJvdGVjdGVkIHZvaWQgYmVmb3JlQWN0aW9uU3RhcnRlZChTdHJpbmcgdGVzdE5hbWUsIFN0cmluZyBjb250ZW50cykgeworICAgIGZvciAoaW50IGk9MDtpPDEwO2krKykgeworICAgICAgQXBwbGljYXRpb25NYW5hZ2VyLmdldEFwcGxpY2F0aW9uKCkucnVuV3JpdGVBY3Rpb24obmV3IFJ1bm5hYmxlKCkgeworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIHZvaWQgcnVuKCkgeworICAgICAgICAgIG15RWRpdG9yLmdldERvY3VtZW50KCkuaW5zZXJ0U3RyaW5nKG15RWRpdG9yLmdldENhcmV0TW9kZWwoKS5nZXRPZmZzZXQoKSwgIi8vIik7CisgICAgICAgIH0KKyAgICAgIH0pOworCisgICAgICBkb0hpZ2hsaWdodGluZygpOworICAgICAgZGVsZXRlKCk7CisgICAgICBkZWxldGUoKTsKKyAgICAgIGRvSGlnaGxpZ2h0aW5nKCk7CisgICAgfQorICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovY29kZUluc2lnaHQvZGFlbW9uL3F1aWNrRml4L1ZhcmlhYmxlQWNjZXNzRnJvbUlubmVyQ2xhc3NUZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovY29kZUluc2lnaHQvZGFlbW9uL3F1aWNrRml4L1ZhcmlhYmxlQWNjZXNzRnJvbUlubmVyQ2xhc3NUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOThiOGE3NAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9jb2RlSW5zaWdodC9kYWVtb24vcXVpY2tGaXgvVmFyaWFibGVBY2Nlc3NGcm9tSW5uZXJDbGFzc1Rlc3QuamF2YQpAQCAtMCwwICsxLDE4IEBACisKK3BhY2thZ2UgY29tLmludGVsbGlqLmNvZGVJbnNpZ2h0LmRhZW1vbi5xdWlja0ZpeDsKKworaW1wb3J0IGNvbS5pbnRlbGxpai5wb20uamF2YS5MYW5ndWFnZUxldmVsOworCitwdWJsaWMgY2xhc3MgVmFyaWFibGVBY2Nlc3NGcm9tSW5uZXJDbGFzc1Rlc3QgZXh0ZW5kcyBWYXJpYWJsZUFjY2Vzc0Zyb21Jbm5lckNsYXNzMThUZXN0IHsKKworICBAT3ZlcnJpZGUKKyAgcHJvdGVjdGVkIFN0cmluZyBnZXRCYXNlUGF0aCgpIHsKKyAgICByZXR1cm4gIi9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvbXVzdEJlRmluYWwiOworICB9CisKKyAgQE92ZXJyaWRlCisgIHByb3RlY3RlZCBMYW5ndWFnZUxldmVsIGdldExhbmd1YWdlTGV2ZWwoKSB7CisgICAgcmV0dXJuIExhbmd1YWdlTGV2ZWwuSkRLXzFfNzsKKyAgfQorfQorCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovY29kZUluc2lnaHQvZGFlbW9uL3F1aWNrRml4L1ZhcmlhYmxlQXJyYXlUeXBlVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNpZ2h0L2RhZW1vbi9xdWlja0ZpeC9WYXJpYWJsZUFycmF5VHlwZVRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZDk3NjVhCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNpZ2h0L2RhZW1vbi9xdWlja0ZpeC9WYXJpYWJsZUFycmF5VHlwZVRlc3QuamF2YQpAQCAtMCwwICsxLDEwIEBACitwYWNrYWdlIGNvbS5pbnRlbGxpai5jb2RlSW5zaWdodC5kYWVtb24ucXVpY2tGaXg7CisKK3B1YmxpYyBjbGFzcyBWYXJpYWJsZUFycmF5VHlwZVRlc3QgZXh0ZW5kcyBMaWdodFF1aWNrRml4VGVzdENhc2UgeworICBwdWJsaWMgdm9pZCB0ZXN0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7IGRvQWxsVGVzdHMoKTsgfQorCisgIEBPdmVycmlkZQorICBwcm90ZWN0ZWQgU3RyaW5nIGdldEJhc2VQYXRoKCkgeworICAgIHJldHVybiAiL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC92YXJpYWJsZUFycmF5VHlwZSI7CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9jb2RlSW5zaWdodC9kYWVtb24vcXVpY2tGaXgvVmFyaWFibGVQYXJhbWV0ZXJpemVkVHlwZVRlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9jb2RlSW5zaWdodC9kYWVtb24vcXVpY2tGaXgvVmFyaWFibGVQYXJhbWV0ZXJpemVkVHlwZVRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YTdmYTliCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNpZ2h0L2RhZW1vbi9xdWlja0ZpeC9WYXJpYWJsZVBhcmFtZXRlcml6ZWRUeXBlVGVzdC5qYXZhCkBAIC0wLDAgKzEsMTMgQEAKK3BhY2thZ2UgY29tLmludGVsbGlqLmNvZGVJbnNpZ2h0LmRhZW1vbi5xdWlja0ZpeDsKKworcHVibGljIGNsYXNzIFZhcmlhYmxlUGFyYW1ldGVyaXplZFR5cGVUZXN0IGV4dGVuZHMgTGlnaHRRdWlja0ZpeDE1VGVzdENhc2UgeworCisgIHB1YmxpYyB2b2lkIHRlc3QoKSB0aHJvd3MgRXhjZXB0aW9uIHsgZG9BbGxUZXN0cygpOyB9CisKKyAgQE92ZXJyaWRlCisgIHByb3RlY3RlZCBTdHJpbmcgZ2V0QmFzZVBhdGgoKSB7CisgICAgcmV0dXJuICIvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3ZhcmlhYmxlUGFyYW1ldGVyaXplZFR5cGUiOworICB9CisKK30KKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNpZ2h0L2RhZW1vbi9xdWlja0ZpeC9WYXJpYWJsZVR5cGVGcm9tQ2FsbFRlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9jb2RlSW5zaWdodC9kYWVtb24vcXVpY2tGaXgvVmFyaWFibGVUeXBlRnJvbUNhbGxUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmY5NDBlOQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9jb2RlSW5zaWdodC9kYWVtb24vcXVpY2tGaXgvVmFyaWFibGVUeXBlRnJvbUNhbGxUZXN0LmphdmEKQEAgLTAsMCArMSwyOSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDAwLTIwMTAgSmV0QnJhaW5zIHMuci5vLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KK3BhY2thZ2UgY29tLmludGVsbGlqLmNvZGVJbnNpZ2h0LmRhZW1vbi5xdWlja0ZpeDsKKworCitwdWJsaWMgY2xhc3MgVmFyaWFibGVUeXBlRnJvbUNhbGxUZXN0IGV4dGVuZHMgTGlnaHRRdWlja0ZpeDE1VGVzdENhc2UgeworCisgIHB1YmxpYyB2b2lkIHRlc3QoKSB0aHJvd3MgRXhjZXB0aW9uIHsgZG9BbGxUZXN0cygpOyB9CisKKyAgQE92ZXJyaWRlCisgIHByb3RlY3RlZCBTdHJpbmcgZ2V0QmFzZVBhdGgoKSB7CisgICAgcmV0dXJuICIvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3ZhclR5cGVGcm9tQ2FsbCI7CisgIH0KKworfQorCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovY29kZUluc2lnaHQvZGFlbW9uL3F1aWNrRml4L1ZhcmlhYmxlVHlwZVRlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9jb2RlSW5zaWdodC9kYWVtb24vcXVpY2tGaXgvVmFyaWFibGVUeXBlVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBhNjFmMWMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovY29kZUluc2lnaHQvZGFlbW9uL3F1aWNrRml4L1ZhcmlhYmxlVHlwZVRlc3QuamF2YQpAQCAtMCwwICsxLDExIEBACitwYWNrYWdlIGNvbS5pbnRlbGxpai5jb2RlSW5zaWdodC5kYWVtb24ucXVpY2tGaXg7CisKK3B1YmxpYyBjbGFzcyBWYXJpYWJsZVR5cGVUZXN0IGV4dGVuZHMgTGlnaHRRdWlja0ZpeFRlc3RDYXNlIHsKKyAgcHVibGljIHZvaWQgdGVzdCgpIHRocm93cyBFeGNlcHRpb24geyBkb0FsbFRlc3RzKCk7IH0KKworICBAT3ZlcnJpZGUKKyAgcHJvdGVjdGVkIFN0cmluZyBnZXRCYXNlUGF0aCgpIHsKKyAgICByZXR1cm4gIi9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvdmFyaWFibGVUeXBlIjsKKyAgfQorfQorCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovY29kZUluc2lnaHQvZGFlbW9uL3F1aWNrRml4L1dyYXBFeHByZXNzaW9uRml4VGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNpZ2h0L2RhZW1vbi9xdWlja0ZpeC9XcmFwRXhwcmVzc2lvbkZpeFRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MmI0NDFhCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNpZ2h0L2RhZW1vbi9xdWlja0ZpeC9XcmFwRXhwcmVzc2lvbkZpeFRlc3QuamF2YQpAQCAtMCwwICsxLDM3IEBACisvKgorICogQ29weXJpZ2h0IDIwMDAtMjAxMCBKZXRCcmFpbnMgcy5yLm8uCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworcGFja2FnZSBjb20uaW50ZWxsaWouY29kZUluc2lnaHQuZGFlbW9uLnF1aWNrRml4OworCitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkucm9vdHMuTGFuZ3VhZ2VMZXZlbFByb2plY3RFeHRlbnNpb247CitpbXBvcnQgY29tLmludGVsbGlqLnBvbS5qYXZhLkxhbmd1YWdlTGV2ZWw7CisKK3B1YmxpYyBjbGFzcyBXcmFwRXhwcmVzc2lvbkZpeFRlc3QgZXh0ZW5kcyBMaWdodFF1aWNrRml4VGVzdENhc2UgeworICBAT3ZlcnJpZGUKKyAgcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBzdXBlci5zZXRVcCgpOworICAgIExhbmd1YWdlTGV2ZWxQcm9qZWN0RXh0ZW5zaW9uLmdldEluc3RhbmNlKGdldFByb2plY3QoKSkuc2V0TGFuZ3VhZ2VMZXZlbChMYW5ndWFnZUxldmVsLkpES18xXzYpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdCgpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvQWxsVGVzdHMoKTsKKyAgfQorCisgIEBPdmVycmlkZQorICBwcm90ZWN0ZWQgU3RyaW5nIGdldEJhc2VQYXRoKCkgeworICAgIHJldHVybiAiL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC93cmFwRXhwcmVzc2lvbiI7CisgIH0KK30KKwpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNpZ2h0L2RlZmF1bHRBY3Rpb24vQ3VzdG9tRmlsZVR5cGVFZGl0b3JUZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovY29kZUluc2lnaHQvZGVmYXVsdEFjdGlvbi9DdXN0b21GaWxlVHlwZUVkaXRvclRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZDE5ZTM0Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNpZ2h0L2RlZmF1bHRBY3Rpb24vQ3VzdG9tRmlsZVR5cGVFZGl0b3JUZXN0LmphdmEKQEAgLTAsMCArMSwyMjAgQEAKK3BhY2thZ2UgY29tLmludGVsbGlqLmNvZGVJbnNpZ2h0LmRlZmF1bHRBY3Rpb247CisKK2ltcG9ydCBjb20uaW50ZWxsaWouY29kZUluc2lnaHQuZWRpdG9yQWN0aW9ucy5Db2RlQmxvY2tFbmRBY3Rpb247CitpbXBvcnQgY29tLmludGVsbGlqLmNvZGVJbnNpZ2h0LmVkaXRvckFjdGlvbnMuQ29kZUJsb2NrU3RhcnRBY3Rpb247CitpbXBvcnQgY29tLmludGVsbGlqLmlkZS5oaWdobGlnaHRlci5IaWdobGlnaHRlckZhY3Rvcnk7CitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkuZWRpdG9yLmFjdGlvblN5c3RlbS5FZGl0b3JBY3Rpb25IYW5kbGVyOworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLmVkaXRvci5oaWdobGlnaHRlci5FZGl0b3JIaWdobGlnaHRlcjsKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS5lZGl0b3IuaGlnaGxpZ2h0ZXIuSGlnaGxpZ2h0ZXJJdGVyYXRvcjsKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS5maWxlVHlwZXMuRmlsZVR5cGU7CitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkuZmlsZVR5cGVzLkZpbGVUeXBlTWFuYWdlcjsKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS5maWxlVHlwZXMuaW1wbC5BYnN0cmFjdEZpbGVUeXBlOworaW1wb3J0IGNvbS5pbnRlbGxpai5wc2kuQ3VzdG9tSGlnaGxpZ2h0ZXJUb2tlblR5cGU7CitpbXBvcnQgY29tLmludGVsbGlqLnBzaS5TdHJpbmdFc2NhcGVzVG9rZW5UeXBlczsKK2ltcG9ydCBjb20uaW50ZWxsaWoudGVzdEZyYW1ld29yay5FZGl0b3JUZXN0VXRpbDsKK2ltcG9ydCBjb20uaW50ZWxsaWoudGVzdEZyYW1ld29yay5MaWdodENvZGVJbnNpZ2h0VGVzdENhc2U7CisKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworCitpbXBvcnQgc3RhdGljIGNvbS5pbnRlbGxpai50ZXN0RnJhbWV3b3JrLkVkaXRvclRlc3RVdGlsLkJBQ0tTUEFDRV9GQUtFX0NIQVI7CisKKy8qKgorICogQGF1dGhvciBNYXhpbS5Nb3NzaWVua28KKyAqLworcHVibGljIGNsYXNzIEN1c3RvbUZpbGVUeXBlRWRpdG9yVGVzdCBleHRlbmRzIExpZ2h0Q29kZUluc2lnaHRUZXN0Q2FzZSB7CisgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBCQVNFX1BBVEggPSAiL2NvZGVJbnNpZ2h0L2RlZmF1bHRBY3Rpb24vY3VzdG9tRmlsZVR5cGUvIjsKKworICBwcml2YXRlIHZvaWQgX3Rlc3RCbG9ja05hdmlnYXRpb24oU3RyaW5nIHRlc3QsIFN0cmluZyBleHQpIHRocm93cyBFeGNlcHRpb24geworICAgIGNvbmZpZ3VyZUJ5RmlsZShCQVNFX1BBVEggKyB0ZXN0ICsgIi4iICsgZXh0KTsKKyAgICBwZXJmb3JtRW5kQmxvY2tBY3Rpb24oKTsKKyAgICBjaGVja1Jlc3VsdEJ5RmlsZShCQVNFX1BBVEggKyB0ZXN0ICsgIl9hZnRlci4iICsgZXh0KTsKKworICAgIGNvbmZpZ3VyZUJ5RmlsZShCQVNFX1BBVEggKyB0ZXN0ICsgIl9hZnRlci4iICsgZXh0KTsKKyAgICBwZXJmb3JtU3RhcnRCbG9ja0FjdGlvbigpOworICAgIGNoZWNrUmVzdWx0QnlGaWxlKEJBU0VfUEFUSCArIHRlc3QgKyAiLiIgKyBleHQpOworICB9CisKKyAgcHJpdmF0ZSBzdGF0aWMgdm9pZCBwZXJmb3JtU3RhcnRCbG9ja0FjdGlvbigpIHsKKyAgICBFZGl0b3JBY3Rpb25IYW5kbGVyIGFjdGlvbkhhbmRsZXIgPSBuZXcgQ29kZUJsb2NrU3RhcnRBY3Rpb24oKS5nZXRIYW5kbGVyKCk7CisKKyAgICBhY3Rpb25IYW5kbGVyLmV4ZWN1dGUoZ2V0RWRpdG9yKCksIGdldEN1cnJlbnRFZGl0b3JEYXRhQ29udGV4dCgpKTsKKyAgfQorCisgIHByaXZhdGUgc3RhdGljIHZvaWQgcGVyZm9ybUVuZEJsb2NrQWN0aW9uKCkgeworICAgIEVkaXRvckFjdGlvbkhhbmRsZXIgYWN0aW9uSGFuZGxlciA9IG5ldyBDb2RlQmxvY2tFbmRBY3Rpb24oKS5nZXRIYW5kbGVyKCk7CisKKyAgICBhY3Rpb25IYW5kbGVyLmV4ZWN1dGUoZ2V0RWRpdG9yKCksIGdldEN1cnJlbnRFZGl0b3JEYXRhQ29udGV4dCgpKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RCbG9ja05hdmlnYXRpb24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBfdGVzdEJsb2NrTmF2aWdhdGlvbigiYmxvY2tOYXZpZ2F0aW9uIiwiY3MiKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RJbnNlcnREZWxldGVRdW90ZXMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBjb25maWd1cmVCeUZpbGUoQkFTRV9QQVRIICsgIkluc2VydERlbGV0ZVF1b3RlLmNzIik7CisgICAgRWRpdG9yVGVzdFV0aWwucGVyZm9ybVR5cGluZ0FjdGlvbihnZXRFZGl0b3IoKSwgJyInKTsKKyAgICBjaGVja1Jlc3VsdEJ5RmlsZShCQVNFX1BBVEggKyAiSW5zZXJ0RGVsZXRlUXVvdGVfYWZ0ZXIuY3MiKTsKKworICAgIGNvbmZpZ3VyZUJ5RmlsZShCQVNFX1BBVEgrIkluc2VydERlbGV0ZVF1b3RlX2FmdGVyLmNzIik7CisgICAgRWRpdG9yVGVzdFV0aWwucGVyZm9ybVR5cGluZ0FjdGlvbihnZXRFZGl0b3IoKSwgQkFDS1NQQUNFX0ZBS0VfQ0hBUik7CisgICAgY2hlY2tSZXN1bHRCeUZpbGUoQkFTRV9QQVRIKyJJbnNlcnREZWxldGVRdW90ZS5jcyIpOworCisgICAgRmlsZVR5cGUgZXh0ZW5zaW9uID0gRmlsZVR5cGVNYW5hZ2VyLmdldEluc3RhbmNlKCkuZ2V0RmlsZVR5cGVCeUV4dGVuc2lvbigicGwiKTsKKyAgICBhc3NlcnRUcnVlKCJUZXN0IGlzIG5vdCBzZXQgdXAgY29ycmVjdGx5OiIrZXh0ZW5zaW9uLCBleHRlbnNpb24gaW5zdGFuY2VvZiBBYnN0cmFjdEZpbGVUeXBlKTsKKyAgICBjb25maWd1cmVCeUZpbGUoQkFTRV9QQVRIICsgIkluc2VydERlbGV0ZVF1b3RlLnBsIik7CisgICAgRWRpdG9yVGVzdFV0aWwucGVyZm9ybVR5cGluZ0FjdGlvbihnZXRFZGl0b3IoKSwgJyInKTsKKyAgICBjaGVja1Jlc3VsdEJ5RmlsZShCQVNFX1BBVEggKyAiSW5zZXJ0RGVsZXRlUXVvdGVfYWZ0ZXIucGwiKTsKKworICAgIGNvbmZpZ3VyZUJ5RmlsZShCQVNFX1BBVEgrIkluc2VydERlbGV0ZVF1b3RlX2FmdGVyLnBsIik7CisgICAgRWRpdG9yVGVzdFV0aWwucGVyZm9ybVR5cGluZ0FjdGlvbihnZXRFZGl0b3IoKSwgQkFDS1NQQUNFX0ZBS0VfQ0hBUik7CisgICAgY2hlY2tSZXN1bHRCeUZpbGUoQkFTRV9QQVRIKyJJbnNlcnREZWxldGVRdW90ZS5wbCIpOworCisgICAgY29uZmlndXJlQnlGaWxlKEJBU0VfUEFUSCArICJJbnNlcnREZWxldGVRdW90ZS5haiIpOworICAgIEVkaXRvclRlc3RVdGlsLnBlcmZvcm1UeXBpbmdBY3Rpb24oZ2V0RWRpdG9yKCksICciJyk7CisgICAgY2hlY2tSZXN1bHRCeUZpbGUoQkFTRV9QQVRIICsgIkluc2VydERlbGV0ZVF1b3RlX2FmdGVyLmFqIik7CisKKyAgICBjb25maWd1cmVCeUZpbGUoQkFTRV9QQVRIKyJJbnNlcnREZWxldGVRdW90ZV9hZnRlci5haiIpOworICAgIEVkaXRvclRlc3RVdGlsLnBlcmZvcm1UeXBpbmdBY3Rpb24oZ2V0RWRpdG9yKCksIEJBQ0tTUEFDRV9GQUtFX0NIQVIpOworICAgIGNoZWNrUmVzdWx0QnlGaWxlKEJBU0VfUEFUSCsiSW5zZXJ0RGVsZXRlUXVvdGUuYWoiKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RJbnNlcnREZWxldGVCcmFja2V0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgY29uZmlndXJlQnlGaWxlKEJBU0VfUEFUSCArICJJbnNlcnREZWxldGVCcmFja2V0LmNzIik7CisgICAgRWRpdG9yVGVzdFV0aWwucGVyZm9ybVR5cGluZ0FjdGlvbihnZXRFZGl0b3IoKSwgJ1snKTsKKyAgICBjaGVja1Jlc3VsdEJ5RmlsZShCQVNFX1BBVEggKyAiSW5zZXJ0RGVsZXRlQnJhY2tldF9hZnRlci5jcyIpOworCisgICAgY29uZmlndXJlQnlGaWxlKEJBU0VfUEFUSCsiSW5zZXJ0RGVsZXRlQnJhY2tldF9hZnRlci5jcyIpOworICAgIEVkaXRvclRlc3RVdGlsLnBlcmZvcm1UeXBpbmdBY3Rpb24oZ2V0RWRpdG9yKCksIEJBQ0tTUEFDRV9GQUtFX0NIQVIpOworICAgIGNoZWNrUmVzdWx0QnlGaWxlKEJBU0VfUEFUSCsiSW5zZXJ0RGVsZXRlQnJhY2tldC5jcyIpOworCisgICAgY29uZmlndXJlQnlGaWxlKEJBU0VfUEFUSCsiSW5zZXJ0RGVsZXRlQnJhY2tldF9hZnRlci5jcyIpOworICAgIEVkaXRvclRlc3RVdGlsLnBlcmZvcm1UeXBpbmdBY3Rpb24oZ2V0RWRpdG9yKCksICddJyk7CisgICAgY2hlY2tSZXN1bHRCeUZpbGUoQkFTRV9QQVRIICsgIkluc2VydERlbGV0ZUJyYWNrZXRfYWZ0ZXIyLmNzIik7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0SW5zZXJ0RGVsZXRlUGFyZW50aCgpIHRocm93cyBFeGNlcHRpb24geworICAgIGNvbmZpZ3VyZUJ5RmlsZShCQVNFX1BBVEggKyAiSW5zZXJ0RGVsZXRlUGFyZW50aC5jcyIpOworICAgIEVkaXRvclRlc3RVdGlsLnBlcmZvcm1UeXBpbmdBY3Rpb24oZ2V0RWRpdG9yKCksICcoJyk7CisgICAgY2hlY2tSZXN1bHRCeUZpbGUoQkFTRV9QQVRIICsgIkluc2VydERlbGV0ZVBhcmVudGhfYWZ0ZXIuY3MiKTsKKworICAgIGNvbmZpZ3VyZUJ5RmlsZShCQVNFX1BBVEgrIkluc2VydERlbGV0ZVBhcmVudGhfYWZ0ZXIuY3MiKTsKKyAgICBFZGl0b3JUZXN0VXRpbC5wZXJmb3JtVHlwaW5nQWN0aW9uKGdldEVkaXRvcigpLCBCQUNLU1BBQ0VfRkFLRV9DSEFSKTsKKyAgICBjaGVja1Jlc3VsdEJ5RmlsZShCQVNFX1BBVEgrIkluc2VydERlbGV0ZVBhcmVudGguY3MiKTsKKworICAgIGNvbmZpZ3VyZUJ5RmlsZShCQVNFX1BBVEgrIkluc2VydERlbGV0ZVBhcmVudGhfYWZ0ZXIuY3MiKTsKKyAgICBFZGl0b3JUZXN0VXRpbC5wZXJmb3JtVHlwaW5nQWN0aW9uKGdldEVkaXRvcigpLCAnKScpOworICAgIGNoZWNrUmVzdWx0QnlGaWxlKEJBU0VfUEFUSCsiSW5zZXJ0RGVsZXRlUGFyZW50aF9hZnRlcjIuY3MiKTsKKworICAgIGNvbmZpZ3VyZUJ5RmlsZShCQVNFX1BBVEggKyAiSW5zZXJ0RGVsZXRlUGFyZW50aDJfMi5jcyIpOworICAgIEVkaXRvclRlc3RVdGlsLnBlcmZvcm1UeXBpbmdBY3Rpb24oZ2V0RWRpdG9yKCksICcoJyk7CisgICAgY2hlY2tSZXN1bHRCeUZpbGUoQkFTRV9QQVRIICsgIkluc2VydERlbGV0ZVBhcmVudGgyXzJfYWZ0ZXIuY3MiKTsKKworICAgIGNvbmZpZ3VyZUJ5RmlsZShCQVNFX1BBVEggKyAiSW5zZXJ0RGVsZXRlUGFyZW50aDIuY3MiKTsKKyAgICBFZGl0b3JUZXN0VXRpbC5wZXJmb3JtVHlwaW5nQWN0aW9uKGdldEVkaXRvcigpLCAnKCcpOworICAgIGNoZWNrUmVzdWx0QnlGaWxlKEJBU0VfUEFUSCArICJJbnNlcnREZWxldGVQYXJlbnRoMl9hZnRlci5jcyIpOworICB9CisKKyAgcHJpdmF0ZSB2b2lkIGNoZWNrVHlwaW5nKFN0cmluZyBmaWxlTmFtZSwgU3RyaW5nIGJlZm9yZSwgY2hhciB0eXBlZCwgU3RyaW5nIGFmdGVyKSB0aHJvd3MgSU9FeGNlcHRpb24geworICAgIGNvbmZpZ3VyZUZyb21GaWxlVGV4dChmaWxlTmFtZSwgYmVmb3JlKTsKKyAgICBFZGl0b3JUZXN0VXRpbC5wZXJmb3JtVHlwaW5nQWN0aW9uKGdldEVkaXRvcigpLCB0eXBlZCk7CisgICAgY2hlY2tSZXN1bHRCeVRleHQoYWZ0ZXIpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFBhcmVudGhlc2VzQmVmb3JlTm9uV3MoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBjaGVja1R5cGluZygiYS5jcyIsICI8Y2FyZXQ+YSIsICcoJywgIig8Y2FyZXQ+YSIpOworICAgIGNoZWNrVHlwaW5nKCJhLmNzIiwgIjxjYXJldD5AYSIsICcoJywgIig8Y2FyZXQ+QGEiKTsKKyAgICBjaGVja1R5cGluZygiYS5jcyIsICI8Y2FyZXQ+KGEiLCAnKCcsICIoPGNhcmV0PihhIik7CisgICAgY2hlY2tUeXBpbmcoImEuY3MiLCAiPGNhcmV0PlthIiwgJygnLCAiKDxjYXJldD5bYSIpOworICAgIGNoZWNrVHlwaW5nKCJhLmNzIiwgIjxjYXJldD4gKGEiLCAnKCcsICIoPGNhcmV0PikgKGEiKTsKKyAgICBjaGVja1R5cGluZygiYS5jcyIsICIoPGNhcmV0PikiLCAnKCcsICIoKDxjYXJldD4pKSIpOworICAgIGNoZWNrVHlwaW5nKCJhLmNzIiwgIig8Y2FyZXQ+LCkiLCAnKCcsICIoKDxjYXJldD4pLCkiKTsKKworICAgIGNoZWNrVHlwaW5nKCJhLmNzIiwgIjxjYXJldD5hIiwgICAnWycsICJbPGNhcmV0PmEiKTsKKyAgICBjaGVja1R5cGluZygiYS5jcyIsICI8Y2FyZXQ+QGEiLCAgJ1snLCAiWzxjYXJldD5AYSIpOworICAgIGNoZWNrVHlwaW5nKCJhLmNzIiwgIjxjYXJldD4oYSIsICAnWycsICJbPGNhcmV0PihhIik7CisgICAgY2hlY2tUeXBpbmcoImEuY3MiLCAiPGNhcmV0PlthIiwgICdbJywgIls8Y2FyZXQ+W2EiKTsKKyAgICBjaGVja1R5cGluZygiYS5jcyIsICI8Y2FyZXQ+IChhIiwgJ1snLCAiWzxjYXJldD5dIChhIik7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0UXVvdGVCZWZvcmVOb25XcygpIHRocm93cyBFeGNlcHRpb24geworICAgIGNoZWNrVHlwaW5nKCJhLmNzIiwgIjxjYXJldD5hIiwgJyInLCAiXCI8Y2FyZXQ+YSIpOworICAgIGNoZWNrVHlwaW5nKCJhLmNzIiwgIjxjYXJldD4gIiwgJyInLCAiXCI8Y2FyZXQ+XCIgIik7CisKKyAgICBjaGVja1R5cGluZygiYS5jcyIsICI8Y2FyZXQ+YSIsICdcJycsICInPGNhcmV0PmEiKTsKKyAgICBjaGVja1R5cGluZygiYS5jcyIsICI8Y2FyZXQ+ICIsICdcJycsICInPGNhcmV0PicgIik7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0UmVwbGFjZVF1b3RlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgY2hlY2tUeXBpbmcoImEuY3MiLCAiPGNhcmV0PjxzZWxlY3Rpb24+XCI8L3NlbGVjdGlvbj5hXCIiLCAnXCcnLCAiXCc8Y2FyZXQ+YVwiIik7CisgICAgY2hlY2tUeXBpbmcoImEuY3MiLCAiPGNhcmV0PjxzZWxlY3Rpb24+XCI8L3NlbGVjdGlvbj5hXCciLCAnXCcnLCAiXCc8Y2FyZXQ+YVwnIik7CisgICAgY2hlY2tUeXBpbmcoImEuY3MiLCAiXCJhPGNhcmV0PjxzZWxlY3Rpb24+XCI8L3NlbGVjdGlvbj4iLCAnXCcnLCAiXCJhXCc8Y2FyZXQ+Iik7CisgICAgY2hlY2tUeXBpbmcoImEuY3MiLCAiXCdhPGNhcmV0PjxzZWxlY3Rpb24+XCI8L3NlbGVjdGlvbj4iLCAnXCcnLCAiXCdhXCc8Y2FyZXQ+Iik7CisKKyAgICBjaGVja1R5cGluZygiYS5jcyIsICI8Y2FyZXQ+PHNlbGVjdGlvbj5cJzwvc2VsZWN0aW9uPmFcIiIsICdcIicsICJcIjxjYXJldD5hXCIiKTsKKyAgICBjaGVja1R5cGluZygiYS5jcyIsICI8Y2FyZXQ+PHNlbGVjdGlvbj5cJzwvc2VsZWN0aW9uPmFcJyIsICdcIicsICJcIjxjYXJldD5hXCciKTsKKyAgICBjaGVja1R5cGluZygiYS5jcyIsICJcImE8Y2FyZXQ+PHNlbGVjdGlvbj5cJzwvc2VsZWN0aW9uPiIsICdcIicsICJcImFcIjxjYXJldD4iKTsKKyAgICBjaGVja1R5cGluZygiYS5jcyIsICJcJ2E8Y2FyZXQ+PHNlbGVjdGlvbj5cJzwvc2VsZWN0aW9uPiIsICdcIicsICJcJ2FcIjxjYXJldD4iKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3ROb1BhaXJlZEJyYWNlc0luUGxhaW5UZXh0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgY2hlY2tUeXBpbmcoImEudHh0IiwgIjxjYXJldD4iLCAnKCcsICIoPGNhcmV0PiIpOworICAgIGNoZWNrVHlwaW5nKCJhLnR4dCIsICJ7PGNhcmV0Pn0iLCAnfScsICJ7fTxjYXJldD59Iik7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0Q2xvc2luZ0JyYWNlSW5QbGFpblRleHQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBjb25maWd1cmVGcm9tRmlsZVRleHQoImEudHh0IiwgIjxjYXJldD4iKTsKKyAgICBFZGl0b3JUZXN0VXRpbC5wZXJmb3JtVHlwaW5nQWN0aW9uKGdldEVkaXRvcigpLCAnKCcpOworICAgIEVkaXRvclRlc3RVdGlsLnBlcmZvcm1UeXBpbmdBY3Rpb24oZ2V0RWRpdG9yKCksICcpJyk7CisgICAgY2hlY2tSZXN1bHRCeVRleHQoIigpPGNhcmV0PiIpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEluc2VydEJyYWNlT25FbnRlcigpIHRocm93cyBFeGNlcHRpb24geworICAgIGNvbmZpZ3VyZUJ5RmlsZShCQVNFX1BBVEggKyAiSW5zZXJ0QnJhY2VPbkVudGVyLmNzIik7CisgICAgRWRpdG9yVGVzdFV0aWwucGVyZm9ybVR5cGluZ0FjdGlvbihnZXRFZGl0b3IoKSwgJ1xuJyk7CisgICAgY2hlY2tSZXN1bHRCeUZpbGUoQkFTRV9QQVRIICsgIkluc2VydEJyYWNlT25FbnRlcl9hZnRlci5jcyIpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEluc2VydEJyYWNlT25FbnRlckphdmFGeCgpIHRocm93cyBFeGNlcHRpb24geworICAgIFN0cmluZyB0ZXN0TmFtZSA9IGdldFRlc3ROYW1lKGZhbHNlKTsKKyAgICBjb25maWd1cmVCeUZpbGUoQkFTRV9QQVRIICsgdGVzdE5hbWUgKyAiLmZ4Iik7CisgICAgRWRpdG9yVGVzdFV0aWwucGVyZm9ybVR5cGluZ0FjdGlvbihnZXRFZGl0b3IoKSwgJ1xuJyk7CisgICAgY2hlY2tSZXN1bHRCeUZpbGUoQkFTRV9QQVRIICsgdGVzdE5hbWUgKyAiX2FmdGVyLmZ4Iik7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0Q3BwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgRWRpdG9ySGlnaGxpZ2h0ZXIgaGlnaGxpZ2h0ZXIgPSBIaWdobGlnaHRlckZhY3RvcnkuY3JlYXRlSGlnaGxpZ2h0ZXIoZ2V0UHJvamVjdCgpLCAiQS5jcHAiKTsKKyAgICAvLyAgICAgICAgICAgICAgICAgICAwMTIzNDU2Nzg5MDEyMzQ1Njc4IDkgMDEyMyA0NSA2IDcKKyAgICBoaWdobGlnaHRlci5zZXRUZXh0KCIjaW5jbHVkZSB0cnkgZW51bSBcIlxceGZmXFx6XFxcInh4eFwiIik7CisgICAgSGlnaGxpZ2h0ZXJJdGVyYXRvciBpdGVyYXRvciA9IGhpZ2hsaWdodGVyLmNyZWF0ZUl0ZXJhdG9yKDIpOworICAgIGFzc2VydEVxdWFscyhDdXN0b21IaWdobGlnaHRlclRva2VuVHlwZS5LRVlXT1JEXzEsIGl0ZXJhdG9yLmdldFRva2VuVHlwZSgpKTsKKworICAgIGl0ZXJhdG9yID0gaGlnaGxpZ2h0ZXIuY3JlYXRlSXRlcmF0b3IoOSk7CisgICAgYXNzZXJ0RXF1YWxzKEN1c3RvbUhpZ2hsaWdodGVyVG9rZW5UeXBlLktFWVdPUkRfMiwgaXRlcmF0b3IuZ2V0VG9rZW5UeXBlKCkpOworCisgICAgaXRlcmF0b3IgPSBoaWdobGlnaHRlci5jcmVhdGVJdGVyYXRvcigxNSk7CisgICAgYXNzZXJ0RXF1YWxzKEN1c3RvbUhpZ2hsaWdodGVyVG9rZW5UeXBlLktFWVdPUkRfMSwgaXRlcmF0b3IuZ2V0VG9rZW5UeXBlKCkpOworCisgICAgaXRlcmF0b3IgPSBoaWdobGlnaHRlci5jcmVhdGVJdGVyYXRvcigxOSk7CisgICAgYXNzZXJ0RXF1YWxzKFN0cmluZ0VzY2FwZXNUb2tlblR5cGVzLlZBTElEX1NUUklOR19FU0NBUEVfVE9LRU4sIGl0ZXJhdG9yLmdldFRva2VuVHlwZSgpKTsKKworICAgIGl0ZXJhdG9yID0gaGlnaGxpZ2h0ZXIuY3JlYXRlSXRlcmF0b3IoMjMpOworICAgIGFzc2VydEVxdWFscyhTdHJpbmdFc2NhcGVzVG9rZW5UeXBlcy5JTlZBTElEX0NIQVJBQ1RFUl9FU0NBUEVfVE9LRU4sIGl0ZXJhdG9yLmdldFRva2VuVHlwZSgpKTsKKworICAgIGl0ZXJhdG9yID0gaGlnaGxpZ2h0ZXIuY3JlYXRlSXRlcmF0b3IoMjUpOworICAgIGFzc2VydEVxdWFscyhTdHJpbmdFc2NhcGVzVG9rZW5UeXBlcy5WQUxJRF9TVFJJTkdfRVNDQVBFX1RPS0VOLCBpdGVyYXRvci5nZXRUb2tlblR5cGUoKSk7CisKKyAgICBpdGVyYXRvciA9IGhpZ2hsaWdodGVyLmNyZWF0ZUl0ZXJhdG9yKDI3KTsKKyAgICBhc3NlcnRFcXVhbHMoQ3VzdG9tSGlnaGxpZ2h0ZXJUb2tlblR5cGUuU1RSSU5HLCBpdGVyYXRvci5nZXRUb2tlblR5cGUoKSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0SGFza2VsKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgRWRpdG9ySGlnaGxpZ2h0ZXIgaGlnaGxpZ2h0ZXIgPSBIaWdobGlnaHRlckZhY3RvcnkuY3JlYXRlSGlnaGxpZ2h0ZXIoZ2V0UHJvamVjdCgpLCAiQS5ocyIpOworICAgIC8vICAgICAgICAgICAgICAgICAgIDAxMjM0NTY3ODkwMTIzNDU2NzggOSAwMTIzIDQ1IDYgNworICAgIGhpZ2hsaWdodGVyLnNldFRleHQoInstIyAjLX0gbW9kdWxlIik7CisgICAgSGlnaGxpZ2h0ZXJJdGVyYXRvciBpdGVyYXRvciA9IGhpZ2hsaWdodGVyLmNyZWF0ZUl0ZXJhdG9yKDIpOworICAgIGFzc2VydEVxdWFscyhDdXN0b21IaWdobGlnaHRlclRva2VuVHlwZS5NVUxUSV9MSU5FX0NPTU1FTlQsIGl0ZXJhdG9yLmdldFRva2VuVHlwZSgpKTsKKworICAgIGl0ZXJhdG9yID0gaGlnaGxpZ2h0ZXIuY3JlYXRlSXRlcmF0b3IoMTIpOworICAgIGFzc2VydEVxdWFscyhDdXN0b21IaWdobGlnaHRlclRva2VuVHlwZS5LRVlXT1JEXzEsIGl0ZXJhdG9yLmdldFRva2VuVHlwZSgpKTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNpZ2h0L2VkaXRvckFjdGlvbnMvQmxvY2tJbmRlbnRPblBhc3RlVGVzdC5ncm9vdnkgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovY29kZUluc2lnaHQvZWRpdG9yQWN0aW9ucy9CbG9ja0luZGVudE9uUGFzdGVUZXN0Lmdyb292eQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYjUzN2RlCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNpZ2h0L2VkaXRvckFjdGlvbnMvQmxvY2tJbmRlbnRPblBhc3RlVGVzdC5ncm9vdnkKQEAgLTAsMCArMSw3NzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwMC0yMDEyIEpldEJyYWlucyBzLnIuby4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCitwYWNrYWdlIGNvbS5pbnRlbGxpai5jb2RlSW5zaWdodC5lZGl0b3JBY3Rpb25zCisKK2ltcG9ydCBjb20uaW50ZWxsaWouY29kZUluc2lnaHQuQ29kZUluc2lnaHRTZXR0aW5ncworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLmZpbGVUeXBlcy5GaWxlVHlwZQoraW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLmZpbGVUeXBlcy5TdGRGaWxlVHlwZXMKK2ltcG9ydCBjb20uaW50ZWxsaWoudGVzdEZyYW1ld29yay5maXh0dXJlcy5MaWdodENvZGVJbnNpZ2h0Rml4dHVyZVRlc3RDYXNlCitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkuYXBwbGljYXRpb24uQXBwbGljYXRpb25NYW5hZ2VyCisKKy8qKiAKKyAqIEBhdXRob3IgRGVuaXMgWmhkYW5vdgorICogQHNpbmNlIDcvNi8xMSA2OjUyIFBNIAorICovCitjbGFzcyBCbG9ja0luZGVudE9uUGFzdGVUZXN0IGV4dGVuZHMgTGlnaHRDb2RlSW5zaWdodEZpeHR1cmVUZXN0Q2FzZSB7CisKKyAgdm9pZCB0ZXN0SmF2YUJsb2NrRGVjcmVhc2VkSW5kZW50T25Ud29MaW5lc1Bhc3RpbmcoKSB7CisgICAgZGVmIGJlZm9yZSA9ICcnJ1wKK2NsYXNzIFRlc3QgeworICAgIHZvaWQgdGVzdCgpIHsKKyAgICAgICAgaWYgKHRydWUpIHsKKyAgICAgICAgICAgIDxjYXJldD4KKyAgICAgICAgfQorICAgIH0KK31cCisnJycKKyAgICAKKyAgICBkZWYgdG9QYXN0ZSA9CisnJydcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9vKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9vKCk7XAorJycnCisKKyAgICAKKyAgICBkZWYgZXhwZWN0ZWQgPSAnJydcCitjbGFzcyBUZXN0IHsKKyAgICB2b2lkIHRlc3QoKSB7CisgICAgICAgIGlmICh0cnVlKSB7CisgICAgICAgICAgICBmb28oKTsKKyAgICAgICAgICAgICAgIGZvbygpOworICAgICAgICB9CisgICAgfQorfVwKKycnJworICAgIGRvVGVzdChiZWZvcmUsIHRvUGFzdGUsIGV4cGVjdGVkKQorICB9CisKKyAgdm9pZCB0ZXN0U3RyaW5nQmVmb3JlQW5vdGhlclN0cmluZ1Nob3VsZE5vdEluY3JlYXNlSW5kZW50T2ZUaGVGb2xsb3dpbmdTdHJpbmcoKSB7CisgICAgZGVmIGJlZm9yZSA9ICcnJ1wKK2NsYXNzIFRlc3QgeworICAgIHZvaWQgdGVzdCgpIHsKKzxjYXJldD4gICAgICAgIGludCBhID0gMTAwOworICAgICAgICBpbnQgYiA9IDIwMDsKKyAgICB9XAorJycnCisgICAgCisgICAgZGVmIHRvUGFzdGUgPSAnJydcCisgICAgaW50IGIgPSAyMDA7CisnJycKKyAgICAKKyAgICBkZWYgZXhwZWN0ZWQgPSAnJydcCitjbGFzcyBUZXN0IHsKKyAgICB2b2lkIHRlc3QoKSB7CisgICAgICAgIGludCBiID0gMjAwOworICAgICAgICBpbnQgYSA9IDEwMDsKKyAgICAgICAgaW50IGIgPSAyMDA7CisgICAgfVwKKycnJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgIGRvVGVzdChiZWZvcmUsIHRvUGFzdGUsIGV4cGVjdGVkKQorICB9CisgIAorICB2b2lkIHRlc3RKYXZhQ29tcGxleEJsb2NrV2l0aERlY3JlYXNlZEluZGVudCgpIHsKKyAgICBkZWYgYmVmb3JlID0gJycnXAorY2xhc3MgVGVzdCB7CisgICAgdm9pZCB0ZXN0KCkgeworICAgICAgICBpZiAodHJ1ZSkgeworICAgICAgICAgICAgaSA9IDE7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpID0gMjsKKyAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNhcmV0PgorICAgIH0KK31cCisnJycKKworICAgIGRlZiB0b1Bhc3RlID0KKyAgICAnJydcCisgICAgICAgIGlmICh0cnVlKSB7CisgICAgICAgICAgICBpID0gMTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGkgPSAyOworICAgICAgICB9XAorJycnCisKKyAgICBkZWYgZXhwZWN0ZWQgPSAnJydcCitjbGFzcyBUZXN0IHsKKyAgICB2b2lkIHRlc3QoKSB7CisgICAgICAgIGlmICh0cnVlKSB7CisgICAgICAgICAgICBpID0gMTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGkgPSAyOworICAgICAgICB9CisgICAgICAgIGlmICh0cnVlKSB7CisgICAgICAgICAgICBpID0gMTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGkgPSAyOworICAgICAgICB9CisgICAgfQorfVwKKycnJworICAgIGRvVGVzdChiZWZvcmUsIHRvUGFzdGUsIGV4cGVjdGVkKQorICB9CisgIAorICB2b2lkIHRlc3RKYXZhQmxvY2tJbmNyZWFzZWRJbmRlbnRPblR3b0xpbmVzUGFzdGluZygpIHsKKyAgICBkZWYgYmVmb3JlID0gJycnXAorY2xhc3MgVGVzdCB7CisgICAgdm9pZCB0ZXN0KCkgeworICAgICAgICBpZiAodHJ1ZSkgeworICAgICAgICAgICAgPGNhcmV0PgorICAgICAgICB9CisgICAgfQorfVwKKycnJworCisgICAgZGVmIHRvUGFzdGUgPQorICAgICcnJ1wKK2ZvbygpOworICAgZm9vKCk7XAorJycnCisKKworICAgIGRlZiBleHBlY3RlZCA9ICcnJ1wKK2NsYXNzIFRlc3QgeworICAgIHZvaWQgdGVzdCgpIHsKKyAgICAgICAgaWYgKHRydWUpIHsKKyAgICAgICAgICAgIGZvbygpOworICAgICAgICAgICAgICAgZm9vKCk7CisgICAgICAgIH0KKyAgICB9Cit9XAorJycnCisgICAgZG9UZXN0KGJlZm9yZSwgdG9QYXN0ZSwgZXhwZWN0ZWQpCisgIH0KKworICB2b2lkIHRlc3RQYXN0aW5nQmxvY2tFbmRlZEJ5TGluZUZlZWQoKSB7CisgICAgZGVmIGJlZm9yZSA9ICcnJ1wKK2NsYXNzIFRlc3QgeworICAgIHZvaWQgdGVzdCgpIHsKKyAgICAgICAgaWYgKHRydWUpIHsKKyAgICAgICAgPGNhcmV0Pn0KKyAgICB9Cit9XAorJycnCisKKyAgICBkZWYgdG9QYXN0ZSA9CisgICAgJycnXAoraW50IGkgPSAxOworJycnCisKKworICAgIGRlZiBleHBlY3RlZCA9ICcnJ1wKK2NsYXNzIFRlc3QgeworICAgIHZvaWQgdGVzdCgpIHsKKyAgICAgICAgaWYgKHRydWUpIHsKKyAgICAgICAgICAgIGludCBpID0gMTsKKyAgICAgICAgfQorICAgIH0KK31cCisnJycKKyAgICBkb1Rlc3QoYmVmb3JlLCB0b1Bhc3RlLCBleHBlY3RlZCkKKyAgfQorCisgIAorICB2b2lkIHRlc3RQYXN0ZUF0WmVyb0NvbHVtbigpIHsKKyAgICBkZWYgYmVmb3JlID0gJycnXAorY2xhc3MgVGVzdCB7CisgICAgdm9pZCB0ZXN0KCkgeworICAgICBpZiAodHJ1ZSkgeworPGNhcmV0PgorICAgICB9CisgICAgfQorfVwKKycnJworCisgICAgZGVmIHRvUGFzdGUgPQorICAgICcnJ1wKKyBmb28oKTsKKyAgZm9vKCk7XAorJycnCisKKworICAgIGRlZiBleHBlY3RlZCA9ICcnJ1wKK2NsYXNzIFRlc3QgeworICAgIHZvaWQgdGVzdCgpIHsKKyAgICAgaWYgKHRydWUpIHsKKyAgICAgICAgIGZvbygpOworICAgICAgICAgIGZvbygpOworICAgICB9CisgICAgfQorfVwKKycnJworICAgIGRvVGVzdChiZWZvcmUsIHRvUGFzdGUsIGV4cGVjdGVkKQorICB9CisKKyAgdm9pZCB0ZXN0UGFzdGVBdERvY3VtZW50U3RhcnRDb2x1bW4oKSB7CisgICAgZGVmIGJlZm9yZSA9ICc8Y2FyZXQ+JworCisgICAgZGVmIHRvUGFzdGUgPQorICAgICcnJ1wKKyAgICAgICAgICBjbGFzcyBUZXN0IHsKKyAgICAgICAgICB9XAorJycnCisKKworICAgIGRlZiBleHBlY3RlZCA9ICcnJ1wKK2NsYXNzIFRlc3QgeworfVwKKycnJworICAgIGRvVGVzdChiZWZvcmUsIHRvUGFzdGUsIGV4cGVjdGVkKQorICB9CisgIAorICB2b2lkIHRlc3RCbG9ja0RlY3JlYXNlZEluZGVudE9uVGhyZWVMaW5lc1Bhc3RpbmcoKSB7CisgICAgZGVmIGJlZm9yZSA9ICcnJ1wKK2NsYXNzIFRlc3QgeworICAgIHZvaWQgdGVzdCgpIHsKKyAgICAgICAgaWYgKHRydWUpIHsKKyAgICAgICAgICAgIDxjYXJldD4KKyAgICAgICAgfQorICAgIH0KK31cCisnJycKKworICAgIGRlZiB0b1Bhc3RlID0KKyAgICAnJydcCisgICAgICAgICAgICAgIGZvbygpOworICAgICAgICAgICAgICBmb28oKTsKKyAgICAgICAgICAgICAgICAgZm9vKCk7XAorJycnCisKKworICAgIGRlZiBleHBlY3RlZCA9ICcnJ1wKK2NsYXNzIFRlc3QgeworICAgIHZvaWQgdGVzdCgpIHsKKyAgICAgICAgaWYgKHRydWUpIHsKKyAgICAgICAgICAgIGZvbygpOworICAgICAgICAgICAgZm9vKCk7CisgICAgICAgICAgICAgICBmb28oKTsKKyAgICAgICAgfQorICAgIH0KK31cCisnJycKKyAgICBkb1Rlc3QoYmVmb3JlLCB0b1Bhc3RlLCBleHBlY3RlZCkKKyAgfQorCisgIHZvaWQgdGVzdEJsb2NrSW5jcmVhc2VkSW5kZW50T25UaHJlZUxpbmVzUGFzdGluZygpIHsKKyAgICBkZWYgYmVmb3JlID0gJycnXAorY2xhc3MgVGVzdCB7CisgICAgdm9pZCB0ZXN0KCkgeworICAgICAgICBpZiAodHJ1ZSkgeworICAgICAgICAgICAgPGNhcmV0PgorICAgICAgICB9CisgICAgfQorfVwKKycnJworCisgICAgZGVmIHRvUGFzdGUgPQorICAgICcnJ1wKK2ZvbygpOworIGZvbygpOworICAgIGZvbygpO1wKKycnJworCisKKyAgICBkZWYgZXhwZWN0ZWQgPSAnJydcCitjbGFzcyBUZXN0IHsKKyAgICB2b2lkIHRlc3QoKSB7CisgICAgICAgIGlmICh0cnVlKSB7CisgICAgICAgICAgICBmb28oKTsKKyAgICAgICAgICAgICBmb28oKTsKKyAgICAgICAgICAgICAgICBmb28oKTsKKyAgICAgICAgfQorICAgIH0KK31cCisnJycKKyAgICBkb1Rlc3QoYmVmb3JlLCB0b1Bhc3RlLCBleHBlY3RlZCkKKyAgfQorCisgIHZvaWQgdGVzdEJsb2NrV2l0aEluZGVudE9uRmlyc3RMaW5lKCkgeworICAgIGRlZiBiZWZvcmUgPSAnJydcCitjbGFzcyBUZXN0IHsKKyAgICB2b2lkIHRlc3QoKSB7CisgICAgICAgIGlmICh0cnVlKSB7CisgICAgICAgICAgICA8Y2FyZXQ+CisgICAgICAgIH0KKyAgICB9Cit9XAorJycnCisKKyAgICBkZWYgdG9QYXN0ZSA9CisgICAgJycnXAorICAgICAgICAgICAgICAgICBmb28oKTsKKyAgICAgICAgICAgICAgICAgICAgZm9vKCk7CisgICAgICAgICAgICAgICAgICBmb28oKTtcCisnJycKKworCisgICAgZGVmIGV4cGVjdGVkID0gJycnXAorY2xhc3MgVGVzdCB7CisgICAgdm9pZCB0ZXN0KCkgeworICAgICAgICBpZiAodHJ1ZSkgeworICAgICAgICAgICAgZm9vKCk7CisgICAgICAgICAgICAgICBmb28oKTsKKyAgICAgICAgICAgICBmb28oKTsKKyAgICAgICAgfQorICAgIH0KK31cCisnJycKKyAgICBkb1Rlc3QoYmVmb3JlLCB0b1Bhc3RlLCBleHBlY3RlZCkKKyAgfQorCisgIHZvaWQgdGVzdFBhc3RlQWZ0ZXJFeGlzdGluZ1N5bWJvbHMoKSB7CisgICAgZGVmIGJlZm9yZSA9ICcnJ1wKK2NsYXNzIFRlc3QgeworICAgIHZvaWQgdGVzdCgpIHsKKyAgICAgICAgaWYgKHRydWUpIHs8Y2FyZXQ+CisgICAgICAgIH0KKyAgICB9Cit9XAorJycnCisKKyAgICBkZWYgdG9QYXN0ZSA9CisgICAgJycnXAorLy8gdGhpcyBpcyBhIGNvbW1lbnQKKyBmb28oKTsKKyAgZm9vKCk7Citmb28oKTtcCisnJycKKworCisgICAgZGVmIGV4cGVjdGVkID0gJycnXAorY2xhc3MgVGVzdCB7CisgICAgdm9pZCB0ZXN0KCkgeworICAgICAgICBpZiAodHJ1ZSkgey8vIHRoaXMgaXMgYSBjb21tZW50CisgICAgICAgICBmb28oKTsKKyAgICAgICAgICBmb28oKTsKKyAgICAgICAgZm9vKCk7CisgICAgICAgIH0KKyAgICB9Cit9XAorJycnCisgICAgZG9UZXN0KGJlZm9yZSwgdG9QYXN0ZSwgZXhwZWN0ZWQpCisgIH0KKworICB2b2lkIHRlc3RQYXN0ZUF0WmVyb0NvbHVtbkFmdGVyQmxhbmtMaW5lV2l0aFdoaXRlU3BhY2VzKCkgeworICAgIGRlZiBiZWZvcmUgPSAnJydcCitjbGFzcyBUZXN0IHsKKyAgICB2b2lkIHRlc3QoKSB7CisgICAgICAgIGlmICh0cnVlKSB7CisgICAgICAgIH0KKyAgICB9Cit9CisgICAKKzxjYXJldD5cCisnJycKKworICAgIGRlZiB0b1Bhc3RlID0KKyAgICAnJydcCitjbGFzcyBUZXN0IHsKKyAgICB2b2lkIHRlc3QoKSB7CisgICAgICAgIGlmICh0cnVlKSB7CisgICAgICAgIH0KKyAgICB9Cit9XAorJycnCisKKworICAgIGRlZiBleHBlY3RlZCA9ICcnJ1wKK2NsYXNzIFRlc3QgeworICAgIHZvaWQgdGVzdCgpIHsKKyAgICAgICAgaWYgKHRydWUpIHsKKyAgICAgICAgfQorICAgIH0KK30KKworY2xhc3MgVGVzdCB7CisgICAgdm9pZCB0ZXN0KCkgeworICAgICAgICBpZiAodHJ1ZSkgeworICAgICAgICB9CisgICAgfQorfVwKKycnJworICAgIGRvVGVzdChiZWZvcmUsIHRvUGFzdGUsIGV4cGVjdGVkKQorICB9CisKKyAgdm9pZCB0ZXN0UGFzdGVBdE5vblplcm9Db2x1bW5BZnRlckJsYW5rTGluZVdpdGhXaGl0ZVNwYWNlcygpIHsKKyAgICBkZWYgYmVmb3JlID0gJycnXAorY2xhc3MgVGVzdCB7CisgICAgdm9pZCB0ZXN0KCkgeworICAgICAgICBpZiAodHJ1ZSkgeworICAgICAgICB9CisgICAgfQorfQorICAgCisgICAgPGNhcmV0PlwKKycnJworCisgICAgZGVmIHRvUGFzdGUgPQorICAgICcnJ1wKK2NsYXNzIFRlc3QgeworICAgIHZvaWQgdGVzdCgpIHsKKyAgICAgICAgaWYgKHRydWUpIHsKKyAgICAgICAgfQorICAgIH0KK31cCisnJycKKworCisgICAgZGVmIGV4cGVjdGVkID0gJycnXAorY2xhc3MgVGVzdCB7CisgICAgdm9pZCB0ZXN0KCkgeworICAgICAgICBpZiAodHJ1ZSkgeworICAgICAgICB9CisgICAgfQorfQorICAgCitjbGFzcyBUZXN0IHsKKyAgICB2b2lkIHRlc3QoKSB7CisgICAgICAgIGlmICh0cnVlKSB7CisgICAgICAgIH0KKyAgICB9Cit9XAorJycnCisgICAgZG9UZXN0KGJlZm9yZSwgdG9QYXN0ZSwgZXhwZWN0ZWQpCisgIH0KKworICB2b2lkIHRlc3RQYXN0ZVRvTm9uRW1wdHlTdHJpbmdUZXh0V2l0aFRyYWlsaW5nTGluZUZlZWQoKSB7CisgICAgZGVmIGJlZm9yZSA9ICcnJ1wKK2NsYXNzIFRlc3QgeworICAgIHZvaWQgdGVzdCgpIHsKKyAgICAgICAgZm9vKDEsIDxjYXJldD4pOworICAgIH0KK31cCisnJycKKworICAgIGRlZiB0b1Bhc3RlMSA9CisgICAgJycnXAorY2FsY3VsYXRlKDMsIDQpCisnJycKKworICAgIGRlZiBleHBlY3RlZCA9ICcnJ1wKK2NsYXNzIFRlc3QgeworICAgIHZvaWQgdGVzdCgpIHsKKyAgICAgICAgZm9vKDEsIGNhbGN1bGF0ZSgzLCA0KQorICAgICAgICApOworICAgIH0KK31cCisnJycKKyAgICBkb1Rlc3QoYmVmb3JlLCB0b1Bhc3RlMSwgZXhwZWN0ZWQpCisKKyAgICBkZWYgdG9QYXN0ZTIgPQorICAgICcnJ1wKK2NhbGN1bGF0ZSgzLCA0KQorICAgICcnJworICAgIGRvVGVzdChiZWZvcmUsIHRvUGFzdGUyLCBleHBlY3RlZCkKKyAgfQorCisgIHZvaWQgdGVzdFBhc3RlVGV4dFRoYXRTdGFydHNXaXRoTGluZUZlZWRBZnRlck5vbkVtcHR5TGluZSgpIHsKKyAgICBkZWYgYmVmb3JlID0gJycnXAorY2xhc3MgVGVzdCB7CisgICAgdm9pZCB0ZXN0KCkgeworICAgICAgICBmb28oMSk7CisgICAgfTxjYXJldD4KK31cCisnJycKKworICAgIGRlZiB0b1Bhc3RlMSA9CisgICAgICAnJycKKyAgICB2b2lkIHRlc3QoKSB7CisgICAgICAgIGZvbygxKTsKKyAgICB9XAorJycnCisKKyAgICBkZWYgZXhwZWN0ZWQxID0gJycnXAorY2xhc3MgVGVzdCB7CisgICAgdm9pZCB0ZXN0KCkgeworICAgICAgICBmb28oMSk7CisgICAgfQorICAgIHZvaWQgdGVzdCgpIHsKKyAgICAgICAgZm9vKDEpOworICAgIH0KK31cCisnJycKKyAgICBkb1Rlc3QoYmVmb3JlLCB0b1Bhc3RlMSwgZXhwZWN0ZWQxKQorCisgICAgZGVmIHRvUGFzdGUyID0KKyAgICAgICcnJworCisKKyAgICB2b2lkIHRlc3QoKSB7CisgICAgICAgIGZvbygxKTsKKyAgICB9XAorJycnCisKKyAgICBkZWYgZXhwZWN0ZWQyID0gJycnXAorY2xhc3MgVGVzdCB7CisgICAgdm9pZCB0ZXN0KCkgeworICAgICAgICBmb28oMSk7CisgICAgfQorCisKKyAgICB2b2lkIHRlc3QoKSB7CisgICAgICAgIGZvbygxKTsKKyAgICB9Cit9XAorJycnCisgICAgZG9UZXN0KGJlZm9yZSwgdG9QYXN0ZTIsIGV4cGVjdGVkMikKKyAgfQorCisgIHZvaWQgdGVzdFBhc3RlVGV4dFRoYXRTdGFydHNXaXRoTGluZUZlZWRUb05ld0xpbmUoKSB7CisgICAgZGVmIGJlZm9yZSA9ICcnJ1wKK2NsYXNzIFRlc3QgeworICAgIHZvaWQgdGVzdChpbnQgaSkgeworICAgICAgICBpZiAoaSA+IDApIHs8Y2FyZXQ+CisgICAgICAgIH0KKyAgICB9Cit9XAorJycnCisKKyAgICBkZWYgdG9QYXN0ZTEgPQorICAgICAgJycnCisgICAgaWYgKGkgPiAyKSB7CisgICAgfVwKKycnJworCisgICAgZGVmIGV4cGVjdGVkMSA9ICcnJ1wKK2NsYXNzIFRlc3QgeworICAgIHZvaWQgdGVzdChpbnQgaSkgeworICAgICAgICBpZiAoaSA+IDApIHsKKyAgICAgICAgICAgIGlmIChpID4gMikgeworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorfVwKKycnJworICAgIGRvVGVzdChiZWZvcmUsIHRvUGFzdGUxLCBleHBlY3RlZDEpCisKKyAgICBkZWYgdG9QYXN0ZTIgPQorICAgICAgJycnCisKKworICAgIGlmIChpID4gMikgeworICAgIH1cCisnJycKKworICAgIGRlZiBleHBlY3RlZDIgPSAnJydcCitjbGFzcyBUZXN0IHsKKyAgICB2b2lkIHRlc3QoaW50IGkpIHsKKyAgICAgICAgaWYgKGkgPiAwKSB7CisKKworICAgICAgICAgICAgaWYgKGkgPiAyKSB7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9XAorJycnCisgICAgZG9UZXN0KGJlZm9yZSwgdG9QYXN0ZTIsIGV4cGVjdGVkMikKKyAgfQorICAKKyAgdm9pZCB0ZXN0UGFzdGVNdWx0aWxpbmVUZXh0VGhhdFN0YXJ0c1dpdGhMaW5lRmVlZFRvTmV3TGluZVdpdGhCaWdDYXJldEluZGVudCgpIHsKKyAgICAgIGRlZiBiZWZvcmUgPSAnJydcCisgIGNsYXNzIFRlc3QgeworICAgICAgdm9pZCB0ZXN0KGludCBpKSB7CisgICAgICAgICAgaWYgKGkgPiAwKSB7CisgICAgICAgICAgICAgICAgICAgPGNhcmV0PgorICAgICAgICAgIH0KKyAgICAgIH0KKyAgfVwKKycnJworICAKKyAgICAgIGRlZiB0b1Bhc3RlID0gJycnCisgICAgICAgICAgICAgICAgICAgICAgIHRlc3QoMSk7CisgICAgICAgICAgICAgICAgICAgICAgIHRlc3QoMSk7XAorJycnCisgIAorICAgICAgZGVmIGV4cGVjdGVkID0gJycnXAorICBjbGFzcyBUZXN0IHsKKyAgICAgIHZvaWQgdGVzdChpbnQgaSkgeworICAgICAgICAgIGlmIChpID4gMCkgeworICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICB0ZXN0KDEpOworICAgICAgICAgICAgICB0ZXN0KDEpOworICAgICAgICAgIH0KKyAgICAgIH0KKyAgfVwKKycnJworICAgICAgZG9UZXN0KGJlZm9yZSwgdG9QYXN0ZSwgZXhwZWN0ZWQpCisgICAgCisgICAgCisgICAgZGVmIHRvUGFzdGUyID0gJycnCisgICAgIHRlc3QoMSk7CisgICAgIHRlc3QoMSk7XAorJycnCisgICAgZG9UZXN0KGJlZm9yZSwgdG9QYXN0ZTIsIGV4cGVjdGVkKQorICB9IAorICAKKyAgdm9pZCB0ZXN0UGxhaW5UZXh0UGFzdGUoKSB7CisgICAgZGVmIGJlZm9yZSA9ICcnJ1wKKyAgbGluZTEKKyAgbGluZTIKKyAgICAgPGNhcmV0PlwKKycnJworCisgICAgZGVmIHRvUGFzdGUgPQorICAgICcnJ1wKK2xpbmUgdG8gcGFzdGUgIzEKKyAgICAgbGluZSB0byBwYXN0ZSAjMlwKKycnJworCisKKyAgICBkZWYgZXhwZWN0ZWQgPSAnJydcCisgIGxpbmUxCisgIGxpbmUyCisgICAgIGxpbmUgdG8gcGFzdGUgIzEKKyAgICAgICAgICBsaW5lIHRvIHBhc3RlICMyXAorJycnCisgICAgZG9UZXN0KGJlZm9yZSwgdG9QYXN0ZSwgZXhwZWN0ZWQsIFN0ZEZpbGVUeXBlcy5QTEFJTl9URVhUKQorICB9CisgIAorICB2b2lkICJ0ZXN0IHBsYWluIHRleHQgd2hlbiBwYXN0ZWQgc3RyaW5nIGVuZHMgYnkgbGluZSBmZWVkIigpIHsKKyAgICBkZWYgYmVmb3JlID0gJycnXAorICBsaW5lMQorICBsaW5lMgorICA8Y2FyZXQ+CisnJycKKworICAgIGRlZiB0b1Bhc3RlID0KKyAgICAnJydcCitsaW5lIHRvIHBhc3RlICMxCitsaW5lIHRvIHBhc3RlICMyCisnJycKKworICAgIGRlZiBleHBlY3RlZCA9ICcnJ1wKKyAgbGluZTEKKyAgbGluZTIKKyAgbGluZSB0byBwYXN0ZSAjMQorICBsaW5lIHRvIHBhc3RlICMyCisKKycnJworICAgIGRvVGVzdChiZWZvcmUsIHRvUGFzdGUsIGV4cGVjdGVkLCBTdGRGaWxlVHlwZXMuUExBSU5fVEVYVCkKKyAgfQorCisgIHZvaWQgInRlc3QgcGxhaW4gdGV4dCB3aGVuIGNhcmV0IGlzIGFmdGVyIHNlbGVjdGlvbiIoKSB7CisgICAgZGVmIGJlZm9yZSA9ICcnJ1wKKzxzZWxlY3Rpb24+ICBsaW5lMQorPC9zZWxlY3Rpb24+PGNhcmV0PlwKKycnJworCisgICAgZGVmIHRvUGFzdGUgPQorICAgICcnJ1wKK2xpbmUgdG8gcGFzdGUgIzEKK2xpbmUgdG8gcGFzdGUgIzIKKycnJworCisKKyAgICBkZWYgZXhwZWN0ZWQgPSAnJydcCisgIGxpbmUxCitsaW5lIHRvIHBhc3RlICMxCitsaW5lIHRvIHBhc3RlICMyCisnJycKKyAgICBkb1Rlc3QoYmVmb3JlLCB0b1Bhc3RlLCBleHBlY3RlZCwgU3RkRmlsZVR5cGVzLlBMQUlOX1RFWFQpCisgIH0KKworICB2b2lkIHRlc3RQbGFpblRleHRUaGF0U3RhcnRzQnlMaW5lRmVlZCgpIHsKKyAgICBkZWYgYmVmb3JlID0gJycnXAorbGluZSAxCisgICMgaXRlbTE8Y2FyZXQ+CisnJycKKworICAgIGRlZiB0b1Bhc3RlMSA9CisgICAgICAnJycKKyAgIyBpdGVtMlwKKycnJworICAgIAorICAgIGRlZiBleHBlY3RlZDEgPSAnJydcCitsaW5lIDEKKyAgIyBpdGVtMQorICAjIGl0ZW0yCisnJycKKyAgICBkb1Rlc3QoYmVmb3JlLCB0b1Bhc3RlMSwgZXhwZWN0ZWQxLCBTdGRGaWxlVHlwZXMuUExBSU5fVEVYVCkKKworICAgIGRlZiB0b1Bhc3RlMiA9CisgICAgICAnJycKKworCisgICMgaXRlbTJcCisnJycKKworICAgIGRlZiBleHBlY3RlZDIgPSAnJydcCitsaW5lIDEKKyAgIyBpdGVtMQorCisKKyAgIyBpdGVtMgorJycnCisgICAgZG9UZXN0KGJlZm9yZSwgdG9QYXN0ZTIsIGV4cGVjdGVkMiwgU3RkRmlsZVR5cGVzLlBMQUlOX1RFWFQpCisgIH0KKyAgCisgIHZvaWQgInRlc3QgZm9ybWF0dGVyLWJhc2VkIHBhc3RlIHRoYXQgc3RhcnRzIHdpdGggd2hpdGUgc3BhY2UiKCkgeworICAgIGRlZiBiZWZvcmUgPSAnJydcCitjbGFzcyBUZXN0IHsKKyAgICBpbnQgaTsKKyAgICBpbnQgajsKKworICAgIHZvaWQgdGVzdCgpIHsKKyAgICAgICAgPGNhcmV0PgorICAgIH0KK30KKycnJworICAgIAorICAgIGRlZiB0b1Bhc3RlID0gJycnXAorICAgIGludCBpOworICAgIGludCBqO1wKKycnJworICAgIAorICAgIGRlZiBleHBlY3RlZCA9ICcnJ1wKK2NsYXNzIFRlc3QgeworICAgIGludCBpOworICAgIGludCBqOworCisgICAgdm9pZCB0ZXN0KCkgeworICAgICAgICBpbnQgaTsKKyAgICAgICAgaW50IGo7CisgICAgfQorfQorJycnCisgICAgZG9UZXN0KGJlZm9yZSwgdG9QYXN0ZSwgZXhwZWN0ZWQpCisgIH0KKyAgCisgIGRlZiBkb1Rlc3QoU3RyaW5nIGJlZm9yZSwgdG9QYXN0ZSwgZXhwZWN0ZWQsIEZpbGVUeXBlIGZpbGVUeXBlID0gU3RkRmlsZVR5cGVzLkpBVkEpIHsKKyAgICBteUZpeHR1cmUuY29uZmlndXJlQnlUZXh0KGZpbGVUeXBlLCBiZWZvcmUpCisKKyAgICBkZWYgc2V0dGluZ3MgPSBDb2RlSW5zaWdodFNldHRpbmdzLmdldEluc3RhbmNlKCkKKyAgICBkZWYgb2xkID0gc2V0dGluZ3MuUkVGT1JNQVRfT05fUEFTVEUKKyAgICBzZXR0aW5ncy5SRUZPUk1BVF9PTl9QQVNURSA9IENvZGVJbnNpZ2h0U2V0dGluZ3MuSU5ERU5UX0JMT0NLCisgICAgdHJ5IHsKKyAgICAgIGRlZiBvZmZzZXQgPSBteUZpeHR1cmUuZWRpdG9yLmNhcmV0TW9kZWwub2Zmc2V0CisgICAgICBkZWYgY29sdW1uID0gbXlGaXh0dXJlLmVkaXRvci5jYXJldE1vZGVsLmxvZ2ljYWxQb3NpdGlvbi5jb2x1bW4KKyAgICAgIEFwcGxpY2F0aW9uTWFuYWdlci5hcHBsaWNhdGlvbi5ydW5Xcml0ZUFjdGlvbiB7CisgICAgICAgIG15Rml4dHVyZS5lZGl0b3IuZG9jdW1lbnQuaW5zZXJ0U3RyaW5nKG9mZnNldCwgdG9QYXN0ZSkKKyAgICAgICAgUGFzdGVIYW5kbGVyLmluZGVudEJsb2NrKHByb2plY3QsIG15Rml4dHVyZS5lZGl0b3IsIG9mZnNldCwgb2Zmc2V0ICsgdG9QYXN0ZS5sZW5ndGgoKSwgY29sdW1uKQorICAgICAgfQorICAgIH0KKyAgICBmaW5hbGx5IHsKKyAgICAgIHNldHRpbmdzLlJFRk9STUFUX09OX1BBU1RFID0gb2xkCisgICAgfQorICAgIG15Rml4dHVyZS5lZGl0b3Iuc2VsZWN0aW9uTW9kZWwucmVtb3ZlU2VsZWN0aW9uKCkKKyAgICBteUZpeHR1cmUuY2hlY2tSZXN1bHQoZXhwZWN0ZWQpCisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9jb2RlSW5zaWdodC9lZGl0b3JBY3Rpb25zL0ZpeERvY0NvbW1lbnRUZXN0Lmdyb292eSBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9jb2RlSW5zaWdodC9lZGl0b3JBY3Rpb25zL0ZpeERvY0NvbW1lbnRUZXN0Lmdyb292eQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNWZmNjNiCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNpZ2h0L2VkaXRvckFjdGlvbnMvRml4RG9jQ29tbWVudFRlc3QuZ3Jvb3Z5CkBAIC0wLDAgKzEsNTkzIEBACisvKgorICogQ29weXJpZ2h0IDIwMDAtMjAxMiBKZXRCcmFpbnMgcy5yLm8uCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworcGFja2FnZSBjb20uaW50ZWxsaWouY29kZUluc2lnaHQuZWRpdG9yQWN0aW9ucworCitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkuZWRpdG9yLmltcGwuQWJzdHJhY3RFZGl0b3JQcm9jZXNzaW5nT25Eb2N1bWVudE1vZGlmaWNhdGlvblRlc3QKKworLyoqCisgKiBAYXV0aG9yIERlbmlzIFpoZGFub3YKKyAqIEBzaW5jZSA5LzIwLzEyIDY6MTcgUE0KKyAqLworY2xhc3MgRml4RG9jQ29tbWVudFRlc3QgZXh0ZW5kcyBBYnN0cmFjdEVkaXRvclByb2Nlc3NpbmdPbkRvY3VtZW50TW9kaWZpY2F0aW9uVGVzdCB7CisKKyAgdm9pZCB0ZXN0R2VuZXJhdGVNZXRob2REb2MoKSB7CisgICAgZG9UZXN0KAorICAgICAgaW5pdGlhbDogJycnXAorY2xhc3MgVGVzdCB7CisgICAgU3RyaW5nIHRlc3QoaW50IGkpIHsKKyAgICAgICAgcmV0dXJuICJzIjs8Y2FyZXQ+CisgICAgfQorfScnJywKKyAgICAgIGV4cGVjdGVkOiAnJydcCitjbGFzcyBUZXN0IHsKKyAgICAvKioKKyAgICAgKiA8Y2FyZXQ+CisgICAgICogQHBhcmFtIGkKKyAgICAgKiBAcmV0dXJuCisgICAgICovCisgICAgU3RyaW5nIHRlc3QoaW50IGkpIHsKKyAgICAgICAgcmV0dXJuICJzIjsKKyAgICB9Cit9JycnCisgICAgKQorICB9CisKKyAgdm9pZCB0ZXN0R2VuZXJhdGVGaWVsZERvYygpIHsKKyAgICBkb1Rlc3QoCisgICAgICBpbml0aWFsOiAnJydcCitjbGFzcyBUZXN0IHsKKyAgICBpbnQgPGNhcmV0Pmk7Cit9JycnLAorICAgICAgZXhwZWN0ZWQ6ICcnJ1wKK2NsYXNzIFRlc3QgeworICAgIC8qKgorICAgICAqIDxjYXJldD4KKyAgICAgKi8KKyAgICBpbnQgaTsKK30nJycKKyAgICApCisgIH0KKworICB2b2lkIHRlc3RHZW5lcmF0ZUNsYXNzRG9jKCkgeworICAgIGRvVGVzdCgKKyAgICAgIGluaXRpYWw6ICcnJ1wKK2NsYXNzIFRlc3QgeworICAgIHZvaWQgdGVzdDEoKSB7fQorPGNhcmV0PgorICAgIHZvaWQgdGVzdDIoKSB7fQorfScnJywKKyAgICAgIGV4cGVjdGVkOiAnJydcCisvKioKKyAqIDxjYXJldD4KKyAqLworY2xhc3MgVGVzdCB7CisgICAgdm9pZCB0ZXN0MSgpIHt9CisKKyAgICB2b2lkIHRlc3QyKCkge30KK30nJycKKyAgICApCisgIH0KKworICB2b2lkIHRlc3RSZW1vdmVPbmVQYXJhbWV0ZXJGcm9tTWFueSgpIHsKKyAgICBkb1Rlc3QoCisgICAgICBpbml0aWFsOiAnJydcCitjbGFzcyBUZXN0IHsKKyAgICAvKioKKyAgICAgKiBAcGFyYW0gaQorICAgICAqIEBwYXJhbSBqCisgICAgICogQHBhcmFtIGsKKyAgICAgKi8KKyAgICB2b2lkIHRlc3QoaW50IGksIGludCBqKSB7PGNhcmV0PgorICAgIH0KK30nJycsCisgICAgICBleHBlY3RlZDogJycnXAorY2xhc3MgVGVzdCB7CisgICAgLyoqCisgICAgICogQHBhcmFtIGkgICAgPGNhcmV0PgorICAgICAqIEBwYXJhbSBqCisgICAgICovCisgICAgdm9pZCB0ZXN0KGludCBpLCBpbnQgaikgeworICAgIH0KK30nJycKKyAgICApCisgIH0KKworICB2b2lkIHRlc3RSZW1vdmVUaGVPbmx5UGFyYW1ldGVyKCkgeworICAgIGRvVGVzdCgKKyAgICAgIGluaXRpYWw6ICcnJ1wKK2NsYXNzIFRlc3QgeworICAgIC8qKgorICAgICAqIE15IGRlc2NyaXB0aW9uCisgICAgICogQHBhcmFtIGkKKyAgICAgKi8KKyAgICB2b2lkIHRlc3QoKSB7PGNhcmV0PgorICAgIH0KK30nJycsCisgICAgICBleHBlY3RlZDogJycnXAorY2xhc3MgVGVzdCB7CisgICAgLyoqCisgICAgICogTXkgZGVzY3JpcHRpb24KKyAgICAgKi8KKyAgICB2b2lkIHRlc3QoKSB7PGNhcmV0PgorICAgIH0KK30nJycKKyAgICApCisgIH0KKworICB2b2lkIHRlc3RSZW1vdmVSZXR1cm4oKSB7CisgICAgZG9UZXN0KAorICAgICAgaW5pdGlhbDogJycnXAorY2xhc3MgVGVzdCB7CisgICAgLyoqCisgICAgICogTXkgZGVzY3JpcHRpb24KKyAgICAgKiBAcmV0dXJuIGRhdGEKKyAgICAgKi8KKyAgICB2b2lkIHRlc3QoKSB7PGNhcmV0PgorICAgIH0KK30nJycsCisgICAgICBleHBlY3RlZDogJycnXAorY2xhc3MgVGVzdCB7CisgICAgLyoqCisgICAgICogTXkgZGVzY3JpcHRpb24KKyAgICAgKi8KKyAgICB2b2lkIHRlc3QoKSB7PGNhcmV0PgorICAgIH0KK30nJycKKyAgICApCisgIH0KKworICB2b2lkIHRlc3RSZW1vdmVPbmVUaHJvd3NGcm9tTWFueSgpIHsKKyAgICBkb1Rlc3QoCisgICAgICBpbml0aWFsOiAnJydcCitjbGFzcyBNeUV4Y2VwdGlvbjEgZXh0ZW5kcyBFeGNlcHRpb24ge30KK2NsYXNzIE15RXhjZXB0aW9uMiBleHRlbmRzIEV4Y2VwdGlvbiB7fQorCitjbGFzcyBUZXN0IHsKKyAgICAvKioKKyAgICAgKiBAcGFyYW0gaSAgbXkgYXJnCisgICAgICogQHRocm93cyBNeUV4Y2VwdGlvbjEgIHRleHQxCisgICAgICogQHRocm93cyBNeUV4Y2VwdGlvbjIgIHRleHQyCisgICAgICovCisgICAgdm9pZCB0ZXN0KGludCBpKSB0aHJvd3MgTXlFeGNlcHRpb24yIHs8Y2FyZXQ+CisgICAgfQorfScnJywKKyAgICAgIGV4cGVjdGVkOiAnJydcCitjbGFzcyBNeUV4Y2VwdGlvbjEgZXh0ZW5kcyBFeGNlcHRpb24ge30KK2NsYXNzIE15RXhjZXB0aW9uMiBleHRlbmRzIEV4Y2VwdGlvbiB7fQorCitjbGFzcyBUZXN0IHsKKyAgICAvKioKKyAgICAgKiBAcGFyYW0gaSAgbXkgYXJnCisgICAgICogQHRocm93cyBNeUV4Y2VwdGlvbjIgIHRleHQyCisgICAgICovCisgICAgdm9pZCB0ZXN0KGludCBpKSB0aHJvd3MgTXlFeGNlcHRpb24yIHsKKyAgICB9Cit9JycnCisgICAgKQorICB9CisKKyAgdm9pZCB0ZXN0UmVtb3ZlVGhlT25seVRocm93cygpIHsKKyAgICBkb1Rlc3QoCisgICAgICBpbml0aWFsOiAnJydcCitjbGFzcyBNeUV4Y2VwdGlvbiBleHRlbmRzIEV4Y2VwdGlvbiB7fQorCitjbGFzcyBUZXN0IHsKKyAgICAvKioKKyAgICAgKiBAcGFyYW0gaSAgbXkgYXJnCisgICAgICogQHRocm93cyBNeUV4Y2VwdGlvbiAgdGV4dAorICAgICAqLworICAgIHZvaWQgdGVzdChpbnQgaSkgezxjYXJldD4KKyAgICB9Cit9JycnLAorICAgICAgZXhwZWN0ZWQ6ICcnJ1wKK2NsYXNzIE15RXhjZXB0aW9uIGV4dGVuZHMgRXhjZXB0aW9uIHt9CisKK2NsYXNzIFRlc3QgeworICAgIC8qKgorICAgICAqIEBwYXJhbSBpICBteSBhcmcKKyAgICAgKi8KKyAgICB2b2lkIHRlc3QoaW50IGkpIHsKKyAgICB9Cit9JycnCisgICAgKQorICB9CisKKyAgdm9pZCB0ZXN0UmVtb3ZlT25lVHlwZVBhcmFtZXRlckZyb21NYW55KCkgeworICAgIGRvVGVzdCgKKyAgICAgIGluaXRpYWw6ICcnJ1wKKy8qKgorICogQHBhcmFtIDxUPiB0RGVzY3JpcHRpb24KKyAqIEBwYXJhbSA8Vj4gdkRlc2NyaXB0aW9uCisgKi8KK2NsYXNzIFRlc3Q8Vj4gezxjYXJldD4KK30nJycsCisgICAgICBleHBlY3RlZDogJycnXAorLyoqCisgKiBAcGFyYW0gPFY+IHZEZXNjcmlwdGlvbgorICovCitjbGFzcyBUZXN0PFY+IHs8Y2FyZXQ+Cit9JycnCisgICAgKQorICB9CisKKyAgdm9pZCB0ZXN0UmVtb3ZlTXVsdGlwbGVUeXBlUGFyYW1ldGVyKCkgeworICAgIGRvVGVzdCgKKyAgICAgIGluaXRpYWw6ICcnJ1wKKy8qKgorICogQHBhcmFtIDxUPiB0RGVzY3JpcHRpb24KKyAqIEBwYXJhbSA8Vj4gdkRlc2NyaXB0aW9uCisgKi8KK2NsYXNzIFRlc3QgezxjYXJldD4KK30nJycsCisgICAgICBleHBlY3RlZDogJycnXAorLyoqCisgKi8KK2NsYXNzIFRlc3QgezxjYXJldD4KK30nJycKKyAgICApCisgIH0KKworICB2b2lkIHRlc3RBZGRGaXJzdFBhcmFtZXRlcigpIHsKKyAgICBkb1Rlc3QoCisgICAgICBpbml0aWFsOiAnJydcCitjbGFzcyBUZXN0IHsKKyAgICAvKioKKyAgICAgKi8gCisgICAgdm9pZCB0ZXN0KGludCBpKSB7PGNhcmV0PgorICAgIH0KK30nJycsCisgICAgICBleHBlY3RlZDogJycnXAorY2xhc3MgVGVzdCB7CisgICAgLyoqCisgICAgICogQHBhcmFtIGkgICAgPGNhcmV0PgorICAgICAqLyAKKyAgICB2b2lkIHRlc3QoaW50IGkpIHsKKyAgICB9Cit9JycnCisgICAgKQorICB9CisKKyAgdm9pZCB0ZXN0QWRkTXVsdGlwbGVQYXJhbWV0ZXIoKSB7CisgICAgZG9UZXN0KAorICAgICAgaW5pdGlhbDogJycnXAorY2xhc3MgVGVzdCB7CisgICAgLyoqCisgICAgICogQHBhcmFtIGkKKyAgICAgKi8gCisgICAgdm9pZCB0ZXN0KGludCBpLCBpbnQgaiwgaW50IGspIHs8Y2FyZXQ+CisgICAgfQorfScnJywKKyAgICAgIGV4cGVjdGVkOiAnJydcCitjbGFzcyBUZXN0IHsKKyAgICAvKioKKyAgICAgKiBAcGFyYW0gaSAgICA8Y2FyZXQ+CisgICAgICogQHBhcmFtIGoKKyAgICAgKiBAcGFyYW0gaworICAgICAqLyAKKyAgICB2b2lkIHRlc3QoaW50IGksIGludCBqLCBpbnQgaykgeworICAgIH0KK30nJycKKyAgICApCisgIH0KKworICB2b2lkIHRlc3RBZGRSZXR1cm4oKSB7CisgICAgZG9UZXN0KAorICAgICAgaW5pdGlhbDogJycnXAorY2xhc3MgVGVzdCB7CisgICAgLyoqCisgICAgICovIAorICAgIGludCB0ZXN0KCkgezxjYXJldD4KKyAgICB9Cit9JycnLAorICAgICAgZXhwZWN0ZWQ6ICcnJ1wKK2NsYXNzIFRlc3QgeworICAgIC8qKgorICAgICAqIEByZXR1cm48Y2FyZXQ+CisgICAgICovIAorICAgIGludCB0ZXN0KCkgeworICAgIH0KK30nJycKKyAgICApCisgIH0KKworICB2b2lkIHRlc3RBZGRGaXJzdFRocm93cygpIHsKKyAgICBkb1Rlc3QoCisgICAgICBpbml0aWFsOiAnJydcCitjbGFzcyBNeUV4Y2VwdGlvbiBleHRlbmRzIEV4Y2VwdGlvbiB7fQorCitjbGFzcyBUZXN0IHsKKyAgICAvKioKKyAgICAgKiBAcGFyYW0gaSAgbXkgYXJnCisgICAgICovCisgICAgdm9pZCB0ZXN0KGludCBpKSB0aHJvd3MgTXlFeGNlcHRpb24gezxjYXJldD4KKyAgICB9Cit9JycnLAorICAgICAgZXhwZWN0ZWQ6ICcnJ1wKK2NsYXNzIE15RXhjZXB0aW9uIGV4dGVuZHMgRXhjZXB0aW9uIHt9CisKK2NsYXNzIFRlc3QgeworICAgIC8qKgorICAgICAqIEBwYXJhbSBpICBteSBhcmcKKyAgICAgKiBAdGhyb3dzIE15RXhjZXB0aW9uPGNhcmV0PgorICAgICAqLworICAgIHZvaWQgdGVzdChpbnQgaSkgdGhyb3dzIE15RXhjZXB0aW9uIHsKKyAgICB9Cit9JycnKQorICB9CisKKyAgdm9pZCB0ZXN0QWRkTm9uRmlyc3RUaHJvd3MoKSB7CisgICAgZG9UZXN0KAorICAgICAgaW5pdGlhbDogJycnXAorY2xhc3MgTXlFeGNlcHRpb24xIGV4dGVuZHMgRXhjZXB0aW9uIHt9CitjbGFzcyBNeUV4Y2VwdGlvbjIgZXh0ZW5kcyBFeGNlcHRpb24ge30KK2NsYXNzIE15RXhjZXB0aW9uMyBleHRlbmRzIEV4Y2VwdGlvbiB7fQorCitjbGFzcyBUZXN0IHsKKyAgICAvKioKKyAgICAgKiBAcGFyYW0gaSAgbXkgYXJnCisgICAgICogQHRocm93cyBNeUV4Y2VwdGlvbjEKKyAgICAgKi8KKyAgICB2b2lkIHRlc3QoaW50IGkpIHRocm93cyBNeUV4Y2VwdGlvbjEsIE15RXhjZXB0aW9uMiwgTXlFeGNlcHRpb24zIHs8Y2FyZXQ+CisgICAgfQorfScnJywKKyAgICAgIGV4cGVjdGVkOiAnJydcCitjbGFzcyBNeUV4Y2VwdGlvbjEgZXh0ZW5kcyBFeGNlcHRpb24ge30KK2NsYXNzIE15RXhjZXB0aW9uMiBleHRlbmRzIEV4Y2VwdGlvbiB7fQorY2xhc3MgTXlFeGNlcHRpb24zIGV4dGVuZHMgRXhjZXB0aW9uIHt9CisKK2NsYXNzIFRlc3QgeworICAgIC8qKgorICAgICAqIEBwYXJhbSBpICBteSBhcmcKKyAgICAgKiBAdGhyb3dzIE15RXhjZXB0aW9uMTxjYXJldD4KKyAgICAgKiBAdGhyb3dzIE15RXhjZXB0aW9uMgorICAgICAqIEB0aHJvd3MgTXlFeGNlcHRpb24zCisgICAgICovCisgICAgdm9pZCB0ZXN0KGludCBpKSB0aHJvd3MgTXlFeGNlcHRpb24xLCBNeUV4Y2VwdGlvbjIsIE15RXhjZXB0aW9uMyB7CisgICAgfQorfScnJykKKyAgfQorCisgIHZvaWQgdGVzdEFkZEZpcnN0VGhyb3dzV2hlbkVtcHR5UmV0dXJuSXNBdmFpbGFibGUoKSB7CisgICAgZG9UZXN0KAorICAgICAgaW5pdGlhbDogJycnXAorY2xhc3MgTXlFeGNlcHRpb24gZXh0ZW5kcyBFeGNlcHRpb24ge30KKworY2xhc3MgVGVzdCB7CisgICAgLyoqCisgICAgICogQHJldHVybgorICAgICAqLworICAgIGludCB0ZXN0KCkgdGhyb3dzIE15RXhjZXB0aW9uIHs8Y2FyZXQ+CisgICAgICAgIHJldHVybiAxOworICAgIH0KK30nJycsCisgICAgICBleHBlY3RlZDogJycnXAorY2xhc3MgTXlFeGNlcHRpb24gZXh0ZW5kcyBFeGNlcHRpb24ge30KKworY2xhc3MgVGVzdCB7CisgICAgLyoqCisgICAgICogQHJldHVybjxjYXJldD4KKyAgICAgKiBAdGhyb3dzIE15RXhjZXB0aW9uCisgICAgICovCisgICAgaW50IHRlc3QoKSB0aHJvd3MgTXlFeGNlcHRpb24geworICAgICAgICByZXR1cm4gMTsKKyAgICB9Cit9JycnKQorICB9CisgIAorICB2b2lkIHRlc3RBZGRGaXJzdFR5cGVQYXJhbWV0ZXIoKSB7CisgICAgZG9UZXN0KAorICAgICAgaW5pdGlhbDogJycnXAorLyoqCisgKiBNeSBkZXNjcmlwdGlvbgorICogQGF1dGhvciBtZQorICovCitjbGFzcyBUZXN0PFQ+IHs8Y2FyZXQ+Cit9JycnLAorICAgICAgZXhwZWN0ZWQ6ICcnJ1wKKy8qKgorICogTXkgZGVzY3JpcHRpb24KKyAqIEBhdXRob3IgbWUKKyAqIEBwYXJhbSA8VD4gICAgPGNhcmV0PgorICovCitjbGFzcyBUZXN0PFQ+IHsKK30nJycpCisgIH0KKworICB2b2lkIHRlc3RBZGROb25GaXJzdFR5cGVQYXJhbWV0ZXIoKSB7CisgICAgZG9UZXN0KAorICAgICAgaW5pdGlhbDogJycnXAorLyoqCisgKiBNeSBkZXNjcmlwdGlvbgorICogQGF1dGhvciBtZQorICogQHBhcmFtIDxUPiAgICB0eXBlIGRlc2NyaXB0aW9uPGNhcmV0PgorICovCitjbGFzcyBUZXN0PFQsIFY+IHsKK30nJycsCisgICAgICBleHBlY3RlZDogJycnXAorLyoqCisgKiBNeSBkZXNjcmlwdGlvbgorICogQGF1dGhvciBtZQorICogQHBhcmFtIDxUPiAgICB0eXBlIGRlc2NyaXB0aW9uCisgKiBAcGFyYW0gPFY+ICAgIDxjYXJldD4KKyAqLworY2xhc3MgVGVzdDxULCBWPiB7Cit9JycnKQorICB9CisKKyAgdm9pZCB0ZXN0Q29ycmVjdFBhcmFtZXRlcnNPcmRlcigpIHsKKyAgICBkb1Rlc3QoCisgICAgICBpbml0aWFsOiAnJydcCitjbGFzcyBUZXN0IHsKKyAgICAvKioKKyAgICAgKiBAcGFyYW0gagorICAgICAqIEBwYXJhbSBrICAgIHNpbmdsZSBsaW5lIGRlc2NyaXB0aW9uCisgICAgICogQHBhcmFtIGkgICAgbXVsdGktbGluZQorICAgICAqICAgICAgICAgICAgIGRlc2NyaXB0aW9uCisgICAgICovCisgICAgcHVibGljIHZvaWQgdGVzdChpbnQgaSwgaW50IGosIGludCBrKSB7PGNhcmV0PgorICAgIH0KK30nJycsCisgICAgICBleHBlY3RlZDogJycnXAorY2xhc3MgVGVzdCB7CisgICAgLyoqCisgICAgICogQHBhcmFtIGkgICAgbXVsdGktbGluZQorICAgICAqICAgICAgICAgICAgIGRlc2NyaXB0aW9uCisgICAgICogQHBhcmFtIGogICAgPGNhcmV0PgorICAgICAqIEBwYXJhbSBrICAgIHNpbmdsZSBsaW5lIGRlc2NyaXB0aW9uCisgICAgICovCisgICAgcHVibGljIHZvaWQgdGVzdChpbnQgaSwgaW50IGosIGludCBrKSB7CisgICAgfQorfScnJworICAgICkKKyAgfQorCisgIHZvaWQgdGVzdENvcnJlY3RQYXJhbWV0ZXJzRGVzY3JpcHRpb25XaGVuSW5kZW50SXNEZWZpbmVzKCkgeworICAgIGRvVGVzdCgKKyAgICAgIGluaXRpYWw6ICcnJ1wKK2NsYXNzIFRlc3QgeworICAgIC8qKgorICAgICAqIEBwYXJhbSBqICAgIAorICAgICAqIEBwYXJhbSBpCisgICAgICovCisgICAgcHVibGljIHZvaWQgdGVzdChpbnQgaSwgaW50IGopIHs8Y2FyZXQ+CisgICAgfQorfScnJywKKyAgICAgIGV4cGVjdGVkOiAnJydcCitjbGFzcyBUZXN0IHsKKyAgICAvKioKKyAgICAgKiBAcGFyYW0gaSAgICA8Y2FyZXQ+CisgICAgICogQHBhcmFtIGogICAgCisgICAgICovCisgICAgcHVibGljIHZvaWQgdGVzdChpbnQgaSwgaW50IGopIHsKKyAgICB9Cit9JycnCisgICAgKQorICB9CisKKyAgdm9pZCB0ZXN0Q29ycmVjdE1ldGhvZFR5cGVQYXJhbWV0ZXJzT3JkZXIoKSB7CisgICAgZG9UZXN0KAorICAgICAgaW5pdGlhbDogJycnXAorY2xhc3MgVGVzdCB7CisgIC8qKgorICAgKiBAcGFyYW0gPEI+CisgICAqIEBwYXJhbSA8QT4gICAgQSBkZXNjcmlwdGlvbgorICAgKi8KKyAgPEEsIEI+IHZvaWQgdGVzdCgpIHs8Y2FyZXQ+CisgIH0KK30nJycsCisgICAgICBleHBlY3RlZDogJycnXAorY2xhc3MgVGVzdCB7CisgIC8qKgorICAgKiBAcGFyYW0gPEE+ICAgIEEgZGVzY3JpcHRpb24KKyAgICogQHBhcmFtIDxCPiAgICA8Y2FyZXQ+CisgICAqLworICA8QSwgQj4gdm9pZCB0ZXN0KCkgeworICB9Cit9JycnCisgICAgKQorICB9CisKKyAgdm9pZCB0ZXN0Q29ycmVjdENsYXNzVHlwZVBhcmFtZXRlcnNPcmRlcigpIHsKKyAgICBkb1Rlc3QoCisgICAgICBpbml0aWFsOiAnJydcCisvKioKKyAqIENsYXNzIGRlc2NyaXB0aW9uCisgKiBAYXV0aG9yIFppZ211bmQKKyAqIEBwYXJhbSA8Qj4gICAgbXVsdGktbGluZQorICogICAgICAgICAgICAgICBkZXNjcmlwdGlvbgorICogQHBhcmFtIDxBPgorICovCitjbGFzcyBUZXN0PEEsIEI+IHs8Y2FyZXQ+Cit9JycnLAorICAgICAgZXhwZWN0ZWQ6ICcnJ1wKKy8qKgorICogQ2xhc3MgZGVzY3JpcHRpb24KKyAqIEBhdXRob3IgWmlnbXVuZAorICogQHBhcmFtIDxBPiAgICA8Y2FyZXQ+CisgKiBAcGFyYW0gPEI+ICAgIG11bHRpLWxpbmUKKyAqICAgICAgICAgICAgICAgZGVzY3JpcHRpb24KKyAqLworY2xhc3MgVGVzdDxBLCBCPiB7Cit9JycnCisgICAgKQorICB9CisKKyAgdm9pZCB0ZXN0QWxsZXNadXNhbW1lbigpIHsKKyAgICBkb1Rlc3QoCisgICAgICBpbml0aWFsOiAnJydcCitjbGFzcyBNeUV4Y2VwdGlvbjEgZXh0ZW5kcyBFeGNlcHRpb24ge30KK2NsYXNzIE15RXhjZXB0aW9uMiBleHRlbmRzIEV4Y2VwdGlvbiB7fQorCitjbGFzcyBUZXN0IHsKKyAgICAvKioKKyAgICAgKiBNZXRob2QgZGVzY3JpcHRpb24KKyAgICAgKiBAcGFyYW0gaiAgICBqIGRlc2NyaXB0aW9uIChzaW5nbGUgbGluZSkKKyAgICAgKiBAcGFyYW0gcyAgICBzIGRlc2NyaXB0aW9uCisgICAgICogQHBhcmFtIGsKKyAgICAgKiAgICAgICAgICAgICBrIGRlc2NyaXB0aW9uIChzaW5nbGUgbGluZSBidXQgbG9jYXRlZCBhdCBhbm90aGVyIGxpbmUpCisgICAgICogQHRocm93cyBNeUV4Y2VwdGlvbjIKKyAgICAgKiBAcmV0dXJuIHNvbWUgdmFsdWUKKyAgICAgKi8KKyAgICB2b2lkIHRlc3QoaW50IGksIGludCBqLCBpbnQgaykgdGhyb3dzIE15RXhjZXB0aW9uMSB7PGNhcmV0PgorICAgIH0KK30nJycsCisgICAgICBleHBlY3RlZDogJycnXAorY2xhc3MgTXlFeGNlcHRpb24xIGV4dGVuZHMgRXhjZXB0aW9uIHt9CitjbGFzcyBNeUV4Y2VwdGlvbjIgZXh0ZW5kcyBFeGNlcHRpb24ge30KKworY2xhc3MgVGVzdCB7CisgICAgLyoqCisgICAgICogTWV0aG9kIGRlc2NyaXB0aW9uCisgICAgICogQHBhcmFtIGkgICAgPGNhcmV0PgorICAgICAqIEBwYXJhbSBqICAgIGogZGVzY3JpcHRpb24gKHNpbmdsZSBsaW5lKQorICAgICAqIEBwYXJhbSBrCisgICAgICogICAgICAgICAgICAgayBkZXNjcmlwdGlvbiAoc2luZ2xlIGxpbmUgYnV0IGxvY2F0ZWQgYXQgYW5vdGhlciBsaW5lKQorICAgICAqIEB0aHJvd3MgTXlFeGNlcHRpb24xCisgICAgICovCisgICAgdm9pZCB0ZXN0KGludCBpLCBpbnQgaiwgaW50IGspIHRocm93cyBNeUV4Y2VwdGlvbjEgeworICAgIH0KK30nJycKKyAgICApCisgIH0KKyAgCisgIHZvaWQgdGVzdE5hdmlnYXRlVG9NaXNzaW5nUGFyYW1EZXNjcmlwdGlvbigpIHsKKyAgICBkb1Rlc3QoCisgICAgICBpbml0aWFsOiAnJydcCitjbGFzcyBUZXN0IHsKKyAgICAvKioKKyAgICAgKiBAcGFyYW0gaQorICAgICAqLyAKKyAgICB2b2lkIHRlc3QoaW50IGkpIHs8Y2FyZXQ+CisgICAgfQorfScnJywKKyAgICAgIGV4cGVjdGVkOiAnJydcCitjbGFzcyBUZXN0IHsKKyAgICAvKioKKyAgICAgKiBAcGFyYW0gaSAgICA8Y2FyZXQ+CisgICAgICovIAorICAgIHZvaWQgdGVzdChpbnQgaSkgeworICAgIH0KK30nJycKKyAgICApCisgIH0KKworICBwcml2YXRlIGRlZiBkb1Rlc3QoTWFwIGFyZ3MpIHsKKyAgICBjb25maWd1cmVGcm9tRmlsZVRleHQoIiR7Z2V0VGVzdE5hbWUoZmFsc2UpfS5qYXZhIiwgYXJncy5pbml0aWFsKQorICAgIG15RWRpdG9yLnNldHRpbmdzLnZpcnR1YWxTcGFjZSA9IGZhbHNlCisgICAgZXhlY3V0ZUFjdGlvbihGaXhEb2NDb21tZW50QWN0aW9uLkFDVElPTl9JRCkKKyAgICBjaGVja1Jlc3VsdEJ5VGV4dChhcmdzLmV4cGVjdGVkKQorICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovY29kZUluc2lnaHQvZWRpdG9yQWN0aW9ucy9KYXZhZG9jVHlwZWRIYW5kbGVyVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNpZ2h0L2VkaXRvckFjdGlvbnMvSmF2YWRvY1R5cGVkSGFuZGxlclRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNjgxNGZlCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNpZ2h0L2VkaXRvckFjdGlvbnMvSmF2YWRvY1R5cGVkSGFuZGxlclRlc3QuamF2YQpAQCAtMCwwICsxLDY4IEBACisvKgorICogQ29weXJpZ2h0IDIwMDAtMjAxMiBKZXRCcmFpbnMgcy5yLm8uCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworcGFja2FnZSBjb20uaW50ZWxsaWouY29kZUluc2lnaHQuZWRpdG9yQWN0aW9uczsKKworaW1wb3J0IG9yZy5qdW5pdC5UZXN0OworCitpbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuYXNzZXJ0RXF1YWxzOworCisvKioKKyAqIEBhdXRob3IgRGVuaXMgWmhkYW5vdgorICogQHNpbmNlIDAyLzAyLzIwMTEKKyAqLworcHVibGljIGNsYXNzIEphdmFkb2NUeXBlZEhhbmRsZXJUZXN0IHsKKworICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQ0FSRVRfTUFSS0VSID0gIjxjYXJldD4iOworICAKKyAgQFRlc3QKKyAgcHVibGljIHZvaWQgY29ycmVjdEVtcHR5VGFnU3RhcnQoKSB7CisgICAgZG9UZXN0KCI8Zmlyc3Q+PC9maXJzdD48c2Vjb25kPjxjYXJldD4iLCAic2Vjb25kIik7CisgIH0KKyAgCisgIEBUZXN0CisgIHB1YmxpYyB2b2lkIHN0YW5kYWxvbmVCcmFja2V0KCkgeworICAgIGRvVGVzdCgiYXNkZiA+PGNhcmV0PiIsIG51bGwpOworICB9CisKKyAgQFRlc3QKKyAgcHVibGljIHZvaWQgZW1wdHlFbGVtZW50KCkgeworICAgIGRvVGVzdCgiPHRhZy8+PGNhcmV0PiIsIG51bGwpOworICB9CisKKyAgQFRlc3QKKyAgcHVibGljIHZvaWQgY2xvc2luZ1RhZygpIHsKKyAgICBkb1Rlc3QoIjx0YWc+PC90YWc+PGNhcmV0PiIsIG51bGwpOworICB9CisKKyAgQFRlc3QKKyAgcHVibGljIHZvaWQgc3RhcnRUYWdPbk5ld0xpbmUoKSB7CisgICAgZG9UZXN0KCI8dFxuYWc+PGNhcmV0PiIsIG51bGwpOworICB9CisgIAorICBAVGVzdAorICBwdWJsaWMgdm9pZCB0YWdXaXRoQXR0cmlidXRlKCkgeworICAgIGRvVGVzdCgiPGEgaHJlZj0nd3d3Jz48Y2FyZXQ+IiwgImEiKTsKKyAgfQorICAKKyAgcHJpdmF0ZSBzdGF0aWMgdm9pZCBkb1Rlc3QoU3RyaW5nIHRleHQsIFN0cmluZyBleHBlY3RlZCkgeworICAgIFN0cmluZ0J1aWxkZXIgbm9ybWFsaXplZCA9IG5ldyBTdHJpbmdCdWlsZGVyKCk7CisgICAgaW50IG9mZnNldCA9IHRleHQuaW5kZXhPZihDQVJFVF9NQVJLRVIpOworICAgIG5vcm1hbGl6ZWQuYXBwZW5kKHRleHQuc3Vic3RyaW5nKDAsIG9mZnNldCkpOworICAgIG5vcm1hbGl6ZWQuYXBwZW5kKHRleHQuc3Vic3RyaW5nKG9mZnNldCArIENBUkVUX01BUktFUi5sZW5ndGgoKSkpOworICAgIENoYXJTZXF1ZW5jZSBhY3R1YWwgPSBKYXZhZG9jVHlwZWRIYW5kbGVyLmdldFRhZ05hbWUobm9ybWFsaXplZC50b1N0cmluZygpLCBvZmZzZXQpOworICAgIGFzc2VydEVxdWFscyhleHBlY3RlZCwgYWN0dWFsKTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNpZ2h0L2VkaXRvckFjdGlvbnMvU2VsZWN0aW9uUXVvdGluZ1Rlc3QuZ3Jvb3Z5IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNpZ2h0L2VkaXRvckFjdGlvbnMvU2VsZWN0aW9uUXVvdGluZ1Rlc3QuZ3Jvb3Z5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFjNDkyMzIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovY29kZUluc2lnaHQvZWRpdG9yQWN0aW9ucy9TZWxlY3Rpb25RdW90aW5nVGVzdC5ncm9vdnkKQEAgLTAsMCArMSw1OSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDAwLTIwMTEgSmV0QnJhaW5zIHMuci5vLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KK3BhY2thZ2UgY29tLmludGVsbGlqLmNvZGVJbnNpZ2h0LmVkaXRvckFjdGlvbnMKKworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLmVkaXRvci5pbXBsLkFic3RyYWN0RWRpdG9yUHJvY2Vzc2luZ09uRG9jdW1lbnRNb2RpZmljYXRpb25UZXN0CitpbXBvcnQgY29tLmludGVsbGlqLnRlc3RGcmFtZXdvcmsuVGVzdEZpbGVUeXBlCitpbXBvcnQgY29tLmludGVsbGlqLmNvZGVJbnNpZ2h0LkNvZGVJbnNpZ2h0U2V0dGluZ3MKKworLyoqIAorICogQGF1dGhvciBEZW5pcyBaaGRhbm92CisgKiBAc2luY2UgNy8xNC8xMSAyOjE1IFBNIAorICovCitjbGFzcyBTZWxlY3Rpb25RdW90aW5nVGVzdCBleHRlbmRzIEFic3RyYWN0RWRpdG9yUHJvY2Vzc2luZ09uRG9jdW1lbnRNb2RpZmljYXRpb25UZXN0IHsKKworICB2b2lkIHRlc3RCdWdneVNlbGVjdGlvbigpIHsKKworICAgIGRlZiBpbml0aWFsID0gJycnXAordmFyIGEgPSAgImEgdGVzdCI7Cit2YXIgYiA9IDxzZWxlY3Rpb24+W2FdPC9zZWxlY3Rpb24+PGNhcmV0PjsKK3ZhciBjID0gInRlc3QgdGVzdCB0ZXN0IjtcCisnJycKKyAgICBkZWYgYWN0aW9uID0geyB0eXBlKCciYWJjJyl9CisgICAgCisgICAgZGVmIGV4cGVjdGVkID0gJycnXAordmFyIGEgPSAgImEgdGVzdCI7Cit2YXIgYiA9ICJhYmM8Y2FyZXQ+IjsKK3ZhciBjID0gInRlc3QgdGVzdCB0ZXN0IjtcCisnJycKKyAgICAKKyAgICBkb1Rlc3QoaW5pdGlhbCwgZXhwZWN0ZWQsIGFjdGlvbiwgVGVzdEZpbGVUeXBlLkpTKQorICB9CisKKyAgZGVmIHZvaWQgZG9UZXN0KGluaXRpYWwsIGV4cGVjdGVkLCBhY3Rpb24sIGZpbGVUeXBlID0gVGVzdEZpbGVUeXBlLkpBVkEpIHsKKyAgICBjb25maWd1cmVGcm9tRmlsZVRleHQoIiR7Z2V0VGVzdE5hbWUoZmFsc2UpfS4kZmlsZVR5cGUuZXh0ZW5zaW9uIiwgaW5pdGlhbCkKKyAgICBkZWYgc2V0dGluZ3MgPSBDb2RlSW5zaWdodFNldHRpbmdzLmdldEluc3RhbmNlKCkKKyAgICBkZWYgb2xkID0gc2V0dGluZ3MuU1VSUk9VTkRfU0VMRUNUSU9OX09OX1FVT1RFX1RZUEVECisgICAgc2V0dGluZ3MuU1VSUk9VTkRfU0VMRUNUSU9OX09OX1FVT1RFX1RZUEVEID0gdHJ1ZQorICAgIHRyeSB7CisgICAgICBhY3Rpb24oKQorICAgIH0KKyAgICBmaW5hbGx5IHsKKyAgICAgIHNldHRpbmdzLlNVUlJPVU5EX1NFTEVDVElPTl9PTl9RVU9URV9UWVBFRCA9IG9sZAorICAgIH0KKyAgICBjaGVja1Jlc3VsdEJ5VGV4dChleHBlY3RlZCkKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNpZ2h0L2ZvbGRpbmcvSmF2YUZvbGRpbmdUZXN0Lmdyb292eSBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9jb2RlSW5zaWdodC9mb2xkaW5nL0phdmFGb2xkaW5nVGVzdC5ncm9vdnkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmExODhmZgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9jb2RlSW5zaWdodC9mb2xkaW5nL0phdmFGb2xkaW5nVGVzdC5ncm9vdnkKQEAgLTAsMCArMSwzOTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwMC0yMDEyIEpldEJyYWlucyBzLnIuby4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCitwYWNrYWdlIGNvbS5pbnRlbGxpai5jb2RlSW5zaWdodC5mb2xkaW5nOworCisKK2ltcG9ydCBjb20uaW50ZWxsaWouY29kZUluc2lnaHQuZm9sZGluZy5pbXBsLkNvZGVGb2xkaW5nTWFuYWdlckltcGwKK2ltcG9ydCBjb20uaW50ZWxsaWouY29kZUluc2lnaHQuZm9sZGluZy5pbXBsLkphdmFDb2RlRm9sZGluZ1NldHRpbmdzSW1wbAoraW1wb3J0IGNvbS5pbnRlbGxpai5maW5kLkZpbmRNYW5hZ2VyCitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkuYXBwbGljYXRpb24uZXguUGF0aE1hbmFnZXJFeAoraW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLmVkaXRvci5Gb2xkUmVnaW9uCitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkuZWRpdG9yLmV4LkZvbGRpbmdNb2RlbEV4CitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkuZWRpdG9yLmltcGwuRm9sZGluZ01vZGVsSW1wbAoraW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLmZpbGVFZGl0b3IuaW1wbC50ZXh0LlRleHRFZGl0b3JQcm92aWRlcgoraW1wb3J0IGNvbS5pbnRlbGxpai50ZXN0RnJhbWV3b3JrLmZpeHR1cmVzLkxpZ2h0Q29kZUluc2lnaHRGaXh0dXJlVGVzdENhc2UKKworLyoqCisgKiBAYXV0aG9yIERlbmlzIFpoZGFub3YKKyAqIEBzaW5jZSAxLzE3LzExIDE6MDAgUE0KKyAqLworcHVibGljIGNsYXNzIEphdmFGb2xkaW5nVGVzdCBleHRlbmRzIExpZ2h0Q29kZUluc2lnaHRGaXh0dXJlVGVzdENhc2UgeworICAKKyAgZGVmIEphdmFDb2RlRm9sZGluZ1NldHRpbmdzSW1wbCBteUZvbGRpbmdTZXR0aW5ncworICBkZWYgSmF2YUNvZGVGb2xkaW5nU2V0dGluZ3NJbXBsIG15Rm9sZGluZ1N0YXRlVG9SZXN0b3JlCisgIAorICBAT3ZlcnJpZGUKKyAgcHVibGljIHZvaWQgc2V0VXAoKSB7CisgICAgc3VwZXIuc2V0VXAoKQorICAgIG15Rm9sZGluZ1NldHRpbmdzID0gSmF2YUNvZGVGb2xkaW5nU2V0dGluZ3MuaW5zdGFuY2UgYXMgSmF2YUNvZGVGb2xkaW5nU2V0dGluZ3NJbXBsCisgICAgbXlGb2xkaW5nU3RhdGVUb1Jlc3RvcmUgPSBuZXcgSmF2YUNvZGVGb2xkaW5nU2V0dGluZ3NJbXBsKCkKKyAgICBteUZvbGRpbmdTdGF0ZVRvUmVzdG9yZS5sb2FkU3RhdGUobXlGb2xkaW5nU2V0dGluZ3MpCisgIH0KKworICBAT3ZlcnJpZGUKKyAgcHJvdGVjdGVkIHZvaWQgdGVhckRvd24oKSB7CisgICAgbXlGb2xkaW5nU2V0dGluZ3MubG9hZFN0YXRlKG15Rm9sZGluZ1N0YXRlVG9SZXN0b3JlKQorICAgIHN1cGVyLnRlYXJEb3duKCkKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RFbmRPZkxpbmVDb21tZW50cygpIHsKKyAgICBteUZpeHR1cmUudGVzdEZvbGRpbmcoIiRQYXRoTWFuYWdlckV4LnRlc3REYXRhUGF0aC9jb2RlSW5zaWdodC9mb2xkaW5nLyR7Z2V0VGVzdE5hbWUoZmFsc2UpfS5qYXZhIik7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0RWRpdGluZ0ltcG9ydHMoKSB7CisgICAgY29uZmlndXJlICIiIlwKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuTWFwOworPGNhcmV0PgorCitjbGFzcyBGb28geyBMaXN0IGE7IE1hcCBiOyB9CisiIiIKKyAgICAKKyAgICBhc3NlcnQgbXlGaXh0dXJlLmVkaXRvci5mb2xkaW5nTW9kZWwuZ2V0Q29sbGFwc2VkUmVnaW9uQXRPZmZzZXQoMTApCisKKyAgICBteUZpeHR1cmUudHlwZSAnaW1wb3J0ICcKKyAgICBteUZpeHR1cmUuZG9IaWdobGlnaHRpbmcoKQorICAgIGFzc2VydCAhbXlGaXh0dXJlLmVkaXRvci5mb2xkaW5nTW9kZWwuZ2V0Q29sbGFwc2VkUmVnaW9uQXRPZmZzZXQoMTApCisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0SmF2YWRvY0xpa2VDbGFzc0hlYWRlcigpIHsKKyAgICBkZWYgdGV4dCA9ICIiIlwKKy8qKgorICogVGhpcyBpcyBhIGhlYWRlciB0byBjb2xsYXBzZQorICovCitpbXBvcnQgamF2YS51dGlsLio7CitjbGFzcyBGb28geyBMaXN0IGE7IE1hcCBiOyB9CisiIiIKKyAgICBjb25maWd1cmUgdGV4dAorICAgIGRlZiBmb2xkUmVnaW9uID0gbXlGaXh0dXJlLmVkaXRvci5mb2xkaW5nTW9kZWwuZ2V0Q29sbGFwc2VkUmVnaW9uQXRPZmZzZXQoMCkKKyAgICBhc3NlcnQgZm9sZFJlZ2lvbgorICAgIGFzc2VydEVxdWFscyAwLCBmb2xkUmVnaW9uLnN0YXJ0T2Zmc2V0CisgICAgYXNzZXJ0RXF1YWxzIHRleHQuaW5kZXhPZigiaW1wb3J0IikgLSAxLCBmb2xkUmVnaW9uLmVuZE9mZnNldAorICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFN1YnNlcXVlbnRDb2xsYXBzZUJsb2NrKCkgeworICAgIGRlZiB0ZXh0ID0gIiIiXAorY2xhc3MgVGVzdCB7CisgICAgdm9pZCB0ZXN0KGludCBpKSB7CisgICAgICAgIGlmIChpID4gMSkgeworICAgICAgICAgICAgPGNhcmV0PmkrKzsKKyAgICAgICAgfQorICAgIH0KK30KKyIiIgorICAgIGNvbmZpZ3VyZSB0ZXh0CisgICAgbXlGaXh0dXJlLnBlcmZvcm1FZGl0b3JBY3Rpb24gJ0NvbGxhcHNlQmxvY2snCisgICAgbXlGaXh0dXJlLnBlcmZvcm1FZGl0b3JBY3Rpb24gJ0NvbGxhcHNlQmxvY2snCisgICAgYXNzZXJ0RXF1YWxzKHRleHQuaW5kZXhPZignfScsIHRleHQuaW5kZXhPZignaSsrJykpLCBteUZpeHR1cmUuZWRpdG9yLmNhcmV0TW9kZWwub2Zmc2V0KQorICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEZvbGRHcm91cCgpIHsKKyAgICAvLyBJbXBsaWVkIGJ5IElERUEtNzk0MjAKKyAgICBteUZvbGRpbmdTZXR0aW5ncy5DT0xMQVBTRV9DTE9TVVJFUyA9IHRydWUKKyAgICBkZWYgdGV4dCA9ICIiIlwKK2NsYXNzIFRlc3QgeworICAgIHZvaWQgdGVzdCgpIHsKKyAgICAgICAgbmV3IFJ1bm5hYmxlKCkgeworICAgICAgICAgICAgcHVibGljIHZvaWQgcnVuKCkgeworICAgICAgICAgICAgICAgIGludCBpID0gMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfS5ydW4oKTsKKyAgICB9Cit9CisiIiIKKyAgICAKKyAgICBjb25maWd1cmUgdGV4dAorICAgIGRlZiBmb2xkaW5nTW9kZWwgPSBteUZpeHR1cmUuZWRpdG9yLmZvbGRpbmdNb2RlbCBhcyBGb2xkaW5nTW9kZWxJbXBsCisgICAgZGVmIGNsb3N1cmVTdGFydEZvbGQgPSBmb2xkaW5nTW9kZWwuZ2V0Q29sbGFwc2VkUmVnaW9uQXRPZmZzZXQodGV4dC5pbmRleE9mKCJSdW5uYWJsZSIpKQorICAgIGFzc2VydE5vdE51bGwgY2xvc3VyZVN0YXJ0Rm9sZAorICAgIGFzc2VydEZhbHNlIGNsb3N1cmVTdGFydEZvbGQuZXhwYW5kZWQKKyAgICAKKyAgICBhc3NlcnROb3ROdWxsIGNsb3N1cmVTdGFydEZvbGQuZ3JvdXAKKyAgICBkZWYgY2xvc3VyZUZvbGRzID0gZm9sZGluZ01vZGVsLmdldEdyb3VwZWRSZWdpb25zKGNsb3N1cmVTdGFydEZvbGQuZ3JvdXApCisgICAgYXNzZXJ0Tm90TnVsbCBjbG9zdXJlRm9sZHMKKyAgICBhc3NlcnRFcXVhbHMoMiwgY2xvc3VyZUZvbGRzLnNpemUoKSkKKyAgICAKKyAgICBkZWYgY2xvc3VyZUVuZEZvbGQgPSBjbG9zdXJlRm9sZHMuZ2V0KDEpCisgICAgYXNzZXJ0RmFsc2UgY2xvc3VyZUVuZEZvbGQuZXhwYW5kZWQKKyAgICAKKyAgICBteUZpeHR1cmUuZWRpdG9yLmNhcmV0TW9kZWwubW92ZVRvT2Zmc2V0KGNsb3N1cmVFbmRGb2xkLnN0YXJ0T2Zmc2V0ICsgMSkKKyAgICBhc3NlcnRUcnVlIGNsb3N1cmVTdGFydEZvbGQuZXhwYW5kZWQKKyAgICBhc3NlcnRUcnVlIGNsb3N1cmVFbmRGb2xkLmV4cGFuZGVkCisgICAgCisgICAgY2hhbmdlRm9sZFJlZ2lvbnMgeyBjbG9zdXJlU3RhcnRGb2xkLmV4cGFuZGVkID0gZmFsc2UgfQorICAgIGFzc2VydFRydWUgY2xvc3VyZVN0YXJ0Rm9sZC5leHBhbmRlZAorICAgIGFzc2VydFRydWUgY2xvc3VyZUVuZEZvbGQuZXhwYW5kZWQKKyAgfQorCisgIHB1YmxpYyB2b2lkICJ0ZXN0IGNsb3N1cmUgZm9sZGluZyB3aGVuIGFuIGFic3RyYWN0IG1ldGhvZCBpcyBub3QgaW4gdGhlIGRpcmVjdCBzdXBlcmNsYXNzIigpIHsKKyAgICBteUZvbGRpbmdTZXR0aW5ncy5DT0xMQVBTRV9DTE9TVVJFUyA9IHRydWUKKyAgICBkZWYgdGV4dCA9ICIiIlwKK3B1YmxpYyBhYnN0cmFjdCBjbGFzcyBBcm91bmRUZW1wbGF0ZU1ldGhvZDxUPiB7CisgIHB1YmxpYyBhYnN0cmFjdCBUIGV4ZWN1dGUoKTsKK30KK3ByaXZhdGUgc3RhdGljIGFic3RyYWN0IGNsYXNzIFNldHVwVGltZXI8VD4gZXh0ZW5kcyBBcm91bmRUZW1wbGF0ZU1ldGhvZDxUPiB7Cit9CitjbGFzcyBUZXN0IHsKKyAgICB2b2lkIHRlc3QoKSB7CisgICAgIG5ldyBTZXR1cFRpbWVyPEludGVnZXI+KCkgeworICAgICAgcHVibGljIEludGVnZXIgZXhlY3V0ZSgpIHsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgICB9CisgICAgfTsKKyAgfQorfQorIiIiCisKKyAgICBjb25maWd1cmUgdGV4dAorICAgIGRlZiBmb2xkaW5nTW9kZWwgPSBteUZpeHR1cmUuZWRpdG9yLmZvbGRpbmdNb2RlbCBhcyBGb2xkaW5nTW9kZWxJbXBsCisgICAgZGVmIGNsb3N1cmVTdGFydEZvbGQgPSBmb2xkaW5nTW9kZWwuZ2V0Q29sbGFwc2VkUmVnaW9uQXRPZmZzZXQodGV4dC5pbmRleE9mKCI8SW50ZWdlcj4iKSkKKyAgICBhc3NlcnROb3ROdWxsIGNsb3N1cmVTdGFydEZvbGQKKyAgICBhc3NlcnRGYWxzZSBjbG9zdXJlU3RhcnRGb2xkLmV4cGFuZGVkCisKKyAgICBhc3NlcnROb3ROdWxsIGNsb3N1cmVTdGFydEZvbGQuZ3JvdXAKKyAgICBkZWYgY2xvc3VyZUZvbGRzID0gZm9sZGluZ01vZGVsLmdldEdyb3VwZWRSZWdpb25zKGNsb3N1cmVTdGFydEZvbGQuZ3JvdXApCisgICAgYXNzZXJ0Tm90TnVsbCBjbG9zdXJlRm9sZHMKKyAgICBhc3NlcnRFcXVhbHMoMiwgY2xvc3VyZUZvbGRzLnNpemUoKSkKKyAgfQorICAKKyAgcHVibGljIHZvaWQgInRlc3QgYnVpbGRlciBzdHlsZSBzZXR0ZXIiKCkgeworICAgIG15Rm9sZGluZ1NldHRpbmdzLkNPTExBUFNFX0FDQ0VTU09SUyA9IHRydWUKKyAgICBkZWYgdGV4dCA9ICIiIlwKK2NsYXNzIEZvbyB7CisgICAgcHJpdmF0ZSBTdHJpbmcgYmFyOworCisgICAgcHVibGljIEZvbyBzZXRCYXIoU3RyaW5nIGJhcikgeworICAgICAgICB0aGlzLmJhciA9IGJhcjsKKyAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgfQorfQorIiIiCisKKyAgICBjb25maWd1cmUgdGV4dAorICAgIGRlZiBmb2xkaW5nTW9kZWwgPSBteUZpeHR1cmUuZWRpdG9yLmZvbGRpbmdNb2RlbCBhcyBGb2xkaW5nTW9kZWxJbXBsCisgICAgaW50IGluZGV4T2ZCYXIgPSB0ZXh0LmluZGV4T2YoInRoaXMuYmFyIikKKyAgICBkZWYgYWNjZXNzb3JTdGFydEZvbGQgPSBmb2xkaW5nTW9kZWwuZ2V0Q29sbGFwc2VkUmVnaW9uQXRPZmZzZXQoaW5kZXhPZkJhcikKKyAgICBhc3NlcnROb3ROdWxsIGFjY2Vzc29yU3RhcnRGb2xkCisgICAgYXNzZXJ0RmFsc2UgYWNjZXNzb3JTdGFydEZvbGQuZXhwYW5kZWQKKyAgfQorCisgIHB1YmxpYyB2b2lkICJ0ZXN0IGNsb3N1cmUgZm9sZGluZyBkb2Vzbid0IGV4cGFuZCB3aGVuIGVkaXRpbmcgaW5zaWRlIigpIHsKKyAgICBkZWYgdGV4dCA9ICIiIlwKK2NsYXNzIFRlc3QgeworICAgIHZvaWQgdGVzdCgpIHsKKyAgICAgbmV3IFJ1bm5hYmxlKCkgeworICAgICAgc3RhdGljIGZpbmFsIGxvbmcgc2VyaWFsVmVyc2lvblVJRCA9IDQyTDsKKyAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKDxjYXJldD4pOworICAgICAgfQorICAgIH07CisgIH0KK30KKyIiIgorCisgICAgY29uZmlndXJlIHRleHQKKyAgICBkZWYgZm9sZGluZ01vZGVsID0gbXlGaXh0dXJlLmVkaXRvci5mb2xkaW5nTW9kZWwgYXMgRm9sZGluZ01vZGVsSW1wbAorICAgIGRlZiBjbG9zdXJlU3RhcnRGb2xkID0gZm9sZGluZ01vZGVsLmdldENvbGxhcHNlZFJlZ2lvbkF0T2Zmc2V0KHRleHQuaW5kZXhPZigiUnVubmFibGUiKSkKKyAgICBhc3NlcnROb3ROdWxsIGNsb3N1cmVTdGFydEZvbGQKKyAgICBhc3NlcnRGYWxzZSBjbG9zdXJlU3RhcnRGb2xkLmV4cGFuZGVkCisgICAgYXNzZXJ0IHRleHQuc3Vic3RyaW5nKGNsb3N1cmVTdGFydEZvbGQuZW5kT2Zmc2V0KS5zdGFydHNXaXRoKCdTeXN0ZW0nKSAvL29uZSBsaW5lIGNsb3N1cmUKKworICAgIG15Rml4dHVyZS50eXBlKCcyJykKKyAgICBteUZpeHR1cmUuZG9IaWdobGlnaHRpbmcoKQorICAgIGNsb3N1cmVTdGFydEZvbGQgPSBmb2xkaW5nTW9kZWwuZ2V0Q29sbGFwc2VkUmVnaW9uQXRPZmZzZXQodGV4dC5pbmRleE9mKCJSdW5uYWJsZSIpKQorICAgIGFzc2VydCBjbG9zdXJlU3RhcnRGb2xkCisgIH0KKworICBwdWJsaWMgdm9pZCAidGVzdCBjbG9zdXJlIGZvbGRpbmcgcGxhY2Vob2xkZXIgdGV4dHMiKCkgeworICAgIG15Rml4dHVyZS5hZGRDbGFzcygnaW50ZXJmYWNlIFJ1bm5hYmxlMiB7IHZvaWQgcnVuKCk7IH0nKQorICAgIG15Rml4dHVyZS5hZGRDbGFzcygnaW50ZXJmYWNlIFJ1bm5hYmxlMyB7IHZvaWQgcnVuKCk7IH0nKQorICAgIG15Rml4dHVyZS5hZGRDbGFzcygnaW50ZXJmYWNlIFJ1bm5hYmxlNCB7IHZvaWQgcnVuKCk7IH0nKQorICAgIG15Rml4dHVyZS5hZGRDbGFzcygnYWJzdHJhY3QgY2xhc3MgTXlBY3Rpb24geyBwdWJsaWMgYWJzdHJhY3Qgdm9pZCBydW4oKTsgcHVibGljIHZvaWQgcmVnaXN0ZXJWZXJ5Q3VzdG9tU2hvcnRjdXRTZXQoKSB7fSB9JykKKyAgICBkZWYgdGV4dCA9ICIiIlwKK2NsYXNzIFRlc3QgeworICB2b2lkIHRlc3QoKSB7CisgICAgUnVubmFibGUgciA9IG5ldyBSdW5uYWJsZSgpIHsKKyAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCk7CisgICAgICB9CisgICAgfTsKKyAgICBuZXcgUnVubmFibGUyKCkgeworICAgICAgcHVibGljIHZvaWQgcnVuKCkgeworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oKTsKKyAgICAgIH0KKyAgICB9LnJ1bigpOworICAgIGZvbyhuZXcgUnVubmFibGUzKCkgeworICAgICAgcHVibGljIHZvaWQgcnVuKCkgeworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oKTsKKyAgICAgIH0KKyAgICB9KTsKKyAgICBiYXIobmV3IFJ1bm5hYmxlNCgpIHsKKyAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCk7CisgICAgICB9CisgICAgfSk7CisgICAgbmV3IE15QWN0aW9uKCkgeworICAgICAgcHVibGljIHZvaWQgcnVuKCkgeworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oKTsKKyAgICAgIH0KKyAgICB9LnJlZ2lzdGVyVmVyeUN1c3RvbVNob3J0Y3V0U2V0KCk7CisgIH0KKworICB2b2lkIGZvbyhPYmplY3Qgbykge30KKyAgdm9pZCBiYXIoUnVubmFibGU0IG8pIHt9Cit9CisiIiIKKyAgICBjb25maWd1cmUgdGV4dAorICAgIGRlZiBmb2xkaW5nTW9kZWwgPSBteUZpeHR1cmUuZWRpdG9yLmZvbGRpbmdNb2RlbCBhcyBGb2xkaW5nTW9kZWxJbXBsCisKKyAgICBhc3NlcnQgZm9sZGluZ01vZGVsLmdldENvbGxhcHNlZFJlZ2lvbkF0T2Zmc2V0KHRleHQuaW5kZXhPZigiUnVubmFibGUoIikpLnBsYWNlaG9sZGVyVGV4dCA9PSAnKCkgLT4geyAnCisgICAgYXNzZXJ0IGZvbGRpbmdNb2RlbC5nZXRDb2xsYXBzZWRSZWdpb25BdE9mZnNldCh0ZXh0LmluZGV4T2YoIlJ1bm5hYmxlMigiKSkucGxhY2Vob2xkZXJUZXh0ID09ICcoUnVubmFibGUyKSAoKSAtPiB7ICcKKyAgICBhc3NlcnQgZm9sZGluZ01vZGVsLmdldENvbGxhcHNlZFJlZ2lvbkF0T2Zmc2V0KHRleHQuaW5kZXhPZigiUnVubmFibGUzKCIpKS5wbGFjZWhvbGRlclRleHQgPT0gJyhSdW5uYWJsZTMpICgpIC0+IHsgJworICAgIGFzc2VydCBmb2xkaW5nTW9kZWwuZ2V0Q29sbGFwc2VkUmVnaW9uQXRPZmZzZXQodGV4dC5pbmRleE9mKCJSdW5uYWJsZTQoIikpLnBsYWNlaG9sZGVyVGV4dCA9PSAnKCkgLT4geyAnCisgICAgYXNzZXJ0IGZvbGRpbmdNb2RlbC5nZXRDb2xsYXBzZWRSZWdpb25BdE9mZnNldCh0ZXh0LmluZGV4T2YoIk15QWN0aW9uKCIpKS5wbGFjZWhvbGRlclRleHQgPT0gJyhNeUFjdGlvbikgKCkgLT4geyAnCisgIH0KKworICBwdWJsaWMgdm9pZCAidGVzdCBubyBjbG9zdXJlIGZvbGRpbmcgd2hlbiB0aGUgbWV0aG9kIHRocm93cyBhbiB1bnJlc29sdmVkIGV4Y2VwdGlvbiIoKSB7CisgICAgZGVmIHRleHQgPSAiIiJcCitjbGFzcyBUZXN0IHsKKyAgICB2b2lkIHRlc3QoKSB7IG5ldyBSdW5uYWJsZSgpIHsKKyAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHRocm93cyBBc2FkZnNkYWZkZmFzZCB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbig8Y2FyZXQ+KTsKKyAgICAgIH0KKyAgICB9OworICB9Cit9CisiIiIKKworICAgIGNvbmZpZ3VyZSB0ZXh0CisgICAgZGVmIGZvbGRpbmdNb2RlbCA9IG15Rml4dHVyZS5lZGl0b3IuZm9sZGluZ01vZGVsIGFzIEZvbGRpbmdNb2RlbEltcGwKKyAgICBhc3NlcnQgIWZvbGRpbmdNb2RlbC5nZXRDb2xsYXBzZWRSZWdpb25BdE9mZnNldCh0ZXh0LmluZGV4T2YoIlJ1bm5hYmxlIikpCisgIH0KKworICBwdWJsaWMgdm9pZCAidGVzdCBubyBjbG9zdXJlIGZvbGRpbmcgZm9yIHN5bmNocm9uaXplZCBtZXRob2RzIigpIHsKKyAgICBkZWYgdGV4dCA9ICIiIlwKK2NsYXNzIFRlc3QgeworICAgIHZvaWQgdGVzdCgpIHsgbmV3IFJ1bm5hYmxlKCkgeworICAgICAgcHVibGljIHN5bmNocm9uaXplZCB2b2lkIHJ1bigpIHsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKDxjYXJldD4pOworICAgICAgfQorICAgIH07CisgIH0KK30KKyIiIgorICAgIGNvbmZpZ3VyZSB0ZXh0CisgICAgZGVmIGZvbGRpbmdNb2RlbCA9IG15Rml4dHVyZS5lZGl0b3IuZm9sZGluZ01vZGVsIGFzIEZvbGRpbmdNb2RlbEltcGwKKyAgICBhc3NlcnQgIWZvbGRpbmdNb2RlbC5nZXRDb2xsYXBzZWRSZWdpb25BdE9mZnNldCh0ZXh0LmluZGV4T2YoIlJ1bm5hYmxlIikpCisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0RmluZEluRm9sZGluZygpIHsKKyAgICBkZWYgdGV4dCA9ICIiIlwKK2NsYXNzIFRlc3QgeworICAgIHZvaWQgdGVzdDEoKSB7CisgICAgfQorICAgIHZvaWQgdGVzdDIoKSB7CisgICAgICAgIDxjYXJldD50ZXN0MSgpOworICAgIH0KK30KKyIiIgorICAgIGNvbmZpZ3VyZSB0ZXh0CisgICAgbXlGaXh0dXJlLnBlcmZvcm1FZGl0b3JBY3Rpb24gJ0NvbGxhcHNlQmxvY2snCisgICAgbXlGaXh0dXJlLmVkaXRvci5jYXJldE1vZGVsLm1vdmVUb09mZnNldCh0ZXh0LmluZGV4T2YoJ3Rlc3QxJykpCisgICAgbXlGaXh0dXJlLnBlcmZvcm1FZGl0b3JBY3Rpb24gJ0hpZ2hsaWdodFVzYWdlc0luRmlsZScKKyAgICBGaW5kTWFuYWdlci5nZXRJbnN0YW5jZShwcm9qZWN0KS5maW5kTmV4dFVzYWdlSW5FZGl0b3IoVGV4dEVkaXRvclByb3ZpZGVyLmdldEluc3RhbmNlKCkuZ2V0VGV4dEVkaXRvcihteUZpeHR1cmUuZWRpdG9yKSkKKyAgICBhc3NlcnRFcXVhbHMoJ3Rlc3QxJywgbXlGaXh0dXJlLmVkaXRvci5zZWxlY3Rpb25Nb2RlbC5zZWxlY3RlZFRleHQpCisgIH0KKyAgCisgIHB1YmxpYyB2b2lkIHRlc3RDdXN0b21Gb2xkaW5nKCkgeworICAgIG15Rml4dHVyZS50ZXN0Rm9sZGluZygiJFBhdGhNYW5hZ2VyRXgudGVzdERhdGFQYXRoL2NvZGVJbnNpZ2h0L2ZvbGRpbmcvJHtnZXRUZXN0TmFtZShmYWxzZSl9LmphdmEiKTsKKyAgfQorICAKKyAgcHVibGljIHZvaWQgInRlc3QgbW92ZSBtZXRob2RzIigpIHsKKyAgICBkZWYgaW5pdGlhbFRleHQgPSAnJydcCitjbGFzcyBUZXN0IHsKKyAgICB2b2lkIHRlc3QxKCkgeworICAgIH0KKyAgICAKKyAgICB2b2lkIHRlc3QyKCkgeworICAgIH0KK30KKycnJworICAgIAorICAgIENsb3N1cmU8Rm9sZFJlZ2lvbj4gZm9sZCA9IHsgU3RyaW5nIG1ldGhvZE5hbWUgLT4KKyAgICAgIGRlZiB0ZXh0ID0gbXlGaXh0dXJlLmVkaXRvci5kb2N1bWVudC50ZXh0CisgICAgICBkZWYgbmFtZUluZGV4ID0gdGV4dC5pbmRleE9mKG1ldGhvZE5hbWUpCisgICAgICBkZWYgc3RhcnQgPSB0ZXh0LmluZGV4T2YoJ3snLCBuYW1lSW5kZXgpCisgICAgICBkZWYgZW5kID0gdGV4dC5pbmRleE9mKCd9Jywgc3RhcnQpICsgMQorICAgICAgZGVmIHJlZ2lvbnMgPSBteUZpeHR1cmUuZWRpdG9yLmZvbGRpbmdNb2RlbC5hbGxGb2xkUmVnaW9ucworICAgICAgZm9yIChyZWdpb24gaW4gcmVnaW9ucykgeworICAgICAgICBpZiAocmVnaW9uLnN0YXJ0T2Zmc2V0ID09IHN0YXJ0ICYmIHJlZ2lvbi5lbmRPZmZzZXQgPT0gZW5kKSB7CisgICAgICAgICAgcmV0dXJuIHJlZ2lvbgorICAgICAgICB9CisgICAgICB9CisgICAgICBmYWlsKCJDYW4ndCBmaW5kIHRhcmdldCBmb2xkIHJlZ2lvbiBmb3IgbWV0aG9kIHdpdGggbmFtZSAnJG1ldGhvZE5hbWUnLiBSZWdpc3RlcmVkIHJlZ2lvbnM6ICRyZWdpb25zIikKKyAgICAgIG51bGwKKyAgICB9CisKKyAgICBjb25maWd1cmUgaW5pdGlhbFRleHQKKyAgICBkZWYgZm9sZGluZ01vZGVsID0gbXlGaXh0dXJlLmVkaXRvci5mb2xkaW5nTW9kZWwgYXMgRm9sZGluZ01vZGVsRXgKKyAgICBmb2xkaW5nTW9kZWwucnVuQmF0Y2hGb2xkaW5nT3BlcmF0aW9uIHsKKyAgICAgIGZvbGQoJ3Rlc3QxJykuZXhwYW5kZWQgPSB0cnVlCisgICAgICBmb2xkKCd0ZXN0MicpLmV4cGFuZGVkID0gZmFsc2UKKyAgICB9CisKKyAgICBteUZpeHR1cmUuZWRpdG9yLmNhcmV0TW9kZWwubW92ZVRvT2Zmc2V0KGluaXRpYWxUZXh0LmluZGV4T2YoJ3ZvaWQnKSkKKyAgICBteUZpeHR1cmUucGVyZm9ybUVkaXRvckFjdGlvbiAnTW92ZVN0YXRlbWVudERvd24nCisgICAgQ29kZUZvbGRpbmdNYW5hZ2VyLmdldEluc3RhbmNlKHByb2plY3QpLnVwZGF0ZUZvbGRSZWdpb25zKG15Rml4dHVyZS5lZGl0b3IpCisgICAgYXNzZXJ0VHJ1ZShmb2xkKCd0ZXN0MScpLmV4cGFuZGVkKQorICAgIGFzc2VydEZhbHNlKGZvbGQoJ3Rlc3QyJykuZXhwYW5kZWQpCisKKyAgICBteUZpeHR1cmUucGVyZm9ybUVkaXRvckFjdGlvbiAnTW92ZVN0YXRlbWVudFVwJworICAgIENvZGVGb2xkaW5nTWFuYWdlci5nZXRJbnN0YW5jZShwcm9qZWN0KS51cGRhdGVGb2xkUmVnaW9ucyhteUZpeHR1cmUuZWRpdG9yKQorICAgIGFzc2VydFRydWUoZm9sZCgndGVzdDEnKS5leHBhbmRlZCkKKyAgICBhc3NlcnRGYWxzZShmb2xkKCd0ZXN0MicpLmV4cGFuZGVkKQorICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFVub3JkZXJlZEZvbGRSZWdpb25zUmVnaXN0cmF0aW9uKCkgeworICAgIGRlZiB0ZXh0ID0gJzAxMjM0NTY3JworICAgIGNvbmZpZ3VyZSB0ZXh0CisgICAgZGVmIGZvbGRNb2RlbCA9IG15Rml4dHVyZS5lZGl0b3IuZm9sZGluZ01vZGVsIGFzIEZvbGRpbmdNb2RlbEltcGwKKyAgICBmb2xkTW9kZWwucnVuQmF0Y2hGb2xkaW5nT3BlcmF0aW9uIHsKKyAgICAgIGRlZiBpbm5lckZvbGQgPSBmb2xkTW9kZWwuYWRkRm9sZFJlZ2lvbigzLCA1LCAnLi4uJykKKyAgICAgIGRlZiBvdXRlckZvbGQgPSBmb2xkTW9kZWwuYWRkRm9sZFJlZ2lvbigyLCA2LCAnLi4uJykKKyAgICAgIGlubmVyRm9sZC5leHBhbmRlZCA9IGZhbHNlCisgICAgICBvdXRlckZvbGQuZXhwYW5kZWQgPSBmYWxzZQorICAgIH0KKyAgICBkZWYgZm9sZHMgPSBmb2xkTW9kZWwuZmV0Y2hWaXNpYmxlKCkKKyAgICBhc3NlcnRFcXVhbHMoMSwgZm9sZHMubGVuZ3RoKQorICAgIGFzc2VydEVxdWFscygyLCBmb2xkc1swXS5zdGFydE9mZnNldCkKKyAgICBhc3NlcnRFcXVhbHMoNiwgZm9sZHNbMF0uZW5kT2Zmc2V0KQorICB9CisgIAorICBwcml2YXRlIGRlZiBjb25maWd1cmUoU3RyaW5nIHRleHQpIHsKKyAgICBteUZpeHR1cmUuY29uZmlndXJlQnlUZXh0KCJhLmphdmEiLCB0ZXh0KQorICAgIENvZGVGb2xkaW5nTWFuYWdlckltcGwuZ2V0SW5zdGFuY2UoZ2V0UHJvamVjdCgpKS5idWlsZEluaXRpYWxGb2xkaW5ncyhteUZpeHR1cmUuZWRpdG9yKTsKKyAgICBkZWYgZm9sZGluZ01vZGVsID0gbXlGaXh0dXJlLmVkaXRvci5mb2xkaW5nTW9kZWwgYXMgRm9sZGluZ01vZGVsRXgKKyAgICBmb2xkaW5nTW9kZWwucmVidWlsZCgpCisgICAgbXlGaXh0dXJlLmRvSGlnaGxpZ2h0aW5nKCkKKyAgfQorCisgIHByaXZhdGUgZGVmIGNoYW5nZUZvbGRSZWdpb25zKENsb3N1cmUgb3ApIHsKKyAgICBteUZpeHR1cmUuZWRpdG9yLmZvbGRpbmdNb2RlbC5ydW5CYXRjaEZvbGRpbmdPcGVyYXRpb25Eb05vdENvbGxhcHNlQ2FyZXQob3ApCisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9jb2RlSW5zaWdodC9nZW5lcmF0aW9uL3N1cnJvdW5kV2l0aC9KYXZhU3Vycm91bmRXaXRoVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNpZ2h0L2dlbmVyYXRpb24vc3Vycm91bmRXaXRoL0phdmFTdXJyb3VuZFdpdGhUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzEyZmZhYwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9jb2RlSW5zaWdodC9nZW5lcmF0aW9uL3N1cnJvdW5kV2l0aC9KYXZhU3Vycm91bmRXaXRoVGVzdC5qYXZhCkBAIC0wLDAgKzEsMTc5IEBACisvKgorICogQ29weXJpZ2h0IDIwMDAtMjAxMSBKZXRCcmFpbnMgcy5yLm8uCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworcGFja2FnZSBjb20uaW50ZWxsaWouY29kZUluc2lnaHQuZ2VuZXJhdGlvbi5zdXJyb3VuZFdpdGg7CisKK2ltcG9ydCBjb20uaW50ZWxsaWouY29kZUluc2lnaHQudGVtcGxhdGUuVGVtcGxhdGVNYW5hZ2VyOworaW1wb3J0IGNvbS5pbnRlbGxpai5jb2RlSW5zaWdodC50ZW1wbGF0ZS5pbXBsLlRlbXBsYXRlTWFuYWdlckltcGw7CitpbXBvcnQgY29tLmludGVsbGlqLmNvZGVJbnNpZ2h0LnRlbXBsYXRlLmltcGwuVGVtcGxhdGVTdGF0ZTsKK2ltcG9ydCBjb20uaW50ZWxsaWoubGFuZy5zdXJyb3VuZFdpdGguU3Vycm91bmRlcjsKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS51dGlsLnRleHQuU3RyaW5nVXRpbDsKK2ltcG9ydCBjb20uaW50ZWxsaWoudGVzdEZyYW1ld29yay5MaWdodENvZGVJbnNpZ2h0VGVzdENhc2U7CitpbXBvcnQgb3JnLmpldGJyYWlucy5hbm5vdGF0aW9ucy5Ob3ROdWxsOworaW1wb3J0IG9yZy5qZXRicmFpbnMuYW5ub3RhdGlvbnMuTnVsbGFibGU7CisKKy8qKgorICogQGF1dGhvciBEZW5pcyBaaGRhbm92CisgKiBAc2luY2UgNS8zLzExIDI6MzUgUE0KKyAqLworcHVibGljIGNsYXNzIEphdmFTdXJyb3VuZFdpdGhUZXN0IGV4dGVuZHMgTGlnaHRDb2RlSW5zaWdodFRlc3RDYXNlIHsKKyAgCisgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBCQVNFX1BBVEggPSAiL2NvZGVJbnNpZ2h0L2dlbmVyYXRpb24vc3Vycm91bmRXaXRoL2phdmEvIjsKKyAgCisgIEBTdXBwcmVzc1dhcm5pbmdzKHsiVW51c2VkRGVjbGFyYXRpb24ifSkKKyAgcHJpdmF0ZSBlbnVtIFN1cnJvdW5kVHlwZSB7CisgICAgSUYobmV3IEphdmFXaXRoSWZTdXJyb3VuZGVyKCkpLCBJRl9FTFNFKG5ldyBKYXZhV2l0aElmRWxzZVN1cnJvdW5kZXIoKSksCisgICAgCisgICAgV0hJTEUobmV3IEphdmFXaXRoV2hpbGVTdXJyb3VuZGVyKCkpLCBET19XSElMRShuZXcgSmF2YVdpdGhEb1doaWxlU3Vycm91bmRlcigpKSwKKyAgICAKKyAgICBGT1IobmV3IEphdmFXaXRoRm9yU3Vycm91bmRlcigpKSwKKyAgICAKKyAgICBUUllfQ0FUQ0gobmV3IEphdmFXaXRoVHJ5Q2F0Y2hTdXJyb3VuZGVyKCkpLCBUUllfRklOQUxMWShuZXcgSmF2YVdpdGhUcnlGaW5hbGx5U3Vycm91bmRlcigpKSwgCisgICAgVFJZX0NBVENIX0ZJTkFMTFkobmV3IEphdmFXaXRoVHJ5Q2F0Y2hGaW5hbGx5U3Vycm91bmRlcigpKSwKKworICAgIFNZTkNIUk9OSVpFRChuZXcgSmF2YVdpdGhTeW5jaHJvbml6ZWRTdXJyb3VuZGVyKCkpLAorCisgICAgUlVOTkFCTEUobmV3IEphdmFXaXRoUnVubmFibGVTdXJyb3VuZGVyKCkpLAorICAgIAorICAgIENPREVfQkxPQ0sobmV3IEphdmFXaXRoQmxvY2tTdXJyb3VuZGVyKCkpOworCisgICAgcHJpdmF0ZSBmaW5hbCBTdXJyb3VuZGVyIG15U3Vycm91bmRlcjsKKworICAgIFN1cnJvdW5kVHlwZShTdXJyb3VuZGVyIHN1cnJvdW5kZXIpIHsKKyAgICAgIG15U3Vycm91bmRlciA9IHN1cnJvdW5kZXI7CisgICAgfQorCisgICAgcHVibGljIFN1cnJvdW5kZXIgZ2V0U3Vycm91bmRlcigpIHsKKyAgICAgIHJldHVybiBteVN1cnJvdW5kZXI7CisgICAgfQorICAgIAorICAgIHB1YmxpYyBTdHJpbmcgdG9GaWxlTmFtZSgpIHsKKyAgICAgIFN0cmluZ0J1aWxkZXIgcmVzdWx0ID0gbmV3IFN0cmluZ0J1aWxkZXIoKTsKKyAgICAgIGJvb2xlYW4gY2FwaXRhbGl6ZSA9IHRydWU7CisgICAgICBmb3IgKGNoYXIgYyA6IHRvU3RyaW5nKCkudG9DaGFyQXJyYXkoKSkgeworICAgICAgICBpZiAoYyA9PSAnXycpIHsKKyAgICAgICAgICBjYXBpdGFsaXplID0gdHJ1ZTsKKyAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICBpZiAoY2FwaXRhbGl6ZSkgeworICAgICAgICAgIHJlc3VsdC5hcHBlbmQoQ2hhcmFjdGVyLnRvVXBwZXJDYXNlKGMpKTsKKyAgICAgICAgICBjYXBpdGFsaXplID0gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgcmVzdWx0LmFwcGVuZChDaGFyYWN0ZXIudG9Mb3dlckNhc2UoYykpOworICAgICAgICB9CisgICAgICB9CisgICAgICByZXR1cm4gcmVzdWx0LnRvU3RyaW5nKCk7CisgICAgfQorICB9CisgIAorICBwdWJsaWMgdm9pZCB0ZXN0Q29tbWVudEFzRmlyc3RTdXJyb3VuZFN0YXRlbWVudCgpIHRocm93cyBFeGNlcHRpb24geworICAgIFN0cmluZyB0ZW1wbGF0ZSA9ICJDb21tZW50QXNGaXJzdCVzU3Vycm91bmRTdGF0ZW1lbnQiOworICAgIGZvciAoU3Vycm91bmRUeXBlIHR5cGUgOiBTdXJyb3VuZFR5cGUudmFsdWVzKCkpIHsKKyAgICAgIGRvVGVzdChTdHJpbmcuZm9ybWF0KHRlbXBsYXRlLCBTdHJpbmdVdGlsLmNhcGl0YWxpemUodHlwZS50b0ZpbGVOYW1lKCkpKSwgdHlwZS5nZXRTdXJyb3VuZGVyKCkpOworICAgIH0KKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RTdXJyb3VuZE5vbkV4cHJlc3Npb25XaXRoUGFyZW50aGVzaXMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoZ2V0VGVzdE5hbWUoZmFsc2UpLCBuZXcgSmF2YVdpdGhQYXJlbnRoZXNlc1N1cnJvdW5kZXIoKSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0U3Vycm91bmROb25FeHByZXNzaW9uV2l0aENhc3QoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoZ2V0VGVzdE5hbWUoZmFsc2UpLCBuZXcgSmF2YVdpdGhDYXN0U3Vycm91bmRlcigpKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RTdXJyb3VuZEV4cHJlc3Npb25XaXRoQ2FzdEVtcHR5TGluZUFmdGVyKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0V2l0aFRlbXBsYXRlRmluaXNoKGdldFRlc3ROYW1lKGZhbHNlKSwgbmV3IEphdmFXaXRoQ2FzdFN1cnJvdW5kZXIoKSwgInZhciIpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFN1cnJvdW5kRXhwcmVzc2lvbldpdGhDYXN0RW1wdHlMaW5lQWZ0ZXJfMigpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdFdpdGhUZW1wbGF0ZUZpbmlzaChnZXRUZXN0TmFtZShmYWxzZSksIG5ldyBKYXZhV2l0aENhc3RTdXJyb3VuZGVyKCksIG51bGwpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFN1cnJvdW5kTm9uRXhwcmVzc2lvbldpdGhOb3QoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoZ2V0VGVzdE5hbWUoZmFsc2UpLCBuZXcgSmF2YVdpdGhOb3RTdXJyb3VuZGVyKCkpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFN1cnJvdW5kQmluYXJ5V2l0aENhc3QoKSB7CisgICAgZmluYWwgVGVtcGxhdGVNYW5hZ2VySW1wbCB0ZW1wbGF0ZU1hbmFnZXIgPSAoVGVtcGxhdGVNYW5hZ2VySW1wbClUZW1wbGF0ZU1hbmFnZXIuZ2V0SW5zdGFuY2UoZ2V0UHJvamVjdCgpKTsKKyAgICB0ZW1wbGF0ZU1hbmFnZXIuc2V0VGVtcGxhdGVUZXN0aW5nKHRydWUpOworICAgIHRyeSB7CisgICAgICBkb1Rlc3QoZ2V0VGVzdE5hbWUoZmFsc2UpLCBuZXcgSmF2YVdpdGhDYXN0U3Vycm91bmRlcigpKTsKKyAgICB9CisgICAgZmluYWxseSB7CisgICAgICB0ZW1wbGF0ZU1hbmFnZXIuc2V0VGVtcGxhdGVUZXN0aW5nKGZhbHNlKTsKKyAgICB9CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0U3Vycm91bmRDb25kaXRpb25hbFdpdGhDYXN0KCkgeworICAgIGZpbmFsIFRlbXBsYXRlTWFuYWdlckltcGwgdGVtcGxhdGVNYW5hZ2VyID0gKFRlbXBsYXRlTWFuYWdlckltcGwpVGVtcGxhdGVNYW5hZ2VyLmdldEluc3RhbmNlKGdldFByb2plY3QoKSk7CisgICAgdGVtcGxhdGVNYW5hZ2VyLnNldFRlbXBsYXRlVGVzdGluZyh0cnVlKTsKKyAgICB0cnkgeworICAgICAgZG9UZXN0KGdldFRlc3ROYW1lKGZhbHNlKSwgbmV3IEphdmFXaXRoQ2FzdFN1cnJvdW5kZXIoKSk7CisgICAgfQorICAgIGZpbmFsbHkgeworICAgICAgdGVtcGxhdGVNYW5hZ2VyLnNldFRlbXBsYXRlVGVzdGluZyhmYWxzZSk7CisgICAgfQorICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFN1cnJvdW5kQXNzaWdubWVudFdpdGhDYXN0KCkgeworICAgIGZpbmFsIFRlbXBsYXRlTWFuYWdlckltcGwgdGVtcGxhdGVNYW5hZ2VyID0gKFRlbXBsYXRlTWFuYWdlckltcGwpVGVtcGxhdGVNYW5hZ2VyLmdldEluc3RhbmNlKGdldFByb2plY3QoKSk7CisgICAgdGVtcGxhdGVNYW5hZ2VyLnNldFRlbXBsYXRlVGVzdGluZyh0cnVlKTsKKyAgICB0cnkgeworICAgICAgZG9UZXN0KGdldFRlc3ROYW1lKGZhbHNlKSwgbmV3IEphdmFXaXRoQ2FzdFN1cnJvdW5kZXIoKSk7CisgICAgfQorICAgIGZpbmFsbHkgeworICAgICAgdGVtcGxhdGVNYW5hZ2VyLnNldFRlbXBsYXRlVGVzdGluZyhmYWxzZSk7CisgICAgfQorICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFN1cnJvdW5kV2l0aE5vdE51bGxDaGVjaygpIHsKKyAgICBmaW5hbCBUZW1wbGF0ZU1hbmFnZXJJbXBsIHRlbXBsYXRlTWFuYWdlciA9IChUZW1wbGF0ZU1hbmFnZXJJbXBsKVRlbXBsYXRlTWFuYWdlci5nZXRJbnN0YW5jZShnZXRQcm9qZWN0KCkpOworICAgIHRlbXBsYXRlTWFuYWdlci5zZXRUZW1wbGF0ZVRlc3RpbmcodHJ1ZSk7CisgICAgdHJ5IHsKKyAgICAgIGRvVGVzdChnZXRUZXN0TmFtZShmYWxzZSksIG5ldyBKYXZhV2l0aE51bGxDaGVja1N1cnJvdW5kZXIoKSk7CisgICAgfQorICAgIGZpbmFsbHkgeworICAgICAgdGVtcGxhdGVNYW5hZ2VyLnNldFRlbXBsYXRlVGVzdGluZyhmYWxzZSk7CisgICAgfQorICB9CisKKyAgcHJpdmF0ZSB2b2lkIGRvVGVzdChATm90TnVsbCBTdHJpbmcgZmlsZU5hbWUsIGZpbmFsIFN1cnJvdW5kZXIgc3Vycm91bmRlcikgeworICAgIGNvbmZpZ3VyZUJ5RmlsZShCQVNFX1BBVEggKyBmaWxlTmFtZSArICIuamF2YSIpOworICAgIFN1cnJvdW5kV2l0aEhhbmRsZXIuaW52b2tlKGdldFByb2plY3QoKSwgZ2V0RWRpdG9yKCksIGdldEZpbGUoKSwgc3Vycm91bmRlcik7CisgICAgY2hlY2tSZXN1bHRCeUZpbGUoQkFTRV9QQVRIICsgZmlsZU5hbWUgKyAiX2FmdGVyLmphdmEiKTsKKyAgfQorCisgIHByaXZhdGUgdm9pZCBkb1Rlc3RXaXRoVGVtcGxhdGVGaW5pc2goQE5vdE51bGwgU3RyaW5nIGZpbGVOYW1lLCBmaW5hbCBTdXJyb3VuZGVyIHN1cnJvdW5kZXIsIEBOdWxsYWJsZSBTdHJpbmcgdGV4dFRvVHlwZSkKKyAgICB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBmaW5hbCBUZW1wbGF0ZU1hbmFnZXJJbXBsIHRlbXBsYXRlTWFuYWdlciA9IChUZW1wbGF0ZU1hbmFnZXJJbXBsKVRlbXBsYXRlTWFuYWdlci5nZXRJbnN0YW5jZShnZXRQcm9qZWN0KCkpOworICAgIHRyeSB7CisgICAgICB0ZW1wbGF0ZU1hbmFnZXIuc2V0VGVtcGxhdGVUZXN0aW5nKHRydWUpOworICAgICAgY29uZmlndXJlQnlGaWxlKEJBU0VfUEFUSCArIGZpbGVOYW1lICsgIi5qYXZhIik7CisgICAgICBTdXJyb3VuZFdpdGhIYW5kbGVyLmludm9rZShnZXRQcm9qZWN0KCksIGdldEVkaXRvcigpLCBnZXRGaWxlKCksIHN1cnJvdW5kZXIpOworICAgICAgaWYgKHRleHRUb1R5cGUgIT0gbnVsbCkgeworICAgICAgICB0eXBlKHRleHRUb1R5cGUpOworICAgICAgfQorICAgICAgVGVtcGxhdGVTdGF0ZSB0ZW1wbGF0ZVN0YXRlID0gVGVtcGxhdGVNYW5hZ2VySW1wbC5nZXRUZW1wbGF0ZVN0YXRlKGdldEVkaXRvcigpKTsKKyAgICAgIGFzc2VydE5vdE51bGwodGVtcGxhdGVTdGF0ZSk7CisgICAgICB0ZW1wbGF0ZVN0YXRlLm5leHRUYWIoKTsKKyAgICAgIGNoZWNrUmVzdWx0QnlGaWxlKEJBU0VfUEFUSCArIGZpbGVOYW1lICsgIl9hZnRlci5qYXZhIik7CisgICAgfQorICAgIGZpbmFsbHkgeworICAgICAgdGVtcGxhdGVNYW5hZ2VyLnNldFRlbXBsYXRlVGVzdGluZyhmYWxzZSk7CisgICAgfQorICB9CisKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9jb2RlSW5zaWdodC9oaWdobGlnaHRpbmcvSGlnaGxpZ2h0VXNhZ2VzSGFuZGxlclRlc3QuZ3Jvb3Z5IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNpZ2h0L2hpZ2hsaWdodGluZy9IaWdobGlnaHRVc2FnZXNIYW5kbGVyVGVzdC5ncm9vdnkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2ZjMzlhMwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9jb2RlSW5zaWdodC9oaWdobGlnaHRpbmcvSGlnaGxpZ2h0VXNhZ2VzSGFuZGxlclRlc3QuZ3Jvb3Z5CkBAIC0wLDAgKzEsMjE5IEBACitwYWNrYWdlIGNvbS5pbnRlbGxpai5jb2RlSW5zaWdodC5oaWdobGlnaHRpbmc7CisKK2ltcG9ydCBjb20uaW50ZWxsaWouSmF2YVRlc3RVdGlsCitpbXBvcnQgY29tLmludGVsbGlqLmNvZGVJbnNpZ2h0LmRhZW1vbi5pbXBsLklkZW50aWZpZXJIaWdobGlnaHRlclBhc3NGYWN0b3J5CitpbXBvcnQgY29tLmludGVsbGlqLmNvZGVJbnNwZWN0aW9uLnNpbGx5QXNzaWdubWVudC5TaWxseUFzc2lnbm1lbnRJbnNwZWN0aW9uCitpbXBvcnQgY29tLmludGVsbGlqLmxhbmcuYW5ub3RhdGlvbi5IaWdobGlnaHRTZXZlcml0eTsKK2ltcG9ydCBjb20uaW50ZWxsaWoudGVzdEZyYW1ld29yay5maXh0dXJlcy5MaWdodENvZGVJbnNpZ2h0Rml4dHVyZVRlc3RDYXNlOworaW1wb3J0IG9yZy5qZXRicmFpbnMuYW5ub3RhdGlvbnMuTm9uTmxzOworCisvKioKKyAqIEBhdXRob3IgY2RyCisgKi8KK3B1YmxpYyBjbGFzcyBIaWdobGlnaHRVc2FnZXNIYW5kbGVyVGVzdCBleHRlbmRzIExpZ2h0Q29kZUluc2lnaHRGaXh0dXJlVGVzdENhc2UgeworICBwcml2YXRlIHZvaWQgY3RybFNoaWZ0RjcoKSB7CisgICAgSGlnaGxpZ2h0VXNhZ2VzSGFuZGxlci5pbnZva2UobXlGaXh0dXJlLmdldFByb2plY3QoKSwgbXlGaXh0dXJlLmdldEVkaXRvcigpLCBteUZpeHR1cmUuZ2V0RmlsZSgpKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RTaW1wbGVUaHJvd3MoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBjb25maWd1cmVGaWxlKCk7CisgICAgY3RybFNoaWZ0RjcoKTsKKyAgICBhc3NlcnRSYW5nZVRleHQoInRocm93cyIsICJFeGNlcHRpb24iKTsKKyAgICBjaGVja1Vuc2VsZWN0KCk7CisgIH0KKyAgcHVibGljIHZvaWQgdGVzdFRocm93c0V4cHJlc3Npb24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBjb25maWd1cmVGaWxlKCk7CisgICAgY3RybFNoaWZ0RjcoKTsKKyAgICBhc3NlcnRSYW5nZVRleHQoInRocm93cyIsICIoRXhjZXB0aW9uKWRldGFpbCIpOworICAgIGNoZWNrVW5zZWxlY3QoKTsKKyAgfQorICBwdWJsaWMgdm9pZCB0ZXN0VGhyb3dzUmVmZXJlbmNlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgY29uZmlndXJlRmlsZSgpOworICAgIGN0cmxTaGlmdEY3KCk7CisgICAgYXNzZXJ0UmFuZ2VUZXh0KCJ0aHJvd3MiLCAiZGV0YWlsIik7CisgICAgY2hlY2tVbnNlbGVjdCgpOworICB9CisKKyAgcHJpdmF0ZSB2b2lkIGNoZWNrVW5zZWxlY3QoKSB7CisgICAgY3RybFNoaWZ0RjcoKTsKKyAgICBhc3NlcnRSYW5nZVRleHQoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RVbnNlbGVjdFVzYWdlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgY29uZmlndXJlRmlsZSgpOworICAgIGN0cmxTaGlmdEY3KCk7CisgICAgYXNzZXJ0UmFuZ2VUZXh0KCJmb28iLCAiZm9vIiwgImZvbyIpOworICAgIGNoZWNrVW5zZWxlY3QoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RIaWdobGlnaHRPdmVycmlkZGVuKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgY29uZmlndXJlRmlsZSgpOworICAgIGN0cmxTaGlmdEY3KCk7CisgICAgYXNzZXJ0UmFuZ2VUZXh0KCJleHRlbmRzIiwgImZvbyIpOworICAgIGNoZWNrVW5zZWxlY3QoKTsKKyAgfQorICBwdWJsaWMgdm9pZCB0ZXN0SGlnaGxpZ2h0T3ZlcnJpZGRlbkltcGxlbWVudHMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBjb25maWd1cmVGaWxlKCk7CisgICAgY3RybFNoaWZ0RjcoKTsKKyAgICBhc3NlcnRSYW5nZVRleHQoImltcGxlbWVudHMiLCAiZm9vIik7CisgICAgY2hlY2tVbnNlbGVjdCgpOworICB9CisgIHB1YmxpYyB2b2lkIHRlc3RIaWdobGlnaHRPdmVycmlkZGVuTm90aGluZygpIHRocm93cyBFeGNlcHRpb24geworICAgIGNvbmZpZ3VyZUZpbGUoKTsKKyAgICBjdHJsU2hpZnRGNygpOworICAgIGFzc2VydFJhbmdlVGV4dCgpOworICAgIGNoZWNrVW5zZWxlY3QoKTsKKyAgfQorICBwdWJsaWMgdm9pZCB0ZXN0SGlnaGxpZ2h0T3ZlcnJpZGRlbk11bHRpcGxlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgY29uZmlndXJlRmlsZSgpOworICAgIGN0cmxTaGlmdEY3KCk7CisgICAgYXNzZXJ0UmFuZ2VUZXh0KCJpbXBsZW1lbnRzIiwgImZvbyIsICJvdGhlciIpOworICAgIGNoZWNrVW5zZWxlY3QoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RJREVBREVWMjg4MjIoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBteUZpeHR1cmUuY29uZmlndXJlQnlUZXh0KCJGb28uamF2YSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICIiInB1YmxpYyBjbGFzcyBGb28ge3B1YmxpYyBTdHJpbmcgZm9vKFN0cmluZyBzKSB7CisgICAgd2hpbGUgKHMubGVuZ3RoKCkgPiAwKSB7CisgICAgICBpZiAocy5sZW5ndGgoKSA8IDApIHsKKyAgICAgICAgcyA9ICIiOworICAgICAgICBjb250aW51ZTsKKyAgICAgIH0KKyAgICAgIGVsc2UgeworICAgICAgfQorICAgIH0KKyAgICByZTxjYXJldD50dXJuIHM7CisgIH0KK30iIiIpOworICAgIGN0cmxTaGlmdEY3KCk7CisgICAgYXNzZXJ0UmFuZ2VUZXh0KCJyZXR1cm4gczsiKTsKKyAgfQorICAgICAgICAgICAgCisgIHB1YmxpYyB2b2lkIHRlc3RSZXR1cm5zSW5UcnlGaW5hbGx5KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgLy8gU2VlIElERUFERVYtMTQwMjgKKyAgICBteUZpeHR1cmUuY29uZmlndXJlQnlUZXh0KCJGb28uamF2YSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICIiInB1YmxpYyBjbGFzcyBGb28geworICBpbnQgZm9vKGJvb2xlYW4gYikgeworICAgIHRyeSB7CisgICAgICBpZiAoYikgcmV0dXJuIDE7CisgICAgfQorICAgIGZpbmFsbHkgeworICAgICAgaWYgKGIpIHJldHVybiAyOworICAgIH0KKyAgICByPGNhcmV0PmV0dXJuIDM7CisgIH0KK30iIiIpOworCisgICAgY3RybFNoaWZ0RjcoKTsKKyAgICBhc3NlcnRSYW5nZVRleHQoInJldHVybiAxOyIsICJyZXR1cm4gMjsiLCAicmV0dXJuIDM7Iik7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0UmV0dXJuc0luTGFtYmRhKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgLy8gU2VlIElERUFERVYtMTQwMjgKKyAgICBteUZpeHR1cmUuY29uZmlndXJlQnlUZXh0KCJGb28uamF2YSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICIiInB1YmxpYyBjbGFzcyBGb28geworICB7CisgICAgUnVubmFibGUgciA9ICgpIC0+IHsKKyAgICAgICAgICAgaWYgKHRydWUpIHJldHVybjsKKyAgICAgICAgICAgcmV0dXI8Y2FyZXQ+bjsKKyAgICB9CisgIH0KK30iIiIpOworCisgICAgY3RybFNoaWZ0RjcoKTsKKyAgICBhc3NlcnRSYW5nZVRleHQoInJldHVybjsiLCAicmV0dXJuOyIpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFN1cHByZXNzZWRXYXJuaW5nc0hpZ2hsaWdodHMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBteUZpeHR1cmUuY29uZmlndXJlQnlUZXh0KCJGb28uamF2YSIsICIiInB1YmxpYyBjbGFzcyBGb28geworICAgICAgICBAU3VwcHJlc3NXYXJuaW5ncyh7IlNpbDxjYXJldD5seUFzc2lnbm1lbnQifSkKKyAgICAgICAgdm9pZCBmb28oKSB7CisgICAgICAgICAgICBpbnQgaSA9IDA7CisgICAgICAgICAgICBpID0gaTsKKyAgICAgICAgfQorICAgIH0iIiIpOworICAgIG15Rml4dHVyZS5lbmFibGVJbnNwZWN0aW9ucyhuZXcgU2lsbHlBc3NpZ25tZW50SW5zcGVjdGlvbigpKQorICAgIGN0cmxTaGlmdEY3KCk7CisgICAgYXNzZXJ0UmFuZ2VUZXh0KCJpID0gaSIpOworICB9CisKKyAgcHJpdmF0ZSB2b2lkIGFzc2VydFJhbmdlVGV4dChATm9uTmxzIFN0cmluZy4uLiB0ZXh0cykgeworICAgIGRlZiBoaWdobGlnaHRlcnMgPSBteUZpeHR1cmUuZWRpdG9yLmdldE1hcmt1cE1vZGVsKCkuZ2V0QWxsSGlnaGxpZ2h0ZXJzKCkKKyAgICBkZWYgYWN0dWFsID0gaGlnaGxpZ2h0ZXJzLmNvbGxlY3QgeyBteUZpeHR1cmUuZmlsZS50ZXh0LnN1YnN0cmluZyhpdC5zdGFydE9mZnNldCwgaXQuZW5kT2Zmc2V0KSB9CisgICAgYXNzZXJ0U2FtZUVsZW1lbnRzKGFjdHVhbCwgdGV4dHMpCisgIH0KKyAgCisgIHByaXZhdGUgdm9pZCBjb25maWd1cmVGaWxlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZGVmIGZpbGUgPSBteUZpeHR1cmUuY29weUZpbGVUb1Byb2plY3QoIi9jb2RlSW5zaWdodC9oaWdobGlnaHRVc2FnZXNIYW5kbGVyLyIgKyBnZXRUZXN0TmFtZShmYWxzZSkgKyAiLmphdmEiLCBnZXRUZXN0TmFtZShmYWxzZSkgKyAiLmphdmEiKQorICAgIG15Rml4dHVyZS5jb25maWd1cmVGcm9tRXhpc3RpbmdWaXJ0dWFsRmlsZShmaWxlKQorICB9CisKKyAgcHVibGljIHZvaWQgInRlc3Qgc3RhdGljYWxseSBpbXBvcnRlZCBvdmVybG9hZHMgZnJvbSB1c2FnZSIoKSB7CisgICAgbXlGaXh0dXJlLmFkZENsYXNzKCIiIgorY2xhc3MgRm9vIHsgCisgIHN0YXRpYyB2b2lkIGZvbyhpbnQgYSkge30gIAorICBzdGF0aWMgdm9pZCBmb28oaW50IGEsIGludCBiKSB7fSAgCit9IiIiKQorICAgIG15Rml4dHVyZS5jb25maWd1cmVCeVRleHQgJ0Jhci5qYXZhJywgJycnCitpbXBvcnQgc3RhdGljIEZvby5mb287CisKK2NsYXNzIEJhciB7CisgIHsKKyAgICA8Y2FyZXQ+Zm9vKDEpOworICB9Cit9CisnJycKKyAgICBjdHJsU2hpZnRGNygpCisgICAgYXNzZXJ0UmFuZ2VUZXh0ICdmb28nLCAnZm9vJworICB9CisKKyAgcHVibGljIHZvaWQgInRlc3Qgc3RhdGljYWxseSBpbXBvcnRlZCBvdmVybG9hZHMgZnJvbSBpbXBvcnQiKCkgeworICAgIG15Rml4dHVyZS5hZGRDbGFzcygiIiIKK2NsYXNzIEZvbyB7IAorICBzdGF0aWMgdm9pZCBmb28oaW50IGEpIHt9ICAKKyAgc3RhdGljIHZvaWQgZm9vKGludCBhLCBpbnQgYikge30gIAorfSIiIikKKyAgICBteUZpeHR1cmUuY29uZmlndXJlQnlUZXh0ICdCYXIuamF2YScsICcnJworaW1wb3J0IHN0YXRpYyBGb28uZm88Y2FyZXQ+bzsKKworY2xhc3MgQmFyIHsKKyAgeworICAgIGZvbygxKTsKKyAgfQorfQorJycnCisgICAgY3RybFNoaWZ0RjcoKQorICAgIGFzc2VydFJhbmdlVGV4dCAnZm9vJywgJ2ZvbycsICdmb28nIC8vaW1wb3J0IGhpZ2hsaWdodGVkIHR3aWNlOiBmb3IgZWFjaCBvdmVybG9hZGVkIHVzYWdlIHRhcmdldAorICB9CisKKyAgcHVibGljIHZvaWQgInRlc3QgaWRlbnRpZmllciBoaWdobGlnaHRlciBmb3Igc3RhdGljIGltcG9ydHMiKCkgeworICAgIG15Rml4dHVyZS5hZGRDbGFzcygiIiIKK2NsYXNzIEZvbyB7IAorICBzdGF0aWMgdm9pZCBmb28oaW50IGEpIHt9ICAKKyAgc3RhdGljIHZvaWQgZm9vKGludCBhLCBpbnQgYikge30gIAorfSIiIikKKyAgICBteUZpeHR1cmUuY29uZmlndXJlQnlUZXh0ICdCYXIuamF2YScsICcnJworaW1wb3J0IHN0YXRpYyBGb28uZm88Y2FyZXQ+bzsKKworY2xhc3MgQmFyIHsKKyAgeworICAgIGZvbygxKTsKKyAgfQorfQorJycnCisgICAgSWRlbnRpZmllckhpZ2hsaWdodGVyUGFzc0ZhY3Rvcnkub3VyVGVzdGluZ0lkZW50aWZpZXJIaWdobGlnaHRpbmcgPSB0cnVlCisgICAgdHJ5IHsKKyAgICAgIGRlZiBpbmZvcyA9IG15Rml4dHVyZS5kb0hpZ2hsaWdodGluZygpCisgICAgICAvL2ltcG9ydCBoaWdobGlnaHRlZCB0d2ljZTogZm9yIGVhY2ggb3ZlcmxvYWRlZCB1c2FnZSB0YXJnZXQKKyAgICAgIGFzc2VydCBpbmZvcy5maW5kQWxsIHsgaXQuc2V2ZXJpdHkgPT0gSGlnaGxpZ2h0U2V2ZXJpdHkuSU5GT1JNQVRJT04gJiYgbXlGaXh0dXJlLmZpbGUudGV4dC5zdWJzdHJpbmcoaXQuc3RhcnRPZmZzZXQsIGl0LmVuZE9mZnNldCkgPT0gJ2ZvbycgfS5zaXplKCkgPT0gMworICAgIH0KKyAgICBmaW5hbGx5IHsKKyAgICAgIElkZW50aWZpZXJIaWdobGlnaHRlclBhc3NGYWN0b3J5Lm91clRlc3RpbmdJZGVudGlmaWVySGlnaGxpZ2h0aW5nID0gZmFsc2UKKyAgICB9CisgIH0KKworICBAT3ZlcnJpZGUKKyAgcHJvdGVjdGVkIFN0cmluZyBnZXRCYXNlUGF0aCgpIHsKKyAgICByZXR1cm4gSmF2YVRlc3RVdGlsLnJlbGF0aXZlSmF2YVRlc3REYXRhUGF0aAorICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovY29kZUluc2lnaHQvaW50ZW50aW9uL0FkZEltcG9ydEFjdGlvblRlc3QuZ3Jvb3Z5IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNpZ2h0L2ludGVudGlvbi9BZGRJbXBvcnRBY3Rpb25UZXN0Lmdyb292eQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ODI2NjJhCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNpZ2h0L2ludGVudGlvbi9BZGRJbXBvcnRBY3Rpb25UZXN0Lmdyb292eQpAQCAtMCwwICsxLDExMSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDAwLTIwMTEgSmV0QnJhaW5zIHMuci5vLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KK3BhY2thZ2UgY29tLmludGVsbGlqLmNvZGVJbnNpZ2h0LmludGVudGlvbjsKKworCitpbXBvcnQgY29tLmludGVsbGlqLnBvbS5qYXZhLkxhbmd1YWdlTGV2ZWwKK2ltcG9ydCBjb20uaW50ZWxsaWoudGVzdEZyYW1ld29yay5JZGVhVGVzdFV0aWwKK2ltcG9ydCBjb20uaW50ZWxsaWoudGVzdEZyYW1ld29yay5maXh0dXJlcy5MaWdodENvZGVJbnNpZ2h0Rml4dHVyZVRlc3RDYXNlCisKK3B1YmxpYyBjbGFzcyBBZGRJbXBvcnRBY3Rpb25UZXN0IGV4dGVuZHMgTGlnaHRDb2RlSW5zaWdodEZpeHR1cmVUZXN0Q2FzZSB7CisKKyAgcHVibGljIHZvaWQgdGVzdE1hcDE1KCkgeworICAgIElkZWFUZXN0VXRpbC5zZXRNb2R1bGVMYW5ndWFnZUxldmVsKG15TW9kdWxlLCBMYW5ndWFnZUxldmVsLkpES18xXzUpCisgICAgbXlGaXh0dXJlLmNvbmZpZ3VyZUJ5VGV4dCAnYS5qYXZhJywgJycnXAorcHVibGljIGNsYXNzIEZvbyB7CisgICAgdm9pZCBmb28oKSB7CisgICAgICAgIE1hPGNhcmV0PnA8PiBsOworICAgIH0KK30KKycnJworICAgIGltcG9ydENsYXNzKCkKKyAgICBteUZpeHR1cmUuY2hlY2tSZXN1bHQgJycnaW1wb3J0IGphdmEudXRpbC5NYXA7CisKK3B1YmxpYyBjbGFzcyBGb28geworICAgIHZvaWQgZm9vKCkgeworICAgICAgICBNYTxjYXJldD5wPD4gbDsKKyAgICB9Cit9CisnJycKKyAgfQorCisgIEBPdmVycmlkZQorICBwcm90ZWN0ZWQgdm9pZCB0ZWFyRG93bigpIHsKKyAgICBJZGVhVGVzdFV0aWwuc2V0TW9kdWxlTGFuZ3VhZ2VMZXZlbChteU1vZHVsZSwgTGFuZ3VhZ2VMZXZlbC5ISUdIRVNUKQorICAgIHN1cGVyLnRlYXJEb3duKCkKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RNYXBMYXRlc3RMYW5ndWFnZUxldmVsKCkgeworICAgIElkZWFUZXN0VXRpbC5zZXRNb2R1bGVMYW5ndWFnZUxldmVsKG15TW9kdWxlLCBMYW5ndWFnZUxldmVsLkhJR0hFU1QpCisgICAgbXlGaXh0dXJlLmNvbmZpZ3VyZUJ5VGV4dCAnYS5qYXZhJywgJycnXAorcHVibGljIGNsYXNzIEZvbyB7CisgICAgdm9pZCBmb28oKSB7CisgICAgICAgIE1hPGNhcmV0PnA8PiBsOworICAgIH0KK30KKycnJworICAgIGltcG9ydENsYXNzKCkKKyAgICBteUZpeHR1cmUuY2hlY2tSZXN1bHQgJycnaW1wb3J0IGphdmEudXRpbC5NYXA7CisKK3B1YmxpYyBjbGFzcyBGb28geworICAgIHZvaWQgZm9vKCkgeworICAgICAgICBNYTxjYXJldD5wPD4gbDsKKyAgICB9Cit9CisnJycKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RTdHJpbmdWYWx1ZSgpIHsKKyAgICBteUZpeHR1cmUuYWRkQ2xhc3MgJ3BhY2thZ2UgamF2YS5sYW5nOyBjbGFzcyBTdHJpbmdWYWx1ZSB7fScKKyAgICBteUZpeHR1cmUuYWRkQ2xhc3MgJ3BhY2thZ2UgZm9vOyBwdWJsaWMgY2xhc3MgU3RyaW5nVmFsdWUge30nCisgICAgbXlGaXh0dXJlLmNvbmZpZ3VyZUJ5VGV4dCAnYS5qYXZhJywgJycnXAorcHVibGljIGNsYXNzIEZvbyB7CisgICAgU3RyaW5nPGNhcmV0PlZhbHVlIHN2OworfQorJycnCisgICAgaW1wb3J0Q2xhc3MoKQorICAgIG15Rml4dHVyZS5jaGVja1Jlc3VsdCAnJydpbXBvcnQgZm9vLio7CisKK3B1YmxpYyBjbGFzcyBGb28geworICAgIFN0cmluZzxjYXJldD5WYWx1ZSBzdjsKK30KKycnJworCisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0VXNlQ29udGV4dCgpIHsKKyAgICBteUZpeHR1cmUuYWRkQ2xhc3MgJ3BhY2thZ2UgZm9vOyBwdWJsaWMgY2xhc3MgTG9nIHt9JworICAgIG15Rml4dHVyZS5hZGRDbGFzcyAncGFja2FnZSBiYXI7IHB1YmxpYyBjbGFzcyBMb2cge30nCisgICAgbXlGaXh0dXJlLmFkZENsYXNzICdwYWNrYWdlIGJhcjsgcHVibGljIGNsYXNzIExvZ0ZhY3RvcnkgeyBwdWJsaWMgc3RhdGljIExvZyBsb2coKXt9IH0nCisgICAgbXlGaXh0dXJlLmNvbmZpZ3VyZUJ5VGV4dCAnYS5qYXZhJywgJycnXAorcHVibGljIGNsYXNzIEZvbyB7CisgICAgTG88Y2FyZXQ+ZyBsID0gYmFyLkxvZ0ZhY3RvcnkubG9nKCk7Cit9CisnJycKKyAgICBpbXBvcnRDbGFzcygpCisgICAgbXlGaXh0dXJlLmNoZWNrUmVzdWx0ICcnJ2ltcG9ydCBiYXIuTG9nOworCitwdWJsaWMgY2xhc3MgRm9vIHsKKyAgICBMbzxjYXJldD5nIGwgPSBiYXIuTG9nRmFjdG9yeS5sb2coKTsKK30KKycnJworCisgIH0KKworICBwcml2YXRlIGRlZiBpbXBvcnRDbGFzcygpIHsKKyAgICBteUZpeHR1cmUubGF1bmNoQWN0aW9uKG15Rml4dHVyZS5maW5kU2luZ2xlSW50ZW50aW9uKCJJbXBvcnQgQ2xhc3MiKSkKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNpZ2h0L2ludGVudGlvbi9BZGRPbkRlbWFuZFN0YXRpY0ltcG9ydEFjdGlvblRlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9jb2RlSW5zaWdodC9pbnRlbnRpb24vQWRkT25EZW1hbmRTdGF0aWNJbXBvcnRBY3Rpb25UZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODAxN2VkOAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9jb2RlSW5zaWdodC9pbnRlbnRpb24vQWRkT25EZW1hbmRTdGF0aWNJbXBvcnRBY3Rpb25UZXN0LmphdmEKQEAgLTAsMCArMSwyOCBAQAorLyoKKyAqIENvcHlyaWdodCAyMDAwLTIwMTIgSmV0QnJhaW5zIHMuci5vLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KK3BhY2thZ2UgY29tLmludGVsbGlqLmNvZGVJbnNpZ2h0LmludGVudGlvbjsKKworaW1wb3J0IGNvbS5pbnRlbGxpai5jb2RlSW5zaWdodC5kYWVtb24uTGlnaHRJbnRlbnRpb25BY3Rpb25UZXN0Q2FzZTsKKworcHVibGljIGNsYXNzIEFkZE9uRGVtYW5kU3RhdGljSW1wb3J0QWN0aW9uVGVzdCBleHRlbmRzIExpZ2h0SW50ZW50aW9uQWN0aW9uVGVzdENhc2UgeworCisgIHB1YmxpYyB2b2lkIHRlc3QoKSB0aHJvd3MgRXhjZXB0aW9uIHsgZG9BbGxUZXN0cygpOyB9CisKKyAgQE92ZXJyaWRlCisgIHByb3RlY3RlZCBTdHJpbmcgZ2V0QmFzZVBhdGgoKSB7CisgICAgcmV0dXJuICIvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L2FkZE9uRGVtYW5kU3RhdGljSW1wb3J0IjsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNpZ2h0L2ludGVudGlvbi9BZGRTaW5nbGVTdGF0aWNJbXBvcnRBY3Rpb25UZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovY29kZUluc2lnaHQvaW50ZW50aW9uL0FkZFNpbmdsZVN0YXRpY0ltcG9ydEFjdGlvblRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kN2JhY2YyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNpZ2h0L2ludGVudGlvbi9BZGRTaW5nbGVTdGF0aWNJbXBvcnRBY3Rpb25UZXN0LmphdmEKQEAgLTAsMCArMSwzOCBAQAorLyoKKyAqIENvcHlyaWdodCAyMDAwLTIwMTEgSmV0QnJhaW5zIHMuci5vLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KK3BhY2thZ2UgY29tLmludGVsbGlqLmNvZGVJbnNpZ2h0LmludGVudGlvbjsKKworaW1wb3J0IGNvbS5pbnRlbGxpai5KYXZhVGVzdFV0aWw7CitpbXBvcnQgY29tLmludGVsbGlqLnRlc3RGcmFtZXdvcmsuZml4dHVyZXMuSmF2YUNvZGVJbnNpZ2h0Rml4dHVyZVRlc3RDYXNlOworCitwdWJsaWMgY2xhc3MgQWRkU2luZ2xlU3RhdGljSW1wb3J0QWN0aW9uVGVzdCBleHRlbmRzIEphdmFDb2RlSW5zaWdodEZpeHR1cmVUZXN0Q2FzZSB7CisKKyAgcHVibGljIHZvaWQgdGVzdEluYWNjZXNzaWJsZSgpIHsKKyAgICBteUZpeHR1cmUuYWRkQ2xhc3MoInBhY2thZ2UgZm9vOyBjbGFzcyBGb28ge3B1YmxpYyBzdGF0aWMgdm9pZCBmb28oKXt9fSIpOworICAgIG15Rml4dHVyZS5jb25maWd1cmVCeUZpbGUoZ2V0VGVzdE5hbWUoZmFsc2UpICsgIi5qYXZhIik7CisKKyAgICBmaW5hbCBJbnRlbnRpb25BY3Rpb24gaW50ZW50aW9uQWN0aW9uID0gbXlGaXh0dXJlLmZpbmRTaW5nbGVJbnRlbnRpb24oIkFkZCBzdGF0aWMgaW1wb3J0IGZvciAnaW1wbC5Gb29JbXBsLmZvbyciKTsKKyAgICBhc3NlcnROb3ROdWxsKGludGVudGlvbkFjdGlvbik7CisgICAgbXlGaXh0dXJlLmxhdW5jaEFjdGlvbihpbnRlbnRpb25BY3Rpb24pOworICAgIG15Rml4dHVyZS5jaGVja1Jlc3VsdEJ5RmlsZShnZXRUZXN0TmFtZShmYWxzZSkgKyAiX2FmdGVyLmphdmEiKTsKKyAgfQorCisKKyAgQE92ZXJyaWRlCisgIHByb3RlY3RlZCBTdHJpbmcgZ2V0VGVzdERhdGFQYXRoKCkgeworICAgIHJldHVybiBKYXZhVGVzdFV0aWwuZ2V0SmF2YVRlc3REYXRhUGF0aCgpICsgIi9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvYWRkU2luZ2xlU3RhdGljSW1wb3J0IjsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNpZ2h0L2ludGVudGlvbi9Db252ZXJ0VG9CYXNpY0xhdGluVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNpZ2h0L2ludGVudGlvbi9Db252ZXJ0VG9CYXNpY0xhdGluVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBlNjk2YzYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovY29kZUluc2lnaHQvaW50ZW50aW9uL0NvbnZlcnRUb0Jhc2ljTGF0aW5UZXN0LmphdmEKQEAgLTAsMCArMSw0OSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDAwLTIwMTIgSmV0QnJhaW5zIHMuci5vLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KK3BhY2thZ2UgY29tLmludGVsbGlqLmNvZGVJbnNpZ2h0LmludGVudGlvbjsKKworaW1wb3J0IGNvbS5pbnRlbGxpai5KYXZhVGVzdFV0aWw7CitpbXBvcnQgY29tLmludGVsbGlqLmNvZGVJbnNpZ2h0LkNvZGVJbnNpZ2h0QnVuZGxlOworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLnZmcy5lbmNvZGluZy5FbmNvZGluZ01hbmFnZXI7CitpbXBvcnQgY29tLmludGVsbGlqLnRlc3RGcmFtZXdvcmsuZml4dHVyZXMuQ29kZUluc2lnaHRUZXN0VXRpbDsKK2ltcG9ydCBjb20uaW50ZWxsaWoudGVzdEZyYW1ld29yay5maXh0dXJlcy5KYXZhQ29kZUluc2lnaHRGaXh0dXJlVGVzdENhc2U7CisKK3B1YmxpYyBjbGFzcyBDb252ZXJ0VG9CYXNpY0xhdGluVGVzdCBleHRlbmRzIEphdmFDb2RlSW5zaWdodEZpeHR1cmVUZXN0Q2FzZSB7CisgIHByaXZhdGUgU3RyaW5nIG15SW50ZW50aW9uOworCisgIEBPdmVycmlkZQorICBwdWJsaWMgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24geworICAgIHN1cGVyLnNldFVwKCk7CisgICAgbXlJbnRlbnRpb24gPSBDb2RlSW5zaWdodEJ1bmRsZS5tZXNzYWdlKCJpbnRlbnRpb24uY29udmVydC50by5iYXNpYy5sYXRpbiIpOworICAgIEVuY29kaW5nTWFuYWdlci5nZXRJbnN0YW5jZSgpLnNldERlZmF1bHRDaGFyc2V0TmFtZSgiVVRGLTgiKTsKKyAgfQorCisgIEBPdmVycmlkZQorICBwcm90ZWN0ZWQgU3RyaW5nIGdldFRlc3REYXRhUGF0aCgpIHsKKyAgICByZXR1cm4gSmF2YVRlc3RVdGlsLmdldEphdmFUZXN0RGF0YVBhdGgoKSArICIvY29kZUluc2lnaHQvY29udmVydFRvQmFzaWNMYXRpbi8iOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdENoYXJMaXRlcmFsKCkgeyBkb1Rlc3QoKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0U3RyaW5nTGl0ZXJhbCgpIHsgZG9UZXN0KCk7IH0KKyAgcHVibGljIHZvaWQgdGVzdFBsYWluQ29tbWVudCgpIHsgZG9UZXN0KCk7IH0KKyAgcHVibGljIHZvaWQgdGVzdERvY0NvbW1lbnQoKSB7IGRvVGVzdCgpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3REb2NUYWcoKSB7IGRvVGVzdCgpOyB9CisKKyAgcHJpdmF0ZSB2b2lkIGRvVGVzdCgpIHsKKyAgICBmaW5hbCBTdHJpbmcgbmFtZSA9IGdldFRlc3ROYW1lKGZhbHNlKTsKKyAgICBDb2RlSW5zaWdodFRlc3RVdGlsLmRvSW50ZW50aW9uVGVzdChteUZpeHR1cmUsIG15SW50ZW50aW9uLCBuYW1lICsgIi5qYXZhIiwgbmFtZSArICJfYWZ0ZXIuamF2YSIpOworICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovY29kZUluc2lnaHQvaW50ZW50aW9uL0NvbnZlcnRUb1N0cmluZ0xpdGVyYWxUZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovY29kZUluc2lnaHQvaW50ZW50aW9uL0NvbnZlcnRUb1N0cmluZ0xpdGVyYWxUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGU0MWUyMQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9jb2RlSW5zaWdodC9pbnRlbnRpb24vQ29udmVydFRvU3RyaW5nTGl0ZXJhbFRlc3QuamF2YQpAQCAtMCwwICsxLDQyIEBACisvKgorICogQ29weXJpZ2h0IDIwMDAtMjAxMSBKZXRCcmFpbnMgcy5yLm8uCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCitwYWNrYWdlIGNvbS5pbnRlbGxpai5jb2RlSW5zaWdodC5pbnRlbnRpb247CisKK2ltcG9ydCBjb20uaW50ZWxsaWouSmF2YVRlc3RVdGlsOworaW1wb3J0IGNvbS5pbnRlbGxpai5jb2RlSW5zaWdodC5kYWVtb24uUXVpY2tGaXhCdW5kbGU7CitpbXBvcnQgY29tLmludGVsbGlqLnRlc3RGcmFtZXdvcmsuZml4dHVyZXMuQ29kZUluc2lnaHRUZXN0VXRpbDsKK2ltcG9ydCBjb20uaW50ZWxsaWoudGVzdEZyYW1ld29yay5maXh0dXJlcy5KYXZhQ29kZUluc2lnaHRGaXh0dXJlVGVzdENhc2U7CisKKworcHVibGljIGNsYXNzIENvbnZlcnRUb1N0cmluZ0xpdGVyYWxUZXN0IGV4dGVuZHMgSmF2YUNvZGVJbnNpZ2h0Rml4dHVyZVRlc3RDYXNlIHsKKyAgcHJpdmF0ZSBTdHJpbmcgbXlJbnRlbnRpb247CisKKyAgQE92ZXJyaWRlCisgIHB1YmxpYyB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgc3VwZXIuc2V0VXAoKTsKKyAgICBteUludGVudGlvbiA9IFF1aWNrRml4QnVuZGxlLm1lc3NhZ2UoImNvbnZlcnQudG8uc3RyaW5nLnRleHQiKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RTaW1wbGUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBDb2RlSW5zaWdodFRlc3RVdGlsLmRvSW50ZW50aW9uVGVzdChteUZpeHR1cmUsIG15SW50ZW50aW9uLCAiU2ltcGxlLmphdmEiLCAiU2ltcGxlX2FmdGVyLmphdmEiKTsKKyAgfQorCisgIEBPdmVycmlkZQorICBwcm90ZWN0ZWQgU3RyaW5nIGdldFRlc3REYXRhUGF0aCgpIHsKKyAgICByZXR1cm4gSmF2YVRlc3RVdGlsLmdldEphdmFUZXN0RGF0YVBhdGgoKSArICIvY29kZUluc2lnaHQvY29udmVydFRvU3RyaW5nTGl0ZXJhbC8iOworICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovY29kZUluc2lnaHQvaW50ZW50aW9uL0NvcHlBYnN0cmFjdE1ldGhvZEltcGxlbWVudGF0aW9uVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNpZ2h0L2ludGVudGlvbi9Db3B5QWJzdHJhY3RNZXRob2RJbXBsZW1lbnRhdGlvblRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMDBmOWFkCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNpZ2h0L2ludGVudGlvbi9Db3B5QWJzdHJhY3RNZXRob2RJbXBsZW1lbnRhdGlvblRlc3QuamF2YQpAQCAtMCwwICsxLDMzIEBACitwYWNrYWdlIGNvbS5pbnRlbGxpai5jb2RlSW5zaWdodC5pbnRlbnRpb247CisKK2ltcG9ydCBjb20uaW50ZWxsaWouY29kZUluc2lnaHQuZGFlbW9uLkxpZ2h0SW50ZW50aW9uQWN0aW9uVGVzdENhc2U7CitpbXBvcnQgY29tLmludGVsbGlqLnBzaS5jb2RlU3R5bGUuQ29kZVN0eWxlU2V0dGluZ3M7CitpbXBvcnQgY29tLmludGVsbGlqLnBzaS5jb2RlU3R5bGUuQ29kZVN0eWxlU2V0dGluZ3NNYW5hZ2VyOworCisvKioKKyAqIEBhdXRob3IgeW9sZQorICovCitwdWJsaWMgY2xhc3MgQ29weUFic3RyYWN0TWV0aG9kSW1wbGVtZW50YXRpb25UZXN0IGV4dGVuZHMgTGlnaHRJbnRlbnRpb25BY3Rpb25UZXN0Q2FzZSB7CisgIEBPdmVycmlkZQorICBwcm90ZWN0ZWQgU3RyaW5nIGdldEJhc2VQYXRoKCkgeworICAgIHJldHVybiAiL2NvZGVJbnNpZ2h0L2RhZW1vbkNvZGVBbmFseXplci9xdWlja0ZpeC9jb3B5QWJzdHJhY3RNZXRob2RJbXBsZW1lbnRhdGlvbiI7CisgIH0KKworICBAT3ZlcnJpZGUKKyAgcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBzdXBlci5zZXRVcCgpOworICAgIENvZGVTdHlsZVNldHRpbmdzIHNldHRpbmdzID0gQ29kZVN0eWxlU2V0dGluZ3NNYW5hZ2VyLmdldFNldHRpbmdzKGdldFByb2plY3QoKSkuY2xvbmUoKTsKKyAgICBzZXR0aW5ncy5JTlNFUlRfT1ZFUlJJREVfQU5OT1RBVElPTiA9IGZhbHNlOworICAgIENvZGVTdHlsZVNldHRpbmdzTWFuYWdlci5nZXRJbnN0YW5jZShnZXRQcm9qZWN0KCkpLnNldFRlbXBvcmFyeVNldHRpbmdzKHNldHRpbmdzKTsKKyAgfQorCisgIEBPdmVycmlkZQorICBwcm90ZWN0ZWQgdm9pZCB0ZWFyRG93bigpIHRocm93cyBFeGNlcHRpb24geworICAgIENvZGVTdHlsZVNldHRpbmdzTWFuYWdlci5nZXRJbnN0YW5jZShnZXRQcm9qZWN0KCkpLmRyb3BUZW1wb3JhcnlTZXR0aW5ncygpOworICAgIHN1cGVyLnRlYXJEb3duKCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9BbGxUZXN0cygpOworICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovY29kZUluc2lnaHQvaW50ZW50aW9uL0NyZWF0ZVN1YmNsYXNzVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNpZ2h0L2ludGVudGlvbi9DcmVhdGVTdWJjbGFzc1Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZDA3NzVlCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNpZ2h0L2ludGVudGlvbi9DcmVhdGVTdWJjbGFzc1Rlc3QuamF2YQpAQCAtMCwwICsxLDQ2IEBACitwYWNrYWdlIGNvbS5pbnRlbGxpai5jb2RlSW5zaWdodC5pbnRlbnRpb247CisKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS52ZnMuVmlydHVhbEZpbGU7CitpbXBvcnQgY29tLmludGVsbGlqLnBzaS5Qc2lDbGFzczsKK2ltcG9ydCBjb20uaW50ZWxsaWoucHNpLlBzaURpcmVjdG9yeTsKK2ltcG9ydCBjb20uaW50ZWxsaWoucHNpLnNlYXJjaC5Qcm9qZWN0U2NvcGU7CitpbXBvcnQgY29tLmludGVsbGlqLnJlZmFjdG9yaW5nLk11bHRpRmlsZVRlc3RDYXNlOworaW1wb3J0IGNvbS5pbnRlbGxpai5jb2RlSW5zaWdodC5pbnRlbnRpb24uaW1wbC5DcmVhdGVTdWJjbGFzc0FjdGlvbjsKKworLyoqCisgKiBAYXV0aG9yIHlvbGUKKyAqLworcHVibGljIGNsYXNzIENyZWF0ZVN1YmNsYXNzVGVzdCBleHRlbmRzIE11bHRpRmlsZVRlc3RDYXNlIHsKKyAgcHVibGljIHZvaWQgdGVzdEdlbmVyaWNzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KCk7CisgIH0KKyAgCisgIHB1YmxpYyB2b2lkIHRlc3RJbm5lckNsYXNzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KG5ldyBQZXJmb3JtQWN0aW9uKCkgeworICAgICAgQE92ZXJyaWRlCisgICAgICBwdWJsaWMgdm9pZCBwZXJmb3JtQWN0aW9uKGZpbmFsIFZpcnR1YWxGaWxlIHJvb3REaXIsIGZpbmFsIFZpcnR1YWxGaWxlIHJvb3RBZnRlcikgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIFBzaUNsYXNzIHN1cGVyQ2xhc3MgPSBteUphdmFGYWNhZGUuZmluZENsYXNzKCJUZXN0IiwgUHJvamVjdFNjb3BlLmdldEFsbFNjb3BlKG15UHJvamVjdCkpOworICAgICAgICBhc3NlcnROb3ROdWxsKHN1cGVyQ2xhc3MpOworICAgICAgICBmaW5hbCBQc2lDbGFzcyBpbm5lciA9IHN1cGVyQ2xhc3MuZmluZElubmVyQ2xhc3NCeU5hbWUoIklubmVyIiwgZmFsc2UpOworICAgICAgICBhc3NlcnROb3ROdWxsKGlubmVyKTsKKyAgICAgICAgQ3JlYXRlU3ViY2xhc3NBY3Rpb24uY3JlYXRlSW5uZXJDbGFzcyhpbm5lcik7CisgICAgICB9CisgICAgfSk7CisgIH0KKworICBwcml2YXRlIHZvaWQgZG9UZXN0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KG5ldyBQZXJmb3JtQWN0aW9uKCkgeworICAgICAgQE92ZXJyaWRlCisgICAgICBwdWJsaWMgdm9pZCBwZXJmb3JtQWN0aW9uKGZpbmFsIFZpcnR1YWxGaWxlIHJvb3REaXIsIGZpbmFsIFZpcnR1YWxGaWxlIHJvb3RBZnRlcikgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIFBzaURpcmVjdG9yeSByb290ID0gbXlQc2lNYW5hZ2VyLmZpbmREaXJlY3Rvcnkocm9vdERpcik7CisgICAgICAgIFBzaUNsYXNzIHN1cGVyQ2xhc3MgPSBteUphdmFGYWNhZGUuZmluZENsYXNzKCJTdXBlcmNsYXNzIiwgUHJvamVjdFNjb3BlLmdldEFsbFNjb3BlKG15UHJvamVjdCkpOworICAgICAgICBDcmVhdGVTdWJjbGFzc0FjdGlvbi5jcmVhdGVTdWJjbGFzcyhzdXBlckNsYXNzLCByb290LCAiU3ViY2xhc3MiKTsKKyAgICAgIH0KKyAgICB9KTsKKyAgfQorCisgIEBPdmVycmlkZQorICBwcm90ZWN0ZWQgU3RyaW5nIGdldFRlc3RSb290KCkgeworICAgIHJldHVybiAiL2NvZGVJbnNpZ2h0L2NyZWF0ZVN1YmNsYXNzLyI7CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9jb2RlSW5zaWdodC9pbnRlbnRpb24vRW5jYXBzdWxhdGVGaWVsZFRlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9jb2RlSW5zaWdodC9pbnRlbnRpb24vRW5jYXBzdWxhdGVGaWVsZFRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNjUwNzNiCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNpZ2h0L2ludGVudGlvbi9FbmNhcHN1bGF0ZUZpZWxkVGVzdC5qYXZhCkBAIC0wLDAgKzEsMzEgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwMC0yMDEyIEpldEJyYWlucyBzLnIuby4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCitwYWNrYWdlIGNvbS5pbnRlbGxpai5jb2RlSW5zaWdodC5pbnRlbnRpb247CisKK2ltcG9ydCBjb20uaW50ZWxsaWouY29kZUluc2lnaHQuZGFlbW9uLkxpZ2h0SW50ZW50aW9uQWN0aW9uVGVzdENhc2U7CisKKy8qKgorICogQGF1dGhvciBEYW5pbGEgUG9ub21hcmVua28KKyAqLworcHVibGljIGNsYXNzIEVuY2Fwc3VsYXRlRmllbGRUZXN0IGV4dGVuZHMgTGlnaHRJbnRlbnRpb25BY3Rpb25UZXN0Q2FzZSB7CisKKyAgcHVibGljIHZvaWQgdGVzdCgpIHRocm93cyBFeGNlcHRpb24geyBkb0FsbFRlc3RzKCk7IH0KKworICBAT3ZlcnJpZGUKKyAgcHJvdGVjdGVkIFN0cmluZyBnZXRCYXNlUGF0aCgpIHsKKyAgICByZXR1cm4gIi9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvZW5jYXBzdWxhdGVGaWVsZCI7CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9jb2RlSW5zaWdodC9pbnRlbnRpb24vRXhwYW5kU3RhdGljSW1wb3J0QWN0aW9uVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNpZ2h0L2ludGVudGlvbi9FeHBhbmRTdGF0aWNJbXBvcnRBY3Rpb25UZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWIwZjAwNwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9jb2RlSW5zaWdodC9pbnRlbnRpb24vRXhwYW5kU3RhdGljSW1wb3J0QWN0aW9uVGVzdC5qYXZhCkBAIC0wLDAgKzEsMjggQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwMC0yMDExIEpldEJyYWlucyBzLnIuby4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCitwYWNrYWdlIGNvbS5pbnRlbGxpai5jb2RlSW5zaWdodC5pbnRlbnRpb247CisKK2ltcG9ydCBjb20uaW50ZWxsaWouY29kZUluc2lnaHQuZGFlbW9uLkxpZ2h0SW50ZW50aW9uQWN0aW9uVGVzdENhc2U7CisKK3B1YmxpYyBjbGFzcyBFeHBhbmRTdGF0aWNJbXBvcnRBY3Rpb25UZXN0IGV4dGVuZHMgTGlnaHRJbnRlbnRpb25BY3Rpb25UZXN0Q2FzZSB7CisKKyAgcHVibGljIHZvaWQgdGVzdCgpIHRocm93cyBFeGNlcHRpb24geyBkb0FsbFRlc3RzKCk7IH0KKworICBAT3ZlcnJpZGUKKyAgcHJvdGVjdGVkIFN0cmluZyBnZXRCYXNlUGF0aCgpIHsKKyAgICByZXR1cm4gIi9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvZXhwYW5kU3RhdGljSW1wb3J0IjsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNpZ2h0L2ludGVudGlvbi9JbnRyb2R1Y2VWYXJpYWJsZVRlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9jb2RlSW5zaWdodC9pbnRlbnRpb24vSW50cm9kdWNlVmFyaWFibGVUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzkwOGE0YQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9jb2RlSW5zaWdodC9pbnRlbnRpb24vSW50cm9kdWNlVmFyaWFibGVUZXN0LmphdmEKQEAgLTAsMCArMSwzMSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDAwLTIwMTIgSmV0QnJhaW5zIHMuci5vLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KK3BhY2thZ2UgY29tLmludGVsbGlqLmNvZGVJbnNpZ2h0LmludGVudGlvbjsKKworaW1wb3J0IGNvbS5pbnRlbGxpai5jb2RlSW5zaWdodC5kYWVtb24uTGlnaHRJbnRlbnRpb25BY3Rpb25UZXN0Q2FzZTsKKworLyoqCisgKiBAYXV0aG9yIERhbmlsYSBQb25vbWFyZW5rbworICovCitwdWJsaWMgY2xhc3MgSW50cm9kdWNlVmFyaWFibGVUZXN0IGV4dGVuZHMgTGlnaHRJbnRlbnRpb25BY3Rpb25UZXN0Q2FzZSB7CisKKyAgcHVibGljIHZvaWQgdGVzdCgpIHRocm93cyBFeGNlcHRpb24geyBkb0FsbFRlc3RzKCk7IH0KKworICBAT3ZlcnJpZGUKKyAgcHJvdGVjdGVkIFN0cmluZyBnZXRCYXNlUGF0aCgpIHsKKyAgICByZXR1cm4gIi9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvaW50cm9kdWNlVmFyaWFibGUiOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNpZ2h0L2ludGVudGlvbi9JbnZlcnRJZkNvbmRpdGlvblRlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9jb2RlSW5zaWdodC9pbnRlbnRpb24vSW52ZXJ0SWZDb25kaXRpb25UZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWVhN2VkOAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9jb2RlSW5zaWdodC9pbnRlbnRpb24vSW52ZXJ0SWZDb25kaXRpb25UZXN0LmphdmEKQEAgLTAsMCArMSw0OSBAQAorLyoKKyAqIENyZWF0ZWQgYnkgSW50ZWxsaUogSURFQS4KKyAqIFVzZXI6IG1pa2UKKyAqIERhdGU6IEF1ZyAyMiwgMjAwMgorICogVGltZTogMjo1ODo0MiBQTQorICogVG8gY2hhbmdlIHRlbXBsYXRlIGZvciBuZXcgY2xhc3MgdXNlIAorICogQ29kZSBTdHlsZSB8IENsYXNzIFRlbXBsYXRlcyBvcHRpb25zIChUb29scyB8IElERSBPcHRpb25zKS4KKyAqLworcGFja2FnZSBjb20uaW50ZWxsaWouY29kZUluc2lnaHQuaW50ZW50aW9uOworCitpbXBvcnQgY29tLmludGVsbGlqLmNvZGVJbnNpZ2h0LmRhZW1vbi5MaWdodEludGVudGlvbkFjdGlvblRlc3RDYXNlOworaW1wb3J0IGNvbS5pbnRlbGxpai5sYW5nLmphdmEuSmF2YUxhbmd1YWdlOworaW1wb3J0IGNvbS5pbnRlbGxpai5wc2kuY29kZVN0eWxlLkNvZGVTdHlsZVNldHRpbmdzTWFuYWdlcjsKK2ltcG9ydCBjb20uaW50ZWxsaWoucHNpLmNvZGVTdHlsZS5Db21tb25Db2RlU3R5bGVTZXR0aW5nczsKKworcHVibGljIGNsYXNzIEludmVydElmQ29uZGl0aW9uVGVzdCBleHRlbmRzIExpZ2h0SW50ZW50aW9uQWN0aW9uVGVzdENhc2UgeworCisgIEBPdmVycmlkZQorICBwcm90ZWN0ZWQgU3RyaW5nIGdldEJhc2VQYXRoKCkgeworICAgIHJldHVybiBCQVNFX1BBVEg7CisgIH0KKworICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQkFTRV9QQVRIID0gIi9jb2RlSW5zaWdodC9pbnZlcnRJZkNvbmRpdGlvbi8iOworICBwcml2YXRlIGJvb2xlYW4gbXlFbHNlT25OZXdMaW5lOworCisgIEBPdmVycmlkZQorICBwcm90ZWN0ZWQgYm9vbGVhbiBzaG91bGRCZUF2YWlsYWJsZUFmdGVyRXhlY3V0aW9uKCkgeworICAgIHJldHVybiB0cnVlOworICB9CisKKyAgQE92ZXJyaWRlCisgIHByb3RlY3RlZCB2b2lkIGJlZm9yZUFjdGlvblN0YXJ0ZWQoZmluYWwgU3RyaW5nIHRlc3ROYW1lLCBmaW5hbCBTdHJpbmcgY29udGVudHMpIHsKKyAgICBzdXBlci5iZWZvcmVBY3Rpb25TdGFydGVkKHRlc3ROYW1lLCBjb250ZW50cyk7CisgICAgZmluYWwgQ29tbW9uQ29kZVN0eWxlU2V0dGluZ3Mgc2V0dGluZ3MgPSBDb2RlU3R5bGVTZXR0aW5nc01hbmFnZXIuZ2V0U2V0dGluZ3MoZ2V0UHJvamVjdCgpKS5nZXRDb21tb25TZXR0aW5ncyhKYXZhTGFuZ3VhZ2UuSU5TVEFOQ0UpOworICAgIG15RWxzZU9uTmV3TGluZSA9IHNldHRpbmdzLkVMU0VfT05fTkVXX0xJTkU7CisgICAgc2V0dGluZ3MuRUxTRV9PTl9ORVdfTElORSA9ICFjb250ZW50cy5jb250YWlucygiZWxzZSBvbiB0aGUgc2FtZSBsaW5lIik7CisgIH0KKworICBAT3ZlcnJpZGUKKyAgcHJvdGVjdGVkIHZvaWQgYWZ0ZXJBY3Rpb25Db21wbGV0ZWQoZmluYWwgU3RyaW5nIHRlc3ROYW1lLCBmaW5hbCBTdHJpbmcgY29udGVudHMpIHsKKyAgICBzdXBlci5hZnRlckFjdGlvbkNvbXBsZXRlZCh0ZXN0TmFtZSwgY29udGVudHMpOworICAgIENvbW1vbkNvZGVTdHlsZVNldHRpbmdzIHNldHRpbmdzID0gQ29kZVN0eWxlU2V0dGluZ3NNYW5hZ2VyLmdldFNldHRpbmdzKGdldFByb2plY3QoKSkuZ2V0Q29tbW9uU2V0dGluZ3MoSmF2YUxhbmd1YWdlLklOU1RBTkNFKTsKKyAgICBzZXR0aW5ncy5FTFNFX09OX05FV19MSU5FID0gbXlFbHNlT25OZXdMaW5lOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdCgpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvQWxsVGVzdHMoKTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNpZ2h0L2ludGVudGlvbi9Nb3ZlRmllbGRBc3NpZ25tZW50VG9Jbml0aWFsaXplckFjdGlvblRlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9jb2RlSW5zaWdodC9pbnRlbnRpb24vTW92ZUZpZWxkQXNzaWdubWVudFRvSW5pdGlhbGl6ZXJBY3Rpb25UZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODAwMTdhZAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9jb2RlSW5zaWdodC9pbnRlbnRpb24vTW92ZUZpZWxkQXNzaWdubWVudFRvSW5pdGlhbGl6ZXJBY3Rpb25UZXN0LmphdmEKQEAgLTAsMCArMSwxNSBAQAorcGFja2FnZSBjb20uaW50ZWxsaWouY29kZUluc2lnaHQuaW50ZW50aW9uOworCitpbXBvcnQgY29tLmludGVsbGlqLmNvZGVJbnNpZ2h0LmRhZW1vbi5MaWdodEludGVudGlvbkFjdGlvblRlc3RDYXNlOworCisvKioKKyAqIEBhdXRob3IgdmVuCisgKi8KK3B1YmxpYyBjbGFzcyBNb3ZlRmllbGRBc3NpZ25tZW50VG9Jbml0aWFsaXplckFjdGlvblRlc3QgZXh0ZW5kcyBMaWdodEludGVudGlvbkFjdGlvblRlc3RDYXNlIHsKKyAgcHVibGljIHZvaWQgdGVzdCgpIHRocm93cyBFeGNlcHRpb24geyBkb0FsbFRlc3RzKCk7IH0KKworICBAT3ZlcnJpZGUKKyAgcHJvdGVjdGVkIFN0cmluZyBnZXRCYXNlUGF0aCgpIHsKKyAgICByZXR1cm4gIi9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvbW92ZUZpZWxkQXNzaWdubWVudFRvSW5pdGlhbGl6ZXIiOworICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovY29kZUluc2lnaHQvaW50ZW50aW9uL01vdmVJbml0aWFsaXplclRvQ29uc3RydWN0b3JBY3Rpb25UZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovY29kZUluc2lnaHQvaW50ZW50aW9uL01vdmVJbml0aWFsaXplclRvQ29uc3RydWN0b3JBY3Rpb25UZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGE0YzYwNAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9jb2RlSW5zaWdodC9pbnRlbnRpb24vTW92ZUluaXRpYWxpemVyVG9Db25zdHJ1Y3RvckFjdGlvblRlc3QuamF2YQpAQCAtMCwwICsxLDE1IEBACitwYWNrYWdlIGNvbS5pbnRlbGxpai5jb2RlSW5zaWdodC5pbnRlbnRpb247CisKK2ltcG9ydCBjb20uaW50ZWxsaWouY29kZUluc2lnaHQuZGFlbW9uLkxpZ2h0SW50ZW50aW9uQWN0aW9uVGVzdENhc2U7CisKKy8qKgorICogQGF1dGhvciB2ZW4KKyAqLworcHVibGljIGNsYXNzIE1vdmVJbml0aWFsaXplclRvQ29uc3RydWN0b3JBY3Rpb25UZXN0IGV4dGVuZHMgTGlnaHRJbnRlbnRpb25BY3Rpb25UZXN0Q2FzZSB7CisgIHB1YmxpYyB2b2lkIHRlc3QoKSB0aHJvd3MgRXhjZXB0aW9uIHsgZG9BbGxUZXN0cygpOyB9CisKKyAgQE92ZXJyaWRlCisgIHByb3RlY3RlZCBTdHJpbmcgZ2V0QmFzZVBhdGgoKSB7CisgICAgcmV0dXJuICIvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L21vdmVJbml0aWFsaXplclRvQ29uc3RydWN0b3IiOworICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovY29kZUluc2lnaHQvaW50ZW50aW9uL01vdmVJbml0aWFsaXplclRvU2V0VXBNZXRob2RBY3Rpb25UZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovY29kZUluc2lnaHQvaW50ZW50aW9uL01vdmVJbml0aWFsaXplclRvU2V0VXBNZXRob2RBY3Rpb25UZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWNjOThmNQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9jb2RlSW5zaWdodC9pbnRlbnRpb24vTW92ZUluaXRpYWxpemVyVG9TZXRVcE1ldGhvZEFjdGlvblRlc3QuamF2YQpAQCAtMCwwICsxLDMyIEBACisvKgorICogQ29weXJpZ2h0IDIwMDAtMjAxMiBKZXRCcmFpbnMgcy5yLm8uCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworcGFja2FnZSBjb20uaW50ZWxsaWouY29kZUluc2lnaHQuaW50ZW50aW9uOworCitpbXBvcnQgY29tLmludGVsbGlqLmNvZGVJbnNpZ2h0LmRhZW1vbi5MaWdodEludGVudGlvbkFjdGlvblRlc3RDYXNlOworCisvKioKKyAqIEBhdXRob3IgdmVuCisgKi8KK3B1YmxpYyBjbGFzcyBNb3ZlSW5pdGlhbGl6ZXJUb1NldFVwTWV0aG9kQWN0aW9uVGVzdCBleHRlbmRzIExpZ2h0SW50ZW50aW9uQWN0aW9uVGVzdENhc2UgeworICBwdWJsaWMgdm9pZCB0ZXN0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7IGRvQWxsVGVzdHMoKTsgfQorCisKKworICBAT3ZlcnJpZGUKKyAgcHJvdGVjdGVkIFN0cmluZyBnZXRCYXNlUGF0aCgpIHsKKyAgICByZXR1cm4gIi9jb2RlSW5zaWdodC9kYWVtb25Db2RlQW5hbHl6ZXIvcXVpY2tGaXgvbW92ZUluaXRpYWxpemVyVG9TZXRVcCI7CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9jb2RlSW5zaWdodC9pbnRlbnRpb24vUmVuYW1lQ29uc3RydWN0b3JNYXRjaGluZ0NsYXNzVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNpZ2h0L2ludGVudGlvbi9SZW5hbWVDb25zdHJ1Y3Rvck1hdGNoaW5nQ2xhc3NUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjhmNjJmMmQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovY29kZUluc2lnaHQvaW50ZW50aW9uL1JlbmFtZUNvbnN0cnVjdG9yTWF0Y2hpbmdDbGFzc1Rlc3QuamF2YQpAQCAtMCwwICsxLDI4IEBACisvKgorICogQ29weXJpZ2h0IDIwMDAtMjAxMSBKZXRCcmFpbnMgcy5yLm8uCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworcGFja2FnZSBjb20uaW50ZWxsaWouY29kZUluc2lnaHQuaW50ZW50aW9uOworCitpbXBvcnQgY29tLmludGVsbGlqLmNvZGVJbnNpZ2h0LmRhZW1vbi5MaWdodEludGVudGlvbkFjdGlvblRlc3RDYXNlOworCitwdWJsaWMgY2xhc3MgUmVuYW1lQ29uc3RydWN0b3JNYXRjaGluZ0NsYXNzVGVzdCBleHRlbmRzIExpZ2h0SW50ZW50aW9uQWN0aW9uVGVzdENhc2UgeworCisgIHB1YmxpYyB2b2lkIHRlc3QoKSB0aHJvd3MgRXhjZXB0aW9uIHsgZG9BbGxUZXN0cygpOyB9CisKKyAgQE92ZXJyaWRlCisgIHByb3RlY3RlZCBTdHJpbmcgZ2V0QmFzZVBhdGgoKSB7CisgICAgcmV0dXJuICIvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3JlbmFtZUNvbnN0cnVjdG9yTWF0Y2hpbmdDbGFzcyI7CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9jb2RlSW5zaWdodC9pbnRlbnRpb24vUmVwbGFjZUNhc3RXaXRoVmFyaWFibGVUZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovY29kZUluc2lnaHQvaW50ZW50aW9uL1JlcGxhY2VDYXN0V2l0aFZhcmlhYmxlVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI3ZDdmODMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovY29kZUluc2lnaHQvaW50ZW50aW9uL1JlcGxhY2VDYXN0V2l0aFZhcmlhYmxlVGVzdC5qYXZhCkBAIC0wLDAgKzEsMzEgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwMC0yMDEyIEpldEJyYWlucyBzLnIuby4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCitwYWNrYWdlIGNvbS5pbnRlbGxpai5jb2RlSW5zaWdodC5pbnRlbnRpb247CisKK2ltcG9ydCBjb20uaW50ZWxsaWouY29kZUluc2lnaHQuZGFlbW9uLkxpZ2h0SW50ZW50aW9uQWN0aW9uVGVzdENhc2U7CisKKy8qKgorICogQGF1dGhvciBEYW5pbGEgUG9ub21hcmVua28KKyAqLworcHVibGljIGNsYXNzIFJlcGxhY2VDYXN0V2l0aFZhcmlhYmxlVGVzdCBleHRlbmRzIExpZ2h0SW50ZW50aW9uQWN0aW9uVGVzdENhc2UgeworCisgIHB1YmxpYyB2b2lkIHRlc3QoKSB0aHJvd3MgRXhjZXB0aW9uIHsgZG9BbGxUZXN0cygpOyB9CisKKyAgQE92ZXJyaWRlCisgIHByb3RlY3RlZCBTdHJpbmcgZ2V0QmFzZVBhdGgoKSB7CisgICAgcmV0dXJuICIvY29kZUluc2lnaHQvZGFlbW9uQ29kZUFuYWx5emVyL3F1aWNrRml4L3JlcGxhY2VDYXN0V2l0aFZhcmlhYmxlIjsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNpZ2h0L2ludGVudGlvbi9TcGxpdElmQWN0aW9uVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNpZ2h0L2ludGVudGlvbi9TcGxpdElmQWN0aW9uVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM2NDU0YTEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovY29kZUluc2lnaHQvaW50ZW50aW9uL1NwbGl0SWZBY3Rpb25UZXN0LmphdmEKQEAgLTAsMCArMSw3MyBAQAorcGFja2FnZSBjb20uaW50ZWxsaWouY29kZUluc2lnaHQuaW50ZW50aW9uOworCitpbXBvcnQgY29tLmludGVsbGlqLmNvZGVJbnNpZ2h0LmludGVudGlvbi5pbXBsLlNwbGl0SWZBY3Rpb247CitpbXBvcnQgY29tLmludGVsbGlqLnBzaS5jb2RlU3R5bGUuQ29kZVN0eWxlU2V0dGluZ3NNYW5hZ2VyOworaW1wb3J0IGNvbS5pbnRlbGxpai50ZXN0RnJhbWV3b3JrLkxpZ2h0Q29kZUluc2lnaHRUZXN0Q2FzZTsKKworLyoqCisgKiBAYXV0aG9yIG1pa2UKKyAqLworcHVibGljIGNsYXNzIFNwbGl0SWZBY3Rpb25UZXN0IGV4dGVuZHMgTGlnaHRDb2RlSW5zaWdodFRlc3RDYXNlIHsKKyAgcHVibGljIHZvaWQgdGVzdDEoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBDb2RlU3R5bGVTZXR0aW5nc01hbmFnZXIuZ2V0U2V0dGluZ3MoZ2V0UHJvamVjdCgpKS5FTFNFX09OX05FV19MSU5FPSB0cnVlOworICAgIGNvbmZpZ3VyZUJ5RmlsZSgiL2NvZGVJbnNpZ2h0L3NwbGl0SWZBY3Rpb24vYmVmb3JlMS5qYXZhIik7CisgICAgcGVyZm9ybSgpOworICAgIGNoZWNrUmVzdWx0QnlGaWxlKCIvY29kZUluc2lnaHQvc3BsaXRJZkFjdGlvbi9hZnRlcjEuamF2YSIpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdDIoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBjb25maWd1cmVCeUZpbGUoIi9jb2RlSW5zaWdodC9zcGxpdElmQWN0aW9uL2JlZm9yZTIuamF2YSIpOworICAgIHBlcmZvcm0oKTsKKyAgICBjaGVja1Jlc3VsdEJ5RmlsZSgiL2NvZGVJbnNpZ2h0L3NwbGl0SWZBY3Rpb24vYWZ0ZXIyLmphdmEiKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3QzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgY29uZmlndXJlQnlGaWxlKCIvY29kZUluc2lnaHQvc3BsaXRJZkFjdGlvbi9iZWZvcmUzLmphdmEiKTsKKyAgICBwZXJmb3JtKCk7CisgICAgY2hlY2tSZXN1bHRCeUZpbGUoIi9jb2RlSW5zaWdodC9zcGxpdElmQWN0aW9uL2FmdGVyMy5qYXZhIik7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0NCgpIHRocm93cyBFeGNlcHRpb24geworICAgIGNvbmZpZ3VyZUJ5RmlsZSgiL2NvZGVJbnNpZ2h0L3NwbGl0SWZBY3Rpb24vYmVmb3JlNC5qYXZhIik7CisgICAgcGVyZm9ybSgpOworICAgIGNoZWNrUmVzdWx0QnlGaWxlKCIvY29kZUluc2lnaHQvc3BsaXRJZkFjdGlvbi9hZnRlcjQuamF2YSIpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdDUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBjb25maWd1cmVCeUZpbGUoIi9jb2RlSW5zaWdodC9zcGxpdElmQWN0aW9uL2JlZm9yZTUuamF2YSIpOworICAgIHBlcmZvcm0oKTsKKyAgICBjaGVja1Jlc3VsdEJ5RmlsZSgiL2NvZGVJbnNpZ2h0L3NwbGl0SWZBY3Rpb24vYWZ0ZXI1LmphdmEiKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3Q2KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgY29uZmlndXJlQnlGaWxlKCIvY29kZUluc2lnaHQvc3BsaXRJZkFjdGlvbi9iZWZvcmVQYXJlbnRoZXNpcy5qYXZhIik7CisgICAgcGVyZm9ybSgpOworICAgIGNoZWNrUmVzdWx0QnlGaWxlKCIvY29kZUluc2lnaHQvc3BsaXRJZkFjdGlvbi9hZnRlclBhcmVudGhlc2lzLmphdmEiKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3Q3KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgY29uZmlndXJlQnlGaWxlKCIvY29kZUluc2lnaHQvc3BsaXRJZkFjdGlvbi9iZWZvcmVPclBhcmVudGhlc2lzLmphdmEiKTsKKyAgICBwZXJmb3JtKCk7CisgICAgY2hlY2tSZXN1bHRCeUZpbGUoIi9jb2RlSW5zaWdodC9zcGxpdElmQWN0aW9uL2FmdGVyT3JQYXJlbnRoZXNpcy5qYXZhIik7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0Q29tbWVudCgpIHRocm93cyBFeGNlcHRpb24geworICAgIGNvbmZpZ3VyZUJ5RmlsZSgiL2NvZGVJbnNpZ2h0L3NwbGl0SWZBY3Rpb24vYmVmb3JlQ29tbWVudC5qYXZhIik7CisgICAgcGVyZm9ybSgpOworICAgIGNoZWNrUmVzdWx0QnlGaWxlKCIvY29kZUluc2lnaHQvc3BsaXRJZkFjdGlvbi9hZnRlckNvbW1lbnQuamF2YSIpOworICB9CisKKyAgIHB1YmxpYyB2b2lkIHRlc3Q4KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgY29uZmlndXJlQnlGaWxlKCIvY29kZUluc2lnaHQvc3BsaXRJZkFjdGlvbi9iZWZvcmVPckFuZE1peGVkLmphdmEiKTsKKyAgICBTcGxpdElmQWN0aW9uIGFjdGlvbiA9IG5ldyBTcGxpdElmQWN0aW9uKCk7CisgICAgYXNzZXJ0RmFsc2UoYWN0aW9uLmlzQXZhaWxhYmxlKGdldFByb2plY3QoKSwgZ2V0RWRpdG9yKCksIGdldEZpbGUoKSkpOworICB9CisKKworCisgIHByaXZhdGUgdm9pZCBwZXJmb3JtKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgU3BsaXRJZkFjdGlvbiBhY3Rpb24gPSBuZXcgU3BsaXRJZkFjdGlvbigpOworICAgIGFzc2VydFRydWUoYWN0aW9uLmlzQXZhaWxhYmxlKGdldFByb2plY3QoKSwgZ2V0RWRpdG9yKCksIGdldEZpbGUoKSkpOworICAgIGFjdGlvbi5pbnZva2UoZ2V0UHJvamVjdCgpLCBnZXRFZGl0b3IoKSwgZ2V0RmlsZSgpKTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNpZ2h0L2ludGVudGlvbi9TdXJyb3VuZEF1dG9DbG9zZWFibGVBY3Rpb25UZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovY29kZUluc2lnaHQvaW50ZW50aW9uL1N1cnJvdW5kQXV0b0Nsb3NlYWJsZUFjdGlvblRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43N2QxMGE1Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNpZ2h0L2ludGVudGlvbi9TdXJyb3VuZEF1dG9DbG9zZWFibGVBY3Rpb25UZXN0LmphdmEKQEAgLTAsMCArMSw1MiBAQAorLyoKKyAqIENvcHlyaWdodCAyMDAwLTIwMTIgSmV0QnJhaW5zIHMuci5vLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KK3BhY2thZ2UgY29tLmludGVsbGlqLmNvZGVJbnNpZ2h0LmludGVudGlvbjsKKworaW1wb3J0IGNvbS5pbnRlbGxpai5KYXZhVGVzdFV0aWw7CitpbXBvcnQgY29tLmludGVsbGlqLmNvZGVJbnNpZ2h0LkNvZGVJbnNpZ2h0QnVuZGxlOworaW1wb3J0IGNvbS5pbnRlbGxpai5wb20uamF2YS5MYW5ndWFnZUxldmVsOworaW1wb3J0IGNvbS5pbnRlbGxpai50ZXN0RnJhbWV3b3JrLmJ1aWxkZXJzLkphdmFNb2R1bGVGaXh0dXJlQnVpbGRlcjsKK2ltcG9ydCBjb20uaW50ZWxsaWoudGVzdEZyYW1ld29yay5maXh0dXJlcy5Db2RlSW5zaWdodFRlc3RVdGlsOworaW1wb3J0IGNvbS5pbnRlbGxpai50ZXN0RnJhbWV3b3JrLmZpeHR1cmVzLkphdmFDb2RlSW5zaWdodEZpeHR1cmVUZXN0Q2FzZTsKKworcHVibGljIGNsYXNzIFN1cnJvdW5kQXV0b0Nsb3NlYWJsZUFjdGlvblRlc3QgZXh0ZW5kcyBKYXZhQ29kZUluc2lnaHRGaXh0dXJlVGVzdENhc2UgeworICBwcml2YXRlIFN0cmluZyBteUludGVudGlvbjsKKworICBAT3ZlcnJpZGUKKyAgcHVibGljIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBzdXBlci5zZXRVcCgpOworICAgIG15SW50ZW50aW9uID0gQ29kZUluc2lnaHRCdW5kbGUubWVzc2FnZSgiaW50ZW50aW9uLnN1cnJvdW5kLnJlc291cmNlLndpdGguQVJNLmJsb2NrIik7CisgIH0KKworICBAT3ZlcnJpZGUKKyAgcHJvdGVjdGVkIHZvaWQgdHVuZUZpeHR1cmUoZmluYWwgSmF2YU1vZHVsZUZpeHR1cmVCdWlsZGVyIG1vZHVsZUJ1aWxkZXIpIHRocm93cyBFeGNlcHRpb24geworICAgIG1vZHVsZUJ1aWxkZXIuc2V0TGFuZ3VhZ2VMZXZlbChMYW5ndWFnZUxldmVsLkpES18xXzcpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFNpbXBsZSgpIHsgZG9UZXN0KCk7IH0KKyAgcHVibGljIHZvaWQgdGVzdFVzYWdlKCkgeyBkb1Rlc3QoKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0TWl4ZWRVc2FnZXMoKSB7IGRvVGVzdCgpOyB9CisKKyAgcHJpdmF0ZSB2b2lkIGRvVGVzdCgpIHsKKyAgICBTdHJpbmcgbmFtZSA9IGdldFRlc3ROYW1lKGZhbHNlKTsKKyAgICBDb2RlSW5zaWdodFRlc3RVdGlsLmRvSW50ZW50aW9uVGVzdChteUZpeHR1cmUsIG15SW50ZW50aW9uLCBuYW1lICsgIi5qYXZhIiwgbmFtZSArICJfYWZ0ZXIuamF2YSIpOworICB9CisKKyAgQE92ZXJyaWRlCisgIHByb3RlY3RlZCBTdHJpbmcgZ2V0VGVzdERhdGFQYXRoKCkgeworICAgIHJldHVybiBKYXZhVGVzdFV0aWwuZ2V0SmF2YVRlc3REYXRhUGF0aCgpICsgIi9jb2RlSW5zaWdodC9zdXJyb3VuZEF1dG9DbG9zZWFibGUvIjsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNpZ2h0L2ludGVudGlvbi9VbmRlcnNjb3Jlc0luTGl0ZXJhbHNGb3JtYXR0ZXJUZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovY29kZUluc2lnaHQvaW50ZW50aW9uL1VuZGVyc2NvcmVzSW5MaXRlcmFsc0Zvcm1hdHRlclRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNDlkNGYyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNpZ2h0L2ludGVudGlvbi9VbmRlcnNjb3Jlc0luTGl0ZXJhbHNGb3JtYXR0ZXJUZXN0LmphdmEKQEAgLTAsMCArMSwxMjYgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwMC0yMDExIEpldEJyYWlucyBzLnIuby4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCitwYWNrYWdlIGNvbS5pbnRlbGxpai5jb2RlSW5zaWdodC5pbnRlbnRpb247CisKK2ltcG9ydCBjb20uaW50ZWxsaWoucHNpLlBzaVR5cGU7CitpbXBvcnQgY29tLmludGVsbGlqLnV0aWwudGV4dC5MaXRlcmFsRm9ybWF0VXRpbDsKK2ltcG9ydCBvcmcuanVuaXQuVGVzdDsKKworaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydEVxdWFsczsKKworcHVibGljIGNsYXNzIFVuZGVyc2NvcmVzSW5MaXRlcmFsc0Zvcm1hdHRlclRlc3QgeworICBAVGVzdAorICBwdWJsaWMgdm9pZCB0ZXN0SW50ZWdlcnMoKSB7CisgICAgYXNzZXJ0RXF1YWxzKCIwIiwgTGl0ZXJhbEZvcm1hdFV0aWwuZm9ybWF0KCIwIiwgUHNpVHlwZS5JTlQpKTsKKyAgICBhc3NlcnRFcXVhbHMoIjEyIiwgTGl0ZXJhbEZvcm1hdFV0aWwuZm9ybWF0KCIxMiIsIFBzaVR5cGUuSU5UKSk7CisgICAgYXNzZXJ0RXF1YWxzKCIxMjMiLCBMaXRlcmFsRm9ybWF0VXRpbC5mb3JtYXQoIjEyMyIsIFBzaVR5cGUuSU5UKSk7CisgICAgYXNzZXJ0RXF1YWxzKCIxMjNMIiwgTGl0ZXJhbEZvcm1hdFV0aWwuZm9ybWF0KCIxMjNMIiwgUHNpVHlwZS5JTlQpKTsKKyAgICBhc3NlcnRFcXVhbHMoIjFfMjM0IiwgTGl0ZXJhbEZvcm1hdFV0aWwuZm9ybWF0KCIxMjM0IiwgUHNpVHlwZS5JTlQpKTsKKyAgICBhc3NlcnRFcXVhbHMoIjEyM180NTYiLCBMaXRlcmFsRm9ybWF0VXRpbC5mb3JtYXQoIjEyMzQ1NiIsIFBzaVR5cGUuSU5UKSk7CisgICAgYXNzZXJ0RXF1YWxzKCIxXzIzNF81NjdfODkwbCIsIExpdGVyYWxGb3JtYXRVdGlsLmZvcm1hdCgiMTIzNDU2Nzg5MGwiLCBQc2lUeXBlLkxPTkcpKTsKKworICAgIGFzc2VydEVxdWFscygiMHgiLCBMaXRlcmFsRm9ybWF0VXRpbC5mb3JtYXQoIjB4IiwgUHNpVHlwZS5JTlQpKTsKKyAgICBhc3NlcnRFcXVhbHMoIjB4TCIsIExpdGVyYWxGb3JtYXRVdGlsLmZvcm1hdCgiMHhMIiwgUHNpVHlwZS5MT05HKSk7CisgICAgYXNzZXJ0RXF1YWxzKCIweDFMIiwgTGl0ZXJhbEZvcm1hdFV0aWwuZm9ybWF0KCIweDFMIiwgUHNpVHlwZS5MT05HKSk7CisgICAgYXNzZXJ0RXF1YWxzKCIweDEyMzQiLCBMaXRlcmFsRm9ybWF0VXRpbC5mb3JtYXQoIjB4MTIzNCIsIFBzaVR5cGUuSU5UKSk7CisgICAgYXNzZXJ0RXF1YWxzKCIweDEyMzRsIiwgTGl0ZXJhbEZvcm1hdFV0aWwuZm9ybWF0KCIweDEyMzRsIiwgUHNpVHlwZS5MT05HKSk7CisgICAgYXNzZXJ0RXF1YWxzKCIweDFfYWJjZCIsIExpdGVyYWxGb3JtYXRVdGlsLmZvcm1hdCgiMHgxYWJjZCIsIFBzaVR5cGUuSU5UKSk7CisKKyAgICBhc3NlcnRFcXVhbHMoIjA3IiwgTGl0ZXJhbEZvcm1hdFV0aWwuZm9ybWF0KCIwNyIsIFBzaVR5cGUuSU5UKSk7CisgICAgYXNzZXJ0RXF1YWxzKCIwXzc3NyIsIExpdGVyYWxGb3JtYXRVdGlsLmZvcm1hdCgiMDc3NyIsIFBzaVR5cGUuSU5UKSk7CisgICAgYXNzZXJ0RXF1YWxzKCIwNzdfNzc3IiwgTGl0ZXJhbEZvcm1hdFV0aWwuZm9ybWF0KCIwNzc3NzciLCBQc2lUeXBlLklOVCkpOworCisgICAgYXNzZXJ0RXF1YWxzKCIwYiIsIExpdGVyYWxGb3JtYXRVdGlsLmZvcm1hdCgiMGIiLCBQc2lUeXBlLklOVCkpOworICAgIGFzc2VydEVxdWFscygiMGIxMDEwIiwgTGl0ZXJhbEZvcm1hdFV0aWwuZm9ybWF0KCIwYjEwMTAiLCBQc2lUeXBlLklOVCkpOworICAgIGFzc2VydEVxdWFscygiMGIwXzEwMTAiLCBMaXRlcmFsRm9ybWF0VXRpbC5mb3JtYXQoIjBiMDEwMTAiLCBQc2lUeXBlLklOVCkpOworICAgIGFzc2VydEVxdWFscygiMGIxMDEwXzEwMTAiLCBMaXRlcmFsRm9ybWF0VXRpbC5mb3JtYXQoIjBiMTAxMDEwMTAiLCBQc2lUeXBlLklOVCkpOworICAgIGFzc2VydEVxdWFscygiMGIxMDEwXzEwMTBMIiwgTGl0ZXJhbEZvcm1hdFV0aWwuZm9ybWF0KCIwYjEwMTAxMDEwTCIsIFBzaVR5cGUuTE9ORykpOworICB9CisKKyAgQFRlc3QKKyAgcHVibGljIHZvaWQgdGVzdERlY2ltYWxGbG9hdGluZ1BvaW50cygpIHsKKyAgICBhc3NlcnRFcXVhbHMoIjFmIiwgTGl0ZXJhbEZvcm1hdFV0aWwuZm9ybWF0KCIxZiIsIFBzaVR5cGUuRkxPQVQpKTsKKyAgICBhc3NlcnRFcXVhbHMoIjEyM2YiLCBMaXRlcmFsRm9ybWF0VXRpbC5mb3JtYXQoIjEyM2YiLCBQc2lUeXBlLkZMT0FUKSk7CisgICAgYXNzZXJ0RXF1YWxzKCIxXzIzNGYiLCBMaXRlcmFsRm9ybWF0VXRpbC5mb3JtYXQoIjEyMzRmIiwgUHNpVHlwZS5GTE9BVCkpOworICAgIGFzc2VydEVxdWFscygiMV8yMzRkIiwgTGl0ZXJhbEZvcm1hdFV0aWwuZm9ybWF0KCIxMjM0ZCIsIFBzaVR5cGUuRE9VQkxFKSk7CisKKyAgICBhc3NlcnRFcXVhbHMoIjEuIiwgTGl0ZXJhbEZvcm1hdFV0aWwuZm9ybWF0KCIxLiIsIFBzaVR5cGUuRE9VQkxFKSk7CisgICAgYXNzZXJ0RXF1YWxzKCIxLmYiLCBMaXRlcmFsRm9ybWF0VXRpbC5mb3JtYXQoIjEuZiIsIFBzaVR5cGUuRkxPQVQpKTsKKyAgICBhc3NlcnRFcXVhbHMoIjEyMy4iLCBMaXRlcmFsRm9ybWF0VXRpbC5mb3JtYXQoIjEyMy4iLCBQc2lUeXBlLkRPVUJMRSkpOworICAgIGFzc2VydEVxdWFscygiMTIzLmYiLCBMaXRlcmFsRm9ybWF0VXRpbC5mb3JtYXQoIjEyMy5mIiwgUHNpVHlwZS5GTE9BVCkpOworICAgIGFzc2VydEVxdWFscygiMV8yMzQuIiwgTGl0ZXJhbEZvcm1hdFV0aWwuZm9ybWF0KCIxMjM0LiIsIFBzaVR5cGUuRE9VQkxFKSk7CisgICAgYXNzZXJ0RXF1YWxzKCIxXzIzNC5kIiwgTGl0ZXJhbEZvcm1hdFV0aWwuZm9ybWF0KCIxMjM0LmQiLCBQc2lUeXBlLkZMT0FUKSk7CisgICAgYXNzZXJ0RXF1YWxzKCIxXzIzNC5mIiwgTGl0ZXJhbEZvcm1hdFV0aWwuZm9ybWF0KCIxMjM0LmYiLCBQc2lUeXBlLkZMT0FUKSk7CisKKyAgICBhc3NlcnRFcXVhbHMoIi4xIiwgTGl0ZXJhbEZvcm1hdFV0aWwuZm9ybWF0KCIuMSIsIFBzaVR5cGUuRE9VQkxFKSk7CisgICAgYXNzZXJ0RXF1YWxzKCIuMWYiLCBMaXRlcmFsRm9ybWF0VXRpbC5mb3JtYXQoIi4xZiIsIFBzaVR5cGUuRkxPQVQpKTsKKyAgICBhc3NlcnRFcXVhbHMoIi4xMjMiLCBMaXRlcmFsRm9ybWF0VXRpbC5mb3JtYXQoIi4xMjMiLCBQc2lUeXBlLkRPVUJMRSkpOworICAgIGFzc2VydEVxdWFscygiLjEyM2YiLCBMaXRlcmFsRm9ybWF0VXRpbC5mb3JtYXQoIi4xMjNmIiwgUHNpVHlwZS5GTE9BVCkpOworICAgIGFzc2VydEVxdWFscygiLjEyM180IiwgTGl0ZXJhbEZvcm1hdFV0aWwuZm9ybWF0KCIuMTIzNCIsIFBzaVR5cGUuRE9VQkxFKSk7CisgICAgYXNzZXJ0RXF1YWxzKCIuMTIzXzRmIiwgTGl0ZXJhbEZvcm1hdFV0aWwuZm9ybWF0KCIuMTIzNGYiLCBQc2lUeXBlLkZMT0FUKSk7CisgICAgYXNzZXJ0RXF1YWxzKCIuMTIzXzQ1NiIsIExpdGVyYWxGb3JtYXRVdGlsLmZvcm1hdCgiLjEyMzQ1NiIsIFBzaVR5cGUuRE9VQkxFKSk7CisgICAgYXNzZXJ0RXF1YWxzKCIuMTIzXzQ1NmQiLCBMaXRlcmFsRm9ybWF0VXRpbC5mb3JtYXQoIi4xMjM0NTZkIiwgUHNpVHlwZS5ET1VCTEUpKTsKKyAgICBhc3NlcnRFcXVhbHMoIi4xMjNfNDU2ZiIsIExpdGVyYWxGb3JtYXRVdGlsLmZvcm1hdCgiLjEyMzQ1NmYiLCBQc2lUeXBlLkZMT0FUKSk7CisKKyAgICBhc3NlcnRFcXVhbHMoIjEuMSIsIExpdGVyYWxGb3JtYXRVdGlsLmZvcm1hdCgiMS4xIiwgUHNpVHlwZS5ET1VCTEUpKTsKKyAgICBhc3NlcnRFcXVhbHMoIjEuMWYiLCBMaXRlcmFsRm9ybWF0VXRpbC5mb3JtYXQoIjEuMWYiLCBQc2lUeXBlLkZMT0FUKSk7CisgICAgYXNzZXJ0RXF1YWxzKCIxMjMuMTIzIiwgTGl0ZXJhbEZvcm1hdFV0aWwuZm9ybWF0KCIxMjMuMTIzIiwgUHNpVHlwZS5ET1VCTEUpKTsKKyAgICBhc3NlcnRFcXVhbHMoIjEyMy4xMjNmIiwgTGl0ZXJhbEZvcm1hdFV0aWwuZm9ybWF0KCIxMjMuMTIzZiIsIFBzaVR5cGUuRkxPQVQpKTsKKyAgICBhc3NlcnRFcXVhbHMoIjFfMjM0LjEyM180IiwgTGl0ZXJhbEZvcm1hdFV0aWwuZm9ybWF0KCIxMjM0LjEyMzQiLCBQc2lUeXBlLkRPVUJMRSkpOworICAgIGFzc2VydEVxdWFscygiMV8yMzQuMTIzXzRmIiwgTGl0ZXJhbEZvcm1hdFV0aWwuZm9ybWF0KCIxMjM0LjEyMzRmIiwgUHNpVHlwZS5GTE9BVCkpOworCisgICAgYXNzZXJ0RXF1YWxzKCIxLjFlMCIsIExpdGVyYWxGb3JtYXRVdGlsLmZvcm1hdCgiMS4xZTAiLCBQc2lUeXBlLkRPVUJMRSkpOworICAgIGFzc2VydEVxdWFscygiMS4xRTBmIiwgTGl0ZXJhbEZvcm1hdFV0aWwuZm9ybWF0KCIxLjFFMGYiLCBQc2lUeXBlLkZMT0FUKSk7CisgICAgYXNzZXJ0RXF1YWxzKCIxMjMuMTIzZSsxMjMiLCBMaXRlcmFsRm9ybWF0VXRpbC5mb3JtYXQoIjEyMy4xMjNlKzEyMyIsIFBzaVR5cGUuRE9VQkxFKSk7CisgICAgYXNzZXJ0RXF1YWxzKCIxMjMuMTIzZS0xMjNmIiwgTGl0ZXJhbEZvcm1hdFV0aWwuZm9ybWF0KCIxMjMuMTIzZS0xMjNmIiwgUHNpVHlwZS5GTE9BVCkpOworICAgIGFzc2VydEVxdWFscygiMV8yMzQuMTIzXzRlMV8wMDAiLCBMaXRlcmFsRm9ybWF0VXRpbC5mb3JtYXQoIjEyMzQuMTIzNGUxMDAwIiwgUHNpVHlwZS5ET1VCTEUpKTsKKyAgICBhc3NlcnRFcXVhbHMoIjFfMjM0LjEyM180ZTFfMDAwZiIsIExpdGVyYWxGb3JtYXRVdGlsLmZvcm1hdCgiMTIzNC4xMjM0ZTEwMDBmIiwgUHNpVHlwZS5GTE9BVCkpOworICB9CisKKyAgQFRlc3QKKyAgcHVibGljIHZvaWQgdGVzdEhleEZsb2F0aW5nUG9pbnRzKCkgeworICAgIGFzc2VydEVxdWFscygiMHhwMSIsIExpdGVyYWxGb3JtYXRVdGlsLmZvcm1hdCgiMHhwMSIsIFBzaVR5cGUuRE9VQkxFKSk7CisgICAgYXNzZXJ0RXF1YWxzKCIweHAxZiIsIExpdGVyYWxGb3JtYXRVdGlsLmZvcm1hdCgiMHhwMWYiLCBQc2lUeXBlLkZMT0FUKSk7CisKKyAgICBhc3NlcnRFcXVhbHMoIjB4MXAxIiwgTGl0ZXJhbEZvcm1hdFV0aWwuZm9ybWF0KCIweDFwMSIsIFBzaVR5cGUuRE9VQkxFKSk7CisgICAgYXNzZXJ0RXF1YWxzKCIweDFwMWYiLCBMaXRlcmFsRm9ybWF0VXRpbC5mb3JtYXQoIjB4MXAxZiIsIFBzaVR5cGUuRkxPQVQpKTsKKyAgICBhc3NlcnRFcXVhbHMoIjB4MTIzNHArMSIsIExpdGVyYWxGb3JtYXRVdGlsLmZvcm1hdCgiMHgxMjM0cCsxIiwgUHNpVHlwZS5ET1VCTEUpKTsKKyAgICBhc3NlcnRFcXVhbHMoIjB4MTIzNHAtMWYiLCBMaXRlcmFsRm9ybWF0VXRpbC5mb3JtYXQoIjB4MTIzNHAtMWYiLCBQc2lUeXBlLkZMT0FUKSk7CisgICAgYXNzZXJ0RXF1YWxzKCIweDFfMjM0NXAxIiwgTGl0ZXJhbEZvcm1hdFV0aWwuZm9ybWF0KCIweDEyMzQ1cDEiLCBQc2lUeXBlLkRPVUJMRSkpOworICAgIGFzc2VydEVxdWFscygiMHgxXzIzNDVwMWYiLCBMaXRlcmFsRm9ybWF0VXRpbC5mb3JtYXQoIjB4MTIzNDVwMWYiLCBQc2lUeXBlLkZMT0FUKSk7CisKKyAgICBhc3NlcnRFcXVhbHMoIjB4MS5wMSIsIExpdGVyYWxGb3JtYXRVdGlsLmZvcm1hdCgiMHgxLnAxIiwgUHNpVHlwZS5ET1VCTEUpKTsKKyAgICBhc3NlcnRFcXVhbHMoIjB4MS5wMWYiLCBMaXRlcmFsRm9ybWF0VXRpbC5mb3JtYXQoIjB4MS5wMWYiLCBQc2lUeXBlLkZMT0FUKSk7CisgICAgYXNzZXJ0RXF1YWxzKCIweDEyMzQucCsxIiwgTGl0ZXJhbEZvcm1hdFV0aWwuZm9ybWF0KCIweDEyMzQucCsxIiwgUHNpVHlwZS5ET1VCTEUpKTsKKyAgICBhc3NlcnRFcXVhbHMoIjB4MTIzNC5wLTFmIiwgTGl0ZXJhbEZvcm1hdFV0aWwuZm9ybWF0KCIweDEyMzQucC0xZiIsIFBzaVR5cGUuRkxPQVQpKTsKKyAgICBhc3NlcnRFcXVhbHMoIjB4MV8yMzQ1LnAxIiwgTGl0ZXJhbEZvcm1hdFV0aWwuZm9ybWF0KCIweDEyMzQ1LnAxIiwgUHNpVHlwZS5ET1VCTEUpKTsKKyAgICBhc3NlcnRFcXVhbHMoIjB4MV8yMzQ1LnAxZiIsIExpdGVyYWxGb3JtYXRVdGlsLmZvcm1hdCgiMHgxMjM0NS5wMWYiLCBQc2lUeXBlLkZMT0FUKSk7CisKKyAgICBhc3NlcnRFcXVhbHMoIjB4LjFwMSIsIExpdGVyYWxGb3JtYXRVdGlsLmZvcm1hdCgiMHguMXAxIiwgUHNpVHlwZS5ET1VCTEUpKTsKKyAgICBhc3NlcnRFcXVhbHMoIjB4LjFwMWYiLCBMaXRlcmFsRm9ybWF0VXRpbC5mb3JtYXQoIjB4LjFwMWYiLCBQc2lUeXBlLkZMT0FUKSk7CisgICAgYXNzZXJ0RXF1YWxzKCIweC4xMjM0cCsxIiwgTGl0ZXJhbEZvcm1hdFV0aWwuZm9ybWF0KCIweC4xMjM0cCsxIiwgUHNpVHlwZS5ET1VCTEUpKTsKKyAgICBhc3NlcnRFcXVhbHMoIjB4LjEyMzRwLTFmIiwgTGl0ZXJhbEZvcm1hdFV0aWwuZm9ybWF0KCIweC4xMjM0cC0xZiIsIFBzaVR5cGUuRkxPQVQpKTsKKyAgICBhc3NlcnRFcXVhbHMoIjB4LjEyMzRfNXAxIiwgTGl0ZXJhbEZvcm1hdFV0aWwuZm9ybWF0KCIweC4xMjM0NXAxIiwgUHNpVHlwZS5ET1VCTEUpKTsKKyAgICBhc3NlcnRFcXVhbHMoIjB4LjEyMzRfNXAxZiIsIExpdGVyYWxGb3JtYXRVdGlsLmZvcm1hdCgiMHguMTIzNDVwMWYiLCBQc2lUeXBlLkZMT0FUKSk7CisKKyAgICBhc3NlcnRFcXVhbHMoIjB4MS4xcCsxIiwgTGl0ZXJhbEZvcm1hdFV0aWwuZm9ybWF0KCIweDEuMXArMSIsIFBzaVR5cGUuRE9VQkxFKSk7CisgICAgYXNzZXJ0RXF1YWxzKCIweDEuMXAtMWYiLCBMaXRlcmFsRm9ybWF0VXRpbC5mb3JtYXQoIjB4MS4xcC0xZiIsIFBzaVR5cGUuRkxPQVQpKTsKKyAgICBhc3NlcnRFcXVhbHMoIjB4YWJjZC4xMjM0cCsxMDAiLCBMaXRlcmFsRm9ybWF0VXRpbC5mb3JtYXQoIjB4YWJjZC4xMjM0cCsxMDAiLCBQc2lUeXBlLkRPVUJMRSkpOworICAgIGFzc2VydEVxdWFscygiMHhhYmNkLjEyMzRQLTEwMGYiLCBMaXRlcmFsRm9ybWF0VXRpbC5mb3JtYXQoIjB4YWJjZC4xMjM0UC0xMDBmIiwgUHNpVHlwZS5GTE9BVCkpOworICAgIGFzc2VydEVxdWFscygiMHhhYl9jZGVmLjEyMzRfNXArMV8wMjQiLCBMaXRlcmFsRm9ybWF0VXRpbC5mb3JtYXQoIjB4YWJjZGVmLjEyMzQ1cCsxMDI0IiwgUHNpVHlwZS5ET1VCTEUpKTsKKyAgICBhc3NlcnRFcXVhbHMoIjB4YWJfY2RlZi4xMjM0XzVQLTFfMDI0ZiIsIExpdGVyYWxGb3JtYXRVdGlsLmZvcm1hdCgiMHhhYmNkZWYuMTIzNDVQLTEwMjRmIiwgUHNpVHlwZS5GTE9BVCkpOworICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovY29kZUluc2lnaHQvaW50ZW50aW9uL1VuZGVyc2NvcmVzSW5MaXRlcmFsc1Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9jb2RlSW5zaWdodC9pbnRlbnRpb24vVW5kZXJzY29yZXNJbkxpdGVyYWxzVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJlOWJhYmYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovY29kZUluc2lnaHQvaW50ZW50aW9uL1VuZGVyc2NvcmVzSW5MaXRlcmFsc1Rlc3QuamF2YQpAQCAtMCwwICsxLDQ2IEBACisvKgorICogQ29weXJpZ2h0IDIwMDAtMjAxMSBKZXRCcmFpbnMgcy5yLm8uCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworcGFja2FnZSBjb20uaW50ZWxsaWouY29kZUluc2lnaHQuaW50ZW50aW9uOworCitpbXBvcnQgY29tLmludGVsbGlqLkphdmFUZXN0VXRpbDsKK2ltcG9ydCBjb20uaW50ZWxsaWouY29kZUluc2lnaHQuQ29kZUluc2lnaHRCdW5kbGU7CitpbXBvcnQgY29tLmludGVsbGlqLnBvbS5qYXZhLkxhbmd1YWdlTGV2ZWw7CitpbXBvcnQgY29tLmludGVsbGlqLnRlc3RGcmFtZXdvcmsuYnVpbGRlcnMuSmF2YU1vZHVsZUZpeHR1cmVCdWlsZGVyOworaW1wb3J0IGNvbS5pbnRlbGxpai50ZXN0RnJhbWV3b3JrLmZpeHR1cmVzLkNvZGVJbnNpZ2h0VGVzdFV0aWw7CitpbXBvcnQgY29tLmludGVsbGlqLnRlc3RGcmFtZXdvcmsuZml4dHVyZXMuSmF2YUNvZGVJbnNpZ2h0Rml4dHVyZVRlc3RDYXNlOworCitwdWJsaWMgY2xhc3MgVW5kZXJzY29yZXNJbkxpdGVyYWxzVGVzdCBleHRlbmRzIEphdmFDb2RlSW5zaWdodEZpeHR1cmVUZXN0Q2FzZSB7CisgIEBPdmVycmlkZQorICBwcm90ZWN0ZWQgdm9pZCB0dW5lRml4dHVyZShmaW5hbCBKYXZhTW9kdWxlRml4dHVyZUJ1aWxkZXIgbW9kdWxlQnVpbGRlcikgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgc3VwZXIudHVuZUZpeHR1cmUobW9kdWxlQnVpbGRlcik7CisgICAgbW9kdWxlQnVpbGRlci5zZXRMYW5ndWFnZUxldmVsKExhbmd1YWdlTGV2ZWwuSkRLXzFfNyk7CisgIH0KKworICBAT3ZlcnJpZGUKKyAgcHJvdGVjdGVkIFN0cmluZyBnZXRUZXN0RGF0YVBhdGgoKSB7CisgICAgcmV0dXJuIEphdmFUZXN0VXRpbC5nZXRKYXZhVGVzdERhdGFQYXRoKCkgKyAiL2NvZGVJbnNpZ2h0L3VuZGVyc2NvcmVzSW5MaXRlcmFscy8iOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFJlbW92ZSgpIHRocm93cyBFeGNlcHRpb24geworICAgIGZpbmFsIFN0cmluZyByZW1vdmVJbnRlbnRpb24gPSBDb2RlSW5zaWdodEJ1bmRsZS5tZXNzYWdlKCJpbnRlbnRpb24ucmVtb3ZlLmxpdGVyYWwudW5kZXJzY29yZXMiKTsKKyAgICBDb2RlSW5zaWdodFRlc3RVdGlsLmRvSW50ZW50aW9uVGVzdChteUZpeHR1cmUsIHJlbW92ZUludGVudGlvbiwgIldpdGhVbmRlcnNjb3Jlcy5qYXZhIiwgIldpdGhvdXRVbmRlcnNjb3Jlcy5qYXZhIik7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0SW5zZXJ0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZmluYWwgU3RyaW5nIGluc2VydEludGVudGlvbiA9IENvZGVJbnNpZ2h0QnVuZGxlLm1lc3NhZ2UoImludGVudGlvbi5pbnNlcnQubGl0ZXJhbC51bmRlcnNjb3JlcyIpOworICAgIENvZGVJbnNpZ2h0VGVzdFV0aWwuZG9JbnRlbnRpb25UZXN0KG15Rml4dHVyZSwgaW5zZXJ0SW50ZW50aW9uLCAiV2l0aG91dFVuZGVyc2NvcmVzLmphdmEiLCAiV2l0aFVuZGVyc2NvcmVzLmphdmEiKTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNpZ2h0L2phdmFkb2MvRXh0ZXJuYWxKYXZhZG9jUHJlc2VudGF0aW9uVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNpZ2h0L2phdmFkb2MvRXh0ZXJuYWxKYXZhZG9jUHJlc2VudGF0aW9uVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNhMTRhNGUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovY29kZUluc2lnaHQvamF2YWRvYy9FeHRlcm5hbEphdmFkb2NQcmVzZW50YXRpb25UZXN0LmphdmEKQEAgLTAsMCArMSw4MyBAQAorLyoKKyAqIENvcHlyaWdodCAyMDAwLTIwMTIgSmV0QnJhaW5zIHMuci5vLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KK3BhY2thZ2UgY29tLmludGVsbGlqLmNvZGVJbnNpZ2h0LmphdmFkb2M7CisKK2ltcG9ydCBjb20uaW50ZWxsaWouSmF2YVRlc3RVdGlsOworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLmZpbGVFZGl0b3IuaW1wbC5Mb2FkVGV4dFV0aWw7CitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkucHJvamVjdC5Qcm9qZWN0OworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLnZmcy5Mb2NhbEZpbGVTeXN0ZW07CitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkudmZzLlZpcnR1YWxGaWxlOworaW1wb3J0IGNvbS5pbnRlbGxpai50ZXN0RnJhbWV3b3JrLkxpZ2h0Q29kZUluc2lnaHRUZXN0Q2FzZTsKK2ltcG9ydCBvcmcuamV0YnJhaW5zLmFubm90YXRpb25zLk5vbk5sczsKK2ltcG9ydCBvcmcuamV0YnJhaW5zLmFubm90YXRpb25zLk5vdE51bGw7CisKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworaW1wb3J0IGphdmEuaW8uUmVhZGVyOworaW1wb3J0IGphdmEuaW8uU3RyaW5nUmVhZGVyOworCisvKioKKyAqIFVzZXI6IGFubmEKKyAqIERhdGU6IDEyLzcvMTEKKyAqLworcHVibGljIGNsYXNzIEV4dGVybmFsSmF2YWRvY1ByZXNlbnRhdGlvblRlc3QgZXh0ZW5kcyBMaWdodENvZGVJbnNpZ2h0VGVzdENhc2UgeworICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEVTVF9ST09UID0gIi9jb2RlSW5zaWdodC9leHRlcm5hbEphdmFkb2MvIjsKKworICBATm90TnVsbAorICBAT3ZlcnJpZGUKKyAgcHJvdGVjdGVkIFN0cmluZyBnZXRUZXN0RGF0YVBhdGgoKSB7CisgICAgcmV0dXJuIEphdmFUZXN0VXRpbC5nZXRKYXZhVGVzdERhdGFQYXRoKCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0U3RyaW5nQ2xhc3MoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoIiIsICJTdHJpbmcvNy9wYWdlLmh0bWwiLCAiU3RyaW5nLzcvZXhwZWN0ZWQuaHRtbCIpOworICAgIGRvVGVzdCgiIiwgIlN0cmluZy82L3BhZ2UuaHRtbCIsICJTdHJpbmcvNi9leHBlY3RlZC5odG1sIik7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0VG9Mb3dlckNhc2UoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgIGRvVGVzdCgibGFuZy9TdHJpbmcuaHRtbCN0b0xvd2VyQ2FzZSgpIiwgIlN0cmluZy83L3BhZ2UuaHRtbCIsICJTdHJpbmcvNy9leHBlY3RlZFRvTG93ZXJDYXNlLmh0bWwiKTsKKyAgICAgIGRvVGVzdCgibGFuZy9TdHJpbmcuaHRtbCN0b0xvd2VyQ2FzZSgpIiwgIlN0cmluZy82L3BhZ2UuaHRtbCIsICJTdHJpbmcvNi9leHBlY3RlZFRvTG93ZXJDYXNlLmh0bWwiKTsKKyAgfQorICAKKyAgcHVibGljIHZvaWQgdGVzdFBhY2thZ2VTdW1tYXJ5KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KCJqYXZhL2xhbmcvcGFja2FnZS1zdW1tYXJ5Lmh0bWwiLCAicGFja2FnZVN1bW1hcnkvdXRpbC9wYWdlLmh0bWwiLCAicGFja2FnZVN1bW1hcnkvdXRpbC9leHBlY3RlZC5odG1sIik7CisgIH0KKworICBwcml2YXRlIHZvaWQgZG9UZXN0KEBOb25ObHMgU3RyaW5nIHVybCwgQE5vbk5scyBTdHJpbmcgcGFnZVRleHQsIEBOb25ObHMgU3RyaW5nIGV4cGVjdGVkKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBmaW5hbCBTdHJpbmcgYmFzZVBhdGggPSBnZXRUZXN0RGF0YVBhdGgoKSArIFRFU1RfUk9PVDsKKyAgICBmaW5hbCBWaXJ0dWFsRmlsZSBwYWdlVGV4dEZpbGUgPSBMb2NhbEZpbGVTeXN0ZW0uZ2V0SW5zdGFuY2UoKS5maW5kRmlsZUJ5UGF0aChiYXNlUGF0aCArIHBhZ2VUZXh0KTsKKyAgICBhc3NlcnROb3ROdWxsKHBhZ2VUZXh0RmlsZSk7CisKKyAgICBmaW5hbCBWaXJ0dWFsRmlsZSBleHBlY3RlZFRleHRGaWxlID0gTG9jYWxGaWxlU3lzdGVtLmdldEluc3RhbmNlKCkuZmluZEZpbGVCeVBhdGgoYmFzZVBhdGggKyBleHBlY3RlZCk7CisgICAgYXNzZXJ0Tm90TnVsbChleHBlY3RlZFRleHRGaWxlKTsKKworCisgICAgY2xhc3MgSmF2YWRvY0V4dGVybmFsVGVzdEZpbHRlciBleHRlbmRzIEphdmFEb2NFeHRlcm5hbEZpbHRlciB7CisKKyAgICAgIHB1YmxpYyBKYXZhZG9jRXh0ZXJuYWxUZXN0RmlsdGVyKFByb2plY3QgcHJvamVjdCkgeworICAgICAgICBzdXBlcihwcm9qZWN0KTsKKyAgICAgIH0KKworICAgICAgQE92ZXJyaWRlCisgICAgICBwdWJsaWMgdm9pZCBkb0J1aWxkRnJvbVN0cmVhbShTdHJpbmcgc3VybCwgUmVhZGVyIGlucHV0LCBTdHJpbmdCdWZmZXIgZGF0YSwgYm9vbGVhbiBzZWFyY2g0RW5jb2RpbmcpIHRocm93cyBJT0V4Y2VwdGlvbiB7CisgICAgICAgIHN1cGVyLmRvQnVpbGRGcm9tU3RyZWFtKHN1cmwsIGlucHV0LCBkYXRhLCBzZWFyY2g0RW5jb2RpbmcpOworICAgICAgfQorICAgIH0KKyAgICBKYXZhZG9jRXh0ZXJuYWxUZXN0RmlsdGVyIGZpbHRlciA9IG5ldyBKYXZhZG9jRXh0ZXJuYWxUZXN0RmlsdGVyKGdldFByb2plY3QoKSk7CisgICAgZmluYWwgU3RyaW5nQnVmZmVyIGV4dHJhY3RlZERhdGEgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CisgICAgZmlsdGVyLmRvQnVpbGRGcm9tU3RyZWFtKHVybCwgbmV3IFN0cmluZ1JlYWRlcihMb2FkVGV4dFV0aWwubG9hZFRleHQocGFnZVRleHRGaWxlKS50b1N0cmluZygpKSwgZXh0cmFjdGVkRGF0YSwgZmFsc2UpOworICAgIGFzc2VydEVxdWFscyhMb2FkVGV4dFV0aWwubG9hZFRleHQoZXhwZWN0ZWRUZXh0RmlsZSkudG9TdHJpbmcoKSwgZXh0cmFjdGVkRGF0YS50b1N0cmluZygpKTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNpZ2h0L2phdmFkb2MvSmF2YURvY0luZm9HZW5lcmF0b3JUZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovY29kZUluc2lnaHQvamF2YWRvYy9KYXZhRG9jSW5mb0dlbmVyYXRvclRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NjY3MDlhCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNpZ2h0L2phdmFkb2MvSmF2YURvY0luZm9HZW5lcmF0b3JUZXN0LmphdmEKQEAgLTAsMCArMSwxMDAgQEAKK3BhY2thZ2UgY29tLmludGVsbGlqLmNvZGVJbnNpZ2h0LmphdmFkb2M7CisKK2ltcG9ydCBjb20uaW50ZWxsaWouSmF2YVRlc3RVdGlsOworaW1wb3J0IGNvbS5pbnRlbGxpai5jb2RlSW5zaWdodC5Db2RlSW5zaWdodFRlc3RDYXNlOworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLnV0aWwuaW8uRmlsZVV0aWw7CitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkudXRpbC50ZXh0LlN0cmluZ1V0aWw7CitpbXBvcnQgY29tLmludGVsbGlqLnBzaS4qOworaW1wb3J0IGNvbS5pbnRlbGxpai50ZXN0RnJhbWV3b3JrLlBzaVRlc3RVdGlsOworCitpbXBvcnQgamF2YS5pby5GaWxlOworaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CisKKy8qKgorICogQGF1dGhvciB5b2xlCisgKi8KK3B1YmxpYyBjbGFzcyBKYXZhRG9jSW5mb0dlbmVyYXRvclRlc3QgZXh0ZW5kcyBDb2RlSW5zaWdodFRlc3RDYXNlIHsKKyAgcHVibGljIHZvaWQgdGVzdFNpbXBsZUZpZWxkKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0RmllbGQoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RGaWVsZFZhbHVlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0RmllbGQoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RWYWx1ZUluTWV0aG9kKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0TWV0aG9kKCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0SWRlYWRldjIzMjYoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3RNZXRob2QoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RNZXRob2RUeXBlUGFyYW1ldGVyKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0TWV0aG9kKCk7CisgIH0KKyAgCisgIHB1YmxpYyB2b2lkIHRlc3RJbmhlcml0ZWREb2NJblRocm93cygpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdE1ldGhvZCgpOworICB9CisgIAorICBwdWJsaWMgdm9pZCB0ZXN0SW5oZXJpdGVkRG9jSW5UaHJvd3MxKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0TWV0aG9kKCk7CisgIH0KKyAgCisgIHB1YmxpYyB2b2lkIHRlc3RFc2NhcGVWYWx1ZXMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBQc2lDbGFzcyBwc2lDbGFzcyA9IGdldFRlc3RDbGFzcygpOworICAgIHZlcmlmeUphdmFEb2MocHNpQ2xhc3MpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdENsYXNzVHlwZVBhcmFtZXRlcigpIHRocm93cyBFeGNlcHRpb24geworICAgIHZlcmlmeUphdmFEb2MoZ2V0VGVzdENsYXNzKCkpOworICB9CisgIAorICBwdWJsaWMgdm9pZCB0ZXN0RW51bVZhbHVlT2YoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3RNZXRob2QoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RJbml0aWFsaXplcldpdGhOZXcoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3RGaWVsZCgpOworICB9CisgIAorICBwcml2YXRlIHZvaWQgZG9UZXN0RmllbGQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBQc2lDbGFzcyBwc2lDbGFzcyA9IGdldFRlc3RDbGFzcygpOworICAgIFBzaUZpZWxkIGZpZWxkID0gcHNpQ2xhc3MuZ2V0RmllbGRzKCkgWzBdOworICAgIHZlcmlmeUphdmFEb2MoZmllbGQpOworICB9CisKKyAgcHJpdmF0ZSB2b2lkIGRvVGVzdE1ldGhvZCgpIHRocm93cyBFeGNlcHRpb24geworICAgIFBzaUNsYXNzIHBzaUNsYXNzID0gZ2V0VGVzdENsYXNzKCk7CisgICAgUHNpTWV0aG9kIG1ldGhvZCA9IHBzaUNsYXNzLmdldE1ldGhvZHMoKSBbMF07CisgICAgdmVyaWZ5SmF2YURvYyhtZXRob2QpOworICB9CisKKyAgcHJpdmF0ZSBQc2lDbGFzcyBnZXRUZXN0Q2xhc3MoKSB0aHJvd3MgRXhjZXB0aW9ueworICAgIGNvbmZpZ3VyZUJ5RmlsZSgiL2NvZGVJbnNpZ2h0L2phdmFkb2NJRy8iICsgZ2V0VGVzdE5hbWUodHJ1ZSkgKyAiLmphdmEiKTsKKyAgICByZXR1cm4gKChQc2lKYXZhRmlsZSlteUZpbGUpLmdldENsYXNzZXMoKSBbMF07CisgIH0KKworICBwcml2YXRlIHZvaWQgdmVyaWZ5SmF2YURvYyhmaW5hbCBQc2lFbGVtZW50IGZpZWxkKSB0aHJvd3MgSU9FeGNlcHRpb24geworICAgIGZpbmFsIEZpbGUgaHRtbFBhdGggPSBuZXcgRmlsZShKYXZhVGVzdFV0aWwuZ2V0SmF2YVRlc3REYXRhUGF0aCgpICsgIi9jb2RlSW5zaWdodC9qYXZhZG9jSUcvIiArIGdldFRlc3ROYW1lKHRydWUpICsgIi5odG1sIik7CisgICAgU3RyaW5nIGh0bWxUZXh0ID0gRmlsZVV0aWwubG9hZEZpbGUoaHRtbFBhdGgpOworICAgIFN0cmluZyBkb2NJbmZvID0gbmV3IEphdmFEb2NJbmZvR2VuZXJhdG9yKGdldFByb2plY3QoKSwgZmllbGQpLmdlbmVyYXRlRG9jSW5mbyhudWxsKTsKKyAgICBhc3NlcnRFcXVhbHMoU3RyaW5nVXRpbC5jb252ZXJ0TGluZVNlcGFyYXRvcnMoaHRtbFRleHQudHJpbSgpKSwgU3RyaW5nVXRpbC5jb252ZXJ0TGluZVNlcGFyYXRvcnMoZG9jSW5mby50cmltKCkpKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RQYWNrYWdlSW5mbygpIHRocm93cyBFeGNlcHRpb24geworICAgIGZpbmFsIFN0cmluZyBwYXRoID0gSmF2YVRlc3RVdGlsLmdldEphdmFUZXN0RGF0YVBhdGgoKSArICIvY29kZUluc2lnaHQvamF2YWRvY0lHLyI7CisgICAgZmluYWwgU3RyaW5nIHBhY2thZ2VJbmZvID0gcGF0aCArIGdldFRlc3ROYW1lKHRydWUpOworICAgIFBzaVRlc3RVdGlsLmNyZWF0ZVRlc3RQcm9qZWN0U3RydWN0dXJlKG15UHJvamVjdCwgbXlNb2R1bGUsIHBhdGgsIG15RmlsZXNUb0RlbGV0ZSk7CisgICAgZmluYWwgU3RyaW5nIGluZm8gPQorICAgICAgbmV3IEphdmFEb2NJbmZvR2VuZXJhdG9yKGdldFByb2plY3QoKSwgSmF2YVBzaUZhY2FkZS5nZXRJbnN0YW5jZShnZXRQcm9qZWN0KCkpLmZpbmRQYWNrYWdlKGdldFRlc3ROYW1lKHRydWUpKSkuZ2VuZXJhdGVEb2NJbmZvKG51bGwpOworICAgIFN0cmluZyBodG1sVGV4dCA9IEZpbGVVdGlsLmxvYWRGaWxlKG5ldyBGaWxlKHBhY2thZ2VJbmZvICsgRmlsZS5zZXBhcmF0b3IgKyAicGFja2FnZUluZm8uaHRtbCIpKTsKKyAgICBhc3NlcnRFcXVhbHMoU3RyaW5nVXRpbC5jb252ZXJ0TGluZVNlcGFyYXRvcnMoaHRtbFRleHQudHJpbSgpKSwgU3RyaW5nVXRpbC5jb252ZXJ0TGluZVNlcGFyYXRvcnMoaW5mby50cmltKCkpKTsKKyAgfQorCisgIEBPdmVycmlkZQorICBwcm90ZWN0ZWQgU3RyaW5nIGdldFRlc3REYXRhUGF0aCgpIHsKKyAgICByZXR1cm4gSmF2YVRlc3RVdGlsLmdldEphdmFUZXN0RGF0YVBhdGgoKTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNpZ2h0L3BzaS9Db250cm9sRmxvd1Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9jb2RlSW5zaWdodC9wc2kvQ29udHJvbEZsb3dUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGQ3NTg4NwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9jb2RlSW5zaWdodC9wc2kvQ29udHJvbEZsb3dUZXN0LmphdmEKQEAgLTAsMCArMSw5NCBAQAorcGFja2FnZSBjb20uaW50ZWxsaWouY29kZUluc2lnaHQucHNpOworCitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkuYXBwbGljYXRpb24uZXguUGF0aE1hbmFnZXJFeDsKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS51dGlsLmlvLkZpbGVVdGlsOworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLnV0aWwudGV4dC5TdHJpbmdVdGlsOworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLnZmcy5Mb2NhbEZpbGVTeXN0ZW07CitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkudmZzLlZpcnR1YWxGaWxlOworaW1wb3J0IGNvbS5pbnRlbGxpai5wc2kuUHNpQ29kZUJsb2NrOworaW1wb3J0IGNvbS5pbnRlbGxpai5wc2kuUHNpRWxlbWVudDsKK2ltcG9ydCBjb20uaW50ZWxsaWoucHNpLlBzaUphdmFGaWxlOworaW1wb3J0IGNvbS5pbnRlbGxpai5wc2kuY29udHJvbEZsb3cuKjsKK2ltcG9ydCBjb20uaW50ZWxsaWoucHNpLnV0aWwuUHNpVHJlZVV0aWw7CitpbXBvcnQgY29tLmludGVsbGlqLnRlc3RGcmFtZXdvcmsuTGlnaHRDb2RlSW5zaWdodFRlc3RDYXNlOworaW1wb3J0IGNvbS5pbnRlbGxpai51dGlsLmNvbnRhaW5lcnMuSW50QXJyYXlMaXN0OworaW1wb3J0IG9yZy5qZXRicmFpbnMuYW5ub3RhdGlvbnMuTm9uTmxzOworCitpbXBvcnQgamF2YS5pby5GaWxlOworaW1wb3J0IGphdmEuaW8uRmlsZW5hbWVGaWx0ZXI7CitpbXBvcnQgamF2YS51dGlsLnJlZ2V4Lk1hdGNoZXI7CitpbXBvcnQgamF2YS51dGlsLnJlZ2V4LlBhdHRlcm47CisKKy8qKgorICogQGF1dGhvciBjZHIKKyAqIERhdGU6IE5vdiAyNSwgMjAwMgorICovCitwdWJsaWMgY2xhc3MgQ29udHJvbEZsb3dUZXN0IGV4dGVuZHMgTGlnaHRDb2RlSW5zaWdodFRlc3RDYXNlIHsKKyAgQE5vbk5scyBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQkFTRV9QQVRIID0gIi9wc2kvY29udHJvbEZsb3ciOworCisgIHByaXZhdGUgc3RhdGljIHZvaWQgZG9UZXN0Rm9yKGZpbmFsIEZpbGUgZmlsZSkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgU3RyaW5nIGNvbnRlbnRzID0gU3RyaW5nVXRpbC5jb252ZXJ0TGluZVNlcGFyYXRvcnMoRmlsZVV0aWwubG9hZEZpbGUoZmlsZSkpOworICAgIGNvbmZpZ3VyZUZyb21GaWxlVGV4dChmaWxlLmdldE5hbWUoKSwgY29udGVudHMpOworICAgIC8vIGV4dHJhY3QgZmFjdG9yeSBwb2xpY3kgY2xhc3MgbmFtZQorICAgIFBhdHRlcm4gcGF0dGVybiA9IFBhdHRlcm4uY29tcGlsZSgiXi8vIChcXFMqKS4qIiwgUGF0dGVybi5ET1RBTEwpOworICAgIE1hdGNoZXIgbWF0Y2hlciA9IHBhdHRlcm4ubWF0Y2hlcihjb250ZW50cyk7CisgICAgYXNzZXJ0VHJ1ZShtYXRjaGVyLm1hdGNoZXMoKSk7CisgICAgZmluYWwgU3RyaW5nIHBvbGljeUNsYXNzTmFtZSA9IG1hdGNoZXIuZ3JvdXAoMSk7CisgICAgZmluYWwgQ29udHJvbEZsb3dQb2xpY3kgcG9saWN5OworICAgIGlmICgiTG9jYWxzT3JNeUluc3RhbmNlRmllbGRzQ29udHJvbEZsb3dQb2xpY3kiLmVxdWFscyhwb2xpY3lDbGFzc05hbWUpKSB7CisgICAgICBwb2xpY3kgPSBMb2NhbHNPck15SW5zdGFuY2VGaWVsZHNDb250cm9sRmxvd1BvbGljeS5nZXRJbnN0YW5jZSgpOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgIHBvbGljeSA9IG51bGw7CisgICAgfQorCisgICAgZmluYWwgaW50IG9mZnNldCA9IGdldEVkaXRvcigpLmdldENhcmV0TW9kZWwoKS5nZXRPZmZzZXQoKTsKKyAgICBQc2lFbGVtZW50IGVsZW1lbnQgPSBnZXRGaWxlKCkuZmluZEVsZW1lbnRBdChvZmZzZXQpOworICAgIGVsZW1lbnQgPSBQc2lUcmVlVXRpbC5nZXRQYXJlbnRPZlR5cGUoZWxlbWVudCwgUHNpQ29kZUJsb2NrLmNsYXNzLCBmYWxzZSk7CisgICAgYXNzZXJ0VHJ1ZSgiU2VsZWN0ZWQgZWxlbWVudDogIitlbGVtZW50LCBlbGVtZW50IGluc3RhbmNlb2YgUHNpQ29kZUJsb2NrKTsKKworICAgIENvbnRyb2xGbG93IGNvbnRyb2xGbG93ID0gQ29udHJvbEZsb3dGYWN0b3J5LmdldEluc3RhbmNlKGdldFByb2plY3QoKSkuZ2V0Q29udHJvbEZsb3coZWxlbWVudCwgcG9saWN5KTsKKyAgICBTdHJpbmcgcmVzdWx0ID0gY29udHJvbEZsb3cudG9TdHJpbmcoKS50cmltKCk7CisKKyAgICBmaW5hbCBTdHJpbmcgZXhwZWN0ZWRGdWxsUGF0aCA9IFN0cmluZ1V0aWwudHJpbUVuZChmaWxlLmdldFBhdGgoKSwiLmphdmEiKSArICIudHh0IjsKKyAgICBWaXJ0dWFsRmlsZSBleHBlY3RlZEZpbGUgPSBMb2NhbEZpbGVTeXN0ZW0uZ2V0SW5zdGFuY2UoKS5maW5kRmlsZUJ5UGF0aChleHBlY3RlZEZ1bGxQYXRoKTsKKyAgICBTdHJpbmcgZXhwZWN0ZWQgPSBuZXcgU3RyaW5nKGV4cGVjdGVkRmlsZS5jb250ZW50c1RvQnl0ZUFycmF5KCkpLnRyaW0oKTsKKyAgICBleHBlY3RlZCA9IGV4cGVjdGVkLnJlcGxhY2VBbGwoIlxyIiwiIik7CisgICAgYXNzZXJ0RXF1YWxzKCJUZXh0IG1pc21hdGNoIChpbiBmaWxlICIrZXhwZWN0ZWRGdWxsUGF0aCsiKTpcbiIsZXhwZWN0ZWQsIHJlc3VsdCk7CisgIH0KKworICBwcml2YXRlIHN0YXRpYyB2b2lkIGRvQWxsVGVzdHMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBmaW5hbCBTdHJpbmcgdGVzdERpclBhdGggPSBQYXRoTWFuYWdlckV4LmdldFRlc3REYXRhUGF0aCgpLnJlcGxhY2UoRmlsZS5zZXBhcmF0b3JDaGFyLCAnLycpICsgQkFTRV9QQVRIOworICAgIEZpbGUgdGVzdERpciA9IG5ldyBGaWxlKHRlc3REaXJQYXRoKTsKKyAgICBmaW5hbCBGaWxlW10gZmlsZXMgPSB0ZXN0RGlyLmxpc3RGaWxlcyhuZXcgRmlsZW5hbWVGaWx0ZXIoKSB7CisgICAgICBAT3ZlcnJpZGUKKyAgICAgIHB1YmxpYyBib29sZWFuIGFjY2VwdChGaWxlIGRpciwgU3RyaW5nIG5hbWUpIHsKKyAgICAgICAgcmV0dXJuIG5hbWUuZW5kc1dpdGgoIi5qYXZhIik7CisgICAgICB9CisgICAgfSk7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBmaWxlcy5sZW5ndGg7IGkrKykgeworICAgICAgRmlsZSBmaWxlID0gZmlsZXNbaV07CisgICAgICBkb1Rlc3RGb3IoZmlsZSk7CisKKyAgICAgIFN5c3RlbS5vdXQucHJpbnQoKGkrMSkrIiAiKTsKKyAgICB9CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7IGRvQWxsVGVzdHMoKTsgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RNZXRob2RXaXRoT25seURvV2hpbGVTdGF0ZW1lbnRIYXNFeGl0UG9pbnRzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgY29uZmlndXJlRnJvbUZpbGVUZXh0KCJhLmphdmEiLCAicHVibGljIGNsYXNzIEZvbyB7XG4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgIHB1YmxpYyB2b2lkIGZvbygpIHtcbiIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgICBib29sZWFuIGY7XG4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgICAgZG8ge1xuIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgICAgZiA9IHNvbWV0aGluZygpO1xuIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgIH0gd2hpbGUgKGYpO1xuIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICB9XG4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ9Iik7CisgICAgZmluYWwgUHNpQ29kZUJsb2NrIGJvZHkgPSAoKFBzaUphdmFGaWxlKWdldEZpbGUoKSkuZ2V0Q2xhc3NlcygpWzBdLmdldE1ldGhvZHMoKVswXS5nZXRCb2R5KCk7CisgICAgQ29udHJvbEZsb3cgZmxvdyA9IENvbnRyb2xGbG93RmFjdG9yeS5nZXRJbnN0YW5jZShnZXRQcm9qZWN0KCkpLmdldENvbnRyb2xGbG93KGJvZHksIG5ldyBMb2NhbHNDb250cm9sRmxvd1BvbGljeShib2R5KSwgZmFsc2UpOworICAgIEludEFycmF5TGlzdCBleGl0UG9pbnRzID0gbmV3IEludEFycmF5TGlzdCgpOworICAgIENvbnRyb2xGbG93VXRpbC5maW5kRXhpdFBvaW50c0FuZFN0YXRlbWVudHMoZmxvdywgMCwgZmxvdy5nZXRTaXplKCkgLTEgLCBleGl0UG9pbnRzLCBDb250cm9sRmxvd1V0aWwuREVGQVVMVF9FWElUX1NUQVRFTUVOVFNfQ0xBU1NFUyk7CisgICAgYXNzZXJ0RXF1YWxzKDEsIGV4aXRQb2ludHMuc2l6ZSgpKTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNpZ2h0L3NsaWNlL1NsaWNlQmFja3dhcmRUZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovY29kZUluc2lnaHQvc2xpY2UvU2xpY2VCYWNrd2FyZFRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZDkzNjlhCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNpZ2h0L3NsaWNlL1NsaWNlQmFja3dhcmRUZXN0LmphdmEKQEAgLTAsMCArMSwxODEgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwMC0yMDEyIEpldEJyYWlucyBzLnIuby4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCitwYWNrYWdlIGNvbS5pbnRlbGxpai5jb2RlSW5zaWdodC5zbGljZTsKKworaW1wb3J0IGNvbS5pbnRlbGxpai5hbmFseXNpcy5BbmFseXNpc1Njb3BlOworaW1wb3J0IGNvbS5pbnRlbGxpai5jb2RlSW5zaWdodC5kYWVtb24uRGFlbW9uQW5hbHl6ZXJUZXN0Q2FzZTsKK2ltcG9ydCBjb20uaW50ZWxsaWouY29kZUluc2lnaHQuZGFlbW9uLmltcGwuSGlnaGxpZ2h0SW5mbzsKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS5hcHBsaWNhdGlvbi5BcHBsaWNhdGlvbk1hbmFnZXI7CitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkuZWRpdG9yLkRvY3VtZW50OworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLmVkaXRvci5FZGl0b3I7CitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkuZWRpdG9yLlJhbmdlTWFya2VyOworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLmVkaXRvci5Mb2dpY2FsUG9zaXRpb247CitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkuZmlsZUVkaXRvci5GaWxlRWRpdG9yTWFuYWdlcjsKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS5wcm9ncmVzcy5Qcm9ncmVzc01hbmFnZXI7CitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkudXRpbC50ZXh0LlN0cmluZ1V0aWw7CitpbXBvcnQgY29tLmludGVsbGlqLnBzaS5Qc2lEb2N1bWVudE1hbmFnZXI7CitpbXBvcnQgY29tLmludGVsbGlqLnBzaS5Qc2lFbGVtZW50OworaW1wb3J0IGNvbS5pbnRlbGxpai5wc2kuUHNpRmlsZTsKK2ltcG9ydCBjb20uaW50ZWxsaWouc2xpY2VyLlNsaWNlQW5hbHlzaXNQYXJhbXM7CitpbXBvcnQgY29tLmludGVsbGlqLnNsaWNlci5TbGljZUhhbmRsZXI7CitpbXBvcnQgY29tLmludGVsbGlqLnNsaWNlci5TbGljZU1hbmFnZXI7CitpbXBvcnQgY29tLmludGVsbGlqLnNsaWNlci5TbGljZVVzYWdlOworaW1wb3J0IGNvbS5pbnRlbGxpai51dGlsLkNvbW1vblByb2Nlc3NvcnM7CitpbXBvcnQgY29tLmludGVsbGlqLnV0aWwuY29udGFpbmVycy5JbnRBcnJheUxpc3Q7CitpbXBvcnQgZ251LnRyb3ZlLlRIYXNoTWFwOworaW1wb3J0IGdudS50cm92ZS5USW50T2JqZWN0SGFzaE1hcDsKKworaW1wb3J0IGphdmEudXRpbC4qOworCisvKioKKyAqIEBhdXRob3IgY2RyCisgKi8KK3B1YmxpYyBjbGFzcyBTbGljZUJhY2t3YXJkVGVzdCBleHRlbmRzIERhZW1vbkFuYWx5emVyVGVzdENhc2UgeworICBwcml2YXRlIGZpbmFsIFRJbnRPYmplY3RIYXNoTWFwPEludEFycmF5TGlzdD4gbXlGbG93bk9mZnNldHMgPSBuZXcgVEludE9iamVjdEhhc2hNYXA8SW50QXJyYXlMaXN0PigpOworCisgIHByaXZhdGUgdm9pZCBkb3Rlc3QoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBjb25maWd1cmVCeUZpbGUoIi9jb2RlSW5zaWdodC9zbGljZS9iYWNrd2FyZC8iK2dldFRlc3ROYW1lKGZhbHNlKSsiLmphdmEiKTsKKyAgICBNYXA8U3RyaW5nLCBSYW5nZU1hcmtlcj4gc2xpY2VVc2FnZU5hbWUyT2Zmc2V0ID0gZXh0cmFjdFNsaWNlT2Zmc2V0c0Zyb21Eb2N1bWVudChnZXRFZGl0b3IoKS5nZXREb2N1bWVudCgpKTsKKyAgICBQc2lEb2N1bWVudE1hbmFnZXIuZ2V0SW5zdGFuY2UoZ2V0UHJvamVjdCgpKS5jb21taXRBbGxEb2N1bWVudHMoKTsKKyAgICBQc2lFbGVtZW50IGVsZW1lbnQgPSBuZXcgU2xpY2VIYW5kbGVyKHRydWUpLmdldEV4cHJlc3Npb25BdENhcmV0KGdldEVkaXRvcigpLCBnZXRGaWxlKCkpOworICAgIGFzc2VydE5vdE51bGwoZWxlbWVudCk7CisgICAgY2FsY1JlYWxPZmZzZXRzKGVsZW1lbnQsIHNsaWNlVXNhZ2VOYW1lMk9mZnNldCwgbXlGbG93bk9mZnNldHMpOworICAgIENvbGxlY3Rpb248SGlnaGxpZ2h0SW5mbz4gZXJyb3JzID0gaGlnaGxpZ2h0RXJyb3JzKCk7CisgICAgYXNzZXJ0RW1wdHkoZXJyb3JzKTsKKyAgICBTbGljZUFuYWx5c2lzUGFyYW1zIHBhcmFtcyA9IG5ldyBTbGljZUFuYWx5c2lzUGFyYW1zKCk7CisgICAgcGFyYW1zLnNjb3BlID0gbmV3IEFuYWx5c2lzU2NvcGUoZ2V0UHJvamVjdCgpKTsKKyAgICBwYXJhbXMuZGF0YUZsb3dUb1RoaXMgPSB0cnVlOworCisgICAgU2xpY2VVc2FnZSB1c2FnZSA9IFNsaWNlTWFuYWdlci5jcmVhdGVSb290VXNhZ2UoZWxlbWVudCwgcGFyYW1zKTsKKyAgICBjaGVja1VzYWdlcyh1c2FnZSwgdHJ1ZSwgbXlGbG93bk9mZnNldHMpOworICB9CisKKyAgc3RhdGljIHZvaWQgY2hlY2tVc2FnZXMoZmluYWwgU2xpY2VVc2FnZSB1c2FnZSwgZmluYWwgYm9vbGVhbiBkYXRhRmxvd1RvVGhpcywgZmluYWwgVEludE9iamVjdEhhc2hNYXA8SW50QXJyYXlMaXN0PiBmbG93bk9mZnNldHMpIHsKKyAgICBmaW5hbCBMaXN0PFNsaWNlVXNhZ2U+IGNoaWxkcmVuID0gbmV3IEFycmF5TGlzdDxTbGljZVVzYWdlPigpOworICAgIGJvb2xlYW4gYiA9IFByb2dyZXNzTWFuYWdlci5nZXRJbnN0YW5jZSgpLnJ1blByb2Nlc3NXaXRoUHJvZ3Jlc3NTeW5jaHJvbm91c2x5KG5ldyBSdW5uYWJsZSgpIHsKKyAgICAgIEBPdmVycmlkZQorICAgICAgcHVibGljIHZvaWQgcnVuKCkgeworICAgICAgICB1c2FnZS5wcm9jZXNzQ2hpbGRyZW4obmV3IENvbW1vblByb2Nlc3NvcnMuQ29sbGVjdFByb2Nlc3NvcjxTbGljZVVzYWdlPihjaGlsZHJlbikpOworICAgICAgfQorICAgIH0sICJFeHBhbmRpbmciLCB0cnVlLCB1c2FnZS5nZXRFbGVtZW50KCkuZ2V0UHJvamVjdCgpKTsKKyAgICBhc3NlcnRUcnVlKGIpOworICAgIGludCBzdGFydE9mZnNldCA9IHVzYWdlLmdldEVsZW1lbnQoKS5nZXRUZXh0T2Zmc2V0KCk7CisgICAgSW50QXJyYXlMaXN0IGxpc3QgPSBmbG93bk9mZnNldHMuZ2V0KHN0YXJ0T2Zmc2V0KTsKKyAgICBpbnRbXSBvZmZzZXRzID0gbGlzdCA9PSBudWxsID8gbmV3IGludFswXSA6IGxpc3QudG9BcnJheSgpOworICAgIEFycmF5cy5zb3J0KG9mZnNldHMpOworCisgICAgaW50IHNpemUgPSBsaXN0ID09IG51bGwgPyAwIDogbGlzdC5zaXplKCk7CisgICAgYXNzZXJ0RXF1YWxzKG1lc3NhZ2Uoc3RhcnRPZmZzZXQsIHVzYWdlKSwgc2l6ZSwgY2hpbGRyZW4uc2l6ZSgpKTsKKyAgICBDb2xsZWN0aW9ucy5zb3J0KGNoaWxkcmVuLCBuZXcgQ29tcGFyYXRvcjxTbGljZVVzYWdlPigpIHsKKyAgICAgIEBPdmVycmlkZQorICAgICAgcHVibGljIGludCBjb21wYXJlKFNsaWNlVXNhZ2UgbzEsIFNsaWNlVXNhZ2UgbzIpIHsKKyAgICAgICAgcmV0dXJuIG8xLmNvbXBhcmVUbyhvMik7CisgICAgICB9CisgICAgfSk7CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGNoaWxkcmVuLnNpemUoKTsgaSsrKSB7CisgICAgICBTbGljZVVzYWdlIGNoaWxkID0gY2hpbGRyZW4uZ2V0KGkpOworICAgICAgaW50IG9mZnNldCA9IG9mZnNldHNbaV07CisgICAgICBhc3NlcnRFcXVhbHMobWVzc2FnZShvZmZzZXQsIGNoaWxkKSwgb2Zmc2V0LCBjaGlsZC5nZXRVc2FnZUluZm8oKS5nZXRFbGVtZW50KCkuZ2V0VGV4dE9mZnNldCgpKTsKKworICAgICAgY2hlY2tVc2FnZXMoY2hpbGQsIGRhdGFGbG93VG9UaGlzLCBmbG93bk9mZnNldHMpOworICAgIH0KKyAgfQorCisgIHByaXZhdGUgc3RhdGljIFN0cmluZyBtZXNzYWdlKGludCBzdGFydE9mZnNldCwgU2xpY2VVc2FnZSB1c2FnZSkgeworICAgIFBzaUZpbGUgZmlsZSA9IHVzYWdlLmdldEVsZW1lbnQoKS5nZXRDb250YWluaW5nRmlsZSgpOworICAgIERvY3VtZW50IGRvY3VtZW50ID0gUHNpRG9jdW1lbnRNYW5hZ2VyLmdldEluc3RhbmNlKGZpbGUuZ2V0UHJvamVjdCgpKS5nZXREb2N1bWVudChmaWxlKTsKKyAgICBFZGl0b3IgZWRpdG9yID0gRmlsZUVkaXRvck1hbmFnZXIuZ2V0SW5zdGFuY2UoZmlsZS5nZXRQcm9qZWN0KCkpLmdldFNlbGVjdGVkVGV4dEVkaXRvcigpOworICAgIExvZ2ljYWxQb3NpdGlvbiBwb3NpdGlvbiA9IGVkaXRvci5vZmZzZXRUb0xvZ2ljYWxQb3NpdGlvbihzdGFydE9mZnNldCk7CisgICAgcmV0dXJuIHBvc2l0aW9uICsgIjogJyIgKyBTdHJpbmdVdGlsLmZpcnN0KGZpbGUuZ2V0VGV4dCgpLnN1YnN0cmluZyhzdGFydE9mZnNldCksIDEwMCwgdHJ1ZSkgKyAiJyI7CisgIH0KKworICBzdGF0aWMgdm9pZCBjYWxjUmVhbE9mZnNldHMoUHNpRWxlbWVudCBzdGFydEVsZW1lbnQsIE1hcDxTdHJpbmcsIFJhbmdlTWFya2VyPiBzbGljZVVzYWdlTmFtZTJPZmZzZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmluYWwgVEludE9iamVjdEhhc2hNYXA8SW50QXJyYXlMaXN0PiBmbG93bk9mZnNldHMpIHsKKyAgICBmaWxsKHNsaWNlVXNhZ2VOYW1lMk9mZnNldCwgIiIsIHN0YXJ0RWxlbWVudC5nZXRUZXh0T2Zmc2V0KCksIGZsb3duT2Zmc2V0cyk7CisgIH0KKworICBzdGF0aWMgTWFwPFN0cmluZywgUmFuZ2VNYXJrZXI+IGV4dHJhY3RTbGljZU9mZnNldHNGcm9tRG9jdW1lbnQoZmluYWwgRG9jdW1lbnQgZG9jdW1lbnQpIHsKKyAgICBNYXA8U3RyaW5nLCBSYW5nZU1hcmtlcj4gc2xpY2VVc2FnZU5hbWUyT2Zmc2V0ID0gbmV3IFRIYXNoTWFwPFN0cmluZywgUmFuZ2VNYXJrZXI+KCk7CisKKyAgICBleHRyYWN0KGRvY3VtZW50LCBzbGljZVVzYWdlTmFtZTJPZmZzZXQsICIiKTsKKyAgICBhc3NlcnRUcnVlKCFkb2N1bWVudC5nZXRUZXh0KCkuY29udGFpbnMoIjxmbG93biIpKTsKKyAgICBhc3NlcnRUcnVlKCFzbGljZVVzYWdlTmFtZTJPZmZzZXQuaXNFbXB0eSgpKTsKKyAgICByZXR1cm4gc2xpY2VVc2FnZU5hbWUyT2Zmc2V0OworICB9CisKKyAgcHJpdmF0ZSBzdGF0aWMgdm9pZCBmaWxsKE1hcDxTdHJpbmcsIFJhbmdlTWFya2VyPiBzbGljZVVzYWdlTmFtZTJPZmZzZXQsIFN0cmluZyBuYW1lLCBpbnQgb2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICBmaW5hbCBUSW50T2JqZWN0SGFzaE1hcDxJbnRBcnJheUxpc3Q+IGZsb3duT2Zmc2V0cykgeworICAgIGZvciAoaW50IGk9MTtpPDk7aSsrKSB7CisgICAgICBTdHJpbmcgbmV3TmFtZSA9IG5hbWUgKyBpOworICAgICAgUmFuZ2VNYXJrZXIgbWFya2VyID0gc2xpY2VVc2FnZU5hbWUyT2Zmc2V0LmdldChuZXdOYW1lKTsKKyAgICAgIGlmIChtYXJrZXIgPT0gbnVsbCkgYnJlYWs7CisgICAgICBJbnRBcnJheUxpc3Qgb2Zmc2V0cyA9IGZsb3duT2Zmc2V0cy5nZXQob2Zmc2V0KTsKKyAgICAgIGlmIChvZmZzZXRzID09IG51bGwpIHsKKyAgICAgICAgb2Zmc2V0cyA9IG5ldyBJbnRBcnJheUxpc3QoKTsKKyAgICAgICAgZmxvd25PZmZzZXRzLnB1dChvZmZzZXQsIG9mZnNldHMpOworICAgICAgfQorICAgICAgaW50IG5ld1N0YXJ0T2Zmc2V0ID0gbWFya2VyLmdldFN0YXJ0T2Zmc2V0KCk7CisgICAgICBvZmZzZXRzLmFkZChuZXdTdGFydE9mZnNldCk7CisgICAgICBmaWxsKHNsaWNlVXNhZ2VOYW1lMk9mZnNldCwgbmV3TmFtZSwgbmV3U3RhcnRPZmZzZXQsIGZsb3duT2Zmc2V0cyk7CisgICAgfQorICB9CisKKyAgcHJpdmF0ZSBzdGF0aWMgdm9pZCBleHRyYWN0KGZpbmFsIERvY3VtZW50IGRvY3VtZW50LCBmaW5hbCBNYXA8U3RyaW5nLCBSYW5nZU1hcmtlcj4gc2xpY2VVc2FnZU5hbWUyT2Zmc2V0LCBmaW5hbCBTdHJpbmcgbmFtZSkgeworICAgIEFwcGxpY2F0aW9uTWFuYWdlci5nZXRBcHBsaWNhdGlvbigpLnJ1bldyaXRlQWN0aW9uKG5ldyBSdW5uYWJsZSgpIHsKKyAgICAgIEBPdmVycmlkZQorICAgICAgcHVibGljIHZvaWQgcnVuKCkgeworICAgICAgICBmb3IgKGludCBpID0gMTsgaSA8IDk7IGkrKykgeworICAgICAgICAgIFN0cmluZyBuZXdOYW1lID0gbmFtZSArIGk7CisgICAgICAgICAgU3RyaW5nIHMgPSAiPGZsb3duIiArIG5ld05hbWUgKyAiPiI7CisgICAgICAgICAgaWYgKCFkb2N1bWVudC5nZXRUZXh0KCkuY29udGFpbnMocykpIGJyZWFrOworICAgICAgICAgIGludCBvZmYgPSBkb2N1bWVudC5nZXRUZXh0KCkuaW5kZXhPZihzKTsKKworICAgICAgICAgIGRvY3VtZW50LmRlbGV0ZVN0cmluZyhvZmYsIG9mZiArIHMubGVuZ3RoKCkpOworICAgICAgICAgIFJhbmdlTWFya2VyIHByZXYgPSBzbGljZVVzYWdlTmFtZTJPZmZzZXQucHV0KG5ld05hbWUsIGRvY3VtZW50LmNyZWF0ZVJhbmdlTWFya2VyKG9mZiwgb2ZmKSk7CisgICAgICAgICAgYXNzZXJ0TnVsbChwcmV2KTsKKworICAgICAgICAgIGV4dHJhY3QoZG9jdW1lbnQsIHNsaWNlVXNhZ2VOYW1lMk9mZnNldCwgbmV3TmFtZSk7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9KTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RTaW1wbGUoKSB0aHJvd3MgRXhjZXB0aW9uIHsgZG90ZXN0KCk7fQorICBwdWJsaWMgdm9pZCB0ZXN0TG9jYWxWYXIoKSB0aHJvd3MgRXhjZXB0aW9uIHsgZG90ZXN0KCk7fQorICBwdWJsaWMgdm9pZCB0ZXN0SW50ZXJNZXRob2QoKSB0aHJvd3MgRXhjZXB0aW9uIHsgZG90ZXN0KCk7fQorICBwdWJsaWMgdm9pZCB0ZXN0Q29uZGl0aW9uYWwoKSB0aHJvd3MgRXhjZXB0aW9uIHsgZG90ZXN0KCk7fQorICBwdWJsaWMgdm9pZCB0ZXN0Q29uZGl0aW9uYWwyKCkgdGhyb3dzIEV4Y2VwdGlvbiB7IGRvdGVzdCgpO30KKyAgcHVibGljIHZvaWQgdGVzdE1ldGhvZFJldHVybigpIHRocm93cyBFeGNlcHRpb24geyBkb3Rlc3QoKTt9CisgIHB1YmxpYyB2b2lkIHRlc3RWYXJVc2UoKSB0aHJvd3MgRXhjZXB0aW9uIHsgZG90ZXN0KCk7fQorICBwdWJsaWMgdm9pZCB0ZXN0V2VpcmRDYXJldFBvc2l0aW9uKCkgdGhyb3dzIEV4Y2VwdGlvbiB7IGRvdGVzdCgpO30KKyAgcHVibGljIHZvaWQgdGVzdEFub25DbGFzcygpIHRocm93cyBFeGNlcHRpb24geyBkb3Rlc3QoKTt9CisgIHB1YmxpYyB2b2lkIHRlc3RQb3N0Zml4KCkgdGhyb3dzIEV4Y2VwdGlvbiB7IGRvdGVzdCgpO30KKyAgcHVibGljIHZvaWQgdGVzdE1ldGhvZENhbGwoKSB0aHJvd3MgRXhjZXB0aW9uIHsgZG90ZXN0KCk7fQorICBwdWJsaWMgdm9pZCB0ZXN0RW51bUNvbnN0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7IGRvdGVzdCgpO30KKyAgcHVibGljIHZvaWQgdGVzdFR5cGVBd2FyZSgpIHRocm93cyBFeGNlcHRpb24geyBkb3Rlc3QoKTt9CisgIHB1YmxpYyB2b2lkIHRlc3RUeXBlQXdhcmUyKCkgdGhyb3dzIEV4Y2VwdGlvbiB7IGRvdGVzdCgpO30KKyAgcHVibGljIHZvaWQgdGVzdFZpYVBhcmFtZXRlcml6ZWRNZXRob2RzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7IGRvdGVzdCgpO30KKyAgcHVibGljIHZvaWQgdGVzdFR5cGVFcmFzZWQoKSB0aHJvd3MgRXhjZXB0aW9uIHsgZG90ZXN0KCk7fQorICBwdWJsaWMgdm9pZCB0ZXN0Q29tcGxleFR5cGVFcmFzdXJlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7IGRvdGVzdCgpO30KKyAgcHVibGljIHZvaWQgdGVzdEdlbmVyaWNzU3Vic3QoKSB0aHJvd3MgRXhjZXB0aW9uIHsgZG90ZXN0KCk7fQorICBwdWJsaWMgdm9pZCB0ZXN0T3ZlcnJpZGVzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7IGRvdGVzdCgpO30KKyAgcHVibGljIHZvaWQgdGVzdEdlbmVyaWNCb3hpbmcoKSB0aHJvd3MgRXhjZXB0aW9uIHsgZG90ZXN0KCk7fQorICBwdWJsaWMgdm9pZCB0ZXN0QXNzaWdubWVudCgpIHRocm93cyBFeGNlcHRpb24geyBkb3Rlc3QoKTt9CisgIHB1YmxpYyB2b2lkIHRlc3RHZW5lcmljSW1wbGVtZW50KCkgdGhyb3dzIEV4Y2VwdGlvbiB7IGRvdGVzdCgpO30KKyAgcHVibGljIHZvaWQgdGVzdEdlbmVyaWNJbXBsZW1lbnQyKCkgdGhyb3dzIEV4Y2VwdGlvbiB7IGRvdGVzdCgpO30KKyAgcHVibGljIHZvaWQgdGVzdE92ZXJsb2FkQ29uc3RydWN0b3IoKSB0aHJvd3MgRXhjZXB0aW9uIHsgZG90ZXN0KCk7fQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNpZ2h0L3NsaWNlL1NsaWNlRm9yd2FyZFRlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9jb2RlSW5zaWdodC9zbGljZS9TbGljZUZvcndhcmRUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjljMzU0NwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9jb2RlSW5zaWdodC9zbGljZS9TbGljZUZvcndhcmRUZXN0LmphdmEKQEAgLTAsMCArMSw1OSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDAwLTIwMTIgSmV0QnJhaW5zIHMuci5vLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KK3BhY2thZ2UgY29tLmludGVsbGlqLmNvZGVJbnNpZ2h0LnNsaWNlOworCitpbXBvcnQgY29tLmludGVsbGlqLmFuYWx5c2lzLkFuYWx5c2lzU2NvcGU7CitpbXBvcnQgY29tLmludGVsbGlqLmNvZGVJbnNpZ2h0LmRhZW1vbi5EYWVtb25BbmFseXplclRlc3RDYXNlOworaW1wb3J0IGNvbS5pbnRlbGxpai5jb2RlSW5zaWdodC5kYWVtb24uaW1wbC5IaWdobGlnaHRJbmZvOworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLmVkaXRvci5SYW5nZU1hcmtlcjsKK2ltcG9ydCBjb20uaW50ZWxsaWoucHNpLlBzaURvY3VtZW50TWFuYWdlcjsKK2ltcG9ydCBjb20uaW50ZWxsaWoucHNpLlBzaUVsZW1lbnQ7CitpbXBvcnQgY29tLmludGVsbGlqLnNsaWNlci5TbGljZUFuYWx5c2lzUGFyYW1zOworaW1wb3J0IGNvbS5pbnRlbGxpai5zbGljZXIuU2xpY2VGb3J3YXJkSGFuZGxlcjsKK2ltcG9ydCBjb20uaW50ZWxsaWouc2xpY2VyLlNsaWNlTWFuYWdlcjsKK2ltcG9ydCBjb20uaW50ZWxsaWouc2xpY2VyLlNsaWNlVXNhZ2U7CitpbXBvcnQgY29tLmludGVsbGlqLnV0aWwuY29udGFpbmVycy5JbnRBcnJheUxpc3Q7CitpbXBvcnQgZ251LnRyb3ZlLlRJbnRPYmplY3RIYXNoTWFwOworCitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CitpbXBvcnQgamF2YS51dGlsLk1hcDsKKworLyoqCisgKiBAYXV0aG9yIGNkcgorICovCitwdWJsaWMgY2xhc3MgU2xpY2VGb3J3YXJkVGVzdCBleHRlbmRzIERhZW1vbkFuYWx5emVyVGVzdENhc2UgeworICBwcml2YXRlIGZpbmFsIFRJbnRPYmplY3RIYXNoTWFwPEludEFycmF5TGlzdD4gbXlGbG93bk9mZnNldHMgPSBuZXcgVEludE9iamVjdEhhc2hNYXA8SW50QXJyYXlMaXN0PigpOworCisgIHByaXZhdGUgdm9pZCBkb3Rlc3QoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBjb25maWd1cmVCeUZpbGUoIi9jb2RlSW5zaWdodC9zbGljZS9mb3J3YXJkLyIrZ2V0VGVzdE5hbWUoZmFsc2UpKyIuamF2YSIpOworICAgIE1hcDxTdHJpbmcsIFJhbmdlTWFya2VyPiBzbGljZVVzYWdlTmFtZTJPZmZzZXQgPSBTbGljZUJhY2t3YXJkVGVzdC5leHRyYWN0U2xpY2VPZmZzZXRzRnJvbURvY3VtZW50KGdldEVkaXRvcigpLmdldERvY3VtZW50KCkpOworICAgIFBzaURvY3VtZW50TWFuYWdlci5nZXRJbnN0YW5jZShnZXRQcm9qZWN0KCkpLmNvbW1pdEFsbERvY3VtZW50cygpOworICAgIFBzaUVsZW1lbnQgZWxlbWVudCA9IG5ldyBTbGljZUZvcndhcmRIYW5kbGVyKCkuZ2V0RXhwcmVzc2lvbkF0Q2FyZXQoZ2V0RWRpdG9yKCksIGdldEZpbGUoKSk7CisgICAgYXNzZXJ0Tm90TnVsbChlbGVtZW50KTsKKyAgICBTbGljZUJhY2t3YXJkVGVzdC5jYWxjUmVhbE9mZnNldHMoZWxlbWVudCwgc2xpY2VVc2FnZU5hbWUyT2Zmc2V0LCBteUZsb3duT2Zmc2V0cyk7CisgICAgQ29sbGVjdGlvbjxIaWdobGlnaHRJbmZvPiBlcnJvcnMgPSBoaWdobGlnaHRFcnJvcnMoKTsKKyAgICBhc3NlcnRFbXB0eShlcnJvcnMpOworICAgIFNsaWNlQW5hbHlzaXNQYXJhbXMgcGFyYW1zID0gbmV3IFNsaWNlQW5hbHlzaXNQYXJhbXMoKTsKKyAgICBwYXJhbXMuc2NvcGUgPSBuZXcgQW5hbHlzaXNTY29wZShnZXRQcm9qZWN0KCkpOworICAgIHBhcmFtcy5kYXRhRmxvd1RvVGhpcyA9IGZhbHNlOworICAgIFNsaWNlVXNhZ2UgdXNhZ2UgPSBTbGljZU1hbmFnZXIuY3JlYXRlUm9vdFVzYWdlKGVsZW1lbnQsIHBhcmFtcyk7CisgICAgU2xpY2VCYWNrd2FyZFRlc3QuY2hlY2tVc2FnZXModXNhZ2UsIGZhbHNlLCBteUZsb3duT2Zmc2V0cyk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0U2ltcGxlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7IGRvdGVzdCgpO30KKyAgcHVibGljIHZvaWQgdGVzdEludGVyTWV0aG9kKCkgdGhyb3dzIEV4Y2VwdGlvbiB7IGRvdGVzdCgpO30KKyAgcHVibGljIHZvaWQgdGVzdFBhcmFtZXRlcnMoKSB0aHJvd3MgRXhjZXB0aW9uIHsgZG90ZXN0KCk7fQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9jb2RlSW5zaWdodC9zbGljZS9TbGljZVRyZWVUZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovY29kZUluc2lnaHQvc2xpY2UvU2xpY2VUcmVlVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYyNGVjN2YKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovY29kZUluc2lnaHQvc2xpY2UvU2xpY2VUcmVlVGVzdC5qYXZhCkBAIC0wLDAgKzEsMzA3IEBACitwYWNrYWdlIGNvbS5pbnRlbGxpai5jb2RlSW5zaWdodC5zbGljZTsKKworaW1wb3J0IGNvbS5pbnRlbGxpai5hbmFseXNpcy5BbmFseXNpc1Njb3BlOworaW1wb3J0IGNvbS5pbnRlbGxpai5jb2RlSW5zaWdodC5kYWVtb24uRGFlbW9uQW5hbHl6ZXJUZXN0Q2FzZTsKK2ltcG9ydCBjb20uaW50ZWxsaWouY29kZUluc2lnaHQuZGFlbW9uLkxpZ2h0RGFlbW9uQW5hbHl6ZXJUZXN0Q2FzZTsKK2ltcG9ydCBjb20uaW50ZWxsaWouY29kZUluc2lnaHQuZGFlbW9uLmltcGwuSGlnaGxpZ2h0SW5mbzsKK2ltcG9ydCBjb20uaW50ZWxsaWouaWRlLnV0aWwudHJlZVZpZXcuQWJzdHJhY3RUcmVlTm9kZTsKK2ltcG9ydCBjb20uaW50ZWxsaWoubGFuZy5hbm5vdGF0aW9uLkhpZ2hsaWdodFNldmVyaXR5OworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLnV0aWwuRGlzcG9zZXI7CitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkudXRpbC50ZXh0LlN0cmluZ1V0aWw7CitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkud20uaW1wbC5Ub29sV2luZG93SGVhZGxlc3NNYW5hZ2VySW1wbDsKK2ltcG9ydCBjb20uaW50ZWxsaWoucHNpLio7CitpbXBvcnQgY29tLmludGVsbGlqLnNsaWNlci4qOworaW1wb3J0IGNvbS5pbnRlbGxpai51dGlsLkFycmF5VXRpbDsKK2ltcG9ydCBjb20uaW50ZWxsaWoudXRpbC5GdW5jdGlvbjsKK2ltcG9ydCBjb20uaW50ZWxsaWoudXRpbC5jb250YWluZXJzLkNvbnRhaW5lclV0aWw7CitpbXBvcnQgb3JnLmpldGJyYWlucy5hbm5vdGF0aW9ucy5Ob25ObHM7CisKK2ltcG9ydCBqYXZhLnV0aWwuKjsKKworLyoqCisgKiBAYXV0aG9yIGNkcgorICovCitwdWJsaWMgY2xhc3MgU2xpY2VUcmVlVGVzdCBleHRlbmRzIExpZ2h0RGFlbW9uQW5hbHl6ZXJUZXN0Q2FzZSB7CisgIHByaXZhdGUgU2xpY2VUcmVlU3RydWN0dXJlIGNvbmZpZ3VyZVRyZWUoQE5vbk5scyBmaW5hbCBTdHJpbmcgbmFtZSkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgY29uZmlndXJlQnlGaWxlKCIvY29kZUluc2lnaHQvc2xpY2UvYmFja3dhcmQvIisgbmFtZSArIi5qYXZhIik7CisgICAgUHNpRG9jdW1lbnRNYW5hZ2VyLmdldEluc3RhbmNlKGdldFByb2plY3QoKSkuY29tbWl0QWxsRG9jdW1lbnRzKCk7CisgICAgUHNpRWxlbWVudCBlbGVtZW50ID0gbmV3IFNsaWNlSGFuZGxlcih0cnVlKS5nZXRFeHByZXNzaW9uQXRDYXJldChnZXRFZGl0b3IoKSwgZ2V0RmlsZSgpKTsKKyAgICBhc3NlcnROb3ROdWxsKGVsZW1lbnQpOworICAgIENvbGxlY3Rpb248SGlnaGxpZ2h0SW5mbz4gZXJyb3JzID0gaGlnaGxpZ2h0RXJyb3JzKCk7CisgICAgYXNzZXJ0RW1wdHkoZXJyb3JzKTsKKworICAgIFNsaWNlQW5hbHlzaXNQYXJhbXMgcGFyYW1zID0gbmV3IFNsaWNlQW5hbHlzaXNQYXJhbXMoKTsKKyAgICBwYXJhbXMuc2NvcGUgPSBuZXcgQW5hbHlzaXNTY29wZShnZXRQcm9qZWN0KCkpOworICAgIHBhcmFtcy5kYXRhRmxvd1RvVGhpcyA9IHRydWU7CisKKyAgICBTbGljZVVzYWdlIHVzYWdlID0gU2xpY2VNYW5hZ2VyLmNyZWF0ZVJvb3RVc2FnZShlbGVtZW50LCBwYXJhbXMpOworCisKKyAgICBTbGljZVBhbmVsIHBhbmVsID0gbmV3IFNsaWNlUGFuZWwoZ2V0UHJvamVjdCgpLCB0cnVlLCBuZXcgU2xpY2VSb290Tm9kZShnZXRQcm9qZWN0KCksIG5ldyBEdXBsaWNhdGVNYXAoKSwgdXNhZ2UpLCBmYWxzZSwgVG9vbFdpbmRvd0hlYWRsZXNzTWFuYWdlckltcGwuSEVBRExFU1NfV0lORE9XKSB7CisgICAgICBAT3ZlcnJpZGUKKyAgICAgIHByb3RlY3RlZCB2b2lkIGNsb3NlKCkgeworICAgICAgfQorCisgICAgICBAT3ZlcnJpZGUKKyAgICAgIHB1YmxpYyBib29sZWFuIGlzQXV0b1Njcm9sbCgpIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgfQorCisgICAgICBAT3ZlcnJpZGUKKyAgICAgIHB1YmxpYyB2b2lkIHNldEF1dG9TY3JvbGwoYm9vbGVhbiBhdXRvU2Nyb2xsKSB7CisgICAgICB9CisKKyAgICAgIEBPdmVycmlkZQorICAgICAgcHVibGljIGJvb2xlYW4gaXNQcmV2aWV3KCkgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICB9CisKKyAgICAgIEBPdmVycmlkZQorICAgICAgcHVibGljIHZvaWQgc2V0UHJldmlldyhib29sZWFuIHByZXZpZXcpIHsKKyAgICAgIH0KKyAgICB9OworICAgIERpc3Bvc2VyLnJlZ2lzdGVyKGdldFByb2plY3QoKSwgcGFuZWwpOworICAgIHJldHVybiAoU2xpY2VUcmVlU3RydWN0dXJlKXBhbmVsLmdldEJ1aWxkZXIoKS5nZXRUcmVlU3RydWN0dXJlKCk7CisgIH0KKworICBwcml2YXRlIHN0YXRpYyB2b2lkIGV4cGFuZE5vZGVzVG8oZmluYWwgU2xpY2VOb2RlIG5vZGUsIExpc3Q8U2xpY2VOb2RlPiB0bykgeworICAgIG5vZGUudXBkYXRlKCk7CisgICAgbm9kZS5jYWxjdWxhdGVEdXBOb2RlKCk7CisgICAgdG8uYWRkKG5vZGUpOworICAgIENvbGxlY3Rpb248PyBleHRlbmRzIEFic3RyYWN0VHJlZU5vZGU+IG5vZGVzID0gbm9kZS5nZXRDaGlsZHJlbigpOworICAgIGZvciAoQWJzdHJhY3RUcmVlTm9kZSBjaGlsZCA6IG5vZGVzKSB7CisgICAgICBleHBhbmROb2Rlc1RvKChTbGljZU5vZGUpY2hpbGQsIHRvKTsKKyAgICB9CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0VHlwaW5nRG9lc05vdEludGVyZmVyZVdpdGhEdXBsaWNhdGVzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgU2xpY2VUcmVlU3RydWN0dXJlIHRyZWVTdHJ1Y3R1cmUgPSBjb25maWd1cmVUcmVlKCJEdXBTbGljZSIpOworICAgIFNsaWNlTm9kZSByb290ID0gKFNsaWNlTm9kZSl0cmVlU3RydWN0dXJlLmdldFJvb3RFbGVtZW50KCk7CisgICAgTGlzdDxTbGljZU5vZGU+IG5vZGVzID0gbmV3IEFycmF5TGlzdDxTbGljZU5vZGU+KCk7CisgICAgZXhwYW5kTm9kZXNUbyhyb290LCBub2Rlcyk7CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IG5vZGVzLnNpemUoKS0xOyBpKyspIHsKKyAgICAgIFNsaWNlTm9kZSBub2RlID0gbm9kZXMuZ2V0KGkpOworICAgICAgYXNzZXJ0TnVsbChub2RlLmdldER1cGxpY2F0ZSgpKTsKKyAgICB9CisgICAgU2xpY2VOb2RlIGxhc3QgPSBub2Rlcy5nZXQobm9kZXMuc2l6ZSgpIC0gMSk7CisgICAgYXNzZXJ0Tm90TnVsbChsYXN0LmdldER1cGxpY2F0ZSgpKTsKKworICAgIHR5cGUoIiAgIHh4Iik7CisgICAgUHNpRG9jdW1lbnRNYW5hZ2VyLmdldEluc3RhbmNlKGdldFByb2plY3QoKSkuY29tbWl0QWxsRG9jdW1lbnRzKCk7CisgICAgYmFja3NwYWNlKCk7CisgICAgYmFja3NwYWNlKCk7CisgICAgUHNpRG9jdW1lbnRNYW5hZ2VyLmdldEluc3RhbmNlKGdldFByb2plY3QoKSkuY29tbWl0QWxsRG9jdW1lbnRzKCk7CisKKyAgICBub2Rlcy5jbGVhcigpOworICAgIGV4cGFuZE5vZGVzVG8ocm9vdCwgbm9kZXMpOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbm9kZXMuc2l6ZSgpLTE7IGkrKykgeworICAgICAgU2xpY2VOb2RlIG5vZGUgPSBub2Rlcy5nZXQoaSk7CisgICAgICBhc3NlcnROdWxsKG5vZGUuZ2V0RHVwbGljYXRlKCkpOworICAgIH0KKyAgICBhc3NlcnROb3ROdWxsKGxhc3QuZ2V0RHVwbGljYXRlKCkpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdExlYWZFeHByZXNzaW9uc0FyZUVtcHR5SW5DYXNlT2ZJbmZpbml0ZWx5RXhwYW5kaW5nVHJlZVdpdGhEdXBsaWNhdGVOb2RlcygpIHRocm93cyBFeGNlcHRpb24geworICAgIFNsaWNlVHJlZVN0cnVjdHVyZSB0cmVlU3RydWN0dXJlID0gY29uZmlndXJlVHJlZSgiVHVwbGUiKTsKKyAgICBTbGljZU5vZGUgcm9vdCA9IChTbGljZU5vZGUpdHJlZVN0cnVjdHVyZS5nZXRSb290RWxlbWVudCgpOworICAgIENvbGxlY3Rpb248UHNpRWxlbWVudD4gbGVhdmVzID0gU2xpY2VMZWFmQW5hbHl6ZXIuY2FsY0xlYWZFeHByZXNzaW9ucyhyb290LCB0cmVlU3RydWN0dXJlLCBTbGljZUxlYWZBbmFseXplci5jcmVhdGVNYXAoKSk7CisgICAgYXNzZXJ0Tm90TnVsbChsZWF2ZXMpOworICAgIGFzc2VydEVtcHR5KGxlYXZlcyk7CisgIH0KKyAgcHVibGljIHZvaWQgdGVzdExlYWZFeHByZXNzaW9uc1NpbXBsZSgpIHRocm93cyBFeGNlcHRpb24geworICAgIFNsaWNlVHJlZVN0cnVjdHVyZSB0cmVlU3RydWN0dXJlID0gY29uZmlndXJlVHJlZSgiRHVwU2xpY2UiKTsKKyAgICBTbGljZU5vZGUgcm9vdCA9IChTbGljZU5vZGUpdHJlZVN0cnVjdHVyZS5nZXRSb290RWxlbWVudCgpOworICAgIENvbGxlY3Rpb248UHNpRWxlbWVudD4gbGVhdmVzID0gU2xpY2VMZWFmQW5hbHl6ZXIuY2FsY0xlYWZFeHByZXNzaW9ucyhyb290LCB0cmVlU3RydWN0dXJlLCBTbGljZUxlYWZBbmFseXplci5jcmVhdGVNYXAoKSk7CisgICAgYXNzZXJ0Tm90TnVsbChsZWF2ZXMpOworICAgIFBzaUVsZW1lbnQgZWxlbWVudCA9IGFzc2VydE9uZUVsZW1lbnQobGVhdmVzKTsKKyAgICBhc3NlcnRUcnVlKGVsZW1lbnQgaW5zdGFuY2VvZiBQc2lMaXRlcmFsRXhwcmVzc2lvbik7CisgICAgYXNzZXJ0RXF1YWxzKDExMTExMTExMTEsICgoUHNpTGl0ZXJhbCllbGVtZW50KS5nZXRWYWx1ZSgpKTsKKyAgfQorICBwdWJsaWMgdm9pZCB0ZXN0TGVhZkV4cHJlc3Npb25zTW9yZUNvbXBsZXgoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBTbGljZVRyZWVTdHJ1Y3R1cmUgdHJlZVN0cnVjdHVyZSA9IGNvbmZpZ3VyZVRyZWUoIkR1cGxpY2F0ZSIpOworICAgIFNsaWNlTm9kZSByb290ID0gKFNsaWNlTm9kZSl0cmVlU3RydWN0dXJlLmdldFJvb3RFbGVtZW50KCk7CisgICAgQ29sbGVjdGlvbjxQc2lFbGVtZW50PiBsZWF2ZXMgPSBTbGljZUxlYWZBbmFseXplci5jYWxjTGVhZkV4cHJlc3Npb25zKHJvb3QsIHRyZWVTdHJ1Y3R1cmUsIFNsaWNlTGVhZkFuYWx5emVyLmNyZWF0ZU1hcCgpKTsKKyAgICBhc3NlcnROb3ROdWxsKGxlYXZlcyk7CisgICAgYXNzZXJ0RXF1YWxzKDIsIGxlYXZlcy5zaXplKCkpOworICAgIExpc3Q8UHNpRWxlbWVudD4gbGlzdCA9IG5ldyBBcnJheUxpc3Q8UHNpRWxlbWVudD4obGVhdmVzKTsKKyAgICBDb2xsZWN0aW9ucy5zb3J0KGxpc3QsIG5ldyBDb21wYXJhdG9yPFBzaUVsZW1lbnQ+KCkgeworICAgICAgQE92ZXJyaWRlCisgICAgICBwdWJsaWMgaW50IGNvbXBhcmUoUHNpRWxlbWVudCBvMSwgUHNpRWxlbWVudCBvMikgeworICAgICAgICByZXR1cm4gbzEuZ2V0VGV4dCgpLmNvbXBhcmVUbyhvMi5nZXRUZXh0KCkpOworICAgICAgfQorICAgIH0pOworICAgIGFzc2VydFRydWUobGlzdC5nZXQoMCkgaW5zdGFuY2VvZiBQc2lMaXRlcmFsRXhwcmVzc2lvbik7CisgICAgYXNzZXJ0RXF1YWxzKGZhbHNlLCAoKFBzaUxpdGVyYWwpbGlzdC5nZXQoMCkpLmdldFZhbHVlKCkpOworICAgIGFzc2VydFRydWUobGlzdC5nZXQoMSkgaW5zdGFuY2VvZiBQc2lMaXRlcmFsRXhwcmVzc2lvbik7CisgICAgYXNzZXJ0RXF1YWxzKHRydWUsICgoUHNpTGl0ZXJhbClsaXN0LmdldCgxKSkuZ2V0VmFsdWUoKSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0R3JvdXBCeVZhbHVlc0NvcnJlY3RMZWF2ZXMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBTbGljZVRyZWVTdHJ1Y3R1cmUgdHJlZVN0cnVjdHVyZSA9IGNvbmZpZ3VyZVRyZWUoIkR1cGxpY2F0ZUxlYXZlcyIpOworICAgIFNsaWNlUm9vdE5vZGUgcm9vdCA9IChTbGljZVJvb3ROb2RlKXRyZWVTdHJ1Y3R1cmUuZ2V0Um9vdEVsZW1lbnQoKTsKKyAgICBNYXA8U2xpY2VOb2RlLCBDb2xsZWN0aW9uPFBzaUVsZW1lbnQ+PiBtYXAgPSBTbGljZUxlYWZBbmFseXplci5jcmVhdGVNYXAoKTsKKyAgICBDb2xsZWN0aW9uPFBzaUVsZW1lbnQ+IGxlYXZlcyA9IFNsaWNlTGVhZkFuYWx5emVyLmNhbGNMZWFmRXhwcmVzc2lvbnMocm9vdCwgdHJlZVN0cnVjdHVyZSwgbWFwKTsKKyAgICBhc3NlcnROb3ROdWxsKGxlYXZlcyk7CisgICAgYXNzZXJ0RXF1YWxzKDEsIGxlYXZlcy5zaXplKCkpOworICAgIFBzaUVsZW1lbnQgbGVhZiA9IGxlYXZlcy5pdGVyYXRvcigpLm5leHQoKTsKKyAgICBhc3NlcnRUcnVlKGxlYWYgaW5zdGFuY2VvZiBQc2lMaXRlcmFsRXhwcmVzc2lvbik7CisgICAgYXNzZXJ0RXF1YWxzKCJcIm9vXCIiLCBsZWFmLmdldFRleHQoKSk7CisKKyAgICBTbGljZVJvb3ROb2RlIG5ld1Jvb3QgPSBTbGljZUxlYWZBbmFseXplci5jcmVhdGVUcmVlR3JvdXBlZEJ5VmFsdWVzKGxlYXZlcywgcm9vdCwgbWFwKTsKKyAgICBDb2xsZWN0aW9uPD8gZXh0ZW5kcyBBYnN0cmFjdFRyZWVOb2RlPiBjaGlsZHJlbiA9IG5ld1Jvb3QuZ2V0Q2hpbGRyZW4oKTsKKyAgICBhc3NlcnRFcXVhbHMoMSwgY2hpbGRyZW4uc2l6ZSgpKTsKKyAgICBTbGljZU5vZGUgY2hpbGQgPSAoU2xpY2VOb2RlKWNoaWxkcmVuLml0ZXJhdG9yKCkubmV4dCgpOworICAgIGFzc2VydFRydWUoY2hpbGQgaW5zdGFuY2VvZiBTbGljZUxlYWZWYWx1ZVJvb3ROb2RlKTsKKworICAgIGNoaWxkcmVuID0gY2hpbGQuZ2V0Q2hpbGRyZW4oKTsKKyAgICBhc3NlcnRFcXVhbHMoMSwgY2hpbGRyZW4uc2l6ZSgpKTsKKyAgICBjaGlsZCA9IChTbGljZU5vZGUpY2hpbGRyZW4uaXRlcmF0b3IoKS5uZXh0KCk7CisgICAgYXNzZXJ0VHJ1ZShjaGlsZC5nZXRWYWx1ZSgpLmdldEVsZW1lbnQoKSBpbnN0YW5jZW9mIFBzaUZpZWxkKTsKKworICAgIGNoaWxkcmVuID0gY2hpbGQuZ2V0Q2hpbGRyZW4oKTsKKyAgICBhc3NlcnRFcXVhbHMoMSwgY2hpbGRyZW4uc2l6ZSgpKTsKKyAgICBjaGlsZCA9IChTbGljZU5vZGUpY2hpbGRyZW4uaXRlcmF0b3IoKS5uZXh0KCk7CisgICAgYXNzZXJ0VHJ1ZShjaGlsZC5nZXRWYWx1ZSgpLmdldEVsZW1lbnQoKSBpbnN0YW5jZW9mIFBzaVJlZmVyZW5jZUV4cHJlc3Npb24pOworCisgICAgY2hpbGRyZW4gPSBjaGlsZC5nZXRDaGlsZHJlbigpOworICAgIGFzc2VydEVxdWFscygxLCBjaGlsZHJlbi5zaXplKCkpOworICAgIGNoaWxkID0gKFNsaWNlTm9kZSljaGlsZHJlbi5pdGVyYXRvcigpLm5leHQoKTsKKyAgICBhc3NlcnRUcnVlKGNoaWxkLmdldFZhbHVlKCkuZ2V0RWxlbWVudCgpIGluc3RhbmNlb2YgUHNpUmVmZXJlbmNlRXhwcmVzc2lvbik7CisKKyAgICBjaGlsZHJlbiA9IGNoaWxkLmdldENoaWxkcmVuKCk7CisgICAgYXNzZXJ0RXF1YWxzKDEsIGNoaWxkcmVuLnNpemUoKSk7CisgICAgY2hpbGQgPSAoU2xpY2VOb2RlKWNoaWxkcmVuLml0ZXJhdG9yKCkubmV4dCgpOworICAgIGFzc2VydFRydWUoY2hpbGQuZ2V0VmFsdWUoKS5nZXRFbGVtZW50KCkgaW5zdGFuY2VvZiBQc2lMaXRlcmFsRXhwcmVzc2lvbik7CisgICAgYXNzZXJ0RXF1YWxzKGNoaWxkLmdldFZhbHVlKCkuZ2V0RWxlbWVudCgpLCBsZWFmKTsKKyAgfQorICBwdWJsaWMgdm9pZCB0ZXN0TnVsbG5lc3MoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBTbGljZVRyZWVTdHJ1Y3R1cmUgdHJlZVN0cnVjdHVyZSA9IGNvbmZpZ3VyZVRyZWUoIk51bGxzIik7CisgICAgZmluYWwgU2xpY2VSb290Tm9kZSByb290ID0gKFNsaWNlUm9vdE5vZGUpdHJlZVN0cnVjdHVyZS5nZXRSb290RWxlbWVudCgpOworICAgIE1hcDxTbGljZU5vZGUsIFNsaWNlTnVsbG5lc3NBbmFseXplci5OdWxsQW5hbHlzaXNSZXN1bHQ+IG1hcCA9IFNsaWNlTnVsbG5lc3NBbmFseXplci5jcmVhdGVNYXAoKTsKKyAgICBTbGljZU51bGxuZXNzQW5hbHl6ZXIuTnVsbEFuYWx5c2lzUmVzdWx0IGxlYXZlcyA9IFNsaWNlTnVsbG5lc3NBbmFseXplci5jYWxjTnVsbGFibGVMZWF2ZXMocm9vdCwgdHJlZVN0cnVjdHVyZSwgbWFwKTsKKworICAgIFNsaWNlUm9vdE5vZGUgbmV3Um9vdCA9IFNsaWNlTnVsbG5lc3NBbmFseXplci5jcmVhdGVOZXdUcmVlKGxlYXZlcywgcm9vdCwgbWFwKTsKKworICAgIGNoZWNrU3RydWN0dXJlKG5ld1Jvb3QsICJOdWxsIFZhbHVlc1xuIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgVmFsdWU6IG9cbiIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgICAgKDY6IDEyKSB8U3RyaW5nfCB8bHw7XG4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgICAgKDUyOiAxMykgfGx8IHw9fCB8ZHw7XG4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgICAgICAoMTU6IDEzKSB8c2V0fCh8b3wpfDtcbiIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgIFZhbHVlOiBudSgpXG4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgICg2OiAxMikgfFN0cmluZ3wgfGx8O1xuIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgICAgICg1MjogMTMpIHxsfCB8PXwgfGR8O1xuIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgICAgICAgKDI5OiAxMykgfHNldHwofG51fCh8KXwpfDtcbiIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgIFZhbHVlOiB0XG4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgICg2OiAxMikgfFN0cmluZ3wgfGx8O1xuIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgICAgICg1MjogMTMpIHxsfCB8PXwgfGR8O1xuIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgICAgICAgKDQ2OiAxNSkgfHh8LnxzZXR8KHx0fCl8O1xuIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk5vdE51bGwgVmFsdWVzXG4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICBWYWx1ZTogXCJcIlxuIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgICAoNjogMTIpIHxTdHJpbmd8IHxsfDtcbiIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgICAgICAoNTI6IDEzKSB8bHwgfD18IHxkfDtcbiIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgICAgICAgICgxOTogMTMpIHxzZXR8KHxDT058KXw7XG4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgICAgICAgICg1OiAzOSkgfHByaXZhdGV8IHxmaW5hbHwgfHN0YXRpY3wgfFN0cmluZ3wgfENPTnwgfD18IHxcIlwifDtcbiIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgIFZhbHVlOiBcInh4eFwiXG4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgICg2OiAxMikgfFN0cmluZ3wgfGx8O1xuIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgICAgICg1MjogMTMpIHxsfCB8PXwgfGR8O1xuIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgICAgICAgKDEwOiAxMykgfHNldHwofFwieHh4XCJ8KXw7XG4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICBWYWx1ZTogbmV3IFN0cmluZygpXG4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgICg2OiAxMikgfFN0cmluZ3wgfGx8O1xuIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgICAgICg1MjogMTMpIHxsfCB8PXwgfGR8O1xuIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgICAgICAgKDE3OiAxMykgfHNldHwofG5ld3wgfFN0cmluZ3wofCl8KXw7XG4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICBWYWx1ZTogbm4oKVxuIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgICAoNjogMTIpIHxTdHJpbmd8IHxsfDtcbiIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgICAgICAoNTI6IDEzKSB8bHwgfD18IHxkfDtcbiIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgICAgICAgICgxODogMTMpIHxzZXR8KHxubnwofCl8KXw7XG4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICBWYWx1ZTogbm5cbiIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgICAgKDY6IDEyKSB8U3RyaW5nfCB8bHw7XG4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgICAgKDUyOiAxMykgfGx8IHw9fCB8ZHw7XG4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgICAgICAoMjE6IDEzKSB8c2V0fCh8bm58KXw7XG4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICBWYWx1ZTogZ1xuIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgICAoNjogMTIpIHxTdHJpbmd8IHxsfDtcbiIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgICAgICAoNTI6IDEzKSB8bHwgfD18IHxkfDtcbiIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgICAgICAgICgyNzogMTMpIHxzZXR8KHxnfCl8O1xuIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgVmFsdWU6IFwibnVsbFwiXG4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgICg2OiAxMikgfFN0cmluZ3wgfGx8O1xuIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgICAgICg1MjogMTMpIHxsfCB8PXwgfGR8O1xuIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgICAgICAgKDQ4OiAxNSkgfHh8LnxzZXR8KHx0fCB8PT18IHxudWxsfCB8P3wgfFwibnVsbFwifCB8OnwgfHR8KXw7XG4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgICAgICAgICg0ODogMjcpIHx4fC58c2V0fCh8dHwgfD09fCB8bnVsbHwgfD98IHxcIm51bGxcInwgfDp8IHx0fCl8O1xuIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgVmFsdWU6IHRcbiIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgICAgKDY6IDEyKSB8U3RyaW5nfCB8bHw7XG4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgICAgKDUyOiAxMykgfGx8IHw9fCB8ZHw7XG4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgICAgICAoNDg6IDE1KSB8eHwufHNldHwofHR8IHw9PXwgfG51bGx8IHw/fCB8XCJudWxsXCJ8IHw6fCB8dHwpfDtcbiIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgICAgICAgICAgKDQ4OiAzNikgfHh8LnxzZXR8KHx0fCB8PT18IHxudWxsfCB8P3wgfFwibnVsbFwifCB8OnwgfHR8KXw7XG4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICBWYWx1ZTogZFxuIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgICAoNjogMTIpIHxTdHJpbmd8IHxsfDtcbiIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgICAgICAoNTU6IDEzKSB8bHwgfD18IHxkfDtcbiIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICJPdGhlciBWYWx1ZXNcbiIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgIFZhbHVlOiBnXG4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgICg2OiAxMikgfFN0cmluZ3wgfGx8O1xuIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgICAgICg1MjogMTMpIHxsfCB8PXwgfGR8O1xuIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgICAgICAgKDExOiAxMykgfHNldHwofGd8KXw7XG4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgICAgICAoMjQ6IDEzKSB8c2V0fCh8b3RoZXJ8KXw7XG4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgICAgICAgICgyMzogMjQpIHxTdHJpbmd8IHxvdGhlcnwgfD18IHxnfCB8PT18IHxcIlwifCB8P3wgfENPTnwgfDp8IHxnfDtcbiIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgICAgICAgICAgICAoMjM6IDQwKSB8U3RyaW5nfCB8b3RoZXJ8IHw9fCB8Z3wgfD09fCB8XCJcInwgfD98IHxDT058IHw6fCB8Z3w7XG4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICBWYWx1ZTogZFxuIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgICAoNjogMTIpIHxTdHJpbmd8IHxsfDtcbiIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgICAgICAoNTI6IDEzKSB8bHwgfD18IHxkfDtcbiIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgICAgICAgICgzMDogMTMpIHxzZXR8KHxoenwofCl8KXw7XG4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgICAgICAgICg0MjogMTYpIHxyZXR1cm58IHxkfDtcbiIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICIiKTsKKyAgfQorCisgIHByaXZhdGUgc3RhdGljIHZvaWQgY2hlY2tTdHJ1Y3R1cmUoZmluYWwgU2xpY2VOb2RlIHJvb3QsIEBOb25ObHMgU3RyaW5nIGRhdGFFeHBlY3RlZCkgeworICAgIExpc3Q8U2xpY2VOb2RlPiBhY3R1YWxOb2RlcyA9IG5ldyBBcnJheUxpc3Q8U2xpY2VOb2RlPigoQ29sbGVjdGlvbjw/IGV4dGVuZHMgU2xpY2VOb2RlPilyb290LmdldENoaWxkcmVuKCkpOworICAgIENvbGxlY3Rpb25zLnNvcnQoYWN0dWFsTm9kZXMsIFNsaWNlVHJlZUJ1aWxkZXIuU0xJQ0VfTk9ERV9DT01QQVJBVE9SKTsKKworICAgIE9iamVjdFtdIGFjdHVhbFN0cmluZ3MgPSBDb250YWluZXJVdGlsLm1hcDJBcnJheShhY3R1YWxOb2RlcywgbmV3IEZ1bmN0aW9uPFNsaWNlTm9kZSwgT2JqZWN0PigpIHsKKyAgICAgIEBPdmVycmlkZQorICAgICAgcHVibGljIE9iamVjdCBmdW4oU2xpY2VOb2RlIG5vZGUpIHsKKyAgICAgICAgcmV0dXJuIG5vZGUudG9TdHJpbmcoKTsKKyAgICAgIH0KKyAgICB9KTsKKworICAgIFN0cmluZ1tdIGNoaWxkcmVuRXhwZWN0ZWQgPSBkYXRhRXhwZWN0ZWQubGVuZ3RoKCkgPT0gMCA/IEFycmF5VXRpbC5FTVBUWV9TVFJJTkdfQVJSQVkgOiBkYXRhRXhwZWN0ZWQuc3BsaXQoIlxuIik7CisgICAgU3RyaW5nIGN1ckNoaWxkcmVuID0gIiI7CisgICAgU3RyaW5nIGN1ck5vZGUgPSBudWxsOworICAgIGludCBpYWN0dWFsID0gMDsKKyAgICBmb3IgKGludCBpZXhwID0gMDsgaWV4cCA8PSBjaGlsZHJlbkV4cGVjdGVkLmxlbmd0aDsgaWV4cCsrKSB7CisgICAgICBTdHJpbmcgZSA9IGlleHAgPT0gY2hpbGRyZW5FeHBlY3RlZC5sZW5ndGggPyBudWxsIDogY2hpbGRyZW5FeHBlY3RlZFtpZXhwXTsKKyAgICAgIGJvb2xlYW4gaXNUb3BMZXZlbCA9IGUgPT0gbnVsbCB8fCBlLmNoYXJBdCgwKSAhPSAnICc7CisgICAgICBpZiAoaXNUb3BMZXZlbCkgeworICAgICAgICBpZiAoY3VyTm9kZSAhPSBudWxsKSB7CisgICAgICAgICAgYXNzZXJ0VHJ1ZShpYWN0dWFsIDwgYWN0dWFsU3RyaW5ncy5sZW5ndGgpOworICAgICAgICAgIE9iamVjdCBhY3R1YWwgPSBhY3R1YWxTdHJpbmdzW2lhY3R1YWxdOworICAgICAgICAgIGFzc2VydEVxdWFscyhjdXJOb2RlLCBhY3R1YWwpOworICAgICAgICAgIGNoZWNrU3RydWN0dXJlKGFjdHVhbE5vZGVzLmdldChpYWN0dWFsKSwgY3VyQ2hpbGRyZW4pOworICAgICAgICAgIGlhY3R1YWwrKzsKKyAgICAgICAgfQorCisgICAgICAgIGN1ck5vZGUgPSBlOworICAgICAgICBjdXJDaGlsZHJlbiA9ICIiOworICAgICAgfQorICAgICAgZWxzZSB7CisgICAgICAgIGN1ckNoaWxkcmVuICs9IFN0cmluZ1V0aWwudHJpbVN0YXJ0KGUsICIgICIpICsgIlxuIjsKKyAgICAgIH0KKyAgICB9CisgICAgYXNzZXJ0RXF1YWxzKGFjdHVhbE5vZGVzLnNpemUoKSwgaWFjdHVhbCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0RG91YmxlTnVsbG5lc3MoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBTbGljZVRyZWVTdHJ1Y3R1cmUgdHJlZVN0cnVjdHVyZSA9IGNvbmZpZ3VyZVRyZWUoIkRvdWJsZU51bGxzIik7CisgICAgZmluYWwgU2xpY2VSb290Tm9kZSByb290ID0gKFNsaWNlUm9vdE5vZGUpdHJlZVN0cnVjdHVyZS5nZXRSb290RWxlbWVudCgpOworICAgIE1hcDxTbGljZU5vZGUsIFNsaWNlTnVsbG5lc3NBbmFseXplci5OdWxsQW5hbHlzaXNSZXN1bHQ+IG1hcCA9IFNsaWNlTnVsbG5lc3NBbmFseXplci5jcmVhdGVNYXAoKTsKKyAgICBTbGljZU51bGxuZXNzQW5hbHl6ZXIuTnVsbEFuYWx5c2lzUmVzdWx0IGxlYXZlcyA9IFNsaWNlTnVsbG5lc3NBbmFseXplci5jYWxjTnVsbGFibGVMZWF2ZXMocm9vdCwgdHJlZVN0cnVjdHVyZSwgbWFwKTsKKworICAgIFNsaWNlUm9vdE5vZGUgbmV3Um9vdCA9IFNsaWNlTnVsbG5lc3NBbmFseXplci5jcmVhdGVOZXdUcmVlKGxlYXZlcywgcm9vdCwgbWFwKTsKKyAgICBjaGVja1N0cnVjdHVyZShuZXdSb290LAorICAgICAgICAiTnVsbCBWYWx1ZXNcbiIgKworICAgICAgICAiICBWYWx1ZTogbnVsbFxuIiArCisgICAgICAgICIgICAgKDI6IDEwKSB8U3RyaW5nfCB8bHw7XG4iICsKKyAgICAgICAgIiAgICAgICg0OiA5KSB8bHwgfD18IHxudWxsfDtcbiIgKworICAgICAgICAiICAgICAgKDc6IDkpIHxsfCB8PXwgfG51bGx8O1xuIiArCisgICAgICAgICIiCisgICAgICAgICAgICAgICAgICAgKTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNpZ2h0L3RlbXBsYXRlL0xpdmVUZW1wbGF0ZVRlc3QuZ3Jvb3Z5IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNpZ2h0L3RlbXBsYXRlL0xpdmVUZW1wbGF0ZVRlc3QuZ3Jvb3Z5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJkM2ViMGEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovY29kZUluc2lnaHQvdGVtcGxhdGUvTGl2ZVRlbXBsYXRlVGVzdC5ncm9vdnkKQEAgLTAsMCArMSw1MzEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUgSmV0QnJhaW5zIHMuci5vLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICovCitwYWNrYWdlIGNvbS5pbnRlbGxpai5jb2RlSW5zaWdodC50ZW1wbGF0ZTsKKworCitpbXBvcnQgY29tLmludGVsbGlqLkphdmFUZXN0VXRpbAoraW1wb3J0IGNvbS5pbnRlbGxpai5jb2RlSW5zaWdodC5Db2RlSW5zaWdodFNldHRpbmdzCitpbXBvcnQgY29tLmludGVsbGlqLmNvZGVJbnNpZ2h0Lmxvb2t1cC5Mb29rdXBNYW5hZ2VyCitpbXBvcnQgY29tLmludGVsbGlqLmNvZGVJbnNpZ2h0Lmxvb2t1cC5pbXBsLkxvb2t1cEltcGwKK2ltcG9ydCBjb20uaW50ZWxsaWouY29kZUluc2lnaHQubG9va3VwLmltcGwuTG9va3VwTWFuYWdlckltcGwKK2ltcG9ydCBjb20uaW50ZWxsaWouY29kZUluc2lnaHQudGVtcGxhdGUubWFjcm8uQ2xhc3NOYW1lQ29tcGxldGVNYWNybworaW1wb3J0IGNvbS5pbnRlbGxpai5jb2RlSW5zaWdodC50ZW1wbGF0ZS5tYWNyby5Db21wbGV0ZU1hY3JvCitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkuYXBwbGljYXRpb24uQWNjZXNzVG9rZW4KK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS5hcHBsaWNhdGlvbi5Xcml0ZUFjdGlvbgoraW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLmNvbW1hbmQuQ29tbWFuZFByb2Nlc3NvcgoraW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLmVkaXRvci5FZGl0b3IKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS5lZGl0b3IuaW1wbC5Eb2N1bWVudEltcGwKK2ltcG9ydCBjb20uaW50ZWxsaWoucHNpLlBzaURvY3VtZW50TWFuYWdlcgoraW1wb3J0IGNvbS5pbnRlbGxpai5wc2kuY29kZVN0eWxlLkNvZGVTdHlsZVNldHRpbmdzTWFuYWdlcgoraW1wb3J0IGNvbS5pbnRlbGxpai5wc2kuY29kZVN0eWxlLkNvbW1vbkNvZGVTdHlsZVNldHRpbmdzCitpbXBvcnQgY29tLmludGVsbGlqLnRlc3RGcmFtZXdvcmsuZml4dHVyZXMuTGlnaHRDb2RlSW5zaWdodEZpeHR1cmVUZXN0Q2FzZQoraW1wb3J0IGNvbS5pbnRlbGxpai51dGlsLmNvbnRhaW5lcnMuQ29udGFpbmVyVXRpbAoraW1wb3J0IG9yZy5qZXRicmFpbnMuYW5ub3RhdGlvbnMuTm90TnVsbAoraW1wb3J0IGNvbS5pbnRlbGxpai5jb2RlSW5zaWdodC50ZW1wbGF0ZS5pbXBsLioKKworLyoqCisgKiBAYXV0aG9yIHNwbGVhbmVyCisgKi8KK3B1YmxpYyBjbGFzcyBMaXZlVGVtcGxhdGVUZXN0IGV4dGVuZHMgTGlnaHRDb2RlSW5zaWdodEZpeHR1cmVUZXN0Q2FzZSB7CisKKyAgQE92ZXJyaWRlCisgIHByb3RlY3RlZCBTdHJpbmcgZ2V0QmFzZVBhdGgoKSB7CisgICAgcmV0dXJuIEphdmFUZXN0VXRpbC5nZXRSZWxhdGl2ZUphdmFUZXN0RGF0YVBhdGgoKSArICIvY29kZUluc2lnaHQvdGVtcGxhdGUvIjsKKyAgfQorCisgIEBPdmVycmlkZQorICBwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24geworICAgIHN1cGVyLnNldFVwKCk7CisgICAgKChUZW1wbGF0ZU1hbmFnZXJJbXBsKVRlbXBsYXRlTWFuYWdlci5nZXRJbnN0YW5jZShnZXRQcm9qZWN0KCkpKS5zZXRUZW1wbGF0ZVRlc3RpbmcodHJ1ZSk7CisgIH0KKworICBAT3ZlcnJpZGUKKyAgcHJvdGVjdGVkIHZvaWQgdGVhckRvd24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBDb2RlSW5zaWdodFNldHRpbmdzLmluc3RhbmNlLkNPTVBMRVRJT05fQ0FTRV9TRU5TSVRJVkUgPSBDb2RlSW5zaWdodFNldHRpbmdzLkZJUlNUX0xFVFRFUgorICAgICgoVGVtcGxhdGVNYW5hZ2VySW1wbClUZW1wbGF0ZU1hbmFnZXIuZ2V0SW5zdGFuY2UoZ2V0UHJvamVjdCgpKSkuc2V0VGVtcGxhdGVUZXN0aW5nKGZhbHNlKTsKKyAgICBpZiAoc3RhdGUgIT0gbnVsbCkgeworICAgICAgc3RhdGUuZ290b0VuZCgpOworICAgIH0KKyAgICBzdXBlci50ZWFyRG93bigpOworICB9CisKKyAgcHJpdmF0ZSB2b2lkIGRvVGVzdFRlbXBsYXRlV2l0aEFyZyhATm90TnVsbCBTdHJpbmcgdGVtcGxhdGVOYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBATm90TnVsbCBTdHJpbmcgdGVtcGxhdGVUZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBATm90TnVsbCBTdHJpbmcgZmlsZVRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBOb3ROdWxsIFN0cmluZyBleHBlY3RlZCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKKyAgICBjb25maWd1cmVGcm9tRmlsZVRleHQoImR1bW15LmphdmEiLCBmaWxlVGV4dCk7CisgICAgZmluYWwgVGVtcGxhdGVNYW5hZ2VyIG1hbmFnZXIgPSBUZW1wbGF0ZU1hbmFnZXIuZ2V0SW5zdGFuY2UoZ2V0UHJvamVjdCgpKTsKKyAgICBTdHJpbmcgZ3JvdXAgPSAidXNlciI7CisgICAgZmluYWwgVGVtcGxhdGUgdGVtcGxhdGUgPSBtYW5hZ2VyLmNyZWF0ZVRlbXBsYXRlKHRlbXBsYXRlTmFtZSwgZ3JvdXAsIHRlbXBsYXRlVGV4dCk7CisgICAgdGVtcGxhdGUuYWRkVmFyaWFibGUoIkFSRyIsICIiLCAiIiwgZmFsc2UpOworICAgIGZpbmFsIFRlbXBsYXRlQ29udGV4dFR5cGUgY29udGV4dFR5cGUgPQorICAgICAgQ29udGFpbmVyVXRpbC5maW5kSW5zdGFuY2UoVGVtcGxhdGVDb250ZXh0VHlwZS5FUF9OQU1FLmdldEV4dGVuc2lvbnMoKSwgSmF2YUNvZGVDb250ZXh0VHlwZS5jbGFzcyk7CisgICAgKChUZW1wbGF0ZUltcGwpdGVtcGxhdGUpLmdldFRlbXBsYXRlQ29udGV4dCgpLnNldEVuYWJsZWQoY29udGV4dFR5cGUsIHRydWUpOworICAgIFRlbXBsYXRlU2V0dGluZ3Mgc2V0dGluZ3MgPSBUZW1wbGF0ZVNldHRpbmdzLmdldEluc3RhbmNlKCk7CisgICAgdHJ5IHsKKyAgICAgIHNldHRpbmdzLmFkZFRlbXBsYXRlKHRlbXBsYXRlKTsKKyAgICAgIGZpbmFsIEVkaXRvciBlZGl0b3IgPSBnZXRFZGl0b3IoKTsKKworICAgICAgbWFuYWdlci5zdGFydFRlbXBsYXRlKGVkaXRvciwgc2V0dGluZ3MuZ2V0RGVmYXVsdFNob3J0Y3V0Q2hhcigpKTsKKyAgICAgIGNoZWNrUmVzdWx0QnlUZXh0KGV4cGVjdGVkKTsKKyAgICB9CisgICAgZmluYWxseSB7CisgICAgICBpZiAoc2V0dGluZ3MuZ2V0VGVtcGxhdGUodGVtcGxhdGUuZ2V0S2V5KCksIGdyb3VwKSAhPSBudWxsKSB7CisgICAgICAgIHNldHRpbmdzLnJlbW92ZVRlbXBsYXRlKHRlbXBsYXRlKTsKKyAgICAgIH0KKyAgICB9CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0VGVtcGxhdGVXaXRoQXJnMSgpIHRocm93cyBJT0V4Y2VwdGlvbiB7CisgICAgZG9UZXN0VGVtcGxhdGVXaXRoQXJnKCJ0c3QiLCAnd3JhcCgkQVJHJCknLCAidHN0IGFyZzxjYXJldD4iLCAid3JhcChhcmcpIik7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0VGVtcGxhdGVXaXRoQXJnMigpIHRocm93cyBJT0V4Y2VwdGlvbiB7CisgICAgZG9UZXN0VGVtcGxhdGVXaXRoQXJnKCJ0c3QjIiwgJ3dyYXAoJEFSRyQpJywgInRzdCNhcmc8Y2FyZXQ+IiwgIndyYXAoYXJnKSIpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFRlbXBsYXRlV2l0aEFyZzMoKSB0aHJvd3MgSU9FeGNlcHRpb24geworICAgIGRvVGVzdFRlbXBsYXRlV2l0aEFyZygidHN0IyIsICd3cmFwKCRBUkckKScsICJ0c3QjIGFyZzxjYXJldD4iLCAidHN0IyBhcmciKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RUZW1wbGF0ZUF0RW5kT2ZGaWxlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgY29uZmlndXJlRnJvbUZpbGVUZXh0KCJlbXB0eS5qYXZhIiwgIiIpOworICAgIGZpbmFsIFRlbXBsYXRlTWFuYWdlciBtYW5hZ2VyID0gVGVtcGxhdGVNYW5hZ2VyLmdldEluc3RhbmNlKGdldFByb2plY3QoKSk7CisgICAgZmluYWwgVGVtcGxhdGUgdGVtcGxhdGUgPSBtYW5hZ2VyLmNyZWF0ZVRlbXBsYXRlKCJlbXB0eSIsICJ1c2VyIiwgJyRWQVIkJyk7CisgICAgdGVtcGxhdGUuYWRkVmFyaWFibGUoIlZBUiIsICIiLCAiIiwgZmFsc2UpOworICAgIGZpbmFsIEVkaXRvciBlZGl0b3IgPSBnZXRFZGl0b3IoKTsKKworICAgIG1hbmFnZXIuc3RhcnRUZW1wbGF0ZShlZGl0b3IsIHRlbXBsYXRlKTsKKyAgICBjaGVja1Jlc3VsdEJ5VGV4dCgiIik7CisKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RUZW1wbGF0ZVdpdGhFbmQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBjb25maWd1cmVGcm9tRmlsZVRleHQoImVtcHR5LmphdmEiLCAiIik7CisgICAgZmluYWwgVGVtcGxhdGVNYW5hZ2VyIG1hbmFnZXIgPSBUZW1wbGF0ZU1hbmFnZXIuZ2V0SW5zdGFuY2UoZ2V0UHJvamVjdCgpKTsKKyAgICBmaW5hbCBUZW1wbGF0ZSB0ZW1wbGF0ZSA9IG1hbmFnZXIuY3JlYXRlVGVtcGxhdGUoImVtcHR5IiwgInVzZXIiLCAnJFZBUiQkRU5EJCcpOworICAgIHRlbXBsYXRlLmFkZFZhcmlhYmxlKCJWQVIiLCAiYmFyIiwgImJhciIsIHRydWUpOworICAgIHRlbXBsYXRlLnNldFRvUmVmb3JtYXQodHJ1ZSk7CisgICAgZmluYWwgRWRpdG9yIGVkaXRvciA9IGdldEVkaXRvcigpOworCisgICAgbWFuYWdlci5zdGFydFRlbXBsYXRlKGVkaXRvciwgdGVtcGxhdGUpOworICAgIG15Rml4dHVyZS50eXBlKCJmb28iKTsKKyAgICBjaGVja1Jlc3VsdEJ5VGV4dCgiZm9vIik7CisgIH0KKworICBwcml2YXRlIHZvaWQgY2hlY2tSZXN1bHRCeVRleHQoU3RyaW5nIHRleHQpIHsKKyAgICBteUZpeHR1cmUuY2hlY2tSZXN1bHQodGV4dCk7CisgIH0KKworICBwcml2YXRlIHZvaWQgY29uZmlndXJlRnJvbUZpbGVUZXh0KFN0cmluZyBuYW1lLCBTdHJpbmcgdGV4dCkgeworICAgIG15Rml4dHVyZS5jb25maWd1cmVCeVRleHQobmFtZSwgdGV4dCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0RW5kSW5UaGVNaWRkbGUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBjb25maWd1cmUoKTsKKyAgICBmaW5hbCBUZW1wbGF0ZU1hbmFnZXIgbWFuYWdlciA9IFRlbXBsYXRlTWFuYWdlci5nZXRJbnN0YW5jZShnZXRQcm9qZWN0KCkpOworICAgIGZpbmFsIFRlbXBsYXRlIHRlbXBsYXRlID0gbWFuYWdlci5jcmVhdGVUZW1wbGF0ZSgiZnJtIiwgInVzZXIiLCAiamF2YXguc3dpbmcuSkZyYW1lIGZyYW1lID0gbmV3IGphdmF4LnN3aW5nLkpGcmFtZSgpO1xuIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICckRU5EJFxuJyArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmcmFtZS5zZXRWaXNpYmxlKHRydWUpO1xuIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmcmFtZS5zZXREZWZhdWx0Q2xvc2VPcGVyYXRpb24oamF2YXguc3dpbmcuSkZyYW1lLkVYSVRfT05fQ0xPU0UpO1xuIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmcmFtZS5wYWNrKCk7Iik7CisgICAgdGVtcGxhdGUuc2V0VG9TaG9ydGVuTG9uZ05hbWVzKGZhbHNlKTsKKyAgICB0ZW1wbGF0ZS5zZXRUb1JlZm9ybWF0KHRydWUpOworICAgIG1hbmFnZXIuc3RhcnRUZW1wbGF0ZShnZXRFZGl0b3IoKSwgdGVtcGxhdGUpOworICAgIGNoZWNrUmVzdWx0KCk7CisgIH0KKworICBwdWJsaWMgdm9pZCAidGVzdCBob25vciBjdXN0b20gY29tcGxldGlvbiBjYXJldCBwbGFjZW1lbnQiKCkgeworICAgIG15Rml4dHVyZS5jb25maWd1cmVCeVRleHQgJ2EuamF2YScsICcnJworY2xhc3MgRm9vIHsKKyAgdm9pZCBmb28oaW50IGEpIHt9CisgIHsgPGNhcmV0PiB9Cit9CisnJycKKyAgICBmaW5hbCBUZW1wbGF0ZU1hbmFnZXIgbWFuYWdlciA9IFRlbXBsYXRlTWFuYWdlci5nZXRJbnN0YW5jZShnZXRQcm9qZWN0KCkpOworICAgIGZpbmFsIFRlbXBsYXRlIHRlbXBsYXRlID0gbWFuYWdlci5jcmVhdGVUZW1wbGF0ZSgiZnJtIiwgInVzZXIiLCAnJFZBUiQnKTsKKyAgICB0ZW1wbGF0ZS5hZGRWYXJpYWJsZSgnVkFSJywgbmV3IE1hY3JvQ2FsbE5vZGUobmV3IENvbXBsZXRlTWFjcm8oKSksIG5ldyBFbXB0eU5vZGUoKSwgdHJ1ZSkKKyAgICBtYW5hZ2VyLnN0YXJ0VGVtcGxhdGUoZ2V0RWRpdG9yKCksIHRlbXBsYXRlKTsKKyAgICBteUZpeHR1cmUudHlwZSgnZm9cbicpCisgICAgbXlGaXh0dXJlLmNoZWNrUmVzdWx0ICcnJworY2xhc3MgRm9vIHsKKyAgdm9pZCBmb28oaW50IGEpIHt9CisgIHsgZm9vKDxjYXJldD4pOyB9Cit9CisnJycKKyAgICBhc3NlcnQgIXN0YXRlLmZpbmlzaGVkCisgIH0KKworICBwdWJsaWMgdm9pZCAidGVzdCBjYW5jZWwgdGVtcGxhdGUgd2hlbiBjb21wbGV0aW9uIHBsYWNlZCBjYXJldCBvdXRzaWRlIHRoZSB2YXJpYWJsZSIoKSB7CisgICAgbXlGaXh0dXJlLmNvbmZpZ3VyZUJ5VGV4dCAnYS5qYXZhJywgJycnCitjbGFzcyBGb28geworICB2b2lkIGZvbyhpbnQgYSkge30KKyAgeyA8Y2FyZXQ+KCkgfQorfQorJycnCisgICAgZmluYWwgVGVtcGxhdGVNYW5hZ2VyIG1hbmFnZXIgPSBUZW1wbGF0ZU1hbmFnZXIuZ2V0SW5zdGFuY2UoZ2V0UHJvamVjdCgpKTsKKyAgICBmaW5hbCBUZW1wbGF0ZSB0ZW1wbGF0ZSA9IG1hbmFnZXIuY3JlYXRlVGVtcGxhdGUoImZybSIsICJ1c2VyIiwgJyRWQVIkJyk7CisgICAgdGVtcGxhdGUuYWRkVmFyaWFibGUoJ1ZBUicsIG5ldyBNYWNyb0NhbGxOb2RlKG5ldyBDb21wbGV0ZU1hY3JvKCkpLCBuZXcgRW1wdHlOb2RlKCksIHRydWUpCisgICAgbWFuYWdlci5zdGFydFRlbXBsYXRlKGdldEVkaXRvcigpLCB0ZW1wbGF0ZSk7CisgICAgbXlGaXh0dXJlLnR5cGUoJ2ZvXG4nKQorICAgIG15Rml4dHVyZS5jaGVja1Jlc3VsdCAnJycKK2NsYXNzIEZvbyB7CisgIHZvaWQgZm9vKGludCBhKSB7fQorICB7IGZvbyg8Y2FyZXQ+KTsgfQorfQorJycnCisgICAgYXNzZXJ0ICFzdGF0ZQorICB9CisKKyAgcHVibGljIHZvaWQgIl90ZXN0IG5vbi1pbXBvcnRlZCBjbGFzc2VzIGluIGNsYXNzTmFtZSBtYWNybyIoKSB7CisgICAgbXlGaXh0dXJlLmFkZENsYXNzKCdwYWNrYWdlIGJhcjsgcHVibGljIGNsYXNzIEJhciB7fScpCisgICAgbXlGaXh0dXJlLmNvbmZpZ3VyZUJ5VGV4dCAnYS5qYXZhJywgJycnCitjbGFzcyBGb28geworICB2b2lkIGZvbyhpbnQgYSkge30KKyAgeyA8Y2FyZXQ+IH0KK30KKycnJworICAgIGZpbmFsIFRlbXBsYXRlTWFuYWdlciBtYW5hZ2VyID0gVGVtcGxhdGVNYW5hZ2VyLmdldEluc3RhbmNlKGdldFByb2plY3QoKSk7CisgICAgZmluYWwgVGVtcGxhdGUgdGVtcGxhdGUgPSBtYW5hZ2VyLmNyZWF0ZVRlbXBsYXRlKCJmcm0iLCAidXNlciIsICckVkFSJCcpOworICAgIHRlbXBsYXRlLmFkZFZhcmlhYmxlKCdWQVInLCBuZXcgTWFjcm9DYWxsTm9kZShuZXcgQ2xhc3NOYW1lQ29tcGxldGVNYWNybygpKSwgbmV3IEVtcHR5Tm9kZSgpLCB0cnVlKQorICAgIG1hbmFnZXIuc3RhcnRUZW1wbGF0ZShnZXRFZGl0b3IoKSwgdGVtcGxhdGUpOworICAgIGFzc2VydCAhc3RhdGUuZmluaXNoZWQKKyAgICBhc3NlcnQgJ0JhcicgaW4gbXlGaXh0dXJlLmxvb2t1cEVsZW1lbnRTdHJpbmdzCisgIH0KKworICBwcml2YXRlIEVkaXRvciBnZXRFZGl0b3IoKSB7CisgICAgcmV0dXJuIG15Rml4dHVyZS5nZXRFZGl0b3IoKTsKKyAgfQorCisgIHByaXZhdGUgdm9pZCBjaGVja1Jlc3VsdCgpIHsKKyAgICBjaGVja1Jlc3VsdEJ5RmlsZShnZXRUZXN0TmFtZShmYWxzZSkgKyAiLW91dC5qYXZhIik7CisgIH0KKworICBwcml2YXRlIHZvaWQgY2hlY2tSZXN1bHRCeUZpbGUoU3RyaW5nIHMpIHsKKyAgICBteUZpeHR1cmUuY2hlY2tSZXN1bHRCeUZpbGUocyk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0VG9hcigpIHRocm93cyBUaHJvd2FibGUgeworICAgIGNvbmZpZ3VyZSgpOworICAgIHN0YXJ0VGVtcGxhdGUoInRvYXIiLCAib3RoZXIiKQorICAgIHN0YXRlLmdvdG9FbmQoKTsKKyAgICBjaGVja1Jlc3VsdCgpOworICB9CisKKyAgZGVmIHN0YXJ0VGVtcGxhdGUoU3RyaW5nIG5hbWUsIFN0cmluZyBncm91cCkgeworICAgIFRlbXBsYXRlTWFuYWdlci5nZXRJbnN0YW5jZShnZXRQcm9qZWN0KCkpLnN0YXJ0VGVtcGxhdGUoZ2V0RWRpdG9yKCksIFRlbXBsYXRlU2V0dGluZ3MuZ2V0SW5zdGFuY2UoKS5nZXRUZW1wbGF0ZShuYW1lLCBncm91cCkpOworICB9CisKKyAgcHJpdmF0ZSB2b2lkIGNvbmZpZ3VyZSgpIHsKKyAgICBteUZpeHR1cmUuY29uZmlndXJlQnlGaWxlKGdldFRlc3ROYW1lKGZhbHNlKSArICIuamF2YSIpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEl0ZXIoKSB0aHJvd3MgVGhyb3dhYmxlIHsKKyAgICBjb25maWd1cmUoKTsKKyAgICBzdGFydFRlbXBsYXRlKCJpdGVyIiwgIml0ZXJhdGlvbnMiKQorICAgIHN0YXRlLm5leHRUYWIoKTsKKyAgICAoKExvb2t1cEltcGwpTG9va3VwTWFuYWdlckltcGwuZ2V0QWN0aXZlTG9va3VwKGdldEVkaXRvcigpKSkuZmluaXNoTG9va3VwKChjaGFyKTApOworICAgIGNoZWNrUmVzdWx0KCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0UHJlZmVyU3RhcnRNYXRjaGVzSW5Mb29rdXBzKCkgdGhyb3dzIFRocm93YWJsZSB7CisgICAgY29uZmlndXJlKCk7CisgICAgc3RhcnRUZW1wbGF0ZSgiaXRlciIsICJpdGVyYXRpb25zIikKKyAgICBteUZpeHR1cmUudHlwZSgnZXNlXG4nKSAvL2ZvciBlbnRyeVNldAorICAgIGFzc2VydCBteUZpeHR1cmUubG9va3VwRWxlbWVudFN0cmluZ3MgPT0gWydiYXJHb29TdHJpbmdCdWlsZGVyRW50cnknLCAnZ29vU3RyaW5nQnVpbGRlckVudHJ5JywgJ3N0cmluZ0J1aWxkZXJFbnRyeScsICdidWlsZGVyRW50cnknLCAnZW50cnknXQorICAgIG15Rml4dHVyZS50eXBlKCdlJykKKyAgICBhc3NlcnQgbXlGaXh0dXJlLmxvb2t1cEVsZW1lbnRTdHJpbmdzID09IFsnZW50cnknLCAnYmFyR29vU3RyaW5nQnVpbGRlckVudHJ5JywgJ2dvb1N0cmluZ0J1aWxkZXJFbnRyeScsICdzdHJpbmdCdWlsZGVyRW50cnknLCAnYnVpbGRlckVudHJ5J10KKyAgICBhc3NlcnQgTG9va3VwTWFuYWdlci5nZXRBY3RpdmVMb29rdXAoZWRpdG9yKS5jdXJyZW50SXRlbS5sb29rdXBTdHJpbmcgPT0gJ2VudHJ5JworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdENsYXNzTmFtZURvdEluVGVtcGxhdGUoKSB7CisgICAgQ29kZUluc2lnaHRTZXR0aW5ncy5pbnN0YW5jZS5DT01QTEVUSU9OX0NBU0VfU0VOU0lUSVZFID0gQ29kZUluc2lnaHRTZXR0aW5ncy5OT05FCisgICAgY29uZmlndXJlKCk7CisgICAgc3RhcnRUZW1wbGF0ZSgic291dHYiLCAib3V0cHV0IikKKyAgICBteUZpeHR1cmUudHlwZSgnRmlsZScpCisgICAgYXNzZXJ0IG15Rml4dHVyZS5sb29rdXBFbGVtZW50U3RyaW5ncyA9PSBbJ2ZpbGUnXQorICAgIG15Rml4dHVyZS50eXBlKCcuJykKKyAgICBjaGVja1Jlc3VsdCgpCisgICAgYXNzZXJ0ICFzdGF0ZS5maW5pc2hlZAorICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEFsbG93VHlwaW5nUmFuZG9tRXhwcmVzc2lvbnNXaXRoTG9va3VwT3BlbigpIHsKKyAgICBjb25maWd1cmUoKTsKKyAgICBzdGFydFRlbXBsYXRlKCJpdGVyIiwgIml0ZXJhdGlvbnMiKQorICAgIG15Rml4dHVyZS50eXBlKCdmaWxlLicpCisgICAgY2hlY2tSZXN1bHQoKQorICAgIGFzc2VydCAhc3RhdGUuZmluaXNoZWQKKyAgfQorCisgIHByaXZhdGUgVGVtcGxhdGVTdGF0ZSBnZXRTdGF0ZSgpIHsKKyAgICBUZW1wbGF0ZU1hbmFnZXJJbXBsLmdldFRlbXBsYXRlU3RhdGUoZ2V0RWRpdG9yKCkpCisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0SXRlcjEoKSB0aHJvd3MgVGhyb3dhYmxlIHsKKyAgICBjb25maWd1cmUoKTsKKyAgICBzdGFydFRlbXBsYXRlKCJpdGVyIiwgIml0ZXJhdGlvbnMiKQorICAgIHN0YXRlLm5leHRUYWIoKTsKKyAgICBjaGVja1Jlc3VsdCgpOworICB9CisKKyAgcHVibGljIHZvaWQgX3Rlc3RJdGVyRm9yY2VCcmFjZXMoKSB7CisgICAgQ29kZVN0eWxlU2V0dGluZ3NNYW5hZ2VyLmdldFNldHRpbmdzKGdldFByb2plY3QoKSkuSUZfQlJBQ0VfRk9SQ0UgPSBDb21tb25Db2RlU3R5bGVTZXR0aW5ncy5GT1JDRV9CUkFDRVNfQUxXQVlTOworCisgICAgdHJ5IHsKKyAgICAgIGNvbmZpZ3VyZSgpOworICAgICAgc3RhcnRUZW1wbGF0ZSgiaXRlciIsICJpdGVyYXRpb25zIikKKyAgICAgIHN0cmlwVHJhaWxpbmdTcGFjZXMoKTsKKyAgICAgIGNoZWNrUmVzdWx0KCk7CisgICAgfQorICAgIGZpbmFsbHkgeworICAgICAgQ29kZVN0eWxlU2V0dGluZ3NNYW5hZ2VyLmdldFNldHRpbmdzKGdldFByb2plY3QoKSkuSUZfQlJBQ0VfRk9SQ0UgPSBDb21tb25Db2RlU3R5bGVTZXR0aW5ncy5ET19OT1RfRk9SQ0U7CisgICAgfQorICB9CisKKyAgcHJpdmF0ZSB2b2lkIHN0cmlwVHJhaWxpbmdTcGFjZXMoKSB7CisgICAgRG9jdW1lbnRJbXBsIGRvY3VtZW50ID0gKERvY3VtZW50SW1wbClnZXRFZGl0b3IoKS5nZXREb2N1bWVudCgpOworICAgIGRvY3VtZW50LnNldFN0cmlwVHJhaWxpbmdTcGFjZXNFbmFibGVkKHRydWUpOworICAgIGRvY3VtZW50LnN0cmlwVHJhaWxpbmdTcGFjZXMoKTsKKyAgICBQc2lEb2N1bWVudE1hbmFnZXIuZ2V0SW5zdGFuY2UoZ2V0UHJvamVjdCgpKS5jb21taXRBbGxEb2N1bWVudHMoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RJdGVyUGFyYW1ldGVyaXplZElubmVyKCkgeworICAgIGNvbmZpZ3VyZSgpOworICAgIHN0YXJ0VGVtcGxhdGUoIml0ZXIiLCAiaXRlcmF0aW9ucyIpCisgICAgc3RyaXBUcmFpbGluZ1NwYWNlcygpOworICAgIGNoZWNrUmVzdWx0KCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0QXNMaXN0VG9hcigpIHsKKyAgICBjb25maWd1cmUoKTsKKyAgICBzdGFydFRlbXBsYXRlKCJ0b2FyIiwgIm90aGVyIikKKyAgICBteUZpeHR1cmUudHlwZSgnXG5cdCcpCisgICAgY2hlY2tSZXN1bHQoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RWYXJhcmdUb2FyKCkgeworICAgIGNvbmZpZ3VyZSgpOworICAgIHN0YXJ0VGVtcGxhdGUoInRvYXIiLCAib3RoZXIiKQorICAgIGNoZWNrUmVzdWx0KCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0U291dHAoKSB7CisgICAgY29uZmlndXJlKCk7CisgICAgc3RhcnRUZW1wbGF0ZSgic291dHAiLCAib3V0cHV0IikKKyAgICBjaGVja1Jlc3VsdCgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEphdmFTdGF0ZW1lbnRDb250ZXh0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZmluYWwgVGVtcGxhdGVJbXBsIHRlbXBsYXRlID0gVGVtcGxhdGVTZXR0aW5ncy5nZXRJbnN0YW5jZSgpLmdldFRlbXBsYXRlKCJpbnN0IiwgIm90aGVyIik7CisgICAgYXNzZXJ0RmFsc2UoaXNBcHBsaWNhYmxlKCJjbGFzcyBGb28ge3sgaWYgKGEgaW5zdDxjYXJldD4pIH19IiwgdGVtcGxhdGUpKTsKKyAgICBhc3NlcnRUcnVlKGlzQXBwbGljYWJsZSgiY2xhc3MgRm9vIHt7IDxjYXJldD5pbnN0IH19IiwgdGVtcGxhdGUpKTsKKyAgICBhc3NlcnRUcnVlKGlzQXBwbGljYWJsZSgiY2xhc3MgRm9vIHt7IDxjYXJldD5pbnN0XG4gYT1iOyB9fSIsIHRlbXBsYXRlKSk7CisgICAgYXNzZXJ0RmFsc2UoaXNBcHBsaWNhYmxlKCJjbGFzcyBGb28ge3sgcmV0dXJuICg8Y2FyZXQ+aW5zdCkgfX0iLCB0ZW1wbGF0ZSkpOworICAgIGFzc2VydEZhbHNlKGlzQXBwbGljYWJsZSgiY2xhc3MgRm9vIHt7IHJldHVybiBhIDxjYXJldD5pbnN0KSB9fSIsIHRlbXBsYXRlKSk7CisgICAgYXNzZXJ0VHJ1ZShpc0FwcGxpY2FibGUoImNsYXNzIEZvbyB7eyA8Y2FyZXQ+YS5iKCk7ICkgfX0iLCB0ZW1wbGF0ZSkpOworICAgIGFzc2VydFRydWUoaXNBcHBsaWNhYmxlKCJjbGFzcyBGb28ge3sgPGNhcmV0PmEoKTsgKSB9fSIsIHRlbXBsYXRlKSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0SmF2YUV4cHJlc3Npb25Db250ZXh0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZmluYWwgVGVtcGxhdGVJbXBsIHRlbXBsYXRlID0gVGVtcGxhdGVTZXR0aW5ncy5nZXRJbnN0YW5jZSgpLmdldFRlbXBsYXRlKCJ0b2FyIiwgIm90aGVyIik7CisgICAgYXNzZXJ0RmFsc2UoaXNBcHBsaWNhYmxlKCJjbGFzcyBGb28ge3sgaWYgKGEgPGNhcmV0PnRvYXIpIH19IiwgdGVtcGxhdGUpKTsKKyAgICBhc3NlcnRUcnVlKGlzQXBwbGljYWJsZSgiY2xhc3MgRm9vIHt7IDxjYXJldD50b2FyIH19IiwgdGVtcGxhdGUpKTsKKyAgICBhc3NlcnRUcnVlKGlzQXBwbGljYWJsZSgiY2xhc3MgRm9vIHt7IHJldHVybiAoPGNhcmV0PnRvYXIpIH19IiwgdGVtcGxhdGUpKTsKKyAgICBhc3NlcnRGYWxzZShpc0FwcGxpY2FibGUoImNsYXNzIEZvbyB7eyByZXR1cm4gKGFhYSA8Y2FyZXQ+dG9hcikgfX0iLCB0ZW1wbGF0ZSkpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEphdmFEZWNsYXJhdGlvbkNvbnRleHQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBmaW5hbCBUZW1wbGF0ZUltcGwgdGVtcGxhdGUgPSBUZW1wbGF0ZVNldHRpbmdzLmdldEluc3RhbmNlKCkuZ2V0VGVtcGxhdGUoInBzdm0iLCAib3RoZXIiKTsKKyAgICBhc3NlcnRGYWxzZShpc0FwcGxpY2FibGUoImNsYXNzIEZvbyB7eyA8Y2FyZXQ+eHh4IH19IiwgdGVtcGxhdGUpKTsKKyAgICBhc3NlcnRGYWxzZShpc0FwcGxpY2FibGUoImNsYXNzIEZvbyB7eyA8Y2FyZXQ+eHh4IH19IiwgdGVtcGxhdGUpKTsKKyAgICBhc3NlcnRGYWxzZShpc0FwcGxpY2FibGUoImNsYXNzIEZvbyB7eyBpZiAoYSA8Y2FyZXQ+eHh4KSB9fSIsIHRlbXBsYXRlKSk7CisgICAgYXNzZXJ0RmFsc2UoaXNBcHBsaWNhYmxlKCJjbGFzcyBGb28ge3sgcmV0dXJuICg8Y2FyZXQ+eHh4KSB9fSIsIHRlbXBsYXRlKSk7CisgICAgYXNzZXJ0VHJ1ZShpc0FwcGxpY2FibGUoImNsYXNzIEZvbyB7IDxjYXJldD54eHggfSIsIHRlbXBsYXRlKSk7CisgICAgYXNzZXJ0RmFsc2UoaXNBcHBsaWNhYmxlKCJjbGFzcyBGb28geyBpbnQgPGNhcmV0Pnh4eCB9IiwgdGVtcGxhdGUpKTsKKyAgICBhc3NlcnRUcnVlKGlzQXBwbGljYWJsZSgiY2xhc3MgRm9vIHt9IDxjYXJldD54eHgiLCB0ZW1wbGF0ZSkpOworCisgICAgYXNzZXJ0VHJ1ZShpc0FwcGxpY2FibGUoImNsYXNzIEZvbyB7IHZvaWQgZm9vKDxjYXJldD54eHgpIHt9IH0iLCB0ZW1wbGF0ZSkpOworICAgIGFzc2VydFRydWUoaXNBcHBsaWNhYmxlKCJjbGFzcyBGb28geyB2b2lkIGZvbyg8Y2FyZXQ+eHh4IFN0cmluZyBiYXIgKSB7fSB9IiwgdGVtcGxhdGUpKTsKKyAgICBhc3NlcnRUcnVlKGlzQXBwbGljYWJsZSgiY2xhc3MgRm9vIHsgdm9pZCBmb28oPGNhcmV0Pnh4eCBTdHJpbmcgYmFyLCBpbnQgZ29vICkge30gfSIsIHRlbXBsYXRlKSk7CisgICAgYXNzZXJ0VHJ1ZShpc0FwcGxpY2FibGUoImNsYXNzIEZvbyB7IHZvaWQgZm9vKFN0cmluZyBiYXIsIDxjYXJldD54eHggaW50IGdvbyApIHt9IH0iLCB0ZW1wbGF0ZSkpOworICAgIGFzc2VydFRydWUoaXNBcHBsaWNhYmxlKCJjbGFzcyBGb28geyB2b2lkIGZvbyhTdHJpbmcgYmFyLCA8Y2FyZXQ+eHh4IGdvbyApIHt9IH0iLCB0ZW1wbGF0ZSkpOworICAgIGFzc2VydFRydWUoaXNBcHBsaWNhYmxlKCJjbGFzcyBGb28geyA8Y2FyZXQ+eHh4IHZvaWQgZm9vKFN0cmluZyBiYXIsIHh4eCBnb28gKSB7fSB9IiwgdGVtcGxhdGUpKTsKKyAgICBhc3NlcnRUcnVlKGlzQXBwbGljYWJsZSgiY2xhc3MgRm9vIHsgdm9pZCBmb28oPGNhcmV0PlN0cmluZ1tdIGJhcikge30gfSIsIHRlbXBsYXRlKSk7CisgICAgYXNzZXJ0VHJ1ZShpc0FwcGxpY2FibGUoImNsYXNzIEZvbyB7IDxjYXJldD54eHggU3RyaW5nW10gZm9vKFN0cmluZ1tdIGJhcikge30gfSIsIHRlbXBsYXRlKSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0T3RoZXJDb250ZXh0KCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKKyAgICBjb25maWd1cmVGcm9tRmlsZVRleHQoImEuamF2YSIsICJjbGFzcyBGb28geyA8Y2FyZXQ+eHh4IH0iKTsKKyAgICBhc3NlcnRJbnN0YW5jZU9mKGFzc2VydE9uZUVsZW1lbnQoVGVtcGxhdGVNYW5hZ2VySW1wbC5nZXRBcHBsaWNhYmxlQ29udGV4dFR5cGVzKG15Rml4dHVyZS5nZXRGaWxlKCksIGdldEVkaXRvcigpLmdldENhcmV0TW9kZWwoKS5nZXRPZmZzZXQoKSkpLCBKYXZhQ29kZUNvbnRleHRUeXBlLkRlY2xhcmF0aW9uLmNsYXNzKTsKKworICAgIGNvbmZpZ3VyZUZyb21GaWxlVGV4dCgiYS50eHQiLCAiY2xhc3MgRm9vIHsgPGNhcmV0Pnh4eCB9Iik7CisgICAgYXNzZXJ0SW5zdGFuY2VPZihhc3NlcnRPbmVFbGVtZW50KFRlbXBsYXRlTWFuYWdlckltcGwuZ2V0QXBwbGljYWJsZUNvbnRleHRUeXBlcyhteUZpeHR1cmUuZ2V0RmlsZSgpLCBnZXRFZGl0b3IoKS5nZXRDYXJldE1vZGVsKCkuZ2V0T2Zmc2V0KCkpKSwgRXZlcnl3aGVyZUNvbnRleHRUeXBlLmNsYXNzKTsKKyAgfQorCisgIHByaXZhdGUgYm9vbGVhbiBpc0FwcGxpY2FibGUoU3RyaW5nIHRleHQsIFRlbXBsYXRlSW1wbCBpbnN0KSB0aHJvd3MgSU9FeGNlcHRpb24geworICAgIGNvbmZpZ3VyZUZyb21GaWxlVGV4dCgiYS5qYXZhIiwgdGV4dCk7CisgICAgcmV0dXJuIFRlbXBsYXRlTWFuYWdlckltcGwuaXNBcHBsaWNhYmxlKG15Rml4dHVyZS5nZXRGaWxlKCksIGdldEVkaXRvcigpLmdldENhcmV0TW9kZWwoKS5nZXRPZmZzZXQoKSwgaW5zdCk7CisgIH0KKworICBAT3ZlcnJpZGUKKyAgcHJvdGVjdGVkIHZvaWQgaW52b2tlVGVzdFJ1bm5hYmxlKGZpbmFsIFJ1bm5hYmxlIHJ1bm5hYmxlKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBpZiAobmFtZSBpbiBbInRlc3ROYXZpZ2F0aW9uQWN0aW9uc0RvbnRUZXJtaW5hdGVUZW1wbGF0ZSIsICJ0ZXN0VGVtcGxhdGVXaXRoRW5kIiwgInRlc3REaXNhcHBlYXJpbmdWYXIiXSkgeworICAgICAgcnVubmFibGUucnVuKCk7CisgICAgICByZXR1cm47CisgICAgfQorCisgICAgd3JpdGVDb21tYW5kKHJ1bm5hYmxlKQorICB9CisKKyAgcHJpdmF0ZSB3cml0ZUNvbW1hbmQoUnVubmFibGUgcnVubmFibGUpIHsKKyAgICBDb21tYW5kUHJvY2Vzc29yLmluc3RhbmNlLmV4ZWN1dGVDb21tYW5kKHByb2plY3QsIHsKKyAgICAgIEFjY2Vzc1Rva2VuIHRva2VuID0gV3JpdGVBY3Rpb24uc3RhcnQoKQorICAgICAgdHJ5IHsKKyAgICAgICAgcnVubmFibGUucnVuKCkKKyAgICAgIH0KKyAgICAgIGZpbmFsbHkgeworICAgICAgICB0b2tlbi5maW5pc2goKQorICAgICAgfQorICAgIH0sIG51bGwsIG51bGwpCisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0U2VhcmNoQnlEZXNjcmlwdGlvbldoZW5UZW1wbGF0ZXNMaXN0ZWQoKSB7CisgICAgbXlGaXh0dXJlLmNvbmZpZ3VyZUJ5VGV4dCgiYS5qYXZhIiwgImNsYXNzIEEge3sgPGNhcmV0PiB9fSIpCisKKyAgICBuZXcgTGlzdFRlbXBsYXRlc0hhbmRsZXIoKS5pbnZva2UocHJvamVjdCwgZWRpdG9yLCBteUZpeHR1cmUuZmlsZSk7CisgICAgbXlGaXh0dXJlLnR5cGUoJ2FycmF5JykKKyAgICBhc3NlcnQgJ2l0YXInIGluIG15Rml4dHVyZS5sb29rdXBFbGVtZW50U3RyaW5ncworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdExpc3RUZW1wbGF0ZXNTZWFyY2hlc1ByZWZpeEluRGVzY3JpcHRpb24oKSB7CisgICAgbXlGaXh0dXJlLmNvbmZpZ3VyZUJ5VGV4dCgiYS5qYXZhIiwgImNsYXNzIEEgeyBtYWluPGNhcmV0PiB9IikKKworICAgIG5ldyBMaXN0VGVtcGxhdGVzSGFuZGxlcigpLmludm9rZShwcm9qZWN0LCBlZGl0b3IsIG15Rml4dHVyZS5maWxlKTsKKyAgICBhc3NlcnQgbXlGaXh0dXJlLmxvb2t1cEVsZW1lbnRTdHJpbmdzID09IFsncHN2bSddCisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0TGlzdFRlbXBsYXRlc0FjdGlvbigpIHsKKyAgICBteUZpeHR1cmUuY29uZmlndXJlQnlUZXh0KCJhLmphdmEiLCAiY2xhc3MgQSB7eyA8Y2FyZXQ+IH19IikKKworICAgIG5ldyBMaXN0VGVtcGxhdGVzSGFuZGxlcigpLmludm9rZShwcm9qZWN0LCBlZGl0b3IsIG15Rml4dHVyZS5maWxlKTsKKyAgICBhc3NlcnQgbXlGaXh0dXJlLmxvb2t1cEVsZW1lbnRTdHJpbmdzLmNvbnRhaW5zQWxsKFsnaXRlcicsICdpdGNvJywgJ3RvYXInXSkKKyAgICAKKyAgICBteUZpeHR1cmUudHlwZSgnaXQnKQorICAgIGFzc2VydCBteUZpeHR1cmUubG9va3VwRWxlbWVudFN0cmluZ3NbMF0uc3RhcnRzV2l0aCgnaXQnKQorICAgIGFzc2VydCBMb29rdXBNYW5hZ2VyLmdldEluc3RhbmNlKHByb2plY3QpLmFjdGl2ZUxvb2t1cC5jdXJyZW50SXRlbSA9PSBteUZpeHR1cmUuZ2V0TG9va3VwRWxlbWVudHMoKVswXQorCisgICAgbXlGaXh0dXJlLnR5cGUoJ2UnKQorICAgIGFzc2VydCBteUZpeHR1cmUubG9va3VwRWxlbWVudFN0cmluZ3NbMF0uc3RhcnRzV2l0aCgnaXRlJykKKyAgICBhc3NlcnQgTG9va3VwTWFuYWdlci5nZXRJbnN0YW5jZShwcm9qZWN0KS5hY3RpdmVMb29rdXAuY3VycmVudEl0ZW0gPT0gbXlGaXh0dXJlLmdldExvb2t1cEVsZW1lbnRzKClbMF0KKyAgICBMb29rdXBNYW5hZ2VyLmdldEluc3RhbmNlKHByb2plY3QpLmhpZGVBY3RpdmVMb29rdXAoKQorCisgICAgbXlGaXh0dXJlLnR5cGUoJ1xiXGInKQorICAgIG5ldyBMaXN0VGVtcGxhdGVzSGFuZGxlcigpLmludm9rZShwcm9qZWN0LCBlZGl0b3IsIG15Rml4dHVyZS5maWxlKTsKKyAgICBhc3NlcnQgbXlGaXh0dXJlLmxvb2t1cEVsZW1lbnRTdHJpbmdzLmNvbnRhaW5zQWxsKFsnaXRlcicsICdpdGNvJ10pCisgICAgTG9va3VwTWFuYWdlci5nZXRJbnN0YW5jZShwcm9qZWN0KS5oaWRlQWN0aXZlTG9va3VwKCkKKworICAgIG15Rml4dHVyZS50eXBlKCd4eHh4eCcpCisgICAgbmV3IExpc3RUZW1wbGF0ZXNIYW5kbGVyKCkuaW52b2tlKHByb2plY3QsIGVkaXRvciwgbXlGaXh0dXJlLmZpbGUpOworICAgIGFzc2VydCBteUZpeHR1cmUubG9va3VwRWxlbWVudFN0cmluZ3MuY29udGFpbnNBbGwoWydpdGVyJywgJ2l0Y28nLCAndG9hciddKQorICAgIExvb2t1cE1hbmFnZXIuZ2V0SW5zdGFuY2UocHJvamVjdCkuaGlkZUFjdGl2ZUxvb2t1cCgpCisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0U2VsZWN0aW9uRnJvbUxvb2t1cEJ5U3BhY2UoKSB7CisgICAgbXlGaXh0dXJlLmNvbmZpZ3VyZUJ5VGV4dCgiYS5qYXZhIiwgImNsYXNzIEEge3sgaXRjPGNhcmV0PiB9fSIpCisKKyAgICBuZXcgTGlzdFRlbXBsYXRlc0hhbmRsZXIoKS5pbnZva2UocHJvamVjdCwgZWRpdG9yLCBteUZpeHR1cmUuZmlsZSk7CisgICAgbXlGaXh0dXJlLnR5cGUgJyAnCisgICAgbXlGaXh0dXJlLmNoZWNrUmVzdWx0ICJpbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yO1xuIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICJcbiIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAiY2xhc3MgQSB7e1xuIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICIgICAgZm9yIChJdGVyYXRvciA8c2VsZWN0aW9uPml0ZXJhdG9yPC9zZWxlY3Rpb24+ID0gY29sbGVjdGlvbi5pdGVyYXRvcigpOyBpdGVyYXRvci5oYXNOZXh0KCk7ICkge1xuIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICIgICAgICAgIE9iamVjdCBuZXh0ID0gIGl0ZXJhdG9yLm5leHQoKTtcbiIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgICAgICBcbiIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgIH0gfX0iCisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0TmF2aWdhdGlvbkFjdGlvbnNEb250VGVybWluYXRlVGVtcGxhdGUoKSB0aHJvd3MgVGhyb3dhYmxlIHsKKyAgICBjb25maWd1cmVGcm9tRmlsZVRleHQoImEudHh0IiwgIiIpCisKKyAgICBmaW5hbCBUZW1wbGF0ZU1hbmFnZXIgbWFuYWdlciA9IFRlbXBsYXRlTWFuYWdlci5nZXRJbnN0YW5jZShnZXRQcm9qZWN0KCkpOworICAgIGZpbmFsIFRlbXBsYXRlIHRlbXBsYXRlID0gbWFuYWdlci5jcmVhdGVUZW1wbGF0ZSgidm4iLCAidXNlciIsICdIZWxsbyAkVjEkIFdvcmxkICRWMSRcbkhlbGxvICRWMiQgV29ybGQgJFYyJFxuSGVsbG8gJFYzJCBXb3JsZCAkVjMkJyk7CisgICAgdGVtcGxhdGUuYWRkVmFyaWFibGUoIlYxIiwgIiIsICIiLCB0cnVlKTsKKyAgICB0ZW1wbGF0ZS5hZGRWYXJpYWJsZSgiVjIiLCAiIiwgIiIsIHRydWUpOworICAgIHRlbXBsYXRlLmFkZFZhcmlhYmxlKCJWMyIsICIiLCAiIiwgdHJ1ZSk7CisgICAgZmluYWwgRWRpdG9yIGVkaXRvciA9IGdldEVkaXRvcigpOworCisgICAgd3JpdGVDb21tYW5kIHsgbWFuYWdlci5zdGFydFRlbXBsYXRlKGVkaXRvciwgdGVtcGxhdGUpIH0KKworICAgIGZpbmFsIFRlbXBsYXRlU3RhdGUgc3RhdGUgPSBnZXRTdGF0ZSgpOworCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAzOyBpKyspIHsKKyAgICAgIGFzc2VydEZhbHNlKFN0cmluZy52YWx1ZU9mKGkpLCBzdGF0ZS5pc0ZpbmlzaGVkKCkpOworICAgICAgbXlGaXh0dXJlLnR5cGUoJ0gnKTsKKyAgICAgIGZpbmFsIFN0cmluZyBkb2NUZXh0ID0gZWRpdG9yLmdldERvY3VtZW50KCkuZ2V0VGV4dCgpOworICAgICAgYXNzZXJ0VHJ1ZShkb2NUZXh0LCBkb2NUZXh0LnN0YXJ0c1dpdGgoIkhlbGxvIEggV29ybGQgSFxuIikpOworICAgICAgZmluYWwgaW50IG9mZnNldCA9IGVkaXRvci5nZXRDYXJldE1vZGVsKCkuZ2V0T2Zmc2V0KCk7CisKKyAgICAgIG1vdmVDYXJldChvZmZzZXQgKyAxKTsKKyAgICAgIG1vdmVDYXJldChvZmZzZXQpOworCisgICAgICBteUZpeHR1cmUuY29tcGxldGVCYXNpYygpCisgICAgICBteUZpeHR1cmUudHlwZSgnICcpOworCisgICAgICBhc3NlcnRFcXVhbHMob2Zmc2V0ICsgMSwgZWRpdG9yLmdldENhcmV0TW9kZWwoKS5nZXRPZmZzZXQoKSk7CisgICAgICBhc3NlcnRGYWxzZShzdGF0ZS5pc0ZpbmlzaGVkKCkpOworCisgICAgICBteUZpeHR1cmUudHlwZSgnXGInKTsKKyAgICAgIGFzc2VydEZhbHNlKHN0YXRlLmlzRmluaXNoZWQoKSk7CisgICAgICB3cml0ZUNvbW1hbmQgeyBzdGF0ZS5uZXh0VGFiKCkgfQorICAgIH0KKyAgICBhc3NlcnRUcnVlKHN0YXRlLmlzRmluaXNoZWQoKSk7CisgICAgY2hlY2tSZXN1bHRCeUZpbGUoZ2V0VGVzdE5hbWUoZmFsc2UpICsgIi1vdXQudHh0Iik7CisgIH0KKworICBwcml2YXRlIHZvaWQgbW92ZUNhcmV0KGZpbmFsIGludCBvZmZzZXQpIHsKKyAgICBlZHQgeworICAgICAgZ2V0RWRpdG9yKCkuZ2V0Q2FyZXRNb2RlbCgpLm1vdmVUb09mZnNldChvZmZzZXQpOworICAgIH0KKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RVc2VEZWZhdWx0VmFsdWVGb3JRdWlja1Jlc3VsdENhbGN1bGF0aW9uKCkgeworICAgIG15Rml4dHVyZS5jb25maWd1cmVCeVRleHQgJ2EudHh0JywgJzxjYXJldD4nCisKKyAgICBmaW5hbCBUZW1wbGF0ZU1hbmFnZXIgbWFuYWdlciA9IFRlbXBsYXRlTWFuYWdlci5nZXRJbnN0YW5jZShnZXRQcm9qZWN0KCkpOworICAgIGZpbmFsIFRlbXBsYXRlIHRlbXBsYXRlID0gbWFuYWdlci5jcmVhdGVUZW1wbGF0ZSgidm4iLCAidXNlciIsICckVjEkIHZhciA9ICRWMiQ7Jyk7CisgICAgdGVtcGxhdGUuYWRkVmFyaWFibGUoIlYxIiwgIiIsICIiLCB0cnVlKTsKKyAgICB0ZW1wbGF0ZS5hZGRWYXJpYWJsZSgiVjIiLCAiIiwgJyIyMzkiJywgdHJ1ZSk7CisKKyAgICB3cml0ZUNvbW1hbmQgeyBtYW5hZ2VyLnN0YXJ0VGVtcGxhdGUoZWRpdG9yLCB0ZW1wbGF0ZSkgfQorCisgICAgbXlGaXh0dXJlLmNoZWNrUmVzdWx0ICc8Y2FyZXQ+IHZhciA9IDIzOTsnCisKKyAgICBteUZpeHR1cmUudHlwZSAnTycKKyAgICBteUZpeHR1cmUuY2hlY2tSZXN1bHQgJ088Y2FyZXQ+IHZhciA9IDIzOTsnCisKKyAgICBteUZpeHR1cmUudHlwZSAnXHQnCisgICAgbXlGaXh0dXJlLmNoZWNrUmVzdWx0ICdPIHZhciA9IDxzZWxlY3Rpb24+MjM5PC9zZWxlY3Rpb24+OycKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RUZW1wbGF0ZUV4cGFuZGluZ1dpdGhTZWxlY3Rpb24oKSB7CisgICAgZmluYWwgVGVtcGxhdGVNYW5hZ2VyIG1hbmFnZXIgPSBUZW1wbGF0ZU1hbmFnZXIuZ2V0SW5zdGFuY2UoZ2V0UHJvamVjdCgpKTsKKyAgICBmaW5hbCBUZW1wbGF0ZSB0ZW1wbGF0ZSA9IG1hbmFnZXIuY3JlYXRlVGVtcGxhdGUoInRwbCIsICJ1c2VyIiwgJ2V4cGFuZGVkJyk7CisgICAgZmluYWwgSmF2YVN0cmluZ0NvbnRleHRUeXBlIGNvbnRleHRUeXBlID0KKyAgICAgIENvbnRhaW5lclV0aWwuZmluZEluc3RhbmNlKFRlbXBsYXRlQ29udGV4dFR5cGUuRVBfTkFNRS5nZXRFeHRlbnNpb25zKCksIEphdmFTdHJpbmdDb250ZXh0VHlwZS5jbGFzcyk7CisgICAgKChUZW1wbGF0ZUltcGwpdGVtcGxhdGUpLmdldFRlbXBsYXRlQ29udGV4dCgpLnNldEVuYWJsZWQoY29udGV4dFR5cGUsIHRydWUpOworCisgICAgbXlGaXh0dXJlLmNvbmZpZ3VyZUJ5VGV4dCgiYS5qYXZhIiwgImNsYXNzIEEgeyB2b2lkIGYoKSB7IFN0cmk8c2VsZWN0aW9uPm5nIHMgPSBcInRwbDwvc2VsZWN0aW9uPjxjYXJldD5cIjsgfSB9IikKKworICAgIGRlZiBzZXR0aW5ncyA9IFRlbXBsYXRlU2V0dGluZ3MuZ2V0SW5zdGFuY2UoKQorICAgIHNldHRpbmdzLmFkZFRlbXBsYXRlKHRlbXBsYXRlKTsKKyAgICB0cnkgeworICAgICAgbXlGaXh0dXJlLnR5cGUgJ1x0JworICAgICAgbXlGaXh0dXJlLmNoZWNrUmVzdWx0ICdjbGFzcyBBIHsgdm9pZCBmKCkgeyBTdHJpICAgICI7IH0gfScKKyAgICB9CisgICAgZmluYWxseSB7CisgICAgICBzZXR0aW5ncy5yZW1vdmVUZW1wbGF0ZSh0ZW1wbGF0ZSk7CisgICAgfQorICB9CisKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9jb2RlSW5zaWdodC90ZW1wbGF0ZS9NYWNyb1BhcnNlclRlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9jb2RlSW5zaWdodC90ZW1wbGF0ZS9NYWNyb1BhcnNlclRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYjY4YWY0Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNpZ2h0L3RlbXBsYXRlL01hY3JvUGFyc2VyVGVzdC5qYXZhCkBAIC0wLDAgKzEsNTUgQEAKK3BhY2thZ2UgY29tLmludGVsbGlqLmNvZGVJbnNpZ2h0LnRlbXBsYXRlOworCitpbXBvcnQgY29tLmludGVsbGlqLmNvZGVJbnNpZ2h0LnRlbXBsYXRlLmltcGwuKjsKK2ltcG9ydCBjb20uaW50ZWxsaWouY29kZUluc2lnaHQudGVtcGxhdGUubWFjcm8uVmFyaWFibGVPZlR5cGVNYWNybzsKK2ltcG9ydCBjb20uaW50ZWxsaWoudGVzdEZyYW1ld29yay5MaWdodElkZWFUZXN0Q2FzZTsKKworLyoqCisgKiBAYXV0aG9yIHlvbGUKKyAqLworcHVibGljIGNsYXNzIE1hY3JvUGFyc2VyVGVzdCBleHRlbmRzIExpZ2h0SWRlYVRlc3RDYXNlIHsKKworICBwdWJsaWMgdm9pZCB0ZXN0RW1wdHkoKSB7CisgICAgRXhwcmVzc2lvbiBlID0gVGVtcGxhdGVJbXBsVXRpbC5wYXJzZVRlbXBsYXRlKCIiKTsKKyAgICBhc3NlcnRUcnVlKGUgaW5zdGFuY2VvZiBDb25zdGFudE5vZGUpOworICAgIGFzc2VydEVxdWFscygiIiwgZS5jYWxjdWxhdGVSZXN1bHQobnVsbCkudG9TdHJpbmcoKSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0RnVuY3Rpb24oKSB7CisgICAgRXhwcmVzc2lvbiBlID0gVGVtcGxhdGVJbXBsVXRpbC5wYXJzZVRlbXBsYXRlKCIgIHZhcmlhYmxlT2ZUeXBlKCAgXCJqYXZhLnV0aWwuQ29sbGVjdGlvblwiICApICAgIik7CisgICAgYXNzZXJ0VHJ1ZShlIGluc3RhbmNlb2YgTWFjcm9DYWxsTm9kZSk7CisgICAgTWFjcm9DYWxsTm9kZSBuID0gKE1hY3JvQ2FsbE5vZGUpIGU7CisgICAgYXNzZXJ0VHJ1ZShuLmdldE1hY3JvKCkgaW5zdGFuY2VvZiBWYXJpYWJsZU9mVHlwZU1hY3JvKTsKKyAgICBFeHByZXNzaW9uW10gcGFyYW1ldGVycyA9IG4uZ2V0UGFyYW1ldGVycygpOworICAgIGFzc2VydEVxdWFscygxLCBwYXJhbWV0ZXJzLmxlbmd0aCk7CisgICAgYXNzZXJ0VHJ1ZShwYXJhbWV0ZXJzIFswXSBpbnN0YW5jZW9mIENvbnN0YW50Tm9kZSk7CisgICAgQ29uc3RhbnROb2RlIGNuID0gKENvbnN0YW50Tm9kZSkgcGFyYW1ldGVycyBbMF07CisgICAgYXNzZXJ0RXF1YWxzKCJqYXZhLnV0aWwuQ29sbGVjdGlvbiIsIGNuLmNhbGN1bGF0ZVJlc3VsdChudWxsKS50b1N0cmluZygpKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RWYXJpYWJsZSgpIHsKKyAgICBFeHByZXNzaW9uIGUgPSBUZW1wbGF0ZUltcGxVdGlsLnBhcnNlVGVtcGxhdGUoInZhcmlhYmxlT2ZUeXBlKEU9XCJ0XCIpIik7CisgICAgRXhwcmVzc2lvbltdIHBhcmFtZXRlcnMgPSAoKE1hY3JvQ2FsbE5vZGUpIGUpLmdldFBhcmFtZXRlcnMoKTsKKyAgICBhc3NlcnRFcXVhbHMoMSwgcGFyYW1ldGVycy5sZW5ndGgpOworICAgIGFzc2VydFRydWUocGFyYW1ldGVycyBbMF0gaW5zdGFuY2VvZiBWYXJpYWJsZU5vZGUpOworICAgIFZhcmlhYmxlTm9kZSB2biA9IChWYXJpYWJsZU5vZGUpIHBhcmFtZXRlcnMgWzBdOworICAgIGFzc2VydEVxdWFscygiRSIsIHZuLmdldE5hbWUoKSk7CisgICAgYXNzZXJ0VHJ1ZSh2bi5nZXRJbml0aWFsVmFsdWUoKSBpbnN0YW5jZW9mIENvbnN0YW50Tm9kZSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0RW5kKCkgeworICAgIEV4cHJlc3Npb24gZSA9IFRlbXBsYXRlSW1wbFV0aWwucGFyc2VUZW1wbGF0ZSgiRU5EIik7CisgICAgYXNzZXJ0VHJ1ZShlIGluc3RhbmNlb2YgRW1wdHlOb2RlKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RNdWx0aXBsZVBhcmFtcygpIHsKKyAgICBFeHByZXNzaW9uIGUgPSBUZW1wbGF0ZUltcGxVdGlsLnBhcnNlVGVtcGxhdGUoInZhcmlhYmxlT2ZUeXBlKFwiQVwiLCBcIkJcIikiKTsKKyAgICBhc3NlcnRUcnVlKGUgaW5zdGFuY2VvZiBNYWNyb0NhbGxOb2RlKTsKKyAgICBNYWNyb0NhbGxOb2RlIG4gPSAoTWFjcm9DYWxsTm9kZSkgZTsKKyAgICBhc3NlcnRUcnVlKG4uZ2V0TWFjcm8oKSBpbnN0YW5jZW9mIFZhcmlhYmxlT2ZUeXBlTWFjcm8pOworICAgIEV4cHJlc3Npb25bXSBwYXJhbWV0ZXJzID0gbi5nZXRQYXJhbWV0ZXJzKCk7CisgICAgYXNzZXJ0RXF1YWxzKDIsIHBhcmFtZXRlcnMubGVuZ3RoKTsKKyAgICBhc3NlcnRUcnVlKHBhcmFtZXRlcnMgWzBdIGluc3RhbmNlb2YgQ29uc3RhbnROb2RlKTsKKyAgICBhc3NlcnRUcnVlKHBhcmFtZXRlcnMgWzFdIGluc3RhbmNlb2YgQ29uc3RhbnROb2RlKTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNwZWN0aW9uL0NhbkJlRmluYWxUZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovY29kZUluc3BlY3Rpb24vQ2FuQmVGaW5hbFRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMDFlY2IyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNwZWN0aW9uL0NhbkJlRmluYWxUZXN0LmphdmEKQEAgLTAsMCArMSwxMDEgQEAKKy8qCisgKiBDcmVhdGVkIGJ5IEludGVsbGlKIElERUEuCisgKiBVc2VyOiBtYXgKKyAqIERhdGU6IEFwciAxMSwgMjAwMgorICogVGltZTogNzo1MToxNiBQTQorICogVG8gY2hhbmdlIHRlbXBsYXRlIGZvciBuZXcgY2xhc3MgdXNlIAorICogQ29kZSBTdHlsZSB8IENsYXNzIFRlbXBsYXRlcyBvcHRpb25zIChUb29scyB8IElERSBPcHRpb25zKS4KKyAqLworcGFja2FnZSBjb20uaW50ZWxsaWouY29kZUluc3BlY3Rpb247CisKK2ltcG9ydCBjb20uaW50ZWxsaWouSmF2YVRlc3RVdGlsOworaW1wb3J0IGNvbS5pbnRlbGxpai5jb2RlSW5zcGVjdGlvbi5jYW5CZUZpbmFsLkNhbkJlRmluYWxJbnNwZWN0aW9uOworaW1wb3J0IGNvbS5pbnRlbGxpai50ZXN0RnJhbWV3b3JrLkluc3BlY3Rpb25UZXN0Q2FzZTsKKworcHVibGljIGNsYXNzIENhbkJlRmluYWxUZXN0IGV4dGVuZHMgSW5zcGVjdGlvblRlc3RDYXNlIHsKKyAgQE92ZXJyaWRlCisgIHByb3RlY3RlZCBTdHJpbmcgZ2V0VGVzdERhdGFQYXRoKCkgeworICAgIHJldHVybiBKYXZhVGVzdFV0aWwuZ2V0SmF2YVRlc3REYXRhUGF0aCgpICsgIi9pbnNwZWN0aW9uIjsKKyAgfQorCisgIHByaXZhdGUgdm9pZCBkb1Rlc3QoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBmaW5hbCBDYW5CZUZpbmFsSW5zcGVjdGlvbiB0b29sID0gbmV3IENhbkJlRmluYWxJbnNwZWN0aW9uKCk7CisgICAgdG9vbC5SRVBPUlRfQ0xBU1NFUyA9IHRydWU7CisgICAgdG9vbC5SRVBPUlRfRklFTERTID0gdHJ1ZTsKKyAgICB0b29sLlJFUE9SVF9NRVRIT0RTID0gdHJ1ZTsKKyAgICBkb1Rlc3QodG9vbCk7CisgIH0KKworICBwcml2YXRlIHZvaWQgZG9UZXN0KGZpbmFsIENhbkJlRmluYWxJbnNwZWN0aW9uIHRvb2wpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdCgiY2FuQmVGaW5hbC8iICsgZ2V0VGVzdE5hbWUoZmFsc2UpLCB0b29sKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RzaW1wbGVDbGFzc0luaGVyaXRhbmNlRmllbGQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RzaW1wbGVDbGFzc0luaGVyaXRhbmNlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0c2ltcGxlQ2xhc3NJbmhlcml0YW5jZTEoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RtZXRob2RJbmhlcml0YW5jZSgpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdCgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdHByaXZhdGVJbm5lcnMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RmaWVsZEFuZFRyeUJsb2NrKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0ZmllbGRzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0ZmllbGRzUmVhZGluZygpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdCgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFNDUjYwNzMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RTQ1I2NzgxKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0U0NSNjg0NSgpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdCgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFNDUjY4NjEoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RmaWVsZEFzc2lnbm1lbnRzc0luSW5pdGlhbGl6ZXIoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RzdGF0aWNGaWVsZHMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RzdGF0aWNDbGFzc0luaXRpYWxpemVyKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0U0NSNzczNygpIHRocm93cyBFeGNlcHRpb24geworICAgIENhbkJlRmluYWxJbnNwZWN0aW9uIHRvb2wgPSBuZXcgQ2FuQmVGaW5hbEluc3BlY3Rpb24oKTsKKyAgICB0b29sLlJFUE9SVF9DTEFTU0VTID0gZmFsc2U7CisgICAgdG9vbC5SRVBPUlRfRklFTERTID0gZmFsc2U7CisgICAgdG9vbC5SRVBPUlRfTUVUSE9EUyA9IHRydWU7CisKKyAgICBkb1Rlc3QodG9vbCk7CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9jb2RlSW5zcGVjdGlvbi9Db25jYXRlbmF0aW9uVG9NZXNzYWdlRm9ybWF0QWN0aW9uVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNwZWN0aW9uL0NvbmNhdGVuYXRpb25Ub01lc3NhZ2VGb3JtYXRBY3Rpb25UZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDEyMTA0YwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9jb2RlSW5zcGVjdGlvbi9Db25jYXRlbmF0aW9uVG9NZXNzYWdlRm9ybWF0QWN0aW9uVGVzdC5qYXZhCkBAIC0wLDAgKzEsMzggQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUgSmV0QnJhaW5zIHMuci5vLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICovCitwYWNrYWdlIGNvbS5pbnRlbGxpai5jb2RlSW5zcGVjdGlvbjsKKworaW1wb3J0IGNvbS5pbnRlbGxpai5jb2RlSW5zaWdodC5pbnRlbnRpb24uaW1wbC5Db25jYXRlbmF0aW9uVG9NZXNzYWdlRm9ybWF0QWN0aW9uOworaW1wb3J0IGNvbS5pbnRlbGxpai5wc2kuSmF2YVBzaUZhY2FkZTsKK2ltcG9ydCBjb20uaW50ZWxsaWoucHNpLlBzaUV4cHJlc3Npb247CitpbXBvcnQgY29tLmludGVsbGlqLnRlc3RGcmFtZXdvcmsuTGlnaHRJZGVhVGVzdENhc2U7CisKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworCitwdWJsaWMgY2xhc3MgQ29uY2F0ZW5hdGlvblRvTWVzc2FnZUZvcm1hdEFjdGlvblRlc3QgZXh0ZW5kcyBMaWdodElkZWFUZXN0Q2FzZSB7CisgIAorICBwdWJsaWMgdm9pZCB0ZXN0MSgpIHRocm93cyBFeGNlcHRpb257CisgICAgZmluYWwgU3RyaW5nIHRleHQgPSAiXCJhYWEgJ2JiYicgJ1wiICsgKChqYXZhLmxhbmcuU3RyaW5nKWNjYykgKyBcIidcIiI7CisgICAgZmluYWwgUHNpRXhwcmVzc2lvbiBleHByZXNzaW9uID0gSmF2YVBzaUZhY2FkZS5nZXRJbnN0YW5jZShnZXRQcm9qZWN0KCkpLmdldEVsZW1lbnRGYWN0b3J5KCkuY3JlYXRlRXhwcmVzc2lvbkZyb21UZXh0KAorICAgICAgdGV4dCwgbnVsbAorICAgICk7CisgICAgZmluYWwgU3RyaW5nQnVpbGRlciByZXN1bHQgPSBuZXcgU3RyaW5nQnVpbGRlcigpOworICAgIENvbmNhdGVuYXRpb25Ub01lc3NhZ2VGb3JtYXRBY3Rpb24uYnVpbGRNZXNzYWdlRm9ybWF0U3RyaW5nKGV4cHJlc3Npb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBBcnJheUxpc3Q8UHNpRXhwcmVzc2lvbj4oKSk7CisgICAgYXNzZXJ0RXF1YWxzKCJhYWEgJydiYmInJyAnJ3swfScnIiwgcmVzdWx0LnRvU3RyaW5nKCkpOworICB9CisgIAorICBwdWJsaWMgdm9pZCB0ZXN0MigpIHRocm93cyBFeGNlcHRpb24geworICAgIGZpbmFsIFN0cmluZyB0ZXh0ID0gIjEgKyAyICsgMyArIFwie30nXCIgKyAnXFxuJyArICgoamF2YS5sYW5nLlN0cmluZyljY2MpIjsKKyAgICBmaW5hbCBQc2lFeHByZXNzaW9uIGV4cHJlc3Npb24gPSBKYXZhUHNpRmFjYWRlLmdldEVsZW1lbnRGYWN0b3J5KGdldFByb2plY3QoKSkuY3JlYXRlRXhwcmVzc2lvbkZyb21UZXh0KHRleHQsIG51bGwpOworICAgIGZpbmFsIFN0cmluZ0J1aWxkZXIgcmVzdWx0ID0gbmV3IFN0cmluZ0J1aWxkZXIoKTsKKyAgICBmaW5hbCBBcnJheUxpc3Q8UHNpRXhwcmVzc2lvbj4gYXJncyA9IG5ldyBBcnJheUxpc3Q8UHNpRXhwcmVzc2lvbj4oKTsKKyAgICBDb25jYXRlbmF0aW9uVG9NZXNzYWdlRm9ybWF0QWN0aW9uLmJ1aWxkTWVzc2FnZUZvcm1hdFN0cmluZyhleHByZXNzaW9uLCByZXN1bHQsIGFyZ3MpOworICAgIGFzc2VydEVxdWFscygiezB9J3snfScnXFxuezF9IiwgcmVzdWx0LnRvU3RyaW5nKCkpOworICAgIGFzc2VydEVxdWFscygyLCBhcmdzLnNpemUoKSk7CisgICAgYXNzZXJ0RXF1YWxzKCIxICsgMiArIDMiLCBhcmdzLmdldCgwKS5nZXRUZXh0KCkpOworICAgIGFzc2VydEVxdWFscygiY2NjIiwgYXJncy5nZXQoMSkuZ2V0VGV4dCgpKTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNwZWN0aW9uL0NvbnZlcnRQYXJhbWV0ZXJUb0xvY2FsVmFyaWFibGVUZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovY29kZUluc3BlY3Rpb24vQ29udmVydFBhcmFtZXRlclRvTG9jYWxWYXJpYWJsZVRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YTdjZjhlCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNwZWN0aW9uL0NvbnZlcnRQYXJhbWV0ZXJUb0xvY2FsVmFyaWFibGVUZXN0LmphdmEKQEAgLTAsMCArMSw2MiBAQAorLyoKKyAqIENvcHlyaWdodCAyMDAwLTIwMTIgSmV0QnJhaW5zIHMuci5vLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworLyoKKyAqIFVzZXI6IGFubmEKKyAqIERhdGU6IDE2LU1heS0yMDA3CisgKi8KK3BhY2thZ2UgY29tLmludGVsbGlqLmNvZGVJbnNwZWN0aW9uOworCitpbXBvcnQgY29tLmludGVsbGlqLkphdmFUZXN0VXRpbDsKK2ltcG9ydCBjb20uaW50ZWxsaWouY29kZUluc2lnaHQuZGFlbW9uLnF1aWNrRml4LkxpZ2h0UXVpY2tGaXhUZXN0Q2FzZTsKK2ltcG9ydCBjb20uaW50ZWxsaWouY29kZUluc3BlY3Rpb24udmFyU2NvcGVDYW5CZU5hcnJvd2VkLlBhcmFtZXRlckNhbkJlTG9jYWxJbnNwZWN0aW9uOworaW1wb3J0IGNvbS5pbnRlbGxpai5wc2kuUHNpRWxlbWVudDsKK2ltcG9ydCBvcmcuamV0YnJhaW5zLmFubm90YXRpb25zLk5vbk5sczsKK2ltcG9ydCBvcmcuamV0YnJhaW5zLmFubm90YXRpb25zLk5vdE51bGw7CisKK3B1YmxpYyBjbGFzcyBDb252ZXJ0UGFyYW1ldGVyVG9Mb2NhbFZhcmlhYmxlVGVzdCBleHRlbmRzIExpZ2h0UXVpY2tGaXhUZXN0Q2FzZSB7CisgIEBOb3ROdWxsCisgIEBPdmVycmlkZQorICBwcm90ZWN0ZWQgU3RyaW5nIGdldFRlc3REYXRhUGF0aCgpIHsKKyAgICByZXR1cm4gSmF2YVRlc3RVdGlsLmdldEphdmFUZXN0RGF0YVBhdGgoKSArICIvaW5zcGVjdGlvbiI7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9BbGxUZXN0cygpOworICB9CisKKyAgQE92ZXJyaWRlCisgIHByb3RlY3RlZCB2b2lkIGRvQWN0aW9uKGZpbmFsIFN0cmluZyB0ZXh0LCBmaW5hbCBib29sZWFuIGFjdGlvblNob3VsZEJlQXZhaWxhYmxlLCBmaW5hbCBTdHJpbmcgdGVzdEZ1bGxQYXRoLCBmaW5hbCBTdHJpbmcgdGVzdE5hbWUpCisgICAgdGhyb3dzIEV4Y2VwdGlvbiB7CisKKyAgICBmaW5hbCBMb2NhbFF1aWNrRml4IGZpeCA9IG5ldyBQYXJhbWV0ZXJDYW5CZUxvY2FsSW5zcGVjdGlvbi5Db252ZXJ0UGFyYW1ldGVyVG9Mb2NhbFF1aWNrRml4KCk7CisgICAgZmluYWwgaW50IG9mZnNldCA9IGdldEVkaXRvcigpLmdldENhcmV0TW9kZWwoKS5nZXRPZmZzZXQoKTsKKyAgICBmaW5hbCBQc2lFbGVtZW50IHBzaUVsZW1lbnQgPSBnZXRGaWxlKCkuZmluZEVsZW1lbnRBdChvZmZzZXQpOworICAgIGFzc2VydCBwc2lFbGVtZW50ICE9IG51bGw7CisgICAgZmluYWwgSW5zcGVjdGlvbk1hbmFnZXIgbWFuYWdlciA9IEluc3BlY3Rpb25NYW5hZ2VyLmdldEluc3RhbmNlKGdldFByb2plY3QoKSk7CisgICAgZmluYWwgUHJvYmxlbURlc2NyaXB0b3IgZGVzY3JpcHRvciA9IG1hbmFnZXIuY3JlYXRlUHJvYmxlbURlc2NyaXB0b3IocHNpRWxlbWVudCwgIiIsIGZpeCwgUHJvYmxlbUhpZ2hsaWdodFR5cGUuTElLRV9VTlVTRURfU1lNQk9MLCB0cnVlKTsKKyAgICBmaXguYXBwbHlGaXgoZ2V0UHJvamVjdCgpLCBkZXNjcmlwdG9yKTsKKyAgICBmaW5hbCBTdHJpbmcgZXhwZWN0ZWRGaWxlUGF0aCA9IGdldEJhc2VQYXRoKCkgKyAiL2FmdGVyIiArIHRlc3ROYW1lOworICAgIGNoZWNrUmVzdWx0QnlGaWxlKCJJbiBmaWxlIDoiICsgZXhwZWN0ZWRGaWxlUGF0aCwgZXhwZWN0ZWRGaWxlUGF0aCwgZmFsc2UpOworICB9CisKKworICBAT3ZlcnJpZGUKKyAgQE5vbk5scworICBwcm90ZWN0ZWQgU3RyaW5nIGdldEJhc2VQYXRoKCkgeworICAgIHJldHVybiAiL3F1aWNrRml4L0NvbnZlcnRQYXJhbWV0ZXJUb0xvY2FsVmFyaWFibGUiOworICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovY29kZUluc3BlY3Rpb24vRGF0YUZsb3dJbnNwZWN0aW9uQW5jaWVudFRlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9jb2RlSW5zcGVjdGlvbi9EYXRhRmxvd0luc3BlY3Rpb25BbmNpZW50VGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU4M2NjZDUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovY29kZUluc3BlY3Rpb24vRGF0YUZsb3dJbnNwZWN0aW9uQW5jaWVudFRlc3QuamF2YQpAQCAtMCwwICsxLDExOSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDAwLTIwMTIgSmV0QnJhaW5zIHMuci5vLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KK3BhY2thZ2UgY29tLmludGVsbGlqLmNvZGVJbnNwZWN0aW9uOworCitpbXBvcnQgY29tLmludGVsbGlqLkphdmFUZXN0VXRpbDsKK2ltcG9ydCBjb20uaW50ZWxsaWouY29kZUluc3BlY3Rpb24uZGF0YUZsb3cuRGF0YUZsb3dJbnNwZWN0aW9uOworaW1wb3J0IGNvbS5pbnRlbGxpai50ZXN0RnJhbWV3b3JrLkluc3BlY3Rpb25UZXN0Q2FzZTsKKworLyoqCisgKiBAYXV0aG9yIG1heAorICogQHNpbmNlIEFwciAxMSwgMjAwMgorICovCitwdWJsaWMgY2xhc3MgRGF0YUZsb3dJbnNwZWN0aW9uQW5jaWVudFRlc3QgZXh0ZW5kcyBJbnNwZWN0aW9uVGVzdENhc2UgeworICBAT3ZlcnJpZGUKKyAgcHJvdGVjdGVkIFN0cmluZyBnZXRUZXN0RGF0YVBhdGgoKSB7CisgICAgcmV0dXJuIEphdmFUZXN0VXRpbC5nZXRKYXZhVGVzdERhdGFQYXRoKCkgKyAiL2luc3BlY3Rpb24iOworICB9CisKKyAgcHJpdmF0ZSB2b2lkIGRvVGVzdCgpIHsKKyAgICBkb1Rlc3QoZmFsc2UpOworICB9CisgIHByaXZhdGUgdm9pZCBkb1Rlc3QoYm9vbGVhbiBsb3dlcmNhc2UpIHsKKyAgICBkb1Rlc3QoImRhdGFGbG93LyIgKyBnZXRUZXN0TmFtZShsb3dlcmNhc2UpLCBuZXcgRGF0YUZsb3dJbnNwZWN0aW9uKCkpOworICB9CisKKyAgcHJpdmF0ZSB2b2lkIGRvVGVzdDE1KCkgeworICAgIGRvVGVzdDE1KGZhbHNlKTsKKyAgfQorICBwcml2YXRlIHZvaWQgZG9UZXN0MTUoYm9vbGVhbiBsb3dlcmNhc2UpIHsKKyAgICBkb1Rlc3QoImRhdGFGbG93LyIgKyBnZXRUZXN0TmFtZShsb3dlcmNhc2UpLCBuZXcgRGF0YUZsb3dJbnNwZWN0aW9uKCksICJqYXZhIDEuNSIpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdE5wZTEoKSB7IGRvVGVzdCh0cnVlKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0Q2FzZUFuZE5wZSgpIHsgZG9UZXN0KHRydWUpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RDY2UoKSB7IGRvVGVzdCh0cnVlKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0RXhjZXB0aW9uQ0ZHKCkgeyBkb1Rlc3QodHJ1ZSk7IH0KKyAgcHVibGljIHZvaWQgdGVzdEluc3QoKSB7IGRvVGVzdCh0cnVlKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0V3JvbmdFcXVhbFR5cGVzKCkgeyBkb1Rlc3QodHJ1ZSk7IH0KKyAgcHVibGljIHZvaWQgdGVzdFNDUjEzNzAyKCkgeyBkb1Rlc3QoKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0U0NSMTM2MjYoKSB7IGRvVGVzdCgpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RTQ1IxMzg3MSgpIHsgZG9UZXN0KCk7IH0KKyAgcHVibGljIHZvaWQgdGVzdEluc3RhbmNlb2YoKSB7IGRvVGVzdCgpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RPckJ1ZygpIHsgZG9UZXN0KHRydWUpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RTQ1IxNDgxOSgpIHsgZG9UZXN0KCk7IH0KKyAgcHVibGljIHZvaWQgdGVzdFNDUjE0MzE0KCkgeyBkb1Rlc3QoKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0U0NSMTUxNjIoKSB7IGRvVGVzdCgpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RDYXRjaFBhcmFtZXRlckNhbnRCZU51bGwoKSB7IGRvVGVzdCgpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RYb3IoKSB7IGRvVGVzdCh0cnVlKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0R2VuZXJpY0luc3RhbmNlb2YoKSB7IGRvVGVzdCgpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RUaGlzSW5zdGFuY2VvZigpIHsgZG9UZXN0KHRydWUpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RBbmRFcSgpIHsgZG9UZXN0KHRydWUpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3ROdWxsYWJsZUZpZWxkKCkgeyBkb1Rlc3QodHJ1ZSk7IH0KKyAgcHVibGljIHZvaWQgdGVzdFNDUjM5OTUwKCkgeyBkb1Rlc3QoKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0U2NySURFQTEoKSB7IGRvVGVzdCh0cnVlKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0U0NSMTgxODYoKSB7IGRvVGVzdCgpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RDb25zdGFudEV4cHIoKSB7IGRvVGVzdCh0cnVlKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0SURFQURFVjc0NTE4KCkgeyBkb1Rlc3QoKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0SURFQURFVjc0NTE4XzIoKSB7IGRvVGVzdCgpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RJREVBREVWNzc4MTkoKSB7IGRvVGVzdCgpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RJREVBREVWNzgzNzAoKSB7IGRvVGVzdCgpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RSZWdyZXNzaW9uQnlQdGkoKSB7IGRvVGVzdCgpOyB9CisKKyAgcHVibGljIHZvaWQgdGVzdE5vdE51bGxhYmxlKCkgeyBkb1Rlc3QxNSgpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3ROb3ROdWxsYWJsZVBhcmFtZXRlcigpIHsgZG9UZXN0MTUoKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0Tm90TnVsbGFibGVQYXJhbWV0ZXIyKCkgeyBkb1Rlc3QxNSgpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3ROdWxsYWJsZSgpIHsgZG9UZXN0MTUoKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0TnVsbGFibGVUaHJvdWdoQ2FzdCgpIHsgZG9UZXN0MTUoKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0TnVsbGFibGVQcm9ibGVtVGhyb3VnaENhc3QoKSB7IGRvVGVzdDE1KCk7IH0KKyAgcHVibGljIHZvaWQgdGVzdE51bGxhYmxlVGhyb3VnaFZhcmlhYmxlKCkgeyBkb1Rlc3QxNSgpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3ROdWxsYWJsZVRocm91Z2hWYXJpYWJsZVNob3VsZE5vdEJlUmVwb3J0ZWQoKSB7IGRvVGVzdDE1KCk7IH0KKyAgcHVibGljIHZvaWQgdGVzdE51bGxhYmxlQXNzaWdubWVudCgpIHsgZG9UZXN0MTUoKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0TnVsbGFibGVMb2NhbFZhcmlhYmxlKCkgeyBkb1Rlc3QxNSgpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3ROb3ROdWxsTG9jYWxWYXJpYWJsZSgpIHsgZG9UZXN0MTUoKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0TnVsbGFibGVSZXR1cm4oKSB7IGRvVGVzdDE1KCk7IH0KKyAgcHVibGljIHZvaWQgdGVzdE51bGxhYmxlUmV0dXJuMSgpIHsgZG9UZXN0MTUoKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0RmluYWxGaWVsZHMoKSB7IGRvVGVzdDE1KHRydWUpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3ROb3ROdWxsQXJyYXkoKSB7IGRvVGVzdDE1KCk7IH0KKyAgcHVibGljIHZvaWQgdGVzdEZpZWxkc0ZsYXNoaW5nKCkgeyBkb1Rlc3QxNSgpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RDb25kaXRpb25GYWxzZUFuZE5QRSgpIHsgZG9UZXN0MTUoKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0SURFQURFVjE1NzUoKSB7IGRvVGVzdDE1KCk7IH0KKyAgcHVibGljIHZvaWQgdGVzdEFsZXhCdWcoKSB7IGRvVGVzdDE1KCk7IH0KKyAgcHVibGljIHZvaWQgdGVzdFlvbGVCdWcoKSB7IGRvVGVzdDE1KCk7IH0KKyAgcHVibGljIHZvaWQgdGVzdEZvcmVhY2hGbG93KCkgeyBkb1Rlc3QxNSgpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RGb3JFYWNoTlBFKCkgeyBkb1Rlc3QxNSgpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RBcnJheUFjY2Vzc05QRSgpIHsgZG9UZXN0MTUoKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0QXJyYXlBY2Nlc3NEb2VzbnRDYW5jZWxBbmFseXNpcygpIHsgZG9UZXN0MTUoKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0Q29tcGlsZVRpbWVDb25zdCgpIHsgZG9UZXN0MTUodHJ1ZSk7IH0KKyAgcHVibGljIHZvaWQgdGVzdEF1dG9ib3hpbmcoKSB7IGRvVGVzdDE1KHRydWUpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RVbmJveGluZ05QRSgpIHsgZG9UZXN0MTUodHJ1ZSk7IH0KKyAgcHVibGljIHZvaWQgdGVzdFN0cmFuZ2VBcnJheUluZGV4T3V0T2ZCb3VuZHMoKSB7IGRvVGVzdDE1KCk7IH0KKyAgcHVibGljIHZvaWQgdGVzdElERUFERVYyNjA1KCkgeyBkb1Rlc3QxNSgpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RDb25zdGFudHNEaWZmZXJlbnRUeXBlcygpIHsgZG9UZXN0MTUoKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0Qm94aW5nTmFOKCkgeyBkb1Rlc3QxNSgpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RCb3hpbmdCb29sZWFuKCkgeyBkb1Rlc3QxNSh0cnVlKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0Q2hlY2tlZEV4Y2VwdGlvbkRvbWluYW5jZSgpIHsgZG9UZXN0MTUoKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0SURFQURFVjEwNDg5KCkgeyBkb1Rlc3QxNSgpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RQbHVzT25TdHJpbmdzKCkgeyBkb1Rlc3QxNSgpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RTd2l0Y2hRdWFsaWZpZXJQcm9kdWNlc05QRSgpIHtkb1Rlc3QxNSgpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RJREVBREVWMTU1ODMoKSB7ZG9UZXN0MTUoKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0SURFQURFVjEzMTUzKCkgeyBkb1Rlc3QxNSgpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RJREVBREVWMTMxNTYoKSB7IGRvVGVzdDE1KCk7IH0KKyAgcHVibGljIHZvaWQgdGVzdFN3aXRjaEVudW1DYXNlcygpIHsgZG9UZXN0MTUoKTsgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RTQ1IxNTQwNigpIHsgZG9UZXN0KCk7IH0KKyAgLy9wdWJsaWMgdm9pZCB0ZXN0SURFQURFVjExMDMzKCkgeyBkb1Rlc3QxNSgpOyB9ICAvLyBhZGRlZCBieSBtYXgsIDIwMDcKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9jb2RlSW5zcGVjdGlvbi9EYXRhRmxvd0luc3BlY3Rpb25GaXh0dXJlVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNwZWN0aW9uL0RhdGFGbG93SW5zcGVjdGlvbkZpeHR1cmVUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjAwYjgyMgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9jb2RlSW5zcGVjdGlvbi9EYXRhRmxvd0luc3BlY3Rpb25GaXh0dXJlVGVzdC5qYXZhCkBAIC0wLDAgKzEsMTYwIEBACisvKgorICogQ29weXJpZ2h0IDIwMDAtMjAxMiBKZXRCcmFpbnMgcy5yLm8uCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworcGFja2FnZSBjb20uaW50ZWxsaWouY29kZUluc3BlY3Rpb247CisKK2ltcG9ydCBjb20uaW50ZWxsaWouSmF2YVRlc3RVdGlsOworaW1wb3J0IGNvbS5pbnRlbGxpai5jb2RlSW5zaWdodC5OdWxsYWJsZU5vdE51bGxNYW5hZ2VyOworaW1wb3J0IGNvbS5pbnRlbGxpai5jb2RlSW5zcGVjdGlvbi5kYXRhRmxvdy5EYXRhRmxvd0luc3BlY3Rpb247CitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkuRGlzcG9zYWJsZTsKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS51dGlsLkRpc3Bvc2VyOworaW1wb3J0IGNvbS5pbnRlbGxpai5wb20uamF2YS5MYW5ndWFnZUxldmVsOworaW1wb3J0IGNvbS5pbnRlbGxpai50ZXN0RnJhbWV3b3JrLmJ1aWxkZXJzLkphdmFNb2R1bGVGaXh0dXJlQnVpbGRlcjsKK2ltcG9ydCBjb20uaW50ZWxsaWoudGVzdEZyYW1ld29yay5maXh0dXJlcy5KYXZhQ29kZUluc2lnaHRGaXh0dXJlVGVzdENhc2U7CisKKy8qKgorICogQGF1dGhvciBwZXRlcgorICovCitwdWJsaWMgY2xhc3MgRGF0YUZsb3dJbnNwZWN0aW9uRml4dHVyZVRlc3QgZXh0ZW5kcyBKYXZhQ29kZUluc2lnaHRGaXh0dXJlVGVzdENhc2UgeworICBAT3ZlcnJpZGUKKyAgcHJvdGVjdGVkIHZvaWQgdHVuZUZpeHR1cmUoSmF2YU1vZHVsZUZpeHR1cmVCdWlsZGVyIG1vZHVsZUJ1aWxkZXIpIHsKKyAgICBtb2R1bGVCdWlsZGVyLnNldExhbmd1YWdlTGV2ZWwoTGFuZ3VhZ2VMZXZlbC5ISUdIRVNUKTsKKyAgfQorCisgIEBPdmVycmlkZQorICBwcm90ZWN0ZWQgU3RyaW5nIGdldFRlc3REYXRhUGF0aCgpIHsKKyAgICByZXR1cm4gSmF2YVRlc3RVdGlsLmdldEphdmFUZXN0RGF0YVBhdGgoKSArICIvaW5zcGVjdGlvbi9kYXRhRmxvdy9maXh0dXJlLyI7CisgIH0KKworICBwcml2YXRlIHZvaWQgZG9UZXN0KCkgeworICAgIGZpbmFsIERhdGFGbG93SW5zcGVjdGlvbiBpbnNwZWN0aW9uID0gbmV3IERhdGFGbG93SW5zcGVjdGlvbigpOworICAgIGluc3BlY3Rpb24uU1VHR0VTVF9OVUxMQUJMRV9BTk5PVEFUSU9OUyA9IHRydWU7CisgICAgbXlGaXh0dXJlLmVuYWJsZUluc3BlY3Rpb25zKGluc3BlY3Rpb24pOworICAgIG15Rml4dHVyZS50ZXN0SGlnaGxpZ2h0aW5nKHRydWUsIGZhbHNlLCB0cnVlLCBnZXRUZXN0TmFtZShmYWxzZSkgKyAiLmphdmEiKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RUcnlJbkFub255bW91cygpIHRocm93cyBUaHJvd2FibGUgeyBkb1Rlc3QoKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0TnVsbGFibGVBbm9ueW1vdXNNZXRob2QoKSB0aHJvd3MgVGhyb3dhYmxlIHsgZG9UZXN0KCk7IH0KKyAgcHVibGljIHZvaWQgdGVzdE51bGxhYmxlQW5vbnltb3VzUGFyYW1ldGVyKCkgdGhyb3dzIFRocm93YWJsZSB7IGRvVGVzdCgpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3ROdWxsYWJsZUFub255bW91c1ZvbGF0aWxlKCkgdGhyb3dzIFRocm93YWJsZSB7IGRvVGVzdCgpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3ROdWxsYWJsZUFub255bW91c1ZvbGF0aWxlTm90TnVsbCgpIHRocm93cyBUaHJvd2FibGUgeyBkb1Rlc3QoKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0TG9jYWxDbGFzcygpIHRocm93cyBUaHJvd2FibGUgeyBkb1Rlc3QoKTsgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RGaWVsZEluQW5vbnltb3VzKCkgdGhyb3dzIFRocm93YWJsZSB7IGRvVGVzdCgpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RGaWVsZEluaXRpYWxpemVySW5Bbm9ueW1vdXMoKSB0aHJvd3MgVGhyb3dhYmxlIHsgZG9UZXN0KCk7IH0KKyAgcHVibGljIHZvaWQgdGVzdE51bGxhYmxlRmllbGQoKSB0aHJvd3MgVGhyb3dhYmxlIHsgZG9UZXN0KCk7IH0KKyAgcHVibGljIHZvaWQgdGVzdENhbkJlTnVsbERvZXNudEltcGx5SXNOdWxsKCkgdGhyb3dzIFRocm93YWJsZSB7IGRvVGVzdCgpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RBbm5SZXBvcnQoKSB0aHJvd3MgVGhyb3dhYmxlIHsgZG9UZXN0KCk7IH0KKworICBwdWJsaWMgdm9pZCB0ZXN0QmlnTWV0aG9kTm90Q29tcGxleCgpIHRocm93cyBUaHJvd2FibGUgeyBkb1Rlc3QoKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0QnVpbGRSZWdleHBOb3RDb21wbGV4KCkgdGhyb3dzIFRocm93YWJsZSB7IGRvVGVzdCgpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RUZXJuYXJ5SW5XaGlsZU5vdENvbXBsZXgoKSB0aHJvd3MgVGhyb3dhYmxlIHsgZG9UZXN0KCk7IH0KKyAgcHVibGljIHZvaWQgdGVzdFRyeUNhdGNoSW5Gb3JOb3RDb21wbGV4KCkgdGhyb3dzIFRocm93YWJsZSB7IGRvVGVzdCgpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RGaWVsZENoYW5nZWRCZXR3ZWVuU3luY2hyb25pemVkQmxvY2tzKCkgdGhyb3dzIFRocm93YWJsZSB7IGRvVGVzdCgpOyB9CisKKyAgcHVibGljIHZvaWQgdGVzdEdlbmVyYXRlZEVxdWFscygpIHRocm93cyBUaHJvd2FibGUgeyBkb1Rlc3QoKTsgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RJREVBODQ0ODkoKSB0aHJvd3MgVGhyb3dhYmxlIHsgZG9UZXN0KCk7IH0KKyAgcHVibGljIHZvaWQgdGVzdENvbXBhcmluZ1RvTm90TnVsbFNob3VsZE5vdEFmZmVjdE51bGxpdHkoKSB0aHJvd3MgVGhyb3dhYmxlIHsgZG9UZXN0KCk7IH0KKyAgcHVibGljIHZvaWQgdGVzdFN0cmluZ1Rlcm5hcnlBbHdheXNUcnVlKCkgdGhyb3dzIFRocm93YWJsZSB7IGRvVGVzdCgpOyB9CisKKyAgcHVibGljIHZvaWQgdGVzdEJveGluZzEyOCgpIHRocm93cyBUaHJvd2FibGUgeyBkb1Rlc3QoKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0RmluYWxGaWVsZHNJbml0aWFsaXplZEJ5QW5ub3RhdGVkUGFyYW1ldGVycygpIHRocm93cyBUaHJvd2FibGUgeyBkb1Rlc3QoKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0TXVsdGlDYXRjaCgpIHRocm93cyBUaHJvd2FibGUgeyBkb1Rlc3QoKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0Q29udGludWVGbHVzaGVzTG9vcFZhcmlhYmxlKCkgdGhyb3dzIFRocm93YWJsZSB7IGRvVGVzdCgpOyB9CisKKyAgcHVibGljIHZvaWQgdGVzdEVxdWFsc05vdE51bGwoKSB0aHJvd3MgVGhyb3dhYmxlIHsgZG9UZXN0KCk7IH0KKyAgcHVibGljIHZvaWQgdGVzdFZpc2l0RmluYWxseU9uY2UoKSB0aHJvd3MgVGhyb3dhYmxlIHsgZG9UZXN0KCk7IH0KKyAgcHVibGljIHZvaWQgdGVzdE5vdEVxdWFsc0RvZXNudEltcGx5Tm90TnVsbGl0eSgpIHRocm93cyBUaHJvd2FibGUgeyBkb1Rlc3QoKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0RXF1YWxzRW51bUNvbnN0YW50KCkgdGhyb3dzIFRocm93YWJsZSB7IGRvVGVzdCgpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RFcXVhbHNDb25zdGFudCgpIHRocm93cyBUaHJvd2FibGUgeyBkb1Rlc3QoKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0RmluYWxMb29wVmFyaWFibGVJbnN0YW5jZW9mKCkgdGhyb3dzIFRocm93YWJsZSB7IGRvVGVzdCgpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RHcmVhdGVySXNOb3RFcXVhbHMoKSB0aHJvd3MgVGhyb3dhYmxlIHsgZG9UZXN0KCk7IH0KKyAgcHVibGljIHZvaWQgdGVzdE5vdEdyZWF0ZXJJc05vdEVxdWFscygpIHRocm93cyBUaHJvd2FibGUgeyBkb1Rlc3QoKTsgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RDaGFpbmVkRmluYWxGaWVsZHNEZmEoKSB0aHJvd3MgVGhyb3dhYmxlIHsgZG9UZXN0KCk7IH0KKyAgcHVibGljIHZvaWQgdGVzdEZpbmFsRmllbGRzRGlmZmVyZW50SW5zdGFuY2VzKCkgdGhyb3dzIFRocm93YWJsZSB7IGRvVGVzdCgpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RUaGlzRmllbGRHZXR0ZXJzKCkgdGhyb3dzIFRocm93YWJsZSB7IGRvVGVzdCgpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RDaGFpbmVkRmluYWxGaWVsZEFjY2Vzc29yc0RmYSgpIHRocm93cyBUaHJvd2FibGUgeyBkb1Rlc3QoKTsgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RBc3NpZ25pbmdVbmtub3duVG9OdWxsYWJsZSgpIHRocm93cyBUaHJvd2FibGUgeyBkb1Rlc3QoKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0QXNzaWduaW5nQ2xhc3NMaXRlcmFsVG9OdWxsYWJsZSgpIHRocm93cyBUaHJvd2FibGUgeyBkb1Rlc3QoKTsgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RTeW5jaHJvbml6aW5nT25OdWxsYWJsZSgpIHRocm93cyBUaHJvd2FibGUgeyBkb1Rlc3QoKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0UmV0dXJuaW5nTnVsbEZyb21Wb2lkTWV0aG9kKCkgdGhyb3dzIFRocm93YWJsZSB7IGRvVGVzdCgpOyB9CisKKyAgcHVibGljIHZvaWQgdGVzdENhdGNoUnVudGltZUV4Y2VwdGlvbigpIHRocm93cyBUaHJvd2FibGUgeyBkb1Rlc3QoKTsgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RBc3NlcnRGYWlsSW5DYXRjaCgpIHRocm93cyBUaHJvd2FibGUgeworICAgIG15Rml4dHVyZS5hZGRDbGFzcygicGFja2FnZSBvcmcuanVuaXQ7IHB1YmxpYyBjbGFzcyBBc3NlcnQgeyBwdWJsaWMgc3RhdGljIHZvaWQgZmFpbCgpIHt9fSIpOworICAgIGRvVGVzdCgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFByZXNlcnZlTnVsbGFibGVPblVuY2hlY2tlZENhc3QoKSB0aHJvd3MgVGhyb3dhYmxlIHsgZG9UZXN0KCk7IH0KKworICBwdWJsaWMgdm9pZCB0ZXN0UGFzc2luZ051bGxhYmxlSW50b1ZhcmFyZygpIHRocm93cyBUaHJvd2FibGUgeyBkb1Rlc3QoKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0RXF1YWxzSW1wbGllc05vdE51bGwoKSB0aHJvd3MgVGhyb3dhYmxlIHsgZG9UZXN0KCk7IH0KKworICBwdWJsaWMgdm9pZCB0ZXN0QW5ub3RhdGVkVHlwZVBhcmFtZXRlcnMoKSB0aHJvd3MgVGhyb3dhYmxlIHsKKyAgICBzZXR1cEN1c3RvbUFubm90YXRpb25zKCk7CisgICAgZG9UZXN0KCk7CisgIH0KKworICBwcml2YXRlIHZvaWQgc2V0dXBDdXN0b21Bbm5vdGF0aW9ucygpIHsKKyAgICBteUZpeHR1cmUuYWRkQ2xhc3MoInBhY2thZ2UgZm9vOyBwdWJsaWMgQGludGVyZmFjZSBOdWxsYWJsZSB7fSIpOworICAgIG15Rml4dHVyZS5hZGRDbGFzcygicGFja2FnZSBmb287IHB1YmxpYyBAaW50ZXJmYWNlIE5vdE51bGwge30iKTsKKyAgICBmaW5hbCBOdWxsYWJsZU5vdE51bGxNYW5hZ2VyIG5ubk1hbmFnZXIgPSBOdWxsYWJsZU5vdE51bGxNYW5hZ2VyLmdldEluc3RhbmNlKGdldFByb2plY3QoKSk7CisgICAgbm5uTWFuYWdlci5zZXROb3ROdWxscygiZm9vLk5vdE51bGwiKTsKKyAgICBubm5NYW5hZ2VyLnNldE51bGxhYmxlcygiZm9vLk51bGxhYmxlIik7CisgICAgRGlzcG9zZXIucmVnaXN0ZXIobXlUZXN0Um9vdERpc3Bvc2FibGUsIG5ldyBEaXNwb3NhYmxlKCkgeworICAgICAgQE92ZXJyaWRlCisgICAgICBwdWJsaWMgdm9pZCBkaXNwb3NlKCkgeworICAgICAgICBubm5NYW5hZ2VyLnNldE5vdE51bGxzKCk7CisgICAgICAgIG5ubk1hbmFnZXIuc2V0TnVsbGFibGVzKCk7CisgICAgICB9CisgICAgfSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0U2tpcEFzc2VydGlvbnMoKSB7CisgICAgZmluYWwgRGF0YUZsb3dJbnNwZWN0aW9uIGluc3BlY3Rpb24gPSBuZXcgRGF0YUZsb3dJbnNwZWN0aW9uKCk7CisgICAgaW5zcGVjdGlvbi5ET05UX1JFUE9SVF9UUlVFX0FTU0VSVF9TVEFURU1FTlRTID0gdHJ1ZTsKKyAgICBteUZpeHR1cmUuZW5hYmxlSW5zcGVjdGlvbnMoaW5zcGVjdGlvbik7CisgICAgbXlGaXh0dXJlLnRlc3RIaWdobGlnaHRpbmcodHJ1ZSwgZmFsc2UsIHRydWUsIGdldFRlc3ROYW1lKGZhbHNlKSArICIuamF2YSIpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdENoZWNrRmllbGRJbml0aWFsaXplcnMoKSB7CisgICAgZG9UZXN0KCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0Q29uc3RhbnREb3VibGVDb21wYXJpc29ucygpIHsgZG9UZXN0KCk7IH0KKyAgCisgIHB1YmxpYyB2b2lkIF90ZXN0TXV0YWJsZU51bGxhYmxlRmllbGRzVHJlYXRtZW50KCkgeyBkb1Rlc3QoKTsgfQorICBwdWJsaWMgdm9pZCBfdGVzdE11dGFibGVWb2xhdGlsZU51bGxhYmxlRmllbGRzVHJlYXRtZW50KCkgeyBkb1Rlc3QoKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0TXV0YWJsZU5vdEFubm90YXRlZEZpZWxkc1RyZWF0bWVudCgpIHsgZG9UZXN0KCk7IH0KKworICBwdWJsaWMgdm9pZCB0ZXN0TWV0aG9kQ2FsbEZsdXNoZXNGaWVsZCgpIHsgZG9UZXN0KCk7IH0KKyAgcHVibGljIHZvaWQgdGVzdFVua25vd25GbG9hdE1heUJlTmFOKCkgeyBkb1Rlc3QoKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0TGFzdENvbnN0YW50Q29uZGl0aW9uSW5BbmQoKSB7IGRvVGVzdCgpOyB9CisKKyAgcHVibGljIHZvaWQgdGVzdFRyYW5zaWVudEZpbmFsRmllbGQoKSB7IGRvVGVzdCgpOyB9CisgIHB1YmxpYyB2b2lkIF90ZXN0U3ltbWV0cmljVW5jaGVja2VkQ2FzdCgpIHsgZG9UZXN0KCk7IH0KKyAgcHVibGljIHZvaWQgdGVzdE51bGxDaGVja0RvZXNudEFmZmVjdFVuY2hlY2tlZENhc3QoKSB7IGRvVGVzdCgpOyB9CisKKyAgcHVibGljIHZvaWQgdGVzdE51bGxhYmxlRm9yZWFjaFZhcmlhYmxlKCkgeworICAgIHNldHVwQ3VzdG9tQW5ub3RhdGlvbnMoKTsKKyAgICBkb1Rlc3QoKTsKKyAgfQorCit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovY29kZUluc3BlY3Rpb24vRGF0YUZsb3dJbnNwZWN0aW9uVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNwZWN0aW9uL0RhdGFGbG93SW5zcGVjdGlvblRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ODBkOTU1Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNwZWN0aW9uL0RhdGFGbG93SW5zcGVjdGlvblRlc3QuamF2YQpAQCAtMCwwICsxLDM2IEBACisvKgorICogQ29weXJpZ2h0IDIwMDAtMjAxMiBKZXRCcmFpbnMgcy5yLm8uCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworcGFja2FnZSBjb20uaW50ZWxsaWouY29kZUluc3BlY3Rpb247CisKK2ltcG9ydCBjb20uaW50ZWxsaWouY29kZUluc2lnaHQuZGFlbW9uLkxpZ2h0RGFlbW9uQW5hbHl6ZXJUZXN0Q2FzZTsKK2ltcG9ydCBjb20uaW50ZWxsaWouY29kZUluc3BlY3Rpb24uZGF0YUZsb3cuRGF0YUZsb3dJbnNwZWN0aW9uOworaW1wb3J0IG9yZy5qZXRicmFpbnMuYW5ub3RhdGlvbnMuTm9uTmxzOworCitwdWJsaWMgY2xhc3MgRGF0YUZsb3dJbnNwZWN0aW9uVGVzdCBleHRlbmRzIExpZ2h0RGFlbW9uQW5hbHl6ZXJUZXN0Q2FzZSB7CisgIEBOb25ObHMgc3RhdGljIGZpbmFsIFN0cmluZyBCQVNFX1BBVEggPSAiL2luc3BlY3Rpb24vZGF0YUZsb3ciOworCisgIHByaXZhdGUgdm9pZCBkb1Rlc3QoKSB7CisgICAgZG9UZXN0KEJBU0VfUEFUSCArICIvIiArIGdldFRlc3ROYW1lKGZhbHNlKSArICIuamF2YSIsIHRydWUsIGZhbHNlKTsKKyAgfQorCisgIEBPdmVycmlkZQorICBwcm90ZWN0ZWQgTG9jYWxJbnNwZWN0aW9uVG9vbFtdIGNvbmZpZ3VyZUxvY2FsSW5zcGVjdGlvblRvb2xzKCkgeworICAgIHJldHVybiBuZXcgTG9jYWxJbnNwZWN0aW9uVG9vbFtde25ldyBEYXRhRmxvd0luc3BlY3Rpb24oKX07CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0VHJ5V2l0aFJlc291cmNlc051bGxhYmlsaXR5KCkgeyBkb1Rlc3QoKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0VHJ5V2l0aFJlc291cmNlc0luc3RhbmNlT2YoKSB7IGRvVGVzdCgpOyB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovY29kZUluc3BlY3Rpb24vRGF0YUZsb3dJbnNwZWN0aW9uVGVzdFN1aXRlLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovY29kZUluc3BlY3Rpb24vRGF0YUZsb3dJbnNwZWN0aW9uVGVzdFN1aXRlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDdkMmJmNAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9jb2RlSW5zcGVjdGlvbi9EYXRhRmxvd0luc3BlY3Rpb25UZXN0U3VpdGUuamF2YQpAQCAtMCwwICsxLDMxIEBACisvKgorICogQ29weXJpZ2h0IDIwMDAtMjAxMiBKZXRCcmFpbnMgcy5yLm8uCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworcGFja2FnZSBjb20uaW50ZWxsaWouY29kZUluc3BlY3Rpb247CisKK2ltcG9ydCBjb20uaW50ZWxsaWouY29kZUluc2lnaHQuc2xpY2UuU2xpY2VUcmVlVGVzdDsKK2ltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKK2ltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdFN1aXRlOworCitwdWJsaWMgY2xhc3MgRGF0YUZsb3dJbnNwZWN0aW9uVGVzdFN1aXRlIHsKKyAgcHVibGljIHN0YXRpYyBUZXN0IHN1aXRlKCkgeworICAgIFRlc3RTdWl0ZSBzdWl0ZSA9IG5ldyBUZXN0U3VpdGUoKTsKKyAgICBzdWl0ZS5hZGRUZXN0U3VpdGUoRGF0YUZsb3dJbnNwZWN0aW9uVGVzdC5jbGFzcyk7CisgICAgc3VpdGUuYWRkVGVzdFN1aXRlKERhdGFGbG93SW5zcGVjdGlvbkZpeHR1cmVUZXN0LmNsYXNzKTsKKyAgICBzdWl0ZS5hZGRUZXN0U3VpdGUoRGF0YUZsb3dJbnNwZWN0aW9uQW5jaWVudFRlc3QuY2xhc3MpOworICAgIHN1aXRlLmFkZFRlc3RTdWl0ZShTbGljZVRyZWVUZXN0LmNsYXNzKTsKKyAgICByZXR1cm4gc3VpdGU7CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9jb2RlSW5zcGVjdGlvbi9EZWZVc2VUZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovY29kZUluc3BlY3Rpb24vRGVmVXNlVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlkZDA5MGIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovY29kZUluc3BlY3Rpb24vRGVmVXNlVGVzdC5qYXZhCkBAIC0wLDAgKzEsNDMgQEAKK3BhY2thZ2UgY29tLmludGVsbGlqLmNvZGVJbnNwZWN0aW9uOworCitpbXBvcnQgY29tLmludGVsbGlqLkphdmFUZXN0VXRpbDsKK2ltcG9ydCBjb20uaW50ZWxsaWouY29kZUluc3BlY3Rpb24uZGVmVXNlLkRlZlVzZUluc3BlY3Rpb247CitpbXBvcnQgY29tLmludGVsbGlqLnRlc3RGcmFtZXdvcmsuSW5zcGVjdGlvblRlc3RDYXNlOworCitwdWJsaWMgY2xhc3MgRGVmVXNlVGVzdCBleHRlbmRzIEluc3BlY3Rpb25UZXN0Q2FzZSB7CisgIEBPdmVycmlkZQorICBwcm90ZWN0ZWQgU3RyaW5nIGdldFRlc3REYXRhUGF0aCgpIHsKKyAgICByZXR1cm4gSmF2YVRlc3RVdGlsLmdldEphdmFUZXN0RGF0YVBhdGgoKSArICIvaW5zcGVjdGlvbiI7CisgIH0KKworICBwcml2YXRlIHZvaWQgZG9UZXN0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KCJkZWZVc2UvIiArIGdldFRlc3ROYW1lKGZhbHNlKSwgbmV3IERlZlVzZUluc3BlY3Rpb24oKSk7CisgIH0KKworCisgIHB1YmxpYyB2b2lkIHRlc3RTQ1I1MTQ0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0U0NSNjg0MygpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdCgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdHVudXNlZFZhcmlhYmxlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0YXJyYXlJbmRleFVzYWdlcygpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdCgpOworICB9CisKKyAgLy8gVE9ETzoKKyAgcHVibGljIHZvaWQgdGVzdFNDUjI4MDE5KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0U0NSNDAzNjQoKSB0aHJvd3MgRXhjZXB0aW9uIHsgZG9UZXN0KCk7IH0KKyAgcHVibGljIHZvaWQgdGVzdEFycmF5TGVuZ3RoKCkgdGhyb3dzIEV4Y2VwdGlvbiB7IGRvVGVzdCgpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RVc2VkSW5BcnJheUluaXRpYWxpemVyKCkgdGhyb3dzIEV4Y2VwdGlvbiB7IGRvVGVzdCgpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RIYW5nKCkgdGhyb3dzIEV4Y2VwdGlvbiB7IGRvVGVzdCgpOyB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovY29kZUluc3BlY3Rpb24vRGVmYXVsdEZpbGVUZW1wbGF0ZUluc3BlY3Rpb25UZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovY29kZUluc3BlY3Rpb24vRGVmYXVsdEZpbGVUZW1wbGF0ZUluc3BlY3Rpb25UZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGJmZDdlMAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9jb2RlSW5zcGVjdGlvbi9EZWZhdWx0RmlsZVRlbXBsYXRlSW5zcGVjdGlvblRlc3QuamF2YQpAQCAtMCwwICsxLDMwIEBACitwYWNrYWdlIGNvbS5pbnRlbGxpai5jb2RlSW5zcGVjdGlvbjsKKworaW1wb3J0IGNvbS5pbnRlbGxpai5KYXZhVGVzdFV0aWw7CitpbXBvcnQgY29tLmludGVsbGlqLmNvZGVJbnNwZWN0aW9uLmRlZmF1bHRGaWxlVGVtcGxhdGVVc2FnZS5EZWZhdWx0RmlsZVRlbXBsYXRlVXNhZ2VJbnNwZWN0aW9uOworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLnByb2plY3RSb290cy5TZGs7CitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkucm9vdHMuTGFuZ3VhZ2VMZXZlbFByb2plY3RFeHRlbnNpb247CitpbXBvcnQgY29tLmludGVsbGlqLnBvbS5qYXZhLkxhbmd1YWdlTGV2ZWw7CitpbXBvcnQgY29tLmludGVsbGlqLnRlc3RGcmFtZXdvcmsuSW5zcGVjdGlvblRlc3RDYXNlOworCitwdWJsaWMgY2xhc3MgRGVmYXVsdEZpbGVUZW1wbGF0ZUluc3BlY3Rpb25UZXN0IGV4dGVuZHMgSW5zcGVjdGlvblRlc3RDYXNlIHsKKyAgQE92ZXJyaWRlCisgIHByb3RlY3RlZCBTZGsgZ2V0VGVzdFByb2plY3RTZGsoKSB7CisgICAgZmluYWwgU2RrIHNkayA9IHN1cGVyLmdldFRlc3RQcm9qZWN0U2RrKCk7CisgICAgTGFuZ3VhZ2VMZXZlbFByb2plY3RFeHRlbnNpb24uZ2V0SW5zdGFuY2UoZ2V0UHJvamVjdCgpKS5zZXRMYW5ndWFnZUxldmVsKExhbmd1YWdlTGV2ZWwuSkRLXzFfNyk7CisgICAgcmV0dXJuIHNkazsKKyAgfQorCisgIEBPdmVycmlkZQorICBwcm90ZWN0ZWQgU3RyaW5nIGdldFRlc3REYXRhUGF0aCgpIHsKKyAgICByZXR1cm4gSmF2YVRlc3RVdGlsLmdldEphdmFUZXN0RGF0YVBhdGgoKSArICIvaW5zcGVjdGlvbiI7CisgIH0KKworICBwcml2YXRlIHZvaWQgZG9UZXN0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KCJkZWZhdWx0RmlsZVRlbXBsYXRlVXNhZ2UvIiArIGdldFRlc3ROYW1lKHRydWUpLCBuZXcgRGVmYXVsdEZpbGVUZW1wbGF0ZVVzYWdlSW5zcGVjdGlvbigpKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3REZWZhdWx0RmlsZSgpIHRocm93cyBFeGNlcHRpb257CisgICAgZG9UZXN0KCk7CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9jb2RlSW5zcGVjdGlvbi9EZXByZWNhdGlvbkluc3BlY3Rpb25UZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovY29kZUluc3BlY3Rpb24vRGVwcmVjYXRpb25JbnNwZWN0aW9uVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQxYTgwMmQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovY29kZUluc3BlY3Rpb24vRGVwcmVjYXRpb25JbnNwZWN0aW9uVGVzdC5qYXZhCkBAIC0wLDAgKzEsNDggQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDAtMjAwNiBKZXRCcmFpbnMgcy5yLm8uIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKi8KKworcGFja2FnZSBjb20uaW50ZWxsaWouY29kZUluc3BlY3Rpb247CisKK2ltcG9ydCBjb20uaW50ZWxsaWouSmF2YVRlc3RVdGlsOworaW1wb3J0IGNvbS5pbnRlbGxpai5jb2RlSW5zcGVjdGlvbi5kZXByZWNhdGlvbi5EZXByZWNhdGlvbkluc3BlY3Rpb247CitpbXBvcnQgY29tLmludGVsbGlqLnRlc3RGcmFtZXdvcmsuSW5zcGVjdGlvblRlc3RDYXNlOworCisvKioKKyAqIEBhdXRob3IgbWF4CisgKi8KK3B1YmxpYyBjbGFzcyBEZXByZWNhdGlvbkluc3BlY3Rpb25UZXN0IGV4dGVuZHMgSW5zcGVjdGlvblRlc3RDYXNlIHsKKyAgQE92ZXJyaWRlCisgIHByb3RlY3RlZCBTdHJpbmcgZ2V0VGVzdERhdGFQYXRoKCkgeworICAgIHJldHVybiBKYXZhVGVzdFV0aWwuZ2V0SmF2YVRlc3REYXRhUGF0aCgpICsgIi9pbnNwZWN0aW9uIjsKKyAgfQorCisgIHByaXZhdGUgdm9pZCBkb1Rlc3QoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoImRlcHJlY2F0aW9uLyIgKyBnZXRUZXN0TmFtZSh0cnVlKSwgbmV3IERlcHJlY2F0aW9uSW5zcGVjdGlvbigpKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3REZXByZWNhdGVkTWV0aG9kKCkgdGhyb3dzIEV4Y2VwdGlvbnsKKyAgICBkb1Rlc3QoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3REZXByZWNhdGVkSW5JbXBvcnQoKSB0aHJvd3MgRXhjZXB0aW9ueworICAgIGRvVGVzdCgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdERlcHJlY2F0ZWRJbm5lcigpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdCgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdERlcHJlY2F0ZWRGaWVsZCgpIHRocm93cyBFeGNlcHRpb257CisgICAgZG9UZXN0KCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0RGVwcmVjYXRlZERlZmF1bHRDb25zdHJ1Y3RvckluU3VwZXIoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3REZXByZWNhdGVkRGVmYXVsdENvbnN0cnVjdG9ySW5TdXBlck5vdENhbGxlZCgpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdCgpOworICB9CisKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9jb2RlSW5zcGVjdGlvbi9EdXBsaWNhdGVUaHJvd3NJbnNwZWN0aW9uVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNwZWN0aW9uL0R1cGxpY2F0ZVRocm93c0luc3BlY3Rpb25UZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzFhNmViYgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9jb2RlSW5zcGVjdGlvbi9EdXBsaWNhdGVUaHJvd3NJbnNwZWN0aW9uVGVzdC5qYXZhCkBAIC0wLDAgKzEsMjAgQEAKK3BhY2thZ2UgY29tLmludGVsbGlqLmNvZGVJbnNwZWN0aW9uOworCitpbXBvcnQgY29tLmludGVsbGlqLkphdmFUZXN0VXRpbDsKK2ltcG9ydCBjb20uaW50ZWxsaWouY29kZUluc3BlY3Rpb24uZHVwbGljYXRlVGhyb3dzLkR1cGxpY2F0ZVRocm93c0luc3BlY3Rpb247CitpbXBvcnQgY29tLmludGVsbGlqLnRlc3RGcmFtZXdvcmsuSW5zcGVjdGlvblRlc3RDYXNlOworCitwdWJsaWMgY2xhc3MgRHVwbGljYXRlVGhyb3dzSW5zcGVjdGlvblRlc3QgZXh0ZW5kcyBJbnNwZWN0aW9uVGVzdENhc2UgeworICBAT3ZlcnJpZGUKKyAgcHJvdGVjdGVkIFN0cmluZyBnZXRUZXN0RGF0YVBhdGgoKSB7CisgICAgcmV0dXJuIEphdmFUZXN0VXRpbC5nZXRKYXZhVGVzdERhdGFQYXRoKCkgKyAiL2luc3BlY3Rpb24iOworICB9CisKKyAgcHJpdmF0ZSB2b2lkIGRvVGVzdCgpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdCgiZHVwbGljYXRlVGhyb3dzLyIgKyBnZXRUZXN0TmFtZSh0cnVlKSwgbmV3IER1cGxpY2F0ZVRocm93c0luc3BlY3Rpb24oKSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0U2ltcGxlKCkgdGhyb3dzIEV4Y2VwdGlvbnsKKyAgICBkb1Rlc3QoKTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNwZWN0aW9uL0VtcHR5TWV0aG9kVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNwZWN0aW9uL0VtcHR5TWV0aG9kVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRjOTI5ZjM0Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNwZWN0aW9uL0VtcHR5TWV0aG9kVGVzdC5qYXZhCkBAIC0wLDAgKzEsNTIgQEAKK3BhY2thZ2UgY29tLmludGVsbGlqLmNvZGVJbnNwZWN0aW9uOworCitpbXBvcnQgY29tLmludGVsbGlqLkphdmFUZXN0VXRpbDsKK2ltcG9ydCBjb20uaW50ZWxsaWouY29kZUluc3BlY3Rpb24uZW1wdHlNZXRob2QuRW1wdHlNZXRob2RJbnNwZWN0aW9uOworaW1wb3J0IGNvbS5pbnRlbGxpai50ZXN0RnJhbWV3b3JrLkluc3BlY3Rpb25UZXN0Q2FzZTsKKworLyoqCisgKiBAYXV0aG9yIG1heAorICovCitwdWJsaWMgY2xhc3MgRW1wdHlNZXRob2RUZXN0IGV4dGVuZHMgSW5zcGVjdGlvblRlc3RDYXNlIHsKKyAgQE92ZXJyaWRlCisgIHByb3RlY3RlZCBTdHJpbmcgZ2V0VGVzdERhdGFQYXRoKCkgeworICAgIHJldHVybiBKYXZhVGVzdFV0aWwuZ2V0SmF2YVRlc3REYXRhUGF0aCgpICsgIi9pbnNwZWN0aW9uIjsKKyAgfQorCisgIHByaXZhdGUgdm9pZCBkb1Rlc3QoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoZmFsc2UpOworICB9CisKKyAgcHJpdmF0ZSB2b2lkIGRvVGVzdChmaW5hbCBib29sZWFuIGNoZWNrUmFuZ2UpIHRocm93cyBFeGNlcHRpb24geworICAgIGZpbmFsIEVtcHR5TWV0aG9kSW5zcGVjdGlvbiB0b29sID0gbmV3IEVtcHR5TWV0aG9kSW5zcGVjdGlvbigpOworICAgIGRvVGVzdCgiZW1wdHlNZXRob2QvIiArIGdldFRlc3ROYW1lKHRydWUpLCB0b29sLCBjaGVja1JhbmdlKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RTdXBlckNhbGwoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RTdXBlckNhbGxCeVJhbmdlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KHRydWUpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEV4dGVybmFsT3ZlcnJpZGUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RTQ1I4MzIxKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0SW5Bbm9ueW1vdXMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QodHJ1ZSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0U3VwZXJGcm9tQW5vdGhlclBhY2thZ2VDYWxsKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0U3VwZXJXaXRob3V0U3luYygpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdCgpOworICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovY29kZUluc3BlY3Rpb24vRW50cnlQb2ludHNDb252ZXJ0ZXJUZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovY29kZUluc3BlY3Rpb24vRW50cnlQb2ludHNDb252ZXJ0ZXJUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTA0YWY3NAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9jb2RlSW5zcGVjdGlvbi9FbnRyeVBvaW50c0NvbnZlcnRlclRlc3QuamF2YQpAQCAtMCwwICsxLDU0IEBACitwYWNrYWdlIGNvbS5pbnRlbGxpai5jb2RlSW5zcGVjdGlvbjsKKworaW1wb3J0IGNvbS5pbnRlbGxpai5jb2RlSW5zcGVjdGlvbi5leC5FbnRyeVBvaW50c01hbmFnZXJJbXBsOworaW1wb3J0IGNvbS5pbnRlbGxpai5jb2RlSW5zcGVjdGlvbi5yZWZlcmVuY2UuU21hcnRSZWZFbGVtZW50UG9pbnRlcjsKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS51dGlsLkpET01FeHRlcm5hbGl6YWJsZVN0cmluZ0xpc3Q7CitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkudXRpbC5KRE9NVXRpbDsKK2ltcG9ydCBjb20uaW50ZWxsaWoudXRpbC5jb250YWluZXJzLkhhc2hNYXA7CitpbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOworaW1wb3J0IG9yZy5qZG9tLkVsZW1lbnQ7CisKK3B1YmxpYyBjbGFzcyBFbnRyeVBvaW50c0NvbnZlcnRlclRlc3QgZXh0ZW5kcyBUZXN0Q2FzZSB7CisgIHB1YmxpYyB2b2lkIHRlc3RNZXRob2RDb252ZXJ0ZXIxKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KCJtZXRob2QiLCAiU3RyaW5nIGphdmEubGFuZy5TdHJpbmcucmVwbGFjZShjaGFyIG9sZENoYXIsIGNoYXIgbmV3Q2hhcikiLCAiamF2YS5sYW5nLlN0cmluZyBTdHJpbmcgcmVwbGFjZShjaGFyIG9sZENoYXIsIGNoYXIgbmV3Q2hhcikiKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RNZXRob2RDb252ZXJ0ZXIyKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KCJtZXRob2QiLCAidm9pZCBqYXZhLmxhbmcuU3RyaW5nLnJlcGxhY2UoY2hhciBvbGRDaGFyLCBjaGFyIG5ld0NoYXIpIiwgImphdmEubGFuZy5TdHJpbmcgdm9pZCByZXBsYWNlKGNoYXIgb2xkQ2hhciwgY2hhciBuZXdDaGFyKSIpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdE1ldGhvZENvbnZlcnRlcjMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoIm1ldGhvZCIsICJqYXZhLmxhbmcuU3RyaW5nLlN0cmluZyhjaGFyIG9sZENoYXIpIiwgImphdmEubGFuZy5TdHJpbmcgU3RyaW5nKGNoYXIgb2xkQ2hhcikiKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RGaWVsZENvbnZlcnRlcigpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdCgiZmllbGQiLCAiamF2YS5sYW5nLlN0cmluZy5teUZha2VGaWVsZCIsICJqYXZhLmxhbmcuU3RyaW5nIG15RmFrZUZpZWxkIik7CisgIH0KKworICBwcml2YXRlIHN0YXRpYyB2b2lkIGRvVGVzdChTdHJpbmcgdHlwZSwgU3RyaW5nIGZxTmFtZSwgU3RyaW5nIGV4cGVjdGVkRlFOYW1lKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBmaW5hbCBFbGVtZW50IGVudHJ5UG9pbnRzID0gc2V0VXBFbnRyeVBvaW50KHR5cGUsIGZxTmFtZSk7CisKKyAgICBmaW5hbCBIYXNoTWFwPFN0cmluZywgU21hcnRSZWZFbGVtZW50UG9pbnRlcj4gcGVyc2lzdGVudEVudHJ5UG9pbnRzID0gbmV3IEhhc2hNYXA8U3RyaW5nLCBTbWFydFJlZkVsZW1lbnRQb2ludGVyPigpOworICAgIEVudHJ5UG9pbnRzTWFuYWdlckltcGwuY29udmVydChlbnRyeVBvaW50cywgcGVyc2lzdGVudEVudHJ5UG9pbnRzKTsKKworICAgIGZpbmFsIEVsZW1lbnQgdGVzdEVsZW1lbnQgPSBuZXcgRWxlbWVudCgiY29tcCIpOworICAgIEVudHJ5UG9pbnRzTWFuYWdlckltcGwud3JpdGVFeHRlcm5hbCh0ZXN0RWxlbWVudCwgcGVyc2lzdGVudEVudHJ5UG9pbnRzLCBuZXcgSkRPTUV4dGVybmFsaXphYmxlU3RyaW5nTGlzdCgpKTsKKworICAgIGZpbmFsIEVsZW1lbnQgZXhwZWN0ZWRFbnRyeVBvaW50cyA9IHNldFVwRW50cnlQb2ludCh0eXBlLCBleHBlY3RlZEZRTmFtZSk7CisgICAgZXhwZWN0ZWRFbnRyeVBvaW50cy5zZXRBdHRyaWJ1dGUoInZlcnNpb24iLCAiMi4wIik7CisgICAgZmluYWwgRWxlbWVudCBleHBlY3RlZCA9IG5ldyBFbGVtZW50KCJjb21wIik7CisgICAgZXhwZWN0ZWQuYWRkQ29udGVudChleHBlY3RlZEVudHJ5UG9pbnRzKTsKKworICAgIGFzc2VydFRydWUoSkRPTVV0aWwuYXJlRWxlbWVudHNFcXVhbCh0ZXN0RWxlbWVudCwgZXhwZWN0ZWQpKTsKKyAgfQorCisgIHByaXZhdGUgc3RhdGljIEVsZW1lbnQgc2V0VXBFbnRyeVBvaW50KFN0cmluZyB0eXBlLCBTdHJpbmcgZnFOYW1lKSB7CisgICAgRWxlbWVudCBlbnRyeVBvaW50cyA9IG5ldyBFbGVtZW50KCJlbnRyeV9wb2ludHMiKTsKKyAgICBFbGVtZW50IGVudHJ5UG9pbnQgPSBuZXcgRWxlbWVudCgiZW50cnlfcG9pbnQiKTsKKyAgICBlbnRyeVBvaW50LnNldEF0dHJpYnV0ZSgiVFlQRSIsIHR5cGUpOworICAgIGVudHJ5UG9pbnQuc2V0QXR0cmlidXRlKCJGUU5BTUUiLCBmcU5hbWUpOworICAgIGVudHJ5UG9pbnRzLmFkZENvbnRlbnQoZW50cnlQb2ludCk7CisgICAgcmV0dXJuIGVudHJ5UG9pbnRzOworICB9CisKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9jb2RlSW5zcGVjdGlvbi9FcXVhbHNBbmRIYXNoQ29kZVRlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9jb2RlSW5zcGVjdGlvbi9FcXVhbHNBbmRIYXNoQ29kZVRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ODliYTY0Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNwZWN0aW9uL0VxdWFsc0FuZEhhc2hDb2RlVGVzdC5qYXZhCkBAIC0wLDAgKzEsNTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDAtMjAwNiBKZXRCcmFpbnMgcy5yLm8uIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKi8KKworLyoKKyAqIENyZWF0ZWQgYnkgSW50ZWxsaUogSURFQS4KKyAqIFVzZXI6IEFubmEuS296bG92YQorICogRGF0ZTogMDctQXVnLTIwMDYKKyAqIFRpbWU6IDIwOjM0OjM3CisgKi8KK3BhY2thZ2UgY29tLmludGVsbGlqLmNvZGVJbnNwZWN0aW9uOworCitpbXBvcnQgY29tLmludGVsbGlqLkphdmFUZXN0VXRpbDsKK2ltcG9ydCBjb20uaW50ZWxsaWouY29kZUluc3BlY3Rpb24uZXF1YWxzQW5kSGFzaGNvZGUuRXF1YWxzQW5kSGFzaGNvZGU7CitpbXBvcnQgY29tLmludGVsbGlqLnRlc3RGcmFtZXdvcmsuSW5zcGVjdGlvblRlc3RDYXNlOworCitwdWJsaWMgY2xhc3MgRXF1YWxzQW5kSGFzaENvZGVUZXN0IGV4dGVuZHMgSW5zcGVjdGlvblRlc3RDYXNlIHsKKyAgcHJpdmF0ZSBmaW5hbCBFcXVhbHNBbmRIYXNoY29kZSBteVRvb2wgPSBuZXcgRXF1YWxzQW5kSGFzaGNvZGUoKTsKKworICBAT3ZlcnJpZGUKKyAgcHJvdGVjdGVkIFN0cmluZyBnZXRUZXN0RGF0YVBhdGgoKSB7CisgICAgcmV0dXJuIEphdmFUZXN0VXRpbC5nZXRKYXZhVGVzdERhdGFQYXRoKCkgKyAiL2luc3BlY3Rpb24iOworICB9CisKKyAgQE92ZXJyaWRlCisgIHByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgc3VwZXIuc2V0VXAoKTsKKyAgICBteVRvb2wucHJvamVjdE9wZW5lZChnZXRQcm9qZWN0KCkpOworICB9CisKKworICBAT3ZlcnJpZGUKKyAgcHJvdGVjdGVkIHZvaWQgdGVhckRvd24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBteVRvb2wucHJvamVjdENsb3NlZChnZXRQcm9qZWN0KCkpOworICAgIHN1cGVyLnRlYXJEb3duKCk7CisgIH0KKworICBwcml2YXRlIHZvaWQgZG9UZXN0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KCJlcXVhbHNBbmRIYXNoY29kZS8iICsgZ2V0VGVzdE5hbWUodHJ1ZSksIG15VG9vbCk7CisgIH0KKworCisgIHB1YmxpYyB2b2lkIHRlc3RJbm5lckNsYXNzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0SGllcmFyY2h5KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KCk7CisgIH0KKworfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNwZWN0aW9uL0ZpZWxkQ2FuQmVMb2NhbFRlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9jb2RlSW5zcGVjdGlvbi9GaWVsZENhbkJlTG9jYWxUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2NlZjgzMQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9jb2RlSW5zcGVjdGlvbi9GaWVsZENhbkJlTG9jYWxUZXN0LmphdmEKQEAgLTAsMCArMSw0MSBAQAorcGFja2FnZSBjb20uaW50ZWxsaWouY29kZUluc3BlY3Rpb247CisKK2ltcG9ydCBjb20uaW50ZWxsaWouSmF2YVRlc3RVdGlsOworaW1wb3J0IGNvbS5pbnRlbGxpai5jb2RlSW5zcGVjdGlvbi52YXJTY29wZUNhbkJlTmFycm93ZWQuRmllbGRDYW5CZUxvY2FsSW5zcGVjdGlvbjsKK2ltcG9ydCBjb20uaW50ZWxsaWoudGVzdEZyYW1ld29yay5JbnNwZWN0aW9uVGVzdENhc2U7CisKKy8qKgorICogQGF1dGhvciB2ZW4KKyAqLworcHVibGljIGNsYXNzIEZpZWxkQ2FuQmVMb2NhbFRlc3QgZXh0ZW5kcyBJbnNwZWN0aW9uVGVzdENhc2UgeworICBAT3ZlcnJpZGUKKyAgcHJvdGVjdGVkIFN0cmluZyBnZXRUZXN0RGF0YVBhdGgoKSB7CisgICAgcmV0dXJuIEphdmFUZXN0VXRpbC5nZXRKYXZhVGVzdERhdGFQYXRoKCkgKyAiL2luc3BlY3Rpb24iOworICB9CisKKyAgcHJpdmF0ZSB2b2lkIGRvVGVzdCgpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdCgiZmllbGRDYW5CZUxvY2FsLyIgKyBnZXRUZXN0TmFtZSh0cnVlKSwgbmV3IEZpZWxkQ2FuQmVMb2NhbEluc3BlY3Rpb24oKSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0U2ltcGxlICgpIHRocm93cyBFeGNlcHRpb24geyBkb1Rlc3QoKTsgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RUd29NZXRob2RzICgpIHRocm93cyBFeGNlcHRpb24geyBkb1Rlc3QoKTsgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RDb25zdHJ1Y3RvciAoKSB0aHJvd3MgRXhjZXB0aW9uIHsgZG9UZXN0KCk7IH0KKyAgcHVibGljIHZvaWQgdGVzdFN0YXRpY0ZpbmFsKCkgdGhyb3dzIEV4Y2VwdGlvbiB7IGRvVGVzdCgpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RTdGF0aWNBY2Nlc3MoKSB0aHJvd3MgRXhjZXB0aW9uIHsgZG9UZXN0KCk7IH0KKyAgcHVibGljIHZvaWQgdGVzdElubmVyQ2xhc3NDb25zdHJ1Y3RvcigpIHRocm93cyBFeGNlcHRpb24geyBkb1Rlc3QoKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0TG9jYWxWYXIySW5uZXJDbGFzcygpIHRocm93cyBFeGNlcHRpb24geyBkb1Rlc3QoKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0U3RhdGVGaWVsZCgpIHRocm93cyBFeGNlcHRpb24geyBkb1Rlc3QoKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0TG9jYWxTdGF0ZVZhcjJJbm5lckNsYXNzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7IGRvVGVzdCgpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3ROb3RDb25zdGFudEluaXRpYWxpemVyKCkgdGhyb3dzIEV4Y2VwdGlvbiB7ZG9UZXN0KCk7fQorICBwdWJsaWMgdm9pZCB0ZXN0SW5uZXJDbGFzc0ZpZWxkSW5pdGlhbGl6ZXIoKSB0aHJvd3MgRXhjZXB0aW9uIHtkb1Rlc3QoKTt9CisgIHB1YmxpYyB2b2lkIHRlc3RGaWVsZFVzZWRJbkNvbnN0YW50SW5pdGlhbGl6YXRpb24oKSB0aHJvd3MgRXhjZXB0aW9uIHtkb1Rlc3QoKTt9CisgIHB1YmxpYyB2b2lkIHRlc3RGaWVsZFdpdGhJbW11dGFibGVUeXBlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7ZG9UZXN0KCk7fQorICBwdWJsaWMgdm9pZCB0ZXN0RmllbGRVc2VkRm9yV3JpdGluZ0luTGFtYmRhKCkgdGhyb3dzIEV4Y2VwdGlvbiB7ZG9UZXN0KCk7fQorICBwdWJsaWMgdm9pZCB0ZXN0SWdub3JlQW5ub3RhdGVkKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZmluYWwgRmllbGRDYW5CZUxvY2FsSW5zcGVjdGlvbiBpbnNwZWN0aW9uID0gbmV3IEZpZWxkQ2FuQmVMb2NhbEluc3BlY3Rpb24oKTsKKyAgICBpbnNwZWN0aW9uLkVYQ0xVREVfQU5OT1MuYWRkKERlcHJlY2F0ZWQuY2xhc3MuZ2V0TmFtZSgpKTsKKyAgICBkb1Rlc3QoImZpZWxkQ2FuQmVMb2NhbC8iICsgZ2V0VGVzdE5hbWUodHJ1ZSksIGluc3BlY3Rpb24pOworICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovY29kZUluc3BlY3Rpb24vR2xvYmFsSW5zcGVjdGlvbkNvbnRleHRUZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovY29kZUluc3BlY3Rpb24vR2xvYmFsSW5zcGVjdGlvbkNvbnRleHRUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGFiMmJhZgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9jb2RlSW5zcGVjdGlvbi9HbG9iYWxJbnNwZWN0aW9uQ29udGV4dFRlc3QuamF2YQpAQCAtMCwwICsxLDg4IEBACisvKgorICogQ29weXJpZ2h0IDIwMDAtMjAxMiBKZXRCcmFpbnMgcy5yLm8uCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworcGFja2FnZSBjb20uaW50ZWxsaWouY29kZUluc3BlY3Rpb247CisKK2ltcG9ydCBjb20uaW50ZWxsaWouSmF2YVRlc3RVdGlsOworaW1wb3J0IGNvbS5pbnRlbGxpai5hbmFseXNpcy5BbmFseXNpc1Njb3BlOworaW1wb3J0IGNvbS5pbnRlbGxpai5jb2RlSW5zaWdodC5Db2RlSW5zaWdodFRlc3RDYXNlOworaW1wb3J0IGNvbS5pbnRlbGxpai5jb2RlSW5zcGVjdGlvbi5hY3Rpb25zLlJ1bkluc3BlY3Rpb25JbnRlbnRpb247CitpbXBvcnQgY29tLmludGVsbGlqLmNvZGVJbnNwZWN0aW9uLmV4Lio7CitpbXBvcnQgY29tLmludGVsbGlqLmNvZGVJbnNwZWN0aW9uLnZpc2liaWxpdHkuVmlzaWJpbGl0eUluc3BlY3Rpb247CitpbXBvcnQgY29tLmludGVsbGlqLnByb2ZpbGUuY29kZUluc3BlY3Rpb24uSW5zcGVjdGlvblByb2ZpbGVNYW5hZ2VyOworCitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlzOworCisvKioKKyAqIEBhdXRob3IgRG1pdHJ5IEF2ZGVldgorICogICAgICAgICBEYXRlOiA1LzI0LzEyCisgKi8KK3B1YmxpYyBjbGFzcyBHbG9iYWxJbnNwZWN0aW9uQ29udGV4dFRlc3QgZXh0ZW5kcyBDb2RlSW5zaWdodFRlc3RDYXNlIHsKKworICBwdWJsaWMgdm9pZCB0ZXN0UHJvYmxlbUR1cGxpY2F0aW9uKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgU3RyaW5nIHNob3J0TmFtZSA9IG5ldyBWaXNpYmlsaXR5SW5zcGVjdGlvbigpLmdldFNob3J0TmFtZSgpOworICAgIEluc3BlY3Rpb25Qcm9maWxlSW1wbCBwcm9maWxlID0gbmV3IEluc3BlY3Rpb25Qcm9maWxlSW1wbCgiRm9vIik7CisgICAgcHJvZmlsZS5kaXNhYmxlQWxsVG9vbHMoKTsKKyAgICBwcm9maWxlLmVuYWJsZVRvb2woc2hvcnROYW1lKTsKKworICAgIEdsb2JhbEluc3BlY3Rpb25Db250ZXh0SW1wbCBjb250ZXh0ID0gKChJbnNwZWN0aW9uTWFuYWdlckV4KUluc3BlY3Rpb25NYW5hZ2VyLmdldEluc3RhbmNlKGdldFByb2plY3QoKSkpLmNyZWF0ZU5ld0dsb2JhbENvbnRleHQoZmFsc2UpOworICAgIGNvbnRleHQuc2V0RXh0ZXJuYWxQcm9maWxlKHByb2ZpbGUpOworICAgIGNvbmZpZ3VyZUJ5RmlsZSgiRm9vLmphdmEiKTsKKworICAgIEFuYWx5c2lzU2NvcGUgc2NvcGUgPSBuZXcgQW5hbHlzaXNTY29wZShnZXRGaWxlKCkpOworICAgIGNvbnRleHQuZG9JbnNwZWN0aW9ucyhzY29wZSwgSW5zcGVjdGlvbk1hbmFnZXIuZ2V0SW5zdGFuY2UoZ2V0UHJvamVjdCgpKSk7CisKKyAgICBUb29scyB0b29scyA9IGNvbnRleHQuZ2V0VG9vbHMoKS5nZXQoc2hvcnROYW1lKTsKKyAgICBHbG9iYWxJbnNwZWN0aW9uVG9vbFdyYXBwZXIgdG9vbCA9IChHbG9iYWxJbnNwZWN0aW9uVG9vbFdyYXBwZXIpdG9vbHMuZ2V0VG9vbCgpOworICAgIGFzc2VydEVxdWFscygxLCB0b29sLmdldFByb2JsZW1EZXNjcmlwdG9ycygpLnNpemUoKSk7CisKKyAgICBjb250ZXh0LmRvSW5zcGVjdGlvbnMoc2NvcGUsIEluc3BlY3Rpb25NYW5hZ2VyLmdldEluc3RhbmNlKGdldFByb2plY3QoKSkpOworICAgIHRvb2xzID0gY29udGV4dC5nZXRUb29scygpLmdldChzaG9ydE5hbWUpOworICAgIHRvb2wgPSAoR2xvYmFsSW5zcGVjdGlvblRvb2xXcmFwcGVyKXRvb2xzLmdldFRvb2woKTsKKyAgICBhc3NlcnRFcXVhbHMoMSwgdG9vbC5nZXRQcm9ibGVtRGVzY3JpcHRvcnMoKS5zaXplKCkpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFJ1bkluc3BlY3Rpb25Db250ZXh0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgSW5zcGVjdGlvblByb2ZpbGUgcHJvZmlsZSA9IChJbnNwZWN0aW9uUHJvZmlsZSlJbnNwZWN0aW9uUHJvZmlsZU1hbmFnZXIuZ2V0SW5zdGFuY2UoKS5nZXRSb290UHJvZmlsZSgpOworICAgIEluc3BlY3Rpb25Qcm9maWxlRW50cnlbXSB0b29scyA9IHByb2ZpbGUuZ2V0SW5zcGVjdGlvblRvb2xzKG51bGwpOworICAgIGZvciAoSW5zcGVjdGlvblByb2ZpbGVFbnRyeSB0b29sIDogdG9vbHMpIHsKKyAgICAgIGlmICghdG9vbC5pc0VuYWJsZWRCeURlZmF1bHQoKSkgeworICAgICAgICBHbG9iYWxJbnNwZWN0aW9uQ29udGV4dEltcGwgY29udGV4dCA9IFJ1bkluc3BlY3Rpb25JbnRlbnRpb24uY3JlYXRlQ29udGV4dCh0b29sLCAoSW5zcGVjdGlvbk1hbmFnZXJFeClJbnNwZWN0aW9uTWFuYWdlci5nZXRJbnN0YW5jZShteVByb2plY3QpLCBudWxsKTsKKyAgICAgICAgY29udGV4dC5pbml0aWFsaXplVG9vbHMobmV3IEFycmF5TGlzdDxUb29scz4oKSwgbmV3IEFycmF5TGlzdDxUb29scz4oKSwgbmV3IEFycmF5TGlzdDxUb29scz4oKSk7CisgICAgICAgIGFzc2VydEVxdWFscygxLCBjb250ZXh0LmdldFRvb2xzKCkuc2l6ZSgpKTsKKyAgICAgICAgcmV0dXJuOworICAgICAgfQorICAgIH0KKyAgICBmYWlsKCJObyBkaXNhYmxlZCB0b29scyBmb3VuZDogIiArIEFycmF5cy5hc0xpc3QodG9vbHMpKTsKKyAgfQorCisgIEBPdmVycmlkZQorICBwdWJsaWMgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24geworICAgIHN1cGVyLnNldFVwKCk7CisgICAgSW5zcGVjdGlvblByb2ZpbGVJbXBsLklOSVRfSU5TUEVDVElPTlMgPSB0cnVlOworICB9CisKKyAgQE92ZXJyaWRlCisgIHB1YmxpYyB2b2lkIHRlYXJEb3duKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgSW5zcGVjdGlvblByb2ZpbGVJbXBsLklOSVRfSU5TUEVDVElPTlMgPSBmYWxzZTsKKyAgICBzdXBlci50ZWFyRG93bigpOworICB9CisKKyAgQE92ZXJyaWRlCisgIHByb3RlY3RlZCBTdHJpbmcgZ2V0VGVzdERhdGFQYXRoKCkgeworICAgIHJldHVybiBKYXZhVGVzdFV0aWwuZ2V0SmF2YVRlc3REYXRhUGF0aCgpICsgIi9pbnNwZWN0aW9uL2dsb2JhbENvbnRleHQvIjsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNwZWN0aW9uL0lubGluZVNhbWVQYXJhbWV0ZXJWYWx1ZVRlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9jb2RlSW5zcGVjdGlvbi9JbmxpbmVTYW1lUGFyYW1ldGVyVmFsdWVUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmNhNGI3MgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9jb2RlSW5zcGVjdGlvbi9JbmxpbmVTYW1lUGFyYW1ldGVyVmFsdWVUZXN0LmphdmEKQEAgLTAsMCArMSw0NiBAQAorLyoKKyAqIFVzZXI6IGFubmEKKyAqIERhdGU6IDE2LU1heS0yMDA3CisgKi8KK3BhY2thZ2UgY29tLmludGVsbGlqLmNvZGVJbnNwZWN0aW9uOworCitpbXBvcnQgY29tLmludGVsbGlqLkphdmFUZXN0VXRpbDsKK2ltcG9ydCBjb20uaW50ZWxsaWouY29kZUluc2lnaHQuZGFlbW9uLnF1aWNrRml4LkxpZ2h0UXVpY2tGaXhUZXN0Q2FzZTsKK2ltcG9ydCBjb20uaW50ZWxsaWouY29kZUluc3BlY3Rpb24uc2FtZVBhcmFtZXRlclZhbHVlLlNhbWVQYXJhbWV0ZXJWYWx1ZUluc3BlY3Rpb247CitpbXBvcnQgY29tLmludGVsbGlqLnBzaS5Qc2lFbGVtZW50OworaW1wb3J0IG9yZy5qZXRicmFpbnMuYW5ub3RhdGlvbnMuTm9uTmxzOworaW1wb3J0IG9yZy5qZXRicmFpbnMuYW5ub3RhdGlvbnMuTm90TnVsbDsKKworcHVibGljIGNsYXNzIElubGluZVNhbWVQYXJhbWV0ZXJWYWx1ZVRlc3QgZXh0ZW5kcyBMaWdodFF1aWNrRml4VGVzdENhc2UgeworICBATm90TnVsbAorICBAT3ZlcnJpZGUKKyAgcHJvdGVjdGVkIFN0cmluZyBnZXRUZXN0RGF0YVBhdGgoKSB7CisgICAgcmV0dXJuIEphdmFUZXN0VXRpbC5nZXRKYXZhVGVzdERhdGFQYXRoKCkgKyAiL2luc3BlY3Rpb24iOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdCgpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvQWxsVGVzdHMoKTsKKyAgfQorCisgIEBPdmVycmlkZQorICBwcm90ZWN0ZWQgdm9pZCBkb0FjdGlvbihmaW5hbCBTdHJpbmcgdGV4dCwgZmluYWwgYm9vbGVhbiBhY3Rpb25TaG91bGRCZUF2YWlsYWJsZSwgZmluYWwgU3RyaW5nIHRlc3RGdWxsUGF0aCwgZmluYWwgU3RyaW5nIHRlc3ROYW1lKQorICAgIHRocm93cyBFeGNlcHRpb24geworICAgIGZpbmFsIExvY2FsUXVpY2tGaXggZml4ID0gKExvY2FsUXVpY2tGaXgpbmV3IFNhbWVQYXJhbWV0ZXJWYWx1ZUluc3BlY3Rpb24oKS5nZXRRdWlja0ZpeCh0ZXh0KTsKKyAgICBhc3NlcnQgZml4ICE9IG51bGw7CisgICAgZmluYWwgaW50IG9mZnNldCA9IGdldEVkaXRvcigpLmdldENhcmV0TW9kZWwoKS5nZXRPZmZzZXQoKTsKKyAgICBmaW5hbCBQc2lFbGVtZW50IHBzaUVsZW1lbnQgPSBnZXRGaWxlKCkuZmluZEVsZW1lbnRBdChvZmZzZXQpOworICAgIGFzc2VydCBwc2lFbGVtZW50ICE9IG51bGw7CisgICAgZmluYWwgUHJvYmxlbURlc2NyaXB0b3IgZGVzY3JpcHRvciA9IEluc3BlY3Rpb25NYW5hZ2VyLmdldEluc3RhbmNlKGdldFByb2plY3QoKSkKKyAgICAgIC5jcmVhdGVQcm9ibGVtRGVzY3JpcHRvcihwc2lFbGVtZW50LCAiIiwgZml4LCBQcm9ibGVtSGlnaGxpZ2h0VHlwZS5HRU5FUklDX0VSUk9SX09SX1dBUk5JTkcsIHRydWUpOworICAgIGZpeC5hcHBseUZpeChnZXRQcm9qZWN0KCksIGRlc2NyaXB0b3IpOworICAgIGZpbmFsIFN0cmluZyBleHBlY3RlZEZpbGVQYXRoID0gZ2V0QmFzZVBhdGgoKSArICIvYWZ0ZXIiICsgdGVzdE5hbWU7CisgICAgY2hlY2tSZXN1bHRCeUZpbGUoIkluIGZpbGUgOiIgKyBleHBlY3RlZEZpbGVQYXRoLCBleHBlY3RlZEZpbGVQYXRoLCBmYWxzZSk7CisgIH0KKworCisgIEBPdmVycmlkZQorICBATm9uTmxzCisgIHByb3RlY3RlZCBTdHJpbmcgZ2V0QmFzZVBhdGgoKSB7CisgICAgcmV0dXJuICIvcXVpY2tGaXgvU2FtZVBhcmFtZXRlclZhbHVlIjsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNwZWN0aW9uL0luc3BlY3Rpb25Qcm9maWxlVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNwZWN0aW9uL0luc3BlY3Rpb25Qcm9maWxlVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQwOTQyNmIxCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNwZWN0aW9uL0luc3BlY3Rpb25Qcm9maWxlVGVzdC5qYXZhCkBAIC0wLDAgKzEsMzExIEBACisvKgorICogQ29weXJpZ2h0IDIwMDAtMjAxMSBKZXRCcmFpbnMgcy5yLm8uCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworcGFja2FnZSBjb20uaW50ZWxsaWouY29kZUluc3BlY3Rpb247CisKK2ltcG9ydCBjb20uaW50ZWxsaWouY29kZUluc2lnaHQuZGFlbW9uLkhpZ2hsaWdodERpc3BsYXlLZXk7CitpbXBvcnQgY29tLmludGVsbGlqLmNvZGVJbnNwZWN0aW9uLmRlYWRDb2RlLlVudXNlZERlY2xhcmF0aW9uSW5zcGVjdGlvbjsKK2ltcG9ydCBjb20uaW50ZWxsaWouY29kZUluc3BlY3Rpb24uZXguKjsKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS51dGlsLkpET01VdGlsOworaW1wb3J0IGNvbS5pbnRlbGxpai5wcm9maWxlLlByb2ZpbGU7CitpbXBvcnQgY29tLmludGVsbGlqLnByb2ZpbGUuY29kZUluc3BlY3Rpb24uSW5zcGVjdGlvblByb2ZpbGVNYW5hZ2VyOworaW1wb3J0IGNvbS5pbnRlbGxpai50ZXN0RnJhbWV3b3JrLkxpZ2h0SWRlYVRlc3RDYXNlOworaW1wb3J0IG9yZy5qZG9tLkRvY3VtZW50OworaW1wb3J0IG9yZy5qZG9tLkVsZW1lbnQ7CitpbXBvcnQgb3JnLmpkb20uSkRPTUV4Y2VwdGlvbjsKKworaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworaW1wb3J0IHN0YXRpYyBjb20uaW50ZWxsaWoudGVzdEZyYW1ld29yay5QbGF0Zm9ybVRlc3RVdGlsLmFzc2VydEVsZW1lbnRzRXF1YWw7CisKKy8qKgorICogQGF1dGhvciBBbm5hLktvemxvdmEKKyAqIERhdGU6IDE4LUF1Zy0yMDA2CisgKi8KK3B1YmxpYyBjbGFzcyBJbnNwZWN0aW9uUHJvZmlsZVRlc3QgZXh0ZW5kcyBMaWdodElkZWFUZXN0Q2FzZSB7CisgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBQUk9GSUxFID0gIlRvQ29udmVydCI7CisKKyAgQE92ZXJyaWRlCisgIHByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgLy9ub2luc3BlY3Rpb24gQXNzaWdubWVudFRvU3RhdGljRmllbGRGcm9tSW5zdGFuY2VNZXRob2QKKyAgICBJbnNwZWN0aW9uUHJvZmlsZUltcGwuSU5JVF9JTlNQRUNUSU9OUyA9IHRydWU7CisgICAgc3VwZXIuc2V0VXAoKTsKKyAgICBJbnNwZWN0aW9uVG9vbFJlZ2lzdHJhci5nZXRJbnN0YW5jZSgpLmVuc3VyZUluaXRpYWxpemVkKCk7CisgIH0KKworICBAT3ZlcnJpZGUKKyAgcHJvdGVjdGVkIHZvaWQgdGVhckRvd24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBzdXBlci50ZWFyRG93bigpOworICAgIC8vbm9pbnNwZWN0aW9uIEFzc2lnbm1lbnRUb1N0YXRpY0ZpZWxkRnJvbUluc3RhbmNlTWV0aG9kCisgICAgSW5zcGVjdGlvblByb2ZpbGVJbXBsLklOSVRfSU5TUEVDVElPTlMgPSBmYWxzZTsKKyAgICBJbnNwZWN0aW9uUHJvZmlsZU1hbmFnZXIuZ2V0SW5zdGFuY2UoKS5kZWxldGVQcm9maWxlKFBST0ZJTEUpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdENvcHlQcm9qZWN0UHJvZmlsZSgpIHRocm93cyBFeGNlcHRpb24geworICAgIGZpbmFsIEVsZW1lbnQgZWxlbWVudCA9IGxvYWRQcm9maWxlKCk7CisgICAgZmluYWwgSW5zcGVjdGlvblByb2ZpbGVJbXBsIHByb2ZpbGUgPSBuZXcgSW5zcGVjdGlvblByb2ZpbGVJbXBsKFBST0ZJTEUpOworICAgIHByb2ZpbGUucmVhZEV4dGVybmFsKGVsZW1lbnQpOworICAgIGZpbmFsIE1vZGlmaWFibGVNb2RlbCBtb2RlbCA9IHByb2ZpbGUuZ2V0TW9kaWZpYWJsZU1vZGVsKCk7CisgICAgbW9kZWwuY29tbWl0KCk7CisgICAgZmluYWwgRWxlbWVudCBjb3B5ID0gbmV3IEVsZW1lbnQoImluc3BlY3Rpb25zIik7CisgICAgcHJvZmlsZS53cml0ZUV4dGVybmFsKGNvcHkpOworICAgIGFzc2VydEVsZW1lbnRzRXF1YWwoZWxlbWVudCwgY29weSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0Q29udmVydE9sZFByb2ZpbGUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBmaW5hbCBFbGVtZW50IGVsZW1lbnQgPSBsb2FkT2xkU3R5bGVQcm9maWxlKCk7CisgICAgZmluYWwgSW5zcGVjdGlvblByb2ZpbGVJbXBsIHByb2ZpbGUgPSBuZXcgSW5zcGVjdGlvblByb2ZpbGVJbXBsKFBST0ZJTEUpOworICAgIHByb2ZpbGUucmVhZEV4dGVybmFsKGVsZW1lbnQpOworICAgIGZpbmFsIE1vZGlmaWFibGVNb2RlbCBtb2RlbCA9IHByb2ZpbGUuZ2V0TW9kaWZpYWJsZU1vZGVsKCk7CisgICAgbW9kZWwuY29tbWl0KCk7CisgICAgZmluYWwgRWxlbWVudCBjb3B5ID0gbmV3IEVsZW1lbnQoImluc3BlY3Rpb25zIik7CisgICAgcHJvZmlsZS53cml0ZUV4dGVybmFsKGNvcHkpOworICAgIGFzc2VydEVsZW1lbnRzRXF1YWwobG9hZFByb2ZpbGUoKSwgY29weSk7CisgIH0KKworICBwcml2YXRlIHN0YXRpYyBFbGVtZW50IGxvYWRPbGRTdHlsZVByb2ZpbGUoKSB0aHJvd3MgSU9FeGNlcHRpb24sIEpET01FeGNlcHRpb24geworICAgIGZpbmFsIERvY3VtZW50IGRvY3VtZW50ID0gSkRPTVV0aWwubG9hZERvY3VtZW50KCI8aW5zcGVjdGlvbnMgdmVyc2lvbj1cIjEuMFwiIGlzX2xvY2tlZD1cImZhbHNlXCI+XG4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICA8b3B0aW9uIG5hbWU9XCJteU5hbWVcIiB2YWx1ZT1cIlRvQ29udmVydFwiIC8+XG4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICA8b3B0aW9uIG5hbWU9XCJteUxvY2FsXCIgdmFsdWU9XCJ0cnVlXCIgLz5cbiIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgIDxpbnNwZWN0aW9uX3Rvb2wgY2xhc3M9XCJKYXZhRG9jXCIgZW5hYmxlZD1cImZhbHNlXCIgbGV2ZWw9XCJXQVJOSU5HXCIgZW5hYmxlZF9ieV9kZWZhdWx0PVwiZmFsc2VcIj5cbiIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgICAgPG9wdGlvbiBuYW1lPVwiVE9QX0xFVkVMX0NMQVNTX09QVElPTlNcIj5cbiIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgICAgICA8dmFsdWU+XG4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgICAgICA8b3B0aW9uIG5hbWU9XCJBQ0NFU1NfSkFWQURPQ19SRVFVSVJFRF9GT1JcIiB2YWx1ZT1cIm5vbmVcIiAvPlxuIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgICAgICAgPG9wdGlvbiBuYW1lPVwiUkVRVUlSRURfVEFHU1wiIHZhbHVlPVwiXCIgLz5cbiIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgICAgICA8L3ZhbHVlPlxuIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgICA8L29wdGlvbj5cbiIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgICAgPG9wdGlvbiBuYW1lPVwiSU5ORVJfQ0xBU1NfT1BUSU9OU1wiPlxuIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgICAgIDx2YWx1ZT5cbiIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgICAgICAgIDxvcHRpb24gbmFtZT1cIkFDQ0VTU19KQVZBRE9DX1JFUVVJUkVEX0ZPUlwiIHZhbHVlPVwibm9uZVwiIC8+XG4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgICAgICA8b3B0aW9uIG5hbWU9XCJSRVFVSVJFRF9UQUdTXCIgdmFsdWU9XCJcIiAvPlxuIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgICAgIDwvdmFsdWU+XG4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgIDwvb3B0aW9uPlxuIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgICA8b3B0aW9uIG5hbWU9XCJNRVRIT0RfT1BUSU9OU1wiPlxuIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgICAgIDx2YWx1ZT5cbiIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgICAgICAgIDxvcHRpb24gbmFtZT1cIkFDQ0VTU19KQVZBRE9DX1JFUVVJUkVEX0ZPUlwiIHZhbHVlPVwibm9uZVwiIC8+XG4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgICAgICA8b3B0aW9uIG5hbWU9XCJSRVFVSVJFRF9UQUdTXCIgdmFsdWU9XCJAcmV0dXJuQHBhcmFtQHRocm93cyBvciBAZXhjZXB0aW9uXCIgLz5cbiIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgICAgICA8L3ZhbHVlPlxuIiArICIgICAgPC9vcHRpb24+XG4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgIDxvcHRpb24gbmFtZT1cIkZJRUxEX09QVElPTlNcIj5cbiIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgICAgICA8dmFsdWU+XG4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgICAgICA8b3B0aW9uIG5hbWU9XCJBQ0NFU1NfSkFWQURPQ19SRVFVSVJFRF9GT1JcIiB2YWx1ZT1cIm5vbmVcIiAvPlxuIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgICAgICAgPG9wdGlvbiBuYW1lPVwiUkVRVUlSRURfVEFHU1wiIHZhbHVlPVwiXCIgLz5cbiIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgICAgICA8L3ZhbHVlPlxuIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgICA8L29wdGlvbj5cbiIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgICAgPG9wdGlvbiBuYW1lPVwiSUdOT1JFX0RFUFJFQ0FURURcIiB2YWx1ZT1cImZhbHNlXCIgLz5cbiIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgICAgPG9wdGlvbiBuYW1lPVwiSUdOT1JFX0pBVkFET0NfUEVSSU9EXCIgdmFsdWU9XCJmYWxzZVwiIC8+XG4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgIDxvcHRpb24gbmFtZT1cIklHTk9SRV9EVVBMSUNBVEVEX1RIUk9XU1wiIHZhbHVlPVwiZmFsc2VcIiAvPlxuIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgICA8b3B0aW9uIG5hbWU9XCJJR05PUkVfUE9JTlRfVE9fSVRTRUxGXCIgdmFsdWU9XCJmYWxzZVwiIC8+XG4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgIDxvcHRpb24gbmFtZT1cIm15QWRkaXRpb25hbEphdmFkb2NUYWdzXCIgdmFsdWU9XCJ0YWcxLHRhZzIgXCIgLz5cbiIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgIDwvaW5zcGVjdGlvbl90b29sPlxuIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjwvaW5zcGVjdGlvbnM+Iik7CisgICAgcmV0dXJuIGRvY3VtZW50LmdldFJvb3RFbGVtZW50KCk7CisgIH0KKworICBwcml2YXRlIHN0YXRpYyBFbGVtZW50IGxvYWRQcm9maWxlKCkgdGhyb3dzIElPRXhjZXB0aW9uLCBKRE9NRXhjZXB0aW9uIHsKKyAgICBmaW5hbCBEb2N1bWVudCBkb2N1bWVudCA9IEpET01VdGlsLmxvYWREb2N1bWVudCgiPGluc3BlY3Rpb25zIHZlcnNpb249XCIxLjBcIiBpc19sb2NrZWQ9XCJmYWxzZVwiPlxuIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgPG9wdGlvbiBuYW1lPVwibXlOYW1lXCIgdmFsdWU9XCJUb0NvbnZlcnRcIiAvPlxuIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgPG9wdGlvbiBuYW1lPVwibXlMb2NhbFwiIHZhbHVlPVwidHJ1ZVwiIC8+XG4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICA8aW5zcGVjdGlvbl90b29sIGNsYXNzPVwiSmF2YURvY1wiIGVuYWJsZWQ9XCJmYWxzZVwiIGxldmVsPVwiV0FSTklOR1wiIGVuYWJsZWRfYnlfZGVmYXVsdD1cImZhbHNlXCI+XG4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgIDxvcHRpb24gbmFtZT1cIlRPUF9MRVZFTF9DTEFTU19PUFRJT05TXCI+XG4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgICAgPHZhbHVlPlxuIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgICAgICAgPG9wdGlvbiBuYW1lPVwiQUNDRVNTX0pBVkFET0NfUkVRVUlSRURfRk9SXCIgdmFsdWU9XCJub25lXCIgLz5cbiIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgICAgICAgIDxvcHRpb24gbmFtZT1cIlJFUVVJUkVEX1RBR1NcIiB2YWx1ZT1cIlwiIC8+XG4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgICAgPC92YWx1ZT5cbiIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgICAgPC9vcHRpb24+XG4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgIDxvcHRpb24gbmFtZT1cIklOTkVSX0NMQVNTX09QVElPTlNcIj5cbiIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgICAgICA8dmFsdWU+XG4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgICAgICA8b3B0aW9uIG5hbWU9XCJBQ0NFU1NfSkFWQURPQ19SRVFVSVJFRF9GT1JcIiB2YWx1ZT1cIm5vbmVcIiAvPlxuIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgICAgICAgPG9wdGlvbiBuYW1lPVwiUkVRVUlSRURfVEFHU1wiIHZhbHVlPVwiXCIgLz5cbiIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgICAgICA8L3ZhbHVlPlxuIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgICA8L29wdGlvbj5cbiIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgICAgPG9wdGlvbiBuYW1lPVwiTUVUSE9EX09QVElPTlNcIj5cbiIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgICAgICA8dmFsdWU+XG4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgICAgICA8b3B0aW9uIG5hbWU9XCJBQ0NFU1NfSkFWQURPQ19SRVFVSVJFRF9GT1JcIiB2YWx1ZT1cIm5vbmVcIiAvPlxuIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgICAgICAgPG9wdGlvbiBuYW1lPVwiUkVRVUlSRURfVEFHU1wiIHZhbHVlPVwiQHJldHVybkBwYXJhbUB0aHJvd3Mgb3IgQGV4Y2VwdGlvblwiIC8+XG4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgICAgPC92YWx1ZT5cbiIgKyAiICAgIDwvb3B0aW9uPlxuIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgICA8b3B0aW9uIG5hbWU9XCJGSUVMRF9PUFRJT05TXCI+XG4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgICAgPHZhbHVlPlxuIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgICAgICAgPG9wdGlvbiBuYW1lPVwiQUNDRVNTX0pBVkFET0NfUkVRVUlSRURfRk9SXCIgdmFsdWU9XCJub25lXCIgLz5cbiIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgICAgICAgIDxvcHRpb24gbmFtZT1cIlJFUVVJUkVEX1RBR1NcIiB2YWx1ZT1cIlwiIC8+XG4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgICAgPC92YWx1ZT5cbiIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgICAgPC9vcHRpb24+XG4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgIDxvcHRpb24gbmFtZT1cIklHTk9SRV9ERVBSRUNBVEVEXCIgdmFsdWU9XCJmYWxzZVwiIC8+XG4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgIDxvcHRpb24gbmFtZT1cIklHTk9SRV9KQVZBRE9DX1BFUklPRFwiIHZhbHVlPVwiZmFsc2VcIiAvPlxuIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgICA8b3B0aW9uIG5hbWU9XCJJR05PUkVfRFVQTElDQVRFRF9USFJPV1NcIiB2YWx1ZT1cImZhbHNlXCIgLz5cbiIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgICAgPG9wdGlvbiBuYW1lPVwiSUdOT1JFX1BPSU5UX1RPX0lUU0VMRlwiIHZhbHVlPVwiZmFsc2VcIiAvPlxuIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgICA8b3B0aW9uIG5hbWU9XCJteUFkZGl0aW9uYWxKYXZhZG9jVGFnc1wiIHZhbHVlPVwidGFnMSx0YWcyIFwiIC8+XG4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICA8L2luc3BlY3Rpb25fdG9vbD5cbiIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICI8L2luc3BlY3Rpb25zPiIpOworICAgIHJldHVybiBkb2N1bWVudC5nZXRSb290RWxlbWVudCgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFJlbG9hZFByb2ZpbGVXaXRoVW5rbm93blNjb3BlcygpIHRocm93cyBFeGNlcHRpb24geworICAgIGZpbmFsIEVsZW1lbnQgZWxlbWVudCA9IEpET01VdGlsLmxvYWREb2N1bWVudCgiPGluc3BlY3Rpb25zIHZlcnNpb249XCIxLjBcIiBpc19sb2NrZWQ9XCJmYWxzZVwiPlxuIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgIDxvcHRpb24gbmFtZT1cIm15TmFtZVwiIHZhbHVlPVwiIiArIFBST0ZJTEUgKyAiXCIgLz5cbiIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICA8b3B0aW9uIG5hbWU9XCJteUxvY2FsXCIgdmFsdWU9XCJ0cnVlXCIgLz5cbiIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICA8aW5zcGVjdGlvbl90b29sIGNsYXNzPVwiQXJnTmFtZXNFcnJvcnNJbnNwZWN0aW9uXCIgZW5hYmxlZD1cInRydWVcIiBsZXZlbD1cIkVSUk9SXCIgZW5hYmxlZF9ieV9kZWZhdWx0PVwiZmFsc2VcIiAvPlxuIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgIDxpbnNwZWN0aW9uX3Rvb2wgY2xhc3M9XCJBcmdOYW1lc1dhcm5pbmdzSW5zcGVjdGlvblwiIGVuYWJsZWQ9XCJ0cnVlXCIgbGV2ZWw9XCJXQVJOSU5HXCIgZW5hYmxlZF9ieV9kZWZhdWx0PVwiZmFsc2VcIiAvPlxuIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgIDxpbnNwZWN0aW9uX3Rvb2wgY2xhc3M9XCJBcm91bmRBZHZpY2VTdHlsZUluc3BlY3Rpb25cIiBlbmFibGVkPVwidHJ1ZVwiIGxldmVsPVwiV0FSTklOR1wiIGVuYWJsZWRfYnlfZGVmYXVsdD1cImZhbHNlXCIgLz5cbiIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICA8aW5zcGVjdGlvbl90b29sIGNsYXNzPVwiRGVjbGFyZVBhcmVudHNJbnNwZWN0aW9uXCIgZW5hYmxlZD1cInRydWVcIiBsZXZlbD1cIkVSUk9SXCIgZW5hYmxlZF9ieV9kZWZhdWx0PVwiZmFsc2VcIiAvPlxuIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIiAgPGluc3BlY3Rpb25fdG9vbCBjbGFzcz1cIk1hbmlmZXN0RG9tSW5zcGVjdGlvblwiIGVuYWJsZWQ9XCJ0cnVlXCIgbGV2ZWw9XCJFUlJPUlwiIGVuYWJsZWRfYnlfZGVmYXVsdD1cImZhbHNlXCIgLz5cbiIgKyovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgIDxpbnNwZWN0aW9uX3Rvb2wgY2xhc3M9XCJNaXNzaW5nQXNwZWN0akF1dG9wcm94eUluc3BlY3Rpb25cIiBlbmFibGVkPVwidHJ1ZVwiIGxldmVsPVwiV0FSTklOR1wiIGVuYWJsZWRfYnlfZGVmYXVsdD1cImZhbHNlXCIgLz5cbiIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICA8aW5zcGVjdGlvbl90b29sIGNsYXNzPVwiVU5VU0VEX0lNUE9SVFwiIGVuYWJsZWQ9XCJ0cnVlXCIgbGV2ZWw9XCJXQVJOSU5HXCIgZW5hYmxlZF9ieV9kZWZhdWx0PVwidHJ1ZVwiPlxuIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgICAgPHNjb3BlIG5hbWU9XCJVbmtub3duIHNjb3BlIG5hbWVcIiBsZXZlbD1cIldBUk5JTkdcIiBlbmFibGVkPVwidHJ1ZVwiIC8+XG4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgPC9pbnNwZWN0aW9uX3Rvb2w+XG4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjwvaW5zcGVjdGlvbnM+IikuZ2V0Um9vdEVsZW1lbnQoKTsKKyAgICBmaW5hbCBJbnNwZWN0aW9uUHJvZmlsZUltcGwgcHJvZmlsZSA9IG5ldyBJbnNwZWN0aW9uUHJvZmlsZUltcGwoUFJPRklMRSk7CisgICAgcHJvZmlsZS5yZWFkRXh0ZXJuYWwoZWxlbWVudCk7CisgICAgZmluYWwgTW9kaWZpYWJsZU1vZGVsIG1vZGVsID0gcHJvZmlsZS5nZXRNb2RpZmlhYmxlTW9kZWwoKTsKKyAgICBtb2RlbC5jb21taXQoKTsKKyAgICBmaW5hbCBFbGVtZW50IGNvcHkgPSBuZXcgRWxlbWVudCgiaW5zcGVjdGlvbnMiKTsKKyAgICBwcm9maWxlLndyaXRlRXh0ZXJuYWwoY29weSk7CisgICAgYXNzZXJ0RWxlbWVudHNFcXVhbChlbGVtZW50LCBjb3B5KTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RMb2NrUHJvZmlsZSgpIHRocm93cyBFeGNlcHRpb24geworCisgICAgZmluYWwgTGlzdDxJbnNwZWN0aW9uVG9vbFdyYXBwZXI+IGxpc3QgPSBuZXcgQXJyYXlMaXN0PEluc3BlY3Rpb25Ub29sV3JhcHBlcj4oKTsKKyAgICBsaXN0LmFkZChjcmVhdGVUb29sKCJmb28iKSk7CisKKyAgICBJbnNwZWN0aW9uVG9vbFJlZ2lzdHJhciByZWdpc3RyYXIgPSBuZXcgSW5zcGVjdGlvblRvb2xSZWdpc3RyYXIobnVsbCkgeworICAgICAgQE92ZXJyaWRlCisgICAgICBwdWJsaWMgTGlzdDxJbnNwZWN0aW9uVG9vbFdyYXBwZXI+IGNyZWF0ZVRvb2xzKCkgeworICAgICAgICBMb2NhbEluc3BlY3Rpb25FUCBmb28gPSBuZXcgTG9jYWxJbnNwZWN0aW9uRVAoKTsKKyAgICAgICAgZm9vLnNob3J0TmFtZSA9ICJmb28iOworICAgICAgICByZXR1cm4gbGlzdDsKKyAgICAgIH0KKyAgICB9OworCisgICAgSW5zcGVjdGlvblByb2ZpbGVJbXBsIHByb2ZpbGUgPSBuZXcgSW5zcGVjdGlvblByb2ZpbGVJbXBsKCJGb28iLCByZWdpc3RyYXIsIEluc3BlY3Rpb25Qcm9maWxlTWFuYWdlci5nZXRJbnN0YW5jZSgpKTsKKyAgICBwcm9maWxlLnNldEJhc2VQcm9maWxlKG51bGwpOworICAgIExpc3Q8U2NvcGVUb29sU3RhdGU+IHRvb2xzID0gcHJvZmlsZS5nZXRBbGxUb29scygpOworICAgIGFzc2VydEVxdWFscygxLCB0b29scy5zaXplKCkpOworICAgIE1vZGlmaWFibGVNb2RlbCBtb2RlbCA9IHByb2ZpbGUuZ2V0TW9kaWZpYWJsZU1vZGVsKCk7CisgICAgbW9kZWwubG9ja1Byb2ZpbGUodHJ1ZSk7CisgICAgbW9kZWwuY29tbWl0KCk7CisgICAgRWxlbWVudCBlbGVtZW50ID0gbmV3IEVsZW1lbnQoImVsZW1lbnQiKTsKKyAgICBwcm9maWxlLndyaXRlRXh0ZXJuYWwoZWxlbWVudCk7CisKKyAgICBsaXN0LmFkZChjcmVhdGVUb29sKCJiYXIiKSk7CisKKyAgICBwcm9maWxlID0gbmV3IEluc3BlY3Rpb25Qcm9maWxlSW1wbCgiRm9vIiwgcmVnaXN0cmFyLCBJbnNwZWN0aW9uUHJvZmlsZU1hbmFnZXIuZ2V0SW5zdGFuY2UoKSk7CisgICAgcHJvZmlsZS5yZWFkRXh0ZXJuYWwoZWxlbWVudCk7CisKKyAgICBwcm9maWxlLnNldEJhc2VQcm9maWxlKG51bGwpOworICAgIHRvb2xzID0gcHJvZmlsZS5nZXRBbGxUb29scygpOworICAgIGFzc2VydEVxdWFscygyLCB0b29scy5zaXplKCkpOworCisgICAgYXNzZXJ0VHJ1ZShwcm9maWxlLmlzUHJvZmlsZUxvY2tlZCgpKTsKKyAgICBhc3NlcnRGYWxzZShwcm9maWxlLmlzVG9vbEVuYWJsZWQoSGlnaGxpZ2h0RGlzcGxheUtleS5maW5kKCJiYXIiKSkpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEdsb2JhbEluc3BlY3Rpb25Db250ZXh0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgSW5zcGVjdGlvblByb2ZpbGVJbXBsIHByb2ZpbGUgPSBuZXcgSW5zcGVjdGlvblByb2ZpbGVJbXBsKCJGb28iKTsKKyAgICBwcm9maWxlLmRpc2FibGVBbGxUb29scygpOworICAgIHByb2ZpbGUuZW5hYmxlVG9vbChuZXcgVW51c2VkRGVjbGFyYXRpb25JbnNwZWN0aW9uKCkuZ2V0U2hvcnROYW1lKCkpOworCisgICAgR2xvYmFsSW5zcGVjdGlvbkNvbnRleHRJbXBsIGNvbnRleHQgPSAoKEluc3BlY3Rpb25NYW5hZ2VyRXgpSW5zcGVjdGlvbk1hbmFnZXIuZ2V0SW5zdGFuY2UoZ2V0UHJvamVjdCgpKSkuY3JlYXRlTmV3R2xvYmFsQ29udGV4dChmYWxzZSk7CisgICAgY29udGV4dC5zZXRFeHRlcm5hbFByb2ZpbGUocHJvZmlsZSk7CisgICAgY29udGV4dC5pbml0aWFsaXplVG9vbHMobmV3IEFycmF5TGlzdDxUb29scz4oKSwgbmV3IEFycmF5TGlzdDxUb29scz4oKSwgbmV3IEFycmF5TGlzdDxUb29scz4oKSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0SW5zcGVjdGlvbnNJbml0aWFsaXphdGlvbigpIHRocm93cyBFeGNlcHRpb24geworCisgICAgSW5zcGVjdGlvblByb2ZpbGVJbXBsIGZvbyA9IG5ldyBJbnNwZWN0aW9uUHJvZmlsZUltcGwoImZvbyIpOworICAgIGFzc2VydEVxdWFscygwLCBjb3VudEluaXRpYWxpemVkVG9vbHMoZm9vKSk7CisgICAgZm9vLmluaXRJbnNwZWN0aW9uVG9vbHMoZ2V0UHJvamVjdCgpKTsKKyAgICBhc3NlcnRFcXVhbHMoMCwgY291bnRJbml0aWFsaXplZFRvb2xzKGZvbykpOworCisgICAgTW9kaWZpYWJsZU1vZGVsIG1vZGVsID0gZm9vLmdldE1vZGlmaWFibGVNb2RlbCgpOworICAgIGFzc2VydEVxdWFscygwLCBjb3VudEluaXRpYWxpemVkVG9vbHMobW9kZWwpKTsKKyAgICBtb2RlbC5jb21taXQoKTsKKyAgICBhc3NlcnRFcXVhbHMoMCwgY291bnRJbml0aWFsaXplZFRvb2xzKG1vZGVsKSk7CisgICAgYXNzZXJ0RXF1YWxzKDAsIGNvdW50SW5pdGlhbGl6ZWRUb29scyhmb28pKTsKKworICAgIG1vZGVsID0gZm9vLmdldE1vZGlmaWFibGVNb2RlbCgpOworICAgIGFzc2VydEVxdWFscygwLCBjb3VudEluaXRpYWxpemVkVG9vbHMobW9kZWwpKTsKKyAgICBMaXN0PFNjb3BlVG9vbFN0YXRlPiB0b29scyA9ICgoSW5zcGVjdGlvblByb2ZpbGVJbXBsKW1vZGVsKS5nZXRBbGxUb29scygpOworICAgIGZvciAoU2NvcGVUb29sU3RhdGUgdG9vbCA6IHRvb2xzKSB7CisgICAgICBpZiAoIXRvb2wuaXNFbmFibGVkKCkpIHsKKyAgICAgICAgdG9vbC5zZXRFbmFibGVkKHRydWUpOworICAgICAgfQorICAgIH0KKyAgICBtb2RlbC5jb21taXQoKTsKKyAgICBhc3NlcnRFcXVhbHMoMCwgY291bnRJbml0aWFsaXplZFRvb2xzKG1vZGVsKSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0RG9Ob3RJbnN0YW50aWF0ZU9uU2F2ZSgpIHRocm93cyBFeGNlcHRpb24geworICAgIEluc3BlY3Rpb25Qcm9maWxlSW1wbCBwcm9maWxlID0gbmV3IEluc3BlY3Rpb25Qcm9maWxlSW1wbCgicHJvZmlsZSIpOworICAgIHByb2ZpbGUuc2V0QmFzZVByb2ZpbGUoSW5zcGVjdGlvblByb2ZpbGVJbXBsLmdldERlZmF1bHRQcm9maWxlKCkpOworICAgIGFzc2VydEVxdWFscygwLCBjb3VudEluaXRpYWxpemVkVG9vbHMocHJvZmlsZSkpOworICAgIEluc3BlY3Rpb25Qcm9maWxlRW50cnlbXSB0b29scyA9IHByb2ZpbGUuZ2V0SW5zcGVjdGlvblRvb2xzKG51bGwpOworICAgIGFzc2VydFRydWUodG9vbHMubGVuZ3RoID4gMCk7CisgICAgSW5zcGVjdGlvblByb2ZpbGVFbnRyeSB0b29sID0gdG9vbHNbMF07CisgICAgU3RyaW5nIGlkID0gdG9vbC5nZXRTaG9ydE5hbWUoKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oaWQpOworICAgIGlmIChwcm9maWxlLmlzVG9vbEVuYWJsZWQoSGlnaGxpZ2h0RGlzcGxheUtleS5maW5kQnlJZChpZCkpKSB7CisgICAgICBwcm9maWxlLmRpc2FibGVUb29sKGlkKTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICBwcm9maWxlLmVuYWJsZVRvb2woaWQpOworICAgIH0KKyAgICBwcm9maWxlLndyaXRlRXh0ZXJuYWwobmV3IEVsZW1lbnQoInByb2ZpbGUiKSk7CisgICAgTGlzdDxJbnNwZWN0aW9uUHJvZmlsZUVudHJ5PiBpbml0aWFsaXplZFRvb2xzID0gZ2V0SW5pdGlhbGl6ZWRUb29scyhwcm9maWxlKTsKKyAgICBhc3NlcnRFcXVhbHMoaW5pdGlhbGl6ZWRUb29scy50b1N0cmluZygpLCAxLCBpbml0aWFsaXplZFRvb2xzLnNpemUoKSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0SW5zcGVjdGlvbkluaXRpYWxpemF0aW9uRm9yU2VyaWFsaXphdGlvbigpIHRocm93cyBFeGNlcHRpb24geworICAgIEluc3BlY3Rpb25Qcm9maWxlSW1wbCBmb28gPSBuZXcgSW5zcGVjdGlvblByb2ZpbGVJbXBsKCJmb28iKTsKKyAgICBmb28ucmVhZEV4dGVybmFsKEpET01VdGlsLmxvYWREb2N1bWVudCgiPHByb2ZpbGUgdmVyc2lvbj1cIjEuMFwiIGlzX2xvY2tlZD1cImZhbHNlXCI+XG4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgIDxvcHRpb24gbmFtZT1cIm15TmFtZVwiIHZhbHVlPVwiaWRlYS5kZWZhdWx0XCIgLz5cbiIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgICAgPG9wdGlvbiBuYW1lPVwibXlMb2NhbFwiIHZhbHVlPVwiZmFsc2VcIiAvPlxuIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgICA8aW5zcGVjdGlvbl90b29sIGNsYXNzPVwiQWJzdHJhY3RNZXRob2RDYWxsSW5Db25zdHJ1Y3RvclwiIGVuYWJsZWQ9XCJ0cnVlXCIgbGV2ZWw9XCJXQVJOSU5HXCIgZW5hYmxlZF9ieV9kZWZhdWx0PVwidHJ1ZVwiIC8+XG4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgIDxpbnNwZWN0aW9uX3Rvb2wgY2xhc3M9XCJBc3NpZ25tZW50VG9Gb3JMb29wUGFyYW1ldGVyXCIgZW5hYmxlZD1cInRydWVcIiBsZXZlbD1cIldBUk5JTkdcIiBlbmFibGVkX2J5X2RlZmF1bHQ9XCJ0cnVlXCI+XG4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgICAgPG9wdGlvbiBuYW1lPVwibV9jaGVja0ZvcmVhY2hQYXJhbWV0ZXJzXCIgdmFsdWU9XCJmYWxzZVwiIC8+XG4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgIDwvaW5zcGVjdGlvbl90b29sPlxuIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjwvcHJvZmlsZT4iKS5nZXRSb290RWxlbWVudCgpKTsKKyAgICBmb28uaW5pdEluc3BlY3Rpb25Ub29scyhnZXRQcm9qZWN0KCkpOworICAgIGFzc2VydEVxdWFscygxLCBjb3VudEluaXRpYWxpemVkVG9vbHMoZm9vKSk7CisgIH0KKworICBwdWJsaWMgc3RhdGljIGludCBjb3VudEluaXRpYWxpemVkVG9vbHMoUHJvZmlsZSBmb28pIHsKKyAgICByZXR1cm4gZ2V0SW5pdGlhbGl6ZWRUb29scyhmb28pLnNpemUoKTsKKyAgfQorCisgIHB1YmxpYyBzdGF0aWMgTGlzdDxJbnNwZWN0aW9uUHJvZmlsZUVudHJ5PiBnZXRJbml0aWFsaXplZFRvb2xzKFByb2ZpbGUgZm9vKSB7CisgICAgTGlzdDxJbnNwZWN0aW9uUHJvZmlsZUVudHJ5PiBpbml0aWFsaXplZCA9IG5ldyBBcnJheUxpc3Q8SW5zcGVjdGlvblByb2ZpbGVFbnRyeT4oKTsKKyAgICBMaXN0PFNjb3BlVG9vbFN0YXRlPiB0b29scyA9ICgoSW5zcGVjdGlvblByb2ZpbGVJbXBsKWZvbykuZ2V0QWxsVG9vbHMoKTsKKyAgICBmb3IgKFNjb3BlVG9vbFN0YXRlIHRvb2wgOiB0b29scykgeworICAgICAgSW5zcGVjdGlvblByb2ZpbGVFbnRyeSBlbnRyeSA9IHRvb2wuZ2V0VG9vbCgpOworICAgICAgYXNzZXJ0VHJ1ZShlbnRyeSBpbnN0YW5jZW9mIEluc3BlY3Rpb25Ub29sV3JhcHBlcik7CisgICAgICBpZiAoZW50cnkuaXNJbml0aWFsaXplZCgpKSB7CisgICAgICAgIGluaXRpYWxpemVkLmFkZChlbnRyeSk7CisgICAgICB9CisgICAgfQorICAgIHJldHVybiBpbml0aWFsaXplZDsKKyAgfQorCisgIHByaXZhdGUgc3RhdGljIExvY2FsSW5zcGVjdGlvblRvb2xXcmFwcGVyIGNyZWF0ZVRvb2woU3RyaW5nIHMpIHsKKyAgICBMb2NhbEluc3BlY3Rpb25FUCBmb28gPSBuZXcgTG9jYWxJbnNwZWN0aW9uRVAoKTsKKyAgICBmb28uc2hvcnROYW1lID0gczsKKyAgICBmb28uZGlzcGxheU5hbWUgPSBzOworICAgIGZvby5ncm91cERpc3BsYXlOYW1lID0gczsKKyAgICBmb28ubGV2ZWwgPSAiRVJST1IiOworICAgIGZvby5lbmFibGVkQnlEZWZhdWx0ID0gdHJ1ZTsKKyAgICByZXR1cm4gbmV3IExvY2FsSW5zcGVjdGlvblRvb2xXcmFwcGVyKGZvbyk7CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9jb2RlSW5zcGVjdGlvbi9JbnNwZWN0aW9uUHJvZmlsZXNDb252ZXJ0ZXJUZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovY29kZUluc3BlY3Rpb24vSW5zcGVjdGlvblByb2ZpbGVzQ29udmVydGVyVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVjN2Y4OTMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovY29kZUluc3BlY3Rpb24vSW5zcGVjdGlvblByb2ZpbGVzQ29udmVydGVyVGVzdC5qYXZhCkBAIC0wLDAgKzEsNjggQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwMC0yMDExIEpldEJyYWlucyBzLnIuby4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCitwYWNrYWdlIGNvbS5pbnRlbGxpai5jb2RlSW5zcGVjdGlvbjsKKworaW1wb3J0IGNvbS5pbnRlbGxpai5KYXZhVGVzdFV0aWw7CitpbXBvcnQgY29tLmludGVsbGlqLmNvZGVJbnNwZWN0aW9uLmV4Lkluc3BlY3Rpb25Qcm9maWxlSW1wbDsKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS51dGlsLkNvbXBhcmluZzsKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS51dGlsLkpET01VdGlsOworaW1wb3J0IGNvbS5pbnRlbGxpai5wcm9maWxlLmNvZGVJbnNwZWN0aW9uLkluc3BlY3Rpb25Qcm9qZWN0UHJvZmlsZU1hbmFnZXI7CitpbXBvcnQgY29tLmludGVsbGlqLnRlc3RGcmFtZXdvcmsuTGlnaHRJZGVhVGVzdENhc2U7CitpbXBvcnQgY29tLmludGVsbGlqLnRlc3RGcmFtZXdvcmsuUGxhdGZvcm1UZXN0VXRpbDsKK2ltcG9ydCBvcmcuamRvbS5FbGVtZW50OworCitpbXBvcnQgamF2YS5pby5GaWxlOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCisvKioKKyAqIEBhdXRob3IgYW5uYQorICogRGF0ZTogMTMtQXByLTIwMDkKKyAqLworcHVibGljIGNsYXNzIEluc3BlY3Rpb25Qcm9maWxlc0NvbnZlcnRlclRlc3QgZXh0ZW5kcyBMaWdodElkZWFUZXN0Q2FzZSB7CisgIHB1YmxpYyB2b2lkIHRlc3RPcHRpb25zKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KCJvcHRpb25zIik7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0U2NvcGUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoInNjb3BlIik7CisgIH0KKworICBwcml2YXRlIHN0YXRpYyB2b2lkIGRvVGVzdChmaW5hbCBTdHJpbmcgZGlyTmFtZSkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgdHJ5IHsKKyAgICAgIGZpbmFsIFN0cmluZyByZWxhdGl2ZVBhdGggPSAiL2luc3BlY3Rpb24vY29udmVydGVyLyI7CisgICAgICBmaW5hbCBGaWxlIHByb2plY3RGaWxlID0gbmV3IEZpbGUoSmF2YVRlc3RVdGlsLmdldEphdmFUZXN0RGF0YVBhdGgoKSArIHJlbGF0aXZlUGF0aCArIGRpck5hbWUgKyAiL29wdGlvbnMuaXByIik7CisgICAgICBmaW5hbCBMaXN0IGNoaWxkcmVuID0gSkRPTVV0aWwubG9hZERvY3VtZW50KHByb2plY3RGaWxlKS5nZXRSb290RWxlbWVudCgpLmdldENoaWxkcmVuKCJjb21wb25lbnQiKTsKKworICAgICAgZm9yIChPYmplY3QgY2hpbGQgOiBjaGlsZHJlbikgeworICAgICAgICBmaW5hbCBFbGVtZW50IGVsZW1lbnQgPSAoRWxlbWVudCljaGlsZDsKKyAgICAgICAgaWYgKENvbXBhcmluZy5zdHJFcXVhbChlbGVtZW50LmdldEF0dHJpYnV0ZVZhbHVlKCJuYW1lIiksICJJbnNwZWN0aW9uUHJvamVjdFByb2ZpbGVNYW5hZ2VyIikpIHsKKyAgICAgICAgICBmaW5hbCBJbnNwZWN0aW9uUHJvamVjdFByb2ZpbGVNYW5hZ2VyIHByb2ZpbGVNYW5hZ2VyID0gSW5zcGVjdGlvblByb2plY3RQcm9maWxlTWFuYWdlci5nZXRJbnN0YW5jZShnZXRQcm9qZWN0KCkpOworICAgICAgICAgIEluc3BlY3Rpb25Qcm9maWxlSW1wbC5JTklUX0lOU1BFQ1RJT05TID0gdHJ1ZTsKKyAgICAgICAgICBwcm9maWxlTWFuYWdlci5yZWFkRXh0ZXJuYWwoZWxlbWVudCk7CisKKyAgICAgICAgICBmaW5hbCBFbGVtZW50IGNvbmZpZ0VsZW1lbnQgPSBuZXcgRWxlbWVudCgiY29uZmlnIik7CisgICAgICAgICAgcHJvZmlsZU1hbmFnZXIud3JpdGVFeHRlcm5hbChjb25maWdFbGVtZW50KTsKKyAgICAgICAgICBmaW5hbCBGaWxlIGZpbGUgPSBuZXcgRmlsZShKYXZhVGVzdFV0aWwuZ2V0SmF2YVRlc3REYXRhUGF0aCgpICsgcmVsYXRpdmVQYXRoICsgZGlyTmFtZSArICIvb3B0aW9ucy5hZnRlci54bWwiKTsKKyAgICAgICAgICBQbGF0Zm9ybVRlc3RVdGlsLmFzc2VydEVsZW1lbnRzRXF1YWwoY29uZmlnRWxlbWVudCwgSkRPTVV0aWwubG9hZERvY3VtZW50KGZpbGUpLmdldFJvb3RFbGVtZW50KCkpOworICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICB9CisgICAgfQorICAgIGZpbmFsbHkgeworICAgICAgSW5zcGVjdGlvblByb2ZpbGVJbXBsLklOSVRfSU5TUEVDVElPTlMgPSBmYWxzZTsKKyAgICB9CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovY29kZUluc3BlY3Rpb24vSmF2YUFQSVVzYWdlc0luc3BlY3Rpb25UZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovY29kZUluc3BlY3Rpb24vSmF2YUFQSVVzYWdlc0luc3BlY3Rpb25UZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmY0NGQ4MgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9jb2RlSW5zcGVjdGlvbi9KYXZhQVBJVXNhZ2VzSW5zcGVjdGlvblRlc3QuamF2YQpAQCAtMCwwICsxLDEwOSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDAwLTIwMTIgSmV0QnJhaW5zIHMuci5vLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworLyoKKyAqIFVzZXI6IGFubmEKKyAqIERhdGU6IDExLVNlcC0yMDA3CisgKi8KK3BhY2thZ2UgY29tLmludGVsbGlqLmNvZGVJbnNwZWN0aW9uOworCitpbXBvcnQgY29tLmludGVsbGlqLkphdmFUZXN0VXRpbDsKK2ltcG9ydCBjb20uaW50ZWxsaWouY29kZUluc3BlY3Rpb24uZXguTG9jYWxJbnNwZWN0aW9uVG9vbFdyYXBwZXI7CitpbXBvcnQgY29tLmludGVsbGlqLmNvZGVJbnNwZWN0aW9uLmphdmExNWFwaS5KYXZhMTVBUElVc2FnZUluc3BlY3Rpb247CitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkucm9vdHMuQ29udGVudEl0ZXJhdG9yOworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLnV0aWwuQ29tcGFyaW5nOworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLnZmcy5KYXJGaWxlU3lzdGVtOworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLnZmcy5WZnNVdGlsQ29yZTsKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS52ZnMuVmlydHVhbEZpbGU7CitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkudmZzLlZpcnR1YWxGaWxlRmlsdGVyOworaW1wb3J0IGNvbS5pbnRlbGxpai5wb20uamF2YS5MYW5ndWFnZUxldmVsOworaW1wb3J0IGNvbS5pbnRlbGxpai5wc2kuKjsKK2ltcG9ydCBjb20uaW50ZWxsaWoucHNpLmphdmFkb2MuUHNpRG9jQ29tbWVudDsKK2ltcG9ydCBjb20uaW50ZWxsaWoucHNpLmphdmFkb2MuUHNpRG9jVGFnOworaW1wb3J0IGNvbS5pbnRlbGxpai5wc2kuamF2YWRvYy5Qc2lEb2NUYWdWYWx1ZTsKK2ltcG9ydCBjb20uaW50ZWxsaWoudGVzdEZyYW1ld29yay5JZGVhVGVzdFV0aWw7CitpbXBvcnQgY29tLmludGVsbGlqLnRlc3RGcmFtZXdvcmsuSW5zcGVjdGlvblRlc3RDYXNlOworCitwdWJsaWMgY2xhc3MgSmF2YUFQSVVzYWdlc0luc3BlY3Rpb25UZXN0IGV4dGVuZHMgSW5zcGVjdGlvblRlc3RDYXNlIHsKKyAgQE92ZXJyaWRlCisgIHByb3RlY3RlZCBTdHJpbmcgZ2V0VGVzdERhdGFQYXRoKCkgeworICAgIHJldHVybiBKYXZhVGVzdFV0aWwuZ2V0SmF2YVRlc3REYXRhUGF0aCgpICsgIi9pbnNwZWN0aW9uIjsKKyAgfQorCisgIHByaXZhdGUgdm9pZCBkb1Rlc3QoKSB7CisgICAgZmluYWwgSmF2YTE1QVBJVXNhZ2VJbnNwZWN0aW9uIHVzYWdlSW5zcGVjdGlvbiA9IG5ldyBKYXZhMTVBUElVc2FnZUluc3BlY3Rpb24oKTsKKyAgICBkb1Rlc3QoInVzYWdlMS41LyIgKyBnZXRUZXN0TmFtZSh0cnVlKSwgbmV3IExvY2FsSW5zcGVjdGlvblRvb2xXcmFwcGVyKHVzYWdlSW5zcGVjdGlvbiksICJqYXZhIDEuNSIpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdENvbnN0cnVjdG9yKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgSWRlYVRlc3RVdGlsLndpdGhMZXZlbChnZXRNb2R1bGUoKSwgTGFuZ3VhZ2VMZXZlbC5KREtfMV80LCBuZXcgUnVubmFibGUoKSB7CisgICAgICBAT3ZlcnJpZGUKKyAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKKyAgICAgICAgZG9UZXN0KCk7CisgICAgICB9CisgICAgfSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0SWdub3JlZCgpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdCgpOworICB9CisKKyAgQFN1cHByZXNzV2FybmluZ3MoIlVudXNlZERlY2xhcmF0aW9uIikKKyAgcHVibGljIHZvaWQgX3Rlc3RDb2xsZWN0U2luY2VBcGlVc2FnZXMoKSB7CisgICAgZmluYWwgU3RyaW5nIHZlcnNpb24gPSAiMS43IjsKKyAgICBmaW5hbCBDb250ZW50SXRlcmF0b3IgY29udGVudEl0ZXJhdG9yID0gbmV3IENvbnRlbnRJdGVyYXRvcigpIHsKKyAgICAgIEBPdmVycmlkZQorICAgICAgcHVibGljIGJvb2xlYW4gcHJvY2Vzc0ZpbGUoVmlydHVhbEZpbGUgZmlsZU9yRGlyKSB7CisgICAgICAgIGZpbmFsIFBzaUZpbGUgZmlsZSA9IFBzaU1hbmFnZXIuZ2V0SW5zdGFuY2UoZ2V0UHJvamVjdCgpKS5maW5kRmlsZShmaWxlT3JEaXIpOworICAgICAgICBpZiAoZmlsZSBpbnN0YW5jZW9mIFBzaUphdmFGaWxlKSB7CisgICAgICAgICAgZmlsZS5hY2NlcHQobmV3IEphdmFSZWN1cnNpdmVFbGVtZW50VmlzaXRvcigpIHsKKyAgICAgICAgICAgIEBPdmVycmlkZQorICAgICAgICAgICAgcHVibGljIHZvaWQgdmlzaXRFbGVtZW50KFBzaUVsZW1lbnQgZWxlbWVudCkgeworICAgICAgICAgICAgICBzdXBlci52aXNpdEVsZW1lbnQoZWxlbWVudCk7CisgICAgICAgICAgICAgIGlmIChlbGVtZW50IGluc3RhbmNlb2YgUHNpRG9jQ29tbWVudE93bmVyKSB7CisgICAgICAgICAgICAgICAgZmluYWwgUHNpRG9jQ29tbWVudCBjb21tZW50ID0gKChQc2lEb2NDb21tZW50T3duZXIpZWxlbWVudCkuZ2V0RG9jQ29tbWVudCgpOworICAgICAgICAgICAgICAgIGlmIChjb21tZW50ICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICAgIGZvciAoUHNpRG9jVGFnIHRhZyA6IGNvbW1lbnQuZ2V0VGFncygpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChDb21wYXJpbmcuc3RyRXF1YWwodGFnLmdldE5hbWUoKSwgInNpbmNlIikpIHsKKyAgICAgICAgICAgICAgICAgICAgICBmaW5hbCBQc2lEb2NUYWdWYWx1ZSB2YWx1ZSA9IHRhZy5nZXRWYWx1ZUVsZW1lbnQoKTsKKyAgICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUgIT0gbnVsbCAmJiB2YWx1ZS5nZXRUZXh0KCkuZXF1YWxzKHZlcnNpb24pKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oSmF2YTE1QVBJVXNhZ2VJbnNwZWN0aW9uLmdldFNpZ25hdHVyZSgoUHNpTWVtYmVyKWVsZW1lbnQpKTsKKyAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9KTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgIH0KKyAgICB9OworICAgIGZpbmFsIFZpcnR1YWxGaWxlIHNyY0ZpbGUgPSBKYXJGaWxlU3lzdGVtLmdldEluc3RhbmNlKCkuZmluZEZpbGVCeVBhdGgoImM6L3Byb2dyYW0gZmlsZXMvamF2YS9qZGsxLjYuMF8xMi9zcmMuemlwIS8iKTsKKyAgICBhc3NlcnQgc3JjRmlsZSAhPSBudWxsOworICAgIFZmc1V0aWxDb3JlLml0ZXJhdGVDaGlsZHJlblJlY3Vyc2l2ZWx5KHNyY0ZpbGUsIFZpcnR1YWxGaWxlRmlsdGVyLkFMTCwgY29udGVudEl0ZXJhdG9yKTsKKyAgfQorLyoKKyAgQE92ZXJyaWRlCisgIHByb3RlY3RlZCB2b2lkIHNldFVwSmRrKCkgeworICAgIE1vZHVsZVtdIG1vZHVsZXMgPSBNb2R1bGVNYW5hZ2VyLmdldEluc3RhbmNlKG15UHJvamVjdCkuZ2V0TW9kdWxlcygpOworICAgIGZpbmFsIFNkayBzZGsgPSBKYXZhU2RrLmdldEluc3RhbmNlKCkuY3JlYXRlSmRrKCIxLjciLCAiYzovcHJvZ3JhbSBmaWxlcyAoeDg2KS9qYXZhL2pkazEuNy4wXzA5LyIsIGZhbHNlKTsKKyAgICBmb3IgKE1vZHVsZSBtb2R1bGUgOiBtb2R1bGVzKSB7CisgICAgICBNb2R1bGVSb290TW9kaWZpY2F0aW9uVXRpbC5zZXRNb2R1bGVTZGsobW9kdWxlLCBzZGspOworICAgIH0KKyAgfSovCit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovY29kZUluc3BlY3Rpb24vSmF2YURvY0luc3BlY3Rpb25UZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovY29kZUluc3BlY3Rpb24vSmF2YURvY0luc3BlY3Rpb25UZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjNiMWFiZgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9jb2RlSW5zcGVjdGlvbi9KYXZhRG9jSW5zcGVjdGlvblRlc3QuamF2YQpAQCAtMCwwICsxLDY3IEBACitwYWNrYWdlIGNvbS5pbnRlbGxpai5jb2RlSW5zcGVjdGlvbjsKKworaW1wb3J0IGNvbS5pbnRlbGxpai5KYXZhVGVzdFV0aWw7CitpbXBvcnQgY29tLmludGVsbGlqLmNvZGVJbnNwZWN0aW9uLmphdmFEb2MuSmF2YURvY0xvY2FsSW5zcGVjdGlvbjsKK2ltcG9ydCBjb20uaW50ZWxsaWoudGVzdEZyYW1ld29yay5JbnNwZWN0aW9uVGVzdENhc2U7CisKK3B1YmxpYyBjbGFzcyBKYXZhRG9jSW5zcGVjdGlvblRlc3QgZXh0ZW5kcyBJbnNwZWN0aW9uVGVzdENhc2UgeworICBAT3ZlcnJpZGUKKyAgcHJvdGVjdGVkIFN0cmluZyBnZXRUZXN0RGF0YVBhdGgoKSB7CisgICAgcmV0dXJuIEphdmFUZXN0VXRpbC5nZXRKYXZhVGVzdERhdGFQYXRoKCkgKyAiL2luc3BlY3Rpb24iOworICB9CisKKyAgcHJpdmF0ZSB2b2lkIGRvVGVzdCgpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdCgiamF2YURvY0luc3BlY3Rpb24vIiArIGdldFRlc3ROYW1lKHRydWUpLCAgbmV3IEphdmFEb2NMb2NhbEluc3BlY3Rpb24oKSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0RHVwbGljYXRlUGFyYW0oKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3REdXBsaWNhdGVSZXR1cm4oKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoKTsKKyAgfQorCisgIC8vIHRlc3RzIGZvciBkdXBsaWNhdGUgY2xhc3MgdGFncworICBwdWJsaWMgdm9pZCB0ZXN0RHVwbGljYXRlRGVwcmVjYXRlZCgpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdCgpOworICB9CisKKyAgLy8gdGVzdHMgZm9yIGR1cGxpY2F0ZSBmaWVsZCB0YWdzCisgIHB1YmxpYyB2b2lkIHRlc3REdXBsaWNhdGVTZXJpYWwoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3REdXBsaWNhdGVUaHJvd3MoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoKTsKKyAgfQorCisgIC8vaW5oZXJpdGVkIGphdmFkb2MKKyAgcHVibGljIHZvaWQgdGVzdE1pc3NlZFRhZ3MoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3REb3VibGVNaXNzZWRUYWdzKCkgdGhyb3dzIEV4Y2VwdGlvbnsKKyAgICBkb1Rlc3QoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RNaXNzZWRUaHJvd3NUYWcoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBmaW5hbCBKYXZhRG9jTG9jYWxJbnNwZWN0aW9uIGxvY2FsSW5zcGVjdGlvbiA9IG5ldyBKYXZhRG9jTG9jYWxJbnNwZWN0aW9uKCk7CisgICAgbG9jYWxJbnNwZWN0aW9uLk1FVEhPRF9PUFRJT05TLkFDQ0VTU19KQVZBRE9DX1JFUVVJUkVEX0ZPUiA9ICJwYWNrYWdlIjsKKyAgICBkb1Rlc3QoImphdmFEb2NJbnNwZWN0aW9uLyIgKyBnZXRUZXN0TmFtZSh0cnVlKSwgbG9jYWxJbnNwZWN0aW9uKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RNaXNvcmRlcmVkVGhyb3dzVGFnKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0R2VuZXJpY3NQYXJhbXMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RJZ25vcmVEdXBsaWNhdGVUaHJvd3MoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBmaW5hbCBKYXZhRG9jTG9jYWxJbnNwZWN0aW9uIGluc3BlY3Rpb24gPSBuZXcgSmF2YURvY0xvY2FsSW5zcGVjdGlvbigpOworICAgIGluc3BlY3Rpb24uSUdOT1JFX0RVUExJQ0FURURfVEhST1dTID0gdHJ1ZTsKKyAgICBkb1Rlc3QoImphdmFEb2NJbnNwZWN0aW9uLyIgKyBnZXRUZXN0TmFtZSh0cnVlKSwgaW5zcGVjdGlvbik7CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9jb2RlSW5zcGVjdGlvbi9Mb2NhbENhbkJlRmluYWxUZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovY29kZUluc3BlY3Rpb24vTG9jYWxDYW5CZUZpbmFsVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM4ZTVlY2YKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovY29kZUluc3BlY3Rpb24vTG9jYWxDYW5CZUZpbmFsVGVzdC5qYXZhCkBAIC0wLDAgKzEsMTA1IEBACitwYWNrYWdlIGNvbS5pbnRlbGxpai5jb2RlSW5zcGVjdGlvbjsKKworaW1wb3J0IGNvbS5pbnRlbGxpai5KYXZhVGVzdFV0aWw7CitpbXBvcnQgY29tLmludGVsbGlqLmNvZGVJbnNwZWN0aW9uLmxvY2FsQ2FuQmVGaW5hbC5Mb2NhbENhbkJlRmluYWw7CitpbXBvcnQgY29tLmludGVsbGlqLnRlc3RGcmFtZXdvcmsuSW5zcGVjdGlvblRlc3RDYXNlOworCisKKy8qKgorICogQGF1dGhvciBtYXgKKyAqLworcHVibGljIGNsYXNzIExvY2FsQ2FuQmVGaW5hbFRlc3QgZXh0ZW5kcyBJbnNwZWN0aW9uVGVzdENhc2UgeworICBwcml2YXRlIExvY2FsQ2FuQmVGaW5hbCBteVRvb2w7CisKKyAgQE92ZXJyaWRlCisgIHByb3RlY3RlZCBTdHJpbmcgZ2V0VGVzdERhdGFQYXRoKCkgeworICAgIHJldHVybiBKYXZhVGVzdFV0aWwuZ2V0SmF2YVRlc3REYXRhUGF0aCgpICsgIi9pbnNwZWN0aW9uIjsKKyAgfQorICAKKyAgQE92ZXJyaWRlCisgIHByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgc3VwZXIuc2V0VXAoKTsKKyAgICBteVRvb2wgPSBuZXcgTG9jYWxDYW5CZUZpbmFsKCk7CisgIH0KKworICBwcml2YXRlIHZvaWQgZG9UZXN0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KCJsb2NhbENhbkJlRmluYWwvIiArIGdldFRlc3ROYW1lKGZhbHNlKSwgbXlUb29sKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RtdWx0aVdyaXRlTm9SZWFkKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgbXlUb29sLlJFUE9SVF9QQVJBTUVURVJTID0gdHJ1ZTsKKyAgICBteVRvb2wuUkVQT1JUX1ZBUklBQkxFUyA9IHRydWU7CisgICAgZG9UZXN0KCk7CisgIH0KKyAgcHVibGljIHZvaWQgdGVzdGlmKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgbXlUb29sLlJFUE9SVF9QQVJBTUVURVJTID0gdHJ1ZTsKKyAgICBteVRvb2wuUkVQT1JUX1ZBUklBQkxFUyA9IHRydWU7CisgICAgZG9UZXN0KCk7CisgIH0KKyAgcHVibGljIHZvaWQgdGVzdGluY29tcGxldGVBc3NpZ25tZW50KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgbXlUb29sLlJFUE9SVF9QQVJBTUVURVJTID0gdHJ1ZTsKKyAgICBteVRvb2wuUkVQT1JUX1ZBUklBQkxFUyA9IHRydWU7CisgICAgZG9UZXN0KCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0cGFyYW1ldGVycygpIHRocm93cyBFeGNlcHRpb24geworICAgIG15VG9vbC5SRVBPUlRfUEFSQU1FVEVSUyA9IHRydWU7CisgICAgbXlUb29sLlJFUE9SVF9WQVJJQUJMRVMgPSB0cnVlOworICAgIGRvVGVzdCgpOworICB9CisgIHB1YmxpYyB2b2lkIHRlc3RTQ1I2NzQ0XzEoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBteVRvb2wuUkVQT1JUX1BBUkFNRVRFUlMgPSB0cnVlOworICAgIG15VG9vbC5SRVBPUlRfVkFSSUFCTEVTID0gdHJ1ZTsKKyAgICBkb1Rlc3QoKTsKKyAgfQorICBwdWJsaWMgdm9pZCB0ZXN0U0NSNjc0NF8yKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgbXlUb29sLlJFUE9SVF9QQVJBTUVURVJTID0gdHJ1ZTsKKyAgICBteVRvb2wuUkVQT1JUX1ZBUklBQkxFUyA9IHRydWU7CisgICAgZG9UZXN0KCk7CisgIH0KKyAgcHVibGljIHZvaWQgdGVzdFNDUjY3NDRfMygpIHRocm93cyBFeGNlcHRpb24geworICAgIG15VG9vbC5SRVBPUlRfUEFSQU1FVEVSUyA9IHRydWU7CisgICAgbXlUb29sLlJFUE9SVF9WQVJJQUJMRVMgPSB0cnVlOworICAgIGRvVGVzdCgpOworICB9CisgIHB1YmxpYyB2b2lkIHRlc3RTQ1I2NzQ0XzQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBteVRvb2wuUkVQT1JUX1BBUkFNRVRFUlMgPSB0cnVlOworICAgIG15VG9vbC5SRVBPUlRfVkFSSUFCTEVTID0gdHJ1ZTsKKyAgICBkb1Rlc3QoKTsKKyAgfQorICBwdWJsaWMgdm9pZCB0ZXN0U0NSNjc0NF81KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgbXlUb29sLlJFUE9SVF9QQVJBTUVURVJTID0gdHJ1ZTsKKyAgICBteVRvb2wuUkVQT1JUX1ZBUklBQkxFUyA9IHRydWU7CisgICAgZG9UZXN0KCk7CisgIH0KKyAgcHVibGljIHZvaWQgdGVzdFNDUjY3NDRfNigpIHRocm93cyBFeGNlcHRpb24geworICAgIG15VG9vbC5SRVBPUlRfUEFSQU1FVEVSUyA9IHRydWU7CisgICAgbXlUb29sLlJFUE9SVF9WQVJJQUJMRVMgPSB0cnVlOworICAgIGRvVGVzdCgpOworICB9CisgIHB1YmxpYyB2b2lkIHRlc3RTQ1I3NjAxKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgbXlUb29sLlJFUE9SVF9QQVJBTUVURVJTID0gdHJ1ZTsKKyAgICBteVRvb2wuUkVQT1JUX1ZBUklBQkxFUyA9IHRydWU7CisgICAgZG9UZXN0KCk7CisgIH0KKyAgcHVibGljIHZvaWQgdGVzdFNDUjc0MjhfMSgpIHRocm93cyBFeGNlcHRpb24geworICAgIG15VG9vbC5SRVBPUlRfUEFSQU1FVEVSUyA9IHRydWU7CisgICAgbXlUb29sLlJFUE9SVF9WQVJJQUJMRVMgPSB0cnVlOworICAgIGRvVGVzdCgpOworICB9CisgIHB1YmxpYyB2b2lkIHRlc3RTQ1I3NDI4KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgbXlUb29sLlJFUE9SVF9QQVJBTUVURVJTID0gdHJ1ZTsKKyAgICBteVRvb2wuUkVQT1JUX1ZBUklBQkxFUyA9IHRydWU7CisgICAgZG9UZXN0KCk7CisgIH0KKyAgcHVibGljIHZvaWQgdGVzdFNDUjExNzU3KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgbXlUb29sLlJFUE9SVF9QQVJBTUVURVJTID0gdHJ1ZTsKKyAgICBteVRvb2wuUkVQT1JUX1ZBUklBQkxFUyA9IHRydWU7CisgICAgZG9UZXN0KCk7CisgIH0KKyAgcHVibGljIHZvaWQgdGVzdGZvcmVhY2goKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBteVRvb2wuUkVQT1JUX1BBUkFNRVRFUlMgPSB0cnVlOworICAgIG15VG9vbC5SRVBPUlRfVkFSSUFCTEVTID0gdHJ1ZTsKKyAgICBkb1Rlc3QoKTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNwZWN0aW9uL01hZ2ljQ29uc3RhbnRJbnNwZWN0aW9uVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNwZWN0aW9uL01hZ2ljQ29uc3RhbnRJbnNwZWN0aW9uVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg5NzA0NGEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovY29kZUluc3BlY3Rpb24vTWFnaWNDb25zdGFudEluc3BlY3Rpb25UZXN0LmphdmEKQEAgLTAsMCArMSw2NSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDAwLTIwMTEgSmV0QnJhaW5zIHMuci5vLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworLyoKKyAqIENyZWF0ZWQgYnkgSW50ZWxsaUogSURFQS4KKyAqIFVzZXI6IG1heAorICogRGF0ZTogQXByIDExLCAyMDAyCisgKiBUaW1lOiA2OjUwOjUwIFBNCisgKiBUbyBjaGFuZ2UgdGVtcGxhdGUgZm9yIG5ldyBjbGFzcyB1c2UgCisgKiBDb2RlIFN0eWxlIHwgQ2xhc3MgVGVtcGxhdGVzIG9wdGlvbnMgKFRvb2xzIHwgSURFIE9wdGlvbnMpLgorICovCitwYWNrYWdlIGNvbS5pbnRlbGxpai5jb2RlSW5zcGVjdGlvbjsKKworaW1wb3J0IGNvbS5pbnRlbGxpai5KYXZhVGVzdFV0aWw7CitpbXBvcnQgY29tLmludGVsbGlqLmNvZGVJbnNwZWN0aW9uLmV4LkxvY2FsSW5zcGVjdGlvblRvb2xXcmFwcGVyOworaW1wb3J0IGNvbS5pbnRlbGxpai5jb2RlSW5zcGVjdGlvbi5tYWdpY0NvbnN0YW50Lk1hZ2ljQ29uc3RhbnRJbnNwZWN0aW9uOworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLnByb2plY3RSb290cy5TZGs7CitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkucHJvamVjdFJvb3RzLlNka01vZGlmaWNhdG9yOworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLnJvb3RzLkFubm90YXRpb25PcmRlclJvb3RUeXBlOworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLnV0aWwuaW8uRmlsZVV0aWw7CitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkudmZzLkxvY2FsRmlsZVN5c3RlbTsKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS52ZnMuVmlydHVhbEZpbGU7CitpbXBvcnQgY29tLmludGVsbGlqLnRlc3RGcmFtZXdvcmsuSW5zcGVjdGlvblRlc3RDYXNlOworaW1wb3J0IGNvbS5pbnRlbGxpai50ZXN0RnJhbWV3b3JrLlBsYXRmb3JtVGVzdFV0aWw7CisKK3B1YmxpYyBjbGFzcyBNYWdpY0NvbnN0YW50SW5zcGVjdGlvblRlc3QgZXh0ZW5kcyBJbnNwZWN0aW9uVGVzdENhc2UgeworICBAT3ZlcnJpZGUKKyAgcHJvdGVjdGVkIFN0cmluZyBnZXRUZXN0RGF0YVBhdGgoKSB7CisgICAgcmV0dXJuIEphdmFUZXN0VXRpbC5nZXRKYXZhVGVzdERhdGFQYXRoKCkgKyAiL2luc3BlY3Rpb24iOworICB9CisKKyAgQE92ZXJyaWRlCisgIHByb3RlY3RlZCBTZGsgZ2V0VGVzdFByb2plY3RTZGsoKSB7CisgICAgLy8gYWRkIEpESyBhbm5vdGF0aW9ucworICAgIFNkayBzZGsgPSBzdXBlci5nZXRUZXN0UHJvamVjdFNkaygpOworICAgIFNka01vZGlmaWNhdG9yIHNka01vZGlmaWNhdG9yID0gc2RrLmdldFNka01vZGlmaWNhdG9yKCk7CisgICAgVmlydHVhbEZpbGUgcm9vdCA9IExvY2FsRmlsZVN5c3RlbS5nZXRJbnN0YW5jZSgpLmZpbmRGaWxlQnlQYXRoKAorICAgICAgRmlsZVV0aWwudG9TeXN0ZW1JbmRlcGVuZGVudE5hbWUoUGxhdGZvcm1UZXN0VXRpbC5nZXRDb21tdW5pdHlQYXRoKCkpICsgIi9qYXZhL2pka0Fubm90YXRpb25zIik7CisgICAgaWYgKHJvb3QgIT0gbnVsbCkgeworICAgICAgc2RrTW9kaWZpY2F0b3IuYWRkUm9vdChyb290LCBBbm5vdGF0aW9uT3JkZXJSb290VHlwZS5nZXRJbnN0YW5jZSgpKTsKKyAgICAgIHNka01vZGlmaWNhdG9yLmNvbW1pdENoYW5nZXMoKTsKKyAgICB9CisKKyAgICByZXR1cm4gc2RrOworICB9CisKKyAgcHJpdmF0ZSB2b2lkIGRvVGVzdCgpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdCgibWFnaWMvIiArIGdldFRlc3ROYW1lKHRydWUpLCBuZXcgTG9jYWxJbnNwZWN0aW9uVG9vbFdyYXBwZXIobmV3IE1hZ2ljQ29uc3RhbnRJbnNwZWN0aW9uKCkpLCAiamRrIDEuNyIpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFNpbXBsZSgpIHRocm93cyBFeGNlcHRpb24geyBkb1Rlc3QoKTsgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNwZWN0aW9uL051bGxhYmxlU3R1ZmZJbnNwZWN0aW9uVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNwZWN0aW9uL051bGxhYmxlU3R1ZmZJbnNwZWN0aW9uVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcyOTlhY2QKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovY29kZUluc3BlY3Rpb24vTnVsbGFibGVTdHVmZkluc3BlY3Rpb25UZXN0LmphdmEKQEAgLTAsMCArMSw3OSBAQAorLyoKKyAqIENyZWF0ZWQgYnkgSW50ZWxsaUogSURFQS4KKyAqIFVzZXI6IEFsZXhleQorICogRGF0ZTogMDguMDcuMjAwNgorICogVGltZTogMDowNzo0NQorICovCitwYWNrYWdlIGNvbS5pbnRlbGxpai5jb2RlSW5zcGVjdGlvbjsKKworaW1wb3J0IGNvbS5pbnRlbGxpai5KYXZhVGVzdFV0aWw7CitpbXBvcnQgY29tLmludGVsbGlqLmNvZGVJbnNwZWN0aW9uLmV4LkxvY2FsSW5zcGVjdGlvblRvb2xXcmFwcGVyOworaW1wb3J0IGNvbS5pbnRlbGxpai5jb2RlSW5zcGVjdGlvbi5udWxsYWJsZS5OdWxsYWJsZVN0dWZmSW5zcGVjdGlvbjsKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS5hcHBsaWNhdGlvbi5BcHBsaWNhdGlvbk1hbmFnZXI7CitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkucHJvamVjdFJvb3RzLlNkazsKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS5wcm9qZWN0Um9vdHMuU2RrTW9kaWZpY2F0b3I7CitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkucm9vdHMuTW9kdWxlUm9vdE1hbmFnZXI7CitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkucm9vdHMuT3JkZXJSb290VHlwZTsKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS52ZnMuVmlydHVhbEZpbGU7CitpbXBvcnQgY29tLmludGVsbGlqLnRlc3RGcmFtZXdvcmsuSW5zcGVjdGlvblRlc3RDYXNlOworCitwdWJsaWMgY2xhc3MgTnVsbGFibGVTdHVmZkluc3BlY3Rpb25UZXN0IGV4dGVuZHMgSW5zcGVjdGlvblRlc3RDYXNlIHsKKyAgcHJpdmF0ZSBmaW5hbCBOdWxsYWJsZVN0dWZmSW5zcGVjdGlvbiBteUluc3BlY3Rpb24gPSBuZXcgTnVsbGFibGVTdHVmZkluc3BlY3Rpb24oKTsKKyAgeworICAgIG15SW5zcGVjdGlvbi5SRVBPUlRfQU5OT1RBVElPTl9OT1RfUFJPUEFHQVRFRF9UT19PVkVSUklERVJTID0gZmFsc2U7CisgIH0KKworICBAT3ZlcnJpZGUKKyAgcHJvdGVjdGVkIFN0cmluZyBnZXRUZXN0RGF0YVBhdGgoKSB7CisgICAgcmV0dXJuIEphdmFUZXN0VXRpbC5nZXRKYXZhVGVzdERhdGFQYXRoKCkgKyAiL2luc3BlY3Rpb24iOworICB9CisKKyAgcHJpdmF0ZSB2b2lkIGRvVGVzdCgpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdCgibnVsbGFibGVQcm9ibGVtcy8iICsgZ2V0VGVzdE5hbWUodHJ1ZSksIG5ldyBMb2NhbEluc3BlY3Rpb25Ub29sV3JhcHBlcihteUluc3BlY3Rpb24pLCJqYXZhIDEuNSIpOworICB9CisgIHByaXZhdGUgdm9pZCBkb1Rlc3QxNCgpIHRocm93cyBFeGNlcHRpb24geworICAgIG15RXhjbHVkZUFubm90YXRpb25zID0gdHJ1ZTsKKyAgICB0cnkgeworICAgICAgZG9UZXN0KCJudWxsYWJsZVByb2JsZW1zLyIgKyBnZXRUZXN0TmFtZSh0cnVlKSwgbmV3IExvY2FsSW5zcGVjdGlvblRvb2xXcmFwcGVyKG15SW5zcGVjdGlvbiksImphdmEgMS40Iik7CisgICAgfQorICAgIGZpbmFsbHkgeworICAgICAgbXlFeGNsdWRlQW5ub3RhdGlvbnMgPSBmYWxzZTsKKyAgICB9CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0UHJvYmxlbXMoKSB0aHJvd3MgRXhjZXB0aW9ueyBkb1Rlc3QoKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0UHJvYmxlbXMyKCkgdGhyb3dzIEV4Y2VwdGlvbnsgZG9UZXN0KCk7IH0KKyAgcHVibGljIHZvaWQgdGVzdE51bGxhYmxlRmllbGROb3RudWxsUGFyYW0oKSB0aHJvd3MgRXhjZXB0aW9ueyBkb1Rlc3QoKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0SmRrMTQoKSB0aHJvd3MgRXhjZXB0aW9ueyBkb1Rlc3QxNCgpOyB9CisKKyAgcHVibGljIHZvaWQgdGVzdEdldHRlclNldHRlclByb2JsZW1zKCkgdGhyb3dzIEV4Y2VwdGlvbnsgZG9UZXN0KCk7IH0KKyAgcHVibGljIHZvaWQgdGVzdE92ZXJyaWRkZW5NZXRob2RzKCkgdGhyb3dzIEV4Y2VwdGlvbnsKKyAgICBteUluc3BlY3Rpb24uUkVQT1JUX0FOTk9UQVRJT05fTk9UX1BST1BBR0FURURfVE9fT1ZFUlJJREVSUyA9IHRydWU7CisgICAgZG9UZXN0KCk7CisgIH0KKworICBwcml2YXRlIGJvb2xlYW4gbXlFeGNsdWRlQW5ub3RhdGlvbnMgPSBmYWxzZTsKKworICBAT3ZlcnJpZGUKKyAgcHJvdGVjdGVkIHZvaWQgc2V0dXBSb290TW9kZWwoU3RyaW5nIHRlc3REaXIsIFZpcnR1YWxGaWxlW10gc291cmNlRGlyLCBTdHJpbmcgc2RrTmFtZSkgeworICAgIHN1cGVyLnNldHVwUm9vdE1vZGVsKHRlc3REaXIsIHNvdXJjZURpciwgc2RrTmFtZSk7CisKKyAgICBpZiAobXlFeGNsdWRlQW5ub3RhdGlvbnMpIHsKKyAgICAgIGZpbmFsIFNkayBzZGsgPSBNb2R1bGVSb290TWFuYWdlci5nZXRJbnN0YW5jZShteU1vZHVsZSkuZ2V0U2RrKCk7CisgICAgICBhc3NlcnQgc2RrICE9IG51bGw7CisgICAgICBBcHBsaWNhdGlvbk1hbmFnZXIuZ2V0QXBwbGljYXRpb24oKS5ydW5Xcml0ZUFjdGlvbihuZXcgUnVubmFibGUoKSB7CisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgdm9pZCBydW4oKSB7CisgICAgICAgICAgZmluYWwgU2RrTW9kaWZpY2F0b3Igc2RrTW9kID0gc2RrLmdldFNka01vZGlmaWNhdG9yKCk7CisgICAgICAgICAgZm9yIChWaXJ0dWFsRmlsZSBmaWxlIDogc2RrTW9kLmdldFJvb3RzKE9yZGVyUm9vdFR5cGUuQ0xBU1NFUykpIHsKKyAgICAgICAgICAgIGlmICgiYW5ub3RhdGlvbnMuamFyIi5lcXVhbHMoZmlsZS5nZXROYW1lKCkpKSB7CisgICAgICAgICAgICAgIHNka01vZC5yZW1vdmVSb290KGZpbGUsIE9yZGVyUm9vdFR5cGUuQ0xBU1NFUyk7CisgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgIH0KKyAgICAgICAgICBzZGtNb2QuY29tbWl0Q2hhbmdlcygpOworICAgICAgICB9CisgICAgICB9KTsKKyAgICB9CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovY29kZUluc3BlY3Rpb24vTnVtZXJpY092ZXJmbG93VGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNwZWN0aW9uL051bWVyaWNPdmVyZmxvd1Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NWE3MWVjCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNwZWN0aW9uL051bWVyaWNPdmVyZmxvd1Rlc3QuamF2YQpAQCAtMCwwICsxLDIwIEBACitwYWNrYWdlIGNvbS5pbnRlbGxpai5jb2RlSW5zcGVjdGlvbjsKKworaW1wb3J0IGNvbS5pbnRlbGxpai5KYXZhVGVzdFV0aWw7CitpbXBvcnQgY29tLmludGVsbGlqLnRlc3RGcmFtZXdvcmsuSW5zcGVjdGlvblRlc3RDYXNlOworCitwdWJsaWMgY2xhc3MgTnVtZXJpY092ZXJmbG93VGVzdCBleHRlbmRzIEluc3BlY3Rpb25UZXN0Q2FzZSB7CisgIEBPdmVycmlkZQorICBwcm90ZWN0ZWQgU3RyaW5nIGdldFRlc3REYXRhUGF0aCgpIHsKKyAgICByZXR1cm4gSmF2YVRlc3RVdGlsLmdldEphdmFUZXN0RGF0YVBhdGgoKSArICIvaW5zcGVjdGlvbiI7CisgIH0KKworICBwcml2YXRlIHZvaWQgZG9UZXN0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KCJudW1lcmljT3ZlcmZsb3cvIiArIGdldFRlc3ROYW1lKHRydWUpLCBuZXcgTnVtZXJpY092ZXJmbG93SW5zcGVjdGlvbigpKTsKKyAgfQorCisKKyAgcHVibGljIHZvaWQgdGVzdFNpbXBsZSgpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdCgpOworICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovY29kZUluc3BlY3Rpb24vUGFyYW1ldGVyQ2FuQmVMb2NhbFRlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9jb2RlSW5zcGVjdGlvbi9QYXJhbWV0ZXJDYW5CZUxvY2FsVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQxMTU1N2EKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovY29kZUluc3BlY3Rpb24vUGFyYW1ldGVyQ2FuQmVMb2NhbFRlc3QuamF2YQpAQCAtMCwwICsxLDM2IEBACisvKgorICogQ29weXJpZ2h0IDIwMDAtMjAxMiBKZXRCcmFpbnMgcy5yLm8uCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworcGFja2FnZSBjb20uaW50ZWxsaWouY29kZUluc3BlY3Rpb247CisKK2ltcG9ydCBjb20uaW50ZWxsaWouSmF2YVRlc3RVdGlsOworaW1wb3J0IGNvbS5pbnRlbGxpai5jb2RlSW5zcGVjdGlvbi52YXJTY29wZUNhbkJlTmFycm93ZWQuUGFyYW1ldGVyQ2FuQmVMb2NhbEluc3BlY3Rpb247CitpbXBvcnQgY29tLmludGVsbGlqLnRlc3RGcmFtZXdvcmsuSW5zcGVjdGlvblRlc3RDYXNlOworCitwdWJsaWMgY2xhc3MgUGFyYW1ldGVyQ2FuQmVMb2NhbFRlc3QgZXh0ZW5kcyBJbnNwZWN0aW9uVGVzdENhc2UgeworICBAT3ZlcnJpZGUKKyAgcHJvdGVjdGVkIFN0cmluZyBnZXRUZXN0RGF0YVBhdGgoKSB7CisgICAgcmV0dXJuIEphdmFUZXN0VXRpbC5nZXRKYXZhVGVzdERhdGFQYXRoKCkgKyAiL2luc3BlY3Rpb24iOworICB9CisKKyAgcHJpdmF0ZSB2b2lkIGRvVGVzdCgpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdCgicGFyYW1ldGVyQ2FuQmVMb2NhbC8iICsgZ2V0VGVzdE5hbWUodHJ1ZSksIG5ldyBQYXJhbWV0ZXJDYW5CZUxvY2FsSW5zcGVjdGlvbigpKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RTaW1wbGUgKCkgdGhyb3dzIEV4Y2VwdGlvbiB7IGRvVGVzdCgpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RJZiAoKSB0aHJvd3MgRXhjZXB0aW9uIHsgZG9UZXN0KCk7IH0KKyAgcHVibGljIHZvaWQgdGVzdEZvciAoKSB0aHJvd3MgRXhjZXB0aW9uIHsgZG9UZXN0KCk7IH0KKyAgcHVibGljIHZvaWQgdGVzdFJlYWRPbmx5ICgpIHRocm93cyBFeGNlcHRpb24geyBkb1Rlc3QoKTsgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNwZWN0aW9uL1JlZHVuZGFudEFycmF5NFZhcmFyZ3NDYWxsSW5zcGVjdGlvblRlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9jb2RlSW5zcGVjdGlvbi9SZWR1bmRhbnRBcnJheTRWYXJhcmdzQ2FsbEluc3BlY3Rpb25UZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTI1ZmY0NAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9jb2RlSW5zcGVjdGlvbi9SZWR1bmRhbnRBcnJheTRWYXJhcmdzQ2FsbEluc3BlY3Rpb25UZXN0LmphdmEKQEAgLTAsMCArMSw3MyBAQAorLyoKKyAqIENvcHlyaWdodCAyMDAwLTIwMTAgSmV0QnJhaW5zIHMuci5vLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KK3BhY2thZ2UgY29tLmludGVsbGlqLmNvZGVJbnNwZWN0aW9uOworCitpbXBvcnQgY29tLmludGVsbGlqLkphdmFUZXN0VXRpbDsKK2ltcG9ydCBjb20uaW50ZWxsaWouY29kZUluc3BlY3Rpb24ubWlzY0dlbmVyaWNzLlJlZHVuZGFudEFycmF5Rm9yVmFyYXJnc0NhbGxJbnNwZWN0aW9uOworaW1wb3J0IGNvbS5pbnRlbGxpai50ZXN0RnJhbWV3b3JrLlVzZWZ1bFRlc3RDYXNlOworaW1wb3J0IGNvbS5pbnRlbGxpai50ZXN0RnJhbWV3b3JrLmZpeHR1cmVzLio7CitpbXBvcnQgY29tLmludGVsbGlqLnRlc3RGcmFtZXdvcmsuZml4dHVyZXMuaW1wbC5MaWdodFRlbXBEaXJUZXN0Rml4dHVyZUltcGw7CisKKy8qKgorICogVXNlcjogYW5uYQorICogRGF0ZTogMTEvMTMvMTAKKyAqLworcHVibGljIGNsYXNzIFJlZHVuZGFudEFycmF5NFZhcmFyZ3NDYWxsSW5zcGVjdGlvblRlc3QgZXh0ZW5kcyBVc2VmdWxUZXN0Q2FzZSB7CisgICBwcm90ZWN0ZWQgQ29kZUluc2lnaHRUZXN0Rml4dHVyZSBteUZpeHR1cmU7CisgIHByaXZhdGUgUmVkdW5kYW50QXJyYXlGb3JWYXJhcmdzQ2FsbEluc3BlY3Rpb24gbXlJbnNwZWN0aW9uOworCisgIEBPdmVycmlkZQorICBwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24geworICAgIHN1cGVyLnNldFVwKCk7CisgICAgSWRlYVRlc3RGaXh0dXJlRmFjdG9yeSBmYWN0b3J5ID0gSWRlYVRlc3RGaXh0dXJlRmFjdG9yeS5nZXRGaXh0dXJlRmFjdG9yeSgpOworICAgIFRlc3RGaXh0dXJlQnVpbGRlcjxJZGVhUHJvamVjdFRlc3RGaXh0dXJlPiBmaXh0dXJlQnVpbGRlciA9IGZhY3RvcnkuY3JlYXRlTGlnaHRGaXh0dXJlQnVpbGRlcihuZXcgRGVmYXVsdExpZ2h0UHJvamVjdERlc2NyaXB0b3IoKSk7CisgICAgZmluYWwgSWRlYVByb2plY3RUZXN0Rml4dHVyZSBmaXh0dXJlID0gZml4dHVyZUJ1aWxkZXIuZ2V0Rml4dHVyZSgpOworICAgIG15Rml4dHVyZSA9IElkZWFUZXN0Rml4dHVyZUZhY3RvcnkuZ2V0Rml4dHVyZUZhY3RvcnkoKS5jcmVhdGVDb2RlSW5zaWdodEZpeHR1cmUoZml4dHVyZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBMaWdodFRlbXBEaXJUZXN0Rml4dHVyZUltcGwodHJ1ZSkpOworICAgIG15SW5zcGVjdGlvbiA9IG5ldyBSZWR1bmRhbnRBcnJheUZvclZhcmFyZ3NDYWxsSW5zcGVjdGlvbigpOworICAgIG15Rml4dHVyZS5lbmFibGVJbnNwZWN0aW9ucyhteUluc3BlY3Rpb24pOworICAgIG15Rml4dHVyZS5zZXRVcCgpOworICAgIG15Rml4dHVyZS5zZXRUZXN0RGF0YVBhdGgoZ2V0VGVzdERhdGFQYXRoKCkpOworICB9CisKKyAgQE92ZXJyaWRlCisgIHByb3RlY3RlZCB2b2lkIHRlYXJEb3duKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgbXlGaXh0dXJlLnRlYXJEb3duKCk7CisgICAgbXlGaXh0dXJlID0gbnVsbDsKKyAgICBteUluc3BlY3Rpb24gPSBudWxsOworICAgIHN1cGVyLnRlYXJEb3duKCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0UHJlc2VydmVDb21tZW50cygpIHsKKyAgICBkb1Rlc3QoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RSZW1vdmVUYWlsaW5nQ29tbWFzKCkgeworICAgIGRvVGVzdCgpOworICB9CisKKyAgcHJpdmF0ZSB2b2lkIGRvVGVzdCgpIHsKKyAgICBteUZpeHR1cmUuY29uZmlndXJlQnlGaWxlKGdldFRlc3ROYW1lKGZhbHNlKSArICIuamF2YSIpOworICAgIG15Rml4dHVyZS5sYXVuY2hBY3Rpb24oYXNzZXJ0T25lRWxlbWVudChteUZpeHR1cmUuZmlsdGVyQXZhaWxhYmxlSW50ZW50aW9ucyhJbnNwZWN0aW9uc0J1bmRsZS5tZXNzYWdlKCJpbnNwZWN0aW9uLnJlZHVuZGFudC5hcnJheS5jcmVhdGlvbi5xdWlja2ZpeCIpKSkpOworICAgIG15Rml4dHVyZS5jaGVja1Jlc3VsdEJ5RmlsZShnZXRUZXN0TmFtZShmYWxzZSkgKyAiX2FmdGVyLmphdmEiKTsKKyAgfQorCisKKyAgcHJvdGVjdGVkIFN0cmluZyBnZXRUZXN0RGF0YVBhdGgoKSB7CisgICAgcmV0dXJuIEphdmFUZXN0VXRpbC5nZXRKYXZhVGVzdERhdGFQYXRoKCkgKyAiL2luc3BlY3Rpb24vcmVkdW5kYW50QXJyYXlGb3JWYXJhcmdzL3F1aWNrRml4IjsKKyAgfQorCit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNwZWN0aW9uL1JlZHVuZGFudEFycmF5Rm9yVmFyYXJnc0NhbGxJbnNwZWN0aW9uVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNwZWN0aW9uL1JlZHVuZGFudEFycmF5Rm9yVmFyYXJnc0NhbGxJbnNwZWN0aW9uVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFhNGVlZjgKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovY29kZUluc3BlY3Rpb24vUmVkdW5kYW50QXJyYXlGb3JWYXJhcmdzQ2FsbEluc3BlY3Rpb25UZXN0LmphdmEKQEAgLTAsMCArMSwyNiBAQAorcGFja2FnZSBjb20uaW50ZWxsaWouY29kZUluc3BlY3Rpb247CisKK2ltcG9ydCBjb20uaW50ZWxsaWouSmF2YVRlc3RVdGlsOworaW1wb3J0IGNvbS5pbnRlbGxpai5jb2RlSW5zcGVjdGlvbi5taXNjR2VuZXJpY3MuUmVkdW5kYW50QXJyYXlGb3JWYXJhcmdzQ2FsbEluc3BlY3Rpb247CitpbXBvcnQgY29tLmludGVsbGlqLmNvZGVJbnNwZWN0aW9uLmV4LkxvY2FsSW5zcGVjdGlvblRvb2xXcmFwcGVyOworaW1wb3J0IGNvbS5pbnRlbGxpai50ZXN0RnJhbWV3b3JrLkluc3BlY3Rpb25UZXN0Q2FzZTsKKworLyoqCisgKiBAYXV0aG9yIGNkcgorICovCitwdWJsaWMgY2xhc3MgUmVkdW5kYW50QXJyYXlGb3JWYXJhcmdzQ2FsbEluc3BlY3Rpb25UZXN0IGV4dGVuZHMgSW5zcGVjdGlvblRlc3RDYXNlIHsKKyAgQE92ZXJyaWRlCisgIHByb3RlY3RlZCBTdHJpbmcgZ2V0VGVzdERhdGFQYXRoKCkgeworICAgIHJldHVybiBKYXZhVGVzdFV0aWwuZ2V0SmF2YVRlc3REYXRhUGF0aCgpICsgIi9pbnNwZWN0aW9uIjsKKyAgfQorCisgIHByaXZhdGUgdm9pZCBkb1Rlc3QoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoInJlZHVuZGFudEFycmF5Rm9yVmFyYXJncy8iICsgZ2V0VGVzdE5hbWUodHJ1ZSksIG5ldyBMb2NhbEluc3BlY3Rpb25Ub29sV3JhcHBlcihuZXcgUmVkdW5kYW50QXJyYXlGb3JWYXJhcmdzQ2FsbEluc3BlY3Rpb24oKSksImphdmEgMS41Iik7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0SURFQURFVjE1MjE1KCkgdGhyb3dzIEV4Y2VwdGlvbiB7IGRvVGVzdCgpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RJREVBREVWMjU5MjMoKSB0aHJvd3MgRXhjZXB0aW9uIHsgZG9UZXN0KCk7IH0KKyAgcHVibGljIHZvaWQgdGVzdE5lc3RlZEFycmF5KCkgdGhyb3dzIEV4Y2VwdGlvbiB7IGRvVGVzdCgpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RDaGVja0VudW1Db25zdGFudCgpIHRocm93cyBFeGNlcHRpb24geyBkb1Rlc3QoKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0R2VuZXJpYygpIHRocm93cyBFeGNlcHRpb24geyBkb1Rlc3QoKTsgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNwZWN0aW9uL1JlZHVuZGFudENhc3QxNVRlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9jb2RlSW5zcGVjdGlvbi9SZWR1bmRhbnRDYXN0MTVUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGIyMGVjYQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9jb2RlSW5zcGVjdGlvbi9SZWR1bmRhbnRDYXN0MTVUZXN0LmphdmEKQEAgLTAsMCArMSw2MCBAQAorcGFja2FnZSBjb20uaW50ZWxsaWouY29kZUluc3BlY3Rpb247CisKK2ltcG9ydCBjb20uaW50ZWxsaWouY29kZUluc3BlY3Rpb24uZXguTG9jYWxJbnNwZWN0aW9uVG9vbFdyYXBwZXI7CitpbXBvcnQgY29tLmludGVsbGlqLmNvZGVJbnNwZWN0aW9uLnJlZHVuZGFudENhc3QuUmVkdW5kYW50Q2FzdEluc3BlY3Rpb247CitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkucHJvamVjdFJvb3RzLkphdmFTZGtWZXJzaW9uOworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLnByb2plY3RSb290cy5KYXZhVmVyc2lvblNlcnZpY2U7CitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkucHJvamVjdFJvb3RzLkphdmFWZXJzaW9uU2VydmljZUltcGw7CitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkucm9vdHMuTGFuZ3VhZ2VMZXZlbFByb2plY3RFeHRlbnNpb247CitpbXBvcnQgY29tLmludGVsbGlqLnBvbS5qYXZhLkxhbmd1YWdlTGV2ZWw7CitpbXBvcnQgY29tLmludGVsbGlqLnRlc3RGcmFtZXdvcmsuSW5zcGVjdGlvblRlc3RDYXNlOworCitwdWJsaWMgY2xhc3MgUmVkdW5kYW50Q2FzdDE1VGVzdCBleHRlbmRzIEluc3BlY3Rpb25UZXN0Q2FzZSB7CisgIEBPdmVycmlkZQorICBwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24geworICAgIHN1cGVyLnNldFVwKCk7CisgICAgTGFuZ3VhZ2VMZXZlbFByb2plY3RFeHRlbnNpb24uZ2V0SW5zdGFuY2UobXlKYXZhRmFjYWRlLmdldFByb2plY3QoKSkuc2V0TGFuZ3VhZ2VMZXZlbChMYW5ndWFnZUxldmVsLkpES18xXzUpOworICB9CisKKworICBwcml2YXRlIHZvaWQgZG9UZXN0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZmluYWwgTG9jYWxJbnNwZWN0aW9uVG9vbFdyYXBwZXIgdG9vbCA9IG5ldyBMb2NhbEluc3BlY3Rpb25Ub29sV3JhcHBlcihuZXcgUmVkdW5kYW50Q2FzdEluc3BlY3Rpb24oKSk7CisgICAgZG9UZXN0KCJyZWR1bmRhbnRDYXN0L2dlbmVyaWNzLyIgKyBnZXRUZXN0TmFtZShmYWxzZSksIHRvb2wsICJqYXZhIDEuNSIpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEJveGluZ0luUmVmKCkgdGhyb3dzIEV4Y2VwdGlvbiB7IGRvVGVzdCgpOyB9CisKKyAgcHVibGljIHZvaWQgdGVzdEluZmVyZW5jZTEoKSB0aHJvd3MgRXhjZXB0aW9uIHsgZG9UZXN0KCk7IH0KKworICBwdWJsaWMgdm9pZCB0ZXN0SW5mZXJlbmNlMigpIHRocm93cyBFeGNlcHRpb24geyBkb1Rlc3QoKTsgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RJbmZlcmVuY2UzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7IGRvVGVzdCgpOyB9CisKKyAgcHVibGljIHZvaWQgdGVzdE51bGxJblZhcmFyZ3NQYXJhbWV0ZXIoKSB0aHJvd3MgRXhjZXB0aW9uIHsgZG9UZXN0KCk7IH0KKworICBwdWJsaWMgdm9pZCB0ZXN0V3JhcHBlclRvUHJpbWl0aXZlQ2FzdCgpIHRocm93cyBFeGNlcHRpb24geyBkb1Rlc3QoKTsgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RFbnVtQ29uc3RhbnQoKSB0aHJvd3MgRXhjZXB0aW9uIHsgZG9UZXN0KCk7IH0KKworICBwdWJsaWMgdm9pZCB0ZXN0UmF3Q2FzdCgpIHRocm93cyBFeGNlcHRpb24geyBkb1Rlc3QoKTt9CisgIHB1YmxpYyB2b2lkIHRlc3RDYXN0VG9VbmJvdW5kV2lsZGNhcmQoKSB0aHJvd3MgRXhjZXB0aW9uIHsgZG9UZXN0KCk7fQorCisgIHB1YmxpYyB2b2lkIHRlc3RSYXdDYXN0c1RvQXZvaWRJbmNvbXBhdGliaWxpdHkoKSB0aHJvd3MgRXhjZXB0aW9uIHsgZG9UZXN0KCk7fQorICAKKyAgcHVibGljIHZvaWQgdGVzdElERUEyMjg5OSgpIHRocm93cyBFeGNlcHRpb24geyBkb1Rlc3QoKTt9CisgIHB1YmxpYyB2b2lkIHRlc3RSYXdDYXN0MSgpIHRocm93cyBFeGNlcHRpb24geyBkb1Rlc3QoKTt9CisgIHB1YmxpYyB2b2lkIHRlc3RJbmZlcmVuY2VGcm9tQ2FzdCgpIHRocm93cyBFeGNlcHRpb24geyBkb1Rlc3QoKTt9CisKKyAgcHVibGljIHZvaWQgdGVzdFR5cGVQYXJhbWV0ZXJBY2Nlc3NDaGVja3NKYXZhNygpIHRocm93cyBFeGNlcHRpb24geworICAgICgoSmF2YVZlcnNpb25TZXJ2aWNlSW1wbClKYXZhVmVyc2lvblNlcnZpY2UuZ2V0SW5zdGFuY2UoKSkuc2V0VGVzdFZlcnNpb24oSmF2YVNka1ZlcnNpb24uSkRLXzFfNywgZ2V0VGVzdFJvb3REaXNwb3NhYmxlKCkpOworICAgIGRvVGVzdCgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdElnbm9yZSgpIHRocm93cyBFeGNlcHRpb24geworICAgIGZpbmFsIFJlZHVuZGFudENhc3RJbnNwZWN0aW9uIGNhc3RJbnNwZWN0aW9uID0gbmV3IFJlZHVuZGFudENhc3RJbnNwZWN0aW9uKCk7CisgICAgY2FzdEluc3BlY3Rpb24uSUdOT1JFX0FOTk9UQVRFRF9NRVRIT0RTID0gdHJ1ZTsKKyAgICBjYXN0SW5zcGVjdGlvbi5JR05PUkVfU1VTUElDSU9VU19NRVRIT0RfQ0FMTFMgPSB0cnVlOworICAgIGZpbmFsIExvY2FsSW5zcGVjdGlvblRvb2xXcmFwcGVyIHRvb2wgPSBuZXcgTG9jYWxJbnNwZWN0aW9uVG9vbFdyYXBwZXIoY2FzdEluc3BlY3Rpb24pOworICAgIGRvVGVzdCgicmVkdW5kYW50Q2FzdC9nZW5lcmljcy8iICsgZ2V0VGVzdE5hbWUoZmFsc2UpLCB0b29sLCAiamF2YSAxLjUiKTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9jb2RlSW5zcGVjdGlvbi9SZWR1bmRhbnRDYXN0MThUZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovY29kZUluc3BlY3Rpb24vUmVkdW5kYW50Q2FzdDE4VGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdkZDgxOWQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovY29kZUluc3BlY3Rpb24vUmVkdW5kYW50Q2FzdDE4VGVzdC5qYXZhCkBAIC0wLDAgKzEsNDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwMC0yMDEyIEpldEJyYWlucyBzLnIuby4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCitwYWNrYWdlIGNvbS5pbnRlbGxpai5jb2RlSW5zcGVjdGlvbjsKKworaW1wb3J0IGNvbS5pbnRlbGxpai5jb2RlSW5zcGVjdGlvbi5leC5Mb2NhbEluc3BlY3Rpb25Ub29sV3JhcHBlcjsKK2ltcG9ydCBjb20uaW50ZWxsaWouY29kZUluc3BlY3Rpb24ucmVkdW5kYW50Q2FzdC5SZWR1bmRhbnRDYXN0SW5zcGVjdGlvbjsKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS5wcm9qZWN0Um9vdHMuU2RrOworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLnByb2plY3RSb290cy5pbXBsLkphdmFTZGtJbXBsOworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLnJvb3RzLkxhbmd1YWdlTGV2ZWxQcm9qZWN0RXh0ZW5zaW9uOworaW1wb3J0IGNvbS5pbnRlbGxpai5wb20uamF2YS5MYW5ndWFnZUxldmVsOworaW1wb3J0IGNvbS5pbnRlbGxpai50ZXN0RnJhbWV3b3JrLklkZWFUZXN0VXRpbDsKK2ltcG9ydCBjb20uaW50ZWxsaWoudGVzdEZyYW1ld29yay5JbnNwZWN0aW9uVGVzdENhc2U7CisKK3B1YmxpYyBjbGFzcyBSZWR1bmRhbnRDYXN0MThUZXN0IGV4dGVuZHMgSW5zcGVjdGlvblRlc3RDYXNlIHsKKyAgcHJpdmF0ZSB2b2lkIGRvVGVzdCgpIHRocm93cyBFeGNlcHRpb24geworICAgIGZpbmFsIExvY2FsSW5zcGVjdGlvblRvb2xXcmFwcGVyIHRvb2wgPSBuZXcgTG9jYWxJbnNwZWN0aW9uVG9vbFdyYXBwZXIobmV3IFJlZHVuZGFudENhc3RJbnNwZWN0aW9uKCkpOworICAgIGRvVGVzdCgicmVkdW5kYW50Q2FzdC9sYW1iZGEvIiArIGdldFRlc3ROYW1lKGZhbHNlKSwgdG9vbCwgImphdmEgMS41Iik7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0TGFtYmRhQ29udGV4dCgpIHRocm93cyBFeGNlcHRpb24geyBkb1Rlc3QoKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0TWV0aG9kUmVmQ29udGV4dCgpIHRocm93cyBFeGNlcHRpb24geyBkb1Rlc3QoKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0RXhwZWN0ZWRTdXBlcnR5cGUoKSB0aHJvd3MgRXhjZXB0aW9uIHsgZG9UZXN0KCk7IH0KKworICBwcm90ZWN0ZWQgU2RrIGdldFRlc3RQcm9qZWN0U2RrKCkgeworICAgIFNkayBzZGsgPSBJZGVhVGVzdFV0aWwuZ2V0TW9ja0pkazE3KCk7CisgICAgTGFuZ3VhZ2VMZXZlbFByb2plY3RFeHRlbnNpb24uZ2V0SW5zdGFuY2UoZ2V0UHJvamVjdCgpKS5zZXRMYW5ndWFnZUxldmVsKExhbmd1YWdlTGV2ZWwuSkRLXzFfOCk7CisgICAgcmV0dXJuIHNkazsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9jb2RlSW5zcGVjdGlvbi9SZWR1bmRhbnRDYXN0VGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNwZWN0aW9uL1JlZHVuZGFudENhc3RUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTM3ZGMxZAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9jb2RlSW5zcGVjdGlvbi9SZWR1bmRhbnRDYXN0VGVzdC5qYXZhCkBAIC0wLDAgKzEsOTggQEAKK3BhY2thZ2UgY29tLmludGVsbGlqLmNvZGVJbnNwZWN0aW9uOworCitpbXBvcnQgY29tLmludGVsbGlqLmNvZGVJbnNwZWN0aW9uLnJlZHVuZGFudENhc3QuUmVkdW5kYW50Q2FzdEluc3BlY3Rpb247CitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkucm9vdHMuTGFuZ3VhZ2VMZXZlbFByb2plY3RFeHRlbnNpb247CitpbXBvcnQgY29tLmludGVsbGlqLnBvbS5qYXZhLkxhbmd1YWdlTGV2ZWw7CitpbXBvcnQgY29tLmludGVsbGlqLnRlc3RGcmFtZXdvcmsuSW5zcGVjdGlvblRlc3RDYXNlOworCitwdWJsaWMgY2xhc3MgUmVkdW5kYW50Q2FzdFRlc3QgZXh0ZW5kcyBJbnNwZWN0aW9uVGVzdENhc2UgeworCisgIEBPdmVycmlkZQorICBwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24geworICAgIHN1cGVyLnNldFVwKCk7CisgICAgTGFuZ3VhZ2VMZXZlbFByb2plY3RFeHRlbnNpb24uZ2V0SW5zdGFuY2UoZ2V0UHJvamVjdCgpKS5zZXRMYW5ndWFnZUxldmVsKExhbmd1YWdlTGV2ZWwuSkRLXzFfMyk7CisgIH0KKworICBwcml2YXRlIHZvaWQgZG9UZXN0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KCJyZWR1bmRhbnRDYXN0LyIgKyBnZXRUZXN0TmFtZShmYWxzZSksIG5ldyBSZWR1bmRhbnRDYXN0SW5zcGVjdGlvbigpKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RBbWJpZ291c1Bhcm0xKCkgdGhyb3dzIEV4Y2VwdGlvbiB7IGRvVGVzdCgpOyB9CisKKyAgcHVibGljIHZvaWQgdGVzdEFtYmlnb3VzUGFybTIoKSB0aHJvd3MgRXhjZXB0aW9uIHsgZG9UZXN0KCk7IH0KKworICBwdWJsaWMgdm9pZCB0ZXN0QW1iaWdvdXNQYXJtMygpIHRocm93cyBFeGNlcHRpb24geyBkb1Rlc3QoKTsgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RBbWJpZ291c1Bhcm00KCkgdGhyb3dzIEV4Y2VwdGlvbiB7IGRvVGVzdCgpOyB9CisKKyAgcHVibGljIHZvaWQgdGVzdEFtYmlnb3VzUGFybTUoKSB0aHJvd3MgRXhjZXB0aW9uIHsgZG9UZXN0KCk7IH0KKworICBwdWJsaWMgdm9pZCB0ZXN0T25lT2ZUd28oKSB0aHJvd3MgRXhjZXB0aW9uIHsgZG9UZXN0KCk7IH0KKworICBwdWJsaWMgdm9pZCB0ZXN0QW55T2ZUd28oKSB0aHJvd3MgRXhjZXB0aW9uIHsgZG9UZXN0KCk7IH0KKworICBwdWJsaWMgdm9pZCB0ZXN0TmV3MSgpIHRocm93cyBFeGNlcHRpb24geyBkb1Rlc3QoKTsgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RBc3NpZ25tZW50MSgpIHRocm93cyBFeGNlcHRpb24geyBkb1Rlc3QoKTsgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RJbml0aWFsaXplcjEoKSB0aHJvd3MgRXhjZXB0aW9uIHsgZG9UZXN0KCk7IH0KKworICBwdWJsaWMgdm9pZCB0ZXN0U2hvcnRUb1Nob3J0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7IGRvVGVzdCgpOyB9CisKKyAgcHVibGljIHZvaWQgdGVzdFZpcnR1YWxNZXRob2QxKCkgdGhyb3dzIEV4Y2VwdGlvbiB7IGRvVGVzdCgpOyB9CisKKyAgcHVibGljIHZvaWQgdGVzdFZpcnR1YWxNZXRob2QyKCkgdGhyb3dzIEV4Y2VwdGlvbiB7IGRvVGVzdCgpOyB9CisKKyAgcHVibGljIHZvaWQgdGVzdFZpcnR1YWxNZXRob2QzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7IGRvVGVzdCgpOyB9CisKKyAgcHVibGljIHZvaWQgdGVzdERvdWJsZUNhc3QxKCkgdGhyb3dzIEV4Y2VwdGlvbiB7IGRvVGVzdCgpOyB9CisKKyAgcHVibGljIHZvaWQgdGVzdERvdWJsZUNhc3QyKCkgdGhyb3dzIEV4Y2VwdGlvbiB7IGRvVGVzdCgpOyB9CisKKyAgcHVibGljIHZvaWQgdGVzdERvdWJsZUNhc3QzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7IGRvVGVzdCgpOyB9CisKKyAgcHVibGljIHZvaWQgdGVzdERvdWJsZUNhc3Q0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7IGRvVGVzdCgpOyB9CisKKyAgcHVibGljIHZvaWQgdGVzdERvdWJsZUNhc3Q1KCkgdGhyb3dzIEV4Y2VwdGlvbiB7IGRvVGVzdCgpOyB9CisKKyAgcHVibGljIHZvaWQgdGVzdFNob3J0VnNJbnQoKSB0aHJvd3MgRXhjZXB0aW9uIHsgZG9UZXN0KCk7IH0KKworICBwdWJsaWMgdm9pZCB0ZXN0VHJ1bmNhdGlvbigpIHRocm93cyBFeGNlcHRpb24geyBkb1Rlc3QoKTsgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RJbnRUb0RvdWJsZSgpIHRocm93cyBFeGNlcHRpb24geyBkb1Rlc3QoKTsgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RTQ1I2OTA3KCkgdGhyb3dzIEV4Y2VwdGlvbiB7IGRvVGVzdCgpOyB9CisKKyAgcHVibGljIHZvaWQgdGVzdFNDUjExNTU1KCkgdGhyb3dzIEV4Y2VwdGlvbiB7IGRvVGVzdCgpOyB9CisKKyAgcHVibGljIHZvaWQgdGVzdFNDUjEzMzk3KCkgdGhyb3dzIEV4Y2VwdGlvbiB7IGRvVGVzdCgpOyB9CisKKyAgcHVibGljIHZvaWQgdGVzdFNDUjE0NTAyKCkgdGhyb3dzIEV4Y2VwdGlvbiB7IGRvVGVzdCgpOyB9CisKKyAgcHVibGljIHZvaWQgdGVzdFNDUjE0NTU5KCkgdGhyb3dzIEV4Y2VwdGlvbiB7IGRvVGVzdCgpOyB9CisKKyAgcHVibGljIHZvaWQgdGVzdFNDUjE1MjM2KCkgdGhyb3dzIEV4Y2VwdGlvbiB7IGRvVGVzdCgpOyB9CisKKyAgcHVibGljIHZvaWQgdGVzdENvbXBhcmluZ1RvTnVsbCgpIHRocm93cyBFeGNlcHRpb24geyBkb1Rlc3QoKTsgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RJbmFjY2Vzc2libGUoKSB0aHJvd3MgRXhjZXB0aW9uIHsgZG9UZXN0KCk7IH0KKworICBwdWJsaWMgdm9pZCB0ZXN0SW5Db25kaXRpb25hbCgpIHRocm93cyBFeGNlcHRpb24geyBkb1Rlc3QoKTsgfQorCisgIHB1YmxpYyB2b2lkIHRlc3REaWZmZXJlbnRGaWVsZHMoKSB0aHJvd3MgRXhjZXB0aW9uIHsgZG9UZXN0KCk7IH0KKworICBwdWJsaWMgdm9pZCB0ZXN0TmVzdGVkVGhpbmdzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7IGRvVGVzdCgpOyB9CisKKyAgcHVibGljIHZvaWQgdGVzdElERUFERVY2ODE4KCkgdGhyb3dzIEV4Y2VwdGlvbiB7IGRvVGVzdCgpOyB9CisKKyAgcHVibGljIHZvaWQgdGVzdElERUFERVYxNTE3MCgpIHRocm93cyBFeGNlcHRpb24geyBkb1Rlc3QoKTsgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RJREVBREVWMjU2NzUoKSB0aHJvd3MgRXhjZXB0aW9uIHsgZG9UZXN0KCk7IH0KKyAgcHVibGljIHZvaWQgdGVzdEZpZWxkQWNjZXNzT25UaGVMZWZ0T2ZBc3NpZ25tZW50KCkgdGhyb3dzIEV4Y2VwdGlvbiB7IGRvVGVzdCgpOyB9CisgIAorICBwdWJsaWMgdm9pZCB0ZXN0TmVzdGVkQ2FzdCgpIHRocm93cyBFeGNlcHRpb24geyBkb1Rlc3QoKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0UHJpbWl0aXZlSW5zaWRlU3luY2hyb25pemVkKCkgdGhyb3dzIEV4Y2VwdGlvbiB7IGRvVGVzdCgpOyB9CisKKyAgcHVibGljIHZvaWQgdGVzdEluQ29uZGl0aW9uYWxQcmVzZXJ2ZVJlc29sdmUoKSB0aHJvd3MgRXhjZXB0aW9uIHsgZG9UZXN0KCk7fQorICBwdWJsaWMgdm9pZCB0ZXN0QXJyYXlBY2Nlc3MoKSB0aHJvd3MgRXhjZXB0aW9uIHsgZG9UZXN0KCk7fQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNwZWN0aW9uL1JlZHVuZGFudFN1cHByZXNzVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNwZWN0aW9uL1JlZHVuZGFudFN1cHByZXNzVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjliZTE2OGMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovY29kZUluc3BlY3Rpb24vUmVkdW5kYW50U3VwcHJlc3NUZXN0LmphdmEKQEAgLTAsMCArMSw0NSBAQAorcGFja2FnZSBjb20uaW50ZWxsaWouY29kZUluc3BlY3Rpb247CisKK2ltcG9ydCBjb20uaW50ZWxsaWouY29kZUluc3BlY3Rpb24uZW1wdHlNZXRob2QuRW1wdHlNZXRob2RJbnNwZWN0aW9uOworaW1wb3J0IGNvbS5pbnRlbGxpai5jb2RlSW5zcGVjdGlvbi5leC4qOworaW1wb3J0IGNvbS5pbnRlbGxpai5jb2RlSW5zcGVjdGlvbi5pMThuLkkxOG5JbnNwZWN0aW9uOworaW1wb3J0IGNvbS5pbnRlbGxpai5wc2kuUHNpRWxlbWVudDsKK2ltcG9ydCBjb20uaW50ZWxsaWoudGVzdEZyYW1ld29yay5JbnNwZWN0aW9uVGVzdENhc2U7CisKK3B1YmxpYyBjbGFzcyBSZWR1bmRhbnRTdXBwcmVzc1Rlc3QgZXh0ZW5kcyBJbnNwZWN0aW9uVGVzdENhc2UgeworICBwcml2YXRlIEdsb2JhbEluc3BlY3Rpb25Ub29sV3JhcHBlciBteVdyYXBwZXI7CisgIHByaXZhdGUgSW5zcGVjdGlvblRvb2xbXSBteUluc3BlY3Rpb25Ub29sczsKKworICBAT3ZlcnJpZGUKKyAgcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBzdXBlci5zZXRVcCgpOworICAgIEluc3BlY3Rpb25Ub29sUmVnaXN0cmFyLmdldEluc3RhbmNlKCkuZW5zdXJlSW5pdGlhbGl6ZWQoKTsKKyAgICBteUluc3BlY3Rpb25Ub29scyA9IG5ldyBJbnNwZWN0aW9uVG9vbFtde25ldyBMb2NhbEluc3BlY3Rpb25Ub29sV3JhcHBlcihuZXcgSTE4bkluc3BlY3Rpb24oKSksCisgICAgICBuZXcgR2xvYmFsSW5zcGVjdGlvblRvb2xXcmFwcGVyKG5ldyBFbXB0eU1ldGhvZEluc3BlY3Rpb24oKSl9OworCisgICAgbXlXcmFwcGVyID0gbmV3IEdsb2JhbEluc3BlY3Rpb25Ub29sV3JhcHBlcihuZXcgUmVkdW5kYW50U3VwcHJlc3NJbnNwZWN0aW9uKCkgeworICAgICAgQE92ZXJyaWRlCisgICAgICBwcm90ZWN0ZWQgSW5zcGVjdGlvblRvb2xbXSBnZXRJbnNwZWN0aW9uVG9vbHMoUHNpRWxlbWVudCBwc2lFbGVtZW50LCBJbnNwZWN0aW9uTWFuYWdlciBtYW5hZ2VyKSB7CisgICAgICAgIHJldHVybiBteUluc3BlY3Rpb25Ub29sczsKKyAgICAgIH0KKyAgICB9KTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3REZWZhdWx0RmlsZSgpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdCgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFN1cHByZXNzQWxsKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgdHJ5IHsKKyAgICAgICgoUmVkdW5kYW50U3VwcHJlc3NJbnNwZWN0aW9uKW15V3JhcHBlci5nZXRUb29sKCkpLklHTk9SRV9BTEwgPSB0cnVlOworICAgICAgZG9UZXN0KCk7CisgICAgfQorICAgIGZpbmFsbHkgeworICAgICAgKChSZWR1bmRhbnRTdXBwcmVzc0luc3BlY3Rpb24pbXlXcmFwcGVyLmdldFRvb2woKSkuSUdOT1JFX0FMTCA9IGZhbHNlOworICAgIH0KKyAgfQorCisgIHByaXZhdGUgdm9pZCBkb1Rlc3QoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoInJlZHVuZGFudFN1cHByZXNzLyIgKyBnZXRUZXN0TmFtZSh0cnVlKSwgbXlXcmFwcGVyLCJqYXZhIDEuNSIsdHJ1ZSk7CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9jb2RlSW5zcGVjdGlvbi9SZWR1bmRhbnRUaHJvd1Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9jb2RlSW5zcGVjdGlvbi9SZWR1bmRhbnRUaHJvd1Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMTAxN2QyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNwZWN0aW9uL1JlZHVuZGFudFRocm93VGVzdC5qYXZhCkBAIC0wLDAgKzEsNjMgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwMC0yMDEyIEpldEJyYWlucyBzLnIuby4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCitwYWNrYWdlIGNvbS5pbnRlbGxpai5jb2RlSW5zcGVjdGlvbjsKKworaW1wb3J0IGNvbS5pbnRlbGxpai5KYXZhVGVzdFV0aWw7CitpbXBvcnQgY29tLmludGVsbGlqLmNvZGVJbnNwZWN0aW9uLnVubmVlZGVkVGhyb3dzLlJlZHVuZGFudFRocm93czsKK2ltcG9ydCBjb20uaW50ZWxsaWoudGVzdEZyYW1ld29yay5JbnNwZWN0aW9uVGVzdENhc2U7CisKK3B1YmxpYyBjbGFzcyBSZWR1bmRhbnRUaHJvd1Rlc3QgZXh0ZW5kcyBJbnNwZWN0aW9uVGVzdENhc2UgeworICBAT3ZlcnJpZGUKKyAgcHJvdGVjdGVkIFN0cmluZyBnZXRUZXN0RGF0YVBhdGgoKSB7CisgICAgcmV0dXJuIEphdmFUZXN0VXRpbC5nZXRKYXZhVGVzdERhdGFQYXRoKCkgKyAiL2luc3BlY3Rpb24iOworICB9CisKKyAgcHJpdmF0ZSB2b2lkIGRvVGVzdCgpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdChmYWxzZSk7CisgIH0KKworICBwcml2YXRlIHZvaWQgZG9UZXN0KGJvb2xlYW4gY2hlY2tSYW5nZSkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZmluYWwgUmVkdW5kYW50VGhyb3dzIHRvb2wgPSBuZXcgUmVkdW5kYW50VGhyb3dzKCk7CisgICAgZG9UZXN0KCJyZWR1bmRhbnRUaHJvdy8iICsgZ2V0VGVzdE5hbWUoZmFsc2UpLCB0b29sLCBjaGVja1JhbmdlKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RTQ1I4MzIyKCkgdGhyb3dzIEV4Y2VwdGlvbiB7IGRvVGVzdCgpOyB9CisKKyAgcHVibGljIHZvaWQgdGVzdFNDUjY4NTgoKSB0aHJvd3MgRXhjZXB0aW9uIHsgZG9UZXN0KCk7IH0KKworICBwdWJsaWMgdm9pZCB0ZXN0U0NSNjg1OEJ5UmFuZ2UoKSB0aHJvd3MgRXhjZXB0aW9uIHsgZG9UZXN0KHRydWUpOyB9CisKKyAgcHVibGljIHZvaWQgdGVzdFNDUjE0NTQzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7IGRvVGVzdCgpOyB9CisKKyAgcHVibGljIHZvaWQgdGVzdFJlbW90ZSgpIHRocm93cyBFeGNlcHRpb24geyBkb1Rlc3QoKTsgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RFbnRyeVBvaW50KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZmluYWwgUmVkdW5kYW50VGhyb3dzIHRvb2wgPSBuZXcgUmVkdW5kYW50VGhyb3dzKCk7CisgICAgZG9UZXN0KCJyZWR1bmRhbnRUaHJvdy8iICsgZ2V0VGVzdE5hbWUodHJ1ZSksIHRvb2wsIGZhbHNlLCB0cnVlKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RJbmhlcml0ZWQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RJbXBsaWNpdFN1cGVyKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0U2VsZkNhbGwoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoKTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNwZWN0aW9uL1JlZHVuZGFudFR5cGVBcmdzSW5zcGVjdGlvblRlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9jb2RlSW5zcGVjdGlvbi9SZWR1bmRhbnRUeXBlQXJnc0luc3BlY3Rpb25UZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTViZTg4NgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9jb2RlSW5zcGVjdGlvbi9SZWR1bmRhbnRUeXBlQXJnc0luc3BlY3Rpb25UZXN0LmphdmEKQEAgLTAsMCArMSwzMiBAQAorLyoKKyAqIFVzZXI6IGFubmEKKyAqIERhdGU6IDE5LUFwci0yMDEwCisgKi8KK3BhY2thZ2UgY29tLmludGVsbGlqLmNvZGVJbnNwZWN0aW9uOworCitpbXBvcnQgY29tLmludGVsbGlqLkphdmFUZXN0VXRpbDsKK2ltcG9ydCBjb20uaW50ZWxsaWouY29kZUluc3BlY3Rpb24ubWlzY0dlbmVyaWNzLlJlZHVuZGFudFR5cGVBcmdzSW5zcGVjdGlvbjsKK2ltcG9ydCBjb20uaW50ZWxsaWoudGVzdEZyYW1ld29yay5idWlsZGVycy5KYXZhTW9kdWxlRml4dHVyZUJ1aWxkZXI7CitpbXBvcnQgY29tLmludGVsbGlqLnRlc3RGcmFtZXdvcmsuZml4dHVyZXMuSmF2YUNvZGVJbnNpZ2h0Rml4dHVyZVRlc3RDYXNlOworCitwdWJsaWMgY2xhc3MgUmVkdW5kYW50VHlwZUFyZ3NJbnNwZWN0aW9uVGVzdCBleHRlbmRzIEphdmFDb2RlSW5zaWdodEZpeHR1cmVUZXN0Q2FzZSB7CisgIEBPdmVycmlkZQorICBwcm90ZWN0ZWQgdm9pZCB0dW5lRml4dHVyZShKYXZhTW9kdWxlRml4dHVyZUJ1aWxkZXIgbW9kdWxlQnVpbGRlcikgeworICAgIG1vZHVsZUJ1aWxkZXIuc2V0TW9ja0pka0xldmVsKEphdmFNb2R1bGVGaXh0dXJlQnVpbGRlci5Nb2NrSmRrTGV2ZWwuamRrMTUpOworICB9CisKKyAgQE92ZXJyaWRlCisgIHByb3RlY3RlZCBTdHJpbmcgZ2V0VGVzdERhdGFQYXRoKCkgeworICAgIHJldHVybiBKYXZhVGVzdFV0aWwuZ2V0SmF2YVRlc3REYXRhUGF0aCgpICsgIi9pbnNwZWN0aW9uL3JlZHVuZGFudFR5cGVBcmdzLyI7CisgIH0KKworICBwcml2YXRlIHZvaWQgZG9UZXN0KCkgdGhyb3dzIFRocm93YWJsZSB7CisgICAgZmluYWwgUmVkdW5kYW50VHlwZUFyZ3NJbnNwZWN0aW9uIGluc3BlY3Rpb24gPSBuZXcgUmVkdW5kYW50VHlwZUFyZ3NJbnNwZWN0aW9uKCk7CisgICAgbXlGaXh0dXJlLmVuYWJsZUluc3BlY3Rpb25zKGluc3BlY3Rpb24pOworICAgIG15Rml4dHVyZS50ZXN0SGlnaGxpZ2h0aW5nKHRydWUsIGZhbHNlLCBmYWxzZSwgZ2V0VGVzdE5hbWUoZmFsc2UpICsgIi5qYXZhIik7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0UmV0dXJuUHJpbWl0aXZlVHlwZXMoKSB0aHJvd3MgVGhyb3dhYmxlIHsgLy8gamF2YWMgbm9uLWJveGluZzogSURFQS01Mzk4NAorICAgIGRvVGVzdCgpOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNwZWN0aW9uL1NhbWVQYXJhbWV0ZXJWYWx1ZVRlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9jb2RlSW5zcGVjdGlvbi9TYW1lUGFyYW1ldGVyVmFsdWVUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWYxODkwYQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9jb2RlSW5zcGVjdGlvbi9TYW1lUGFyYW1ldGVyVmFsdWVUZXN0LmphdmEKQEAgLTAsMCArMSwzNCBAQAorcGFja2FnZSBjb20uaW50ZWxsaWouY29kZUluc3BlY3Rpb247CisKK2ltcG9ydCBjb20uaW50ZWxsaWouSmF2YVRlc3RVdGlsOworaW1wb3J0IGNvbS5pbnRlbGxpai5jb2RlSW5zcGVjdGlvbi5zYW1lUGFyYW1ldGVyVmFsdWUuU2FtZVBhcmFtZXRlclZhbHVlSW5zcGVjdGlvbjsKK2ltcG9ydCBjb20uaW50ZWxsaWoudGVzdEZyYW1ld29yay5JbnNwZWN0aW9uVGVzdENhc2U7CisKK3B1YmxpYyBjbGFzcyBTYW1lUGFyYW1ldGVyVmFsdWVUZXN0IGV4dGVuZHMgSW5zcGVjdGlvblRlc3RDYXNlIHsKKyAgcHJpdmF0ZSBmaW5hbCBTYW1lUGFyYW1ldGVyVmFsdWVJbnNwZWN0aW9uIG15VG9vbCA9IG5ldyBTYW1lUGFyYW1ldGVyVmFsdWVJbnNwZWN0aW9uKCk7CisKKyAgQE92ZXJyaWRlCisgIHByb3RlY3RlZCBTdHJpbmcgZ2V0VGVzdERhdGFQYXRoKCkgeworICAgIHJldHVybiBKYXZhVGVzdFV0aWwuZ2V0SmF2YVRlc3REYXRhUGF0aCgpICsgIi9pbnNwZWN0aW9uIjsKKyAgfQorCisgIHByaXZhdGUgU3RyaW5nIGdldFRlc3REaXIoKSB7CisgICAgcmV0dXJuICJzYW1lUGFyYW1ldGVyVmFsdWUvIiArIGdldFRlc3ROYW1lKHRydWUpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEVudHJ5UG9pbnQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoZ2V0VGVzdERpcigpLCBteVRvb2wsIGZhbHNlLCB0cnVlKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RXaXRob3V0RGVhZENvZGUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoZ2V0VGVzdERpcigpLCBteVRvb2wsIGZhbHNlLCBmYWxzZSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0VmFyYXJncygpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdChnZXRUZXN0RGlyKCksIG15VG9vbCwgZmFsc2UsIHRydWUpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFNpbXBsZVZhcmFyZygpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdChnZXRUZXN0RGlyKCksIG15VG9vbCwgZmFsc2UsIHRydWUpOworICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovY29kZUluc3BlY3Rpb24vU2lsbHlBc3NpZ25tZW50VGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNwZWN0aW9uL1NpbGx5QXNzaWdubWVudFRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MjE1NDAyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNwZWN0aW9uL1NpbGx5QXNzaWdubWVudFRlc3QuamF2YQpAQCAtMCwwICsxLDM0IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDAwLTIwMDYgSmV0QnJhaW5zIHMuci5vLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICovCisKKy8qCisgKiBDcmVhdGVkIGJ5IEludGVsbGlKIElERUEuCisgKiBVc2VyOiBBbm5hLktvemxvdmEKKyAqIERhdGU6IDI1LUp1bC0yMDA2CisgKiBUaW1lOiAxMjowNzoyMgorICovCitwYWNrYWdlIGNvbS5pbnRlbGxpai5jb2RlSW5zcGVjdGlvbjsKKworaW1wb3J0IGNvbS5pbnRlbGxpai5KYXZhVGVzdFV0aWw7CitpbXBvcnQgY29tLmludGVsbGlqLmNvZGVJbnNwZWN0aW9uLnNpbGx5QXNzaWdubWVudC5TaWxseUFzc2lnbm1lbnRJbnNwZWN0aW9uOworaW1wb3J0IGNvbS5pbnRlbGxpai50ZXN0RnJhbWV3b3JrLkluc3BlY3Rpb25UZXN0Q2FzZTsKKworcHVibGljIGNsYXNzIFNpbGx5QXNzaWdubWVudFRlc3QgZXh0ZW5kcyBJbnNwZWN0aW9uVGVzdENhc2UgeworICBAT3ZlcnJpZGUKKyAgcHJvdGVjdGVkIFN0cmluZyBnZXRUZXN0RGF0YVBhdGgoKSB7CisgICAgcmV0dXJuIEphdmFUZXN0VXRpbC5nZXRKYXZhVGVzdERhdGFQYXRoKCkgKyAiL2luc3BlY3Rpb24iOworICB9CisKKyAgcHJpdmF0ZSB2b2lkIGRvVGVzdCgpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdCgic2lsbHlBc3NpZ25tZW50LyIgKyBnZXRUZXN0TmFtZSh0cnVlKSwgIG5ldyBTaWxseUFzc2lnbm1lbnRJbnNwZWN0aW9uKCkpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdE11bHRpcGxlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0U3VwcHJlc3NlZCgpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdCgpOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNwZWN0aW9uL1NpbmdsZUluc3BlY3Rpb25Qcm9maWxlUGFuZWxUZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovY29kZUluc3BlY3Rpb24vU2luZ2xlSW5zcGVjdGlvblByb2ZpbGVQYW5lbFRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMWQyOTA4Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNwZWN0aW9uL1NpbmdsZUluc3BlY3Rpb25Qcm9maWxlUGFuZWxUZXN0LmphdmEKQEAgLTAsMCArMSw4MiBAQAorLyoKKyAqIENvcHlyaWdodCAyMDAwLTIwMTIgSmV0QnJhaW5zIHMuci5vLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KK3BhY2thZ2UgY29tLmludGVsbGlqLmNvZGVJbnNwZWN0aW9uOworCitpbXBvcnQgY29tLmludGVsbGlqLmNvZGVJbnNwZWN0aW9uLmV4Lkluc3BlY3Rpb25Qcm9maWxlSW1wbDsKK2ltcG9ydCBjb20uaW50ZWxsaWouY29kZUluc3BlY3Rpb24uZXguTG9jYWxJbnNwZWN0aW9uVG9vbFdyYXBwZXI7CitpbXBvcnQgY29tLmludGVsbGlqLmNvZGVJbnNwZWN0aW9uLmphdmFEb2MuSmF2YURvY0xvY2FsSW5zcGVjdGlvbjsKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS5wcm9qZWN0LlByb2plY3Q7CitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkucHJvamVjdC5Qcm9qZWN0TWFuYWdlcjsKK2ltcG9ydCBjb20uaW50ZWxsaWoucHJvZmlsZS5jb2RlSW5zcGVjdGlvbi5JbnNwZWN0aW9uUHJvamVjdFByb2ZpbGVNYW5hZ2VyOworaW1wb3J0IGNvbS5pbnRlbGxpai5wcm9maWxlLmNvZGVJbnNwZWN0aW9uLnVpLlNpbmdsZUluc3BlY3Rpb25Qcm9maWxlUGFuZWw7CitpbXBvcnQgY29tLmludGVsbGlqLnRlc3RGcmFtZXdvcmsuTGlnaHRJZGVhVGVzdENhc2U7CisKKy8qKgorICogQGF1dGhvciBEbWl0cnkgQXZkZWV2CisgKiAgICAgICAgIERhdGU6IDUvMTAvMTIKKyAqLworcHVibGljIGNsYXNzIFNpbmdsZUluc3BlY3Rpb25Qcm9maWxlUGFuZWxUZXN0IGV4dGVuZHMgTGlnaHRJZGVhVGVzdENhc2UgeworCisgIC8vIHNlZSBJREVBLTg1NzAwCisgIHB1YmxpYyB2b2lkIHRlc3RTZXR0aW5nc01vZGlmaWNhdGlvbigpIHRocm93cyBFeGNlcHRpb24geworCisgICAgUHJvamVjdCBwcm9qZWN0ID0gUHJvamVjdE1hbmFnZXIuZ2V0SW5zdGFuY2UoKS5nZXREZWZhdWx0UHJvamVjdCgpOworICAgIEluc3BlY3Rpb25Qcm9qZWN0UHJvZmlsZU1hbmFnZXIgcHJvZmlsZU1hbmFnZXIgPSBJbnNwZWN0aW9uUHJvamVjdFByb2ZpbGVNYW5hZ2VyLmdldEluc3RhbmNlKHByb2plY3QpOworICAgIEluc3BlY3Rpb25Qcm9maWxlSW1wbCBwcm9maWxlID0gKEluc3BlY3Rpb25Qcm9maWxlSW1wbClwcm9maWxlTWFuYWdlci5nZXRQcm9maWxlKFBST0ZJTEUpOworICAgIHByb2ZpbGUuaW5pdEluc3BlY3Rpb25Ub29scyhwcm9qZWN0KTsKKyAgICBhc3NlcnRFcXVhbHMoMCwgSW5zcGVjdGlvblByb2ZpbGVUZXN0LmNvdW50SW5pdGlhbGl6ZWRUb29scyhwcm9maWxlKSk7CisKKyAgICBJbnNwZWN0aW9uUHJvZmlsZUltcGwgbW9kZWwgPSAoSW5zcGVjdGlvblByb2ZpbGVJbXBsKXByb2ZpbGUuZ2V0TW9kaWZpYWJsZU1vZGVsKCk7CisgICAgYXNzZXJ0RXF1YWxzKDAsIEluc3BlY3Rpb25Qcm9maWxlVGVzdC5jb3VudEluaXRpYWxpemVkVG9vbHMobW9kZWwpKTsKKyAgICBTaW5nbGVJbnNwZWN0aW9uUHJvZmlsZVBhbmVsIHBhbmVsID0gbmV3IFNpbmdsZUluc3BlY3Rpb25Qcm9maWxlUGFuZWwocHJvZmlsZU1hbmFnZXIsIFBST0ZJTEUsIG1vZGVsKTsKKyAgICBwYW5lbC5zZXRWaXNpYmxlKHRydWUpOworICAgIHBhbmVsLnJlc2V0KCk7CisgICAgYXNzZXJ0RXF1YWxzKEluc3BlY3Rpb25Qcm9maWxlVGVzdC5nZXRJbml0aWFsaXplZFRvb2xzKG1vZGVsKS50b1N0cmluZygpLCAwLCBJbnNwZWN0aW9uUHJvZmlsZVRlc3QuY291bnRJbml0aWFsaXplZFRvb2xzKG1vZGVsKSk7CisKKyAgICBMb2NhbEluc3BlY3Rpb25Ub29sV3JhcHBlciB3cmFwcGVyID0gKExvY2FsSW5zcGVjdGlvblRvb2xXcmFwcGVyKW1vZGVsLmdldEluc3BlY3Rpb25Ub29sKG15SW5zcGVjdGlvbi5nZXRTaG9ydE5hbWUoKSk7CisgICAgYXNzZXJ0IHdyYXBwZXIgIT0gbnVsbDsKKyAgICBKYXZhRG9jTG9jYWxJbnNwZWN0aW9uIHRvb2wgPSAoSmF2YURvY0xvY2FsSW5zcGVjdGlvbil3cmFwcGVyLmdldFRvb2woKTsKKyAgICBhc3NlcnRFcXVhbHMoIiIsIHRvb2wubXlBZGRpdGlvbmFsSmF2YWRvY1RhZ3MpOworICAgIHRvb2wubXlBZGRpdGlvbmFsSmF2YWRvY1RhZ3MgPSAiZm9vIjsKKyAgICBtb2RlbC5zZXRNb2RpZmllZCh0cnVlKTsKKyAgICBwYW5lbC5hcHBseSgpOworICAgIGFzc2VydEVxdWFscygxLCBJbnNwZWN0aW9uUHJvZmlsZVRlc3QuY291bnRJbml0aWFsaXplZFRvb2xzKG1vZGVsKSk7CisKKyAgICB3cmFwcGVyID0gKExvY2FsSW5zcGVjdGlvblRvb2xXcmFwcGVyKXByb2ZpbGUuZ2V0SW5zcGVjdGlvblRvb2wobXlJbnNwZWN0aW9uLmdldFNob3J0TmFtZSgpKTsKKyAgICBhc3NlcnQgd3JhcHBlciAhPSBudWxsOworICAgIHRvb2wgPSAoSmF2YURvY0xvY2FsSW5zcGVjdGlvbil3cmFwcGVyLmdldFRvb2woKTsKKyAgICBhc3NlcnRFcXVhbHMoImZvbyIsIHRvb2wubXlBZGRpdGlvbmFsSmF2YWRvY1RhZ3MpOworICB9CisKKyAgQE92ZXJyaWRlCisgIHB1YmxpYyB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgSW5zcGVjdGlvblByb2ZpbGVJbXBsLklOSVRfSU5TUEVDVElPTlMgPSB0cnVlOworICAgIHN1cGVyLnNldFVwKCk7CisgIH0KKworICBAT3ZlcnJpZGUKKyAgcHVibGljIHZvaWQgdGVhckRvd24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBJbnNwZWN0aW9uUHJvZmlsZUltcGwuSU5JVF9JTlNQRUNUSU9OUyA9IGZhbHNlOworICAgIHN1cGVyLnRlYXJEb3duKCk7CisgIH0KKworICBwcml2YXRlIGZpbmFsIEphdmFEb2NMb2NhbEluc3BlY3Rpb24gbXlJbnNwZWN0aW9uID0gbmV3IEphdmFEb2NMb2NhbEluc3BlY3Rpb24oKTsKKworICBAT3ZlcnJpZGUKKyAgcHJvdGVjdGVkIExvY2FsSW5zcGVjdGlvblRvb2xbXSBjb25maWd1cmVMb2NhbEluc3BlY3Rpb25Ub29scygpIHsKKyAgICByZXR1cm4gbmV3IExvY2FsSW5zcGVjdGlvblRvb2xbXSB7bXlJbnNwZWN0aW9ufTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNwZWN0aW9uL1N1c3BpY2lvdXNDb2xsZWN0aW9uTWV0aG9kQ2FsbHNUZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovY29kZUluc3BlY3Rpb24vU3VzcGljaW91c0NvbGxlY3Rpb25NZXRob2RDYWxsc1Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMmU5NzJmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNwZWN0aW9uL1N1c3BpY2lvdXNDb2xsZWN0aW9uTWV0aG9kQ2FsbHNUZXN0LmphdmEKQEAgLTAsMCArMSwyNiBAQAorcGFja2FnZSBjb20uaW50ZWxsaWouY29kZUluc3BlY3Rpb247CisKK2ltcG9ydCBjb20uaW50ZWxsaWouSmF2YVRlc3RVdGlsOworaW1wb3J0IGNvbS5pbnRlbGxpai5jb2RlSW5zcGVjdGlvbi5taXNjR2VuZXJpY3MuU3VzcGljaW91c0NvbGxlY3Rpb25zTWV0aG9kQ2FsbHNJbnNwZWN0aW9uOworaW1wb3J0IGNvbS5pbnRlbGxpai50ZXN0RnJhbWV3b3JrLmZpeHR1cmVzLkxpZ2h0Q29kZUluc2lnaHRGaXh0dXJlVGVzdENhc2U7CisKK3B1YmxpYyBjbGFzcyBTdXNwaWNpb3VzQ29sbGVjdGlvbk1ldGhvZENhbGxzVGVzdCBleHRlbmRzIExpZ2h0Q29kZUluc2lnaHRGaXh0dXJlVGVzdENhc2UgeworICBwcml2YXRlIGZpbmFsIFN1c3BpY2lvdXNDb2xsZWN0aW9uc01ldGhvZENhbGxzSW5zcGVjdGlvbiBteVRvb2wgPSBuZXcgU3VzcGljaW91c0NvbGxlY3Rpb25zTWV0aG9kQ2FsbHNJbnNwZWN0aW9uKCk7CisKKyAgQE92ZXJyaWRlCisgIHByb3RlY3RlZCBTdHJpbmcgZ2V0QmFzZVBhdGgoKSB7CisgICAgcmV0dXJuIEphdmFUZXN0VXRpbC5nZXRSZWxhdGl2ZUphdmFUZXN0RGF0YVBhdGgoKSArICIvaW5zcGVjdGlvbi9zdXNwaWNpb3VzQ2FsbHMiOworICB9CisKKyAgcHJpdmF0ZSB2b2lkIGRvVGVzdCgpIHRocm93cyBFeGNlcHRpb24geworICAgIG15Rml4dHVyZS5lbmFibGVJbnNwZWN0aW9ucyhteVRvb2wpOworICAgIG15Rml4dHVyZS50ZXN0SGlnaGxpZ2h0aW5nKGdldFRlc3ROYW1lKGZhbHNlKSArICIuamF2YSIpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFVzZURmYSgpIHRocm93cyBFeGNlcHRpb24geyBkb1Rlc3QoKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0V2lsZGNhcmQoKSB0aHJvd3MgRXhjZXB0aW9uIHsgZG9UZXN0KCk7IH0KKyAgcHVibGljIHZvaWQgdGVzdElnbm9yZUNvbnZlcnRpYmxlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgbXlUb29sLlJFUE9SVF9DT05WRVJUSUJMRV9NRVRIT0RfQ0FMTFMgPSBmYWxzZTsKKyAgICBkb1Rlc3QoKTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNwZWN0aW9uL1N1c3BpY2lvdXNOYW1lQ29tYmluYXRpb25UZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovY29kZUluc3BlY3Rpb24vU3VzcGljaW91c05hbWVDb21iaW5hdGlvblRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZDZhMzVkCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNwZWN0aW9uL1N1c3BpY2lvdXNOYW1lQ29tYmluYXRpb25UZXN0LmphdmEKQEAgLTAsMCArMSwzOSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwMC0yMDA2IEpldEJyYWlucyBzLnIuby4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqLworCitwYWNrYWdlIGNvbS5pbnRlbGxpai5jb2RlSW5zcGVjdGlvbjsKKworaW1wb3J0IGNvbS5pbnRlbGxpai5KYXZhVGVzdFV0aWw7CitpbXBvcnQgY29tLmludGVsbGlqLmNvZGVJbnNwZWN0aW9uLnN1c3BpY2lvdXNOYW1lQ29tYmluYXRpb24uU3VzcGljaW91c05hbWVDb21iaW5hdGlvbkluc3BlY3Rpb247CitpbXBvcnQgY29tLmludGVsbGlqLnRlc3RGcmFtZXdvcmsuSW5zcGVjdGlvblRlc3RDYXNlOworCisvKioKKyAqIEBhdXRob3IgeW9sZQorICovCitwdWJsaWMgY2xhc3MgU3VzcGljaW91c05hbWVDb21iaW5hdGlvblRlc3QgZXh0ZW5kcyBJbnNwZWN0aW9uVGVzdENhc2UgeworICBAT3ZlcnJpZGUKKyAgcHJvdGVjdGVkIFN0cmluZyBnZXRUZXN0RGF0YVBhdGgoKSB7CisgICAgcmV0dXJuIEphdmFUZXN0VXRpbC5nZXRKYXZhVGVzdERhdGFQYXRoKCkgKyAiL2luc3BlY3Rpb24iOworICB9CisKKyAgcHJpdmF0ZSB2b2lkIGRvVGVzdCgpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdCgic3VzcGljaW91c05hbWVDb21iaW5hdGlvbi8iICsgZ2V0VGVzdE5hbWUodHJ1ZSksIG5ldyBTdXNwaWNpb3VzTmFtZUNvbWJpbmF0aW9uSW5zcGVjdGlvbigpKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RBc3NpZ25tZW50KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0SW5pdGlhbGl6ZXIoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RQYXJhbWV0ZXIoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RSZXR1cm5WYWx1ZSgpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdCgpOworICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovY29kZUluc3BlY3Rpb24vVW51c2VkRGVjbGFyYXRpb25UZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovY29kZUluc3BlY3Rpb24vVW51c2VkRGVjbGFyYXRpb25UZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTlhMWU0ZQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9jb2RlSW5zcGVjdGlvbi9VbnVzZWREZWNsYXJhdGlvblRlc3QuamF2YQpAQCAtMCwwICsxLDE5MCBAQAorLyoKKyAqIENvcHlyaWdodCAyMDAwLTIwMTIgSmV0QnJhaW5zIHMuci5vLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KK3BhY2thZ2UgY29tLmludGVsbGlqLmNvZGVJbnNwZWN0aW9uOworCitpbXBvcnQgY29tLmludGVsbGlqLkphdmFUZXN0VXRpbDsKK2ltcG9ydCBjb20uaW50ZWxsaWouY29kZUluc3BlY3Rpb24uZGVhZENvZGUuVW51c2VkRGVjbGFyYXRpb25JbnNwZWN0aW9uOworaW1wb3J0IGNvbS5pbnRlbGxpai5jb2RlSW5zcGVjdGlvbi5leC5FbnRyeVBvaW50c01hbmFnZXJJbXBsOworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLnJvb3RzLkxhbmd1YWdlTGV2ZWxQcm9qZWN0RXh0ZW5zaW9uOworaW1wb3J0IGNvbS5pbnRlbGxpai5wb20uamF2YS5MYW5ndWFnZUxldmVsOworaW1wb3J0IGNvbS5pbnRlbGxpai50ZXN0RnJhbWV3b3JrLkluc3BlY3Rpb25UZXN0Q2FzZTsKKworLyoqCisgKiBAYXV0aG9yIG1heAorICovCitwdWJsaWMgY2xhc3MgVW51c2VkRGVjbGFyYXRpb25UZXN0IGV4dGVuZHMgSW5zcGVjdGlvblRlc3RDYXNlIHsKKyAgcHJpdmF0ZSBVbnVzZWREZWNsYXJhdGlvbkluc3BlY3Rpb24gbXlUb29sOworCisgIEBPdmVycmlkZQorICBwcm90ZWN0ZWQgU3RyaW5nIGdldFRlc3REYXRhUGF0aCgpIHsKKyAgICByZXR1cm4gSmF2YVRlc3RVdGlsLmdldEphdmFUZXN0RGF0YVBhdGgoKSArICIvaW5zcGVjdGlvbiI7CisgIH0KKworICBAT3ZlcnJpZGUKKyAgcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBzdXBlci5zZXRVcCgpOworICAgIG15VG9vbCA9IG5ldyBVbnVzZWREZWNsYXJhdGlvbkluc3BlY3Rpb24oKTsKKyAgfQorCisgIHByaXZhdGUgdm9pZCBkb1Rlc3QoKSB7CisgICAgZG9UZXN0KCJkZWFkQ29kZS8iICsgZ2V0VGVzdE5hbWUodHJ1ZSksIG15VG9vbCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0U0NSNjA2NygpIHsKKyAgICBteVRvb2wuQUREX05PTkpBVkFfVE9fRU5UUklFUyA9IGZhbHNlOworICAgIGRvVGVzdCgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFNpbmdsZXRvbigpIHsKKyAgICBteVRvb2wuQUREX05PTkpBVkFfVE9fRU5UUklFUyA9IGZhbHNlOworICAgIGRvVGVzdCgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFNDUjk2OTAoKSB7CisgICAgbXlUb29sLkFERF9OT05KQVZBX1RPX0VOVFJJRVMgPSBmYWxzZTsKKyAgICBkb1Rlc3QoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RGb3JtVXNhZ2UoKSB7CisgICAgbXlUb29sLkFERF9OT05KQVZBX1RPX0VOVFJJRVMgPSBmYWxzZTsKKyAgICBkb1Rlc3QoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RTZXJpYWxpemFibGUoKSB7CisgICAgZG9UZXN0KCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0UGFja2FnZUxvY2FsKCkgeworICAgIGRvVGVzdCgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFJlYWNoYWJsZUZyb21NYWluKCkgeworICAgIG15VG9vbC5BRERfTUFJTlNfVE9fRU5UUklFUyA9IHRydWU7CisgICAgZG9UZXN0KCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0TXV0YWJsZUNhbGxzKCkgeworICAgIGRvVGVzdCgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFN0YXRpY01ldGhvZHMoKSB7CisgICAgZG9UZXN0KCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0U3VwcHJlc3MoKSB7CisgICAgTGFuZ3VhZ2VMZXZlbFByb2plY3RFeHRlbnNpb24uZ2V0SW5zdGFuY2UoZ2V0SmF2YUZhY2FkZSgpLmdldFByb2plY3QoKSkuc2V0TGFuZ3VhZ2VMZXZlbChMYW5ndWFnZUxldmVsLkpES18xXzUpOworICAgIGRvVGVzdCgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFN1cHByZXNzMSgpIHsKKyAgICBMYW5ndWFnZUxldmVsUHJvamVjdEV4dGVuc2lvbi5nZXRJbnN0YW5jZShnZXRKYXZhRmFjYWRlKCkuZ2V0UHJvamVjdCgpKS5zZXRMYW5ndWFnZUxldmVsKExhbmd1YWdlTGV2ZWwuSkRLXzFfNSk7CisgICAgZG9UZXN0KCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0U3VwcHJlc3MyKCkgeworICAgIExhbmd1YWdlTGV2ZWxQcm9qZWN0RXh0ZW5zaW9uLmdldEluc3RhbmNlKGdldEphdmFGYWNhZGUoKS5nZXRQcm9qZWN0KCkpLnNldExhbmd1YWdlTGV2ZWwoTGFuZ3VhZ2VMZXZlbC5KREtfMV81KTsKKyAgICBkb1Rlc3QoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RDaGFpbk9mU3VwcHJlc3Npb25zKCkgeworICAgIExhbmd1YWdlTGV2ZWxQcm9qZWN0RXh0ZW5zaW9uLmdldEluc3RhbmNlKGdldEphdmFGYWNhZGUoKS5nZXRQcm9qZWN0KCkpLnNldExhbmd1YWdlTGV2ZWwoTGFuZ3VhZ2VMZXZlbC5KREtfMV81KTsKKyAgICBkb1Rlc3QoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RSZWFjaGFibGVGcm9tWG1sKCkgeworICAgIGRvVGVzdCgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdENoYWluT2ZDYWxscygpIHsKKyAgICBkb1Rlc3QoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RSZWFjaGFibGVGcm9tRmllbGRJbml0aWFsaXplcigpIHsKKyAgICBkb1Rlc3QoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RSZWFjaGFibGVGcm9tRmllbGRBcnJheUluaXRpYWxpemVyKCkgeworICAgIGRvVGVzdCgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdENvbnN0cnVjdG9yUmVhY2hhYmxlRnJvbUZpZWxkSW5pdGlhbGl6ZXIoKSB7CisgICAgZG9UZXN0KCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0QWRkaXRpb25hbEFubm90YXRpb25zKCkgeworICAgIGZpbmFsIFN0cmluZyB0ZXN0QW5ub3RhdGlvbiA9ICJBbm5vdGF0ZWQiOworICAgIEVudHJ5UG9pbnRzTWFuYWdlckltcGwuZ2V0SW5zdGFuY2UoZ2V0UHJvamVjdCgpKS5BRERJVElPTkFMX0FOTk9UQVRJT05TLmFkZCh0ZXN0QW5ub3RhdGlvbik7CisgICAgdHJ5IHsKKyAgICAgIGRvVGVzdCgpOworICAgIH0KKyAgICBmaW5hbGx5IHsKKyAgICAgIEVudHJ5UG9pbnRzTWFuYWdlckltcGwuZ2V0SW5zdGFuY2UoZ2V0UHJvamVjdCgpKS5BRERJVElPTkFMX0FOTk9UQVRJT05TLnJlbW92ZSh0ZXN0QW5ub3RhdGlvbik7CisgICAgfQorICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEFubm90YXRpb25JbnRlcmZhY2UoKSB7CisgICAgTGFuZ3VhZ2VMZXZlbFByb2plY3RFeHRlbnNpb24uZ2V0SW5zdGFuY2UoZ2V0SmF2YUZhY2FkZSgpLmdldFByb2plY3QoKSkuc2V0TGFuZ3VhZ2VMZXZlbChMYW5ndWFnZUxldmVsLkpES18xXzUpOworICAgIGRvVGVzdCgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEp1bml0RW50cnlQb2ludCgpIHsKKyAgICBkb1Rlc3QoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RKdW5pdEFic3RyYWN0Q2xhc3NXaXRoSW5oZXJpdG9yKCkgeworICAgIGRvVGVzdCgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEp1bml0QWJzdHJhY3RDbGFzc1dpdGhvdXRJbmhlcml0b3IoKSB7CisgICAgZG9UZXN0KCk7CisgIH0KKyAgCisgIHB1YmxpYyB2b2lkIHRlc3RKdW5pdEVudHJ5UG9pbnRDdXN0b21SdW5XaXRoKCkgeworICAgIGRvVGVzdCgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdENvbnN0cnVjdG9yQ2FsbHMoKSB7CisgICAgZG9UZXN0KCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0Q29uc3RydWN0b3JDYWxsczEoKSB7CisgICAgZG9UZXN0KCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0Tm9uSmF2YVJlZmVyZW5jZXMoKSB7CisgICAgZG9UZXN0KCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0RW51bUluc3RhbnRpYXRpb24oKSB7CisgICAgZG9UZXN0KCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0RW51bVZhbHVlcygpIHsKKyAgICBkb1Rlc3QoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RVc2FnZXNJbkFub255bW91cygpIHsKKyAgICBkb1Rlc3QoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RBYnN0cmFjdENsYXNzV2l0aFNlcmlhbGl6YWJsZVN1YmNsYXNzZXMoKSB7CisgICAgZG9UZXN0KCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0Q2xhc3NMaXRlcmFsUmVmKCkgeworICAgIGRvVGVzdCgpOworICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovY29kZUluc3BlY3Rpb24vVW51c2VkTWV0aG9kUGFyYW1ldGVyVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNwZWN0aW9uL1VudXNlZE1ldGhvZFBhcmFtZXRlclRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZTdkNTUzCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNwZWN0aW9uL1VudXNlZE1ldGhvZFBhcmFtZXRlclRlc3QuamF2YQpAQCAtMCwwICsxLDQ4IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDAwLTIwMDYgSmV0QnJhaW5zIHMuci5vLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICovCisKKy8qCisgKiBDcmVhdGVkIGJ5IEludGVsbGlKIElERUEuCisgKiBVc2VyOiBBbm5hLktvemxvdmEKKyAqIERhdGU6IDA3LU5vdi0yMDA2CisgKiBUaW1lOiAxMzoxMzo1OQorICovCitwYWNrYWdlIGNvbS5pbnRlbGxpai5jb2RlSW5zcGVjdGlvbjsKKworaW1wb3J0IGNvbS5pbnRlbGxpai5KYXZhVGVzdFV0aWw7CitpbXBvcnQgY29tLmludGVsbGlqLmNvZGVJbnNwZWN0aW9uLnVudXNlZFBhcmFtZXRlcnMuVW51c2VkUGFyYW1ldGVyc0luc3BlY3Rpb247CitpbXBvcnQgY29tLmludGVsbGlqLnRlc3RGcmFtZXdvcmsuSW5zcGVjdGlvblRlc3RDYXNlOworCitwdWJsaWMgY2xhc3MgVW51c2VkTWV0aG9kUGFyYW1ldGVyVGVzdCBleHRlbmRzIEluc3BlY3Rpb25UZXN0Q2FzZSB7CisgIEBPdmVycmlkZQorICBwcm90ZWN0ZWQgU3RyaW5nIGdldFRlc3REYXRhUGF0aCgpIHsKKyAgICByZXR1cm4gSmF2YVRlc3RVdGlsLmdldEphdmFUZXN0RGF0YVBhdGgoKSArICIvaW5zcGVjdGlvbiI7CisgIH0KKworICBwcml2YXRlIGZpbmFsIFVudXNlZFBhcmFtZXRlcnNJbnNwZWN0aW9uIG15VG9vbCA9IG5ldyBVbnVzZWRQYXJhbWV0ZXJzSW5zcGVjdGlvbigpOworCisgIHByaXZhdGUgdm9pZCBkb1Rlc3QoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoInVudXNlZE1ldGhvZFBhcmFtZXRlci8iICsgZ2V0VGVzdE5hbWUodHJ1ZSksIG15VG9vbCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0RmllbGRJbkFub255bW91c0NsYXNzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0VW51c2VkUGFyYW1ldGVyKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0VXNlZEZvclJlYWRpbmcoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RFbnRyeVBvaW50VW51c2VkUGFyYW1ldGVyKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KCJ1bnVzZWRNZXRob2RQYXJhbWV0ZXIvIiArIGdldFRlc3ROYW1lKHRydWUpLCBteVRvb2wsIHRydWUsIHRydWUpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEFwcE1haW5VbnVzZWRQYXJhbXMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoKTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNwZWN0aW9uL1VudXNlZFJldHVyblZhbHVlVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNwZWN0aW9uL1VudXNlZFJldHVyblZhbHVlVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY3NTNmNTIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovY29kZUluc3BlY3Rpb24vVW51c2VkUmV0dXJuVmFsdWVUZXN0LmphdmEKQEAgLTAsMCArMSw1MiBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwMC0yMDA2IEpldEJyYWlucyBzLnIuby4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqLworCisvKgorICogQ3JlYXRlZCBieSBJbnRlbGxpSiBJREVBLgorICogVXNlcjogQW5uYS5Lb3psb3ZhCisgKiBEYXRlOiAwNy1BdWctMjAwNgorICogVGltZTogMjA6MzQ6MzcKKyAqLworcGFja2FnZSBjb20uaW50ZWxsaWouY29kZUluc3BlY3Rpb247CisKK2ltcG9ydCBjb20uaW50ZWxsaWouSmF2YVRlc3RVdGlsOworaW1wb3J0IGNvbS5pbnRlbGxpai5jb2RlSW5zcGVjdGlvbi51bnVzZWRSZXR1cm5WYWx1ZS5VbnVzZWRSZXR1cm5WYWx1ZTsKK2ltcG9ydCBjb20uaW50ZWxsaWoudGVzdEZyYW1ld29yay5JbnNwZWN0aW9uVGVzdENhc2U7CisKK3B1YmxpYyBjbGFzcyBVbnVzZWRSZXR1cm5WYWx1ZVRlc3QgZXh0ZW5kcyBJbnNwZWN0aW9uVGVzdENhc2UgeworICBwcml2YXRlIGZpbmFsIFVudXNlZFJldHVyblZhbHVlIG15VG9vbCA9IG5ldyBVbnVzZWRSZXR1cm5WYWx1ZSgpOworCisgIEBPdmVycmlkZQorICBwcm90ZWN0ZWQgU3RyaW5nIGdldFRlc3REYXRhUGF0aCgpIHsKKyAgICByZXR1cm4gSmF2YVRlc3RVdGlsLmdldEphdmFUZXN0RGF0YVBhdGgoKSArICIvaW5zcGVjdGlvbiI7CisgIH0KKworICBwcml2YXRlIHZvaWQgZG9UZXN0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KCJ1bnVzZWRSZXR1cm5WYWx1ZS8iICsgZ2V0VGVzdE5hbWUodHJ1ZSksIG15VG9vbCk7CisgIH0KKworCisgIHB1YmxpYyB2b2lkIHRlc3ROb25MaXRlcmFsKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0TmF0aXZlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0SGllcmFyY2h5KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KCk7CisgIH0KKworICAKKyAgcHVibGljIHZvaWQgdGVzdFNpbXBsZVNldHRlcigpIHRocm93cyBFeGNlcHRpb24geworICAgIHRyeSB7CisgICAgICBteVRvb2wuSUdOT1JFX0JVSUxERVJfUEFUVEVSTiA9IHRydWU7CisgICAgICBkb1Rlc3QoKTsKKyAgICB9CisgICAgZmluYWxseSB7CisgICAgICBteVRvb2wuSUdOT1JFX0JVSUxERVJfUEFUVEVSTiA9IGZhbHNlOworICAgIH0KKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9jb2RlSW5zcGVjdGlvbi9WaXNpYmlsaXR5SW5zcGVjdGlvblRlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9jb2RlSW5zcGVjdGlvbi9WaXNpYmlsaXR5SW5zcGVjdGlvblRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45Y2JiOWVmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvZGVJbnNwZWN0aW9uL1Zpc2liaWxpdHlJbnNwZWN0aW9uVGVzdC5qYXZhCkBAIC0wLDAgKzEsMTEyIEBACitwYWNrYWdlIGNvbS5pbnRlbGxpai5jb2RlSW5zcGVjdGlvbjsKKworaW1wb3J0IGNvbS5pbnRlbGxpai5KYXZhVGVzdFV0aWw7CitpbXBvcnQgY29tLmludGVsbGlqLmNvZGVJbnNwZWN0aW9uLnZpc2liaWxpdHkuVmlzaWJpbGl0eUluc3BlY3Rpb247CitpbXBvcnQgY29tLmludGVsbGlqLnRlc3RGcmFtZXdvcmsuSW5zcGVjdGlvblRlc3RDYXNlOworCitwdWJsaWMgY2xhc3MgVmlzaWJpbGl0eUluc3BlY3Rpb25UZXN0IGV4dGVuZHMgSW5zcGVjdGlvblRlc3RDYXNlIHsKKyAgcHJpdmF0ZSBmaW5hbCBWaXNpYmlsaXR5SW5zcGVjdGlvbiBteVRvb2wgPSBuZXcgVmlzaWJpbGl0eUluc3BlY3Rpb24oKTsKKworICBAT3ZlcnJpZGUKKyAgcHJvdGVjdGVkIFN0cmluZyBnZXRUZXN0RGF0YVBhdGgoKSB7CisgICAgcmV0dXJuIEphdmFUZXN0VXRpbC5nZXRKYXZhVGVzdERhdGFQYXRoKCkgKyAiL2luc3BlY3Rpb24iOworICB9CisKKyAgcHJpdmF0ZSB2b2lkIGRvVGVzdCgpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdCgidmlzaWJpbGl0eS8iICsgZ2V0VGVzdE5hbWUoZmFsc2UpLCBteVRvb2wpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdGlubmVyQ29uc3RydWN0b3IoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBteVRvb2wuU1VHR0VTVF9QQUNLQUdFX0xPQ0FMX0ZPUl9NRU1CRVJTID0gdHJ1ZTsKKyAgICBteVRvb2wuU1VHR0VTVF9QQUNLQUdFX0xPQ0FMX0ZPUl9UT1BfQ0xBU1NFUyA9IGZhbHNlOworICAgIG15VG9vbC5TVUdHRVNUX1BSSVZBVEVfRk9SX0lOTkVSUyA9IHRydWU7CisKKyAgICBkb1Rlc3QoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RwYWNrYWdlTGV2ZWxUb3BzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgbXlUb29sLlNVR0dFU1RfUEFDS0FHRV9MT0NBTF9GT1JfTUVNQkVSUyA9IGZhbHNlOworICAgIG15VG9vbC5TVUdHRVNUX1BBQ0tBR0VfTE9DQUxfRk9SX1RPUF9DTEFTU0VTID0gdHJ1ZTsKKyAgICBteVRvb2wuU1VHR0VTVF9QUklWQVRFX0ZPUl9JTk5FUlMgPSBmYWxzZTsKKworICAgIGRvVGVzdCgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFNDUjUwMDgoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBteVRvb2wuU1VHR0VTVF9QQUNLQUdFX0xPQ0FMX0ZPUl9NRU1CRVJTID0gdHJ1ZTsKKyAgICBteVRvb2wuU1VHR0VTVF9QQUNLQUdFX0xPQ0FMX0ZPUl9UT1BfQ0xBU1NFUyA9IHRydWU7CisgICAgbXlUb29sLlNVR0dFU1RfUFJJVkFURV9GT1JfSU5ORVJTID0gdHJ1ZTsKKworICAgIGRvVGVzdCgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFNDUjY4NTYoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBteVRvb2wuU1VHR0VTVF9QQUNLQUdFX0xPQ0FMX0ZPUl9NRU1CRVJTID0gdHJ1ZTsKKyAgICBteVRvb2wuU1VHR0VTVF9QQUNLQUdFX0xPQ0FMX0ZPUl9UT1BfQ0xBU1NFUyA9IHRydWU7CisgICAgbXlUb29sLlNVR0dFU1RfUFJJVkFURV9GT1JfSU5ORVJTID0gdHJ1ZTsKKworICAgIGRvVGVzdCgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFNDUjExNzkyKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgbXlUb29sLlNVR0dFU1RfUEFDS0FHRV9MT0NBTF9GT1JfTUVNQkVSUyA9IHRydWU7CisgICAgbXlUb29sLlNVR0dFU1RfUEFDS0FHRV9MT0NBTF9GT1JfVE9QX0NMQVNTRVMgPSB0cnVlOworICAgIG15VG9vbC5TVUdHRVNUX1BSSVZBVEVfRk9SX0lOTkVSUyA9IHRydWU7CisKKyAgICBkb1Rlc3QoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RJREVBREVWMTAzMTIoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBteVRvb2wuU1VHR0VTVF9QQUNLQUdFX0xPQ0FMX0ZPUl9NRU1CRVJTID0gZmFsc2U7CisgICAgbXlUb29sLlNVR0dFU1RfUEFDS0FHRV9MT0NBTF9GT1JfVE9QX0NMQVNTRVMgPSBmYWxzZTsKKyAgICBkb1Rlc3QoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RJREVBREVWMTA4ODMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBteVRvb2wuU1VHR0VTVF9QQUNLQUdFX0xPQ0FMX0ZPUl9NRU1CRVJTID0gZmFsc2U7CisgICAgbXlUb29sLlNVR0dFU1RfUEFDS0FHRV9MT0NBTF9GT1JfVE9QX0NMQVNTRVMgPSBmYWxzZTsKKyAgICBkb1Rlc3QoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3REZWZhdWx0Q29uc3RydWN0b3IoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBteVRvb2wuU1VHR0VTVF9QQUNLQUdFX0xPQ0FMX0ZPUl9NRU1CRVJTID0gdHJ1ZTsKKyAgICBteVRvb2wuU1VHR0VTVF9QQUNLQUdFX0xPQ0FMX0ZPUl9UT1BfQ0xBU1NFUyA9IHRydWU7CisgICAgbXlUb29sLlNVR0dFU1RfUFJJVkFURV9GT1JfSU5ORVJTID0gZmFsc2U7CisgICAgZG9UZXN0KCJ2aXNpYmlsaXR5L2RlZmF1bHRDb25zdHJ1Y3RvciIsIG15VG9vbCwgZmFsc2UsIHRydWUpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEltcGxpY2l0Q29uc3RydWN0b3IoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBteVRvb2wuU1VHR0VTVF9QQUNLQUdFX0xPQ0FMX0ZPUl9NRU1CRVJTID0gdHJ1ZTsKKyAgICBteVRvb2wuU1VHR0VTVF9QQUNLQUdFX0xPQ0FMX0ZPUl9UT1BfQ0xBU1NFUyA9IHRydWU7CisgICAgbXlUb29sLlNVR0dFU1RfUFJJVkFURV9GT1JfSU5ORVJTID0gZmFsc2U7CisgICAgZG9UZXN0KCJ2aXNpYmlsaXR5L2ltcGxpY2l0Q29uc3RydWN0b3IiLCBteVRvb2wsIGZhbHNlLCB0cnVlKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RFbnVtQ29uc3RhbnRzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgbXlUb29sLlNVR0dFU1RfUEFDS0FHRV9MT0NBTF9GT1JfTUVNQkVSUyA9IHRydWU7CisgICAgbXlUb29sLlNVR0dFU1RfUEFDS0FHRV9MT0NBTF9GT1JfVE9QX0NMQVNTRVMgPSB0cnVlOworICAgIG15VG9vbC5TVUdHRVNUX1BSSVZBVEVfRk9SX0lOTkVSUyA9IGZhbHNlOworICAgIGRvVGVzdCgidmlzaWJpbGl0eS9lbnVtQ29uc3RhbnRzVmlzaWJpbGl0eSIsIG15VG9vbCwgZmFsc2UsIHRydWUpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFVzYWdlc0Zyb21Bbm5vdGF0aW9ucygpIHRocm93cyBFeGNlcHRpb24geworICAgIG15VG9vbC5TVUdHRVNUX1BBQ0tBR0VfTE9DQUxfRk9SX01FTUJFUlMgPSB0cnVlOworICAgIG15VG9vbC5TVUdHRVNUX1BBQ0tBR0VfTE9DQUxfRk9SX1RPUF9DTEFTU0VTID0gdHJ1ZTsKKyAgICBteVRvb2wuU1VHR0VTVF9QUklWQVRFX0ZPUl9JTk5FUlMgPSBmYWxzZTsKKyAgICBkb1Rlc3QoInZpc2liaWxpdHkvYW5ub3RhdGlvblVzYWdlcyIsIG15VG9vbCwgZmFsc2UsIHRydWUpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFR5cGVBcmd1bWVudHMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBteVRvb2wuU1VHR0VTVF9QQUNLQUdFX0xPQ0FMX0ZPUl9NRU1CRVJTID0gZmFsc2U7CisgICAgbXlUb29sLlNVR0dFU1RfUEFDS0FHRV9MT0NBTF9GT1JfVE9QX0NMQVNTRVMgPSBmYWxzZTsKKyAgICBteVRvb2wuU1VHR0VTVF9QUklWQVRFX0ZPUl9JTk5FUlMgPSBmYWxzZTsKKyAgICBkb1Rlc3QoInZpc2liaWxpdHkvdHlwZUFyZ3VtZW50cyIsIG15VG9vbCwgZmFsc2UsIHRydWUpOworICB9CisgIAorICBwdWJsaWMgdm9pZCB0ZXN0VXNlZEZyb21Bbm5vdGF0aW9uc0V4dGVuZHNMaXN0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgbXlUb29sLlNVR0dFU1RfUEFDS0FHRV9MT0NBTF9GT1JfTUVNQkVSUyA9IHRydWU7CisgICAgbXlUb29sLlNVR0dFU1RfUEFDS0FHRV9MT0NBTF9GT1JfVE9QX0NMQVNTRVMgPSB0cnVlOworICAgIG15VG9vbC5TVUdHRVNUX1BSSVZBVEVfRk9SX0lOTkVSUyA9IHRydWU7CisgICAgZG9UZXN0KCJ2aXNpYmlsaXR5L3VzZWRGcm9tQW5ub3RhdGlvbnNFeHRlbmRzTGlzdCIsIG15VG9vbCwgZmFsc2UsIHRydWUpOworICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovY29tcGlsZXIvbm90TnVsbFZlcmlmaWNhdGlvbi9Ob3ROdWxsVmVyaWZ5aW5nSW5zdHJ1bWVudGVyVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvbXBpbGVyL25vdE51bGxWZXJpZmljYXRpb24vTm90TnVsbFZlcmlmeWluZ0luc3RydW1lbnRlclRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YmE3OGNmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2NvbXBpbGVyL25vdE51bGxWZXJpZmljYXRpb24vTm90TnVsbFZlcmlmeWluZ0luc3RydW1lbnRlclRlc3QuamF2YQpAQCAtMCwwICsxLDE4OSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDAwLTIwMTIgSmV0QnJhaW5zIHMuci5vLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KK3BhY2thZ2UgY29tLmludGVsbGlqLmNvbXBpbGVyLm5vdE51bGxWZXJpZmljYXRpb247CisKK2ltcG9ydCBjb20uaW50ZWxsaWouSmF2YVRlc3RVdGlsOworaW1wb3J0IGNvbS5pbnRlbGxpai5jb21waWxlci5Qc2lDbGFzc1dyaXRlcjsKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS51dGlsLlN5c3RlbUluZm87CitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkudXRpbC5pby5GaWxlVXRpbDsKK2ltcG9ydCBjb20uaW50ZWxsaWoudGVzdEZyYW1ld29yay5JZGVhVGVzdENhc2U7CitpbXBvcnQgY29tLmludGVsbGlqLnRlc3RGcmFtZXdvcmsuVXNlZnVsVGVzdENhc2U7CitpbXBvcnQgY29tLmludGVsbGlqLnRlc3RGcmFtZXdvcmsuZml4dHVyZXMuSWRlYVByb2plY3RUZXN0Rml4dHVyZTsKK2ltcG9ydCBjb20uaW50ZWxsaWoudGVzdEZyYW1ld29yay5maXh0dXJlcy5KYXZhVGVzdEZpeHR1cmVGYWN0b3J5OworaW1wb3J0IGNvbS5pbnRlbGxpai50ZXN0RnJhbWV3b3JrLmZpeHR1cmVzLlRlc3RGaXh0dXJlQnVpbGRlcjsKK2ltcG9ydCBvcmcuamV0YnJhaW5zLmFubm90YXRpb25zLk51bGxhYmxlOworaW1wb3J0IG9yZy5qZXRicmFpbnMuYXNtNC5DbGFzc1JlYWRlcjsKK2ltcG9ydCBvcmcuamV0YnJhaW5zLmFzbTQuQ2xhc3NXcml0ZXI7CisKK2ltcG9ydCBqYXZhLmlvLkZpbGU7CitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLmxhbmcucmVmbGVjdC5Db25zdHJ1Y3RvcjsKK2ltcG9ydCBqYXZhLmxhbmcucmVmbGVjdC5JbnZvY2F0aW9uVGFyZ2V0RXhjZXB0aW9uOworaW1wb3J0IGphdmEubGFuZy5yZWZsZWN0Lk1lbWJlcjsKK2ltcG9ydCBqYXZhLmxhbmcucmVmbGVjdC5NZXRob2Q7CisKKy8qKgorICogQGF1dGhvciB5b2xlCisgKi8KK3B1YmxpYyBjbGFzcyBOb3ROdWxsVmVyaWZ5aW5nSW5zdHJ1bWVudGVyVGVzdCBleHRlbmRzIFVzZWZ1bFRlc3RDYXNlIHsKKyAgcHJpdmF0ZSBib29sZWFuIG15SmF2YTY7CisgIHByaXZhdGUgSWRlYVByb2plY3RUZXN0Rml4dHVyZSBteUZpeHR1cmU7CisKKyAgQFN1cHByZXNzV2FybmluZ3MoeyJKVW5pdFRlc3RDYXNlV2l0aE5vblRyaXZpYWxDb25zdHJ1Y3RvcnMifSkKKyAgcHVibGljIE5vdE51bGxWZXJpZnlpbmdJbnN0cnVtZW50ZXJUZXN0KCkgeworICAgIElkZWFUZXN0Q2FzZS5pbml0UGxhdGZvcm1QcmVmaXgoKTsKKyAgfQorCisgIEBPdmVycmlkZQorICBwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24geworICAgIHN1cGVyLnNldFVwKCk7CisgICAgZmluYWwgSmF2YVRlc3RGaXh0dXJlRmFjdG9yeSBmaXh0dXJlRmFjdG9yeSA9IEphdmFUZXN0Rml4dHVyZUZhY3RvcnkuZ2V0Rml4dHVyZUZhY3RvcnkoKTsKKyAgICBmaW5hbCBUZXN0Rml4dHVyZUJ1aWxkZXI8SWRlYVByb2plY3RUZXN0Rml4dHVyZT4gdGVzdEZpeHR1cmVCdWlsZGVyID0gZml4dHVyZUZhY3RvcnkuY3JlYXRlTGlnaHRGaXh0dXJlQnVpbGRlcigpOworICAgIG15Rml4dHVyZSA9IHRlc3RGaXh0dXJlQnVpbGRlci5nZXRGaXh0dXJlKCk7CisgICAgbXlGaXh0dXJlLnNldFVwKCk7CisgICAgbXlKYXZhNiA9IFN5c3RlbUluZm8uaXNKYXZhVmVyc2lvbkF0TGVhc3QoIjEuNiIpOworICB9CisKKyAgQE92ZXJyaWRlCisgIHByb3RlY3RlZCB2b2lkIHRlYXJEb3duKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgbXlGaXh0dXJlLnRlYXJEb3duKCk7CisgICAgc3VwZXIudGVhckRvd24oKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RTaW1wbGVSZXR1cm4oKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBDbGFzcyB0ZXN0Q2xhc3MgPSBwcmVwYXJlVGVzdCgpOworICAgIE9iamVjdCBpbnN0YW5jZSA9IHRlc3RDbGFzcy5uZXdJbnN0YW5jZSgpOworICAgIE1ldGhvZCBtZXRob2QgPSB0ZXN0Q2xhc3MuZ2V0TWV0aG9kKCJ0ZXN0Iik7CisgICAgdmVyaWZ5Q2FsbFRocm93c0V4Y2VwdGlvbigiQE5vdE51bGwgbWV0aG9kIFNpbXBsZVJldHVybi50ZXN0IG11c3Qgbm90IHJldHVybiBudWxsIiwgaW5zdGFuY2UsIG1ldGhvZCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0TXVsdGlwbGVSZXR1cm5zKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgQ2xhc3MgdGVzdENsYXNzID0gcHJlcGFyZVRlc3QoKTsKKyAgICBPYmplY3QgaW5zdGFuY2UgPSB0ZXN0Q2xhc3MubmV3SW5zdGFuY2UoKTsKKyAgICBNZXRob2QgbWV0aG9kID0gdGVzdENsYXNzLmdldE1ldGhvZCgidGVzdCIsIGludC5jbGFzcyk7CisgICAgdmVyaWZ5Q2FsbFRocm93c0V4Y2VwdGlvbigiQE5vdE51bGwgbWV0aG9kIE11bHRpcGxlUmV0dXJucy50ZXN0IG11c3Qgbm90IHJldHVybiBudWxsIiwgaW5zdGFuY2UsIG1ldGhvZCwgMSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0U2ltcGxlUGFyYW0oKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBDbGFzcyB0ZXN0Q2xhc3MgPSBwcmVwYXJlVGVzdCgpOworICAgIE9iamVjdCBpbnN0YW5jZSA9IHRlc3RDbGFzcy5uZXdJbnN0YW5jZSgpOworICAgIE1ldGhvZCBtZXRob2QgPSB0ZXN0Q2xhc3MuZ2V0TWV0aG9kKCJ0ZXN0IiwgT2JqZWN0LmNsYXNzKTsKKyAgICB2ZXJpZnlDYWxsVGhyb3dzRXhjZXB0aW9uKCJBcmd1bWVudCAwIGZvciBATm90TnVsbCBwYXJhbWV0ZXIgb2YgU2ltcGxlUGFyYW0udGVzdCBtdXN0IG5vdCBiZSBudWxsIiwgaW5zdGFuY2UsIG1ldGhvZCwgKE9iamVjdCludWxsKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RDb25zdHJ1Y3RvclBhcmFtKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgQ2xhc3MgdGVzdENsYXNzID0gcHJlcGFyZVRlc3QoKTsKKyAgICBDb25zdHJ1Y3RvciBtZXRob2QgPSB0ZXN0Q2xhc3MuZ2V0Q29uc3RydWN0b3IoT2JqZWN0LmNsYXNzKTsKKyAgICB2ZXJpZnlDYWxsVGhyb3dzRXhjZXB0aW9uKCJBcmd1bWVudCAwIGZvciBATm90TnVsbCBwYXJhbWV0ZXIgb2YgQ29uc3RydWN0b3JQYXJhbS48aW5pdD4gbXVzdCBub3QgYmUgbnVsbCIsIG51bGwsIG1ldGhvZCwgKE9iamVjdCludWxsKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RFbnVtQ29uc3RydWN0b3IoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBDbGFzcyB0ZXN0Q2xhc3MgPSBwcmVwYXJlVGVzdCgpOworICAgIE9iamVjdCBmaWVsZCA9IHRlc3RDbGFzcy5nZXRGaWVsZCgiVmFsdWUiKTsKKyAgICBhc3NlcnROb3ROdWxsKGZpZWxkKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RFbnVtQ29uc3RydWN0b3JTZWNvbmRQYXJhbSgpIHRocm93cyBFeGNlcHRpb24geworICAgIENsYXNzIHRlc3RDbGFzcyA9IHByZXBhcmVUZXN0KCk7CisgICAgT2JqZWN0IGZpZWxkID0gdGVzdENsYXNzLmdldEZpZWxkKCJWYWx1ZSIpOworICAgIGFzc2VydE5vdE51bGwoZmllbGQpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFN0YXRpY0lubmVyQ2xhc3MoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBmaW5hbCBDbGFzcyBhQ2xhc3MgPSBwcmVwYXJlVGVzdCgpOworICAgIGFzc2VydE5vdE51bGwoYUNsYXNzLm5ld0luc3RhbmNlKCkpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdE5vblN0YXRpY0lubmVyQ2xhc3MoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBmaW5hbCBDbGFzcyBhQ2xhc3MgPSBwcmVwYXJlVGVzdCgpOworICAgIGFzc2VydE5vdE51bGwoYUNsYXNzLm5ld0luc3RhbmNlKCkpOworICB9CisKKyAgcHJpdmF0ZSBzdGF0aWMgdm9pZCB2ZXJpZnlDYWxsVGhyb3dzRXhjZXB0aW9uKFN0cmluZyBleHBlY3RlZEVycm9yLCBATnVsbGFibGUgT2JqZWN0IGluc3RhbmNlLCBNZW1iZXIgbWVtYmVyLCBATnVsbGFibGUgT2JqZWN0Li4uIGFyZ3MpIHRocm93cyBFeGNlcHRpb24geworICAgIFN0cmluZyBleGNlcHRpb25UZXh0ID0gbnVsbDsKKyAgICB0cnkgeworICAgICAgaWYgKG1lbWJlciBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSB7CisgICAgICAgICgoQ29uc3RydWN0b3IpbWVtYmVyKS5uZXdJbnN0YW5jZShhcmdzKTsKKyAgICAgIH0KKyAgICAgIGVsc2UgeworICAgICAgICAoKE1ldGhvZCltZW1iZXIpLmludm9rZShpbnN0YW5jZSwgYXJncyk7CisgICAgICB9CisgICAgfQorICAgIGNhdGNoKEludm9jYXRpb25UYXJnZXRFeGNlcHRpb24gZXgpIHsKKyAgICAgIFRocm93YWJsZSBjYXVzZSA9IGV4LmdldENhdXNlKCk7CisgICAgICBpZiAoY2F1c2UgaW5zdGFuY2VvZiBJbGxlZ2FsU3RhdGVFeGNlcHRpb24gfHwgY2F1c2UgaW5zdGFuY2VvZiBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24pIHsKKyAgICAgICAgZXhjZXB0aW9uVGV4dCA9IGNhdXNlLmdldE1lc3NhZ2UoKTsKKyAgICAgIH0KKyAgICB9CisgICAgYXNzZXJ0RXF1YWxzKGV4cGVjdGVkRXJyb3IsIGV4Y2VwdGlvblRleHQpOworICB9CisKKyAgcHJpdmF0ZSBDbGFzcyBwcmVwYXJlVGVzdCgpIHRocm93cyBJT0V4Y2VwdGlvbiB7CisgICAgU3RyaW5nIGJhc2UgPSBKYXZhVGVzdFV0aWwuZ2V0SmF2YVRlc3REYXRhUGF0aCgpICsgIi9jb21waWxlci9ub3ROdWxsVmVyaWZpY2F0aW9uLyI7CisgICAgZmluYWwgU3RyaW5nIGJhc2VDbGFzc05hbWUgPSBnZXRUZXN0TmFtZShmYWxzZSk7CisgICAgU3RyaW5nIHBhdGggPSBiYXNlICsgYmFzZUNsYXNzTmFtZTsKKyAgICBTdHJpbmcgamF2YVBhdGggPSBwYXRoICsgIi5qYXZhIjsKKyAgICBGaWxlIGNsYXNzZXNEaXIgPSBGaWxlVXRpbC5jcmVhdGVUZW1wRGlyZWN0b3J5KGJhc2VDbGFzc05hbWUsICJvdXRwdXQiKTsKKworICAgIHRyeSB7CisgICAgICBjb20uc3VuLnRvb2xzLmphdmFjLk1haW4uY29tcGlsZShuZXcgU3RyaW5nW117Ii1jbGFzc3BhdGgiLCBiYXNlICsgImFubm90YXRpb25zLmphciIsICItZCIsIGNsYXNzZXNEaXIuZ2V0QWJzb2x1dGVQYXRoKCksIGphdmFQYXRofSk7CisKKyAgICAgIENsYXNzIG1haW5DbGFzcyA9IG51bGw7CisgICAgICBmaW5hbCBGaWxlW10gZmlsZXMgPSBjbGFzc2VzRGlyLmxpc3RGaWxlcygpOworICAgICAgYXNzZXJ0Tm90TnVsbChmaWxlcyk7CisgICAgICBib29sZWFuIG1vZGlmaWVkID0gZmFsc2U7CisgICAgICBNeUNsYXNzTG9hZGVyIGNsYXNzTG9hZGVyID0gbmV3IE15Q2xhc3NMb2FkZXIoZ2V0Q2xhc3MoKS5nZXRDbGFzc0xvYWRlcigpKTsKKyAgICAgIGZvciAoRmlsZSBmaWxlIDogZmlsZXMpIHsKKyAgICAgICAgZmluYWwgU3RyaW5nIGZpbGVOYW1lID0gZmlsZS5nZXROYW1lKCk7CisgICAgICAgIGJ5dGVbXSBjb250ZW50ID0gRmlsZVV0aWwubG9hZEZpbGVCeXRlcyhmaWxlKTsKKworICAgICAgICBDbGFzc1JlYWRlciByZWFkZXIgPSBuZXcgQ2xhc3NSZWFkZXIoY29udGVudCwgMCwgY29udGVudC5sZW5ndGgpOworICAgICAgICBDbGFzc1dyaXRlciB3cml0ZXIgPSBuZXcgUHNpQ2xhc3NXcml0ZXIobXlGaXh0dXJlLmdldFByb2plY3QoKSwgbXlKYXZhNik7CisgICAgICAgIGZpbmFsIE5vdE51bGxWZXJpZnlpbmdJbnN0cnVtZW50ZXIgaW5zdHJ1bWVudGVyID0gbmV3IE5vdE51bGxWZXJpZnlpbmdJbnN0cnVtZW50ZXIod3JpdGVyKTsKKyAgICAgICAgcmVhZGVyLmFjY2VwdChpbnN0cnVtZW50ZXIsIDApOworICAgICAgICBtb2RpZmllZCB8PSBpbnN0cnVtZW50ZXIuaXNNb2RpZmljYXRpb24oKTsKKworICAgICAgICBieXRlW10gaW5zdHJ1bWVudGVkID0gd3JpdGVyLnRvQnl0ZUFycmF5KCk7CisgICAgICAgIGZpbmFsIFN0cmluZyBjbGFzc05hbWUgPSBGaWxlVXRpbC5nZXROYW1lV2l0aG91dEV4dGVuc2lvbihmaWxlTmFtZSk7CisgICAgICAgIGZpbmFsIENsYXNzIGFDbGFzcyA9IGNsYXNzTG9hZGVyLmRvRGVmaW5lQ2xhc3MoY2xhc3NOYW1lLCBpbnN0cnVtZW50ZWQpOworICAgICAgICBpZiAoY2xhc3NOYW1lLmVxdWFscyhiYXNlQ2xhc3NOYW1lKSkgeworICAgICAgICAgIG1haW5DbGFzcyA9IGFDbGFzczsKKyAgICAgICAgfQorICAgICAgfQorICAgICAgYXNzZXJ0VHJ1ZShtb2RpZmllZCk7CisgICAgICBhc3NlcnROb3ROdWxsKCJDbGFzcyAiICsgYmFzZUNsYXNzTmFtZSArICIgbm90IGZvdW5kISIsIG1haW5DbGFzcyk7CisgICAgICByZXR1cm4gbWFpbkNsYXNzOworICAgIH0KKyAgICBmaW5hbGx5IHsKKyAgICAgIEZpbGVVdGlsLmRlbGV0ZShjbGFzc2VzRGlyKTsKKyAgICB9CisgIH0KKworICBwcml2YXRlIHN0YXRpYyBjbGFzcyBNeUNsYXNzTG9hZGVyIGV4dGVuZHMgQ2xhc3NMb2FkZXIgeworICAgIHB1YmxpYyBNeUNsYXNzTG9hZGVyKENsYXNzTG9hZGVyIHBhcmVudCkgeworICAgICAgc3VwZXIocGFyZW50KTsKKyAgICB9CisKKyAgICBwdWJsaWMgQ2xhc3MgZG9EZWZpbmVDbGFzcyhTdHJpbmcgbmFtZSwgYnl0ZVtdIGRhdGEpIHsKKyAgICAgIHJldHVybiBkZWZpbmVDbGFzcyhuYW1lLCBkYXRhLCAwLCBkYXRhLmxlbmd0aCk7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIENsYXNzPD8+IGxvYWRDbGFzcyhTdHJpbmcgbmFtZSkgdGhyb3dzIENsYXNzTm90Rm91bmRFeGNlcHRpb24geworICAgICAgcmV0dXJuIHN1cGVyLmxvYWRDbGFzcyhuYW1lKTsKKyAgICB9CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9kZXBlbmRlbmNpZXMvQ3ljbGljRGVwZW5kZW5jaWVzVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2RlcGVuZGVuY2llcy9DeWNsaWNEZXBlbmRlbmNpZXNUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzBlZGVkNwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9kZXBlbmRlbmNpZXMvQ3ljbGljRGVwZW5kZW5jaWVzVGVzdC5qYXZhCkBAIC0wLDAgKzEsMjIyIEBACisvKgorICogQ29weXJpZ2h0IDIwMDAtMjAxMiBKZXRCcmFpbnMgcy5yLm8uCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworcGFja2FnZSBjb20uaW50ZWxsaWouZGVwZW5kZW5jaWVzOworCitpbXBvcnQgY29tLmludGVsbGlqLkphdmFUZXN0VXRpbDsKK2ltcG9ydCBjb20uaW50ZWxsaWouYW5hbHlzaXMuQW5hbHlzaXNTY29wZTsKK2ltcG9ydCBjb20uaW50ZWxsaWouYW5hbHlzaXMuSmF2YUFuYWx5c2lzU2NvcGU7CitpbXBvcnQgY29tLmludGVsbGlqLmN5Y2xpY0RlcGVuZGVuY2llcy5DeWNsaWNEZXBlbmRlbmNpZXNCdWlsZGVyOworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLnByb2plY3RSb290cy5pbXBsLkphdmFTZGtJbXBsOworaW1wb3J0IGNvbS5pbnRlbGxpai5wc2kuSmF2YVBzaUZhY2FkZTsKK2ltcG9ydCBjb20uaW50ZWxsaWoucHNpLlBzaVBhY2thZ2U7CitpbXBvcnQgY29tLmludGVsbGlqLnRlc3RGcmFtZXdvcmsuSWRlYVRlc3RVdGlsOworaW1wb3J0IGNvbS5pbnRlbGxpai50ZXN0RnJhbWV3b3JrLlBzaVRlc3RDYXNlOworaW1wb3J0IGNvbS5pbnRlbGxpai50ZXN0RnJhbWV3b3JrLlBzaVRlc3RVdGlsOworCitpbXBvcnQgamF2YS51dGlsLio7CisKKy8qKgorICogVXNlcjogYW5uYQorICogRGF0ZTogRmViIDIsIDIwMDUKKyAqLworcHVibGljIGNsYXNzIEN5Y2xpY0RlcGVuZGVuY2llc1Rlc3QgZXh0ZW5kcyBQc2lUZXN0Q2FzZSB7CisgIEBPdmVycmlkZQorICBwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24geworICAgIHN1cGVyLnNldFVwKCk7CisKKyAgICBTdHJpbmcgcm9vdCA9IEphdmFUZXN0VXRpbC5nZXRKYXZhVGVzdERhdGFQYXRoKCkgKyAiL2RlcGVuZGVuY2llcy9jeWNsZS8iICsgZ2V0VGVzdE5hbWUodHJ1ZSk7CisgICAgUHNpVGVzdFV0aWwucmVtb3ZlQWxsUm9vdHMobXlNb2R1bGUsIElkZWFUZXN0VXRpbC5nZXRNb2NrSmRrMTcoKSk7CisgICAgUHNpVGVzdFV0aWwuY3JlYXRlVGVzdFByb2plY3RTdHJ1Y3R1cmUobXlQcm9qZWN0LCBteU1vZHVsZSwgcm9vdCwgbXlGaWxlc1RvRGVsZXRlKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RUMSgpIHsKKyAgICAvLyBjb20uYTwtPmNvbS5iCisgICAgZmluYWwgQ3ljbGljRGVwZW5kZW5jaWVzQnVpbGRlciBidWlsZGVyID0gbmV3IEN5Y2xpY0RlcGVuZGVuY2llc0J1aWxkZXIobXlQcm9qZWN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBBbmFseXNpc1Njb3BlKG15UHJvamVjdCkpOworICAgIGJ1aWxkZXIuYW5hbHl6ZSgpOworICAgIGZpbmFsIEhhc2hNYXA8UHNpUGFja2FnZSwgU2V0PExpc3Q8UHNpUGFja2FnZT4+PiBjeWNsaWNEZXBlbmRlbmNpZXMgPSBidWlsZGVyLmdldEN5Y2xpY0RlcGVuZGVuY2llcygpOworICAgIEhhc2hNYXA8U3RyaW5nLCBTdHJpbmdbXVtdPiBleHBlY3RlZCA9IG5ldyBIYXNoTWFwPFN0cmluZywgU3RyaW5nW11bXT4oKTsKKyAgICBleHBlY3RlZC5wdXQoImNvbS5iIiwgbmV3IFN0cmluZ1tdW117eyJjb20uYSIsICJjb20uYiJ9fSk7CisgICAgZXhwZWN0ZWQucHV0KCJjb20uYSIsIG5ldyBTdHJpbmdbXVtde3siY29tLmIiLCAiY29tLmEifX0pOworICAgIGNoZWNrUmVzdWx0KGV4cGVjdGVkLCBjeWNsaWNEZXBlbmRlbmNpZXMpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFBhY2thZ2VTY29wZTEoKXsKKyAgICAvLyBjb20uYTwtPmNvbS5iCisgICAgZmluYWwgQ3ljbGljRGVwZW5kZW5jaWVzQnVpbGRlciBidWlsZGVyID0gbmV3IEN5Y2xpY0RlcGVuZGVuY2llc0J1aWxkZXIobXlQcm9qZWN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBKYXZhQW5hbHlzaXNTY29wZShKYXZhUHNpRmFjYWRlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuZ2V0SW5zdGFuY2UobXlQc2lNYW5hZ2VyLmdldFByb2plY3QoKSkuZmluZFBhY2thZ2UoImNvbSIpLCBudWxsKSk7CisgICAgYnVpbGRlci5hbmFseXplKCk7CisgICAgZmluYWwgSGFzaE1hcDxQc2lQYWNrYWdlLCBTZXQ8TGlzdDxQc2lQYWNrYWdlPj4+IGN5Y2xpY0RlcGVuZGVuY2llcyA9IGJ1aWxkZXIuZ2V0Q3ljbGljRGVwZW5kZW5jaWVzKCk7CisgICAgSGFzaE1hcDxTdHJpbmcsIFN0cmluZ1tdW10+IGV4cGVjdGVkID0gbmV3IEhhc2hNYXA8U3RyaW5nLCBTdHJpbmdbXVtdPigpOworICAgIGV4cGVjdGVkLnB1dCgiY29tLmIiLCBuZXcgU3RyaW5nW11bXXt7ImNvbS5hIiwgImNvbS5iIn19KTsKKyAgICBleHBlY3RlZC5wdXQoImNvbS5hIiwgbmV3IFN0cmluZ1tdW117eyJjb20uYiIsICJjb20uYSJ9fSk7CisgICAgY2hlY2tSZXN1bHQoZXhwZWN0ZWQsIGN5Y2xpY0RlcGVuZGVuY2llcyk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0VDIoKSB7CisgICAgLy9jb20uYjwtPmNvbS5hCisgICAgLy9jb20uYzwtPmNvbS5kCisgICAgZmluYWwgQ3ljbGljRGVwZW5kZW5jaWVzQnVpbGRlciBidWlsZGVyID0gbmV3IEN5Y2xpY0RlcGVuZGVuY2llc0J1aWxkZXIobXlQcm9qZWN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBBbmFseXNpc1Njb3BlKG15UHJvamVjdCkpOworICAgIGJ1aWxkZXIuYW5hbHl6ZSgpOworICAgIGZpbmFsIEhhc2hNYXA8UHNpUGFja2FnZSwgU2V0PExpc3Q8UHNpUGFja2FnZT4+PiBjeWNsaWNEZXBlbmRlbmNpZXMgPSBidWlsZGVyLmdldEN5Y2xpY0RlcGVuZGVuY2llcygpOworICAgIEhhc2hNYXA8U3RyaW5nLCBTdHJpbmdbXVtdPiBleHBlY3RlZCA9IG5ldyBIYXNoTWFwPFN0cmluZywgU3RyaW5nW11bXT4oKTsKKyAgICBleHBlY3RlZC5wdXQoImNvbS5iIiwgbmV3IFN0cmluZ1tdW117eyJjb20uYSIsICJjb20uYiJ9fSk7CisgICAgZXhwZWN0ZWQucHV0KCJjb20uZCIsIG5ldyBTdHJpbmdbXVtde3siY29tLmMiLCAiY29tLmQifX0pOworICAgIGV4cGVjdGVkLnB1dCgiY29tLmMiLCBuZXcgU3RyaW5nW11bXXt7ImNvbS5kIiwgImNvbS5jIn19KTsKKyAgICBleHBlY3RlZC5wdXQoImNvbS5hIiwgbmV3IFN0cmluZ1tdW117eyJjb20uYiIsICJjb20uYSJ9fSk7CisgICAgY2hlY2tSZXN1bHQoZXhwZWN0ZWQsIGN5Y2xpY0RlcGVuZGVuY2llcyk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0UGFja2FnZVNjb3BlMigpIHsKKyAgICAvL2NvbS5iPC0+Y29tLmEgIC0gZmluZAorICAgIC8vY29tLmM8LT5jb20uZCAgLSBub3QgaW4gc2NvcGUKKyAgICBmaW5hbCBDeWNsaWNEZXBlbmRlbmNpZXNCdWlsZGVyIGJ1aWxkZXIgPSBuZXcgQ3ljbGljRGVwZW5kZW5jaWVzQnVpbGRlcihteVByb2plY3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IEphdmFBbmFseXNpc1Njb3BlKEphdmFQc2lGYWNhZGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5nZXRJbnN0YW5jZShteVBzaU1hbmFnZXIuZ2V0UHJvamVjdCgpKS5maW5kUGFja2FnZSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb20uc3Vic2NvcGUxIiksIG51bGwpKTsKKyAgICBidWlsZGVyLmFuYWx5emUoKTsKKyAgICBmaW5hbCBIYXNoTWFwPFBzaVBhY2thZ2UsIFNldDxMaXN0PFBzaVBhY2thZ2U+Pj4gY3ljbGljRGVwZW5kZW5jaWVzID0gYnVpbGRlci5nZXRDeWNsaWNEZXBlbmRlbmNpZXMoKTsKKyAgICBIYXNoTWFwPFN0cmluZywgU3RyaW5nW11bXT4gZXhwZWN0ZWQgPSBuZXcgSGFzaE1hcDxTdHJpbmcsIFN0cmluZ1tdW10+KCk7CisgICAgZXhwZWN0ZWQucHV0KCJjb20uc3Vic2NvcGUxLmIiLCBuZXcgU3RyaW5nW11bXXt7ImNvbS5zdWJzY29wZTEuYSIsICJjb20uc3Vic2NvcGUxLmIifX0pOworICAgIGV4cGVjdGVkLnB1dCgiY29tLnN1YnNjb3BlMS5hIiwgbmV3IFN0cmluZ1tdW117eyJjb20uc3Vic2NvcGUxLmIiLCAiY29tLnN1YnNjb3BlMS5hIn19KTsKKyAgICBjaGVja1Jlc3VsdChleHBlY3RlZCwgY3ljbGljRGVwZW5kZW5jaWVzKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RUMygpIHsKKyAgICAvL2NvbS5iPC0+Y29tLmQKKyAgICAvL2NvbS5iLT5jb20uYS0+Y29tLmMtPmNvbS5iCisgICAgZmluYWwgQ3ljbGljRGVwZW5kZW5jaWVzQnVpbGRlciBidWlsZGVyID0gbmV3IEN5Y2xpY0RlcGVuZGVuY2llc0J1aWxkZXIobXlQcm9qZWN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBBbmFseXNpc1Njb3BlKG15UHJvamVjdCkpOworICAgIGJ1aWxkZXIuYW5hbHl6ZSgpOworICAgIGZpbmFsIEhhc2hNYXA8UHNpUGFja2FnZSwgU2V0PExpc3Q8UHNpUGFja2FnZT4+PiBjeWNsaWNEZXBlbmRlbmNpZXMgPSBidWlsZGVyLmdldEN5Y2xpY0RlcGVuZGVuY2llcygpOworICAgIEhhc2hNYXA8U3RyaW5nLCBTdHJpbmdbXVtdPiBleHBlY3RlZCA9IG5ldyBIYXNoTWFwPFN0cmluZywgU3RyaW5nW11bXT4oKTsKKyAgICBleHBlY3RlZC5wdXQoImNvbS5iIiwgbmV3IFN0cmluZ1tdW117eyJjb20uYyIsICJjb20uYSIsICJjb20uYiJ9LCB7ImNvbS5kIiwgImNvbS5iIn19KTsKKyAgICBleHBlY3RlZC5wdXQoImNvbS5kIiwgbmV3IFN0cmluZ1tdW117eyJjb20uYiIsICJjb20uZCJ9fSk7CisgICAgZXhwZWN0ZWQucHV0KCJjb20uYyIsIG5ldyBTdHJpbmdbXVtde3siY29tLmEiLCAiY29tLmIiLCAiY29tLmMifX0pOworICAgIGV4cGVjdGVkLnB1dCgiY29tLmEiLCBuZXcgU3RyaW5nW11bXXt7ImNvbS5iIiwgImNvbS5jIiwgImNvbS5hIn19KTsKKyAgICBjaGVja1Jlc3VsdChleHBlY3RlZCwgY3ljbGljRGVwZW5kZW5jaWVzLCB0cnVlKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RUNCgpIHsKKyAgICAvL2NvbS5hPC0+Y29tLmIKKyAgICAvL2NvbS5hLT5jb20uYy0+Y29tLmQtPmNvbS5hCisgICAgZmluYWwgQ3ljbGljRGVwZW5kZW5jaWVzQnVpbGRlciBidWlsZGVyID0gbmV3IEN5Y2xpY0RlcGVuZGVuY2llc0J1aWxkZXIobXlQcm9qZWN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBBbmFseXNpc1Njb3BlKG15UHJvamVjdCkpOworICAgIGJ1aWxkZXIuYW5hbHl6ZSgpOworICAgIGZpbmFsIEhhc2hNYXA8UHNpUGFja2FnZSwgU2V0PExpc3Q8UHNpUGFja2FnZT4+PiBjeWNsaWNEZXBlbmRlbmNpZXMgPSBidWlsZGVyLmdldEN5Y2xpY0RlcGVuZGVuY2llcygpOworICAgIEhhc2hNYXA8U3RyaW5nLCBTdHJpbmdbXVtdPiBleHBlY3RlZCA9IG5ldyBIYXNoTWFwPFN0cmluZywgU3RyaW5nW11bXT4oKTsKKyAgICBleHBlY3RlZC5wdXQoImNvbS5iIiwgbmV3IFN0cmluZ1tdW117eyJjb20uYSIsICJjb20uYiIgfX0pOworICAgIGV4cGVjdGVkLnB1dCgiY29tLmQiLCBuZXcgU3RyaW5nW11bXXt7ImNvbS5jIiwgImNvbS5hIiwgImNvbS5kIn19KTsKKyAgICBleHBlY3RlZC5wdXQoImNvbS5jIiwgbmV3IFN0cmluZ1tdW117eyJjb20uYSIsICJjb20uZCIsICJjb20uYyJ9fSk7CisgICAgZXhwZWN0ZWQucHV0KCJjb20uYSIsIG5ldyBTdHJpbmdbXVtde3siY29tLmQiLCAiY29tLmMiLCJjb20uYSJ9LCB7ImNvbS5iIiwgImNvbS5hIn19KTsKKyAgICBjaGVja1Jlc3VsdChleHBlY3RlZCwgY3ljbGljRGVwZW5kZW5jaWVzLCB0cnVlKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RUNSgpIHsKKyAgICAvL2NvbS5iPC0+Y29tLmQKKyAgICAvL2NvbS5iLT5jb20uYS0+Y29tLmMtPmNvbS5iCisgICAgZmluYWwgQ3ljbGljRGVwZW5kZW5jaWVzQnVpbGRlciBidWlsZGVyID0gbmV3IEN5Y2xpY0RlcGVuZGVuY2llc0J1aWxkZXIobXlQcm9qZWN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBBbmFseXNpc1Njb3BlKG15UHJvamVjdCkpOworICAgIGJ1aWxkZXIuYW5hbHl6ZSgpOworICAgIGZpbmFsIEhhc2hNYXA8UHNpUGFja2FnZSwgU2V0PExpc3Q8UHNpUGFja2FnZT4+PiBjeWNsaWNEZXBlbmRlbmNpZXMgPSBidWlsZGVyLmdldEN5Y2xpY0RlcGVuZGVuY2llcygpOworICAgIEhhc2hNYXA8U3RyaW5nLCBTdHJpbmdbXVtdPiBleHBlY3RlZCA9IG5ldyBIYXNoTWFwPFN0cmluZywgU3RyaW5nW11bXT4oKTsKKyAgICBleHBlY3RlZC5wdXQoImNvbS5iIiwgbmV3IFN0cmluZ1tdW117eyJjb20uZCIsICJjb20uYiJ9LCB7ImNvbS5jIiwgImNvbS5hIiwgImNvbS5iIn19KTsKKyAgICBleHBlY3RlZC5wdXQoImNvbS5kIiwgbmV3IFN0cmluZ1tdW117eyJjb20uYiIsICJjb20uZCJ9fSk7CisgICAgZXhwZWN0ZWQucHV0KCJjb20uYyIsIG5ldyBTdHJpbmdbXVtde3siY29tLmEiLCAiY29tLmIiLCAiY29tLmMifX0pOworICAgIGV4cGVjdGVkLnB1dCgiY29tLmEiLCBuZXcgU3RyaW5nW11bXXt7ImNvbS5iIiwgImNvbS5jIiwgImNvbS5hIn19KTsKKyAgICBjaGVja1Jlc3VsdChleHBlY3RlZCwgY3ljbGljRGVwZW5kZW5jaWVzLCB0cnVlKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RUNigpIHsKKyAgICAvL0EtPkIxCisgICAgLy9CMi0+QworICAgIC8vQy0+QQorICAgIGZpbmFsIEN5Y2xpY0RlcGVuZGVuY2llc0J1aWxkZXIgYnVpbGRlciA9IG5ldyBDeWNsaWNEZXBlbmRlbmNpZXNCdWlsZGVyKG15UHJvamVjdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgQW5hbHlzaXNTY29wZShteVByb2plY3QpKTsKKyAgICBidWlsZGVyLmFuYWx5emUoKTsKKyAgICBmaW5hbCBIYXNoTWFwPFBzaVBhY2thZ2UsIFNldDxMaXN0PFBzaVBhY2thZ2U+Pj4gY3ljbGljRGVwZW5kZW5jaWVzID0gYnVpbGRlci5nZXRDeWNsaWNEZXBlbmRlbmNpZXMoKTsKKyAgICBIYXNoTWFwPFN0cmluZywgU3RyaW5nW11bXT4gZXhwZWN0ZWQgPSBuZXcgSGFzaE1hcDxTdHJpbmcsIFN0cmluZ1tdW10+KCk7CisgICAgZXhwZWN0ZWQucHV0KCJjb20uYiIsIG5ldyBTdHJpbmdbXVtde3siY29tLmEiLCAiY29tLmMiLCAiY29tLmIifX0pOworICAgIGV4cGVjdGVkLnB1dCgiY29tLmMiLCBuZXcgU3RyaW5nW11bXXt7ImNvbS5iIiwgImNvbS5hIiwgImNvbS5jIn19KTsKKyAgICBleHBlY3RlZC5wdXQoImNvbS5hIiwgbmV3IFN0cmluZ1tdW117eyJjb20uYyIsICJjb20uYiIsICJjb20uYSJ9fSk7CisgICAgY2hlY2tSZXN1bHQoZXhwZWN0ZWQsIGN5Y2xpY0RlcGVuZGVuY2llcywgdHJ1ZSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0Tm9DeWNsZSgpeworICAgIC8vQi0+QQorICAgIGZpbmFsIEN5Y2xpY0RlcGVuZGVuY2llc0J1aWxkZXIgYnVpbGRlciA9IG5ldyBDeWNsaWNEZXBlbmRlbmNpZXNCdWlsZGVyKG15UHJvamVjdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgQW5hbHlzaXNTY29wZShteVByb2plY3QpKTsKKyAgICBidWlsZGVyLmFuYWx5emUoKTsKKyAgICBmaW5hbCBIYXNoTWFwPFBzaVBhY2thZ2UsIFNldDxMaXN0PFBzaVBhY2thZ2U+Pj4gY3ljbGljRGVwZW5kZW5jaWVzID0gYnVpbGRlci5nZXRDeWNsaWNEZXBlbmRlbmNpZXMoKTsKKyAgICBIYXNoTWFwPFN0cmluZywgU3RyaW5nW11bXT4gZXhwZWN0ZWQgPSBuZXcgSGFzaE1hcDxTdHJpbmcsIFN0cmluZ1tdW10+KCk7CisgICAgZXhwZWN0ZWQucHV0KCJjb20uYiIsIG5ldyBTdHJpbmdbMF1bMF0pOworICAgIGV4cGVjdGVkLnB1dCgiY29tLmEiLCBuZXcgU3RyaW5nWzBdWzBdKTsKKyAgICBjaGVja1Jlc3VsdChleHBlY3RlZCwgY3ljbGljRGVwZW5kZW5jaWVzLCB0cnVlKTsKKyAgfQorCisgIHByaXZhdGUgc3RhdGljIHZvaWQgY2hlY2tSZXN1bHQoSGFzaE1hcDxTdHJpbmcsIFN0cmluZ1tdW10+IGV4cGVjdGVkLCBIYXNoTWFwPFBzaVBhY2thZ2UsIFNldDxMaXN0PFBzaVBhY2thZ2U+Pj4gY3ljbGVzKSB7CisgICAgYXNzZXJ0RXF1YWxzKGV4cGVjdGVkLnNpemUoKSwgY3ljbGVzLnNpemUoKSk7CisgICAgSXRlcmF0b3I8UHNpUGFja2FnZT4gaXQgPSBjeWNsZXMua2V5U2V0KCkuaXRlcmF0b3IoKTsKKyAgICBmb3IgKGZpbmFsIFN0cmluZyBwYWNrcyA6IGV4cGVjdGVkLmtleVNldCgpKSB7CisgICAgICBmaW5hbCBQc2lQYWNrYWdlIHBzaVBhY2thZ2UgPSBpdC5uZXh0KCk7CisgICAgICBhc3NlcnRFcXVhbHMocGFja3MsIHBzaVBhY2thZ2UuZ2V0UXVhbGlmaWVkTmFtZSgpKTsKKyAgICAgIGFzc2VydEVxdWFscyhleHBlY3RlZC5nZXQocGFja3MpLmxlbmd0aCwgY3ljbGVzLmdldChwc2lQYWNrYWdlKS5zaXplKCkpOworICAgICAgSXRlcmF0b3I8TGlzdDxQc2lQYWNrYWdlPj4gaUMgPSBjeWNsZXMuZ2V0KHBzaVBhY2thZ2UpLml0ZXJhdG9yKCk7CisgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGV4cGVjdGVkLmdldChwYWNrcykubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgZmluYWwgU3RyaW5nW10gZXhwZWN0ZWRDeWNsZSA9IGV4cGVjdGVkLmdldChwYWNrcylbaV07CisgICAgICAgIGZpbmFsIExpc3Q8UHNpUGFja2FnZT4gY3ljbGUgPSBpQy5uZXh0KCk7CisgICAgICAgIGFzc2VydEVxdWFscyhleHBlY3RlZEN5Y2xlLmxlbmd0aCwgY3ljbGUuc2l6ZSgpKTsKKyAgICAgICAgSXRlcmF0b3I8UHNpUGFja2FnZT4gaUN5Y2xlID0gY3ljbGUuaXRlcmF0b3IoKTsKKyAgICAgICAgZm9yIChmaW5hbCBTdHJpbmcgZXhwZWN0ZWRJbkN5Y2xlIDogZXhwZWN0ZWRDeWNsZSkgeworICAgICAgICAgIGZpbmFsIFBzaVBhY2thZ2UgcGFja2FnZUluQ3ljbGUgPSBpQ3ljbGUubmV4dCgpOworICAgICAgICAgIGFzc2VydEVxdWFscyhleHBlY3RlZEluQ3ljbGUsIHBhY2thZ2VJbkN5Y2xlLmdldFF1YWxpZmllZE5hbWUoKSk7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisgIH0KKworICBwcml2YXRlIHN0YXRpYyB2b2lkIGNoZWNrUmVzdWx0KEhhc2hNYXA8U3RyaW5nLCBTdHJpbmdbXVtdPiBleHBlY3RlZCwgSGFzaE1hcDxQc2lQYWNrYWdlLCBTZXQ8TGlzdDxQc2lQYWNrYWdlPj4+IGN5Y2xlcywgYm9vbGVhbiBmb3JjZUNvbnRhaW5zKXsKKyAgICBhc3NlcnRFcXVhbHMoZXhwZWN0ZWQuc2l6ZSgpLCBjeWNsZXMuc2l6ZSgpKTsKKyAgICBmb3IgKGZpbmFsIFBzaVBhY2thZ2UgcHNpUGFja2FnZSA6IGN5Y2xlcy5rZXlTZXQoKSkgeworICAgICAgYXNzZXJ0VHJ1ZShleHBlY3RlZC5jb250YWluc0tleShwc2lQYWNrYWdlLmdldFF1YWxpZmllZE5hbWUoKSkpOworICAgICAgZmluYWwgU3RyaW5nIHBhY2tzID0gcHNpUGFja2FnZS5nZXRRdWFsaWZpZWROYW1lKCk7CisgICAgICBpZiAoZm9yY2VDb250YWlucykgeworICAgICAgICBhc3NlcnRFcXVhbHMoZXhwZWN0ZWQuZ2V0KHBhY2tzKS5sZW5ndGgsIGN5Y2xlcy5nZXQocHNpUGFja2FnZSkuc2l6ZSgpKTsKKyAgICAgIH0KKyAgICAgIGZvciAoZmluYWwgTGlzdDxQc2lQYWNrYWdlPiBjeWNsZSA6IGN5Y2xlcy5nZXQocHNpUGFja2FnZSkpIHsKKyAgICAgICAgZmluYWwgU3RyaW5nW11bXSBleHBlY3RlZEN5Y2xlcyA9IGV4cGVjdGVkLmdldChwYWNrcyk7CisgICAgICAgIGZpbmFsIFN0cmluZ1tdIHN0cmluZyA9IG5ldyBTdHJpbmdbY3ljbGUuc2l6ZSgpXTsKKyAgICAgICAgaW50IGkgPSAwOworICAgICAgICBmb3IgKGZpbmFsIFBzaVBhY2thZ2UgcGFja2FnZUluQ3ljbGUgOiBjeWNsZSkgeworICAgICAgICAgIHN0cmluZ1tpKytdID0gcGFja2FnZUluQ3ljbGUuZ2V0UXVhbGlmaWVkTmFtZSgpOworICAgICAgICB9CisgICAgICAgIGFzc2VydFRydWUoZmluZEluTWF0cml4KGV4cGVjdGVkQ3ljbGVzLCBzdHJpbmcpID4gLTEpOworICAgICAgfQorICAgIH0KKyAgfQorCisgIHByaXZhdGUgc3RhdGljIGludCBmaW5kSW5NYXRyaXgoU3RyaW5nIFtdW10gbWF0cml4LCBTdHJpbmcgW10gc3RyaW5nKXsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IG1hdHJpeC5sZW5ndGg7IGkrKykgeworICAgICAgU3RyaW5nW10gc3RyaW5ncyA9IG1hdHJpeFtpXTsKKyAgICAgIGlmIChBcnJheXMuZXF1YWxzKHN0cmluZ3MsIHN0cmluZykpeworICAgICAgICByZXR1cm4gaTsKKyAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIC0xOworICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovZGVwZW5kZW5jaWVzL0RlcGVuZGVuY2llc1BhbmVsVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2RlcGVuZGVuY2llcy9EZXBlbmRlbmNpZXNQYW5lbFRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZWRmYjAwCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2RlcGVuZGVuY2llcy9EZXBlbmRlbmNpZXNQYW5lbFRlc3QuamF2YQpAQCAtMCwwICsxLDk4IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA0IEpldEJyYWlucyBzLnIuby4gQWxsICBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogLVJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICoKKyAqIC1SZWRpc3RyaWJ1dGlvbiBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjdCB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogTmVpdGhlciB0aGUgbmFtZSBvZiBKZXRCcmFpbnMgb3IgSW50ZWxsaUogSURFQQorICogbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIHByb3ZpZGVkICJBUyBJUywiIHdpdGhvdXQgYSB3YXJyYW50eSBvZiBhbnkga2luZC4gQUxMCisgKiBFWFBSRVNTIE9SIElNUExJRUQgQ09ORElUSU9OUywgUkVQUkVTRU5UQVRJT05TIEFORCBXQVJSQU5USUVTLCBJTkNMVURJTkcKKyAqIEFOWSBJTVBMSUVEIFdBUlJBTlRZIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIE9SIE5PTi1JTkZSSU5HRU1FTlQsIEFSRSBIRVJFQlkgRVhDTFVERUQuIEpFVEJSQUlOUyBBTkQgSVRTIExJQ0VOU09SUyBTSEFMTCBOT1QKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERBTUFHRVMgT1IgTElBQklMSVRJRVMgU1VGRkVSRUQgQlkgTElDRU5TRUUgQVMgQSBSRVNVTFQKKyAqIE9GIE9SIFJFTEFUSU5HIFRPIFVTRSwgTU9ESUZJQ0FUSU9OIE9SIERJU1RSSUJVVElPTiBPRiBUSEUgU09GVFdBUkUgT1IgSVRTCisgKiBERVJJVkFUSVZFUy4gSU4gTk8gRVZFTlQgV0lMTCBKRVRCUkFJTlMgT1IgSVRTIExJQ0VOU09SUyBCRSBMSUFCTEUgRk9SIEFOWSBMT1NUCisgKiBSRVZFTlVFLCBQUk9GSVQgT1IgREFUQSwgT1IgRk9SIERJUkVDVCwgSU5ESVJFQ1QsIFNQRUNJQUwsIENPTlNFUVVFTlRJQUwsCisgKiBJTkNJREVOVEFMIE9SIFBVTklUSVZFIERBTUFHRVMsIEhPV0VWRVIgQ0FVU0VEIEFORCBSRUdBUkRMRVNTIE9GIFRIRSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgQVJJU0lORyBPVVQgT0YgVEhFIFVTRSBPRiBPUiBJTkFCSUxJVFkgVE8gVVNFIFNPRlRXQVJFLCBFVkVOCisgKiBJRiBKRVRCUkFJTlMgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLgorICoKKyAqLworcGFja2FnZSBjb20uaW50ZWxsaWouZGVwZW5kZW5jaWVzOworCitpbXBvcnQgY29tLmludGVsbGlqLkphdmFUZXN0VXRpbDsKK2ltcG9ydCBjb20uaW50ZWxsaWouYW5hbHlzaXMuQW5hbHlzaXNTY29wZTsKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS51dGlsLkRpc3Bvc2VyOworaW1wb3J0IGNvbS5pbnRlbGxpai5wYWNrYWdlRGVwZW5kZW5jaWVzLkRlcGVuZGVuY2llc0J1aWxkZXI7CitpbXBvcnQgY29tLmludGVsbGlqLnBhY2thZ2VEZXBlbmRlbmNpZXMuRGVwZW5kZW5jeVVJU2V0dGluZ3M7CitpbXBvcnQgY29tLmludGVsbGlqLnBhY2thZ2VEZXBlbmRlbmNpZXMuRm9yd2FyZERlcGVuZGVuY2llc0J1aWxkZXI7CitpbXBvcnQgY29tLmludGVsbGlqLnBhY2thZ2VEZXBlbmRlbmNpZXMudWkuRGVwZW5kZW5jaWVzUGFuZWw7CitpbXBvcnQgY29tLmludGVsbGlqLnBhY2thZ2VEZXBlbmRlbmNpZXMudWkuUGFja2FnZVBhdHRlcm5Qcm92aWRlcjsKK2ltcG9ydCBjb20uaW50ZWxsaWoucHNpLio7CitpbXBvcnQgY29tLmludGVsbGlqLnRlc3RGcmFtZXdvcmsuSWRlYVRlc3RVdGlsOworaW1wb3J0IGNvbS5pbnRlbGxpai50ZXN0RnJhbWV3b3JrLlRlc3RTb3VyY2VCYXNlZFRlc3RDYXNlOworaW1wb3J0IGp1bml0LmZyYW1ld29yay5Bc3NlcnQ7CisKK2ltcG9ydCBqYXZheC5zd2luZy4qOworCitwdWJsaWMgY2xhc3MgRGVwZW5kZW5jaWVzUGFuZWxUZXN0IGV4dGVuZHMgVGVzdFNvdXJjZUJhc2VkVGVzdENhc2V7CisgIHB1YmxpYyB2b2lkIHRlc3REZXBlbmRlbmNpZXMoKXsKKyAgICBEZXBlbmRlbmNpZXNQYW5lbCBkZXBlbmRlbmNpZXNQYW5lbCA9IG51bGw7CisgICAgdHJ5IHsKKyAgICAgIGZpbmFsIFBzaURpcmVjdG9yeSBwc2lEaXJlY3RvcnkgPSBnZXRQYWNrYWdlRGlyZWN0b3J5KCJjb20vcGFja2FnZTEiKTsKKyAgICAgIEFzc2VydC5hc3NlcnROb3ROdWxsKHBzaURpcmVjdG9yeSk7CisgICAgICBmaW5hbCBQc2lQYWNrYWdlIHBzaVBhY2thZ2UgPSBKYXZhRGlyZWN0b3J5U2VydmljZS5nZXRJbnN0YW5jZSgpLmdldFBhY2thZ2UocHNpRGlyZWN0b3J5KTsKKyAgICAgIEFzc2VydC5hc3NlcnROb3ROdWxsKHBzaVBhY2thZ2UpOworICAgICAgZmluYWwgUHNpQ2xhc3NbXSBjbGFzc2VzID0gcHNpUGFja2FnZS5nZXRDbGFzc2VzKCk7CisgICAgICBzb3J0Q2xhc3Nlc0J5TmFtZShjbGFzc2VzKTsKKyAgICAgIGZpbmFsIFBzaUZpbGUgZmlsZSA9IGNsYXNzZXNbMF0uZ2V0Q29udGFpbmluZ0ZpbGUoKTsKKyAgICAgIGZpbmFsIEFuYWx5c2lzU2NvcGUgc2NvcGUgPSBuZXcgQW5hbHlzaXNTY29wZShmaWxlKTsKKyAgICAgIGZpbmFsIERlcGVuZGVuY2llc0J1aWxkZXIgYnVpbGRlciA9IG5ldyBGb3J3YXJkRGVwZW5kZW5jaWVzQnVpbGRlcihteVByb2plY3QsIHNjb3BlKTsKKyAgICAgIGJ1aWxkZXIuYW5hbHl6ZSgpOworICAgICAgRGVwZW5kZW5jeVVJU2V0dGluZ3MuZ2V0SW5zdGFuY2UoKS5TQ09QRV9UWVBFID0gUGFja2FnZVBhdHRlcm5Qcm92aWRlci5QQUNLQUdFUzsKKyAgICAgIGRlcGVuZGVuY2llc1BhbmVsID0gbmV3IERlcGVuZGVuY2llc1BhbmVsKG15UHJvamVjdCwgYnVpbGRlcik7CisgICAgICBKVHJlZSBsZWZ0VHJlZSA9IGRlcGVuZGVuY2llc1BhbmVsLmdldExlZnRUcmVlKCk7CisgICAgICBJZGVhVGVzdFV0aWwuYXNzZXJ0VHJlZUVxdWFsKGxlZnRUcmVlLCAiLVJvb3RcbiIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgTGlicmFyeSBDbGFzc2VzXG4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIC1Qcm9kdWN0aW9uIENsYXNzZXNcbiIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgIC1jb20ucGFja2FnZTFcbiIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgICBbQ2xhc3MxLmphdmFdXG4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIFRlc3QgQ2xhc3Nlc1xuIiwgdHJ1ZSk7CisKKyAgICAgIEpUcmVlIHJpZ2h0VHJlZSA9IGRlcGVuZGVuY2llc1BhbmVsLmdldFJpZ2h0VHJlZSgpOworICAgICAgSWRlYVRlc3RVdGlsLmFzc2VydFRyZWVFcXVhbChyaWdodFRyZWUsICItUm9vdFxuIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgTGlicmFyeSBDbGFzc2VzXG4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAtUHJvZHVjdGlvbiBDbGFzc2VzXG4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgLWNvbS5wYWNrYWdlMVxuIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgICBDbGFzczIuamF2YVxuIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgVGVzdCBDbGFzc2VzXG4iLCB0cnVlKTsKKyAgICB9CisgICAgZmluYWxseSB7CisgICAgICBpZiAoZGVwZW5kZW5jaWVzUGFuZWwgIT0gbnVsbCkgeworICAgICAgICBEaXNwb3Nlci5kaXNwb3NlKGRlcGVuZGVuY2llc1BhbmVsKTsKKyAgICAgIH0KKyAgICB9CisgIH0KKworICBAT3ZlcnJpZGUKKyAgcHJvdGVjdGVkIFN0cmluZyBnZXRUZXN0UGF0aCgpIHsKKyAgICByZXR1cm4gImRlcGVuZGVuY2llcyI7CisgIH0KKworICBAT3ZlcnJpZGUKKyAgcHJvdGVjdGVkIFN0cmluZyBnZXRUZXN0RGF0YVBhdGgoKSB7CisgICAgcmV0dXJuIEphdmFUZXN0VXRpbC5nZXRKYXZhVGVzdERhdGFQYXRoKCk7CisgIH0KKworfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2RlcGVuZGVuY2llcy9Vc2FnZXNJbkFuYWx5emluZ0RlcGVuZGVuY2llc1Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9kZXBlbmRlbmNpZXMvVXNhZ2VzSW5BbmFseXppbmdEZXBlbmRlbmNpZXNUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzlkODQ4OAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9kZXBlbmRlbmNpZXMvVXNhZ2VzSW5BbmFseXppbmdEZXBlbmRlbmNpZXNUZXN0LmphdmEKQEAgLTAsMCArMSwxNDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwMC0yMDEyIEpldEJyYWlucyBzLnIuby4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCitwYWNrYWdlIGNvbS5pbnRlbGxpai5kZXBlbmRlbmNpZXM7CisKK2ltcG9ydCBjb20uaW50ZWxsaWouSmF2YVRlc3RVdGlsOworaW1wb3J0IGNvbS5pbnRlbGxpai5hbmFseXNpcy5BbmFseXNpc1Njb3BlOworaW1wb3J0IGNvbS5pbnRlbGxpai5hbmFseXNpcy5KYXZhQW5hbHlzaXNTY29wZTsKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS5hcHBsaWNhdGlvbi5BcHBsaWNhdGlvbk1hbmFnZXI7CitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkucHJvamVjdFJvb3RzLmltcGwuSmF2YVNka0ltcGw7CitpbXBvcnQgY29tLmludGVsbGlqLnBhY2thZ2VEZXBlbmRlbmNpZXMuQmFja3dhcmREZXBlbmRlbmNpZXNCdWlsZGVyOworaW1wb3J0IGNvbS5pbnRlbGxpai5wYWNrYWdlRGVwZW5kZW5jaWVzLkRlcGVuZGVuY2llc0J1aWxkZXI7CitpbXBvcnQgY29tLmludGVsbGlqLnBhY2thZ2VEZXBlbmRlbmNpZXMuRmluZERlcGVuZGVuY3lVdGlsOworaW1wb3J0IGNvbS5pbnRlbGxpai5wYWNrYWdlRGVwZW5kZW5jaWVzLkZvcndhcmREZXBlbmRlbmNpZXNCdWlsZGVyOworaW1wb3J0IGNvbS5pbnRlbGxpai5wc2kuSmF2YVBzaUZhY2FkZTsKK2ltcG9ydCBjb20uaW50ZWxsaWoucHNpLlBzaUNsYXNzOworaW1wb3J0IGNvbS5pbnRlbGxpai5wc2kuUHNpRmlsZTsKK2ltcG9ydCBjb20uaW50ZWxsaWoucHNpLlBzaVBhY2thZ2U7CitpbXBvcnQgY29tLmludGVsbGlqLnBzaS5zZWFyY2guR2xvYmFsU2VhcmNoU2NvcGU7CitpbXBvcnQgY29tLmludGVsbGlqLnRlc3RGcmFtZXdvcmsuSWRlYVRlc3RVdGlsOworaW1wb3J0IGNvbS5pbnRlbGxpai50ZXN0RnJhbWV3b3JrLlBzaVRlc3RDYXNlOworaW1wb3J0IGNvbS5pbnRlbGxpai50ZXN0RnJhbWV3b3JrLlBzaVRlc3RVdGlsOworaW1wb3J0IGNvbS5pbnRlbGxpai51c2FnZVZpZXcuVXNhZ2VJbmZvOworaW1wb3J0IGNvbS5pbnRlbGxpai51c2FnZXMuVGV4dENodW5rOworaW1wb3J0IGNvbS5pbnRlbGxpai51c2FnZXMuVXNhZ2U7CitpbXBvcnQgY29tLmludGVsbGlqLnVzYWdlcy5Vc2FnZUluZm8yVXNhZ2VBZGFwdGVyOworCitpbXBvcnQgamF2YS51dGlsLkhhc2hTZXQ7CitpbXBvcnQgamF2YS51dGlsLlNldDsKKworLyoqCisgKiBVc2VyOiBhbm5hCisgKiBEYXRlOiBKYW4gMTgsIDIwMDUKKyAqLworcHVibGljIGNsYXNzIFVzYWdlc0luQW5hbHl6aW5nRGVwZW5kZW5jaWVzVGVzdCBleHRlbmRzIFBzaVRlc3RDYXNleworICBAT3ZlcnJpZGUKKyAgcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBzdXBlci5zZXRVcCgpOworCisgICAgU3RyaW5nIHJvb3QgPSBKYXZhVGVzdFV0aWwuZ2V0SmF2YVRlc3REYXRhUGF0aCgpICsgIi9kZXBlbmRlbmNpZXMvc2VhcmNoLyIgKyBnZXRUZXN0TmFtZSh0cnVlKTsKKyAgICBQc2lUZXN0VXRpbC5yZW1vdmVBbGxSb290cyhteU1vZHVsZSwgSWRlYVRlc3RVdGlsLmdldE1vY2tKZGsxNygpKTsKKyAgICBQc2lUZXN0VXRpbC5jcmVhdGVUZXN0UHJvamVjdFN0cnVjdHVyZShteVByb2plY3QsIG15TW9kdWxlLCByb290LCBteUZpbGVzVG9EZWxldGUpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEZvcndhcmRQYWNrYWdlU2NvcGUoKXsKKyAgICBmaW5hbCBQc2lQYWNrYWdlIGJQYWNrYWdlID0gSmF2YVBzaUZhY2FkZS5nZXRJbnN0YW5jZShteVBzaU1hbmFnZXIuZ2V0UHJvamVjdCgpKS5maW5kUGFja2FnZSgiY29tLmIiKTsKKyAgICBmaW5hbCBEZXBlbmRlbmNpZXNCdWlsZGVyIGJ1aWxkZXIgPSBuZXcgRm9yd2FyZERlcGVuZGVuY2llc0J1aWxkZXIobXlQcm9qZWN0LCBuZXcgSmF2YUFuYWx5c2lzU2NvcGUoYlBhY2thZ2UsIG51bGwpKTsKKyAgICBidWlsZGVyLmFuYWx5emUoKTsKKyAgICBmaW5hbCBTZXQ8UHNpRmlsZT4gc2VhcmNoRm9yID0gbmV3IEhhc2hTZXQ8UHNpRmlsZT4oKTsKKyAgICBzZWFyY2hGb3IuYWRkKG15SmF2YUZhY2FkZS5maW5kQ2xhc3MoImNvbS5hLkEiLCBHbG9iYWxTZWFyY2hTY29wZS5hbGxTY29wZShteVByb2plY3QpKS5nZXRDb250YWluaW5nRmlsZSgpKTsKKyAgICBmaW5hbCBTZXQ8UHNpRmlsZT4gc2VhcmNoSW4gPSBuZXcgSGFzaFNldDxQc2lGaWxlPigpOworICAgIGZpbmFsIFBzaUNsYXNzIGJDbGFzcyA9IG15SmF2YUZhY2FkZS5maW5kQ2xhc3MoImNvbS5iLkIiLCBHbG9iYWxTZWFyY2hTY29wZS5hbGxTY29wZShteVByb2plY3QpKTsKKyAgICBzZWFyY2hJbi5hZGQoYkNsYXNzLmdldENvbnRhaW5pbmdGaWxlKCkpOworICAgIGZpbmFsIFBzaUNsYXNzIGNDbGFzcyA9IG15SmF2YUZhY2FkZS5maW5kQ2xhc3MoImNvbS5iLkMiLCBHbG9iYWxTZWFyY2hTY29wZS5hbGxTY29wZShteVByb2plY3QpKTsKKyAgICBzZWFyY2hJbi5hZGQoY0NsYXNzLmdldENvbnRhaW5pbmdGaWxlKCkpOworICAgIGZpbmFsIFVzYWdlSW5mb1tdIHVzYWdlc0luZm9zID0gRmluZERlcGVuZGVuY3lVdGlsLmZpbmREZXBlbmRlbmNpZXMoYnVpbGRlciwgc2VhcmNoSW4sIHNlYXJjaEZvcik7CisgICAgZmluYWwgVXNhZ2VJbmZvMlVzYWdlQWRhcHRlcltdIHVzYWdlcyA9IFVzYWdlSW5mbzJVc2FnZUFkYXB0ZXIuY29udmVydCh1c2FnZXNJbmZvcyk7CisgICAgZmluYWwgU3RyaW5nIFtdIHBzaVVzYWdlcyA9IG5ldyBTdHJpbmcgW3VzYWdlc0luZm9zLmxlbmd0aF07CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB1c2FnZXNJbmZvcy5sZW5ndGg7IGkrKykgeworICAgICAgcHNpVXNhZ2VzW2ldID0gdG9TdHJpbmcodXNhZ2VzW2ldKTsKKyAgICB9CisgICAgY2hlY2tSZXN1bHQobmV3IFN0cmluZyBbXXsKKyAgICAgICIoMjogMTQpIGltcG9ydCBjb20uYS5BOyIsCisgICAgICAiKDQ6IDMpIEEgbXlBID0gbmV3IEEoKTsiLAorICAgICAgIig0OiAxNSkgQSBteUEgPSBuZXcgQSgpOyIsCisgICAgICAiKDY6IDkpIG15QS5hYSgpOyIsCisKKyAgICAgICIoMjogMTQpIGltcG9ydCBjb20uYS5BOyIsCisgICAgICAiKDQ6IDMpIEEgbXlBID0gbmV3IEEoKTsiLAorICAgICAgIig0OiAxNSkgQSBteUEgPSBuZXcgQSgpOyIsCisgICAgICAiKDY6IDkpIG15QS5hYSgpOyJ9LCBwc2lVc2FnZXMpOworICB9CisKKyAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIHRvU3RyaW5nKFVzYWdlIHVzYWdlKSB7CisgICAgVGV4dENodW5rW10gdGV4dENodW5rcyA9IHVzYWdlLmdldFByZXNlbnRhdGlvbigpLmdldFRleHQoKTsKKyAgICBTdHJpbmdCdWZmZXIgcmVzdWx0ID0gbmV3IFN0cmluZ0J1ZmZlcigpOworICAgIGZvciAoVGV4dENodW5rIHRleHRDaHVuayA6IHRleHRDaHVua3MpIHsKKyAgICAgIHJlc3VsdC5hcHBlbmQodGV4dENodW5rKTsKKyAgICB9CisKKyAgICByZXR1cm4gcmVzdWx0LnRvU3RyaW5nKCk7CisgIH0KKworICAgcHVibGljIHZvaWQgdGVzdEJhY2t3YXJkUGFja2FnZVNjb3BlKCl7CisgICAgIGZpbmFsIFBzaVBhY2thZ2UgYlBhY2thZ2UgPSBKYXZhUHNpRmFjYWRlLmdldEluc3RhbmNlKG15UHNpTWFuYWdlci5nZXRQcm9qZWN0KCkpLmZpbmRQYWNrYWdlKCJjb20uYSIpOworICAgIGZpbmFsIERlcGVuZGVuY2llc0J1aWxkZXIgYnVpbGRlciA9IG5ldyBCYWNrd2FyZERlcGVuZGVuY2llc0J1aWxkZXIobXlQcm9qZWN0LCBuZXcgSmF2YUFuYWx5c2lzU2NvcGUoYlBhY2thZ2UsIG51bGwpKTsKKyAgICBidWlsZGVyLmFuYWx5emUoKTsKKyAgICBmaW5hbCBTZXQ8UHNpRmlsZT4gc2VhcmNoRm9yID0gbmV3IEhhc2hTZXQ8UHNpRmlsZT4oKTsKKyAgICBzZWFyY2hGb3IuYWRkKG15SmF2YUZhY2FkZS5maW5kQ2xhc3MoImNvbS5hLkEiLCBHbG9iYWxTZWFyY2hTY29wZS5hbGxTY29wZShteVByb2plY3QpKS5nZXRDb250YWluaW5nRmlsZSgpKTsKKyAgICBmaW5hbCBTZXQ8UHNpRmlsZT4gc2VhcmNoSW4gPSBuZXcgSGFzaFNldDxQc2lGaWxlPigpOworICAgIGZpbmFsIFBzaUNsYXNzIGJDbGFzcyA9IG15SmF2YUZhY2FkZS5maW5kQ2xhc3MoImNvbS5iLkIiLCBHbG9iYWxTZWFyY2hTY29wZS5hbGxTY29wZShteVByb2plY3QpKTsKKyAgICBzZWFyY2hJbi5hZGQoYkNsYXNzLmdldENvbnRhaW5pbmdGaWxlKCkpOworICAgIGZpbmFsIFBzaUNsYXNzIGNDbGFzcyA9IG15SmF2YUZhY2FkZS5maW5kQ2xhc3MoImNvbS5hLkMiLCBHbG9iYWxTZWFyY2hTY29wZS5hbGxTY29wZShteVByb2plY3QpKTsKKyAgICBzZWFyY2hGb3IuYWRkKGNDbGFzcy5nZXRDb250YWluaW5nRmlsZSgpKTsKKyAgICBmaW5hbCBVc2FnZUluZm9bXSB1c2FnZXNJbmZvcyA9IEZpbmREZXBlbmRlbmN5VXRpbC5maW5kQmFja3dhcmREZXBlbmRlbmNpZXMoYnVpbGRlciwgc2VhcmNoSW4sIHNlYXJjaEZvcik7CisgICAgZmluYWwgVXNhZ2VJbmZvMlVzYWdlQWRhcHRlcltdIHVzYWdlcyA9IFVzYWdlSW5mbzJVc2FnZUFkYXB0ZXIuY29udmVydCh1c2FnZXNJbmZvcyk7CisgICAgZmluYWwgU3RyaW5nIFtdIHBzaVVzYWdlcyA9IG5ldyBTdHJpbmcgW3VzYWdlc0luZm9zLmxlbmd0aF07CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB1c2FnZXNJbmZvcy5sZW5ndGg7IGkrKykgeworICAgICAgcHNpVXNhZ2VzW2ldID0gdG9TdHJpbmcodXNhZ2VzW2ldKTsKKyAgICB9CisgICAgY2hlY2tSZXN1bHQobmV3IFN0cmluZyBbXXsiKDQ6IDMpIEEgbXlBID0gbmV3IEEoKTsiLCAiKDQ6IDE1KSBBIG15QSA9IG5ldyBBKCk7IiwgIig1OiAzKSBDIG15QyA9IG5ldyBDKCk7IiwgIig1OiAxNSkgQyBteUMgPSBuZXcgQygpOyIsICIoNzogOSkgbXlBLmFhKCk7IiwgIig4OiA5KSBteUMuY2MoKTsifSwgcHNpVXNhZ2VzKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RGb3J3YXJkU2ltcGxlKCl7CisgICAgZmluYWwgRGVwZW5kZW5jaWVzQnVpbGRlciBidWlsZGVyID0gbmV3IEZvcndhcmREZXBlbmRlbmNpZXNCdWlsZGVyKG15UHJvamVjdCwgbmV3IEFuYWx5c2lzU2NvcGUobXlQcm9qZWN0KSk7CisgICAgYnVpbGRlci5hbmFseXplKCk7CisKKyAgICBmaW5hbCBTZXQ8UHNpRmlsZT4gc2VhcmNoSW4gPSBuZXcgSGFzaFNldDxQc2lGaWxlPigpOworICAgIGZpbmFsIFBzaUNsYXNzIGFDbGFzcyA9IG15SmF2YUZhY2FkZS5maW5kQ2xhc3MoIkEiLCBHbG9iYWxTZWFyY2hTY29wZS5hbGxTY29wZShteVByb2plY3QpKTsKKyAgICBzZWFyY2hJbi5hZGQoYUNsYXNzLmdldENvbnRhaW5pbmdGaWxlKCkpOworICAgIGZpbmFsIFNldDxQc2lGaWxlPiBzZWFyY2hGb3IgPSBuZXcgSGFzaFNldDxQc2lGaWxlPigpOworICAgIGZpbmFsIFBzaUNsYXNzIGJDbGFzcyA9IG15SmF2YUZhY2FkZS5maW5kQ2xhc3MoIkIiLCBHbG9iYWxTZWFyY2hTY29wZS5hbGxTY29wZShteVByb2plY3QpKTsKKyAgICBzZWFyY2hGb3IuYWRkKGJDbGFzcy5nZXRDb250YWluaW5nRmlsZSgpKTsKKworICAgIGZpbmFsIFVzYWdlSW5mb1tdIHVzYWdlc0luZm9zID0gRmluZERlcGVuZGVuY3lVdGlsLmZpbmREZXBlbmRlbmNpZXMoYnVpbGRlciwgc2VhcmNoSW4sIHNlYXJjaEZvcik7CisgICAgZmluYWwgVXNhZ2VJbmZvMlVzYWdlQWRhcHRlcltdIHVzYWdlcyA9IFVzYWdlSW5mbzJVc2FnZUFkYXB0ZXIuY29udmVydCh1c2FnZXNJbmZvcyk7CisgICAgZmluYWwgU3RyaW5nIFtdIHBzaVVzYWdlcyA9IG5ldyBTdHJpbmcgW3VzYWdlc0luZm9zLmxlbmd0aF07CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB1c2FnZXNJbmZvcy5sZW5ndGg7IGkrKykgeworICAgICAgcHNpVXNhZ2VzW2ldID0gdG9TdHJpbmcodXNhZ2VzW2ldKTsKKyAgICB9CisgICAgY2hlY2tSZXN1bHQobmV3IFN0cmluZyBbXXsiKDI6IDMpIEIgbXlCID0gbmV3IEIoKTsiLCAiKDI6IDE1KSBCIG15QiA9IG5ldyBCKCk7IiwgIig0OiA5KSBteUIuYmIoKTsifSwgcHNpVXNhZ2VzKTsKKyAgfQorCisgIHByaXZhdGUgc3RhdGljIHZvaWQgY2hlY2tSZXN1bHQoZmluYWwgU3RyaW5nW10gdXNhZ2VzLCBmaW5hbCBTdHJpbmcgW10gcHNpVXNhZ2VzKSB7CisgICAgYXNzZXJ0RXF1YWxzKHVzYWdlcy5sZW5ndGggLCBwc2lVc2FnZXMubGVuZ3RoKTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IHBzaVVzYWdlcy5sZW5ndGg7IGkrKykgeworICAgICAgYXNzZXJ0RXF1YWxzKHVzYWdlc1tpXSwgcHNpVXNhZ2VzW2ldKTsKKyAgICB9CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9leGVjdXRpb24vY29uZmlndXJhdGlvbnMvSmF2YUNvbW1hbmRMaW5lVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2V4ZWN1dGlvbi9jb25maWd1cmF0aW9ucy9KYXZhQ29tbWFuZExpbmVUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjcwOGFjOQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9leGVjdXRpb24vY29uZmlndXJhdGlvbnMvSmF2YUNvbW1hbmRMaW5lVGVzdC5qYXZhCkBAIC0wLDAgKzEsMTAwIEBACisvKgorICogQ29weXJpZ2h0IDIwMDAtMjAxMSBKZXRCcmFpbnMgcy5yLm8uCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworcGFja2FnZSBjb20uaW50ZWxsaWouZXhlY3V0aW9uLmNvbmZpZ3VyYXRpb25zOworCitpbXBvcnQgY29tLmludGVsbGlqLmV4ZWN1dGlvbi5DYW50UnVuRXhjZXB0aW9uOworaW1wb3J0IGNvbS5pbnRlbGxpai5leGVjdXRpb24uRXhlY3V0aW9uQnVuZGxlOworaW1wb3J0IGNvbS5pbnRlbGxpai5leGVjdXRpb24uRXhlY3V0aW9uRXhjZXB0aW9uOworaW1wb3J0IGNvbS5pbnRlbGxpai5leGVjdXRpb24ucHJvY2Vzcy5EZWZhdWx0SmF2YVByb2Nlc3NIYW5kbGVyOworaW1wb3J0IGNvbS5pbnRlbGxpai5pZGUuSWRlQnVuZGxlOworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLnByb2plY3RSb290cy5TZGs7CitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkucHJvamVjdFJvb3RzLmltcGwuSmF2YUF3YXJlUHJvamVjdEpka1RhYmxlSW1wbDsKK2ltcG9ydCBjb20uaW50ZWxsaWoudGVzdEZyYW1ld29yay5MaWdodElkZWFUZXN0Q2FzZTsKK2ltcG9ydCBqdW5pdC5mcmFtZXdvcmsuQXNzZXJ0OworCitwdWJsaWMgY2xhc3MgSmF2YUNvbW1hbmRMaW5lVGVzdCBleHRlbmRzIExpZ2h0SWRlYVRlc3RDYXNlIHsKKyAgcHVibGljIHZvaWQgdGVzdEpkaygpIHsKKyAgICB0cnkgeworICAgICAgQ29tbWFuZExpbmVCdWlsZGVyLmNyZWF0ZUZyb21KYXZhUGFyYW1ldGVycyhuZXcgSmF2YVBhcmFtZXRlcnMoKSk7CisgICAgICBmYWlsKCJDYW50UnVuRXhjZXB0aW9uIChtYWluIGNsYXNzIGlzIG5vdCBzcGVjaWZpZWQpIGV4cGVjdGVkIik7CisgICAgfQorICAgIGNhdGNoIChDYW50UnVuRXhjZXB0aW9uIGUpIHsKKyAgICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoRXhlY3V0aW9uQnVuZGxlLm1lc3NhZ2UoInJ1bi5jb25maWd1cmF0aW9uLmVycm9yLm5vLmpkay5zcGVjaWZpZWQiKSwgZS5nZXRNZXNzYWdlKCkpOworICAgIH0KKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RNYWluQ2xhc3MoKSB7CisgICAgdHJ5IHsKKyAgICAgIEphdmFQYXJhbWV0ZXJzIGphdmFQYXJhbWV0ZXJzID0gbmV3IEphdmFQYXJhbWV0ZXJzKCk7CisgICAgICBqYXZhUGFyYW1ldGVycy5zZXRKZGsoZ2V0UHJvamVjdEpESygpKTsKKyAgICAgIENvbW1hbmRMaW5lQnVpbGRlci5jcmVhdGVGcm9tSmF2YVBhcmFtZXRlcnMoamF2YVBhcmFtZXRlcnMpOworICAgICAgZmFpbCgiQ2FudFJ1bkV4Y2VwdGlvbiAobWFpbiBjbGFzcyBpcyBub3Qgc3BlY2lmaWVkKSBleHBlY3RlZCIpOworICAgIH0KKyAgICBjYXRjaCAoQ2FudFJ1bkV4Y2VwdGlvbiBlKSB7CisgICAgICBhc3NlcnRFcXVhbHMoRXhlY3V0aW9uQnVuZGxlLm1lc3NhZ2UoIm1haW4uY2xhc3MuaXMubm90LnNwZWNpZmllZC5lcnJvci5tZXNzYWdlIiksIGUuZ2V0TWVzc2FnZSgpKTsKKyAgICB9CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0Q2xhc3NwYXRoKCkgdGhyb3dzIENhbnRSdW5FeGNlcHRpb24geworICAgIEphdmFQYXJhbWV0ZXJzIGphdmFQYXJhbWV0ZXJzOworICAgIFN0cmluZyBjb21tYW5kTGluZVN0cmluZzsKKworICAgIGphdmFQYXJhbWV0ZXJzID0gbmV3IEphdmFQYXJhbWV0ZXJzKCk7CisgICAgZmluYWwgU2RrIGludGVybmFsSmRrID0gSmF2YUF3YXJlUHJvamVjdEpka1RhYmxlSW1wbC5nZXRJbnN0YW5jZUV4KCkuZ2V0SW50ZXJuYWxKZGsoKTsKKyAgICBqYXZhUGFyYW1ldGVycy5zZXRKZGsoaW50ZXJuYWxKZGspOworICAgIGphdmFQYXJhbWV0ZXJzLnNldE1haW5DbGFzcygiTWFpbiIpOworICAgIGNvbW1hbmRMaW5lU3RyaW5nID0gQ29tbWFuZExpbmVCdWlsZGVyLmNyZWF0ZUZyb21KYXZhUGFyYW1ldGVycyhqYXZhUGFyYW1ldGVycykuZ2V0Q29tbWFuZExpbmVTdHJpbmcoKTsKKyAgICBhc3NlcnRUcnVlKGNvbnRhaW5zQ2xhc3NQYXRoKGNvbW1hbmRMaW5lU3RyaW5nKSk7CisKKyAgICBqYXZhUGFyYW1ldGVycyA9IG5ldyBKYXZhUGFyYW1ldGVycygpOworICAgIGphdmFQYXJhbWV0ZXJzLnNldEpkayhpbnRlcm5hbEpkayk7CisgICAgamF2YVBhcmFtZXRlcnMuc2V0TWFpbkNsYXNzKCJNYWluIik7CisgICAgamF2YVBhcmFtZXRlcnMuZ2V0Vk1QYXJhbWV0ZXJzTGlzdCgpLmFkZCgiLWNwIik7CisgICAgamF2YVBhcmFtZXRlcnMuZ2V0Vk1QYXJhbWV0ZXJzTGlzdCgpLmFkZCgiLi4iKTsKKyAgICBjb21tYW5kTGluZVN0cmluZyA9IENvbW1hbmRMaW5lQnVpbGRlci5jcmVhdGVGcm9tSmF2YVBhcmFtZXRlcnMoamF2YVBhcmFtZXRlcnMpLmdldENvbW1hbmRMaW5lU3RyaW5nKCk7CisgICAgY29tbWFuZExpbmVTdHJpbmcgPSByZW1vdmVDbGFzc1BhdGgoY29tbWFuZExpbmVTdHJpbmcsICItY3AgLi4iKTsKKyAgICBhc3NlcnRUcnVlKCFjb250YWluc0NsYXNzUGF0aChjb21tYW5kTGluZVN0cmluZykpOworCisgICAgamF2YVBhcmFtZXRlcnMgPSBuZXcgSmF2YVBhcmFtZXRlcnMoKTsKKyAgICBqYXZhUGFyYW1ldGVycy5zZXRKZGsoaW50ZXJuYWxKZGspOworICAgIGphdmFQYXJhbWV0ZXJzLnNldE1haW5DbGFzcygiTWFpbiIpOworICAgIGphdmFQYXJhbWV0ZXJzLmdldFZNUGFyYW1ldGVyc0xpc3QoKS5hZGQoIi1jbGFzc3BhdGgiKTsKKyAgICBqYXZhUGFyYW1ldGVycy5nZXRWTVBhcmFtZXRlcnNMaXN0KCkuYWRkKCIuLiIpOworICAgIGNvbW1hbmRMaW5lU3RyaW5nID0gQ29tbWFuZExpbmVCdWlsZGVyLmNyZWF0ZUZyb21KYXZhUGFyYW1ldGVycyhqYXZhUGFyYW1ldGVycykuZ2V0Q29tbWFuZExpbmVTdHJpbmcoKTsKKyAgICBjb21tYW5kTGluZVN0cmluZyA9IHJlbW92ZUNsYXNzUGF0aChjb21tYW5kTGluZVN0cmluZywgIi1jbGFzc3BhdGggLi4iKTsKKyAgICBhc3NlcnRUcnVlKCFjb250YWluc0NsYXNzUGF0aChjb21tYW5kTGluZVN0cmluZykpOworICB9CisKKyAgcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBjb250YWluc0NsYXNzUGF0aChTdHJpbmcgY29tbWFuZExpbmVTdHJpbmcpIHsKKyAgICByZXR1cm4gY29tbWFuZExpbmVTdHJpbmcuY29udGFpbnMoIi1jcCIpIHx8IGNvbW1hbmRMaW5lU3RyaW5nLmNvbnRhaW5zKCItY2xhc3NwYXRoIik7CisgIH0KKworICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgcmVtb3ZlQ2xhc3NQYXRoKFN0cmluZyBjb21tYW5kTGluZVN0cmluZywgU3RyaW5nIHBhdGhTdHJpbmcpIHsKKyAgICBpbnQgaSA9IGNvbW1hbmRMaW5lU3RyaW5nLmluZGV4T2YocGF0aFN0cmluZyk7CisgICAgY29tbWFuZExpbmVTdHJpbmcgPSBjb21tYW5kTGluZVN0cmluZy5zdWJzdHJpbmcoMCwgaSkgKyBjb21tYW5kTGluZVN0cmluZy5zdWJzdHJpbmcoaSArIHBhdGhTdHJpbmcubGVuZ3RoKCkpOworICAgIHJldHVybiBjb21tYW5kTGluZVN0cmluZzsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RDcmVhdGVQcm9jZXNzKCkgeworICAgIHRyeSB7CisgICAgICBuZXcgRGVmYXVsdEphdmFQcm9jZXNzSGFuZGxlcihuZXcgR2VuZXJhbENvbW1hbmRMaW5lKCkpOworICAgICAgZmFpbCgiRXhlY3V0aW9uRXhjZXB0aW9uIChleGVjdXRhYmxlIGlzIG5vdCBzcGVjaWZpZWQpIGV4cGVjdGVkIik7CisgICAgfQorICAgIGNhdGNoIChFeGVjdXRpb25FeGNlcHRpb24gZSkgeworICAgICAgYXNzZXJ0RXF1YWxzKElkZUJ1bmRsZS5tZXNzYWdlKCJydW4uY29uZmlndXJhdGlvbi5lcnJvci5leGVjdXRhYmxlLm5vdC5zcGVjaWZpZWQiKSwgZS5nZXRNZXNzYWdlKCkpOworICAgIH0KKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2V4ZWN1dGlvbi9jb25maWd1cmF0aW9ucy9KYXZhUGFyYW1ldGVyc1Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9leGVjdXRpb24vY29uZmlndXJhdGlvbnMvSmF2YVBhcmFtZXRlcnNUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjkxY2I0NQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9leGVjdXRpb24vY29uZmlndXJhdGlvbnMvSmF2YVBhcmFtZXRlcnNUZXN0LmphdmEKQEAgLTAsMCArMSwxMTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwMC0yMDExIEpldEJyYWlucyBzLnIuby4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCitwYWNrYWdlIGNvbS5pbnRlbGxpai5leGVjdXRpb24uY29uZmlndXJhdGlvbnM7CisKK2ltcG9ydCBjb20uaW50ZWxsaWouZXhlY3V0aW9uLkNhbnRSdW5FeGNlcHRpb247CitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkubW9kdWxlLk1vZHVsZTsKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS5wcm9qZWN0LlByb2plY3Q7CitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkucm9vdHMuRGVwZW5kZW5jeVNjb3BlOworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLnJvb3RzLk1vZHVsZVJvb3RNb2RpZmljYXRpb25VdGlsOworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLnZmcy5WaXJ0dWFsRmlsZTsKK2ltcG9ydCBjb20uaW50ZWxsaWoucm9vdHMuTW9kdWxlUm9vdE1hbmFnZXJUZXN0Q2FzZTsKKworLyoqCisgKiBAYXV0aG9yIG5paworICovCitwdWJsaWMgY2xhc3MgSmF2YVBhcmFtZXRlcnNUZXN0IGV4dGVuZHMgTW9kdWxlUm9vdE1hbmFnZXJUZXN0Q2FzZSB7CisgIHB1YmxpYyB2b2lkIHRlc3RMaWJyYXJ5KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgTW9kdWxlUm9vdE1vZGlmaWNhdGlvblV0aWwuYWRkRGVwZW5kZW5jeShteU1vZHVsZSwgY3JlYXRlSkRvbUxpYnJhcnkoKSk7CisgICAgYXNzZXJ0Q2xhc3NwYXRoKG15TW9kdWxlLCBKYXZhUGFyYW1ldGVycy5KREtfQU5EX0NMQVNTRVNfQU5EX1RFU1RTLAorICAgICAgICAgICAgICAgICAgICBnZXRSdEphcigpLCBnZXRKRG9tSmFyKCkpOworICAgIGFzc2VydENsYXNzcGF0aChteU1vZHVsZSwgSmF2YVBhcmFtZXRlcnMuQ0xBU1NFU19PTkxZLAorICAgICAgICAgICAgICAgICAgICBnZXRKRG9tSmFyKCkpOworICAgIGFzc2VydENsYXNzcGF0aChteU1vZHVsZSwgSmF2YVBhcmFtZXRlcnMuQ0xBU1NFU19BTkRfVEVTVFMsCisgICAgICAgICAgICAgICAgICAgIGdldEpEb21KYXIoKSk7CisgICAgYXNzZXJ0Q2xhc3NwYXRoKG15UHJvamVjdCwgSmF2YVBhcmFtZXRlcnMuSkRLX0FORF9DTEFTU0VTX0FORF9URVNUUywKKyAgICAgICAgICAgICAgICAgICAgZ2V0UnRKYXIoKSwgZ2V0SkRvbUphcigpKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RNb2R1bGVTb3VyY2VzQW5kT3V0cHV0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgYWRkU291cmNlUm9vdChteU1vZHVsZSwgZmFsc2UpOworICAgIGFkZFNvdXJjZVJvb3QobXlNb2R1bGUsIHRydWUpOworICAgIGZpbmFsIFZpcnR1YWxGaWxlIG91dHB1dCA9IHNldE1vZHVsZU91dHB1dChteU1vZHVsZSwgZmFsc2UpOworICAgIGZpbmFsIFZpcnR1YWxGaWxlIHRlc3RPdXRwdXQgPSBzZXRNb2R1bGVPdXRwdXQobXlNb2R1bGUsIHRydWUpOworCisgICAgYXNzZXJ0Q2xhc3NwYXRoKG15TW9kdWxlLCBKYXZhUGFyYW1ldGVycy5DTEFTU0VTX09OTFksCisgICAgICAgICAgICAgICAgICAgIG91dHB1dCk7CisgICAgYXNzZXJ0Q2xhc3NwYXRoKG15TW9kdWxlLCBKYXZhUGFyYW1ldGVycy5DTEFTU0VTX0FORF9URVNUUywKKyAgICAgICAgICAgICAgICAgICAgdGVzdE91dHB1dCwgb3V0cHV0KTsKKyAgICBhc3NlcnRDbGFzc3BhdGgobXlNb2R1bGUsIEphdmFQYXJhbWV0ZXJzLkpES19BTkRfQ0xBU1NFU19BTkRfVEVTVFMsCisgICAgICAgICAgICAgICAgICAgIGdldFJ0SmFyKCksIHRlc3RPdXRwdXQsIG91dHB1dCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0TGlicmFyeVNjb3BlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgTW9kdWxlUm9vdE1vZGlmaWNhdGlvblV0aWwuYWRkRGVwZW5kZW5jeShteU1vZHVsZSwgY3JlYXRlSkRvbUxpYnJhcnkoKSwgRGVwZW5kZW5jeVNjb3BlLlJVTlRJTUUsIGZhbHNlKTsKKyAgICBNb2R1bGVSb290TW9kaWZpY2F0aW9uVXRpbC5hZGREZXBlbmRlbmN5KG15TW9kdWxlLCBjcmVhdGVBc21MaWJyYXJ5KCksIERlcGVuZGVuY3lTY29wZS5URVNULCBmYWxzZSk7CisKKyAgICBhc3NlcnRDbGFzc3BhdGgobXlNb2R1bGUsIEphdmFQYXJhbWV0ZXJzLkNMQVNTRVNfQU5EX1RFU1RTLAorICAgICAgICAgICAgICAgICAgICBnZXRKRG9tSmFyKCksIGdldEFzbUphcigpKTsKKyAgICBhc3NlcnRDbGFzc3BhdGgobXlNb2R1bGUsIEphdmFQYXJhbWV0ZXJzLkNMQVNTRVNfT05MWSwKKyAgICAgICAgICAgICAgICAgICAgZ2V0SkRvbUphcigpKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RQcm92aWRlZFNjb3BlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgTW9kdWxlUm9vdE1vZGlmaWNhdGlvblV0aWwuYWRkRGVwZW5kZW5jeShteU1vZHVsZSwgY3JlYXRlSkRvbUxpYnJhcnkoKSwgRGVwZW5kZW5jeVNjb3BlLlBST1ZJREVELCBmYWxzZSk7CisKKyAgICBhc3NlcnRDbGFzc3BhdGgobXlNb2R1bGUsIEphdmFQYXJhbWV0ZXJzLkNMQVNTRVNfQU5EX1RFU1RTLCBnZXRKRG9tSmFyKCkpOworICAgIGFzc2VydENsYXNzcGF0aChteU1vZHVsZSwgSmF2YVBhcmFtZXRlcnMuQ0xBU1NFU19PTkxZKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RNb2R1bGVEZXBlbmRlbmN5KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZmluYWwgTW9kdWxlIGRlcCA9IGNyZWF0ZU1vZHVsZSgiZGVwIik7CisgICAgZmluYWwgVmlydHVhbEZpbGUgZGVwT3V0cHV0ID0gc2V0TW9kdWxlT3V0cHV0KGRlcCwgZmFsc2UpOworICAgIGZpbmFsIFZpcnR1YWxGaWxlIGRlcFRlc3RPdXRwdXQgPSBzZXRNb2R1bGVPdXRwdXQoZGVwLCB0cnVlKTsKKyAgICBNb2R1bGVSb290TW9kaWZpY2F0aW9uVXRpbC5hZGREZXBlbmRlbmN5KGRlcCwgY3JlYXRlSkRvbUxpYnJhcnkoKSk7CisgICAgTW9kdWxlUm9vdE1vZGlmaWNhdGlvblV0aWwuYWRkRGVwZW5kZW5jeShteU1vZHVsZSwgZGVwLCBEZXBlbmRlbmN5U2NvcGUuQ09NUElMRSwgZmFsc2UpOworCisgICAgYXNzZXJ0Q2xhc3NwYXRoKG15TW9kdWxlLCBKYXZhUGFyYW1ldGVycy5DTEFTU0VTX09OTFksCisgICAgICAgICAgICAgICAgICAgIGRlcE91dHB1dCwgZ2V0SkRvbUphcigpKTsKKyAgICBhc3NlcnRDbGFzc3BhdGgobXlNb2R1bGUsIEphdmFQYXJhbWV0ZXJzLkNMQVNTRVNfQU5EX1RFU1RTLAorICAgICAgICAgICAgICAgICAgICBkZXBUZXN0T3V0cHV0LCBkZXBPdXRwdXQsIGdldEpEb21KYXIoKSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0TW9kdWxlRGVwZW5kZW5jeVNjb3BlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZmluYWwgTW9kdWxlIGRlcCA9IGNyZWF0ZU1vZHVsZSgiZGVwIik7CisgICAgTW9kdWxlUm9vdE1vZGlmaWNhdGlvblV0aWwuYWRkRGVwZW5kZW5jeShkZXAsIGNyZWF0ZUpEb21MaWJyYXJ5KCkpOworICAgIE1vZHVsZVJvb3RNb2RpZmljYXRpb25VdGlsLmFkZERlcGVuZGVuY3kobXlNb2R1bGUsIGRlcCwgRGVwZW5kZW5jeVNjb3BlLlRFU1QsIHRydWUpOworCisgICAgYXNzZXJ0Q2xhc3NwYXRoKG15TW9kdWxlLCBKYXZhUGFyYW1ldGVycy5DTEFTU0VTX09OTFkpOworICAgIGFzc2VydENsYXNzcGF0aChteU1vZHVsZSwgSmF2YVBhcmFtZXRlcnMuQ0xBU1NFU19BTkRfVEVTVFMsCisgICAgICAgICAgICAgICAgICAgIGdldEpEb21KYXIoKSk7CisKKyAgICBhc3NlcnRDbGFzc3BhdGgobXlQcm9qZWN0LCBKYXZhUGFyYW1ldGVycy5DTEFTU0VTX09OTFksCisgICAgICAgICAgICAgICAgICAgIGdldEpEb21KYXIoKSk7CisgIH0KKworICBwcml2YXRlIHN0YXRpYyB2b2lkIGFzc2VydENsYXNzcGF0aChmaW5hbCBNb2R1bGUgbW9kdWxlLCBmaW5hbCBpbnQgdHlwZSwgVmlydHVhbEZpbGUuLi4gcm9vdHMpIHRocm93cyBDYW50UnVuRXhjZXB0aW9uIHsKKyAgICBmaW5hbCBKYXZhUGFyYW1ldGVycyBqYXZhUGFyYW1ldGVycyA9IG5ldyBKYXZhUGFyYW1ldGVycygpOworICAgIGphdmFQYXJhbWV0ZXJzLmNvbmZpZ3VyZUJ5TW9kdWxlKG1vZHVsZSwgdHlwZSk7CisgICAgYXNzZXJ0Um9vdHMoamF2YVBhcmFtZXRlcnMuZ2V0Q2xhc3NQYXRoKCksIHJvb3RzKTsKKyAgfQorCisgIHByaXZhdGUgdm9pZCBhc3NlcnRDbGFzc3BhdGgoZmluYWwgUHJvamVjdCBwcm9qZWN0LCBmaW5hbCBpbnQgdHlwZSwgVmlydHVhbEZpbGUuLi4gcm9vdHMpIHRocm93cyBDYW50UnVuRXhjZXB0aW9uIHsKKyAgICBmaW5hbCBKYXZhUGFyYW1ldGVycyBqYXZhUGFyYW1ldGVycyA9IG5ldyBKYXZhUGFyYW1ldGVycygpOworICAgIGphdmFQYXJhbWV0ZXJzLmNvbmZpZ3VyZUJ5UHJvamVjdChwcm9qZWN0LCB0eXBlLCBnZXRUZXN0UHJvamVjdEpkaygpKTsKKyAgICBhc3NlcnRSb290cyhqYXZhUGFyYW1ldGVycy5nZXRDbGFzc1BhdGgoKSwgcm9vdHMpOworICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovZmluZC9GaW5kTWFuYWdlclRlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9maW5kL0ZpbmRNYW5hZ2VyVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAyNzRhYWQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovZmluZC9GaW5kTWFuYWdlclRlc3QuamF2YQpAQCAtMCwwICsxLDQzOCBAQAorLyoKKyAqIENvcHlyaWdodCAyMDAwLTIwMTIgSmV0QnJhaW5zIHMuci5vLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KK3BhY2thZ2UgY29tLmludGVsbGlqLmZpbmQ7CisKK2ltcG9ydCBjb20uaW50ZWxsaWouSmF2YVRlc3RVdGlsOworaW1wb3J0IGNvbS5pbnRlbGxpai5jb2RlSW5zaWdodC5kYWVtb24uRGFlbW9uQW5hbHl6ZXJUZXN0Q2FzZTsKK2ltcG9ydCBjb20uaW50ZWxsaWouZmluZC5pbXBsLkZpbmRJblByb2plY3RVdGlsOworaW1wb3J0IGNvbS5pbnRlbGxpai5maW5kLnJlcGxhY2VJblByb2plY3QuUmVwbGFjZUluUHJvamVjdE1hbmFnZXI7CitpbXBvcnQgY29tLmludGVsbGlqLmxhbmcucHJvcGVydGllcy5JUHJvcGVydHk7CitpbXBvcnQgY29tLmludGVsbGlqLmxhbmcucHJvcGVydGllcy5wc2kuUHJvcGVydGllc0ZpbGU7CitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkuYXBwbGljYXRpb24uQXBwbGljYXRpb25NYW5hZ2VyOworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLmFwcGxpY2F0aW9uLmV4LlBhdGhNYW5hZ2VyRXg7CitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkuZmlsZVR5cGVzLkZpbGVUeXBlczsKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS5wcm9qZWN0Um9vdHMuU2RrOworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLnByb2plY3RSb290cy5pbXBsLkphdmFTZGtJbXBsOworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLnV0aWwudGV4dC5TdHJpbmdVdGlsOworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLnZmcy5Mb2NhbEZpbGVTeXN0ZW07CitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkudmZzLlZpcnR1YWxGaWxlOworaW1wb3J0IGNvbS5pbnRlbGxpai5wc2kuKjsKK2ltcG9ydCBjb20uaW50ZWxsaWoucHNpLnNlYXJjaC5HbG9iYWxTZWFyY2hTY29wZTsKK2ltcG9ydCBjb20uaW50ZWxsaWoucHNpLnNlYXJjaC5Mb2NhbFNlYXJjaFNjb3BlOworaW1wb3J0IGNvbS5pbnRlbGxpai50ZXN0RnJhbWV3b3JrLklkZWFUZXN0VXRpbDsKK2ltcG9ydCBjb20uaW50ZWxsaWoudGVzdEZyYW1ld29yay5QbGF0Zm9ybVRlc3RVdGlsOworaW1wb3J0IGNvbS5pbnRlbGxpai50ZXN0RnJhbWV3b3JrLlBzaVRlc3RVdGlsOworaW1wb3J0IGNvbS5pbnRlbGxpai50ZXN0RnJhbWV3b3JrLmZpeHR1cmVzLlRlbXBEaXJUZXN0Rml4dHVyZTsKK2ltcG9ydCBjb20uaW50ZWxsaWoudGVzdEZyYW1ld29yay5maXh0dXJlcy5pbXBsLkxpZ2h0VGVtcERpclRlc3RGaXh0dXJlSW1wbDsKK2ltcG9ydCBjb20uaW50ZWxsaWoudXNhZ2VWaWV3LlVzYWdlSW5mbzsKK2ltcG9ydCBjb20uaW50ZWxsaWoudXNhZ2VzLlVzYWdlOworaW1wb3J0IGNvbS5pbnRlbGxpai51dGlsLkFycmF5VXRpbDsKK2ltcG9ydCBjb20uaW50ZWxsaWoudXRpbC5Db21tb25Qcm9jZXNzb3JzOworaW1wb3J0IGNvbS5pbnRlbGxpai51dGlsLlRocm93YWJsZVJ1bm5hYmxlOworaW1wb3J0IGNvbS5pbnRlbGxpai51dGlsLldhaXRGb3I7CisKK2ltcG9ydCBqYXZhLmlvLkZpbGU7CitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbnM7CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKKy8qCisgKiBAYXV0aG9yOiBNWWFrb3ZsZXYKKyAqIERhdGU6IE9jdCAxNywgMjAwMgorICogVGltZTogNzo1MzozMSBQTQorICovCitAU3VwcHJlc3NXYXJuaW5ncyh7IkhhcmRDb2RlZFN0cmluZ0xpdGVyYWwifSkKK3B1YmxpYyBjbGFzcyBGaW5kTWFuYWdlclRlc3QgZXh0ZW5kcyBEYWVtb25BbmFseXplclRlc3RDYXNlIHsKKyAgcHJvdGVjdGVkIFZpcnR1YWxGaWxlW10gbXlTb3VyY2VEaXJzOworCisgIHB1YmxpYyB2b2lkIHRlc3RGaW5kU3RyaW5nKCkgdGhyb3dzIEV4Y2VwdGlvbnsKKyAgICBGaW5kTWFuYWdlciBmaW5kTWFuYWdlciA9IEZpbmRNYW5hZ2VyLmdldEluc3RhbmNlKG15UHJvamVjdCk7CisKKyAgICBGaW5kTW9kZWwgZmluZE1vZGVsID0gbmV3IEZpbmRNb2RlbCgpOworICAgIGZpbmRNb2RlbC5zZXRTdHJpbmdUb0ZpbmQoImRvbmUiKTsKKyAgICBmaW5kTW9kZWwuc2V0V2hvbGVXb3Jkc09ubHkoZmFsc2UpOworICAgIGZpbmRNb2RlbC5zZXRGcm9tQ3Vyc29yKGZhbHNlKTsKKyAgICBmaW5kTW9kZWwuc2V0R2xvYmFsKHRydWUpOworICAgIGZpbmRNb2RlbC5zZXRNdWx0aXBsZUZpbGVzKGZhbHNlKTsKKyAgICBmaW5kTW9kZWwuc2V0UHJvamVjdFNjb3BlKHRydWUpOworCisgICAgU3RyaW5nIHRleHQgPSAicHVibGljIHN0YXRpYyBjbGFzcyBNeUNsYXNze1xuLypkb25lKi9cbnB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKCl7fX0iOworICAgIEZpbmRSZXN1bHQgZmluZFJlc3VsdCA9IGZpbmRNYW5hZ2VyLmZpbmRTdHJpbmcodGV4dCwgMCwgZmluZE1vZGVsKTsKKyAgICBhc3NlcnRUcnVlKGZpbmRSZXN1bHQuaXNTdHJpbmdGb3VuZCgpKTsKKworICAgIGZpbmRNb2RlbCA9IG5ldyBGaW5kTW9kZWwoKTsKKyAgICBmaW5kTW9kZWwuc2V0U3RyaW5nVG9GaW5kKCJkb25lIik7CisgICAgZmluZE1vZGVsLnNldFdob2xlV29yZHNPbmx5KGZhbHNlKTsKKyAgICBmaW5kTW9kZWwuc2V0RnJvbUN1cnNvcih0cnVlKTsKKyAgICBmaW5kTW9kZWwuc2V0R2xvYmFsKHRydWUpOworICAgIGZpbmRNb2RlbC5zZXRNdWx0aXBsZUZpbGVzKGZhbHNlKTsKKyAgICBmaW5kTW9kZWwuc2V0UHJvamVjdFNjb3BlKHRydWUpOworCisgICAgZmluZFJlc3VsdCA9IGZpbmRNYW5hZ2VyLmZpbmRTdHJpbmcodGV4dCwgNDAsIGZpbmRNb2RlbCk7CisgICAgYXNzZXJ0RmFsc2UoZmluZFJlc3VsdC5pc1N0cmluZ0ZvdW5kKCkpOworCisgICAgZmluZE1vZGVsID0gbmV3IEZpbmRNb2RlbCgpOworICAgIGZpbmRNb2RlbC5zZXRTdHJpbmdUb0ZpbmQoImRvbmUiKTsKKyAgICBmaW5kTW9kZWwuc2V0V2hvbGVXb3Jkc09ubHkoZmFsc2UpOworICAgIGZpbmRNb2RlbC5zZXRGcm9tQ3Vyc29yKHRydWUpOworICAgIGZpbmRNb2RlbC5zZXRHbG9iYWwodHJ1ZSk7CisgICAgZmluZE1vZGVsLnNldE11bHRpcGxlRmlsZXMoZmFsc2UpOworICAgIGZpbmRNb2RlbC5zZXRQcm9qZWN0U2NvcGUodHJ1ZSk7CisgICAgZmluZE1vZGVsLnNldEZvcndhcmQoZmFsc2UpOworCisgICAgZmluZFJlc3VsdCA9IGZpbmRNYW5hZ2VyLmZpbmRTdHJpbmcodGV4dCwgNDAsIGZpbmRNb2RlbCk7CisgICAgYXNzZXJ0VHJ1ZShmaW5kUmVzdWx0LmlzU3RyaW5nRm91bmQoKSk7CisKKyAgICBmaW5kTW9kZWwgPSBuZXcgRmluZE1vZGVsKCk7CisgICAgZmluZE1vZGVsLnNldFN0cmluZ1RvRmluZCgiZG9uZSIpOworICAgIGZpbmRNb2RlbC5zZXRXaG9sZVdvcmRzT25seSh0cnVlKTsKKyAgICBmaW5kTW9kZWwuc2V0RnJvbUN1cnNvcihmYWxzZSk7CisgICAgZmluZE1vZGVsLnNldEdsb2JhbCh0cnVlKTsKKyAgICBmaW5kTW9kZWwuc2V0TXVsdGlwbGVGaWxlcyhmYWxzZSk7CisgICAgZmluZE1vZGVsLnNldFByb2plY3RTY29wZSh0cnVlKTsKKworICAgIGZpbmRSZXN1bHQgPSBmaW5kTWFuYWdlci5maW5kU3RyaW5nKHRleHQsIDAsIGZpbmRNb2RlbCk7CisgICAgYXNzZXJ0VHJ1ZShmaW5kUmVzdWx0LmlzU3RyaW5nRm91bmQoKSk7CisKKyAgICBmaW5kTW9kZWwgPSBuZXcgRmluZE1vZGVsKCk7CisgICAgZmluZE1vZGVsLnNldFN0cmluZ1RvRmluZCgiZG9uIik7CisgICAgZmluZE1vZGVsLnNldFdob2xlV29yZHNPbmx5KHRydWUpOworICAgIGZpbmRNb2RlbC5zZXRGcm9tQ3Vyc29yKGZhbHNlKTsKKyAgICBmaW5kTW9kZWwuc2V0R2xvYmFsKHRydWUpOworICAgIGZpbmRNb2RlbC5zZXRNdWx0aXBsZUZpbGVzKGZhbHNlKTsKKyAgICBmaW5kTW9kZWwuc2V0UHJvamVjdFNjb3BlKHRydWUpOworCisgICAgZmluYWwgRmluZFJlc3VsdFtdIGZpbmRSZXN1bHRBcnIgPSBuZXcgRmluZFJlc3VsdFsxXTsKKyAgICBmaW5kSW5OZXdUaHJlYWQoZmluZE1vZGVsLCBmaW5kTWFuYWdlciwgdGV4dCwgMCwgZmluZFJlc3VsdEFycik7CisgICAgbmV3IFdhaXRGb3IoMzAgKjEwMDApeworICAgICAgQE92ZXJyaWRlCisgICAgICBwcm90ZWN0ZWQgYm9vbGVhbiBjb25kaXRpb24oKSB7CisgICAgICAgIHJldHVybiBmaW5kUmVzdWx0QXJyWzBdICE9IG51bGw7CisgICAgICB9CisgICAgfS5hc3NlcnRDb21wbGV0ZWQoKTsKKworICAgIGFzc2VydEZhbHNlKGZpbmRSZXN1bHRBcnJbMF0uaXNTdHJpbmdGb3VuZCgpKTsKKyAgfQorCisgIHByaXZhdGUgc3RhdGljIFRocmVhZCBmaW5kSW5OZXdUaHJlYWQoZmluYWwgRmluZE1vZGVsIG1vZGVsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsIEZpbmRNYW5hZ2VyIGZpbmRNYW5hZ2VyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsIENoYXJTZXF1ZW5jZSB0ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsIGludCBvZmZzZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmluYWwgRmluZFJlc3VsdFtdIG9wX3Jlc3VsdCl7CisgICAgb3BfcmVzdWx0WzBdID0gbnVsbDsKKyAgICBUaHJlYWQgZmluZFRocmVhZCA9IG5ldyBUaHJlYWQoKXsKKyAgICAgIEBPdmVycmlkZQorICAgICAgcHVibGljIHZvaWQgcnVuKCl7CisgICAgICAgIG9wX3Jlc3VsdFswXSA9IGZpbmRNYW5hZ2VyLmZpbmRTdHJpbmcodGV4dCwgb2Zmc2V0LCBtb2RlbCk7CisgICAgICB9CisgICAgfTsKKyAgICBmaW5kVGhyZWFkLnN0YXJ0KCk7CisgICAgcmV0dXJuIGZpbmRUaHJlYWQ7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0RmluZFVzYWdlcygpIHRocm93cyBFeGNlcHRpb257CisgICAgaW5pdFByb2plY3QoImZpbmRNYW5hZ2VyIiwgInNyYyIsICJzcmMxIik7CisgICAgZmluYWwgU3RyaW5nIHByb2plY3REaXIgPSAoUGF0aE1hbmFnZXJFeC5nZXRUZXN0RGF0YVBhdGgoKSArICIvZmluZC9maW5kTWFuYWdlciIpLnJlcGxhY2UoJy8nLCBGaWxlLnNlcGFyYXRvckNoYXIpOworCisgICAgRmluZE1vZGVsIGZpbmRNb2RlbCA9IG5ldyBGaW5kTW9kZWwoKTsKKyAgICBmaW5kTW9kZWwuc2V0U3RyaW5nVG9GaW5kKCJkb25lIik7CisgICAgZmluZE1vZGVsLnNldFdob2xlV29yZHNPbmx5KGZhbHNlKTsKKyAgICBmaW5kTW9kZWwuc2V0RnJvbUN1cnNvcihmYWxzZSk7CisgICAgZmluZE1vZGVsLnNldEdsb2JhbCh0cnVlKTsKKyAgICBmaW5kTW9kZWwuc2V0TXVsdGlwbGVGaWxlcyh0cnVlKTsKKyAgICBmaW5kTW9kZWwuc2V0UHJvamVjdFNjb3BlKHRydWUpOworICAgIGZpbmRNb2RlbC5zZXREaXJlY3RvcnlOYW1lKHByb2plY3REaXIgKyBGaWxlLnNlcGFyYXRvckNoYXIgKyAic3JjMSIpOworICAgIGZpbmRNb2RlbC5zZXRXaXRoU3ViZGlyZWN0b3JpZXModHJ1ZSk7CisgICAgY2hlY2tGaW5kVXNhZ2VzKDEyLCBmaW5kTW9kZWwpOworCisgICAgLy9maW5kTW9kZWwgPSBuZXcgRmluZE1vZGVsKCk7CisgICAgZmluZE1vZGVsLnNldEZyb21DdXJzb3IoZmFsc2UpOworICAgIGZpbmRNb2RlbC5zZXRHbG9iYWwodHJ1ZSk7CisgICAgZmluZE1vZGVsLnNldE11bHRpcGxlRmlsZXModHJ1ZSk7CisgICAgZmluZE1vZGVsLnNldFByb2plY3RTY29wZShmYWxzZSk7CisgICAgZmluZE1vZGVsLnNldERpcmVjdG9yeU5hbWUocHJvamVjdERpciArIEZpbGUuc2VwYXJhdG9yQ2hhciArICJzcmMxIik7CisgICAgZmluZE1vZGVsLnNldFdpdGhTdWJkaXJlY3Rvcmllcyh0cnVlKTsKKyAgICBjaGVja0ZpbmRVc2FnZXMoNiwgZmluZE1vZGVsKTsKKworICAgIGZpbmRNb2RlbC5zZXRXaG9sZVdvcmRzT25seSh0cnVlKTsKKyAgICBjaGVja0ZpbmRVc2FnZXMoNSwgZmluZE1vZGVsKTsKKy8vICAgIGZpbmRNb2RlbC5zZXRGb3J3YXJkKGZhbHNlKTsKKy8vICAgIGZpbmRNb2RlbC5zZXRDYXNlU2Vuc2l0aXZlKCk7CisKKworICB9CisKKyAgcHJpdmF0ZSB2b2lkIGNoZWNrRmluZFVzYWdlcyhpbnQgZXhwZWN0ZWRSZXN1bHRzLCBGaW5kTW9kZWwgZmluZE1vZGVsKSB0aHJvd3MgRXhjZXB0aW9ueworICAgIENvbGxlY3Rpb248VXNhZ2VJbmZvPiB1c2FnZXMgPSBmaW5kVXNhZ2VzKGZpbmRNb2RlbCk7CisgICAgYXNzZXJ0RXF1YWxzKGV4cGVjdGVkUmVzdWx0cywgdXNhZ2VzLnNpemUoKSk7CisgIH0KKworICBwcml2YXRlIExpc3Q8VXNhZ2VJbmZvPiBmaW5kVXNhZ2VzKGZpbmFsIEZpbmRNb2RlbCBmaW5kTW9kZWwpIHsKKyAgICBQc2lEaXJlY3RvcnkgcHNpRGlyZWN0b3J5ID0gRmluZEluUHJvamVjdFV0aWwuZ2V0UHNpRGlyZWN0b3J5KGZpbmRNb2RlbCwgbXlQcm9qZWN0KTsKKyAgICBMaXN0PFVzYWdlSW5mbz4gcmVzdWx0ID0gbmV3IEFycmF5TGlzdDxVc2FnZUluZm8+KCk7CisgICAgZmluYWwgQ29tbW9uUHJvY2Vzc29ycy5Db2xsZWN0UHJvY2Vzc29yPFVzYWdlSW5mbz4gY29sbGVjdG9yID0gbmV3IENvbW1vblByb2Nlc3NvcnMuQ29sbGVjdFByb2Nlc3NvcjxVc2FnZUluZm8+KHJlc3VsdCk7CisgICAgRmluZEluUHJvamVjdFV0aWwuZmluZFVzYWdlcyhmaW5kTW9kZWwsIHBzaURpcmVjdG9yeSwgbXlQcm9qZWN0LCB0cnVlLCBjb2xsZWN0b3IpOworICAgIHJldHVybiByZXN1bHQ7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0RmluZFdob2xlV29yZHNJblByb3BlcnRpZXMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBpbml0UHJvamVjdCgiZmluZEluUGF0aCIsICJzcmMiKTsKKworICAgIHNlYXJjaFByb3BlcnR5KCJ4eC55eSIpOworICAgIHNlYXJjaFByb3BlcnR5KCIueXkiKTsKKyAgICBzZWFyY2hQcm9wZXJ0eSgieHguIik7CisgIH0KKworICBwcml2YXRlIHZvaWQgc2VhcmNoUHJvcGVydHkoU3RyaW5nIHF1ZXJ5KSB7CisgICAgRmluZE1vZGVsIGZpbmRNb2RlbCA9IG5ldyBGaW5kTW9kZWwoKTsKKyAgICBmaW5kTW9kZWwuc2V0U3RyaW5nVG9GaW5kKHF1ZXJ5KTsKKyAgICBmaW5kTW9kZWwuc2V0V2hvbGVXb3Jkc09ubHkodHJ1ZSk7CisgICAgZmluZE1vZGVsLnNldEZyb21DdXJzb3IoZmFsc2UpOworICAgIGZpbmRNb2RlbC5zZXRHbG9iYWwodHJ1ZSk7CisgICAgZmluZE1vZGVsLnNldE11bHRpcGxlRmlsZXModHJ1ZSk7CisgICAgZmluZE1vZGVsLnNldFByb2plY3RTY29wZSh0cnVlKTsKKyAgICBmaW5kTW9kZWwuc2V0RGlyZWN0b3J5TmFtZShteVNvdXJjZURpcnNbMF0uZ2V0UGF0aCgpKTsKKyAgICBmaW5kTW9kZWwuc2V0V2l0aFN1YmRpcmVjdG9yaWVzKHRydWUpOworCisgICAgTGlzdDxVc2FnZUluZm8+IHVzYWdlcyA9IGZpbmRVc2FnZXMoZmluZE1vZGVsKTsKKyAgICBhc3NlcnRFcXVhbHMoMiwgdXNhZ2VzLnNpemUoKSk7CisgICAgaWYgKCEodXNhZ2VzLmdldCgwKS5nZXRFbGVtZW50KCkuZ2V0Q29udGFpbmluZ0ZpbGUoKSBpbnN0YW5jZW9mIFBzaUphdmFGaWxlKSkgeworICAgICAgQ29sbGVjdGlvbnMuc3dhcCh1c2FnZXMsIDAsIDEpOworICAgIH0KKyAgICBQc2lFbGVtZW50IGVsZW1lbnQgPSB1c2FnZXMuZ2V0KDApLmdldEVsZW1lbnQoKTsKKyAgICAvL2Fzc2VydFRydWUoZWxlbWVudCBpbnN0YW5jZW9mIFBzaUphdmFGaWxlKTsKKyAgICBQc2lFbGVtZW50IHJlZkVsZW1lbnQgPSBlbGVtZW50LmZpbmRFbGVtZW50QXQodXNhZ2VzLmdldCgwKS5nZXRSYW5nZUluRWxlbWVudCgpLmdldFN0YXJ0T2Zmc2V0KCkpLmdldFBhcmVudCgpOworICAgIGFzc2VydFRydWUocmVmRWxlbWVudCBpbnN0YW5jZW9mIFBzaUxpdGVyYWxFeHByZXNzaW9uKTsKKyAgICBhc3NlcnRFcXVhbHMoInh4Lnl5IiwgKChQc2lMaXRlcmFsRXhwcmVzc2lvbilyZWZFbGVtZW50KS5nZXRWYWx1ZSgpKTsKKworICAgIFZpcnR1YWxGaWxlIGZpbGUgPSBteVNvdXJjZURpcnNbMF0uZmluZEZpbGVCeVJlbGF0aXZlUGF0aCgieC9kZC5wcm9wZXJ0aWVzIik7CisgICAgUHJvcGVydGllc0ZpbGUgcHJvcGVydGllc0ZpbGUgPSAoUHJvcGVydGllc0ZpbGUpUHNpTWFuYWdlci5nZXRJbnN0YW5jZShteVByb2plY3QpLmZpbmRGaWxlKGZpbGUpOworICAgIGVsZW1lbnQgPSB1c2FnZXMuZ2V0KDEpLmdldEVsZW1lbnQoKTsKKyAgICAvL2Fzc2VydFRydWUoZWxlbWVudCBpbnN0YW5jZW9mIFByb3BlcnRpZXNGaWxlKTsKKyAgICByZWZFbGVtZW50ID0gZWxlbWVudC5maW5kRWxlbWVudEF0KHVzYWdlcy5nZXQoMSkuZ2V0UmFuZ2VJbkVsZW1lbnQoKS5nZXRTdGFydE9mZnNldCgpKS5nZXRQYXJlbnQoKTsKKyAgICBhc3NlcnRUcnVlKHJlZkVsZW1lbnQgaW5zdGFuY2VvZiBJUHJvcGVydHkpOworICAgIGFzc2VydFNhbWUocHJvcGVydGllc0ZpbGUuZmluZFByb3BlcnR5QnlLZXkoInh4Lnl5IiksIHJlZkVsZW1lbnQpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEZpbmRJbkNsYXNzSGllcmFyY2h5KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgaW5pdFByb2plY3QoImZpbmRJbkNsYXNzSGllcmFyY2h5IiwgInNyYyIpOworCisgICAgRmluZE1vZGVsIGZpbmRNb2RlbCA9IG5ldyBGaW5kTW9kZWwoKTsKKyAgICBmaW5kTW9kZWwuc2V0U3RyaW5nVG9GaW5kKCJpbnN0YW5jZW9mIik7CisgICAgZmluZE1vZGVsLnNldFdob2xlV29yZHNPbmx5KHRydWUpOworICAgIGZpbmRNb2RlbC5zZXRGcm9tQ3Vyc29yKGZhbHNlKTsKKyAgICBmaW5kTW9kZWwuc2V0R2xvYmFsKHRydWUpOworICAgIGZpbmRNb2RlbC5zZXRNdWx0aXBsZUZpbGVzKHRydWUpOworICAgIGZpbmFsIEphdmFQc2lGYWNhZGUgZmFjYWRlID0gSmF2YVBzaUZhY2FkZS5nZXRJbnN0YW5jZShnZXRQcm9qZWN0KCkpOworICAgIGZpbmFsIFBzaUNsYXNzIGJhc2VDbGFzcyA9IGZhY2FkZS5maW5kQ2xhc3MoIkEiLCBHbG9iYWxTZWFyY2hTY29wZS5hbGxTY29wZShnZXRQcm9qZWN0KCkpKTsKKyAgICBmaW5hbCBQc2lDbGFzcyBpbXBsQ2xhc3MgPSBmYWNhZGUuZmluZENsYXNzKCJBSW1wbCIsIEdsb2JhbFNlYXJjaFNjb3BlLmFsbFNjb3BlKGdldFByb2plY3QoKSkpOworICAgIGZpbmRNb2RlbC5zZXRDdXN0b21TY29wZShuZXcgTG9jYWxTZWFyY2hTY29wZShuZXcgUHNpRWxlbWVudFtde2Jhc2VDbGFzcywgaW1wbENsYXNzfSkpOworCisgICAgTGlzdDxVc2FnZUluZm8+IHVzYWdlcyA9IGZpbmRVc2FnZXMoZmluZE1vZGVsKTsKKyAgICBhc3NlcnRFcXVhbHMoMiwgdXNhZ2VzLnNpemUoKSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0UmVwbGFjZVJlZ2V4cCgpIHRocm93cyBUaHJvd2FibGUgeworICAgIEZpbmRNYW5hZ2VyIGZpbmRNYW5hZ2VyID0gRmluZE1hbmFnZXIuZ2V0SW5zdGFuY2UobXlQcm9qZWN0KTsKKworICAgIEZpbmRNb2RlbCBmaW5kTW9kZWwgPSBuZXcgRmluZE1vZGVsKCk7CisgICAgZmluZE1vZGVsLnNldFN0cmluZ1RvRmluZCgiYnVnKD89aGVyZSkiKTsKKyAgICBmaW5kTW9kZWwuc2V0U3RyaW5nVG9SZXBsYWNlKCJ4JDB5Iik7CisgICAgZmluZE1vZGVsLnNldFdob2xlV29yZHNPbmx5KGZhbHNlKTsKKyAgICBmaW5kTW9kZWwuc2V0RnJvbUN1cnNvcihmYWxzZSk7CisgICAgZmluZE1vZGVsLnNldEdsb2JhbCh0cnVlKTsKKyAgICBmaW5kTW9kZWwuc2V0TXVsdGlwbGVGaWxlcyhmYWxzZSk7CisgICAgZmluZE1vZGVsLnNldFByb2plY3RTY29wZSh0cnVlKTsKKyAgICBmaW5kTW9kZWwuc2V0UmVndWxhckV4cHJlc3Npb25zKHRydWUpOworICAgIGZpbmRNb2RlbC5zZXRQcm9tcHRPblJlcGxhY2UoZmFsc2UpOworCisgICAgZmluZE1hbmFnZXIuc2V0RmluZE5leHRNb2RlbChudWxsKTsKKyAgICBmaW5kTWFuYWdlci5nZXRGaW5kSW5GaWxlTW9kZWwoKS5jb3B5RnJvbShmaW5kTW9kZWwpOworCisgICAgU3RyaW5nIHRleHQgPSAiYnVnaGVyZVxuIiArICJidWdoZXJlIjsKKyAgICBjb25maWd1cmVCeVRleHQoRmlsZVR5cGVzLlBMQUlOX1RFWFQsIHRleHQpOworICAgIGJvb2xlYW4gc3VjYyA9IEZpbmRVdGlsLnJlcGxhY2UoZ2V0UHJvamVjdCgpLCBnZXRFZGl0b3IoKSwgMCwgZmluZE1vZGVsKTsKKyAgICBhc3NlcnRUcnVlKHN1Y2MpOworCisgICAgYXNzZXJ0RXF1YWxzKCJ4YnVneWhlcmVcbiIgKyAieGJ1Z3loZXJlIiwgZ2V0RWRpdG9yKCkuZ2V0RG9jdW1lbnQoKS5nZXRUZXh0KCkpOworICB9CisgIHB1YmxpYyB2b2lkIHRlc3RSZXBsYWNlUmVnZXhwMSgpIHRocm93cyBUaHJvd2FibGUgeworICAgIEZpbmRNYW5hZ2VyIGZpbmRNYW5hZ2VyID0gRmluZE1hbmFnZXIuZ2V0SW5zdGFuY2UobXlQcm9qZWN0KTsKKworICAgIEZpbmRNb2RlbCBmaW5kTW9kZWwgPSBuZXcgRmluZE1vZGVsKCk7CisgICAgZmluZE1vZGVsLnNldFN0cmluZ1RvRmluZCgiYnVnKD89aGVyZSkiKTsKKyAgICBmaW5kTW9kZWwuc2V0U3RyaW5nVG9SZXBsYWNlKCIkMCIpOworICAgIGZpbmRNb2RlbC5zZXRXaG9sZVdvcmRzT25seShmYWxzZSk7CisgICAgZmluZE1vZGVsLnNldEZyb21DdXJzb3IoZmFsc2UpOworICAgIGZpbmRNb2RlbC5zZXRHbG9iYWwodHJ1ZSk7CisgICAgZmluZE1vZGVsLnNldE11bHRpcGxlRmlsZXMoZmFsc2UpOworICAgIGZpbmRNb2RlbC5zZXRQcm9qZWN0U2NvcGUodHJ1ZSk7CisgICAgZmluZE1vZGVsLnNldFJlZ3VsYXJFeHByZXNzaW9ucyh0cnVlKTsKKyAgICBmaW5kTW9kZWwuc2V0UHJvbXB0T25SZXBsYWNlKGZhbHNlKTsKKworICAgIGZpbmRNYW5hZ2VyLnNldEZpbmROZXh0TW9kZWwobnVsbCk7CisgICAgZmluZE1hbmFnZXIuZ2V0RmluZEluRmlsZU1vZGVsKCkuY29weUZyb20oZmluZE1vZGVsKTsKKworICAgIFN0cmluZyB0ZXh0ID0gImJ1Z2hlcmVcbiIgKyAiYnVnaGVyZSI7CisgICAgY29uZmlndXJlQnlUZXh0KEZpbGVUeXBlcy5QTEFJTl9URVhULCB0ZXh0KTsKKyAgICBib29sZWFuIHN1Y2MgPSBGaW5kVXRpbC5yZXBsYWNlKGdldFByb2plY3QoKSwgZ2V0RWRpdG9yKCksIDAsIGZpbmRNb2RlbCk7CisgICAgYXNzZXJ0VHJ1ZShzdWNjKTsKKworICAgIGFzc2VydEVxdWFscyh0ZXh0LCBnZXRFZGl0b3IoKS5nZXREb2N1bWVudCgpLmdldFRleHQoKSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0UmVwbGFjZVJlZ2V4cFdpdGhOZXdMaW5lKCkgdGhyb3dzIFRocm93YWJsZSB7CisgICAgRmluZE1hbmFnZXIgZmluZE1hbmFnZXIgPSBGaW5kTWFuYWdlci5nZXRJbnN0YW5jZShteVByb2plY3QpOworCisgICAgRmluZE1vZGVsIGZpbmRNb2RlbCA9IG5ldyBGaW5kTW9kZWwoKTsKKyAgICBmaW5kTW9kZWwuc2V0U3RyaW5nVG9GaW5kKCJ4eHgiKTsKKyAgICBmaW5kTW9kZWwuc2V0U3RyaW5nVG9SZXBsYWNlKCJ4eHhcXG4iKTsKKyAgICBmaW5kTW9kZWwuc2V0V2hvbGVXb3Jkc09ubHkoZmFsc2UpOworICAgIGZpbmRNb2RlbC5zZXRGcm9tQ3Vyc29yKGZhbHNlKTsKKyAgICBmaW5kTW9kZWwuc2V0R2xvYmFsKHRydWUpOworICAgIGZpbmRNb2RlbC5zZXRNdWx0aXBsZUZpbGVzKGZhbHNlKTsKKyAgICBmaW5kTW9kZWwuc2V0UHJvamVjdFNjb3BlKHRydWUpOworICAgIGZpbmRNb2RlbC5zZXRSZWd1bGFyRXhwcmVzc2lvbnModHJ1ZSk7CisgICAgZmluZE1vZGVsLnNldFByb21wdE9uUmVwbGFjZShmYWxzZSk7CisKKyAgICBmaW5kTWFuYWdlci5zZXRGaW5kTmV4dE1vZGVsKG51bGwpOworICAgIGZpbmRNYW5hZ2VyLmdldEZpbmRJbkZpbGVNb2RlbCgpLmNvcHlGcm9tKGZpbmRNb2RlbCk7CisKKyAgICBTdHJpbmcgdGV4dCA9ICJ4eHgiOworICAgIGNvbmZpZ3VyZUJ5VGV4dChGaWxlVHlwZXMuUExBSU5fVEVYVCwgdGV4dCk7CisgICAgYm9vbGVhbiBzdWNjID0gRmluZFV0aWwucmVwbGFjZShnZXRQcm9qZWN0KCksIGdldEVkaXRvcigpLCAwLCBmaW5kTW9kZWwpOworICAgIGFzc2VydFRydWUoc3VjYyk7CisKKyAgICBhc3NlcnRFcXVhbHModGV4dCsiXG4iLCBnZXRFZGl0b3IoKS5nZXREb2N1bWVudCgpLmdldFRleHQoKSk7CisgIH0KKworICBwcml2YXRlICB2b2lkIGluaXRQcm9qZWN0KFN0cmluZyBmb2xkZXJOYW1lLCBmaW5hbCBTdHJpbmcuLi4gc291cmNlRGlycykgdGhyb3dzIEV4Y2VwdGlvbnsKKyAgICBmaW5hbCBTdHJpbmcgdGVzdERpciA9IEphdmFUZXN0VXRpbC5nZXRKYXZhVGVzdERhdGFQYXRoKCkgKyAiL2ZpbmQvIiArIGZvbGRlck5hbWU7CisgICAgQXBwbGljYXRpb25NYW5hZ2VyLmdldEFwcGxpY2F0aW9uKCkucnVuV3JpdGVBY3Rpb24obmV3IFJ1bm5hYmxlKCl7CisgICAgICBAT3ZlcnJpZGUKKyAgICAgIHB1YmxpYyB2b2lkIHJ1bigpeworICAgICAgICB0cnl7CisgICAgICAgICAgbXlTb3VyY2VEaXJzID0gbmV3IFZpcnR1YWxGaWxlW3NvdXJjZURpcnMubGVuZ3RoXTsKKyAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHNvdXJjZURpcnMubGVuZ3RoOyBpKyspeworICAgICAgICAgICAgU3RyaW5nIHNvdXJjZURpciA9IHNvdXJjZURpcnNbaV07CisgICAgICAgICAgICBteVNvdXJjZURpcnNbaV0gPSBMb2NhbEZpbGVTeXN0ZW0uZ2V0SW5zdGFuY2UoKS5yZWZyZXNoQW5kRmluZEZpbGVCeVBhdGgobmV3IEZpbGUodGVzdERpciArIEZpbGUuc2VwYXJhdG9yQ2hhciArIHNvdXJjZURpcikuZ2V0Q2Fub25pY2FsUGF0aCgpLnJlcGxhY2UoRmlsZS5zZXBhcmF0b3JDaGFyLCAnLycpKTsKKyAgICAgICAgICB9CisgICAgICAgICAgVmlydHVhbEZpbGUgcHJvamVjdERpciA9IExvY2FsRmlsZVN5c3RlbS5nZXRJbnN0YW5jZSgpLnJlZnJlc2hBbmRGaW5kRmlsZUJ5UGF0aChuZXcgRmlsZSh0ZXN0RGlyKS5nZXRDYW5vbmljYWxQYXRoKCkucmVwbGFjZShGaWxlLnNlcGFyYXRvckNoYXIsICcvJykpOworCisgICAgICAgICAgU2RrIGpkayA9IElkZWFUZXN0VXRpbC5nZXRNb2NrSmRrMTcoKTsKKyAgICAgICAgICBQc2lUZXN0VXRpbC5yZW1vdmVBbGxSb290cyhteU1vZHVsZSwgamRrKTsKKyAgICAgICAgICBQc2lUZXN0VXRpbC5hZGRDb250ZW50Um9vdChteU1vZHVsZSwgcHJvamVjdERpcik7CisgICAgICAgICAgZm9yIChWaXJ0dWFsRmlsZSBzb3VyY2VEaXIgOiBteVNvdXJjZURpcnMpIHsKKyAgICAgICAgICAgIFBzaVRlc3RVdGlsLmFkZFNvdXJjZVJvb3QobXlNb2R1bGUsIHNvdXJjZURpcik7CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGNhdGNoIChFeGNlcHRpb24gZSl7CisgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oZSk7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9KTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RSZXBsYWNlQWxsKCkgdGhyb3dzIFRocm93YWJsZSB7CisgICAgRmluZE1hbmFnZXIgZmluZE1hbmFnZXIgPSBGaW5kTWFuYWdlci5nZXRJbnN0YW5jZShteVByb2plY3QpOworCisgICAgRmluZE1vZGVsIGZpbmRNb2RlbCA9IG5ldyBGaW5kTW9kZWwoKTsKKyAgICBTdHJpbmcgdG9GaW5kID0gInh4eCI7CisgICAgU3RyaW5nIHRvUmVwbGFjZSA9ICJYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYIjsKKyAgICBmaW5kTW9kZWwuc2V0U3RyaW5nVG9GaW5kKHRvRmluZCk7CisgICAgZmluZE1vZGVsLnNldFN0cmluZ1RvUmVwbGFjZSh0b1JlcGxhY2UpOworICAgIGZpbmRNb2RlbC5zZXRXaG9sZVdvcmRzT25seSh0cnVlKTsKKyAgICBmaW5kTW9kZWwuc2V0RnJvbUN1cnNvcihmYWxzZSk7CisgICAgZmluZE1vZGVsLnNldEdsb2JhbCh0cnVlKTsKKyAgICBmaW5kTW9kZWwuc2V0TXVsdGlwbGVGaWxlcyhmYWxzZSk7CisgICAgZmluZE1vZGVsLnNldFByb2plY3RTY29wZSh0cnVlKTsKKyAgICBmaW5kTW9kZWwuc2V0UmVndWxhckV4cHJlc3Npb25zKGZhbHNlKTsKKyAgICBmaW5kTW9kZWwuc2V0UHJvbXB0T25SZXBsYWNlKGZhbHNlKTsKKworICAgIGZpbmRNYW5hZ2VyLnNldEZpbmROZXh0TW9kZWwobnVsbCk7CisgICAgZmluZE1hbmFnZXIuZ2V0RmluZEluRmlsZU1vZGVsKCkuY29weUZyb20oZmluZE1vZGVsKTsKKworICAgIFN0cmluZyB0ZXh0ID0gU3RyaW5nVXRpbC5yZXBlYXQodG9GaW5kICsgIlxuIiw2KTsKKyAgICBjb25maWd1cmVCeVRleHQoRmlsZVR5cGVzLlBMQUlOX1RFWFQsIHRleHQpOworCisgICAgTGlzdDxVc2FnZT4gdXNhZ2VzID0gRmluZFV0aWwuZmluZEFsbChnZXRQcm9qZWN0KCksIG15RWRpdG9yLCBmaW5kTW9kZWwpOworICAgIGZvciAoVXNhZ2UgdXNhZ2UgOiB1c2FnZXMpIHsKKyAgICAgIFJlcGxhY2VJblByb2plY3RNYW5hZ2VyLmdldEluc3RhbmNlKGdldFByb2plY3QoKSkuZG9SZXBsYWNlKHVzYWdlLCBmaW5kTW9kZWwsIENvbGxlY3Rpb25zLjxVc2FnZT5lbXB0eVNldCgpLCBmYWxzZSk7CisgICAgfQorICAgIFN0cmluZyBuZXdUZXh0ID0gU3RyaW5nVXRpbC5yZXBlYXQodG9SZXBsYWNlICsgIlxuIiw2KTsKKyAgICBhc3NlcnRFcXVhbHMobmV3VGV4dCwgZ2V0RWRpdG9yKCkuZ2V0RG9jdW1lbnQoKS5nZXRUZXh0KCkpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEZpbmRJbkZpbGVVbmRlckxpYnJhcnlVbmRlclByb2plY3QoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBpbml0UHJvamVjdCgibGliVW5kZXJQcm9qZWN0IiwgInNyYyIpOworICAgIFBzaVRlc3RVdGlsLmFkZExpYnJhcnkobXlNb2R1bGUsICJsaWIiLCBKYXZhVGVzdFV0aWwuZ2V0SmF2YVRlc3REYXRhUGF0aCgpICsgIi9maW5kL2xpYlVuZGVyUHJvamVjdC9saWIiLCBuZXcgU3RyaW5nW117IiJ9LCBBcnJheVV0aWwuRU1QVFlfU1RSSU5HX0FSUkFZKTsKKworICAgIEZpbmRNb2RlbCBmaW5kTW9kZWwgPSBuZXcgRmluZE1vZGVsKCk7CisgICAgZmluZE1vZGVsLnNldFN0cmluZ1RvRmluZCgiVGFyZ2V0V29yZCIpOworICAgIGZpbmRNb2RlbC5zZXRGcm9tQ3Vyc29yKGZhbHNlKTsKKyAgICBmaW5kTW9kZWwuc2V0R2xvYmFsKHRydWUpOworICAgIGZpbmRNb2RlbC5zZXRNdWx0aXBsZUZpbGVzKHRydWUpOworCisgICAgZmluZE1vZGVsLnNldFdob2xlV29yZHNPbmx5KGZhbHNlKTsKKyAgICBhc3NlcnRTaXplKDIsIGZpbmRVc2FnZXMoZmluZE1vZGVsKSk7CisKKyAgICBmaW5kTW9kZWwuc2V0V2hvbGVXb3Jkc09ubHkodHJ1ZSk7CisgICAgYXNzZXJ0U2l6ZSgyLCBmaW5kVXNhZ2VzKGZpbmRNb2RlbCkpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdExvY2FsU2NvcGVTZWFyY2hQZXJmb3JtYW5jZSgpIHRocm93cyBUaHJvd2FibGUgeworICAgIGZpbmFsIGludCBmaWxlQ291bnQgPSAzMDAwOworICAgIGZpbmFsIGludCBsaW5lQ291bnQgPSA1MDA7CisgICAgVGVtcERpclRlc3RGaXh0dXJlIGZpeHR1cmUgPSBuZXcgTGlnaHRUZW1wRGlyVGVzdEZpeHR1cmVJbXBsKCk7CisgICAgZml4dHVyZS5zZXRVcCgpOworCisgICAgdHJ5IHsKKyAgICAgIFN0cmluZyBzYW1wbGVUZXh0ID0gU3RyaW5nVXRpbC5yZXBlYXQoInpvbyBUYXJnZXRXb3JkIGZvbyBiYXIgZ29vXG4iLCBsaW5lQ291bnQpOworICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBmaWxlQ291bnQ7IGkrKykgeworICAgICAgICBmaXh0dXJlLmNyZWF0ZUZpbGUoImEiICsgaSArICIudHh0Iiwgc2FtcGxlVGV4dCk7CisgICAgICB9CisgICAgICBQc2lUZXN0VXRpbC5hZGRTb3VyY2VDb250ZW50VG9Sb290cyhteU1vZHVsZSwgZml4dHVyZS5nZXRGaWxlKCIiKSk7CisKKyAgICAgIFZpcnR1YWxGaWxlIGZpbGUgPSBmaXh0dXJlLmNyZWF0ZUZpbGUoInRhcmdldC50eHQiLCBzYW1wbGVUZXh0KTsKKyAgICAgIFBzaUZpbGUgcHNpRmlsZSA9IFBzaU1hbmFnZXIuZ2V0SW5zdGFuY2UobXlQcm9qZWN0KS5maW5kRmlsZShmaWxlKTsKKyAgICAgIGZpbmFsIEZpbmRNb2RlbCBmaW5kTW9kZWwgPSBuZXcgRmluZE1vZGVsKCk7CisgICAgICBmaW5kTW9kZWwuc2V0U3RyaW5nVG9GaW5kKCJUYXJnZXRXb3JkIik7CisgICAgICBmaW5kTW9kZWwuc2V0V2hvbGVXb3Jkc09ubHkodHJ1ZSk7CisgICAgICBmaW5kTW9kZWwuc2V0RnJvbUN1cnNvcihmYWxzZSk7CisgICAgICBmaW5kTW9kZWwuc2V0R2xvYmFsKHRydWUpOworICAgICAgZmluZE1vZGVsLnNldE11bHRpcGxlRmlsZXModHJ1ZSk7CisKKyAgICAgIFRocm93YWJsZVJ1bm5hYmxlIHRlc3QgPSBuZXcgVGhyb3dhYmxlUnVubmFibGUoKSB7CisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgdm9pZCBydW4oKSB0aHJvd3MgVGhyb3dhYmxlIHsKKyAgICAgICAgICBhc3NlcnRTaXplKGxpbmVDb3VudCwgZmluZFVzYWdlcyhmaW5kTW9kZWwpKTsKKyAgICAgICAgfQorICAgICAgfTsKKworICAgICAgZmluZE1vZGVsLnNldEN1c3RvbVNjb3BlKEdsb2JhbFNlYXJjaFNjb3BlLmZpbGVTY29wZShwc2lGaWxlKSk7CisgICAgICBQbGF0Zm9ybVRlc3RVdGlsLnN0YXJ0UGVyZm9ybWFuY2VUZXN0KCJzbG93IiwgNDAwLCB0ZXN0KS5hdHRlbXB0cygyKS5jcHVCb3VuZCgpLnVzZXNBbGxDUFVDb3JlcygpLmFzc2VydFRpbWluZygpOworCisgICAgICBmaW5kTW9kZWwuc2V0Q3VzdG9tU2NvcGUobmV3IExvY2FsU2VhcmNoU2NvcGUocHNpRmlsZSkpOworICAgICAgUGxhdGZvcm1UZXN0VXRpbC5zdGFydFBlcmZvcm1hbmNlVGVzdCgic2xvdyIsIDQwMCwgdGVzdCkuYXR0ZW1wdHMoMikuY3B1Qm91bmQoKS51c2VzQWxsQ1BVQ29yZXMoKS5hc3NlcnRUaW1pbmcoKTsKKyAgICB9CisgICAgZmluYWxseSB7CisgICAgICBmaXh0dXJlLnRlYXJEb3duKCk7CisgICAgfQorICB9CisKKworfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2ZpbmQvZmluZFVzYWdlcy9GaW5kUGFyYW1ldGVyVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2ZpbmQvZmluZFVzYWdlcy9GaW5kUGFyYW1ldGVyVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMxMTNkOGMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovZmluZC9maW5kVXNhZ2VzL0ZpbmRQYXJhbWV0ZXJUZXN0LmphdmEKQEAgLTAsMCArMSwzMSBAQAorcGFja2FnZSBjb20uaW50ZWxsaWouZmluZC5maW5kVXNhZ2VzOworCitpbXBvcnQgY29tLmludGVsbGlqLnBzaS4qOworaW1wb3J0IGNvbS5pbnRlbGxpai5wc2kuc2VhcmNoLkxvY2FsU2VhcmNoU2NvcGU7CitpbXBvcnQgY29tLmludGVsbGlqLnBzaS5zZWFyY2guc2VhcmNoZXMuUmVmZXJlbmNlc1NlYXJjaDsKK2ltcG9ydCBjb20uaW50ZWxsaWoudGVzdEZyYW1ld29yay5Qc2lUZXN0Q2FzZTsKK2ltcG9ydCBqdW5pdC5mcmFtZXdvcmsuQXNzZXJ0OworCisvKioKKyAqICBAYXV0aG9yIGRzbAorICovCitwdWJsaWMgY2xhc3MgRmluZFBhcmFtZXRlclRlc3QgZXh0ZW5kcyBQc2lUZXN0Q2FzZSB7CisgIHB1YmxpYyB2b2lkIHRlc3RNZXRob2QoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBTdHJpbmcgdGV4dCA9CisgICAgICAgICAgICAidm9pZCBtZXRob2QoZmluYWwgaW50IGkpIHsiICsKKyAgICAgICAgICAgICIgIFJ1bm5hYmxlIHJ1bm5hYmxlID0gbmV3IFJ1bm5hYmxlKCkgeyIgKworICAgICAgICAgICAgIiAgICBwdWJsaWMgdm9pZCBydW4oKSB7IiArCisgICAgICAgICAgICAiICAgICAgU3lzdGVtLm91dC5wcmludGxuKGkpOyIgKworICAgICAgICAgICAgIiAgICB9IiArCisgICAgICAgICAgICAiICB9OyIgKworICAgICAgICAgICAgIiAgU3lzdGVtLm91dC5wcmludGxuKGkpOyIgKworICAgICAgICAgICAgIn0iOworICAgIGZpbmFsIFBzaU1hbmFnZXIgcHNpTWFuYWdlciA9IFBzaU1hbmFnZXIuZ2V0SW5zdGFuY2UobXlQcm9qZWN0KTsKKyAgICBmaW5hbCBQc2lFbGVtZW50RmFjdG9yeSBlbGVtZW50RmFjdG9yeSA9IEphdmFQc2lGYWNhZGUuZ2V0SW5zdGFuY2UocHNpTWFuYWdlci5nZXRQcm9qZWN0KCkpLmdldEVsZW1lbnRGYWN0b3J5KCk7CisgICAgZmluYWwgUHNpTWV0aG9kIG1ldGhvZEZyb21UZXh0ID0gZWxlbWVudEZhY3RvcnkuY3JlYXRlTWV0aG9kRnJvbVRleHQodGV4dCwgbnVsbCk7CisgICAgZmluYWwgUHNpUGFyYW1ldGVyW10gcGFyYW1ldGVycyA9IG1ldGhvZEZyb21UZXh0LmdldFBhcmFtZXRlckxpc3QoKS5nZXRQYXJhbWV0ZXJzKCk7CisgICAgZmluYWwgUHNpUmVmZXJlbmNlW10gcmVmZXJlbmNlcyA9CisgICAgICBSZWZlcmVuY2VzU2VhcmNoLnNlYXJjaChwYXJhbWV0ZXJzWzBdLCBuZXcgTG9jYWxTZWFyY2hTY29wZShtZXRob2RGcm9tVGV4dCksIGZhbHNlKS50b0FycmF5KG5ldyBQc2lSZWZlcmVuY2VbMF0pOworICAgIEFzc2VydC5hc3NlcnRFcXVhbHMocmVmZXJlbmNlcy5sZW5ndGgsIDIpOworICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovaWRlL2ZpbGVTdHJ1Y3R1cmUvSmF2YUZpbGVTdHJ1Y3R1cmVGaWx0ZXJpbmdUZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovaWRlL2ZpbGVTdHJ1Y3R1cmUvSmF2YUZpbGVTdHJ1Y3R1cmVGaWx0ZXJpbmdUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDc1YTc3NgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9pZGUvZmlsZVN0cnVjdHVyZS9KYXZhRmlsZVN0cnVjdHVyZUZpbHRlcmluZ1Rlc3QuamF2YQpAQCAtMCwwICsxLDM2IEBACisvKgorICogQ29weXJpZ2h0IDIwMDAtMjAxMiBKZXRCcmFpbnMgcy5yLm8uCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworcGFja2FnZSBjb20uaW50ZWxsaWouaWRlLmZpbGVTdHJ1Y3R1cmU7CisKKy8qKgorICogQGF1dGhvciBLb25zdGFudGluIEJ1bGVua292CisgKi8KK3B1YmxpYyBjbGFzcyBKYXZhRmlsZVN0cnVjdHVyZUZpbHRlcmluZ1Rlc3QgZXh0ZW5kcyBKYXZhRmlsZVN0cnVjdHVyZVRlc3RDYXNlIHsKKyAgQE92ZXJyaWRlCisgIHByb3RlY3RlZCBTdHJpbmcgZ2V0VGVzdERhdGFGb2xkZXJOYW1lKCkgeworICAgIHJldHVybiAiZmlsdGVyaW5nIjsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RTaW1wbGUoKSAgICAgICAgICAgIHRocm93cyBFeGNlcHRpb24ge2NoZWNrVHJlZSgiZiIpO30KKyAgcHVibGljIHZvaWQgdGVzdFJldHVyblZhbHVlKCkgICAgICAgdGhyb3dzIEV4Y2VwdGlvbiB7Y2hlY2tUcmVlKCJwb2ludCIpO30KKyAgcHVibGljIHZvaWQgdGVzdEFub255bW91c1R5cGUoKSAgICAgdGhyb3dzIEV4Y2VwdGlvbiB7Y2hlY2tUcmVlKCJwb2ludCIpO30KKyAgcHVibGljIHZvaWQgdGVzdENhbWVsKCkgICAgICAgICAgICAgdGhyb3dzIEV4Y2VwdGlvbiB7Y2hlY2tUcmVlKCJzb2hlIik7fQorICBwdWJsaWMgdm9pZCB0ZXN0Q2FtZWwyKCkgICAgICAgICAgICB0aHJvd3MgRXhjZXB0aW9uIHtjaGVja1RyZWUoInNvSGUiKTt9CisgIHB1YmxpYyB2b2lkIHRlc3RTZWxlY3RMZWFmRmlyc3QoKSAgIHRocm93cyBFeGNlcHRpb24ge2NoZWNrVHJlZSgiY2xlYXIiKTt9CisgIHB1YmxpYyB2b2lkIHRlc3RTZWxlY3RMZWFmRmlyc3QyKCkgIHRocm93cyBFeGNlcHRpb24ge2NoZWNrVHJlZSgiY2xlYXIiKTt9CisgIHB1YmxpYyB2b2lkIHRlc3RTZWxlY3RMZWFmRmlyc3QzKCkgIHRocm93cyBFeGNlcHRpb24ge2NoZWNrVHJlZSgiY2xlYXIiKTt9CisgIHB1YmxpYyB2b2lkIHRlc3RTZWxlY3RMZWFmRmlyc3Q0KCkgIHRocm93cyBFeGNlcHRpb24ge2NoZWNrVHJlZSgiY2xlYXIiKTt9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovaWRlL2ZpbGVTdHJ1Y3R1cmUvSmF2YUZpbGVTdHJ1Y3R1cmVIaWVyYXJjaHlUZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovaWRlL2ZpbGVTdHJ1Y3R1cmUvSmF2YUZpbGVTdHJ1Y3R1cmVIaWVyYXJjaHlUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2I3MzIxYwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9pZGUvZmlsZVN0cnVjdHVyZS9KYXZhRmlsZVN0cnVjdHVyZUhpZXJhcmNoeVRlc3QuamF2YQpAQCAtMCwwICsxLDM3IEBACisvKgorICogQ29weXJpZ2h0IDIwMDAtMjAxMiBKZXRCcmFpbnMgcy5yLm8uCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworcGFja2FnZSBjb20uaW50ZWxsaWouaWRlLmZpbGVTdHJ1Y3R1cmU7CisKKy8qKgorICogQGF1dGhvciBLb25zdGFudGluIEJ1bGVua292CisgKi8KK3B1YmxpYyBjbGFzcyBKYXZhRmlsZVN0cnVjdHVyZUhpZXJhcmNoeVRlc3QgZXh0ZW5kcyBKYXZhRmlsZVN0cnVjdHVyZVRlc3RDYXNlIHsKKyAgQE92ZXJyaWRlCisgIHByb3RlY3RlZCBTdHJpbmcgZ2V0VGVzdERhdGFGb2xkZXJOYW1lKCkgeworICAgIHJldHVybiAiaGllcmFyY2h5IjsKKyAgfQorCisgIEBPdmVycmlkZQorICBwdWJsaWMgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24geworICAgIHN1cGVyLnNldFVwKCk7CisgICAgbXlGaXh0dXJlLmNvcHlEaXJlY3RvcnlUb1Byb2plY3QoIiIsICIiKTsKKyAgICBzZXRTaG93UGFyZW50cyh0cnVlKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RTaW1wbGUoKSB0aHJvd3MgRXhjZXB0aW9uIHtjaGVja1RyZWUoKTt9CisgIHB1YmxpYyB2b2lkIHRlc3RBbm9ueW1vdXNBc0NvbnN0YW50SW5JbnRlcmZhY2UoKSB0aHJvd3MgRXhjZXB0aW9uIHtjaGVja1RyZWUoImdldEEiKTt9CisgIHB1YmxpYyB2b2lkIHRlc3RBbm9ueW1vdXNIYXNoQ29kZSgpIHRocm93cyBFeGNlcHRpb24ge2NoZWNrVHJlZSgiaGFzaCIpO30KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9pZGUvZmlsZVN0cnVjdHVyZS9KYXZhRmlsZVN0cnVjdHVyZVNlbGVjdGlvblRlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9pZGUvZmlsZVN0cnVjdHVyZS9KYXZhRmlsZVN0cnVjdHVyZVNlbGVjdGlvblRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYmVhOWMzCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2lkZS9maWxlU3RydWN0dXJlL0phdmFGaWxlU3RydWN0dXJlU2VsZWN0aW9uVGVzdC5qYXZhCkBAIC0wLDAgKzEsMzMgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwMC0yMDEyIEpldEJyYWlucyBzLnIuby4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCitwYWNrYWdlIGNvbS5pbnRlbGxpai5pZGUuZmlsZVN0cnVjdHVyZTsKKworLyoqCisgKiBAYXV0aG9yIEtvbnN0YW50aW4gQnVsZW5rb3YKKyAqLworcHVibGljIGNsYXNzIEphdmFGaWxlU3RydWN0dXJlU2VsZWN0aW9uVGVzdCBleHRlbmRzIEphdmFGaWxlU3RydWN0dXJlVGVzdENhc2UgeworICBAT3ZlcnJpZGUKKyAgcHJvdGVjdGVkIFN0cmluZyBnZXRUZXN0RGF0YUZvbGRlck5hbWUoKSB7CisgICAgcmV0dXJuICJzZWxlY3Rpb24iOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEZpZWxkKCkgICAgICAgICAgICAgICAgIHRocm93cyBFeGNlcHRpb24ge2NoZWNrVHJlZSgpO30KKyAgcHVibGljIHZvaWQgdGVzdE1ldGhvZCgpICAgICAgICAgICAgICAgIHRocm93cyBFeGNlcHRpb24ge2NoZWNrVHJlZSgpO30KKyAgcHVibGljIHZvaWQgdGVzdENvbnN0cnVjdG9yKCkgICAgICAgICAgIHRocm93cyBFeGNlcHRpb24ge2NoZWNrVHJlZSgpO30KKyAgcHVibGljIHZvaWQgdGVzdEluc2lkZUNsYXNzKCkgICAgICAgICAgIHRocm93cyBFeGNlcHRpb24ge2NoZWNrVHJlZSgpO30KKyAgcHVibGljIHZvaWQgdGVzdEFub255bW91cygpICAgICAgICAgICAgIHRocm93cyBFeGNlcHRpb24ge2NoZWNrVHJlZSgpO30KKyAgcHVibGljIHZvaWQgdGVzdEFub255bW91c0luQW5vbnltb3VzKCkgIHRocm93cyBFeGNlcHRpb24ge2NoZWNrVHJlZSgpO30KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9pZGUvZmlsZVN0cnVjdHVyZS9KYXZhRmlsZVN0cnVjdHVyZVRlc3RDYXNlLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovaWRlL2ZpbGVTdHJ1Y3R1cmUvSmF2YUZpbGVTdHJ1Y3R1cmVUZXN0Q2FzZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY3NGQzMTYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovaWRlL2ZpbGVTdHJ1Y3R1cmUvSmF2YUZpbGVTdHJ1Y3R1cmVUZXN0Q2FzZS5qYXZhCkBAIC0wLDAgKzEsNzYgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwMC0yMDEyIEpldEJyYWlucyBzLnIuby4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCitwYWNrYWdlIGNvbS5pbnRlbGxpai5pZGUuZmlsZVN0cnVjdHVyZTsKKworaW1wb3J0IGNvbS5pbnRlbGxpai5KYXZhVGVzdFV0aWw7CitpbXBvcnQgY29tLmludGVsbGlqLmlkZS5zdHJ1Y3R1cmVWaWV3LmltcGwuamF2YS5KYXZhQW5vbnltb3VzQ2xhc3Nlc05vZGVQcm92aWRlcjsKK2ltcG9ydCBjb20uaW50ZWxsaWouaWRlLnN0cnVjdHVyZVZpZXcuaW1wbC5qYXZhLkphdmFJbmhlcml0ZWRNZW1iZXJzTm9kZVByb3ZpZGVyOworaW1wb3J0IGNvbS5pbnRlbGxpai5pZGUudXRpbC5GaWxlU3RydWN0dXJlUG9wdXA7CitpbXBvcnQgY29tLmludGVsbGlqLmlkZS51dGlsLlByb3BlcnRpZXNDb21wb25lbnQ7CitpbXBvcnQgY29tLmludGVsbGlqLnRlc3RGcmFtZXdvcmsuRmlsZVN0cnVjdHVyZVRlc3RCYXNlOworaW1wb3J0IGNvbS5pbnRlbGxpai50ZXN0RnJhbWV3b3JrLklkZWFUZXN0Q2FzZTsKKworLyoqCisgKiBAYXV0aG9yIEtvbnN0YW50aW4gQnVsZW5rb3YKKyAqLworcHVibGljIGFic3RyYWN0IGNsYXNzIEphdmFGaWxlU3RydWN0dXJlVGVzdENhc2UgZXh0ZW5kcyBGaWxlU3RydWN0dXJlVGVzdEJhc2UgeworICBwcml2YXRlIGJvb2xlYW4gbXlTaG93QW5vbnltb3VzQnlEZWZhdWx0OworCisgIHByb3RlY3RlZCBKYXZhRmlsZVN0cnVjdHVyZVRlc3RDYXNlKCkgeworICAgIElkZWFUZXN0Q2FzZS5pbml0UGxhdGZvcm1QcmVmaXgoKTsKKyAgfQorCisgIHByb3RlY3RlZCBhYnN0cmFjdCBTdHJpbmcgZ2V0VGVzdERhdGFGb2xkZXJOYW1lKCk7CisKKyAgQE92ZXJyaWRlCisgIHB1YmxpYyB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgc3VwZXIuc2V0VXAoKTsKKyAgICBteVNob3dBbm9ueW1vdXNCeURlZmF1bHQgPSBQcm9wZXJ0aWVzQ29tcG9uZW50LmdldEluc3RhbmNlKCkuZ2V0Qm9vbGVhbihnZXRBbm9ueW1vdXNQcm9wZXJ0eU5hbWUoKSwgZmFsc2UpOworICAgIGlmIChnZXRUZXN0TmFtZShmYWxzZSkuY29udGFpbnMoIkFub255bW91cyIpKSB7CisgICAgICBzZXRTaG93QW5vbnltb3VzKHRydWUpOworICAgIH0KKyAgfQorCisgIEBPdmVycmlkZQorICBwcm90ZWN0ZWQgU3RyaW5nIGdldEZpbGVFeHRlbnNpb24oKSB7CisgICAgcmV0dXJuICJqYXZhIjsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHNldFNob3dBbm9ueW1vdXMoYm9vbGVhbiBzaG93KSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBteVBvcHVwLnNldFRyZWVBY3Rpb25TdGF0ZShKYXZhQW5vbnltb3VzQ2xhc3Nlc05vZGVQcm92aWRlci5jbGFzcywgc2hvdyk7CisgICAgdXBkYXRlKCk7CisgIH0KKworICBwdWJsaWMgdm9pZCBzZXRTaG93UGFyZW50cyhib29sZWFuIHNob3cpIHRocm93cyBFeGNlcHRpb24geworICAgIG15UG9wdXAuc2V0VHJlZUFjdGlvblN0YXRlKEphdmFJbmhlcml0ZWRNZW1iZXJzTm9kZVByb3ZpZGVyLmNsYXNzLCBzaG93KTsKKyAgICB1cGRhdGUoKTsKKyAgfQorCisgIEBPdmVycmlkZQorICBwdWJsaWMgdm9pZCB0ZWFyRG93bigpIHRocm93cyBFeGNlcHRpb24geworICAgIFByb3BlcnRpZXNDb21wb25lbnQuZ2V0SW5zdGFuY2UoKS5zZXRWYWx1ZShnZXRBbm9ueW1vdXNQcm9wZXJ0eU5hbWUoKSwgQm9vbGVhbi50b1N0cmluZyhteVNob3dBbm9ueW1vdXNCeURlZmF1bHQpKTsKKyAgICBzdXBlci50ZWFyRG93bigpOworICB9CisKKyAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGdldEFub255bW91c1Byb3BlcnR5TmFtZSgpIHsKKyAgICByZXR1cm4gRmlsZVN0cnVjdHVyZVBvcHVwLmdldFByb3BlcnR5TmFtZShKYXZhQW5vbnltb3VzQ2xhc3Nlc05vZGVQcm92aWRlci5KQVZBX0FOT05ZTU9VU19QUk9QRVJUWV9OQU1FKTsKKyAgfQorCisgIEBPdmVycmlkZQorICBwcm90ZWN0ZWQgU3RyaW5nIGdldEJhc2VQYXRoKCkgeworICAgIHJldHVybiBKYXZhVGVzdFV0aWwuZ2V0UmVsYXRpdmVKYXZhVGVzdERhdGFQYXRoKCkgKyAiL2ZpbGVTdHJ1Y3R1cmUvIiArIGdldFRlc3REYXRhRm9sZGVyTmFtZSgpOworICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovaWRlL2ZpbGVTdHJ1Y3R1cmUvSmF2YUZpbGVTdHJ1Y3R1cmVUZXN0U3VpdGUuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9pZGUvZmlsZVN0cnVjdHVyZS9KYXZhRmlsZVN0cnVjdHVyZVRlc3RTdWl0ZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYxZGQ5NjYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovaWRlL2ZpbGVTdHJ1Y3R1cmUvSmF2YUZpbGVTdHJ1Y3R1cmVUZXN0U3VpdGUuamF2YQpAQCAtMCwwICsxLDMxIEBACisvKgorICogQ29weXJpZ2h0IDIwMDAtMjAxMiBKZXRCcmFpbnMgcy5yLm8uCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworcGFja2FnZSBjb20uaW50ZWxsaWouaWRlLmZpbGVTdHJ1Y3R1cmU7CisKK2ltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdFN1aXRlOworCisvKioKKyAqIEBhdXRob3IgS29uc3RhbnRpbiBCdWxlbmtvdgorICovCitwdWJsaWMgY2xhc3MgSmF2YUZpbGVTdHJ1Y3R1cmVUZXN0U3VpdGUgeworICBwdWJsaWMgc3RhdGljIFRlc3RTdWl0ZSBzdWl0ZSgpIHsKKyAgICByZXR1cm4gbmV3IFRlc3RTdWl0ZSgKKyAgICAgIEphdmFGaWxlU3RydWN0dXJlU2VsZWN0aW9uVGVzdC5jbGFzcywKKyAgICAgIEphdmFGaWxlU3RydWN0dXJlRmlsdGVyaW5nVGVzdC5jbGFzcywKKyAgICAgIEphdmFGaWxlU3RydWN0dXJlSGllcmFyY2h5VGVzdC5jbGFzcworICAgICk7CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9pZGUvZmlsZVRlbXBsYXRlcy9GaWxlVGVtcGxhdGVzVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2lkZS9maWxlVGVtcGxhdGVzL0ZpbGVUZW1wbGF0ZXNUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTcyNTg2MQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9pZGUvZmlsZVRlbXBsYXRlcy9GaWxlVGVtcGxhdGVzVGVzdC5qYXZhCkBAIC0wLDAgKzEsMTE5IEBACitwYWNrYWdlIGNvbS5pbnRlbGxpai5pZGUuZmlsZVRlbXBsYXRlczsKKworaW1wb3J0IGNvbS5pbnRlbGxpai5pZGUuZmlsZVRlbXBsYXRlcy5pbXBsLkN1c3RvbUZpbGVUZW1wbGF0ZTsKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS5hcHBsaWNhdGlvbi5leC5QYXRoTWFuYWdlckV4OworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLnJvb3RzLk1vZHVsZVJvb3RNYW5hZ2VyOworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLnV0aWwuaW8uRmlsZVV0aWw7CitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkudXRpbC50ZXh0LlN0cmluZ1V0aWw7CitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkudmZzLkxvY2FsRmlsZVN5c3RlbTsKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS52ZnMuVmlydHVhbEZpbGU7CitpbXBvcnQgY29tLmludGVsbGlqLnBzaS5KYXZhRGlyZWN0b3J5U2VydmljZTsKK2ltcG9ydCBjb20uaW50ZWxsaWoucHNpLlBzaUNsYXNzOworaW1wb3J0IGNvbS5pbnRlbGxpai5wc2kuUHNpRGlyZWN0b3J5OworaW1wb3J0IGNvbS5pbnRlbGxpai5wc2kuUHNpTWFuYWdlcjsKK2ltcG9ydCBjb20uaW50ZWxsaWoudGVzdEZyYW1ld29yay5JZGVhVGVzdENhc2U7CitpbXBvcnQgY29tLmludGVsbGlqLnRlc3RGcmFtZXdvcmsuUHNpVGVzdFV0aWw7CitpbXBvcnQgY29tLmludGVsbGlqLnV0aWwucHJvcGVydGllcy5FbmNvZGluZ0F3YXJlUHJvcGVydGllczsKKworaW1wb3J0IGphdmEuaW8uRmlsZTsKK2ltcG9ydCBqYXZhLmlvLkZpbGVuYW1lRmlsdGVyOworaW1wb3J0IGphdmEudXRpbC4qOworCitAU3VwcHJlc3NXYXJuaW5ncyh7IkhhcmRDb2RlZFN0cmluZ0xpdGVyYWwifSkKK3B1YmxpYyBjbGFzcyBGaWxlVGVtcGxhdGVzVGVzdCBleHRlbmRzIElkZWFUZXN0Q2FzZSB7CisgIHB1YmxpYyB2b2lkIHRlc3RBbGxUZW1wbGF0ZXMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBmaW5hbCBGaWxlIHRlc3RzRGlyID0gbmV3IEZpbGUoUGF0aE1hbmFnZXJFeC5nZXRUZXN0RGF0YVBhdGgoKSsiL2lkZS9maWxlVGVtcGxhdGVzIik7CisKKyAgICBmaW5hbCBTdHJpbmcgaW5jbHVkZVRlbXBsYXRlTmFtZSA9ICJpbmNsdWRlMS5pbmMiOworICAgIGZpbmFsIFN0cmluZyBpbmNsdWRlVGVtcGxhdGVFeHRlbnNpb24gPSAidHh0IjsKKyAgICBmaW5hbCBTdHJpbmcgY3VzdG9tSW5jbHVkZUZpbGVOYW1lID0gaW5jbHVkZVRlbXBsYXRlTmFtZSArICIuIiArIGluY2x1ZGVUZW1wbGF0ZUV4dGVuc2lvbjsKKyAgICBmaW5hbCBGaWxlIGN1c3RvbUluY2x1ZGUgPSBuZXcgRmlsZSh0ZXN0c0RpciwgY3VzdG9tSW5jbHVkZUZpbGVOYW1lKTsKKyAgICBmaW5hbCBTdHJpbmcgaW5jbHVkZVRleHQgPSBGaWxlVXRpbC5sb2FkRmlsZShjdXN0b21JbmNsdWRlLCBGaWxlVGVtcGxhdGUub3VyRW5jb2RpbmcpOworCisgICAgZmluYWwgRmlsZVRlbXBsYXRlTWFuYWdlciB0ZW1wbGF0ZU1hbmFnZXIgPSBGaWxlVGVtcGxhdGVNYW5hZ2VyLmdldEluc3RhbmNlKCk7CisgICAgZmluYWwgQXJyYXlMaXN0PEZpbGVUZW1wbGF0ZT4gb3JpZ2luYWxJbmNsdWRlcyA9IG5ldyBBcnJheUxpc3Q8RmlsZVRlbXBsYXRlPihBcnJheXMuYXNMaXN0KHRlbXBsYXRlTWFuYWdlci5nZXRBbGxQYXR0ZXJucygpKSk7CisgICAgdHJ5IHsKKyAgICAgIC8vIGNvbmZpZ3VyZSBjdXN0b20gaW5jbHVkZQorICAgICAgZmluYWwgTGlzdDxGaWxlVGVtcGxhdGU+IGFsbEluY2x1ZGVzID0gbmV3IEFycmF5TGlzdDxGaWxlVGVtcGxhdGU+KG9yaWdpbmFsSW5jbHVkZXMpOworICAgICAgZmluYWwgQ3VzdG9tRmlsZVRlbXBsYXRlIGN1c3RvbSA9IG5ldyBDdXN0b21GaWxlVGVtcGxhdGUoaW5jbHVkZVRlbXBsYXRlTmFtZSwgaW5jbHVkZVRlbXBsYXRlRXh0ZW5zaW9uKTsKKyAgICAgIGN1c3RvbS5zZXRUZXh0KGluY2x1ZGVUZXh0KTsKKyAgICAgIGFsbEluY2x1ZGVzLmFkZChjdXN0b20pOworICAgICAgdGVtcGxhdGVNYW5hZ2VyLnNldFRlbXBsYXRlcyhGaWxlVGVtcGxhdGVNYW5hZ2VyLklOQ0xVREVTX1RFTVBMQVRFU19DQVRFR09SWSwgYWxsSW5jbHVkZXMpOworCisgICAgICBmaW5hbCBTdHJpbmcgdHh0ID0gIi50eHQiOworICAgICAgRmlsZVtdIGNoaWxkcmVuID0gdGVzdHNEaXIubGlzdEZpbGVzKG5ldyBGaWxlbmFtZUZpbHRlcigpIHsKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyBib29sZWFuIGFjY2VwdChGaWxlIGRpciwgU3RyaW5nIG5hbWUpIHsKKyAgICAgICAgICByZXR1cm4gbmFtZS5lbmRzV2l0aCgiLm91dCIrdHh0KTsKKyAgICAgICAgfQorICAgICAgfSk7CisKKyAgICAgIGFzc2VydFRydWUoY2hpbGRyZW4ubGVuZ3RoID4gMCk7CisgICAgICBmb3IgKEZpbGUgcmVzdWx0RmlsZSA6IGNoaWxkcmVuKSB7CisgICAgICAgIFN0cmluZyBuYW1lID0gcmVzdWx0RmlsZS5nZXROYW1lKCk7CisgICAgICAgIFN0cmluZyBiYXNlID0gbmFtZS5zdWJzdHJpbmcoMCwgbmFtZS5sZW5ndGgoKSAtIHR4dC5sZW5ndGgoKSAtICIub3V0Ii5sZW5ndGgoKSk7CisgICAgICAgIEZpbGUgcHJvcEZpbGUgPSBuZXcgRmlsZShyZXN1bHRGaWxlLmdldFBhcmVudCgpLCBiYXNlICsgIi5wcm9wIiArIHR4dCk7CisgICAgICAgIEZpbGUgaW5GaWxlID0gbmV3IEZpbGUocmVzdWx0RmlsZS5nZXRQYXJlbnQoKSwgYmFzZSArIHR4dCk7CisgIAorICAgICAgICBTdHJpbmcgaW5wdXRUZXh0ID0gRmlsZVV0aWwubG9hZEZpbGUoaW5GaWxlLCBGaWxlVGVtcGxhdGUub3VyRW5jb2RpbmcpOworICAgICAgICBTdHJpbmcgb3V0cHV0VGV4dCA9IEZpbGVVdGlsLmxvYWRGaWxlKHJlc3VsdEZpbGUsIEZpbGVUZW1wbGF0ZS5vdXJFbmNvZGluZyk7CisgIAorICAgICAgICBFbmNvZGluZ0F3YXJlUHJvcGVydGllcyBwcm9wZXJ0aWVzID0gbmV3IEVuY29kaW5nQXdhcmVQcm9wZXJ0aWVzKCk7CisgIAorICAgICAgICBwcm9wZXJ0aWVzLmxvYWQocHJvcEZpbGUsIEZpbGVUZW1wbGF0ZS5vdXJFbmNvZGluZyk7CisgIAorICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4ocmVzdWx0RmlsZS5nZXROYW1lKCkpOworICAgICAgICBkb1Rlc3RUZW1wbGF0ZShpbnB1dFRleHQsIHByb3BlcnRpZXMsIG91dHB1dFRleHQsIHJlc3VsdEZpbGUuZ2V0UGFyZW50KCkpOworICAgICAgfQorICAgIH0KKyAgICBmaW5hbGx5IHsKKyAgICAgIHRlbXBsYXRlTWFuYWdlci5zZXRUZW1wbGF0ZXMoRmlsZVRlbXBsYXRlTWFuYWdlci5JTkNMVURFU19URU1QTEFURVNfQ0FURUdPUlksIG9yaWdpbmFsSW5jbHVkZXMpOworICAgIH0KKyAgfQorCisgIHByaXZhdGUgc3RhdGljIHZvaWQgZG9UZXN0VGVtcGxhdGUoU3RyaW5nIGlucHV0U3RyaW5nLCBQcm9wZXJ0aWVzIHByb3BlcnRpZXMsIFN0cmluZyBleHBlY3RlZCwgU3RyaW5nIGRpcikgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgaW5wdXRTdHJpbmcgPSBTdHJpbmdVdGlsLmNvbnZlcnRMaW5lU2VwYXJhdG9ycyhpbnB1dFN0cmluZyk7CisgICAgZXhwZWN0ZWQgPSBTdHJpbmdVdGlsLmNvbnZlcnRMaW5lU2VwYXJhdG9ycyhleHBlY3RlZCk7CisgICAgCisgICAgZmluYWwgU3RyaW5nIHJlc3VsdCA9IEZpbGVUZW1wbGF0ZVV0aWwubWVyZ2VUZW1wbGF0ZShwcm9wZXJ0aWVzLCBpbnB1dFN0cmluZywgZmFsc2UpOworICAgIGFzc2VydEVxdWFscyhleHBlY3RlZCwgcmVzdWx0KTsKKworICAgIExpc3QgYXR0cnMgPSBBcnJheXMuYXNMaXN0KEZpbGVUZW1wbGF0ZVV0aWwuY2FsY3VsYXRlQXR0cmlidXRlcyhpbnB1dFN0cmluZywgbmV3IFByb3BlcnRpZXMoKSwgZmFsc2UpKTsKKyAgICBhc3NlcnRUcnVlKHByb3BlcnRpZXMuc2l6ZSgpIDw9IGF0dHJzLnNpemUoKSk7CisgICAgRW51bWVyYXRpb24gZSA9IHByb3BlcnRpZXMucHJvcGVydHlOYW1lcygpOworICAgIHdoaWxlIChlLmhhc01vcmVFbGVtZW50cygpKSB7CisgICAgICBTdHJpbmcgcyA9IChTdHJpbmcpZS5uZXh0RWxlbWVudCgpOworICAgICAgYXNzZXJ0VHJ1ZSgiQXR0cmlidXRlICciICsgcyArICInIG5vdCBmb3VuZCBpbiBwcm9wZXJ0aWVzIiwgYXR0cnMuY29udGFpbnMocykpOworICAgIH0KKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RGaW5kRmlsZUJ5VXJsKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgRmlsZVRlbXBsYXRlIGNhdGNoQm9keVRlbXBsYXRlID0gRmlsZVRlbXBsYXRlTWFuYWdlci5nZXRJbnN0YW5jZSgpLmdldENvZGVUZW1wbGF0ZShKYXZhVGVtcGxhdGVVdGlsLlRFTVBMQVRFX0NBVENIX0JPRFkpOworICAgIGFzc2VydE5vdE51bGwoY2F0Y2hCb2R5VGVtcGxhdGUpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdERlZmF1bHRQYWNrYWdlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgU3RyaW5nIG5hbWUgPSAibXljbGFzcyI7CisgICAgRmlsZVRlbXBsYXRlIHRlbXBsYXRlID0gRmlsZVRlbXBsYXRlTWFuYWdlci5nZXRJbnN0YW5jZSgpLmFkZEludGVybmFsKG5hbWUvKisiRm9yVGVzdCIqLywgImphdmEiKTsKKyAgICB0cnkgeworICAgICAgdGVtcGxhdGUuc2V0VGV4dCgicGFja2FnZSAke1BBQ0tBR0VfTkFNRX07IHB1YmxpYyBjbGFzcyAke05BTUV9IHt9Iik7CisKKyAgICAgIEZpbGUgdGVtcCA9IEZpbGVVdGlsLmNyZWF0ZVRlbXBEaXJlY3RvcnkoZ2V0VGVzdE5hbWUodHJ1ZSksICIiKTsKKworICAgICAgbXlGaWxlc1RvRGVsZXRlLmFkZCh0ZW1wKTsKKyAgICAgIGZpbmFsIFZpcnR1YWxGaWxlIHRlbXBEaXIgPSBMb2NhbEZpbGVTeXN0ZW0uZ2V0SW5zdGFuY2UoKS5yZWZyZXNoQW5kRmluZEZpbGVCeUlvRmlsZSh0ZW1wKTsKKworICAgICAgUHNpVGVzdFV0aWwuYWRkU291cmNlUm9vdChnZXRNb2R1bGUoKSwgdGVtcERpcik7CisKKyAgICAgIFZpcnR1YWxGaWxlIHNvdXJjZVJvb3QgPSBNb2R1bGVSb290TWFuYWdlci5nZXRJbnN0YW5jZShnZXRNb2R1bGUoKSkuZ2V0U291cmNlUm9vdHMoKVswXTsKKyAgICAgIFBzaURpcmVjdG9yeSBwc2lEaXJlY3RvcnkgPSBQc2lNYW5hZ2VyLmdldEluc3RhbmNlKGdldFByb2plY3QoKSkuZmluZERpcmVjdG9yeShzb3VyY2VSb290KTsKKworICAgICAgUHNpQ2xhc3MgcHNpQ2xhc3MgPSBKYXZhRGlyZWN0b3J5U2VydmljZS5nZXRJbnN0YW5jZSgpLmNyZWF0ZUNsYXNzKHBzaURpcmVjdG9yeSwgIlhYWCIsIG5hbWUpOworICAgICAgYXNzZXJ0Tm90TnVsbChwc2lDbGFzcyk7CisgICAgICBhc3NlcnRFcXVhbHMoInB1YmxpYyBjbGFzcyBYWFgge1xufSIsIHBzaUNsYXNzLmdldENvbnRhaW5pbmdGaWxlKCkuZ2V0VGV4dCgpKTsKKyAgICB9CisgICAgZmluYWxseSB7CisgICAgICBGaWxlVGVtcGxhdGVNYW5hZ2VyLmdldEluc3RhbmNlKCkucmVtb3ZlVGVtcGxhdGUodGVtcGxhdGUpOworICAgIH0KKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2lkZS9oaWVyYXJjaHkvSmF2YUNhbGxIaWVyYXJjaHlUZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovaWRlL2hpZXJhcmNoeS9KYXZhQ2FsbEhpZXJhcmNoeVRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZWJjOWUwCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2lkZS9oaWVyYXJjaHkvSmF2YUNhbGxIaWVyYXJjaHlUZXN0LmphdmEKQEAgLTAsMCArMSw1NiBAQAorcGFja2FnZSBjb20uaW50ZWxsaWouaWRlLmhpZXJhcmNoeTsKKworaW1wb3J0IGNvbS5pbnRlbGxpai5KYXZhVGVzdFV0aWw7CitpbXBvcnQgY29tLmludGVsbGlqLmlkZS5oaWVyYXJjaHkuY2FsbC5DYWxsZXJNZXRob2RzVHJlZVN0cnVjdHVyZTsKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS51dGlsLkNvbXB1dGFibGU7CitpbXBvcnQgY29tLmludGVsbGlqLnBzaS5KYXZhUHNpRmFjYWRlOworaW1wb3J0IGNvbS5pbnRlbGxpai5wc2kuUHNpQ2xhc3M7CitpbXBvcnQgY29tLmludGVsbGlqLnBzaS5Qc2lNZXRob2Q7CitpbXBvcnQgY29tLmludGVsbGlqLnBzaS5zZWFyY2guUHJvamVjdFNjb3BlOworaW1wb3J0IGNvbS5pbnRlbGxpai50ZXN0RnJhbWV3b3JrLmNvZGVJbnNpZ2h0LmhpZXJhcmNoeS5IaWVyYXJjaHlWaWV3VGVzdEJhc2U7CisKKy8qKgorICogQGF1dGhvciB5b2xlCisgKi8KK3B1YmxpYyBjbGFzcyBKYXZhQ2FsbEhpZXJhcmNoeVRlc3QgZXh0ZW5kcyBIaWVyYXJjaHlWaWV3VGVzdEJhc2UgeworICBAT3ZlcnJpZGUKKyAgcHJvdGVjdGVkIFN0cmluZyBnZXRUZXN0RGF0YVBhdGgoKSB7CisgICAgcmV0dXJuIEphdmFUZXN0VXRpbC5nZXRKYXZhVGVzdERhdGFQYXRoKCk7CisgIH0KKworICBAT3ZlcnJpZGUKKyAgcHJvdGVjdGVkIFN0cmluZyBnZXRCYXNlUGF0aCgpIHsKKyAgICByZXR1cm4gImlkZS9oaWVyYXJjaHkvY2FsbC8iICsgZ2V0VGVzdE5hbWUoZmFsc2UpOworICB9CisKKyAgcHJpdmF0ZSB2b2lkIGRvSmF2YUNhbGxUeXBlSGllcmFyY2h5VGVzdChmaW5hbCBTdHJpbmcgY2xhc3NGcW4sIGZpbmFsIFN0cmluZyBtZXRob2ROYW1lLCBmaW5hbCBTdHJpbmcuLi4gZmlsZU5hbWVzKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb0hpZXJhcmNoeVRlc3QobmV3IENvbXB1dGFibGU8SGllcmFyY2h5VHJlZVN0cnVjdHVyZT4oKSB7CisgICAgICBAT3ZlcnJpZGUKKyAgICAgIHB1YmxpYyBIaWVyYXJjaHlUcmVlU3RydWN0dXJlIGNvbXB1dGUoKSB7CisgICAgICAgIGZpbmFsIFBzaUNsYXNzIHBzaUNsYXNzID0gSmF2YVBzaUZhY2FkZS5nZXRJbnN0YW5jZShnZXRQcm9qZWN0KCkpLmZpbmRDbGFzcyhjbGFzc0ZxbiwgUHJvamVjdFNjb3BlLmdldFByb2plY3RTY29wZShnZXRQcm9qZWN0KCkpKTsKKyAgICAgICAgZmluYWwgUHNpTWV0aG9kIG1ldGhvZCA9IHBzaUNsYXNzLmZpbmRNZXRob2RzQnlOYW1lKG1ldGhvZE5hbWUsIGZhbHNlKSBbMF07CisgICAgICAgIHJldHVybiBuZXcgQ2FsbGVyTWV0aG9kc1RyZWVTdHJ1Y3R1cmUoZ2V0UHJvamVjdCgpLCBtZXRob2QsIEhpZXJhcmNoeUJyb3dzZXJCYXNlRXguU0NPUEVfUFJPSkVDVCk7CisgICAgICB9CisgICAgfSwgZmlsZU5hbWVzKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RJZGVhRGV2NDEwMDUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb0phdmFDYWxsVHlwZUhpZXJhcmNoeVRlc3QoIkIiLCAieHl6enkiLCAiQi5qYXZhIiwgIkQuamF2YSIsICJBLmphdmEiKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RJZGVhRGV2NDEwMDVfSW5oZXJpdGFuY2UoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb0phdmFDYWxsVHlwZUhpZXJhcmNoeVRlc3QoIkQiLCAieHl6enkiLCAiQi5qYXZhIiwgIkQuamF2YSIsICJBLmphdmEiLCAiQy5qYXZhIik7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0SWRlYURldjQxMDA1X1NpYmxpbmcoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb0phdmFDYWxsVHlwZUhpZXJhcmNoeVRlc3QoIkQiLCAieHl6enkiLCAiQi5qYXZhIiwgIkQuamF2YSIsICJBLmphdmEiLCAiQy5qYXZhIik7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0SWRlYURldjQxMDA1X1NpYmxpbmdVbmRlckluaGVyaXRhbmNlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9KYXZhQ2FsbFR5cGVIaWVyYXJjaHlUZXN0KCJEIiwgInh5enp5IiwgIkIuamF2YSIsICJELmphdmEiLCAiQS5qYXZhIiwgIkMuamF2YSIsICJDQ2hpbGQuamF2YSIpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdElkZWFEZXY0MTIzMigpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvSmF2YUNhbGxUeXBlSGllcmFyY2h5VGVzdCgiQSIsICJtYWluIiwgIkIuamF2YSIsICJBLmphdmEiKTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2lkZS91dGlsL0phdmFBbm9ueW1vdXNDbGFzc2VzSGVscGVyVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2lkZS91dGlsL0phdmFBbm9ueW1vdXNDbGFzc2VzSGVscGVyVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM1MDkxNWQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovaWRlL3V0aWwvSmF2YUFub255bW91c0NsYXNzZXNIZWxwZXJUZXN0LmphdmEKQEAgLTAsMCArMSw1MyBAQAorLyoKKyAqIENvcHlyaWdodCAyMDAwLTIwMTIgSmV0QnJhaW5zIHMuci5vLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KK3BhY2thZ2UgY29tLmludGVsbGlqLmlkZS51dGlsOworCitpbXBvcnQgY29tLmludGVsbGlqLkphdmFUZXN0VXRpbDsKK2ltcG9ydCBjb20uaW50ZWxsaWoucHNpLlBzaUFub255bW91c0NsYXNzOworaW1wb3J0IGNvbS5pbnRlbGxpai5wc2kuUHNpRWxlbWVudDsKK2ltcG9ydCBjb20uaW50ZWxsaWoucHNpLnV0aWwuUHNpVXRpbEJhc2U7CitpbXBvcnQgY29tLmludGVsbGlqLnRlc3RGcmFtZXdvcmsuZml4dHVyZXMuTGlnaHRDb2RlSW5zaWdodEZpeHR1cmVUZXN0Q2FzZTsKKworLyoqCisgKiBAYXV0aG9yIEtvbnN0YW50aW4gQnVsZW5rb3YKKyAqLworcHVibGljIGNsYXNzIEphdmFBbm9ueW1vdXNDbGFzc2VzSGVscGVyVGVzdCBleHRlbmRzIExpZ2h0Q29kZUluc2lnaHRGaXh0dXJlVGVzdENhc2UgeworICBAT3ZlcnJpZGUKKyAgcHVibGljIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBzdXBlci5zZXRVcCgpOworICAgIG15Rml4dHVyZS5jb25maWd1cmVCeUZpbGUoZ2V0VGVzdE5hbWUoZmFsc2UpICsgIi5qYXZhIik7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0U2ltcGxlKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvd3MgRXhjZXB0aW9uIHtkb1Rlc3QoNyk7fQorICBwdWJsaWMgdm9pZCB0ZXN0U2ltcGxlSW5Db25zdHJ1Y3RvcigpICAgICAgICAgICAgICAgICAgICAgICB0aHJvd3MgRXhjZXB0aW9uIHtkb1Rlc3QoMik7fQorICBwdWJsaWMgdm9pZCB0ZXN0SW5zaWRlQW5vbnltb3VzTWV0aG9kKCkgICAgICAgICAgICAgICAgICAgICB0aHJvd3MgRXhjZXB0aW9uIHtkb1Rlc3QoMSk7fQorICBwdWJsaWMgdm9pZCB0ZXN0QW5vbnltb3VzUGFyYW1ldGVySW5Bbm9ueW1vdXNDb25zdHJ1Y3RvcigpICB0aHJvd3MgRXhjZXB0aW9uIHtkb1Rlc3QoMSk7fQorICBwdWJsaWMgdm9pZCB0ZXN0QW5vbnltb3VzUGFyYW1ldGVySW5Bbm9ueW1vdXNDb25zdHJ1Y3RvcjIoKSB0aHJvd3MgRXhjZXB0aW9uIHtkb1Rlc3QoMik7fQorCisgIEBTdXBwcmVzc1dhcm5pbmdzKCJDb25zdGFudENvbmRpdGlvbnMiKQorICBwcml2YXRlIHZvaWQgZG9UZXN0KGludCBudW0pIHsKKyAgICBmaW5hbCBQc2lFbGVtZW50IGVsZW1lbnQgPSBQc2lVdGlsQmFzZS5nZXRFbGVtZW50QXRDYXJldChteUZpeHR1cmUuZ2V0RWRpdG9yKCkpLmdldFBhcmVudCgpLmdldFBhcmVudCgpOworCisgICAgYXNzZXJ0IGVsZW1lbnQgaW5zdGFuY2VvZiBQc2lBbm9ueW1vdXNDbGFzcyA6ICJUaGVyZSBzaG91bGQgYmUgYW5vbnltb3VzIGNsYXNzIGF0IGNhcmV0IGJ1dCAiICsgZWxlbWVudCArICIgZm91bmQiOworCisgICAgYXNzZXJ0RXF1YWxzKCIkIiArIG51bSwgSmF2YUFub255bW91c0NsYXNzZXNIZWxwZXIuZ2V0TmFtZSgoUHNpQW5vbnltb3VzQ2xhc3MpZWxlbWVudCkpOworICB9CisKKyAgQE92ZXJyaWRlCisgIHByb3RlY3RlZCBTdHJpbmcgZ2V0QmFzZVBhdGgoKSB7CisgICAgcmV0dXJuIEphdmFUZXN0VXRpbC5nZXRSZWxhdGl2ZUphdmFUZXN0RGF0YVBhdGgoKSArICIvYW5vbnltb3VzLyI7CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9pZGUvdXRpbC9KYXZhU291cmNlUm9vdERldGVjdGlvblRlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9pZGUvdXRpbC9KYXZhU291cmNlUm9vdERldGVjdGlvblRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NGY1MzdiCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2lkZS91dGlsL0phdmFTb3VyY2VSb290RGV0ZWN0aW9uVGVzdC5qYXZhCkBAIC0wLDAgKzEsNzEgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwMC0yMDExIEpldEJyYWlucyBzLnIuby4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCitwYWNrYWdlIGNvbS5pbnRlbGxpai5pZGUudXRpbDsKKworaW1wb3J0IGNvbS5pbnRlbGxpai5KYXZhVGVzdFV0aWw7CitpbXBvcnQgY29tLmludGVsbGlqLmlkZS51dGlsLnByb2plY3RXaXphcmQuaW1wb3J0U291cmNlcy5KYXZhTW9kdWxlU291cmNlUm9vdDsKK2ltcG9ydCBjb20uaW50ZWxsaWouaWRlLnV0aWwucHJvamVjdFdpemFyZC5pbXBvcnRTb3VyY2VzLkphdmFTb3VyY2VSb290RGV0ZWN0aW9uVXRpbDsKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS51dGlsLlBhaXI7CitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkudXRpbC5pby5GaWxlVXRpbDsKK2ltcG9ydCBjb20uaW50ZWxsaWoudGVzdEZyYW1ld29yay5QbGF0Zm9ybVRlc3RDYXNlOworCitpbXBvcnQgamF2YS5pby5GaWxlOworaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKKy8qKgorICogQGF1dGhvciBuaWsKKyAqLworcHVibGljIGNsYXNzIEphdmFTb3VyY2VSb290RGV0ZWN0aW9uVGVzdCBleHRlbmRzIFBsYXRmb3JtVGVzdENhc2UgeworICBwdWJsaWMgdm9pZCB0ZXN0U2ltcGxlKCkgeworICAgIGRvVGVzdCgic3JjIiwgIiIpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFdpdGhQcmVmaXgoKSB7CisgICAgZG9UZXN0KCIiLCAieHh4Lnl5eSIpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFR3b1Jvb3RzKCkgeworICAgIGRvVGVzdCgic3JjMSIsICIiLCAic3JjMiIsICJ4eXoiKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3REZWZhdWx0UGFja2FnZSgpIHsKKyAgICBkb1Rlc3QoInNyYyIsICIiKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3REZWZhdWx0UGFja2FnZVdpdGhJbXBvcnQoKSB7CisgICAgZG9UZXN0KCJzcmMiLCAiIik7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0R2FyYmFnZSgpIHsKKyAgICBkb1Rlc3QoKTsKKyAgfQorCisgIHByaXZhdGUgdm9pZCBkb1Rlc3QoU3RyaW5nLi4uIGV4cGVjdGVkKSB7CisgICAgZmluYWwgU3RyaW5nIGRpclBhdGggPSBKYXZhVGVzdFV0aWwuZ2V0SmF2YVRlc3REYXRhUGF0aCgpICsgRmlsZVV0aWwudG9TeXN0ZW1EZXBlbmRlbnROYW1lKCIvaWRlL3NvdXJjZVJvb3REZXRlY3Rpb24vIiArIGdldFRlc3ROYW1lKHRydWUpKTsKKyAgICBmaW5hbCBGaWxlIGRpciA9IG5ldyBGaWxlKGRpclBhdGgpOworICAgIGFzc2VydFRydWUoZGlyLmlzRGlyZWN0b3J5KCkpOworICAgIGZpbmFsIExpc3Q8UGFpcjxGaWxlLCBTdHJpbmc+PiBhY3R1YWwgPSBuZXcgQXJyYXlMaXN0PFBhaXI8RmlsZSwgU3RyaW5nPj4oKTsKKyAgICBmb3IgKEphdmFNb2R1bGVTb3VyY2VSb290IHJvb3QgOiBKYXZhU291cmNlUm9vdERldGVjdGlvblV0aWwuc3VnZ2VzdFJvb3RzKGRpcikpIHsKKyAgICAgIGFjdHVhbC5hZGQoUGFpci5jcmVhdGUocm9vdC5nZXREaXJlY3RvcnkoKSwgcm9vdC5nZXRQYWNrYWdlUHJlZml4KCkpKTsKKyAgICB9CisgICAgTGlzdDxQYWlyPEZpbGUsIFN0cmluZz4+IGV4cGVjdGVkTGlzdCA9IG5ldyBBcnJheUxpc3Q8UGFpcjxGaWxlLCBTdHJpbmc+PigpOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZXhwZWN0ZWQubGVuZ3RoIC8gMjsgaSsrKSB7CisgICAgICBleHBlY3RlZExpc3QuYWRkKFBhaXIuY3JlYXRlKG5ldyBGaWxlKGRpciwgZXhwZWN0ZWRbMiAqIGldKSwgZXhwZWN0ZWRbMiAqIGkgKyAxXSkpOworICAgIH0KKyAgICBhc3NlcnRTYW1lRWxlbWVudHMoYWN0dWFsLCBleHBlY3RlZExpc3QpOworICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovaWRlL3V0aWwvZnJhbWV3b3JrU3VwcG9ydC9GcmFtZXdvcmtTdXBwb3J0UHJvdmlkZXJUZXN0Q2FzZS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2lkZS91dGlsL2ZyYW1ld29ya1N1cHBvcnQvRnJhbWV3b3JrU3VwcG9ydFByb3ZpZGVyVGVzdENhc2UuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YTE0ZTYwCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2lkZS91dGlsL2ZyYW1ld29ya1N1cHBvcnQvRnJhbWV3b3JrU3VwcG9ydFByb3ZpZGVyVGVzdENhc2UuamF2YQpAQCAtMCwwICsxLDEyNCBAQAorcGFja2FnZSBjb20uaW50ZWxsaWouaWRlLnV0aWwuZnJhbWV3b3JrU3VwcG9ydDsKKworaW1wb3J0IGNvbS5pbnRlbGxpai5mYWNldC5GYWNldDsKK2ltcG9ydCBjb20uaW50ZWxsaWouZmFjZXQuRmFjZXRNYW5hZ2VyOworaW1wb3J0IGNvbS5pbnRlbGxpai5mYWNldC5GYWNldFR5cGVJZDsKK2ltcG9ydCBjb20uaW50ZWxsaWouZmFjZXQudWkuRmFjZXRCYXNlZEZyYW1ld29ya1N1cHBvcnRQcm92aWRlcjsKK2ltcG9ydCBjb20uaW50ZWxsaWouZnJhbWV3b3JrLkZyYW1ld29ya1R5cGU7CitpbXBvcnQgY29tLmludGVsbGlqLmZyYW1ld29yay5hZGRTdXBwb3J0LkZyYW1ld29ya1N1cHBvcnRJbk1vZHVsZUNvbmZpZ3VyYWJsZTsKK2ltcG9ydCBjb20uaW50ZWxsaWouZnJhbWV3b3JrLmFkZFN1cHBvcnQuRnJhbWV3b3JrU3VwcG9ydEluTW9kdWxlUHJvdmlkZXI7CitpbXBvcnQgY29tLmludGVsbGlqLmlkZS51dGlsLm5ld1Byb2plY3RXaXphcmQuRnJhbWV3b3JrU3VwcG9ydE5vZGU7CitpbXBvcnQgY29tLmludGVsbGlqLmlkZS51dGlsLm5ld1Byb2plY3RXaXphcmQuT2xkRnJhbWV3b3JrU3VwcG9ydFByb3ZpZGVyV3JhcHBlcjsKK2ltcG9ydCBjb20uaW50ZWxsaWouaWRlLnV0aWwubmV3UHJvamVjdFdpemFyZC5pbXBsLkZyYW1ld29ya1N1cHBvcnRDb21tdW5pY2F0b3I7CitpbXBvcnQgY29tLmludGVsbGlqLmlkZS51dGlsLm5ld1Byb2plY3RXaXphcmQuaW1wbC5GcmFtZXdvcmtTdXBwb3J0TW9kZWxCYXNlOworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLmNvbW1hbmQuV3JpdGVDb21tYW5kQWN0aW9uOworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLnByb2plY3QuUHJvamVjdDsKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS5yb290cy5JZGVhTW9kaWZpYWJsZU1vZGVsc1Byb3ZpZGVyOworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLnJvb3RzLk1vZGlmaWFibGVSb290TW9kZWw7CitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkucm9vdHMuTW9kdWxlUm9vdE1hbmFnZXI7CitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkucm9vdHMudWkuY29uZmlndXJhdGlvbi5wcm9qZWN0Um9vdC5MaWJyYXJpZXNDb250YWluZXJGYWN0b3J5OworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLnV0aWwuRGlzcG9zZXI7CitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkudmZzLlZpcnR1YWxGaWxlOworaW1wb3J0IGNvbS5pbnRlbGxpai50ZXN0RnJhbWV3b3JrLklkZWFUZXN0Q2FzZTsKK2ltcG9ydCBjb20uaW50ZWxsaWoudGVzdEZyYW1ld29yay5Qc2lUZXN0VXRpbDsKK2ltcG9ydCBvcmcuamV0YnJhaW5zLmFubm90YXRpb25zLk5vdE51bGw7CisKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworaW1wb3J0IGphdmEudXRpbC4qOworCisvKioKKyAqIEBhdXRob3IgbmlrCisgKi8KK3B1YmxpYyBhYnN0cmFjdCBjbGFzcyBGcmFtZXdvcmtTdXBwb3J0UHJvdmlkZXJUZXN0Q2FzZSBleHRlbmRzIElkZWFUZXN0Q2FzZSB7CisgIHByaXZhdGUgRnJhbWV3b3JrU3VwcG9ydE1vZGVsQmFzZSBteUZyYW1ld29ya1N1cHBvcnRNb2RlbDsKKyAgcHJpdmF0ZSBNYXA8RnJhbWV3b3JrVHlwZSwgRnJhbWV3b3JrU3VwcG9ydEluTW9kdWxlQ29uZmlndXJhYmxlPiBteUNvbmZpZ3VyYWJsZXM7CisgIHByaXZhdGUgTWFwPEZyYW1ld29ya1R5cGUsIEZyYW1ld29ya1N1cHBvcnROb2RlPiBteU5vZGVzOworCisgIEBPdmVycmlkZQorICBwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24geworICAgIHN1cGVyLnNldFVwKCk7CisgICAgZmluYWwgUHJvamVjdCBwcm9qZWN0ID0gZ2V0UHJvamVjdCgpOworICAgIG15RnJhbWV3b3JrU3VwcG9ydE1vZGVsID0gbmV3IEZyYW1ld29ya1N1cHBvcnRNb2RlbEltcGwocHJvamVjdCwgIiIsIExpYnJhcmllc0NvbnRhaW5lckZhY3RvcnkuY3JlYXRlQ29udGFpbmVyKHByb2plY3QpKTsKKyAgICBteU5vZGVzID0gbmV3IEhhc2hNYXA8RnJhbWV3b3JrVHlwZSwgRnJhbWV3b3JrU3VwcG9ydE5vZGU+KCk7CisgICAgZmluYWwgTGlzdDxGcmFtZXdvcmtTdXBwb3J0SW5Nb2R1bGVQcm92aWRlcj4gcHJvdmlkZXJzID0gRnJhbWV3b3JrU3VwcG9ydFV0aWwuZ2V0QWxsUHJvdmlkZXJzKCk7CisgICAgQ29sbGVjdGlvbnMuc29ydChwcm92aWRlcnMsIEZyYW1ld29ya1N1cHBvcnRVdGlsLmdldEZyYW1ld29ya1N1cHBvcnRQcm92aWRlcnNDb21wYXJhdG9yKHByb3ZpZGVycykpOworICAgIGZvciAoRnJhbWV3b3JrU3VwcG9ydEluTW9kdWxlUHJvdmlkZXIgcHJvdmlkZXIgOiBwcm92aWRlcnMpIHsKKyAgICAgIGZpbmFsIEZyYW1ld29ya1N1cHBvcnROb2RlIG5vZGUgPSBuZXcgRnJhbWV3b3JrU3VwcG9ydE5vZGUocHJvdmlkZXIsIG51bGwsIG15RnJhbWV3b3JrU3VwcG9ydE1vZGVsLCBnZXRUZXN0Um9vdERpc3Bvc2FibGUoKSk7CisgICAgICBteU5vZGVzLnB1dChwcm92aWRlci5nZXRGcmFtZXdvcmtUeXBlKCksIG5vZGUpOworICAgICAgbXlGcmFtZXdvcmtTdXBwb3J0TW9kZWwucmVnaXN0ZXJDb21wb25lbnQocHJvdmlkZXIsIG5vZGUpOworICAgIH0KKyAgICBteUNvbmZpZ3VyYWJsZXMgPSBuZXcgSGFzaE1hcDxGcmFtZXdvcmtUeXBlLCBGcmFtZXdvcmtTdXBwb3J0SW5Nb2R1bGVDb25maWd1cmFibGU+KCk7CisgIH0KKworICBwcm90ZWN0ZWQgdm9pZCBhZGRTdXBwb3J0KCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKKyAgICBuZXcgV3JpdGVDb21tYW5kQWN0aW9uLlNpbXBsZShnZXRQcm9qZWN0KCkpIHsKKyAgICAgIEBPdmVycmlkZQorICAgICAgcHJvdGVjdGVkIHZvaWQgcnVuKCkgdGhyb3dzIFRocm93YWJsZSB7CisgICAgICAgIGZpbmFsIFZpcnR1YWxGaWxlIHJvb3QgPSBnZXRWaXJ0dWFsRmlsZShjcmVhdGVUZW1wRGlyKCJjb250ZW50Um9vdCIpKTsKKyAgICAgICAgUHNpVGVzdFV0aWwuYWRkQ29udGVudFJvb3QobXlNb2R1bGUsIHJvb3QpOworICAgICAgICBmaW5hbCBNb2RpZmlhYmxlUm9vdE1vZGVsIG1vZGVsID0gTW9kdWxlUm9vdE1hbmFnZXIuZ2V0SW5zdGFuY2UobXlNb2R1bGUpLmdldE1vZGlmaWFibGVNb2RlbCgpOworICAgICAgICB0cnkgeworICAgICAgICAgIExpc3Q8RnJhbWV3b3JrU3VwcG9ydENvbmZpZ3VyYWJsZT4gc2VsZWN0ZWRDb25maWd1cmFibGVzID0gbmV3IEFycmF5TGlzdDxGcmFtZXdvcmtTdXBwb3J0Q29uZmlndXJhYmxlPigpOworICAgICAgICAgIGZpbmFsIElkZWFNb2RpZmlhYmxlTW9kZWxzUHJvdmlkZXIgbW9kZWxzUHJvdmlkZXIgPSBuZXcgSWRlYU1vZGlmaWFibGVNb2RlbHNQcm92aWRlcigpOworICAgICAgICAgIGZvciAoRnJhbWV3b3JrU3VwcG9ydE5vZGUgbm9kZSA6IG15Tm9kZXMudmFsdWVzKCkpIHsKKyAgICAgICAgICAgIGlmIChub2RlLmlzQ2hlY2tlZCgpKSB7CisgICAgICAgICAgICAgIGZpbmFsIEZyYW1ld29ya1N1cHBvcnRJbk1vZHVsZUNvbmZpZ3VyYWJsZSBjb25maWd1cmFibGUgPSBnZXRPckNyZWF0ZUNvbmZpZ3VyYWJsZShub2RlLmdldFByb3ZpZGVyKCkpOworICAgICAgICAgICAgICBjb25maWd1cmFibGUuYWRkU3VwcG9ydChteU1vZHVsZSwgbW9kZWwsIG1vZGVsc1Byb3ZpZGVyKTsKKyAgICAgICAgICAgICAgaWYgKGNvbmZpZ3VyYWJsZSBpbnN0YW5jZW9mIE9sZEZyYW1ld29ya1N1cHBvcnRQcm92aWRlcldyYXBwZXIuRnJhbWV3b3JrU3VwcG9ydENvbmZpZ3VyYWJsZVdyYXBwZXIpIHsKKyAgICAgICAgICAgICAgICBzZWxlY3RlZENvbmZpZ3VyYWJsZXMuYWRkKCgoT2xkRnJhbWV3b3JrU3VwcG9ydFByb3ZpZGVyV3JhcHBlci5GcmFtZXdvcmtTdXBwb3J0Q29uZmlndXJhYmxlV3JhcHBlciljb25maWd1cmFibGUpLmdldENvbmZpZ3VyYWJsZSgpKTsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgIH0KKyAgICAgICAgICBmb3IgKEZyYW1ld29ya1N1cHBvcnRDb21tdW5pY2F0b3IgY29tbXVuaWNhdG9yIDogRnJhbWV3b3JrU3VwcG9ydENvbW11bmljYXRvci5FUF9OQU1FLmdldEV4dGVuc2lvbnMoKSkgeworICAgICAgICAgICAgY29tbXVuaWNhdG9yLm9uRnJhbWV3b3JrU3VwcG9ydEFkZGVkKG15TW9kdWxlLCBtb2RlbCwgc2VsZWN0ZWRDb25maWd1cmFibGVzLCBteUZyYW1ld29ya1N1cHBvcnRNb2RlbCk7CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGZpbmFsbHkgeworICAgICAgICAgIG1vZGVsLmNvbW1pdCgpOworICAgICAgICB9CisgICAgICAgIGZvciAoRnJhbWV3b3JrU3VwcG9ydEluTW9kdWxlQ29uZmlndXJhYmxlIGNvbmZpZ3VyYWJsZSA6IG15Q29uZmlndXJhYmxlcy52YWx1ZXMoKSkgeworICAgICAgICAgIERpc3Bvc2VyLmRpc3Bvc2UoY29uZmlndXJhYmxlKTsKKyAgICAgICAgfQorICAgICAgfQorICAgIH0uZXhlY3V0ZSgpLnRocm93RXhjZXB0aW9uKCk7CisgIH0KKworICBwcm90ZWN0ZWQgRnJhbWV3b3JrU3VwcG9ydEluTW9kdWxlQ29uZmlndXJhYmxlIHNlbGVjdEZyYW1ld29yayhATm90TnVsbCBGYWNldFR5cGVJZDw/PiBpZCkgeworICAgIHJldHVybiBzZWxlY3RGcmFtZXdvcmsoRmFjZXRCYXNlZEZyYW1ld29ya1N1cHBvcnRQcm92aWRlci5nZXRQcm92aWRlcklkKGlkKSk7CisgIH0KKworICBwcm90ZWN0ZWQgRnJhbWV3b3JrU3VwcG9ydEluTW9kdWxlQ29uZmlndXJhYmxlIHNlbGVjdEZyYW1ld29yayhATm90TnVsbCBTdHJpbmcgaWQpIHsKKyAgICBmaW5hbCBGcmFtZXdvcmtTdXBwb3J0SW5Nb2R1bGVQcm92aWRlciBwcm92aWRlciA9IEZyYW1ld29ya1N1cHBvcnRVdGlsLmZpbmRQcm92aWRlcihpZCwgRnJhbWV3b3JrU3VwcG9ydFV0aWwuZ2V0QWxsUHJvdmlkZXJzKCkpOworICAgIGlmIChwcm92aWRlciAhPSBudWxsKSB7CisgICAgICByZXR1cm4gc2VsZWN0RnJhbWV3b3JrKHByb3ZpZGVyKTsKKyAgICB9CisgICAgZmFpbCgiRnJhbWV3b3JrIHByb3ZpZGVyIHdpdGggaWQ9JyIgKyBpZCArICInIG5vdCBmb3VuZCIpOworICAgIHJldHVybiBudWxsOworICB9CisKKyAgcHJvdGVjdGVkIEZyYW1ld29ya1N1cHBvcnRJbk1vZHVsZUNvbmZpZ3VyYWJsZSBzZWxlY3RGcmFtZXdvcmsoQE5vdE51bGwgRnJhbWV3b3JrU3VwcG9ydEluTW9kdWxlUHJvdmlkZXIgcHJvdmlkZXIpIHsKKyAgICBmaW5hbCBGcmFtZXdvcmtTdXBwb3J0SW5Nb2R1bGVDb25maWd1cmFibGUgY29uZmlndXJhYmxlID0gZ2V0T3JDcmVhdGVDb25maWd1cmFibGUocHJvdmlkZXIpOworICAgIG15Tm9kZXMuZ2V0KHByb3ZpZGVyLmdldEZyYW1ld29ya1R5cGUoKSkuc2V0Q2hlY2tlZCh0cnVlKTsKKyAgICBjb25maWd1cmFibGUub25GcmFtZXdvcmtTZWxlY3Rpb25DaGFuZ2VkKHRydWUpOworICAgIHJldHVybiBjb25maWd1cmFibGU7CisgIH0KKworICBwcml2YXRlIEZyYW1ld29ya1N1cHBvcnRJbk1vZHVsZUNvbmZpZ3VyYWJsZSBnZXRPckNyZWF0ZUNvbmZpZ3VyYWJsZShGcmFtZXdvcmtTdXBwb3J0SW5Nb2R1bGVQcm92aWRlciBwcm92aWRlcikgeworICAgIEZyYW1ld29ya1N1cHBvcnRJbk1vZHVsZUNvbmZpZ3VyYWJsZSBjb25maWd1cmFibGUgPSBteUNvbmZpZ3VyYWJsZXMuZ2V0KHByb3ZpZGVyLmdldEZyYW1ld29ya1R5cGUoKSk7CisgICAgaWYgKGNvbmZpZ3VyYWJsZSA9PSBudWxsKSB7CisgICAgICBjb25maWd1cmFibGUgPSBwcm92aWRlci5jcmVhdGVDb25maWd1cmFibGUobXlGcmFtZXdvcmtTdXBwb3J0TW9kZWwpOworICAgICAgbXlDb25maWd1cmFibGVzLnB1dChwcm92aWRlci5nZXRGcmFtZXdvcmtUeXBlKCksIGNvbmZpZ3VyYWJsZSk7CisgICAgfQorICAgIHJldHVybiBjb25maWd1cmFibGU7CisgIH0KKworICBwcm90ZWN0ZWQgPEYgZXh0ZW5kcyBGYWNldD4gRiBnZXRGYWNldChGYWNldFR5cGVJZDxGPiBpZCkgeworICAgIGZpbmFsIEYgZmFjZXQgPSBGYWNldE1hbmFnZXIuZ2V0SW5zdGFuY2UobXlNb2R1bGUpLmdldEZhY2V0QnlUeXBlKGlkKTsKKyAgICBhc3NlcnROb3ROdWxsKGlkICsgIiBmYWNldCBub3QgZm91bmQiLCBmYWNldCk7CisgICAgcmV0dXJuIGZhY2V0OworICB9CisKKyAgcHJvdGVjdGVkIFZpcnR1YWxGaWxlIGdldENvbnRlbnRSb290KCkgeworICAgIHJldHVybiBNb2R1bGVSb290TWFuYWdlci5nZXRJbnN0YW5jZShteU1vZHVsZSkuZ2V0Q29udGVudFJvb3RzKClbMF07CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9sYW5nL2phdmEvbGV4ZXIvSmF2YUxleGVyVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2xhbmcvamF2YS9sZXhlci9KYXZhTGV4ZXJUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjE2MzliYwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9sYW5nL2phdmEvbGV4ZXIvSmF2YUxleGVyVGVzdC5qYXZhCkBAIC0wLDAgKzEsMTUxIEBACisvKgorICogQ29weXJpZ2h0IDIwMDAtMjAxMiBKZXRCcmFpbnMgcy5yLm8uCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworcGFja2FnZSBjb20uaW50ZWxsaWoubGFuZy5qYXZhLmxleGVyOworCitpbXBvcnQgY29tLmludGVsbGlqLmxleGVyLkphdmFMZXhlcjsKK2ltcG9ydCBjb20uaW50ZWxsaWoubGV4ZXIuTGV4ZXI7CitpbXBvcnQgY29tLmludGVsbGlqLnBvbS5qYXZhLkxhbmd1YWdlTGV2ZWw7CitpbXBvcnQgY29tLmludGVsbGlqLnRlc3RGcmFtZXdvcmsuTGV4ZXJUZXN0Q2FzZTsKKworcHVibGljIGNsYXNzIEphdmFMZXhlclRlc3QgZXh0ZW5kcyBMZXhlclRlc3RDYXNlIHsKKyAgcHVibGljIHZvaWQgdGVzdENsYXNzaWNOdW1lcmljTGl0ZXJhbHMoKSB7CisgICAgZG9UZXN0KCIwIDEyMzQgMDEyMzQgMHgxMjM0IiwKKyAgICAgICAgICAgIklOVEVHRVJfTElURVJBTCAoJzAnKVxuV0hJVEVfU1BBQ0UgKCcgJylcbiIgKworICAgICAgICAgICAiSU5URUdFUl9MSVRFUkFMICgnMTIzNCcpXG5XSElURV9TUEFDRSAoJyAnKVxuIiArCisgICAgICAgICAgICJJTlRFR0VSX0xJVEVSQUwgKCcwMTIzNCcpXG5XSElURV9TUEFDRSAoJyAnKVxuIiArCisgICAgICAgICAgICJJTlRFR0VSX0xJVEVSQUwgKCcweDEyMzQnKSIpOworCisgICAgZG9UZXN0KCIwTCAxMjM0bCAwMTIzNEwgMHgxMjM0bCIsCisgICAgICAgICAgICJMT05HX0xJVEVSQUwgKCcwTCcpXG5XSElURV9TUEFDRSAoJyAnKVxuIiArCisgICAgICAgICAgICJMT05HX0xJVEVSQUwgKCcxMjM0bCcpXG5XSElURV9TUEFDRSAoJyAnKVxuIiArCisgICAgICAgICAgICJMT05HX0xJVEVSQUwgKCcwMTIzNEwnKVxuV0hJVEVfU1BBQ0UgKCcgJylcbiIgKworICAgICAgICAgICAiTE9OR19MSVRFUkFMICgnMHgxMjM0bCcpIik7CisKKyAgICBkb1Rlc3QoIjBmIDFlMWYgMi5mIC4zZiAwZiAzLjE0ZiA2LjAyMjEzN2UrMjNmIiwKKyAgICAgICAgICAgIkZMT0FUX0xJVEVSQUwgKCcwZicpXG5XSElURV9TUEFDRSAoJyAnKVxuIiArCisgICAgICAgICAgICJGTE9BVF9MSVRFUkFMICgnMWUxZicpXG5XSElURV9TUEFDRSAoJyAnKVxuIiArCisgICAgICAgICAgICJGTE9BVF9MSVRFUkFMICgnMi5mJylcbldISVRFX1NQQUNFICgnICcpXG4iICsKKyAgICAgICAgICAgIkZMT0FUX0xJVEVSQUwgKCcuM2YnKVxuV0hJVEVfU1BBQ0UgKCcgJylcbiIgKworICAgICAgICAgICAiRkxPQVRfTElURVJBTCAoJzBmJylcbldISVRFX1NQQUNFICgnICcpXG4iICsKKyAgICAgICAgICAgIkZMT0FUX0xJVEVSQUwgKCczLjE0ZicpXG5XSElURV9TUEFDRSAoJyAnKVxuIiArCisgICAgICAgICAgICJGTE9BVF9MSVRFUkFMICgnNi4wMjIxMzdlKzIzZicpIik7CisKKyAgICBkb1Rlc3QoIjBkIDFlMSAyLiAuMyAwLjAgMy4xNCAxZS05ZCAxZTEzNyIsCisgICAgICAgICAgICJET1VCTEVfTElURVJBTCAoJzBkJylcbldISVRFX1NQQUNFICgnICcpXG4iICsKKyAgICAgICAgICAgIkRPVUJMRV9MSVRFUkFMICgnMWUxJylcbldISVRFX1NQQUNFICgnICcpXG4iICsKKyAgICAgICAgICAgIkRPVUJMRV9MSVRFUkFMICgnMi4nKVxuV0hJVEVfU1BBQ0UgKCcgJylcbiIgKworICAgICAgICAgICAiRE9VQkxFX0xJVEVSQUwgKCcuMycpXG5XSElURV9TUEFDRSAoJyAnKVxuIiArCisgICAgICAgICAgICJET1VCTEVfTElURVJBTCAoJzAuMCcpXG5XSElURV9TUEFDRSAoJyAnKVxuIiArCisgICAgICAgICAgICJET1VCTEVfTElURVJBTCAoJzMuMTQnKVxuV0hJVEVfU1BBQ0UgKCcgJylcbiIgKworICAgICAgICAgICAiRE9VQkxFX0xJVEVSQUwgKCcxZS05ZCcpXG5XSElURV9TUEFDRSAoJyAnKVxuIiArCisgICAgICAgICAgICJET1VCTEVfTElURVJBTCAoJzFlMTM3JykiKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RUaWdlck51bWVyaWNMaXRlcmFscygpIHsKKyAgICBkb1Rlc3QoIjB4YXAwZiAweGFiLnAwRiAweC5hYmNQMGYgMHhhYmMuZGVmUDBGIiwKKyAgICAgICAgICAgIkZMT0FUX0xJVEVSQUwgKCcweGFwMGYnKVxuV0hJVEVfU1BBQ0UgKCcgJylcbiIgKworICAgICAgICAgICAiRkxPQVRfTElURVJBTCAoJzB4YWIucDBGJylcbldISVRFX1NQQUNFICgnICcpXG4iICsKKyAgICAgICAgICAgIkZMT0FUX0xJVEVSQUwgKCcweC5hYmNQMGYnKVxuV0hJVEVfU1BBQ0UgKCcgJylcbiIgKworICAgICAgICAgICAiRkxPQVRfTElURVJBTCAoJzB4YWJjLmRlZlAwRicpIik7CisKKyAgICBkb1Rlc3QoIjB4YXAxIDB4YWIuUDEyIDB4LmFiY1AxMjNkIDB4YWJjLmRlZlAxMjM0RCIsCisgICAgICAgICAgICJET1VCTEVfTElURVJBTCAoJzB4YXAxJylcbldISVRFX1NQQUNFICgnICcpXG4iICsKKyAgICAgICAgICAgIkRPVUJMRV9MSVRFUkFMICgnMHhhYi5QMTInKVxuV0hJVEVfU1BBQ0UgKCcgJylcbiIgKworICAgICAgICAgICAiRE9VQkxFX0xJVEVSQUwgKCcweC5hYmNQMTIzZCcpXG5XSElURV9TUEFDRSAoJyAnKVxuIiArCisgICAgICAgICAgICJET1VCTEVfTElURVJBTCAoJzB4YWJjLmRlZlAxMjM0RCcpIik7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0Q29pbk51bWVyaWNMaXRlcmFscygpIHsKKyAgICBkb1Rlc3QoIjFfMiAwXzEgMDEyX18zNCAweDFfMl8zXzQgMEIwIDBiMDAwMV8wMDEwXzAxMDBfMTAwMCIsCisgICAgICAgICAgICJJTlRFR0VSX0xJVEVSQUwgKCcxXzInKVxuV0hJVEVfU1BBQ0UgKCcgJylcbiIgKworICAgICAgICAgICAiSU5URUdFUl9MSVRFUkFMICgnMF8xJylcbldISVRFX1NQQUNFICgnICcpXG4iICsKKyAgICAgICAgICAgIklOVEVHRVJfTElURVJBTCAoJzAxMl9fMzQnKVxuV0hJVEVfU1BBQ0UgKCcgJylcbiIgKworICAgICAgICAgICAiSU5URUdFUl9MSVRFUkFMICgnMHgxXzJfM180JylcbldISVRFX1NQQUNFICgnICcpXG4iICsKKyAgICAgICAgICAgIklOVEVHRVJfTElURVJBTCAoJzBCMCcpXG5XSElURV9TUEFDRSAoJyAnKVxuIiArCisgICAgICAgICAgICJJTlRFR0VSX0xJVEVSQUwgKCcwYjAwMDFfMDAxMF8wMTAwXzEwMDAnKSIpOworCisgICAgZG9UZXN0KCIxXzJMIDBfN2wgMDEyX18zNGwgMHgxXzJfM180TCAwQjBMIDBiMDAwMV8wMDEwXzAxMDBfMTAwMGwiLAorICAgICAgICAgICAiTE9OR19MSVRFUkFMICgnMV8yTCcpXG5XSElURV9TUEFDRSAoJyAnKVxuIiArCisgICAgICAgICAgICJMT05HX0xJVEVSQUwgKCcwXzdsJylcbldISVRFX1NQQUNFICgnICcpXG4iICsKKyAgICAgICAgICAgIkxPTkdfTElURVJBTCAoJzAxMl9fMzRsJylcbldISVRFX1NQQUNFICgnICcpXG4iICsKKyAgICAgICAgICAgIkxPTkdfTElURVJBTCAoJzB4MV8yXzNfNEwnKVxuV0hJVEVfU1BBQ0UgKCcgJylcbiIgKworICAgICAgICAgICAiTE9OR19MSVRFUkFMICgnMEIwTCcpXG5XSElURV9TUEFDRSAoJyAnKVxuIiArCisgICAgICAgICAgICJMT05HX0xJVEVSQUwgKCcwYjAwMDFfMDAxMF8wMTAwXzEwMDBsJykiKTsKKworICAgIGRvVGVzdCgiMV8wZiAxZTFfMmYgMl8yLmYgLjNfM2YgMy4xNF8xNmYgNi4wMjJfX18xMzdlKzJfM2YiLAorICAgICAgICAgICAiRkxPQVRfTElURVJBTCAoJzFfMGYnKVxuV0hJVEVfU1BBQ0UgKCcgJylcbiIgKworICAgICAgICAgICAiRkxPQVRfTElURVJBTCAoJzFlMV8yZicpXG5XSElURV9TUEFDRSAoJyAnKVxuIiArCisgICAgICAgICAgICJGTE9BVF9MSVRFUkFMICgnMl8yLmYnKVxuV0hJVEVfU1BBQ0UgKCcgJylcbiIgKworICAgICAgICAgICAiRkxPQVRfTElURVJBTCAoJy4zXzNmJylcbldISVRFX1NQQUNFICgnICcpXG4iICsKKyAgICAgICAgICAgIkZMT0FUX0xJVEVSQUwgKCczLjE0XzE2ZicpXG5XSElURV9TUEFDRSAoJyAnKVxuIiArCisgICAgICAgICAgICJGTE9BVF9MSVRFUkFMICgnNi4wMjJfX18xMzdlKzJfM2YnKSIpOworCisgICAgZG9UZXN0KCIwXzBkIDFlMV8xIDJfMi4gLjNfMyAzLjE0MV81OTIgMWUtOV85ZCAxZTFfXzNfNyIsCisgICAgICAgICAgICJET1VCTEVfTElURVJBTCAoJzBfMGQnKVxuV0hJVEVfU1BBQ0UgKCcgJylcbiIgKworICAgICAgICAgICAiRE9VQkxFX0xJVEVSQUwgKCcxZTFfMScpXG5XSElURV9TUEFDRSAoJyAnKVxuIiArCisgICAgICAgICAgICJET1VCTEVfTElURVJBTCAoJzJfMi4nKVxuV0hJVEVfU1BBQ0UgKCcgJylcbiIgKworICAgICAgICAgICAiRE9VQkxFX0xJVEVSQUwgKCcuM18zJylcbldISVRFX1NQQUNFICgnICcpXG4iICsKKyAgICAgICAgICAgIkRPVUJMRV9MSVRFUkFMICgnMy4xNDFfNTkyJylcbldISVRFX1NQQUNFICgnICcpXG4iICsKKyAgICAgICAgICAgIkRPVUJMRV9MSVRFUkFMICgnMWUtOV85ZCcpXG5XSElURV9TUEFDRSAoJyAnKVxuIiArCisgICAgICAgICAgICJET1VCTEVfTElURVJBTCAoJzFlMV9fM183JykiKTsKKworICAgIGRvVGVzdCgiMHhhX2FwMV8wZiAweGFfYi5wMjJGIDB4LmFiX19jUDBmIDB4YV9iYy5kX2VmUDBGIiwKKyAgICAgICAgICAgIkZMT0FUX0xJVEVSQUwgKCcweGFfYXAxXzBmJylcbldISVRFX1NQQUNFICgnICcpXG4iICsKKyAgICAgICAgICAgIkZMT0FUX0xJVEVSQUwgKCcweGFfYi5wMjJGJylcbldISVRFX1NQQUNFICgnICcpXG4iICsKKyAgICAgICAgICAgIkZMT0FUX0xJVEVSQUwgKCcweC5hYl9fY1AwZicpXG5XSElURV9TUEFDRSAoJyAnKVxuIiArCisgICAgICAgICAgICJGTE9BVF9MSVRFUkFMICgnMHhhX2JjLmRfZWZQMEYnKSIpOworCisgICAgZG9UZXN0KCIweGFfYXAxIDB4YV9iLlAxXzIgMHguYV9iY1AxX19fMjNkIDB4YV9iYy5kZV9mUDFfMjM0RCIsCisgICAgICAgICAgICJET1VCTEVfTElURVJBTCAoJzB4YV9hcDEnKVxuV0hJVEVfU1BBQ0UgKCcgJylcbiIgKworICAgICAgICAgICAiRE9VQkxFX0xJVEVSQUwgKCcweGFfYi5QMV8yJylcbldISVRFX1NQQUNFICgnICcpXG4iICsKKyAgICAgICAgICAgIkRPVUJMRV9MSVRFUkFMICgnMHguYV9iY1AxX19fMjNkJylcbldISVRFX1NQQUNFICgnICcpXG4iICsKKyAgICAgICAgICAgIkRPVUJMRV9MSVRFUkFMICgnMHhhX2JjLmRlX2ZQMV8yMzREJykiKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RNYWxmb3JtZWRDb2luTGl0ZXJhbHMoKSB7CisgICAgZG9UZXN0KCIwXyBfMSAwXzggMHhfZiAwYl8xIDBCMiAweDEuMF9wLTEgMS4wZV8xMDIyIiwKKyAgICAgICAgICAgIklOVEVHRVJfTElURVJBTCAoJzAnKVxuSURFTlRJRklFUiAoJ18nKVxuV0hJVEVfU1BBQ0UgKCcgJylcbiIgKworICAgICAgICAgICAiSURFTlRJRklFUiAoJ18xJylcbldISVRFX1NQQUNFICgnICcpXG4iICsKKyAgICAgICAgICAgIklOVEVHRVJfTElURVJBTCAoJzAnKVxuSURFTlRJRklFUiAoJ184JylcbldISVRFX1NQQUNFICgnICcpXG4iICsKKyAgICAgICAgICAgIklOVEVHRVJfTElURVJBTCAoJzB4JylcbklERU5USUZJRVIgKCdfZicpXG5XSElURV9TUEFDRSAoJyAnKVxuIiArCisgICAgICAgICAgICJJTlRFR0VSX0xJVEVSQUwgKCcwYicpXG5JREVOVElGSUVSICgnXzEnKVxuV0hJVEVfU1BBQ0UgKCcgJylcbiIgKworICAgICAgICAgICAiSU5URUdFUl9MSVRFUkFMICgnMEInKVxuSU5URUdFUl9MSVRFUkFMICgnMicpXG5XSElURV9TUEFDRSAoJyAnKVxuIiArCisgICAgICAgICAgICJJTlRFR0VSX0xJVEVSQUwgKCcweDEnKVxuRE9VQkxFX0xJVEVSQUwgKCcuMCcpXG5JREVOVElGSUVSICgnX3AnKVxuTUlOVVMgKCctJylcbklOVEVHRVJfTElURVJBTCAoJzEnKVxuV0hJVEVfU1BBQ0UgKCcgJylcbiIgKworICAgICAgICAgICAiRE9VQkxFX0xJVEVSQUwgKCcxLjBlJylcbklERU5USUZJRVIgKCdfMTAyMicpIik7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0TWFsZm9ybWVkT3BlcmF0b3JzKCkgeworICAgIGRvVGVzdCgiKGkgPiA9IDApIiwKKyAgICAgICAgICAgIkxQQVJFTlRIICgnKCcpXG5JREVOVElGSUVSICgnaScpXG5XSElURV9TUEFDRSAoJyAnKVxuIiArCisgICAgICAgICAgICJHVCAoJz4nKVxuV0hJVEVfU1BBQ0UgKCcgJylcbkVRICgnPScpXG4iICsKKyAgICAgICAgICAgIldISVRFX1NQQUNFICgnICcpXG5JTlRFR0VSX0xJVEVSQUwgKCcwJylcblJQQVJFTlRIICgnKScpXG4iKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RKYXZhOFRva2VucygpIHsKKyAgICBkb1Rlc3QoIm5vbmUgOjogLT4iLAorICAgICAgICAgICAiSURFTlRJRklFUiAoJ25vbmUnKVxuV0hJVEVfU1BBQ0UgKCcgJylcbkRPVUJMRV9DT0xPTiAoJzo6JylcbldISVRFX1NQQUNFICgnICcpXG5BUlJPVyAoJy0+JykiKTsKKyAgfQorCisgIEBPdmVycmlkZQorICBwcm90ZWN0ZWQgTGV4ZXIgY3JlYXRlTGV4ZXIoKSB7CisgICAgcmV0dXJuIG5ldyBKYXZhTGV4ZXIoTGFuZ3VhZ2VMZXZlbC5ISUdIRVNUKTsKKyAgfQorCisgIEBPdmVycmlkZQorICBwcm90ZWN0ZWQgU3RyaW5nIGdldERpclBhdGgoKSB7CisgICAgcmV0dXJuICIiOworICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovbGFuZy9qYXZhL3BhcnNlci9Db21tb25KYXZhUGFyc2luZ1Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9sYW5nL2phdmEvcGFyc2VyL0NvbW1vbkphdmFQYXJzaW5nVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM4MDQ2OTkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovbGFuZy9qYXZhL3BhcnNlci9Db21tb25KYXZhUGFyc2luZ1Rlc3QuamF2YQpAQCAtMCwwICsxLDI5IEBACisvKgorICogQ29weXJpZ2h0IDIwMDAtMjAxMCBKZXRCcmFpbnMgcy5yLm8uCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworcGFja2FnZSBjb20uaW50ZWxsaWoubGFuZy5qYXZhLnBhcnNlcjsKKworcHVibGljIGNsYXNzIENvbW1vbkphdmFQYXJzaW5nVGVzdCBleHRlbmRzIEphdmFQYXJzaW5nVGVzdENhc2V7CisgIHB1YmxpYyBDb21tb25KYXZhUGFyc2luZ1Rlc3QoKSB7CisgICAgc3VwZXIoInBhcnNlci1mdWxsL2NvbW1vblBhcnNpbmciKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RTQ1I1MjAyKCkgeyBkb1Rlc3QodHJ1ZSk7IH0KKyAgcHVibGljIHZvaWQgdGVzdEluY29tcGxldGVDb2RlQmxvY2soKSB7IGRvVGVzdCh0cnVlKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0SW1wb3J0TGlzdEJ1ZygpIHsgZG9UZXN0KHRydWUpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RSZWZQYXJhbXNBZnRlckVycm9yKCkgeyBkb1Rlc3QodHJ1ZSk7IH0KKyAgcHVibGljIHZvaWQgdGVzdFVuY2xvc2VkQ29tbWVudCgpIHsgZG9UZXN0KHRydWUpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RJbmNvbXBsZXRlRm9yKCkgeyBkb1Rlc3QodHJ1ZSk7IH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovbGFuZy9qYXZhL3BhcnNlci9FeHByZXNzaW9uUGFyc2luZ1Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9sYW5nL2phdmEvcGFyc2VyL0V4cHJlc3Npb25QYXJzaW5nVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJiMDc3MTgKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovbGFuZy9qYXZhL3BhcnNlci9FeHByZXNzaW9uUGFyc2luZ1Rlc3QuamF2YQpAQCAtMCwwICsxLDExNCBAQAorLyoKKyAqIENvcHlyaWdodCAyMDAwLTIwMTIgSmV0QnJhaW5zIHMuci5vLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KK3BhY2thZ2UgY29tLmludGVsbGlqLmxhbmcuamF2YS5wYXJzZXI7CisKK3B1YmxpYyBjbGFzcyBFeHByZXNzaW9uUGFyc2luZ1Rlc3QgZXh0ZW5kcyBKYXZhUGFyc2luZ1Rlc3RDYXNlIHsKKyAgcHVibGljIEV4cHJlc3Npb25QYXJzaW5nVGVzdCgpIHsKKyAgICBzdXBlcigicGFyc2VyLWZ1bGwvZXhwcmVzc2lvblBhcnNpbmciKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RBc3NpZ25tZW50MCgpIHsgZG9UZXN0KHRydWUpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RBc3NpZ25tZW50MSgpIHsgZG9UZXN0KHRydWUpOyB9CisKKyAgcHVibGljIHZvaWQgdGVzdENvbmQwKCkgeyBkb1Rlc3QodHJ1ZSk7IH0KKyAgcHVibGljIHZvaWQgdGVzdENvbmQxKCkgeyBkb1Rlc3QodHJ1ZSk7IH0KKyAgcHVibGljIHZvaWQgdGVzdENvbmQyKCkgeyBkb1Rlc3QodHJ1ZSk7IH0KKyAgcHVibGljIHZvaWQgdGVzdENvbmQzKCkgeyBkb1Rlc3QodHJ1ZSk7IH0KKworICBwdWJsaWMgdm9pZCB0ZXN0Q29uZE9yMCgpIHsgZG9UZXN0KHRydWUpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RDb25kT3IxKCkgeyBkb1Rlc3QodHJ1ZSk7IH0KKworICBwdWJsaWMgdm9pZCB0ZXN0Q29uZEFuZDAoKSB7IGRvVGVzdCh0cnVlKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0Q29uZEFuZDEoKSB7IGRvVGVzdCh0cnVlKTsgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RPcjAoKSB7IGRvVGVzdCh0cnVlKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0T3IxKCkgeyBkb1Rlc3QodHJ1ZSk7IH0KKworICBwdWJsaWMgdm9pZCB0ZXN0WG9yMCgpIHsgZG9UZXN0KHRydWUpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RYb3IxKCkgeyBkb1Rlc3QodHJ1ZSk7IH0KKworICBwdWJsaWMgdm9pZCB0ZXN0QW5kMCgpIHsgZG9UZXN0KHRydWUpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RBbmQxKCkgeyBkb1Rlc3QodHJ1ZSk7IH0KKworICBwdWJsaWMgdm9pZCB0ZXN0SW5zdGFuY2VPZjAoKSB7IGRvVGVzdCh0cnVlKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0SW5zdGFuY2VPZjEoKSB7IGRvVGVzdCh0cnVlKTsgfQorCisgIHB1YmxpYyB2b2lkIHRlc3ROb3QwKCkgeyBkb1Rlc3QodHJ1ZSk7IH0KKyAgcHVibGljIHZvaWQgdGVzdE5vdDEoKSB7IGRvVGVzdCh0cnVlKTsgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RDYXN0MCgpIHsgZG9UZXN0KHRydWUpOyB9CisKKyAgcHVibGljIHZvaWQgdGVzdFBhcmVudGgoKSB7IGRvVGVzdCh0cnVlKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0UGFyZW50aDEoKSB7IGRvVGVzdCh0cnVlKTsgfQorCisgIHB1YmxpYyB2b2lkIHRlc3ROZXdJbkV4cHJMaXN0KCkgeyBkb1Rlc3QodHJ1ZSk7IH0KKworICBwdWJsaWMgdm9pZCB0ZXN0TmV3MCgpIHsgZG9UZXN0KHRydWUpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3ROZXcxKCkgeyBkb1Rlc3QodHJ1ZSk7IH0KKyAgcHVibGljIHZvaWQgdGVzdE5ldzIoKSB7IGRvVGVzdCh0cnVlKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0TmV3MygpIHsgZG9UZXN0KHRydWUpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3ROZXc0KCkgeyBkb1Rlc3QodHJ1ZSk7IH0KKyAgcHVibGljIHZvaWQgdGVzdE5ldzUoKSB7IGRvVGVzdCh0cnVlKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0TmV3NigpIHsgZG9UZXN0KHRydWUpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3ROZXc3KCkgeyBkb1Rlc3QodHJ1ZSk7IH0KKyAgcHVibGljIHZvaWQgdGVzdE5ldzgoKSB7IGRvVGVzdCh0cnVlKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0TmV3OSgpIHsgZG9UZXN0KHRydWUpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3ROZXcxMCgpIHsgZG9UZXN0KHRydWUpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3ROZXcxMSgpIHsgZG9UZXN0KHRydWUpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3ROZXcxMigpIHsgZG9UZXN0KHRydWUpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3ROZXcxMygpIHsgZG9UZXN0KHRydWUpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3ROZXcxNCgpIHsgZG9UZXN0KHRydWUpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3ROZXcxNSgpIHsgZG9UZXN0KHRydWUpOyB9CisKKyAgcHVibGljIHZvaWQgdGVzdEV4cHJMaXN0MCgpIHsgZG9UZXN0KHRydWUpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RFeHByTGlzdDEoKSB7IGRvVGVzdCh0cnVlKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0RXhwckxpc3QyKCkgeyBkb1Rlc3QodHJ1ZSk7IH0KKyAgcHVibGljIHZvaWQgdGVzdEV4cHJMaXN0MygpIHsgZG9UZXN0KHRydWUpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RFeHByTGlzdDQoKSB7IGRvVGVzdCh0cnVlKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0RXhwckxpc3Q1KCkgeyBkb1Rlc3QodHJ1ZSk7IH0KKyAgcHVibGljIHZvaWQgdGVzdEV4cHJMaXN0NigpIHsgZG9UZXN0KHRydWUpOyB9CisKKyAgcHVibGljIHZvaWQgdGVzdEFycmF5SW5pdGlhbGl6ZXIwKCkgeyBkb1Rlc3QodHJ1ZSk7IH0KKyAgcHVibGljIHZvaWQgdGVzdEFycmF5SW5pdGlhbGl6ZXIxKCkgeyBkb1Rlc3QodHJ1ZSk7IH0KKyAgcHVibGljIHZvaWQgdGVzdEFycmF5SW5pdGlhbGl6ZXIyKCkgeyBkb1Rlc3QodHJ1ZSk7IH0KKyAgcHVibGljIHZvaWQgdGVzdEFycmF5SW5pdGlhbGl6ZXIzKCkgeyBkb1Rlc3QodHJ1ZSk7IH0KKyAgcHVibGljIHZvaWQgdGVzdEFycmF5SW5pdGlhbGl6ZXI0KCkgeyBkb1Rlc3QodHJ1ZSk7IH0KKyAgcHVibGljIHZvaWQgdGVzdEFycmF5SW5pdGlhbGl6ZXI1KCkgeyBkb1Rlc3QodHJ1ZSk7IH0KKyAgcHVibGljIHZvaWQgdGVzdEFycmF5SW5pdGlhbGl6ZXI2KCkgeyBkb1Rlc3QodHJ1ZSk7IH0KKyAgcHVibGljIHZvaWQgdGVzdEFycmF5SW5pdGlhbGl6ZXI3KCkgeyBkb1Rlc3QodHJ1ZSk7IH0KKworICBwdWJsaWMgdm9pZCB0ZXN0UGluZXNJblJlZmVyZW5jZUV4cHJlc3Npb24wKCkgeyBkb1Rlc3QodHJ1ZSk7IH0KKyAgcHVibGljIHZvaWQgdGVzdFBpbmVzSW5SZWZlcmVuY2VFeHByZXNzaW9uMSgpIHsgZG9UZXN0KHRydWUpOyB9CisKKyAgcHVibGljIHZvaWQgdGVzdEdFKCkgeyBkb1Rlc3QodHJ1ZSk7IH0KKyAgcHVibGljIHZvaWQgdGVzdEluY29tcGxldGVDYXN0KCkgeyBkb1Rlc3QodHJ1ZSk7IH0KKyAgcHVibGljIHZvaWQgdGVzdFNoaWZ0UmlnaHQoKSB7IGRvVGVzdCh0cnVlKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0QW5vbnltb3VzRXJyb3JzKCkgeyBkb1Rlc3QodHJ1ZSk7IH0KKyAgcHVibGljIHZvaWQgdGVzdEFub255bW91c0Vycm9yczEoKSB7IGRvVGVzdCh0cnVlKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0QW5vbnltb3VzV2l0aFR5cGVQYXJhbXMoKSB7IGRvVGVzdCh0cnVlKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0QW5vbnltb3VzMigpIHsgZG9UZXN0KHRydWUpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RJbmNvbXBsZXRlRGVjbCgpIHsgZG9UZXN0KHRydWUpOyB9CisKKyAgcHVibGljIHZvaWQgdGVzdElsbGVnYWxXaWxkY2FyZCgpIHsgZG9UZXN0KHRydWUpOyB9CisKKyAgcHVibGljIHZvaWQgdGVzdFF1YWxpZmllZFN1cGVyTWV0aG9kQ2FsbCgpIHsgZG9UZXN0KHRydWUpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RRdWFsaWZpZWRTdXBlck1ldGhvZENhbGwxKCkgeyBkb1Rlc3QodHJ1ZSk7IH0KKyAgcHVibGljIHZvaWQgdGVzdFN1cGVyTWV0aG9kQ2FsbFR5cGVQYXJhbWV0ZXJMaXN0KCkgeyBkb1Rlc3QodHJ1ZSk7IH0KKworICBwdWJsaWMgdm9pZCB0ZXN0UHJpbWl0aXZlQ2xhc3NPYmplY3RBY2Nlc3MoKSB7IGRvVGVzdCh0cnVlKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0UHJpbWl0aXZlQ2xhc3NPYmplY3RBY2Nlc3NFcnJvcigpIHsgZG9UZXN0KHRydWUpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RQcmltaXRpdmVBcnJheUNsYXNzT2JqZWN0QWNjZXNzRXJyb3IoKSB7IGRvVGVzdCh0cnVlKTsgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9sYW5nL2phdmEvcGFyc2VyL0ltcG9ydFBhcnNpbmdUZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovbGFuZy9qYXZhL3BhcnNlci9JbXBvcnRQYXJzaW5nVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM5MzBhN2UKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovbGFuZy9qYXZhL3BhcnNlci9JbXBvcnRQYXJzaW5nVGVzdC5qYXZhCkBAIC0wLDAgKzEsMjkgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwMC0yMDEwIEpldEJyYWlucyBzLnIuby4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCitwYWNrYWdlIGNvbS5pbnRlbGxpai5sYW5nLmphdmEucGFyc2VyOworCitwdWJsaWMgY2xhc3MgSW1wb3J0UGFyc2luZ1Rlc3QgZXh0ZW5kcyBKYXZhUGFyc2luZ1Rlc3RDYXNleworICBwdWJsaWMgSW1wb3J0UGFyc2luZ1Rlc3QoKSB7CisgICAgc3VwZXIoInBhcnNlci1mdWxsL2ltcG9ydFBhcnNpbmciKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RVbmNsb3NlZDAoKSB7IGRvVGVzdCh0cnVlKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0VW5jbG9zZWQxKCkgeyBkb1Rlc3QodHJ1ZSk7IH0KKyAgcHVibGljIHZvaWQgdGVzdFVuY2xvc2VkMigpIHsgZG9UZXN0KHRydWUpOyB9CisgIAorICBwdWJsaWMgdm9pZCB0ZXN0U3RhdGljSW1wb3J0KCkgeyBkb1Rlc3QodHJ1ZSk7IH0KKyAgcHVibGljIHZvaWQgdGVzdFN0YXRpY0ltcG9ydDEoKSB7IGRvVGVzdCh0cnVlKTsgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9sYW5nL2phdmEvcGFyc2VyL0phdmFQYXJzaW5nVGVzdENhc2UuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9sYW5nL2phdmEvcGFyc2VyL0phdmFQYXJzaW5nVGVzdENhc2UuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMDdkN2QyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2xhbmcvamF2YS9wYXJzZXIvSmF2YVBhcnNpbmdUZXN0Q2FzZS5qYXZhCkBAIC0wLDAgKzEsMTM2IEBACisvKgorICogQ29weXJpZ2h0IDIwMDAtMjAxMiBKZXRCcmFpbnMgcy5yLm8uCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworcGFja2FnZSBjb20uaW50ZWxsaWoubGFuZy5qYXZhLnBhcnNlcjsKKworaW1wb3J0IGNvbS5pbnRlbGxpai5sYW5nLkFTVE5vZGU7CitpbXBvcnQgY29tLmludGVsbGlqLmxhbmcuTGFuZ3VhZ2VBU1RGYWN0b3J5OworaW1wb3J0IGNvbS5pbnRlbGxpai5sYW5nLlBzaUJ1aWxkZXI7CitpbXBvcnQgY29tLmludGVsbGlqLmxhbmcuamF2YS5KYXZhTGFuZ3VhZ2U7CitpbXBvcnQgY29tLmludGVsbGlqLmxhbmcuamF2YS5KYXZhUGFyc2VyRGVmaW5pdGlvbjsKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS5maWxlVHlwZXMuU3RkRmlsZVR5cGVzOworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLnJvb3RzLkxhbmd1YWdlTGV2ZWxQcm9qZWN0RXh0ZW5zaW9uOworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLnJvb3RzLmltcGwuTGFuZ3VhZ2VMZXZlbFByb2plY3RFeHRlbnNpb25JbXBsOworaW1wb3J0IGNvbS5pbnRlbGxpai5wb20uamF2YS5MYW5ndWFnZUxldmVsOworaW1wb3J0IGNvbS5pbnRlbGxpai5wc2kuRmlsZVZpZXdQcm92aWRlcjsKK2ltcG9ydCBjb20uaW50ZWxsaWoucHNpLlBzaUZpbGU7CitpbXBvcnQgY29tLmludGVsbGlqLnBzaS5Qc2lNYW5hZ2VyOworaW1wb3J0IGNvbS5pbnRlbGxpai5wc2kuU2luZ2xlUm9vdEZpbGVWaWV3UHJvdmlkZXI7CitpbXBvcnQgY29tLmludGVsbGlqLnBzaS5pbXBsLnNvdXJjZS5Qc2lKYXZhRmlsZUltcGw7CitpbXBvcnQgY29tLmludGVsbGlqLnBzaS5pbXBsLnNvdXJjZS50cmVlLkZpbGVFbGVtZW50OworaW1wb3J0IGNvbS5pbnRlbGxpai5wc2kuaW1wbC5zb3VyY2UudHJlZS5KYXZhQVNURmFjdG9yeTsKK2ltcG9ydCBjb20uaW50ZWxsaWoucHNpLnRyZWUuSUZpbGVFbGVtZW50VHlwZTsKK2ltcG9ydCBjb20uaW50ZWxsaWoucHNpLnV0aWwuUHNpVXRpbDsKK2ltcG9ydCBjb20uaW50ZWxsaWoudGVzdEZyYW1ld29yay5JZGVhVGVzdENhc2U7CitpbXBvcnQgY29tLmludGVsbGlqLnRlc3RGcmFtZXdvcmsuTGlnaHRWaXJ0dWFsRmlsZTsKK2ltcG9ydCBjb20uaW50ZWxsaWoudGVzdEZyYW1ld29yay5QYXJzaW5nVGVzdENhc2U7CitpbXBvcnQgb3JnLmpldGJyYWlucy5hbm5vdGF0aW9ucy5Ob25ObHM7CisKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworCitwdWJsaWMgYWJzdHJhY3QgY2xhc3MgSmF2YVBhcnNpbmdUZXN0Q2FzZSBleHRlbmRzIFBhcnNpbmdUZXN0Q2FzZSB7CisgIHByaXZhdGUgTGFuZ3VhZ2VMZXZlbCBteUxhbmd1YWdlTGV2ZWw7CisKKyAgQFN1cHByZXNzV2FybmluZ3MoeyJKVW5pdFRlc3RDYXNlV2l0aE5vblRyaXZpYWxDb25zdHJ1Y3RvcnMifSkKKyAgcHVibGljIEphdmFQYXJzaW5nVGVzdENhc2UoQE5vbk5scyBmaW5hbCBTdHJpbmcgZGF0YVBhdGgpIHsKKyAgICBzdXBlcigicHNpLyIrZGF0YVBhdGgsICJqYXZhIiwgbmV3IEphdmFQYXJzZXJEZWZpbml0aW9uKCkpOworICAgIElkZWFUZXN0Q2FzZS5pbml0UGxhdGZvcm1QcmVmaXgoKTsKKyAgfQorCisgIEBPdmVycmlkZQorICBwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24geworICAgIHN1cGVyLnNldFVwKCk7CisgICAgbXlMYW5ndWFnZUxldmVsID0gTGFuZ3VhZ2VMZXZlbC5KREtfMV82OworICAgIGdldFByb2plY3QoKS5yZWdpc3RlclNlcnZpY2UoTGFuZ3VhZ2VMZXZlbFByb2plY3RFeHRlbnNpb24uY2xhc3MsIG5ldyBMYW5ndWFnZUxldmVsUHJvamVjdEV4dGVuc2lvbkltcGwoZ2V0UHJvamVjdCgpKSk7CisgICAgYWRkRXhwbGljaXRFeHRlbnNpb24oTGFuZ3VhZ2VBU1RGYWN0b3J5LklOU1RBTkNFLCBKYXZhTGFuZ3VhZ2UuSU5TVEFOQ0UsIG5ldyBKYXZhQVNURmFjdG9yeSgpKTsKKyAgfQorCisgIEBPdmVycmlkZQorICBwcm90ZWN0ZWQgUHNpRmlsZSBjcmVhdGVGaWxlKFN0cmluZyBuYW1lLCBTdHJpbmcgdGV4dCkgeworICAgIGZpbmFsIFBzaUZpbGUgZmlsZSA9IHN1cGVyLmNyZWF0ZUZpbGUobmFtZSwgdGV4dCk7CisgICAgZmlsZS5wdXRVc2VyRGF0YShQc2lVdGlsLkZJTEVfTEFOR1VBR0VfTEVWRUxfS0VZLCBteUxhbmd1YWdlTGV2ZWwpOworICAgIHJldHVybiBmaWxlOworICB9CisKKyAgQE92ZXJyaWRlCisgIHByb3RlY3RlZCB2b2lkIHRlYXJEb3duKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgc3VwZXIudGVhckRvd24oKTsKKyAgfQorCisgIHByb3RlY3RlZCBpbnRlcmZhY2UgVGVzdFBhcnNlciB7CisgICAgdm9pZCBwYXJzZShQc2lCdWlsZGVyIGJ1aWxkZXIpOworICB9CisKKyAgcHJvdGVjdGVkIHZvaWQgZG9QYXJzZXJUZXN0KGZpbmFsIFN0cmluZyB0ZXh0LCBmaW5hbCBUZXN0UGFyc2VyIHBhcnNlcikgeworICAgIGZpbmFsIFN0cmluZyBuYW1lID0gZ2V0VGVzdE5hbWUoZmFsc2UpOworICAgIG15RmlsZSA9IGNyZWF0ZVBzaUZpbGUobmFtZSwgdGV4dCwgcGFyc2VyKTsKKyAgICBteUZpbGUucHV0VXNlckRhdGEoUHNpVXRpbC5GSUxFX0xBTkdVQUdFX0xFVkVMX0tFWSwgbXlMYW5ndWFnZUxldmVsKTsKKyAgICB0cnkgeworICAgICAgY2hlY2tSZXN1bHQobmFtZSwgbXlGaWxlKTsKKyAgICB9CisgICAgY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKyAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKGUpOworICAgIH0KKyAgfQorCisgIHByaXZhdGUgc3RhdGljIElGaWxlRWxlbWVudFR5cGUgVEVTVF9GSUxFX0VMRU1FTlRfVFlQRSA9IG51bGw7CisgIHByaXZhdGUgc3RhdGljIFRlc3RQYXJzZXIgVEVTVF9QQVJTRVI7CisKKyAgcHJpdmF0ZSBQc2lGaWxlIGNyZWF0ZVBzaUZpbGUoZmluYWwgU3RyaW5nIG5hbWUsIGZpbmFsIFN0cmluZyB0ZXh0LCBmaW5hbCBUZXN0UGFyc2VyIHBhcnNlcikgeworICAgIGlmIChURVNUX0ZJTEVfRUxFTUVOVF9UWVBFID09IG51bGwpIHsKKyAgICAgIFRFU1RfRklMRV9FTEVNRU5UX1RZUEUgPSBuZXcgTXlJRmlsZUVsZW1lbnRUeXBlKCk7CisgICAgfQorCisgICAgVEVTVF9QQVJTRVIgPSBwYXJzZXI7CisKKyAgICBmaW5hbCBMaWdodFZpcnR1YWxGaWxlIHZpcnR1YWxGaWxlID0gbmV3IExpZ2h0VmlydHVhbEZpbGUobmFtZSArICcuJyArIG15RmlsZUV4dCwgU3RkRmlsZVR5cGVzLkpBVkEsIHRleHQsIC0xKTsKKyAgICBmaW5hbCBGaWxlVmlld1Byb3ZpZGVyIHZpZXdQcm92aWRlciA9IG5ldyBTaW5nbGVSb290RmlsZVZpZXdQcm92aWRlcihQc2lNYW5hZ2VyLmdldEluc3RhbmNlKGdldFByb2plY3QoKSksIHZpcnR1YWxGaWxlLCB0cnVlKTsKKyAgICByZXR1cm4gbmV3IFBzaUphdmFGaWxlSW1wbCh2aWV3UHJvdmlkZXIpIHsKKyAgICAgIEBPdmVycmlkZQorICAgICAgcHJvdGVjdGVkIEZpbGVFbGVtZW50IGNyZWF0ZUZpbGVFbGVtZW50KGZpbmFsIENoYXJTZXF1ZW5jZSB0ZXh0KSB7CisgICAgICAgIHJldHVybiBuZXcgRmlsZUVsZW1lbnQoVEVTVF9GSUxFX0VMRU1FTlRfVFlQRSwgdGV4dCk7CisgICAgICB9CisgICAgfTsKKyAgfQorCisgIHByaXZhdGUgc3RhdGljIFBzaUJ1aWxkZXIgY3JlYXRlQnVpbGRlcihmaW5hbCBBU1ROb2RlIGNoYW1lbGVvbikgeworICAgIGZpbmFsIFBzaUJ1aWxkZXIgYnVpbGRlciA9IEphdmFQYXJzZXJVdGlsLmNyZWF0ZUJ1aWxkZXIoY2hhbWVsZW9uKTsKKyAgICBidWlsZGVyLnNldERlYnVnTW9kZSh0cnVlKTsKKyAgICByZXR1cm4gYnVpbGRlcjsKKyAgfQorCisgIHByaXZhdGUgc3RhdGljIGNsYXNzIE15SUZpbGVFbGVtZW50VHlwZSBleHRlbmRzIElGaWxlRWxlbWVudFR5cGUgeworICAgIHB1YmxpYyBNeUlGaWxlRWxlbWVudFR5cGUoKSB7CisgICAgICBzdXBlcigidGVzdC5qYXZhLmZpbGUiLCBKYXZhTGFuZ3VhZ2UuSU5TVEFOQ0UpOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyBBU1ROb2RlIHBhcnNlQ29udGVudHMoZmluYWwgQVNUTm9kZSBjaGFtZWxlb24pIHsKKyAgICAgIGZpbmFsIFBzaUJ1aWxkZXIgYnVpbGRlciA9IGNyZWF0ZUJ1aWxkZXIoY2hhbWVsZW9uKTsKKworICAgICAgZmluYWwgUHNpQnVpbGRlci5NYXJrZXIgcm9vdCA9IGJ1aWxkZXIubWFyaygpOworICAgICAgVEVTVF9QQVJTRVIucGFyc2UoYnVpbGRlcik7CisgICAgICBpZiAoIWJ1aWxkZXIuZW9mKCkpIHsKKyAgICAgICAgZmluYWwgUHNpQnVpbGRlci5NYXJrZXIgdW5wYXJzZWQgPSBidWlsZGVyLm1hcmsoKTsKKyAgICAgICAgd2hpbGUgKCFidWlsZGVyLmVvZigpKSBidWlsZGVyLmFkdmFuY2VMZXhlcigpOworICAgICAgICB1bnBhcnNlZC5lcnJvcigiVW5wYXJzZWQgdG9rZW5zIik7CisgICAgICB9CisgICAgICByb290LmRvbmUodGhpcyk7CisKKyAgICAgIGZpbmFsIEFTVE5vZGUgcm9vdE5vZGUgPSBidWlsZGVyLmdldFRyZWVCdWlsdCgpOworICAgICAgcmV0dXJuIHJvb3ROb2RlLmdldEZpcnN0Q2hpbGROb2RlKCk7CisgICAgfQorICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovbGFuZy9qYXZhL3BhcnNlci9KYXZhZG9jUGFyc2luZ1Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9sYW5nL2phdmEvcGFyc2VyL0phdmFkb2NQYXJzaW5nVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJkMDQzMmIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovbGFuZy9qYXZhL3BhcnNlci9KYXZhZG9jUGFyc2luZ1Rlc3QuamF2YQpAQCAtMCwwICsxLDg1IEBACisvKgorICogQ29weXJpZ2h0IDIwMDAtMjAxMSBKZXRCcmFpbnMgcy5yLm8uCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworcGFja2FnZSBjb20uaW50ZWxsaWoubGFuZy5qYXZhLnBhcnNlcjsKKworcHVibGljIGNsYXNzIEphdmFkb2NQYXJzaW5nVGVzdCBleHRlbmRzIEphdmFQYXJzaW5nVGVzdENhc2UgeworICBwdWJsaWMgSmF2YWRvY1BhcnNpbmdUZXN0KCkgeworICAgIHN1cGVyKCJwYXJzZXItZnVsbC9qYXZhZG9jUGFyc2luZyIpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEphdmFkb2MwKCkgeyBkb1Rlc3QodHJ1ZSk7IH0KKyAgcHVibGljIHZvaWQgdGVzdEphdmFkb2MxKCkgeyBkb1Rlc3QodHJ1ZSk7IH0KKworICBwdWJsaWMgdm9pZCB0ZXN0VGFnMCgpIHsgZG9UZXN0KHRydWUpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RUYWcxKCkgeyBkb1Rlc3QodHJ1ZSk7IH0KKyAgcHVibGljIHZvaWQgdGVzdFRhZzIoKSB7IGRvVGVzdCh0cnVlKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0VGFnMygpIHsgZG9UZXN0KHRydWUpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RUYWc0KCkgeyBkb1Rlc3QodHJ1ZSk7IH0KKyAgcHVibGljIHZvaWQgdGVzdFRhZzUoKSB7IGRvVGVzdCh0cnVlKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0SW5saW5lVGFnMCgpIHsgZG9UZXN0KHRydWUpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RJbmxpbmVUYWcxKCkgeyBkb1Rlc3QodHJ1ZSk7IH0KKyAgcHVibGljIHZvaWQgdGVzdElubGluZVRhZzIoKSB7IGRvVGVzdCh0cnVlKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0SW5saW5lVGFnMygpIHsgZG9UZXN0KHRydWUpOyB9CisKKyAgcHVibGljIHZvaWQgdGVzdFNlZVRhZzAoKSB7IGRvVGVzdCh0cnVlKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0U2VlVGFnMSgpIHsgZG9UZXN0KHRydWUpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RTZWVUYWcyKCkgeyBkb1Rlc3QodHJ1ZSk7IH0KKyAgcHVibGljIHZvaWQgdGVzdFNlZVRhZzMoKSB7IGRvVGVzdCh0cnVlKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0U2VlVGFnNCgpIHsgZG9UZXN0KHRydWUpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RTZWVUYWc1KCkgeyBkb1Rlc3QodHJ1ZSk7IH0KKyAgcHVibGljIHZvaWQgdGVzdFNlZVRhZzYoKSB7IGRvVGVzdCh0cnVlKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0U2VlVGFnNygpIHsgZG9UZXN0KHRydWUpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RTZWVUYWc4KCkgeyBkb1Rlc3QodHJ1ZSk7IH0KKyAgcHVibGljIHZvaWQgdGVzdFNlZVRhZzkoKSB7IGRvVGVzdCh0cnVlKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0U2VlVGFnMTAoKSB7IGRvVGVzdCh0cnVlKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0U2VlVGFnMTEoKSB7IGRvVGVzdCh0cnVlKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0U2VlVGFnMTIoKSB7IGRvVGVzdCh0cnVlKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0U2VlVGFnMTMoKSB7IGRvVGVzdCh0cnVlKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0U2VlVGFnMTQoKSB7IGRvVGVzdCh0cnVlKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0U2VlVGFnMTUoKSB7IGRvVGVzdCh0cnVlKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0U2VlVGFnMTYoKSB7IGRvVGVzdCh0cnVlKTsgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RMaW5rVGFnMCgpIHsgZG9UZXN0KHRydWUpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RMaW5rVGFnMSgpIHsgZG9UZXN0KHRydWUpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RMaW5rVGFnMigpIHsgZG9UZXN0KHRydWUpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RMaW5rVGFnMygpIHsgZG9UZXN0KHRydWUpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RMaW5rVGFnNCgpIHsgZG9UZXN0KHRydWUpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RMaW5rVGFnNSgpIHsgZG9UZXN0KHRydWUpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RMaW5rVGFnNigpIHsgZG9UZXN0KHRydWUpOyB9CisKKyAgcHVibGljIHZvaWQgdGVzdFBhcmFtVGFnMCgpIHsgZG9UZXN0KHRydWUpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RQYXJhbVRhZzEoKSB7IGRvVGVzdCh0cnVlKTsgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RMaW5rUGxhaW5UYWcwKCkgeyBkb1Rlc3QodHJ1ZSk7IH0KKyAgcHVibGljIHZvaWQgdGVzdExpbmtQbGFpblRhZzEoKSB7IGRvVGVzdCh0cnVlKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0TGlua1BsYWluVGFnMigpIHsgZG9UZXN0KHRydWUpOyB9CisKKyAgcHVibGljIHZvaWQgdGVzdEV4Y2VwdGlvbjAoKSB7IGRvVGVzdCh0cnVlKTsgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RTeW1ib2xzMDEoKSB7IGRvVGVzdCh0cnVlKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0U3ltYm9sczAyKCkgeyBkb1Rlc3QodHJ1ZSk7IH0KKyAgcHVibGljIHZvaWQgdGVzdFN5bWJvbHMwMygpIHsgZG9UZXN0KHRydWUpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RTeW1ib2xzMDQoKSB7IGRvVGVzdCh0cnVlKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0U3ltYm9sczA1KCkgeyBkb1Rlc3QodHJ1ZSk7IH0KKworICBwdWJsaWMgdm9pZCB0ZXN0QWRqYWNlbnQwMSgpIHsgZG9UZXN0KHRydWUpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RTZXBhcmF0ZWQwMSgpIHsgZG9UZXN0KHRydWUpOyB9CisKKyAgcHVibGljIHZvaWQgdGVzdFR5cGVQYXJhbSgpIHsgZG9UZXN0KHRydWUpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RQYXJhbWV0ZXJsZXNzVGFnKCkgeyBkb1Rlc3QodHJ1ZSk7IH0KKyAgCisgIHB1YmxpYyB2b2lkIHRlc3RJREVBREVWXzQxNDAzKCkge2RvVGVzdCh0cnVlKTt9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovbGFuZy9qYXZhL3BhcnNlci9hbm5vdGF0aW9uUGFyc2luZy9Bbm5vdGF0aW9uRGVjbGFyYXRpb25QYXJzaW5nVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2xhbmcvamF2YS9wYXJzZXIvYW5ub3RhdGlvblBhcnNpbmcvQW5ub3RhdGlvbkRlY2xhcmF0aW9uUGFyc2luZ1Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MDA4ZTVmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2xhbmcvamF2YS9wYXJzZXIvYW5ub3RhdGlvblBhcnNpbmcvQW5ub3RhdGlvbkRlY2xhcmF0aW9uUGFyc2luZ1Rlc3QuamF2YQpAQCAtMCwwICsxLDMzIEBACisvKgorICogQ29weXJpZ2h0IDIwMDAtMjAxMiBKZXRCcmFpbnMgcy5yLm8uCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworcGFja2FnZSBjb20uaW50ZWxsaWoubGFuZy5qYXZhLnBhcnNlci5hbm5vdGF0aW9uUGFyc2luZzsKKworaW1wb3J0IGNvbS5pbnRlbGxpai5sYW5nLmphdmEucGFyc2VyLkphdmFQYXJzaW5nVGVzdENhc2U7CisKKy8qKgorICogQGF1dGhvciB2ZW4KKyAqLworcHVibGljIGNsYXNzIEFubm90YXRpb25EZWNsYXJhdGlvblBhcnNpbmdUZXN0IGV4dGVuZHMgSmF2YVBhcnNpbmdUZXN0Q2FzZSB7CisgIHB1YmxpYyBBbm5vdGF0aW9uRGVjbGFyYXRpb25QYXJzaW5nVGVzdCgpIHsKKyAgICBzdXBlcigicGFyc2VyLWZ1bGwvYW5ub3RhdGlvblBhcnNpbmcvZGVjbGFyYXRpb24iKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RTaW1wbGUoKSB7IGRvVGVzdCh0cnVlKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0RGVmYXVsdCgpIHsgZG9UZXN0KHRydWUpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3ROZXN0ZWQoKSB7IGRvVGVzdCh0cnVlKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0SW5uZXIoKSB7IGRvVGVzdCh0cnVlKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0T3RoZXJNZW1iZXJzKCkgeyBkb1Rlc3QodHJ1ZSk7IH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9sYW5nL2phdmEvcGFyc2VyL2Fubm90YXRpb25QYXJzaW5nL0Fubm90YXRpb25QYXJzaW5nVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2xhbmcvamF2YS9wYXJzZXIvYW5ub3RhdGlvblBhcnNpbmcvQW5ub3RhdGlvblBhcnNpbmdUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2EyNDY4MgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9sYW5nL2phdmEvcGFyc2VyL2Fubm90YXRpb25QYXJzaW5nL0Fubm90YXRpb25QYXJzaW5nVGVzdC5qYXZhCkBAIC0wLDAgKzEsNDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwMC0yMDEyIEpldEJyYWlucyBzLnIuby4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCitwYWNrYWdlIGNvbS5pbnRlbGxpai5sYW5nLmphdmEucGFyc2VyLmFubm90YXRpb25QYXJzaW5nOworCitpbXBvcnQgY29tLmludGVsbGlqLmxhbmcuamF2YS5wYXJzZXIuSmF2YVBhcnNpbmdUZXN0Q2FzZTsKKworLyoqCisgKiBAYXV0aG9yIHZlbgorICovCitwdWJsaWMgY2xhc3MgQW5ub3RhdGlvblBhcnNpbmdUZXN0IGV4dGVuZHMgSmF2YVBhcnNpbmdUZXN0Q2FzZSB7CisgIHB1YmxpYyBBbm5vdGF0aW9uUGFyc2luZ1Rlc3QoKSB7CisgICAgc3VwZXIoInBhcnNlci1mdWxsL2Fubm90YXRpb25QYXJzaW5nL2Fubm90YXRpb24iKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RNYXJrZXIoKSB7IGRvVGVzdCh0cnVlKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0U2ltcGxlMSgpIHsgZG9UZXN0KHRydWUpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RTaW1wbGUyKCkgeyBkb1Rlc3QodHJ1ZSk7IH0KKyAgcHVibGljIHZvaWQgdGVzdENvbXBsZXgoKSB7IGRvVGVzdCh0cnVlKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0TXVsdGlwbGUoKSB7IGRvVGVzdCh0cnVlKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0QXJyYXkoKSB7IGRvVGVzdCh0cnVlKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0TmVzdGVkKCkgeyBkb1Rlc3QodHJ1ZSk7IH0KKyAgcHVibGljIHZvaWQgdGVzdFBhcmFtZXRlckFubm90YXRpb24gKCkgeyBkb1Rlc3QodHJ1ZSk7IH0KKyAgcHVibGljIHZvaWQgdGVzdFBhY2thZ2VBbm5vdGF0aW9uICgpIHsgZG9UZXN0KHRydWUpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RQYXJhbWV0ZXJpemVkTWV0aG9kICgpIHsgZG9UZXN0KHRydWUpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RRdWFsaWZpZWRBbm5vdGF0aW9uKCkgeyBkb1Rlc3QodHJ1ZSk7IH0KKyAgcHVibGljIHZvaWQgdGVzdEVudW1TbWFydFR5cGVDb21wbGV0aW9uKCkgeyBkb1Rlc3QodHJ1ZSk7IH0KKyAgcHVibGljIHZvaWQgdGVzdEVycm9ycygpIHsgZG9UZXN0KHRydWUpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RUeXBlQW5ubygpIHsgZG9UZXN0KHRydWUpOyB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovbGFuZy9qYXZhL3BhcnNlci9kZWNsYXJhdGlvblBhcnNpbmcvQ2xhc3NQYXJzaW5nVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2xhbmcvamF2YS9wYXJzZXIvZGVjbGFyYXRpb25QYXJzaW5nL0NsYXNzUGFyc2luZ1Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNGNmMmJjCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2xhbmcvamF2YS9wYXJzZXIvZGVjbGFyYXRpb25QYXJzaW5nL0NsYXNzUGFyc2luZ1Rlc3QuamF2YQpAQCAtMCwwICsxLDU5IEBACisvKgorICogQ29weXJpZ2h0IDIwMDAtMjAxMiBKZXRCcmFpbnMgcy5yLm8uCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworcGFja2FnZSBjb20uaW50ZWxsaWoubGFuZy5qYXZhLnBhcnNlci5kZWNsYXJhdGlvblBhcnNpbmc7CisKK2ltcG9ydCBjb20uaW50ZWxsaWoubGFuZy5qYXZhLnBhcnNlci5KYXZhUGFyc2luZ1Rlc3RDYXNlOworCitwdWJsaWMgY2xhc3MgQ2xhc3NQYXJzaW5nVGVzdCBleHRlbmRzIEphdmFQYXJzaW5nVGVzdENhc2UgeworICBwdWJsaWMgQ2xhc3NQYXJzaW5nVGVzdCgpIHsKKyAgICBzdXBlcigicGFyc2VyLWZ1bGwvZGVjbGFyYXRpb25QYXJzaW5nL2NsYXNzIik7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0Tm9DbGFzcygpIHsgZG9UZXN0KHRydWUpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3ROb1R5cGUoKSB7IGRvVGVzdCh0cnVlKTsgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RTZW1pY29sb24oKSB7IGRvVGVzdCh0cnVlKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0U2VtaWNvbG9uMigpIHsgZG9UZXN0KHRydWUpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RQYXJhbWV0cml6ZWRDbGFzcygpIHsgZG9UZXN0KHRydWUpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RQaW5lcygpIHsgZG9UZXN0KHRydWUpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RGb3JFcnJvcigpIHsgZG9UZXN0KHRydWUpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RFbnVtMSgpIHsgZG9UZXN0KHRydWUpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RFbnVtMigpIHsgZG9UZXN0KHRydWUpOyB9CisKKyAgcHVibGljIHZvaWQgdGVzdEVudW1XaXRoQ29uc3RhbnRzMSgpIHsgZG9UZXN0KHRydWUpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RFbnVtV2l0aENvbnN0YW50czIoKSB7IGRvVGVzdCh0cnVlKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0RW51bVdpdGhDb25zdGFudHMzKCkgeyBkb1Rlc3QodHJ1ZSk7IH0KKyAgcHVibGljIHZvaWQgdGVzdEVudW1XaXRoQ29uc3RhbnRzNCgpIHsgZG9UZXN0KHRydWUpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RFbnVtV2l0aENvbnN0YW50czUoKSB7IGRvVGVzdCh0cnVlKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0RW51bVdpdGhDb25zdGFudHM2KCkgeyBkb1Rlc3QodHJ1ZSk7IH0KKyAgcHVibGljIHZvaWQgdGVzdEVudW1XaXRoSW5pdGlhbGl6ZWRDb25zdGFudHMoKSB7IGRvVGVzdCh0cnVlKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0RW51bVdpdGhBbm5vdGF0ZWRDb25zdGFudHMoKSB7IGRvVGVzdCh0cnVlKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0RW51bVdpdGhJbXBvcnQoKSB7IGRvVGVzdCh0cnVlKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0RW51bVdpdGhvdXRDb25zdGFudHMoKSB7IGRvVGVzdCh0cnVlKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0RW1wdHlJbXBvcnRMaXN0KCkgeyBkb1Rlc3QodHJ1ZSk7IH0KKyAgcHVibGljIHZvaWQgdGVzdExvbmdDbGFzcygpIHsgZG9UZXN0KGZhbHNlKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0SW5jb21wbGV0ZUFubm90YXRpb24oKSB7IGRvVGVzdCh0cnVlKTsgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RFeHRyYU9wZW5pbmdCcmFjZUluTWV0aG9kKCkgeyBkb1Rlc3QodHJ1ZSk7IH0KKyAgcHVibGljIHZvaWQgdGVzdEV4dHJhQ2xvc2luZ0JyYWNlSW5NZXRob2QoKSB7IGRvVGVzdCh0cnVlKTsgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RFcnJvcnMwKCkgeyBkb1Rlc3QodHJ1ZSk7IH0KKyAgcHVibGljIHZvaWQgdGVzdEVycm9yczEoKSB7IGRvVGVzdCh0cnVlKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0RXJyb3JzMigpIHsgZG9UZXN0KHRydWUpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RFcnJvcnMzKCkgeyBkb1Rlc3QodHJ1ZSk7IH0KKyAgcHVibGljIHZvaWQgdGVzdEVycm9yczQoKSB7IGRvVGVzdCh0cnVlKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0RXJyb3JzNSgpIHsgZG9UZXN0KHRydWUpOyB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovbGFuZy9qYXZhL3BhcnNlci9kZWNsYXJhdGlvblBhcnNpbmcvQ29tbWVudEJpbmRpbmdUZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovbGFuZy9qYXZhL3BhcnNlci9kZWNsYXJhdGlvblBhcnNpbmcvQ29tbWVudEJpbmRpbmdUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODdlODc3NgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9sYW5nL2phdmEvcGFyc2VyL2RlY2xhcmF0aW9uUGFyc2luZy9Db21tZW50QmluZGluZ1Rlc3QuamF2YQpAQCAtMCwwICsxLDM4IEBACisvKgorICogQ29weXJpZ2h0IDIwMDAtMjAxMiBKZXRCcmFpbnMgcy5yLm8uCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworcGFja2FnZSBjb20uaW50ZWxsaWoubGFuZy5qYXZhLnBhcnNlci5kZWNsYXJhdGlvblBhcnNpbmc7CisKK2ltcG9ydCBjb20uaW50ZWxsaWoubGFuZy5qYXZhLnBhcnNlci5KYXZhUGFyc2luZ1Rlc3RDYXNlOworCitwdWJsaWMgY2xhc3MgQ29tbWVudEJpbmRpbmdUZXN0IGV4dGVuZHMgSmF2YVBhcnNpbmdUZXN0Q2FzZSB7CisgIHB1YmxpYyBDb21tZW50QmluZGluZ1Rlc3QoKSB7CisgICAgc3VwZXIoInBhcnNlci1mdWxsL2RlY2xhcmF0aW9uUGFyc2luZy9jb21tZW50QmluZGluZyIpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEJpbmRCZWZvcmUxKCkgeyBkb1Rlc3QodHJ1ZSk7IH0KKyAgcHVibGljIHZvaWQgdGVzdEJpbmRCZWZvcmUyKCkgeyBkb1Rlc3QodHJ1ZSk7IH0KKyAgcHVibGljIHZvaWQgdGVzdEJpbmRCZWZvcmUzKCkgeyBkb1Rlc3QodHJ1ZSk7IH0KKyAgcHVibGljIHZvaWQgdGVzdEJpbmRCZWZvcmUzYSgpIHsgZG9UZXN0KHRydWUpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RCaW5kQmVmb3JlNCgpIHsgZG9UZXN0KHRydWUpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RCaW5kQmVmb3JlNSgpIHsgZG9UZXN0KHRydWUpOyB9CisKKyAgcHVibGljIHZvaWQgdGVzdEJpbmRCZWZvcmVDbGFzczEoKSB7IGRvVGVzdCh0cnVlKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0QmluZEJlZm9yZUNsYXNzMigpIHsgZG9UZXN0KHRydWUpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RCaW5kQmVmb3JlQ2xhc3MzKCkgeyBkb1Rlc3QodHJ1ZSk7IH0KKyAgcHVibGljIHZvaWQgdGVzdEJpbmRCZWZvcmVDbGFzczQoKSB7IGRvVGVzdCh0cnVlKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0QmluZEJlZm9yZUNsYXNzNSgpIHsgZG9UZXN0KHRydWUpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RCaW5kQmVmb3JlQ2xhc3M2KCkgeyBkb1Rlc3QodHJ1ZSk7IH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovbGFuZy9qYXZhL3BhcnNlci9kZWNsYXJhdGlvblBhcnNpbmcvRmllbGRQYXJzaW5nVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2xhbmcvamF2YS9wYXJzZXIvZGVjbGFyYXRpb25QYXJzaW5nL0ZpZWxkUGFyc2luZ1Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOTk0M2Y1Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2xhbmcvamF2YS9wYXJzZXIvZGVjbGFyYXRpb25QYXJzaW5nL0ZpZWxkUGFyc2luZ1Rlc3QuamF2YQpAQCAtMCwwICsxLDQwIEBACisvKgorICogQ29weXJpZ2h0IDIwMDAtMjAxMiBKZXRCcmFpbnMgcy5yLm8uCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworcGFja2FnZSBjb20uaW50ZWxsaWoubGFuZy5qYXZhLnBhcnNlci5kZWNsYXJhdGlvblBhcnNpbmc7CisKK2ltcG9ydCBjb20uaW50ZWxsaWoubGFuZy5qYXZhLnBhcnNlci5KYXZhUGFyc2luZ1Rlc3RDYXNlOworCitwdWJsaWMgY2xhc3MgRmllbGRQYXJzaW5nVGVzdCBleHRlbmRzIEphdmFQYXJzaW5nVGVzdENhc2UgeworICBwdWJsaWMgRmllbGRQYXJzaW5nVGVzdCgpIHsKKyAgICBzdXBlcigicGFyc2VyLWZ1bGwvZGVjbGFyYXRpb25QYXJzaW5nL2ZpZWxkIik7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0U2ltcGxlKCkgeyBkb1Rlc3QodHJ1ZSk7IH0KKyAgcHVibGljIHZvaWQgdGVzdE11bHRpKCkgeyBkb1Rlc3QodHJ1ZSk7IH0KKworICBwdWJsaWMgdm9pZCB0ZXN0VW5jbG9zZWRCcmFja2V0KCkgeyBkb1Rlc3QodHJ1ZSk7IH0KKyAgcHVibGljIHZvaWQgdGVzdE1pc3NpbmdJbml0aWFsaXplcigpIHsgZG9UZXN0KHRydWUpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RVbmNsb3NlZENvbW1hKCkgeyBkb1Rlc3QodHJ1ZSk7IH0KKyAgcHVibGljIHZvaWQgdGVzdFVuY2xvc2VkU2VtaWNvbG9uKCkgeyBkb1Rlc3QodHJ1ZSk7IH0KKyAgcHVibGljIHZvaWQgdGVzdE1pc3NpbmdJbml0aWFsaXplckV4cHJlc3Npb24oKSB7IGRvVGVzdCh0cnVlKTsgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RNdWx0aUxpbmVVbmNsb3NlZDAoKSB7IGRvVGVzdCh0cnVlKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0TXVsdGlMaW5lVW5jbG9zZWQxKCkgeyBkb1Rlc3QodHJ1ZSk7IH0KKworICBwdWJsaWMgdm9pZCB0ZXN0Q29tcGxleEluaXRpYWxpemVyKCkgeyBkb1Rlc3QodHJ1ZSk7IH0KKworICBwdWJsaWMgdm9pZCB0ZXN0RXJyb3JzKCkgeyBkb1Rlc3QodHJ1ZSk7IH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovbGFuZy9qYXZhL3BhcnNlci9kZWNsYXJhdGlvblBhcnNpbmcvTWV0aG9kUGFyc2luZ1Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9sYW5nL2phdmEvcGFyc2VyL2RlY2xhcmF0aW9uUGFyc2luZy9NZXRob2RQYXJzaW5nVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY3ZDJkMTUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovbGFuZy9qYXZhL3BhcnNlci9kZWNsYXJhdGlvblBhcnNpbmcvTWV0aG9kUGFyc2luZ1Rlc3QuamF2YQpAQCAtMCwwICsxLDQ2IEBACisvKgorICogQ29weXJpZ2h0IDIwMDAtMjAxMiBKZXRCcmFpbnMgcy5yLm8uCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworcGFja2FnZSBjb20uaW50ZWxsaWoubGFuZy5qYXZhLnBhcnNlci5kZWNsYXJhdGlvblBhcnNpbmc7CisKK2ltcG9ydCBjb20uaW50ZWxsaWoubGFuZy5qYXZhLnBhcnNlci5KYXZhUGFyc2luZ1Rlc3RDYXNlOworCitwdWJsaWMgY2xhc3MgTWV0aG9kUGFyc2luZ1Rlc3QgZXh0ZW5kcyBKYXZhUGFyc2luZ1Rlc3RDYXNlIHsKKyAgcHVibGljIE1ldGhvZFBhcnNpbmdUZXN0KCkgeworICAgIHN1cGVyKCJwYXJzZXItZnVsbC9kZWNsYXJhdGlvblBhcnNpbmcvbWV0aG9kIik7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0Tm9ybWFsMSgpIHsgZG9UZXN0KHRydWUpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3ROb3JtYWwyKCkgeyBkb1Rlc3QodHJ1ZSk7IH0KKworICBwdWJsaWMgdm9pZCB0ZXN0VW5jbG9zZWQxKCkgeyBkb1Rlc3QodHJ1ZSk7IH0KKyAgcHVibGljIHZvaWQgdGVzdFVuY2xvc2VkMigpIHsgZG9UZXN0KHRydWUpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RVbmNsb3NlZDMoKSB7IGRvVGVzdCh0cnVlKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0VW5jbG9zZWQ0KCkgeyBkb1Rlc3QodHJ1ZSk7IH0KKyAgcHVibGljIHZvaWQgdGVzdFVuY2xvc2VkNSgpIHsgZG9UZXN0KHRydWUpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RVbmNsb3NlZDYoKSB7IGRvVGVzdCh0cnVlKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0R2VuZXJpY01ldGhvZCgpIHsgZG9UZXN0KHRydWUpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RHZW5lcmljTWV0aG9kRXJyb3JzKCkgeyBkb1Rlc3QodHJ1ZSk7IH0KKyAgcHVibGljIHZvaWQgdGVzdEVycm9yczAoKSB7IGRvVGVzdCh0cnVlKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0RXJyb3JzMSgpIHsgZG9UZXN0KHRydWUpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RFcnJvcnMyKCkgeyBkb1Rlc3QodHJ1ZSk7IH0KKyAgcHVibGljIHZvaWQgdGVzdEVycm9yczMoKSB7IGRvVGVzdCh0cnVlKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0Q29tcGxldGlvbkhhY2soKSB7IGRvVGVzdCh0cnVlKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0Q29tcGxldGlvbkhhY2sxKCkgeyBkb1Rlc3QodHJ1ZSk7IH0KKworICBwdWJsaWMgdm9pZCB0ZXN0Tm9Mb2NhbE1ldGhvZCgpIHsgZG9UZXN0KHRydWUpOyB9CisKKyAgcHVibGljIHZvaWQgdGVzdFdpbGRjYXJkUGFyc2luZygpIHsgZG9UZXN0KHRydWUpOyB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2xhbmcvamF2YS9wYXJzZXIvcGFydGlhbC9Bbm5vdGF0aW9uUGFyc2VyVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2xhbmcvamF2YS9wYXJzZXIvcGFydGlhbC9Bbm5vdGF0aW9uUGFyc2VyVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM2ZGIzNTYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovbGFuZy9qYXZhL3BhcnNlci9wYXJ0aWFsL0Fubm90YXRpb25QYXJzZXJUZXN0LmphdmEKQEAgLTAsMCArMSw1MSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDAwLTIwMTIgSmV0QnJhaW5zIHMuci5vLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KK3BhY2thZ2UgY29tLmludGVsbGlqLmxhbmcuamF2YS5wYXJzZXIucGFydGlhbDsKKworaW1wb3J0IGNvbS5pbnRlbGxpai5sYW5nLlBzaUJ1aWxkZXI7CitpbXBvcnQgY29tLmludGVsbGlqLmxhbmcuamF2YS5wYXJzZXIuSmF2YVBhcnNlcjsKK2ltcG9ydCBjb20uaW50ZWxsaWoubGFuZy5qYXZhLnBhcnNlci5KYXZhUGFyc2luZ1Rlc3RDYXNlOworCisKK3B1YmxpYyBjbGFzcyBBbm5vdGF0aW9uUGFyc2VyVGVzdCBleHRlbmRzIEphdmFQYXJzaW5nVGVzdENhc2UgeworICBwdWJsaWMgQW5ub3RhdGlvblBhcnNlclRlc3QoKSB7CisgICAgc3VwZXIoInBhcnNlci1wYXJ0aWFsL2Fubm90YXRpb25zIik7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0TWFya2VyKCkgeyBkb1BhcnNlclRlc3QoIkBQcmVsaW1pbmFyeSIpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RTaW1wbGUwKCkgeyBkb1BhcnNlclRlc3QoIkBDb3B5cmlnaHQoXCJibGEtYmxhLWJsYVwiKSIpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RTaW1wbGUxKCkgeyBkb1BhcnNlclRlc3QoIkBDb3B5cmlnaHQodHJlYXRlZEFzVmFsdWUpIik7IH0KKyAgcHVibGljIHZvaWQgdGVzdENvbXBsZXgoKSB7IGRvUGFyc2VyVGVzdCgiQEF1dGhvcihmaXJzdD1cIkV1Z2VuZVwiLCBzZWNvbmQ9XCJXYW1waXJjaGlrXCIpIik7IH0KKyAgcHVibGljIHZvaWQgdGVzdE11bHRpcGxlKCkgeyBkb1BhcnNlclRlc3QoIkBQcmVsaW1pbmFyeSBAT3RoZXIobmFtZT12YWx1ZSkiKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0QXJyYXkoKSB7IGRvUGFyc2VyVGVzdCgiQEVuZG9yc2Vycyh7XCJDaGlsZHJlblwiLCBcIlVuc2NydXB1bG91cyBkZW50aXN0c1wifSkiKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0TmVzdGVkKCkgeyBkb1BhcnNlclRlc3QoIkBBdXRob3IoQE5hbWUoZmlyc3Q9XCJFdWdlbmVcIiwgc2Vjb25kPVwiV2FtcGlyY2hpa1wiKSkiKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0UXVhbGlmaWVkQW5ub3RhdGlvbigpIHsgZG9QYXJzZXJUZXN0KCJAb3JnLmpldGJyYWlucy5hbm5vdGF0aW9ucy5OdWxsYWJsZSIpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RFeHRyYUNvbW1hSW5MaXN0KCkgeyBkb1BhcnNlclRlc3QoIkBBbm5vKHswLCAxLH0pIik7IH0KKworICBwdWJsaWMgdm9pZCB0ZXN0UGFyYW1ldGVyaXplZEFubm90YXRpb24gKCkgeyBkb1BhcnNlclRlc3QoIkBOdWxsYWJsZTxUPiIpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RGaXJzdE5hbWVNaXNzZWQoKSB7IGRvUGFyc2VyVGVzdCgiQEFubm8odmFsdWUxLCBwYXJhbTI9dmFsdWUyKSIpOyB9CisKKyAgcHJpdmF0ZSB2b2lkIGRvUGFyc2VyVGVzdChmaW5hbCBTdHJpbmcgdGV4dCkgeworICAgIGRvUGFyc2VyVGVzdCh0ZXh0LCBuZXcgTXlUZXN0UGFyc2VyMSgpKTsKKyAgfQorCisgIHByaXZhdGUgc3RhdGljIGNsYXNzIE15VGVzdFBhcnNlcjEgaW1wbGVtZW50cyBUZXN0UGFyc2VyIHsKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgdm9pZCBwYXJzZShmaW5hbCBQc2lCdWlsZGVyIGJ1aWxkZXIpIHsKKyAgICAgIEphdmFQYXJzZXIuSU5TVEFOQ0UuZ2V0RGVjbGFyYXRpb25QYXJzZXIoKS5wYXJzZUFubm90YXRpb25zKGJ1aWxkZXIpOworICAgIH0KKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2xhbmcvamF2YS9wYXJzZXIvcGFydGlhbC9EZWNsYXJhdGlvblBhcnNlclRlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9sYW5nL2phdmEvcGFyc2VyL3BhcnRpYWwvRGVjbGFyYXRpb25QYXJzZXJUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjc5ZDg2OAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9sYW5nL2phdmEvcGFyc2VyL3BhcnRpYWwvRGVjbGFyYXRpb25QYXJzZXJUZXN0LmphdmEKQEAgLTAsMCArMSwxMjUgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwMC0yMDEyIEpldEJyYWlucyBzLnIuby4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCitwYWNrYWdlIGNvbS5pbnRlbGxpai5sYW5nLmphdmEucGFyc2VyLnBhcnRpYWw7CisKK2ltcG9ydCBjb20uaW50ZWxsaWoubGFuZy5Qc2lCdWlsZGVyOworaW1wb3J0IGNvbS5pbnRlbGxpai5sYW5nLmphdmEucGFyc2VyLkphdmFQYXJzZXI7CitpbXBvcnQgY29tLmludGVsbGlqLmxhbmcuamF2YS5wYXJzZXIuSmF2YVBhcnNpbmdUZXN0Q2FzZTsKKworcHVibGljIGNsYXNzIERlY2xhcmF0aW9uUGFyc2VyVGVzdCBleHRlbmRzIEphdmFQYXJzaW5nVGVzdENhc2UgeworICBwdWJsaWMgRGVjbGFyYXRpb25QYXJzZXJUZXN0KCkgeworICAgIHN1cGVyKCJwYXJzZXItcGFydGlhbC9kZWNsYXJhdGlvbnMiKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RFbXB0eUJvZHkwKCkgeyBkb1BhcnNlclRlc3QoInsgfSIsIGZhbHNlLCBmYWxzZSk7IH0KKyAgcHVibGljIHZvaWQgdGVzdEVtcHR5Qm9keTEoKSB7IGRvUGFyc2VyVGVzdCgieyAiLCBmYWxzZSwgZmFsc2UpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RFbXB0eUJvZHkyKCkgeyBkb1BhcnNlclRlc3QoInsgQE51bGwgfSIsIGZhbHNlLCBmYWxzZSk7IH0KKworICBwdWJsaWMgdm9pZCB0ZXN0Tm9UeXBlKCkgeyBkb1BhcnNlclRlc3QoInsgbmV3IFgoKTsgfSIsIGZhbHNlLCBmYWxzZSk7IH0KKyAgcHVibGljIHZvaWQgdGVzdEV4dHJhU2VtaWNvbG9uKCkgeyBkb1BhcnNlclRlc3QoInsgY2xhc3MgQyB7IH07IH0iLCBmYWxzZSwgZmFsc2UpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RQYXJhbWV0ZXJpemVkQ2xhc3MoKSB7IGRvUGFyc2VyVGVzdCgieyBwdWJsaWMgY2xhc3MgQSA8VCBleHRlbmRzIGphdmEudXRpbC5MaXN0PiB7IH0gfSIsIGZhbHNlLCBmYWxzZSk7IH0KKyAgcHVibGljIHZvaWQgdGVzdFBpbmVzKCkgeyBkb1BhcnNlclRlc3QoInsgY2xhc3MgQTxUIGV4dGVuZHMgTGlzdDxTdHJpbmc+PiBleHRlbmRzIExpc3Q8TGlzdDxJbnRlZ2VyPj4geyB9IH0iLCBmYWxzZSwgZmFsc2UpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RJbmNvbXBsZXRlQW5ub3RhdGlvbigpIHsgZG9QYXJzZXJUZXN0KCJ7IHB1YmxpYyBjbGFzcyBGb28geyBwdWJsaWMgdm9pZCB0ZXN0U29tZXRoaW5nKCk7IEBOdWxsIH0gfSIsIGZhbHNlLCBmYWxzZSk7IH0KKyAgcHVibGljIHZvaWQgdGVzdENsYXNzSW5pdCgpIHsgZG9QYXJzZXJUZXN0KCJ7IHsgLypjb21tZW50Ki8gfSB9IiwgZmFsc2UsIGZhbHNlKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0QW5ub0RlY2xhcmF0aW9uKCkgeyBkb1BhcnNlclRlc3QoInsgcHVibGljIEBpbnRlcmZhY2UgQW5ub3RhdGlvbiB7fSB9IiwgZmFsc2UsIGZhbHNlKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0RW51bVNtYXJ0VHlwZUNvbXBsZXRpb24oKSB7IGRvUGFyc2VyVGVzdCgieyBAUHJlbGltaW5hcnkoQS5CXG4jKSBwdWJsaWMgY2xhc3MgVGltZVRyYXZlbCB7fVxuIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgIEBQcmVsaW1pbmFyeShhPUEuQlxuIykgcHVibGljIGNsYXNzIFRpbWVUcmF2ZWwge31cbiIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICBAUHJlbGltaW5hcnkoYT1BLkJcbiMsIGI9YykgcHVibGljIGNsYXNzIFRpbWVUcmF2ZWwge30gfSIsIGZhbHNlLCBmYWxzZSk7IH0KKyAgcHVibGljIHZvaWQgdGVzdFR5cGVBbm5vKCkgeworICAgIGRvUGFyc2VyVGVzdCgieyBjbGFzcyBDPEBEIFQgZXh0ZW5kcyBARiBPYmplY3Q+IGV4dGVuZHMgQEYgT2JqZWN0IHtcbiIgKworICAgICAgICAgICAgICAgICAiICBARiBpbnQgQEZbXSBtZXRob2QoKSB0aHJvd3MgQEYgRXhjZXB0aW9uIHtcbiIgKworICAgICAgICAgICAgICAgICAiICAgIGEgPSB0aGlzIGluc3RhbmNlb2YgQEYgQztcbiIgKworICAgICAgICAgICAgICAgICAiICAgIEM8QEYgQEcgQz4gYyA9IG5ldyBAUSBDPEBGIEM+KCk7XG4iICsKKyAgICAgICAgICAgICAgICAgIiAgICBjID0gKEBGIE9iamVjdCljO1xuIiArCisgICAgICAgICAgICAgICAgICIgICAgQ2xhc3MgYyA9IEBUQSBTdHJpbmcuY2xhc3M7XG4iICsKKyAgICAgICAgICAgICAgICAgIiAgICBARiBDLmZpZWxkKys7XG4iICsKKyAgICAgICAgICAgICAgICAgIiAgfVxufSB9IiwgZmFsc2UsIGZhbHNlKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RFbnVtQm9keTAoKSB7IGRvUGFyc2VyVGVzdCgieyA7IH0iLCBmYWxzZSwgdHJ1ZSk7IH0KKyAgcHVibGljIHZvaWQgdGVzdEVudW1Cb2R5MSgpIHsgZG9QYXJzZXJUZXN0KCJ7IFJFRCwgR1JFRU4sIEJMVUU7IH0iLCBmYWxzZSwgdHJ1ZSk7IH0KKyAgcHVibGljIHZvaWQgdGVzdEVudW1Cb2R5MigpIHsgZG9QYXJzZXJUZXN0KCJ7IFJFRCwgR1JFRU4sIEJMVUUgfSIsIGZhbHNlLCB0cnVlKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0RW51bUJvZHkzKCkgeyBkb1BhcnNlclRlc3QoInsgUkVELCBHUkVFTiwgQkxVRSwgfSIsIGZhbHNlLCB0cnVlKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0RW51bUJvZHk0KCkgeyBkb1BhcnNlclRlc3QoInsgUkVEKDApLCBHUkVFTigxKSwgQkxVRSgyKTsgfSIsIGZhbHNlLCB0cnVlKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0RW51bUJvZHk1KCkgeyBkb1BhcnNlclRlc3QoInsgQEFOTk9UQVRJT04gQSgxMCkgfSIsIGZhbHNlLCB0cnVlKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0RW51bUJvZHk2KCkgeyBkb1BhcnNlclRlc3QoInsgUkVELCBHUkVFTiwgQkxVRVxuIE91ckVudW0oKSB7fSB9IiwgZmFsc2UsIHRydWUpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RFbnVtV2l0aEluaXRpYWxpemVkQ29uc3RhbnRzKCkgeyBkb1BhcnNlclRlc3QoInsgQSgxMCkgeyB9LFxuIEIgeyB2b2lkIG1ldGhvZCgpIHt9IH0gfSIsIGZhbHNlLCB0cnVlKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0RW51bVdpdGhvdXRDb25zdGFudHMoKSB7IGRvUGFyc2VyVGVzdCgieyBwcml2YXRlIEEgfSIsIGZhbHNlLCB0cnVlKTsgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RBbm5vU2ltcGxlKCkgeyBkb1BhcnNlclRlc3QoInsgaW50IGZvbyAoKTsgfSIsIHRydWUsIGZhbHNlKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0QW5ub0RlZmF1bHQoKSB7IGRvUGFyc2VyVGVzdCgieyBDbGFzcyBmb28gKCkgZGVmYXVsdCBTdHJpbmcuY2xhc3M7IH0iLCB0cnVlLCBmYWxzZSk7IH0KKyAgcHVibGljIHZvaWQgdGVzdEFubm9OZXN0ZWQoKSB7IGRvUGFyc2VyVGVzdCgieyBAaW50ZXJmYWNlIElubmVyIHsgU3RyaW5nIGJhciAoKSBkZWZhdWx0IFwiPHVuc3BlY2lmaWVkPlwiOyB9IH0iLCB0cnVlLCBmYWxzZSk7IH0KKyAgcHVibGljIHZvaWQgdGVzdEFubm9Jbm5lcigpIHsgZG9QYXJzZXJUZXN0KCJ7IEBpbnRlcmZhY2UgSW5uZXIgeyBkb3VibGUgYmFyICgpIGRlZmF1bHQgMC4wOyB9IH0iLCBmYWxzZSwgZmFsc2UpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RBbm5vT3RoZXJNZW1iZXJzKCkgeyBkb1BhcnNlclRlc3QoInsgaW50IGZpZWxkO1xuIHZvaWQgbSgpIHt9XG4gY2xhc3MgQyB7fVxuIGludGVyZmFjZSBJIHt9IH0iLCB0cnVlLCBmYWxzZSk7IH0KKworICBwdWJsaWMgdm9pZCB0ZXN0RmllbGRTaW1wbGUoKSB7IGRvUGFyc2VyVGVzdCgieyBpbnQgZmllbGQgPSAwOyB9IiwgZmFsc2UsIGZhbHNlKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0RmllbGRNdWx0aSgpIHsgZG9QYXJzZXJUZXN0KCJ7IGludCBmaWVsZDEgPSAwLCBmaWVsZDI7IH0iLCBmYWxzZSwgZmFsc2UpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RVbmNsb3NlZEJyYWNrZXQoKSB7IGRvUGFyc2VyVGVzdCgieyBpbnQgZmllbGRbIH0iLCBmYWxzZSwgZmFsc2UpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RNaXNzaW5nSW5pdGlhbGl6ZXIoKSB7IGRvUGFyc2VyVGVzdCgieyBpbnQgZmllbGQgPSB9IiwgZmFsc2UsIGZhbHNlKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0VW5jbG9zZWRDb21tYSgpIHsgZG9QYXJzZXJUZXN0KCJ7IGludCBmaWVsZCwgfSIsIGZhbHNlLCBmYWxzZSk7IH0KKyAgcHVibGljIHZvaWQgdGVzdFVuY2xvc2VkU2VtaWNvbG9uKCkgeyBkb1BhcnNlclRlc3QoInsgaW50IGZpZWxkIH0iLCBmYWxzZSwgZmFsc2UpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RNaXNzaW5nSW5pdGlhbGl6ZXJFeHByZXNzaW9uKCkgeyBkb1BhcnNlclRlc3QoInsgaW50IGZpZWxkPTsgfSIsIGZhbHNlLCBmYWxzZSk7IH0KKyAgcHVibGljIHZvaWQgdGVzdE11bHRpTGluZVVuY2xvc2VkKCkgeyBkb1BhcnNlclRlc3QoInsgaW50IFxuIE9iamVjdCBvOyB9IiwgZmFsc2UsIGZhbHNlKTsgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RNZXRob2ROb3JtYWwwKCkgeyBkb1BhcnNlclRlc3QoInsgdm9pZCBmKCkge30gfSIsIGZhbHNlLCBmYWxzZSk7IH0KKyAgcHVibGljIHZvaWQgdGVzdE1ldGhvZE5vcm1hbDEoKSB7IGRvUGFyc2VyVGVzdCgieyB2b2lkIGYoKTsgfSIsIGZhbHNlLCBmYWxzZSk7IH0KKyAgcHVibGljIHZvaWQgdGVzdE1ldGhvZE5vcm1hbDIoKSB7IGRvUGFyc2VyVGVzdCgieyBkZWZhdWx0IHB1YmxpYyB2b2lkIGYoKSB7IH0gfSIsIGZhbHNlLCBmYWxzZSk7IH0KKyAgcHVibGljIHZvaWQgdGVzdFNlbWljb2xvbnMoKSB7IGRvUGFyc2VyVGVzdCgieyB2b2lkIGYoKSB7fTsgdm9pZCBnKCkge307IH0iLCBmYWxzZSwgZmFsc2UpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RVbmNsb3NlZDAoKSB7IGRvUGFyc2VyVGVzdCgieyB2b2lkIGYoKSB9IiwgZmFsc2UsIGZhbHNlKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0RXh0ZW5zaW9uKCkgeyBkb1BhcnNlclRlc3QoInsgaW50IGYoKSB0aHJvd3MgRSBkZWZhdWx0IHsgcmV0dXJuIDQyOyB9IH0iLCBmYWxzZSwgZmFsc2UpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RVbmNsb3NlZDEoKSB7IGRvUGFyc2VyVGVzdCgieyB2b2lkIGYoIH0iLCBmYWxzZSwgZmFsc2UpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RVbmNsb3NlZDIoKSB7IGRvUGFyc2VyVGVzdCgieyB2b2lkIGYoKVxuIHZvaWQgZygpOyB9IiwgZmFsc2UsIGZhbHNlKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0VW5jbG9zZWQzKCkgeyBkb1BhcnNlclRlc3QoInsgdm9pZCBmKGludCBhIH0iLCBmYWxzZSwgZmFsc2UpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RVbmNsb3NlZDQoKSB7IGRvUGFyc2VyVGVzdCgieyB2b2lkIGYoaW50IGEsLCB9IiwgZmFsc2UsIGZhbHNlKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0VW5jbG9zZWQ1KCkgeyBkb1BhcnNlclRlc3QoInsgdm9pZCBmKGludCBhLCk7IH0iLCBmYWxzZSwgZmFsc2UpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RVbmNsb3NlZDYoKSB7IGRvUGFyc2VyVGVzdCgieyB2b2lkIGYoKSBkZWZhdWx0IDsgfSIsIHRydWUsIGZhbHNlKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0VW5jbG9zZWQ3KCkgeyBkb1BhcnNlclRlc3QoInsgdm9pZCBmKCkgZGVmYXVsdCB7cmV0dXJuIDQyO30gfSIsIHRydWUsIGZhbHNlKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0VW5jbG9zZWQ4KCkgeyBkb1BhcnNlclRlc3QoInsgdm9pZCBmKCkgZGVmYXVsdCB9IiwgZmFsc2UsIGZhbHNlKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0VW5jbG9zZWQ5KCkgeyBkb1BhcnNlclRlc3QoInsgdm9pZCBmKCkgZGVmYXVsdCA7IH0iLCBmYWxzZSwgZmFsc2UpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RDb25zdHJ1Y3RvckJyYWNrZXRzKCkgeyBkb1BhcnNlclRlc3QoInsgQSgpIFtdIHsgfSB9IiwgZmFsc2UsIGZhbHNlKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0VmFyQXJnQnJhY2tldHMoKSB7IGRvUGFyc2VyVGVzdCgieyB2b2lkIGZvbyhpbnQuLi4geFtdKTsgfSIsIGZhbHNlLCBmYWxzZSk7IH0KKworICBwdWJsaWMgdm9pZCB0ZXN0R2VuZXJpY01ldGhvZCgpIHsgZG9QYXJzZXJUZXN0KCJ7IHB1YmxpYyBzdGF0aWMgPEU+IHRlc3QoKTtcbiIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgPEU+IHZvaWQgdGVzdDEoKTtcbiIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgPEUxIGV4dGVuZHMgSW50ZWdlciwgRTIgZXh0ZW5kcyBSdW5uYWJsZT4gU3RyaW5nIHRlc3QyKCk7IH0iLCBmYWxzZSwgZmFsc2UpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RHZW5lcmljTWV0aG9kRXJyb3JzKCkgeyBkb1BhcnNlclRlc3QoInsgPEVycm9yIHNzcyAvPiB0ZXN0IDxlcnJvcj4oKTsgfSIsIGZhbHNlLCBmYWxzZSk7IH0KKyAgcHVibGljIHZvaWQgdGVzdEVycm9ycygpIHsgZG9QYXJzZXJUZXN0KCJ7IHB1YmxpYyBzdGF0aWMgPGVycm9yIGRlc2NyPVwiMlwiPnByb3RlY3RlZCBpbnQgZjEgPSAwOyB9IiwgZmFsc2UsIGZhbHNlKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0Q29tcGxldGlvbkhhY2swKCkgeyBkb1BhcnNlclRlc3QoInsgPFggSW50ZWxsaUpJZGVhUnVsZXp6PlxuIFN0cmluZyBzID0gXCJcIjsgfSIsIGZhbHNlLCBmYWxzZSk7IH0KKyAgcHVibGljIHZvaWQgdGVzdENvbXBsZXRpb25IYWNrMSgpIHsgZG9QYXJzZXJUZXN0KCJ7IDxYXG4gU3RyaW5nIHMgPSBcIlwiOyB9IiwgZmFsc2UsIGZhbHNlKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0Q29tcGxldGlvbkhhY2syKCkgeyBkb1BhcnNlclRlc3QoInsgU3RyaW5nIGZvbygpIGRlZiB9IiwgdHJ1ZSwgZmFsc2UpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RXaWxkY2FyZFBhcnNpbmcoKSB7IGRvUGFyc2VyVGVzdCgieyBMaXN0PD8gZXh0ZW5kcyBCPiB4KENvbGxlY3Rpb248PyBzdXBlciBCPiB4KTsgfSIsIGZhbHNlLCBmYWxzZSk7IH0KKyAgcHVibGljIHZvaWQgdGVzdFBhcmFtZXRlckFubm90YXRpb24oKSB7IGRvUGFyc2VyVGVzdCgieyB2b2lkIGZvbyAoQEFubm90YXRpb24odmFsdWU9NzcpIGludCBwYXJhbSkge30gfSIsIGZhbHNlLCBmYWxzZSk7IH0KKyAgcHVibGljIHZvaWQgdGVzdFBhcmFtZXRlcml6ZWRNZXRob2QoKSB7IGRvUGFyc2VyVGVzdCgieyBATnVsbGFibGUgPFQ+IFQgYmFyKCkge30gfSIsIGZhbHNlLCBmYWxzZSk7IH0KKworICBwcml2YXRlIHZvaWQgZG9QYXJzZXJUZXN0KGZpbmFsIFN0cmluZyB0ZXh0LCBmaW5hbCBib29sZWFuIGlzQW5ub3RhdGlvbiwgZmluYWwgYm9vbGVhbiBpc0VudW0pIHsKKyAgICBkb1BhcnNlclRlc3QodGV4dCwgbmV3IE15VGVzdFBhcnNlcihpc0Fubm90YXRpb24sIGlzRW51bSkpOworICB9CisKKyAgcHJpdmF0ZSBzdGF0aWMgY2xhc3MgTXlUZXN0UGFyc2VyIGltcGxlbWVudHMgVGVzdFBhcnNlciB7CisgICAgcHJpdmF0ZSBmaW5hbCBib29sZWFuIG15QW5ub3RhdGlvbjsKKyAgICBwcml2YXRlIGZpbmFsIGJvb2xlYW4gbXlBbkVudW07CisKKyAgICBwdWJsaWMgTXlUZXN0UGFyc2VyKGJvb2xlYW4gYW5ub3RhdGlvbiwgYm9vbGVhbiBhbkVudW0pIHsKKyAgICAgIG15QW5ub3RhdGlvbiA9IGFubm90YXRpb247CisgICAgICBteUFuRW51bSA9IGFuRW51bTsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgdm9pZCBwYXJzZShmaW5hbCBQc2lCdWlsZGVyIGJ1aWxkZXIpIHsKKyAgICAgIEphdmFQYXJzZXIuSU5TVEFOQ0UuZ2V0RGVjbGFyYXRpb25QYXJzZXIoKS5wYXJzZUNsYXNzQm9keVdpdGhCcmFjZXMoYnVpbGRlciwgbXlBbm5vdGF0aW9uLCBteUFuRW51bSk7CisgICAgfQorICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovbGFuZy9qYXZhL3BhcnNlci9wYXJ0aWFsL0V4cHJlc3Npb25QYXJzZXJUZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovbGFuZy9qYXZhL3BhcnNlci9wYXJ0aWFsL0V4cHJlc3Npb25QYXJzZXJUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmJkNDBiMwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9sYW5nL2phdmEvcGFyc2VyL3BhcnRpYWwvRXhwcmVzc2lvblBhcnNlclRlc3QuamF2YQpAQCAtMCwwICsxLDE1NyBAQAorLyoKKyAqIENvcHlyaWdodCAyMDAwLTIwMTMgSmV0QnJhaW5zIHMuci5vLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KK3BhY2thZ2UgY29tLmludGVsbGlqLmxhbmcuamF2YS5wYXJzZXIucGFydGlhbDsKKworaW1wb3J0IGNvbS5pbnRlbGxpai5sYW5nLlBzaUJ1aWxkZXI7CitpbXBvcnQgY29tLmludGVsbGlqLmxhbmcuamF2YS5wYXJzZXIuSmF2YVBhcnNlcjsKK2ltcG9ydCBjb20uaW50ZWxsaWoubGFuZy5qYXZhLnBhcnNlci5KYXZhUGFyc2luZ1Rlc3RDYXNlOworaW1wb3J0IG9yZy5qZXRicmFpbnMuYW5ub3RhdGlvbnMuTm9uTmxzOworCitwdWJsaWMgY2xhc3MgRXhwcmVzc2lvblBhcnNlclRlc3QgZXh0ZW5kcyBKYXZhUGFyc2luZ1Rlc3RDYXNlIHsKKyAgcHVibGljIEV4cHJlc3Npb25QYXJzZXJUZXN0KCkgeworICAgIHN1cGVyKCJwYXJzZXItcGFydGlhbC9leHByZXNzaW9ucyIpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEFzc2lnbm1lbnQwKCkgeyBkb1BhcnNlclRlc3QoImEgPSAwIik7IH0KKyAgcHVibGljIHZvaWQgdGVzdEFzc2lnbm1lbnQxKCkgeyBkb1BhcnNlclRlc3QoImEgPSIpOyB9CisKKyAgcHVibGljIHZvaWQgdGVzdEJpbmFyeTAoKSB7IGRvUGFyc2VyVGVzdCgiYSArIGIiKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0QmluYXJ5MSgpIHsgZG9QYXJzZXJUZXN0KCJhIDwgYiIpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RCaW5hcnkyKCkgeyBkb1BhcnNlclRlc3QoImEgPiA9IGIiKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0QmluYXJ5MygpIHsgZG9QYXJzZXJUZXN0KCJhID4vKiovPSBiIik7IH0KKworICBwdWJsaWMgdm9pZCB0ZXN0Q29uZDAoKSB7IGRvUGFyc2VyVGVzdCgiY29uZCA/IHRydWUgOiBmYWxzZSIpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RDb25kMSgpIHsgZG9QYXJzZXJUZXN0KCJjb25kID8iKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0Q29uZDIoKSB7IGRvUGFyc2VyVGVzdCgiY29uZCA/IHRydWUiKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0Q29uZDMoKSB7IGRvUGFyc2VyVGVzdCgiY29uZCA/IHRydWUgOiIpOyB9CisKKyAgcHVibGljIHZvaWQgdGVzdENvbmRPcjAoKSB7IGRvUGFyc2VyVGVzdCgiYSB8fCBiIHx8IGMiKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0Q29uZE9yMSgpIHsgZG9QYXJzZXJUZXN0KCJhIHx8Iik7IH0KKworICBwdWJsaWMgdm9pZCB0ZXN0T3IwKCkgeyBkb1BhcnNlclRlc3QoImEgfCBiIHwgYyIpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RPcjEoKSB7IGRvUGFyc2VyVGVzdCgiYSB8Iik7IH0KKworICBwdWJsaWMgdm9pZCB0ZXN0SW5zdGFuY2VPZjAoKSB7IGRvUGFyc2VyVGVzdCgiYSBpbnN0YW5jZW9mIFN0cmluZyIpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RJbnN0YW5jZU9mMSgpIHsgZG9QYXJzZXJUZXN0KCJhIGluc3RhbmNlb2YiKTsgfQorCisgIHB1YmxpYyB2b2lkIHRlc3ROb3QwKCkgeyBkb1BhcnNlclRlc3QoIiEhYSIpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3ROb3QxKCkgeyBkb1BhcnNlclRlc3QoIiEiKTsgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RDYXN0KCkgeyBkb1BhcnNlclRlc3QoIihUeXBlKXZhciIpOyB9CisKKyAgcHVibGljIHZvaWQgdGVzdFBhcmVudGgwKCkgeyBkb1BhcnNlclRlc3QoIihjKSIpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RQYXJlbnRoMSgpIHsgZG9QYXJzZXJUZXN0KCIodGhpcykuZi0tIik7IH0KKyAgcHVibGljIHZvaWQgdGVzdFBhcmVudGgyKCkgeyBkb1BhcnNlclRlc3QoIigiKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0UGFyZW50aDMoKSB7IGRvUGFyc2VyVGVzdCgiKGEgPCBiKSIpOyB9CisKKyAgcHVibGljIHZvaWQgdGVzdE5ld0luRXhwckxpc3QoKSB7IGRvUGFyc2VyVGVzdCgiY2FsbChuZXcpIik7IH0KKworICBwdWJsaWMgdm9pZCB0ZXN0TmV3MCgpIHsgZG9QYXJzZXJUZXN0KCJuZXcgQSgpIik7IH0KKyAgcHVibGljIHZvaWQgdGVzdE5ldzEoKSB7IGRvUGFyc2VyVGVzdCgibmV3IEFbMV1bXSIpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3ROZXcyKCkgeyBkb1BhcnNlclRlc3QoIm5ldyBBW10iKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0TmV3MygpIHsgZG9QYXJzZXJUZXN0KCJuZXcgQVtdWzFdIik7IH0KKyAgcHVibGljIHZvaWQgdGVzdE5ldzQoKSB7IGRvUGFyc2VyVGVzdCgibmV3IEFbXVtde251bGx9Iik7IH0KKyAgcHVibGljIHZvaWQgdGVzdE5ldzUoKSB7IGRvUGFyc2VyVGVzdCgibmV3IEFbMV17bnVsbH0iKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0TmV3NigpIHsgZG9QYXJzZXJUZXN0KCJuZXciKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0TmV3NygpIHsgZG9QYXJzZXJUZXN0KCJuZXcgQSIpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3ROZXc4KCkgeyBkb1BhcnNlclRlc3QoIm5ldyBBWyIpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3ROZXc5KCkgeyBkb1BhcnNlclRlc3QoIm5ldyBpbnQiKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0TmV3MTAoKSB7IGRvUGFyc2VyVGVzdCgibmV3IGludCgpIik7IH0KKyAgcHVibGljIHZvaWQgdGVzdE5ldzExKCkgeyBkb1BhcnNlclRlc3QoIm5ldyBTdHJpbmdbMCIpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3ROZXcxMigpIHsgZG9QYXJzZXJUZXN0KCJuZXcgaW50WzFdWzJdIik7IH0KKyAgcHVibGljIHZvaWQgdGVzdE5ldzEzKCkgeyBkb1BhcnNlclRlc3QoIm5ldyBpbnRbMV1bXVsyXSIpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3ROZXcxNCgpIHsgZG9QYXJzZXJUZXN0KCJRLm5ldyBBKCkiKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0TmV3MTUoKSB7IGRvUGFyc2VyVGVzdCgibmV3IEM8Pz4uQigpIik7IH0KKyAgcHVibGljIHZvaWQgdGVzdE5ldzE2KCkgeyBkb1BhcnNlclRlc3QoIm5ldyBDPD4oKSIpOyB9CisKKyAgcHVibGljIHZvaWQgdGVzdEV4cHJMaXN0MCgpIHsgZG9QYXJzZXJUZXN0KCJmKDEsMikiKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0RXhwckxpc3QxKCkgeyBkb1BhcnNlclRlc3QoImYoIik7IH0KKyAgcHVibGljIHZvaWQgdGVzdEV4cHJMaXN0MigpIHsgZG9QYXJzZXJUZXN0KCJmKDEiKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0RXhwckxpc3QzKCkgeyBkb1BhcnNlclRlc3QoImYoMSwiKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0RXhwckxpc3Q0KCkgeyBkb1BhcnNlclRlc3QoImYoMSwpIik7IH0KKyAgcHVibGljIHZvaWQgdGVzdEV4cHJMaXN0NSgpIHsgZG9QYXJzZXJUZXN0KCJmKDEsLDIpIik7IH0KKyAgcHVibGljIHZvaWQgdGVzdEV4cHJMaXN0NigpIHsgZG9QYXJzZXJUZXN0KCJmKCwyKSIpOyB9CisKKyAgcHVibGljIHZvaWQgdGVzdEFycmF5SW5pdGlhbGl6ZXIwKCkgeyBkb1BhcnNlclRlc3QoInsgfSIpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RBcnJheUluaXRpYWxpemVyMSgpIHsgZG9QYXJzZXJUZXN0KCJ7IDEgfSIpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RBcnJheUluaXRpYWxpemVyMigpIHsgZG9QYXJzZXJUZXN0KCJ7IDEsIH0iKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0QXJyYXlJbml0aWFsaXplcjMoKSB7IGRvUGFyc2VyVGVzdCgieyAxLDIgfSIpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RBcnJheUluaXRpYWxpemVyNCgpIHsgZG9QYXJzZXJUZXN0KCJ7IDEgMiB9Iik7IH0KKyAgcHVibGljIHZvaWQgdGVzdEFycmF5SW5pdGlhbGl6ZXI1KCkgeyBkb1BhcnNlclRlc3QoInsgeyB9Iik7IH0KKyAgcHVibGljIHZvaWQgdGVzdEFycmF5SW5pdGlhbGl6ZXI2KCkgeyBkb1BhcnNlclRlc3QoInsgICwgIH0iKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0QXJyYXlJbml0aWFsaXplcjcoKSB7IGRvUGFyc2VyVGVzdCgieyAgLCAgLCA3IH0iKTsgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RQaW5lc0luUmVmZXJlbmNlRXhwcmVzc2lvbjAoKSB7IGRvUGFyc2VyVGVzdCgiQ29sbGVjdGlvbnMuPFN0cmluZz5zb3J0KG51bGwpIik7IH0KKyAgcHVibGljIHZvaWQgdGVzdFBpbmVzSW5SZWZlcmVuY2VFeHByZXNzaW9uMSgpIHsgZG9QYXJzZXJUZXN0KCJ0aGlzLjxTdHJpbmc+c29ydChudWxsKSIpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RQaW5lc0luUmVmZXJlbmNlRXhwcmVzc2lvbjIoKSB7IGRvUGFyc2VyVGVzdCgiPFN0cmluZz5zdXBlcihudWxsKSIpOyB9CisKKyAgcHVibGljIHZvaWQgdGVzdEdFMCgpIHsgZG9QYXJzZXJUZXN0KCJ4ID4+Pj0gOCA+PiAyIik7IH0KKyAgcHVibGljIHZvaWQgdGVzdEdFMSgpIHsgZG9QYXJzZXJUZXN0KCJ4ID49IDIiKTsgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RJbmNvbXBsZXRlQ2FzdCgpIHsgZG9QYXJzZXJUZXN0KCJmKChBcnJheUxpc3Q8U3RyaW5nPikgKSIpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RTaGlmdFJpZ2h0KCkgeyBkb1BhcnNlclRlc3QoInggPj49IDIiKTsgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RJbGxlZ2FsV2lsZGNhcmQoKSB7IGRvUGFyc2VyVGVzdCgidGhpcy48Pz5mb28oKSIpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RJbGxlZ2FsQm91bmQoKSB7IGRvUGFyc2VyVGVzdCgiQy48VCBleHRlbmRzIFM+Zm9vKCkiKTsgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RRdWFsaWZpZWRTdXBlck1ldGhvZENhbGwwKCkgeyBkb1BhcnNlclRlc3QoIm5ldyBEKCkuc3VwZXIoMCkiKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0UXVhbGlmaWVkU3VwZXJNZXRob2RDYWxsMSgpIHsgZG9QYXJzZXJUZXN0KCJkLnN1cGVyKDApIik7IH0KKyAgcHVibGljIHZvaWQgdGVzdFF1YWxpZmllZFN1cGVyTWV0aG9kQ2FsbDIoKSB7IGRvUGFyc2VyVGVzdCgiKG5ldyBPKCkpLjxUPnN1cGVyKCkiKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0U3VwZXJNZXRob2RDYWxsVHlwZVBhcmFtZXRlckxpc3QoKSB7IGRvUGFyc2VyVGVzdCgic3VwZXIoKSIpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RQcmltaXRpdmVDbGFzc09iamVjdEFjY2VzcygpIHsgZG9QYXJzZXJUZXN0KCJpbnQuY2xhc3MiKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0UHJpbWl0aXZlRmllbGRBY2Nlc3MoKSB7IGRvUGFyc2VyVGVzdCgiaW50LngiKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0Q2hhaW5lZENsYXNzT2JqZWN0QWNjZXNzKCkgeyBkb1BhcnNlclRlc3QoIkEuY2xhc3MuQi5jbGFzcyIpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RDaGFpbmVkVGhpc09iamVjdEFjY2VzcygpIHsgZG9QYXJzZXJUZXN0KCJBLnRoaXMuQi50aGlzIik7IH0KKworICBwdWJsaWMgdm9pZCB0ZXN0TWV0aG9kUmVmMCgpIHsgZG9QYXJzZXJUZXN0KCJhLmIuQzo6bSIpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RNZXRob2RSZWYxKCkgeyBkb1BhcnNlclRlc3QoImEuYi5DPFQ+OjpuZXciKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0TWV0aG9kUmVmMigpIHsgZG9QYXJzZXJUZXN0KCJDOjo8VD5tIik7IH0KKyAgcHVibGljIHZvaWQgdGVzdE1ldGhvZFJlZjMoKSB7IGRvUGFyc2VyVGVzdCgiYVtpXTo6bSIpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RNZXRob2RSZWY0KCkgeyBkb1BhcnNlclRlc3QoImludFtdOjpjbG9uZSIpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RNZXRob2RSZWY1KCkgeyBkb1BhcnNlclRlc3QoIihmID8gbGlzdC5tYXAoU3RyaW5nOjpsZW5ndGgpIDogQ29sbGVjdGlvbnMuZW1wdHlMaXN0KCkpOjppdGVyYXRvciIpOyB9CisKKyAgcHVibGljIHZvaWQgdGVzdExhbWJkYUV4cHJlc3Npb24wKCkgeyBkb1BhcnNlclRlc3QoInAgLT4gNDIiKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0TGFtYmRhRXhwcmVzc2lvbjEoKSB7IGRvUGFyc2VyVGVzdCgicCAtPiAiKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0TGFtYmRhRXhwcmVzc2lvbjIoKSB7IGRvUGFyc2VyVGVzdCgicCAtPiB7Iik7IH0KKyAgcHVibGljIHZvaWQgdGVzdExhbWJkYUV4cHJlc3Npb24zKCkgeyBkb1BhcnNlclRlc3QoIihwKSAtPiB7IH0iKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0TGFtYmRhRXhwcmVzc2lvbjQoKSB7IGRvUGFyc2VyVGVzdCgiKHAsIHYpIC0+IG51bGwiKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0TGFtYmRhRXhwcmVzc2lvbjUoKSB7IGRvUGFyc2VyVGVzdCgiKHAsIHYgLT4gbnVsbCIpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RMYW1iZGFFeHByZXNzaW9uNigpIHsgZG9QYXJzZXJUZXN0KCIocCwgdiwgLT4gbnVsbCIpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RMYW1iZGFFeHByZXNzaW9uNygpIHsgZG9QYXJzZXJUZXN0KCIocCAtPiBudWxsKSIpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RMYW1iZGFFeHByZXNzaW9uOCgpIHsgZG9QYXJzZXJUZXN0KCIoSSkocCkgLT4gbnVsbCIpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RMYW1iZGFFeHByZXNzaW9uOSgpIHsgZG9QYXJzZXJUZXN0KCIoSSlwIC0+IG51bGwiKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0TGFtYmRhRXhwcmVzc2lvbjEwKCkgeyBkb1BhcnNlclRlc3QoIihJKShwIC0+IG51bGwpIik7IH0KKyAgcHVibGljIHZvaWQgdGVzdExhbWJkYUV4cHJlc3Npb24xMSgpIHsgZG9QYXJzZXJUZXN0KCIoKSAtPiB7IH0iKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0TGFtYmRhRXhwcmVzc2lvbjEyKCkgeyBkb1BhcnNlclRlc3QoIihJMSAmIEkyKSAoKSAtPiBudWxsIik7IH0KKyAgcHVibGljIHZvaWQgdGVzdExhbWJkYUV4cHJlc3Npb24xMygpIHsgZG9QYXJzZXJUZXN0KCIoSTEgJiBJMikgKCkgLT4ge30iKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0TGFtYmRhRXhwcmVzc2lvbjE0KCkgeyBkb1BhcnNlclRlc3QoIihTdHJpbmcgdCkgLT4gdCIpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RMYW1iZGFFeHByZXNzaW9uMTUoKSB7IGRvUGFyc2VyVGVzdCgiKGludCBhLCBpbnQgYikgLT4gYSArIGIiKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0TGFtYmRhRXhwcmVzc2lvbjE2KCkgeyBkb1BhcnNlclRlc3QoIihmaW5hbCBpbnQgeCkgLT4geCIpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RMYW1iZGFFeHByZXNzaW9uMTcoKSB7IGRvUGFyc2VyVGVzdCgiKFN0cmluZyBzIC0+IHMiKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0TGFtYmRhRXhwcmVzc2lvbjE4KCkgeyBkb1BhcnNlclRlc3QoIihqYXZhLmxhbmcuU3RyaW5nIHMsIC0+IHMiKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0TGFtYmRhRXhwcmVzc2lvbjE5KCkgeyBkb1BhcnNlclRlc3QoIihAQSBUIHQpIC0+IChudWxsKSIpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RBbWJpZ3VvdXNMYW1iZGFFeHByZXNzaW9uKCkgeyBkb1BhcnNlclRlc3QoImYoICh4KSA8IHkgLCB6ID4gKHcpIC0+IHYgKSIpOyB9CisKKyAgcHJpdmF0ZSB2b2lkIGRvUGFyc2VyVGVzdChATm9uTmxzIGZpbmFsIFN0cmluZyB0ZXh0KSB7CisgICAgZG9QYXJzZXJUZXN0KHRleHQsIG5ldyBNeVRlc3RQYXJzZXIoKSk7CisgIH0KKyAgcHJpdmF0ZSBzdGF0aWMgY2xhc3MgTXlUZXN0UGFyc2VyIGltcGxlbWVudHMgVGVzdFBhcnNlciB7CisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIHZvaWQgcGFyc2UoZmluYWwgUHNpQnVpbGRlciBidWlsZGVyKSB7CisgICAgICBKYXZhUGFyc2VyLklOU1RBTkNFLmdldEV4cHJlc3Npb25QYXJzZXIoKS5wYXJzZShidWlsZGVyKTsKKyAgICB9CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9sYW5nL2phdmEvcGFyc2VyL3BhcnRpYWwvRmlsZVBhcnNlclRlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9sYW5nL2phdmEvcGFyc2VyL3BhcnRpYWwvRmlsZVBhcnNlclRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41Mjc2NmY1Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2xhbmcvamF2YS9wYXJzZXIvcGFydGlhbC9GaWxlUGFyc2VyVGVzdC5qYXZhCkBAIC0wLDAgKzEsNzEgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwMC0yMDEyIEpldEJyYWlucyBzLnIuby4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCitwYWNrYWdlIGNvbS5pbnRlbGxpai5sYW5nLmphdmEucGFyc2VyLnBhcnRpYWw7CisKK2ltcG9ydCBjb20uaW50ZWxsaWoubGFuZy5Qc2lCdWlsZGVyOworaW1wb3J0IGNvbS5pbnRlbGxpai5sYW5nLmphdmEucGFyc2VyLkphdmFQYXJzZXI7CitpbXBvcnQgY29tLmludGVsbGlqLmxhbmcuamF2YS5wYXJzZXIuSmF2YVBhcnNpbmdUZXN0Q2FzZTsKKworCitwdWJsaWMgY2xhc3MgRmlsZVBhcnNlclRlc3QgZXh0ZW5kcyBKYXZhUGFyc2luZ1Rlc3RDYXNlIHsKKyAgcHVibGljIEZpbGVQYXJzZXJUZXN0KCkgeworICAgIHN1cGVyKCJwYXJzZXItcGFydGlhbC9maWxlcyIpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEVtcHR5RmlsZSgpIHsgZG9QYXJzZXJUZXN0KCIiKTsgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RQYWNrYWdlKCkgeyBkb1BhcnNlclRlc3QoInBhY2thZ2UgYS5iLmM7Iik7IH0KKyAgcHVibGljIHZvaWQgdGVzdEFubm90YXRlZFBhY2thZ2UoKSB7IGRvUGFyc2VyVGVzdCgiQEFubm8gcGFja2FnZSBhLmIuYzsiKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0VW5jbG9zZWRQYWNrYWdlMCgpIHsgZG9QYXJzZXJUZXN0KCJwYWNrYWdlIik7IH0KKyAgcHVibGljIHZvaWQgdGVzdFVuY2xvc2VkUGFja2FnZTEoKSB7IGRvUGFyc2VyVGVzdCgicGFja2FnZSBhLiIpOyB9CisKKyAgcHVibGljIHZvaWQgdGVzdEltcG9ydDAoKSB7IGRvUGFyc2VyVGVzdCgiaW1wb3J0IGphdmEudXRpbC4qOyIpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RJbXBvcnQxKCkgeyBkb1BhcnNlclRlc3QoImltcG9ydCBqYXZhLnV0aWwuQXJyYXlzOyIpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RTdGF0aWNJbXBvcnQwKCkgeyBkb1BhcnNlclRlc3QoImltcG9ydCBzdGF0aWMgamF2YS51dGlsLkFycmF5cy4qOyIpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RTdGF0aWNJbXBvcnQxKCkgeyBkb1BhcnNlclRlc3QoImltcG9ydCBzdGF0aWMgamF2YS51dGlsLkFycmF5cy5zb3J0OyIpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RVbmNsb3NlZEltcG9ydDAoKSB7IGRvUGFyc2VyVGVzdCgiaW1wb3J0Iik7IH0KKyAgcHVibGljIHZvaWQgdGVzdFVuY2xvc2VkSW1wb3J0MSgpIHsgZG9QYXJzZXJUZXN0KCJpbXBvcnQgamF2YS5hd3QuKiIpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RVbmNsb3NlZEltcG9ydDIoKSB7IGRvUGFyc2VyVGVzdCgiaW1wb3J0IGphdmEuYXd0LiIpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RVbmNsb3NlZEltcG9ydDMoKSB7IGRvUGFyc2VyVGVzdCgiaW1wb3J0IHN0YXRpYyBhIik7IH0KKworICBwdWJsaWMgdm9pZCB0ZXN0RmlsZVdpdGhDbGFzcygpIHsgZG9QYXJzZXJUZXN0KCJwYWNrYWdlIGE7XG4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW1wb3J0IGI7XG4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicHVibGljIGNsYXNzIEMgeyB9XG4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY2xhc3MgRCB7IH0iKTsgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RCaW5kQmVmb3JlMCgpIHsgZG9QYXJzZXJUZXN0KCJjbGFzcyBBe1xuICAvLyBjb21tZW50XG4gIGludCBmaWVsZDtcbn0iKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0QmluZEJlZm9yZTEoKSB7IGRvUGFyc2VyVGVzdCgiY2xhc3MgQXtcbiAgLy8gY29tbWVudFxuXG4gIGludCBmaWVsZDtcbn0iKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0QmluZEJlZm9yZTIoKSB7IGRvUGFyc2VyVGVzdCgiY2xhc3MgQXsgLy8gY29tbWVudFxuICBpbnQgZmllbGQ7XG59Iik7IH0KKyAgcHVibGljIHZvaWQgdGVzdEJpbmRCZWZvcmUzKCkgeyBkb1BhcnNlclRlc3QoImNsYXNzIEF7Ly8gY29tbWVudFxuICBpbnQgZmllbGQ7XG59Iik7IH0KKyAgcHVibGljIHZvaWQgdGVzdEJpbmRCZWZvcmU0KCkgeyBkb1BhcnNlclRlc3QoImNsYXNzIEF7XG4gIC8vIGNvbW1lbnQgMVxuICAvLyBjb21tZW50IDJcbiAgLy8gY29tbWVudCAzXG4gIGludCBmaWVsZDtcbn0iKTsgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RCaW5kRG9jQ29tbWVudDAoKSB7IGRvUGFyc2VyVGVzdCgiLyoqIGNsYXNzIGNvbW1lbnQgKi9cbmNsYXNzIEEgeyB9Iik7IH0KKyAgcHVibGljIHZvaWQgdGVzdEJpbmREb2NDb21tZW50MSgpIHsgZG9QYXJzZXJUZXN0KCIvKiogZmlsZSBjb21tZW50ICovXG5wYWNrYWdlIGE7XG5jbGFzcyBBIHsgfSIpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RCaW5kRG9jQ29tbWVudDIoKSB7IGRvUGFyc2VyVGVzdCgiLyoqIGZpbGUgY29tbWVudCAqL1xuaW1wb3J0IGE7XG5jbGFzcyBBIHsgfSIpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RCaW5kRG9jQ29tbWVudDMoKSB7IGRvUGFyc2VyVGVzdCgiY2xhc3MgQSB7XG4gLyoqIGZpZWxkIGNvbW1lbnQgKi9cbiBpbnQgZjtcbn0iKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0QmluZERvY0NvbW1lbnQ0KCkgeyBkb1BhcnNlclRlc3QoImNsYXNzIEEge1xuIC8qKiBmaWVsZCBjb21tZW50ICovXG4vLyBmaWVsZCBjb21tZW50XG4gaW50IGY7XG59Iik7IH0KKworICBwcml2YXRlIHZvaWQgZG9QYXJzZXJUZXN0KGZpbmFsIFN0cmluZyB0ZXh0KSB7CisgICAgZG9QYXJzZXJUZXN0KHRleHQsIG5ldyBNeVRlc3RQYXJzZXIoKSk7CisgIH0KKworICBwcml2YXRlIHN0YXRpYyBjbGFzcyBNeVRlc3RQYXJzZXIgaW1wbGVtZW50cyBUZXN0UGFyc2VyIHsKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgdm9pZCBwYXJzZShmaW5hbCBQc2lCdWlsZGVyIGJ1aWxkZXIpIHsKKyAgICAgIEphdmFQYXJzZXIuSU5TVEFOQ0UuZ2V0RmlsZVBhcnNlcigpLnBhcnNlKGJ1aWxkZXIpOworICAgIH0KKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2xhbmcvamF2YS9wYXJzZXIvcGFydGlhbC9SZWZlcmVuY2VQYXJzZXJUZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovbGFuZy9qYXZhL3BhcnNlci9wYXJ0aWFsL1JlZmVyZW5jZVBhcnNlclRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YzEzMGJhCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2xhbmcvamF2YS9wYXJzZXIvcGFydGlhbC9SZWZlcmVuY2VQYXJzZXJUZXN0LmphdmEKQEAgLTAsMCArMSw5MCBAQAorLyoKKyAqIENvcHlyaWdodCAyMDAwLTIwMTIgSmV0QnJhaW5zIHMuci5vLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KK3BhY2thZ2UgY29tLmludGVsbGlqLmxhbmcuamF2YS5wYXJzZXIucGFydGlhbDsKKworaW1wb3J0IGNvbS5pbnRlbGxpai5sYW5nLlBzaUJ1aWxkZXI7CitpbXBvcnQgY29tLmludGVsbGlqLmxhbmcuamF2YS5wYXJzZXIuSmF2YVBhcnNlcjsKK2ltcG9ydCBjb20uaW50ZWxsaWoubGFuZy5qYXZhLnBhcnNlci5KYXZhUGFyc2luZ1Rlc3RDYXNlOworaW1wb3J0IGNvbS5pbnRlbGxpai5sYW5nLmphdmEucGFyc2VyLlJlZmVyZW5jZVBhcnNlcjsKKworCitwdWJsaWMgY2xhc3MgUmVmZXJlbmNlUGFyc2VyVGVzdCBleHRlbmRzIEphdmFQYXJzaW5nVGVzdENhc2UgeworICBwdWJsaWMgUmVmZXJlbmNlUGFyc2VyVGVzdCgpIHsKKyAgICBzdXBlcigicGFyc2VyLXBhcnRpYWwvcmVmZXJlbmNlcyIpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFJlZmVyZW5jZTAoKSB7IGRvUmVmUGFyc2VyVGVzdCgiYSIsIGZhbHNlKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0UmVmZXJlbmNlMSgpIHsgZG9SZWZQYXJzZXJUZXN0KCJhLiIsIHRydWUpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RSZWZlcmVuY2UyKCkgeyBkb1JlZlBhcnNlclRlc3QoImEuYiIsIGZhbHNlKTsgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RUeXBlMCgpIHsgZG9UeXBlUGFyc2VyVGVzdCgiaW50Iik7IH0KKyAgcHVibGljIHZvaWQgdGVzdFR5cGUxKCkgeyBkb1R5cGVQYXJzZXJUZXN0KCJhLmIiKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0VHlwZTIoKSB7IGRvVHlwZVBhcnNlclRlc3QoImludFtdIik7IH0KKyAgcHVibGljIHZvaWQgdGVzdFR5cGUzKCkgeyBkb1R5cGVQYXJzZXJUZXN0KCJpbnRbXVsiKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0VHlwZTQoKSB7IGRvVHlwZVBhcnNlclRlc3QoIk1hcDxTdHJpbmcsTGlzdDxTdHJpbmc+PiIpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RUeXBlNSgpIHsgZG9UeXBlUGFyc2VyVGVzdCgiT2JqZWN0W10uLi4iKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0VHlwZTYoKSB7IGRvVHlwZVBhcnNlclRlc3QoIkBFbmdsaXNoIFN0cmluZyBATm9uRW1wdHkgW10iKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0VHlwZTcoKSB7IGRvVHlwZVBhcnNlclRlc3QoIkRpYW1vbmQ8PiIpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RUeXBlOCgpIHsgZG9UeXBlUGFyc2VyVGVzdCgiQXwiKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0VHlwZTkoKSB7IGRvVHlwZVBhcnNlclRlc3QoIkF8QiIpOyB9CisKKyAgcHVibGljIHZvaWQgdGVzdFR5cGVQYXJhbXMwKCkgeyBkb1R5cGVQYXJhbXNQYXJzZXJUZXN0KCI8VD4iKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0VHlwZVBhcmFtczEoKSB7IGRvVHlwZVBhcmFtc1BhcnNlclRlc3QoIjxULCBVPiIpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RUeXBlUGFyYW1zMigpIHsgZG9UeXBlUGFyYW1zUGFyc2VyVGVzdCgiPFQiKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0VHlwZVBhcmFtczMoKSB7IGRvVHlwZVBhcmFtc1BhcnNlclRlc3QoIjxUIGhhY2s+Iik7IH0KKyAgcHVibGljIHZvaWQgdGVzdFR5cGVQYXJhbXM0KCkgeyBkb1R5cGVQYXJhbXNQYXJzZXJUZXN0KCI8VCBoYWNrIik7IH0KKyAgcHVibGljIHZvaWQgdGVzdFR5cGVQYXJhbXM1KCkgeyBkb1R5cGVQYXJhbXNQYXJzZXJUZXN0KCI8VCBleHRlbmRzIFggJiBZPFo+PiIpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RUeXBlUGFyYW1zNigpIHsgZG9UeXBlUGFyYW1zUGFyc2VyVGVzdCgiPFQgc3VwZXJzIFg+Iik7IH0KKyAgcHVibGljIHZvaWQgdGVzdFR5cGVQYXJhbXM3KCkgeyBkb1R5cGVQYXJhbXNQYXJzZXJUZXN0KCI8VCBleHRlbmRzIFgsIFk+Iik7IH0KKyAgcHVibGljIHZvaWQgdGVzdFR5cGVQYXJhbXM4KCkgeyBkb1R5cGVQYXJhbXNQYXJzZXJUZXN0KCI8Pz4iKTsgfQorCisgIHByaXZhdGUgdm9pZCBkb1JlZlBhcnNlclRlc3QoZmluYWwgU3RyaW5nIHRleHQsIGZpbmFsIGJvb2xlYW4gaW5jb21wbGV0ZSkgeworICAgIGRvUGFyc2VyVGVzdCh0ZXh0LCBuZXcgTXlUZXN0UGFyc2VyKGluY29tcGxldGUpKTsKKyAgfQorICBwcml2YXRlIHN0YXRpYyBjbGFzcyBNeVRlc3RQYXJzZXIgaW1wbGVtZW50cyBUZXN0UGFyc2VyIHsKKyAgICBwcml2YXRlIGZpbmFsIGJvb2xlYW4gbXlJbmNvbXBsZXRlOworCisgICAgcHVibGljIE15VGVzdFBhcnNlcihib29sZWFuIGluY29tcGxldGUpIHsKKyAgICAgIG15SW5jb21wbGV0ZSA9IGluY29tcGxldGU7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIHZvaWQgcGFyc2UoZmluYWwgUHNpQnVpbGRlciBidWlsZGVyKSB7CisgICAgICBKYXZhUGFyc2VyLklOU1RBTkNFLmdldFJlZmVyZW5jZVBhcnNlcigpLnBhcnNlSmF2YUNvZGVSZWZlcmVuY2UoYnVpbGRlciwgbXlJbmNvbXBsZXRlLCBmYWxzZSwgZmFsc2UsIGZhbHNlKTsKKyAgICB9CisgIH0KKworICBwcml2YXRlIHZvaWQgZG9UeXBlUGFyc2VyVGVzdChmaW5hbCBTdHJpbmcgdGV4dCkgeworICAgIGRvUGFyc2VyVGVzdCh0ZXh0LCBuZXcgTXlUZXN0UGFyc2VyMigpKTsKKyAgfQorICBwcml2YXRlIHN0YXRpYyBjbGFzcyBNeVRlc3RQYXJzZXIyIGltcGxlbWVudHMgVGVzdFBhcnNlciB7CisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIHZvaWQgcGFyc2UoZmluYWwgUHNpQnVpbGRlciBidWlsZGVyKSB7CisgICAgICBKYXZhUGFyc2VyLklOU1RBTkNFLmdldFJlZmVyZW5jZVBhcnNlcigpCisgICAgICAgIC5wYXJzZVR5cGUoYnVpbGRlciwgUmVmZXJlbmNlUGFyc2VyLkVMTElQU0lTIHwgUmVmZXJlbmNlUGFyc2VyLkRJQU1PTkRTIHwgUmVmZXJlbmNlUGFyc2VyLkRJU0pVTkNUSU9OUyk7CisgICAgfQorICB9CisKKyAgcHJpdmF0ZSB2b2lkIGRvVHlwZVBhcmFtc1BhcnNlclRlc3QoZmluYWwgU3RyaW5nIHRleHQpIHsKKyAgICBkb1BhcnNlclRlc3QodGV4dCwgbmV3IE15VGVzdFBhcnNlcjMoKSk7CisgIH0KKyAgcHJpdmF0ZSBzdGF0aWMgY2xhc3MgTXlUZXN0UGFyc2VyMyBpbXBsZW1lbnRzIFRlc3RQYXJzZXIgeworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyB2b2lkIHBhcnNlKGZpbmFsIFBzaUJ1aWxkZXIgYnVpbGRlcikgeworICAgICAgSmF2YVBhcnNlci5JTlNUQU5DRS5nZXRSZWZlcmVuY2VQYXJzZXIoKS5wYXJzZVR5cGVQYXJhbWV0ZXJzKGJ1aWxkZXIpOworICAgIH0KKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2xhbmcvamF2YS9wYXJzZXIvcGFydGlhbC9TdGF0ZW1lbnRQYXJzZXJUZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovbGFuZy9qYXZhL3BhcnNlci9wYXJ0aWFsL1N0YXRlbWVudFBhcnNlclRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMzIyMjYxZgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9sYW5nL2phdmEvcGFyc2VyL3BhcnRpYWwvU3RhdGVtZW50UGFyc2VyVGVzdC5qYXZhCkBAIC0wLDAgKzEsMTcwIEBACisvKgorICogQ29weXJpZ2h0IDIwMDAtMjAxMiBKZXRCcmFpbnMgcy5yLm8uCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworcGFja2FnZSBjb20uaW50ZWxsaWoubGFuZy5qYXZhLnBhcnNlci5wYXJ0aWFsOworCitpbXBvcnQgY29tLmludGVsbGlqLmxhbmcuUHNpQnVpbGRlcjsKK2ltcG9ydCBjb20uaW50ZWxsaWoubGFuZy5qYXZhLnBhcnNlci5KYXZhUGFyc2VyOworaW1wb3J0IGNvbS5pbnRlbGxpai5sYW5nLmphdmEucGFyc2VyLkphdmFQYXJzaW5nVGVzdENhc2U7CisKK3B1YmxpYyBjbGFzcyBTdGF0ZW1lbnRQYXJzZXJUZXN0IGV4dGVuZHMgSmF2YVBhcnNpbmdUZXN0Q2FzZSB7CisgIHB1YmxpYyBTdGF0ZW1lbnRQYXJzZXJUZXN0KCkgeworICAgIHN1cGVyKCJwYXJzZXItcGFydGlhbC9zdGF0ZW1lbnRzIik7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0QmxvY2tTaW1wbGUoKSB7IGRvQmxvY2tQYXJzZXJUZXN0KCJ7IHt9IH0iKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0QmxvY2tFbXB0eSgpIHsgZG9CbG9ja1BhcnNlclRlc3QoInsgOyB9Iik7IH0KKyAgcHVibGljIHZvaWQgdGVzdEFub255bW91c0luU21hcnRDb21wbGV0aW9uKCkgeyBkb0Jsb2NrUGFyc2VyVGVzdCgieyBuZXcgRm9vKGhhc2hcbiMpIHt9O1xuIG5ldyBGb28oaGFzaFxuIywgYmFyKSB7fTtcbiBuZXcgRm9vKGhhc2hcbiN4KSB7fTsgfSIpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RCbG9ja0luY29tcGxldGUwKCkgeyBkb0Jsb2NrUGFyc2VyVGVzdCgieyAvKn0iKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0QmxvY2tJbmNvbXBsZXRlMSgpIHsgZG9CbG9ja1BhcnNlclRlc3QoInsgeyB9Iik7IH0KKyAgcHVibGljIHZvaWQgdGVzdEJsb2NrSW5jb21wbGV0ZTIoKSB7IGRvQmxvY2tQYXJzZXJUZXN0KCJ7IGVsc2U7IGNhdGNoOyBmaW5hbGx5OyB9Iik7IH0KKyAgcHVibGljIHZvaWQgdGVzdFNDUjUyMDIoKSB7IGRvQmxvY2tQYXJzZXJUZXN0KCJ7IFN0cmluZy5jbGFzcy5cbiBTdHJpbmdbXSBzdHJpbmdzOyB9Iik7IH0KKworICBwdWJsaWMgdm9pZCB0ZXN0QXNzZXJ0Tm9ybWFsMCgpIHsgZG9QYXJzZXJUZXN0KCJhc3NlcnQgY29uZDsiKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0QXNzZXJ0Tm9ybWFsMSgpIHsgZG9QYXJzZXJUZXN0KCJhc3NlcnQgY29uZCA6IG1lc3NhZ2U7Iik7IH0KKworICBwdWJsaWMgdm9pZCB0ZXN0QXNzaWdubWVudFNpbXBsZTAoKSB7IGRvUGFyc2VyVGVzdCgiaW50W10gYTtcbiBhWzBdID0gMDsiKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0QXNzaWdubWVudFNpbXBsZTEoKSB7IGRvUGFyc2VyVGVzdCgiYT0xOyBpbnQgYj0yOyIpOyB9CisKKyAgcHVibGljIHZvaWQgdGVzdEJyZWFrTm9ybWFsMCgpIHsgZG9QYXJzZXJUZXN0KCJicmVhazsiKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0QnJlYWtOb3JtYWwxKCkgeyBkb1BhcnNlclRlc3QoImJyZWFrIExBQkVMOyIpOyB9CisKKyAgcHVibGljIHZvaWQgdGVzdENvbnRpbnVlTm9ybWFsMCgpIHsgZG9QYXJzZXJUZXN0KCJjb250aW51ZTsiKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0Q29udGludWVOb3JtYWwxKCkgeyBkb1BhcnNlclRlc3QoImNvbnRpbnVlIExBQkVMOyIpOyB9CisKKyAgcHVibGljIHZvaWQgdGVzdExvY2FsVmFyKCkgeyBkb1BhcnNlclRlc3QoIkxpc3Q8SW50ZWdlcj4gbGlzdDsiKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0Rm9yKCkgeyBkb1BhcnNlclRlc3QoImZvcihJdGVyYXRvcjxTdHJpbmc+IGl0ID0gbnVsbDsgaXQuaGFzTmV4dCgpOykgeyBTdHJpbmcgcyA9IGl0Lm5leHQoKTsgfSIpOyB9CisKKyAgcHVibGljIHZvaWQgdGVzdERvTm9ybWFsKCkgeyBkb1BhcnNlclRlc3QoImRve313aGlsZSh0cnVlKTsiKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0RG9JbmNvbXBsZXRlMCgpIHsgZG9QYXJzZXJUZXN0KCJkbyIpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3REb0luY29tcGxldGUxKCkgeyBkb1BhcnNlclRlc3QoImRvIGZvbygpOyIpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3REb0luY29tcGxldGUyKCkgeyBkb1BhcnNlclRlc3QoImRvIGZvbygpOyB3aGlsZSIpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3REb0luY29tcGxldGUzKCkgeyBkb1BhcnNlclRlc3QoImRvIGZvbygpOyB3aGlsZSgiKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0RG9JbmNvbXBsZXRlNCgpIHsgZG9QYXJzZXJUZXN0KCJkbyBmb28oKTsgd2hpbGUoKTsiKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0RG9JbmNvbXBsZXRlNSgpIHsgZG9QYXJzZXJUZXN0KCJkbyBmb28oKTsgd2hpbGUoXG4gZygpOyIpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3REb0luY29tcGxldGU2KCkgeyBkb1BhcnNlclRlc3QoImRvIGZvbygpOyB3aGlsZShjb25kKSIpOyB9CisKKyAgcHVibGljIHZvaWQgdGVzdEZvck5vcm1hbDAoKSB7IGRvUGFyc2VyVGVzdCgiZm9yKGludCBpID0gMDsgaSA8IDEwOyBpKyspXG4gOyIpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RGb3JOb3JtYWwxKCkgeyBkb1BhcnNlclRlc3QoImZvciggOyA7ICkgZm9vKCk7Iik7IH0KKyAgcHVibGljIHZvaWQgdGVzdEZvckVhY2goKSB7IGRvUGFyc2VyVGVzdCgiZm9yKE9iamVjdCBvIDogbWFwLmVudHJ5U2V0KCkpIDsiKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0Rm9ySW5jb21wbGV0ZTAoKSB7IGRvUGFyc2VyVGVzdCgiZm9yIik7IH0KKyAgcHVibGljIHZvaWQgdGVzdEZvckluY29tcGxldGUxKCkgeyBkb1BhcnNlclRlc3QoImZvcigiKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0Rm9ySW5jb21wbGV0ZTIoKSB7IGRvUGFyc2VyVGVzdCgiZm9yKGludCBpID0gMDsiKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0Rm9ySW5jb21wbGV0ZTMoKSB7IGRvUGFyc2VyVGVzdCgiZm9yKGludCBpID0gMDsgaSA8IDEwIik7IH0KKyAgcHVibGljIHZvaWQgdGVzdEZvckluY29tcGxldGU0KCkgeyBkb1BhcnNlclRlc3QoImZvcihpbnQgaSA9IDA7IGkgPCAxMDsiKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0Rm9ySW5jb21wbGV0ZTUoKSB7IGRvUGFyc2VyVGVzdCgiZm9yKGludCBpID0gMDsgaSA8IDEwOyBpKysiKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0Rm9ySW5jb21wbGV0ZTYoKSB7IGRvUGFyc2VyVGVzdCgiZm9yKGludCBpID0gMDsgaSA8IDEwOyBpKyspIik7IH0KKyAgcHVibGljIHZvaWQgdGVzdEZvckluY29tcGxldGU3KCkgeyBkb1BhcnNlclRlc3QoImZvcigpIGZvbygpOyIpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RGb3JJbmNvbXBsZXRlOCgpIHsgZG9QYXJzZXJUZXN0KCJmb3IoaW50IGkgPSAwOykgZm9vKCk7Iik7IH0KKyAgcHVibGljIHZvaWQgdGVzdEZvckluY29tcGxldGU5KCkgeyBkb1BhcnNlclRlc3QoImZvcihpbnQgaSA9IDA7IGkgPCAwKSBmb28oKTsiKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0Rm9yRWFjaEluY29tcGxldGUwKCkgeyBkb1BhcnNlclRlc3QoImZvcihPYmplY3QgIDogbGlzdCkgOyIpOyB9CisKKyAgcHVibGljIHZvaWQgdGVzdElmTm9ybWFsV2l0aEVsc2UoKSB7IGRvUGFyc2VyVGVzdCgiaWYgKGEpeyBmMSgpOyB9IGVsc2V7IGYyKCk7IH0iKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0SWZOb3JtYWxOb0Vsc2UoKSB7IGRvUGFyc2VyVGVzdCgiaWYgKGEpIGYxKCk7Iik7IH0KKyAgcHVibGljIHZvaWQgdGVzdElmSW5jb21wbGV0ZTAoKSB7IGRvUGFyc2VyVGVzdCgiaWYiKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0SWZJbmNvbXBsZXRlMSgpIHsgZG9QYXJzZXJUZXN0KCJpZiAoIik7IH0KKyAgcHVibGljIHZvaWQgdGVzdElmSW5jb21wbGV0ZTIoKSB7IGRvUGFyc2VyVGVzdCgiaWYgKFxuIGZvbygpOyIpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RJZkluY29tcGxldGUzKCkgeyBkb1BhcnNlclRlc3QoImlmIChjb25kIik7IH0KKyAgcHVibGljIHZvaWQgdGVzdElmSW5jb21wbGV0ZTQoKSB7IGRvUGFyc2VyVGVzdCgiaWYgKGNvbmQpIik7IH0KKyAgcHVibGljIHZvaWQgdGVzdElmSW5jb21wbGV0ZTUoKSB7IGRvUGFyc2VyVGVzdCgiaWYgKCkgZm9vKCk7Iik7IH0KKyAgcHVibGljIHZvaWQgdGVzdElmSW5jb21wbGV0ZTYoKSB7IGRvUGFyc2VyVGVzdCgiaWYgKGNvbmQpIGZvbygpOyBlbHNlIik7IH0KKworICBwdWJsaWMgdm9pZCB0ZXN0TGFiZWxTaW1wbGUoKSB7IGRvUGFyc2VyVGVzdCgiTG9vcDpcbiB3aGlsZSh0cnVlKSA7Iik7IH0KKworICBwdWJsaWMgdm9pZCB0ZXN0UmV0dXJuTm9SZXN1bHQoKSB7IGRvUGFyc2VyVGVzdCgicmV0dXJuOyIpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RSZXR1cm5XaXRoUmVzdWx0KCkgeyBkb1BhcnNlclRlc3QoInJldHVybiAxMDsiKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0UmV0dXJuSW5jb21wbGV0ZTAoKSB7IGRvUGFyc2VyVGVzdCgicmV0dXJuIik7IH0KKyAgcHVibGljIHZvaWQgdGVzdFJldHVybkluY29tcGxldGUxKCkgeyBkb1BhcnNlclRlc3QoInJldHVybiBhIik7IH0KKworICBwdWJsaWMgdm9pZCB0ZXN0U3dpdGNoTm9ybWFsKCkgeyBkb1BhcnNlclRlc3QoInN3aXRjaChvKXt9Iik7IH0KKyAgcHVibGljIHZvaWQgdGVzdFN3aXRjaEluY29tcGxldGUwKCkgeyBkb1BhcnNlclRlc3QoInN3aXRjaCIpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RTd2l0Y2hJbmNvbXBsZXRlMSgpIHsgZG9QYXJzZXJUZXN0KCJzd2l0Y2goIik7IH0KKyAgcHVibGljIHZvaWQgdGVzdFN3aXRjaEluY29tcGxldGUyKCkgeyBkb1BhcnNlclRlc3QoInN3aXRjaChvIik7IH0KKyAgcHVibGljIHZvaWQgdGVzdFN3aXRjaEluY29tcGxldGUzKCkgeyBkb1BhcnNlclRlc3QoInN3aXRjaChvKSIpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RTd2l0Y2hJbmNvbXBsZXRlNCgpIHsgZG9QYXJzZXJUZXN0KCJzd2l0Y2goKXt9Iik7IH0KKyAgcHVibGljIHZvaWQgdGVzdFN3aXRjaEluY29tcGxldGU1KCkgeyBkb1BhcnNlclRlc3QoInN3aXRjaChcbiBmb28oKTsiKTsgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RTd2l0Y2hMYWJlbHNOb3JtYWwoKSB7IGRvUGFyc2VyVGVzdCgiY2FzZSAxOiBicmVhazsgZGVmYXVsdDogYnJlYWs7Iik7IH0KKyAgcHVibGljIHZvaWQgdGVzdFN3aXRjaExhYmVsc0luY29tcGxldGUwKCkgeyBkb1BhcnNlclRlc3QoImNhc2UiKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0U3dpdGNoTGFiZWxzSW5jb21wbGV0ZTEoKSB7IGRvUGFyc2VyVGVzdCgiY2FzZSAyIik7IH0KKyAgcHVibGljIHZvaWQgdGVzdFN3aXRjaExhYmVsc0luY29tcGxldGUyKCkgeyBkb1BhcnNlclRlc3QoImRlZmF1bHQiKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0U3dpdGNoTGFiZWxzSW5jb21wbGV0ZTMoKSB7IGRvUGFyc2VyVGVzdCgiZGVmYXVsdCAzOiIpOyB9CisKKyAgcHVibGljIHZvaWQgdGVzdFN5bmNOb3JtYWwoKSB7IGRvUGFyc2VyVGVzdCgic3luY2hyb25pemVkKG8pe30iKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0U3luY0luY29tcGxldGUwKCkgeyBkb1BhcnNlclRlc3QoInN5bmNocm9uaXplZCIpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RTeW5jSW5jb21wbGV0ZTEoKSB7IGRvUGFyc2VyVGVzdCgic3luY2hyb25pemVkKCIpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RTeW5jSW5jb21wbGV0ZTIoKSB7IGRvUGFyc2VyVGVzdCgic3luY2hyb25pemVkKG8iKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0U3luY0luY29tcGxldGUzKCkgeyBkb1BhcnNlclRlc3QoInN5bmNocm9uaXplZChvKSIpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RTeW5jSW5jb21wbGV0ZTQoKSB7IGRvUGFyc2VyVGVzdCgic3luY2hyb25pemVkKCl7fSIpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RTeW5jSW5jb21wbGV0ZTUoKSB7IGRvUGFyc2VyVGVzdCgic3luY2hyb25pemVkKFxuIGZvbygpOyIpOyB9CisKKyAgcHVibGljIHZvaWQgdGVzdFRocm93Tm9ybWFsKCkgeyBkb1BhcnNlclRlc3QoInRocm93IGU7Iik7IH0KKyAgcHVibGljIHZvaWQgdGVzdFRocm93SW5jb21wbGV0ZTAoKSB7IGRvUGFyc2VyVGVzdCgidGhyb3ciKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0VGhyb3dJbmNvbXBsZXRlMSgpIHsgZG9QYXJzZXJUZXN0KCJ0aHJvdyBlIik7IH0KKworICBwdWJsaWMgdm9pZCB0ZXN0VHJ5Tm9ybWFsMCgpIHsgZG9QYXJzZXJUZXN0KCJ0cnl7fWNhdGNoKEUgZSl7fSIpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RUcnlOb3JtYWwxKCkgeyBkb1BhcnNlclRlc3QoInRyeXt9Y2F0Y2goZmluYWwgRSBlKXt9ZmluYWxseXt9Iik7IH0KKyAgcHVibGljIHZvaWQgdGVzdFRyeU5vcm1hbDIoKSB7IGRvUGFyc2VyVGVzdCgidHJ5e31maW5hbGx5e30iKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0VHJ5Tm9ybWFsMygpIHsgZG9QYXJzZXJUZXN0KCJ0cnl7fWNhdGNoKEF8QiBlKXt9Iik7IH0KKyAgcHVibGljIHZvaWQgdGVzdFRyeU5vcm1hbDQoKSB7IGRvUGFyc2VyVGVzdCgidHJ5KFIgciA9IDApe30iKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0VHJ5Tm9ybWFsNSgpIHsgZG9QYXJzZXJUZXN0KCJ0cnkoUjEgcjEgPSAxOyBSMiByMiA9IDIpe30iKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0VHJ5Tm9ybWFsNigpIHsgZG9QYXJzZXJUZXN0KCJ0cnkoUiByID0gMDspe30iKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0VHJ5SW5jb21wbGV0ZTAoKSB7IGRvUGFyc2VyVGVzdCgidHJ5Iik7IH0KKyAgcHVibGljIHZvaWQgdGVzdFRyeUluY29tcGxldGUxKCkgeyBkb1BhcnNlclRlc3QoInRyeXt9Iik7IH0KKyAgcHVibGljIHZvaWQgdGVzdFRyeUluY29tcGxldGUyKCkgeyBkb1BhcnNlclRlc3QoInRyeXt9Y2F0Y2giKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0VHJ5SW5jb21wbGV0ZTMoKSB7IGRvUGFyc2VyVGVzdCgidHJ5e31jYXRjaCgiKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0VHJ5SW5jb21wbGV0ZTQoKSB7IGRvUGFyc2VyVGVzdCgidHJ5e31jYXRjaChFIik7IH0KKyAgcHVibGljIHZvaWQgdGVzdFRyeUluY29tcGxldGU1KCkgeyBkb1BhcnNlclRlc3QoInRyeXt9Y2F0Y2goRSBlIik7IH0KKyAgcHVibGljIHZvaWQgdGVzdFRyeUluY29tcGxldGU2KCkgeyBkb1BhcnNlclRlc3QoInRyeXt9Y2F0Y2goRSBlKSIpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RUcnlJbmNvbXBsZXRlNygpIHsgZG9QYXJzZXJUZXN0KCJ0cnl7fWZpbmFsbHkiKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0VHJ5SW5jb21wbGV0ZTgoKSB7IGRvUGFyc2VyVGVzdCgidHJ5e31jYXRjaChBfCkiKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0VHJ5SW5jb21wbGV0ZTkoKSB7IGRvUGFyc2VyVGVzdCgidHJ5e31jYXRjaChBfEIpIik7IH0KKyAgcHVibGljIHZvaWQgdGVzdFRyeUluY29tcGxldGUxMCgpIHsgZG9QYXJzZXJUZXN0KCJ0cnkoe30iKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0VHJ5SW5jb21wbGV0ZTExKCkgeyBkb1BhcnNlclRlc3QoInRyeSgpe30iKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0VHJ5SW5jb21wbGV0ZTEyKCkgeyBkb1BhcnNlclRlc3QoInRyeSg7KXt9Iik7IH0KKyAgcHVibGljIHZvaWQgdGVzdFRyeUluY29tcGxldGUxMygpIHsgZG9QYXJzZXJUZXN0KCJ0cnkoZmluYWwgKXt9Iik7IH0KKyAgcHVibGljIHZvaWQgdGVzdFRyeUluY29tcGxldGUxNCgpIHsgZG9QYXJzZXJUZXN0KCJ0cnkoaW50KXt9Iik7IH0KKyAgcHVibGljIHZvaWQgdGVzdFRyeUluY29tcGxldGUxNSgpIHsgZG9QYXJzZXJUZXN0KCJ0cnkoUiByKXt9Iik7IH0KKyAgcHVibGljIHZvaWQgdGVzdFRyeUluY29tcGxldGUxNigpIHsgZG9QYXJzZXJUZXN0KCJ0cnkoUiByID0pe30iKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0VHJ5SW5jb21wbGV0ZTE3KCkgeyBkb1BhcnNlclRlc3QoInRyeShSIHIgPSAwOzspe30iKTsgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RXaGlsZU5vcm1hbCgpIHsgZG9QYXJzZXJUZXN0KCJ3aGlsZSAodHJ1ZSkgZm9vKCk7Iik7IH0KKyAgcHVibGljIHZvaWQgdGVzdFdoaWxlSW5jb21wbGV0ZTAoKSB7IGRvUGFyc2VyVGVzdCgid2hpbGUiKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0V2hpbGVJbmNvbXBsZXRlMSgpIHsgZG9QYXJzZXJUZXN0KCJ3aGlsZSAoIik7IH0KKyAgcHVibGljIHZvaWQgdGVzdFdoaWxlSW5jb21wbGV0ZTIoKSB7IGRvUGFyc2VyVGVzdCgid2hpbGUoXG4gZm9vKCk7Iik7IH0KKyAgcHVibGljIHZvaWQgdGVzdFdoaWxlSW5jb21wbGV0ZTMoKSB7IGRvUGFyc2VyVGVzdCgid2hpbGUoY29uZCIpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RXaGlsZUluY29tcGxldGU0KCkgeyBkb1BhcnNlclRlc3QoIndoaWxlKGNvbmQpIik7IH0KKyAgcHVibGljIHZvaWQgdGVzdFdoaWxlSW5jb21wbGV0ZTUoKSB7IGRvUGFyc2VyVGVzdCgid2hpbGUoKSBmb28oKTsiKTsgfQorCisgIHByaXZhdGUgdm9pZCBkb0Jsb2NrUGFyc2VyVGVzdChmaW5hbCBTdHJpbmcgdGV4dCkgeworICAgIGRvUGFyc2VyVGVzdCh0ZXh0LCBuZXcgTXlCbG9ja1Rlc3RQYXJzZXIoKSk7CisgIH0KKyAgcHJpdmF0ZSBzdGF0aWMgY2xhc3MgTXlCbG9ja1Rlc3RQYXJzZXIgaW1wbGVtZW50cyBUZXN0UGFyc2VyIHsKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgdm9pZCBwYXJzZShmaW5hbCBQc2lCdWlsZGVyIGJ1aWxkZXIpIHsKKyAgICAgIEphdmFQYXJzZXIuSU5TVEFOQ0UuZ2V0U3RhdGVtZW50UGFyc2VyKCkucGFyc2VDb2RlQmxvY2tEZWVwKGJ1aWxkZXIsIHRydWUpOworICAgIH0KKyAgfQorCisgIHByaXZhdGUgdm9pZCBkb1BhcnNlclRlc3QoZmluYWwgU3RyaW5nIHRleHQpIHsKKyAgICBkb1BhcnNlclRlc3QodGV4dCwgbmV3IE15U3RhdGVtZW50c1Rlc3RQYXJzZXIoKSk7CisgIH0KKyAgcHJpdmF0ZSBzdGF0aWMgY2xhc3MgTXlTdGF0ZW1lbnRzVGVzdFBhcnNlciBpbXBsZW1lbnRzIFRlc3RQYXJzZXIgeworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyB2b2lkIHBhcnNlKGZpbmFsIFBzaUJ1aWxkZXIgYnVpbGRlcikgeworICAgICAgSmF2YVBhcnNlci5JTlNUQU5DRS5nZXRTdGF0ZW1lbnRQYXJzZXIoKS5wYXJzZVN0YXRlbWVudHMoYnVpbGRlcik7CisgICAgfQorICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovbGFuZy9qYXZhL3BhcnNlci9zdGF0ZW1lbnRQYXJzaW5nL0Fzc2VydFBhcnNpbmdUZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovbGFuZy9qYXZhL3BhcnNlci9zdGF0ZW1lbnRQYXJzaW5nL0Fzc2VydFBhcnNpbmdUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWIyNWZmOQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9sYW5nL2phdmEvcGFyc2VyL3N0YXRlbWVudFBhcnNpbmcvQXNzZXJ0UGFyc2luZ1Rlc3QuamF2YQpAQCAtMCwwICsxLDI3IEBACisvKgorICogQ29weXJpZ2h0IDIwMDAtMjAxMiBKZXRCcmFpbnMgcy5yLm8uCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworcGFja2FnZSBjb20uaW50ZWxsaWoubGFuZy5qYXZhLnBhcnNlci5zdGF0ZW1lbnRQYXJzaW5nOworCitpbXBvcnQgY29tLmludGVsbGlqLmxhbmcuamF2YS5wYXJzZXIuSmF2YVBhcnNpbmdUZXN0Q2FzZTsKKworcHVibGljIGNsYXNzIEFzc2VydFBhcnNpbmdUZXN0IGV4dGVuZHMgSmF2YVBhcnNpbmdUZXN0Q2FzZSB7CisgIHB1YmxpYyBBc3NlcnRQYXJzaW5nVGVzdCgpIHsKKyAgICBzdXBlcigicGFyc2VyLWZ1bGwvc3RhdGVtZW50UGFyc2luZy9hc3NlcnQiKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3ROb3JtYWwxKCkgeyBkb1Rlc3QodHJ1ZSk7IH0KKyAgcHVibGljIHZvaWQgdGVzdE5vcm1hbDIoKSB7IGRvVGVzdCh0cnVlKTsgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9sYW5nL2phdmEvcGFyc2VyL3N0YXRlbWVudFBhcnNpbmcvQXNzaWdubWVudFBhcnNpbmdUZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovbGFuZy9qYXZhL3BhcnNlci9zdGF0ZW1lbnRQYXJzaW5nL0Fzc2lnbm1lbnRQYXJzaW5nVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ3NWRkZWMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovbGFuZy9qYXZhL3BhcnNlci9zdGF0ZW1lbnRQYXJzaW5nL0Fzc2lnbm1lbnRQYXJzaW5nVGVzdC5qYXZhCkBAIC0wLDAgKzEsMjYgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwMC0yMDEyIEpldEJyYWlucyBzLnIuby4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCitwYWNrYWdlIGNvbS5pbnRlbGxpai5sYW5nLmphdmEucGFyc2VyLnN0YXRlbWVudFBhcnNpbmc7CisKK2ltcG9ydCBjb20uaW50ZWxsaWoubGFuZy5qYXZhLnBhcnNlci5KYXZhUGFyc2luZ1Rlc3RDYXNlOworCitwdWJsaWMgY2xhc3MgQXNzaWdubWVudFBhcnNpbmdUZXN0IGV4dGVuZHMgSmF2YVBhcnNpbmdUZXN0Q2FzZSB7CisgIHB1YmxpYyBBc3NpZ25tZW50UGFyc2luZ1Rlc3QoKSB7CisgICAgc3VwZXIoInBhcnNlci1mdWxsL3N0YXRlbWVudFBhcnNpbmcvYXNzaWdubWVudCIpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFNpbXBsZSgpIHsgZG9UZXN0KHRydWUpOyB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2xhbmcvamF2YS9wYXJzZXIvc3RhdGVtZW50UGFyc2luZy9Db2RlQmxvY2tQYXJzaW5nVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2xhbmcvamF2YS9wYXJzZXIvc3RhdGVtZW50UGFyc2luZy9Db2RlQmxvY2tQYXJzaW5nVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYyN2Q3ZjUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovbGFuZy9qYXZhL3BhcnNlci9zdGF0ZW1lbnRQYXJzaW5nL0NvZGVCbG9ja1BhcnNpbmdUZXN0LmphdmEKQEAgLTAsMCArMSwyNyBAQAorLyoKKyAqIENvcHlyaWdodCAyMDAwLTIwMTIgSmV0QnJhaW5zIHMuci5vLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KK3BhY2thZ2UgY29tLmludGVsbGlqLmxhbmcuamF2YS5wYXJzZXIuc3RhdGVtZW50UGFyc2luZzsKKworaW1wb3J0IGNvbS5pbnRlbGxpai5sYW5nLmphdmEucGFyc2VyLkphdmFQYXJzaW5nVGVzdENhc2U7CisKK3B1YmxpYyBjbGFzcyBDb2RlQmxvY2tQYXJzaW5nVGVzdCBleHRlbmRzIEphdmFQYXJzaW5nVGVzdENhc2UgeworICBwdWJsaWMgQ29kZUJsb2NrUGFyc2luZ1Rlc3QoKSB7CisgICAgc3VwZXIoInBhcnNlci1mdWxsL3N0YXRlbWVudFBhcnNpbmcvY29kZUJsb2NrIik7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0U2ltcGxlKCkgeyBkb1Rlc3QodHJ1ZSk7IH0KKyAgcHVibGljIHZvaWQgdGVzdEFub255bW91c0luU21hcnRDb21wbGV0aW9uKCkgdGhyb3dzIFRocm93YWJsZSB7IGRvVGVzdCh0cnVlKTsgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9sYW5nL2phdmEvcGFyc2VyL3N0YXRlbWVudFBhcnNpbmcvRGVjbGFyYXRpb25zV2l0aEdlbmVyaWNzUGFyc2luZ1Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9sYW5nL2phdmEvcGFyc2VyL3N0YXRlbWVudFBhcnNpbmcvRGVjbGFyYXRpb25zV2l0aEdlbmVyaWNzUGFyc2luZ1Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZTZlY2E4Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2xhbmcvamF2YS9wYXJzZXIvc3RhdGVtZW50UGFyc2luZy9EZWNsYXJhdGlvbnNXaXRoR2VuZXJpY3NQYXJzaW5nVGVzdC5qYXZhCkBAIC0wLDAgKzEsMjcgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwMC0yMDEyIEpldEJyYWlucyBzLnIuby4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCitwYWNrYWdlIGNvbS5pbnRlbGxpai5sYW5nLmphdmEucGFyc2VyLnN0YXRlbWVudFBhcnNpbmc7CisKK2ltcG9ydCBjb20uaW50ZWxsaWoubGFuZy5qYXZhLnBhcnNlci5KYXZhUGFyc2luZ1Rlc3RDYXNlOworCitwdWJsaWMgY2xhc3MgRGVjbGFyYXRpb25zV2l0aEdlbmVyaWNzUGFyc2luZ1Rlc3QgZXh0ZW5kcyBKYXZhUGFyc2luZ1Rlc3RDYXNlIHsKKyAgcHVibGljIERlY2xhcmF0aW9uc1dpdGhHZW5lcmljc1BhcnNpbmdUZXN0KCkgeworICAgIHN1cGVyKCJwYXJzZXItZnVsbC9zdGF0ZW1lbnRQYXJzaW5nL2dlbmVyaWNzUGFyc2luZyIpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdExvY2FsVmFyKCkgeyBkb1Rlc3QodHJ1ZSk7IH0KKyAgcHVibGljIHZvaWQgdGVzdEZvcigpIHsgZG9UZXN0KHRydWUpOyB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2xhbmcvamF2YS9wYXJzZXIvc3RhdGVtZW50UGFyc2luZy9Eb1doaWxlUGFyc2luZ1Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9sYW5nL2phdmEvcGFyc2VyL3N0YXRlbWVudFBhcnNpbmcvRG9XaGlsZVBhcnNpbmdUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTMyOWVkYQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9sYW5nL2phdmEvcGFyc2VyL3N0YXRlbWVudFBhcnNpbmcvRG9XaGlsZVBhcnNpbmdUZXN0LmphdmEKQEAgLTAsMCArMSwzNCBAQAorLyoKKyAqIENvcHlyaWdodCAyMDAwLTIwMTIgSmV0QnJhaW5zIHMuci5vLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KK3BhY2thZ2UgY29tLmludGVsbGlqLmxhbmcuamF2YS5wYXJzZXIuc3RhdGVtZW50UGFyc2luZzsKKworaW1wb3J0IGNvbS5pbnRlbGxpai5sYW5nLmphdmEucGFyc2VyLkphdmFQYXJzaW5nVGVzdENhc2U7CisKK3B1YmxpYyBjbGFzcyBEb1doaWxlUGFyc2luZ1Rlc3QgZXh0ZW5kcyBKYXZhUGFyc2luZ1Rlc3RDYXNlIHsKKyAgcHVibGljIERvV2hpbGVQYXJzaW5nVGVzdCgpIHsKKyAgICBzdXBlcigicGFyc2VyLWZ1bGwvc3RhdGVtZW50UGFyc2luZy9kby13aGlsZSIpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdE5vcm1hbCgpIHsgZG9UZXN0KHRydWUpOyB9CisKKyAgcHVibGljIHZvaWQgdGVzdFVuY29tcGxldGUxKCkgeyBkb1Rlc3QodHJ1ZSk7IH0KKyAgcHVibGljIHZvaWQgdGVzdFVuY29tcGxldGUyKCkgeyBkb1Rlc3QodHJ1ZSk7IH0KKyAgcHVibGljIHZvaWQgdGVzdFVuY29tcGxldGUzKCkgeyBkb1Rlc3QodHJ1ZSk7IH0KKyAgcHVibGljIHZvaWQgdGVzdFVuY29tcGxldGU0KCkgeyBkb1Rlc3QodHJ1ZSk7IH0KKyAgcHVibGljIHZvaWQgdGVzdFVuY29tcGxldGU1KCkgeyBkb1Rlc3QodHJ1ZSk7IH0KKyAgcHVibGljIHZvaWQgdGVzdFVuY29tcGxldGU2KCkgeyBkb1Rlc3QodHJ1ZSk7IH0KKyAgcHVibGljIHZvaWQgdGVzdFVuY29tcGxldGU3KCkgeyBkb1Rlc3QodHJ1ZSk7IH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovbGFuZy9qYXZhL3BhcnNlci9zdGF0ZW1lbnRQYXJzaW5nL0ZvclBhcnNpbmdUZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovbGFuZy9qYXZhL3BhcnNlci9zdGF0ZW1lbnRQYXJzaW5nL0ZvclBhcnNpbmdUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODI3Y2U1OQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9sYW5nL2phdmEvcGFyc2VyL3N0YXRlbWVudFBhcnNpbmcvRm9yUGFyc2luZ1Rlc3QuamF2YQpAQCAtMCwwICsxLDM5IEBACisvKgorICogQ29weXJpZ2h0IDIwMDAtMjAxMiBKZXRCcmFpbnMgcy5yLm8uCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworcGFja2FnZSBjb20uaW50ZWxsaWoubGFuZy5qYXZhLnBhcnNlci5zdGF0ZW1lbnRQYXJzaW5nOworCitpbXBvcnQgY29tLmludGVsbGlqLmxhbmcuamF2YS5wYXJzZXIuSmF2YVBhcnNpbmdUZXN0Q2FzZTsKKworcHVibGljIGNsYXNzIEZvclBhcnNpbmdUZXN0IGV4dGVuZHMgSmF2YVBhcnNpbmdUZXN0Q2FzZSB7CisgIHB1YmxpYyBGb3JQYXJzaW5nVGVzdCgpIHsKKyAgICBzdXBlcigicGFyc2VyLWZ1bGwvc3RhdGVtZW50UGFyc2luZy9mb3IiKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3ROb3JtYWwxKCkgeyBkb1Rlc3QodHJ1ZSk7IH0KKyAgcHVibGljIHZvaWQgdGVzdE5vcm1hbDIoKSB7IGRvVGVzdCh0cnVlKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0Rm9yRWFjaDEoKSB7IGRvVGVzdCh0cnVlKTsgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RVbmNvbXBsZXRlMSgpIHsgZG9UZXN0KHRydWUpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RVbmNvbXBsZXRlMigpIHsgZG9UZXN0KHRydWUpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RVbmNvbXBsZXRlMygpIHsgZG9UZXN0KHRydWUpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RVbmNvbXBsZXRlNCgpIHsgZG9UZXN0KHRydWUpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RVbmNvbXBsZXRlNSgpIHsgZG9UZXN0KHRydWUpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RVbmNvbXBsZXRlNigpIHsgZG9UZXN0KHRydWUpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RVbmNvbXBsZXRlNygpIHsgZG9UZXN0KHRydWUpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RVbmNvbXBsZXRlOCgpIHsgZG9UZXN0KHRydWUpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RVbmNvbXBsZXRlOSgpIHsgZG9UZXN0KHRydWUpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RVbmNvbXBsZXRlMTAoKSB7IGRvVGVzdCh0cnVlKTsgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9sYW5nL2phdmEvcGFyc2VyL3N0YXRlbWVudFBhcnNpbmcvSWZQYXJzaW5nVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2xhbmcvamF2YS9wYXJzZXIvc3RhdGVtZW50UGFyc2luZy9JZlBhcnNpbmdUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGZjYTcxYgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9sYW5nL2phdmEvcGFyc2VyL3N0YXRlbWVudFBhcnNpbmcvSWZQYXJzaW5nVGVzdC5qYXZhCkBAIC0wLDAgKzEsMzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwMC0yMDEyIEpldEJyYWlucyBzLnIuby4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCitwYWNrYWdlIGNvbS5pbnRlbGxpai5sYW5nLmphdmEucGFyc2VyLnN0YXRlbWVudFBhcnNpbmc7CisKK2ltcG9ydCBjb20uaW50ZWxsaWoubGFuZy5qYXZhLnBhcnNlci5KYXZhUGFyc2luZ1Rlc3RDYXNlOworCitwdWJsaWMgY2xhc3MgSWZQYXJzaW5nVGVzdCBleHRlbmRzIEphdmFQYXJzaW5nVGVzdENhc2UgeworICBwdWJsaWMgSWZQYXJzaW5nVGVzdCgpIHsKKyAgICBzdXBlcigicGFyc2VyLWZ1bGwvc3RhdGVtZW50UGFyc2luZy9pZiIpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdE5vcm1hbFdpdGhFbHNlKCkgeyBkb1Rlc3QodHJ1ZSk7IH0KKyAgcHVibGljIHZvaWQgdGVzdE5vcm1hbE5vRWxzZSgpIHsgZG9UZXN0KHRydWUpOyB9CisKKyAgcHVibGljIHZvaWQgdGVzdFVuY29tcGxldGUxKCkgeyBkb1Rlc3QodHJ1ZSk7IH0KKyAgcHVibGljIHZvaWQgdGVzdFVuY29tcGxldGUyKCkgeyBkb1Rlc3QodHJ1ZSk7IH0KKyAgcHVibGljIHZvaWQgdGVzdFVuY29tcGxldGUzKCkgeyBkb1Rlc3QodHJ1ZSk7IH0KKyAgcHVibGljIHZvaWQgdGVzdFVuY29tcGxldGU0KCkgeyBkb1Rlc3QodHJ1ZSk7IH0KKyAgcHVibGljIHZvaWQgdGVzdFVuY29tcGxldGU1KCkgeyBkb1Rlc3QodHJ1ZSk7IH0KKyAgcHVibGljIHZvaWQgdGVzdFVuY29tcGxldGU2KCkgeyBkb1Rlc3QodHJ1ZSk7IH0KKyAgcHVibGljIHZvaWQgdGVzdFVuY29tcGxldGU3KCkgeyBkb1Rlc3QodHJ1ZSk7IH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovbGFuZy9qYXZhL3BhcnNlci9zdGF0ZW1lbnRQYXJzaW5nL0xhYmVsUGFyc2luZ1Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9sYW5nL2phdmEvcGFyc2VyL3N0YXRlbWVudFBhcnNpbmcvTGFiZWxQYXJzaW5nVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk5MmI3ODgKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovbGFuZy9qYXZhL3BhcnNlci9zdGF0ZW1lbnRQYXJzaW5nL0xhYmVsUGFyc2luZ1Rlc3QuamF2YQpAQCAtMCwwICsxLDI2IEBACisvKgorICogQ29weXJpZ2h0IDIwMDAtMjAxMiBKZXRCcmFpbnMgcy5yLm8uCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworcGFja2FnZSBjb20uaW50ZWxsaWoubGFuZy5qYXZhLnBhcnNlci5zdGF0ZW1lbnRQYXJzaW5nOworCitpbXBvcnQgY29tLmludGVsbGlqLmxhbmcuamF2YS5wYXJzZXIuSmF2YVBhcnNpbmdUZXN0Q2FzZTsKKworcHVibGljIGNsYXNzIExhYmVsUGFyc2luZ1Rlc3QgZXh0ZW5kcyBKYXZhUGFyc2luZ1Rlc3RDYXNlIHsKKyAgcHVibGljIExhYmVsUGFyc2luZ1Rlc3QoKSB7CisgICAgc3VwZXIoInBhcnNlci1mdWxsL3N0YXRlbWVudFBhcnNpbmcvbGFiZWwiKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RTaW1wbGUoKSB7IGRvVGVzdCh0cnVlKTsgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9sYW5nL2phdmEvcGFyc2VyL3N0YXRlbWVudFBhcnNpbmcvUmV0dXJuUGFyc2luZ1Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9sYW5nL2phdmEvcGFyc2VyL3N0YXRlbWVudFBhcnNpbmcvUmV0dXJuUGFyc2luZ1Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iODUzZTcxCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2xhbmcvamF2YS9wYXJzZXIvc3RhdGVtZW50UGFyc2luZy9SZXR1cm5QYXJzaW5nVGVzdC5qYXZhCkBAIC0wLDAgKzEsMzAgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwMC0yMDEyIEpldEJyYWlucyBzLnIuby4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCitwYWNrYWdlIGNvbS5pbnRlbGxpai5sYW5nLmphdmEucGFyc2VyLnN0YXRlbWVudFBhcnNpbmc7CisKK2ltcG9ydCBjb20uaW50ZWxsaWoubGFuZy5qYXZhLnBhcnNlci5KYXZhUGFyc2luZ1Rlc3RDYXNlOworCitwdWJsaWMgY2xhc3MgUmV0dXJuUGFyc2luZ1Rlc3QgZXh0ZW5kcyBKYXZhUGFyc2luZ1Rlc3RDYXNlIHsKKyAgcHVibGljIFJldHVyblBhcnNpbmdUZXN0KCkgeworICAgIHN1cGVyKCJwYXJzZXItZnVsbC9zdGF0ZW1lbnRQYXJzaW5nL3JldHVybiIpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdE5vcm1hbE5vUmVzdWx0KCkgeyBkb1Rlc3QodHJ1ZSk7IH0KKyAgcHVibGljIHZvaWQgdGVzdE5vcm1hbFdpdGhSZXN1bHQoKSB7IGRvVGVzdCh0cnVlKTsgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RVbmNvbXBsZXRlMSgpIHsgZG9UZXN0KHRydWUpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RVbmNvbXBsZXRlMigpIHsgZG9UZXN0KHRydWUpOyB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2xhbmcvamF2YS9wYXJzZXIvc3RhdGVtZW50UGFyc2luZy9Td2l0Y2hQYXJzaW5nVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2xhbmcvamF2YS9wYXJzZXIvc3RhdGVtZW50UGFyc2luZy9Td2l0Y2hQYXJzaW5nVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFmYzY2YzgKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovbGFuZy9qYXZhL3BhcnNlci9zdGF0ZW1lbnRQYXJzaW5nL1N3aXRjaFBhcnNpbmdUZXN0LmphdmEKQEAgLTAsMCArMSwzMyBAQAorLyoKKyAqIENvcHlyaWdodCAyMDAwLTIwMTIgSmV0QnJhaW5zIHMuci5vLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KK3BhY2thZ2UgY29tLmludGVsbGlqLmxhbmcuamF2YS5wYXJzZXIuc3RhdGVtZW50UGFyc2luZzsKKworaW1wb3J0IGNvbS5pbnRlbGxpai5sYW5nLmphdmEucGFyc2VyLkphdmFQYXJzaW5nVGVzdENhc2U7CisKK3B1YmxpYyBjbGFzcyBTd2l0Y2hQYXJzaW5nVGVzdCBleHRlbmRzIEphdmFQYXJzaW5nVGVzdENhc2UgeworICBwdWJsaWMgU3dpdGNoUGFyc2luZ1Rlc3QoKSB7CisgICAgc3VwZXIoInBhcnNlci1mdWxsL3N0YXRlbWVudFBhcnNpbmcvc3dpdGNoIik7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0Tm9ybWFsKCkgeyBkb1Rlc3QodHJ1ZSk7IH0KKworICBwdWJsaWMgdm9pZCB0ZXN0VW5jb21wbGV0ZTEoKSB7IGRvVGVzdCh0cnVlKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0VW5jb21wbGV0ZTIoKSB7IGRvVGVzdCh0cnVlKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0VW5jb21wbGV0ZTMoKSB7IGRvVGVzdCh0cnVlKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0VW5jb21wbGV0ZTQoKSB7IGRvVGVzdCh0cnVlKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0VW5jb21wbGV0ZTUoKSB7IGRvVGVzdCh0cnVlKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0VW5jb21wbGV0ZTYoKSB7IGRvVGVzdCh0cnVlKTsgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9sYW5nL2phdmEvcGFyc2VyL3N0YXRlbWVudFBhcnNpbmcvU3luY2hyb25pemVkUGFyc2luZ1Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9sYW5nL2phdmEvcGFyc2VyL3N0YXRlbWVudFBhcnNpbmcvU3luY2hyb25pemVkUGFyc2luZ1Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYWMyNmRhCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2xhbmcvamF2YS9wYXJzZXIvc3RhdGVtZW50UGFyc2luZy9TeW5jaHJvbml6ZWRQYXJzaW5nVGVzdC5qYXZhCkBAIC0wLDAgKzEsMzMgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwMC0yMDEyIEpldEJyYWlucyBzLnIuby4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCitwYWNrYWdlIGNvbS5pbnRlbGxpai5sYW5nLmphdmEucGFyc2VyLnN0YXRlbWVudFBhcnNpbmc7CisKK2ltcG9ydCBjb20uaW50ZWxsaWoubGFuZy5qYXZhLnBhcnNlci5KYXZhUGFyc2luZ1Rlc3RDYXNlOworCitwdWJsaWMgY2xhc3MgU3luY2hyb25pemVkUGFyc2luZ1Rlc3QgZXh0ZW5kcyBKYXZhUGFyc2luZ1Rlc3RDYXNlIHsKKyAgcHVibGljIFN5bmNocm9uaXplZFBhcnNpbmdUZXN0KCkgeworICAgIHN1cGVyKCJwYXJzZXItZnVsbC9zdGF0ZW1lbnRQYXJzaW5nL3N5bmNocm9uaXplZCIpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdE5vcm1hbCgpIHsgZG9UZXN0KHRydWUpOyB9CisKKyAgcHVibGljIHZvaWQgdGVzdFVuY29tcGxldGUxKCkgeyBkb1Rlc3QodHJ1ZSk7IH0KKyAgcHVibGljIHZvaWQgdGVzdFVuY29tcGxldGUyKCkgeyBkb1Rlc3QodHJ1ZSk7IH0KKyAgcHVibGljIHZvaWQgdGVzdFVuY29tcGxldGUzKCkgeyBkb1Rlc3QodHJ1ZSk7IH0KKyAgcHVibGljIHZvaWQgdGVzdFVuY29tcGxldGU0KCkgeyBkb1Rlc3QodHJ1ZSk7IH0KKyAgcHVibGljIHZvaWQgdGVzdFVuY29tcGxldGU1KCkgeyBkb1Rlc3QodHJ1ZSk7IH0KKyAgcHVibGljIHZvaWQgdGVzdFVuY29tcGxldGU2KCkgeyBkb1Rlc3QodHJ1ZSk7IH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovbGFuZy9qYXZhL3BhcnNlci9zdGF0ZW1lbnRQYXJzaW5nL1Rocm93UGFyc2luZ1Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9sYW5nL2phdmEvcGFyc2VyL3N0YXRlbWVudFBhcnNpbmcvVGhyb3dQYXJzaW5nVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlkZWFjNGQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovbGFuZy9qYXZhL3BhcnNlci9zdGF0ZW1lbnRQYXJzaW5nL1Rocm93UGFyc2luZ1Rlc3QuamF2YQpAQCAtMCwwICsxLDI5IEBACisvKgorICogQ29weXJpZ2h0IDIwMDAtMjAxMiBKZXRCcmFpbnMgcy5yLm8uCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworcGFja2FnZSBjb20uaW50ZWxsaWoubGFuZy5qYXZhLnBhcnNlci5zdGF0ZW1lbnRQYXJzaW5nOworCitpbXBvcnQgY29tLmludGVsbGlqLmxhbmcuamF2YS5wYXJzZXIuSmF2YVBhcnNpbmdUZXN0Q2FzZTsKKworcHVibGljIGNsYXNzIFRocm93UGFyc2luZ1Rlc3QgZXh0ZW5kcyBKYXZhUGFyc2luZ1Rlc3RDYXNlIHsKKyAgcHVibGljIFRocm93UGFyc2luZ1Rlc3QoKSB7CisgICAgc3VwZXIoInBhcnNlci1mdWxsL3N0YXRlbWVudFBhcnNpbmcvdGhyb3ciKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3ROb3JtYWwoKSB7IGRvVGVzdCh0cnVlKTsgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RVbmNvbXBsZXRlMSgpIHsgZG9UZXN0KHRydWUpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RVbmNvbXBsZXRlMigpIHsgZG9UZXN0KHRydWUpOyB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2xhbmcvamF2YS9wYXJzZXIvc3RhdGVtZW50UGFyc2luZy9UcnlQYXJzaW5nVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2xhbmcvamF2YS9wYXJzZXIvc3RhdGVtZW50UGFyc2luZy9UcnlQYXJzaW5nVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNiNDhjMjQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovbGFuZy9qYXZhL3BhcnNlci9zdGF0ZW1lbnRQYXJzaW5nL1RyeVBhcnNpbmdUZXN0LmphdmEKQEAgLTAsMCArMSwzOSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDAwLTIwMTIgSmV0QnJhaW5zIHMuci5vLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KK3BhY2thZ2UgY29tLmludGVsbGlqLmxhbmcuamF2YS5wYXJzZXIuc3RhdGVtZW50UGFyc2luZzsKKworaW1wb3J0IGNvbS5pbnRlbGxpai5sYW5nLmphdmEucGFyc2VyLkphdmFQYXJzaW5nVGVzdENhc2U7CisKK3B1YmxpYyBjbGFzcyBUcnlQYXJzaW5nVGVzdCBleHRlbmRzIEphdmFQYXJzaW5nVGVzdENhc2UgeworICBwdWJsaWMgVHJ5UGFyc2luZ1Rlc3QoKSB7CisgICAgc3VwZXIoInBhcnNlci1mdWxsL3N0YXRlbWVudFBhcnNpbmcvdHJ5Iik7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0Tm9ybWFsMSgpIHsgZG9UZXN0KHRydWUpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3ROb3JtYWwyKCkgeyBkb1Rlc3QodHJ1ZSk7IH0KKyAgcHVibGljIHZvaWQgdGVzdE5vcm1hbDMoKSB7IGRvVGVzdCh0cnVlKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0Tm9ybWFsNCgpIHsgZG9UZXN0KHRydWUpOyB9CisKKyAgcHVibGljIHZvaWQgdGVzdEluY29tcGxldGUxKCkgeyBkb1Rlc3QodHJ1ZSk7IH0KKyAgcHVibGljIHZvaWQgdGVzdEluY29tcGxldGUyKCkgeyBkb1Rlc3QodHJ1ZSk7IH0KKyAgcHVibGljIHZvaWQgdGVzdEluY29tcGxldGUzKCkgeyBkb1Rlc3QodHJ1ZSk7IH0KKyAgcHVibGljIHZvaWQgdGVzdEluY29tcGxldGU0KCkgeyBkb1Rlc3QodHJ1ZSk7IH0KKyAgcHVibGljIHZvaWQgdGVzdEluY29tcGxldGU1KCkgeyBkb1Rlc3QodHJ1ZSk7IH0KKyAgcHVibGljIHZvaWQgdGVzdEluY29tcGxldGU2KCkgeyBkb1Rlc3QodHJ1ZSk7IH0KKyAgcHVibGljIHZvaWQgdGVzdEluY29tcGxldGU3KCkgeyBkb1Rlc3QodHJ1ZSk7IH0KKyAgcHVibGljIHZvaWQgdGVzdEluY29tcGxldGU4KCkgeyBkb1Rlc3QodHJ1ZSk7IH0KKyAgcHVibGljIHZvaWQgdGVzdEluY29tcGxldGU5KCkgeyBkb1Rlc3QodHJ1ZSk7IH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovbGFuZy9qYXZhL3BhcnNlci9zdGF0ZW1lbnRQYXJzaW5nL1doaWxlUGFyc2luZ1Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9sYW5nL2phdmEvcGFyc2VyL3N0YXRlbWVudFBhcnNpbmcvV2hpbGVQYXJzaW5nVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIxMGRhOWEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovbGFuZy9qYXZhL3BhcnNlci9zdGF0ZW1lbnRQYXJzaW5nL1doaWxlUGFyc2luZ1Rlc3QuamF2YQpAQCAtMCwwICsxLDMzIEBACisvKgorICogQ29weXJpZ2h0IDIwMDAtMjAxMiBKZXRCcmFpbnMgcy5yLm8uCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworcGFja2FnZSBjb20uaW50ZWxsaWoubGFuZy5qYXZhLnBhcnNlci5zdGF0ZW1lbnRQYXJzaW5nOworCitpbXBvcnQgY29tLmludGVsbGlqLmxhbmcuamF2YS5wYXJzZXIuSmF2YVBhcnNpbmdUZXN0Q2FzZTsKKworcHVibGljIGNsYXNzIFdoaWxlUGFyc2luZ1Rlc3QgZXh0ZW5kcyBKYXZhUGFyc2luZ1Rlc3RDYXNlIHsKKyAgcHVibGljIFdoaWxlUGFyc2luZ1Rlc3QoKSB7CisgICAgc3VwZXIoInBhcnNlci1mdWxsL3N0YXRlbWVudFBhcnNpbmcvd2hpbGUiKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3ROb3JtYWwoKSB7IGRvVGVzdCh0cnVlKTsgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RVbmNvbXBsZXRlMSgpIHsgZG9UZXN0KHRydWUpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RVbmNvbXBsZXRlMigpIHsgZG9UZXN0KHRydWUpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RVbmNvbXBsZXRlMygpIHsgZG9UZXN0KHRydWUpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RVbmNvbXBsZXRlNCgpIHsgZG9UZXN0KHRydWUpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RVbmNvbXBsZXRlNSgpIHsgZG9UZXN0KHRydWUpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RVbmNvbXBsZXRlNigpIHsgZG9UZXN0KHRydWUpOyB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2xhbmcvcHNpL1BzaUJ1aWxkZXJUZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovbGFuZy9wc2kvUHNpQnVpbGRlclRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZGM5NTRiCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2xhbmcvcHNpL1BzaUJ1aWxkZXJUZXN0LmphdmEKQEAgLTAsMCArMSwyMzIgQEAKK3BhY2thZ2UgY29tLmludGVsbGlqLmxhbmcucHNpOworCitpbXBvcnQgY29tLmludGVsbGlqLmxhbmcuKjsKK2ltcG9ydCBjb20uaW50ZWxsaWoubGFuZy5pbXBsLlBzaUJ1aWxkZXJJbXBsOworaW1wb3J0IGNvbS5pbnRlbGxpai5sZXhlci5KYXZhTGV4ZXI7CitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkuZmlsZVR5cGVzLlN0ZEZpbGVUeXBlczsKK2ltcG9ydCBjb20uaW50ZWxsaWoucG9tLmphdmEuTGFuZ3VhZ2VMZXZlbDsKK2ltcG9ydCBjb20uaW50ZWxsaWoucHNpLkphdmFUb2tlblR5cGU7CitpbXBvcnQgY29tLmludGVsbGlqLnBzaS5Qc2lGaWxlOworaW1wb3J0IGNvbS5pbnRlbGxpai5wc2kuaW1wbC5qYXZhLnN0dWJzLkphdmFTdHViRWxlbWVudFR5cGVzOworaW1wb3J0IGNvbS5pbnRlbGxpai5wc2kuaW1wbC5zb3VyY2UuRHVtbXlIb2xkZXI7CitpbXBvcnQgY29tLmludGVsbGlqLnBzaS5pbXBsLnNvdXJjZS50cmVlLkphdmFFbGVtZW50VHlwZTsKK2ltcG9ydCBjb20uaW50ZWxsaWoucHNpLmltcGwuc291cmNlLnRyZWUuU2hhcmVkSW1wbFV0aWw7CitpbXBvcnQgY29tLmludGVsbGlqLnBzaS5pbXBsLnNvdXJjZS50cmVlLlRyZWVFbGVtZW50OworaW1wb3J0IGNvbS5pbnRlbGxpai5wc2kudGV4dC5CbG9ja1N1cHBvcnQ7CitpbXBvcnQgY29tLmludGVsbGlqLnRlc3RGcmFtZXdvcmsuTGlnaHRJZGVhVGVzdENhc2U7CitpbXBvcnQganVuaXQuZnJhbWV3b3JrLkFzc2VydGlvbkZhaWxlZEVycm9yOworCisvKioKKyAqIERhdGU6IEphbiAyMSwgMjAwNQorICogQGF1dGhvciBtYXgKKyAqLworcHVibGljIGNsYXNzIFBzaUJ1aWxkZXJUZXN0IGV4dGVuZHMgTGlnaHRJZGVhVGVzdENhc2UgeworICBwcml2YXRlIFBzaUJ1aWxkZXJJbXBsIG15QnVpbGRlcjsKKworICBwdWJsaWMgdm9pZCB0ZXN0RW1wdHlQcm9ncmFtKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgbXlCdWlsZGVyID0gY3JlYXRlQnVpbGRlcigiIik7CisgICAgZmluYWwgUHNpQnVpbGRlci5NYXJrZXIgZmlsZU1hcmtlciA9IG15QnVpbGRlci5tYXJrKCk7CisgICAgZmlsZU1hcmtlci5kb25lKEphdmFTdHViRWxlbWVudFR5cGVzLkpBVkFfRklMRSk7CisgICAgQVNUTm9kZSBmaWxlTm9kZSA9IG15QnVpbGRlci5nZXRUcmVlQnVpbHQoKTsKKyAgICBhc3NlcnROb3ROdWxsKGZpbGVOb2RlKTsKKyAgICBhc3NlcnRFcXVhbHMoIiIsIGZpbGVOb2RlLmdldFRleHQoKSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0UHJvZ3JhbVdpdGhTaW5nbGVLZXl3b3JkKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgbXlCdWlsZGVyID0gY3JlYXRlQnVpbGRlcigicGFja2FnZSIpOworCisgICAgZmluYWwgUHNpQnVpbGRlci5NYXJrZXIgZmlsZU1hcmtlciA9IG15QnVpbGRlci5tYXJrKCk7CisgICAgYXNzZXJ0RXF1YWxzKCJwYWNrYWdlIiwgbXlCdWlsZGVyLmdldFRva2VuVGV4dCgpKTsKKyAgICBhc3NlcnRFcXVhbHMoSmF2YVRva2VuVHlwZS5QQUNLQUdFX0tFWVdPUkQsIG15QnVpbGRlci5nZXRUb2tlblR5cGUoKSk7CisgICAgZmluYWwgUHNpQnVpbGRlci5NYXJrZXIgcGFja2FnZVN0YXRlbWVudE1hcmtlciA9IG15QnVpbGRlci5tYXJrKCk7CisgICAgbXlCdWlsZGVyLmFkdmFuY2VMZXhlcigpOworICAgIGFzc2VydFRydWUobXlCdWlsZGVyLmVvZigpKTsKKyAgICBwYWNrYWdlU3RhdGVtZW50TWFya2VyLmRvbmUoSmF2YUVsZW1lbnRUeXBlLlBBQ0tBR0VfU1RBVEVNRU5UKTsKKyAgICBmaWxlTWFya2VyLmRvbmUoSmF2YVN0dWJFbGVtZW50VHlwZXMuSkFWQV9GSUxFKTsKKworICAgIEFTVE5vZGUgZmlsZU5vZGUgPSBteUJ1aWxkZXIuZ2V0VHJlZUJ1aWx0KCk7CisgICAgYXNzZXJ0Tm90TnVsbChmaWxlTm9kZSk7CisgICAgYXNzZXJ0RXF1YWxzKCJwYWNrYWdlIiwgZmlsZU5vZGUuZ2V0VGV4dCgpKTsKKyAgICBhc3NlcnRTYW1lKGZpbGVOb2RlLmdldEZpcnN0Q2hpbGROb2RlKCksIGZpbGVOb2RlLmdldExhc3RDaGlsZE5vZGUoKSk7CisgICAgQVNUTm9kZSBwYWNrYWdlTm9kZSA9IGZpbGVOb2RlLmdldEZpcnN0Q2hpbGROb2RlKCk7CisgICAgYXNzZXJ0Tm90TnVsbChwYWNrYWdlTm9kZSk7CisgICAgYXNzZXJ0RXF1YWxzKCJwYWNrYWdlIiwgcGFja2FnZU5vZGUuZ2V0VGV4dCgpKTsKKyAgICBhc3NlcnRFcXVhbHMoSmF2YUVsZW1lbnRUeXBlLlBBQ0tBR0VfU1RBVEVNRU5ULCBwYWNrYWdlTm9kZS5nZXRFbGVtZW50VHlwZSgpKTsKKworICAgIEFTVE5vZGUgbGVhZiA9IHBhY2thZ2VOb2RlLmdldEZpcnN0Q2hpbGROb2RlKCk7CisgICAgYXNzZXJ0Tm90TnVsbChsZWFmKTsKKyAgICBhc3NlcnRFcXVhbHMoSmF2YVRva2VuVHlwZS5QQUNLQUdFX0tFWVdPUkQsIGxlYWYuZ2V0RWxlbWVudFR5cGUoKSk7CisgIH0KKworICBwcml2YXRlIHN0YXRpYyBQc2lCdWlsZGVySW1wbCBjcmVhdGVCdWlsZGVyKGZpbmFsIFN0cmluZyB0ZXh0KSB7CisgICAgcmV0dXJuIGNyZWF0ZUJ1aWxkZXIodGV4dCxudWxsKTsKKyAgfQorICBwcml2YXRlIHN0YXRpYyBQc2lCdWlsZGVySW1wbCBjcmVhdGVCdWlsZGVyKGZpbmFsIFN0cmluZyB0ZXh0LCBBU1ROb2RlIG9yaWdpbmFsVHJlZSkgeworICAgIGZpbmFsIExhbmd1YWdlIGxhbmcgPSBTdGRGaWxlVHlwZXMuSkFWQS5nZXRMYW5ndWFnZSgpOworICAgIGZpbmFsIFBhcnNlckRlZmluaXRpb24gcGFyc2VyRGVmaW5pdGlvbiA9IExhbmd1YWdlUGFyc2VyRGVmaW5pdGlvbnMuSU5TVEFOQ0UuZm9yTGFuZ3VhZ2UobGFuZyk7CisgICAgYXNzZXJ0Tm90TnVsbChwYXJzZXJEZWZpbml0aW9uKTsKKyAgICBQc2lGaWxlIHBzaUZpbGUgPSBjcmVhdGVGaWxlKCJ4LmphdmEiLCB0ZXh0KTsKKyAgICByZXR1cm4gbmV3IFBzaUJ1aWxkZXJJbXBsKGdldFByb2plY3QoKSwgcHNpRmlsZSwgcGFyc2VyRGVmaW5pdGlvbiwgbmV3IEphdmFMZXhlcihMYW5ndWFnZUxldmVsLkpES18xXzUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2hhcmVkSW1wbFV0aWwuZmluZENoYXJUYWJsZUJ5VHJlZShwc2lGaWxlLmdldE5vZGUoKSksIHRleHQsIG9yaWdpbmFsVHJlZSwgbnVsbCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0VHJhaWxpbmdXaGl0ZXNwYWNlcygpIHRocm93cyBFeGNlcHRpb24geworICAgIG15QnVpbGRlciA9IGNyZWF0ZUJ1aWxkZXIoImZvb1xuXG54Iik7CisgICAgZmluYWwgUHNpQnVpbGRlci5NYXJrZXIgbWFya2VyID0gbXlCdWlsZGVyLm1hcmsoKTsKKyAgICB3aGlsZSAoIW15QnVpbGRlci5lb2YoKSkgeworICAgICAgbXlCdWlsZGVyLmFkdmFuY2VMZXhlcigpOworICAgIH0KKyAgICBtYXJrZXIuZG9uZShKYXZhU3R1YkVsZW1lbnRUeXBlcy5KQVZBX0ZJTEUpOworICAgIGFzc2VydEVxdWFscygiZm9vXG5cbngiLCBteUJ1aWxkZXIuZ2V0VHJlZUJ1aWx0KCkuZ2V0VGV4dCgpKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RSb2xsYmFjaygpIHRocm93cyBFeGNlcHRpb24geworICAgIG15QnVpbGRlciA9IGNyZWF0ZUJ1aWxkZXIoInBhY2thZ2UiKTsKKworICAgIFBzaUJ1aWxkZXIuTWFya2VyIGZpbGVNYXJrZXIgPSBteUJ1aWxkZXIubWFyaygpOworICAgIGFzc2VydEVxdWFscygicGFja2FnZSIsIG15QnVpbGRlci5nZXRUb2tlblRleHQoKSk7CisgICAgYXNzZXJ0RXF1YWxzKEphdmFUb2tlblR5cGUuUEFDS0FHRV9LRVlXT1JELCBteUJ1aWxkZXIuZ2V0VG9rZW5UeXBlKCkpOworICAgIFBzaUJ1aWxkZXIuTWFya2VyIHBhY2thZ2VTdGF0ZW1lbnRNYXJrZXIgPSBteUJ1aWxkZXIubWFyaygpOworICAgIG15QnVpbGRlci5hZHZhbmNlTGV4ZXIoKTsKKyAgICBhc3NlcnRUcnVlKG15QnVpbGRlci5lb2YoKSk7CisgICAgcGFja2FnZVN0YXRlbWVudE1hcmtlci5kb25lKEphdmFFbGVtZW50VHlwZS5QQUNLQUdFX1NUQVRFTUVOVCk7CisKKyAgICBmaWxlTWFya2VyLnJvbGxiYWNrVG8oKTsKKworICAgIGZpbGVNYXJrZXIgPSBteUJ1aWxkZXIubWFyaygpOworICAgIGFzc2VydEVxdWFscygicGFja2FnZSIsIG15QnVpbGRlci5nZXRUb2tlblRleHQoKSk7CisgICAgYXNzZXJ0RXF1YWxzKEphdmFUb2tlblR5cGUuUEFDS0FHRV9LRVlXT1JELCBteUJ1aWxkZXIuZ2V0VG9rZW5UeXBlKCkpOworICAgIHBhY2thZ2VTdGF0ZW1lbnRNYXJrZXIgPSBteUJ1aWxkZXIubWFyaygpOworICAgIG15QnVpbGRlci5hZHZhbmNlTGV4ZXIoKTsKKyAgICBhc3NlcnRUcnVlKG15QnVpbGRlci5lb2YoKSk7CisgICAgcGFja2FnZVN0YXRlbWVudE1hcmtlci5kb25lKEphdmFFbGVtZW50VHlwZS5QQUNLQUdFX1NUQVRFTUVOVCk7CisgICAgZmlsZU1hcmtlci5kb25lKEphdmFTdHViRWxlbWVudFR5cGVzLkpBVkFfRklMRSk7CisKKyAgICBBU1ROb2RlIGZpbGVOb2RlID0gbXlCdWlsZGVyLmdldFRyZWVCdWlsdCgpOworICAgIGFzc2VydE5vdE51bGwoZmlsZU5vZGUpOworICAgIGFzc2VydEVxdWFscygicGFja2FnZSIsIGZpbGVOb2RlLmdldFRleHQoKSk7CisgICAgYXNzZXJ0U2FtZShmaWxlTm9kZS5nZXRGaXJzdENoaWxkTm9kZSgpLCBmaWxlTm9kZS5nZXRMYXN0Q2hpbGROb2RlKCkpOworICAgIEFTVE5vZGUgcGFja2FnZU5vZGUgPSBmaWxlTm9kZS5nZXRGaXJzdENoaWxkTm9kZSgpOworICAgIGFzc2VydE5vdE51bGwocGFja2FnZU5vZGUpOworICAgIGFzc2VydEVxdWFscygicGFja2FnZSIsIHBhY2thZ2VOb2RlLmdldFRleHQoKSk7CisgICAgYXNzZXJ0RXF1YWxzKEphdmFFbGVtZW50VHlwZS5QQUNLQUdFX1NUQVRFTUVOVCwgcGFja2FnZU5vZGUuZ2V0RWxlbWVudFR5cGUoKSk7CisKKyAgICBBU1ROb2RlIGxlYWYgPSBwYWNrYWdlTm9kZS5nZXRGaXJzdENoaWxkTm9kZSgpOworICAgIGFzc2VydE5vdE51bGwobGVhZik7CisgICAgYXNzZXJ0RXF1YWxzKEphdmFUb2tlblR5cGUuUEFDS0FHRV9LRVlXT1JELCBsZWFmLmdldEVsZW1lbnRUeXBlKCkpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdERyb3AoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBteUJ1aWxkZXIgPSBjcmVhdGVCdWlsZGVyKCJwYWNrYWdlIik7CisKKyAgICBmaW5hbCBQc2lCdWlsZGVyLk1hcmtlciBmaWxlTWFya2VyID0gbXlCdWlsZGVyLm1hcmsoKTsKKyAgICBhc3NlcnRFcXVhbHMoInBhY2thZ2UiLCBteUJ1aWxkZXIuZ2V0VG9rZW5UZXh0KCkpOworICAgIGFzc2VydEVxdWFscyhKYXZhVG9rZW5UeXBlLlBBQ0tBR0VfS0VZV09SRCwgbXlCdWlsZGVyLmdldFRva2VuVHlwZSgpKTsKKyAgICBmaW5hbCBQc2lCdWlsZGVyLk1hcmtlciBwYWNrYWdlU3RhdGVtZW50TWFya2VyID0gbXlCdWlsZGVyLm1hcmsoKTsKKyAgICBteUJ1aWxkZXIuYWR2YW5jZUxleGVyKCk7CisgICAgYXNzZXJ0VHJ1ZShteUJ1aWxkZXIuZW9mKCkpOworICAgIHBhY2thZ2VTdGF0ZW1lbnRNYXJrZXIuZHJvcCgpOworICAgIGZpbGVNYXJrZXIuZG9uZShKYXZhU3R1YkVsZW1lbnRUeXBlcy5KQVZBX0ZJTEUpOworCisgICAgQVNUTm9kZSBmaWxlTm9kZSA9IG15QnVpbGRlci5nZXRUcmVlQnVpbHQoKTsKKyAgICBhc3NlcnROb3ROdWxsKGZpbGVOb2RlKTsKKyAgICBhc3NlcnRFcXVhbHMoInBhY2thZ2UiLCBmaWxlTm9kZS5nZXRUZXh0KCkpOworICAgIGFzc2VydFNhbWUoZmlsZU5vZGUuZ2V0Rmlyc3RDaGlsZE5vZGUoKSwgZmlsZU5vZGUuZ2V0TGFzdENoaWxkTm9kZSgpKTsKKworICAgIEFTVE5vZGUgbGVhZiA9IGZpbGVOb2RlLmdldEZpcnN0Q2hpbGROb2RlKCk7CisgICAgYXNzZXJ0Tm90TnVsbChsZWFmKTsKKyAgICBhc3NlcnRFcXVhbHMoSmF2YVRva2VuVHlwZS5QQUNLQUdFX0tFWVdPUkQsIGxlYWYuZ2V0RWxlbWVudFR5cGUoKSk7CisgICAgYXNzZXJ0RXF1YWxzKCJwYWNrYWdlIiwgbGVhZi5nZXRUZXh0KCkpOworICAgIGFzc2VydE51bGwobGVhZi5nZXRGaXJzdENoaWxkTm9kZSgpKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RBZHZhbmNlQmV5b25kRW9mKCkgeworICAgIG15QnVpbGRlciA9IGNyZWF0ZUJ1aWxkZXIoInBhY2thZ2UiKTsKKyAgICBmb3IoaW50IGk9MDsgaTwyMDsgaSsrKSB7CisgICAgICBteUJ1aWxkZXIuZW9mKCk7CisgICAgICBteUJ1aWxkZXIuYWR2YW5jZUxleGVyKCk7CisgICAgfQorICAgIGFzc2VydFRydWUobXlCdWlsZGVyLmVvZigpKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RBc3NlcnRpb25GYWlsdXJlT25VbmJhbGFuY2VkTWFya2VycygpIHsKKyAgICBteUJ1aWxkZXIgPSBjcmVhdGVCdWlsZGVyKCJmb28iKTsKKyAgICBteUJ1aWxkZXIuc2V0RGVidWdNb2RlKHRydWUpOworICAgIGZpbmFsIFBzaUJ1aWxkZXIuTWFya2VyIG0gPSBteUJ1aWxkZXIubWFyaygpOworICAgIGZpbmFsIFBzaUJ1aWxkZXIuTWFya2VyIG0xID0gbXlCdWlsZGVyLm1hcmsoKTsKKyAgICBteUJ1aWxkZXIuZ2V0VG9rZW5UeXBlKCk7CisgICAgbXlCdWlsZGVyLmFkdmFuY2VMZXhlcigpOworICAgIHRyeSB7CisgICAgICBtLmRvbmUoSmF2YVRva2VuVHlwZS5QQUNLQUdFX0tFWVdPUkQpOworICAgICAgZmFpbCgiQXNzZXJ0aW9uIG11c3QgZmlyZSIpOworICAgIH0KKyAgICBjYXRjaCAoQXNzZXJ0aW9uRmFpbGVkRXJyb3IgZSkgeworICAgICAgdGhyb3cgZTsKKyAgICB9CisgICAgY2F0Y2ggKFRocm93YWJsZSBlKSB7CisgICAgICBpZiAoIWUuZ2V0TWVzc2FnZSgpLnN0YXJ0c1dpdGgoIkFub3RoZXIgbm90IGRvbmUgbWFya2VyIikpIHsKKyAgICAgICAgZmFpbCgiV3JvbmcgYXNzZXJ0aW9uIG1lc3NhZ2UiKTsKKyAgICAgIH0KKyAgICB9CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0Tm90QWxsVG9rZW5zUHJvY2Vzc2VkKCkgeworICAgIG15QnVpbGRlciA9IGNyZWF0ZUJ1aWxkZXIoImZvbyIpOworICAgIG15QnVpbGRlci5zZXREZWJ1Z01vZGUodHJ1ZSk7CisgICAgZmluYWwgUHNpQnVpbGRlci5NYXJrZXIgbSA9IG15QnVpbGRlci5tYXJrKCk7CisgICAgbS5kb25lKEphdmFUb2tlblR5cGUuUEFDS0FHRV9LRVlXT1JEKTsKKyAgICB0cnkgeworICAgICAgbXlCdWlsZGVyLmdldFRyZWVCdWlsdCgpOworICAgICAgZmFpbCgiQXNzZXJ0aW9uIG11c3QgZmlyZSIpOworICAgIH0KKyAgICBjYXRjaCAoQXNzZXJ0aW9uRmFpbGVkRXJyb3IgZSkgeworICAgICAgdGhyb3cgZTsKKyAgICB9CisgICAgY2F0Y2ggKFRocm93YWJsZSBlKSB7CisgICAgICBpZiAoIWUuZ2V0TWVzc2FnZSgpLnN0YXJ0c1dpdGgoIlRva2VucyBbSURFTlRJRklFUl0gd2VyZSBub3QgaW5zZXJ0ZWQgaW50byB0aGUgdHJlZSIpKSB7CisgICAgICAgIGZhaWwoIldyb25nIGFzc2VydGlvbiBtZXNzYWdlIik7CisgICAgICB9CisgICAgfQorICB9CisKKyAgcHVibGljIHZvaWQgdGVzdE1lcmdlV2hlbkVtcHR5RWxlbWVudEFmdGVyV2hpdGVzcGFjZUlzTGFzdENoaWxkKCkgdGhyb3dzIFRocm93YWJsZSB7CisgICAgbXlCdWlsZGVyID0gY3JlYXRlQnVpbGRlcigiIGZvbyBiYXIiKTsKKyAgICBwYXJzZVdoZW5FbXB0eUVsZW1lbnRBZnRlcldoaXRlc3BhY2VJc0xhc3RDaGlsZCgpOworICAgIGZpbmFsIEFTVE5vZGUgdHJlZSA9IG15QnVpbGRlci5nZXRUcmVlQnVpbHQoKTsKKyAgICBuZXcgRHVtbXlIb2xkZXIoZ2V0UHNpTWFuYWdlcigpLCAoVHJlZUVsZW1lbnQpdHJlZSwgbnVsbCk7CisKKyAgICBteUJ1aWxkZXIgPSBjcmVhdGVCdWlsZGVyKCIgIGJhciIsIHRyZWUpOworICAgIHBhcnNlV2hlbkVtcHR5RWxlbWVudEFmdGVyV2hpdGVzcGFjZUlzTGFzdENoaWxkKCk7CisgICAgdHJ5IHsKKyAgICAgIG15QnVpbGRlci5nZXRUcmVlQnVpbHQoKTsKKyAgICAgIGZhaWwoKTsKKyAgICB9CisgICAgY2F0Y2ggKEJsb2NrU3VwcG9ydC5SZXBhcnNlZFN1Y2Nlc3NmdWxseUV4Y2VwdGlvbiBlKSB7CisgICAgICBlLmdldERpZmZMb2coKS5wZXJmb3JtQWN0dWFsUHNpQ2hhbmdlKHRyZWUuZ2V0UHNpKCkuZ2V0Q29udGFpbmluZ0ZpbGUoKSk7CisgICAgfQorCisgICAgYXNzZXJ0RXF1YWxzKCIgIGJhciIsIHRyZWUuZ2V0VGV4dCgpKTsKKyAgfQorCisgIHByaXZhdGUgdm9pZCBwYXJzZVdoZW5FbXB0eUVsZW1lbnRBZnRlcldoaXRlc3BhY2VJc0xhc3RDaGlsZCgpIHsKKyAgICBmaW5hbCBQc2lCdWlsZGVyLk1hcmtlciByb290ID0gbXlCdWlsZGVyLm1hcmsoKTsKKworICAgIGZpbmFsIFBzaUJ1aWxkZXIuTWFya2VyIGNvbXBvc2l0ZSA9IG15QnVpbGRlci5tYXJrKCk7CisgICAgZmluYWwgUHNpQnVpbGRlci5NYXJrZXIgYmFja3VwID0gbXlCdWlsZGVyLm1hcmsoKTsKKyAgICBpZiAoImZvbyIuZXF1YWxzKG15QnVpbGRlci5nZXRUb2tlblRleHQoKSkpIHsKKyAgICAgIG15QnVpbGRlci5hZHZhbmNlTGV4ZXIoKTsKKyAgICAgIG15QnVpbGRlci5nZXRUb2tlblR5cGUoKTsKKyAgICAgIG15QnVpbGRlci5tYXJrKCkuZG9uZShKYXZhU3R1YkVsZW1lbnRUeXBlcy5UWVBFX1BBUkFNRVRFUl9MSVNUKTsKKyAgICAgIGJhY2t1cC5kb25lKEphdmFTdHViRWxlbWVudFR5cGVzLkFOTk9UQVRJT05fTUVUSE9EKTsKKyAgICB9IGVsc2UgeworICAgICAgYmFja3VwLnJvbGxiYWNrVG8oKTsKKyAgICB9CisgICAgY29tcG9zaXRlLmRvbmUoSmF2YVN0dWJFbGVtZW50VHlwZXMuQU5PTllNT1VTX0NMQVNTKTsKKworICAgIG15QnVpbGRlci5nZXRUb2tlblR5cGUoKTsKKyAgICBteUJ1aWxkZXIuYWR2YW5jZUxleGVyKCk7CisgICAgcm9vdC5kb25lKEphdmFTdHViRWxlbWVudFR5cGVzLkVOVU1fQ09OU1RBTlRfSU5JVElBTElaRVIpOworICB9CisKKworfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL2xleGVyL0xheWVyZWRMZXhlclRlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9sZXhlci9MYXllcmVkTGV4ZXJUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjFiYzA2NQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9sZXhlci9MYXllcmVkTGV4ZXJUZXN0LmphdmEKQEAgLTAsMCArMSwxMTAgQEAKK3BhY2thZ2UgY29tLmludGVsbGlqLmxleGVyOworCitpbXBvcnQgY29tLmludGVsbGlqLnBvbS5qYXZhLkxhbmd1YWdlTGV2ZWw7CitpbXBvcnQgY29tLmludGVsbGlqLnBzaS5KYXZhVG9rZW5UeXBlOworaW1wb3J0IGNvbS5pbnRlbGxpai5wc2kudHJlZS5JRWxlbWVudFR5cGU7CitpbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOworCisvKioKKyAqIEBhdXRob3IgbWF4CisgKi8KK3B1YmxpYyBjbGFzcyBMYXllcmVkTGV4ZXJUZXN0IGV4dGVuZHMgVGVzdENhc2UgeworICBwdWJsaWMgdm9pZCB0ZXN0SW5UaGVNaWRkbGUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBMZXhlciBsZXhlciA9IHNldHVwTGV4ZXIoInM9XCJhYmNcXG5kZWZcIjsiKTsKKworICAgIGFzc2VydEVxdWFscygicyIsIG5leHRUb2tlbihsZXhlcikpOworICAgIGFzc2VydEVxdWFscygiPSIsIG5leHRUb2tlbihsZXhlcikpOworICAgIGFzc2VydEVxdWFscygiXCJhYmMiLCBuZXh0VG9rZW4obGV4ZXIpKTsKKyAgICBhc3NlcnRFcXVhbHMoIlxcbiIsIG5leHRUb2tlbihsZXhlcikpOworICAgIGFzc2VydEVxdWFscygiZGVmXCIiLCBuZXh0VG9rZW4obGV4ZXIpKTsKKyAgICBhc3NlcnRFcXVhbHMoIjsiLCBuZXh0VG9rZW4obGV4ZXIpKTsKKyAgICBhc3NlcnRFcXVhbHMobnVsbCwgbGV4ZXIuZ2V0VG9rZW5UeXBlKCkpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdE1vZGlmaWNhdGlvbigpIHRocm93cyBFeGNlcHRpb24geworICAgIExleGVyIGxleGVyID0gc2V0dXBMZXhlcigicz1cImFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFcIjsiKTsKKyAgICBhc3NlcnRFcXVhbHMoInMiLCBuZXh0VG9rZW4obGV4ZXIpKTsKKyAgICBhc3NlcnRFcXVhbHMoIj0iLCBuZXh0VG9rZW4obGV4ZXIpKTsKKyAgICBhc3NlcnRFcXVhbHMoIlwiYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYVwiIiwgbmV4dFRva2VuKGxleGVyKSk7CisgICAgYXNzZXJ0RXF1YWxzKCI7IiwgbmV4dFRva2VuKGxleGVyKSk7CisgICAgYXNzZXJ0RXF1YWxzKG51bGwsIGxleGVyLmdldFRva2VuVHlwZSgpKTsKKworICAgIGxleGVyLnN0YXJ0KGxleGVyLmdldEJ1ZmZlclNlcXVlbmNlKCksIDIsIGxleGVyLmdldEJ1ZmZlckVuZCgpLCAoc2hvcnQpIDEpOworICAgIGFzc2VydEVxdWFscygiXCJhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhXCIiLCBuZXh0VG9rZW4obGV4ZXIpKTsKKyAgICBhc3NlcnRFcXVhbHMoIjsiLCBuZXh0VG9rZW4obGV4ZXIpKTsKKyAgICBhc3NlcnRFcXVhbHMobnVsbCwgbGV4ZXIuZ2V0VG9rZW5UeXBlKCkpOworICB9CisKKworICBwdWJsaWMgdm9pZCB0ZXN0SW5UaGVBdFN0YXJ0dXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBMZXhlciBsZXhlciA9IHNldHVwTGV4ZXIoInM9XCJcXG5kZWZcIjsiKTsKKworICAgIGFzc2VydEVxdWFscygicyIsIG5leHRUb2tlbihsZXhlcikpOworICAgIGFzc2VydEVxdWFscygiPSIsIG5leHRUb2tlbihsZXhlcikpOworICAgIGFzc2VydEVxdWFscygiXCIiLCBuZXh0VG9rZW4obGV4ZXIpKTsKKyAgICBhc3NlcnRFcXVhbHMoIlxcbiIsIG5leHRUb2tlbihsZXhlcikpOworICAgIGFzc2VydEVxdWFscygiZGVmXCIiLCBuZXh0VG9rZW4obGV4ZXIpKTsKKyAgICBhc3NlcnRFcXVhbHMoIjsiLCBuZXh0VG9rZW4obGV4ZXIpKTsKKyAgICBhc3NlcnRFcXVhbHMobnVsbCwgbGV4ZXIuZ2V0VG9rZW5UeXBlKCkpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEluVGhlQXRFbmQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBMZXhlciBsZXhlciA9IHNldHVwTGV4ZXIoInM9XCJhYmNcXG5cIjsiKTsKKworICAgIGFzc2VydEVxdWFscygicyIsIG5leHRUb2tlbihsZXhlcikpOworICAgIGFzc2VydEVxdWFscygiPSIsIG5leHRUb2tlbihsZXhlcikpOworICAgIGFzc2VydEVxdWFscygiXCJhYmMiLCBuZXh0VG9rZW4obGV4ZXIpKTsKKyAgICBhc3NlcnRFcXVhbHMoIlxcbiIsIG5leHRUb2tlbihsZXhlcikpOworICAgIGFzc2VydEVxdWFscygiXCIiLCBuZXh0VG9rZW4obGV4ZXIpKTsKKyAgICBhc3NlcnRFcXVhbHMoIjsiLCBuZXh0VG9rZW4obGV4ZXIpKTsKKyAgICBhc3NlcnRFcXVhbHMobnVsbCwgbGV4ZXIuZ2V0VG9rZW5UeXBlKCkpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdE5vblRlcm1pbmF0ZWQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBMZXhlciBsZXhlciA9IHNldHVwTGV4ZXIoInM9XCJhYmNcXG4iKTsKKworICAgIGFzc2VydEVxdWFscygicyIsIG5leHRUb2tlbihsZXhlcikpOworICAgIGFzc2VydEVxdWFscygiPSIsIG5leHRUb2tlbihsZXhlcikpOworICAgIGFzc2VydEVxdWFscygiXCJhYmMiLCBuZXh0VG9rZW4obGV4ZXIpKTsKKyAgICBhc3NlcnRFcXVhbHMoIlxcbiIsIG5leHRUb2tlbihsZXhlcikpOworICAgIGFzc2VydEVxdWFscyhudWxsLCBsZXhlci5nZXRUb2tlblR5cGUoKSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0Tm9uVGVybWluYXRlZDIoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBMZXhlciBsZXhlciA9IHNldHVwTGV4ZXIoInM9XCJhYmNcXCIpOworCisgICAgYXNzZXJ0RXF1YWxzKCJzIiwgbmV4dFRva2VuKGxleGVyKSk7CisgICAgYXNzZXJ0RXF1YWxzKCI9IiwgbmV4dFRva2VuKGxleGVyKSk7CisgICAgYXNzZXJ0RXF1YWxzKCJcImFiYyIsIG5leHRUb2tlbihsZXhlcikpOworICAgIGFzc2VydEVxdWFscygiXFwiLCBuZXh0VG9rZW4obGV4ZXIpKTsKKyAgICBhc3NlcnRFcXVhbHMobnVsbCwgbGV4ZXIuZ2V0VG9rZW5UeXBlKCkpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFVuaWNvZGUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBMZXhlciBsZXhlciA9IHNldHVwTGV4ZXIoInM9XCJcXHVGRkZGXCI7Iik7CisgICAgYXNzZXJ0RXF1YWxzKCJzIiwgbmV4dFRva2VuKGxleGVyKSk7CisgICAgYXNzZXJ0RXF1YWxzKCI9IiwgbmV4dFRva2VuKGxleGVyKSk7CisgICAgYXNzZXJ0RXF1YWxzKCJcIiIsIG5leHRUb2tlbihsZXhlcikpOworICAgIGFzc2VydEVxdWFscygiXFx1RkZGRiIsIG5leHRUb2tlbihsZXhlcikpOworICAgIGFzc2VydEVxdWFscygiXCIiLCBuZXh0VG9rZW4obGV4ZXIpKTsKKyAgICBhc3NlcnRFcXVhbHMoIjsiLCBuZXh0VG9rZW4obGV4ZXIpKTsKKyAgICBhc3NlcnRFcXVhbHMobnVsbCwgbGV4ZXIuZ2V0VG9rZW5UeXBlKCkpOworICB9CisKKyAgcHJpdmF0ZSBMZXhlciBzZXR1cExleGVyKFN0cmluZyB0ZXh0KSB7CisgICAgTGF5ZXJlZExleGVyIGxleGVyID0gbmV3IExheWVyZWRMZXhlcihuZXcgSmF2YUxleGVyKExhbmd1YWdlTGV2ZWwuSkRLXzFfMykpOworICAgIGxleGVyLnJlZ2lzdGVyU2VsZlN0b3BwaW5nTGF5ZXIobmV3IFN0cmluZ0xpdGVyYWxMZXhlcignXCInLCBKYXZhVG9rZW5UeXBlLlNUUklOR19MSVRFUkFMKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBJRWxlbWVudFR5cGVbXXtKYXZhVG9rZW5UeXBlLlNUUklOR19MSVRFUkFMfSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElFbGVtZW50VHlwZS5FTVBUWV9BUlJBWSk7CisKKyAgICBsZXhlci5zdGFydCh0ZXh0KTsKKyAgICByZXR1cm4gbGV4ZXI7CisgIH0KKworICBwcml2YXRlIFN0cmluZyBuZXh0VG9rZW4oTGV4ZXIgbGV4ZXIpIHsKKyAgICBhc3NlcnRUcnVlKGxleGVyLmdldFRva2VuVHlwZSgpICE9IG51bGwpOworICAgIGZpbmFsIFN0cmluZyBzID0gbGV4ZXIuZ2V0QnVmZmVyU2VxdWVuY2UoKS5zdWJTZXF1ZW5jZShsZXhlci5nZXRUb2tlblN0YXJ0KCksIGxleGVyLmdldFRva2VuRW5kKCkpLnRvU3RyaW5nKCk7CisgICAgbGV4ZXIuYWR2YW5jZSgpOworICAgIHJldHVybiBzOworICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovbW9kdWxlL01vZHVsZVBvaW50ZXJUZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovbW9kdWxlL01vZHVsZVBvaW50ZXJUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTViYzE1ZgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9tb2R1bGUvTW9kdWxlUG9pbnRlclRlc3QuamF2YQpAQCAtMCwwICsxLDExNyBAQAorLyoKKyAqIENvcHlyaWdodCAyMDAwLTIwMTIgSmV0QnJhaW5zIHMuci5vLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KK3BhY2thZ2UgY29tLmludGVsbGlqLm1vZHVsZTsKKworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLkRpc3Bvc2FibGU7CitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkuYXBwbGljYXRpb24uUmVzdWx0OworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLmFwcGxpY2F0aW9uLldyaXRlQWN0aW9uOworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLm1vZHVsZS4qOworaW1wb3J0IGNvbS5pbnRlbGxpai50ZXN0RnJhbWV3b3JrLlBsYXRmb3JtVGVzdENhc2U7CisKKy8qKgorICogQGF1dGhvciBuaWsKKyAqLworcHVibGljIGNsYXNzIE1vZHVsZVBvaW50ZXJUZXN0IGV4dGVuZHMgUGxhdGZvcm1UZXN0Q2FzZSB7CisgIHB1YmxpYyB2b2lkIHRlc3RDcmVhdGVCeU5hbWUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBmaW5hbCBNb2R1bGVQb2ludGVyIHBvaW50ZXIgPSBnZXRQb2ludGVyTWFuYWdlcigpLmNyZWF0ZSgibSIpOworICAgIGFzc2VydFNhbWUocG9pbnRlciwgZ2V0UG9pbnRlck1hbmFnZXIoKS5jcmVhdGUoIm0iKSk7CisgICAgYXNzZXJ0TnVsbChwb2ludGVyLmdldE1vZHVsZSgpKTsKKyAgICBhc3NlcnRFcXVhbHMoIm0iLCBwb2ludGVyLmdldE1vZHVsZU5hbWUoKSk7CisKKyAgICBmaW5hbCBNb2R1bGUgbW9kdWxlID0gYWRkTW9kdWxlKCJtIik7CisKKyAgICBhc3NlcnRTYW1lKG1vZHVsZSwgcG9pbnRlci5nZXRNb2R1bGUoKSk7CisgICAgYXNzZXJ0RXF1YWxzKCJtIiwgcG9pbnRlci5nZXRNb2R1bGVOYW1lKCkpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdENyZWF0ZUJ5TW9kdWxlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZmluYWwgTW9kdWxlIG1vZHVsZSA9IGFkZE1vZHVsZSgieCIpOworICAgIGZpbmFsIE1vZHVsZVBvaW50ZXIgcG9pbnRlciA9IGdldFBvaW50ZXJNYW5hZ2VyKCkuY3JlYXRlKG1vZHVsZSk7CisgICAgYXNzZXJ0U2FtZShwb2ludGVyLCBnZXRQb2ludGVyTWFuYWdlcigpLmNyZWF0ZShtb2R1bGUpKTsKKyAgICBhc3NlcnRTYW1lKHBvaW50ZXIsIGdldFBvaW50ZXJNYW5hZ2VyKCkuY3JlYXRlKCJ4IikpOworICAgIGFzc2VydFNhbWUobW9kdWxlLCBwb2ludGVyLmdldE1vZHVsZSgpKTsKKyAgICBhc3NlcnRFcXVhbHMoIngiLCBwb2ludGVyLmdldE1vZHVsZU5hbWUoKSk7CisKKyAgICBNb2RpZmlhYmxlTW9kdWxlTW9kZWwgbW9kZWwgPSBnZXRNb2R1bGVNYW5hZ2VyKCkuZ2V0TW9kaWZpYWJsZU1vZGVsKCk7CisgICAgbW9kZWwuZGlzcG9zZU1vZHVsZShtb2R1bGUpOworICAgIGNvbW1pdE1vZGVsKG1vZGVsKTsKKworICAgIGFzc2VydE51bGwocG9pbnRlci5nZXRNb2R1bGUoKSk7CisgICAgYXNzZXJ0RXF1YWxzKCJ4IiwgcG9pbnRlci5nZXRNb2R1bGVOYW1lKCkpOworCisgICAgZmluYWwgTW9kdWxlIG5ld01vZHVsZSA9IGFkZE1vZHVsZSgieCIpOworICAgIGFzc2VydFNhbWUocG9pbnRlciwgZ2V0UG9pbnRlck1hbmFnZXIoKS5jcmVhdGUobmV3TW9kdWxlKSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0UmVuYW1lTW9kdWxlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZmluYWwgTW9kdWxlUG9pbnRlciBwb2ludGVyID0gZ2V0UG9pbnRlck1hbmFnZXIoKS5jcmVhdGUoImFiYyIpOworICAgIGZpbmFsIE1vZHVsZSBtb2R1bGUgPSBhZGRNb2R1bGUoImFiYyIpOworICAgIE1vZGlmaWFibGVNb2R1bGVNb2RlbCBtb2RlbCA9IGdldE1vZHVsZU1hbmFnZXIoKS5nZXRNb2RpZmlhYmxlTW9kZWwoKTsKKyAgICBtb2RlbC5yZW5hbWVNb2R1bGUobW9kdWxlLCAieHl6Iik7CisgICAgY29tbWl0TW9kZWwobW9kZWwpOworICAgIGFzc2VydFNhbWUobW9kdWxlLCBwb2ludGVyLmdldE1vZHVsZSgpKTsKKyAgICBhc3NlcnRFcXVhbHMoInh5eiIsIHBvaW50ZXIuZ2V0TW9kdWxlTmFtZSgpKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3REaXNwb3NlUG9pbnRlckZyb21VbmNvbW1pdGVkTW9kaWZpYWJsZU1vZGVsKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZmluYWwgTW9kdWxlUG9pbnRlciBwb2ludGVyID0gZ2V0UG9pbnRlck1hbmFnZXIoKS5jcmVhdGUoInh4eCIpOworCisgICAgZmluYWwgTW9kaWZpYWJsZU1vZHVsZU1vZGVsIG1vZGlmaWFibGVNb2RlbCA9IGdldE1vZHVsZU1hbmFnZXIoKS5nZXRNb2RpZmlhYmxlTW9kZWwoKTsKKyAgICBmaW5hbCBNb2R1bGUgbW9kdWxlID0gbW9kaWZpYWJsZU1vZGVsLm5ld01vZHVsZShteVByb2plY3QuZ2V0QmFzZURpcigpLmdldFBhdGgoKSArICIveHh4LmltbCIsIEVtcHR5TW9kdWxlVHlwZS5nZXRJbnN0YW5jZSgpLmdldElkKCkpOworICAgIGFzc2VydFNhbWUocG9pbnRlciwgZ2V0UG9pbnRlck1hbmFnZXIoKS5jcmVhdGUobW9kdWxlKSk7CisgICAgYXNzZXJ0U2FtZShwb2ludGVyLCBnZXRQb2ludGVyTWFuYWdlcigpLmNyZWF0ZSgieHh4IikpOworCisgICAgYXNzZXJ0U2FtZShtb2R1bGUsIHBvaW50ZXIuZ2V0TW9kdWxlKCkpOworICAgIGFzc2VydEVxdWFscygieHh4IiwgcG9pbnRlci5nZXRNb2R1bGVOYW1lKCkpOworCisgICAgbW9kaWZpYWJsZU1vZGVsLmRpc3Bvc2UoKTsKKworICAgIGFzc2VydE51bGwocG9pbnRlci5nZXRNb2R1bGUoKSk7CisgICAgYXNzZXJ0RXF1YWxzKCJ4eHgiLCBwb2ludGVyLmdldE1vZHVsZU5hbWUoKSk7CisgIH0KKworICBwcml2YXRlIE1vZHVsZU1hbmFnZXIgZ2V0TW9kdWxlTWFuYWdlcigpIHsKKyAgICByZXR1cm4gTW9kdWxlTWFuYWdlci5nZXRJbnN0YW5jZShteVByb2plY3QpOworICB9CisKKyAgcHJpdmF0ZSBNb2R1bGUgYWRkTW9kdWxlKGZpbmFsIFN0cmluZyBuYW1lKSB7CisgICAgZmluYWwgTW9kaWZpYWJsZU1vZHVsZU1vZGVsIG1vZGVsID0gZ2V0TW9kdWxlTWFuYWdlcigpLmdldE1vZGlmaWFibGVNb2RlbCgpOworICAgIGZpbmFsIE1vZHVsZSBtb2R1bGUgPSBtb2RlbC5uZXdNb2R1bGUobXlQcm9qZWN0LmdldEJhc2VEaXIoKS5nZXRQYXRoKCkgKyAiLyIgKyBuYW1lICsgIi5pbWwiLCBFbXB0eU1vZHVsZVR5cGUuZ2V0SW5zdGFuY2UoKS5nZXRJZCgpKTsKKyAgICBjb21taXRNb2RlbChtb2RlbCk7CisgICAgZGlzcG9zZU9uVGVhckRvd24obmV3IERpc3Bvc2FibGUoKSB7CisgICAgICBAT3ZlcnJpZGUKKyAgICAgIHB1YmxpYyB2b2lkIGRpc3Bvc2UoKSB7CisgICAgICAgIGlmICghbW9kdWxlLmlzRGlzcG9zZWQoKSkgeworICAgICAgICAgIGdldE1vZHVsZU1hbmFnZXIoKS5kaXNwb3NlTW9kdWxlKG1vZHVsZSk7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9KTsKKyAgICByZXR1cm4gbW9kdWxlOworICB9CisKKyAgcHJpdmF0ZSBzdGF0aWMgdm9pZCBjb21taXRNb2RlbChmaW5hbCBNb2RpZmlhYmxlTW9kdWxlTW9kZWwgbW9kZWwpIHsKKyAgICBuZXcgV3JpdGVBY3Rpb24oKSB7CisgICAgICBAT3ZlcnJpZGUKKyAgICAgIHByb3RlY3RlZCB2b2lkIHJ1bihmaW5hbCBSZXN1bHQgcmVzdWx0KSB7CisgICAgICAgIG1vZGVsLmNvbW1pdCgpOworICAgICAgfQorICAgIH0uZXhlY3V0ZSgpOworICB9CisKKyAgcHJpdmF0ZSBNb2R1bGVQb2ludGVyTWFuYWdlciBnZXRQb2ludGVyTWFuYWdlcigpIHsKKyAgICByZXR1cm4gTW9kdWxlUG9pbnRlck1hbmFnZXIuZ2V0SW5zdGFuY2UobXlQcm9qZWN0KTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL25hdmlnYXRpb24vR290b0ltcGxlbWVudGF0aW9uSGFuZGxlclRlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9uYXZpZ2F0aW9uL0dvdG9JbXBsZW1lbnRhdGlvbkhhbmRsZXJUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTg0ZjY1YgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9uYXZpZ2F0aW9uL0dvdG9JbXBsZW1lbnRhdGlvbkhhbmRsZXJUZXN0LmphdmEKQEAgLTAsMCArMSwxMDAgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwMC0yMDEyIEpldEJyYWlucyBzLnIuby4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKK3BhY2thZ2UgY29tLmludGVsbGlqLm5hdmlnYXRpb247CisKKworaW1wb3J0IGNvbS5pbnRlbGxpai5jb2RlSW5zaWdodC5uYXZpZ2F0aW9uLkdvdG9JbXBsZW1lbnRhdGlvbkhhbmRsZXI7CitpbXBvcnQgY29tLmludGVsbGlqLnBzaS5Qc2lDbGFzczsKK2ltcG9ydCBjb20uaW50ZWxsaWoucHNpLlBzaUVsZW1lbnQ7CitpbXBvcnQgY29tLmludGVsbGlqLnBzaS5Qc2lGaWxlOworaW1wb3J0IGNvbS5pbnRlbGxpai5wc2kuUHNpTWV0aG9kOworaW1wb3J0IGNvbS5pbnRlbGxpai50ZXN0RnJhbWV3b3JrLmZpeHR1cmVzLkphdmFDb2RlSW5zaWdodEZpeHR1cmVUZXN0Q2FzZTsKKworcHVibGljIGNsYXNzIEdvdG9JbXBsZW1lbnRhdGlvbkhhbmRsZXJUZXN0IGV4dGVuZHMgSmF2YUNvZGVJbnNpZ2h0Rml4dHVyZVRlc3RDYXNlIHsKKworICBwdWJsaWMgdm9pZCB0ZXN0TXVsdGlwbGVJbXBsc0Zyb21BYnN0cmFjdENhbGwoKSB0aHJvd3MgVGhyb3dhYmxlIHsKKyAgICBQc2lGaWxlIGZpbGUgPSBteUZpeHR1cmUuYWRkRmlsZVRvUHJvamVjdCgiRm9vLmphdmEiLCAicHVibGljIGFic3RyYWN0IGNsYXNzIEhlbGxvIHtcbiIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgICAgYWJzdHJhY3Qgdm9pZCBmb28oKTtcbiIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJcbiIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgICAgY2xhc3MgQSB7XG4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgICAgICB7XG4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgICAgICAgICAgZm88Y2FyZXQ+bygpO1xuIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgICAgICAgfVxuIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgICB9XG4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgIGNsYXNzIEhlbGxvMSBleHRlbmRzIEhlbGxvIHtcbiIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgICAgICAgIHZvaWQgZm9vKCkge31cbiIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgICAgfVxuIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgICBjbGFzcyBIZWxsbzIgZXh0ZW5kcyBIZWxsbyB7XG4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgICAgICB2b2lkIGZvbygpIHt9XG4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgIH1cbiIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ9XG4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiXG4iKTsKKyAgICBteUZpeHR1cmUuY29uZmlndXJlRnJvbUV4aXN0aW5nVmlydHVhbEZpbGUoZmlsZS5nZXRWaXJ0dWFsRmlsZSgpKTsKKworICAgIGZpbmFsIFBzaUVsZW1lbnRbXSBpbXBscyA9IG5ldyBHb3RvSW1wbGVtZW50YXRpb25IYW5kbGVyKCkuZ2V0U291cmNlQW5kVGFyZ2V0RWxlbWVudHMobXlGaXh0dXJlLmdldEVkaXRvcigpLCBmaWxlKS50YXJnZXRzOworICAgIGFzc2VydEVxdWFscygyLCBpbXBscy5sZW5ndGgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdE11bHRpcGxlSW1wbHNGcm9tU3RhdGljQ2FsbCgpIHRocm93cyBUaHJvd2FibGUgeworICAgIFBzaUZpbGUgZmlsZSA9IG15Rml4dHVyZS5hZGRGaWxlVG9Qcm9qZWN0KCJGb28uamF2YSIsICJwdWJsaWMgYWJzdHJhY3QgY2xhc3MgSGVsbG8ge1xuIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgICBzdGF0aWMgdm9pZCBiYXIgKCl7fVxuIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgICBjbGFzcyBIZWxsbzEgZXh0ZW5kcyBIZWxsbyB7XG4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgIH1cbiIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgICAgY2xhc3MgSGVsbG8yIGV4dGVuZHMgSGVsbG8ge1xuIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgICB9XG4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY2xhc3MgRCB7XG4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgIHtcbiIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgICAgICAgIEhlPGNhcmV0Pmxsby5iYXIoKTtcbiIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgICAgfVxuIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIn0iKTsKKyAgICBteUZpeHR1cmUuY29uZmlndXJlRnJvbUV4aXN0aW5nVmlydHVhbEZpbGUoZmlsZS5nZXRWaXJ0dWFsRmlsZSgpKTsKKworICAgIGZpbmFsIFBzaUVsZW1lbnRbXSBpbXBscyA9IG5ldyBHb3RvSW1wbGVtZW50YXRpb25IYW5kbGVyKCkuZ2V0U291cmNlQW5kVGFyZ2V0RWxlbWVudHMobXlGaXh0dXJlLmdldEVkaXRvcigpLCBmaWxlKS50YXJnZXRzOworICAgIGFzc2VydEVxdWFscygyLCBpbXBscy5sZW5ndGgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEZpbHRlck91dEltcG9zc2libGVWYXJpYW50cygpIHRocm93cyBUaHJvd2FibGUgeworICAgIFBzaUZpbGUgZmlsZSA9IG15Rml4dHVyZS5hZGRGaWxlVG9Qcm9qZWN0KCJGb28uamF2YSIsICJpbnRlcmZhY2UgQSB7XG4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgIHZvaWQgc2F2ZSgpO1xuIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIn1cbiIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpbnRlcmZhY2UgQiBleHRlbmRzIEEge1xuIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgICB2b2lkIGZvbygpO1xuIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIn1cbiIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjbGFzcyBYIGltcGxlbWVudHMgQiB7XG4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgIHB1YmxpYyB2b2lkIGZvbygpIHsgfVxuIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgICBwdWJsaWMgdm9pZCBzYXZlKCl7fVxuIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIn1cbiIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjbGFzcyBZIGltcGxlbWVudHMgQSB7XG4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgIHB1YmxpYyB2b2lkIHNhdmUoKXt9XG4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAifVxuIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNsYXNzIEFwcCB7XG4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgIHByaXZhdGUgQiBiO1xuIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgICBwcml2YXRlIHZvaWQgc29tZSgpIHtcbiIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgICAgICAgIGIuc2E8Y2FyZXQ+dmUoKTtcbiIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgICAgfVxuIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIn0iKTsKKyAgICBteUZpeHR1cmUuY29uZmlndXJlRnJvbUV4aXN0aW5nVmlydHVhbEZpbGUoZmlsZS5nZXRWaXJ0dWFsRmlsZSgpKTsKKworICAgIGZpbmFsIFBzaUVsZW1lbnRbXSBpbXBscyA9IG5ldyBHb3RvSW1wbGVtZW50YXRpb25IYW5kbGVyKCkuZ2V0U291cmNlQW5kVGFyZ2V0RWxlbWVudHMobXlGaXh0dXJlLmdldEVkaXRvcigpLCBmaWxlKS50YXJnZXRzOworICAgIGFzc2VydEVxdWFscygxLCBpbXBscy5sZW5ndGgpOworICAgIGZpbmFsIFBzaUVsZW1lbnQgbWV0aCA9IGltcGxzWzBdOworICAgIGFzc2VydFRydWUobWV0aCBpbnN0YW5jZW9mIFBzaU1ldGhvZCk7CisgICAgZmluYWwgUHNpQ2xhc3MgYUNsYXNzID0gKChQc2lNZXRob2QpbWV0aCkuZ2V0Q29udGFpbmluZ0NsYXNzKCk7CisgICAgYXNzZXJ0Tm90TnVsbChhQ2xhc3MpOworICAgIGFzc2VydEVxdWFscyhhQ2xhc3MuZ2V0TmFtZSgpLCAiWCIpOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL25hdmlnYXRpb24vR290b0ltcGxlbWVudGF0aW9uVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL25hdmlnYXRpb24vR290b0ltcGxlbWVudGF0aW9uVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQzNmY5ZWEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovbmF2aWdhdGlvbi9Hb3RvSW1wbGVtZW50YXRpb25UZXN0LmphdmEKQEAgLTAsMCArMSw5MiBAQAorcGFja2FnZSBjb20uaW50ZWxsaWoubmF2aWdhdGlvbjsKKworaW1wb3J0IGNvbS5pbnRlbGxpai5KYXZhVGVzdFV0aWw7CitpbXBvcnQgY29tLmludGVsbGlqLmNvZGVJbnNpZ2h0LkNvZGVJbnNpZ2h0VGVzdENhc2U7CitpbXBvcnQgY29tLmludGVsbGlqLmNvZGVJbnNpZ2h0Lm5hdmlnYXRpb24uQ2xhc3NJbXBsZW1lbnRhdGlvbnNTZWFyY2g7CitpbXBvcnQgY29tLmludGVsbGlqLmNvZGVJbnNpZ2h0Lm5hdmlnYXRpb24uTWV0aG9kSW1wbGVtZW50YXRpb25zU2VhcmNoOworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLm1vZHVsZS5Nb2R1bGU7CitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkubW9kdWxlLk1vZHVsZU1hbmFnZXI7CitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkubW9kdWxlLmltcGwuTW9kdWxlTWFuYWdlckltcGw7CitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkucHJvamVjdC5leC5Qcm9qZWN0TWFuYWdlckV4OworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLnV0aWwuaW8uRmlsZVV0aWw7CitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkudmZzLkxvY2FsRmlsZVN5c3RlbTsKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS52ZnMuVmlydHVhbEZpbGU7CitpbXBvcnQgY29tLmludGVsbGlqLnBzaS5Qc2lDbGFzczsKK2ltcG9ydCBjb20uaW50ZWxsaWoucHNpLlBzaU1ldGhvZDsKK2ltcG9ydCBjb20uaW50ZWxsaWoucHNpLnNlYXJjaC5HbG9iYWxTZWFyY2hTY29wZTsKK2ltcG9ydCBjb20uaW50ZWxsaWoudXRpbC5Db21tb25Qcm9jZXNzb3JzOworCitpbXBvcnQgamF2YS51dGlsLkFycmF5czsKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuSGFzaFNldDsKK2ltcG9ydCBqYXZhLnV0aWwuU2V0OworCisvKioKKyAqIEBhdXRob3IgY2RyCisgKi8KK3B1YmxpYyBjbGFzcyBHb3RvSW1wbGVtZW50YXRpb25UZXN0IGV4dGVuZHMgQ29kZUluc2lnaHRUZXN0Q2FzZSB7CisKKyAgcHJpdmF0ZSBzdGF0aWMgQ29sbGVjdGlvbjxQc2lDbGFzcz4gZ2V0Q2xhc3NJbXBsZW1lbnRhdGlvbnMoZmluYWwgUHNpQ2xhc3MgcHNpQ2xhc3MpIHsKKyAgICBDb21tb25Qcm9jZXNzb3JzLkNvbGxlY3RQcm9jZXNzb3I8UHNpQ2xhc3M+IHByb2Nlc3NvciA9IG5ldyBDb21tb25Qcm9jZXNzb3JzLkNvbGxlY3RQcm9jZXNzb3I8UHNpQ2xhc3M+KCk7CisgICAgQ2xhc3NJbXBsZW1lbnRhdGlvbnNTZWFyY2gucHJvY2Vzc0ltcGxlbWVudGF0aW9ucyhwc2lDbGFzcywgcHJvY2Vzc29yKTsKKworICAgIHJldHVybiBwcm9jZXNzb3IuZ2V0UmVzdWx0cygpOworICB9CisKKyAgQE92ZXJyaWRlCisgIHByb3RlY3RlZCB2b2lkIHNldFVwUHJvamVjdCgpIHRocm93cyBFeGNlcHRpb24geworICAgIGZpbmFsIFN0cmluZyByb290ID0gSmF2YVRlc3RVdGlsLmdldEphdmFUZXN0RGF0YVBhdGgoKSArICIvY29kZUluc2lnaHQvbmF2aWdhdGlvbi9hbGV4UHJvamVjdCI7CisgICAgVmlydHVhbEZpbGUgdmZzUm9vdCA9IExvY2FsRmlsZVN5c3RlbS5nZXRJbnN0YW5jZSgpLmZpbmRGaWxlQnlQYXRoKEZpbGVVdGlsLnRvU3lzdGVtSW5kZXBlbmRlbnROYW1lKHJvb3QpKTsKKworICAgIFZpcnR1YWxGaWxlIHByb2plY3RGaWxlID0gdmZzUm9vdC5maW5kQ2hpbGQoInRlc3QuaXByIik7CisgICAgbXlQcm9qZWN0ID0gUHJvamVjdE1hbmFnZXJFeC5nZXRJbnN0YW5jZUV4KCkubG9hZFByb2plY3QocHJvamVjdEZpbGUuZ2V0UGF0aCgpKTsKKworICAgIHNpbXVsYXRlUHJvamVjdE9wZW4oKTsKKyAgICBQcm9qZWN0TWFuYWdlckV4LmdldEluc3RhbmNlRXgoKS5vcGVuVGVzdFByb2plY3QobXlQcm9qZWN0KTsKKyAgfQorCisgIEBPdmVycmlkZQorICBwcm90ZWN0ZWQgdm9pZCB0ZWFyRG93bigpIHRocm93cyBFeGNlcHRpb24geworICAgICgoTW9kdWxlTWFuYWdlckltcGwpTW9kdWxlTWFuYWdlci5nZXRJbnN0YW5jZShteVByb2plY3QpKS5wcm9qZWN0Q2xvc2VkKCk7CisgICAgc3VwZXIudGVhckRvd24oKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3QoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKworICAgIE1vZHVsZU1hbmFnZXIgbW9kdWxlTWFuYWdlciA9IE1vZHVsZU1hbmFnZXIuZ2V0SW5zdGFuY2UoZ2V0UHJvamVjdCgpKTsKKyAgICBNb2R1bGVbXSBtb2R1bGVzID0gbW9kdWxlTWFuYWdlci5nZXRNb2R1bGVzKCk7CisgICAgYXNzZXJ0RXF1YWxzKDMsIG1vZHVsZXMubGVuZ3RoKTsKKworICAgIE1vZHVsZSBtb2R1bGUxID0gbW9kdWxlTWFuYWdlci5maW5kTW9kdWxlQnlOYW1lKCJ0ZXN0MSIpOworICAgIE1vZHVsZSBtb2R1bGUyID0gbW9kdWxlTWFuYWdlci5maW5kTW9kdWxlQnlOYW1lKCJ0ZXN0MiIpOworICAgIE1vZHVsZSBtb2R1bGUzID0gbW9kdWxlTWFuYWdlci5maW5kTW9kdWxlQnlOYW1lKCJ0ZXN0MyIpOworICAgIFBzaUNsYXNzIHRlc3QxID0gbXlKYXZhRmFjYWRlLmZpbmRDbGFzcygiY29tLnRlc3QuVGVzdEkiLCBHbG9iYWxTZWFyY2hTY29wZS5tb2R1bGVTY29wZShtb2R1bGUxKSk7CisgICAgUHNpQ2xhc3MgdGVzdDIgPSBteUphdmFGYWNhZGUuZmluZENsYXNzKCJjb20udGVzdC5UZXN0SSIsIEdsb2JhbFNlYXJjaFNjb3BlLm1vZHVsZVNjb3BlKG1vZHVsZTIpKTsKKyAgICBQc2lDbGFzcyB0ZXN0MyA9IG15SmF2YUZhY2FkZS5maW5kQ2xhc3MoImNvbS50ZXN0LlRlc3RJIiwgR2xvYmFsU2VhcmNoU2NvcGUubW9kdWxlU2NvcGUobW9kdWxlMykpOworICAgIEhhc2hTZXQ8UHNpQ2xhc3M+IGV4cGVjdGVkSW1wbHMxID0gbmV3IEhhc2hTZXQ8UHNpQ2xhc3M+KEFycmF5cy5hc0xpc3QoCisgICAgICBteUphdmFGYWNhZGUuZmluZENsYXNzKCJjb20udGVzdC5UZXN0SUltcGwxIiwgR2xvYmFsU2VhcmNoU2NvcGUubW9kdWxlU2NvcGUobW9kdWxlMSkpLAorICAgICAgbXlKYXZhRmFjYWRlLmZpbmRDbGFzcygiY29tLnRlc3QuVGVzdElJbXBsMiIsIEdsb2JhbFNlYXJjaFNjb3BlLm1vZHVsZVNjb3BlKG1vZHVsZTEpKQorICAgICkpOworICAgIGFzc2VydEVxdWFscyhleHBlY3RlZEltcGxzMSwgbmV3IEhhc2hTZXQ8UHNpQ2xhc3M+KGdldENsYXNzSW1wbGVtZW50YXRpb25zKHRlc3QxKSkpOworCisgICAgUHNpTWV0aG9kIHBzaU1ldGhvZCA9IHRlc3QxLmZpbmRNZXRob2RzQnlOYW1lKCJ0ZXN0IiwgZmFsc2UpWzBdOworICAgIFNldDxQc2lNZXRob2Q+IGV4cGVjdGVkTWV0aG9kSW1wbDEgPSBuZXcgSGFzaFNldDxQc2lNZXRob2Q+KEFycmF5cy5hc0xpc3QoCisgICAgICBteUphdmFGYWNhZGUuZmluZENsYXNzKCJjb20udGVzdC5UZXN0SUltcGwxIiwgR2xvYmFsU2VhcmNoU2NvcGUubW9kdWxlU2NvcGUobW9kdWxlMSkpLmZpbmRNZXRob2RzQnlOYW1lKCJ0ZXN0IixmYWxzZSlbMF0sCisgICAgICBteUphdmFGYWNhZGUuZmluZENsYXNzKCJjb20udGVzdC5UZXN0SUltcGwyIiwgR2xvYmFsU2VhcmNoU2NvcGUubW9kdWxlU2NvcGUobW9kdWxlMSkpLmZpbmRNZXRob2RzQnlOYW1lKCJ0ZXN0IixmYWxzZSlbMF0KKyAgICApKTsKKyAgICBhc3NlcnRFcXVhbHMoZXhwZWN0ZWRNZXRob2RJbXBsMSwgbmV3IEhhc2hTZXQ8UHNpTWV0aG9kPihBcnJheXMuYXNMaXN0KE1ldGhvZEltcGxlbWVudGF0aW9uc1NlYXJjaC5nZXRNZXRob2RJbXBsZW1lbnRhdGlvbnMocHNpTWV0aG9kKSkpKTsKKworICAgIEhhc2hTZXQ8UHNpQ2xhc3M+IGV4cGVjdGVkSW1wbHMyID0gbmV3IEhhc2hTZXQ8UHNpQ2xhc3M+KEFycmF5cy5hc0xpc3QoCisgICAgICBteUphdmFGYWNhZGUuZmluZENsYXNzKCJjb20udGVzdC5UZXN0SUltcGwxIiwgR2xvYmFsU2VhcmNoU2NvcGUubW9kdWxlU2NvcGUobW9kdWxlMikpLAorICAgICAgbXlKYXZhRmFjYWRlLmZpbmRDbGFzcygiY29tLnRlc3QuVGVzdElJbXBsMyIsIEdsb2JhbFNlYXJjaFNjb3BlLm1vZHVsZVNjb3BlKG1vZHVsZTIpKQorICAgICkpOworICAgIGFzc2VydEVxdWFscyhleHBlY3RlZEltcGxzMiwgbmV3IEhhc2hTZXQ8UHNpQ2xhc3M+KGdldENsYXNzSW1wbGVtZW50YXRpb25zKHRlc3QyKSkpOworCisgICAgSGFzaFNldDxQc2lDbGFzcz4gZXhwZWN0ZWRJbXBsczMgPSBuZXcgSGFzaFNldDxQc2lDbGFzcz4oQXJyYXlzLmFzTGlzdCgKKyAgICAgIG15SmF2YUZhY2FkZS5maW5kQ2xhc3MoImNvbS50ZXN0LlRlc3RJSW1wbDEiLCBHbG9iYWxTZWFyY2hTY29wZS5tb2R1bGVTY29wZShtb2R1bGUzKSkKKyAgICApKTsKKyAgICBhc3NlcnRFcXVhbHMoZXhwZWN0ZWRJbXBsczMsIG5ldyBIYXNoU2V0PFBzaUNsYXNzPihnZXRDbGFzc0ltcGxlbWVudGF0aW9ucyh0ZXN0MykpKTsKKworICB9CisKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9vcGVuYXBpL2VkaXRvci9pbXBsL0ZvbGRpbmdQcm9jZXNzaW5nT25Eb2N1bWVudE1vZGlmaWNhdGlvblRlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9vcGVuYXBpL2VkaXRvci9pbXBsL0ZvbGRpbmdQcm9jZXNzaW5nT25Eb2N1bWVudE1vZGlmaWNhdGlvblRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NzY0ZDA3Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL29wZW5hcGkvZWRpdG9yL2ltcGwvRm9sZGluZ1Byb2Nlc3NpbmdPbkRvY3VtZW50TW9kaWZpY2F0aW9uVGVzdC5qYXZhCkBAIC0wLDAgKzEsNjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwMC0yMDEyIEpldEJyYWlucyBzLnIuby4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCitwYWNrYWdlIGNvbS5pbnRlbGxpai5vcGVuYXBpLmVkaXRvci5pbXBsOworCitpbXBvcnQgY29tLmludGVsbGlqLmNvZGVJbnNpZ2h0LmZvbGRpbmcuQ29kZUZvbGRpbmdNYW5hZ2VyOworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLmVkaXRvci5DYXJldE1vZGVsOworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLmVkaXRvci5Gb2xkUmVnaW9uOworaW1wb3J0IGNvbS5pbnRlbGxpai50ZXN0RnJhbWV3b3JrLlRlc3RGaWxlVHlwZTsKKworaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CisKKy8qKgorICogQGF1dGhvciBEZW5pcyBaaGRhbm92CisgKiBAc2luY2UgMTEvMTgvMTAgNzo0MiBQTQorICovCitwdWJsaWMgY2xhc3MgRm9sZGluZ1Byb2Nlc3NpbmdPbkRvY3VtZW50TW9kaWZpY2F0aW9uVGVzdCBleHRlbmRzIEFic3RyYWN0RWRpdG9yUHJvY2Vzc2luZ09uRG9jdW1lbnRNb2RpZmljYXRpb25UZXN0IHsKKyAgCisgIHB1YmxpYyB2b2lkIHRlc3RVbmV4cGVjdGVkQ2xhc3NMZXZlbEphdmFkb2NFeHBhbmRpbmdPbkNsYXNzU2lnbmF0dXJlQ2hhbmdlKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKKyAgICAvLyBJbnNwaXJlZCBieSBJREVBLTYxMjc1CisKKyAgICBTdHJpbmcgdGV4dCA9CisgICAgICAiLyoqXG4iICsKKyAgICAgICIgKiBUaGlzIGlzIGEgdGVzdCBjb21tZW50XG4iICsKKyAgICAgICIgKi9cbiIgKworICAgICAgInB1YmxpYyA8Y2FyZXQ+Y2xhc3MgVGVzdCB7XG4iICsKKyAgICAgICJ9IjsKKyAgICBpbml0KHRleHQsIFRlc3RGaWxlVHlwZS5KQVZBKTsKKworICAgIENhcmV0TW9kZWwgY2FyZXRNb2RlbCA9IG15RWRpdG9yLmdldENhcmV0TW9kZWwoKTsKKyAgICBpbnQgY2FyZXRPZmZzZXQgPSBjYXJldE1vZGVsLmdldE9mZnNldCgpOworICAgIAorICAgIGFzc2VydEVxdWFscyhjYXJldE9mZnNldCwgY2FyZXRNb2RlbC5nZXRPZmZzZXQoKSk7CisKKyAgICB1cGRhdGVGb2xkUmVnaW9ucygpOworICAgIHRvZ2dsZUZvbGRSZWdpb25TdGF0ZShnZXRGb2xkUmVnaW9uKDApLCBmYWxzZSk7CisgICAgdHlwZSgnYScpOworICAgIHVwZGF0ZUZvbGRSZWdpb25zKCk7CisKKyAgICBhc3NlcnRFcXVhbHMoY2FyZXRPZmZzZXQgKyAxLCBjYXJldE1vZGVsLmdldE9mZnNldCgpKTsKKyAgICBhc3NlcnRFcXVhbHMoMSwgbXlFZGl0b3IuZ2V0Rm9sZGluZ01vZGVsKCkuZ2V0QWxsRm9sZFJlZ2lvbnMoKS5sZW5ndGgpOworICAgIEZvbGRSZWdpb24gZm9sZFJlZ2lvbiA9IGdldEZvbGRSZWdpb24oMCk7CisgICAgYXNzZXJ0RmFsc2UoZm9sZFJlZ2lvbi5pc0V4cGFuZGVkKCkpOworICB9CisgIAorICBwcml2YXRlIHN0YXRpYyB2b2lkIHVwZGF0ZUZvbGRSZWdpb25zKCkgeworICAgIENvZGVGb2xkaW5nTWFuYWdlci5nZXRJbnN0YW5jZShnZXRQcm9qZWN0KCkpLnVwZGF0ZUZvbGRSZWdpb25zKG15RWRpdG9yKTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL29wZW5hcGkvcm9vdHMvaW1wbC9EaXJlY3RvcnlJbmRleFRlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9vcGVuYXBpL3Jvb3RzL2ltcGwvRGlyZWN0b3J5SW5kZXhUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODgxNTFlMAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9vcGVuYXBpL3Jvb3RzL2ltcGwvRGlyZWN0b3J5SW5kZXhUZXN0LmphdmEKQEAgLTAsMCArMSw1MzAgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwMC0yMDEyIEpldEJyYWlucyBzLnIuby4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCitwYWNrYWdlIGNvbS5pbnRlbGxpai5vcGVuYXBpLnJvb3RzLmltcGw7CisKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS5hcHBsaWNhdGlvbi5BcHBsaWNhdGlvbk1hbmFnZXI7CitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkuY29tbWFuZC5Xcml0ZUNvbW1hbmRBY3Rpb247CitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkuZGlhZ25vc3RpYy5Mb2dnZXI7CitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkuZmlsZVR5cGVzLkZpbGVUeXBlTWFuYWdlcjsKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS5maWxlVHlwZXMuZXguRmlsZVR5cGVNYW5hZ2VyRXg7CitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkubW9kdWxlLk1vZHVsZTsKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS5tb2R1bGUuTW9kdWxlTWFuYWdlcjsKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS5tb2R1bGUuU3RkTW9kdWxlVHlwZXM7CitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkucm9vdHMuKjsKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS5yb290cy5leC5Qcm9qZWN0Um9vdE1hbmFnZXJFeDsKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS51dGlsLkVtcHR5UnVubmFibGU7CitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkudXRpbC5pby5GaWxlVXRpbDsKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS52ZnMuKjsKK2ltcG9ydCBjb20uaW50ZWxsaWoudGVzdEZyYW1ld29yay5JZGVhVGVzdENhc2U7CitpbXBvcnQgY29tLmludGVsbGlqLnRlc3RGcmFtZXdvcmsuUGxhdGZvcm1UZXN0Q2FzZTsKK2ltcG9ydCBjb20uaW50ZWxsaWoudGVzdEZyYW1ld29yay5Qc2lUZXN0VXRpbDsKK2ltcG9ydCBjb20uaW50ZWxsaWoudXRpbC5jb250YWluZXJzLkNvbnRhaW5lclV0aWw7CitpbXBvcnQgb3JnLmpldGJyYWlucy5hbm5vdGF0aW9ucy5Ob3ROdWxsOworaW1wb3J0IG9yZy5qZXRicmFpbnMuYW5ub3RhdGlvbnMuTnVsbGFibGU7CisKK2ltcG9ydCBqYXZhLmlvLkZpbGU7CitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworaW1wb3J0IGphdmEudXRpbC5IYXNoU2V0OworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitpbXBvcnQgc3RhdGljIGphdmEudXRpbC5Db2xsZWN0aW9ucy5zaW5nbGV0b25MaXN0OworCitAUGxhdGZvcm1UZXN0Q2FzZS5XcmFwSW5Db21tYW5kCitwdWJsaWMgY2xhc3MgRGlyZWN0b3J5SW5kZXhUZXN0IGV4dGVuZHMgSWRlYVRlc3RDYXNlIHsKKyAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgTG9nZ2VyIExPRyA9IExvZ2dlci5nZXRJbnN0YW5jZSgiI2NvbS5pbnRlbGxpai5vcGVuYXBpLnJvb3RzLmltcGwuRGlyZWN0b3J5SW5kZXhUZXN0Iik7CisKKyAgcHJpdmF0ZSBEaXJlY3RvcnlJbmRleCBteUluZGV4OworCisgIHByaXZhdGUgTW9kdWxlIG15TW9kdWxlMjsKKyAgcHJpdmF0ZSBNb2R1bGUgbXlNb2R1bGUzOworICBwcml2YXRlIFZpcnR1YWxGaWxlIG15Um9vdFZGaWxlOworICBwcml2YXRlIFZpcnR1YWxGaWxlIG15TW9kdWxlMURpcjsKKyAgcHJpdmF0ZSBWaXJ0dWFsRmlsZSBteU1vZHVsZTJEaXI7CisgIHByaXZhdGUgVmlydHVhbEZpbGUgbXlNb2R1bGUzRGlyOworICBwcml2YXRlIFZpcnR1YWxGaWxlIG15U3JjRGlyMTsKKyAgcHJpdmF0ZSBWaXJ0dWFsRmlsZSBteVNyY0RpcjI7CisgIHByaXZhdGUgVmlydHVhbEZpbGUgbXlUZXN0U3JjMTsKKyAgcHJpdmF0ZSBWaXJ0dWFsRmlsZSBteVBhY2sxRGlyOworICBwcml2YXRlIFZpcnR1YWxGaWxlIG15UGFjazJEaXI7CisgIHByaXZhdGUgVmlydHVhbEZpbGUgbXlGaWxlTGliRGlyOworICBwcml2YXRlIFZpcnR1YWxGaWxlIG15RmlsZUxpYlNyYzsKKyAgcHJpdmF0ZSBWaXJ0dWFsRmlsZSBteUZpbGVMaWJDbHM7CisgIHByaXZhdGUgVmlydHVhbEZpbGUgbXlMaWJEaXI7CisgIHByaXZhdGUgVmlydHVhbEZpbGUgbXlMaWJTcmNEaXI7CisgIHByaXZhdGUgVmlydHVhbEZpbGUgbXlMaWJDbHNEaXI7CisgIHByaXZhdGUgVmlydHVhbEZpbGUgbXlDdnNEaXI7CisgIHByaXZhdGUgVmlydHVhbEZpbGUgbXlFeGNsdWRlRGlyOworICBwcml2YXRlIFZpcnR1YWxGaWxlIG15T3V0cHV0RGlyOworICBwcml2YXRlIFZpcnR1YWxGaWxlIG15TW9kdWxlMU91dHB1dERpcjsKKworICBAT3ZlcnJpZGUKKyAgcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBzdXBlci5zZXRVcCgpOworCisgICAgZmluYWwgRmlsZSByb290ID0gY3JlYXRlVGVtcERpcmVjdG9yeSgpOworCisgICAgQXBwbGljYXRpb25NYW5hZ2VyLmdldEFwcGxpY2F0aW9uKCkucnVuV3JpdGVBY3Rpb24obmV3IFJ1bm5hYmxlKCkgeworICAgICAgQE92ZXJyaWRlCisgICAgICBwdWJsaWMgdm9pZCBydW4oKSB7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgLyoKKyAgICAgICAgICAgIHJvb3QKKyAgICAgICAgICAgICAgICBsaWIKKyAgICAgICAgICAgICAgICAgICAgZmlsZS5zcmMKKyAgICAgICAgICAgICAgICAgICAgZmlsZS5jbHMKKyAgICAgICAgICAgICAgICBtb2R1bGUxCisgICAgICAgICAgICAgICAgICAgIHNyYzEKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhY2sxCisgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0U3JjCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFjazIKKyAgICAgICAgICAgICAgICAgICAgbGliCisgICAgICAgICAgICAgICAgICAgICAgICBzcmMKKyAgICAgICAgICAgICAgICAgICAgICAgIGNscworICAgICAgICAgICAgICAgICAgICBtb2R1bGUyCisgICAgICAgICAgICAgICAgICAgICAgICBzcmMyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1ZTCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhjbHVkZWQKKyAgICAgICAgICAgICAgICBtb2R1bGUzCisgICAgICAgICAgICAgICAgb3V0CisgICAgICAgICAgICAgICAgICAgIG1vZHVsZTEKKyAgICAgICAgICAqLworICAgICAgICAgIG15Um9vdFZGaWxlID0gTG9jYWxGaWxlU3lzdGVtLmdldEluc3RhbmNlKCkucmVmcmVzaEFuZEZpbmRGaWxlQnlJb0ZpbGUocm9vdCk7CisgICAgICAgICAgYXNzZXJ0Tm90TnVsbChteVJvb3RWRmlsZSk7CisKKyAgICAgICAgICBteUZpbGVMaWJEaXIgPSBteVJvb3RWRmlsZS5jcmVhdGVDaGlsZERpcmVjdG9yeShEaXJlY3RvcnlJbmRleFRlc3QudGhpcywgImxpYiIpOworICAgICAgICAgIG15RmlsZUxpYlNyYyA9IG15RmlsZUxpYkRpci5jcmVhdGVDaGlsZERhdGEoRGlyZWN0b3J5SW5kZXhUZXN0LnRoaXMsICJmaWxlLnNyYyIpOworICAgICAgICAgIG15RmlsZUxpYkNscyA9IG15RmlsZUxpYkRpci5jcmVhdGVDaGlsZERhdGEoRGlyZWN0b3J5SW5kZXhUZXN0LnRoaXMsICJmaWxlLmNscyIpOworICAgICAgICAgIG15TW9kdWxlMURpciA9IG15Um9vdFZGaWxlLmNyZWF0ZUNoaWxkRGlyZWN0b3J5KERpcmVjdG9yeUluZGV4VGVzdC50aGlzLCAibW9kdWxlMSIpOworICAgICAgICAgIG15U3JjRGlyMSA9IG15TW9kdWxlMURpci5jcmVhdGVDaGlsZERpcmVjdG9yeShEaXJlY3RvcnlJbmRleFRlc3QudGhpcywgInNyYzEiKTsKKyAgICAgICAgICBteVBhY2sxRGlyID0gbXlTcmNEaXIxLmNyZWF0ZUNoaWxkRGlyZWN0b3J5KERpcmVjdG9yeUluZGV4VGVzdC50aGlzLCAicGFjazEiKTsKKyAgICAgICAgICBteVRlc3RTcmMxID0gbXlTcmNEaXIxLmNyZWF0ZUNoaWxkRGlyZWN0b3J5KERpcmVjdG9yeUluZGV4VGVzdC50aGlzLCAidGVzdFNyYyIpOworICAgICAgICAgIG15UGFjazJEaXIgPSBteVRlc3RTcmMxLmNyZWF0ZUNoaWxkRGlyZWN0b3J5KERpcmVjdG9yeUluZGV4VGVzdC50aGlzLCAicGFjazIiKTsKKworICAgICAgICAgIG15TGliRGlyID0gbXlNb2R1bGUxRGlyLmNyZWF0ZUNoaWxkRGlyZWN0b3J5KERpcmVjdG9yeUluZGV4VGVzdC50aGlzLCAibGliIik7CisgICAgICAgICAgbXlMaWJTcmNEaXIgPSBteUxpYkRpci5jcmVhdGVDaGlsZERpcmVjdG9yeShEaXJlY3RvcnlJbmRleFRlc3QudGhpcywgInNyYyIpOworICAgICAgICAgIG15TGliQ2xzRGlyID0gbXlMaWJEaXIuY3JlYXRlQ2hpbGREaXJlY3RvcnkoRGlyZWN0b3J5SW5kZXhUZXN0LnRoaXMsICJjbHMiKTsKKyAgICAgICAgICBteU1vZHVsZTJEaXIgPSBteU1vZHVsZTFEaXIuY3JlYXRlQ2hpbGREaXJlY3RvcnkoRGlyZWN0b3J5SW5kZXhUZXN0LnRoaXMsICJtb2R1bGUyIik7CisgICAgICAgICAgbXlTcmNEaXIyID0gbXlNb2R1bGUyRGlyLmNyZWF0ZUNoaWxkRGlyZWN0b3J5KERpcmVjdG9yeUluZGV4VGVzdC50aGlzLCAic3JjMiIpOworICAgICAgICAgIG15Q3ZzRGlyID0gbXlTcmNEaXIyLmNyZWF0ZUNoaWxkRGlyZWN0b3J5KERpcmVjdG9yeUluZGV4VGVzdC50aGlzLCAiQ1ZTIik7CisgICAgICAgICAgbXlFeGNsdWRlRGlyID0gbXlTcmNEaXIyLmNyZWF0ZUNoaWxkRGlyZWN0b3J5KERpcmVjdG9yeUluZGV4VGVzdC50aGlzLCAiZXhjbHVkZWQiKTsKKworICAgICAgICAgIG15TW9kdWxlM0RpciA9IG15Um9vdFZGaWxlLmNyZWF0ZUNoaWxkRGlyZWN0b3J5KERpcmVjdG9yeUluZGV4VGVzdC50aGlzLCAibW9kdWxlMyIpOworCisgICAgICAgICAgbXlPdXRwdXREaXIgPSBteVJvb3RWRmlsZS5jcmVhdGVDaGlsZERpcmVjdG9yeShEaXJlY3RvcnlJbmRleFRlc3QudGhpcywgIm91dCIpOworICAgICAgICAgIG15TW9kdWxlMU91dHB1dERpciA9IG15T3V0cHV0RGlyLmNyZWF0ZUNoaWxkRGlyZWN0b3J5KERpcmVjdG9yeUluZGV4VGVzdC50aGlzLCAibW9kdWxlMSIpOworCisgICAgICAgICAgZ2V0Q29tcGlsZXJQcm9qZWN0RXh0ZW5zaW9uKCkuc2V0Q29tcGlsZXJPdXRwdXRVcmwobXlPdXRwdXREaXIuZ2V0VXJsKCkpOworICAgICAgICAgIE1vZHVsZU1hbmFnZXIgbW9kdWxlTWFuYWdlciA9IE1vZHVsZU1hbmFnZXIuZ2V0SW5zdGFuY2UobXlQcm9qZWN0KTsKKworICAgICAgICAgIC8vIGZpbGwgcm9vdHMgb2YgbW9kdWxlMQorICAgICAgICAgIHsKKyAgICAgICAgICAgIE1vZHVsZVJvb3RNb2RpZmljYXRpb25VdGlsLnNldE1vZHVsZVNkayhteU1vZHVsZSwgbnVsbCk7CisgICAgICAgICAgICBQc2lUZXN0VXRpbC5hZGRDb250ZW50Um9vdChteU1vZHVsZSwgbXlNb2R1bGUxRGlyKTsKKyAgICAgICAgICAgIFBzaVRlc3RVdGlsLmFkZFNvdXJjZVJvb3QobXlNb2R1bGUsIG15U3JjRGlyMSk7CisgICAgICAgICAgICBQc2lUZXN0VXRpbC5hZGRTb3VyY2VSb290KG15TW9kdWxlLCBteVRlc3RTcmMxLCB0cnVlKTsKKyAgICAgICAgICAgIE1vZHVsZVJvb3RNb2RpZmljYXRpb25VdGlsLmFkZE1vZHVsZUxpYnJhcnkobXlNb2R1bGUsICJsaWIuanMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaW5nbGV0b25MaXN0KG15RmlsZUxpYkNscy5nZXRVcmwoKSksIHNpbmdsZXRvbkxpc3QobXlGaWxlTGliU3JjLmdldFVybCgpKSk7CisgICAgICAgICAgfQorCisgICAgICAgICAgLy8gZmlsbCByb290cyBvZiBtb2R1bGUyCisgICAgICAgICAgeworICAgICAgICAgICAgVmlydHVhbEZpbGUgbW9kdWxlRmlsZSA9IG15TW9kdWxlMkRpci5jcmVhdGVDaGlsZERhdGEoRGlyZWN0b3J5SW5kZXhUZXN0LnRoaXMsICJtb2R1bGUyLmltbCIpOworICAgICAgICAgICAgbXlNb2R1bGUyID0gbW9kdWxlTWFuYWdlci5uZXdNb2R1bGUobW9kdWxlRmlsZS5nZXRQYXRoKCksIFN0ZE1vZHVsZVR5cGVzLkpBVkEuZ2V0SWQoKSk7CisKKyAgICAgICAgICAgIFBzaVRlc3RVdGlsLmFkZENvbnRlbnRSb290KG15TW9kdWxlMiwgbXlNb2R1bGUyRGlyKTsKKyAgICAgICAgICAgIFBzaVRlc3RVdGlsLmFkZFNvdXJjZVJvb3QobXlNb2R1bGUyLCBteVNyY0RpcjIpOworICAgICAgICAgICAgUHNpVGVzdFV0aWwuYWRkRXhjbHVkZWRSb290KG15TW9kdWxlMiwgbXlFeGNsdWRlRGlyKTsKKyAgICAgICAgICAgIE1vZHVsZVJvb3RNb2RpZmljYXRpb25VdGlsLmFkZE1vZHVsZUxpYnJhcnkobXlNb2R1bGUyLCAibGliIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2luZ2xldG9uTGlzdChteUxpYkNsc0Rpci5nZXRVcmwoKSksIHNpbmdsZXRvbkxpc3QobXlMaWJTcmNEaXIuZ2V0VXJsKCkpKTsKKyAgICAgICAgICB9CisKKyAgICAgICAgICAvLyBmaWxsIHJvb3RzIG9mIG1vZHVsZTMKKyAgICAgICAgICB7CisgICAgICAgICAgICBWaXJ0dWFsRmlsZSBtb2R1bGVGaWxlID0gbXlNb2R1bGUzRGlyLmNyZWF0ZUNoaWxkRGF0YShEaXJlY3RvcnlJbmRleFRlc3QudGhpcywgIm1vZHVsZTMuaW1sIik7CisgICAgICAgICAgICBteU1vZHVsZTMgPSBtb2R1bGVNYW5hZ2VyLm5ld01vZHVsZShtb2R1bGVGaWxlLmdldFBhdGgoKSwgU3RkTW9kdWxlVHlwZXMuSkFWQS5nZXRJZCgpKTsKKworICAgICAgICAgICAgUHNpVGVzdFV0aWwuYWRkQ29udGVudFJvb3QobXlNb2R1bGUzLCBteU1vZHVsZTNEaXIpOworICAgICAgICAgICAgTW9kdWxlUm9vdE1vZGlmaWNhdGlvblV0aWwuYWRkRGVwZW5kZW5jeShteU1vZHVsZTMsIG15TW9kdWxlMik7CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgTE9HLmVycm9yKGUpOworICAgICAgICB9CisgICAgICB9CisgICAgfSk7CisKKyAgICBteUluZGV4ID0gRGlyZWN0b3J5SW5kZXguZ2V0SW5zdGFuY2UobXlQcm9qZWN0KTsKKyAgfQorCisgIHByaXZhdGUgQ29tcGlsZXJQcm9qZWN0RXh0ZW5zaW9uIGdldENvbXBpbGVyUHJvamVjdEV4dGVuc2lvbigpIHsKKyAgICBmaW5hbCBDb21waWxlclByb2plY3RFeHRlbnNpb24gaW5zdGFuY2UgPSBDb21waWxlclByb2plY3RFeHRlbnNpb24uZ2V0SW5zdGFuY2UobXlQcm9qZWN0KTsKKyAgICBhc3NlcnROb3ROdWxsKGluc3RhbmNlKTsKKyAgICByZXR1cm4gaW5zdGFuY2U7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0RGlySW5mb3MoKSB7CisgICAgY2hlY2tJbmZvTnVsbChteVJvb3RWRmlsZSk7CisKKyAgICAvLyBiZXdhcmU6IGZpbGVzIGluIGRpcmVjdG9yeSBpbmRleAorICAgIGNoZWNrSW5mbyhteUZpbGVMaWJTcmMsIG51bGwsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIHRydWUsICIiKTsKKyAgICBjaGVja0luZm8obXlGaWxlTGliQ2xzLCBudWxsLCBmYWxzZSwgZmFsc2UsIHRydWUsIGZhbHNlLCAiIik7CisKKyAgICBjaGVja0luZm8obXlNb2R1bGUxRGlyLCBteU1vZHVsZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIG51bGwpOworICAgIGNoZWNrSW5mbyhteVNyY0RpcjEsIG15TW9kdWxlLCB0cnVlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCAiIiwgbXlNb2R1bGUpOworICAgIGNoZWNrSW5mbyhteVBhY2sxRGlyLCBteU1vZHVsZSwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgInBhY2sxIiwgbXlNb2R1bGUpOworICAgIGNoZWNrSW5mbyhteVRlc3RTcmMxLCBteU1vZHVsZSwgdHJ1ZSwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCAiIiwgbXlNb2R1bGUpOworICAgIGNoZWNrSW5mbyhteVBhY2syRGlyLCBteU1vZHVsZSwgdHJ1ZSwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCAicGFjazIiLCBteU1vZHVsZSk7CisKKyAgICBjaGVja0luZm8obXlMaWJEaXIsIG15TW9kdWxlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgbnVsbCk7CisgICAgY2hlY2tJbmZvKG15TGliU3JjRGlyLCBteU1vZHVsZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgdHJ1ZSwgIiIsIG15TW9kdWxlMik7CisgICAgY2hlY2tJbmZvKG15TGliQ2xzRGlyLCBteU1vZHVsZSwgZmFsc2UsIGZhbHNlLCB0cnVlLCBmYWxzZSwgIiIsIG15TW9kdWxlMik7CisKKyAgICBjaGVja0luZm8obXlNb2R1bGUyRGlyLCBteU1vZHVsZTIsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBudWxsKTsKKyAgICBjaGVja0luZm8obXlTcmNEaXIyLCBteU1vZHVsZTIsIHRydWUsIGZhbHNlLCBmYWxzZSwgZmFsc2UsICIiLCBteU1vZHVsZTIsIG15TW9kdWxlMyk7CisgICAgY2hlY2tJbmZvTnVsbChteUN2c0Rpcik7CisgICAgY2hlY2tJbmZvTnVsbChteUV4Y2x1ZGVEaXIpOworCisgICAgY2hlY2tJbmZvKG15TW9kdWxlM0RpciwgbXlNb2R1bGUzLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgbnVsbCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0RGlyc0J5UGFja2FnZU5hbWUoKSB7CisgICAgY2hlY2tQYWNrYWdlKCIiLCBteUZpbGVMaWJTcmMsIG15RmlsZUxpYkNscywgbXlTcmNEaXIxLCBteVRlc3RTcmMxLCBteUxpYlNyY0RpciwgbXlMaWJDbHNEaXIsIG15U3JjRGlyMik7CisgICAgY2hlY2tQYWNrYWdlKCJwYWNrMSIsIG15UGFjazFEaXIpOworICAgIGNoZWNrUGFja2FnZSgicGFjazIiLCBteVBhY2syRGlyKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RDcmVhdGVEaXIoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBTdHJpbmcgcGF0aCA9IG15U3JjRGlyMS5nZXRQYXRoKCkucmVwbGFjZSgnLycsIEZpbGUuc2VwYXJhdG9yQ2hhcik7CisgICAgYXNzZXJ0VHJ1ZShuZXcgRmlsZShwYXRoICsgRmlsZS5zZXBhcmF0b3JDaGFyICsgImRpcjEiICsgRmlsZS5zZXBhcmF0b3JDaGFyICsgImRpcjIiKS5ta2RpcnMoKSk7CisgICAgYXNzZXJ0VHJ1ZShuZXcgRmlsZShwYXRoICsgRmlsZS5zZXBhcmF0b3JDaGFyICsgIkNWUyIpLm1rZGlycygpKTsKKyAgICBWaXJ0dWFsRmlsZU1hbmFnZXIuZ2V0SW5zdGFuY2UoKS5zeW5jUmVmcmVzaCgpOworCisgICAgbXlJbmRleC5jaGVja0NvbnNpc3RlbmN5KCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0RGVsZXRlRGlyKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgVmlydHVhbEZpbGUgc3ViZGlyMSA9IG15U3JjRGlyMS5jcmVhdGVDaGlsZERpcmVjdG9yeSh0aGlzLCAic3ViZGlyMSIpOworICAgIFZpcnR1YWxGaWxlIHN1YmRpcjIgPSBzdWJkaXIxLmNyZWF0ZUNoaWxkRGlyZWN0b3J5KHRoaXMsICJzdWJkaXIyIik7CisgICAgc3ViZGlyMi5jcmVhdGVDaGlsZERpcmVjdG9yeSh0aGlzLCAic3ViZGlyMyIpOworCisgICAgbXlJbmRleC5jaGVja0NvbnNpc3RlbmN5KCk7CisKKyAgICBzdWJkaXIxLmRlbGV0ZSh0aGlzKTsKKworICAgIG15SW5kZXguY2hlY2tDb25zaXN0ZW5jeSgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdE1vdmVEaXIoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBWaXJ0dWFsRmlsZSBzdWJkaXIgPSBteVNyY0RpcjIuY3JlYXRlQ2hpbGREaXJlY3RvcnkodGhpcywgInN1YmRpcjEiKTsKKyAgICBzdWJkaXIuY3JlYXRlQ2hpbGREaXJlY3RvcnkodGhpcywgInN1YmRpcjIiKTsKKworICAgIG15SW5kZXguY2hlY2tDb25zaXN0ZW5jeSgpOworCisgICAgc3ViZGlyLm1vdmUodGhpcywgbXlTcmNEaXIxKTsKKworICAgIG15SW5kZXguY2hlY2tDb25zaXN0ZW5jeSgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFJlbmFtZURpcigpIHRocm93cyBFeGNlcHRpb24geworICAgIFZpcnR1YWxGaWxlIHN1YmRpciA9IG15U3JjRGlyMi5jcmVhdGVDaGlsZERpcmVjdG9yeSh0aGlzLCAic3ViZGlyMSIpOworICAgIHN1YmRpci5jcmVhdGVDaGlsZERpcmVjdG9yeSh0aGlzLCAic3ViZGlyMiIpOworCisgICAgbXlJbmRleC5jaGVja0NvbnNpc3RlbmN5KCk7CisKKyAgICBzdWJkaXIucmVuYW1lKHRoaXMsICJhYmMuZCIpOworCisgICAgbXlJbmRleC5jaGVja0NvbnNpc3RlbmN5KCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0UmVuYW1lUm9vdCgpIHRocm93cyBFeGNlcHRpb24geworICAgIG15TW9kdWxlMURpci5yZW5hbWUodGhpcywgIm5ld05hbWUiKTsKKworICAgIG15SW5kZXguY2hlY2tDb25zaXN0ZW5jeSgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdE1vdmVSb290KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgbXlNb2R1bGUxRGlyLm1vdmUodGhpcywgbXlNb2R1bGUzRGlyKTsKKworICAgIG15SW5kZXguY2hlY2tDb25zaXN0ZW5jeSgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEFkZFByb2plY3REaXIoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBuZXcgV3JpdGVDb21tYW5kQWN0aW9uLlNpbXBsZShnZXRQcm9qZWN0KCkpIHsKKyAgICAgIEBPdmVycmlkZQorICAgICAgcHJvdGVjdGVkIHZvaWQgcnVuKCkgdGhyb3dzIFRocm93YWJsZSB7CisgICAgICAgIFZpcnR1YWxGaWxlIG5ld0RpciA9IG15TW9kdWxlMURpci5nZXRQYXJlbnQoKS5jcmVhdGVDaGlsZERpcmVjdG9yeShEaXJlY3RvcnlJbmRleFRlc3QudGhpcywgIm5ld0RpciIpOworICAgICAgICBuZXdEaXIuY3JlYXRlQ2hpbGREaXJlY3RvcnkoRGlyZWN0b3J5SW5kZXhUZXN0LnRoaXMsICJzdWJkaXIiKTsKKworICAgICAgICBteUluZGV4LmNoZWNrQ29uc2lzdGVuY3koKTsKKyAgICAgICAgUHNpVGVzdFV0aWwuYWRkQ29udGVudFJvb3QobXlNb2R1bGUsIG5ld0Rpcik7CisgICAgICB9CisgICAgfS5leGVjdXRlKCkudGhyb3dFeGNlcHRpb24oKTsKKworCisgICAgbXlJbmRleC5jaGVja0NvbnNpc3RlbmN5KCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0Q2hhbmdlSWdub3JlTGlzdCgpIHRocm93cyBFeGNlcHRpb24geworICAgIG15TW9kdWxlMURpci5jcmVhdGVDaGlsZERpcmVjdG9yeSh0aGlzLCAibmV3RGlyIik7CisKKyAgICBteUluZGV4LmNoZWNrQ29uc2lzdGVuY3koKTsKKworICAgIGZpbmFsIEZpbGVUeXBlTWFuYWdlckV4IGZpbGVUeXBlTWFuYWdlciA9IChGaWxlVHlwZU1hbmFnZXJFeClGaWxlVHlwZU1hbmFnZXIuZ2V0SW5zdGFuY2UoKTsKKyAgICBmaW5hbCBTdHJpbmcgbGlzdCA9IGZpbGVUeXBlTWFuYWdlci5nZXRJZ25vcmVkRmlsZXNMaXN0KCk7CisgICAgZmluYWwgU3RyaW5nIGxpc3QxID0gbGlzdCArICI7IiArICJuZXdEaXIiOworICAgIHRyeSB7CisgICAgICBBcHBsaWNhdGlvbk1hbmFnZXIuZ2V0QXBwbGljYXRpb24oKS5ydW5Xcml0ZUFjdGlvbihuZXcgUnVubmFibGUoKSB7CisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgdm9pZCBydW4oKSB7CisgICAgICAgICAgZmlsZVR5cGVNYW5hZ2VyLnNldElnbm9yZWRGaWxlc0xpc3QobGlzdDEpOworICAgICAgICB9CisgICAgICB9KTsKKworICAgICAgbXlJbmRleC5jaGVja0NvbnNpc3RlbmN5KCk7CisgICAgfQorICAgIGZpbmFsbHkgeworICAgICAgQXBwbGljYXRpb25NYW5hZ2VyLmdldEFwcGxpY2F0aW9uKCkucnVuV3JpdGVBY3Rpb24obmV3IFJ1bm5hYmxlKCkgeworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIHZvaWQgcnVuKCkgeworICAgICAgICAgIGZpbGVUeXBlTWFuYWdlci5zZXRJZ25vcmVkRmlsZXNMaXN0KGxpc3QpOworICAgICAgICB9CisgICAgICB9KTsKKyAgICB9CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0QWRkTW9kdWxlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgbXlJbmRleC5jaGVja0NvbnNpc3RlbmN5KCk7CisKKyAgICBuZXcgV3JpdGVDb21tYW5kQWN0aW9uLlNpbXBsZShnZXRQcm9qZWN0KCkpIHsKKyAgICAgIEBPdmVycmlkZQorICAgICAgcHJvdGVjdGVkIHZvaWQgcnVuKCkgdGhyb3dzIFRocm93YWJsZSB7CisgICAgICAgIFZpcnR1YWxGaWxlIG5ld01vZHVsZUNvbnRlbnQgPSBteVJvb3RWRmlsZS5jcmVhdGVDaGlsZERpcmVjdG9yeShEaXJlY3RvcnlJbmRleFRlc3QudGhpcywgIm5ld01vZHVsZSIpOworICAgICAgICBuZXdNb2R1bGVDb250ZW50LmNyZWF0ZUNoaWxkRGlyZWN0b3J5KERpcmVjdG9yeUluZGV4VGVzdC50aGlzLCAic3ViRGlyIik7CisgICAgICAgIE1vZHVsZU1hbmFnZXIgbW9kdWxlTWFuYWdlciA9IE1vZHVsZU1hbmFnZXIuZ2V0SW5zdGFuY2UobXlQcm9qZWN0KTsKKyAgICAgICAgTW9kdWxlIG1vZHVsZSA9IG1vZHVsZU1hbmFnZXIubmV3TW9kdWxlKG15Um9vdFZGaWxlLmdldFBhdGgoKSArICIvbmV3TW9kdWxlLmltbCIsIFN0ZE1vZHVsZVR5cGVzLkpBVkEuZ2V0SWQoKSk7CisgICAgICAgIFBzaVRlc3RVdGlsLmFkZENvbnRlbnRSb290KG1vZHVsZSwgbmV3TW9kdWxlQ29udGVudCk7CisgICAgICB9CisgICAgfS5leGVjdXRlKCkudGhyb3dFeGNlcHRpb24oKTsKKworCisgICAgbXlJbmRleC5jaGVja0NvbnNpc3RlbmN5KCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0RXhwbGljaXRFeGNsdWRlT2ZJbm5lcigpIHRocm93cyBFeGNlcHRpb24geworICAgIFBzaVRlc3RVdGlsLmFkZEV4Y2x1ZGVkUm9vdChteU1vZHVsZSwgbXlNb2R1bGUyRGlyKTsKKworICAgIG15SW5kZXguY2hlY2tDb25zaXN0ZW5jeSgpOworCisgICAgY2hlY2tJbmZvKG15TW9kdWxlMkRpciwgbXlNb2R1bGUyLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgbnVsbCk7CisgICAgY2hlY2tJbmZvKG15U3JjRGlyMiwgbXlNb2R1bGUyLCB0cnVlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCAiIiwgbXlNb2R1bGUyLCBteU1vZHVsZTMpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFJlc2V0dGluZ1Byb2plY3RPdXRwdXRQYXRoKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgVmlydHVhbEZpbGUgb3V0cHV0MSA9IG15TW9kdWxlMURpci5jcmVhdGVDaGlsZERpcmVjdG9yeSh0aGlzLCAib3V0cHV0MSIpOworICAgIFZpcnR1YWxGaWxlIG91dHB1dDIgPSBteU1vZHVsZTFEaXIuY3JlYXRlQ2hpbGREaXJlY3RvcnkodGhpcywgIm91dHB1dDIiKTsKKworICAgIGNoZWNrSW5mb05vdE51bGwob3V0cHV0MSk7CisgICAgY2hlY2tJbmZvTm90TnVsbChvdXRwdXQyKTsKKworICAgIGdldENvbXBpbGVyUHJvamVjdEV4dGVuc2lvbigpLnNldENvbXBpbGVyT3V0cHV0VXJsKG91dHB1dDEuZ2V0VXJsKCkpOworICAgIGZpcmVSb290c0NoYW5nZWQoKTsKKworICAgIGNoZWNrSW5mb051bGwob3V0cHV0MSk7CisgICAgY2hlY2tJbmZvTm90TnVsbChvdXRwdXQyKTsKKworICAgIGdldENvbXBpbGVyUHJvamVjdEV4dGVuc2lvbigpLnNldENvbXBpbGVyT3V0cHV0VXJsKG91dHB1dDIuZ2V0VXJsKCkpOworICAgIGZpcmVSb290c0NoYW5nZWQoKTsKKworICAgIGNoZWNrSW5mb05vdE51bGwob3V0cHV0MSk7CisgICAgY2hlY2tJbmZvTnVsbChvdXRwdXQyKTsKKyAgfQorCisgIHByaXZhdGUgdm9pZCBmaXJlUm9vdHNDaGFuZ2VkKCkgeworICAgIFByb2plY3RSb290TWFuYWdlckV4LmdldEluc3RhbmNlRXgoZ2V0UHJvamVjdCgpKS5tYWtlUm9vdHNDaGFuZ2UoRW1wdHlSdW5uYWJsZS5nZXRJbnN0YW5jZSgpLCBmYWxzZSwgdHJ1ZSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0RXhjbHVkZWREaXJTaG91bGRCZUV4Y2x1ZGVkUmlnaHRBZnRlckl0c0NyZWF0aW9uKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgVmlydHVhbEZpbGUgZXhjbHVkZWQgPSBteU1vZHVsZTFEaXIuY3JlYXRlQ2hpbGREaXJlY3RvcnkodGhpcywgImV4Y2x1ZGVkIik7CisgICAgVmlydHVhbEZpbGUgcHJvamVjdE91dHB1dCA9IG15TW9kdWxlMURpci5jcmVhdGVDaGlsZERpcmVjdG9yeSh0aGlzLCAicHJvamVjdE91dHB1dCIpOworICAgIFZpcnR1YWxGaWxlIG1vZHVsZTJPdXRwdXQgPSBteU1vZHVsZTFEaXIuY3JlYXRlQ2hpbGREaXJlY3RvcnkodGhpcywgIm1vZHVsZTJPdXRwdXQiKTsKKyAgICBWaXJ0dWFsRmlsZSBtb2R1bGUyVGVzdE91dHB1dCA9IG15TW9kdWxlMkRpci5jcmVhdGVDaGlsZERpcmVjdG9yeSh0aGlzLCAibW9kdWxlMlRlc3RPdXRwdXQiKTsKKworICAgIGNoZWNrSW5mb05vdE51bGwoZXhjbHVkZWQpOworICAgIGNoZWNrSW5mb05vdE51bGwocHJvamVjdE91dHB1dCk7CisgICAgY2hlY2tJbmZvTm90TnVsbChtb2R1bGUyT3V0cHV0KTsKKyAgICBjaGVja0luZm9Ob3ROdWxsKG1vZHVsZTJUZXN0T3V0cHV0KTsKKworICAgIGdldENvbXBpbGVyUHJvamVjdEV4dGVuc2lvbigpLnNldENvbXBpbGVyT3V0cHV0VXJsKHByb2plY3RPdXRwdXQuZ2V0VXJsKCkpOworCisgICAgUHNpVGVzdFV0aWwuYWRkRXhjbHVkZWRSb290KG15TW9kdWxlLCBleGNsdWRlZCk7CisgICAgUHNpVGVzdFV0aWwuc2V0Q29tcGlsZXJPdXRwdXRQYXRoKG15TW9kdWxlMiwgbW9kdWxlMk91dHB1dC5nZXRVcmwoKSwgZmFsc2UpOworICAgIFBzaVRlc3RVdGlsLnNldENvbXBpbGVyT3V0cHV0UGF0aChteU1vZHVsZTIsIG1vZHVsZTJUZXN0T3V0cHV0LmdldFVybCgpLCB0cnVlKTsKKyAgICBQc2lUZXN0VXRpbC5zZXRFeGNsdWRlQ29tcGlsZU91dHB1dChteU1vZHVsZTIsIHRydWUpOworCisgICAgY2hlY2tJbmZvTnVsbChleGNsdWRlZCk7CisgICAgY2hlY2tJbmZvTnVsbChwcm9qZWN0T3V0cHV0KTsKKyAgICBjaGVja0luZm9OdWxsKG1vZHVsZTJPdXRwdXQpOworICAgIGNoZWNrSW5mb051bGwobW9kdWxlMlRlc3RPdXRwdXQpOworCisgICAgZXhjbHVkZWQuZGVsZXRlKHRoaXMpOworICAgIHByb2plY3RPdXRwdXQuZGVsZXRlKHRoaXMpOworICAgIG1vZHVsZTJPdXRwdXQuZGVsZXRlKHRoaXMpOworICAgIG1vZHVsZTJUZXN0T3V0cHV0LmRlbGV0ZSh0aGlzKTsKKworICAgIGZpbmFsIExpc3Q8VmlydHVhbEZpbGU+IGNyZWF0ZWQgPSBuZXcgQXJyYXlMaXN0PFZpcnR1YWxGaWxlPigpOworICAgIFZpcnR1YWxGaWxlTGlzdGVuZXIgbCA9IG5ldyBWaXJ0dWFsRmlsZUFkYXB0ZXIoKSB7CisgICAgICBAT3ZlcnJpZGUKKyAgICAgIHB1YmxpYyB2b2lkIGZpbGVDcmVhdGVkKFZpcnR1YWxGaWxlRXZlbnQgZSkgeworICAgICAgICBWaXJ0dWFsRmlsZSBmaWxlID0gZS5nZXRGaWxlKCk7CisgICAgICAgIGNoZWNrSW5mb051bGwoZmlsZSk7CisgICAgICAgIGNyZWF0ZWQuYWRkKGZpbGUpOworICAgICAgfQorICAgIH07CisgICAgVmlydHVhbEZpbGVNYW5hZ2VyLmdldEluc3RhbmNlKCkuYWRkVmlydHVhbEZpbGVMaXN0ZW5lcihsLCBnZXRUZXN0Um9vdERpc3Bvc2FibGUoKSk7CisgICAgZXhjbHVkZWQgPSBteU1vZHVsZTFEaXIuY3JlYXRlQ2hpbGREaXJlY3RvcnkodGhpcywgZXhjbHVkZWQuZ2V0TmFtZSgpKTsKKyAgICBwcm9qZWN0T3V0cHV0ID0gbXlNb2R1bGUxRGlyLmNyZWF0ZUNoaWxkRGlyZWN0b3J5KHRoaXMsIHByb2plY3RPdXRwdXQuZ2V0TmFtZSgpKTsKKyAgICBtb2R1bGUyT3V0cHV0ID0gbXlNb2R1bGUxRGlyLmNyZWF0ZUNoaWxkRGlyZWN0b3J5KHRoaXMsIG1vZHVsZTJPdXRwdXQuZ2V0TmFtZSgpKTsKKyAgICBtb2R1bGUyVGVzdE91dHB1dCA9IG15TW9kdWxlMkRpci5jcmVhdGVDaGlsZERpcmVjdG9yeSh0aGlzLCBtb2R1bGUyVGVzdE91dHB1dC5nZXROYW1lKCkpOworCisgICAgY2hlY2tJbmZvTnVsbChleGNsdWRlZCk7CisgICAgY2hlY2tJbmZvTnVsbChwcm9qZWN0T3V0cHV0KTsKKyAgICBjaGVja0luZm9OdWxsKG1vZHVsZTJPdXRwdXQpOworICAgIGNoZWNrSW5mb051bGwobW9kdWxlMlRlc3RPdXRwdXQpOworCisgICAgYXNzZXJ0RXF1YWxzKGNyZWF0ZWQudG9TdHJpbmcoKSwgNCwgY3JlYXRlZC5zaXplKCkpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEV4Y2x1ZGVzU2hvdWxkQmVSZWNvZ25pemVkUmlnaHRPblJlZnJlc2goKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBmaW5hbCBWaXJ0dWFsRmlsZSBkaXIgPSBteU1vZHVsZTFEaXIuY3JlYXRlQ2hpbGREaXJlY3RvcnkodGhpcywgImRpciIpOworICAgIGZpbmFsIFZpcnR1YWxGaWxlIGV4Y2x1ZGVkID0gZGlyLmNyZWF0ZUNoaWxkRGlyZWN0b3J5KHRoaXMsICJleGNsdWRlZCIpOworICAgIFBzaVRlc3RVdGlsLmFkZEV4Y2x1ZGVkUm9vdChteU1vZHVsZSwgZXhjbHVkZWQpOworICAgIG5ldyBXcml0ZUNvbW1hbmRBY3Rpb24uU2ltcGxlKGdldFByb2plY3QoKSkgeworICAgICAgQE92ZXJyaWRlCisgICAgICBwcm90ZWN0ZWQgdm9pZCBydW4oKSB0aHJvd3MgVGhyb3dhYmxlIHsKKyAgICAgICAgZGlyLmRlbGV0ZShEaXJlY3RvcnlJbmRleFRlc3QudGhpcyk7CisgICAgICB9CisgICAgfS5leGVjdXRlKCkudGhyb3dFeGNlcHRpb24oKTsKKworCisgICAgYm9vbGVhbiBjcmVhdGVkID0gbmV3IEZpbGUobXlNb2R1bGUxRGlyLmdldFBhdGgoKSwgImRpci9leGNsdWRlZC9mb28iKS5ta2RpcnMoKTsKKyAgICBhc3NlcnRUcnVlKGNyZWF0ZWQpOworCisgICAgVmlydHVhbEZpbGVMaXN0ZW5lciBsID0gbmV3IFZpcnR1YWxGaWxlQWRhcHRlcigpIHsKKyAgICAgIEBPdmVycmlkZQorICAgICAgcHVibGljIHZvaWQgZmlsZUNyZWF0ZWQoVmlydHVhbEZpbGVFdmVudCBlKSB7CisgICAgICAgIGFzc2VydEVxdWFscygiZGlyIiwgZS5nZXRGaWxlTmFtZSgpKTsKKworICAgICAgICBWaXJ0dWFsRmlsZSBmaWxlID0gZS5nZXRGaWxlKCk7CisgICAgICAgIGNoZWNrSW5mb05vdE51bGwoZmlsZSk7CisgICAgICAgIGNoZWNrSW5mb051bGwoZmlsZS5maW5kRmlsZUJ5UmVsYXRpdmVQYXRoKCJleGNsdWRlZCIpKTsKKyAgICAgICAgY2hlY2tJbmZvTnVsbChmaWxlLmZpbmRGaWxlQnlSZWxhdGl2ZVBhdGgoImV4Y2x1ZGVkL2ZvbyIpKTsKKyAgICAgIH0KKyAgICB9OworCisgICAgVmlydHVhbEZpbGVNYW5hZ2VyLmdldEluc3RhbmNlKCkuYWRkVmlydHVhbEZpbGVMaXN0ZW5lcihsLCBnZXRUZXN0Um9vdERpc3Bvc2FibGUoKSk7CisgICAgVmlydHVhbEZpbGVNYW5hZ2VyLmdldEluc3RhbmNlKCkuc3luY1JlZnJlc2goKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RQcm9jZXNzaW5nTmVzdGVkQ29udGVudFJvb3RzT2ZFeGNsdWRlZERpcnNPbkNyZWF0aW9uKCkgeworICAgIFN0cmluZyByb290UGF0aCA9IG15TW9kdWxlMURpci5nZXRQYXRoKCk7CisgICAgZmluYWwgRmlsZSBmID0gbmV3IEZpbGUocm9vdFBhdGgsICJleGNsdWRlZERpci9kaXIvYW5vdGhlckNvbnRlbnRSb290Iik7CisgICAgQXBwbGljYXRpb25NYW5hZ2VyLmdldEFwcGxpY2F0aW9uKCkucnVuV3JpdGVBY3Rpb24obmV3IFJ1bm5hYmxlKCkgeworICAgICAgQE92ZXJyaWRlCisgICAgICBwdWJsaWMgdm9pZCBydW4oKSB7CisgICAgICAgIE1vZGlmaWFibGVSb290TW9kZWwgcm9vdE1vZGVsID0gTW9kdWxlUm9vdE1hbmFnZXIuZ2V0SW5zdGFuY2UobXlNb2R1bGUpLmdldE1vZGlmaWFibGVNb2RlbCgpOworICAgICAgICByb290TW9kZWwuZ2V0Q29udGVudEVudHJpZXMoKVswXQorICAgICAgICAgIC5hZGRFeGNsdWRlRm9sZGVyKFZmc1V0aWxDb3JlLnBhdGhUb1VybChGaWxlVXRpbC50b1N5c3RlbUluZGVwZW5kZW50TmFtZShmLmdldFBhcmVudEZpbGUoKS5nZXRQYXJlbnQoKSkpKTsKKyAgICAgICAgcm9vdE1vZGVsLmNvbW1pdCgpOworCisgICAgICAgIHJvb3RNb2RlbCA9IE1vZHVsZVJvb3RNYW5hZ2VyLmdldEluc3RhbmNlKG15TW9kdWxlMikuZ2V0TW9kaWZpYWJsZU1vZGVsKCk7CisgICAgICAgIHJvb3RNb2RlbC5hZGRDb250ZW50RW50cnkoVmZzVXRpbENvcmUucGF0aFRvVXJsKEZpbGVVdGlsLnRvU3lzdGVtSW5kZXBlbmRlbnROYW1lKGYuZ2V0UGF0aCgpKSkpOworICAgICAgICByb290TW9kZWwuY29tbWl0KCk7CisKKyAgICAgICAgYXNzZXJ0VHJ1ZShmLmdldFBhdGgoKSwgZi5leGlzdHMoKSB8fCBmLm1rZGlycygpKTsKKyAgICAgICAgTG9jYWxGaWxlU3lzdGVtLmdldEluc3RhbmNlKCkucmVmcmVzaChmYWxzZSk7CisgICAgICB9CisgICAgfSk7CisKKworICAgIGNoZWNrSW5mb051bGwoTG9jYWxGaWxlU3lzdGVtLmdldEluc3RhbmNlKCkuZmluZEZpbGVCeUlvRmlsZShmLmdldFBhcmVudEZpbGUoKS5nZXRQYXJlbnRGaWxlKCkpKTsKKyAgICBjaGVja0luZm9Ob3ROdWxsKExvY2FsRmlsZVN5c3RlbS5nZXRJbnN0YW5jZSgpLmZpbmRGaWxlQnlJb0ZpbGUoZikpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdExpYnJhcnlEaXJJbkNvbnRlbnQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBNb2R1bGVSb290TW9kaWZpY2F0aW9uVXRpbC5hZGRNb2R1bGVMaWJyYXJ5KG15TW9kdWxlLCBteU1vZHVsZTFEaXIuZ2V0VXJsKCkpOworCisgICAgbXlJbmRleC5jaGVja0NvbnNpc3RlbmN5KCk7CisKKyAgICBjaGVja0luZm8obXlNb2R1bGUxRGlyLCBteU1vZHVsZSwgZmFsc2UsIGZhbHNlLCB0cnVlLCBmYWxzZSwgIiIsIG15TW9kdWxlKTsKKyAgICBjaGVja0luZm8obXlTcmNEaXIxLCBteU1vZHVsZSwgdHJ1ZSwgZmFsc2UsIHRydWUsIGZhbHNlLCAiIiwgbXlNb2R1bGUpOworICB9CisKKworICBwdWJsaWMgdm9pZCB0ZXN0RXhjbHVkZUNvbXBpbGVyT3V0cHV0T3V0c2lkZU9mQ29udGVudFJvb3QoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBmaW5hbCBQcm9qZWN0RmlsZUluZGV4IGZpbGVJbmRleCA9IFByb2plY3RSb290TWFuYWdlci5nZXRJbnN0YW5jZShteVByb2plY3QpLmdldEZpbGVJbmRleCgpOworICAgIGFzc2VydFRydWUoZmlsZUluZGV4LmlzSWdub3JlZChteU91dHB1dERpcikpOworICAgIGFzc2VydFRydWUoZmlsZUluZGV4LmlzSWdub3JlZChteU1vZHVsZTFPdXRwdXREaXIpKTsKKyAgICBhc3NlcnRGYWxzZShmaWxlSW5kZXguaXNJZ25vcmVkKG15T3V0cHV0RGlyLmdldFBhcmVudCgpKSk7CisgIH0KKworICBwcml2YXRlIHZvaWQgY2hlY2tJbmZvKFZpcnR1YWxGaWxlIGRpciwKKyAgICAgICAgICAgICAgICAgICAgICAgICBATnVsbGFibGUgTW9kdWxlIG1vZHVsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBib29sZWFuIGlzSW5Nb2R1bGVTb3VyY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbGVhbiBpc1Rlc3RTb3VyY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbGVhbiBpc0luTGlicmFyeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBib29sZWFuIGlzSW5MaWJyYXJ5U291cmNlLAorICAgICAgICAgICAgICAgICAgICAgICAgIEBOdWxsYWJsZSBTdHJpbmcgcGFja2FnZU5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgTW9kdWxlLi4uIG1vZHVsZXNPZk9yZGVyRW50cmllcykgeworICAgIERpcmVjdG9yeUluZm8gaW5mbyA9IGNoZWNrSW5mb05vdE51bGwoZGlyKTsKKyAgICBhc3NlcnRFcXVhbHMobW9kdWxlLCBpbmZvLmdldE1vZHVsZSgpKTsKKyAgICBhc3NlcnRFcXVhbHMoaXNJbk1vZHVsZVNvdXJjZSwgaW5mby5pc0luTW9kdWxlU291cmNlKCkpOworICAgIGFzc2VydEVxdWFscyhpc1Rlc3RTb3VyY2UsIGluZm8uaXNUZXN0U291cmNlKCkpOworICAgIGFzc2VydEVxdWFscyhpc0luTGlicmFyeSwgaW5mby5oYXNMaWJyYXJ5Q2xhc3NSb290KCkpOworICAgIGFzc2VydEVxdWFscyhpc0luTGlicmFyeVNvdXJjZSwgaW5mby5pc0luTGlicmFyeVNvdXJjZSgpKTsKKworICAgIGZpbmFsIFByb2plY3RGaWxlSW5kZXggZmlsZUluZGV4ID0gUHJvamVjdFJvb3RNYW5hZ2VyLmdldEluc3RhbmNlKG15UHJvamVjdCkuZ2V0RmlsZUluZGV4KCk7CisgICAgaWYgKGRpci5pc0RpcmVjdG9yeSgpKSB7CisgICAgICBhc3NlcnRFcXVhbHMocGFja2FnZU5hbWUsIGZpbGVJbmRleC5nZXRQYWNrYWdlTmFtZUJ5RGlyZWN0b3J5KGRpcikpOworICAgIH0KKworICAgIGFzc2VydEVxdWFscyhtb2R1bGVzT2ZPcmRlckVudHJpZXMubGVuZ3RoLCBpbmZvLmdldE9yZGVyRW50cmllcygpLmxlbmd0aCk7CisgICAgZm9yIChNb2R1bGUgYU1vZHVsZSA6IG1vZHVsZXNPZk9yZGVyRW50cmllcykgeworICAgICAgT3JkZXJFbnRyeSBmb3VuZCA9IGluZm8uZmluZE9yZGVyRW50cnlXaXRoT3duZXJNb2R1bGUoYU1vZHVsZSk7CisgICAgICBhc3NlcnROb3ROdWxsKGZvdW5kKTsKKyAgICB9CisgIH0KKworICBwcml2YXRlIHZvaWQgY2hlY2tJbmZvTnVsbChATm90TnVsbCBWaXJ0dWFsRmlsZSBkaXIpIHsKKyAgICBhc3NlcnROdWxsKG15SW5kZXguZ2V0SW5mb0ZvckRpcmVjdG9yeShkaXIpKTsKKyAgfQorICBwcml2YXRlIERpcmVjdG9yeUluZm8gY2hlY2tJbmZvTm90TnVsbChATm90TnVsbCBWaXJ0dWFsRmlsZSBvdXRwdXQyKSB7CisgICAgRGlyZWN0b3J5SW5mbyBpbmZvID0gbXlJbmRleC5nZXRJbmZvRm9yRGlyZWN0b3J5KG91dHB1dDIpOworICAgIGFzc2VydE5vdE51bGwob3V0cHV0Mi50b1N0cmluZygpLCBpbmZvKTsKKyAgICBpbmZvLmFzc2VydENvbnNpc3RlbmN5KCk7CisgICAgcmV0dXJuIGluZm87CisgIH0KKworICBwcml2YXRlIHZvaWQgY2hlY2tQYWNrYWdlKFN0cmluZyBwYWNrYWdlTmFtZSwgVmlydHVhbEZpbGUuLi4gZXhwZWN0ZWREaXJzKSB7CisgICAgVmlydHVhbEZpbGVbXSBhY3R1YWxEaXJzID0gbXlJbmRleC5nZXREaXJlY3Rvcmllc0J5UGFja2FnZU5hbWUocGFja2FnZU5hbWUsIHRydWUpLnRvQXJyYXkoVmlydHVhbEZpbGUuRU1QVFlfQVJSQVkpOworICAgIGFzc2VydE5vdE51bGwoYWN0dWFsRGlycyk7CisgICAgSGFzaFNldDxWaXJ0dWFsRmlsZT4gc2V0MSA9IG5ldyBIYXNoU2V0PFZpcnR1YWxGaWxlPigpOworICAgIENvbnRhaW5lclV0aWwuYWRkQWxsKHNldDEsIGV4cGVjdGVkRGlycyk7CisgICAgSGFzaFNldDxWaXJ0dWFsRmlsZT4gc2V0MiA9IG5ldyBIYXNoU2V0PFZpcnR1YWxGaWxlPigpOworICAgIENvbnRhaW5lclV0aWwuYWRkQWxsKHNldDIsIGFjdHVhbERpcnMpOworICAgIGFzc2VydEVxdWFscyhzZXQxLCBzZXQyKTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL29wZW5hcGkvcm9vdHMvaW1wbC9Qcm9qZWN0TGlicmFyaWVzVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL29wZW5hcGkvcm9vdHMvaW1wbC9Qcm9qZWN0TGlicmFyaWVzVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ2OWM1YmUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovb3BlbmFwaS9yb290cy9pbXBsL1Byb2plY3RMaWJyYXJpZXNUZXN0LmphdmEKQEAgLTAsMCArMSwxMDAgQEAKK3BhY2thZ2UgY29tLmludGVsbGlqLm9wZW5hcGkucm9vdHMuaW1wbDsKKworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLmFwcGxpY2F0aW9uLkFwcGxpY2F0aW9uTWFuYWdlcjsKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS5hcHBsaWNhdGlvbi5leC5QYXRoTWFuYWdlckV4OworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLnJvb3RzLk1vZGlmaWFibGVSb290TW9kZWw7CitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkucm9vdHMuTW9kdWxlUm9vdE1hbmFnZXI7CitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkucm9vdHMuTW9kdWxlUm9vdE1vZGlmaWNhdGlvblV0aWw7CitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkucm9vdHMuT3JkZXJSb290VHlwZTsKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS5yb290cy5pbXBsLmxpYnJhcmllcy5Qcm9qZWN0TGlicmFyeVRhYmxlOworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLnJvb3RzLmxpYnJhcmllcy5MaWJyYXJ5OworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLnJvb3RzLmxpYnJhcmllcy5MaWJyYXJ5VGFibGU7CitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkudXRpbC5Db21wdXRhYmxlOworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLnZmcy5Mb2NhbEZpbGVTeXN0ZW07CitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkudmZzLlZpcnR1YWxGaWxlOworaW1wb3J0IGNvbS5pbnRlbGxpai5wc2kuSmF2YVBzaUZhY2FkZTsKK2ltcG9ydCBjb20uaW50ZWxsaWoucHNpLlBzaUNsYXNzOworaW1wb3J0IGNvbS5pbnRlbGxpai5wc2kuc2VhcmNoLkdsb2JhbFNlYXJjaFNjb3BlOworaW1wb3J0IGNvbS5pbnRlbGxpai50ZXN0RnJhbWV3b3JrLklkZWFUZXN0Q2FzZTsKKworaW1wb3J0IGphdmEuaW8uRmlsZTsKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlzOworCisvKioKKyAqIEBhdXRob3IgZHNsCisgKi8KK3B1YmxpYyBjbGFzcyBQcm9qZWN0TGlicmFyaWVzVGVzdCBleHRlbmRzIElkZWFUZXN0Q2FzZSB7CisgIHB1YmxpYyB2b2lkIHRlc3QoKSB7CisgICAgZmluYWwgTGlicmFyeVRhYmxlIGxpYnJhcnlUYWJsZSA9IFByb2plY3RMaWJyYXJ5VGFibGUuZ2V0SW5zdGFuY2UobXlQcm9qZWN0KTsKKyAgICBMaWJyYXJ5IGxpYiA9IEFwcGxpY2F0aW9uTWFuYWdlci5nZXRBcHBsaWNhdGlvbigpLnJ1bldyaXRlQWN0aW9uKG5ldyBDb21wdXRhYmxlPExpYnJhcnk+KCkgeworICAgICAgQE92ZXJyaWRlCisgICAgICBwdWJsaWMgTGlicmFyeSBjb21wdXRlKCkgeworICAgICAgICByZXR1cm4gbGlicmFyeVRhYmxlLmNyZWF0ZUxpYnJhcnkoIkxJQiIpOworICAgICAgfQorICAgIH0pOworICAgIE1vZHVsZVJvb3RNb2RpZmljYXRpb25VdGlsLmFkZERlcGVuZGVuY3kobXlNb2R1bGUsIGxpYik7CisgICAgZmluYWwgSmF2YVBzaUZhY2FkZSBtYW5hZ2VyID0gZ2V0SmF2YUZhY2FkZSgpOworICAgIGFzc2VydE51bGwobWFuYWdlci5maW5kQ2xhc3MoInBhY2suTXlDbGFzcyIsIEdsb2JhbFNlYXJjaFNjb3BlLm1vZHVsZVdpdGhEZXBlbmRlbmNpZXNBbmRMaWJyYXJpZXNTY29wZShteU1vZHVsZSkpKTsKKyAgICBmaW5hbCBGaWxlIGZpbGUgPSBuZXcgRmlsZShQYXRoTWFuYWdlckV4LmdldFRlc3REYXRhUGF0aCgpICsgIi9wc2kvcmVwb3NpdG9yeVVzZS9jbHMiKTsKKyAgICBmaW5hbCBWaXJ0dWFsRmlsZSByb290ID0gQXBwbGljYXRpb25NYW5hZ2VyLmdldEFwcGxpY2F0aW9uKCkucnVuV3JpdGVBY3Rpb24obmV3IENvbXB1dGFibGU8VmlydHVhbEZpbGU+KCkgeworICAgICAgQE92ZXJyaWRlCisgICAgICBwdWJsaWMgVmlydHVhbEZpbGUgY29tcHV0ZSgpIHsKKyAgICAgICAgcmV0dXJuIExvY2FsRmlsZVN5c3RlbS5nZXRJbnN0YW5jZSgpLnJlZnJlc2hBbmRGaW5kRmlsZUJ5SW9GaWxlKGZpbGUpOworICAgICAgfQorICAgIH0pOworICAgIGFzc2VydE5vdE51bGwocm9vdCk7CisgICAgZmluYWwgTGlicmFyeS5Nb2RpZmlhYmxlTW9kZWwgbW9kaWZ5YWJsZU1vZGVsID0gbGliLmdldE1vZGlmaWFibGVNb2RlbCgpOworICAgIEFwcGxpY2F0aW9uTWFuYWdlci5nZXRBcHBsaWNhdGlvbigpLnJ1bldyaXRlQWN0aW9uKG5ldyBSdW5uYWJsZSgpIHsKKyAgICAgIEBPdmVycmlkZQorICAgICAgcHVibGljIHZvaWQgcnVuKCkgeworICAgICAgICBtb2RpZnlhYmxlTW9kZWwuYWRkUm9vdChyb290LCBPcmRlclJvb3RUeXBlLkNMQVNTRVMpOworICAgICAgICBtb2RpZnlhYmxlTW9kZWwuY29tbWl0KCk7CisgICAgICB9CisgICAgfSk7CisgICAgZmluYWwgUHNpQ2xhc3MgYUNsYXNzID0gbWFuYWdlci5maW5kQ2xhc3MoInBhY2suTXlDbGFzcyIsIEdsb2JhbFNlYXJjaFNjb3BlLm1vZHVsZVdpdGhEZXBlbmRlbmNpZXNBbmRMaWJyYXJpZXNTY29wZShteU1vZHVsZSkpOworICAgIGFzc2VydE5vdE51bGwoYUNsYXNzKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3QxKCkgeworICAgIGZpbmFsIExpYnJhcnlUYWJsZSBsaWJyYXJ5VGFibGUgPSBQcm9qZWN0TGlicmFyeVRhYmxlLmdldEluc3RhbmNlKG15UHJvamVjdCk7CisgICAgTGlicmFyeSBsaWIgPSBBcHBsaWNhdGlvbk1hbmFnZXIuZ2V0QXBwbGljYXRpb24oKS5ydW5Xcml0ZUFjdGlvbihuZXcgQ29tcHV0YWJsZTxMaWJyYXJ5PigpIHsKKyAgICAgIEBPdmVycmlkZQorICAgICAgcHVibGljIExpYnJhcnkgY29tcHV0ZSgpIHsKKyAgICAgICAgcmV0dXJuIGxpYnJhcnlUYWJsZS5jcmVhdGVMaWJyYXJ5KCJMSUIiKTsKKyAgICAgIH0KKyAgICB9KTsKKyAgICBNb2R1bGVSb290TW9kaWZpY2F0aW9uVXRpbC5hZGREZXBlbmRlbmN5KG15TW9kdWxlLCBsaWIpOworICAgIGZpbmFsIEphdmFQc2lGYWNhZGUgbWFuYWdlciA9IGdldEphdmFGYWNhZGUoKTsKKyAgICBhc3NlcnROdWxsKG1hbmFnZXIuZmluZENsYXNzKCJwYWNrLk15Q2xhc3MiLCBHbG9iYWxTZWFyY2hTY29wZS5tb2R1bGVXaXRoRGVwZW5kZW5jaWVzQW5kTGlicmFyaWVzU2NvcGUobXlNb2R1bGUpKSk7CisKKyAgICBmaW5hbCBNb2RpZmlhYmxlUm9vdE1vZGVsIHJvb3RNb2RlbDIgPSBNb2R1bGVSb290TWFuYWdlci5nZXRJbnN0YW5jZShteU1vZHVsZSkuZ2V0TW9kaWZpYWJsZU1vZGVsKCk7CisgICAgYXNzZXJ0Tm90TnVsbChyb290TW9kZWwyLmZpbmRMaWJyYXJ5T3JkZXJFbnRyeShsaWIpKTsKKyAgICBmaW5hbCBGaWxlIGZpbGUgPSBuZXcgRmlsZShQYXRoTWFuYWdlckV4LmdldFRlc3REYXRhUGF0aCgpICsgIi9wc2kvcmVwb3NpdG9yeVVzZS9jbHMiKTsKKyAgICBmaW5hbCBWaXJ0dWFsRmlsZSByb290ID0gQXBwbGljYXRpb25NYW5hZ2VyLmdldEFwcGxpY2F0aW9uKCkucnVuV3JpdGVBY3Rpb24obmV3IENvbXB1dGFibGU8VmlydHVhbEZpbGU+KCkgeworICAgICAgQE92ZXJyaWRlCisgICAgICBwdWJsaWMgVmlydHVhbEZpbGUgY29tcHV0ZSgpIHsKKyAgICAgICAgcmV0dXJuIExvY2FsRmlsZVN5c3RlbS5nZXRJbnN0YW5jZSgpLnJlZnJlc2hBbmRGaW5kRmlsZUJ5SW9GaWxlKGZpbGUpOworICAgICAgfQorICAgIH0pOworICAgIGFzc2VydE5vdE51bGwocm9vdCk7CisgICAgZmluYWwgTGlicmFyeS5Nb2RpZmlhYmxlTW9kZWwgbW9kaWZ5YWJsZU1vZGVsID0gbGliLmdldE1vZGlmaWFibGVNb2RlbCgpOworICAgIEFwcGxpY2F0aW9uTWFuYWdlci5nZXRBcHBsaWNhdGlvbigpLnJ1bldyaXRlQWN0aW9uKG5ldyBSdW5uYWJsZSgpIHsKKyAgICAgIEBPdmVycmlkZQorICAgICAgcHVibGljIHZvaWQgcnVuKCkgeworICAgICAgICBtb2RpZnlhYmxlTW9kZWwuYWRkUm9vdChyb290LCBPcmRlclJvb3RUeXBlLkNMQVNTRVMpOworICAgICAgICBtb2RpZnlhYmxlTW9kZWwuY29tbWl0KCk7CisgICAgICB9CisgICAgfSk7CisgICAgZmluYWwgUHNpQ2xhc3MgYUNsYXNzID0gbWFuYWdlci5maW5kQ2xhc3MoInBhY2suTXlDbGFzcyIsIEdsb2JhbFNlYXJjaFNjb3BlLm1vZHVsZVdpdGhEZXBlbmRlbmNpZXNBbmRMaWJyYXJpZXNTY29wZShteU1vZHVsZSkpOworICAgIGFzc2VydE5vdE51bGwoYUNsYXNzKTsKKyAgICBhc3NlcnRUcnVlKEFycmF5cy5hc0xpc3Qocm9vdE1vZGVsMi5vcmRlckVudHJpZXMoKS5saWJyYXJpZXNPbmx5KCkuY2xhc3NlcygpLmdldFJvb3RzKCkpLmNvbnRhaW5zKHJvb3QpKTsKKyAgICBBcHBsaWNhdGlvbk1hbmFnZXIuZ2V0QXBwbGljYXRpb24oKS5ydW5Xcml0ZUFjdGlvbihuZXcgUnVubmFibGUoKSB7CisgICAgICBAT3ZlcnJpZGUKKyAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKKyAgICAgICAgcm9vdE1vZGVsMi5jb21taXQoKTsKKyAgICAgIH0KKyAgICB9KTsKKyAgICBmaW5hbCBQc2lDbGFzcyBhQ2xhc3MxID0gbWFuYWdlci5maW5kQ2xhc3MoInBhY2suTXlDbGFzcyIsIEdsb2JhbFNlYXJjaFNjb3BlLm1vZHVsZVdpdGhEZXBlbmRlbmNpZXNBbmRMaWJyYXJpZXNTY29wZShteU1vZHVsZSkpOworICAgIGFzc2VydE5vdE51bGwoYUNsYXNzMSk7CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9vcGVuYXBpL3Zmcy9KYXJGaWxlU3lzdGVtVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL29wZW5hcGkvdmZzL0phckZpbGVTeXN0ZW1UZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGM0OGI1MQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9vcGVuYXBpL3Zmcy9KYXJGaWxlU3lzdGVtVGVzdC5qYXZhCkBAIC0wLDAgKzEsNjEgQEAKK3BhY2thZ2UgY29tLmludGVsbGlqLm9wZW5hcGkudmZzOworCitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkucHJvamVjdFJvb3RzLlNkazsKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS5yb290cy5Nb2R1bGVSb290TWFuYWdlcjsKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS51dGlsLlN5c3RlbUluZm87CitpbXBvcnQgY29tLmludGVsbGlqLnRlc3RGcmFtZXdvcmsuSWRlYVRlc3RDYXNlOworCitpbXBvcnQgamF2YS5pby5GaWxlOworCitwdWJsaWMgY2xhc3MgSmFyRmlsZVN5c3RlbVRlc3QgZXh0ZW5kcyBJZGVhVGVzdENhc2V7CisgIHB1YmxpYyB2b2lkIHRlc3RGaW5kRmlsZSgpIHRocm93cyBFeGNlcHRpb257CisgICAgU2RrIGpkayA9IE1vZHVsZVJvb3RNYW5hZ2VyLmdldEluc3RhbmNlKG15TW9kdWxlKS5nZXRTZGsoKTsKKyAgICBWaXJ0dWFsRmlsZSBqZGtIb21lID0gamRrLmdldEhvbWVEaXJlY3RvcnkoKTsKKyAgICBTdHJpbmcgcnRKYXJQYXRoID0gbmV3IEZpbGUoamRrSG9tZS5nZXRQYXRoKCkgKyAiL3NyYy56aXAiKS5nZXRDYW5vbmljYWxQYXRoKCkucmVwbGFjZShGaWxlLnNlcGFyYXRvciwgIi8iKTsKKworICAgIFZpcnR1YWxGaWxlIGZpbGUxID0gZmluZEJ5UGF0aChydEphclBhdGggKyBKYXJGaWxlU3lzdGVtLkpBUl9TRVBBUkFUT1IpOworICAgIGFzc2VydFRydWUoZmlsZTEuaXNEaXJlY3RvcnkoKSk7CisKKyAgICBWaXJ0dWFsRmlsZSBmaWxlMiA9IGZpbmRCeVBhdGgocnRKYXJQYXRoICsgSmFyRmlsZVN5c3RlbS5KQVJfU0VQQVJBVE9SICsgImphdmEiKTsKKyAgICBhc3NlcnRUcnVlKGZpbGUyLmlzRGlyZWN0b3J5KCkpOworCisgICAgVmlydHVhbEZpbGUgZmlsZTMgPSBmaWxlMS5maW5kQ2hpbGQoImphdmEiKTsKKyAgICBhc3NlcnRFcXVhbHMoZmlsZTIsIGZpbGUzKTsKKworICAgIFZpcnR1YWxGaWxlIGZpbGU0ID0gZmluZEJ5UGF0aChydEphclBhdGggKyBKYXJGaWxlU3lzdGVtLkpBUl9TRVBBUkFUT1IgKyAiamF2YS9sYW5nL09iamVjdC5qYXZhIik7CisgICAgYXNzZXJ0VHJ1ZSghZmlsZTQuaXNEaXJlY3RvcnkoKSk7CisKKyAgICBieXRlW10gYnl0ZXMgPSBmaWxlNC5jb250ZW50c1RvQnl0ZUFycmF5KCk7CisgICAgYXNzZXJ0Tm90TnVsbChieXRlcyk7CisgICAgYXNzZXJ0VHJ1ZShieXRlcy5sZW5ndGggPiAxMCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0TWV0YUluZigpIHRocm93cyBFeGNlcHRpb257CisgICAgU2RrIGpkayA9IE1vZHVsZVJvb3RNYW5hZ2VyLmdldEluc3RhbmNlKG15TW9kdWxlKS5nZXRTZGsoKTsKKyAgICBWaXJ0dWFsRmlsZSBqZGtIb21lID0gamRrLmdldEhvbWVEaXJlY3RvcnkoKTsKKyAgICBTdHJpbmcgcnRKYXJQYXRoID0gamRrSG9tZS5nZXRQYXRoKCkgKyAiL2pyZS9saWIvcnQuamFyIjsKKworICAgIFZpcnR1YWxGaWxlIGphclJvb3QgPSBKYXJGaWxlU3lzdGVtLmdldEluc3RhbmNlKCkuZmluZEZpbGVCeVBhdGgocnRKYXJQYXRoICsgSmFyRmlsZVN5c3RlbS5KQVJfU0VQQVJBVE9SKTsKKyAgICBhc3NlcnROb3ROdWxsKGphclJvb3QpOworCisgICAgVmlydHVhbEZpbGUgbWV0YUluZiA9IGphclJvb3QuZmluZENoaWxkKCJNRVRBLUlORiIpOworICAgIGFzc2VydE5vdE51bGwobWV0YUluZik7CisKKyAgICBWaXJ0dWFsRmlsZVtdIGNoaWxkcmVuID0gbWV0YUluZi5nZXRDaGlsZHJlbigpOworICAgIGFzc2VydEVxdWFscygxLCBjaGlsZHJlbi5sZW5ndGgpOworICB9CisKKyAgcHJpdmF0ZSBzdGF0aWMgVmlydHVhbEZpbGUgZmluZEJ5UGF0aChTdHJpbmcgcGF0aCkgeworICAgIFZpcnR1YWxGaWxlIGZpbGUgPSBKYXJGaWxlU3lzdGVtLmdldEluc3RhbmNlKCkuZmluZEZpbGVCeVBhdGgocGF0aCk7CisgICAgYXNzZXJ0Tm90TnVsbChmaWxlKTsKKyAgICBmaW5hbCBTdHJpbmcgZmlsZVBhdGggPSBmaWxlLmdldFBhdGgoKTsKKyAgICBmaW5hbCBTdHJpbmcgbWVzc2FnZSA9ICJwYXRocyBhcmUgbm90IGVxdWFsLCBwYXRoMSA9ICIgKyBwYXRoICsgIiBmb3VuZDogIiArIGZpbGVQYXRoOworICAgIGlmIChTeXN0ZW1JbmZvLmlzRmlsZVN5c3RlbUNhc2VTZW5zaXRpdmUpIHsKKyAgICAgIGFzc2VydEVxdWFscyhtZXNzYWdlLCBwYXRoLCBmaWxlLmdldFBhdGgoKSk7CisgICAgfQorICAgIGVsc2UgeworICAgICAgYXNzZXJ0VHJ1ZShtZXNzYWdlLCBwYXRoLmVxdWFsc0lnbm9yZUNhc2UoZmlsZVBhdGgpKTsKKyAgICB9CisgICAgcmV0dXJuIGZpbGU7CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9vcGVuYXBpL3Zmcy9jaGFuZ2VzL1BzaUNoYW5nZVRyYWNrZXJUZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovb3BlbmFwaS92ZnMvY2hhbmdlcy9Qc2lDaGFuZ2VUcmFja2VyVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY3ZWJkOGQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovb3BlbmFwaS92ZnMvY2hhbmdlcy9Qc2lDaGFuZ2VUcmFja2VyVGVzdC5qYXZhCkBAIC0wLDAgKzEsOTYgQEAKK3BhY2thZ2UgY29tLmludGVsbGlqLm9wZW5hcGkudmZzLmNoYW5nZXM7CisKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS5hcHBsaWNhdGlvbi5leC5QYXRoTWFuYWdlckV4OworaW1wb3J0IGNvbS5pbnRlbGxpai5wc2kudXRpbC5Qc2lGaWx0ZXI7CitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkudXRpbC50ZXh0LlN0cmluZ1V0aWw7CitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkudmNzLkZpbGVTdGF0dXM7CitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkudmNzLmNoYW5nZXMuUHNpQ2hhbmdlVHJhY2tlcjsKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS52ZnMuTG9jYWxGaWxlU3lzdGVtOworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLnZmcy5WaXJ0dWFsRmlsZTsKK2ltcG9ydCBjb20uaW50ZWxsaWoucHNpLio7CitpbXBvcnQgY29tLmludGVsbGlqLnRlc3RGcmFtZXdvcmsuSWRlYVRlc3RDYXNlOworCitpbXBvcnQgamF2YS5pby5GaWxlOworaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CitpbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7CitpbXBvcnQgamF2YS51dGlsLk1hcDsKKworLyoqCisgKiBAYXV0aG9yIEtvbnN0YW50aW4gQnVsZW5rb3YKKyAqLworcHVibGljIGNsYXNzIFBzaUNoYW5nZVRyYWNrZXJUZXN0IGV4dGVuZHMgSWRlYVRlc3RDYXNlIHsKKyAgcHJpdmF0ZSBQc2lGaWxlIG15T3JpZ2luYWxGaWxlOworICBwcml2YXRlIFBzaUZpbGUgbXlDaGFuZ2VkRmlsZTsKKworICBAT3ZlcnJpZGUKKyAgcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBzdXBlci5zZXRVcCgpOworICAgIGZpbmFsIFZpcnR1YWxGaWxlIHRlc3RSb290ID0gZ2V0VGVzdFJvb3QoKTsKKyAgICBmaW5hbCBWaXJ0dWFsRmlsZSBjaGlsZCA9IHRlc3RSb290LmZpbmRDaGlsZCgiUHNpQ2hhbmdlc1Rlc3QuamF2YSIpOworICAgIGFzc2VydCBjaGlsZCAhPSBudWxsIDogIkNhbid0IGZpbmQgUHNpQ2hhbmdlc1Rlc3QuamF2YSI7CisgICAgZmluYWwgUHNpRmlsZSBvcmlnaW5hbCA9IGdldFBzaU1hbmFnZXIoKS5maW5kRmlsZShjaGlsZCk7CisgICAgYXNzZXJ0IG9yaWdpbmFsICE9IG51bGwgOiAiQ2FuJ3QgY3JlYXRlIFBzaUZpbGUgZnJvbSBWaXJ0dWFsRmlsZSAiICsgY2hpbGQuZ2V0TmFtZSgpOworICAgIG15T3JpZ2luYWxGaWxlID0gb3JpZ2luYWw7CisKKyAgICBmaW5hbCBWaXJ0dWFsRmlsZSBjaGFuZ2VkRmlsZSA9IHRlc3RSb290LmZpbmRDaGlsZCgiUHNpQ2hhbmdlc1Rlc3RfY2hhbmdlZC5qYXZhIik7CisgICAgYXNzZXJ0IGNoYW5nZWRGaWxlICE9IG51bGwgOiAiQ2FuJ3QgZmluZCBQc2lDaGFuZ2VzVGVzdF9jaGFuZ2VkLmphdmEiOworCisgICAgbXlDaGFuZ2VkRmlsZSA9IFBzaUZpbGVGYWN0b3J5LmdldEluc3RhbmNlKG15UHJvamVjdCkKKyAgICAgIC5jcmVhdGVGaWxlRnJvbVRleHQobmV3IFN0cmluZyhjaGFuZ2VkRmlsZS5jb250ZW50c1RvQnl0ZUFycmF5KCkpLCBteU9yaWdpbmFsRmlsZSk7CisgICAgYXNzZXJ0IG15Q2hhbmdlZEZpbGUgIT0gbnVsbCA6ICJDYW4ndCBjcmVhdGUgUHNpRmlsZSBmcm9tICIgKyBjaGFuZ2VkRmlsZS5nZXRQYXRoKCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0TWV0aG9kcygpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdChuZXcgUHNpRmlsdGVyPFBzaU1ldGhvZD4oUHNpTWV0aG9kLmNsYXNzKSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0RmllbGRzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KG5ldyBQc2lGaWx0ZXI8UHNpRmllbGQ+KFBzaUZpZWxkLmNsYXNzKSk7CisgIH0KKworICBwcml2YXRlIDxUIGV4dGVuZHMgUHNpRWxlbWVudD4gdm9pZCBkb1Rlc3QoUHNpRmlsdGVyPFQ+IGZpbHRlcikgdGhyb3dzIElPRXhjZXB0aW9uIHsKKyAgICBmaW5hbCBNYXA8VCxGaWxlU3RhdHVzPiBtYXAgPSBQc2lDaGFuZ2VUcmFja2VyLmdldEVsZW1lbnRzQ2hhbmdlZChteUNoYW5nZWRGaWxlLCBteU9yaWdpbmFsRmlsZSwgZmlsdGVyKTsKKyAgICBmaW5hbCBNYXA8U3RyaW5nLCBTdHJpbmc+IGNoYW5nZXMgPSBjb252ZXJ0KG1hcCk7CisgICAgZmluYWwgTWFwPFN0cmluZywgU3RyaW5nPiBleHBlY3RlZCA9IGdldEV4cGVjdGVkUmVzdWx0cygpOworICAgIGFzc2VydCBleHBlY3RlZC5lcXVhbHMoY2hhbmdlcykgOiAiQ2hhbmdlcyBhcmUgbm90IGVxdWFsIFxuIEV4cGVjdGVkOlxuIiArIGV4cGVjdGVkICsgIlxuRm91bmQ6XG4iICsgY2hhbmdlczsKKyAgfQorCisgIHByaXZhdGUgc3RhdGljIDxUIGV4dGVuZHMgUHNpRWxlbWVudD4gTWFwPFN0cmluZywgU3RyaW5nPiBjb252ZXJ0KE1hcDxULCBGaWxlU3RhdHVzPiBtYXApIHsKKyAgICBmaW5hbCBNYXA8U3RyaW5nLCBTdHJpbmc+IHJlc3VsdCA9IG5ldyBIYXNoTWFwPFN0cmluZywgU3RyaW5nPigpOworICAgIGZvciAoVCBrZXkgOiBtYXAua2V5U2V0KCkpIHsKKyAgICAgIGZpbmFsIFN0cmluZyBuZXdLZXk7CisgICAgICBpZiAoa2V5IGluc3RhbmNlb2YgUHNpTWVtYmVyKSB7CisgICAgICAgIG5ld0tleSA9ICgoUHNpTWVtYmVyKWtleSkuZ2V0TmFtZSgpOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgbmV3S2V5ID0ga2V5LmdldFRleHQoKTsKKyAgICAgIH0KKyAgICAgIHJlc3VsdC5wdXQobmV3S2V5LCBtYXAuZ2V0KGtleSkuZ2V0VGV4dCgpKTsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKKyAgfQorCisgIHByaXZhdGUgTWFwPFN0cmluZywgU3RyaW5nPiBnZXRFeHBlY3RlZFJlc3VsdHMoKSB0aHJvd3MgSU9FeGNlcHRpb24geworICAgIGZpbmFsIFN0cmluZyByZXN1bHRGaWxlTmFtZSA9IGdldFRlc3ROYW1lKHRydWUpICsgIi50eHQiOworICAgIGZpbmFsIFZpcnR1YWxGaWxlIHJlc3VsdHNEaXIgPSBnZXRUZXN0Um9vdCgpLmZpbmRDaGlsZCgicmVzdWx0cyIpOworICAgIGFzc2VydCByZXN1bHRzRGlyICE9IG51bGwgOiAiQ2FuJ3QgZmluZCByZXN1bHRzIGRpciI7CisgICAgZmluYWwgVmlydHVhbEZpbGUgcmVzdWx0ID0gcmVzdWx0c0Rpci5maW5kQ2hpbGQocmVzdWx0RmlsZU5hbWUpOworICAgIGFzc2VydCByZXN1bHQgIT0gbnVsbCA6ICJGaWxlIG5vdCBmb3VuZCAiICsgcmVzdWx0c0Rpci5nZXRQYXRoKCkgKyAgIi8iICsgcmVzdWx0RmlsZU5hbWU7CisgICAgU3RyaW5nIHJlcyA9IG5ldyBTdHJpbmcocmVzdWx0LmNvbnRlbnRzVG9CeXRlQXJyYXkoKSk7CisgICAgZmluYWwgTWFwPFN0cmluZywgU3RyaW5nPiBtYXAgPSBuZXcgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4oKTsKKyAgICBmb3IgKFN0cmluZyBzIDogcmVzLnJlcGxhY2UoIlxyXG4iLCAiXG4iKS5zcGxpdCgiXG4iKSkgeworICAgICAgaWYgKCFTdHJpbmdVdGlsLmlzRW1wdHlPclNwYWNlcyhzKSkgeworICAgICAgICBmaW5hbCBTdHJpbmdbXSBzdHJpbmdzID0gcy5zcGxpdCgiOiIpOworICAgICAgICBtYXAucHV0KHN0cmluZ3NbMF0udHJpbSgpLCBzdHJpbmdzWzFdLnRyaW0oKSk7CisgICAgICB9CisgICAgfQorICAgIHJldHVybiBtYXA7CisgIH0KKworICBwcm90ZWN0ZWQgc3RhdGljIFZpcnR1YWxGaWxlIGdldFRlc3RSb290KCkgeworICAgIGZpbmFsIEZpbGUgcm9vdCA9IG5ldyBGaWxlKFBhdGhNYW5hZ2VyRXguZ2V0VGVzdERhdGFQYXRoKCkpOworICAgIGZpbmFsIEZpbGUgdGVzdFJvb3QgPSBuZXcgRmlsZShuZXcgRmlsZShyb290LCAidmZzIiksICJjaGFuZ2VzIik7CisgICAgZmluYWwgVmlydHVhbEZpbGUgaW9GaWxlID0gTG9jYWxGaWxlU3lzdGVtLmdldEluc3RhbmNlKCkuZmluZEZpbGVCeUlvRmlsZSh0ZXN0Um9vdCk7CisgICAgYXNzZXJ0IGlvRmlsZSAhPSBudWxsIDogIkNhbid0IGZpbmQgZGlyZWN0b3J5IHZmcy9jaGFuZ2VzIjsKKyAgICByZXR1cm4gaW9GaWxlOworICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovcHJvamVjdC9Mb2FkUHJvamVjdFRlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9wcm9qZWN0L0xvYWRQcm9qZWN0VGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI1MGUyZDgKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovcHJvamVjdC9Mb2FkUHJvamVjdFRlc3QuamF2YQpAQCAtMCwwICsxLDk1IEBACisvKgorICogQ29weXJpZ2h0IDIwMDAtMjAxMiBKZXRCcmFpbnMgcy5yLm8uCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworcGFja2FnZSBjb20uaW50ZWxsaWoucHJvamVjdDsKKworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLmFwcGxpY2F0aW9uLkFwcGxpY2F0aW9uTWFuYWdlcjsKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS5hcHBsaWNhdGlvbi5leC5QYXRoTWFuYWdlckV4OworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLmVkaXRvci5FZGl0b3I7CitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkuZmlsZUVkaXRvci5GaWxlRWRpdG9yOworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLmZpbGVFZGl0b3IuRmlsZUVkaXRvck1hbmFnZXI7CitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkuZmlsZUVkaXRvci5PcGVuRmlsZURlc2NyaXB0b3I7CitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkuZmlsZUVkaXRvci5pbXBsLkZpbGVFZGl0b3JNYW5hZ2VySW1wbDsKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS5wcm9qZWN0LlByb2plY3RNYW5hZ2VyOworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLnByb2plY3QuZXguUHJvamVjdE1hbmFnZXJFeDsKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS5wcm9qZWN0LmltcGwuUHJvamVjdEltcGw7CitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkucm9vdHMuUHJvamVjdFJvb3RNYW5hZ2VyOworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLnZmcy5Mb2NhbEZpbGVTeXN0ZW07CitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkudmZzLlZpcnR1YWxGaWxlOworaW1wb3J0IGNvbS5pbnRlbGxpai5wc2kuUHNpRmlsZTsKK2ltcG9ydCBjb20uaW50ZWxsaWoucHNpLmltcGwuc291cmNlLlBzaUZpbGVJbXBsOworaW1wb3J0IGNvbS5pbnRlbGxpai50ZXN0RnJhbWV3b3JrLkxlYWtIdW50ZXI7CitpbXBvcnQgY29tLmludGVsbGlqLnRlc3RGcmFtZXdvcmsuUGxhdGZvcm1UZXN0Q2FzZTsKK2ltcG9ydCBjb20uaW50ZWxsaWoudGVzdEZyYW1ld29yay5maXh0dXJlcy5pbXBsLkNvZGVJbnNpZ2h0VGVzdEZpeHR1cmVJbXBsOworaW1wb3J0IGNvbS5pbnRlbGxpai51dGlsLlByb2Nlc3NvcjsKK2ltcG9ydCBvcmcucGljb2NvbnRhaW5lci5NdXRhYmxlUGljb0NvbnRhaW5lcjsKKworcHVibGljIGNsYXNzIExvYWRQcm9qZWN0VGVzdCBleHRlbmRzIFBsYXRmb3JtVGVzdENhc2UgeworICBAT3ZlcnJpZGUKKyAgcHJvdGVjdGVkIHZvaWQgc2V0VXBQcm9qZWN0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgU3RyaW5nIHByb2plY3RQYXRoID0gUGF0aE1hbmFnZXJFeC5nZXRUZXN0RGF0YVBhdGgoKSArICIvbW9kZWwvbW9kZWwuaXByIjsKKyAgICBteVByb2plY3QgPSBQcm9qZWN0TWFuYWdlci5nZXRJbnN0YW5jZSgpLmxvYWRBbmRPcGVuUHJvamVjdChwcm9qZWN0UGF0aCk7CisgICAgTXV0YWJsZVBpY29Db250YWluZXIgY29udGFpbmVyID0gKE11dGFibGVQaWNvQ29udGFpbmVyKWdldFByb2plY3QoKS5nZXRQaWNvQ29udGFpbmVyKCk7CisgICAgY29udGFpbmVyLnVucmVnaXN0ZXJDb21wb25lbnQoRmlsZUVkaXRvck1hbmFnZXIuY2xhc3MuZ2V0TmFtZSgpKTsKKyAgICAoKFByb2plY3RJbXBsKWdldFByb2plY3QoKSkucmVnaXN0ZXJDb21wb25lbnRJbXBsZW1lbnRhdGlvbihGaWxlRWRpdG9yTWFuYWdlci5jbGFzcywgRmlsZUVkaXRvck1hbmFnZXJJbXBsLmNsYXNzKTsKKyAgfQorCisgIEBPdmVycmlkZQorICBwcm90ZWN0ZWQgdm9pZCB0ZWFyRG93bigpIHRocm93cyBFeGNlcHRpb24geworICAgIG15UHJvamVjdCA9IG51bGw7CisgICAgc3VwZXIudGVhckRvd24oKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RMb2FkUHJvamVjdCgpIHRocm93cyBFeGNlcHRpb24geworICAgIFZpcnR1YWxGaWxlIHNyYyA9IFByb2plY3RSb290TWFuYWdlci5nZXRJbnN0YW5jZShnZXRQcm9qZWN0KCkpLmdldENvbnRlbnRTb3VyY2VSb290cygpWzBdOworCisgICAgVmlydHVhbEZpbGUgYSA9IHNyYy5maW5kRmlsZUJ5UmVsYXRpdmVQYXRoKCIveC9BQ2xhc3MuamF2YSIpOworICAgIGFzc2VydE5vdE51bGwoYSk7CisgICAgUHNpRmlsZSBmaWxlQSA9IGdldFBzaU1hbmFnZXIoKS5maW5kRmlsZShhKTsKKyAgICBhc3NlcnROb3ROdWxsKGZpbGVBKTsKKyAgICBmaWxlQS5uYXZpZ2F0ZSh0cnVlKTsKKyAgICBFZGl0b3IgZWRpdG9yQSA9IEZpbGVFZGl0b3JNYW5hZ2VyLmdldEluc3RhbmNlKGdldFByb2plY3QoKSkub3BlblRleHRFZGl0b3IobmV3IE9wZW5GaWxlRGVzY3JpcHRvcihnZXRQcm9qZWN0KCksIGEpLCB0cnVlKTsKKyAgICBhc3NlcnROb3ROdWxsKGVkaXRvckEpOworICAgIENvZGVJbnNpZ2h0VGVzdEZpeHR1cmVJbXBsLmluc3RhbnRpYXRlQW5kUnVuKGZpbGVBLCBlZGl0b3JBLCBuZXcgaW50WzBdLCBmYWxzZSk7CisKKyAgICBWaXJ0dWFsRmlsZSBiID0gc3JjLmZpbmRGaWxlQnlSZWxhdGl2ZVBhdGgoIi94L0JDbGFzcy5qYXZhIik7CisgICAgYXNzZXJ0Tm90TnVsbChiKTsKKyAgICBQc2lGaWxlIGZpbGVCID0gZ2V0UHNpTWFuYWdlcigpLmZpbmRGaWxlKGIpOworICAgIGFzc2VydE5vdE51bGwoZmlsZUIpOworICAgIGZpbGVCLm5hdmlnYXRlKHRydWUpOworICAgIEVkaXRvciBlZGl0b3JCID0gRmlsZUVkaXRvck1hbmFnZXIuZ2V0SW5zdGFuY2UoZ2V0UHJvamVjdCgpKS5vcGVuVGV4dEVkaXRvcihuZXcgT3BlbkZpbGVEZXNjcmlwdG9yKGdldFByb2plY3QoKSwgYiksIHRydWUpOworICAgIGFzc2VydE5vdE51bGwoZWRpdG9yQik7CisgICAgQ29kZUluc2lnaHRUZXN0Rml4dHVyZUltcGwuaW5zdGFudGlhdGVBbmRSdW4oZmlsZUIsIGVkaXRvckIsIG5ldyBpbnRbMF0sIGZhbHNlKTsKKworICAgIEZpbGVFZGl0b3JbXSBhbGxFZGl0b3JzID0gRmlsZUVkaXRvck1hbmFnZXIuZ2V0SW5zdGFuY2UoZ2V0UHJvamVjdCgpKS5nZXRBbGxFZGl0b3JzKCk7CisgICAgYXNzZXJ0RXF1YWxzKDIsIGFsbEVkaXRvcnMubGVuZ3RoKTsKKworICAgIEZpbGVFZGl0b3JNYW5hZ2VyLmdldEluc3RhbmNlKGdldFByb2plY3QoKSkuY2xvc2VGaWxlKGEpOworICAgIEZpbGVFZGl0b3JNYW5hZ2VyLmdldEluc3RhbmNlKGdldFByb2plY3QoKSkuY2xvc2VGaWxlKGIpOworICAgIFByb2plY3RNYW5hZ2VyRXguZ2V0SW5zdGFuY2VFeCgpLmNsb3NlQW5kRGlzcG9zZShnZXRQcm9qZWN0KCkpOworCisgICAgTGVha0h1bnRlci5jaGVja0xlYWsoQXBwbGljYXRpb25NYW5hZ2VyLmdldEFwcGxpY2F0aW9uKCksIFBzaUZpbGVJbXBsLmNsYXNzLCBuZXcgUHJvY2Vzc29yPFBzaUZpbGVJbXBsPigpIHsKKyAgICAgIEBPdmVycmlkZQorICAgICAgcHVibGljIGJvb2xlYW4gcHJvY2VzcyhQc2lGaWxlSW1wbCBwc2lGaWxlKSB7CisgICAgICAgIHJldHVybiAgcHNpRmlsZS5nZXRWaWV3UHJvdmlkZXIoKS5nZXRWaXJ0dWFsRmlsZSgpLmdldEZpbGVTeXN0ZW0oKSBpbnN0YW5jZW9mIExvY2FsRmlsZVN5c3RlbTsKKyAgICAgIH0KKyAgICB9KTsKKyAgfQorCisgIEBPdmVycmlkZQorICBwcm90ZWN0ZWQgYm9vbGVhbiBpc1J1bkluV3JpdGVBY3Rpb24oKSB7CisgICAgcmV0dXJuIGZhbHNlOworICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovcHJvamVjdC9jb252ZXJ0b3JzL0NvbnZlcnRvcjM0VGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL3Byb2plY3QvY29udmVydG9ycy9Db252ZXJ0b3IzNFRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MjE3MGQxCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL3Byb2plY3QvY29udmVydG9ycy9Db252ZXJ0b3IzNFRlc3QuamF2YQpAQCAtMCwwICsxLDE1NCBAQAorLyoKKyAqIENvcHlyaWdodCAyMDAwLTIwMTIgSmV0QnJhaW5zIHMuci5vLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KK3BhY2thZ2UgY29tLmludGVsbGlqLnByb2plY3QuY29udmVydG9yczsKKworaW1wb3J0IGNvbS5pbnRlbGxpai5hcHBsaWNhdGlvbi5vcHRpb25zLlBhdGhNYWNyb3NJbXBsOworaW1wb3J0IGNvbS5pbnRlbGxpai5pZGUuaGlnaGxpZ2h0ZXIuTW9kdWxlRmlsZVR5cGU7CitpbXBvcnQgY29tLmludGVsbGlqLmlkZS5oaWdobGlnaHRlci5Qcm9qZWN0RmlsZVR5cGU7CitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkuYXBwbGljYXRpb24uQXBwbGljYXRpb25NYW5hZ2VyOworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLmNvbXBvbmVudHMuRXhwYW5kTWFjcm9Ub1BhdGhNYXA7CitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkucHJvamVjdC5pbXBsLmNvbnZlcnRvcnMuQ29udmVydG9yMzQ7CitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkudXRpbC5KRE9NVXRpbDsKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS52ZnMuTG9jYWxGaWxlU3lzdGVtOworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLnZmcy5WZnNVdGlsQ29yZTsKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS52ZnMuVmlydHVhbEZpbGU7CitpbXBvcnQgY29tLmludGVsbGlqLnJlZmFjdG9yaW5nLk11bHRpRmlsZVRlc3RDYXNlOworaW1wb3J0IG9yZy5qZG9tLkRvY3VtZW50OworaW1wb3J0IG9yZy5qZG9tLkVsZW1lbnQ7CitpbXBvcnQgb3JnLmpkb20uSkRPTUV4Y2VwdGlvbjsKKworaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKKy8qKgorICogIEBhdXRob3IgZHNsCisgKi8KK3B1YmxpYyBjbGFzcyBDb252ZXJ0b3IzNFRlc3QgZXh0ZW5kcyBNdWx0aUZpbGVUZXN0Q2FzZSB7CisgIEBPdmVycmlkZQorICBwdWJsaWMgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24geworICAgIG15RG9Db21wYXJlID0gZmFsc2U7CisgICAgc3VwZXIuc2V0VXAoKTsKKyAgfQorCisgIEBPdmVycmlkZQorICBwcm90ZWN0ZWQgU3RyaW5nIGdldFRlc3RSb290KCkgeworICAgIHJldHVybiAiL21vZHVsZVJvb3RNYW5hZ2VyL2NvbnZlcnRvcjM0LyI7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0VGVzdDEoKSB0aHJvd3MgRXhjZXB0aW9uIHsgZG9UZXN0KGNyZWF0ZVBlcmZvcm1BY3Rpb24oInByaiIpKTsgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RUZXN0MigpIHRocm93cyBFeGNlcHRpb24geyBkb1Rlc3QoY3JlYXRlUGVyZm9ybUFjdGlvbigicHJqMiIpKTsgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RUZXN0MygpIHRocm93cyBFeGNlcHRpb24geyBkb1Rlc3QoY3JlYXRlUGVyZm9ybUFjdGlvbigicHJqMyIpKTsgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RUZXN0NCgpIHRocm93cyBFeGNlcHRpb24geyBkb1Rlc3QoY3JlYXRlUGVyZm9ybUFjdGlvbigicHJqNCIpKTsgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RTY3IyNDUxNygpIHRocm93cyBFeGNlcHRpb24geyBkb1Rlc3QoY3JlYXRlUGVyZm9ybUFjdGlvbigic2UubWRoLmh0bWwiKSk7IH0KKworICBwdWJsaWMgdm9pZCB0ZXN0TGlicmFyeVRhYmxlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7IGRvVGVzdChjcmVhdGVQZXJmb3JtQWN0aW9uRm9yTGlicmFyeVRhYmxlKCkpO30KKworICBwdWJsaWMgdm9pZCB0ZXN0U2NyMjUyOTgoKSB0aHJvd3MgRXhjZXB0aW9uIHsgZG9UZXN0KGNyZWF0ZVBlcmZvcm1BY3Rpb25Gb3JMaWJyYXJ5VGFibGUoKSk7fQorCisKKyAgcHJpdmF0ZSBzdGF0aWMgUGVyZm9ybUFjdGlvbiBjcmVhdGVQZXJmb3JtQWN0aW9uKGZpbmFsIFN0cmluZyBwcm9qZWN0TmFtZSkgeworICAgIHJldHVybiBuZXcgUGVyZm9ybUFjdGlvbigpIHsKKyAgICAgIEBPdmVycmlkZQorICAgICAgcHVibGljIHZvaWQgcGVyZm9ybUFjdGlvbihWaXJ0dWFsRmlsZSByb290RGlyLCBWaXJ0dWFsRmlsZSByb290QWZ0ZXIpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICBmaW5hbCBWaXJ0dWFsRmlsZSBwcm9qZWN0RmlsZSA9IHJvb3REaXIuZmluZENoaWxkKHByb2plY3ROYW1lICsgUHJvamVjdEZpbGVUeXBlLkRPVF9ERUZBVUxUX0VYVEVOU0lPTik7CisgICAgICAgIGFzc2VydE5vdE51bGwocm9vdERpci5nZXRQYXRoKCksIHByb2plY3RGaWxlKTsKKworICAgICAgICBmaW5hbCBFeHBhbmRNYWNyb1RvUGF0aE1hcCBtYWNyb3MgPSBuZXcgRXhwYW5kTWFjcm9Ub1BhdGhNYXAoKTsKKyAgICAgICAgbWFjcm9zLmFkZE1hY3JvRXhwYW5kKFBhdGhNYWNyb3NJbXBsLlBST0pFQ1RfRElSX01BQ1JPX05BTUUsIHJvb3REaXIuZ2V0UGF0aCgpKTsKKyAgICAgICAgbWFjcm9zLmFkZE1hY3JvRXhwYW5kKFBhdGhNYWNyb3NJbXBsLk1PRFVMRV9ESVJfTUFDUk9fTkFNRSwgcm9vdERpci5nZXRQYXRoKCkpOworCisgICAgICAgIGZpbmFsIERvY3VtZW50IHByb2plY3REb2N1bWVudCA9IEpET01VdGlsLmxvYWREb2N1bWVudChWZnNVdGlsQ29yZS5sb2FkVGV4dChwcm9qZWN0RmlsZSkpOworICAgICAgICBtYWNyb3Muc3Vic3RpdHV0ZShwcm9qZWN0RG9jdW1lbnQuZ2V0Um9vdEVsZW1lbnQoKSwgdHJ1ZSk7CisKKyAgICAgICAgQ29udmVydG9yMzQuZXhlY3V0ZShwcm9qZWN0RG9jdW1lbnQuZ2V0Um9vdEVsZW1lbnQoKSwgcHJvamVjdEZpbGUuZ2V0UGF0aCgpLCBudWxsKTsKKworICAgICAgICBBcHBsaWNhdGlvbk1hbmFnZXIuZ2V0QXBwbGljYXRpb24oKS5ydW5Xcml0ZUFjdGlvbihuZXcgUnVubmFibGUoKSB7CisgICAgICAgICAgQE92ZXJyaWRlCisgICAgICAgICAgcHVibGljIHZvaWQgcnVuKCkgeworICAgICAgICAgICAgTG9jYWxGaWxlU3lzdGVtLmdldEluc3RhbmNlKCkucmVmcmVzaChmYWxzZSk7CisgICAgICAgICAgfQorICAgICAgICB9KTsKKyAgICAgICAgZmluYWwgRG9jdW1lbnQgbW9kdWxlRG9jdW1lbnQgPSBsb2FkRG9jdW1lbnQocm9vdERpciwgcHJvamVjdE5hbWUgKyBNb2R1bGVGaWxlVHlwZS5ET1RfREVGQVVMVF9FWFRFTlNJT04pOworICAgICAgICBtYWNyb3Muc3Vic3RpdHV0ZShtb2R1bGVEb2N1bWVudC5nZXRSb290RWxlbWVudCgpLCB0cnVlKTsKKyAgICAgICAgZmluYWwgRG9jdW1lbnQgZ29sZGVuUHJvamVjdERvY3VtZW50ID0gbG9hZERvY3VtZW50KHJvb3RBZnRlciwgcHJvamVjdE5hbWUgKyBQcm9qZWN0RmlsZVR5cGUuRE9UX0RFRkFVTFRfRVhURU5TSU9OKTsKKyAgICAgICAgbWFjcm9zLnN1YnN0aXR1dGUoZ29sZGVuUHJvamVjdERvY3VtZW50LmdldFJvb3RFbGVtZW50KCksIHRydWUpOworICAgICAgICBmaW5hbCBEb2N1bWVudCBnb2xkZW5Nb2R1bGVEb2N1bWVudCA9IGxvYWREb2N1bWVudChyb290QWZ0ZXIsIHByb2plY3ROYW1lICsgTW9kdWxlRmlsZVR5cGUuRE9UX0RFRkFVTFRfRVhURU5TSU9OKTsKKyAgICAgICAgbWFjcm9zLnN1YnN0aXR1dGUoZ29sZGVuTW9kdWxlRG9jdW1lbnQuZ2V0Um9vdEVsZW1lbnQoKSwgdHJ1ZSk7CisKKyAgICAgICAgYXNzZXJ0Q29uZmlnc0VxdWFsKCJQcm9qZWN0TW9kdWxlTWFuYWdlciIsIGdvbGRlblByb2plY3REb2N1bWVudCwgcHJvamVjdERvY3VtZW50KTsKKyAgICAgICAgYXNzZXJ0Q29uZmlnc0VxdWFsKCJOZXdNb2R1bGVSb290TWFuYWdlciIsIGdvbGRlbk1vZHVsZURvY3VtZW50LCBtb2R1bGVEb2N1bWVudCk7CisgICAgICB9CisgICAgfTsKKyAgfQorCisgIHByaXZhdGUgc3RhdGljIFBlcmZvcm1BY3Rpb24gY3JlYXRlUGVyZm9ybUFjdGlvbkZvckxpYnJhcnlUYWJsZSgpIHsKKyAgICByZXR1cm4gbmV3IFBlcmZvcm1BY3Rpb24oKSB7CisgICAgICBAT3ZlcnJpZGUKKyAgICAgIHB1YmxpYyB2b2lkIHBlcmZvcm1BY3Rpb24oVmlydHVhbEZpbGUgcm9vdERpciwgVmlydHVhbEZpbGUgcm9vdEFmdGVyKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgZmluYWwgVmlydHVhbEZpbGUgbGliRmlsZSA9IHJvb3REaXIuZmluZENoaWxkKCJsaWJyYXJ5LnRhYmxlLnhtbCIpOworICAgICAgICBhc3NlcnROb3ROdWxsKHJvb3REaXIuZ2V0UGF0aCgpLCBsaWJGaWxlKTsKKworICAgICAgICBmaW5hbCBFeHBhbmRNYWNyb1RvUGF0aE1hcCBtYWNyb3MgPSBuZXcgRXhwYW5kTWFjcm9Ub1BhdGhNYXAoKTsKKyAgICAgICAgbWFjcm9zLmFkZE1hY3JvRXhwYW5kKCJESVIiLCByb290RGlyLmdldFBhdGgoKSk7CisKKyAgICAgICAgZmluYWwgRG9jdW1lbnQgb2xkVGFibGUgPSBKRE9NVXRpbC5sb2FkRG9jdW1lbnQoVmZzVXRpbENvcmUubG9hZFRleHQobGliRmlsZSkpOworICAgICAgICBtYWNyb3Muc3Vic3RpdHV0ZShvbGRUYWJsZS5nZXRSb290RWxlbWVudCgpLCB0cnVlKTsKKyAgICAgICAgQ29udmVydG9yMzQuY29udmVydExpYnJhcnlUYWJsZTM0KG9sZFRhYmxlLmdldFJvb3RFbGVtZW50KCksIGxpYkZpbGUuZ2V0UGF0aCgpKTsKKyAgICAgICAgQXBwbGljYXRpb25NYW5hZ2VyLmdldEFwcGxpY2F0aW9uKCkucnVuV3JpdGVBY3Rpb24obmV3IFJ1bm5hYmxlKCkgeworICAgICAgICAgIEBPdmVycmlkZQorICAgICAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKKyAgICAgICAgICAgIExvY2FsRmlsZVN5c3RlbS5nZXRJbnN0YW5jZSgpLnJlZnJlc2goZmFsc2UpOworICAgICAgICAgIH0KKyAgICAgICAgfSk7CisgICAgICAgIGZpbmFsIERvY3VtZW50IG5ld1RhYmxlID0gbG9hZERvY3VtZW50KHJvb3REaXIsICJhcHBsaWNhdGlvbkxpYnJhcmllcy54bWwiKTsKKyAgICAgICAgZmluYWwgRG9jdW1lbnQgZ29sZGVuTmV3VGFibGUgPSBsb2FkRG9jdW1lbnQocm9vdEFmdGVyLCAiYXBwbGljYXRpb25MaWJyYXJpZXMueG1sIik7CisgICAgICAgIG1hY3Jvcy5zdWJzdGl0dXRlKGdvbGRlbk5ld1RhYmxlLmdldFJvb3RFbGVtZW50KCksIHRydWUpOworICAgICAgICBhc3NlcnRFbGVtZW50c0VxdWFsKGdvbGRlbk5ld1RhYmxlLmdldFJvb3RFbGVtZW50KCksIG5ld1RhYmxlLmdldFJvb3RFbGVtZW50KCkpOworICAgICAgfQorICAgIH07CisgIH0KKworICBwcml2YXRlIHN0YXRpYyBEb2N1bWVudCBsb2FkRG9jdW1lbnQoVmlydHVhbEZpbGUgcGFyZW50LCBTdHJpbmcgbmFtZSkgdGhyb3dzIElPRXhjZXB0aW9uLCBKRE9NRXhjZXB0aW9uIHsKKyAgICBmaW5hbCBWaXJ0dWFsRmlsZSBjaGlsZCA9IHBhcmVudC5maW5kQ2hpbGQobmFtZSk7CisgICAgYXNzZXJ0Tm90TnVsbChwYXJlbnQgKyAiLyIgKyBuYW1lLCBjaGlsZCk7CisgICAgcmV0dXJuIEpET01VdGlsLmxvYWREb2N1bWVudChWZnNVdGlsQ29yZS5sb2FkVGV4dChjaGlsZCkpOworICB9CisKKyAgcHJpdmF0ZSBzdGF0aWMgdm9pZCBhc3NlcnRDb25maWdzRXF1YWwoU3RyaW5nIGNvbXBvbmVudE5hbWUsIERvY3VtZW50IGdvbGRlbkRvY3VtZW50LCBEb2N1bWVudCBkb2N1bWVudCkgeworICAgIGZpbmFsIEVsZW1lbnQgZ29sZGVuRWxlbWVudCA9IGdldENvbXBvbmVudEVsZW1lbnQoZ29sZGVuRG9jdW1lbnQsIGNvbXBvbmVudE5hbWUpOworICAgIGZpbmFsIEVsZW1lbnQgZWxlbWVudCA9IGdldENvbXBvbmVudEVsZW1lbnQoZG9jdW1lbnQsIGNvbXBvbmVudE5hbWUpOworICAgIGFzc2VydEVsZW1lbnRzRXF1YWwoZ29sZGVuRWxlbWVudCwgZWxlbWVudCk7CisgIH0KKworICBwcml2YXRlIHN0YXRpYyB2b2lkIGFzc2VydEVsZW1lbnRzRXF1YWwoZmluYWwgRWxlbWVudCBnb2xkZW5FbGVtZW50LCBmaW5hbCBFbGVtZW50IGVsZW1lbnQpIHsKKyAgICBhc3NlcnRFcXVhbHMoSkRPTVV0aWwuY3JlYXRlT3V0cHV0dGVyKCJcbiIpLm91dHB1dFN0cmluZyhnb2xkZW5FbGVtZW50KSwKKyAgICAgICAgICAgICAgICAgSkRPTVV0aWwuY3JlYXRlT3V0cHV0dGVyKCJcbiIpLm91dHB1dFN0cmluZyhlbGVtZW50KSk7CisgIH0KKworICBwcml2YXRlIHN0YXRpYyBFbGVtZW50IGdldENvbXBvbmVudEVsZW1lbnQoRG9jdW1lbnQgcm9vdCwgU3RyaW5nIGNvbXBvbmVudE5hbWUpIHsKKyAgICBmaW5hbCBMaXN0IGNoaWxkcmVuID0gcm9vdC5nZXRSb290RWxlbWVudCgpLmdldENoaWxkcmVuKCJjb21wb25lbnQiKTsKKyAgICBmb3IgKE9iamVjdCBhQ2hpbGRyZW4gOiBjaGlsZHJlbikgeworICAgICAgRWxlbWVudCBlbGVtZW50ID0gKEVsZW1lbnQpYUNoaWxkcmVuOworICAgICAgaWYgKGNvbXBvbmVudE5hbWUuZXF1YWxzKGVsZW1lbnQuZ2V0QXR0cmlidXRlVmFsdWUoIm5hbWUiKSkpIHJldHVybiBlbGVtZW50OworICAgIH0KKyAgICBhc3NlcnRUcnVlKGNvbXBvbmVudE5hbWUgKyAiIG5vdCBmb3VuZCIsIGZhbHNlKTsKKyAgICByZXR1cm4gbnVsbDsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL3Byb2plY3RWaWV3L0NsYXNzTmFtZUNvbnZlcnRvci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL3Byb2plY3RWaWV3L0NsYXNzTmFtZUNvbnZlcnRvci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY1OTU2YjIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovcHJvamVjdFZpZXcvQ2xhc3NOYW1lQ29udmVydG9yLmphdmEKQEAgLTAsMCArMSw3NSBAQAorcGFja2FnZSBjb20uaW50ZWxsaWoucHJvamVjdFZpZXc7CisKK2ltcG9ydCBjb20uaW50ZWxsaWouaWRlLnByb2plY3RWaWV3LlByZXNlbnRhdGlvbkRhdGE7CitpbXBvcnQgY29tLmludGVsbGlqLmlkZS5wcm9qZWN0Vmlldy5Qcm9qZWN0Vmlld05vZGU7CitpbXBvcnQgY29tLmludGVsbGlqLmlkZS5wcm9qZWN0Vmlldy5UcmVlU3RydWN0dXJlUHJvdmlkZXI7CitpbXBvcnQgY29tLmludGVsbGlqLmlkZS5wcm9qZWN0Vmlldy5WaWV3U2V0dGluZ3M7CitpbXBvcnQgY29tLmludGVsbGlqLmlkZS51dGlsLnRyZWVWaWV3LkFic3RyYWN0VHJlZU5vZGU7CitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkucHJvamVjdC5Qcm9qZWN0OworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLnVpLlF1ZXJ5YWJsZTsKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS52ZnMuVmlydHVhbEZpbGU7CitpbXBvcnQgY29tLmludGVsbGlqLnBzaS5Qc2lGaWxlOworaW1wb3J0IG9yZy5qZXRicmFpbnMuYW5ub3RhdGlvbnMuTm90TnVsbDsKKworaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb25zOworCitjbGFzcyBDbGFzc05hbWVDb252ZXJ0b3IgaW1wbGVtZW50cyBUcmVlU3RydWN0dXJlUHJvdmlkZXIgeworCisgIHByaXZhdGUgZmluYWwgUHJvamVjdCBteVByb2plY3Q7CisKKyAgcHVibGljIENsYXNzTmFtZUNvbnZlcnRvcihQcm9qZWN0IHByb2plY3QpIHsKKyAgICBteVByb2plY3QgPSBwcm9qZWN0OworICB9CisKKyAgQE92ZXJyaWRlCisgIHB1YmxpYyBDb2xsZWN0aW9uPEFic3RyYWN0VHJlZU5vZGU+IG1vZGlmeShBYnN0cmFjdFRyZWVOb2RlIHBhcmVudCwgQ29sbGVjdGlvbjxBYnN0cmFjdFRyZWVOb2RlPiBjaGlsZHJlbiwgVmlld1NldHRpbmdzIHNldHRpbmdzKSB7CisgICAgQXJyYXlMaXN0PEFic3RyYWN0VHJlZU5vZGU+IHJlc3VsdCA9IG5ldyBBcnJheUxpc3Q8QWJzdHJhY3RUcmVlTm9kZT4oKTsKKworICAgIGZvciAoZmluYWwgQWJzdHJhY3RUcmVlTm9kZSBhQ2hpbGRyZW4gOiBjaGlsZHJlbikgeworICAgICAgUHJvamVjdFZpZXdOb2RlIHRyZWVOb2RlID0gKFByb2plY3RWaWV3Tm9kZSlhQ2hpbGRyZW47CisgICAgICBPYmplY3QgbyA9IHRyZWVOb2RlLmdldFZhbHVlKCk7CisgICAgICBpZiAobyBpbnN0YW5jZW9mIFBzaUZpbGUgJiYgKChQc2lGaWxlKW8pLmdldFZpcnR1YWxGaWxlKCkuZ2V0RXh0ZW5zaW9uKCkuZXF1YWxzKCJqYXZhIikpIHsKKyAgICAgICAgZmluYWwgU3RyaW5nIG5hbWUgPSAoKFBzaUZpbGUpbykuZ2V0TmFtZSgpOworICAgICAgICBQcm9qZWN0Vmlld05vZGUgdmlld05vZGUgPSBuZXcgUHJvamVjdFZpZXdOb2RlPFBzaUZpbGU+KG15UHJvamVjdCwgKFBzaUZpbGUpbywgc2V0dGluZ3MpIHsKKyAgICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgICBATm90TnVsbAorICAgICAgICAgIHB1YmxpYyBDb2xsZWN0aW9uPEFic3RyYWN0VHJlZU5vZGU+IGdldENoaWxkcmVuKCkgeworICAgICAgICAgICAgcmV0dXJuIENvbGxlY3Rpb25zLmVtcHR5TGlzdCgpOworICAgICAgICAgIH0KKworICAgICAgICAgIEBPdmVycmlkZQorICAgICAgICAgIHB1YmxpYyBTdHJpbmcgdG9UZXN0U3RyaW5nKFF1ZXJ5YWJsZS5QcmludEluZm8gcHJpbnRJbmZvKSB7CisgICAgICAgICAgICByZXR1cm4gc3VwZXIudG9UZXN0U3RyaW5nKHByaW50SW5mbykgKyAiIGNvbnZlcnRlZCI7CisgICAgICAgICAgfQorCisgICAgICAgICAgQE92ZXJyaWRlCisgICAgICAgICAgcHVibGljIFN0cmluZyBnZXRUZXN0UHJlc2VudGF0aW9uKCkgeworICAgICAgICAgICAgcmV0dXJuIG5hbWUgKyAiIGNvbnZlcnRlZCI7CisgICAgICAgICAgfQorCisgICAgICAgICAgQE92ZXJyaWRlCisgICAgICAgICAgcHVibGljIGJvb2xlYW4gY29udGFpbnMoQE5vdE51bGwgVmlydHVhbEZpbGUgZmlsZSkgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgIH0KKworICAgICAgICAgIEBPdmVycmlkZQorICAgICAgICAgIHB1YmxpYyB2b2lkIHVwZGF0ZShQcmVzZW50YXRpb25EYXRhIHByZXNlbnRhdGlvbikgeworICAgICAgICAgIH0KKworICAgICAgICB9OworICAgICAgICByZXN1bHQuYWRkKHZpZXdOb2RlKTsKKyAgICAgIH0KKyAgICAgIGVsc2UgeworICAgICAgICByZXN1bHQuYWRkKHRyZWVOb2RlKTsKKyAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKKyAgfQorCisgIEBPdmVycmlkZQorICBwdWJsaWMgT2JqZWN0IGdldERhdGEoQ29sbGVjdGlvbjxBYnN0cmFjdFRyZWVOb2RlPiBzZWxlY3RlZCwgU3RyaW5nIGRhdGFOYW1lKSB7CisgICAgcmV0dXJuIG51bGw7CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9wcm9qZWN0Vmlldy9GaWxlU3RydWN0dXJlRGlhbG9nVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL3Byb2plY3RWaWV3L0ZpbGVTdHJ1Y3R1cmVEaWFsb2dUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWFiOTIwMwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9wcm9qZWN0Vmlldy9GaWxlU3RydWN0dXJlRGlhbG9nVGVzdC5qYXZhCkBAIC0wLDAgKzEsNzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwMC0yMDEyIEpldEJyYWlucyBzLnIuby4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCitwYWNrYWdlIGNvbS5pbnRlbGxpai5wcm9qZWN0VmlldzsKKworaW1wb3J0IGNvbS5pbnRlbGxpai5pZGUuYWN0aW9ucy5WaWV3U3RydWN0dXJlQWN0aW9uOworaW1wb3J0IGNvbS5pbnRlbGxpai5pZGUuY29tbWFuZGVyLkNvbW1hbmRlclBhbmVsOworaW1wb3J0IGNvbS5pbnRlbGxpai5pZGUuc3RydWN0dXJlVmlldy5TdHJ1Y3R1cmVWaWV3QnVpbGRlcjsKK2ltcG9ydCBjb20uaW50ZWxsaWouaWRlLnN0cnVjdHVyZVZpZXcuU3RydWN0dXJlVmlld01vZGVsOworaW1wb3J0IGNvbS5pbnRlbGxpai5pZGUuc3RydWN0dXJlVmlldy5UcmVlQmFzZWRTdHJ1Y3R1cmVWaWV3QnVpbGRlcjsKK2ltcG9ydCBjb20uaW50ZWxsaWouaWRlLnV0aWwuRmlsZVN0cnVjdHVyZURpYWxvZzsKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS5EaXNwb3NhYmxlOworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLmVkaXRvci5Eb2N1bWVudDsKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS5lZGl0b3IuRWRpdG9yOworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLmVkaXRvci5FZGl0b3JGYWN0b3J5OworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLmZpbGVFZGl0b3IuRmlsZURvY3VtZW50TWFuYWdlcjsKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS52ZnMuVmlydHVhbEZpbGU7CitpbXBvcnQgY29tLmludGVsbGlqLnBzaS5KYXZhRGlyZWN0b3J5U2VydmljZTsKK2ltcG9ydCBjb20uaW50ZWxsaWoucHNpLlBzaUNsYXNzOworaW1wb3J0IGNvbS5pbnRlbGxpai5wc2kuUHNpUGFja2FnZTsKKworaW1wb3J0IGphdmF4LnN3aW5nLio7CisKK3B1YmxpYyBjbGFzcyBGaWxlU3RydWN0dXJlRGlhbG9nVGVzdCBleHRlbmRzIEJhc2VQcm9qZWN0Vmlld1Rlc3RDYXNlIHsKKyAgcHVibGljIHZvaWQgdGVzdEZpbGVTdHJ1Y3R1cmVGb3JDbGFzcygpIHRocm93cyBFeGNlcHRpb24geworICAgIGZpbmFsIFBzaVBhY2thZ2UgYVBhY2thZ2UgPSBKYXZhRGlyZWN0b3J5U2VydmljZS5nZXRJbnN0YW5jZSgpLmdldFBhY2thZ2UoZ2V0UGFja2FnZURpcmVjdG9yeSgpKTsKKyAgICBhc3NlcnROb3ROdWxsKGFQYWNrYWdlKTsKKyAgICBmaW5hbCBQc2lDbGFzcyBwc2lDbGFzcyA9IGFQYWNrYWdlLmdldENsYXNzZXMoKVswXTsKKyAgICBmaW5hbCBWaXJ0dWFsRmlsZSB2aXJ0dWFsRmlsZSA9IHBzaUNsYXNzLmdldENvbnRhaW5pbmdGaWxlKCkuZ2V0VmlydHVhbEZpbGUoKTsKKyAgICBhc3NlcnROb3ROdWxsKHZpcnR1YWxGaWxlKTsKKyAgICBmaW5hbCBTdHJ1Y3R1cmVWaWV3QnVpbGRlciBzdHJ1Y3R1cmVWaWV3QnVpbGRlciA9CisgICAgICBTdHJ1Y3R1cmVWaWV3QnVpbGRlci5QUk9WSURFUi5nZXRTdHJ1Y3R1cmVWaWV3QnVpbGRlcih2aXJ0dWFsRmlsZS5nZXRGaWxlVHlwZSgpLCB2aXJ0dWFsRmlsZSwgbXlQcm9qZWN0KTsKKyAgICBhc3NlcnROb3ROdWxsKHN0cnVjdHVyZVZpZXdCdWlsZGVyKTsKKyAgICBmaW5hbCBTdHJ1Y3R1cmVWaWV3TW9kZWwgc3RydWN0dXJlVmlld01vZGVsID0gKChUcmVlQmFzZWRTdHJ1Y3R1cmVWaWV3QnVpbGRlcilzdHJ1Y3R1cmVWaWV3QnVpbGRlcikuY3JlYXRlU3RydWN0dXJlVmlld01vZGVsKCk7CisKKyAgICBmaW5hbCBFZGl0b3JGYWN0b3J5IGZhY3RvcnkgPSBFZGl0b3JGYWN0b3J5LmdldEluc3RhbmNlKCk7CisgICAgYXNzZXJ0Tm90TnVsbChmYWN0b3J5KTsKKyAgICBmaW5hbCBEb2N1bWVudCBkb2N1bWVudCA9IEZpbGVEb2N1bWVudE1hbmFnZXIuZ2V0SW5zdGFuY2UoKS5nZXREb2N1bWVudCh2aXJ0dWFsRmlsZSk7CisgICAgYXNzZXJ0Tm90TnVsbChkb2N1bWVudCk7CisKKyAgICBmaW5hbCBFZGl0b3IgZWRpdG9yID0gZmFjdG9yeS5jcmVhdGVFZGl0b3IoZG9jdW1lbnQpOworICAgIHRyeSB7CisgICAgICBmaW5hbCBGaWxlU3RydWN0dXJlRGlhbG9nIGRpYWxvZyA9CisgICAgICAgIFZpZXdTdHJ1Y3R1cmVBY3Rpb24uY3JlYXRlU3RydWN0dXJlVmlld0Jhc2VkRGlhbG9nKHN0cnVjdHVyZVZpZXdNb2RlbCwgZWRpdG9yLCBteVByb2plY3QsIHBzaUNsYXNzLCBuZXcgRGlzcG9zYWJsZSgpIHsKKyAgICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgICBwdWJsaWMgdm9pZCBkaXNwb3NlKCkgeworICAgICAgICAgICAgc3RydWN0dXJlVmlld01vZGVsLmRpc3Bvc2UoKTsKKyAgICAgICAgICB9CisgICAgICAgIH0pOworICAgICAgdHJ5IHsKKyAgICAgICAgZmluYWwgQ29tbWFuZGVyUGFuZWwgcGFuZWwgPSBkaWFsb2cuZ2V0UGFuZWwoKTsKKyAgICAgICAgYXNzZXJ0TGlzdHNFcXVhbCgoTGlzdE1vZGVsKXBhbmVsLmdldE1vZGVsKCksICJJbm5lcjFcbiIgKyAiSW5uZXIyXG4iICsgIl9fbWV0aG9kKCk6IHZvaWRcbiIgKyAiX215RmllbGQxOiBpbnRcbiIgKyAiX215RmllbGQyOiBTdHJpbmdcbiIpOworICAgICAgfQorICAgICAgZmluYWxseSB7CisgICAgICAgIGRpYWxvZy5jbG9zZSgwKTsKKyAgICAgIH0KKyAgICB9CisgICAgZmluYWxseSB7CisgICAgICBmYWN0b3J5LnJlbGVhc2VFZGl0b3IoZWRpdG9yKTsKKyAgICB9CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9wcm9qZWN0Vmlldy9KYXZhVHJlZVN0cnVjdHVyZVRlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9wcm9qZWN0Vmlldy9KYXZhVHJlZVN0cnVjdHVyZVRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYWRkNDEyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL3Byb2plY3RWaWV3L0phdmFUcmVlU3RydWN0dXJlVGVzdC5qYXZhCkBAIC0wLDAgKzEsMjE3IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA0IEpldEJyYWlucyBzLnIuby4gQWxsICBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6IAorICoKKyAqIC1SZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqCisgKiAtUmVkaXN0cmlidXRpb24gaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y3QgdGhlIGFib3ZlIGNvcHlyaWdodAorICogIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIE5laXRoZXIgdGhlIG5hbWUgb2YgSmV0QnJhaW5zIG9yIEludGVsbGlKIElERUEKKyAqIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBwcm92aWRlZCAiQVMgSVMsIiB3aXRob3V0IGEgd2FycmFudHkgb2YgYW55IGtpbmQuIEFMTAorICogRVhQUkVTUyBPUiBJTVBMSUVEIENPTkRJVElPTlMsIFJFUFJFU0VOVEFUSU9OUyBBTkQgV0FSUkFOVElFUywgSU5DTFVESU5HCisgKiBBTlkgSU1QTElFRCBXQVJSQU5UWSBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBPUiBOT04tSU5GUklOR0VNRU5ULCBBUkUgSEVSRUJZIEVYQ0xVREVELiBKRVRCUkFJTlMgQU5EIElUUyBMSUNFTlNPUlMgU0hBTEwgTk9UCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBEQU1BR0VTIE9SIExJQUJJTElUSUVTIFNVRkZFUkVEIEJZIExJQ0VOU0VFIEFTIEEgUkVTVUxUCisgKiBPRiBPUiBSRUxBVElORyBUTyBVU0UsIE1PRElGSUNBVElPTiBPUiBESVNUUklCVVRJT04gT0YgVEhFIFNPRlRXQVJFIE9SIElUUworICogREVSSVZBVElWRVMuIElOIE5PIEVWRU5UIFdJTEwgSkVUQlJBSU5TIE9SIElUUyBMSUNFTlNPUlMgQkUgTElBQkxFIEZPUiBBTlkgTE9TVAorICogUkVWRU5VRSwgUFJPRklUIE9SIERBVEEsIE9SIEZPUiBESVJFQ1QsIElORElSRUNULCBTUEVDSUFMLCBDT05TRVFVRU5USUFMLAorICogSU5DSURFTlRBTCBPUiBQVU5JVElWRSBEQU1BR0VTLCBIT1dFVkVSIENBVVNFRCBBTkQgUkVHQVJETEVTUyBPRiBUSEUgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIEFSSVNJTkcgT1VUIE9GIFRIRSBVU0UgT0YgT1IgSU5BQklMSVRZIFRPIFVTRSBTT0ZUV0FSRSwgRVZFTgorICogSUYgSkVUQlJBSU5TIEhBUyBCRUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4KKyAqCisgKi8KK3BhY2thZ2UgY29tLmludGVsbGlqLnByb2plY3RWaWV3OworCitpbXBvcnQgY29tLmludGVsbGlqLkphdmFUZXN0VXRpbDsKK2ltcG9ydCBjb20uaW50ZWxsaWouaWRlLnN0cnVjdHVyZVZpZXcuaW1wbC5qYXZhLkphdmFJbmhlcml0ZWRNZW1iZXJzTm9kZVByb3ZpZGVyOworaW1wb3J0IGNvbS5pbnRlbGxpai5pZGUuc3RydWN0dXJlVmlldy5pbXBsLmphdmEuUHVibGljRWxlbWVudHNGaWx0ZXI7CitpbXBvcnQgY29tLmludGVsbGlqLmlkZS5zdHJ1Y3R1cmVWaWV3LmltcGwuamF2YS5WaXNpYmlsaXR5U29ydGVyOworaW1wb3J0IGNvbS5pbnRlbGxpai5pZGUuc3RydWN0dXJlVmlldy5uZXdTdHJ1Y3R1cmVWaWV3LlN0cnVjdHVyZVZpZXdDb21wb25lbnQ7CitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkuZmlsZUVkaXRvci5GaWxlRWRpdG9yOworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLmZpbGVFZGl0b3IuRmlsZUVkaXRvck1hbmFnZXI7CitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkudXRpbC5EaXNwb3NlcjsKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS52ZnMuVmlydHVhbEZpbGU7CitpbXBvcnQgY29tLmludGVsbGlqLnBzaS5KYXZhRGlyZWN0b3J5U2VydmljZTsKK2ltcG9ydCBjb20uaW50ZWxsaWoucHNpLlBzaUNsYXNzOworaW1wb3J0IGNvbS5pbnRlbGxpai50ZXN0RnJhbWV3b3JrLklkZWFUZXN0VXRpbDsKK2ltcG9ydCBjb20uaW50ZWxsaWoudGVzdEZyYW1ld29yay5UZXN0U291cmNlQmFzZWRUZXN0Q2FzZTsKKworaW1wb3J0IGphdmF4LnN3aW5nLio7CisKK3B1YmxpYyBjbGFzcyBKYXZhVHJlZVN0cnVjdHVyZVRlc3QgZXh0ZW5kcyBUZXN0U291cmNlQmFzZWRUZXN0Q2FzZSB7CisgIEBPdmVycmlkZQorICBwcm90ZWN0ZWQgU3RyaW5nIGdldFRlc3RQYXRoKCkgeworICAgIHJldHVybiAic3RydWN0dXJlVmlldyI7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0SmF2YUNsYXNzU3RydWN0dXJlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG90ZXN0KG5ldyBDaGVja0FjdGlvbigpIHsKKyAgICAgIEBPdmVycmlkZQorICAgICAgcHVibGljIHZvaWQgdGVzdENsYXNzU3RydWN0dXJlKFN0cnVjdHVyZVZpZXdDb21wb25lbnQgc3RydWN0dXJlVmlld0NvbXBvbmVudCkgeworICAgICAgICBzdHJ1Y3R1cmVWaWV3Q29tcG9uZW50LnNldEFjdGlvbkFjdGl2ZShKYXZhSW5oZXJpdGVkTWVtYmVyc05vZGVQcm92aWRlci5JRCwgdHJ1ZSk7CisgICAgICAgIElkZWFUZXN0VXRpbC5hc3NlcnRUcmVlRXF1YWwoc3RydWN0dXJlVmlld0NvbXBvbmVudC5nZXRUcmVlKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItQ2xhc3MxLmphdmFcbiIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIC1DbGFzczFcbiIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICBnZXRWYWx1ZSgpOiBpbnRcbiIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICBnZXRDbGFzcygpOiBDbGFzczw/IGV4dGVuZHMgT2JqZWN0PlxuIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgIGhhc2hDb2RlKCk6IGludFxuIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgIGVxdWFscyhPYmplY3QpOiBib29sZWFuXG4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgY2xvbmUoKTogT2JqZWN0XG4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgdG9TdHJpbmcoKTogU3RyaW5nXG4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgbm90aWZ5KCk6IHZvaWRcbiIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICBub3RpZnlBbGwoKTogdm9pZFxuIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgIHdhaXQobG9uZyk6IHZvaWRcbiIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICB3YWl0KGxvbmcsIGludCk6IHZvaWRcbiIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICB3YWl0KCk6IHZvaWRcbiIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICBmaW5hbGl6ZSgpOiB2b2lkXG4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgbXlGaWVsZDE6IGJvb2xlYW5cbiIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICBteUZpZWxkMjogYm9vbGVhblxuIik7CisKKyAgICAgICAgc3RydWN0dXJlVmlld0NvbXBvbmVudC5zZXRBY3Rpb25BY3RpdmUoSmF2YUluaGVyaXRlZE1lbWJlcnNOb2RlUHJvdmlkZXIuSUQsIGZhbHNlKTsKKyAgICAgICAgc3RydWN0dXJlVmlld0NvbXBvbmVudC5zZXRBY3Rpb25BY3RpdmUoSmF2YUluaGVyaXRlZE1lbWJlcnNOb2RlUHJvdmlkZXIuSUQsIHRydWUpOworICAgICAgICBzdHJ1Y3R1cmVWaWV3Q29tcG9uZW50LnNldEFjdGlvbkFjdGl2ZShKYXZhSW5oZXJpdGVkTWVtYmVyc05vZGVQcm92aWRlci5JRCwgZmFsc2UpOworCisgICAgICAgIElkZWFUZXN0VXRpbC5hc3NlcnRUcmVlRXF1YWwoc3RydWN0dXJlVmlld0NvbXBvbmVudC5nZXRUcmVlKCksICItQ2xhc3MxLmphdmFcbiIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIC1DbGFzczFcbiIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICBnZXRWYWx1ZSgpOiBpbnRcbiIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICBteUZpZWxkMTogYm9vbGVhblxuIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgIG15RmllbGQyOiBib29sZWFuXG4iKTsKKworICAgICAgICBzdHJ1Y3R1cmVWaWV3Q29tcG9uZW50LnNldEFjdGlvbkFjdGl2ZShQdWJsaWNFbGVtZW50c0ZpbHRlci5JRCwgdHJ1ZSk7CisKKyAgICAgICAgSWRlYVRlc3RVdGlsLmFzc2VydFRyZWVFcXVhbChzdHJ1Y3R1cmVWaWV3Q29tcG9uZW50LmdldFRyZWUoKSwgIi1DbGFzczEuamF2YVxuIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgLUNsYXNzMVxuIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgIGdldFZhbHVlKCk6IGludFxuIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgIG15RmllbGQxOiBib29sZWFuXG4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgbXlGaWVsZDI6IGJvb2xlYW5cbiIpOworCisgICAgICAgIHN0cnVjdHVyZVZpZXdDb21wb25lbnQuc2V0QWN0aW9uQWN0aXZlKFB1YmxpY0VsZW1lbnRzRmlsdGVyLklELCBmYWxzZSk7CisKKyAgICAgICAgSWRlYVRlc3RVdGlsLmFzc2VydFRyZWVFcXVhbChzdHJ1Y3R1cmVWaWV3Q29tcG9uZW50LmdldFRyZWUoKSwgIi1DbGFzczEuamF2YVxuIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgLUNsYXNzMVxuIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgIGdldFZhbHVlKCk6IGludFxuIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgIG15RmllbGQxOiBib29sZWFuXG4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgbXlGaWVsZDI6IGJvb2xlYW5cbiIpOworICAgICAgfQorICAgIH0pOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFNob3dDbGFzc01lbWJlcnMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb3Rlc3QobmV3IENoZWNrQWN0aW9uKCkgeworICAgICAgQE92ZXJyaWRlCisgICAgICBwdWJsaWMgdm9pZCB0ZXN0Q2xhc3NTdHJ1Y3R1cmUoU3RydWN0dXJlVmlld0NvbXBvbmVudCBzdHJ1Y3R1cmVWaWV3Q29tcG9uZW50KSB7CisgICAgICAgIHN0cnVjdHVyZVZpZXdDb21wb25lbnQuc2V0QWN0aW9uQWN0aXZlKEphdmFJbmhlcml0ZWRNZW1iZXJzTm9kZVByb3ZpZGVyLklELCB0cnVlKTsKKyAgICAgICAgZmluYWwgSlRyZWUgdHJlZSA9IHN0cnVjdHVyZVZpZXdDb21wb25lbnQuZ2V0VHJlZSgpOworICAgICAgICB0cmVlLmNvbGxhcHNlUm93KDIpOworICAgICAgICBJZGVhVGVzdFV0aWwuYXNzZXJ0VHJlZUVxdWFsKHRyZWUsICItQ2xhc3MyLmphdmFcbiIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgLUNsYXNzMlxuIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgK0lubmVyQ2xhc3MxXG4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICArSW5uZXJDbGFzczJcbiIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgIGdldFZhbHVlKCk6IGludFxuIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgZ2V0Q2xhc3MoKTogQ2xhc3M8PyBleHRlbmRzIE9iamVjdD5cbiIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgIGhhc2hDb2RlKCk6IGludFxuIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgZXF1YWxzKE9iamVjdCk6IGJvb2xlYW5cbiIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgIGNsb25lKCk6IE9iamVjdFxuIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgdG9TdHJpbmcoKTogU3RyaW5nXG4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICBub3RpZnkoKTogdm9pZFxuIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgbm90aWZ5QWxsKCk6IHZvaWRcbiIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgIHdhaXQobG9uZyk6IHZvaWRcbiIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgIHdhaXQobG9uZywgaW50KTogdm9pZFxuIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgd2FpdCgpOiB2b2lkXG4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICBmaW5hbGl6ZSgpOiB2b2lkXG4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICBteUZpZWxkMTogYm9vbGVhblxuIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgbXlGaWVsZDI6IGJvb2xlYW5cbiIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgIG15RmllbGQzOiBib29sZWFuXG4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICBteUZpZWxkNDogYm9vbGVhblxuIik7CisKKyAgICAgICAgc3RydWN0dXJlVmlld0NvbXBvbmVudC5zZXRBY3Rpb25BY3RpdmUoSmF2YUluaGVyaXRlZE1lbWJlcnNOb2RlUHJvdmlkZXIuSUQsIGZhbHNlKTsKKworICAgICAgICBJZGVhVGVzdFV0aWwuYXNzZXJ0VHJlZUVxdWFsKHN0cnVjdHVyZVZpZXdDb21wb25lbnQuZ2V0VHJlZSgpLCAiLUNsYXNzMi5qYXZhXG4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAtQ2xhc3MyXG4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgK0lubmVyQ2xhc3MxXG4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgK0lubmVyQ2xhc3MyXG4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgZ2V0VmFsdWUoKTogaW50XG4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgbXlGaWVsZDE6IGJvb2xlYW5cbiIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICBteUZpZWxkMjogYm9vbGVhblxuIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgIG15RmllbGQzOiBib29sZWFuXG4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgbXlGaWVsZDQ6IGJvb2xlYW5cbiIpOworICAgICAgfQorICAgIH0pOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFZpc2liaWxpdHlTb3J0ZXIoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb3Rlc3QobmV3IENoZWNrQWN0aW9uKCkgeworICAgICAgQE92ZXJyaWRlCisgICAgICBwdWJsaWMgdm9pZCB0ZXN0Q2xhc3NTdHJ1Y3R1cmUoU3RydWN0dXJlVmlld0NvbXBvbmVudCBzdHJ1Y3R1cmVWaWV3Q29tcG9uZW50KSB7CisgICAgICAgIHN0cnVjdHVyZVZpZXdDb21wb25lbnQuc2V0QWN0aW9uQWN0aXZlKEphdmFJbmhlcml0ZWRNZW1iZXJzTm9kZVByb3ZpZGVyLklELCBmYWxzZSk7CisKKyAgICAgICAgSWRlYVRlc3RVdGlsLmFzc2VydFRyZWVFcXVhbChzdHJ1Y3R1cmVWaWV3Q29tcG9uZW50LmdldFRyZWUoKSwgIi1DbGFzczIuamF2YVxuIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgLUNsYXNzMlxuIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgIF9fbXlQcml2YXRlRmlpZWxkOiBpbnRcbiIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICBfbXlQcm90ZWN0ZWRGaWVsZDogaW50XG4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgbXlQdWJsaWNGaWVsZDogaW50XG4iKTsKKworICAgICAgICBzdHJ1Y3R1cmVWaWV3Q29tcG9uZW50LnNldEFjdGlvbkFjdGl2ZShWaXNpYmlsaXR5U29ydGVyLklELCB0cnVlKTsKKworICAgICAgICBJZGVhVGVzdFV0aWwuYXNzZXJ0VHJlZUVxdWFsKHN0cnVjdHVyZVZpZXdDb21wb25lbnQuZ2V0VHJlZSgpLCAiLUNsYXNzMi5qYXZhXG4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAtQ2xhc3MyXG4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgbXlQdWJsaWNGaWVsZDogaW50XG4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgX215UHJvdGVjdGVkRmllbGQ6IGludFxuIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgIF9fbXlQcml2YXRlRmlpZWxkOiBpbnRcbiIpOworICAgICAgfQorICAgIH0pOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdE1lbWJlcnNPcmRlcigpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvdGVzdChuZXcgQ2hlY2tBY3Rpb24oKSB7CisgICAgICBAT3ZlcnJpZGUKKyAgICAgIHB1YmxpYyB2b2lkIHRlc3RDbGFzc1N0cnVjdHVyZShTdHJ1Y3R1cmVWaWV3Q29tcG9uZW50IHN0cnVjdHVyZVZpZXdDb21wb25lbnQpIHsKKyAgICAgICAgc3RydWN0dXJlVmlld0NvbXBvbmVudC5zZXRBY3Rpb25BY3RpdmUoSmF2YUluaGVyaXRlZE1lbWJlcnNOb2RlUHJvdmlkZXIuSUQsIGZhbHNlKTsKKworICAgICAgICBJZGVhVGVzdFV0aWwuYXNzZXJ0VHJlZUVxdWFsKHN0cnVjdHVyZVZpZXdDb21wb25lbnQuZ2V0VHJlZSgpLCAiLUNsYXNzMi5qYXZhXG4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAtQ2xhc3MyXG4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgQ2xhc3MyKClcbiIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICBhZigpOiB2b2lkXG4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgemYoKTogdm9pZFxuIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgIGFiOiBpbnRcbiIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICB6OiBpbnRcbiIKKyAgICAgICAgKTsKKyAgICAgIH0KKyAgICB9KTsKKyAgfQorICBpbnRlcmZhY2UgQ2hlY2tBY3Rpb24geworICAgIHZvaWQgdGVzdENsYXNzU3RydWN0dXJlKFN0cnVjdHVyZVZpZXdDb21wb25lbnQgc3RydWN0dXJlVmlld0NvbXBvbmVudCk7CisgIH0KKyAgcHJpdmF0ZSB2b2lkIGRvdGVzdChDaGVja0FjdGlvbiBjaGVja0FjdGlvbikgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZmluYWwgUHNpQ2xhc3MgcHNpQ2xhc3MgPSBKYXZhRGlyZWN0b3J5U2VydmljZS5nZXRJbnN0YW5jZSgpLmdldENsYXNzZXMoZ2V0UGFja2FnZURpcmVjdG9yeSgiY29tL3BhY2thZ2UxIikpWzBdOworICAgIGZpbmFsIFZpcnR1YWxGaWxlIHZpcnR1YWxGaWxlID0gcHNpQ2xhc3MuZ2V0Q29udGFpbmluZ0ZpbGUoKS5nZXRWaXJ0dWFsRmlsZSgpOworICAgIGZpbmFsIEZpbGVFZGl0b3JNYW5hZ2VyIGZpbGVFZGl0b3JNYW5hZ2VyID0gRmlsZUVkaXRvck1hbmFnZXIuZ2V0SW5zdGFuY2UobXlQcm9qZWN0KTsKKyAgICBGaWxlRWRpdG9yW10gZmlsZUVkaXRvcnMgPSBmaWxlRWRpdG9yTWFuYWdlci5vcGVuRmlsZSh2aXJ0dWFsRmlsZSwgZmFsc2UpOworICAgIGZpbmFsIEZpbGVFZGl0b3IgZmlsZUVkaXRvciA9IGZpbGVFZGl0b3JzWzBdOworICAgIHRyeSB7CisgICAgICBmaW5hbCBTdHJ1Y3R1cmVWaWV3Q29tcG9uZW50IHN0cnVjdHVyZVZpZXdDb21wb25lbnQgPQorICAgICAgICAoU3RydWN0dXJlVmlld0NvbXBvbmVudClmaWxlRWRpdG9yLmdldFN0cnVjdHVyZVZpZXdCdWlsZGVyKCkuY3JlYXRlU3RydWN0dXJlVmlldyhmaWxlRWRpdG9yLCBteVByb2plY3QpOworCisgICAgICBjaGVja0FjdGlvbi50ZXN0Q2xhc3NTdHJ1Y3R1cmUoc3RydWN0dXJlVmlld0NvbXBvbmVudCk7CisgICAgICBEaXNwb3Nlci5kaXNwb3NlKHN0cnVjdHVyZVZpZXdDb21wb25lbnQpOworCisgICAgfQorICAgIGZpbmFsbHkgeworICAgICAgZmlsZUVkaXRvck1hbmFnZXIuY2xvc2VGaWxlKHZpcnR1YWxGaWxlKTsKKyAgICB9CisgIH0KKworICBAT3ZlcnJpZGUKKyAgcHJvdGVjdGVkIFN0cmluZyBnZXRUZXN0RGF0YVBhdGgoKSB7CisgICAgcmV0dXJuIEphdmFUZXN0VXRpbC5nZXRKYXZhVGVzdERhdGFQYXRoKCk7CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9wcm9qZWN0Vmlldy9OYXZpZ2F0ZUZyb21Tb3VyY2VUZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovcHJvamVjdFZpZXcvTmF2aWdhdGVGcm9tU291cmNlVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc1ZTM0MjIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovcHJvamVjdFZpZXcvTmF2aWdhdGVGcm9tU291cmNlVGVzdC5qYXZhCkBAIC0wLDAgKzEsMTU4IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA0IEpldEJyYWlucyBzLnIuby4gQWxsICBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogLVJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICoKKyAqIC1SZWRpc3RyaWJ1dGlvbiBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjdCB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogTmVpdGhlciB0aGUgbmFtZSBvZiBKZXRCcmFpbnMgb3IgSW50ZWxsaUogSURFQQorICogbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIHByb3ZpZGVkICJBUyBJUywiIHdpdGhvdXQgYSB3YXJyYW50eSBvZiBhbnkga2luZC4gQUxMCisgKiBFWFBSRVNTIE9SIElNUExJRUQgQ09ORElUSU9OUywgUkVQUkVTRU5UQVRJT05TIEFORCBXQVJSQU5USUVTLCBJTkNMVURJTkcKKyAqIEFOWSBJTVBMSUVEIFdBUlJBTlRZIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIE9SIE5PTi1JTkZSSU5HRU1FTlQsIEFSRSBIRVJFQlkgRVhDTFVERUQuIEpFVEJSQUlOUyBBTkQgSVRTIExJQ0VOU09SUyBTSEFMTCBOT1QKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERBTUFHRVMgT1IgTElBQklMSVRJRVMgU1VGRkVSRUQgQlkgTElDRU5TRUUgQVMgQSBSRVNVTFQKKyAqIE9GIE9SIFJFTEFUSU5HIFRPIFVTRSwgTU9ESUZJQ0FUSU9OIE9SIERJU1RSSUJVVElPTiBPRiBUSEUgU09GVFdBUkUgT1IgSVRTCisgKiBERVJJVkFUSVZFUy4gSU4gTk8gRVZFTlQgV0lMTCBKRVRCUkFJTlMgT1IgSVRTIExJQ0VOU09SUyBCRSBMSUFCTEUgRk9SIEFOWSBMT1NUCisgKiBSRVZFTlVFLCBQUk9GSVQgT1IgREFUQSwgT1IgRk9SIERJUkVDVCwgSU5ESVJFQ1QsIFNQRUNJQUwsIENPTlNFUVVFTlRJQUwsCisgKiBJTkNJREVOVEFMIE9SIFBVTklUSVZFIERBTUFHRVMsIEhPV0VWRVIgQ0FVU0VEIEFORCBSRUdBUkRMRVNTIE9GIFRIRSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgQVJJU0lORyBPVVQgT0YgVEhFIFVTRSBPRiBPUiBJTkFCSUxJVFkgVE8gVVNFIFNPRlRXQVJFLCBFVkVOCisgKiBJRiBKRVRCUkFJTlMgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLgorICoKKyAqLworcGFja2FnZSBjb20uaW50ZWxsaWoucHJvamVjdFZpZXc7CisKK2ltcG9ydCBjb20uaW50ZWxsaWouaWRlLkRhdGFNYW5hZ2VyOworaW1wb3J0IGNvbS5pbnRlbGxpai5pZGUucHJvamVjdFZpZXcuUHJvamVjdFZpZXc7CitpbXBvcnQgY29tLmludGVsbGlqLmlkZS5wcm9qZWN0Vmlldy5pbXBsLkFic3RyYWN0UHJvamVjdFZpZXdQU0lQYW5lOworaW1wb3J0IGNvbS5pbnRlbGxpai5pZGUucHJvamVjdFZpZXcuaW1wbC5Qcm9qZWN0Vmlld0ltcGw7CitpbXBvcnQgY29tLmludGVsbGlqLmlkZS5wcm9qZWN0Vmlldy5pbXBsLlByb2plY3RWaWV3UGFuZTsKK2ltcG9ydCBjb20uaW50ZWxsaWouaWRlLnByb2plY3RWaWV3LmltcGwuUHJvamVjdFZpZXdUb29sV2luZG93RmFjdG9yeTsKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS5hY3Rpb25TeXN0ZW0uRGF0YUNvbnRleHQ7CitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkuYWN0aW9uU3lzdGVtLkxhbmdEYXRhS2V5czsKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS5maWxlRWRpdG9yLkZpbGVFZGl0b3JNYW5hZ2VyOworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLnZmcy5WaXJ0dWFsRmlsZTsKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS53bS5Ub29sV2luZG93OworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLndtLlRvb2xXaW5kb3dJZDsKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS53bS5Ub29sV2luZG93TWFuYWdlcjsKK2ltcG9ydCBjb20uaW50ZWxsaWoucHNpLio7CitpbXBvcnQgY29tLmludGVsbGlqLnRlc3RGcmFtZXdvcmsuUGxhdGZvcm1UZXN0VXRpbDsKKworaW1wb3J0IGphdmF4LnN3aW5nLio7CitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKKworQFN1cHByZXNzV2FybmluZ3MoeyJIYXJkQ29kZWRTdHJpbmdMaXRlcmFsIn0pCitwdWJsaWMgY2xhc3MgTmF2aWdhdGVGcm9tU291cmNlVGVzdCBleHRlbmRzIEJhc2VQcm9qZWN0Vmlld1Rlc3RDYXNlIHsKKyAgcHVibGljIHZvaWQgdGVzdFNob3dDbGFzc01lbWJlcnMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICB1c2VTdGFuZGFyZFByb3ZpZGVycygpOworICAgIGZpbmFsIFBzaUNsYXNzW10gY2xhc3NlcyA9IEphdmFEaXJlY3RvcnlTZXJ2aWNlLmdldEluc3RhbmNlKCkuZ2V0Q2xhc3NlcyhnZXRQYWNrYWdlRGlyZWN0b3J5KCkpOworICAgIHNvcnRDbGFzc2VzQnlOYW1lKGNsYXNzZXMpOworICAgIFBzaUNsYXNzIHBzaUNsYXNzID0gY2xhc3Nlc1swXTsKKworICAgIGZpbmFsIEFic3RyYWN0UHJvamVjdFZpZXdQU0lQYW5lIHBhbmUgPSBjcmVhdGVQYW5lKCk7CisgICAgZmluYWwgUHNpRmlsZSBjb250YWluaW5nRmlsZSA9IHBzaUNsYXNzLmdldENvbnRhaW5pbmdGaWxlKCk7CisgICAgZmluYWwgVmlydHVhbEZpbGUgdmlydHVhbEZpbGUgPSBjb250YWluaW5nRmlsZS5nZXRWaXJ0dWFsRmlsZSgpOworCisgICAgY2hlY2tOYXZpZ2F0ZUZyb21Tb3VyY2VCZWhhdmlvdXIocHNpQ2xhc3MsIHZpcnR1YWxGaWxlLCBwYW5lKTsKKworICAgIFBsYXRmb3JtVGVzdFV0aWwuYXNzZXJ0VHJlZUVxdWFsKHBhbmUuZ2V0VHJlZSgpLCAiLVByb2plY3RcbiIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIC1Qc2lEaXJlY3Rvcnk6IHNob3dDbGFzc01lbWJlcnNcbiIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICAtUHNpRGlyZWN0b3J5OiBzcmNcbiIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgLVBzaURpcmVjdG9yeTogY29tXG4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgICAtUHNpRGlyZWN0b3J5OiBwYWNrYWdlMVxuIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgICAgIFtDbGFzczFdXG4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgICAgQ2xhc3MyXG4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0Um9vdEZpbGVzKCkgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICtFeHRlcm5hbCBMaWJyYXJpZXNcbiIKKyAgICAgICwgdHJ1ZSk7CisKKyAgICBjaGFuZ2VDbGFzc1RleHRBbmRUcnlUb05hdmlnYXRlKCJjbGFzcyBDbGFzczExIHt9IiwgKFBzaUphdmFGaWxlKWNvbnRhaW5pbmdGaWxlLCBwYW5lLCAiLVByb2plY3RcbiIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgLVBzaURpcmVjdG9yeTogc2hvd0NsYXNzTWVtYmVyc1xuIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgLVBzaURpcmVjdG9yeTogc3JjXG4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgLVBzaURpcmVjdG9yeTogY29tXG4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgIC1Qc2lEaXJlY3Rvcnk6IHBhY2thZ2UxXG4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgICAtQ2xhc3MxLmphdmFcbiIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgICAgICBbQ2xhc3MxMV1cbiIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgICAgIENsYXNzMlxuIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0Um9vdEZpbGVzKCkgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgK0V4dGVybmFsIExpYnJhcmllc1xuIik7CisKKyAgICBjaGFuZ2VDbGFzc1RleHRBbmRUcnlUb05hdmlnYXRlKCJjbGFzcyBDbGFzczEge30iLCAoUHNpSmF2YUZpbGUpY29udGFpbmluZ0ZpbGUsIHBhbmUsICItUHJvamVjdFxuIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIC1Qc2lEaXJlY3Rvcnk6IHNob3dDbGFzc01lbWJlcnNcbiIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgLVBzaURpcmVjdG9yeTogc3JjXG4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgICAtUHNpRGlyZWN0b3J5OiBjb21cbiIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgICAtUHNpRGlyZWN0b3J5OiBwYWNrYWdlMVxuIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgICAtQ2xhc3MxLmphdmFcbiIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgICAgIFtDbGFzczFdXG4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgICAgIENsYXNzMlxuIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRSb290RmlsZXMoKSArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICtFeHRlcm5hbCBMaWJyYXJpZXNcbiIpOworCisgICAgZG9UZXN0TXVsdGlwbGVTZWxlY3Rpb24ocGFuZSwgKChQc2lKYXZhRmlsZSljb250YWluaW5nRmlsZSkuZ2V0Q2xhc3NlcygpWzBdKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RBdXRvc2Nyb2xsRnJvbVNvdXJjZU9uT3BlbmluZygpIHRocm93cyBFeGNlcHRpb24geworICAgIGZpbmFsIFBzaUNsYXNzW10gY2xhc3NlcyA9IEphdmFEaXJlY3RvcnlTZXJ2aWNlLmdldEluc3RhbmNlKCkuZ2V0Q2xhc3NlcyhnZXRQYWNrYWdlRGlyZWN0b3J5KCkpOworICAgIFBzaUNsYXNzIHBzaUNsYXNzID0gY2xhc3Nlc1swXTsKKworICAgIEZpbGVFZGl0b3JNYW5hZ2VyLmdldEluc3RhbmNlKGdldFByb2plY3QoKSkub3BlbkZpbGUocHNpQ2xhc3MuZ2V0Q29udGFpbmluZ0ZpbGUoKS5nZXRWaXJ0dWFsRmlsZSgpLCB0cnVlKTsKKworICAgIFByb2plY3RWaWV3IHByb2plY3RWaWV3ID0gUHJvamVjdFZpZXcuZ2V0SW5zdGFuY2UoZ2V0UHJvamVjdCgpKTsKKworICAgICgoUHJvamVjdFZpZXdJbXBsKXByb2plY3RWaWV3KS5zZXRBdXRvc2Nyb2xsRnJvbVNvdXJjZSh0cnVlLCBQcm9qZWN0Vmlld1BhbmUuSUQpOworCisgICAgVG9vbFdpbmRvdyB0b29sV2luZG93ID0gVG9vbFdpbmRvd01hbmFnZXIuZ2V0SW5zdGFuY2UoZ2V0UHJvamVjdCgpKS5nZXRUb29sV2luZG93KFRvb2xXaW5kb3dJZC5QUk9KRUNUX1ZJRVcpOworCisgICAgbmV3IFByb2plY3RWaWV3VG9vbFdpbmRvd0ZhY3RvcnkoKS5jcmVhdGVUb29sV2luZG93Q29udGVudChnZXRQcm9qZWN0KCksIHRvb2xXaW5kb3cpOworCisgICAgcHJvamVjdFZpZXcuY2hhbmdlVmlldyhQcm9qZWN0Vmlld1BhbmUuSUQpOworCisgICAgSkNvbXBvbmVudCBjb21wb25lbnQgPSAoKFByb2plY3RWaWV3SW1wbClwcm9qZWN0VmlldykuZ2V0Q29tcG9uZW50KCk7CisgICAgRGF0YUNvbnRleHQgY29udGV4dCA9IERhdGFNYW5hZ2VyLmdldEluc3RhbmNlKCkuZ2V0RGF0YUNvbnRleHQoY29tcG9uZW50KTsKKyAgICBQc2lFbGVtZW50IGVsZW1lbnQgPSBMYW5nRGF0YUtleXMuUFNJX0VMRU1FTlQuZ2V0RGF0YShjb250ZXh0KTsKKyAgICBhc3NlcnRFcXVhbHMoIkNsYXNzMS5qYXZhIiwgKChQc2lKYXZhRmlsZSllbGVtZW50KS5nZXROYW1lKCkpOworICB9CisKKyAgcHJpdmF0ZSBzdGF0aWMgdm9pZCBkb1Rlc3RNdWx0aXBsZVNlbGVjdGlvbihmaW5hbCBBYnN0cmFjdFByb2plY3RWaWV3UFNJUGFuZSBwYW5lLCBmaW5hbCBQc2lDbGFzcyBwc2lDbGFzcykgeworICAgIEpUcmVlIHRyZWUgPSBwYW5lLmdldFRyZWUoKTsKKyAgICBpbnQgcm93Q291bnQgPSB0cmVlLmdldFJvd0NvdW50KCk7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCByb3dDb3VudDsgaSsrKSB7CisgICAgICB0cmVlLmFkZFNlbGVjdGlvblJvdyhpKTsKKyAgICB9CisKKyAgICBwYW5lLnNlbGVjdChwc2lDbGFzcywgcHNpQ2xhc3MuZ2V0Q29udGFpbmluZ0ZpbGUoKS5nZXRWaXJ0dWFsRmlsZSgpLCB0cnVlKTsKKworICAgIGFzc2VydEVxdWFscygxMCwgdHJlZS5nZXRTZWxlY3Rpb25Db3VudCgpKTsKKyAgfQorCisgIHByaXZhdGUgc3RhdGljIHZvaWQgY2hhbmdlQ2xhc3NUZXh0QW5kVHJ5VG9OYXZpZ2F0ZShmaW5hbCBTdHJpbmcgbmV3Q2xhc3NTdHJpbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQc2lKYXZhRmlsZSBwc2lGaWxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmluYWwgQWJzdHJhY3RQcm9qZWN0Vmlld1BTSVBhbmUgcGFuZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsIFN0cmluZyBleHBlY3RlZCkgdGhyb3dzIElPRXhjZXB0aW9uLCBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiB7CisgICAgUHNpQ2xhc3MgcHNpQ2xhc3MgPSBwc2lGaWxlLmdldENsYXNzZXMoKVswXTsKKyAgICBmaW5hbCBWaXJ0dWFsRmlsZSB2aXJ0dWFsRmlsZSA9IHBzaUNsYXNzLmdldENvbnRhaW5pbmdGaWxlKCkuZ2V0VmlydHVhbEZpbGUoKTsKKyAgICBmaW5hbCBKVHJlZSB0cmVlID0gcGFuZS5nZXRUcmVlKCk7CisgICAgd3JpdGVUb0ZpbGUodmlydHVhbEZpbGUsIG5ld0NsYXNzU3RyaW5nLmdldEJ5dGVzKCkpOworCisgICAgUGxhdGZvcm1UZXN0VXRpbC53YWl0Rm9yQWxhcm0oNjAwKTsKKworICAgIHBzaUNsYXNzID0gcHNpRmlsZS5nZXRDbGFzc2VzKClbMF07CisgICAgcGFuZS5zZWxlY3QocHNpQ2xhc3MsIHZpcnR1YWxGaWxlLCB0cnVlKTsKKyAgICBQbGF0Zm9ybVRlc3RVdGlsLmFzc2VydFRyZWVFcXVhbCh0cmVlLCBleHBlY3RlZCwgdHJ1ZSk7CisgIH0KKworICBwcml2YXRlIHN0YXRpYyB2b2lkIHdyaXRlVG9GaWxlKGZpbmFsIFZpcnR1YWxGaWxlIHZpcnR1YWxGaWxlLCBmaW5hbCBieXRlW10gYikgdGhyb3dzIElPRXhjZXB0aW9uIHsKKyAgICB2aXJ0dWFsRmlsZS5zZXRCaW5hcnlDb250ZW50KGIpOworICB9CisKKworfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL3Byb2plY3RWaWV3L1Byb2plY3RUcmVlQnVpbGRlclRlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9wcm9qZWN0Vmlldy9Qcm9qZWN0VHJlZUJ1aWxkZXJUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjY1YTMxZAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9wcm9qZWN0Vmlldy9Qcm9qZWN0VHJlZUJ1aWxkZXJUZXN0LmphdmEKQEAgLTAsMCArMSwxMzMgQEAKK3BhY2thZ2UgY29tLmludGVsbGlqLnByb2plY3RWaWV3OworCitpbXBvcnQgY29tLmludGVsbGlqLmlkZS5wcm9qZWN0Vmlldy5pbXBsLkFic3RyYWN0UHJvamVjdFZpZXdQU0lQYW5lOworaW1wb3J0IGNvbS5pbnRlbGxpai5pZGUuc3RydWN0dXJlVmlldy5pbXBsLmphdmEuSmF2YUluaGVyaXRlZE1lbWJlcnNOb2RlUHJvdmlkZXI7CitpbXBvcnQgY29tLmludGVsbGlqLmlkZS5zdHJ1Y3R1cmVWaWV3Lm5ld1N0cnVjdHVyZVZpZXcuU3RydWN0dXJlVmlld0NvbXBvbmVudDsKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS5maWxlRWRpdG9yLkZpbGVFZGl0b3I7CitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkuZmlsZUVkaXRvci5GaWxlRWRpdG9yTWFuYWdlcjsKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS51dGlsLkRpc3Bvc2VyOworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLnZmcy5WaXJ0dWFsRmlsZTsKK2ltcG9ydCBjb20uaW50ZWxsaWoucHNpLkphdmFEaXJlY3RvcnlTZXJ2aWNlOworaW1wb3J0IGNvbS5pbnRlbGxpai5wc2kuUHNpQ2xhc3M7CitpbXBvcnQgY29tLmludGVsbGlqLnBzaS5Qc2lGaWVsZDsKK2ltcG9ydCBjb20uaW50ZWxsaWoucHNpLlBzaUZpbGU7CitpbXBvcnQgY29tLmludGVsbGlqLnRlc3RGcmFtZXdvcmsuSWRlYVRlc3RVdGlsOworaW1wb3J0IGNvbS5pbnRlbGxpai51dGlsLkluY29ycmVjdE9wZXJhdGlvbkV4Y2VwdGlvbjsKK2ltcG9ydCBjb20uaW50ZWxsaWoudXRpbC51aS50cmVlLlRyZWVVdGlsOworCitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKKworcHVibGljIGNsYXNzIFByb2plY3RUcmVlQnVpbGRlclRlc3QgZXh0ZW5kcyBCYXNlUHJvamVjdFZpZXdUZXN0Q2FzZSB7CisgIHB1YmxpYyB2b2lkIHRlc3RTdGFuZGFyZFByb3ZpZGVycygpIHRocm93cyBFeGNlcHRpb24geworICAgIGdldFByb2plY3RUcmVlU3RydWN0dXJlKCkuc2V0UHJvdmlkZXJzKCk7CisKKyAgICBmaW5hbCBQc2lDbGFzcyBhQ2xhc3MgPSBKYXZhRGlyZWN0b3J5U2VydmljZS5nZXRJbnN0YW5jZSgpLmdldENsYXNzZXMoZ2V0UGFja2FnZURpcmVjdG9yeSgpKVswXTsKKworICAgIFBzaUZpbGUgZWxlbWVudCA9IGFDbGFzcy5nZXRDb250YWluaW5nRmlsZSgpOworCisgICAgY2hlY2tOYXZpZ2F0ZUZyb21Tb3VyY2VCZWhhdmlvdXIoZWxlbWVudCwgZWxlbWVudC5nZXRWaXJ0dWFsRmlsZSgpLCBjcmVhdGVQYW5lKCkpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFNob3dDbGFzc01lbWJlcnMoKSB0aHJvd3MgSW5jb3JyZWN0T3BlcmF0aW9uRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7CisgICAgbXlTaG93TWVtYmVycyA9IHRydWU7CisgICAgdXNlU3RhbmRhcmRQcm92aWRlcnMoKTsKKyAgICBmaW5hbCBQc2lDbGFzc1tdIGNsYXNzZXMgPSBKYXZhRGlyZWN0b3J5U2VydmljZS5nZXRJbnN0YW5jZSgpLmdldENsYXNzZXMoZ2V0UGFja2FnZURpcmVjdG9yeSgpKTsKKyAgICBzb3J0Q2xhc3Nlc0J5TmFtZShjbGFzc2VzKTsKKyAgICBQc2lDbGFzcyBhQ2xhc3MgPSBjbGFzc2VzWzFdOworICAgIFBzaUNsYXNzIGlubmVyQ2xhc3MxID0gYUNsYXNzLmdldElubmVyQ2xhc3NlcygpWzBdOworICAgIFBzaUNsYXNzIGlubmVyQ2xhc3MxMiA9IGlubmVyQ2xhc3MxLmdldElubmVyQ2xhc3NlcygpWzBdOworICAgIFBzaUNsYXNzIGlubmVyQ2xhc3MxMyA9IGlubmVyQ2xhc3MxMi5nZXRJbm5lckNsYXNzZXMoKVswXTsKKyAgICBQc2lDbGFzcyBpbm5lckNsYXNzMTQgPSBpbm5lckNsYXNzMTMuZ2V0SW5uZXJDbGFzc2VzKClbMF07CisgICAgUHNpQ2xhc3MgaW5uZXJDbGFzczE1ID0gaW5uZXJDbGFzczE0LmdldElubmVyQ2xhc3NlcygpWzBdOworCisgICAgUHNpQ2xhc3MgaW5uZXJDbGFzczIgPSBhQ2xhc3MuZ2V0SW5uZXJDbGFzc2VzKClbMV07CisgICAgUHNpQ2xhc3MgaW5uZXJDbGFzczIxID0gaW5uZXJDbGFzczIuZ2V0SW5uZXJDbGFzc2VzKClbMF07CisgICAgUHNpQ2xhc3MgaW5uZXJDbGFzczIzID0gaW5uZXJDbGFzczIxLmdldElubmVyQ2xhc3NlcygpWzBdOworICAgIFBzaUNsYXNzIGlubmVyQ2xhc3MyNCA9IGlubmVyQ2xhc3MyMy5nZXRJbm5lckNsYXNzZXMoKVswXTsKKworICAgIFBzaUZpZWxkIGlubmVyQ2xhc3MxRmllbGQgPSBpbm5lckNsYXNzMTQuZ2V0RmllbGRzKClbMF07CisgICAgUHNpRmllbGQgaW5uZXJDbGFzczJGaWVsZCA9IGlubmVyQ2xhc3MyNC5nZXRGaWVsZHMoKVswXTsKKworICAgIGZpbmFsIEFic3RyYWN0UHJvamVjdFZpZXdQU0lQYW5lIHBhbmUgPSBjcmVhdGVQYW5lKCk7CisKKyAgICBjaGVja05hdmlnYXRlRnJvbVNvdXJjZUJlaGF2aW91cihpbm5lckNsYXNzMkZpZWxkLCBpbm5lckNsYXNzMkZpZWxkLmdldENvbnRhaW5pbmdGaWxlKCkuZ2V0VmlydHVhbEZpbGUoKSwgcGFuZSk7CisKKyAgICBJZGVhVGVzdFV0aWwuYXNzZXJ0VHJlZUVxdWFsKHBhbmUuZ2V0VHJlZSgpLCAiLVByb2plY3RcbiIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgLVBzaURpcmVjdG9yeTogc2hvd0NsYXNzTWVtYmVyc1xuIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgLVBzaURpcmVjdG9yeTogc3JjXG4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgLVBzaURpcmVjdG9yeTogY29tXG4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgIC1Qc2lEaXJlY3Rvcnk6IHBhY2thZ2UxXG4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgICArQ2xhc3MxXG4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgICAtQ2xhc3MyXG4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgICAgK0lubmVyQ2xhc3MxXG4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgICAgLUlubmVyQ2xhc3MyXG4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgICAgIC1Jbm5lckNsYXNzMjJcbiIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgICAgICAgIC1Jbm5lckNsYXNzMjNcbiIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgICAgICAgICAtSW5uZXJDbGFzczI0XG4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgICAgICAgICtJbm5lckNsYXNzMjVcbiIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgICAgICAgICAgbXlGaWVsZFRvU2VsZWN0OmludFxuIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgICAgICAgIG15SW5uZXJDbGFzc0ZpZWxkOmludFxuIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgICAgICAgbXlJbm5lckNsYXNzRmllbGQ6aW50XG4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgICAgIG15SW5uZXJDbGFzc0ZpZWxkOmludFxuIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgICAgIGdldFZhbHVlKCk6aW50XG4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgICAgbXlGaWVsZDE6Ym9vbGVhblxuIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgICAgIG15RmllbGQyOmJvb2xlYW5cbiIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgICAgICBteUZpZWxkMzpib29sZWFuXG4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgICAgbXlGaWVsZDQ6Ym9vbGVhblxuIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0Um9vdEZpbGVzKCkgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgK0V4dGVybmFsIExpYnJhcmllc1xuIgorICAgICk7CisKKyAgICBhc3NlcnRGYWxzZShpc0V4cGFuZGVkKGlubmVyQ2xhc3MxNS5nZXRGaWVsZHMoKVswXSwgcGFuZSkpOworICAgIGFzc2VydEZhbHNlKGlzRXhwYW5kZWQoaW5uZXJDbGFzczFGaWVsZCwgcGFuZSkpOworICAgIGFzc2VydFRydWUoaXNFeHBhbmRlZChpbm5lckNsYXNzMkZpZWxkLCBwYW5lKSk7CisKKyAgICBWaXJ0dWFsRmlsZSB2aXJ0dWFsRmlsZSA9IGFDbGFzcy5nZXRDb250YWluaW5nRmlsZSgpLmdldFZpcnR1YWxGaWxlKCk7CisgICAgRmlsZUVkaXRvck1hbmFnZXIgZmlsZUVkaXRvck1hbmFnZXIgPSBGaWxlRWRpdG9yTWFuYWdlci5nZXRJbnN0YW5jZShteVByb2plY3QpOworICAgIEZpbGVFZGl0b3JbXSBmaWxlRWRpdG9ycyA9IGZpbGVFZGl0b3JNYW5hZ2VyLm9wZW5GaWxlKHZpcnR1YWxGaWxlLCBmYWxzZSk7CisgICAgU3RydWN0dXJlVmlld0NvbXBvbmVudCBzdHJ1Y3R1cmVWaWV3Q29tcG9uZW50MiA9IG51bGw7CisgICAgU3RydWN0dXJlVmlld0NvbXBvbmVudCBzdHJ1Y3R1cmVWaWV3Q29tcG9uZW50ID0gbnVsbDsKKworICAgIHRyeSB7CisgICAgICBzdHJ1Y3R1cmVWaWV3Q29tcG9uZW50ID0gKFN0cnVjdHVyZVZpZXdDb21wb25lbnQpZmlsZUVkaXRvcnNbMF0uZ2V0U3RydWN0dXJlVmlld0J1aWxkZXIoKS5jcmVhdGVTdHJ1Y3R1cmVWaWV3KGZpbGVFZGl0b3JzWzBdLCBteVByb2plY3QpOworICAgICAgVHJlZVV0aWwuY29sbGFwc2VBbGwoc3RydWN0dXJlVmlld0NvbXBvbmVudC5nZXRUcmVlKCksIC0xKTsKKworICAgICAgc3RydWN0dXJlVmlld0NvbXBvbmVudC5zZWxlY3QoaW5uZXJDbGFzczJGaWVsZCwgdHJ1ZSk7CisKKyAgICAgIFN0cmluZyBleHBlY3RlZCA9ICItQ2xhc3MyLmphdmFcbiIgKworICAgICAgICAgICAgICAgICAgIiAtQ2xhc3MyXG4iICsKKyAgICAgICAgICAgICAgICAgICIgICtJbm5lckNsYXNzMVxuIiArCisgICAgICAgICAgICAgICAgICAiICAtSW5uZXJDbGFzczJcbiIgKworICAgICAgICAgICAgICAgICAgIiAgIC1Jbm5lckNsYXNzMjJcbiIgKworICAgICAgICAgICAgICAgICAgIiAgICAtSW5uZXJDbGFzczIzXG4iICsKKyAgICAgICAgICAgICAgICAgICIgICAgIC1Jbm5lckNsYXNzMjRcbiIgKworICAgICAgICAgICAgICAgICAgIiAgICAgICtJbm5lckNsYXNzMjVcbiIgKworICAgICAgICAgICAgICAgICAgIiAgICAgIG15RmllbGRUb1NlbGVjdDogaW50XG4iICsKKyAgICAgICAgICAgICAgICAgICIgICAgIG15SW5uZXJDbGFzc0ZpZWxkOiBpbnRcbiIgKworICAgICAgICAgICAgICAgICAgIiAgICBteUlubmVyQ2xhc3NGaWVsZDogaW50XG4iICsKKyAgICAgICAgICAgICAgICAgICIgICBteUlubmVyQ2xhc3NGaWVsZDogaW50XG4iICsKKyAgICAgICAgICAgICAgICAgICIgIGdldFZhbHVlKCk6IGludFxuIiArCisgICAgICAgICAgICAgICAgICAiICBteUZpZWxkMTogYm9vbGVhblxuIiArCisgICAgICAgICAgICAgICAgICAiICBteUZpZWxkMjogYm9vbGVhblxuIiArCisgICAgICAgICAgICAgICAgICAiICBteUZpZWxkMzogYm9vbGVhblxuIiArCisgICAgICAgICAgICAgICAgICAiICBteUZpZWxkNDogYm9vbGVhblxuIjsKKworICAgICAgSWRlYVRlc3RVdGlsLmFzc2VydFRyZWVFcXVhbChzdHJ1Y3R1cmVWaWV3Q29tcG9uZW50LmdldFRyZWUoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWQpOworCisKKyAgICAgIERpc3Bvc2VyLmRpc3Bvc2Uoc3RydWN0dXJlVmlld0NvbXBvbmVudCk7CisKKyAgICAgIGZpbmFsIEZpbGVFZGl0b3IgZmlsZUVkaXRvciA9IGZpbGVFZGl0b3JzWzBdOworICAgICAgc3RydWN0dXJlVmlld0NvbXBvbmVudDIgPSAoU3RydWN0dXJlVmlld0NvbXBvbmVudClmaWxlRWRpdG9yLmdldFN0cnVjdHVyZVZpZXdCdWlsZGVyKCkuY3JlYXRlU3RydWN0dXJlVmlldyhmaWxlRWRpdG9yLCBteVByb2plY3QpOworICAgICAgc3RydWN0dXJlVmlld0NvbXBvbmVudDIuc2V0QWN0aW9uQWN0aXZlKEphdmFJbmhlcml0ZWRNZW1iZXJzTm9kZVByb3ZpZGVyLklELCBmYWxzZSk7CisgICAgICBJZGVhVGVzdFV0aWwuYXNzZXJ0VHJlZUVxdWFsKHN0cnVjdHVyZVZpZXdDb21wb25lbnQyLmdldFRyZWUoKSwgZXhwZWN0ZWQpOworICAgIH0KKyAgICBmaW5hbGx5IHsKKyAgICAgIGZpbGVFZGl0b3JNYW5hZ2VyLmNsb3NlRmlsZSh2aXJ0dWFsRmlsZSk7CisgICAgICBpZiAoc3RydWN0dXJlVmlld0NvbXBvbmVudDIgIT0gbnVsbCkgeworICAgICAgICBEaXNwb3Nlci5kaXNwb3NlKHN0cnVjdHVyZVZpZXdDb21wb25lbnQyKTsKKyAgICAgIH0KKyAgICB9CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9wcm9qZWN0Vmlldy9Qcm9qZWN0VHJlZVN0cnVjdHVyZVRlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9wcm9qZWN0Vmlldy9Qcm9qZWN0VHJlZVN0cnVjdHVyZVRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZjkwY2FkCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL3Byb2plY3RWaWV3L1Byb2plY3RUcmVlU3RydWN0dXJlVGVzdC5qYXZhCkBAIC0wLDAgKzEsMTEzIEBACitwYWNrYWdlIGNvbS5pbnRlbGxpai5wcm9qZWN0VmlldzsKKworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLnVpLlF1ZXJ5YWJsZTsKKworcHVibGljIGNsYXNzIFByb2plY3RUcmVlU3RydWN0dXJlVGVzdCBleHRlbmRzIEJhc2VQcm9qZWN0Vmlld1Rlc3RDYXNlIHsKKworICBAT3ZlcnJpZGUKKyAgcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBzdXBlci5zZXRVcCgpOworICAgIG15UHJpbnRJbmZvID0gbmV3IFF1ZXJ5YWJsZS5QcmludEluZm8oKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3QxKCkgeworICAgIGdldFByb2plY3RUcmVlU3RydWN0dXJlKCkuc2V0UHJvdmlkZXJzKG5ldyBTYW1lTmFtZXNKb2luZXIoKSwgbmV3IENsYXNzTmFtZUNvbnZlcnRvcihteVByb2plY3QpKTsKKyAgICBhc3NlcnRTdHJ1Y3R1cmVFcXVhbChnZXRQYWNrYWdlRGlyZWN0b3J5KCksICJwYWNrYWdlMVxuIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIENsYXNzMi5qYXZhIGNvbnZlcnRlZFxuIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIEZvcm0xIGpvaW5lZFxuIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICBGb3JtMS5mb3JtXG4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgIEZvcm0xLmphdmEgY29udmVydGVkXG4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgRm9ybTIuZm9ybVxuIik7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0U3RhbmRhcmRQcm92aWRlcnMoKSB7CisgICAgdXNlU3RhbmRhcmRQcm92aWRlcnMoKTsKKworICAgIGFzc2VydFN0cnVjdHVyZUVxdWFsKGdldFBhY2thZ2VEaXJlY3RvcnkoKSwgInBhY2thZ2UxXG4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgQ2xhc3MxXG4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgQ2xhc3MyLmphdmFcbiIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgQ2xhc3MyXG4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgIENsYXNzM1xuIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIENsYXNzNC5qYXZhXG4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgRm9ybTFcbiIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiBGb3JtMS5mb3JtXG4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgRm9ybTIuZm9ybVxuIik7CisKKyAgICBnZXRQcm9qZWN0VHJlZVN0cnVjdHVyZSgpLnNldFByb3ZpZGVycygpOworCisgICAgYXNzZXJ0U3RydWN0dXJlRXF1YWwoZ2V0UGFja2FnZURpcmVjdG9yeSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICJwYWNrYWdlMVxuIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgIiBDbGFzczEuamF2YVxuIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgIiBDbGFzczIuamF2YVxuIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgIiBDbGFzczQuamF2YVxuIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgIiBGb3JtMS5mb3JtXG4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAiIEZvcm0xLmphdmFcbiIgKworICAgICAgICAgICAgICAgICAgICAgICAgICIgRm9ybTIuZm9ybVxuIik7CisKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RTaG93Q2xhc3NNZW1iZXJzKCkgeworICAgIHVzZVN0YW5kYXJkUHJvdmlkZXJzKCk7CisKKyAgICBteVNob3dNZW1iZXJzID0gZmFsc2U7CisgICAgYXNzZXJ0U3RydWN0dXJlRXF1YWwoZ2V0UGFja2FnZURpcmVjdG9yeSgpLCAicGFja2FnZTFcbiIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiBDbGFzczFcbiIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiBDbGFzczJcbiIpOworCisgICAgbXlTaG93TWVtYmVycyA9IHRydWU7CisgICAgYXNzZXJ0U3RydWN0dXJlRXF1YWwoZ2V0UGFja2FnZURpcmVjdG9yeSgpLCAicGFja2FnZTFcbiIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiBDbGFzczFcbiIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgSW5uZXJDbGFzc1xuIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgbXlJbm5lckNsYXNzRmllbGRcbiIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgZ2V0VmFsdWVcbiIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgbXlGaWVsZDFcbiIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgbXlGaWVsZDJcbiIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiBDbGFzczJcbiIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgSW5uZXJDbGFzczFcbiIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgIElubmVyQ2xhc3MxMlxuIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgIElubmVyQ2xhc3MxM1xuIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgICBJbm5lckNsYXNzMTRcbiIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgICAgIElubmVyQ2xhc3MxNVxuIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgICAgIG15SW5uZXJDbGFzc0ZpZWxkXG4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgICAgICBteUlubmVyQ2xhc3NGaWVsZFxuIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgICBteUlubmVyQ2xhc3NGaWVsZFxuIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgIG15SW5uZXJDbGFzc0ZpZWxkXG4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgICBteUlubmVyQ2xhc3NGaWVsZFxuIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICBJbm5lckNsYXNzMlxuIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgSW5uZXJDbGFzczIyXG4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgICAgSW5uZXJDbGFzczIzXG4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgICAgIElubmVyQ2xhc3MyNFxuIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgICAgSW5uZXJDbGFzczI1XG4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgICAgICAgbXlJbm5lckNsYXNzRmllbGRcbiIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgICAgIG15RmllbGRUb1NlbGVjdFxuIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgICBteUlubmVyQ2xhc3NGaWVsZFxuIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgIG15SW5uZXJDbGFzc0ZpZWxkXG4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgICBteUlubmVyQ2xhc3NGaWVsZFxuIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICBnZXRWYWx1ZVxuIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICBteUZpZWxkMVxuIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICBteUZpZWxkMlxuIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICBteUZpZWxkM1xuIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICBteUZpZWxkNFxuIiwgMTAwKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RHZXRQYXJlbnRPYmplY3QoKSB7CisgICAgdXNlU3RhbmRhcmRQcm92aWRlcnMoKTsKKyAgICBteVNob3dNZW1iZXJzID0gdHJ1ZTsKKyAgICBhc3NlcnRTdHJ1Y3R1cmVFcXVhbChnZXRDb250ZW50RGlyZWN0b3J5KCksICJnZXRQYXJlbnRPYmplY3RcbiIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiBzcmNcbiIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgY29tXG4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgICBwYWNrYWdlMVxuIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgIENsYXNzMVxuIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgICBtZXRob2RcbiIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgICAgbXlGaWVsZFxuIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgIENsYXNzMi5qYXZhXG4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgICAgIENsYXNzMlxuIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgICBDbGFzczNcbiIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgICBDbGFzczQuamF2YVxuIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgIEZvcm0xXG4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgICAgRm9ybTEuZm9ybVxuIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgIEZvcm0yLmZvcm1cbiIpOworCisgICAgY2hlY2tDb250YWluc01ldGhvZChteVN0cnVjdHVyZS5nZXRSb290RWxlbWVudCgpLCBteVN0cnVjdHVyZSk7CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9wcm9qZWN0Vmlldy9Qcm9qZWN0Vmlld1N3aXRjaGluZ1Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9wcm9qZWN0Vmlldy9Qcm9qZWN0Vmlld1N3aXRjaGluZ1Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ODY0MTEwCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL3Byb2plY3RWaWV3L1Byb2plY3RWaWV3U3dpdGNoaW5nVGVzdC5qYXZhCkBAIC0wLDAgKzEsNzggQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwMC0yMDExIEpldEJyYWlucyBzLnIuby4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCitwYWNrYWdlIGNvbS5pbnRlbGxpai5wcm9qZWN0VmlldzsKKworaW1wb3J0IGNvbS5pbnRlbGxpai5KYXZhVGVzdFV0aWw7CitpbXBvcnQgY29tLmludGVsbGlqLmlkZS5mYXZvcml0ZXNUcmVlVmlldy5GYXZvcml0ZXNNYW5hZ2VyOworaW1wb3J0IGNvbS5pbnRlbGxpai5pZGUucHJvamVjdFZpZXcuUHJvamVjdFZpZXc7CitpbXBvcnQgY29tLmludGVsbGlqLmlkZS5wcm9qZWN0Vmlldy5pbXBsLlByb2plY3RWaWV3SW1wbDsKK2ltcG9ydCBjb20uaW50ZWxsaWouaWRlLnByb2plY3RWaWV3LmltcGwuUHJvamVjdFZpZXdQYW5lOworaW1wb3J0IGNvbS5pbnRlbGxpai50ZXN0RnJhbWV3b3JrLlRlc3RTb3VyY2VCYXNlZFRlc3RDYXNlOworCitwdWJsaWMgY2xhc3MgUHJvamVjdFZpZXdTd2l0Y2hpbmdUZXN0IGV4dGVuZHMgVGVzdFNvdXJjZUJhc2VkVGVzdENhc2UgeworICBAT3ZlcnJpZGUKKyAgcHJvdGVjdGVkIFN0cmluZyBnZXRUZXN0UGF0aCgpIHsKKyAgICByZXR1cm4gInByb2plY3RWaWV3IjsKKyAgfQorCisgIEBPdmVycmlkZQorICBwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24geworICAgIHN1cGVyLnNldFVwKCk7CisgICAgKChQcm9qZWN0Vmlld0ltcGwpUHJvamVjdFZpZXcuZ2V0SW5zdGFuY2UoZ2V0UHJvamVjdCgpKSkuc2V0dXBJbXBsKG51bGwpOworICB9CisKKyAgQE92ZXJyaWRlCisgIHByb3RlY3RlZCB2b2lkIHJ1blN0YXJ0dXBBY3Rpdml0aWVzKCkgeworICAgIEZhdm9yaXRlc01hbmFnZXIuZ2V0SW5zdGFuY2UoZ2V0UHJvamVjdCgpKS5wcm9qZWN0T3BlbmVkKCk7CisgICAgc3VwZXIucnVuU3RhcnR1cEFjdGl2aXRpZXMoKTsKKyAgfQorCisgIEBPdmVycmlkZQorICBwcm90ZWN0ZWQgdm9pZCB0ZWFyRG93bigpIHRocm93cyBFeGNlcHRpb24geworICAgIEZhdm9yaXRlc01hbmFnZXIuZ2V0SW5zdGFuY2UoZ2V0UHJvamVjdCgpKS5wcm9qZWN0Q2xvc2VkKCk7CisKKyAgICBzdXBlci50ZWFyRG93bigpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFNlbGVjdFByb2plY3QoKSB7CisgICAgUHJvamVjdFZpZXcgcHJvamVjdFZpZXcgPSBQcm9qZWN0Vmlldy5nZXRJbnN0YW5jZShnZXRQcm9qZWN0KCkpOworICAgIHByb2plY3RWaWV3LmNoYW5nZVZpZXcoUHJvamVjdFZpZXdQYW5lLklEKTsKKworICAgIGFzc2VydEVxdWFscyhQcm9qZWN0Vmlld1BhbmUuSUQsIHByb2plY3RWaWV3LmdldEN1cnJlbnRWaWV3SWQoKSk7CisKKyAgICAvL0Zhdm9yaXRlc01hbmFnZXIgZmF2b3JpdGVzTWFuYWdlciA9IEZhdm9yaXRlc01hbmFnZXIuZ2V0SW5zdGFuY2UoZ2V0UHJvamVjdCgpKTsKKyAgICAvL2Zhdm9yaXRlc01hbmFnZXIuY3JlYXRlTmV3TGlzdCgieHh4eCIpOworICAgIC8vCisgICAgLy9BYnN0cmFjdFByb2plY3RWaWV3UGFuZSBjdXJyZW50UGFuZSA9IHByb2plY3RWaWV3LmdldEN1cnJlbnRQcm9qZWN0Vmlld1BhbmUoKTsKKyAgICAvL2Fzc2VydEVxdWFscyhGYXZvcml0ZXNQcm9qZWN0Vmlld1BhbmUuSUQsIGN1cnJlbnRQYW5lLmdldElkKCkpOworICAgIC8vYXNzZXJ0RXF1YWxzKCJ4eHh4IiwgY3VycmVudFBhbmUuZ2V0U3ViSWQoKSk7CisgICAgLy8KKyAgICAvL2Zhdm9yaXRlc01hbmFnZXIuY3JlYXRlTmV3TGlzdCgieXl5eSIpOworICAgIC8vY3VycmVudFBhbmUgPSBwcm9qZWN0Vmlldy5nZXRDdXJyZW50UHJvamVjdFZpZXdQYW5lKCk7CisgICAgLy9hc3NlcnRFcXVhbHMoRmF2b3JpdGVzUHJvamVjdFZpZXdQYW5lLklELCBjdXJyZW50UGFuZS5nZXRJZCgpKTsKKyAgICAvL2Fzc2VydEVxdWFscygieXl5eSIsIGN1cnJlbnRQYW5lLmdldFN1YklkKCkpOworICAgIC8vCisgICAgLy9mYXZvcml0ZXNNYW5hZ2VyLnJlbW92ZUZhdm9yaXRlc0xpc3QoInh4eHgiKTsKKyAgICAvL2N1cnJlbnRQYW5lID0gcHJvamVjdFZpZXcuZ2V0Q3VycmVudFByb2plY3RWaWV3UGFuZSgpOworICAgIC8vYXNzZXJ0RXF1YWxzKEZhdm9yaXRlc1Byb2plY3RWaWV3UGFuZS5JRCwgY3VycmVudFBhbmUuZ2V0SWQoKSk7CisgICAgLy9hc3NlcnRFcXVhbHMoInl5eXkiLCBjdXJyZW50UGFuZS5nZXRTdWJJZCgpKTsKKyAgfQorCisgIEBPdmVycmlkZQorICBwcm90ZWN0ZWQgU3RyaW5nIGdldFRlc3REYXRhUGF0aCgpIHsKKyAgICByZXR1cm4gSmF2YVRlc3RVdGlsLmdldEphdmFUZXN0RGF0YVBhdGgoKTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL3Byb2plY3RWaWV3L1NhbWVOYW1lc0pvaW5lci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL3Byb2plY3RWaWV3L1NhbWVOYW1lc0pvaW5lci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE5ZWZkMzQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovcHJvamVjdFZpZXcvU2FtZU5hbWVzSm9pbmVyLmphdmEKQEAgLTAsMCArMSwxMzcgQEAKK3BhY2thZ2UgY29tLmludGVsbGlqLnByb2plY3RWaWV3OworCitpbXBvcnQgY29tLmludGVsbGlqLmlkZS5wcm9qZWN0Vmlldy5QcmVzZW50YXRpb25EYXRhOworaW1wb3J0IGNvbS5pbnRlbGxpai5pZGUucHJvamVjdFZpZXcuUHJvamVjdFZpZXdOb2RlOworaW1wb3J0IGNvbS5pbnRlbGxpai5pZGUucHJvamVjdFZpZXcuVHJlZVN0cnVjdHVyZVByb3ZpZGVyOworaW1wb3J0IGNvbS5pbnRlbGxpai5pZGUucHJvamVjdFZpZXcuVmlld1NldHRpbmdzOworaW1wb3J0IGNvbS5pbnRlbGxpai5pZGUudXRpbC50cmVlVmlldy5BYnN0cmFjdFRyZWVOb2RlOworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLnV0aWwuTXVsdGlWYWx1ZXNNYXA7CitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkudmZzLlZpcnR1YWxGaWxlOworaW1wb3J0IGNvbS5pbnRlbGxpai5wc2kuUHNpRGlyZWN0b3J5OworaW1wb3J0IGNvbS5pbnRlbGxpai5wc2kuUHNpRWxlbWVudDsKK2ltcG9ydCBjb20uaW50ZWxsaWoucHNpLlBzaUZpbGU7CitpbXBvcnQgb3JnLmpldGJyYWlucy5hbm5vdGF0aW9ucy5Ob3ROdWxsOworCitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7CisKK2NsYXNzIFNhbWVOYW1lc0pvaW5lciBpbXBsZW1lbnRzIFRyZWVTdHJ1Y3R1cmVQcm92aWRlciB7CisgIEBPdmVycmlkZQorICBwdWJsaWMgQ29sbGVjdGlvbjxBYnN0cmFjdFRyZWVOb2RlPiBtb2RpZnkoQWJzdHJhY3RUcmVlTm9kZSBwYXJlbnQsIENvbGxlY3Rpb248QWJzdHJhY3RUcmVlTm9kZT4gY2hpbGRyZW4sIFZpZXdTZXR0aW5ncyBzZXR0aW5ncykgeworICAgIGlmIChwYXJlbnQgaW5zdGFuY2VvZiBKb2luZWROb2RlKSByZXR1cm4gY2hpbGRyZW47CisKKyAgICBBcnJheUxpc3Q8QWJzdHJhY3RUcmVlTm9kZT4gcmVzdWx0ID0gbmV3IEFycmF5TGlzdDxBYnN0cmFjdFRyZWVOb2RlPigpOworCisgICAgTXVsdGlWYWx1ZXNNYXA8T2JqZWN0LCBBYnN0cmFjdFRyZWVOb2RlPiBleGVjdXRlZCA9IG5ldyBNdWx0aVZhbHVlc01hcDxPYmplY3QsIEFic3RyYWN0VHJlZU5vZGU+KCk7CisgICAgZm9yIChJdGVyYXRvcjxBYnN0cmFjdFRyZWVOb2RlPiBpdGVyYXRvciA9IGNoaWxkcmVuLml0ZXJhdG9yKCk7IGl0ZXJhdG9yLmhhc05leHQoKTspIHsKKyAgICAgIFByb2plY3RWaWV3Tm9kZSB0cmVlTm9kZSA9IChQcm9qZWN0Vmlld05vZGUpaXRlcmF0b3IubmV4dCgpOworICAgICAgT2JqZWN0IG8gPSB0cmVlTm9kZS5nZXRWYWx1ZSgpOworICAgICAgaWYgKG8gaW5zdGFuY2VvZiBQc2lGaWxlKSB7CisgICAgICAgIFN0cmluZyBuYW1lID0gKChQc2lGaWxlKW8pLmdldFZpcnR1YWxGaWxlKCkuZ2V0TmFtZVdpdGhvdXRFeHRlbnNpb24oKTsKKyAgICAgICAgZXhlY3V0ZWQucHV0KG5hbWUsIHRyZWVOb2RlKTsKKyAgICAgIH0KKyAgICAgIGVsc2UgeworICAgICAgICBleGVjdXRlZC5wdXQobywgdHJlZU5vZGUpOworICAgICAgfQorICAgIH0KKworICAgIEl0ZXJhdG9yPE9iamVjdD4ga2V5cyA9IGV4ZWN1dGVkLmtleVNldCgpLml0ZXJhdG9yKCk7CisgICAgd2hpbGUgKGtleXMuaGFzTmV4dCgpKSB7CisgICAgICBPYmplY3QgZWFjaCA9IGtleXMubmV4dCgpOworICAgICAgQ29sbGVjdGlvbjxBYnN0cmFjdFRyZWVOb2RlPiBvYmplY3RzID0gZXhlY3V0ZWQuZ2V0KGVhY2gpOworICAgICAgaWYgKG9iamVjdHMuc2l6ZSgpID4gMSkgeworICAgICAgICByZXN1bHQuYWRkKG5ldyBKb2luZWROb2RlKG9iamVjdHMsIG5ldyBKb2luZWQoZmluZFBzaUZpbGVJbihvYmplY3RzKSkpKTsKKyAgICAgIH0KKyAgICAgIGVsc2UgaWYgKG9iamVjdHMuc2l6ZSgpID09IDEpIHsKKyAgICAgICAgcmVzdWx0LmFkZChvYmplY3RzLml0ZXJhdG9yKCkubmV4dCgpKTsKKyAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gcmVzdWx0OworICB9CisKKyAgQE92ZXJyaWRlCisgIHB1YmxpYyBPYmplY3QgZ2V0RGF0YShDb2xsZWN0aW9uPEFic3RyYWN0VHJlZU5vZGU+IHNlbGVjdGVkLCBTdHJpbmcgZGF0YU5hbWUpIHsKKyAgICByZXR1cm4gbnVsbDsKKyAgfQorCisgIHB1YmxpYyBQc2lFbGVtZW50IGdldFRvcExldmVsRWxlbWVudChmaW5hbCBQc2lFbGVtZW50IGVsZW1lbnQpIHsKKyAgICByZXR1cm4gbnVsbDsKKyAgfQorCisgIHByaXZhdGUgUHNpRmlsZSBmaW5kUHNpRmlsZUluKENvbGxlY3Rpb248QWJzdHJhY3RUcmVlTm9kZT4gb2JqZWN0cykgeworICAgIGZvciAoSXRlcmF0b3I8QWJzdHJhY3RUcmVlTm9kZT4gaXRlcmF0b3IgPSBvYmplY3RzLml0ZXJhdG9yKCk7IGl0ZXJhdG9yLmhhc05leHQoKTspIHsKKyAgICAgIEFic3RyYWN0VHJlZU5vZGUgdHJlZU5vZGUgPSBpdGVyYXRvci5uZXh0KCk7CisgICAgICBpZiAodHJlZU5vZGUuZ2V0VmFsdWUoKSBpbnN0YW5jZW9mIFBzaUZpbGUpIHJldHVybiAoUHNpRmlsZSl0cmVlTm9kZS5nZXRWYWx1ZSgpOworICAgIH0KKyAgICByZXR1cm4gbnVsbDsKKyAgfQorCisgIHByaXZhdGUgYm9vbGVhbiBoYXNFbGVtZW50V2l0aFRoZVNhbWVOYW1lKFBzaUZpbGUgZWxlbWVudCkgeworICAgIFBzaURpcmVjdG9yeSBwc2lEaXJlY3RvcnkgPSBlbGVtZW50LmdldFBhcmVudCgpOworICAgIFBzaUVsZW1lbnRbXSBjaGlsZHJlbiA9IHBzaURpcmVjdG9yeS5nZXRDaGlsZHJlbigpOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHsKKyAgICAgIFBzaUVsZW1lbnQgY2hpbGQgPSBjaGlsZHJlbltpXTsKKworICAgICAgaWYgKGNoaWxkICE9IGVsZW1lbnQgJiYgZWxlbWVudC5nZXRWaXJ0dWFsRmlsZSgpLmdldE5hbWVXaXRob3V0RXh0ZW5zaW9uKCkuZXF1YWxzKCgoUHNpRmlsZSljaGlsZCkuZ2V0VmlydHVhbEZpbGUoKS5nZXROYW1lV2l0aG91dEV4dGVuc2lvbigpKSl7CisgICAgICAgIHJldHVybiB0cnVlOworICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKKyAgfQorCisgIHByaXZhdGUgY2xhc3MgSm9pbmVkeworICAgIHByaXZhdGUgZmluYWwgU3RyaW5nIG15TmFtZTsKKyAgICBwcml2YXRlIGZpbmFsIFBzaUZpbGUgbXlGaWxlOworCisgICAgcHVibGljIEpvaW5lZChQc2lGaWxlIGZpbGUpIHsKKyAgICAgIG15RmlsZSA9IGZpbGU7CisgICAgICBteU5hbWUgPSBmaWxlLmdldE5hbWUoKTsKKyAgICB9CisKKyAgICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgeworICAgICAgcmV0dXJuIG15RmlsZS5nZXRWaXJ0dWFsRmlsZSgpLmdldE5hbWVXaXRob3V0RXh0ZW5zaW9uKCk7CisgICAgfQorCisgICAgcHVibGljIFBzaUZpbGUgZ2V0UHNpRmlsZSgpIHsKKyAgICAgIHJldHVybiBteUZpbGU7CisgICAgfQorCisgICAgcHVibGljIGJvb2xlYW4gZXF1YWxzKE9iamVjdCBvYmplY3QpIHsKKyAgICAgIGlmICghKG9iamVjdCBpbnN0YW5jZW9mIEpvaW5lZCkpIHJldHVybiBmYWxzZTsKKyAgICAgIHJldHVybiBteUZpbGUuZ2V0VmlydHVhbEZpbGUoKS5nZXROYW1lV2l0aG91dEV4dGVuc2lvbigpCisgICAgICAgIC5lcXVhbHMoKChKb2luZWQpb2JqZWN0KS5teUZpbGUuZ2V0VmlydHVhbEZpbGUoKS5nZXROYW1lV2l0aG91dEV4dGVuc2lvbigpKTsKKyAgICB9CisgIH0KKworICBwcml2YXRlIGNsYXNzIEpvaW5lZE5vZGUgZXh0ZW5kcyBQcm9qZWN0Vmlld05vZGU8Sm9pbmVkPnsKKyAgICBDb2xsZWN0aW9uPEFic3RyYWN0VHJlZU5vZGU+IG15Q2hpbGRyZW47CisKKyAgICBAT3ZlcnJpZGUKKyAgICBATm90TnVsbAorICAgIHB1YmxpYyBDb2xsZWN0aW9uPEFic3RyYWN0VHJlZU5vZGU+IGdldENoaWxkcmVuKCkgeworICAgICAgcmV0dXJuIG15Q2hpbGRyZW47CisgICAgfQorCisgICAgcHVibGljIEpvaW5lZE5vZGUoQ29sbGVjdGlvbjxBYnN0cmFjdFRyZWVOb2RlPiBjaGlsZHJlbiwgSm9pbmVkIGZvcm1GaWxlKSB7CisgICAgICBzdXBlcihudWxsLCBmb3JtRmlsZSwgbnVsbCk7CisgICAgICBteUNoaWxkcmVuID0gY2hpbGRyZW47CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIFN0cmluZyBnZXRUZXN0UHJlc2VudGF0aW9uKCkgeworICAgICAgcmV0dXJuIGdldFZhbHVlKCkudG9TdHJpbmcoKSArICIgam9pbmVkIjsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgYm9vbGVhbiBjb250YWlucyhATm90TnVsbCBWaXJ0dWFsRmlsZSBmaWxlKSB7CisgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIHZvaWQgdXBkYXRlKFByZXNlbnRhdGlvbkRhdGEgcHJlc2VudGF0aW9uKSB7CisgICAgfQorICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovcHJvamVjdFZpZXcvU3RydWN0dXJlVmlld1VwZGF0aW5nVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL3Byb2plY3RWaWV3L1N0cnVjdHVyZVZpZXdVcGRhdGluZ1Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NGI2MDdjCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL3Byb2plY3RWaWV3L1N0cnVjdHVyZVZpZXdVcGRhdGluZ1Rlc3QuamF2YQpAQCAtMCwwICsxLDI1MiBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNCBKZXRCcmFpbnMgcy5yLm8uIEFsbCAgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OiAKKyAqCisgKiAtUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKgorICogLVJlZGlzdHJpYnV0aW9uIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWN0IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEpldEJyYWlucyBvciBJbnRlbGxpSiBJREVBCisgKiBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgcHJvdmlkZWQgIkFTIElTLCIgd2l0aG91dCBhIHdhcnJhbnR5IG9mIGFueSBraW5kLiBBTEwKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBDT05ESVRJT05TLCBSRVBSRVNFTlRBVElPTlMgQU5EIFdBUlJBTlRJRVMsIElOQ0xVRElORworICogQU5ZIElNUExJRUQgV0FSUkFOVFkgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogT1IgTk9OLUlORlJJTkdFTUVOVCwgQVJFIEhFUkVCWSBFWENMVURFRC4gSkVUQlJBSU5TIEFORCBJVFMgTElDRU5TT1JTIFNIQUxMIE5PVAorICogQkUgTElBQkxFIEZPUiBBTlkgREFNQUdFUyBPUiBMSUFCSUxJVElFUyBTVUZGRVJFRCBCWSBMSUNFTlNFRSBBUyBBIFJFU1VMVAorICogT0YgT1IgUkVMQVRJTkcgVE8gVVNFLCBNT0RJRklDQVRJT04gT1IgRElTVFJJQlVUSU9OIE9GIFRIRSBTT0ZUV0FSRSBPUiBJVFMKKyAqIERFUklWQVRJVkVTLiBJTiBOTyBFVkVOVCBXSUxMIEpFVEJSQUlOUyBPUiBJVFMgTElDRU5TT1JTIEJFIExJQUJMRSBGT1IgQU5ZIExPU1QKKyAqIFJFVkVOVUUsIFBST0ZJVCBPUiBEQVRBLCBPUiBGT1IgRElSRUNULCBJTkRJUkVDVCwgU1BFQ0lBTCwgQ09OU0VRVUVOVElBTCwKKyAqIElOQ0lERU5UQUwgT1IgUFVOSVRJVkUgREFNQUdFUywgSE9XRVZFUiBDQVVTRUQgQU5EIFJFR0FSRExFU1MgT0YgVEhFIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBBUklTSU5HIE9VVCBPRiBUSEUgVVNFIE9GIE9SIElOQUJJTElUWSBUTyBVU0UgU09GVFdBUkUsIEVWRU4KKyAqIElGIEpFVEJSQUlOUyBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuCisgKgorICovCitwYWNrYWdlIGNvbS5pbnRlbGxpai5wcm9qZWN0VmlldzsKKworaW1wb3J0IGNvbS5pbnRlbGxpai5KYXZhVGVzdFV0aWw7CitpbXBvcnQgY29tLmludGVsbGlqLmlkZS5zdHJ1Y3R1cmVWaWV3Lm5ld1N0cnVjdHVyZVZpZXcuU3RydWN0dXJlVmlld0NvbXBvbmVudDsKK2ltcG9ydCBjb20uaW50ZWxsaWouaWRlLnV0aWwuSW5oZXJpdGVkTWVtYmVyc05vZGVQcm92aWRlcjsKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS5hcHBsaWNhdGlvbi5BcHBsaWNhdGlvbk1hbmFnZXI7CitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkuY29tbWFuZC5Db21tYW5kUHJvY2Vzc29yOworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLmNvbW1hbmQuV3JpdGVDb21tYW5kQWN0aW9uOworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLmVkaXRvci5Eb2N1bWVudDsKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS5maWxlRWRpdG9yLkZpbGVFZGl0b3I7CitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkuZmlsZUVkaXRvci5GaWxlRWRpdG9yTWFuYWdlcjsKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS51dGlsLkRpc3Bvc2VyOworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLnZmcy5WaXJ0dWFsRmlsZTsKK2ltcG9ydCBjb20uaW50ZWxsaWoucHNpLkphdmFEaXJlY3RvcnlTZXJ2aWNlOworaW1wb3J0IGNvbS5pbnRlbGxpai5wc2kuUHNpQ2xhc3M7CitpbXBvcnQgY29tLmludGVsbGlqLnBzaS5Qc2lEb2N1bWVudE1hbmFnZXI7CitpbXBvcnQgY29tLmludGVsbGlqLnBzaS5Qc2lGaWVsZDsKK2ltcG9ydCBjb20uaW50ZWxsaWoudGVzdEZyYW1ld29yay5QbGF0Zm9ybVRlc3RVdGlsOworaW1wb3J0IGNvbS5pbnRlbGxpai50ZXN0RnJhbWV3b3JrLlRlc3RTb3VyY2VCYXNlZFRlc3RDYXNlOworaW1wb3J0IGNvbS5pbnRlbGxpai51dGlsLkluY29ycmVjdE9wZXJhdGlvbkV4Y2VwdGlvbjsKKworaW1wb3J0IGphdmF4LnN3aW5nLio7CisKK3B1YmxpYyBjbGFzcyBTdHJ1Y3R1cmVWaWV3VXBkYXRpbmdUZXN0IGV4dGVuZHMgVGVzdFNvdXJjZUJhc2VkVGVzdENhc2UgeworICBAT3ZlcnJpZGUKKyAgcHJvdGVjdGVkIFN0cmluZyBnZXRUZXN0UGF0aCgpIHsKKyAgICByZXR1cm4gInN0cnVjdHVyZVZpZXciOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEphdmFDbGFzc1N0cnVjdHVyZSgpIHRocm93cyBFeGNlcHRpb24geworICAgIGZpbmFsIFBzaUNsYXNzIHBzaUNsYXNzID0gSmF2YURpcmVjdG9yeVNlcnZpY2UuZ2V0SW5zdGFuY2UoKS5nZXRDbGFzc2VzKGdldFBhY2thZ2VEaXJlY3RvcnkoImNvbS9wYWNrYWdlMSIpKVswXTsKKyAgICBmaW5hbCBWaXJ0dWFsRmlsZSB2aXJ0dWFsRmlsZSA9IHBzaUNsYXNzLmdldENvbnRhaW5pbmdGaWxlKCkuZ2V0VmlydHVhbEZpbGUoKTsKKyAgICBmaW5hbCBGaWxlRWRpdG9yTWFuYWdlciBmaWxlRWRpdG9yTWFuYWdlciA9IEZpbGVFZGl0b3JNYW5hZ2VyLmdldEluc3RhbmNlKG15UHJvamVjdCk7CisgICAgRmlsZUVkaXRvcltdIGZpbGVFZGl0b3JzID0gZmlsZUVkaXRvck1hbmFnZXIub3BlbkZpbGUodmlydHVhbEZpbGUsIGZhbHNlKTsKKyAgICBmaW5hbCBGaWxlRWRpdG9yIGZpbGVFZGl0b3IgPSBmaWxlRWRpdG9yc1swXTsKKyAgICB0cnkgeworICAgICAgZmluYWwgU3RydWN0dXJlVmlld0NvbXBvbmVudCBzdHJ1Y3R1cmVWaWV3Q29tcG9uZW50ID0KKyAgICAgICAgKFN0cnVjdHVyZVZpZXdDb21wb25lbnQpZmlsZUVkaXRvci5nZXRTdHJ1Y3R1cmVWaWV3QnVpbGRlcigpLmNyZWF0ZVN0cnVjdHVyZVZpZXcoZmlsZUVkaXRvciwgbXlQcm9qZWN0KTsKKyAgICAgIGZpbmFsIERvY3VtZW50IGRvY3VtZW50ID0gUHNpRG9jdW1lbnRNYW5hZ2VyLmdldEluc3RhbmNlKG15UHJvamVjdCkuZ2V0RG9jdW1lbnQocHNpQ2xhc3MuZ2V0Q29udGFpbmluZ0ZpbGUoKSk7CisgICAgICBzdHJ1Y3R1cmVWaWV3Q29tcG9uZW50LnNldEFjdGlvbkFjdGl2ZShJbmhlcml0ZWRNZW1iZXJzTm9kZVByb3ZpZGVyLklELCB0cnVlKTsKKyAgICAgIFBsYXRmb3JtVGVzdFV0aWwuYXNzZXJ0VHJlZUVxdWFsKHN0cnVjdHVyZVZpZXdDb21wb25lbnQuZ2V0VHJlZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi1DbGFzczEuamF2YVxuIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIC1DbGFzczFcbiIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgZ2V0VmFsdWUoKTogaW50XG4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgIGdldENsYXNzKCk6IENsYXNzPD8gZXh0ZW5kcyBPYmplY3Q+XG4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgIGhhc2hDb2RlKCk6IGludFxuIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICBlcXVhbHMoT2JqZWN0KTogYm9vbGVhblxuIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICBjbG9uZSgpOiBPYmplY3RcbiIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgdG9TdHJpbmcoKTogU3RyaW5nXG4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgIG5vdGlmeSgpOiB2b2lkXG4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgIG5vdGlmeUFsbCgpOiB2b2lkXG4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgIHdhaXQobG9uZyk6IHZvaWRcbiIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgd2FpdChsb25nLCBpbnQpOiB2b2lkXG4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgIHdhaXQoKTogdm9pZFxuIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICBmaW5hbGl6ZSgpOiB2b2lkXG4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgIG15RmllbGQxOiBib29sZWFuXG4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgIG15RmllbGQyOiBib29sZWFuXG4iKTsKKworICAgICAgbmV3IFdyaXRlQ29tbWFuZEFjdGlvbi5TaW1wbGUoZ2V0UHJvamVjdCgpKSB7CisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwcm90ZWN0ZWQgdm9pZCBydW4oKSB0aHJvd3MgVGhyb3dhYmxlIHsKKyAgICAgICAgICBmaW5hbCBpbnQgb2Zmc2V0ID0gZG9jdW1lbnQuZ2V0TGluZVN0YXJ0T2Zmc2V0KDUpOworICAgICAgICAgIGRvY3VtZW50Lmluc2VydFN0cmluZyhvZmZzZXQsICIgICAgYm9vbGVhbiBteU5ld0ZpZWxkID0gZmFsc2U7XG4iKTsKKyAgICAgICAgfQorICAgICAgfS5leGVjdXRlKCkudGhyb3dFeGNlcHRpb24oKTsKKworCisgICAgICBQc2lEb2N1bWVudE1hbmFnZXIuZ2V0SW5zdGFuY2UobXlQcm9qZWN0KS5jb21taXREb2N1bWVudChkb2N1bWVudCk7CisKKyAgICAgIFBsYXRmb3JtVGVzdFV0aWwud2FpdEZvckFsYXJtKDYwMCk7CisKKyAgICAgIC8vVHJlZVV0aWwuZXhwYW5kKHN0cnVjdHVyZVZpZXdDb21wb25lbnQuZ2V0VHJlZSgpLCAzKTsKKworICAgICAgUGxhdGZvcm1UZXN0VXRpbC5hc3NlcnRUcmVlRXF1YWwoc3RydWN0dXJlVmlld0NvbXBvbmVudC5nZXRUcmVlKCksICItQ2xhc3MxLmphdmFcbiIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgLUNsYXNzMVxuIiArICIgIGdldFZhbHVlKCk6IGludFxuIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgZ2V0Q2xhc3MoKTogQ2xhc3M8PyBleHRlbmRzIE9iamVjdD5cbiIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgIGhhc2hDb2RlKCk6IGludFxuIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgZXF1YWxzKE9iamVjdCk6IGJvb2xlYW5cbiIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgIGNsb25lKCk6IE9iamVjdFxuIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgdG9TdHJpbmcoKTogU3RyaW5nXG4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICBub3RpZnkoKTogdm9pZFxuIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgbm90aWZ5QWxsKCk6IHZvaWRcbiIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgIHdhaXQobG9uZyk6IHZvaWRcbiIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgIHdhaXQobG9uZywgaW50KTogdm9pZFxuIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgd2FpdCgpOiB2b2lkXG4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICBmaW5hbGl6ZSgpOiB2b2lkXG4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICBteUZpZWxkMTogYm9vbGVhblxuIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgbXlGaWVsZDI6IGJvb2xlYW5cbiIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgIG15TmV3RmllbGQ6IGJvb2xlYW4gPSBmYWxzZVxuIik7CisKKyAgICAgIERpc3Bvc2VyLmRpc3Bvc2Uoc3RydWN0dXJlVmlld0NvbXBvbmVudCk7CisKKyAgICB9CisgICAgZmluYWxseSB7CisgICAgICBmaWxlRWRpdG9yTWFuYWdlci5jbG9zZUZpbGUodmlydHVhbEZpbGUpOworICAgIH0KKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RTaG93Q2xhc3NNZW1iZXJzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZmluYWwgUHNpQ2xhc3MgcHNpQ2xhc3MgPSBKYXZhRGlyZWN0b3J5U2VydmljZS5nZXRJbnN0YW5jZSgpLmdldENsYXNzZXMoZ2V0UGFja2FnZURpcmVjdG9yeSgiY29tL3BhY2thZ2UxIikpWzBdOworICAgIGZpbmFsIFZpcnR1YWxGaWxlIHZpcnR1YWxGaWxlID0gcHNpQ2xhc3MuZ2V0Q29udGFpbmluZ0ZpbGUoKS5nZXRWaXJ0dWFsRmlsZSgpOworICAgIGZpbmFsIEZpbGVFZGl0b3JNYW5hZ2VyIGZpbGVFZGl0b3JNYW5hZ2VyID0gRmlsZUVkaXRvck1hbmFnZXIuZ2V0SW5zdGFuY2UobXlQcm9qZWN0KTsKKyAgICBGaWxlRWRpdG9yW10gZmlsZUVkaXRvcnMgPSBmaWxlRWRpdG9yTWFuYWdlci5vcGVuRmlsZSh2aXJ0dWFsRmlsZSwgZmFsc2UpOworICAgIGZpbmFsIEZpbGVFZGl0b3IgZmlsZUVkaXRvciA9IGZpbGVFZGl0b3JzWzBdOworICAgIGZpbmFsIFN0cnVjdHVyZVZpZXdDb21wb25lbnQgc3RydWN0dXJlVmlld0NvbXBvbmVudCA9CisgICAgICAoU3RydWN0dXJlVmlld0NvbXBvbmVudClmaWxlRWRpdG9yLmdldFN0cnVjdHVyZVZpZXdCdWlsZGVyKCkuY3JlYXRlU3RydWN0dXJlVmlldyhmaWxlRWRpdG9yLCBteVByb2plY3QpOworICAgIHRyeSB7CisgICAgICBQbGF0Zm9ybVRlc3RVdGlsLmFzc2VydFRyZWVFcXVhbChzdHJ1Y3R1cmVWaWV3Q29tcG9uZW50LmdldFRyZWUoKSwgIi1DbGFzczIuamF2YVxuIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAtQ2xhc3MyXG4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICArSW5uZXJDbGFzczFcbiIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgICtJbm5lckNsYXNzMlxuIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgZ2V0VmFsdWUoKTogaW50XG4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICBteUZpZWxkMTogYm9vbGVhblxuIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgbXlGaWVsZDI6IGJvb2xlYW5cbiIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgIG15RmllbGQzOiBib29sZWFuXG4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICBteUZpZWxkNDogYm9vbGVhblxuIik7CisKKyAgICAgIGZpbmFsIFBzaUZpZWxkIGlubmVyQ2xhc3NGaWVsZCA9IHBzaUNsYXNzLmdldElubmVyQ2xhc3NlcygpWzBdLmdldEZpZWxkcygpWzBdOworCisgICAgICBzdHJ1Y3R1cmVWaWV3Q29tcG9uZW50LnNlbGVjdChpbm5lckNsYXNzRmllbGQsIHRydWUpOworCisgICAgICBQbGF0Zm9ybVRlc3RVdGlsLmFzc2VydFRyZWVFcXVhbChzdHJ1Y3R1cmVWaWV3Q29tcG9uZW50LmdldFRyZWUoKSwgIi1DbGFzczIuamF2YVxuIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAtQ2xhc3MyXG4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICAtSW5uZXJDbGFzczFcbiIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgICArSW5uZXJDbGFzczEyXG4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgbXlJbm5lckNsYXNzRmllbGQ6IGludFxuIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgK0lubmVyQ2xhc3MyXG4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICBnZXRWYWx1ZSgpOiBpbnRcbiIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgIG15RmllbGQxOiBib29sZWFuXG4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICBteUZpZWxkMjogYm9vbGVhblxuIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgbXlGaWVsZDM6IGJvb2xlYW5cbiIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgIG15RmllbGQ0OiBib29sZWFuXG4iKTsKKworICAgICAgQ29tbWFuZFByb2Nlc3Nvci5nZXRJbnN0YW5jZSgpLmV4ZWN1dGVDb21tYW5kKG15UHJvamVjdCwgbmV3IFJ1bm5hYmxlKCkgeworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIHZvaWQgcnVuKCkgeworCisgICAgICAgICAgQXBwbGljYXRpb25NYW5hZ2VyLmdldEFwcGxpY2F0aW9uKCkucnVuV3JpdGVBY3Rpb24obmV3IFJ1bm5hYmxlKCkgeworICAgICAgICAgICAgQE92ZXJyaWRlCisgICAgICAgICAgICBwdWJsaWMgdm9pZCBydW4oKSB7CisgICAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgaW5uZXJDbGFzc0ZpZWxkLmRlbGV0ZSgpOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIGNhdGNoIChJbmNvcnJlY3RPcGVyYXRpb25FeGNlcHRpb24gZSkgeworICAgICAgICAgICAgICAgIGZhaWwoZS5nZXRMb2NhbGl6ZWRNZXNzYWdlKCkpOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgfSk7CisgICAgICAgIH0KKyAgICAgIH0sIG51bGwsIG51bGwpOworCisgICAgICBQbGF0Zm9ybVRlc3RVdGlsLndhaXRGb3JBbGFybSg2MDApOworCisgICAgICBQbGF0Zm9ybVRlc3RVdGlsLmFzc2VydFRyZWVFcXVhbChzdHJ1Y3R1cmVWaWV3Q29tcG9uZW50LmdldFRyZWUoKSwgIi1DbGFzczIuamF2YVxuIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAtQ2xhc3MyXG4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICAtSW5uZXJDbGFzczFcbiIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgICArSW5uZXJDbGFzczEyXG4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICArSW5uZXJDbGFzczJcbiIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgIGdldFZhbHVlKCk6IGludFxuIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgbXlGaWVsZDE6IGJvb2xlYW5cbiIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgIG15RmllbGQyOiBib29sZWFuXG4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICBteUZpZWxkMzogYm9vbGVhblxuIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgbXlGaWVsZDQ6IGJvb2xlYW5cbiIpOworCisgICAgfQorICAgIGZpbmFsbHkgeworICAgICAgRGlzcG9zZXIuZGlzcG9zZShzdHJ1Y3R1cmVWaWV3Q29tcG9uZW50KTsKKyAgICAgIGZpbGVFZGl0b3JNYW5hZ2VyLmNsb3NlRmlsZSh2aXJ0dWFsRmlsZSk7CisgICAgfQorICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEV4cGFuZEVsZW1lbnRXaXRoRXhpdGluZ05hbWUoKSB0aHJvd3MgSW50ZXJydXB0ZWRFeGNlcHRpb24geworCisgICAgZmluYWwgVmlydHVhbEZpbGUgeG1sVmlydHVhbEZpbGUgPSBnZXRDb250ZW50Um9vdCgpLmZpbmRGaWxlQnlSZWxhdGl2ZVBhdGgoInRlc3QueG1sIik7CisgICAgZmluYWwgRmlsZUVkaXRvck1hbmFnZXIgZmlsZUVkaXRvck1hbmFnZXIgPSBGaWxlRWRpdG9yTWFuYWdlci5nZXRJbnN0YW5jZShteVByb2plY3QpOworICAgIEZpbGVFZGl0b3JbXSBmaWxlRWRpdG9ycyA9IGZpbGVFZGl0b3JNYW5hZ2VyLm9wZW5GaWxlKHhtbFZpcnR1YWxGaWxlLCBmYWxzZSk7CisgICAgZmluYWwgRmlsZUVkaXRvciBmaWxlRWRpdG9yID0gZmlsZUVkaXRvcnNbMF07CisgICAgdHJ5IHsKKyAgICAgIGZpbmFsIFN0cnVjdHVyZVZpZXdDb21wb25lbnQgc3RydWN0dXJlVmlld0NvbXBvbmVudCA9CisgICAgICAgIChTdHJ1Y3R1cmVWaWV3Q29tcG9uZW50KWZpbGVFZGl0b3IuZ2V0U3RydWN0dXJlVmlld0J1aWxkZXIoKS5jcmVhdGVTdHJ1Y3R1cmVWaWV3KGZpbGVFZGl0b3IsIG15UHJvamVjdCk7CisKKyAgICAgIGZpbmFsIEpUcmVlIHRyZWUgPSBzdHJ1Y3R1cmVWaWV3Q29tcG9uZW50LmdldFRyZWUoKTsKKyAgICAgIFBsYXRmb3JtVGVzdFV0aWwuYXNzZXJ0VHJlZUVxdWFsKHRyZWUsICItdGVzdC54bWxcbiIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAtdGVzdFxuIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICArbGV2ZWwxXG4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgICtsZXZlbDFcbiIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgK2xldmVsMVxuIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICArbGV2ZWwxXG4iKTsKKworICAgICAgdHJlZS5leHBhbmRQYXRoKHRyZWUuZ2V0UGF0aEZvclJvdygzKSk7CisKKyAgICAgIFBsYXRmb3JtVGVzdFV0aWwud2FpdEZvckFsYXJtKDYwMCk7CisKKworICAgICAgUGxhdGZvcm1UZXN0VXRpbC5hc3NlcnRUcmVlRXF1YWwodHJlZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItdGVzdC54bWxcbiIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAtdGVzdFxuIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICArbGV2ZWwxXG4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgIC1sZXZlbDFcbiIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgICtsZXZlbDJcbiIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgK2xldmVsMVxuIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICArbGV2ZWwxXG4iKTsKKworICAgICAgRGlzcG9zZXIuZGlzcG9zZShzdHJ1Y3R1cmVWaWV3Q29tcG9uZW50KTsKKyAgICB9CisgICAgZmluYWxseSB7CisgICAgICBmaWxlRWRpdG9yTWFuYWdlci5jbG9zZUZpbGUoeG1sVmlydHVhbEZpbGUpOworICAgIH0KKworICB9CisKKyAgQE92ZXJyaWRlCisgIHByb3RlY3RlZCBTdHJpbmcgZ2V0VGVzdERhdGFQYXRoKCkgeworICAgIHJldHVybiBKYXZhVGVzdFV0aWwuZ2V0SmF2YVRlc3REYXRhUGF0aCgpOworICB9CisKKyAgQE92ZXJyaWRlCisgIHByb3RlY3RlZCBib29sZWFuIGlzUnVuSW5Xcml0ZUFjdGlvbigpIHsKKyAgICByZXR1cm4gZmFsc2U7CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9wcm9qZWN0Vmlldy9Ub0RvVHJlZVN0cnVjdHVyZVRlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9wcm9qZWN0Vmlldy9Ub0RvVHJlZVN0cnVjdHVyZVRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZDY5NzY5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL3Byb2plY3RWaWV3L1RvRG9UcmVlU3RydWN0dXJlVGVzdC5qYXZhCkBAIC0wLDAgKzEsMTExIEBACitwYWNrYWdlIGNvbS5pbnRlbGxpai5wcm9qZWN0VmlldzsKKworaW1wb3J0IGNvbS5pbnRlbGxpai5pZGUudG9kby5BbGxUb2Rvc1RyZWVCdWlsZGVyOworaW1wb3J0IGNvbS5pbnRlbGxpai5pZGUudG9kby5DdXJyZW50RmlsZVRvZG9zVHJlZUJ1aWxkZXI7CitpbXBvcnQgY29tLmludGVsbGlqLmlkZS50b2RvLlRvZG9UcmVlU3RydWN0dXJlOworaW1wb3J0IGNvbS5pbnRlbGxpai5pZGUudG9kby5ub2Rlcy5Ub2RvSXRlbU5vZGU7CitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkudWkuUXVlcnlhYmxlOworaW1wb3J0IGNvbS5pbnRlbGxpai50ZXN0RnJhbWV3b3JrLklkZWFUZXN0VXRpbDsKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS51dGlsLkRpc3Bvc2VyOworaW1wb3J0IGNvbS5pbnRlbGxpai51aS50cmVlU3RydWN0dXJlLlRyZWU7CitpbXBvcnQgY29tLmludGVsbGlqLnV0aWwudWkudHJlZS5UcmVlVXRpbDsKKworaW1wb3J0IGphdmF4LnN3aW5nLio7CitpbXBvcnQgamF2YXguc3dpbmcudHJlZS5EZWZhdWx0TXV0YWJsZVRyZWVOb2RlOworaW1wb3J0IGphdmF4LnN3aW5nLnRyZWUuRGVmYXVsdFRyZWVNb2RlbDsKKworcHVibGljIGNsYXNzIFRvRG9UcmVlU3RydWN0dXJlVGVzdCBleHRlbmRzIEJhc2VQcm9qZWN0Vmlld1Rlc3RDYXNlIHsKKworICBAT3ZlcnJpZGUKKyAgcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBzdXBlci5zZXRVcCgpOworICAgIG15UHJpbnRJbmZvID0gbmV3IFF1ZXJ5YWJsZS5QcmludEluZm8obmV3IFN0cmluZ1tdIHsiY2xhc3NOYW1lIiwgImZpbGVOYW1lIiwgImZpZWxkTmFtZSIsICJtZXRob2ROYW1lIiwgInBhY2thZ2VOYW1lIn0sIG5ldyBTdHJpbmdbXSB7InRvRG9GaWxlQ291bnQiLCAidG9Eb0l0ZW1Db3VudCJ9KTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RUb0RvMSgpIHRocm93cyBFeGNlcHRpb24geworICAgIEFsbFRvZG9zVHJlZUJ1aWxkZXIgYWxsID0gbmV3IEFsbFRvZG9zVHJlZUJ1aWxkZXIobmV3IFRyZWUoKSwgbmV3IERlZmF1bHRUcmVlTW9kZWwobmV3IERlZmF1bHRNdXRhYmxlVHJlZU5vZGUoKSksIG15UHJvamVjdCk7CisgICAgYWxsLmluaXQoKTsKKworICAgIG15U3RydWN0dXJlID0gYWxsLmdldFRyZWVTdHJ1Y3R1cmUoKTsKKyAgICAoKFRvZG9UcmVlU3RydWN0dXJlKW15U3RydWN0dXJlKS5zZXRGbGF0dGVuUGFja2FnZXModHJ1ZSk7CisgICAgYXNzZXJ0U3RydWN0dXJlRXF1YWwoIlJvb3RcbiIgKworICAgICAgICAgICAgICAgICAgICAgICAgICIgU3VtbWFyeVxuIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgIiAgcGFja2FnZTIgdG9Eb0ZpbGVDb3VudD0xLHRvRG9JdGVtQ291bnQ9MlxuIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgIiAgIEphdmFDbGFzcy5qYXZhXG4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAiICAgIEl0ZW06ICg2Miw3OClcbiIgKworICAgICAgICAgICAgICAgICAgICAgICAgICIgICAgSXRlbTogKDE0NSwxNjIpXG4iLCBudWxsKTsKKworICAgIGNoZWNrT2NjdXJhbmNlcyhhbGwsIG5ldyBTdHJpbmdbXXsiSXRlbTogKDYyLDc4KSIsICJJdGVtOiAoMTQ1LDE2MikifSk7CisgICAgRGlzcG9zZXIuZGlzcG9zZShhbGwpOworIH0KKworICAvL3RvZG8ga2lyaWxsaworICBwdWJsaWMgdm9pZCB0ZXN0VG9EbygpIHRocm93cyBFeGNlcHRpb24geworICAgIEFsbFRvZG9zVHJlZUJ1aWxkZXIgYWxsID0gbmV3IEFsbFRvZG9zVHJlZUJ1aWxkZXIobmV3IFRyZWUoKSwgbmV3IERlZmF1bHRUcmVlTW9kZWwobmV3IERlZmF1bHRNdXRhYmxlVHJlZU5vZGUoKSksIG15UHJvamVjdCk7CisgICAgYWxsLmluaXQoKTsKKworICAgIG15U3RydWN0dXJlID0gYWxsLmdldFRyZWVTdHJ1Y3R1cmUoKTsKKyAgICBhc3NlcnRTdHJ1Y3R1cmVFcXVhbCgiUm9vdFxuIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgIiBTdW1tYXJ5XG4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAiICB0b0RvXG4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAiICAgeG1sRmlsZS54bWxcbiIrCisgICAgICAgICAgICAgICAgICAgICAgICAgIiAgICBJdGVtOiAoMTIsMTYpXG4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAiICBwYWNrYWdlMSB0b0RvRmlsZUNvdW50PTIsdG9Eb0l0ZW1Db3VudD00XG4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAiICAgcGFja2FnZTIgdG9Eb0ZpbGVDb3VudD0xLHRvRG9JdGVtQ291bnQ9MlxuIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgIiAgICBKYXZhQ2xhc3MuamF2YVxuIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgIiAgICAgSXRlbTogKDYyLDc4KVxuIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgIiAgICAgSXRlbTogKDE0NSwxNjIpXG4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAiICAgSmF2YUNsYXNzLmphdmFcbiIgKworICAgICAgICAgICAgICAgICAgICAgICAgICIgICAgSXRlbTogKDUyLDY4KVxuIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgIiAgICBJdGVtOiAoMTM0LDE1MSlcbiIgKworICAgICAgICAgICAgICAgICAgICAgICAgICIgIHBhY2thZ2UzIHRvRG9GaWxlQ291bnQ9MSx0b0RvSXRlbUNvdW50PTJcbiIgKworICAgICAgICAgICAgICAgICAgICAgICAgICIgICBKYXZhQ2xhc3MuamF2YVxuIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgIiAgICBJdGVtOiAoNTMsNjkpXG4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAiICAgIEl0ZW06ICgxMzYsMTUzKVxuIiwgbnVsbCk7CisKKyAgICBjaGVja09jY3VyYW5jZXMoYWxsLCBuZXcgU3RyaW5nW117Ikl0ZW06ICgxMiwxNikiLCJJdGVtOiAoNjIsNzgpIiwgIkl0ZW06ICgxNDUsMTYyKSIsICJJdGVtOiAoNTIsNjgpIiwgIkl0ZW06ICgxMzQsMTUxKSIsCisgICAgIkl0ZW06ICg1Myw2OSkiLCAiSXRlbTogKDEzNiwxNTMpIn0pOworCisKKyAgICBmaW5hbCBEZWZhdWx0VHJlZU1vZGVsIHRyZWVNb2RlbCA9IG5ldyBEZWZhdWx0VHJlZU1vZGVsKG5ldyBEZWZhdWx0TXV0YWJsZVRyZWVOb2RlKCkpOworICAgIGZpbmFsIEpUcmVlIGN1cnJlbnRGaWxlVHJlZSA9IG5ldyBUcmVlKHRyZWVNb2RlbCk7CisgICAgQ3VycmVudEZpbGVUb2Rvc1RyZWVCdWlsZGVyIGJ1aWxkZXIgPSBuZXcgQ3VycmVudEZpbGVUb2Rvc1RyZWVCdWlsZGVyKGN1cnJlbnRGaWxlVHJlZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJlZU1vZGVsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBteVByb2plY3QpOworCisgICAgYnVpbGRlci5pbml0KCk7CisgICAgYnVpbGRlci5zZXRGaWxlKGdldFNyY0RpcmVjdG9yeSgpLmZpbmRTdWJkaXJlY3RvcnkoInBhY2thZ2UxIikuZmluZEZpbGUoIkphdmFDbGFzcy5qYXZhIikpOworICAgIGJ1aWxkZXIudXBkYXRlRnJvbVJvb3QoKTsKKyAgICBteVN0cnVjdHVyZSA9IGJ1aWxkZXIuZ2V0VHJlZVN0cnVjdHVyZSgpOworICAgIGFzc2VydFN0cnVjdHVyZUVxdWFsKCJKYXZhQ2xhc3MuamF2YVxuIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgIiBKYXZhQ2xhc3MuamF2YVxuIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgIiAgSXRlbTogKDUyLDY4KVxuIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgIiAgSXRlbTogKDEzNCwxNTEpXG4iLCBudWxsKTsKKworCisgICAgRGlzcG9zZXIuZGlzcG9zZShidWlsZGVyKTsKKyAgICBEaXNwb3Nlci5kaXNwb3NlKGFsbCk7CisgIH0KKworICBwcml2YXRlIHZvaWQgY2hlY2tPY2N1cmFuY2VzKGZpbmFsIEFsbFRvZG9zVHJlZUJ1aWxkZXIgYWxsLCBmaW5hbCBTdHJpbmdbXSBzdHJpbmdzKSB7CisgICAgVG9kb0l0ZW1Ob2RlIGN1cnJlbnQgPSBhbGwuZ2V0Rmlyc3RQb2ludGVyRm9yRWxlbWVudChteVN0cnVjdHVyZS5nZXRSb290RWxlbWVudCgpKTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IHN0cmluZ3MubGVuZ3RoOyBpKyspIHsKKyAgICAgIFN0cmluZyBzdHJpbmcgPSBzdHJpbmdzW2ldOworICAgICAgYXNzZXJ0Tm90TnVsbChjdXJyZW50KTsKKyAgICAgIGFzc2VydEVxdWFscyhzdHJpbmcsICBjdXJyZW50LmdldFRlc3RQcmVzZW50YXRpb24oKSk7CisgICAgICBjdXJyZW50ID0gYWxsLmdldE5leHRQb2ludGVyKGN1cnJlbnQpOworICAgIH0KKworICAgIGFzc2VydE51bGwoY3VycmVudCk7CisKKyAgICBjdXJyZW50ID0gYWxsLmdldExhc3RQb2ludGVyRm9yRWxlbWVudChteVN0cnVjdHVyZS5nZXRSb290RWxlbWVudCgpKTsKKyAgICBmb3IgKGludCBpID0gc3RyaW5ncy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkgeworICAgICAgU3RyaW5nIHN0cmluZyA9IHN0cmluZ3NbaV07CisgICAgICBhc3NlcnROb3ROdWxsKGN1cnJlbnQpOworICAgICAgYXNzZXJ0RXF1YWxzKHN0cmluZywgY3VycmVudC5nZXRUZXN0UHJlc2VudGF0aW9uKCkpOworICAgICAgY3VycmVudCA9IGFsbC5nZXRQcmV2aW91c1BvaW50ZXIoY3VycmVudCk7CisgICAgfQorICAgIGFzc2VydE51bGwoY3VycmVudCk7CisgIH0KKworfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL3BzaS9BZGRDbGFzc1RvRmlsZVRlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9wc2kvQWRkQ2xhc3NUb0ZpbGVUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjQxZWZkNQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9wc2kvQWRkQ2xhc3NUb0ZpbGVUZXN0LmphdmEKQEAgLTAsMCArMSw1NyBAQAorLyoKKyAqIENvcHlyaWdodCAyMDAwLTIwMTIgSmV0QnJhaW5zIHMuci5vLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KK3BhY2thZ2UgY29tLmludGVsbGlqLnBzaTsKKworaW1wb3J0IGNvbS5pbnRlbGxpai5pZGUuaGlnaGxpZ2h0ZXIuSmF2YUZpbGVUeXBlOworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLmVkaXRvci5Eb2N1bWVudDsKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS5maWxlRWRpdG9yLkZpbGVEb2N1bWVudE1hbmFnZXI7CitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkuZmlsZUVkaXRvci5pbXBsLkxvYWRUZXh0VXRpbDsKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS52ZnMuVmlydHVhbEZpbGU7CitpbXBvcnQgY29tLmludGVsbGlqLnRlc3RGcmFtZXdvcmsuUGxhdGZvcm1UZXN0Q2FzZTsKK2ltcG9ydCBjb20uaW50ZWxsaWoudGVzdEZyYW1ld29yay5Qc2lUZXN0Q2FzZTsKK2ltcG9ydCBjb20uaW50ZWxsaWoudGVzdEZyYW1ld29yay5Qc2lUZXN0VXRpbDsKKworQFBsYXRmb3JtVGVzdENhc2UuV3JhcEluQ29tbWFuZAorcHVibGljIGNsYXNzIEFkZENsYXNzVG9GaWxlVGVzdCBleHRlbmRzIFBzaVRlc3RDYXNleworICBwdWJsaWMgdm9pZCB0ZXN0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgVmlydHVhbEZpbGUgcm9vdCA9IFBzaVRlc3RVdGlsLmNyZWF0ZVRlc3RQcm9qZWN0U3RydWN0dXJlKG15UHJvamVjdCwgbXlNb2R1bGUsIG15RmlsZXNUb0RlbGV0ZSk7CisgICAgUHNpRGlyZWN0b3J5IGRpciA9IG15UHNpTWFuYWdlci5maW5kRGlyZWN0b3J5KHJvb3QpOworICAgIGFzc2VydE5vdE51bGwoZGlyKTsKKyAgICBQc2lGaWxlIGZpbGUgPSBkaXIuY3JlYXRlRmlsZSgiQUFBLmphdmEiKTsKKyAgICBQc2lDbGFzcyBhQ2xhc3MgPSBteUphdmFGYWNhZGUuZ2V0RWxlbWVudEZhY3RvcnkoKS5jcmVhdGVDbGFzcygiQUFBIik7CisgICAgZmlsZS5hZGQoYUNsYXNzKTsKKworICAgIFBzaVRlc3RVdGlsLmNoZWNrRmlsZVN0cnVjdHVyZShmaWxlKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RGaWxlTW9kaWZpZWQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBWaXJ0dWFsRmlsZSByb290ID0gUHNpVGVzdFV0aWwuY3JlYXRlVGVzdFByb2plY3RTdHJ1Y3R1cmUobXlQcm9qZWN0LCBteU1vZHVsZSwgbXlGaWxlc1RvRGVsZXRlKTsKKyAgICBWaXJ0dWFsRmlsZSBwa2cgPSByb290LmNyZWF0ZUNoaWxkRGlyZWN0b3J5KHRoaXMsICJmb28iKTsKKyAgICBQc2lEaXJlY3RvcnkgZGlyID0gbXlQc2lNYW5hZ2VyLmZpbmREaXJlY3RvcnkocGtnKTsKKyAgICBhc3NlcnROb3ROdWxsKGRpcik7CisgICAgU3RyaW5nIHRleHQgPSAicGFja2FnZSBmb287XG5cbmNsYXNzIEEge30iOworICAgIFBzaUVsZW1lbnQgY3JlYXRlZCA9IGRpci5hZGQoUHNpRmlsZUZhY3RvcnkuZ2V0SW5zdGFuY2UoZ2V0UHJvamVjdCgpKS5jcmVhdGVGaWxlRnJvbVRleHQoIkEuamF2YSIsIEphdmFGaWxlVHlwZS5JTlNUQU5DRSwgdGV4dCkpOworICAgIFZpcnR1YWxGaWxlIHZpcnR1YWxGaWxlID0gY3JlYXRlZC5nZXRDb250YWluaW5nRmlsZSgpLmdldFZpcnR1YWxGaWxlKCk7CisgICAgYXNzZXJ0Tm90TnVsbCh2aXJ0dWFsRmlsZSk7CisgICAgU3RyaW5nIGZpbGVUZXh0ID0gTG9hZFRleHRVdGlsLmxvYWRUZXh0KHZpcnR1YWxGaWxlKS50b1N0cmluZygpOworICAgIGFzc2VydEVxdWFscyh0ZXh0LCBmaWxlVGV4dCk7CisKKyAgICBEb2N1bWVudCBkb2MgPSBGaWxlRG9jdW1lbnRNYW5hZ2VyLmdldEluc3RhbmNlKCkuZ2V0RG9jdW1lbnQodmlydHVhbEZpbGUpOworICAgIGFzc2VydE5vdE51bGwoZG9jKTsKKyAgICBhc3NlcnRGYWxzZShGaWxlRG9jdW1lbnRNYW5hZ2VyLmdldEluc3RhbmNlKCkuaXNEb2N1bWVudFVuc2F2ZWQoZG9jKSk7CisgICAgYXNzZXJ0RmFsc2UoRmlsZURvY3VtZW50TWFuYWdlci5nZXRJbnN0YW5jZSgpLmlzRmlsZU1vZGlmaWVkKHZpcnR1YWxGaWxlKSk7CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9wc2kvQWRkUmVtb3ZlSW5UeXBlUGFyYW1ldGVyTGlzdFRlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9wc2kvQWRkUmVtb3ZlSW5UeXBlUGFyYW1ldGVyTGlzdFRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZjgyOWFhCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL3BzaS9BZGRSZW1vdmVJblR5cGVQYXJhbWV0ZXJMaXN0VGVzdC5qYXZhCkBAIC0wLDAgKzEsNjkgQEAKK3BhY2thZ2UgY29tLmludGVsbGlqLnBzaTsKKworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLmFwcGxpY2F0aW9uLkFwcGxpY2F0aW9uTWFuYWdlcjsKK2ltcG9ydCBjb20uaW50ZWxsaWoudGVzdEZyYW1ld29yay5MaWdodElkZWFUZXN0Q2FzZTsKK2ltcG9ydCBjb20uaW50ZWxsaWoudGVzdEZyYW1ld29yay5Qc2lUZXN0VXRpbDsKK2ltcG9ydCBjb20uaW50ZWxsaWoudXRpbC5JbmNvcnJlY3RPcGVyYXRpb25FeGNlcHRpb247CisKK3B1YmxpYyBjbGFzcyBBZGRSZW1vdmVJblR5cGVQYXJhbWV0ZXJMaXN0VGVzdCBleHRlbmRzIExpZ2h0SWRlYVRlc3RDYXNleworICBwdWJsaWMgdm9pZCB0ZXN0QWRkKCkgdGhyb3dzIEluY29ycmVjdE9wZXJhdGlvbkV4Y2VwdGlvbiB7CisgICAgUHNpSmF2YUZpbGUgZmlsZSA9IChQc2lKYXZhRmlsZSljcmVhdGVMaWdodEZpbGUoIlRlc3QuamF2YSIsICJjbGFzcyBUZXN0IGV4dGVuZHMgVHlwZSB7XG59Iik7CisgICAgUHNpQ2xhc3MgYUNsYXNzID0gZmlsZS5nZXRDbGFzc2VzKClbMF07CisgICAgUHNpSmF2YUNvZGVSZWZlcmVuY2VFbGVtZW50IHJlZiA9IGFDbGFzcy5nZXRFeHRlbmRzTGlzdCgpLmdldFJlZmVyZW5jZUVsZW1lbnRzKClbMF07CisgICAgUHNpUmVmZXJlbmNlUGFyYW1ldGVyTGlzdCBsaXN0ID0gcmVmLmdldFBhcmFtZXRlckxpc3QoKTsKKworICAgIFBzaUVsZW1lbnRGYWN0b3J5IGZhY3RvcnkgPSBnZXRKYXZhRmFjYWRlKCkuZ2V0RWxlbWVudEZhY3RvcnkoKTsKKworICAgIFBzaVR5cGVFbGVtZW50IHR5cGVFbGVtZW50MSA9IGZhY3RvcnkuY3JlYXRlVHlwZUVsZW1lbnQoZmFjdG9yeS5jcmVhdGVUeXBlRnJvbVRleHQoIkEiLCBudWxsKSk7CisgICAgbGlzdC5hZGQodHlwZUVsZW1lbnQxKTsKKworICAgIGFzc2VydEVxdWFscygiY2xhc3MgVGVzdCBleHRlbmRzIFR5cGU8QT4ge1xufSIsIGZpbGUuZ2V0VGV4dCgpKTsKKyAgICBQc2lUZXN0VXRpbC5jaGVja0ZpbGVTdHJ1Y3R1cmUoZmlsZSk7CisKKyAgICBQc2lUeXBlRWxlbWVudCB0eXBlRWxlbWVudDIgPSBmYWN0b3J5LmNyZWF0ZVR5cGVFbGVtZW50KGZhY3RvcnkuY3JlYXRlVHlwZUZyb21UZXh0KCJCIiwgbnVsbCkpOworICAgIGxpc3QuYWRkKHR5cGVFbGVtZW50Mik7CisKKyAgICBhc3NlcnRFcXVhbHMoImNsYXNzIFRlc3QgZXh0ZW5kcyBUeXBlPEEsIEI+IHtcbn0iLCBmaWxlLmdldFRleHQoKSk7CisgICAgUHNpVGVzdFV0aWwuY2hlY2tGaWxlU3RydWN0dXJlKGZpbGUpOworCisgICAgUHNpVHlwZUVsZW1lbnQgdHlwZUVsZW1lbnQzID0gZmFjdG9yeS5jcmVhdGVUeXBlRWxlbWVudChmYWN0b3J5LmNyZWF0ZVR5cGVGcm9tVGV4dCgiQyIsIG51bGwpKTsKKyAgICBsaXN0LmFkZEFmdGVyKHR5cGVFbGVtZW50MywgbnVsbCk7CisKKyAgICBhc3NlcnRFcXVhbHMoImNsYXNzIFRlc3QgZXh0ZW5kcyBUeXBlPEMsIEEsIEI+IHtcbn0iLCBmaWxlLmdldFRleHQoKSk7CisgICAgUHNpVGVzdFV0aWwuY2hlY2tGaWxlU3RydWN0dXJlKGZpbGUpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFJlbW92ZSgpIHRocm93cyBJbmNvcnJlY3RPcGVyYXRpb25FeGNlcHRpb24geworICAgIGZpbmFsIFBzaUphdmFGaWxlIGZpbGUgPSAoUHNpSmF2YUZpbGUpY3JlYXRlTGlnaHRGaWxlKCJUZXN0LmphdmEiLCAiY2xhc3MgVGVzdCBleHRlbmRzIFR5cGU8QSwgQiwgQywgRD4ge1xufSIpOworICAgIFBzaUNsYXNzIGFDbGFzcyA9IGZpbGUuZ2V0Q2xhc3NlcygpWzBdOworICAgIFBzaUphdmFDb2RlUmVmZXJlbmNlRWxlbWVudCByZWYgPSBhQ2xhc3MuZ2V0RXh0ZW5kc0xpc3QoKS5nZXRSZWZlcmVuY2VFbGVtZW50cygpWzBdOworICAgIFBzaVJlZmVyZW5jZVBhcmFtZXRlckxpc3QgbGlzdCA9IHJlZi5nZXRQYXJhbWV0ZXJMaXN0KCk7CisgICAgZmluYWwgUHNpVHlwZUVsZW1lbnRbXSBwYXJtcyA9IGxpc3QuZ2V0VHlwZVBhcmFtZXRlckVsZW1lbnRzKCk7CisKKyAgICBBcHBsaWNhdGlvbk1hbmFnZXIuZ2V0QXBwbGljYXRpb24oKS5ydW5Xcml0ZUFjdGlvbihuZXcgUnVubmFibGUoKSB7CisgICAgICBAT3ZlcnJpZGUKKyAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKKyAgICAgICAgcGFybXNbMF0uZGVsZXRlKCk7CisKKyAgICAgICAgYXNzZXJ0RXF1YWxzKCJjbGFzcyBUZXN0IGV4dGVuZHMgVHlwZTwgQiwgQywgRD4ge1xufSIsIGZpbGUuZ2V0VGV4dCgpKTsKKyAgICAgICAgUHNpVGVzdFV0aWwuY2hlY2tGaWxlU3RydWN0dXJlKGZpbGUpOworCisgICAgICAgIHBhcm1zWzJdLmRlbGV0ZSgpOworCisgICAgICAgIGFzc2VydEVxdWFscygiY2xhc3MgVGVzdCBleHRlbmRzIFR5cGU8IEIsICBEPiB7XG59IiwgZmlsZS5nZXRUZXh0KCkpOworICAgICAgICBQc2lUZXN0VXRpbC5jaGVja0ZpbGVTdHJ1Y3R1cmUoZmlsZSk7CisKKyAgICAgICAgcGFybXNbM10uZGVsZXRlKCk7CisKKyAgICAgICAgYXNzZXJ0RXF1YWxzKCJjbGFzcyBUZXN0IGV4dGVuZHMgVHlwZTwgQiAgPiB7XG59IiwgZmlsZS5nZXRUZXh0KCkpOworICAgICAgICBQc2lUZXN0VXRpbC5jaGVja0ZpbGVTdHJ1Y3R1cmUoZmlsZSk7CisKKyAgICAgICAgcGFybXNbMV0uZGVsZXRlKCk7CisgICAgICB9CisgICAgfSk7CisKKworICAgIGFzc2VydEVxdWFscygiY2xhc3MgVGVzdCBleHRlbmRzIFR5cGUge1xufSIsIGZpbGUuZ2V0VGV4dCgpKTsKKyAgICBQc2lUZXN0VXRpbC5jaGVja0ZpbGVTdHJ1Y3R1cmUoZmlsZSk7CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9wc2kvQXJyYXlJbmRleE91dE9mQm91bmRzVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL3BzaS9BcnJheUluZGV4T3V0T2ZCb3VuZHNUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjgyZDQzMAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9wc2kvQXJyYXlJbmRleE91dE9mQm91bmRzVGVzdC5qYXZhCkBAIC0wLDAgKzEsMTI3IEBACisvKgorICogQ29weXJpZ2h0IDIwMDAtMjAxMiBKZXRCcmFpbnMgcy5yLm8uCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworcGFja2FnZSBjb20uaW50ZWxsaWoucHNpOworCitpbXBvcnQgY29tLmludGVsbGlqLkphdmFUZXN0VXRpbDsKK2ltcG9ydCBjb20uaW50ZWxsaWoubGFuZy5BU1ROb2RlOworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLmFwcGxpY2F0aW9uLkFwcGxpY2F0aW9uTWFuYWdlcjsKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS5jb21tYW5kLkNvbW1hbmRQcm9jZXNzb3I7CitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkuZGlhZ25vc3RpYy5Mb2dnZXI7CitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkuZmlsZUVkaXRvci5GaWxlRG9jdW1lbnRNYW5hZ2VyOworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLnByb2plY3RSb290cy5pbXBsLkphdmFTZGtJbXBsOworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLnV0aWwuaW8uRmlsZVV0aWw7CitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkudmZzLio7CitpbXBvcnQgY29tLmludGVsbGlqLnBzaS5pbXBsLnNvdXJjZS5Tb3VyY2VUcmVlVG9Qc2lNYXA7CitpbXBvcnQgY29tLmludGVsbGlqLnBzaS5zZWFyY2guR2xvYmFsU2VhcmNoU2NvcGU7CitpbXBvcnQgY29tLmludGVsbGlqLnJlZmFjdG9yaW5nLnJlbmFtZS5SZW5hbWVQcm9jZXNzb3I7CitpbXBvcnQgY29tLmludGVsbGlqLnRlc3RGcmFtZXdvcmsuSWRlYVRlc3RVdGlsOworaW1wb3J0IGNvbS5pbnRlbGxpai50ZXN0RnJhbWV3b3JrLlBzaVRlc3RDYXNlOworaW1wb3J0IGNvbS5pbnRlbGxpai50ZXN0RnJhbWV3b3JrLlBzaVRlc3RVdGlsOworCitpbXBvcnQgamF2YS5pby5GaWxlOworaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CisKKy8qKgorICogQGF1dGhvciBtYXgKKyAqLworcHVibGljIGNsYXNzIEFycmF5SW5kZXhPdXRPZkJvdW5kc1Rlc3QgZXh0ZW5kcyBQc2lUZXN0Q2FzZSB7CisgIHByaXZhdGUgc3RhdGljIGZpbmFsIExvZ2dlciBMT0cgPSBMb2dnZXIuZ2V0SW5zdGFuY2UoIiNjb20uaW50ZWxsaWoucHNpLkFycmF5SW5kZXhPdXRPZkJvdW5kc1Rlc3QiKTsKKyAgcHJpdmF0ZSBWaXJ0dWFsRmlsZSBteVByb2plY3RSb290OworCisgIEBPdmVycmlkZQorICBwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24geworICAgIHN1cGVyLnNldFVwKCk7CisKKyAgICBTdHJpbmcgcm9vdCA9IEphdmFUZXN0VXRpbC5nZXRKYXZhVGVzdERhdGFQYXRoKCkgKyAiL3BzaS9hcnJheUluZGV4T3V0T2ZCb3VuZHMvc3JjIjsKKyAgICBQc2lUZXN0VXRpbC5yZW1vdmVBbGxSb290cyhteU1vZHVsZSwgSWRlYVRlc3RVdGlsLmdldE1vY2tKZGsxNygpKTsKKyAgICBteVByb2plY3RSb290ID0gUHNpVGVzdFV0aWwuY3JlYXRlVGVzdFByb2plY3RTdHJ1Y3R1cmUobXlQcm9qZWN0LCBteU1vZHVsZSwgcm9vdCwgbXlGaWxlc1RvRGVsZXRlKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RTQ1IxMDkzMCgpIHRocm93cyBFeGNlcHRpb24geworICAgIHJlbmFtZVBhY2thZ2UoKTsKKyAgICBkZWxldGVOZXdQYWNrYWdlKCk7CisgICAgcmVzdG9yZVNvdXJjZXMoKTsKKyAgICByZW5hbWVQYWNrYWdlKCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0U2ltcGxlckNhc2UoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICByZW5hbWVQYWNrYWdlKCk7CisgICAgcmVzdG9yZVNvdXJjZXMoKTsKKworICAgIFBzaUZpbGUgcHNpRmlsZSA9IG15UHNpTWFuYWdlci5maW5kRmlsZShteVByb2plY3RSb290LmZpbmRGaWxlQnlSZWxhdGl2ZVBhdGgoImJsYS9CbGEuamF2YSIpKTsKKyAgICBhc3NlcnROb3ROdWxsKHBzaUZpbGUpOworCisgICAgYXNzZXJ0RXF1YWxzKDQsIHBzaUZpbGUuZ2V0Q2hpbGRyZW4oKS5sZW5ndGgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdExvbmdMaXZpbmdDbGFzc0FmdGVyUmVuYW1lKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgUHNpQ2xhc3MgcHNpQ2xhc3MgPSBteUphdmFGYWNhZGUuZmluZENsYXNzKCJibGEuQmxhIiwgR2xvYmFsU2VhcmNoU2NvcGUucHJvamVjdFNjb3BlKGdldFByb2plY3QoKSkpOworICAgIEFTVE5vZGUgdHJlZUVsZW1lbnQgPSBTb3VyY2VUcmVlVG9Qc2lNYXAucHNpRWxlbWVudFRvVHJlZShwc2lDbGFzcyk7CisgICAgcmVuYW1lUGFja2FnZSgpOworICAgIC8vYXNzZXJ0VHJ1ZShwc2lDbGFzcy5pc1ZhbGlkKCkpOworICAgIFNvdXJjZVRyZWVUb1BzaU1hcC50cmVlRWxlbWVudFRvUHNpKHRyZWVFbGVtZW50KTsKKyAgfQorCisgIHByaXZhdGUgdm9pZCByZXN0b3JlU291cmNlcygpIHsKKyAgICBSdW5uYWJsZSBydW5uYWJsZSA9IG5ldyBSdW5uYWJsZSgpIHsKKyAgICAgIEBPdmVycmlkZQorICAgICAgcHVibGljIHZvaWQgcnVuKCkgeworICAgICAgICB0cnkgeworICAgICAgICAgIEZpbGVVdGlsLmNvcHlEaXIobmV3IEZpbGUoSmF2YVRlc3RVdGlsLmdldEphdmFUZXN0RGF0YVBhdGgoKSArICIvcHNpL2FycmF5SW5kZXhPdXRPZkJvdW5kcy9zcmMiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFZmc1V0aWxDb3JlLnZpcnR1YWxUb0lvRmlsZShteVByb2plY3RSb290KSk7CisgICAgICAgIH0KKyAgICAgICAgY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICBMT0cuZXJyb3IoZSk7CisgICAgICAgIH0KKyAgICAgICAgVmlydHVhbEZpbGVNYW5hZ2VyLmdldEluc3RhbmNlKCkuc3luY1JlZnJlc2goKTsKKyAgICAgIH0KKyAgICB9OworICAgIENvbW1hbmRQcm9jZXNzb3IuZ2V0SW5zdGFuY2UoKS5leGVjdXRlQ29tbWFuZChteVByb2plY3QsIHJ1bm5hYmxlLCAgIiIsIG51bGwpOworICB9CisKKyAgcHJpdmF0ZSB2b2lkIGRlbGV0ZU5ld1BhY2thZ2UoKSB7CisgICAgUnVubmFibGUgcnVubmFibGUgPSBuZXcgUnVubmFibGUoKSB7CisgICAgICBAT3ZlcnJpZGUKKyAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKKyAgICAgICAgZmluYWwgUHNpUGFja2FnZSBhUGFja2FnZSA9IEphdmFQc2lGYWNhZGUuZ2V0SW5zdGFuY2UobXlQc2lNYW5hZ2VyLmdldFByb2plY3QoKSkuZmluZFBhY2thZ2UoImFub3RoZXJCbGEiKTsKKyAgICAgICAgYXNzZXJ0Tm90TnVsbCgiUGFja2FnZSBhbm90aGVyQmxhIG5vdCBmb3VuZCIsIGFQYWNrYWdlKTsKKyAgICAgICAgQXBwbGljYXRpb25NYW5hZ2VyLmdldEFwcGxpY2F0aW9uKCkucnVuV3JpdGVBY3Rpb24obmV3IFJ1bm5hYmxlKCkgeworICAgICAgICAgIEBPdmVycmlkZQorICAgICAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKKyAgICAgICAgICAgIGFQYWNrYWdlLmdldERpcmVjdG9yaWVzKClbMF0uZGVsZXRlKCk7CisgICAgICAgICAgfQorICAgICAgICB9KTsKKyAgICAgICAgVmlydHVhbEZpbGVNYW5hZ2VyLmdldEluc3RhbmNlKCkuc3luY1JlZnJlc2goKTsKKyAgICAgIH0KKyAgICB9OworICAgIENvbW1hbmRQcm9jZXNzb3IuZ2V0SW5zdGFuY2UoKS5leGVjdXRlQ29tbWFuZChteVByb2plY3QsIHJ1bm5hYmxlLCAgIiIsIG51bGwpOworICB9CisKKyAgcHJpdmF0ZSB2b2lkIHJlbmFtZVBhY2thZ2UoKSB7CisgICAgUnVubmFibGUgcnVubmFibGUgPSBuZXcgUnVubmFibGUoKSB7CisgICAgICBAT3ZlcnJpZGUKKyAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKKyAgICAgICAgUHNpUGFja2FnZSBhUGFja2FnZSA9IEphdmFQc2lGYWNhZGUuZ2V0SW5zdGFuY2UobXlQc2lNYW5hZ2VyLmdldFByb2plY3QoKSkuZmluZFBhY2thZ2UoImJsYSIpOworICAgICAgICBhc3NlcnROb3ROdWxsKCJQYWNrYWdlIGJsYSBub3QgZm91bmQiLCBhUGFja2FnZSk7CisKKyAgICAgICAgUHNpRGlyZWN0b3J5IGRpciA9IGFQYWNrYWdlLmdldERpcmVjdG9yaWVzKClbMF07CisgICAgICAgIG5ldyBSZW5hbWVQcm9jZXNzb3IobXlQcm9qZWN0LCBkaXIsICJhbm90aGVyQmxhIiwgdHJ1ZSwgdHJ1ZSkucnVuKCk7CisgICAgICAgIEZpbGVEb2N1bWVudE1hbmFnZXIuZ2V0SW5zdGFuY2UoKS5zYXZlQWxsRG9jdW1lbnRzKCk7CisgICAgICB9CisgICAgfTsKKyAgICBDb21tYW5kUHJvY2Vzc29yLmdldEluc3RhbmNlKCkuZXhlY3V0ZUNvbW1hbmQobXlQcm9qZWN0LCBydW5uYWJsZSwgICIiLCBudWxsKTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL3BzaS9Bc3RMZWFrc1Rlc3QuZ3Jvb3Z5IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL3BzaS9Bc3RMZWFrc1Rlc3QuZ3Jvb3Z5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEwMjhiYWYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovcHNpL0FzdExlYWtzVGVzdC5ncm9vdnkKQEAgLTAsMCArMSw4OCBAQAorLyoKKyAqIENvcHlyaWdodCAyMDAwLTIwMTIgSmV0QnJhaW5zIHMuci5vLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KK3BhY2thZ2UgY29tLmludGVsbGlqLnBzaQorCitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkuYXBwbGljYXRpb24uQXBwbGljYXRpb25NYW5hZ2VyCitpbXBvcnQgY29tLmludGVsbGlqLnBzaS5pbXBsLnNvdXJjZS5Qc2lGaWxlSW1wbAoraW1wb3J0IGNvbS5pbnRlbGxpai5wc2kuaW1wbC5zb3VyY2UudHJlZS5qYXZhLkphdmFGaWxlRWxlbWVudAoraW1wb3J0IGNvbS5pbnRlbGxpai5wc2kuaW1wbC5zb3VyY2UudHJlZS5qYXZhLk1ldGhvZEVsZW1lbnQKK2ltcG9ydCBjb20uaW50ZWxsaWoudGVzdEZyYW1ld29yay5MZWFrSHVudGVyCitpbXBvcnQgY29tLmludGVsbGlqLnRlc3RGcmFtZXdvcmsuZml4dHVyZXMuTGlnaHRDb2RlSW5zaWdodEZpeHR1cmVUZXN0Q2FzZQoraW1wb3J0IGNvbS5pbnRlbGxpai51dGlsLlByb2Nlc3NvcgoraW1wb3J0IGNvbS5pbnRlbGxpai5jb2RlSW5zcGVjdGlvbi5kZWZhdWx0RmlsZVRlbXBsYXRlVXNhZ2UuRGVmYXVsdEZpbGVUZW1wbGF0ZVVzYWdlSW5zcGVjdGlvbgorCisvKioKKyAqIEBhdXRob3IgcGV0ZXIKKyAqLworY2xhc3MgQXN0TGVha3NUZXN0IGV4dGVuZHMgTGlnaHRDb2RlSW5zaWdodEZpeHR1cmVUZXN0Q2FzZSB7CisKKyAgcHVibGljIHZvaWQgInRlc3QgQVNUIHNob3VsZCBiZSBvbiBhIHNvZnQgcmVmZXJlbmNlLCBmb3IgY2hhbmdlZCBmaWxlcyBhcyB3ZWxsIigpIHsKKyAgICBkZWYgZmlsZSA9IG15Rml4dHVyZS5hZGRDbGFzcygnY2xhc3MgRm9vIHt9JykuY29udGFpbmluZ0ZpbGUKKyAgICBhc3NlcnQgZmlsZS5maW5kRWxlbWVudEF0KDApIGluc3RhbmNlb2YgUHNpS2V5d29yZAorICAgIExlYWtIdW50ZXIuY2hlY2tMZWFrKGZpbGUsIEphdmFGaWxlRWxlbWVudCkKKworICAgIEFwcGxpY2F0aW9uTWFuYWdlci5hcHBsaWNhdGlvbi5ydW5Xcml0ZUFjdGlvbiB7CisgICAgICBmaWxlLnZpZXdQcm92aWRlci5kb2N1bWVudC5pbnNlcnRTdHJpbmcoMCwgJyAnKQorICAgICAgUHNpRG9jdW1lbnRNYW5hZ2VyLmdldEluc3RhbmNlKHByb2plY3QpLmNvbW1pdEFsbERvY3VtZW50cygpCisgICAgICBhc3NlcnQgZmlsZS5maW5kRWxlbWVudEF0KDApIGluc3RhbmNlb2YgUHNpV2hpdGVTcGFjZQorICAgIH0KKworICAgIExlYWtIdW50ZXIuY2hlY2tMZWFrKGZpbGUsIEphdmFGaWxlRWxlbWVudCkKKyAgfQorCisgIHB1YmxpYyB2b2lkICJ0ZXN0IHN1cGVyIG1ldGhvZHMgaGVsZCB2aWEgdGhlaXIgc2lnbmF0dXJlcyBpbiBjbGFzcyB1c2VyIGRhdGEiKCkgeworICAgIGRlZiBzdXBlckNsYXNzID0gbXlGaXh0dXJlLmFkZENsYXNzKCdjbGFzcyBTdXBlciB7IHZvaWQgZm9vKCkge30gfScpCisgICAgc3VwZXJDbGFzcy50ZXh0IC8vIGxvYWQgQVNUCisKKyAgICBkZWYgZmlsZSA9IG15Rml4dHVyZS5hZGRGaWxlVG9Qcm9qZWN0KCdNYWluLmphdmEnLCAnY2xhc3MgTWFpbiBleHRlbmRzIFN1cGVyIHsgdm9pZCBmb28oKSB7IFN5c3RlbS5vdXQucHJpbnRsbigiaGVsbG8iKTsgfSB9JykKKyAgICBteUZpeHR1cmUuY29uZmlndXJlRnJvbUV4aXN0aW5nVmlydHVhbEZpbGUoZmlsZS52aXJ0dWFsRmlsZSkKKyAgICBteUZpeHR1cmUuZG9IaWdobGlnaHRpbmcoKQorCisgICAgZGVmIG1haW5DbGFzcyA9ICgoUHNpSmF2YUZpbGUpIGZpbGUpLmNsYXNzZXNbMF0KKworICAgIExlYWtIdW50ZXIuY2hlY2tMZWFrKG1haW5DbGFzcywgTWV0aG9kRWxlbWVudCwgeyBNZXRob2RFbGVtZW50IG5vZGUgLT4KKyAgICAgIHN1cGVyQ2xhc3MgPT0gbm9kZS5wc2kucGFyZW50CisgICAgfSBhcyBQcm9jZXNzb3I8TWV0aG9kRWxlbWVudD4pCisgIH0KKworICBwdWJsaWMgdm9pZCAidGVzdCBubyBoYXJkIHJlZnMgdG8gQVNUIGFmdGVyIGhpZ2hsaWdodGluZyIoKSB7CisgICAgZGVmIHN1cCA9IG15Rml4dHVyZS5hZGRGaWxlVG9Qcm9qZWN0KCdzdXAuamF2YScsICdjbGFzcyBTdXBlciB7IFN1cGVyKCkge30gfScpCisgICAgYXNzZXJ0IHN1cC5maW5kRWxlbWVudEF0KDApIC8vIGxvYWQgQVNUCisgICAgYXNzZXJ0ICEoKFBzaUZpbGVJbXBsKXN1cCkuc3R1YgorICAgIExlYWtIdW50ZXIuY2hlY2tMZWFrKHN1cCwgTWV0aG9kRWxlbWVudCkKKworICAgIGRlZiBmb28gPSBteUZpeHR1cmUuYWRkRmlsZVRvUHJvamVjdCgnYS5qYXZhJywgJ2NsYXNzIEZvbyBleHRlbmRzIFN1cGVyIHsgdm9pZCBiYXIoKSB7IGJhcigpOyB9IH0nKQorICAgIG15Rml4dHVyZS5jb25maWd1cmVGcm9tRXhpc3RpbmdWaXJ0dWFsRmlsZShmb28udmlydHVhbEZpbGUpCisgICAgbXlGaXh0dXJlLmRvSGlnaGxpZ2h0aW5nKCkKKworICAgIGFzc2VydCAhKChQc2lGaWxlSW1wbClmb28pLnN0dWIKKyAgICBhc3NlcnQgKChQc2lGaWxlSW1wbClmb28pLnRyZWVFbGVtZW50CisKKyAgICBMZWFrSHVudGVyLmNoZWNrTGVhayhmb28sIE1ldGhvZEVsZW1lbnQpCisgICAgTGVha0h1bnRlci5jaGVja0xlYWsoc3VwLCBNZXRob2RFbGVtZW50KQorICB9CisKKyAgcHVibGljIHZvaWQgInRlc3Qgbm8gaGFyZCByZWZzIHRvIERlZmF1bHQgRmlsZSBUZW1wbGF0ZSBpbnNwZWN0aW9uIGludGVybmFsIEFTVCIoKSB7CisgICAgbXlGaXh0dXJlLmFkZEZpbGVUb1Byb2plY3QoJ3N1cC5qYXZhJywgJ2NsYXNzIFN1cGVyIHsgdm9pZCBiYXIoKSB7fSB9JykKKyAgICBQc2lKYXZhRmlsZSBmb28gPSBteUZpeHR1cmUuYWRkRmlsZVRvUHJvamVjdCgnYS5qYXZhJywgJ2NsYXNzIEZvbyB7IHZvaWQgYmFyKCkgeyBiYXIoKTsgfSB9JykKKyAgICBteUZpeHR1cmUuY29uZmlndXJlRnJvbUV4aXN0aW5nVmlydHVhbEZpbGUoZm9vLnZpcnR1YWxGaWxlKQorICAgIG15Rml4dHVyZS5lbmFibGVJbnNwZWN0aW9ucyhuZXcgRGVmYXVsdEZpbGVUZW1wbGF0ZVVzYWdlSW5zcGVjdGlvbigpKQorICAgIG15Rml4dHVyZS5kb0hpZ2hsaWdodGluZygpCisKKyAgICBMZWFrSHVudGVyLmNoZWNrTGVhayhmb28uY2xhc3Nlc1swXSwgTWV0aG9kRWxlbWVudCwgeyBNZXRob2RFbGVtZW50IG5vZGUgLT4gIW5vZGUucHNpLnBoeXNpY2FsIH0gYXMgUHJvY2Vzc29yPE1ldGhvZEVsZW1lbnQ+KQorICB9CisKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9wc2kvQ2xzQnVpbGRlclRlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9wc2kvQ2xzQnVpbGRlclRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MWM4MTZlCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL3BzaS9DbHNCdWlsZGVyVGVzdC5qYXZhCkBAIC0wLDAgKzEsMTIwIEBACitwYWNrYWdlIGNvbS5pbnRlbGxpai5wc2k7CisKK2ltcG9ydCBjb20uaW50ZWxsaWouSmF2YVRlc3RVdGlsOworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLnJvb3RzLk9yZGVyUm9vdFR5cGU7CitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkudXRpbC5pby5GaWxlVXRpbDsKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS51dGlsLnRleHQuU3RyaW5nVXRpbDsKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS52ZnMuTG9jYWxGaWxlU3lzdGVtOworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLnZmcy5WaXJ0dWFsRmlsZTsKK2ltcG9ydCBjb20uaW50ZWxsaWoucHNpLmltcGwuY29tcGlsZWQuRGVmYXVsdENsc1N0dWJCdWlsZGVyRmFjdG9yeTsKK2ltcG9ydCBjb20uaW50ZWxsaWoucHNpLnN0dWJzLlBzaUZpbGVTdHViOworaW1wb3J0IGNvbS5pbnRlbGxpai5wc2kuc3R1YnMuU3R1YkJhc2U7CitpbXBvcnQgY29tLmludGVsbGlqLnRlc3RGcmFtZXdvcmsuTGlnaHRJZGVhVGVzdENhc2U7CitpbXBvcnQgY29tLmludGVsbGlqLnV0aWwuY2xzLkNsc0Zvcm1hdEV4Y2VwdGlvbjsKKworaW1wb3J0IGphdmEuaW8uRmlsZTsKK2ltcG9ydCBqYXZhLmlvLkZpbGVOb3RGb3VuZEV4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLmlvLkZpbGVXcml0ZXI7CitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKKworLyoqCisgKiBAYXV0aG9yIG1heAorICovCitwdWJsaWMgY2xhc3MgQ2xzQnVpbGRlclRlc3QgZXh0ZW5kcyBMaWdodElkZWFUZXN0Q2FzZSB7CisgIHB1YmxpYyB2b2lkIHRlc3RVdGlsTGlzdCgpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdCgiamF2YS91dGlsL0xpc3QuY2xhc3MiKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3ROdWxsYWJsZSgpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdCgib3JnL2pldGJyYWlucy9hbm5vdGF0aW9ucy9OdWxsYWJsZS5jbGFzcyIpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFV0aWxDb2xsZWN0aW9ucygpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdCgiamF2YS91dGlsL0NvbGxlY3Rpb25zLmNsYXNzIik7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0VXRpbEhhc2hNYXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoImphdmEvdXRpbC9IYXNoTWFwLmNsYXNzIik7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0VXRpbE1hcCgpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdCgiamF2YS91dGlsL01hcC5jbGFzcyIpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFRpbWVVbml0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KCJqYXZhL3V0aWwvY29uY3VycmVudC9UaW1lVW5pdC5jbGFzcyIpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFRlc3RTdWl0ZSgpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdEZyb21UZXN0RGF0YSgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdERvdWJsZVRlc3QoKSB0aHJvd3MgRXhjZXB0aW9uIHsgIC8vIElERUEtNTMxOTUKKyAgICBkb1Rlc3RGcm9tVGVzdERhdGEoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RBbm5vdGF0ZWROb25TdGF0aWNJbm5lckNsYXNzQ29uc3RydWN0b3IoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3RGcm9tVGVzdERhdGEoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RBbm5vdGF0ZWRFbnVtQ29uc3RydWN0b3IoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3RGcm9tVGVzdERhdGEoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RNb2RpZmllcnMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBmaW5hbCBTdHJpbmcgY2xzRmlsZVBhdGggPSBKYXZhVGVzdFV0aWwuZ2V0SmF2YVRlc3REYXRhUGF0aCgpICsgIi9wc2kvcmVwb3NpdG9yeVVzZS9jbHMvcGFjay8iICsgZ2V0VGVzdE5hbWUoZmFsc2UpICsgIi5jbGFzcyI7CisgICAgZmluYWwgVmlydHVhbEZpbGUgY2xzRmlsZSA9IExvY2FsRmlsZVN5c3RlbS5nZXRJbnN0YW5jZSgpLmZpbmRGaWxlQnlQYXRoKGNsc0ZpbGVQYXRoKTsKKyAgICBhc3NlcnQgY2xzRmlsZSAhPSBudWxsIDogY2xzRmlsZVBhdGg7CisgICAgZG9UZXN0KGNsc0ZpbGUsIGdldFRlc3ROYW1lKGZhbHNlKSArICIudHh0Iik7CisgIH0KKworICBwcml2YXRlIHZvaWQgZG9UZXN0RnJvbVRlc3REYXRhKCkgdGhyb3dzIENsc0Zvcm1hdEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24geworICAgIGZpbmFsIFN0cmluZyBjbHNGaWxlUGF0aCA9IEphdmFUZXN0VXRpbC5nZXRKYXZhVGVzdERhdGFQYXRoKCkgKyAiL3BzaS9jbHMvc3R1YkJ1aWxkZXIvIiArIGdldFRlc3ROYW1lKGZhbHNlKSArICIuY2xhc3MiOworICAgIGZpbmFsIFZpcnR1YWxGaWxlIGNsc0ZpbGUgPSBMb2NhbEZpbGVTeXN0ZW0uZ2V0SW5zdGFuY2UoKS5maW5kRmlsZUJ5UGF0aChjbHNGaWxlUGF0aCk7CisgICAgYXNzZXJ0IGNsc0ZpbGUgIT0gbnVsbCA6IGNsc0ZpbGVQYXRoOworICAgIGRvVGVzdChjbHNGaWxlLCBnZXRUZXN0TmFtZShmYWxzZSkgKyAiLnR4dCIpOworICB9CisKKyAgcHJpdmF0ZSB2b2lkIGRvVGVzdChmaW5hbCBTdHJpbmcgY2xhc3NOYW1lKSB0aHJvd3MgSU9FeGNlcHRpb24sIENsc0Zvcm1hdEV4Y2VwdGlvbiB7CisgICAgZmluYWwgVmlydHVhbEZpbGUgY2xzRmlsZSA9IGZpbmRGaWxlKGNsYXNzTmFtZSk7CisgICAgZG9UZXN0KGNsc0ZpbGUsIGdldFRlc3ROYW1lKGZhbHNlKSArICIudHh0Iik7CisgIH0KKworICBwcml2YXRlIHN0YXRpYyB2b2lkIGRvVGVzdChWaXJ0dWFsRmlsZSB2RmlsZSwgU3RyaW5nIGdvbGRGaWxlKSB0aHJvd3MgQ2xzRm9ybWF0RXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7CisgICAgZmluYWwgUHNpRmlsZVN0dWIgc3R1YiA9IChuZXcgRGVmYXVsdENsc1N0dWJCdWlsZGVyRmFjdG9yeSgpKS5idWlsZEZpbGVTdHViKHZGaWxlLCB2RmlsZS5jb250ZW50c1RvQnl0ZUFycmF5KCkpOworICAgIGFzc2VydCBzdHViICE9IG51bGwgOiB2RmlsZTsKKyAgICBmaW5hbCBTdHJpbmcgYnV0V2FzID0gKChTdHViQmFzZSlzdHViKS5wcmludFRyZWUoKTsKKworICAgIGZpbmFsIFN0cmluZyBnb2xkRmlsZVBhdGggPSBKYXZhVGVzdFV0aWwuZ2V0SmF2YVRlc3REYXRhUGF0aCgpICsgIi9wc2kvY2xzL3N0dWJCdWlsZGVyLyIgKyBnb2xkRmlsZTsKKyAgICBTdHJpbmcgZXhwZWN0ZWQgPSAiIjsKKyAgICB0cnkgeworICAgICAgZXhwZWN0ZWQgPSBGaWxlVXRpbC5sb2FkRmlsZShuZXcgRmlsZShnb2xkRmlsZVBhdGgpKTsKKyAgICAgIGV4cGVjdGVkID0gU3RyaW5nVXRpbC5jb252ZXJ0TGluZVNlcGFyYXRvcnMoZXhwZWN0ZWQpOworICAgIH0KKyAgICBjYXRjaCAoRmlsZU5vdEZvdW5kRXhjZXB0aW9uIGUpIHsKKyAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiTm8gZXhwZWN0ZWQgZGF0YSBmb3VuZCBhdDogIiArIGdvbGRGaWxlUGF0aCArICIsIGNyZWF0aW5nIG9uZS4iKTsKKyAgICAgIGZpbmFsIEZpbGVXcml0ZXIgZmlsZVdyaXRlciA9IG5ldyBGaWxlV3JpdGVyKGdvbGRGaWxlUGF0aCk7CisgICAgICB0cnkgeworICAgICAgICBmaWxlV3JpdGVyLndyaXRlKGJ1dFdhcyk7CisgICAgICAgIGZpbGVXcml0ZXIuY2xvc2UoKTsKKyAgICAgIH0KKyAgICAgIGZpbmFsbHkgeworICAgICAgICBmaWxlV3JpdGVyLmNsb3NlKCk7CisgICAgICAgIGZhaWwoIk5vIHRlc3QgZGF0YSBmb3VuZC4gQ3JlYXRlZCBvbmUiKTsKKyAgICAgIH0KKyAgICB9CisKKyAgICBhc3NlcnRFcXVhbHMoZXhwZWN0ZWQsIGJ1dFdhcyk7CisgIH0KKworICBwcml2YXRlIFZpcnR1YWxGaWxlIGZpbmRGaWxlKGZpbmFsIFN0cmluZyBjbGFzc05hbWUpIHsKKyAgICBmaW5hbCBWaXJ0dWFsRmlsZVtdIHJvb3RzID0gZ2V0UHJvamVjdEpESygpLmdldFJvb3RQcm92aWRlcigpLmdldEZpbGVzKE9yZGVyUm9vdFR5cGUuQ0xBU1NFUyk7CisgICAgZm9yIChWaXJ0dWFsRmlsZSByb290IDogcm9vdHMpIHsKKyAgICAgIFZpcnR1YWxGaWxlIHZGaWxlID0gcm9vdC5maW5kRmlsZUJ5UmVsYXRpdmVQYXRoKGNsYXNzTmFtZSk7CisgICAgICBpZiAodkZpbGUgIT0gbnVsbCkgcmV0dXJuIHZGaWxlOworICAgIH0KKworICAgIGZhaWwoIkNhbm5vdCBmaWxlIGNsYXNzIGZpbGUgZm9yOiAiICsgY2xhc3NOYW1lKTsKKyAgICByZXR1cm4gbnVsbDsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL3BzaS9DbHNNaXJyb3JCdWlsZGluZ1Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9wc2kvQ2xzTWlycm9yQnVpbGRpbmdUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2Q3N2FkYQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9wc2kvQ2xzTWlycm9yQnVpbGRpbmdUZXN0LmphdmEKQEAgLTAsMCArMSw2OSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDAwLTIwMTMgSmV0QnJhaW5zIHMuci5vLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KK3BhY2thZ2UgY29tLmludGVsbGlqLnBzaTsKKworaW1wb3J0IGNvbS5pbnRlbGxpai5KYXZhVGVzdFV0aWw7CitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkudXRpbC50ZXh0LlN0cmluZ1V0aWw7CitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkudmZzLkxvY2FsRmlsZVN5c3RlbTsKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS52ZnMuVmlydHVhbEZpbGU7CitpbXBvcnQgY29tLmludGVsbGlqLnBzaS5pbXBsLmNvbXBpbGVkLkNsc0ZpbGVJbXBsOworaW1wb3J0IGNvbS5pbnRlbGxpai50ZXN0RnJhbWV3b3JrLkxpZ2h0SWRlYVRlc3RDYXNlOworaW1wb3J0IGNvbS5pbnRlbGxpai50ZXN0RnJhbWV3b3JrLlBsYXRmb3JtVGVzdFV0aWw7CisKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworCitwdWJsaWMgY2xhc3MgQ2xzTWlycm9yQnVpbGRpbmdUZXN0IGV4dGVuZHMgTGlnaHRJZGVhVGVzdENhc2UgeworICBwdWJsaWMgdm9pZCB0ZXN0U2ltcGxlRW51bSgpIHsgZG9UZXN0KCk7IH0KKyAgcHVibGljIHZvaWQgdGVzdEVudW1XaXRoRmllbGRzKCkgeyBkb1Rlc3QoKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0Tm9ybWFsQ2xhc3MoKSB7IGRvVGVzdCgpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3ROZXN0ZWQoKSB7IGRvVGVzdCgpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3REZXByZWNhdGVkKCkgeyBkb1Rlc3QoKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0QW5ub3RhdGlvbnMoKSB7IGRvVGVzdCgpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RQYXJhbWV0ZXJOYW1lcygpIHsgZG9UZXN0KCk7IH0KKyAgcHVibGljIHZvaWQgdGVzdEVtcHR5RW51bSgpIHsgZG9UZXN0KCk7IH0KKyAgcHVibGljIHZvaWQgdGVzdCRCdWNrQ2xhc3MoKSB7IGRvVGVzdCgpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RCdWNrQ2xhc3MkKCkgeyBkb1Rlc3QoKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0RXh0TWV0aG9kcygpIHsgZG9UZXN0KCk7IH0KKyAgcHVibGljIHZvaWQgdGVzdE1ldGhvZFJlY2VpdmVyKCkgeyBkb1Rlc3QoKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0UGFja2FnZUluZm8oKSB7IGRvVGVzdCgicGFja2FnZS1pbmZvIik7IH0KKyAgcHVibGljIHZvaWQgdGVzdEVBNDA1NjgoKSB7IGRvVGVzdCgpOyB9CisKKyAgcHJpdmF0ZSB2b2lkIGRvVGVzdCgpIHsKKyAgICBkb1Rlc3QoZ2V0VGVzdE5hbWUoZmFsc2UpKTsKKyAgfQorCisgIHByaXZhdGUgc3RhdGljIHZvaWQgZG9UZXN0KFN0cmluZyBuYW1lKSB7CisgICAgU3RyaW5nIHRlc3REaXIgPSBKYXZhVGVzdFV0aWwuZ2V0SmF2YVRlc3REYXRhUGF0aCgpICsgIi9wc2kvY2xzL21pcnJvci8iOworCisgICAgU3RyaW5nIGNsc1BhdGggPSB0ZXN0RGlyICsgInBrZy8iICsgbmFtZSArICIuY2xhc3MiOworICAgIFZpcnR1YWxGaWxlIHZGaWxlID0gTG9jYWxGaWxlU3lzdGVtLmdldEluc3RhbmNlKCkuZmluZEZpbGVCeVBhdGgoY2xzUGF0aCk7CisgICAgYXNzZXJ0Tm90TnVsbChjbHNQYXRoLCB2RmlsZSk7CisgICAgUHNpRmlsZSBjbHNGaWxlID0gZ2V0UHNpTWFuYWdlcigpLmZpbmRGaWxlKHZGaWxlKTsKKyAgICBhc3NlcnROb3ROdWxsKHZGaWxlLmdldFBhdGgoKSwgY2xzRmlsZSk7CisKKyAgICBTdHJpbmcgZXhwZWN0ZWQ7CisgICAgdHJ5IHsKKyAgICAgIFN0cmluZyB0eHRQYXRoID0gdGVzdERpciArIG5hbWUgKyAiLnR4dCI7CisgICAgICBleHBlY3RlZCA9IFN0cmluZ1V0aWwudHJpbVRyYWlsaW5nKFBsYXRmb3JtVGVzdFV0aWwubG9hZEZpbGVUZXh0KHR4dFBhdGgpKTsKKyAgICB9CisgICAgY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKyAgICAgIGZhaWwoZS5nZXRNZXNzYWdlKCkpOworICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGFzc2VydEVxdWFscyhleHBlY3RlZCwgKChDbHNGaWxlSW1wbCljbHNGaWxlKS5nZXRNaXJyb3IoKS5nZXRUZXh0KCkpOworICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovcHNpL0Nsc1JlcG9zaXRvcnlVc2VUZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovcHNpL0Nsc1JlcG9zaXRvcnlVc2VUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjJhM2I4MQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9wc2kvQ2xzUmVwb3NpdG9yeVVzZVRlc3QuamF2YQpAQCAtMCwwICsxLDc4MSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDAwLTIwMTIgSmV0QnJhaW5zIHMuci5vLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KK3BhY2thZ2UgY29tLmludGVsbGlqLnBzaTsKKworaW1wb3J0IGNvbS5pbnRlbGxpai5pZGUuaGlnaGxpZ2h0ZXIuSmF2YUZpbGVUeXBlOworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLmFwcGxpY2F0aW9uLkFwcGxpY2F0aW9uTWFuYWdlcjsKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS5hcHBsaWNhdGlvbi5leC5QYXRoTWFuYWdlckV4OworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLmRpYWdub3N0aWMuTG9nZ2VyOworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLnByb2plY3RSb290cy5pbXBsLkphdmFTZGtJbXBsOworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLnJvb3RzLk1vZHVsZVJvb3RNb2RpZmljYXRpb25VdGlsOworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLnJvb3RzLk9yZGVyUm9vdFR5cGU7CitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkudXRpbC5pby5GaWxlVXRpbDsKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS52ZnMuTG9jYWxGaWxlU3lzdGVtOworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLnZmcy5WaXJ0dWFsRmlsZTsKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS52ZnMuVmlydHVhbEZpbGVGaWx0ZXI7CitpbXBvcnQgY29tLmludGVsbGlqLnBzaS5pbXBsLmphdmEuc3R1YnMuUHNpTWV0aG9kU3R1YjsKK2ltcG9ydCBjb20uaW50ZWxsaWoucHNpLnNlYXJjaC5HbG9iYWxTZWFyY2hTY29wZTsKK2ltcG9ydCBjb20uaW50ZWxsaWoucHNpLnV0aWwuUHNpVXRpbDsKK2ltcG9ydCBjb20uaW50ZWxsaWoudGVzdEZyYW1ld29yay5JZGVhVGVzdFV0aWw7CitpbXBvcnQgY29tLmludGVsbGlqLnRlc3RGcmFtZXdvcmsuUGxhdGZvcm1UZXN0Q2FzZTsKK2ltcG9ydCBjb20uaW50ZWxsaWoudGVzdEZyYW1ld29yay5Qc2lUZXN0Q2FzZTsKK2ltcG9ydCBjb20uaW50ZWxsaWoudGVzdEZyYW1ld29yay5Qc2lUZXN0VXRpbDsKKworaW1wb3J0IGphdmEuaW8uRmlsZTsKKworQFBsYXRmb3JtVGVzdENhc2UuV3JhcEluQ29tbWFuZAorcHVibGljIGNsYXNzIENsc1JlcG9zaXRvcnlVc2VUZXN0IGV4dGVuZHMgUHNpVGVzdENhc2UgeworICBwcml2YXRlIHN0YXRpYyBmaW5hbCBMb2dnZXIgTE9HID0gTG9nZ2VyLmdldEluc3RhbmNlKCIjY29tLmludGVsbGlqLnBzaS5DbHNSZXBvc2l0b3J5VXNlVGVzdCIpOworCisgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBURVNUX1JPT1QgPSBQYXRoTWFuYWdlckV4LmdldFRlc3REYXRhUGF0aCgpICsgIi9wc2kvcmVwb3NpdG9yeVVzZS9jbHMiOworICBwcml2YXRlIEdsb2JhbFNlYXJjaFNjb3BlIFJFU09MVkVfU0NPUEU7CisKKyAgQE92ZXJyaWRlCisgIHByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgc3VwZXIuc2V0VXAoKTsKKworICAgIEFwcGxpY2F0aW9uTWFuYWdlci5nZXRBcHBsaWNhdGlvbigpLnJ1bldyaXRlQWN0aW9uKAorICAgICAgbmV3IFJ1bm5hYmxlKCkgeworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIHZvaWQgcnVuKCkgeworICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICBWaXJ0dWFsRmlsZSB2RGlyID0gZ2V0Um9vdEZpbGUoKTsKKyAgICAgICAgICAgIFBzaVRlc3RVdGlsLnJlbW92ZUFsbFJvb3RzKG15TW9kdWxlLCBJZGVhVGVzdFV0aWwuZ2V0TW9ja0pkazE3KCkpOworICAgICAgICAgICAgYWRkTGlicmFyeVRvUm9vdHModkRpciwgT3JkZXJSb290VHlwZS5DTEFTU0VTKTsKKy8vICAgICAgICAgICAgUHNpVGVzdFV0aWwuYWRkU291cmNlQ29udGVudFRvUm9vdHMobXlQcm9qZWN0LCB2RGlyKTsKKyAgICAgICAgICB9CisgICAgICAgICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICBMT0cuZXJyb3IoZSk7CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICB9CisgICAgKTsKKworICAgIFJFU09MVkVfU0NPUEUgPSBHbG9iYWxTZWFyY2hTY29wZS5tb2R1bGVXaXRoRGVwZW5kZW5jaWVzQW5kTGlicmFyaWVzU2NvcGUobXlNb2R1bGUpOworICB9CisKKyAgQE92ZXJyaWRlCisgIHByb3RlY3RlZCB2b2lkIHRlYXJEb3duKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgUkVTT0xWRV9TQ09QRSA9IG51bGw7CisgICAgc3VwZXIudGVhckRvd24oKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RDbGFzc0ZpbGVVcGRhdGUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBmaW5hbCBGaWxlIGNsYXNzZXMgPSBjcmVhdGVUZW1wRGlyKCJjbGFzc2VzIiwgZmFsc2UpOworCisgICAgZmluYWwgRmlsZSBjb20gPSBuZXcgRmlsZShjbGFzc2VzLCAiY29tIik7CisgICAgLy9ub2luc3BlY3Rpb24gUmVzdWx0T2ZNZXRob2RDYWxsSWdub3JlZAorICAgIGNvbS5ta2RpcigpOworCisgICAgRmlsZSBkYXRhUGF0aCA9IG5ldyBGaWxlKFBhdGhNYW5hZ2VyRXguZ2V0VGVzdERhdGFQYXRoKCkgKyAiL3BzaS9jbHMiKTsKKworICAgIGZpbmFsIEZpbGUgdGFyZ2V0ID0gbmV3IEZpbGUoY29tLCAiVGVzdENsYXNzLmNsYXNzIik7CisgICAgRmlsZVV0aWwuY29weShuZXcgRmlsZShkYXRhUGF0aCwgIjEvVGVzdENsYXNzLmNsYXNzIiksIHRhcmdldCk7CisgICAgLy9ub2luc3BlY3Rpb24gUmVzdWx0T2ZNZXRob2RDYWxsSWdub3JlZAorICAgIHRhcmdldC5zZXRMYXN0TW9kaWZpZWQoU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCkpOworCisgICAgQXBwbGljYXRpb25NYW5hZ2VyLmdldEFwcGxpY2F0aW9uKCkucnVuV3JpdGVBY3Rpb24oCisgICAgICBuZXcgUnVubmFibGUoKSB7CisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgdm9pZCBydW4oKSB7CisgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIFZpcnR1YWxGaWxlIHZEaXIgPSBMb2NhbEZpbGVTeXN0ZW0uZ2V0SW5zdGFuY2UoKS5yZWZyZXNoQW5kRmluZEZpbGVCeUlvRmlsZShjbGFzc2VzKTsKKyAgICAgICAgICAgIGFzc2VydE5vdE51bGwodkRpcik7CisgICAgICAgICAgICBhZGRMaWJyYXJ5VG9Sb290cyh2RGlyLCBPcmRlclJvb3RUeXBlLkNMQVNTRVMpOworICAgICAgICAgIH0KKyAgICAgICAgICBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIExPRy5lcnJvcihlKTsKKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIH0KKyAgICApOworCisgICAgUHNpQ2xhc3MgcHNpQ2xhc3MgPSBteUphdmFGYWNhZGUuZmluZENsYXNzKCJjb20uVGVzdENsYXNzIiwgR2xvYmFsU2VhcmNoU2NvcGUuYWxsU2NvcGUobXlQcm9qZWN0KSk7CisgICAgYXNzZXJ0IHBzaUNsYXNzICE9IG51bGw7CisgICAgUHNpSmF2YUZpbGUgcHNpRmlsZSA9IChQc2lKYXZhRmlsZSlwc2lDbGFzcy5nZXRDb250YWluaW5nRmlsZSgpOworICAgIGZpbmFsIFZpcnR1YWxGaWxlIHZGaWxlID0gcHNpRmlsZS5nZXRWaXJ0dWFsRmlsZSgpOworCisgICAgYXNzZXJ0Tm90TnVsbChwc2lDbGFzcyk7CisgICAgYXNzZXJ0VHJ1ZShwc2lDbGFzcy5pc1ZhbGlkKCkpOworICAgIGFzc2VydFRydWUocHNpRmlsZS5pc1ZhbGlkKCkpOworCisgICAgYXNzZXJ0RXF1YWxzKDEsIHBzaUZpbGUuZ2V0Q2xhc3NlcygpLmxlbmd0aCk7CisgICAgYXNzZXJ0U2FtZShwc2lDbGFzcywgcHNpRmlsZS5nZXRDbGFzc2VzKClbMF0pOworCisgICAgYXNzZXJ0RXF1YWxzKDIsIHBzaUNsYXNzLmdldEZpZWxkcygpLmxlbmd0aCk7CisgICAgYXNzZXJ0RXF1YWxzKCJmaWVsZDExIiwgcHNpQ2xhc3MuZ2V0RmllbGRzKClbMF0uZ2V0TmFtZSgpKTsKKyAgICBhc3NlcnRFcXVhbHMoImZpZWxkMTIiLCBwc2lDbGFzcy5nZXRGaWVsZHMoKVsxXS5nZXROYW1lKCkpOworCisgICAgYXNzZXJ0RXF1YWxzKDIsIHBzaUNsYXNzLmdldE1ldGhvZHMoKS5sZW5ndGgpOworICAgIGFzc2VydEVxdWFscygiVGVzdENsYXNzIiwgcHNpQ2xhc3MuZ2V0TWV0aG9kcygpWzBdLmdldE5hbWUoKSk7CisgICAgYXNzZXJ0RXF1YWxzKCJtZXRob2QxIiwgcHNpQ2xhc3MuZ2V0TWV0aG9kcygpWzFdLmdldE5hbWUoKSk7CisKKyAgICBGaWxlVXRpbC5jb3B5KG5ldyBGaWxlKGRhdGFQYXRoLCAiMi9UZXN0Q2xhc3MuY2xhc3MiKSwgdGFyZ2V0KTsKKyAgICAvL25vaW5zcGVjdGlvbiBSZXN1bHRPZk1ldGhvZENhbGxJZ25vcmVkCisgICAgdGFyZ2V0LnNldExhc3RNb2RpZmllZChTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKSArIDUwMDApOworCisgICAgYXNzZXJ0IHZGaWxlICE9IG51bGw7CisgICAgQXBwbGljYXRpb25NYW5hZ2VyLmdldEFwcGxpY2F0aW9uKCkucnVuV3JpdGVBY3Rpb24oCisgICAgICBuZXcgUnVubmFibGUoKSB7CisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgdm9pZCBydW4oKSB7CisgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIHZGaWxlLnJlZnJlc2goZmFsc2UsIGZhbHNlKTsKKyAgICAgICAgICB9CisgICAgICAgICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICBMT0cuZXJyb3IoZSk7CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICB9CisgICAgKTsKKworICAgIGFzc2VydFRydWUocHNpRmlsZS5pc1ZhbGlkKCkpOworICAgIFBzaUNsYXNzIG9sZENsYXNzID0gcHNpQ2xhc3M7CisgICAgcHNpQ2xhc3MgPSBteUphdmFGYWNhZGUuZmluZENsYXNzKCJjb20uVGVzdENsYXNzIiwgR2xvYmFsU2VhcmNoU2NvcGUuYWxsU2NvcGUobXlQcm9qZWN0KSk7CisgICAgYXNzZXJ0Tm90U2FtZShvbGRDbGFzcywgcHNpQ2xhc3MpOworICAgIGFzc2VydEZhbHNlKG9sZENsYXNzLmlzVmFsaWQoKSk7CisKKyAgICBhc3NlcnROb3ROdWxsKHBzaUNsYXNzKTsKKyAgICBhc3NlcnRFcXVhbHMoMSwgcHNpRmlsZS5nZXRDbGFzc2VzKCkubGVuZ3RoKTsKKyAgICBhc3NlcnRTYW1lKHBzaUNsYXNzLCBwc2lGaWxlLmdldENsYXNzZXMoKVswXSk7CisKKyAgICBhc3NlcnRUcnVlKHBzaUNsYXNzLmlzVmFsaWQoKSk7CisgICAgYXNzZXJ0RXF1YWxzKDEsIHBzaUNsYXNzLmdldEZpZWxkcygpLmxlbmd0aCk7CisgICAgYXNzZXJ0RXF1YWxzKCJmaWVsZDIiLCBwc2lDbGFzcy5nZXRGaWVsZHMoKVswXS5nZXROYW1lKCkpOworCisgICAgYXNzZXJ0RXF1YWxzKDIsIHBzaUNsYXNzLmdldE1ldGhvZHMoKS5sZW5ndGgpOworICAgIGFzc2VydEVxdWFscygiVGVzdENsYXNzIiwgcHNpQ2xhc3MuZ2V0TWV0aG9kcygpWzBdLmdldE5hbWUoKSk7CisgICAgYXNzZXJ0RXF1YWxzKCJtZXRob2QyIiwgcHNpQ2xhc3MuZ2V0TWV0aG9kcygpWzFdLmdldE5hbWUoKSk7CisgIH0KKworICBwcml2YXRlIHN0YXRpYyBWaXJ0dWFsRmlsZSBnZXRSb290RmlsZSgpIHsKKyAgICBmaW5hbCBTdHJpbmcgcGF0aCA9IFRFU1RfUk9PVC5yZXBsYWNlKEZpbGUuc2VwYXJhdG9yQ2hhciwgJy8nKTsKKyAgICBmaW5hbCBWaXJ0dWFsRmlsZSB2RGlyID0gTG9jYWxGaWxlU3lzdGVtLmdldEluc3RhbmNlKCkuZmluZEZpbGVCeVBhdGgocGF0aCk7CisgICAgYXNzZXJ0IHZEaXIgIT0gbnVsbCA6IHBhdGg7CisgICAgcmV0dXJuIHZEaXI7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0R2V0Q2xhc3NlcygpIHsKKyAgICBmaW5hbCBWaXJ0dWFsRmlsZSByb290RmlsZSA9IGdldFJvb3RGaWxlKCk7CisgICAgZmluYWwgVmlydHVhbEZpbGUgcGFjayA9IHJvb3RGaWxlLmZpbmRDaGlsZCgicGFjayIpOworICAgIGFzc2VydCBwYWNrICE9IG51bGw7CisgICAgVmlydHVhbEZpbGUgY2hpbGQgPSBwYWNrLmZpbmRDaGlsZCgiTXlDbGFzcy5jbGFzcyIpOworICAgIGFzc2VydE5vdE51bGwoY2hpbGQpOworICAgIFBzaUphdmFGaWxlIGZpbGUgPSAoUHNpSmF2YUZpbGUpbXlQc2lNYW5hZ2VyLmZpbmRGaWxlKGNoaWxkKTsKKyAgICBjaGVja1ZhbGlkKGZpbGUpOworICAgIGFzc2VydCBmaWxlICE9IG51bGw7CisgICAgUHNpQ2xhc3NbXSBjbGFzc2VzID0gZmlsZS5nZXRDbGFzc2VzKCk7CisgICAgYXNzZXJ0VHJ1ZShjbGFzc2VzLmxlbmd0aCA9PSAxKTsKKyAgICBQc2lDbGFzcyBhQ2xhc3MgPSBjbGFzc2VzWzBdOworICAgIGNoZWNrVmFsaWQoYUNsYXNzKTsKKyAgICBhc3NlcnRFcXVhbHMoZmlsZSwgYUNsYXNzLmdldFBhcmVudCgpKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RHZXRDbGFzc05hbWUoKSB7CisgICAgZmluYWwgVmlydHVhbEZpbGUgcm9vdEZpbGUgPSBnZXRSb290RmlsZSgpOworICAgIGZpbmFsIFZpcnR1YWxGaWxlIHBhY2sgPSByb290RmlsZS5maW5kQ2hpbGQoInBhY2siKTsKKyAgICBhc3NlcnQgcGFjayAhPSBudWxsOworICAgIFZpcnR1YWxGaWxlIGNoaWxkID0gcGFjay5maW5kQ2hpbGQoIk15Q2xhc3MuY2xhc3MiKTsKKyAgICBhc3NlcnROb3ROdWxsKGNoaWxkKTsKKyAgICBQc2lKYXZhRmlsZSBmaWxlID0gKFBzaUphdmFGaWxlKW15UHNpTWFuYWdlci5maW5kRmlsZShjaGlsZCk7CisgICAgYXNzZXJ0IGZpbGUgIT0gbnVsbDsKKyAgICBQc2lDbGFzc1tdIGNsYXNzZXMgPSBmaWxlLmdldENsYXNzZXMoKTsKKyAgICBhc3NlcnRUcnVlKGNsYXNzZXMubGVuZ3RoID09IDEpOworCisgICAgUHNpQ2xhc3MgYUNsYXNzID0gY2xhc3Nlc1swXTsKKyAgICBjaGVja1ZhbGlkKGFDbGFzcyk7CisgICAgYXNzZXJ0RXF1YWxzKCJNeUNsYXNzIiwgYUNsYXNzLmdldE5hbWUoKSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0R2V0Q2xhc3NRTmFtZSgpIHsKKyAgICBmaW5hbCBWaXJ0dWFsRmlsZSByb290RmlsZSA9IGdldFJvb3RGaWxlKCk7CisgICAgZmluYWwgVmlydHVhbEZpbGUgcGFjayA9IHJvb3RGaWxlLmZpbmRDaGlsZCgicGFjayIpOworICAgIGFzc2VydCBwYWNrICE9IG51bGw7CisgICAgVmlydHVhbEZpbGUgY2hpbGQgPSBwYWNrLmZpbmRDaGlsZCgiTXlDbGFzcy5jbGFzcyIpOworICAgIGFzc2VydE5vdE51bGwoY2hpbGQpOworICAgIFBzaUphdmFGaWxlIGZpbGUgPSAoUHNpSmF2YUZpbGUpbXlQc2lNYW5hZ2VyLmZpbmRGaWxlKGNoaWxkKTsKKyAgICBhc3NlcnQgZmlsZSAhPSBudWxsOworICAgIFBzaUNsYXNzW10gY2xhc3NlcyA9IGZpbGUuZ2V0Q2xhc3NlcygpOworICAgIGFzc2VydFRydWUoY2xhc3Nlcy5sZW5ndGggPT0gMSk7CisKKyAgICBQc2lDbGFzcyBhQ2xhc3MgPSBjbGFzc2VzWzBdOworICAgIGNoZWNrVmFsaWQoYUNsYXNzKTsKKyAgICBhc3NlcnRFcXVhbHMoInBhY2suTXlDbGFzcyIsIGFDbGFzcy5nZXRRdWFsaWZpZWROYW1lKCkpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEdldENvbnRhaW5pbmdGaWxlKCkgeworICAgIGZpbmFsIFZpcnR1YWxGaWxlIHJvb3RGaWxlID0gZ2V0Um9vdEZpbGUoKTsKKyAgICBmaW5hbCBWaXJ0dWFsRmlsZSBwYWNrID0gcm9vdEZpbGUuZmluZENoaWxkKCJwYWNrIik7CisgICAgYXNzZXJ0IHBhY2sgIT0gbnVsbDsKKyAgICBWaXJ0dWFsRmlsZSBjaGlsZCA9IHBhY2suZmluZENoaWxkKCJNeUNsYXNzLmNsYXNzIik7CisgICAgYXNzZXJ0Tm90TnVsbChjaGlsZCk7CisgICAgUHNpSmF2YUZpbGUgZmlsZSA9IChQc2lKYXZhRmlsZSlteVBzaU1hbmFnZXIuZmluZEZpbGUoY2hpbGQpOworICAgIGFzc2VydCBmaWxlICE9IG51bGw7CisgICAgUHNpQ2xhc3NbXSBjbGFzc2VzID0gZmlsZS5nZXRDbGFzc2VzKCk7CisgICAgYXNzZXJ0VHJ1ZShjbGFzc2VzLmxlbmd0aCA9PSAxKTsKKworICAgIFBzaUNsYXNzIGFDbGFzcyA9IGNsYXNzZXNbMF07CisgICAgY2hlY2tWYWxpZChhQ2xhc3MpOworICAgIGFzc2VydEVxdWFscyhmaWxlLCBhQ2xhc3MuZ2V0Q29udGFpbmluZ0ZpbGUoKSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0RmluZENsYXNzKCkgeworICAgIGdldEphdmFGYWNhZGUoKS5zZXRBc3NlcnRPbkZpbGVMb2FkaW5nRmlsdGVyKFZpcnR1YWxGaWxlRmlsdGVyLkFMTCk7CisKKyAgICBQc2lDbGFzcyBhQ2xhc3MgPSBteUphdmFGYWNhZGUuZmluZENsYXNzKCJwYWNrLk15Q2xhc3MiLCBHbG9iYWxTZWFyY2hTY29wZS5hbGxTY29wZShteVByb2plY3QpKTsKKyAgICBhc3NlcnROb3ROdWxsKGFDbGFzcyk7CisgICAgY2hlY2tWYWxpZChhQ2xhc3MpOworCisgICAgZ2V0SmF2YUZhY2FkZSgpLnNldEFzc2VydE9uRmlsZUxvYWRpbmdGaWx0ZXIoVmlydHVhbEZpbGVGaWx0ZXIuTk9ORSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0SXNJbnRlcmZhY2UoKSB7CisgICAgUHNpQ2xhc3MgYUNsYXNzID0gbXlKYXZhRmFjYWRlLmZpbmRDbGFzcygicGFjay5NeUNsYXNzIiwgR2xvYmFsU2VhcmNoU2NvcGUuYWxsU2NvcGUobXlQcm9qZWN0KSk7CisgICAgYXNzZXJ0IGFDbGFzcyAhPSBudWxsOworICAgIGNoZWNrVmFsaWQoYUNsYXNzKTsKKyAgICBhc3NlcnRUcnVlKCFhQ2xhc3MuaXNJbnRlcmZhY2UoKSk7CisgIH0KKworICBwcml2YXRlIHN0YXRpYyB2b2lkIGNoZWNrVmFsaWQoZmluYWwgUHNpRWxlbWVudCBlbHQpIHsKKyAgICBhc3NlcnRUcnVlKGVsdC5pc1ZhbGlkKCkpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFBhY2thZ2VOYW1lKCkgeworICAgIFBzaUNsYXNzIGFDbGFzcyA9IG15SmF2YUZhY2FkZS5maW5kQ2xhc3MoInBhY2suTXlDbGFzcyIsIEdsb2JhbFNlYXJjaFNjb3BlLmFsbFNjb3BlKG15UHJvamVjdCkpOworICAgIGFzc2VydCBhQ2xhc3MgIT0gbnVsbDsKKyAgICBjaGVja1ZhbGlkKGFDbGFzcyk7CisgICAgU3RyaW5nIHBhY2thZ2VOYW1lID0gKChQc2lKYXZhRmlsZSlhQ2xhc3MuZ2V0Q29udGFpbmluZ0ZpbGUoKSkuZ2V0UGFja2FnZU5hbWUoKTsKKyAgICBhc3NlcnRFcXVhbHMoInBhY2siLCBwYWNrYWdlTmFtZSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0R2V0RmllbGRzKCkgeworICAgIFBzaUNsYXNzIGFDbGFzcyA9IG15SmF2YUZhY2FkZS5maW5kQ2xhc3MoInBhY2suTXlDbGFzcyIsIEdsb2JhbFNlYXJjaFNjb3BlLmFsbFNjb3BlKG15UHJvamVjdCkpOworICAgIGFzc2VydCBhQ2xhc3MgIT0gbnVsbDsKKyAgICBjaGVja1ZhbGlkKGFDbGFzcyk7CisgICAgUHNpRmllbGRbXSBmaWVsZHMgPSBhQ2xhc3MuZ2V0RmllbGRzKCk7CisgICAgYXNzZXJ0RXF1YWxzKDIsIGZpZWxkcy5sZW5ndGgpOworICAgIGFzc2VydEVxdWFscyhhQ2xhc3MsIGZpZWxkc1swXS5nZXRQYXJlbnQoKSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0R2V0TWV0aG9kcygpIHsKKyAgICBQc2lDbGFzcyBhQ2xhc3MgPSBteUphdmFGYWNhZGUuZmluZENsYXNzKCJwYWNrLk15Q2xhc3MiLCBHbG9iYWxTZWFyY2hTY29wZS5hbGxTY29wZShteVByb2plY3QpKTsKKyAgICBhc3NlcnQgYUNsYXNzICE9IG51bGw7CisgICAgY2hlY2tWYWxpZChhQ2xhc3MpOworICAgIFBzaU1ldGhvZFtdIG1ldGhvZHMgPSBhQ2xhc3MuZ2V0TWV0aG9kcygpOworICAgIGFzc2VydEVxdWFscygzLCBtZXRob2RzLmxlbmd0aCk7CisgICAgYXNzZXJ0RXF1YWxzKGFDbGFzcywgbWV0aG9kc1swXS5nZXRQYXJlbnQoKSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0R2V0SW5uZXJDbGFzc2VzKCkgeworICAgIFBzaUNsYXNzIGFDbGFzcyA9IG15SmF2YUZhY2FkZS5maW5kQ2xhc3MoInBhY2suTXlDbGFzcyIsIEdsb2JhbFNlYXJjaFNjb3BlLmFsbFNjb3BlKG15UHJvamVjdCkpOworICAgIGFzc2VydCBhQ2xhc3MgIT0gbnVsbDsKKyAgICBjaGVja1ZhbGlkKGFDbGFzcyk7CisgICAgUHNpQ2xhc3NbXSBpbm5lcnMgPSBhQ2xhc3MuZ2V0SW5uZXJDbGFzc2VzKCk7CisgICAgYXNzZXJ0RXF1YWxzKDEsIGlubmVycy5sZW5ndGgpOworICAgIGFzc2VydEVxdWFscyhhQ2xhc3MsIGlubmVyc1swXS5nZXRQYXJlbnQoKSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0TW9kaWZpZXJMaXN0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgUHNpQ2xhc3MgYUNsYXNzID0gbXlKYXZhRmFjYWRlLmZpbmRDbGFzcygicGFjay5NeUNsYXNzIiwgR2xvYmFsU2VhcmNoU2NvcGUuYWxsU2NvcGUobXlQcm9qZWN0KSk7CisgICAgYXNzZXJ0IGFDbGFzcyAhPSBudWxsOworICAgIGNoZWNrVmFsaWQoYUNsYXNzKTsKKworICAgIFBzaU1vZGlmaWVyTGlzdCBtb2RpZmllckxpc3QgPSBhQ2xhc3MuZ2V0TW9kaWZpZXJMaXN0KCk7CisgICAgYXNzZXJ0IG1vZGlmaWVyTGlzdCAhPSBudWxsIDogYUNsYXNzOworICAgIGFzc2VydFRydWUobW9kaWZpZXJMaXN0Lmhhc01vZGlmaWVyUHJvcGVydHkoUHNpTW9kaWZpZXIuUFVCTElDKSk7CisgICAgYXNzZXJ0RmFsc2UobW9kaWZpZXJMaXN0Lmhhc01vZGlmaWVyUHJvcGVydHkoUHNpTW9kaWZpZXIuU1RBVElDKSk7CisgICAgYXNzZXJ0RXF1YWxzKG1vZGlmaWVyTGlzdC5nZXRQYXJlbnQoKSwgYUNsYXNzKTsKKworICAgIFBzaUZpZWxkIGZpZWxkID0gYUNsYXNzLmdldEZpZWxkcygpWzBdOworICAgIG1vZGlmaWVyTGlzdCA9IGZpZWxkLmdldE1vZGlmaWVyTGlzdCgpOworICAgIGFzc2VydCBtb2RpZmllckxpc3QgIT0gbnVsbCA6IGZpZWxkOworICAgIGFzc2VydFRydWUobW9kaWZpZXJMaXN0Lmhhc01vZGlmaWVyUHJvcGVydHkoUHNpTW9kaWZpZXIuUEFDS0FHRV9MT0NBTCkpOworICAgIGFzc2VydEVxdWFscyhtb2RpZmllckxpc3QuZ2V0UGFyZW50KCksIGZpZWxkKTsKKworICAgIFBzaU1ldGhvZCBtZXRob2QgPSBhQ2xhc3MuZ2V0TWV0aG9kcygpWzBdOworICAgIG1vZGlmaWVyTGlzdCA9IG1ldGhvZC5nZXRNb2RpZmllckxpc3QoKTsKKyAgICBhc3NlcnRUcnVlKG1vZGlmaWVyTGlzdC5oYXNNb2RpZmllclByb3BlcnR5KFBzaU1vZGlmaWVyLlBBQ0tBR0VfTE9DQUwpKTsKKyAgICBhc3NlcnRFcXVhbHMobW9kaWZpZXJMaXN0LmdldFBhcmVudCgpLCBtZXRob2QpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEdldEZpZWxkTmFtZSgpIHsKKyAgICBQc2lDbGFzcyBhQ2xhc3MgPSBteUphdmFGYWNhZGUuZmluZENsYXNzKCJwYWNrLk15Q2xhc3MiLCBHbG9iYWxTZWFyY2hTY29wZS5hbGxTY29wZShteVByb2plY3QpKTsKKyAgICBhc3NlcnQgYUNsYXNzICE9IG51bGw7CisgICAgY2hlY2tWYWxpZChhQ2xhc3MpOworICAgIGFzc2VydEVxdWFscygiZmllbGQxIiwgYUNsYXNzLmdldEZpZWxkcygpWzBdLmdldE5hbWUoKSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0R2V0TWV0aG9kTmFtZSgpIHsKKyAgICBQc2lDbGFzcyBhQ2xhc3MgPSBteUphdmFGYWNhZGUuZmluZENsYXNzKCJwYWNrLk15Q2xhc3MiLCBHbG9iYWxTZWFyY2hTY29wZS5hbGxTY29wZShteVByb2plY3QpKTsKKyAgICBhc3NlcnQgYUNsYXNzICE9IG51bGw7CisgICAgY2hlY2tWYWxpZChhQ2xhc3MpOworICAgIGFzc2VydEVxdWFscygibWV0aG9kMSIsIGFDbGFzcy5nZXRNZXRob2RzKClbMF0uZ2V0TmFtZSgpKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RGaW5kRmllbGRCeU5hbWUoKSB7CisgICAgUHNpQ2xhc3MgYUNsYXNzID0gbXlKYXZhRmFjYWRlLmZpbmRDbGFzcygicGFjay5NeUNsYXNzIiwgR2xvYmFsU2VhcmNoU2NvcGUuYWxsU2NvcGUobXlQcm9qZWN0KSk7CisgICAgYXNzZXJ0IGFDbGFzcyAhPSBudWxsOworICAgIGNoZWNrVmFsaWQoYUNsYXNzKTsKKyAgICBQc2lGaWVsZCBmaWVsZCA9IGFDbGFzcy5maW5kRmllbGRCeU5hbWUoImZpZWxkMSIsIGZhbHNlKTsKKyAgICBhc3NlcnROb3ROdWxsKGZpZWxkKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RJc0RlcHJlY2F0ZWQoKSB7CisgICAgUHNpQ2xhc3MgYUNsYXNzID0gbXlKYXZhRmFjYWRlLmZpbmRDbGFzcygicGFjay5NeUNsYXNzIiwgR2xvYmFsU2VhcmNoU2NvcGUuYWxsU2NvcGUobXlQcm9qZWN0KSk7CisgICAgYXNzZXJ0IGFDbGFzcyAhPSBudWxsOworICAgIGNoZWNrVmFsaWQoYUNsYXNzKTsKKyAgICBhc3NlcnRUcnVlKCFhQ2xhc3MuaXNEZXByZWNhdGVkKCkpOworCisgICAgUHNpRmllbGQgZmllbGQgPSBhQ2xhc3MuZmluZEZpZWxkQnlOYW1lKCJmaWVsZDEiLCBmYWxzZSk7CisgICAgYXNzZXJ0IGZpZWxkICE9IG51bGwgOiBhQ2xhc3M7CisgICAgYXNzZXJ0VHJ1ZShmaWVsZC5pc0RlcHJlY2F0ZWQoKSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0RmllbGRUeXBlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgUHNpQ2xhc3MgYUNsYXNzID0gbXlKYXZhRmFjYWRlLmZpbmRDbGFzcygicGFjay5NeUNsYXNzIiwgR2xvYmFsU2VhcmNoU2NvcGUuYWxsU2NvcGUobXlQcm9qZWN0KSk7CisgICAgYXNzZXJ0IGFDbGFzcyAhPSBudWxsOworICAgIGNoZWNrVmFsaWQoYUNsYXNzKTsKKworICAgIFBzaUZpZWxkIGZpZWxkMSA9IGFDbGFzcy5nZXRGaWVsZHMoKVswXTsKKyAgICBQc2lUeXBlIHR5cGUxID0gZmllbGQxLmdldFR5cGUoKTsKKworICAgIFBzaUZpZWxkIGZpZWxkMiA9IGFDbGFzcy5nZXRGaWVsZHMoKVsxXTsKKyAgICBQc2lUeXBlIHR5cGUyID0gZmllbGQyLmdldFR5cGUoKTsKKworICAgIGFzc2VydEVxdWFscyhQc2lUeXBlLklOVCwgdHlwZTEpOworICAgIGFzc2VydFRydWUodHlwZTIuZXF1YWxzVG9UZXh0KCJqYXZhLmxhbmcuT2JqZWN0W10iKSk7CisKKyAgICBhc3NlcnRFcXVhbHMoImludCIsIHR5cGUxLmdldFByZXNlbnRhYmxlVGV4dCgpKTsKKyAgICBhc3NlcnRFcXVhbHMoIk9iamVjdFtdIiwgdHlwZTIuZ2V0UHJlc2VudGFibGVUZXh0KCkpOworCisgICAgYXNzZXJ0VHJ1ZSh0eXBlMSBpbnN0YW5jZW9mIFBzaVByaW1pdGl2ZVR5cGUpOworICAgIGFzc2VydFRydWUoISh0eXBlMiBpbnN0YW5jZW9mIFBzaVByaW1pdGl2ZVR5cGUpKTsKKyAgICBhc3NlcnRUcnVlKHR5cGUyIGluc3RhbmNlb2YgUHNpQXJyYXlUeXBlKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RNZXRob2RUeXBlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgUHNpQ2xhc3MgYUNsYXNzID0gbXlKYXZhRmFjYWRlLmZpbmRDbGFzcygicGFjay5NeUNsYXNzIiwgR2xvYmFsU2VhcmNoU2NvcGUuYWxsU2NvcGUobXlQcm9qZWN0KSk7CisgICAgYXNzZXJ0IGFDbGFzcyAhPSBudWxsOworICAgIGNoZWNrVmFsaWQoYUNsYXNzKTsKKworICAgIFBzaU1ldGhvZCBtZXRob2QxID0gYUNsYXNzLmdldE1ldGhvZHMoKVswXTsKKyAgICBQc2lUeXBlRWxlbWVudCB0eXBlMSA9IG1ldGhvZDEuZ2V0UmV0dXJuVHlwZUVsZW1lbnQoKTsKKyAgICBhc3NlcnQgdHlwZTEgIT0gbnVsbCA6IG1ldGhvZDE7CisgICAgYXNzZXJ0RXF1YWxzKG1ldGhvZDEsIHR5cGUxLmdldFBhcmVudCgpKTsKKworICAgIGFzc2VydEVxdWFscygidm9pZCIsIHR5cGUxLmdldFRleHQoKSk7CisgICAgYXNzZXJ0VHJ1ZSh0eXBlMS5nZXRUeXBlKCkgaW5zdGFuY2VvZiBQc2lQcmltaXRpdmVUeXBlKTsKKyAgICBhc3NlcnRUcnVlKCEodHlwZTEuZ2V0VHlwZSgpIGluc3RhbmNlb2YgUHNpQXJyYXlUeXBlKSk7CisKKyAgICBQc2lNZXRob2QgbWV0aG9kMyA9IGFDbGFzcy5nZXRNZXRob2RzKClbMl07CisgICAgYXNzZXJ0TnVsbChtZXRob2QzLmdldFJldHVyblR5cGUoKSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0SXNDb25zdHJ1Y3RvcigpIHRocm93cyBFeGNlcHRpb24geworICAgIFBzaUNsYXNzIGFDbGFzcyA9IG15SmF2YUZhY2FkZS5maW5kQ2xhc3MoInBhY2suTXlDbGFzcyIsIEdsb2JhbFNlYXJjaFNjb3BlLmFsbFNjb3BlKG15UHJvamVjdCkpOworICAgIGFzc2VydCBhQ2xhc3MgIT0gbnVsbDsKKyAgICBjaGVja1ZhbGlkKGFDbGFzcyk7CisKKyAgICBQc2lNZXRob2QgbWV0aG9kMSA9IGFDbGFzcy5nZXRNZXRob2RzKClbMF07CisgICAgYXNzZXJ0RmFsc2UobWV0aG9kMS5pc0NvbnN0cnVjdG9yKCkpOworCisgICAgUHNpTWV0aG9kIG1ldGhvZDMgPSBhQ2xhc3MuZ2V0TWV0aG9kcygpWzJdOworICAgIGFzc2VydFRydWUobWV0aG9kMy5pc0NvbnN0cnVjdG9yKCkpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdENvbXBvbmVudFR5cGUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBQc2lDbGFzcyBhQ2xhc3MgPSBteUphdmFGYWNhZGUuZmluZENsYXNzKCJwYWNrLk15Q2xhc3MiLCBHbG9iYWxTZWFyY2hTY29wZS5hbGxTY29wZShteVByb2plY3QpKTsKKyAgICBhc3NlcnQgYUNsYXNzICE9IG51bGw7CisgICAgY2hlY2tWYWxpZChhQ2xhc3MpOworCisgICAgUHNpRmllbGQgZmllbGQgPSBhQ2xhc3MuZ2V0RmllbGRzKClbMV07CisgICAgUHNpVHlwZSB0eXBlID0gZmllbGQuZ2V0VHlwZSgpOworICAgIExPRy5hc3NlcnRUcnVlKHR5cGUgaW5zdGFuY2VvZiBQc2lBcnJheVR5cGUpOworICAgIFBzaVR5cGUgY29tcG9uZW50VHlwZSA9ICgoUHNpQXJyYXlUeXBlKXR5cGUpLmdldENvbXBvbmVudFR5cGUoKTsKKworICAgIGFzc2VydFRydWUoY29tcG9uZW50VHlwZS5lcXVhbHNUb1RleHQoQ29tbW9uQ2xhc3NOYW1lcy5KQVZBX0xBTkdfT0JKRUNUKSk7CisgICAgYXNzZXJ0RXF1YWxzKCJPYmplY3QiLCBjb21wb25lbnRUeXBlLmdldFByZXNlbnRhYmxlVGV4dCgpKTsKKyAgICBhc3NlcnRGYWxzZShjb21wb25lbnRUeXBlIGluc3RhbmNlb2YgUHNpUHJpbWl0aXZlVHlwZSk7CisgICAgYXNzZXJ0RmFsc2UoY29tcG9uZW50VHlwZSBpbnN0YW5jZW9mIFBzaUFycmF5VHlwZSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0VHlwZVJlZmVyZW5jZSgpIHRocm93cyBFeGNlcHRpb24geworICAgIFBzaUNsYXNzIGFDbGFzcyA9IG15SmF2YUZhY2FkZS5maW5kQ2xhc3MoInBhY2suTXlDbGFzcyIsIEdsb2JhbFNlYXJjaFNjb3BlLmFsbFNjb3BlKG15UHJvamVjdCkpOworICAgIGFzc2VydCBhQ2xhc3MgIT0gbnVsbDsKKyAgICBjaGVja1ZhbGlkKGFDbGFzcyk7CisKKyAgICBQc2lGaWVsZCBmaWVsZDEgPSBhQ2xhc3MuZ2V0RmllbGRzKClbMF07CisgICAgUHNpVHlwZSB0eXBlMSA9IGZpZWxkMS5nZXRUeXBlKCk7CisgICAgYXNzZXJ0TnVsbChQc2lVdGlsLnJlc29sdmVDbGFzc0luVHlwZSh0eXBlMSkpOworCisgICAgUHNpRmllbGQgZmllbGQyID0gYUNsYXNzLmdldEZpZWxkcygpWzFdOworICAgIFBzaVR5cGUgdHlwZTIgPSAoKFBzaUFycmF5VHlwZSlmaWVsZDIuZ2V0VHlwZSgpKS5nZXRDb21wb25lbnRUeXBlKCk7CisgICAgYXNzZXJ0VHJ1ZSh0eXBlMiBpbnN0YW5jZW9mIFBzaUNsYXNzVHlwZSk7CisKKyAgICBhc3NlcnRUcnVlKHR5cGUyLmVxdWFsc1RvVGV4dChDb21tb25DbGFzc05hbWVzLkpBVkFfTEFOR19PQkpFQ1QpKTsKKyAgICBhc3NlcnRFcXVhbHMoIk9iamVjdCIsIHR5cGUyLmdldFByZXNlbnRhYmxlVGV4dCgpKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RSZXNvbHZlVHlwZVJlZmVyZW5jZSgpIHRocm93cyBFeGNlcHRpb24geworICAgIFBzaUNsYXNzIGFDbGFzcyA9IG15SmF2YUZhY2FkZS5maW5kQ2xhc3MoInBhY2suTXlDbGFzcyIsIEdsb2JhbFNlYXJjaFNjb3BlLmFsbFNjb3BlKG15UHJvamVjdCkpOworICAgIGFzc2VydCBhQ2xhc3MgIT0gbnVsbDsKKyAgICBjaGVja1ZhbGlkKGFDbGFzcyk7CisKKyAgICBQc2lUeXBlIHR5cGUxID0gYUNsYXNzLmdldEZpZWxkcygpWzFdLmdldFR5cGUoKTsKKyAgICBQc2lFbGVtZW50IHRhcmdldDEgPSBQc2lVdGlsLnJlc29sdmVDbGFzc0luVHlwZSh0eXBlMSk7CisgICAgYXNzZXJ0Tm90TnVsbCh0YXJnZXQxKTsKKyAgICBQc2lDbGFzcyBvYmplY3RDbGFzcyA9IG15SmF2YUZhY2FkZS5maW5kQ2xhc3NlcyhDb21tb25DbGFzc05hbWVzLkpBVkFfTEFOR19PQkpFQ1QsIFJFU09MVkVfU0NPUEUpWzFdOworICAgIGFzc2VydEVxdWFscyhvYmplY3RDbGFzcywgdGFyZ2V0MSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0SW5pdGlhbGl6ZXIoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBQc2lDbGFzcyBhQ2xhc3MgPSBteUphdmFGYWNhZGUuZmluZENsYXNzKCJwYWNrLk15Q2xhc3MiLCBHbG9iYWxTZWFyY2hTY29wZS5hbGxTY29wZShteVByb2plY3QpKTsKKyAgICBhc3NlcnQgYUNsYXNzICE9IG51bGw7CisgICAgY2hlY2tWYWxpZChhQ2xhc3MpOworCisgICAgUHNpRmllbGQgZmllbGQxID0gYUNsYXNzLmdldEZpZWxkcygpWzBdOworICAgIGFzc2VydFRydWUoZmllbGQxLmhhc0luaXRpYWxpemVyKCkpOworICAgIFBzaUxpdGVyYWxFeHByZXNzaW9uIGluaXRpYWxpemVyID0gKFBzaUxpdGVyYWxFeHByZXNzaW9uKWZpZWxkMS5nZXRJbml0aWFsaXplcigpOworICAgIGFzc2VydCBpbml0aWFsaXplciAhPSBudWxsIDogZmllbGQxOworICAgIGFzc2VydEVxdWFscygiMTIzIiwgaW5pdGlhbGl6ZXIuZ2V0VGV4dCgpKTsKKyAgICBhc3NlcnRFcXVhbHMobmV3IEludGVnZXIoMTIzKSwgaW5pdGlhbGl6ZXIuZ2V0VmFsdWUoKSk7CisgICAgYXNzZXJ0RXF1YWxzKFBzaVR5cGUuSU5ULCBpbml0aWFsaXplci5nZXRUeXBlKCkpOworCisgICAgUHNpRmllbGQgZmllbGQyID0gYUNsYXNzLmdldEZpZWxkcygpWzFdOworICAgIGFzc2VydEZhbHNlKGZpZWxkMi5oYXNJbml0aWFsaXplcigpKTsKKyAgICBhc3NlcnROdWxsKGZpZWxkMi5nZXRJbml0aWFsaXplcigpKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RFeHRlbmRzTGlzdCgpIHRocm93cyBFeGNlcHRpb24geworICAgIFBzaUNsYXNzIGFDbGFzcyA9IG15SmF2YUZhY2FkZS5maW5kQ2xhc3MoInBhY2suTXlDbGFzcyIsIEdsb2JhbFNlYXJjaFNjb3BlLmFsbFNjb3BlKG15UHJvamVjdCkpOworICAgIGFzc2VydCBhQ2xhc3MgIT0gbnVsbDsKKyAgICBjaGVja1ZhbGlkKGFDbGFzcyk7CisKKyAgICBQc2lSZWZlcmVuY2VMaXN0IGxpc3QgPSBhQ2xhc3MuZ2V0RXh0ZW5kc0xpc3QoKTsKKyAgICBhc3NlcnQgbGlzdCAhPSBudWxsIDogYUNsYXNzOworICAgIFBzaUNsYXNzVHlwZVtdIHJlZnMgPSBsaXN0LmdldFJlZmVyZW5jZWRUeXBlcygpOworICAgIGFzc2VydEVxdWFscygxLCByZWZzLmxlbmd0aCk7CisgICAgYXNzZXJ0RXF1YWxzKCJBcnJheUxpc3QiLCByZWZzWzBdLmdldFByZXNlbnRhYmxlVGV4dCgpKTsKKyAgICBhc3NlcnRFcXVhbHMoImphdmEudXRpbC5BcnJheUxpc3QiLCByZWZzWzBdLmdldENhbm9uaWNhbFRleHQoKSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0SW1wbGVtZW50c0xpc3QoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBQc2lDbGFzcyBhQ2xhc3MgPSBteUphdmFGYWNhZGUuZmluZENsYXNzKCJwYWNrLk15Q2xhc3MiLCBHbG9iYWxTZWFyY2hTY29wZS5hbGxTY29wZShteVByb2plY3QpKTsKKyAgICBhc3NlcnQgYUNsYXNzICE9IG51bGw7CisgICAgY2hlY2tWYWxpZChhQ2xhc3MpOworCisgICAgUHNpUmVmZXJlbmNlTGlzdCBsaXN0ID0gYUNsYXNzLmdldEltcGxlbWVudHNMaXN0KCk7CisgICAgYXNzZXJ0IGxpc3QgIT0gbnVsbCA6IGFDbGFzczsKKyAgICBQc2lDbGFzc1R5cGVbXSByZWZzID0gbGlzdC5nZXRSZWZlcmVuY2VkVHlwZXMoKTsKKyAgICBhc3NlcnRFcXVhbHMoMSwgcmVmcy5sZW5ndGgpOworICAgIGFzc2VydEVxdWFscygiQ2xvbmVhYmxlIiwgcmVmc1swXS5nZXRQcmVzZW50YWJsZVRleHQoKSk7CisgICAgYXNzZXJ0RXF1YWxzKCJqYXZhLmxhbmcuQ2xvbmVhYmxlIiwgcmVmc1swXS5nZXRDYW5vbmljYWxUZXh0KCkpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFRocm93c0xpc3QoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBQc2lDbGFzcyBhQ2xhc3MgPSBteUphdmFGYWNhZGUuZmluZENsYXNzKCJwYWNrLk15Q2xhc3MiLCBHbG9iYWxTZWFyY2hTY29wZS5hbGxTY29wZShteVByb2plY3QpKTsKKyAgICBhc3NlcnQgYUNsYXNzICE9IG51bGw7CisgICAgY2hlY2tWYWxpZChhQ2xhc3MpOworCisgICAgUHNpUmVmZXJlbmNlTGlzdCBsaXN0ID0gYUNsYXNzLmdldE1ldGhvZHMoKVswXS5nZXRUaHJvd3NMaXN0KCk7CisKKyAgICBQc2lDbGFzc1R5cGVbXSByZWZzID0gbGlzdC5nZXRSZWZlcmVuY2VkVHlwZXMoKTsKKyAgICBhc3NlcnRFcXVhbHMoMiwgcmVmcy5sZW5ndGgpOworICAgIGFzc2VydEVxdWFscygiRXhjZXB0aW9uIiwgcmVmc1swXS5nZXRQcmVzZW50YWJsZVRleHQoKSk7CisgICAgYXNzZXJ0RXF1YWxzKCJJT0V4Y2VwdGlvbiIsIHJlZnNbMV0uZ2V0UHJlc2VudGFibGVUZXh0KCkpOworICAgIGFzc2VydEVxdWFscygiamF2YS5sYW5nLkV4Y2VwdGlvbiIsIHJlZnNbMF0uZ2V0Q2Fub25pY2FsVGV4dCgpKTsKKyAgICBhc3NlcnRFcXVhbHMoImphdmEuaW8uSU9FeGNlcHRpb24iLCByZWZzWzFdLmdldENhbm9uaWNhbFRleHQoKSk7CisgIH0KKworCisgIHB1YmxpYyB2b2lkIHRlc3RQYXJhbWV0ZXJzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgUHNpQ2xhc3MgYUNsYXNzID0gbXlKYXZhRmFjYWRlLmZpbmRDbGFzcygicGFjay5NeUNsYXNzIiwgR2xvYmFsU2VhcmNoU2NvcGUuYWxsU2NvcGUobXlQcm9qZWN0KSk7CisgICAgYXNzZXJ0IGFDbGFzcyAhPSBudWxsOworICAgIGNoZWNrVmFsaWQoYUNsYXNzKTsKKworICAgIFBzaVBhcmFtZXRlckxpc3QgbGlzdCA9IGFDbGFzcy5nZXRNZXRob2RzKClbMF0uZ2V0UGFyYW1ldGVyTGlzdCgpOworCisgICAgUHNpUGFyYW1ldGVyW10gcGFyYW1ldGVycyA9IGxpc3QuZ2V0UGFyYW1ldGVycygpOworICAgIGFzc2VydEVxdWFscygyLCBwYXJhbWV0ZXJzLmxlbmd0aCk7CisKKyAgICBQc2lUeXBlIHR5cGUxID0gcGFyYW1ldGVyc1swXS5nZXRUeXBlKCk7CisgICAgYXNzZXJ0RXF1YWxzKCJpbnRbXSIsIHR5cGUxLmdldFByZXNlbnRhYmxlVGV4dCgpKTsKKyAgICBhc3NlcnRUcnVlKHR5cGUxLmVxdWFsc1RvVGV4dCgiaW50W10iKSk7CisgICAgYXNzZXJ0VHJ1ZSh0eXBlMSBpbnN0YW5jZW9mIFBzaUFycmF5VHlwZSk7CisgICAgYXNzZXJ0TnVsbChQc2lVdGlsLnJlc29sdmVDbGFzc0luVHlwZSh0eXBlMSkpOworCisgICAgUHNpVHlwZSB0eXBlMiA9IHBhcmFtZXRlcnNbMV0uZ2V0VHlwZSgpOworICAgIGFzc2VydEVxdWFscygiT2JqZWN0IiwgdHlwZTIuZ2V0UHJlc2VudGFibGVUZXh0KCkpOworICAgIGFzc2VydFRydWUodHlwZTIuZXF1YWxzVG9UZXh0KENvbW1vbkNsYXNzTmFtZXMuSkFWQV9MQU5HX09CSkVDVCkpOworICAgIGFzc2VydEZhbHNlKHR5cGUyIGluc3RhbmNlb2YgUHNpQXJyYXlUeXBlKTsKKyAgICBhc3NlcnRGYWxzZSh0eXBlMiBpbnN0YW5jZW9mIFBzaVByaW1pdGl2ZVR5cGUpOworICAgIFBzaUNsYXNzIHRhcmdldDIgPSBQc2lVdGlsLnJlc29sdmVDbGFzc0luVHlwZSh0eXBlMik7CisgICAgYXNzZXJ0Tm90TnVsbCh0YXJnZXQyKTsKKyAgICBQc2lDbGFzcyBvYmplY3RDbGFzcyA9IG15SmF2YUZhY2FkZS5maW5kQ2xhc3NlcyhDb21tb25DbGFzc05hbWVzLkpBVkFfTEFOR19PQkpFQ1QsIFJFU09MVkVfU0NPUEUpWzFdOworICAgIGFzc2VydEVxdWFscyhvYmplY3RDbGFzcywgdGFyZ2V0Mik7CisKKyAgICBwYXJhbWV0ZXJzWzBdLmdldE1vZGlmaWVyTGlzdCgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEdlbmVyaWNDbGFzcygpIHRocm93cyBFeGNlcHRpb24geworICAgIGRpc2FibGVKZGsoKTsKKworICAgIFBzaUNsYXNzIG1hcCA9IG15SmF2YUZhY2FkZS5maW5kQ2xhc3MoImphdmEudXRpbC5IYXNoTWFwIiwgUkVTT0xWRV9TQ09QRSk7CisgICAgYXNzZXJ0IG1hcCAhPSBudWxsOworICAgIFBzaU1ldGhvZCBlbnRyeVNldCA9IG1hcC5maW5kTWV0aG9kc0J5TmFtZSgiZW50cnlTZXQiLCBmYWxzZSlbMF07CisgICAgUHNpQ2xhc3NUeXBlIHJldCA9IChQc2lDbGFzc1R5cGUpZW50cnlTZXQuZ2V0UmV0dXJuVHlwZSgpOworICAgIGFzc2VydCByZXQgIT0gbnVsbCA6IGVudHJ5U2V0OworICAgIGZpbmFsIFBzaUNsYXNzVHlwZS5DbGFzc1Jlc29sdmVSZXN1bHQgc2V0UmVzb2x2ZVJlc3VsdCA9IHJldC5yZXNvbHZlR2VuZXJpY3MoKTsKKyAgICBmaW5hbCBQc2lDbGFzcyBzZXRSZXNvbHZlUmVzdWx0RWxlbWVudCA9IHNldFJlc29sdmVSZXN1bHQuZ2V0RWxlbWVudCgpOworICAgIGFzc2VydCBzZXRSZXNvbHZlUmVzdWx0RWxlbWVudCAhPSBudWxsIDogc2V0UmVzb2x2ZVJlc3VsdDsKKyAgICBhc3NlcnRFcXVhbHMoQ29tbW9uQ2xhc3NOYW1lcy5KQVZBX1VUSUxfU0VULCBzZXRSZXNvbHZlUmVzdWx0RWxlbWVudC5nZXRRdWFsaWZpZWROYW1lKCkpOworICAgIGZpbmFsIFBzaVR5cGVQYXJhbWV0ZXIgdHlwZVBhcmFtZXRlciA9IHNldFJlc29sdmVSZXN1bHRFbGVtZW50LmdldFR5cGVQYXJhbWV0ZXJzKClbMF07CisKKyAgICBmaW5hbCBQc2lUeXBlIHN1YnN0aXR1dGVkUmVzdWx0ID0gc2V0UmVzb2x2ZVJlc3VsdC5nZXRTdWJzdGl0dXRvcigpLnN1YnN0aXR1dGUodHlwZVBhcmFtZXRlcik7CisgICAgYXNzZXJ0VHJ1ZShzdWJzdGl0dXRlZFJlc3VsdCBpbnN0YW5jZW9mIFBzaVdpbGRjYXJkVHlwZSk7CisgICAgYXNzZXJ0VHJ1ZSgoKFBzaVdpbGRjYXJkVHlwZSlzdWJzdGl0dXRlZFJlc3VsdCkuaXNFeHRlbmRzKCkpOworICAgIFBzaUNsYXNzVHlwZSBzZXRUeXBlID0gKFBzaUNsYXNzVHlwZSkoKFBzaVdpbGRjYXJkVHlwZSlzdWJzdGl0dXRlZFJlc3VsdCkuZ2V0Qm91bmQoKTsKKyAgICBhc3NlcnQgc2V0VHlwZSAhPSBudWxsOworICAgIGZpbmFsIFBzaUNsYXNzVHlwZS5DbGFzc1Jlc29sdmVSZXN1bHQgc2V0VHlwZVJlc29sdmVSZXN1bHQgPSBzZXRUeXBlLnJlc29sdmVHZW5lcmljcygpOworICAgIGZpbmFsIFBzaUNsYXNzIHNldFR5cGVSZXNvbHZlUmVzdWx0RWxlbWVudCA9IHNldFR5cGVSZXNvbHZlUmVzdWx0LmdldEVsZW1lbnQoKTsKKyAgICBhc3NlcnQgc2V0VHlwZVJlc29sdmVSZXN1bHRFbGVtZW50ICE9IG51bGwgOiBzZXRUeXBlUmVzb2x2ZVJlc3VsdDsKKyAgICBhc3NlcnRFcXVhbHMoImphdmEudXRpbC5NYXAuRW50cnkiLCBzZXRUeXBlUmVzb2x2ZVJlc3VsdEVsZW1lbnQuZ2V0UXVhbGlmaWVkTmFtZSgpKTsKKyAgICBmaW5hbCBQc2lUeXBlUGFyYW1ldGVyW10gdHlwZVBhcmFtZXRlcnMgPSBzZXRUeXBlUmVzb2x2ZVJlc3VsdEVsZW1lbnQuZ2V0VHlwZVBhcmFtZXRlcnMoKTsKKyAgICBhc3NlcnRFcXVhbHMoMiwgdHlwZVBhcmFtZXRlcnMubGVuZ3RoKTsKKyAgICBQc2lUeXBlW10gbWFwUGFyYW1zID0gbmV3IFBzaVR5cGVbXXsKKyAgICAgIHNldFR5cGVSZXNvbHZlUmVzdWx0LmdldFN1YnN0aXR1dG9yKCkuc3Vic3RpdHV0ZSh0eXBlUGFyYW1ldGVyc1swXSksCisgICAgICBzZXRUeXBlUmVzb2x2ZVJlc3VsdC5nZXRTdWJzdGl0dXRvcigpLnN1YnN0aXR1dGUodHlwZVBhcmFtZXRlcnNbMV0pCisgICAgfTsKKyAgICBhc3NlcnRFcXVhbHMoMiwgbWFwUGFyYW1zLmxlbmd0aCk7CisgICAgYXNzZXJ0RXF1YWxzKCJLIiwgbWFwUGFyYW1zWzBdLmdldENhbm9uaWNhbFRleHQoKSk7CisgICAgYXNzZXJ0VHJ1ZSgoKFBzaUNsYXNzVHlwZSltYXBQYXJhbXNbMF0pLnJlc29sdmUoKSBpbnN0YW5jZW9mIFBzaVR5cGVQYXJhbWV0ZXIpOworICAgIGFzc2VydEVxdWFscygiViIsIG1hcFBhcmFtc1sxXS5nZXRDYW5vbmljYWxUZXh0KCkpOworICAgIGFzc2VydFRydWUoKChQc2lDbGFzc1R5cGUpbWFwUGFyYW1zWzFdKS5yZXNvbHZlKCkgaW5zdGFuY2VvZiBQc2lUeXBlUGFyYW1ldGVyKTsKKyAgfQorCisgIHByaXZhdGUgdm9pZCBkaXNhYmxlSmRrKCkgeworICAgIE1vZHVsZVJvb3RNb2RpZmljYXRpb25VdGlsLnNldE1vZHVsZVNkayhteU1vZHVsZSwgbnVsbCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0R2VuZXJpY1JldHVyblR5cGUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkaXNhYmxlSmRrKCk7CisKKyAgICBmaW5hbCBQc2lDbGFzcyBtYXAgPSBteUphdmFGYWNhZGUuZmluZENsYXNzKENvbW1vbkNsYXNzTmFtZXMuSkFWQV9VVElMX01BUCwgUkVTT0xWRV9TQ09QRSk7CisgICAgYXNzZXJ0IG1hcCAhPSBudWxsOworICAgIGZpbmFsIFBzaUVsZW1lbnRGYWN0b3J5IGZhY3RvcnkgPSBteUphdmFGYWNhZGUuZ2V0RWxlbWVudEZhY3RvcnkoKTsKKyAgICBmaW5hbCBQc2lDbGFzc1R5cGUgdHlwZU1hcFN0cmluZ1RvSW50ZWdlciA9CisgICAgICAoUHNpQ2xhc3NUeXBlKWZhY3RvcnkuY3JlYXRlVHlwZUZyb21UZXh0KCJqYXZhLnV0aWwuTWFwIDxqYXZhLmxhbmcuU3RyaW5nLGphdmEubGFuZy5JbnRlZ2VyPiIsIG51bGwpOworICAgIGZpbmFsIFBzaUNsYXNzVHlwZS5DbGFzc1Jlc29sdmVSZXN1bHQgbWFwUmVzb2x2ZVJlc3VsdCA9IHR5cGVNYXBTdHJpbmdUb0ludGVnZXIucmVzb2x2ZUdlbmVyaWNzKCk7CisgICAgZmluYWwgUHNpQ2xhc3MgbWFwUmVzb2x2ZVJlc3VsdEVsZW1lbnQgPSBtYXBSZXNvbHZlUmVzdWx0LmdldEVsZW1lbnQoKTsKKyAgICBhc3NlcnQgbWFwUmVzb2x2ZVJlc3VsdEVsZW1lbnQgIT0gbnVsbCA6IHR5cGVNYXBTdHJpbmdUb0ludGVnZXI7CisgICAgYXNzZXJ0VHJ1ZShtYXBSZXNvbHZlUmVzdWx0RWxlbWVudC5lcXVhbHMobWFwKSk7CisKKyAgICBmaW5hbCBQc2lNZXRob2QgZW50cnlTZXRNZXRob2QgPSBtYXAuZmluZE1ldGhvZHNCeU5hbWUoImVudHJ5U2V0IiwgZmFsc2UpWzBdOworICAgIGZpbmFsIFBzaVR5cGUgZW50cnlTZXRSZXR1cm5UeXBlID0gZW50cnlTZXRNZXRob2QuZ2V0UmV0dXJuVHlwZSgpOworICAgIGFzc2VydCBlbnRyeVNldFJldHVyblR5cGUgIT0gbnVsbCA6IGVudHJ5U2V0TWV0aG9kOworICAgIGFzc2VydEVxdWFscygiamF2YS51dGlsLlNldDw/IGV4dGVuZHMgamF2YS51dGlsLk1hcC5FbnRyeTxLLFY+PiIsIGVudHJ5U2V0UmV0dXJuVHlwZS5nZXRDYW5vbmljYWxUZXh0KCkpOworICAgIGZpbmFsIFBzaVN1YnN0aXR1dG9yIHN1YnN0aXR1dG9yID0gKChQc2lDbGFzc1R5cGUpZW50cnlTZXRSZXR1cm5UeXBlKS5yZXNvbHZlR2VuZXJpY3MoKS5nZXRTdWJzdGl0dXRvcigpOworICAgIGFzc2VydEVxdWFscygiRSBvZiBqYXZhLnV0aWwuU2V0IC0+ID8gZXh0ZW5kcyBqYXZhLnV0aWwuTWFwLkVudHJ5PEssVj5cbiIsIHN1YnN0aXR1dG9yLnRvU3RyaW5nKCkpOworICAgIGZpbmFsIFBzaVR5cGUgdHlwZVNldE9mRW50cmllc09mU3RyaW5nQW5kSW50ZWdlciA9CisgICAgICBmYWN0b3J5LmNyZWF0ZVR5cGVGcm9tVGV4dCgiamF2YS51dGlsLlNldDw/IGV4dGVuZHMgamF2YS51dGlsLk1hcC5FbnRyeTxqYXZhLmxhbmcuU3RyaW5nLGphdmEubGFuZy5JbnRlZ2VyPj4iLCBudWxsKTsKKyAgICBmaW5hbCBQc2lUeXBlIHN1YnN0aXR1dGVkRW50cnlTZXRSZXR1cm5UeXBlID0gbWFwUmVzb2x2ZVJlc3VsdC5nZXRTdWJzdGl0dXRvcigpLnN1YnN0aXR1dGUoZW50cnlTZXRSZXR1cm5UeXBlKTsKKyAgICBhc3NlcnRUcnVlKHR5cGVTZXRPZkVudHJpZXNPZlN0cmluZ0FuZEludGVnZXIuZXF1YWxzKHN1YnN0aXR1dGVkRW50cnlTZXRSZXR1cm5UeXBlKSk7CisgICAgYXNzZXJ0VHJ1ZSh0eXBlU2V0T2ZFbnRyaWVzT2ZTdHJpbmdBbmRJbnRlZ2VyLmlzQXNzaWduYWJsZUZyb20oc3Vic3RpdHV0ZWRFbnRyeVNldFJldHVyblR5cGUpKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RHZW5lcmljSW5oZXJpdGFuY2UoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBmaW5hbCBTdHJpbmcgdGV4dCA9ICJpbXBvcnQgamF2YS51dGlsLio7XG4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICJjbGFzcyBEdW1teSB7XG4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICIgIHsgTWFwPEludGVnZXIsIEludGVnZXI+IGxpc3QgPSBuZXcgSGFzaE1hcDxJbnRlZ2VyLCBJbnRlZ2VyPigpO31cbiIgKworICAgICAgICAgICAgICAgICAgICAgICAgIn0iOworICAgIFBzaUphdmFGaWxlIGZpbGUgPSAoUHNpSmF2YUZpbGUpUHNpRmlsZUZhY3RvcnkuZ2V0SW5zdGFuY2UoZ2V0UHJvamVjdCgpKS5jcmVhdGVGaWxlRnJvbVRleHQoIkR1bW15LmphdmEiLCBKYXZhRmlsZVR5cGUuSU5TVEFOQ0UsIHRleHQpOworCisgICAgUHNpRGVjbGFyYXRpb25TdGF0ZW1lbnQgZGVjbCA9IChQc2lEZWNsYXJhdGlvblN0YXRlbWVudClmaWxlLmdldENsYXNzZXMoKVswXS5nZXRJbml0aWFsaXplcnMoKVswXS5nZXRCb2R5KCkuZ2V0U3RhdGVtZW50cygpWzBdOworICAgIFBzaVZhcmlhYmxlIGxpc3QgPSAoUHNpVmFyaWFibGUpZGVjbC5nZXREZWNsYXJlZEVsZW1lbnRzKClbMF07CisgICAgZmluYWwgUHNpRXhwcmVzc2lvbiBpbml0aWFsaXplciA9IGxpc3QuZ2V0SW5pdGlhbGl6ZXIoKTsKKyAgICBhc3NlcnQgaW5pdGlhbGl6ZXIgIT0gbnVsbCA6IGxpc3Q7CisgICAgZmluYWwgUHNpVHlwZSB0eXBlID0gaW5pdGlhbGl6ZXIuZ2V0VHlwZSgpOworICAgIGFzc2VydCB0eXBlICE9IG51bGwgOiBpbml0aWFsaXplcjsKKyAgICBhc3NlcnRUcnVlKGxpc3QuZ2V0VHlwZSgpLmlzQXNzaWduYWJsZUZyb20odHlwZSkpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFNpbXBsZXJHZW5lcmljSW5oZXJpdGFuY2UoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBQc2lFbGVtZW50RmFjdG9yeSBmYWN0b3J5ID0gbXlKYXZhRmFjYWRlLmdldEVsZW1lbnRGYWN0b3J5KCk7CisgICAgUHNpQ2xhc3MgbWFwID0gbXlKYXZhRmFjYWRlLmZpbmRDbGFzcyhDb21tb25DbGFzc05hbWVzLkpBVkFfVVRJTF9NQVAsIFJFU09MVkVfU0NPUEUpOworICAgIFBzaUNsYXNzIGhhc2hNYXAgPSBteUphdmFGYWNhZGUuZmluZENsYXNzKCJqYXZhLnV0aWwuSGFzaE1hcCIsIFJFU09MVkVfU0NPUEUpOworICAgIGFzc2VydCBtYXAgIT0gbnVsbCAmJiBoYXNoTWFwICE9IG51bGw7CisgICAgYXNzZXJ0VHJ1ZShmYWN0b3J5LmNyZWF0ZVR5cGUobWFwKS5pc0Fzc2lnbmFibGVGcm9tKGZhY3RvcnkuY3JlYXRlVHlwZShoYXNoTWFwKSkpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEFubm90YXRpb25zKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgUHNpQ2xhc3MgYUNsYXNzID0gbXlKYXZhRmFjYWRlLmZpbmRDbGFzcygicGFjay5Bbm5vdGF0ZWQiLCBHbG9iYWxTZWFyY2hTY29wZS5hbGxTY29wZShteVByb2plY3QpKTsKKyAgICBhc3NlcnQgYUNsYXNzICE9IG51bGw7CisgICAgY2hlY2tWYWxpZChhQ2xhc3MpOworCisgICAgUHNpTW9kaWZpZXJMaXN0IG1vZGlmaWVyTGlzdCA9IGFDbGFzcy5nZXRNb2RpZmllckxpc3QoKTsKKyAgICBhc3NlcnQgbW9kaWZpZXJMaXN0ICE9IG51bGwgOiBhQ2xhc3M7CisgICAgUHNpQW5ub3RhdGlvbltdIGFubm90YXRpb25zID0gbW9kaWZpZXJMaXN0LmdldEFubm90YXRpb25zKCk7CisgICAgYXNzZXJ0VHJ1ZShhbm5vdGF0aW9ucy5sZW5ndGggPT0gMSk7CisgICAgYXNzZXJ0VHJ1ZShhbm5vdGF0aW9uc1swXS5nZXRUZXh0KCkuZXF1YWxzKCJAcGFjay5Bbm5vdGF0aW9uIikpOworCisgICAgUHNpTWV0aG9kW10gbWV0aG9kcyA9IGFDbGFzcy5maW5kTWV0aG9kc0J5TmFtZSgiZm9vIiwgZmFsc2UpOworICAgIGFzc2VydFRydWUobWV0aG9kcy5sZW5ndGggPT0gMSk7CisgICAgYW5ub3RhdGlvbnMgPSBtZXRob2RzWzBdLmdldE1vZGlmaWVyTGlzdCgpLmdldEFubm90YXRpb25zKCk7CisgICAgYXNzZXJ0VHJ1ZShhbm5vdGF0aW9ucy5sZW5ndGggPT0gMSk7CisgICAgYXNzZXJ0VHJ1ZShhbm5vdGF0aW9uc1swXS5nZXRUZXh0KCkuZXF1YWxzKCJAcGFjay5Bbm5vdGF0aW9uIikpOworCisgICAgUHNpUGFyYW1ldGVyW10gcGFyYW1zID0gbWV0aG9kc1swXS5nZXRQYXJhbWV0ZXJMaXN0KCkuZ2V0UGFyYW1ldGVycygpOworICAgIGFzc2VydFRydWUocGFyYW1zLmxlbmd0aCA9PSAxKTsKKyAgICBtb2RpZmllckxpc3QgPSBwYXJhbXNbMF0uZ2V0TW9kaWZpZXJMaXN0KCk7CisgICAgYXNzZXJ0IG1vZGlmaWVyTGlzdCAhPSBudWxsIDogcGFyYW1zWzBdOworICAgIGFubm90YXRpb25zID0gbW9kaWZpZXJMaXN0LmdldEFubm90YXRpb25zKCk7CisgICAgYXNzZXJ0VHJ1ZShhbm5vdGF0aW9ucy5sZW5ndGggPT0gMSk7CisgICAgYXNzZXJ0VHJ1ZShhbm5vdGF0aW9uc1swXS5nZXRUZXh0KCkuZXF1YWxzKCJAcGFjay5Bbm5vdGF0aW9uIikpOworCisgICAgUHNpRmllbGRbXSBmaWVsZHMgPSBhQ2xhc3MuZ2V0RmllbGRzKCk7CisgICAgYXNzZXJ0VHJ1ZShmaWVsZHMubGVuZ3RoID09IDEpOworICAgIG1vZGlmaWVyTGlzdCA9IGZpZWxkc1swXS5nZXRNb2RpZmllckxpc3QoKTsKKyAgICBhc3NlcnQgbW9kaWZpZXJMaXN0ICE9IG51bGwgOiBmaWVsZHNbMF07CisgICAgYW5ub3RhdGlvbnMgPSBtb2RpZmllckxpc3QuZ2V0QW5ub3RhdGlvbnMoKTsKKyAgICBhc3NlcnRUcnVlKGFubm90YXRpb25zLmxlbmd0aCA9PSAxKTsKKyAgICBhc3NlcnRUcnVlKGFubm90YXRpb25zWzBdLmdldFRleHQoKS5lcXVhbHMoIkBwYWNrLkFubm90YXRpb24iKSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0QW5ub3RhdGlvbk1ldGhvZERlZmF1bHQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBQc2lDbGFzcyBhQ2xhc3MgPSBteUphdmFGYWNhZGUuZmluZENsYXNzKCJwYWNrLkFubm90YXRpb24iLCBHbG9iYWxTZWFyY2hTY29wZS5hbGxTY29wZShteVByb2plY3QpKTsKKyAgICBhc3NlcnQgYUNsYXNzICE9IG51bGw7CisgICAgY2hlY2tWYWxpZChhQ2xhc3MpOworCisgICAgUHNpTWV0aG9kW10gbWV0aG9kcyA9IGFDbGFzcy5maW5kTWV0aG9kc0J5TmFtZSgidmFsdWUiLCBmYWxzZSk7CisgICAgYXNzZXJ0VHJ1ZShtZXRob2RzLmxlbmd0aCA9PSAxICYmIG1ldGhvZHNbMF0gaW5zdGFuY2VvZiBQc2lBbm5vdGF0aW9uTWV0aG9kKTsKKyAgICBQc2lBbm5vdGF0aW9uTWVtYmVyVmFsdWUgZGVmYXVsdFZhbHVlID0gKChQc2lBbm5vdGF0aW9uTWV0aG9kKW1ldGhvZHNbMF0pLmdldERlZmF1bHRWYWx1ZSgpOworICAgIGFzc2VydFRydWUoZGVmYXVsdFZhbHVlICE9IG51bGwpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEluZGV0ZXJtaW5hdGVJbkFubm90YXRpb25NZXRob2REZWZhdWx0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZmluYWwgUHNpQ2xhc3MgYUNsYXNzID0gbXlKYXZhRmFjYWRlLmZpbmRDbGFzcygicGFjay5Bbm5vdGF0aW9uMiIsIEdsb2JhbFNlYXJjaFNjb3BlLmFsbFNjb3BlKG15UHJvamVjdCkpOworICAgIGFzc2VydCBhQ2xhc3MgIT0gbnVsbDsKKyAgICBjaGVja1ZhbGlkKGFDbGFzcyk7CisKKyAgICBmb3IgKFBzaU1ldGhvZCBtZXRob2QgOiBhQ2xhc3MuZ2V0TWV0aG9kcygpKSB7CisgICAgICBhc3NlcnQgbWV0aG9kIGluc3RhbmNlb2YgUHNpQW5ub3RhdGlvbk1ldGhvZCA6IG1ldGhvZDsKKyAgICAgIHRyeSB7CisgICAgICAgIGZpbmFsIFBzaUFubm90YXRpb25NZW1iZXJWYWx1ZSBkZWZhdWx0VmFsdWUgPSAoKFBzaUFubm90YXRpb25NZXRob2QpbWV0aG9kKS5nZXREZWZhdWx0VmFsdWUoKTsKKyAgICAgICAgYXNzZXJ0IGRlZmF1bHRWYWx1ZSBpbnN0YW5jZW9mIFBzaUJpbmFyeUV4cHJlc3Npb24gOiBkZWZhdWx0VmFsdWU7CisgICAgICAgIGZpbmFsIFBzaVByaW1pdGl2ZVR5cGUgdHlwZSA9IG1ldGhvZC5nZXROYW1lKCkuc3RhcnRzV2l0aCgiZiIpID8gUHNpVHlwZS5GTE9BVCA6IFBzaVR5cGUuRE9VQkxFOworICAgICAgICBhc3NlcnRFcXVhbHModHlwZSwgKChQc2lCaW5hcnlFeHByZXNzaW9uKWRlZmF1bHRWYWx1ZSkuZ2V0VHlwZSgpKTsKKyAgICAgIH0KKyAgICAgIGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgICAgICBmaW5hbCBTdHJpbmcgdmFsdWVUZXh0ID0gKChQc2lNZXRob2RTdHViKSgoU3R1YkJhc2VkUHNpRWxlbWVudCltZXRob2QpLmdldFN0dWIoKSkuZ2V0RGVmYXVsdFZhbHVlVGV4dCgpOworICAgICAgICBmYWlsKCJVbmFibGUgdG8gY29tcHV0ZSBkZWZhdWx0IHZhbHVlIG9mIG1ldGhvZCAiICsgbWV0aG9kICsgIiBmcm9tIHRleHQgJyIgKyB2YWx1ZVRleHQgKyAiJzogIiArIGUuZ2V0TWVzc2FnZSgpKTsKKyAgICAgIH0KKyAgICB9CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0RW51bSgpIHRocm93cyBFeGNlcHRpb24geworICAgIFBzaUNsYXNzIGFDbGFzcyA9IG15SmF2YUZhY2FkZS5maW5kQ2xhc3MoInBhY2suTXlFbnVtIiwgR2xvYmFsU2VhcmNoU2NvcGUuYWxsU2NvcGUobXlQcm9qZWN0KSk7CisgICAgYXNzZXJ0IGFDbGFzcyAhPSBudWxsOworICAgIGNoZWNrVmFsaWQoYUNsYXNzKTsKKworICAgIGFzc2VydFRydWUoYUNsYXNzLmlzRW51bSgpKTsKKyAgICBQc2lGaWVsZFtdIGZpZWxkcyA9IGFDbGFzcy5nZXRGaWVsZHMoKTsKKyAgICBQc2lDbGFzc1R5cGUgdHlwZSA9IG15SmF2YUZhY2FkZS5nZXRFbGVtZW50RmFjdG9yeSgpLmNyZWF0ZVR5cGUoYUNsYXNzKTsKKyAgICBjaGVja0VudW1Db25zdGFudCgiUkVEIiwgZmllbGRzWzBdLCB0eXBlKTsKKyAgICBjaGVja0VudW1Db25zdGFudCgiR1JFRU4iLCBmaWVsZHNbMV0sIHR5cGUpOworICAgIGNoZWNrRW51bUNvbnN0YW50KCJCTFVFIiwgZmllbGRzWzJdLCB0eXBlKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RWYXJpYW5jZSgpIHRocm93cyBFeGNlcHRpb24geworICAgIGZpbmFsIFBzaUNsYXNzIGFDbGFzcyA9IG15SmF2YUZhY2FkZS5maW5kQ2xhc3MoInBhY2suVmFyaWFuY2UiLCBSRVNPTFZFX1NDT1BFKTsKKyAgICBhc3NlcnQgYUNsYXNzICE9IG51bGw7CisgICAgY2hlY2tWYWxpZChhQ2xhc3MpOworCisgICAgZmluYWwgUHNpTWV0aG9kW10gbWV0aG9kc0J5TmFtZSA9IGFDbGFzcy5maW5kTWV0aG9kc0J5TmFtZSgibWV0aG9kIiwgZmFsc2UpOworICAgIGFzc2VydEVxdWFscygxLCBtZXRob2RzQnlOYW1lLmxlbmd0aCk7CisgICAgZmluYWwgUHNpTWV0aG9kIG1ldGhvZHNXaXRoUmV0dXJuVHlwZSA9IG1ldGhvZHNCeU5hbWVbMF07CisgICAgZmluYWwgUHNpVHlwZSByZXR1cm5UeXBlID0gbWV0aG9kc1dpdGhSZXR1cm5UeXBlLmdldFJldHVyblR5cGUoKTsKKyAgICBhc3NlcnQgcmV0dXJuVHlwZSAhPSBudWxsIDogbWV0aG9kc1dpdGhSZXR1cm5UeXBlOworICAgIGFzc2VydEVxdWFscygicGFjay5QYXJhbWV0cml6ZWQ8PyBleHRlbmRzIFQ+IiwgcmV0dXJuVHlwZS5nZXRDYW5vbmljYWxUZXh0KCkpOworCisgICAgLy9UT0RPW3ZlbiwgbWF4XTogQWZ0ZXIgZml4IGZvciBsb2FkaW5nIGRlY29tcGlsZWQgc3R1ZmYgdGhlIHJlc3VsdCBoYWQgYmVlbiBjaGFuZ2UuIE5lZWQgdG8gZGlzY3VzcyB3aGV0aGVyIHRoaXMgaXMgaW1wb3J0YW50CisgICAgLy9lbm91Z2ggdG8gdHJ5IHRvIGNvbmZvcm0gb2xkIG91dHB1dC4KKyAgICAvL2Fzc2VydEVxdWFscygicHVibGljIFBhcmFtZXRyaXplZDw/IGV4dGVuZHMgVD4gbWV0aG9kKCkgeyAvKiBjb21waWxlZCBjb2RlICovIH0iLCBtZXRob2RzV2l0aFJldHVyblR5cGUuZ2V0VGV4dCgpKTsKKyAgICBhc3NlcnRFcXVhbHMoInB1YmxpYyBwYWNrLlBhcmFtZXRyaXplZDw/IGV4dGVuZHMgVD4gbWV0aG9kKCkgeyAvKiBjb21waWxlZCBjb2RlICovIH0iLCBtZXRob2RzV2l0aFJldHVyblR5cGUuZ2V0VGV4dCgpKTsKKyAgfQorCisgIHByaXZhdGUgc3RhdGljIHZvaWQgY2hlY2tFbnVtQ29uc3RhbnQoU3RyaW5nIG5hbWUsIFBzaUZpZWxkIGZpZWxkLCBQc2lDbGFzc1R5cGUgdHlwZSkgeworICAgIGFzc2VydEVxdWFscyhuYW1lLCBmaWVsZC5nZXROYW1lKCkpOworICAgIGFzc2VydFRydWUoZmllbGQgaW5zdGFuY2VvZiBQc2lFbnVtQ29uc3RhbnQpOworICAgIGFzc2VydEVxdWFscyh0eXBlLCBmaWVsZC5nZXRUeXBlKCkpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEludmFyaWFudFBhcnNpbmcoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBmaW5hbCBQc2lDbGFzcyBjb2xsZWN0aW9uID0gbXlKYXZhRmFjYWRlLmZpbmRDbGFzcygicGFjay5WYXJpYW5jZSIsIFJFU09MVkVfU0NPUEUpOworICAgIGFzc2VydE5vdE51bGwoY29sbGVjdGlvbik7CisgICAgZmluYWwgUHNpTWV0aG9kW10gbWV0aG9kcyA9IGNvbGxlY3Rpb24uZmluZE1ldGhvZHNCeU5hbWUoInJlbW92ZUFsbCIsIGZhbHNlKTsKKyAgICBhc3NlcnRFcXVhbHMoMSwgbWV0aG9kcy5sZW5ndGgpOworICAgIGZpbmFsIFBzaVBhcmFtZXRlcltdIHBhcmFtZXRlcnMgPSBtZXRob2RzWzBdLmdldFBhcmFtZXRlckxpc3QoKS5nZXRQYXJhbWV0ZXJzKCk7CisgICAgYXNzZXJ0RXF1YWxzKDEsIHBhcmFtZXRlcnMubGVuZ3RoKTsKKyAgICBmaW5hbCBQc2lUeXBlIHBhcmFtZXRlclR5cGUgPSBwYXJhbWV0ZXJzWzBdLmdldFR5cGUoKTsKKyAgICBhc3NlcnRUcnVlKHBhcmFtZXRlclR5cGUgaW5zdGFuY2VvZiBQc2lDbGFzc1R5cGUpOworICAgIGZpbmFsIFBzaUNsYXNzVHlwZSBwc2lDbGFzc1R5cGUgPSAoKFBzaUNsYXNzVHlwZSlwYXJhbWV0ZXJUeXBlKTsKKyAgICBmaW5hbCBQc2lDbGFzc1R5cGUuQ2xhc3NSZXNvbHZlUmVzdWx0IHJlc29sdmVSZXN1bHQgPSBwc2lDbGFzc1R5cGUucmVzb2x2ZUdlbmVyaWNzKCk7CisgICAgZmluYWwgUHNpQ2xhc3MgcmVzb2x2ZVJlc3VsdEVsZW1lbnQgPSByZXNvbHZlUmVzdWx0LmdldEVsZW1lbnQoKTsKKyAgICBhc3NlcnQgcmVzb2x2ZVJlc3VsdEVsZW1lbnQgIT0gbnVsbCA6IHBzaUNsYXNzVHlwZTsKKyAgICBmaW5hbCBQc2lUeXBlUGFyYW1ldGVyW10gdHlwZVBhcmFtZXRlcnMgPSByZXNvbHZlUmVzdWx0RWxlbWVudC5nZXRUeXBlUGFyYW1ldGVycygpOworICAgIGFzc2VydEVxdWFscygxLCB0eXBlUGFyYW1ldGVycy5sZW5ndGgpOworICAgIGZpbmFsIFBzaVR5cGUgc3Vic3RpdHV0aW9uID0gcmVzb2x2ZVJlc3VsdC5nZXRTdWJzdGl0dXRvcigpLnN1YnN0aXR1dGUodHlwZVBhcmFtZXRlcnNbMF0pOworICAgIGFzc2VydFRydWUoc3Vic3RpdHV0aW9uIGluc3RhbmNlb2YgUHNpV2lsZGNhcmRUeXBlKTsKKyAgICBhc3NlcnRFcXVhbHMoUHNpV2lsZGNhcmRUeXBlLmNyZWF0ZVVuYm91bmRlZChteVBzaU1hbmFnZXIpLCBzdWJzdGl0dXRpb24pOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEludmFyaWFudFBhcnNpbmcyKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZGlzYWJsZUpkaygpOworICAgIGZpbmFsIFBzaUNsYXNzIGNvbGxlY3Rpb24gPSBteUphdmFGYWNhZGUuZmluZENsYXNzKCJqYXZhLnV0aWwuQ29sbGVjdGlvbiIsIFJFU09MVkVfU0NPUEUpOworICAgIGFzc2VydE5vdE51bGwoY29sbGVjdGlvbik7CisgICAgZmluYWwgUHNpTWV0aG9kW10gbWV0aG9kcyA9IGNvbGxlY3Rpb24uZmluZE1ldGhvZHNCeU5hbWUoInJlbW92ZUFsbCIsIGZhbHNlKTsKKyAgICBhc3NlcnRFcXVhbHMoMSwgbWV0aG9kcy5sZW5ndGgpOworICAgIGZpbmFsIFBzaVBhcmFtZXRlcltdIHBhcmFtZXRlcnMgPSBtZXRob2RzWzBdLmdldFBhcmFtZXRlckxpc3QoKS5nZXRQYXJhbWV0ZXJzKCk7CisgICAgYXNzZXJ0RXF1YWxzKDEsIHBhcmFtZXRlcnMubGVuZ3RoKTsKKyAgICBmaW5hbCBQc2lUeXBlIHBhcmFtZXRlclR5cGUgPSBwYXJhbWV0ZXJzWzBdLmdldFR5cGUoKTsKKyAgICBhc3NlcnRUcnVlKHBhcmFtZXRlclR5cGUgaW5zdGFuY2VvZiBQc2lDbGFzc1R5cGUpOworICAgIGZpbmFsIFBzaUNsYXNzVHlwZSBwc2lDbGFzc1R5cGUgPSAoKFBzaUNsYXNzVHlwZSlwYXJhbWV0ZXJUeXBlKTsKKyAgICBmaW5hbCBQc2lDbGFzc1R5cGUuQ2xhc3NSZXNvbHZlUmVzdWx0IHJlc29sdmVSZXN1bHQgPSBwc2lDbGFzc1R5cGUucmVzb2x2ZUdlbmVyaWNzKCk7CisgICAgZmluYWwgUHNpQ2xhc3MgcmVzb2x2ZVJlc3VsdEVsZW1lbnQgPSByZXNvbHZlUmVzdWx0LmdldEVsZW1lbnQoKTsKKyAgICBhc3NlcnQgcmVzb2x2ZVJlc3VsdEVsZW1lbnQgIT0gbnVsbCA6IHBzaUNsYXNzVHlwZTsKKyAgICBmaW5hbCBQc2lUeXBlUGFyYW1ldGVyW10gdHlwZVBhcmFtZXRlcnMgPSByZXNvbHZlUmVzdWx0RWxlbWVudC5nZXRUeXBlUGFyYW1ldGVycygpOworICAgIGFzc2VydEVxdWFscygxLCB0eXBlUGFyYW1ldGVycy5sZW5ndGgpOworICAgIGZpbmFsIFBzaVR5cGUgc3Vic3RpdHV0aW9uID0gcmVzb2x2ZVJlc3VsdC5nZXRTdWJzdGl0dXRvcigpLnN1YnN0aXR1dGUodHlwZVBhcmFtZXRlcnNbMF0pOworICAgIGFzc2VydFRydWUoc3Vic3RpdHV0aW9uIGluc3RhbmNlb2YgUHNpV2lsZGNhcmRUeXBlKTsKKyAgICBhc3NlcnRFcXVhbHMoUHNpV2lsZGNhcmRUeXBlLmNyZWF0ZVVuYm91bmRlZChteVBzaU1hbmFnZXIpLCBzdWJzdGl0dXRpb24pOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdE1vZGlmaWVycygpIHRocm93cyBFeGNlcHRpb24geworICAgIGZpbmFsIFBzaUNsYXNzIHBzaUNsYXNzID0gbXlKYXZhRmFjYWRlLmZpbmRDbGFzcygicGFjay5Nb2RpZmllcnMiLCBSRVNPTFZFX1NDT1BFKTsKKyAgICBhc3NlcnROb3ROdWxsKHBzaUNsYXNzKTsKKyAgICBhc3NlcnRFcXVhbHMoInB1YmxpYyBjbGFzcyBNb2RpZmllcnMge1xuIiArCisgICAgICAgICAgICAgICAgICIgICAgcHJpdmF0ZSB0cmFuc2llbnQgaW50IGYxO1xuIiArCisgICAgICAgICAgICAgICAgICIgICAgcHJpdmF0ZSB2b2xhdGlsZSBpbnQgZjI7XG4iICsKKyAgICAgICAgICAgICAgICAgIlxuIiArCisgICAgICAgICAgICAgICAgICIgICAgcHVibGljIE1vZGlmaWVycygpIHsgLyogY29tcGlsZWQgY29kZSAqLyB9XG4iICsKKyAgICAgICAgICAgICAgICAgIlxuIiArCisgICAgICAgICAgICAgICAgICIgICAgcHJpdmF0ZSB2b2lkIG0xKGludC4uLiBpKSB7IC8qIGNvbXBpbGVkIGNvZGUgKi8gfVxuIiArCisgICAgICAgICAgICAgICAgICJcbiIgKworICAgICAgICAgICAgICAgICAiICAgIHByaXZhdGUgc3luY2hyb25pemVkIHZvaWQgbTIoKSB7IC8qIGNvbXBpbGVkIGNvZGUgKi8gfVxuIiArCisgICAgICAgICAgICAgICAgICJ9IiwKKyAgICAgICAgICAgICAgICAgcHNpQ2xhc3MuZ2V0VGV4dCgpLnRyaW0oKSk7CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9wc2kvQ29kZUZyYWdtZW50c1Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9wc2kvQ29kZUZyYWdtZW50c1Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YzY4MTYwCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL3BzaS9Db2RlRnJhZ21lbnRzVGVzdC5qYXZhCkBAIC0wLDAgKzEsMTYgQEAKK3BhY2thZ2UgY29tLmludGVsbGlqLnBzaTsKKworaW1wb3J0IGNvbS5pbnRlbGxpai50ZXN0RnJhbWV3b3JrLlBsYXRmb3JtVGVzdENhc2U7CitpbXBvcnQgY29tLmludGVsbGlqLnRlc3RGcmFtZXdvcmsuUHNpVGVzdENhc2U7CitpbXBvcnQgY29tLmludGVsbGlqLnBzaS5zZWFyY2guR2xvYmFsU2VhcmNoU2NvcGU7CisKK0BQbGF0Zm9ybVRlc3RDYXNlLldyYXBJbkNvbW1hbmQKK3B1YmxpYyBjbGFzcyBDb2RlRnJhZ21lbnRzVGVzdCBleHRlbmRzIFBzaVRlc3RDYXNleworICBwdWJsaWMgdm9pZCB0ZXN0QWRkSW1wb3J0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgUHNpQ29kZUZyYWdtZW50IGZyYWdtZW50ID0gSmF2YUNvZGVGcmFnbWVudEZhY3RvcnkuZ2V0SW5zdGFuY2UobXlQcm9qZWN0KS5jcmVhdGVFeHByZXNzaW9uQ29kZUZyYWdtZW50KCJBQUEuZm9vKCkiLCBudWxsLCBudWxsLCBmYWxzZSk7CisgICAgUHNpQ2xhc3MgYXJyYXlMaXN0Q2xhc3MgPSBteUphdmFGYWNhZGUuZmluZENsYXNzKCJqYXZhLnV0aWwuQXJyYXlMaXN0IiwgR2xvYmFsU2VhcmNoU2NvcGUuYWxsU2NvcGUoZ2V0UHJvamVjdCgpKSk7CisgICAgUHNpUmVmZXJlbmNlIHJlZiA9IGZyYWdtZW50LmZpbmRSZWZlcmVuY2VBdCgwKTsKKyAgICByZWYuYmluZFRvRWxlbWVudChhcnJheUxpc3RDbGFzcyk7CisgICAgYXNzZXJ0RXF1YWxzKCJBcnJheUxpc3QuZm9vKCkiLCBmcmFnbWVudC5nZXRUZXh0KCkpOworICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovcHNpL0NvbnN0YW50VmFsdWVzVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL3BzaS9Db25zdGFudFZhbHVlc1Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZTg1MjNkCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL3BzaS9Db25zdGFudFZhbHVlc1Rlc3QuamF2YQpAQCAtMCwwICsxLDI2NiBAQAorcGFja2FnZSBjb20uaW50ZWxsaWoucHNpOworCitpbXBvcnQgY29tLmludGVsbGlqLkphdmFUZXN0VXRpbDsKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS5hcHBsaWNhdGlvbi5BcHBsaWNhdGlvbk1hbmFnZXI7CitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkuZmlsZVR5cGVzLlN0ZEZpbGVUeXBlczsKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS5yb290cy5Nb2R1bGVSb290TW9kaWZpY2F0aW9uVXRpbDsKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS52ZnMuVmlydHVhbEZpbGU7CitpbXBvcnQgY29tLmludGVsbGlqLnBzaS5pbXBsLkphdmFDb25zdGFudEV4cHJlc3Npb25FdmFsdWF0b3I7CitpbXBvcnQgY29tLmludGVsbGlqLnBzaS5zZWFyY2guR2xvYmFsU2VhcmNoU2NvcGU7CitpbXBvcnQgY29tLmludGVsbGlqLnRlc3RGcmFtZXdvcmsuUHNpVGVzdENhc2U7CitpbXBvcnQgY29tLmludGVsbGlqLnRlc3RGcmFtZXdvcmsuUHNpVGVzdFV0aWw7CisKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworCitwdWJsaWMgY2xhc3MgQ29uc3RhbnRWYWx1ZXNUZXN0IGV4dGVuZHMgUHNpVGVzdENhc2V7CisgIHByaXZhdGUgUHNpQ2xhc3MgbXlDbGFzczsKKworICBAT3ZlcnJpZGUKKyAgcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBzdXBlci5zZXRVcCgpOworCisgICAgQXBwbGljYXRpb25NYW5hZ2VyLmdldEFwcGxpY2F0aW9uKCkucnVuV3JpdGVBY3Rpb24oCisgICAgICBuZXcgUnVubmFibGUoKSB7CisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgdm9pZCBydW4oKSB7CisgICAgICAgICAgdHJ5eworICAgICAgICAgICAgU3RyaW5nIHJvb3RQYXRoID0gSmF2YVRlc3RVdGlsLmdldEphdmFUZXN0RGF0YVBhdGgoKSArICIvcHNpL2NvbnN0YW50VmFsdWVzIjsKKyAgICAgICAgICAgIFZpcnR1YWxGaWxlIHJvb3QgPSBQc2lUZXN0VXRpbC5jcmVhdGVUZXN0UHJvamVjdFN0cnVjdHVyZShteVByb2plY3QsIG15TW9kdWxlLCByb290UGF0aCwgbXlGaWxlc1RvRGVsZXRlLCB0cnVlKTsKKyAgICAgICAgICAgIE1vZHVsZVJvb3RNb2RpZmljYXRpb25VdGlsLmFkZE1vZHVsZUxpYnJhcnkobXlNb2R1bGUsIHJvb3QuZ2V0VXJsKCkpOworICAgICAgICAgIH0KKyAgICAgICAgICBjYXRjaChFeGNlcHRpb24gZSl7CisgICAgICAgICAgICBMT0cuZXJyb3IoZSk7CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICB9CisgICAgKTsKKworICAgIG15Q2xhc3MgPSBteUphdmFGYWNhZGUuZmluZENsYXNzKCJDbGFzc1dpdGhDb25zdGFudHMiLCBHbG9iYWxTZWFyY2hTY29wZS5hbGxTY29wZShnZXRQcm9qZWN0KCkpKTsKKyAgICBhc3NlcnROb3ROdWxsKG15Q2xhc3MpOworICAgIGFzc2VydEVxdWFscyhTdGRGaWxlVHlwZXMuSkFWQSwgbXlDbGFzcy5nZXRDb250YWluaW5nRmlsZSgpLmdldFZpcnR1YWxGaWxlKCkuZ2V0RmlsZVR5cGUoKSk7CisgIH0KKworICBAT3ZlcnJpZGUKKyAgcHJvdGVjdGVkIHZvaWQgaW52b2tlVGVzdFJ1bm5hYmxlKFJ1bm5hYmxlIHJ1bm5hYmxlKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBzdXBlci5pbnZva2VUZXN0UnVubmFibGUocnVubmFibGUpOworICAgIGZpbmFsIFBzaUphdmFGaWxlIGZpbGUgPSAoUHNpSmF2YUZpbGUpbXlDbGFzcy5nZXRDb250YWluaW5nRmlsZSgpOworCisgICAgQXBwbGljYXRpb25NYW5hZ2VyLmdldEFwcGxpY2F0aW9uKCkucnVuV3JpdGVBY3Rpb24oCisgICAgICBuZXcgUnVubmFibGUoKSB7CisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgdm9pZCBydW4oKSB7CisgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIGZpbGUuZ2V0VmlydHVhbEZpbGUoKS5zZXRCaW5hcnlDb250ZW50KGZpbGUuZ2V0VmlydHVhbEZpbGUoKS5jb250ZW50c1RvQnl0ZUFycmF5KCkpOworICAgICAgICAgIH0KKyAgICAgICAgICBjYXRjaCAoSU9FeGNlcHRpb24gZSkgeworICAgICAgICAgICAgTE9HLmVycm9yKGUpOworICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgfQorICAgICk7CisKKyAgICBMT0cuYXNzZXJ0VHJ1ZShmaWxlLmlzVmFsaWQoKSk7CisgICAgbXlDbGFzcyA9IGZpbGUuZ2V0Q2xhc3NlcygpWzBdOworCisgICAgTE9HLmFzc2VydFRydWUobXlDbGFzcy5pc1ZhbGlkKCkpOworICAgIHN1cGVyLmludm9rZVRlc3RSdW5uYWJsZShydW5uYWJsZSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0SW50MSgpeworICAgIFBzaUZpZWxkIGZpZWxkID0gbXlDbGFzcy5maW5kRmllbGRCeU5hbWUoIklOVF9DT05TVDEiLCBmYWxzZSk7CisgICAgYXNzZXJ0Tm90TnVsbChmaWVsZCk7CisgICAgUHNpTGl0ZXJhbEV4cHJlc3Npb24gaW5pdGlhbGl6ZXIgPSAoUHNpTGl0ZXJhbEV4cHJlc3Npb24pZmllbGQuZ2V0SW5pdGlhbGl6ZXIoKTsKKyAgICBhc3NlcnROb3ROdWxsKGluaXRpYWxpemVyKTsKKyAgICBhc3NlcnRFcXVhbHMoUHNpVHlwZS5JTlQsIGluaXRpYWxpemVyLmdldFR5cGUoKSk7CisgICAgYXNzZXJ0RXF1YWxzKEludGVnZXIudmFsdWVPZigxKSwgaW5pdGlhbGl6ZXIuZ2V0VmFsdWUoKSk7CisgICAgYXNzZXJ0RXF1YWxzKCIxIiwgaW5pdGlhbGl6ZXIuZ2V0VGV4dCgpKTsKKworICAgIGFzc2VydEVxdWFscyhJbnRlZ2VyLnZhbHVlT2YoMSksIGZpZWxkLmNvbXB1dGVDb25zdGFudFZhbHVlKCkpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEludDIoKXsKKyAgICBQc2lGaWVsZCBmaWVsZCA9IG15Q2xhc3MuZmluZEZpZWxkQnlOYW1lKCJJTlRfQ09OU1QyIiwgZmFsc2UpOworICAgIGFzc2VydE5vdE51bGwoZmllbGQpOworICAgIFBzaVByZWZpeEV4cHJlc3Npb24gaW5pdGlhbGl6ZXIgPSAoUHNpUHJlZml4RXhwcmVzc2lvbilmaWVsZC5nZXRJbml0aWFsaXplcigpOworICAgIGFzc2VydE5vdE51bGwoaW5pdGlhbGl6ZXIpOworICAgIGFzc2VydEVxdWFscyhQc2lUeXBlLklOVCwgaW5pdGlhbGl6ZXIuZ2V0VHlwZSgpKTsKKyAgICBQc2lMaXRlcmFsRXhwcmVzc2lvbiBvcGVyYW5kID0gKFBzaUxpdGVyYWxFeHByZXNzaW9uKWluaXRpYWxpemVyLmdldE9wZXJhbmQoKTsKKyAgICBhc3NlcnRFcXVhbHMoSW50ZWdlci52YWx1ZU9mKDEpLCBvcGVyYW5kLmdldFZhbHVlKCkpOworICAgIGFzc2VydEVxdWFscygiLTEiLCBpbml0aWFsaXplci5nZXRUZXh0KCkpOworCisgICAgYXNzZXJ0RXF1YWxzKEludGVnZXIudmFsdWVPZigtMSksIGZpZWxkLmNvbXB1dGVDb25zdGFudFZhbHVlKCkpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEludDMoKXsKKyAgICBQc2lGaWVsZCBmaWVsZCA9IG15Q2xhc3MuZmluZEZpZWxkQnlOYW1lKCJJTlRfQ09OU1QzIiwgZmFsc2UpOworICAgIGFzc2VydE5vdE51bGwoZmllbGQpOworICAgIFBzaVByZWZpeEV4cHJlc3Npb24gaW5pdGlhbGl6ZXIgPSAoUHNpUHJlZml4RXhwcmVzc2lvbilmaWVsZC5nZXRJbml0aWFsaXplcigpOworICAgIGFzc2VydE5vdE51bGwoaW5pdGlhbGl6ZXIpOworICAgIGFzc2VydEVxdWFscyhQc2lUeXBlLklOVCwgaW5pdGlhbGl6ZXIuZ2V0VHlwZSgpKTsKKyAgICBpbnQgdmFsdWUgPSAtMSA8PCAzMTsKKyAgICBhc3NlcnRFcXVhbHMoSW50ZWdlci50b1N0cmluZyh2YWx1ZSksIGluaXRpYWxpemVyLmdldFRleHQoKSk7CisKKyAgICBhc3NlcnRFcXVhbHMoSW50ZWdlci52YWx1ZU9mKHZhbHVlKSwgZmllbGQuY29tcHV0ZUNvbnN0YW50VmFsdWUoKSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0TG9uZzEoKXsKKyAgICBQc2lGaWVsZCBmaWVsZCA9IG15Q2xhc3MuZmluZEZpZWxkQnlOYW1lKCJMT05HX0NPTlNUMSIsIGZhbHNlKTsKKyAgICBhc3NlcnROb3ROdWxsKGZpZWxkKTsKKyAgICBQc2lMaXRlcmFsRXhwcmVzc2lvbiBpbml0aWFsaXplciA9IChQc2lMaXRlcmFsRXhwcmVzc2lvbilmaWVsZC5nZXRJbml0aWFsaXplcigpOworICAgIGFzc2VydE5vdE51bGwoaW5pdGlhbGl6ZXIpOworICAgIGFzc2VydEVxdWFscygiMiIsIGluaXRpYWxpemVyLmdldFRleHQoKSk7CisgICAgYXNzZXJ0RXF1YWxzKFBzaVR5cGUuSU5ULCBpbml0aWFsaXplci5nZXRUeXBlKCkpOworICAgIGFzc2VydEVxdWFscyhJbnRlZ2VyLnZhbHVlT2YoMiksIGluaXRpYWxpemVyLmdldFZhbHVlKCkpOworCisgICAgYXNzZXJ0RXF1YWxzKExvbmcudmFsdWVPZigyKSwgZmllbGQuY29tcHV0ZUNvbnN0YW50VmFsdWUoKSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0TG9uZzIoKXsKKyAgICBQc2lGaWVsZCBmaWVsZCA9IG15Q2xhc3MuZmluZEZpZWxkQnlOYW1lKCJMT05HX0NPTlNUMiIsIGZhbHNlKTsKKyAgICBhc3NlcnROb3ROdWxsKGZpZWxkKTsKKyAgICBQc2lMaXRlcmFsRXhwcmVzc2lvbiBpbml0aWFsaXplciA9IChQc2lMaXRlcmFsRXhwcmVzc2lvbilmaWVsZC5nZXRJbml0aWFsaXplcigpOworICAgIGFzc2VydE5vdE51bGwoaW5pdGlhbGl6ZXIpOworICAgIGFzc2VydEVxdWFscyhQc2lUeXBlLkxPTkcsIGluaXRpYWxpemVyLmdldFR5cGUoKSk7CisgICAgYXNzZXJ0RXF1YWxzKExvbmcudmFsdWVPZigxMDAwMDAwMDAwMDAwTCksIGluaXRpYWxpemVyLmdldFZhbHVlKCkpOworICAgIGFzc2VydEVxdWFscygiMTAwMDAwMDAwMDAwMEwiLCBpbml0aWFsaXplci5nZXRUZXh0KCkpOworCisgICAgYXNzZXJ0RXF1YWxzKExvbmcudmFsdWVPZigxMDAwMDAwMDAwMDAwTCksIGZpZWxkLmNvbXB1dGVDb25zdGFudFZhbHVlKCkpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdExvbmczKCl7CisgICAgUHNpRmllbGQgZmllbGQgPSBteUNsYXNzLmZpbmRGaWVsZEJ5TmFtZSgiTE9OR19DT05TVDMiLCBmYWxzZSk7CisgICAgYXNzZXJ0Tm90TnVsbChmaWVsZCk7CisgICAgUHNpUHJlZml4RXhwcmVzc2lvbiBpbml0aWFsaXplciA9IChQc2lQcmVmaXhFeHByZXNzaW9uKWZpZWxkLmdldEluaXRpYWxpemVyKCk7CisgICAgYXNzZXJ0Tm90TnVsbChpbml0aWFsaXplcik7CisgICAgYXNzZXJ0RXF1YWxzKFBzaVR5cGUuTE9ORywgaW5pdGlhbGl6ZXIuZ2V0VHlwZSgpKTsKKyAgICBsb25nIHZhbHVlID0gLTFMIDw8IDYzOworICAgIGFzc2VydEVxdWFscyh2YWx1ZSArICJMIiwgaW5pdGlhbGl6ZXIuZ2V0VGV4dCgpKTsKKworICAgIGFzc2VydEVxdWFscyhMb25nLnZhbHVlT2YodmFsdWUpLCBmaWVsZC5jb21wdXRlQ29uc3RhbnRWYWx1ZSgpKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RTaG9ydCgpeworICAgIFBzaUZpZWxkIGZpZWxkID0gbXlDbGFzcy5maW5kRmllbGRCeU5hbWUoIlNIT1JUX0NPTlNUIiwgZmFsc2UpOworICAgIGFzc2VydE5vdE51bGwoZmllbGQpOworICAgIFBzaUxpdGVyYWxFeHByZXNzaW9uIGluaXRpYWxpemVyID0gKFBzaUxpdGVyYWxFeHByZXNzaW9uKWZpZWxkLmdldEluaXRpYWxpemVyKCk7CisgICAgYXNzZXJ0Tm90TnVsbChpbml0aWFsaXplcik7CisgICAgYXNzZXJ0RXF1YWxzKFBzaVR5cGUuSU5ULCBpbml0aWFsaXplci5nZXRUeXBlKCkpOworICAgIGFzc2VydEVxdWFscyhJbnRlZ2VyLnZhbHVlT2YoMyksIGluaXRpYWxpemVyLmdldFZhbHVlKCkpOworICAgIGFzc2VydEVxdWFscygiMyIsIGluaXRpYWxpemVyLmdldFRleHQoKSk7CisKKyAgICBhc3NlcnRFcXVhbHMoU2hvcnQudmFsdWVPZigoc2hvcnQpMyksIGZpZWxkLmNvbXB1dGVDb25zdGFudFZhbHVlKCkpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEJ5dGUoKXsKKyAgICBQc2lGaWVsZCBmaWVsZCA9IG15Q2xhc3MuZmluZEZpZWxkQnlOYW1lKCJCWVRFX0NPTlNUIiwgZmFsc2UpOworICAgIGFzc2VydE5vdE51bGwoZmllbGQpOworICAgIFBzaUxpdGVyYWxFeHByZXNzaW9uIGluaXRpYWxpemVyID0gKFBzaUxpdGVyYWxFeHByZXNzaW9uKWZpZWxkLmdldEluaXRpYWxpemVyKCk7CisgICAgYXNzZXJ0Tm90TnVsbChpbml0aWFsaXplcik7CisgICAgYXNzZXJ0RXF1YWxzKFBzaVR5cGUuSU5ULCBpbml0aWFsaXplci5nZXRUeXBlKCkpOworICAgIGFzc2VydEVxdWFscyhJbnRlZ2VyLnZhbHVlT2YoNCksIGluaXRpYWxpemVyLmdldFZhbHVlKCkpOworICAgIGFzc2VydEVxdWFscygiNCIsIGluaXRpYWxpemVyLmdldFRleHQoKSk7CisKKyAgICBhc3NlcnRFcXVhbHMoQnl0ZS52YWx1ZU9mKChieXRlKTQpLCBmaWVsZC5jb21wdXRlQ29uc3RhbnRWYWx1ZSgpKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RDaGFyKCl7CisgICAgUHNpRmllbGQgZmllbGQgPSBteUNsYXNzLmZpbmRGaWVsZEJ5TmFtZSgiQ0hBUl9DT05TVCIsIGZhbHNlKTsKKyAgICBhc3NlcnROb3ROdWxsKGZpZWxkKTsKKyAgICBQc2lMaXRlcmFsRXhwcmVzc2lvbiBpbml0aWFsaXplciA9IChQc2lMaXRlcmFsRXhwcmVzc2lvbilmaWVsZC5nZXRJbml0aWFsaXplcigpOworICAgIGFzc2VydE5vdE51bGwoaW5pdGlhbGl6ZXIpOworICAgIGFzc2VydEVxdWFscyhQc2lUeXBlLkNIQVIsIGluaXRpYWxpemVyLmdldFR5cGUoKSk7CisgICAgYXNzZXJ0RXF1YWxzKG5ldyBDaGFyYWN0ZXIoJzUnKSwgaW5pdGlhbGl6ZXIuZ2V0VmFsdWUoKSk7CisgICAgYXNzZXJ0RXF1YWxzKCInNSciLCBpbml0aWFsaXplci5nZXRUZXh0KCkpOworCisgICAgYXNzZXJ0RXF1YWxzKG5ldyBDaGFyYWN0ZXIoJzUnKSwgZmllbGQuY29tcHV0ZUNvbnN0YW50VmFsdWUoKSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0Qm9vbGVhbigpeworICAgIFBzaUZpZWxkIGZpZWxkID0gbXlDbGFzcy5maW5kRmllbGRCeU5hbWUoIkJPT0xfQ09OU1QiLCBmYWxzZSk7CisgICAgYXNzZXJ0Tm90TnVsbChmaWVsZCk7CisgICAgUHNpTGl0ZXJhbEV4cHJlc3Npb24gaW5pdGlhbGl6ZXIgPSAoUHNpTGl0ZXJhbEV4cHJlc3Npb24pZmllbGQuZ2V0SW5pdGlhbGl6ZXIoKTsKKyAgICBhc3NlcnROb3ROdWxsKGluaXRpYWxpemVyKTsKKyAgICBhc3NlcnRFcXVhbHMoUHNpVHlwZS5CT09MRUFOLCBpbml0aWFsaXplci5nZXRUeXBlKCkpOworICAgIGFzc2VydEVxdWFscyhCb29sZWFuLlRSVUUsIGluaXRpYWxpemVyLmdldFZhbHVlKCkpOworICAgIGFzc2VydEVxdWFscygidHJ1ZSIsIGluaXRpYWxpemVyLmdldFRleHQoKSk7CisKKyAgICBhc3NlcnRFcXVhbHMoQm9vbGVhbi5UUlVFLCBmaWVsZC5jb21wdXRlQ29uc3RhbnRWYWx1ZSgpKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RGbG9hdCgpeworICAgIFBzaUZpZWxkIGZpZWxkID0gbXlDbGFzcy5maW5kRmllbGRCeU5hbWUoIkZMT0FUX0NPTlNUIiwgZmFsc2UpOworICAgIGFzc2VydE5vdE51bGwoZmllbGQpOworICAgIFBzaUxpdGVyYWxFeHByZXNzaW9uIGluaXRpYWxpemVyID0gKFBzaUxpdGVyYWxFeHByZXNzaW9uKWZpZWxkLmdldEluaXRpYWxpemVyKCk7CisgICAgYXNzZXJ0Tm90TnVsbChpbml0aWFsaXplcik7CisgICAgYXNzZXJ0RXF1YWxzKFBzaVR5cGUuRkxPQVQsIGluaXRpYWxpemVyLmdldFR5cGUoKSk7CisgICAgYXNzZXJ0RXF1YWxzKG5ldyBGbG9hdCgxLjIzNGYpLCBpbml0aWFsaXplci5nZXRWYWx1ZSgpKTsKKyAgICBhc3NlcnRFcXVhbHMoIjEuMjM0ZiIsIGluaXRpYWxpemVyLmdldFRleHQoKSk7CisKKyAgICBhc3NlcnRFcXVhbHMobmV3IEZsb2F0KDEuMjM0ZiksIGZpZWxkLmNvbXB1dGVDb25zdGFudFZhbHVlKCkpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdERvdWJsZSgpeworICAgIFBzaUZpZWxkIGZpZWxkID0gbXlDbGFzcy5maW5kRmllbGRCeU5hbWUoIkRPVUJMRV9DT05TVCIsIGZhbHNlKTsKKyAgICBhc3NlcnROb3ROdWxsKGZpZWxkKTsKKyAgICBQc2lMaXRlcmFsRXhwcmVzc2lvbiBpbml0aWFsaXplciA9IChQc2lMaXRlcmFsRXhwcmVzc2lvbilmaWVsZC5nZXRJbml0aWFsaXplcigpOworICAgIGFzc2VydE5vdE51bGwoaW5pdGlhbGl6ZXIpOworICAgIGFzc2VydEVxdWFscyhQc2lUeXBlLkRPVUJMRSwgaW5pdGlhbGl6ZXIuZ2V0VHlwZSgpKTsKKyAgICBhc3NlcnRFcXVhbHMobmV3IERvdWJsZSgzLjQ1NiksIGluaXRpYWxpemVyLmdldFZhbHVlKCkpOworICAgIGFzc2VydEVxdWFscygiMy40NTYiLCBpbml0aWFsaXplci5nZXRUZXh0KCkpOworCisgICAgYXNzZXJ0RXF1YWxzKG5ldyBEb3VibGUoMy40NTYpLCBmaWVsZC5jb21wdXRlQ29uc3RhbnRWYWx1ZSgpKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RTdHJpbmcoKXsKKyAgICBQc2lGaWVsZCBmaWVsZCA9IG15Q2xhc3MuZmluZEZpZWxkQnlOYW1lKCJTVFJJTkdfQ09OU1QiLCBmYWxzZSk7CisgICAgYXNzZXJ0Tm90TnVsbChmaWVsZCk7CisgICAgUHNpTGl0ZXJhbEV4cHJlc3Npb24gaW5pdGlhbGl6ZXIgPSAoUHNpTGl0ZXJhbEV4cHJlc3Npb24pZmllbGQuZ2V0SW5pdGlhbGl6ZXIoKTsKKyAgICBhc3NlcnROb3ROdWxsKGluaXRpYWxpemVyKTsKKyAgICBhc3NlcnRUcnVlKGluaXRpYWxpemVyLmdldFR5cGUoKS5lcXVhbHNUb1RleHQoImphdmEubGFuZy5TdHJpbmciKSk7CisgICAgYXNzZXJ0RXF1YWxzKCJhXHJcblwiYmNkIiwgaW5pdGlhbGl6ZXIuZ2V0VmFsdWUoKSk7CisgICAgYXNzZXJ0RXF1YWxzKCJcImFcXHJcXG5cXFwiYmNkXCIiLCBpbml0aWFsaXplci5nZXRUZXh0KCkpOworCisgICAgYXNzZXJ0RXF1YWxzKCJhXHJcblwiYmNkIiwgZmllbGQuY29tcHV0ZUNvbnN0YW50VmFsdWUoKSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0SW5maW5pdHkoKXsKKyAgICBQc2lGaWVsZCBmaWVsZDEgPSBteUNsYXNzLmZpbmRGaWVsZEJ5TmFtZSgiZDEiLCBmYWxzZSk7CisgICAgYXNzZXJ0Tm90TnVsbChmaWVsZDEpOworICAgIFBzaVJlZmVyZW5jZUV4cHJlc3Npb24gaW5pdGlhbGl6ZXIxID0gKFBzaVJlZmVyZW5jZUV4cHJlc3Npb24pZmllbGQxLmdldEluaXRpYWxpemVyKCk7CisgICAgYXNzZXJ0Tm90TnVsbChpbml0aWFsaXplcjEpOworICAgIGFzc2VydEVxdWFscyhQc2lUeXBlLkRPVUJMRSwgaW5pdGlhbGl6ZXIxLmdldFR5cGUoKSk7CisgICAgYXNzZXJ0RXF1YWxzKCJEb3VibGUuUE9TSVRJVkVfSU5GSU5JVFkiLCBpbml0aWFsaXplcjEuZ2V0VGV4dCgpKTsKKyAgICBhc3NlcnRFcXVhbHMobmV3IERvdWJsZShEb3VibGUuUE9TSVRJVkVfSU5GSU5JVFkpLCBmaWVsZDEuY29tcHV0ZUNvbnN0YW50VmFsdWUoKSk7CisKKyAgICBQc2lGaWVsZCBmaWVsZDIgPSBteUNsYXNzLmZpbmRGaWVsZEJ5TmFtZSgiZDIiLCBmYWxzZSk7CisgICAgYXNzZXJ0Tm90TnVsbChmaWVsZDIpOworICAgIFBzaVJlZmVyZW5jZUV4cHJlc3Npb24gaW5pdGlhbGl6ZXIyID0gKFBzaVJlZmVyZW5jZUV4cHJlc3Npb24pZmllbGQyLmdldEluaXRpYWxpemVyKCk7CisgICAgYXNzZXJ0Tm90TnVsbChpbml0aWFsaXplcjIpOworICAgIGFzc2VydEVxdWFscyhQc2lUeXBlLkRPVUJMRSwgaW5pdGlhbGl6ZXIyLmdldFR5cGUoKSk7CisgICAgYXNzZXJ0RXF1YWxzKCJEb3VibGUuTkVHQVRJVkVfSU5GSU5JVFkiLCBpbml0aWFsaXplcjIuZ2V0VGV4dCgpKTsKKyAgICBhc3NlcnRFcXVhbHMobmV3IERvdWJsZShEb3VibGUuTkVHQVRJVkVfSU5GSU5JVFkpLCBmaWVsZDIuY29tcHV0ZUNvbnN0YW50VmFsdWUoKSk7CisKKyAgICBQc2lGaWVsZCBmaWVsZDMgPSBteUNsYXNzLmZpbmRGaWVsZEJ5TmFtZSgiZDMiLCBmYWxzZSk7CisgICAgYXNzZXJ0Tm90TnVsbChmaWVsZDMpOworICAgIFBzaVJlZmVyZW5jZUV4cHJlc3Npb24gaW5pdGlhbGl6ZXIzID0gKFBzaVJlZmVyZW5jZUV4cHJlc3Npb24pZmllbGQzLmdldEluaXRpYWxpemVyKCk7CisgICAgYXNzZXJ0Tm90TnVsbChpbml0aWFsaXplcjMpOworICAgIGFzc2VydEVxdWFscyhQc2lUeXBlLkRPVUJMRSwgaW5pdGlhbGl6ZXIzLmdldFR5cGUoKSk7CisgICAgYXNzZXJ0RXF1YWxzKCJEb3VibGUuTmFOIiwgaW5pdGlhbGl6ZXIzLmdldFRleHQoKSk7CisgICAgYXNzZXJ0RXF1YWxzKG5ldyBEb3VibGUoRG91YmxlLk5hTiksIGZpZWxkMy5jb21wdXRlQ29uc3RhbnRWYWx1ZSgpKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RDb25zdGFudEV2YWx1YXRvclN0YWNrT3ZlcmZsb3dSZXNpc3RhbmNlKCkgeworICAgIFN0cmluZyB0ZXh0ID0iY2xhc3MgWCB7IFN0cmluZyBzID0gXCJcIiAiOworICAgIGZvciAoaW50IGk9MDtpPDEwMDAwO2krKykgeworICAgICAgdGV4dCArPSAiKyBcIlwiIjsKKyAgICB9CisgICAgdGV4dCArPSAiOyB9IjsKKyAgICBQc2lKYXZhRmlsZSBmaWxlID0gKFBzaUphdmFGaWxlKWNyZWF0ZUR1bW15RmlsZSgiYS5qYXZhIiwgdGV4dCk7CisKKyAgICBQc2lFeHByZXNzaW9uIGV4cHJlc3Npb24gPSBmaWxlLmdldENsYXNzZXMoKVswXS5maW5kRmllbGRCeU5hbWUoInMiLCBmYWxzZSkuZ2V0SW5pdGlhbGl6ZXIoKTsKKworICAgIE9iamVjdCBvID0gSmF2YUNvbnN0YW50RXhwcmVzc2lvbkV2YWx1YXRvci5jb21wdXRlQ29uc3RhbnRFeHByZXNzaW9uKGV4cHJlc3Npb24sIGZhbHNlKTsKKworICAgIGFzc2VydEVxdWFscygiIiwgbyk7CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9wc2kvR2VuZXJpY3NUZXN0Q2FzZS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL3BzaS9HZW5lcmljc1Rlc3RDYXNlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTFjMTRlNDkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovcHNpL0dlbmVyaWNzVGVzdENhc2UuamF2YQpAQCAtMCwwICsxLDM2IEBACitwYWNrYWdlIGNvbS5pbnRlbGxpai5wc2k7CisKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS5hcHBsaWNhdGlvbi5BcHBsaWNhdGlvbk1hbmFnZXI7CitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkuYXBwbGljYXRpb24uZXguUGF0aE1hbmFnZXJFeDsKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS5yb290cy5MYW5ndWFnZUxldmVsUHJvamVjdEV4dGVuc2lvbjsKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS52ZnMuTG9jYWxGaWxlU3lzdGVtOworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLnZmcy5WaXJ0dWFsRmlsZTsKK2ltcG9ydCBjb20uaW50ZWxsaWoucG9tLmphdmEuTGFuZ3VhZ2VMZXZlbDsKK2ltcG9ydCBjb20uaW50ZWxsaWoudGVzdEZyYW1ld29yay5Qc2lUZXN0Q2FzZTsKK2ltcG9ydCBjb20uaW50ZWxsaWoudGVzdEZyYW1ld29yay5Qc2lUZXN0VXRpbDsKKworaW1wb3J0IGphdmEuaW8uRmlsZTsKKworLyoqCisgKiBAYXV0aG9yIGRzbAorICovCitwdWJsaWMgYWJzdHJhY3QgY2xhc3MgR2VuZXJpY3NUZXN0Q2FzZSBleHRlbmRzIFBzaVRlc3RDYXNlIHsKKyAgQE92ZXJyaWRlCisgIHByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgc3VwZXIuc2V0VXAoKTsKKyAgICBMYW5ndWFnZUxldmVsUHJvamVjdEV4dGVuc2lvbi5nZXRJbnN0YW5jZShteUphdmFGYWNhZGUuZ2V0UHJvamVjdCgpKS5zZXRMYW5ndWFnZUxldmVsKExhbmd1YWdlTGV2ZWwuSkRLXzFfNSk7CisgIH0KKworICBwcm90ZWN0ZWQgdm9pZCBzZXR1cEdlbmVyaWNTYW1wbGVDbGFzc2VzKCkgeworICAgIGZpbmFsIFN0cmluZyBjb21tb25QYXRoID0gUGF0aE1hbmFnZXJFeC5nZXRUZXN0RGF0YVBhdGgoKS5yZXBsYWNlKEZpbGUuc2VwYXJhdG9yQ2hhciwgJy8nKSArICIvcHNpL3R5cGVzL3NyYyI7CisgICAgZmluYWwgVmlydHVhbEZpbGVbXSBjb21tb25Sb290ID0gbmV3IFZpcnR1YWxGaWxlW10geyBudWxsIH07CisgICAgQXBwbGljYXRpb25NYW5hZ2VyLmdldEFwcGxpY2F0aW9uKCkucnVuV3JpdGVBY3Rpb24obmV3IFJ1bm5hYmxlKCkgeworICAgICAgQE92ZXJyaWRlCisgICAgICBwdWJsaWMgdm9pZCBydW4oKSB7CisgICAgICAgIGNvbW1vblJvb3RbMF0gPSBMb2NhbEZpbGVTeXN0ZW0uZ2V0SW5zdGFuY2UoKS5yZWZyZXNoQW5kRmluZEZpbGVCeVBhdGgoY29tbW9uUGF0aCk7CisgICAgICB9CisgICAgfSk7CisKKyAgICBQc2lUZXN0VXRpbC5hZGRTb3VyY2VSb290KG15TW9kdWxlLCBjb21tb25Sb290WzBdKTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL3BzaS9KYXZhU09FT25SZXBhcnNlUGVyZm9ybWFuY2VUZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovcHNpL0phdmFTT0VPblJlcGFyc2VQZXJmb3JtYW5jZVRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMWQ5YzA3Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL3BzaS9KYXZhU09FT25SZXBhcnNlUGVyZm9ybWFuY2VUZXN0LmphdmEKQEAgLTAsMCArMSw4NSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDAwLTIwMTIgSmV0QnJhaW5zIHMuci5vLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KK3BhY2thZ2UgY29tLmludGVsbGlqLnBzaTsKKworaW1wb3J0IGNvbS5pbnRlbGxpai5jb2RlSW5zaWdodC5kYWVtb24uTGlnaHREYWVtb25BbmFseXplclRlc3RDYXNlOworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLmFwcGxpY2F0aW9uLkFwcGxpY2F0aW9uTWFuYWdlcjsKKworcHVibGljIGNsYXNzIEphdmFTT0VPblJlcGFyc2VQZXJmb3JtYW5jZVRlc3QgZXh0ZW5kcyBMaWdodERhZW1vbkFuYWx5emVyVGVzdENhc2UgeworICBwcml2YXRlIFN0cmluZ0J1aWxkZXIgbXlIdWdlRXhwcjsKKworICBAT3ZlcnJpZGUKKyAgcHVibGljIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBzdXBlci5zZXRVcCgpOworICAgIG15SHVnZUV4cHIgPSBuZXcgU3RyaW5nQnVpbGRlcigiXCItXCIiKTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IDEwMDAwMDsgaSsrKSBteUh1Z2VFeHByLmFwcGVuZCgiK1wiYlwiIik7CisgIH0KKworICBAT3ZlcnJpZGUKKyAgcHVibGljIHZvaWQgdGVhckRvd24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBpZiAobXlIdWdlRXhwciAhPSBudWxsKSB7CisgICAgICBteUh1Z2VFeHByLnNldExlbmd0aCgwKTsKKyAgICAgIG15SHVnZUV4cHIgPSBudWxsOworICAgIH0KKyAgICBzdXBlci50ZWFyRG93bigpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdE9uSHVnZUJpbmFyeUV4cHJJbkZpbGUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBjb25maWd1cmVGcm9tRmlsZVRleHQoImEuamF2YSIsICJjbGFzcyBBIHsgU3RyaW5nIHMgPSBcIlwiOyB9Iik7CisgICAgZG9UZXN0KCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0T25IdWdlQmluYXJ5RXhwckluQ29kZUJsb2NrKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgY29uZmlndXJlRnJvbUZpbGVUZXh0KCJhLmphdmEiLCAiY2xhc3MgQSB7IHZvaWQgbSgpIHsgU3RyaW5nIHMgPSBcIlwiOyB9IH0iKTsKKyAgICBkb1Rlc3QoKTsKKyAgfQorCisgIHByaXZhdGUgdm9pZCBkb1Rlc3QoKSB7CisgICAgZmluYWwgaW50IHBvcyA9IGdldEVkaXRvcigpLmdldERvY3VtZW50KCkuZ2V0VGV4dCgpLmluZGV4T2YoIlwiXCIiKTsKKworICAgIC8vIHJlcGxhY2Ugc21hbGwgZXhwcmVzc2lvbiB3aXRoIGh1Z2UgYmluYXJ5IG9uZQorICAgIEFwcGxpY2F0aW9uTWFuYWdlci5nZXRBcHBsaWNhdGlvbigpLnJ1bldyaXRlQWN0aW9uKG5ldyBSdW5uYWJsZSgpIHsgQE92ZXJyaWRlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdWJsaWMgdm9pZCBydW4oKSB7CisgICAgICBnZXRFZGl0b3IoKS5nZXREb2N1bWVudCgpLnJlcGxhY2VTdHJpbmcocG9zLCBwb3MgKyAyLCBteUh1Z2VFeHByKTsKKyAgICAgIFBzaURvY3VtZW50TWFuYWdlci5nZXRJbnN0YW5jZShnZXRQcm9qZWN0KCkpLmNvbW1pdEFsbERvY3VtZW50cygpOworICAgIH19KTsKKyAgICBkb1Rlc3RDb25maWd1cmVkRmlsZShmYWxzZSwgZmFsc2UsIG51bGwpOworCisgICAgLy8gbW9kaWZ5IGh1Z2UgYmluYXJ5IGV4cHJlc3Npb24gKDEpCisgICAgQXBwbGljYXRpb25NYW5hZ2VyLmdldEFwcGxpY2F0aW9uKCkucnVuV3JpdGVBY3Rpb24obmV3IFJ1bm5hYmxlKCkgeyBAT3ZlcnJpZGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKKyAgICAgIGdldEVkaXRvcigpLmdldERvY3VtZW50KCkuaW5zZXJ0U3RyaW5nKHBvcywgIlwiLlwiKyIpOworICAgICAgUHNpRG9jdW1lbnRNYW5hZ2VyLmdldEluc3RhbmNlKGdldFByb2plY3QoKSkuY29tbWl0QWxsRG9jdW1lbnRzKCk7CisgICAgfX0pOworICAgIGRvVGVzdENvbmZpZ3VyZWRGaWxlKGZhbHNlLCBmYWxzZSwgbnVsbCk7CisKKyAgICAvLyBtb2RpZnkgaHVnZSBiaW5hcnkgZXhwcmVzc2lvbiAoMikKKyAgICBBcHBsaWNhdGlvbk1hbmFnZXIuZ2V0QXBwbGljYXRpb24oKS5ydW5Xcml0ZUFjdGlvbihuZXcgUnVubmFibGUoKSB7IEBPdmVycmlkZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVibGljIHZvaWQgcnVuKCkgeworICAgICAgZ2V0RWRpdG9yKCkuZ2V0RG9jdW1lbnQoKS5yZXBsYWNlU3RyaW5nKHBvcywgcG9zICsgNCwgIiIpOworICAgICAgUHNpRG9jdW1lbnRNYW5hZ2VyLmdldEluc3RhbmNlKGdldFByb2plY3QoKSkuY29tbWl0QWxsRG9jdW1lbnRzKCk7CisgICAgfX0pOworICAgIGRvVGVzdENvbmZpZ3VyZWRGaWxlKGZhbHNlLCBmYWxzZSwgbnVsbCk7CisKKyAgICAvLyByZXBsYWNlIGh1Z2UgYmluYXJ5IGV4cHJlc3Npb24gd2l0aCBzbWFsbCBvbmUKKyAgICBBcHBsaWNhdGlvbk1hbmFnZXIuZ2V0QXBwbGljYXRpb24oKS5ydW5Xcml0ZUFjdGlvbihuZXcgUnVubmFibGUoKSB7IEBPdmVycmlkZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVibGljIHZvaWQgcnVuKCkgeworICAgICAgZ2V0RWRpdG9yKCkuZ2V0RG9jdW1lbnQoKS5yZXBsYWNlU3RyaW5nKHBvcywgcG9zICsgbXlIdWdlRXhwci5sZW5ndGgoKSwgIlwiLlwiIik7CisgICAgICBQc2lEb2N1bWVudE1hbmFnZXIuZ2V0SW5zdGFuY2UoZ2V0UHJvamVjdCgpKS5jb21taXRBbGxEb2N1bWVudHMoKTsKKyAgICB9fSk7CisgICAgZG9UZXN0Q29uZmlndXJlZEZpbGUoZmFsc2UsIGZhbHNlLCBudWxsKTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL3BzaS9KYXZhU3R1YkJ1aWxkZXJUZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovcHNpL0phdmFTdHViQnVpbGRlclRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYmVhZDFmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL3BzaS9KYXZhU3R1YkJ1aWxkZXJUZXN0LmphdmEKQEAgLTAsMCArMSw0NTggQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwMC0yMDEyIEpldEJyYWlucyBzLnIuby4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCitwYWNrYWdlIGNvbS5pbnRlbGxpai5wc2k7CisKK2ltcG9ydCBjb20uaW50ZWxsaWoubGFuZy5GaWxlQVNUTm9kZTsKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS5hcHBsaWNhdGlvbi5leC5QYXRoTWFuYWdlckV4OworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLnJvb3RzLkxhbmd1YWdlTGV2ZWxQcm9qZWN0RXh0ZW5zaW9uOworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLnV0aWwuaW8uRmlsZVV0aWw7CitpbXBvcnQgY29tLmludGVsbGlqLnBvbS5qYXZhLkxhbmd1YWdlTGV2ZWw7CitpbXBvcnQgY29tLmludGVsbGlqLnBzaS5pbXBsLkRlYnVnVXRpbDsKK2ltcG9ydCBjb20uaW50ZWxsaWoucHNpLmltcGwuc291cmNlLkphdmFMaWdodFN0dWJCdWlsZGVyOworaW1wb3J0IGNvbS5pbnRlbGxpai5wc2kuc3R1YnMuU3R1YkVsZW1lbnQ7CitpbXBvcnQgY29tLmludGVsbGlqLnRlc3RGcmFtZXdvcmsuTGlnaHRJZGVhVGVzdENhc2U7CitpbXBvcnQgY29tLmludGVsbGlqLnRlc3RGcmFtZXdvcmsuUGxhdGZvcm1UZXN0VXRpbDsKK2ltcG9ydCBjb20uaW50ZWxsaWoudXRpbC5UaHJvd2FibGVSdW5uYWJsZTsKK2ltcG9ydCBvcmcuamV0YnJhaW5zLmFubm90YXRpb25zLk5vbk5sczsKK2ltcG9ydCBvcmcuamV0YnJhaW5zLmFubm90YXRpb25zLk51bGxhYmxlOworCitpbXBvcnQgamF2YS5pby5GaWxlOworaW1wb3J0IGphdmEuc2VjdXJpdHkuU2VjdXJlUmFuZG9tOworCitwdWJsaWMgY2xhc3MgSmF2YVN0dWJCdWlsZGVyVGVzdCBleHRlbmRzIExpZ2h0SWRlYVRlc3RDYXNlIHsKKyAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3R1YkJ1aWxkZXIgTkVXX0JVSUxERVIgPSBuZXcgSmF2YUxpZ2h0U3R1YkJ1aWxkZXIoKTsKKworICBAT3ZlcnJpZGUKKyAgcHVibGljIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBzdXBlci5zZXRVcCgpOworICAgIGRvVGVzdCgiQGludGVyZmFjZSBBIHsgaW50IGkoKSBkZWZhdWx0IDQyOyB9XG4gY2xhc3MgQyB7IHZvaWQgbShpbnQgcCkgdGhyb3dzIEUgeyB9IH0iLCBudWxsKTsgIC8vIHdhcm0gdXAKKyAgICBMYW5ndWFnZUxldmVsUHJvamVjdEV4dGVuc2lvbi5nZXRJbnN0YW5jZShnZXRQcm9qZWN0KCkpLnNldExhbmd1YWdlTGV2ZWwoTGFuZ3VhZ2VMZXZlbC5ISUdIRVNUKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RFbXB0eSgpIHsKKyAgICBkb1Rlc3QoIi8qKi8iLAorICAgICAgICAgICAiUHNpSmF2YUZpbGVTdHViIFtdXG4iICsKKyAgICAgICAgICAgIiAgSU1QT1JUX0xJU1Q6UHNpSW1wb3J0TGlzdFN0dWJcbiIpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEZpbGVIZWFkZXIoKSB7CisgICAgZG9UZXN0KCJwYWNrYWdlIHA7XG4iICsKKyAgICAgICAgICAgImltcG9ydCBhLypjb21tZW50IHRvIHNraXAqLy5iO1xuIiArCisgICAgICAgICAgICJpbXBvcnQgc3RhdGljIGMuZC4qO1xuIiArCisgICAgICAgICAgICJpbXBvcnQgc3RhdGljIGphdmEudXRpbC5BcnJheXMuc29ydDsiLAorCisgICAgICAgICAgICJQc2lKYXZhRmlsZVN0dWIgW3BdXG4iICsKKyAgICAgICAgICAgIiAgSU1QT1JUX0xJU1Q6UHNpSW1wb3J0TGlzdFN0dWJcbiIgKworICAgICAgICAgICAiICAgIElNUE9SVF9TVEFURU1FTlQ6UHNpSW1wb3J0U3RhdGVtZW50U3R1YlthLmJdXG4iICsKKyAgICAgICAgICAgIiAgICBJTVBPUlRfU1RBVElDX1NUQVRFTUVOVDpQc2lJbXBvcnRTdGF0ZW1lbnRTdHViW3N0YXRpYyBjLmQuKl1cbiIgKworICAgICAgICAgICAiICAgIElNUE9SVF9TVEFUSUNfU1RBVEVNRU5UOlBzaUltcG9ydFN0YXRlbWVudFN0dWJbc3RhdGljIGphdmEudXRpbC5BcnJheXMuc29ydF1cbiIpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdENsYXNzRGVjbGFyYXRpb24oKSB7CisgICAgZG9UZXN0KCJwYWNrYWdlIHA7IiArCisgICAgICAgICAgICJjbGFzcyBBIGltcGxlbWVudHMgSSwgSiB7IH1cbiIgKworICAgICAgICAgICAiY2xhc3MgQjxLLFYgZXh0ZW5kcyBYPiBleHRlbmRzIGEvKnNraXAqLy5BIHsgY2xhc3MgSSB7IH0gfVxuIiArCisgICAgICAgICAgICJAamF2YS5sYW5nLkRlcHJlY2F0ZWQgaW50ZXJmYWNlIEkgeyB9XG4iICsKKyAgICAgICAgICAgIi8qKiBAZGVwcmVjYXRlZCBqdXN0IGRvbid0IHVzZSAqLyBAaW50ZXJmYWNlIE4geyB9IiwKKworICAgICAgICAgICAiUHNpSmF2YUZpbGVTdHViIFtwXVxuIiArCisgICAgICAgICAgICIgIElNUE9SVF9MSVNUOlBzaUltcG9ydExpc3RTdHViXG4iICsKKyAgICAgICAgICAgIiAgQ0xBU1M6UHNpQ2xhc3NTdHViW25hbWU9QSBmcW49cC5BXVxuIiArCisgICAgICAgICAgICIgICAgTU9ESUZJRVJfTElTVDpQc2lNb2RpZmllckxpc3RTdHViW21hc2s9NDA5Nl1cbiIgKworICAgICAgICAgICAiICAgIFRZUEVfUEFSQU1FVEVSX0xJU1Q6UHNpVHlwZVBhcmFtZXRlckxpc3RTdHViXG4iICsKKyAgICAgICAgICAgIiAgICBFWFRFTkRTX0xJU1Q6UHNpUmVmTGlzdFN0dWJbRVhURU5EU19MSVNUOl1cbiIgKworICAgICAgICAgICAiICAgIElNUExFTUVOVFNfTElTVDpQc2lSZWZMaXN0U3R1YltJTVBMRU1FTlRTX0xJU1Q6SSwgSl1cbiIgKworICAgICAgICAgICAiICBDTEFTUzpQc2lDbGFzc1N0dWJbbmFtZT1CIGZxbj1wLkJdXG4iICsKKyAgICAgICAgICAgIiAgICBNT0RJRklFUl9MSVNUOlBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz00MDk2XVxuIiArCisgICAgICAgICAgICIgICAgVFlQRV9QQVJBTUVURVJfTElTVDpQc2lUeXBlUGFyYW1ldGVyTGlzdFN0dWJcbiIgKworICAgICAgICAgICAiICAgICAgVFlQRV9QQVJBTUVURVI6UHNpVHlwZVBhcmFtZXRlcltLXVxuIiArCisgICAgICAgICAgICIgICAgICAgIEVYVEVORFNfQk9VTkRfTElTVDpQc2lSZWZMaXN0U3R1YltFWFRFTkRTX0JPVU5EU19MSVNUOl1cbiIgKworICAgICAgICAgICAiICAgICAgVFlQRV9QQVJBTUVURVI6UHNpVHlwZVBhcmFtZXRlcltWXVxuIiArCisgICAgICAgICAgICIgICAgICAgIEVYVEVORFNfQk9VTkRfTElTVDpQc2lSZWZMaXN0U3R1YltFWFRFTkRTX0JPVU5EU19MSVNUOlhdXG4iICsKKyAgICAgICAgICAgIiAgICBFWFRFTkRTX0xJU1Q6UHNpUmVmTGlzdFN0dWJbRVhURU5EU19MSVNUOmEvKnNraXAqLy5BXVxuIiArCisgICAgICAgICAgICIgICAgSU1QTEVNRU5UU19MSVNUOlBzaVJlZkxpc3RTdHViW0lNUExFTUVOVFNfTElTVDpdXG4iICsKKyAgICAgICAgICAgIiAgICBDTEFTUzpQc2lDbGFzc1N0dWJbbmFtZT1JIGZxbj1wLkIuSV1cbiIgKworICAgICAgICAgICAiICAgICAgTU9ESUZJRVJfTElTVDpQc2lNb2RpZmllckxpc3RTdHViW21hc2s9NDA5Nl1cbiIgKworICAgICAgICAgICAiICAgICAgVFlQRV9QQVJBTUVURVJfTElTVDpQc2lUeXBlUGFyYW1ldGVyTGlzdFN0dWJcbiIgKworICAgICAgICAgICAiICAgICAgRVhURU5EU19MSVNUOlBzaVJlZkxpc3RTdHViW0VYVEVORFNfTElTVDpdXG4iICsKKyAgICAgICAgICAgIiAgICAgIElNUExFTUVOVFNfTElTVDpQc2lSZWZMaXN0U3R1YltJTVBMRU1FTlRTX0xJU1Q6XVxuIiArCisgICAgICAgICAgICIgIENMQVNTOlBzaUNsYXNzU3R1YltpbnRlcmZhY2UgZGVwcmVjYXRlZEEgbmFtZT1JIGZxbj1wLkldXG4iICsKKyAgICAgICAgICAgIiAgICBNT0RJRklFUl9MSVNUOlBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz01MTIwXVxuIiArCisgICAgICAgICAgICIgICAgICBBTk5PVEFUSU9OOlBzaUFubm90YXRpb25TdHViW0BqYXZhLmxhbmcuRGVwcmVjYXRlZF1cbiIgKworICAgICAgICAgICAiICAgICAgICBBTk5PVEFUSU9OX1BBUkFNRVRFUl9MSVNUOlBzaUFubm90YXRpb25QYXJhbWV0ZXJMaXN0U3R1YkltcGxcbiIgKworICAgICAgICAgICAiICAgIFRZUEVfUEFSQU1FVEVSX0xJU1Q6UHNpVHlwZVBhcmFtZXRlckxpc3RTdHViXG4iICsKKyAgICAgICAgICAgIiAgICBFWFRFTkRTX0xJU1Q6UHNpUmVmTGlzdFN0dWJbRVhURU5EU19MSVNUOl1cbiIgKworICAgICAgICAgICAiICAgIElNUExFTUVOVFNfTElTVDpQc2lSZWZMaXN0U3R1YltJTVBMRU1FTlRTX0xJU1Q6XVxuIiArCisgICAgICAgICAgICIgIENMQVNTOlBzaUNsYXNzU3R1YltpbnRlcmZhY2UgYW5ub3RhdGlvbiBkZXByZWNhdGVkIG5hbWU9TiBmcW49cC5OXVxuIiArCisgICAgICAgICAgICIgICAgTU9ESUZJRVJfTElTVDpQc2lNb2RpZmllckxpc3RTdHViW21hc2s9NTEyMF1cbiIgKworICAgICAgICAgICAiICAgIFRZUEVfUEFSQU1FVEVSX0xJU1Q6UHNpVHlwZVBhcmFtZXRlckxpc3RTdHViXG4iICsKKyAgICAgICAgICAgIiAgICBFWFRFTkRTX0xJU1Q6UHNpUmVmTGlzdFN0dWJbRVhURU5EU19MSVNUOl1cbiIgKworICAgICAgICAgICAiICAgIElNUExFTUVOVFNfTElTVDpQc2lSZWZMaXN0U3R1YltJTVBMRU1FTlRTX0xJU1Q6XVxuIik7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0TWV0aG9kcygpIHsKKyAgICBkb1Rlc3QoInB1YmxpYyBAaW50ZXJmYWNlIEFubm8ge1xuIiArCisgICAgICAgICAgICIgIGludCBpKCkgZGVmYXVsdCA0MjtcbiIgKworICAgICAgICAgICAiICBwdWJsaWMgc3RhdGljIFN0cmluZyBzKCk7XG4iICsKKyAgICAgICAgICAgIn1cbiIgKworICAgICAgICAgICAicHJpdmF0ZSBjbGFzcyBDIHtcbiIgKworICAgICAgICAgICAiICBwdWJsaWMgQygpIHRocm93cyBFeGNlcHRpb24geyB9XG4iICsKKyAgICAgICAgICAgIiAgcHVibGljIGFic3RyYWN0IHZvaWQgbShmaW5hbCBpbnQgaSwgaW50W10gYTEsIGludCBhMltdLCBpbnRbXSBhM1tdKTtcbiIgKworICAgICAgICAgICAiICBwcml2YXRlIHN0YXRpYyBpbnQgdjJhKGludC4uLiB2KSBbXSB7IHJldHVybiB2OyB9XG4iICsKKyAgICAgICAgICAgIn1cbiIgKworICAgICAgICAgICAiaW50ZXJmYWNlIEkge1xuIiArCisgICAgICAgICAgICIgIHZvaWQgbTEoKTtcbiIgKworICAgICAgICAgICAiICB2b2lkIG0yKCkgZGVmYXVsdCB7IH1cbiIgKworICAgICAgICAgICAifSIsCisKKyAgICAgICAgICAgIlBzaUphdmFGaWxlU3R1YiBbXVxuIiArCisgICAgICAgICAgICIgIElNUE9SVF9MSVNUOlBzaUltcG9ydExpc3RTdHViXG4iICsKKyAgICAgICAgICAgIiAgQ0xBU1M6UHNpQ2xhc3NTdHViW2ludGVyZmFjZSBhbm5vdGF0aW9uIG5hbWU9QW5ubyBmcW49QW5ub11cbiIgKworICAgICAgICAgICAiICAgIE1PRElGSUVSX0xJU1Q6UHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTEwMjVdXG4iICsKKyAgICAgICAgICAgIiAgICBUWVBFX1BBUkFNRVRFUl9MSVNUOlBzaVR5cGVQYXJhbWV0ZXJMaXN0U3R1YlxuIiArCisgICAgICAgICAgICIgICAgRVhURU5EU19MSVNUOlBzaVJlZkxpc3RTdHViW0VYVEVORFNfTElTVDpdXG4iICsKKyAgICAgICAgICAgIiAgICBJTVBMRU1FTlRTX0xJU1Q6UHNpUmVmTGlzdFN0dWJbSU1QTEVNRU5UU19MSVNUOl1cbiIgKworICAgICAgICAgICAiICAgIEFOTk9UQVRJT05fTUVUSE9EOlBzaU1ldGhvZFN0dWJbYW5ub3RhdGlvbiBpOmludCBkZWZhdWx0PTQyXVxuIiArCisgICAgICAgICAgICIgICAgICBNT0RJRklFUl9MSVNUOlBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz0xMDI1XVxuIiArCisgICAgICAgICAgICIgICAgICBUWVBFX1BBUkFNRVRFUl9MSVNUOlBzaVR5cGVQYXJhbWV0ZXJMaXN0U3R1YlxuIiArCisgICAgICAgICAgICIgICAgICBQQVJBTUVURVJfTElTVDpQc2lQYXJhbWV0ZXJMaXN0U3R1YlxuIiArCisgICAgICAgICAgICIgICAgICBUSFJPV1NfTElTVDpQc2lSZWZMaXN0U3R1YltUSFJPV1NfTElTVDpdXG4iICsKKyAgICAgICAgICAgIiAgICBBTk5PVEFUSU9OX01FVEhPRDpQc2lNZXRob2RTdHViW2Fubm90YXRpb24gczpTdHJpbmddXG4iICsKKyAgICAgICAgICAgIiAgICAgIE1PRElGSUVSX0xJU1Q6UHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTEwMzNdXG4iICsKKyAgICAgICAgICAgIiAgICAgIFRZUEVfUEFSQU1FVEVSX0xJU1Q6UHNpVHlwZVBhcmFtZXRlckxpc3RTdHViXG4iICsKKyAgICAgICAgICAgIiAgICAgIFBBUkFNRVRFUl9MSVNUOlBzaVBhcmFtZXRlckxpc3RTdHViXG4iICsKKyAgICAgICAgICAgIiAgICAgIFRIUk9XU19MSVNUOlBzaVJlZkxpc3RTdHViW1RIUk9XU19MSVNUOl1cbiIgKworICAgICAgICAgICAiICBDTEFTUzpQc2lDbGFzc1N0dWJbbmFtZT1DIGZxbj1DXVxuIiArCisgICAgICAgICAgICIgICAgTU9ESUZJRVJfTElTVDpQc2lNb2RpZmllckxpc3RTdHViW21hc2s9Ml1cbiIgKworICAgICAgICAgICAiICAgIFRZUEVfUEFSQU1FVEVSX0xJU1Q6UHNpVHlwZVBhcmFtZXRlckxpc3RTdHViXG4iICsKKyAgICAgICAgICAgIiAgICBFWFRFTkRTX0xJU1Q6UHNpUmVmTGlzdFN0dWJbRVhURU5EU19MSVNUOl1cbiIgKworICAgICAgICAgICAiICAgIElNUExFTUVOVFNfTElTVDpQc2lSZWZMaXN0U3R1YltJTVBMRU1FTlRTX0xJU1Q6XVxuIiArCisgICAgICAgICAgICIgICAgTUVUSE9EOlBzaU1ldGhvZFN0dWJbY29ucyBDOm51bGxdXG4iICsKKyAgICAgICAgICAgIiAgICAgIE1PRElGSUVSX0xJU1Q6UHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTFdXG4iICsKKyAgICAgICAgICAgIiAgICAgIFRZUEVfUEFSQU1FVEVSX0xJU1Q6UHNpVHlwZVBhcmFtZXRlckxpc3RTdHViXG4iICsKKyAgICAgICAgICAgIiAgICAgIFBBUkFNRVRFUl9MSVNUOlBzaVBhcmFtZXRlckxpc3RTdHViXG4iICsKKyAgICAgICAgICAgIiAgICAgIFRIUk9XU19MSVNUOlBzaVJlZkxpc3RTdHViW1RIUk9XU19MSVNUOkV4Y2VwdGlvbl1cbiIgKworICAgICAgICAgICAiICAgIE1FVEhPRDpQc2lNZXRob2RTdHViW206dm9pZF1cbiIgKworICAgICAgICAgICAiICAgICAgTU9ESUZJRVJfTElTVDpQc2lNb2RpZmllckxpc3RTdHViW21hc2s9MTAyNV1cbiIgKworICAgICAgICAgICAiICAgICAgVFlQRV9QQVJBTUVURVJfTElTVDpQc2lUeXBlUGFyYW1ldGVyTGlzdFN0dWJcbiIgKworICAgICAgICAgICAiICAgICAgUEFSQU1FVEVSX0xJU1Q6UHNpUGFyYW1ldGVyTGlzdFN0dWJcbiIgKworICAgICAgICAgICAiICAgICAgICBQQVJBTUVURVI6UHNpUGFyYW1ldGVyU3R1YltpOmludF1cbiIgKworICAgICAgICAgICAiICAgICAgICAgIE1PRElGSUVSX0xJU1Q6UHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTQxMTJdXG4iICsKKyAgICAgICAgICAgIiAgICAgICAgUEFSQU1FVEVSOlBzaVBhcmFtZXRlclN0dWJbYTE6aW50W11dXG4iICsKKyAgICAgICAgICAgIiAgICAgICAgICBNT0RJRklFUl9MSVNUOlBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz00MDk2XVxuIiArCisgICAgICAgICAgICIgICAgICAgIFBBUkFNRVRFUjpQc2lQYXJhbWV0ZXJTdHViW2EyOmludFtdXVxuIiArCisgICAgICAgICAgICIgICAgICAgICAgTU9ESUZJRVJfTElTVDpQc2lNb2RpZmllckxpc3RTdHViW21hc2s9NDA5Nl1cbiIgKworICAgICAgICAgICAiICAgICAgICBQQVJBTUVURVI6UHNpUGFyYW1ldGVyU3R1YlthMzppbnRbXVtdXVxuIiArCisgICAgICAgICAgICIgICAgICAgICAgTU9ESUZJRVJfTElTVDpQc2lNb2RpZmllckxpc3RTdHViW21hc2s9NDA5Nl1cbiIgKworICAgICAgICAgICAiICAgICAgVEhST1dTX0xJU1Q6UHNpUmVmTGlzdFN0dWJbVEhST1dTX0xJU1Q6XVxuIiArCisgICAgICAgICAgICIgICAgTUVUSE9EOlBzaU1ldGhvZFN0dWJbdmFyYXJncyB2MmE6aW50W11dXG4iICsKKyAgICAgICAgICAgIiAgICAgIE1PRElGSUVSX0xJU1Q6UHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTEwXVxuIiArCisgICAgICAgICAgICIgICAgICBUWVBFX1BBUkFNRVRFUl9MSVNUOlBzaVR5cGVQYXJhbWV0ZXJMaXN0U3R1YlxuIiArCisgICAgICAgICAgICIgICAgICBQQVJBTUVURVJfTElTVDpQc2lQYXJhbWV0ZXJMaXN0U3R1YlxuIiArCisgICAgICAgICAgICIgICAgICAgIFBBUkFNRVRFUjpQc2lQYXJhbWV0ZXJTdHViW3Y6aW50Li4uXVxuIiArCisgICAgICAgICAgICIgICAgICAgICAgTU9ESUZJRVJfTElTVDpQc2lNb2RpZmllckxpc3RTdHViW21hc2s9NDA5Nl1cbiIgKworICAgICAgICAgICAiICAgICAgVEhST1dTX0xJU1Q6UHNpUmVmTGlzdFN0dWJbVEhST1dTX0xJU1Q6XVxuIiArCisgICAgICAgICAgICIgIENMQVNTOlBzaUNsYXNzU3R1YltpbnRlcmZhY2UgbmFtZT1JIGZxbj1JXVxuIiArCisgICAgICAgICAgICIgICAgTU9ESUZJRVJfTElTVDpQc2lNb2RpZmllckxpc3RTdHViW21hc2s9NTEyMF1cbiIgKworICAgICAgICAgICAiICAgIFRZUEVfUEFSQU1FVEVSX0xJU1Q6UHNpVHlwZVBhcmFtZXRlckxpc3RTdHViXG4iICsKKyAgICAgICAgICAgIiAgICBFWFRFTkRTX0xJU1Q6UHNpUmVmTGlzdFN0dWJbRVhURU5EU19MSVNUOl1cbiIgKworICAgICAgICAgICAiICAgIElNUExFTUVOVFNfTElTVDpQc2lSZWZMaXN0U3R1YltJTVBMRU1FTlRTX0xJU1Q6XVxuIiArCisgICAgICAgICAgICIgICAgTUVUSE9EOlBzaU1ldGhvZFN0dWJbbTE6dm9pZF1cbiIgKworICAgICAgICAgICAiICAgICAgTU9ESUZJRVJfTElTVDpQc2lNb2RpZmllckxpc3RTdHViW21hc2s9MTAyNV1cbiIgKworICAgICAgICAgICAiICAgICAgVFlQRV9QQVJBTUVURVJfTElTVDpQc2lUeXBlUGFyYW1ldGVyTGlzdFN0dWJcbiIgKworICAgICAgICAgICAiICAgICAgUEFSQU1FVEVSX0xJU1Q6UHNpUGFyYW1ldGVyTGlzdFN0dWJcbiIgKworICAgICAgICAgICAiICAgICAgVEhST1dTX0xJU1Q6UHNpUmVmTGlzdFN0dWJbVEhST1dTX0xJU1Q6XVxuIiArCisgICAgICAgICAgICIgICAgTUVUSE9EOlBzaU1ldGhvZFN0dWJbbTI6dm9pZF1cbiIgKworICAgICAgICAgICAiICAgICAgTU9ESUZJRVJfTElTVDpQc2lNb2RpZmllckxpc3RTdHViW21hc2s9NTEzXVxuIiArCisgICAgICAgICAgICIgICAgICBUWVBFX1BBUkFNRVRFUl9MSVNUOlBzaVR5cGVQYXJhbWV0ZXJMaXN0U3R1YlxuIiArCisgICAgICAgICAgICIgICAgICBQQVJBTUVURVJfTElTVDpQc2lQYXJhbWV0ZXJMaXN0U3R1YlxuIiArCisgICAgICAgICAgICIgICAgICBUSFJPV1NfTElTVDpQc2lSZWZMaXN0U3R1YltUSFJPV1NfTElTVDpdXG4iKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RGaWVsZHMoKSB7CisgICAgZG9UZXN0KCJzdGF0aWMgY2xhc3MgQyB7XG4iICsKKyAgICAgICAgICAgIiAgc3RyaWN0ZnAgZmxvYXQgZjtcbiIgKworICAgICAgICAgICAiICBpbnQgaltdID0gezB9LCBrO1xuIiArCisgICAgICAgICAgICIgIHN0YXRpYyBTdHJpbmcgcyA9IFwiLVwiO1xuIiArCisgICAgICAgICAgICJ9XG4iICsKKyAgICAgICAgICAgInB1YmxpYyBjbGFzcyBEIHtcbiIgKworICAgICAgICAgICAiICBwcml2YXRlIHZvbGF0aWxlIGJvb2xlYW4gYjtcbiIgKworICAgICAgICAgICAiICBwdWJsaWMgZmluYWwgZG91YmxlIHg7XG4iICsKKyAgICAgICAgICAgIn0iLAorCisgICAgICAgICAgICJQc2lKYXZhRmlsZVN0dWIgW11cbiIgKworICAgICAgICAgICAiICBJTVBPUlRfTElTVDpQc2lJbXBvcnRMaXN0U3R1YlxuIiArCisgICAgICAgICAgICIgIENMQVNTOlBzaUNsYXNzU3R1YltuYW1lPUMgZnFuPUNdXG4iICsKKyAgICAgICAgICAgIiAgICBNT0RJRklFUl9MSVNUOlBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz00MTA0XVxuIiArCisgICAgICAgICAgICIgICAgVFlQRV9QQVJBTUVURVJfTElTVDpQc2lUeXBlUGFyYW1ldGVyTGlzdFN0dWJcbiIgKworICAgICAgICAgICAiICAgIEVYVEVORFNfTElTVDpQc2lSZWZMaXN0U3R1YltFWFRFTkRTX0xJU1Q6XVxuIiArCisgICAgICAgICAgICIgICAgSU1QTEVNRU5UU19MSVNUOlBzaVJlZkxpc3RTdHViW0lNUExFTUVOVFNfTElTVDpdXG4iICsKKyAgICAgICAgICAgIiAgICBGSUVMRDpQc2lGaWVsZFN0dWJbZjpmbG9hdF1cbiIgKworICAgICAgICAgICAiICAgICAgTU9ESUZJRVJfTElTVDpQc2lNb2RpZmllckxpc3RTdHViW21hc2s9NjE0NF1cbiIgKworICAgICAgICAgICAiICAgIEZJRUxEOlBzaUZpZWxkU3R1YltqOmludFtdPXswfV1cbiIgKworICAgICAgICAgICAiICAgICAgTU9ESUZJRVJfTElTVDpQc2lNb2RpZmllckxpc3RTdHViW21hc2s9NDA5Nl1cbiIgKworICAgICAgICAgICAiICAgIEZJRUxEOlBzaUZpZWxkU3R1YltrOmludF1cbiIgKworICAgICAgICAgICAiICAgIEZJRUxEOlBzaUZpZWxkU3R1YltzOlN0cmluZz1cIi1cIl1cbiIgKworICAgICAgICAgICAiICAgICAgTU9ESUZJRVJfTElTVDpQc2lNb2RpZmllckxpc3RTdHViW21hc2s9NDEwNF1cbiIgKworICAgICAgICAgICAiICBDTEFTUzpQc2lDbGFzc1N0dWJbbmFtZT1EIGZxbj1EXVxuIiArCisgICAgICAgICAgICIgICAgTU9ESUZJRVJfTElTVDpQc2lNb2RpZmllckxpc3RTdHViW21hc2s9MV1cbiIgKworICAgICAgICAgICAiICAgIFRZUEVfUEFSQU1FVEVSX0xJU1Q6UHNpVHlwZVBhcmFtZXRlckxpc3RTdHViXG4iICsKKyAgICAgICAgICAgIiAgICBFWFRFTkRTX0xJU1Q6UHNpUmVmTGlzdFN0dWJbRVhURU5EU19MSVNUOl1cbiIgKworICAgICAgICAgICAiICAgIElNUExFTUVOVFNfTElTVDpQc2lSZWZMaXN0U3R1YltJTVBMRU1FTlRTX0xJU1Q6XVxuIiArCisgICAgICAgICAgICIgICAgRklFTEQ6UHNpRmllbGRTdHViW2I6Ym9vbGVhbl1cbiIgKworICAgICAgICAgICAiICAgICAgTU9ESUZJRVJfTElTVDpQc2lNb2RpZmllckxpc3RTdHViW21hc2s9NjZdXG4iICsKKyAgICAgICAgICAgIiAgICBGSUVMRDpQc2lGaWVsZFN0dWJbeDpkb3VibGVdXG4iICsKKyAgICAgICAgICAgIiAgICAgIE1PRElGSUVSX0xJU1Q6UHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTE3XVxuIik7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0QW5vbnltb3VzQ2xhc3NlcygpIHsKKyAgICBkb1Rlc3QoImNsYXNzIEMgeyB7XG4iICsKKyAgICAgICAgICAgIiAgbmV3IE8uUCgpIHsgfTtcbiIgKworICAgICAgICAgICAiICBYLm5ldyBZKCkgeyB9O1xuIiArCisgICAgICAgICAgICIgIGYocCAtPiBuZXcgUigpIHsgfSk7XG4iICsKKyAgICAgICAgICAgIn0gfSIsCisKKyAgICAgICAgICAgIlBzaUphdmFGaWxlU3R1YiBbXVxuIiArCisgICAgICAgICAgICIgIElNUE9SVF9MSVNUOlBzaUltcG9ydExpc3RTdHViXG4iICsKKyAgICAgICAgICAgIiAgQ0xBU1M6UHNpQ2xhc3NTdHViW25hbWU9QyBmcW49Q11cbiIgKworICAgICAgICAgICAiICAgIE1PRElGSUVSX0xJU1Q6UHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTQwOTZdXG4iICsKKyAgICAgICAgICAgIiAgICBUWVBFX1BBUkFNRVRFUl9MSVNUOlBzaVR5cGVQYXJhbWV0ZXJMaXN0U3R1YlxuIiArCisgICAgICAgICAgICIgICAgRVhURU5EU19MSVNUOlBzaVJlZkxpc3RTdHViW0VYVEVORFNfTElTVDpdXG4iICsKKyAgICAgICAgICAgIiAgICBJTVBMRU1FTlRTX0xJU1Q6UHNpUmVmTGlzdFN0dWJbSU1QTEVNRU5UU19MSVNUOl1cbiIgKworICAgICAgICAgICAiICAgIENMQVNTX0lOSVRJQUxJWkVSOlBzaUNsYXNzSW5pdGlhbGl6ZXJTdHViXG4iICsKKyAgICAgICAgICAgIiAgICAgIE1PRElGSUVSX0xJU1Q6UHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTQwOTZdXG4iICsKKyAgICAgICAgICAgIiAgICAgIEFOT05ZTU9VU19DTEFTUzpQc2lDbGFzc1N0dWJbYW5vbnltb3VzIG5hbWU9bnVsbCBmcW49bnVsbCBiYXNlcmVmPU8uUF1cbiIgKworICAgICAgICAgICAiICAgICAgQU5PTllNT1VTX0NMQVNTOlBzaUNsYXNzU3R1Ylthbm9ueW1vdXMgbmFtZT1udWxsIGZxbj1udWxsIGJhc2VyZWY9WSBpbnF1YWxpZm5ld11cbiIgKworICAgICAgICAgICAiICAgICAgQU5PTllNT1VTX0NMQVNTOlBzaUNsYXNzU3R1Ylthbm9ueW1vdXMgbmFtZT1udWxsIGZxbj1udWxsIGJhc2VyZWY9Ul1cbiIpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEVudW1zKCkgeworICAgIGRvVGVzdCgiZW51bSBFIHtcbiIgKworICAgICAgICAgICAiICBFMSgpIHsgfTtcbiIgKworICAgICAgICAgICAiICBhYnN0cmFjdCB2b2lkIG0oKTtcbiIgKworICAgICAgICAgICAifVxuIiArCisgICAgICAgICAgICJwdWJsaWMgZW51bSBVIHsgVTEsIFUyIH0iLAorCisgICAgICAgICAgICJQc2lKYXZhRmlsZVN0dWIgW11cbiIgKworICAgICAgICAgICAiICBJTVBPUlRfTElTVDpQc2lJbXBvcnRMaXN0U3R1YlxuIiArCisgICAgICAgICAgICIgIENMQVNTOlBzaUNsYXNzU3R1YltlbnVtIG5hbWU9RSBmcW49RV1cbiIgKworICAgICAgICAgICAiICAgIE1PRElGSUVSX0xJU1Q6UHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTUxMjBdXG4iICsKKyAgICAgICAgICAgIiAgICBUWVBFX1BBUkFNRVRFUl9MSVNUOlBzaVR5cGVQYXJhbWV0ZXJMaXN0U3R1YlxuIiArCisgICAgICAgICAgICIgICAgRVhURU5EU19MSVNUOlBzaVJlZkxpc3RTdHViW0VYVEVORFNfTElTVDpdXG4iICsKKyAgICAgICAgICAgIiAgICBJTVBMRU1FTlRTX0xJU1Q6UHNpUmVmTGlzdFN0dWJbSU1QTEVNRU5UU19MSVNUOl1cbiIgKworICAgICAgICAgICAiICAgIEVOVU1fQ09OU1RBTlQ6UHNpRmllbGRTdHViW2VudW1jb25zdCBFMTpFXVxuIiArCisgICAgICAgICAgICIgICAgICBNT0RJRklFUl9MSVNUOlBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz0yNV1cbiIgKworICAgICAgICAgICAiICAgICAgRU5VTV9DT05TVEFOVF9JTklUSUFMSVpFUjpQc2lDbGFzc1N0dWJbYW5vbnltb3VzIGVudW1Jbml0IG5hbWU9bnVsbCBmcW49bnVsbCBiYXNlcmVmPUVdXG4iICsKKyAgICAgICAgICAgIiAgICBNRVRIT0Q6UHNpTWV0aG9kU3R1YlttOnZvaWRdXG4iICsKKyAgICAgICAgICAgIiAgICAgIE1PRElGSUVSX0xJU1Q6UHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTUxMjBdXG4iICsKKyAgICAgICAgICAgIiAgICAgIFRZUEVfUEFSQU1FVEVSX0xJU1Q6UHNpVHlwZVBhcmFtZXRlckxpc3RTdHViXG4iICsKKyAgICAgICAgICAgIiAgICAgIFBBUkFNRVRFUl9MSVNUOlBzaVBhcmFtZXRlckxpc3RTdHViXG4iICsKKyAgICAgICAgICAgIiAgICAgIFRIUk9XU19MSVNUOlBzaVJlZkxpc3RTdHViW1RIUk9XU19MSVNUOl1cbiIgKworICAgICAgICAgICAiICBDTEFTUzpQc2lDbGFzc1N0dWJbZW51bSBuYW1lPVUgZnFuPVVdXG4iICsKKyAgICAgICAgICAgIiAgICBNT0RJRklFUl9MSVNUOlBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz0xN11cbiIgKworICAgICAgICAgICAiICAgIFRZUEVfUEFSQU1FVEVSX0xJU1Q6UHNpVHlwZVBhcmFtZXRlckxpc3RTdHViXG4iICsKKyAgICAgICAgICAgIiAgICBFWFRFTkRTX0xJU1Q6UHNpUmVmTGlzdFN0dWJbRVhURU5EU19MSVNUOl1cbiIgKworICAgICAgICAgICAiICAgIElNUExFTUVOVFNfTElTVDpQc2lSZWZMaXN0U3R1YltJTVBMRU1FTlRTX0xJU1Q6XVxuIiArCisgICAgICAgICAgICIgICAgRU5VTV9DT05TVEFOVDpQc2lGaWVsZFN0dWJbZW51bWNvbnN0IFUxOlVdXG4iICsKKyAgICAgICAgICAgIiAgICAgIE1PRElGSUVSX0xJU1Q6UHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTI1XVxuIiArCisgICAgICAgICAgICIgICAgRU5VTV9DT05TVEFOVDpQc2lGaWVsZFN0dWJbZW51bWNvbnN0IFUyOlVdXG4iICsKKyAgICAgICAgICAgIiAgICAgIE1PRElGSUVSX0xJU1Q6UHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTI1XVxuIik7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0TG9jYWxWYXJpYWJsZXMoKSB7CisgICAgZG9UZXN0KCJjbGFzcyBDIHtcbiIgKworICAgICAgICAgICAiICB2b2lkIG0oKSB7XG4iICsKKyAgICAgICAgICAgIiAgICBpbnQgbG9jYWwgPSAwO1xuIiArCisgICAgICAgICAgICIgICAgT2JqZWN0IHIgPSBuZXcgUnVubmFibGUoKSB7XG4iICsKKyAgICAgICAgICAgIiAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsgfVxuIiArCisgICAgICAgICAgICIgICAgfTtcbiIgKworICAgICAgICAgICAiICAgIGZvciAoaW50IGxvb3AgPSAwOyBsb29wIDwgMTA7IGxvb3ArKykgO1xuIiArCisgICAgICAgICAgICIgICAgdHJ5IChSZXNvdXJjZSByID0gbmV3IFJlc291cmNlKCkpIHsgfVxuIiArCisgICAgICAgICAgICIgICAgdHJ5IChSZXNvdXJjZSByID0gbmV3IFJlc291cmNlKCkge1xuIiArCisgICAgICAgICAgICIgICAgICAgICAgIEBPdmVycmlkZSBwdWJsaWMgdm9pZCBjbG9zZSgpIHsgfVxuIiArCisgICAgICAgICAgICIgICAgICAgICB9KSB7IH1cbiIgKworICAgICAgICAgICAiICB9XG4iICsKKyAgICAgICAgICAgIn0iLAorCisgICAgICAgICAgICJQc2lKYXZhRmlsZVN0dWIgW11cbiIgKworICAgICAgICAgICAiICBJTVBPUlRfTElTVDpQc2lJbXBvcnRMaXN0U3R1YlxuIiArCisgICAgICAgICAgICIgIENMQVNTOlBzaUNsYXNzU3R1YltuYW1lPUMgZnFuPUNdXG4iICsKKyAgICAgICAgICAgIiAgICBNT0RJRklFUl9MSVNUOlBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz00MDk2XVxuIiArCisgICAgICAgICAgICIgICAgVFlQRV9QQVJBTUVURVJfTElTVDpQc2lUeXBlUGFyYW1ldGVyTGlzdFN0dWJcbiIgKworICAgICAgICAgICAiICAgIEVYVEVORFNfTElTVDpQc2lSZWZMaXN0U3R1YltFWFRFTkRTX0xJU1Q6XVxuIiArCisgICAgICAgICAgICIgICAgSU1QTEVNRU5UU19MSVNUOlBzaVJlZkxpc3RTdHViW0lNUExFTUVOVFNfTElTVDpdXG4iICsKKyAgICAgICAgICAgIiAgICBNRVRIT0Q6UHNpTWV0aG9kU3R1YlttOnZvaWRdXG4iICsKKyAgICAgICAgICAgIiAgICAgIE1PRElGSUVSX0xJU1Q6UHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTQwOTZdXG4iICsKKyAgICAgICAgICAgIiAgICAgIFRZUEVfUEFSQU1FVEVSX0xJU1Q6UHNpVHlwZVBhcmFtZXRlckxpc3RTdHViXG4iICsKKyAgICAgICAgICAgIiAgICAgIFBBUkFNRVRFUl9MSVNUOlBzaVBhcmFtZXRlckxpc3RTdHViXG4iICsKKyAgICAgICAgICAgIiAgICAgIFRIUk9XU19MSVNUOlBzaVJlZkxpc3RTdHViW1RIUk9XU19MSVNUOl1cbiIgKworICAgICAgICAgICAiICAgICAgQU5PTllNT1VTX0NMQVNTOlBzaUNsYXNzU3R1Ylthbm9ueW1vdXMgbmFtZT1udWxsIGZxbj1udWxsIGJhc2VyZWY9UnVubmFibGVdXG4iICsKKyAgICAgICAgICAgIiAgICAgICAgTUVUSE9EOlBzaU1ldGhvZFN0dWJbcnVuOnZvaWRdXG4iICsKKyAgICAgICAgICAgIiAgICAgICAgICBNT0RJRklFUl9MSVNUOlBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz0xXVxuIiArCisgICAgICAgICAgICIgICAgICAgICAgVFlQRV9QQVJBTUVURVJfTElTVDpQc2lUeXBlUGFyYW1ldGVyTGlzdFN0dWJcbiIgKworICAgICAgICAgICAiICAgICAgICAgIFBBUkFNRVRFUl9MSVNUOlBzaVBhcmFtZXRlckxpc3RTdHViXG4iICsKKyAgICAgICAgICAgIiAgICAgICAgICBUSFJPV1NfTElTVDpQc2lSZWZMaXN0U3R1YltUSFJPV1NfTElTVDpdXG4iICsKKyAgICAgICAgICAgIiAgICAgIEFOT05ZTU9VU19DTEFTUzpQc2lDbGFzc1N0dWJbYW5vbnltb3VzIG5hbWU9bnVsbCBmcW49bnVsbCBiYXNlcmVmPVJlc291cmNlXVxuIiArCisgICAgICAgICAgICIgICAgICAgIE1FVEhPRDpQc2lNZXRob2RTdHViW2Nsb3NlOnZvaWRdXG4iICsKKyAgICAgICAgICAgIiAgICAgICAgICBNT0RJRklFUl9MSVNUOlBzaU1vZGlmaWVyTGlzdFN0dWJbbWFzaz0xXVxuIiArCisgICAgICAgICAgICIgICAgICAgICAgICBBTk5PVEFUSU9OOlBzaUFubm90YXRpb25TdHViW0BPdmVycmlkZV1cbiIgKworICAgICAgICAgICAiICAgICAgICAgICAgICBBTk5PVEFUSU9OX1BBUkFNRVRFUl9MSVNUOlBzaUFubm90YXRpb25QYXJhbWV0ZXJMaXN0U3R1YkltcGxcbiIgKworICAgICAgICAgICAiICAgICAgICAgIFRZUEVfUEFSQU1FVEVSX0xJU1Q6UHNpVHlwZVBhcmFtZXRlckxpc3RTdHViXG4iICsKKyAgICAgICAgICAgIiAgICAgICAgICBQQVJBTUVURVJfTElTVDpQc2lQYXJhbWV0ZXJMaXN0U3R1YlxuIiArCisgICAgICAgICAgICIgICAgICAgICAgVEhST1dTX0xJU1Q6UHNpUmVmTGlzdFN0dWJbVEhST1dTX0xJU1Q6XVxuIik7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0Tm9uTGlzdFBhcmFtZXRlcnMoKSB7CisgICAgZG9UZXN0KCJjbGFzcyBDIHtcbiIgKworICAgICAgICAgICAiICB7XG4iICsKKyAgICAgICAgICAgIiAgICBmb3IgKGludCBpIDogYXJyKSA7XG4iICsKKyAgICAgICAgICAgIiAgICBmb3IgKFN0cmluZyBzIDogbmV3IEl0ZXJhYmxlPFN0cmluZz4oKSB7XG4iICsKKyAgICAgICAgICAgIiAgICAgIEBPdmVycmlkZSBwdWJsaWMgSXRlcmF0b3I8U3RyaW5nPiBpdGVyYXRvcigpIHsgcmV0dXJuIG51bGw7IH1cbiIgKworICAgICAgICAgICAiICAgIH0pIDtcbiIgKworICAgICAgICAgICAiICAgIHRyeSB7IH1cbiIgKworICAgICAgICAgICAiICAgICAgY2F0Y2ggKFRocm93YWJsZSB0KSB7IH1cbiIgKworICAgICAgICAgICAiICAgICAgY2F0Y2ggKEUxfEUyIGUpIHsgfVxuIiArCisgICAgICAgICAgICIgIH1cbiIgKworICAgICAgICAgICAifSIsCisKKyAgICAgICAgICAgIlBzaUphdmFGaWxlU3R1YiBbXVxuIiArCisgICAgICAgICAgICIgIElNUE9SVF9MSVNUOlBzaUltcG9ydExpc3RTdHViXG4iICsKKyAgICAgICAgICAgIiAgQ0xBU1M6UHNpQ2xhc3NTdHViW25hbWU9QyBmcW49Q11cbiIgKworICAgICAgICAgICAiICAgIE1PRElGSUVSX0xJU1Q6UHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTQwOTZdXG4iICsKKyAgICAgICAgICAgIiAgICBUWVBFX1BBUkFNRVRFUl9MSVNUOlBzaVR5cGVQYXJhbWV0ZXJMaXN0U3R1YlxuIiArCisgICAgICAgICAgICIgICAgRVhURU5EU19MSVNUOlBzaVJlZkxpc3RTdHViW0VYVEVORFNfTElTVDpdXG4iICsKKyAgICAgICAgICAgIiAgICBJTVBMRU1FTlRTX0xJU1Q6UHNpUmVmTGlzdFN0dWJbSU1QTEVNRU5UU19MSVNUOl1cbiIgKworICAgICAgICAgICAiICAgIENMQVNTX0lOSVRJQUxJWkVSOlBzaUNsYXNzSW5pdGlhbGl6ZXJTdHViXG4iICsKKyAgICAgICAgICAgIiAgICAgIE1PRElGSUVSX0xJU1Q6UHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTQwOTZdXG4iICsKKyAgICAgICAgICAgIiAgICAgIEFOT05ZTU9VU19DTEFTUzpQc2lDbGFzc1N0dWJbYW5vbnltb3VzIG5hbWU9bnVsbCBmcW49bnVsbCBiYXNlcmVmPUl0ZXJhYmxlPFN0cmluZz5dXG4iICsKKyAgICAgICAgICAgIiAgICAgICAgTUVUSE9EOlBzaU1ldGhvZFN0dWJbaXRlcmF0b3I6SXRlcmF0b3I8U3RyaW5nPl1cbiIgKworICAgICAgICAgICAiICAgICAgICAgIE1PRElGSUVSX0xJU1Q6UHNpTW9kaWZpZXJMaXN0U3R1YlttYXNrPTFdXG4iICsKKyAgICAgICAgICAgIiAgICAgICAgICAgIEFOTk9UQVRJT046UHNpQW5ub3RhdGlvblN0dWJbQE92ZXJyaWRlXVxuIiArCisgICAgICAgICAgICIgICAgICAgICAgICAgIEFOTk9UQVRJT05fUEFSQU1FVEVSX0xJU1Q6UHNpQW5ub3RhdGlvblBhcmFtZXRlckxpc3RTdHViSW1wbFxuIiArCisgICAgICAgICAgICIgICAgICAgICAgVFlQRV9QQVJBTUVURVJfTElTVDpQc2lUeXBlUGFyYW1ldGVyTGlzdFN0dWJcbiIgKworICAgICAgICAgICAiICAgICAgICAgIFBBUkFNRVRFUl9MSVNUOlBzaVBhcmFtZXRlckxpc3RTdHViXG4iICsKKyAgICAgICAgICAgIiAgICAgICAgICBUSFJPV1NfTElTVDpQc2lSZWZMaXN0U3R1YltUSFJPV1NfTElTVDpdXG4iKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RBbm5vdGF0aW9uUGFyYW1ldGVycygpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdCgiQERlcHJlY2F0ZWQoXCJiYXJcIilcbiIgKworICAgICAgICAgICAiY2xhc3MgRm9vICB7XG4iICsKKyAgICAgICAgICAgIn0iLAorCisgICAgICAgICAgICJQc2lKYXZhRmlsZVN0dWIgW11cbiIgKworICAgICAgICAgICAiICBJTVBPUlRfTElTVDpQc2lJbXBvcnRMaXN0U3R1YlxuIiArCisgICAgICAgICAgICIgIENMQVNTOlBzaUNsYXNzU3R1YltkZXByZWNhdGVkQSBuYW1lPUZvbyBmcW49Rm9vXVxuIiArCisgICAgICAgICAgICIgICAgTU9ESUZJRVJfTElTVDpQc2lNb2RpZmllckxpc3RTdHViW21hc2s9NDA5Nl1cbiIgKworICAgICAgICAgICAiICAgICAgQU5OT1RBVElPTjpQc2lBbm5vdGF0aW9uU3R1YltARGVwcmVjYXRlZChcImJhclwiKV1cbiIgKworICAgICAgICAgICAiICAgICAgICBBTk5PVEFUSU9OX1BBUkFNRVRFUl9MSVNUOlBzaUFubm90YXRpb25QYXJhbWV0ZXJMaXN0U3R1YkltcGxcbiIgKworICAgICAgICAgICAiICAgICAgICAgIE5BTUVfVkFMVUVfUEFJUjpQc2lOYW1lVmFsdWVQYWlyU3R1YkltcGxcbiIgKworICAgICAgICAgICAiICAgIFRZUEVfUEFSQU1FVEVSX0xJU1Q6UHNpVHlwZVBhcmFtZXRlckxpc3RTdHViXG4iICsKKyAgICAgICAgICAgIiAgICBFWFRFTkRTX0xJU1Q6UHNpUmVmTGlzdFN0dWJbRVhURU5EU19MSVNUOl1cbiIgKworICAgICAgICAgICAiICAgIElNUExFTUVOVFNfTElTVDpQc2lSZWZMaXN0U3R1YltJTVBMRU1FTlRTX0xJU1Q6XVxuIik7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0QW5ub3RhdGlvbigpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdCgiQERlcHJlY2F0ZWRcbiIgKworICAgICAgICAgICAiY2xhc3MgRm9vICB7XG4iICsKKyAgICAgICAgICAgIn0iLAorCisgICAgICAgICAgICJQc2lKYXZhRmlsZVN0dWIgW11cbiIgKworICAgICAgICAgICAiICBJTVBPUlRfTElTVDpQc2lJbXBvcnRMaXN0U3R1YlxuIiArCisgICAgICAgICAgICIgIENMQVNTOlBzaUNsYXNzU3R1YltkZXByZWNhdGVkQSBuYW1lPUZvbyBmcW49Rm9vXVxuIiArCisgICAgICAgICAgICIgICAgTU9ESUZJRVJfTElTVDpQc2lNb2RpZmllckxpc3RTdHViW21hc2s9NDA5Nl1cbiIgKworICAgICAgICAgICAiICAgICAgQU5OT1RBVElPTjpQc2lBbm5vdGF0aW9uU3R1YltARGVwcmVjYXRlZF1cbiIgKworICAgICAgICAgICAiICAgICAgICBBTk5PVEFUSU9OX1BBUkFNRVRFUl9MSVNUOlBzaUFubm90YXRpb25QYXJhbWV0ZXJMaXN0U3R1YkltcGxcbiIgKworICAgICAgICAgICAiICAgIFRZUEVfUEFSQU1FVEVSX0xJU1Q6UHNpVHlwZVBhcmFtZXRlckxpc3RTdHViXG4iICsKKyAgICAgICAgICAgIiAgICBFWFRFTkRTX0xJU1Q6UHNpUmVmTGlzdFN0dWJbRVhURU5EU19MSVNUOl1cbiIgKworICAgICAgICAgICAiICAgIElNUExFTUVOVFNfTElTVDpQc2lSZWZMaXN0U3R1YltJTVBMRU1FTlRTX0xJU1Q6XVxuIik7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0U09FUHJvb2YoKSB7CisgICAgZmluYWwgU3RyaW5nQnVpbGRlciBzYiA9IG5ldyBTdHJpbmdCdWlsZGVyKCk7CisgICAgZmluYWwgU2VjdXJlUmFuZG9tIHJhbmRvbSA9IG5ldyBTZWN1cmVSYW5kb20oKTsKKyAgICBzYi5hcHBlbmQoImNsYXNzIFNPRV90ZXN0IHtcbiBCaWdJbnRlZ2VyIEJJRyA9IG5ldyBCaWdJbnRlZ2VyKFxuIik7CisgICAgaW50IGk7CisgICAgZm9yIChpID0gMDsgaSA8IDEwMDAwMDsgaSsrKSB7CisgICAgICBzYi5hcHBlbmQoIiAgXCIiKS5hcHBlbmQoTWF0aC5hYnMocmFuZG9tLm5leHRJbnQoKSkpLmFwcGVuZCgiXCIgK1xuIik7CisgICAgfQorICAgIHNiLmFwcGVuZCgiICBcIlwiKTtcbn0iKTsKKworICAgIGZpbmFsIFBzaUphdmFGaWxlIGZpbGUgPSAoUHNpSmF2YUZpbGUpY3JlYXRlTGlnaHRGaWxlKCJTT0VfdGVzdC5qYXZhIiwgc2IudG9TdHJpbmcoKSk7CisgICAgbG9uZyB0ID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7CisgICAgZmluYWwgU3R1YkVsZW1lbnQgdHJlZSA9IE5FV19CVUlMREVSLmJ1aWxkU3R1YlRyZWUoZmlsZSk7CisgICAgdCA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpIC0gdDsKKyAgICBhc3NlcnRFcXVhbHMoIlBzaUphdmFGaWxlU3R1YiBbXVxuIiArCisgICAgICAgICAgICAgICAgICIgIElNUE9SVF9MSVNUOlBzaUltcG9ydExpc3RTdHViXG4iICsKKyAgICAgICAgICAgICAgICAgIiAgQ0xBU1M6UHNpQ2xhc3NTdHViW25hbWU9U09FX3Rlc3QgZnFuPVNPRV90ZXN0XVxuIiArCisgICAgICAgICAgICAgICAgICIgICAgTU9ESUZJRVJfTElTVDpQc2lNb2RpZmllckxpc3RTdHViW21hc2s9NDA5Nl1cbiIgKworICAgICAgICAgICAgICAgICAiICAgIFRZUEVfUEFSQU1FVEVSX0xJU1Q6UHNpVHlwZVBhcmFtZXRlckxpc3RTdHViXG4iICsKKyAgICAgICAgICAgICAgICAgIiAgICBFWFRFTkRTX0xJU1Q6UHNpUmVmTGlzdFN0dWJbRVhURU5EU19MSVNUOl1cbiIgKworICAgICAgICAgICAgICAgICAiICAgIElNUExFTUVOVFNfTElTVDpQc2lSZWZMaXN0U3R1YltJTVBMRU1FTlRTX0xJU1Q6XVxuIiArCisgICAgICAgICAgICAgICAgICIgICAgRklFTEQ6UHNpRmllbGRTdHViW0JJRzpCaWdJbnRlZ2VyPTtJTklUSUFMSVpFUl9OT1RfU1RPUkVEO11cbiIgKworICAgICAgICAgICAgICAgICAiICAgICAgTU9ESUZJRVJfTElTVDpQc2lNb2RpZmllckxpc3RTdHViW21hc2s9NDA5Nl1cbiIsCisgICAgICAgICAgICAgICAgIERlYnVnVXRpbC5zdHViVHJlZVRvU3RyaW5nKHRyZWUpKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlNPRSBkZXB0aD0iICsgaSArICIsIHRpbWU9IiArIHQgKyAibXMiKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RQZXJmb3JtYW5jZSgpIHRocm93cyBFeGNlcHRpb24geworICAgIGZpbmFsIFN0cmluZyBwYXRoID0gUGF0aE1hbmFnZXJFeC5nZXRUZXN0RGF0YVBhdGgoKSArICIvcHNpL3N0dWIvU3R1YlBlcmZvcm1hbmNlVGVzdC5qYXZhIjsKKyAgICBTdHJpbmcgdGV4dCA9IEZpbGVVdGlsLmxvYWRGaWxlKG5ldyBGaWxlKHBhdGgpKTsKKyAgICBmaW5hbCBQc2lKYXZhRmlsZSBmaWxlID0gKFBzaUphdmFGaWxlKWNyZWF0ZUxpZ2h0RmlsZSgidGVzdC5qYXZhIiwgdGV4dCk7CisKKyAgICBQbGF0Zm9ybVRlc3RVdGlsLnN0YXJ0UGVyZm9ybWFuY2VUZXN0KCJTb3VyY2UgZmlsZSBzaXplOiAiICsgdGV4dC5sZW5ndGgoKSwgMjAwMCwgbmV3IFRocm93YWJsZVJ1bm5hYmxlKCkgeworICAgICAgQE92ZXJyaWRlCisgICAgICBwdWJsaWMgdm9pZCBydW4oKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgTkVXX0JVSUxERVIuYnVpbGRTdHViVHJlZShmaWxlKTsKKyAgICAgIH0KKyAgICB9KS5jcHVCb3VuZCgpLmFzc2VydFRpbWluZygpOworICB9CisKKyAgcHJpdmF0ZSBzdGF0aWMgdm9pZCBkb1Rlc3QoQE5vbk5scyBmaW5hbCBTdHJpbmcgc291cmNlLCBATm9uTmxzIEBOdWxsYWJsZSBmaW5hbCBTdHJpbmcgdHJlZSkgeworICAgIGZpbmFsIFBzaUphdmFGaWxlIGZpbGUgPSAoUHNpSmF2YUZpbGUpY3JlYXRlTGlnaHRGaWxlKCJ0ZXN0LmphdmEiLCBzb3VyY2UpOworICAgIGZpbmFsIEZpbGVBU1ROb2RlIGZpbGVOb2RlID0gZmlsZS5nZXROb2RlKCk7CisgICAgYXNzZXJ0Tm90TnVsbChmaWxlTm9kZSk7CisgICAgYXNzZXJ0RmFsc2UoZmlsZU5vZGUuaXNQYXJzZWQoKSk7CisKKyAgICBsb25nIHQxID0gU3lzdGVtLm5hbm9UaW1lKCk7CisgICAgZmluYWwgU3R1YkVsZW1lbnQgbGlnaHRlclRyZWUgPSBORVdfQlVJTERFUi5idWlsZFN0dWJUcmVlKGZpbGUpOworICAgIHQxID0gTWF0aC5tYXgoKFN5c3RlbS5uYW5vVGltZSgpIC0gdDEpLzEwMDAsIDEpOworICAgIGFzc2VydEZhbHNlKGZpbGVOb2RlLmlzUGFyc2VkKCkpOworCisgICAgZmlsZS5nZXROb2RlKCkuZ2V0Q2hpbGRyZW4obnVsbCk7IC8vIGZvcmNlIHN3aXRjaCB0byBBU1QKKworICAgIGxvbmcgdDIgPSBTeXN0ZW0ubmFub1RpbWUoKTsKKyAgICBmaW5hbCBTdHViRWxlbWVudCBsaWdodGVyVHJlZTIgPSBORVdfQlVJTERFUi5idWlsZFN0dWJUcmVlKGZpbGUpOyAgLy8gYnVpbGQgb3ZlciBBU1QKKyAgICB0MiA9IE1hdGgubWF4KChTeXN0ZW0ubmFub1RpbWUoKSAtIHQyKS8xMDAwLCAxKTsKKworICAgIGZpbGUuYWNjZXB0KG5ldyBQc2lSZWN1cnNpdmVFbGVtZW50V2Fsa2luZ1Zpc2l0b3IoKSB7CisgICAgICBAT3ZlcnJpZGUKKyAgICAgIHB1YmxpYyB2b2lkIHZpc2l0RWxlbWVudChQc2lFbGVtZW50IGVsZW1lbnQpIHsKKyAgICAgICAgYXNzZXJ0ICEoZWxlbWVudCBpbnN0YW5jZW9mIFBzaUVycm9yRWxlbWVudCkgOiBlbGVtZW50OworICAgICAgICBzdXBlci52aXNpdEVsZW1lbnQoZWxlbWVudCk7CisgICAgICB9CisgICAgfSk7CisKKyAgICBmaW5hbCBTdHJpbmcgbGlnaHRTdHIgPSBEZWJ1Z1V0aWwuc3R1YlRyZWVUb1N0cmluZyhsaWdodGVyVHJlZSk7CisgICAgZmluYWwgU3RyaW5nIGxpZ2h0U3RyMiA9IERlYnVnVXRpbC5zdHViVHJlZVRvU3RyaW5nKGxpZ2h0ZXJUcmVlMik7CisgICAgaWYgKHRyZWUgIT0gbnVsbCkgeworICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJsaWdodD0iICsgdDEgKyAibWtzLCBoZWF2eT0iICsgdDIgKyAibWtzIik7CisgICAgICBpZiAoIXRyZWUuaXNFbXB0eSgpKSB7CisgICAgICAgIGFzc2VydEVxdWFscygibGlnaHQgdHJlZSBkaWZmZXJzIiwgdHJlZSwgbGlnaHRTdHIpOworICAgICAgICBhc3NlcnRFcXVhbHMoImxpZ2h0IHRyZWUgKDJuZCkgZGlmZmVycyIsIHRyZWUsIGxpZ2h0U3RyMik7CisgICAgICB9CisgICAgfQorICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovcHNpL0xpYnJhcnlPcmRlclRlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9wc2kvTGlicmFyeU9yZGVyVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZhNTIxOGIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovcHNpL0xpYnJhcnlPcmRlclRlc3QuamF2YQpAQCAtMCwwICsxLDExMCBAQAorLyoKKyAqIENvcHlyaWdodCAyMDAwLTIwMTIgSmV0QnJhaW5zIHMuci5vLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KK3BhY2thZ2UgY29tLmludGVsbGlqLnBzaTsKKworaW1wb3J0IGNvbS5pbnRlbGxpai5KYXZhVGVzdFV0aWw7CitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkuYXBwbGljYXRpb24uQXBwbGljYXRpb25NYW5hZ2VyOworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLnJvb3RzLio7CitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkudmZzLkxvY2FsRmlsZVN5c3RlbTsKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS52ZnMuVmlydHVhbEZpbGU7CitpbXBvcnQgY29tLmludGVsbGlqLnRlc3RGcmFtZXdvcmsuUHNpVGVzdENhc2U7CisKK2ltcG9ydCBqYXZhLmlvLkZpbGU7CitpbXBvcnQgamF2YS51dGlsLkFycmF5czsKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbnM7CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKKy8qKgorICogIEBhdXRob3IgZHNsCisgKi8KK3B1YmxpYyBjbGFzcyBMaWJyYXJ5T3JkZXJUZXN0IGV4dGVuZHMgUHNpVGVzdENhc2UgeworCisgIHB1YmxpYyB2b2lkIHRlc3QxKCkgeworICAgIHNldHVwUGF0aHMoKTsKKyAgICBjaGVja0NsYXNzRnJvbUxpYigidGVzdC5BIiwgIjEiKTsKKworICAgIGZpbmFsIE1vZGlmaWFibGVSb290TW9kZWwgcm9vdE1vZGVsID0gTW9kdWxlUm9vdE1hbmFnZXIuZ2V0SW5zdGFuY2UobXlNb2R1bGUpLmdldE1vZGlmaWFibGVNb2RlbCgpOworICAgIGZpbmFsIE9yZGVyRW50cnlbXSBvcmRlciA9IHJvb3RNb2RlbC5nZXRPcmRlckVudHJpZXMoKTsKKyAgICBmaW5hbCBpbnQgbGVuZ3RoID0gb3JkZXIubGVuZ3RoOworICAgIE9yZGVyRW50cnkgbGliMiA9IG9yZGVyW2xlbmd0aCAtIDFdOworICAgIE9yZGVyRW50cnkgbGliMSA9IG9yZGVyW2xlbmd0aCAtIDJdOworICAgIGFzc2VydFRydWUobGliMSBpbnN0YW5jZW9mIExpYnJhcnlPcmRlckVudHJ5KTsKKyAgICBhc3NlcnRFcXVhbHMoImxpYjEiLCAoKExpYnJhcnlPcmRlckVudHJ5KSBsaWIxKS5nZXRMaWJyYXJ5TmFtZSgpKTsKKyAgICBhc3NlcnRUcnVlKGxpYjIgaW5zdGFuY2VvZiBMaWJyYXJ5T3JkZXJFbnRyeSk7CisgICAgYXNzZXJ0RXF1YWxzKCJsaWIyIiwgKChMaWJyYXJ5T3JkZXJFbnRyeSkgbGliMikuZ2V0TGlicmFyeU5hbWUoKSk7CisKKyAgICBvcmRlcltsZW5ndGggLSAxXSA9IGxpYjE7CisgICAgb3JkZXJbbGVuZ3RoIC0gMl0gPSBsaWIyOworICAgIHJvb3RNb2RlbC5yZWFycmFuZ2VPcmRlckVudHJpZXMob3JkZXIpOworCisgICAgQXBwbGljYXRpb25NYW5hZ2VyLmdldEFwcGxpY2F0aW9uKCkucnVuV3JpdGVBY3Rpb24obmV3IFJ1bm5hYmxlKCkgeworICAgICAgQE92ZXJyaWRlCisgICAgICBwdWJsaWMgdm9pZCBydW4oKSB7CisgICAgICAgIHJvb3RNb2RlbC5jb21taXQoKTsKKyAgICAgIH0KKyAgICB9CisgICAgKTsKKworICAgIGNoZWNrQ2xhc3NGcm9tTGliKCJ0ZXN0LkEiLCAiMiIpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdE5hdmlnYXRpb24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBzZXR1cFBhdGhzKCk7CisgICAgZmluYWwgUHNpQ2xhc3MgY2xhc3NBID0gZ2V0SmF2YUZhY2FkZSgpLmZpbmRDbGFzcygidGVzdC5BIik7CisgICAgZmluYWwgUHNpRWxlbWVudCBuYXZpZ2F0aW9uRWxlbWVudCA9IGNsYXNzQS5nZXROYXZpZ2F0aW9uRWxlbWVudCgpOworICAgIGFzc2VydE5vdE51bGwobmF2aWdhdGlvbkVsZW1lbnQpOworICAgIGFzc2VydFRydWUobmF2aWdhdGlvbkVsZW1lbnQgIT0gY2xhc3NBKTsKKyAgICBhc3NlcnRFcXVhbHMoIkEuamF2YSIsIG5hdmlnYXRpb25FbGVtZW50LmdldENvbnRhaW5pbmdGaWxlKCkuZ2V0VmlydHVhbEZpbGUoKS5nZXROYW1lKCkpOworICB9CisKKyAgcHJpdmF0ZSB2b2lkIGNoZWNrQ2xhc3NGcm9tTGliKFN0cmluZyBxdWFsaWZpZWROYW1lLCBTdHJpbmcgaW5kZXgpIHsKKyAgICBmaW5hbCBQc2lDbGFzcyBjbGFzc0EgPSAoUHNpQ2xhc3MpZ2V0SmF2YUZhY2FkZSgpLmZpbmRDbGFzcyhxdWFsaWZpZWROYW1lKS5nZXROYXZpZ2F0aW9uRWxlbWVudCgpOworICAgIGFzc2VydE5vdE51bGwoY2xhc3NBKTsKKyAgICBmaW5hbCBQc2lNZXRob2RbXSBtZXRob2RzQSA9IGNsYXNzQS5nZXRNZXRob2RzKCk7CisgICAgYXNzZXJ0RXF1YWxzKDEsIG1ldGhvZHNBLmxlbmd0aCk7CisgICAgYXNzZXJ0RXF1YWxzKCJtZXRob2RPZkNsYXNzRnJvbUxpYiIgKyBpbmRleCwgbWV0aG9kc0FbMF0uZ2V0TmFtZSgpKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHNldHVwUGF0aHMoKSB7CisgICAgZmluYWwgU3RyaW5nIGJhc2VQYXRoID0gSmF2YVRlc3RVdGlsLmdldEphdmFUZXN0RGF0YVBhdGgoKSArICIvcHNpL2xpYnJhcnlPcmRlci8iOworCisgICAgZmluYWwgVmlydHVhbEZpbGUgbGliMVNyY0ZpbGUgPSByZWZyZXNoQW5kRmluZEZpbGUoYmFzZVBhdGggKyAibGliMS9zcmMiKTsKKyAgICBmaW5hbCBWaXJ0dWFsRmlsZSBsaWIxY2xhc3NlcyA9IHJlZnJlc2hBbmRGaW5kRmlsZShiYXNlUGF0aCArICJsaWIxL2NsYXNzZXMiKTsKKyAgICBmaW5hbCBWaXJ0dWFsRmlsZSBsaWIyU3JjRmlsZSA9IHJlZnJlc2hBbmRGaW5kRmlsZShiYXNlUGF0aCArICJsaWIyL3NyYyIpOworICAgIGZpbmFsIFZpcnR1YWxGaWxlIGxpYjJjbGFzc2VzID0gcmVmcmVzaEFuZEZpbmRGaWxlKGJhc2VQYXRoICsgImxpYjIvY2xhc3NlcyIpOworCisgICAgYXNzZXJ0VHJ1ZShsaWIxU3JjRmlsZSAhPSBudWxsKTsKKyAgICBhc3NlcnRUcnVlKGxpYjJTcmNGaWxlICE9IG51bGwpOworCisgICAgYWRkTGlicmFyeVdpdGhTb3VyY2VQYXRoKCJsaWIxIiwgbGliMWNsYXNzZXMsIGxpYjFTcmNGaWxlKTsKKyAgICBhZGRMaWJyYXJ5V2l0aFNvdXJjZVBhdGgoImxpYjIiLCBsaWIyY2xhc3NlcywgbGliMlNyY0ZpbGUpOworCisgICAgZmluYWwgTGlzdDxWaXJ0dWFsRmlsZT4gbGlzdCA9IEFycmF5cy5hc0xpc3QoT3JkZXJFbnVtZXJhdG9yLm9yZGVyRW50cmllcyhteU1vZHVsZSkuZ2V0Q2xhc3Nlc1Jvb3RzKCkpOworICAgIGFzc2VydFRydWUobGlzdC5jb250YWlucyhsaWIxY2xhc3NlcykpOworICAgIGFzc2VydFRydWUobGlzdC5jb250YWlucyhsaWIyY2xhc3NlcykpOworICB9CisKKyAgcHJpdmF0ZSBWaXJ0dWFsRmlsZSByZWZyZXNoQW5kRmluZEZpbGUoU3RyaW5nIHBhdGgpIHsKKyAgICBmaW5hbCBGaWxlIGlvTGliMVNyYyA9IG5ldyBGaWxlKHBhdGgpOworICAgIGZpbmFsIFZpcnR1YWxGaWxlIGxpYjFTcmNGaWxlID0gTG9jYWxGaWxlU3lzdGVtLmdldEluc3RhbmNlKCkucmVmcmVzaEFuZEZpbmRGaWxlQnlJb0ZpbGUoaW9MaWIxU3JjKTsKKyAgICByZXR1cm4gbGliMVNyY0ZpbGU7CisgIH0KKworICBwcml2YXRlIHZvaWQgYWRkTGlicmFyeVdpdGhTb3VyY2VQYXRoKFN0cmluZyBuYW1lLCBWaXJ0dWFsRmlsZSBsaWJDbGFzc2VzLCBmaW5hbCBWaXJ0dWFsRmlsZSBsaWJTb3VyY2UpIHsKKyAgICBNb2R1bGVSb290TW9kaWZpY2F0aW9uVXRpbC5hZGRNb2R1bGVMaWJyYXJ5KG15TW9kdWxlLCBuYW1lLCBDb2xsZWN0aW9ucy5zaW5nbGV0b25MaXN0KGxpYkNsYXNzZXMuZ2V0VXJsKCkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29sbGVjdGlvbnMuc2luZ2xldG9uTGlzdChsaWJTb3VyY2UuZ2V0VXJsKCkpKTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL3BzaS9Nb2RpZnlBbm5vdGF0aW9uc1Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9wc2kvTW9kaWZ5QW5ub3RhdGlvbnNUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTg5NWM2NwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9wc2kvTW9kaWZ5QW5ub3RhdGlvbnNUZXN0LmphdmEKQEAgLTAsMCArMSw3MiBAQAorLyoKKyAqIENvcHlyaWdodCAyMDAwLTIwMTIgSmV0QnJhaW5zIHMuci5vLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KK3BhY2thZ2UgY29tLmludGVsbGlqLnBzaTsKKworaW1wb3J0IGNvbS5pbnRlbGxpai5KYXZhVGVzdFV0aWw7CitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkuYXBwbGljYXRpb24uQXBwbGljYXRpb25NYW5hZ2VyOworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLmNvbW1hbmQuQ29tbWFuZFByb2Nlc3NvcjsKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS5wcm9qZWN0Um9vdHMuaW1wbC5KYXZhU2RrSW1wbDsKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS52ZnMuVmlydHVhbEZpbGVGaWx0ZXI7CitpbXBvcnQgY29tLmludGVsbGlqLnBzaS5zZWFyY2guR2xvYmFsU2VhcmNoU2NvcGU7CitpbXBvcnQgY29tLmludGVsbGlqLnRlc3RGcmFtZXdvcmsuSWRlYVRlc3RVdGlsOworaW1wb3J0IGNvbS5pbnRlbGxpai50ZXN0RnJhbWV3b3JrLlBzaVRlc3RDYXNlOworaW1wb3J0IGNvbS5pbnRlbGxpai50ZXN0RnJhbWV3b3JrLlBzaVRlc3RVdGlsOworaW1wb3J0IGNvbS5pbnRlbGxpai51dGlsLkluY29ycmVjdE9wZXJhdGlvbkV4Y2VwdGlvbjsKKworLyoqCisgKiBAYXV0aG9yIHZlbgorICovCitwdWJsaWMgY2xhc3MgTW9kaWZ5QW5ub3RhdGlvbnNUZXN0IGV4dGVuZHMgUHNpVGVzdENhc2UgeworICBAT3ZlcnJpZGUKKyAgcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBzdXBlci5zZXRVcCgpOworCisgICAgU3RyaW5nIHJvb3QgPSBKYXZhVGVzdFV0aWwuZ2V0SmF2YVRlc3REYXRhUGF0aCgpICsgIi9wc2kvcmVwb3NpdG9yeVVzZS9tb2RpZnlBbm5vdGF0aW9ucyI7CisgICAgUHNpVGVzdFV0aWwucmVtb3ZlQWxsUm9vdHMobXlNb2R1bGUsIElkZWFUZXN0VXRpbC5nZXRNb2NrSmRrMTcoIm1vY2sgMS41IikpOworICAgIFBzaVRlc3RVdGlsLmNyZWF0ZVRlc3RQcm9qZWN0U3RydWN0dXJlKG15UHJvamVjdCwgbXlNb2R1bGUsIHJvb3QsIG15RmlsZXNUb0RlbGV0ZSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0UmVwbGFjZUFubm90YXRpb24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAvL2JlIHN1cmUgbm90IHRvIGxvYWQgdHJlZQorICAgIGdldEphdmFGYWNhZGUoKS5zZXRBc3NlcnRPbkZpbGVMb2FkaW5nRmlsdGVyKFZpcnR1YWxGaWxlRmlsdGVyLkFMTCk7CisgICAgUHNpQ2xhc3MgYUNsYXNzID0gbXlKYXZhRmFjYWRlLmZpbmRDbGFzcygiVGVzdCIsIEdsb2JhbFNlYXJjaFNjb3BlLmFsbFNjb3BlKG15UHJvamVjdCkpOworICAgIGFzc2VydE5vdE51bGwoYUNsYXNzKTsKKyAgICBmaW5hbCBQc2lBbm5vdGF0aW9uW10gYW5ub3RhdGlvbnMgPSBhQ2xhc3MuZ2V0TW9kaWZpZXJMaXN0KCkuZ2V0QW5ub3RhdGlvbnMoKTsKKyAgICBhc3NlcnRFcXVhbHMoMSwgYW5ub3RhdGlvbnMubGVuZ3RoKTsKKyAgICBhc3NlcnRFcXVhbHMoIkEiLCBhbm5vdGF0aW9uc1swXS5nZXROYW1lUmVmZXJlbmNlRWxlbWVudCgpLmdldFJlZmVyZW5jZU5hbWUoKSk7CisgICAgZmluYWwgUHNpQW5ub3RhdGlvbiBuZXdBbm5vdGF0aW9uID0gbXlKYXZhRmFjYWRlLmdldEVsZW1lbnRGYWN0b3J5KCkuY3JlYXRlQW5ub3RhdGlvbkZyb21UZXh0KCJAQiIsIG51bGwpOworICAgIC8vaGVyZSB0aGUgdHJlZSBpcyBnb2luZyB0byBiZSBsb2FkZWQKKyAgICBnZXRKYXZhRmFjYWRlKCkuc2V0QXNzZXJ0T25GaWxlTG9hZGluZ0ZpbHRlcihWaXJ0dWFsRmlsZUZpbHRlci5OT05FKTsKKyAgICBDb21tYW5kUHJvY2Vzc29yLmdldEluc3RhbmNlKCkuZXhlY3V0ZUNvbW1hbmQobXlQcm9qZWN0LCBuZXcgUnVubmFibGUoKSB7CisgICAgICBAT3ZlcnJpZGUKKyAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKKyAgICAgICAgQXBwbGljYXRpb25NYW5hZ2VyLmdldEFwcGxpY2F0aW9uKCkucnVuV3JpdGVBY3Rpb24obmV3IFJ1bm5hYmxlKCkgeworICAgICAgICAgIEBPdmVycmlkZQorICAgICAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKKyAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgIGFubm90YXRpb25zWzBdLnJlcGxhY2UobmV3QW5ub3RhdGlvbik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjYXRjaCAoSW5jb3JyZWN0T3BlcmF0aW9uRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgICAgTE9HLmVycm9yKGUpOworICAgICAgICAgICAgfQorICAgICAgICAgIH0KKyAgICAgICAgfSk7CisgICAgICB9CisgICAgfSwgbnVsbCwgbnVsbCk7CisKKyAgICBhc3NlcnRFcXVhbHMoIkBCIiwgYUNsYXNzLmdldE1vZGlmaWVyTGlzdCgpLmdldFRleHQoKSk7CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9wc2kvTm9ybWFsaXplRGVjbGFyYXRpb25UZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovcHNpL05vcm1hbGl6ZURlY2xhcmF0aW9uVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdiOWQ1NGIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovcHNpL05vcm1hbGl6ZURlY2xhcmF0aW9uVGVzdC5qYXZhCkBAIC0wLDAgKzEsNDEgQEAKK3BhY2thZ2UgY29tLmludGVsbGlqLnBzaTsKKworaW1wb3J0IGNvbS5pbnRlbGxpai5KYXZhVGVzdFV0aWw7CitpbXBvcnQgY29tLmludGVsbGlqLnBzaS5pbXBsLnNvdXJjZS5Qb3N0cHJvY2Vzc1JlZm9ybWF0dGluZ0FzcGVjdDsKK2ltcG9ydCBjb20uaW50ZWxsaWoudGVzdEZyYW1ld29yay5QbGF0Zm9ybVRlc3RDYXNlOworaW1wb3J0IGNvbS5pbnRlbGxpai50ZXN0RnJhbWV3b3JrLlBzaVRlc3RDYXNlOworaW1wb3J0IGNvbS5pbnRlbGxpai50ZXN0RnJhbWV3b3JrLlBzaVRlc3RVdGlsOworCitAUGxhdGZvcm1UZXN0Q2FzZS5XcmFwSW5Db21tYW5kCitwdWJsaWMgY2xhc3MgTm9ybWFsaXplRGVjbGFyYXRpb25UZXN0IGV4dGVuZHMgUHNpVGVzdENhc2V7CisgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBCQVNFX1BBVEggPSBKYXZhVGVzdFV0aWwuZ2V0SmF2YVRlc3REYXRhUGF0aCgpICsgIi9wc2kvbm9ybWFsaXplRGVjbGFyYXRpb24iOworCisgIEBPdmVycmlkZQorICBwcm90ZWN0ZWQgU3RyaW5nIGdldFRlc3REYXRhUGF0aCgpIHsKKyAgICByZXR1cm4gQkFTRV9QQVRIOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdDEoKSB0aHJvd3MgRXhjZXB0aW9uIHsgZG9UZXN0KCk7IH0KKyAgcHVibGljIHZvaWQgdGVzdDIoKSB0aHJvd3MgRXhjZXB0aW9uIHsgZG9UZXN0KCk7IH0KKworICBwdWJsaWMgdm9pZCB0ZXN0U0NSNjU0OSgpIHRocm93cyBFeGNlcHRpb24geyBkb1Rlc3QoKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0U0NSOTQ2NygpIHRocm93cyBFeGNlcHRpb24geyBkb1Rlc3QoKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0U0NSOTQ2N18xKCkgdGhyb3dzIEV4Y2VwdGlvbiB7IGRvVGVzdCgpOyB9CisKKyAgcHJpdmF0ZSB2b2lkIGRvVGVzdCgpIHRocm93cyBFeGNlcHRpb24geworICAgIFBzaUVsZW1lbnQgZWxlbWVudCA9IGNvbmZpZ3VyZUJ5RmlsZVdpdGhNYXJrZXIoQkFTRV9QQVRIICsgIi8iICsgZ2V0VGVzdE5hbWUoZmFsc2UpICsgIi5qYXZhIiwgIjx2YXI+Iik7CisgICAgYXNzZXJ0VHJ1ZShlbGVtZW50IGluc3RhbmNlb2YgUHNpSWRlbnRpZmllcik7CisgICAgYXNzZXJ0VHJ1ZShlbGVtZW50LmdldFBhcmVudCgpIGluc3RhbmNlb2YgUHNpVmFyaWFibGUpOworCisgICAgKChQc2lWYXJpYWJsZSllbGVtZW50LmdldFBhcmVudCgpKS5ub3JtYWxpemVEZWNsYXJhdGlvbigpOworCisgICAgU3RyaW5nIHRleHRBZnRlciA9IGxvYWRGaWxlKGdldFRlc3ROYW1lKGZhbHNlKSArICJfYWZ0ZXIuamF2YSIpOworICAgIFBvc3Rwcm9jZXNzUmVmb3JtYXR0aW5nQXNwZWN0LmdldEluc3RhbmNlKGdldFByb2plY3QoKSkuZG9Qb3N0cG9uZWRGb3JtYXR0aW5nKCk7CisgICAgUHNpRG9jdW1lbnRNYW5hZ2VyLmdldEluc3RhbmNlKGdldFByb2plY3QoKSkuY29tbWl0QWxsRG9jdW1lbnRzKCk7CisKKyAgICBTdHJpbmcgZmlsZVRleHQgPSBteUZpbGUuZ2V0VGV4dCgpOworICAgIGFzc2VydEVxdWFscyh0ZXh0QWZ0ZXIsIGZpbGVUZXh0KTsKKyAgICBQc2lUZXN0VXRpbC5jaGVja0ZpbGVTdHJ1Y3R1cmUobXlGaWxlKTsKKyAgfQorCit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovcHNpL09wdGltaXplSW1wb3J0c1Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9wc2kvT3B0aW1pemVJbXBvcnRzVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFhMmVmZGI5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL3BzaS9PcHRpbWl6ZUltcG9ydHNUZXN0LmphdmEKQEAgLTAsMCArMSw4MCBAQAorLyoKKyAqIENvcHlyaWdodCAyMDAwLTIwMTAgSmV0QnJhaW5zIHMuci5vLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KK3BhY2thZ2UgY29tLmludGVsbGlqLnBzaTsKKworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLmFwcGxpY2F0aW9uLkFwcGxpY2F0aW9uTWFuYWdlcjsKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS5hcHBsaWNhdGlvbi5leC5QYXRoTWFuYWdlckV4OworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLmNvbW1hbmQuQ29tbWFuZFByb2Nlc3NvcjsKK2ltcG9ydCBjb20uaW50ZWxsaWoucHNpLmNvZGVTdHlsZS5KYXZhQ29kZVN0eWxlTWFuYWdlcjsKK2ltcG9ydCBjb20uaW50ZWxsaWoucHNpLmltcGwuc291cmNlLlBvc3Rwcm9jZXNzUmVmb3JtYXR0aW5nQXNwZWN0OworaW1wb3J0IGNvbS5pbnRlbGxpai50ZXN0RnJhbWV3b3JrLlBzaVRlc3RDYXNlOworCitwdWJsaWMgY2xhc3MgT3B0aW1pemVJbXBvcnRzVGVzdCBleHRlbmRzIFBzaVRlc3RDYXNleworICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQkFTRV9QQVRIID0gUGF0aE1hbmFnZXJFeC5nZXRUZXN0RGF0YVBhdGgoKSArICIvcHNpL29wdGltaXplSW1wb3J0cyI7CisKKyAgQE92ZXJyaWRlCisgIHByb3RlY3RlZCBTdHJpbmcgZ2V0VGVzdERhdGFQYXRoKCkgeworICAgIHJldHVybiBCQVNFX1BBVEg7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0U0NSNjEzOCgpIHRocm93cyBFeGNlcHRpb24geyBkb1Rlc3QoKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0U0NSMTgzNjQoKSB0aHJvd3MgRXhjZXB0aW9uIHsgZG9UZXN0KCk7IH0KKyAgcHVibGljIHZvaWQgdGVzdFN0YXRpY0ltcG9ydHMxKCkgdGhyb3dzIEV4Y2VwdGlvbiB7IGRvVGVzdCgpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RTdGF0aWNJbXBvcnRzVG9PcHRpbWl6ZSgpIHRocm93cyBFeGNlcHRpb24geyBkb1Rlc3QoKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0U3RhdGljSW1wb3J0c1RvT3B0aW1pemVNaXhlZCgpIHRocm93cyBFeGNlcHRpb24geyBkb1Rlc3QoKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0U3RhdGljSW1wb3J0c1RvT3B0aW1pemUyKCkgdGhyb3dzIEV4Y2VwdGlvbiB7IGRvVGVzdCgpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RFbXB0eUltcG9ydExpc3QoKSB0aHJvd3MgRXhjZXB0aW9uIHsgZG9UZXN0KCk7IH0KKyAgcHVibGljIHZvaWQgdGVzdElERUFERVYxMDcxNigpIHRocm93cyBFeGNlcHRpb24geyBkb1Rlc3QoKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0VW5yZXNvbHZlZEltcG9ydHMoKSB0aHJvd3MgRXhjZXB0aW9uIHsgZG9UZXN0KCk7IH0KKyAgcHVibGljIHZvaWQgdGVzdFVucmVzb2x2ZWRJbXBvcnRzMigpIHRocm93cyBFeGNlcHRpb24geyBkb1Rlc3QoKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0TmV3SW1wb3J0TGlzdElzRW1wdHlBbmRDb21tZW50UHJlc2VydmVkKCkgdGhyb3dzIEV4Y2VwdGlvbiB7IGRvVGVzdCgpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3ROZXdJbXBvcnRMaXN0SXNFbXB0eUFuZEphdmFEb2NXaXRoSW52YWxpZENvZGVQcmVzZXJ2ZWQoKSB0aHJvd3MgRXhjZXB0aW9uIHsgZG9UZXN0KCk7IH0KKworICBwcml2YXRlIHZvaWQgZG9UZXN0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZmluYWwgU3RyaW5nIGV4dGVuc2lvbiA9ICIuamF2YSI7CisgICAgZG9UZXN0KGV4dGVuc2lvbik7CisgIH0KKworICBwcml2YXRlIHZvaWQgZG9UZXN0KGZpbmFsIFN0cmluZyBleHRlbnNpb24pIHRocm93cyBFeGNlcHRpb24geworICAgIENvbW1hbmRQcm9jZXNzb3IuZ2V0SW5zdGFuY2UoKS5leGVjdXRlQ29tbWFuZCgKKyAgICAgIGdldFByb2plY3QoKSwgbmV3IFJ1bm5hYmxlKCkgeworICAgICAgQE92ZXJyaWRlCisgICAgICBwdWJsaWMgdm9pZCBydW4oKSB7CisgICAgICAgIEFwcGxpY2F0aW9uTWFuYWdlci5nZXRBcHBsaWNhdGlvbigpLnJ1bldyaXRlQWN0aW9uKG5ldyBSdW5uYWJsZSgpIHsKKyAgICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgICBwdWJsaWMgdm9pZCBydW4oKSB7CisgICAgICAgICAgICBTdHJpbmcgZmlsZU5hbWUgPSBnZXRUZXN0TmFtZShmYWxzZSkgKyBleHRlbnNpb247CisgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICBTdHJpbmcgdGV4dCA9IGxvYWRGaWxlKGZpbGVOYW1lKTsKKyAgICAgICAgICAgICAgUHNpRmlsZSBmaWxlID0gY3JlYXRlRmlsZShmaWxlTmFtZSwgdGV4dCk7CisKKyAgICAgICAgICAgICAgSmF2YUNvZGVTdHlsZU1hbmFnZXIuZ2V0SW5zdGFuY2UobXlQcm9qZWN0KS5vcHRpbWl6ZUltcG9ydHMoZmlsZSk7CisgICAgICAgICAgICAgIFBvc3Rwcm9jZXNzUmVmb3JtYXR0aW5nQXNwZWN0LmdldEluc3RhbmNlKGdldFByb2plY3QoKSkuZG9Qb3N0cG9uZWRGb3JtYXR0aW5nKCk7CisgICAgICAgICAgICAgIFBzaURvY3VtZW50TWFuYWdlci5nZXRJbnN0YW5jZShnZXRQcm9qZWN0KCkpLmNvbW1pdEFsbERvY3VtZW50cygpOworICAgICAgICAgICAgICBTdHJpbmcgdGV4dEFmdGVyID0gbG9hZEZpbGUoZ2V0VGVzdE5hbWUoZmFsc2UpICsgIl9hZnRlciIgKyBleHRlbnNpb24pOworICAgICAgICAgICAgICBTdHJpbmcgZmlsZVRleHQgPSBmaWxlLmdldFRleHQoKTsKKyAgICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKHRleHRBZnRlciwgZmlsZVRleHQpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICAgIExPRy5lcnJvcihlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisgICAgICAgIH0pOworICAgICAgfQorICAgIH0sICIiLCAiIik7CisKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL3BzaS9PdmVybGFwcGluZ1NvdXJjZVJvb3RzVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL3BzaS9PdmVybGFwcGluZ1NvdXJjZVJvb3RzVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFhOTE2NjFhCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL3BzaS9PdmVybGFwcGluZ1NvdXJjZVJvb3RzVGVzdC5qYXZhCkBAIC0wLDAgKzEsMTI1IEBACitwYWNrYWdlIGNvbS5pbnRlbGxpai5wc2k7CisKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS5hcHBsaWNhdGlvbi5BcHBsaWNhdGlvbk1hbmFnZXI7CitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkuZGlhZ25vc3RpYy5Mb2dnZXI7CitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkucm9vdHMuUHJvamVjdFJvb3RNYW5hZ2VyOworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLnZmcy5Mb2NhbEZpbGVTeXN0ZW07CitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkudmZzLlZpcnR1YWxGaWxlOworaW1wb3J0IGNvbS5pbnRlbGxpai5wc2kudXRpbC5Qc2lVdGlsQmFzZTsKK2ltcG9ydCBjb20uaW50ZWxsaWoudGVzdEZyYW1ld29yay5Qc2lUZXN0Q2FzZTsKK2ltcG9ydCBjb20uaW50ZWxsaWoudGVzdEZyYW1ld29yay5Qc2lUZXN0VXRpbDsKKworaW1wb3J0IGphdmEuaW8uRmlsZTsKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworCitwdWJsaWMgY2xhc3MgT3ZlcmxhcHBpbmdTb3VyY2VSb290c1Rlc3QgZXh0ZW5kcyBQc2lUZXN0Q2FzZSB7CisgIHByaXZhdGUgc3RhdGljIGZpbmFsIExvZ2dlciBMT0cgPSBMb2dnZXIuZ2V0SW5zdGFuY2UoIiNjb20uaW50ZWxsaWoucHNpLk92ZXJsYXBwaW5nU291cmNlUm9vdHNUZXN0Iik7CisKKyAgcHJpdmF0ZSBWaXJ0dWFsRmlsZSBteVByb2plY3RSb290OworICBwcml2YXRlIFZpcnR1YWxGaWxlIG15U291cmNlUm9vdDE7CisgIHByaXZhdGUgVmlydHVhbEZpbGUgbXlTb3VyY2VSb290MjsKKyAgcHJpdmF0ZSBWaXJ0dWFsRmlsZSBteVNvdXJjZVJvb3QxMTsKKyAgcHJpdmF0ZSBWaXJ0dWFsRmlsZSBteVNvdXJjZVJvb3QyMTsKKyAgcHJpdmF0ZSBWaXJ0dWFsRmlsZSBteUZpbGUxOworICBwcml2YXRlIFZpcnR1YWxGaWxlIG15RmlsZTI7CisgIHByaXZhdGUgVmlydHVhbEZpbGUgbXlGaWxlMTE7CisgIHByaXZhdGUgVmlydHVhbEZpbGUgbXlGaWxlMjE7CisKKyAgQE92ZXJyaWRlCisgIHByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgc3VwZXIuc2V0VXAoKTsKKworICAgIEFwcGxpY2F0aW9uTWFuYWdlci5nZXRBcHBsaWNhdGlvbigpLnJ1bldyaXRlQWN0aW9uKAorICAgICAgICAgICAgbmV3IFJ1bm5hYmxlKCkgeworICAgICAgICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgICAgICAgcHVibGljIHZvaWQgcnVuKCkgeworCisgICAgICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICAgIEZpbGUgZGlyID0gY3JlYXRlVGVtcERpcmVjdG9yeSgpOworCisgICAgICAgICAgICAgICAgICBteVByb2plY3RSb290ID0gTG9jYWxGaWxlU3lzdGVtLmdldEluc3RhbmNlKCkucmVmcmVzaEFuZEZpbmRGaWxlQnlQYXRoKGRpci5nZXRQYXRoKCkucmVwbGFjZShGaWxlLnNlcGFyYXRvckNoYXIsICcvJykpOworCisgICAgICAgICAgICAgICAgICBteVNvdXJjZVJvb3QxID0gbXlQcm9qZWN0Um9vdC5jcmVhdGVDaGlsZERpcmVjdG9yeShudWxsLCAicm9vdDEiKTsKKyAgICAgICAgICAgICAgICAgIG15U291cmNlUm9vdDIgPSBteVByb2plY3RSb290LmNyZWF0ZUNoaWxkRGlyZWN0b3J5KG51bGwsICJyb290MiIpOworICAgICAgICAgICAgICAgICAgbXlTb3VyY2VSb290MTEgPSBteVNvdXJjZVJvb3QxLmNyZWF0ZUNoaWxkRGlyZWN0b3J5KG51bGwsICJyb290MTEiKTsKKyAgICAgICAgICAgICAgICAgIG15U291cmNlUm9vdDIxID0gbXlTb3VyY2VSb290Mi5jcmVhdGVDaGlsZERpcmVjdG9yeShudWxsLCAicm9vdDIxIik7CisKKyAgICAgICAgICAgICAgICAgIFBzaVRlc3RVdGlsLmFkZENvbnRlbnRSb290KG15TW9kdWxlLCBteVByb2plY3RSb290KTsKKyAgICAgICAgICAgICAgICAgIFBzaVRlc3RVdGlsLmFkZFNvdXJjZVJvb3QobXlNb2R1bGUsIG15U291cmNlUm9vdDIxKTsKKyAgICAgICAgICAgICAgICAgIFBzaVRlc3RVdGlsLmFkZFNvdXJjZVJvb3QobXlNb2R1bGUsIG15U291cmNlUm9vdDEpOworICAgICAgICAgICAgICAgICAgUHNpVGVzdFV0aWwuYWRkU291cmNlUm9vdChteU1vZHVsZSwgbXlTb3VyY2VSb290Mik7CisgICAgICAgICAgICAgICAgICBQc2lUZXN0VXRpbC5hZGRTb3VyY2VSb290KG15TW9kdWxlLCBteVNvdXJjZVJvb3QxMSk7CisKKyAgICAgICAgICAgICAgICAgIG15RmlsZTEgPSBteVNvdXJjZVJvb3QxLmNyZWF0ZUNoaWxkRGF0YShudWxsLCAiRmlsZTEuamF2YSIpOworICAgICAgICAgICAgICAgICAgbXlGaWxlMiA9IG15U291cmNlUm9vdDIuY3JlYXRlQ2hpbGREYXRhKG51bGwsICJGaWxlMi5qYXZhIik7CisgICAgICAgICAgICAgICAgICBteUZpbGUxMSA9IG15U291cmNlUm9vdDExLmNyZWF0ZUNoaWxkRGF0YShudWxsLCAiRmlsZTExLmphdmEiKTsKKyAgICAgICAgICAgICAgICAgIG15RmlsZTIxID0gbXlTb3VyY2VSb290MjEuY3JlYXRlQ2hpbGREYXRhKG51bGwsICJGaWxlMjEuamF2YSIpOworICAgICAgICAgICAgICAgIH0gY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgICAgICAgIExPRy5lcnJvcihlKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICApOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEZpbmRSb290MSgpIHsKKyAgICBjaGVja0ZpbmRSb290KCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0RmluZFJvb3QyKCkgeworICAgIGNoZWNrRmluZFJvb3QoKTsKKyAgfQorCisgIHByaXZhdGUgdm9pZCBjaGVja0ZpbmRSb290KCkgeworICAgIFBzaURpcmVjdG9yeSBwc2lEaXIxID0gbXlQc2lNYW5hZ2VyLmZpbmREaXJlY3RvcnkobXlTb3VyY2VSb290MSk7CisgICAgUHNpRGlyZWN0b3J5IHBzaURpcjIgPSBteVBzaU1hbmFnZXIuZmluZERpcmVjdG9yeShteVNvdXJjZVJvb3QyKTsKKyAgICBQc2lEaXJlY3RvcnkgcHNpRGlyMTEgPSBteVBzaU1hbmFnZXIuZmluZERpcmVjdG9yeShteVNvdXJjZVJvb3QxMSk7CisgICAgUHNpRGlyZWN0b3J5IHBzaURpcjIxID0gbXlQc2lNYW5hZ2VyLmZpbmREaXJlY3RvcnkobXlTb3VyY2VSb290MjEpOworCisgICAgYXNzZXJ0RXF1YWxzKHBzaURpcjEsIGZpbmRTb3VyY2VSb290RGlyZWN0b3J5KHBzaURpcjEpKTsKKyAgICBhc3NlcnRFcXVhbHMocHNpRGlyMiwgZmluZFNvdXJjZVJvb3REaXJlY3RvcnkocHNpRGlyMikpOworICAgIGFzc2VydEVxdWFscyhwc2lEaXIxMSwgZmluZFNvdXJjZVJvb3REaXJlY3RvcnkocHNpRGlyMTEpKTsKKyAgICBhc3NlcnRFcXVhbHMocHNpRGlyMjEsIGZpbmRTb3VyY2VSb290RGlyZWN0b3J5KHBzaURpcjIxKSk7CisKKyAgICBQc2lGaWxlIHBzaUZpbGUxID0gbXlQc2lNYW5hZ2VyLmZpbmRGaWxlKG15RmlsZTEpOworICAgIFBzaUZpbGUgcHNpRmlsZTIgPSBteVBzaU1hbmFnZXIuZmluZEZpbGUobXlGaWxlMik7CisgICAgUHNpRmlsZSBwc2lGaWxlMTEgPSBteVBzaU1hbmFnZXIuZmluZEZpbGUobXlGaWxlMTEpOworICAgIFBzaUZpbGUgcHNpRmlsZTIxID0gbXlQc2lNYW5hZ2VyLmZpbmRGaWxlKG15RmlsZTIxKTsKKworICAgIGFzc2VydEVxdWFscyhwc2lEaXIxLCBmaW5kU291cmNlUm9vdERpcmVjdG9yeShwc2lGaWxlMSkpOworICAgIGFzc2VydEVxdWFscyhwc2lEaXIyLCBmaW5kU291cmNlUm9vdERpcmVjdG9yeShwc2lGaWxlMikpOworICAgIGFzc2VydEVxdWFscyhwc2lEaXIxMSwgZmluZFNvdXJjZVJvb3REaXJlY3RvcnkocHNpRmlsZTExKSk7CisgICAgYXNzZXJ0RXF1YWxzKHBzaURpcjIxLCBmaW5kU291cmNlUm9vdERpcmVjdG9yeShwc2lGaWxlMjEpKTsKKyAgfQorCisgIHByaXZhdGUgUHNpRGlyZWN0b3J5IGZpbmRTb3VyY2VSb290RGlyZWN0b3J5KFBzaUVsZW1lbnQgZWxlbWVudCkgeworICAgIGZpbmFsIFZpcnR1YWxGaWxlIHZpcnR1YWxGaWxlID0gUHNpVXRpbEJhc2UuZ2V0VmlydHVhbEZpbGUoZWxlbWVudCk7CisgICAgZmluYWwgVmlydHVhbEZpbGUgc291cmNlUm9vdCA9IFByb2plY3RSb290TWFuYWdlci5nZXRJbnN0YW5jZShteVByb2plY3QpLmdldEZpbGVJbmRleCgpLmdldFNvdXJjZVJvb3RGb3JGaWxlKHZpcnR1YWxGaWxlKTsKKyAgICByZXR1cm4gbXlQc2lNYW5hZ2VyLmZpbmREaXJlY3Rvcnkoc291cmNlUm9vdCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0RmluZFBhY2thZ2UxKCkgeworICAgIGNoZWNrRmluZFBhY2thZ2UoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RGaW5kUGFja2FnZTIoKSB7CisgICAgY2hlY2tGaW5kUGFja2FnZSgpOworICB9CisKKyAgcHJpdmF0ZSB2b2lkIGNoZWNrRmluZFBhY2thZ2UoKSB7CisgICAgUHNpRGlyZWN0b3J5IHBzaURpcjEgPSBteVBzaU1hbmFnZXIuZmluZERpcmVjdG9yeShteVNvdXJjZVJvb3QxKTsKKyAgICBQc2lEaXJlY3RvcnkgcHNpRGlyMiA9IG15UHNpTWFuYWdlci5maW5kRGlyZWN0b3J5KG15U291cmNlUm9vdDIpOworICAgIFBzaURpcmVjdG9yeSBwc2lEaXIxMSA9IG15UHNpTWFuYWdlci5maW5kRGlyZWN0b3J5KG15U291cmNlUm9vdDExKTsKKyAgICBQc2lEaXJlY3RvcnkgcHNpRGlyMjEgPSBteVBzaU1hbmFnZXIuZmluZERpcmVjdG9yeShteVNvdXJjZVJvb3QyMSk7CisKKyAgICBTdHJpbmcgcGFjazEgPSBKYXZhRGlyZWN0b3J5U2VydmljZS5nZXRJbnN0YW5jZSgpLmdldFBhY2thZ2UocHNpRGlyMSkuZ2V0UXVhbGlmaWVkTmFtZSgpOworICAgIFN0cmluZyBwYWNrMiA9IEphdmFEaXJlY3RvcnlTZXJ2aWNlLmdldEluc3RhbmNlKCkuZ2V0UGFja2FnZShwc2lEaXIyKS5nZXRRdWFsaWZpZWROYW1lKCk7CisgICAgU3RyaW5nIHBhY2sxMSA9IEphdmFEaXJlY3RvcnlTZXJ2aWNlLmdldEluc3RhbmNlKCkuZ2V0UGFja2FnZShwc2lEaXIxMSkuZ2V0UXVhbGlmaWVkTmFtZSgpOworICAgIFN0cmluZyBwYWNrMjEgPSBKYXZhRGlyZWN0b3J5U2VydmljZS5nZXRJbnN0YW5jZSgpLmdldFBhY2thZ2UocHNpRGlyMjEpLmdldFF1YWxpZmllZE5hbWUoKTsKKworICAgIGFzc2VydEVxdWFscygiIiwgcGFjazEpOworICAgIGFzc2VydEVxdWFscygiIiwgcGFjazIpOworICAgIGFzc2VydEVxdWFscygiIiwgcGFjazExKTsKKyAgICBhc3NlcnRFcXVhbHMoIiIsIHBhY2syMSk7CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9wc2kvUHNpQ29uY3VycmVuY3lTdHJlc3NUZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovcHNpL1BzaUNvbmN1cnJlbmN5U3RyZXNzVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ5ZmNkZDcKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovcHNpL1BzaUNvbmN1cnJlbmN5U3RyZXNzVGVzdC5qYXZhCkBAIC0wLDAgKzEsMTk1IEBACisvKgorICogQ29weXJpZ2h0IDIwMDAtMjAxMiBKZXRCcmFpbnMgcy5yLm8uCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisvKgorICogQGF1dGhvciBtYXgKKyAqLworcGFja2FnZSBjb20uaW50ZWxsaWoucHNpOworCitpbXBvcnQgY29tLmludGVsbGlqLmNvZGVJbnNpZ2h0LmRhZW1vbi5pbXBsLkhpZ2hsaWdodEluZm9GaWx0ZXI7CitpbXBvcnQgY29tLmludGVsbGlqLmNvZGVJbnNpZ2h0LmRhZW1vbi5pbXBsLmFuYWx5c2lzLkhpZ2hsaWdodEluZm9Ib2xkZXI7CitpbXBvcnQgY29tLmludGVsbGlqLmNvZGVJbnNpZ2h0LmRhZW1vbi5pbXBsLmFuYWx5c2lzLkhpZ2hsaWdodFZpc2l0b3JJbXBsOworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLmFwcGxpY2F0aW9uLkFwcGxpY2F0aW9uTWFuYWdlcjsKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS5hcHBsaWNhdGlvbi5SZXN1bHQ7CitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkuYXBwbGljYXRpb24uZXguUGF0aE1hbmFnZXJFeDsKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS5jb21tYW5kLldyaXRlQ29tbWFuZEFjdGlvbjsKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS5lZGl0b3IuRG9jdW1lbnQ7CitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkucm9vdHMuTGFuZ3VhZ2VMZXZlbFByb2plY3RFeHRlbnNpb247CitpbXBvcnQgY29tLmludGVsbGlqLnBvbS5qYXZhLkxhbmd1YWdlTGV2ZWw7CitpbXBvcnQgY29tLmludGVsbGlqLnBzaS5zZWFyY2guR2xvYmFsU2VhcmNoU2NvcGU7CitpbXBvcnQgY29tLmludGVsbGlqLnRlc3RGcmFtZXdvcmsuSWRlYVRlc3RVdGlsOworaW1wb3J0IGNvbS5pbnRlbGxpai50ZXN0RnJhbWV3b3JrLlBzaVRlc3RDYXNlOworaW1wb3J0IGNvbS5pbnRlbGxpai50ZXN0RnJhbWV3b3JrLlBzaVRlc3RVdGlsOworaW1wb3J0IGNvbS5pbnRlbGxpai50ZXN0RnJhbWV3b3JrLlRpbWluZ3M7CitpbXBvcnQgY29tLmludGVsbGlqLnV0aWwuSW5jb3JyZWN0T3BlcmF0aW9uRXhjZXB0aW9uOworCitpbXBvcnQgamF2YS51dGlsLlJhbmRvbTsKK2ltcG9ydCBqYXZhLnV0aWwuY29uY3VycmVudC5Db3VudERvd25MYXRjaDsKK2ltcG9ydCBqYXZhLnV0aWwuY29uY3VycmVudC5UaW1lVW5pdDsKKworcHVibGljIGNsYXNzIFBzaUNvbmN1cnJlbmN5U3RyZXNzVGVzdCBleHRlbmRzIFBzaVRlc3RDYXNlIHsKKworICBAT3ZlcnJpZGUKKyAgcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBzdXBlci5zZXRVcCgpOworCisgICAgTGFuZ3VhZ2VMZXZlbFByb2plY3RFeHRlbnNpb24uZ2V0SW5zdGFuY2UobXlQcm9qZWN0KS5zZXRMYW5ndWFnZUxldmVsKExhbmd1YWdlTGV2ZWwuSkRLXzFfNSk7CisgICAgU3RyaW5nIHJvb3QgPSBQYXRoTWFuYWdlckV4LmdldFRlc3REYXRhUGF0aCgpICsgIi9wc2kvcmVwb3NpdG9yeVVzZS9zcmMiOworICAgIFBzaVRlc3RVdGlsLnJlbW92ZUFsbFJvb3RzKG15TW9kdWxlLCBJZGVhVGVzdFV0aWwuZ2V0TW9ja0pkazE3KCkpOworICAgIFBzaVRlc3RVdGlsLmNyZWF0ZVRlc3RQcm9qZWN0U3RydWN0dXJlKG15UHJvamVjdCwgbXlNb2R1bGUsIHJvb3QsIG15RmlsZXNUb0RlbGV0ZSk7CisgIH0KKworICBwcml2YXRlIFBzaUphdmFGaWxlIG15RmlsZTsKKyAgcHJpdmF0ZSB2b2xhdGlsZSBib29sZWFuIHdyaXRlQWN0aW9uSW5Qcm9ncmVzczsKKyAgcHVibGljIHZvaWQgdGVzdFN0cmVzcygpIHRocm93cyBFeGNlcHRpb24geworICAgIGludCBudW1PZlRocmVhZHMgPSAxMDsKKyAgICBpbnQgaXRlcmF0aW9ucyA9IFRpbWluZ3MuYWRqdXN0QWNjb3JkaW5nVG9NeVNwZWVkKDIwLCB0cnVlKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIml0ZXJhdGlvbnMgPSAiICsgaXRlcmF0aW9ucyk7CisgICAgZmluYWwgaW50IHJlYWRJdGVyYXRpb25zID0gaXRlcmF0aW9ucyAqIDM7CisgICAgZmluYWwgaW50IHdyaXRlSXRlcmF0aW9ucyA9IGl0ZXJhdGlvbnM7CisKKyAgICBzeW5jaHJvbml6ZWQgKHRoaXMpIHsKKyAgICAgIFBzaUNsYXNzIG15Q2xhc3MgPSBteUphdmFGYWNhZGUuZmluZENsYXNzKCJTdHJlc3NDbGFzcyIsIEdsb2JhbFNlYXJjaFNjb3BlLmFsbFNjb3BlKG15UHJvamVjdCkpOworICAgICAgYXNzZXJ0Tm90TnVsbChteUNsYXNzKTsKKyAgICAgIG15RmlsZSA9IChQc2lKYXZhRmlsZSlteUNsYXNzLmdldENvbnRhaW5pbmdGaWxlKCk7CisgICAgfQorCisgICAgZmluYWwgUHNpRG9jdW1lbnRNYW5hZ2VyIGRvY3VtZW50TWFuYWdlciA9IFBzaURvY3VtZW50TWFuYWdlci5nZXRJbnN0YW5jZShnZXRQcm9qZWN0KCkpOworCisgICAgZmluYWwgQ291bnREb3duTGF0Y2ggcmVhZHMgPSBuZXcgQ291bnREb3duTGF0Y2gobnVtT2ZUaHJlYWRzKTsKKyAgICBmaW5hbCBSYW5kb20gcmFuZG9tID0gbmV3IFJhbmRvbSgpOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbnVtT2ZUaHJlYWRzOyBpKyspIHsKKyAgICAgIG5ldyBUaHJlYWQobmV3IFJ1bm5hYmxlKCkgeworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIHZvaWQgcnVuKCkgeworICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcmVhZEl0ZXJhdGlvbnM7IGkrKykgeworICAgICAgICAgICAgaWYgKG15UHNpTWFuYWdlciA9PSBudWxsKSByZXR1cm47CisgICAgICAgICAgICBBcHBsaWNhdGlvbk1hbmFnZXIuZ2V0QXBwbGljYXRpb24oKS5ydW5SZWFkQWN0aW9uKG5ldyBSdW5uYWJsZSgpIHsKKyAgICAgICAgICAgICAgQE92ZXJyaWRlCisgICAgICAgICAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKKyAgICAgICAgICAgICAgICBhc3NlcnRGYWxzZSh3cml0ZUFjdGlvbkluUHJvZ3Jlc3MpOworICAgICAgICAgICAgICAgIHJlYWRTdGVwKHJhbmRvbSk7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0pOworICAgICAgICAgIH0KKworICAgICAgICAgIHJlYWRzLmNvdW50RG93bigpOworICAgICAgICB9CisgICAgICB9LCAic3RyZXNzIHRocmVhZCIgKyBpKS5zdGFydCgpOworICAgIH0KKworICAgIGZpbmFsIERvY3VtZW50IGRvY3VtZW50ID0gZG9jdW1lbnRNYW5hZ2VyLmdldERvY3VtZW50KG15RmlsZSk7CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IHdyaXRlSXRlcmF0aW9uczsgaSsrKSB7CisgICAgICBUaHJlYWQuc2xlZXAoMTAwKTsKKyAgICAgIG5ldyBXcml0ZUNvbW1hbmRBY3Rpb24obXlQcm9qZWN0LCBteUZpbGUpIHsKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHByb3RlY3RlZCB2b2lkIHJ1bihmaW5hbCBSZXN1bHQgcmVzdWx0KSB0aHJvd3MgVGhyb3dhYmxlIHsKKyAgICAgICAgICB3cml0ZUFjdGlvbkluUHJvZ3Jlc3MgPSB0cnVlOworICAgICAgICAgIGRvY3VtZW50TWFuYWdlci5jb21taXRBbGxEb2N1bWVudHMoKTsKKyAgICAgICAgICB3cml0ZVN0ZXAocmFuZG9tKTsKKyAgICAgICAgICBkb2N1bWVudE1hbmFnZXIuY29tbWl0QWxsRG9jdW1lbnRzKCk7CisgICAgICAgICAgYXNzZXJ0RXF1YWxzKGRvY3VtZW50LmdldFRleHQoKSwgbXlGaWxlLmdldFRleHQoKSk7CisgICAgICAgICAgd3JpdGVBY3Rpb25JblByb2dyZXNzID0gZmFsc2U7CisgICAgICAgIH0KKyAgICAgIH0uZXhlY3V0ZSgpOworICAgIH0KKworICAgIGFzc2VydFRydWUoIlRpbWVkIG91dCIsIHJlYWRzLmF3YWl0KDUsIFRpbWVVbml0Lk1JTlVURVMpKTsKKyAgfQorCisgIHByaXZhdGUgc3RhdGljIHZvaWQgbWFyayhmaW5hbCBTdHJpbmcgcykgeworICAgIC8vU3lzdGVtLm91dC5wcmludChzKTsKKyAgICAvL1N5c3RlbS5vdXQuZmx1c2goKTsKKyAgfQorCisgIHByaXZhdGUgc3luY2hyb25pemVkIFBzaUNsYXNzIGdldFBzaUNsYXNzKCkgeworICAgIGFzc2VydFRydWUobXlGaWxlLmlzVmFsaWQoKSk7CisgICAgUHNpQ2xhc3MgcHNpQ2xhc3MgPSBteUZpbGUuZ2V0Q2xhc3NlcygpWzBdOworICAgIGFzc2VydFRydWUocHNpQ2xhc3MuaXNWYWxpZCgpKTsKKyAgICByZXR1cm4gcHNpQ2xhc3M7CisgIH0KKyAgCisgIHByaXZhdGUgc3luY2hyb25pemVkIHZvaWQgd3JpdGVTdGVwKGZpbmFsIFJhbmRvbSByYW5kb20pIHRocm93cyBJbmNvcnJlY3RPcGVyYXRpb25FeGNlcHRpb24geworICAgIHN3aXRjaCAocmFuZG9tLm5leHRJbnQoMikpIHsKKyAgICAgIGNhc2UgMCA6CisgICAgICAgIG1hcmsoIisiKTsKKyAgICAgICAgZ2V0UHNpQ2xhc3MoKS5hZGQobXlKYXZhRmFjYWRlLmdldEVsZW1lbnRGYWN0b3J5KCkuY3JlYXRlTWV0aG9kKCJmb28iICsgU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCksIFBzaVR5cGUuRkxPQVQpKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIDEgOgorICAgICAgICBtYXJrKCItIik7CisgICAgICAgIGZpbmFsIFBzaU1ldGhvZFtdIHBzaU1ldGhvZHMgPSBnZXRQc2lDbGFzcygpLmdldE1ldGhvZHMoKTsKKyAgICAgICAgaWYgKHBzaU1ldGhvZHMubGVuZ3RoID4gMCkgeworICAgICAgICAgIEFwcGxpY2F0aW9uTWFuYWdlci5nZXRBcHBsaWNhdGlvbigpLnJ1bldyaXRlQWN0aW9uKG5ldyBSdW5uYWJsZSgpIHsKKyAgICAgICAgICAgIEBPdmVycmlkZQorICAgICAgICAgICAgcHVibGljIHZvaWQgcnVuKCkgeworICAgICAgICAgICAgICBwc2lNZXRob2RzW3JhbmRvbS5uZXh0SW50KHBzaU1ldGhvZHMubGVuZ3RoKV0uZGVsZXRlKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgfSk7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgfQorICB9CisKKyAgcHJpdmF0ZSB2b2lkIHJlYWRTdGVwKGZpbmFsIFJhbmRvbSByYW5kb20pIHsKKyAgICBQc2lDbGFzcyBhQ2xhc3MgPSBnZXRQc2lDbGFzcygpOworICAgIHN3aXRjaCAocmFuZG9tLm5leHRJbnQoNCkpIHsKKyAgICAgIGNhc2UgMDoKKyAgICAgICAgbWFyaygidiIpOworICAgICAgICBhQ2xhc3MuZ2V0Q29udGFpbmluZ0ZpbGUoKS5hY2NlcHQobmV3IFBzaVJlY3Vyc2l2ZUVsZW1lbnRWaXNpdG9yKCkgeworICAgICAgICB9KTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGNhc2UgMToKKyAgICAgICAgbWFyaygibSIpOworICAgICAgICBmb3IgKGludCBvZmZzZXQ9MDsgb2Zmc2V0PG15RmlsZS5nZXRUZXh0TGVuZ3RoKCk7b2Zmc2V0KyspIHsKKyAgICAgICAgICBteUZpbGUuZmluZEVsZW1lbnRBdChvZmZzZXQpOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworCisgICAgICBjYXNlIDI6CisgICAgICAgIG1hcmsoImgiKTsKKyAgICAgICAgYUNsYXNzLmFjY2VwdChuZXcgUHNpUmVjdXJzaXZlRWxlbWVudFZpc2l0b3IoKSB7CisgICAgICAgICAgQE92ZXJyaWRlCisgICAgICAgICAgcHVibGljIHZvaWQgdmlzaXRFbGVtZW50KGZpbmFsIFBzaUVsZW1lbnQgZWxlbWVudCkgeworICAgICAgICAgICAgc3VwZXIudmlzaXRFbGVtZW50KGVsZW1lbnQpOworCisgICAgICAgICAgICBmaW5hbCBIaWdobGlnaHRJbmZvSG9sZGVyIGluZm9Ib2xkZXIgPSBuZXcgSGlnaGxpZ2h0SW5mb0hvbGRlcihteUZpbGUsIEhpZ2hsaWdodEluZm9GaWx0ZXIuRU1QVFlfQVJSQVkpOworICAgICAgICAgICAgZmluYWwgSGlnaGxpZ2h0VmlzaXRvckltcGwgdmlzaXRvciA9IG5ldyBIaWdobGlnaHRWaXNpdG9ySW1wbChQc2lSZXNvbHZlSGVscGVyLlNFUlZJQ0UuZ2V0SW5zdGFuY2UoZ2V0UHJvamVjdCgpKSk7CisgICAgICAgICAgICB2aXNpdG9yLmFuYWx5emUobXlGaWxlLCBmYWxzZSwgaW5mb0hvbGRlciwgbmV3IFJ1bm5hYmxlKCkgeworICAgICAgICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgICAgICAgcHVibGljIHZvaWQgcnVuKCkgeworICAgICAgICAgICAgICAgIHZpc2l0b3IudmlzaXQoZWxlbWVudCk7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0pOworICAgICAgICAgIH0KKyAgICAgICAgfSk7CisgICAgICAgIGJyZWFrOworCisgICAgICBjYXNlIDM6CisgICAgICAgIG1hcmsoInUiKTsKKyAgICAgICAgZm9yIChQc2lNZXRob2QgbWV0aG9kIDogYUNsYXNzLmdldE1ldGhvZHMoKSkgeworICAgICAgICAgIG1ldGhvZC5nZXROYW1lKCk7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgfQorICB9CisKKyAgQE92ZXJyaWRlCisgIHByb3RlY3RlZCB2b2lkIGludm9rZVRlc3RSdW5uYWJsZShmaW5hbCBSdW5uYWJsZSBydW5uYWJsZSkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgcnVubmFibGUucnVuKCk7CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9wc2kvUHNpRG9jdW1lbnRNYW5hZ2VySW1wbFRlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9wc2kvUHNpRG9jdW1lbnRNYW5hZ2VySW1wbFRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYWFkM2ZkCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL3BzaS9Qc2lEb2N1bWVudE1hbmFnZXJJbXBsVGVzdC5qYXZhCkBAIC0wLDAgKzEsMzc0IEBACisvKgorICogQ29weXJpZ2h0IDIwMDAtMjAxMiBKZXRCcmFpbnMgcy5yLm8uCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworcGFja2FnZSBjb20uaW50ZWxsaWoucHNpOworCitpbXBvcnQgY29tLmludGVsbGlqLmlkZS5pbXBsLlByb2plY3RVdGlsOworaW1wb3J0IGNvbS5pbnRlbGxpai5tb2NrLk1vY2tEb2N1bWVudDsKK2ltcG9ydCBjb20uaW50ZWxsaWoubW9jay5Nb2NrUHNpRmlsZTsKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS5hcHBsaWNhdGlvbi5BcHBsaWNhdGlvbk1hbmFnZXI7CitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkuZWRpdG9yLkRvY3VtZW50OworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLmVkaXRvci5pbXBsLkRvY3VtZW50SW1wbDsKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS5lZGl0b3IuaW1wbC5ldmVudC5Eb2N1bWVudEV2ZW50SW1wbDsKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS5maWxlRWRpdG9yLkZpbGVEb2N1bWVudE1hbmFnZXI7CitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkuZmlsZUVkaXRvci5pbXBsLkZpbGVEb2N1bWVudE1hbmFnZXJJbXBsOworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLnByb2plY3QuUHJvamVjdDsKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS5wcm9qZWN0LmV4LlByb2plY3RNYW5hZ2VyRXg7CitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkudmZzLkxvY2FsRmlsZVN5c3RlbTsKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS52ZnMuVmlydHVhbEZpbGU7CitpbXBvcnQgY29tLmludGVsbGlqLnBzaS5pbXBsLkRlYnVnVXRpbDsKK2ltcG9ydCBjb20uaW50ZWxsaWoucHNpLmltcGwuUHNpRG9jdW1lbnRNYW5hZ2VySW1wbDsKK2ltcG9ydCBjb20uaW50ZWxsaWoucHNpLmltcGwuVGV4dEJsb2NrOworaW1wb3J0IGNvbS5pbnRlbGxpai5wc2kuaW1wbC5zb3VyY2UuUHNpRmlsZUltcGw7CitpbXBvcnQgY29tLmludGVsbGlqLnRlc3RGcmFtZXdvcmsuTGVha0h1bnRlcjsKK2ltcG9ydCBjb20uaW50ZWxsaWoudGVzdEZyYW1ld29yay5MaWdodFZpcnR1YWxGaWxlOworaW1wb3J0IGNvbS5pbnRlbGxpai50ZXN0RnJhbWV3b3JrLlBsYXRmb3JtVGVzdENhc2U7CitpbXBvcnQgY29tLmludGVsbGlqLnV0aWwuUHJvY2Vzc29yOworaW1wb3J0IGNvbS5pbnRlbGxpai51dGlsLmNvbmN1cnJlbmN5LlNlbWFwaG9yZTsKK2ltcG9ydCBjb20uaW50ZWxsaWoudXRpbC51aS5VSVV0aWw7CisKK2ltcG9ydCBqYXZhLmlvLkZpbGU7CitpbXBvcnQgamF2YS5sYW5nLnJlZi5SZWZlcmVuY2U7CitpbXBvcnQgamF2YS51dGlsLmNvbmN1cnJlbnQuYXRvbWljLkF0b21pY0ludGVnZXI7CisKK3B1YmxpYyBjbGFzcyBQc2lEb2N1bWVudE1hbmFnZXJJbXBsVGVzdCBleHRlbmRzIFBsYXRmb3JtVGVzdENhc2UgeworICBwcml2YXRlIFBzaURvY3VtZW50TWFuYWdlckltcGwgZ2V0UHNpRG9jdW1lbnRNYW5hZ2VyKCkgeworICAgIHJldHVybiAoUHNpRG9jdW1lbnRNYW5hZ2VySW1wbClQc2lEb2N1bWVudE1hbmFnZXIuZ2V0SW5zdGFuY2UoZ2V0UHJvamVjdCgpKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RHZXRDYWNoZWRQc2lGaWxlX05vRmlsZSgpIHRocm93cyBFeGNlcHRpb24geworICAgIGZpbmFsIFBzaUZpbGUgZmlsZSA9IGdldFBzaURvY3VtZW50TWFuYWdlcigpLmdldENhY2hlZFBzaUZpbGUobmV3IE1vY2tEb2N1bWVudCgpKTsKKyAgICBhc3NlcnROdWxsKGZpbGUpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEdldFBzaUZpbGVfTm90UmVnaXN0ZXJlZERvY3VtZW50KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZmluYWwgUHNpRmlsZSBmaWxlID0gZ2V0UHNpRG9jdW1lbnRNYW5hZ2VyKCkuZ2V0UHNpRmlsZShuZXcgTW9ja0RvY3VtZW50KCkpOworICAgIGFzc2VydE51bGwoZmlsZSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0R2V0RG9jdW1lbnRfRmlyc3RHZXQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBWaXJ0dWFsRmlsZSB2RmlsZSA9IGNyZWF0ZUZpbGUoKTsKKyAgICBmaW5hbCBQc2lGaWxlIGZpbGUgPSBuZXcgTW9ja1BzaUZpbGUodkZpbGUsIGdldFBzaU1hbmFnZXIoKSk7CisKKyAgICBmaW5hbCBEb2N1bWVudCBkb2N1bWVudCA9IGdldFBzaURvY3VtZW50TWFuYWdlcigpLmdldERvY3VtZW50KGZpbGUpOworICAgIGFzc2VydE5vdE51bGwoZG9jdW1lbnQpOworICAgIGFzc2VydFNhbWUoZG9jdW1lbnQsIEZpbGVEb2N1bWVudE1hbmFnZXIuZ2V0SW5zdGFuY2UoKS5nZXREb2N1bWVudCh2RmlsZSkpOworICB9CisKKyAgQE92ZXJyaWRlCisgIHByb3RlY3RlZCBib29sZWFuIGlzUnVuSW5Xcml0ZUFjdGlvbigpIHsKKyAgICByZXR1cm4gZmFsc2U7CisgIH0KKworICBwcml2YXRlIHN0YXRpYyBMaWdodFZpcnR1YWxGaWxlIGNyZWF0ZUZpbGUoKSB7CisgICAgcmV0dXJuIG5ldyBMaWdodFZpcnR1YWxGaWxlKCJmb28uamF2YSIpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdERvY3VtZW50R2NlZCgpIHRocm93cyBFeGNlcHRpb24geworICAgIFZpcnR1YWxGaWxlIHZGaWxlID0gY3JlYXRlRmlsZSgpOworICAgIFBzaURvY3VtZW50TWFuYWdlckltcGwgZG9jdW1lbnRNYW5hZ2VyID0gZ2V0UHNpRG9jdW1lbnRNYW5hZ2VyKCk7CisgICAgbG9uZyBpZCA9IFN5c3RlbS5pZGVudGl0eUhhc2hDb2RlKGRvY3VtZW50TWFuYWdlci5nZXREb2N1bWVudChnZXRQc2lNYW5hZ2VyKCkuZmluZEZpbGUodkZpbGUpKSk7CisKKyAgICBkb2N1bWVudE1hbmFnZXIuY29tbWl0QWxsRG9jdW1lbnRzKCk7CisgICAgVUlVdGlsLmRpc3BhdGNoQWxsSW52b2NhdGlvbkV2ZW50cygpOworICAgIFVJVXRpbC5kaXNwYXRjaEFsbEludm9jYXRpb25FdmVudHMoKTsKKyAgICBhc3NlcnRFbXB0eShkb2N1bWVudE1hbmFnZXIuZ2V0VW5jb21taXR0ZWREb2N1bWVudHMoKSk7CisKKyAgICBMZWFrSHVudGVyLmNoZWNrTGVhayhkb2N1bWVudE1hbmFnZXIsIERvY3VtZW50SW1wbC5jbGFzcyk7CisgICAgTGVha0h1bnRlci5jaGVja0xlYWsoZG9jdW1lbnRNYW5hZ2VyLCBQc2lGaWxlSW1wbC5jbGFzcywgbmV3IFByb2Nlc3NvcjxQc2lGaWxlSW1wbD4oKSB7CisgICAgICBAT3ZlcnJpZGUKKyAgICAgIHB1YmxpYyBib29sZWFuIHByb2Nlc3MoUHNpRmlsZUltcGwgcHNpRmlsZSkgeworICAgICAgICByZXR1cm4gcHNpRmlsZS5nZXRWaWV3UHJvdmlkZXIoKS5nZXRWaXJ0dWFsRmlsZSgpLmdldEZpbGVTeXN0ZW0oKSBpbnN0YW5jZW9mIExvY2FsRmlsZVN5c3RlbTsKKyAgICAgIH0KKyAgICB9KTsKKyAgICAvL0NsYXNzLmZvck5hbWUoImNvbS5pbnRlbGxpai51dGlsLlByb2ZpbGluZ1V0aWwiKS5nZXREZWNsYXJlZE1ldGhvZCgiZm9yY2VDYXB0dXJlTWVtb3J5U25hcHNob3QiKS5pbnZva2UobnVsbCk7CisKKyAgICBSZWZlcmVuY2U8RG9jdW1lbnQ+IHJlZmVyZW5jZSA9IHZGaWxlLmdldFVzZXJEYXRhKEZpbGVEb2N1bWVudE1hbmFnZXJJbXBsLkRPQ1VNRU5UX0tFWSk7CisgICAgYXNzZXJ0Tm90TnVsbChyZWZlcmVuY2UpOworICAgIGZvciAoaW50IGk9MDtpPDEwMDA7aSsrKSB7CisgICAgICBVSVV0aWwuZGlzcGF0Y2hBbGxJbnZvY2F0aW9uRXZlbnRzKCk7CisgICAgICBpZiAocmVmZXJlbmNlLmdldCgpID09IG51bGwpIGJyZWFrOworICAgICAgU3lzdGVtLmdjKCk7CisgICAgfQorICAgIGFzc2VydE51bGwoZG9jdW1lbnRNYW5hZ2VyLmdldENhY2hlZERvY3VtZW50KGdldFBzaU1hbmFnZXIoKS5maW5kRmlsZSh2RmlsZSkpKTsKKworICAgIERvY3VtZW50IG5ld0RvYyA9IGRvY3VtZW50TWFuYWdlci5nZXREb2N1bWVudChnZXRQc2lNYW5hZ2VyKCkuZmluZEZpbGUodkZpbGUpKTsKKyAgICBhc3NlcnRUcnVlKGlkICE9IFN5c3RlbS5pZGVudGl0eUhhc2hDb2RlKG5ld0RvYykpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEdldFVuY29tbWl0dGVkRG9jdW1lbnRzX25vRG9jdW1lbnRzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgYXNzZXJ0RXF1YWxzKDAsIGdldFBzaURvY3VtZW50TWFuYWdlcigpLmdldFVuY29tbWl0dGVkRG9jdW1lbnRzKCkubGVuZ3RoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RHZXRVbmNvbW1pdHRlZERvY3VtZW50c19kb2N1bWVudENoYW5nZWRfRG9udFByb2Nlc3NFdmVudHMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBQc2lGaWxlIGZpbGUgPSBnZXRQc2lNYW5hZ2VyKCkuZmluZEZpbGUoY3JlYXRlRmlsZSgpKTsKKworICAgIGZpbmFsIERvY3VtZW50IGRvY3VtZW50ID0gZ2V0UHNpRG9jdW1lbnRNYW5hZ2VyKCkuZ2V0RG9jdW1lbnQoZmlsZSk7CisKKyAgICBmaW5hbCBUZXh0QmxvY2sgYmxvY2sgPSBUZXh0QmxvY2suZ2V0KGZpbGUpOworICAgIEFwcGxpY2F0aW9uTWFuYWdlci5nZXRBcHBsaWNhdGlvbigpLnJ1bldyaXRlQWN0aW9uKG5ldyBSdW5uYWJsZSgpIHsKKyAgICAgIEBPdmVycmlkZQorICAgICAgcHVibGljIHZvaWQgcnVuKCkgeworICAgICAgICBibG9jay5wZXJmb3JtQXRvbWljYWxseShuZXcgUnVubmFibGUoKSB7CisgICAgICAgICAgQE92ZXJyaWRlCisgICAgICAgICAgcHVibGljIHZvaWQgcnVuKCkgeworICAgICAgICAgICAgZ2V0UHNpRG9jdW1lbnRNYW5hZ2VyKCkuZG9jdW1lbnRDaGFuZ2VkKG5ldyBEb2N1bWVudEV2ZW50SW1wbChkb2N1bWVudCwgMCwgIiIsICIiLCBkb2N1bWVudC5nZXRNb2RpZmljYXRpb25TdGFtcCgpLCBmYWxzZSkpOworICAgICAgICAgIH0KKyAgICAgICAgfSk7CisgICAgICB9CisgICAgfSk7CisKKworICAgIGFzc2VydEVxdWFscygwLCBnZXRQc2lEb2N1bWVudE1hbmFnZXIoKS5nZXRVbmNvbW1pdHRlZERvY3VtZW50cygpLmxlbmd0aCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0R2V0VW5jb21taXR0ZWREb2N1bWVudHNfZG9jdW1lbnROb3RSZWdpc3RlcmVkKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZmluYWwgRG9jdW1lbnQgZG9jdW1lbnQgPSBuZXcgTW9ja0RvY3VtZW50KCk7CisKKyAgICBBcHBsaWNhdGlvbk1hbmFnZXIuZ2V0QXBwbGljYXRpb24oKS5ydW5Xcml0ZUFjdGlvbihuZXcgUnVubmFibGUoKSB7CisgICAgICBAT3ZlcnJpZGUKKyAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKKyAgICAgICAgZ2V0UHNpRG9jdW1lbnRNYW5hZ2VyKCkuZG9jdW1lbnRDaGFuZ2VkKG5ldyBEb2N1bWVudEV2ZW50SW1wbChkb2N1bWVudCwgMCwgIiIsICIiLCBkb2N1bWVudC5nZXRNb2RpZmljYXRpb25TdGFtcCgpLCBmYWxzZSkpOworICAgICAgfQorICAgIH0pOworCisKKyAgICBhc3NlcnRFcXVhbHMoMCwgZ2V0UHNpRG9jdW1lbnRNYW5hZ2VyKCkuZ2V0VW5jb21taXR0ZWREb2N1bWVudHMoKS5sZW5ndGgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdENvbW1pdERvY3VtZW50X1JlbW92ZXNGcm9tVW5jb21taXR0ZWRMaXN0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgUHNpRmlsZSBmaWxlID0gZ2V0UHNpTWFuYWdlcigpLmZpbmRGaWxlKGNyZWF0ZUZpbGUoKSk7CisKKyAgICBmaW5hbCBEb2N1bWVudCBkb2N1bWVudCA9IGdldFBzaURvY3VtZW50TWFuYWdlcigpLmdldERvY3VtZW50KGZpbGUpOworCisgICAgQXBwbGljYXRpb25NYW5hZ2VyLmdldEFwcGxpY2F0aW9uKCkucnVuV3JpdGVBY3Rpb24obmV3IFJ1bm5hYmxlKCkgeworICAgICAgQE92ZXJyaWRlCisgICAgICBwdWJsaWMgdm9pZCBydW4oKSB7CisgICAgICAgIGdldFBzaURvY3VtZW50TWFuYWdlcigpLmRvY3VtZW50Q2hhbmdlZChuZXcgRG9jdW1lbnRFdmVudEltcGwoZG9jdW1lbnQsIDAsICIiLCAiIiwgZG9jdW1lbnQuZ2V0TW9kaWZpY2F0aW9uU3RhbXAoKSwgZmFsc2UpKTsKKyAgICAgIH0KKyAgICB9KTsKKworCisgICAgZ2V0UHNpRG9jdW1lbnRNYW5hZ2VyKCkuY29tbWl0RG9jdW1lbnQoZG9jdW1lbnQpOworICAgIGFzc2VydEVxdWFscygwLCBnZXRQc2lEb2N1bWVudE1hbmFnZXIoKS5nZXRVbmNvbW1pdHRlZERvY3VtZW50cygpLmxlbmd0aCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0Q29tbWl0QWxsRG9jdW1lbnRfUmVtb3Zlc0Zyb21VbmNvbW1pdHRlZExpc3QoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBQc2lGaWxlIGZpbGUgPSBnZXRQc2lNYW5hZ2VyKCkuZmluZEZpbGUoY3JlYXRlRmlsZSgpKTsKKworICAgIGZpbmFsIERvY3VtZW50IGRvY3VtZW50ID0gZ2V0UHNpRG9jdW1lbnRNYW5hZ2VyKCkuZ2V0RG9jdW1lbnQoZmlsZSk7CisKKyAgICBBcHBsaWNhdGlvbk1hbmFnZXIuZ2V0QXBwbGljYXRpb24oKS5ydW5Xcml0ZUFjdGlvbihuZXcgUnVubmFibGUoKSB7CisgICAgICBAT3ZlcnJpZGUKKyAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKKyAgICAgICAgZ2V0UHNpRG9jdW1lbnRNYW5hZ2VyKCkuZG9jdW1lbnRDaGFuZ2VkKG5ldyBEb2N1bWVudEV2ZW50SW1wbChkb2N1bWVudCwgMCwgIiIsICIiLCBkb2N1bWVudC5nZXRNb2RpZmljYXRpb25TdGFtcCgpLCBmYWxzZSkpOworICAgICAgfQorICAgIH0pOworCisKKyAgICBnZXRQc2lEb2N1bWVudE1hbmFnZXIoKS5jb21taXRBbGxEb2N1bWVudHMoKTsKKyAgICBhc3NlcnRFcXVhbHMoMCwgZ2V0UHNpRG9jdW1lbnRNYW5hZ2VyKCkuZ2V0VW5jb21taXR0ZWREb2N1bWVudHMoKS5sZW5ndGgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdERvY3VtZW50RnJvbUFsaWVuUHJvamVjdERvZXNOb3RFbmRVcEluTXlVbmNvbW1pdHRlZExpc3QoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBQc2lGaWxlIGZpbGUgPSBnZXRQc2lNYW5hZ2VyKCkuZmluZEZpbGUoY3JlYXRlRmlsZSgpKTsKKworICAgIGZpbmFsIERvY3VtZW50IGRvY3VtZW50ID0gZ2V0UHNpRG9jdW1lbnRNYW5hZ2VyKCkuZ2V0RG9jdW1lbnQoZmlsZSk7CisKKyAgICBGaWxlIHRlbXAgPSBjcmVhdGVUZW1wRGlyZWN0b3J5KCk7CisgICAgZmluYWwgUHJvamVjdCBhbGllblByb2plY3QgPSBjcmVhdGVQcm9qZWN0KG5ldyBGaWxlKHRlbXAsICJhbGllbi5pcHIiKSwgRGVidWdVdGlsLmN1cnJlbnRTdGFja1RyYWNlKCkpOworICAgIGJvb2xlYW4gc3VjYzIgPSBQcm9qZWN0TWFuYWdlckV4LmdldEluc3RhbmNlRXgoKS5vcGVuUHJvamVjdChhbGllblByb2plY3QpOworICAgIGFzc2VydFRydWUoc3VjYzIpOworCisKKyAgICB0cnkgeworICAgICAgUHNpTWFuYWdlciBhbGllbk1hbmFnZXIgPSBQc2lNYW5hZ2VyLmdldEluc3RhbmNlKGFsaWVuUHJvamVjdCk7CisgICAgICBmaW5hbCBTdHJpbmcgYWxpZW5UZXh0ID0gImFsaWVuIjsKKworICAgICAgTGlnaHRWaXJ0dWFsRmlsZSBhbGllblZpcnQgPSBuZXcgTGlnaHRWaXJ0dWFsRmlsZSgiZm9vLmphdmEiLCBhbGllblRleHQpOworICAgICAgZmluYWwgUHNpRmlsZSBhbGllbkZpbGUgPSBhbGllbk1hbmFnZXIuZmluZEZpbGUoYWxpZW5WaXJ0KTsKKyAgICAgIGZpbmFsIFBzaURvY3VtZW50TWFuYWdlckltcGwgYWxpZW5Eb2NNYW5hZ2VyID0gKFBzaURvY3VtZW50TWFuYWdlckltcGwpUHNpRG9jdW1lbnRNYW5hZ2VyLmdldEluc3RhbmNlKGFsaWVuUHJvamVjdCk7CisgICAgICBmaW5hbCBEb2N1bWVudCBhbGllbkRvY3VtZW50ID0gYWxpZW5Eb2NNYW5hZ2VyLmdldERvY3VtZW50KGFsaWVuRmlsZSk7CisgICAgICAvL2FsaWVuRG9jdW1lbnQucHV0VXNlckRhdGEoQ0FDSEVEX1ZJRVdfUFJPVklERVIsIG5ldyBNb2NrRmlsZVZpZXdQcm92aWRlcihhbGllbkZpbGUpKTsKKyAgICAgIGFzc2VydEVxdWFscygwLCBhbGllbkRvY01hbmFnZXIuZ2V0VW5jb21taXR0ZWREb2N1bWVudHMoKS5sZW5ndGgpOworICAgICAgYXNzZXJ0RXF1YWxzKDAsIGdldFBzaURvY3VtZW50TWFuYWdlcigpLmdldFVuY29tbWl0dGVkRG9jdW1lbnRzKCkubGVuZ3RoKTsKKworICAgICAgQXBwbGljYXRpb25NYW5hZ2VyLmdldEFwcGxpY2F0aW9uKCkucnVuV3JpdGVBY3Rpb24obmV3IFJ1bm5hYmxlKCkgeworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIHZvaWQgcnVuKCkgeworICAgICAgICAgIGdldFBzaURvY3VtZW50TWFuYWdlcigpCisgICAgICAgICAgICAuZG9jdW1lbnRDaGFuZ2VkKG5ldyBEb2N1bWVudEV2ZW50SW1wbChhbGllbkRvY3VtZW50LCAwLCAiIiwgIiIsIGFsaWVuRG9jdW1lbnQuZ2V0TW9kaWZpY2F0aW9uU3RhbXAoKSwgZmFsc2UpKTsKKyAgICAgICAgICBhc3NlcnRFcXVhbHMoMCwgZ2V0UHNpRG9jdW1lbnRNYW5hZ2VyKCkuZ2V0VW5jb21taXR0ZWREb2N1bWVudHMoKS5sZW5ndGgpOworICAgICAgICAgIGFzc2VydEVxdWFscygwLCBhbGllbkRvY01hbmFnZXIuZ2V0VW5jb21taXR0ZWREb2N1bWVudHMoKS5sZW5ndGgpOworCisgICAgICAgICAgYWxpZW5Eb2NNYW5hZ2VyLmRvY3VtZW50Q2hhbmdlZChuZXcgRG9jdW1lbnRFdmVudEltcGwoYWxpZW5Eb2N1bWVudCwgMCwgIiIsICIiLCBhbGllbkRvY3VtZW50LmdldE1vZGlmaWNhdGlvblN0YW1wKCksIGZhbHNlKSk7CisgICAgICAgICAgYXNzZXJ0RXF1YWxzKDAsIGdldFBzaURvY3VtZW50TWFuYWdlcigpLmdldFVuY29tbWl0dGVkRG9jdW1lbnRzKCkubGVuZ3RoKTsKKyAgICAgICAgICBhc3NlcnRFcXVhbHMoMSwgYWxpZW5Eb2NNYW5hZ2VyLmdldFVuY29tbWl0dGVkRG9jdW1lbnRzKCkubGVuZ3RoKTsKKworICAgICAgICAgIGdldFBzaURvY3VtZW50TWFuYWdlcigpLmRvY3VtZW50Q2hhbmdlZChuZXcgRG9jdW1lbnRFdmVudEltcGwoZG9jdW1lbnQsIDAsICIiLCAiIiwgZG9jdW1lbnQuZ2V0TW9kaWZpY2F0aW9uU3RhbXAoKSwgZmFsc2UpKTsKKyAgICAgICAgICBhc3NlcnRFcXVhbHMoMSwgZ2V0UHNpRG9jdW1lbnRNYW5hZ2VyKCkuZ2V0VW5jb21taXR0ZWREb2N1bWVudHMoKS5sZW5ndGgpOworICAgICAgICAgIGFzc2VydEVxdWFscygxLCBhbGllbkRvY01hbmFnZXIuZ2V0VW5jb21taXR0ZWREb2N1bWVudHMoKS5sZW5ndGgpOworCisgICAgICAgICAgYWxpZW5Eb2NNYW5hZ2VyLmRvY3VtZW50Q2hhbmdlZChuZXcgRG9jdW1lbnRFdmVudEltcGwoZG9jdW1lbnQsIDAsICIiLCAiIiwgZG9jdW1lbnQuZ2V0TW9kaWZpY2F0aW9uU3RhbXAoKSwgZmFsc2UpKTsKKyAgICAgICAgICBhc3NlcnRFcXVhbHMoMSwgZ2V0UHNpRG9jdW1lbnRNYW5hZ2VyKCkuZ2V0VW5jb21taXR0ZWREb2N1bWVudHMoKS5sZW5ndGgpOworICAgICAgICAgIGFzc2VydEVxdWFscygxLCBhbGllbkRvY01hbmFnZXIuZ2V0VW5jb21taXR0ZWREb2N1bWVudHMoKS5sZW5ndGgpOworICAgICAgICB9CisgICAgICB9KTsKKyAgICB9CisgICAgZmluYWxseSB7CisgICAgICBQcm9qZWN0VXRpbC5jbG9zZUFuZERpc3Bvc2UoYWxpZW5Qcm9qZWN0KTsKKyAgICB9CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0Q29tbWl0SW5CYWNrZ3JvdW5kKCkgeworICAgIFBzaUZpbGUgZmlsZSA9IGdldFBzaU1hbmFnZXIoKS5maW5kRmlsZShjcmVhdGVGaWxlKCkpOworICAgIGFzc2VydE5vdE51bGwoZmlsZSk7CisgICAgYXNzZXJ0VHJ1ZShmaWxlLmlzUGh5c2ljYWwoKSk7CisgICAgZmluYWwgRG9jdW1lbnQgZG9jdW1lbnQgPSBnZXRQc2lEb2N1bWVudE1hbmFnZXIoKS5nZXREb2N1bWVudChmaWxlKTsKKyAgICBhc3NlcnROb3ROdWxsKGRvY3VtZW50KTsKKworICAgIGZpbmFsIFNlbWFwaG9yZSBzZW1hcGhvcmUgPSBuZXcgU2VtYXBob3JlKCk7CisgICAgc2VtYXBob3JlLmRvd24oKTsKKyAgICBnZXRQc2lEb2N1bWVudE1hbmFnZXIoKS5wZXJmb3JtV2hlbkFsbENvbW1pdHRlZChuZXcgUnVubmFibGUoKSB7CisgICAgICBAT3ZlcnJpZGUKKyAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKKyAgICAgICAgYXNzZXJ0VHJ1ZShnZXRQc2lEb2N1bWVudE1hbmFnZXIoKS5pc0NvbW1pdHRlZChkb2N1bWVudCkpOworICAgICAgICBzZW1hcGhvcmUudXAoKTsKKyAgICAgIH0KKyAgICB9KTsKKyAgICB3YWl0QW5kUHVtcChzZW1hcGhvcmUsIDMwMDAwKTsKKyAgICBhc3NlcnRUcnVlKGdldFBzaURvY3VtZW50TWFuYWdlcigpLmlzQ29tbWl0dGVkKGRvY3VtZW50KSk7CisKKyAgICBBcHBsaWNhdGlvbk1hbmFnZXIuZ2V0QXBwbGljYXRpb24oKS5ydW5Xcml0ZUFjdGlvbihuZXcgUnVubmFibGUoKSB7CisgICAgICBAT3ZlcnJpZGUKKyAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKKyAgICAgICAgZG9jdW1lbnQuaW5zZXJ0U3RyaW5nKDAsICJjbGFzcyBYIHt9Iik7CisgICAgICB9CisgICAgfSk7CisKKyAgICBzZW1hcGhvcmUuZG93bigpOworICAgIGdldFBzaURvY3VtZW50TWFuYWdlcigpLnBlcmZvcm1XaGVuQWxsQ29tbWl0dGVkKG5ldyBSdW5uYWJsZSgpIHsKKyAgICAgIEBPdmVycmlkZQorICAgICAgcHVibGljIHZvaWQgcnVuKCkgeworICAgICAgICBhc3NlcnRUcnVlKGdldFBzaURvY3VtZW50TWFuYWdlcigpLmlzQ29tbWl0dGVkKGRvY3VtZW50KSk7CisgICAgICAgIHNlbWFwaG9yZS51cCgpOworICAgICAgfQorICAgIH0pOworICAgIHdhaXRBbmRQdW1wKHNlbWFwaG9yZSwgMzAwMDApOworICAgIGFzc2VydFRydWUoZ2V0UHNpRG9jdW1lbnRNYW5hZ2VyKCkuaXNDb21taXR0ZWQoZG9jdW1lbnQpKTsKKworICAgIGZpbmFsIEF0b21pY0ludGVnZXIgY291bnQgPSBuZXcgQXRvbWljSW50ZWdlcigpOworICAgIGZpbmFsIFJ1bm5hYmxlIGFjdGlvbiA9IG5ldyBSdW5uYWJsZSgpIHsKKyAgICAgIEBPdmVycmlkZQorICAgICAgcHVibGljIHZvaWQgcnVuKCkgeworICAgICAgICBjb3VudC5pbmNyZW1lbnRBbmRHZXQoKTsKKyAgICAgIH0KKyAgICB9OworCisgICAgQXBwbGljYXRpb25NYW5hZ2VyLmdldEFwcGxpY2F0aW9uKCkucnVuV3JpdGVBY3Rpb24obmV3IFJ1bm5hYmxlKCkgeworICAgICAgQE92ZXJyaWRlCisgICAgICBwdWJsaWMgdm9pZCBydW4oKSB7CisgICAgICAgIGRvY3VtZW50Lmluc2VydFN0cmluZygwLCAiLyoqLyIpOworICAgICAgICBib29sZWFuIGV4ZWN1dGVkID0gZ2V0UHNpRG9jdW1lbnRNYW5hZ2VyKCkuY2FuY2VsQW5kUnVuV2hlbkFsbENvbW1pdHRlZCgieHh4IiwgYWN0aW9uKTsKKyAgICAgICAgYXNzZXJ0RmFsc2UoZXhlY3V0ZWQpOworICAgICAgICBleGVjdXRlZCA9IGdldFBzaURvY3VtZW50TWFuYWdlcigpLmNhbmNlbEFuZFJ1bldoZW5BbGxDb21taXR0ZWQoInh4eCIsIGFjdGlvbik7CisgICAgICAgIGFzc2VydEZhbHNlKGV4ZWN1dGVkKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKDAsIGNvdW50LmdldCgpKTsKKyAgICAgIH0KKyAgICB9KTsKKworICAgIHdoaWxlICghZ2V0UHNpRG9jdW1lbnRNYW5hZ2VyKCkuaXNDb21taXR0ZWQoZG9jdW1lbnQpKSB7CisgICAgICBVSVV0aWwuZGlzcGF0Y2hBbGxJbnZvY2F0aW9uRXZlbnRzKCk7CisgICAgfQorICAgIGFzc2VydFRydWUoZ2V0UHNpRG9jdW1lbnRNYW5hZ2VyKCkuaXNDb21taXR0ZWQoZG9jdW1lbnQpKTsKKyAgICBhc3NlcnRFcXVhbHMoMSwgY291bnQuZ2V0KCkpOworCisgICAgY291bnQuc2V0KDApOworICAgIEFwcGxpY2F0aW9uTWFuYWdlci5nZXRBcHBsaWNhdGlvbigpLnJ1bldyaXRlQWN0aW9uKG5ldyBSdW5uYWJsZSgpIHsKKyAgICAgIEBPdmVycmlkZQorICAgICAgcHVibGljIHZvaWQgcnVuKCkgeworICAgICAgICBkb2N1bWVudC5pbnNlcnRTdHJpbmcoMCwgIi8qKi8iKTsKKyAgICAgICAgYm9vbGVhbiBleGVjdXRlZCA9IGdldFBzaURvY3VtZW50TWFuYWdlcigpLnBlcmZvcm1XaGVuQWxsQ29tbWl0dGVkKGFjdGlvbik7CisgICAgICAgIGFzc2VydEZhbHNlKGV4ZWN1dGVkKTsKKyAgICAgICAgZXhlY3V0ZWQgPSBnZXRQc2lEb2N1bWVudE1hbmFnZXIoKS5wZXJmb3JtV2hlbkFsbENvbW1pdHRlZChhY3Rpb24pOworICAgICAgICBhc3NlcnRGYWxzZShleGVjdXRlZCk7CisgICAgICAgIGFzc2VydEVxdWFscygwLCBjb3VudC5nZXQoKSk7CisgICAgICB9CisgICAgfSk7CisKKyAgICB3aGlsZSAoIWdldFBzaURvY3VtZW50TWFuYWdlcigpLmlzQ29tbWl0dGVkKGRvY3VtZW50KSkgeworICAgICAgVUlVdGlsLmRpc3BhdGNoQWxsSW52b2NhdGlvbkV2ZW50cygpOworICAgIH0KKyAgICBhc3NlcnRUcnVlKGdldFBzaURvY3VtZW50TWFuYWdlcigpLmlzQ29tbWl0dGVkKGRvY3VtZW50KSk7CisgICAgYXNzZXJ0RXF1YWxzKDIsIGNvdW50LmdldCgpKTsKKyAgfQorCisgIHByaXZhdGUgc3RhdGljIHZvaWQgd2FpdEFuZFB1bXAoU2VtYXBob3JlIHNlbWFwaG9yZSwgaW50IHRpbWVvdXQpIHsKKyAgICBmaW5hbCBsb25nIGxpbWl0ID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCkgKyB0aW1lb3V0OworICAgIHdoaWxlIChTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKSA8IGxpbWl0KSB7CisgICAgICBpZiAoc2VtYXBob3JlLndhaXRGb3IoMTApKSByZXR1cm47CisgICAgICBVSVV0aWwuZGlzcGF0Y2hBbGxJbnZvY2F0aW9uRXZlbnRzKCk7CisgICAgfQorICAgIGZhaWwoIlRpbWVvdXQiKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3REb2N1bWVudEZyb21BbGllblByb2plY3RHZXRzQ29tbWl0dGVkSW5CYWNrZ3JvdW5kKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgTGlnaHRWaXJ0dWFsRmlsZSB2aXJ0dWFsRmlsZSA9IGNyZWF0ZUZpbGUoKTsKKyAgICBQc2lGaWxlIGZpbGUgPSBnZXRQc2lNYW5hZ2VyKCkuZmluZEZpbGUodmlydHVhbEZpbGUpOworCisgICAgZmluYWwgRG9jdW1lbnQgZG9jdW1lbnQgPSBnZXRQc2lEb2N1bWVudE1hbmFnZXIoKS5nZXREb2N1bWVudChmaWxlKTsKKworICAgIEZpbGUgdGVtcCA9IGNyZWF0ZVRlbXBEaXJlY3RvcnkoKTsKKyAgICBmaW5hbCBQcm9qZWN0IGFsaWVuUHJvamVjdCA9IGNyZWF0ZVByb2plY3QobmV3IEZpbGUodGVtcCwgImFsaWVuLmlwciIpLCBEZWJ1Z1V0aWwuY3VycmVudFN0YWNrVHJhY2UoKSk7CisgICAgYm9vbGVhbiBzdWNjMiA9IFByb2plY3RNYW5hZ2VyRXguZ2V0SW5zdGFuY2VFeCgpLm9wZW5Qcm9qZWN0KGFsaWVuUHJvamVjdCk7CisgICAgYXNzZXJ0VHJ1ZShzdWNjMik7CisKKworICAgIHRyeSB7CisgICAgICBQc2lNYW5hZ2VyIGFsaWVuTWFuYWdlciA9IFBzaU1hbmFnZXIuZ2V0SW5zdGFuY2UoYWxpZW5Qcm9qZWN0KTsKKworICAgICAgZmluYWwgUHNpRmlsZSBhbGllbkZpbGUgPSBhbGllbk1hbmFnZXIuZmluZEZpbGUodmlydHVhbEZpbGUpOworICAgICAgYXNzZXJ0Tm90TnVsbChhbGllbkZpbGUpOworICAgICAgZmluYWwgUHNpRG9jdW1lbnRNYW5hZ2VySW1wbCBhbGllbkRvY01hbmFnZXIgPSAoUHNpRG9jdW1lbnRNYW5hZ2VySW1wbClQc2lEb2N1bWVudE1hbmFnZXIuZ2V0SW5zdGFuY2UoYWxpZW5Qcm9qZWN0KTsKKyAgICAgIGZpbmFsIERvY3VtZW50IGFsaWVuRG9jdW1lbnQgPSBhbGllbkRvY01hbmFnZXIuZ2V0RG9jdW1lbnQoYWxpZW5GaWxlKTsKKyAgICAgIGFzc2VydFNhbWUoZG9jdW1lbnQsIGFsaWVuRG9jdW1lbnQpOworICAgICAgYXNzZXJ0RXF1YWxzKDAsIGFsaWVuRG9jTWFuYWdlci5nZXRVbmNvbW1pdHRlZERvY3VtZW50cygpLmxlbmd0aCk7CisgICAgICBhc3NlcnRFcXVhbHMoMCwgZ2V0UHNpRG9jdW1lbnRNYW5hZ2VyKCkuZ2V0VW5jb21taXR0ZWREb2N1bWVudHMoKS5sZW5ndGgpOworCisgICAgICBBcHBsaWNhdGlvbk1hbmFnZXIuZ2V0QXBwbGljYXRpb24oKS5ydW5Xcml0ZUFjdGlvbihuZXcgUnVubmFibGUoKSB7CisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgdm9pZCBydW4oKSB7CisgICAgICAgICAgZG9jdW1lbnQuc2V0VGV4dCgieHh4Iik7CisgICAgICAgICAgYXNzZXJ0T3JkZXJlZEVxdWFscyhnZXRQc2lEb2N1bWVudE1hbmFnZXIoKS5nZXRVbmNvbW1pdHRlZERvY3VtZW50cygpLCBkb2N1bWVudCk7CisgICAgICAgICAgYXNzZXJ0T3JkZXJlZEVxdWFscyhhbGllbkRvY01hbmFnZXIuZ2V0VW5jb21taXR0ZWREb2N1bWVudHMoKSwgYWxpZW5Eb2N1bWVudCk7CisgICAgICAgIH0KKyAgICAgIH0pOworICAgICAgYXNzZXJ0RXF1YWxzKCJ4eHgiLCBkb2N1bWVudC5nZXRUZXh0KCkpOworICAgICAgYXNzZXJ0RXF1YWxzKCJ4eHgiLCBhbGllbkRvY3VtZW50LmdldFRleHQoKSk7CisKKyAgICAgIHdoaWxlICghZ2V0UHNpRG9jdW1lbnRNYW5hZ2VyKCkuaXNDb21taXR0ZWQoZG9jdW1lbnQpKSB7CisgICAgICAgIFVJVXRpbC5kaXNwYXRjaEFsbEludm9jYXRpb25FdmVudHMoKTsKKyAgICAgIH0KKyAgICAgIGxvbmcgc3RhcnQgPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKKyAgICAgIHdoaWxlICghYWxpZW5Eb2NNYW5hZ2VyLmlzQ29tbWl0dGVkKGFsaWVuRG9jdW1lbnQpICYmIFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpLXN0YXJ0IDwgMjAwMDApIHsKKyAgICAgICAgVUlVdGlsLmRpc3BhdGNoQWxsSW52b2NhdGlvbkV2ZW50cygpOworICAgICAgfQorICAgICAgYXNzZXJ0VHJ1ZSgiU3RpbGwgbm90IGNvbW1pdHRlZDogIithbGllbkRvY3VtZW50LCBhbGllbkRvY01hbmFnZXIuaXNDb21taXR0ZWQoYWxpZW5Eb2N1bWVudCkpOworICAgIH0KKyAgICBmaW5hbGx5IHsKKyAgICAgIFByb2plY3RVdGlsLmNsb3NlQW5kRGlzcG9zZShhbGllblByb2plY3QpOworICAgIH0KKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL3BzaS9Qc2lNb2RpZmljYXRpb25UcmFja2VyVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL3BzaS9Qc2lNb2RpZmljYXRpb25UcmFja2VyVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdjYmE0YTgKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovcHNpL1BzaU1vZGlmaWNhdGlvblRyYWNrZXJUZXN0LmphdmEKQEAgLTAsMCArMSwxNDYgQEAKK3BhY2thZ2UgY29tLmludGVsbGlqLnBzaTsKKworaW1wb3J0IGNvbS5pbnRlbGxpai5pZGUuaGlnaGxpZ2h0ZXIuSmF2YUZpbGVUeXBlOworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLmNvbW1hbmQuV3JpdGVDb21tYW5kQWN0aW9uOworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLmVkaXRvci5TZWxlY3Rpb25Nb2RlbDsKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS5maWxlRWRpdG9yLkZpbGVFZGl0b3JNYW5hZ2VyOworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLnZmcy5WaXJ0dWFsRmlsZTsKK2ltcG9ydCBjb20uaW50ZWxsaWoucHNpLnV0aWwuUHNpTW9kaWZpY2F0aW9uVHJhY2tlcjsKK2ltcG9ydCBjb20uaW50ZWxsaWoudGVzdEZyYW1ld29yay5JZGVhVGVzdENhc2U7CitpbXBvcnQgY29tLmludGVsbGlqLnRlc3RGcmFtZXdvcmsuZml4dHVyZXMuTGlnaHRQbGF0Zm9ybUNvZGVJbnNpZ2h0Rml4dHVyZVRlc3RDYXNlOworaW1wb3J0IGNvbS5pbnRlbGxpai51dGlsLlByb2Nlc3NvcjsKK2ltcG9ydCBvcmcuamV0YnJhaW5zLmFubm90YXRpb25zLk5vbk5sczsKKworaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CisKKy8qKgorICogQGF1dGhvciBEbWl0cnkgQXZkZWV2CisgKi8KK3B1YmxpYyBjbGFzcyBQc2lNb2RpZmljYXRpb25UcmFja2VyVGVzdCBleHRlbmRzIExpZ2h0UGxhdGZvcm1Db2RlSW5zaWdodEZpeHR1cmVUZXN0Q2FzZSB7CisgIEBPdmVycmlkZQorICBwdWJsaWMgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24geworICAgIElkZWFUZXN0Q2FzZS5pbml0UGxhdGZvcm1QcmVmaXgoKTsKKyAgICBzdXBlci5zZXRVcCgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEFubm90YXRpb25Ob3RDaGFuZ2VkKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9SZXBsYWNlVGVzdCgiQFN1cHByZXNzV2FybmluZ3MoXCJ6elwiKVxuIiArCisgICAgICAgICAgICAgICAgICAicHVibGljIGNsYXNzIEZvbyB7IDxzZWxlY3Rpb24+PC9zZWxlY3Rpb24+fSIsCisgICAgICAgICAgICAgICAgICAiaGkiKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RBbm5vdGF0aW9uTmFtZUNoYW5nZWQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1JlcGxhY2VUZXN0KCJAU3VwcHI8c2VsZWN0aW9uPmVzczwvc2VsZWN0aW9uPldhcm5pbmdzKFwienpcIilcbiIgKworICAgICAgICAgICAgICAgICAgInB1YmxpYyBjbGFzcyBGb28geyB9IiwKKyAgICAgICAgICAgICAgICAgICJoaSIpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEFubm90YXRpb25QYXJhbWV0ZXJDaGFuZ2VkKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9SZXBsYWNlVGVzdCgiQFN1cHByZXNzV2FybmluZ3MoXCI8c2VsZWN0aW9uPnp6PC9zZWxlY3Rpb24+XCIpXG4iICsKKyAgICAgICAgICAgICAgICAgICJwdWJsaWMgY2xhc3MgRm9vIHsgfSIsCisgICAgICAgICAgICAgICAgICAiaGkiKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RBbm5vdGF0aW9uUmVtb3ZlZCgpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvUmVwbGFjZVRlc3QoIjxzZWxlY3Rpb24+QFN1cHByZXNzV2FybmluZ3MoXCJ6elwiKTwvc2VsZWN0aW9uPlxuIiArCisgICAgICAgICAgICAgICAgICAicHVibGljIGNsYXNzIEZvbyB7IH0iLAorICAgICAgICAgICAgICAgICAgIiIpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEFubm90YXRpb25XaXRoQ2xhc3NSZW1vdmVkKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9SZXBsYWNlVGVzdCgiPHNlbGVjdGlvbj5AU3VwcHJlc3NXYXJuaW5ncyhcInp6XCIpXG4iICsKKyAgICAgICAgICAgICAgICAgICJwdWJsaWMgPC9zZWxlY3Rpb24+IGNsYXNzIEZvbyB7IH0iLAorICAgICAgICAgICAgICAgICAgIiIpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFJlbW92ZUFubm90YXRlZE1ldGhvZCgpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvUmVwbGFjZVRlc3QoInB1YmxpYyBjbGFzcyBGb28ge1xuIiArCisgICAgICAgICAgICAgICAgICAiICA8c2VsZWN0aW9uPiAgIiArCisgICAgICAgICAgICAgICAgICAiICAgQFN1cHByZXNzV2FybmluZ3MoXCJcIilcbiIgKworICAgICAgICAgICAgICAgICAgIiAgICBwdWJsaWMgdm9pZCBtZXRob2QoKSB7fVxuIiArCisgICAgICAgICAgICAgICAgICAiPC9zZWxlY3Rpb24+IiArCisgICAgICAgICAgICAgICAgICAifSIsCisgICAgICAgICAgICAgICAgICAiIik7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0UmVuYW1lQW5ub3RhdGVkTWV0aG9kKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9SZXBsYWNlVGVzdCgicHVibGljIGNsYXNzIEZvbyB7XG4iICsKKyAgICAgICAgICAgICAgICAgICIgICBAU3VwcHJlc3NXYXJuaW5ncyhcIlwiKVxuIiArCisgICAgICAgICAgICAgICAgICAiICAgIHB1YmxpYyB2b2lkIG1lPHNlbGVjdGlvbj50aDwvc2VsZWN0aW9uPm9kKCkge31cbiIgKworICAgICAgICAgICAgICAgICAgIn0iLAorICAgICAgICAgICAgICAgICAgInp6eiIpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFJlbmFtZUFubm90YXRlZENsYXNzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9SZXBsYWNlVGVzdCgiICAgQFN1cHByZXNzV2FybmluZ3MoXCJcIilcbiIgKworICAgICAgICAgICAgICAgICAgInB1YmxpYyBjbGFzcyBGPHNlbGVjdGlvbj5vPC9zZWxlY3Rpb24+byB7XG4iICsKKyAgICAgICAgICAgICAgICAgICIgICAgcHVibGljIHZvaWQgbWV0aG9kKCkge31cbiIgKworICAgICAgICAgICAgICAgICAgIn0iLAorICAgICAgICAgICAgICAgICAgInp6eiIpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFJlbW92ZUFsbCgpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvUmVwbGFjZVRlc3QoIjxzZWxlY3Rpb24+QFN1cHByZXNzV2FybmluZ3MoXCJ6elwiKVxuIiArCisgICAgICAgICAgICAgICAgICAicHVibGljICBjbGFzcyBGb28geyB9PC9zZWxlY3Rpb24+IiwKKyAgICAgICAgICAgICAgICAgICIiKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RSZW1vdmVGaWxlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KCI8c2VsZWN0aW9uPkBTdXBwcmVzc1dhcm5pbmdzKFwienpcIilcbiIgKworICAgICAgICAgICAicHVibGljICBjbGFzcyBGb28geyB9PC9zZWxlY3Rpb24+IiwKKyAgICAgICAgICAgbmV3IFByb2Nlc3NvcjxQc2lGaWxlPigpIHsKKyAgICAgICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgICAgICBwdWJsaWMgYm9vbGVhbiBwcm9jZXNzKFBzaUZpbGUgcHNpRmlsZSkgeworICAgICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICAgZmluYWwgVmlydHVhbEZpbGUgdkZpbGUgPSBwc2lGaWxlLmdldFZpcnR1YWxGaWxlKCk7CisgICAgICAgICAgICAgICAgIGFzc2VydCB2RmlsZSAhPSBudWxsIDogcHNpRmlsZTsKKyAgICAgICAgICAgICAgICAgRmlsZUVkaXRvck1hbmFnZXIuZ2V0SW5zdGFuY2UoZ2V0UHJvamVjdCgpKS5jbG9zZUZpbGUodkZpbGUpOworICAgICAgICAgICAgICAgICB2RmlsZS5kZWxldGUodGhpcyk7CisgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICBjYXRjaCAoSU9FeGNlcHRpb24gZSkgeworICAgICAgICAgICAgICAgICBmYWlsKGUuZ2V0TWVzc2FnZSgpKTsKKyAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICB9CisgICAgICAgICAgIH0pOworICB9CisKKyAgcHJpdmF0ZSB2b2lkIGRvUmVwbGFjZVRlc3QoQE5vbk5scyBTdHJpbmcgdGV4dCwgQE5vbk5scyBmaW5hbCBTdHJpbmcgd2l0aCkgeworICAgIGRvVGVzdCh0ZXh0LCBuZXcgUHJvY2Vzc29yPFBzaUZpbGU+KCkgeworICAgICAgQE92ZXJyaWRlCisgICAgICBwdWJsaWMgYm9vbGVhbiBwcm9jZXNzKFBzaUZpbGUgcHNpRmlsZSkgeworICAgICAgICByZXBsYWNlU2VsZWN0aW9uKHdpdGgpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICB9CisgICAgfSk7CisgIH0KKworICBwcml2YXRlIHZvaWQgZG9UZXN0KEBOb25ObHMgU3RyaW5nIHRleHQsIFByb2Nlc3NvcjxQc2lGaWxlPiBydW4pIHsKKyAgICBQc2lGaWxlIGZpbGUgPSBteUZpeHR1cmUuY29uZmlndXJlQnlUZXh0KEphdmFGaWxlVHlwZS5JTlNUQU5DRSwgdGV4dCk7CisgICAgUHNpTW9kaWZpY2F0aW9uVHJhY2tlciBtb2RpZmljYXRpb25UcmFja2VyID0gUHNpTWFuYWdlci5nZXRJbnN0YW5jZShnZXRQcm9qZWN0KCkpLmdldE1vZGlmaWNhdGlvblRyYWNrZXIoKTsKKyAgICBsb25nIGNvdW50ID0gbW9kaWZpY2F0aW9uVHJhY2tlci5nZXRNb2RpZmljYXRpb25Db3VudCgpOworICAgIHJ1bi5wcm9jZXNzKGZpbGUpOworICAgIGFzc2VydEZhbHNlKG1vZGlmaWNhdGlvblRyYWNrZXIuZ2V0TW9kaWZpY2F0aW9uQ291bnQoKSA9PSBjb3VudCk7CisgIH0KKworICBwcml2YXRlIHZvaWQgcmVwbGFjZVNlbGVjdGlvbihmaW5hbCBTdHJpbmcgd2l0aCkgeworICAgIG5ldyBXcml0ZUNvbW1hbmRBY3Rpb24uU2ltcGxlKGdldFByb2plY3QoKSkgeworICAgICAgQE92ZXJyaWRlCisgICAgICBwcm90ZWN0ZWQgdm9pZCBydW4oKSB0aHJvd3MgVGhyb3dhYmxlIHsKKyAgICAgICAgU2VsZWN0aW9uTW9kZWwgc2VsID0gbXlGaXh0dXJlLmdldEVkaXRvcigpLmdldFNlbGVjdGlvbk1vZGVsKCk7CisgICAgICAgIG15Rml4dHVyZS5nZXRFZGl0b3IoKS5nZXREb2N1bWVudCgpLnJlcGxhY2VTdHJpbmcoc2VsLmdldFNlbGVjdGlvblN0YXJ0KCksIHNlbC5nZXRTZWxlY3Rpb25FbmQoKSwgd2l0aCk7CisgICAgICAgIFBzaURvY3VtZW50TWFuYWdlci5nZXRJbnN0YW5jZShnZXRQcm9qZWN0KCkpLmNvbW1pdEFsbERvY3VtZW50cygpOworICAgICAgfQorICAgIH0uZXhlY3V0ZSgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEphdmFTdHJ1Y3R1cmVNb2RpZmljYXRpb25DaGFuZ2VzQWZ0ZXJQYWNrYWdlRGVsZXRlKCkgeworICAgIFBzaUZpbGUgZmlsZSA9IG15Rml4dHVyZS5hZGRGaWxlVG9Qcm9qZWN0KCIveC95L1ouamF2YSIsICJ0ZXh0Iik7CisgICAgUHNpTW9kaWZpY2F0aW9uVHJhY2tlciBtb2RpZmljYXRpb25UcmFja2VyID0gUHNpTWFuYWdlci5nZXRJbnN0YW5jZShnZXRQcm9qZWN0KCkpLmdldE1vZGlmaWNhdGlvblRyYWNrZXIoKTsKKyAgICBsb25nIGNvdW50ID0gbW9kaWZpY2F0aW9uVHJhY2tlci5nZXRKYXZhU3RydWN0dXJlTW9kaWZpY2F0aW9uQ291bnQoKTsKKworICAgIGZpbGUuZ2V0Q29udGFpbmluZ0RpcmVjdG9yeSgpLmRlbGV0ZSgpOworCisgICAgYXNzZXJ0RXF1YWxzKGNvdW50ICsgMSwgbW9kaWZpY2F0aW9uVHJhY2tlci5nZXRKYXZhU3RydWN0dXJlTW9kaWZpY2F0aW9uQ291bnQoKSk7CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9wc2kvU0NSMTcwOTRUZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovcHNpL1NDUjE3MDk0VGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQyY2MxNDYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovcHNpL1NDUjE3MDk0VGVzdC5qYXZhCkBAIC0wLDAgKzEsNTAgQEAKK3BhY2thZ2UgY29tLmludGVsbGlqLnBzaTsKKworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLmFwcGxpY2F0aW9uLkFwcGxpY2F0aW9uTWFuYWdlcjsKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS5hcHBsaWNhdGlvbi5leC5QYXRoTWFuYWdlckV4OworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLnJvb3RzLk1vZHVsZVJvb3RNb2RpZmljYXRpb25VdGlsOworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLnV0aWwuQ29tcHV0YWJsZTsKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS52ZnMuTG9jYWxGaWxlU3lzdGVtOworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLnZmcy5WaXJ0dWFsRmlsZTsKK2ltcG9ydCBjb20uaW50ZWxsaWoucHNpLnNlYXJjaC5HbG9iYWxTZWFyY2hTY29wZTsKK2ltcG9ydCBjb20uaW50ZWxsaWoudGVzdEZyYW1ld29yay5Qc2lUZXN0Q2FzZTsKKworaW1wb3J0IGphdmEuaW8uRmlsZTsKKworLyoqCisgKiAgQGF1dGhvciBkc2wKKyAqLworcHVibGljIGNsYXNzIFNDUjE3MDk0VGVzdCBleHRlbmRzIFBzaVRlc3RDYXNlIHsKKyAgcHJvdGVjdGVkIHZvaWQgc2V0VXBDbGFzc2VzKGZpbmFsIFN0cmluZyBzKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBmaW5hbCBTdHJpbmcgdGVzdFJvb3QgPSBQYXRoTWFuYWdlckV4LmdldFRlc3REYXRhUGF0aCgpICsgIi9wc2kvcmVwb3NpdG9yeVVzZS9zY3IxNzA5NCI7CisgICAgVmlydHVhbEZpbGUgY2xhc3Nlc1Jvb3QgID0gQXBwbGljYXRpb25NYW5hZ2VyLmdldEFwcGxpY2F0aW9uKCkucnVuV3JpdGVBY3Rpb24obmV3IENvbXB1dGFibGU8VmlydHVhbEZpbGU+KCkgeworICAgICAgQE92ZXJyaWRlCisgICAgICBwdWJsaWMgVmlydHVhbEZpbGUgY29tcHV0ZSgpIHsKKyAgICAgICAgU3RyaW5nIHBhdGggPSB0ZXN0Um9vdCArICIvIiArIHM7CisgICAgICAgIHBhdGggPSBwYXRoLnJlcGxhY2UoRmlsZS5zZXBhcmF0b3JDaGFyLCAnLycpOworICAgICAgICByZXR1cm4gTG9jYWxGaWxlU3lzdGVtLmdldEluc3RhbmNlKCkucmVmcmVzaEFuZEZpbmRGaWxlQnlQYXRoKHBhdGgpOworICAgICAgfQorICAgIH0pOworICAgIGFzc2VydE5vdE51bGwoY2xhc3Nlc1Jvb3QpOworICAgIE1vZHVsZVJvb3RNb2RpZmljYXRpb25VdGlsLmFkZE1vZHVsZUxpYnJhcnkobXlNb2R1bGUsIGNsYXNzZXNSb290LmdldFVybCgpKTsKKyAgfQorCisgIEBPdmVycmlkZQorICBwcm90ZWN0ZWQgdm9pZCBzZXRVcEpkaygpIHsKKworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFNSQygpIHRocm93cyBFeGNlcHRpb24geworICAgIHNldFVwQ2xhc3NlcygiY2xhc3NlcyIpOworICAgIGZpbmFsIEphdmFQc2lGYWNhZGUgcHNpTWFuYWdlciA9IGdldEphdmFGYWNhZGUoKTsKKyAgICBmaW5hbCBQc2lDbGFzcyBjbGFzc0EgPSBwc2lNYW5hZ2VyLmZpbmRDbGFzcygiYS5hLmEuYS5lLmYuaSIsIEdsb2JhbFNlYXJjaFNjb3BlLm1vZHVsZVdpdGhMaWJyYXJpZXNTY29wZShteU1vZHVsZSkpOworICAgIGFzc2VydE5vdE51bGwoY2xhc3NBKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3QzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgc2V0VXBDbGFzc2VzKCJjbGFzc2VzMiIpOworICAgIGZpbmFsIEphdmFQc2lGYWNhZGUgcHNpTWFuYWdlciA9IGdldEphdmFGYWNhZGUoKTsKKyAgICBmaW5hbCBQc2lDbGFzcyBjbGFzc0EgPSBwc2lNYW5hZ2VyLmZpbmRDbGFzcygiY29tLmludGVsbGlqLmludGVybmFsLmYuYS5iLmEuaSIsIEdsb2JhbFNlYXJjaFNjb3BlLm1vZHVsZVdpdGhMaWJyYXJpZXNTY29wZShteU1vZHVsZSkpOworICAgIGFzc2VydE5vdE51bGwoY2xhc3NBKTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL3BzaS9TaWduYXR1cmVQYXJzaW5nVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL3BzaS9TaWduYXR1cmVQYXJzaW5nVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNhYTc1YTAKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovcHNpL1NpZ25hdHVyZVBhcnNpbmdUZXN0LmphdmEKQEAgLTAsMCArMSwxNyBAQAorLyoKKyAqIEBhdXRob3IgbWF4CisgKi8KK3BhY2thZ2UgY29tLmludGVsbGlqLnBzaTsKKworaW1wb3J0IGNvbS5pbnRlbGxpai5wc2kuaW1wbC5jb21waWxlZC5TaWduYXR1cmVQYXJzaW5nOworaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKKworaW1wb3J0IGphdmEudGV4dC5TdHJpbmdDaGFyYWN0ZXJJdGVyYXRvcjsKKworcHVibGljIGNsYXNzIFNpZ25hdHVyZVBhcnNpbmdUZXN0IGV4dGVuZHMgVGVzdENhc2UgeworICBwdWJsaWMgdm9pZCB0ZXN0VmFyaWFuY2VBbWJpZ3VpdHkoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBhc3NlcnRFcXVhbHMoIlBzaTw/LFA+IiwgU2lnbmF0dXJlUGFyc2luZy5wYXJzZVR5cGVTdHJpbmcobmV3IFN0cmluZ0NoYXJhY3Rlckl0ZXJhdG9yKCJMUHNpPCpUUD47IikpKTsKKyAgICBhc3NlcnRFcXVhbHMoIlBzaTw/IGV4dGVuZHMgUD4iLCBTaWduYXR1cmVQYXJzaW5nLnBhcnNlVHlwZVN0cmluZyhuZXcgU3RyaW5nQ2hhcmFjdGVySXRlcmF0b3IoIkxQc2k8K1RQPjsiKSkpOworICAgIGFzc2VydEVxdWFscygiUHNpPD8gc3VwZXIgUD4iLCBTaWduYXR1cmVQYXJzaW5nLnBhcnNlVHlwZVN0cmluZyhuZXcgU3RyaW5nQ2hhcmFjdGVySXRlcmF0b3IoIkxQc2k8LVRQPjsiKSkpOworICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovcHNpL1NtYXJ0UHNpRWxlbWVudFBvaW50ZXJzVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL3BzaS9TbWFydFBzaUVsZW1lbnRQb2ludGVyc1Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iM2RiYTlkCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL3BzaS9TbWFydFBzaUVsZW1lbnRQb2ludGVyc1Rlc3QuamF2YQpAQCAtMCwwICsxLDM3NyBAQAorLyoKKyAqIENvcHlyaWdodCAyMDAwLTIwMTIgSmV0QnJhaW5zIHMuci5vLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KK3BhY2thZ2UgY29tLmludGVsbGlqLnBzaTsKKworaW1wb3J0IGNvbS5pbnRlbGxpai5KYXZhVGVzdFV0aWw7CitpbXBvcnQgY29tLmludGVsbGlqLmNvZGVJbnNpZ2h0LkNvZGVJbnNpZ2h0VGVzdENhc2U7CitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkuZWRpdG9yLkRvY3VtZW50OworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLmVkaXRvci5FZGl0b3JGYWN0b3J5OworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLmVkaXRvci5ldmVudC5Eb2N1bWVudEV2ZW50OworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLmVkaXRvci5ldmVudC5Eb2N1bWVudExpc3RlbmVyOworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLmVkaXRvci5ldmVudC5FZGl0b3JFdmVudE11bHRpY2FzdGVyOworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLmZpbGVFZGl0b3IuRmlsZURvY3VtZW50TWFuYWdlcjsKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS5maWxlVHlwZXMuU3RkRmlsZVR5cGVzOworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLnByb2plY3RSb290cy5pbXBsLkphdmFTZGtJbXBsOworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLnZmcy5WZnNVdGlsOworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLnZmcy5WaXJ0dWFsRmlsZTsKK2ltcG9ydCBjb20uaW50ZWxsaWoucHNpLmltcGwuc291cmNlLlBzaUZpbGVJbXBsOworaW1wb3J0IGNvbS5pbnRlbGxpai5wc2kuaW1wbC5zb3VyY2UudHJlZS5GaWxlRWxlbWVudDsKK2ltcG9ydCBjb20uaW50ZWxsaWoucHNpLnNlYXJjaC5HbG9iYWxTZWFyY2hTY29wZTsKK2ltcG9ydCBjb20uaW50ZWxsaWoucHNpLnN0dWJzLlN0dWJUcmVlOworaW1wb3J0IGNvbS5pbnRlbGxpai5wc2kudXRpbC5Qc2lUcmVlVXRpbDsKK2ltcG9ydCBjb20uaW50ZWxsaWoucHNpLnV0aWwuUHNpVXRpbDsKK2ltcG9ydCBjb20uaW50ZWxsaWoucHNpLnV0aWwuUHNpVXRpbEJhc2U7CitpbXBvcnQgY29tLmludGVsbGlqLnRlc3RGcmFtZXdvcmsuSWRlYVRlc3RVdGlsOworaW1wb3J0IGNvbS5pbnRlbGxpai50ZXN0RnJhbWV3b3JrLlBsYXRmb3JtVGVzdENhc2U7CitpbXBvcnQgY29tLmludGVsbGlqLnRlc3RGcmFtZXdvcmsuUHNpVGVzdFV0aWw7CitpbXBvcnQgY29tLmludGVsbGlqLnV0aWwuRmlsZUNvbnRlbnRVdGlsOworaW1wb3J0IGdudS50cm92ZS5USGFzaFNldDsKKworaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb25zOworaW1wb3J0IGphdmEudXRpbC5TZXQ7CisKK0BQbGF0Zm9ybVRlc3RDYXNlLldyYXBJbkNvbW1hbmQKK3B1YmxpYyBjbGFzcyBTbWFydFBzaUVsZW1lbnRQb2ludGVyc1Rlc3QgZXh0ZW5kcyBDb2RlSW5zaWdodFRlc3RDYXNlIHsKKyAgcHJpdmF0ZSBWaXJ0dWFsRmlsZSBteVJvb3Q7CisKKyAgQE92ZXJyaWRlCisgIHByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgc3VwZXIuc2V0VXAoKTsKKworICAgIFN0cmluZyByb290ID0gSmF2YVRlc3RVdGlsLmdldEphdmFUZXN0RGF0YVBhdGgoKSArICIvY29kZUVkaXRvci9zbWFydFBzaUVsZW1lbnRQb2ludGVycyI7CisgICAgUHNpVGVzdFV0aWwucmVtb3ZlQWxsUm9vdHMobXlNb2R1bGUsIElkZWFUZXN0VXRpbC5nZXRNb2NrSmRrMTcoKSk7CisgICAgbXlSb290ID0gUHNpVGVzdFV0aWwuY3JlYXRlVGVzdFByb2plY3RTdHJ1Y3R1cmUobXlQcm9qZWN0LCBteU1vZHVsZSwgcm9vdCwgbXlGaWxlc1RvRGVsZXRlKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RDaGFuZ2VJbkRvY3VtZW50KCkgeworICAgIFBzaUNsYXNzIGFDbGFzcyA9IG15SmF2YUZhY2FkZS5maW5kQ2xhc3MoIkFDbGFzcyIsIEdsb2JhbFNlYXJjaFNjb3BlLmFsbFNjb3BlKGdldFByb2plY3QoKSkpOworICAgIGFzc2VydE5vdE51bGwoYUNsYXNzKTsKKworICAgIFNtYXJ0UHNpRWxlbWVudFBvaW50ZXIgcG9pbnRlciA9IFNtYXJ0UG9pbnRlck1hbmFnZXIuZ2V0SW5zdGFuY2UobXlQcm9qZWN0KS5jcmVhdGVTbWFydFBzaUVsZW1lbnRQb2ludGVyKGFDbGFzcyk7CisgICAgRG9jdW1lbnQgZG9jdW1lbnQgPSBQc2lEb2N1bWVudE1hbmFnZXIuZ2V0SW5zdGFuY2UobXlQcm9qZWN0KS5nZXREb2N1bWVudChhQ2xhc3MuZ2V0Q29udGFpbmluZ0ZpbGUoKSk7CisKKyAgICBpbnQgb2Zmc2V0ID0gYUNsYXNzLmdldFRleHRPZmZzZXQoKTsKKyAgICBkb2N1bWVudC5pbnNlcnRTdHJpbmcob2Zmc2V0LCAiLyoqLyIpOworICAgIFBzaURvY3VtZW50TWFuYWdlci5nZXRJbnN0YW5jZShteVByb2plY3QpLmNvbW1pdEFsbERvY3VtZW50cygpOworCisgICAgUHNpRWxlbWVudCBlbGVtZW50ID0gcG9pbnRlci5nZXRFbGVtZW50KCk7CisgICAgYXNzZXJ0Tm90TnVsbChlbGVtZW50KTsKKyAgICBhc3NlcnRUcnVlKGVsZW1lbnQgaW5zdGFuY2VvZiBQc2lDbGFzcyk7CisgICAgYXNzZXJ0VHJ1ZShlbGVtZW50LmlzVmFsaWQoKSk7CisgIH0KKworICAvLyBUaGlzIHRlc3QgaXMgdW5mYWlyLiBJZiBwb2ludGVyIHdvdWxkIGJlIGFza2VkIGZvciBnZXRFbGVtZW50KCkgYmV0d2VlbiBjb21taXRzIGl0J2xsIG5ldmVyIHJlc3RvcmUgYWdhaW4gYW55d2F5LgorICAvLworICBwdWJsaWMgdm9pZCB0ZXN0Q2hhbmdlSW5Eb2N1bWVudFR3aWNlKCkgeworICAgIFBzaUNsYXNzIGFDbGFzcyA9IG15SmF2YUZhY2FkZS5maW5kQ2xhc3MoIkFDbGFzcyIsR2xvYmFsU2VhcmNoU2NvcGUuYWxsU2NvcGUoZ2V0UHJvamVjdCgpKSk7CisgICAgYXNzZXJ0Tm90TnVsbChhQ2xhc3MpOworCisgICAgU21hcnRQc2lFbGVtZW50UG9pbnRlciBwb2ludGVyID0gU21hcnRQb2ludGVyTWFuYWdlci5nZXRJbnN0YW5jZShteVByb2plY3QpLmNyZWF0ZVNtYXJ0UHNpRWxlbWVudFBvaW50ZXIoYUNsYXNzKTsKKyAgICBEb2N1bWVudCBkb2N1bWVudCA9IFBzaURvY3VtZW50TWFuYWdlci5nZXRJbnN0YW5jZShteVByb2plY3QpLmdldERvY3VtZW50KGFDbGFzcy5nZXRDb250YWluaW5nRmlsZSgpKTsKKworICAgIGludCBvZmZzZXQgPSBhQ2xhc3MuZ2V0VGV4dE9mZnNldCgpOworICAgIGRvY3VtZW50Lmluc2VydFN0cmluZyhvZmZzZXQsICIvKiIpOworICAgIFBzaURvY3VtZW50TWFuYWdlci5nZXRJbnN0YW5jZShteVByb2plY3QpLmNvbW1pdEFsbERvY3VtZW50cygpOworICAgIGRvY3VtZW50Lmluc2VydFN0cmluZyhvZmZzZXQgKyAyLCAiKi8iKTsKKyAgICBQc2lEb2N1bWVudE1hbmFnZXIuZ2V0SW5zdGFuY2UobXlQcm9qZWN0KS5jb21taXRBbGxEb2N1bWVudHMoKTsKKworICAgIFBzaUVsZW1lbnQgZWxlbWVudCA9IHBvaW50ZXIuZ2V0RWxlbWVudCgpOworICAgIGFzc2VydE5vdE51bGwoZWxlbWVudCk7CisgICAgYXNzZXJ0VHJ1ZShlbGVtZW50IGluc3RhbmNlb2YgUHNpQ2xhc3MpOworICAgIGFzc2VydFRydWUoZWxlbWVudC5pc1ZhbGlkKCkpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEdldEVsZW1lbnRXaGVuRG9jdW1lbnRNb2RpZmllZCgpIHsKKyAgICBQc2lDbGFzcyBhQ2xhc3MgPSBteUphdmFGYWNhZGUuZmluZENsYXNzKCJBQ2xhc3MiLEdsb2JhbFNlYXJjaFNjb3BlLmFsbFNjb3BlKGdldFByb2plY3QoKSkpOworICAgIGFzc2VydE5vdE51bGwoYUNsYXNzKTsKKworICAgIFNtYXJ0UHNpRWxlbWVudFBvaW50ZXIgcG9pbnRlciA9IFNtYXJ0UG9pbnRlck1hbmFnZXIuZ2V0SW5zdGFuY2UobXlQcm9qZWN0KS5jcmVhdGVTbWFydFBzaUVsZW1lbnRQb2ludGVyKGFDbGFzcyk7CisgICAgRG9jdW1lbnQgZG9jdW1lbnQgPSBQc2lEb2N1bWVudE1hbmFnZXIuZ2V0SW5zdGFuY2UobXlQcm9qZWN0KS5nZXREb2N1bWVudChhQ2xhc3MuZ2V0Q29udGFpbmluZ0ZpbGUoKSk7CisKKyAgICBpbnQgb2Zmc2V0ID0gYUNsYXNzLmdldFRleHRPZmZzZXQoKTsKKyAgICBkb2N1bWVudC5pbnNlcnRTdHJpbmcob2Zmc2V0LCAiLyoqLyIpOworICAgIFBzaURvY3VtZW50TWFuYWdlci5nZXRJbnN0YW5jZShteVByb2plY3QpLmNvbW1pdEFsbERvY3VtZW50cygpOworCisgICAgZG9jdW1lbnQuaW5zZXJ0U3RyaW5nKG9mZnNldCwgInh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eCIpOworCisgICAgUHNpRWxlbWVudCBlbGVtZW50ID0gcG9pbnRlci5nZXRFbGVtZW50KCk7CisgICAgYXNzZXJ0Tm90TnVsbChlbGVtZW50KTsKKyAgICBhc3NlcnRUcnVlKGVsZW1lbnQgaW5zdGFuY2VvZiBQc2lDbGFzcyk7CisgICAgYXNzZXJ0VHJ1ZShlbGVtZW50LmlzVmFsaWQoKSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0S2VlcEJlbHRXaGVuRG9jdW1lbnRNb2RpZmllZCgpIHsKKyAgICBQc2lDbGFzcyBhQ2xhc3MgPSBteUphdmFGYWNhZGUuZmluZENsYXNzKCJBQ2xhc3MiLEdsb2JhbFNlYXJjaFNjb3BlLmFsbFNjb3BlKGdldFByb2plY3QoKSkpOworICAgIGFzc2VydE5vdE51bGwoYUNsYXNzKTsKKworICAgIFNtYXJ0UHNpRWxlbWVudFBvaW50ZXIgcG9pbnRlciA9IFNtYXJ0UG9pbnRlck1hbmFnZXIuZ2V0SW5zdGFuY2UobXlQcm9qZWN0KS5jcmVhdGVTbWFydFBzaUVsZW1lbnRQb2ludGVyKGFDbGFzcyk7CisgICAgRG9jdW1lbnQgZG9jdW1lbnQgPSBQc2lEb2N1bWVudE1hbmFnZXIuZ2V0SW5zdGFuY2UobXlQcm9qZWN0KS5nZXREb2N1bWVudChhQ2xhc3MuZ2V0Q29udGFpbmluZ0ZpbGUoKSk7CisKKyAgICBpbnQgb2Zmc2V0ID0gYUNsYXNzLmdldFRleHRPZmZzZXQoKTsKKyAgICBkb2N1bWVudC5pbnNlcnRTdHJpbmcob2Zmc2V0LCAiLyoqKioqKi8iKTsKKworICAgIHBvaW50ZXIuZ2V0RWxlbWVudCgpOworCisgICAgZG9jdW1lbnQuaW5zZXJ0U3RyaW5nKG9mZnNldCwgIi8qKi8iKTsKKyAgICBQc2lEb2N1bWVudE1hbmFnZXIuZ2V0SW5zdGFuY2UobXlQcm9qZWN0KS5jb21taXRBbGxEb2N1bWVudHMoKTsKKworICAgIFBzaUVsZW1lbnQgZWxlbWVudCA9IHBvaW50ZXIuZ2V0RWxlbWVudCgpOworICAgIGFzc2VydE5vdE51bGwoZWxlbWVudCk7CisgICAgYXNzZXJ0VHJ1ZShlbGVtZW50IGluc3RhbmNlb2YgUHNpQ2xhc3MpOworICAgIGFzc2VydFRydWUoZWxlbWVudC5pc1ZhbGlkKCkpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdENoYW5nZUluUHNpKCkgeworICAgIFBzaUNsYXNzIGFDbGFzcyA9IG15SmF2YUZhY2FkZS5maW5kQ2xhc3MoIkFDbGFzcyIsR2xvYmFsU2VhcmNoU2NvcGUuYWxsU2NvcGUoZ2V0UHJvamVjdCgpKSk7CisgICAgYXNzZXJ0Tm90TnVsbChhQ2xhc3MpOworCisgICAgU21hcnRQc2lFbGVtZW50UG9pbnRlciBwb2ludGVyID0gU21hcnRQb2ludGVyTWFuYWdlci5nZXRJbnN0YW5jZShteVByb2plY3QpLmNyZWF0ZVNtYXJ0UHNpRWxlbWVudFBvaW50ZXIoYUNsYXNzKTsKKyAgICBEb2N1bWVudCBkb2N1bWVudCA9IFBzaURvY3VtZW50TWFuYWdlci5nZXRJbnN0YW5jZShteVByb2plY3QpLmdldERvY3VtZW50KGFDbGFzcy5nZXRDb250YWluaW5nRmlsZSgpKTsKKworICAgIGludCBvZmZzZXQgPSBhQ2xhc3MuZ2V0VGV4dE9mZnNldCgpOworICAgIGRvY3VtZW50Lmluc2VydFN0cmluZyhvZmZzZXQsICIvKiovIik7CisgICAgUHNpRG9jdW1lbnRNYW5hZ2VyLmdldEluc3RhbmNlKG15UHJvamVjdCkuY29tbWl0QWxsRG9jdW1lbnRzKCk7CisKKyAgICBQc2lFbGVtZW50IGVsZW1lbnQgPSBwb2ludGVyLmdldEVsZW1lbnQoKTsKKyAgICBhc3NlcnROb3ROdWxsKGVsZW1lbnQpOworICAgIGFzc2VydFRydWUoZWxlbWVudCBpbnN0YW5jZW9mIFBzaUNsYXNzKTsKKyAgICBhc3NlcnRUcnVlKGVsZW1lbnQuaXNWYWxpZCgpKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RQc2lDaGFuZ2VzV2l0aExhenlQb2ludGVycygpIHRocm93cyBFeGNlcHRpb24geworICAgIFBzaUNsYXNzIGFDbGFzcyA9IG15SmF2YUZhY2FkZS5maW5kQ2xhc3MoIkFDbGFzcyIsR2xvYmFsU2VhcmNoU2NvcGUuYWxsU2NvcGUoZ2V0UHJvamVjdCgpKSk7CisgICAgYXNzZXJ0Tm90TnVsbChhQ2xhc3MpOworCisgICAgZmluYWwgU21hcnRQc2lFbGVtZW50UG9pbnRlcjxQc2lJZGVudGlmaWVyPiBwb2ludGVyID0gU21hcnRQb2ludGVyTWFuYWdlci5nZXRJbnN0YW5jZShteVByb2plY3QpLmNyZWF0ZUxhenlQb2ludGVyKGFDbGFzcy5nZXROYW1lSWRlbnRpZmllcigpKTsKKyAgICBmaW5hbCBQc2lDb21tZW50IGphdmFkb2MgPQorICAgICAgSmF2YVBzaUZhY2FkZS5nZXRJbnN0YW5jZShhQ2xhc3MuZ2V0UHJvamVjdCgpKS5nZXRFbGVtZW50RmFjdG9yeSgpLmNyZWF0ZUNvbW1lbnRGcm9tVGV4dCgiLyoqIGphdmFkb2MgKi8iLCBhQ2xhc3MpOworICAgIGFDbGFzcy5nZXRQYXJlbnQoKS5hZGRCZWZvcmUoamF2YWRvYywgYUNsYXNzKTsKKworICAgIGZpbmFsIFBzaUlkZW50aWZpZXIgZWx0ID0gcG9pbnRlci5nZXRFbGVtZW50KCk7CisgICAgYXNzZXJ0Tm90TnVsbChlbHQpOworICAgIGFzc2VydFNhbWUoZWx0LCBhQ2xhc3MuZ2V0TmFtZUlkZW50aWZpZXIoKSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0VHlwZVBvaW50ZXIoKSB7CisgICAgUHNpQ2xhc3MgYUNsYXNzID0gbXlKYXZhRmFjYWRlLmZpbmRDbGFzcygiQUNsYXNzIixHbG9iYWxTZWFyY2hTY29wZS5hbGxTY29wZShnZXRQcm9qZWN0KCkpKTsKKyAgICBmaW5hbCBQc2lUeXBlRWxlbWVudCB0eXBlRWxlbWVudCA9IG15SmF2YUZhY2FkZS5maW5kQ2xhc3MoIlRlc3QiLEdsb2JhbFNlYXJjaFNjb3BlLmFsbFNjb3BlKGdldFByb2plY3QoKSkpLmdldEZpZWxkcygpWzBdLmdldFR5cGVFbGVtZW50KCk7CisKKyAgICBTbWFydFBzaUVsZW1lbnRQb2ludGVyIHR5cGVQb2ludGVyID0gU21hcnRQb2ludGVyTWFuYWdlci5nZXRJbnN0YW5jZShteVByb2plY3QpLmNyZWF0ZVNtYXJ0UHNpRWxlbWVudFBvaW50ZXIodHlwZUVsZW1lbnQpOworICAgIFNtYXJ0UHNpRWxlbWVudFBvaW50ZXIgY2xhc3NQb2ludGVyID0gU21hcnRQb2ludGVyTWFuYWdlci5nZXRJbnN0YW5jZShteVByb2plY3QpLmNyZWF0ZVNtYXJ0UHNpRWxlbWVudFBvaW50ZXIoYUNsYXNzKTsKKworICAgIERvY3VtZW50IGFDbGFzc0RvY3VtZW50ID0gUHNpRG9jdW1lbnRNYW5hZ2VyLmdldEluc3RhbmNlKG15UHJvamVjdCkuZ2V0RG9jdW1lbnQoYUNsYXNzLmdldENvbnRhaW5pbmdGaWxlKCkpOworICAgIERvY3VtZW50IHRlc3REb2N1bWVudCA9IFBzaURvY3VtZW50TWFuYWdlci5nZXRJbnN0YW5jZShteVByb2plY3QpLmdldERvY3VtZW50KHR5cGVFbGVtZW50LmdldENvbnRhaW5pbmdGaWxlKCkpOworICAgIGFzc2VydE5vdFNhbWUoYUNsYXNzRG9jdW1lbnQsIHRlc3REb2N1bWVudCk7CisKKyAgICBhQ2xhc3NEb2N1bWVudC5pbnNlcnRTdHJpbmcoYUNsYXNzLmdldFRleHRPZmZzZXQoKSwgIi8qKi8iKTsKKyAgICB0ZXN0RG9jdW1lbnQuaW5zZXJ0U3RyaW5nKHR5cGVFbGVtZW50LmdldFRleHRPZmZzZXQoKSwgIi8qKi8iKTsKKyAgICBQc2lEb2N1bWVudE1hbmFnZXIuZ2V0SW5zdGFuY2UobXlQcm9qZWN0KS5jb21taXRBbGxEb2N1bWVudHMoKTsKKworICAgIFBzaUVsZW1lbnQgZWxlbWVudCA9IHR5cGVQb2ludGVyLmdldEVsZW1lbnQoKTsKKyAgICBhc3NlcnROb3ROdWxsKGVsZW1lbnQpOworICAgIGFzc2VydFRydWUoZWxlbWVudCBpbnN0YW5jZW9mIFBzaVR5cGVFbGVtZW50KTsKKyAgICBhc3NlcnRUcnVlKGVsZW1lbnQuaXNWYWxpZCgpKTsKKyAgICBhc3NlcnRFcXVhbHMoY2xhc3NQb2ludGVyLmdldEVsZW1lbnQoKSwgUHNpVXRpbC5yZXNvbHZlQ2xhc3NJblR5cGUoKChQc2lUeXBlRWxlbWVudCllbGVtZW50KS5nZXRUeXBlKCkpKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RDcmVhdGVQb2ludGVySW5CZWZvcmVEb2N1bWVudENoYW5nZSgpIHsKKyAgICBmaW5hbCBQc2lDbGFzcyBhQ2xhc3MgPSBteUphdmFGYWNhZGUuZmluZENsYXNzKCJBQ2xhc3MiLEdsb2JhbFNlYXJjaFNjb3BlLmFsbFNjb3BlKGdldFByb2plY3QoKSkpOworICAgIGFzc2VydE5vdE51bGwoYUNsYXNzKTsKKworICAgIERvY3VtZW50IGRvY3VtZW50ID0gUHNpRG9jdW1lbnRNYW5hZ2VyLmdldEluc3RhbmNlKG15UHJvamVjdCkuZ2V0RG9jdW1lbnQoYUNsYXNzLmdldENvbnRhaW5pbmdGaWxlKCkpOworCisgICAgZmluYWwgU21hcnRQc2lFbGVtZW50UG9pbnRlcltdIHBvaW50ZXIgPSBuZXcgU21hcnRQc2lFbGVtZW50UG9pbnRlclsxXTsKKyAgICBpbnQgb2Zmc2V0ID0gYUNsYXNzLmdldFRleHRPZmZzZXQoKTsKKyAgICBEb2N1bWVudExpc3RlbmVyIGxpc3RlbmVyID0gbmV3IERvY3VtZW50TGlzdGVuZXIoKSB7CisgICAgICBAT3ZlcnJpZGUKKyAgICAgIHB1YmxpYyB2b2lkIGJlZm9yZURvY3VtZW50Q2hhbmdlKERvY3VtZW50RXZlbnQgZXZlbnQpIHsKKyAgICAgICAgcG9pbnRlclswXSA9IFNtYXJ0UG9pbnRlck1hbmFnZXIuZ2V0SW5zdGFuY2UobXlQcm9qZWN0KS5jcmVhdGVTbWFydFBzaUVsZW1lbnRQb2ludGVyKGFDbGFzcyk7CisgICAgICB9CisKKyAgICAgIEBPdmVycmlkZQorICAgICAgcHVibGljIHZvaWQgZG9jdW1lbnRDaGFuZ2VkKERvY3VtZW50RXZlbnQgZXZlbnQpIHsKKyAgICAgIH0KKyAgICB9OworICAgIEVkaXRvckV2ZW50TXVsdGljYXN0ZXIgbXVsdGljYXN0ZXIgPSBFZGl0b3JGYWN0b3J5LmdldEluc3RhbmNlKCkuZ2V0RXZlbnRNdWx0aWNhc3RlcigpOworICAgIG11bHRpY2FzdGVyLmFkZERvY3VtZW50TGlzdGVuZXIobGlzdGVuZXIpOworICAgIHRyeSB7CisgICAgICBkb2N1bWVudC5pbnNlcnRTdHJpbmcob2Zmc2V0LCAiLyoqKioqKi8iKTsKKyAgICB9CisgICAgZmluYWxseSB7CisgICAgICBtdWx0aWNhc3Rlci5yZW1vdmVEb2N1bWVudExpc3RlbmVyKGxpc3RlbmVyKTsKKyAgICB9CisKKyAgICBwb2ludGVyWzBdLmdldEVsZW1lbnQoKTsKKworICAgIGRvY3VtZW50Lmluc2VydFN0cmluZygwLCAiLyoqLyIpOworICAgIFBzaURvY3VtZW50TWFuYWdlci5nZXRJbnN0YW5jZShteVByb2plY3QpLmNvbW1pdEFsbERvY3VtZW50cygpOworCisgICAgUHNpRWxlbWVudCBlbGVtZW50ID0gcG9pbnRlclswXS5nZXRFbGVtZW50KCk7CisgICAgYXNzZXJ0Tm90TnVsbChlbGVtZW50KTsKKyAgICBhc3NlcnRUcnVlKGVsZW1lbnQgaW5zdGFuY2VvZiBQc2lDbGFzcyk7CisgICAgYXNzZXJ0VHJ1ZShlbGVtZW50LmlzVmFsaWQoKSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0Q3JlYXRlUG9pbnRlcldoZW5Ob1BzaUZpbGUoKSB7CisgICAgbXlQc2lNYW5hZ2VyLnN0YXJ0QmF0Y2hGaWxlc1Byb2Nlc3NpbmdNb2RlKCk7IC8vIHRvIHVzZSB3ZWFrIHJlZnMKKworICAgIHRyeSB7CisgICAgICBmaW5hbCBQc2lDbGFzcyBhQ2xhc3MgPSBteUphdmFGYWNhZGUuZmluZENsYXNzKCJBQ2xhc3MiLEdsb2JhbFNlYXJjaFNjb3BlLmFsbFNjb3BlKGdldFByb2plY3QoKSkpOworICAgICAgYXNzZXJ0Tm90TnVsbChhQ2xhc3MpOworCisgICAgICBWaXJ0dWFsRmlsZSB2RmlsZSA9IG15Um9vdC5maW5kQ2hpbGQoIkFDbGFzcy5qYXZhIik7CisgICAgICBhc3NlcnROb3ROdWxsKHZGaWxlKTsKKyAgICAgIFBzaURvY3VtZW50TWFuYWdlciBwc2lEb2N1bWVudE1hbmFnZXIgPSBQc2lEb2N1bWVudE1hbmFnZXIuZ2V0SW5zdGFuY2UobXlQcm9qZWN0KTsKKyAgICAgIERvY3VtZW50IGRvY3VtZW50ID0gRmlsZURvY3VtZW50TWFuYWdlci5nZXRJbnN0YW5jZSgpLmdldERvY3VtZW50KHZGaWxlKTsKKworICAgICAgZmluYWwgU21hcnRQc2lFbGVtZW50UG9pbnRlciBwb2ludGVyID0gU21hcnRQb2ludGVyTWFuYWdlci5nZXRJbnN0YW5jZShteVByb2plY3QpLmNyZWF0ZVNtYXJ0UHNpRWxlbWVudFBvaW50ZXIoYUNsYXNzKTsKKworICAgICAgU3lzdGVtLmdjKCk7CisgICAgICAvKgorICAgICAgUHNpRmlsZSBwc2lGaWxlID0gbXlQc2lNYW5hZ2VyLmdldEZpbGVNYW5hZ2VyKCkuZ2V0Q2FjaGVkUHNpRmlsZSh2RmlsZSk7CisgICAgICBhc3NlcnROdWxsKHBzaUZpbGUpOworICAgICAgKi8KKworICAgICAgZG9jdW1lbnQuaW5zZXJ0U3RyaW5nKDAsICJjbGFzcyBGb297fVxuIik7CisKKyAgICAgIFBzaUVsZW1lbnQgZWxlbWVudCA9IHBvaW50ZXIuZ2V0RWxlbWVudCgpOworICAgICAgYXNzZXJ0RXF1YWxzKGFDbGFzcywgZWxlbWVudCk7CisKKyAgICAgIGRvY3VtZW50Lmluc2VydFN0cmluZygwLCAiLyoqLyIpOworICAgICAgcHNpRG9jdW1lbnRNYW5hZ2VyLmNvbW1pdEFsbERvY3VtZW50cygpOworCisgICAgICBpZiAoYUNsYXNzLmlzVmFsaWQoKSkgeworICAgICAgICBhQ2xhc3MuZ2V0Q2hpbGRyZW4oKTsKKyAgICAgIH0KKworICAgICAgZWxlbWVudCA9IHBvaW50ZXIuZ2V0RWxlbWVudCgpOworICAgICAgYXNzZXJ0Tm90TnVsbChlbGVtZW50KTsKKyAgICAgIGFzc2VydFRydWUoZWxlbWVudCBpbnN0YW5jZW9mIFBzaUNsYXNzKTsKKyAgICAgIGFzc2VydFRydWUoZWxlbWVudC5pc1ZhbGlkKCkpOworICAgIH0KKyAgICBmaW5hbGx5IHsKKyAgICAgIG15UHNpTWFuYWdlci5maW5pc2hCYXRjaEZpbGVzUHJvY2Vzc2luZ01vZGUoKTsgLy8gdG8gdXNlIHdlYWsgcmVmcworICAgIH0KKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RSZXBsYWNlRmlsZSgpIHRocm93cyBJT0V4Y2VwdGlvbiB7CisgICAgVmlydHVhbEZpbGUgdmZpbGUgPSBteVJvb3QuY3JlYXRlQ2hpbGREYXRhKHRoaXMsICJYLmphdmEiKTsKKyAgICBWZnNVdGlsLnNhdmVUZXh0KHZmaWxlLCAicHVibGljIGNsYXNzIFggeyBwdWJsaWMgaW50IFg7IH0iKTsKKworICAgIFBzaUNsYXNzIGFDbGFzcyA9IG15SmF2YUZhY2FkZS5maW5kQ2xhc3MoIlgiLCBHbG9iYWxTZWFyY2hTY29wZS5hbGxTY29wZShnZXRQcm9qZWN0KCkpKTsKKyAgICBhc3NlcnROb3ROdWxsKGFDbGFzcyk7CisgICAgYXNzZXJ0VHJ1ZShhQ2xhc3MuaXNWYWxpZCgpKTsKKworICAgIFNtYXJ0UHNpRWxlbWVudFBvaW50ZXIgY2xhc3NwID0gU21hcnRQb2ludGVyTWFuYWdlci5nZXRJbnN0YW5jZShteVByb2plY3QpLmNyZWF0ZVNtYXJ0UHNpRWxlbWVudFBvaW50ZXIoYUNsYXNzKTsKKyAgICBTbWFydFBzaUVsZW1lbnRQb2ludGVyIGZpbGVwID0gU21hcnRQb2ludGVyTWFuYWdlci5nZXRJbnN0YW5jZShteVByb2plY3QpLmNyZWF0ZVNtYXJ0UHNpRWxlbWVudFBvaW50ZXIoYUNsYXNzLmdldENvbnRhaW5pbmdGaWxlKCkpOworCisgICAgRmlsZUNvbnRlbnRVdGlsLnJlcGFyc2VGaWxlcyhteVByb2plY3QsIENvbGxlY3Rpb25zLjxWaXJ0dWFsRmlsZT5zaW5nbGV0b24odmZpbGUpLCB0cnVlKTsKKyAgICBQc2lEb2N1bWVudE1hbmFnZXIuZ2V0SW5zdGFuY2UobXlQcm9qZWN0KS5jb21taXRBbGxEb2N1bWVudHMoKTsKKyAgICBhc3NlcnRGYWxzZShhQ2xhc3MuaXNWYWxpZCgpKTsKKworICAgIFBzaUVsZW1lbnQgZWxlbWVudCA9IGNsYXNzcC5nZXRFbGVtZW50KCk7CisgICAgYXNzZXJ0Tm90TnVsbChlbGVtZW50KTsKKyAgICBhc3NlcnRUcnVlKGVsZW1lbnQgaW5zdGFuY2VvZiBQc2lDbGFzcyk7CisgICAgYXNzZXJ0VHJ1ZShlbGVtZW50LmlzVmFsaWQoKSk7CisgICAgYXNzZXJ0RXF1YWxzKHZmaWxlLCBlbGVtZW50LmdldENvbnRhaW5pbmdGaWxlKCkuZ2V0VmlydHVhbEZpbGUoKSk7CisKKyAgICBlbGVtZW50ID0gZmlsZXAuZ2V0RWxlbWVudCgpOworICAgIGFzc2VydE5vdE51bGwoZWxlbWVudCk7CisgICAgYXNzZXJ0VHJ1ZShlbGVtZW50IGluc3RhbmNlb2YgUHNpRmlsZSk7CisgICAgYXNzZXJ0VHJ1ZShlbGVtZW50LmlzVmFsaWQoKSk7CisgICAgYXNzZXJ0RXF1YWxzKHZmaWxlLCBlbGVtZW50LmdldENvbnRhaW5pbmdGaWxlKCkuZ2V0VmlydHVhbEZpbGUoKSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0Q3JlYXRlUG9pbnRlckRvZXNOb3RMb2FkUHNpVHJlZSgpIHRocm93cyBJT0V4Y2VwdGlvbiB7CisgICAgVmlydHVhbEZpbGUgdmZpbGUgPSBteVJvb3QuY3JlYXRlQ2hpbGREYXRhKHRoaXMsICJYLmphdmEiKTsKKyAgICBWZnNVdGlsLnNhdmVUZXh0KHZmaWxlLCAicHVibGljIGNsYXNzIFggeyBwdWJsaWMgaW50IFg7IH0iKTsKKworICAgIFBzaUNsYXNzIGFDbGFzcyA9IG15SmF2YUZhY2FkZS5maW5kQ2xhc3MoIlgiLCBHbG9iYWxTZWFyY2hTY29wZS5hbGxTY29wZShnZXRQcm9qZWN0KCkpKTsKKyAgICBhc3NlcnROb3ROdWxsKGFDbGFzcyk7CisgICAgYXNzZXJ0VHJ1ZShhQ2xhc3MuaXNWYWxpZCgpKTsKKworICAgIFBzaUZpbGVJbXBsIGZpbGUgPSAoUHNpRmlsZUltcGwpYUNsYXNzLmdldENvbnRhaW5pbmdGaWxlKCk7CisKKyAgICBhc3NlcnRUcmVlTG9hZGVkKGZpbGUsIGZhbHNlKTsKKworICAgIFNtYXJ0UHNpRWxlbWVudFBvaW50ZXIgcCA9IFNtYXJ0UG9pbnRlck1hbmFnZXIuZ2V0SW5zdGFuY2UobXlQcm9qZWN0KS5jcmVhdGVTbWFydFBzaUVsZW1lbnRQb2ludGVyKGFDbGFzcyk7CisgICAgYXNzZXJ0Tm90TnVsbChwKTsKKworICAgIGFzc2VydFRyZWVMb2FkZWQoZmlsZSwgZmFsc2UpOworCisgICAgYXNzZXJ0SW5zdGFuY2VPZihwLmdldEVsZW1lbnQoKSwgUHNpQ2xhc3MuY2xhc3MpOworCisgICAgYXNzZXJ0VHJlZUxvYWRlZChmaWxlLCBmYWxzZSk7CisKKyAgICBQc2lEb2N1bWVudE1hbmFnZXIgZG9jdW1lbnRNYW5hZ2VyID0gUHNpRG9jdW1lbnRNYW5hZ2VyLmdldEluc3RhbmNlKG15UHJvamVjdCk7CisgICAgRG9jdW1lbnQgZG9jdW1lbnQgPSBkb2N1bWVudE1hbmFnZXIuZ2V0RG9jdW1lbnQoZmlsZSk7CisgICAgZG9jdW1lbnQuaW5zZXJ0U3RyaW5nKDAsICIvKiogYXNkYXNkICovIik7CisgICAgZG9jdW1lbnRNYW5hZ2VyLmNvbW1pdEFsbERvY3VtZW50cygpOworCisgICAgLy8gbG9hZGVkIHRyZWUKKyAgICBhc3NlcnRUcmVlTG9hZGVkKGZpbGUsIHRydWUpOworCisgICAgYXNzZXJ0SW5zdGFuY2VPZihwLmdldEVsZW1lbnQoKSwgUHNpQ2xhc3MuY2xhc3MpOworCisgICAgYXNzZXJ0VHJlZUxvYWRlZChmaWxlLCB0cnVlKTsKKyAgfQorCisgIHByaXZhdGUgc3RhdGljIHZvaWQgYXNzZXJ0VHJlZUxvYWRlZChQc2lGaWxlSW1wbCBmaWxlLCBib29sZWFuIGxvYWRlZCkgeworICAgIEZpbGVFbGVtZW50IHRyZWVFbGVtZW50ID0gZmlsZS5nZXRUcmVlRWxlbWVudCgpOworICAgIGFzc2VydEVxdWFscyhsb2FkZWQsIHRyZWVFbGVtZW50ICE9IG51bGwpOworICAgIFN0dWJUcmVlIHN0dWJUcmVlID0gZmlsZS5nZXRTdHViVHJlZSgpOworICAgIGFzc2VydEVxdWFscyhsb2FkZWQsIHN0dWJUcmVlID09IG51bGwpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFBvaW50ZXJEaXNhbWJpZ3VhdGlvbkFmdGVyRHVwTGluZSgpIHRocm93cyBFeGNlcHRpb24geworICAgIFBzaUphdmFGaWxlIGZpbGUgPSAoUHNpSmF2YUZpbGUpY29uZmlndXJlQnlUZXh0KFN0ZEZpbGVUeXBlcy5KQVZBLCAiY2xhc3MgWFhYeyB2b2lkIGZvbygpIHsgXG4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgPGNhcmV0PmZvbygpO1xuIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAifX0iKTsKKyAgICBQc2lDbGFzcyBhQ2xhc3MgPSBmaWxlLmdldENsYXNzZXMoKVswXTsKKyAgICBhc3NlcnROb3ROdWxsKGFDbGFzcyk7CisKKyAgICBQc2lSZWZlcmVuY2VFeHByZXNzaW9uIHJlZjEgPSBQc2lUcmVlVXRpbC5nZXRQYXJlbnRPZlR5cGUoUHNpVXRpbEJhc2UuZ2V0RWxlbWVudEF0Q2FyZXQoZ2V0RWRpdG9yKCkpLCBQc2lSZWZlcmVuY2VFeHByZXNzaW9uLmNsYXNzKTsKKyAgICBTbWFydFBzaUVsZW1lbnRQb2ludGVyIHBvaW50ZXIxID0gU21hcnRQb2ludGVyTWFuYWdlci5nZXRJbnN0YW5jZShteVByb2plY3QpLmNyZWF0ZVNtYXJ0UHNpRWxlbWVudFBvaW50ZXIocmVmMSk7CisKKyAgICBjdHJsRCgpOworICAgIFBzaURvY3VtZW50TWFuYWdlci5nZXRJbnN0YW5jZShteVByb2plY3QpLmNvbW1pdEFsbERvY3VtZW50cygpOworCisgICAgU2V0PFBzaVJlZmVyZW5jZUV4cHJlc3Npb24+IHJlZnMgPSBuZXcgVEhhc2hTZXQ8UHNpUmVmZXJlbmNlRXhwcmVzc2lvbj4oKTsKKyAgICBpbnQgb2Zmc2V0PTA7CisgICAgd2hpbGUgKHRydWUpIHsKKyAgICAgIG9mZnNldCA9IGdldEVkaXRvcigpLmdldERvY3VtZW50KCkuZ2V0VGV4dCgpLmluZGV4T2YoImZvbygpOyIsIG9mZnNldCsxKTsKKyAgICAgIGlmIChvZmZzZXQgPT0gLTEpIGJyZWFrOworICAgICAgUHNpUmVmZXJlbmNlRXhwcmVzc2lvbiByZWYyID0gUHNpVHJlZVV0aWwuZ2V0UGFyZW50T2ZUeXBlKGdldEZpbGUoKS5maW5kRWxlbWVudEF0KG9mZnNldCksIFBzaVJlZmVyZW5jZUV4cHJlc3Npb24uY2xhc3MpOworICAgICAgcmVmcy5hZGQocmVmMik7CisgICAgfQorICAgIHJlZnMucmVtb3ZlKHJlZjEpOworICAgIGFzc2VydEVxdWFscygxLCByZWZzLnNpemUoKSk7CisgICAgUHNpUmVmZXJlbmNlRXhwcmVzc2lvbiByZWYyID0gcmVmcy5pdGVyYXRvcigpLm5leHQoKTsKKyAgICBhc3NlcnROb3RTYW1lKHJlZjEsIHJlZjIpOworICAgIFNtYXJ0UHNpRWxlbWVudFBvaW50ZXIgcG9pbnRlcjIgPSBTbWFydFBvaW50ZXJNYW5hZ2VyLmdldEluc3RhbmNlKG15UHJvamVjdCkuY3JlYXRlU21hcnRQc2lFbGVtZW50UG9pbnRlcihyZWYyKTsKKyAgICBhc3NlcnROb3RTYW1lKHBvaW50ZXIxLCBwb2ludGVyMik7CisKKyAgICBQc2lFbGVtZW50IGVsZW1lbnQxID0gcG9pbnRlcjEuZ2V0RWxlbWVudCgpOworICAgIFBzaUVsZW1lbnQgZWxlbWVudDIgPSBwb2ludGVyMi5nZXRFbGVtZW50KCk7CisKKyAgICBhc3NlcnROb3ROdWxsKGVsZW1lbnQxKTsKKyAgICBhc3NlcnROb3ROdWxsKGVsZW1lbnQyKTsKKyAgICBhc3NlcnROb3RTYW1lKGVsZW1lbnQxLCBlbGVtZW50Mik7CisKKyAgICBhc3NlcnRGYWxzZShTbWFydFBvaW50ZXJNYW5hZ2VyLmdldEluc3RhbmNlKG15UHJvamVjdCkucG9pbnRUb1RoZVNhbWVFbGVtZW50KHBvaW50ZXIxLCBwb2ludGVyMikpOworICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovcHNpL1NyYzE1UmVwb3NpdG9yeVVzZVRlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9wc2kvU3JjMTVSZXBvc2l0b3J5VXNlVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc0MjQ2NTkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovcHNpL1NyYzE1UmVwb3NpdG9yeVVzZVRlc3QuamF2YQpAQCAtMCwwICsxLDMzNyBAQAorLyoKKyAqIENvcHlyaWdodCAyMDAwLTIwMTIgSmV0QnJhaW5zIHMuci5vLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KK3BhY2thZ2UgY29tLmludGVsbGlqLnBzaTsKKworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLmFwcGxpY2F0aW9uLmV4LlBhdGhNYW5hZ2VyRXg7CitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkucHJvamVjdFJvb3RzLmltcGwuSmF2YVNka0ltcGw7CitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkucm9vdHMuTGFuZ3VhZ2VMZXZlbFByb2plY3RFeHRlbnNpb247CitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkudmZzLlZpcnR1YWxGaWxlOworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLnZmcy5WaXJ0dWFsRmlsZUZpbHRlcjsKK2ltcG9ydCBjb20uaW50ZWxsaWoucG9tLmphdmEuTGFuZ3VhZ2VMZXZlbDsKK2ltcG9ydCBjb20uaW50ZWxsaWoucHNpLnNlYXJjaC5HbG9iYWxTZWFyY2hTY29wZTsKK2ltcG9ydCBjb20uaW50ZWxsaWoucHNpLnNlYXJjaC5zZWFyY2hlcy5Bbm5vdGF0ZWRNZW1iZXJzU2VhcmNoOworaW1wb3J0IGNvbS5pbnRlbGxpai5wc2kuc2VhcmNoLnNlYXJjaGVzLkFubm90YXRlZFBhY2thZ2VzU2VhcmNoOworaW1wb3J0IGNvbS5pbnRlbGxpai5wc2kuc2VhcmNoLnNlYXJjaGVzLkNsYXNzSW5oZXJpdG9yc1NlYXJjaDsKK2ltcG9ydCBjb20uaW50ZWxsaWoucHNpLnV0aWwuVHlwZUNvbnZlcnNpb25VdGlsOworaW1wb3J0IGNvbS5pbnRlbGxpai50ZXN0RnJhbWV3b3JrLklkZWFUZXN0VXRpbDsKK2ltcG9ydCBjb20uaW50ZWxsaWoudGVzdEZyYW1ld29yay5QbGF0Zm9ybVRlc3RDYXNlOworaW1wb3J0IGNvbS5pbnRlbGxpai50ZXN0RnJhbWV3b3JrLlBzaVRlc3RDYXNlOworaW1wb3J0IGNvbS5pbnRlbGxpai50ZXN0RnJhbWV3b3JrLlBzaVRlc3RVdGlsOworaW1wb3J0IG9yZy5qZXRicmFpbnMuYW5ub3RhdGlvbnMuTm90TnVsbDsKKworaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CitpbXBvcnQgamF2YS51dGlsLkFycmF5czsKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuSGFzaFNldDsKK2ltcG9ydCBqYXZhLnV0aWwuU2V0OworCisvKioKKyAqIEBhdXRob3IgZHNsCisgKi8KK0BQbGF0Zm9ybVRlc3RDYXNlLldyYXBJbkNvbW1hbmQKK3B1YmxpYyBjbGFzcyBTcmMxNVJlcG9zaXRvcnlVc2VUZXN0IGV4dGVuZHMgUHNpVGVzdENhc2UgeworICBAT3ZlcnJpZGUKKyAgcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBzdXBlci5zZXRVcCgpOworCisgICAgTGFuZ3VhZ2VMZXZlbFByb2plY3RFeHRlbnNpb24uZ2V0SW5zdGFuY2UobXlQcm9qZWN0KS5zZXRMYW5ndWFnZUxldmVsKExhbmd1YWdlTGV2ZWwuSkRLXzFfNSk7CisgICAgU3RyaW5nIHJvb3QgPSBQYXRoTWFuYWdlckV4LmdldFRlc3REYXRhUGF0aCgpICsgIi9wc2kvcmVwb3NpdG9yeVVzZS9zcmMxNSI7CisgICAgUHNpVGVzdFV0aWwucmVtb3ZlQWxsUm9vdHMobXlNb2R1bGUsIElkZWFUZXN0VXRpbC5nZXRNb2NrSmRrMTcoIm1vY2sgMS41IikpOworICAgIFBzaVRlc3RVdGlsLmNyZWF0ZVRlc3RQcm9qZWN0U3RydWN0dXJlKG15UHJvamVjdCwgbXlNb2R1bGUsIHJvb3QsIG15RmlsZXNUb0RlbGV0ZSk7CisgIH0KKworICBAT3ZlcnJpZGUKKyAgcHJvdGVjdGVkIHZvaWQgdGVhckRvd24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBMYW5ndWFnZUxldmVsUHJvamVjdEV4dGVuc2lvbi5nZXRJbnN0YW5jZShteVByb2plY3QpLnNldExhbmd1YWdlTGV2ZWwoTGFuZ3VhZ2VMZXZlbC5KREtfMV81KTsKKyAgICBzdXBlci50ZWFyRG93bigpOworICB9CisKKworICBwdWJsaWMgdm9pZCB0ZXN0U3RhdGljSW1wb3J0cygpIHRocm93cyBJT0V4Y2VwdGlvbiB7CisgICAgc2V0dXBMb2FkaW5nRmlsdGVyKCk7CisgICAgZmluYWwgUHNpQ2xhc3MgYUNsYXNzID0gZmluZENsYXNzKCJzdGF0aWNJbXBvcnRzLlN0YXRpY0ltcG9ydHMiKTsKKyAgICBmaW5hbCBQc2lKYXZhRmlsZSBqYXZhRmlsZSA9IChQc2lKYXZhRmlsZSlhQ2xhc3MuZ2V0Q29udGFpbmluZ0ZpbGUoKTsKKyAgICBkb1Rlc3RTdGF0aWNJbXBvcnRzKGphdmFGaWxlLCBmYWxzZSk7CisgICAgdGVhckRvd25Mb2FkaW5nRmlsdGVyKCk7CisgICAgZG9UZXN0U3RhdGljSW1wb3J0cyhqYXZhRmlsZSwgdHJ1ZSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0RGVwcmVjYXRlZEFubm90YXRpb24oKSB0aHJvd3MgSU9FeGNlcHRpb24geworICAgIHNldHVwTG9hZGluZ0ZpbHRlcigpOworCisgICAgZmluYWwgUHNpQ2xhc3MgYUNsYXNzID0gZmluZENsYXNzKCJhbm5vdGF0aW9ucy5EZXByZWNhdGVkQW5ub3RhdGlvbiIpOworICAgIGFzc2VydFRydWUoYUNsYXNzLmlzRGVwcmVjYXRlZCgpKTsKKyAgICBQc2lNZXRob2QgbWV0aG9kID0gYUNsYXNzLmdldE1ldGhvZHMoKVswXTsKKyAgICBhc3NlcnRUcnVlKG1ldGhvZC5pc0RlcHJlY2F0ZWQoKSk7CisgICAgUHNpRmllbGQgZmllbGQgPSBhQ2xhc3MuZ2V0RmllbGRzKClbMF07CisgICAgYXNzZXJ0VHJ1ZShmaWVsZC5pc0RlcHJlY2F0ZWQoKSk7CisgICAgdGVhckRvd25Mb2FkaW5nRmlsdGVyKCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0RW51bUltcGxlbWVudHMoKSB7CisgICAgc2V0dXBMb2FkaW5nRmlsdGVyKCk7CisKKyAgICBmaW5hbCBQc2lDbGFzcyBhQ2xhc3MgPSBmaW5kQ2xhc3MoImVudW1JbXBsZW1lbnRzLk15RW51bSIpOworICAgIGZpbmFsIFBzaUNsYXNzVHlwZVtdIGltcGxlbWVudHNMaXN0VHlwZXMgPSBhQ2xhc3MuZ2V0SW1wbGVtZW50c0xpc3RUeXBlcygpOworICAgIGFzc2VydEVxdWFscygxLCBpbXBsZW1lbnRzTGlzdFR5cGVzLmxlbmd0aCk7CisKKyAgICBmaW5hbCBQc2lDbGFzcyBiYXNlSW50ZXJmYWNlID0gaW1wbGVtZW50c0xpc3RUeXBlc1swXS5yZXNvbHZlKCk7CisgICAgYXNzZXJ0Tm90TnVsbChiYXNlSW50ZXJmYWNlKTsKKyAgICBhc3NlcnRFcXVhbHMoIkkiLCBiYXNlSW50ZXJmYWNlLmdldE5hbWUoKSk7CisgICAgdGVhckRvd25Mb2FkaW5nRmlsdGVyKCk7CisgIH0KKworICBwcml2YXRlIHN0YXRpYyB2b2lkIGRvVGVzdFN0YXRpY0ltcG9ydHMoZmluYWwgUHNpSmF2YUZpbGUgamF2YUZpbGUsIGJvb2xlYW4gb2tUb0xvYWRUcmVlKSB7CisgICAgZmluYWwgUHNpSW1wb3J0TGlzdCBpbXBvcnRMaXN0ID0gamF2YUZpbGUuZ2V0SW1wb3J0TGlzdCgpOworICAgIGFzc2VydE5vdE51bGwoaW1wb3J0TGlzdCk7CisgICAgZmluYWwgUHNpSW1wb3J0U3RhdGVtZW50QmFzZVtdIGFsbEltcG9ydFN0YXRlbWVudHMgPSBpbXBvcnRMaXN0LmdldEFsbEltcG9ydFN0YXRlbWVudHMoKTsKKyAgICBhc3NlcnRFcXVhbHMoNiwgYWxsSW1wb3J0U3RhdGVtZW50cy5sZW5ndGgpOworICAgIGZpbmFsIFBzaUltcG9ydFN0YXRlbWVudFtdIGltcG9ydFN0YXRlbWVudHMgPSBpbXBvcnRMaXN0LmdldEltcG9ydFN0YXRlbWVudHMoKTsKKyAgICBhc3NlcnRFcXVhbHMoMiwgaW1wb3J0U3RhdGVtZW50cy5sZW5ndGgpOworICAgIGZpbmFsIFBzaUltcG9ydFN0YXRpY1N0YXRlbWVudFtdIGltcG9ydFN0YXRpY1N0YXRlbWVudHMgPSBpbXBvcnRMaXN0LmdldEltcG9ydFN0YXRpY1N0YXRlbWVudHMoKTsKKyAgICBhc3NlcnRFcXVhbHMoNCwgaW1wb3J0U3RhdGljU3RhdGVtZW50cy5sZW5ndGgpOworICAgIGFzc2VydEZhbHNlKGltcG9ydFN0YXRlbWVudHNbMF0uaXNPbkRlbWFuZCgpKTsKKyAgICBhc3NlcnRUcnVlKGltcG9ydFN0YXRpY1N0YXRlbWVudHNbMF0uaXNPbkRlbWFuZCgpKTsKKyAgICBhc3NlcnRGYWxzZShpbXBvcnRTdGF0ZW1lbnRzWzBdLmlzT25EZW1hbmQoKSk7CisgICAgYXNzZXJ0VHJ1ZShpbXBvcnRTdGF0aWNTdGF0ZW1lbnRzWzFdLmlzT25EZW1hbmQoKSk7CisgICAgYXNzZXJ0RmFsc2UoaW1wb3J0U3RhdGljU3RhdGVtZW50c1syXS5pc09uRGVtYW5kKCkpOworICAgIGFzc2VydEZhbHNlKGltcG9ydFN0YXRpY1N0YXRlbWVudHNbM10uaXNPbkRlbWFuZCgpKTsKKworICAgIGFzc2VydEVxdWFscygic29ydCIsIGltcG9ydFN0YXRpY1N0YXRlbWVudHNbMl0uZ2V0UmVmZXJlbmNlTmFtZSgpKTsKKyAgICBhc3NlcnRFcXVhbHMoInNvcnQiLCBpbXBvcnRTdGF0aWNTdGF0ZW1lbnRzWzNdLmdldFJlZmVyZW5jZU5hbWUoKSk7CisKKyAgICBmaW5hbCBQc2lJbXBvcnRTdGF0aWNTdGF0ZW1lbnQgY2xhc3NSZWZlcmVuY2UxID0gaW1wb3J0U3RhdGljU3RhdGVtZW50c1sxXTsKKyAgICBmaW5hbCBQc2lFbGVtZW50IGVsZW1lbnQxID0gY2xhc3NSZWZlcmVuY2UxLnJlc29sdmVUYXJnZXRDbGFzcygpOworICAgIGFzc2VydE5vdE51bGwoZWxlbWVudDEpOworICAgIGFzc2VydFRydWUoZWxlbWVudDEgaW5zdGFuY2VvZiBQc2lDbGFzcyk7CisgICAgYXNzZXJ0RXF1YWxzKCJqYXZhLnV0aWwuQXJyYXlzIiwgKChQc2lDbGFzcyllbGVtZW50MSkuZ2V0UXVhbGlmaWVkTmFtZSgpKTsKKworICAgIGZpbmFsIFBzaUltcG9ydFN0YXRpY1N0YXRlbWVudCBjbGFzc1JlZmVyZW5jZTMgPSBpbXBvcnRTdGF0aWNTdGF0ZW1lbnRzWzNdOworICAgIGZpbmFsIFBzaUVsZW1lbnQgZWxlbWVudDMgPSBjbGFzc1JlZmVyZW5jZTMucmVzb2x2ZVRhcmdldENsYXNzKCk7CisgICAgYXNzZXJ0Tm90TnVsbChlbGVtZW50Myk7CisgICAgYXNzZXJ0VHJ1ZShlbGVtZW50MyBpbnN0YW5jZW9mIFBzaUNsYXNzKTsKKyAgICBhc3NlcnRFcXVhbHMoImphdmEudXRpbC5BcnJheXMiLCAoKFBzaUNsYXNzKWVsZW1lbnQzKS5nZXRRdWFsaWZpZWROYW1lKCkpOworCisgICAgaWYgKG9rVG9Mb2FkVHJlZSkgeworICAgICAgYXNzZXJ0RXF1YWxzKCJqYXZhLnV0aWwuQ29sbGVjdGlvbnMiLCBnZXRUZXh0KGltcG9ydFN0YXRpY1N0YXRlbWVudHNbMF0pKTsKKyAgICAgIGFzc2VydEVxdWFscygiamF2YS51dGlsLkFycmF5cyIsIGdldFRleHQoaW1wb3J0U3RhdGljU3RhdGVtZW50c1sxXSkpOworICAgICAgYXNzZXJ0RXF1YWxzKCJqYXZhLnV0aWwuQ29sbGVjdGlvbnMuc29ydCIsIGdldFRleHQoaW1wb3J0U3RhdGljU3RhdGVtZW50c1syXSkpOworICAgICAgYXNzZXJ0RXF1YWxzKCJqYXZhLnV0aWwuQXJyYXlzLnNvcnQiLCBnZXRUZXh0KGltcG9ydFN0YXRpY1N0YXRlbWVudHNbM10pKTsKKyAgICB9CisgIH0KKworICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgZ2V0VGV4dChQc2lJbXBvcnRTdGF0aWNTdGF0ZW1lbnQgc3RhdGVtZW50KSB7CisgICAgZmluYWwgUHNpSmF2YUNvZGVSZWZlcmVuY2VFbGVtZW50IHJlZmVyZW5jZSA9IHN0YXRlbWVudC5nZXRJbXBvcnRSZWZlcmVuY2UoKTsKKyAgICByZXR1cm4gcmVmZXJlbmNlICE9IG51bGwgPyByZWZlcmVuY2UuZ2V0VGV4dCgpIDogIihudWxsIHJlZikiOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEVudW0oKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBzZXR1cExvYWRpbmdGaWx0ZXIoKTsKKyAgICBmaW5hbCBQc2lDbGFzcyBlbnVtQ2xhc3MgPSBmaW5kQ2xhc3MoImVudW1zLk91ckVudW0iKTsKKyAgICBhc3NlcnRUcnVlKGVudW1DbGFzcy5pc0VudW0oKSk7CisgICAgZmluYWwgUHNpQ2xhc3Mgc3VwZXJDbGFzcyA9IGVudW1DbGFzcy5nZXRTdXBlckNsYXNzKCk7CisgICAgYXNzZXJ0Tm90TnVsbChzdXBlckNsYXNzKTsKKyAgICBhc3NlcnRFcXVhbHMoImphdmEubGFuZy5FbnVtIiwgc3VwZXJDbGFzcy5nZXRRdWFsaWZpZWROYW1lKCkpOworICAgIGFzc2VydFRydWUoZW51bUNsYXNzLmlzSW5oZXJpdG9yKHN1cGVyQ2xhc3MsIGZhbHNlKSk7CisgICAgZmluYWwgUHNpQ2xhc3NUeXBlW10gc3VwZXJUeXBlcyA9IGVudW1DbGFzcy5nZXRTdXBlclR5cGVzKCk7CisgICAgYXNzZXJ0RXF1YWxzKDEsIHN1cGVyVHlwZXMubGVuZ3RoKTsKKyAgICBhc3NlcnRFcXVhbHMoImphdmEubGFuZy5FbnVtPGVudW1zLk91ckVudW0+Iiwgc3VwZXJUeXBlc1swXS5nZXRDYW5vbmljYWxUZXh0KCkpOworICAgIGZpbmFsIFBzaUNsYXNzW10gc3VwZXJzID0gZW51bUNsYXNzLmdldFN1cGVycygpOworICAgIGFzc2VydEVxdWFscygxLCBzdXBlcnMubGVuZ3RoKTsKKyAgICBhc3NlcnRFcXVhbHMoImphdmEubGFuZy5FbnVtIiwgc3VwZXJzWzBdLmdldFF1YWxpZmllZE5hbWUoKSk7CisgICAgZmluYWwgUHNpQ2xhc3NUeXBlW10gZXh0ZW5kc0xpc3RUeXBlcyA9IGVudW1DbGFzcy5nZXRFeHRlbmRzTGlzdFR5cGVzKCk7CisgICAgYXNzZXJ0RXF1YWxzKDEsIGV4dGVuZHNMaXN0VHlwZXMubGVuZ3RoKTsKKyAgICBhc3NlcnRFcXVhbHMoImphdmEubGFuZy5FbnVtPGVudW1zLk91ckVudW0+IiwgZXh0ZW5kc0xpc3RUeXBlc1swXS5nZXRDYW5vbmljYWxUZXh0KCkpOworICAgIGZpbmFsIFBzaVN1YnN0aXR1dG9yIHN1cGVyQ2xhc3NTdWJzdGl0dXRvciA9IFR5cGVDb252ZXJzaW9uVXRpbC5nZXRTdXBlckNsYXNzU3Vic3RpdHV0b3Ioc3VwZXJDbGFzcywgZW51bUNsYXNzLCBQc2lTdWJzdGl0dXRvci5FTVBUWSk7CisgICAgYXNzZXJ0RXF1YWxzKCJqYXZhLmxhbmcuRW51bTxlbnVtcy5PdXJFbnVtPiIsIG15SmF2YUZhY2FkZS5nZXRFbGVtZW50RmFjdG9yeSgpLmNyZWF0ZVR5cGUoc3VwZXJDbGFzcywgc3VwZXJDbGFzc1N1YnN0aXR1dG9yKS5nZXRDYW5vbmljYWxUZXh0KCkpOworICAgIHRlYXJEb3duTG9hZGluZ0ZpbHRlcigpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEVudW1XaXRoQ29uc3RhbnRzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgc2V0dXBMb2FkaW5nRmlsdGVyKCk7CisgICAgUHNpQ2xhc3MgZW51bUNsYXNzID0gZmluZENsYXNzKCJlbnVtcy5PdXJFbnVtV2l0aENvbnN0YW50cyIpOworICAgIGFzc2VydFRydWUoZW51bUNsYXNzLmlzRW51bSgpKTsKKyAgICBjaGVja0VudW1XaXRoQ29uc3RhbnRzKGVudW1DbGFzcywgZmFsc2UpOworICAgIHRlYXJEb3duTG9hZGluZ0ZpbHRlcigpOworICAgIGNoZWNrRW51bVdpdGhDb25zdGFudHMoZW51bUNsYXNzLCB0cnVlKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RFbnVtV2l0aEluaXRpYWxpemVkQ29uc3RhbnRzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgc2V0dXBMb2FkaW5nRmlsdGVyKCk7CisgICAgZmluYWwgR2xvYmFsU2VhcmNoU2NvcGUgbW9kdWxlU2NvcGUgPSBHbG9iYWxTZWFyY2hTY29wZS5tb2R1bGVTY29wZShteU1vZHVsZSk7CisKKyAgICBQc2lDbGFzcyBlbnVtQ2xhc3MgPSBmaW5kQ2xhc3MoImVudW1zLk91ckVudW1XaXRoSW5pdGlhbGl6ZWRDb25zdGFudHMiKTsKKyAgICBhc3NlcnRUcnVlKGVudW1DbGFzcy5pc0VudW0oKSk7CisgICAgUHNpRmllbGRbXSBmaWVsZHMgPSBlbnVtQ2xhc3MuZ2V0RmllbGRzKCk7CisgICAgYXNzZXJ0RXF1YWxzKDMsIGZpZWxkcy5sZW5ndGgpOworICAgIGFzc2VydFRydWUoZmllbGRzWzBdIGluc3RhbmNlb2YgUHNpRW51bUNvbnN0YW50KTsKKyAgICBhc3NlcnRUcnVlKGZpZWxkc1sxXSBpbnN0YW5jZW9mIFBzaUVudW1Db25zdGFudCk7CisgICAgYXNzZXJ0VHJ1ZShmaWVsZHNbMl0gaW5zdGFuY2VvZiBQc2lFbnVtQ29uc3RhbnQpOworICAgIFBzaUFub255bW91c0NsYXNzIGluaXRpYWxpemluZ0NsYXNzMCA9ICgoUHNpRW51bUNvbnN0YW50KWZpZWxkc1swXSkuZ2V0SW5pdGlhbGl6aW5nQ2xhc3MoKTsKKyAgICBhc3NlcnROb3ROdWxsKGluaXRpYWxpemluZ0NsYXNzMCk7CisgICAgUHNpQ2xhc3MgYmFzZUNsYXNzMCA9IGluaXRpYWxpemluZ0NsYXNzMC5nZXRCYXNlQ2xhc3NUeXBlKCkucmVzb2x2ZSgpOworICAgIGFzc2VydFRydWUoYmFzZUNsYXNzMCA9PSBlbnVtQ2xhc3MpOworCisgICAgUHNpQW5vbnltb3VzQ2xhc3MgaW5pdGlhbGl6aW5nQ2xhc3MxID0gKChQc2lFbnVtQ29uc3RhbnQpZmllbGRzWzFdKS5nZXRJbml0aWFsaXppbmdDbGFzcygpOworICAgIGFzc2VydE5vdE51bGwoaW5pdGlhbGl6aW5nQ2xhc3MxKTsKKyAgICBQc2lDbGFzcyBiYXNlQ2xhc3MxID0gaW5pdGlhbGl6aW5nQ2xhc3MxLmdldEJhc2VDbGFzc1R5cGUoKS5yZXNvbHZlKCk7CisgICAgYXNzZXJ0VHJ1ZShiYXNlQ2xhc3MxID09IGVudW1DbGFzcyk7CisKKyAgICBQc2lBbm9ueW1vdXNDbGFzcyBpbml0aWFsaXppbmdDbGFzczIgPSAoKFBzaUVudW1Db25zdGFudClmaWVsZHNbMV0pLmdldEluaXRpYWxpemluZ0NsYXNzKCk7CisgICAgYXNzZXJ0Tm90TnVsbChpbml0aWFsaXppbmdDbGFzczIpOworICAgIFBzaUNsYXNzIGJhc2VDbGFzczIgPSBpbml0aWFsaXppbmdDbGFzczIuZ2V0QmFzZUNsYXNzVHlwZSgpLnJlc29sdmUoKTsKKyAgICBhc3NlcnRUcnVlKGJhc2VDbGFzczIgPT0gZW51bUNsYXNzKTsKKworICAgIGFzc2VydFRydWUoaW5pdGlhbGl6aW5nQ2xhc3MwLmlzSW5oZXJpdG9yKGVudW1DbGFzcywgZmFsc2UpKTsKKyAgICBhc3NlcnRUcnVlKGluaXRpYWxpemluZ0NsYXNzMS5pc0luaGVyaXRvcihlbnVtQ2xhc3MsIGZhbHNlKSk7CisgICAgYXNzZXJ0VHJ1ZShpbml0aWFsaXppbmdDbGFzczIuaXNJbmhlcml0b3IoZW51bUNsYXNzLCBmYWxzZSkpOworCisgICAgZmluYWwgUHNpQ2xhc3NbXSBlbnVtSW5oZXJpdG9ycyA9IENsYXNzSW5oZXJpdG9yc1NlYXJjaC5zZWFyY2goZW51bUNsYXNzLCBtb2R1bGVTY29wZSwgZmFsc2UpLnRvQXJyYXkoUHNpQ2xhc3MuRU1QVFlfQVJSQVkpOworICAgIGFzc2VydEVxdWFscygzLCBlbnVtSW5oZXJpdG9ycy5sZW5ndGgpOworICAgIGFzc2VydFRydWUoQXJyYXlzLmFzTGlzdChlbnVtSW5oZXJpdG9ycykuY29udGFpbnMoaW5pdGlhbGl6aW5nQ2xhc3MwKSk7CisgICAgYXNzZXJ0VHJ1ZShBcnJheXMuYXNMaXN0KGVudW1Jbmhlcml0b3JzKS5jb250YWlucyhpbml0aWFsaXppbmdDbGFzczEpKTsKKyAgICBhc3NlcnRUcnVlKEFycmF5cy5hc0xpc3QoZW51bUluaGVyaXRvcnMpLmNvbnRhaW5zKGluaXRpYWxpemluZ0NsYXNzMikpOworCisKKyAgICBQc2lNZXRob2RbXSBtZXRob2RzMSA9IGluaXRpYWxpemluZ0NsYXNzMi5nZXRNZXRob2RzKCk7CisgICAgYXNzZXJ0RXF1YWxzKDEsIG1ldGhvZHMxLmxlbmd0aCk7CisgICAgYXNzZXJ0RXF1YWxzKCJmb28iLCBtZXRob2RzMVswXS5nZXROYW1lKCkpOworCisgICAgZmluYWwgUHNpQ2xhc3MgYmFzZUludGVyZmFjZUNsYXNzID0gZmluZENsYXNzKCJlbnVtcy5PdXJCYXNlSW50ZXJmYWNlIik7CisKKyAgICBmaW5hbCBQc2lDbGFzc1tdIGluaGVyaXRvcnMgPSBDbGFzc0luaGVyaXRvcnNTZWFyY2guc2VhcmNoKGJhc2VJbnRlcmZhY2VDbGFzcywgbW9kdWxlU2NvcGUsIGZhbHNlKS50b0FycmF5KFBzaUNsYXNzLkVNUFRZX0FSUkFZKTsKKyAgICBhc3NlcnRFcXVhbHMoMSwgaW5oZXJpdG9ycy5sZW5ndGgpOworICAgIGFzc2VydFRydWUoaW5oZXJpdG9yc1swXSBpbnN0YW5jZW9mIFBzaUFub255bW91c0NsYXNzKTsKKworICAgIHRlYXJEb3duTG9hZGluZ0ZpbHRlcigpOworCisgICAgYXNzZXJ0VHJ1ZShpbmhlcml0b3JzWzBdLmdldFBhcmVudCgpLmdldFBhcmVudCgpIGluc3RhbmNlb2YgUHNpRXhwcmVzc2lvbkxpc3QpOworICAgIGFzc2VydFRydWUoaW5oZXJpdG9yc1swXS5nZXRQYXJlbnQoKS5nZXRQYXJlbnQoKS5nZXRQYXJlbnQoKSA9PSBmaWVsZHNbMl0pOworCisgICAgZmluYWwgUHNpRXhwcmVzc2lvbkxpc3QgYXJndW1lbnRMaXN0ID0gKChQc2lFbnVtQ29uc3RhbnQpZmllbGRzWzJdKS5nZXRBcmd1bWVudExpc3QoKTsKKyAgICBhc3NlcnROb3ROdWxsKGFyZ3VtZW50TGlzdCk7CisgICAgZmluYWwgUHNpRXhwcmVzc2lvbltdIGV4cHJlc3Npb25zMiA9IGFyZ3VtZW50TGlzdC5nZXRFeHByZXNzaW9ucygpOworICAgIGFzc2VydEVxdWFscygxLCBleHByZXNzaW9uczIubGVuZ3RoKTsKKyAgICBhc3NlcnRUcnVlKGV4cHJlc3Npb25zMlswXSBpbnN0YW5jZW9mIFBzaU5ld0V4cHJlc3Npb24pOworICAgIGZpbmFsIFBzaUFub255bW91c0NsYXNzIGFub255bW91c0NsYXNzMiA9ICgoUHNpTmV3RXhwcmVzc2lvbilleHByZXNzaW9uczJbMF0pLmdldEFub255bW91c0NsYXNzKCk7CisgICAgYXNzZXJ0VHJ1ZShhbm9ueW1vdXNDbGFzczIgIT0gbnVsbCk7CisgICAgYXNzZXJ0VHJ1ZShhbm9ueW1vdXNDbGFzczIuaXNJbmhlcml0b3IoYmFzZUludGVyZmFjZUNsYXNzLCBmYWxzZSkpOworICB9CisKKyAgcHJpdmF0ZSBzdGF0aWMgdm9pZCBjaGVja0VudW1XaXRoQ29uc3RhbnRzKFBzaUNsYXNzIGVudW1DbGFzcywgYm9vbGVhbiBva1RvTG9hZFRyZWUpIHsKKyAgICBQc2lGaWVsZFtdIGZpZWxkcyA9IGVudW1DbGFzcy5nZXRGaWVsZHMoKTsKKyAgICBhc3NlcnRFcXVhbHMoMywgZmllbGRzLmxlbmd0aCk7CisgICAgY2hlY2tFbnVtQ29uc3RhbnQoIkEiLCBmaWVsZHNbMF0pOworICAgIGNoZWNrRW51bUNvbnN0YW50KCJCIiwgZmllbGRzWzFdKTsKKyAgICBjaGVja0VudW1Db25zdGFudCgiQyIsIGZpZWxkc1syXSk7CisgICAgaWYgKG9rVG9Mb2FkVHJlZSkgeworICAgICAgYXNzZXJ0RXF1YWxzKCJBIiwgZmllbGRzWzBdLmdldFRleHQoKSk7CisgICAgICBhc3NlcnRFcXVhbHMoIkIiLCBmaWVsZHNbMV0uZ2V0VGV4dCgpKTsKKyAgICAgIGFzc2VydEVxdWFscygiQyIsIGZpZWxkc1syXS5nZXRUZXh0KCkpOworICAgIH0KKyAgfQorCisgIHByaXZhdGUgc3RhdGljIHZvaWQgY2hlY2tFbnVtQ29uc3RhbnQoU3RyaW5nIGV4cGVjdGVkTmFtZSwgUHNpRmllbGQgZmllbGQpIHsKKyAgICBhc3NlcnRUcnVlKGZpZWxkIGluc3RhbmNlb2YgUHNpRW51bUNvbnN0YW50KTsKKyAgICBhc3NlcnRFcXVhbHMoZXhwZWN0ZWROYW1lLCBmaWVsZC5nZXROYW1lKCkpOworICAgIGFzc2VydFRydWUoZmllbGQuaGFzTW9kaWZpZXJQcm9wZXJ0eShQc2lNb2RpZmllci5QVUJMSUMpKTsKKyAgICBhc3NlcnRUcnVlKGZpZWxkLmhhc01vZGlmaWVyUHJvcGVydHkoUHNpTW9kaWZpZXIuRklOQUwpKTsKKyAgICBhc3NlcnRUcnVlKGZpZWxkLmhhc01vZGlmaWVyUHJvcGVydHkoUHNpTW9kaWZpZXIuU1RBVElDKSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0RW51bVdpdGhDb25zdGFudHNBbmRTdGF0aWNGaWVsZHMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBzZXR1cExvYWRpbmdGaWx0ZXIoKTsKKyAgICBQc2lDbGFzcyBlbnVtQ2xhc3MgPSBmaW5kQ2xhc3MoImVudW1zLk91ckVudW1XaXRoQ29uc3RhbnRzQW5kU3RhdGljRmllbGRzIik7CisgICAgUHNpRmllbGRbXSBmaWVsZHMgPSBlbnVtQ2xhc3MuZ2V0RmllbGRzKCk7CisgICAgYXNzZXJ0VHJ1ZShmaWVsZHNbMF0gaW5zdGFuY2VvZiBQc2lFbnVtQ29uc3RhbnQpOworICAgIGFzc2VydFRydWUoZmllbGRzWzFdIGluc3RhbmNlb2YgUHNpRW51bUNvbnN0YW50KTsKKyAgICBhc3NlcnRUcnVlKGZpZWxkc1syXSBpbnN0YW5jZW9mIFBzaUVudW1Db25zdGFudCk7CisgICAgYXNzZXJ0RmFsc2UoZmllbGRzWzNdIGluc3RhbmNlb2YgUHNpRW51bUNvbnN0YW50KTsKKworICAgIHRlYXJEb3duTG9hZGluZ0ZpbHRlcigpOworCisgICAgYXNzZXJ0RXF1YWxzKCJwdWJsaWMgc3RhdGljIGZpbmFsIGludCBBMSA9IDE7IiwgZmllbGRzWzNdLmdldFRleHQoKSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0RW51bVdpdGhDb25zdGFudHNBbmRTdGF0aWNGaWVsZHMyKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgc2V0dXBMb2FkaW5nRmlsdGVyKCk7CisgICAgUHNpQ2xhc3MgZW51bUNsYXNzID0gZmluZENsYXNzKCJlbnVtcy5PdXJFbnVtV2l0aENvbnN0YW50c0FuZFN0YXRpY0ZpZWxkczIiKTsKKyAgICBQc2lGaWVsZFtdIGZpZWxkcyA9IGVudW1DbGFzcy5nZXRGaWVsZHMoKTsKKyAgICBhc3NlcnRUcnVlKGZpZWxkc1swXSBpbnN0YW5jZW9mIFBzaUVudW1Db25zdGFudCk7CisgICAgYXNzZXJ0VHJ1ZShmaWVsZHNbMV0gaW5zdGFuY2VvZiBQc2lFbnVtQ29uc3RhbnQpOworICAgIGFzc2VydFRydWUoZmllbGRzWzJdIGluc3RhbmNlb2YgUHNpRW51bUNvbnN0YW50KTsKKyAgICBhc3NlcnRGYWxzZShmaWVsZHNbM10gaW5zdGFuY2VvZiBQc2lFbnVtQ29uc3RhbnQpOworCisgICAgdGVhckRvd25Mb2FkaW5nRmlsdGVyKCk7CisKKyAgICBhc3NlcnRFcXVhbHMoInB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEExID0gMTA7IiwgZmllbGRzWzNdLmdldFRleHQoKSk7CisgICAgZW51bUNsYXNzLmFjY2VwdChuZXcgSmF2YVJlY3Vyc2l2ZUVsZW1lbnRXYWxraW5nVmlzaXRvcigpeworICAgICAgQE92ZXJyaWRlIHB1YmxpYyB2b2lkIHZpc2l0UmVmZXJlbmNlRXhwcmVzc2lvbihQc2lSZWZlcmVuY2VFeHByZXNzaW9uIGV4cHJlc3Npb24pIHsKKyAgICAgICAgdmlzaXRFeHByZXNzaW9uKGV4cHJlc3Npb24pOworICAgICAgfQorICAgIH0pOworICAgIGVudW1DbGFzcy5nZXRUZXh0KCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0QW5ub3RhdGlvblR5cGUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBzZXR1cExvYWRpbmdGaWx0ZXIoKTsKKyAgICBmaW5hbCBQc2lDbGFzcyBhbm5vdGF0aW9uVHlwZUNsYXNzID0gZmluZENsYXNzKCJhbm5vdGF0aW9ucy5Bbm5vdGF0aW9uVHlwZSIpOworICAgIGFzc2VydFRydWUoYW5ub3RhdGlvblR5cGVDbGFzcy5pc0Fubm90YXRpb25UeXBlKCkpOworICAgIHRlYXJEb3duTG9hZGluZ0ZpbHRlcigpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEFubm90YXRpb25JbmRleCgpIHRocm93cyBFeGNlcHRpb24geworICAgIGdldEphdmFGYWNhZGUoKS5zZXRBc3NlcnRPbkZpbGVMb2FkaW5nRmlsdGVyKG5ldyBWaXJ0dWFsRmlsZUZpbHRlcigpIHsKKyAgICAgIEBPdmVycmlkZQorICAgICAgcHVibGljIGJvb2xlYW4gYWNjZXB0KGZpbmFsIFZpcnR1YWxGaWxlIGZpbGUpIHsKKyAgICAgICAgcmV0dXJuICEicGFja2FnZS1pbmZvLmphdmEiLmVxdWFscyhmaWxlLmdldE5hbWUoKSk7CisgICAgICB9CisgICAgfSk7CisKKyAgICBmaW5hbCBQc2lDbGFzcyBhbm5vdGF0aW9uVHlwZUNsYXNzID0gZmluZENsYXNzKCJhbm5vdGF0aW9ucy5Bbm5vdGF0aW9uVHlwZSIpOworICAgIGFzc2VydFRydWUoYW5ub3RhdGlvblR5cGVDbGFzcy5pc0Fubm90YXRpb25UeXBlKCkpOworCisgICAgZmluYWwgQ29sbGVjdGlvbjxQc2lNZW1iZXI+IGFsbCA9IEFubm90YXRlZE1lbWJlcnNTZWFyY2guc2VhcmNoKGFubm90YXRpb25UeXBlQ2xhc3MsIEdsb2JhbFNlYXJjaFNjb3BlLm1vZHVsZVNjb3BlKG15TW9kdWxlKSkuZmluZEFsbCgpOworCisgICAgYXNzZXJ0RXF1YWxzKDIsIGFsbC5zaXplKCkpOworICAgIFNldDxTdHJpbmc+IGNvcnJlY3ROYW1lcyA9IG5ldyBIYXNoU2V0PFN0cmluZz4oQXJyYXlzLmFzTGlzdCgiQW5ub3RhdGVkQ2xhc3MiLCAiY29ycmVjdE1ldGhvZCIpKTsKKyAgICBmb3IgKFBzaU1lbWJlciBtZW1iZXIgOiBhbGwpIHsKKyAgICAgIGFzc2VydFRydWUoY29ycmVjdE5hbWVzLmNvbnRhaW5zKG1lbWJlci5nZXROYW1lKCkpKTsKKyAgICB9CisKKyAgICBmaW5hbCBDb2xsZWN0aW9uPFBzaVBhY2thZ2U+IHBhY2thZ2VzID0KKyAgICAgIEFubm90YXRlZFBhY2thZ2VzU2VhcmNoLnNlYXJjaChhbm5vdGF0aW9uVHlwZUNsYXNzLCBHbG9iYWxTZWFyY2hTY29wZS5tb2R1bGVTY29wZShteU1vZHVsZSkpLmZpbmRBbGwoKTsKKyAgICBhc3NlcnRFcXVhbHMoMSwgcGFja2FnZXMuc2l6ZSgpKTsKKyAgICBhc3NlcnRFcXVhbHMoImFubm90YXRlZCIsIHBhY2thZ2VzLml0ZXJhdG9yKCkubmV4dCgpLmdldFF1YWxpZmllZE5hbWUoKSk7CisKKyAgICB0ZWFyRG93bkxvYWRpbmdGaWx0ZXIoKTsKKyAgfQorCisgIHByaXZhdGUgdm9pZCBzZXR1cExvYWRpbmdGaWx0ZXIoKSB7CisgICAgZ2V0SmF2YUZhY2FkZSgpLnNldEFzc2VydE9uRmlsZUxvYWRpbmdGaWx0ZXIoVmlydHVhbEZpbGVGaWx0ZXIuQUxMKTsKKyAgfQorCisgIHByaXZhdGUgdm9pZCB0ZWFyRG93bkxvYWRpbmdGaWx0ZXIoKSB7CisgICAgZ2V0SmF2YUZhY2FkZSgpLnNldEFzc2VydE9uRmlsZUxvYWRpbmdGaWx0ZXIoVmlydHVhbEZpbGVGaWx0ZXIuTk9ORSk7CisgIH0KKworICBATm90TnVsbAorICBwcml2YXRlIFBzaUNsYXNzIGZpbmRDbGFzcyhmaW5hbCBTdHJpbmcgbmFtZSkgeworICAgIFBzaUNsYXNzIGFDbGFzcyA9IG15SmF2YUZhY2FkZS5maW5kQ2xhc3MobmFtZSwgR2xvYmFsU2VhcmNoU2NvcGUubW9kdWxlU2NvcGUobXlNb2R1bGUpKTsKKyAgICBhc3NlcnROb3ROdWxsKG5hbWUsIGFDbGFzcyk7CisgICAgcmV0dXJuIGFDbGFzczsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL3BzaS9TcmNSZXBvc2l0b3J5VXNlVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL3BzaS9TcmNSZXBvc2l0b3J5VXNlVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg0MDAxMTYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovcHNpL1NyY1JlcG9zaXRvcnlVc2VUZXN0LmphdmEKQEAgLTAsMCArMSw4MTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwMC0yMDEyIEpldEJyYWlucyBzLnIuby4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCitwYWNrYWdlIGNvbS5pbnRlbGxpai5wc2k7CisKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS5hcHBsaWNhdGlvbi5BcHBsaWNhdGlvbk1hbmFnZXI7CitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkuYXBwbGljYXRpb24uZXguUGF0aE1hbmFnZXJFeDsKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS5jb21wb25lbnRzLlNlcnZpY2VNYW5hZ2VyOworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLmRpYWdub3N0aWMuTG9nZ2VyOworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLmZpbGVFZGl0b3IuRmlsZURvY3VtZW50TWFuYWdlcjsKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS5wcm9qZWN0Um9vdHMuaW1wbC5KYXZhU2RrSW1wbDsKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS5wcm9qZWN0Um9vdHMuaW1wbC5Qcm9qZWN0Um9vdFV0aWw7CitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkucm9vdHMuKjsKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS51dGlsLktleTsKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS51dGlsLlRleHRSYW5nZTsKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS51dGlsLmlvLkZpbGVVdGlsOworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLnZmcy5WZnNVdGlsQ29yZTsKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS52ZnMuVmlydHVhbEZpbGU7CitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkudmZzLlZpcnR1YWxGaWxlRmlsdGVyOworaW1wb3J0IGNvbS5pbnRlbGxpai5wb20uamF2YS5MYW5ndWFnZUxldmVsOworaW1wb3J0IGNvbS5pbnRlbGxpai5wc2kuaW1wbC5zb3VyY2UuUHNpRmlsZUltcGw7CitpbXBvcnQgY29tLmludGVsbGlqLnBzaS5pbXBsLnNvdXJjZS50cmVlLkNvbXBvc2l0ZUVsZW1lbnQ7CitpbXBvcnQgY29tLmludGVsbGlqLnBzaS5zZWFyY2guR2xvYmFsU2VhcmNoU2NvcGU7CitpbXBvcnQgY29tLmludGVsbGlqLnBzaS5zZWFyY2guc2VhcmNoZXMuQ2xhc3NJbmhlcml0b3JzU2VhcmNoOworaW1wb3J0IGNvbS5pbnRlbGxpai5wc2kudGV4dC5CbG9ja1N1cHBvcnQ7CitpbXBvcnQgY29tLmludGVsbGlqLnBzaS51dGlsLlBzaVV0aWw7CitpbXBvcnQgY29tLmludGVsbGlqLnJlZmFjdG9yaW5nLnJlbmFtZS5SZW5hbWVQcm9jZXNzb3I7CitpbXBvcnQgY29tLmludGVsbGlqLnRlc3RGcmFtZXdvcmsuSWRlYVRlc3RVdGlsOworaW1wb3J0IGNvbS5pbnRlbGxpai50ZXN0RnJhbWV3b3JrLlBsYXRmb3JtVGVzdENhc2U7CitpbXBvcnQgY29tLmludGVsbGlqLnRlc3RGcmFtZXdvcmsuUHNpVGVzdENhc2U7CitpbXBvcnQgY29tLmludGVsbGlqLnRlc3RGcmFtZXdvcmsuUHNpVGVzdFV0aWw7CisKK2ltcG9ydCBqYXZhLmlvLkZpbGU7CitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKKworQFN1cHByZXNzV2FybmluZ3MoIkNvbnN0YW50Q29uZGl0aW9ucyIpCitAUGxhdGZvcm1UZXN0Q2FzZS5XcmFwSW5Db21tYW5kCitwdWJsaWMgY2xhc3MgU3JjUmVwb3NpdG9yeVVzZVRlc3QgZXh0ZW5kcyBQc2lUZXN0Q2FzZXsKKyAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgTG9nZ2VyIExPRyA9IExvZ2dlci5nZXRJbnN0YW5jZSgiI2NvbS5pbnRlbGxpai5wc2kuU3JjUmVwb3NpdG9yeVVzZVRlc3QiKTsKKyAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgS2V5PFN0cmluZz4gVEVTVF9LRVkgPSBLZXkuY3JlYXRlKCJURVNUIik7CisKKyAgQE92ZXJyaWRlCisgIHByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgc3VwZXIuc2V0VXAoKTsKKworICAgIExhbmd1YWdlTGV2ZWxQcm9qZWN0RXh0ZW5zaW9uLmdldEluc3RhbmNlKG15UHJvamVjdCkuc2V0TGFuZ3VhZ2VMZXZlbChMYW5ndWFnZUxldmVsLkpES18xXzUpOworICAgIFN0cmluZyByb290ID0gUGF0aE1hbmFnZXJFeC5nZXRUZXN0RGF0YVBhdGgoKSArICIvcHNpL3JlcG9zaXRvcnlVc2Uvc3JjIjsKKyAgICBQc2lUZXN0VXRpbC5yZW1vdmVBbGxSb290cyhteU1vZHVsZSwgSWRlYVRlc3RVdGlsLmdldE1vY2tKZGsxNygpKTsKKyAgICBQc2lUZXN0VXRpbC5jcmVhdGVUZXN0UHJvamVjdFN0cnVjdHVyZShteVByb2plY3QsIG15TW9kdWxlLCByb290LCBteUZpbGVzVG9EZWxldGUpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEdldENsYXNzZXMoKXsKKyAgICBzZXR1cExvYWRpbmdGaWx0ZXIoKTsKKworICAgIFBzaURpcmVjdG9yeSByb290ID0gUHJvamVjdFJvb3RVdGlsLmdldEFsbENvbnRlbnRSb290cyhteVByb2plY3QpIFswXTsKKyAgICBWaXJ0dWFsRmlsZSBjaGlsZCA9IHJvb3QuZ2V0VmlydHVhbEZpbGUoKS5maW5kQ2hpbGQoIk15Q2xhc3MxLmphdmEiKTsKKyAgICBhc3NlcnROb3ROdWxsKGNoaWxkKTsKKyAgICBQc2lKYXZhRmlsZSBmaWxlID0gKFBzaUphdmFGaWxlKW15UHNpTWFuYWdlci5maW5kRmlsZShjaGlsZCk7CisgICAgUHNpQ2xhc3NbXSBjbGFzc2VzID0gZmlsZS5nZXRDbGFzc2VzKCk7CisgICAgYXNzZXJ0RXF1YWxzKDIsIGNsYXNzZXMubGVuZ3RoKTsKKyAgICBhc3NlcnRFcXVhbHMoZmlsZSwgY2xhc3Nlc1swXS5nZXRQYXJlbnQoKSk7CisKKyAgICB0ZWFyZG93bkxvYWRpbmdGaWx0ZXIoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RHZXRDbGFzc05hbWUoKXsKKyAgICBzZXR1cExvYWRpbmdGaWx0ZXIoKTsKKworICAgIFBzaURpcmVjdG9yeSByb290ID0gUHJvamVjdFJvb3RVdGlsLmdldEFsbENvbnRlbnRSb290cyhteVByb2plY3QpIFswXTsKKyAgICBWaXJ0dWFsRmlsZSBjaGlsZCA9IHJvb3QuZ2V0VmlydHVhbEZpbGUoKS5maW5kQ2hpbGQoIk15Q2xhc3MxLmphdmEiKTsKKyAgICBhc3NlcnROb3ROdWxsKGNoaWxkKTsKKyAgICBQc2lKYXZhRmlsZSBmaWxlID0gKFBzaUphdmFGaWxlKW15UHNpTWFuYWdlci5maW5kRmlsZShjaGlsZCk7CisgICAgUHNpQ2xhc3NbXSBjbGFzc2VzID0gZmlsZS5nZXRDbGFzc2VzKCk7CisgICAgYXNzZXJ0RXF1YWxzKDIsIGNsYXNzZXMubGVuZ3RoKTsKKworICAgIGFzc2VydEVxdWFscygiTXlDbGFzczEiLCBjbGFzc2VzWzBdLmdldE5hbWUoKSk7CisgICAgYXNzZXJ0RXF1YWxzKCJDbGFzczIiLCBjbGFzc2VzWzFdLmdldE5hbWUoKSk7CisKKyAgICB0ZWFyZG93bkxvYWRpbmdGaWx0ZXIoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RDbGFzc1BhcmFtZXRlcigpIHsKKyAgICBzZXR1cExvYWRpbmdGaWx0ZXIoKTsKKyAgICBQc2lDbGFzcyBwc2lDbGFzcyA9IG15SmF2YUZhY2FkZS5maW5kQ2xhc3MoIkNsYXNzMiIsIEdsb2JhbFNlYXJjaFNjb3BlLmFsbFNjb3BlKG15UHJvamVjdCkpOworICAgIGFzc2VydE5vdE51bGwocHNpQ2xhc3MpOworCisgICAgUHNpVHlwZVBhcmFtZXRlckxpc3QgcGFyYW1ldGVyTGlzdCA9IHBzaUNsYXNzLmdldFR5cGVQYXJhbWV0ZXJMaXN0KCk7CisgICAgYXNzZXJ0Tm90TnVsbChwYXJhbWV0ZXJMaXN0KTsKKyAgICBQc2lUeXBlUGFyYW1ldGVyW10gcGFyYW1zID0gcGFyYW1ldGVyTGlzdC5nZXRUeXBlUGFyYW1ldGVycygpOworICAgIGFzc2VydEVxdWFscyhwYXJhbXMubGVuZ3RoLCAyKTsKKworICAgIGFzc2VydEVxdWFscyhwYXJhbXNbMF0uZ2V0TmFtZSgpLCAiQSIpOworICAgIGFzc2VydEVxdWFscyhwYXJhbXNbMV0uZ2V0TmFtZSgpLCAiQiIpOworCisgICAgYXNzZXJ0RXF1YWxzKCJqYXZhLmxhbmcuU3RyaW5nIiwgcGFyYW1zWzBdLmdldFN1cGVycygpWzBdLmdldFF1YWxpZmllZE5hbWUoKSk7CisgICAgYXNzZXJ0RXF1YWxzKENvbW1vbkNsYXNzTmFtZXMuSkFWQV9MQU5HX09CSkVDVCwgcGFyYW1zWzFdLmdldFN1cGVycygpWzBdLmdldFF1YWxpZmllZE5hbWUoKSk7CisKKyAgICB0ZWFyZG93bkxvYWRpbmdGaWx0ZXIoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RHZXRDbGFzc1FOYW1lKCl7CisgICAgc2V0dXBMb2FkaW5nRmlsdGVyKCk7CisKKyAgICBQc2lEaXJlY3Rvcnkgcm9vdCA9IFByb2plY3RSb290VXRpbC5nZXRBbGxDb250ZW50Um9vdHMobXlQcm9qZWN0KSBbMF07CisgICAgVmlydHVhbEZpbGUgY2hpbGQgPSByb290LmdldFZpcnR1YWxGaWxlKCkuZmluZENoaWxkKCJwYWNrIikuZmluZENoaWxkKCJNeUNsYXNzMi5qYXZhIik7CisgICAgYXNzZXJ0Tm90TnVsbChjaGlsZCk7CisgICAgUHNpSmF2YUZpbGUgZmlsZSA9IChQc2lKYXZhRmlsZSlteVBzaU1hbmFnZXIuZmluZEZpbGUoY2hpbGQpOworICAgIFBzaUNsYXNzW10gY2xhc3NlcyA9IGZpbGUuZ2V0Q2xhc3NlcygpOworICAgIGFzc2VydEVxdWFscygxLCBjbGFzc2VzLmxlbmd0aCk7CisKKyAgICBhc3NlcnRFcXVhbHMoInBhY2suTXlDbGFzczIiLCBjbGFzc2VzWzBdLmdldFF1YWxpZmllZE5hbWUoKSk7CisKKyAgICB0ZWFyZG93bkxvYWRpbmdGaWx0ZXIoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RHZXRGaWVsZHMoKXsKKyAgICBzZXR1cExvYWRpbmdGaWx0ZXIoKTsKKworICAgIFBzaURpcmVjdG9yeSByb290ID0gUHJvamVjdFJvb3RVdGlsLmdldEFsbENvbnRlbnRSb290cyhteVByb2plY3QpIFswXTsKKyAgICBWaXJ0dWFsRmlsZSBjaGlsZCA9IHJvb3QuZ2V0VmlydHVhbEZpbGUoKS5maW5kQ2hpbGQoInBhY2siKS5maW5kQ2hpbGQoIk15Q2xhc3MyLmphdmEiKTsKKyAgICBhc3NlcnROb3ROdWxsKGNoaWxkKTsKKyAgICBQc2lKYXZhRmlsZSBmaWxlID0gKFBzaUphdmFGaWxlKW15UHNpTWFuYWdlci5maW5kRmlsZShjaGlsZCk7CisgICAgUHNpQ2xhc3NbXSBjbGFzc2VzID0gZmlsZS5nZXRDbGFzc2VzKCk7CisgICAgYXNzZXJ0RXF1YWxzKDEsIGNsYXNzZXMubGVuZ3RoKTsKKworICAgIFBzaUNsYXNzIGFDbGFzcyA9IGNsYXNzZXNbMF07CisgICAgUHNpRmllbGRbXSBmaWVsZHMgPSBhQ2xhc3MuZ2V0RmllbGRzKCk7CisgICAgYXNzZXJ0RXF1YWxzKDMsIGZpZWxkcy5sZW5ndGgpOworICAgIGFzc2VydEVxdWFscyhhQ2xhc3MsIGZpZWxkc1swXS5nZXRQYXJlbnQoKSk7CisKKyAgICB0ZWFyZG93bkxvYWRpbmdGaWx0ZXIoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RHZXRNZXRob2RzKCl7CisgICAgc2V0dXBMb2FkaW5nRmlsdGVyKCk7CisKKyAgICBQc2lEaXJlY3Rvcnkgcm9vdCA9IFByb2plY3RSb290VXRpbC5nZXRBbGxDb250ZW50Um9vdHMobXlQcm9qZWN0KSBbMF07CisgICAgVmlydHVhbEZpbGUgY2hpbGQgPSByb290LmdldFZpcnR1YWxGaWxlKCkuZmluZENoaWxkKCJwYWNrIikuZmluZENoaWxkKCJNeUNsYXNzMi5qYXZhIik7CisgICAgYXNzZXJ0Tm90TnVsbChjaGlsZCk7CisgICAgUHNpSmF2YUZpbGUgZmlsZSA9IChQc2lKYXZhRmlsZSlteVBzaU1hbmFnZXIuZmluZEZpbGUoY2hpbGQpOworICAgIFBzaUNsYXNzW10gY2xhc3NlcyA9IGZpbGUuZ2V0Q2xhc3NlcygpOworICAgIGFzc2VydEVxdWFscygxLCBjbGFzc2VzLmxlbmd0aCk7CisKKyAgICBQc2lDbGFzcyBhQ2xhc3MgPSBjbGFzc2VzWzBdOworICAgIFBzaU1ldGhvZFtdIG1ldGhvZHMgPSBhQ2xhc3MuZ2V0TWV0aG9kcygpOworICAgIGFzc2VydEVxdWFscygzLCBtZXRob2RzLmxlbmd0aCk7CisgICAgYXNzZXJ0RXF1YWxzKGFDbGFzcywgbWV0aG9kc1swXS5nZXRQYXJlbnQoKSk7CisKKyAgICB0ZWFyZG93bkxvYWRpbmdGaWx0ZXIoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RHZXRJbm5lckNsYXNzZXMoKXsKKyAgICBzZXR1cExvYWRpbmdGaWx0ZXIoKTsKKworICAgIFBzaURpcmVjdG9yeSByb290ID0gUHJvamVjdFJvb3RVdGlsLmdldEFsbENvbnRlbnRSb290cyhteVByb2plY3QpIFswXTsKKyAgICBWaXJ0dWFsRmlsZSBjaGlsZCA9IHJvb3QuZ2V0VmlydHVhbEZpbGUoKS5maW5kQ2hpbGQoInBhY2siKS5maW5kQ2hpbGQoIk15Q2xhc3MyLmphdmEiKTsKKyAgICBhc3NlcnROb3ROdWxsKGNoaWxkKTsKKyAgICBQc2lKYXZhRmlsZSBmaWxlID0gKFBzaUphdmFGaWxlKW15UHNpTWFuYWdlci5maW5kRmlsZShjaGlsZCk7CisgICAgUHNpQ2xhc3NbXSBjbGFzc2VzID0gZmlsZS5nZXRDbGFzc2VzKCk7CisgICAgYXNzZXJ0RXF1YWxzKDEsIGNsYXNzZXMubGVuZ3RoKTsKKworICAgIFBzaUNsYXNzIGFDbGFzcyA9IGNsYXNzZXNbMF07CisgICAgUHNpQ2xhc3NbXSBpbm5lcnMgPSBhQ2xhc3MuZ2V0SW5uZXJDbGFzc2VzKCk7CisgICAgYXNzZXJ0RXF1YWxzKDEsIGlubmVycy5sZW5ndGgpOworICAgIGFzc2VydEVxdWFscyhhQ2xhc3MsIGlubmVyc1swXS5nZXRQYXJlbnQoKSk7CisKKyAgICB0ZWFyZG93bkxvYWRpbmdGaWx0ZXIoKTsKKyAgfQorICBwdWJsaWMgdm9pZCB0ZXN0UmVzb2x2ZVN1cGVyQ2xhc3MoKXsKKyAgICBzZXR1cExvYWRpbmdGaWx0ZXIoKTsKKworICAgIFBzaURpcmVjdG9yeSByb290ID0gUHJvamVjdFJvb3RVdGlsLmdldEFsbENvbnRlbnRSb290cyhteVByb2plY3QpIFswXTsKKyAgICBWaXJ0dWFsRmlsZSBjaGlsZCA9IHJvb3QuZ2V0VmlydHVhbEZpbGUoKS5maW5kQ2hpbGQoInBhY2siKS5maW5kQ2hpbGQoIk15Q2xhc3MyLmphdmEiKTsKKyAgICBhc3NlcnROb3ROdWxsKGNoaWxkKTsKKyAgICBQc2lKYXZhRmlsZSBmaWxlID0gKFBzaUphdmFGaWxlKW15UHNpTWFuYWdlci5maW5kRmlsZShjaGlsZCk7CisgICAgUHNpQ2xhc3NbXSBjbGFzc2VzID0gZmlsZS5nZXRDbGFzc2VzKCk7CisgICAgYXNzZXJ0RXF1YWxzKDEsIGNsYXNzZXMubGVuZ3RoKTsKKworICAgIFBzaUNsYXNzIGFDbGFzcyA9IGNsYXNzZXNbMF07CisgICAgUHNpQ2xhc3NbXSBzdXBlclR5cGVzID0gYUNsYXNzLmdldFN1cGVycygpOworICAgIExPRy5hc3NlcnRUcnVlKHN1cGVyVHlwZXMubGVuZ3RoID09IDIpOworICAgIExPRy5hc3NlcnRUcnVlKHN1cGVyVHlwZXNbMF0uZ2V0UXVhbGlmaWVkTmFtZSgpLmVxdWFscyhDb21tb25DbGFzc05hbWVzLkpBVkFfTEFOR19TVFJJTkcpKTsKKyAgICBMT0cuYXNzZXJ0VHJ1ZShzdXBlclR5cGVzWzFdLmdldFF1YWxpZmllZE5hbWUoKS5lcXVhbHMoQ29tbW9uQ2xhc3NOYW1lcy5KQVZBX0xBTkdfUlVOTkFCTEUpKTsKKworICAgIHRlYXJkb3duTG9hZGluZ0ZpbHRlcigpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEdldENvbnRhaW5pbmdGaWxlKCl7CisgICAgc2V0dXBMb2FkaW5nRmlsdGVyKCk7CisKKyAgICBQc2lEaXJlY3Rvcnkgcm9vdCA9IFByb2plY3RSb290VXRpbC5nZXRBbGxDb250ZW50Um9vdHMobXlQcm9qZWN0KSBbMF07CisgICAgVmlydHVhbEZpbGUgY2hpbGQgPSByb290LmdldFZpcnR1YWxGaWxlKCkuZmluZENoaWxkKCJwYWNrIikuZmluZENoaWxkKCJNeUNsYXNzMi5qYXZhIik7CisgICAgYXNzZXJ0Tm90TnVsbChjaGlsZCk7CisgICAgUHNpSmF2YUZpbGUgZmlsZSA9IChQc2lKYXZhRmlsZSlteVBzaU1hbmFnZXIuZmluZEZpbGUoY2hpbGQpOworICAgIFBzaUNsYXNzW10gY2xhc3NlcyA9IGZpbGUuZ2V0Q2xhc3NlcygpOworICAgIGFzc2VydEVxdWFscygxLCBjbGFzc2VzLmxlbmd0aCk7CisKKyAgICBhc3NlcnRFcXVhbHMoZmlsZSwgY2xhc3Nlc1swXS5nZXRDb250YWluaW5nRmlsZSgpKTsKKworICAgIHRlYXJkb3duTG9hZGluZ0ZpbHRlcigpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEZpbmRDbGFzcygpeworICAgIHNldHVwTG9hZGluZ0ZpbHRlcigpOworCisgICAgUHNpQ2xhc3MgYUNsYXNzID0gbXlKYXZhRmFjYWRlLmZpbmRDbGFzcygicGFjay5NeUNsYXNzMiIsIEdsb2JhbFNlYXJjaFNjb3BlLmFsbFNjb3BlKG15UHJvamVjdCkpOworICAgIGFzc2VydE5vdE51bGwoYUNsYXNzKTsKKworICAgIHRlYXJkb3duTG9hZGluZ0ZpbHRlcigpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEdldEZpZWxkTmFtZSgpeworICAgIHNldHVwTG9hZGluZ0ZpbHRlcigpOworCisgICAgUHNpQ2xhc3MgYUNsYXNzID0gbXlKYXZhRmFjYWRlLmZpbmRDbGFzcygicGFjay5NeUNsYXNzMiIsIEdsb2JhbFNlYXJjaFNjb3BlLmFsbFNjb3BlKG15UHJvamVjdCkpOworICAgIGFzc2VydEVxdWFscygiZmllbGQxIiwgYUNsYXNzLmdldEZpZWxkcygpWzBdLmdldE5hbWUoKSk7CisKKyAgICB0ZWFyZG93bkxvYWRpbmdGaWx0ZXIoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RHZXRNZXRob2ROYW1lKCl7CisgICAgc2V0dXBMb2FkaW5nRmlsdGVyKCk7CisKKyAgICBQc2lDbGFzcyBhQ2xhc3MgPSBteUphdmFGYWNhZGUuZmluZENsYXNzKCJwYWNrLk15Q2xhc3MyIiwgR2xvYmFsU2VhcmNoU2NvcGUuYWxsU2NvcGUobXlQcm9qZWN0KSk7CisgICAgYXNzZXJ0RXF1YWxzKCJtZXRob2QxIiwgYUNsYXNzLmdldE1ldGhvZHMoKVswXS5nZXROYW1lKCkpOworCisgICAgdGVhcmRvd25Mb2FkaW5nRmlsdGVyKCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0TW9kaWZpZXJMaXN0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgc2V0dXBMb2FkaW5nRmlsdGVyKCk7CisKKyAgICBQc2lNb2RpZmllckxpc3QgbW9kaWZpZXJMaXN0OworICAgIHsKKyAgICAgIFBzaUNsYXNzIGFDbGFzcyA9IG15SmF2YUZhY2FkZS5maW5kQ2xhc3MoInBhY2suTXlDbGFzczIiLCBHbG9iYWxTZWFyY2hTY29wZS5hbGxTY29wZShteVByb2plY3QpKTsKKworICAgICAgbW9kaWZpZXJMaXN0ID0gYUNsYXNzLmdldE1vZGlmaWVyTGlzdCgpOworICAgICAgYXNzZXJ0VHJ1ZShtb2RpZmllckxpc3QuaGFzTW9kaWZpZXJQcm9wZXJ0eShQc2lNb2RpZmllci5QVUJMSUMpKTsKKyAgICAgIGFzc2VydFRydWUoIW1vZGlmaWVyTGlzdC5oYXNNb2RpZmllclByb3BlcnR5KFBzaU1vZGlmaWVyLlNUQVRJQykpOworICAgICAgYXNzZXJ0RXF1YWxzKG1vZGlmaWVyTGlzdC5nZXRQYXJlbnQoKSwgYUNsYXNzKTsKKworICAgICAgUHNpRmllbGQgZmllbGQgPSBhQ2xhc3MuZ2V0RmllbGRzKClbMF07CisgICAgICBtb2RpZmllckxpc3QgPSBmaWVsZC5nZXRNb2RpZmllckxpc3QoKTsKKyAgICAgIGFzc2VydFRydWUobW9kaWZpZXJMaXN0Lmhhc01vZGlmaWVyUHJvcGVydHkoUHNpTW9kaWZpZXIuUEFDS0FHRV9MT0NBTCkpOworICAgICAgYXNzZXJ0RXF1YWxzKG1vZGlmaWVyTGlzdC5nZXRQYXJlbnQoKSwgZmllbGQpOworCisgICAgICBQc2lNZXRob2QgbWV0aG9kID0gYUNsYXNzLmdldE1ldGhvZHMoKVswXTsKKyAgICAgIG1vZGlmaWVyTGlzdCA9IG1ldGhvZC5nZXRNb2RpZmllckxpc3QoKTsKKyAgICAgIGFzc2VydFRydWUobW9kaWZpZXJMaXN0Lmhhc01vZGlmaWVyUHJvcGVydHkoUHNpTW9kaWZpZXIuUEFDS0FHRV9MT0NBTCkpOworICAgICAgYXNzZXJ0RXF1YWxzKG1vZGlmaWVyTGlzdC5nZXRQYXJlbnQoKSwgbWV0aG9kKTsKKworICAgICAgdGVhcmRvd25Mb2FkaW5nRmlsdGVyKCk7CisgICAgICBtZXRob2QgPSBudWxsOworICAgIH0KKworCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAyOyBpKyspIHsKKyAgICAgIFN5c3RlbS5nYygpOworICAgICAgVGhyZWFkLnNsZWVwKDIwMCk7CisgICAgfQorCisgICAgbW9kaWZpZXJMaXN0LmdldENoaWxkcmVuKCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0SXNJbnRlcmZhY2UoKXsKKyAgICBzZXR1cExvYWRpbmdGaWx0ZXIoKTsKKworICAgIFBzaUNsYXNzIGFDbGFzcyA9IG15SmF2YUZhY2FkZS5maW5kQ2xhc3MoInBhY2suTXlDbGFzczIiLCBHbG9iYWxTZWFyY2hTY29wZS5hbGxTY29wZShteVByb2plY3QpKTsKKyAgICBhc3NlcnRUcnVlKCFhQ2xhc3MuaXNJbnRlcmZhY2UoKSk7CisKKyAgICBQc2lDbGFzcyBhbkludGVyZmFjZSA9IG15SmF2YUZhY2FkZS5maW5kQ2xhc3MoInBhY2suTXlJbnRlcmZhY2UxIiwgR2xvYmFsU2VhcmNoU2NvcGUuYWxsU2NvcGUobXlQcm9qZWN0KSk7CisgICAgYXNzZXJ0VHJ1ZShhbkludGVyZmFjZS5pc0ludGVyZmFjZSgpKTsKKworICAgIHRlYXJkb3duTG9hZGluZ0ZpbHRlcigpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEZpbmRGaWVsZEJ5TmFtZSgpeworICAgIHNldHVwTG9hZGluZ0ZpbHRlcigpOworCisgICAgUHNpQ2xhc3MgYUNsYXNzID0gbXlKYXZhRmFjYWRlLmZpbmRDbGFzcygicGFjay5NeUNsYXNzMiIsIEdsb2JhbFNlYXJjaFNjb3BlLmFsbFNjb3BlKG15UHJvamVjdCkpOworICAgIFBzaUZpZWxkIGZpZWxkID0gYUNsYXNzLmZpbmRGaWVsZEJ5TmFtZSgiZmllbGQxIiwgZmFsc2UpOworICAgIGFzc2VydE5vdE51bGwoZmllbGQpOworCisgICAgdGVhcmRvd25Mb2FkaW5nRmlsdGVyKCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0SXNEZXByZWNhdGVkKCl7CisgICAgc2V0dXBMb2FkaW5nRmlsdGVyKCk7CisKKyAgICBQc2lDbGFzcyBhQ2xhc3MgPSBteUphdmFGYWNhZGUuZmluZENsYXNzKCJwYWNrLk15Q2xhc3MyIiwgR2xvYmFsU2VhcmNoU2NvcGUuYWxsU2NvcGUobXlQcm9qZWN0KSk7CisgICAgYXNzZXJ0VHJ1ZSghYUNsYXNzLmlzRGVwcmVjYXRlZCgpKTsKKworICAgIFBzaUZpZWxkIGZpZWxkID0gYUNsYXNzLmZpbmRGaWVsZEJ5TmFtZSgiZmllbGQxIiwgZmFsc2UpOworICAgIGFzc2VydFRydWUoZmllbGQuaXNEZXByZWNhdGVkKCkpOworCisgICAgdGVhcmRvd25Mb2FkaW5nRmlsdGVyKCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0UGFja2FnZU5hbWUoKXsKKyAgICBzZXR1cExvYWRpbmdGaWx0ZXIoKTsKKworICAgIFBzaUNsYXNzIGFDbGFzcyA9IG15SmF2YUZhY2FkZS5maW5kQ2xhc3MoInBhY2suTXlDbGFzczIiLCBHbG9iYWxTZWFyY2hTY29wZS5hbGxTY29wZShteVByb2plY3QpKTsKKyAgICBTdHJpbmcgcGFja2FnZU5hbWUgPSAoKFBzaUphdmFGaWxlKWFDbGFzcy5nZXRDb250YWluaW5nRmlsZSgpKS5nZXRQYWNrYWdlTmFtZSgpOworICAgIGFzc2VydEVxdWFscygicGFjayIsIHBhY2thZ2VOYW1lKTsKKworICAgIHRlYXJkb3duTG9hZGluZ0ZpbHRlcigpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEZpZWxkVHlwZSgpIHRocm93cyBFeGNlcHRpb24geworICAgIHNldHVwTG9hZGluZ0ZpbHRlcigpOworCisgICAgUHNpQ2xhc3MgYUNsYXNzID0gbXlKYXZhRmFjYWRlLmZpbmRDbGFzcygicGFjay5NeUNsYXNzMiIsIEdsb2JhbFNlYXJjaFNjb3BlLmFsbFNjb3BlKG15UHJvamVjdCkpOworCisgICAgUHNpRmllbGQgZmllbGQxID0gYUNsYXNzLmdldEZpZWxkcygpWzBdOworICAgIFBzaVR5cGUgdHlwZTEgPSBmaWVsZDEuZ2V0VHlwZSgpOworCisgICAgUHNpRmllbGQgZmllbGQyID0gYUNsYXNzLmdldEZpZWxkcygpWzFdOworICAgIFBzaVR5cGUgdHlwZTIgPSBmaWVsZDIuZ2V0VHlwZSgpOworCisgICAgUHNpRmllbGQgZmllbGQzID0gYUNsYXNzLmdldEZpZWxkcygpWzJdOworICAgIFBzaVR5cGUgdHlwZTMgPSBmaWVsZDMuZ2V0VHlwZSgpOworCisgICAgYXNzZXJ0RXF1YWxzKCJpbnQiLCB0eXBlMS5nZXRQcmVzZW50YWJsZVRleHQoKSk7CisgICAgYXNzZXJ0RXF1YWxzKCJPYmplY3RbXSIsIHR5cGUyLmdldFByZXNlbnRhYmxlVGV4dCgpKTsKKyAgICBhc3NlcnRFcXVhbHMoIk9iamVjdFtdIiwgdHlwZTMuZ2V0UHJlc2VudGFibGVUZXh0KCkpOworCisgICAgYXNzZXJ0VHJ1ZSh0eXBlMS5lcXVhbHNUb1RleHQoImludCIpKTsKKyAgICBhc3NlcnRUcnVlKHR5cGUyLmVxdWFsc1RvVGV4dCgiamF2YS5sYW5nLk9iamVjdFtdIikpOworICAgIGFzc2VydFRydWUodHlwZTMuZXF1YWxzVG9UZXh0KCJqYXZhLmxhbmcuT2JqZWN0W10iKSk7CisKKyAgICBhc3NlcnRUcnVlKCEodHlwZTEgaW5zdGFuY2VvZiBQc2lBcnJheVR5cGUpKTsKKyAgICBhc3NlcnRUcnVlKHR5cGUxIGluc3RhbmNlb2YgUHNpUHJpbWl0aXZlVHlwZSk7CisgICAgYXNzZXJ0VHJ1ZSghKHR5cGUzIGluc3RhbmNlb2YgUHNpUHJpbWl0aXZlVHlwZSkpOworICAgIGFzc2VydFRydWUodHlwZTMgaW5zdGFuY2VvZiBQc2lBcnJheVR5cGUpOworCisgICAgdGVhcmRvd25Mb2FkaW5nRmlsdGVyKCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0SGFzSW5pdGlhbGl6ZXIoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBzZXR1cExvYWRpbmdGaWx0ZXIoKTsKKworICAgIFBzaUNsYXNzIGFDbGFzcyA9IG15SmF2YUZhY2FkZS5maW5kQ2xhc3MoInBhY2suTXlDbGFzczIiLCBHbG9iYWxTZWFyY2hTY29wZS5hbGxTY29wZShteVByb2plY3QpKTsKKworICAgIGFzc2VydFRydWUoYUNsYXNzLmdldEZpZWxkcygpWzBdLmhhc0luaXRpYWxpemVyKCkpOworICAgIGFzc2VydEZhbHNlKGFDbGFzcy5nZXRGaWVsZHMoKVsxXS5oYXNJbml0aWFsaXplcigpKTsKKyAgICBhc3NlcnRGYWxzZShhQ2xhc3MuZ2V0RmllbGRzKClbMl0uaGFzSW5pdGlhbGl6ZXIoKSk7CisKKyAgICB0ZWFyZG93bkxvYWRpbmdGaWx0ZXIoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RNZXRob2RUeXBlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgc2V0dXBMb2FkaW5nRmlsdGVyKCk7CisKKyAgICBQc2lDbGFzcyBhQ2xhc3MgPSBteUphdmFGYWNhZGUuZmluZENsYXNzKCJwYWNrLk15Q2xhc3MyIiwgR2xvYmFsU2VhcmNoU2NvcGUuYWxsU2NvcGUobXlQcm9qZWN0KSk7CisKKyAgICBQc2lNZXRob2QgbWV0aG9kMSA9IGFDbGFzcy5nZXRNZXRob2RzKClbMF07CisgICAgUHNpVHlwZSB0eXBlMSA9IG1ldGhvZDEuZ2V0UmV0dXJuVHlwZSgpOworCisgICAgYXNzZXJ0VHJ1ZSh0eXBlMS5lcXVhbHNUb1RleHQoInZvaWQiKSk7CisgICAgYXNzZXJ0VHJ1ZSghKHR5cGUxIGluc3RhbmNlb2YgUHNpQXJyYXlUeXBlKSk7CisgICAgYXNzZXJ0VHJ1ZSh0eXBlMSBpbnN0YW5jZW9mIFBzaVByaW1pdGl2ZVR5cGUpOworCisgICAgUHNpTWV0aG9kIG1ldGhvZDMgPSBhQ2xhc3MuZ2V0TWV0aG9kcygpWzJdOworICAgIGFzc2VydE51bGwobWV0aG9kMy5nZXRSZXR1cm5UeXBlKCkpOworCisgICAgdGVhcmRvd25Mb2FkaW5nRmlsdGVyKCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0SXNDb25zdHJ1Y3RvcigpIHRocm93cyBFeGNlcHRpb24geworICAgIHNldHVwTG9hZGluZ0ZpbHRlcigpOworCisgICAgUHNpQ2xhc3MgYUNsYXNzID0gbXlKYXZhRmFjYWRlLmZpbmRDbGFzcygicGFjay5NeUNsYXNzMiIsIEdsb2JhbFNlYXJjaFNjb3BlLmFsbFNjb3BlKG15UHJvamVjdCkpOworICAgIFBzaU1ldGhvZCBtZXRob2QxID0gYUNsYXNzLmdldE1ldGhvZHMoKVswXTsKKyAgICBhc3NlcnRGYWxzZShtZXRob2QxLmlzQ29uc3RydWN0b3IoKSk7CisKKyAgICB0ZWFyZG93bkxvYWRpbmdGaWx0ZXIoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RDb21wb25lbnRUeXBlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgc2V0dXBMb2FkaW5nRmlsdGVyKCk7CisKKyAgICBQc2lDbGFzcyBhQ2xhc3MgPSBteUphdmFGYWNhZGUuZmluZENsYXNzKCJwYWNrLk15Q2xhc3MyIiwgR2xvYmFsU2VhcmNoU2NvcGUuYWxsU2NvcGUobXlQcm9qZWN0KSk7CisKKyAgICBQc2lGaWVsZCBmaWVsZCA9IGFDbGFzcy5nZXRGaWVsZHMoKVsyXTsKKyAgICBQc2lUeXBlIHR5cGUgPSBmaWVsZC5nZXRUeXBlKCk7CisgICAgTE9HLmFzc2VydFRydWUodHlwZSBpbnN0YW5jZW9mIFBzaUFycmF5VHlwZSk7CisgICAgUHNpVHlwZSBjb21wb25lbnRUeXBlID0gKChQc2lBcnJheVR5cGUpIHR5cGUpLmdldENvbXBvbmVudFR5cGUoKTsKKworICAgIGFzc2VydFRydWUoY29tcG9uZW50VHlwZS5lcXVhbHNUb1RleHQoQ29tbW9uQ2xhc3NOYW1lcy5KQVZBX0xBTkdfT0JKRUNUKSk7CisgICAgYXNzZXJ0RmFsc2UoY29tcG9uZW50VHlwZSBpbnN0YW5jZW9mIFBzaVByaW1pdGl2ZVR5cGUpOworICAgIGFzc2VydEZhbHNlKGNvbXBvbmVudFR5cGUgaW5zdGFuY2VvZiBQc2lBcnJheVR5cGUpOworCisgICAgdGVhcmRvd25Mb2FkaW5nRmlsdGVyKCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0VHlwZVJlZmVyZW5jZSgpIHRocm93cyBFeGNlcHRpb24geworICAgIHNldHVwTG9hZGluZ0ZpbHRlcigpOworCisgICAgUHNpQ2xhc3MgYUNsYXNzID0gbXlKYXZhRmFjYWRlLmZpbmRDbGFzcygicGFjay5NeUNsYXNzMiIsIEdsb2JhbFNlYXJjaFNjb3BlLmFsbFNjb3BlKG15UHJvamVjdCkpOworCisgICAgUHNpRmllbGQgZmllbGQxID0gYUNsYXNzLmdldEZpZWxkcygpWzBdOworICAgIFBzaVR5cGUgdHlwZTEgPSBmaWVsZDEuZ2V0VHlwZSgpOworICAgIGFzc2VydE51bGwoUHNpVXRpbC5yZXNvbHZlQ2xhc3NJblR5cGUodHlwZTEpKTsKKworICAgIFBzaUZpZWxkIGZpZWxkMiA9IGFDbGFzcy5nZXRGaWVsZHMoKVsxXTsKKyAgICBQc2lUeXBlIHR5cGUyID0gKChQc2lBcnJheVR5cGUpIGZpZWxkMi5nZXRUeXBlKCkpLmdldENvbXBvbmVudFR5cGUoKTsKKyAgICBhc3NlcnRFcXVhbHMoIk9iamVjdCIsIHR5cGUyLmdldFByZXNlbnRhYmxlVGV4dCgpKTsKKworICAgIFBzaUZpZWxkIGZpZWxkMyA9IGFDbGFzcy5nZXRGaWVsZHMoKVsyXTsKKyAgICBQc2lUeXBlIHR5cGUzID0gKChQc2lBcnJheVR5cGUpIGZpZWxkMy5nZXRUeXBlKCkpLmdldENvbXBvbmVudFR5cGUoKTsKKyAgICBhc3NlcnRUcnVlKHR5cGUzLmVxdWFsc1RvVGV4dChDb21tb25DbGFzc05hbWVzLkpBVkFfTEFOR19PQkpFQ1QpKTsKKworICAgIHRlYXJkb3duTG9hZGluZ0ZpbHRlcigpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEltcG9ydExpc3QoKXsKKyAgICBzZXR1cExvYWRpbmdGaWx0ZXIoKTsKKworICAgIFBzaURpcmVjdG9yeSByb290ID0gUHJvamVjdFJvb3RVdGlsLmdldEFsbENvbnRlbnRSb290cyhteVByb2plY3QpIFswXTsKKyAgICBWaXJ0dWFsRmlsZSBjaGlsZCA9IHJvb3QuZ2V0VmlydHVhbEZpbGUoKS5maW5kQ2hpbGQoIk15Q2xhc3MxLmphdmEiKTsKKyAgICBhc3NlcnROb3ROdWxsKGNoaWxkKTsKKyAgICBQc2lKYXZhRmlsZSBmaWxlID0gKFBzaUphdmFGaWxlKW15UHNpTWFuYWdlci5maW5kRmlsZShjaGlsZCk7CisgICAgUHNpSW1wb3J0TGlzdCBsaXN0ID0gZmlsZS5nZXRJbXBvcnRMaXN0KCk7CisgICAgYXNzZXJ0RXF1YWxzKGZpbGUsIGxpc3QuZ2V0UGFyZW50KCkpOworCisgICAgUHNpSW1wb3J0U3RhdGVtZW50W10gaW1wb3J0cyA9IGxpc3QuZ2V0SW1wb3J0U3RhdGVtZW50cygpOworICAgIGFzc2VydEVxdWFscygzLCBpbXBvcnRzLmxlbmd0aCk7CisgICAgYXNzZXJ0RmFsc2UoaW1wb3J0c1swXS5pc09uRGVtYW5kKCkpOworICAgIGFzc2VydFRydWUoaW1wb3J0c1sxXS5pc09uRGVtYW5kKCkpOworICAgIGltcG9ydHNbMl0uaXNPbkRlbWFuZCgpOworCisgICAgU3RyaW5nIHJlZjEgPSBpbXBvcnRzWzBdLmdldFF1YWxpZmllZE5hbWUoKTsKKyAgICBTdHJpbmcgcmVmMiA9IGltcG9ydHNbMV0uZ2V0UXVhbGlmaWVkTmFtZSgpOworICAgIFN0cmluZyByZWYzID0gaW1wb3J0c1syXS5nZXRRdWFsaWZpZWROYW1lKCk7CisKKyAgICBhc3NlcnRFcXVhbHMoImEuYiIsIHJlZjEpOworICAgIGFzc2VydEVxdWFscygiYyIsIHJlZjIpOworICAgIGFzc2VydE51bGwocmVmMyk7CisKKyAgICB0ZWFyZG93bkxvYWRpbmdGaWx0ZXIoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RSZXNvbHZlVHlwZVJlZmVyZW5jZSgpIHRocm93cyBFeGNlcHRpb24geworICAgIHNldHVwTG9hZGluZ0ZpbHRlcigpOworCisgICAgUHNpQ2xhc3MgYUNsYXNzID0gbXlKYXZhRmFjYWRlLmZpbmRDbGFzcygicGFjay5NeUNsYXNzMiIsIEdsb2JhbFNlYXJjaFNjb3BlLmFsbFNjb3BlKG15UHJvamVjdCkpOworCisgICAgUHNpVHlwZSB0eXBlMSA9IGFDbGFzcy5nZXRGaWVsZHMoKVsxXS5nZXRUeXBlKCk7CisgICAgUHNpRWxlbWVudCB0YXJnZXQxID0gUHNpVXRpbC5yZXNvbHZlQ2xhc3NJblR5cGUodHlwZTEpOworICAgIGFzc2VydE5vdE51bGwodGFyZ2V0MSk7CisgICAgUHNpQ2xhc3Mgb2JqZWN0Q2xhc3MgPSBteUphdmFGYWNhZGUuZmluZENsYXNzKENvbW1vbkNsYXNzTmFtZXMuSkFWQV9MQU5HX09CSkVDVCwgR2xvYmFsU2VhcmNoU2NvcGUuYWxsU2NvcGUobXlQcm9qZWN0KSk7CisgICAgYXNzZXJ0RXF1YWxzKG9iamVjdENsYXNzLCB0YXJnZXQxKTsKKworICAgIFBzaVR5cGUgdHlwZTIgPSBhQ2xhc3MuZ2V0RmllbGRzKClbMV0uZ2V0VHlwZSgpOworICAgIFBzaUVsZW1lbnQgdGFyZ2V0MiA9IFBzaVV0aWwucmVzb2x2ZUNsYXNzSW5UeXBlKHR5cGUyKTsKKyAgICBhc3NlcnROb3ROdWxsKHRhcmdldDIpOworICAgIGFzc2VydEVxdWFscyhvYmplY3RDbGFzcywgdGFyZ2V0Mik7CisKKyAgICB0ZWFyZG93bkxvYWRpbmdGaWx0ZXIoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RFeHRlbmRzTGlzdCgpIHRocm93cyBFeGNlcHRpb24geworICAgIHNldHVwTG9hZGluZ0ZpbHRlcigpOworCisgICAgUHNpQ2xhc3MgYUNsYXNzID0gbXlKYXZhRmFjYWRlLmZpbmRDbGFzcygicGFjay5NeUNsYXNzMiIsIEdsb2JhbFNlYXJjaFNjb3BlLmFsbFNjb3BlKG15UHJvamVjdCkpOworCisgICAgUHNpUmVmZXJlbmNlTGlzdCBsaXN0ID0gYUNsYXNzLmdldEV4dGVuZHNMaXN0KCk7CisKKyAgICBQc2lDbGFzc1R5cGVbXSByZWZzID0gbGlzdC5nZXRSZWZlcmVuY2VkVHlwZXMoKTsKKyAgICBhc3NlcnRFcXVhbHMoMSwgcmVmcy5sZW5ndGgpOworICAgIGFzc2VydEVxdWFscygiU3RyaW5nIiwgcmVmc1swXS5nZXRQcmVzZW50YWJsZVRleHQoKSk7CisKKyAgICB0ZWFyZG93bkxvYWRpbmdGaWx0ZXIoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RJbXBsZW1lbnRzTGlzdCgpIHRocm93cyBFeGNlcHRpb24geworICAgIHNldHVwTG9hZGluZ0ZpbHRlcigpOworCisgICAgUHNpQ2xhc3MgYUNsYXNzID0gbXlKYXZhRmFjYWRlLmZpbmRDbGFzcygicGFjay5NeUNsYXNzMiIsIEdsb2JhbFNlYXJjaFNjb3BlLmFsbFNjb3BlKG15UHJvamVjdCkpOworCisgICAgUHNpUmVmZXJlbmNlTGlzdCBsaXN0ID0gYUNsYXNzLmdldEltcGxlbWVudHNMaXN0KCk7CisKKyAgICBQc2lDbGFzc1R5cGVbXSByZWZzID0gbGlzdC5nZXRSZWZlcmVuY2VkVHlwZXMoKTsKKyAgICBhc3NlcnRFcXVhbHMoMSwgcmVmcy5sZW5ndGgpOworICAgIGFzc2VydEVxdWFscygiUnVubmFibGUiLCByZWZzWzBdLmdldFByZXNlbnRhYmxlVGV4dCgpKTsKKworICAgIHRlYXJkb3duTG9hZGluZ0ZpbHRlcigpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFRocm93c0xpc3QoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBzZXR1cExvYWRpbmdGaWx0ZXIoKTsKKworICAgIFBzaUNsYXNzIGFDbGFzcyA9IG15SmF2YUZhY2FkZS5maW5kQ2xhc3MoInBhY2suTXlDbGFzczIiLCBHbG9iYWxTZWFyY2hTY29wZS5hbGxTY29wZShteVByb2plY3QpKTsKKworICAgIFBzaVJlZmVyZW5jZUxpc3QgbGlzdCA9IGFDbGFzcy5nZXRNZXRob2RzKClbMF0uZ2V0VGhyb3dzTGlzdCgpOworCisgICAgUHNpQ2xhc3NUeXBlW10gcmVmcyA9IGxpc3QuZ2V0UmVmZXJlbmNlZFR5cGVzKCk7CisgICAgYXNzZXJ0RXF1YWxzKDIsIHJlZnMubGVuZ3RoKTsKKyAgICBhc3NlcnRFcXVhbHMoIkV4Y2VwdGlvbiIsIHJlZnNbMF0uZ2V0UHJlc2VudGFibGVUZXh0KCkpOworICAgIGFzc2VydEVxdWFscygiamF2YS5pby5JT0V4Y2VwdGlvbiIsIHJlZnNbMV0uZ2V0Q2Fub25pY2FsVGV4dCgpKTsKKworICAgIHRlYXJkb3duTG9hZGluZ0ZpbHRlcigpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFBhcmFtZXRlcnMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBzZXR1cExvYWRpbmdGaWx0ZXIoKTsKKworICAgIFBzaUNsYXNzIGFDbGFzcyA9IG15SmF2YUZhY2FkZS5maW5kQ2xhc3MoInBhY2suTXlDbGFzczIiLCBHbG9iYWxTZWFyY2hTY29wZS5hbGxTY29wZShteVByb2plY3QpKTsKKyAgICBhc3NlcnROb3ROdWxsKGFDbGFzcyk7CisgICAgUHNpTWV0aG9kW10gbWV0aG9kcyA9IGFDbGFzcy5nZXRNZXRob2RzKCk7CisgICAgUHNpUGFyYW1ldGVyTGlzdCBsaXN0ID0gbWV0aG9kc1swXS5nZXRQYXJhbWV0ZXJMaXN0KCk7CisKKyAgICBQc2lQYXJhbWV0ZXJbXSBwYXJtcyA9IGxpc3QuZ2V0UGFyYW1ldGVycygpOworICAgIGFzc2VydEVxdWFscyg1LCBwYXJtcy5sZW5ndGgpOworCisgICAgYXNzZXJ0RXF1YWxzKCJwMSIsIHBhcm1zWzBdLmdldE5hbWUoKSk7CisgICAgYXNzZXJ0RXF1YWxzKCJwMiIsIHBhcm1zWzFdLmdldE5hbWUoKSk7CisgICAgYXNzZXJ0RXF1YWxzKCJwMyIsIHBhcm1zWzJdLmdldE5hbWUoKSk7CisgICAgYXNzZXJ0RXF1YWxzKCJwNCIsIHBhcm1zWzNdLmdldE5hbWUoKSk7CisgICAgYXNzZXJ0RXF1YWxzKCJwNSIsIHBhcm1zWzRdLmdldE5hbWUoKSk7CisKKyAgICBQc2lUeXBlIHR5cGUxID0gcGFybXNbMF0uZ2V0VHlwZSgpOworICAgIGFzc2VydEVxdWFscygiaW50W10iLCB0eXBlMS5nZXRQcmVzZW50YWJsZVRleHQoKSk7CisgICAgYXNzZXJ0RmFsc2UodHlwZTEgaW5zdGFuY2VvZiBQc2lQcmltaXRpdmVUeXBlKTsKKyAgICBhc3NlcnRUcnVlKHR5cGUxIGluc3RhbmNlb2YgUHNpQXJyYXlUeXBlKTsKKyAgICBhc3NlcnROdWxsKFBzaVV0aWwucmVzb2x2ZUNsYXNzSW5UeXBlKHR5cGUxKSk7CisKKyAgICBQc2lUeXBlIHR5cGUyID0gcGFybXNbMV0uZ2V0VHlwZSgpOworICAgIGFzc2VydEVxdWFscygiT2JqZWN0IiwgdHlwZTIuZ2V0UHJlc2VudGFibGVUZXh0KCkpOworICAgIGFzc2VydEZhbHNlKHR5cGUyIGluc3RhbmNlb2YgUHNpQXJyYXlUeXBlKTsKKyAgICBhc3NlcnRGYWxzZSh0eXBlMiBpbnN0YW5jZW9mIFBzaVByaW1pdGl2ZVR5cGUpOworICAgIFBzaUNsYXNzIHRhcmdldDIgPSBQc2lVdGlsLnJlc29sdmVDbGFzc0luVHlwZSh0eXBlMik7CisgICAgYXNzZXJ0Tm90TnVsbCh0YXJnZXQyKTsKKyAgICBQc2lDbGFzcyBvYmplY3RDbGFzcyA9IG15SmF2YUZhY2FkZS5maW5kQ2xhc3MoQ29tbW9uQ2xhc3NOYW1lcy5KQVZBX0xBTkdfT0JKRUNULCBHbG9iYWxTZWFyY2hTY29wZS5hbGxTY29wZShteVByb2plY3QpKTsKKyAgICBhc3NlcnRFcXVhbHMob2JqZWN0Q2xhc3MsIHRhcmdldDIpOworCisgICAgY2hlY2tQYWNrQUFBKHBhcm1zWzJdLmdldFR5cGUoKSk7CisgICAgY2hlY2tQYWNrQUFBKHBhcm1zWzNdLmdldFR5cGUoKSk7CisgICAgY2hlY2tQYWNrQUFBKHBhcm1zWzRdLmdldFR5cGUoKSk7CisKKyAgICB0ZWFyZG93bkxvYWRpbmdGaWx0ZXIoKTsKKworICAgIHBhcm1zWzBdLmdldE1vZGlmaWVyTGlzdCgpOworICB9CisKKyAgcHJpdmF0ZSBzdGF0aWMgdm9pZCBjaGVja1BhY2tBQUEoUHNpVHlwZSB0eXBlKSB7CisgICAgYXNzZXJ0RXF1YWxzKCJBQUEiLCB0eXBlLmdldFByZXNlbnRhYmxlVGV4dCgpKTsKKyAgICBhc3NlcnRGYWxzZSh0eXBlIGluc3RhbmNlb2YgUHNpQXJyYXlUeXBlKTsKKyAgICBhc3NlcnRGYWxzZSh0eXBlIGluc3RhbmNlb2YgUHNpUHJpbWl0aXZlVHlwZSk7CisgICAgUHNpQ2xhc3MgdGFyZ2V0MyA9IFBzaVV0aWwucmVzb2x2ZUNsYXNzSW5UeXBlKHR5cGUpOworICAgIGFzc2VydE51bGwodGFyZ2V0Myk7CisgICAgYXNzZXJ0RXF1YWxzKCJwYWNrLkFBQSIsIHR5cGUuZ2V0Q2Fub25pY2FsVGV4dCgpKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RBbm9ueW1vdXNDbGFzcygpIHRocm93cyBFeGNlcHRpb24geworICAgIHNldHVwTG9hZGluZ0ZpbHRlcigpOworCisgICAgUHNpQ2xhc3MgY2xvbmVhYmxlQ2xhc3MgPSBteUphdmFGYWNhZGUuZmluZENsYXNzKCJqYXZhLmxhbmcuQ2xvbmVhYmxlIiwgR2xvYmFsU2VhcmNoU2NvcGUuYWxsU2NvcGUobXlQcm9qZWN0KSk7CisgICAgUHNpQ2xhc3NbXSBpbmhlcml0b3JzID0gQ2xhc3NJbmhlcml0b3JzU2VhcmNoLnNlYXJjaChjbG9uZWFibGVDbGFzcywgR2xvYmFsU2VhcmNoU2NvcGUucHJvamVjdFNjb3BlKG15UHJvamVjdCksIHRydWUpLnRvQXJyYXkoUHNpQ2xhc3MuRU1QVFlfQVJSQVkpOworICAgIGFzc2VydEVxdWFscygyLCBpbmhlcml0b3JzLmxlbmd0aCk7CisgICAgYXNzZXJ0VHJ1ZShpbmhlcml0b3JzWzBdIGluc3RhbmNlb2YgUHNpQW5vbnltb3VzQ2xhc3MgfHwgaW5oZXJpdG9yc1sxXSBpbnN0YW5jZW9mIFBzaUFub255bW91c0NsYXNzKTsKKyAgICBQc2lBbm9ueW1vdXNDbGFzcyBhbm9uQ2xhc3MgPSAoUHNpQW5vbnltb3VzQ2xhc3MpKGluaGVyaXRvcnNbMF0gaW5zdGFuY2VvZiBQc2lBbm9ueW1vdXNDbGFzcyA/IGluaGVyaXRvcnNbMF0gOiBpbmhlcml0b3JzWzFdKTsKKworICAgIFBzaUNsYXNzVHlwZSBiYXNlQ2xhc3NSZWYgPSBhbm9uQ2xhc3MuZ2V0QmFzZUNsYXNzVHlwZSgpOworICAgIGFzc2VydEVxdWFscygiQ2xvbmVhYmxlIiwgYmFzZUNsYXNzUmVmLmdldFByZXNlbnRhYmxlVGV4dCgpKTsKKyAgICBhc3NlcnRFcXVhbHMoY2xvbmVhYmxlQ2xhc3MsIGJhc2VDbGFzc1JlZi5yZXNvbHZlKCkpOworICAgIGFzc2VydEVxdWFscygiamF2YS5sYW5nLkNsb25lYWJsZSIsIGJhc2VDbGFzc1JlZi5nZXRDYW5vbmljYWxUZXh0KCkpOworCisgICAgdGVhcmRvd25Mb2FkaW5nRmlsdGVyKCk7CisKKyAgICBhc3NlcnRUcnVlKGFub25DbGFzcy5nZXRQYXJlbnQoKSBpbnN0YW5jZW9mIFBzaU5ld0V4cHJlc3Npb24pOworICB9CisKKyAgcHJpdmF0ZSB2b2lkIHRlYXJkb3duTG9hZGluZ0ZpbHRlcigpIHsKKyAgICBnZXRKYXZhRmFjYWRlKCkuc2V0QXNzZXJ0T25GaWxlTG9hZGluZ0ZpbHRlcihWaXJ0dWFsRmlsZUZpbHRlci5OT05FKTsKKyAgfQorCisgIHByaXZhdGUgdm9pZCBzZXR1cExvYWRpbmdGaWx0ZXIoKSB7CisgICAgZ2V0SmF2YUZhY2FkZSgpLnNldEFzc2VydE9uRmlsZUxvYWRpbmdGaWx0ZXIoVmlydHVhbEZpbGVGaWx0ZXIuQUxMKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RBbm9ueW1vdXNDbGFzczIoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBzZXR1cExvYWRpbmdGaWx0ZXIoKTsKKworICAgIFBzaUNsYXNzIHRocm93YWJsZSA9IG15SmF2YUZhY2FkZS5maW5kQ2xhc3MoImphdmEubGFuZy5UaHJvd2FibGUiLCBHbG9iYWxTZWFyY2hTY29wZS5hbGxTY29wZShteVByb2plY3QpKTsKKyAgICBQc2lDbGFzc1tdIGluaGVyaXRvcnMgPSBDbGFzc0luaGVyaXRvcnNTZWFyY2guc2VhcmNoKHRocm93YWJsZSwgR2xvYmFsU2VhcmNoU2NvcGUucHJvamVjdFNjb3BlKG15UHJvamVjdCksIHRydWUpLnRvQXJyYXkoUHNpQ2xhc3MuRU1QVFlfQVJSQVkpOworICAgIGFzc2VydEVxdWFscygxLCBpbmhlcml0b3JzLmxlbmd0aCk7CisgICAgYXNzZXJ0VHJ1ZShpbmhlcml0b3JzWzBdIGluc3RhbmNlb2YgUHNpQW5vbnltb3VzQ2xhc3MpOworICAgIFBzaUFub255bW91c0NsYXNzIGFub25DbGFzcyA9IChQc2lBbm9ueW1vdXNDbGFzcylpbmhlcml0b3JzWzBdOworCisgICAgUHNpQ2xhc3NUeXBlIGJhc2VDbGFzc1JlZiA9IGFub25DbGFzcy5nZXRCYXNlQ2xhc3NUeXBlKCk7CisgICAgYXNzZXJ0RXF1YWxzKCJUaHJvd2FibGUiLCBiYXNlQ2xhc3NSZWYuZ2V0UHJlc2VudGFibGVUZXh0KCkpOworICAgIGFzc2VydEVxdWFscyh0aHJvd2FibGUsIGJhc2VDbGFzc1JlZi5yZXNvbHZlKCkpOworICAgIGFzc2VydEVxdWFscygiamF2YS5sYW5nLlRocm93YWJsZSIsIGJhc2VDbGFzc1JlZi5nZXRDYW5vbmljYWxUZXh0KCkpOworCisgICAgdGVhcmRvd25Mb2FkaW5nRmlsdGVyKCk7CisKKyAgICBhc3NlcnRUcnVlKGFub25DbGFzcy5nZXRQYXJlbnQoKSBpbnN0YW5jZW9mIFBzaU5ld0V4cHJlc3Npb24pOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdExvY2FsQ2xhc3MoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBzZXR1cExvYWRpbmdGaWx0ZXIoKTsKKworICAgIFBzaUNsYXNzIGNsb25lYWJsZUNsYXNzID0gbXlKYXZhRmFjYWRlLmZpbmRDbGFzcygiamF2YS5sYW5nLkNsb25lYWJsZSIsIEdsb2JhbFNlYXJjaFNjb3BlLmFsbFNjb3BlKG15UHJvamVjdCkpOworICAgIFBzaUNsYXNzW10gaW5oZXJpdG9ycyA9IENsYXNzSW5oZXJpdG9yc1NlYXJjaC5zZWFyY2goY2xvbmVhYmxlQ2xhc3MsIEdsb2JhbFNlYXJjaFNjb3BlLnByb2plY3RTY29wZShteVByb2plY3QpLCB0cnVlKS50b0FycmF5KFBzaUNsYXNzLkVNUFRZX0FSUkFZKTsKKyAgICBhc3NlcnRFcXVhbHMoMiwgaW5oZXJpdG9ycy5sZW5ndGgpOworICAgIGFzc2VydFRydWUoaW5oZXJpdG9yc1swXSBpbnN0YW5jZW9mIFBzaUFub255bW91c0NsYXNzIHx8IGluaGVyaXRvcnNbMV0gaW5zdGFuY2VvZiBQc2lBbm9ueW1vdXNDbGFzcyk7CisgICAgUHNpQ2xhc3MgbG9jYWxDbGFzcyA9IGluaGVyaXRvcnNbMF0gaW5zdGFuY2VvZiBQc2lBbm9ueW1vdXNDbGFzcyA/IGluaGVyaXRvcnNbMV0gOiBpbmhlcml0b3JzWzBdOworCisgICAgdGVhcmRvd25Mb2FkaW5nRmlsdGVyKCk7CisKKyAgICBhc3NlcnRUcnVlKGxvY2FsQ2xhc3MuZ2V0UGFyZW50KCkgaW5zdGFuY2VvZiBQc2lEZWNsYXJhdGlvblN0YXRlbWVudCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0Q2xhc3NOYW1lTW9kaWZpY2F0aW9uKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgUHNpQ2xhc3MgYUNsYXNzID0gbXlKYXZhRmFjYWRlLmZpbmRDbGFzcygicGFjay5NeUNsYXNzMiIsIEdsb2JhbFNlYXJjaFNjb3BlLmFsbFNjb3BlKG15UHJvamVjdCkpOworICAgIGFzc2VydE5vdE51bGwoYUNsYXNzKTsKKworICAgIGFDbGFzcy5nZXROYW1lSWRlbnRpZmllcigpLnJlcGxhY2UobXlKYXZhRmFjYWRlLmdldEVsZW1lbnRGYWN0b3J5KCkuY3JlYXRlSWRlbnRpZmllcigiTmV3TmFtZSIpKTsKKyAgICBhc3NlcnRFcXVhbHMoInBhY2suTmV3TmFtZSIsIGFDbGFzcy5nZXRRdWFsaWZpZWROYW1lKCkpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdE1vZGlmaWNhdGlvbjEoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBQc2lDbGFzcyBhQ2xhc3MgPSBteUphdmFGYWNhZGUuZmluZENsYXNzKCJwYWNrLk15Q2xhc3MyIiwgR2xvYmFsU2VhcmNoU2NvcGUuYWxsU2NvcGUobXlQcm9qZWN0KSk7CisgICAgYXNzZXJ0Tm90TnVsbChhQ2xhc3MpOworCisgICAgUHNpRmllbGQgZmllbGQgPSBhQ2xhc3MuZ2V0RmllbGRzKClbMF07CisgICAgYUNsYXNzLmdldE5hbWVJZGVudGlmaWVyKCkucmVwbGFjZShteUphdmFGYWNhZGUuZ2V0RWxlbWVudEZhY3RvcnkoKS5jcmVhdGVJZGVudGlmaWVyKCJOZXdOYW1lIikpOworICAgIGFzc2VydFRydWUoZmllbGQuaXNWYWxpZCgpKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RNb2RpZmljYXRpb24yKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgUHNpQ2xhc3MgYUNsYXNzID0gbXlKYXZhRmFjYWRlLmZpbmRDbGFzcygicGFjay5NeUNsYXNzMiIsIEdsb2JhbFNlYXJjaFNjb3BlLmFsbFNjb3BlKG15UHJvamVjdCkpOworICAgIFBzaVV0aWwuc2V0TW9kaWZpZXJQcm9wZXJ0eShhQ2xhc3MsIFBzaU1vZGlmaWVyLkZJTkFMLCB0cnVlKTsKKworICAgIFBzaUNsYXNzIGFDbGFzczIgPSBteUphdmFGYWNhZGUuZmluZENsYXNzKCJwYWNrLk15Q2xhc3MyIiwgR2xvYmFsU2VhcmNoU2NvcGUuYWxsU2NvcGUobXlQcm9qZWN0KSk7CisgICAgYXNzZXJ0RXF1YWxzKGFDbGFzcywgYUNsYXNzMik7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0TW9kaWZpY2F0aW9uMygpIHRocm93cyBFeGNlcHRpb24geworICAgIFBzaUNsYXNzIGFDbGFzcyA9IG15SmF2YUZhY2FkZS5maW5kQ2xhc3MoInBhY2suTXlJbnRlcmZhY2UxIiwgR2xvYmFsU2VhcmNoU2NvcGUuYWxsU2NvcGUobXlQcm9qZWN0KSk7CisgICAgVGV4dFJhbmdlIGNsYXNzUmFuZ2UgPSBhQ2xhc3MuZ2V0VGV4dFJhbmdlKCk7CisgICAgU3RyaW5nIHRleHQgPSBhQ2xhc3MuZ2V0VGV4dCgpOworCisgICAgQmxvY2tTdXBwb3J0IGJsb2NrU3VwcG9ydCA9IFNlcnZpY2VNYW5hZ2VyLmdldFNlcnZpY2UobXlQcm9qZWN0LCBCbG9ja1N1cHBvcnQuY2xhc3MpOworICAgIGZpbmFsIFBzaUZpbGUgcHNpRmlsZSA9IGFDbGFzcy5nZXRDb250YWluaW5nRmlsZSgpOworICAgIGJsb2NrU3VwcG9ydC5yZXBhcnNlUmFuZ2UocHNpRmlsZSwgY2xhc3NSYW5nZS5nZXRTdGFydE9mZnNldCgpLCBjbGFzc1JhbmdlLmdldEVuZE9mZnNldCgpLCAiIik7CisgICAgTE9HLmFzc2VydFRydWUoIWFDbGFzcy5pc1ZhbGlkKCkpOworICAgIGJsb2NrU3VwcG9ydC5yZXBhcnNlUmFuZ2UocHNpRmlsZSwgY2xhc3NSYW5nZS5nZXRTdGFydE9mZnNldCgpLCBjbGFzc1JhbmdlLmdldFN0YXJ0T2Zmc2V0KCksIHRleHQpOworCisgICAgYUNsYXNzID0gbXlKYXZhRmFjYWRlLmZpbmRDbGFzcygicGFjay5NeUludGVyZmFjZTEiLCBHbG9iYWxTZWFyY2hTY29wZS5hbGxTY29wZShteVByb2plY3QpKTsKKyAgICBQc2lFbGVtZW50W10gY2hpbGRyZW4gPSBhQ2xhc3MuZ2V0Q2hpbGRyZW4oKTsKKyAgICBmb3IgKFBzaUVsZW1lbnQgY2hpbGQgOiBjaGlsZHJlbikgeworICAgICAgaWYgKGNoaWxkIGluc3RhbmNlb2YgUHNpTW9kaWZpZXJMaXN0KSB7CisgICAgICAgIFBzaUVsZW1lbnQgcGFyZW50ID0gY2hpbGQuZ2V0UGFyZW50KCk7CisgICAgICAgIGFzc2VydEVxdWFscyhhQ2xhc3MsIHBhcmVudCk7CisgICAgICAgIFBzaU1vZGlmaWVyTGlzdCBtb2RpZmllckxpc3QgPSBhQ2xhc3MuZ2V0TW9kaWZpZXJMaXN0KCk7CisgICAgICAgIGFzc2VydEVxdWFscyhtb2RpZmllckxpc3QsIGNoaWxkKTsKKyAgICAgIH0KKyAgICB9CisKKyAgICBQc2lKYXZhRmlsZSBmaWxlID0gKFBzaUphdmFGaWxlKWFDbGFzcy5nZXRDb250YWluaW5nRmlsZSgpOworICAgIFBzaUltcG9ydExpc3QgaW1wb3J0TGlzdCA9IGZpbGUuZ2V0SW1wb3J0TGlzdCgpOworICAgIGNoaWxkcmVuID0gaW1wb3J0TGlzdC5nZXRDaGlsZHJlbigpOworICAgIGludCBpbmRleCA9IDA7CisgICAgZm9yIChQc2lFbGVtZW50IGNoaWxkIDogY2hpbGRyZW4pIHsKKyAgICAgIGlmIChjaGlsZCBpbnN0YW5jZW9mIFBzaUltcG9ydFN0YXRlbWVudCkgeworICAgICAgICBQc2lFbGVtZW50IHBhcmVudCA9IGNoaWxkLmdldFBhcmVudCgpOworICAgICAgICBhc3NlcnRFcXVhbHMoaW1wb3J0TGlzdCwgcGFyZW50KTsKKyAgICAgICAgUHNpSW1wb3J0U3RhdGVtZW50IHN0YXRlbWVudCA9IGltcG9ydExpc3QuZ2V0SW1wb3J0U3RhdGVtZW50cygpW2luZGV4KytdOworICAgICAgICBhc3NlcnRFcXVhbHMoc3RhdGVtZW50LCBjaGlsZCk7CisgICAgICB9CisgICAgfQorICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFJlbmFtZVBhY2thZ2UoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICByZW5hbWVQYWNrYWdlKCJwYWNrIiwgInJlbmFtZWRQYWNrIik7CisKKyAgICBQc2lDbGFzcyBwc2lDbGFzcyA9IG15SmF2YUZhY2FkZS5maW5kQ2xhc3MoInJlbmFtZWRQYWNrLk15SW50ZXJmYWNlMSIsIEdsb2JhbFNlYXJjaFNjb3BlLmFsbFNjb3BlKG15UHJvamVjdCkpOworICAgIGFzc2VydE5vdE51bGwocHNpQ2xhc3MpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFJlcGxhY2VSb290V2l0aFN1YlJvb3QxKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZmluYWwgUHNpQ2xhc3MgYUNsYXNzID0gbXlKYXZhRmFjYWRlLmZpbmRDbGFzcygicGFjay5NeUludGVyZmFjZTEiLCBHbG9iYWxTZWFyY2hTY29wZS5hbGxTY29wZShteVByb2plY3QpKTsKKyAgICBmaW5hbCBQc2lGaWxlIHBzaUZpbGUgPSBhQ2xhc3MuZ2V0Q29udGFpbmluZ0ZpbGUoKTsKKyAgICAoKFBzaUphdmFGaWxlKSBwc2lGaWxlKS5nZXRDbGFzc2VzKCk7CisgICAgcHNpRmlsZS5nZXRUZXh0KCk7CisgICAgYXNzZXJ0Tm90TnVsbChhQ2xhc3MpOworCisgICAgZmluYWwgVmlydHVhbEZpbGUgbmV3U291cmNlUm9vdCA9IHBzaUZpbGUuZ2V0VmlydHVhbEZpbGUoKS5nZXRQYXJlbnQoKTsKKyAgICByZXBsYWNlU291cmNlUm9vdChuZXdTb3VyY2VSb290KTsKKworICAgIGFzc2VydEVxdWFscygiTXlJbnRlcmZhY2UxIiwgYUNsYXNzLmdldE5hbWUoKSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0UmVwbGFjZVJvb3RXaXRoU3ViUm9vdDIoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBmaW5hbCBQc2lDbGFzcyBhQ2xhc3MgPSBteUphdmFGYWNhZGUuZmluZENsYXNzKCJwYWNrLk15SW50ZXJmYWNlMSIsIEdsb2JhbFNlYXJjaFNjb3BlLmFsbFNjb3BlKG15UHJvamVjdCkpOworICAgIGFzc2VydE5vdE51bGwoYUNsYXNzKTsKKworICAgIGZpbmFsIFZpcnR1YWxGaWxlIG5ld1NvdXJjZVJvb3QgPSBhQ2xhc3MuZ2V0Q29udGFpbmluZ0ZpbGUoKS5nZXRWaXJ0dWFsRmlsZSgpLmdldFBhcmVudCgpOworICAgIHJlcGxhY2VTb3VyY2VSb290KG5ld1NvdXJjZVJvb3QpOworCisgICAgYXNzZXJ0RXF1YWxzKCJNeUludGVyZmFjZTEiLCBhQ2xhc3MuZ2V0TmFtZSgpKTsKKyAgfQorCisgIHByaXZhdGUgdm9pZCByZXBsYWNlU291cmNlUm9vdChmaW5hbCBWaXJ0dWFsRmlsZSBuZXdTb3VyY2VSb290KSB7CisgICAgQXBwbGljYXRpb25NYW5hZ2VyLmdldEFwcGxpY2F0aW9uKCkucnVuV3JpdGVBY3Rpb24oCisgICAgICAgIG5ldyBSdW5uYWJsZSgpIHsKKyAgICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgICBwdWJsaWMgdm9pZCBydW4oKSB7CisgICAgICAgICAgICBmaW5hbCBNb2RpZmlhYmxlUm9vdE1vZGVsIHJvb3RNb2RlbCA9IE1vZHVsZVJvb3RNYW5hZ2VyLmdldEluc3RhbmNlKG15TW9kdWxlKS5nZXRNb2RpZmlhYmxlTW9kZWwoKTsKKyAgICAgICAgICAgIGZpbmFsIENvbnRlbnRFbnRyeVtdIGNvbnRlbnQgPSByb290TW9kZWwuZ2V0Q29udGVudEVudHJpZXMoKTsKKyAgICAgICAgICAgIGJvb2xlYW4gY29udGVudFRvQ2hhbmdlRm91bmQgPSBmYWxzZTsKKyAgICAgICAgICAgIGZvciAoQ29udGVudEVudHJ5IGNvbnRlbnRFbnRyeSA6IGNvbnRlbnQpIHsKKyAgICAgICAgICAgICAgZmluYWwgU291cmNlRm9sZGVyW10gc291cmNlRm9sZGVycyA9IGNvbnRlbnRFbnRyeS5nZXRTb3VyY2VGb2xkZXJzKCk7CisgICAgICAgICAgICAgIGZvciAoU291cmNlRm9sZGVyIHNvdXJjZUZvbGRlciA6IHNvdXJjZUZvbGRlcnMpIHsKKyAgICAgICAgICAgICAgICBjb250ZW50RW50cnkucmVtb3ZlU291cmNlRm9sZGVyKHNvdXJjZUZvbGRlcik7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgZmluYWwgVmlydHVhbEZpbGUgY29udGVudFJvb3QgPSBjb250ZW50RW50cnkuZ2V0RmlsZSgpOworICAgICAgICAgICAgICBpZiAoY29udGVudFJvb3QgIT0gbnVsbCAmJiBWZnNVdGlsQ29yZS5pc0FuY2VzdG9yKGNvbnRlbnRSb290LCBuZXdTb3VyY2VSb290LCBmYWxzZSkpIHsKKyAgICAgICAgICAgICAgICBjb250ZW50RW50cnkuYWRkU291cmNlRm9sZGVyKG5ld1NvdXJjZVJvb3QsIGZhbHNlKTsKKyAgICAgICAgICAgICAgICBjb250ZW50VG9DaGFuZ2VGb3VuZCA9IHRydWU7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGFzc2VydFRydWUoY29udGVudFRvQ2hhbmdlRm91bmQpOworICAgICAgICAgICAgcm9vdE1vZGVsLmNvbW1pdCgpOworICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0UGFyZW50SWRBc3NlcnQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBQc2lDbGFzcyBqcGFuZWxDbGFzcyA9IG15SmF2YUZhY2FkZS5maW5kQ2xhc3MoImphdmF4LnN3aW5nLkpQYW5lbCIsIEdsb2JhbFNlYXJjaFNjb3BlLmFsbFNjb3BlKG15UHJvamVjdCkpOworICAgIFBzaUNsYXNzW10gaW5oZXJpdG9ycyA9IENsYXNzSW5oZXJpdG9yc1NlYXJjaC5zZWFyY2goanBhbmVsQ2xhc3MsIEdsb2JhbFNlYXJjaFNjb3BlLnByb2plY3RTY29wZShteVByb2plY3QpLCB0cnVlKS50b0FycmF5KFBzaUNsYXNzLkVNUFRZX0FSUkFZKTsKKyAgICBhc3NlcnRFcXVhbHMoMiwgaW5oZXJpdG9ycy5sZW5ndGgpOworICAgIGFzc2VydFRydWUoaW5oZXJpdG9yc1swXSBpbnN0YW5jZW9mIFBzaUFub255bW91c0NsYXNzIHx8IGluaGVyaXRvcnNbMV0gaW5zdGFuY2VvZiBQc2lBbm9ueW1vdXNDbGFzcyk7CisgICAgUHNpQ2xhc3Mgbm9uQW5vbkNsYXNzID0gaW5oZXJpdG9yc1swXSBpbnN0YW5jZW9mIFBzaUFub255bW91c0NsYXNzID8gaW5oZXJpdG9yc1sxXSA6IGluaGVyaXRvcnNbMF07CisKKyAgICBQc2lNZXRob2RbXSBtZXRob2RzID0gbm9uQW5vbkNsYXNzLmdldE1ldGhvZHMoKTsKKyAgICBhc3NlcnRFcXVhbHMoMSwgbWV0aG9kcy5sZW5ndGgpOworICAgIFBzaVR5cGVFbGVtZW50IG5ld1R5cGUgPSBteUphdmFGYWNhZGUuZ2V0RWxlbWVudEZhY3RvcnkoKS5jcmVhdGVUeXBlRWxlbWVudChQc2lUeXBlLkZMT0FUKTsKKyAgICBtZXRob2RzWzBdLmdldFJldHVyblR5cGVFbGVtZW50KCkucmVwbGFjZShuZXdUeXBlKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RQYXJlbnRJZEFzc2VydE9uRXh0ZXJuYWxDaGFuZ2UoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBQc2lEaXJlY3Rvcnkgcm9vdCA9IFByb2plY3RSb290VXRpbC5nZXRBbGxDb250ZW50Um9vdHMobXlQcm9qZWN0KSBbMF07CisgICAgVmlydHVhbEZpbGUgdkZpbGUgPSByb290LmdldFZpcnR1YWxGaWxlKCkuZmluZENoaWxkKCJNeUNsYXNzMS5qYXZhIik7CisKKyAgICBQc2lKYXZhRmlsZSBwc2lGaWxlID0gKFBzaUphdmFGaWxlKSBteVBzaU1hbmFnZXIuZmluZEZpbGUodkZpbGUpOworICAgIHBzaUZpbGUuZ2V0Q2xhc3NlcygpOworCisgICAgcmV3cml0ZUZpbGVFeHRlcm5hbGx5KHZGaWxlLCAiaW1wb3J0IGEgLiBiO1xuIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW1wb3J0IGMuKjtcbiIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImltcG9ydFxuIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiXG4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjbGFzcyBNeUNsYXNzMXtcbiIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAge1xuIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgIGNsYXNzIExvY2Fse1xuIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgICAgcHVibGljIHZvaWQgZm9vKCl7XG4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgICAgICAgIG5ldyBSdW5uYWJsZSgpe1xuIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgICAgICAgIHB1YmxpYyB2b2lkIHJ1bigpe1xuIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgICAgICAgICAgbmV3IFRocm93YWJsZSgpe1xuIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgICAgICAgICAgfTtcbiIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgICAgICAgICB9O1xuIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgICAgICB9XG4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgICAgICB9XG4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgICAgfTtcbiIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgfVxuIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAifVxuIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiXG4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjbGFzcyBDbGFzczJ7XG4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ9XG4iKTsKKworICAgIFBzaUNsYXNzIG15Q2xhc3MgPSBteUphdmFGYWNhZGUuZmluZENsYXNzKCJNeUNsYXNzMSIsIEdsb2JhbFNlYXJjaFNjb3BlLmFsbFNjb3BlKG15UHJvamVjdCkpOworICAgIG15Q2xhc3MuZ2V0Q2hpbGRyZW4oKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RDb3B5YWJsZVVzZXJEYXRhQ2hpbGQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBmaW5hbCBQc2lDbGFzcyBhQ2xhc3MgPSBteUphdmFGYWNhZGUuZmluZENsYXNzKCJwYWNrLk15SW50ZXJmYWNlMSIsIEdsb2JhbFNlYXJjaFNjb3BlLmFsbFNjb3BlKG15UHJvamVjdCkpOworICAgIGFzc2VydE5vdE51bGwoYUNsYXNzKTsKKyAgICBmaW5hbCBQc2lGaWxlIGNvbnRhaW5pbmdGaWxlID0gYUNsYXNzLmdldENvbnRhaW5pbmdGaWxlKCk7CisgICAgZmluYWwgQ29tcG9zaXRlRWxlbWVudCBlbGVtZW50ID0gKChQc2lGaWxlSW1wbCljb250YWluaW5nRmlsZSkuY2FsY1RyZWVFbGVtZW50KCk7CisgICAgYUNsYXNzLnB1dENvcHlhYmxlVXNlckRhdGEoVEVTVF9LRVksICJURVNUIik7CisgICAgZmluYWwgUHNpSmF2YUZpbGUgZmlsZUNvcHkgPSAoUHNpSmF2YUZpbGUpY29udGFpbmluZ0ZpbGUuY29weSgpOworICAgIGZpbmFsIFBzaUNsYXNzW10gY2xhc3Nlc0NvcHkgPSBmaWxlQ29weS5nZXRDbGFzc2VzKCk7CisgICAgYXNzZXJ0RXF1YWxzKDEsIGNsYXNzZXNDb3B5Lmxlbmd0aCk7CisgICAgYXNzZXJ0Tm90TnVsbChlbGVtZW50KTsKKyAgICBhc3NlcnRFcXVhbHMoIlRFU1QiLCBjbGFzc2VzQ29weVswXS5nZXRDb3B5YWJsZVVzZXJEYXRhKFRFU1RfS0VZKSk7CisgIH0KKworICBwcml2YXRlIHN0YXRpYyB2b2lkIHJld3JpdGVGaWxlRXh0ZXJuYWxseShWaXJ0dWFsRmlsZSB2RmlsZSwgU3RyaW5nIHRleHQpIHRocm93cyBJT0V4Y2VwdGlvbiB7CisgICAgRmlsZVV0aWwud3JpdGVUb0ZpbGUobmV3IEZpbGUodkZpbGUuZ2V0UGF0aCgpKSwgdGV4dC5nZXRCeXRlcygiVVRGLTgiKSk7CisgICAgdkZpbGUucmVmcmVzaChmYWxzZSwgZmFsc2UpOworICB9CisKKyAgcHJpdmF0ZSB2b2lkIHJlbmFtZVBhY2thZ2UoU3RyaW5nIHBhY2thZ2VOYW1lLCBTdHJpbmcgbmV3UGFja2FnZU5hbWUpIHRocm93cyBFeGNlcHRpb24geworICAgIFBzaVBhY2thZ2UgYVBhY2thZ2UgPSBKYXZhUHNpRmFjYWRlLmdldEluc3RhbmNlKG15UHNpTWFuYWdlci5nZXRQcm9qZWN0KCkpLmZpbmRQYWNrYWdlKHBhY2thZ2VOYW1lKTsKKyAgICBhc3NlcnROb3ROdWxsKCJQYWNrYWdlICIgKyBwYWNrYWdlTmFtZSArICIgbm90IGZvdW5kIiwgYVBhY2thZ2UpOworCisgICAgLy9Qc2lEaXJlY3RvcnkgZGlyID0gYVBhY2thZ2UuZ2V0RGlyZWN0b3JpZXMoKVswXTsKKyAgICAvL3RvIHJlbmFtZSBkaXIgd2l0aCBjbGFzc2VzIG1vdmUgaXMgdXNlZAorICAgIG5ldyBSZW5hbWVQcm9jZXNzb3IobXlQcm9qZWN0LCBhUGFja2FnZSwgbmV3UGFja2FnZU5hbWUsIHRydWUsIHRydWUpLnJ1bigpOworICAgIEZpbGVEb2N1bWVudE1hbmFnZXIuZ2V0SW5zdGFuY2UoKS5zYXZlQWxsRG9jdW1lbnRzKCk7CisgIH0KKworCit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovcHNpL1N0dWJBc3RTd2l0Y2hUZXN0Lmdyb292eSBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9wc2kvU3R1YkFzdFN3aXRjaFRlc3QuZ3Jvb3Z5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJkMDgzMGUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovcHNpL1N0dWJBc3RTd2l0Y2hUZXN0Lmdyb292eQpAQCAtMCwwICsxLDgyIEBACisvKgorICogQ29weXJpZ2h0IDIwMDAtMjAxMiBKZXRCcmFpbnMgcy5yLm8uCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworcGFja2FnZSBjb20uaW50ZWxsaWoucHNpCisKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS5hcHBsaWNhdGlvbi5BcHBsaWNhdGlvbk1hbmFnZXIKK2ltcG9ydCBjb20uaW50ZWxsaWoucHNpLmltcGwuc291cmNlLlBzaUZpbGVJbXBsCitpbXBvcnQgY29tLmludGVsbGlqLnBzaS51dGlsLlBzaVRyZWVVdGlsCitpbXBvcnQgY29tLmludGVsbGlqLnRlc3RGcmFtZXdvcmsuZml4dHVyZXMuTGlnaHRDb2RlSW5zaWdodEZpeHR1cmVUZXN0Q2FzZQoraW1wb3J0IGNvbS5pbnRlbGxpai5yZWZlcmVuY2UuU29mdFJlZmVyZW5jZQorCitpbXBvcnQgamF2YS51dGlsLmNvbmN1cnJlbnQuQ291bnREb3duTGF0Y2gKKworLyoqCisgKiBAYXV0aG9yIHBldGVyCisgKi8KK2NsYXNzIFN0dWJBc3RTd2l0Y2hUZXN0IGV4dGVuZHMgTGlnaHRDb2RlSW5zaWdodEZpeHR1cmVUZXN0Q2FzZSB7CisKKyAgcHVibGljIHZvaWQgInRlc3QgbW9kaWZ5aW5nIGZpbGUgd2l0aCBzdHVicyB2aWEgVkZTIigpIHsKKyAgICBQc2lGaWxlSW1wbCBmaWxlID0gKFBzaUZpbGVJbXBsKW15Rml4dHVyZS5hZGRGaWxlVG9Qcm9qZWN0KCdGb28uamF2YScsICdjbGFzcyBGb28ge30nKQorICAgIGFzc2VydCBmaWxlLnN0dWIKKyAgICBkZWYgY2xzID0gKChQc2lKYXZhRmlsZSlmaWxlKS5jbGFzc2VzWzBdCisgICAgYXNzZXJ0IGZpbGUuc3R1YgorCisgICAgZGVmIG9sZENvdW50ID0gcHNpTWFuYWdlci5tb2RpZmljYXRpb25UcmFja2VyLmphdmFTdHJ1Y3R1cmVNb2RpZmljYXRpb25Db3VudAorCisgICAgQXBwbGljYXRpb25NYW5hZ2VyLmFwcGxpY2F0aW9uLnJ1bldyaXRlQWN0aW9uIHsgZmlsZS52aXJ0dWFsRmlsZS5zZXRCaW5hcnlDb250ZW50KGZpbGUudmlydHVhbEZpbGUuY29udGVudHNUb0J5dGVBcnJheSgpKSB9CisKKyAgICBhc3NlcnQgcHNpTWFuYWdlci5tb2RpZmljYXRpb25UcmFja2VyLmphdmFTdHJ1Y3R1cmVNb2RpZmljYXRpb25Db3VudCAhPSBvbGRDb3VudAorCisgICAgYXNzZXJ0ICFjbHMudmFsaWQKKyAgICBhc3NlcnQgZmlsZS5zdHViCisgICAgYXNzZXJ0IGNscyAhPSBQc2lUcmVlVXRpbC5maW5kRWxlbWVudE9mQ2xhc3NBdE9mZnNldChmaWxlLCAxLCBQc2lDbGFzcywgZmFsc2UpCisgICAgYXNzZXJ0ICFmaWxlLnN0dWIKKyAgfQorCisgIHB1YmxpYyB2b2lkICJ0ZXN0IHJlYWNoYWJsZSBwc2kgY2xhc3NlcyByZW1haW4gdmFsaWQgd2hlbiBub3RoaW5nIGNoYW5nZXMiKCkgeworICAgIGludCBjb3VudCA9IDEwMDAKKyAgICBMaXN0PFNvZnRSZWZlcmVuY2U8UHNpQ2xhc3M+PiBjbGFzc0xpc3QgPSAoMC4uPGNvdW50KS5jb2xsZWN0IHsgbmV3IFNvZnRSZWZlcmVuY2UobXlGaXh0dXJlLmFkZENsYXNzKCJjbGFzcyBGb28kaXQge30iKSkgfQorICAgIFN5c3RlbS5nYygpCisgICAgU3lzdGVtLmdjKCkKKyAgICBTeXN0ZW0uZ2MoKQorICAgIGFzc2VydCBjbGFzc0xpc3QuZXZlcnkgeworICAgICAgZGVmIGNscyA9IGl0LmdldCgpCisgICAgICBpZiAoIWNscyB8fCBjbHMudmFsaWQpIHJldHVybiB0cnVlCisgICAgICBjbHMudGV4dCAvL2xvYWQgQVNUCisgICAgICByZXR1cm4gY2xzLnZhbGlkCisgICAgfQorICB9CisKKyAgcHVibGljIHZvaWQgInRlc3QgdHJhdmVyc2luZyBQU0kgYW5kIHN3aXRjaGluZyBjb25jdXJyZW50bHkiKCkgeworICAgIGludCBjb3VudCA9IDEwMDAKKyAgICBMaXN0PFBzaUNsYXNzPiBjbGFzc0xpc3QgPSAoMC4uPGNvdW50KS5jb2xsZWN0IHsKKyAgICAgIG15Rml4dHVyZS5hZGRDbGFzcygiY2xhc3MgRm9vJGl0IHsgIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgKDAuLjwxMCkuY29sbGVjdCB7ICJ2b2lkIGZvbyRpdChpbnQgaSwgYm9vbGVhbiBiLCBPYmplY3Qgbykge30iIH0uam9pbigiXG4iKSArCisgICAgICAgICAgICAgICAgICAgICAgICAgIiB9IikKKyAgICB9CisgICAgQ291bnREb3duTGF0Y2ggbGF0Y2ggPSBuZXcgQ291bnREb3duTGF0Y2goY291bnQpCisgICAgZm9yIChjIGluIGNsYXNzTGlzdCkgeworICAgICAgQXBwbGljYXRpb25NYW5hZ2VyLmFwcGxpY2F0aW9uLmV4ZWN1dGVPblBvb2xlZFRocmVhZCB7IFRocmVhZC55aWVsZCgpOyBjLnRleHQ7IGxhdGNoLmNvdW50RG93bigpIH0KKyAgICAgIGZvciAobSBpbiBjLm1ldGhvZHMpIHsKKyAgICAgICAgZGVmIHBhcmFtZXRlcnMgPSBtLnBhcmFtZXRlckxpc3QucGFyYW1ldGVycworICAgICAgICBmb3IgKGkgaW4gMC4uPHBhcmFtZXRlcnMuc2l6ZSgpKSB7CisgICAgICAgICAgYXNzZXJ0IGkgPT0gbS5wYXJhbWV0ZXJMaXN0LmdldFBhcmFtZXRlckluZGV4KHBhcmFtZXRlcnNbaV0pCisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisgICAgbGF0Y2guYXdhaXQoKQorICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovcHNpL1RyZWVJc0NvcnJlY3RBZnRlckRpZmZSZXBhcnNlVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL3BzaS9UcmVlSXNDb3JyZWN0QWZ0ZXJEaWZmUmVwYXJzZVRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZjg3NDUxCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL3BzaS9UcmVlSXNDb3JyZWN0QWZ0ZXJEaWZmUmVwYXJzZVRlc3QuamF2YQpAQCAtMCwwICsxLDEwOTggQEAKKy8qCisgKiBAYXV0aG9yIG1heAorICovCitwYWNrYWdlIGNvbS5pbnRlbGxpai5wc2k7CisKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS5lZGl0b3IuRG9jdW1lbnQ7CitpbXBvcnQgY29tLmludGVsbGlqLnBzaS5pbXBsLkRlYnVnVXRpbDsKK2ltcG9ydCBjb20uaW50ZWxsaWoudGVzdEZyYW1ld29yay5MaWdodENvZGVJbnNpZ2h0VGVzdENhc2U7CitpbXBvcnQgb3JnLmpldGJyYWlucy5hbm5vdGF0aW9ucy5Ob25ObHM7CisKK3B1YmxpYyBjbGFzcyBUcmVlSXNDb3JyZWN0QWZ0ZXJEaWZmUmVwYXJzZVRlc3QgZXh0ZW5kcyBMaWdodENvZGVJbnNpZ2h0VGVzdENhc2UgeworCisgIHB1YmxpYyB2b2lkIHRlc3RJREVBREVWNDE4NjIoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBATm9uTmxzIFN0cmluZyBwYXJ0MSA9ICJwYWNrYWdlIGNvbS50ZXN0O1xuIiArCisgICAgICAgICAgICAgICAgICAgIlxuIiArCisgICAgICAgICAgICAgICAgICAgIlxuIiArCisgICAgICAgICAgICAgICAgICAgIi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iICsKKyAgICAgICAgICAgICAgICAgICAiLy8gQ29weXJpZ2h0IChjKSAxOTk5LCAyMDA3XG4iICsKKyAgICAgICAgICAgICAgICAgICAiLy8gV29ya0ZvcmNlIFNvZnR3YXJlLCBJbmMuXG4iICsKKyAgICAgICAgICAgICAgICAgICAiLy8gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiIgKworICAgICAgICAgICAgICAgICAgICIvL1xuIiArCisgICAgICAgICAgICAgICAgICAgIi8vIFdlYi1zaXRlOiBodHRwOi8vd3d3Lndvcmtmb3JjZXNvZnR3YXJlLmNvbVxuIiArCisgICAgICAgICAgICAgICAgICAgIi8vIEUtbWFpbDogICBzdXBwb3J0QHdvcmtmb3JjZXNvZnR3YXJlLmNvbVxuIiArCisgICAgICAgICAgICAgICAgICAgIi8vIFBob25lOiAgICAoODc3KSA0OTMtNjcyM1xuIiArCisgICAgICAgICAgICAgICAgICAgIi8vXG4iICsKKyAgICAgICAgICAgICAgICAgICAiLy8gVGhpcyBwcm9ncmFtIGlzIHByb3RlY3RlZCBieSBjb3B5cmlnaHQgbGF3cyBhbmQgaXMgY29uc2lkZXJlZFxuIiArCisgICAgICAgICAgICAgICAgICAgIi8vIGEgdHJhZGUgc2VjcmV0IG9mIFdvcmtGb3JjZSBTb2Z0d2FyZS4gIEFjY2VzcyB0byB0aGlzIHByb2dyYW1cbiIgKworICAgICAgICAgICAgICAgICAgICIvLyBhbmQgc291cmNlIGNvZGUgaXMgZ3JhbnRlZCBvbmx5IHRvIGxpY2Vuc2VkIGN1c3RvbWVycy4gIFVuZGVyXG4iICsKKyAgICAgICAgICAgICAgICAgICAiLy8gbm8gY2lyY3Vtc3RhbmNlcyBtYXkgdGhpcyBzb2Z0d2FyZSBvciBzb3VyY2UgY29kZSBiZSBkaXN0cmlidXRlZFxuIiArCisgICAgICAgICAgICAgICAgICAgIi8vIHdpdGhvdXQgdGhlIHByaW9yIHdyaXR0ZW4gY29uc2VudCBvZiBXb3JrRm9yY2UgU29mdHdhcmUuXG4iICsKKyAgICAgICAgICAgICAgICAgICAiLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIgKworICAgICAgICAgICAgICAgICAgICJcbiIgKworICAgICAgICAgICAgICAgICAgICJpbXBvcnQgY29tLndvcmtmb3JjZXNvZnR3YXJlLkRhdGEuRW1wbG95ZWUuKjtcbiIgKworICAgICAgICAgICAgICAgICAgICJpbXBvcnQgY29tLndvcmtmb3JjZXNvZnR3YXJlLkRhdGEuKjtcbiIgKworICAgICAgICAgICAgICAgICAgICJpbXBvcnQgY29tLndvcmtmb3JjZXNvZnR3YXJlLkRhdGEuYXNzaWdubWVudC5Bc2dubXRfbWFzdGVyO1xuIiArCisgICAgICAgICAgICAgICAgICAgImltcG9ydCBjb20ud29ya2ZvcmNlc29mdHdhcmUuRGF0YS5hc3NpZ25tZW50LkFzZ25tdDtcbiIgKworICAgICAgICAgICAgICAgICAgICJpbXBvcnQgY29tLndvcmtmb3JjZXNvZnR3YXJlLkRhdGEuT3V0cHV0LlRpbWVfc2hlZXRfb3V0cHV0O1xuIiArCisgICAgICAgICAgICAgICAgICAgImltcG9ydCBjb20ud29ya2ZvcmNlc29mdHdhcmUuRGF0YS5UaW1lU2NoZWQuUGF5UGVyaW9kRGF0YTtcbiIgKworICAgICAgICAgICAgICAgICAgICJpbXBvcnQgY29tLndvcmtmb3JjZXNvZnR3YXJlLkRhdGEuVGltZVNjaGVkLlRpbWVTY2hlZFV0aWxzO1xuIiArCisgICAgICAgICAgICAgICAgICAgImltcG9ydCBjb20ud29ya2ZvcmNlc29mdHdhcmUuRGF0YS5UaW1lU2NoZWQuU2NoZWR1bGUuU2NoZWR1bGVfZGV0YWlsTGlzdDtcbiIgKworICAgICAgICAgICAgICAgICAgICJpbXBvcnQgY29tLndvcmtmb3JjZXNvZnR3YXJlLkRhdGEuVGltZVNjaGVkLlRpbWVTaGVldC4qO1xuIiArCisgICAgICAgICAgICAgICAgICAgImltcG9ydCBjb20ud29ya2ZvcmNlc29mdHdhcmUuRGF0YS5hc3NpZ25tZW50LkFzZ25tdF9tYXN0ZXJMaXN0O1xuIiArCisgICAgICAgICAgICAgICAgICAgImltcG9ydCBjb20ud29ya2ZvcmNlc29mdHdhcmUuRXhjZXB0aW9ucy4qO1xuIiArCisgICAgICAgICAgICAgICAgICAgImltcG9ydCBjb20ud29ya2ZvcmNlc29mdHdhcmUuR2VuLkNob2ljZS5BcHByb3ZhbF9ldmVudF90eXBlO1xuIiArCisgICAgICAgICAgICAgICAgICAgImltcG9ydCBjb20ud29ya2ZvcmNlc29mdHdhcmUuR2VuLkNob2ljZS5UcmFuc2FjdGlvbl9zdGF0dXM7XG4iICsKKyAgICAgICAgICAgICAgICAgICAiaW1wb3J0IGNvbS53b3JrZm9yY2Vzb2Z0d2FyZS5HZW4uQ2hvaWNlLk1lc3NhZ2VzO1xuIiArCisgICAgICAgICAgICAgICAgICAgImltcG9ydCBjb20ud29ya2ZvcmNlc29mdHdhcmUuR2VuLkNob2ljZS5Qcm9ncmFtX3NvdXJjZTtcbiIgKworICAgICAgICAgICAgICAgICAgICJpbXBvcnQgY29tLndvcmtmb3JjZXNvZnR3YXJlLkdlbi5PdGhlci5EYlJlYy5EYlJlY1RpbWVfc2hlZXRfb3V0cHV0O1xuIiArCisgICAgICAgICAgICAgICAgICAgImltcG9ydCBjb20ud29ya2ZvcmNlc29mdHdhcmUuR2VuLk90aGVyLkRiUmVjLkRiUmVjVGltZV9zaGVldDtcbiIgKworICAgICAgICAgICAgICAgICAgICJpbXBvcnQgY29tLndvcmtmb3JjZXNvZnR3YXJlLkdlbi5PdGhlci5MaXN0LldEYXRlTGlzdDtcbiIgKworICAgICAgICAgICAgICAgICAgICJpbXBvcnQgY29tLndvcmtmb3JjZXNvZnR3YXJlLkdlbi5Qb2xpY3kuUmlnaHRfZ3JwO1xuIiArCisgICAgICAgICAgICAgICAgICAgImltcG9ydCBjb20ud29ya2ZvcmNlc29mdHdhcmUuR2VuLlBvbGljeS5Qb2xpY3lfcHJvZmlsZTtcbiIgKworICAgICAgICAgICAgICAgICAgICJpbXBvcnQgY29tLndvcmtmb3JjZXNvZnR3YXJlLlBvbGljeS4qO1xuIiArCisgICAgICAgICAgICAgICAgICAgImltcG9ydCBjb20ud29ya2ZvcmNlc29mdHdhcmUuVXRpbC5EYXRlVGltZS5XRGF0ZTtcbiIgKworICAgICAgICAgICAgICAgICAgICJpbXBvcnQgY29tLndvcmtmb3JjZXNvZnR3YXJlLlV0aWwuRGF0ZVRpbWUuV0RhdGVUaW1lO1xuIiArCisgICAgICAgICAgICAgICAgICAgImltcG9ydCBjb20ud29ya2ZvcmNlc29mdHdhcmUuVXRpbC5EQi5MaXN0V3JpdGVyO1xuIiArCisgICAgICAgICAgICAgICAgICAgImltcG9ydCBjb20ud29ya2ZvcmNlc29mdHdhcmUuVXRpbC5EQi5EYlJlY0ZpZWxkQ29waWVyO1xuIiArCisgICAgICAgICAgICAgICAgICAgImltcG9ydCBjb20ud29ya2ZvcmNlc29mdHdhcmUuQ2xpZW50UmVxdWVzdHMuVGltZVNjaGVkLlRpbWVTY2hlZFV0aWw7XG4iICsKKyAgICAgICAgICAgICAgICAgICAiaW1wb3J0IGNvbS53b3JrZm9yY2Vzb2Z0d2FyZS5DbGllbnRSZXF1ZXN0cy5UaW1lU2NoZWQuUGF5UGVyaW9kSW5mbztcbiIgKworICAgICAgICAgICAgICAgICAgICJpbXBvcnQgY29tLndvcmtmb3JjZXNvZnR3YXJlLkNsaWVudFJlcXVlc3RzLlRpbWVFbnRyeS5BcHByb3ZhbEluZm87XG4iICsKKyAgICAgICAgICAgICAgICAgICAiaW1wb3J0IGNvbS53b3JrZm9yY2Vzb2Z0d2FyZS5DbGllbnRSZXF1ZXN0cy5UaW1lRW50cnkuQmFua0JhbGFuY2VSZXN1bHRzO1xuIiArCisgICAgICAgICAgICAgICAgICAgImltcG9ydCBjb20ud29ya2ZvcmNlc29mdHdhcmUuTWlzYy5TZXJ2ZXJFcnJvckxvZ2dlcjtcbiIgKworICAgICAgICAgICAgICAgICAgICJpbXBvcnQgY29tLndvcmtmb3JjZXNvZnR3YXJlLk1pc2MuU2VydmVyRXJyb3I7XG4iICsKKyAgICAgICAgICAgICAgICAgICAiaW1wb3J0IGNvbS53b3JrZm9yY2Vzb2Z0d2FyZS5Bc3NpZ25tZW50UGVyaW9kLio7XG4iICsKKyAgICAgICAgICAgICAgICAgICAiaW1wb3J0IGNvbS53b3JrZm9yY2Vzb2Z0d2FyZS5Bc3NpZ25tZW50UGVyaW9kLlRpbWVTaGVldFN0YXRlO1xuIiArCisgICAgICAgICAgICAgICAgICAgImltcG9ydCBjb20ud29ya2ZvcmNlc29mdHdhcmUuRGljdGlvbmFyeS5EYXRhRGljdGlvbmFyeTtcbiIgKworICAgICAgICAgICAgICAgICAgICJcbiIgKworICAgICAgICAgICAgICAgICAgICJpbXBvcnQgamF2YS5zcWwuU1FMRXhjZXB0aW9uO1xuIiArCisgICAgICAgICAgICAgICAgICAgImltcG9ydCBqYXZhLnV0aWwuKjtcbiIgKworICAgICAgICAgICAgICAgICAgICJpbXBvcnQgb3JnLmxvZzRqLkNhdGVnb3J5O1xuIiArCisgICAgICAgICAgICAgICAgICAgIlxuIiArCisgICAgICAgICAgICAgICAgICAgIi8qKlxuIiArCisgICAgICAgICAgICAgICAgICAgIiAqIEhvbGRzIGRlZmluaXRpb24gb2Yge0BsaW5rIENhbGNJbmZvfVxuIiArCisgICAgICAgICAgICAgICAgICAgIiAqL1xuIiArCisgICAgICAgICAgICAgICAgICAgImNsYXNzIEFzc2lnbm1lbnRNYW5hZ2VyIHtcbiIgKworICAgICAgICAgICAgICAgICAgICIgIC8qKlxuIiArCisgICAgICAgICAgICAgICAgICAgIiAgICogSW1wbGVtZW50YXRpb24gb2Yge0BsaW5rIFRpbWVTaGVldENhbGN1bGF0aW9uSW5mb30uXG4iICsKKyAgICAgICAgICAgICAgICAgICAiICAgKiBFeHRyYWN0cyBhbGwgdGhlIHJlcXVpcmVkIGRhdGEgZnJvbSBBbGxDYWxjRGF0YU1hbmFnZXIsIEFsbENhbGN1bGF0aW9uRGF0YSwgVGltZV9zaGVldCwgZXRjLlxuIiArCisgICAgICAgICAgICAgICAgICAgIiAgICogTWFrZXMgY29waWVzIG9mIGFsbCBtdXRhYmxlIGRhdGEsIHVubW9kaWZpYWJsZSBsaXN0cyB3aGVyZSBwb3NzaWJsZS5cbiIgKworICAgICAgICAgICAgICAgICAgICIgICAqL1xuIiArCisgICAgICAgICAgICAgICAgICAgIiAgc3RhdGljIGNsYXNzIENhbGNJbmZvIGltcGxlbWVudHMgVGltZVNoZWV0Q2FsY3VsYXRpb25JbmZvIHtcbiIgKworICAgICAgICAgICAgICAgICAgICIgICAgLyoqXG4iICsKKyAgICAgICAgICAgICAgICAgICAiICAgICAqIFVzZSB0aGUgcGFzc2VkIGluIEFsbENhbGN1bGF0aW9uRGF0YSBvYmplY3QgLSBETyBOT1QgdHJ5IHRvIGdldCBpdCBmcm9tIHRoZSBwYXNzZWQgaW4gQWxsQ2FsY0RhdGFNYW5hZ2VyIGJlY2F1c2VcbiIgKworICAgICAgICAgICAgICAgICAgICIgICAgICogdGhlIEFDRCBvYmplY3QgdGhhdCdzIHBhc3NlZCBpbiBpcyBvYnRhaW5lZCBmcm9tIEFzc2lnbm1lbnRNYW5hZ2VyLmdldEFsbENhbGNEYXRhIG1ldGhvZCB3aGljaCBoYW5kbGVzIHRoZVxuIiArCisgICAgICAgICAgICAgICAgICAgIiAgICAgKiBzY2VuYXJpbyB3aGVyZSBhIHByaW9yIHBlcmlvZCBtYXkgbmVlZCB0byBiZSBhbWVuZGVkIGF1dG9tYXRpY2FsbHkgYW5kIGlmIEFDRE0uZ2V0QWxsQ2FsY0RhdGEoKSBtZXRob2QgaXMgY2FsbGVkLFxuIiArCisgICAgICAgICAgICAgICAgICAgIiAgICAgKiB5b3UgbWlnaHQgZ2V0IGFuIHVubW9kaWZpYWJsZSBBQ0RcbiIgKworICAgICAgICAgICAgICAgICAgICIgICAgICogQHBhcmFtIGFjZG1cbiIgKworICAgICAgICAgICAgICAgICAgICIgICAgICogQHBhcmFtIGFjZFxuIiArCisgICAgICAgICAgICAgICAgICAgIiAgICAgKiBAcGFyYW0gdGltZVNoZWV0SWRcbiIgKworICAgICAgICAgICAgICAgICAgICIgICAgICogQHBhcmFtIHBhcm1zXG4iICsKKyAgICAgICAgICAgICAgICAgICAiICAgICAqL1xuIiArCisgICAgICAgICAgICAgICAgICAgIiAgICBDYWxjSW5mbyhBbGxDYWxjRGF0YU1hbmFnZXIgYWNkbSwgQWxsQ2FsY3VsYXRpb25EYXRhIGFjZCwgVGltZVNoZWV0SWRlbnRpZmllciB0aW1lU2hlZXRJZCwgVGltZUVudHJ5UGFybXMgcGFybXMpIHtcbiIgKworICAgICAgICAgICAgICAgICAgICIgICAgICAvLyB3ZSdsbCBleHRyYWN0IGFsbCB0aGVzZSB2YXJzIHNlcGFyYXRlbHksIGZvciByZWFkYWJpbGl0eVxuIiArCisgICAgICAgICAgICAgICAgICAgIiAgICAgIGZpbmFsIFJpZ2h0X2dycCByaWdodEdycCA9IHBhcm1zLmdldFJpZ2h0X2dycCh0aW1lU2hlZXRJZCk7XG4iICsKKyAgICAgICAgICAgICAgICAgICAiICAgICAgZmluYWwgQWxsUG9saWNpZXMgYXAgPSBhY2QuZ2V0QWxsUG9saWNpZXMoKTtcbiIgKworICAgICAgICAgICAgICAgICAgICIgICAgICBmaW5hbCBXRGF0ZSBwcEVuZEZvclRvZGF5ID0gVGltZVNjaGVkVXRpbC5nZXRQYXlQZXJpb2RSYW5nZUZvclRvZGF5KGFjZG0pLmdldEVuZCgpO1xuIiArCisgICAgICAgICAgICAgICAgICAgIlxuIiArCisgICAgICAgICAgICAgICAgICAgIiAgICAgIHRoaXMuYWNkID0gYWNkO1xuIiArCisgICAgICAgICAgICAgICAgICAgIiAgICAgIHRoaXMudGltZVNoZWV0SWRlbnRpZmllciA9IHRpbWVTaGVldElkO1xuIiArCisgICAgICAgICAgICAgICAgICAgIiAgICAgIHRoaXMuYXBwcm92YWxfZXZlbnRMaXN0ID0gYWNkLmdldEFwcHJvdmFsX2V2ZW50TGlzdCgpLmdldFVubW9kaWZpYWJsZUxpc3QoKTtcbiIgKworICAgICAgICAgICAgICAgICAgICIgICAgICB0aGlzLnBvbGljeVByb2ZpbGUgPSBhY2QuZ2V0QXNnbm10TWFzdGVyKCkuZ2V0UG9saWN5UHJvZmlsZVBvbGljeShwcEVuZEZvclRvZGF5LCBhcCk7XG4iICsKKyAgICAgICAgICAgICAgICAgICAiICAgICAgdGhpcy5hZGp1c3RtZW50c1BhaWRXaXRoVGltZXNoZWV0ID0gY3JlYXRlQWRqdXN0bWVudHNQYWlkV2l0aFRpbWVzaGVldChhY2RtLCBhY2QpO1xuIiArCisgICAgICAgICAgICAgICAgICAgIiAgICAgIHRoaXMuYmFua0JhbGFuY2VSZXN1bHRzID0gYWNkbS5nZXRCYW5rRGF0YUZvckJhbmtCYWxhbmNlUHJldmlldyhhcCwgYWNkLCByaWdodEdycC5nZXRSaWdodF9ncnAoKSwgYWNkLmdldFBQX2VuZCgpKTtcbiIgKworICAgICAgICAgICAgICAgICAgICIgICAgICB0aGlzLnRzb0xpc3RGb3JQYXlQcmV2aWV3ID0gQ29sbGVjdGlvbnMudW5tb2RpZmlhYmxlTGlzdChhY2RtLmdldFRzb0xpc3RGb3JQYXlQcmV2aWV3KGFjZCwgcmlnaHRHcnAuZ2V0UmlnaHRfZ3JwKCkpKTtcbiIgKworICAgICAgICAgICAgICAgICAgICIgICAgICB0aGlzLmFwcHJvdmVkRGF5cyA9IGNyZWF0ZUFwcHJvdmVkRGF5cyhhY2QpO1xuIiArCisgICAgICAgICAgICAgICAgICAgIlxuIiArCisgICAgICAgICAgICAgICAgICAgIiAgICAgIHRyeSB7XG4iICsKKyAgICAgICAgICAgICAgICAgICAiICAgICAgICAvLyB0aGVzZSBhcmUgZmFpcmx5IGludm9sdmVkIGNhbGN1bGF0aW9ucywgYW5kIHdlIHdhbnQgdG8gdmFsaWRhdGUgdGhlIHBheSBwZXJpb2QgbGlzdCxcbiIgKworICAgICAgICAgICAgICAgICAgICIgICAgICAgIC8vIHNvIHdlJ2xsIGRvIHRoZW0gYm90aCBoZXJlIHRvZ2V0aGVyIGluc3RlYWQgb2YgdXBvbiByZXF1ZXN0XG4iICsKKyAgICAgICAgICAgICAgICAgICAiICAgICAgICBlbXBsb3llZVBlcmlvZEluZm8gPSBhY2RtLmdldEVtcGxveWVlUGVyaW9kSW5mbyh0aW1lU2hlZXRJZC5nZXRQcEVuZCgpKTtcbiIgKworICAgICAgICAgICAgICAgICAgICIgICAgICAgIHBheVBlcmlvZExpc3QgPSBUaW1lU2NoZWRVdGlsLmNhbGNQYXlQZXJpb2RMaXN0KGFjZG0sIHJpZ2h0R3JwLmdldFJpZ2h0X2dycCgpKTtcbiIgKworICAgICAgICAgICAgICAgICAgICIgICAgICB9XG4iICsKKyAgICAgICAgICAgICAgICAgICAiICAgICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7XG4iICsKKyAgICAgICAgICAgICAgICAgICAiICAgICAgICB0aHJvdyBuZXcgSW50ZXJuYWxBcHBsaWNhdGlvbkV4Y2VwdGlvbihcIkxvYWRpbmcgY2FsYyBkYXRhIGZvcjogXCIgKyB0aW1lU2hlZXRJZCwgZSk7XG4iICsKKyAgICAgICAgICAgICAgICAgICAiICAgICAgfVxuIiArCisgICAgICAgICAgICAgICAgICAgIiAgICAgIGFzc2VydFBheVBlcmlvZExpc3QoKTtcbiIgKworICAgICAgICAgICAgICAgICAgICJcbiIgKworICAgICAgICAgICAgICAgICAgICIgICAgICBBc3NpZ25tZW50UGVyaW9kU3RhdGVJbXBsIGFwcyA9IG5ldyBBc3NpZ25tZW50UGVyaW9kU3RhdGVJbXBsKGVtcGxveWVlUGVyaW9kSW5mbyxcbiIgKworICAgICAgICAgICAgICAgICAgICIgICAgICAgICAgcmlnaHRHcnAsIHBhcm1zLmdldFN5c3RlbUZlYXR1cmUoKSwgYXAsIHBwRW5kRm9yVG9kYXksIGFjZG0sIHBvbGljeVByb2ZpbGUpO1xuIiArCisgICAgICAgICAgICAgICAgICAgIiAgICAgIGFzc2lnbm1lbnRQZXJpb2RTdGF0ZSA9IGFwcztcbiIgKworICAgICAgICAgICAgICAgICAgICIgICAgICB0aW1lU2hlZXRTdGF0ZSA9IG5ldyBUaW1lU2hlZXRTdGF0ZUltcGwodGhpcywgYXBzLCBwb2xpY3lQcm9maWxlKTtcbiIgKworICAgICAgICAgICAgICAgICAgICIgICAgfVxuIiArCisgICAgICAgICAgICAgICAgICAgIlxuIiArCisgICAgICAgICAgICAgICAgICAgIiAgICAvKipcbiIgKworICAgICAgICAgICAgICAgICAgICIgICAgICogUmV0dXJucyBhbiBBcHByb3ZhbEluZm8gb2JqZWN0LCB3aGljaCBjb250YWlucyBpbmZvcm1hdGlvbiBhYm91dCB3aGV0aGVyXG4iICsKKyAgICAgICAgICAgICAgICAgICAiICAgICAqIGVtcGxveWVlL21hbmFnZXIgYXBwcm92ZWQgYSB0aW1lc2hlZXQuXG4iICsKKyAgICAgICAgICAgICAgICAgICAiICAgICAqXG4iICsKKyAgICAgICAgICAgICAgICAgICAiICAgICAqIEBzZWUgQXBwcm92YWxJbmZvXG4iICsKKyAgICAgICAgICAgICAgICAgICAiICAgICAqL1xuIiArCisgICAgICAgICAgICAgICAgICAgIiAgICBwdWJsaWMgQXBwcm92YWxJbmZvIGdldEFwcHJvdmFsSW5mbygpIHsgcmV0dXJuIG5ldyBBcHByb3ZhbEluZm8oYWNkLmdldFRpbWVfc2hlZXQoKSwgYXBwcm92YWxfZXZlbnRMaXN0KTsgfVxuIiArCisgICAgICAgICAgICAgICAgICAgIlxuIiArCisgICAgICAgICAgICAgICAgICAgIiAgICBwdWJsaWMgQ29sbGVjdGlvbjxEYlJlY1RpbWVfc2hlZXRfb3V0cHV0PiBnZXRBZGp1c3RtZW50c1BhaWRXaXRoVGltZXNoZWV0KCkge1xuIiArCisgICAgICAgICAgICAgICAgICAgIiAgICAgIHJldHVybiBhZGp1c3RtZW50c1BhaWRXaXRoVGltZXNoZWV0O1xuIiArCisgICAgICAgICAgICAgICAgICAgIiAgICB9XG4iICsKKyAgICAgICAgICAgICAgICAgICAiXG4iICsKKyAgICAgICAgICAgICAgICAgICAiICAgIHB1YmxpYyBBcHByb3ZhbF9ldmVudExpc3QgZ2V0QXBwcm92YWxfZXZlbnRMaXN0KCkge1xuIiArCisgICAgICAgICAgICAgICAgICAgIiAgICAgIHJldHVybiBhcHByb3ZhbF9ldmVudExpc3Q7XG4iICsKKyAgICAgICAgICAgICAgICAgICAiICAgIH1cbiIgKworICAgICAgICAgICAgICAgICAgICJcbiIgKworICAgICAgICAgICAgICAgICAgICJcbiIgKworICAgICAgICAgICAgICAgICAgICIgICAgLyoqXG4iICsKKyAgICAgICAgICAgICAgICAgICAiICAgICAqIFJldHVybnMgc3RhdGUgaW5mb3JtYXRpb24gYWJvdXQgYSBnaXZlbiBhc3NpZ25tZW50IGFuZCBwZXJpb2QsIGVuY29tcGFzc2luZ1xuIiArCisgICAgICAgICAgICAgICAgICAgIiAgICAgKiB0aGUgY3Jvc3Mtc2VjdGlvbiBvZiBzZWN1cml0eSByZWxhdGVkIHNldHRpbmdzIGNhbGN1bGF0ZWQgZnJvbTpcbiIgKworICAgICAgICAgICAgICAgICAgICIgICAgICogPHVsPlxuIiArCisgICAgICAgICAgICAgICAgICAgIiAgICAgKiA8bGk+QXBwX3VzZXIgUm9sZXMgKGFwcF91c2VyX3JpZ2h0IGFuZCByaWdodF9ncnAgdGFibGVzKVxuIiArCisgICAgICAgICAgICAgICAgICAgIiAgICAgKiA8bGk+QXNzaWdubWVudCBlZmZlY3RpdmUgZGF0ZXNcbiIgKworICAgICAgICAgICAgICAgICAgICIgICAgICogPGxpPkVtcGxveWVlIHJlY29yZCBlZmZlY3RpdmUgZGF0ZXNcbiIgKworICAgICAgICAgICAgICAgICAgICIgICAgICogPGxpPlN5c3RlbV9mZWF0dXJlIHJlYWQvd3JpdGUgcHJpdmlsZWdlc1xuIiArCisgICAgICAgICAgICAgICAgICAgIiAgICAgKiA8L3VsPlxuIiArCisgICAgICAgICAgICAgICAgICAgIiAgICAgKlxuIiArCisgICAgICAgICAgICAgICAgICAgIiAgICAgKiBAcmV0dXJuIG5vdCBldmVyIG51bGxcbiIgKworICAgICAgICAgICAgICAgICAgICIgICAgICovXG4iICsKKyAgICAgICAgICAgICAgICAgICAiICAgIHB1YmxpYyBBc3NpZ25tZW50UGVyaW9kU3RhdGUgZ2V0QXNzaWdubWVudFBlcmlvZFN0YXRlKCkge1xuIiArCisgICAgICAgICAgICAgICAgICAgIiAgICAgIHJldHVybiBhc3NpZ25tZW50UGVyaW9kU3RhdGU7XG4iICsKKyAgICAgICAgICAgICAgICAgICAiICAgIH1cbiIgKworICAgICAgICAgICAgICAgICAgICJcbiIgKworICAgICAgICAgICAgICAgICAgICIgICAgcHVibGljIFNldDxXRGF0ZT4gZ2V0RGFpbHlBcHByb3ZhbERheXMoKSB7XG4iICsKKyAgICAgICAgICAgICAgICAgICAiICAgICAgcmV0dXJuIGFwcHJvdmVkRGF5cztcbiIgKworICAgICAgICAgICAgICAgICAgICIgICAgfVxuIiArCisgICAgICAgICAgICAgICAgICAgIlxuIiArCisgICAgICAgICAgICAgICAgICAgIiAgICAvKipcbiIgKworICAgICAgICAgICAgICAgICAgICIgICAgICogUmV0dXJucyBtYXAgdG8gdGhlIGFjY3J1YWwgYmFua3MgZGF0YSwgd2hpY2ggaXMgYSByZWFkIG9ubHkgcmVmZXJlbmNlXG4iICsKKyAgICAgICAgICAgICAgICAgICAiICAgICAqIG9mIHRoZSBpbmZvcm1hdGlvbiBjb250YWluZWQgdGhlcmUuIFRoZSBiYW5rcyByZXR1cm5lZCB3aWxsIGJlIGFsbCBiYW5rcyBhdHRhY2hlZFxuIiArCisgICAgICAgICAgICAgICAgICAgIiAgICAgKiB0byB0aGUgYXNzaWdubWVudCwgaW5jbHVkaW5nIGFnZ3JlZ2F0ZSBiYW5rcyBpZiBhcHBsaWNhYmxlLlxuIiArCisgICAgICAgICAgICAgICAgICAgIiAgICAgKlxuIiArCisgICAgICAgICAgICAgICAgICAgIiAgICAgKiBUaGUgbGlzdCB3aWxsIG5vdCBjb250YWluIGFueSBiYW5rcyB0aGF0IHRoZSBjdXJyZW50IEFwcF91c2VyJ3MgUmlnaHRfZ3JwIGNhbm5vdCB2aWV3IGZvciB0aGlzIGFzc2lnbm1lbnQnc1xuIiArCisgICAgICAgICAgICAgICAgICAgIiAgICAgKiBQb2xpY3lfcHJvZmlsZSAoYXMgZGVmaW5lZCBieSB7QGxpbmsgY29tLndvcmtmb3JjZXNvZnR3YXJlLkdlbi5Qb2xpY3kuVXNlcl9lbnRyeV9ydWxlX2RldGFpbCNnZXREaXNwbGF5X2Jhbmtfc2V0KCl9KVxuIiArCisgICAgICAgICAgICAgICAgICAgIiAgICAgKi9cbiIgKworICAgICAgICAgICAgICAgICAgICIgICAgcHVibGljIExpc3Q8QmFua0JhbGFuY2VSZXN1bHRzPiBnZXRCYW5rQmFsYW5jZVJlc3VsdHMoKSB7XG4iICsKKyAgICAgICAgICAgICAgICAgICAiICAgICAgcmV0dXJuIGJhbmtCYWxhbmNlUmVzdWx0cztcbiIgKworICAgICAgICAgICAgICAgICAgICIgICAgfVxuIiArCisgICAgICAgICAgICAgICAgICAgIlxuIiArCisgICAgICAgICAgICAgICAgICAgIiAgICBwdWJsaWMgQXBwcm92YWxfZXZlbnQgZ2V0TGFzdFZhbGlkRW1wbG95ZWVBcHByb3ZlRXZlbnQoKSB7XG4iICsKKyAgICAgICAgICAgICAgICAgICAiICAgICAgcmV0dXJuIGFwcHJvdmFsX2V2ZW50TGlzdC5nZXRMYXN0VmFsaWRFbXBsb3llZUFwcHJvdmVFdmVudCgpO1xuIiArCisgICAgICAgICAgICAgICAgICAgIiAgICB9XG4iICsKKyAgICAgICAgICAgICAgICAgICAiXG4iICsKKyAgICAgICAgICAgICAgICAgICAiICAgIHB1YmxpYyBUaW1lX3NoZWV0X2RldGFpbF9zcGxpdExpc3QgZ2V0VGltZV9zaGVldF9kZXRhaWxfc3BsaXRMaXN0KCkge1xuIiArCisgICAgICAgICAgICAgICAgICAgIiAgICAgIHJldHVybiBhY2QuZ2V0VGltZV9zaGVldCgpLmdldFRpbWVfc2hlZXRfZGV0YWlsX3NwbGl0TGlzdCgpLmdldFVubW9kaWZpYWJsZUxpc3QoKTtcbiIgKworICAgICAgICAgICAgICAgICAgICIgICAgfVxuIiArCisgICAgICAgICAgICAgICAgICAgIlxuIiArCisgICAgICAgICAgICAgICAgICAgIiAgICBwdWJsaWMgVGltZV9zaGVldF9kZXRhaWxMaXN0IGdldFRpbWVfc2hlZXRfZGV0YWlsTGlzdCgpIHtcbiIgKworICAgICAgICAgICAgICAgICAgICIgICAgICByZXR1cm4gYWNkLmdldFRpbWVfc2hlZXQoKS5nZXREZXRhaWxMaXN0KCkuZ2V0VW5tb2RpZmlhYmxlTGlzdCgpO1xuIiArCisgICAgICAgICAgICAgICAgICAgIiAgICB9XG4iICsKKyAgICAgICAgICAgICAgICAgICAiXG4iICsKKyAgICAgICAgICAgICAgICAgICAiICAgIHB1YmxpYyBTY2hlZHVsZV9kZXRhaWxMaXN0IGdldFNjaGVkdWxlX2RldGFpbExpc3QoKSB7XG4iICsKKyAgICAgICAgICAgICAgICAgICAiICAgICAgcmV0dXJuIGFjZC5nZXRTY2hlZHVsZSgpLmdldERldGFpbExpc3QoKS5nZXRVbm1vZGlmaWFibGVMaXN0KCk7XG4iICsKKyAgICAgICAgICAgICAgICAgICAiICAgIH1cbiIgKworICAgICAgICAgICAgICAgICAgICJcbiIgKworICAgICAgICAgICAgICAgICAgICIgICAgcHVibGljIFRpbWVfc2hlZXRfZXhjZXB0aW9uTGlzdCBnZXRUaW1lX3NoZWV0X2V4Y2VwdGlvbkxpc3QoKSB7XG4iICsKKyAgICAgICAgICAgICAgICAgICAiICAgICAgcmV0dXJuIGFjZC5nZXRUaW1lX3NoZWV0KCkuZ2V0VGltZV9zaGVldF9leGNlcHRpb25MaXN0KCkuZ2V0VW5tb2RpZmlhYmxlTGlzdCgpO1xuIiArCisgICAgICAgICAgICAgICAgICAgIiAgICB9XG4iICsKKyAgICAgICAgICAgICAgICAgICAiXG4iICsKKyAgICAgICAgICAgICAgICAgICAiICAgIHB1YmxpYyBMaXN0PFRpbWVfc2hlZXRfb3V0cHV0PiBnZXRUc29MaXN0Rm9yUGF5UHJldmlldygpIHtcbiIgKworICAgICAgICAgICAgICAgICAgICIgICAgICByZXR1cm4gdHNvTGlzdEZvclBheVByZXZpZXc7XG4iICsKKyAgICAgICAgICAgICAgICAgICAiICAgIH1cbiIgKworICAgICAgICAgICAgICAgICAgICJcbiIgKworICAgICAgICAgICAgICAgICAgICIgICAgcHVibGljIEFwcHJvdmFsX2V2ZW50TGlzdCBnZXRWYWxpZE1hbmFnZXJBcHByb3ZlRXZlbnRzKCkge1xuIiArCisgICAgICAgICAgICAgICAgICAgIiAgICAgIHJldHVybiBhcHByb3ZhbF9ldmVudExpc3QuZ2V0VmFsaWRNYW5hZ2VyQXBwcm92ZUV2ZW50cygpO1xuIiArCisgICAgICAgICAgICAgICAgICAgIiAgICB9XG4iICsKKyAgICAgICAgICAgICAgICAgICAiXG4iICsKKyAgICAgICAgICAgICAgICAgICAiICAgIHB1YmxpYyBUaW1lU2hlZXRJZGVudGlmaWVyIGdldFRpbWVTaGVldElkZW50aWZpZXIoKSB7XG4iICsKKyAgICAgICAgICAgICAgICAgICAiICAgICAgcmV0dXJuIHRpbWVTaGVldElkZW50aWZpZXI7XG4iICsKKyAgICAgICAgICAgICAgICAgICAiICAgIH1cbiIgKworICAgICAgICAgICAgICAgICAgICJcbiIgKworICAgICAgICAgICAgICAgICAgICIgICAgcHVibGljIEVtcGxveWVlUGVyaW9kSW5mbyBnZXRFbXBsb3llZVBlcmlvZEluZm8oKSB7XG4iICsKKyAgICAgICAgICAgICAgICAgICAiICAgICAgcmV0dXJuIGVtcGxveWVlUGVyaW9kSW5mbztcbiIgKworICAgICAgICAgICAgICAgICAgICIgICAgfVxuIiArCisgICAgICAgICAgICAgICAgICAgIlxuIiArCisgICAgICAgICAgICAgICAgICAgIiAgICBwdWJsaWMgRW1wbG95ZWVfbWFzdGVyIGdldEVtcGxveWVlTWFzdGVyKCkge1xuIiArCisgICAgICAgICAgICAgICAgICAgIiAgICAgIHJldHVybiBuZXcgRW1wbG95ZWVfbWFzdGVyKGFjZC5nZXRFbXBsb3llZV9tYXN0ZXIoKSk7XG4iICsKKyAgICAgICAgICAgICAgICAgICAiICAgIH1cbiIgKworICAgICAgICAgICAgICAgICAgICJcbiIgKworICAgICAgICAgICAgICAgICAgICIgICAgcHVibGljIEVtcGxveWVlIGdldEVtcGxveWVlKCkge1xuIiArCisgICAgICAgICAgICAgICAgICAgIiAgICAgIHJldHVybiBuZXcgRW1wbG95ZWUoYWNkLmdldEVtcGxveWVlX21hc3RlcigpLmdldEVtcGxveWVlQXNPZk9yQWZ0ZXIoZ2V0UFBFbmQoKSkpO1xuIiArCisgICAgICAgICAgICAgICAgICAgIiAgICB9XG4iICsKKyAgICAgICAgICAgICAgICAgICAiXG4iICsKKyAgICAgICAgICAgICAgICAgICAiICAgIHB1YmxpYyBBc2dubXRfbWFzdGVyIGdldEFzZ25tdE1hc3RlcigpIHtcbiIgKworICAgICAgICAgICAgICAgICAgICIgICAgICByZXR1cm4gbmV3IEFzZ25tdF9tYXN0ZXIoYWNkLmdldEFzZ25tdE1hc3RlcigpKTtcbiIgKworICAgICAgICAgICAgICAgICAgICIgICAgfVxuIiArCisgICAgICAgICAgICAgICAgICAgIlxuIiArCisgICAgICAgICAgICAgICAgICAgIiAgICBwdWJsaWMgQXNnbm10IGdldEFzZ25tdCgpIHtcbiIgKworICAgICAgICAgICAgICAgICAgICIgICAgICByZXR1cm4gbmV3IEFzZ25tdChhY2QuZ2V0QXNnbm10KCkpO1xuIiArCisgICAgICAgICAgICAgICAgICAgIiAgICB9XG4iICsKKyAgICAgICAgICAgICAgICAgICAiXG4iICsKKyAgICAgICAgICAgICAgICAgICAiICAgIHB1YmxpYyBXRGF0ZSBnZXRQUEVuZCgpIHtcbiIgKworICAgICAgICAgICAgICAgICAgICIgICAgICByZXR1cm4gZW1wbG95ZWVQZXJpb2RJbmZvLmdldFBwX2VuZCgpO1xuIiArCisgICAgICAgICAgICAgICAgICAgIiAgICB9XG4iICsKKyAgICAgICAgICAgICAgICAgICAiXG4iICsKKyAgICAgICAgICAgICAgICAgICAiICAgIHB1YmxpYyBXRGF0ZSBnZXRQUEJlZ2luKCkge1xuIiArCisgICAgICAgICAgICAgICAgICAgIiAgICAgIHJldHVybiBlbXBsb3llZVBlcmlvZEluZm8uZ2V0UHBfYmVnaW4oKTtcbiIgKworICAgICAgICAgICAgICAgICAgICIgICAgfVxuIiArCisgICAgICAgICAgICAgICAgICAgIlxuIiArCisgICAgICAgICAgICAgICAgICAgIiAgICBwdWJsaWMgUG9saWN5X3Byb2ZpbGUgZ2V0UG9saWN5X3Byb2ZpbGUoKSB7XG4iICsKKyAgICAgICAgICAgICAgICAgICAiICAgICAgcmV0dXJuIHBvbGljeVByb2ZpbGU7XG4iICsKKyAgICAgICAgICAgICAgICAgICAiICAgIH1cbiIgKworICAgICAgICAgICAgICAgICAgICJcbiIgKworICAgICAgICAgICAgICAgICAgICJcbiIgKworICAgICAgICAgICAgICAgICAgICIgICAgLyoqXG4iICsKKyAgICAgICAgICAgICAgICAgICAiICAgICAqIFJldHVybiBzdGF0ZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgdGltZXNoZWV0LCB3aGljaCBjb25zaWRlcnMgc2VjdXJpdHlcbiIgKworICAgICAgICAgICAgICAgICAgICIgICAgICogcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlIGN1cnJlbnQgc3RhdGUgKGxvY2tlZC9jbG9zZWQvYW1lbmRlZCkgaW4gcmVsYXRpb24gdG86XG4iICsKKyAgICAgICAgICAgICAgICAgICAiICAgICAqIDx1bD5cbiIgKworICAgICAgICAgICAgICAgICAgICIgICAgICogPGxpPkFwcF91c2VyIFJvbGVzIChhcHBfdXNlcl9yaWdodCBhbmQgcmlnaHRfZ3JwIHRhYmxlcylcbiIgKworICAgICAgICAgICAgICAgICAgICIgICAgICogPGxpPkFzc2lnbm1lbnQgZWZmZWN0aXZlIGRhdGVzXG4iICsKKyAgICAgICAgICAgICAgICAgICAiICAgICAqIDxsaT5FbXBsb3llZSByZWNvcmQgZWZmZWN0aXZlIGRhdGVzXG4iICsKKyAgICAgICAgICAgICAgICAgICAiICAgICAqIDxsaT5TeXN0ZW1fZmVhdHVyZSByZWFkL3dyaXRlIHByaXZpbGVnZXNcbiIgKworICAgICAgICAgICAgICAgICAgICIgICAgICogPGxpPkFwcHJvdmFsIGxldmVsIG9mIHRoZSB0aW1lc2hlZXRcbiIgKworICAgICAgICAgICAgICAgICAgICIgICAgICogPC91bD5cbiIgKworICAgICAgICAgICAgICAgICAgICIgICAgICpcbiIgKworICAgICAgICAgICAgICAgICAgICIgICAgICogQHJldHVybiBub3QgZXZlciBudWxsXG4iICsKKyAgICAgICAgICAgICAgICAgICAiICAgICAqL1xuIiArCisgICAgICAgICAgICAgICAgICAgIiAgICBwdWJsaWMgVGltZVNoZWV0U3RhdGUgZ2V0VGltZVNoZWV0U3RhdGUoKSB7XG4iICsKKyAgICAgICAgICAgICAgICAgICAiICAgICAgcmV0dXJuIHRpbWVTaGVldFN0YXRlO1xuIiArCisgICAgICAgICAgICAgICAgICAgIiAgICB9XG4iICsKKyAgICAgICAgICAgICAgICAgICAiXG4iICsKKyAgICAgICAgICAgICAgICAgICAiICAgIHB1YmxpYyBpbnQgZ2V0VmVyc2lvbk51bWJlcigpIHtcbiIgKworICAgICAgICAgICAgICAgICAgICIgICAgICByZXR1cm4gdGltZVNoZWV0SWRlbnRpZmllci5nZXRWZXJzaW9uKCk7XG4iICsKKyAgICAgICAgICAgICAgICAgICAiICAgIH1cbiIgKworICAgICAgICAgICAgICAgICAgICJcbiIgKworICAgICAgICAgICAgICAgICAgICIgICAgcHVibGljIFBheVBlcmlvZERhdGEgZ2V0UGF5UGVyaW9kRGF0YSgpIHtcbiIgKworICAgICAgICAgICAgICAgICAgICIgICAgICByZXR1cm4gYWNkLmdldFBheVBlcmlvZERhdGEoKTtcbiIgKworICAgICAgICAgICAgICAgICAgICIgICAgfVxuIiArCisgICAgICAgICAgICAgICAgICAgIlxuIiArCisgICAgICAgICAgICAgICAgICAgIiAgICBwdWJsaWMgYm9vbGVhbiBnZXRJc05ld2x5VXNlckFtZW5kZWQoKSB7XG4iICsKKyAgICAgICAgICAgICAgICAgICAiICAgICAgcmV0dXJuIGFjZC5pc05ld2x5VXNlckFtZW5kZWQoKTtcbiIgKworICAgICAgICAgICAgICAgICAgICIgICAgfVxuIiArCisgICAgICAgICAgICAgICAgICAgIlxuIiArCisgICAgICAgICAgICAgICAgICAgIiAgICBwdWJsaWMgTGlzdDxQYXlQZXJpb2RJbmZvPiBnZXRQYXlQZXJpb2RMaXN0KCkge1xuIiArCisgICAgICAgICAgICAgICAgICAgIiAgICAgIHJldHVybiBwYXlQZXJpb2RMaXN0O1xuIiArCisgICAgICAgICAgICAgICAgICAgIiAgICB9XG4iICsKKyAgICAgICAgICAgICAgICAgICAiXG4iICsKKyAgICAgICAgICAgICAgICAgICAiICAgIHByaXZhdGUgc3RhdGljIENvbGxlY3Rpb248RGJSZWNUaW1lX3NoZWV0X291dHB1dD4gY3JlYXRlQWRqdXN0bWVudHNQYWlkV2l0aFRpbWVzaGVldChBbGxDYWxjRGF0YU1hbmFnZXIgYWNkbSwgQWxsQ2FsY3VsYXRpb25EYXRhIGFjZCkge1xuIiArCisgICAgICAgICAgICAgICAgICAgIiAgICAgIHRyeSB7IHJldHVybiBDb2xsZWN0aW9ucy51bm1vZGlmaWFibGVDb2xsZWN0aW9uKGFjZG0uZ2V0QWRqdXN0bWVudHNQYWlkV2l0aFRpbWVzaGVldChhY2QpKTsgfVxuIiArCisgICAgICAgICAgICAgICAgICAgIiAgICAgIGNhdGNoIChTUUxFeGNlcHRpb24gZSkgeyB0aHJvdyBuZXcgSW50ZXJuYWxBcHBsaWNhdGlvbkV4Y2VwdGlvbihcIlVuZXhwZWN0ZWQgU1FMIEV4Y2VwdGlvblwiLCBlKTsgfVxuIiArCisgICAgICAgICAgICAgICAgICAgIiAgICB9XG4iICsKKyAgICAgICAgICAgICAgICAgICAiXG4iICsKKyAgICAgICAgICAgICAgICAgICAiICAgIHByaXZhdGUgdm9pZCBhc3NlcnRQYXlQZXJpb2RMaXN0KCkge1xuIiArCisgICAgICAgICAgICAgICAgICAgIiAgICAgIC8vVE9ETyAtIHByb2JhYmx5IG5lZWQgdG8gc2hvdyBhIFwibmljZVwiIG1lc3NhZ2UgdG8gdGhlIHVzZXIgc2F5aW5nIHRoYXQgdGhlIGVtcGxveWVlIGRvZXNuJ3RcbiIgKworICAgICAgICAgICAgICAgICAgICIgICAgICAvL1RPRE8gLSBoYXZlIGEgdmlld2FibGUvZWRpdGFibGUgcGF5IHBlcmlvZC5cbiIgKworICAgICAgICAgICAgICAgICAgICIgICAgICBpZihwYXlQZXJpb2RMaXN0LmlzRW1wdHkoKSkge1xuIiArCisgICAgICAgICAgICAgICAgICAgIiAgICAgICAgdGhyb3cgbmV3IEludGVybmFsQXBwbGljYXRpb25FeGNlcHRpb24oXCJObyB2aWV3YWJsZS9lZGl0YWJsZSBwYXkgcGVyaW9kcyBmb3VuZCBmb3IgZW1wbG95ZWUgXCJcbiIgKworICAgICAgICAgICAgICAgICAgICIgICAgICAgICAgICAgICAgKyBlbXBsb3llZVBlcmlvZEluZm8uZ2V0RW1wbG95ZWVNYXN0ZXIoKS5nZXRFbXBsb3llZSgpKTtcbiIgKworICAgICAgICAgICAgICAgICAgICIgICAgICB9XG4iICsKKyAgICAgICAgICAgICAgICAgICAiICAgIH1cbiIgKworICAgICAgICAgICAgICAgICAgICJcbiIgKworICAgICAgICAgICAgICAgICAgICIgICAgcHJpdmF0ZSBzdGF0aWMgU2V0PFdEYXRlPiBjcmVhdGVBcHByb3ZlZERheXMoQWxsQ2FsY3VsYXRpb25EYXRhIGFjZCkge1xuIiArCisgICAgICAgICAgICAgICAgICAgIiAgICAgIC8vIGNhbGN1bGF0ZSBkYXlzIGFwcHJvdmVkIGJ5IGRhaWx5IGFwcHJvdmFsc1xuIiArCisgICAgICAgICAgICAgICAgICAgIiAgICAgIFNldDxXRGF0ZT4gYXBwcm92ZWREYXlzID0gbmV3IEhhc2hTZXQ8V0RhdGU+KCk7XG4iICsKKyAgICAgICAgICAgICAgICAgICAiICAgICAgZm9yKCBXRGF0ZSBkYXRlIDogYWNkLmdldFBheVBlcmlvZERhdGEoKS5nZXRBY3RpdmVEYXRlcygpLmdldEFsbERhdGVzKCkgKSB7XG4iICsKKyAgICAgICAgICAgICAgICAgICAiICAgICAgICBpZiggYWNkLmlzRGF5QXBwcm92ZWQoZGF0ZSkgKSB7IGFwcHJvdmVkRGF5cy5hZGQoZGF0ZSk7IH1cbiIgKworICAgICAgICAgICAgICAgICAgICIgICAgICB9XG4iICsKKyAgICAgICAgICAgICAgICAgICAiICAgICAgcmV0dXJuIENvbGxlY3Rpb25zLnVubW9kaWZpYWJsZVNldChhcHByb3ZlZERheXMpO1xuIiArCisgICAgICAgICAgICAgICAgICAgIiAgICB9XG4iICsKKyAgICAgICAgICAgICAgICAgICAiXG4iICsKKyAgICAgICAgICAgICAgICAgICAiICAgIHByaXZhdGUgZmluYWwgQ29sbGVjdGlvbjxEYlJlY1RpbWVfc2hlZXRfb3V0cHV0PiBhZGp1c3RtZW50c1BhaWRXaXRoVGltZXNoZWV0O1xuIiArCisgICAgICAgICAgICAgICAgICAgIiAgICBwcml2YXRlIGZpbmFsIEFwcHJvdmFsX2V2ZW50TGlzdCBhcHByb3ZhbF9ldmVudExpc3Q7XG4iICsKKyAgICAgICAgICAgICAgICAgICAiICAgIHByaXZhdGUgZmluYWwgQXNzaWdubWVudFBlcmlvZFN0YXRlIGFzc2lnbm1lbnRQZXJpb2RTdGF0ZTtcbiIgKworICAgICAgICAgICAgICAgICAgICIgICAgcHJpdmF0ZSBmaW5hbCBMaXN0PEJhbmtCYWxhbmNlUmVzdWx0cz4gYmFua0JhbGFuY2VSZXN1bHRzO1xuIiArCisgICAgICAgICAgICAgICAgICAgIiAgICBwcml2YXRlIGZpbmFsIExpc3Q8VGltZV9zaGVldF9vdXRwdXQ+IHRzb0xpc3RGb3JQYXlQcmV2aWV3O1xuIiArCisgICAgICAgICAgICAgICAgICAgIiAgICBwcml2YXRlIGZpbmFsIFRpbWVTaGVldElkZW50aWZpZXIgdGltZVNoZWV0SWRlbnRpZmllcjtcbiIgKworICAgICAgICAgICAgICAgICAgICIgICAgcHJpdmF0ZSBmaW5hbCBUaW1lU2hlZXRTdGF0ZSB0aW1lU2hlZXRTdGF0ZTtcbiIgKworICAgICAgICAgICAgICAgICAgICIgICAgcHJpdmF0ZSBmaW5hbCBFbXBsb3llZVBlcmlvZEluZm8gZW1wbG95ZWVQZXJpb2RJbmZvO1xuIiArCisgICAgICAgICAgICAgICAgICAgIiAgICBwcml2YXRlIGZpbmFsIEFycmF5TGlzdDxQYXlQZXJpb2RJbmZvPiBwYXlQZXJpb2RMaXN0O1xuIiArCisgICAgICAgICAgICAgICAgICAgIiAgICBwcml2YXRlIGZpbmFsIFNldDxXRGF0ZT4gYXBwcm92ZWREYXlzO1xuIiArCisgICAgICAgICAgICAgICAgICAgIiAgICBwcml2YXRlIGZpbmFsIFBvbGljeV9wcm9maWxlIHBvbGljeVByb2ZpbGU7XG4iICsKKyAgICAgICAgICAgICAgICAgICAiICAgIHByaXZhdGUgZmluYWwgQWxsQ2FsY3VsYXRpb25EYXRhIGFjZDtcbiIgKworICAgICAgICAgICAgICAgICAgICIgIH1cbiIgKworICAgICAgICAgICAgICAgICAgICJcbiIgKworICAgICAgICAgICAgICAgICAgICIgIEFzc2lnbm1lbnRNYW5hZ2VyKEdlbmVyYXRlZElkIGFzc2lnbm1lbnRJZCwgU2V0PFRpbWVTaGVldElkZW50aWZpZXI+IHRpbWVTaGVldElkZW50aWZpZXJzLCBUaW1lRW50cnlQYXJtc1BlckFzc2lnbm1lbnQgcGFybXMpIHtcbiIgKworICAgICAgICAgICAgICAgICAgICIgICAgdGhpcy5hc2dubXRNYXN0ZXIgPSBnZXRBZ2dyZWdhdGVPclNpbmdsZUFzc2lnbm1lbnRNYXN0ZXIoYXNzaWdubWVudElkKTtcbiIgKworICAgICAgICAgICAgICAgICAgICIgICAgc2V0Q2xhc3NGaWVsZHMocGFybXMsIHRpbWVTaGVldElkZW50aWZpZXJzKTtcbiIgKworICAgICAgICAgICAgICAgICAgICIgIH1cbiIgKworICAgICAgICAgICAgICAgICAgICJcbiIgKworICAgICAgICAgICAgICAgICAgICIgIC8qKlxuIiArCisgICAgICAgICAgICAgICAgICAgIiAgICogT2J0YWlucyB0aGUgc2luZ2xlIG9yIGFnZ3JlZ2F0ZSBhc3NpZ25tZW50IG1hc3RlciBmb3IgdGhlIGdpdmVuIGFzc2lnbm1lbnRJZC4gIElmIHRoZSBnaXZlbiBhc3NpZ25tZW50SWQgaXMgbm90IGFcbiIgKworICAgICAgICAgICAgICAgICAgICIgICAqIHNpbmdsZSBvciBhZ2dyZWdhdGUgYXNzaWdubWVudCwgZmV0Y2hlcyB0aGUgYWdncmVnYXRlIGFzc29jaWF0ZWQgd2l0aCB0aGUgZ2l2ZW4gYXNzaWdubWVudElkIGFuZCByZXR1cm5zIHRoYXQuXG4iICsKKyAgICAgICAgICAgICAgICAgICAiICAgKlxuIiArCisgICAgICAgICAgICAgICAgICAgIiAgICogQHBhcmFtIGFzc2lnbm1lbnRJZCBJZCBvZiB0aGUgYXNzaWdtZW50IHRvIGxvYWQuXG4iICsKKyAgICAgICAgICAgICAgICAgICAiICAgKiBAcmV0dXJuIHRoZSBzaW5nbGUgb3IgYWdncmVnYXRlIGFzc2lnbm1lbnQgbWFzdGVyIGZvciB0aGUgZ2l2ZW4gYXNzaWdubWVudElkLlxuIiArCisgICAgICAgICAgICAgICAgICAgIiAgICovXG4iICsKKyAgICAgICAgICAgICAgICAgICAiICBwcml2YXRlIHN0YXRpYyBBc2dubXRfbWFzdGVyIGdldEFnZ3JlZ2F0ZU9yU2luZ2xlQXNzaWdubWVudE1hc3RlcihHZW5lcmF0ZWRJZCBhc3NpZ25tZW50SWQpIHtcbiIgKworICAgICAgICAgICAgICAgICAgICIgICAgQXNnbm10X21hc3RlciBhbSA9IEFzZ25tdF9tYXN0ZXIubG9hZChhc3NpZ25tZW50SWQpO1xuIiArCisgICAgICAgICAgICAgICAgICAgIiAgICBpZihhbS5pc0FnZ3JlZ2F0ZSgpIHx8IGFtLmlzU2luZ2xlKCkpIHtcbiIgKworICAgICAgICAgICAgICAgICAgICIgICAgICByZXR1cm4gYW07XG4iICsKKyAgICAgICAgICAgICAgICAgICAiICAgIH1cbiIgKworICAgICAgICAgICAgICAgICAgICJcbiIgKworICAgICAgICAgICAgICAgICAgICIgICAgLy9JZiBpdCdzIG5vdCBhIHNpbmdsZSBvciBhZ2dyZWdhdGUsIHdlIG5lZWQgdG8gbG9hZCB0aGUgYWdncmVnYXRlIGFuZCBsb2FkIHRoYXQuXG4iICsKKyAgICAgICAgICAgICAgICAgICAiICAgIHJldHVybiBBc2dubXRfbWFzdGVyLmxvYWQoYW0uZ2V0QWdncmVnYXRlX2FzZ25tdCgpKTtcbiIgKworICAgICAgICAgICAgICAgICAgICIgIH1cbiIgKworICAgICAgICAgICAgICAgICAgICJcbiIgKworICAgICAgICAgICAgICAgICAgICIgIEFnZ3JlZ2F0ZVRpbWVFbnRyeVRyYW5zYWN0aW9uUmVzdWx0cyBsb2FkKCkge1xuIiArCisgICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4gbG9hZEltcGwoKTtcbiIgKworICAgICAgICAgICAgICAgICAgICIgIH1cbiIgKworICAgICAgICAgICAgICAgICAgICJcbiIgKworICAgICAgICAgICAgICAgICAgICIgIC8qKlxuIiArCisgICAgICAgICAgICAgICAgICAgIiAgICogUmV2ZXJ0cyBhbnkgY2hhbmdlcyB0aGF0IGhhdmUgbm90IGJlZW4gY29tbWl0dGVkIHRvIHRoZSBkYXRhYmFzZSBvbiB0aGlzIEFzc2lnbm1lbnRNYW5hZ2VyXG4iICsKKyAgICAgICAgICAgICAgICAgICAiICAgKi9cbiIgKworICAgICAgICAgICAgICAgICAgICIgIHZvaWQgcmV2ZXJ0KCkge1xuIiArCisgICAgICAgICAgICAgICAgICAgIiAgICB1cGRhdGVkQWxsQ2FsY0RhdGFNYW5hZ2VyID0gbnVsbDtcbiIgKworICAgICAgICAgICAgICAgICAgICIgIH1cbiIgKworICAgICAgICAgICAgICAgICAgICJcbiIgKworICAgICAgICAgICAgICAgICAgICIgIC8qKlxuIiArCisgICAgICAgICAgICAgICAgICAgIiAgICogQHJldHVybiBSZXR1cm4gaW5pdGlhbCB0cmFuc2FjdGlvbiByZXN1bHRzIGZyb20gb3JpZ2luYWxBbGxDYWxjRGF0YSwgd2hpY2ggbXVzdCBiZSBzZXQgYmVmb3JlIGNhbGxpbmcgdGhpcy5cbiIgKworICAgICAgICAgICAgICAgICAgICIgICAqL1xuIiArCisgICAgICAgICAgICAgICAgICAgIiAgcHJpdmF0ZSBBZ2dyZWdhdGVUaW1lRW50cnlUcmFuc2FjdGlvblJlc3VsdHMgbG9hZEltcGwoKSB7XG4iICsKKyAgICAgICAgICAgICAgICAgICAiICAgIEFnZ3JlZ2F0ZVRpbWVFbnRyeVRyYW5zYWN0aW9uUmVzdWx0cyBhZ2dyZWdhdGVSZXN1bHRzID0gKEFnZ3JlZ2F0ZVRpbWVFbnRyeVRyYW5zYWN0aW9uUmVzdWx0cykgcGFybXMuZ2V0VGltZUVudHJ5UmVzdWx0c0ZhY3RvcnkoKS5uZXdJbnN0YW5jZSgpO1xuIiArCisgICAgICAgICAgICAgICAgICAgIiAgICBmb3IgKFRpbWVTaGVldElkZW50aWZpZXIgdGltZVNoZWV0SWQgOiBnZXRUaW1lU2hlZXRJZGVudGlmaWVycygpKSB7XG4iICsKKyAgICAgICAgICAgICAgICAgICAiICAgICAgQWxsQ2FsY3VsYXRpb25EYXRhIGFjZCA9IGdldE9yaWdpbmFsQWxsQ2FsY0RhdGEodGltZVNoZWV0SWQpO1xuIiArCisgICAgICAgICAgICAgICAgICAgIiAgICAgIC8vIE1ha2Ugc3VyZSBzeXN0ZW1fcmVjb3JkX2lkJ3MgYXJlIGFzc2lnbmVkIC0gVGltZUVudHJ5TWFuYWdlciBhbmQgY2xpZW50IGRvIG5vdCBmdW5jdGlvbiBjb3JyZWN0bHkgd2l0aG91dFxuIiArCisgICAgICAgICAgICAgICAgICAgIiAgICAgIGFzc2lnblN5c3RlbVJlY29yZElkcyhhY2QpO1xuIiArCisgICAgICAgICAgICAgICAgICAgIiAgICAgIENhbGNJbmZvIGNhbGNJbmZvID0gbmV3IENhbGNJbmZvKGdldE9yaWdpbmFsQWxsQ2FsY0RhdGFNYW5hZ2VyKHRpbWVTaGVldElkLmdldEFzZ25tdCgpKSwgYWNkLCB0aW1lU2hlZXRJZCwgcGFybXMpO1xuIiArCisgICAgICAgICAgICAgICAgICAgIiAgICAgIC8vdG9kby11dGUtbmF6aW0gZG8gd2UgcmVhbGx5IG5lZWQgdG8gcGVyZm9ybSBUaW1lU2hlZXREaWZmIGZvciB0aGUgaW5pdGlhbCBsb2FkID9cbiIgKworICAgICAgICAgICAgICAgICAgICIgICAgICBUaW1lRW50cnlUcmFuc2FjdGlvblJlc3VsdHMgc2luZ2xlVGltZVNoZWV0UmVzdWx0cyA9XG4iICsKKyAgICAgICAgICAgICAgICAgICAiICAgICAgICAgICAgICBuZXcgVGltZVNoZWV0RGlmZih0aW1lU2hlZXRJZCwgYWNkLCBjYWxjSW5mbywgVGltZVNoZWV0Q291bnRlcnMuZ2V0RW1wdHlDb3VudGVycygpLCBOZXdUb09sZElkTWFwLkVNUFRZLFxuIiArCisgICAgICAgICAgICAgICAgICAgIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29sbGVjdGlvbnMuRU1QVFlfTElTVCwgbmV3IFN0YXR1c01hcHNGb3JUaW1lc2hlZXRBbmRTY2hlZHVsZSgpLCB0cnVlLCBwYXJtcywgbnVsbCk7XG4iICsKKyAgICAgICAgICAgICAgICAgICAiICAgICAgYWdncmVnYXRlUmVzdWx0cy5hZGQoc2luZ2xlVGltZVNoZWV0UmVzdWx0cyk7XG4iICsKKyAgICAgICAgICAgICAgICAgICAiICAgIH1cbiIgKworICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIGFnZ3JlZ2F0ZVJlc3VsdHM7XG4iICsKKyAgICAgICAgICAgICAgICAgICAiICB9XG4iICsKKyAgICAgICAgICAgICAgICAgICAiXG4iICsKKyAgICAgICAgICAgICAgICAgICAiICAvKipcbiIgKworICAgICAgICAgICAgICAgICAgICIgICAqIEFzc2lnbiBzeXN0ZW1fcmVjb3JkX2lkJ3MgZm9yIHRpbWVfc2hlZXQsIHRpbWVfc2hlZXRfZGV0YWlsJ3MgYW5kIHRpbWVfc2hlZXRfZXhjZXB0aW9uJ3NcbiIgKworICAgICAgICAgICAgICAgICAgICIgICAqIEBwYXJhbSBhY2RcbiIgKworICAgICAgICAgICAgICAgICAgICIgICAqL1xuIiArCisgICAgICAgICAgICAgICAgICAgIiAgcHJpdmF0ZSB2b2lkIGFzc2lnblN5c3RlbVJlY29yZElkcyhBbGxDYWxjdWxhdGlvbkRhdGEgYWNkKSB7XG4iICsKKyAgICAgICAgICAgICAgICAgICAiICAgIGFzc2lnblN5c3RlbVJlY29yZElkKGFjZC5nZXRUaW1lX3NoZWV0KCkpO1xuIiArCisgICAgICAgICAgICAgICAgICAgIiAgICBhc3NpZ25TeXN0ZW1SZWNvcmRJZHMoYWNkLmdldFRpbWVfc2hlZXQoKS5nZXRUaW1lX3NoZWV0X2RldGFpbExpc3QoKSk7XG4iICsKKyAgICAgICAgICAgICAgICAgICAiICAgIGFzc2lnblN5c3RlbVJlY29yZElkcyhhY2QuZ2V0VGltZV9zaGVldCgpLmdldFRpbWVfc2hlZXRfZXhjZXB0aW9uTGlzdCgpKTtcbiIgKworICAgICAgICAgICAgICAgICAgICIgIH1cbiIgKworICAgICAgICAgICAgICAgICAgICJcbiIgKworICAgICAgICAgICAgICAgICAgICIgIC8qKlxuIiArCisgICAgICAgICAgICAgICAgICAgIiAgICogdG9kbzogc3RvcmUgdGhlIGV2ZW50LmdldENvbW1lbnQoKVxuIiArCisgICAgICAgICAgICAgICAgICAgIiAgICogQHBhcmFtIGV2ZW50XG4iICsKKyAgICAgICAgICAgICAgICAgICAiICAgKi9cbiIgKworICAgICAgICAgICAgICAgICAgICIgIEFnZ3JlZ2F0ZVRpbWVFbnRyeVRyYW5zYWN0aW9uUmVzdWx0cyBhbWVuZChUcmFuc2FjdGlvbkFwcHJvdmFsRXZlbnQgZXZlbnQpIHtcbiIgKworICAgICAgICAgICAgICAgICAgICIgICAgVGltZVNoZWV0SWRlbnRpZmllciBzaW5nbGVUaW1lU2hlZXRJZCA9IGV2ZW50LmdldFRpbWVTaGVldElkZW50aWZpZXIoKTtcbiIgKworICAgICAgICAgICAgICAgICAgICIgICAgLy9UT0RPOiBTaG91bGRuJ3QgdGhpcyBjYWxsIGNyZWF0ZU9yaWdpbmFsQWxsQ2FsY0RhdGFNYW5hZ2VySWZOZWVkZWQ/ICBTZWVtcyBsaWtlIHdlIG5lZWRsZXNzbHkgcmVsb2FkIHRoZSBvcmlnaW5hbFxuIiArCisgICAgICAgICAgICAgICAgICAgIiAgICAvL1RPRE86IEFDRE0uICBUaGlzIGlzIGJlY2F1c2UgYSB0aW1lc2hlZXQgd2hpY2ggd2FzIHByZXBhcmVkIGZvciBhbWVuZG1lbnQgY291bGRuJ3QgaGF2ZSBiZWVuIG1vZGlmaWVkIGJlZm9yZSBpdFxuIiArCisgICAgICAgICAgICAgICAgICAgIiAgICAvL1RPRE86IHdhcyBhbWVuZGVkLlxuIiArCisgICAgICAgICAgICAgICAgICAgIiAgICBpbnZhbGlkYXRlQWxsQ2FsY0RhdGFNYW5hZ2VycygpO1xuIiArCisgICAgICAgICAgICAgICAgICAgIlxuIiArCisgICAgICAgICAgICAgICAgICAgIiAgICAvLyBDcmVhdGUgdGhlIGFtZW5kZWQgQUNEIGFuZCBwdXQgaW50byB0aGUgQUNETSBjYWNoZVxuIiArCisgICAgICAgICAgICAgICAgICAgIiAgICBFbXBsb3llZVBlcmlvZEluZm8gZXBJbmZvID0gbnVsbDtcbiIgKworICAgICAgICAgICAgICAgICAgICIgICAgdHJ5IHtcbiIgKworICAgICAgICAgICAgICAgICAgICIgICAgICBBbGxDYWxjRGF0YU1hbmFnZXIgYWNkbSA9IGdldE9yaWdpbmFsQWxsQ2FsY0RhdGFNYW5hZ2VyKHNpbmdsZVRpbWVTaGVldElkLmdldEFzZ25tdCgpKTtcbiIgKworICAgICAgICAgICAgICAgICAgICIgICAgICBlcEluZm8gPSBhY2RtLmdldEVtcGxveWVlUGVyaW9kSW5mbyhzaW5nbGVUaW1lU2hlZXRJZC5nZXRQcEVuZCgpKTtcbiIgKworICAgICAgICAgICAgICAgICAgICIgICAgICBBbGxDYWxjdWxhdGlvbkRhdGEgYW1lbmRlZEFsbENhbGNEYXRhID0gYWNkbS5jcmVhdGVBbWVuZGVkQWxsQ2FsY0RhdGEoZXBJbmZvLCBwYXJtcy5nZXRBcHBfdXNlcigpLCBXRGF0ZVRpbWUubm93KCkpO1xuIiArCisgICAgICAgICAgICAgICAgICAgIiAgICAgIC8vIE5vIG5lZWQgdG8gaG9vayB0aGlzIHVwIHRvIGFwcHJvdmFsIGNoYW5nZSBsb2dpYywgc2luY2UgaXQgaXMgYW4gaW4tbWVtb3J5IGNoYW5nZSBzbyBmYXIuXG4iICsKKyAgICAgICAgICAgICAgICAgICAiICAgICAgLy9SZWNhbGN1bGF0ZSB0aGUgYW1lbmRlZCBBQ0Qgb2JqZWN0IHNvIHRoYXQgdGltZXNoZWV0IGV4Y2VwdGlvbnMgdGhhdCBhcmUgb24gdGhlIGNsb3NlZCB2ZXJzaW9uIChpZiBhbnkpXG4iICsKKyAgICAgICAgICAgICAgICAgICAiICAgICAgLy8gZ2V0IGNyZWF0ZWQgb24gdGhlIGFtZW5kZWQgdGltZXNoZWV0IGFzIHdlbGxcbiIgKworICAgICAgICAgICAgICAgICAgICIgICAgICBhbWVuZGVkQWxsQ2FsY0RhdGEucmVjYWxjKGFjZG0pO1xuIiArCisgICAgICAgICAgICAgICAgICAgIiAgICB9XG4iICsKKyAgICAgICAgICAgICAgICAgICAiICAgIGNhdGNoIChTUUxFeGNlcHRpb24gZSkge1xuIiArCisgICAgICAgICAgICAgICAgICAgIiAgICAgIHRocm93IG5ldyBJbnRlcm5hbEFwcGxpY2F0aW9uRXhjZXB0aW9uKFwiYW1lbmRpbmcgdGltZSBzaGVldCBmb3IgXCIgKyBzaW5nbGVUaW1lU2hlZXRJZCwgZSk7XG4iICsKKyAgICAgICAgICAgICAgICAgICAiICAgIH1cbiIgKworICAgICAgICAgICAgICAgICAgICIgICAgY2F0Y2ggKE11bHRpcGxlUm93RGJSZWNFeGNlcHRpb24gZSkge1xuIiArCisgICAgICAgICAgICAgICAgICAgIiAgICAgIHRocm93IG5ldyBJbnRlcm5hbEFwcGxpY2F0aW9uRXhjZXB0aW9uKFwiYW1lbmRpbmcgdGltZSBzaGVldCBmb3IgXCIgKyBzaW5nbGVUaW1lU2hlZXRJZCwgZSk7XG4iICsKKyAgICAgICAgICAgICAgICAgICAiICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7XG4iICsKKyAgICAgICAgICAgICAgICAgICAiICAgICAgdGhyb3cgbmV3IEludGVybmFsQXBwbGljYXRpb25FeGNlcHRpb24oXCJhbWVuZGluZyB0aW1lIHNoZWV0IGZvciBcIiArIHNpbmdsZVRpbWVTaGVldElkLCBlKTtcbiIgKworICAgICAgICAgICAgICAgICAgICIgICAgfVxuIiArCisgICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4gbG9hZEltcGwoKTtcbiIgKworICAgICAgICAgICAgICAgICAgICIgIH1cbiIgKworICAgICAgICAgICAgICAgICAgICJcbiIgKworICAgICAgICAgICAgICAgICAgICIgIFRpbWVTaGVldFRyYW5zYWN0aW9uQXBwbGllciBhcHBseVRyYW5zYWN0aW9uKFRpbWVTaGVldElkZW50aWZpZXIgaWQsIFRpbWVFbnRyeVRyYW5zYWN0aW9uIHRyYW5zKSB7XG4iICsKKyAgICAgICAgICAgICAgICAgICAiICAgIEFsbENhbGNEYXRhTWFuYWdlciB1cGRhdGVkQWNkbSA9IGdldFVwZGF0ZWRBbGxDYWxjRGF0YU1hbmFnZXIoaWQuZ2V0QXNnbm10KCkpO1xuIiArCisgICAgICAgICAgICAgICAgICAgIiAgICBBbGxDYWxjdWxhdGlvbkRhdGEgYWNkID0gZ2V0QWxsQ2FsY0RhdGEodXBkYXRlZEFjZG0sIGlkKTtcbiIgKworICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIG5ldyBUaW1lU2hlZXRUcmFuc2FjdGlvbkFwcGxpZXIodHJhbnMsIHVwZGF0ZWRBY2RtLCBhY2QsIHBhcm1zLCBpZCk7XG4iICsKKyAgICAgICAgICAgICAgICAgICAiICB9XG4iICsKKyAgICAgICAgICAgICAgICAgICAiXG4iICsKKyAgICAgICAgICAgICAgICAgICAiICBwcml2YXRlIHZvaWQgcmVjYWxjKFRpbWVTaGVldElkZW50aWZpZXIgdGltZVNoZWV0SWQsIEFwcHJvdmFsX2V2ZW50X3R5cGUgYXBwcm92YWxFdmVudFR5cGUpIHtcbiIgKworICAgICAgICAgICAgICAgICAgICIgICAgQWxsQ2FsY0RhdGFNYW5hZ2VyIHVwZGF0ZWRBY2RtID0gZ2V0VXBkYXRlZEFsbENhbGNEYXRhTWFuYWdlcih0aW1lU2hlZXRJZC5nZXRBc2dubXQoKSk7XG4iICsKKyAgICAgICAgICAgICAgICAgICAiICAgIEFsbENhbGN1bGF0aW9uRGF0YSBhY2QgPSBnZXRBbGxDYWxjRGF0YSh1cGRhdGVkQWNkbSwgdGltZVNoZWV0SWQpO1xuIiArCisgICAgICAgICAgICAgICAgICAgIiAgICB0cnkge1xuIiArCisgICAgICAgICAgICAgICAgICAgIiAgICAgIGlmIChhcHByb3ZhbEV2ZW50VHlwZSA9PSBBcHByb3ZhbF9ldmVudF90eXBlLlNBVkVfU0NIRURVTEUpIHtcbiIgKworICAgICAgICAgICAgICAgICAgICIgICAgICAgIC8vIGlmIHdlJ3JlIHNhdmluZyBhIGNoYW5nZSB0byB0aGUgc2NoZWR1bGUsIHRoZSB0aW1lc2hlZXQgbWlnaHQgbmVlZCB0byBiZSByZS1pbml0aWFsaXplZC5cbiIgKworICAgICAgICAgICAgICAgICAgICIgICAgICAgIGFjZC5yZWluaXRUaW1lU2hlZXQodXBkYXRlZEFjZG0sIHRydWUpO1xuIiArCisgICAgICAgICAgICAgICAgICAgIiAgICAgIH1cbiIgKworICAgICAgICAgICAgICAgICAgICIgICAgICBhY2QucmVjYWxjKHVwZGF0ZWRBY2RtKTtcbiIgKworICAgICAgICAgICAgICAgICAgICIgICAgfVxuIiArCisgICAgICAgICAgICAgICAgICAgIiAgICBjYXRjaCAoRXhjZXB0aW9uIGUpIHtcbiIgKworICAgICAgICAgICAgICAgICAgICIgICAgICB0aHJvdyBuZXcgSW50ZXJuYWxBcHBsaWNhdGlvbkV4Y2VwdGlvbihcImNhbGN1bGF0ZSBmb3IgXCIgKyB0aW1lU2hlZXRJZCwgZSk7XG4iICsKKyAgICAgICAgICAgICAgICAgICAiICAgIH1cbiIgKworICAgICAgICAgICAgICAgICAgICIgIH1cbiIgKworICAgICAgICAgICAgICAgICAgICJcbiIgKworICAgICAgICAgICAgICAgICAgICIgIC8qKlxuIiArCisgICAgICAgICAgICAgICAgICAgIiAgICogU2F2ZSBvbmUgdGltZXNoZWV0IHRvIGEgTGlzdFdyaXRlciB1c2luZyBBbGxDYWxjdWxhdGlvbkRhdGEuXG4iICsKKyAgICAgICAgICAgICAgICAgICAiICAgKiBAcGFyYW0gdGltZVNoZWV0SWRcbiIgKworICAgICAgICAgICAgICAgICAgICIgICAqIEBwYXJhbSBzYXZlRXZlbnRcbiIgKworICAgICAgICAgICAgICAgICAgICIgICAqIEB0aHJvd3MgRXhjZXB0aW9uXG4iICsKKyAgICAgICAgICAgICAgICAgICAiICAgKi9cbiIgKworICAgICAgICAgICAgICAgICAgICIgIHZvaWQgc2F2ZShUaW1lU2hlZXRJZGVudGlmaWVyIHRpbWVTaGVldElkLCBBcHByb3ZhbF9ldmVudF90eXBlIHNhdmVFdmVudCkgdGhyb3dzIEV4Y2VwdGlvbiB7XG4iICsKKyAgICAgICAgICAgICAgICAgICAiICAgIEdlbmVyYXRlZElkIGFzZ25tdElkID0gdGltZVNoZWV0SWQuZ2V0QXNnbm10KCk7XG4iICsKKyAgICAgICAgICAgICAgICAgICAiICAgIEFsbENhbGNEYXRhTWFuYWdlciBhY2RNZ3IgPSBnZXRVcGRhdGVkQWxsQ2FsY0RhdGFNYW5hZ2VyKGFzZ25tdElkKTtcbiIgKworICAgICAgICAgICAgICAgICAgICIgICAgQWxsQ2FsY3VsYXRpb25EYXRhIGFjZCA9IGdldEFsbENhbGNEYXRhKGFjZE1nciwgdGltZVNoZWV0SWQpO1xuIiArCisgICAgICAgICAgICAgICAgICAgIlxuIiArCisgICAgICAgICAgICAgICAgICAgIiAgICAvLyBUT0RPOiBpdCdkIGJlIG5pY2UgaWYgd2Ugd2VyZSBhYmxlIHRvIHJldHJ5IGEgc2F2ZSBpZiBpdCBmYWlsZWQgYmVjYXVzZSBvZiB1bnJlbGF0ZWQgY2hhbmdlcyAodG8gYWNjb21vZGF0ZSBmb3JcbiIgKworICAgICAgICAgICAgICAgICAgICIgICAgLy8gY29uY3VycmVudCBzYXZlIG9wZXJhdGlvbnMgb24gb3RoZXIgY29tcG9uZW50IHRpbWVzaGVldHMgYmVzaWRlcyB0aGUgb25lIHRoYXQgdGhlIHVzZXIgaXMgdHJ5aW5nIHRvIHNhdmUpXG4iICsKKyAgICAgICAgICAgICAgICAgICAiICAgIGZpbmFsIExpc3RXcml0ZXIgbHcgPSBuZXcgTGlzdFdyaXRlcigpO1xuIiArCisgICAgICAgICAgICAgICAgICAgIiAgICBhY2Quc2F2ZUFmdGVyQXBwbHlpbmdBcHByb3ZhbEV2ZW50KGFjZE1nciwgc2F2ZUV2ZW50LCBsdyk7XG4iICsKKyAgICAgICAgICAgICAgICAgICAiXG4iICsKKyAgICAgICAgICAgICAgICAgICAiICAgIC8vVGhlIGV4Y2VwdGlvbnMgbXVzdCBiZSBnZW5lcmF0ZWQgYWZ0ZXIgdGhlIEFDRCBoYXMgcGVyZm9ybWVkIGFwcHJvdmFsIHJlbGF0ZWQgb3BlcmF0aW9ucy5cbiIgKworICAgICAgICAgICAgICAgICAgICIgICAgLy8gTG9hZGluZyB0aGUgb3JpZ2luYWwgQUNEIHRvIGdldCB0aGUgdGltZXNoZWV0IG9iamVjdCBiZWZvcmUgdGhlIGFwcHJvdmFsLiBUaGlzIHdpbGwgYmUgdXNlZCB0byBkZXRlcm1pbmVcbiIgKworICAgICAgICAgICAgICAgICAgICIgICAgLy8gdGltZXNoZWV0J3MgYXBwcm92YWwgbGV2ZWwgYmVmb3JlIHRoaXMgc2F2ZSBldmVudC5cbiIgKworICAgICAgICAgICAgICAgICAgICIgICAgQWxsQ2FsY3VsYXRpb25EYXRhIG9yaWdpbmFsQWNkID0gZ2V0QWxsQ2FsY0RhdGEoZ2V0T3JpZ2luYWxBbGxDYWxjRGF0YU1hbmFnZXIoYXNnbm10SWQpLCB0aW1lU2hlZXRJZCk7XG4iICsKKyAgICAgICAgICAgICAgICAgICAiICAgIGFjZE1nci5nZW5lcmF0ZUV4Y2VwdGlvbk5vdGlmaWNhdGlvbnMoYWNkLCBvcmlnaW5hbEFjZC5nZXRUaW1lX3NoZWV0KCksIGFjZC5nZXRUaW1lX3NoZWV0KCksIGx3KTtcbiIgKworICAgICAgICAgICAgICAgICAgICIgICAgbHcud3JpdGVMaXN0cygpO1xuIiArCisgICAgICAgICAgICAgICAgICAgIlxuIiArCisgICAgICAgICAgICAgICAgICAgIiAgfVxuIiArCisgICAgICAgICAgICAgICAgICAgIlxuIiArCisgICAgICAgICAgICAgICAgICAgIiAgLyoqXG4iICsKKyAgICAgICAgICAgICAgICAgICAiICAgKiBJZiB0aW1lIHNoZWV0cyB3ZXJlIHNhdmVkIGFuZCB3cml0dGVuIHRvIHRoZSBkYXRhYmFzZSBzdWNjZXNzZnVsbHksIHVwZGF0ZSBpbnRlcm5hbCBkYXRhXG4iICsKKyAgICAgICAgICAgICAgICAgICAiICAgKiB0byByZWZsZWN0IHdoYXQncyBpbiB0aGUgZGF0YWJhc2UgYXMgdGhlIG5ldyBcIm9yaWdpbmFsXCIgZGF0YS5cbiIgKworICAgICAgICAgICAgICAgICAgICIgICAqL1xuIiArCisgICAgICAgICAgICAgICAgICAgIiAgdm9pZCBwb3N0U2F2ZSgpIHtcbiIgKworICAgICAgICAgICAgICAgICAgICIgICAgb3JpZ2luYWxBbGxDYWxjRGF0YU1hbmFnZXIgPSB1cGRhdGVkQWxsQ2FsY0RhdGFNYW5hZ2VyO1xuIiArCisgICAgICAgICAgICAgICAgICAgIiAgICB1cGRhdGVkQWxsQ2FsY0RhdGFNYW5hZ2VyID0gbnVsbDtcbiIgKworICAgICAgICAgICAgICAgICAgICIgIH1cbiIgKworICAgICAgICAgICAgICAgICAgICJcbiIgKworICAgICAgICAgICAgICAgICAgICIgIC8qKlxuIiArCisgICAgICAgICAgICAgICAgICAgIiAgICogUmV0dXJucyB0cnVlIGlmIHRoZSBnaXZlbiB0aW1lc2hlZXQgY29udGFpbnMgZXhjZXB0aW9ucyB0aGF0IHNob3VsZCBwcmV2ZW50IHNhdmUuXG4iICsKKyAgICAgICAgICAgICAgICAgICAiICAgKiBAcGFyYW0gdGltZVNoZWV0SWQgdGltZSBzaGVldCBJRFxuIiArCisgICAgICAgICAgICAgICAgICAgIiAgICogQHJldHVybiB0cnVlIGlmIGV4Y2VwdGlvbnMgZXhpc3QgdGhhdCBzaG91bGQgcHJldmVudCBzYXZlLCBmYWxzZSBvdGhlcndpc2UuXG4iICsKKyAgICAgICAgICAgICAgICAgICAiICAgKi9cbiIgKworICAgICAgICAgICAgICAgICAgICIgIGJvb2xlYW4gaGFzRXhjZXB0aW9uc1ByZXZlbnRpbmdTYXZlKFRpbWVTaGVldElkZW50aWZpZXIgdGltZVNoZWV0SWQpIHtcbiIgKworICAgICAgICAgICAgICAgICAgICIgICAgQWxsQ2FsY3VsYXRpb25EYXRhIGFjZCA9IGdldFVwZGF0ZWRBbGxDYWxjRGF0YSh0aW1lU2hlZXRJZCk7XG4iICsKKyAgICAgICAgICAgICAgICAgICAiICAgIHRyeSB7XG4iICsKKyAgICAgICAgICAgICAgICAgICAiICAgICAgcmV0dXJuIGFjZC5nZXRUaW1lX3NoZWV0KCkuZ2V0VGltZV9zaGVldF9leGNlcHRpb25MaXN0KCkuZ2V0RGlzYWxsb3dfdGltZXNoZWV0X3NhdmUoYWNkLmdldEFsbFBvbGljaWVzKCkpO1xuIiArCisgICAgICAgICAgICAgICAgICAgIiAgICB9XG4iICsKKyAgICAgICAgICAgICAgICAgICAiICAgIGNhdGNoIChQb2xpY3lMb29rdXBSZXF1aXJlZEV4Y2VwdGlvbiBlKSB7XG4iICsKKyAgICAgICAgICAgICAgICAgICAiICAgICAgdGhyb3cgbmV3IEludGVybmFsQXBwbGljYXRpb25FeGNlcHRpb24oXCJQb2xpY3kgZXJyb3Igb24gdGltZXNoZWV0IFwiICsgdGltZVNoZWV0SWQpO1xuIiArCisgICAgICAgICAgICAgICAgICAgIiAgICB9XG4iICsKKyAgICAgICAgICAgICAgICAgICAiICB9XG4iICsKKyAgICAgICAgICAgICAgICAgICAiXG4iICsKKyAgICAgICAgICAgICAgICAgICAiICAvKipcbiIgKworICAgICAgICAgICAgICAgICAgICIgICAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgZ2l2ZW4gdGltZXNoZWV0IGNvbnRhaW5zIGV4Y2VwdGlvbnMgdGhhdCBzaG91bGQgcHJldmVudCBzdWJtaXQuXG4iICsKKyAgICAgICAgICAgICAgICAgICAiICAgKiBAcGFyYW0gdGltZVNoZWV0SWQgdGltZSBzaGVldCBJRFxuIiArCisgICAgICAgICAgICAgICAgICAgIiAgICogQHJldHVybiB0cnVlIGlmIGV4Y2VwdGlvbnMgZXhpc3QgdGhhdCBzaG91bGQgcHJldmVudCBzdWJtaXQsIGZhbHNlIG90aGVyd2lzZS5cbiIgKworICAgICAgICAgICAgICAgICAgICIgICAqL1xuIiArCisgICAgICAgICAgICAgICAgICAgIiAgYm9vbGVhbiBoYXNFeGNlcHRpb25zUHJldmVudGluZ1N1Ym1pdChUaW1lU2hlZXRJZGVudGlmaWVyIHRpbWVTaGVldElkKSB7XG4iICsKKyAgICAgICAgICAgICAgICAgICAiICAgIEFsbENhbGN1bGF0aW9uRGF0YSBhY2QgPSBnZXRVcGRhdGVkQWxsQ2FsY0RhdGEodGltZVNoZWV0SWQpO1xuIiArCisgICAgICAgICAgICAgICAgICAgIiAgICB0cnkge1xuIiArCisgICAgICAgICAgICAgICAgICAgIiAgICAgIHJldHVybiBhY2QuZ2V0VGltZV9zaGVldCgpLmdldFRpbWVfc2hlZXRfZXhjZXB0aW9uTGlzdCgpLmdldERpc2FsbG93X3RpbWVzaGVldF9zdWJtaXQoYWNkLmdldEFsbFBvbGljaWVzKCkpO1xuIiArCisgICAgICAgICAgICAgICAgICAgIiAgICB9XG4iICsKKyAgICAgICAgICAgICAgICAgICAiICAgIGNhdGNoIChQb2xpY3lMb29rdXBSZXF1aXJlZEV4Y2VwdGlvbiBlKSB7XG4iICsKKyAgICAgICAgICAgICAgICAgICAiICAgICAgdGhyb3cgbmV3IEludGVybmFsQXBwbGljYXRpb25FeGNlcHRpb24oXCJQb2xpY3kgZXJyb3Igb24gdGltZXNoZWV0IFwiICsgdGltZVNoZWV0SWQpO1xuIiArCisgICAgICAgICAgICAgICAgICAgIiAgICB9XG4iICsKKyAgICAgICAgICAgICAgICAgICAiICB9XG4iICsKKyAgICAgICAgICAgICAgICAgICAiXG4iICsKKyAgICAgICAgICAgICAgICAgICAiICAvKipcbiIgKworICAgICAgICAgICAgICAgICAgICIgICAqIENvbXB1dGUge0BsaW5rIFRpbWVFbnRyeVRyYW5zYWN0aW9uUmVzdWx0c30gY2hhbmdlcyB0byBiZSByZXR1cm5lZCBpbiBjbGllbnQuXG4iICsKKyAgICAgICAgICAgICAgICAgICAiICAgKiBAcGFyYW0gdGltZVNoZWV0SWRcbiIgKworICAgICAgICAgICAgICAgICAgICIgICAqIEBwYXJhbSB0cmFucyB0cmFuc2FjdGlvbiB3aGljaCBjbGllbnQganVzdCBzZW50XG4iICsKKyAgICAgICAgICAgICAgICAgICAiICAgKiBAcGFyYW0gYXBwbHlSZXN1bHRzIHJlc3VsdHMgKGVycm9ycykgb2YgYXBwbHlpbmcgdGhlIHRyYW5zYWN0aW9uXG4iICsKKyAgICAgICAgICAgICAgICAgICAiICAgKiBAcGFyYW0gdGltZVNoZWV0U2F2ZWRTdGF0dXMgYSBzdGF0dXMgdG8gYmUgYWRkZWQgcmVwcmVzZW50aW5nIHRoZSBzYXZlIHJlc3VsdHMgLSBTQVZFRCBvciBFUlJPUiwgb3IgbnVsbCBpZiBub25lLlxuIiArCisgICAgICAgICAgICAgICAgICAgIiAgICogQHBhcmFtIHRyYW5zYWN0aW9uU3VjY2Vzc2Z1bCB2YWx1ZSBmb3Ige0BsaW5rIFRpbWVFbnRyeVRyYW5zYWN0aW9uUmVzdWx0cyNnZXRUcmFuc2FjdGlvbldhc1N1Y2Nlc3NmdWx9LlxuIiArCisgICAgICAgICAgICAgICAgICAgIiAgICovXG4iICsKKyAgICAgICAgICAgICAgICAgICAiICBUaW1lU2hlZXREaWZmIGdldERpZmYoVGltZVNoZWV0SWRlbnRpZmllciB0aW1lU2hlZXRJZCwgVGltZUVudHJ5VHJhbnNhY3Rpb24gdHJhbnMsXG4iICsKKyAgICAgICAgICAgICAgICAgICAiICAgICAgICAgICAgICAgICAgICAgICAgVGltZVNoZWV0VHJhbnNhY3Rpb25BcHBsaWVyIGFwcGx5UmVzdWx0cywgVHJhbnNhY3Rpb25TdGF0dXMgdGltZVNoZWV0U2F2ZWRTdGF0dXMsXG4iICsKKyAgICAgICAgICAgICAgICAgICAiICAgICAgICAgICAgICAgICAgICAgICAgYm9vbGVhbiB0cmFuc2FjdGlvblN1Y2Nlc3NmdWwpXG4iICsKKyAgICAgICAgICAgICAgICAgICAiICB7XG4iICsKKyAgICAgICAgICAgICAgICAgICAiICAgIEFsbENhbGNEYXRhTWFuYWdlciBhY2RtID0gZ2V0TGF0ZXN0QWxsQ2FsY0RhdGFNYW5hZ2VyKHRpbWVTaGVldElkLmdldEFzZ25tdCgpKTtcbiIgKworICAgICAgICAgICAgICAgICAgICIgICAgQWxsQ2FsY3VsYXRpb25EYXRhIGFjZCA9IGdldEFsbENhbGNEYXRhKGFjZG0sIHRpbWVTaGVldElkKTtcbiIgKworICAgICAgICAgICAgICAgICAgICIgICAgTmV3VG9PbGRJZE1hcCBuZXdUb09sZElkTWFwID0gYXBwbHlSZXN1bHRzLmdldE5ld1RvT2xkSWRNYXAoKTtcbiIgKworICAgICAgICAgICAgICAgICAgICIgICAgU3RhdHVzTWFwc0ZvclRpbWVzaGVldEFuZFNjaGVkdWxlIHRpbWVTaGVldFJvd1N0YXR1c01hcCA9IGFwcGx5UmVzdWx0cy5nZXRUaW1lRW50cnlSb3dFcnJvck1hcCgpO1xuIiArCisgICAgICAgICAgICAgICAgICAgIlxuIiArCisgICAgICAgICAgICAgICAgICAgIiAgICBpZiAoY2F0LmlzRGVidWdFbmFibGVkKCkpIHtcbiIgKworICAgICAgICAgICAgICAgICAgICIgICAgICBPYmplY3REdW1wZXIuZGVidWcoY2F0LCBcIlRpbWVTaGVldERpZmYgZ2V0RGlmZiBiZWZvcmVcIiwgdGltZVNoZWV0Um93U3RhdHVzTWFwLCBudWxsLCB0cnVlKTtcbiIgKworICAgICAgICAgICAgICAgICAgICIgICAgfVxuIiArCisgICAgICAgICAgICAgICAgICAgIlxuIiArCisgICAgICAgICAgICAgICAgICAgIiAgICBMaXN0PFRyYW5zYWN0aW9uU3RhdHVzPiB0aW1lU2hlZXRTdGF0dXNlcyA9IG5ldyBBcnJheUxpc3Q8VHJhbnNhY3Rpb25TdGF0dXM+KGFwcGx5UmVzdWx0cy5nZXRUaW1lU2hlZXRFcnJvcnMoKSk7XG4iICsKKyAgICAgICAgICAgICAgICAgICAiICAgIFRpbWVTaGVldENvdW50ZXJzIGNvdW50ZXJzID0gbmV3IFRpbWVTaGVldENvdW50ZXJzKHRyYW5zLCB0aW1lU2hlZXRJZCwgbmV3VG9PbGRJZE1hcCk7XG4iICsKKyAgICAgICAgICAgICAgICAgICAiICAgIGlmICh0aW1lU2hlZXRTYXZlZFN0YXR1cyAhPSBudWxsKSB7XG4iICsKKyAgICAgICAgICAgICAgICAgICAiICAgICAgdGltZVNoZWV0U3RhdHVzZXMuYWRkKHRpbWVTaGVldFNhdmVkU3RhdHVzKTtcbiIgKworICAgICAgICAgICAgICAgICAgICIgICAgICBpZiAodGltZVNoZWV0U2F2ZWRTdGF0dXMuZ2V0VHJhbnNhY3Rpb25fc3RhdHVzKCkgPT0gVHJhbnNhY3Rpb25fc3RhdHVzLlNBVkVEIHx8XG4iICsKKyAgICAgICAgICAgICAgICAgICAiICAgICAgICAgICAgICB0aW1lU2hlZXRTYXZlZFN0YXR1cy5nZXRUcmFuc2FjdGlvbl9zdGF0dXMoKSA9PSBUcmFuc2FjdGlvbl9zdGF0dXMuRVJST1IpIHtcbiIgKworICAgICAgICAgICAgICAgICAgICIgICAgICAgIC8vIGlmIHdlIHNhdmVkIG9yIHRoZXJlIGlzIGFuIGVycm9yIG1hcmsgZXZlcnkgVGltZUVudHJ5Um93IGluIHRoZSB0cmFuc2FjdGlvbiBhcyBzdWNoLlxuIiArCisgICAgICAgICAgICAgICAgICAgIiAgICAgICAgLy8gZ2V0IGFsbCByb3cgaWQncyBmcm9tIHRoZSB0cmFuc2FjdGlvbiAobmV3IGlkJ3MgLSBub3QgdGVtcCBpZCdzKVxuIiArCisgICAgICAgICAgICAgICAgICAgIiAgICAgICAgQ29sbGVjdGlvbiB0cmFuc1RpbWVTaGVldFJvd0lkcyA9IGFwcGx5UmVzdWx0cy5nZXRUcmFuc2FjdGlvblRpbWVTaGVldFJvd0lkcygpO1xuIiArCisgICAgICAgICAgICAgICAgICAgIiAgICAgICAgQ29sbGVjdGlvbiB0cmFuc1NjaGVkdWxlUm93SWRzID0gYXBwbHlSZXN1bHRzLmdldFRyYW5zYWN0aW9uU2NoZWR1bGVSb3dJZHMoKTtcbiIgKworICAgICAgICAgICAgICAgICAgICIgICAgICAgIHRpbWVTaGVldFJvd1N0YXR1c01hcCA9IG5ldyBTdGF0dXNNYXBzRm9yVGltZXNoZWV0QW5kU2NoZWR1bGUodHJhbnNUaW1lU2hlZXRSb3dJZHMsIHRyYW5zU2NoZWR1bGVSb3dJZHMsIHRpbWVTaGVldFNhdmVkU3RhdHVzKTtcbiIgKworICAgICAgICAgICAgICAgICAgICIgICAgICAgIHRpbWVTaGVldFJvd1N0YXR1c01hcC5hZGRBbGwoYXBwbHlSZXN1bHRzLmdldFRpbWVFbnRyeVJvd0Vycm9yTWFwKCkpO1xuIiArCisgICAgICAgICAgICAgICAgICAgIiAgICAgIH1cbiIgKworICAgICAgICAgICAgICAgICAgICIgICAgfVxuIiArCisgICAgICAgICAgICAgICAgICAgIlxuIiArCisgICAgICAgICAgICAgICAgICAgIiAgICBpZiAoY2F0LmlzRGVidWdFbmFibGVkKCkpIHtcbiIgKworICAgICAgICAgICAgICAgICAgICIgICAgICBPYmplY3REdW1wZXIuZGVidWcoY2F0LCBcIlRpbWVTaGVldERpZmYgZ2V0RGlmZiBhZnRlclwiLCB0aW1lU2hlZXRSb3dTdGF0dXNNYXAsIG51bGwsIHRydWUpO1xuIiArCisgICAgICAgICAgICAgICAgICAgIiAgICB9XG4iICsKKyAgICAgICAgICAgICAgICAgICAiXG4iICsKKyAgICAgICAgICAgICAgICAgICAiICAgIENhbGNJbmZvIGNhbGNJbmZvID0gbmV3IENhbGNJbmZvKGFjZG0sIGFjZCwgdGltZVNoZWV0SWQsIHBhcm1zKTtcbiIgKworICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIG5ldyBUaW1lU2hlZXREaWZmKHRpbWVTaGVldElkLCBhY2QsIGNhbGNJbmZvLCBjb3VudGVycywgbmV3VG9PbGRJZE1hcCwgdGltZVNoZWV0U3RhdHVzZXMsXG4iICsKKyAgICAgICAgICAgICAgICAgICAiICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lU2hlZXRSb3dTdGF0dXNNYXAsIHRyYW5zYWN0aW9uU3VjY2Vzc2Z1bCwgcGFybXMsIHRyYW5zKTtcbiIgKworICAgICAgICAgICAgICAgICAgICIgIH1cbiIgKworICAgICAgICAgICAgICAgICAgICJcbiIgKworICAgICAgICAgICAgICAgICAgICIgIFRpbWVTaGVldENhbGN1bGF0aW9uSW5mbyBnZXRDYWxjdWxhdGlvbkluZm8oVGltZVNoZWV0SWRlbnRpZmllciB0aW1lU2hlZXRJZGVudGlmaWVyKSB7XG4iICsKKyAgICAgICAgICAgICAgICAgICAiICAgIHZhbGlkYXRlKHRpbWVTaGVldElkZW50aWZpZXIpO1xuIiArCisgICAgICAgICAgICAgICAgICAgIiAgICBmaW5hbCBBbGxDYWxjRGF0YU1hbmFnZXIgYWNkbSA9IGdldExhdGVzdEFsbENhbGNEYXRhTWFuYWdlcih0aW1lU2hlZXRJZGVudGlmaWVyLmdldEFzZ25tdCgpKTtcbiIgKworICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIG5ldyBDYWxjSW5mbyhhY2RtLCBnZXRBbGxDYWxjRGF0YShhY2RtLCB0aW1lU2hlZXRJZGVudGlmaWVyKSwgdGltZVNoZWV0SWRlbnRpZmllciwgcGFybXMpO1xuIiArCisgICAgICAgICAgICAgICAgICAgIiAgfVxuIiArCisgICAgICAgICAgICAgICAgICAgIlxuIiArCisgICAgICAgICAgICAgICAgICAgIiAgLyoqXG4iICsKKyAgICAgICAgICAgICAgICAgICAiICAgKiBSZXR1cm4gdGhlIGNhbGN1bGF0aW9uIGluZm8gd2l0aG91dCBhdXRvLWFtZW5kaW5nXG4iICsKKyAgICAgICAgICAgICAgICAgICAiICAgKiBAcGFyYW0gYWNkbVxuIiArCisgICAgICAgICAgICAgICAgICAgIiAgICogQHBhcmFtIHRpbWVTaGVldElkZW50aWZpZXJcbiIgKworICAgICAgICAgICAgICAgICAgICIgICAqIEByZXR1cm5cbiIgKworICAgICAgICAgICAgICAgICAgICIgICAqL1xuIiArCisgICAgICAgICAgICAgICAgICAgIiAgcHJpdmF0ZSBUaW1lU2hlZXRDYWxjdWxhdGlvbkluZm8gZ2V0Q2FsY3VsYXRpb25JbmZvKEFsbENhbGNEYXRhTWFuYWdlciBhY2RtLCBUaW1lU2hlZXRJZGVudGlmaWVyIHRpbWVTaGVldElkZW50aWZpZXIpIHtcbiIgKworICAgICAgICAgICAgICAgICAgICIgICAgdmFsaWRhdGUodGltZVNoZWV0SWRlbnRpZmllcik7XG4iICsKKyAgICAgICAgICAgICAgICAgICAiICAgIHRyeSB7XG4iICsKKyAgICAgICAgICAgICAgICAgICAiICAgICAgcmV0dXJuIG5ldyBDYWxjSW5mbyhhY2RtLCBhY2RtLmdldEFsbENhbGNEYXRhKHRpbWVTaGVldElkZW50aWZpZXIuZ2V0UHBFbmQoKSwgdGltZVNoZWV0SWRlbnRpZmllci5nZXRWZXJzaW9uKCkpLCB0aW1lU2hlZXRJZGVudGlmaWVyLCBwYXJtcyk7XG4iICsKKyAgICAgICAgICAgICAgICAgICAiICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7XG4iICsKKyAgICAgICAgICAgICAgICAgICAiICAgICAgdGhyb3cgbmV3IEludGVybmFsQXBwbGljYXRpb25FeGNlcHRpb24oXCJFcnJvciBjcmVhdGluZyBDYWxjSW5mbyBcIiwgZSk7IFxuIiArCisgICAgICAgICAgICAgICAgICAgIiAgICB9XG4iICsKKyAgICAgICAgICAgICAgICAgICAiICB9XG4iICsKKyAgICAgICAgICAgICAgICAgICAiXG4iICsKKyAgICAgICAgICAgICAgICAgICAiICBwcml2YXRlIHZvaWQgaW52YWxpZGF0ZUFsbENhbGNEYXRhTWFuYWdlcnMoKSB7XG4iICsKKyAgICAgICAgICAgICAgICAgICAiICAgIG9yaWdpbmFsQWxsQ2FsY0RhdGFNYW5hZ2VyID0gbnVsbDtcbiIgKworICAgICAgICAgICAgICAgICAgICIgICAgdXBkYXRlZEFsbENhbGNEYXRhTWFuYWdlciA9IG51bGw7XG4iICsKKyAgICAgICAgICAgICAgICAgICAiICB9XG4iICsKKyAgICAgICAgICAgICAgICAgICAiXG4iICsKKyAgICAgICAgICAgICAgICAgICAiICBwcml2YXRlIHZvaWQgY3JlYXRlVXBkYXRlZEFsbENhbGNEYXRhTWFuYWdlcihTZXQ8VGltZVNoZWV0SWRlbnRpZmllcj4gdGltZVNoZWV0SWRzKSB7XG4iICsKKyAgICAgICAgICAgICAgICAgICAiICAgIEFsbENhbGNEYXRhTWFuYWdlciBvcmlnQWNkTWdyID0gZ2V0T3JpZ2luYWxBbGxDYWxjRGF0YU1hbmFnZXIoYXNnbm10TWFzdGVyLmdldEFzZ25tdCgpKTtcbiIgKworICAgICAgICAgICAgICAgICAgICIgICAgdHJ5IHtcbiIgKworICAgICAgICAgICAgICAgICAgICIgICAgICBXRGF0ZUxpc3QgZGF0ZUxpc3QgPSBuZXcgV0RhdGVMaXN0KCk7XG4iICsKKyAgICAgICAgICAgICAgICAgICAiICAgICAgZm9yKFRpbWVTaGVldElkZW50aWZpZXIgaWQgOiB0aW1lU2hlZXRJZHMpIHtcbiIgKworICAgICAgICAgICAgICAgICAgICIgICAgICAgIGRhdGVMaXN0LmFkZChpZC5nZXRQcEVuZCgpKTtcbiIgKworICAgICAgICAgICAgICAgICAgICIgICAgICB9XG4iICsKKyAgICAgICAgICAgICAgICAgICAiICAgICAgdXBkYXRlZEFsbENhbGNEYXRhTWFuYWdlciA9IG9yaWdBY2RNZ3IuY29weUZvclVwZGF0ZShkYXRlTGlzdCk7XG4iICsKKyAgICAgICAgICAgICAgICAgICAiICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7XG4iICsKKyAgICAgICAgICAgICAgICAgICAiICAgICAgdGhyb3cgbmV3IEludGVybmFsQXBwbGljYXRpb25FeGNlcHRpb24oXCJDbG9uaW5nIGZvciBcIiArIHRpbWVTaGVldElkcywgZSk7XG4iICsKKyAgICAgICAgICAgICAgICAgICAiICAgIH1cbiIgKworICAgICAgICAgICAgICAgICAgICIgIH1cbiIgKworICAgICAgICAgICAgICAgICAgICJcbiIgKworICAgICAgICAgICAgICAgICAgICIgIHByaXZhdGUgdm9pZCB2YWxpZGF0ZShUaW1lU2hlZXRJZGVudGlmaWVyIHRpbWVTaGVldElkKSB0aHJvd3MgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIHtcbiIgKworICAgICAgICAgICAgICAgICAgICIgICAgaWYgKCF0aW1lU2hlZXRJZGVudGlmaWVycy5jb250YWlucyh0aW1lU2hlZXRJZCkpIHtcbiIgKworICAgICAgICAgICAgICAgICAgICIgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKFwiSW52YWxpZCB0aW1lIHNoZWV0IHNwZWNpZmllZDogXCIgKyB0aW1lU2hlZXRJZFxuIiArCisgICAgICAgICAgICAgICAgICAgIiAgICAgICAgKyBcIi4gbm90IGluIFwiICsgdGltZVNoZWV0SWRlbnRpZmllcnMpO1xuIiArCisgICAgICAgICAgICAgICAgICAgIiAgICB9XG4iICsKKyAgICAgICAgICAgICAgICAgICAiICB9XG4iICsKKyAgICAgICAgICAgICAgICAgICAiXG4iICsKKyAgICAgICAgICAgICAgICAgICAiICAvKipcbiIgKworICAgICAgICAgICAgICAgICAgICIgICAqIE9idGFpbnMgdGhlIG9yaWdpbmFsIEFsbENhbGNEYXRhTWFuYWdlciBmb3IgdGhlIGdpdmVuIGFzc2lnbm1lbnQgSWQuICBUaGUgYXNzaWdubWVudCBpZCBtdXN0IGJlIGdpdmVuIGJlY2F1c2UgaW4gYVxuIiArCisgICAgICAgICAgICAgICAgICAgIiAgICogbXVsdGlwbGUgYXNzaWdubWVudCBlbnZpcm9ubWVudCwgYSBzcGVjaWZpYyBjb21wb25lbnQgbmVlZHMgdG8gYmUgcmVxdWVzdGVkLCBhcyBvcmlnaW5hbEFsbENhbGNEYXRhTWFuYWdlciByZWZlcnNcbiIgKworICAgICAgICAgICAgICAgICAgICIgICAqIHRvIHRoZSBhZ2dyZWdhdGUgYXNzaWdubWVudC5cbiIgKworICAgICAgICAgICAgICAgICAgICIgICAqXG4iICsKKyAgICAgICAgICAgICAgICAgICAiICAgKiBAcGFyYW0gYXNnbm10SWQgVGhlIGlkIG9mIHRoZSBhc3NpZ25tZW50IHRvIGxvYWQuXG4iICsKKyAgICAgICAgICAgICAgICAgICAiICAgKiBAcmV0dXJuIHRoZSBvcmlnaW5hbCBBbGxDYWxjRGF0YU1hbmFnZXIgZm9yIHRoZSBnaXZlbiBhc3NpZ25tZW50IElkXG4iICsKKyAgICAgICAgICAgICAgICAgICAiICAgKi9cbiIgKworICAgICAgICAgICAgICAgICAgICIgIHByaXZhdGUgQWxsQ2FsY0RhdGFNYW5hZ2VyIGdldE9yaWdpbmFsQWxsQ2FsY0RhdGFNYW5hZ2VyKEdlbmVyYXRlZElkIGFzZ25tdElkKSB7XG4iICsKKyAgICAgICAgICAgICAgICAgICAiICAgIGlmKG9yaWdpbmFsQWxsQ2FsY0RhdGFNYW5hZ2VyID09IG51bGwpIHtcbiIgKworICAgICAgICAgICAgICAgICAgICIgICAgICBvcmlnaW5hbEFsbENhbGNEYXRhTWFuYWdlciA9IGNyZWF0ZU9yaWdpbmFsQWxsQ2FsY0RhdGFNYW5hZ2VyKCk7XG4iICsKKyAgICAgICAgICAgICAgICAgICAiICAgICAgdXBkYXRlZEFsbENhbGNEYXRhTWFuYWdlciA9IG51bGw7XG4iICsKKyAgICAgICAgICAgICAgICAgICAiICAgIH1cbiIgKworICAgICAgICAgICAgICAgICAgICJcbiIgKworICAgICAgICAgICAgICAgICAgICIgICAgaWYoYXNnbm10SWQuZXF1YWxzKG9yaWdpbmFsQWxsQ2FsY0RhdGFNYW5hZ2VyLmdldEFzZ25tdElkKCkpKSB7XG4iICsKKyAgICAgICAgICAgICAgICAgICAiICAgICAgcmV0dXJuIG9yaWdpbmFsQWxsQ2FsY0RhdGFNYW5hZ2VyO1xuIiArCisgICAgICAgICAgICAgICAgICAgIiAgICB9XG4iICsKKyAgICAgICAgICAgICAgICAgICAiXG4iICsKKyAgICAgICAgICAgICAgICAgICAiICAgIHJldHVybiBvcmlnaW5hbEFsbENhbGNEYXRhTWFuYWdlci5nZXRBbGxDYWxjRGF0YU1hbmFnZXIoYXNnbm10SWQpO1xuIiArCisgICAgICAgICAgICAgICAgICAgIiAgfVxuIiArCisgICAgICAgICAgICAgICAgICAgIlxuIiArCisgICAgICAgICAgICAgICAgICAgIiAgcHJpdmF0ZSBBbGxDYWxjRGF0YU1hbmFnZXIgY3JlYXRlT3JpZ2luYWxBbGxDYWxjRGF0YU1hbmFnZXIoKSB7XG4iICsKKyAgICAgICAgICAgICAgICAgICAiICAgIEFsbFBvbGljaWVzIGFsbFBvbGljaWVzID0gUG9saWN5TWFuYWdlci5nZXRJbnN0YW5jZSgpLmdldEFsbFBvbGljaWVzKCk7XG4iICsKKyAgICAgICAgICAgICAgICAgICAiICAgIHRyeSB7XG4iICsKKyAgICAgICAgICAgICAgICAgICAiICAgICAgcmV0dXJuIEFsbENhbGNEYXRhTWFuYWdlci5jcmVhdGVGb3JBc2dubXQoYXNnbm10TWFzdGVyLCBhbGxQb2xpY2llcyk7XG4iICsKKyAgICAgICAgICAgICAgICAgICAiICAgIH1cbiIgKworICAgICAgICAgICAgICAgICAgICIgICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7XG4iICsKKyAgICAgICAgICAgICAgICAgICAiICAgICAgdGhyb3cgbmV3IEludGVybmFsQXBwbGljYXRpb25FeGNlcHRpb24oXCJGYWlsZWQgdG8gbG9hZCBBQ0RNIGZvciBhc3NpZ25tZW50IHdpdGggaWQ6XCIrYXNnbm10TWFzdGVyLmdldEFzZ25tdCgpLCBlKTtcbiIgKworICAgICAgICAgICAgICAgICAgICIgICAgfVxuIiArCisgICAgICAgICAgICAgICAgICAgIiAgfVxuIiArCisgICAgICAgICAgICAgICAgICAgIlxuIiArCisgICAgICAgICAgICAgICAgICAgIiAgLyoqXG4iICsKKyAgICAgICAgICAgICAgICAgICAiICAgKiBPYnRhaW5zIHRoZSB1cGRhdGVkIEFsbENhbGNEYXRhTWFuYWdlciBmb3IgdGhlIGdpdmVuIGFzc2lnbm1lbnQgSWQuICBUaGUgYXNzaWdubWVudCBpZCBtdXN0IGJlIGdpdmVuIGJlY2F1c2UgaW4gYVxuIiArCisgICAgICAgICAgICAgICAgICAgIiAgICogbXVsdGlwbGUgYXNzaWdubWVudCBlbnZpcm9ubWVudCwgYSBzcGVjaWZpYyBjb21wb25lbnQgbmVlZHMgdG8gYmUgcmVxdWVzdGVkLCBhcyBvcmlnaW5hbEFsbENhbGNEYXRhTWFuYWdlciByZWZlcnNcbiIgKworICAgICAgICAgICAgICAgICAgICIgICAqIHRvIHRoZSBhZ2dyZWdhdGUgYXNzaWdubWVudC5cbiIgKworICAgICAgICAgICAgICAgICAgICIgICAqXG4iICsKKyAgICAgICAgICAgICAgICAgICAiICAgKiBAcGFyYW0gYXNnbm10SWQgVGhlIGlkIG9mIHRoZSBhc3NpZ25tZW50IHRvIGxvYWQuXG4iICsKKyAgICAgICAgICAgICAgICAgICAiICAgKiBAcmV0dXJuIHRoZSB1cGRhdGVkIEFsbENhbGNEYXRhTWFuYWdlciBmb3IgdGhlIGdpdmVuIGFzc2lnbm1lbnQgSWRcbiIgKworICAgICAgICAgICAgICAgICAgICIgICAqL1xuIiArCisgICAgICAgICAgICAgICAgICAgIiAgcHJpdmF0ZSBBbGxDYWxjRGF0YU1hbmFnZXIgZ2V0VXBkYXRlZEFsbENhbGNEYXRhTWFuYWdlcihHZW5lcmF0ZWRJZCBhc2dubXRJZCkge1xuIiArCisgICAgICAgICAgICAgICAgICAgIiAgICBpZih1cGRhdGVkQWxsQ2FsY0RhdGFNYW5hZ2VyID09IG51bGwpIHtcbiIgKworICAgICAgICAgICAgICAgICAgICIgICAgICB0aHJvdyBuZXcgSW50ZXJuYWxBcHBsaWNhdGlvbkV4Y2VwdGlvbihcIkF0dGVtcHRlZCB0byB1c2UgdGhlIHVwZGF0ZWQgYWxsIGNhbGMgZGF0YSBtYW5hZ2VyIGJlZm9yZSBpdCB3YXMgY3JlYXRlZC5cIik7XG4iICsKKyAgICAgICAgICAgICAgICAgICAiICAgIH1cbiIgKworICAgICAgICAgICAgICAgICAgICJcbiIgKworICAgICAgICAgICAgICAgICAgICIgICAgaWYoYXNnbm10SWQuZXF1YWxzKHVwZGF0ZWRBbGxDYWxjRGF0YU1hbmFnZXIuZ2V0QXNnbm10SWQoKSkpIHtcbiIgKworICAgICAgICAgICAgICAgICAgICIgICAgICByZXR1cm4gdXBkYXRlZEFsbENhbGNEYXRhTWFuYWdlcjtcbiIgKworICAgICAgICAgICAgICAgICAgICIgICAgfVxuIiArCisgICAgICAgICAgICAgICAgICAgIlxuIiArCisgICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdXBkYXRlZEFsbENhbGNEYXRhTWFuYWdlci5nZXRBbGxDYWxjRGF0YU1hbmFnZXIoYXNnbm10SWQpO1xuIiArCisgICAgICAgICAgICAgICAgICAgIiAgfVxuIiArCisgICAgICAgICAgICAgICAgICAgIlxuIiArCisgICAgICAgICAgICAgICAgICAgIiAgLyoqXG4iICsKKyAgICAgICAgICAgICAgICAgICAiICAgKiBPYnRhaW5zIHRoZSB1cGRhdGVkIEFsbENhbGNEYXRhTWFuYWdlciBmb3IgdGhlIGdpdmVuIGFzc2lnbm1lbnQgSWQsIGlmIHByZXNlbnQuICBJZiBub3QgcHJlc2VudCwgcmV0dXJucyB0aGVcbiIgKworICAgICAgICAgICAgICAgICAgICIgICAqIG9yaWdpbmFsIEFDRE0gaW5zdGVhZC4gIFRoZSBhc3NpZ25tZW50IGlkIG11c3QgYmUgZ2l2ZW4gYmVjYXVzZSBpbiBhXG4iICsKKyAgICAgICAgICAgICAgICAgICAiICAgKiBtdWx0aXBsZSBhc3NpZ25tZW50IGVudmlyb25tZW50LCBhIHNwZWNpZmljIGNvbXBvbmVudCBuZWVkcyB0byBiZSByZXF1ZXN0ZWQsIGFzIG9yaWdpbmFsQWxsQ2FsY0RhdGFNYW5hZ2VyIHJlZmVyc1xuIiArCisgICAgICAgICAgICAgICAgICAgIiAgICogdG8gdGhlIGFnZ3JlZ2F0ZSBhc3NpZ25tZW50LlxuIiArCisgICAgICAgICAgICAgICAgICAgIiAgICpcbiIgKworICAgICAgICAgICAgICAgICAgICIgICAqIEBwYXJhbSBhc2dubXRJZCBUaGUgaWQgb2YgdGhlIGFzc2lnbm1lbnQgdG8gbG9hZC5cbiIgKworICAgICAgICAgICAgICAgICAgICIgICAqIEByZXR1cm4gIGhlIHVwZGF0ZWQgQWxsQ2FsY0RhdGFNYW5hZ2VyIGZvciB0aGUgZ2l2ZW4gYXNzaWdubWVudCBJZCwgaWYgcHJlc2VudC4gIElmIG5vdCBwcmVzZW50LCByZXR1cm5zIHRoZVxuIiArCisgICAgICAgICAgICAgICAgICAgIiAgICogb3JpZ2luYWwgQUNETSBpbnN0ZWFkLlxuIiArCisgICAgICAgICAgICAgICAgICAgIiAgICovXG4iICsKKyAgICAgICAgICAgICAgICAgICAiICBBbGxDYWxjRGF0YU1hbmFnZXIgZ2V0TGF0ZXN0QWxsQ2FsY0RhdGFNYW5hZ2VyKEdlbmVyYXRlZElkIGFzZ25tdElkKSB7XG4iICsKKyAgICAgICAgICAgICAgICAgICAiICAgIGlmICh1cGRhdGVkQWxsQ2FsY0RhdGFNYW5hZ2VyICE9IG51bGwpIHtcbiIgKworICAgICAgICAgICAgICAgICAgICIgICAgICByZXR1cm4gZ2V0VXBkYXRlZEFsbENhbGNEYXRhTWFuYWdlcihhc2dubXRJZCk7XG4iICsKKyAgICAgICAgICAgICAgICAgICAiICAgIH1cbiIgKworICAgICAgICAgICAgICAgICAgICJcbiIgKworICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIGdldE9yaWdpbmFsQWxsQ2FsY0RhdGFNYW5hZ2VyKGFzZ25tdElkKTtcbiIgKworICAgICAgICAgICAgICAgICAgICIgIH1cbiIgKworICAgICAgICAgICAgICAgICAgICJcbiIgKworICAgICAgICAgICAgICAgICAgICIgIC8vdG9kby11dGU6IHRoZSBtZXRob2QgbmFtZSBpcyBtaXNsZWFkaW5nIGFzIGl0IG1heSBhbHNvIGNyZWF0ZSBhIG5ldyBhbWVuZGVkIEFDRCBpZiBwZXJpb2QgaXMgYW1lbmRhYmxlIGJ5IHN5c3RlbSBvbiB1c2VyJ3MgYmVoYWxmXG4iICsKKyAgICAgICAgICAgICAgICAgICAiICBwcml2YXRlIEFsbENhbGN1bGF0aW9uRGF0YSBnZXRBbGxDYWxjRGF0YShBbGxDYWxjRGF0YU1hbmFnZXIgbWdyLCBUaW1lU2hlZXRJZGVudGlmaWVyIGlkKSB7XG4iICsKKyAgICAgICAgICAgICAgICAgICAiICAgIHRyeSB7XG4iICsKKyAgICAgICAgICAgICAgICAgICAiICAgICAgRW1wbG95ZWVQZXJpb2RJbmZvIGVwSW5mbyA9IG1nci5nZXRFbXBsb3llZVBlcmlvZEluZm8oaWQuZ2V0UHBFbmQoKSk7XG4iICsKKyAgICAgICAgICAgICAgICAgICAiICAgICAgaWYgKGVwSW5mbyA9PSBudWxsKSB7XG4iICsKKyAgICAgICAgICAgICAgICAgICAiICAgICAgICBmaW5hbCBQb2xpY3lJRCBhc2dubXRQb2xpY3lQcm9maWxlID0gbWdyLmdldEFzZ25tdE1hc3RlcigpLmdldFBvbGljeV9wcm9maWxlKGlkLmdldFBwRW5kKCkpO1xuIiArCisgICAgICAgICAgICAgICAgICAgIiAgICAgICAgZmluYWwgUG9saWN5SUQgcG9saWN5UHJvZmlsZUlkID0gKGFzZ25tdFBvbGljeVByb2ZpbGUgPT0gbnVsbCkgPyBQb2xpY3lJRC5FTVBUWV9QT0xJQ1lJRCA6IGFzZ25tdFBvbGljeVByb2ZpbGU7XG4iICsKKyAgICAgICAgICAgICAgICAgICAiICAgICAgICB0aHJvdyBuZXcgSW52YWxpZFBheVBlcmlvZEV4Y2VwdGlvbihcIkVtcGxveWVlUGVyaW9kSW5mbyBjb3VsZCBub3QgYmUgb2J0YWluZWQgZm9yIGVtcGxveWVlIFwiICtcbiIgKworICAgICAgICAgICAgICAgICAgICIgICAgICAgICAgICBpZC5nZXRFbXBsb3llZSgpICsgXCIgYW5kIGFzc2lnbm1lbnQgXCIgKyBpZC5nZXRBc2dubXQoKSArIFwiIGFuZCBwZXJpb2QgZW5kIC0gXCIgKyBpZC5nZXRQcEVuZCgpICsgXCIuIFwiICtcbiIgKworICAgICAgICAgICAgICAgICAgICIgICAgICAgICAgICBcIlBvc3NpYmx5IGJlY2F1c2UgdGhlIGVtcGxveWVlIGlzIG5vdCBhY3RpdmUgb24gdGhhdCBkYXRlIG9yIHRoZXJlIGFyZSBub3QgZW5vdWdoIGluaXRpYWxpemVkIHBvbGljeSBwcm9maWxlIFwiICtcbiIgKworICAgICAgICAgICAgICAgICAgICIgICAgICAgICAgICBcInBlcmlvZHMgZm9yIHBvbGljeSBwcm9maWxlIFwiICsgcG9saWN5UHJvZmlsZUlkICk7XG4iICsKKyAgICAgICAgICAgICAgICAgICAiICAgICAgfVxuIiArCisgICAgICAgICAgICAgICAgICAgIlxuIiArCisgICAgICAgICAgICAgICAgICAgIiAgICAgIFRpbWVTaGVldENhbGN1bGF0aW9uSW5mbyBjYWxjSW5mbyA9IHRoaXMuZ2V0Q2FsY3VsYXRpb25JbmZvKG1nciwgaWQpO1xuIiArCisgICAgICAgICAgICAgICAgICAgIiAgICAgIEFzc2lnbm1lbnRQZXJpb2RTdGF0ZSBhc2dubXRQZXJpb2RTdGF0ZSA9IGNhbGNJbmZvLmdldEFzc2lnbm1lbnRQZXJpb2RTdGF0ZSgpO1xuIiArCisgICAgICAgICAgICAgICAgICAgIiAgICAgIFRpbWVTaGVldFN0YXRlIHRpbWVzaGVldFN0YXRlID0gY2FsY0luZm8uZ2V0VGltZVNoZWV0U3RhdGUoKTtcbiIgKworICAgICAgICAgICAgICAgICAgICIgICAgICAvL0lmIHJlcXVlc3RpbmcgRURJVF9WRVJTSU9OLCBjaGVjayB0byBzZWUgaWYgb25lIGV4aXN0cyBvciB0aGF0IHBlcmlvZCBpcyBhbWVuZGFibGUgYnkgdGhlIGxvZ2dlZCBpbiB1c2VyXG4iICsKKyAgICAgICAgICAgICAgICAgICAiICAgICAgaWYgKGlkLmdldFZlcnNpb24oKSA9PSBFbXBsb3llZVBlcmlvZFZlcnNpb25JbmZvLkVESVRfVkVSU0lPTiAmJiAhZXBJbmZvLmhhc0VkaXRWZXJzaW9uKClcbiIgKworICAgICAgICAgICAgICAgICAgICIgICAgICAgICAgJiYgIWlzUGVyaW9kQW1lbmRhYmxlKGVwSW5mbywgbWdyLCBhc2dubXRQZXJpb2RTdGF0ZSwgdGltZXNoZWV0U3RhdGUpICkge1xuIiArCisgICAgICAgICAgICAgICAgICAgIiAgICAgICAgdGhyb3cgbmV3IEludGVybmFsQXBwbGljYXRpb25FeGNlcHRpb24oXCJBbiBlZGl0YWJsZSB0aW1lc2hlZXQgY291bGQgbm90IGJlIG9idGFpbmVkIGZvciBlbXBsb3llZSBcIiArXG4iICsKKyAgICAgICAgICAgICAgICAgICAiICAgICAgICAgICAgaWQuZ2V0RW1wbG95ZWUoKSArIFwiIGFuZCBwZXJpb2QgZW5kIC0gXCIgKyBpZC5nZXRQcEVuZCgpKTtcbiIgKworICAgICAgICAgICAgICAgICAgICIgICAgICB9XG4iICsKKyAgICAgICAgICAgICAgICAgICAiXG4iICsKKyAgICAgICAgICAgICAgICAgICAiICAgICAgLy9DaGVjayB0byBzZWUgaWYgYW4gZWRpdGFibGUgQUNEIGlzIGluIEFDRCBtYW5hZ2VyJ3MgY2FjaGUgLSBpZiBvbmUgZXhpc3RzLCB1c2UgaXRcbiIgKworICAgICAgICAgICAgICAgICAgICIgICAgICAvL0FuIGVtcHR5IHVubW9kaWZpYWJsZSBBQ0QgZm9yIGEgcHJpb3IgcGVyaW9kIG1pZ2h0IGJlIGluIGNhY2hlIGlmIGFuIEFDRCBmb3IgcHJpb3IgdGltZXNoZWV0IGlzIHJlcXVlc3RlZCBhbmRcbiIgKworICAgICAgICAgICAgICAgICAgICIgICAgICAvL2lmIHRoYXQncyB0aGUgY2FzZSwgd2Ugd2FudCB0byBzdGlsbCBiZSBhYmxlIHRvIGNyZWF0ZSBhbiBhbWVuZGVkIEFDRFxuIiArCisgICAgICAgICAgICAgICAgICAgIiAgICAgIGZpbmFsIEFsbENhbGN1bGF0aW9uRGF0YSBhY2QgPSBtZ3IuZ2V0QWxsQ2FsY0RhdGEoaWQuZ2V0UHBFbmQoKSxpZC5nZXRWZXJzaW9uKCksQWxsQ2FsY3VsYXRpb25EYXRhLkZFVENIX0NBQ0hFRF9PTkxZKTtcbiIgKworICAgICAgICAgICAgICAgICAgICIgICAgICBpZiAoYWNkICE9IG51bGwgJiYgIWFjZC5pc1VubW9kaWZpYWJsZSgpKSB7XG4iICsKKyAgICAgICAgICAgICAgICAgICAiICAgICAgICByZXR1cm4gYWNkO1xuIiArCisgICAgICAgICAgICAgICAgICAgIiAgICAgIH1cbiIgKworICAgICAgICAgICAgICAgICAgICJcbiIgKworICAgICAgICAgICAgICAgICAgICIgICAgICAvL0NyZWF0ZSBhbiBhbWVuZGVkIEFDRCBvbmx5IGlmIHRoZSBwZXJpb2QgaXMgYW1lbmRhYmxlIGFuZCB0aGUgbG9nZ2VkIGluIHVzZXIgY2FuIGFtZW5kIGl0XG4iICsKKyAgICAgICAgICAgICAgICAgICAiICAgICAgaWYgKGlzQW1lbmRhYmxlQnlTeXN0ZW1Gb3JVc2VyKGVwSW5mbywgbWdyLCBhc2dubXRQZXJpb2RTdGF0ZSkpIHtcbiIgKworICAgICAgICAgICAgICAgICAgICIgICAgICAgIGZpbmFsIEFsbENhbGN1bGF0aW9uRGF0YSBhbWVuZGVkQWxsQ2FsY0RhdGEgPSBtZ3IuY3JlYXRlQW1lbmRlZEFsbENhbGNEYXRhKGVwSW5mbywgcGFybXMuZ2V0QXBwX3VzZXIoKSwgV0RhdGVUaW1lLm5vdygpKTtcbiIgKworICAgICAgICAgICAgICAgICAgICIgICAgICAgIC8vIE5vIG5lZWQgdG8gaG9vayB0aGlzIHVwIHRvIGFwcHJvdmFsIGNoYW5nZSBsb2dpYywgc2luY2UgaXQgaXMgYW4gaW4tbWVtb3J5IGNoYW5nZSBzbyBmYXIuXG4iICsKKyAgICAgICAgICAgICAgICAgICAiICAgICAgICAvL1JlY2FsY3VsYXRlIHRoZSBhbWVuZGVkIEFDRCBzbyB0aGF0IHRpbWVzaGVldCBleGNlcHRpb25zIChpZiBhbnkpIGdldCBjcmVhdGVkIG9uIHRoZSBhbWVuZGVkIHRpbWVzaGVldFxuIiArCisgICAgICAgICAgICAgICAgICAgIiAgICAgICAgYW1lbmRlZEFsbENhbGNEYXRhLnJlY2FsYyhtZ3IpO1xuIiArCisgICAgICAgICAgICAgICAgICAgIiAgICAgIH1cbiIgKworICAgICAgICAgICAgICAgICAgICJcbiIgKworICAgICAgICAgICAgICAgICAgICIgICAgICAvL0J5IHRoaXMgdGltZSwgdGhlIEFDRCBtZ3IncyBBQ0QgY2FjaGUgd2lsbCBoYXZlIHRoZSBhbWVuZGVkIEFDRCBpZiBvbmUncyBjcmVhdGVkIGluIHRoaXMgbWV0aG9kXG4iICsKKyAgICAgICAgICAgICAgICAgICAiICAgICAgLy9hbmQgd2UgY2FuIHJldHJpZXZlIHRoZSBjYWNoZWQgYW1lbmRlZCBBQ0Qgb3IgdGhlIEFDRCBmcm9tIHRoZSBkYXRhYmFzZVxuIiArCisgICAgICAgICAgICAgICAgICAgIiAgICAgIHJldHVybiBtZ3IuZ2V0QWxsQ2FsY0RhdGEoaWQuZ2V0UHBFbmQoKSwgaWQuZ2V0VmVyc2lvbigpKTtcbiIgKworICAgICAgICAgICAgICAgICAgICIgICAgfSBjYXRjaChJbnZhbGlkUGF5UGVyaW9kRXhjZXB0aW9uIGUpIHtcbiIgKworICAgICAgICAgICAgICAgICAgICIgICAgICAvL1JldGhyb3cgSW52YWxpZFBlcmlvZEV4Y2VwdGlvbnMtLWRvbid0IHdyYXAgdGhlbS4gIFdlIHdhbnQgdGhlbSB0byBiZSB0eXBlZCBhcyBJbnZhbGlkUGVyaW9kRXhjZXB0aW9ucy5cbiIgKworICAgICAgICAgICAgICAgICAgICIgICAgICB0aHJvdyBlO1xuIiArCisgICAgICAgICAgICAgICAgICAgIiAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkge1xuIiArCisgICAgICAgICAgICAgICAgICAgIiAgICAgIHRocm93IG5ldyBJbnRlcm5hbEFwcGxpY2F0aW9uRXhjZXB0aW9uKFwiVGltZXNoZWV0IGNvdWxkIG5vdCBiZSBvYnRhaW5lZCBmb3IgZW1wbG95ZWUgXCIgK1xuIiArCisgICAgICAgICAgICAgICAgICAgIiAgICAgICAgICAgIGlkLmdldEVtcGxveWVlKCkgKyBcIiwgYXNzaWdubWVudCBcIiArIGlkLmdldEFzZ25tdCgpKyBcIiwgcGVyaW9kIGVuZCBcIiArIGlkLmdldFBwRW5kKCkgKyAgXCIgYW5kIHZlcnNpb24gXCIgKyBpZC5nZXRWZXJzaW9uKCkgKyBcIi5cIiwgZSk7XG4iICsKKyAgICAgICAgICAgICAgICAgICAiICAgIH1cbiIgKworICAgICAgICAgICAgICAgICAgICIgIH1cbiIgKworICAgICAgICAgICAgICAgICAgICJcbiIgKworICAgICAgICAgICAgICAgICAgICIgIC8qKlxuIiArCisgICAgICAgICAgICAgICAgICAgIiAgICogQSBwZXJpb2QgaXMgYW1lbmRhYmxlIGlmIG9uZSBvZiB0aGUgZm9sbG93aW5nIGlzIHRydWU6XG4iICsKKyAgICAgICAgICAgICAgICAgICAiICAgKiA8cHJlPlxuIiArCisgICAgICAgICAgICAgICAgICAgIiAgICogLSB7QGxpbmsgI2lzQW1lbmRhYmxlQnlTeXN0ZW1Gb3JVc2VyKEVtcGxveWVlUGVyaW9kSW5mbywgQWxsQ2FsY0RhdGFNYW5hZ2VyLCBBc3NpZ25tZW50UGVyaW9kU3RhdGUpXG4iICsKKyAgICAgICAgICAgICAgICAgICAiICAgKiAgICBhbWVuZGFibGUgYnkgc3lzdGVtIG9uIHVzZXJzJ3MgYmVoYWxmfVxuIiArCisgICAgICAgICAgICAgICAgICAgIiAgICogLSB7QGxpbmsgVGltZVNoZWV0U3RhdGUjaXNBbWVuZGFibGUoKSBhbWVuZGFibGUgZGlyZWN0bHkgYnkgdXNlcn0gZ2VuZXJhbGx5IGJ5IGNsaWNraW5nIFwiQW1lbmRcIiBidXR0b24gb25cbiIgKworICAgICAgICAgICAgICAgICAgICIgICAqICAgcHJpb3IgYWN0aXZlIHBlcmlvZCB3aXRoIG9uZSBvciBtb3JlIGNsb3NlZCB0aW1lc2hlZXRzXG4iICsKKyAgICAgICAgICAgICAgICAgICAiICAgKiA8L3ByZT5cbiIgKworICAgICAgICAgICAgICAgICAgICIgICAqL1xuIiArCisgICAgICAgICAgICAgICAgICAgIiAgcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBpc1BlcmlvZEFtZW5kYWJsZShFbXBsb3llZVBlcmlvZEluZm8gZXBJbmZvLCBBbGxDYWxjRGF0YU1hbmFnZXIgbWdyLFxuIiArCisgICAgICAgICAgICAgICAgICAgIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBc3NpZ25tZW50UGVyaW9kU3RhdGUgYXNnbm10UGVyaW9kU3RhdGUsIFRpbWVTaGVldFN0YXRlIHRpbWVzaGVldFN0YXRlKVxuIiArCisgICAgICAgICAgICAgICAgICAgIiAgICAgICAgICB0aHJvd3MgU1FMRXhjZXB0aW9uLCBNdWx0aXBsZVJvd0RiUmVjRXhjZXB0aW9uIHtcbiIgKworICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHRpbWVzaGVldFN0YXRlLmlzQW1lbmRhYmxlKCkgfHwgaXNBbWVuZGFibGVCeVN5c3RlbUZvclVzZXIoZXBJbmZvLCBtZ3IsIGFzZ25tdFBlcmlvZFN0YXRlKTtcbiIgKworICAgICAgICAgICAgICAgICAgICIgIH1cbiIgKworICAgICAgICAgICAgICAgICAgICJcbiIgKworICAgICAgICAgICAgICAgICAgICIgIC8qKlxuIiArCisgICAgICAgICAgICAgICAgICAgIiAgICogQSBwZXJpb2QgaXMgYW1lbmRhYmxlIGJ5IHN5c3RlbSBvbiB1c2VyJ3MgYmVoYWxmIChub3QgdGhlIHNhbWUgYXMgQVVUT19BTUVORCBvciBTWVNfQU1FTkQgd2hpY2ggYXJlIGFsc28gY3JlYXRlZCBieVxuIiArCisgICAgICAgICAgICAgICAgICAgIiAgICogc3lzdGVtKSBpZiB1c2VyIGhhcyBhbWVuZCByaWdodHMgZm9yIHRoZSBzcGVjaWZpZWQgcGVyaW9kIGFzIG9mIHRvZGF5IGFuZCBpZiBzcGVjaWZpZWQgcGVyaW9kIGlzIGEgcHJpb2QgcGVyaW9kXG4iICsKKyAgICAgICAgICAgICAgICAgICAiICAgKiB3aXRoIG5vIHRpbWVzaGVldCBvciBpdCdzIGEgcHJpb3IgcGVyaW9kIHRpbWVzaGVldCB3aXRoIGp1c3Qgc3lzdGVtIGFtZW5kZWQgYnV0IG5vdCB1c2VyIGFtZW5kZWRcbiIgKworICAgICAgICAgICAgICAgICAgICIgICAqIEBwYXJhbSBlcEluZm9cbiIgKworICAgICAgICAgICAgICAgICAgICIgICAqIEBwYXJhbSBtZ3JcbiIgKworICAgICAgICAgICAgICAgICAgICIgICAqIEBwYXJhbSBhc2dubXRQZXJpb2RTdGF0ZVxuIiArCisgICAgICAgICAgICAgICAgICAgIiAgICogQHJldHVyblxuIiArCisgICAgICAgICAgICAgICAgICAgIiAgICogQHRocm93cyBQb2xpY3lMb29rdXBFeGNlcHRpb25cbiIgKworICAgICAgICAgICAgICAgICAgICIgICAqIEB0aHJvd3MgTXVsdGlwbGVSb3dEYlJlY0V4Y2VwdGlvblxuIiArCisgICAgICAgICAgICAgICAgICAgIiAgICogQHRocm93cyBTUUxFeGNlcHRpb25cbiIgKworICAgICAgICAgICAgICAgICAgICIgICAqIEBzZWUgQXNzaWdubWVudFBlcmlvZFN0YXRlI2lzUGVyaW9kQW1lbmRhYmxlKCkgXG4iICsKKyAgICAgICAgICAgICAgICAgICAiICAgKiBAc2VlIEFwcHJvdmFsX2V2ZW50X3R5cGUjU1lTX0FNRU5EXG4iICsKKyAgICAgICAgICAgICAgICAgICAiICAgKiBAc2VlIEFwcHJvdmFsX2V2ZW50X3R5cGUjQU1FTkRcbiIgKworICAgICAgICAgICAgICAgICAgICIgICAqL1xuIiArCisgICAgICAgICAgICAgICAgICAgIiAgcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBpc0FtZW5kYWJsZUJ5U3lzdGVtRm9yVXNlcihFbXBsb3llZVBlcmlvZEluZm8gZXBJbmZvLCBBbGxDYWxjRGF0YU1hbmFnZXIgbWdyLFxuIiArCisgICAgICAgICAgICAgICAgICAgIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBc3NpZ25tZW50UGVyaW9kU3RhdGUgYXNnbm10UGVyaW9kU3RhdGUpXG4iICsKKyAgICAgICAgICAgICAgICAgICAiICAgICAgdGhyb3dzIE11bHRpcGxlUm93RGJSZWNFeGNlcHRpb24sIFNRTEV4Y2VwdGlvbiB7XG4iICsKKyAgICAgICAgICAgICAgICAgICAiICAgIHJldHVybiBhc2dubXRQZXJpb2RTdGF0ZS5pc1BlcmlvZEFtZW5kYWJsZSgpICYmICAvLyBUT0RPOiB0aGlzIGRvZXNuJ3QgbWF0Y2ggdGhlIGphdmFkb2M/XG4iICsKKyAgICAgICAgICAgICAgICAgICAiICAgICAgICAoIG1nci5pc1ByaW9yTW9kaWZpYWJsZVBlcmlvZFdpdGhOb1RpbWVzaGVldChlcEluZm8pIHx8IGVwSW5mby5pc1ByaW9yUGVyaW9kV2l0aFN5c0FtZW5kVmVyc2lvbk9ubHkoKSApO1xuIiArCisgICAgICAgICAgICAgICAgICAgIiAgfVxuIiArCisgICAgICAgICAgICAgICAgICAgIlxuIiArCisgICAgICAgICAgICAgICAgICAgIiAgcHJpdmF0ZSBBbGxDYWxjdWxhdGlvbkRhdGEgZ2V0T3JpZ2luYWxBbGxDYWxjRGF0YShUaW1lU2hlZXRJZGVudGlmaWVyIHRpbWVTaGVldElkZW50aWZpZXIpIHtcbiIgKworICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIGdldEFsbENhbGNEYXRhKGdldE9yaWdpbmFsQWxsQ2FsY0RhdGFNYW5hZ2VyKHRpbWVTaGVldElkZW50aWZpZXIuZ2V0QXNnbm10KCkpLCB0aW1lU2hlZXRJZGVudGlmaWVyKTtcbiIgKworICAgICAgICAgICAgICAgICAgICIgIH1cbiIgKworICAgICAgICAgICAgICAgICAgICJcbiIgKworICAgICAgICAgICAgICAgICAgICIgIHByaXZhdGUgQWxsQ2FsY3VsYXRpb25EYXRhIGdldFVwZGF0ZWRBbGxDYWxjRGF0YShUaW1lU2hlZXRJZGVudGlmaWVyIHRpbWVTaGVldElkZW50aWZpZXIpIHtcbiIgKworICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIGdldEFsbENhbGNEYXRhKGdldFVwZGF0ZWRBbGxDYWxjRGF0YU1hbmFnZXIodGltZVNoZWV0SWRlbnRpZmllci5nZXRBc2dubXQoKSksIHRpbWVTaGVldElkZW50aWZpZXIpO1xuIiArCisgICAgICAgICAgICAgICAgICAgIiAgfVxuIiArCisgICAgICAgICAgICAgICAgICAgIlxuIiArCisgICAgICAgICAgICAgICAgICAgIlxuIiArCisgICAgICAgICAgICAgICAgICAgIiAgcHJpdmF0ZSBTZXQ8VGltZVNoZWV0SWRlbnRpZmllcj4gZ2V0VGltZVNoZWV0SWRlbnRpZmllcnMoKSB7XG4iICsKKyAgICAgICAgICAgICAgICAgICAiICAgIHJldHVybiB0aW1lU2hlZXRJZGVudGlmaWVycztcbiIgKworICAgICAgICAgICAgICAgICAgICIgIH1cbiIgKworICAgICAgICAgICAgICAgICAgICJcbiIgKworICAgICAgICAgICAgICAgICAgICIgIC8qKlxuIiArCisgICAgICAgICAgICAgICAgICAgIiAgICogUmV0dXJucyB0aGUgcGF5IHBlcmlvZCBlbmQgZm9yIHRoZSBwZXJpb2QgY29udGFpbmluZyBkYXRlIHByb3ZpZGVkLCByZWxhdGl2ZVxuIiArCisgICAgICAgICAgICAgICAgICAgIiAgICogdG8gdGhlIGRlZmluZWQgcGVyaW9kcyBmb3IgdGhpcyBhc3NpZ25tZW50LlxuIiArCisgICAgICAgICAgICAgICAgICAgIiAgICpcbiIgKworICAgICAgICAgICAgICAgICAgICIgICAqIEBwYXJhbSBhRGF0ZUluVW5rbm93blBlcmlvZCBhbnkgZGF0ZSB3ZSB3YW50IHRvIGtub3cgdGhlIHBlcmlvZCBmb3JcbiIgKworICAgICAgICAgICAgICAgICAgICIgICAqIEByZXR1cm4gbmV2ZXIgbnVsbFxuIiArCisgICAgICAgICAgICAgICAgICAgIiAgICovXG4iICsKKyAgICAgICAgICAgICAgICAgICAiICBXRGF0ZSBnZXRQcEVuZEZvckRhdGUoR2VuZXJhdGVkSWQgYXNnbm10SWQsIFdEYXRlIGFEYXRlSW5Vbmtub3duUGVyaW9kKSB7XG4iICsKKyAgICAgICAgICAgICAgICAgICAiICAgIHJldHVybiBUaW1lU2NoZWRVdGlscy5nZXRQcEVuZEZvckRhdGUoZ2V0T3JpZ2luYWxBbGxDYWxjRGF0YU1hbmFnZXIoYXNnbm10SWQpLCBhRGF0ZUluVW5rbm93blBlcmlvZCk7XG4iICsKKyAgICAgICAgICAgICAgICAgICAiICB9XG4iICsKKyAgICAgICAgICAgICAgICAgICAiXG4iICsKKyAgICAgICAgICAgICAgICAgICAiICAvKipcbiIgKworICAgICAgICAgICAgICAgICAgICIgICAqIEFzc2lnbiBzeXN0ZW1fcmVjb3JkX2lkJ3MgdG8gYW55IERiUmVjIG9iamVjcyBpbiB0aGUgY29sbGVjdGlvbiB3aGljaCBsYWNrIHRoZW0uXG4iICsKKyAgICAgICAgICAgICAgICAgICAiICAgKiBAcGFyYW0gZGJSZWNMaXN0IExpc3Qgb2YgRGJSZWMgb2JqZWN0cyBvbiB3aGljaCB0byBjaGVjayB0aGUgc3lzdGVtX3JlY29yZF9pZC4gIFJlY29yZHMgaW4gbGlzdCB3aWxsIGJlIG1vZGlmaWVkLlxuIiArCisgICAgICAgICAgICAgICAgICAgIiAgICovXG4iICsKKyAgICAgICAgICAgICAgICAgICAiICBzdGF0aWMgcHJpdmF0ZSB2b2lkIGFzc2lnblN5c3RlbVJlY29yZElkcyhMaXN0V3JhcEJhc2UgZGJSZWNMaXN0KSB7XG4iICsKKyAgICAgICAgICAgICAgICAgICAiICAgIGZvciAoSXRlcmF0b3IgaXRlcmF0b3IgPSBkYlJlY0xpc3QuZ2V0Q29sbGVjdGlvbigpLml0ZXJhdG9yKCk7IGl0ZXJhdG9yLmhhc05leHQoKTspIHtcbiIgKworICAgICAgICAgICAgICAgICAgICIgICAgICBEYlJlYyBkYlJlYyA9IChEYlJlYykgaXRlcmF0b3IubmV4dCgpO1xuIiArCisgICAgICAgICAgICAgICAgICAgIiAgICAgIGFzc2lnblN5c3RlbVJlY29yZElkKGRiUmVjKTtcbiIgKworICAgICAgICAgICAgICAgICAgICIgICAgfVxuIiArCisgICAgICAgICAgICAgICAgICAgIiAgfVxuIiArCisgICAgICAgICAgICAgICAgICAgIlxuIiArCisgICAgICAgICAgICAgICAgICAgIiAgLyoqXG4iICsKKyAgICAgICAgICAgICAgICAgICAiICAgKiBBc3NpZ24gc3lzdGVtX3JlY29yZF9pZCB0byBhIERiUmVjIG9iamVjdCwgaWYgaXQgaXMgbm90IHNldCBvciBjb250YWlucyBhIHRlbXBvcmFyeSBpZC5cbiIgKworICAgICAgICAgICAgICAgICAgICIgICAqIEBwYXJhbSBkYlJlYyBEYlJlYyBvYmplY3RzIG9uIHdoaWNoIHRvIGNoZWNrL2NoYW5nZSB0aGUgc3lzdGVtX3JlY29yZF9pZC5cbiIgKworICAgICAgICAgICAgICAgICAgICIgICAqL1xuIiArCisgICAgICAgICAgICAgICAgICAgIiAgc3RhdGljIHByaXZhdGUgdm9pZCBhc3NpZ25TeXN0ZW1SZWNvcmRJZChEYlJlYyBkYlJlYykge1xuIiArCisgICAgICAgICAgICAgICAgICAgIiAgICBpZiAoZGJSZWMuZ2V0U3lzdGVtX3JlY29yZF9pZCgpID09IG51bGwgfHwgZGJSZWMuZ2V0U3lzdGVtX3JlY29yZF9pZCgpLnJlcXVpcmVzUGVybWFuZW50SWQoKSkge1xuIiArCisgICAgICAgICAgICAgICAgICAgIiAgICAgIGRiUmVjLnNldFN5c3RlbV9yZWNvcmRfaWQoU3lzdGVtSWQuZ2V0TmV3SUQoKSk7XG4iICsKKyAgICAgICAgICAgICAgICAgICAiICAgIH1cbiIgKworICAgICAgICAgICAgICAgICAgICIgIH1cbiIgKworICAgICAgICAgICAgICAgICAgICJcbiIgKworICAgICAgICAgICAgICAgICAgICIgIC8qKlxuIiArCisgICAgICAgICAgICAgICAgICAgIiAgICogUmVtb3ZlcyB0aGUgbGFzdCBhcHByb3ZhbCBldmVudCAoZW1wbG95ZWUgYXBwcm92YWwpIGZyb20gYXBwcm92YWwgZXZlbnQgbGlzdCBmcm9tIHRoZSBBbGxDYWxjdWxhdGlvbkRhdGEgb2JqZWN0IG9mXG4iICsKKyAgICAgICAgICAgICAgICAgICAiICAgKiB7QGxpbmsgI3VwZGF0ZWRBbGxDYWxjRGF0YU1hbmFnZXJ9XG4iICsKKyAgICAgICAgICAgICAgICAgICAiICAgKiBAcGFyYW0gdGltZVNoZWV0SWQgIC0gVXNlZCB0byBnZXQgdGhlIHtAbGluayBBbGxDYWxjdWxhdGlvbkRhdGF9IG9iamVjdCBmcm9tIHtAbGluayAjdXBkYXRlZEFsbENhbGNEYXRhTWFuYWdlcn1cbiIgKworICAgICAgICAgICAgICAgICAgICIgICAqL1xuIiArCisgICAgICAgICAgICAgICAgICAgIiAgdm9pZCB1bmRvRW1wbG95ZWVBcHByb3ZhbChUaW1lU2hlZXRJZGVudGlmaWVyIHRpbWVTaGVldElkKSB7XG4iICsKKyAgICAgICAgICAgICAgICAgICAiICAgIGZpbmFsIEFsbENhbGN1bGF0aW9uRGF0YSB1cGRhdGVkQWxsQ2FsY0RhdGEgPSBnZXRVcGRhdGVkQWxsQ2FsY0RhdGEodGltZVNoZWV0SWQpO1xuIiArCisgICAgICAgICAgICAgICAgICAgIiAgICB1cGRhdGVkQWxsQ2FsY0RhdGEuZ2V0QXBwcm92YWxfZXZlbnRMaXN0KCkucmVtb3ZlTGFzdEFwcHJvdmFsRXZlbnQoKTtcbiIgKworICAgICAgICAgICAgICAgICAgICIgIH1cbiIgKworICAgICAgICAgICAgICAgICAgICJcbiIgKworICAgICAgICAgICAgICAgICAgICIgIC8qKlxuIiArCisgICAgICAgICAgICAgICAgICAgIiAgICogVXBkYXRlIHRoZSBjdXJyZW50IG9iamVjdCB0byBiZSBhYmxlIHRvIGJlIHVzZWQgZm9yIG90aGVyIHRpbWVzaGVldHMgZm9yIHRoaXMgYXNzaWdubWVudFxuIiArCisgICAgICAgICAgICAgICAgICAgIiAgICogQHBhcmFtIHBhcm1zXG4iICsKKyAgICAgICAgICAgICAgICAgICAiICAgKiBAcGFyYW0gdGltZVNoZWV0SWRlbnRpZmllcnNcbiIgKworICAgICAgICAgICAgICAgICAgICIgICAqL1xuIiArCisgICAgICAgICAgICAgICAgICAgIiAgcHVibGljIHZvaWQgdXBkYXRlKFRpbWVFbnRyeVBhcm1zUGVyQXNzaWdubWVudCBwYXJtcywgU2V0PFRpbWVTaGVldElkZW50aWZpZXI+IHRpbWVTaGVldElkZW50aWZpZXJzKSB7XG4iICsKKyAgICAgICAgICAgICAgICAgICAiICAgIHNldENsYXNzRmllbGRzKHBhcm1zLCB0aW1lU2hlZXRJZGVudGlmaWVycyk7XG4iICsKKyAgICAgICAgICAgICAgICAgICAiICB9XG4iICsKKyAgICAgICAgICAgICAgICAgICAiXG4iICsKKyAgICAgICAgICAgICAgICAgICAiICBwcml2YXRlIHZvaWQgc2V0Q2xhc3NGaWVsZHMoVGltZUVudHJ5UGFybXNQZXJBc3NpZ25tZW50IHBhcm1zLCBTZXQ8VGltZVNoZWV0SWRlbnRpZmllcj4gdGltZVNoZWV0SWRlbnRpZmllcnMpIHtcbiIgKworICAgICAgICAgICAgICAgICAgICIgICAgdGhpcy5wYXJtcyA9IHBhcm1zO1xuIiArCisgICAgICAgICAgICAgICAgICAgIiAgICB0aGlzLnRpbWVTaGVldElkZW50aWZpZXJzID0gVGltZUVudHJ5UGFybXNQZXJBc3NpZ25tZW50LlRJTUVTSEVFVF9JREVOVElGSUVSX1RSRUVTRVRfRkFDVE9SWS5uZXdJbnN0YW5jZSgpO1xuIiArCisgICAgICAgICAgICAgICAgICAgIiAgICB0aGlzLnRpbWVTaGVldElkZW50aWZpZXJzLmFkZEFsbCh0aW1lU2hlZXRJZGVudGlmaWVycyk7XG4iICsKKyAgICAgICAgICAgICAgICAgICAiICB9XG4iICsKKyAgICAgICAgICAgICAgICAgICAiXG4iICsKKyAgICAgICAgICAgICAgICAgICAiICAvKipcbiIgKworICAgICAgICAgICAgICAgICAgICIgICAqIFJlY2FsY3VsYXRlcyBhbmQgU2F2ZXMgdGltZXNoZWV0cyAoaWYgc2F2ZURhdGEgPT0gdHJ1ZSkgZm9yIHRpbWVzaGVldCBpZHMgaW4ge0BsaW5rICNwYXJtc30gdGhhdCBiZWxvbmcgdG8gdGhpc1xuIiArCisgICAgICAgICAgICAgICAgICAgIiAgICogYXNzaWdubWVudFxuIiArCisgICAgICAgICAgICAgICAgICAgIiAgICpcbiIgKworICAgICAgICAgICAgICAgICAgICIgICAqIEBwYXJhbSB0cmFuc1xuIiArCisgICAgICAgICAgICAgICAgICAgIiAgICogQHJldHVybiBBZ2dyZWdhdGVUaW1lRW50cnlUcmFuc2FjdGlvblJlc3VsdHMgZm9yIGFsbCBzYXZlZCB0aW1lc2hlZXRzXG4iICsKKyAgICAgICAgICAgICAgICAgICAiICAgKiBAdGhyb3dzIEV4Y2VwdGlvbiBpbiBjYXNlIG9mIGZhdGFsIGVycm9yIGR1cmluZyB0aW1lc2hlZXQgcmVjYWxjICYgc2F2ZSBlLmcuIGVycm9ycyB3aGlsZSBzdG9yZSBkYXRhIGluIERCIGV0Yy5cbiIgKworICAgICAgICAgICAgICAgICAgICIgICAqIFRoaXMgcHJlY2x1ZGVzIENvbmN1cnJlbnRVc2VyTW9kaWZpY2F0aW9uIGV4Y2VwdGlvbi4gQW55IGV4Y2VwdGlvbiB0aHJvd24gZnJvbSB0aGlzIG1ldGhvZCwgZXZlbnR1YWxseSBnZXRzXG4iICsKKyAgICAgICAgICAgICAgICAgICAiICAgKiBlc2NhbGF0ZWQgYXMgdHJhbnNhY3Rpb24gZXhjZXB0aW9uXG4iICsKKyAgICAgICAgICAgICAgICAgICAiICAgKi9cbiIgKworICAgICAgICAgICAgICAgICAgICIgIHB1YmxpYyBUaW1lRW50cnlUcmFuc2FjdGlvblJlc3VsdHMgcmVjYWxjQW5kU2F2ZVRpbWVzaGVldHMoVGltZUVudHJ5VHJhbnNhY3Rpb24gdHJhbnMsIGJvb2xlYW4gc2F2ZURhdGEpIHRocm93cyBFeGNlcHRpb24ge1xuIiArCisgICAgICAgICAgICAgICAgICAgIiAgICAvLyBUT0RPLTEzMjg1OiBSZW1vdmUgdGhpcyBjb2RlIGFuZCBpbXBsZW1lbnQgbWVyZ2luZyBjb25jdXJyZW50bHkgbW9kaWZpZWQgdGltZSBzaGVldHNcbiIgKworICAgICAgICAgICAgICAgICAgICIgICAgQWxsQ2FsY0RhdGFNYW5hZ2VyIHRlbXBBY2RNZ3IgPSBudWxsO1xuIiArCisgICAgICAgICAgICAgICAgICAgIiAgICBBZ2dyZWdhdGVUaW1lRW50cnlUcmFuc2FjdGlvblJlc3VsdHMgcmVzdWx0cyA9IChBZ2dyZWdhdGVUaW1lRW50cnlUcmFuc2FjdGlvblJlc3VsdHMpIHBhcm1zLmdldFRpbWVFbnRyeVJlc3VsdHNGYWN0b3J5KCkubmV3SW5zdGFuY2UoKTtcbiIgKworICAgICAgICAgICAgICAgICAgICIgICAgU2V0PFRpbWVTaGVldElkZW50aWZpZXI+IHRpbWVTaGVldElkcyA9IGdldEFmZmVjdGVkVGltZVNoZWV0SWRlbnRpZmllcnModHJhbnMsIHBhcm1zKTtcbiIgKworICAgICAgICAgICAgICAgICAgICIgICAgaW50IHJldHJ5Q291bnQgPSAwO1xuIiArCisgICAgICAgICAgICAgICAgICAgIiAgICBib29sZWFuIGNhblJldHJ5Q29uY3VycmVudE1vZGlmaWNhdGlvbiA9IHRydWU7XG4iICsKKyAgICAgICAgICAgICAgICAgICAiICAgIGlmICh0aW1lU2hlZXRJZHMuaXNFbXB0eSgpKSB7XG4iICsKKyAgICAgICAgICAgICAgICAgICAiICAgICAgcmV0dXJuIHJlc3VsdHM7XG4iICsKKyAgICAgICAgICAgICAgICAgICAiICAgIH1cbiIgKworICAgICAgICAgICAgICAgICAgICJcbiIgKworICAgICAgICAgICAgICAgICAgICIgICAgYXNzZXJ0IHRpbWVTaGVldElkZW50aWZpZXJzLmNvbnRhaW5zQWxsKHRpbWVTaGVldElkcykgOiBcIkF0dGVtcHRlZCB0byByZWNhbGN1bGF0ZSBhIHRpbWVzaGVldCBpZGVudGlmaWVyIG5vdCBtYW5hZ2VkIGJ5IHRoaXMgQXNzaWdubWVudE1hbmFnZXIuXCI7XG4iICsKKyAgICAgICAgICAgICAgICAgICAiICAgIGNyZWF0ZVVwZGF0ZWRBbGxDYWxjRGF0YU1hbmFnZXIodGltZVNoZWV0SWRzKTtcbiIgKworICAgICAgICAgICAgICAgICAgICJcbiIgKworICAgICAgICAgICAgICAgICAgICIgICAgVHJhbnNhY3Rpb25TdGF0dXMgdGltZVNoZWV0U2F2ZVN0YXR1cyA9IG51bGw7XG4iICsKKyAgICAgICAgICAgICAgICAgICAiICAgIE1hcDxUaW1lU2hlZXRJZGVudGlmaWVyLCBUaW1lU2hlZXRUcmFuc2FjdGlvbkFwcGxpZXI+IGFwcGx5UmVzdWx0c01hcCA9IG5ldyBIYXNoTWFwPFRpbWVTaGVldElkZW50aWZpZXIsIFRpbWVTaGVldFRyYW5zYWN0aW9uQXBwbGllcj4oKTtcbiIgKworICAgICAgICAgICAgICAgICAgICIgICAgZm9yIChUaW1lU2hlZXRJZGVudGlmaWVyIHRpbWVTaGVldElkIDogdGltZVNoZWV0SWRzKSB7XG4iICsKKyAgICAgICAgICAgICAgICAgICAiICAgICAgVGltZVNoZWV0VHJhbnNhY3Rpb25BcHBsaWVyIGFwcGx5UmVzdWx0cyA9IGFwcGx5VHJhbnNhY3Rpb24odGltZVNoZWV0SWQsIHRyYW5zKTtcbiIgKworICAgICAgICAgICAgICAgICAgICIgICAgICBpZihhcHBseVJlc3VsdHMuZ2V0QXBwcm92YWxFdmVudFR5cGUoKSAhPSBBcHByb3ZhbF9ldmVudF90eXBlLlNBVkVfU0NIRURVTEUpIHtcbiIgKworICAgICAgICAgICAgICAgICAgICIgICAgICAgIGFwcGx5UmVzdWx0c01hcC5wdXQodGltZVNoZWV0SWQsIGFwcGx5UmVzdWx0cyk7XG4iICsKKyAgICAgICAgICAgICAgICAgICAiICAgICAgfVxuIiArCisgICAgICAgICAgICAgICAgICAgIlxuIiArCisgICAgICAgICAgICAgICAgICAgIiAgICAgIHJlY2FsYyh0aW1lU2hlZXRJZCwgYXBwbHlSZXN1bHRzLmdldEFwcHJvdmFsRXZlbnRUeXBlKCkpO1xuIiArCisgICAgICAgICAgICAgICAgICAgIlxuIiArCisgICAgICAgICAgICAgICAgICAgIiAgICAgIGJvb2xlYW4gaXNXaXRoZHJhd2FsID1cbiIgKworICAgICAgICAgICAgICAgICAgICIgICAgICAgICAgICAgICh0cmFucy5maW5kVHJhbnNhY3Rpb25BcHByb3ZhbEV2ZW50KHRpbWVTaGVldElkLCBBcHByb3ZhbF9ldmVudF90eXBlLldJVEhEUkFXQUwpICE9IG51bGwpO1xuIiArCisgICAgICAgICAgICAgICAgICAgIiAgICAgIGlmICghaXNXaXRoZHJhd2FsKSB7XG4iICsKKyAgICAgICAgICAgICAgICAgICAiICAgICAgICAvLyBUaGVyZSBhcmUgMyBjb25kaXRpb25zIGlkZW50aWZpZWQgaW4gdGhlIGZvbGxvd2luZyBpZiBzdGF0ZW1lbnQgdGhhdCBjYW4gcHJldmVudCBhbiBcImFjdGlvblwiIG9uIHRoZVxuIiArCisgICAgICAgICAgICAgICAgICAgIiAgICAgICAgLy8gY3VycmVudCB0aW1lc2hlZXQuIFRoZSBmaXJzdCBpcyBhbiBleGNlcHRpb24gdGhhdCBwcmV2ZW50cyBzYXZlLiBJbiB0aGlzIGNhc2UsIHdlIHNob3VsZCBuZXZlciBhbGxvdyBhXG4iICsKKyAgICAgICAgICAgICAgICAgICAiICAgICAgICAvLyBzYXZlIG9mIHRoZSB0aW1lc2hlZXQgdG8gb2NjdXIuIFRoZSBzZWNvbmQgY29uZGl0aW9uIGlzIGFuIGV4Y2VwdGlvbiB0aGF0IHByZXZlbnRzIHN1Ym1pdC4gSW4gdGhpc1xuIiArCisgICAgICAgICAgICAgICAgICAgIiAgICAgICAgLy8gY29uZGl0aW9uLCB3ZSBzaG91bGQgb25seSBhbGxvdyBhIHNhdmUgaWYgdGhlIHVzZXIgaXMgbm90IGF0dGVtcHRpbmcgdG8gc3VibWl0IChhcHBseSBhbiBBUFBST1ZBTCBldmVudCkuXG4iICsKKyAgICAgICAgICAgICAgICAgICAiICAgICAgICAvLyBUaGUgdGhpcmQgY2FzZSBpcyBlcnJvcnMgdGhhdCBvY2N1ciB3aGlsZSBhcHBseWluZyB0cmFuc2FjdGlvbnMgdG8gdGhlIHRpbWVzaGVldC4gQW4gZXhhbXBsZSBvZiB3aGVuIHRoaXNcbiIgKworICAgICAgICAgICAgICAgICAgICIgICAgICAgIC8vIG1heSBvY2N1ciBpcyBpZiB0aGUgc2FtZSB0aW1lIHNoZWV0IGRldGFpbCByb3cgaXMgbW9kaWZpZWQgYnkgMiB1c2Vycy4gSW4gYWxsIG9mIHRoZXNlIGNhc2VzIHdlIHByZXZlbnRcbiIgKworICAgICAgICAgICAgICAgICAgICIgICAgICAgIC8vIHRoZSBzYXZlIG9wZXJhdGlvbiBmcm9tIGV4ZWN1dGluZy5cbiIgKworICAgICAgICAgICAgICAgICAgICIgICAgICAgIC8vIEluIHRoZSBuZXh0IGNvbmRpdGlvbiB3aGVyZSB3ZSBjaGVjayBpZiBhbiBlcnJvciBoYXMgb2NjdXJyZWQsIHdlIHJlbW92ZSB0aGUgbGFzdCBhcHByb3ZhbCBldmVudCBmcm9tIHRoZVxuIiArCisgICAgICAgICAgICAgICAgICAgIiAgICAgICAgLy8gdGltZXNoZWV0IGlmIHdlIGRpZCBub3Qgc2F2ZSBBTkQgaXQgd2FzIGEgc3VibWl0IChBUFBST1ZBTCkgZXZlbnQuIFRyYW5zYWN0aW9ucyBvbmx5IGFsbG93IDEgZXZlbnQgdG8gYmUgYXBwbGllZFxuIiArCisgICAgICAgICAgICAgICAgICAgIiAgICAgICAgLy8gdG8gdGhlIHRpbWVzaGVldC4gVGhlIHRyYW5zYWN0aW9uIGV4cGxpY2l0bHkgZXhjbHVkZXMgU0FWRV9USU1FX1NIRUVUIGFuZCBTQVZFX1NDSEVEVUxFIGV2ZW50cyBmcm9tIGJlaW5nIGFwcGxpZWQuXG4iICsKKyAgICAgICAgICAgICAgICAgICAiICAgICAgICAvLyBJdCByZWxpZXMgb24gdGhlc2UgZXZlbnRzIGJlaW5nIGFwcGxpZWQgb25seSBieSB0aGUgc2F2ZSBvcGVyYXRpb24gaXRzZWxmLiBBcyBhIHJlc3VsdCwgYSBtYXhpbXVtIG9mIDIgZXZlbnRzIG1heVxuIiArCisgICAgICAgICAgICAgICAgICAgIiAgICAgICAgLy8gYmUgYWRkZWQgdG8gdGhlIHRpbWVzaGVldCBhcyBhIHJlc3VsdCBvZiB0aGUgdHJhbnNhY3Rpb24gKHRoZSBldmVudCBvbiB0aGUgdHJhbnNhY3Rpb24gaWYgaXQgd2FzIG5vdCBhIHNhdmUgZXZlbnQpXG4iICsKKyAgICAgICAgICAgICAgICAgICAiICAgICAgICAvLyBhbmQgdGhlIFNBVkVfVElNRV9TSEVFVCBvciBTQVZFX1NDSEVEVUxFIGV2ZW50IGFkZGVkIGR1cmluZyB0aGUgc2F2ZSBvcGVyYXRpb24uXG4iICsKKyAgICAgICAgICAgICAgICAgICAiXG4iICsKKyAgICAgICAgICAgICAgICAgICAiICAgICAgICBpZiAoaGFzU3VibWl0RXZlbnQodHJhbnMsIHRpbWVTaGVldElkKSAmJlxuIiArCisgICAgICAgICAgICAgICAgICAgIiAgICAgICAgICAgICAgICBoYXNFeGNlcHRpb25zUHJldmVudGluZ1N1Ym1pdCh0aW1lU2hlZXRJZCkpIHtcbiIgKworICAgICAgICAgICAgICAgICAgICIgICAgICAgICAgdGltZVNoZWV0U2F2ZVN0YXR1cyA9IGdldEhpZ2hlc3RQcmlvcml0eUVycm9yKHRpbWVTaGVldFNhdmVTdGF0dXMsIE1lc3NhZ2VzLkVYQ0VQVElPTlNfUFJFVkVOVF9TVUJNSVQpO1xuIiArCisgICAgICAgICAgICAgICAgICAgIiAgICAgICAgfVxuIiArCisgICAgICAgICAgICAgICAgICAgIlxuIiArCisgICAgICAgICAgICAgICAgICAgIiAgICAgICAgaWYgKGhhc0V4Y2VwdGlvbnNQcmV2ZW50aW5nU2F2ZSh0aW1lU2hlZXRJZCkpIHtcbiIgKworICAgICAgICAgICAgICAgICAgICIgICAgICAgICAgdGltZVNoZWV0U2F2ZVN0YXR1cyA9IG5ldyBUcmFuc2FjdGlvblN0YXR1c0ltcGwoVHJhbnNhY3Rpb25fc3RhdHVzLkVSUk9SLFxuIiArCisgICAgICAgICAgICAgICAgICAgIiAgICAgICAgICAgICAgICAgIE1lc3NhZ2VzLkVYQ0VQVElPTlNfUFJFVkVOVF9TQVZFLmdldExhYmVsKCkpO1xuIiArCisgICAgICAgICAgICAgICAgICAgIiAgICAgICAgfVxuIiArCisgICAgICAgICAgICAgICAgICAgIiAgICAgIH1cbiIgKworICAgICAgICAgICAgICAgICAgICJcbiIgKworICAgICAgICAgICAgICAgICAgICIgICAgICBpZiAoYXBwbHlSZXN1bHRzLmhhc0Vycm9ycygpKSB7XG4iICsKKyAgICAgICAgICAgICAgICAgICAiICAgICAgICB0aW1lU2hlZXRTYXZlU3RhdHVzID0gbmV3IFRyYW5zYWN0aW9uU3RhdHVzSW1wbChUcmFuc2FjdGlvbl9zdGF0dXMuRVJST1IsXG4iICsKKyAgICAgICAgICAgICAgICAgICAiICAgICAgICAgICAgICAgICAgTWVzc2FnZXMuVElNRV9TSEVFVF9FWENFUFRJT05fSkFWQV9FWENFUFRJT04gLmdldExhYmVsKCkpO1xuIiArCisgICAgICAgICAgICAgICAgICAgIiAgICAgIH1cbiIgKworICAgICAgICAgICAgICAgICAgICIgICAgfVxuIiArCisgICAgICAgICAgICAgICAgICAgIlxuIiArCisgICAgICAgICAgICAgICAgICAgIlxuIiArCisgICAgICAgICAgICAgICAgICAgIiAgICBib29sZWFuIGVycm9yUHJldmVudHNBY3Rpb24gPSAodGltZVNoZWV0U2F2ZVN0YXR1cyAhPSBudWxsKTtcbiIgKworICAgICAgICAgICAgICAgICAgICJcbiIgKworICAgICAgICAgICAgICAgICAgICJcbiIgKworICAgICAgICAgICAgICAgICAgICIgICAgQXBwcm92YWxfZXZlbnQgbGFzdE9yaWdpbmFsQXBwcm92YWxFdmVudCA9IG51bGw7XG4iICsKKyAgICAgICAgICAgICAgICAgICAiICAgIGZvciAoVGltZVNoZWV0SWRlbnRpZmllciB0aW1lU2hlZXRJZCA6IHRpbWVTaGVldElkcykge1xuIiArCisgICAgICAgICAgICAgICAgICAgIiAgICAgIFRpbWVTaGVldFRyYW5zYWN0aW9uQXBwbGllciBhcHBseVJlc3VsdHMgPSBhcHBseVJlc3VsdHNNYXAuZ2V0KHRpbWVTaGVldElkKTtcbiIgKworICAgICAgICAgICAgICAgICAgICIgICAgICB0cnkge1xuIiArCisgICAgICAgICAgICAgICAgICAgIiAgICAgICAgd2hpbGUgKHNhdmVEYXRhICYmIGNhblJldHJ5Q29uY3VycmVudE1vZGlmaWNhdGlvbikge1xuIiArCisgICAgICAgICAgICAgICAgICAgIiAgICAgICAgICBpZiAoZXJyb3JQcmV2ZW50c0FjdGlvbikge1xuIiArCisgICAgICAgICAgICAgICAgICAgIiAgICAgICAgICAgIC8vIElmIHRoZSBjaGFuZ2VzIHdlcmUgbm90IHNhdmVkIGR1ZSB0byBlcnJvcnMsIGFuZCB0aGlzIG9wZXJhdGlvbiAodHJhbnNhY3Rpb24pIHdhcyBhbiBlbXBsb3llZSB0aW1lc2hlZXQgc3VibWlzc2lvbixcbiIgKworICAgICAgICAgICAgICAgICAgICIgICAgICAgICAgICAvLyByZW1vdmUgdGhlIGFwcHJvdmFsIGV2ZW50IGZyb20gdGhlIHVuc2F2ZWQgQUNELlxuIiArCisgICAgICAgICAgICAgICAgICAgIiAgICAgICAgICAgIC8vIE5PVEU6IFdlIGRvIG5vdCBoYXZlIHRvIGNvbmNlcm4gb3Vyc2VsdmVzIHdpdGggcmVtb3ZpbmcgU0FWRV9USU1FX1NIRUVUIG9yIFNBVkVfU0NIRURVTEUgZXZlbnRzIGhlcmUgYXMgdGhlc2UgZXZlbnRzXG4iICsKKyAgICAgICAgICAgICAgICAgICAiICAgICAgICAgICAgLy8gYXJlIGV4cGxpY2l0bHkgRVhDTFVERUQgaW4gdGhlIFRpbWVTaGVldFRyYW5zYWN0aW9uQXBwbGllciAobm90IGFwcGxpZWQpIGFuZCBhcmUgYXBwbGllZCBieSB0aGUgc2F2ZSBvcGVyYXRpb24gKHdoaWNoXG4iICsKKyAgICAgICAgICAgICAgICAgICAiICAgICAgICAgICAgLy8gaGFzIG5vdCBleGVjdXRlZCBpZiB3ZSBtYWRlIGl0IGhlcmUuXG4iICsKKyAgICAgICAgICAgICAgICAgICAiICAgICAgICAgICAgaWYgKGhhc1N1Ym1pdEV2ZW50KHRyYW5zLCB0aW1lU2hlZXRJZCkpIHtcbiIgKworICAgICAgICAgICAgICAgICAgICIgICAgICAgICAgICAgIHVuZG9FbXBsb3llZUFwcHJvdmFsKHRpbWVTaGVldElkKTtcbiIgKworICAgICAgICAgICAgICAgICAgICIgICAgICAgICAgICB9XG4iICsKKyAgICAgICAgICAgICAgICAgICAiICAgICAgICAgIH0gZWxzZSB7XG4iICsKKyAgICAgICAgICAgICAgICAgICAiICAgICAgICAgICAgc2F2ZSh0aW1lU2hlZXRJZCwgYXBwbHlSZXN1bHRzLmdldEFwcHJvdmFsRXZlbnRUeXBlKCkpO1xuIiArCisgICAgICAgICAgICAgICAgICAgIiAgICAgICAgICAgIHRpbWVTaGVldFNhdmVTdGF0dXMgPSBuZXcgVHJhbnNhY3Rpb25TdGF0dXNJbXBsKFRyYW5zYWN0aW9uX3N0YXR1cy5TQVZFRCxcbiIgKworICAgICAgICAgICAgICAgICAgICIgICAgICAgICAgICAgICAgICAgIE1lc3NhZ2VzLlRJTUVfU0hFRVRfU0FWRUQuZ2V0TGFiZWwoKSk7XG4iICsKKyAgICAgICAgICAgICAgICAgICAiICAgICAgICAgICAgcG9zdFNhdmUoKTtcbiIgKworICAgICAgICAgICAgICAgICAgICIgICAgICAgICAgfVxuIiArCisgICAgICAgICAgICAgICAgICAgIiAgICAgICAgICAvLyBBbGwgb3BlcmF0aW9ucyBjb21wbGV0ZWQsIHNvIHJldHJpZXMgYXJlIG5vIGxvbmdlciBuZWNlc3NhcnlcbiIgKworICAgICAgICAgICAgICAgICAgICIgICAgICAgICAgY2FuUmV0cnlDb25jdXJyZW50TW9kaWZpY2F0aW9uID0gZmFsc2U7XG4iICsKKyAgICAgICAgICAgICAgICAgICAiICAgICAgICB9XG4iICsKKyAgICAgICAgICAgICAgICAgICAiICAgICAgfSBjYXRjaCAoQ29uY3VycmVudFVzZXJNb2RpZmljYXRpb25FeGNlcHRpb24gZXgpIHtcbiIgKworICAgICAgICAgICAgICAgICAgICIgICAgICAgIC8vIFN0b3JlIHRoZSBvbGQgQWNkTWdyLCB3aGVuIGEgY29uY3VycmVudCBtb2QgZXJyb3IgZHVlIHRvIGFub3RoZXIgdXNlciBtb2RpZnlpbmcgYSB0aW1lIHNoZWV0IG9jY3VycyB3ZSB3YW50XG4iICsKKyAgICAgICAgICAgICAgICAgICAiICAgICAgICAvLyB0byByZWNlaXZlIHRoZSBzYW1lIG5ldyBhcHByb3ZhbCBldmVudHMgdG8gZW5zdXJlIHRoYXQgdGhlIHVzZXIgaXMgZm9yY2VkIHRvIHJlbG9hZCB0aGUgdGltZSBzaGVldCB0byBjb250aW51ZS5cbiIgKworICAgICAgICAgICAgICAgICAgICIgICAgICAgIC8vIFRPRE8tMTMyODU6IFJlbW92ZSB0aGUgdGVtcEFjZE1nciBhbmQgbWFrZSBtZXJnaW5nIGNvbmN1cnJlbnRseSBtb2RpZmllZCB0aW1lIHNoZWV0cyBwb3NzaWJsZSxcbiIgKworICAgICAgICAgICAgICAgICAgICIgICAgICAgIC8vIFRPRE8tMTMyODU6IHJlcXVpcmVzIGNvbnNpZGVyaW5nIG11bHRpcGxlIGVkZ2UgY2FzZXMgZm9yIHRoZSB1c2VyIGludGVyZmFjZVxuIiArCisgICAgICAgICAgICAgICAgICAgIiAgICAgICAgaWYgKHRlbXBBY2RNZ3IgPT0gbnVsbCkge1xuIiArCisgICAgICAgICAgICAgICAgICAgIiAgICAgICAgICB0ZW1wQWNkTWdyID0gZ2V0T3JpZ2luYWxBbGxDYWxjRGF0YU1hbmFnZXIoYXNnbm10TWFzdGVyLmdldEFzZ25tdCgpKTtcbiIgKworICAgICAgICAgICAgICAgICAgICIgICAgICAgIH1cbiIgKworICAgICAgICAgICAgICAgICAgICJcbiIgKworICAgICAgICAgICAgICAgICAgICIgICAgICAgIGlmIChyZXRyeUNvdW50ID09IE1BWF9SRVRSSUVTKSB7XG4iICsKKyAgICAgICAgICAgICAgICAgICAiICAgICAgICAgIC8vIHJldHVybiB0aGUgYWNkTWdyIHRvIGl0cyBwcmV2aW91cyBzdGF0ZSwgdGhpcyBlbnN1cmVzIHRoZSB1c2VyIG11c3QgcmVsb2FkIHRoZSB0aW1lIHNoZWV0XG4iICsKKyAgICAgICAgICAgICAgICAgICAiICAgICAgICAgIC8vIFRPRE8tMTMyODU6IFJlbW92ZSB0aGlzIGNvZGUgYW5kIGltcGxlbWVudCBtZXJnaW5nIGNvbmN1cnJlbnRseSBtb2RpZmllZCB0aW1lIHNoZWV0c1xuIiArCisgICAgICAgICAgICAgICAgICAgIiAgICAgICAgICBvcmlnaW5hbEFsbENhbGNEYXRhTWFuYWdlciA9IHRlbXBBY2RNZ3I7XG4iICsKKyAgICAgICAgICAgICAgICAgICAiICAgICAgICAgIEdlbmVyYXRlZElkIGVycm9ySWQgPSBTZXJ2ZXJFcnJvckxvZ2dlci5zaW5nbGV0b24ubG9nKG5ldyBTZXJ2ZXJFcnJvcihcIkV4Y2VwdGlvbiBzYXZpbmcgdGltZSBzaGVldFwiLCBleCxcbiIgKworICAgICAgICAgICAgICAgICAgICIgICAgICAgICAgICAgICAgICBQcm9ncmFtX3NvdXJjZS5TRVJWRVJfUkVRVUVTVCwgcGFybXMuZ2V0QXBwX3VzZXIoKS5nZXRMb2dpbl9pZCgpKSk7XG4iICsKKyAgICAgICAgICAgICAgICAgICAiICAgICAgICAgIGNhdC5lcnJvcihcIlVuYWJsZSB0byBzYXZlIHRpbWUgc2hlZXQuICBkZWJ1Z19lcnJvcl9sb2cgaWQ6XCIgKyBlcnJvcklkLCBleCk7XG4iICsKKyAgICAgICAgICAgICAgICAgICAiICAgICAgICAgIC8vVXNlIHRpbWVTaGVldFNhdmVTdGF0dXMgdG8gc2VuZCBjb25jdXJyZW50IGVycm9yIG1lc3NhZ2UgdG8gdXNlci5cbiIgKworICAgICAgICAgICAgICAgICAgICIgICAgICAgICAgZXJyb3JQcmV2ZW50c0FjdGlvbiA9IHRydWU7XG4iICsKKyAgICAgICAgICAgICAgICAgICAiICAgICAgICAgIHRpbWVTaGVldFNhdmVTdGF0dXMgPSBuZXcgVHJhbnNhY3Rpb25TdGF0dXNJbXBsKFRyYW5zYWN0aW9uX3N0YXR1cy5FUlJPUixcbiIgKworICAgICAgICAgICAgICAgICAgICIgICAgICAgICAgICAgICAgICBNZXNzYWdlcy5USU1FX1NIRUVUX0VYQ0VQVElPTl9DT05DVVJSRU5UX1VTRVIuZ2V0TGFiZWwoKSk7XG4iICsKKyAgICAgICAgICAgICAgICAgICAiICAgICAgICAgIC8vIFdlIGhhdmUgcmV0cmllZCBzYXZpbmcgYW5kIGhhdmUgaGl0IHRoZSBNQVhfUkVUUklFUyB0aHJlc2hvbGQsIHNvIHN0b3AgcmV0cnlpbmcuXG4iICsKKyAgICAgICAgICAgICAgICAgICAiICAgICAgICAgIGNhblJldHJ5Q29uY3VycmVudE1vZGlmaWNhdGlvbiA9IGZhbHNlO1xuIiArCisgICAgICAgICAgICAgICAgICAgIiAgICAgICAgfSBlbHNlIHtcbiIgKworICAgICAgICAgICAgICAgICAgICIgICAgICAgICAgLy8gT24gdGhlIGZpcnN0IHJldHJ5LCB3ZSBuZWVkIHRvIGNhcHR1cmUgdGhlIGxhc3QgKG1vc3QgcmVjZW50KSBhcHByb3ZhbCBldmVudCB0aGF0IGV4aXN0ZWQgb24gdGhpcyB0aW1lc2hlZXQgcHJpb3IgdG8gYXBwbHlpbmdcbiIgKworICAgICAgICAgICAgICAgICAgICIgICAgICAgICAgLy8gYW55IHRyYW5zYWN0aW9ucyBiZWNhdXNlIHdoZW4gd2UgcmVsb2FkIHRoZSBcIm9yaWdpbmFsXCIgQUNEIHRvIGF0dGVtcHQgdG8gcmVhcHBseSB0aGUgdHJhbnNhY3Rpb25zIHdlIHdpbGwgbG9zZSB0cmFja1xuIiArCisgICAgICAgICAgICAgICAgICAgIiAgICAgICAgICAvLyBvZiB0aGlzICh3ZSdsbCBwdWxsIGluIGFwcHJvdmFsIGV2ZW50cyBmb3IgdHJhbnNhY3Rpb25zIHRoYXQgd2VyZSBzYXZlZCBpbiBvdGhlciBzZXNzaW9ucy9wcm9jZXNzZXMpLiBUaGlzIGlzIG5lY2Vzc2FyeSB0b1xuIiArCisgICAgICAgICAgICAgICAgICAgIiAgICAgICAgICAvLyBhbGxvdyBtb3JlIHRoYW4gMSByZXRyeVxuIiArCisgICAgICAgICAgICAgICAgICAgIiAgICAgICAgICBpZiAobGFzdE9yaWdpbmFsQXBwcm92YWxFdmVudCA9PSBudWxsKSB7XG4iICsKKyAgICAgICAgICAgICAgICAgICAiICAgICAgICAgICAgbGFzdE9yaWdpbmFsQXBwcm92YWxFdmVudCA9IGdldEFsbENhbGNEYXRhKGdldE9yaWdpbmFsQWxsQ2FsY0RhdGFNYW5hZ2VyKHRpbWVTaGVldElkLmdldEFzZ25tdCgpKSwgdGltZVNoZWV0SWQpLmdldEFwcHJvdmFsX2V2ZW50TGlzdCgpLmdldExhc3RBcHByb3ZhbEV2ZW50KCk7XG4iICsKKyAgICAgICAgICAgICAgICAgICAiICAgICAgICAgIH1cbiIgKworICAgICAgICAgICAgICAgICAgICIgICAgICAgICAgcmV0cnlDb3VudCsrO1xuIiArCisgICAgICAgICAgICAgICAgICAgIiAgICAgICAgICAvLyBhdHRlbXB0IHRvIHJlYXBwbHkgdGhlIHRyYW5zYWN0aW9uXG4iICsKKyAgICAgICAgICAgICAgICAgICAiICAgICAgICAgIHRyeSB7XG4iICsKKyAgICAgICAgICAgICAgICAgICAiICAgICAgICAgICAgYXBwbHlSZXN1bHRzID0gYXR0ZW1wdFRpbWVTaGVldFRyYW5zYWN0aW9uUmVhcHBseSh0cmFucywgdGltZVNoZWV0SWQsIGxhc3RPcmlnaW5hbEFwcHJvdmFsRXZlbnQpO1xuIiArCisgICAgICAgICAgICAgICAgICAgIiAgICAgICAgICB9IGNhdGNoIChDb25jdXJyZW50VXNlck1vZGlmaWNhdGlvbkV4Y2VwdGlvbiBjdW1lKSB7XG4iICsKKyAgICAgICAgICAgICAgICAgICAiICAgICAgICAgICAgLy8gcmV0dXJuIHRoZSBhY2RNZ3IgdG8gaXRzIHByZXZpb3VzIHN0YXRlLCB0aGlzIGVuc3VyZXMgdGhlIHVzZXIgbXVzdCByZWxvYWQgdGhlIHRpbWUgc2hlZXRcbiIgKworICAgICAgICAgICAgICAgICAgICIgICAgICAgICAgICAvLyBUT0RPLTEzMjg1OiBSZW1vdmUgdGhpcyBjb2RlIGFuZCBpbXBsZW1lbnQgbWVyZ2luZyBjb25jdXJyZW50bHkgbW9kaWZpZWQgdGltZSBzaGVldHNcbiIgKworICAgICAgICAgICAgICAgICAgICIgICAgICAgICAgICBvcmlnaW5hbEFsbENhbGNEYXRhTWFuYWdlciA9IHRlbXBBY2RNZ3I7XG4iICsKKyAgICAgICAgICAgICAgICAgICAiICAgICAgICAgICAgLy8gaWYgd2Ugd2VyZSB1bmFibGUgdG8gcmVhcHBseSB0cmFuc2FjdGlvbnMsIG5vIGZ1cnRoZXIgcmV0cmllcyBhcmUgbmVjZXNzYXJ5IChiZWNhdXNlIGl0IHdpbGwganVzdCBrZWVwIGZhaWxpbmcpXG4iICsKKyAgICAgICAgICAgICAgICAgICAiICAgICAgICAgICAgLy8gc3Vic2VxdWVudCByZXRyaWVzIG9ubHkgc3VjY2VlZCBpZiB3ZSB3ZXJlIGFibGUgdG8gcmVhcHBseSB0aGUgbmV3IHRyYW5zYWN0aW9ucyBzdWNjZXNzZnVsbHkgYW5kIHN0aWxsIHJlY2VpdmVkXG4iICsKKyAgICAgICAgICAgICAgICAgICAiICAgICAgICAgICAgLy8gYW5vdGhlciBDb25jdXJyZW50VXNlck1vZGlmaWNhdGlvbkV4Y2VwdGlvbiAoYSBzZWNvbmQgY2hhbmdlIG9jY3VycmVkIHdoaWxlIGFwcGx5aW5nIHRyYW5zYWN0aW9ucylcbiIgKworICAgICAgICAgICAgICAgICAgICIgICAgICAgICAgICBjYW5SZXRyeUNvbmN1cnJlbnRNb2RpZmljYXRpb24gPSBmYWxzZTtcbiIgKworICAgICAgICAgICAgICAgICAgICIgICAgICAgICAgICBlcnJvclByZXZlbnRzQWN0aW9uID0gdHJ1ZTtcbiIgKworICAgICAgICAgICAgICAgICAgICIgICAgICAgICAgICB0aW1lU2hlZXRTYXZlU3RhdHVzID0gbmV3IFRyYW5zYWN0aW9uU3RhdHVzSW1wbChUcmFuc2FjdGlvbl9zdGF0dXMuRVJST1IsXG4iICsKKyAgICAgICAgICAgICAgICAgICAiICAgICAgICAgICAgICAgICAgICBNZXNzYWdlcy5USU1FX1NIRUVUX0VYQ0VQVElPTl9DT05DVVJSRU5UX1VTRVIuZ2V0TGFiZWwoKSk7XG4iICsKKyAgICAgICAgICAgICAgICAgICAiICAgICAgICAgIH1cbiIgKworICAgICAgICAgICAgICAgICAgICIgICAgICAgIH1cbiIgKworICAgICAgICAgICAgICAgICAgICIgICAgICB9XG4iICsKKyAgICAgICAgICAgICAgICAgICAiICAgICAgcmVzdWx0cy5hZGQoZ2V0RGlmZih0aW1lU2hlZXRJZCwgdHJhbnMsIGFwcGx5UmVzdWx0cywgdGltZVNoZWV0U2F2ZVN0YXR1cywgIWVycm9yUHJldmVudHNBY3Rpb24pKTtcbiIgKworICAgICAgICAgICAgICAgICAgICIgICAgfVxuIiArCisgICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4gcmVzdWx0cztcbiIgKworICAgICAgICAgICAgICAgICAgICIgIH1cbiIgKworICAgICAgICAgICAgICAgICAgICJcbiIgKworICAgICAgICAgICAgICAgICAgICIgICI7CisKKyAgICBATm9uTmxzIFN0cmluZyBwYXJ0MiA9ICJcbiIgKworICAgICAgICAgICAgICAgICAgICIgIHByaXZhdGUgVHJhbnNhY3Rpb25TdGF0dXMgZ2V0SGlnaGVzdFByaW9yaXR5RXJyb3IoVHJhbnNhY3Rpb25TdGF0dXMgZXhpc3RpbmdTdGF0dXMsIE1lc3NhZ2UgbmV3RXJyb3IpIHtcbiIgKworICAgICAgICAgICAgICAgICAgICIgICAgaWYoZXhpc3RpbmdTdGF0dXMgPT0gbnVsbCkge1xuIiArCisgICAgICAgICAgICAgICAgICAgIiAgICAgIHJldHVybiBuZXdFcnJvcjtcbiIgKworICAgICAgICAgICAgICAgICAgICIgICAgfVxuIiArCisgICAgICAgICAgICAgICAgICAgIiAgICBUcmFuc2FjdGlvblN0YXR1cyB0aW1lU2hlZXRTYXZlU3RhdHVzID0gbmV3IFRyYW5zYWN0aW9uU3RhdHVzSW1wbChUcmFuc2FjdGlvbl9zdGF0dXMuRVJST1IsXG4iICsKKyAgICAgICAgICAgICAgICAgICAiICAgICAgICAgICAgKTtcbiIgKworICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHRpbWVTaGVldFNhdmVTdGF0dXM7XG4iICsKKyAgICAgICAgICAgICAgICAgICAiICB9XG4iICsKKyAgICAgICAgICAgICAgICAgICAiXG4iICsKKyAgICAgICAgICAgICAgICAgICAiICAvKipcbiIgKworICAgICAgICAgICAgICAgICAgICIgICAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgZ2l2ZW4gVGltZUVudHJ5VHJhbnNhY3Rpb24gaGFzIGEgc3VibWl0IGV2ZW50IGZvciB0aGUgZ2l2ZW4gdGltZSBzaGVldC5cbiIgKworICAgICAgICAgICAgICAgICAgICIgICAqIEBwYXJhbSB0cmFucyBUaW1lRW50cnlUcmFuc2FjdGlvbiB0byBzZWFyY2hcbiIgKworICAgICAgICAgICAgICAgICAgICIgICAqIEBwYXJhbSB0aW1lU2hlZXRJZCB0aW1lIHNoZWV0IHRvIHNlYXJjaFxuIiArCisgICAgICAgICAgICAgICAgICAgIiAgICogQHJldHVybiB0cnVlIGlmIGEgc3VibWl0IGV2ZW50IGV4aXN0c1xuIiArCisgICAgICAgICAgICAgICAgICAgIiAgICovXG4iICsKKyAgICAgICAgICAgICAgICAgICAiICBwcml2YXRlIHN0YXRpYyBib29sZWFuIGhhc1N1Ym1pdEV2ZW50KFRpbWVFbnRyeVRyYW5zYWN0aW9uIHRyYW5zLCBUaW1lU2hlZXRJZGVudGlmaWVyIHRpbWVTaGVldElkKSB7XG4iICsKKyAgICAgICAgICAgICAgICAgICAiICAgIHJldHVybiB0cmFucy5maW5kVHJhbnNhY3Rpb25BcHByb3ZhbEV2ZW50KHRpbWVTaGVldElkLCBBcHByb3ZhbF9ldmVudF90eXBlLkFQUFJPVkFMKSAhPSBudWxsO1xuIiArCisgICAgICAgICAgICAgICAgICAgIiAgfVxuIiArCisgICAgICAgICAgICAgICAgICAgIlxuIiArCisgICAgICAgICAgICAgICAgICAgIiAgLyoqXG4iICsKKyAgICAgICAgICAgICAgICAgICAiICAgKiBSZXNvbHZlcyBtb2RpZmljYXRpb25zIHRoYXQgaW1wYWN0IG9ubHkgbm9uLVwiaW5wdXRcIiB2YWx1ZXMgb24gdGhlIHRpbWVzaGVldCB0byBwcmV2ZW50IHRoZW1cbiIgKworICAgICAgICAgICAgICAgICAgICIgICAqIGZyb20gY2F1c2luZyBDb25jdXJyZW50VXNlck1vZGlmaWNhdGlvbkV4Y2VwdGlvbnMgb24gc3Vic2VxdWVudCBhdHRlbXB0cyBhdCBzYXZpbmcgdGhlIGRhdGFcbiIgKworICAgICAgICAgICAgICAgICAgICIgICAqIEBwYXJhbSB0cmFucyB0aW1lIGVudHJ5IHRyYW5zYWN0aW9uIHRvIHJlc29sdmVcbiIgKworICAgICAgICAgICAgICAgICAgICIgICAqIEBwYXJhbSBpZCB0aW1lIHNoZWV0IElEXG4iICsKKyAgICAgICAgICAgICAgICAgICAiICAgKiBAcGFyYW0gbGFzdEFwcHJvdmFsRXZlbnQgdGhlIG1vc3QgcmVjZW50IGFwcHJvdmFsIGV2ZW50IG9uIHRoZSB0aW1lc2hlZXQgcHJpb3IgdG8gYW55IHRyYW5zYWN0aW9uc1xuIiArCisgICAgICAgICAgICAgICAgICAgIiAgICogQHJldHVybiBUaW1lU2hlZXRUcmFuc2FjdGlvbkFwcGxpZXIgaWYgdHJhbnNhY3Rpb25zIHdlcmUgcmVhcHBsaWVkXG4iICsKKyAgICAgICAgICAgICAgICAgICAiICAgKiBAdGhyb3dzIEV4Y2VwdGlvbiBvbiBlcnJvciBsb2FkaW5nIHRoZSBhY2RcbiIgKworICAgICAgICAgICAgICAgICAgICIgICAqL1xuIiArCisgICAgICAgICAgICAgICAgICAgIiAgcHJpdmF0ZSBUaW1lU2hlZXRUcmFuc2FjdGlvbkFwcGxpZXIgYXR0ZW1wdFRpbWVTaGVldFRyYW5zYWN0aW9uUmVhcHBseShmaW5hbCBUaW1lRW50cnlUcmFuc2FjdGlvbiB0cmFucywgZmluYWwgVGltZVNoZWV0SWRlbnRpZmllciBpZCwgQXBwcm92YWxfZXZlbnQgbGFzdEFwcHJvdmFsRXZlbnQpIHRocm93cyBFeGNlcHRpb24ge1xuIiArCisgICAgICAgICAgICAgICAgICAgIiAgICAvLyBDbGVhbiBvdXQgdGhlIEFDRE0gY2FjaGUgdG8gZm9yY2UgcmVsb2FkcyBvZiB0aGUgZGF0YSBmcm9tIHRoZSBkYXRhYmFzZVxuIiArCisgICAgICAgICAgICAgICAgICAgIiAgICBpbnZhbGlkYXRlQWxsQ2FsY0RhdGFNYW5hZ2VycygpO1xuIiArCisgICAgICAgICAgICAgICAgICAgIiAgICBBbGxDYWxjdWxhdGlvbkRhdGEgb3JpZ2luYWxBY2QgPSBnZXRBbGxDYWxjRGF0YShnZXRPcmlnaW5hbEFsbENhbGNEYXRhTWFuYWdlcihpZC5nZXRBc2dubXQoKSksIGlkKTtcbiIgKworICAgICAgICAgICAgICAgICAgICIgICAgLy8gR2V0IGFueSBuZXcgYXBwcm92YWwgZXZlbnRzIHRoYXQgZXhpc3QgaW4gdGhlIGRhdGFiYXNlXG4iICsKKyAgICAgICAgICAgICAgICAgICAiICAgIEFwcHJvdmFsX2V2ZW50TGlzdCBuZXdBcHByb3ZhbEV2ZW50cyA9IG9yaWdpbmFsQWNkLmdldEFwcHJvdmFsX2V2ZW50TGlzdCgpLmdldEFwcHJvdmFsc1NpbmNlKGxhc3RBcHByb3ZhbEV2ZW50KTtcbiIgKworICAgICAgICAgICAgICAgICAgICIgICAgLy8gQ2hlY2sgaWYgYSBcImNvbmN1cnJlbnQgc2F2ZVwiIGlzIHBvc3NpYmxlIGdpdmVuIHRoZSBldmVudHMgdGhhdCBoYXZlIG9jY3VycmVkXG4iICsKKyAgICAgICAgICAgICAgICAgICAiICAgIGlmIChuZXdBcHByb3ZhbEV2ZW50cy5jYW5Db25jdXJyZW50U2F2ZSgpKSB7XG4iICsKKyAgICAgICAgICAgICAgICAgICAiICAgICAgLy9UT0RPOkZJWFxuIiArCisgICAgICAgICAgICAgICAgICAgIiAgICAgIC8vY3JlYXRlVXBkYXRlZEFsbENhbGNEYXRhTWFuYWdlcihsaXN0T2ZBbGxJZHNIZXJlKTtcbiIgKworICAgICAgICAgICAgICAgICAgICIgICAgICBUaW1lU2hlZXRUcmFuc2FjdGlvbkFwcGxpZXIgYXBwbHlSZXN1bHRzID0gYXBwbHlUcmFuc2FjdGlvbihpZCwgdHJhbnMpOyAvLyByZWFwcGx5IHRyYW5zYWN0aW9uc1xuIiArCisgICAgICAgICAgICAgICAgICAgIiAgICAgIHJlY2FsYyhpZCwgYXBwbHlSZXN1bHRzLmdldEFwcHJvdmFsRXZlbnRUeXBlKCkpOyAvLyByZWNhbGN1bGF0ZVxuIiArCisgICAgICAgICAgICAgICAgICAgIiAgICAgIERiUmVjVGltZV9zaGVldCBvcmlnaW5hbFRpbWVTaGVldCA9IG9yaWdpbmFsQWNkLmdldFRpbWVfc2hlZXQoKTtcbiIgKworICAgICAgICAgICAgICAgICAgICIgICAgICBEYlJlY1RpbWVfc2hlZXQgdXBkYXRlZFRpbWVTaGVldCA9IGdldEFsbENhbGNEYXRhKGdldFVwZGF0ZWRBbGxDYWxjRGF0YU1hbmFnZXIoaWQuZ2V0QXNnbm10KCkpLCBpZCkuZ2V0VGltZV9zaGVldCgpO1xuIiArCisgICAgICAgICAgICAgICAgICAgIiAgICAgIC8vIENvcHkgdGhlIHN5c3RlbSBmaWVsZHMgZnJvbSB0aGUgb3JpZ2luYWwgdGltZSBzaGVldCB0byB0aGUgdXBkYXRlZCB0aW1lIHNoZWV0IGJlY2F1c2VcbiIgKworICAgICAgICAgICAgICAgICAgICIgICAgICAvLyB3ZSBoYXZlIGRldGVybWluZWQgYXQgdGhpcyBwb2ludCB0aGF0IHRoZSBjb25jdXJyZW50IHNhdmUgaXMgb2theSBiYXNlZCBvbiB0aGUgZGlmZmVyZW5jZVxuIiArCisgICAgICAgICAgICAgICAgICAgIiAgICAgIC8vIGJldHdlZW4gdGhlc2UgMiB0aW1lIHNoZWV0cy4gQ29weWluZyB0aGVzZSBmaWVsZHMgb3ZlciB3aWxsIGFsbG93IHRoZSBzYXZlIHRvIGNvbXBsZXRlXG4iICsKKyAgICAgICAgICAgICAgICAgICAiICAgICAgLy8gd2l0aG91dCBjYXVzaW5nIGEgQ29uY3VycmVudFVzZXJNb2RpZmljYXRpb25FeGNlcHRpb24gYnkgbWFraW5nIHRoZSB1cGRhdGUgY291bnRlciBtYXRjaC5cbiIgKworICAgICAgICAgICAgICAgICAgICIgICAgICBEYlJlY0ZpZWxkQ29waWVyIGNvcGllciA9IG5ldyBEYlJlY0ZpZWxkQ29waWVyKERhdGFEaWN0aW9uYXJ5LmdldENsdG5PZlN5c3RlbUZpZWxkTmFtZXMoKSk7XG4iICsKKyAgICAgICAgICAgICAgICAgICAiICAgICAgY29waWVyLmNvcHlGaWVsZHMob3JpZ2luYWxUaW1lU2hlZXQsIHVwZGF0ZWRUaW1lU2hlZXQpO1xuIiArCisgICAgICAgICAgICAgICAgICAgIiAgICAgIHJldHVybiBhcHBseVJlc3VsdHM7XG4iICsKKyAgICAgICAgICAgICAgICAgICAiICAgIH0gZWxzZSB7XG4iICsKKyAgICAgICAgICAgICAgICAgICAiICAgICAgLy8gT3RoZXJ3aXNlLCB0aHJvdyB0aGUgZXhjZXB0aW9uXG4iICsKKyAgICAgICAgICAgICAgICAgICAiICAgICAgdGhyb3cgbmV3IENvbmN1cnJlbnRVc2VyTW9kaWZpY2F0aW9uRXhjZXB0aW9uKFwiVW5hYmxlIHRvIHNhdmUgdGltZSBzaGVldCBmb3IgYXNzaWdubWVudCBcIiArIG9yaWdpbmFsQWNkLmdldEFzZ25tdElkKCkgKyBcImR1ZSB0byBjb25jdXJyZW50IGNoYW5nZXMuXCIpO1xuIiArCisgICAgICAgICAgICAgICAgICAgIiAgICB9XG4iICsKKyAgICAgICAgICAgICAgICAgICAiICB9XG4iICsKKyAgICAgICAgICAgICAgICAgICAiXG4iICsKKyAgICAgICAgICAgICAgICAgICAiICAvKipcbiIgKworICAgICAgICAgICAgICAgICAgICIgICAqIFJldHVybnMgYSBzZXQgb2YgQXNzaWdubWVudE1hbmFnZXJzIHRoYXQgYXJlIGFmZmVjdGVkIGJ5IGNoYW5nZXMgaW4gdGhlIGdpdmVuIHRyYW5zYWN0aW9uIGFuZCBtYW5hZ2VkIGJ5IHRoaXNcbiIgKworICAgICAgICAgICAgICAgICAgICIgICAqIFRpbWVFbnRyeU1hbmFnZXIuXG4iICsKKyAgICAgICAgICAgICAgICAgICAiICAgKlxuIiArCisgICAgICAgICAgICAgICAgICAgIiAgICogQHJldHVybiBhIHNldCBvZiBBc3NpZ25tZW50TWFuYWdlcnMgdGhhdCBhcmUgYWZmZWN0ZWQgYnkgY2hhbmdlcyBpbiB0aGUgZ2l2ZW4gdHJhbnNhY3Rpb24gYW5kIG1hbmFnZWQgYnkgdGhpc1xuIiArCisgICAgICAgICAgICAgICAgICAgIiAgICogVGltZUVudHJ5TWFuYWdlci5cbiIgKworICAgICAgICAgICAgICAgICAgICIgICAqL1xuIiArCisgICAgICAgICAgICAgICAgICAgIiAgcHVibGljIFNldDxUaW1lU2hlZXRJZGVudGlmaWVyPiBnZXRBZmZlY3RlZFRpbWVTaGVldElkZW50aWZpZXJzKFRpbWVFbnRyeVRyYW5zYWN0aW9uIHRyYW5zYWN0aW9uLCBUaW1lRW50cnlQYXJtc1BlckFzc2lnbm1lbnQgcGFybXMpIHtcbiIgKworICAgICAgICAgICAgICAgICAgICIgICAgU2V0PFRpbWVTaGVldElkZW50aWZpZXI+IGFmZmVjdGVkVGltZVNoZWV0SWRzID0gbmV3IEhhc2hTZXQ8VGltZVNoZWV0SWRlbnRpZmllcj4oKTtcbiIgKworICAgICAgICAgICAgICAgICAgICIgICAgZm9yKEdlbmVyYXRlZElkIGFzc2lnbm1lbnRJZCA6IGdldEFzc2lnbm1lbnRJZHMoKSkge1xuIiArCisgICAgICAgICAgICAgICAgICAgIiAgICAgIGZvcihUaW1lU2hlZXRJZGVudGlmaWVyIHRpbWVTaGVldElkIDogcGFybXMuZ2V0VGltZVNoZWV0SWRlbnRpZmllcnNGb3JBc3NpZ25tZW50KGFzc2lnbm1lbnRJZCkpIHtcbiIgKworICAgICAgICAgICAgICAgICAgICIgICAgICAgIGlmKCF0cmFuc2FjdGlvbi5vYnRhaW5BbGxSb3dzKHRpbWVTaGVldElkKS5pc0VtcHR5KCkpIHtcbiIgKworICAgICAgICAgICAgICAgICAgICIgICAgICAgICAgYWZmZWN0ZWRUaW1lU2hlZXRJZHMuYWRkKHRpbWVTaGVldElkKTtcbiIgKworICAgICAgICAgICAgICAgICAgICIgICAgICAgIH1cbiIgKworICAgICAgICAgICAgICAgICAgICIgICAgICB9XG4iICsKKyAgICAgICAgICAgICAgICAgICAiICAgIH1cbiIgKworICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIGFmZmVjdGVkVGltZVNoZWV0SWRzO1xuIiArCisgICAgICAgICAgICAgICAgICAgIiAgfVxuIiArCisgICAgICAgICAgICAgICAgICAgIlxuIiArCisgICAgICAgICAgICAgICAgICAgIiAgLyoqXG4iICsKKyAgICAgICAgICAgICAgICAgICAiICAgKiBPYnRhaW5zIGFsbCBhc3NpZ25tZW50IGlkJ3MgdGhhdCBhcmUgbWFuYWdlZCBieSB0aGlzIEFzc2lnbm1lbnRNYW5hZ2VyLlxuIiArCisgICAgICAgICAgICAgICAgICAgIiAgICpcbiIgKworICAgICAgICAgICAgICAgICAgICIgICAqIEByZXR1cm4gYWxsIGFzc2lnbm1lbnQgaWQncyB0aGF0IGFyZSBtYW5hZ2VkIGJ5IHRoaXMgQXNzaWdubWVudE1hbmFnZXIuXG4iICsKKyAgICAgICAgICAgICAgICAgICAiICAgKi9cbiIgKworICAgICAgICAgICAgICAgICAgICIgIHB1YmxpYyBTZXQ8R2VuZXJhdGVkSWQ+IGdldEFzc2lnbm1lbnRJZHMoKSB7XG4iICsKKyAgICAgICAgICAgICAgICAgICAiICAgIFNldDxHZW5lcmF0ZWRJZD4gYXNzaWdubWVudElkcyA9IG5ldyBIYXNoU2V0PEdlbmVyYXRlZElkPigpO1xuIiArCisgICAgICAgICAgICAgICAgICAgIiAgICBBc2dubXRfbWFzdGVyTGlzdCBhbUxpc3QgPSBhc2dubXRNYXN0ZXIuZ2V0Q29tcEFzZ25tdE1hc3RlcnMoKTtcbiIgKworICAgICAgICAgICAgICAgICAgICIgICAgZm9yKEFzZ25tdF9tYXN0ZXIgYW0gOiBhbUxpc3QpIHtcbiIgKworICAgICAgICAgICAgICAgICAgICIgICAgICBhc3NpZ25tZW50SWRzLmFkZChhbS5nZXRBc2dubXQoKSk7XG4iICsKKyAgICAgICAgICAgICAgICAgICAiICAgIH1cbiIgKworICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIGFzc2lnbm1lbnRJZHM7XG4iICsKKyAgICAgICAgICAgICAgICAgICAiICB9XG4iICsKKyAgICAgICAgICAgICAgICAgICAiXG4iICsKKyAgICAgICAgICAgICAgICAgICAiICBwdWJsaWMgR2VuZXJhdGVkSWQgZ2V0RW1wbG95ZWUoKSB7XG4iICsKKyAgICAgICAgICAgICAgICAgICAiICAgIHJldHVybiBhc2dubXRNYXN0ZXIuZ2V0RW1wbG95ZWUoKTtcbiIgKworICAgICAgICAgICAgICAgICAgICIgIH1cbiIgKworICAgICAgICAgICAgICAgICAgICJcbiIgKworICAgICAgICAgICAgICAgICAgICIgIC8qKiBTaW5nbGUgb3IgYWdncmVnYXRlIGFzc2lnbm1lbnQgbWFzdGVyIGFzc29jaWF0ZWQgd2l0aCB0aGlzIG1hbmFnZXIgKi9cbiIgKworICAgICAgICAgICAgICAgICAgICIgIHByaXZhdGUgZmluYWwgQXNnbm10X21hc3RlciBhc2dubXRNYXN0ZXI7XG4iICsKKyAgICAgICAgICAgICAgICAgICAiXG4iICsKKyAgICAgICAgICAgICAgICAgICAiICBwcml2YXRlIFRpbWVFbnRyeVBhcm1zUGVyQXNzaWdubWVudCBwYXJtcztcbiIgKworICAgICAgICAgICAgICAgICAgICJcbiIgKworICAgICAgICAgICAgICAgICAgICIgIC8qKiBTZXQgb2Yge0BsaW5rIFRpbWVTaGVldElkZW50aWZpZXJ9J3Mgd2hpY2ggYXJlIG1hbmFnZWQgYnkgdGhpcyBvYmplY3QuXG4iICsKKyAgICAgICAgICAgICAgICAgICAiICAgKiBDb21wb3NlZCBvZiBhbGwgdGhlIGlkZW50aWZpZXJzIGluIHRoZSBUaW1lRW50cnlQYXJtcyBmb3IgdGhpcyBhc3NpZ25tZW50IGFuZCByZWxhdGVkIGNvbXBvbmVudHMuXG4iICsKKyAgICAgICAgICAgICAgICAgICAiICAgKi9cbiIgKworICAgICAgICAgICAgICAgICAgICIgIHByaXZhdGUgU2V0PFRpbWVTaGVldElkZW50aWZpZXI+IHRpbWVTaGVldElkZW50aWZpZXJzO1xuIiArCisgICAgICAgICAgICAgICAgICAgIlxuIiArCisgICAgICAgICAgICAgICAgICAgIiAgLyoqXG4iICsKKyAgICAgICAgICAgICAgICAgICAiICAgKiBPcmlnaW5hbCBTaW5nbGUgb3IgQWdncmVnYXRlIEFDRE0sIGFzIGxvYWRlZCBmcm9tIHRoZSBkYXRhYmFzZS4gIEFDRCdzIGluIGhlcmUgYXJlIG5vdCBtb2RpZmllZC5cbiIgKworICAgICAgICAgICAgICAgICAgICIgICAqIFRoaXMgQUNETSBpcyBsYXppbHkgbG9hZGVkLCBhbmQgc2hvdWxkIGFsd2F5cyBiZSBvYnRhaW5lZCBmcm9tIHtAbGluayAjZ2V0T3JpZ2luYWxBbGxDYWxjRGF0YU1hbmFnZXIoR2VuZXJhdGVkSWQpfS5cbiIgKworICAgICAgICAgICAgICAgICAgICIgICAqXG4iICsKKyAgICAgICAgICAgICAgICAgICAiICAgKiBOdWxsIG1lYW5zIHRoYXQgdGhlIEFDRE0gaGFzIG5vdCB5ZXQgYmVlbiBsb2FkZWQgZnJvbSB0aGUgZGF0YWJhc2UsIGFuZCBhbnkgYXR0ZW1wdHMgdG8gdXNlIGl0IHNob3VsZCBmaXJzdFxuIiArCisgICAgICAgICAgICAgICAgICAgIiAgICogaW5pdGlhbGl6ZSBpdC4gIE5vdGU6ICBUaGUgbWVhbmluZyBvZiBudWxsIGlzIGRpZmZlcmVudCB0aGFuIHVwZGF0ZWRBbGxDYWxjRGF0YU1hbmFnZXIncyBudWxsIG1lYW5pbmcuXG4iICsKKyAgICAgICAgICAgICAgICAgICAiICAgKi9cbiIgKworICAgICAgICAgICAgICAgICAgICIgIHByaXZhdGUgQWxsQ2FsY0RhdGFNYW5hZ2VyIG9yaWdpbmFsQWxsQ2FsY0RhdGFNYW5hZ2VyID0gbnVsbDtcbiIgKworICAgICAgICAgICAgICAgICAgICJcbiIgKworICAgICAgICAgICAgICAgICAgICIgIC8qKlxuIiArCisgICAgICAgICAgICAgICAgICAgIiAgICogVXBkYXRlZCBTaW5nbGUgb3IgQWdncmVnYXRlIEFDRE0tLWEgc2hhbGxvdyBjb3B5IG9mIG9yaWdpbmFsQWxsQ2FsY0RhdGFNYW5hZ2VyLiAgQUNEJ3MgaW4gaGVyZSBhcmUgbW9kaWZpZWQgYnlcbiIgKworICAgICAgICAgICAgICAgICAgICIgICAqIFRpbWVFbnRyeVRyYW5zYWN0aW9ucy4gIFRoaXMgQUNETSBpcyBOT1QgbGF6aWx5IGxvYWRlZC0tbnVsbCBtZWFucyBubyBjaGFuZ2VzIHByZXNlbnQsIGFuZCBub24tbnVsbCBtZWFucyB0aGVcbiIgKworICAgICAgICAgICAgICAgICAgICIgICAqIHVwZGF0ZWQgQUNETSBoYXMgYmVlbiBleHBsaWNpdGx5IGNyZWF0ZWQuXG4iICsKKyAgICAgICAgICAgICAgICAgICAiICAgKlxuIiArCisgICAgICAgICAgICAgICAgICAgIiAgICogTnVsbCBtZWFucyB0aGF0IG5vIGNoYW5nZXMgaGF2ZSBiZWVuIG1hZGUgdG8gdGhlIEFDRE0gb3IgZGF0YSwgYW5kIGFueSBhdHRlbXB0cyB0byB1c2UgaXQgc2hvdWxkIGVpdGhlciB0aHJvdyBhXG4iICsKKyAgICAgICAgICAgICAgICAgICAiICAgKiBkZXNjcmlwdGl2ZSBlcnJvciwgb3IgZXhwbGljaXRseSBjcmVhdGUgdGhlIHVwZGF0ZWRBbGxDYWxjRGF0YU1hbmFnZXIuXG4iICsKKyAgICAgICAgICAgICAgICAgICAiICAgKiBOb3RlOiAgVGhlIG1lYW5pbmcgb2YgbnVsbCBpcyBkaWZmZXJlbnQgdGhhbiBvcmlnaW5hbEFsbENhbGNEYXRhTWFuYWdlcidzIG51bGwgbWVhbmluZy5cbiIgKworICAgICAgICAgICAgICAgICAgICIgICAqL1xuIiArCisgICAgICAgICAgICAgICAgICAgIiAgcHJpdmF0ZSBBbGxDYWxjRGF0YU1hbmFnZXIgdXBkYXRlZEFsbENhbGNEYXRhTWFuYWdlciA9IG51bGw7XG4iICsKKyAgICAgICAgICAgICAgICAgICAiXG4iICsKKyAgICAgICAgICAgICAgICAgICAiICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgTUFYX1JFVFJJRVMgPSAyO1xuIiArCisgICAgICAgICAgICAgICAgICAgIlxuIiArCisgICAgICAgICAgICAgICAgICAgIiAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgQ2F0ZWdvcnkgY2F0PUNhdGVnb3J5LmdldEluc3RhbmNlKEFzc2lnbm1lbnRNYW5hZ2VyLmNsYXNzLmdldE5hbWUoKSk7XG4iICsKKyAgICAgICAgICAgICAgICAgICAifSI7CisgICAgY29uZmlndXJlRnJvbUZpbGVUZXh0KCJGb28uamF2YSIsIHBhcnQxICsgcGFydDIpOworCisgICAgZmluYWwgUHNpRG9jdW1lbnRNYW5hZ2VyIGRvY01hbmFnZXIgPSBQc2lEb2N1bWVudE1hbmFnZXIuZ2V0SW5zdGFuY2Uob3VyUHJvamVjdCk7CisgICAgZmluYWwgRG9jdW1lbnQgZG9jID0gZG9jTWFuYWdlci5nZXREb2N1bWVudChteUZpbGUpOworICAgIGRvYy5pbnNlcnRTdHJpbmcocGFydDEubGVuZ3RoKCksICIvKioiKTsKKworICAgIGJvb2xlYW4gb2xkID0gRGVidWdVdGlsLkNIRUNLOworICAgIERlYnVnVXRpbC5DSEVDSyA9IHRydWU7CisgICAgdHJ5IHsKKyAgICAgIGRvY01hbmFnZXIuY29tbWl0QWxsRG9jdW1lbnRzKCk7CisgICAgfQorICAgIGZpbmFsbHkgeworICAgICAgRGVidWdVdGlsLkNIRUNLID0gb2xkOworICAgIH0KKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL3BzaS9UeXBlc1Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9wc2kvVHlwZXNUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWFlMTBmYQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9wc2kvVHlwZXNUZXN0LmphdmEKQEAgLTAsMCArMSw0NTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwMC0yMDEyIEpldEJyYWlucyBzLnIuby4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCitwYWNrYWdlIGNvbS5pbnRlbGxpai5wc2k7CisKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS5hcHBsaWNhdGlvbi5BcHBsaWNhdGlvbk1hbmFnZXI7CitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkuYXBwbGljYXRpb24uZXguUGF0aE1hbmFnZXJFeDsKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS51dGlsLkNvbXBhcmluZzsKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS52ZnMuTG9jYWxGaWxlU3lzdGVtOworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLnZmcy5WaXJ0dWFsRmlsZTsKK2ltcG9ydCBjb20uaW50ZWxsaWoucHNpLmltcGwuSmF2YVBzaUZhY2FkZUV4OworaW1wb3J0IGNvbS5pbnRlbGxpai5wc2kuc2VhcmNoLkdsb2JhbFNlYXJjaFNjb3BlOworaW1wb3J0IGNvbS5pbnRlbGxpai5wc2kudXRpbC5Qc2lVdGlsOworaW1wb3J0IGNvbS5pbnRlbGxpai50ZXN0RnJhbWV3b3JrLlBzaVRlc3RVdGlsOworCitpbXBvcnQgamF2YS5pby5GaWxlOworCisvKioKKyAqICBAYXV0aG9yIGRzbAorICovCitwdWJsaWMgY2xhc3MgVHlwZXNUZXN0IGV4dGVuZHMgR2VuZXJpY3NUZXN0Q2FzZSB7CisgIEBPdmVycmlkZQorICBwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24geworICAgIHN1cGVyLnNldFVwKCk7CisgICAgc2V0dXBHZW5lcmljU2FtcGxlQ2xhc3NlcygpOworCisgICAgZmluYWwgU3RyaW5nIHRlc3RQYXRoID0gUGF0aE1hbmFnZXJFeC5nZXRUZXN0RGF0YVBhdGgoKS5yZXBsYWNlKEZpbGUuc2VwYXJhdG9yQ2hhciwgJy8nKSArICIvcHNpL3R5cGVzLyIgKyBnZXRUZXN0TmFtZSh0cnVlKTsKKyAgICBmaW5hbCBWaXJ0dWFsRmlsZVtdIHRlc3RSb290ID0geyBudWxsIH07CisgICAgQXBwbGljYXRpb25NYW5hZ2VyLmdldEFwcGxpY2F0aW9uKCkucnVuV3JpdGVBY3Rpb24obmV3IFJ1bm5hYmxlKCkgeworICAgICAgQE92ZXJyaWRlCisgICAgICBwdWJsaWMgdm9pZCBydW4oKSB7CisgICAgICAgIHRlc3RSb290WzBdID0gTG9jYWxGaWxlU3lzdGVtLmdldEluc3RhbmNlKCkucmVmcmVzaEFuZEZpbmRGaWxlQnlQYXRoKHRlc3RQYXRoKTsKKyAgICAgIH0KKyAgICB9KTsKKyAgICBpZiAodGVzdFJvb3RbMF0gIT0gbnVsbCkgeworICAgICAgUHNpVGVzdFV0aWwuYWRkU291cmNlUm9vdChteU1vZHVsZSwgdGVzdFJvb3RbMF0pOworICAgIH0KKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RTaW1wbGVTdHVmZigpIHRocm93cyBFeGNlcHRpb24geworICAgIGZpbmFsIEphdmFQc2lGYWNhZGVFeCBwc2lNYW5hZ2VyID0gZ2V0SmF2YUZhY2FkZSgpOworICAgIGZpbmFsIFBzaUVsZW1lbnRGYWN0b3J5IGZhY3RvcnkgPSBwc2lNYW5hZ2VyLmdldEVsZW1lbnRGYWN0b3J5KCk7CisgICAgZmluYWwgUHNpQ2xhc3MgY2xhc3NBID0gcHNpTWFuYWdlci5maW5kQ2xhc3MoIkEiKTsKKyAgICBhc3NlcnROb3ROdWxsKGNsYXNzQSk7CisKKyAgICBmaW5hbCBQc2lNZXRob2QgbWV0aG9kID0gY2xhc3NBLmdldE1ldGhvZHMoKVswXTsKKyAgICBmaW5hbCBQc2lTdGF0ZW1lbnRbXSBtZXRob2RTdGF0ZW1lbnRzID0gbWV0aG9kLmdldEJvZHkoKS5nZXRTdGF0ZW1lbnRzKCk7CisgICAgZmluYWwgUHNpRGVjbGFyYXRpb25TdGF0ZW1lbnQgZGVjbGFyYXRpb25TdGF0ZW1lbnQgPSAoUHNpRGVjbGFyYXRpb25TdGF0ZW1lbnQpIG1ldGhvZFN0YXRlbWVudHNbMF07CisgICAgZmluYWwgUHNpVmFyaWFibGUgdmFyTGlzdCA9IChQc2lWYXJpYWJsZSkgZGVjbGFyYXRpb25TdGF0ZW1lbnQuZ2V0RGVjbGFyZWRFbGVtZW50cygpWzBdOworICAgIGZpbmFsIFBzaVR5cGUgdHlwZUxpc3RPZkEgPSBmYWN0b3J5LmNyZWF0ZVR5cGVGcm9tVGV4dCgidGVzdC5MaXN0PGphdmEubGFuZy5TdHJpbmc+IiwgbnVsbCk7CisgICAgYXNzZXJ0RXF1YWxzKHZhckxpc3QuZ2V0VHlwZSgpLCB0eXBlTGlzdE9mQSk7CisgICAgZmluYWwgUHNpVHlwZSB0eXBlTGlzdE9mT2JqZWN0ID0gZmFjdG9yeS5jcmVhdGVUeXBlRnJvbVRleHQoInRlc3QuTGlzdDxqYXZhLmxhbmcuT2JqZWN0PiIsIG51bGwpOworICAgIGFzc2VydEZhbHNlKHZhckxpc3QuZ2V0VHlwZSgpLmVxdWFscyh0eXBlTGlzdE9mT2JqZWN0KSk7CisKKyAgICBmaW5hbCBQc2lSZWZlcmVuY2VFeHByZXNzaW9uIG1ldGhvZEV4cHJlc3Npb24KKyAgICAgICAgICAgID0gKChQc2lNZXRob2RDYWxsRXhwcmVzc2lvbikgKChQc2lFeHByZXNzaW9uU3RhdGVtZW50KSBtZXRob2RTdGF0ZW1lbnRzWzFdKS5nZXRFeHByZXNzaW9uKCkpLmdldE1ldGhvZEV4cHJlc3Npb24oKTsKKyAgICBmaW5hbCBKYXZhUmVzb2x2ZVJlc3VsdCByZXNvbHZlUmVzdWx0ID0gbWV0aG9kRXhwcmVzc2lvbi5hZHZhbmNlZFJlc29sdmUoZmFsc2UpOworICAgIGFzc2VydFRydWUocmVzb2x2ZVJlc3VsdC5nZXRFbGVtZW50KCkgaW5zdGFuY2VvZiBQc2lNZXRob2QpOworICAgIGZpbmFsIFBzaU1ldGhvZCBtZXRob2RGcm9tTGlzdCA9IChQc2lNZXRob2QpIHJlc29sdmVSZXN1bHQuZ2V0RWxlbWVudCgpOworICAgIGZpbmFsIFBzaVR5cGUgdHlwZU9mRmlyc3RQYXJhbWV0ZXJPZkFkZCA9IG1ldGhvZEZyb21MaXN0LmdldFBhcmFtZXRlckxpc3QoKS5nZXRQYXJhbWV0ZXJzKClbMF0uZ2V0VHlwZSgpOworICAgIGZpbmFsIFBzaVR5cGUgc3Vic3RpdHV0ZWRUeXBlID0gcmVzb2x2ZVJlc3VsdC5nZXRTdWJzdGl0dXRvcigpLnN1YnN0aXR1dGUodHlwZU9mRmlyc3RQYXJhbWV0ZXJPZkFkZCk7CisgICAgZmluYWwgUHNpQ2xhc3NUeXBlIHR5cGVBID0gZmFjdG9yeS5jcmVhdGVUeXBlQnlGUUNsYXNzTmFtZSgiamF2YS5sYW5nLlN0cmluZyIpOworICAgIGFzc2VydEVxdWFscyh0eXBlQSwgc3Vic3RpdHV0ZWRUeXBlKTsKKyAgICBhc3NlcnRUcnVlKHR5cGVBLmVxdWFsc1RvVGV4dCgiamF2YS5sYW5nLlN0cmluZyIpKTsKKworICAgIGZpbmFsIFBzaVR5cGUgYUxpc3RJdGVyYXRvclR5cGUgPSAoKFBzaUV4cHJlc3Npb25TdGF0ZW1lbnQpIG1ldGhvZFN0YXRlbWVudHNbMl0pLmdldEV4cHJlc3Npb24oKS5nZXRUeXBlKCk7CisgICAgZmluYWwgUHNpVHlwZSBhSXRlcmF0b3JUeXBlID0gZmFjdG9yeS5jcmVhdGVUeXBlRnJvbVRleHQoInRlc3QuSXRlcmF0b3I8amF2YS5sYW5nLlN0cmluZz4iLCBudWxsKTsKKyAgICBhc3NlcnRFcXVhbHMoYUl0ZXJhdG9yVHlwZSwgYUxpc3RJdGVyYXRvclR5cGUpOworICAgIGZpbmFsIFBzaVR5cGUgb2JqZWN0SXRlcmF0b3JUeXBlID0gZmFjdG9yeS5jcmVhdGVUeXBlRnJvbVRleHQoInRlc3QuSXRlcmF0b3I8amF2YS5sYW5nLk9iamVjdD4iLCBudWxsKTsKKyAgICBhc3NlcnRGYWxzZShvYmplY3RJdGVyYXRvclR5cGUuZXF1YWxzKGFMaXN0SXRlcmF0b3JUeXBlKSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0UmF3VHlwZXMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBmaW5hbCBKYXZhUHNpRmFjYWRlRXggcHNpTWFuYWdlciA9IGdldEphdmFGYWNhZGUoKTsKKyAgICBmaW5hbCBQc2lFbGVtZW50RmFjdG9yeSBmYWN0b3J5ID0gcHNpTWFuYWdlci5nZXRFbGVtZW50RmFjdG9yeSgpOworICAgIGZpbmFsIFBzaUNsYXNzIGNsYXNzQSA9IHBzaU1hbmFnZXIuZmluZENsYXNzKCJBIik7CisgICAgYXNzZXJ0Tm90TnVsbChjbGFzc0EpOworCisgICAgZmluYWwgUHNpTWV0aG9kIG1ldGhvZCA9IGNsYXNzQS5nZXRNZXRob2RzKClbMF07CisgICAgZmluYWwgUHNpU3RhdGVtZW50W10gbWV0aG9kU3RhdGVtZW50cyA9IG1ldGhvZC5nZXRCb2R5KCkuZ2V0U3RhdGVtZW50cygpOworICAgIGZpbmFsIFBzaURlY2xhcmF0aW9uU3RhdGVtZW50IGRlY2xhcmF0aW9uU3RhdGVtZW50ID0gKFBzaURlY2xhcmF0aW9uU3RhdGVtZW50KSBtZXRob2RTdGF0ZW1lbnRzWzBdOworICAgIGZpbmFsIFBzaVZhcmlhYmxlIHZhckxpc3QgPSAoUHNpVmFyaWFibGUpIGRlY2xhcmF0aW9uU3RhdGVtZW50LmdldERlY2xhcmVkRWxlbWVudHMoKVswXTsKKyAgICBmaW5hbCBQc2lUeXBlIHR5cGVGcm9tVGV4dCA9IGZhY3RvcnkuY3JlYXRlVHlwZUZyb21UZXh0KCJ0ZXN0Lkxpc3QiLCBudWxsKTsKKyAgICBhc3NlcnRFcXVhbHModmFyTGlzdC5nZXRUeXBlKCksIHR5cGVGcm9tVGV4dCk7CisKKyAgICBmaW5hbCBQc2lSZWZlcmVuY2VFeHByZXNzaW9uIG1ldGhvZEV4cHJlc3Npb24gPSAoKFBzaU1ldGhvZENhbGxFeHByZXNzaW9uKSAoKFBzaUV4cHJlc3Npb25TdGF0ZW1lbnQpIG1ldGhvZFN0YXRlbWVudHNbMV0pLmdldEV4cHJlc3Npb24oKSkuZ2V0TWV0aG9kRXhwcmVzc2lvbigpOworICAgIGZpbmFsIEphdmFSZXNvbHZlUmVzdWx0IHJlc29sdmVSZXN1bHQgPSBtZXRob2RFeHByZXNzaW9uLmFkdmFuY2VkUmVzb2x2ZShmYWxzZSk7CisgICAgYXNzZXJ0VHJ1ZShyZXNvbHZlUmVzdWx0LmdldEVsZW1lbnQoKSBpbnN0YW5jZW9mIFBzaU1ldGhvZCk7CisgICAgZmluYWwgUHNpTWV0aG9kIG1ldGhvZEZyb21MaXN0ID0gKFBzaU1ldGhvZCkgcmVzb2x2ZVJlc3VsdC5nZXRFbGVtZW50KCk7CisgICAgZmluYWwgUHNpVHlwZSB0eXBlT2ZGaXJzdFBhcmFtZXRlck9mQWRkID0gbWV0aG9kRnJvbUxpc3QuZ2V0UGFyYW1ldGVyTGlzdCgpLmdldFBhcmFtZXRlcnMoKVswXS5nZXRUeXBlKCk7CisgICAgZmluYWwgUHNpVHlwZSBzdWJzdGl0dXRlZFR5cGUgPSByZXNvbHZlUmVzdWx0LmdldFN1YnN0aXR1dG9yKCkuc3Vic3RpdHV0ZSh0eXBlT2ZGaXJzdFBhcmFtZXRlck9mQWRkKTsKKyAgICBhc3NlcnRFcXVhbHMoUHNpVHlwZS5nZXRKYXZhTGFuZ09iamVjdChnZXRQc2lNYW5hZ2VyKCksIG1ldGhvZC5nZXRSZXNvbHZlU2NvcGUoKSksIHN1YnN0aXR1dGVkVHlwZSk7CisKKyAgICBmaW5hbCBQc2lUeXBlIG1ldGhvZENhbGxUeXBlID0gKChQc2lFeHByZXNzaW9uU3RhdGVtZW50KSBtZXRob2RTdGF0ZW1lbnRzWzJdKS5nZXRFeHByZXNzaW9uKCkuZ2V0VHlwZSgpOworICAgIGZpbmFsIFBzaVR5cGUgcmF3SXRlcmF0b3JUeXBlID0gZmFjdG9yeS5jcmVhdGVUeXBlRnJvbVRleHQoInRlc3QuSXRlcmF0b3IiLCBudWxsKTsKKyAgICBhc3NlcnRFcXVhbHMocmF3SXRlcmF0b3JUeXBlLCBtZXRob2RDYWxsVHlwZSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0U3Vic3RXaXRoSW5oZXJpdG9yKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZmluYWwgSmF2YVBzaUZhY2FkZUV4IHBzaU1hbmFnZXIgPSBnZXRKYXZhRmFjYWRlKCk7CisgICAgZmluYWwgUHNpRWxlbWVudEZhY3RvcnkgZmFjdG9yeSA9IHBzaU1hbmFnZXIuZ2V0RWxlbWVudEZhY3RvcnkoKTsKKyAgICBmaW5hbCBQc2lDbGFzcyBjbGFzc0EgPSBwc2lNYW5hZ2VyLmZpbmRDbGFzcygiQSIpOworICAgIGFzc2VydE5vdE51bGwoY2xhc3NBKTsKKworICAgIGZpbmFsIFBzaU1ldGhvZCBtZXRob2QgPSBjbGFzc0EuZ2V0TWV0aG9kcygpWzBdOworICAgIGZpbmFsIFBzaVN0YXRlbWVudFtdIG1ldGhvZFN0YXRlbWVudHMgPSBtZXRob2QuZ2V0Qm9keSgpLmdldFN0YXRlbWVudHMoKTsKKyAgICBmaW5hbCBQc2lEZWNsYXJhdGlvblN0YXRlbWVudCBkZWNsYXJhdGlvblN0YXRlbWVudCA9IChQc2lEZWNsYXJhdGlvblN0YXRlbWVudCkgbWV0aG9kU3RhdGVtZW50c1swXTsKKyAgICBmaW5hbCBQc2lWYXJpYWJsZSB2YXJMaXN0ID0gKFBzaVZhcmlhYmxlKSBkZWNsYXJhdGlvblN0YXRlbWVudC5nZXREZWNsYXJlZEVsZW1lbnRzKClbMF07CisgICAgZmluYWwgUHNpVHlwZSB0eXBlRnJvbVRleHQgPSBmYWN0b3J5LmNyZWF0ZVR5cGVGcm9tVGV4dCgidGVzdC5JbnRMaXN0IiwgbnVsbCk7CisgICAgYXNzZXJ0RXF1YWxzKHZhckxpc3QuZ2V0VHlwZSgpLCB0eXBlRnJvbVRleHQpOworCisgICAgZmluYWwgUHNpUmVmZXJlbmNlRXhwcmVzc2lvbiBtZXRob2RFeHByZXNzaW9uCisgICAgICAgICAgICA9ICgoUHNpTWV0aG9kQ2FsbEV4cHJlc3Npb24pICgoUHNpRXhwcmVzc2lvblN0YXRlbWVudCkgbWV0aG9kU3RhdGVtZW50c1sxXSkuZ2V0RXhwcmVzc2lvbigpKS5nZXRNZXRob2RFeHByZXNzaW9uKCk7CisgICAgZmluYWwgSmF2YVJlc29sdmVSZXN1bHQgcmVzb2x2ZVJlc3VsdCA9IG1ldGhvZEV4cHJlc3Npb24uYWR2YW5jZWRSZXNvbHZlKGZhbHNlKTsKKyAgICBhc3NlcnRUcnVlKHJlc29sdmVSZXN1bHQuZ2V0RWxlbWVudCgpIGluc3RhbmNlb2YgUHNpTWV0aG9kKTsKKyAgICBmaW5hbCBQc2lNZXRob2QgbWV0aG9kRnJvbUxpc3QgPSAoUHNpTWV0aG9kKSByZXNvbHZlUmVzdWx0LmdldEVsZW1lbnQoKTsKKyAgICBmaW5hbCBQc2lUeXBlIHR5cGVPZkZpcnN0UGFyYW1ldGVyT2ZBZGQgPSBtZXRob2RGcm9tTGlzdC5nZXRQYXJhbWV0ZXJMaXN0KCkuZ2V0UGFyYW1ldGVycygpWzBdLmdldFR5cGUoKTsKKyAgICBmaW5hbCBQc2lUeXBlIHN1YnN0aXR1dGVkVHlwZSA9IHJlc29sdmVSZXN1bHQuZ2V0U3Vic3RpdHV0b3IoKS5zdWJzdGl0dXRlKHR5cGVPZkZpcnN0UGFyYW1ldGVyT2ZBZGQpOworICAgIGZpbmFsIFBzaVR5cGUgamF2YUxhbmdJbnRlZ2VyID0gZmFjdG9yeS5jcmVhdGVUeXBlRnJvbVRleHQoImphdmEubGFuZy5JbnRlZ2VyIiwgbnVsbCk7CisgICAgYXNzZXJ0RXF1YWxzKGphdmFMYW5nSW50ZWdlciwgc3Vic3RpdHV0ZWRUeXBlKTsKKworICAgIGZpbmFsIFBzaVR5cGUgaW50TGlzdEl0ZXJhdG9yUmV0dXJuVHlwZSA9ICgoUHNpRXhwcmVzc2lvblN0YXRlbWVudCkgbWV0aG9kU3RhdGVtZW50c1syXSkuZ2V0RXhwcmVzc2lvbigpLmdldFR5cGUoKTsKKyAgICBmaW5hbCBQc2lUeXBlIGludGVnZXJJdGVyYXRvclR5cGUgPSBmYWN0b3J5LmNyZWF0ZVR5cGVGcm9tVGV4dCgidGVzdC5JdGVyYXRvcjxqYXZhLmxhbmcuSW50ZWdlcj4iLCBudWxsKTsKKyAgICBhc3NlcnRFcXVhbHMoaW50ZWdlckl0ZXJhdG9yVHlwZSwgaW50TGlzdEl0ZXJhdG9yUmV0dXJuVHlwZSk7CisgICAgZmluYWwgUHNpVHlwZSBvYmplY3RJdGVyYXRvclR5cGUgPSBmYWN0b3J5LmNyZWF0ZVR5cGVGcm9tVGV4dCgidGVzdC5JdGVyYXRvcjxqYXZhLmxhbmcuT2JqZWN0PiIsIG51bGwpOworICAgIGFzc2VydEZhbHNlKG9iamVjdEl0ZXJhdG9yVHlwZS5lcXVhbHMoaW50ZWdlckl0ZXJhdG9yVHlwZSkpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFNpbXBsZVJhd1R5cGVJbk1ldGhvZEFyZygpIHRocm93cyBFeGNlcHRpb24geworICAgIGZpbmFsIEphdmFQc2lGYWNhZGVFeCBwc2lNYW5hZ2VyID0gZ2V0SmF2YUZhY2FkZSgpOworICAgIGZpbmFsIFBzaUVsZW1lbnRGYWN0b3J5IGZhY3RvcnkgPSBwc2lNYW5hZ2VyLmdldEVsZW1lbnRGYWN0b3J5KCk7CisgICAgZmluYWwgUHNpQ2xhc3MgY2xhc3NBID0gcHNpTWFuYWdlci5maW5kQ2xhc3MoIkEiKTsKKyAgICBhc3NlcnROb3ROdWxsKGNsYXNzQSk7CisKKyAgICBmaW5hbCBQc2lNZXRob2QgbWV0aG9kID0gY2xhc3NBLmdldE1ldGhvZHMoKVswXTsKKyAgICBmaW5hbCBQc2lTdGF0ZW1lbnRbXSBtZXRob2RTdGF0ZW1lbnRzID0gbWV0aG9kLmdldEJvZHkoKS5nZXRTdGF0ZW1lbnRzKCk7CisKKyAgICBmaW5hbCBQc2lWYXJpYWJsZSB2YXJpYWJsZSA9IChQc2lWYXJpYWJsZSkgKChQc2lEZWNsYXJhdGlvblN0YXRlbWVudCkgbWV0aG9kU3RhdGVtZW50c1swXSkuZ2V0RGVjbGFyZWRFbGVtZW50cygpWzBdOworICAgIGZpbmFsIFBzaUNsYXNzVHlwZSB0eXBlID0gKFBzaUNsYXNzVHlwZSkgdmFyaWFibGUuZ2V0VHlwZSgpOworICAgIGZpbmFsIFBzaUNsYXNzVHlwZS5DbGFzc1Jlc29sdmVSZXN1bHQgcmVzb2x2ZUNsYXNzVHlwZVJlc3VsdCA9IHR5cGUucmVzb2x2ZUdlbmVyaWNzKCk7CisgICAgYXNzZXJ0Tm90TnVsbChyZXNvbHZlQ2xhc3NUeXBlUmVzdWx0LmdldEVsZW1lbnQoKSk7CisKKyAgICBmaW5hbCBQc2lSZWZlcmVuY2VFeHByZXNzaW9uIG1ldGhvZEV4cHJlc3Npb24KKyAgICAgICAgICAgID0gKChQc2lNZXRob2RDYWxsRXhwcmVzc2lvbikgKChQc2lFeHByZXNzaW9uU3RhdGVtZW50KSBtZXRob2RTdGF0ZW1lbnRzWzJdKS5nZXRFeHByZXNzaW9uKCkpLmdldE1ldGhvZEV4cHJlc3Npb24oKTsKKyAgICBmaW5hbCBQc2lFeHByZXNzaW9uIHF1YWxpZmllckV4cHJlc3Npb24gPSBtZXRob2RFeHByZXNzaW9uLmdldFF1YWxpZmllckV4cHJlc3Npb24oKTsKKyAgICBmaW5hbCBQc2lDbGFzc1R5cGUgcXVhbGlmaWVyVHlwZSA9IChQc2lDbGFzc1R5cGUpIHF1YWxpZmllckV4cHJlc3Npb24uZ2V0VHlwZSgpOworICAgIGFzc2VydEZhbHNlKHF1YWxpZmllclR5cGUuaGFzUGFyYW1ldGVycygpKTsKKyAgICBmaW5hbCBQc2lUeXBlIHR5cGVGcm9tVGV4dCA9IGZhY3RvcnkuY3JlYXRlVHlwZUZyb21UZXh0KCJ0ZXN0Lkxpc3QiLCBudWxsKTsKKyAgICBhc3NlcnRFcXVhbHMocXVhbGlmaWVyVHlwZSwgdHlwZUZyb21UZXh0KTsKKworICAgIGZpbmFsIFBzaUVsZW1lbnQgcHNpRWxlbWVudCA9ICgoUHNpUmVmZXJlbmNlRXhwcmVzc2lvbikgcXVhbGlmaWVyRXhwcmVzc2lvbikucmVzb2x2ZSgpOworICAgIGFzc2VydFRydWUocHNpRWxlbWVudCBpbnN0YW5jZW9mIFBzaVZhcmlhYmxlKTsKKyAgICBmaW5hbCBKYXZhUmVzb2x2ZVJlc3VsdCByZXNvbHZlUmVzdWx0ID0gbWV0aG9kRXhwcmVzc2lvbi5hZHZhbmNlZFJlc29sdmUoZmFsc2UpOworICAgIGFzc2VydFRydWUocmVzb2x2ZVJlc3VsdC5nZXRFbGVtZW50KCkgaW5zdGFuY2VvZiBQc2lNZXRob2QpOworICAgIGZpbmFsIFBzaU1ldGhvZCBtZXRob2RGcm9tTGlzdCA9IChQc2lNZXRob2QpIHJlc29sdmVSZXN1bHQuZ2V0RWxlbWVudCgpOworICAgIGFzc2VydEVxdWFscygiYWRkIiwgbWV0aG9kRnJvbUxpc3QuZ2V0TmFtZSgpKTsKKyAgICBhc3NlcnRFcXVhbHMoInRlc3QuTGlzdCIsIG1ldGhvZEZyb21MaXN0LmdldENvbnRhaW5pbmdDbGFzcygpLmdldFF1YWxpZmllZE5hbWUoKSk7CisgIH0KKworCisKKyAgcHVibGljIHZvaWQgdGVzdFJhd1R5cGVJbk1ldGhvZEFyZygpIHRocm93cyBFeGNlcHRpb24geworICAgIGZpbmFsIFBzaUNsYXNzIGNsYXNzQSA9IGdldEphdmFGYWNhZGUoKS5maW5kQ2xhc3MoIkEiKTsKKyAgICBhc3NlcnROb3ROdWxsKGNsYXNzQSk7CisKKyAgICBmaW5hbCBQc2lNZXRob2QgbWV0aG9kID0gY2xhc3NBLmdldE1ldGhvZHMoKVswXTsKKyAgICBmaW5hbCBQc2lTdGF0ZW1lbnRbXSBtZXRob2RTdGF0ZW1lbnRzID0gbWV0aG9kLmdldEJvZHkoKS5nZXRTdGF0ZW1lbnRzKCk7CisgICAgZmluYWwgUHNpUmVmZXJlbmNlRXhwcmVzc2lvbiBtZXRob2RFeHByZXNzaW9uCisgICAgICAgICAgICA9ICgoUHNpTWV0aG9kQ2FsbEV4cHJlc3Npb24pICgoUHNpRXhwcmVzc2lvblN0YXRlbWVudCkgbWV0aG9kU3RhdGVtZW50c1syXSkuZ2V0RXhwcmVzc2lvbigpKS5nZXRNZXRob2RFeHByZXNzaW9uKCk7CisgICAgZmluYWwgSmF2YVJlc29sdmVSZXN1bHQgcmVzb2x2ZVJlc3VsdCA9IG1ldGhvZEV4cHJlc3Npb24uYWR2YW5jZWRSZXNvbHZlKGZhbHNlKTsKKyAgICBhc3NlcnRUcnVlKHJlc29sdmVSZXN1bHQuZ2V0RWxlbWVudCgpIGluc3RhbmNlb2YgUHNpTWV0aG9kKTsKKyAgICBmaW5hbCBQc2lNZXRob2QgbWV0aG9kRnJvbUxpc3QgPSAoUHNpTWV0aG9kKSByZXNvbHZlUmVzdWx0LmdldEVsZW1lbnQoKTsKKyAgICBhc3NlcnRFcXVhbHMoInB1dEFsbCIsIG1ldGhvZEZyb21MaXN0LmdldE5hbWUoKSk7CisgICAgYXNzZXJ0RXF1YWxzKCJ0ZXN0Lkxpc3QiLCBtZXRob2RGcm9tTGlzdC5nZXRDb250YWluaW5nQ2xhc3MoKS5nZXRRdWFsaWZpZWROYW1lKCkpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEJvdW5kZWRQYXJhbXMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBmaW5hbCBKYXZhUHNpRmFjYWRlRXggcHNpTWFuYWdlciA9IGdldEphdmFGYWNhZGUoKTsKKyAgICBmaW5hbCBQc2lFbGVtZW50RmFjdG9yeSBmYWN0b3J5ID0gcHNpTWFuYWdlci5nZXRFbGVtZW50RmFjdG9yeSgpOworICAgIGZpbmFsIFBzaUNsYXNzIGNsYXNzQSA9IHBzaU1hbmFnZXIuZmluZENsYXNzKCJBIik7CisgICAgYXNzZXJ0Tm90TnVsbChjbGFzc0EpOworCisgICAgZmluYWwgUHNpTWV0aG9kIG1ldGhvZCA9IGNsYXNzQS5nZXRNZXRob2RzKClbMF07CisgICAgZmluYWwgUHNpU3RhdGVtZW50W10gc3RhdGVtZW50cyA9IG1ldGhvZC5nZXRCb2R5KCkuZ2V0U3RhdGVtZW50cygpOworCisgICAgZmluYWwgUHNpVmFyaWFibGUgdmFyID0gKFBzaVZhcmlhYmxlKSAoKFBzaURlY2xhcmF0aW9uU3RhdGVtZW50KSBzdGF0ZW1lbnRzWzBdKS5nZXREZWNsYXJlZEVsZW1lbnRzKClbMF07CisgICAgZmluYWwgUHNpVHlwZSB2YXJUeXBlID0gdmFyLmdldFR5cGUoKTsKKyAgICBmaW5hbCBQc2lUeXBlIHR5cGVSYXdJdGVyYXRvciA9IGZhY3RvcnkuY3JlYXRlVHlwZUZyb21UZXh0KCJ0ZXN0Lkl0ZXJhdG9yIiwgbnVsbCk7CisgICAgYXNzZXJ0RXF1YWxzKHZhclR5cGUsIHR5cGVSYXdJdGVyYXRvcik7CisKKyAgICBmaW5hbCBQc2lUeXBlIGluaXRpYWxpemVyVHlwZSA9IHZhci5nZXRJbml0aWFsaXplcigpLmdldFR5cGUoKTsKKyAgICBhc3NlcnRFcXVhbHMoaW5pdGlhbGl6ZXJUeXBlLCB0eXBlUmF3SXRlcmF0b3IpOworICAgIGFzc2VydFRydWUodmFyVHlwZS5pc0Fzc2lnbmFibGVGcm9tKGluaXRpYWxpemVyVHlwZSkpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFJhd1R5cGVFeHRlbnNpb24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBmaW5hbCBKYXZhUHNpRmFjYWRlRXggcHNpTWFuYWdlciA9IGdldEphdmFGYWNhZGUoKTsKKyAgICBmaW5hbCBQc2lFbGVtZW50RmFjdG9yeSBmYWN0b3J5ID0gcHNpTWFuYWdlci5nZXRFbGVtZW50RmFjdG9yeSgpOworICAgIGZpbmFsIFBzaUNsYXNzIGNsYXNzQSA9IHBzaU1hbmFnZXIuZmluZENsYXNzKCJBIik7CisgICAgYXNzZXJ0Tm90TnVsbChjbGFzc0EpOworCisgICAgZmluYWwgUHNpTWV0aG9kIG1ldGhvZCA9IGNsYXNzQS5nZXRNZXRob2RzKClbMF07CisgICAgZmluYWwgUHNpU3RhdGVtZW50W10gc3RhdGVtZW50cyA9IG1ldGhvZC5nZXRCb2R5KCkuZ2V0U3RhdGVtZW50cygpOworCisgICAgZmluYWwgUHNpVmFyaWFibGUgdmFyID0gKFBzaVZhcmlhYmxlKSAoKFBzaURlY2xhcmF0aW9uU3RhdGVtZW50KSBzdGF0ZW1lbnRzWzBdKS5nZXREZWNsYXJlZEVsZW1lbnRzKClbMF07CisgICAgZmluYWwgUHNpVHlwZSB2YXJUeXBlID0gdmFyLmdldFR5cGUoKTsKKyAgICBmaW5hbCBQc2lUeXBlIHR5cGVSYXdJdGVyYXRvciA9IGZhY3RvcnkuY3JlYXRlVHlwZUZyb21UZXh0KCJ0ZXN0Lkl0ZXJhdG9yIiwgbnVsbCk7CisgICAgYXNzZXJ0RXF1YWxzKHZhclR5cGUsIHR5cGVSYXdJdGVyYXRvcik7CisKKyAgICBmaW5hbCBQc2lUeXBlIGluaXRpYWxpemVyVHlwZSA9IHZhci5nZXRJbml0aWFsaXplcigpLmdldFR5cGUoKTsKKyAgICBhc3NlcnRFcXVhbHMoaW5pdGlhbGl6ZXJUeXBlLCB0eXBlUmF3SXRlcmF0b3IpOworICAgIGFzc2VydFRydWUodmFyVHlwZS5pc0Fzc2lnbmFibGVGcm9tKGluaXRpYWxpemVyVHlwZSkpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFR5cGVzSW5HZW5lcmljQ2xhc3MoKSB7CisgICAgZmluYWwgSmF2YVBzaUZhY2FkZUV4IHBzaU1hbmFnZXIgPSBnZXRKYXZhRmFjYWRlKCk7CisgICAgZmluYWwgUHNpRWxlbWVudEZhY3RvcnkgZmFjdG9yeSA9IHBzaU1hbmFnZXIuZ2V0RWxlbWVudEZhY3RvcnkoKTsKKyAgICBmaW5hbCBQc2lDbGFzcyBjbGFzc0EgPSBwc2lNYW5hZ2VyLmZpbmRDbGFzcygiQSIpOworICAgIGFzc2VydE5vdE51bGwoY2xhc3NBKTsKKworICAgIGZpbmFsIFBzaVR5cGVQYXJhbWV0ZXIgcGFyYW1ldGVyVCA9IGNsYXNzQS5nZXRUeXBlUGFyYW1ldGVycygpWzBdOworICAgIGFzc2VydEVxdWFscygiVCIsIHBhcmFtZXRlclQuZ2V0TmFtZSgpKTsKKworICAgIGZpbmFsIFBzaU1ldGhvZCBtZXRob2QgPSBjbGFzc0EuZmluZE1ldGhvZHNCeU5hbWUoIm1ldGhvZCIsIGZhbHNlKVswXTsKKyAgICBmaW5hbCBQc2lUeXBlIHR5cGUgPSAoKFBzaUV4cHJlc3Npb25TdGF0ZW1lbnQpIG1ldGhvZC5nZXRCb2R5KCkuZ2V0U3RhdGVtZW50cygpWzBdKS5nZXRFeHByZXNzaW9uKCkuZ2V0VHlwZSgpOworICAgIGZpbmFsIFBzaUNsYXNzVHlwZSB0eXBlVCA9IGZhY3RvcnkuY3JlYXRlVHlwZShwYXJhbWV0ZXJUKTsKKyAgICBhc3NlcnRFcXVhbHMoIlQiLCB0eXBlVC5nZXRQcmVzZW50YWJsZVRleHQoKSk7CisKKyAgICBhc3NlcnRFcXVhbHModHlwZVQsIHR5cGUpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEFzc2lnbmFibGVTdWJJbmhlcml0b3IoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBmaW5hbCBKYXZhUHNpRmFjYWRlRXggcHNpTWFuYWdlciA9IGdldEphdmFGYWNhZGUoKTsKKyAgICBmaW5hbCBQc2lFbGVtZW50RmFjdG9yeSBmYWN0b3J5ID0gcHNpTWFuYWdlci5nZXRFbGVtZW50RmFjdG9yeSgpOworICAgIGZpbmFsIFBzaUNsYXNzIGNsYXNzQ29sbGVjdGlvbiA9IHBzaU1hbmFnZXIuZmluZENsYXNzKCJ0ZXN0LkNvbGxlY3Rpb24iKTsKKyAgICBmaW5hbCBQc2lDbGFzcyBjbGFzc0xpc3QgPSBwc2lNYW5hZ2VyLmZpbmRDbGFzcygidGVzdC5MaXN0Iik7CisgICAgZmluYWwgUHNpVHlwZSBjb2xsZWN0aW9uVHlwZSA9IGZhY3RvcnkuY3JlYXRlVHlwZShjbGFzc0NvbGxlY3Rpb24sIFBzaVN1YnN0aXR1dG9yLkVNUFRZKTsKKyAgICBmaW5hbCBQc2lUeXBlIGxpc3RUeXBlID0gZmFjdG9yeS5jcmVhdGVUeXBlKGNsYXNzTGlzdCwgUHNpU3Vic3RpdHV0b3IuRU1QVFkpOworICAgIGFzc2VydEVxdWFscyhjb2xsZWN0aW9uVHlwZS5nZXRDYW5vbmljYWxUZXh0KCksICJ0ZXN0LkNvbGxlY3Rpb248RT4iKTsKKyAgICBhc3NlcnRFcXVhbHMobGlzdFR5cGUuZ2V0Q2Fub25pY2FsVGV4dCgpLCAidGVzdC5MaXN0PFQ+Iik7CisKKyAgICBmaW5hbCBQc2lUeXBlIHR5cGVMaXN0T2ZTdHJpbmcgPSBmYWN0b3J5LmNyZWF0ZVR5cGVGcm9tVGV4dCgidGVzdC5MaXN0PGphdmEubGFuZy5TdHJpbmc+IiwgbnVsbCk7CisgICAgZmluYWwgUHNpVHlwZSB0eXBlQ29sbGVjdGlvbk9mU3RyaW5nID0gZmFjdG9yeS5jcmVhdGVUeXBlRnJvbVRleHQoInRlc3QuQ29sbGVjdGlvbjxqYXZhLmxhbmcuU3RyaW5nPiIsIG51bGwpOworICAgIGFzc2VydFRydWUodHlwZUNvbGxlY3Rpb25PZlN0cmluZy5pc0Fzc2lnbmFibGVGcm9tKHR5cGVMaXN0T2ZTdHJpbmcpKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RDb21wbGV4SW5oZXJpdGFuY2UoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBmaW5hbCBKYXZhUHNpRmFjYWRlRXggcHNpTWFuYWdlciA9IGdldEphdmFGYWNhZGUoKTsKKyAgICBmaW5hbCBQc2lFbGVtZW50RmFjdG9yeSBmYWN0b3J5ID0gcHNpTWFuYWdlci5nZXRFbGVtZW50RmFjdG9yeSgpOworICAgIGZpbmFsIFBzaUNsYXNzIGNsYXNzQSA9IHBzaU1hbmFnZXIuZmluZENsYXNzKCJBIik7CisgICAgYXNzZXJ0Tm90TnVsbChjbGFzc0EpOworCisgICAgZmluYWwgUHNpTWV0aG9kIG1ldGhvZCA9IGNsYXNzQS5maW5kTWV0aG9kc0J5TmFtZSgibWV0aG9kIiwgZmFsc2UpWzBdOworICAgIGZpbmFsIFBzaUV4cHJlc3Npb24gZXhwcmVzc2lvbiA9ICgoUHNpRXhwcmVzc2lvblN0YXRlbWVudCkgbWV0aG9kLmdldEJvZHkoKS5nZXRTdGF0ZW1lbnRzKClbMV0pLmdldEV4cHJlc3Npb24oKTsKKyAgICBhc3NlcnRFcXVhbHMoImwuZ2V0KDApIiwgZXhwcmVzc2lvbi5nZXRUZXh0KCkpOworCisgICAgZmluYWwgUHNpVHlwZSB0eXBlID0gZXhwcmVzc2lvbi5nZXRUeXBlKCk7CisgICAgZmluYWwgUHNpVHlwZSBsaXN0T2ZJbnRlZ2VyID0gZmFjdG9yeS5jcmVhdGVUeXBlRnJvbVRleHQoInRlc3QuTGlzdDxqYXZhLmxhbmcuSW50ZWdlcj4iLCBudWxsKTsKKyAgICBhc3NlcnRFcXVhbHMobGlzdE9mSW50ZWdlciwgdHlwZSk7CisgICAgZmluYWwgUHNpVHlwZSBjb2xsZWN0aW9uT2ZJbnRlZ2VyID0gZmFjdG9yeS5jcmVhdGVUeXBlRnJvbVRleHQoInRlc3QuQ29sbGVjdGlvbjxqYXZhLmxhbmcuSW50ZWdlcj4iLCBudWxsKTsKKyAgICBhc3NlcnRUcnVlKGNvbGxlY3Rpb25PZkludGVnZXIuaXNBc3NpZ25hYmxlRnJvbSh0eXBlKSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0TGlzdExpc3RJbmhlcml0YW5jZSgpIHRocm93cyBFeGNlcHRpb24geworICAgIGZpbmFsIEphdmFQc2lGYWNhZGVFeCBwc2lNYW5hZ2VyID0gZ2V0SmF2YUZhY2FkZSgpOworICAgIGZpbmFsIFBzaUVsZW1lbnRGYWN0b3J5IGZhY3RvcnkgPSBwc2lNYW5hZ2VyLmdldEVsZW1lbnRGYWN0b3J5KCk7CisgICAgZmluYWwgUHNpQ2xhc3MgY2xhc3NBID0gcHNpTWFuYWdlci5maW5kQ2xhc3MoIkEiKTsKKyAgICBhc3NlcnROb3ROdWxsKGNsYXNzQSk7CisKKyAgICBmaW5hbCBQc2lNZXRob2QgbWV0aG9kID0gY2xhc3NBLmZpbmRNZXRob2RzQnlOYW1lKCJtZXRob2QiLCBmYWxzZSlbMF07CisKKyAgICBmaW5hbCBQc2lFeHByZXNzaW9uIGV4cHJlc3Npb24xID0gKChQc2lFeHByZXNzaW9uU3RhdGVtZW50KSBtZXRob2QuZ2V0Qm9keSgpLmdldFN0YXRlbWVudHMoKVsxXSkuZ2V0RXhwcmVzc2lvbigpOworICAgIGFzc2VydEVxdWFscygibC5nZXQoMCkiLCBleHByZXNzaW9uMS5nZXRUZXh0KCkpOworICAgIGZpbmFsIFBzaVR5cGUgdHlwZTEgPSBleHByZXNzaW9uMS5nZXRUeXBlKCk7CisgICAgZmluYWwgUHNpVHlwZSB0eXBlTGlzdE9mSW50ZWdlciA9IGZhY3RvcnkuY3JlYXRlVHlwZUZyb21UZXh0KCJ0ZXN0Lkxpc3Q8amF2YS5sYW5nLkludGVnZXI+IiwgbnVsbCk7CisgICAgYXNzZXJ0RXF1YWxzKHR5cGVMaXN0T2ZJbnRlZ2VyLCB0eXBlMSk7CisgICAgYXNzZXJ0VHJ1ZSh0eXBlTGlzdE9mSW50ZWdlci5pc0Fzc2lnbmFibGVGcm9tKHR5cGUxKSk7CisKKyAgICBmaW5hbCBQc2lFeHByZXNzaW9uIGV4cHJlc3Npb24yID0gKChQc2lFeHByZXNzaW9uU3RhdGVtZW50KSBtZXRob2QuZ2V0Qm9keSgpLmdldFN0YXRlbWVudHMoKVszXSkuZ2V0RXhwcmVzc2lvbigpOworICAgIGFzc2VydEVxdWFscygiYi5nZXQoMCkiLCBleHByZXNzaW9uMi5nZXRUZXh0KCkpOworICAgIGZpbmFsIFBzaVR5cGUgdHlwZTIgPSBleHByZXNzaW9uMi5nZXRUeXBlKCk7CisgICAgYXNzZXJ0RXF1YWxzKHR5cGVMaXN0T2ZJbnRlZ2VyLCB0eXBlMik7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0U3BhY2VJblR5cGVQYXJhbWV0ZXJMaXN0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZmluYWwgSmF2YVBzaUZhY2FkZUV4IHBzaU1hbmFnZXIgPSBnZXRKYXZhRmFjYWRlKCk7CisgICAgZmluYWwgUHNpRWxlbWVudEZhY3RvcnkgZmFjdG9yeSA9IHBzaU1hbmFnZXIuZ2V0RWxlbWVudEZhY3RvcnkoKTsKKyAgICBmaW5hbCBQc2lDbGFzcyBjbGFzc0EgPSBwc2lNYW5hZ2VyLmZpbmRDbGFzcygiQSIpOworICAgIGFzc2VydE5vdE51bGwoY2xhc3NBKTsKKworICAgIGZpbmFsIFBzaU1ldGhvZCBtZXRob2QgPSBjbGFzc0EuZmluZE1ldGhvZHNCeU5hbWUoIm1ldGhvZCIsIGZhbHNlKVswXTsKKworICAgIGZpbmFsIFBzaVZhcmlhYmxlIHZhcmlhYmxlID0gKFBzaVZhcmlhYmxlKSAoKFBzaURlY2xhcmF0aW9uU3RhdGVtZW50KSBtZXRob2QuZ2V0Qm9keSgpLmdldFN0YXRlbWVudHMoKVswXSkuZ2V0RGVjbGFyZWRFbGVtZW50cygpWzBdOworICAgIGZpbmFsIFBzaVR5cGUgdHlwZSA9IHZhcmlhYmxlLmdldFR5cGUoKTsKKyAgICBmaW5hbCBQc2lUeXBlIHR5cGVMaXN0T2ZMaXN0T2ZJbnRlZ2VyID0gZmFjdG9yeS5jcmVhdGVUeXBlRnJvbVRleHQoInRlc3QuTGlzdDx0ZXN0Lkxpc3Q8amF2YS5sYW5nLkludGVnZXI+PiIsIG51bGwpOworICAgIGFzc2VydEVxdWFscyh0eXBlTGlzdE9mTGlzdE9mSW50ZWdlciwgdHlwZSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0TWV0aG9kVHlwZVBhcmFtZXRlcigpIHRocm93cyBFeGNlcHRpb24geworICAgIGZpbmFsIEphdmFQc2lGYWNhZGVFeCBwc2lNYW5hZ2VyID0gZ2V0SmF2YUZhY2FkZSgpOworICAgIGZpbmFsIFBzaUVsZW1lbnRGYWN0b3J5IGZhY3RvcnkgPSBwc2lNYW5hZ2VyLmdldEVsZW1lbnRGYWN0b3J5KCk7CisgICAgZmluYWwgUHNpQ2xhc3MgY2xhc3NBID0gcHNpTWFuYWdlci5maW5kQ2xhc3MoIkEiKTsKKyAgICBhc3NlcnROb3ROdWxsKGNsYXNzQSk7CisKKyAgICBmaW5hbCBQc2lNZXRob2QgbWV0aG9kID0gY2xhc3NBLmZpbmRNZXRob2RzQnlOYW1lKCJtZXRob2QiLCBmYWxzZSlbMF07CisgICAgZmluYWwgUHNpU3RhdGVtZW50W10gc3RhdGVtZW50cyA9IG1ldGhvZC5nZXRCb2R5KCkuZ2V0U3RhdGVtZW50cygpOworCisgICAgZmluYWwgUHNpTWV0aG9kQ2FsbEV4cHJlc3Npb24gbWV0aG9kQ2FsbEV4cHJlc3Npb24gPSAoUHNpTWV0aG9kQ2FsbEV4cHJlc3Npb24pICgoUHNpRXhwcmVzc2lvblN0YXRlbWVudCkgc3RhdGVtZW50c1sxXSkuZ2V0RXhwcmVzc2lvbigpOworICAgIGlzQ29sbGVjdGlvblV0aWxTb3J0KG1ldGhvZENhbGxFeHByZXNzaW9uLCBmYWN0b3J5LmNyZWF0ZVR5cGVGcm9tVGV4dCgiamF2YS5sYW5nLkludGVnZXIiLCBudWxsKSk7CisKKyAgICBmaW5hbCBQc2lNZXRob2RDYWxsRXhwcmVzc2lvbiBtZXRob2RDYWxsRXhwcmVzc2lvbjEgPSAoUHNpTWV0aG9kQ2FsbEV4cHJlc3Npb24pICgoUHNpRXhwcmVzc2lvblN0YXRlbWVudCkgc3RhdGVtZW50c1szXSkuZ2V0RXhwcmVzc2lvbigpOworICAgIGlzQ29sbGVjdGlvblV0aWxTb3J0KG1ldGhvZENhbGxFeHByZXNzaW9uMSwgbnVsbCk7CisgIH0KKworICBwcml2YXRlIHN0YXRpYyB2b2lkIGlzQ29sbGVjdGlvblV0aWxTb3J0KGZpbmFsIFBzaU1ldGhvZENhbGxFeHByZXNzaW9uIG1ldGhvZENhbGxFeHByZXNzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmluYWwgUHNpVHlwZSB0eXBlUGFyYW1ldGVyVmFsdWUpIHsKKyAgICBmaW5hbCBQc2lSZWZlcmVuY2VFeHByZXNzaW9uIG1ldGhvZEV4cHJlc3Npb24gPSBtZXRob2RDYWxsRXhwcmVzc2lvbi5nZXRNZXRob2RFeHByZXNzaW9uKCk7CisgICAgZmluYWwgSmF2YVJlc29sdmVSZXN1bHQgbWV0aG9kUmVzb2x2ZSA9IG1ldGhvZEV4cHJlc3Npb24uYWR2YW5jZWRSZXNvbHZlKGZhbHNlKTsKKyAgICBhc3NlcnRUcnVlKG1ldGhvZFJlc29sdmUuZ2V0RWxlbWVudCgpIGluc3RhbmNlb2YgUHNpTWV0aG9kKTsKKyAgICBmaW5hbCBQc2lNZXRob2QgbWV0aG9kU29ydCA9IChQc2lNZXRob2QpIG1ldGhvZFJlc29sdmUuZ2V0RWxlbWVudCgpOworICAgIGFzc2VydEVxdWFscygic29ydCIsIG1ldGhvZFNvcnQuZ2V0TmFtZSgpKTsKKyAgICBhc3NlcnRFcXVhbHMoInRlc3QuQ29sbGVjdGlvblV0aWwiLCBtZXRob2RTb3J0LmdldENvbnRhaW5pbmdDbGFzcygpLmdldFF1YWxpZmllZE5hbWUoKSk7CisgICAgZmluYWwgUHNpVHlwZVBhcmFtZXRlciBtZXRob2RTb3J0VHlwZVBhcmFtZXRlciA9IG1ldGhvZFNvcnQuZ2V0VHlwZVBhcmFtZXRlcnMoKVswXTsKKyAgICBmaW5hbCBQc2lUeXBlIHNvcnRQYXJhbWV0ZXJBY3R1YWxUeXBlID0gbWV0aG9kUmVzb2x2ZS5nZXRTdWJzdGl0dXRvcigpLnN1YnN0aXR1dGUobWV0aG9kU29ydFR5cGVQYXJhbWV0ZXIpOworICAgIGFzc2VydFRydWUoQ29tcGFyaW5nLmVxdWFsKHNvcnRQYXJhbWV0ZXJBY3R1YWxUeXBlLCB0eXBlUGFyYW1ldGVyVmFsdWUpKTsKKyAgICBhc3NlcnRUcnVlKAorICAgICAgICAgICAgUHNpVXRpbC5pc0FwcGxpY2FibGUobWV0aG9kU29ydCwgbWV0aG9kUmVzb2x2ZS5nZXRTdWJzdGl0dXRvcigpLCBtZXRob2RDYWxsRXhwcmVzc2lvbi5nZXRBcmd1bWVudExpc3QoKSkpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFJhd0FycmF5VHlwZXMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBmaW5hbCBKYXZhUHNpRmFjYWRlRXggcHNpTWFuYWdlciA9IGdldEphdmFGYWNhZGUoKTsKKyAgICBmaW5hbCBQc2lFbGVtZW50RmFjdG9yeSBmYWN0b3J5ID0gcHNpTWFuYWdlci5nZXRFbGVtZW50RmFjdG9yeSgpOworICAgIGZpbmFsIFBzaUNsYXNzIGNsYXNzQSA9IHBzaU1hbmFnZXIuZmluZENsYXNzKCJBIik7CisgICAgYXNzZXJ0Tm90TnVsbChjbGFzc0EpOworCisgICAgZmluYWwgUHNpTWV0aG9kIG1ldGhvZCA9IGNsYXNzQS5maW5kTWV0aG9kc0J5TmFtZSgibWV0aG9kIiwgZmFsc2UpWzBdOworICAgIGZpbmFsIFBzaVN0YXRlbWVudFtdIHN0YXRlbWVudHMgPSBtZXRob2QuZ2V0Qm9keSgpLmdldFN0YXRlbWVudHMoKTsKKworICAgIGZpbmFsIFBzaURlY2xhcmF0aW9uU3RhdGVtZW50IGRlY2xhcmF0aW9uU3RhdGVtZW50ID0gKFBzaURlY2xhcmF0aW9uU3RhdGVtZW50KSBzdGF0ZW1lbnRzWzBdOworICAgIGZpbmFsIFBzaUNsYXNzVHlwZSB0eXBlT2ZMID0gKFBzaUNsYXNzVHlwZSkgKChQc2lWYXJpYWJsZSkgZGVjbGFyYXRpb25TdGF0ZW1lbnQuZ2V0RGVjbGFyZWRFbGVtZW50cygpWzBdKS5nZXRUeXBlKCk7CisgICAgZmluYWwgUHNpVHlwZSB0eXBlUmF3TGlzdCA9IGZhY3RvcnkuY3JlYXRlVHlwZUZyb21UZXh0KCJ0ZXN0Lkxpc3QiLCBudWxsKTsKKyAgICBhc3NlcnRUcnVlKENvbXBhcmluZy5lcXVhbCh0eXBlT2ZMLCB0eXBlUmF3TGlzdCkpOworICAgIGZpbmFsIFBzaVN1YnN0aXR1dG9yIHR5cGVPZkxTdWJzdGl0dXRvciA9IHR5cGVPZkwucmVzb2x2ZUdlbmVyaWNzKCkuZ2V0U3Vic3RpdHV0b3IoKTsKKworICAgIGZpbmFsIFBzaU1ldGhvZENhbGxFeHByZXNzaW9uIGV4cHJHZXRBcnJheSA9IChQc2lNZXRob2RDYWxsRXhwcmVzc2lvbikgKChQc2lFeHByZXNzaW9uU3RhdGVtZW50KSBzdGF0ZW1lbnRzWzFdKS5nZXRFeHByZXNzaW9uKCk7CisgICAgZmluYWwgUHNpVHlwZSB0eXBlT2ZHZXRBcnJheUNhbGwgPSBleHByR2V0QXJyYXkuZ2V0VHlwZSgpOworICAgIGZpbmFsIFBzaVR5cGUgb2JqZWN0QXJyYXlUeXBlID0gZmFjdG9yeS5jcmVhdGVUeXBlRnJvbVRleHQoImphdmEubGFuZy5PYmplY3RbXSIsIG51bGwpOworICAgIGFzc2VydFRydWUoQ29tcGFyaW5nLmVxdWFsKHR5cGVPZkdldEFycmF5Q2FsbCwgb2JqZWN0QXJyYXlUeXBlKSk7CisgICAgZmluYWwgUHNpTWV0aG9kIG1ldGhvZEdldEFycmF5ID0gKFBzaU1ldGhvZCkgZXhwckdldEFycmF5LmdldE1ldGhvZEV4cHJlc3Npb24oKS5yZXNvbHZlKCk7CisgICAgZmluYWwgUHNpVHlwZSBzdWJ0aXR1dGVkR2V0QXJyYXlSZXR1cm5UeXBlID0gdHlwZU9mTFN1YnN0aXR1dG9yLnN1YnN0aXR1dGUobWV0aG9kR2V0QXJyYXkuZ2V0UmV0dXJuVHlwZSgpKTsKKyAgICBhc3NlcnRUcnVlKENvbXBhcmluZy5lcXVhbChzdWJ0aXR1dGVkR2V0QXJyYXlSZXR1cm5UeXBlLCBvYmplY3RBcnJheVR5cGUpKTsKKworCisgICAgZmluYWwgUHNpTWV0aG9kQ2FsbEV4cHJlc3Npb24gZXhwckdldExpc3RPZkFycmF5ID0gKFBzaU1ldGhvZENhbGxFeHByZXNzaW9uKSAoKFBzaUV4cHJlc3Npb25TdGF0ZW1lbnQpIHN0YXRlbWVudHNbMl0pLmdldEV4cHJlc3Npb24oKTsKKyAgICBmaW5hbCBQc2lNZXRob2QgbWV0aG9kR2V0TGlzdE9mQXJyYXkgPSAoUHNpTWV0aG9kKSBleHByR2V0TGlzdE9mQXJyYXkuZ2V0TWV0aG9kRXhwcmVzc2lvbigpLnJlc29sdmUoKTsKKyAgICBmaW5hbCBQc2lUeXBlIHJldHVyblR5cGUgPSBtZXRob2RHZXRMaXN0T2ZBcnJheS5nZXRSZXR1cm5UeXBlKCk7CisgICAgZmluYWwgUHNpVHlwZSBzdWJzdGl0dXRlZFJldHVyblR5cGUgPSB0eXBlT2ZMU3Vic3RpdHV0b3Iuc3Vic3RpdHV0ZShyZXR1cm5UeXBlKTsKKyAgICBhc3NlcnRUcnVlKENvbXBhcmluZy5lcXVhbChzdWJzdGl0dXRlZFJldHVyblR5cGUsIHR5cGVSYXdMaXN0KSk7CisKKyAgICBmaW5hbCBQc2lUeXBlIHR5cGVPZkdldExpc3RPZkFycmF5Q2FsbCA9IGV4cHJHZXRMaXN0T2ZBcnJheS5nZXRUeXBlKCk7CisgICAgYXNzZXJ0VHJ1ZShDb21wYXJpbmcuZXF1YWwodHlwZU9mR2V0TGlzdE9mQXJyYXlDYWxsLCB0eXBlUmF3TGlzdCkpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFdpbGRjYXJkVHlwZVBhcnNpbmcoKSB0aHJvd3MgRXhjZXB0aW9ueworICAgIGZpbmFsIEdsb2JhbFNlYXJjaFNjb3BlIHNjb3BlID0gR2xvYmFsU2VhcmNoU2NvcGUubW9kdWxlV2l0aERlcGVuZGVuY2llc0FuZExpYnJhcmllc1Njb3BlKG15TW9kdWxlKTsKKyAgICBmaW5hbCBQc2lDbGFzc1R5cGUgamF2YUxhbmdPYmplY3QgPSBQc2lUeXBlLmdldEphdmFMYW5nT2JqZWN0KG15UHNpTWFuYWdlciwgc2NvcGUpOworCisgICAgUHNpRWxlbWVudCBlbGVtZW50ID0gKChQc2lEZWNsYXJhdGlvblN0YXRlbWVudClteUphdmFGYWNhZGUuZ2V0RWxlbWVudEZhY3RvcnkoKS5jcmVhdGVTdGF0ZW1lbnRGcm9tVGV4dCgiWDw/IGV4dGVuZHMgWSwgPyBzdXBlciBaPEEsQj4sID8+IHg7IiwgbnVsbCkpLmdldERlY2xhcmVkRWxlbWVudHMoKVswXTsKKyAgICBQc2lKYXZhQ29kZVJlZmVyZW5jZUVsZW1lbnQgcmVmZXJlbmNlRWxlbWVudCA9ICgoUHNpVmFyaWFibGUpIGVsZW1lbnQpLmdldFR5cGVFbGVtZW50KCkuZ2V0SW5uZXJtb3N0Q29tcG9uZW50UmVmZXJlbmNlRWxlbWVudCgpOworICAgIFBzaVR5cGVbXSB0eXBlQXJndW1lbnRzID0gcmVmZXJlbmNlRWxlbWVudC5nZXRUeXBlUGFyYW1ldGVycygpOworICAgIGFzc2VydEVxdWFscygzLCB0eXBlQXJndW1lbnRzLmxlbmd0aCk7CisgICAgYXNzZXJ0VHJ1ZSh0eXBlQXJndW1lbnRzWzBdIGluc3RhbmNlb2YgUHNpV2lsZGNhcmRUeXBlKTsKKyAgICBhc3NlcnRUcnVlKHR5cGVBcmd1bWVudHNbMV0gaW5zdGFuY2VvZiBQc2lXaWxkY2FyZFR5cGUpOworICAgIGFzc2VydFRydWUodHlwZUFyZ3VtZW50c1syXSBpbnN0YW5jZW9mIFBzaVdpbGRjYXJkVHlwZSk7CisgICAgUHNpV2lsZGNhcmRUeXBlIGV4dGVuZHNXaWxkY2FyZCA9IChQc2lXaWxkY2FyZFR5cGUpdHlwZUFyZ3VtZW50c1swXTsKKyAgICBQc2lXaWxkY2FyZFR5cGUgc3VwZXJXaWxkY2FyZCA9IChQc2lXaWxkY2FyZFR5cGUpdHlwZUFyZ3VtZW50c1sxXTsKKyAgICBQc2lXaWxkY2FyZFR5cGUgdW5ib3VuZGVkV2lsZGNhcmQgPSAoUHNpV2lsZGNhcmRUeXBlKXR5cGVBcmd1bWVudHNbMl07CisKKyAgICAvLyBleHRlbmRzIHdpbGRjYXJkIHRlc3QKKyAgICBhc3NlcnRUcnVlKGV4dGVuZHNXaWxkY2FyZC5pc0V4dGVuZHMoKSk7CisgICAgYXNzZXJ0RmFsc2UoZXh0ZW5kc1dpbGRjYXJkLmlzU3VwZXIoKSk7CisgICAgYXNzZXJ0RXF1YWxzKCJZIiwgZXh0ZW5kc1dpbGRjYXJkLmdldEJvdW5kKCkuZ2V0Q2Fub25pY2FsVGV4dCgpKTsKKyAgICBhc3NlcnRFcXVhbHMoIlkiLCBleHRlbmRzV2lsZGNhcmQuZ2V0RXh0ZW5kc0JvdW5kKCkuZ2V0Q2Fub25pY2FsVGV4dCgpKTsKKyAgICBhc3NlcnRFcXVhbHMoZXh0ZW5kc1dpbGRjYXJkLmdldFN1cGVyQm91bmQoKSwgUHNpVHlwZS5OVUxMKTsKKworICAgIC8vIHN1cGVyIHdpbGRjYXJkIHRlc3QKKyAgICBhc3NlcnRGYWxzZShzdXBlcldpbGRjYXJkLmlzRXh0ZW5kcygpKTsKKyAgICBhc3NlcnRUcnVlKHN1cGVyV2lsZGNhcmQuaXNTdXBlcigpKTsKKyAgICBhc3NlcnRFcXVhbHMoIlo8QSxCPiIsIHN1cGVyV2lsZGNhcmQuZ2V0Qm91bmQoKS5nZXRDYW5vbmljYWxUZXh0KCkpOworICAgIGFzc2VydEVxdWFscyhzdXBlcldpbGRjYXJkLmdldEV4dGVuZHNCb3VuZCgpLCBqYXZhTGFuZ09iamVjdCk7CisgICAgYXNzZXJ0RXF1YWxzKCJaPEEsQj4iLCBzdXBlcldpbGRjYXJkLmdldFN1cGVyQm91bmQoKS5nZXRDYW5vbmljYWxUZXh0KCkpOworCisgICAgLy8gdW5ib3VuZGVkIHdpbGRjYXJkIHRlc3QKKyAgICBhc3NlcnRGYWxzZSh1bmJvdW5kZWRXaWxkY2FyZC5pc0V4dGVuZHMoKSk7CisgICAgYXNzZXJ0RmFsc2UodW5ib3VuZGVkV2lsZGNhcmQuaXNTdXBlcigpKTsKKyAgICBhc3NlcnROdWxsKHVuYm91bmRlZFdpbGRjYXJkLmdldEJvdW5kKCkpOworICAgIGFzc2VydEVxdWFscyh1bmJvdW5kZWRXaWxkY2FyZC5nZXRFeHRlbmRzQm91bmQoKSwgamF2YUxhbmdPYmplY3QpOworICAgIGFzc2VydEVxdWFscyh1bmJvdW5kZWRXaWxkY2FyZC5nZXRTdXBlckJvdW5kKCksIFBzaVR5cGUuTlVMTCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0V2lsZGNhcmRUeXBlc0Fzc2lnbmFibGUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBQc2lDbGFzc1R5cGUgbGlzdE9mRXh0ZW5kc0Jhc2UgPSAoUHNpQ2xhc3NUeXBlKW15SmF2YUZhY2FkZS5nZXRFbGVtZW50RmFjdG9yeSgpLmNyZWF0ZVR5cGVGcm9tVGV4dCgidGVzdC5MaXN0PD8gZXh0ZW5kcyB1c2FnZXMuQmFzZT4iLCBudWxsKTsKKyAgICBQc2lDbGFzc1R5cGUuQ2xhc3NSZXNvbHZlUmVzdWx0IGNsYXNzUmVzb2x2ZVJlc3VsdCA9IGxpc3RPZkV4dGVuZHNCYXNlLnJlc29sdmVHZW5lcmljcygpOworICAgIFBzaUNsYXNzIGxpc3RDbGFzcyA9IGNsYXNzUmVzb2x2ZVJlc3VsdC5nZXRFbGVtZW50KCk7CisgICAgYXNzZXJ0Tm90TnVsbChsaXN0Q2xhc3MpOworICAgIFBzaVR5cGVQYXJhbWV0ZXIgbGlzdFR5cGVQYXJhbWV0ZXIgPSBQc2lVdGlsLnR5cGVQYXJhbWV0ZXJzSXRlcmF0b3IobGlzdENsYXNzKS5uZXh0KCk7CisgICAgUHNpVHlwZSBsaXN0UGFyYW1ldGVyVHlwZVZhbHVlID0gY2xhc3NSZXNvbHZlUmVzdWx0LmdldFN1YnN0aXR1dG9yKCkuc3Vic3RpdHV0ZShsaXN0VHlwZVBhcmFtZXRlcik7CisgICAgYXNzZXJ0VHJ1ZShsaXN0UGFyYW1ldGVyVHlwZVZhbHVlIGluc3RhbmNlb2YgUHNpV2lsZGNhcmRUeXBlKTsKKyAgICBhc3NlcnRUcnVlKCgoUHNpV2lsZGNhcmRUeXBlKWxpc3RQYXJhbWV0ZXJUeXBlVmFsdWUpLmlzRXh0ZW5kcygpKTsKKyAgICBhc3NlcnRFcXVhbHMoInVzYWdlcy5CYXNlIiwgKChQc2lXaWxkY2FyZFR5cGUpbGlzdFBhcmFtZXRlclR5cGVWYWx1ZSkuZ2V0Qm91bmQoKS5nZXRDYW5vbmljYWxUZXh0KCkpOworICAgIFBzaUNsYXNzVHlwZSBsaXN0T2ZJbnRlcm1lZGlhdGUgPSAoUHNpQ2xhc3NUeXBlKW15SmF2YUZhY2FkZS5nZXRFbGVtZW50RmFjdG9yeSgpLmNyZWF0ZVR5cGVGcm9tVGV4dCgidGVzdC5MaXN0PHVzYWdlcy5JbnRlcm1lZGlhdGU+IiwgbnVsbCk7CisgICAgYXNzZXJ0Tm90TnVsbChsaXN0T2ZJbnRlcm1lZGlhdGUucmVzb2x2ZSgpKTsKKyAgICBhc3NlcnRUcnVlKGxpc3RPZkV4dGVuZHNCYXNlLmlzQXNzaWduYWJsZUZyb20obGlzdE9mSW50ZXJtZWRpYXRlKSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0RWxsaXBzaXNUeXBlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgUHNpRWxlbWVudEZhY3RvcnkgZmFjdG9yeSA9IG15SmF2YUZhY2FkZS5nZXRFbGVtZW50RmFjdG9yeSgpOworICAgIFBzaU1ldGhvZCBtZXRob2QgPSBmYWN0b3J5LmNyZWF0ZU1ldGhvZEZyb21UZXh0KCJ2b2lkIGZvbyAoaW50IC4uLiBhcmdzKSB7fSIsIG51bGwpOworICAgIFBzaVR5cGUgcGFyYW1UeXBlID0gbWV0aG9kLmdldFBhcmFtZXRlckxpc3QoKS5nZXRQYXJhbWV0ZXJzKClbMF0uZ2V0VHlwZSgpOworICAgIGFzc2VydFRydWUocGFyYW1UeXBlIGluc3RhbmNlb2YgUHNpRWxsaXBzaXNUeXBlKTsKKyAgICBQc2lUeXBlIGFycmF5VHlwZSA9ICgoUHNpRWxsaXBzaXNUeXBlKXBhcmFtVHlwZSkuZ2V0Q29tcG9uZW50VHlwZSgpLmNyZWF0ZUFycmF5VHlwZSgpOworICAgIGFzc2VydFRydWUocGFyYW1UeXBlLmlzQXNzaWduYWJsZUZyb20oYXJyYXlUeXBlKSk7CisgICAgYXNzZXJ0VHJ1ZShhcnJheVR5cGUuaXNBc3NpZ25hYmxlRnJvbShwYXJhbVR5cGUpKTsKKworICAgIFBzaVR5cGUgdHlwZUZyb21UZXh0ID0gZmFjdG9yeS5jcmVhdGVUeXBlRnJvbVRleHQoImludCAuLi4iLCBudWxsKTsKKyAgICBhc3NlcnRUcnVlKHR5cGVGcm9tVGV4dCBpbnN0YW5jZW9mIFBzaUVsbGlwc2lzVHlwZSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0QmluYXJ5TnVtZXJpY1Byb21vdGlvbigpIHRocm93cyBFeGNlcHRpb24geworICAgIFBzaUVsZW1lbnRGYWN0b3J5IGZhY3RvcnkgPSBteUphdmFGYWNhZGUuZ2V0RWxlbWVudEZhY3RvcnkoKTsKKyAgICBmaW5hbCBQc2lFeHByZXNzaW9uIGNvbmRpdGlvbmFsID0gZmFjdG9yeS5jcmVhdGVFeHByZXNzaW9uRnJvbVRleHQoImIgPyBuZXcgSW50ZWdlciAoMCkgOiBuZXcgRG91YmxlKDAuMCkiLCBudWxsKTsKKyAgICBhc3NlcnRFcXVhbHMoUHNpVHlwZS5ET1VCTEUsIGNvbmRpdGlvbmFsLmdldFR5cGUoKSk7CisgICAgZmluYWwgUHNpRXhwcmVzc2lvbiBzaGlmdCA9IGZhY3RvcnkuY3JlYXRlRXhwcmVzc2lvbkZyb21UZXh0KCJJbnRlZ2VyLnZhbHVlT2YoMCkgPDwgMiIsIG51bGwpOworICAgIGFzc2VydEVxdWFscyhQc2lUeXBlLklOVCwgc2hpZnQuZ2V0VHlwZSgpKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RVbmFyeUV4cHJlc3Npb25UeXBlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZmluYWwgUHNpRWxlbWVudEZhY3RvcnkgZmFjdG9yeSA9IG15SmF2YUZhY2FkZS5nZXRFbGVtZW50RmFjdG9yeSgpOworICAgIGZpbmFsIFBzaUV4cHJlc3Npb24gcGx1c1ByZWZpeCA9IGZhY3RvcnkuY3JlYXRlRXhwcmVzc2lvbkZyb21UZXh0KCIrSW50ZWdlci52YWx1ZU9mKDEpIiwgbnVsbCk7CisgICAgYXNzZXJ0RXF1YWxzKFBzaVR5cGUuSU5ULCBwbHVzUHJlZml4LmdldFR5cGUoKSk7CisgICAgZmluYWwgUHNpRXhwcmVzc2lvbiBwbHVzQnl0ZVByZWZpeCA9IGZhY3RvcnkuY3JlYXRlRXhwcmVzc2lvbkZyb21UZXh0KCIrQnl0ZS52YWx1ZU9mKDEpIiwgbnVsbCk7CisgICAgYXNzZXJ0RXF1YWxzKFBzaVR5cGUuSU5ULCBwbHVzQnl0ZVByZWZpeC5nZXRUeXBlKCkpOworICAgIGZpbmFsIFBzaVN0YXRlbWVudCBkZWNsYXJhdGlvbiA9IGZhY3RvcnkuY3JlYXRlU3RhdGVtZW50RnJvbVRleHQoIkJ5dGUgYiA9IDE7IiwgbnVsbCk7CisgICAgZmluYWwgUHNpRXhwcmVzc2lvbiBwbHVzUGx1c1Bvc3RmaXggPSBmYWN0b3J5LmNyZWF0ZUV4cHJlc3Npb25Gcm9tVGV4dCgiYisrIiwgZGVjbGFyYXRpb24pOworICAgIGFzc2VydEVxdWFscyhQc2lUeXBlLkJZVEUsIHBsdXNQbHVzUG9zdGZpeC5nZXRUeXBlKCkpOworICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovcHNpL2NvZGVTdHlsZS9hcnJhbmdlbWVudC9BYnN0cmFjdEphdmFSZWFycmFuZ2VyVGVzdC5ncm9vdnkgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovcHNpL2NvZGVTdHlsZS9hcnJhbmdlbWVudC9BYnN0cmFjdEphdmFSZWFycmFuZ2VyVGVzdC5ncm9vdnkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2Y2YzY0MQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9wc2kvY29kZVN0eWxlL2FycmFuZ2VtZW50L0Fic3RyYWN0SmF2YVJlYXJyYW5nZXJUZXN0Lmdyb292eQpAQCAtMCwwICsxLDMxIEBACisvKgorICogQ29weXJpZ2h0IDIwMDAtMjAxMiBKZXRCcmFpbnMgcy5yLm8uCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworcGFja2FnZSBjb20uaW50ZWxsaWoucHNpLmNvZGVTdHlsZS5hcnJhbmdlbWVudAorCitpbXBvcnQgY29tLmludGVsbGlqLmlkZS5oaWdobGlnaHRlci5KYXZhRmlsZVR5cGUKK2ltcG9ydCBjb20uaW50ZWxsaWoubGFuZy5qYXZhLkphdmFMYW5ndWFnZQorCisvKioKKyAqIEBhdXRob3IgRGVuaXMgWmhkYW5vdgorICogQHNpbmNlIDgvMzAvMTIgMTI6MTUgUE0KKyAqLworYWJzdHJhY3QgY2xhc3MgQWJzdHJhY3RKYXZhUmVhcnJhbmdlclRlc3QgZXh0ZW5kcyBBYnN0cmFjdFJlYXJyYW5nZXJUZXN0IHsKKworICBBYnN0cmFjdEphdmFSZWFycmFuZ2VyVGVzdCgpIHsKKyAgICBmaWxlVHlwZSA9IEphdmFGaWxlVHlwZS5JTlNUQU5DRQorICAgIGxhbmd1YWdlID0gSmF2YUxhbmd1YWdlLklOU1RBTkNFCisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9wc2kvY29kZVN0eWxlL2FycmFuZ2VtZW50L0phdmFSZWFycmFuZ2VyQmxhbmtMaW5lc1Rlc3QuZ3Jvb3Z5IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL3BzaS9jb2RlU3R5bGUvYXJyYW5nZW1lbnQvSmF2YVJlYXJyYW5nZXJCbGFua0xpbmVzVGVzdC5ncm9vdnkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmNjMjdiOQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9wc2kvY29kZVN0eWxlL2FycmFuZ2VtZW50L0phdmFSZWFycmFuZ2VyQmxhbmtMaW5lc1Rlc3QuZ3Jvb3Z5CkBAIC0wLDAgKzEsMTMzIEBACisvKgorICogQ29weXJpZ2h0IDIwMDAtMjAxMiBKZXRCcmFpbnMgcy5yLm8uCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworcGFja2FnZSBjb20uaW50ZWxsaWoucHNpLmNvZGVTdHlsZS5hcnJhbmdlbWVudAorCitpbXBvcnQgc3RhdGljIGNvbS5pbnRlbGxpai5wc2kuY29kZVN0eWxlLmFycmFuZ2VtZW50Lm1hdGNoLkFycmFuZ2VtZW50RW50cnlUeXBlLioKK2ltcG9ydCBzdGF0aWMgY29tLmludGVsbGlqLnBzaS5jb2RlU3R5bGUuYXJyYW5nZW1lbnQubWF0Y2guQXJyYW5nZW1lbnRNb2RpZmllci4qCisvKioKKyAqIEBhdXRob3IgRGVuaXMgWmhkYW5vdgorICogQHNpbmNlIDgvMzAvMTIgMTI6MTQgUE0KKyAqLworcHVibGljIGNsYXNzIEphdmFSZWFycmFuZ2VyQmxhbmtMaW5lc1Rlc3QgZXh0ZW5kcyBBYnN0cmFjdEphdmFSZWFycmFuZ2VyVGVzdCB7CisKKyAgdm9pZCB0ZXN0UHJlc2VydmVSZWxhdGl2ZUJsYW5rTGluZXMoKSB7CisgICAgY29tbW9uU2V0dGluZ3MuQkxBTktfTElORVNfQVJPVU5EX0NMQVNTID0gMgorICAgIGNvbW1vblNldHRpbmdzLkJMQU5LX0xJTkVTX0FST1VORF9GSUVMRCA9IDEKKyAgICBjb21tb25TZXR0aW5ncy5CTEFOS19MSU5FU19BUk9VTkRfTUVUSE9EID0gMgorICAgIGNvbW1vblNldHRpbmdzLkJMQU5LX0xJTkVTX0FST1VORF9GSUVMRF9JTl9JTlRFUkZBQ0UgPSAyCisgICAgY29tbW9uU2V0dGluZ3MuQkxBTktfTElORVNfQVJPVU5EX01FVEhPRF9JTl9JTlRFUkZBQ0UgPSAzCisgICAgZG9UZXN0KAorICAgICAgaW5pdGlhbDogJycnXAorY2xhc3MgVGVzdCB7CisgIHByaXZhdGUgdm9pZCBtZXRob2QxKCkge30KKworICBwdWJsaWMgdm9pZCBtZXRob2QyKCkge30KKworICBwcml2YXRlIGludCBpOworCisgIHB1YmxpYyBpbnQgajsKKyAgcHVibGljIHN0YXRpYyBpbnQgazsKK30KK2ludGVyZmFjZSBNeUludGVyZmFjZSB7CisgIHZvaWQgdGVzdDEoKTsKKyAgdm9pZCB0ZXN0MigpOworICBpbnQgaSA9IDA7CisgIGludCBqID0gMDsKK30nJycsCisgICAgICBleHBlY3RlZDogJycnXAoraW50ZXJmYWNlIE15SW50ZXJmYWNlIHsKKyAgaW50IGkgPSAwOworCisKKyAgaW50IGogPSAwOworCisKKworICB2b2lkIHRlc3QxKCk7CisKKworCisgIHZvaWQgdGVzdDIoKTsKK30KKworCitjbGFzcyBUZXN0IHsKKyAgcHVibGljIHN0YXRpYyBpbnQgazsKKworICBwdWJsaWMgaW50IGo7CisKKyAgcHJpdmF0ZSBpbnQgaTsKKworCisgIHB1YmxpYyB2b2lkIG1ldGhvZDIoKSB7fQorCisKKyAgcHJpdmF0ZSB2b2lkIG1ldGhvZDEoKSB7fQorfScnJywKKyAgICAgIHJ1bGVzOiBbcnVsZShJTlRFUkZBQ0UpLAorICAgICAgICAgICAgICBydWxlKENMQVNTKSwKKyAgICAgICAgICAgICAgcnVsZShGSUVMRCwgU1RBVElDKSwKKyAgICAgICAgICAgICAgcnVsZShGSUVMRCwgUFVCTElDKSwKKyAgICAgICAgICAgICAgcnVsZShGSUVMRCksCisgICAgICAgICAgICAgIHJ1bGUoTUVUSE9ELCBQVUJMSUMpLAorICAgICAgICAgICAgICBydWxlKE1FVEhPRCldCisgICAgKQorICB9CisKKyAgdm9pZCB0ZXN0Q3V0QmxhbmtMaW5lcygpIHsKKyAgICBjb21tb25TZXR0aW5ncy5CTEFOS19MSU5FU19BUk9VTkRfRklFTEQgPSAwCisgICAgY29tbW9uU2V0dGluZ3MuQkxBTktfTElORVNfQVJPVU5EX01FVEhPRCA9IDEKKyAgICBkb1Rlc3QoCisgICAgICBpbml0aWFsOiAnJydcCitjbGFzcyBUZXN0IHsKKworICAgIHZvaWQgdGVzdDEoKSB7CisgICAgfQorICAgIAorICAgIHZvaWQgdGVzdDIoKSB7CisgICAgfQorICAgIAorICAgIGludCBpOworICAgIGludCBqOworfScnJywKKyAgICAgIGV4cGVjdGVkOiAnJydcCitjbGFzcyBUZXN0IHsKKworICAgIGludCBpOworICAgIGludCBqOworICAgIAorICAgIHZvaWQgdGVzdDEoKSB7CisgICAgfQorCisgICAgdm9pZCB0ZXN0MigpIHsKKyAgICB9Cit9JycnLAorICAgICAgcnVsZXM6IFtydWxlKEZJRUxELCBQQUNLQUdFX1BSSVZBVEUpLCBydWxlKE1FVEhPRCldCisgICAgKQorICB9CisgIAorICB2b2lkICJ0ZXN0IGJsYW5rIGxpbmVzIHNldHRpbmdzIGFyZSBub3QgYXBwbGllZCB0byBhbm9ueW1vdXMgY2xhc3NlcyIoKSB7CisgICAgY29tbW9uU2V0dGluZ3MuQkxBTktfTElORVNfQVJPVU5EX0NMQVNTID0gMQorICAgIGRlZiB0ZXh0ID0gJycnXAorY2xhc3MgVGVzdCB7CisgIHZvaWQgdGVzdCgpIHsKKyAgICBhKG5ldyBJbnRmKCkge30pOworICAgIGEobmV3IEludGYoKSB7fSk7CisgIH0KK30nJycKKyAgICBkb1Rlc3QoaW5pdGlhbDogdGV4dCwgZXhwZWN0ZWQ6IHRleHQsIHJ1bGVzOiBbcnVsZShDTEFTUyldICkKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL3BzaS9jb2RlU3R5bGUvYXJyYW5nZW1lbnQvSmF2YVJlYXJyYW5nZXJCeU5hbWVUZXN0Lmdyb292eSBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9wc2kvY29kZVN0eWxlL2FycmFuZ2VtZW50L0phdmFSZWFycmFuZ2VyQnlOYW1lVGVzdC5ncm9vdnkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGI5OTM5MgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9wc2kvY29kZVN0eWxlL2FycmFuZ2VtZW50L0phdmFSZWFycmFuZ2VyQnlOYW1lVGVzdC5ncm9vdnkKQEAgLTAsMCArMSw5NCBAQAorLyoKKyAqIENvcHlyaWdodCAyMDAwLTIwMTIgSmV0QnJhaW5zIHMuci5vLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KK3BhY2thZ2UgY29tLmludGVsbGlqLnBzaS5jb2RlU3R5bGUuYXJyYW5nZW1lbnQKKworaW1wb3J0IGNvbS5pbnRlbGxpai5wc2kuY29kZVN0eWxlLmFycmFuZ2VtZW50Lm1hdGNoLkFycmFuZ2VtZW50TW9kaWZpZXIKK2ltcG9ydCBjb20uaW50ZWxsaWoucHNpLmNvZGVTdHlsZS5hcnJhbmdlbWVudC5vcmRlci5BcnJhbmdlbWVudEVudHJ5T3JkZXJUeXBlCitpbXBvcnQgb3JnLmp1bml0LkJlZm9yZQorCitpbXBvcnQgc3RhdGljIGNvbS5pbnRlbGxpai5wc2kuY29kZVN0eWxlLmFycmFuZ2VtZW50Lm1hdGNoLkFycmFuZ2VtZW50TW9kaWZpZXIuUFJPVEVDVEVECitpbXBvcnQgc3RhdGljIGNvbS5pbnRlbGxpai5wc2kuY29kZVN0eWxlLmFycmFuZ2VtZW50Lm1hdGNoLkFycmFuZ2VtZW50TW9kaWZpZXIuUFVCTElDCitpbXBvcnQgc3RhdGljIGNvbS5pbnRlbGxpai5wc2kuY29kZVN0eWxlLmFycmFuZ2VtZW50Lm9yZGVyLkFycmFuZ2VtZW50RW50cnlPcmRlclR5cGUuQllfTkFNRQorCisvKioKKyAqIEBhdXRob3IgRGVuaXMgWmhkYW5vdgorICogQHNpbmNlIDExLzE0LzEyIDE6MjkgUE0KKyAqLworY2xhc3MgSmF2YVJlYXJyYW5nZXJCeU5hbWVUZXN0IGV4dGVuZHMgQWJzdHJhY3RKYXZhUmVhcnJhbmdlclRlc3QgeworCisgIEBCZWZvcmUKKyAgdm9pZCBzZXRVcCgpIHsKKyAgICBzdXBlci5zZXRVcCgpCisgICAgY29tbW9uU2V0dGluZ3MuQkxBTktfTElORVNfQVJPVU5EX01FVEhPRCA9IDAKKyAgICBjb21tb25TZXR0aW5ncy5CTEFOS19MSU5FU19BUk9VTkRfQ0xBU1MgPSAwCisgIH0KKyAgCisgIHZvaWQgInRlc3Qgb25seSBuYW1lIGNvbmRpdGlvbiIoKSB7CisgICAgZG9UZXN0KAorICAgICAgaW5pdGlhbDogJycnXAorY2xhc3MgVGVzdCB7CisgIHB1YmxpYyB2b2lkIHNldEkoKSB7fQorICBwdWJsaWMgdm9pZCBnZXRJKCkge30KKyAgcHVibGljIHZvaWQgdGVzdCgpIHt9Cit9JycnLAorICAgICAgZXhwZWN0ZWQ6ICcnJ1wKK2NsYXNzIFRlc3QgeworICBwdWJsaWMgdm9pZCBnZXRJKCkge30KKyAgcHVibGljIHZvaWQgc2V0SSgpIHt9CisgIHB1YmxpYyB2b2lkIHRlc3QoKSB7fQorfScnJywKKyAgICAgIHJ1bGVzOiBbcnVsZSgiZ2V0LioiKV0KKyAgICApCisgIH0KKyAgCisgIHZvaWQgInRlc3QgbmFtZSBjb25kaXRpb24gYW5kIG90aGVycyIoKSB7CisgICAgZG9UZXN0KAorICAgICAgaW5pdGlhbDogJycnXAorY2xhc3MgVGVzdCB7CisgIHByaXZhdGUgdm9pZCBnZXRJbm5lcigpIHt9CisgIHB1YmxpYyB2b2lkIGdldE91dGVyKCkge30KKyAgcHJvdGVjdGVkIHZvaWQgdGVzdCgpIHt9Cit9JycnLAorICAgICAgZXhwZWN0ZWQ6ICcnJ1wKK2NsYXNzIFRlc3QgeworICBwdWJsaWMgdm9pZCBnZXRPdXRlcigpIHt9CisgIHByb3RlY3RlZCB2b2lkIHRlc3QoKSB7fQorICBwcml2YXRlIHZvaWQgZ2V0SW5uZXIoKSB7fQorfScnJywKKyAgICAgIHJ1bGVzOiBbcnVsZSgiZ2V0LioiLCBQVUJMSUMpLCBydWxlKFBST1RFQ1RFRCldCisgICAgKQorICB9CisgIAorICB2b2lkICJ0ZXN0IG5hbWUgYW5kIHNvcnQiKCkgeworICAgIGRvVGVzdCgKKyAgICAgIGluaXRpYWw6ICcnJ1wKK2NsYXNzIFRlc3QgeworICBwcml2YXRlIHZvaWQgZ2V0QygpIHt9CisgIHB1YmxpYyB2b2lkIHRlc3QoKSB7fQorICBwdWJsaWMgdm9pZCBnZXRBKCkge30KKyAgcHVibGljIHZvaWQgZ2V0QigpIHt9Cit9JycnLAorICAgICAgZXhwZWN0ZWQ6ICcnJ1wKK2NsYXNzIFRlc3QgeworICBwdWJsaWMgdm9pZCBnZXRBKCkge30KKyAgcHVibGljIHZvaWQgZ2V0QigpIHt9CisgIHByaXZhdGUgdm9pZCBnZXRDKCkge30KKyAgcHVibGljIHZvaWQgdGVzdCgpIHt9Cit9JycnLAorICAgICAgcnVsZXM6IFtydWxlKEJZX05BTUUsICJnZXQuKiIpXQorICAgICkKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL3BzaS9jb2RlU3R5bGUvYXJyYW5nZW1lbnQvSmF2YVJlYXJyYW5nZXJCeVR5cGVBbmRNb2RpZmllclRlc3QuZ3Jvb3Z5IGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL3BzaS9jb2RlU3R5bGUvYXJyYW5nZW1lbnQvSmF2YVJlYXJyYW5nZXJCeVR5cGVBbmRNb2RpZmllclRlc3QuZ3Jvb3Z5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmExNmFkNjMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovcHNpL2NvZGVTdHlsZS9hcnJhbmdlbWVudC9KYXZhUmVhcnJhbmdlckJ5VHlwZUFuZE1vZGlmaWVyVGVzdC5ncm9vdnkKQEAgLTAsMCArMSwxMTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwMC0yMDEyIEpldEJyYWlucyBzLnIuby4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCitwYWNrYWdlIGNvbS5pbnRlbGxpai5wc2kuY29kZVN0eWxlLmFycmFuZ2VtZW50CisKK2ltcG9ydCBzdGF0aWMgY29tLmludGVsbGlqLnBzaS5jb2RlU3R5bGUuYXJyYW5nZW1lbnQubWF0Y2guQXJyYW5nZW1lbnRFbnRyeVR5cGUuKgoraW1wb3J0IHN0YXRpYyBjb20uaW50ZWxsaWoucHNpLmNvZGVTdHlsZS5hcnJhbmdlbWVudC5tYXRjaC5BcnJhbmdlbWVudE1vZGlmaWVyLioKKy8qKgorICogQGF1dGhvciBEZW5pcyBaaGRhbm92CisgKiBAc2luY2UgOC8yOC8xMiA2OjQyIFBNCisgKi8KK2NsYXNzIEphdmFSZWFycmFuZ2VyQnlUeXBlQW5kTW9kaWZpZXJUZXN0IGV4dGVuZHMgQWJzdHJhY3RKYXZhUmVhcnJhbmdlclRlc3QgeworCisgIHZvaWQgdGVzdENvbXBsZXgoKSB7CisgICAgY29tbW9uU2V0dGluZ3MuQkxBTktfTElORVNfQVJPVU5EX01FVEhPRCA9IDAKKyAgICBjb21tb25TZXR0aW5ncy5CTEFOS19MSU5FU19BUk9VTkRfQ0xBU1MgPSAwCisKKyAgICBkb1Rlc3QoCisgICAgICBpbml0aWFsOiAnJydcCitjbGFzcyBUZXN0IHsKKyAgIHByaXZhdGUgZW51bSBQcml2YXRlRW51bSB7fQorICAgcHJvdGVjdGVkIHN0YXRpYyBjbGFzcyBQcm90ZWN0ZWRTdGF0aWNJbm5lciB7fQorICAgcHVibGljIGNsYXNzIFB1YmxpY0lubmVyIHt9CisgICBwcml2YXRlIGludGVyZmFjZSBQcml2YXRlSW50ZXJmYWNlIHt9CisgICBwdWJsaWMgYWJzdHJhY3QgYWJzdHJhY3RNZXRob2QoKTsKKyAgIHByaXZhdGUgdm9pZCBwcml2YXRlTWV0aG9kKCkge30KKyAgIHB1YmxpYyB2b2lkIHB1YmxpY01ldGhvZCgpIHt9CisgICBwcml2YXRlIGludCBwcml2YXRlRmllbGQ7CisgICBwcml2YXRlIHZvbGF0aWxlIGludCBwcml2YXRlVm9sYXRpbGVGaWVsZDsKKyAgIHB1YmxpYyBpbnQgcHVibGljRmllbGQ7CisgICBwdWJsaWMgc3RhdGljIGludCBwdWJsaWNTdGF0aWNGaWVsZDsKK30nJycsCisgICAgICBleHBlY3RlZDogJycnXAorY2xhc3MgVGVzdCB7CisgICBwdWJsaWMgc3RhdGljIGludCBwdWJsaWNTdGF0aWNGaWVsZDsKKyAgIHB1YmxpYyBpbnQgcHVibGljRmllbGQ7CisgICBwcml2YXRlIHZvbGF0aWxlIGludCBwcml2YXRlVm9sYXRpbGVGaWVsZDsKKyAgIHByaXZhdGUgaW50IHByaXZhdGVGaWVsZDsKKyAgIHB1YmxpYyBhYnN0cmFjdCBhYnN0cmFjdE1ldGhvZCgpOworICAgcHVibGljIHZvaWQgcHVibGljTWV0aG9kKCkge30KKyAgIHByaXZhdGUgdm9pZCBwcml2YXRlTWV0aG9kKCkge30KKyAgIHByaXZhdGUgaW50ZXJmYWNlIFByaXZhdGVJbnRlcmZhY2Uge30KKyAgIHByaXZhdGUgZW51bSBQcml2YXRlRW51bSB7fQorICAgcHVibGljIGNsYXNzIFB1YmxpY0lubmVyIHt9CisgICBwcm90ZWN0ZWQgc3RhdGljIGNsYXNzIFByb3RlY3RlZFN0YXRpY0lubmVyIHt9Cit9JycnLAorICAgICAgcnVsZXM6IFtydWxlKEZJRUxELCBQVUJMSUMsIFNUQVRJQyksCisgICAgICAgICAgICAgIHJ1bGUoRklFTEQsIFBVQkxJQyksCisgICAgICAgICAgICAgIHJ1bGUoRklFTEQsIFZPTEFUSUxFKSwKKyAgICAgICAgICAgICAgcnVsZShGSUVMRCwgUFJJVkFURSksCisgICAgICAgICAgICAgIHJ1bGUoTUVUSE9ELCBBQlNUUkFDVCksCisgICAgICAgICAgICAgIHJ1bGUoTUVUSE9ELCBQVUJMSUMpLAorICAgICAgICAgICAgICBydWxlKE1FVEhPRCksCisgICAgICAgICAgICAgIHJ1bGUoSU5URVJGQUNFKSwKKyAgICAgICAgICAgICAgcnVsZShFTlVNKSwKKyAgICAgICAgICAgICAgcnVsZShDTEFTUywgUFVCTElDKSwKKyAgICAgICAgICAgICAgcnVsZShDTEFTUyldCisgICAgKQorICB9CisKKyAgdm9pZCB0ZXN0SW5zdGFuY2VJbml0aWFsaXphdGlvbkJsb2NrQm91bmRUb0ZpZWxkKCkgeworICAgIGRvVGVzdCgKKyAgICAgIGluaXRpYWw6ICcnJ1wKK2NsYXNzIFRlc3QgeworICBwcml2YXRlIGludCBpOworICBwdWJsaWMgaW50IGo7CisgIHsgaiA9IDE7IH0KKyAgcHJvdGVjdGVkIGludCBrOworfScnJywKKyAgICAgIGV4cGVjdGVkOiAnJydcCitjbGFzcyBUZXN0IHsKKyAgcHVibGljIGludCBqOworICB7IGogPSAxOyB9CisgIHByb3RlY3RlZCBpbnQgazsKKyAgcHJpdmF0ZSBpbnQgaTsKK30nJycsCisgICAgICBydWxlczogW3J1bGUoRklFTEQsIFBVQkxJQyksIHJ1bGUoRklFTEQsIFBST1RFQ1RFRCksIHJ1bGUoRklFTEQsIFBSSVZBVEUpXSkKKyAgfQorCisgIHZvaWQgdGVzdEluc3RhbmNlSW5pdGlhbGl6YXRpb25CbG9ja0FzRmlyc3RDaGlsZCgpIHsKKyAgICBkb1Rlc3QoCisgICAgICBpbml0aWFsOiAnJydcCitjbGFzcyBUZXN0IHsKKyAgeyBqID0gMTsgfQorICBwcml2YXRlIGludCBpOworICBwdWJsaWMgaW50IGo7CisgIHByb3RlY3RlZCBpbnQgazsKK30nJycsCisgICAgICBleHBlY3RlZDogJycnXAorY2xhc3MgVGVzdCB7CisgIHsgaiA9IDE7IH0KKyAgcHVibGljIGludCBqOworICBwcm90ZWN0ZWQgaW50IGs7CisgIHByaXZhdGUgaW50IGk7Cit9JycnLAorICAgICAgcnVsZXM6IFtydWxlKEZJRUxELCBQVUJMSUMpLCBydWxlKEZJRUxELCBQUk9URUNURUQpLCBydWxlKEZJRUxELCBQUklWQVRFKV0pCisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9wc2kvY29kZVN0eWxlL2FycmFuZ2VtZW50L0phdmFSZWFycmFuZ2VyQnlUeXBlVGVzdC5ncm9vdnkgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovcHNpL2NvZGVTdHlsZS9hcnJhbmdlbWVudC9KYXZhUmVhcnJhbmdlckJ5VHlwZVRlc3QuZ3Jvb3Z5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJlZDgxNTZhCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL3BzaS9jb2RlU3R5bGUvYXJyYW5nZW1lbnQvSmF2YVJlYXJyYW5nZXJCeVR5cGVUZXN0Lmdyb292eQpAQCAtMCwwICsxLDMxMCBAQAorLyoKKyAqIENvcHlyaWdodCAyMDAwLTIwMTIgSmV0QnJhaW5zIHMuci5vLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KK3BhY2thZ2UgY29tLmludGVsbGlqLnBzaS5jb2RlU3R5bGUuYXJyYW5nZW1lbnQKKworaW1wb3J0IG9yZy5qdW5pdC5CZWZvcmUKKworaW1wb3J0IHN0YXRpYyBjb20uaW50ZWxsaWoucHNpLmNvZGVTdHlsZS5hcnJhbmdlbWVudC5tYXRjaC5BcnJhbmdlbWVudEVudHJ5VHlwZS4qCitpbXBvcnQgc3RhdGljIGNvbS5pbnRlbGxpai5wc2kuY29kZVN0eWxlLmFycmFuZ2VtZW50Lm1hdGNoLkFycmFuZ2VtZW50TW9kaWZpZXIuUFJJVkFURQoraW1wb3J0IHN0YXRpYyBjb20uaW50ZWxsaWoucHNpLmNvZGVTdHlsZS5hcnJhbmdlbWVudC5tYXRjaC5BcnJhbmdlbWVudE1vZGlmaWVyLlBST1RFQ1RFRAoraW1wb3J0IHN0YXRpYyBjb20uaW50ZWxsaWoucHNpLmNvZGVTdHlsZS5hcnJhbmdlbWVudC5tYXRjaC5BcnJhbmdlbWVudE1vZGlmaWVyLlBVQkxJQworLyoqCisgKiBAYXV0aG9yIERlbmlzIFpoZGFub3YKKyAqIEBzaW5jZSA3LzIwLzEyIDI6NDUgUE0KKyAqLworY2xhc3MgSmF2YVJlYXJyYW5nZXJCeVR5cGVUZXN0IGV4dGVuZHMgQWJzdHJhY3RKYXZhUmVhcnJhbmdlclRlc3QgeworCisgIEBCZWZvcmUKKyAgdm9pZCBzZXRVcCgpIHsKKyAgICBzdXBlci5zZXRVcCgpCisgICAgY29tbW9uU2V0dGluZ3MuQkxBTktfTElORVNfQVJPVU5EX01FVEhPRCA9IDAKKyAgICBjb21tb25TZXR0aW5ncy5CTEFOS19MSU5FU19BUk9VTkRfQ0xBU1MgPSAwCisgIH0KKworICB2b2lkIHRlc3RGaWVsZHNCZWZvcmVNZXRob2RzKCkgeworICAgIGRvVGVzdCgKKyAgICAgIGluaXRpYWw6ICcnJ1wKK2NsYXNzIFRlc3QgeworICBwdWJsaWMgdm9pZCB0ZXN0KCkge30KKyAgIHByaXZhdGUgaW50IGk7Cit9CitjbGFzcyBUZXN0MiB7CitwdWJsaWMgdm9pZCB0ZXN0KCkgeworfQorICAgIHByaXZhdGUgaW50IGk7CisgIHByaXZhdGUgaW50IGo7Cit9JycnLAorICAgICAgZXhwZWN0ZWQ6ICcnJ1wKK2NsYXNzIFRlc3QgeworICAgcHJpdmF0ZSBpbnQgaTsKKyAgcHVibGljIHZvaWQgdGVzdCgpIHt9Cit9CitjbGFzcyBUZXN0MiB7CisgICAgcHJpdmF0ZSBpbnQgaTsKKyAgcHJpdmF0ZSBpbnQgajsKK3B1YmxpYyB2b2lkIHRlc3QoKSB7Cit9Cit9JycnLAorICAgICAgcnVsZXM6IFtydWxlKEZJRUxEKV0KKyAgICApCisgIH0KKworICB2b2lkIHRlc3RBbm9ueW1vdXNDbGFzc0F0RmllbGRJbml0aWFsaXplcigpIHsKKyAgICBkb1Rlc3QoCisgICAgICBpbml0aWFsOiAnJydcCitjbGFzcyBUZXN0IHsKKyAgcHJpdmF0ZSBPYmplY3QgZmlyc3QgPSBuZXcgT2JqZWN0KCkgeworICAgIGludCBpbm5lcjE7CisgICAgcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsgcmV0dXJuICJ0ZXN0IjsgfQorICAgIGludCBpbm5lcjI7CisgIH07CisgIHB1YmxpYyBPYmplY3QgdGVzdChPYmplY3QgLi4uIGFyZ3MpIHsKKyAgICByZXR1cm4gbnVsbDsKKyAgfQorICBwcml2YXRlIE9iamVjdCBzZWNvbmQgPSB0ZXN0KHRlc3QobmV3IE9iamVjdCgpIHsKKyAgICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgeworICAgICAgcmV0dXJuICJ0ZXN0IjsKKyAgICB9CisgICAgcHJpdmF0ZSBPYmplY3QgaW5uZXIgPSBuZXcgT2JqZWN0KCkgeworICAgICAgcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsgcmV0dXJuICJpbm5lclRlc3QiOyB9CisgICAgfTsKKyAgfSkpOworfScnJywKKyAgICAgIGV4cGVjdGVkOiAnJydcCitjbGFzcyBUZXN0IHsKKyAgcHJpdmF0ZSBPYmplY3QgZmlyc3QgPSBuZXcgT2JqZWN0KCkgeworICAgIGludCBpbm5lcjE7CisgICAgaW50IGlubmVyMjsKKyAgICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgeyByZXR1cm4gInRlc3QiOyB9CisgIH07CisgIHByaXZhdGUgT2JqZWN0IHNlY29uZCA9IHRlc3QodGVzdChuZXcgT2JqZWN0KCkgeworICAgIHByaXZhdGUgT2JqZWN0IGlubmVyID0gbmV3IE9iamVjdCgpIHsKKyAgICAgIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7IHJldHVybiAiaW5uZXJUZXN0IjsgfQorICAgIH07CisgICAgcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKKyAgICAgIHJldHVybiAidGVzdCI7CisgICAgfQorICB9KSk7CisgIHB1YmxpYyBPYmplY3QgdGVzdChPYmplY3QgLi4uIGFyZ3MpIHsKKyAgICByZXR1cm4gbnVsbDsKKyAgfQorfScnJywKKyAgICAgIHJ1bGVzOiBbcnVsZShGSUVMRCldCisgICAgKQorICB9CisKKyAgdm9pZCB0ZXN0QW5vbnltb3VzQ2xhc3NBdE1ldGhvZCgpIHsKKyAgICBkb1Rlc3QoCisgICAgICBpbml0aWFsOiAnJydcCitjbGFzcyBUZXN0IHsKKyAgIHZvaWQgZGVjbGFyYXRpb24oKSB7CisgICAgIE9iamVjdCBvID0gbmV3IE9iamVjdCgpIHsKKyAgICAgICBwcml2YXRlIGludCB0ZXN0KCkgeyByZXR1cm4gMTsgfQorICAgICAgIFN0cmluZyBzOworICAgICB9CisgICB9CisgICBkb3VibGUgZDsKKyAgIHZvaWQgY2FsbCgpIHsKKyAgICAgdGVzdCh0ZXN0KDEsIG5ldyBPYmplY3QoKSB7CisgICAgICAgcHVibGljIHZvaWQgdGVzdCgpIHt9CisgICAgICAgaW50IGk7CisgICAgIH0pOworICAgfQorfScnJywKKyAgICAgIGV4cGVjdGVkOiAnJydcCitjbGFzcyBUZXN0IHsKKyAgIGRvdWJsZSBkOworICAgdm9pZCBkZWNsYXJhdGlvbigpIHsKKyAgICAgT2JqZWN0IG8gPSBuZXcgT2JqZWN0KCkgeworICAgICAgIFN0cmluZyBzOworICAgICAgIHByaXZhdGUgaW50IHRlc3QoKSB7IHJldHVybiAxOyB9CisgICAgIH0KKyAgIH0KKyAgIHZvaWQgY2FsbCgpIHsKKyAgICAgdGVzdCh0ZXN0KDEsIG5ldyBPYmplY3QoKSB7CisgICAgICAgaW50IGk7CisgICAgICAgcHVibGljIHZvaWQgdGVzdCgpIHt9CisgICAgIH0pOworICAgfQorfScnJywKKyAgICAgIHJ1bGVzOiBbcnVsZShGSUVMRCldCisgICAgKQorICB9CisKKyAgdm9pZCB0ZXN0SW5uZXJDbGFzc0ludGVyZmFjZUFuZEVudW0oKSB7CisgICAgZG9UZXN0KAorICAgICAgaW5pdGlhbDogJycnXAorY2xhc3MgVGVzdCB7CisgICBlbnVtIEUgeyBPTkUsIFRXTyB9CisgICBjbGFzcyBJbm5lciB7fQorICAgaW50ZXJmYWNlIEludGYge30KK30nJycsCisgICAgICBleHBlY3RlZDogJycnXAorY2xhc3MgVGVzdCB7CisgICBpbnRlcmZhY2UgSW50ZiB7fQorICAgZW51bSBFIHsgT05FLCBUV08gfQorICAgY2xhc3MgSW5uZXIge30KK30nJycsCisgICAgICBydWxlczogW3J1bGUoSU5URVJGQUNFKSwKKyAgICAgICAgICAgICAgcnVsZShFTlVNKSwKKyAgICAgICAgICAgICAgcnVsZShDTEFTUyldCisgICAgKQorICB9CisKKyAgdm9pZCB0ZXN0UmFuZ2VzKCkgeworICAgIGRvVGVzdCgKKyAgICAgIGluaXRpYWw6ICcnJ1wKK2NsYXNzIFRlc3QgeworICB2b2lkIG91dGVyMSgpIHt9Cis8cmFuZ2U+ICBTdHJpbmcgb3V0ZXIyKCkge30KKyAgaW50IGk7PC9yYW5nZT4KKyAgdm9pZCB0ZXN0KCkgeworICAgIG1ldGhvZChuZXcgT2JqZWN0KCkgeworICAgICAgdm9pZCBpbm5lcjEoKSB7fQorICAgICAgT2JqZWN0IGZpZWxkID0gbmV3IE9iamVjdCgpIHsKKzxyYW5nZT4gICAgICAgIHZvaWQgaW5uZXIyKCkge30KKyAgICAgICAgU3RyaW5nIHM7PC9yYW5nZT4KKyAgICAgICAgSW50ZWdlciBpOworICAgICAgfQorICAgIH0pOworICB9Cit9JycnLAorICAgICAgZXhwZWN0ZWQ6ICcnJ1wKK2NsYXNzIFRlc3QgeworICB2b2lkIG91dGVyMSgpIHt9CisgIGludCBpOworICBTdHJpbmcgb3V0ZXIyKCkge30KKyAgdm9pZCB0ZXN0KCkgeworICAgIG1ldGhvZChuZXcgT2JqZWN0KCkgeworICAgICAgdm9pZCBpbm5lcjEoKSB7fQorICAgICAgT2JqZWN0IGZpZWxkID0gbmV3IE9iamVjdCgpIHsKKyAgICAgICAgU3RyaW5nIHM7CisgICAgICAgIHZvaWQgaW5uZXIyKCkge30KKyAgICAgICAgSW50ZWdlciBpOworICAgICAgfQorICAgIH0pOworICB9Cit9JycnLAorICAgICAgcnVsZXM6IFtydWxlKEZJRUxEKV0KKyAgICApCisgIH0KKworICB2b2lkIHRlc3RNZXRob2RzQW5kQ29uc3RydWN0b3JzKCkgeworICAgIGRvVGVzdCgKKyAgICAgIGluaXRpYWw6ICcnJ1wKK2NsYXNzIFRlc3QgeworICBhYnN0cmFjdCB2b2lkIG1ldGhvZDEoKTsKKyAgVGVzdCgpIHt9CisgIGFic3RyYWN0IHZvaWQgbWV0aG9kMigpOworfScnJywKKyAgICAgIGV4cGVjdGVkOiAnJydcCitjbGFzcyBUZXN0IHsKKyAgVGVzdCgpIHt9CisgIGFic3RyYWN0IHZvaWQgbWV0aG9kMSgpOworICBhYnN0cmFjdCB2b2lkIG1ldGhvZDIoKTsKK30nJycsCisgICAgICBydWxlczogW3J1bGUoQ09OU1RSVUNUT1IpLCBydWxlKE1FVEhPRCldKQorICB9CisKKyAgdm9pZCB0ZXN0Q29uc3RydWN0b3JBc01ldGhvZCgpIHsKKyAgICBkb1Rlc3QoCisgICAgICBpbml0aWFsOiAnJydcCitjbGFzcyBUZXN0IHsKKyAgcHJpdmF0ZSBpbnQgaTsKKyAgVGVzdCgpIHt9CisgIHB1YmxpYyBpbnQgajsKK30nJycsCisgICAgICBleHBlY3RlZDogJycnXAorY2xhc3MgVGVzdCB7CisgIHB1YmxpYyBpbnQgajsKKyAgVGVzdCgpIHt9CisgIHByaXZhdGUgaW50IGk7Cit9JycnLAorICAgICAgcnVsZXM6IFtydWxlKEZJRUxELCBQVUJMSUMpLCBydWxlKE1FVEhPRCksIHJ1bGUoRklFTEQpXSkKKyAgfQorCisgIHZvaWQgdGVzdE11bHRpcGxlRmllbGRzSW5PbmVSb3coKSB7CisgICAgZG9UZXN0KAorICAgICAgaW5pdGlhbDogJycnXAorY2xhc3MgVGVzdCB7CisgIHByaXZhdGUgbG9uZyBsOworICBwdWJsaWMgaW50IGksIGo7CisgIHByb3RlY3RlZCBmbG9hdCBmOworfScnJywKKyAgICAgIHJ1bGVzOiBbcnVsZShQVUJMSUMpLCBydWxlKFBST1RFQ1RFRCldLAorICAgICAgZXhwZWN0ZWQ6ICcnJ1wKK2NsYXNzIFRlc3QgeworICBwdWJsaWMgaW50IGksIGo7CisgIHByb3RlY3RlZCBmbG9hdCBmOworICBwcml2YXRlIGxvbmcgbDsKK30nJycKKyAgICApCisgIH0KKyAgCisgIHZvaWQgInRlc3QgbXVsdGlsaW5lIG11bHRpcGxlIGZpZWxkIHZhcmlhYmxlcyBkZWNsYXJhdGlvbiIoKSB7CisgICAgZG9UZXN0KAorICAgICAgaW5pdGlhbDogICcnJ1wKK2NsYXNzIFRlc3QgeworICBwcml2YXRlIFN0cmluZyBhMSwKKyAgICAgICAgICAgICAgICAgYTI7CisgIHB1YmxpYyBTdHJpbmcgYTM7Cit9JycnLAorICAgICAgcnVsZXM6IFtydWxlKEZJRUxELCBQVUJMSUMpLCBydWxlKEZJRUxELCBQUklWQVRFKV0sCisgICAgICBleHBlY3RlZDogJycnXAorY2xhc3MgVGVzdCB7CisgIHB1YmxpYyBTdHJpbmcgYTM7CisgIHByaXZhdGUgU3RyaW5nIGExLAorICAgICAgICAgICAgICAgICBhMjsKK30nJycKKyAgICApCisgIH0KKworICB2b2lkICJ0ZXN0IG11bHRpbGluZSBtdWx0aXBsZSBmaWVsZCB2YXJpYWJsZXMgZGVjbGFyYXRpb24gd2l0aCBpbml0aWFsaXplcnMiKCkgeworICAgIGRvVGVzdCgKKyAgICAgIGluaXRpYWw6ICAnJydcCitjbGFzcyBUZXN0IHsKKyAgcHJpdmF0ZSBTdHJpbmcgYTEgPSAib25lIiwKKyAgICAgICAgICAgICAgICAgYTIgPSAidHdvIjsKKyAgcHVibGljIFN0cmluZyBhMzsKK30nJycsCisgICAgICBydWxlczogW3J1bGUoRklFTEQsIFBVQkxJQyksIHJ1bGUoRklFTEQsIFBSSVZBVEUpXSwKKyAgICAgIGV4cGVjdGVkOiAnJydcCitjbGFzcyBUZXN0IHsKKyAgcHVibGljIFN0cmluZyBhMzsKKyAgcHJpdmF0ZSBTdHJpbmcgYTEgPSAib25lIiwKKyAgICAgICAgICAgICAgICAgYTIgPSAidHdvIjsKK30nJycKKyAgICApCisgIH0KKyAgCisgIHZvaWQgInRlc3QgaW5jb21wbGV0ZSBtdWx0aXBsZSBtdWx0aWxpbmUgZmllbGQgIigpIHsKKyAgICBkb1Rlc3QoCisgICAgICBpbml0aWFsOiAgJycnXAorY2xhc3MgVGVzdCB7CisgIHByaXZhdGUgU3RyaW5nIGExLAorICAgICAgICAgICAgICAgICBhMgorICBwdWJsaWMgU3RyaW5nIGEzOworfScnJywKKyAgICAgIHJ1bGVzOiBbcnVsZShGSUVMRCwgUFVCTElDKSwgcnVsZShGSUVMRCwgUFJJVkFURSldLAorICAgICAgZXhwZWN0ZWQ6ICcnJ1wKK2NsYXNzIFRlc3QgeworICBwdWJsaWMgU3RyaW5nIGEzOworICBwcml2YXRlIFN0cmluZyBhMSwKKyAgICAgICAgICAgICAgICAgYTIKK30nJycKKyAgICApICAgIAorICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovcHNpL2NvZGVTdHlsZS9hcnJhbmdlbWVudC9KYXZhUmVhcnJhbmdlckZvbGRpbmdUZXN0Lmdyb292eSBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9wc2kvY29kZVN0eWxlL2FycmFuZ2VtZW50L0phdmFSZWFycmFuZ2VyRm9sZGluZ1Rlc3QuZ3Jvb3Z5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkxNjZlYWYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovcHNpL2NvZGVTdHlsZS9hcnJhbmdlbWVudC9KYXZhUmVhcnJhbmdlckZvbGRpbmdUZXN0Lmdyb292eQpAQCAtMCwwICsxLDc0IEBACisvKgorICogQ29weXJpZ2h0IDIwMDAtMjAxMiBKZXRCcmFpbnMgcy5yLm8uCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworcGFja2FnZSBjb20uaW50ZWxsaWoucHNpLmNvZGVTdHlsZS5hcnJhbmdlbWVudAorCisvKioKKyAqIEBhdXRob3IgRGVuaXMgWmhkYW5vdgorICogQHNpbmNlIDExLzIwLzEyIDM6MzQgUE0KKyAqLworY2xhc3MgSmF2YVJlYXJyYW5nZXJGb2xkaW5nVGVzdCBleHRlbmRzIEFic3RyYWN0SmF2YVJlYXJyYW5nZXJUZXN0IHsKKyAgCisgIHZvaWQgInRlc3QgZHVtbXkiKCkgeworICB9CisKKyAgLy8gVGhpcyBzaG91bGQgYmUgdW5jb21tZW50ZWQgYXMgc29vbiBhcyBjZHIgcHVzaGVkIGZpeGVzIGZvciByYW5nZSBtYXJrZXJzIHByb2Nlc3NpbmcuCisvLyAgdm9pZCAidGVzdCB0aGF0IGRvYyBjb21tZW50IGZvbGRpbmcgaXMgcHJlc2VydmVkIigpIHsKKy8vICAgIGNvbW1vblNldHRpbmdzLkJMQU5LX0xJTkVTX0FST1VORF9NRVRIT0QgPSAxCisvLyAgICBkb1Rlc3QoCisvLyAgICAgIGluaXRpYWw6ICcnJ1wKKy8vaW1wb3J0IDxmb2xkPmphdmEudXRpbC5MaXN0OworLy9pbXBvcnQgamF2YS51dGlsLlNldDs8L2ZvbGQ+CisvLworLy88Zm9sZCB0ZXh0PSIvKiouLi4qLyI+LyoqCisvLyAqIENsYXNzIGNvbW1lbnQKKy8vICovPC9mb2xkPgorLy9jbGFzcyBUZXN0IHsKKy8vCisvLyAgPGZvbGQgdGV4dD0iLyoqLi4uKi8+LyoqCisvLyAgICogTWV0aG9kIGNvbW1lbnQKKy8vICAgKi88L2ZvbGQ+CisvLyAgcHJpdmF0ZSB2b2lkIHRlc3QoTGlzdDxTdHJpbmc+IGwpIHt9CisvLworLy8gIDxmb2xkIHRleHQ9Ii8qKi4uLiovPi8qKgorLy8gICAqIEFub3RoZXIgbWV0aG9kIGNvbW1lbnQKKy8vICAgKi88L2ZvbGQ+CisvLyAgcHVibGljIHZvaWQgdGVzdChTZXQ8U3RyaW5nPiBzKSB7fQorLy99JycnLAorLy8KKy8vICAgICAgcnVsZXM6IFtydWxlKFBVQkxJQyksIHJ1bGUoUFJJVkFURSldLAorLy8KKy8vICAgICAgZXhwZWN0ZWQ6ICcnJ1wKKy8vaW1wb3J0IDxmb2xkPmphdmEudXRpbC5MaXN0OworLy9pbXBvcnQgamF2YS51dGlsLlNldDs8L2ZvbGQ+CisvLworLy88Zm9sZCB0ZXh0PSIvKiouLi4qLyI+LyoqCisvLyAqIENsYXNzIGNvbW1lbnQKKy8vICovPC9mb2xkPgorLy9jbGFzcyBUZXN0IHsKKy8vCisvLyAgPGZvbGQgdGV4dD0iLyoqLi4uKi8+LyoqCisvLyAgICogQW5vdGhlciBtZXRob2QgY29tbWVudAorLy8gICAqLzwvZm9sZD4KKy8vICBwdWJsaWMgdm9pZCB0ZXN0KFNldDxTdHJpbmc+IHMpIHt9CisvLworLy8gIDxmb2xkIHRleHQ9Ii8qKi4uLiovPi8qKgorLy8gICAqIE1ldGhvZCBjb21tZW50CisvLyAgICovPC9mb2xkPgorLy8gIHByaXZhdGUgdm9pZCB0ZXN0KExpc3Q8U3RyaW5nPiBsKSB7fQorLy99JycnCisvLyAgICApCisvLyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL3BzaS9jb2RlU3R5bGUvYXJyYW5nZW1lbnQvSmF2YVJlYXJyYW5nZXJHcm91cGVyVGVzdC5ncm9vdnkgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovcHNpL2NvZGVTdHlsZS9hcnJhbmdlbWVudC9KYXZhUmVhcnJhbmdlckdyb3VwZXJUZXN0Lmdyb292eQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMmNkZjUzCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL3BzaS9jb2RlU3R5bGUvYXJyYW5nZW1lbnQvSmF2YVJlYXJyYW5nZXJHcm91cGVyVGVzdC5ncm9vdnkKQEAgLTAsMCArMSwxOTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwMC0yMDEyIEpldEJyYWlucyBzLnIuby4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCitwYWNrYWdlIGNvbS5pbnRlbGxpai5wc2kuY29kZVN0eWxlLmFycmFuZ2VtZW50CisKK2ltcG9ydCBvcmcuanVuaXQuVGVzdAorCitpbXBvcnQgc3RhdGljIGNvbS5pbnRlbGxpai5wc2kuY29kZVN0eWxlLmFycmFuZ2VtZW50Lmdyb3VwLkFycmFuZ2VtZW50R3JvdXBpbmdUeXBlLkdFVFRFUlNfQU5EX1NFVFRFUlMKK2ltcG9ydCBzdGF0aWMgY29tLmludGVsbGlqLnBzaS5jb2RlU3R5bGUuYXJyYW5nZW1lbnQuZ3JvdXAuQXJyYW5nZW1lbnRHcm91cGluZ1R5cGUuT1ZFUlJJRERFTl9NRVRIT0RTCitpbXBvcnQgc3RhdGljIGNvbS5pbnRlbGxpai5wc2kuY29kZVN0eWxlLmFycmFuZ2VtZW50Lmdyb3VwLkFycmFuZ2VtZW50R3JvdXBpbmdUeXBlLkRFUEVOREVOVF9NRVRIT0RTCitpbXBvcnQgc3RhdGljIGNvbS5pbnRlbGxpai5wc2kuY29kZVN0eWxlLmFycmFuZ2VtZW50Lm1hdGNoLkFycmFuZ2VtZW50TW9kaWZpZXIuUFVCTElDCitpbXBvcnQgc3RhdGljIGNvbS5pbnRlbGxpai5wc2kuY29kZVN0eWxlLmFycmFuZ2VtZW50Lm9yZGVyLkFycmFuZ2VtZW50RW50cnlPcmRlclR5cGUuQlJFQURUSF9GSVJTVAoraW1wb3J0IHN0YXRpYyBjb20uaW50ZWxsaWoucHNpLmNvZGVTdHlsZS5hcnJhbmdlbWVudC5vcmRlci5BcnJhbmdlbWVudEVudHJ5T3JkZXJUeXBlLkRFUFRIX0ZJUlNUCisKKy8qKgorICogQGF1dGhvciBEZW5pcyBaaGRhbm92CisgKiBAc2luY2UgOS8xOC8xMiAxMToxOSBBTQorICovCitjbGFzcyBKYXZhUmVhcnJhbmdlckdyb3VwZXJUZXN0IGV4dGVuZHMgQWJzdHJhY3RKYXZhUmVhcnJhbmdlclRlc3QgeworICAKKyAgdm9pZCBzZXRVcCgpIHsKKyAgICBzdXBlci5zZXRVcCgpCisgICAgY29tbW9uU2V0dGluZ3MuQkxBTktfTElORVNfQVJPVU5EX01FVEhPRCA9IDAKKyAgfQorICAKKyAgdm9pZCB0ZXN0R2V0dGVyc0FuZFNldHRlcnMoKSB7CisgICAgY29tbW9uU2V0dGluZ3MuQkxBTktfTElORVNfQVJPVU5EX01FVEhPRCA9IDEKKyAgICAKKyAgICBkb1Rlc3QoCisgICAgICAgICAgICBpbml0aWFsOiAnJydcCitjbGFzcyBUZXN0IHsKKyAgcHVibGljIHZvaWQgc2V0VmFsdWUoaW50IGkpIHt9CisgIHByb3RlY3RlZCB2b2lkIHV0aWwoKSB7fQorICBwdWJsaWMgaW50IGdldFZhbHVlKCkgeyByZXR1cm4gMTsgfQorfScnJywKKyAgICAgICAgICAgIGV4cGVjdGVkOiAnJydcCitjbGFzcyBUZXN0IHsKKyAgcHVibGljIGludCBnZXRWYWx1ZSgpIHsgcmV0dXJuIDE7IH0KKworICBwdWJsaWMgdm9pZCBzZXRWYWx1ZShpbnQgaSkge30KKworICBwcm90ZWN0ZWQgdm9pZCB1dGlsKCkge30KK30nJycsCisgICAgICBncm91cHM6IFtncm91cChHRVRURVJTX0FORF9TRVRURVJTKV0sCisgICAgICBydWxlczogW3J1bGUoUFVCTElDKV0KKyAgICApCisgIH0KKyAgCisgIEBUZXN0CisgIHZvaWQgdGVzdFV0aWxpdHlNZXRob2RzRGVwdGhGaXJzdCgpIHsKKyAgICBkb1Rlc3QoCisgICAgICBpbml0aWFsOiAnJydcCitjbGFzcyBUZXN0IHsKKyAgdm9pZCB1dGlsMSgpIHsgdXRpbDExKCk7IH0KKyAgdm9pZCBzZXJ2aWNlMSgpIHsgdXRpbDEoKTsgfQorICB2b2lkIHV0aWwyKCkge30KKyAgdm9pZCB1dGlsMTEoKSB7fQorICB2b2lkIHNlcnZpY2UyKCkgeyB1dGlsMigpOyB9Cit9JycnLAorICAgICAgZ3JvdXBzOiBbZ3JvdXAoREVQRU5ERU5UX01FVEhPRFMsIERFUFRIX0ZJUlNUKV0sCisgICAgICBleHBlY3RlZDogJycnXAorY2xhc3MgVGVzdCB7CisgIHZvaWQgc2VydmljZTEoKSB7IHV0aWwxKCk7IH0KKyAgdm9pZCB1dGlsMSgpIHsgdXRpbDExKCk7IH0KKyAgdm9pZCB1dGlsMTEoKSB7fQorICB2b2lkIHNlcnZpY2UyKCkgeyB1dGlsMigpOyB9CisgIHZvaWQgdXRpbDIoKSB7fQorfScnJykKKyAgfQorCisgIEBUZXN0CisgIHZvaWQgdGVzdFV0aWxpdHlNZXRob2RzQnJlYWR0aEZpcnN0KCkgeworICAgIGRvVGVzdCgKKyAgICAgIGluaXRpYWw6ICcnJ1wKK2NsYXNzIFRlc3QgeworICB2b2lkIHV0aWwyKCkgeyB1dGlsMygpOyB9CisgIHZvaWQgc2VydmljZTEoKSB7IHV0aWwxKCk7IHV0aWwyKCk7IH0KKyAgdm9pZCBzZXJ2aWNlMigpIHsgdXRpbDIoKTsgdXRpbDEoKTsgfQorICB2b2lkIHV0aWwzKCkge30KK30nJycsCisgICAgICBncm91cHM6IFtncm91cChERVBFTkRFTlRfTUVUSE9EUywgQlJFQURUSF9GSVJTVCldLAorICAgICAgZXhwZWN0ZWQ6ICcnJ1wKK2NsYXNzIFRlc3QgeworICB2b2lkIHNlcnZpY2UxKCkgeyB1dGlsMSgpOyB1dGlsMigpOyB9CisgIHZvaWQgdXRpbDIoKSB7IHV0aWwzKCk7IH0KKyAgdm9pZCB1dGlsMygpIHt9CisgIHZvaWQgc2VydmljZTIoKSB7IHV0aWwyKCk7IHV0aWwxKCk7IH0KK30nJycpCisgIH0KKworICB2b2lkIHRlc3RPdmVycmlkZGVuTWV0aG9kcygpIHsKKyAgICBkb1Rlc3QoCisgICAgICBpbml0aWFsOiAnJydcCitjbGFzcyBCYXNlIHsKKyAgdm9pZCBiYXNlMSgpIHt9CisgIHZvaWQgYmFzZTIoKSB7fQorfQorCis8cmFuZ2U+Y2xhc3MgU3ViIGV4dGVuZHMgQmFzZSB7CisgIHZvaWQgYmFzZTIoKSB7fQorICB2b2lkIHRlc3QxKCkge30KKyAgdm9pZCBiYXNlMSgpIHt9PC9yYW5nZT4KKyAgdm9pZCB0ZXN0MigpIHt9Cit9JycnLAorICAgICAgZ3JvdXBzOiBbZ3JvdXAoT1ZFUlJJRERFTl9NRVRIT0RTKV0sCisgICAgICBleHBlY3RlZDogJycnXAorY2xhc3MgQmFzZSB7CisgIHZvaWQgYmFzZTEoKSB7fQorICB2b2lkIGJhc2UyKCkge30KK30KKworY2xhc3MgU3ViIGV4dGVuZHMgQmFzZSB7CisgIHZvaWQgdGVzdDEoKSB7fQorICB2b2lkIGJhc2UxKCkge30KKyAgdm9pZCBiYXNlMigpIHt9CisgIHZvaWQgdGVzdDIoKSB7fQorfScnJykKKyAgfQorICB2b2lkIHRlc3RPdmVycmlkZGVuQW5kVXRpbGl0eU1ldGhvZHMoKSB7CisgICAgZG9UZXN0KAorICAgICAgaW5pdGlhbDogJycnXAorY2xhc3MgQmFzZSB7CisgIHZvaWQgYmFzZTEoKSB7fQorICB2b2lkIGJhc2UyKCkge30KK30KKworPHJhbmdlPmNsYXNzIFN1YiBleHRlbmRzIEJhc2UgeworICB2b2lkIHRlc3QzKCkgeyB0ZXN0NCgpOyB9CisgIHZvaWQgYmFzZTIoKSB7IHRlc3QzKCk7IH0KKyAgdm9pZCB0ZXN0MigpIHt9CisgIHZvaWQgYmFzZTEoKSB7IHRlc3QxKCk7IH0KKyAgdm9pZCB0ZXN0NCgpIHt9CisgIHZvaWQgdGVzdDEoKSB7IHRlc3QyKCk7IH08L3JhbmdlPgorfScnJywKKyAgICAgIGdyb3VwczogW2dyb3VwKERFUEVOREVOVF9NRVRIT0RTLCBERVBUSF9GSVJTVCksIGdyb3VwKE9WRVJSSURERU5fTUVUSE9EUyldLAorICAgICAgZXhwZWN0ZWQ6ICcnJ1wKK2NsYXNzIEJhc2UgeworICB2b2lkIGJhc2UxKCkge30KKyAgdm9pZCBiYXNlMigpIHt9Cit9CisKK2NsYXNzIFN1YiBleHRlbmRzIEJhc2UgeworICB2b2lkIGJhc2UxKCkgeyB0ZXN0MSgpOyB9CisgIHZvaWQgdGVzdDEoKSB7IHRlc3QyKCk7IH0KKyAgdm9pZCB0ZXN0MigpIHt9CisgIHZvaWQgYmFzZTIoKSB7IHRlc3QzKCk7IH0KKyAgdm9pZCB0ZXN0MygpIHsgdGVzdDQoKTsgfQorICB2b2lkIHRlc3Q0KCkge30KK30nJycpCisgIH0KKworICB2b2lkICJ0ZXN0IHRoYXQgY2FsbHMgZnJvbSBhbm9ueW1vdXMgY2xhc3MgY3JlYXRlIGEgZGVwZW5kZW5jeSIoKSB7CisgICAgZG9UZXN0KAorICAgICAgaW5pdGlhbDogJycnCitjbGFzcyBUZXN0IHsKKyAgdm9pZCB0ZXN0MigpIHt9CisgIHZvaWQgdGVzdDEoKSB7IHRlc3QyKCk7IH0KKyAgdm9pZCByb290KCkgeworICAgIG5ldyBSdW5uYWJsZSgpIHsKKyAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKKyAgICAgICAgdGVzdDEoKTsKKyAgICAgIH0KKyAgICB9LnJ1bigpOworICB9Cit9JycnLAorICAgICAgZ3JvdXBzOiBbZ3JvdXAoREVQRU5ERU5UX01FVEhPRFMsIERFUFRIX0ZJUlNUKV0sCisgICAgICBleHBlY3RlZDogJycnCitjbGFzcyBUZXN0IHsKKyAgdm9pZCByb290KCkgeworICAgIG5ldyBSdW5uYWJsZSgpIHsKKyAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKKyAgICAgICAgdGVzdDEoKTsKKyAgICAgIH0KKyAgICB9LnJ1bigpOworICB9CisgIHZvaWQgdGVzdDEoKSB7IHRlc3QyKCk7IH0KKyAgdm9pZCB0ZXN0MigpIHt9Cit9JycnCisgICAgKQorICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovcHNpL2Zvcm1hdHRlci9qYXZhL0Fic3RyYWN0SmF2YUZvcm1hdHRlclRlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9wc2kvZm9ybWF0dGVyL2phdmEvQWJzdHJhY3RKYXZhRm9ybWF0dGVyVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ5ODU2MzMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovcHNpL2Zvcm1hdHRlci9qYXZhL0Fic3RyYWN0SmF2YUZvcm1hdHRlclRlc3QuamF2YQpAQCAtMCwwICsxLDE5MiBAQAorLyoKKyAqIENvcHlyaWdodCAyMDAwLTIwMTAgSmV0QnJhaW5zIHMuci5vLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KK3BhY2thZ2UgY29tLmludGVsbGlqLnBzaS5mb3JtYXR0ZXIuamF2YTsKKworaW1wb3J0IGNvbS5pbnRlbGxpai5KYXZhVGVzdFV0aWw7CitpbXBvcnQgY29tLmludGVsbGlqLmNvZGVJbnNpZ2h0LmFjdGlvbnMuUmVmb3JtYXRDb2RlUHJvY2Vzc29yOworaW1wb3J0IGNvbS5pbnRlbGxpai5sYW5nLmphdmEuSmF2YUxhbmd1YWdlOworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLmFwcGxpY2F0aW9uLkFwcGxpY2F0aW9uTWFuYWdlcjsKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS5jb21tYW5kLkNvbW1hbmRQcm9jZXNzb3I7CitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkuZWRpdG9yLkRvY3VtZW50OworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLmVkaXRvci5pbXBsLkRvY3VtZW50SW1wbDsKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS5maWxlVHlwZXMuU3RkRmlsZVR5cGVzOworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLnJvb3RzLkxhbmd1YWdlTGV2ZWxQcm9qZWN0RXh0ZW5zaW9uOworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLnV0aWwuVGV4dFJhbmdlOworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLnV0aWwuaW8uRmlsZVV0aWw7CitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkudXRpbC50ZXh0LlN0cmluZ1V0aWw7CitpbXBvcnQgY29tLmludGVsbGlqLnBvbS5qYXZhLkxhbmd1YWdlTGV2ZWw7CitpbXBvcnQgY29tLmludGVsbGlqLnBzaS5Qc2lEb2N1bWVudE1hbmFnZXI7CitpbXBvcnQgY29tLmludGVsbGlqLnBzaS5Qc2lGaWxlOworaW1wb3J0IGNvbS5pbnRlbGxpai5wc2kuY29kZVN0eWxlLkNvZGVTdHlsZU1hbmFnZXI7CitpbXBvcnQgY29tLmludGVsbGlqLnBzaS5jb2RlU3R5bGUuQ29kZVN0eWxlU2V0dGluZ3M7CitpbXBvcnQgY29tLmludGVsbGlqLnBzaS5jb2RlU3R5bGUuQ29kZVN0eWxlU2V0dGluZ3NNYW5hZ2VyOworaW1wb3J0IGNvbS5pbnRlbGxpai5wc2kuY29kZVN0eWxlLkNvbW1vbkNvZGVTdHlsZVNldHRpbmdzOworaW1wb3J0IGNvbS5pbnRlbGxpai50ZXN0RnJhbWV3b3JrLkxpZ2h0SWRlYVRlc3RDYXNlOworaW1wb3J0IGNvbS5pbnRlbGxpai51dGlsLkluY29ycmVjdE9wZXJhdGlvbkV4Y2VwdGlvbjsKK2ltcG9ydCBvcmcuamV0YnJhaW5zLmFubm90YXRpb25zLk5vbk5sczsKKworaW1wb3J0IGphdmEuaW8uRmlsZTsKK2ltcG9ydCBqYXZhLnV0aWwuRW51bU1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuTWFwOworCisvKioKKyAqIEJhc2UgY2xhc3MgZm9yIGphdmEgZm9ybWF0dGVyIHRlc3RzIHRoYXQgaG9sZHMgdXRpbGl0eSBtZXRob2RzLgorICoKKyAqIEBhdXRob3IgRGVuaXMgWmhkYW5vdgorICogQHNpbmNlIEFwciAyNywgMjAxMCA2OjI2OjI5IFBNCisgKi8KK3B1YmxpYyBhYnN0cmFjdCBjbGFzcyBBYnN0cmFjdEphdmFGb3JtYXR0ZXJUZXN0IGV4dGVuZHMgTGlnaHRJZGVhVGVzdENhc2UgeworCisgIHByb3RlY3RlZCBlbnVtIEFjdGlvbiB7UkVGT1JNQVQsIElOREVOVH0KKworICBwcml2YXRlIGludGVyZmFjZSBUZXN0Rm9ybWF0QWN0aW9uIHsKKyAgICB2b2lkIHJ1bihQc2lGaWxlIHBzaUZpbGUsIGludCBzdGFydE9mZnNldCwgaW50IGVuZE9mZnNldCk7CisgIH0KKworICBwcml2YXRlIHN0YXRpYyBmaW5hbCBNYXA8QWN0aW9uLCBUZXN0Rm9ybWF0QWN0aW9uPiBBQ1RJT05TID0gbmV3IEVudW1NYXA8QWN0aW9uLCBUZXN0Rm9ybWF0QWN0aW9uPihBY3Rpb24uY2xhc3MpOworICBzdGF0aWMgeworICAgIEFDVElPTlMucHV0KEFjdGlvbi5SRUZPUk1BVCwgbmV3IFRlc3RGb3JtYXRBY3Rpb24oKSB7CisgICAgICBAT3ZlcnJpZGUKKyAgICAgIHB1YmxpYyB2b2lkIHJ1bihQc2lGaWxlIHBzaUZpbGUsIGludCBzdGFydE9mZnNldCwgaW50IGVuZE9mZnNldCkgeworICAgICAgICBDb2RlU3R5bGVNYW5hZ2VyLmdldEluc3RhbmNlKGdldFByb2plY3QoKSkucmVmb3JtYXRUZXh0KHBzaUZpbGUsIHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXQpOworICAgICAgfQorICAgIH0pOworICAgIEFDVElPTlMucHV0KEFjdGlvbi5JTkRFTlQsIG5ldyBUZXN0Rm9ybWF0QWN0aW9uKCkgeworICAgICAgQE92ZXJyaWRlCisgICAgICBwdWJsaWMgdm9pZCBydW4oUHNpRmlsZSBwc2lGaWxlLCBpbnQgc3RhcnRPZmZzZXQsIGludCBlbmRPZmZzZXQpIHsKKyAgICAgICAgQ29kZVN0eWxlTWFuYWdlci5nZXRJbnN0YW5jZShnZXRQcm9qZWN0KCkpLmFkanVzdExpbmVJbmRlbnQocHNpRmlsZSwgc3RhcnRPZmZzZXQpOworICAgICAgfQorICAgIH0pOworICB9CisKKyAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEJBU0VfUEFUSCA9IEphdmFUZXN0VXRpbC5nZXRKYXZhVGVzdERhdGFQYXRoKCkgKyAiL3BzaS9mb3JtYXR0ZXIvamF2YSI7CisKKyAgcHVibGljIFRleHRSYW5nZSBteVRleHRSYW5nZTsKKyAgcHVibGljIFRleHRSYW5nZSBteUxpbmVSYW5nZTsKKworICBAT3ZlcnJpZGUKKyAgcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBzdXBlci5zZXRVcCgpOworICAgIExhbmd1YWdlTGV2ZWxQcm9qZWN0RXh0ZW5zaW9uLmdldEluc3RhbmNlKGdldFByb2plY3QoKSkuc2V0TGFuZ3VhZ2VMZXZlbChMYW5ndWFnZUxldmVsLkhJR0hFU1QpOworICB9CisKKyAgcHVibGljIHN0YXRpYyBDb21tb25Db2RlU3R5bGVTZXR0aW5ncyBnZXRTZXR0aW5ncygpIHsKKyAgICBDb2RlU3R5bGVTZXR0aW5ncyByb290U2V0dGluZ3MgPSBDb2RlU3R5bGVTZXR0aW5nc01hbmFnZXIuZ2V0U2V0dGluZ3MoZ2V0UHJvamVjdCgpKTsKKyAgICByZXR1cm4gcm9vdFNldHRpbmdzLmdldENvbW1vblNldHRpbmdzKEphdmFMYW5ndWFnZS5JTlNUQU5DRSk7CisgIH0KKworICBwdWJsaWMgc3RhdGljIENvbW1vbkNvZGVTdHlsZVNldHRpbmdzLkluZGVudE9wdGlvbnMgZ2V0SW5kZW50T3B0aW9ucygpIHsKKyAgICByZXR1cm4gZ2V0U2V0dGluZ3MoKS5nZXRSb290U2V0dGluZ3MoKS5nZXRJbmRlbnRPcHRpb25zKFN0ZEZpbGVUeXBlcy5KQVZBKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdChnZXRUZXN0TmFtZShmYWxzZSkgKyAiLmphdmEiLCBnZXRUZXN0TmFtZShmYWxzZSkgKyAiX2FmdGVyLmphdmEiKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIGRvVGVzdChATm9uTmxzIFN0cmluZyBmaWxlTmFtZUJlZm9yZSwgQE5vbk5scyBTdHJpbmcgZmlsZU5hbWVBZnRlcikgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXh0VGVzdChBY3Rpb24uUkVGT1JNQVQsIGxvYWRGaWxlKGZpbGVOYW1lQmVmb3JlKSwgbG9hZEZpbGUoZmlsZU5hbWVBZnRlcikpOworICB9CisKKyAgcHVibGljIHZvaWQgZG9UZXh0VGVzdChATm9uTmxzIGZpbmFsIFN0cmluZyB0ZXh0LCBATm9uTmxzIFN0cmluZyB0ZXh0QWZ0ZXIpIHRocm93cyBJbmNvcnJlY3RPcGVyYXRpb25FeGNlcHRpb24geworICAgIGRvVGV4dFRlc3QoQWN0aW9uLlJFRk9STUFULCB0ZXh0LCB0ZXh0QWZ0ZXIpOworICB9CisKKyAgcHVibGljIHZvaWQgZG9UZXh0VGVzdChmaW5hbCBBY3Rpb24gYWN0aW9uLCBmaW5hbCBTdHJpbmcgdGV4dCwgU3RyaW5nIHRleHRBZnRlcikgdGhyb3dzIEluY29ycmVjdE9wZXJhdGlvbkV4Y2VwdGlvbiB7CisgICAgZmluYWwgUHNpRmlsZSBmaWxlID0gY3JlYXRlRmlsZSgiQS5qYXZhIiwgdGV4dCk7CisKKyAgICBpZiAobXlMaW5lUmFuZ2UgIT0gbnVsbCkgeworICAgICAgZmluYWwgRG9jdW1lbnRJbXBsIGRvY3VtZW50ID0gbmV3IERvY3VtZW50SW1wbCh0ZXh0KTsKKyAgICAgIG15VGV4dFJhbmdlID0KKyAgICAgICAgbmV3IFRleHRSYW5nZShkb2N1bWVudC5nZXRMaW5lU3RhcnRPZmZzZXQobXlMaW5lUmFuZ2UuZ2V0U3RhcnRPZmZzZXQoKSksIGRvY3VtZW50LmdldExpbmVFbmRPZmZzZXQobXlMaW5lUmFuZ2UuZ2V0RW5kT2Zmc2V0KCkpKTsKKyAgICB9CisKKyAgICAvKgorICAgIENvbW1hbmRQcm9jZXNzb3IuZ2V0SW5zdGFuY2UoKS5leGVjdXRlQ29tbWFuZChnZXRQcm9qZWN0KCksIG5ldyBSdW5uYWJsZSgpIHsKKyAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKKyAgICAgICAgQXBwbGljYXRpb25NYW5hZ2VyLmdldEFwcGxpY2F0aW9uKCkucnVuV3JpdGVBY3Rpb24obmV3IFJ1bm5hYmxlKCkgeworICAgICAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKKyAgICAgICAgICAgIHBlcmZvcm1Gb3JtYXR0aW5nKGZpbGUpOworICAgICAgICAgIH0KKyAgICAgICAgfSk7CisgICAgICB9CisgICAgfSwgbnVsbCwgbnVsbCk7CisKKyAgICBhc3NlcnRFcXVhbHMocHJlcGFyZVRleHQodGV4dEFmdGVyKSwgcHJlcGFyZVRleHQoZmlsZS5nZXRUZXh0KCkpKTsKKworCisgICAgKi8KKworICAgIGZpbmFsIFBzaURvY3VtZW50TWFuYWdlciBtYW5hZ2VyID0gUHNpRG9jdW1lbnRNYW5hZ2VyLmdldEluc3RhbmNlKGdldFByb2plY3QoKSk7CisgICAgZmluYWwgRG9jdW1lbnQgZG9jdW1lbnQgPSBtYW5hZ2VyLmdldERvY3VtZW50KGZpbGUpOworCisKKyAgICBDb21tYW5kUHJvY2Vzc29yLmdldEluc3RhbmNlKCkuZXhlY3V0ZUNvbW1hbmQoZ2V0UHJvamVjdCgpLCBuZXcgUnVubmFibGUoKSB7CisgICAgICBAT3ZlcnJpZGUKKyAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKKyAgICAgICAgQXBwbGljYXRpb25NYW5hZ2VyLmdldEFwcGxpY2F0aW9uKCkucnVuV3JpdGVBY3Rpb24obmV3IFJ1bm5hYmxlKCkgeworICAgICAgICAgIEBPdmVycmlkZQorICAgICAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKKyAgICAgICAgICAgIGRvY3VtZW50LnJlcGxhY2VTdHJpbmcoMCwgZG9jdW1lbnQuZ2V0VGV4dExlbmd0aCgpLCB0ZXh0KTsKKyAgICAgICAgICAgIG1hbmFnZXIuY29tbWl0RG9jdW1lbnQoZG9jdW1lbnQpOworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgVGV4dFJhbmdlIHJhbmdlVG9Vc2UgPSBteVRleHRSYW5nZTsKKyAgICAgICAgICAgICAgaWYgKHJhbmdlVG9Vc2UgPT0gbnVsbCkgeworICAgICAgICAgICAgICAgIHJhbmdlVG9Vc2UgPSBmaWxlLmdldFRleHRSYW5nZSgpOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIEFDVElPTlMuZ2V0KGFjdGlvbikucnVuKGZpbGUsIHJhbmdlVG9Vc2UuZ2V0U3RhcnRPZmZzZXQoKSwgcmFuZ2VUb1VzZS5nZXRFbmRPZmZzZXQoKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjYXRjaCAoSW5jb3JyZWN0T3BlcmF0aW9uRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgICAgYXNzZXJ0VHJ1ZShlLmdldExvY2FsaXplZE1lc3NhZ2UoKSwgZmFsc2UpOworICAgICAgICAgICAgfQorICAgICAgICAgIH0KKyAgICAgICAgfSk7CisgICAgICB9CisgICAgfSwgYWN0aW9uID09IEFjdGlvbi5SRUZPUk1BVCA/IFJlZm9ybWF0Q29kZVByb2Nlc3Nvci5DT01NQU5EX05BTUUgOiAiIiwgIiIpOworCisKKyAgICBpZiAoZG9jdW1lbnQgPT0gbnVsbCkgeworICAgICAgZmFpbCgiRG9uJ3QgZXhwZWN0IHRoZSBkb2N1bWVudCB0byBiZSBudWxsIik7CisgICAgICByZXR1cm47CisgICAgfQorICAgIGFzc2VydEVxdWFscyh0ZXh0QWZ0ZXIsIGRvY3VtZW50LmdldFRleHQoKSk7CisgICAgbWFuYWdlci5jb21taXREb2N1bWVudChkb2N1bWVudCk7CisgICAgYXNzZXJ0RXF1YWxzKHRleHRBZnRlciwgZmlsZS5nZXRUZXh0KCkpOworCisgIH0KKworICBwdWJsaWMgdm9pZCBkb01ldGhvZFRlc3QoQE5vbk5scyBmaW5hbCBTdHJpbmcgYmVmb3JlLCBATm9uTmxzIGZpbmFsIFN0cmluZyBhZnRlcikgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXh0VGVzdCgKKyAgICAgIEFjdGlvbi5SRUZPUk1BVCwKKyAgICAgICJjbGFzcyBGb297XG4iICsgIiAgICB2b2lkIGZvbygpIHtcbiIgKyBiZWZvcmUgKyAnXG4nICsgIiAgICB9XG4iICsgIn0iLAorICAgICAgImNsYXNzIEZvbyB7XG4iICsgIiAgICB2b2lkIGZvbygpIHtcbiIgKyBTdHJpbmdVdGlsLnNoaWZ0SW5kZW50SW5zaWRlKGFmdGVyLCA4LCBmYWxzZSkgKyAnXG4nICsgIiAgICB9XG4iICsgIn0iCisgICAgKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIGRvQ2xhc3NUZXN0KEBOb25ObHMgZmluYWwgU3RyaW5nIGJlZm9yZSwgQE5vbk5scyBmaW5hbCBTdHJpbmcgYWZ0ZXIpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGV4dFRlc3QoCisgICAgICBBY3Rpb24uUkVGT1JNQVQsCisgICAgICAiY2xhc3MgRm9ve1xuIiArIGJlZm9yZSArICdcbicgKyAifSIsCisgICAgICAiY2xhc3MgRm9vIHtcbiIgKyBTdHJpbmdVdGlsLnNoaWZ0SW5kZW50SW5zaWRlKGFmdGVyLCA0LCBmYWxzZSkgKyAnXG4nICsgIn0iCisgICAgKTsKKyAgfQorCisgIHByaXZhdGUgc3RhdGljIFN0cmluZyBsb2FkRmlsZShTdHJpbmcgbmFtZSkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgU3RyaW5nIGZ1bGxOYW1lID0gQkFTRV9QQVRIICsgRmlsZS5zZXBhcmF0b3JDaGFyICsgbmFtZTsKKyAgICBTdHJpbmcgdGV4dCA9IEZpbGVVdGlsLmxvYWRGaWxlKG5ldyBGaWxlKGZ1bGxOYW1lKSk7CisgICAgdGV4dCA9IFN0cmluZ1V0aWwuY29udmVydExpbmVTZXBhcmF0b3JzKHRleHQpOworICAgIHJldHVybiB0ZXh0OworICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovcHNpL2Zvcm1hdHRlci9qYXZhL0phdmFGb3JtYXR0ZXJBbGlnbm1lbnRUZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovcHNpL2Zvcm1hdHRlci9qYXZhL0phdmFGb3JtYXR0ZXJBbGlnbm1lbnRUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzk1MzdlMAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9wc2kvZm9ybWF0dGVyL2phdmEvSmF2YUZvcm1hdHRlckFsaWdubWVudFRlc3QuamF2YQpAQCAtMCwwICsxLDMwNCBAQAorLyoKKyAqIENvcHlyaWdodCAyMDAwLTIwMTIgSmV0QnJhaW5zIHMuci5vLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KK3BhY2thZ2UgY29tLmludGVsbGlqLnBzaS5mb3JtYXR0ZXIuamF2YTsKKworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLmZpbGVUeXBlcy5TdGRGaWxlVHlwZXM7CitpbXBvcnQgY29tLmludGVsbGlqLnBzaS5jb2RlU3R5bGUuQ29tbW9uQ29kZVN0eWxlU2V0dGluZ3M7CitpbXBvcnQgY29tLmludGVsbGlqLnV0aWwuSW5jb3JyZWN0T3BlcmF0aW9uRXhjZXB0aW9uOworCisvKioKKyAqIElzIGludGVuZGVkIHRvIGhvbGQgc3BlY2lmaWMgamF2YSBmb3JtYXR0aW5nIHRlc3RzIGZvciBhbGlnbm1lbnQgc2V0dGluZ3MgKAorICogPGNvZGU+UHJvamVjdCBTZXR0aW5ncyAtIENvZGUgU3R5bGUgLSBBbGlnbm1lbnQgYW5kIEJyYWNlczwvY29kZT4pLgorICoKKyAqIEBhdXRob3IgRGVuaXMgWmhkYW5vdgorICogQHNpbmNlIEFwciAyNywgMjAxMCA2OjQyOjAwIFBNCisgKi8KK3B1YmxpYyBjbGFzcyBKYXZhRm9ybWF0dGVyQWxpZ25tZW50VGVzdCBleHRlbmRzIEFic3RyYWN0SmF2YUZvcm1hdHRlclRlc3QgeworCisgIHB1YmxpYyB2b2lkIHRlc3RDaGFpbmVkTWV0aG9kc0FsaWdubWVudCgpIHRocm93cyBFeGNlcHRpb24geworICAgIC8vIEluc3BpcmVkIGJ5IElERUEtMzAzNjkKKyAgICBnZXRTZXR0aW5ncygpLkFMSUdOX01VTFRJTElORV9DSEFJTkVEX01FVEhPRFMgPSB0cnVlOworICAgIGdldFNldHRpbmdzKCkuTUVUSE9EX0NBTExfQ0hBSU5fV1JBUCA9IENvbW1vbkNvZGVTdHlsZVNldHRpbmdzLldSQVBfQVNfTkVFREVEOworICAgIGdldFNldHRpbmdzKCkuZ2V0Um9vdFNldHRpbmdzKCkuZ2V0SW5kZW50T3B0aW9ucyhTdGRGaWxlVHlwZXMuSkFWQSkuQ09OVElOVUFUSU9OX0lOREVOVF9TSVpFID0gODsKKyAgICBkb1Rlc3QoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RNZXRob2RBbmRDaGFpbmVkRmllbGQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAvLyBJbnNwaXJlZCBieSBJREVBLTc5ODA2CisKKyAgICBnZXRTZXR0aW5ncygpLkFMSUdOX01VTFRJTElORV9DSEFJTkVEX01FVEhPRFMgPSB0cnVlOworICAgIGRvTWV0aG9kVGVzdCgKKyAgICAgICJIb2xkZXIuSU5TVEFOQ0VcbiIgKworICAgICAgIiAgICAgICAgICAgICAgICAuZm9vKCk7IiwKKyAgICAgICJIb2xkZXIuSU5TVEFOQ0VcbiIgKworICAgICAgIiAgICAgIC5mb28oKTsiCisgICAgKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RNdWx0aXBsZU1ldGhvZEFubm90YXRpb25zQ29tbWVudGVkSW5UaGVNaWRkbGUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBnZXRTZXR0aW5ncygpLkJMQU5LX0xJTkVTX0FGVEVSX0NMQVNTX0hFQURFUiA9IDE7CisgICAgZ2V0U2V0dGluZ3MoKS5nZXRSb290U2V0dGluZ3MoKS5nZXRJbmRlbnRPcHRpb25zKFN0ZEZpbGVUeXBlcy5KQVZBKS5JTkRFTlRfU0laRSA9IDQ7CisKKyAgICAvLyBJbnNwaXJlZCBieSBJREVBLTUzOTQyCisgICAgZG9UZXh0VGVzdCgKKyAgICAgICJwdWJsaWMgY2xhc3MgVGVzdCB7XG4iICsKKyAgICAgICIgICAgICAgICAgQE92ZXJyaWRlXG4iICsKKyAgICAgICIvLyAgICAgICBAWG1sRWxlbWVudChuYW1lID0gXCJEb2N1bWVudFwiLCByZXF1aXJlZCA9IHRydWUsIHR5cGUgPSBEb2N1bWVudFR5cGUuY2xhc3MpXG4iICsKKyAgICAgICIgICAgICAgQFhtbFRyYW5zaWVudFxuIiArCisgICAgICAiICB2b2lkIGZvbygpIHtcbiIgKworICAgICAgIn1cbiIgKworICAgICAgIn0iLAorCisgICAgICAicHVibGljIGNsYXNzIFRlc3Qge1xuIiArCisgICAgICAiXG4iICsKKyAgICAgICIgICAgQE92ZXJyaWRlXG4iICsKKyAgICAgICIvLyAgICAgICBAWG1sRWxlbWVudChuYW1lID0gXCJEb2N1bWVudFwiLCByZXF1aXJlZCA9IHRydWUsIHR5cGUgPSBEb2N1bWVudFR5cGUuY2xhc3MpXG4iICsKKyAgICAgICIgICAgQFhtbFRyYW5zaWVudFxuIiArCisgICAgICAiICAgIHZvaWQgZm9vKCkge1xuIiArCisgICAgICAiICAgIH1cbiIgKworICAgICAgIn0iCisgICAgKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RUZXJuYXJ5T3BlcmF0b3IoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAvLyBJbnNwaXJlZCBieSBJREVBREVWLTEzMDE4CisgICAgZ2V0U2V0dGluZ3MoKS5BTElHTl9NVUxUSUxJTkVfVEVSTkFSWV9PUEVSQVRJT04gPSB0cnVlOworCisgICAgZG9NZXRob2RUZXN0KCJpbnQgaSA9IGEgPyB4XG4iICsgIjogeTsiLCAiaW50IGkgPSBhID8geFxuIiArICIgICAgICAgICAgOiB5OyIpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdE1ldGhvZENhbGxBcmd1bWVudHNBbmRTbWFydFRhYnMoKSB0aHJvd3MgSW5jb3JyZWN0T3BlcmF0aW9uRXhjZXB0aW9uIHsKKyAgICAvLyBJbnNwaXJlZCBieSBJREVBREVWLTIwMTQ0LgorICAgIGdldFNldHRpbmdzKCkuQUxJR05fTVVMVElMSU5FX1BBUkFNRVRFUlNfSU5fQ0FMTFMgPSB0cnVlOworICAgIGdldFNldHRpbmdzKCkuZ2V0Um9vdFNldHRpbmdzKCkuZ2V0SW5kZW50T3B0aW9ucyhTdGRGaWxlVHlwZXMuSkFWQSkuU01BUlRfVEFCUyA9IHRydWU7CisgICAgZ2V0U2V0dGluZ3MoKS5nZXRSb290U2V0dGluZ3MoKS5nZXRJbmRlbnRPcHRpb25zKFN0ZEZpbGVUeXBlcy5KQVZBKS5VU0VfVEFCX0NIQVJBQ1RFUiA9IHRydWU7CisgICAgZG9UZXh0VGVzdCgiY2xhc3MgRm9vIHtcbiIgKworICAgICAgICAgICAgICAgIiAgICB2b2lkIGZvbygpIHtcbiIgKworICAgICAgICAgICAgICAgIiAgICAgICAgYmFyKG5ldyBPYmplY3RbXSB7XG4iICsKKyAgICAgICAgICAgICAgICIgICAgICAgICAgICBcImhlbGxvMVwiLFxuIiArCisgICAgICAgICAgICAgICAiICAgICAgICAgICAgXCJoZWxsbzJcIiwgYWRkKFwiaGVsbG8zXCIsXG4iICsKKyAgICAgICAgICAgICAgICIgICAgICAgICAgICAgICAgICAgICAgICAgICBcIndvcmxkXCIpXG4iICsKKyAgICAgICAgICAgICAgICJ9KTsiICsKKyAgICAgICAgICAgICAgICIgICAgfX0iLCAiY2xhc3MgRm9vIHtcbiIgKworICAgICAgICAgICAgICAgICAgICAgICAgICJcdHZvaWQgZm9vKCkge1xuIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgIlx0XHRiYXIobmV3IE9iamVjdFtde1xuIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgIlx0XHRcdFx0XCJoZWxsbzFcIixcbiIgKworICAgICAgICAgICAgICAgICAgICAgICAgICJcdFx0XHRcdFwiaGVsbG8yXCIsIGFkZChcImhlbGxvM1wiLFxuIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgIlx0XHRcdFx0ICAgICAgICAgICAgICBcIndvcmxkXCIpXG4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAiXHRcdH0pO1xuIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgIlx0fVxuIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgIn0iKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RBcnJheUluaXRpYWxpemVyKCkgdGhyb3dzIEluY29ycmVjdE9wZXJhdGlvbkV4Y2VwdGlvbiB7CisgICAgLy8gSW5zcGlyZWQgYnkgSURFQURFVi0xNjEzNgorICAgIGdldFNldHRpbmdzKCkuQVJSQVlfSU5JVElBTElaRVJfV1JBUCA9IENvbW1vbkNvZGVTdHlsZVNldHRpbmdzLldSQVBfQUxXQVlTOworICAgIGdldFNldHRpbmdzKCkuQUxJR05fTVVMVElMSU5FX0FSUkFZX0lOSVRJQUxJWkVSX0VYUFJFU1NJT04gPSB0cnVlOworCisgICAgZG9UZXh0VGVzdCgKKyAgICAgICJAU3VwcHJlc3NXYXJuaW5ncyh7XCJVc2VPZlN5c3RlbU91dE9yU3lzdGVtRXJyXCIsIFwiQXNzaWdubWVudFRvQ29sbGVjdGlvbk9yQXJyYXlGaWVsZEZyb21QYXJhbWV0ZXJcIiwgXCJSZXR1cm5PZkNvbGxlY3Rpb25PckFycmF5RmllbGRcIn0pXG4iICsKKyAgICAgICJwdWJsaWMgY2xhc3MgU29tZSB7XG4iICsKKyAgICAgICJ9IiwKKyAgICAgICJAU3VwcHJlc3NXYXJuaW5ncyh7XCJVc2VPZlN5c3RlbU91dE9yU3lzdGVtRXJyXCIsXG4iICsKKyAgICAgICIgICAgICAgICAgICAgICAgICAgXCJBc3NpZ25tZW50VG9Db2xsZWN0aW9uT3JBcnJheUZpZWxkRnJvbVBhcmFtZXRlclwiLFxuIiArCisgICAgICAiICAgICAgICAgICAgICAgICAgIFwiUmV0dXJuT2ZDb2xsZWN0aW9uT3JBcnJheUZpZWxkXCJ9KVxuIiArCisgICAgICAicHVibGljIGNsYXNzIFNvbWUge1xuIiArCisgICAgICAifSIpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdE1ldGhvZEJyYWNrZXRzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgLy8gSW5zcGlyZWQgYnkgSURFQS01MzAxMworICAgIGdldFNldHRpbmdzKCkuQUxJR05fTVVMVElMSU5FX01FVEhPRF9CUkFDS0VUUyA9IHRydWU7CisgICAgZ2V0U2V0dGluZ3MoKS5BTElHTl9NVUxUSUxJTkVfUEFSRU5USEVTSVpFRF9FWFBSRVNTSU9OID0gZmFsc2U7CisgICAgZ2V0U2V0dGluZ3MoKS5BTElHTl9NVUxUSUxJTkVfUEFSQU1FVEVSUyA9IHRydWU7CisgICAgZ2V0U2V0dGluZ3MoKS5BTElHTl9NVUxUSUxJTkVfUEFSQU1FVEVSU19JTl9DQUxMUyA9IHRydWU7CisgICAgZ2V0U2V0dGluZ3MoKS5DQUxMX1BBUkFNRVRFUlNfUlBBUkVOX09OX05FWFRfTElORSA9IHRydWU7CisgICAgZ2V0U2V0dGluZ3MoKS5NRVRIT0RfUEFSQU1FVEVSU19SUEFSRU5fT05fTkVYVF9MSU5FID0gdHJ1ZTsKKworICAgIGRvQ2xhc3NUZXN0KAorICAgICAgInB1YmxpYyB2b2lkIGZvbyhpbnQgaSxcbiIgKworICAgICAgIiAgICAgICAgICAgICAgICAgIGludCBqKSB7XG4iICsKKyAgICAgICJ9XG4iICsKKyAgICAgICJcbiIgKworICAgICAgIiAgcHVibGljIHZvaWQgYmFyKCkge1xuIiArCisgICAgICAiICAgIGZvbygxLFxuIiArCisgICAgICAiICAgICAgICAyKTtcbiIgKworICAgICAgIiAgfSIsCisKKyAgICAgICJwdWJsaWMgdm9pZCBmb28oaW50IGksXG4iICsKKyAgICAgICIgICAgICAgICAgICAgICAgaW50IGpcbiIgKworICAgICAgIiAgICAgICAgICAgICAgICkge1xuIiArCisgICAgICAifVxuIiArCisgICAgICAiXG4iICsKKyAgICAgICJwdWJsaWMgdm9pZCBiYXIoKSB7XG4iICsKKyAgICAgICIgICAgZm9vKDEsXG4iICsKKyAgICAgICIgICAgICAgIDJcbiIgKworICAgICAgIiAgICAgICApO1xuIiArCisgICAgICAifSIKKyAgICApOworCisgICAgLy8gSW5zcGlyZWQgYnkgSURFQS01NTMwNgorICAgIGdldFNldHRpbmdzKCkuQUxJR05fTVVMVElMSU5FX01FVEhPRF9CUkFDS0VUUyA9IGZhbHNlOworICAgIGdldFNldHRpbmdzKCkuQ0FMTF9QQVJBTUVURVJTX1JQQVJFTl9PTl9ORVhUX0xJTkUgPSBmYWxzZTsKKyAgICBTdHJpbmcgbWV0aG9kID0KKyAgICAgICJleGVjdXRlQ29tbWFuZChuZXcgQ29tbWFuZDxCb29sZWFuPigpIHtcbiIgKworICAgICAgIiAgICBwdWJsaWMgQm9vbGVhbiBydW4oKSB0aHJvd3MgRXhlY3V0aW9uRXhjZXB0aW9uIHtcbiIgKworICAgICAgIiAgICAgICAgcmV0dXJuIGRvSW50ZXJydXB0KCk7XG4iICsKKyAgICAgICIgICAgfVxuIiArCisgICAgICAifSk7IjsKKyAgICBkb01ldGhvZFRlc3QobWV0aG9kLCBtZXRob2QpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEZpZWxkSW5Db2x1bW5zQWxpZ25tZW50KCkgeworICAgIC8vIEluc3BpcmVkIGJ5IElERUEtNTUxNDcKKyAgICBnZXRTZXR0aW5ncygpLkFMSUdOX0dST1VQX0ZJRUxEX0RFQ0xBUkFUSU9OUyA9IHRydWU7CisgICAgZ2V0U2V0dGluZ3MoKS5GSUVMRF9BTk5PVEFUSU9OX1dSQVAgPSBDb21tb25Db2RlU3R5bGVTZXR0aW5ncy5ET19OT1RfV1JBUDsKKyAgICBnZXRTZXR0aW5ncygpLlZBUklBQkxFX0FOTk9UQVRJT05fV1JBUCA9IENvbW1vbkNvZGVTdHlsZVNldHRpbmdzLkRPX05PVF9XUkFQOworCisgICAgZG9UZXh0VGVzdCgKKyAgICAgICJwdWJsaWMgY2xhc3MgRm9ybWF0dGluZ1Rlc3Qge1xuIiArCisgICAgICAiXG4iICsKKyAgICAgICIgICAgaW50IHN0YXJ0ID0gMTtcbiIgKworICAgICAgIiAgICBkb3VibGUgZW5kID0gMjtcbiIgKworICAgICAgIlxuIiArCisgICAgICAiICAgIGludCBpMiA9IDE7XG4iICsKKyAgICAgICIgICAgZG91YmxlIGRkMixcbiIgKworICAgICAgIiAgICAgICAgZGQzID0gMjtcbiIgKworICAgICAgIlxuIiArCisgICAgICAiICAgIC8vIGFzZFxuIiArCisgICAgICAiICAgIGNoYXIgY2NjMyA9ICdhJztcbiIgKworICAgICAgIiAgICBkb3VibGUgZGRkMzEsIGRkZDMyID0gMTtcbiIgKworICAgICAgIlxuIiArCisgICAgICAiICAgIHByaXZhdGVcbiIgKworICAgICAgIiAgICBmaW5hbCBTdHJpbmcgczQgPSBcIlwiO1xuIiArCisgICAgICAiICAgIHByaXZhdGVcbiIgKworICAgICAgIiAgICB0cmFuc2llbnQgaW50IGk0ID0gMTtcbiIgKworICAgICAgIlxuIiArCisgICAgICAiICAgIHByaXZhdGUgZmluYWwgU3RyaW5nIHM1ID0gXCJ4eHhcIjtcbiIgKworICAgICAgIiAgICBwcml2YXRlIHRyYW5zaWVudCBpbnQgaWlpaTUgPSAxO1xuIiArCisgICAgICAiICAgIC8qc2RmKi9cbiIgKworICAgICAgIiAgICBATXlBbm5vdGF0aW9uKHZhbHVlID0gMSwgdGV4dCA9IDIpIGZsb2F0IGY1ID0gMTtcbiIgKworICAgICAgIn0iLAorCisgICAgICAicHVibGljIGNsYXNzIEZvcm1hdHRpbmdUZXN0IHtcbiIgKworICAgICAgIlxuIiArCisgICAgICAiICAgIGludCAgICBzdGFydCA9IDE7XG4iICsKKyAgICAgICIgICAgZG91YmxlIGVuZCAgID0gMjtcbiIgKworICAgICAgIlxuIiArCisgICAgICAiICAgIGludCAgICBpMiAgID0gMTtcbiIgKworICAgICAgIiAgICBkb3VibGUgZGQyLFxuIiArCisgICAgICAiICAgICAgICAgICAgZGQzID0gMjtcbiIgKworICAgICAgIlxuIiArCisgICAgICAiICAgIC8vIGFzZFxuIiArCisgICAgICAiICAgIGNoYXIgICBjY2MzICAgICAgICAgPSAnYSc7XG4iICsKKyAgICAgICIgICAgZG91YmxlIGRkZDMxLCBkZGQzMiA9IDE7XG4iICsKKyAgICAgICJcbiIgKworICAgICAgIiAgICBwcml2YXRlXG4iICsKKyAgICAgICIgICAgZmluYWwgICAgIFN0cmluZyBzNCA9IFwiXCI7XG4iICsKKyAgICAgICIgICAgcHJpdmF0ZVxuIiArCisgICAgICAiICAgIHRyYW5zaWVudCBpbnQgICAgaTQgPSAxO1xuIiArCisgICAgICAiXG4iICsKKyAgICAgICIgICAgcHJpdmF0ZSBmaW5hbCAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgczUgICAgPSBcInh4eFwiO1xuIiArCisgICAgICAiICAgIHByaXZhdGUgdHJhbnNpZW50ICAgICAgICAgICAgICAgICAgaW50ICAgIGlpaWk1ID0gMTtcbiIgKworICAgICAgIiAgICAvKnNkZiovXG4iICsKKyAgICAgICIgICAgQE15QW5ub3RhdGlvbih2YWx1ZSA9IDEsIHRleHQgPSAyKSBmbG9hdCAgZjUgICAgPSAxO1xuIiArCisgICAgICAifSIKKyAgICApOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFRhYnNBbmRGaWVsZHNJbkNvbHVtbnNBbGlnbm1lbnQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAvLyBJbnNwaXJlZCBieSBJREVBLTU2MjQyCisgICAgZ2V0U2V0dGluZ3MoKS5BTElHTl9HUk9VUF9GSUVMRF9ERUNMQVJBVElPTlMgPSB0cnVlOworICAgIGdldEluZGVudE9wdGlvbnMoKS5VU0VfVEFCX0NIQVJBQ1RFUiA9IHRydWU7CisKKyAgICBkb1RleHRUZXN0KAorICAgICAgInB1YmxpYyBjbGFzcyBUZXN0IHtcbiIgKworICAgICAgICAiXHRwcml2YXRlIExvbmcgZmllbGQyID0gbnVsbDtcbiIgKworICAgICAgICAiXHRwcml2YXRlIGZpbmFsIE9iamVjdCBmaWVsZDEgPSBudWxsO1xuIiArCisgICAgICAgICJcdHByaXZhdGUgaW50IGkgPSAxO1xuIiArCisgICAgICAifSIsCisKKyAgICAgICJwdWJsaWMgY2xhc3MgVGVzdCB7XG4iICsKKyAgICAgICAgIlx0cHJpdmF0ZSAgICAgICBMb25nICAgZmllbGQyID0gbnVsbDtcbiIgKworICAgICAgICAiXHRwcml2YXRlIGZpbmFsIE9iamVjdCBmaWVsZDEgPSBudWxsO1xuIiArCisgICAgICAgICJcdHByaXZhdGUgICAgICAgaW50ICAgIGkgICAgICA9IDE7XG4iICsKKyAgICAgICJ9IgorICAgICk7CisgIH0KKyAgCisgIHB1YmxpYyB2b2lkIHRlc3RBbm5vdGF0ZWRBbmROb25Bbm5vdGF0ZWRGaWVsZHNJbkNvbHVtbnNBbGlnbm1lbnQoKSB7CisgICAgLy8gSW5zcGlyZWQgYnkgSURFQS02MDIzNworCisgICAgZ2V0U2V0dGluZ3MoKS5BTElHTl9HUk9VUF9GSUVMRF9ERUNMQVJBVElPTlMgPSB0cnVlOworICAgIGRvVGV4dFRlc3QoCisgICAgICAicHVibGljIGNsYXNzIFRlc3Qge1xuIiArCisgICAgICAiICAgIEBJZFxuIiArCisgICAgICAiICAgIHByaXZhdGUgZmluYWwgU3RyaW5nIG5hbWU7XG4iICsKKyAgICAgICIgICAgQENvbHVtbihsZW5ndGggPSAyICogMTAyNCAqIDEwMjQgLyogMiBNQiAqLylcbiIgKworICAgICAgIiAgICBwcml2YXRlIFN0cmluZyB2YWx1ZTtcbiIgKworICAgICAgIiAgICBwcml2YXRlIGJvb2xlYW4gcmVxdWlyZWQ7XG4iICsKKyAgICAgICIgICAgcHJpdmF0ZSBTdHJpbmcgdW5zZXRWYWx1ZTtcbiIgKworICAgICAgIn0iLAorCisgICAgICAicHVibGljIGNsYXNzIFRlc3Qge1xuIiArCisgICAgICAiICAgIEBJZFxuIiArCisgICAgICAiICAgIHByaXZhdGUgZmluYWwgU3RyaW5nICBuYW1lO1xuIiArCisgICAgICAiICAgIEBDb2x1bW4obGVuZ3RoID0gMiAqIDEwMjQgKiAxMDI0IC8qIDIgTUIgKi8pXG4iICsKKyAgICAgICIgICAgcHJpdmF0ZSAgICAgICBTdHJpbmcgIHZhbHVlO1xuIiArCisgICAgICAiICAgIHByaXZhdGUgICAgICAgYm9vbGVhbiByZXF1aXJlZDtcbiIgKworICAgICAgIiAgICBwcml2YXRlICAgICAgIFN0cmluZyAgdW5zZXRWYWx1ZTtcbiIgKworICAgICAgIn0iCisgICAgKTsKKyAgfQorICAKKyAgcHVibGljIHZvaWQgdGVzdEFsaWduVGhyb3dzS2V5d29yZCgpIHRocm93cyBFeGNlcHRpb24geworICAgIC8vIEluc3BpcmVkIGJ5IElERUEtNjM4MjAKKyAgICAKKyAgICBnZXRTZXR0aW5ncygpLkFMSUdOX1RIUk9XU19LRVlXT1JEID0gdHJ1ZTsKKyAgICBkb0NsYXNzVGVzdCgKKyAgICAgICJwdWJsaWMgdm9pZCB0ZXN0KClcbiIgKworICAgICAgIiAgICAgICAgICAgICAgICAgdGhyb3dzIEV4Y2VwdGlvbiB7fSIsCisgICAgICAicHVibGljIHZvaWQgdGVzdCgpXG4iICsKKyAgICAgICJ0aHJvd3MgRXhjZXB0aW9uIHtcbiIgKworICAgICAgIn0iCisgICAgKTsKKworICAgIGdldFNldHRpbmdzKCkuQUxJR05fVEhST1dTX0tFWVdPUkQgPSBmYWxzZTsKKyAgICBkb0NsYXNzVGVzdCgKKyAgICAgICJwdWJsaWMgdm9pZCB0ZXN0KClcbiIgKworICAgICAgIiAgICAgICAgICAgICAgICAgdGhyb3dzIEV4Y2VwdGlvbiB7fSIsCisgICAgICAicHVibGljIHZvaWQgdGVzdCgpXG4iICsKKyAgICAgICIgICAgICAgIHRocm93cyBFeGNlcHRpb24ge1xuIiArCisgICAgICAifSIKKyAgICApOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEFsaWduUmVzb3VyY2VMaXN0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZ2V0U2V0dGluZ3MoKS5LRUVQX1NJTVBMRV9CTE9DS1NfSU5fT05FX0xJTkUgPSB0cnVlOworCisgICAgZ2V0U2V0dGluZ3MoKS5BTElHTl9NVUxUSUxJTkVfUkVTT1VSQ0VTID0gdHJ1ZTsKKyAgICBkb01ldGhvZFRlc3QoInRyeSAoTXlSZXNvdXJjZSByMSA9IG51bGw7XG4iICsKKyAgICAgICAgICAgICAgICAgIk15UmVzb3VyY2UgcjIgPSBudWxsKSB7IH0iLAorICAgICAgICAgICAgICAgICAidHJ5IChNeVJlc291cmNlIHIxID0gbnVsbDtcbiIgKworICAgICAgICAgICAgICAgICAiICAgICBNeVJlc291cmNlIHIyID0gbnVsbCkgeyB9Iik7CisKKyAgICBnZXRTZXR0aW5ncygpLkFMSUdOX01VTFRJTElORV9SRVNPVVJDRVMgPSBmYWxzZTsKKyAgICBkb01ldGhvZFRlc3QoInRyeSAoTXlSZXNvdXJjZSByMSA9IG51bGw7XG4iICsKKyAgICAgICAgICAgICAgICAgIk15UmVzb3VyY2UgcjIgPSBudWxsKSB7IH0iLAorICAgICAgICAgICAgICAgICAidHJ5IChNeVJlc291cmNlIHIxID0gbnVsbDtcbiIgKworICAgICAgICAgICAgICAgICAiICAgICAgICBNeVJlc291cmNlIHIyID0gbnVsbCkgeyB9Iik7CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9wc2kvZm9ybWF0dGVyL2phdmEvSmF2YUZvcm1hdHRlckJsYW5rTGluZXNUZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovcHNpL2Zvcm1hdHRlci9qYXZhL0phdmFGb3JtYXR0ZXJCbGFua0xpbmVzVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJmMTFhNTgKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovcHNpL2Zvcm1hdHRlci9qYXZhL0phdmFGb3JtYXR0ZXJCbGFua0xpbmVzVGVzdC5qYXZhCkBAIC0wLDAgKzEsNDAzIEBACisvKgorICogQ29weXJpZ2h0IDIwMDAtMjAxMCBKZXRCcmFpbnMgcy5yLm8uCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworcGFja2FnZSBjb20uaW50ZWxsaWoucHNpLmZvcm1hdHRlci5qYXZhOworCisvKioKKyAqIElzIGludGVuZGVkIHRvIGhvbGQgc3BlY2lmaWMgamF2YSBmb3JtYXR0aW5nIHRlc3RzIGZvciAnYmxhbmsgbGluZXMnIHNldHRpbmdzLgorICoKKyAqIEBhdXRob3IgRGVuaXMgWmhkYW5vdgorICogQHNpbmNlIEFwciAyNywgMjAxMCA2OjMzOjAwIFBNCisgKi8KK3B1YmxpYyBjbGFzcyBKYXZhRm9ybWF0dGVyQmxhbmtMaW5lc1Rlc3QgZXh0ZW5kcyBBYnN0cmFjdEphdmFGb3JtYXR0ZXJUZXN0IHsKKworICBwdWJsaWMgdm9pZCB0ZXN0QmxhbmtMaW5lc0Fyb3VuZENsYXNzSW5pdGlhbGl6YXRpb25CbG9jaygpIHRocm93cyBFeGNlcHRpb24geworICAgIGdldFNldHRpbmdzKCkuQkxBTktfTElORVNfQVJPVU5EX01FVEhPRCA9IDM7CisgICAgZG9UZXh0VGVzdCgKKyAgICAgICJjbGFzcyBUIHtcbiIgKworICAgICAgIiAgICBwcml2YXRlIGZpbmFsIERlY2ltYWxGb3JtYXQgZm10ID0gbmV3IERlY2ltYWxGb3JtYXQoKTtcbiIgKworICAgICAgIiAgICB7XG4iICsKKyAgICAgICIgICAgICAgIGZtdC5zZXRHcm91cGluZ1VzZWQoZmFsc2UpO1xuIiArCisgICAgICAiICAgICAgICBmbXQuc2V0RGVjaW1hbEZvcm1hdFN5bWJvbHMobmV3IERlY2ltYWxGb3JtYXRTeW1ib2xzKExvY2FsZS5VUykpO1xuIiArCisgICAgICAiICAgIH1cbiIgKworICAgICAgIn0iLAorCisgICAgICAiY2xhc3MgVCB7XG4iICsKKyAgICAgICIgICAgcHJpdmF0ZSBmaW5hbCBEZWNpbWFsRm9ybWF0IGZtdCA9IG5ldyBEZWNpbWFsRm9ybWF0KCk7XG4iICsKKyAgICAgICJcbiIgKworICAgICAgIlxuIiArCisgICAgICAiXG4iICsKKyAgICAgICIgICAge1xuIiArCisgICAgICAiICAgICAgICBmbXQuc2V0R3JvdXBpbmdVc2VkKGZhbHNlKTtcbiIgKworICAgICAgIiAgICAgICAgZm10LnNldERlY2ltYWxGb3JtYXRTeW1ib2xzKG5ldyBEZWNpbWFsRm9ybWF0U3ltYm9scyhMb2NhbGUuVVMpKTtcbiIgKworICAgICAgIiAgICB9XG4iICsKKyAgICAgICJ9Iik7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0QmxhbmtMaW5lc0Fyb3VuZENsYXNzTWV0aG9kcygpIHsKKyAgICAvLyBJbnNwaXJlZCBieSBJREVBLTE5NDA4CisgICAgZ2V0U2V0dGluZ3MoKS5CTEFOS19MSU5FU19BUk9VTkRfTUVUSE9EID0gMzsKKworICAgIGRvVGV4dFRlc3QoCisgICAgICAiY2xhc3MgVGVzdCB7XG4iICsKKyAgICAgICIgICAgcHVibGljIGJvb2xlYW4gZmxhZzEoKSB7XG4iICsKKyAgICAgICIgICAgICAgIHJldHVybiBmYWxzZTtcbiIgKworICAgICAgIiAgICB9cHVibGljIGJvb2xlYW4gZmxhZzIoKSB7XG4iICsKKyAgICAgICIgICAgICAgIHJldHVybiBmYWxzZTtcbiIgKworICAgICAgIiAgICB9cHVibGljIGJvb2xlYW4gZmxhZzMoKSB7XG4iICsKKyAgICAgICIgICAgICAgIHJldHVybiBmYWxzZTtcbiIgKworICAgICAgIiAgICB9cHVibGljIGJvb2xlYW4gZmxhZzQoKSB7XG4iICsKKyAgICAgICIgICAgICAgIHJldHVybiBmYWxzZTtcbiIgKworICAgICAgIiAgICB9XG4iICsKKyAgICAgICJ9IiwKKworICAgICAgImNsYXNzIFRlc3Qge1xuIiArCisgICAgICAiICAgIHB1YmxpYyBib29sZWFuIGZsYWcxKCkge1xuIiArCisgICAgICAiICAgICAgICByZXR1cm4gZmFsc2U7XG4iICsKKyAgICAgICIgICAgfVxuIiArCisgICAgICAiXG4iICsKKyAgICAgICJcbiIgKworICAgICAgIlxuIiArCisgICAgICAiICAgIHB1YmxpYyBib29sZWFuIGZsYWcyKCkge1xuIiArCisgICAgICAiICAgICAgICByZXR1cm4gZmFsc2U7XG4iICsKKyAgICAgICIgICAgfVxuIiArCisgICAgICAiXG4iICsKKyAgICAgICJcbiIgKworICAgICAgIlxuIiArCisgICAgICAiICAgIHB1YmxpYyBib29sZWFuIGZsYWczKCkge1xuIiArCisgICAgICAiICAgICAgICByZXR1cm4gZmFsc2U7XG4iICsKKyAgICAgICIgICAgfVxuIiArCisgICAgICAiXG4iICsKKyAgICAgICJcbiIgKworICAgICAgIlxuIiArCisgICAgICAiICAgIHB1YmxpYyBib29sZWFuIGZsYWc0KCkge1xuIiArCisgICAgICAiICAgICAgICByZXR1cm4gZmFsc2U7XG4iICsKKyAgICAgICIgICAgfVxuIiArCisgICAgICAifSIKKyAgICApOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEJsYW5rTGluZXNBcm91bmRFbnVtTWV0aG9kcygpIHsKKyAgICAvLyBJbnNwaXJlZCBieSBJREVBLTE5NDA4CisgICAgZ2V0U2V0dGluZ3MoKS5CTEFOS19MSU5FU19BUk9VTkRfTUVUSE9EID0gMjsKKworICAgIGRvVGV4dFRlc3QoCisgICAgICAicHVibGljIGVudW0gV3JhcHBpbmcge1xuIiArCisgICAgICAiICAgIFdSQVBQSU5HIHtwdWJsaWMgYm9vbGVhbiBmbGFnMSgpIHtcbiIgKworICAgICAgIiAgICAgICAgcmV0dXJuIGZhbHNlO1xuIiArCisgICAgICAiICAgIH1wdWJsaWMgYm9vbGVhbiBmbGFnMigpIHtcbiIgKworICAgICAgIiAgICAgICAgcmV0dXJuIGZhbHNlO1xuIiArCisgICAgICAiICAgIH1wdWJsaWMgYm9vbGVhbiBmbGFnMygpIHtcbiIgKworICAgICAgIiAgICAgICAgcmV0dXJuIGZhbHNlO1xuIiArCisgICAgICAiICAgIH1wdWJsaWMgYm9vbGVhbiBmbGFnNCgpIHtcbiIgKworICAgICAgIiAgICAgICAgcmV0dXJuIGZhbHNlO1xuIiArCisgICAgICAiICAgIH19XG4iICsKKyAgICAgICJ9IiwKKworICAgICAgInB1YmxpYyBlbnVtIFdyYXBwaW5nIHtcbiIgKworICAgICAgIiAgICBXUkFQUElORyB7XG4iICsKKyAgICAgICIgICAgICAgIHB1YmxpYyBib29sZWFuIGZsYWcxKCkge1xuIiArCisgICAgICAiICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuIiArCisgICAgICAiICAgICAgICB9XG4iICsKKyAgICAgICJcbiIgKworICAgICAgIlxuIiArCisgICAgICAiICAgICAgICBwdWJsaWMgYm9vbGVhbiBmbGFnMigpIHtcbiIgKworICAgICAgIiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiIgKworICAgICAgIiAgICAgICAgfVxuIiArCisgICAgICAiXG4iICsKKyAgICAgICJcbiIgKworICAgICAgIiAgICAgICAgcHVibGljIGJvb2xlYW4gZmxhZzMoKSB7XG4iICsKKyAgICAgICIgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4iICsKKyAgICAgICIgICAgICAgIH1cbiIgKworICAgICAgIlxuIiArCisgICAgICAiXG4iICsKKyAgICAgICIgICAgICAgIHB1YmxpYyBib29sZWFuIGZsYWc0KCkge1xuIiArCisgICAgICAiICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuIiArCisgICAgICAiICAgICAgICB9XG4iICsKKyAgICAgICIgICAgfVxuIiArCisgICAgICAifSIKKyAgICApOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEluaXRpYWxpemF0aW9uQmxvY2tBbmRJbm5lckNsYXNzKCkgeworICAgIC8vIEluc3BpcmVkIGJ5IElERUEtMjExOTEKKyAgICBnZXRTZXR0aW5ncygpLkJMQU5LX0xJTkVTX0FST1VORF9DTEFTUyA9IDM7CisKKyAgICBkb1RleHRUZXN0KAorICAgICAgInB1YmxpYyBjbGFzcyBGb3JtYXR0aW5nVGVzdCB7XG4iICsKKyAgICAgICIgICAge1xuIiArCisgICAgICAiICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oXCJcIik7XG4iICsKKyAgICAgICIgICAgfVxuIiArCisgICAgICAiICAgIGNsYXNzIE15SW5uZXJDbGFzczEge1xuIiArCisgICAgICAiICAgIH1cbiIgKworICAgICAgIiAgICB7XG4iICsKKyAgICAgICIgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihcIlwiKTtcbiIgKworICAgICAgIiAgICB9XG4iICsKKyAgICAgICIgICAgc3RhdGljIHtcbiIgKworICAgICAgIiAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKFwiXCIpO1xuIiArCisgICAgICAiICAgIH1cbiIgKworICAgICAgIiAgICBjbGFzcyBNeUlubmVyQ2xhc3MyIHtcbiIgKworICAgICAgIiAgICB9XG4iICsKKyAgICAgICIgICAgc3RhdGljIHtcbiIgKworICAgICAgIiAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKFwiXCIpO1xuIiArCisgICAgICAiICAgIH1cbiIgKworICAgICAgIn0iLAorCisgICAgICAicHVibGljIGNsYXNzIEZvcm1hdHRpbmdUZXN0IHtcbiIgKworICAgICAgIiAgICB7XG4iICsKKyAgICAgICIgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihcIlwiKTtcbiIgKworICAgICAgIiAgICB9XG4iICsKKyAgICAgICJcbiIgKworICAgICAgIlxuIiArCisgICAgICAiXG4iICsKKyAgICAgICIgICAgY2xhc3MgTXlJbm5lckNsYXNzMSB7XG4iICsKKyAgICAgICIgICAgfVxuIiArCisgICAgICAiXG4iICsKKyAgICAgICJcbiIgKworICAgICAgIlxuIiArCisgICAgICAiICAgIHtcbiIgKworICAgICAgIiAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKFwiXCIpO1xuIiArCisgICAgICAiICAgIH1cbiIgKworICAgICAgIlxuIiArCisgICAgICAiICAgIHN0YXRpYyB7XG4iICsKKyAgICAgICIgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihcIlwiKTtcbiIgKworICAgICAgIiAgICB9XG4iICsKKyAgICAgICJcbiIgKworICAgICAgIlxuIiArCisgICAgICAiXG4iICsKKyAgICAgICIgICAgY2xhc3MgTXlJbm5lckNsYXNzMiB7XG4iICsKKyAgICAgICIgICAgfVxuIiArCisgICAgICAiXG4iICsKKyAgICAgICJcbiIgKworICAgICAgIlxuIiArCisgICAgICAiICAgIHN0YXRpYyB7XG4iICsKKyAgICAgICIgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihcIlwiKTtcbiIgKworICAgICAgIiAgICB9XG4iICsKKyAgICAgICJ9IgorICAgICk7CisgIH0KKyAgCisgIHB1YmxpYyB2b2lkIHRlc3RJbm5lckNsYXNzZXMoKSB7CisgICAgLy8gSW5zcGlyZWQgYnkgSURFQS0yMTE5MQorICAgIGdldFNldHRpbmdzKCkuQkxBTktfTElORVNfQVJPVU5EX0NMQVNTID0gMzsKKworICAgIGRvVGV4dFRlc3QoCisgICAgICAicHVibGljIGNsYXNzIEZvcm1hdHRpbmdUZXN0IHtcbiIgKworICAgICAgIiAgICBjbGFzcyBNeUlubmVyQ2xhc3MxIHtcbiIgKworICAgICAgIiAgICB9XG4iICsKKyAgICAgICIgICAgY2xhc3MgTXlJbm5lckNsYXNzMiB7XG4iICsKKyAgICAgICIgICAgfVxuIiArCisgICAgICAiICAgIHN0YXRpYyBjbGFzcyBNeUlubmVyQ2xhc3MzIHtcbiIgKworICAgICAgIiAgICB9XG4iICsKKyAgICAgICIgICAgc3RhdGljIGNsYXNzIE15SW5uZXJDbGFzczQge1xuIiArCisgICAgICAiICAgIH1cbiIgKworICAgICAgIiAgICBjbGFzcyBNeUlubmVyQ2xhc3M1IHtcbiIgKworICAgICAgIiAgICB9XG4iICsKKyAgICAgICJ9IiwKKworICAgICAgInB1YmxpYyBjbGFzcyBGb3JtYXR0aW5nVGVzdCB7XG4iICsKKyAgICAgICIgICAgY2xhc3MgTXlJbm5lckNsYXNzMSB7XG4iICsKKyAgICAgICIgICAgfVxuIiArCisgICAgICAiXG4iICsKKyAgICAgICJcbiIgKworICAgICAgIlxuIiArCisgICAgICAiICAgIGNsYXNzIE15SW5uZXJDbGFzczIge1xuIiArCisgICAgICAiICAgIH1cbiIgKworICAgICAgIlxuIiArCisgICAgICAiXG4iICsKKyAgICAgICJcbiIgKworICAgICAgIiAgICBzdGF0aWMgY2xhc3MgTXlJbm5lckNsYXNzMyB7XG4iICsKKyAgICAgICIgICAgfVxuIiArCisgICAgICAiXG4iICsKKyAgICAgICJcbiIgKworICAgICAgIlxuIiArCisgICAgICAiICAgIHN0YXRpYyBjbGFzcyBNeUlubmVyQ2xhc3M0IHtcbiIgKworICAgICAgIiAgICB9XG4iICsKKyAgICAgICJcbiIgKworICAgICAgIlxuIiArCisgICAgICAiXG4iICsKKyAgICAgICIgICAgY2xhc3MgTXlJbm5lckNsYXNzNSB7XG4iICsKKyAgICAgICIgICAgfVxuIiArCisgICAgICAifSIKKyAgICApOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFRvcExldmVsQ2xhc3NlcygpIHsKKyAgICAvLyBJbnNwaXJlZCBieSBJREVBLTIxMTkxCisgICAgZ2V0U2V0dGluZ3MoKS5CTEFOS19MSU5FU19BUk9VTkRfQ0xBU1MgPSAzOworCisgICAgZG9UZXh0VGVzdCgKKyAgICAgICJjbGFzcyBDbGFzczEge1xuIiArCisgICAgICAifVxuIiArCisgICAgICAicHVibGljIGNsYXNzIENsYXNzMiB7XG4iICsKKyAgICAgICJ9XG4iICsKKyAgICAgICJjbGFzcyBDbGFzczMge1xuIiArCisgICAgICAifVxuIiArCisgICAgICAiY2xhc3MgQ2xhc3M0IHtcbiIgKworICAgICAgIn0iLAorCisgICAgICAiY2xhc3MgQ2xhc3MxIHtcbiIgKworICAgICAgIn1cbiIgKworICAgICAgIlxuIiArCisgICAgICAiXG4iICsKKyAgICAgICJcbiIgKworICAgICAgInB1YmxpYyBjbGFzcyBDbGFzczIge1xuIiArCisgICAgICAifVxuIiArCisgICAgICAiXG4iICsKKyAgICAgICJcbiIgKworICAgICAgIlxuIiArCisgICAgICAiY2xhc3MgQ2xhc3MzIHtcbiIgKworICAgICAgIn1cbiIgKworICAgICAgIlxuIiArCisgICAgICAiXG4iICsKKyAgICAgICJcbiIgKworICAgICAgImNsYXNzIENsYXNzNCB7XG4iICsKKyAgICAgICJ9IgorICAgICk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0QmxhbmtMaW5lc0JldHdlZW5BYnN0cmFjdE1ldGhvZHMoKSB7CisgICAgLy8gSW5zcGlyZWQgYnkgSURFQS01NDY2OAorICAgIGdldFNldHRpbmdzKCkuQkxBTktfTElORVNfQVJPVU5EX01FVEhPRF9JTl9JTlRFUkZBQ0UgPSAwOworICAgIGdldFNldHRpbmdzKCkuQkxBTktfTElORVNfQVJPVU5EX01FVEhPRCA9IDE7CisKKyAgICBkb1RleHRUZXN0KAorICAgICAgImFic3RyYWN0IGNsYXNzIFRlc3Qge1xuIiArCisgICAgICAiICAgIHZvaWQgdGVzdDEoKSB7XG4iICsKKyAgICAgICIgICAgfVxuIiArCisgICAgICAiICAgIGFic3RyYWN0IHZvaWQgdGVzdDIoKTtcbiIgKworICAgICAgIiAgICB2b2lkIHRlc3QzKCkge1xuIiArCisgICAgICAiICAgIH1cbiIgKworICAgICAgIiAgICB2b2lkIHRlc3Q0KCkge1xuIiArCisgICAgICAiICAgIH1cbiIgKworICAgICAgIiAgICBhYnN0cmFjdCB2b2lkIHRlc3Q1KCk7XG4iICsKKyAgICAgICIgICAgYWJzdHJhY3Qgdm9pZCB0ZXN0NigpO1xuIiArCisgICAgICAifSIsCisKKyAgICAgICJhYnN0cmFjdCBjbGFzcyBUZXN0IHtcbiIgKworICAgICAgIiAgICB2b2lkIHRlc3QxKCkge1xuIiArCisgICAgICAiICAgIH1cbiIgKworICAgICAgIlxuIiArCisgICAgICAiICAgIGFic3RyYWN0IHZvaWQgdGVzdDIoKTtcbiIgKworICAgICAgIlxuIiArCisgICAgICAiICAgIHZvaWQgdGVzdDMoKSB7XG4iICsKKyAgICAgICIgICAgfVxuIiArCisgICAgICAiXG4iICsKKyAgICAgICIgICAgdm9pZCB0ZXN0NCgpIHtcbiIgKworICAgICAgIiAgICB9XG4iICsKKyAgICAgICJcbiIgKworICAgICAgIiAgICBhYnN0cmFjdCB2b2lkIHRlc3Q1KCk7XG4iICsKKyAgICAgICIgICAgYWJzdHJhY3Qgdm9pZCB0ZXN0NigpO1xuIiArCisgICAgICAifSIKKyAgICApOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEFyb3VuZENsYXNzSGVhZGVyKCkgeworICAgIC8vIEluc3BpcmVkIGJ5IElERUEtNTQ3NDYKKyAgICBnZXRTZXR0aW5ncygpLkJMQU5LX0xJTkVTX0FGVEVSX0NMQVNTX0hFQURFUiA9IDI7CisgICAgZ2V0U2V0dGluZ3MoKS5CTEFOS19MSU5FU19BRlRFUl9BTk9OWU1PVVNfQ0xBU1NfSEVBREVSID0gMTsKKyAgICBkb1RleHRUZXN0KAorICAgICAgInB1YmxpYyBjbGFzcyBGb3JtYXR0aW5nVGVzdCB7XG4iICsKKyAgICAgICIgICAgcHVibGljIHZvaWQgZm9vKCkge1xuIiArCisgICAgICAiICAgICAgICBPYmplY3QgYnV6eiA9IG5ldyBPYmplY3QoKSB7XG4iICsKKyAgICAgICIgICAgICAgICAgICBPYmplY3QgdGVzdCA9IG5ldyBPYmplY3QoKTtcbiIgKworICAgICAgIiAgICAgICAgfTtcbiIgKworICAgICAgIiAgICB9XG4iICsKKyAgICAgICJ9IiwKKworICAgICAgInB1YmxpYyBjbGFzcyBGb3JtYXR0aW5nVGVzdCB7XG4iICsKKyAgICAgICJcbiIgKworICAgICAgIlxuIiArCisgICAgICAiICAgIHB1YmxpYyB2b2lkIGZvbygpIHtcbiIgKworICAgICAgIiAgICAgICAgT2JqZWN0IGJ1enogPSBuZXcgT2JqZWN0KCkge1xuIiArCisgICAgICAiXG4iICsKKyAgICAgICIgICAgICAgICAgICBPYmplY3QgdGVzdCA9IG5ldyBPYmplY3QoKTtcbiIgKworICAgICAgIiAgICAgICAgfTtcbiIgKworICAgICAgIiAgICB9XG4iICsKKyAgICAgICJ9IgorICAgICk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0QWZ0ZXJBbm9ueW1vdXNDbGFzc1doZXJlQ29kZUJsb2NrU3RhcnRzV2l0aENvbW1lbnQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAvLyBJbnNwaXJlZCBieSBJREVBLTY2NTgzCisgICAgZ2V0U2V0dGluZ3MoKS5CTEFOS19MSU5FU19BRlRFUl9BTk9OWU1PVVNfQ0xBU1NfSEVBREVSID0gMDsKKyAgICAKKyAgICBTdHJpbmcgdGV4dFdpdGhXaGl0ZVNwYWNlQmV0d2VlbkNvbW1lbnRBbmRMYnJhY2UgPSAKKyAgICAgICJPYmplY3Qgb2JqZWN0ID0gbmV3IE9iamVjdCgpIHsgLy8gY29tbWVudCBicmVha3MgXCJibGFuayBsaW5lIGFmdGVyIGFub255bW91cyBjbGFzcyBoZWFkZXJcIlxuIiArCisgICAgICAiICAgIEBPdmVycmlkZVxuIiArCisgICAgICAiICAgIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7XG4iICsKKyAgICAgICIgICAgICAgIHJldHVybiBzdXBlci50b1N0cmluZygpO1xuIiArCisgICAgICAiICAgIH1cbiIgKworICAgICAgIn07IjsKKyAgICBkb01ldGhvZFRlc3QodGV4dFdpdGhXaGl0ZVNwYWNlQmV0d2VlbkNvbW1lbnRBbmRMYnJhY2UsIHRleHRXaXRoV2hpdGVTcGFjZUJldHdlZW5Db21tZW50QW5kTGJyYWNlKTsKKworICAgIFN0cmluZyB0ZXh0V2l0aG91dFdoaXRlU3BhY2VCZXR3ZWVuQ29tbWVudEFuZExicmFjZSA9CisgICAgICAiT2JqZWN0IG9iamVjdCA9IG5ldyBPYmplY3QoKSB7Ly8gY29tbWVudCBicmVha3MgXCJibGFuayBsaW5lIGFmdGVyIGFub255bW91cyBjbGFzcyBoZWFkZXJcIlxuIiArCisgICAgICAiICAgIEBPdmVycmlkZVxuIiArCisgICAgICAiICAgIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7XG4iICsKKyAgICAgICIgICAgICAgIHJldHVybiBzdXBlci50b1N0cmluZygpO1xuIiArCisgICAgICAiICAgIH1cbiIgKworICAgICAgIn07IjsKKyAgICBkb01ldGhvZFRlc3QodGV4dFdpdGhvdXRXaGl0ZVNwYWNlQmV0d2VlbkNvbW1lbnRBbmRMYnJhY2UsIHRleHRXaXRob3V0V2hpdGVTcGFjZUJldHdlZW5Db21tZW50QW5kTGJyYWNlKTsKKyAgfQorICAKKyAgcHVibGljIHZvaWQgdGVzdEJlZm9yZU1ldGhvZEJvZHkoKSB7CisgICAgLy8gSW5zcGlyZWQgYnkgSURFQS01NDc0NworICAgIGdldFNldHRpbmdzKCkuQkxBTktfTElORVNfQkVGT1JFX01FVEhPRF9CT0RZID0gMzsKKyAgICBkb1RleHRUZXN0KAorICAgICAgInB1YmxpYyBjbGFzcyBGb3JtYXR0aW5nVGVzdCB7XG4iICsKKyAgICAgICIgICAgcHVibGljIHZvaWQgZm9vKCkge1xuIiArCisgICAgICAiICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oXCJcIik7XG4iICsKKyAgICAgICIgICAgfVxuIiArCisgICAgICAifSIsCisKKyAgICAgICJwdWJsaWMgY2xhc3MgRm9ybWF0dGluZ1Rlc3Qge1xuIiArCisgICAgICAiICAgIHB1YmxpYyB2b2lkIGZvbygpIHtcbiIgKworICAgICAgIlxuIiArCisgICAgICAiXG4iICsKKyAgICAgICJcbiIgKworICAgICAgIiAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKFwiXCIpO1xuIiArCisgICAgICAiICAgIH1cbiIgKworICAgICAgIn0iCisgICAgKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RCZWZvcmVNZXRob2RCb2R5V2l0aENvZGVCbG9ja0luc2lkZSgpIHsKKyAgICAvLyBJbnNwaXJlZCBieSBJREVBLTU0NzQ3CisgICAgZ2V0U2V0dGluZ3MoKS5CTEFOS19MSU5FU19CRUZPUkVfTUVUSE9EX0JPRFkgPSAzOworICAgIGRvVGV4dFRlc3QoCisgICAgICAicHVibGljIGNsYXNzIEZvcm1hdHRpbmdUZXN0IHtcbiIgKworICAgICAgIiAgICBwdWJsaWMgdm9pZCBmb28oKSB7XG4iICsKKyAgICAgICIgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihcIlwiKTtcbiIgKworICAgICAgIiAgICAgICAgdHJ5IHtcbiIgKworICAgICAgIiAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHtcbiIgKworICAgICAgIiAgICAgICAgfVxuIiArCisgICAgICAiICAgIH1cbiIgKworICAgICAgIn0iLAorCisgICAgICAicHVibGljIGNsYXNzIEZvcm1hdHRpbmdUZXN0IHtcbiIgKworICAgICAgIiAgICBwdWJsaWMgdm9pZCBmb28oKSB7XG4iICsKKyAgICAgICJcbiIgKworICAgICAgIlxuIiArCisgICAgICAiXG4iICsKKyAgICAgICIgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihcIlwiKTtcbiIgKworICAgICAgIiAgICAgICAgdHJ5IHtcbiIgKworICAgICAgIiAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHtcbiIgKworICAgICAgIiAgICAgICAgfVxuIiArCisgICAgICAiICAgIH1cbiIgKworICAgICAgIn0iCisgICAgKTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL3BzaS9mb3JtYXR0ZXIvamF2YS9KYXZhRm9ybWF0dGVyQnJhY2VzVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL3BzaS9mb3JtYXR0ZXIvamF2YS9KYXZhRm9ybWF0dGVyQnJhY2VzVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg4OWU1OTEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovcHNpL2Zvcm1hdHRlci9qYXZhL0phdmFGb3JtYXR0ZXJCcmFjZXNUZXN0LmphdmEKQEAgLTAsMCArMSwxNTggQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwMC0yMDEyIEpldEJyYWlucyBzLnIuby4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCitwYWNrYWdlIGNvbS5pbnRlbGxpai5wc2kuZm9ybWF0dGVyLmphdmE7CisKK2ltcG9ydCBjb20uaW50ZWxsaWoucHNpLmNvZGVTdHlsZS5Db21tb25Db2RlU3R5bGVTZXR0aW5nczsKKworLyoqCisgKiBJcyBpbnRlbmRlZCB0byBob2xkIHNwZWNpZmljIGphdmEgZm9ybWF0dGluZyB0ZXN0cyBmb3IgJ2JyYWNlcyBwbGFjZW1lbnQnIHNldHRpbmdzICgKKyAqIDxjb2RlPlByb2plY3QgU2V0dGluZ3MgLSBDb2RlIFN0eWxlIC0gQWxpZ25tZW50IGFuZCBCcmFjZXM8L2NvZGU+KS4KKyAqCisgKiBAYXV0aG9yIERlbmlzIFpoZGFub3YKKyAqIEBzaW5jZSBBcHIgMjcsIDIwMTAgNjozOToyNCBQTQorICovCitwdWJsaWMgY2xhc3MgSmF2YUZvcm1hdHRlckJyYWNlc1Rlc3QgZXh0ZW5kcyBBYnN0cmFjdEphdmFGb3JtYXR0ZXJUZXN0IHsKKworICBwdWJsaWMgdm9pZCB0ZXN0QnJhY2VQb3NpdGlvbmluZ0F0UHJldmlvdXNMaW5lKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgLy8gSW5zcGlyZWQgYnkgSURFQURFVi0xODUyOQorICAgIGRvVGV4dFRlc3QoCisgICAgICAicHVibGljIGNsYXNzIFRlc3RCZWRcbiIgKworICAgICAgIntcbiIgKworICAgICAgIiAgICBwdWJsaWMgdm9pZCBtZXRob2RPbmUoKVxuIiArCisgICAgICAiICAgIHtcbiIgKworICAgICAgIiAgICAgICAgLy9jb2RlLi4uXG4iICsKKyAgICAgICIgICAgfVxuIiArCisgICAgICAiXG4iICsKKyAgICAgICIgICAgQFNvbWVBbm5vdGF0aW9uXG4iICsKKyAgICAgICIgICAgICAgICAgICA8VCBleHRlbmRzIENvbXBhcmFibGU+IHZvaWQgbWV0aG9kVHdvKFQgaXRlbSkge1xuIiArCisgICAgICAiICAgICAgICAvL2NvZGUuLi5cbiIgKworICAgICAgIiAgICB9XG4iICsKKyAgICAgICJcbiIgKworICAgICAgIiAgICBwcml2YXRlIHZvaWQgbWV0aG9kVGhyZWUoU3RyaW5nIHMpIHtcbiIgKworICAgICAgIiAgICAgICAgLy9jb2RlLi4uXG4iICsKKyAgICAgICIgICAgfVxuIiArCisgICAgICAifSIsCisKKyAgICAgICJwdWJsaWMgY2xhc3MgVGVzdEJlZCB7XG4iICsKKyAgICAgICIgICAgcHVibGljIHZvaWQgbWV0aG9kT25lKCkge1xuIiArCisgICAgICAiICAgICAgICAvL2NvZGUuLi5cbiIgKworICAgICAgIiAgICB9XG4iICsKKyAgICAgICJcbiIgKworICAgICAgIiAgICBAU29tZUFubm90YXRpb25cbiIgKworICAgICAgIiAgICA8VCBleHRlbmRzIENvbXBhcmFibGU+IHZvaWQgbWV0aG9kVHdvKFQgaXRlbSkge1xuIiArCisgICAgICAiICAgICAgICAvL2NvZGUuLi5cbiIgKworICAgICAgIiAgICB9XG4iICsKKyAgICAgICJcbiIgKworICAgICAgIiAgICBwcml2YXRlIHZvaWQgbWV0aG9kVGhyZWUoU3RyaW5nIHMpIHtcbiIgKworICAgICAgIiAgICAgICAgLy9jb2RlLi4uXG4iICsKKyAgICAgICIgICAgfVxuIiArCisgICAgICAifSIpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFNpbXBsZUJsb2NrSW5PbmVMaW5lc0FuZEZvcmNlQnJhY2VzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgLy8gSW5zcGlyZWQgYnkgSURFQS0xOTMyOAorICAgIGdldFNldHRpbmdzKCkuS0VFUF9TSU1QTEVfQkxPQ0tTX0lOX09ORV9MSU5FID0gdHJ1ZTsKKyAgICBnZXRTZXR0aW5ncygpLklGX0JSQUNFX0ZPUkNFID0gQ29tbW9uQ29kZVN0eWxlU2V0dGluZ3MuRk9SQ0VfQlJBQ0VTX0FMV0FZUzsKKworICAgIGRvTWV0aG9kVGVzdCgKKyAgICAgICJpZiAoeCA+IHkpIFN5c3RlbS5vdXQucHJpbnRsbihcImZvbyFcIik7IiwKKworICAgICAgImlmICh4ID4geSkgeyBTeXN0ZW0ub3V0LnByaW50bG4oXCJmb28hXCIpOyB9IgorICAgICk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0RW5mb3JjaW5nQnJhY2VzRm9yRXhwcmVzc2lvbkVuZGluZ1dpdGhMaW5lQ29tbWVudCgpIHRocm93cyBFeGNlcHRpb24geworICAgIC8vIEluc3BpcmVkIGJ5IElERUEtNTc5MzYKKyAgICBnZXRTZXR0aW5ncygpLklGX0JSQUNFX0ZPUkNFID0gQ29tbW9uQ29kZVN0eWxlU2V0dGluZ3MuRk9SQ0VfQlJBQ0VTX0FMV0FZUzsKKworICAgIGRvTWV0aG9kVGVzdCgKKyAgICAgICJpZiAodHJ1ZSkgaSA9IDE7IC8vIENvb2wgaWZcbiIgKworICAgICAgImVsc2UgaSA9IDI7IiwKKworICAgICAgImlmICh0cnVlKSB7XG4iICsKKyAgICAgICIgICAgaSA9IDE7IC8vIENvb2wgaWZcbiIgKworICAgICAgIn0gZWxzZSB7XG4iICsKKyAgICAgICIgICAgaSA9IDI7XG4iICsKKyAgICAgICJ9IgorICAgICk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0TW92ZUJyYWNlT25OZXh0TGluZUZvckFubm90YXRlZE1ldGhvZCgpIHRocm93cyBFeGNlcHRpb24geworICAgIC8vIEluc3BpcmVkIGJ5IElERUEtNTkzMzYKKyAgICBnZXRTZXR0aW5ncygpLk1FVEhPRF9CUkFDRV9TVFlMRSA9IENvbW1vbkNvZGVTdHlsZVNldHRpbmdzLk5FWFRfTElORTsKKyAgICBnZXRTZXR0aW5ncygpLktFRVBfU0lNUExFX01FVEhPRFNfSU5fT05FX0xJTkUgPSB0cnVlOworCisgICAgZG9DbGFzc1Rlc3QoCisgICAgICAiQE92ZXJyaWRlXG4iICsKKyAgICAgICJwdWJsaWMgaW50IGhhc2hDb2RlKCkge1xuIiArCisgICAgICAifVxuIiArCisgICAgICAiQERlcHJlY2F0ZWRcbiIgKworICAgICAgInZvaWQgZm9vKCkge1xuIiArCisgICAgICAifSIsCisgICAgICAiQE92ZXJyaWRlXG4iICsKKyAgICAgICJwdWJsaWMgaW50IGhhc2hDb2RlKClcbiIgKworICAgICAgIntcbiIgKworICAgICAgIn1cbiIgKworICAgICAgIlxuIiArCisgICAgICAiQERlcHJlY2F0ZWRcbiIgKworICAgICAgInZvaWQgZm9vKClcbiIgKworICAgICAgIntcbiIgKworICAgICAgIn0iCisgICAgKTsKKyAgfQorICAKKyAgcHVibGljIHZvaWQgdGVzdEtlZXBTaW1wbGVDbGFzc2VzQW5kSW50ZXJmYWNlc0luT25lTGluZSgpIHsKKyAgICAvLyBJbnNwaXJlZCBieSBJREVBLTY1NDMzCisgICAgZ2V0U2V0dGluZ3MoKS5LRUVQX1NJTVBMRV9DTEFTU0VTX0lOX09ORV9MSU5FID0gdHJ1ZTsKKyAgICAKKyAgICBTdHJpbmdbXSB0ZXN0cyA9IHsKKyAgICAgICJjbGFzcyBUZXN0IHt9IiwKKyAgICAgIAorICAgICAgImludGVyZmFjZSBUZXN0IHt9IiwKKyAgICAgIAorICAgICAgImNsYXNzIFRlc3Qge1xuIiArCisgICAgICAiICAgIHZvaWQgdGVzdCgpIHtcbiIgKworICAgICAgIiAgICAgICAgbmV3IE9iamVjdCgpIHt9O1xuIiArCisgICAgICAiICAgIH1cbiIgKworICAgICAgIn0iLAorICAgICAgCisgICAgICAiY2xhc3MgVGVzdCB7XG4iICsKKyAgICAgICIgICAgdm9pZCB0ZXN0KCkge1xuIiArCisgICAgICAiICAgICAgICBiaW5kKG5ldyBUeXBlTGl0ZXJhbDxNeVR5cGU+KCkge30pLnRvUHJvdmlkZXIoTXlQcm92aWRlci5jbGFzcyk7XG4iICsKKyAgICAgICIgICAgfVxuIiArCisgICAgICAifSIKKyAgICB9OworCisgICAgZm9yIChTdHJpbmcgdGVzdCA6IHRlc3RzKSB7CisgICAgICBkb1RleHRUZXN0KHRlc3QsIHRlc3QpOworICAgIH0KKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RLZWVwU2ltcGxlQ2xhc3Nlc0luT25lTGluZUFuZExlZnRCcmFjZU9uTmV4dExpbmUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAvLyBJbnNwaXJlZCBieSBJREVBLTc1MDUzLgorICAgIGdldFNldHRpbmdzKCkuS0VFUF9TSU1QTEVfQ0xBU1NFU19JTl9PTkVfTElORSA9IHRydWU7CisgICAgZ2V0U2V0dGluZ3MoKS5DTEFTU19CUkFDRV9TVFlMRSA9IENvbW1vbkNvZGVTdHlsZVNldHRpbmdzLk5FWFRfTElORTsKKyAgICAKKyAgICBTdHJpbmcgdGV4dCA9CisgICAgICAiY2xhc3MgVGVzdFxuIiArCisgICAgICAie1xuIiArCisgICAgICAiICAgIHZvaWQgZm9vKCkge1xuIiArCisgICAgICAiICAgICAgICBiaW5kKG5ldyBUeXBlTGl0ZXJhbDxNeVR5cGU+KCkge30pLnRvUHJvdmlkZXIoTXlQcm92aWRlci5jbGFzcyk7XG4iICsKKyAgICAgICIgICAgfVxuIiArCisgICAgICAifSI7CisgICAgZG9UZXh0VGVzdCh0ZXh0LCB0ZXh0KTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL3BzaS9mb3JtYXR0ZXIvamF2YS9KYXZhRm9ybWF0dGVySW5FZGl0b3JUZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovcHNpL2Zvcm1hdHRlci9qYXZhL0phdmFGb3JtYXR0ZXJJbkVkaXRvclRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZTNlODhlCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL3BzaS9mb3JtYXR0ZXIvamF2YS9KYXZhRm9ybWF0dGVySW5FZGl0b3JUZXN0LmphdmEKQEAgLTAsMCArMSw1NiBAQAorLyoKKyAqIENvcHlyaWdodCAyMDAwLTIwMTEgSmV0QnJhaW5zIHMuci5vLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KK3BhY2thZ2UgY29tLmludGVsbGlqLnBzaS5mb3JtYXR0ZXIuamF2YTsKKworaW1wb3J0IGNvbS5pbnRlbGxpai5sYW5nLmphdmEuSmF2YUxhbmd1YWdlOworaW1wb3J0IGNvbS5pbnRlbGxpai5wc2kuY29kZVN0eWxlLkNvZGVTdHlsZU1hbmFnZXI7CitpbXBvcnQgY29tLmludGVsbGlqLnRlc3RGcmFtZXdvcmsuTGlnaHRQbGF0Zm9ybUNvZGVJbnNpZ2h0VGVzdENhc2U7CitpbXBvcnQgb3JnLmpldGJyYWlucy5hbm5vdGF0aW9ucy5Ob3ROdWxsOworCitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKKworLyoqCisgKiBJcyBpbnRlbmRlZCB0byB0ZXN0IGZvcm1hdHRpbmcgaW4gZWRpdG9yIGJlaGF2aW9yLCBpLmUuIGNoZWNrIGhvdyBmb3JtYXR0aW5nIGFmZmVjdHMgdGhpbmdzIGxpa2UgY2FyZXQgcG9zaXRpb24sIHNlbGVjdGlvbiBldGMuIAorICogCisgKiBAYXV0aG9yIERlbmlzIFpoZGFub3YKKyAqIEBzaW5jZSA2LzEvMTEgNjoxNyBQTQorICovCitwdWJsaWMgY2xhc3MgSmF2YUZvcm1hdHRlckluRWRpdG9yVGVzdCBleHRlbmRzIExpZ2h0UGxhdGZvcm1Db2RlSW5zaWdodFRlc3RDYXNlIHsKKyAgCisgIHB1YmxpYyB2b2lkIHRlc3RDYXJldFBvc2l0aW9uT25Mb25nTGluZVdyYXBwaW5nKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKKyAgICAvLyBJbnNwaXJlZCBieSBJREVBLTcwMjQyCisgICAgZ2V0Q3VycmVudENvZGVTdHlsZVNldHRpbmdzKCkuZ2V0Q29tbW9uU2V0dGluZ3MoSmF2YUxhbmd1YWdlLklOU1RBTkNFKS5XUkFQX0xPTkdfTElORVMgPSB0cnVlOworICAgIGdldEN1cnJlbnRDb2RlU3R5bGVTZXR0aW5ncygpLlJJR0hUX01BUkdJTiA9IDQwOworICAgIGRvVGVzdCgKKyAgICAgICJpbXBvcnQgc3RhdGljIGphdmEudXRpbC5jb25jdXJyZW50LmF0b21pYy5BdG9taWNJbnRlZ2VyLio7XG4iICsKKyAgICAgICJcbiIgKworICAgICAgImNsYXNzIDxjYXJldD5UZXN0IHtcbiIgKworICAgICAgIn0iLAorICAgICAgCisgICAgICAiaW1wb3J0IHN0YXRpYyBqYXZhLnV0aWwuY29uY3VycmVudFxuIiArCisgICAgICAiICAgICAgICAuYXRvbWljLkF0b21pY0ludGVnZXIuKjtcbiIgKworICAgICAgIlxuIiArCisgICAgICAiY2xhc3MgPGNhcmV0PlRlc3Qge1xuIiArCisgICAgICAifSIKKyAgICApOworICB9CisgIAorICBwdWJsaWMgdm9pZCBkb1Rlc3QoQE5vdE51bGwgU3RyaW5nIGJlZm9yZSwgQE5vdE51bGwgU3RyaW5nIGFmdGVyKSB0aHJvd3MgSU9FeGNlcHRpb24geworICAgIGNvbmZpZ3VyZUZyb21GaWxlVGV4dChnZXRUZXN0TmFtZShmYWxzZSkgKyAiLmphdmEiLCBiZWZvcmUpOworICAgIENvZGVTdHlsZU1hbmFnZXIuZ2V0SW5zdGFuY2UoZ2V0UHJvamVjdCgpKS5yZWZvcm1hdFRleHQoZ2V0RmlsZSgpLCAwLCBnZXRFZGl0b3IoKS5nZXREb2N1bWVudCgpLmdldFRleHRMZW5ndGgoKSk7CisgICAgY2hlY2tSZXN1bHRCeVRleHQoYWZ0ZXIpOworICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovcHNpL2Zvcm1hdHRlci9qYXZhL0phdmFGb3JtYXR0ZXJJbmRlbnRhdGlvblRlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9wc2kvZm9ybWF0dGVyL2phdmEvSmF2YUZvcm1hdHRlckluZGVudGF0aW9uVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI2MTY4OWIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovcHNpL2Zvcm1hdHRlci9qYXZhL0phdmFGb3JtYXR0ZXJJbmRlbnRhdGlvblRlc3QuamF2YQpAQCAtMCwwICsxLDUzOSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDAwLTIwMTIgSmV0QnJhaW5zIHMuci5vLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KK3BhY2thZ2UgY29tLmludGVsbGlqLnBzaS5mb3JtYXR0ZXIuamF2YTsKKworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLmZpbGVUeXBlcy5TdGRGaWxlVHlwZXM7CitpbXBvcnQgY29tLmludGVsbGlqLnBzaS5jb2RlU3R5bGUuQ29tbW9uQ29kZVN0eWxlU2V0dGluZ3M7CitpbXBvcnQgY29tLmludGVsbGlqLnV0aWwuSW5jb3JyZWN0T3BlcmF0aW9uRXhjZXB0aW9uOworCisvKioKKyAqIElzIGludGVuZGVkIHRvIGhvbGQgamF2YSBmb3JtYXR0aW5nIGluZGVudGF0aW9uLXNwZWNpZmljIHRlc3RzLgorICoKKyAqIEBhdXRob3IgRGVuaXMgWmhkYW5vdgorICogQHNpbmNlIEFwciAyNywgMjAxMCA2OjI5OjI1IFBNCisgKi8KK3B1YmxpYyBjbGFzcyBKYXZhRm9ybWF0dGVySW5kZW50YXRpb25UZXN0IGV4dGVuZHMgQWJzdHJhY3RKYXZhRm9ybWF0dGVyVGVzdCB7CisKKyAgcHVibGljIHZvaWQgdGVzdENsYXNzSW5pdGlhbGl6YXRpb25CbG9ja0luZGVudGF0aW9uKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgLy8gQ2hlY2tpbmcgdGhhdCBpbml0aWFsaXphdGlvbiBibG9jayBib2R5IGlzIGNvcnJlY3RseSBpbmRlbnRlZC4KKyAgICBkb01ldGhvZFRlc3QoCisgICAgICAiY2hlY2tpbmcobmV3IEV4cGVjdGF0aW9ucygpIHt7XG4iICsKKyAgICAgICJvbmUodGFiQ29uZmlndXJhdGlvbikuYWRkRmlsdGVyKHdpdGgoZXF1YWwoUFJPUEVSVFkpKSwgd2l0aChhTGlzdENvbnRhaW5pbmcoXCJhLWNcIikpKTtcbiIgKworICAgICAgIn19KTsiLAorICAgICAgImNoZWNraW5nKG5ldyBFeHBlY3RhdGlvbnMoKSB7e1xuIiArCisgICAgICAiICAgIG9uZSh0YWJDb25maWd1cmF0aW9uKS5hZGRGaWx0ZXIod2l0aChlcXVhbChQUk9QRVJUWSkpLCB3aXRoKGFMaXN0Q29udGFpbmluZyhcImEtY1wiKSkpO1xuIiArCisgICAgICAifX0pOyIKKyAgICApOworCisgICAgLy8gQ2hlY2tpbmcgdGhhdCBjbG9zaW5nIGN1cmx5IGJyYWNlIG9mIGluaXRpYWxpemF0aW9uIGJsb2NrIHRoYXQgaXMgbm90IHRoZSBmaXJzdCBibG9jayBvbiBhIGxpbmUgaXMgY29ycmVjdGx5IGluZGVudGVkLgorICAgIGRvVGV4dFRlc3QoImNsYXNzIENsYXNzIHtcbiIgKyAiICAgIHByaXZhdGUgVHlwZSBmaWVsZDsge1xuIiArICIgICAgfVxuIiArICJ9IiwKKyAgICAgICAgICAgICAgICJjbGFzcyBDbGFzcyB7XG4iICsgIiAgICBwcml2YXRlIFR5cGUgZmllbGQ7IHtcbiIgKyAiICAgIH1cbiIgKyAifSIpOworICAgIGRvVGV4dFRlc3QoCisgICAgICAiY2xhc3MgVCB7XG4iICsKKyAgICAgICIgICAgcHJpdmF0ZSBmaW5hbCBEZWNpbWFsRm9ybWF0IGZtdCA9IG5ldyBEZWNpbWFsRm9ybWF0KCk7IHtcbiIgKworICAgICAgIiAgICAgICAgZm10LnNldEdyb3VwaW5nVXNlZChmYWxzZSk7XG4iICsKKyAgICAgICIgICAgICAgIGZtdC5zZXREZWNpbWFsRm9ybWF0U3ltYm9scyhuZXcgRGVjaW1hbEZvcm1hdFN5bWJvbHMoTG9jYWxlLlVTKSk7XG4iICsKKyAgICAgICIgICAgfVxuIiArCisgICAgICAifSIsCisgICAgICAiY2xhc3MgVCB7XG4iICsKKyAgICAgICIgICAgcHJpdmF0ZSBmaW5hbCBEZWNpbWFsRm9ybWF0IGZtdCA9IG5ldyBEZWNpbWFsRm9ybWF0KCk7IHtcbiIgKworICAgICAgIiAgICAgICAgZm10LnNldEdyb3VwaW5nVXNlZChmYWxzZSk7XG4iICsKKyAgICAgICIgICAgICAgIGZtdC5zZXREZWNpbWFsRm9ybWF0U3ltYm9scyhuZXcgRGVjaW1hbEZvcm1hdFN5bWJvbHMoTG9jYWxlLlVTKSk7XG4iICsKKyAgICAgICIgICAgfVxuIiArCisgICAgICAifSIKKyAgICApOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdE5lc3RlZE1ldGhvZHNJbmRlbnRhdGlvbigpIHRocm93cyBFeGNlcHRpb24geworICAgIC8vIEluc3BpcmVkIGJ5IElERUEtNDM5NjIKKworICAgIGdldFNldHRpbmdzKCkuZ2V0Um9vdFNldHRpbmdzKCkuZ2V0SW5kZW50T3B0aW9ucyhTdGRGaWxlVHlwZXMuSkFWQSkuQ09OVElOVUFUSU9OX0lOREVOVF9TSVpFID0gNDsKKworICAgIGRvTWV0aG9kVGVzdCgKKyAgICAgICJCaWdEZWNpbWFsLk9ORVxuIiArCisgICAgICAiICAgICAgLmFkZChCaWdEZWNpbWFsLk9ORVxuIiArCisgICAgICAiICAgICAgICAuYWRkKEJpZ0RlY2ltYWwuT05FXG4iICsKKyAgICAgICIgICAgICAgIC5hZGQoQmlnRGVjaW1hbC5PTkVcbiIgKworICAgICAgIiAgICAgICAgLmFkZChCaWdEZWNpbWFsLk9ORVxuIiArCisgICAgICAiLmFkZChCaWdEZWNpbWFsLk9ORVxuIiArCisgICAgICAiIC5hZGQoQmlnRGVjaW1hbC5PTkVcbiIgKworICAgICAgIiAgLmFkZChCaWdEZWNpbWFsLk9ORVxuIiArCisgICAgICAiIC5hZGQoQmlnRGVjaW1hbC5PTkVcbiIgKworICAgICAgIiAgICAgICAgLmFkZChCaWdEZWNpbWFsLk9ORSkpKSkpKSkpKTsiLAorICAgICAgIkJpZ0RlY2ltYWwuT05FXG4iICsKKyAgICAgICIgICAgLmFkZChCaWdEZWNpbWFsLk9ORVxuIiArCisgICAgICAiICAgICAgICAuYWRkKEJpZ0RlY2ltYWwuT05FXG4iICsKKyAgICAgICIgICAgICAgICAgICAuYWRkKEJpZ0RlY2ltYWwuT05FXG4iICsKKyAgICAgICIgICAgICAgICAgICAgICAgLmFkZChCaWdEZWNpbWFsLk9ORVxuIiArCisgICAgICAiICAgICAgICAgICAgICAgICAgICAuYWRkKEJpZ0RlY2ltYWwuT05FXG4iICsKKyAgICAgICIgICAgICAgICAgICAgICAgICAgICAgICAuYWRkKEJpZ0RlY2ltYWwuT05FXG4iICsKKyAgICAgICIgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmFkZChCaWdEZWNpbWFsLk9ORVxuIiArCisgICAgICAiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuYWRkKEJpZ0RlY2ltYWwuT05FXG4iICsKKyAgICAgICIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuYWRkKEJpZ0RlY2ltYWwuT05FKSkpKSkpKSkpOyIKKyAgICApOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFNoaWZ0ZWRDaGFpbmVkSWZFbHNlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZ2V0U2V0dGluZ3MoKS5CUkFDRV9TVFlMRSA9IENvbW1vbkNvZGVTdHlsZVNldHRpbmdzLk5FWFRfTElORV9TSElGVEVEMjsKKyAgICBnZXRTZXR0aW5ncygpLkVMU0VfT05fTkVXX0xJTkUgPSB0cnVlOworICAgIGdldFNldHRpbmdzKCkuZ2V0Um9vdFNldHRpbmdzKCkuZ2V0SW5kZW50T3B0aW9ucyhTdGRGaWxlVHlwZXMuSkFWQSkuSU5ERU5UX1NJWkUgPSA0OworICAgIGRvTWV0aG9kVGVzdCgKKyAgICAgICJsb25nIGEgPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTtcbiIgKworICAgICAgIiAgICBpZiAoYSA9PSAwKXtcbiIgKworICAgICAgIiAgIH1lbHNlIGlmIChhID4gMSl7XG4iICsKKyAgICAgICIgIH1lbHNlIGlmIChhID4gMil7XG4iICsKKyAgICAgICIgfWVsc2UgaWYgKGEgPiAzKXtcbiIgKworICAgICAgIiAgICAgfWVsc2UgaWYgKGEgPiA0KXtcbiIgKworICAgICAgIiAgICAgIH1lbHNlIGlmIChhID4gNSl7XG4iICsKKyAgICAgICIgICAgICAgfWVsc2V7XG4iICsKKyAgICAgICIgICAgICAgIH0iLAorICAgICAgImxvbmcgYSA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpO1xuIiArCisgICAgICAiaWYgKGEgPT0gMClcbiIgKworICAgICAgIiAgICB7XG4iICsKKyAgICAgICIgICAgfVxuIiArCisgICAgICAiZWxzZSBpZiAoYSA+IDEpXG4iICsKKyAgICAgICIgICAge1xuIiArCisgICAgICAiICAgIH1cbiIgKworICAgICAgImVsc2UgaWYgKGEgPiAyKVxuIiArCisgICAgICAiICAgIHtcbiIgKworICAgICAgIiAgICB9XG4iICsKKyAgICAgICJlbHNlIGlmIChhID4gMylcbiIgKworICAgICAgIiAgICB7XG4iICsKKyAgICAgICIgICAgfVxuIiArCisgICAgICAiZWxzZSBpZiAoYSA+IDQpXG4iICsKKyAgICAgICIgICAge1xuIiArCisgICAgICAiICAgIH1cbiIgKworICAgICAgImVsc2UgaWYgKGEgPiA1KVxuIiArCisgICAgICAiICAgIHtcbiIgKworICAgICAgIiAgICB9XG4iICsKKyAgICAgICJlbHNlXG4iICsKKyAgICAgICIgICAge1xuIiArCisgICAgICAiICAgIH0iCisgICAgKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RBbGlnbmVkU3ViQmxvY2tJbmRlbnRhdGlvbigpIHsKKyAgICBnZXRTZXR0aW5ncygpLkFMSUdOX01VTFRJTElORV9QQVJBTUVURVJTX0lOX0NBTExTID0gdHJ1ZTsKKyAgICBnZXRTZXR0aW5ncygpLmdldFJvb3RTZXR0aW5ncygpLmdldEluZGVudE9wdGlvbnMoU3RkRmlsZVR5cGVzLkpBVkEpLkNPTlRJTlVBVElPTl9JTkRFTlRfU0laRSA9IDg7CisKKyAgICAvLyBJbnNwaXJlZCBieSBJREVBLTU0NjcxCisgICAgZG9UZXh0VGVzdCgKKyAgICAgICJjbGFzcyBUZXN0IHtcbiIgKworICAgICAgIiAgICBwdWJsaWMgdm9pZCBmb28oKSB7XG4iICsKKyAgICAgICIgICAgICAgIHRlc3QoMTFcbiIgKworICAgICAgIiAgICAgICAgICAgICAgICAgICAgICsgMTJcbiIgKworICAgICAgIiAgICAgICAgICAgICAgICAgICAgICsgMTMsXG4iICsKKyAgICAgICIgICAgICAgICAgICAgMjFcbiIgKworICAgICAgIiAgICAgICAgICAgICAgICAgICAgICsgMjJcbiIgKworICAgICAgIiAgICAgICAgICAgICAgICAgICAgICsgMjNcbiIgKworICAgICAgIiAgICAgICAgKSIgKworICAgICAgIiAgICB9XG4iICsKKyAgICAgICJ9IiwKKworICAgICAgImNsYXNzIFRlc3Qge1xuIiArCisgICAgICAiICAgIHB1YmxpYyB2b2lkIGZvbygpIHtcbiIgKworICAgICAgIiAgICAgICAgdGVzdCgxMVxuIiArCisgICAgICAiICAgICAgICAgICAgICAgICAgICAgKyAxMlxuIiArCisgICAgICAiICAgICAgICAgICAgICAgICAgICAgKyAxMyxcbiIgKworICAgICAgIiAgICAgICAgICAgICAyMVxuIiArCisgICAgICAiICAgICAgICAgICAgICAgICAgICAgKyAyMlxuIiArCisgICAgICAiICAgICAgICAgICAgICAgICAgICAgKyAyM1xuIiArCisgICAgICAiICAgICAgICApXG4iICsKKyAgICAgICIgICAgfVxuIiArCisgICAgICAifSIKKyAgICApOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEVudW1JbmRlbnRhdGlvbigpIHRocm93cyBJbmNvcnJlY3RPcGVyYXRpb25FeGNlcHRpb24geworICAgIC8vIEluc3BpcmVkIGJ5IElERUFERVYtMjg0MAorICAgIGRvVGV4dFRlc3QoImVudW0gWHl6IHtcbiIgKyAiRk9PLFxuIiArICJCQVIsXG4iICsgIn0iLCAiZW51bSBYeXoge1xuIiArICIgICAgRk9PLFxuIiArICIgICAgQkFSLFxuIiArICJ9Iik7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0Rmlyc3RDb2x1bW5Db21tZW50KCkgdGhyb3dzIEluY29ycmVjdE9wZXJhdGlvbkV4Y2VwdGlvbiB7CisgICAgLy8gSW5zcGlyZWQgYnkgSURFQURFVi0xNDExNgorICAgIGdldFNldHRpbmdzKCkuS0VFUF9GSVJTVF9DT0xVTU5fQ09NTUVOVCA9IGZhbHNlOworCisgICAgZG9UZXh0VGVzdCgiY2xhc3MgRm9ve1xuIiArICJwcml2YXRlIGludCBmb287ICAgICAvLyB0aGlzIGlzIGEgZm9vXG4iICsgIn0iLAorICAgICAgICAgICAgICAgImNsYXNzIEZvbyB7XG4iICsgIiAgICBwcml2YXRlIGludCBmb287ICAgICAvLyB0aGlzIGlzIGEgZm9vXG4iICsgIn0iKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RDYXNlRnJvbVN3aXRjaCgpIHRocm93cyBJbmNvcnJlY3RPcGVyYXRpb25FeGNlcHRpb24geworICAgIC8vIEluc3BpcmVkIGJ5IElERUFERVYtMjI5MjAKKyAgICBnZXRTZXR0aW5ncygpLklOREVOVF9DQVNFX0ZST01fU1dJVENIID0gZmFsc2U7CisgICAgZG9UZXh0VGVzdCgKKyAgICAgICJjbGFzcyBGb297XG4iICsKKyAgICAgICJ2b2lkIGZvbyAoKSB7XG4iICsKKyAgICAgICJzd2l0Y2goc29tZVZhbHVlKSB7XG4iICsKKyAgICAgICIgLy8gVGhpcyBjb21tZW50IGlzIGNvcnJlY3RseSBub3QtaW5kZW50ZWRcbiIgKworICAgICAgIiBjYXNlIDE6XG4iICsKKyAgICAgICIgICAgZG9Tb21ldGhpbmcoKTtcbiIgKworICAgICAgIiAgICBicmVhaztcbiIgKworICAgICAgIlxuIiArCisgICAgICAiIC8vIFRoaXMgY29tbWVudCBzaG91bGQgbm90IGJlIGluZGVudGVkLCBidXQgaXQgaXNcbiIgKworICAgICAgIiBjYXNlIDI6XG4iICsKKyAgICAgICIgICAgZG9Tb21ldGhpbmdFbHNlKCk7XG4iICsKKyAgICAgICIgICAgYnJlYWs7XG4iICsKKyAgICAgICJ9XG4iICsKKyAgICAgICJ9XG4iICsKKyAgICAgICJ9IiwKKworICAgICAgImNsYXNzIEZvbyB7XG4iICsKKyAgICAgICIgICAgdm9pZCBmb28oKSB7XG4iICsKKyAgICAgICIgICAgICAgIHN3aXRjaCAoc29tZVZhbHVlKSB7XG4iICsKKyAgICAgICIgICAgICAgIC8vIFRoaXMgY29tbWVudCBpcyBjb3JyZWN0bHkgbm90LWluZGVudGVkXG4iICsKKyAgICAgICIgICAgICAgIGNhc2UgMTpcbiIgKworICAgICAgIiAgICAgICAgICAgIGRvU29tZXRoaW5nKCk7XG4iICsKKyAgICAgICIgICAgICAgICAgICBicmVhaztcbiIgKworICAgICAgIlxuIiArCisgICAgICAiICAgICAgICAvLyBUaGlzIGNvbW1lbnQgc2hvdWxkIG5vdCBiZSBpbmRlbnRlZCwgYnV0IGl0IGlzXG4iICsKKyAgICAgICIgICAgICAgIGNhc2UgMjpcbiIgKworICAgICAgIiAgICAgICAgICAgIGRvU29tZXRoaW5nRWxzZSgpO1xuIiArCisgICAgICAiICAgICAgICAgICAgYnJlYWs7XG4iICsKKyAgICAgICIgICAgICAgIH1cbiIgKworICAgICAgIiAgICB9XG4iICsKKyAgICAgICJ9Iik7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0QmluYXJ5RXhwcmVzc2lvbnNXaXRoUmVsYXRpdmVJbmRlbnRzKCkgeworICAgIC8vIEluc3BpcmVkIGJ5IElERUEtMjE3OTUKKyAgICBnZXRJbmRlbnRPcHRpb25zKCkuVVNFX1JFTEFUSVZFX0lOREVOVFMgPSB0cnVlOworICAgIGdldEluZGVudE9wdGlvbnMoKS5DT05USU5VQVRJT05fSU5ERU5UX1NJWkUgPSA0OworCisgICAgZG9UZXh0VGVzdCgKKyAgICAgICJwdWJsaWMgY2xhc3MgRm9ybWF0dGluZ1Rlc3Qge1xuIiArCisgICAgICAiXG4iICsKKyAgICAgICIgICAgcHVibGljIGJvb2xlYW4gdGVzdDEoaW50IGEsIGludCBiLCBpbnQgYywgaW50IGQpIHtcbiIgKworICAgICAgIiAgICAgICAgcmV0dXJuIGEgPT0gMSAmJlxuIiArCisgICAgICAiICAgICAgYiA9PSAyO1xuIiArCisgICAgICAiICAgIH1cbiIgKworICAgICAgIlxuIiArCisgICAgICAiICAgIHB1YmxpYyBib29sZWFuIG11bHRpbGluZVNpZ25PbkN1cnJlbnQoaW50IGEsIGludCBiLCBpbnQgYywgaW50IGQpIHtcbiIgKworICAgICAgIiAgICAgICAgcmV0dXJuIGEgPT0gMCAmJlxuIiArCisgICAgICAiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChiID09IDAgfHxcbiIgKworICAgICAgIiAgICAgYyA9PSAwKSAmJlxuIiArCisgICAgICAiICBkID09IDA7XG4iICsKKyAgICAgICIgICAgfVxuIiArCisgICAgICAiXG4iICsKKyAgICAgICIgICAgcHVibGljIGJvb2xlYW4gbXVsdGlsaW5lU2lnbk9uTmV4dChpbnQgYSwgaW50IGIsIGludCBjLCBpbnQgZCkge1xuIiArCisgICAgICAiICAgICAgICByZXR1cm4gYSA9PSAwXG4iICsKKyAgICAgICIgICAgICAgJiYgKGIgPT0gMFxuIiArCisgICAgICAiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IGMgPT0gMClcbiIgKworICAgICAgIiAgICYmIGQgPT0gMDtcbiIgKworICAgICAgIiAgICB9XG4iICsKKyAgICAgICJcbiIgKworICAgICAgIiAgICBwdWJsaWMgYm9vbGVhbiBleHBlY3RlZE11bHRpbGluZVNpZ25Pbk5leHQoaW50IGEsIGludCBiLCBpbnQgYywgaW50IGQpIHtcbiIgKworICAgICAgIiAgICAgICAgcmV0dXJuIGEgPT0gMFxuIiArCisgICAgICAiICAgICYmIChiID09IDBcbiIgKworICAgICAgIiAgICAgfHwgYyA9PSAwKVxuIiArCisgICAgICAiICAgICAgICAgICAgICAgICAgICAgICAmJiBkID09IDA7XG4iICsKKyAgICAgICIgICAgfVxuIiArCisgICAgICAifSIsCisKKyAgICAgICJwdWJsaWMgY2xhc3MgRm9ybWF0dGluZ1Rlc3Qge1xuIiArCisgICAgICAiXG4iICsKKyAgICAgICIgICAgcHVibGljIGJvb2xlYW4gdGVzdDEoaW50IGEsIGludCBiLCBpbnQgYywgaW50IGQpIHtcbiIgKworICAgICAgIiAgICAgICAgcmV0dXJuIGEgPT0gMSAmJlxuIiArCisgICAgICAiICAgICAgICAgICAgICAgICAgIGIgPT0gMjtcbiIgKworICAgICAgIiAgICB9XG4iICsKKyAgICAgICJcbiIgKworICAgICAgIiAgICBwdWJsaWMgYm9vbGVhbiBtdWx0aWxpbmVTaWduT25DdXJyZW50KGludCBhLCBpbnQgYiwgaW50IGMsIGludCBkKSB7XG4iICsKKyAgICAgICIgICAgICAgIHJldHVybiBhID09IDAgJiZcbiIgKworICAgICAgIiAgICAgICAgICAgICAgICAgICAoYiA9PSAwIHx8XG4iICsKKyAgICAgICIgICAgICAgICAgICAgICAgICAgICAgICBjID09IDApICYmXG4iICsKKyAgICAgICIgICAgICAgICAgICAgICAgICAgZCA9PSAwO1xuIiArCisgICAgICAiICAgIH1cbiIgKworICAgICAgIlxuIiArCisgICAgICAiICAgIHB1YmxpYyBib29sZWFuIG11bHRpbGluZVNpZ25Pbk5leHQoaW50IGEsIGludCBiLCBpbnQgYywgaW50IGQpIHtcbiIgKworICAgICAgIiAgICAgICAgcmV0dXJuIGEgPT0gMFxuIiArCisgICAgICAiICAgICAgICAgICAgICAgICAgICYmIChiID09IDBcbiIgKworICAgICAgIiAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IGMgPT0gMClcbiIgKworICAgICAgIiAgICAgICAgICAgICAgICAgICAmJiBkID09IDA7XG4iICsKKyAgICAgICIgICAgfVxuIiArCisgICAgICAiXG4iICsKKyAgICAgICIgICAgcHVibGljIGJvb2xlYW4gZXhwZWN0ZWRNdWx0aWxpbmVTaWduT25OZXh0KGludCBhLCBpbnQgYiwgaW50IGMsIGludCBkKSB7XG4iICsKKyAgICAgICIgICAgICAgIHJldHVybiBhID09IDBcbiIgKworICAgICAgIiAgICAgICAgICAgICAgICAgICAmJiAoYiA9PSAwXG4iICsKKyAgICAgICIgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBjID09IDApXG4iICsKKyAgICAgICIgICAgICAgICAgICAgICAgICAgJiYgZCA9PSAwO1xuIiArCisgICAgICAiICAgIH1cbiIgKworICAgICAgIn0iCisgICAgKTsKKyAgfQorICAKKyAgcHVibGljIHZvaWQgdGVzdEJyYWNlc1NoaWZ0ZWRPbk5leHRMaW5lT25NZXRob2RXaXRoSmF2YWRvYygpIHRocm93cyBFeGNlcHRpb24geworICAgIC8vIEluc3BpcmVkIGJ5IElERUEtNjI5OTcKKyAgICBnZXRTZXR0aW5ncygpLk1FVEhPRF9CUkFDRV9TVFlMRSA9IENvbW1vbkNvZGVTdHlsZVNldHRpbmdzLk5FWFRfTElORV9TSElGVEVEOworICAgIAorICAgIFN0cmluZyBwcmVjZWRlZEJ5SmF2YWRvYyA9CisgICAgICAiLyoqXG4iICsKKyAgICAgICIgKiB0ZXN0XG4iICsKKyAgICAgICIgKi9cbiIgKworICAgICAgInB1YmxpYyBpbnQgZ2V0Rm9vKClcbiIgKworICAgICAgIiAgICB7XG4iICsKKyAgICAgICIgICAgcmV0dXJuIGZvbztcbiIgKworICAgICAgIiAgICB9IjsKKyAgICAKKyAgICBTdHJpbmcgcHJlY2VkZWRCeVNpbmdsZUxpbmVDb21tZW50ID0KKyAgICAgICIvLyB0ZXN0XG4iICsKKyAgICAgICJwdWJsaWMgaW50IGdldEZvbygpXG4iICsKKyAgICAgICIgICAge1xuIiArCisgICAgICAiICAgIHJldHVybiBmb287XG4iICsKKyAgICAgICIgICAgfSI7CisKKyAgICBTdHJpbmcgcHJlY2VkZWRCeU11bHRpTGluZUNvbW1lbnQgPQorICAgICAgIi8qXG4iICsKKyAgICAgICJ0ZXN0XG4iICsKKyAgICAgICIqL1xuIiArCisgICAgICAicHVibGljIGludCBnZXRGb28oKVxuIiArCisgICAgICAiICAgIHtcbiIgKworICAgICAgIiAgICByZXR1cm4gZm9vO1xuIiArCisgICAgICAiICAgIH0iOworICAgIAorICAgIGRvQ2xhc3NUZXN0KHByZWNlZGVkQnlKYXZhZG9jLCBwcmVjZWRlZEJ5SmF2YWRvYyk7CisgICAgZG9DbGFzc1Rlc3QocHJlY2VkZWRCeVNpbmdsZUxpbmVDb21tZW50LCBwcmVjZWRlZEJ5U2luZ2xlTGluZUNvbW1lbnQpOworICAgIGRvQ2xhc3NUZXN0KHByZWNlZGVkQnlNdWx0aUxpbmVDb21tZW50LCBwcmVjZWRlZEJ5TXVsdGlMaW5lQ29tbWVudCk7CisgIH0KKyAgCisgIHB1YmxpYyB2b2lkIHRlc3RBbm9ueW1vdXNDbGFzc0luc3RhbmNlc0FzTWV0aG9kQ2FsbEFyZ3VtZW50cygpIHRocm93cyBFeGNlcHRpb24geworICAgIC8vIEluc3BpcmVkIGJ5IElERUEtNjU5ODcKKyAgICAKKyAgICBkb01ldGhvZFRlc3QoCisgICAgICAiZm9vKFwibG9uZyBzdHJpbmcgYXMgdGhlIGZpcnN0IGFyZ3VtZW50XCIsIG5ldyBSdW5uYWJsZSgpIHtcbiIgKworICAgICAgInB1YmxpYyB2b2lkIHJ1bigpIHsgICAgICAgICAgICAgICAgICAgICAgICAgXG4iICsKKyAgICAgICJ9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuIiArCisgICAgICAifSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuIiArCisgICAgICAibmV3IFJ1bm5hYmxlKCkgeyAgICAgICAgICAgICAgICAgICAgICAgICBcbiIgKworICAgICAgInB1YmxpYyB2b2lkIHJ1bigpIHsgICAgICAgICAgICAgICAgIFxuIiArCisgICAgICAifSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuIiArCisgICAgICAifSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuIiArCisgICAgICAiKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiwKKyAgICAgICJmb28oXCJsb25nIHN0cmluZyBhcyB0aGUgZmlyc3QgYXJndW1lbnRcIiwgbmV3IFJ1bm5hYmxlKCkge1xuIiArCisgICAgICAiICAgICAgICAgICAgcHVibGljIHZvaWQgcnVuKCkge1xuIiArCisgICAgICAiICAgICAgICAgICAgfVxuIiArCisgICAgICAiICAgICAgICB9LFxuIiArCisgICAgICAiICAgICAgICBuZXcgUnVubmFibGUoKSB7XG4iICsKKyAgICAgICIgICAgICAgICAgICBwdWJsaWMgdm9pZCBydW4oKSB7XG4iICsKKyAgICAgICIgICAgICAgICAgICB9XG4iICsKKyAgICAgICIgICAgICAgIH1cbiIgKworICAgICAgIik7IgorICAgICk7CisgICAgCisgICAgZG9NZXRob2RUZXN0KAorICAgICAgImZvbygxLFxuIiArCisgICAgICAiMiwgbmV3IFJ1bm5hYmxlKCkge1xuIiArCisgICAgICAiQE92ZXJyaWRlXG4iICsKKyAgICAgICJwdWJsaWMgdm9pZCBydW4oKSB7XG4iICsKKyAgICAgICJ9XG4iICsKKyAgICAgICJ9KTsiLAorICAgICAgImZvbygxLFxuIiArCisgICAgICAiICAgICAgICAyLCBuZXcgUnVubmFibGUoKSB7XG4iICsKKyAgICAgICIgICAgQE92ZXJyaWRlXG4iICsKKyAgICAgICIgICAgcHVibGljIHZvaWQgcnVuKCkge1xuIiArCisgICAgICAiICAgIH1cbiIgKworICAgICAgIn0pOyIKKyAgICApOworICAgIAorICAgIGRvTWV0aG9kVGVzdCgKKyAgICAgICJmb28obmV3IFJ1bm5hYmxlKCkge1xuIiArCisgICAgICAiQE92ZXJyaWRlXG4iICsKKyAgICAgICJwdWJsaWMgdm9pZCBydW4oKSB7XG4iICsKKyAgICAgICJ9XG4iICsKKyAgICAgICJ9LFxuIiArCisgICAgICAibmV3IFJ1bm5hYmxlKCkge1xuIiArCisgICAgICAiQE92ZXJyaWRlXG4iICsKKyAgICAgICJwdWJsaWMgdm9pZCBydW4oKSB7XG4iICsKKyAgICAgICJ9XG4iICsKKyAgICAgICJ9KTsiLAorICAgICAgImZvbyhuZXcgUnVubmFibGUoKSB7XG4iICsKKyAgICAgICIgICAgICAgIEBPdmVycmlkZVxuIiArCisgICAgICAiICAgICAgICBwdWJsaWMgdm9pZCBydW4oKSB7XG4iICsKKyAgICAgICIgICAgICAgIH1cbiIgKworICAgICAgIiAgICB9LFxuIiArCisgICAgICAiICAgICAgICBuZXcgUnVubmFibGUoKSB7XG4iICsKKyAgICAgICIgICAgICAgICAgICBAT3ZlcnJpZGVcbiIgKworICAgICAgIiAgICAgICAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHtcbiIgKworICAgICAgIiAgICAgICAgICAgIH1cbiIgKworICAgICAgIiAgICAgICAgfVxuIiArCisgICAgICAiKTsiCisgICAgKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RBbm9ueW1vdXNDbGFzc0luc3RhbmNlc0FzQWxpZ25lZE1ldGhvZENhbGxBcmd1bWVudHMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBnZXRTZXR0aW5ncygpLkFMSUdOX01VTFRJTElORV9QQVJBTUVURVJTX0lOX0NBTExTID0gdHJ1ZTsKKworICAgIGRvTWV0aG9kVGVzdCgKKyAgICAgICJmb28obmV3IFJ1bm5hYmxlKCkge1xuIiArCisgICAgICAiQE92ZXJyaWRlXG4iICsKKyAgICAgICJwdWJsaWMgdm9pZCBydW4oKSB7XG4iICsKKyAgICAgICJ9XG4iICsKKyAgICAgICJ9LFxuIiArCisgICAgICAibmV3IFJ1bm5hYmxlKCkge1xuIiArCisgICAgICAiQE92ZXJyaWRlXG4iICsKKyAgICAgICJwdWJsaWMgdm9pZCBydW4oKSB7XG4iICsKKyAgICAgICJ9XG4iICsKKyAgICAgICJ9KTsiLAorICAgICAgImZvbyhuZXcgUnVubmFibGUoKSB7XG4iICsKKyAgICAgICIgICAgICAgIEBPdmVycmlkZVxuIiArCisgICAgICAiICAgICAgICBwdWJsaWMgdm9pZCBydW4oKSB7XG4iICsKKyAgICAgICIgICAgICAgIH1cbiIgKworICAgICAgIiAgICB9LFxuIiArCisgICAgICAiICAgIG5ldyBSdW5uYWJsZSgpIHtcbiIgKworICAgICAgIiAgICAgICAgQE92ZXJyaWRlXG4iICsKKyAgICAgICIgICAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHtcbiIgKworICAgICAgIiAgICAgICAgfVxuIiArCisgICAgICAiICAgIH1cbiIgKworICAgICAgIik7IgorICAgICk7CisKKyAgICBkb01ldGhvZFRlc3QoCisgICAgICAiZm9vKDEyMzQ1Njc4OSwgbmV3IFJ1bm5hYmxlKCkge1xuIiArCisgICAgICAiQE92ZXJyaWRlXG4iICsKKyAgICAgICJwdWJsaWMgdm9pZCBydW4oKSB7XG4iICsKKyAgICAgICJ9XG4iICsKKyAgICAgICJ9LFxuIiArCisgICAgICAibmV3IFJ1bm5hYmxlKCkge1xuIiArCisgICAgICAiQE92ZXJyaWRlXG4iICsKKyAgICAgICJwdWJsaWMgdm9pZCBydW4oKSB7XG4iICsKKyAgICAgICJ9XG4iICsKKyAgICAgICJ9KTsiLAorICAgICAgImZvbygxMjM0NTY3ODksIG5ldyBSdW5uYWJsZSgpIHtcbiIgKworICAgICAgIiAgICAgICAgQE92ZXJyaWRlXG4iICsKKyAgICAgICIgICAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHtcbiIgKworICAgICAgIiAgICAgICAgfVxuIiArCisgICAgICAiICAgIH0sXG4iICsKKyAgICAgICIgICAgbmV3IFJ1bm5hYmxlKCkge1xuIiArCisgICAgICAiICAgICAgICBAT3ZlcnJpZGVcbiIgKworICAgICAgIiAgICAgICAgcHVibGljIHZvaWQgcnVuKCkge1xuIiArCisgICAgICAiICAgICAgICB9XG4iICsKKyAgICAgICIgICAgfVxuIiArCisgICAgICAiKTsiCisgICAgKTsKKworICAgIGRvTWV0aG9kVGVzdCgKKyAgICAgICJmb28obmV3IFJ1bm5hYmxlKCkge1xuIiArCisgICAgICAiQE92ZXJyaWRlXG4iICsKKyAgICAgICJwdWJsaWMgdm9pZCBydW4oKSB7XG4iICsKKyAgICAgICJ9IiArCisgICAgICAifSwgMSwgMik7IiwKKyAgICAgICJmb28obmV3IFJ1bm5hYmxlKCkge1xuIiArCisgICAgICAiICAgIEBPdmVycmlkZVxuIiArCisgICAgICAiICAgIHB1YmxpYyB2b2lkIHJ1bigpIHtcbiIgKworICAgICAgIiAgICB9XG4iICsKKyAgICAgICJ9LCAxLCAyKTsiCisgICAgKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RBbm9ueW1vdXNDbGFzc2VzT25TYW1lTGluZUF0TWV0aG9kQ2FsbEV4cHJlc3Npb24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb01ldGhvZFRlc3QoCisgICAgICAiZm9vKG5ldyBSdW5uYWJsZSgpIHtcbiIgKworICAgICAgIiAgICAgICAgcHVibGljIHZvaWQgcnVuKCkge1xuIiArCisgICAgICAiICAgICAgICB9XG4iICsKKyAgICAgICIgICAgfSwgbmV3IFJ1bm5hYmxlKCkge1xuIiArCisgICAgICAiICAgICAgICAgICAgICAgcHVibGljIHZvaWQgcnVuKCkge1xuIiArCisgICAgICAiICAgICAgICAgICAgICAgfVxuIiArCisgICAgICAiICAgICAgICAgICAgICB9KTsiLAorICAgICAgImZvbyhuZXcgUnVubmFibGUoKSB7XG4iICsKKyAgICAgICIgICAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHtcbiIgKworICAgICAgIiAgICAgICAgfVxuIiArCisgICAgICAiICAgIH0sIG5ldyBSdW5uYWJsZSgpIHtcbiIgKworICAgICAgIiAgICAgICAgcHVibGljIHZvaWQgcnVuKCkge1xuIiArCisgICAgICAiICAgICAgICB9XG4iICsKKyAgICAgICIgICAgfVxuIiArCisgICAgICAiKTsiCisgICAgKTsKKyAgfQorICAKKyAgcHVibGljIHZvaWQgdGVzdFBhY2thZ2VQcml2YXRlQW5ub3RhdGlvbigpIHsKKyAgICAvLyBJbnNwaXJlZCBieSBJREVBLTY3Mjk0CisgICAgCisgICAgU3RyaW5nIHRleHQgPSAKKyAgICAgICJAUmV0ZW50aW9uKFJVTlRJTUUpXG4iICsKKyAgICAgICJAVGFyZ2V0KHtGSUVMRCwgUEFSQU1FVEVSLCBNRVRIT0R9KVxuIiArCisgICAgICAiQGludGVyZmFjZSBNeUFubm90YXRpb24ge1xuIiArCisgICAgICAiXG4iICsKKyAgICAgICJ9IjsKKyAgICBkb1RleHRUZXN0KHRleHQsIHRleHQpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEluY29tcGxldGVNZXRob2RDYWxsKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgLy8gSW5zcGlyZWQgYnkgSURFQS03OTgzNi4KKworICAgIGRvTWV0aG9kVGVzdCgKKyAgICAgICJ0ZXN0KG5ldyBSdW5uYWJsZSgpIHtcbiIgKworICAgICAgIiAgICAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHtcbiIgKworICAgICAgIiAgICAgICAgIH1cbiIgKworICAgICAgIiAgICAgfSwgbmV3IFJ1bm5hYmxlKCkge1xuIiArCisgICAgICAiICAgICAgICAgcHVibGljIHZvaWQgcnVuKCkge1xuIiArCisgICAgICAiICAgICAgICAgfVxuIiArCisgICAgICAiICAgICB9LCApIiwKKyAgICAgICJ0ZXN0KG5ldyBSdW5uYWJsZSgpIHtcbiIgKworICAgICAgIiAgICAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHtcbiIgKworICAgICAgIiAgICAgICAgIH1cbiIgKworICAgICAgIiAgICAgfSwgbmV3IFJ1bm5hYmxlKCkge1xuIiArCisgICAgICAiICAgICAgICAgcHVibGljIHZvaWQgcnVuKCkge1xuIiArCisgICAgICAiICAgICAgICAgfVxuIiArCisgICAgICAiICAgICB9LFxuIiArCisgICAgICAiKSIKKyAgICApOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdENTdHlsZUNvbW1lbnRJc05vdE1vdmVkKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgLy8gSURFQS04NzA4NworICAgIGRvQ2xhc3NUZXN0KAorICAgICAgIiAgICAgICAgICAgICAgICAvKlxuIiArCisgICAgICAiICAgICAgICAgICAgICAgICAgIHRoaXMgaXMgYSBjLXN0eWxlIGNvbW1lbnRcbiIgKworICAgICAgIiAgICAgICAgICAgICAgICAgKi9cbiIgKworICAgICAgIiAgICAgICAgICAgLy8gVGhpcyBpcyBhIGxpbmUgY29tbWVudCIsCisgICAgICAiICAgICAgICAgICAgLypcbiIgKworICAgICAgIiAgICAgICAgICAgICAgIHRoaXMgaXMgYSBjLXN0eWxlIGNvbW1lbnRcbiIgKworICAgICAgIiAgICAgICAgICAgICAqL1xuIiArCisgICAgICAiLy8gVGhpcyBpcyBhIGxpbmUgY29tbWVudCIKKyAgICApOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdE11bHRpbGluZUNvbW1lbnRBdEZpbGVTdGFydCgpIHsKKyAgICAvLyBJREVBLTkwODYwCisgICAgU3RyaW5nIHRleHQgPQorICAgICAgIlxuIiArCisgICAgICAiLypcbiIgKworICAgICAgIiAqIGNvbW1lbnRcbiIgKworICAgICAgIiAqL1xuIiArCisgICAgICAiXG4iICsKKyAgICAgICJjbGFzcyBUZXN0IHtcbiIgKworICAgICAgIn0iOworICAgIGRvVGV4dFRlc3QodGV4dCwgdGV4dCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0TXVsdGlsaW5lQ29tbWVudEFuZFRhYnNJbmRlbnQoKSB7CisgICAgLy8gSURFQS05MTcwMworICAgIFN0cmluZyBpbml0aWFsID0gCisgICAgICAiXHQvKlxuIiArCisgICAgICAiXHRcdCogY29tbWVudFxuIiArCisgICAgICAiXHQgKi9cbiIgKworICAgICAgImNsYXNzIFRlc3Qge1xuIiArCisgICAgICAifSI7CisKKyAgICBTdHJpbmcgZXhwZWN0ZWQgPQorICAgICAgIi8qXG4iICsKKyAgICAgICJcdCogY29tbWVudFxuIiArCisgICAgICAiICovXG4iICsKKyAgICAgICJjbGFzcyBUZXN0IHtcbiIgKworICAgICAgIn0iOworICAgIAorICAgIGdldEluZGVudE9wdGlvbnMoKS5VU0VfVEFCX0NIQVJBQ1RFUiA9IHRydWU7CisgICAgZG9UZXh0VGVzdChpbml0aWFsLCBleHBlY3RlZCk7CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9wc2kvZm9ybWF0dGVyL2phdmEvSmF2YUZvcm1hdHRlck5ld0xpbmVUZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovcHNpL2Zvcm1hdHRlci9qYXZhL0phdmFGb3JtYXR0ZXJOZXdMaW5lVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAzOGIxZDAKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovcHNpL2Zvcm1hdHRlci9qYXZhL0phdmFGb3JtYXR0ZXJOZXdMaW5lVGVzdC5qYXZhCkBAIC0wLDAgKzEsMjEzIEBACisvKgorICogQ29weXJpZ2h0IDIwMDAtMjAxMiBKZXRCcmFpbnMgcy5yLm8uCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworcGFja2FnZSBjb20uaW50ZWxsaWoucHNpLmZvcm1hdHRlci5qYXZhOworCitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkuZmlsZVR5cGVzLlN0ZEZpbGVUeXBlczsKK2ltcG9ydCBjb20uaW50ZWxsaWoucHNpLmNvZGVTdHlsZS5Db21tb25Db2RlU3R5bGVTZXR0aW5nczsKK2ltcG9ydCBjb20uaW50ZWxsaWoudXRpbC5JbmNvcnJlY3RPcGVyYXRpb25FeGNlcHRpb247CisKKy8qKgorICogSXMgaW50ZW5kZWQgdG8gaG9sZCBzcGVjaWZpYyBqYXZhIGZvcm1hdHRpbmcgdGVzdHMgZm9yIDxjb2RlPidQbGFjZSBvbiBOZXcgTGluZSc8L2NvZGU+IHNldHRpbmdzICgKKyAqIDxjb2RlPlByb2plY3QgU2V0dGluZ3MgLSBDb2RlIFN0eWxlIC0gQWxpZ25tZW50IGFuZCBCcmFjZXMgLSBQbGFjZSBvbiBOZXcgTGluZTwvY29kZT4pLgorICoKKyAqIEBhdXRob3IgRGVuaXMgWmhkYW5vdgorICogQHNpbmNlIEFwciAyOCwgMjAxMCAxMjoxMjoxMyBQTQorICovCitwdWJsaWMgY2xhc3MgSmF2YUZvcm1hdHRlck5ld0xpbmVUZXN0IGV4dGVuZHMgQWJzdHJhY3RKYXZhRm9ybWF0dGVyVGVzdCB7CisKKyAgcHVibGljIHZvaWQgdGVzdEF1dG9tYXRpY0Vsc2VXcmFwcGluZygpIHRocm93cyBFeGNlcHRpb24geworICAgIGdldFNldHRpbmdzKCkuRUxTRV9PTl9ORVdfTElORSA9IHRydWU7CisKKyAgICBkb01ldGhvZFRlc3QoCisgICAgICAiaWYgKGIpIHtcbiIgKworICAgICAgIn0gZWxzZSB7XG4iICsKKyAgICAgICJ9IiwKKworICAgICAgImlmIChiKSB7XG4iICsKKyAgICAgICJ9XG4iICsKKyAgICAgICJlbHNlIHtcbiIgKworICAgICAgIn0iCisgICAgKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RBdXRvbWF0aWNFbHNlVW53cmFwcGluZygpIHRocm93cyBFeGNlcHRpb24geworICAgIGdldFNldHRpbmdzKCkuRUxTRV9PTl9ORVdfTElORSA9IGZhbHNlOworICAgIGdldFNldHRpbmdzKCkuS0VFUF9MSU5FX0JSRUFLUyA9IHRydWU7CisKKyAgICAvLyBJbnNwaXJlZCBieSBJREVBLTQ3ODA5CisgICAgZG9NZXRob2RUZXN0KAorICAgICAgImlmIChiKSB7XG4iICsKKyAgICAgICJ9XG4iICsKKyAgICAgICJlbHNlIHtcbiIgKworICAgICAgIn0iLAorCisgICAgICAiaWYgKGIpIHtcbiIgKworICAgICAgIn0gZWxzZSB7XG4iICsKKyAgICAgICJ9IgorICAgICk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0QXV0b21hdGljQ2F0Y2hXcmFwcGluZygpIHRocm93cyBFeGNlcHRpb24geworICAgIGdldFNldHRpbmdzKCkuQ0FUQ0hfT05fTkVXX0xJTkUgPSB0cnVlOworCisgICAgZG9NZXRob2RUZXN0KAorICAgICAgInRyeSB7XG4iICsKKyAgICAgICJ9IGNhdGNoIChFeGNlcHRpb24gZSkge1xuIiArCisgICAgICAifSIsCisKKyAgICAgICJ0cnkge1xuIiArCisgICAgICAifVxuIiArCisgICAgICAiY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7XG4iICsKKyAgICAgICJ9IgorICAgICk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0QXV0b21hdGljQ2F0Y2hVbndyYXBwaW5nKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZ2V0U2V0dGluZ3MoKS5DQVRDSF9PTl9ORVdfTElORSA9IGZhbHNlOworICAgIGdldFNldHRpbmdzKCkuS0VFUF9MSU5FX0JSRUFLUyA9IHRydWU7CisKKyAgICAvLyBJbnNwaXJlZCBieSBJREVBLTQ3ODA5CisgICAgZG9NZXRob2RUZXN0KAorICAgICAgInRyeSB7XG4iICsKKyAgICAgICJ9XG4iICsKKyAgICAgICJjYXRjaCAoRXhjZXB0aW9uIGUpIHtcbiIgKworICAgICAgIn0iLAorCisgICAgICAidHJ5IHtcbiIgKworICAgICAgIn0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7XG4iICsKKyAgICAgICJ9IgorICAgICk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0QXV0b21hdGljRmluYWxseVdyYXBwaW5nKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZ2V0U2V0dGluZ3MoKS5GSU5BTExZX09OX05FV19MSU5FID0gdHJ1ZTsKKworICAgIGRvTWV0aG9kVGVzdCgKKyAgICAgICJ0cnkge1xuIiArCisgICAgICAifSBmaW5hbGx5IHtcbiIgKworICAgICAgIn0iLAorCisgICAgICAidHJ5IHtcbiIgKworICAgICAgIn1cbiIgKworICAgICAgImZpbmFsbHkge1xuIiArCisgICAgICAifSIKKyAgICApOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEF1dG9tYXRpY0ZpbmFsbHlVbndyYXBwaW5nKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZ2V0U2V0dGluZ3MoKS5GSU5BTExZX09OX05FV19MSU5FID0gZmFsc2U7CisgICAgZ2V0U2V0dGluZ3MoKS5LRUVQX0xJTkVfQlJFQUtTID0gdHJ1ZTsKKworICAgIC8vIEluc3BpcmVkIGJ5IElERUEtNDc4MDkKKyAgICBkb01ldGhvZFRlc3QoCisgICAgICAidHJ5IHtcbiIgKworICAgICAgIn1cbiIgKworICAgICAgImZpbmFsbHkge1xuIiArCisgICAgICAifSIsCisKKyAgICAgICJ0cnkge1xuIiArCisgICAgICAifSBmaW5hbGx5IHtcbiIgKworICAgICAgIn0iCisgICAgKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RBdXRvbWF0aWNDYXRjaEZpbmFsbHlVbndyYXBwaW5nKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgLy8gSW5zcGlyZWQgYnkgSURFQS00NzgwOQorICAgIGdldFNldHRpbmdzKCkuQ0FUQ0hfT05fTkVXX0xJTkUgPSBmYWxzZTsKKyAgICBnZXRTZXR0aW5ncygpLkZJTkFMTFlfT05fTkVXX0xJTkUgPSBmYWxzZTsKKyAgICBnZXRTZXR0aW5ncygpLktFRVBfTElORV9CUkVBS1MgPSB0cnVlOworCisgICAgZG9NZXRob2RUZXN0KAorICAgICAgInRyeSB7XG4iICsKKyAgICAgICJ9XG4iICsKKyAgICAgICJjYXRjaCAoRXhjZXB0aW9uIGUpIHtcbiIgKworICAgICAgIn1cbiIgKworICAgICAgImZpbmFsbHkge1xuIiArCisgICAgICAifSIsCisKKyAgICAgICJ0cnkge1xuIiArCisgICAgICAifSBjYXRjaCAoRXhjZXB0aW9uIGUpIHtcbiIgKworICAgICAgIn0gZmluYWxseSB7XG4iICsKKyAgICAgICJ9IgorICAgICk7CisgIH0KKyAgCisgIHB1YmxpYyB2b2lkIHRlc3RDbGFzc0luaXRpYWxpemF0aW9uQmxvY2tCcmFjZXNQbGFjZW1lbnQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAvLyBJbnNwaXJlZCBieSBJREVBLTU0MTkxCisgICAgZ2V0U2V0dGluZ3MoKS5nZXRSb290U2V0dGluZ3MoKS5nZXRJbmRlbnRPcHRpb25zKFN0ZEZpbGVUeXBlcy5KQVZBKS5JTkRFTlRfU0laRSA9IDQ7CisgICAgZ2V0U2V0dGluZ3MoKS5LRUVQX1NJTVBMRV9CTE9DS1NfSU5fT05FX0xJTkUgPSBmYWxzZTsKKyAgICBkb01ldGhvZFRlc3QoCisgICAgICAibmV3IEV4cGVjdGF0aW9ucygpIHtcbiIgKworICAgICAgIiAgICB7Zm9vKCk7fX07IiwKKworICAgICAgIm5ldyBFeHBlY3RhdGlvbnMoKSB7XG4iICsKKyAgICAgICIgICAge1xuIiArCisgICAgICAiICAgICAgICBmb28oKTtcbiIgKworICAgICAgIiAgICB9XG4iICsKKyAgICAgICJ9OyIKKyAgICApOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEJsb2NrT2ZNZXRob2RXaXRoQW5ub3RhdGVkUGFyYW1ldGVyKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgLy8gSW5zcGlyZWQgYnkgSURFQS0xNzg3MAorICAgIGRvQ2xhc3NUZXN0KCJwdWJsaWMgVGVzdChAUXVhbGlmaWVyKFwiYmxhaFwiKSBBVHlwZSBibGFoKXt9IiwgInB1YmxpYyBUZXN0KEBRdWFsaWZpZXIoXCJibGFoXCIpIEFUeXBlIGJsYWgpIHtcbiIgKyAifSIpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEFycmF5SW5pdGlhbGl6ZXIoKSB0aHJvd3MgSW5jb3JyZWN0T3BlcmF0aW9uRXhjZXB0aW9uIHsKKyAgICAvLyBJbnNwaXJlZCBieSBJREVBREVWLTY3ODcKKyAgICBnZXRTZXR0aW5ncygpLkFSUkFZX0lOSVRJQUxJWkVSX1dSQVAgPSBDb21tb25Db2RlU3R5bGVTZXR0aW5ncy5XUkFQX0FMV0FZUzsKKyAgICBnZXRTZXR0aW5ncygpLkFSUkFZX0lOSVRJQUxJWkVSX0xCUkFDRV9PTl9ORVhUX0xJTkUgPSB0cnVlOworICAgIGdldFNldHRpbmdzKCkuQVJSQVlfSU5JVElBTElaRVJfUkJSQUNFX09OX05FWFRfTElORSA9IHRydWU7CisgICAgZG9UZXh0VGVzdCgKKyAgICAgICAgICAgICAgICJwdWJsaWMgQGludGVyZmFjZSBBbm5cbiIgKworICAgICAgICAgICAgICAgIntcbiIgKworICAgICAgICAgICAgICAgImludFtdIHggPSB7IDEsIDIgfTtcbiIgKworICAgICAgICAgICAgICAgIlxuIiArCisgICAgICAgICAgICAgICAiTW9kZVtdIG1vZGVzICgpIGRlZmF1bHQgeyBATW9kZSh2YWx1ZSA9IDEpLCBATW9kZSh2YWx1ZSA9IDIpIH07XG4iICsKKyAgICAgICAgICAgICAgICJ9IiwKKworICAgICAgICAgICAgICAgInB1YmxpYyBAaW50ZXJmYWNlIEFubiB7XG4iICsKKyAgICAgICAgICAgICAgICIgICAgaW50W10geCA9IHtcbiIgKworICAgICAgICAgICAgICAgIiAgICAgICAgICAgIDEsXG4iICsKKyAgICAgICAgICAgICAgICIgICAgICAgICAgICAyXG4iICsKKyAgICAgICAgICAgICAgICIgICAgfTtcbiIgKworICAgICAgICAgICAgICAgIlxuIiArCisgICAgICAgICAgICAgICAiICAgIE1vZGVbXSBtb2RlcygpIGRlZmF1bHQge1xuIiArCisgICAgICAgICAgICAgICAiICAgICAgICAgICAgQE1vZGUodmFsdWUgPSAxKSxcbiIgKworICAgICAgICAgICAgICAgIiAgICAgICAgICAgIEBNb2RlKHZhbHVlID0gMilcbiIgKworICAgICAgICAgICAgICAgIiAgICB9O1xuIiArCisgICAgICAgICAgICAgICAifSIKKyAgICApOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFNpbXBsZUFubm90YXRlZE1ldGhvZEFuZEJyYWNlT25OZXh0TGluZVN0eWxlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgLy8gSW5zcGlyZWQgYnkgSURFQS01MzU0MgorICAgIGdldFNldHRpbmdzKCkuTUVUSE9EX0JSQUNFX1NUWUxFID0gQ29tbW9uQ29kZVN0eWxlU2V0dGluZ3MuTkVYVF9MSU5FOworICAgIGdldFNldHRpbmdzKCkuS0VFUF9TSU1QTEVfTUVUSE9EU19JTl9PTkVfTElORSA9IHRydWU7CisgICAgZ2V0U2V0dGluZ3MoKS5LRUVQX0xJTkVfQlJFQUtTID0gdHJ1ZTsKKyAgICBnZXRTZXR0aW5ncygpLktFRVBfQkxBTktfTElORVNfSU5fQ09ERSA9IDI7CisKKyAgICBTdHJpbmcgbWV0aG9kV2l0aEFubm90YXRpb24gPSAiQE92ZXJyaWRlXG4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidm9pZCBmb28oKSB7fSI7CisKKyAgICBTdHJpbmcgbWV0aG9kV2l0aEFubm90YXRpb25BbmRWaXNpYmlsaXR5ID0gIkBPdmVycmlkZVxuIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwdWJsaWMgdm9pZCBmb28oKSB7fSI7CisKKyAgICAvLyBEb24ndCBleHBlY3QgdGhhdCBzaW1wbGUgbWV0aG9kIHRvIGJlIHNwcmVhZCBvbiBtdWx0aXBsZSBsaW5lcy4KKyAgICBkb0NsYXNzVGVzdChtZXRob2RXaXRoQW5ub3RhdGlvbiwgbWV0aG9kV2l0aEFubm90YXRpb24pOworICAgIGRvQ2xhc3NUZXN0KG1ldGhvZFdpdGhBbm5vdGF0aW9uQW5kVmlzaWJpbGl0eSwgbWV0aG9kV2l0aEFubm90YXRpb25BbmRWaXNpYmlsaXR5KTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL3BzaS9mb3JtYXR0ZXIvamF2YS9KYXZhRm9ybWF0dGVyU3BhY2VUZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovcHNpL2Zvcm1hdHRlci9qYXZhL0phdmFGb3JtYXR0ZXJTcGFjZVRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYjM1OTA0Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL3BzaS9mb3JtYXR0ZXIvamF2YS9KYXZhRm9ybWF0dGVyU3BhY2VUZXN0LmphdmEKQEAgLTAsMCArMSw0NjUgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwMC0yMDEyIEpldEJyYWlucyBzLnIuby4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCitwYWNrYWdlIGNvbS5pbnRlbGxpai5wc2kuZm9ybWF0dGVyLmphdmE7CisKK2ltcG9ydCBjb20uaW50ZWxsaWoucHNpLmNvZGVTdHlsZS5Db21tb25Db2RlU3R5bGVTZXR0aW5nczsKKworLyoqCisgKiBJcyBpbnRlbmRlZCB0byBob2xkIHNwZWNpZmljIGphdmEgZm9ybWF0dGluZyB0ZXN0cyBmb3IgJ3NwYWNpbmcnIHNldHRpbmdzLgorICoKKyAqIEBhdXRob3IgRGVuaXMgWmhkYW5vdgorICogQHNpbmNlIEFwciAyOSwgMjAxMCA1OjUwOjM0IFBNCisgKi8KK3B1YmxpYyBjbGFzcyBKYXZhRm9ybWF0dGVyU3BhY2VUZXN0IGV4dGVuZHMgQWJzdHJhY3RKYXZhRm9ybWF0dGVyVGVzdCB7CisKKyAgcHVibGljIHZvaWQgdGVzdFNwYWNpbmdCZXR3ZWVuVHlwZVBhcmFtZXRlcnMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAvLyBJbXBsaWVkIGJ5IElERUFERVYtMzY2NgorICAgIGdldFNldHRpbmdzKCkuU1BBQ0VfQUZURVJfQ09NTUEgPSB0cnVlOworCisgICAgZG9UZXh0VGVzdCgiY2xhc3MgRm9vIHtcbiIgKyAiTWFwPFN0cmluZyxTdHJpbmc+IG1hcCgpIHt9XG4iICsgIn0iLAorICAgICAgICAgICAgICAgImNsYXNzIEZvbyB7XG4iICsgIiAgICBNYXA8U3RyaW5nLCBTdHJpbmc+IG1hcCgpIHtcbiIgKyAiICAgIH1cbiIgKyAifSIpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFNwYWNlQmVmb3JlQW5ub3RhdGlvblBhcmFtQXJyYXkoKSB7CisgICAgLy8gSW5zcGlyZWQgYnkgSURFQS0yNDMyOQorICAgIGdldFNldHRpbmdzKCkuU1BBQ0VfQkVGT1JFX0FOTk9UQVRJT05fQVJSQVlfSU5JVElBTElaRVJfTEJSQUNFID0gdHJ1ZTsKKworICAgIFN0cmluZyB0ZXh0ID0KKyAgICAgICJAU3VwcHJlc3NXYXJuaW5ncygge1wiQUxMXCJ9KVxuIiArCisgICAgICAicHVibGljIGNsYXNzIEZvcm1hdHRpbmdUZXN0IHtcbiIgKworICAgICAgIn0iOworCisgICAgLy8gRG9uJ3QgZXhwZWN0IHRoZSBzcGFjZSB0byBiZSAnYXRlJworICAgIGRvVGV4dFRlc3QodGV4dCwgdGV4dCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0Q29tbWFJblR5cGVBcmd1bWVudHMoKSB7CisgICAgLy8gSW5zcGlyZWQgYnkgSURFQS0zMTY4MQorICAgIGdldFNldHRpbmdzKCkuU1BBQ0VfQUZURVJfQ09NTUFfSU5fVFlQRV9BUkdVTUVOVFMgPSBmYWxzZTsKKworICAgIFN0cmluZyBpbml0aWFsID0KKyAgICAgICJpbnRlcmZhY2UgVGVzdEludGVyZmFjZTxBLEI+IHtcbiIgKworICAgICAgIlxuIiArCisgICAgICAiICAgIDxYLFk+IHZvaWQgZm9vKFggeCwgWSB5KTtcbiIgKworICAgICAgIn1cbiIgKworICAgICAgIlxuIiArCisgICAgICAicHVibGljIGNsYXNzIEZvcm1hdHRpbmdUZXN0IGltcGxlbWVudHMgVGVzdEludGVyZmFjZTxTdHJpbmcsSW50ZWdlcj4ge1xuIiArCisgICAgICAiXG4iICsKKyAgICAgICIgICAgcHVibGljIDxYLFk+IHZvaWQgZm9vKFggeCwgWSB5KSB7XG4iICsKKyAgICAgICIgICAgICAgIE1hcDxTdHJpbmcsSW50ZWdlcj4gbWFwID0gbmV3IEhhc2hNYXA8U3RyaW5nLEludGVnZXI+KCk7XG4iICsKKyAgICAgICIgICAgfVxuIiArCisgICAgICAifSI7CisKKyAgICBkb1RleHRUZXN0KGluaXRpYWwsIGluaXRpYWwpOyAvLyBEb24ndCBleHBlY3QgdGhlIGNvbW1hIHRvIGJlIGluc2VydGVkCisKKyAgICBnZXRTZXR0aW5ncygpLlNQQUNFX0FGVEVSX0NPTU1BX0lOX1RZUEVfQVJHVU1FTlRTID0gdHJ1ZTsKKyAgICBTdHJpbmcgZm9ybWF0dGVkID0KKyAgICAgICJpbnRlcmZhY2UgVGVzdEludGVyZmFjZTxBLCBCPiB7XG4iICsKKyAgICAgICJcbiIgKworICAgICAgIiAgICA8WCwgWT4gdm9pZCBmb28oWCB4LCBZIHkpO1xuIiArCisgICAgICAifVxuIiArCisgICAgICAiXG4iICsKKyAgICAgICJwdWJsaWMgY2xhc3MgRm9ybWF0dGluZ1Rlc3QgaW1wbGVtZW50cyBUZXN0SW50ZXJmYWNlPFN0cmluZywgSW50ZWdlcj4ge1xuIiArCisgICAgICAiXG4iICsKKyAgICAgICIgICAgcHVibGljIDxYLCBZPiB2b2lkIGZvbyhYIHgsIFkgeSkge1xuIiArCisgICAgICAiICAgICAgICBNYXA8U3RyaW5nLCBJbnRlZ2VyPiBtYXAgPSBuZXcgSGFzaE1hcDxTdHJpbmcsIEludGVnZXI+KCk7XG4iICsKKyAgICAgICIgICAgfVxuIiArCisgICAgICAifSI7CisgICAgZG9UZXh0VGVzdChpbml0aWFsLCBmb3JtYXR0ZWQpOyAvLyBFeHBlY3QgdGhlIGNvbW1hIHRvIGJlIGluc2VydGVkIGJldHdlZW4gdHlwZSBhcmd1bWVudHMKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RVbmFyeU9wZXJhdG9ycygpIHsKKyAgICAvLyBJbnNwaXJlZCBieSBJREVBLTUyMTI3CisgICAgZ2V0U2V0dGluZ3MoKS5TUEFDRV9BUk9VTkRfVU5BUllfT1BFUkFUT1IgPSBmYWxzZTsKKworICAgIFN0cmluZyBpbml0aWFsID0KKyAgICAgICJwdWJsaWMgY2xhc3MgRm9ybWF0dGluZ1Rlc3Qge1xuIiArCisgICAgICAiICAgIHB1YmxpYyB2b2lkIGZvbygpIHtcbiIgKworICAgICAgIiAgICAgICAgaW50IGkgPSAxO1xuIiArCisgICAgICAiICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oLWkpO1xuIiArCisgICAgICAiICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oK2kpO1xuIiArCisgICAgICAiICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oKytpKTtcbiIgKworICAgICAgIiAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKGkrKyk7XG4iICsKKyAgICAgICIgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigtLWkpO1xuIiArCisgICAgICAiICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oaS0tKTtcbiIgKworICAgICAgIiAgICAgICAgYm9vbGVhbiBiID0gdHJ1ZTtcbiIgKworICAgICAgIiAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCFiKTtcbiIgKworICAgICAgIiAgICB9XG4iICsKKyAgICAgICJ9IjsKKworICAgIGRvVGV4dFRlc3QoaW5pdGlhbCwgaW5pdGlhbCk7IC8vIERvbid0IGV4cGVjdCBzcGFjZXMgdG8gYmUgaW5zZXJ0ZWQgYWZ0ZXIgdW5hcnkgb3BlcmF0b3JzCisKKyAgICBnZXRTZXR0aW5ncygpLlNQQUNFX0FST1VORF9VTkFSWV9PUEVSQVRPUiA9IHRydWU7CisgICAgU3RyaW5nIGZvcm1hdHRlZCA9CisgICAgICAicHVibGljIGNsYXNzIEZvcm1hdHRpbmdUZXN0IHtcbiIgKworICAgICAgIiAgICBwdWJsaWMgdm9pZCBmb28oKSB7XG4iICsKKyAgICAgICIgICAgICAgIGludCBpID0gMTtcbiIgKworICAgICAgIiAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKC0gaSk7XG4iICsKKyAgICAgICIgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigrIGkpO1xuIiArCisgICAgICAiICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oKysgaSk7XG4iICsKKyAgICAgICIgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihpKyspO1xuIiArCisgICAgICAiICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oLS0gaSk7XG4iICsKKyAgICAgICIgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihpLS0pO1xuIiArCisgICAgICAiICAgICAgICBib29sZWFuIGIgPSB0cnVlO1xuIiArCisgICAgICAiICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oISBiKTtcbiIgKworICAgICAgIiAgICB9XG4iICsKKyAgICAgICJ9IjsKKyAgICBkb1RleHRUZXN0KGluaXRpYWwsIGZvcm1hdHRlZCk7IC8vIEV4cGVjdCBzcGFjZXMgdG8gYmUgaW5zZXJ0ZWQgYWZ0ZXIgdW5hcnkgb3BlcmF0b3JzCisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0SmF2YWRvY01ldGhvZFBhcmFtcygpIHsKKyAgICAvLyBJbnNwaXJlZCBieSBJREVBLTQyMTY3CisgICAgZ2V0U2V0dGluZ3MoKS5TUEFDRV9BRlRFUl9DT01NQSA9IGZhbHNlOworCisgICAgU3RyaW5nIGluaXRpYWwgPQorICAgICAgInB1YmxpYyBjbGFzcyBGb3JtYXR0aW5nVGVzdCB7XG4iICsKKyAgICAgICIgICAgLyoqXG4iICsKKyAgICAgICIgICAgICogVGhpcyBpcyBhIGNvbnZlbmllbmNlIG1ldGhvZCBmb3Ige0Bjb2RlIGRvVGVzdCh0ZXN0LCAgIG5ldyAgICAgIE9iamVjdFswXSk7fVxuIiArCisgICAgICAiICAgICAqL1xuIiArCisgICAgICAiICAgIHZvaWQgZG9UZXN0KCkge1xuIiArCisgICAgICAiICAgIH1cbiIgKworICAgICAgIn0iOworCisgICAgLy8gRXhwZWN0IHNpbmdsZSBzcGFjZSB0byBsZWZ0IGJldHdlZW4gJ25ldycgYW5kIE9iamVjdFswXS4KKyAgICBkb1RleHRUZXN0KGluaXRpYWwsCisgICAgICAicHVibGljIGNsYXNzIEZvcm1hdHRpbmdUZXN0IHtcbiIgKworICAgICAgIiAgICAvKipcbiIgKworICAgICAgIiAgICAgKiBUaGlzIGlzIGEgY29udmVuaWVuY2UgbWV0aG9kIGZvciB7QGNvZGUgZG9UZXN0KHRlc3QsbmV3IE9iamVjdFswXSk7fVxuIiArCisgICAgICAiICAgICAqL1xuIiArCisgICAgICAiICAgIHZvaWQgZG9UZXN0KCkge1xuIiArCisgICAgICAiICAgIH1cbiIgKworICAgICAgIn0iKTsKKworICAgIC8vIEV4cGVjdCBzcGFjZSB0byBiZSBpbnNlcnRlZCBiZXR3ZWVuICcsJyBhbmQgJ25ldycuCisgICAgZ2V0U2V0dGluZ3MoKS5TUEFDRV9BRlRFUl9DT01NQSA9IHRydWU7CisgICAgZG9UZXh0VGVzdChpbml0aWFsLAorICAgICAgInB1YmxpYyBjbGFzcyBGb3JtYXR0aW5nVGVzdCB7XG4iICsKKyAgICAgICIgICAgLyoqXG4iICsKKyAgICAgICIgICAgICogVGhpcyBpcyBhIGNvbnZlbmllbmNlIG1ldGhvZCBmb3Ige0Bjb2RlIGRvVGVzdCh0ZXN0LCBuZXcgT2JqZWN0WzBdKTt9XG4iICsKKyAgICAgICIgICAgICovXG4iICsKKyAgICAgICIgICAgdm9pZCBkb1Rlc3QoKSB7XG4iICsKKyAgICAgICIgICAgfVxuIiArCisgICAgICAifSIpOworCisgICAgLy8gRXhwZWN0IHNwYWNlIHRvIGJlIGluc2VydGVkIGJldHdlZW4gJ3Rlc3QnIGFuZCAnLCcuCisgICAgZ2V0U2V0dGluZ3MoKS5TUEFDRV9CRUZPUkVfQ09NTUEgPSB0cnVlOworICAgIGRvVGV4dFRlc3QoaW5pdGlhbCwKKyAgICAgICJwdWJsaWMgY2xhc3MgRm9ybWF0dGluZ1Rlc3Qge1xuIiArCisgICAgICAiICAgIC8qKlxuIiArCisgICAgICAiICAgICAqIFRoaXMgaXMgYSBjb252ZW5pZW5jZSBtZXRob2QgZm9yIHtAY29kZSBkb1Rlc3QodGVzdCAsIG5ldyBPYmplY3RbMF0pO31cbiIgKworICAgICAgIiAgICAgKi9cbiIgKworICAgICAgIiAgICB2b2lkIGRvVGVzdCgpIHtcbiIgKworICAgICAgIiAgICB9XG4iICsKKyAgICAgICJ9Iik7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0U3BhY2VXaXRoQXJyYXlCcmFja2V0cygpIHRocm93cyBFeGNlcHRpb24geworICAgIC8vIEluc3BpcmVkIGJ5IElERUEtNTg1MTAKKyAgICBnZXRTZXR0aW5ncygpLlNQQUNFX1dJVEhJTl9CUkFDS0VUUyA9IHRydWU7CisgICAgZG9NZXRob2RUZXN0KAorICAgICAgImludFtdIGkgPSBuZXcgaW50WzFdXG4iICsKKyAgICAgICJpWzBdID0gMTtcbiIgKworICAgICAgImludFtdIGkyID0gbmV3IGludFtdezF9IiwKKyAgICAgICJpbnRbXSBpID0gbmV3IGludFsgMSBdXG4iICsKKyAgICAgICJpWyAwIF0gPSAxO1xuIiArCisgICAgICAiaW50W10gaTIgPSBuZXcgaW50W117MX0iCisgICAgKTsKKyAgfQorICAKKyAgcHVibGljIHZvaWQgdGVzdFNwYWNlQmVmb3JlRWxzZSgpIHRocm93cyBFeGNlcHRpb24geworICAgIC8vIEluc3BpcmVkIGJ5IElERUEtNTgwNjgKKyAgICBnZXRTZXR0aW5ncygpLkVMU0VfT05fTkVXX0xJTkUgPSBmYWxzZTsKKyAgICAKKyAgICBnZXRTZXR0aW5ncygpLlNQQUNFX0JFRk9SRV9FTFNFX0tFWVdPUkQgPSBmYWxzZTsKKyAgICBkb01ldGhvZFRlc3QoCisgICAgICAiaWYgKHRydWUpIHtcbiIgKworICAgICAgIn0gZWxzZSB7XG4iICsKKyAgICAgICJ9IiwKKyAgICAgICJpZiAodHJ1ZSkge1xuIiArCisgICAgICAifWVsc2Uge1xuIiArCisgICAgICAifSIKKyAgICApOworCisgICAgZ2V0U2V0dGluZ3MoKS5TUEFDRV9CRUZPUkVfRUxTRV9LRVlXT1JEID0gdHJ1ZTsKKyAgICBkb01ldGhvZFRlc3QoCisgICAgICAiaWYgKHRydWUpIHtcbiIgKworICAgICAgIn1lbHNlIHtcbiIgKworICAgICAgIn0iLAorICAgICAgImlmICh0cnVlKSB7XG4iICsKKyAgICAgICJ9IGVsc2Uge1xuIiArCisgICAgICAifSIKKyAgICApOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFNwYWNlQmVmb3JlV2hpbGUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAvLyBJbnNwaXJlZCBieSBJREVBLTU4MDY4CisgICAgZ2V0U2V0dGluZ3MoKS5XSElMRV9PTl9ORVdfTElORSA9IGZhbHNlOworCisgICAgZ2V0U2V0dGluZ3MoKS5TUEFDRV9CRUZPUkVfV0hJTEVfS0VZV09SRCA9IGZhbHNlOworICAgIGRvTWV0aG9kVGVzdCgKKyAgICAgICJkbyB7XG4iICsKKyAgICAgICJ9IHdoaWxlICh0cnVlKTsiLAorICAgICAgImRvIHtcbiIgKworICAgICAgIn13aGlsZSAodHJ1ZSk7IgorICAgICk7CisKKyAgICBnZXRTZXR0aW5ncygpLlNQQUNFX0JFRk9SRV9XSElMRV9LRVlXT1JEID0gdHJ1ZTsKKyAgICBkb01ldGhvZFRlc3QoCisgICAgICAiZG8ge1xuIiArCisgICAgICAifXdoaWxlICh0cnVlKTsiLAorICAgICAgImRvIHtcbiIgKworICAgICAgIn0gd2hpbGUgKHRydWUpOyIKKyAgICApOworICB9CisKKyAgCisgIHB1YmxpYyB2b2lkIHRlc3RTcGFjZUJlZm9yZUNhdGNoKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgLy8gSW5zcGlyZWQgYnkgSURFQS01ODA2OAorICAgIGdldFNldHRpbmdzKCkuQ0FUQ0hfT05fTkVXX0xJTkUgPSBmYWxzZTsKKworICAgIGdldFNldHRpbmdzKCkuU1BBQ0VfQkVGT1JFX0NBVENIX0tFWVdPUkQgPSBmYWxzZTsKKyAgICBkb01ldGhvZFRlc3QoCisgICAgICAidHJ5IHtcbiIgKworICAgICAgIn0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7XG4iICsKKyAgICAgICJ9IiwKKyAgICAgICJ0cnkge1xuIiArCisgICAgICAifWNhdGNoIChFeGNlcHRpb24gZSkge1xuIiArCisgICAgICAifSIKKyAgICApOworCisgICAgZ2V0U2V0dGluZ3MoKS5TUEFDRV9CRUZPUkVfQ0FUQ0hfS0VZV09SRCA9IHRydWU7CisgICAgZG9NZXRob2RUZXN0KAorICAgICAgInRyeSB7XG4iICsKKyAgICAgICJ9Y2F0Y2ggKEV4Y2VwdGlvbiBlKSB7XG4iICsKKyAgICAgICJ9IiwKKyAgICAgICJ0cnkge1xuIiArCisgICAgICAifSBjYXRjaCAoRXhjZXB0aW9uIGUpIHtcbiIgKworICAgICAgIn0iCisgICAgKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RTcGFjZUJlZm9yZUZpbmFsbHkoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAvLyBJbnNwaXJlZCBieSBJREVBLTU4MDY4CisgICAgZ2V0U2V0dGluZ3MoKS5GSU5BTExZX09OX05FV19MSU5FID0gZmFsc2U7CisKKyAgICBnZXRTZXR0aW5ncygpLlNQQUNFX0JFRk9SRV9GSU5BTExZX0tFWVdPUkQgPSBmYWxzZTsKKyAgICBkb01ldGhvZFRlc3QoCisgICAgICAidHJ5IHtcbiIgKworICAgICAgIn0gZmluYWxseSB7XG4iICsKKyAgICAgICJ9IiwKKyAgICAgICJ0cnkge1xuIiArCisgICAgICAifWZpbmFsbHkge1xuIiArCisgICAgICAifSIKKyAgICApOworCisgICAgZ2V0U2V0dGluZ3MoKS5TUEFDRV9CRUZPUkVfRklOQUxMWV9LRVlXT1JEID0gdHJ1ZTsKKyAgICBkb01ldGhvZFRlc3QoCisgICAgICAidHJ5IHtcbiIgKworICAgICAgIn1maW5hbGx5IHtcbiIgKworICAgICAgIn0iLAorICAgICAgInRyeSB7XG4iICsKKyAgICAgICJ9IGZpbmFsbHkge1xuIiArCisgICAgICAifSIKKyAgICApOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEVtcHR5SXRlcmF0aW9uQXRGb3IoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAvLyBJbnNwaXJlZCBieSBJREVBLTU4MjkzCisKKyAgICBnZXRTZXR0aW5ncygpLlNQQUNFX0FGVEVSX1NFTUlDT0xPTiA9IHRydWU7CisgICAgZ2V0U2V0dGluZ3MoKS5TUEFDRV9XSVRISU5fRk9SX1BBUkVOVEhFU0VTID0gZmFsc2U7CisgICAgCisgICAgZG9NZXRob2RUZXN0KAorICAgICAgImZvciAoICAgOyA7ICAgICAgICAgKSIsCisgICAgICAiZm9yICg7IDsgKSIKKyAgICApOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFNwYWNlc0luRGlzanVuY3RpdmVUeXBlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZ2V0U2V0dGluZ3MoKS5LRUVQX1NJTVBMRV9CTE9DS1NfSU5fT05FX0xJTkUgPSB0cnVlOworICAgIGdldFNldHRpbmdzKCkuQ0FUQ0hfT05fTkVXX0xJTkUgPSBmYWxzZTsKKworICAgIGdldFNldHRpbmdzKCkuU1BBQ0VfQVJPVU5EX0JJVFdJU0VfT1BFUkFUT1JTID0gdHJ1ZTsKKyAgICBkb01ldGhvZFRlc3QoInRyeSB7IH0gY2F0Y2ggKEUxfEUyIGUpIHsgfSIsCisgICAgICAgICAgICAgICAgICJ0cnkgeyB9IGNhdGNoIChFMSB8IEUyIGUpIHsgfSIpOworCisgICAgZ2V0U2V0dGluZ3MoKS5TUEFDRV9BUk9VTkRfQklUV0lTRV9PUEVSQVRPUlMgPSBmYWxzZTsKKyAgICBkb01ldGhvZFRlc3QoInRyeSB7IH0gY2F0Y2ggKEUxIHwgRTIgZSkgeyB9IiwKKyAgICAgICAgICAgICAgICAgInRyeSB7IH0gY2F0Y2ggKEUxfEUyIGUpIHsgfSIpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFNwYWNlc0luc2lkZUxhbWJkYSgpIHRocm93cyBFeGNlcHRpb24geworICAgIGdldFNldHRpbmdzKCkuS0VFUF9TSU1QTEVfQkxPQ0tTX0lOX09ORV9MSU5FID0gdHJ1ZTsKKyAgICBnZXRTZXR0aW5ncygpLlNQQUNFX0FST1VORF9MQU1CREFfQVJST1cgPSB0cnVlOworCisgICAgZG9NZXRob2RUZXN0KCIoKS0+e30iLAorICAgICAgICAgICAgICAgICAiKCkgLT4ge30iKTsKKworICAgIGdldFNldHRpbmdzKCkuU1BBQ0VfQVJPVU5EX0xBTUJEQV9BUlJPVyA9IGZhbHNlOworICAgIGRvTWV0aG9kVGVzdCgiKCkgLT4ge30iLAorICAgICAgICAgICAgICAgICAiKCktPnt9Iik7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0U3BhY2VzSW5zaWRlTWV0aG9kUmVmKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZ2V0U2V0dGluZ3MoKS5TUEFDRV9BUk9VTkRfTUVUSE9EX1JFRl9EQkxfQ09MT04gPSB0cnVlOworCisgICAgZG9NZXRob2RUZXN0KCJSdW5uYWJsZSByID0gdGhpczo6Zm9vIiwKKyAgICAgICAgICAgICAgICAgIlJ1bm5hYmxlIHIgPSB0aGlzIDo6IGZvbyIpOworCisgICAgZ2V0U2V0dGluZ3MoKS5TUEFDRV9BUk9VTkRfTUVUSE9EX1JFRl9EQkxfQ09MT04gPSBmYWxzZTsKKyAgICBkb01ldGhvZFRlc3QoIlJ1bm5hYmxlIHIgPSB0aGlzOjpmb28iLAorICAgICAgICAgICAgICAgICAiUnVubmFibGUgciA9IHRoaXM6OmZvbyIpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFNwYWNlc0JlZm9yZVJlc291cmNlTGlzdCgpIHRocm93cyBFeGNlcHRpb24geworICAgIGdldFNldHRpbmdzKCkuS0VFUF9TSU1QTEVfQkxPQ0tTX0lOX09ORV9MSU5FID0gdHJ1ZTsKKyAgICBnZXRTZXR0aW5ncygpLkJSQUNFX1NUWUxFID0gQ29tbW9uQ29kZVN0eWxlU2V0dGluZ3MuTkVYVF9MSU5FOworCisgICAgZ2V0U2V0dGluZ3MoKS5TUEFDRV9CRUZPUkVfVFJZX1BBUkVOVEhFU0VTID0gdHJ1ZTsKKyAgICBnZXRTZXR0aW5ncygpLlNQQUNFX0JFRk9SRV9UUllfTEJSQUNFID0gdHJ1ZTsKKyAgICBkb01ldGhvZFRlc3QoInRyeShBdXRvQ2xvc2VhYmxlIHIgPSBudWxsKXsgfSIsCisgICAgICAgICAgICAgICAgICJ0cnkgKEF1dG9DbG9zZWFibGUgciA9IG51bGwpIHsgfSIpOworCisgICAgZ2V0U2V0dGluZ3MoKS5TUEFDRV9CRUZPUkVfVFJZX1BBUkVOVEhFU0VTID0gZmFsc2U7CisgICAgZ2V0U2V0dGluZ3MoKS5TUEFDRV9CRUZPUkVfVFJZX0xCUkFDRSA9IGZhbHNlOworICAgIGRvTWV0aG9kVGVzdCgidHJ5IChBdXRvQ2xvc2VhYmxlIHIgPSBudWxsKSB7IH0iLAorICAgICAgICAgICAgICAgICAidHJ5KEF1dG9DbG9zZWFibGUgciA9IG51bGwpeyB9Iik7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0U3BhY2VzV2l0aGluUmVzb3VyY2VMaXN0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZ2V0U2V0dGluZ3MoKS5LRUVQX1NJTVBMRV9CTE9DS1NfSU5fT05FX0xJTkUgPSB0cnVlOworCisgICAgZ2V0U2V0dGluZ3MoKS5TUEFDRV9XSVRISU5fVFJZX1BBUkVOVEhFU0VTID0gZmFsc2U7CisgICAgZG9NZXRob2RUZXN0KCJ0cnkgKCAgUiByID0gbnVsbCAgKSB7IH0iLAorICAgICAgICAgICAgICAgICAidHJ5IChSIHIgPSBudWxsKSB7IH0iKTsKKyAgICBnZXRTZXR0aW5ncygpLlNQQUNFX0FGVEVSX1NFTUlDT0xPTiA9IGZhbHNlOworICAgIGRvTWV0aG9kVGVzdCgidHJ5ICggIFIgcjEgPSBudWxsICAgIDsgUiByMiA9IG51bGw7ICkgeyB9IiwKKyAgICAgICAgICAgICAgICAgInRyeSAoUiByMSA9IG51bGw7UiByMiA9IG51bGw7KSB7IH0iKTsKKworICAgIGdldFNldHRpbmdzKCkuU1BBQ0VfV0lUSElOX1RSWV9QQVJFTlRIRVNFUyA9IHRydWU7CisgICAgZG9NZXRob2RUZXN0KCJ0cnkgKFIgciA9IG51bGwpIHsgfSIsCisgICAgICAgICAgICAgICAgICJ0cnkgKCBSIHIgPSBudWxsICkgeyB9Iik7CisgICAgZ2V0U2V0dGluZ3MoKS5TUEFDRV9BRlRFUl9TRU1JQ09MT04gPSB0cnVlOworICAgIGRvTWV0aG9kVGVzdCgidHJ5IChSIHIxID0gbnVsbCAgICA7IFIgcjIgPSBudWxsOykgeyB9IiwKKyAgICAgICAgICAgICAgICAgInRyeSAoIFIgcjEgPSBudWxsOyBSIHIyID0gbnVsbDsgKSB7IH0iKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RTcGFjZXNCZXR3ZWVuUmVzb3VyY2VzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZ2V0U2V0dGluZ3MoKS5LRUVQX1NJTVBMRV9CTE9DS1NfSU5fT05FX0xJTkUgPSB0cnVlOworCisgICAgZ2V0U2V0dGluZ3MoKS5TUEFDRV9CRUZPUkVfU0VNSUNPTE9OID0gZmFsc2U7CisgICAgZ2V0U2V0dGluZ3MoKS5TUEFDRV9BRlRFUl9TRU1JQ09MT04gPSB0cnVlOworICAgIGRvTWV0aG9kVGVzdCgidHJ5IChSIHIxID0gbnVsbCAgICA7IFIgcjIgPSBudWxsOykgeyB9IiwKKyAgICAgICAgICAgICAgICAgInRyeSAoUiByMSA9IG51bGw7IFIgcjIgPSBudWxsOykgeyB9Iik7CisKKyAgICBnZXRTZXR0aW5ncygpLlNQQUNFX0JFRk9SRV9TRU1JQ09MT04gPSB0cnVlOworICAgIGdldFNldHRpbmdzKCkuU1BBQ0VfQUZURVJfU0VNSUNPTE9OID0gZmFsc2U7CisgICAgZG9NZXRob2RUZXN0KCJ0cnkgKFIgcjEgPSBudWxsOyAgIFIgcjIgPSBudWxsOykgeyB9IiwKKyAgICAgICAgICAgICAgICAgInRyeSAoUiByMSA9IG51bGwgO1IgcjIgPSBudWxsIDspIHsgfSIpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFNwYWNlc0luUmVzb3VyY2VBc3NpZ25tZW50KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZ2V0U2V0dGluZ3MoKS5LRUVQX1NJTVBMRV9CTE9DS1NfSU5fT05FX0xJTkUgPSB0cnVlOworCisgICAgZ2V0U2V0dGluZ3MoKS5TUEFDRV9BUk9VTkRfQVNTSUdOTUVOVF9PUEVSQVRPUlMgPSB0cnVlOworICAgIGRvTWV0aG9kVGVzdCgidHJ5IChSIHI9bnVsbCkgeyB9IiwKKyAgICAgICAgICAgICAgICAgInRyeSAoUiByID0gbnVsbCkgeyB9Iik7CisKKyAgICBnZXRTZXR0aW5ncygpLlNQQUNFX0FST1VORF9BU1NJR05NRU5UX09QRVJBVE9SUyA9IGZhbHNlOworICAgIGRvTWV0aG9kVGVzdCgidHJ5IChSIHIgPSAgbnVsbCkgeyB9IiwKKyAgICAgICAgICAgICAgICAgInRyeSAoUiByPW51bGwpIHsgfSIpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEJldHdlZW5NZXRob2RDYWxsQXJndW1lbnRzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgLy8gSW5zcGlyZWQgYnkgSURFQS03MTgyMworICAgIGdldFNldHRpbmdzKCkuU1BBQ0VfQUZURVJfQ09NTUEgPSBmYWxzZTsKKyAgICAKKyAgICBkb01ldGhvZFRlc3QoCisgICAgICAiZm9vKDEsIDIsIDMpOyIsCisgICAgICAiZm9vKDEsMiwzKTsiCisgICAgKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RCZWZvcmVBbm9ueW1vdXNDbGFzc0NvbnN0cnVjdG9yKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgLy8gSW5zcGlyZWQgYnkgSURFQS03MjMyMS4KKyAgICBnZXRTZXR0aW5ncygpLlNQQUNFX0JFRk9SRV9NRVRIT0RfQ0FMTF9QQVJFTlRIRVNFUyA9IHRydWU7CisgICAgCisgICAgZG9NZXRob2RUZXN0KAorICAgICAgImFjdGlvbnMuYWRkKG5ldyBBY3Rpb24odGhpcykge1xuIiArCisgICAgICAiICAgIHB1YmxpYyB2b2lkIHJ1bigpIHtcbiIgKworICAgICAgIiAgICB9XG4iICsKKyAgICAgICJ9KTsiLAorICAgICAgImFjdGlvbnMuYWRkIChuZXcgQWN0aW9uICh0aGlzKSB7XG4iICsKKyAgICAgICIgICAgcHVibGljIHZvaWQgcnVuKCkge1xuIiArCisgICAgICAiICAgIH1cbiIgKworICAgICAgIn0pOyIKKyAgICApOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEJlZm9yZUFubm90YXRpb25BcnJheUluaXRpYWxpemVyKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgLy8gSW5zcGlyZWQgYnkgSURFQS03MjMxNworICAgIGdldFNldHRpbmdzKCkuU1BBQ0VfQkVGT1JFX0FSUkFZX0lOSVRJQUxJWkVSX0xCUkFDRSA9IGZhbHNlOworICAgIGdldFNldHRpbmdzKCkuU1BBQ0VfQkVGT1JFX0FOTk9UQVRJT05fQVJSQVlfSU5JVElBTElaRVJfTEJSQUNFID0gdHJ1ZTsKKyAgICAKKyAgICBkb0NsYXNzVGVzdCgKKyAgICAgICJAU3VwcHJlc3NXYXJuaW5ncyh7XCJIYXJkQ29kZWRTdHJpbmdMaXRlcmFsXCJ9KVxuIiArCisgICAgICAidm9pZCB0ZXN0KCkge1xuIiArCisgICAgICAiICAgIGludFtdIGRhdGEgPSBuZXcgaW50W10gezEsIDIsIDN9O1xuIiArCisgICAgICAifSIsCisgICAgICAiQFN1cHByZXNzV2FybmluZ3MoIHtcIkhhcmRDb2RlZFN0cmluZ0xpdGVyYWxcIn0pXG4iICsKKyAgICAgICJ2b2lkIHRlc3QoKSB7XG4iICsKKyAgICAgICIgICAgaW50W10gZGF0YSA9IG5ldyBpbnRbXXsxLCAyLCAzfTtcbiIgKworICAgICAgIn0iCisgICAgKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RCZXR3ZWVuUGFyZW50aGVzZXNPZk5vQXJnc01ldGhvZCgpIHRocm93cyBFeGNlcHRpb24geworICAgIC8vIEluc3BpcmVkIGJ5IElERUEtNzQ3NTEKKyAgICBnZXRTZXR0aW5ncygpLlNQQUNFX1dJVEhJTl9NRVRIT0RfQ0FMTF9QQVJFTlRIRVNFUyA9IGZhbHNlOworICAgIGdldFNldHRpbmdzKCkuU1BBQ0VfV0lUSElOX0VNUFRZX01FVEhPRF9DQUxMX1BBUkVOVEhFU0VTID0gZmFsc2U7CisgICAgZ2V0U2V0dGluZ3MoKS5TUEFDRV9XSVRISU5fTUVUSE9EX1BBUkVOVEhFU0VTID0gdHJ1ZTsKKyAgICBnZXRTZXR0aW5ncygpLlNQQUNFX1dJVEhJTl9FTVBUWV9NRVRIT0RfUEFSRU5USEVTRVMgPSB0cnVlOworICAgIGRvQ2xhc3NUZXN0KAorICAgICAgInZvaWQgdGVzdCgpIHtcbiIgKworICAgICAgIiAgICBmb28oKTtcbiIgKworICAgICAgIn0iLAorICAgICAgInZvaWQgdGVzdCggKSB7XG4iICsKKyAgICAgICIgICAgZm9vKCk7XG4iICsKKyAgICAgICJ9IgorICAgICk7CisKKyAgICBnZXRTZXR0aW5ncygpLlNQQUNFX1dJVEhJTl9NRVRIT0RfQ0FMTF9QQVJFTlRIRVNFUyA9IHRydWU7CisgICAgZ2V0U2V0dGluZ3MoKS5TUEFDRV9XSVRISU5fRU1QVFlfTUVUSE9EX0NBTExfUEFSRU5USEVTRVMgPSB0cnVlOworICAgIGdldFNldHRpbmdzKCkuU1BBQ0VfV0lUSElOX01FVEhPRF9QQVJFTlRIRVNFUyA9IGZhbHNlOworICAgIGdldFNldHRpbmdzKCkuU1BBQ0VfV0lUSElOX0VNUFRZX01FVEhPRF9QQVJFTlRIRVNFUyA9IGZhbHNlOworICAgIGRvQ2xhc3NUZXN0KAorICAgICAgInZvaWQgdGVzdCgpIHtcbiIgKworICAgICAgIiAgICBmb28oKTtcbiIgKworICAgICAgIn0iLAorICAgICAgInZvaWQgdGVzdCgpIHtcbiIgKworICAgICAgIiAgICBmb28oICk7XG4iICsKKyAgICAgICJ9IgorICAgICk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0SW5jb21wbGV0ZUNhc3RFeHByZXNzaW9uKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgLy8gSW5zcGlyZWQgYnkgSURFQS03NTA0My4KKyAgICBTdHJpbmcgdGV4dCA9ICJ2b2lkIHRlc3QoaW50IGkpIHtcbiIgKworICAgICAgICAgICAgICAgICAgIiAgICAoKCkgaSlcbiIgKworICAgICAgICAgICAgICAgICAgIn0iOworICAgIGRvQ2xhc3NUZXN0KHRleHQsIHRleHQpOworICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovcHNpL2Zvcm1hdHRlci9qYXZhL0phdmFGb3JtYXR0ZXJUZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovcHNpL2Zvcm1hdHRlci9qYXZhL0phdmFGb3JtYXR0ZXJUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzUwNDM2YgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9wc2kvZm9ybWF0dGVyL2phdmEvSmF2YUZvcm1hdHRlclRlc3QuamF2YQpAQCAtMCwwICsxLDI5NjkgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwMC0yMDEyIEpldEJyYWlucyBzLnIuby4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCitwYWNrYWdlIGNvbS5pbnRlbGxpai5wc2kuZm9ybWF0dGVyLmphdmE7CisKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS5hcHBsaWNhdGlvbi5BcHBsaWNhdGlvbk1hbmFnZXI7CitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkuY29tbWFuZC5Db21tYW5kUHJvY2Vzc29yOworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLmZpbGVUeXBlcy5TdGRGaWxlVHlwZXM7CitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkucm9vdHMuTGFuZ3VhZ2VMZXZlbFByb2plY3RFeHRlbnNpb247CitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkudXRpbC5UZXh0UmFuZ2U7CitpbXBvcnQgY29tLmludGVsbGlqLnBvbS5qYXZhLkxhbmd1YWdlTGV2ZWw7CitpbXBvcnQgY29tLmludGVsbGlqLnBzaS4qOworaW1wb3J0IGNvbS5pbnRlbGxpai5wc2kuY29kZVN0eWxlLkNvZGVTdHlsZU1hbmFnZXI7CitpbXBvcnQgY29tLmludGVsbGlqLnBzaS5jb2RlU3R5bGUuQ29kZVN0eWxlU2V0dGluZ3M7CitpbXBvcnQgY29tLmludGVsbGlqLnBzaS5jb2RlU3R5bGUuQ29kZVN0eWxlU2V0dGluZ3NNYW5hZ2VyOworaW1wb3J0IGNvbS5pbnRlbGxpai5wc2kuY29kZVN0eWxlLkNvbW1vbkNvZGVTdHlsZVNldHRpbmdzOworaW1wb3J0IGNvbS5pbnRlbGxpai51dGlsLkluY29ycmVjdE9wZXJhdGlvbkV4Y2VwdGlvbjsKK2ltcG9ydCBvcmcuamV0YnJhaW5zLmFubm90YXRpb25zLk5vbk5sczsKKworCisvKioKKyAqIDxiPk5vdGU6PC9iPiB0aGlzIGNsYXNzIGlzIHRvbyBodWdlIGFuZCBoYXJkIHRvIHVzZS4gSXQncyB0ZXN0cyBhcmUgaW50ZW5kZWQgdG8gYmUgc3BsaXQgaW4gbXVsdGlwbGUgbW9yZSBmaW5lLWdyYWluZWQKKyAqIGphdmEgZm9ybWF0dGluZyB0ZXN0IGNsYXNzZXMuCisgKi8KK0BTdXBwcmVzc1dhcm5pbmdzKHsiRGVwcmVjYXRpb24ifSkKK3B1YmxpYyBjbGFzcyBKYXZhRm9ybWF0dGVyVGVzdCBleHRlbmRzIEFic3RyYWN0SmF2YUZvcm1hdHRlclRlc3QgeworCisgIHB1YmxpYyB2b2lkIHRlc3RGb3JFYWNoKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KCJGb3JFYWNoLmphdmEiLCAiRm9yRWFjaF9hZnRlci5qYXZhIik7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0RG91YmxlQ2FzdCgpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdCgiRG91YmxlQ2FzdC5qYXZhIiwgIkRvdWJsZUNhc3RfYWZ0ZXIuamF2YSIpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdDEoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBteVRleHRSYW5nZSA9IG5ldyBUZXh0UmFuZ2UoMzUsIDQ2KTsKKyAgICBkb1Rlc3QoIjEuamF2YSIsICIxX2FmdGVyLmphdmEiKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RMYWJlbDEoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBDb21tb25Db2RlU3R5bGVTZXR0aW5ncyBzZXR0aW5ncyA9IGdldFNldHRpbmdzKCk7CisKKyAgICBzZXR0aW5ncy5MQUJFTEVEX1NUQVRFTUVOVF9XUkFQID0gQ29tbW9uQ29kZVN0eWxlU2V0dGluZ3MuV1JBUF9BTFdBWVM7CisgICAgc2V0dGluZ3MuZ2V0Um9vdFNldHRpbmdzKCkuZ2V0SW5kZW50T3B0aW9ucyhTdGRGaWxlVHlwZXMuSkFWQSkuTEFCRUxfSU5ERU5UX0FCU09MVVRFID0gdHJ1ZTsKKyAgICBzZXR0aW5ncy5nZXRSb290U2V0dGluZ3MoKS5nZXRJbmRlbnRPcHRpb25zKFN0ZEZpbGVUeXBlcy5KQVZBKS5MQUJFTF9JTkRFTlRfU0laRSA9IDA7CisKKyAgICBkb1Rlc3QoIkxhYmVsLmphdmEiLCAiTGFiZWxfYWZ0ZXIxLmphdmEiKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RUcnlDYXRjaCgpIHRocm93cyBFeGNlcHRpb24geworICAgIG15VGV4dFJhbmdlID0gbmV3IFRleHRSYW5nZSgzOCwgNzIpOworICAgIGRvVGVzdCgiVHJ5Q2F0Y2guamF2YSIsICJUcnlDYXRjaF9hZnRlci5qYXZhIik7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0TnVsbE1ldGhvZFBhcmFtZXRlcigpIHRocm93cyBFeGNlcHRpb24geworICAgIGZpbmFsIENvbW1vbkNvZGVTdHlsZVNldHRpbmdzIHNldHRpbmdzID0gZ2V0U2V0dGluZ3MoKTsKKyAgICBzZXR0aW5ncy5DQUxMX1BBUkFNRVRFUlNfV1JBUCA9IENvbW1vbkNvZGVTdHlsZVNldHRpbmdzLldSQVBfQUxXQVlTOworICAgIHNldHRpbmdzLkFMSUdOX01VTFRJTElORV9QQVJBTUVURVJTX0lOX0NBTExTID0gdHJ1ZTsKKyAgICBkb1Rlc3QoIk51bGxNZXRob2RQYXJhbWV0ZXIuamF2YSIsICJOdWxsTWV0aG9kUGFyYW1ldGVyX2FmdGVyLmphdmEiKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3ROZXcoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBmaW5hbCBDb21tb25Db2RlU3R5bGVTZXR0aW5ncyBzZXR0aW5ncyA9IGdldFNldHRpbmdzKCk7CisgICAgc2V0dGluZ3MuZ2V0Um9vdFNldHRpbmdzKCkuZ2V0SW5kZW50T3B0aW9ucyhTdGRGaWxlVHlwZXMuSkFWQSkuQ09OVElOVUFUSU9OX0lOREVOVF9TSVpFID0gODsKKyAgICBkb1Rlc3QoIk5ldy5qYXZhIiwgIk5ld19hZnRlci5qYXZhIik7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0SmF2YURvYygpIHRocm93cyBFeGNlcHRpb24geworICAgIGZpbmFsIENvbW1vbkNvZGVTdHlsZVNldHRpbmdzIHNldHRpbmdzID0gZ2V0U2V0dGluZ3MoKTsKKyAgICBzZXR0aW5ncy5CTEFOS19MSU5FU19BUk9VTkRfRklFTEQgPSAxOworICAgIGRvVGVzdCgiSmF2YURvYy5qYXZhIiwgIkphdmFEb2NfYWZ0ZXIuamF2YSIpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEJyZWFrSW5zaWRlSWYoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoIkJyZWFrSW5zaWRlSWYuamF2YSIsICJCcmVha0luc2lkZUlmX2FmdGVyLmphdmEiKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RBc3NlcnQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBMYW5ndWFnZUxldmVsUHJvamVjdEV4dGVuc2lvbi5nZXRJbnN0YW5jZShnZXRQcm9qZWN0KCkpLnNldExhbmd1YWdlTGV2ZWwoTGFuZ3VhZ2VMZXZlbC5ISUdIRVNUKTsKKyAgICBkb1Rlc3QoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RDYXN0SW5zaWRlRWxzZSgpIHRocm93cyBFeGNlcHRpb24geworICAgIGZpbmFsIENvbW1vbkNvZGVTdHlsZVNldHRpbmdzIHNldHRpbmdzID0gZ2V0U2V0dGluZ3MoKTsKKyAgICBmaW5hbCBDb21tb25Db2RlU3R5bGVTZXR0aW5ncy5JbmRlbnRPcHRpb25zIGluZGVudE9wdGlvbnMgPSBzZXR0aW5ncy5nZXRSb290U2V0dGluZ3MoKS5nZXRJbmRlbnRPcHRpb25zKFN0ZEZpbGVUeXBlcy5KQVZBKTsKKyAgICBpbmRlbnRPcHRpb25zLkNPTlRJTlVBVElPTl9JTkRFTlRfU0laRSA9IDI7CisgICAgaW5kZW50T3B0aW9ucy5JTkRFTlRfU0laRSA9IDI7CisgICAgaW5kZW50T3B0aW9ucy5MQUJFTF9JTkRFTlRfU0laRSA9IDA7CisgICAgaW5kZW50T3B0aW9ucy5UQUJfU0laRSA9IDg7CisgICAgc2V0dGluZ3MuU1BBQ0VfV0lUSElOX0NBU1RfUEFSRU5USEVTRVMgPSBmYWxzZTsKKyAgICBzZXR0aW5ncy5TUEFDRV9BRlRFUl9UWVBFX0NBU1QgPSB0cnVlOworICAgIHNldHRpbmdzLkFMSUdOX01VTFRJTElORV9QQVJFTlRIRVNJWkVEX0VYUFJFU1NJT04gPSB0cnVlOworICAgIGRvVGVzdCgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEFsaWduTXVsdGlMaW5lKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZmluYWwgQ29tbW9uQ29kZVN0eWxlU2V0dGluZ3Mgc2V0dGluZ3MgPSBnZXRTZXR0aW5ncygpOworICAgIHNldHRpbmdzLkFMSUdOX01VTFRJTElORV9QQVJFTlRIRVNJWkVEX0VYUFJFU1NJT04gPSB0cnVlOworICAgIHNldHRpbmdzLkFMSUdOX01VTFRJTElORV9CSU5BUllfT1BFUkFUSU9OID0gdHJ1ZTsKKyAgICBkb1Rlc3QoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RJbm5lckNsYXNzQXNQYXJhbWV0ZXIoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RTeW5jaHJvbml6ZWRCbG9jaygpIHRocm93cyBFeGNlcHRpb24geworICAgIGZpbmFsIENvbW1vbkNvZGVTdHlsZVNldHRpbmdzIHNldHRpbmdzID0gZ2V0U2V0dGluZ3MoKTsKKyAgICBzZXR0aW5ncy5TUEFDRV9CRUZPUkVfU1lOQ0hST05JWkVEX1BBUkVOVEhFU0VTID0gZmFsc2U7CisgICAgc2V0dGluZ3MuU1BBQ0VfV0lUSElOX1NZTkNIUk9OSVpFRF9QQVJFTlRIRVNFUyA9IGZhbHNlOworICAgIHNldHRpbmdzLlNQQUNFX0JFRk9SRV9TWU5DSFJPTklaRURfTEJSQUNFID0gZmFsc2U7CisgICAgZG9UZXN0KCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0TWV0aG9kQ2FsbEluQXNzaWdubWVudCgpIHRocm93cyBFeGNlcHRpb24geworICAgIGZpbmFsIENvbW1vbkNvZGVTdHlsZVNldHRpbmdzIHNldHRpbmdzID0gZ2V0U2V0dGluZ3MoKTsKKyAgICBzZXR0aW5ncy5nZXRSb290U2V0dGluZ3MoKS5nZXRJbmRlbnRPcHRpb25zKFN0ZEZpbGVUeXBlcy5KQVZBKS5DT05USU5VQVRJT05fSU5ERU5UX1NJWkUgPSA4OworICAgIGRvVGVzdCgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEFub255bW91c0lubmVyQ2xhc3NlcygpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdCgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEFub255bW91c0lubmVyMigpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdCgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFdyYXBBc3NlcnRpb24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RJZkVsc2UoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBmaW5hbCBDb21tb25Db2RlU3R5bGVTZXR0aW5ncyBzZXR0aW5ncyA9IGdldFNldHRpbmdzKCk7CisgICAgc2V0dGluZ3MuSUZfQlJBQ0VfRk9SQ0UgPSBDb21tb25Db2RlU3R5bGVTZXR0aW5ncy5ET19OT1RfRk9SQ0U7CisgICAgc2V0dGluZ3MuRk9SX0JSQUNFX0ZPUkNFID0gQ29tbW9uQ29kZVN0eWxlU2V0dGluZ3MuRk9SQ0VfQlJBQ0VTX0lGX01VTFRJTElORTsKKyAgICBzZXR0aW5ncy5XSElMRV9CUkFDRV9GT1JDRSA9IENvbW1vbkNvZGVTdHlsZVNldHRpbmdzLkZPUkNFX0JSQUNFU19JRl9NVUxUSUxJTkU7CisgICAgc2V0dGluZ3MuRE9XSElMRV9CUkFDRV9GT1JDRSA9IENvbW1vbkNvZGVTdHlsZVNldHRpbmdzLkZPUkNFX0JSQUNFU19JRl9NVUxUSUxJTkU7CisKKyAgICBzZXR0aW5ncy5FTFNFX09OX05FV19MSU5FID0gdHJ1ZTsKKyAgICBzZXR0aW5ncy5TUEVDSUFMX0VMU0VfSUZfVFJFQVRNRU5UID0gZmFsc2U7CisgICAgc2V0dGluZ3MuV0hJTEVfT05fTkVXX0xJTkUgPSB0cnVlOworICAgIHNldHRpbmdzLkNBVENIX09OX05FV19MSU5FID0gdHJ1ZTsKKyAgICBzZXR0aW5ncy5GSU5BTExZX09OX05FV19MSU5FID0gdHJ1ZTsKKyAgICBzZXR0aW5ncy5BTElHTl9NVUxUSUxJTkVfQklOQVJZX09QRVJBVElPTiA9IHRydWU7CisgICAgc2V0dGluZ3MuQUxJR05fTVVMVElMSU5FX1RFUk5BUllfT1BFUkFUSU9OID0gdHJ1ZTsKKyAgICBzZXR0aW5ncy5BTElHTl9NVUxUSUxJTkVfQVNTSUdOTUVOVCA9IHRydWU7CisgICAgc2V0dGluZ3MuQUxJR05fTVVMVElMSU5FX0VYVEVORFNfTElTVCA9IHRydWU7CisgICAgc2V0dGluZ3MuQUxJR05fTVVMVElMSU5FX1RIUk9XU19MSVNUID0gdHJ1ZTsKKyAgICBzZXR0aW5ncy5BTElHTl9NVUxUSUxJTkVfUEFSRU5USEVTSVpFRF9FWFBSRVNTSU9OID0gdHJ1ZTsKKyAgICBzZXR0aW5ncy5BTElHTl9NVUxUSUxJTkVfRk9SID0gdHJ1ZTsKKyAgICBzZXR0aW5ncy5BTElHTl9NVUxUSUxJTkVfUEFSQU1FVEVSU19JTl9DQUxMUyA9IHRydWU7CisgICAgc2V0dGluZ3MuQUxJR05fTVVMVElMSU5FX1BBUkFNRVRFUlMgPSB0cnVlOworICAgIHNldHRpbmdzLktFRVBfU0lNUExFX0JMT0NLU19JTl9PTkVfTElORSA9IHRydWU7CisgICAgc2V0dGluZ3MuV0hJTEVfT05fTkVXX0xJTkUgPSB0cnVlOworICAgIHNldHRpbmdzLkJSQUNFX1NUWUxFID0gQ29tbW9uQ29kZVN0eWxlU2V0dGluZ3MuRU5EX09GX0xJTkU7CisgICAgZG9UZXN0KCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0SWZCcmFjZXMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBmaW5hbCBDb21tb25Db2RlU3R5bGVTZXR0aW5ncyBzZXR0aW5ncyA9IGdldFNldHRpbmdzKCk7CisgICAgc2V0dGluZ3MuSUZfQlJBQ0VfRk9SQ0UgPSBDb21tb25Db2RlU3R5bGVTZXR0aW5ncy5GT1JDRV9CUkFDRVNfQUxXQVlTOworICAgIHNldHRpbmdzLkJSQUNFX1NUWUxFID0gQ29tbW9uQ29kZVN0eWxlU2V0dGluZ3MuRU5EX09GX0xJTkU7CisgICAgc2V0dGluZ3MuS0VFUF9MSU5FX0JSRUFLUyA9IGZhbHNlOworICAgIGRvVGVzdCgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFRlcm5hcnlFeHByZXNzaW9uKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZmluYWwgQ29tbW9uQ29kZVN0eWxlU2V0dGluZ3Mgc2V0dGluZ3MgPSBnZXRTZXR0aW5ncygpOworICAgIHNldHRpbmdzLkFMSUdOX01VTFRJTElORV9URVJOQVJZX09QRVJBVElPTiA9IHRydWU7CisgICAgZG9UZXN0KCk7CisKKyAgICBzZXR0aW5ncy5BTElHTl9NVUxUSUxJTkVfVEVSTkFSWV9PUEVSQVRJT04gPSBmYWxzZTsKKyAgICBkb1Rlc3QoIlRlcm5hcnlFeHByZXNzaW9uLmphdmEiLCAiVGVybmFyeUV4cHJlc3Npb25fRG9Ob3RBbGlnbl9hZnRlci5qYXZhIik7CisKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RBbGlnbkFzc2lnbm1lbnQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBmaW5hbCBDb21tb25Db2RlU3R5bGVTZXR0aW5ncyBzZXR0aW5ncyA9IGdldFNldHRpbmdzKCk7CisgICAgc2V0dGluZ3MuQUxJR05fTVVMVElMSU5FX0FTU0lHTk1FTlQgPSB0cnVlOworICAgIHNldHRpbmdzLkFMSUdOX01VTFRJTElORV9CSU5BUllfT1BFUkFUSU9OID0gdHJ1ZTsKKyAgICBkb1Rlc3QoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RBbGlnbkZvcigpIHRocm93cyBFeGNlcHRpb24geworICAgIGZpbmFsIENvbW1vbkNvZGVTdHlsZVNldHRpbmdzIHNldHRpbmdzID0gZ2V0U2V0dGluZ3MoKTsKKyAgICBzZXR0aW5ncy5BTElHTl9NVUxUSUxJTkVfQklOQVJZX09QRVJBVElPTiA9IHRydWU7CisgICAgc2V0dGluZ3MuQUxJR05fTVVMVElMSU5FX0ZPUiA9IHRydWU7CisgICAgZG9UZXN0KCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0U3dpdGNoKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0Q29udGludWUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RJZigpIHRocm93cyBFeGNlcHRpb24geworICAgIGZpbmFsIENvbW1vbkNvZGVTdHlsZVNldHRpbmdzIHNldHRpbmdzID0gZ2V0U2V0dGluZ3MoKTsKKyAgICBzZXR0aW5ncy5CUkFDRV9TVFlMRSA9IENvbW1vbkNvZGVTdHlsZVNldHRpbmdzLk5FWFRfTElORTsKKyAgICBkb1Rlc3QoKTsKKyAgICBzZXR0aW5ncy5CUkFDRV9TVFlMRSA9IENvbW1vbkNvZGVTdHlsZVNldHRpbmdzLkVORF9PRl9MSU5FOworICAgIGRvVGVzdCgiSWYuamF2YSIsICJJZi5qYXZhIik7CisgICAgc2V0dGluZ3MuQlJBQ0VfU1RZTEUgPSBDb21tb25Db2RlU3R5bGVTZXR0aW5ncy5FTkRfT0ZfTElORTsKKyAgICBzZXR0aW5ncy5LRUVQX0xJTkVfQlJFQUtTID0gZmFsc2U7CisgICAgZG9UZXN0KCJJZl9hZnRlci5qYXZhIiwgIklmLmphdmEiKTsKKworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdDIoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBmaW5hbCBDb21tb25Db2RlU3R5bGVTZXR0aW5ncyBzZXR0aW5ncyA9IGdldFNldHRpbmdzKCk7CisgICAgc2V0dGluZ3MuQUxJR05fTVVMVElMSU5FX1BBUkFNRVRFUlNfSU5fQ0FMTFMgPSB0cnVlOworICAgIGRvVGVzdCgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEJsb2NrcygpIHRocm93cyBFeGNlcHRpb24geworICAgIGZpbmFsIENvbW1vbkNvZGVTdHlsZVNldHRpbmdzIHNldHRpbmdzID0gZ2V0U2V0dGluZ3MoKTsKKyAgICBzZXR0aW5ncy5LRUVQX0xJTkVfQlJFQUtTID0gZmFsc2U7CisgICAgZG9UZXN0KCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0QmluYXJ5T3BlcmF0aW9uKCkgdGhyb3dzIEluY29ycmVjdE9wZXJhdGlvbkV4Y2VwdGlvbiB7CisgICAgZmluYWwgQ29tbW9uQ29kZVN0eWxlU2V0dGluZ3Mgc2V0dGluZ3MgPSBnZXRTZXR0aW5ncygpOworCisgICAgQE5vbk5scyBTdHJpbmcgdGV4dCA9ICJjbGFzcyBGb28ge1xuIiArICIgICAgdm9pZCBmb28gKCkge1xuIiArICIgICAgICAgIHh4eCA9IGFhYSArIGJiYiBcbiIgKyAiICAgICAgICArIGNjYyArIGVlZSArIGRkZDtcbiIgKyAiICAgIH1cbiIgKyAifSI7CisKKworICAgIHNldHRpbmdzLkFMSUdOX01VTFRJTElORV9CSU5BUllfT1BFUkFUSU9OID0gdHJ1ZTsKKyAgICBzZXR0aW5ncy5BTElHTl9NVUxUSUxJTkVfQVNTSUdOTUVOVCA9IHRydWU7CisgICAgZG9UZXh0VGVzdCh0ZXh0LCAiY2xhc3MgRm9vIHtcbiIgKworICAgICAgICAgICAgICAgICAgICAgIiAgICB2b2lkIGZvbygpIHtcbiIgKworICAgICAgICAgICAgICAgICAgICAgIiAgICAgICAgeHh4ID0gYWFhICsgYmJiXG4iICsKKyAgICAgICAgICAgICAgICAgICAgICIgICAgICAgICAgICAgICsgY2NjICsgZWVlICsgZGRkO1xuIiArCisgICAgICAgICAgICAgICAgICAgICAiICAgIH1cbiIgKworICAgICAgICAgICAgICAgICAgICAgIn0iKTsKKworICAgIHNldHRpbmdzLkFMSUdOX01VTFRJTElORV9CSU5BUllfT1BFUkFUSU9OID0gdHJ1ZTsKKyAgICBzZXR0aW5ncy5BTElHTl9NVUxUSUxJTkVfQVNTSUdOTUVOVCA9IGZhbHNlOworICAgIGRvVGV4dFRlc3QodGV4dCwgImNsYXNzIEZvbyB7XG4iICsKKyAgICAgICAgICAgICAgICAgICAgICIgICAgdm9pZCBmb28oKSB7XG4iICsKKyAgICAgICAgICAgICAgICAgICAgICIgICAgICAgIHh4eCA9IGFhYSArIGJiYlxuIiArCisgICAgICAgICAgICAgICAgICAgICAiICAgICAgICAgICAgICArIGNjYyArIGVlZSArIGRkZDtcbiIgKworICAgICAgICAgICAgICAgICAgICAgIiAgICB9XG4iICsKKyAgICAgICAgICAgICAgICAgICAgICJ9Iik7CisKKworICAgIHNldHRpbmdzLkFMSUdOX01VTFRJTElORV9CSU5BUllfT1BFUkFUSU9OID0gZmFsc2U7CisgICAgc2V0dGluZ3MuQUxJR05fTVVMVElMSU5FX0FTU0lHTk1FTlQgPSB0cnVlOworICAgIGRvVGV4dFRlc3QodGV4dCwgImNsYXNzIEZvbyB7XG4iICsKKyAgICAgICAgICAgICAgICAgICAgICIgICAgdm9pZCBmb28oKSB7XG4iICsKKyAgICAgICAgICAgICAgICAgICAgICIgICAgICAgIHh4eCA9IGFhYSArIGJiYlxuIiArCisgICAgICAgICAgICAgICAgICAgICAiICAgICAgICAgICAgICAgICsgY2NjICsgZWVlICsgZGRkO1xuIiArCisgICAgICAgICAgICAgICAgICAgICAiICAgIH1cbiIgKworICAgICAgICAgICAgICAgICAgICAgIn0iKTsKKworCisgICAgc2V0dGluZ3MuQUxJR05fTVVMVElMSU5FX0FTU0lHTk1FTlQgPSBmYWxzZTsKKyAgICBzZXR0aW5ncy5BTElHTl9NVUxUSUxJTkVfQklOQVJZX09QRVJBVElPTiA9IGZhbHNlOworICAgIGRvVGV4dFRlc3QodGV4dCwgImNsYXNzIEZvbyB7XG4iICsKKyAgICAgICAgICAgICAgICAgICAgICIgICAgdm9pZCBmb28oKSB7XG4iICsKKyAgICAgICAgICAgICAgICAgICAgICIgICAgICAgIHh4eCA9IGFhYSArIGJiYlxuIiArCisgICAgICAgICAgICAgICAgICAgICAiICAgICAgICAgICAgICAgICsgY2NjICsgZWVlICsgZGRkO1xuIiArCisgICAgICAgICAgICAgICAgICAgICAiICAgIH1cbiIgKworICAgICAgICAgICAgICAgICAgICAgIn0iKTsKKworICAgIHNldHRpbmdzLkFMSUdOX01VTFRJTElORV9BU1NJR05NRU5UID0gZmFsc2U7CisgICAgc2V0dGluZ3MuQUxJR05fTVVMVElMSU5FX0JJTkFSWV9PUEVSQVRJT04gPSBmYWxzZTsKKworICAgIGRvVGV4dFRlc3QodGV4dCwgImNsYXNzIEZvbyB7XG4iICsKKyAgICAgICAgICAgICAgICAgICAgICIgICAgdm9pZCBmb28oKSB7XG4iICsKKyAgICAgICAgICAgICAgICAgICAgICIgICAgICAgIHh4eCA9IGFhYSArIGJiYlxuIiArCisgICAgICAgICAgICAgICAgICAgICAiICAgICAgICAgICAgICAgICsgY2NjICsgZWVlICsgZGRkO1xuIiArCisgICAgICAgICAgICAgICAgICAgICAiICAgIH1cbiIgKworICAgICAgICAgICAgICAgICAgICAgIn0iKTsKKworCisgICAgc2V0dGluZ3MuQUxJR05fTVVMVElMSU5FX0JJTkFSWV9PUEVSQVRJT04gPSB0cnVlOworCisgICAgZG9UZXh0VGVzdCgiY2xhc3MgRm9vIHtcbiIgKyAiICAgIHZvaWQgZm9vICgpIHtcbiIgKyAiICAgICAgICB4eHggPSBhYWEgKyBiYmIgXG4iICsgIiAgICAgICAgLSBjY2MgKyBlZWUgKyBkZGQ7XG4iICsgIiAgICB9XG4iICsgIn0iLAorICAgICAgICAgICAgICAgImNsYXNzIEZvbyB7XG4iICsKKyAgICAgICAgICAgICAgICIgICAgdm9pZCBmb28oKSB7XG4iICsKKyAgICAgICAgICAgICAgICIgICAgICAgIHh4eCA9IGFhYSArIGJiYlxuIiArCisgICAgICAgICAgICAgICAiICAgICAgICAgICAgICAtIGNjYyArIGVlZSArIGRkZDtcbiIgKworICAgICAgICAgICAgICAgIiAgICB9XG4iICsKKyAgICAgICAgICAgICAgICJ9Iik7CisKKyAgICBkb1RleHRUZXN0KCJjbGFzcyBGb28ge1xuIiArICIgICAgdm9pZCBmb28gKCkge1xuIiArICIgICAgICAgIHh4eCA9IGFhYSArIGJiYiBcbiIgKyAiICAgICAgICAqIGNjYyArIGVlZSArIGRkZDtcbiIgKyAiICAgIH1cbiIgKyAifSIsCisgICAgICAgICAgICAgICAiY2xhc3MgRm9vIHtcbiIgKworICAgICAgICAgICAgICAgIiAgICB2b2lkIGZvbygpIHtcbiIgKworICAgICAgICAgICAgICAgIiAgICAgICAgeHh4ID0gYWFhICsgYmJiXG4iICsKKyAgICAgICAgICAgICAgICIgICAgICAgICAgICAgICAgICAgICogY2NjICsgZWVlICsgZGRkO1xuIiArCisgICAgICAgICAgICAgICAiICAgIH1cbiIgKworICAgICAgICAgICAgICAgIn0iKTsKKworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFdoaWxlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXh0VGVzdCgiY2xhc3MgQXtcbiIgKyAidm9pZCBhKCl7XG4iICsgImRvIHgrKyB3aGlsZSAoYik7XG4iICsgIn1cbn0iLAorICAgICAgICAgICAgICAgImNsYXNzIEEge1xuIiArICIgICAgdm9pZCBhKCkge1xuIiArICIgICAgICAgIGRvIHgrKyB3aGlsZSAoYik7XG4iICsgIiAgICB9XG4iICsgIn0iKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RGb3IoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1RleHRUZXN0KCJjbGFzcyBBe1xuIiArICJ2b2lkIGIoKXtcbiIgKyAiZm9yIChjKSB7XG4iICsgImQoKTtcbiIgKyAifVxuIiArICJ9XG4iICsgIn0iLAorICAgICAgICAgICAgICAgImNsYXNzIEEge1xuIiArICIgICAgdm9pZCBiKCkge1xuIiArICIgICAgICAgIGZvciAoYykge1xuIiArICIgICAgICAgICAgICBkKCk7XG4iICsgIiAgICAgICAgfVxuIiArICIgICAgfVxuIiArICJ9Iik7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0Q2xhc3NDb21tZW50KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXh0VGVzdCgiLyoqXG4iICsKKyAgICAgICAgICAgICAgICAiKiBAYXV0aG9yIHNtYmRcbiIgKworICAgICAgICAgICAgICAgICIqIEBwYXJhbSA8VD4gc29tZSBwYXJhbVxuIiArCisgICAgICAgICAgICAgICAgIiogQHNpbmNlIDEuOVxuIiArCisgICAgICAgICAgICAgICAgIiovXG4iICsKKyAgICAgICAgICAgICAgICAiY2xhc3MgVGVzdDxUPnt9IiwKKyAgICAgICAgICAgICAgICIvKipcbiIgKworICAgICAgICAgICAgICAgICIgKiBAcGFyYW0gPFQ+IHNvbWUgcGFyYW1cbiIgKworICAgICAgICAgICAgICAgICIgKiBAYXV0aG9yIHNtYmRcbiIgKworICAgICAgICAgICAgICAgICIgKiBAc2luY2UgMS45XG4iICsKKyAgICAgICAgICAgICAgICAiICovXG4iICsKKyAgICAgICAgICAgICAgICAiY2xhc3MgVGVzdDxUPiB7XG59Iik7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0U3RyaW5nQmluYXJ5T3BlcmF0aW9uKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZmluYWwgQ29tbW9uQ29kZVN0eWxlU2V0dGluZ3Mgc2V0dGluZ3MgPSBnZXRTZXR0aW5ncygpOworCisgICAgc2V0dGluZ3MuQUxJR05fTVVMVElMSU5FX0FTU0lHTk1FTlQgPSBmYWxzZTsKKyAgICBzZXR0aW5ncy5BTElHTl9NVUxUSUxJTkVfQklOQVJZX09QRVJBVElPTiA9IGZhbHNlOworCisgICAgZG9UZXh0VGVzdCgiY2xhc3MgRm9vIHtcbiIgKyAiICAgIHZvaWQgZm9vICgpIHtcbiIgKyAiU3RyaW5nIHMgPSBcImFiY1wiICtcbiIgKyAiXCJkZWZcIjsiICsgIiAgICB9XG4iICsgIn0iLAorCisgICAgICAgICAgICAgICAiY2xhc3MgRm9vIHtcbiIgKworICAgICAgICAgICAgICAgIiAgICB2b2lkIGZvbygpIHtcbiIgKworICAgICAgICAgICAgICAgIiAgICAgICAgU3RyaW5nIHMgPSBcImFiY1wiICtcbiIgKworICAgICAgICAgICAgICAgIiAgICAgICAgICAgICAgICBcImRlZlwiO1xuIiArCisgICAgICAgICAgICAgICAiICAgIH1cbiIgKworICAgICAgICAgICAgICAgIn0iKTsKKworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdDMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3Q0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgbXlMaW5lUmFuZ2UgPSBuZXcgVGV4dFJhbmdlKDIsIDgpOworICAgIGRvVGVzdCgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEJyYWNlcygpIHRocm93cyBFeGNlcHRpb24geworICAgIGZpbmFsIENvbW1vbkNvZGVTdHlsZVNldHRpbmdzIHNldHRpbmdzID0gZ2V0U2V0dGluZ3MoKTsKKworICAgIEBOb25ObHMgZmluYWwgU3RyaW5nIHRleHQgPQorICAgICAgImNsYXNzIEZvbyB7XG4iICsKKyAgICAgICJ2b2lkIGZvbyAoKSB7XG4iICsKKyAgICAgICJpZiAoYSkge1xuIiArCisgICAgICAiaW50IGkgPSAwO1xuIiArCisgICAgICAifVxuIiArCisgICAgICAifVxuIiArCisgICAgICAifSI7CisKKyAgICBzZXR0aW5ncy5CUkFDRV9TVFlMRSA9IENvbW1vbkNvZGVTdHlsZVNldHRpbmdzLkVORF9PRl9MSU5FOworICAgIHNldHRpbmdzLk1FVEhPRF9CUkFDRV9TVFlMRSA9IENvbW1vbkNvZGVTdHlsZVNldHRpbmdzLkVORF9PRl9MSU5FOworICAgIGRvVGV4dFRlc3QodGV4dCwgImNsYXNzIEZvbyB7XG4iICsKKyAgICAgICAgICAgICAgICAgICAgICIgICAgdm9pZCBmb28oKSB7XG4iICsKKyAgICAgICAgICAgICAgICAgICAgICIgICAgICAgIGlmIChhKSB7XG4iICsKKyAgICAgICAgICAgICAgICAgICAgICIgICAgICAgICAgICBpbnQgaSA9IDA7XG4iICsKKyAgICAgICAgICAgICAgICAgICAgICIgICAgICAgIH1cbiIgKworICAgICAgICAgICAgICAgICAgICAgIiAgICB9XG4iICsKKyAgICAgICAgICAgICAgICAgICAgICJ9Iik7CisKKyAgICBzZXR0aW5ncy5CUkFDRV9TVFlMRSA9IENvbW1vbkNvZGVTdHlsZVNldHRpbmdzLk5FWFRfTElORTsKKyAgICBzZXR0aW5ncy5NRVRIT0RfQlJBQ0VfU1RZTEUgPSBDb21tb25Db2RlU3R5bGVTZXR0aW5ncy5ORVhUX0xJTkU7CisgICAgZG9UZXh0VGVzdCh0ZXh0LCAiY2xhc3MgRm9vIHtcbiIgKworICAgICAgICAgICAgICAgICAgICAgIiAgICB2b2lkIGZvbygpXG4iICsKKyAgICAgICAgICAgICAgICAgICAgICIgICAge1xuIiArCisgICAgICAgICAgICAgICAgICAgICAiICAgICAgICBpZiAoYSlcbiIgKworICAgICAgICAgICAgICAgICAgICAgIiAgICAgICAge1xuIiArCisgICAgICAgICAgICAgICAgICAgICAiICAgICAgICAgICAgaW50IGkgPSAwO1xuIiArCisgICAgICAgICAgICAgICAgICAgICAiICAgICAgICB9XG4iICsKKyAgICAgICAgICAgICAgICAgICAgICIgICAgfVxuIiArCisgICAgICAgICAgICAgICAgICAgICAifSIpOworCisKKyAgICBzZXR0aW5ncy5NRVRIT0RfQlJBQ0VfU1RZTEUgPSBDb21tb25Db2RlU3R5bGVTZXR0aW5ncy5ORVhUX0xJTkVfU0hJRlRFRDsKKyAgICBzZXR0aW5ncy5CUkFDRV9TVFlMRSA9IENvbW1vbkNvZGVTdHlsZVNldHRpbmdzLk5FWFRfTElORV9TSElGVEVEOworICAgIGRvVGV4dFRlc3QodGV4dCwgImNsYXNzIEZvbyB7XG4iICsKKyAgICAgICAgICAgICAgICAgICAgICIgICAgdm9pZCBmb28oKVxuIiArCisgICAgICAgICAgICAgICAgICAgICAiICAgICAgICB7XG4iICsKKyAgICAgICAgICAgICAgICAgICAgICIgICAgICAgIGlmIChhKVxuIiArCisgICAgICAgICAgICAgICAgICAgICAiICAgICAgICAgICAge1xuIiArCisgICAgICAgICAgICAgICAgICAgICAiICAgICAgICAgICAgaW50IGkgPSAwO1xuIiArCisgICAgICAgICAgICAgICAgICAgICAiICAgICAgICAgICAgfVxuIiArCisgICAgICAgICAgICAgICAgICAgICAiICAgICAgICB9XG4iICsKKyAgICAgICAgICAgICAgICAgICAgICJ9Iik7CisKKyAgICBzZXR0aW5ncy5NRVRIT0RfQlJBQ0VfU1RZTEUgPSBDb21tb25Db2RlU3R5bGVTZXR0aW5ncy5ORVhUX0xJTkVfU0hJRlRFRDsKKyAgICBzZXR0aW5ncy5CUkFDRV9TVFlMRSA9IENvbW1vbkNvZGVTdHlsZVNldHRpbmdzLkVORF9PRl9MSU5FOworICAgIGRvVGV4dFRlc3QodGV4dCwgImNsYXNzIEZvbyB7XG4iICsKKyAgICAgICAgICAgICAgICAgICAgICIgICAgdm9pZCBmb28oKVxuIiArCisgICAgICAgICAgICAgICAgICAgICAiICAgICAgICB7XG4iICsKKyAgICAgICAgICAgICAgICAgICAgICIgICAgICAgIGlmIChhKSB7XG4iICsKKyAgICAgICAgICAgICAgICAgICAgICIgICAgICAgICAgICBpbnQgaSA9IDA7XG4iICsKKyAgICAgICAgICAgICAgICAgICAgICIgICAgICAgIH1cbiIgKworICAgICAgICAgICAgICAgICAgICAgIiAgICAgICAgfVxuIiArCisgICAgICAgICAgICAgICAgICAgICAifSIpOworCisKKyAgICBzZXR0aW5ncy5NRVRIT0RfQlJBQ0VfU1RZTEUgPSBDb21tb25Db2RlU3R5bGVTZXR0aW5ncy5ORVhUX0xJTkVfU0hJRlRFRDI7CisgICAgc2V0dGluZ3MuQlJBQ0VfU1RZTEUgPSBDb21tb25Db2RlU3R5bGVTZXR0aW5ncy5ORVhUX0xJTkVfU0hJRlRFRDI7CisgICAgZG9UZXh0VGVzdCh0ZXh0LCAiY2xhc3MgRm9vIHtcbiIgKworICAgICAgICAgICAgICAgICAgICAgIiAgICB2b2lkIGZvbygpXG4iICsKKyAgICAgICAgICAgICAgICAgICAgICIgICAgICAgIHtcbiIgKworICAgICAgICAgICAgICAgICAgICAgIiAgICAgICAgICAgIGlmIChhKVxuIiArCisgICAgICAgICAgICAgICAgICAgICAiICAgICAgICAgICAgICAgIHtcbiIgKworICAgICAgICAgICAgICAgICAgICAgIiAgICAgICAgICAgICAgICAgICAgaW50IGkgPSAwO1xuIiArCisgICAgICAgICAgICAgICAgICAgICAiICAgICAgICAgICAgICAgIH1cbiIgKworICAgICAgICAgICAgICAgICAgICAgIiAgICAgICAgfVxuIiArCisgICAgICAgICAgICAgICAgICAgICAifSIpOworCisgICAgc2V0dGluZ3MuQlJBQ0VfU1RZTEUgPSBDb21tb25Db2RlU3R5bGVTZXR0aW5ncy5ORVhUX0xJTkU7CisgICAgZG9UZXh0VGVzdCgiY2xhc3MgRm9vIHtcbiIgKyAiICAgIHN0YXRpY3tcbiIgKyAiZm9vKCk7XG4iICsgIn0iICsgIn0iLAorICAgICAgICAgICAgICAgImNsYXNzIEZvbyB7XG4iICsgIiAgICBzdGF0aWNcbiIgKyAiICAgIHtcbiIgKyAiICAgICAgICBmb28oKTtcbiIgKyAiICAgIH1cbiIgKyAifSIpOworCisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0RXh0ZW5kc0xpc3QoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBmaW5hbCBDb21tb25Db2RlU3R5bGVTZXR0aW5ncyBzZXR0aW5ncyA9IGdldFNldHRpbmdzKCk7CisgICAgc2V0dGluZ3MuQUxJR05fTVVMVElMSU5FX0VYVEVORFNfTElTVCA9IHRydWU7CisgICAgZG9UZXh0VGVzdCgiY2xhc3MgQSBleHRlbmRzIEIsIFxuIiArICJDIHt9IiwgImNsYXNzIEEgZXh0ZW5kcyBCLFxuIiArICIgICAgICAgICAgICAgICAgQyB7XG59Iik7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0QmxvY2tXaXRob3V0QnJhY2VzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXh0VGVzdCgiY2xhc3MgQSB7XG4iICsgInZvaWQgZm9vKCl7XG4iICsgImlmKGEpXG4iICsgInJldHVybjtcbiIgKyAifVxuIiArICJ9IiwKKyAgICAgICAgICAgICAgICJjbGFzcyBBIHtcbiIgKyAiICAgIHZvaWQgZm9vKCkge1xuIiArICIgICAgICAgIGlmIChhKVxuIiArICIgICAgICAgICAgICByZXR1cm47XG4iICsgIiAgICB9XG4iICsgIn0iKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3ROZXN0ZWRDYWxscygpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGV4dFRlc3QoImNsYXNzIEEge1xuIiArICJ2b2lkIGZvbygpe1xuIiArICJmb28oXG5mb28oXG5mb28oKVxuKVxuKTtcbiIgKyAifVxuIiArICJ9IiwgImNsYXNzIEEge1xuIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgIHZvaWQgZm9vKCkge1xuIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgICAgICBmb28oXG4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgICAgICAgICAgICAgICAgZm9vKFxuIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgICAgICAgICAgICAgICAgICAgICAgZm9vKClcbiIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgICAgICAgICAgICAgICApXG4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgICAgICAgICk7XG4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgICAgfVxuIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAifSIpOworCisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0U3BhY2VzQXJvdW5kTWV0aG9kKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXh0VGVzdCgiY2xhc3MgRm9vIHtcbiIgKyAiICAgIGFic3RyYWN0IHZvaWQgYSgpO1xuIiArICIgICAge1xuIiArICIgICAgICAgIGEoKTtcbiIgKyAiICAgIH1cbiIgKyAifSIsCisgICAgICAgICAgICAgICAiY2xhc3MgRm9vIHtcbiIgKyAiICAgIGFic3RyYWN0IHZvaWQgYSgpO1xuIiArICJcbiIgKyAiICAgIHtcbiIgKyAiICAgICAgICBhKCk7XG4iICsgIiAgICB9XG4iICsgIn0iKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RTcGFjZUluSWYoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1RleHRUZXN0KCJjbGFzcyBmb28ge1xuIiArCisgICAgICAgICAgICAgICAiICAgIHtcbiIgKworICAgICAgICAgICAgICAgIiAgICAgICAgaWYgKGEpIHtcbiIgKworICAgICAgICAgICAgICAgIiAgICAgICAgICAgIGlmKGEpIHtcbiIgKworICAgICAgICAgICAgICAgIlxuIiArCisgICAgICAgICAgICAgICAiICAgICAgICAgICAgfVxuIiArCisgICAgICAgICAgICAgICAiICAgICAgICB9XG4iICsKKyAgICAgICAgICAgICAgICIgICAgfVxuIiArCisifSIsICJjbGFzcyBmb28ge1xuIiArCisgICAgICIgICAge1xuIiArCisgICAgICIgICAgICAgIGlmIChhKSB7XG4iICsKKyAgICAgIiAgICAgICAgICAgIGlmIChhKSB7XG4iICsKKyAgICAgIlxuIiArCisgICAgICIgICAgICAgICAgICB9XG4iICsKKyAgICAgIiAgICAgICAgfVxuIiArCisgICAgICIgICAgfVxuIiArCisgICAgICJ9Iik7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0SWYyKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXh0VGVzdCgKKyAgICAgICJwdWJsaWMgY2xhc3MgVGVzdCB7XG4iICsgIiAgICBwdWJsaWMgYm9vbGVhbiBlcXVhbHMoT2JqZWN0IG8pIHtcbiIgKyAiICAgICAgICBpZih0aGlzID09IG8pcmV0dXJuIHRydWU7XG4iICsgIiAgICB9XG4iICsgIn0iLAorICAgICAgInB1YmxpYyBjbGFzcyBUZXN0IHtcbiIgKyAiICAgIHB1YmxpYyBib29sZWFuIGVxdWFscyhPYmplY3Qgbykge1xuIiArICIgICAgICAgIGlmICh0aGlzID09IG8pIHJldHVybiB0cnVlO1xuIiArICIgICAgfVxuIiArICJ9Iik7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0U3BhY2VBcm91bmRGaWVsZCgpIHRocm93cyBFeGNlcHRpb24geworICAgIGZpbmFsIENvbW1vbkNvZGVTdHlsZVNldHRpbmdzIHNldHRpbmdzID0gZ2V0U2V0dGluZ3MoKTsKKyAgICBzZXR0aW5ncy5CTEFOS19MSU5FU19BUk9VTkRfRklFTEQgPSAxOworCisgICAgZG9UZXh0VGVzdCgiY2xhc3MgRm9vIHtcbiIgKworICAgICAgICAgICAgICAgIiAgICBib29sZWFuIGE7XG4iICsKKyAgICAgICAgICAgICAgICIgICAge1xuIiArCisgICAgICAgICAgICAgICAiICAgICAgICBpZiAoYSkge1xuIiArCisgICAgICAgICAgICAgICAiICAgICAgICB9IGVsc2Uge1xuIiArCisgICAgICAgICAgICAgICAiXG4iICsKKyAgICAgICAgICAgICAgICIgICAgICAgIH1cbiIgKworICAgICAgICAgICAgICAgIiAgICAgICAgYSA9IDI7XG4iICsKKyAgICAgICAgICAgICAgICIgICAgfVxuIiArCisifSIsICJjbGFzcyBGb28ge1xuIiArCisgICAgICIgICAgYm9vbGVhbiBhO1xuIiArCisgICAgICJcbiIgKworICAgICAiICAgIHtcbiIgKworICAgICAiICAgICAgICBpZiAoYSkge1xuIiArCisgICAgICIgICAgICAgIH0gZWxzZSB7XG4iICsKKyAgICAgIlxuIiArCisgICAgICIgICAgICAgIH1cbiIgKworICAgICAiICAgICAgICBhID0gMjtcbiIgKworICAgICAiICAgIH1cbiIgKworICAgICAifSIpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEFycmF5KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZmluYWwgQ29tbW9uQ29kZVN0eWxlU2V0dGluZ3Mgc2V0dGluZ3MgPSBnZXRTZXR0aW5ncygpOworICAgIHNldHRpbmdzLlNQQUNFX1dJVEhJTl9BUlJBWV9JTklUSUFMSVpFUl9CUkFDRVMgPSB0cnVlOworICAgIHNldHRpbmdzLlNQQUNFX0JFRk9SRV9BUlJBWV9JTklUSUFMSVpFUl9MQlJBQ0UgPSB0cnVlOworICAgIGRvVGV4dFRlc3QoImNsYXNzIGEge1xuIiArICIgdm9pZCBmKCkge1xuIiArICIgICBmaW5hbCBpbnRbXSBpID0gbmV3IGludFtdezB9O1xuIiArICIgfVxuIiArICJ9IiwKKyAgICAgICAgICAgICAgICJjbGFzcyBhIHtcbiIgKyAiICAgIHZvaWQgZigpIHtcbiIgKyAiICAgICAgICBmaW5hbCBpbnRbXSBpID0gbmV3IGludFtdIHsgMCB9O1xuIiArICIgICAgfVxuIiArICJ9Iik7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0VHdvSmF2YURvY3MoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1RleHRUZXN0KCIvKipcbiIgKyAiICogXG4iICsgIiAqL1xuIiArICIgICAgICAgIGNsYXNzIFRlc3Qge1xuIiArICIgICAgLyoqXG4iICsgIiAgICAgKi9cbiIgKyAiICAgICBwdWJsaWMgdm9pZCBmb28oKTtcbiIgKyAifSIsCisgICAgICAgICAgICAgICAiLyoqXG4iICsgIiAqXG4iICsgIiAqL1xuIiArICJjbGFzcyBUZXN0IHtcbiIgKyAiICAgIC8qKlxuIiArICIgICAgICovXG4iICsgIiAgICBwdWJsaWMgdm9pZCBmb28oKTtcbiIgKyAifSIpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEphdmFEb2NMaW5rc1dpdGhQYXJhbWV0ZXJOYW1lcygpIHRocm93cyBFeGNlcHRpb24geworICAgIC8vIFNlZSBJREVBREVWLTgzMzIKKyAgICBkb1RleHRUZXN0KCIvKipcbiIgKworICAgICAgICAgICAgICAgIiogQHJldHVybiBpZiAoIHgxID09IHgxICkgdGhlbiByZXR1cm4ge0BsaW5rICNjbXAoU3RyaW5nIHkxLGludCB5Mil9XG4iICsKKyAgICAgICAgICAgICAgICIqICAgICAgICAgb3RoZXJ3aXNlIHJldHVybiB7QGxpbmsgI2NtcChpbnQgeDEsaW50IHgyKX1cbiIgKworICAgICAgICAgICAgICAgIiovXG4iICsKKyAgICAgICAgICAgICAgICJjbGFzcyBYIHtcbiIgKworICAgICAgICAgICAgICAgIn1cbiIsICIvKipcbiIgKworICAgICAgICAgICAgICAgICAgICAgICIgKiBAcmV0dXJuIGlmICggeDEgPT0geDEgKSB0aGVuIHJldHVybiB7QGxpbmsgI2NtcChTdHJpbmcgeTEsIGludCB5Mil9XG4iICsKKyAgICAgICAgICAgICAgICAgICAgICAiICogb3RoZXJ3aXNlIHJldHVybiB7QGxpbmsgI2NtcChpbnQgeDEsIGludCB4Mil9XG4iICsKKyAgICAgICAgICAgICAgICAgICAgICAiICovXG4iICsKKyAgICAgICAgICAgICAgICAgICAgICAiY2xhc3MgWCB7XG4iICsKKyAgICAgICAgICAgICAgICAgICAgICAifVxuIik7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0SW5jb21wbGV0ZUZpZWxkKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXh0VGVzdCgicHVibGljIGNsYXNzIFRlc3Qge1xuIiArICIgICAgU3RyaW5nIHMgPTtcbiIgKyAifSIsICJwdWJsaWMgY2xhc3MgVGVzdCB7XG4iICsgIiAgICBTdHJpbmcgcyA9IDtcbiIgKyAifSIpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdElmMygpIHRocm93cyBFeGNlcHRpb24geworICAgIGdldFNldHRpbmdzKCkuS0VFUF9DT05UUk9MX1NUQVRFTUVOVF9JTl9PTkVfTElORSA9IGZhbHNlOworICAgIGRvVGV4dFRlc3QoInB1YmxpYyBhYnN0cmFjdCBjbGFzcyBBIHtcbiIgKworICAgICAgICAgICAgICAgIiAgICBhYnN0cmFjdCB2b2lkIGYoYm9vbGVhbiBiKTtcbiIgKworICAgICAgICAgICAgICAgIlxuIiArCisgICAgICAgICAgICAgICAiICAgIEEgSU1QTCA9IG5ldyBBKCkge1xuIiArCisgICAgICAgICAgICAgICAiICAgICAgICB2b2lkIGYoYm9vbGVhbiBiKSB7XG4iICsKKyAgICAgICAgICAgICAgICIgICAgICAgICAgICBpZiAoYilcbiIgKworICAgICAgICAgICAgICAgIiAgICAgICAgICAgICAgICBmKHRydWUpOyBlbHNlIHtcbiIgKworICAgICAgICAgICAgICAgIiAgICAgICAgICAgICAgICBmKGZhbHNlKTtcbiIgKworICAgICAgICAgICAgICAgIiAgICAgICAgICAgICAgICBmKGZhbHNlKTtcbiIgKworICAgICAgICAgICAgICAgIiAgICAgICAgICAgIH1cbiIgKworICAgICAgICAgICAgICAgIiAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgNTsgaSsrKSBmKHRydWUpO1xuIiArCisgICAgICAgICAgICAgICAiICAgICAgICB9XG4iICsKKyAgICAgICAgICAgICAgICIgICAgfTtcbiIgKworIn0iLCAicHVibGljIGFic3RyYWN0IGNsYXNzIEEge1xuIiArCisgICAgICIgICAgYWJzdHJhY3Qgdm9pZCBmKGJvb2xlYW4gYik7XG4iICsKKyAgICAgIlxuIiArCisgICAgICIgICAgQSBJTVBMID0gbmV3IEEoKSB7XG4iICsKKyAgICAgIiAgICAgICAgdm9pZCBmKGJvb2xlYW4gYikge1xuIiArCisgICAgICIgICAgICAgICAgICBpZiAoYilcbiIgKworICAgICAiICAgICAgICAgICAgICAgIGYodHJ1ZSk7XG4iICsKKyAgICAgIiAgICAgICAgICAgIGVsc2Uge1xuIiArCisgICAgICIgICAgICAgICAgICAgICAgZihmYWxzZSk7XG4iICsKKyAgICAgIiAgICAgICAgICAgICAgICBmKGZhbHNlKTtcbiIgKworICAgICAiICAgICAgICAgICAgfVxuIiArCisgICAgICIgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDU7IGkrKylcbiIgKworICAgICAiICAgICAgICAgICAgICAgIGYodHJ1ZSk7XG4iICsKKyAgICAgIiAgICAgICAgfVxuIiArCisgICAgICIgICAgfTtcbiIgKworICAgICAifSIpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdERvY0NvbW1lbnQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1RleHRUZXN0KCJwdWJsaWMgY2xhc3MgVGVzdENsYXNzIHtcbiIgKyAiLyoqXG4iICsgIiogXG4iICsgIiovXG4iICsgIiAgICBwdWJsaWMgdm9pZCBmMSgpIHtcbiIgKyAiICAgIH1cbiIgKyAifSIsCisgICAgICAgICAgICAgICAicHVibGljIGNsYXNzIFRlc3RDbGFzcyB7XG4iICsgIiAgICAvKipcbiIgKyAiICAgICAqXG4iICsgIiAgICAgKi9cbiIgKyAiICAgIHB1YmxpYyB2b2lkIGYxKCkge1xuIiArICIgICAgfVxuIiArICJ9Iik7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0RG9jQ29tbWVudDIoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBnZXRTZXR0aW5ncygpLktFRVBfU0lNUExFX01FVEhPRFNfSU5fT05FX0xJTkUgPSB0cnVlOworICAgIGRvVGV4dFRlc3QoImNsYXNzIFRlc3Qge1xuIiArCisgICAgICAgICAgICAgICAiLyoqXG4iICsKKyAgICAgICAgICAgICAgICIqXG4iICsKKyAgICAgICAgICAgICAgICIqIEBwYXJhbSBhXG4iICsKKyAgICAgICAgICAgICAgICIqIEBwYXJhbSBwYXJhbVxuIiArCisgICAgICAgICAgICAgICAiKiBAcGFyYW0gZGRkXG4iICsKKyAgICAgICAgICAgICAgICIqL1xuIiArCisgICAgICAgICAgICAgICAiICAgIHB1YmxpYyB2b2lkIGZvbyhpbnQgYSwgU3RyaW5nIHBhcmFtLCBkb3VibGUgZGRkKSB7fVxuIiArCisifSIsICJjbGFzcyBUZXN0IHtcbiIgKworICAgICAiICAgIC8qKlxuIiArCisgICAgICIgICAgICogQHBhcmFtIGFcbiIgKworICAgICAiICAgICAqIEBwYXJhbSBwYXJhbVxuIiArCisgICAgICIgICAgICogQHBhcmFtIGRkZFxuIiArCisgICAgICIgICAgICovXG4iICsKKyAgICAgIiAgICBwdWJsaWMgdm9pZCBmb28oaW50IGEsIFN0cmluZyBwYXJhbSwgZG91YmxlIGRkZCkge31cbiIgKworICAgICAifSIpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFNwYWNlQmVmb3JlRmllbGROYW1lKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXh0VGVzdCgiY2xhc3MgQXtcbiIgKyAicHVibGljICAgQSAgICBteUEgO1xuIiArICJ9IiwgImNsYXNzIEEge1xuIiArICIgICAgcHVibGljIEEgbXlBO1xuIiArICJ9Iik7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0Q2xhc3MoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1RleHRUZXN0KCIgICAgY2xhc3MgQSB7XG4iICsKKyAgICAgICAgICAgICAgICIgICAgICAgIExvZ2dlciBMT0c7XG4iICsKKyAgICAgICAgICAgICAgICIgICAgICAgIGNsYXNzIEMge31cbiIgKworICAgICAgICAgICAgICAgIlxuIiArCisgICAgICAgICAgICAgICAiICAgICAgICBwdWJsaWMgdm9pZCBiKCkge1xuIiArCisgICAgICAgICAgICAgICAiICAgICAgICB9XG4iICsKKyAgICAgICAgICAgICAgICJcbiIgKworICAgICAgICAgICAgICAgIiAgICAgICAgaW50IGY7XG4iICsKKyIgICAgfSIsICJjbGFzcyBBIHtcbiIgKworICAgICAgICAgIiAgICBMb2dnZXIgTE9HO1xuIiArCisgICAgICAgICAiXG4iICsKKyAgICAgICAgICIgICAgY2xhc3MgQyB7XG4iICsKKyAgICAgICAgICIgICAgfVxuIiArCisgICAgICAgICAiXG4iICsKKyAgICAgICAgICIgICAgcHVibGljIHZvaWQgYigpIHtcbiIgKworICAgICAgICAgIiAgICB9XG4iICsKKyAgICAgICAgICJcbiIgKworICAgICAgICAgIiAgICBpbnQgZjtcbiIgKworICAgICAgICAgIn0iKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3REb05vdEluZGVudENhc2VGcm9tU3dpdGNoKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZmluYWwgQ29tbW9uQ29kZVN0eWxlU2V0dGluZ3Mgc2V0dGluZ3MgPSBnZXRTZXR0aW5ncygpOworICAgIHNldHRpbmdzLklOREVOVF9DQVNFX0ZST01fU1dJVENIID0gZmFsc2U7CisgICAgZG9UZXh0VGVzdCgiY2xhc3MgQSB7XG4iICsgInZvaWQgZm9vKCkge1xuIiArICJzd2l0Y2goYSl7XG4iICsgImNhc2UgMTogXG4iICsgImJyZWFrO1xuIiArICJ9XG4iICsgIn1cbiIgKyAifSIsICJjbGFzcyBBIHtcbiIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgIHZvaWQgZm9vKCkge1xuIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgICAgICAgIHN3aXRjaCAoYSkge1xuIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgICAgICAgIGNhc2UgMTpcbiIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgICAgICAgICAgYnJlYWs7XG4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgICAgICAgfVxuIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgICAgfVxuIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ9Iik7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0Q2xhc3MyKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZmluYWwgQ29tbW9uQ29kZVN0eWxlU2V0dGluZ3Mgc2V0dGluZ3MgPSBnZXRTZXR0aW5ncygpOworICAgIHNldHRpbmdzLktFRVBfRklSU1RfQ09MVU1OX0NPTU1FTlQgPSBmYWxzZTsKKyAgICBkb1RleHRUZXN0KCJjbGFzcyBBIHtcbiIgKyAiLy8gY29tbWVudCBiZWZvcmVcbiIgKyAicHJvdGVjdGVkIE9iamVjdCBhOy8vICBjb21tZW50IGFmdGVyXG4iICsgIn0iLAorICAgICAgICAgICAgICAgImNsYXNzIEEge1xuIiArICIgICAgLy8gY29tbWVudCBiZWZvcmVcbiIgKyAiICAgIHByb3RlY3RlZCBPYmplY3QgYTsvLyAgY29tbWVudCBhZnRlclxuIiArICJ9Iik7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0U3BsaXRMaXRlcmFsKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXh0VGVzdCgiY2xhc3MgQSB7XG4iICsgInZvaWQgZm9vKCkge1xuIiArICIgIFN0cmluZyBzID0gXCJhYmNcIiArXG4iICsgIiAgXCJkZWZcIjtcbiIgKyAifVxuIiArICJ9IiwKKyAgICAgICAgICAgICAgICJjbGFzcyBBIHtcbiIgKyAiICAgIHZvaWQgZm9vKCkge1xuIiArICIgICAgICAgIFN0cmluZyBzID0gXCJhYmNcIiArXG4iICsgIiAgICAgICAgICAgICAgICBcImRlZlwiO1xuIiArICIgICAgfVxuIiArICJ9Iik7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0UGFyYW1ldGVyc0FsaWdubWVudCgpIHRocm93cyBFeGNlcHRpb24geworICAgIGZpbmFsIENvbW1vbkNvZGVTdHlsZVNldHRpbmdzIHNldHRpbmdzID0gZ2V0U2V0dGluZ3MoKTsKKyAgICBzZXR0aW5ncy5BTElHTl9NVUxUSUxJTkVfUEFSQU1FVEVSU19JTl9DQUxMUyA9IHRydWU7CisgICAgc2V0dGluZ3MuZ2V0Um9vdFNldHRpbmdzKCkuUklHSFRfTUFSR0lOID0gMTQwOworICAgIGRvVGVzdCgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdENvbmRpdGlvbmFsRXhwcmVzc2lvbigpIHRocm93cyBFeGNlcHRpb24geworICAgIGZpbmFsIENvbW1vbkNvZGVTdHlsZVNldHRpbmdzIHNldHRpbmdzID0gZ2V0U2V0dGluZ3MoKTsKKyAgICBzZXR0aW5ncy5TUEFDRV9CRUZPUkVfUVVFU1QgPSB0cnVlOworICAgIHNldHRpbmdzLlNQQUNFX0FGVEVSX1FVRVNUID0gZmFsc2U7CisgICAgc2V0dGluZ3MuU1BBQ0VfQkVGT1JFX0NPTE9OID0gdHJ1ZTsKKyAgICBzZXR0aW5ncy5TUEFDRV9BRlRFUl9DT0xPTiA9IGZhbHNlOworCisgICAgZG9UZXh0VGVzdCgiY2xhc3MgRm9ve1xuIiArICIgIHZvaWQgZm9vKCl7XG4iICsgIiAgcmV0dXJuIG5hbWUgICAhPSAgIG51bGwgICA/ICAgMSAgIDogICAyICAgOyIgKyAifVxuIiArICJ9IiwKKyAgICAgICAgICAgICAgICJjbGFzcyBGb28ge1xuIiArICIgICAgdm9pZCBmb28oKSB7XG4iICsgIiAgICAgICAgcmV0dXJuIG5hbWUgIT0gbnVsbCA/MSA6MjtcbiIgKyAiICAgIH1cbiIgKyAifSIpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdE1ldGhvZENhbGxDaGFpbigpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGV4dFRlc3QoImNsYXNzIEZvb3tcbiIgKworICAgICAgICAgICAgICAgIiAgICB2b2lkIGZvbygpe1xuIiArCisgICAgICAgICAgICAgICAiICAgICAgIGNvbmZpZ3VyYXRpb24gPSBuZXcgQ29uZmlndXJhdGlvbigpIFxuIiArCisgICAgICAgICAgICAgICAiICAgICAgICAgICAgICAgIC5zZXRQcm9wZXJ0eShcImhpYmVybmF0ZS5kaWFsZWN0XCIsIFxuIiArCisgICAgICAgICAgICAgICAiICAgICAgICAgICAgICAgIFwiYXUuY29tLnNlbnNpcy53c2VhcmNoLmRiLkN1c3RvbUhTUUxEQkRpYWxlY3RcIik7XG4iICsKKyAgICAgICAgICAgICAgICJ9XG4iICsKKyJ9IiwgImNsYXNzIEZvbyB7XG4iICsKKyAgICAgIiAgICB2b2lkIGZvbygpIHtcbiIgKworICAgICAiICAgICAgICBjb25maWd1cmF0aW9uID0gbmV3IENvbmZpZ3VyYXRpb24oKVxuIiArCisgICAgICIgICAgICAgICAgICAgICAgLnNldFByb3BlcnR5KFwiaGliZXJuYXRlLmRpYWxlY3RcIixcbiIgKworICAgICAiICAgICAgICAgICAgICAgICAgICAgICAgXCJhdS5jb20uc2Vuc2lzLndzZWFyY2guZGIuQ3VzdG9tSFNRTERCRGlhbGVjdFwiKTtcbiIgKworICAgICAiICAgIH1cbiIgKworICAgICAifSIpOworCisgICAgZG9UZXh0VGVzdCgiY2xhc3MgRm9ve1xuIiArCisgICAgICAgICAgICAgICAiICAgIHZvaWQgZm9vKCl7XG4iICsKKyAgICAgICAgICAgICAgICIgICAgICAgY29uZmlndXJhdGlvbiA9IG5ldyBDb25maWd1cmF0aW9uKCkuIFxuIiArCisgICAgICAgICAgICAgICAiICAgICAgICAgICAgICAgIHNldFByb3BlcnR5KFwiaGliZXJuYXRlLmRpYWxlY3RcIiwgXG4iICsKKyAgICAgICAgICAgICAgICIgICAgICAgICAgICAgICAgXCJhdS5jb20uc2Vuc2lzLndzZWFyY2guZGIuQ3VzdG9tSFNRTERCRGlhbGVjdFwiKTtcbiIgKworICAgICAgICAgICAgICAgIn1cbiIgKworIn0iLCAiY2xhc3MgRm9vIHtcbiIgKworICAgICAiICAgIHZvaWQgZm9vKCkge1xuIiArCisgICAgICIgICAgICAgIGNvbmZpZ3VyYXRpb24gPSBuZXcgQ29uZmlndXJhdGlvbigpLlxuIiArCisgICAgICIgICAgICAgICAgICAgICAgc2V0UHJvcGVydHkoXCJoaWJlcm5hdGUuZGlhbGVjdFwiLFxuIiArCisgICAgICIgICAgICAgICAgICAgICAgICAgICAgICBcImF1LmNvbS5zZW5zaXMud3NlYXJjaC5kYi5DdXN0b21IU1FMREJEaWFsZWN0XCIpO1xuIiArCisgICAgICIgICAgfVxuIiArCisgICAgICJ9Iik7CisKKyAgICBkb1RleHRUZXN0KCJjbGFzcyBGb297XG4iICsKKyAgICAgICAgICAgICAgICIgICAgdm9pZCBmb28oKXtcbiIgKworICAgICAgICAgICAgICAgIiAgICAgICBjb25maWd1cmF0aW9uID0gbmV3IENvbmZpZ3VyYXRpb24oKSBcbiIgKworICAgICAgICAgICAgICAgIiAgICAgICAgICAgICAgICAuc2V0UHJvcGVydHkoXCJoaWJlcm5hdGUuZGlhbGVjdFwiLCBcbiIgKworICAgICAgICAgICAgICAgIiAgICAgICAgICAgICAgICBcImF1LmNvbS5zZW5zaXMud3NlYXJjaC5kYi5DdXN0b21IU1FMREJEaWFsZWN0XCIpIFxuIiArCisgICAgICAgICAgICAgICAiICAgICAgICAgICAgICAgIC5zZXRQcm9wZXJ0eShcImhpYmVybmF0ZS5jb25uZWN0aW9uLnVybFwiLCBcbiIgKworICAgICAgICAgICAgICAgIiAgICAgICAgICAgICAgICBcImpkYmM6aHNxbGRiOm1lbTp0ZXN0ZGJcIikgXG4iICsKKyAgICAgICAgICAgICAgICIgICAgICAgICAgICAgICAgLnNldFByb3BlcnR5KFwiaGliZXJuYXRlLmNvbm5lY3Rpb24uZHJpdmVyX2NsYXNzXCIsIFxuIiArCisgICAgICAgICAgICAgICAiICAgICAgICAgICAgICAgIFwib3JnLmhzcWxkYi5qZGJjRHJpdmVyXCIpIFxuIiArCisgICAgICAgICAgICAgICAiICAgICAgICAgICAgICAgIC5zZXRQcm9wZXJ0eShcImhpYmVybmF0ZS5jb25uZWN0aW9uLnVzZXJuYW1lXCIsIFwic2FcIikgXG4iICsKKyAgICAgICAgICAgICAgICIgICAgICAgICAgICAgICAgLnNldFByb3BlcnR5KFwiaGliZXJuYXRlLmNvbm5lY3Rpb24ucGFzc3dvcmRcIiwgXCJcIikgXG4iICsKKyAgICAgICAgICAgICAgICIgICAgICAgICAgICAgICAgLnNldFByb3BlcnR5KFwiaGliZXJuYXRlLnNob3dfc3FsXCIsIFwiZmFsc2VcIikgXG4iICsKKyAgICAgICAgICAgICAgICIgICAgICAgICAgICAgICAgLnNldFByb3BlcnR5KFwiaGliZXJuYXRlLm9yZGVyX3VwZGF0ZXNcIiwgXCJ0cnVlXCIpIFxuIiArCisgICAgICAgICAgICAgICAiICAgICAgICAgICAgICAgIC5zZXRQcm9wZXJ0eShcImhpYmVybmF0ZS5oYm0yZGRsLmF1dG9cIiwgXCJ1cGRhdGVcIik7ICIgKworICAgICAgICAgICAgICAgIn1cbiIgKworIn0iLCAiY2xhc3MgRm9vIHtcbiIgKworICAgICAiICAgIHZvaWQgZm9vKCkge1xuIiArCisgICAgICIgICAgICAgIGNvbmZpZ3VyYXRpb24gPSBuZXcgQ29uZmlndXJhdGlvbigpXG4iICsKKyAgICAgIiAgICAgICAgICAgICAgICAuc2V0UHJvcGVydHkoXCJoaWJlcm5hdGUuZGlhbGVjdFwiLFxuIiArCisgICAgICIgICAgICAgICAgICAgICAgICAgICAgICBcImF1LmNvbS5zZW5zaXMud3NlYXJjaC5kYi5DdXN0b21IU1FMREJEaWFsZWN0XCIpXG4iICsKKyAgICAgIiAgICAgICAgICAgICAgICAuc2V0UHJvcGVydHkoXCJoaWJlcm5hdGUuY29ubmVjdGlvbi51cmxcIixcbiIgKworICAgICAiICAgICAgICAgICAgICAgICAgICAgICAgXCJqZGJjOmhzcWxkYjptZW06dGVzdGRiXCIpXG4iICsKKyAgICAgIiAgICAgICAgICAgICAgICAuc2V0UHJvcGVydHkoXCJoaWJlcm5hdGUuY29ubmVjdGlvbi5kcml2ZXJfY2xhc3NcIixcbiIgKworICAgICAiICAgICAgICAgICAgICAgICAgICAgICAgXCJvcmcuaHNxbGRiLmpkYmNEcml2ZXJcIilcbiIgKworICAgICAiICAgICAgICAgICAgICAgIC5zZXRQcm9wZXJ0eShcImhpYmVybmF0ZS5jb25uZWN0aW9uLnVzZXJuYW1lXCIsIFwic2FcIilcbiIgKworICAgICAiICAgICAgICAgICAgICAgIC5zZXRQcm9wZXJ0eShcImhpYmVybmF0ZS5jb25uZWN0aW9uLnBhc3N3b3JkXCIsIFwiXCIpXG4iICsKKyAgICAgIiAgICAgICAgICAgICAgICAuc2V0UHJvcGVydHkoXCJoaWJlcm5hdGUuc2hvd19zcWxcIiwgXCJmYWxzZVwiKVxuIiArCisgICAgICIgICAgICAgICAgICAgICAgLnNldFByb3BlcnR5KFwiaGliZXJuYXRlLm9yZGVyX3VwZGF0ZXNcIiwgXCJ0cnVlXCIpXG4iICsKKyAgICAgIiAgICAgICAgICAgICAgICAuc2V0UHJvcGVydHkoXCJoaWJlcm5hdGUuaGJtMmRkbC5hdXRvXCIsIFwidXBkYXRlXCIpO1xuIiArCisgICAgICIgICAgfVxuIiArCisgICAgICJ9Iik7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0Q29tbWVudDEoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1RleHRUZXN0KAorICAgICAgImNsYXNzIEZvbyB7XG4iICsKKyAgICAgICIgICAgcHVibGljIGJvb2xlYW4gbUVycm9yRmxhZ2U7XG4iICsKKyAgICAgICJcbiIgKworICAgICAgIiAgICAvKipcbiIgKworICAgICAgIiAgICAgKiBSZWZlcmVuY2UgdG8gTmV3IE1lbWJlciBNZXNzYWdlIFNvdXJjZVxuIiArCisgICAgICAiICAgICAqL1xuIiArCisgICAgICAiICAgIHByaXZhdGUgTmV3TWVtYmVyTWVzc2FnZVNvdXJjZSBuZXdNZW1iZXJNZXNzYWdlU291cmNlOyIgKworICAgICAgIlxuIiArCisgICAgICAifSIsCisKKyAgICAgICJjbGFzcyBGb28ge1xuIiArCisgICAgICAiICAgIHB1YmxpYyBib29sZWFuIG1FcnJvckZsYWdlO1xuIiArCisgICAgICAiXG4iICsKKyAgICAgICIgICAgLyoqXG4iICsKKyAgICAgICIgICAgICogUmVmZXJlbmNlIHRvIE5ldyBNZW1iZXIgTWVzc2FnZSBTb3VyY2VcbiIgKworICAgICAgIiAgICAgKi9cbiIgKworICAgICAgIiAgICBwcml2YXRlIE5ld01lbWJlck1lc3NhZ2VTb3VyY2UgbmV3TWVtYmVyTWVzc2FnZVNvdXJjZTsiICsKKyAgICAgICJcbiIgKworICAgICAgIn0iKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RFbHNlQWZ0ZXJDb21tZW50KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXh0VGVzdCgicHVibGljIGNsYXNzIEZvbyB7XG4iICsKKyAgICAgICAgICAgICAgICIgICAgcHVibGljIGludCBmb28oKSB7XG4iICsKKyAgICAgICAgICAgICAgICIgICAgICAgIGlmIChhKSB7XG4iICsKKyAgICAgICAgICAgICAgICIgICAgICAgICAgICByZXR1cm47XG4iICsKKyAgICAgICAgICAgICAgICIgICAgICAgIH0vL2NvbW1lbnRcbiIgKworICAgICAgICAgICAgICAgIiAgICAgICAgZWxzZSB7XG4iICsKKyAgICAgICAgICAgICAgICIgICAgICAgIH1cbiIgKworICAgICAgICAgICAgICAgIiAgICB9XG4iICsKKyJ9IiwgInB1YmxpYyBjbGFzcyBGb28ge1xuIiArCisgICAgICIgICAgcHVibGljIGludCBmb28oKSB7XG4iICsKKyAgICAgIiAgICAgICAgaWYgKGEpIHtcbiIgKworICAgICAiICAgICAgICAgICAgcmV0dXJuO1xuIiArCisgICAgICIgICAgICAgIH0vL2NvbW1lbnRcbiIgKworICAgICAiICAgICAgICBlbHNlIHtcbiIgKworICAgICAiICAgICAgICB9XG4iICsKKyAgICAgIiAgICB9XG4iICsKKyAgICAgIn0iKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RMQnJhY2VBZnRlckNvbW1lbnQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBmaW5hbCBDb21tb25Db2RlU3R5bGVTZXR0aW5ncyBzZXR0aW5ncyA9IGdldFNldHRpbmdzKCk7CisgICAgc2V0dGluZ3MuS0VFUF9MSU5FX0JSRUFLUyA9IGZhbHNlOworICAgIGRvVGV4dFRlc3QoInB1YmxpYyBjbGFzcyBGb28ge1xuIiArCisgICAgICAgICAgICAgICAiICAgIHB1YmxpYyBpbnQgZm9vKCkge1xuIiArCisgICAgICAgICAgICAgICAiICAgICAgICBpZiAoYSkgXG4iICsKKyAgICAgICAgICAgICAgICIgIC8vY29tbWVudFxuIiArCisgICAgICAgICAgICAgICAie1xuIiArCisgICAgICAgICAgICAgICAiICAgICAgICAgICAgcmV0dXJuO1xuIiArCisgICAgICAgICAgICAgICAiICAgICAgICB9XG4iICsKKyAgICAgICAgICAgICAgICIgICAgfVxuIiArCisifSIsICJwdWJsaWMgY2xhc3MgRm9vIHtcbiIgKworICAgICAiICAgIHB1YmxpYyBpbnQgZm9vKCkge1xuIiArCisgICAgICIgICAgICAgIGlmIChhKVxuIiArCisgICAgICIgICAgICAgIC8vY29tbWVudFxuIiArCisgICAgICIgICAgICAgIHtcbiIgKworICAgICAiICAgICAgICAgICAgcmV0dXJuO1xuIiArCisgICAgICIgICAgICAgIH1cbiIgKworICAgICAiICAgIH1cbiIgKworICAgICAifSIpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFNwYWNlcygpIHRocm93cyBFeGNlcHRpb24geworICAgIGZpbmFsIENvbW1vbkNvZGVTdHlsZVNldHRpbmdzIHNldHRpbmdzID0gZ2V0U2V0dGluZ3MoKTsKKyAgICBzZXR0aW5ncy5TUEFDRV9XSVRISU5fRk9SX1BBUkVOVEhFU0VTID0gdHJ1ZTsKKyAgICBzZXR0aW5ncy5TUEFDRV9XSVRISU5fSUZfUEFSRU5USEVTRVMgPSB0cnVlOworICAgIHNldHRpbmdzLlNQQUNFX1dJVEhJTl9NRVRIT0RfUEFSRU5USEVTRVMgPSB0cnVlOworICAgIHNldHRpbmdzLlNQQUNFX1dJVEhJTl9NRVRIT0RfQ0FMTF9QQVJFTlRIRVNFUyA9IHRydWU7CisgICAgc2V0dGluZ3MuU1BBQ0VfQkVGT1JFX01FVEhPRF9QQVJFTlRIRVNFUyA9IHRydWU7CisgICAgc2V0dGluZ3MuU1BBQ0VfQkVGT1JFX01FVEhPRF9DQUxMX1BBUkVOVEhFU0VTID0gdHJ1ZTsKKyAgICBkb1Rlc3QoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RTcGFjZXNCZWZvcmVMQnJhY2UoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBmaW5hbCBDb21tb25Db2RlU3R5bGVTZXR0aW5ncyBzZXR0aW5ncyA9IGdldFNldHRpbmdzKCk7CisgICAgc2V0dGluZ3MuU1BBQ0VfQkVGT1JFX0NMQVNTX0xCUkFDRSA9IHRydWU7CisgICAgc2V0dGluZ3MuU1BBQ0VfQkVGT1JFX01FVEhPRF9MQlJBQ0UgPSB0cnVlOworICAgIHNldHRpbmdzLlNQQUNFX0JFRk9SRV9JRl9MQlJBQ0UgPSB0cnVlOworICAgIHNldHRpbmdzLlNQQUNFX0JFRk9SRV9FTFNFX0xCUkFDRSA9IHRydWU7CisgICAgc2V0dGluZ3MuU1BBQ0VfQkVGT1JFX1dISUxFX0xCUkFDRSA9IHRydWU7CisgICAgc2V0dGluZ3MuU1BBQ0VfQkVGT1JFX0ZPUl9MQlJBQ0UgPSB0cnVlOworICAgIHNldHRpbmdzLlNQQUNFX0JFRk9SRV9ET19MQlJBQ0UgPSB0cnVlOworICAgIHNldHRpbmdzLlNQQUNFX0JFRk9SRV9TV0lUQ0hfTEJSQUNFID0gdHJ1ZTsKKyAgICBzZXR0aW5ncy5TUEFDRV9CRUZPUkVfVFJZX0xCUkFDRSA9IHRydWU7CisgICAgc2V0dGluZ3MuU1BBQ0VfQkVGT1JFX0NBVENIX0xCUkFDRSA9IHRydWU7CisgICAgc2V0dGluZ3MuU1BBQ0VfQkVGT1JFX0ZJTkFMTFlfTEJSQUNFID0gdHJ1ZTsKKyAgICBzZXR0aW5ncy5TUEFDRV9CRUZPUkVfU1lOQ0hST05JWkVEX0xCUkFDRSA9IHRydWU7CisgICAgc2V0dGluZ3MuU1BBQ0VfQkVGT1JFX0FSUkFZX0lOSVRJQUxJWkVSX0xCUkFDRSA9IHRydWU7CisKKyAgICBkb1Rlc3QoKTsKKworICAgIHNldHRpbmdzLlNQQUNFX0JFRk9SRV9DTEFTU19MQlJBQ0UgPSBmYWxzZTsKKyAgICBzZXR0aW5ncy5TUEFDRV9CRUZPUkVfTUVUSE9EX0xCUkFDRSA9IGZhbHNlOworICAgIHNldHRpbmdzLlNQQUNFX0JFRk9SRV9JRl9MQlJBQ0UgPSBmYWxzZTsKKyAgICBzZXR0aW5ncy5TUEFDRV9CRUZPUkVfRUxTRV9MQlJBQ0UgPSBmYWxzZTsKKyAgICBzZXR0aW5ncy5TUEFDRV9CRUZPUkVfV0hJTEVfTEJSQUNFID0gZmFsc2U7CisgICAgc2V0dGluZ3MuU1BBQ0VfQkVGT1JFX0ZPUl9MQlJBQ0UgPSBmYWxzZTsKKyAgICBzZXR0aW5ncy5TUEFDRV9CRUZPUkVfRE9fTEJSQUNFID0gZmFsc2U7CisgICAgc2V0dGluZ3MuU1BBQ0VfQkVGT1JFX1NXSVRDSF9MQlJBQ0UgPSBmYWxzZTsKKyAgICBzZXR0aW5ncy5TUEFDRV9CRUZPUkVfVFJZX0xCUkFDRSA9IGZhbHNlOworICAgIHNldHRpbmdzLlNQQUNFX0JFRk9SRV9DQVRDSF9MQlJBQ0UgPSBmYWxzZTsKKyAgICBzZXR0aW5ncy5TUEFDRV9CRUZPUkVfRklOQUxMWV9MQlJBQ0UgPSBmYWxzZTsKKyAgICBzZXR0aW5ncy5TUEFDRV9CRUZPUkVfU1lOQ0hST05JWkVEX0xCUkFDRSA9IGZhbHNlOworICAgIHNldHRpbmdzLlNQQUNFX0JFRk9SRV9BUlJBWV9JTklUSUFMSVpFUl9MQlJBQ0UgPSBmYWxzZTsKKworICAgIGRvVGVzdCgiU3BhY2VzQmVmb3JlTEJyYWNlLmphdmEiLCAiU3BhY2VzQmVmb3JlTEJyYWNlLmphdmEiKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RDb21tZW50QmVmb3JlRmllbGQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBmaW5hbCBDb21tb25Db2RlU3R5bGVTZXR0aW5ncyBzZXR0aW5ncyA9IGdldFNldHRpbmdzKCk7CisgICAgc2V0dGluZ3MuS0VFUF9MSU5FX0JSRUFLUyA9IGZhbHNlOworICAgIHNldHRpbmdzLktFRVBfRklSU1RfQ09MVU1OX0NPTU1FTlQgPSBmYWxzZTsKKyAgICBzZXR0aW5ncy5LRUVQX0NPTlRST0xfU1RBVEVNRU5UX0lOX09ORV9MSU5FID0gZmFsc2U7CisgICAgc2V0dGluZ3MuS0VFUF9TSU1QTEVfQkxPQ0tTX0lOX09ORV9MSU5FID0gZmFsc2U7CisgICAgc2V0dGluZ3MuS0VFUF9TSU1QTEVfTUVUSE9EU19JTl9PTkVfTElORSA9IGZhbHNlOworICAgIGRvVGV4dFRlc3QoImNsYXNzIEZvb3tcbiIgKyAiICAgIC8vRm9vIGFcbiIgKyAiICAgIEZvbyBhOyBcbiIgKyAifSIsICJjbGFzcyBGb28ge1xuIiArICIgICAgLy9Gb28gYVxuIiArICIgICAgRm9vIGE7XG4iICsgIn0iKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RMYWJlbCgpIHRocm93cyBFeGNlcHRpb24geworICAgIGZpbmFsIENvbW1vbkNvZGVTdHlsZVNldHRpbmdzIHNldHRpbmdzID0gZ2V0U2V0dGluZ3MoKTsKKyAgICBzZXR0aW5ncy5nZXRSb290U2V0dGluZ3MoKS5nZXRJbmRlbnRPcHRpb25zKFN0ZEZpbGVUeXBlcy5KQVZBKS5MQUJFTF9JTkRFTlRfQUJTT0xVVEUgPSB0cnVlOworICAgIHNldHRpbmdzLlNQRUNJQUxfRUxTRV9JRl9UUkVBVE1FTlQgPSB0cnVlOworICAgIHNldHRpbmdzLkZPUl9CUkFDRV9GT1JDRSA9IENvbW1vbkNvZGVTdHlsZVNldHRpbmdzLkZPUkNFX0JSQUNFU19BTFdBWVM7CisgICAgbXlUZXh0UmFuZ2UgPSBuZXcgVGV4dFJhbmdlKDU5LCAxMjEpOworICAgIGRvVGV4dFRlc3QoInB1YmxpYyBjbGFzcyBGb28ge1xuIiArCisgICAgICAgICAgICAgICAiICAgIHB1YmxpYyB2b2lkIGZvbygpIHtcbiIgKworICAgICAgICAgICAgICAgImxhYmVsMjpcbiIgKworICAgICAgICAgICAgICAgIiAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCA1OyBpKyspXG4iICsKKyAgICAgICAgICAgICAgICIgICAgICAgIHtkb1NvbWV0aGluZyhpKTtcbiIgKworICAgICAgICAgICAgICAgIiAgICAgICAgfVxuIiArCisgICAgICAgICAgICAgICAiICAgIH1cbiIgKworIn0iLCAicHVibGljIGNsYXNzIEZvbyB7XG4iICsKKyAgICAgIiAgICBwdWJsaWMgdm9pZCBmb28oKSB7XG4iICsKKyAgICAgImxhYmVsMjpcbiIgKworICAgICAiICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDU7IGkrKykge1xuIiArCisgICAgICIgICAgICAgICAgICBkb1NvbWV0aGluZyhpKTtcbiIgKworICAgICAiICAgICAgICB9XG4iICsKKyAgICAgIiAgICB9XG4iICsKKyAgICAgIn0iKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RFbHNlT25OZXdMaW5lKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXh0VGVzdCgiY2xhc3MgRm9ve1xuIiArICJ2b2lkIGZvbygpIHtcbiIgKyAiaWYgKGEpXG4iICsgInJldHVybjtcbiIgKyAiZWxzZVxuIiArICJyZXR1cm47XG4iICsgIn1cbiIgKyAifSIsICJjbGFzcyBGb28ge1xuIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgICAgdm9pZCBmb28oKSB7XG4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgICAgICAgaWYgKGEpXG4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgICAgICAgICAgIHJldHVybjtcbiIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgICAgICBlbHNlXG4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgICAgICAgICAgIHJldHVybjtcbiIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgIH1cbiIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAifSIpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFR3b0NsYXNzZXMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1RleHRUZXN0KCJjbGFzcyBBIHt9XG4iICsgImNsYXNzIEIge30iLCAiY2xhc3MgQSB7XG4iICsgIn1cbiIgKyAiXG4iICsgImNsYXNzIEIge1xuIiArICJ9Iik7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0QnJhY2VPbk5ld0xpbmVJZldyYXBwZWQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBnZXRTZXR0aW5ncygpLkJJTkFSWV9PUEVSQVRJT05fV1JBUCA9IENvbW1vbkNvZGVTdHlsZVNldHRpbmdzLldSQVBfQVNfTkVFREVEOworICAgIGdldFNldHRpbmdzKCkuQlJBQ0VfU1RZTEUgPSBDb21tb25Db2RlU3R5bGVTZXR0aW5ncy5ORVhUX0xJTkVfSUZfV1JBUFBFRDsKKyAgICBnZXRTZXR0aW5ncygpLmdldFJvb3RTZXR0aW5ncygpLlJJR0hUX01BUkdJTiA9IDM1OworICAgIGdldFNldHRpbmdzKCkuQUxJR05fTVVMVElMSU5FX0JJTkFSWV9PUEVSQVRJT04gPSB0cnVlOworCisgICAgZG9UZXh0VGVzdCgiY2xhc3MgRm9vIHtcbiIgKworICAgICAgICAgICAgICAgIiAgICB2b2lkIGZvbygpe1xuIiArCisgICAgICAgICAgICAgICAiICAgICAgICBpZiAodmVyeUxvbmdDb25kaXRpb24gfHwgdmVyeVZlcnlWZXJ5VmVyeUxvbmdDb25kaXRpb24pIHtcbiIgKworICAgICAgICAgICAgICAgIiAgICAgICAgICAgIGZvbygpO1xuIiArCisgICAgICAgICAgICAgICAiICAgICAgICB9XG4iICsKKyAgICAgICAgICAgICAgICIgICAgICAgIGlmIChhKSB7XG4iICsKKyAgICAgICAgICAgICAgICIgICAgICAgIH0iICsKKyAgICAgICAgICAgICAgICIgICAgfVxuIiArCisifSIsICJjbGFzcyBGb28ge1xuIiArCisgICAgICIgICAgdm9pZCBmb28oKSB7XG4iICsKKyAgICAgIiAgICAgICAgaWYgKHZlcnlMb25nQ29uZGl0aW9uIHx8XG4iICsKKyAgICAgIiAgICAgICAgICAgIHZlcnlWZXJ5VmVyeVZlcnlMb25nQ29uZGl0aW9uKVxuIiArCisgICAgICIgICAgICAgIHtcbiIgKworICAgICAiICAgICAgICAgICAgZm9vKCk7XG4iICsKKyAgICAgIiAgICAgICAgfVxuIiArCisgICAgICIgICAgICAgIGlmIChhKSB7XG4iICsKKyAgICAgIiAgICAgICAgfVxuIiArCisgICAgICIgICAgfVxuIiArCisgICAgICJ9Iik7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0Rmlyc3RBcmd1bWVudFdyYXBwaW5nKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZ2V0U2V0dGluZ3MoKS5nZXRSb290U2V0dGluZ3MoKS5SSUdIVF9NQVJHSU4gPSAyMDsKKyAgICBnZXRTZXR0aW5ncygpLkNBTExfUEFSQU1FVEVSU19XUkFQID0gQ29tbW9uQ29kZVN0eWxlU2V0dGluZ3MuV1JBUF9BU19ORUVERUQ7CisgICAgZG9UZXh0VGVzdCgiY2xhc3MgRm9vIHtcbiIgKyAiICAgIHZvaWQgZm9vKCkge1xuIiArICIgICAgICAgIGZvb0Zvb0Zvb0ZvbygxKTsiICsgIiAgICB9XG4iICsgIn0iLAorICAgICAgICAgICAgICAgImNsYXNzIEZvbyB7XG4iICsgIiAgICB2b2lkIGZvbygpIHtcbiIgKyAiICAgICAgICBmb29Gb29Gb29Gb28oXG4iICsgIiAgICAgICAgICAgICAgICAxKTtcbiIgKyAiICAgIH1cbiIgKyAifSIpOworCisgICAgZ2V0U2V0dGluZ3MoKS5DQUxMX1BBUkFNRVRFUlNfV1JBUCA9IENvbW1vbkNvZGVTdHlsZVNldHRpbmdzLldSQVBfT05fRVZFUllfSVRFTTsKKyAgICBkb1RleHRUZXN0KCJjbGFzcyBGb28ge1xuIiArICIgICAgdm9pZCBmb28oKSB7XG4iICsgIiAgICAgICAgZm9vRm9vRm9vRm9vKDEsMik7IiArICIgICAgfVxuIiArICJ9IiwgImNsYXNzIEZvbyB7XG4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgICB2b2lkIGZvbygpIHtcbiIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgICAgICBmb29Gb29Gb29Gb28oXG4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgICAgICAgICAgICAgICAxLFxuIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgICAgICAgICAgICAgICAgMik7XG4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgICB9XG4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIn0iKTsKKworICAgIGRvVGV4dFRlc3QoImNsYXNzIEZvbyB7XG4iICsgIiAgICB2b2lkIGZvbygpIHtcbiIgKyAiICAgICAgICBmb29Gb29Gb28oMSwyKTsiICsgIiAgICB9XG4iICsgIn0iLAorICAgICAgICAgICAgICAgImNsYXNzIEZvbyB7XG4iICsgIiAgICB2b2lkIGZvbygpIHtcbiIgKyAiICAgICAgICBmb29Gb29Gb28oMSxcbiIgKyAiICAgICAgICAgICAgICAgIDIpO1xuIiArICIgICAgfVxuIiArICJ9Iik7CisKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RTcGFjZXNJbnNpZGVXaGlsZSgpIHRocm93cyBFeGNlcHRpb24geworICAgIGdldFNldHRpbmdzKCkuU1BBQ0VfV0lUSElOX1dISUxFX1BBUkVOVEhFU0VTID0gdHJ1ZTsKKyAgICBkb1RleHRUZXN0KCJjbGFzcyBGb297XG4iICsgIiAgICB2b2lkIGZvbygpIHtcbiIgKyAiICAgICAgICB3aGlsZSh4ICE9IHkpIHtcbiIgKyAiICAgICAgICB9XG4iICsgIiAgICB9XG4iICsgIn0iLAorICAgICAgICAgICAgICAgImNsYXNzIEZvbyB7XG4iICsgIiAgICB2b2lkIGZvbygpIHtcbiIgKyAiICAgICAgICB3aGlsZSAoIHggIT0geSApIHtcbiIgKyAiICAgICAgICB9XG4iICsgIiAgICB9XG4iICsgIn0iKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RBc3NlcnRTdGF0ZW1lbnRXcmFwcGluZygpIHRocm93cyBFeGNlcHRpb24geworICAgIGdldFNldHRpbmdzKCkuQVNTRVJUX1NUQVRFTUVOVF9XUkFQID0gQ29tbW9uQ29kZVN0eWxlU2V0dGluZ3MuV1JBUF9BU19ORUVERUQ7CisgICAgZ2V0U2V0dGluZ3MoKS5CSU5BUllfT1BFUkFUSU9OX1dSQVAgPSBDb21tb25Db2RlU3R5bGVTZXR0aW5ncy5ET19OT1RfV1JBUDsKKyAgICBnZXRTZXR0aW5ncygpLmdldFJvb3RTZXR0aW5ncygpLlJJR0hUX01BUkdJTiA9IDQwOworICAgIGZpbmFsIEphdmFQc2lGYWNhZGUgZmFjYWRlID0gZ2V0SmF2YUZhY2FkZSgpOworICAgIGZpbmFsIExhbmd1YWdlTGV2ZWwgZWZmZWN0aXZlTGFuZ3VhZ2VMZXZlbCA9IExhbmd1YWdlTGV2ZWxQcm9qZWN0RXh0ZW5zaW9uLmdldEluc3RhbmNlKGZhY2FkZS5nZXRQcm9qZWN0KCkpLmdldExhbmd1YWdlTGV2ZWwoKTsKKyAgICB0cnkgeworICAgICAgTGFuZ3VhZ2VMZXZlbFByb2plY3RFeHRlbnNpb24uZ2V0SW5zdGFuY2UoZmFjYWRlLmdldFByb2plY3QoKSkuc2V0TGFuZ3VhZ2VMZXZlbChMYW5ndWFnZUxldmVsLkpES18xXzUpOworCisgICAgICBnZXRTZXR0aW5ncygpLkFTU0VSVF9TVEFURU1FTlRfQ09MT05fT05fTkVYVF9MSU5FID0gZmFsc2U7CisgICAgICBkb1RleHRUZXN0KCJjbGFzcyBGb28ge1xuIiArCisgICAgICAgICAgICAgICAgICIgICAgdm9pZCBmb28oKSB7XG4iICsKKyAgICAgICAgICAgICAgICAgIiAgICAgICAgYXNzZXJ0IG1ldGhvZFdpdGhWZXJ5VmVyeUxvbmdOYW1lKCkgOiBmb287XG4iICsKKyAgICAgICAgICAgICAgICAgIiAgICAgICAgYXNzZXJ0IGkgKyBqICsgayArIGwgKyBuICsgbSA8PSAyIDogXCJhc3NlcnQgZGVzY3JpcHRpb25cIjtcbiIgKworICAgICAgICAgICAgICAgICAiICAgIH1cbiIgKworIn1cbiIsICJjbGFzcyBGb28ge1xuIiArCisgICAgICAgIiAgICB2b2lkIGZvbygpIHtcbiIgKworICAgICAgICIgICAgICAgIGFzc2VydCBtZXRob2RXaXRoVmVyeVZlcnlMb25nTmFtZSgpIDpcbiIgKworICAgICAgICIgICAgICAgICAgICAgICAgZm9vO1xuIiArCisgICAgICAgIiAgICAgICAgYXNzZXJ0IGkgKyBqICsgayArIGwgKyBuICsgbSA8PSAyIDpcbiIgKworICAgICAgICIgICAgICAgICAgICAgICAgXCJhc3NlcnQgZGVzY3JpcHRpb25cIjtcbiIgKworICAgICAgICIgICAgfVxuIiArCisgICAgICAgIn1cbiIpOworCisgICAgICBnZXRTZXR0aW5ncygpLkFTU0VSVF9TVEFURU1FTlRfQ09MT05fT05fTkVYVF9MSU5FID0gdHJ1ZTsKKyAgICAgIGRvVGV4dFRlc3QoImNsYXNzIEZvbyB7XG4iICsKKyAgICAgICAgICAgICAgICAgIiAgICB2b2lkIGZvbygpIHtcbiIgKworICAgICAgICAgICAgICAgICAiICAgICAgICBhc3NlcnQgbWV0aG9kV2l0aFZlcnlWZXJ5TG9uZ05hbWUoKSA6IGZvbztcbiIgKworICAgICAgICAgICAgICAgICAiICAgICAgICBhc3NlcnQgaSArIGogKyBrICsgbCArIG4gKyBtIDw9IDIgOiBcImFzc2VydCBkZXNjcmlwdGlvblwiO1xuIiArCisgICAgICAgICAgICAgICAgICIgICAgfVxuIiArCisifVxuIiwgImNsYXNzIEZvbyB7XG4iICsKKyAgICAgICAiICAgIHZvaWQgZm9vKCkge1xuIiArCisgICAgICAgIiAgICAgICAgYXNzZXJ0IG1ldGhvZFdpdGhWZXJ5VmVyeUxvbmdOYW1lKClcbiIgKworICAgICAgICIgICAgICAgICAgICAgICAgOiBmb287XG4iICsKKyAgICAgICAiICAgICAgICBhc3NlcnQgaSArIGogKyBrICsgbCArIG4gKyBtIDw9IDJcbiIgKworICAgICAgICIgICAgICAgICAgICAgICAgOiBcImFzc2VydCBkZXNjcmlwdGlvblwiO1xuIiArCisgICAgICAgIiAgICB9XG4iICsKKyAgICAgICAifVxuIik7CisKKyAgICB9CisgICAgZmluYWxseSB7CisgICAgICBMYW5ndWFnZUxldmVsUHJvamVjdEV4dGVuc2lvbi5nZXRJbnN0YW5jZShmYWNhZGUuZ2V0UHJvamVjdCgpKS5zZXRMYW5ndWFnZUxldmVsKGVmZmVjdGl2ZUxhbmd1YWdlTGV2ZWwpOworICAgIH0KKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RBc3NlcnRTdGF0ZW1lbnRXcmFwcGluZzIoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBnZXRTZXR0aW5ncygpLkJJTkFSWV9PUEVSQVRJT05fV1JBUCA9IENvbW1vbkNvZGVTdHlsZVNldHRpbmdzLkRPX05PVF9XUkFQOworICAgIGdldFNldHRpbmdzKCkuQVNTRVJUX1NUQVRFTUVOVF9XUkFQID0gQ29tbW9uQ29kZVN0eWxlU2V0dGluZ3MuV1JBUF9BU19ORUVERUQ7CisgICAgZ2V0U2V0dGluZ3MoKS5nZXRSb290U2V0dGluZ3MoKS5SSUdIVF9NQVJHSU4gPSAzNzsKKworICAgIGZpbmFsIENvbW1vbkNvZGVTdHlsZVNldHRpbmdzLkluZGVudE9wdGlvbnMgb3B0aW9ucyA9IGdldFNldHRpbmdzKCkuZ2V0Um9vdFNldHRpbmdzKCkuZ2V0SW5kZW50T3B0aW9ucyhTdGRGaWxlVHlwZXMuSkFWQSk7CisgICAgb3B0aW9ucy5JTkRFTlRfU0laRSA9IDI7CisgICAgb3B0aW9ucy5DT05USU5VQVRJT05fSU5ERU5UX1NJWkUgPSAyOworCisgICAgZ2V0U2V0dGluZ3MoKS5BU1NFUlRfU1RBVEVNRU5UX0NPTE9OX09OX05FWFRfTElORSA9IHRydWU7CisKKyAgICBmaW5hbCBKYXZhUHNpRmFjYWRlIGZhY2FkZSA9IGdldEphdmFGYWNhZGUoKTsKKyAgICBmaW5hbCBMYW5ndWFnZUxldmVsIGVmZmVjdGl2ZUxhbmd1YWdlTGV2ZWwgPSBMYW5ndWFnZUxldmVsUHJvamVjdEV4dGVuc2lvbi5nZXRJbnN0YW5jZShmYWNhZGUuZ2V0UHJvamVjdCgpKS5nZXRMYW5ndWFnZUxldmVsKCk7CisgICAgTGFuZ3VhZ2VMZXZlbFByb2plY3RFeHRlbnNpb24uZ2V0SW5zdGFuY2UoZmFjYWRlLmdldFByb2plY3QoKSkuc2V0TGFuZ3VhZ2VMZXZlbChMYW5ndWFnZUxldmVsLkpES18xXzUpOworCisgICAgdHJ5IHsKKyAgICAgIGRvVGV4dFRlc3QoCisgICAgICAgICJjbGFzcyBGb28ge1xuIiArICIgICAgdm9pZCBmb28oKSB7XG4iICsgIiAgICAgICAgYXNzZXJ0IGkgKyBqICsgayArIGwgKyBuICsgbSA8PSAyIDogXCJhc3NlcnQgZGVzY3JpcHRpb25cIjsiICsgIiAgICB9XG4iICsgIn0iLAorICAgICAgICAiY2xhc3MgRm9vIHtcbiIgKworICAgICAgICAiICB2b2lkIGZvbygpIHtcbiIgKworICAgICAgICAiICAgIGFzc2VydCBpICsgaiArIGsgKyBsICsgbiArIG0gPD0gMlxuIiArCisgICAgICAgICIgICAgICA6IFwiYXNzZXJ0IGRlc2NyaXB0aW9uXCI7XG4iICsKKyAgICAgICAgIiAgfVxuIiArCisgICAgICAgICJ9Iik7CisKKyAgICAgIGdldFNldHRpbmdzKCkuQVNTRVJUX1NUQVRFTUVOVF9DT0xPTl9PTl9ORVhUX0xJTkUgPSBmYWxzZTsKKworICAgICAgZG9UZXh0VGVzdCgKKyAgICAgICAgImNsYXNzIEZvbyB7XG4iICsgIiAgICB2b2lkIGZvbygpIHtcbiIgKyAiICAgICAgICBhc3NlcnQgaSArIGogKyBrICsgbCArIG4gKyBtIDw9IDIgOiBcImFzc2VydCBkZXNjcmlwdGlvblwiOyIgKyAiICAgIH1cbiIgKyAifSIsCisgICAgICAgICJjbGFzcyBGb28ge1xuIiArCisgICAgICAgICIgIHZvaWQgZm9vKCkge1xuIiArCisgICAgICAgICIgICAgYXNzZXJ0XG4iICsKKyAgICAgICAgIiAgICAgIGkgKyBqICsgayArIGwgKyBuICsgbSA8PSAyIDpcbiIgKworICAgICAgICAiICAgICAgXCJhc3NlcnQgZGVzY3JpcHRpb25cIjtcbiIgKworICAgICAgICAiICB9XG4iICsKKyAgICAgICAgIn0iKTsKKyAgICB9CisgICAgZmluYWxseSB7CisgICAgICBMYW5ndWFnZUxldmVsUHJvamVjdEV4dGVuc2lvbi5nZXRJbnN0YW5jZShmYWNhZGUuZ2V0UHJvamVjdCgpKS5zZXRMYW5ndWFnZUxldmVsKGVmZmVjdGl2ZUxhbmd1YWdlTGV2ZWwpOworICAgIH0KKworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdCgpIHRocm93cyBFeGNlcHRpb24geworICAgIGdldFNldHRpbmdzKCkuZ2V0Um9vdFNldHRpbmdzKCkuZ2V0SW5kZW50T3B0aW9ucyhTdGRGaWxlVHlwZXMuSkFWQSkuSU5ERU5UX1NJWkUgPSAyOworICAgIGdldFNldHRpbmdzKCkuZ2V0Um9vdFNldHRpbmdzKCkuZ2V0SW5kZW50T3B0aW9ucyhTdGRGaWxlVHlwZXMuSkFWQSkuQ09OVElOVUFUSU9OX0lOREVOVF9TSVpFID0gMjsKKyAgICBnZXRTZXR0aW5ncygpLmdldFJvb3RTZXR0aW5ncygpLlJJR0hUX01BUkdJTiA9IDM3OworICAgIGdldFNldHRpbmdzKCkuQUxJR05fTVVMVElMSU5FX0VYVEVORFNfTElTVCA9IHRydWU7CisKKyAgICBnZXRTZXR0aW5ncygpLkVYVEVORFNfS0VZV09SRF9XUkFQID0gQ29tbW9uQ29kZVN0eWxlU2V0dGluZ3MuV1JBUF9BU19ORUVERUQ7CisgICAgZ2V0U2V0dGluZ3MoKS5FWFRFTkRTX0xJU1RfV1JBUCA9IENvbW1vbkNvZGVTdHlsZVNldHRpbmdzLldSQVBfQVNfTkVFREVEOworCisgICAgZ2V0U2V0dGluZ3MoKS5BU1NFUlRfU1RBVEVNRU5UX1dSQVAgPSBDb21tb25Db2RlU3R5bGVTZXR0aW5ncy5XUkFQX0FTX05FRURFRDsKKyAgICBnZXRTZXR0aW5ncygpLkFTU0VSVF9TVEFURU1FTlRfQ09MT05fT05fTkVYVF9MSU5FID0gZmFsc2U7CisgICAgZ2V0U2V0dGluZ3MoKS5BTElHTl9NVUxUSUxJTkVfQklOQVJZX09QRVJBVElPTiA9IHRydWU7CisKKyAgICBmaW5hbCBKYXZhUHNpRmFjYWRlIGZhY2FkZSA9IGdldEphdmFGYWNhZGUoKTsKKyAgICBmaW5hbCBMYW5ndWFnZUxldmVsIGVmZmVjdGl2ZUxhbmd1YWdlTGV2ZWwgPSBMYW5ndWFnZUxldmVsUHJvamVjdEV4dGVuc2lvbi5nZXRJbnN0YW5jZShmYWNhZGUuZ2V0UHJvamVjdCgpKS5nZXRMYW5ndWFnZUxldmVsKCk7CisgICAgTGFuZ3VhZ2VMZXZlbFByb2plY3RFeHRlbnNpb24uZ2V0SW5zdGFuY2UoZmFjYWRlLmdldFByb2plY3QoKSkuc2V0TGFuZ3VhZ2VMZXZlbChMYW5ndWFnZUxldmVsLkpES18xXzUpOworCisKKyAgICB0cnkgeworICAgICAgZG9UZXh0VGVzdCgicHVibGljIGNsYXNzIFRoaXNJc0FTYW1wbGVDbGFzcyBleHRlbmRzIEMxIGltcGxlbWVudHMgSTEsIEkyLCBJMywgSTQsIEk1IHtcbiIgKworICAgICAgICAgICAgICAgICAiICBwdWJsaWMgdm9pZCBsb25nZXJNZXRob2QoKSB7XG4iICsKKyAgICAgICAgICAgICAgICAgIiAgICBhc3NlcnQgaSArIGogKyBrICsgbCArIG4rIG0gPD0gMiA6IFwiYXNzZXJ0IGRlc2NyaXB0aW9uXCI7IiArCisgICAgICAgICAgICAgICAgICIgIH1cbiIgKworIn0iLCAicHVibGljIGNsYXNzIFRoaXNJc0FTYW1wbGVDbGFzc1xuIiArCisgICAgICIgIGV4dGVuZHMgQzFcbiIgKworICAgICAiICBpbXBsZW1lbnRzIEkxLCBJMiwgSTMsIEk0LCBJNSB7XG4iICsKKyAgICAgIiAgcHVibGljIHZvaWQgbG9uZ2VyTWV0aG9kKCkge1xuIiArCisgICAgICIgICAgYXNzZXJ0XG4iICsKKyAgICAgIiAgICAgIGkgKyBqICsgayArIGwgKyBuICsgbSA8PSAyIDpcbiIgKworICAgICAiICAgICAgXCJhc3NlcnQgZGVzY3JpcHRpb25cIjtcbiIgKworICAgICAiICB9XG4iICsKKyAgICAgIn0iKTsKKyAgICB9CisgICAgZmluYWxseSB7CisgICAgICBMYW5ndWFnZUxldmVsUHJvamVjdEV4dGVuc2lvbi5nZXRJbnN0YW5jZShmYWNhZGUuZ2V0UHJvamVjdCgpKS5zZXRMYW5ndWFnZUxldmVsKGVmZmVjdGl2ZUxhbmd1YWdlTGV2ZWwpOworICAgIH0KKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RMQnJhY2UoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBnZXRTZXR0aW5ncygpLk1FVEhPRF9CUkFDRV9TVFlMRSA9IENvbW1vbkNvZGVTdHlsZVNldHRpbmdzLkVORF9PRl9MSU5FOworICAgIGdldFNldHRpbmdzKCkuZ2V0Um9vdFNldHRpbmdzKCkuUklHSFRfTUFSR0lOID0gMTQ7CisgICAgZG9UZXh0VGVzdCgiY2xhc3MgRm9vIHtcbiIgKyAiICAgIHZvaWQgZm9vKCkge1xuIiArICIgICAgICAgIFxuIiArICIgICAgfVxuIiArICJ9IiwKKyAgICAgICAgICAgICAgICJjbGFzcyBGb28ge1xuIiArICIgICAgdm9pZCBmb28oKSB7XG4iICsgIlxuIiArICIgICAgfVxuIiArICJ9Iik7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0SmF2YURvY0xlYWRpbmdBc3Rlcmlza3NBcmVEaXNhYmxlZCgpIHRocm93cyBFeGNlcHRpb24geworICAgIGdldFNldHRpbmdzKCkuZ2V0Um9vdFNldHRpbmdzKCkuSkRfTEVBRElOR19BU1RFUklTS1NfQVJFX0VOQUJMRUQgPSBmYWxzZTsKKyAgICBkb1RleHRUZXN0KCJjbGFzcyBGb28ge1xuIiArCisgICAgICAgICAgICAgICAiICAgIC8qKlxuIiArCisgICAgICAgICAgICAgICAiICAgICBAcGFyYW0gaVxuIiArCisgICAgICAgICAgICAgICAiICAgICBAcGFyYW0galxuIiArCisgICAgICAgICAgICAgICAiICAgICovXG4iICsKKyAgICAgICAgICAgICAgICIgICAgdm9pZCBmb28oaW50IGksIGludCBqKSB7XG4iICsKKyAgICAgICAgICAgICAgICIgICAgfVxuIiArCisifSIsICJjbGFzcyBGb28ge1xuIiArCisgICAgICIgICAgLyoqXG4iICsKKyAgICAgIiAgICAgQHBhcmFtIGlcbiIgKworICAgICAiICAgICBAcGFyYW0galxuIiArCisgICAgICIgICAgICovXG4iICsKKyAgICAgIiAgICB2b2lkIGZvbyhpbnQgaSwgaW50IGopIHtcbiIgKworICAgICAiICAgIH1cbiIgKworICAgICAifSIpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEJpbmFyeUV4cHJlc3Npb24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBnZXRTZXR0aW5ncygpLkFMSUdOX01VTFRJTElORV9CSU5BUllfT1BFUkFUSU9OID0gdHJ1ZTsKKyAgICBkb1RleHRUZXN0KCJjbGFzcyBGb28ge1xuIiArCisgICAgICAgICAgICAgICAiICAgIHZvaWQgZm9vKCkge1xuIiArCisgICAgICAgICAgICAgICAiICAgICAgICBpZiAoZXZlbnQuaXNDb25zdW1lZCgpICYmXG4iICsKKyAgICAgICAgICAgICAgICJjb25kaXRpb24yKSB7XG4iICsKKyAgICAgICAgICAgICAgICIgICAgICByZXR1cm47XG4iICsKKyAgICAgICAgICAgICAgICIgICAgfVxuIiArCisgICAgICAgICAgICAgICAiICAgIH1cbiIgKworIn0iLCAiY2xhc3MgRm9vIHtcbiIgKworICAgICAiICAgIHZvaWQgZm9vKCkge1xuIiArCisgICAgICIgICAgICAgIGlmIChldmVudC5pc0NvbnN1bWVkKCkgJiZcbiIgKworICAgICAiICAgICAgICAgICAgY29uZGl0aW9uMikge1xuIiArCisgICAgICIgICAgICAgICAgICByZXR1cm47XG4iICsKKyAgICAgIiAgICAgICAgfVxuIiArCisgICAgICIgICAgfVxuIiArCisgICAgICJ9Iik7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0Q2FzZUJyYWNlcygpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGV4dFRlc3QoImNsYXNzIEZvb3tcbiIgKworICAgICAgICAgICAgICAgIiAgICB2b2lkIGZvbygpIHtcbiIgKworICAgICAgICAgICAgICAgIiAgICAgICAgc3dpdGNoIChhKSB7XG4iICsKKyAgICAgICAgICAgICAgICIgICAgICAgICAgICBjYXNlIDA6IHtcbiIgKworICAgICAgICAgICAgICAgIiAgICAgICAgICAgIH1cbiIgKworICAgICAgICAgICAgICAgIiAgICAgICAgfVxuIiArCisgICAgICAgICAgICAgICAiICAgIH1cbiIgKworIn0iLCAiY2xhc3MgRm9vIHtcbiIgKworICAgICAiICAgIHZvaWQgZm9vKCkge1xuIiArCisgICAgICIgICAgICAgIHN3aXRjaCAoYSkge1xuIiArCisgICAgICIgICAgICAgICAgICBjYXNlIDA6IHtcbiIgKworICAgICAiICAgICAgICAgICAgfVxuIiArCisgICAgICIgICAgICAgIH1cbiIgKworICAgICAiICAgIH1cbiIgKworICAgICAifSIpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEZvcm1hdENvZGVGcmFnbWVudCgpIHRocm93cyBFeGNlcHRpb24geworICAgIGZpbmFsIEphdmFDb2RlRnJhZ21lbnRGYWN0b3J5IGZhY3RvcnkgPSBKYXZhQ29kZUZyYWdtZW50RmFjdG9yeS5nZXRJbnN0YW5jZShnZXRQcm9qZWN0KCkpOworICAgIGZpbmFsIFBzaUNvZGVGcmFnbWVudCBmcmFnbWVudCA9IGZhY3RvcnkuY3JlYXRlQ29kZUJsb2NrQ29kZUZyYWdtZW50KCJhPTE7aW50IGI9MjsiLCBudWxsLCB0cnVlKTsKKyAgICBmaW5hbCBQc2lFbGVtZW50W10gcmVzdWx0ID0gbmV3IFBzaUVsZW1lbnRbMV07CisKKyAgICBDb21tYW5kUHJvY2Vzc29yLmdldEluc3RhbmNlKCkuZXhlY3V0ZUNvbW1hbmQoZ2V0UHJvamVjdCgpLCBuZXcgUnVubmFibGUoKSB7CisgICAgICBAT3ZlcnJpZGUKKyAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKKyAgICAgICAgQXBwbGljYXRpb25NYW5hZ2VyLmdldEFwcGxpY2F0aW9uKCkucnVuV3JpdGVBY3Rpb24obmV3IFJ1bm5hYmxlKCkgeworICAgICAgICAgIEBPdmVycmlkZQorICAgICAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKKyAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgIHJlc3VsdFswXSA9IENvZGVTdHlsZU1hbmFnZXIuZ2V0SW5zdGFuY2UoZ2V0UHJvamVjdCgpKS5yZWZvcm1hdChmcmFnbWVudCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjYXRjaCAoSW5jb3JyZWN0T3BlcmF0aW9uRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgICAgZmFpbChlLmdldExvY2FsaXplZE1lc3NhZ2UoKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgfQorICAgICAgICB9KTsKKyAgICAgIH0KKyAgICB9LCBudWxsLCBudWxsKTsKKworICAgIGFzc2VydEVxdWFscygiYSA9IDE7XG4iICsgImludCBiID0gMjsiLCByZXN1bHRbMF0uZ2V0VGV4dCgpKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3ROZXdMaW5lQWZ0ZXJKYXZhRG9jcygpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGV4dFRlc3QoIi8qKiBAbm9pbnNwZWN0aW9uIEluc3RhbmNlVmFyaWFibGVOYW1pbmdDb252ZW50aW9uKi9jbGFzcyBGb297XG4iICsKKyAgICAgICAgICAgICAgICIvKiogQG5vaW5zcGVjdGlvbiBJbnN0YW5jZVZhcmlhYmxlTmFtaW5nQ29udmVudGlvbiovaW50IG15Rm9vO1xuIiArCisiLyoqIEBub2luc3BlY3Rpb24gSW5zdGFuY2VWYXJpYWJsZU5hbWluZ0NvbnZlbnRpb24qLyB2b2lkIGZvbygpe319IiwgIi8qKlxuIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAqIEBub2luc3BlY3Rpb24gSW5zdGFuY2VWYXJpYWJsZU5hbWluZ0NvbnZlbnRpb25cbiIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgKi9cbiIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjbGFzcyBGb28ge1xuIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgICAvKipcbiIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgICAgICogQG5vaW5zcGVjdGlvbiBJbnN0YW5jZVZhcmlhYmxlTmFtaW5nQ29udmVudGlvblxuIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgICAgKi9cbiIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgICAgaW50IG15Rm9vO1xuIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlxuIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgICAvKipcbiIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgICAgICogQG5vaW5zcGVjdGlvbiBJbnN0YW5jZVZhcmlhYmxlTmFtaW5nQ29udmVudGlvblxuIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgICAgKi9cbiIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgICAgdm9pZCBmb28oKSB7XG4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgIH1cbiIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ9Iik7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0QXJyYXlJbml0aWFsaXplcldyYXBwaW5nKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZ2V0U2V0dGluZ3MoKS5BUlJBWV9JTklUSUFMSVpFUl9XUkFQID0gQ29tbW9uQ29kZVN0eWxlU2V0dGluZ3MuV1JBUF9BU19ORUVERUQ7CisgICAgZ2V0U2V0dGluZ3MoKS5BTElHTl9NVUxUSUxJTkVfQVJSQVlfSU5JVElBTElaRVJfRVhQUkVTU0lPTiA9IGZhbHNlOworICAgIGdldFNldHRpbmdzKCkuZ2V0Um9vdFNldHRpbmdzKCkuUklHSFRfTUFSR0lOID0gMzc7CisKKyAgICBkb1RleHRUZXN0KCJjbGFzcyBGb297XG4iICsKKyAgICAgICAgICAgICAgICIgICAgcHVibGljIGludFtdIGkgPSBuZXcgaW50W117MSwyLDMsNCw1LDYsNyw4LDl9O1xuIiArCisgICAgICAgICAgICAgICAiICAgIHZvaWQgZm9vKCkge1xuIiArCisgICAgICAgICAgICAgICAiICAgICAgICBmb28obmV3IGludFtdezEsMiwzLDQsNSw2LDcsOCw5fSk7XG4iICsKKyAgICAgICAgICAgICAgICIgICAgfSIgKworIn0iLCAiY2xhc3MgRm9vIHtcbiIgKworICAgICAiICAgIHB1YmxpYyBpbnRbXSBpID0gbmV3IGludFtdezEsIDIsXG4iICsKKyAgICAgIiAgICAgICAgICAgIDMsIDQsIDUsIDYsIDcsIDgsIDl9O1xuIiArCisgICAgICJcbiIgKworICAgICAiICAgIHZvaWQgZm9vKCkge1xuIiArCisgICAgICIgICAgICAgIGZvbyhuZXcgaW50W117MSwgMiwgMywgNCwgNSxcbiIgKworICAgICAiICAgICAgICAgICAgICAgIDYsIDcsIDgsIDl9KTtcbiIgKworICAgICAiICAgIH1cbiIgKworICAgICAifSIpOworCisgICAgZ2V0U2V0dGluZ3MoKS5BTElHTl9NVUxUSUxJTkVfQVJSQVlfSU5JVElBTElaRVJfRVhQUkVTU0lPTiA9IHRydWU7CisKKyAgICBkb1RleHRUZXN0KCJjbGFzcyBGb297XG4iICsKKyAgICAgICAgICAgICAgICIgICAgcHVibGljIGludFtdIGkgPSBuZXcgaW50W117MSwyLDMsNCw1LDYsNyw4LDl9O1xuIiArCisgICAgICAgICAgICAgICAiICAgIHZvaWQgZm9vKCkge1xuIiArCisgICAgICAgICAgICAgICAiICAgICAgICBmb28obmV3IGludFtdezEsMiwzLDQsNSw2LDcsOCw5fSk7XG4iICsKKyAgICAgICAgICAgICAgICIgICAgfSIgKworIn0iLCAiY2xhc3MgRm9vIHtcbiIgKworICAgICAiICAgIHB1YmxpYyBpbnRbXSBpID0gbmV3IGludFtdezEsIDIsXG4iICsKKyAgICAgIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzLCA0LFxuIiArCisgICAgICIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNSwgNixcbiIgKworICAgICAiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcsIDgsXG4iICsKKyAgICAgIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA5fTtcbiIgKworICAgICAiXG4iICsKKyAgICAgIiAgICB2b2lkIGZvbygpIHtcbiIgKworICAgICAiICAgICAgICBmb28obmV3IGludFtdezEsIDIsIDMsIDQsIDUsXG4iICsKKyAgICAgIiAgICAgICAgICAgICAgICAgICAgICA2LCA3LCA4LCA5fSk7XG4iICsKKyAgICAgIiAgICB9XG4iICsKKyAgICAgIn0iKTsKKworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEphdmFEb2NJbmRlbnRhdGlvbigpIHRocm93cyBFeGNlcHRpb24geworICAgIGdldFNldHRpbmdzKCkuZ2V0Um9vdFNldHRpbmdzKCkuZ2V0SW5kZW50T3B0aW9ucyhTdGRGaWxlVHlwZXMuSkFWQSkuSU5ERU5UX1NJWkUgPSAyOworICAgIGdldFNldHRpbmdzKCkuZ2V0Um9vdFNldHRpbmdzKCkuZ2V0SW5kZW50T3B0aW9ucyhTdGRGaWxlVHlwZXMuSkFWQSkuQ09OVElOVUFUSU9OX0lOREVOVF9TSVpFID0gMjsKKyAgICBnZXRTZXR0aW5ncygpLmdldFJvb3RTZXR0aW5ncygpLmdldEluZGVudE9wdGlvbnMoU3RkRmlsZVR5cGVzLkpBVkEpLlRBQl9TSVpFID0gNDsKKworICAgIGdldFNldHRpbmdzKCkuZ2V0Um9vdFNldHRpbmdzKCkuRU5BQkxFX0pBVkFET0NfRk9STUFUVElORyA9IGZhbHNlOworCisgICAgZG9UZXh0VGVzdCgicHVibGljIGludGVyZmFjZSBQc2lQYXJzZXIge1xuIiArCisgICAgICAgICAgICAgICAiICAvKipcbiIgKworICAgICAgICAgICAgICAgIiAgICogUGFyc2VzIHRoZSBjb250ZW50cyBvZiB0aGUgc3BlY2lmaWVkIFBTSSBidWlsZGVyIGFuZCByZXR1cm5zIGFuIEFTVCB0cmVlIHdpdGggdGhlXG4iICsKKyAgICAgICAgICAgICAgICIgICAqIHNwZWNpZmllZCB0eXBlIG9mIHJvb3QgZWxlbWVudC4gVGhlIFBTSSBidWlsZGVyIGNvbnRlbnRzIGlzIHRoZSBlbnRpcmUgZmlsZVxuIiArCisgICAgICAgICAgICAgICAiICAgKiBvciAoaWYgY2hhbWVsZW9uIHRva2VucyBhcmUgdXNlZCkgdGhlIHRleHQgb2YgYSBjaGFtZWxlb24gdG9rZW4gd2hpY2ggbmVlZHMgdG9cbiIgKworICAgICAgICAgICAgICAgIiAgICogYmUgcmVwYXJzZWQuXG4iICsKKyAgICAgICAgICAgICAgICIgICAqIEBwYXJhbSByb290IHRoZSB0eXBlIG9mIHRoZSByb290IGVsZW1lbnQgaW4gdGhlIEFTVCB0cmVlLlxuIiArCisgICAgICAgICAgICAgICAiICAgKiBAcGFyYW0gYnVpbGRlciB0aGUgYnVpbGRlciB3aGljaCBpcyB1c2VkIHRvIHJldHJpZXZlIHRoZSBvcmlnaW5hbCBmaWxlIHRva2VucyBhbmQgYnVpbGQgdGhlIEFTVCB0cmVlLlxuIiArCisgICAgICAgICAgICAgICAiICAgKiBAcmV0dXJuIHRoZSByb290IG9mIHRoZSByZXN1bHRpbmcgQVNUIHRyZWUuXG4iICsKKyAgICAgICAgICAgICAgICIgICAqL1xuIiArCisgICAgICAgICAgICAgICAiICBBU1ROb2RlIHBhcnNlKElFbGVtZW50VHlwZSByb290LCBQc2lCdWlsZGVyIGJ1aWxkZXIpO1xuIiArCisifSIsICJwdWJsaWMgaW50ZXJmYWNlIFBzaVBhcnNlciB7XG4iICsKKyAgICAgIiAgLyoqXG4iICsKKyAgICAgIiAgICogUGFyc2VzIHRoZSBjb250ZW50cyBvZiB0aGUgc3BlY2lmaWVkIFBTSSBidWlsZGVyIGFuZCByZXR1cm5zIGFuIEFTVCB0cmVlIHdpdGggdGhlXG4iICsKKyAgICAgIiAgICogc3BlY2lmaWVkIHR5cGUgb2Ygcm9vdCBlbGVtZW50LiBUaGUgUFNJIGJ1aWxkZXIgY29udGVudHMgaXMgdGhlIGVudGlyZSBmaWxlXG4iICsKKyAgICAgIiAgICogb3IgKGlmIGNoYW1lbGVvbiB0b2tlbnMgYXJlIHVzZWQpIHRoZSB0ZXh0IG9mIGEgY2hhbWVsZW9uIHRva2VuIHdoaWNoIG5lZWRzIHRvXG4iICsKKyAgICAgIiAgICogYmUgcmVwYXJzZWQuXG4iICsKKyAgICAgIiAgICogQHBhcmFtIHJvb3QgdGhlIHR5cGUgb2YgdGhlIHJvb3QgZWxlbWVudCBpbiB0aGUgQVNUIHRyZWUuXG4iICsKKyAgICAgIiAgICogQHBhcmFtIGJ1aWxkZXIgdGhlIGJ1aWxkZXIgd2hpY2ggaXMgdXNlZCB0byByZXRyaWV2ZSB0aGUgb3JpZ2luYWwgZmlsZSB0b2tlbnMgYW5kIGJ1aWxkIHRoZSBBU1QgdHJlZS5cbiIgKworICAgICAiICAgKiBAcmV0dXJuIHRoZSByb290IG9mIHRoZSByZXN1bHRpbmcgQVNUIHRyZWUuXG4iICsKKyAgICAgIiAgICovXG4iICsKKyAgICAgIiAgQVNUTm9kZSBwYXJzZShJRWxlbWVudFR5cGUgcm9vdCwgUHNpQnVpbGRlciBidWlsZGVyKTtcbiIgKworICAgICAifSIpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFJlbW92ZUxpbmVCcmVhaygpIHRocm93cyBFeGNlcHRpb24geworICAgIGdldFNldHRpbmdzKCkuS0VFUF9MSU5FX0JSRUFLUyA9IHRydWU7CisgICAgZ2V0U2V0dGluZ3MoKS5DTEFTU19CUkFDRV9TVFlMRSA9IENvbW1vbkNvZGVTdHlsZVNldHRpbmdzLkVORF9PRl9MSU5FOworICAgIGdldFNldHRpbmdzKCkuTUVUSE9EX0JSQUNFX1NUWUxFID0gQ29tbW9uQ29kZVN0eWxlU2V0dGluZ3MuRU5EX09GX0xJTkU7CisgICAgZ2V0U2V0dGluZ3MoKS5CUkFDRV9TVFlMRSA9IENvbW1vbkNvZGVTdHlsZVNldHRpbmdzLkVORF9PRl9MSU5FOworCisgICAgZG9UZXh0VGVzdCgiY2xhc3MgQVxuIiArICJ7XG4iICsgIn0iLCAiY2xhc3MgQSB7XG4iICsgIn0iKTsKKworICAgIGRvVGV4dFRlc3QoImNsYXNzIEEge1xuIiArICIgICAgdm9pZCBmb28oKVxuIiArICIgICAge1xuIiArICIgICAgfVxuIiArICJ9IiwgImNsYXNzIEEge1xuIiArICIgICAgdm9pZCBmb28oKSB7XG4iICsgIiAgICB9XG4iICsgIn0iKTsKKworICAgIGRvVGV4dFRlc3QoImNsYXNzIEEge1xuIiArICIgICAgdm9pZCBmb28oKVxuIiArICIgICAge1xuIiArICIgICAgICAgIGlmIChhKVxuIiArICIgICAgICAgIHtcbiIgKyAiICAgICAgICB9XG4iICsgIiAgICB9XG4iICsgIn0iLAorICAgICAgICAgICAgICAgImNsYXNzIEEge1xuIiArICIgICAgdm9pZCBmb28oKSB7XG4iICsgIiAgICAgICAgaWYgKGEpIHtcbiIgKyAiICAgICAgICB9XG4iICsgIiAgICB9XG4iICsgIn0iKTsKKworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEJsYW5rTGluZXMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBnZXRTZXR0aW5ncygpLktFRVBfQkxBTktfTElORVNfSU5fREVDTEFSQVRJT05TID0gMDsKKyAgICBnZXRTZXR0aW5ncygpLktFRVBfQkxBTktfTElORVNfSU5fQ09ERSA9IDA7CisgICAgZ2V0U2V0dGluZ3MoKS5LRUVQX0JMQU5LX0xJTkVTX0JFRk9SRV9SQlJBQ0UgPSAwOworICAgIGdldFNldHRpbmdzKCkuQkxBTktfTElORVNfQUZURVJfQ0xBU1NfSEVBREVSID0gMDsKKyAgICBnZXRTZXR0aW5ncygpLkJMQU5LX0xJTkVTX0FGVEVSX0lNUE9SVFMgPSAwOworICAgIGdldFNldHRpbmdzKCkuQkxBTktfTElORVNfQUZURVJfUEFDS0FHRSA9IDA7CisgICAgZ2V0U2V0dGluZ3MoKS5CTEFOS19MSU5FU19BUk9VTkRfQ0xBU1MgPSAwOworICAgIGdldFNldHRpbmdzKCkuQkxBTktfTElORVNfQVJPVU5EX0ZJRUxEID0gMDsKKyAgICBnZXRTZXR0aW5ncygpLkJMQU5LX0xJTkVTX0FST1VORF9NRVRIT0QgPSAwOworICAgIGdldFNldHRpbmdzKCkuQkxBTktfTElORVNfQkVGT1JFX0lNUE9SVFMgPSAwOworICAgIGdldFNldHRpbmdzKCkuQkxBTktfTElORVNfQkVGT1JFX1BBQ0tBR0UgPSAwOworCisgICAgZ2V0U2V0dGluZ3MoKS5CTEFOS19MSU5FU19BUk9VTkRfRklFTERfSU5fSU5URVJGQUNFID0gMjsKKyAgICBnZXRTZXR0aW5ncygpLkJMQU5LX0xJTkVTX0FST1VORF9NRVRIT0RfSU5fSU5URVJGQUNFID0gMzsKKworICAgIGRvVGV4dFRlc3QoIi8qXG4iICsKKyAgICAgICAgICAgICAgICIgKiBUaGlzIGlzIGEgc2FtcGxlIGZpbGUuXG4iICsKKyAgICAgICAgICAgICAgICIgKi9cbiIgKworICAgICAgICAgICAgICAgInBhY2thZ2UgY29tLmludGVsbGlqLnNhbXBsZXM7XG4iICsKKyAgICAgICAgICAgICAgICJcbiIgKworICAgICAgICAgICAgICAgImltcG9ydCBjb20uaW50ZWxsaWouaWRlYS5NYWluO1xuIiArCisgICAgICAgICAgICAgICAiXG4iICsKKyAgICAgICAgICAgICAgICJpbXBvcnQgamF2YXguc3dpbmcuKjtcbiIgKworICAgICAgICAgICAgICAgImltcG9ydCBqYXZhLnV0aWwuVmVjdG9yO1xuIiArCisgICAgICAgICAgICAgICAiXG4iICsKKyAgICAgICAgICAgICAgICJwdWJsaWMgY2xhc3MgRm9vIHtcbiIgKworICAgICAgICAgICAgICAgIiAgICBwcml2YXRlIGludCBmaWVsZDE7XG4iICsKKyAgICAgICAgICAgICAgICIgICAgcHJpdmF0ZSBpbnQgZmllbGQyO1xuIiArCisgICAgICAgICAgICAgICAiXG4iICsKKyAgICAgICAgICAgICAgICIgICAgcHVibGljIHZvaWQgZm9vMSgpIHtcbiIgKworICAgICAgICAgICAgICAgIlxuIiArCisgICAgICAgICAgICAgICAiICAgIH1cbiIgKworICAgICAgICAgICAgICAgIlxuIiArCisgICAgICAgICAgICAgICAiICAgIHB1YmxpYyB2b2lkIGZvbzIoKSB7XG4iICsKKyAgICAgICAgICAgICAgICJcbiIgKworICAgICAgICAgICAgICAgIiAgICB9XG4iICsKKyAgICAgICAgICAgICAgICJcbiIgKworICAgICAgICAgICAgICAgIn0iLAorCisKKyAgICAgICAgICAgICAgICIvKlxuIiArCisgICAgICAgICAgICAgICAiICogVGhpcyBpcyBhIHNhbXBsZSBmaWxlLlxuIiArCisgICAgICAgICAgICAgICAiICovXG4iICsKKyAgICAgICAgICAgICAgICJwYWNrYWdlIGNvbS5pbnRlbGxpai5zYW1wbGVzO1xuIiArCisgICAgICAgICAgICAgICAiaW1wb3J0IGNvbS5pbnRlbGxpai5pZGVhLk1haW47XG4iICsKKyAgICAgICAgICAgICAgICJcbiIgKworICAgICAgICAgICAgICAgImltcG9ydCBqYXZheC5zd2luZy4qO1xuIiArCisgICAgICAgICAgICAgICAiaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7XG4iICsKKyAgICAgICAgICAgICAgICJwdWJsaWMgY2xhc3MgRm9vIHtcbiIgKworICAgICAgICAgICAgICAgIiAgICBwcml2YXRlIGludCBmaWVsZDE7XG4iICsKKyAgICAgICAgICAgICAgICIgICAgcHJpdmF0ZSBpbnQgZmllbGQyO1xuIiArCisgICAgICAgICAgICAgICAiICAgIHB1YmxpYyB2b2lkIGZvbzEoKSB7XG4iICsKKyAgICAgICAgICAgICAgICIgICAgfVxuIiArCisgICAgICAgICAgICAgICAiICAgIHB1YmxpYyB2b2lkIGZvbzIoKSB7XG4iICsKKyAgICAgICAgICAgICAgICIgICAgfVxuIiArCisgICAgICAgICAgICAgICAifSIpOworCisgICAgZG9UZXh0VGVzdCgiaW50ZXJmYWNlIEZvbyB7XG4iICsKKyAgICAgICAgICAgICAgICIgICAgaW50IGZpZWxkMTtcbiIgKworICAgICAgICAgICAgICAgIiAgICBpbnQgZmllbGQyO1xuIiArCisgICAgICAgICAgICAgICAiXG4iICsKKyAgICAgICAgICAgICAgICIgICAgdm9pZCBmb28xKCk7XG4iICsKKyAgICAgICAgICAgICAgICJcbiIgKworICAgICAgICAgICAgICAgIiAgICB2b2lkIGZvbzIoKTtcbiIgKworICAgICAgICAgICAgICAgIlxuIiArCisgICAgICAgICAgICAgICAifSIsCisKKworICAgICAgICAgICAgICAgImludGVyZmFjZSBGb28ge1xuIiArCisgICAgICAgICAgICAgICAiICAgIGludCBmaWVsZDE7XG4iICsKKyAgICAgICAgICAgICAgICJcbiIgKworICAgICAgICAgICAgICAgIlxuIiArCisgICAgICAgICAgICAgICAiICAgIGludCBmaWVsZDI7XG4iICsKKyAgICAgICAgICAgICAgICJcbiIgKworICAgICAgICAgICAgICAgIlxuIiArCisgICAgICAgICAgICAgICAiXG4iICsKKyAgICAgICAgICAgICAgICIgICAgdm9pZCBmb28xKCk7XG4iICsKKyAgICAgICAgICAgICAgICJcbiIgKworICAgICAgICAgICAgICAgIlxuIiArCisgICAgICAgICAgICAgICAiXG4iICsKKyAgICAgICAgICAgICAgICIgICAgdm9pZCBmb28yKCk7XG4iICsKKyAgICAgICAgICAgICAgICJ9Iik7CisKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RTdGF0aWNCbG9ja0JyYWNlcygpIHRocm93cyBFeGNlcHRpb24geworICAgIGdldFNldHRpbmdzKCkuQlJBQ0VfU1RZTEUgPSBDb21tb25Db2RlU3R5bGVTZXR0aW5ncy5FTkRfT0ZfTElORTsKKyAgICBkb1RleHRUZXN0KCJjbGFzcyBGb28ge1xuIiArICIgICAgc3RhdGljIHtcbiIgKyAiICAgICAgICAvL2NvbW1lbnRcbiIgKyAiICAgICAgICBpID0gZm9vKCk7XG4iICsgIiAgICB9XG4iICsgIn0iLAorICAgICAgICAgICAgICAgImNsYXNzIEZvbyB7XG4iICsgIiAgICBzdGF0aWMge1xuIiArICIgICAgICAgIC8vY29tbWVudFxuIiArICIgICAgICAgIGkgPSBmb28oKTtcbiIgKyAiICAgIH1cbiIgKyAifSIpOworCisgICAgZ2V0U2V0dGluZ3MoKS5CUkFDRV9TVFlMRSA9IENvbW1vbkNvZGVTdHlsZVNldHRpbmdzLk5FWFRfTElORV9JRl9XUkFQUEVEOworICAgIGRvVGV4dFRlc3QoImNsYXNzIEZvbyB7XG4iICsgIiAgICBzdGF0aWMge1xuIiArICIgICAgICAgIC8vY29tbWVudFxuIiArICIgICAgICAgIGkgPSBmb28oKTtcbiIgKyAiICAgIH1cbiIgKyAifSIsCisgICAgICAgICAgICAgICAiY2xhc3MgRm9vIHtcbiIgKyAiICAgIHN0YXRpYyB7XG4iICsgIiAgICAgICAgLy9jb21tZW50XG4iICsgIiAgICAgICAgaSA9IGZvbygpO1xuIiArICIgICAgfVxuIiArICJ9Iik7CisKKyAgICBnZXRTZXR0aW5ncygpLkJSQUNFX1NUWUxFID0gQ29tbW9uQ29kZVN0eWxlU2V0dGluZ3MuTkVYVF9MSU5FOworICAgIGRvVGV4dFRlc3QoImNsYXNzIEZvbyB7XG4iICsgIiAgICBzdGF0aWMge1xuIiArICIgICAgICAgIC8vY29tbWVudFxuIiArICIgICAgICAgIGkgPSBmb28oKTtcbiIgKyAiICAgIH1cbiIgKyAifSIsCisgICAgICAgICAgICAgICAiY2xhc3MgRm9vIHtcbiIgKyAiICAgIHN0YXRpY1xuIiArICIgICAge1xuIiArICIgICAgICAgIC8vY29tbWVudFxuIiArICIgICAgICAgIGkgPSBmb28oKTtcbiIgKyAiICAgIH1cbiIgKyAifSIpOworCisKKyAgICBnZXRTZXR0aW5ncygpLkJSQUNFX1NUWUxFID0gQ29tbW9uQ29kZVN0eWxlU2V0dGluZ3MuTkVYVF9MSU5FX1NISUZURUQ7CisgICAgZG9UZXh0VGVzdCgiY2xhc3MgRm9vIHtcbiIgKyAiICAgIHN0YXRpYyB7XG4iICsgIiAgICAgICAgLy9jb21tZW50XG4iICsgIiAgICAgICAgaSA9IGZvbygpO1xuIiArICIgICAgICAgIH1cbiIgKyAifSIsCisgICAgICAgICAgICAgICAiY2xhc3MgRm9vIHtcbiIgKyAiICAgIHN0YXRpY1xuIiArICIgICAgICAgIHtcbiIgKyAiICAgICAgICAvL2NvbW1lbnRcbiIgKyAiICAgICAgICBpID0gZm9vKCk7XG4iICsgIiAgICAgICAgfVxuIiArICJ9Iik7CisKKworICAgIGdldFNldHRpbmdzKCkuQlJBQ0VfU1RZTEUgPSBDb21tb25Db2RlU3R5bGVTZXR0aW5ncy5ORVhUX0xJTkVfU0hJRlRFRDI7CisgICAgZG9UZXh0VGVzdCgiY2xhc3MgRm9vIHtcbiIgKyAiICAgIHN0YXRpYyB7XG4iICsgIiAgICAgICAgLy9jb21tZW50XG4iICsgIiAgICAgICAgaSA9IGZvbygpO1xuIiArICIgICAgfVxuIiArICJ9IiwgImNsYXNzIEZvbyB7XG4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgIHN0YXRpY1xuIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgICAgICAge1xuIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgICAgICAgICAgIC8vY29tbWVudFxuIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgICAgICAgICAgIGkgPSBmb28oKTtcbiIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgICAgICAgIH1cbiIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ9Iik7CisKKworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEJyYWNlczIoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBnZXRTZXR0aW5ncygpLkJSQUNFX1NUWUxFID0gQ29tbW9uQ29kZVN0eWxlU2V0dGluZ3MuTkVYVF9MSU5FX0lGX1dSQVBQRUQ7CisgICAgZG9UZXh0VGVzdCgiY2xhc3MgRm9vIHtcbiIgKworICAgICAgICAgICAgICAgIiAgICB2b2lkIGZvbygpIHtcbiIgKworICAgICAgICAgICAgICAgIiAgICAgICAgIGlmIChjbGllbnRTb2NrZXQgPT0gbnVsbClcbiIgKworICAgICAgICAgICAgICAgIiAgICAgICAge1xuIiArCisgICAgICAgICAgICAgICAiICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuIiArCisgICAgICAgICAgICAgICAiICAgICAgICB9IiArCisgICAgICAgICAgICAgICAiICAgIH1cbiIgKworIn0iLCAiY2xhc3MgRm9vIHtcbiIgKworICAgICAiICAgIHZvaWQgZm9vKCkge1xuIiArCisgICAgICIgICAgICAgIGlmIChjbGllbnRTb2NrZXQgPT0gbnVsbCkge1xuIiArCisgICAgICIgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4iICsKKyAgICAgIiAgICAgICAgfVxuIiArCisgICAgICIgICAgfVxuIiArCisgICAgICJ9Iik7CisKKyAgICBkb1RleHRUZXN0KCJjbGFzcyBGb28ge1xuIiArCisgICAgICAgICAgICAgICAiICAgIHZvaWQgZm9vKCkge1xuIiArCisgICAgICAgICAgICAgICAiICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAxMDsgaSsrKVxuIiArCisgICAgICAgICAgICAgICAiICAgICAgICB7XG4iICsKKyAgICAgICAgICAgICAgICIgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4iICsKKyAgICAgICAgICAgICAgICIgICAgICAgIH0iICsKKyAgICAgICAgICAgICAgICIgICAgfVxuIiArCisifSIsICJjbGFzcyBGb28ge1xuIiArCisgICAgICIgICAgdm9pZCBmb28oKSB7XG4iICsKKyAgICAgIiAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAxMDsgaSsrKSB7XG4iICsKKyAgICAgIiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiIgKworICAgICAiICAgICAgICB9XG4iICsKKyAgICAgIiAgICB9XG4iICsKKyAgICAgIn0iKTsKKworCisgICAgZG9UZXh0VGVzdCgiY2xhc3MgRm9vIHtcbiIgKworICAgICAgICAgICAgICAgIiAgICB2b2lkIGZvbygpIHtcbiIgKworICAgICAgICAgICAgICAgIiAgICAgICAgIGZvciAoT2JqZWN0IGkgOiBjb2xsZWN0aW9uKVxuIiArCisgICAgICAgICAgICAgICAiICAgICAgICB7XG4iICsKKyAgICAgICAgICAgICAgICIgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4iICsKKyAgICAgICAgICAgICAgICIgICAgICAgIH0iICsKKyAgICAgICAgICAgICAgICIgICAgfVxuIiArCisifSIsICJjbGFzcyBGb28ge1xuIiArCisgICAgICIgICAgdm9pZCBmb28oKSB7XG4iICsKKyAgICAgIiAgICAgICAgZm9yIChPYmplY3QgaSA6IGNvbGxlY3Rpb24pIHtcbiIgKworICAgICAiICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuIiArCisgICAgICIgICAgICAgIH1cbiIgKworICAgICAiICAgIH1cbiIgKworICAgICAifSIpOworCisKKyAgICBkb1RleHRUZXN0KCJjbGFzcyBGb28ge1xuIiArCisgICAgICAgICAgICAgICAiICAgIHZvaWQgZm9vKCkge1xuIiArCisgICAgICAgICAgICAgICAiICAgICAgICAgd2hpbGUgKGkgID4wKVxuIiArCisgICAgICAgICAgICAgICAiICAgICAgICB7XG4iICsKKyAgICAgICAgICAgICAgICIgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4iICsKKyAgICAgICAgICAgICAgICIgICAgICAgIH0iICsKKyAgICAgICAgICAgICAgICIgICAgfVxuIiArCisifSIsICJjbGFzcyBGb28ge1xuIiArCisgICAgICIgICAgdm9pZCBmb28oKSB7XG4iICsKKyAgICAgIiAgICAgICAgd2hpbGUgKGkgPiAwKSB7XG4iICsKKyAgICAgIiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiIgKworICAgICAiICAgICAgICB9XG4iICsKKyAgICAgIiAgICB9XG4iICsKKyAgICAgIn0iKTsKKworICAgIGdldFNldHRpbmdzKCkuTUVUSE9EX0JSQUNFX1NUWUxFID0gQ29tbW9uQ29kZVN0eWxlU2V0dGluZ3MuTkVYVF9MSU5FX0lGX1dSQVBQRUQ7CisKKyAgICBkb1RleHRUZXN0KCJjbGFzcyBGb297XG4iICsgIiAgICAvKipcbiIgKyAiICAgICAqXG4iICsgIiAgICAgKi9cbiIgKyAiICAgIHZvaWQgZm9vKCkge1xuIiArICIgICAgfVxuIiArICJ9IiwKKyAgICAgICAgICAgICAgICJjbGFzcyBGb28ge1xuIiArICIgICAgLyoqXG4iICsgIiAgICAgKlxuIiArICIgICAgICovXG4iICsgIiAgICB2b2lkIGZvbygpIHtcbiIgKyAiICAgIH1cbiIgKyAifSIpOworCisKKyAgICBnZXRTZXR0aW5ncygpLkNMQVNTX0JSQUNFX1NUWUxFID0gQ29tbW9uQ29kZVN0eWxlU2V0dGluZ3MuTkVYVF9MSU5FX0lGX1dSQVBQRUQ7CisKKyAgICBkb1RleHRUZXN0KCIvKipcbiIgKyAiICpcbiIgKyAiICovXG4iICsgImNsYXNzIEZvb1xue1xuIiArICJ9IiwgIi8qKlxuIiArICIgKlxuIiArICIgKi9cbiIgKyAiY2xhc3MgRm9vIHtcbiIgKyAifSIpOworCisgICAgZG9UZXh0VGVzdCgiLyoqXG4iICsgIiAqXG4iICsgIiAqL1xuIiArICJjbGFzcyBGb29cbiBleHRlbmRzIEJcbntcbiIgKyAifSIsCisgICAgICAgICAgICAgICAiLyoqXG4iICsgIiAqXG4iICsgIiAqL1xuIiArICJjbGFzcyBGb29cbiAgICAgICAgZXh0ZW5kcyBCXG4iICsgIntcbiIgKyAifSIpOworCisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0U3luY2hyb25pemVkKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisKKyAgICBnZXRTZXR0aW5ncygpLkJSQUNFX1NUWUxFID0gQ29tbW9uQ29kZVN0eWxlU2V0dGluZ3MuRU5EX09GX0xJTkU7CisgICAgZG9UZXh0VGVzdCgiY2xhc3MgRm9vIHtcbiIgKyAiICAgIHZvaWQgZm9vKCkge1xuIiArICJzeW5jaHJvbml6ZWQgKHRoaXMpIHtmb28oKTtcbiIgKyAifVxuIiArICIgICAgfVxuIiArICJ9IiwgImNsYXNzIEZvbyB7XG4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgIHZvaWQgZm9vKCkge1xuIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgICAgICAgc3luY2hyb25pemVkICh0aGlzKSB7XG4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgICAgICAgICAgZm9vKCk7XG4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgICAgICB9XG4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgIH1cbiIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ9Iik7CisKKyAgICBnZXRTZXR0aW5ncygpLkJSQUNFX1NUWUxFID0gQ29tbW9uQ29kZVN0eWxlU2V0dGluZ3MuTkVYVF9MSU5FOworICAgIGRvVGV4dFRlc3QoImNsYXNzIEZvbyB7XG4iICsgIiAgICB2b2lkIGZvbygpIHtcbiIgKyAic3luY2hyb25pemVkICh0aGlzKSB7Zm9vKCk7XG4iICsgIn1cbiIgKyAiICAgIH1cbiIgKyAifSIsICJjbGFzcyBGb28ge1xuIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgICB2b2lkIGZvbygpIHtcbiIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgICAgICAgIHN5bmNocm9uaXplZCAodGhpcylcbiIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgICAgICAgIHtcbiIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgICAgICAgICAgICBmb28oKTtcbiIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgICAgICAgIH1cbiIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgICAgfVxuIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIn0iKTsKKworICAgIGdldFNldHRpbmdzKCkuQlJBQ0VfU1RZTEUgPSBDb21tb25Db2RlU3R5bGVTZXR0aW5ncy5ORVhUX0xJTkVfU0hJRlRFRDsKKyAgICBkb1RleHRUZXN0KCJjbGFzcyBGb28ge1xuIiArICIgICAgdm9pZCBmb28oKSB7XG4iICsgInN5bmNocm9uaXplZCAodGhpcykge2ZvbygpO1xuIiArICJ9XG4iICsgIiAgICB9XG4iICsgIn0iLCAiY2xhc3MgRm9vIHtcbiIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgICAgdm9pZCBmb28oKSB7XG4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgICAgICBzeW5jaHJvbml6ZWQgKHRoaXMpXG4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgICAgICAgICAge1xuIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgICAgICAgICAgIGZvbygpO1xuIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgICAgICAgICAgIH1cbiIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgICAgfVxuIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIn0iKTsKKworCisgICAgZ2V0U2V0dGluZ3MoKS5CUkFDRV9TVFlMRSA9IENvbW1vbkNvZGVTdHlsZVNldHRpbmdzLk5FWFRfTElORV9TSElGVEVEMjsKKyAgICBkb1RleHRUZXN0KCJjbGFzcyBGb28ge1xuIiArICIgICAgdm9pZCBmb28oKSB7XG4iICsgInN5bmNocm9uaXplZCAodGhpcykge1xuIiArICJmb28oKTtcbiIgKyAifVxuIiArICIgICAgfVxuIiArICJ9IiwgImNsYXNzIEZvbyB7XG4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgICB2b2lkIGZvbygpIHtcbiIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgICAgICBzeW5jaHJvbml6ZWQgKHRoaXMpXG4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgICAgICAgICAgIHtcbiIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgICAgICAgICAgICAgIGZvbygpO1xuIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgICAgICAgICAgICB9XG4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgICB9XG4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIn0iKTsKKworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdE5leHRMaW5lU2hpZnRlZEZvckJsb2NrU3RhdGVtZW50KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZ2V0U2V0dGluZ3MoKS5CUkFDRV9TVFlMRSA9IENvbW1vbkNvZGVTdHlsZVNldHRpbmdzLk5FWFRfTElORV9TSElGVEVEOworCisgICAgZG9UZXh0VGVzdCgiY2xhc3MgRm9vIHtcbiIgKyAiICAgIHZvaWQgZm9vKCkge1xuIiArICIgICAgICAgIGlmIChhKVxuIiArICIgICAgICAgIGZvbygpO1xuIiArICIgICAgfVxuIiArICJ9IiwKKyAgICAgICAgICAgICAgICJjbGFzcyBGb28ge1xuIiArICIgICAgdm9pZCBmb28oKSB7XG4iICsgIiAgICAgICAgaWYgKGEpXG4iICsgIiAgICAgICAgICAgIGZvbygpO1xuIiArICIgICAgfVxuIiArICJ9Iik7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0RmllbGRXaXRoSmF2YWRvY0FuZEFubm90YXRpb24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1RleHRUZXN0KCJjbGFzcyBGb28ge1xuIiArICIgICAgLyoqXG4iICsgIiAgICAgKiBqYXZhIGRvY1xuIiArICIgICAgICovXG4iICsgIiAgICBATm9JbnNwZWN0aW9uXG4iICsgIiAgICBTdHJpbmcgZmllbGQ7XG4iICsgIn0iLAorICAgICAgICAgICAgICAgImNsYXNzIEZvbyB7XG4iICsgIiAgICAvKipcbiIgKyAiICAgICAqIGphdmEgZG9jXG4iICsgIiAgICAgKi9cbiIgKyAiICAgIEBOb0luc3BlY3Rpb25cbiIgKyAiICAgIFN0cmluZyBmaWVsZDtcbiIgKyAifSIpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdExvbmdDYWxsQ2hhaW5BZnRlckVsc2UoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBnZXRTZXR0aW5ncygpLkJSQUNFX1NUWUxFID0gQ29tbW9uQ29kZVN0eWxlU2V0dGluZ3MuTkVYVF9MSU5FOworICAgIGdldFNldHRpbmdzKCkuS0VFUF9DT05UUk9MX1NUQVRFTUVOVF9JTl9PTkVfTElORSA9IHRydWU7CisgICAgZ2V0U2V0dGluZ3MoKS5LRUVQX1NJTVBMRV9NRVRIT0RTX0lOX09ORV9MSU5FID0gdHJ1ZTsKKyAgICBnZXRTZXR0aW5ncygpLkVMU0VfT05fTkVXX0xJTkUgPSBmYWxzZTsKKyAgICBnZXRTZXR0aW5ncygpLmdldFJvb3RTZXR0aW5ncygpLlJJR0hUX01BUkdJTiA9IDExMDsKKyAgICBnZXRTZXR0aW5ncygpLktFRVBfTElORV9CUkVBS1MgPSBmYWxzZTsKKyAgICBkb1RleHRUZXN0KCJjbGFzcyBGb28ge1xuIiArCisgICAgICAgICAgICAgICAiICAgIHZvaWQgZm9vKCkge1xuIiArCisgICAgICAgICAgICAgICAiICAgICAgICBpZiAodHlwZXMubGVuZ3RoID4gMSkgLy8gcmV0dXJucyBtdWx0aXBsZSBjb2x1bW5zXG4iICsKKyAgICAgICAgICAgICAgICIgICAgICAgIHtcbiIgKworICAgICAgICAgICAgICAgIiAgICAgICAgfSBlbHNlXG4iICsKKyAgICAgICAgICAgICAgICIgICAgICAgICAgICByZXN1bHQuYWRkKGluaXRpYWxpemVPYmplY3Qob3MsIHR5cGVzWzBdLCBpbml0aWFsaXplQ29sbGVjdGlvbnMsIGluaXRpYWxpemVBc3NvY2lhdGlvbnMsIGluaXRpYWxpemVDaGlsZHJlbikpOyIgKworICAgICAgICAgICAgICAgIiAgICB9XG4iICsKKyJ9IiwgImNsYXNzIEZvbyB7XG4iICsKKyAgICAgIiAgICB2b2lkIGZvbygpIHtcbiIgKworICAgICAiICAgICAgICBpZiAodHlwZXMubGVuZ3RoID4gMSkgLy8gcmV0dXJucyBtdWx0aXBsZSBjb2x1bW5zXG4iICsKKyAgICAgIiAgICAgICAge1xuIiArCisgICAgICIgICAgICAgIH0gZWxzZVxuIiArCisgICAgICIgICAgICAgICAgICByZXN1bHQuYWRkKGluaXRpYWxpemVPYmplY3Qob3MsIHR5cGVzWzBdLCBpbml0aWFsaXplQ29sbGVjdGlvbnMsIGluaXRpYWxpemVBc3NvY2lhdGlvbnMsIGluaXRpYWxpemVDaGlsZHJlbikpO1xuIiArCisgICAgICIgICAgfVxuIiArCisgICAgICJ9Iik7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0U3BhY2VzSW5jb2RlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisKKyAgICBmaW5hbCBKYXZhUHNpRmFjYWRlIGZhY2FkZSA9IGdldEphdmFGYWNhZGUoKTsKKyAgICBmaW5hbCBMYW5ndWFnZUxldmVsIGxldmVsID0gTGFuZ3VhZ2VMZXZlbFByb2plY3RFeHRlbnNpb24uZ2V0SW5zdGFuY2UoZmFjYWRlLmdldFByb2plY3QoKSkuZ2V0TGFuZ3VhZ2VMZXZlbCgpOworCisgICAgTGFuZ3VhZ2VMZXZlbFByb2plY3RFeHRlbnNpb24uZ2V0SW5zdGFuY2UoZmFjYWRlLmdldFByb2plY3QoKSkuc2V0TGFuZ3VhZ2VMZXZlbChMYW5ndWFnZUxldmVsLkpES18xXzUpOworCisgICAgdHJ5IHsKKyAgICAgIGRvVGV4dFRlc3QoImNsYXNzIEM8WSwgWD4ge1xuIiArICJ9IiwgImNsYXNzIEM8WSwgWD4ge1xuIiArICJ9Iik7CisKKyAgICAgIGdldFNldHRpbmdzKCkuU1BBQ0VfQkVGT1JFX01FVEhPRF9MQlJBQ0UgPSB0cnVlOworICAgICAgZ2V0U2V0dGluZ3MoKS5LRUVQX1NJTVBMRV9NRVRIT0RTX0lOX09ORV9MSU5FID0gdHJ1ZTsKKworICAgICAgZG9UZXh0VGVzdCgiZW51bSBFbiB7XG4iICsgIiAgICBBKDEwKSB7fSxcbiIgKyAiICAgIEIoMTApIHt9LFxuIiArICIgICAgQygxMCk7XG4iICsgIlxuIiArICIgICAgRW4oaW50IGkpIHsgfVxuIiArICJ9IiwKKyAgICAgICAgICAgICAgICAgImVudW0gRW4ge1xuIiArICIgICAgQSgxMCkge30sXG4iICsgIiAgICBCKDEwKSB7fSxcbiIgKyAiICAgIEMoMTApO1xuIiArICJcbiIgKyAiICAgIEVuKGludCBpKSB7IH1cbiIgKyAifSIpOworCisgICAgICBkb1RleHRUZXN0KCJjbGFzcyBDIHtcbiIgKworICAgICAgICAgICAgICAgICAiICAgIHZvaWQgZm9vIChNYXA8PywgU3RyaW5nPiBzKSB7XG4iICsKKyAgICAgICAgICAgICAgICAgIiAgICAgICAgU2V0PD8gZXh0ZW5kcyBNYXA8PywgU3RyaW5nPi5FbnRyeTw/LCBTdHJpbmc+PiB0ZW1wID0gcy5lbnRyaWVzKCk7XG4iICsKKyAgICAgICAgICAgICAgICAgIiAgICB9XG4iICsKKyJ9IiwgImNsYXNzIEMge1xuIiArCisgICAgICIgICAgdm9pZCBmb28oTWFwPD8sIFN0cmluZz4gcykge1xuIiArCisgICAgICIgICAgICAgIFNldDw/IGV4dGVuZHMgTWFwPD8sIFN0cmluZz4uRW50cnk8PywgU3RyaW5nPj4gdGVtcCA9IHMuZW50cmllcygpO1xuIiArCisgICAgICIgICAgfVxuIiArCisgICAgICJ9Iik7CisKKyAgICAgIGRvVGV4dFRlc3QoImNsYXNzIEIge1xuIiArCisgICAgICAgICAgICAgICAgICIgICAgcHVibGljIGZpbmFsIEE8U3RyaW5nPiBteURlbGVnYXRlID0gbmV3IEE8U3RyaW5nPigpO1xuIiArCisgICAgICAgICAgICAgICAgICJcbiIgKworICAgICAgICAgICAgICAgICAiICAgIHB1YmxpYyBMaXN0PD8gZXh0ZW5kcyBTdHJpbmc+IG1ldGhvZDEoKSB7XG4iICsKKyAgICAgICAgICAgICAgICAgIiAgICAgICAgcmV0dXJuIG15RGVsZWdhdGUubWV0aG9kMSgpO1xuIiArCisgICAgICAgICAgICAgICAgICIgICAgfVxuIiArCisgICAgICAgICAgICAgICAgICJcbiIgKworICAgICAgICAgICAgICAgICAiICAgIHB1YmxpYyBTdHJpbmcgbWV0aG9kMihTdHJpbmcgdCkge1xuIiArCisgICAgICAgICAgICAgICAgICIgICAgICAgIHJldHVybiBteURlbGVnYXRlLm1ldGhvZDIodCk7XG4iICsKKyAgICAgICAgICAgICAgICAgIiAgICB9XG4iICsKKyJ9IiwgImNsYXNzIEIge1xuIiArCisgICAgICIgICAgcHVibGljIGZpbmFsIEE8U3RyaW5nPiBteURlbGVnYXRlID0gbmV3IEE8U3RyaW5nPigpO1xuIiArCisgICAgICJcbiIgKworICAgICAiICAgIHB1YmxpYyBMaXN0PD8gZXh0ZW5kcyBTdHJpbmc+IG1ldGhvZDEoKSB7XG4iICsKKyAgICAgIiAgICAgICAgcmV0dXJuIG15RGVsZWdhdGUubWV0aG9kMSgpO1xuIiArCisgICAgICIgICAgfVxuIiArCisgICAgICJcbiIgKworICAgICAiICAgIHB1YmxpYyBTdHJpbmcgbWV0aG9kMihTdHJpbmcgdCkge1xuIiArCisgICAgICIgICAgICAgIHJldHVybiBteURlbGVnYXRlLm1ldGhvZDIodCk7XG4iICsKKyAgICAgIiAgICB9XG4iICsKKyAgICAgIn0iKTsKKyAgICB9CisgICAgZmluYWxseSB7CisgICAgICBMYW5ndWFnZUxldmVsUHJvamVjdEV4dGVuc2lvbi5nZXRJbnN0YW5jZShmYWNhZGUuZ2V0UHJvamVjdCgpKS5zZXRMYW5ndWFnZUxldmVsKGxldmVsKTsKKyAgICB9CisKKyAgfQorCisgIC8vL0lERUEtNzc2MQorICBwdWJsaWMgdm9pZCB0ZXN0S2VlcEJsYW5rTGluZUluQ29kZUJlZm9yZUNvbW1lbnQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBnZXRTZXR0aW5ncygpLktFRVBfQkxBTktfTElORVNfSU5fQ09ERSA9IDE7CisgICAgZ2V0U2V0dGluZ3MoKS5LRUVQX0JMQU5LX0xJTkVTX0lOX0RFQ0xBUkFUSU9OUyA9IDA7CisgICAgZ2V0U2V0dGluZ3MoKS5LRUVQX0ZJUlNUX0NPTFVNTl9DT01NRU5UID0gZmFsc2U7CisKKyAgICBkb1RleHRUZXN0KCJwdWJsaWMgY2xhc3MgUmVmb3JtYXRQcm9ibGVtIHtcbiIgKworICAgICAgICAgICAgICAgIlxuIiArCisgICAgICAgICAgICAgICAiICAgIC8vY29tbWVudCBpbiBkZWNsYXJhdGlvblxuIiArCisgICAgICAgICAgICAgICAiICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHtcbiIgKworICAgICAgICAgICAgICAgIiAgICAgICAgZm9yIChTdHJpbmcgYXJnIDogYXJncykge1xuIiArCisgICAgICAgICAgICAgICAiICAgICAgICAgICAgXG4iICsKKyAgICAgICAgICAgICAgICIgICAgICAgICAgICAvLyBhIGZpcnN0IHN5c3RlbSBvdXRcbiIgKworICAgICAgICAgICAgICAgIiAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihcIlwiKTtcbiIgKworICAgICAgICAgICAgICAgIiAgICAgICAgICAgIFxuIiArCisgICAgICAgICAgICAgICAiICAgICAgICAgICAgLy8gYW5vdGhlciBzeXN0ZW0gb3V0XG4iICsKKyAgICAgICAgICAgICAgICIgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oXCJhcmcgPSBcIiArIGFyZyk7XG4iICsKKyAgICAgICAgICAgICAgICIgICAgICAgIH1cbiIgKworICAgICAgICAgICAgICAgIiAgICB9XG4iICsKKyJ9IiwgInB1YmxpYyBjbGFzcyBSZWZvcm1hdFByb2JsZW0ge1xuIiArCisgICAgICIgICAgLy9jb21tZW50IGluIGRlY2xhcmF0aW9uXG4iICsKKyAgICAgIiAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7XG4iICsKKyAgICAgIiAgICAgICAgZm9yIChTdHJpbmcgYXJnIDogYXJncykge1xuIiArCisgICAgICJcbiIgKworICAgICAiICAgICAgICAgICAgLy8gYSBmaXJzdCBzeXN0ZW0gb3V0XG4iICsKKyAgICAgIiAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihcIlwiKTtcbiIgKworICAgICAiXG4iICsKKyAgICAgIiAgICAgICAgICAgIC8vIGFub3RoZXIgc3lzdGVtIG91dFxuIiArCisgICAgICIgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oXCJhcmcgPSBcIiArIGFyZyk7XG4iICsKKyAgICAgIiAgICAgICAgfVxuIiArCisgICAgICIgICAgfVxuIiArCisgICAgICJ9Iik7CisKKyAgICBnZXRTZXR0aW5ncygpLktFRVBfQkxBTktfTElORVNfSU5fQ09ERSA9IDA7CisgICAgZ2V0U2V0dGluZ3MoKS5LRUVQX0JMQU5LX0xJTkVTX0lOX0RFQ0xBUkFUSU9OUyA9IDE7CisgICAgZ2V0U2V0dGluZ3MoKS5LRUVQX0ZJUlNUX0NPTFVNTl9DT01NRU5UID0gZmFsc2U7CisKKyAgICBkb1RleHRUZXN0KCJwdWJsaWMgY2xhc3MgUmVmb3JtYXRQcm9ibGVtIHtcbiIgKworICAgICAgICAgICAgICAgIlxuIiArCisgICAgICAgICAgICAgICAiICAgIC8vY29tbWVudCBpbiBkZWNsYXJhdGlvblxuIiArCisgICAgICAgICAgICAgICAiICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHtcbiIgKworICAgICAgICAgICAgICAgIiAgICAgICAgZm9yIChTdHJpbmcgYXJnIDogYXJncykge1xuIiArCisgICAgICAgICAgICAgICAiICAgICAgICAgICAgXG4iICsKKyAgICAgICAgICAgICAgICIgICAgICAgICAgICAvLyBhIGZpcnN0IHN5c3RlbSBvdXRcbiIgKworICAgICAgICAgICAgICAgIiAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihcIlwiKTtcbiIgKworICAgICAgICAgICAgICAgIiAgICAgICAgICAgIFxuIiArCisgICAgICAgICAgICAgICAiICAgICAgICAgICAgLy8gYW5vdGhlciBzeXN0ZW0gb3V0XG4iICsKKyAgICAgICAgICAgICAgICIgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oXCJhcmcgPSBcIiArIGFyZyk7XG4iICsKKyAgICAgICAgICAgICAgICIgICAgICAgIH1cbiIgKworICAgICAgICAgICAgICAgIiAgICB9XG4iICsKKyJ9IiwgInB1YmxpYyBjbGFzcyBSZWZvcm1hdFByb2JsZW0ge1xuIiArCisgICAgICJcbiIgKworICAgICAiICAgIC8vY29tbWVudCBpbiBkZWNsYXJhdGlvblxuIiArCisgICAgICIgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykge1xuIiArCisgICAgICIgICAgICAgIGZvciAoU3RyaW5nIGFyZyA6IGFyZ3MpIHtcbiIgKworICAgICAiICAgICAgICAgICAgLy8gYSBmaXJzdCBzeXN0ZW0gb3V0XG4iICsKKyAgICAgIiAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihcIlwiKTtcbiIgKworICAgICAiICAgICAgICAgICAgLy8gYW5vdGhlciBzeXN0ZW0gb3V0XG4iICsKKyAgICAgIiAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihcImFyZyA9IFwiICsgYXJnKTtcbiIgKworICAgICAiICAgICAgICB9XG4iICsKKyAgICAgIiAgICB9XG4iICsKKyAgICAgIn0iKTsKKworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFNwYWNlQmVmb3JlVHJ5QnJhY2UoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBnZXRTZXR0aW5ncygpLlNQQUNFX0JFRk9SRV9UUllfTEJSQUNFID0gZmFsc2U7CisgICAgZ2V0U2V0dGluZ3MoKS5TUEFDRV9CRUZPUkVfRklOQUxMWV9MQlJBQ0UgPSB0cnVlOworICAgIGRvVGV4dFRlc3QoImNsYXNzIEZvb3tcbiIgKyAiICAgIHZvaWQgZm9vKCkge1xuIiArICIgICAgICAgIHRyeSB7XG4iICsgIiAgICAgICAgfSBmaW5hbGx5IHtcbiIgKyAiICAgICAgICB9XG4iICsgIiAgICB9XG4iICsgIn0iLAorICAgICAgICAgICAgICAgImNsYXNzIEZvbyB7XG4iICsgIiAgICB2b2lkIGZvbygpIHtcbiIgKyAiICAgICAgICB0cnl7XG4iICsgIiAgICAgICAgfSBmaW5hbGx5IHtcbiIgKyAiICAgICAgICB9XG4iICsgIiAgICB9XG4iICsgIn0iKTsKKworICAgIGdldFNldHRpbmdzKCkuU1BBQ0VfQkVGT1JFX1RSWV9MQlJBQ0UgPSB0cnVlOworICAgIGdldFNldHRpbmdzKCkuU1BBQ0VfQkVGT1JFX0ZJTkFMTFlfTEJSQUNFID0gZmFsc2U7CisKKyAgICBkb1RleHRUZXN0KCJjbGFzcyBGb297XG4iICsgIiAgICB2b2lkIGZvbygpIHtcbiIgKyAiICAgICAgICB0cnkge1xuIiArICIgICAgICAgIH0gZmluYWxseSB7XG4iICsgIiAgICAgICAgfVxuIiArICIgICAgfVxuIiArICJ9IiwKKyAgICAgICAgICAgICAgICJjbGFzcyBGb28ge1xuIiArICIgICAgdm9pZCBmb28oKSB7XG4iICsgIiAgICAgICAgdHJ5IHtcbiIgKyAiICAgICAgICB9IGZpbmFsbHl7XG4iICsgIiAgICAgICAgfVxuIiArICIgICAgfVxuIiArICJ9Iik7CisKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RGb3JtYXRDb21tZW50cygpIHRocm93cyBFeGNlcHRpb24geworICAgIGdldFNldHRpbmdzKCkuZ2V0Um9vdFNldHRpbmdzKCkuRU5BQkxFX0pBVkFET0NfRk9STUFUVElORyA9IHRydWU7CisgICAgZG9UZXh0VGVzdCgicHVibGljIGNsYXNzIFRlc3Qge1xuIiArICJcbiIgKyAiICAgIC8qKlxuIiArICIgICAgICogVGhlIHMgcHJvcGVydHkuXG4iICsgIiAgICAgKi9cbiIgKyAiICAgIHByaXZhdGUgU3RyaW5nIHM7XG4iICsgIn0iLAorICAgICAgICAgICAgICAgInB1YmxpYyBjbGFzcyBUZXN0IHtcbiIgKyAiXG4iICsgIiAgICAvKipcbiIgKyAiICAgICAqIFRoZSBzIHByb3BlcnR5LlxuIiArICIgICAgICovXG4iICsgIiAgICBwcml2YXRlIFN0cmluZyBzO1xuIiArICJ9Iik7CisKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3REb05vdFdyYXBMQnJhY2UoKSB0aHJvd3MgSW5jb3JyZWN0T3BlcmF0aW9uRXhjZXB0aW9uIHsKKyAgICBnZXRTZXR0aW5ncygpLkJSQUNFX1NUWUxFID0gQ29tbW9uQ29kZVN0eWxlU2V0dGluZ3MuRU5EX09GX0xJTkU7CisgICAgZ2V0U2V0dGluZ3MoKS5nZXRSb290U2V0dGluZ3MoKS5SSUdIVF9NQVJHSU4gPSA2NjsKKyAgICBkb1RleHRUZXN0KCJwdWJsaWMgY2xhc3MgVGVzdCB7XG4iICsKKyAgICAgICAgICAgICAgICIgICAgdm9pZCBmb28oKXtcbiIgKworICAgICAgICAgICAgICAgIiAgICAgICAgaWYgKHZlcnlMb25nSWRlbnRpZmllcjEgPT0gMSAmJiB2ZXJ5TG9uZ0lkZW50aWZpZXIyID09IDIpIHtcbiIgKworICAgICAgICAgICAgICAgIiAgICAgICAgICAgIGRvU210aCgpO1xuIiArCisgICAgICAgICAgICAgICAiICAgICAgICB9XG4iICsKKyAgICAgICAgICAgICAgICIgICAgfVxuIiArCisifSIsICJwdWJsaWMgY2xhc3MgVGVzdCB7XG4iICsKKyAgICAgIiAgICB2b2lkIGZvbygpIHtcbiIgKworICAgICAiICAgICAgICBpZiAodmVyeUxvbmdJZGVudGlmaWVyMSA9PSAxICYmIHZlcnlMb25nSWRlbnRpZmllcjIgPT0gMikge1xuIiArCisgICAgICIgICAgICAgICAgICBkb1NtdGgoKTtcbiIgKworICAgICAiICAgICAgICB9XG4iICsKKyAgICAgIiAgICB9XG4iICsKKyAgICAgIn0iKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3ROZXdMaW5lc0Fyb3VuZEFycmF5SW5pdGlhbGl6ZXIoKSB0aHJvd3MgSW5jb3JyZWN0T3BlcmF0aW9uRXhjZXB0aW9uIHsKKyAgICBnZXRTZXR0aW5ncygpLkFSUkFZX0lOSVRJQUxJWkVSX1dSQVAgPSBDb21tb25Db2RlU3R5bGVTZXR0aW5ncy5XUkFQX0FTX05FRURFRDsKKyAgICBnZXRTZXR0aW5ncygpLkFSUkFZX0lOSVRJQUxJWkVSX0xCUkFDRV9PTl9ORVhUX0xJTkUgPSB0cnVlOworICAgIGdldFNldHRpbmdzKCkuQVJSQVlfSU5JVElBTElaRVJfUkJSQUNFX09OX05FWFRfTElORSA9IHRydWU7CisgICAgZ2V0U2V0dGluZ3MoKS5nZXRSb290U2V0dGluZ3MoKS5SSUdIVF9NQVJHSU4gPSA0MDsKKyAgICBkb1RleHRUZXN0KCJjbGFzcyBGb28ge1xuIiArICIgICAgaW50W10gYSA9IG5ldyBpbnRbXXsxLDIsMHgwMDUyLDB4MDA1MywweDAwNTQsMHgwMDU0LDB4MDA1NH07XG4iICsgIn0iLCAiY2xhc3MgRm9vIHtcbiIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgICAgaW50W10gYSA9IG5ldyBpbnRbXXtcbiIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgICAgICAgICAgICAxLCAyLCAweDAwNTIsIDB4MDA1MyxcbiIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgICAgICAgICAgICAweDAwNTQsIDB4MDA1NCwgMHgwMDU0XG4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgIH07XG4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAifSIpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFNwYWNlQWZ0ZXJDb21tYUluRW51bSgpIHRocm93cyBJbmNvcnJlY3RPcGVyYXRpb25FeGNlcHRpb24geworICAgIGdldFNldHRpbmdzKCkuU1BBQ0VfQUZURVJfQ09NTUEgPSB0cnVlOworCisgICAgZmluYWwgSmF2YVBzaUZhY2FkZSBmYWNhZGUgPSBnZXRKYXZhRmFjYWRlKCk7CisgICAgZmluYWwgTGFuZ3VhZ2VMZXZlbCBlZmZlY3RpdmVMYW5ndWFnZUxldmVsID0gTGFuZ3VhZ2VMZXZlbFByb2plY3RFeHRlbnNpb24uZ2V0SW5zdGFuY2UoZmFjYWRlLmdldFByb2plY3QoKSkuZ2V0TGFuZ3VhZ2VMZXZlbCgpOworICAgIHRyeSB7CisgICAgICBMYW5ndWFnZUxldmVsUHJvamVjdEV4dGVuc2lvbi5nZXRJbnN0YW5jZShmYWNhZGUuZ2V0UHJvamVjdCgpKS5zZXRMYW5ndWFnZUxldmVsKExhbmd1YWdlTGV2ZWwuSkRLXzFfNSk7CisKKworICAgICAgZG9UZXh0VGVzdCgicHVibGljIGVudW0gU3RyaW5nRXhEaXJlY3Rpb24ge1xuIiArICJcbiIgKyAiICAgIFJJR0hUX1RPX0xFRlQsIExFRlRfVE9fUklHSFRcbiIgKyAiXG4iICsgIn0iLAorICAgICAgICAgICAgICAgICAicHVibGljIGVudW0gU3RyaW5nRXhEaXJlY3Rpb24ge1xuIiArICJcbiIgKyAiICAgIFJJR0hUX1RPX0xFRlQsIExFRlRfVE9fUklHSFRcbiIgKyAiXG4iICsgIn0iKTsKKyAgICB9CisgICAgZmluYWxseSB7CisgICAgICBMYW5ndWFnZUxldmVsUHJvamVjdEV4dGVuc2lvbi5nZXRJbnN0YW5jZShmYWNhZGUuZ2V0UHJvamVjdCgpKS5zZXRMYW5ndWFnZUxldmVsKGVmZmVjdGl2ZUxhbmd1YWdlTGV2ZWwpOworICAgIH0KKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RSZW1vdmVCcmFjZUJlZm9yZUluc3RhbmNlT2YoKSB0aHJvd3MgSW5jb3JyZWN0T3BlcmF0aW9uRXhjZXB0aW9uIHsKKyAgICBkb1RleHRUZXN0KCJjbGFzcyBSZWZvcm1hdEluc3RhbmNlT2Yge1xuIiArCisgICAgICAgICAgICAgICAiICAgIHZvaWQgZm9vKE9iamVjdCBzdHJpbmcpIHtcbiIgKworICAgICAgICAgICAgICAgIiAgICAgICAgaWYgKHN0cmluZy50b1N0cmluZygpIGluc3RhbmNlb2YgU3RyaW5nKSB7fSAvLyByZWZvcm1hdCBtZVxuIiArCisgICAgICAgICAgICAgICAiICAgIH1cbiIgKworIn0iLCAiY2xhc3MgUmVmb3JtYXRJbnN0YW5jZU9mIHtcbiIgKworICAgICAiICAgIHZvaWQgZm9vKE9iamVjdCBzdHJpbmcpIHtcbiIgKworICAgICAiICAgICAgICBpZiAoc3RyaW5nLnRvU3RyaW5nKCkgaW5zdGFuY2VvZiBTdHJpbmcpIHtcbiIgKworICAgICAiICAgICAgICB9IC8vIHJlZm9ybWF0IG1lXG4iICsKKyAgICAgIiAgICB9XG4iICsKKyAgICAgIn0iKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RBbm5vdGF0aW9uQmVmb3JlUGFja2FnZUxvY2FsQ29uc3RydWN0b3IoKSB0aHJvd3MgSW5jb3JyZWN0T3BlcmF0aW9uRXhjZXB0aW9uIHsKKyAgICBkb1RleHRUZXN0KCJjbGFzcyBGb28ge1xuIiArICIgICAgQE15QW5ub3RhdGlvbiBGb28oKSB7XG4iICsgIiAgICB9XG4iICsgIn0iLAorICAgICAgICAgICAgICAgImNsYXNzIEZvbyB7XG4iICsgIiAgICBATXlBbm5vdGF0aW9uXG4iICsgIiAgICBGb28oKSB7XG4iICsgIiAgICB9XG4iICsgIn0iKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RMb25nQW5ub3RhdGlvbnNBcmVOb3RXcmFwcGVkKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZ2V0U2V0dGluZ3MoKS5BUlJBWV9JTklUSUFMSVpFUl9XUkFQID0gQ29tbW9uQ29kZVN0eWxlU2V0dGluZ3MuV1JBUF9BU19ORUVERUQ7CisgICAgZG9UZXN0KCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0V3JhcEV4dGVuZHNMaXN0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZ2V0U2V0dGluZ3MoKS5nZXRSb290U2V0dGluZ3MoKS5SSUdIVF9NQVJHSU4gPSA1MDsKKyAgICBnZXRTZXR0aW5ncygpLkVYVEVORFNfTElTVF9XUkFQID0gQ29tbW9uQ29kZVN0eWxlU2V0dGluZ3MuV1JBUF9PTl9FVkVSWV9JVEVNOworICAgIGdldFNldHRpbmdzKCkuRVhURU5EU19LRVlXT1JEX1dSQVAgPSBDb21tb25Db2RlU3R5bGVTZXR0aW5ncy5XUkFQX0FTX05FRURFRDsKKworICAgIGRvVGV4dFRlc3QoImNsYXNzIENvbHRyZURhdGFQcm92aWRlciBleHRlbmRzIERhdGFQcm92aWRlciwgQWdlbnRFdmVudExpc3RlbmVyLCBQYXJhbWV0ZXJEYXRhRXZlbnRMaXN0ZW5lciB7XG59IiwKKyAgICAgICAgICAgICAgICJjbGFzcyBDb2x0cmVEYXRhUHJvdmlkZXIgZXh0ZW5kcyBEYXRhUHJvdmlkZXIsXG4iICsKKyAgICAgICAgICAgICAgICIgICAgICAgIEFnZW50RXZlbnRMaXN0ZW5lcixcbiIgKworICAgICAgICAgICAgICAgIiAgICAgICAgUGFyYW1ldGVyRGF0YUV2ZW50TGlzdGVuZXIge1xufSIpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFdyYXBMb25nRXhwcmVzc2lvbigpIHRocm93cyBFeGNlcHRpb24geworICAgIGdldFNldHRpbmdzKCkuZ2V0Um9vdFNldHRpbmdzKCkuUklHSFRfTUFSR0lOID0gODA7CisgICAgZ2V0U2V0dGluZ3MoKS5CSU5BUllfT1BFUkFUSU9OX1dSQVAgPSBDb21tb25Db2RlU3R5bGVTZXR0aW5ncy5XUkFQX0FTX05FRURFRDsKKyAgICBnZXRTZXR0aW5ncygpLkFMSUdOX01VTFRJTElORV9CSU5BUllfT1BFUkFUSU9OID0gdHJ1ZTsKKyAgICBkb1RleHRUZXN0KCJjbGFzcyBGb28ge1xuIiArCisgICAgICAgICAgICAgICAiICAgIHZvaWQgZm9vICgpIHtcbiIgKworICAgICAgICAgICAgICAgIiAgICAgICAgcmV0dXJuIChpbnRlcnZhbDEuZ2V0RW5kSW5kZXgoKSA+PSBpbnRlcnZhbDIuZ2V0U3RhcnRJbmRleCgpICYmIGludGVydmFsMy5nZXRTdGFydEluZGV4KCkgPD0gaW50ZXJ2YWw0LmdldEVuZEluZGV4KCkpIHx8IChpbnRlcnZhbDUuZ2V0RW5kSW5kZXgoKSA+PSBpbnRlcnZhbDYuZ2V0U3RhcnRJbmRleCgpICYmIGludGVydmFsNy5nZXRTdGFydEluZGV4KCkgPD0gaW50ZXJ2YWw4LmdldEVuZEluZGV4KCkpOyIgKworICAgICAgICAgICAgICAgIiAgICB9XG4iICsKKyAgICAgICAgICAgICAgICJ9IiwgImNsYXNzIEZvbyB7XG4iICsKKyAgICAgICAgICAgICAgICAgICAgIiAgICB2b2lkIGZvbygpIHtcbiIgKworICAgICAgICAgICAgICAgICAgICAiICAgICAgICByZXR1cm4gKGludGVydmFsMS5nZXRFbmRJbmRleCgpID49IGludGVydmFsMi5nZXRTdGFydEluZGV4KCkgJiZcbiIgKworICAgICAgICAgICAgICAgICAgICAiICAgICAgICAgICAgICAgIGludGVydmFsMy5nZXRTdGFydEluZGV4KCkgPD0gaW50ZXJ2YWw0LmdldEVuZEluZGV4KCkpIHx8XG4iICsKKyAgICAgICAgICAgICAgICAgICAgIiAgICAgICAgICAgICAgIChpbnRlcnZhbDUuZ2V0RW5kSW5kZXgoKSA+PSBpbnRlcnZhbDYuZ2V0U3RhcnRJbmRleCgpICYmXG4iICsKKyAgICAgICAgICAgICAgICAgICAgIiAgICAgICAgICAgICAgICBpbnRlcnZhbDcuZ2V0U3RhcnRJbmRleCgpIDw9IGludGVydmFsOC5nZXRFbmRJbmRleCgpKTtcbiIgKworICAgICAgICAgICAgICAgICAgICAiICAgIH1cbiIgKworICAgICAgICAgICAgICAgICAgICAifSIpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdERvTm90V3JhcENhbGxDaGFpbklmUGFyYW1ldGVyc1dyYXBwZWQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBnZXRTZXR0aW5ncygpLmdldFJvb3RTZXR0aW5ncygpLlJJR0hUX01BUkdJTiA9IDg3OworICAgIGdldFNldHRpbmdzKCkuQ0FMTF9QQVJBTUVURVJTX1dSQVAgPSBDb21tb25Db2RlU3R5bGVTZXR0aW5ncy5XUkFQX0FTX05FRURFRDsKKyAgICBnZXRTZXR0aW5ncygpLk1FVEhPRF9DQUxMX0NIQUlOX1dSQVAgPSBDb21tb25Db2RlU3R5bGVTZXR0aW5ncy5XUkFQX0FTX05FRURFRDsKKyAgICBnZXRTZXR0aW5ncygpLkFMSUdOX01VTFRJTElORV9QQVJBTUVURVJTX0lOX0NBTExTID0gdHJ1ZTsKKyAgICAvL2dldFNldHRpbmdzKCkuUFJFRkVSX1BBUkFNRVRFUlNfV1JBUCA9IHRydWU7CisKKyAgICBkb01ldGhvZFRlc3QoCisgICAgICAvLzkgICAgICAgICAgICAgICAgICAgIDMwICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcwICAgICAgICAgODAgICAgODYKKyAgICAgICJkZXNjcmlwdG9ycyA9IG1hbmFnZXIuY3JlYXRlUHJvYmxlbURlc2NyaXB0b3IocGFyYW1ldGVyMSwgcGFyYW1ldGVyMiwgcGFyYW1ldGVycGFyYW1ldGVycGFyMyxwYXJhbWV0ZXI0KTsiLAorCisgICAgICAiZGVzY3JpcHRvcnMgPSBtYW5hZ2VyLmNyZWF0ZVByb2JsZW1EZXNjcmlwdG9yKHBhcmFtZXRlcjEsIHBhcmFtZXRlcjIsXG4iICsKKyAgICAgICIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVycGFyYW1ldGVycGFyMyxcbiIgKworICAgICAgIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbWV0ZXI0KTsiCisKKyAgICApOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEFsaWduVGVybmFyeU9wZXJhdGlvbigpIHRocm93cyBFeGNlcHRpb24geworICAgIGdldFNldHRpbmdzKCkuQUxJR05fTVVMVElMSU5FX1RFUk5BUllfT1BFUkFUSU9OID0gdHJ1ZTsKKyAgICBkb01ldGhvZFRlc3QoIlN0cmluZyBzID0geCA9PSAwID8gXCJoZWxsb1wiIDpcbiIgKworICAgICAgICAgICAgICAgICAiICAgICAgICAgICAgICAgIHggPT0gNSA/IFwic29tZXRoaW5nIGVsc2VcIiA6XG4iICsKKyAgICAgICAgICAgICAgICAgIiAgICAgICAgICAgICAgICAgICAgICAgIHggPiAwID8gXCJibGEsIGJsYVwiIDpcbiIgKworICAgICAgICAgICAgICAgICAiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlwiOyIsICJTdHJpbmcgcyA9IHggPT0gMCA/IFwiaGVsbG9cIiA6XG4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgICAgICAgICB4ID09IDUgPyBcInNvbWV0aGluZyBlbHNlXCIgOlxuIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgICAgICAgICAgeCA+IDAgPyBcImJsYSwgYmxhXCIgOlxuIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgICAgICAgICAgXCJcIjsiKTsKKworICAgIGdldFNldHRpbmdzKCkuVEVSTkFSWV9PUEVSQVRJT05fU0lHTlNfT05fTkVYVF9MSU5FID0gdHJ1ZTsKKworICAgIGRvTWV0aG9kVGVzdCgiaW50IHNvbWVWYXJpYWJsZSA9IGEgP1xuIiArICJ4IDpcbiIgKyAieTsiLAorICAgICAgICAgICAgICAgICAiaW50IHNvbWVWYXJpYWJsZSA9IGEgP1xuIiArICIgICAgICAgICAgICAgICAgICAgeCA6XG4iICsgIiAgICAgICAgICAgICAgICAgICB5OyIpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFJpZ2h0TWFyZ2luXzIoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBnZXRTZXR0aW5ncygpLmdldFJvb3RTZXR0aW5ncygpLlJJR0hUX01BUkdJTiA9IDY1OworICAgIGdldFNldHRpbmdzKCkuQVNTSUdOTUVOVF9XUkFQID0gQ29tbW9uQ29kZVN0eWxlU2V0dGluZ3MuV1JBUF9BU19ORUVERUQ7CisgICAgZ2V0U2V0dGluZ3MoKS5QTEFDRV9BU1NJR05NRU5UX1NJR05fT05fTkVYVF9MSU5FID0gdHJ1ZTsKKyAgICBnZXRTZXR0aW5ncygpLktFRVBfTElORV9CUkVBS1MgPSBmYWxzZTsKKworICAgIGRvQ2xhc3NUZXN0KAorICAgICAgInB1YmxpYyBzdGF0aWMgZmluYWwgTWFwPExvbmdUeXBlLCBMb25nVHlwZT4gbG9uZ1ZhcmlhYmxlTmFtZSA9XG4iICsKKyAgICAgICJ2YXJpYWJsZVZhbHVlOyIsCisgICAgICAicHVibGljIHN0YXRpYyBmaW5hbCBNYXA8TG9uZ1R5cGUsIExvbmdUeXBlPiBsb25nVmFyaWFibGVOYW1lXG4iICsKKyAgICAgICIgICAgICAgID0gdmFyaWFibGVWYWx1ZTsiKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RSaWdodE1hcmdpbl8zKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZ2V0U2V0dGluZ3MoKS5nZXRSb290U2V0dGluZ3MoKS5SSUdIVF9NQVJHSU4gPSA2NTsKKyAgICBnZXRTZXR0aW5ncygpLkFTU0lHTk1FTlRfV1JBUCA9IENvbW1vbkNvZGVTdHlsZVNldHRpbmdzLldSQVBfQVNfTkVFREVEOworICAgIGdldFNldHRpbmdzKCkuUExBQ0VfQVNTSUdOTUVOVF9TSUdOX09OX05FWFRfTElORSA9IGZhbHNlOworICAgIGdldFNldHRpbmdzKCkuS0VFUF9MSU5FX0JSRUFLUyA9IGZhbHNlOworCisgICAgZG9DbGFzc1Rlc3QoCisgICAgICAicHVibGljIHN0YXRpYyBmaW5hbCBNYXA8TG9uZ1R5cGUsIExvbmdUeXBlPiBsb25nVmFyaWFibGVOYW1lID1cbiIgKworICAgICAgInZhcmlhYmxlVmFsdWU7IiwKKyAgICAgICJwdWJsaWMgc3RhdGljIGZpbmFsIE1hcDxMb25nVHlwZSwgTG9uZ1R5cGU+XG4iICsKKyAgICAgICIgICAgICAgIGxvbmdWYXJpYWJsZU5hbWUgPSB2YXJpYWJsZVZhbHVlOyIpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdERvTm90UmVtb3ZlTGluZUJyZWFrc0JldHdlZW5Db21tZW50cygpeworICAgIGdldFNldHRpbmdzKCkuS0VFUF9MSU5FX0JSRUFLUyA9IGZhbHNlOworICAgIGdldFNldHRpbmdzKCkuS0VFUF9GSVJTVF9DT0xVTU5fQ09NTUVOVCA9IGZhbHNlOworCisgICAgZG9UZXh0VGVzdCgKKyAgICAgICJwdWJsaWMgY2xhc3MgRm9vIHtcbiIgKworICAgICAgIiAgIC8vaGVyZSBpcyBhIGNvbW1lbnRcbiIgKworICAgICAgIiAgIC8vbGluZSAyIG9mIGNvbW1lbnRcbiIgKworICAgICAgIiAgIHB1YmxpYyB2b2lkIG15TWV0aG9kKCkge1xuIiArCisgICAgICAiICAgICAgIC8vYSBjb21tZW50XG4iICsKKyAgICAgICIgICAgICAgLy8uLi4gYW5vdGhlciBjb21tZW50XG4iICsKKyAgICAgICIgICB9XG4iICsKKyAgICAgICJcbiIgKworICAgICAgIi8vc2F2ZSBmb3IgbGF0ZXJcbiIgKworICAgICAgIi8vICAgIHB1YmxpYyB2b2lkIGluY29tcGxldGVNZXRob2QoKSB7XG4iICsKKyAgICAgICIvLyAgICAgICAgaW50IGJsYWggPSAwO1xuIiArCisgICAgICAiLy8gICAgICAgIGNhbGxTb21lTWV0aG9kKCk7XG4iICsKKyAgICAgICIvLyAgICAgICAgY2FsbFNvbWVPdGhlck1ldGhvZCgpO1xuIiArCisgICAgICAiLy8gICAgICAgIGRvU29tZXRoaW5nRWxzZSgpO1xuIiArCisgICAgICAiLy8gICAgfVxuIiArCisgICAgICAiXG4iICsKKyAgICAgICIvL2NvbW1lbnQgYXQgZmlyc3QgbGluZVxuIiArCisgICAgICAifSIsCisgICAgICAicHVibGljIGNsYXNzIEZvbyB7XG4iICsKKyAgICAgICIgICAgLy9oZXJlIGlzIGEgY29tbWVudFxuIiArCisgICAgICAiICAgIC8vbGluZSAyIG9mIGNvbW1lbnRcbiIgKworICAgICAgIiAgICBwdWJsaWMgdm9pZCBteU1ldGhvZCgpIHtcbiIgKworICAgICAgIiAgICAgICAgLy9hIGNvbW1lbnRcbiIgKworICAgICAgIiAgICAgICAgLy8uLi4gYW5vdGhlciBjb21tZW50XG4iICsKKyAgICAgICIgICAgfVxuIiArCisgICAgICAiXG4iICsKKyAgICAgICIgICAgLy9zYXZlIGZvciBsYXRlclxuIiArCisgICAgICAiICAgIC8vICAgIHB1YmxpYyB2b2lkIGluY29tcGxldGVNZXRob2QoKSB7XG4iICsKKyAgICAgICIgICAgLy8gICAgICAgIGludCBibGFoID0gMDtcbiIgKworICAgICAgIiAgICAvLyAgICAgICAgY2FsbFNvbWVNZXRob2QoKTtcbiIgKworICAgICAgIiAgICAvLyAgICAgICAgY2FsbFNvbWVPdGhlck1ldGhvZCgpO1xuIiArCisgICAgICAiICAgIC8vICAgICAgICBkb1NvbWV0aGluZ0Vsc2UoKTtcbiIgKworICAgICAgIiAgICAvLyAgICB9XG4iICsKKyAgICAgICJcbiIgKworICAgICAgIiAgICAvL2NvbW1lbnQgYXQgZmlyc3QgbGluZVxuIiArCisgICAgICAifSIpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFdyYXBQYXJhbXNPbkV2ZXJ5SXRlbSgpIHRocm93cyBFeGNlcHRpb24geworICAgIENvZGVTdHlsZVNldHRpbmdzIGNvZGVTdHlsZVNldHRpbmdzID0gQ29kZVN0eWxlU2V0dGluZ3NNYW5hZ2VyLmdldFNldHRpbmdzKGdldFByb2plY3QoKSk7CisKKyAgICBpbnQgb2xkTWFyZ2luID0gY29kZVN0eWxlU2V0dGluZ3MuUklHSFRfTUFSR0lOOworICAgIGJvb2xlYW4gb2xkS2VlcCA9IGNvZGVTdHlsZVNldHRpbmdzLktFRVBfTElORV9CUkVBS1M7CisgICAgaW50IG9sZFdyYXAgPSBjb2RlU3R5bGVTZXR0aW5ncy5NRVRIT0RfUEFSQU1FVEVSU19XUkFQOworCisgICAgdHJ5IHsKKyAgICAgIGNvZGVTdHlsZVNldHRpbmdzLlJJR0hUX01BUkdJTiA9IDgwOworICAgICAgY29kZVN0eWxlU2V0dGluZ3MuS0VFUF9MSU5FX0JSRUFLUyA9IGZhbHNlOworICAgICAgY29kZVN0eWxlU2V0dGluZ3MuTUVUSE9EX1BBUkFNRVRFUlNfV1JBUCA9IENvbW1vbkNvZGVTdHlsZVNldHRpbmdzLldSQVBfT05fRVZFUllfSVRFTTsKKworICAgICAgZG9DbGFzc1Rlc3QoCisgICAgICAgICJwdWJsaWMgdm9pZCBmb28oU3RyaW5nIHAxLFxuIiArCisgICAgICAgICIgICAgICAgICAgICAgICAgU3RyaW5nIHAyLFxuIiArCisgICAgICAgICIgICAgICAgICAgICAgICAgU3RyaW5nIHAzLFxuIiArCisgICAgICAgICIgICAgICAgICAgICAgICAgU3RyaW5nIHA0LFxuIiArCisgICAgICAgICIgICAgICAgICAgICAgICAgU3RyaW5nIHA1LFxuIiArCisgICAgICAgICIgICAgICAgICAgICAgICAgU3RyaW5nIHA2LFxuIiArCisgICAgICAgICIgICAgICAgICAgICAgICAgU3RyaW5nIHA3KSB7XG4iICsKKyAgICAgICAgIiAgICAvL1RvIGNoYW5nZSBib2R5IG9mIGltcGxlbWVudGVkIG1ldGhvZHMgdXNlIEZpbGUgfCBTZXR0aW5ncyB8IEZpbGUgVGVtcGxhdGVzLlxuIiArCisgICAgICAgICJ9IiwKKyAgICAgICAgInB1YmxpYyB2b2lkIGZvbyhTdHJpbmcgcDEsXG4iICsKKyAgICAgICAgIiAgICAgICAgICAgICAgICBTdHJpbmcgcDIsXG4iICsKKyAgICAgICAgIiAgICAgICAgICAgICAgICBTdHJpbmcgcDMsXG4iICsKKyAgICAgICAgIiAgICAgICAgICAgICAgICBTdHJpbmcgcDQsXG4iICsKKyAgICAgICAgIiAgICAgICAgICAgICAgICBTdHJpbmcgcDUsXG4iICsKKyAgICAgICAgIiAgICAgICAgICAgICAgICBTdHJpbmcgcDYsXG4iICsKKyAgICAgICAgIiAgICAgICAgICAgICAgICBTdHJpbmcgcDcpIHtcbiIgKworICAgICAgICAiICAgIC8vVG8gY2hhbmdlIGJvZHkgb2YgaW1wbGVtZW50ZWQgbWV0aG9kcyB1c2UgRmlsZSB8IFNldHRpbmdzIHwgRmlsZSBUZW1wbGF0ZXMuXG4iICsKKyAgICAgICAgIn0iKTsKKyAgICB9CisgICAgZmluYWxseSB7CisgICAgICBjb2RlU3R5bGVTZXR0aW5ncy5SSUdIVF9NQVJHSU4gPSBvbGRNYXJnaW47CisgICAgICBjb2RlU3R5bGVTZXR0aW5ncy5LRUVQX0xJTkVfQlJFQUtTID0gb2xkS2VlcDsKKyAgICAgIGNvZGVTdHlsZVNldHRpbmdzLk1FVEhPRF9QQVJBTUVURVJTX1dSQVAgPSBvbGRXcmFwOworICAgIH0KKworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdENvbW1lbnRBZnRlckRlY2xhcmF0aW9uKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgQ29kZVN0eWxlU2V0dGluZ3MgY29kZVN0eWxlU2V0dGluZ3MgPSBDb2RlU3R5bGVTZXR0aW5nc01hbmFnZXIuZ2V0U2V0dGluZ3MoZ2V0UHJvamVjdCgpKTsKKworICAgIGludCBvbGRNYXJnaW4gPSBjb2RlU3R5bGVTZXR0aW5ncy5SSUdIVF9NQVJHSU47CisKKyAgICB0cnkgeworICAgICAgY29kZVN0eWxlU2V0dGluZ3MuUklHSFRfTUFSR0lOID0gMjA7CisgICAgICBjb2RlU3R5bGVTZXR0aW5ncy5BU1NJR05NRU5UX1dSQVAgPSBDb21tb25Db2RlU3R5bGVTZXR0aW5ncy5XUkFQX0FTX05FRURFRDsKKyAgICAgIGRvTWV0aG9kVGVzdCgKKyAgICAgICAgImludCBpPTA7IC8vY29tbWVudCBjb21tZW50IiwKKyAgICAgICAgImludCBpID1cbiIgKworICAgICAgICAiICAgICAgICAwOyAvL2NvbW1lbnQgY29tbWVudCIKKyAgICAgICk7CisKKyAgICB9CisgICAgZmluYWxseSB7CisgICAgICBjb2RlU3R5bGVTZXR0aW5ncy5SSUdIVF9NQVJHSU4gPSBvbGRNYXJnaW47CisgICAgfQorICB9CisKKyAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIC8vICAgICAgICAgICAgICBUaWNrZXRzLWltcGxpZWQgdGVzdHMKKyAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgcHVibGljIHZvaWQgdGVzdFNDUjkxNSgpIHRocm93cyBFeGNlcHRpb24geworICAgIGdldFNldHRpbmdzKCkuU1BBQ0VfQVJPVU5EX0FERElUSVZFX09QRVJBVE9SUyA9IGZhbHNlOworICAgIGRvVGVzdCgiU0NSOTE1LmphdmEiLCAiU0NSOTE1X2FmdGVyLmphdmEiKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RTQ1I0MjkoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBmaW5hbCBDb21tb25Db2RlU3R5bGVTZXR0aW5ncyBzZXR0aW5ncyA9IGdldFNldHRpbmdzKCk7CisgICAgc2V0dGluZ3MuS0VFUF9CTEFOS19MSU5FU19JTl9DT0RFID0gMjsKKyAgICBzZXR0aW5ncy5LRUVQX0JMQU5LX0xJTkVTX0JFRk9SRV9SQlJBQ0UgPSAyOworICAgIHNldHRpbmdzLktFRVBfQkxBTktfTElORVNfSU5fREVDTEFSQVRJT05TID0gMjsKKyAgICBkb1Rlc3QoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RTQ1I1NDgoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBmaW5hbCBDb21tb25Db2RlU3R5bGVTZXR0aW5ncyBzZXR0aW5ncyA9IGdldFNldHRpbmdzKCk7CisgICAgc2V0dGluZ3MuZ2V0Um9vdFNldHRpbmdzKCkuZ2V0SW5kZW50T3B0aW9ucyhTdGRGaWxlVHlwZXMuSkFWQSkuSU5ERU5UX1NJWkUgPSA0OworICAgIHNldHRpbmdzLmdldFJvb3RTZXR0aW5ncygpLmdldEluZGVudE9wdGlvbnMoU3RkRmlsZVR5cGVzLkpBVkEpLkNPTlRJTlVBVElPTl9JTkRFTlRfU0laRSA9IDI7CisgICAgZG9UZXN0KCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0SURFQV8xNjE1MSgpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvQ2xhc3NUZXN0KCJAVmFsaWRhdGVOZXN0ZWRQcm9wZXJ0aWVzKHtcbiIgKworICAgICAgICAgICAgICAgICJAVmFsaWRhdGUoZmllbGQ9XCJuYW1lXCIsIHJlcXVpcmVkPXRydWUsIG1heGxlbmd0aD1UcmlwLk5BTUUpLFxuIiArCisgICAgICAgICAgICAgICAgIkBWYWxpZGF0ZShmaWVsZD1cIm5hbWVcIiwgcmVxdWlyZWQ9dHJ1ZSwgbWF4bGVuZ3RoPVRyaXAuTkFNRSlcbiIgKworICAgICAgICAgICAgICAgICJ9KSIgKworICAgICAgICAgICAgICAgICJwdWJsaWMgVHJpcCBnZXRUcmlwKCkge1xuIiArCisgICAgICAgICAgICAgICAgIn0iLCAiQFZhbGlkYXRlTmVzdGVkUHJvcGVydGllcyh7XG4iICsKKyAgICAgICAgICAgICAgICAgICAgICIgICAgICAgIEBWYWxpZGF0ZShmaWVsZCA9IFwibmFtZVwiLCByZXF1aXJlZCA9IHRydWUsIG1heGxlbmd0aCA9IFRyaXAuTkFNRSksXG4iICsKKyAgICAgICAgICAgICAgICAgICAgICIgICAgICAgIEBWYWxpZGF0ZShmaWVsZCA9IFwibmFtZVwiLCByZXF1aXJlZCA9IHRydWUsIG1heGxlbmd0aCA9IFRyaXAuTkFNRSlcbiIgKworICAgICAgICAgICAgICAgICAgICAgIn0pXG4iICsKKyAgICAgICAgICAgICAgICAgICAgICJwdWJsaWMgVHJpcCBnZXRUcmlwKCkge1xuIiArCisgICAgICAgICAgICAgICAgICAgICAifSIpOworCisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0SURFQV8xNDMyNCgpIHRocm93cyBFeGNlcHRpb24geworICAgIGdldFNldHRpbmdzKCkuQUxJR05fTVVMVElMSU5FX0FSUkFZX0lOSVRJQUxJWkVSX0VYUFJFU1NJT04gPSB0cnVlOworCisgICAgZG9DbGFzc1Rlc3QoCisgICAgICAiQEFubjEoeyBAQW5uMixcbiIgKworICAgICAgIiAgICAgICAgICAgICAgICAgICAgICBAQW5uM30pXG4iICsKKyAgICAgICJwdWJsaWMgQXV0aG9yQWRkcmVzcyBnZXRBZGRyZXNzKCkge1xuIiArCisgICAgICAiICAgIHJldHVybiBhZGRyZXNzO1xuIiArCisgICAgICAifSIsCisgICAgICAiQEFubjEoe0BBbm4yLFxuIiArCisgICAgICAiICAgICAgIEBBbm4zfSlcbiIgKworICAgICAgInB1YmxpYyBBdXRob3JBZGRyZXNzIGdldEFkZHJlc3MoKSB7XG4iICsKKyAgICAgICIgICAgcmV0dXJuIGFkZHJlc3M7XG4iICsKKyAgICAgICJ9Iik7CisKKyAgICBkb0NsYXNzVGVzdCgiQEF0dHJpYnV0ZU92ZXJyaWRlcyh7IEBBdHRyaWJ1dGVPdmVycmlkZShuYW1lID0gXCJhZGRyZXNzXCIsIGNvbHVtbiA9IEBDb2x1bW4obmFtZSA9IFwiQUREUlwiKSksXG4iICsKKyAgICAgICAgICAgICAgICAiICAgICAgICAgICAgICAgICAgICAgIEBBdHRyaWJ1dGVPdmVycmlkZShuYW1lID0gXCJjb3VudHJ5XCIsIGNvbHVtbiA9IEBDb2x1bW4obmFtZSA9IFwiTkFUSU9OXCIpKSB9KVxuIiArCisgICAgICAgICAgICAgICAgInB1YmxpYyBBdXRob3JBZGRyZXNzIGdldEFkZHJlc3MoKSB7XG4iICsKKyAgICAgICAgICAgICAgICAiICAgIHJldHVybiBhZGRyZXNzO1xuIiArCisgICAgICAgICAgICAgICAgIn0iLAorICAgICAgICAgICAgICAgICJAQXR0cmlidXRlT3ZlcnJpZGVzKHtAQXR0cmlidXRlT3ZlcnJpZGUobmFtZSA9IFwiYWRkcmVzc1wiLCBjb2x1bW4gPSBAQ29sdW1uKG5hbWUgPSBcIkFERFJcIikpLFxuIiArCisgICAgICAgICAgICAgICAgIiAgICAgICAgICAgICAgICAgICAgIEBBdHRyaWJ1dGVPdmVycmlkZShuYW1lID0gXCJjb3VudHJ5XCIsIGNvbHVtbiA9IEBDb2x1bW4obmFtZSA9IFwiTkFUSU9OXCIpKX0pXG4iICsKKyAgICAgICAgICAgICAgICAicHVibGljIEF1dGhvckFkZHJlc3MgZ2V0QWRkcmVzcygpIHtcbiIgKworICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIGFkZHJlc3M7XG4iICsKKyAgICAgICAgICAgICAgICAifSIKKworICAgICk7CisgIH0KKworcHVibGljIHZvaWQgdGVzdFNDUjI2MCgpIHRocm93cyBFeGNlcHRpb24geworICAgIGZpbmFsIENvbW1vbkNvZGVTdHlsZVNldHRpbmdzIHNldHRpbmdzID0gZ2V0U2V0dGluZ3MoKTsKKyAgICBzZXR0aW5ncy5JRl9CUkFDRV9GT1JDRSA9IENvbW1vbkNvZGVTdHlsZVNldHRpbmdzLkZPUkNFX0JSQUNFU19BTFdBWVM7CisgICAgc2V0dGluZ3MuQlJBQ0VfU1RZTEUgPSBDb21tb25Db2RlU3R5bGVTZXR0aW5ncy5FTkRfT0ZfTElORTsKKyAgICBzZXR0aW5ncy5LRUVQX0xJTkVfQlJFQUtTID0gZmFsc2U7CisgICAgZG9UZXN0KCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0U0NSMTE0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZmluYWwgQ29tbW9uQ29kZVN0eWxlU2V0dGluZ3Mgc2V0dGluZ3MgPSBnZXRTZXR0aW5ncygpOworICAgIHNldHRpbmdzLkJSQUNFX1NUWUxFID0gQ29tbW9uQ29kZVN0eWxlU2V0dGluZ3MuTkVYVF9MSU5FOworICAgIHNldHRpbmdzLkNBVENIX09OX05FV19MSU5FID0gdHJ1ZTsKKyAgICBkb1Rlc3QoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RTQ1IyNTkoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBteVRleHRSYW5nZSA9IG5ldyBUZXh0UmFuZ2UoMzYsIDYwKTsKKyAgICBmaW5hbCBDb21tb25Db2RlU3R5bGVTZXR0aW5ncyBzZXR0aW5ncyA9IGdldFNldHRpbmdzKCk7CisgICAgc2V0dGluZ3MuSUZfQlJBQ0VfRk9SQ0UgPSBDb21tb25Db2RlU3R5bGVTZXR0aW5ncy5GT1JDRV9CUkFDRVNfQUxXQVlTOworICAgIHNldHRpbmdzLktFRVBfTElORV9CUkVBS1MgPSBmYWxzZTsKKyAgICBkb1Rlc3QoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RTQ1IyNzkoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBmaW5hbCBDb21tb25Db2RlU3R5bGVTZXR0aW5ncyBzZXR0aW5ncyA9IGdldFNldHRpbmdzKCk7CisgICAgc2V0dGluZ3MuQUxJR05fTVVMVElMSU5FX0JJTkFSWV9PUEVSQVRJT04gPSB0cnVlOworICAgIGRvVGVzdCgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFNDUjM5NSgpIHRocm93cyBFeGNlcHRpb24geworICAgIGZpbmFsIENvbW1vbkNvZGVTdHlsZVNldHRpbmdzIHNldHRpbmdzID0gZ2V0U2V0dGluZ3MoKTsKKyAgICBzZXR0aW5ncy5NRVRIT0RfQlJBQ0VfU1RZTEUgPSBDb21tb25Db2RlU3R5bGVTZXR0aW5ncy5FTkRfT0ZfTElORTsKKyAgICBkb1Rlc3QoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RTQ1IxMTc5OSgpIHRocm93cyBFeGNlcHRpb24geworICAgIGZpbmFsIENvbW1vbkNvZGVTdHlsZVNldHRpbmdzIHNldHRpbmdzID0gZ2V0U2V0dGluZ3MoKTsKKyAgICBzZXR0aW5ncy5nZXRSb290U2V0dGluZ3MoKS5nZXRJbmRlbnRPcHRpb25zKFN0ZEZpbGVUeXBlcy5KQVZBKS5DT05USU5VQVRJT05fSU5ERU5UX1NJWkUgPSA0OworICAgIHNldHRpbmdzLkNMQVNTX0JSQUNFX1NUWUxFID0gQ29tbW9uQ29kZVN0eWxlU2V0dGluZ3MuTkVYVF9MSU5FOworICAgIHNldHRpbmdzLk1FVEhPRF9CUkFDRV9TVFlMRSA9IENvbW1vbkNvZGVTdHlsZVNldHRpbmdzLk5FWFRfTElORTsKKyAgICBkb1Rlc3QoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RTQ1I1MDEoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBmaW5hbCBDb21tb25Db2RlU3R5bGVTZXR0aW5ncyBzZXR0aW5ncyA9IGdldFNldHRpbmdzKCk7CisgICAgc2V0dGluZ3MuS0VFUF9GSVJTVF9DT0xVTU5fQ09NTUVOVCA9IHRydWU7CisgICAgZG9UZXN0KCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0U0NSODc5KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZmluYWwgQ29tbW9uQ29kZVN0eWxlU2V0dGluZ3Mgc2V0dGluZ3MgPSBnZXRTZXR0aW5ncygpOworICAgIHNldHRpbmdzLkJSQUNFX1NUWUxFID0gQ29tbW9uQ29kZVN0eWxlU2V0dGluZ3MuTkVYVF9MSU5FOworICAgIGRvVGVzdCgpOworICB9CisKKyAgCisKKyAgcHVibGljIHZvaWQgdGVzdFNDUjU0NygpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGV4dFRlc3QoImNsYXNzIEZvbyB7IFxuIiArCisgICAgICAgICAgICAgICAiICAgIE9iamVjdFtdIG9ianMgPSB7IFxuIiArCisgICAgICAgICAgICAgICAiICAgICAgICAgICAgbmV3IE9iamVjdCgpIHsgXG4iICsKKyAgICAgICAgICAgICAgICIgICAgICAgIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7IFxuIiArCisgICAgICAgICAgICAgICAiICAgICAgICAgICAgcmV0dXJuIFwieFwiOyBcbiIgKworICAgICAgICAgICAgICAgIiAgICAgICAgfSBcbiIgKworICAgICAgICAgICAgICAgIiAgICB9IFxuIiArCisgICAgICAgICAgICAgICAiICAgIH07IFxuIiArCisifSIsICJjbGFzcyBGb28ge1xuIiArCisgICAgICIgICAgT2JqZWN0W10gb2JqcyA9IHtcbiIgKworICAgICAiICAgICAgICAgICAgbmV3IE9iamVjdCgpIHtcbiIgKworICAgICAiICAgICAgICAgICAgICAgIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7XG4iICsKKyAgICAgIiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwieFwiO1xuIiArCisgICAgICIgICAgICAgICAgICAgICAgfVxuIiArCisgICAgICIgICAgICAgICAgICB9XG4iICsKKyAgICAgIiAgICB9O1xuIiArCisgICAgICJ9Iik7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0U0NSNDc5KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZmluYWwgQ29tbW9uQ29kZVN0eWxlU2V0dGluZ3Mgc2V0dGluZ3MgPSBnZXRTZXR0aW5ncygpOworICAgIHNldHRpbmdzLmdldFJvb3RTZXR0aW5ncygpLlJJR0hUX01BUkdJTiA9IDgwOworICAgIHNldHRpbmdzLlRFUk5BUllfT1BFUkFUSU9OX1dSQVAgPSBDb21tb25Db2RlU3R5bGVTZXR0aW5ncy5XUkFQX0FTX05FRURFRDsKKyAgICBkb1RleHRUZXN0KCJwdWJsaWMgY2xhc3MgRm9vIHtcbiIgKworICAgICAgICAgICAgICAgIiAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7XG4iICsKKyAgICAgICAgICAgICAgICIgICAgICAgIGlmIChuYW1lICE9IG51bGwgPyAgICAgICAgICAgICAgICAhbmFtZS5lcXVhbHModGhhdC5uYW1lKSA6IHRoYXQubmFtZSAhPSAgICAgICAgICAgICAgICBudWxsKVxuIiArCisgICAgICAgICAgICAgICAiICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuIiArCisgICAgICAgICAgICAgICAiICAgIH1cbiIgKworIn0iLCAicHVibGljIGNsYXNzIEZvbyB7XG4iICsKKyAgICAgIiAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7XG4iICsKKyAgICAgIiAgICAgICAgaWYgKG5hbWUgIT0gbnVsbCA/ICFuYW1lLmVxdWFscyh0aGF0Lm5hbWUpIDogdGhhdC5uYW1lICE9IG51bGwpXG4iICsKKyAgICAgIiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiIgKworICAgICAiICAgIH1cbiIgKworICAgICAifSIpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFNDUjE5MCgpIHRocm93cyBFeGNlcHRpb24geworICAgIGZpbmFsIENvbW1vbkNvZGVTdHlsZVNldHRpbmdzIHNldHRpbmdzID0gZ2V0U2V0dGluZ3MoKTsKKyAgICBzZXR0aW5ncy5LRUVQX0xJTkVfQlJFQUtTID0gZmFsc2U7CisgICAgZG9UZXh0VGVzdCgicHVibGljIGNsYXNzIEVudGl0eU9iamVjdCBcbiIgKworICAgICAgICAgICAgICAgInsgXG4iICsKKyAgICAgICAgICAgICAgICIgICAgcHJpdmF0ZSBJbnRlZ2VyIGlkOyBcbiIgKworICAgICAgICAgICAgICAgIlxuIiArCisgICAgICAgICAgICAgICAiICAgIHB1YmxpYyBJbnRlZ2VyIGdldElkKCkgXG4iICsKKyAgICAgICAgICAgICAgICIgICAgeyBcbiIgKworICAgICAgICAgICAgICAgIiAgICAgICAgcmV0dXJuIGlkOyBcbiIgKworICAgICAgICAgICAgICAgIiAgICB9IFxuIiArCisgICAgICAgICAgICAgICAiXG4iICsKKyAgICAgICAgICAgICAgICIgICAgcHVibGljIHZvaWQgc2V0SWQoSW50ZWdlciBpZCkgXG4iICsKKyAgICAgICAgICAgICAgICIgICAgeyBcbiIgKworICAgICAgICAgICAgICAgIiAgICAgICAgdGhpcy5pZCA9IGlkOyBcbiIgKworICAgICAgICAgICAgICAgIiAgICB9IFxuIiArCisifSIsICJwdWJsaWMgY2xhc3MgRW50aXR5T2JqZWN0IHtcbiIgKworICAgICAiICAgIHByaXZhdGUgSW50ZWdlciBpZDtcbiIgKworICAgICAiXG4iICsKKyAgICAgIiAgICBwdWJsaWMgSW50ZWdlciBnZXRJZCgpIHtcbiIgKworICAgICAiICAgICAgICByZXR1cm4gaWQ7XG4iICsKKyAgICAgIiAgICB9XG4iICsKKyAgICAgIlxuIiArCisgICAgICIgICAgcHVibGljIHZvaWQgc2V0SWQoSW50ZWdlciBpZCkge1xuIiArCisgICAgICIgICAgICAgIHRoaXMuaWQgPSBpZDtcbiIgKworICAgICAiICAgIH1cbiIgKworICAgICAifSIpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFNDUjE1MzUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBmaW5hbCBDb21tb25Db2RlU3R5bGVTZXR0aW5ncyBzZXR0aW5ncyA9IGdldFNldHRpbmdzKCk7CisgICAgc2V0dGluZ3MuQlJBQ0VfU1RZTEUgPSBDb21tb25Db2RlU3R5bGVTZXR0aW5ncy5ORVhUX0xJTkU7CisgICAgc2V0dGluZ3MuQ0xBU1NfQlJBQ0VfU1RZTEUgPSBDb21tb25Db2RlU3R5bGVTZXR0aW5ncy5ORVhUX0xJTkU7CisgICAgc2V0dGluZ3MuTUVUSE9EX0JSQUNFX1NUWUxFID0gQ29tbW9uQ29kZVN0eWxlU2V0dGluZ3MuTkVYVF9MSU5FOworICAgIGRvVGV4dFRlc3QoInB1YmxpYyBjbGFzcyBGb28ge1xuIiArCisgICAgICAgICAgICAgICAiICAgIHB1YmxpYyBpbnQgZm9vKCkge1xuIiArCisgICAgICAgICAgICAgICAiICAgICAgICBpZiAoYSkge1xuIiArCisgICAgICAgICAgICAgICAiICAgICAgICAgICAgcmV0dXJuO1xuIiArCisgICAgICAgICAgICAgICAiICAgICAgICB9XG4iICsKKyAgICAgICAgICAgICAgICIgICAgfVxuIiArCisifSIsICJwdWJsaWMgY2xhc3MgRm9vXG4iICsKKyAgICAgIntcbiIgKworICAgICAiICAgIHB1YmxpYyBpbnQgZm9vKClcbiIgKworICAgICAiICAgIHtcbiIgKworICAgICAiICAgICAgICBpZiAoYSlcbiIgKworICAgICAiICAgICAgICB7XG4iICsKKyAgICAgIiAgICAgICAgICAgIHJldHVybjtcbiIgKworICAgICAiICAgICAgICB9XG4iICsKKyAgICAgIiAgICB9XG4iICsKKyAgICAgIn0iKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RTQ1I5NzAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBmaW5hbCBDb21tb25Db2RlU3R5bGVTZXR0aW5ncyBzZXR0aW5ncyA9IGdldFNldHRpbmdzKCk7CisgICAgc2V0dGluZ3MuVEhST1dTX0tFWVdPUkRfV1JBUCA9IENvbW1vbkNvZGVTdHlsZVNldHRpbmdzLldSQVBfQUxXQVlTOworICAgIHNldHRpbmdzLlRIUk9XU19MSVNUX1dSQVAgPSBDb21tb25Db2RlU3R5bGVTZXR0aW5ncy5XUkFQX0FTX05FRURFRDsKKyAgICBzZXR0aW5ncy5NRVRIT0RfUEFSQU1FVEVSU19XUkFQID0gQ29tbW9uQ29kZVN0eWxlU2V0dGluZ3MuV1JBUF9BU19ORUVERUQ7CisgICAgZG9UZXN0KCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0U0NSMTQ4NigpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGV4dFRlc3QoInB1YmxpYyBjbGFzcyBUZXN0IHtcbiIgKyAiICBwcml2YXRlIEJpZ0RlY2ltYWxcbiIgKyAifSIsICJwdWJsaWMgY2xhc3MgVGVzdCB7XG4iICsgIiAgICBwcml2YXRlIEJpZ0RlY2ltYWxcbiIgKyAifSIpOworCisgICAgZG9UZXh0VGVzdCgicHVibGljIGNsYXNzIFRlc3Qge1xuIiArICIgIEBOb3ROdWxsIHByaXZhdGUgQmlnRGVjaW1hbFxuIiArICJ9IiwKKyAgICAgICAgICAgICAgICJwdWJsaWMgY2xhc3MgVGVzdCB7XG4iICsgIiAgICBATm90TnVsbFxuIiArICIgICAgcHJpdmF0ZSBCaWdEZWNpbWFsXG4iICsgIn0iKTsKKworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdDE2MDcoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBnZXRTZXR0aW5ncygpLmdldFJvb3RTZXR0aW5ncygpLlJJR0hUX01BUkdJTiA9IDMwOworICAgIGdldFNldHRpbmdzKCkuTUVUSE9EX0JSQUNFX1NUWUxFID0gQ29tbW9uQ29kZVN0eWxlU2V0dGluZ3MuTkVYVF9MSU5FOworICAgIGdldFNldHRpbmdzKCkuS0VFUF9TSU1QTEVfTUVUSE9EU19JTl9PTkVfTElORSA9IHRydWU7CisgICAgZ2V0U2V0dGluZ3MoKS5BTElHTl9NVUxUSUxJTkVfUEFSQU1FVEVSUyA9IHRydWU7CisgICAgZ2V0U2V0dGluZ3MoKS5NRVRIT0RfUEFSQU1FVEVSU19XUkFQID0gQ29tbW9uQ29kZVN0eWxlU2V0dGluZ3MuV1JBUF9BU19ORUVERUQ7CisgICAgZG9UZXh0VGVzdCgiY2xhc3MgVEVzdCB7XG4iICsgInZvaWQgZm9vKEEgYSxCIGIpeyAvKiBjb21waWxlZCBjb2RlICovIH1cbiIgKyAifSIsCisgICAgICAgICAgICAgICAiY2xhc3MgVEVzdCB7XG4iICsgIiAgICB2b2lkIGZvbyhBIGEsIEIgYilcbiIgKyAiICAgIHsgLyogY29tcGlsZWQgY29kZSAqLyB9XG4iICsgIn0iKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RTQ1IxNjE1KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZ2V0U2V0dGluZ3MoKS5DTEFTU19CUkFDRV9TVFlMRSA9IENvbW1vbkNvZGVTdHlsZVNldHRpbmdzLk5FWFRfTElORV9TSElGVEVEOworICAgIGdldFNldHRpbmdzKCkuTUVUSE9EX0JSQUNFX1NUWUxFID0gQ29tbW9uQ29kZVN0eWxlU2V0dGluZ3MuTkVYVF9MSU5FX1NISUZURUQ7CisgICAgZ2V0U2V0dGluZ3MoKS5CUkFDRV9TVFlMRSA9IENvbW1vbkNvZGVTdHlsZVNldHRpbmdzLk5FWFRfTElORV9TSElGVEVEOworCisgICAgZG9UZXh0VGVzdCgKKyAgICAgICJwdWJsaWMgY2xhc3MgWlpaWiBcbiIgKworICAgICAgIiAgIHsgXG4iICsKKyAgICAgICIgICBwdWJsaWMgWlpaWigpIFxuIiArCisgICAgICAiICAgICAgeyBcbiIgKworICAgICAgIiAgICAgIGlmIChhKXtcbiIgKworICAgICAgImZvbygpO31cbiIgKworICAgICAgIiAgICAgIH0gXG4iICsKKyAgICAgICIgICB9IiwKKyAgICAgICJwdWJsaWMgY2xhc3MgWlpaWlxuIiArCisgICAgICAiICAgIHtcbiIgKworICAgICAgIiAgICBwdWJsaWMgWlpaWigpXG4iICsKKyAgICAgICIgICAgICAgIHtcbiIgKworICAgICAgIiAgICAgICAgaWYgKGEpXG4iICsKKyAgICAgICIgICAgICAgICAgICB7XG4iICsKKyAgICAgICIgICAgICAgICAgICBmb28oKTtcbiIgKworICAgICAgIiAgICAgICAgICAgIH1cbiIgKworICAgICAgIiAgICAgICAgfVxuIiArCisgICAgICAiICAgIH0iKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RTQ1IxMDQ3KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXh0VGVzdCgiY2xhc3MgRm9ve1xuIiArICIgICAgdm9pZCBmb28oKXtcbiIgKyAiICAgICAgICBTdHJpbmcgZmllbGQxLCBmaWVsZDI7XG4iICsgIiAgICB9XG4iICsgIn0iLAorICAgICAgICAgICAgICAgImNsYXNzIEZvbyB7XG4iICsgIiAgICB2b2lkIGZvbygpIHtcbiIgKyAiICAgICAgICBTdHJpbmcgZmllbGQxLCBmaWVsZDI7XG4iICsgIiAgICB9XG4iICsgIn0iKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RTQ1I1MjQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBnZXRTZXR0aW5ncygpLk1FVEhPRF9CUkFDRV9TVFlMRSA9IENvbW1vbkNvZGVTdHlsZVNldHRpbmdzLk5FWFRfTElORV9TSElGVEVEOworICAgIGdldFNldHRpbmdzKCkuS0VFUF9TSU1QTEVfTUVUSE9EU19JTl9PTkVfTElORSA9IHRydWU7CisgICAgZ2V0U2V0dGluZ3MoKS5LRUVQX1NJTVBMRV9CTE9DS1NfSU5fT05FX0xJTkUgPSBmYWxzZTsKKyAgICBkb1RleHRUZXN0KCJjbGFzcyBGb28ge1xuIiArICIgICAgdm9pZCBmb28oKSB7IHJldHVybjt9IiArICJ9IiwgImNsYXNzIEZvbyB7XG4iICsgIiAgICB2b2lkIGZvbygpIHsgcmV0dXJuO31cbiIgKyAifSIpOworCisgICAgZ2V0U2V0dGluZ3MoKS5CUkFDRV9TVFlMRSA9IENvbW1vbkNvZGVTdHlsZVNldHRpbmdzLk5FWFRfTElORV9TSElGVEVEMjsKKyAgICBnZXRTZXR0aW5ncygpLktFRVBfU0lNUExFX01FVEhPRFNfSU5fT05FX0xJTkUgPSBmYWxzZTsKKyAgICBnZXRTZXR0aW5ncygpLktFRVBfU0lNUExFX0JMT0NLU19JTl9PTkVfTElORSA9IHRydWU7CisgICAgZ2V0U2V0dGluZ3MoKS5NRVRIT0RfQlJBQ0VfU1RZTEUgPSBDb21tb25Db2RlU3R5bGVTZXR0aW5ncy5FTkRfT0ZfTElORTsKKworICAgIGRvVGV4dFRlc3QoImNsYXNzIEZvb3tcbiIgKworICAgICAgICAgICAgICAgInZvaWQgZm9vKCkge1xuIiArCisgICAgICAgICAgICAgICAiaWYoYSkge3JldHVybjt9XG4iICsKKyAgICAgICAgICAgICAgICJmb3IoYSA9IDA7IGEgPCAxMDsgYSsrKSB7cmV0dXJuO31cbiIgKworICAgICAgICAgICAgICAgInN3aXRjaChhKSB7Y2FzZSAxOiByZXR1cm47fVxuIiArCisgICAgICAgICAgICAgICAiZG97cmV0dXJuO30gd2hpbGUgKGEpO1xuIiArCisgICAgICAgICAgICAgICAid2hpbGUoYSl7cmV0dXJuO31cbiIgKworICAgICAgICAgICAgICAgInRyeXtyZXR1cm47fSBjYXRjaChFeCBlKXtyZXR1cm47fSBmaW5hbGx5e3JldHVybjt9XG4iICsKKyAgICAgICAgICAgICAgICJ9XG4iICsKKyJ9IiwgImNsYXNzIEZvbyB7XG4iICsKKyAgICAgIiAgICB2b2lkIGZvbygpIHtcbiIgKworICAgICAiICAgICAgICBpZiAoYSkge3JldHVybjt9XG4iICsKKyAgICAgIiAgICAgICAgZm9yIChhID0gMDsgYSA8IDEwOyBhKyspIHtyZXR1cm47fVxuIiArCisgICAgICIgICAgICAgIHN3aXRjaCAoYSlcbiIgKworICAgICAiICAgICAgICAgICAge1xuIiArCisgICAgICIgICAgICAgICAgICAgICAgY2FzZSAxOlxuIiArCisgICAgICIgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiIgKworICAgICAiICAgICAgICAgICAgfVxuIiArCisgICAgICIgICAgICAgIGRvIHtyZXR1cm47fSB3aGlsZSAoYSk7XG4iICsKKyAgICAgIiAgICAgICAgd2hpbGUgKGEpIHtyZXR1cm47fVxuIiArCisgICAgICIgICAgICAgIHRyeSB7cmV0dXJuO30gY2F0Y2ggKEV4IGUpIHtyZXR1cm47fSBmaW5hbGx5IHtyZXR1cm47fVxuIiArCisgICAgICIgICAgfVxuIiArCisgICAgICJ9Iik7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0U0NSMzA2MigpIHRocm93cyBFeGNlcHRpb24geworICAgIGdldFNldHRpbmdzKCkuS0VFUF9MSU5FX0JSRUFLUyA9IGZhbHNlOworICAgIGdldFNldHRpbmdzKCkuTUVUSE9EX0NBTExfQ0hBSU5fV1JBUCA9IENvbW1vbkNvZGVTdHlsZVNldHRpbmdzLldSQVBfQVNfTkVFREVEOworICAgIGdldFNldHRpbmdzKCkuQ0FMTF9QQVJBTUVURVJTX1dSQVAgPSBDb21tb25Db2RlU3R5bGVTZXR0aW5ncy5XUkFQX0FTX05FRURFRDsKKyAgICBnZXRTZXR0aW5ncygpLkFMSUdOX01VTFRJTElORV9QQVJBTUVURVJTX0lOX0NBTExTID0gdHJ1ZTsKKyAgICBnZXRTZXR0aW5ncygpLmdldFJvb3RTZXR0aW5ncygpLlJJR0hUX01BUkdJTiA9IDgwOworCisgICAgZ2V0U2V0dGluZ3MoKS5QUkVGRVJfUEFSQU1FVEVSU19XUkFQID0gdHJ1ZTsKKworICAgIGRvVGV4dFRlc3QoCisgICAgICJwdWJsaWMgY2xhc3MgRm9vIHsgXG4iICsKKyAgICAgIiAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbigpIHsgXG4iICsKKyAgICAgIiAgICAgICAgZm9vLmZvb2JlbGl6ZSgpLmZvb2JlbGl6ZSgpLmZvb2JlbGl6ZSgpLmJhcihcIlRoZSBxdWljayBicm93blwiLCBcbiIgKworICAgICAiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZm94IGp1bXBlZCBvdmVyXCIsIFxuIiArCisgICAgICIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJ0aGUgbGF6eVwiLCBcImRvZ1wiKTsgXG4iICsKKyAgICAgIiAgICB9IFxuIiArCisgICAgIn0iLAorICAgICAicHVibGljIGNsYXNzIEZvbyB7XG4iICsKKyAgICAgIiAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbigpIHtcbiIgKworICAgICAiICAgICAgICBmb28uZm9vYmVsaXplKCkuZm9vYmVsaXplKCkuZm9vYmVsaXplKCkuYmFyKFwiVGhlIHF1aWNrIGJyb3duXCIsXG4iICsKKyAgICAgIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImZveCBqdW1wZWQgb3ZlclwiLFxuIiArCisgICAgICIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJ0aGUgbGF6eVwiLCBcImRvZ1wiKTtcbiIgKworICAgICAiICAgIH1cbiIgKworICAgICAifSIpOworCisgICAgZ2V0U2V0dGluZ3MoKS5QUkVGRVJfUEFSQU1FVEVSU19XUkFQID0gZmFsc2U7CisKKyAgICBkb1RleHRUZXN0KAorICAgICAgInB1YmxpYyBjbGFzcyBGb28geyBcbiIgKworICAgICAgIiAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbigpIHsgXG4iICsKKyAgICAgICIgICAgICAgIGZvby5mb29iZWxpemUoKS5mb29iZWxpemUoKS5mb29iZWxpemUoKS5iYXIoXCJUaGUgcXVpY2sgYnJvd25cIiwgXG4iICsKKyAgICAgICIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJmb3gganVtcGVkIG92ZXJcIiwgXG4iICsKKyAgICAgICIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJ0aGUgbGF6eVwiLCBcImRvZ1wiKTsgXG4iICsKKyAgICAgICIgICAgfSBcbiIgKworICAgICAgIn0iLAorICAgICAgInB1YmxpYyBjbGFzcyBGb28ge1xuIiArCisgICAgICAiICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKCkge1xuIiArCisgICAgICAiICAgICAgICBmb28uZm9vYmVsaXplKCkuZm9vYmVsaXplKCkuZm9vYmVsaXplKClcbiIgKworICAgICAgIiAgICAgICAgICAgICAgICAuYmFyKFwiVGhlIHF1aWNrIGJyb3duXCIsIFwiZm94IGp1bXBlZCBvdmVyXCIsIFwidGhlIGxhenlcIiwgXCJkb2dcIik7XG4iICsKKyAgICAgICIgICAgfVxuIiArCisgICAgICAifSIpOworCisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0U0NSMTY1OCgpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGV4dFRlc3QoIi8qKiBcbiIgKyAiICogQGF1dGhvclx0TWlrZVxuIiArICIgKi9cbiIgKyAicHVibGljIGNsYXNzIEZvbyB7XG4iICsgIn0iLAorICAgICAgICAgICAgICAgIi8qKlxuIiArICIgKiBAYXV0aG9yIE1pa2VcbiIgKyAiICovXG4iICsgInB1YmxpYyBjbGFzcyBGb28ge1xuIiArICJ9Iik7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0U0NSMTY5OSgpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGV4dFRlc3QoImNsYXNzIFRlc3Qge1xuIiArICIgICAgVGVzdChTdHJpbmcgdDEgLCBTdHJpbmcgdDIpIHtcbiIgKyAiICAgIH1cbiIgKyAifSIsCisgICAgICAgICAgICAgICAiY2xhc3MgVGVzdCB7XG4iICsgIiAgICBUZXN0KFN0cmluZyB0MSwgU3RyaW5nIHQyKSB7XG4iICsgIiAgICB9XG4iICsgIn0iKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RTQ1IxNzAwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXh0VGVzdCgiY2xhc3MgVGVzdCB7XG4iICsgIiAgICBUZXN0KFN0cmluZyAgICAgIHQxICwgU3RyaW5nICAgICAgdDIpIHtcbiIgKyAiICAgIH1cbiIgKyAifSIsCisgICAgICAgICAgICAgICAiY2xhc3MgVGVzdCB7XG4iICsgIiAgICBUZXN0KFN0cmluZyB0MSwgU3RyaW5nIHQyKSB7XG4iICsgIiAgICB9XG4iICsgIn0iKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RTQ1IxNzAxKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZ2V0U2V0dGluZ3MoKS5TUEFDRV9XSVRISU5fTUVUSE9EX0NBTExfUEFSRU5USEVTRVMgPSB0cnVlOworICAgIGdldFNldHRpbmdzKCkuU1BBQ0VfV0lUSElOX01FVEhPRF9QQVJFTlRIRVNFUyA9IGZhbHNlOworICAgIGdldFNldHRpbmdzKCkuQ0FMTF9QQVJBTUVURVJTX1dSQVAgPSBDb21tb25Db2RlU3R5bGVTZXR0aW5ncy5ET19OT1RfV1JBUDsKKyAgICBnZXRTZXR0aW5ncygpLkNBTExfUEFSQU1FVEVSU19MUEFSRU5fT05fTkVYVF9MSU5FID0gdHJ1ZTsKKyAgICBnZXRTZXR0aW5ncygpLkNBTExfUEFSQU1FVEVSU19SUEFSRU5fT05fTkVYVF9MSU5FID0gdHJ1ZTsKKyAgICBkb1RleHRUZXN0KCJjbGFzcyBGb28ge1xuIiArICIgICAgdm9pZCBmb28oKSB7XG4iICsgIiAgICAgICAgZm9vKGEsYik7IiArICIgICAgfVxuIiArICJ9IiwKKyAgICAgICAgICAgICAgICJjbGFzcyBGb28ge1xuIiArICIgICAgdm9pZCBmb28oKSB7XG4iICsgIiAgICAgICAgZm9vKCBhLCBiICk7XG4iICsgIiAgICB9XG4iICsgIn0iKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RTQ1IxNzAzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZ2V0U2V0dGluZ3MoKS5CUkFDRV9TVFlMRSA9IENvbW1vbkNvZGVTdHlsZVNldHRpbmdzLk5FWFRfTElORTsKKyAgICBkb1RleHRUZXN0KCJjbGFzcyBGb297XG4iICsKKyAgICAgICAgICAgICAgICIgICAgdm9pZCBmb28oKSB7XG4iICsKKyAgICAgICAgICAgICAgICIgICAgICAgIGZvciAoT2JqZWN0IG8gOiBsb2NhbGl6YXRpb25zKSB7XG4iICsKKyAgICAgICAgICAgICAgICIgICAgICAgICAgICAvL2RvIHNvbWV0aGluZyBcbiIgKworICAgICAgICAgICAgICAgIiAgICAgICAgfVxuIiArCisgICAgICAgICAgICAgICAiICAgIH1cbiIgKworIn0iLCAiY2xhc3MgRm9vIHtcbiIgKworICAgICAiICAgIHZvaWQgZm9vKCkge1xuIiArCisgICAgICIgICAgICAgIGZvciAoT2JqZWN0IG8gOiBsb2NhbGl6YXRpb25zKVxuIiArCisgICAgICIgICAgICAgIHtcbiIgKworICAgICAiICAgICAgICAgICAgLy9kbyBzb21ldGhpbmcgXG4iICsKKyAgICAgIiAgICAgICAgfVxuIiArCisgICAgICIgICAgfVxuIiArCisgICAgICJ9Iik7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0U0NSMTgwNCgpIHRocm93cyBFeGNlcHRpb24geworICAgIGdldFNldHRpbmdzKCkuQUxJR05fTVVMVElMSU5FX0FTU0lHTk1FTlQgPSB0cnVlOworICAgIGRvVGV4dFRlc3QoCisgICAgICAiY2xhc3MgRm9vIHtcbiIgKyAiICAgIHZvaWQgZm9vKCkge1xuIiArICIgICAgICAgIGludCBpO1xuIiArICIgICAgICAgIGkgPSBcbiIgKyAiICAgICAgICAgICAgICAgIDEgKyAyO1xuIiArICIgICAgfVxuIiArICJ9IiwKKyAgICAgICJjbGFzcyBGb28ge1xuIiArICIgICAgdm9pZCBmb28oKSB7XG4iICsgIiAgICAgICAgaW50IGk7XG4iICsgIiAgICAgICAgaSA9XG4iICsgIiAgICAgICAgICAgICAgICAxICsgMjtcbiIgKyAiICAgIH1cbiIgKyAifSIpOworCisgICAgZG9UZXh0VGVzdCgiY2xhc3MgRm9vIHtcbiIgKyAiICAgIHZvaWQgZm9vKCkge1xuIiArICIgICAgICAgIGkgPSBqID1cbiIgKyAiICAgICAgICBrID0gbCA9IDEgKyAyO1xuIiArICIgICAgfVxuIiArICJ9IiwKKyAgICAgICAgICAgICAgICJjbGFzcyBGb28ge1xuIiArICIgICAgdm9pZCBmb28oKSB7XG4iICsgIiAgICAgICAgaSA9IGogPVxuIiArICIgICAgICAgIGsgPSBsID0gMSArIDI7XG4iICsgIiAgICB9XG4iICsgIn0iKTsKKworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFNDUjE3OTUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBnZXRTZXR0aW5ncygpLkJSQUNFX1NUWUxFID0gQ29tbW9uQ29kZVN0eWxlU2V0dGluZ3MuTkVYVF9MSU5FX0lGX1dSQVBQRUQ7CisgICAgZG9UZXh0VGVzdCgicHVibGljIGNsYXNzIFRlc3Qge1xuIiArCisgICAgICAgICAgICAgICAiICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHtcbiIgKworICAgICAgICAgICAgICAgIiAgICAgICAgZG8ge1xuIiArCisgICAgICAgICAgICAgICAiICAgICAgICAgICAgLy8gLi4uXG4iICsKKyAgICAgICAgICAgICAgICIgICAgICAgIH0gd2hpbGUgKHRydWUpO1xuIiArCisgICAgICAgICAgICAgICAiICAgIH1cbiIgKworIn0iLCAicHVibGljIGNsYXNzIFRlc3Qge1xuIiArCisgICAgICIgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykge1xuIiArCisgICAgICIgICAgICAgIGRvIHtcbiIgKworICAgICAiICAgICAgICAgICAgLy8gLi4uXG4iICsKKyAgICAgIiAgICAgICAgfSB3aGlsZSAodHJ1ZSk7XG4iICsKKyAgICAgIiAgICB9XG4iICsKKyAgICAgIn0iKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RTQ1IxOTM2KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZ2V0U2V0dGluZ3MoKS5CTEFOS19MSU5FU19BRlRFUl9DTEFTU19IRUFERVIgPSA0OworICAgIGRvVGV4dFRlc3QoIi8qKlxuIiArICIgKiBGb28gLSB0ZXN0IGNsYXNzXG4iICsgIiAqL1xuIiArICJjbGFzcyBGb297XG4iICsgIn0iLAorICAgICAgICAgICAgICAgIi8qKlxuIiArICIgKiBGb28gLSB0ZXN0IGNsYXNzXG4iICsgIiAqL1xuIiArICJjbGFzcyBGb28ge1xuIiArICJcbiIgKyAiXG4iICsgIlxuIiArICJcbiIgKyAifSIpOworCisgICAgZG9UZXh0VGVzdCgiLyoqXG4iICsgIiAqIEZvbyAtIHRlc3QgY2xhc3NcbiIgKyAiICovXG4iICsgImNsYXNzIEZvb3tcbiIgKyAiICAgIGludCBteUZvbztcbiIgKyAifSIsCisgICAgICAgICAgICAgICAiLyoqXG4iICsgIiAqIEZvbyAtIHRlc3QgY2xhc3NcbiIgKyAiICovXG4iICsgImNsYXNzIEZvbyB7XG4iICsgIlxuIiArICJcbiIgKyAiXG4iICsgIlxuIiArICIgICAgaW50IG15Rm9vO1xuIiArICJ9Iik7CisKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3QxOTgwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZ2V0U2V0dGluZ3MoKS5nZXRSb290U2V0dGluZ3MoKS5SSUdIVF9NQVJHSU4gPSAxNDQ7CisgICAgZ2V0U2V0dGluZ3MoKS5URVJOQVJZX09QRVJBVElPTl9XUkFQID0gQ29tbW9uQ29kZVN0eWxlU2V0dGluZ3MuV1JBUF9PTl9FVkVSWV9JVEVNOworICAgIGdldFNldHRpbmdzKCkuTUVUSE9EX0NBTExfQ0hBSU5fV1JBUCA9IENvbW1vbkNvZGVTdHlsZVNldHRpbmdzLldSQVBfQVNfTkVFREVEOworICAgIGdldFNldHRpbmdzKCkuQUxJR05fTVVMVElMSU5FX1RFUk5BUllfT1BFUkFUSU9OID0gdHJ1ZTsKKyAgICBnZXRTZXR0aW5ncygpLlRFUk5BUllfT1BFUkFUSU9OX1NJR05TX09OX05FWFRfTElORSA9IHRydWU7CisgICAgZG9UZXh0VGVzdCgiY2xhc3MgRm9ve1xuIiArCisgICAgICAgICAgICAgICAiICAgIHZvaWQgZm9vKCkge1xuIiArCisgICAgICAgICAgICAgICAiZmluYWwgVmlydHVhbEZpbGUgbW9kdWxlUm9vdCA9IG1vZHVsZVJlbGF0aXZlUGF0aC5lcXVhbHMoXCJcIikgPyBwcm9qZWN0Um9vdERpckFmdGVyIDogcHJvamVjdFJvb3REaXJBZnRlci5maW5kRmlsZUJ5UmVsYXRpdmVQYXRoKG1vZHVsZVJlbGF0aXZlUGF0aCk7XG4iICsKKyAgICAgICAgICAgICAgICIgICAgfVxuIiArCisifSIsICJjbGFzcyBGb28ge1xuIiArCisgICAgICIgICAgdm9pZCBmb28oKSB7XG4iICsKKyAgICAgIiAgICAgICAgZmluYWwgVmlydHVhbEZpbGUgbW9kdWxlUm9vdCA9IG1vZHVsZVJlbGF0aXZlUGF0aC5lcXVhbHMoXCJcIilcbiIgKworICAgICAiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBwcm9qZWN0Um9vdERpckFmdGVyXG4iICsKKyAgICAgIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogcHJvamVjdFJvb3REaXJBZnRlci5maW5kRmlsZUJ5UmVsYXRpdmVQYXRoKG1vZHVsZVJlbGF0aXZlUGF0aCk7XG4iICsKKyAgICAgIiAgICB9XG4iICsKKyAgICAgIn0iKTsKKyAgfQorCisgICAgcHVibGljIHZvaWQgdGVzdFNDUjIwODkoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1RleHRUZXN0KCJjbGFzcyBUZXN0IHsgXG4iICsKKyAgICAgICAgICAgICAgICIgICAgdm9pZCB0ZXN0KGludCBpKSB7IFxuIiArCisgICAgICAgICAgICAgICAiICAgICAgICBzd2l0Y2ggKGkpIHsgXG4iICsKKyAgICAgICAgICAgICAgICIgICAgICAgICAgICBjYXNlIDE6IHsgXG4iICsKKyAgICAgICAgICAgICAgICIgICAgICAgICAgICAgICAgaW50IHggPSAwOyBcbiIgKworICAgICAgICAgICAgICAgIiAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oeCk7IFxuIiArCisgICAgICAgICAgICAgICAiICAgICAgICAgICAgfSBcbiIgKworICAgICAgICAgICAgICAgIiAgICAgICAgICAgICAgICBicmVhazsgXG4iICsKKyAgICAgICAgICAgICAgICIgICAgICAgICAgICBjYXNlIDI6IHsgXG4iICsKKyAgICAgICAgICAgICAgICIgICAgICAgICAgICAgICAgaW50IHkgPSAwOyBcbiIgKworICAgICAgICAgICAgICAgIiAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oeSk7IFxuIiArCisgICAgICAgICAgICAgICAiICAgICAgICAgICAgfSBcbiIgKworICAgICAgICAgICAgICAgIiAgICAgICAgICAgICAgICBicmVhazsgXG4iICsKKyAgICAgICAgICAgICAgICIgICAgICAgIH0gXG4iICsKKyAgICAgICAgICAgICAgICIgICAgfSBcbiIgKworIn0iLCAiY2xhc3MgVGVzdCB7XG4iICsKKyAgICAgIiAgICB2b2lkIHRlc3QoaW50IGkpIHtcbiIgKworICAgICAiICAgICAgICBzd2l0Y2ggKGkpIHtcbiIgKworICAgICAiICAgICAgICAgICAgY2FzZSAxOiB7XG4iICsKKyAgICAgIiAgICAgICAgICAgICAgICBpbnQgeCA9IDA7XG4iICsKKyAgICAgIiAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oeCk7XG4iICsKKyAgICAgIiAgICAgICAgICAgIH1cbiIgKworICAgICAiICAgICAgICAgICAgYnJlYWs7XG4iICsKKyAgICAgIiAgICAgICAgICAgIGNhc2UgMjoge1xuIiArCisgICAgICIgICAgICAgICAgICAgICAgaW50IHkgPSAwO1xuIiArCisgICAgICIgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKHkpO1xuIiArCisgICAgICIgICAgICAgICAgICB9XG4iICsKKyAgICAgIiAgICAgICAgICAgIGJyZWFrO1xuIiArCisgICAgICIgICAgICAgIH1cbiIgKworICAgICAiICAgIH1cbiIgKworICAgICAifSIpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFNDUjIxMzIoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBnZXRTZXR0aW5ncygpLkJSQUNFX1NUWUxFID0gQ29tbW9uQ29kZVN0eWxlU2V0dGluZ3MuTkVYVF9MSU5FX0lGX1dSQVBQRUQ7CisgICAgZ2V0U2V0dGluZ3MoKS5FTFNFX09OX05FV19MSU5FID0gdHJ1ZTsKKworICAgIGRvVGV4dFRlc3QoImNsYXNzIEZvbyB7XG4iICsKKyAgICAgICAgICAgICAgICIgICAgdm9pZCBmb28oKSB7XG4iICsKKyAgICAgICAgICAgICAgICIgICAgICAgIGlmICghcmlnaHRQYW5lbC5pc0FuY2VzdG9yT2YodmFsaWRhdGlvblBhbmVsKSkgXG4iICsKKyAgICAgICAgICAgICAgICIgICAgICAgICAgICAgICAge1xuIiArCisgICAgICAgICAgICAgICAiICAgICAgICAgICAgICAgICAgICBzcGxpdFBhbmUuc2V0RGl2aWRlckxvY2F0aW9uKDEuMCk7XG4iICsKKyAgICAgICAgICAgICAgICIgICAgICAgICAgICAgICAgfVxuIiArCisgICAgICAgICAgICAgICAiICAgICAgICAgICAgICAgIGVsc2VcbiIgKworICAgICAgICAgICAgICAgIiAgICAgICAgICAgICAgICB7XG4iICsKKyAgICAgICAgICAgICAgICIgICAgICAgICAgICAgICAgICAgIHNwbGl0UGFuZS5zZXREaXZpZGVyTG9jYXRpb24oMC43KTtcbiIgKworICAgICAgICAgICAgICAgIiAgICAgICAgICAgICAgICB9IiArCisgICAgICAgICAgICAgICAiICAgIH1cbiIgKworIn0iLCAiY2xhc3MgRm9vIHtcbiIgKworICAgICAiICAgIHZvaWQgZm9vKCkge1xuIiArCisgICAgICIgICAgICAgIGlmICghcmlnaHRQYW5lbC5pc0FuY2VzdG9yT2YodmFsaWRhdGlvblBhbmVsKSkge1xuIiArCisgICAgICIgICAgICAgICAgICBzcGxpdFBhbmUuc2V0RGl2aWRlckxvY2F0aW9uKDEuMCk7XG4iICsKKyAgICAgIiAgICAgICAgfVxuIiArCisgICAgICIgICAgICAgIGVsc2Uge1xuIiArCisgICAgICIgICAgICAgICAgICBzcGxpdFBhbmUuc2V0RGl2aWRlckxvY2F0aW9uKDAuNyk7XG4iICsKKyAgICAgIiAgICAgICAgfVxuIiArCisgICAgICIgICAgfVxuIiArCisgICAgICJ9Iik7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0SURFQURFVjEwNDcoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1RleHRUZXN0KCJjbGFzcyBGb297XG4iICsgIlN0cmluZyBmaWVsZDFcbiIgKyAiLFxuIiArICJmaWVsZDJcbiIgKyAiOyIgKyAifSIsCisgICAgICAgICAgICAgICAiY2xhc3MgRm9vIHtcbiIgKyAiICAgIFN0cmluZyBmaWVsZDEsXG4iICsgIiAgICAgICAgICAgIGZpZWxkMjtcbiIgKyAifSIpOworCisgICAgZG9UZXh0VGVzdCgiY2xhc3MgRm9ve1xuIiArICJ2b2lkIGZvbygpIHtcbiIgKyAiICAgIFN0cmluZyB2YXIxXG4iICsgIixcbiIgKyAidmFyMlxuIiArICI7XG4iICsgIiAgICB9XG4iICsgIn0iLAorICAgICAgICAgICAgICAgImNsYXNzIEZvbyB7XG4iICsgIiAgICB2b2lkIGZvbygpIHtcbiIgKyAiICAgICAgICBTdHJpbmcgdmFyMSxcbiIgKyAiICAgICAgICAgICAgICAgIHZhcjI7XG4iICsgIiAgICB9XG4iICsgIn0iKTsKKworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdElERUFERVYxMDQ3XzIoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1RleHRUZXN0KAorICAgICAgImNsYXNzIEZvb3tcbiIgKworICAgICAgIlN0cmluZyBmaWVsZDFcbiIgKworICAgICAgIixcbiIgKworICAgICAgImZpZWxkMlxuIiArCisgICAgICAiOyBTdHJpbmcgZmllbGQzO30iLAorICAgICAgImNsYXNzIEZvbyB7XG4iICsKKyAgICAgICIgICAgU3RyaW5nIGZpZWxkMSxcbiIgKworICAgICAgIiAgICAgICAgICAgIGZpZWxkMjtcbiIgKworICAgICAgIiAgICBTdHJpbmcgZmllbGQzO1xuIiArCisgICAgICAifSIKKyAgICApOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFNDUjIyNDEoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBnZXRTZXR0aW5ncygpLkJSQUNFX1NUWUxFID0gQ29tbW9uQ29kZVN0eWxlU2V0dGluZ3MuTkVYVF9MSU5FX1NISUZURUQ7CisgICAgZ2V0U2V0dGluZ3MoKS5TUEVDSUFMX0VMU0VfSUZfVFJFQVRNRU5UID0gdHJ1ZTsKKyAgICBnZXRTZXR0aW5ncygpLkVMU0VfT05fTkVXX0xJTkUgPSB0cnVlOworICAgIGRvVGV4dFRlc3QoImNsYXNzIEZvbyB7XG4iICsKKyAgICAgICAgICAgICAgICIgICAgdm9pZCBmb28oKSB7XG4iICsKKyAgICAgICAgICAgICAgICIgICAgICAgIGlmIChhKVxuIiArCisgICAgICAgICAgICAgICAiICAgICAgICB7XG4iICsKKyAgICAgICAgICAgICAgICIgICAgICAgIH1cbiIgKworICAgICAgICAgICAgICAgIiAgICAgICAgZWxzZVxuIiArCisgICAgICAgICAgICAgICAiICAgICAgICB7XG4iICsKKyAgICAgICAgICAgICAgICIgICAgICAgIH1cbiIgKworICAgICAgICAgICAgICAgIiAgICB9XG4iICsKKyJ9IiwgImNsYXNzIEZvbyB7XG4iICsKKyAgICAgIiAgICB2b2lkIGZvbygpIHtcbiIgKworICAgICAiICAgICAgICBpZiAoYSlcbiIgKworICAgICAiICAgICAgICAgICAge1xuIiArCisgICAgICIgICAgICAgICAgICB9XG4iICsKKyAgICAgIiAgICAgICAgZWxzZVxuIiArCisgICAgICIgICAgICAgICAgICB7XG4iICsKKyAgICAgIiAgICAgICAgICAgIH1cbiIgKworICAgICAiICAgIH1cbiIgKworICAgICAifSIpOworICB9CisKKyAgICBwdWJsaWMgdm9pZCB0ZXN0U0NSSURFQV80NzgzKCkgdGhyb3dzIEluY29ycmVjdE9wZXJhdGlvbkV4Y2VwdGlvbiB7CisgICAgZ2V0U2V0dGluZ3MoKS5BU1NJR05NRU5UX1dSQVAgPSBDb21tb25Db2RlU3R5bGVTZXR0aW5ncy5XUkFQX0FTX05FRURFRDsKKyAgICBnZXRTZXR0aW5ncygpLk1FVEhPRF9DQUxMX0NIQUlOX1dSQVAgPSBDb21tb25Db2RlU3R5bGVTZXR0aW5ncy5XUkFQX0FTX05FRURFRDsKKyAgICBnZXRTZXR0aW5ncygpLmdldFJvb3RTZXR0aW5ncygpLlJJR0hUX01BUkdJTiA9IDgwOworCisgICAgZG9UZXh0VGVzdCgiY2xhc3MgRm9ve1xuIiArCisgICAgICAgICAgICAgICAiICAgIHZvaWQgZm9vKCkge1xuIiArCisgICAgICAgICAgICAgICAiICAgICAgICBmaW5hbCBDb21tYW5kUm91dGVyUHJvdG9jb2xIYW5kbGVyIHByb3RvY29sSGFuZGxlciA9IChDb21tYW5kUm91dGVyUHJvdG9jb2xIYW5kbGVyKSBjb25uZWN0aW9uLmdldFByb3RvY29sSGFuZGxlcigpXG4iICsKKyAgICAgICAgICAgICAgICIgICAgfVxuIiArCisifSIsICJjbGFzcyBGb28ge1xuIiArCisgICAgICIgICAgdm9pZCBmb28oKSB7XG4iICsKKyAgICAgIiAgICAgICAgZmluYWwgQ29tbWFuZFJvdXRlclByb3RvY29sSGFuZGxlciBwcm90b2NvbEhhbmRsZXIgPVxuIiArCisgICAgICIgICAgICAgICAgICAgICAgKENvbW1hbmRSb3V0ZXJQcm90b2NvbEhhbmRsZXIpIGNvbm5lY3Rpb24uZ2V0UHJvdG9jb2xIYW5kbGVyKClcbiIgKworICAgICAiICAgIH1cbiIgKworICAgICAifSIpOworCisKKyAgICBkb1RleHRUZXN0KCJjbGFzcyBGb297XG4iICsKKyAgICAgICAgICAgICAgICIgICAgdm9pZCBmb28oKSB7XG4iICsKKyAgICAgICAgICAgICAgICIgICAgICAgIHByb3RvY29sSGFuZGxlckNvbW1hbmRSb3V0ZXJQcm90b2NvbEhhbmRsZXIgPSAoQ29tbWFuZFJvdXRlclByb3RvY29sSGFuZGxlcikgY29ubmVjdGlvbi5nZXRQcm90b2NvbEhhbmRsZXIoKVxuIiArCisgICAgICAgICAgICAgICAiICAgIH1cbiIgKworIn0iLCAiY2xhc3MgRm9vIHtcbiIgKworICAgICAiICAgIHZvaWQgZm9vKCkge1xuIiArCisgICAgICIgICAgICAgIHByb3RvY29sSGFuZGxlckNvbW1hbmRSb3V0ZXJQcm90b2NvbEhhbmRsZXIgPVxuIiArCisgICAgICIgICAgICAgICAgICAgICAgKENvbW1hbmRSb3V0ZXJQcm90b2NvbEhhbmRsZXIpIGNvbm5lY3Rpb24uZ2V0UHJvdG9jb2xIYW5kbGVyKClcbiIgKworICAgICAiICAgIH1cbiIgKworICAgICAifSIpOworCisgICAgZG9UZXh0VGVzdCgiY2xhc3MgRm9ve1xuIiArCisgICAgICAgICAgICAgICAiICAgIGZpbmFsIENvbW1hbmRSb3V0ZXJQcm90b2NvbEhhbmRsZXIgcHJvdG9jb2xIYW5kbGVyID0gKENvbW1hbmRSb3V0ZXJQcm90b2NvbEhhbmRsZXIpIGNvbm5lY3Rpb24uZ2V0UHJvdG9jb2xIYW5kbGVyKClcbiIgKworIn0iLCAiY2xhc3MgRm9vIHtcbiIgKworICAgICAiICAgIGZpbmFsIENvbW1hbmRSb3V0ZXJQcm90b2NvbEhhbmRsZXIgcHJvdG9jb2xIYW5kbGVyID1cbiIgKworICAgICAiICAgICAgICAgICAgKENvbW1hbmRSb3V0ZXJQcm90b2NvbEhhbmRsZXIpIGNvbm5lY3Rpb24uZ2V0UHJvdG9jb2xIYW5kbGVyKClcbiIgKworICAgICAifSIpOworCisgICAgZ2V0U2V0dGluZ3MoKS5QTEFDRV9BU1NJR05NRU5UX1NJR05fT05fTkVYVF9MSU5FID0gdHJ1ZTsKKworICAgIGRvVGV4dFRlc3QoImNsYXNzIEZvb3tcbiIgKworICAgICAgICAgICAgICAgIiAgICB2b2lkIGZvbygpIHtcbiIgKworICAgICAgICAgICAgICAgIiAgICAgICAgZmluYWwgQ29tbWFuZFJvdXRlclByb3RvY29sSGFuZGxlciBwcm90b2NvbEhhbmRsZXIgPSAoQ29tbWFuZFJvdXRlclByb3RvY29sSGFuZGxlcikgY29ubmVjdGlvbi5nZXRQcm90b2NvbEhhbmRsZXIoKVxuIiArCisgICAgICAgICAgICAgICAiICAgIH1cbiIgKworIn0iLCAiY2xhc3MgRm9vIHtcbiIgKworICAgICAiICAgIHZvaWQgZm9vKCkge1xuIiArCisgICAgICIgICAgICAgIGZpbmFsIENvbW1hbmRSb3V0ZXJQcm90b2NvbEhhbmRsZXIgcHJvdG9jb2xIYW5kbGVyXG4iICsKKyAgICAgIiAgICAgICAgICAgICAgICA9IChDb21tYW5kUm91dGVyUHJvdG9jb2xIYW5kbGVyKSBjb25uZWN0aW9uLmdldFByb3RvY29sSGFuZGxlcigpXG4iICsKKyAgICAgIiAgICB9XG4iICsKKyAgICAgIn0iKTsKKworICAgIGRvVGV4dFRlc3QoImNsYXNzIEZvb3tcbiIgKworICAgICAgICAgICAgICAgIiAgICB2b2lkIGZvbygpIHtcbiIgKworICAgICAgICAgICAgICAgIiAgICAgICAgcHJvdG9jb2xIYW5kbGVyQ29tbWFuZFJvdXRlclByb3RvY29sSGFuZGxlciA9IChDb21tYW5kUm91dGVyUHJvdG9jb2xIYW5kbGVyKSBjb25uZWN0aW9uLmdldFByb3RvY29sSGFuZGxlcigpXG4iICsKKyAgICAgICAgICAgICAgICIgICAgfVxuIiArCisifSIsICJjbGFzcyBGb28ge1xuIiArCisgICAgICIgICAgdm9pZCBmb28oKSB7XG4iICsKKyAgICAgIiAgICAgICAgcHJvdG9jb2xIYW5kbGVyQ29tbWFuZFJvdXRlclByb3RvY29sSGFuZGxlclxuIiArCisgICAgICIgICAgICAgICAgICAgICAgPSAoQ29tbWFuZFJvdXRlclByb3RvY29sSGFuZGxlcikgY29ubmVjdGlvbi5nZXRQcm90b2NvbEhhbmRsZXIoKVxuIiArCisgICAgICIgICAgfVxuIiArCisgICAgICJ9Iik7CisKKworICAgIGRvVGV4dFRlc3QoImNsYXNzIEZvb3tcbiIgKworICAgICAgICAgICAgICAgIiAgICBmaW5hbCBDb21tYW5kUm91dGVyUHJvdG9jb2xIYW5kbGVyIHByb3RvY29sSGFuZGxlciA9IChDb21tYW5kUm91dGVyUHJvdG9jb2xIYW5kbGVyKSBjb25uZWN0aW9uLmdldFByb3RvY29sSGFuZGxlcigpXG4iICsKKyJ9IiwgImNsYXNzIEZvbyB7XG4iICsKKyAgICAgIiAgICBmaW5hbCBDb21tYW5kUm91dGVyUHJvdG9jb2xIYW5kbGVyIHByb3RvY29sSGFuZGxlclxuIiArCisgICAgICIgICAgICAgICAgICA9IChDb21tYW5kUm91dGVyUHJvdG9jb2xIYW5kbGVyKSBjb25uZWN0aW9uLmdldFByb3RvY29sSGFuZGxlcigpXG4iICsKKyAgICAgIn0iKTsKKworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFNDUklERUFERVZfMjI5MigpIHRocm93cyBJbmNvcnJlY3RPcGVyYXRpb25FeGNlcHRpb24geworICAgIGdldFNldHRpbmdzKCkuS0VFUF9DT05UUk9MX1NUQVRFTUVOVF9JTl9PTkVfTElORSA9IGZhbHNlOworICAgIGdldFNldHRpbmdzKCkuV0hJTEVfT05fTkVXX0xJTkUgPSB0cnVlOworCisgICAgZmluYWwgSmF2YVBzaUZhY2FkZSBmYWNhZGUgPSBnZXRKYXZhRmFjYWRlKCk7CisgICAgZmluYWwgTGFuZ3VhZ2VMZXZlbCBzdG9yZWQgPSBMYW5ndWFnZUxldmVsUHJvamVjdEV4dGVuc2lvbi5nZXRJbnN0YW5jZShmYWNhZGUuZ2V0UHJvamVjdCgpKS5nZXRMYW5ndWFnZUxldmVsKCk7CisgICAgTGFuZ3VhZ2VMZXZlbFByb2plY3RFeHRlbnNpb24uZ2V0SW5zdGFuY2UoZmFjYWRlLmdldFByb2plY3QoKSkuc2V0TGFuZ3VhZ2VMZXZlbChMYW5ndWFnZUxldmVsLkpES18xXzUpOworCisgICAgdHJ5IHsKKyAgICAgIGRvVGV4dFRlc3QoImNsYXNzIEZvbyB7XG4iICsgIiAgICB2b2lkIGZvbygpIHtcbiIgKyAiICAgICAgICBpZiAoYSkgZm9vKCk7XG4iICsgIiAgICAgICAgZWxzZSBiYXIoKTtcbiIgKyAiICAgIH1cbiIgKyAifSIsCisgICAgICAgICAgICAgICAgICJjbGFzcyBGb28ge1xuIiArCisgICAgICAgICAgICAgICAgICIgICAgdm9pZCBmb28oKSB7XG4iICsKKyAgICAgICAgICAgICAgICAgIiAgICAgICAgaWYgKGEpXG4iICsKKyAgICAgICAgICAgICAgICAgIiAgICAgICAgICAgIGZvbygpO1xuIiArCisgICAgICAgICAgICAgICAgICIgICAgICAgIGVsc2VcbiIgKworICAgICAgICAgICAgICAgICAiICAgICAgICAgICAgYmFyKCk7XG4iICsKKyAgICAgICAgICAgICAgICAgIiAgICB9XG4iICsKKyAgICAgICAgICAgICAgICAgIn0iKTsKKworCisgICAgICBkb1RleHRUZXN0KCJjbGFzcyBGb28ge1xuIiArICIgICAgdm9pZCBmb28oKSB7XG4iICsgIiAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAxMDsgaSsrKSBmb28oKTtcbiIgKyAiICAgIH1cbiIgKyAifSIsCisgICAgICAgICAgICAgICAgICJjbGFzcyBGb28ge1xuIiArCisgICAgICAgICAgICAgICAgICIgICAgdm9pZCBmb28oKSB7XG4iICsKKyAgICAgICAgICAgICAgICAgIiAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAxMDsgaSsrKVxuIiArCisgICAgICAgICAgICAgICAgICIgICAgICAgICAgICBmb28oKTtcbiIgKworICAgICAgICAgICAgICAgICAiICAgIH1cbiIgKworICAgICAgICAgICAgICAgICAifSIpOworCisKKyAgICAgIGRvVGV4dFRlc3QoImNsYXNzIEZvbyB7XG4iICsgIiAgICB2b2lkIGZvbygpIHtcbiIgKyAiICAgICAgICBmb3IgKGludCB2YXIgOiB2YXJzKSBmb28oKTtcbiIgKyAiICAgIH1cbiIgKyAifSIsCisgICAgICAgICAgICAgICAgICJjbGFzcyBGb28ge1xuIiArICIgICAgdm9pZCBmb28oKSB7XG4iICsgIiAgICAgICAgZm9yIChpbnQgdmFyIDogdmFycylcbiIgKyAiICAgICAgICAgICAgZm9vKCk7XG4iICsgIiAgICB9XG4iICsgIn0iKTsKKworCisgICAgICBkb1RleHRUZXN0KCJjbGFzcyBGb28ge1xuIiArICIgICAgdm9pZCBmb28oKSB7XG4iICsgIiAgICAgICAgZG8gZm9vKCk7IHdoaWxlICh0cnVlKTtcbiIgKyAiICAgIH1cbiIgKyAifSIsICJjbGFzcyBGb28ge1xuIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgICAgdm9pZCBmb28oKSB7XG4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgICAgICAgZG9cbiIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgICAgICAgICAgZm9vKCk7XG4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgICAgICAgd2hpbGUgKHRydWUpO1xuIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgICAgfVxuIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ9Iik7CisKKworICAgICAgZG9UZXh0VGVzdCgiY2xhc3MgRm9vIHtcbiIgKyAiICAgIHZvaWQgZm9vKCkge1xuIiArICIgICAgICAgIHdoaWxlKHRydWUpIGZvbygpO1xuIiArICIgICAgfVxuIiArICJ9IiwKKyAgICAgICAgICAgICAgICAgImNsYXNzIEZvbyB7XG4iICsgIiAgICB2b2lkIGZvbygpIHtcbiIgKyAiICAgICAgICB3aGlsZSAodHJ1ZSlcbiIgKyAiICAgICAgICAgICAgZm9vKCk7XG4iICsgIiAgICB9XG4iICsgIn0iKTsKKworICAgICAgZ2V0U2V0dGluZ3MoKS5LRUVQX0NPTlRST0xfU1RBVEVNRU5UX0lOX09ORV9MSU5FID0gdHJ1ZTsKKyAgICAgIGdldFNldHRpbmdzKCkuV0hJTEVfT05fTkVXX0xJTkUgPSBmYWxzZTsKKworICAgICAgZG9UZXh0VGVzdCgiY2xhc3MgRm9vIHtcbiIgKyAiICAgIHZvaWQgZm9vKCkge1xuIiArICIgICAgICAgIGlmIChhKSBmb28oKTtcbiIgKyAiICAgICAgICBlbHNlIGJhcigpO1xuIiArICIgICAgfVxuIiArICJ9IiwKKyAgICAgICAgICAgICAgICAgImNsYXNzIEZvbyB7XG4iICsgIiAgICB2b2lkIGZvbygpIHtcbiIgKyAiICAgICAgICBpZiAoYSkgZm9vKCk7XG4iICsgIiAgICAgICAgZWxzZSBiYXIoKTtcbiIgKyAiICAgIH1cbiIgKyAifSIpOworCisgICAgICBkb1RleHRUZXN0KCJjbGFzcyBGb28ge1xuIiArICIgICAgdm9pZCBmb28oKSB7XG4iICsgIiAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAxMDsgaSsrKSBmb28oKTtcbiIgKyAiICAgIH1cbiIgKyAifSIsCisgICAgICAgICAgICAgICAgICJjbGFzcyBGb28ge1xuIiArICIgICAgdm9pZCBmb28oKSB7XG4iICsgIiAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAxMDsgaSsrKSBmb28oKTtcbiIgKyAiICAgIH1cbiIgKyAifSIpOworCisKKyAgICAgIGRvVGV4dFRlc3QoImNsYXNzIEZvbyB7XG4iICsgIiAgICB2b2lkIGZvbygpIHtcbiIgKyAiICAgICAgICBmb3IgKGludCB2YXIgOiB2YXJzKSBmb28oKTtcbiIgKyAiICAgIH1cbiIgKyAifSIsCisgICAgICAgICAgICAgICAgICJjbGFzcyBGb28ge1xuIiArICIgICAgdm9pZCBmb28oKSB7XG4iICsgIiAgICAgICAgZm9yIChpbnQgdmFyIDogdmFycykgZm9vKCk7XG4iICsgIiAgICB9XG4iICsgIn0iKTsKKworCisgICAgICBkb1RleHRUZXN0KCJjbGFzcyBGb28ge1xuIiArICIgICAgdm9pZCBmb28oKSB7XG4iICsgIiAgICAgICAgZG8gZm9vKCk7IHdoaWxlICh0cnVlKTtcbiIgKyAiICAgIH1cbiIgKyAifSIsCisgICAgICAgICAgICAgICAgICJjbGFzcyBGb28ge1xuIiArICIgICAgdm9pZCBmb28oKSB7XG4iICsgIiAgICAgICAgZG8gZm9vKCk7IHdoaWxlICh0cnVlKTtcbiIgKyAiICAgIH1cbiIgKyAifSIpOworCisKKyAgICAgIGRvVGV4dFRlc3QoImNsYXNzIEZvbyB7XG4iICsgIiAgICB2b2lkIGZvbygpIHtcbiIgKyAiICAgICAgICB3aGlsZSh0cnVlKSBmb28oKTtcbiIgKyAiICAgIH1cbiIgKyAifSIsCisgICAgICAgICAgICAgICAgICJjbGFzcyBGb28ge1xuIiArICIgICAgdm9pZCBmb28oKSB7XG4iICsgIiAgICAgICAgd2hpbGUgKHRydWUpIGZvbygpO1xuIiArICIgICAgfVxuIiArICJ9Iik7CisKKyAgICAgIGdldFNldHRpbmdzKCkuZ2V0Um9vdFNldHRpbmdzKCkuUklHSFRfTUFSR0lOID0gMTc7CisKKyAgICAgIGRvVGV4dFRlc3QoImNsYXNzIEZvbyB7XG4iICsgIiAgICB2b2lkIGZvbygpIHtcbiIgKyAiICAgICAgICBpZiAoYSkgZm9vKCk7XG4iICsgIiAgICAgICAgZWxzZSBiYXIoKTtcbiIgKyAiICAgIH1cbiIgKyAifSIsCisgICAgICAgICAgICAgICAgICJjbGFzcyBGb28ge1xuIiArCisgICAgICAgICAgICAgICAgICIgICAgdm9pZCBmb28oKSB7XG4iICsKKyAgICAgICAgICAgICAgICAgIiAgICAgICAgaWYgKGEpXG4iICsKKyAgICAgICAgICAgICAgICAgIiAgICAgICAgICAgIGZvbygpO1xuIiArCisgICAgICAgICAgICAgICAgICIgICAgICAgIGVsc2VcbiIgKworICAgICAgICAgICAgICAgICAiICAgICAgICAgICAgYmFyKCk7XG4iICsKKyAgICAgICAgICAgICAgICAgIiAgICB9XG4iICsKKyAgICAgICAgICAgICAgICAgIn0iKTsKKworICAgICAgZ2V0U2V0dGluZ3MoKS5nZXRSb290U2V0dGluZ3MoKS5SSUdIVF9NQVJHSU4gPSAzMDsKKworICAgICAgZG9UZXh0VGVzdCgiY2xhc3MgRm9vIHtcbiIgKyAiICAgIHZvaWQgZm9vKCkge1xuIiArICIgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMTA7IGkrKykgZm9vKCk7XG4iICsgIiAgICB9XG4iICsgIn0iLAorICAgICAgICAgICAgICAgICAiY2xhc3MgRm9vIHtcbiIgKworICAgICAgICAgICAgICAgICAiICAgIHZvaWQgZm9vKCkge1xuIiArCisgICAgICAgICAgICAgICAgICIgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMTA7IGkrKylcbiIgKworICAgICAgICAgICAgICAgICAiICAgICAgICAgICAgZm9vKCk7XG4iICsKKyAgICAgICAgICAgICAgICAgIiAgICB9XG4iICsKKyAgICAgICAgICAgICAgICAgIn0iKTsKKworICAgICAgZ2V0U2V0dGluZ3MoKS5nZXRSb290U2V0dGluZ3MoKS5SSUdIVF9NQVJHSU4gPSAzMjsKKyAgICAgIGRvVGV4dFRlc3QoImNsYXNzIEZvbyB7XG4iICsgIiAgICB2b2lkIGZvbygpIHtcbiIgKyAiICAgICAgICBmb3IgKGludCB2YXIgOiB2YXJzKSBmb28oKTtcbiIgKyAiICAgIH1cbiIgKyAifSIsCisgICAgICAgICAgICAgICAgICJjbGFzcyBGb28ge1xuIiArICIgICAgdm9pZCBmb28oKSB7XG4iICsgIiAgICAgICAgZm9yIChpbnQgdmFyIDogdmFycylcbiIgKyAiICAgICAgICAgICAgZm9vKCk7XG4iICsgIiAgICB9XG4iICsgIn0iKTsKKworCisgICAgICBnZXRTZXR0aW5ncygpLmdldFJvb3RTZXR0aW5ncygpLlJJR0hUX01BUkdJTiA9IDEyOworICAgICAgZG9UZXh0VGVzdCgiY2xhc3MgRm9vIHtcbiIgKyAiICAgIHZvaWQgZm9vKCkge1xuIiArICIgICAgICAgIGRvIGZvbygpOyB3aGlsZSAodHJ1ZSk7XG4iICsgIiAgICB9XG4iICsgIn0iLCAiY2xhc3MgRm9vIHtcbiIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgIHZvaWQgZm9vKCkge1xuIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgICAgICAgIGRvXG4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgICAgICAgICAgIGZvbygpO1xuIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgICAgICAgIHdoaWxlICh0cnVlKTtcbiIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgIH1cbiIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAifSIpOworCisgICAgICBnZXRTZXR0aW5ncygpLmdldFJvb3RTZXR0aW5ncygpLlJJR0hUX01BUkdJTiA9IDIzOworCisgICAgICBkb1RleHRUZXN0KCJjbGFzcyBGb28ge1xuIiArICIgICAgdm9pZCBmb28oKSB7XG4iICsgIiAgICAgICAgd2hpbGUodHJ1ZSkgZm9vKCk7XG4iICsgIiAgICB9XG4iICsgIn0iLAorICAgICAgICAgICAgICAgICAiY2xhc3MgRm9vIHtcbiIgKyAiICAgIHZvaWQgZm9vKCkge1xuIiArICIgICAgICAgIHdoaWxlICh0cnVlKVxuIiArICIgICAgICAgICAgICBmb28oKTtcbiIgKyAiICAgIH1cbiIgKyAifSIpOworCisgICAgfQorICAgIGZpbmFsbHkgeworICAgICAgTGFuZ3VhZ2VMZXZlbFByb2plY3RFeHRlbnNpb24uZ2V0SW5zdGFuY2UoZmFjYWRlLmdldFByb2plY3QoKSkuc2V0TGFuZ3VhZ2VMZXZlbChzdG9yZWQpOworICAgIH0KKworCisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0U0NSMzExNSgpIHRocm93cyBFeGNlcHRpb24geworICAgIGZpbmFsIENvbW1vbkNvZGVTdHlsZVNldHRpbmdzLkluZGVudE9wdGlvbnMgaW5kZW50T3B0aW9ucyA9IGdldFNldHRpbmdzKCkuZ2V0Um9vdFNldHRpbmdzKCkuZ2V0SW5kZW50T3B0aW9ucyhTdGRGaWxlVHlwZXMuSkFWQSk7CisgICAgaW5kZW50T3B0aW9ucy5VU0VfVEFCX0NIQVJBQ1RFUiA9IHRydWU7CisgICAgaW5kZW50T3B0aW9ucy5TTUFSVF9UQUJTID0gdHJ1ZTsKKworICAgIGdldFNldHRpbmdzKCkuQUxJR05fTVVMVElMSU5FX0FSUkFZX0lOSVRJQUxJWkVSX0VYUFJFU1NJT04gPSB0cnVlOworCisgICAgZG9UZXh0VGVzdCgiY2xhc3MgRm9vIHtcbiIgKworICAgICAgICAgICAgICAgIlx0cHVibGljIHZvaWQgdGVzdChTdHJpbmdbXSBhcmdzKSB7XG4iICsKKyAgICAgICAgICAgICAgICJcdFx0Zm9vKG5ldyBTdHJpbmdbXSB7XG4iICsKKyAgICAgICAgICAgICAgICJcdFx0XHRcdFwiMVwiLFxuIiArCisgICAgICAgICAgICAgICAiXHRcdCAgICAgICAgXCIyXCIsXG4iICsKKyAgICAgICAgICAgICAgICJcdFx0ICAgICAgICBcIjNcIn0pO1xuIiArCisgICAgICAgICAgICAgICAiXHR9XG4iICsKKyJ9IiwgImNsYXNzIEZvbyB7XG4iICsKKyAgICAgIlx0cHVibGljIHZvaWQgdGVzdChTdHJpbmdbXSBhcmdzKSB7XG4iICsKKyAgICAgIlx0XHRmb28obmV3IFN0cmluZ1tde1xuIiArCisgICAgICJcdFx0XHRcdFwiMVwiLFxuIiArCisgICAgICJcdFx0XHRcdFwiMlwiLFxuIiArCisgICAgICJcdFx0XHRcdFwiM1wifSk7XG4iICsKKyAgICAgIlx0fVxuIiArCisgICAgICJ9Iik7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0SURFQURFVl82MjM5KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZ2V0U2V0dGluZ3MoKS5nZXRSb290U2V0dGluZ3MoKS5FTkFCTEVfSkFWQURPQ19GT1JNQVRUSU5HID0gdHJ1ZTsKKyAgICBkb1RleHRUZXN0KCJwdWJsaWMgY2xhc3MgVGVzdCB7XG4iICsKKyAgICAgICAgICAgICAgICJcbiIgKworICAgICAgICAgICAgICAgIiAgICAvKipcbiIgKworICAgICAgICAgICAgICAgIiAgICAgKiBUaGUgcyBwcm9wZXJ0eS5cbiIgKworICAgICAgICAgICAgICAgIiAgICAgKlxuIiArCisgICAgICAgICAgICAgICAiICAgICAqIEBkZXByZWNhdGVkIGRvbid0IHVzZSBpdFxuIiArCisgICAgICAgICAgICAgICAiICAgICAqL1xuIiArCisgICAgICAgICAgICAgICAiICAgIHByaXZhdGUgU3RyaW5nIHM7XG4iICsKKyJ9IiwgInB1YmxpYyBjbGFzcyBUZXN0IHtcbiIgKworICAgICAiXG4iICsKKyAgICAgIiAgICAvKipcbiIgKworICAgICAiICAgICAqIFRoZSBzIHByb3BlcnR5LlxuIiArCisgICAgICIgICAgICpcbiIgKworICAgICAiICAgICAqIEBkZXByZWNhdGVkIGRvbid0IHVzZSBpdFxuIiArCisgICAgICIgICAgICovXG4iICsKKyAgICAgIiAgICBwcml2YXRlIFN0cmluZyBzO1xuIiArCisgICAgICJ9Iik7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0SURFQURFVl84NzU1KCkgdGhyb3dzIEluY29ycmVjdE9wZXJhdGlvbkV4Y2VwdGlvbiB7CisgICAgZ2V0U2V0dGluZ3MoKS5LRUVQX0xJTkVfQlJFQUtTID0gZmFsc2U7CisgICAgZG9UZXh0VGVzdCgiY2xhc3MgRm9vIHtcbiIgKworICAgICAgICAgICAgICAgInZvaWQgZm9vKCl7XG4iICsKKyAgICAgICAgICAgICAgICJTeXN0ZW1cbiIgKworICAgICAgICAgICAgICAgIi5vdXRcbiIgKworICAgICAgICAgICAgICAgIi5wcmludGxuKFwiU2xlZXBpbmcgXCIgXG4iICsKKyAgICAgICAgICAgICAgICIrIHRoaW5rQWJvdXRJdFRpbWVcbiIgKworICAgICAgICAgICAgICAgIisgXCIgc2Vjb25kcyAhXCIpOyIgKworICAgICAgICAgICAgICAgIn1cbiIgKworICAgICAgICAgICAgICAgIn0iLCAiY2xhc3MgRm9vIHtcbiIgKworICAgICAgICAgICAgICAgICAgICAiICAgIHZvaWQgZm9vKCkge1xuIiArCisgICAgICAgICAgICAgICAgICAgICIgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihcIlNsZWVwaW5nIFwiICsgdGhpbmtBYm91dEl0VGltZSArIFwiIHNlY29uZHMgIVwiKTtcbiIgKworICAgICAgICAgICAgICAgICAgICAiICAgIH1cbiIgKworICAgICAgICAgICAgICAgICAgICAifSIpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdElERUFERVZfMjQxNjgoKSB0aHJvd3MgSW5jb3JyZWN0T3BlcmF0aW9uRXhjZXB0aW9uIHsKKyAgICBkb1RleHRUZXN0KAorICAgICAgImNsYXNzIEZvbyB7XG4iICsgIkBBbkV4YW1wbGVNZXRob2RcbiIgKyAicHVibGljIFN0cmluZ1xuIiArICJnZXRNZUFTdHJpbmcoKVxuIiArICJ0aHJvd3MgQW5FeGNlcHRpb25cbiIgKyAie1xuIiArICJcbiIgKyAifVxuIiArICJ9IiwKKyAgICAgICJjbGFzcyBGb28ge1xuIiArCisgICAgICAiICAgIEBBbkV4YW1wbGVNZXRob2RcbiIgKworICAgICAgIiAgICBwdWJsaWMgU3RyaW5nXG4iICsKKyAgICAgICIgICAgZ2V0TWVBU3RyaW5nKClcbiIgKworICAgICAgIiAgICAgICAgICAgIHRocm93cyBBbkV4Y2VwdGlvbiB7XG4iICsKKyAgICAgICJcbiIgKworICAgICAgIiAgICB9XG4iICsKKyAgICAgICJ9Iik7CisgIH0KKworCisgIHB1YmxpYyB2b2lkIHRlc3RJREVBREVWXzI1NDEoKSB0aHJvd3MgSW5jb3JyZWN0T3BlcmF0aW9uRXhjZXB0aW9uIHsKKyAgICBteVRleHRSYW5nZSA9IG5ldyBUZXh0UmFuZ2UoMCwgMTUpOworICAgIGRvVGV4dFRlc3QoIi8qKiBAcGFyYW0gcSAqL1xuY2xhc3MgRm9vIHtcbn0iLCAiLyoqXG4iICsgIiAqIEBwYXJhbSBxXG4iICsgIiAqL1xuIiArICJjbGFzcyBGb28ge1xuIiArICJ9Iik7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0SURFQURFVl82NDM0KCkgdGhyb3dzIEluY29ycmVjdE9wZXJhdGlvbkV4Y2VwdGlvbiB7CisgICAgZ2V0U2V0dGluZ3MoKS5BTElHTl9NVUxUSUxJTkVfQklOQVJZX09QRVJBVElPTiA9IHRydWU7CisgICAgZ2V0U2V0dGluZ3MoKS5BTElHTl9NVUxUSUxJTkVfQVNTSUdOTUVOVCA9IHRydWU7CisgICAgZG9UZXh0VGVzdCgiY2xhc3MgRm9vIHtcbiIgKworICAgICAgICAgICAgICAgInZvaWQgZm9vKCl7XG4iICsKKyAgICAgICAgICAgICAgICJyZXR1cm4gKGludGVydmFsMS5nZXRFbmRJbmRleCgpID49IGludGVydmFsMi5nZXRTdGFydEluZGV4KCkgJiZcbiIgKworICAgICAgICAgICAgICAgIiAgICAgICAgaW50ZXJ2YWwxLmdldFN0YXJ0SW5kZXgoKSA8PSBpbnRlcnZhbDIuZ2V0RW5kSW5kZXgoKSkgfHxcbiIgKworICAgICAgICAgICAgICAgIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludGVydmFsMi5nZXRFbmRJbmRleCgpID49IGludGVydmFsMS5nZXRTdGFydEluZGV4KCkgJiZcbiIgKworICAgICAgICAgICAgICAgIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludGVydmFsMi5nZXRTdGFydEluZGV4KCkgPD0gaW50ZXJ2YWwxLmdldEVuZEluZGV4KCkpO1xuIiArCisgICAgICAgICAgICAgICAifVxuIiArCisgICAgICAgICAgICAgICAifSIsICJjbGFzcyBGb28ge1xuIiArCisgICAgICAgICAgICAgICAgICAgICIgICAgdm9pZCBmb28oKSB7XG4iICsKKyAgICAgICAgICAgICAgICAgICAgIiAgICAgICAgcmV0dXJuIChpbnRlcnZhbDEuZ2V0RW5kSW5kZXgoKSA+PSBpbnRlcnZhbDIuZ2V0U3RhcnRJbmRleCgpICYmXG4iICsKKyAgICAgICAgICAgICAgICAgICAgIiAgICAgICAgICAgICAgICBpbnRlcnZhbDEuZ2V0U3RhcnRJbmRleCgpIDw9IGludGVydmFsMi5nZXRFbmRJbmRleCgpKSB8fFxuIiArCisgICAgICAgICAgICAgICAgICAgICIgICAgICAgICAgICAgICAoaW50ZXJ2YWwyLmdldEVuZEluZGV4KCkgPj0gaW50ZXJ2YWwxLmdldFN0YXJ0SW5kZXgoKSAmJlxuIiArCisgICAgICAgICAgICAgICAgICAgICIgICAgICAgICAgICAgICAgaW50ZXJ2YWwyLmdldFN0YXJ0SW5kZXgoKSA8PSBpbnRlcnZhbDEuZ2V0RW5kSW5kZXgoKSk7XG4iICsKKyAgICAgICAgICAgICAgICAgICAgIiAgICB9XG4iICsKKyAgICAgICAgICAgICAgICAgICAgIn0iKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RJREVBREVWXzEyODM2KCkgdGhyb3dzIEluY29ycmVjdE9wZXJhdGlvbkV4Y2VwdGlvbiB7CisgICAgZ2V0U2V0dGluZ3MoKS5TUEVDSUFMX0VMU0VfSUZfVFJFQVRNRU5UID0gdHJ1ZTsKKyAgICBnZXRTZXR0aW5ncygpLmdldFJvb3RTZXR0aW5ncygpLlJJR0hUX01BUkdJTiA9IDgwOworICAgIGRvVGV4dFRlc3QoImNsYXNzIEZvbyB7XG4iICsKKyAgICAgICAgICAgICAgICJ2b2lkIGZvbygpe1xuIiArCisgICAgICAgICAgICAgICAiaWYgKHRydWUpe1xuIiArCisgICAgICAgICAgICAgICAifSBlbHNlIGlmIChcIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiICE9IG51bGwpIHtcbiIgKworICAgICAgICAgICAgICAgIn1cbiIgKworICAgICAgICAgICAgICAgIn1cbiIgKworICAgICAgICAgICAgICAgIn0iLCAiY2xhc3MgRm9vIHtcbiIgKworICAgICAgICAgICAgICAgICAgICAiICAgIHZvaWQgZm9vKCkge1xuIiArCisgICAgICAgICAgICAgICAgICAgICIgICAgICAgIGlmICh0cnVlKSB7XG4iICsKKyAgICAgICAgICAgICAgICAgICAgIiAgICAgICAgfSBlbHNlIGlmIChcIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiICE9IG51bGwpIHtcbiIgKworICAgICAgICAgICAgICAgICAgICAiICAgICAgICB9XG4iICsKKyAgICAgICAgICAgICAgICAgICAgIiAgICB9XG4iICsKKyAgICAgICAgICAgICAgICAgICAgIn0iKTsKKworICB9CisgIC8qCisgIHB1YmxpYyB2b2lkIHRlc3RJREVBREVWXzI2ODcxKCkgdGhyb3dzIEluY29ycmVjdE9wZXJhdGlvbkV4Y2VwdGlvbiB7CisgICAgZ2V0U2V0dGluZ3MoKS5nZXRJbmRlbnRPcHRpb25zKFN0ZEZpbGVUeXBlcy5KQVZBKS5DT05USU5VQVRJT05fSU5ERU5UX1NJWkUgPSA0OworICAgIGRvVGV4dFRlc3QoImNsYXNzIEZvbyB7XG4iICsKKyAgICAgICAgICAgICAgICJwdWJsaWMgdm9pZCBmb28oKSB7XG4iICsKKyAgICAgICAgICAgICAgICIgICAgQmlnRGVjaW1hbDEuT05FMVxuIiArCisgICAgICAgICAgICAgICAiICAgIC5hZGQyKEJpZ0RlY2ltYWwyLk9ORTJcbiIgKworICAgICAgICAgICAgICAgIiAgICAuYWRkMyhCaWdEZWNpbWFsMy5PTkUzXG4iICsKKyAgICAgICAgICAgICAgICIgICAgLmFkZDQoQmlnRGVjaW1hbDQuT05FNFxuIiArCisgICAgICAgICAgICAgICAiICAgIC5hZGQ1KEJpZ0RlY2ltYWw1Lk9ORTUpKSkpXG4iICsKKyAgICAgICAgICAgICAgICJ9XG4iICsKKyAgICAgICAgICAgICAgICJ9IiwKKyAgICAgICAgICAgICAgICJjbGFzcyBGb28ge1xuIiArCisgICAgICAgICAgICAgICAiICAgIHB1YmxpYyB2b2lkIGZvbygpIHtcbiIgKworICAgICAgICAgICAgICAgIiAgICAgICAgQmlnRGVjaW1hbDEuT05FMVxuIiArCisgICAgICAgICAgICAgICAiICAgICAgICAgICAgLmFkZDIoQmlnRGVjaW1hbDIuT05FMlxuIiArCisgICAgICAgICAgICAgICAiICAgICAgICAgICAgICAgIC5hZGQzKEJpZ0RlY2ltYWwzLk9ORTNcbiIgKworICAgICAgICAgICAgICAgIiAgICAgICAgICAgICAgICAgICAgLmFkZDQoQmlnRGVjaW1hbDQuT05FNFxuIiArCisgICAgICAgICAgICAgICAiICAgICAgICAgICAgICAgICAgICAgICAgLmFkZDUoQmlnRGVjaW1hbDUuT05FNSkpKSlcbiIgKworICAgICAgICAgICAgICAgIiAgICB9XG4iICsKKyAgICAgICAgICAgICAgICJ9Iik7CisgIH0KKyAgKi8KKworICBwdWJsaWMgdm9pZCB0ZXN0MjM1NTEoKSB0aHJvd3MgSW5jb3JyZWN0T3BlcmF0aW9uRXhjZXB0aW9uIHsKKyAgICBkb1RleHRUZXN0KCJwdWJsaWMgY2xhc3MgV3JhcHBpbmcge1xuIiArCisgICAgICAgICAgICAgICAiICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBzYW1wbGUoKSB7XG4iICsKKyAgICAgICAgICAgICAgICIgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihcIi5cIiArIEZpbGUuc2VwYXJhdG9yICsgXCIuLlwiICsgRmlsZS5zZXBhcmF0b3IgKyBcInNvbWUtZGlyZWN0b3J5LW5hbWVcIiArIEZpbGUuc2VwYXJhdG9yICsgXCJtb3JlLWZpbGUtbmFtZVwiKTtcbiIgKworICAgICAgICAgICAgICAgIiAgICB9XG4iICsKKyAgICAgICAgICAgICAgICJ9IiwgInB1YmxpYyBjbGFzcyBXcmFwcGluZyB7XG4iICsKKyAgICAgICAgICAgICAgICAgICAgIiAgICBwdWJsaWMgc3RhdGljIHZvaWQgc2FtcGxlKCkge1xuIiArCisgICAgICAgICAgICAgICAgICAgICIgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihcIi5cIiArIEZpbGUuc2VwYXJhdG9yICsgXCIuLlwiICsgRmlsZS5zZXBhcmF0b3IgKyBcInNvbWUtZGlyZWN0b3J5LW5hbWVcIiArIEZpbGUuc2VwYXJhdG9yICsgXCJtb3JlLWZpbGUtbmFtZVwiKTtcbiIgKworICAgICAgICAgICAgICAgICAgICAiICAgIH1cbiIgKworICAgICAgICAgICAgICAgICAgICAifSIpOworICB9CisKKyAgLyoKKyAgcHVibGljIHZvaWQgdGVzdElERUFERVZfMjY4NzFfMigpIHRocm93cyBJbmNvcnJlY3RPcGVyYXRpb25FeGNlcHRpb24geworICAgIGdldFNldHRpbmdzKCkuZ2V0SW5kZW50T3B0aW9ucyhTdGRGaWxlVHlwZXMuSkFWQSkuQ09OVElOVUFUSU9OX0lOREVOVF9TSVpFID0gNDsKKyAgICBkb1RleHRUZXN0KCJjbGFzcyBGb28ge1xuIiArCisgICAgICAgICAgICAgICAicHVibGljIHZvaWQgZm9vKCkge1xuIiArCisgICAgICAgICAgICAgICAiICAgIEJpZ0RlY2ltYWwxXG4iICsKKyAgICAgICAgICAgICAgICIgICAgLmFkZDIoQmlnRGVjaW1hbDJcbiIgKworICAgICAgICAgICAgICAgIiAgICAuYWRkMyhCaWdEZWNpbWFsM1xuIiArCisgICAgICAgICAgICAgICAiICAgIC5hZGQ0KEJpZ0RlY2ltYWw0XG4iICsKKyAgICAgICAgICAgICAgICIgICAgLmFkZDUoQmlnRGVjaW1hbDUpKSkpXG4iICsKKyAgICAgICAgICAgICAgICJ9XG4iICsKKyAgICAgICAgICAgICAgICJ9IiwKKyAgICAgICAgICAgICAgICJjbGFzcyBGb28ge1xuIiArCisgICAgICAgICAgICAgICAiICAgIHB1YmxpYyB2b2lkIGZvbygpIHtcbiIgKworICAgICAgICAgICAgICAgIiAgICAgICAgQmlnRGVjaW1hbDEuT05FMVxuIiArCisgICAgICAgICAgICAgICAiICAgICAgICAgICAgLmFkZDIoQmlnRGVjaW1hbDIuT05FMlxuIiArCisgICAgICAgICAgICAgICAiICAgICAgICAgICAgICAgIC5hZGQzKEJpZ0RlY2ltYWwzLk9ORTNcbiIgKworICAgICAgICAgICAgICAgIiAgICAgICAgICAgICAgICAgICAgLmFkZDQoQmlnRGVjaW1hbDQuT05FNFxuIiArCisgICAgICAgICAgICAgICAiICAgICAgICAgICAgICAgICAgICAgICAgLmFkZDUoQmlnRGVjaW1hbDUuT05FNSkpKSlcbiIgKworICAgICAgICAgICAgICAgIiAgICB9XG4iICsKKyAgICAgICAgICAgICAgICJ9Iik7CisgIH0KKworICAqLworICBwdWJsaWMgdm9pZCB0ZXN0SURFQURFVl8yMzU1MSgpIHRocm93cyBJbmNvcnJlY3RPcGVyYXRpb25FeGNlcHRpb24geworICAgIGdldFNldHRpbmdzKCkuQklOQVJZX09QRVJBVElPTl9XUkFQID0gQ29tbW9uQ29kZVN0eWxlU2V0dGluZ3MuV1JBUF9PTl9FVkVSWV9JVEVNOworCisgICAgZ2V0U2V0dGluZ3MoKS5nZXRSb290U2V0dGluZ3MoKS5SSUdIVF9NQVJHSU4gPSA2MDsKKyAgICBkb1RleHRUZXN0KCJwdWJsaWMgY2xhc3MgV3JhcHBpbmcge1xuIiArCisgICAgICAgICAgICAgICAicHVibGljIHN0YXRpYyB2b2lkIHNhbXBsZSgpIHtcbiIgKworICAgICAgICAgICAgICAgIlN5c3RlbS5vdXQucHJpbnRsbihcIi5cIiArIEZpbGUuc2VwYXJhdG9yICsgXCIuLlwiICsgRmlsZS5zZXBhcmF0b3IgKyBcInNvbWUtZGlyZWN0b3J5LW5hbWVcIiArIEZpbGUuc2VwYXJhdG9yICsgXCJtb3JlLWZpbGUtbmFtZVwiKTtcbiIgKworICAgICAgICAgICAgICAgIn1cbiIgKworICAgICAgICAgICAgICAgIn0iLCAicHVibGljIGNsYXNzIFdyYXBwaW5nIHtcbiIgKworICAgICAgICAgICAgICAgICAgICAiICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBzYW1wbGUoKSB7XG4iICsKKyAgICAgICAgICAgICAgICAgICAgIiAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKFwiLlwiICtcbiIgKworICAgICAgICAgICAgICAgICAgICAiICAgICAgICAgICAgICAgIEZpbGUuc2VwYXJhdG9yICtcbiIgKworICAgICAgICAgICAgICAgICAgICAiICAgICAgICAgICAgICAgIFwiLi5cIiArXG4iICsKKyAgICAgICAgICAgICAgICAgICAgIiAgICAgICAgICAgICAgICBGaWxlLnNlcGFyYXRvciArXG4iICsKKyAgICAgICAgICAgICAgICAgICAgIiAgICAgICAgICAgICAgICBcInNvbWUtZGlyZWN0b3J5LW5hbWVcIiArXG4iICsKKyAgICAgICAgICAgICAgICAgICAgIiAgICAgICAgICAgICAgICBGaWxlLnNlcGFyYXRvciArXG4iICsKKyAgICAgICAgICAgICAgICAgICAgIiAgICAgICAgICAgICAgICBcIm1vcmUtZmlsZS1uYW1lXCIpO1xuIiArCisgICAgICAgICAgICAgICAgICAgICIgICAgfVxuIiArCisgICAgICAgICAgICAgICAgICAgICJ9Iik7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0SURFQURFVl8yMjk2NygpIHRocm93cyBJbmNvcnJlY3RPcGVyYXRpb25FeGNlcHRpb24geworICAgIGdldFNldHRpbmdzKCkuTUVUSE9EX0FOTk9UQVRJT05fV1JBUCA9IENvbW1vbkNvZGVTdHlsZVNldHRpbmdzLldSQVBfQUxXQVlTOworCisgICAgZG9UZXh0VGVzdCgicHVibGljIGludGVyZmFjZSBUZXN0SW50ZXJmYWNlIHtcbiIgKworICAgICAgICAgICAgICAgIlxuIiArCisgICAgICAgICAgICAgICAiICAgIHZvaWQgZW1wdHkoKTtcbiIgKworICAgICAgICAgICAgICAgIlxuIiArCisgICAgICAgICAgICAgICAiICAgIEBEZXByZWNhdGVkXG4iICsKKyAgICAgICAgICAgICAgICIgICAgdm9pZCBhbm5vdGF0ZWQoKTtcbiIgKworICAgICAgICAgICAgICAgIlxuIiArCisgICAgICAgICAgICAgICAiICAgIDxUPiB2b2lkIHBhcmFtZXRyaXplZChUIGRhdGEpO1xuIiArCisgICAgICAgICAgICAgICAiXG4iICsKKyAgICAgICAgICAgICAgICIgICAgQERlcHJlY2F0ZWRcbiIgKworICAgICAgICAgICAgICAgIiAgICA8VD4gdm9pZCBwYXJhbWV0cml6ZWRBbm5vdGF0ZWQoVCBkYXRhKTtcbiIgKworICAgICAgICAgICAgICAgIlxuIiArCisgICAgICAgICAgICAgICAiICAgIEBEZXByZWNhdGVkXG4iICsKKyAgICAgICAgICAgICAgICIgICAgcHVibGljIDxUPiB2b2lkIHB1YmxpY1BhcmFtZXRyaXplZEFubm90YXRlZChUIGRhdGEpO1xuIiArCisgICAgICAgICAgICAgICAiXG4iICsKKyAgICAgICAgICAgICAgICJ9IiwgInB1YmxpYyBpbnRlcmZhY2UgVGVzdEludGVyZmFjZSB7XG4iICsKKyAgICAgICAgICAgICAgICAgICAgIlxuIiArCisgICAgICAgICAgICAgICAgICAgICIgICAgdm9pZCBlbXB0eSgpO1xuIiArCisgICAgICAgICAgICAgICAgICAgICJcbiIgKworICAgICAgICAgICAgICAgICAgICAiICAgIEBEZXByZWNhdGVkXG4iICsKKyAgICAgICAgICAgICAgICAgICAgIiAgICB2b2lkIGFubm90YXRlZCgpO1xuIiArCisgICAgICAgICAgICAgICAgICAgICJcbiIgKworICAgICAgICAgICAgICAgICAgICAiICAgIDxUPiB2b2lkIHBhcmFtZXRyaXplZChUIGRhdGEpO1xuIiArCisgICAgICAgICAgICAgICAgICAgICJcbiIgKworICAgICAgICAgICAgICAgICAgICAiICAgIEBEZXByZWNhdGVkXG4iICsKKyAgICAgICAgICAgICAgICAgICAgIiAgICA8VD4gdm9pZCBwYXJhbWV0cml6ZWRBbm5vdGF0ZWQoVCBkYXRhKTtcbiIgKworICAgICAgICAgICAgICAgICAgICAiXG4iICsKKyAgICAgICAgICAgICAgICAgICAgIiAgICBARGVwcmVjYXRlZFxuIiArCisgICAgICAgICAgICAgICAgICAgICIgICAgcHVibGljIDxUPiB2b2lkIHB1YmxpY1BhcmFtZXRyaXplZEFubm90YXRlZChUIGRhdGEpO1xuIiArCisgICAgICAgICAgICAgICAgICAgICJcbiIgKworICAgICAgICAgICAgICAgICAgICAifSIpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdElERUFERVZfMjI5NjdfMigpIHRocm93cyBJbmNvcnJlY3RPcGVyYXRpb25FeGNlcHRpb24geworICAgIGdldFNldHRpbmdzKCkuTUVUSE9EX0FOTk9UQVRJT05fV1JBUCA9IENvbW1vbkNvZGVTdHlsZVNldHRpbmdzLldSQVBfQUxXQVlTOworCisgICAgZG9UZXh0VGVzdCgicHVibGljIGludGVyZmFjZSBUZXN0SW50ZXJmYWNlIHtcbiIgKyAiICAgIEBEZXByZWNhdGVkXG4iICsgIiAgICA8VD4gdm9pZCBwYXJhbWV0cml6ZWRBbm5vdGF0ZWQoVCBkYXRhKTtcbiIgKyAifSIsCisgICAgICAgICAgICAgICAicHVibGljIGludGVyZmFjZSBUZXN0SW50ZXJmYWNlIHtcbiIgKyAiICAgIEBEZXByZWNhdGVkXG4iICsgIiAgICA8VD4gdm9pZCBwYXJhbWV0cml6ZWRBbm5vdGF0ZWQoVCBkYXRhKTtcbiIgKyAifSIpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdElERUFfNTQ0MDYoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1RleHRUZXN0KCJwdWJsaWMgY2xhc3MgVGVzdDEge1xuIiArCisgICAgICAgICAgICAgICAidm9pZCBmdW5jKCkge1xuIiArCisgICAgICAgICAgICAgICAibmV3IFRocmVhZChuZXcgUnVubmFibGUoKSB7XG4iICsKKyAgICAgICAgICAgICAgICJwdWJsaWMgdm9pZCBydW4oKSB7XG4iICsKKyAgICAgICAgICAgICAgICIgLy8gLi4uXG4iICsKKyAgICAgICAgICAgICAgICJ9XG4iICsKKyAgICAgICAgICAgICAgICJ9XG4iICsKKyAgICAgICAgICAgICAgICIpXG4iICsKKyAgICAgICAgICAgICAgICI7XG4iICsKKyAgICAgICAgICAgICAgICJ9XG4iICsKKyAgICAgICAgICAgICAgICJ9IiwKKworICAgICAgICAgICAgICAgInB1YmxpYyBjbGFzcyBUZXN0MSB7XG4iICsKKyAgICAgICAgICAgICAgICIgICAgdm9pZCBmdW5jKCkge1xuIiArCisgICAgICAgICAgICAgICAiICAgICAgICBuZXcgVGhyZWFkKG5ldyBSdW5uYWJsZSgpIHtcbiIgKworICAgICAgICAgICAgICAgIiAgICAgICAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHtcbiIgKworICAgICAgICAgICAgICAgIiAgICAgICAgICAgICAgICAvLyAuLi5cbiIgKworICAgICAgICAgICAgICAgIiAgICAgICAgICAgIH1cbiIgKworICAgICAgICAgICAgICAgIiAgICAgICAgfVxuIiArCisgICAgICAgICAgICAgICAiICAgICAgICApXG4iICsKKyAgICAgICAgICAgICAgICIgICAgICAgIDtcbiIgKworICAgICAgICAgICAgICAgIiAgICB9XG4iICsKKyAgICAgICAgICAgICAgICJ9Iik7CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9wc2kvZm9ybWF0dGVyL2phdmEvSmF2YUZvcm1hdHRlcldyYXBUZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovcHNpL2Zvcm1hdHRlci9qYXZhL0phdmFGb3JtYXR0ZXJXcmFwVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY0NGE4Y2YKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovcHNpL2Zvcm1hdHRlci9qYXZhL0phdmFGb3JtYXR0ZXJXcmFwVGVzdC5qYXZhCkBAIC0wLDAgKzEsMjk4IEBACisvKgorICogQ29weXJpZ2h0IDIwMDAtMjAxMiBKZXRCcmFpbnMgcy5yLm8uCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworcGFja2FnZSBjb20uaW50ZWxsaWoucHNpLmZvcm1hdHRlci5qYXZhOworCitpbXBvcnQgY29tLmludGVsbGlqLmxhbmcuamF2YS5KYXZhTGFuZ3VhZ2U7CitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkudXRpbC5UZXh0UmFuZ2U7CitpbXBvcnQgY29tLmludGVsbGlqLnBzaS5jb2RlU3R5bGUuQ29tbW9uQ29kZVN0eWxlU2V0dGluZ3M7CisKKy8qKgorICogSXMgaW50ZW5kZWQgdG8gaG9sZCBzcGVjaWZpYyBqYXZhIGZvcm1hdHRpbmcgdGVzdHMgZm9yICd3cmFwcGluZycgc2V0dGluZ3MuCisgKgorICogQGF1dGhvciBEZW5pcyBaaGRhbm92CisgKiBAc2luY2UgQXByIDI5LCAyMDEwIDQ6MDY6MTUgUE0KKyAqLworcHVibGljIGNsYXNzIEphdmFGb3JtYXR0ZXJXcmFwVGVzdCBleHRlbmRzIEFic3RyYWN0SmF2YUZvcm1hdHRlclRlc3QgeworCisgIHB1YmxpYyB2b2lkIHRlc3RXcmFwcGluZ0Fubm90YXRpb25BcnJheVBhcmFtZXRlcnMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBnZXRTZXR0aW5ncygpLmdldFJvb3RTZXR0aW5ncygpLlJJR0hUX01BUkdJTiA9IDgwOworICAgIGdldFNldHRpbmdzKCkuQVJSQVlfSU5JVElBTElaRVJfV1JBUCA9IENvbW1vbkNvZGVTdHlsZVNldHRpbmdzLldSQVBfQVNfTkVFREVEOworICAgIGRvVGV4dFRlc3QoCisgICAgICAiQEF0dHJpYnV0ZU92ZXJyaWRlcyggeyBAQXR0cmlidXRlT3ZlcnJpZGUobmFtZSA9IFwiaWRcIiwgY29sdW1uID0gQENvbHVtbihuYW1lID0gXCJyZWNvdmVyeV9pZFwiKSksIiArCisgICAgICAiQEF0dHJpYnV0ZU92ZXJyaWRlKG5hbWUgPSBcInRyYW5zYWN0aW9uUmVmZXJlbmNlXCIsIGNvbHVtbiA9IEBDb2x1bW4obmFtZSA9IFwiZGVhbF9yZWZlcmVuY2VcIikpLCIgKworICAgICAgIkBBdHRyaWJ1dGVPdmVycmlkZShuYW1lID0gXCJldmVudERhdGVcIiwgY29sdW1uID0gQENvbHVtbihuYW1lID0gXCJyZWNvdmVyeV9kYXRlXCIpKSwiICsKKyAgICAgICJAQXR0cmlidXRlT3ZlcnJpZGUobmFtZSA9IFwiYW1vdW50XCIsIGNvbHVtbiA9IEBDb2x1bW4obmFtZSA9IFwicmVjb3ZlcnlfYW1vdW50XCIpKSwiICsKKyAgICAgICJAQXR0cmlidXRlT3ZlcnJpZGUobmFtZSA9IFwiY3VycmVuY3lcIiwgY29sdW1uID0gQENvbHVtbihuYW1lID0gXCJsb2NhbF9jdXJyZW5jeVwiKSksIiArCisgICAgICAiQEF0dHJpYnV0ZU92ZXJyaWRlKG5hbWUgPSBcImV4Y2hhbmdlUmF0ZVwiLCBjb2x1bW4gPSBAQ29sdW1uKG5hbWUgPSBcImV4Y2hhbmdlX3JhdGVcIikpLCIgKworICAgICAgIkBBdHRyaWJ1dGVPdmVycmlkZShuYW1lID0gXCJleGNoYW5nZVJhdGVEYXRlXCIsIGNvbHVtbiA9IEBDb2x1bW4obmFtZSA9IFwicmVjb3ZlcnlfZGF0ZVwiLCBpbnNlcnRhYmxlID0gZmFsc2UsIHVwZGF0YWJsZSA9IGZhbHNlKSksIiArCisgICAgICAiQEF0dHJpYnV0ZU92ZXJyaWRlKG5hbWUgPSBcImV4Y2hhbmdlUmF0ZUFsdGVyYXRpb25KdXN0aWZpY2F0aW9uXCIsIGNvbHVtbiA9IEBDb2x1bW4obmFtZSA9IFwiZXhjaGFuZ2VfcmF0ZV9qdXN0aWZpY2F0aW9uXCIpKSwiICsKKyAgICAgICJAQXR0cmlidXRlT3ZlcnJpZGUobmFtZSA9IFwic3lzdGVtRXhjaGFuZ2VSYXRlXCIsIGNvbHVtbiA9IEBDb2x1bW4obmFtZSA9IFwic3lzdGVtX2V4Y2hhbmdlX3JhdGVcIikpIH0pXG4iICsKKyAgICAgICJjbGFzcyBGb28ge1xuIiArCisgICAgICAifSIsCisgICAgICAKKyAgICAgICJAQXR0cmlidXRlT3ZlcnJpZGVzKHtcbiIgKworICAgICAgIiAgICAgICAgQEF0dHJpYnV0ZU92ZXJyaWRlKG5hbWUgPSBcImlkXCIsIGNvbHVtbiA9IEBDb2x1bW4obmFtZSA9IFwicmVjb3ZlcnlfaWRcIikpLFxuIiArCisgICAgICAiICAgICAgICBAQXR0cmlidXRlT3ZlcnJpZGUobmFtZSA9IFwidHJhbnNhY3Rpb25SZWZlcmVuY2VcIiwgY29sdW1uID0gQENvbHVtbihuYW1lID0gXCJkZWFsX3JlZmVyZW5jZVwiKSksXG4iICsKKyAgICAgICIgICAgICAgIEBBdHRyaWJ1dGVPdmVycmlkZShuYW1lID0gXCJldmVudERhdGVcIiwgY29sdW1uID0gQENvbHVtbihuYW1lID0gXCJyZWNvdmVyeV9kYXRlXCIpKSxcbiIgKworICAgICAgIiAgICAgICAgQEF0dHJpYnV0ZU92ZXJyaWRlKG5hbWUgPSBcImFtb3VudFwiLCBjb2x1bW4gPSBAQ29sdW1uKG5hbWUgPSBcInJlY292ZXJ5X2Ftb3VudFwiKSksXG4iICsKKyAgICAgICIgICAgICAgIEBBdHRyaWJ1dGVPdmVycmlkZShuYW1lID0gXCJjdXJyZW5jeVwiLCBjb2x1bW4gPSBAQ29sdW1uKG5hbWUgPSBcImxvY2FsX2N1cnJlbmN5XCIpKSxcbiIgKworICAgICAgIiAgICAgICAgQEF0dHJpYnV0ZU92ZXJyaWRlKG5hbWUgPSBcImV4Y2hhbmdlUmF0ZVwiLCBjb2x1bW4gPSBAQ29sdW1uKG5hbWUgPSBcImV4Y2hhbmdlX3JhdGVcIikpLFxuIiArCisgICAgICAiICAgICAgICBAQXR0cmlidXRlT3ZlcnJpZGUobmFtZSA9IFwiZXhjaGFuZ2VSYXRlRGF0ZVwiLCBjb2x1bW4gPSBAQ29sdW1uKG5hbWUgPSBcInJlY292ZXJ5X2RhdGVcIiwgaW5zZXJ0YWJsZSA9IGZhbHNlLCB1cGRhdGFibGUgPSBmYWxzZSkpLFxuIiArCisgICAgICAiICAgICAgICBAQXR0cmlidXRlT3ZlcnJpZGUobmFtZSA9IFwiZXhjaGFuZ2VSYXRlQWx0ZXJhdGlvbkp1c3RpZmljYXRpb25cIiwgY29sdW1uID0gQENvbHVtbihuYW1lID0gXCJleGNoYW5nZV9yYXRlX2p1c3RpZmljYXRpb25cIikpLFxuIiArCisgICAgICAiICAgICAgICBAQXR0cmlidXRlT3ZlcnJpZGUobmFtZSA9IFwic3lzdGVtRXhjaGFuZ2VSYXRlXCIsIGNvbHVtbiA9IEBDb2x1bW4obmFtZSA9IFwic3lzdGVtX2V4Y2hhbmdlX3JhdGVcIikpfSlcbiIgKworICAgICAgImNsYXNzIEZvbyB7XG4iICsKKyAgICAgICJ9IgorICAgICk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0QW5ub3RhdGlvblBhcmFtVmFsdWVFeGNlZWRpbmdSaWdodE1hcmdpbigpIHRocm93cyBFeGNlcHRpb24geworICAgIC8vIEluc3BpcmVkIGJ5IElERUEtMTgwNTEKKyAgICBnZXRTZXR0aW5ncygpLmdldFJvb3RTZXR0aW5ncygpLlJJR0hUX01BUkdJTiA9IDgwOworICAgIGRvVGV4dFRlc3QoCisgICAgICAicGFja2FnZSBmb3JtYXR0aW5nO1xuIiArCisgICAgICAiXG4iICsKKyAgICAgICJwdWJsaWMgY2xhc3MgRW51bUluQW5ub3RhdGlvbkZvcm1hdHRpbmcge1xuIiArCisgICAgICAiXG4iICsKKyAgICAgICIgICAgcHVibGljIGVudW0gVGhlRW51bSB7XG4iICsKKyAgICAgICJcbiIgKworICAgICAgIiAgICAgICAgRklSU1QsXG4iICsKKyAgICAgICIgICAgICAgIFNFQ09ORCxcbiIgKworICAgICAgIiAgICAgICAgVEhJUkQsXG4iICsKKyAgICAgICJcbiIgKworICAgICAgIiAgICB9XG4iICsKKyAgICAgICJcbiIgKworICAgICAgIiAgICBwdWJsaWMgQGludGVyZmFjZSBUaGVBbm5vdGF0aW9uIHtcbiIgKworICAgICAgIlxuIiArCisgICAgICAiICAgICAgICBUaGVFbnVtW10gdmFsdWUoKTtcbiIgKworICAgICAgIlxuIiArCisgICAgICAiICAgICAgICBTdHJpbmcgY29tbWVudCgpO1xuIiArCisgICAgICAiXG4iICsKKyAgICAgICIgICAgfVxuIiArCisgICAgICAiXG4iICsKKyAgICAgICJcbiIgKworICAgICAgIiAgICBAVGhlQW5ub3RhdGlvbih2YWx1ZSA9IHtUaGVFbnVtLkZJUlNULCBUaGVFbnVtLlNFQ09ORH0sIGNvbW1lbnQgPSBcInNvbWUgbG9uZyBjb21tZW50IHRoYXQgZ29lcyBsb25nZXIgdGhhdCByaWdodCBtYXJnaW4gMDEyMzQ1Njc4OTAxMjM0NTY3ODkwXCIpXG4iICsKKyAgICAgICIgICAgcHVibGljIGNsYXNzIFRlc3Qge1xuIiArCisgICAgICAiXG4iICsKKyAgICAgICIgICAgfVxuIiArCisgICAgICAiXG4iICsKKyAgICAgICJ9IiwKKyAgICAgICJwYWNrYWdlIGZvcm1hdHRpbmc7XG4iICsKKyAgICAgICJcbiIgKworICAgICAgInB1YmxpYyBjbGFzcyBFbnVtSW5Bbm5vdGF0aW9uRm9ybWF0dGluZyB7XG4iICsKKyAgICAgICJcbiIgKworICAgICAgIiAgICBwdWJsaWMgZW51bSBUaGVFbnVtIHtcbiIgKworICAgICAgIlxuIiArCisgICAgICAiICAgICAgICBGSVJTVCxcbiIgKworICAgICAgIiAgICAgICAgU0VDT05ELFxuIiArCisgICAgICAiICAgICAgICBUSElSRCxcbiIgKworICAgICAgIlxuIiArCisgICAgICAiICAgIH1cbiIgKworICAgICAgIlxuIiArCisgICAgICAiICAgIHB1YmxpYyBAaW50ZXJmYWNlIFRoZUFubm90YXRpb24ge1xuIiArCisgICAgICAiXG4iICsKKyAgICAgICIgICAgICAgIFRoZUVudW1bXSB2YWx1ZSgpO1xuIiArCisgICAgICAiXG4iICsKKyAgICAgICIgICAgICAgIFN0cmluZyBjb21tZW50KCk7XG4iICsKKyAgICAgICJcbiIgKworICAgICAgIiAgICB9XG4iICsKKyAgICAgICJcbiIgKworICAgICAgIlxuIiArCisgICAgICAiICAgIEBUaGVBbm5vdGF0aW9uKHZhbHVlID0ge1RoZUVudW0uRklSU1QsIFRoZUVudW0uU0VDT05EfSwgY29tbWVudCA9IFwic29tZSBsb25nIGNvbW1lbnQgdGhhdCBnb2VzIGxvbmdlciB0aGF0IHJpZ2h0IG1hcmdpbiAwMTIzNDU2Nzg5MDEyMzQ1Njc4OTBcIilcbiIgKworICAgICAgIiAgICBwdWJsaWMgY2xhc3MgVGVzdCB7XG4iICsKKyAgICAgICJcbiIgKworICAgICAgIiAgICB9XG4iICsKKyAgICAgICJcbiIgKworICAgICAgIn0iKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RFbnVtQ29uc3RhbnRzV3JhcHBpbmcoKSB7CisgICAgLy8gSW5zcGlyZWQgYnkgSURFQS01NDY2NworICAgIGdldFNldHRpbmdzKCkuRU5VTV9DT05TVEFOVFNfV1JBUCA9IENvbW1vbkNvZGVTdHlsZVNldHRpbmdzLldSQVBfQVNfTkVFREVEOworICAgIGdldFNldHRpbmdzKCkuZ2V0Um9vdFNldHRpbmdzKCkuUklHSFRfTUFSR0lOID0gODA7CisKKyAgICAvLyBEb24ndCBleHBlY3QgdGhlIGNvbnN0YW50cyB0byBiZSBwbGFjZWQgb24gbmV3IGxpbmUuCisgICAgZG9UZXh0VGVzdCgKKyAgICAgICJlbnVtIFRlc3Qge0ZJUlNULCBTRUNPTkR9IiwKKyAgICAgICJlbnVtIFRlc3Qge0ZJUlNULCBTRUNPTkR9IgorICAgICk7CisKKyAgICAvLyBFeHBlY3Qgbm90IG9ubHkgZW51bSBjb25zdGFudHMgdG8gYmUgd3JhcHBlZCBidXQgbGluZSBicmVhayBpbnNpZGUgZW51bS1sZXZlbCBjdXJseSBicmFjZXMgYXMgd2VsbC4KKyAgICBkb1RleHRUZXN0KAorICAgICAgImVudW0gVGVzdCB7RklSU1QsIFNFQ09ORCwgVEhJSUlJSUlJSUlJSUlJSUlJSVJSREREREREREREREREREQsIEZPVVJUSEhISEhISEhISEhISEhISH0iLAorCisgICAgICAiZW51bSBUZXN0IHtcbiIgKworICAgICAgIiAgICBGSVJTVCwgU0VDT05ELCBUSElJSUlJSUlJSUlJSUlJSUlJUlJERERERERERERERERERCwgRk9VUlRISEhISEhISEhISEhISEhIXG4iICsKKyAgICAgICJ9IgorICAgICk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0TWV0aG9kQW5ub3RhdGlvbkZvbGxvd2VkQnlTaW5nbGVMaW5lQ29tbWVudCgpIHRocm93cyBFeGNlcHRpb24geworICAgIC8vIEluc3BpcmVkIGJ5IElERUEtMjI4MDgKKyAgICBnZXRTZXR0aW5ncygpLk1FVEhPRF9BTk5PVEFUSU9OX1dSQVAgPSBDb21tb25Db2RlU3R5bGVTZXR0aW5ncy5XUkFQX0FMV0FZUzsKKworICAgIFN0cmluZyB0ZXh0ID0KKyAgICAgICJAVGVzdC8vbXljb21tZW50XG4iICsKKyAgICAgICJwdWJsaWMgdm9pZCBmb28oKSB7XG4iICsKKyAgICAgICJ9IjsKKyAgICAKKyAgICAvLyBFeHBlY3RpbmcgdGhlIGNvZGUgdG8gYmUgbGVmdCBhcy1pcworICAgIGRvQ2xhc3NUZXN0KHRleHQsIHRleHQpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFdyYXBDb21wb3VuZFN0cmluZ0xpdGVyYWxUaGF0RW5kc0F0UmlnaHRNYXJnaW4oKSB7CisgICAgLy8gSW5zcGlyZWQgYnkgSURFQS04MjM5OAorICAgIGdldFNldHRpbmdzKCkuZ2V0Um9vdFNldHRpbmdzKCkuUklHSFRfTUFSR0lOID0gMzA7CisgICAgZ2V0U2V0dGluZ3MoKS5nZXRSb290U2V0dGluZ3MoKS5nZXRDb21tb25TZXR0aW5ncyhKYXZhTGFuZ3VhZ2UuSU5TVEFOQ0UpLldSQVBfTE9OR19MSU5FUyA9IHRydWU7CisKKyAgICBmaW5hbCBTdHJpbmcgdGV4dCA9ICJjbGFzcyBUZXN0IHtcbiIgKworICAgICAgICAgICAgICAgICAgICAgICAgIiAgICBTdHJpbmcgcyA9IFwiZmlyc3QgbGluZSBcIiArXG4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICIgICAgICAgICAgICArXCJzZWNvbmQgbGluZVwiO1xuIiArCisgICAgICAgICAgICAgICAgICAgICAgICAifSI7CisgICAgZG9UZXh0VGVzdCh0ZXh0LCB0ZXh0KTsKKyAgfQorICAKKyAgcHVibGljIHZvaWQgdGVzdFdyYXBMb25nTGluZSgpIHsKKyAgICAvLyBJbnNwaXJlZCBieSBJREVBLTU1NzgyCisgICAgZ2V0U2V0dGluZ3MoKS5nZXRSb290U2V0dGluZ3MoKS5SSUdIVF9NQVJHSU4gPSA1MDsKKyAgICBnZXRTZXR0aW5ncygpLmdldFJvb3RTZXR0aW5ncygpLmdldENvbW1vblNldHRpbmdzKEphdmFMYW5ndWFnZS5JTlNUQU5DRSkuV1JBUF9MT05HX0xJTkVTID0gdHJ1ZTsKKworICAgIGRvVGV4dFRlc3QoCisgICAgICAiY2xhc3MgVGVzdENsYXNzIHtcbiIgKworICAgICAgIiAgICAvLyBTaW5nbGUgbGluZSBjb21tZW50IHRoYXQgaXMgbG9uZyBlbm91Z2ggdG8gZXhjZWVkIHJpZ2h0IG1hcmdpblxuIiArCisgICAgICAiICAgIC8qIE11bHRpIGxpbmUgY29tbWVudCB0aGF0IGlzIGxvbmcgZW5vdWdoIHRvIGV4Y2VlZCByaWdodCBtYXJnaW4qL1xuIiArCisgICAgICAiICAgIC8qKlxuIiArCisgICAgICAiICAgICAgSmF2YWRvYyBjb21tZW50IHRoYXQgaXMgbG9uZyBlbm91Z2ggdG8gZXhjZWVkIHJpZ2h0IG1hcmdpbiIgKworICAgICAgIiAgICAgKi9cbiIgKworICAgICAgIiAgICAgcHVibGljIFN0cmluZyBzID0gXCJ0aGlzIGlzIGEgc3RyaW5nIHRoYXQgaXMgbG9uZyBlbm91Z2ggdG8gYmUgd3JhcHBlZFwiXG4iICsKKyAgICAgICJ9IiwKKyAgICAgICJjbGFzcyBUZXN0Q2xhc3Mge1xuIiArCisgICAgICAiICAgIC8vIFNpbmdsZSBsaW5lIGNvbW1lbnQgdGhhdCBpcyBsb25nIGVub3VnaCBcbiIgKworICAgICAgIiAgICAvLyB0byBleGNlZWQgcmlnaHQgbWFyZ2luXG4iICsKKyAgICAgICIgICAgLyogTXVsdGkgbGluZSBjb21tZW50IHRoYXQgaXMgbG9uZyBlbm91Z2ggXG4iICsKKyAgICAgICIgICAgdG8gZXhjZWVkIHJpZ2h0IG1hcmdpbiovXG4iICsKKyAgICAgICIgICAgLyoqXG4iICsKKyAgICAgICIgICAgICogSmF2YWRvYyBjb21tZW50IHRoYXQgaXMgbG9uZyBlbm91Z2ggdG8gXG4iICsKKyAgICAgICIgICAgICogZXhjZWVkIHJpZ2h0IG1hcmdpblxuIiArCisgICAgICAiICAgICAqL1xuIiArCisgICAgICAiICAgIHB1YmxpYyBTdHJpbmcgcyA9IFwidGhpcyBpcyBhIHN0cmluZyB0aGF0IGlzXCIgK1xuIiArCisgICAgICAiICAgICAgICAgICAgXCIgbG9uZyBlbm91Z2ggdG8gYmUgd3JhcHBlZFwiXG4iICsKKyAgICAgICJ9IgorICAgICk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0V3JhcExvbmdMaW5lV2l0aFRhYnMoKSB7CisgICAgLy8gSW5zcGlyZWQgYnkgSURFQS01NTc4MgorICAgIGdldFNldHRpbmdzKCkuZ2V0Um9vdFNldHRpbmdzKCkuUklHSFRfTUFSR0lOID0gMjA7CisgICAgZ2V0U2V0dGluZ3MoKS5nZXRSb290U2V0dGluZ3MoKS5nZXRDb21tb25TZXR0aW5ncyhKYXZhTGFuZ3VhZ2UuSU5TVEFOQ0UpLldSQVBfTE9OR19MSU5FUyA9IHRydWU7CisgICAgZ2V0SW5kZW50T3B0aW9ucygpLlVTRV9UQUJfQ0hBUkFDVEVSID0gdHJ1ZTsKKyAgICBnZXRJbmRlbnRPcHRpb25zKCkuVEFCX1NJWkUgPSA0OworCisgICAgZG9UZXh0VGVzdCgKKyAgICAgICJjbGFzcyBUZXN0Q2xhc3Mge1xuIiArCisgICAgICAiXHQgXHQgICAvL1RoaXMgaXMgYSBjb21tZW50XG4iICsKKyAgICAgICJ9IiwKKyAgICAgICJjbGFzcyBUZXN0Q2xhc3Mge1xuIiArCisgICAgICAiXHQvL1RoaXMgaXMgYSBcbiIgKworICAgICAgIlx0Ly8gY29tbWVudFxuIiArCisgICAgICAifSIKKyAgICApOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFdyYXBMb25nTGluZVdpdGhTZWxlY3Rpb24oKSB7CisgICAgLy8gSW5zcGlyZWQgYnkgSURFQS01NTc4MgorICAgIGdldFNldHRpbmdzKCkuZ2V0Um9vdFNldHRpbmdzKCkuUklHSFRfTUFSR0lOID0gMjA7CisgICAgZ2V0U2V0dGluZ3MoKS5nZXRSb290U2V0dGluZ3MoKS5nZXRDb21tb25TZXR0aW5ncyhKYXZhTGFuZ3VhZ2UuSU5TVEFOQ0UpLldSQVBfTE9OR19MSU5FUyA9IHRydWU7CisKKyAgICBTdHJpbmcgaW5pdGlhbCA9CisgICAgICAiY2xhc3MgVGVzdENsYXNzIHtcbiIgKworICAgICAgIiAgICAvL1RoaXMgaXMgYSBjb21tZW50XG4iICsKKyAgICAgICIgICAgLy9UaGlzIGlzIGFub3RoZXIgY29tbWVudFxuIiArCisgICAgICAifSI7CisKKyAgICBpbnQgc3RhcnQgPSBpbml0aWFsLmluZGV4T2YoIi8vIik7CisgICAgaW50IGVuZCA9IGluaXRpYWwuaW5kZXhPZigiY29tbWVudCIpOworICAgIG15VGV4dFJhbmdlID0gbmV3IFRleHRSYW5nZShzdGFydCwgZW5kKTsKKyAgICBkb1RleHRUZXN0KGluaXRpYWwsIGluaXRpYWwpOworCisgICAgbXlMaW5lUmFuZ2UgPSBuZXcgVGV4dFJhbmdlKDEsIDEpOworICAgIGRvVGV4dFRlc3QoCisgICAgICBpbml0aWFsLAorICAgICAgImNsYXNzIFRlc3RDbGFzcyB7XG4iICsKKyAgICAgICIgICAgLy9UaGlzIGlzIGEgXG4iICsKKyAgICAgICIgICAgLy8gY29tbWVudFxuIiArCisgICAgICAiICAgIC8vVGhpcyBpcyBhbm90aGVyIGNvbW1lbnRcbiIgKworICAgICAgIn0iCisgICAgKTsKKyAgfQorICAKKyAgcHVibGljIHZvaWQgdGVzdFdyYXBNZXRob2RBbm5vdGF0aW9uQmVmb3JlUGFyYW1zKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgLy8gSW5zcGlyZWQgYnkgSURFQS01OTUzNgorICAgIGdldFNldHRpbmdzKCkuZ2V0Um9vdFNldHRpbmdzKCkuUklHSFRfTUFSR0lOID0gOTA7CisgICAgZ2V0U2V0dGluZ3MoKS5NRVRIT0RfQU5OT1RBVElPTl9XUkFQID0gQ29tbW9uQ29kZVN0eWxlU2V0dGluZ3MuV1JBUF9BU19ORUVERUQ7CisgICAgZ2V0U2V0dGluZ3MoKS5NRVRIT0RfUEFSQU1FVEVSU19XUkFQID0gQ29tbW9uQ29kZVN0eWxlU2V0dGluZ3MuV1JBUF9BU19ORUVERUQ7CisgICAgCisgICAgZG9DbGFzc1Rlc3QoCisgICAgICAiQFN1cHByZXNzV2FybmluZ3Moe1wiU29tZUluc3BlY3Rpb25JV2FudFRvSWdub3JlXCJ9KSBwdWJsaWMgdm9pZCBkb1NvbWV0aGluZyhpbnQgeCwgaW50IHkpIHt9IiwKKyAgICAgICJAU3VwcHJlc3NXYXJuaW5ncyh7XCJTb21lSW5zcGVjdGlvbklXYW50VG9JZ25vcmVcIn0pXG4iICsKKyAgICAgICJwdWJsaWMgdm9pZCBkb1NvbWV0aGluZyhpbnQgeCwgaW50IHkpIHsiICsKKyAgICAgICJcbn0iCisgICAgKTsKKyAgfQorICAKKyAgcHVibGljIHZvaWQgdGVzdE11bHRpcGxlRXhwcmVzc2lvbkluU2FtZUxpbmUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAvLyBJbnNwaXJlZCBieSBJREVBLTY0OTc1LgorICAgIAorICAgIGdldFNldHRpbmdzKCkuS0VFUF9NVUxUSVBMRV9FWFBSRVNTSU9OU19JTl9PTkVfTElORSA9IHRydWU7CisgICAgZG9NZXRob2RUZXN0KAorICAgICAgImludCBpID0gMTsgaW50IGogPSAyOyIsCisgICAgICAiaW50IGkgPSAxOyBpbnQgaiA9IDI7IgorICAgICk7CisKKyAgICBnZXRTZXR0aW5ncygpLktFRVBfTVVMVElQTEVfRVhQUkVTU0lPTlNfSU5fT05FX0xJTkUgPSBmYWxzZTsKKyAgICBkb01ldGhvZFRlc3QoCisgICAgICAiaW50IGkgPSAxOyBpbnQgaiA9IDI7IiwKKyAgICAgICJpbnQgaSA9IDE7XG4iICsKKyAgICAgICJpbnQgaiA9IDI7IgorICAgICk7CisgIH0KKyAgCisgIHB1YmxpYyB2b2lkIHRlc3RJbmNvbXBsZXRlRmllbGRBbmRBbm5vdGF0aW9uV3JhcCgpIHRocm93cyBFeGNlcHRpb24geworICAgIC8vIEluc3BpcmVkIGJ5IElERUEtNjQ3MjUKKyAgICAKKyAgICBnZXRTZXR0aW5ncygpLkZJRUxEX0FOTk9UQVRJT05fV1JBUCA9IENvbW1vbkNvZGVTdHlsZVNldHRpbmdzLkRPX05PVF9XUkFQOworICAgIGRvQ2xhc3NUZXN0KAorICAgICAgIkBOb3ROdWxsIENvbXBhcmFibGU8U3RyaW5nPiIsCisgICAgICAiQE5vdE51bGwgQ29tcGFyYWJsZTxTdHJpbmc+IgorICAgICk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0UmVzb3VyY2VMaXN0V3JhcCgpIHRocm93cyBFeGNlcHRpb24geworICAgIGdldFNldHRpbmdzKCkuS0VFUF9TSU1QTEVfQkxPQ0tTX0lOX09ORV9MSU5FID0gdHJ1ZTsKKyAgICBnZXRTZXR0aW5ncygpLmdldFJvb3RTZXR0aW5ncygpLlJJR0hUX01BUkdJTiA9IDQwOworICAgIGdldFNldHRpbmdzKCkuUkVTT1VSQ0VfTElTVF9XUkFQID0gQ29tbW9uQ29kZVN0eWxlU2V0dGluZ3MuV1JBUF9BU19ORUVERUQ7CisgICAgZG9NZXRob2RUZXN0KCJ0cnkgKE15UmVzb3VyY2UgcjEgPSBudWxsOyBNeVJlc291cmNlIHIyID0gbnVsbCkgeyB9IiwKKyAgICAgICAgICAgICAgICAgInRyeSAoTXlSZXNvdXJjZSByMSA9IG51bGw7XG4iICsKKyAgICAgICAgICAgICAgICAgIiAgICAgTXlSZXNvdXJjZSByMiA9IG51bGwpIHsgfSIpOworCisgICAgZ2V0U2V0dGluZ3MoKS5SRVNPVVJDRV9MSVNUX0xQQVJFTl9PTl9ORVhUX0xJTkUgPSB0cnVlOworICAgIGdldFNldHRpbmdzKCkuUkVTT1VSQ0VfTElTVF9SUEFSRU5fT05fTkVYVF9MSU5FID0gdHJ1ZTsKKyAgICBkb01ldGhvZFRlc3QoInRyeSAoTXlSZXNvdXJjZSByMSA9IG51bGw7IE15UmVzb3VyY2UgcjIgPSBudWxsKSB7IH0iLAorICAgICAgICAgICAgICAgICAidHJ5IChcbiIgKworICAgICAgICAgICAgICAgICAiICAgICAgICBNeVJlc291cmNlIHIxID0gbnVsbDtcbiIgKworICAgICAgICAgICAgICAgICAiICAgICAgICBNeVJlc291cmNlIHIyID0gbnVsbFxuIiArCisgICAgICAgICAgICAgICAgICIpIHsgfSIpOworICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovcHNpL2Zvcm1hdHRlci9qYXZhL0phdmFJbmRlbnRlclRlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9wc2kvZm9ybWF0dGVyL2phdmEvSmF2YUluZGVudGVyVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY5NjE4NzcKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovcHNpL2Zvcm1hdHRlci9qYXZhL0phdmFJbmRlbnRlclRlc3QuamF2YQpAQCAtMCwwICsxLDk0IEBACisvKgorICogQ29weXJpZ2h0IDIwMDAtMjAxMCBKZXRCcmFpbnMgcy5yLm8uCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworcGFja2FnZSBjb20uaW50ZWxsaWoucHNpLmZvcm1hdHRlci5qYXZhOworCitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkudXRpbC5UZXh0UmFuZ2U7CitpbXBvcnQgY29tLmludGVsbGlqLnV0aWwuSW5jb3JyZWN0T3BlcmF0aW9uRXhjZXB0aW9uOworCisvKioKKyAqIEBhdXRob3IgRGVuaXMgWmhkYW5vdgorICogQHNpbmNlIE1heSAxMSwgMjAxMCA1OjMwOjI4IFBNCisgKi8KK3B1YmxpYyBjbGFzcyBKYXZhSW5kZW50ZXJUZXN0IGV4dGVuZHMgQWJzdHJhY3RKYXZhRm9ybWF0dGVyVGVzdCB7CisKKyAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIENBUkVUX1RPS0VOID0gIjxjYXJldD4iOworCisgIHB1YmxpYyB2b2lkIHRlc3RJbmRlbnRBbGlnbmVkTWV0aG9kUGFyYW1ldGVyKCkgeworICAgIC8vIEluc3BpcmVkIGJ5IElERUEtMjIwMjAKKyAgICBnZXRTZXR0aW5ncygpLkFMSUdOX01VTFRJTElORV9QQVJBTUVURVJTX0lOX0NBTExTID0gdHJ1ZTsKKworICAgIFN0cmluZyBpbml0aWFsID0KKyAgICAgICJjbGFzcyBCcm9rZW5BbGlnbm1lbnQge1xuIiArCisgICAgICAiICAgIHB1YmxpY1xuIiArCisgICAgICAiXHRzdGF0aWMgaW50IGZvbyhTdHJpbmcgYSwgU3RyaW5nIGIsIFN0cmluZyBjLFxuIiArCisgICAgICAiICAgICAgICBTdHJpbmcgZCkge1xuIiArCisgICAgICAiICAgICAgICByZXR1cm4gLTE7XG4iICsKKyAgICAgICIgICAgfVxuIiArCisgICAgICAifSI7CisKKyAgICBpbnQgc3RhcnQgPSBpbml0aWFsLmluZGV4T2YoIiAgICAgICAgU3RyaW5nIGQiKTsKKyAgICBpbnQgZW5kID0gaW5pdGlhbC5pbmRleE9mKCJcbiIsIHN0YXJ0KTsKKyAgICBteVRleHRSYW5nZSA9IG5ldyBUZXh0UmFuZ2Uoc3RhcnQsIGVuZCk7CisKKyAgICBkb1RleHRUZXN0KGluaXRpYWwsICAgICAgICAgICAgICAgICAgICAgCisgICAgICAiY2xhc3MgQnJva2VuQWxpZ25tZW50IHtcbiIgKworICAgICAgIiAgICBwdWJsaWNcbiIgKworICAgICAgIlx0c3RhdGljIGludCBmb28oU3RyaW5nIGEsIFN0cmluZyBiLCBTdHJpbmcgYyxcbiIgKworICAgICAgIiAgICAgICAgICAgICAgICAgICBTdHJpbmcgZCkge1xuIiArCisgICAgICAiICAgICAgICByZXR1cm4gLTE7XG4iICsKKyAgICAgICIgICAgfVxuIiArCisgICAgICAifSIKKyAgICApOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdE1ldGhvZEJvZHlTaGlmdGVkVG9Db21tZW50KCkgeworICAgIC8vIEluc3BpcmVkIGJ5IElERUEtNTM3NzgKKworICAgIGRvVGV4dFRlc3QoCisgICAgICAiY2xhc3MgVGVzdCB7XG4iICsKKyAgICAgICIgICAvLyBzb21lIGNvbW1lbnRcbiIgKworICAgICAgIiAgICAgICAgcHVibGljIHZvaWQgZG9TbXRoKGludFtdIHApIHtcbiIgKworICAgICAgIjxjYXJldD5cbiIgKworICAgICAgIiAgICAgICAgfSIgKworICAgICAgIn0iLAorICAgICAgCisgICAgICAiY2xhc3MgVGVzdCB7XG4iICsKKyAgICAgICIgICAvLyBzb21lIGNvbW1lbnRcbiIgKworICAgICAgIiAgICAgICAgcHVibGljIHZvaWQgZG9TbXRoKGludFtdIHApIHtcbiIgKworICAgICAgIiAgICAgICAgICAgIFxuIiArCisgICAgICAiICAgICAgICB9IiArCisgICAgICAifSIpOworICB9CisKKyAgQE92ZXJyaWRlCisgIHB1YmxpYyB2b2lkIGRvVGV4dFRlc3QoU3RyaW5nIHRleHQsIFN0cmluZyB0ZXh0QWZ0ZXIpIHRocm93cyBJbmNvcnJlY3RPcGVyYXRpb25FeGNlcHRpb24geworICAgIGRvVGV4dFRlc3QoQWN0aW9uLklOREVOVCwgYWRqdXN0VGV4dElmTmVjZXNzYXJ5KHRleHQpLCB0ZXh0QWZ0ZXIpOworICB9CisKKyAgcHJpdmF0ZSBTdHJpbmcgYWRqdXN0VGV4dElmTmVjZXNzYXJ5KFN0cmluZyB0ZXh0KSB7CisgICAgaW50IGNhcmV0SW5kZXggPSB0ZXh0LmluZGV4T2YoQ0FSRVRfVE9LRU4pOworICAgIGlmIChjYXJldEluZGV4IDwgMCkgeworICAgICAgcmV0dXJuIHRleHQ7CisgICAgfQorCisgICAgaWYgKGNhcmV0SW5kZXggPCB0ZXh0Lmxlbmd0aCgpICYmIHRleHQuaW5kZXhPZihDQVJFVF9UT0tFTiwgY2FyZXRJbmRleCArIDEpID49IDApIHsKKyAgICAgIGZhaWwoU3RyaW5nLmZvcm1hdCgiSW52YWxpZCBpbmRlbnRhdGlvbiB0ZXN0ICdiZWZvcmUnIHRleHQgLSBpdCBjb250YWlucyBtb3JlIHRoYW4gb25lIGNhcmV0IG1ldGEtdG9rZW4gKCVzKS4gVGV4dDogJW4lcyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgQ0FSRVRfVE9LRU4sIHRleHQpKTsKKyAgICB9CisgICAgbXlUZXh0UmFuZ2UgPSBuZXcgVGV4dFJhbmdlKGNhcmV0SW5kZXgsIGNhcmV0SW5kZXgpOworICAgIHJldHVybiB0ZXh0LnN1YnN0cmluZygwLCBjYXJldEluZGV4KSArIHRleHQuc3Vic3RyaW5nKGNhcmV0SW5kZXggKyBDQVJFVF9UT0tFTi5sZW5ndGgoKSk7CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9wc2kvZm9ybWF0dGVyL2phdmEvSmF2YWRvY0Zvcm1hdHRlclRlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9wc2kvZm9ybWF0dGVyL2phdmEvSmF2YWRvY0Zvcm1hdHRlclRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMDFmMGY2Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL3BzaS9mb3JtYXR0ZXIvamF2YS9KYXZhZG9jRm9ybWF0dGVyVGVzdC5qYXZhCkBAIC0wLDAgKzEsMTU4IEBACisvKgorICogQ29weXJpZ2h0IDIwMDAtMjAxMSBKZXRCcmFpbnMgcy5yLm8uCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworcGFja2FnZSBjb20uaW50ZWxsaWoucHNpLmZvcm1hdHRlci5qYXZhOworCisKK2ltcG9ydCBjb20uaW50ZWxsaWoubGFuZy5qYXZhLkphdmFMYW5ndWFnZTsKK2ltcG9ydCBjb20uaW50ZWxsaWoucHNpLmNvZGVTdHlsZS5Db21tb25Db2RlU3R5bGVTZXR0aW5nczsKKworLyoqCisgKiBAYXV0aG9yIERlbmlzIFpoZGFub3YKKyAqIEBzaW5jZSAxLzE4LzExIDM6MTEgUE0KKyAqLworcHVibGljIGNsYXNzIEphdmFkb2NGb3JtYXR0ZXJUZXN0IGV4dGVuZHMgQWJzdHJhY3RKYXZhRm9ybWF0dGVyVGVzdCB7CisKKyAgcHVibGljIHZvaWQgdGVzdFJpZ2h0TWFyZ2luKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZ2V0U2V0dGluZ3MoKS5nZXRSb290U2V0dGluZ3MoKS5nZXRDb21tb25TZXR0aW5ncyhKYXZhTGFuZ3VhZ2UuSU5TVEFOQ0UpLldSQVBfTE9OR19MSU5FUyA9IHRydWU7CisgICAgZ2V0U2V0dGluZ3MoKS5nZXRSb290U2V0dGluZ3MoKS5SSUdIVF9NQVJHSU4gPSAzNTsvLyAgICAgIHwKKyAgICBkb1RleHRUZXN0KAorICAgICAgIi8qKiBIZXJlIGlzIG9uZS1saW5lIGphdmEtZG9jIGNvbW1lbnQgKi8iICsKKyAgICAgICJjbGFzcyBGb28ge1xuIiArCisgICAgICAifSIsCisgICAgICAiLyoqXG4iICsKKyAgICAgICIgKiBIZXJlIGlzIG9uZS1saW5lIGphdmEtZG9jIFxuIiArCisgICAgICAiICogY29tbWVudFxuIiArCisgICAgICAiICovXG4iICsKKyAgICAgICJjbGFzcyBGb28ge1xuIiArCisgICAgICAifSIpOworCisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0TGluZUZlZWRzQXJlUHJlc2VydmVkRHVyaW5nV3JhcCgpIHsKKyAgICAvLyBJbnNwaXJlZCBieSBJREVBLTYxODk1CisgICAgZ2V0U2V0dGluZ3MoKS5nZXRSb290U2V0dGluZ3MoKS5XUkFQX0NPTU1FTlRTID0gdHJ1ZTsKKyAgICBnZXRTZXR0aW5ncygpLmdldFJvb3RTZXR0aW5ncygpLkpEX1BSRVNFUlZFX0xJTkVfRkVFRFMgPSB0cnVlOworICAgIGdldFNldHRpbmdzKCkuZ2V0Um9vdFNldHRpbmdzKCkuUklHSFRfTUFSR0lOID0gNDg7CisgICAgCisgICAgZG9UZXh0VGVzdCgKKyAgICAgICIvKipcbiIgKworICAgICAgIiAqIFRoaXMgaXMgYSBsb25nIGNvbW1lbnQgdGhhdCBzcGFucyBtb3JlIHRoYW4gb25lXG4iICsKKyAgICAgICIgKiBsaW5lXG4iICsKKyAgICAgICIgKi9cbiIgKworICAgICAgImNsYXNzIFRlc3Qge1xuIiArCisgICAgICAifSIsCisgICAgICAiLyoqXG4iICsKKyAgICAgICIgKiBUaGlzIGlzIGEgbG9uZyBjb21tZW50IHRoYXQgc3BhbnMgbW9yZSB0aGFuXG4iICsKKyAgICAgICIgKiBvbmVcbiIgKworICAgICAgIiAqIGxpbmVcbiIgKworICAgICAgIiAqL1xuIiArCisgICAgICAiY2xhc3MgVGVzdCB7XG4iICsKKyAgICAgICJ9IgorICAgICk7CisgIH0KKyAgCisgIHB1YmxpYyB2b2lkIHRlc3RTQ1IxMTI5NigpIHRocm93cyBFeGNlcHRpb24geworICAgIGZpbmFsIENvbW1vbkNvZGVTdHlsZVNldHRpbmdzIHNldHRpbmdzID0gZ2V0U2V0dGluZ3MoKTsKKyAgICBzZXR0aW5ncy5nZXRSb290U2V0dGluZ3MoKS5SSUdIVF9NQVJHSU4gPSA1MDsKKyAgICBzZXR0aW5ncy5nZXRSb290U2V0dGluZ3MoKS5XUkFQX0NPTU1FTlRTID0gdHJ1ZTsKKyAgICBzZXR0aW5ncy5nZXRSb290U2V0dGluZ3MoKS5FTkFCTEVfSkFWQURPQ19GT1JNQVRUSU5HID0gdHJ1ZTsKKyAgICBzZXR0aW5ncy5nZXRSb290U2V0dGluZ3MoKS5KRF9QX0FUX0VNUFRZX0xJTkVTID0gZmFsc2U7CisgICAgc2V0dGluZ3MuZ2V0Um9vdFNldHRpbmdzKCkuSkRfS0VFUF9FTVBUWV9MSU5FUyA9IGZhbHNlOworICAgIGRvVGVzdCgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFNDUjI2MzIoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBnZXRTZXR0aW5ncygpLmdldFJvb3RTZXR0aW5ncygpLkVOQUJMRV9KQVZBRE9DX0ZPUk1BVFRJTkcgPSB0cnVlOworICAgIGdldFNldHRpbmdzKCkuZ2V0Um9vdFNldHRpbmdzKCkuV1JBUF9DT01NRU5UUyA9IHRydWU7CisgICAgZ2V0U2V0dGluZ3MoKS5nZXRSb290U2V0dGluZ3MoKS5SSUdIVF9NQVJHSU4gPSAyMDsKKworICAgIGRvVGV4dFRlc3QoIi8qKlxuIiArICIgKiA8cCAvPlxuIiArICIgKiBBbm90aGVyIHBhcmFncmFwaCBvZiB0aGUgZGVzY3JpcHRpb24gcGxhY2VkIGFmdGVyIGJsYW5rIGxpbmUuXG4iICsgIiAqL1xuIiArICJjbGFzcyBBe30iLAorICAgICAgICAgICAgICAgIi8qKlxuIiArCisgICAgICAgICAgICAgICAiICogPHAvPlxuIiArCisgICAgICAgICAgICAgICAiICogQW5vdGhlciBwYXJhZ3JhcGhcbiIgKworICAgICAgICAgICAgICAgIiAqIG9mIHRoZSBkZXNjcmlwdGlvblxuIiArCisgICAgICAgICAgICAgICAiICogcGxhY2VkIGFmdGVyXG4iICsKKyAgICAgICAgICAgICAgICIgKiBibGFuayBsaW5lLlxuIiArCisgICAgICAgICAgICAgICAiICovXG4iICsKKyAgICAgICAgICAgICAgICJjbGFzcyBBIHtcbiIgKworICAgICAgICAgICAgICAgIn0iKTsKKyAgfQorICAKKyAgcHVibGljIHZvaWQgdGVzdFBhcmFncmFwaFRhZ0dlbmVyYXRpb24oKSB7CisgICAgLy8gSW5zcGlyZWQgYnkgSURFQS02MTgxMQorICAgIGdldFNldHRpbmdzKCkuZ2V0Um9vdFNldHRpbmdzKCkuRU5BQkxFX0pBVkFET0NfRk9STUFUVElORyA9IHRydWU7CisgICAgZ2V0U2V0dGluZ3MoKS5nZXRSb290U2V0dGluZ3MoKS5KRF9QX0FUX0VNUFRZX0xJTkVTID0gdHJ1ZTsKKyAgICBkb1RleHRUZXN0KAorICAgICAgIi8qKlxuIiArCisgICAgICAiICogbGluZSAxXG4iICsKKyAgICAgICIgKlxuIiArCisgICAgICAiICogbGluZSAyXG4iICsKKyAgICAgICIgKiA8cHJlPlxuIiArCisgICAgICAiICogICBsaW5lIDNcbiIgKworICAgICAgIiAqXG4iICsKKyAgICAgICIgKiAgIGxpbmUgNFxuIiArCisgICAgICAiICogPC9wcmU+XG4iICsKKyAgICAgICIgKi9cbiIgKworICAgICAgImNsYXNzIFRlc3Qge1xuIiArCisgICAgICAifSIsCisgICAgICAiLyoqXG4iICsKKyAgICAgICIgKiBsaW5lIDFcbiIgKworICAgICAgIiAqIDxwLz5cbiIgKworICAgICAgIiAqIGxpbmUgMlxuIiArCisgICAgICAiICogPHByZT5cbiIgKworICAgICAgIiAqICAgbGluZSAzXG4iICsKKyAgICAgICIgKlxuIiArCisgICAgICAiICogICBsaW5lIDRcbiIgKworICAgICAgIiAqIDwvcHJlPlxuIiArCisgICAgICAiICovXG4iICsKKyAgICAgICJjbGFzcyBUZXN0IHtcbiIgKworICAgICAgIn0iCisgICAgKTsKKyAgfQorICAKKyAgcHVibGljIHZvaWQgdGVzdFdyYXBwZWRQYXJhbWV0ZXJEZXNjcmlwdGlvbigpIHRocm93cyBFeGNlcHRpb24geworICAgIC8vIEluc3BpcmVkIGJ5IElERUEtMTMwNzIKKyAgICBnZXRTZXR0aW5ncygpLmdldFJvb3RTZXR0aW5ncygpLkVOQUJMRV9KQVZBRE9DX0ZPUk1BVFRJTkcgPSB0cnVlOworICAgIGdldFNldHRpbmdzKCkuZ2V0Um9vdFNldHRpbmdzKCkuV1JBUF9DT01NRU5UUyA9IHRydWU7CisgICAgZ2V0U2V0dGluZ3MoKS5nZXRSb290U2V0dGluZ3MoKS5KRF9QQVJBTV9ERVNDUklQVElPTl9PTl9ORVdfTElORSA9IHRydWU7CisgICAgZG9DbGFzc1Rlc3QoCisgICAgICAiLyoqXG4iICsKKyAgICAgICIgKiB0ZXN0IGRlc2NyaXB0aW9uXG4iICsKKyAgICAgICIgKiBAcGFyYW0gZmlyc3QgZmlyc3QgZGVzY3JpcHRpb25cbiIgKworICAgICAgIiAqIEBwYXJhbSBzZWNvbmRcbiIgKworICAgICAgIiAqIEBwYXJhbSB0aGlyZCB0aGlyZFxuIiArCisgICAgICAiICogICAgICAgICAgICAgIGRlc2NyaXB0aW9uXG4iICsKKyAgICAgICIgKiBAcGFyYW0gZm9ydGhcbiIgKworICAgICAgIiAqICAgICAgICAgIGZvcnRoIGRlc2NyaXB0aW9uXG4iICsKKyAgICAgICIgKi9cbiIgKworICAgICAgInZvaWQgdGVzdChpbnQgZmlyc3QsIGludCBzZWNvbmQsIGludCB0aGlyZCwgaW50IGZvcnRoKSB7XG4iICsKKyAgICAgICJ9IiwKKyAgICAgICIvKipcbiIgKworICAgICAgIiAqIHRlc3QgZGVzY3JpcHRpb25cbiIgKworICAgICAgIiAqXG4iICsKKyAgICAgICIgKiBAcGFyYW0gZmlyc3RcbiIgKworICAgICAgIiAqICAgICAgICAgZmlyc3QgZGVzY3JpcHRpb25cbiIgKworICAgICAgIiAqIEBwYXJhbSBzZWNvbmRcbiIgKworICAgICAgIiAqIEBwYXJhbSB0aGlyZFxuIiArCisgICAgICAiICogICAgICAgICB0aGlyZCBkZXNjcmlwdGlvblxuIiArCisgICAgICAiICogQHBhcmFtIGZvcnRoXG4iICsKKyAgICAgICIgKiAgICAgICAgIGZvcnRoIGRlc2NyaXB0aW9uXG4iICsKKyAgICAgICIgKi9cbiIgKworICAgICAgInZvaWQgdGVzdChpbnQgZmlyc3QsIGludCBzZWNvbmQsIGludCB0aGlyZCwgaW50IGZvcnRoKSB7XG4iICsKKyAgICAgICJ9IgorICAgICk7CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9wc2kvaW1wbC9jYWNoZS9pbXBsL0lkQ2FjaGVUZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovcHNpL2ltcGwvY2FjaGUvaW1wbC9JZENhY2hlVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI4NmVlZjAKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovcHNpL2ltcGwvY2FjaGUvaW1wbC9JZENhY2hlVGVzdC5qYXZhCkBAIC0wLDAgKzEsMjY5IEBACisvKgorICogQ29weXJpZ2h0IDIwMDAtMjAxMiBKZXRCcmFpbnMgcy5yLm8uCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworcGFja2FnZSBjb20uaW50ZWxsaWoucHNpLmltcGwuY2FjaGUuaW1wbDsKKworaW1wb3J0IGNvbS5pbnRlbGxpai5KYXZhVGVzdFV0aWw7CitpbXBvcnQgY29tLmludGVsbGlqLmNvZGVJbnNpZ2h0LkNvZGVJbnNpZ2h0VGVzdENhc2U7CitpbXBvcnQgY29tLmludGVsbGlqLmlkZS50b2RvLlRvZG9Db25maWd1cmF0aW9uOworaW1wb3J0IGNvbS5pbnRlbGxpai5pZGUudG9kby5Ub2RvSW5kZXhQYXR0ZXJuUHJvdmlkZXI7CitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkuZmlsZUVkaXRvci5GaWxlRG9jdW1lbnRNYW5hZ2VyOworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLnByb2plY3RSb290cy5pbXBsLkphdmFTZGtJbXBsOworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLnV0aWwuaW8uRmlsZVV0aWw7CitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkudmZzLlZmc1V0aWw7CitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkudmZzLlZpcnR1YWxGaWxlOworaW1wb3J0IGNvbS5pbnRlbGxpai5wc2kuUHNpRG9jdW1lbnRNYW5hZ2VyOworaW1wb3J0IGNvbS5pbnRlbGxpai5wc2kuUHNpRmlsZTsKK2ltcG9ydCBjb20uaW50ZWxsaWoucHNpLmltcGwuY2FjaGUuQ2FjaGVNYW5hZ2VyOworaW1wb3J0IGNvbS5pbnRlbGxpai5wc2kuaW1wbC5jYWNoZS5Ub2RvQ2FjaGVNYW5hZ2VyOworaW1wb3J0IGNvbS5pbnRlbGxpai5wc2kuaW1wbC5jYWNoZS5pbXBsLmlkLklkSW5kZXg7CitpbXBvcnQgY29tLmludGVsbGlqLnBzaS5pbXBsLmNhY2hlLmltcGwudG9kby5Ub2RvSW5kZXg7CitpbXBvcnQgY29tLmludGVsbGlqLnBzaS5zZWFyY2guR2xvYmFsU2VhcmNoU2NvcGU7CitpbXBvcnQgY29tLmludGVsbGlqLnBzaS5zZWFyY2guVG9kb0F0dHJpYnV0ZXM7CitpbXBvcnQgY29tLmludGVsbGlqLnBzaS5zZWFyY2guVG9kb1BhdHRlcm47CitpbXBvcnQgY29tLmludGVsbGlqLnBzaS5zZWFyY2guVXNhZ2VTZWFyY2hDb250ZXh0OworaW1wb3J0IGNvbS5pbnRlbGxpai50ZXN0RnJhbWV3b3JrLklkZWFUZXN0VXRpbDsKK2ltcG9ydCBjb20uaW50ZWxsaWoudGVzdEZyYW1ld29yay5Qc2lUZXN0VXRpbDsKK2ltcG9ydCBjb20uaW50ZWxsaWoudXRpbC5BcnJheVV0aWw7CitpbXBvcnQgY29tLmludGVsbGlqLnV0aWwuaW5kZXhpbmcuRmlsZUJhc2VkSW5kZXg7CisKK2ltcG9ydCBqYXZhLmlvLkZpbGU7CitpbXBvcnQgamF2YS51dGlsLkFycmF5czsKK2ltcG9ydCBqYXZhLnV0aWwuQ29tcGFyYXRvcjsKKworcHVibGljIGNsYXNzIElkQ2FjaGVUZXN0IGV4dGVuZHMgQ29kZUluc2lnaHRUZXN0Q2FzZXsKKworICBwcml2YXRlIFZpcnR1YWxGaWxlIG15Um9vdERpcjsKKyAgcHJpdmF0ZSBGaWxlIG15Q2FjaGVGaWxlOworCisgIEBPdmVycmlkZQorICBwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24geworICAgIHN1cGVyLnNldFVwKCk7CisKKyAgICBGaWxlQmFzZWRJbmRleC5nZXRJbnN0YW5jZSgpLnJlcXVlc3RSZWJ1aWxkKElkSW5kZXguTkFNRSk7CisgICAgRmlsZUJhc2VkSW5kZXguZ2V0SW5zdGFuY2UoKS5yZXF1ZXN0UmVidWlsZChUb2RvSW5kZXguTkFNRSk7CisKKyAgICBTdHJpbmcgcm9vdCA9IEphdmFUZXN0VXRpbC5nZXRKYXZhVGVzdERhdGFQYXRoKCkrICIvcHNpL2ltcGwvY2FjaGUvIjsKKworICAgIFBzaVRlc3RVdGlsLnJlbW92ZUFsbFJvb3RzKG15TW9kdWxlLCBJZGVhVGVzdFV0aWwuZ2V0TW9ja0pkazE3KCkpOworICAgIG15Um9vdERpciA9IFBzaVRlc3RVdGlsLmNyZWF0ZVRlc3RQcm9qZWN0U3RydWN0dXJlKG15UHJvamVjdCwgbXlNb2R1bGUsIHJvb3QsIG15RmlsZXNUb0RlbGV0ZSk7CisKKyAgICBteUNhY2hlRmlsZSA9IEZpbGVVdGlsLmNyZWF0ZVRlbXBGaWxlKCJjYWNoZSIsICIiKTsKKyAgICBteUNhY2hlRmlsZS5kZWxldGUoKTsKKyAgICBteUZpbGVzVG9EZWxldGUuYWRkKG15Q2FjaGVGaWxlKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RCdWlsZENhY2hlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgY2hlY2tDYWNoZShDYWNoZU1hbmFnZXIuU0VSVklDRS5nZXRJbnN0YW5jZShteVByb2plY3QpLCBUb2RvQ2FjaGVNYW5hZ2VyLlNFUlZJQ0UuZ2V0SW5zdGFuY2UobXlQcm9qZWN0KSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0TG9hZENhY2hlTm9Ub2RvKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisKKyAgICBmaW5hbCBDYWNoZU1hbmFnZXIgY2FjaGUgPSBDYWNoZU1hbmFnZXIuU0VSVklDRS5nZXRJbnN0YW5jZShteVByb2plY3QpOworCisgICAgY2hlY2tSZXN1bHQobmV3IFN0cmluZ1tdeyIxLmphdmEiLCAiMi5qYXZhIn0sIGNvbnZlcnQoY2FjaGUuZ2V0RmlsZXNXaXRoV29yZCgiYiIsIFVzYWdlU2VhcmNoQ29udGV4dC5BTlksIEdsb2JhbFNlYXJjaFNjb3BlLnByb2plY3RTY29wZShteVByb2plY3QpLCBmYWxzZSkpKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RVcGRhdGVDYWNoZTEoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBteVJvb3REaXIuY3JlYXRlQ2hpbGREYXRhKG51bGwsICI0LmphdmEiKTsKKyAgICBUaHJlYWQuc2xlZXAoMTAwMCk7CisgICAgY2hlY2tDYWNoZShDYWNoZU1hbmFnZXIuU0VSVklDRS5nZXRJbnN0YW5jZShteVByb2plY3QpLCBUb2RvQ2FjaGVNYW5hZ2VyLlNFUlZJQ0UuZ2V0SW5zdGFuY2UobXlQcm9qZWN0KSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0VXBkYXRlQ2FjaGUyKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgVmlydHVhbEZpbGUgY2hpbGQgPSBteVJvb3REaXIuZmluZENoaWxkKCIxLmphdmEiKTsKKyAgICBWZnNVdGlsLnNhdmVUZXh0KGNoaWxkLCAieHh4Iik7CisKKyAgICBQc2lEb2N1bWVudE1hbmFnZXIuZ2V0SW5zdGFuY2UobXlQcm9qZWN0KS5jb21taXRBbGxEb2N1bWVudHMoKTsKKyAgICBGaWxlRG9jdW1lbnRNYW5hZ2VyLmdldEluc3RhbmNlKCkuc2F2ZUFsbERvY3VtZW50cygpOworCisgICAgZmluYWwgQ2FjaGVNYW5hZ2VyIGNhY2hlID0gQ2FjaGVNYW5hZ2VyLlNFUlZJQ0UuZ2V0SW5zdGFuY2UobXlQcm9qZWN0KTsKKyAgICBmaW5hbCBUb2RvQ2FjaGVNYW5hZ2VyIHRvZG9jYWNoZSA9IFRvZG9DYWNoZU1hbmFnZXIuU0VSVklDRS5nZXRJbnN0YW5jZShteVByb2plY3QpOworICAgIGZpbmFsIEdsb2JhbFNlYXJjaFNjb3BlIHNjb3BlID0gR2xvYmFsU2VhcmNoU2NvcGUucHJvamVjdFNjb3BlKG15UHJvamVjdCk7CisgICAgY2hlY2tSZXN1bHQobmV3IFN0cmluZ1tdIHsiMS5qYXZhIn0sIGNvbnZlcnQoY2FjaGUuZ2V0RmlsZXNXaXRoV29yZCgieHh4IiwgVXNhZ2VTZWFyY2hDb250ZXh0LkFOWSwgc2NvcGUsIGZhbHNlKSkpOworICAgIGNoZWNrUmVzdWx0KG5ldyBTdHJpbmdbXXt9LCBjb252ZXJ0KGNhY2hlLmdldEZpbGVzV2l0aFdvcmQoImEiLCBVc2FnZVNlYXJjaENvbnRleHQuQU5ZLCBzY29wZSwgZmFsc2UpKSk7CisgICAgY2hlY2tSZXN1bHQobmV3IFN0cmluZ1tdeyIyLmphdmEifSwgY29udmVydChjYWNoZS5nZXRGaWxlc1dpdGhXb3JkKCJiIiwgVXNhZ2VTZWFyY2hDb250ZXh0LkFOWSxzY29wZSwgZmFsc2UpKSk7CisgICAgY2hlY2tSZXN1bHQobmV3IFN0cmluZ1tdeyIyLmphdmEiLCAiMy5qYXZhIn0sIGNvbnZlcnQoY2FjaGUuZ2V0RmlsZXNXaXRoV29yZCgiYyIsIFVzYWdlU2VhcmNoQ29udGV4dC5BTlksc2NvcGUsIGZhbHNlKSkpOworICAgIGNoZWNrUmVzdWx0KG5ldyBTdHJpbmdbXXsiMi5qYXZhIiwgIjMuamF2YSJ9LCBjb252ZXJ0KGNhY2hlLmdldEZpbGVzV2l0aFdvcmQoImQiLCBVc2FnZVNlYXJjaENvbnRleHQuQU5ZLHNjb3BlLCBmYWxzZSkpKTsKKyAgICBjaGVja1Jlc3VsdChuZXcgU3RyaW5nW117IjMuamF2YSJ9LCBjb252ZXJ0KGNhY2hlLmdldEZpbGVzV2l0aFdvcmQoImUiLCBVc2FnZVNlYXJjaENvbnRleHQuQU5ZLHNjb3BlLCBmYWxzZSkpKTsKKworICAgIGNoZWNrUmVzdWx0KG5ldyBTdHJpbmdbXXsiMy5qYXZhIn0sIGNvbnZlcnQodG9kb2NhY2hlLmdldEZpbGVzV2l0aFRvZG9JdGVtcygpKSk7CisgICAgYXNzZXJ0RXF1YWxzKDAsIHRvZG9jYWNoZS5nZXRUb2RvQ291bnQobXlSb290RGlyLmZpbmRDaGlsZCgiMS5qYXZhIiksIFRvZG9JbmRleFBhdHRlcm5Qcm92aWRlci5nZXRJbnN0YW5jZSgpKSk7CisgICAgYXNzZXJ0RXF1YWxzKDAsIHRvZG9jYWNoZS5nZXRUb2RvQ291bnQobXlSb290RGlyLmZpbmRDaGlsZCgiMi5qYXZhIiksIFRvZG9JbmRleFBhdHRlcm5Qcm92aWRlci5nZXRJbnN0YW5jZSgpKSk7CisgICAgYXNzZXJ0RXF1YWxzKDIsIHRvZG9jYWNoZS5nZXRUb2RvQ291bnQobXlSb290RGlyLmZpbmRDaGlsZCgiMy5qYXZhIiksIFRvZG9JbmRleFBhdHRlcm5Qcm92aWRlci5nZXRJbnN0YW5jZSgpKSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0VXBkYXRlQ2FjaGUzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgVmlydHVhbEZpbGUgY2hpbGQgPSBteVJvb3REaXIuZmluZENoaWxkKCIxLmphdmEiKTsKKyAgICBjaGlsZC5kZWxldGUobnVsbCk7CisKKyAgICBmaW5hbCBDYWNoZU1hbmFnZXIgY2FjaGUyID0gQ2FjaGVNYW5hZ2VyLlNFUlZJQ0UuZ2V0SW5zdGFuY2UobXlQcm9qZWN0KTsKKyAgICBmaW5hbCBUb2RvQ2FjaGVNYW5hZ2VyIHRvZG9jYWNoZTIgPSBUb2RvQ2FjaGVNYW5hZ2VyLlNFUlZJQ0UuZ2V0SW5zdGFuY2UobXlQcm9qZWN0KTsKKyAgICBmaW5hbCBHbG9iYWxTZWFyY2hTY29wZSBzY29wZSA9IEdsb2JhbFNlYXJjaFNjb3BlLnByb2plY3RTY29wZShteVByb2plY3QpOworICAgIGNoZWNrUmVzdWx0KEFycmF5VXRpbC5FTVBUWV9TVFJJTkdfQVJSQVksIGNvbnZlcnQoY2FjaGUyLmdldEZpbGVzV2l0aFdvcmQoInh4eCIsIFVzYWdlU2VhcmNoQ29udGV4dC5BTlksIHNjb3BlLCBmYWxzZSkpKTsKKyAgICBjaGVja1Jlc3VsdChBcnJheVV0aWwuRU1QVFlfU1RSSU5HX0FSUkFZLCBjb252ZXJ0KGNhY2hlMi5nZXRGaWxlc1dpdGhXb3JkKCJhIiwgVXNhZ2VTZWFyY2hDb250ZXh0LkFOWSwgc2NvcGUsIGZhbHNlKSkpOworICAgIGNoZWNrUmVzdWx0KG5ldyBTdHJpbmdbXXsiMi5qYXZhIn0sIGNvbnZlcnQoY2FjaGUyLmdldEZpbGVzV2l0aFdvcmQoImIiLCBVc2FnZVNlYXJjaENvbnRleHQuQU5ZLCBzY29wZSwgZmFsc2UpKSk7CisgICAgY2hlY2tSZXN1bHQobmV3IFN0cmluZ1tdeyIyLmphdmEiLCAiMy5qYXZhIn0sIGNvbnZlcnQoY2FjaGUyLmdldEZpbGVzV2l0aFdvcmQoImMiLCBVc2FnZVNlYXJjaENvbnRleHQuQU5ZLCBzY29wZSwgZmFsc2UpKSk7CisgICAgY2hlY2tSZXN1bHQobmV3IFN0cmluZ1tdeyIyLmphdmEiLCAiMy5qYXZhIn0sIGNvbnZlcnQoY2FjaGUyLmdldEZpbGVzV2l0aFdvcmQoImQiLCBVc2FnZVNlYXJjaENvbnRleHQuQU5ZLCBzY29wZSwgZmFsc2UpKSk7CisgICAgY2hlY2tSZXN1bHQobmV3IFN0cmluZ1tdeyIzLmphdmEifSwgY29udmVydChjYWNoZTIuZ2V0RmlsZXNXaXRoV29yZCgiZSIsIFVzYWdlU2VhcmNoQ29udGV4dC5BTlksIHNjb3BlLCBmYWxzZSkpKTsKKworICAgIGNoZWNrUmVzdWx0KG5ldyBTdHJpbmdbXXsiMy5qYXZhIn0sIGNvbnZlcnQodG9kb2NhY2hlMi5nZXRGaWxlc1dpdGhUb2RvSXRlbXMoKSkpOworICAgIGFzc2VydEVxdWFscygwLCB0b2RvY2FjaGUyLmdldFRvZG9Db3VudChteVJvb3REaXIuZmluZENoaWxkKCIyLmphdmEiKSwgVG9kb0luZGV4UGF0dGVyblByb3ZpZGVyLmdldEluc3RhbmNlKCkpKTsKKyAgICBhc3NlcnRFcXVhbHMoMiwgdG9kb2NhY2hlMi5nZXRUb2RvQ291bnQobXlSb290RGlyLmZpbmRDaGlsZCgiMy5qYXZhIiksIFRvZG9JbmRleFBhdHRlcm5Qcm92aWRlci5nZXRJbnN0YW5jZSgpKSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0VXBkYXRlQ2FjaGVOb1RvZG8oKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBteVJvb3REaXIuY3JlYXRlQ2hpbGREYXRhKG51bGwsICI0LmphdmEiKTsKKyAgICBmaW5hbCBHbG9iYWxTZWFyY2hTY29wZSBzY29wZSA9IEdsb2JhbFNlYXJjaFNjb3BlLnByb2plY3RTY29wZShteVByb2plY3QpOworICAgIGZpbmFsIENhY2hlTWFuYWdlciBjYWNoZSA9IENhY2hlTWFuYWdlci5TRVJWSUNFLmdldEluc3RhbmNlKG15UHJvamVjdCk7CisgICAgY2hlY2tSZXN1bHQobmV3IFN0cmluZ1tdeyIxLmphdmEiLCAiMi5qYXZhIn0sIGNvbnZlcnQoY2FjaGUuZ2V0RmlsZXNXaXRoV29yZCgiYiIsIFVzYWdlU2VhcmNoQ29udGV4dC5BTlksIHNjb3BlLCBmYWxzZSkpKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RVcGRhdGVPblRvZG9DaGFuZ2UoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBUb2RvUGF0dGVybiBwYXR0ZXJuID0gbmV3IFRvZG9QYXR0ZXJuKCJuZXd0b2RvIiwgVG9kb0F0dHJpYnV0ZXMuY3JlYXRlRGVmYXVsdCgpLCB0cnVlKTsKKyAgICBUb2RvUGF0dGVybltdIG9sZFBhdHRlcm5zID0gVG9kb0NvbmZpZ3VyYXRpb24uZ2V0SW5zdGFuY2UoKS5nZXRUb2RvUGF0dGVybnMoKTsKKyAgICBUb2RvQ29uZmlndXJhdGlvbi5nZXRJbnN0YW5jZSgpLnNldFRvZG9QYXR0ZXJucyhuZXcgVG9kb1BhdHRlcm5bXXtwYXR0ZXJufSk7CisKKyAgICB0cnl7CisgICAgICBmaW5hbCBUb2RvQ2FjaGVNYW5hZ2VyIHRvZG9jYWNoZSA9IFRvZG9DYWNoZU1hbmFnZXIuU0VSVklDRS5nZXRJbnN0YW5jZShteVByb2plY3QpOworICAgICAgY2hlY2tSZXN1bHQobmV3IFN0cmluZ1tdeyIyLmphdmEifSwgY29udmVydCh0b2RvY2FjaGUuZ2V0RmlsZXNXaXRoVG9kb0l0ZW1zKCkpKTsKKyAgICAgIGFzc2VydEVxdWFscygwLCB0b2RvY2FjaGUuZ2V0VG9kb0NvdW50KG15Um9vdERpci5maW5kQ2hpbGQoIjEuamF2YSIpLCBUb2RvSW5kZXhQYXR0ZXJuUHJvdmlkZXIuZ2V0SW5zdGFuY2UoKSkpOworICAgICAgYXNzZXJ0RXF1YWxzKDEsIHRvZG9jYWNoZS5nZXRUb2RvQ291bnQobXlSb290RGlyLmZpbmRDaGlsZCgiMi5qYXZhIiksIFRvZG9JbmRleFBhdHRlcm5Qcm92aWRlci5nZXRJbnN0YW5jZSgpKSk7CisgICAgICBhc3NlcnRFcXVhbHMoMCwgdG9kb2NhY2hlLmdldFRvZG9Db3VudChteVJvb3REaXIuZmluZENoaWxkKCIzLmphdmEiKSwgVG9kb0luZGV4UGF0dGVyblByb3ZpZGVyLmdldEluc3RhbmNlKCkpKTsKKyAgICB9CisgICAgZmluYWxseXsKKyAgICAgIFRvZG9Db25maWd1cmF0aW9uLmdldEluc3RhbmNlKCkuc2V0VG9kb1BhdHRlcm5zKG9sZFBhdHRlcm5zKTsKKyAgICB9CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0RmlsZU1vZGlmaWNhdGlvbigpIHRocm93cyBFeGNlcHRpb24geworICAgIGZpbmFsIENhY2hlTWFuYWdlciBjYWNoZSA9IENhY2hlTWFuYWdlci5TRVJWSUNFLmdldEluc3RhbmNlKG15UHJvamVjdCk7CisgICAgZmluYWwgVG9kb0NhY2hlTWFuYWdlciB0b2RvY2FjaGUgPSBUb2RvQ2FjaGVNYW5hZ2VyLlNFUlZJQ0UuZ2V0SW5zdGFuY2UobXlQcm9qZWN0KTsKKyAgICBjaGVja0NhY2hlKGNhY2hlLCB0b2RvY2FjaGUpOworCisgICAgVmlydHVhbEZpbGUgY2hpbGQgPSBteVJvb3REaXIuZmluZENoaWxkKCIxLmphdmEiKTsKKworICAgIGNoZWNrQ2FjaGUoY2FjaGUsIHRvZG9jYWNoZSk7CisKKyAgICBWZnNVdGlsLnNhdmVUZXh0KGNoaWxkLCAieHh4Iik7CisgICAgUHNpRG9jdW1lbnRNYW5hZ2VyLmdldEluc3RhbmNlKG15UHJvamVjdCkuY29tbWl0QWxsRG9jdW1lbnRzKCk7CisKKyAgICBmaW5hbCBHbG9iYWxTZWFyY2hTY29wZSBzY29wZSA9IEdsb2JhbFNlYXJjaFNjb3BlLnByb2plY3RTY29wZShteVByb2plY3QpOworICAgIGNoZWNrUmVzdWx0KG5ldyBTdHJpbmdbXSB7IjEuamF2YSJ9LCBjb252ZXJ0KGNhY2hlLmdldEZpbGVzV2l0aFdvcmQoInh4eCIsIFVzYWdlU2VhcmNoQ29udGV4dC5BTlksIHNjb3BlLCBmYWxzZSkpKTsKKyAgICBjaGVja1Jlc3VsdChuZXcgU3RyaW5nW117fSwgY29udmVydChjYWNoZS5nZXRGaWxlc1dpdGhXb3JkKCJhIiwgVXNhZ2VTZWFyY2hDb250ZXh0LkFOWSwgc2NvcGUsIGZhbHNlKSkpOworICAgIGNoZWNrUmVzdWx0KG5ldyBTdHJpbmdbXXsiMi5qYXZhIn0sIGNvbnZlcnQoY2FjaGUuZ2V0RmlsZXNXaXRoV29yZCgiYiIsIFVzYWdlU2VhcmNoQ29udGV4dC5BTlksIHNjb3BlLCBmYWxzZSkpKTsKKyAgICBjaGVja1Jlc3VsdChuZXcgU3RyaW5nW117IjIuamF2YSIsICIzLmphdmEifSwgY29udmVydChjYWNoZS5nZXRGaWxlc1dpdGhXb3JkKCJjIiwgVXNhZ2VTZWFyY2hDb250ZXh0LkFOWSwgc2NvcGUsIGZhbHNlKSkpOworICAgIGNoZWNrUmVzdWx0KG5ldyBTdHJpbmdbXXsiMi5qYXZhIiwgIjMuamF2YSJ9LCBjb252ZXJ0KGNhY2hlLmdldEZpbGVzV2l0aFdvcmQoImQiLCBVc2FnZVNlYXJjaENvbnRleHQuQU5ZLCBzY29wZSwgZmFsc2UpKSk7CisgICAgY2hlY2tSZXN1bHQobmV3IFN0cmluZ1tdeyIzLmphdmEifSwgY29udmVydChjYWNoZS5nZXRGaWxlc1dpdGhXb3JkKCJlIiwgVXNhZ2VTZWFyY2hDb250ZXh0LkFOWSwgc2NvcGUsIGZhbHNlKSkpOworCisgICAgY2hlY2tSZXN1bHQobmV3IFN0cmluZ1tdeyIzLmphdmEifSwgY29udmVydCh0b2RvY2FjaGUuZ2V0RmlsZXNXaXRoVG9kb0l0ZW1zKCkpKTsKKyAgICBhc3NlcnRFcXVhbHMoMCwgdG9kb2NhY2hlLmdldFRvZG9Db3VudChteVJvb3REaXIuZmluZENoaWxkKCIxLmphdmEiKSwgVG9kb0luZGV4UGF0dGVyblByb3ZpZGVyLmdldEluc3RhbmNlKCkpKTsKKyAgICBhc3NlcnRFcXVhbHMoMCwgdG9kb2NhY2hlLmdldFRvZG9Db3VudChteVJvb3REaXIuZmluZENoaWxkKCIyLmphdmEiKSwgVG9kb0luZGV4UGF0dGVyblByb3ZpZGVyLmdldEluc3RhbmNlKCkpKTsKKyAgICBhc3NlcnRFcXVhbHMoMiwgdG9kb2NhY2hlLmdldFRvZG9Db3VudChteVJvb3REaXIuZmluZENoaWxkKCIzLmphdmEiKSwgVG9kb0luZGV4UGF0dGVyblByb3ZpZGVyLmdldEluc3RhbmNlKCkpKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RGaWxlRGVsZXRpb24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBmaW5hbCBDYWNoZU1hbmFnZXIgY2FjaGUgPSBDYWNoZU1hbmFnZXIuU0VSVklDRS5nZXRJbnN0YW5jZShteVByb2plY3QpOworICAgIGZpbmFsIFRvZG9DYWNoZU1hbmFnZXIgdG9kb2NhY2hlID0gVG9kb0NhY2hlTWFuYWdlci5TRVJWSUNFLmdldEluc3RhbmNlKG15UHJvamVjdCk7CisgICAgY2hlY2tDYWNoZShjYWNoZSwgdG9kb2NhY2hlKTsKKworICAgIFZpcnR1YWxGaWxlIGNoaWxkID0gbXlSb290RGlyLmZpbmRDaGlsZCgiMS5qYXZhIik7CisgICAgY2hpbGQuZGVsZXRlKG51bGwpOworCisgICAgZmluYWwgR2xvYmFsU2VhcmNoU2NvcGUgc2NvcGUgPSBHbG9iYWxTZWFyY2hTY29wZS5wcm9qZWN0U2NvcGUobXlQcm9qZWN0KTsKKyAgICBjaGVja1Jlc3VsdChuZXcgU3RyaW5nW117fSwgY29udmVydChjYWNoZS5nZXRGaWxlc1dpdGhXb3JkKCJ4eHgiLCBVc2FnZVNlYXJjaENvbnRleHQuQU5ZLCBzY29wZSwgZmFsc2UpKSk7CisgICAgY2hlY2tSZXN1bHQobmV3IFN0cmluZ1tde30sIGNvbnZlcnQoY2FjaGUuZ2V0RmlsZXNXaXRoV29yZCgiYSIsIFVzYWdlU2VhcmNoQ29udGV4dC5BTlksIHNjb3BlLCBmYWxzZSkpKTsKKyAgICBjaGVja1Jlc3VsdChuZXcgU3RyaW5nW117IjIuamF2YSJ9LCBjb252ZXJ0KGNhY2hlLmdldEZpbGVzV2l0aFdvcmQoImIiLCBVc2FnZVNlYXJjaENvbnRleHQuQU5ZLCBzY29wZSwgZmFsc2UpKSk7CisgICAgY2hlY2tSZXN1bHQobmV3IFN0cmluZ1tdeyIyLmphdmEiLCAiMy5qYXZhIn0sIGNvbnZlcnQoY2FjaGUuZ2V0RmlsZXNXaXRoV29yZCgiYyIsIFVzYWdlU2VhcmNoQ29udGV4dC5BTlksIHNjb3BlLCBmYWxzZSkpKTsKKyAgICBjaGVja1Jlc3VsdChuZXcgU3RyaW5nW117IjIuamF2YSIsICIzLmphdmEifSwgY29udmVydChjYWNoZS5nZXRGaWxlc1dpdGhXb3JkKCJkIiwgVXNhZ2VTZWFyY2hDb250ZXh0LkFOWSwgc2NvcGUsIGZhbHNlKSkpOworICAgIGNoZWNrUmVzdWx0KG5ldyBTdHJpbmdbXXsiMy5qYXZhIn0sIGNvbnZlcnQoY2FjaGUuZ2V0RmlsZXNXaXRoV29yZCgiZSIsIFVzYWdlU2VhcmNoQ29udGV4dC5BTlksIHNjb3BlLCBmYWxzZSkpKTsKKworICAgIGNoZWNrUmVzdWx0KG5ldyBTdHJpbmdbXXsiMy5qYXZhIn0sIGNvbnZlcnQodG9kb2NhY2hlLmdldEZpbGVzV2l0aFRvZG9JdGVtcygpKSk7CisgICAgYXNzZXJ0RXF1YWxzKDAsIHRvZG9jYWNoZS5nZXRUb2RvQ291bnQobXlSb290RGlyLmZpbmRDaGlsZCgiMi5qYXZhIiksIFRvZG9JbmRleFBhdHRlcm5Qcm92aWRlci5nZXRJbnN0YW5jZSgpKSk7CisgICAgYXNzZXJ0RXF1YWxzKDIsIHRvZG9jYWNoZS5nZXRUb2RvQ291bnQobXlSb290RGlyLmZpbmRDaGlsZCgiMy5qYXZhIiksIFRvZG9JbmRleFBhdHRlcm5Qcm92aWRlci5nZXRJbnN0YW5jZSgpKSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0RmlsZUNyZWF0aW9uKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZmluYWwgQ2FjaGVNYW5hZ2VyIGNhY2hlID0gQ2FjaGVNYW5hZ2VyLlNFUlZJQ0UuZ2V0SW5zdGFuY2UobXlQcm9qZWN0KTsKKyAgICBmaW5hbCBUb2RvQ2FjaGVNYW5hZ2VyIHRvZG9jYWNoZSA9IFRvZG9DYWNoZU1hbmFnZXIuU0VSVklDRS5nZXRJbnN0YW5jZShteVByb2plY3QpOworICAgIGNoZWNrQ2FjaGUoY2FjaGUsIHRvZG9jYWNoZSk7CisKKyAgICBWaXJ0dWFsRmlsZSBjaGlsZCA9IG15Um9vdERpci5jcmVhdGVDaGlsZERhdGEobnVsbCwgIjQuamF2YSIpOworICAgIFZmc1V0aWwuc2F2ZVRleHQoY2hpbGQsICJ4eHggLy90b2RvIik7CisgICAgUHNpRG9jdW1lbnRNYW5hZ2VyLmdldEluc3RhbmNlKG15UHJvamVjdCkuY29tbWl0QWxsRG9jdW1lbnRzKCk7CisKKyAgICBmaW5hbCBHbG9iYWxTZWFyY2hTY29wZSBzY29wZSA9IEdsb2JhbFNlYXJjaFNjb3BlLnByb2plY3RTY29wZShteVByb2plY3QpOworICAgIGNoZWNrUmVzdWx0KG5ldyBTdHJpbmdbXXsiNC5qYXZhIn0sIGNvbnZlcnQoY2FjaGUuZ2V0RmlsZXNXaXRoV29yZCgieHh4IiwgVXNhZ2VTZWFyY2hDb250ZXh0LkFOWSwgc2NvcGUsIGZhbHNlKSkpOworICAgIGNoZWNrUmVzdWx0KG5ldyBTdHJpbmdbXXsiMS5qYXZhIn0sIGNvbnZlcnQoY2FjaGUuZ2V0RmlsZXNXaXRoV29yZCgiYSIsIFVzYWdlU2VhcmNoQ29udGV4dC5BTlksIHNjb3BlLCBmYWxzZSkpKTsKKyAgICBjaGVja1Jlc3VsdChuZXcgU3RyaW5nW117IjEuamF2YSIsICIyLmphdmEifSwgY29udmVydChjYWNoZS5nZXRGaWxlc1dpdGhXb3JkKCJiIiwgVXNhZ2VTZWFyY2hDb250ZXh0LkFOWSwgc2NvcGUsIGZhbHNlKSkpOworICAgIGNoZWNrUmVzdWx0KG5ldyBTdHJpbmdbXXsiMS5qYXZhIiwgIjIuamF2YSIsICIzLmphdmEifSwgY29udmVydChjYWNoZS5nZXRGaWxlc1dpdGhXb3JkKCJjIiwgVXNhZ2VTZWFyY2hDb250ZXh0LkFOWSwgc2NvcGUsIGZhbHNlKSkpOworICAgIGNoZWNrUmVzdWx0KG5ldyBTdHJpbmdbXXsiMi5qYXZhIiwgIjMuamF2YSJ9LCBjb252ZXJ0KGNhY2hlLmdldEZpbGVzV2l0aFdvcmQoImQiLCBVc2FnZVNlYXJjaENvbnRleHQuQU5ZLCBzY29wZSwgZmFsc2UpKSk7CisgICAgY2hlY2tSZXN1bHQobmV3IFN0cmluZ1tdeyIzLmphdmEifSwgY29udmVydChjYWNoZS5nZXRGaWxlc1dpdGhXb3JkKCJlIiwgVXNhZ2VTZWFyY2hDb250ZXh0LkFOWSwgc2NvcGUsIGZhbHNlKSkpOworCisgICAgY2hlY2tSZXN1bHQobmV3IFN0cmluZ1tdeyIxLmphdmEiLCAiMy5qYXZhIiwgIjQuamF2YSJ9LCBjb252ZXJ0KHRvZG9jYWNoZS5nZXRGaWxlc1dpdGhUb2RvSXRlbXMoKSkpOworICAgIGFzc2VydEVxdWFscygxLCB0b2RvY2FjaGUuZ2V0VG9kb0NvdW50KG15Um9vdERpci5maW5kQ2hpbGQoIjEuamF2YSIpLCBUb2RvSW5kZXhQYXR0ZXJuUHJvdmlkZXIuZ2V0SW5zdGFuY2UoKSkpOworICAgIGFzc2VydEVxdWFscygwLCB0b2RvY2FjaGUuZ2V0VG9kb0NvdW50KG15Um9vdERpci5maW5kQ2hpbGQoIjIuamF2YSIpLCBUb2RvSW5kZXhQYXR0ZXJuUHJvdmlkZXIuZ2V0SW5zdGFuY2UoKSkpOworICAgIGFzc2VydEVxdWFscygyLCB0b2RvY2FjaGUuZ2V0VG9kb0NvdW50KG15Um9vdERpci5maW5kQ2hpbGQoIjMuamF2YSIpLCBUb2RvSW5kZXhQYXR0ZXJuUHJvdmlkZXIuZ2V0SW5zdGFuY2UoKSkpOworICAgIGFzc2VydEVxdWFscygxLCB0b2RvY2FjaGUuZ2V0VG9kb0NvdW50KG15Um9vdERpci5maW5kQ2hpbGQoIjQuamF2YSIpLCBUb2RvSW5kZXhQYXR0ZXJuUHJvdmlkZXIuZ2V0SW5zdGFuY2UoKSkpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdENyYXNoKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZmluYWwgQ2FjaGVNYW5hZ2VyIGNhY2hlID0gQ2FjaGVNYW5hZ2VyLlNFUlZJQ0UuZ2V0SW5zdGFuY2UobXlQcm9qZWN0KTsKKyAgICBjYWNoZS5nZXRGaWxlc1dpdGhXb3JkKCJ4eHgiLCBVc2FnZVNlYXJjaENvbnRleHQuQU5ZLCBHbG9iYWxTZWFyY2hTY29wZS5wcm9qZWN0U2NvcGUobXlQcm9qZWN0KSwgZmFsc2UpOworICAgIFN5c3RlbS5nYygpOworICB9CisKKyAgcHJpdmF0ZSB2b2lkIGNoZWNrQ2FjaGUoQ2FjaGVNYW5hZ2VyIGNhY2hlLCBUb2RvQ2FjaGVNYW5hZ2VyIHRvZG9jYWNoZSkgeworICAgIGZpbmFsIEdsb2JhbFNlYXJjaFNjb3BlIHNjb3BlID0gR2xvYmFsU2VhcmNoU2NvcGUucHJvamVjdFNjb3BlKG15UHJvamVjdCk7CisgICAgY2hlY2tSZXN1bHQoQXJyYXlVdGlsLkVNUFRZX1NUUklOR19BUlJBWSwgY29udmVydChjYWNoZS5nZXRGaWxlc1dpdGhXb3JkKCJ4eHgiLCBVc2FnZVNlYXJjaENvbnRleHQuQU5ZLCBzY29wZSwgZmFsc2UpKSk7CisgICAgY2hlY2tSZXN1bHQobmV3IFN0cmluZ1tdeyIxLmphdmEifSwgY29udmVydChjYWNoZS5nZXRGaWxlc1dpdGhXb3JkKCJhIiwgVXNhZ2VTZWFyY2hDb250ZXh0LkFOWSwgc2NvcGUsIGZhbHNlKSkpOworICAgIGNoZWNrUmVzdWx0KG5ldyBTdHJpbmdbXXsiMS5qYXZhIiwgIjIuamF2YSJ9LCBjb252ZXJ0KGNhY2hlLmdldEZpbGVzV2l0aFdvcmQoImIiLCBVc2FnZVNlYXJjaENvbnRleHQuQU5ZLCBzY29wZSwgZmFsc2UpKSk7CisgICAgY2hlY2tSZXN1bHQobmV3IFN0cmluZ1tdeyIxLmphdmEiLCAiMi5qYXZhIiwgIjMuamF2YSJ9LCBjb252ZXJ0KGNhY2hlLmdldEZpbGVzV2l0aFdvcmQoImMiLCBVc2FnZVNlYXJjaENvbnRleHQuQU5ZLCBzY29wZSwgZmFsc2UpKSk7CisgICAgY2hlY2tSZXN1bHQobmV3IFN0cmluZ1tdeyIyLmphdmEiLCAiMy5qYXZhIn0sIGNvbnZlcnQoY2FjaGUuZ2V0RmlsZXNXaXRoV29yZCgiZCIsIFVzYWdlU2VhcmNoQ29udGV4dC5BTlksIHNjb3BlLCBmYWxzZSkpKTsKKyAgICBjaGVja1Jlc3VsdChuZXcgU3RyaW5nW117IjMuamF2YSJ9LCBjb252ZXJ0KGNhY2hlLmdldEZpbGVzV2l0aFdvcmQoImUiLCBVc2FnZVNlYXJjaENvbnRleHQuQU5ZLCBzY29wZSwgZmFsc2UpKSk7CisKKyAgICBjaGVja1Jlc3VsdChuZXcgU3RyaW5nW117IjEuamF2YSIsICIzLmphdmEifSwgY29udmVydCh0b2RvY2FjaGUuZ2V0RmlsZXNXaXRoVG9kb0l0ZW1zKCkpKTsKKyAgICBhc3NlcnRFcXVhbHMoMSwgdG9kb2NhY2hlLmdldFRvZG9Db3VudChteVJvb3REaXIuZmluZENoaWxkKCIxLmphdmEiKSwgVG9kb0luZGV4UGF0dGVyblByb3ZpZGVyLmdldEluc3RhbmNlKCkpKTsKKyAgICBhc3NlcnRFcXVhbHMoMCwgdG9kb2NhY2hlLmdldFRvZG9Db3VudChteVJvb3REaXIuZmluZENoaWxkKCIyLmphdmEiKSwgVG9kb0luZGV4UGF0dGVyblByb3ZpZGVyLmdldEluc3RhbmNlKCkpKTsKKyAgICBhc3NlcnRFcXVhbHMoMiwgdG9kb2NhY2hlLmdldFRvZG9Db3VudChteVJvb3REaXIuZmluZENoaWxkKCIzLmphdmEiKSwgVG9kb0luZGV4UGF0dGVyblByb3ZpZGVyLmdldEluc3RhbmNlKCkpKTsKKyAgfQorCisgIHByaXZhdGUgc3RhdGljIFZpcnR1YWxGaWxlW10gY29udmVydChQc2lGaWxlW10gcHNpRmlsZXMpIHsKKyAgICBmaW5hbCBWaXJ0dWFsRmlsZVtdIGZpbGVzID0gbmV3IFZpcnR1YWxGaWxlW3BzaUZpbGVzLmxlbmd0aF07CisgICAgZm9yIChpbnQgaWR4ID0gMDsgaWR4IDwgcHNpRmlsZXMubGVuZ3RoOyBpZHgrKykgeworICAgICAgZmlsZXNbaWR4XSA9IHBzaUZpbGVzW2lkeF0uZ2V0VmlydHVhbEZpbGUoKTsKKyAgICB9CisgICAgcmV0dXJuIGZpbGVzOworICB9CisgIAorICBwcml2YXRlIHN0YXRpYyB2b2lkIGNoZWNrUmVzdWx0KFN0cmluZ1tdIGV4cGVjdGVkLCBWaXJ0dWFsRmlsZVtdIHJlc3VsdCl7CisgICAgYXNzZXJ0RXF1YWxzKGV4cGVjdGVkLmxlbmd0aCwgcmVzdWx0Lmxlbmd0aCk7CisgICAgCisgICAgQXJyYXlzLnNvcnQoZXhwZWN0ZWQpOworICAgIEFycmF5cy5zb3J0KHJlc3VsdCwgbmV3IENvbXBhcmF0b3IoKSB7CisgICAgICBAT3ZlcnJpZGUKKyAgICAgIHB1YmxpYyBpbnQgY29tcGFyZShPYmplY3QgbzEsIE9iamVjdCBvMikgeworICAgICAgICBWaXJ0dWFsRmlsZSBmaWxlMSA9IChWaXJ0dWFsRmlsZSlvMTsKKyAgICAgICAgVmlydHVhbEZpbGUgZmlsZTIgPSAoVmlydHVhbEZpbGUpbzI7CisgICAgICAgIHJldHVybiBmaWxlMS5nZXROYW1lKCkuY29tcGFyZVRvKGZpbGUyLmdldE5hbWUoKSk7CisgICAgICB9CisgICAgfSk7CisKKyAgICBmb3IoaW50IGkgPSAwOyBpIDwgZXhwZWN0ZWQubGVuZ3RoOyBpKyspeworICAgICAgU3RyaW5nIG5hbWUgPSBleHBlY3RlZFtpXTsKKyAgICAgIGFzc2VydEVxdWFscyhuYW1lLCByZXN1bHRbaV0uZ2V0TmFtZSgpKTsKKyAgICB9CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9wc2kvaW1wbC9jYWNoZS9pbXBsL0lubmVyQ2xhc3Nlc1NjYW5uZXJUZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovcHNpL2ltcGwvY2FjaGUvaW1wbC9Jbm5lckNsYXNzZXNTY2FubmVyVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjViNzI5NWQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovcHNpL2ltcGwvY2FjaGUvaW1wbC9Jbm5lckNsYXNzZXNTY2FubmVyVGVzdC5qYXZhCkBAIC0wLDAgKzEsMTE4IEBACitwYWNrYWdlIGNvbS5pbnRlbGxpai5wc2kuaW1wbC5jYWNoZS5pbXBsOworCitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkuYXBwbGljYXRpb24uZXguUGF0aE1hbmFnZXJFeDsKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS51dGlsLlJlZjsKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS51dGlsLlRleHRSYW5nZTsKK2ltcG9ydCBjb20uaW50ZWxsaWoucHNpLio7CitpbXBvcnQgY29tLmludGVsbGlqLnBzaS50cmVlLklFbGVtZW50VHlwZTsKK2ltcG9ydCBjb20uaW50ZWxsaWoucHNpLmltcGwuc291cmNlLlBzaUphdmFGaWxlSW1wbDsKK2ltcG9ydCBjb20uaW50ZWxsaWoucHNpLmltcGwuc291cmNlLnRyZWUuU3RkVG9rZW5TZXRzOworaW1wb3J0IGNvbS5pbnRlbGxpai50ZXN0RnJhbWV3b3JrLlBzaVRlc3RDYXNlOworaW1wb3J0IGNvbS5pbnRlbGxpai5sZXhlci5MZXhlcjsKK2ltcG9ydCBjb20uaW50ZWxsaWoubGV4ZXIuRmlsdGVyTGV4ZXI7CisKK2ltcG9ydCBqYXZhLmlvLkZpbGU7CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKKworLyoqCisgKiBAYXV0aG9yIGRzbAorICovCitwdWJsaWMgY2xhc3MgSW5uZXJDbGFzc2VzU2Nhbm5lclRlc3QgZXh0ZW5kcyBQc2lUZXN0Q2FzZSB7CisgIHB1YmxpYyB2b2lkIHRlc3RDbGFzc1dpdGhHZW5lcmljUGFyYW1ldGVycygpIHRocm93cyBFeGNlcHRpb24geyBkb1Rlc3QoKTsgfQorCisgIHB1YmxpYyB2b2lkIHRlc3ROZXdJbnNpZGVOZXcoKSB0aHJvd3MgRXhjZXB0aW9uIHsgZG9UZXN0KCk7IH0KKworICBwcml2YXRlIHZvaWQgZG9UZXN0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgY29uZmlndXJlQnlGaWxlV2l0aE1hcmtlcigKKyAgICAgIFBhdGhNYW5hZ2VyRXguZ2V0VGVzdERhdGFQYXRoKCkgKyAiL3BzaS9yZXBvc2l0b3J5VXNlL2lubmVyQ2xhc3Nlc1NjYW5uZXIvIi5yZXBsYWNlKCcvJywgRmlsZS5zZXBhcmF0b3JDaGFyKSArIGdldFRlc3ROYW1lKGZhbHNlKSArICIuamF2YSIsCisgICAgICAiIik7CisgICAgZmluYWwgTGlzdDxQc2lDbGFzcz4gbGlzdCA9IGdldElubmVyQ2xhc3NlcygoKFBzaUphdmFGaWxlKW15RmlsZSkuZ2V0Q2xhc3NlcygpWzBdLmdldE1ldGhvZHMoKVswXSwgbXlGaWxlLmdldFZpZXdQcm92aWRlcigpLmdldENvbnRlbnRzKCkpOworICAgIGFzc2VydFRydWUobGlzdCAhPSBudWxsICYmIGxpc3Quc2l6ZSgpID09IDEpOworICB9CisKKyAgcHJpdmF0ZSBzdGF0aWMgTGlzdDxQc2lDbGFzcz4gZ2V0SW5uZXJDbGFzc2VzKFBzaUVsZW1lbnQgcHNpRWxlbWVudCwgZmluYWwgQ2hhclNlcXVlbmNlIGZpbGVCdWZmZXIpIHsKKyAgICBmaW5hbCBSZWY8QXJyYXlMaXN0PFBzaUNsYXNzPj4gb3VyTGlzdCA9IG5ldyBSZWY8QXJyYXlMaXN0PFBzaUNsYXNzPj4oKTsKKyAgICBvdXJMaXN0LnNldChudWxsKTsKKworICAgIGlmIChwc2lFbGVtZW50ICE9IG51bGwgJiYgbWF5Q29udGFpbkNsYXNzZXNJbnNpZGUocHNpRWxlbWVudCwgZmlsZUJ1ZmZlcikpIHsKKyAgICAgIHBzaUVsZW1lbnQuYWNjZXB0KG5ldyBKYXZhUmVjdXJzaXZlRWxlbWVudFdhbGtpbmdWaXNpdG9yKCkgeworICAgICAgICBAT3ZlcnJpZGUgcHVibGljIHZvaWQgdmlzaXRDbGFzcyhQc2lDbGFzcyBhQ2xhc3MpIHsKKyAgICAgICAgICBpZiAob3VyTGlzdC5pc051bGwoKSkgb3VyTGlzdC5zZXQobmV3IEFycmF5TGlzdDxQc2lDbGFzcz4oKSk7CisgICAgICAgICAgb3VyTGlzdC5nZXQoKS5hZGQoYUNsYXNzKTsKKyAgICAgICAgfQorCisgICAgICAgIEBPdmVycmlkZSBwdWJsaWMgdm9pZCB2aXNpdFR5cGVQYXJhbWV0ZXIoUHNpVHlwZVBhcmFtZXRlciBjbGFzc1BhcmFtZXRlcikgeworICAgICAgICAgIC8vIGp1c3Qgc2tpcCAoYmVjYXVzZSB0eXBlIHBhcmFtZXRlciBpcyBjbGFzcyAtIGJhZCEpCisgICAgICAgIH0KKyAgICAgIH0pOworICAgIH0KKworICAgIHJldHVybiBvdXJMaXN0LmdldCgpOworICB9CisKKyAgcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBtYXlDb250YWluQ2xhc3Nlc0luc2lkZShQc2lFbGVtZW50IHBzaUVsZW1lbnQsIGZpbmFsIENoYXJTZXF1ZW5jZSBmaWxlQnVmZmVyKSB7CisgICAgUHNpRmlsZSBwc2lGaWxlID0gcHNpRWxlbWVudC5nZXRDb250YWluaW5nRmlsZSgpOworCisgICAgYm9vbGVhbiBtYXlIYXZlQ2xhc3Nlc0luc2lkZSA9IGZhbHNlOworICAgIGlmIChwc2lGaWxlIGluc3RhbmNlb2YgUHNpSmF2YUZpbGVJbXBsKSB7CisgICAgICBQc2lKYXZhRmlsZUltcGwgaW1wbCA9IChQc2lKYXZhRmlsZUltcGwpcHNpRmlsZTsKKyAgICAgIExleGVyIG9yaWdpbmFsTGV4ZXIgPSBpbXBsLmNyZWF0ZUxleGVyKCk7CisgICAgICBGaWx0ZXJMZXhlciBsZXhlciA9IG5ldyBGaWx0ZXJMZXhlcihvcmlnaW5hbExleGVyLCBuZXcgRmlsdGVyTGV4ZXIuU2V0RmlsdGVyKFN0ZFRva2VuU2V0cy5XSElURV9TUEFDRV9PUl9DT01NRU5UX0JJVF9TRVQpKTsKKyAgICAgIGZpbmFsIFRleHRSYW5nZSByYW5nZSA9IHBzaUVsZW1lbnQuZ2V0VGV4dFJhbmdlKCk7CisgICAgICBsZXhlci5zdGFydChmaWxlQnVmZmVyLCByYW5nZS5nZXRTdGFydE9mZnNldCgpLCByYW5nZS5nZXRFbmRPZmZzZXQoKSk7CisgICAgICBib29sZWFuIGlzSW5OZXdFeHByZXNzaW9uID0gZmFsc2U7CisgICAgICBib29sZWFuIGlzUmlnaHRBZnRlck5ld0V4cHJlc3Npb24gPSBmYWxzZTsKKyAgICAgIGludCBhbmdsZUxldmVsID0gMDsKKyAgICAgIGludCBwYXJlbkxldmVsID0gMDsKKyAgICAgIGRvIHsKKyAgICAgICAgSUVsZW1lbnRUeXBlIHRva2VuVHlwZSA9IGxleGVyLmdldFRva2VuVHlwZSgpOworICAgICAgICBpZiAodG9rZW5UeXBlID09IG51bGwpIGJyZWFrOworCisgICAgICAgIGlmICh0b2tlblR5cGUgPT0gSmF2YVRva2VuVHlwZS5ORVdfS0VZV09SRCkgeworICAgICAgICAgIGlzSW5OZXdFeHByZXNzaW9uID0gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmICh0b2tlblR5cGUgPT0gSmF2YVRva2VuVHlwZS5MUEFSRU5USCkgeworICAgICAgICAgIGlmIChpc0luTmV3RXhwcmVzc2lvbikgcGFyZW5MZXZlbCsrOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKHRva2VuVHlwZSA9PSBKYXZhVG9rZW5UeXBlLkxUKSB7CisgICAgICAgICAgaWYgKGlzSW5OZXdFeHByZXNzaW9uKSBhbmdsZUxldmVsKys7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAodG9rZW5UeXBlID09IEphdmFUb2tlblR5cGUuR1QpIHsKKyAgICAgICAgICBpZiAoaXNJbk5ld0V4cHJlc3Npb24pIGFuZ2xlTGV2ZWwtLTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmICh0b2tlblR5cGUgPT0gSmF2YVRva2VuVHlwZS5SUEFSRU5USCkgeworICAgICAgICAgIGlmIChpc0luTmV3RXhwcmVzc2lvbikgeworICAgICAgICAgICAgcGFyZW5MZXZlbC0tOworICAgICAgICAgICAgaWYgKHBhcmVuTGV2ZWwgPT0gMCkgeworICAgICAgICAgICAgICBpc1JpZ2h0QWZ0ZXJOZXdFeHByZXNzaW9uID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAodG9rZW5UeXBlID09IEphdmFUb2tlblR5cGUuTEJSQUNFKSB7CisgICAgICAgICAgaWYgKGlzSW5OZXdFeHByZXNzaW9uIHx8IGlzUmlnaHRBZnRlck5ld0V4cHJlc3Npb24pIHsKKyAgICAgICAgICAgIG1heUhhdmVDbGFzc2VzSW5zaWRlID0gdHJ1ZTsKKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAodG9rZW5UeXBlID09IEphdmFUb2tlblR5cGUuTEJSQUNLRVQpIHsKKyAgICAgICAgICBpZiAocGFyZW5MZXZlbCA9PSAwICYmIGFuZ2xlTGV2ZWwgPT0gMCkgaXNJbk5ld0V4cHJlc3Npb24gPSBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmICh0b2tlblR5cGUgPT0gSmF2YVRva2VuVHlwZS5JTlRFUkZBQ0VfS0VZV09SRCB8fCB0b2tlblR5cGUgPT0gSmF2YVRva2VuVHlwZS5DTEFTU19LRVlXT1JEIHx8CisgICAgICAgICAgICAgICAgIHRva2VuVHlwZSA9PSBKYXZhVG9rZW5UeXBlLkVOVU1fS0VZV09SRCkgeworICAgICAgICAgIG1heUhhdmVDbGFzc2VzSW5zaWRlID0gdHJ1ZTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChpc0luTmV3RXhwcmVzc2lvbiAmJiBpc1JpZ2h0QWZ0ZXJOZXdFeHByZXNzaW9uKSB7CisgICAgICAgICAgaXNJbk5ld0V4cHJlc3Npb24gPSBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICBpc1JpZ2h0QWZ0ZXJOZXdFeHByZXNzaW9uID0gZmFsc2U7CisgICAgICAgIH0KKworICAgICAgICBsZXhlci5hZHZhbmNlKCk7CisgICAgICB9CisgICAgICB3aGlsZSAoIW1heUhhdmVDbGFzc2VzSW5zaWRlKTsKKyAgICB9CisgICAgcmV0dXJuIG1heUhhdmVDbGFzc2VzSW5zaWRlOworICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovcHNpL2ltcGwvY2FjaGUvaW1wbC9TQ1IxNDQyM1Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9wc2kvaW1wbC9jYWNoZS9pbXBsL1NDUjE0NDIzVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIxNjkyYmFlCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL3BzaS9pbXBsL2NhY2hlL2ltcGwvU0NSMTQ0MjNUZXN0LmphdmEKQEAgLTAsMCArMSwxMjkgQEAKK3BhY2thZ2UgY29tLmludGVsbGlqLnBzaS5pbXBsLmNhY2hlLmltcGw7CisKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS5hcHBsaWNhdGlvbi5BcHBsaWNhdGlvbk1hbmFnZXI7CitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkuZmlsZUVkaXRvci5GaWxlRG9jdW1lbnRNYW5hZ2VyOworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLnJvb3RzLkNvbnRlbnRFbnRyeTsKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS5yb290cy5Nb2RpZmlhYmxlUm9vdE1vZGVsOworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLnJvb3RzLk1vZHVsZVJvb3RNYW5hZ2VyOworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLnJvb3RzLk1vZHVsZVJvb3RNb2RpZmljYXRpb25VdGlsOworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLnV0aWwuaW8uRmlsZVV0aWw7CitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkudmZzLkxvY2FsRmlsZVN5c3RlbTsKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS52ZnMuVmZzVXRpbDsKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS52ZnMuVmlydHVhbEZpbGU7CitpbXBvcnQgY29tLmludGVsbGlqLnBzaS5Qc2lDbGFzczsKK2ltcG9ydCBjb20uaW50ZWxsaWoucHNpLnNlYXJjaC5HbG9iYWxTZWFyY2hTY29wZTsKK2ltcG9ydCBjb20uaW50ZWxsaWoudGVzdEZyYW1ld29yay5Qc2lUZXN0Q2FzZTsKK2ltcG9ydCBjb20uaW50ZWxsaWoudGVzdEZyYW1ld29yay5Qc2lUZXN0VXRpbDsKKworaW1wb3J0IGphdmEuaW8uRmlsZTsKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworCisvKioKKyAqIEBhdXRob3IgbWF4CisgKi8KK3B1YmxpYyBjbGFzcyBTQ1IxNDQyM1Rlc3QgZXh0ZW5kcyBQc2lUZXN0Q2FzZSB7CisgIHByaXZhdGUgVmlydHVhbEZpbGUgbXlQcmpEaXIxOworICBwcml2YXRlIFZpcnR1YWxGaWxlIG15U3JjRGlyMTsKKyAgcHJpdmF0ZSBWaXJ0dWFsRmlsZSBteVBhY2tEaXI7CisKKyAgQE92ZXJyaWRlCisgIHByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgc3VwZXIuc2V0VXAoKTsKKworICAgIGZpbmFsIEZpbGUgcm9vdCA9IEZpbGVVdGlsLmNyZWF0ZVRlbXBGaWxlKGdldE5hbWUoKSwgIiIpOworICAgIHJvb3QuZGVsZXRlKCk7CisgICAgcm9vdC5ta2RpcigpOworICAgIG15RmlsZXNUb0RlbGV0ZS5hZGQocm9vdCk7CisKKyAgICBBcHBsaWNhdGlvbk1hbmFnZXIuZ2V0QXBwbGljYXRpb24oKS5ydW5Xcml0ZUFjdGlvbihuZXcgUnVubmFibGUoKSB7CisgICAgICBAT3ZlcnJpZGUKKyAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICBWaXJ0dWFsRmlsZSByb290VkZpbGUgPQorICAgICAgICAgICAgTG9jYWxGaWxlU3lzdGVtLmdldEluc3RhbmNlKCkucmVmcmVzaEFuZEZpbmRGaWxlQnlQYXRoKHJvb3QuZ2V0QWJzb2x1dGVQYXRoKCkucmVwbGFjZShGaWxlLnNlcGFyYXRvckNoYXIsICcvJykpOworCisgICAgICAgICAgbXlQcmpEaXIxID0gcm9vdFZGaWxlLmNyZWF0ZUNoaWxkRGlyZWN0b3J5KG51bGwsICJwcmoxIik7CisgICAgICAgICAgbXlTcmNEaXIxID0gbXlQcmpEaXIxLmNyZWF0ZUNoaWxkRGlyZWN0b3J5KG51bGwsICJzcmMxIik7CisKKyAgICAgICAgICBteVBhY2tEaXIgPSBteVNyY0RpcjEuY3JlYXRlQ2hpbGREaXJlY3RvcnkobnVsbCwgInAiKTsKKyAgICAgICAgICBWaXJ0dWFsRmlsZSBmaWxlMSA9IG15UGFja0Rpci5jcmVhdGVDaGlsZERhdGEobnVsbCwgIkEuamF2YSIpOworICAgICAgICAgIFZmc1V0aWwuc2F2ZVRleHQoZmlsZTEsICJwYWNrYWdlIHA7IHB1YmxpYyBjbGFzcyBBeyBwdWJsaWMgdm9pZCBmb28oKTsgfSIpOworCisgICAgICAgICAgUHNpVGVzdFV0aWwuYWRkQ29udGVudFJvb3QobXlNb2R1bGUsIG15UHJqRGlyMSk7CisgICAgICAgICAgUHNpVGVzdFV0aWwuYWRkU291cmNlUm9vdChteU1vZHVsZSwgbXlTcmNEaXIxKTsKKyAgICAgICAgfQorICAgICAgICBjYXRjaCAoSU9FeGNlcHRpb24gZSkgeworICAgICAgICAgIExPRy5lcnJvcihlKTsKKyAgICAgICAgfQorICAgICAgfQorICAgIH0pOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEJ1ZzIoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBQc2lDbGFzcyBwc2lDbGFzcyA9IG15SmF2YUZhY2FkZS5maW5kQ2xhc3MoInAuQSIpOworICAgIGFzc2VydEVxdWFscygicC5BIiwgcHNpQ2xhc3MuZ2V0UXVhbGlmaWVkTmFtZSgpKTsKKworICAgIHRlc3RCdWcxKCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0QnVnMSgpIHsKKyAgICBBcHBsaWNhdGlvbk1hbmFnZXIuZ2V0QXBwbGljYXRpb24oKS5ydW5Xcml0ZUFjdGlvbihuZXcgUnVubmFibGUoKSB7CisgICAgICBwdWJsaWMgdm9pZCBydW4oKSB7CisgICAgICAgIFBzaVRlc3RVdGlsLmFkZEV4Y2x1ZGVkUm9vdChteU1vZHVsZSwgbXlQYWNrRGlyKTsKKworICAgICAgICBQc2lDbGFzcyBwc2lDbGFzcyA9IG15SmF2YUZhY2FkZS5maW5kQ2xhc3MoInAuQSIsIEdsb2JhbFNlYXJjaFNjb3BlLmFsbFNjb3BlKG15UHJvamVjdCkpOworICAgICAgICBhc3NlcnROdWxsKHBzaUNsYXNzKTsKKworICAgICAgICBNb2RpZmlhYmxlUm9vdE1vZGVsIHJvb3RNb2RlbCA9IE1vZHVsZVJvb3RNYW5hZ2VyLmdldEluc3RhbmNlKG15TW9kdWxlKS5nZXRNb2RpZmlhYmxlTW9kZWwoKTsKKyAgICAgICAgZmluYWwgQ29udGVudEVudHJ5IGNvbnRlbnQgPSByb290TW9kZWwuZ2V0Q29udGVudEVudHJpZXMoKVswXTsKKyAgICAgICAgY29udGVudC5yZW1vdmVFeGNsdWRlRm9sZGVyKGNvbnRlbnQuZ2V0RXhjbHVkZUZvbGRlcnMoKVswXSk7CisgICAgICAgIHJvb3RNb2RlbC5jb21taXQoKTsKKworICAgICAgICBwc2lDbGFzcyA9IG15SmF2YUZhY2FkZS5maW5kQ2xhc3MoInAuQSIsIEdsb2JhbFNlYXJjaFNjb3BlLmFsbFNjb3BlKG15UHJvamVjdCkpOworICAgICAgICBhc3NlcnRFcXVhbHMoInAuQSIsIHBzaUNsYXNzLmdldFF1YWxpZmllZE5hbWUoKSk7CisgICAgICB9CisgICAgfSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0QnVnMygpIHsKKyAgICBBcHBsaWNhdGlvbk1hbmFnZXIuZ2V0QXBwbGljYXRpb24oKS5ydW5Xcml0ZUFjdGlvbihuZXcgUnVubmFibGUoKSB7CisgICAgICBwdWJsaWMgdm9pZCBydW4oKSB7CisgICAgICAgIFBzaUNsYXNzIHBzaUNsYXNzID0gbXlKYXZhRmFjYWRlLmZpbmRDbGFzcygicC5BIiwgR2xvYmFsU2VhcmNoU2NvcGUuYWxsU2NvcGUobXlQcm9qZWN0KSk7CisgICAgICAgIGFzc2VydEVxdWFscygicC5BIiwgcHNpQ2xhc3MuZ2V0UXVhbGlmaWVkTmFtZSgpKTsKKworICAgICAgICBhc3NlcnRUcnVlKHBzaUNsYXNzLmlzVmFsaWQoKSk7CisKKyAgICAgICAgUHNpVGVzdFV0aWwuYWRkRXhjbHVkZWRSb290KG15TW9kdWxlLCBteVBhY2tEaXIpOworCisgICAgICAgIGFzc2VydEZhbHNlKHBzaUNsYXNzLmlzVmFsaWQoKSk7CisKKyAgICAgICAgTW9kaWZpYWJsZVJvb3RNb2RlbCByb290TW9kZWwgPSBNb2R1bGVSb290TWFuYWdlci5nZXRJbnN0YW5jZShteU1vZHVsZSkuZ2V0TW9kaWZpYWJsZU1vZGVsKCk7CisgICAgICAgIGZpbmFsIENvbnRlbnRFbnRyeSBjb250ZW50ID0gcm9vdE1vZGVsLmdldENvbnRlbnRFbnRyaWVzKClbMF07CisgICAgICAgIGNvbnRlbnQucmVtb3ZlRXhjbHVkZUZvbGRlcihjb250ZW50LmdldEV4Y2x1ZGVGb2xkZXJzKClbMF0pOworICAgICAgICByb290TW9kZWwuY29tbWl0KCk7CisKKyAgICAgICAgcHNpQ2xhc3MgPSBteUphdmFGYWNhZGUuZmluZENsYXNzKCJwLkEiKTsKKyAgICAgICAgYXNzZXJ0VHJ1ZShwc2lDbGFzcy5pc1ZhbGlkKCkpOworICAgICAgfQorICAgIH0pOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFN5bmNyaG9uaXphdGlvbkFmdGVyQ2hhbmdlKCkgeworICAgIEFwcGxpY2F0aW9uTWFuYWdlci5nZXRBcHBsaWNhdGlvbigpLnJ1bldyaXRlQWN0aW9uKG5ldyBSdW5uYWJsZSgpIHsKKyAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKKyAgICAgICAgRmlsZURvY3VtZW50TWFuYWdlci5nZXRJbnN0YW5jZSgpLnNhdmVBbGxEb2N1bWVudHMoKTsKKyAgICAgICAgUHNpQ2xhc3MgcHNpQ2xhc3MgPSBteUphdmFGYWNhZGUuZmluZENsYXNzKCJwLkEiKTsKKyAgICAgICAgZmluYWwgVmlydHVhbEZpbGUgdkZpbGUgPSBwc2lDbGFzcy5nZXRDb250YWluaW5nRmlsZSgpLmdldFZpcnR1YWxGaWxlKCk7CisgICAgICAgIEZpbGUgaW9GaWxlID0gVmZzVXRpbC52aXJ0dWFsVG9Jb0ZpbGUodkZpbGUpOworICAgICAgICBpb0ZpbGUuc2V0TGFzdE1vZGlmaWVkKDUpOworCisgICAgICAgIExvY2FsRmlsZVN5c3RlbS5nZXRJbnN0YW5jZSgpLnJlZnJlc2goZmFsc2UpOworCisgICAgICAgIE1vZHVsZVJvb3RNb2RpZmljYXRpb25VdGlsLnNldE1vZHVsZVNkayhteU1vZHVsZSwgbnVsbCk7CisKKyAgICAgICAgcHNpQ2xhc3MgPSBteUphdmFGYWNhZGUuZmluZENsYXNzKCJwLkEiKTsKKyAgICAgICAgYXNzZXJ0Tm90TnVsbChwc2lDbGFzcyk7CisgICAgICB9CisgICAgfSk7CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9wc2kvaW1wbC9jYWNoZS9pbXBsL1NDUjE3NjUwVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL3BzaS9pbXBsL2NhY2hlL2ltcGwvU0NSMTc2NTBUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTg3ZDBjMgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9wc2kvaW1wbC9jYWNoZS9pbXBsL1NDUjE3NjUwVGVzdC5qYXZhCkBAIC0wLDAgKzEsNjYgQEAKK3BhY2thZ2UgY29tLmludGVsbGlqLnBzaS5pbXBsLmNhY2hlLmltcGw7CisKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS5hcHBsaWNhdGlvbi5BcHBsaWNhdGlvbk1hbmFnZXI7CitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkuYXBwbGljYXRpb24uZXguUGF0aE1hbmFnZXJFeDsKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS5yb290cy5Nb2R1bGVSb290TW9kaWZpY2F0aW9uVXRpbDsKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS51dGlsLmlvLkZpbGVVdGlsOworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLnZmcy5Mb2NhbEZpbGVTeXN0ZW07CitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkudmZzLlZmc1V0aWw7CitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkudmZzLlZmc1V0aWxDb3JlOworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLnZmcy5WaXJ0dWFsRmlsZTsKK2ltcG9ydCBjb20uaW50ZWxsaWoudGVzdEZyYW1ld29yay5Qc2lUZXN0Q2FzZTsKK2ltcG9ydCBjb20uaW50ZWxsaWoudGVzdEZyYW1ld29yay5Qc2lUZXN0VXRpbDsKKworaW1wb3J0IGphdmEuaW8uRmlsZTsKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworCisvKioKKyAqIEBhdXRob3IgbWF4CisgKi8KK3B1YmxpYyBjbGFzcyBTQ1IxNzY1MFRlc3QgZXh0ZW5kcyBQc2lUZXN0Q2FzZSB7CisgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBURVNUX1JPT1QgPSBQYXRoTWFuYWdlckV4LmdldFRlc3REYXRhUGF0aCgpICsgIi9wc2kvcmVwb3NpdG9yeVVzZS9jbHMiOworCisgIHByaXZhdGUgVmlydHVhbEZpbGUgbXlEaXI7CisKKyAgQE92ZXJyaWRlCisgIHByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgc3VwZXIuc2V0VXAoKTsKKworICAgIGZpbmFsIEZpbGUgcm9vdCA9IEZpbGVVdGlsLmNyZWF0ZVRlbXBGaWxlKGdldE5hbWUoKSwgIiIpOworICAgIHJvb3QuZGVsZXRlKCk7CisgICAgcm9vdC5ta2RpcigpOworICAgIG15RmlsZXNUb0RlbGV0ZS5hZGQocm9vdCk7CisKKyAgICBBcHBsaWNhdGlvbk1hbmFnZXIuZ2V0QXBwbGljYXRpb24oKS5ydW5Xcml0ZUFjdGlvbihuZXcgUnVubmFibGUoKSB7CisgICAgICBAT3ZlcnJpZGUKKyAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICBWaXJ0dWFsRmlsZSByb290VkZpbGUgPSBMb2NhbEZpbGVTeXN0ZW0uZ2V0SW5zdGFuY2UoKS5yZWZyZXNoQW5kRmluZEZpbGVCeVBhdGgocm9vdC5nZXRBYnNvbHV0ZVBhdGgoKS5yZXBsYWNlKEZpbGUuc2VwYXJhdG9yQ2hhciwgJy8nKSk7CisKKyAgICAgICAgICBteURpciA9IHJvb3RWRmlsZS5jcmVhdGVDaGlsZERpcmVjdG9yeShudWxsLCAiY29udGVudEFuZExpYnJhcnkiKTsKKworICAgICAgICAgIFZpcnR1YWxGaWxlIGZpbGUxID0gbXlEaXIuY3JlYXRlQ2hpbGREYXRhKG51bGwsICJBLmphdmEiKTsKKyAgICAgICAgICBWZnNVdGlsLnNhdmVUZXh0KGZpbGUxLCAicGFja2FnZSBwOyBwdWJsaWMgY2xhc3MgQXsgcHVibGljIHZvaWQgZm9vKCk7IH0iKTsKKyAgICAgICAgICBWZnNVdGlsQ29yZS5jb3B5RmlsZShudWxsLCBnZXRDbGFzc0ZpbGUoKSwgbXlEaXIpOworCisgICAgICAgICAgUHNpVGVzdFV0aWwuYWRkU291cmNlUm9vdChteU1vZHVsZSwgbXlEaXIpOworICAgICAgICAgIE1vZHVsZVJvb3RNb2RpZmljYXRpb25VdGlsLmFkZE1vZHVsZUxpYnJhcnkobXlNb2R1bGUsIG15RGlyLmdldFVybCgpKTsKKyAgICAgICAgfQorICAgICAgICBjYXRjaCAoSU9FeGNlcHRpb24gZSkgeworICAgICAgICAgIExPRy5lcnJvcihlKTsKKyAgICAgICAgfQorICAgICAgfQorICAgIH0pOworICB9CisKKyAgcHJpdmF0ZSBzdGF0aWMgVmlydHVhbEZpbGUgZ2V0Q2xhc3NGaWxlKCkgeworICAgIFZpcnR1YWxGaWxlIHZEaXIgPSBMb2NhbEZpbGVTeXN0ZW0uZ2V0SW5zdGFuY2UoKS5maW5kRmlsZUJ5UGF0aChURVNUX1JPT1QucmVwbGFjZShGaWxlLnNlcGFyYXRvckNoYXIsICcvJykpOworICAgIFZpcnR1YWxGaWxlIGNoaWxkID0gdkRpci5maW5kQ2hpbGQoInBhY2siKS5maW5kQ2hpbGQoIk15Q2xhc3MuY2xhc3MiKTsKKyAgICByZXR1cm4gY2hpbGQ7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0MTc2NTAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBhc3NlcnRFcXVhbHMoInAuQSIsIG15SmF2YUZhY2FkZS5maW5kQ2xhc3MoInAuQSIpLmdldFF1YWxpZmllZE5hbWUoKSk7CisgICAgYXNzZXJ0RXF1YWxzKCJwYWNrLk15Q2xhc3MiLCBteUphdmFGYWNhZGUuZmluZENsYXNzKCJwYWNrLk15Q2xhc3MiKS5nZXRRdWFsaWZpZWROYW1lKCkpOworICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovcHNpL2ltcGwvY2FjaGUvaW1wbC9TQ1IxOTE3NFRlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9wc2kvaW1wbC9jYWNoZS9pbXBsL1NDUjE5MTc0VGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM0N2JiZjcKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovcHNpL2ltcGwvY2FjaGUvaW1wbC9TQ1IxOTE3NFRlc3QuamF2YQpAQCAtMCwwICsxLDcwIEBACitwYWNrYWdlIGNvbS5pbnRlbGxpai5wc2kuaW1wbC5jYWNoZS5pbXBsOworCitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkuYXBwbGljYXRpb24uQXBwbGljYXRpb25NYW5hZ2VyOworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLnJvb3RzLk1vZHVsZVJvb3RNb2RpZmljYXRpb25VdGlsOworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLnV0aWwuaW8uRmlsZVV0aWw7CitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkudmZzLkxvY2FsRmlsZVN5c3RlbTsKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS52ZnMuVmZzVXRpbDsKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS52ZnMuVmlydHVhbEZpbGU7CitpbXBvcnQgY29tLmludGVsbGlqLnBzaS5Qc2lGaWxlOworaW1wb3J0IGNvbS5pbnRlbGxpai50ZXN0RnJhbWV3b3JrLlBzaVRlc3RDYXNlOworaW1wb3J0IGNvbS5pbnRlbGxpai50ZXN0RnJhbWV3b3JrLlBzaVRlc3RVdGlsOworCitpbXBvcnQgamF2YS5pby5GaWxlOworaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CisKKy8qKgorICogQGF1dGhvciBtYXgKKyAqLworcHVibGljIGNsYXNzIFNDUjE5MTc0VGVzdCBleHRlbmRzIFBzaVRlc3RDYXNlIHsKKyAgcHJpdmF0ZSBWaXJ0dWFsRmlsZSBteURpcjsKKyAgcHJpdmF0ZSBWaXJ0dWFsRmlsZSBteVZGaWxlOworCisgIEBPdmVycmlkZQorICBwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24geworICAgIHN1cGVyLnNldFVwKCk7CisKKyAgICBmaW5hbCBGaWxlIHJvb3QgPSBGaWxlVXRpbC5jcmVhdGVUZW1wRmlsZShnZXROYW1lKCksICIiKTsKKyAgICByb290LmRlbGV0ZSgpOworICAgIHJvb3QubWtkaXIoKTsKKyAgICBteUZpbGVzVG9EZWxldGUuYWRkKHJvb3QpOworCisgICAgQXBwbGljYXRpb25NYW5hZ2VyLmdldEFwcGxpY2F0aW9uKCkucnVuV3JpdGVBY3Rpb24obmV3IFJ1bm5hYmxlKCkgeworICAgICAgQE92ZXJyaWRlCisgICAgICBwdWJsaWMgdm9pZCBydW4oKSB7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgVmlydHVhbEZpbGUgcm9vdFZGaWxlID0gTG9jYWxGaWxlU3lzdGVtLmdldEluc3RhbmNlKCkucmVmcmVzaEFuZEZpbmRGaWxlQnlQYXRoKHJvb3QuZ2V0QWJzb2x1dGVQYXRoKCkucmVwbGFjZShGaWxlLnNlcGFyYXRvckNoYXIsICcvJykpOworCisgICAgICAgICAgbXlEaXIgPSByb290VkZpbGUuY3JlYXRlQ2hpbGREaXJlY3RvcnkobnVsbCwgImNvbnRlbnRBbmRMaWJyYXJ5Iik7CisKKyAgICAgICAgICAvKgorICAgICAgICAgIG15VkZpbGUgPSBteURpci5jcmVhdGVDaGlsZERhdGEobnVsbCwgIkEuamF2YSIpOworICAgICAgICAgIFdyaXRlciB3cml0ZXIxID0gbXlWRmlsZS5nZXRXcml0ZXIobnVsbCk7CisgICAgICAgICAgd3JpdGVyMS53cml0ZSgicGFja2FnZSBwOyBwdWJsaWMgY2xhc3MgQXsgcHVibGljIHZvaWQgZm9vKCk7IH0iKTsKKyAgICAgICAgICB3cml0ZXIxLmNsb3NlKCk7CisgICAgICAgICAgKi8KKyAgICAgICAgICBQc2lUZXN0VXRpbC5hZGRTb3VyY2VSb290KG15TW9kdWxlLCBteURpcik7CisgICAgICAgIH0KKyAgICAgICAgY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICBMT0cuZXJyb3IoZSk7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9KTsKKyAgfQorCisgIHByaXZhdGUgdm9pZCBjaGFuZ2VSb290cygpIHsKKyAgICBNb2R1bGVSb290TW9kaWZpY2F0aW9uVXRpbC5hZGRNb2R1bGVMaWJyYXJ5KG15TW9kdWxlLCBteURpci5nZXRVcmwoKSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0QnVnKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgdG91Y2hGaWxlU3luYygpOworICAgIFBzaUZpbGUgcHNpRmlsZSA9IG15UHNpTWFuYWdlci5maW5kRmlsZShteVZGaWxlKTsKKyAgICBwc2lGaWxlLmdldFRleHQoKTsKKyAgICBjaGFuZ2VSb290cygpOworICB9CisKKyAgcHJpdmF0ZSB2b2lkIHRvdWNoRmlsZVN5bmMoKSB0aHJvd3MgSU9FeGNlcHRpb24geworICAgIG15VkZpbGUgPSBteURpci5jcmVhdGVDaGlsZERhdGEobnVsbCwgIkEuamF2YSIpOworICAgIFZmc1V0aWwuc2F2ZVRleHQobXlWRmlsZSwgInBhY2thZ2UgcDsgcHVibGljIGNsYXNzIEF7IHB1YmxpYyB2b2lkIGZvbygpOyB9Iik7CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9wc2kvaW1wbC9jYWNoZS9pbXBsL1NDUjIwNzMzVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL3BzaS9pbXBsL2NhY2hlL2ltcGwvU0NSMjA3MzNUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWZlZjdkYQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9wc2kvaW1wbC9jYWNoZS9pbXBsL1NDUjIwNzMzVGVzdC5qYXZhCkBAIC0wLDAgKzEsODAgQEAKK3BhY2thZ2UgY29tLmludGVsbGlqLnBzaS5pbXBsLmNhY2hlLmltcGw7CisKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS5hcHBsaWNhdGlvbi5BcHBsaWNhdGlvbk1hbmFnZXI7CitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkubW9kdWxlLk1vZHVsZTsKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS5tb2R1bGUuTW9kdWxlVXRpbDsKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS51dGlsLmlvLkZpbGVVdGlsOworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLnZmcy5Mb2NhbEZpbGVTeXN0ZW07CitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkudmZzLlZmc1V0aWw7CitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkudmZzLlZpcnR1YWxGaWxlOworaW1wb3J0IGNvbS5pbnRlbGxpai5wc2kuUHNpQ2xhc3M7CitpbXBvcnQgY29tLmludGVsbGlqLnBzaS5Qc2lGaWxlOworaW1wb3J0IGNvbS5pbnRlbGxpai50ZXN0RnJhbWV3b3JrLlBzaVRlc3RDYXNlOworaW1wb3J0IGNvbS5pbnRlbGxpai50ZXN0RnJhbWV3b3JrLlBzaVRlc3RVdGlsOworCitpbXBvcnQgamF2YS5pby5GaWxlOworaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CisKKy8qKgorICogQGF1dGhvciBtYXgKKyAqLworcHVibGljIGNsYXNzIFNDUjIwNzMzVGVzdCBleHRlbmRzIFBzaVRlc3RDYXNlIHsKKyAgcHJpdmF0ZSBWaXJ0dWFsRmlsZSBteVByakRpcjE7CisgIHByaXZhdGUgVmlydHVhbEZpbGUgbXlTcmNEaXIxOworICBwcml2YXRlIFZpcnR1YWxGaWxlIG15UGFja0RpcjsKKworICBAT3ZlcnJpZGUKKyAgcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBzdXBlci5zZXRVcCgpOworCisgICAgZmluYWwgRmlsZSByb290ID0gRmlsZVV0aWwuY3JlYXRlVGVtcEZpbGUoZ2V0TmFtZSgpLCAiIik7CisgICAgcm9vdC5kZWxldGUoKTsKKyAgICByb290Lm1rZGlyKCk7CisgICAgbXlGaWxlc1RvRGVsZXRlLmFkZChyb290KTsKKworICAgIEFwcGxpY2F0aW9uTWFuYWdlci5nZXRBcHBsaWNhdGlvbigpLnJ1bldyaXRlQWN0aW9uKG5ldyBSdW5uYWJsZSgpIHsKKyAgICAgIEBPdmVycmlkZQorICAgICAgcHVibGljIHZvaWQgcnVuKCkgeworICAgICAgICB0cnkgeworICAgICAgICAgIFZpcnR1YWxGaWxlIHJvb3RWRmlsZSA9IExvY2FsRmlsZVN5c3RlbS5nZXRJbnN0YW5jZSgpLnJlZnJlc2hBbmRGaW5kRmlsZUJ5UGF0aChyb290LmdldEFic29sdXRlUGF0aCgpLnJlcGxhY2UoRmlsZS5zZXBhcmF0b3JDaGFyLCAnLycpKTsKKworICAgICAgICAgIG15UHJqRGlyMSA9IHJvb3RWRmlsZS5jcmVhdGVDaGlsZERpcmVjdG9yeShudWxsLCAicHJqMSIpOworICAgICAgICAgIG15U3JjRGlyMSA9IG15UHJqRGlyMS5jcmVhdGVDaGlsZERpcmVjdG9yeShudWxsLCAic3JjMSIpOworCisgICAgICAgICAgbXlQYWNrRGlyID0gbXlTcmNEaXIxLmNyZWF0ZUNoaWxkRGlyZWN0b3J5KG51bGwsICJwIik7CisgICAgICAgICAgVmlydHVhbEZpbGUgZmlsZTEgPSBteVBhY2tEaXIuY3JlYXRlQ2hpbGREYXRhKG51bGwsICJBLmphdmEiKTsKKyAgICAgICAgICBWZnNVdGlsLnNhdmVUZXh0KGZpbGUxLCAicGFja2FnZSBwOyBwdWJsaWMgY2xhc3MgQXsgcHVibGljIHZvaWQgZm9vKCk7IH0iKTsKKworICAgICAgICAgIFBzaVRlc3RVdGlsLmFkZENvbnRlbnRSb290KG15TW9kdWxlLCBteVByakRpcjEpOworICAgICAgICAgIFBzaVRlc3RVdGlsLmFkZFNvdXJjZVJvb3QobXlNb2R1bGUsIG15U3JjRGlyMSk7CisgICAgICAgIH0KKyAgICAgICAgY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICBMT0cuZXJyb3IoZSk7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9KTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RCdWcoKSB7CisgICAgQXBwbGljYXRpb25NYW5hZ2VyLmdldEFwcGxpY2F0aW9uKCkucnVuV3JpdGVBY3Rpb24obmV3IFJ1bm5hYmxlKCkgeworICAgICAgcHVibGljIHZvaWQgcnVuKCkgeworICAgICAgICBQc2lDbGFzcyBwc2lDbGFzcyA9IG15SmF2YUZhY2FkZS5maW5kQ2xhc3MoInAuQSIpOworICAgICAgICBhc3NlcnRFcXVhbHMoInAuQSIsIHBzaUNsYXNzLmdldFF1YWxpZmllZE5hbWUoKSk7CisKKyAgICAgICAgZmluYWwgUHNpRmlsZSBwc2lGaWxlID0gbXlQc2lNYW5hZ2VyLmZpbmRGaWxlKG15UGFja0Rpci5maW5kQ2hpbGQoIkEuamF2YSIpKTsKKyAgICAgICAgcHNpRmlsZS5nZXRDaGlsZHJlbigpOworICAgICAgICBhc3NlcnRFcXVhbHMocHNpRmlsZSwgcHNpQ2xhc3MuZ2V0Q29udGFpbmluZ0ZpbGUoKSk7CisKKyAgICAgICAgVmlydHVhbEZpbGUgZmlsZSA9IHBzaUZpbGUuZ2V0VmlydHVhbEZpbGUoKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKG15TW9kdWxlLCBNb2R1bGVVdGlsLmZpbmRNb2R1bGVGb3JGaWxlKGZpbGUsIG15UHJvamVjdCkpOworCisgICAgICAgIE1vZHVsZSBhbm90aGVyTW9kdWxlID0gY3JlYXRlTW9kdWxlKCJhbm90aGVyIik7CisgICAgICAgIG15RmlsZXNUb0RlbGV0ZS5hZGQobmV3IEZpbGUoYW5vdGhlck1vZHVsZS5nZXRNb2R1bGVGaWxlUGF0aCgpKSk7CisKKyAgICAgICAgUHNpVGVzdFV0aWwuYWRkU291cmNlUm9vdChhbm90aGVyTW9kdWxlLCBteVNyY0RpcjEpOworCisgICAgICAgIGFzc2VydEVxdWFscyhhbm90aGVyTW9kdWxlLCBNb2R1bGVVdGlsLmZpbmRNb2R1bGVGb3JGaWxlKGZpbGUsIG15UHJvamVjdCkpOworICAgICAgfQorICAgIH0pOworICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovcHNpL2ltcGwvZmlsZS9pbXBsL0V2ZW50c1Rlc3RMaXN0ZW5lci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL3BzaS9pbXBsL2ZpbGUvaW1wbC9FdmVudHNUZXN0TGlzdGVuZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43N2E4NGYwCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL3BzaS9pbXBsL2ZpbGUvaW1wbC9FdmVudHNUZXN0TGlzdGVuZXIuamF2YQpAQCAtMCwwICsxLDc2IEBACitwYWNrYWdlIGNvbS5pbnRlbGxpai5wc2kuaW1wbC5maWxlLmltcGw7CisKK2ltcG9ydCBjb20uaW50ZWxsaWoucHNpLlBzaVRyZWVDaGFuZ2VFdmVudDsKK2ltcG9ydCBjb20uaW50ZWxsaWoucHNpLlBzaVRyZWVDaGFuZ2VMaXN0ZW5lcjsKK2ltcG9ydCBvcmcuamV0YnJhaW5zLmFubm90YXRpb25zLk5vdE51bGw7CisKKy8qKgorICogIEBhdXRob3IgZHNsCisgKi8KK2NsYXNzIEV2ZW50c1Rlc3RMaXN0ZW5lciBpbXBsZW1lbnRzIFBzaVRyZWVDaGFuZ2VMaXN0ZW5lciB7CisgIFN0cmluZ0J1ZmZlciBteUJ1ZmZlciA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKKworICBwdWJsaWMgU3RyaW5nIGdldEV2ZW50c1N0cmluZygpIHsKKyAgICByZXR1cm4gbXlCdWZmZXIudG9TdHJpbmcoKTsKKyAgfQorCisgIEBPdmVycmlkZQorICBwdWJsaWMgdm9pZCBiZWZvcmVDaGlsZEFkZGl0aW9uKEBOb3ROdWxsIFBzaVRyZWVDaGFuZ2VFdmVudCBldmVudCkgeworICAgIG15QnVmZmVyLmFwcGVuZCgiYmVmb3JlQ2hpbGRBZGRpdGlvblxuIik7CisgIH0KKworICBAT3ZlcnJpZGUKKyAgcHVibGljIHZvaWQgYmVmb3JlQ2hpbGRSZW1vdmFsKEBOb3ROdWxsIFBzaVRyZWVDaGFuZ2VFdmVudCBldmVudCkgeworICAgIG15QnVmZmVyLmFwcGVuZCgiYmVmb3JlQ2hpbGRSZW1vdmFsXG4iKTsKKyAgfQorCisgIEBPdmVycmlkZQorICBwdWJsaWMgdm9pZCBiZWZvcmVDaGlsZFJlcGxhY2VtZW50KEBOb3ROdWxsIFBzaVRyZWVDaGFuZ2VFdmVudCBldmVudCkgeworICAgIG15QnVmZmVyLmFwcGVuZCgiYmVmb3JlQ2hpbGRSZXBsYWNlbWVudFxuIik7CisgIH0KKworICBAT3ZlcnJpZGUKKyAgcHVibGljIHZvaWQgYmVmb3JlQ2hpbGRNb3ZlbWVudChATm90TnVsbCBQc2lUcmVlQ2hhbmdlRXZlbnQgZXZlbnQpIHsKKyAgICBteUJ1ZmZlci5hcHBlbmQoImJlZm9yZUNoaWxkTW92ZW1lbnRcbiIpOworICB9CisKKyAgQE92ZXJyaWRlCisgIHB1YmxpYyB2b2lkIGJlZm9yZUNoaWxkcmVuQ2hhbmdlKEBOb3ROdWxsIFBzaVRyZWVDaGFuZ2VFdmVudCBldmVudCkgeworICAgIG15QnVmZmVyLmFwcGVuZCgiYmVmb3JlQ2hpbGRyZW5DaGFuZ2VcbiIpOworICB9CisKKyAgQE92ZXJyaWRlCisgIHB1YmxpYyB2b2lkIGJlZm9yZVByb3BlcnR5Q2hhbmdlKEBOb3ROdWxsIFBzaVRyZWVDaGFuZ2VFdmVudCBldmVudCkgeworICAgIG15QnVmZmVyLmFwcGVuZCgiYmVmb3JlUHJvcGVydHlDaGFuZ2VcbiIpOworICB9CisKKyAgQE92ZXJyaWRlCisgIHB1YmxpYyB2b2lkIGNoaWxkQWRkZWQoQE5vdE51bGwgUHNpVHJlZUNoYW5nZUV2ZW50IGV2ZW50KSB7CisgICAgbXlCdWZmZXIuYXBwZW5kKCJjaGlsZEFkZGVkXG4iKTsKKyAgfQorCisgIEBPdmVycmlkZQorICBwdWJsaWMgdm9pZCBjaGlsZFJlbW92ZWQoQE5vdE51bGwgUHNpVHJlZUNoYW5nZUV2ZW50IGV2ZW50KSB7CisgICAgbXlCdWZmZXIuYXBwZW5kKCJjaGlsZFJlbW92ZWRcbiIpOworICB9CisKKyAgQE92ZXJyaWRlCisgIHB1YmxpYyB2b2lkIGNoaWxkUmVwbGFjZWQoQE5vdE51bGwgUHNpVHJlZUNoYW5nZUV2ZW50IGV2ZW50KSB7CisgICAgbXlCdWZmZXIuYXBwZW5kKCJjaGlsZFJlcGxhY2VkXG4iKTsKKyAgfQorCisgIEBPdmVycmlkZQorICBwdWJsaWMgdm9pZCBjaGlsZHJlbkNoYW5nZWQoQE5vdE51bGwgUHNpVHJlZUNoYW5nZUV2ZW50IGV2ZW50KSB7CisgICAgbXlCdWZmZXIuYXBwZW5kKCJjaGlsZHJlbkNoYW5nZWRcbiIpOworICB9CisKKyAgQE92ZXJyaWRlCisgIHB1YmxpYyB2b2lkIGNoaWxkTW92ZWQoQE5vdE51bGwgUHNpVHJlZUNoYW5nZUV2ZW50IGV2ZW50KSB7CisgICAgbXlCdWZmZXIuYXBwZW5kKCJjaGlsZE1vdmVkXG4iKTsKKyAgfQorCisgIEBPdmVycmlkZQorICBwdWJsaWMgdm9pZCBwcm9wZXJ0eUNoYW5nZWQoQE5vdE51bGwgUHNpVHJlZUNoYW5nZUV2ZW50IGV2ZW50KSB7CisgICAgbXlCdWZmZXIuYXBwZW5kKCJwcm9wZXJ0eUNoYW5nZWRcbiIpOworICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovcHNpL2ltcGwvZmlsZS9pbXBsL0ludmFsaWRhdGVDbGFzc0ZpbGVUZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovcHNpL2ltcGwvZmlsZS9pbXBsL0ludmFsaWRhdGVDbGFzc0ZpbGVUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTRiMTY0OAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9wc2kvaW1wbC9maWxlL2ltcGwvSW52YWxpZGF0ZUNsYXNzRmlsZVRlc3QuamF2YQpAQCAtMCwwICsxLDg5IEBACisvKgorICogQ29weXJpZ2h0IDIwMDAtMjAxMiBKZXRCcmFpbnMgcy5yLm8uCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworcGFja2FnZSBjb20uaW50ZWxsaWoucHNpLmltcGwuZmlsZS5pbXBsOworCitpbXBvcnQgY29tLmludGVsbGlqLkphdmFUZXN0VXRpbDsKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS5yb290cy5Nb2R1bGVSb290TW9kaWZpY2F0aW9uVXRpbDsKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS51dGlsLmlvLkZpbGVVdGlsOworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLnZmcy5Mb2NhbEZpbGVTeXN0ZW07CitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkudmZzLlZpcnR1YWxGaWxlOworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLnZmcy5WaXJ0dWFsRmlsZU1hbmFnZXI7CitpbXBvcnQgY29tLmludGVsbGlqLnBzaS5Qc2lDbGFzczsKK2ltcG9ydCBjb20uaW50ZWxsaWoucHNpLlBzaVRyZWVDaGFuZ2VBZGFwdGVyOworaW1wb3J0IGNvbS5pbnRlbGxpai5wc2kuUHNpVHJlZUNoYW5nZUV2ZW50OworaW1wb3J0IGNvbS5pbnRlbGxpai5wc2kuc2VhcmNoLkdsb2JhbFNlYXJjaFNjb3BlOworaW1wb3J0IGNvbS5pbnRlbGxpai50ZXN0RnJhbWV3b3JrLlBzaVRlc3RDYXNlOworaW1wb3J0IG9yZy5qZXRicmFpbnMuYW5ub3RhdGlvbnMuTm90TnVsbDsKKworaW1wb3J0IGphdmEuaW8uRmlsZTsKKworLyoqCisgKiBAYXV0aG9yIHZlbgorICovCitwdWJsaWMgY2xhc3MgSW52YWxpZGF0ZUNsYXNzRmlsZVRlc3QgZXh0ZW5kcyBQc2lUZXN0Q2FzZSB7CisgIHByaXZhdGUgRmlsZSBteVJvb3Q7CisKKyAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEJBU0VfUEFUSCA9ICIvcHNpL2phdmEvY2xzLyI7CisKKyAgQE92ZXJyaWRlCisgIHByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgc3VwZXIuc2V0VXAoKTsKKyAgICBteVJvb3QgPSBjcmVhdGVUZW1wRGlyZWN0b3J5KGZhbHNlKTsKKyAgICBteUZpbGVzVG9EZWxldGUuYWRkKG15Um9vdCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0MSgpIHRocm93cyBFeGNlcHRpb24geworICAgIFN0cmluZyBzcmNQYXRoID0gSmF2YVRlc3RVdGlsLmdldEphdmFUZXN0RGF0YVBhdGgoKSArIEJBU0VfUEFUSCArICJDbGF6ei5jbGFzcyI7CisgICAgZmluYWwgRmlsZSBzcmNGaWxlID0gbmV3IEZpbGUoc3JjUGF0aCk7CisgICAgZmluYWwgRmlsZSBkc3RGaWxlID0gbmV3IEZpbGUobXlSb290LCAiQ2xhenouY2xhc3MiKTsKKyAgICBhc3NlcnRGYWxzZShkc3RGaWxlLmV4aXN0cygpKTsKKyAgICBGaWxlVXRpbC5jb3B5KHNyY0ZpbGUsIGRzdEZpbGUpOworCisgICAgZmluYWwgVmlydHVhbEZpbGUgcm9vdFZGaWxlID0gTG9jYWxGaWxlU3lzdGVtLmdldEluc3RhbmNlKCkucmVmcmVzaEFuZEZpbmRGaWxlQnlJb0ZpbGUobXlSb290KTsKKworICAgIGFzc2VydE5vdE51bGwocm9vdFZGaWxlKTsKKworICAgIE1vZHVsZVJvb3RNb2RpZmljYXRpb25VdGlsLmFkZE1vZHVsZUxpYnJhcnkobXlNb2R1bGUsIHJvb3RWRmlsZS5nZXRVcmwoKSk7CisKKyAgICBQc2lDbGFzcyBjbGF6eiA9IGdldEphdmFGYWNhZGUoKS5maW5kQ2xhc3MoIkNsYXp6IiwgR2xvYmFsU2VhcmNoU2NvcGUuYWxsU2NvcGUobXlQcm9qZWN0KSk7CisgICAgYXNzZXJ0Tm90TnVsbChjbGF6eik7CisgICAgZmluYWwgYm9vbGVhbltdIG5vdGlmaWVkID0gbmV3IGJvb2xlYW5bXSB7ZmFsc2V9OworICAgIGZpbmFsIFBzaVRyZWVDaGFuZ2VBZGFwdGVyIGxpc3RlbmVyID0gbmV3IFBzaVRyZWVDaGFuZ2VBZGFwdGVyKCkgeworICAgICAgQE92ZXJyaWRlCisgICAgICBwdWJsaWMgdm9pZCBjaGlsZFJlbW92ZWQoQE5vdE51bGwgUHNpVHJlZUNoYW5nZUV2ZW50IGV2ZW50KSB7CisgICAgICAgIG5vdGlmaWVkWzBdID0gdHJ1ZTsKKyAgICAgIH0KKworICAgICAgQE92ZXJyaWRlCisgICAgICBwdWJsaWMgdm9pZCBjaGlsZHJlbkNoYW5nZWQoQE5vdE51bGwgUHNpVHJlZUNoYW5nZUV2ZW50IGV2ZW50KSB7CisgICAgICAgIG5vdGlmaWVkWzBdID0gdHJ1ZTsKKyAgICAgIH0KKyAgICB9OworICAgIGdldFBzaU1hbmFnZXIoKS5hZGRQc2lUcmVlQ2hhbmdlTGlzdGVuZXIobGlzdGVuZXIpOworCisgICAgdHJ5IHsKKyAgICAgIGRzdEZpbGUuc2V0TGFzdE1vZGlmaWVkKFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpKTsKKyAgICAgIFZpcnR1YWxGaWxlTWFuYWdlci5nZXRJbnN0YW5jZSgpLnN5bmNSZWZyZXNoKCk7CisgICAgICBhc3NlcnRUcnVlKCJObyBldmVudCBzZW50ISIsIG5vdGlmaWVkWzBdKTsKKyAgICB9CisgICAgZmluYWxseSB7CisgICAgICBnZXRQc2lNYW5hZ2VyKCkucmVtb3ZlUHNpVHJlZUNoYW5nZUxpc3RlbmVyKGxpc3RlbmVyKTsKKyAgICB9CisKKyAgICBhc3NlcnRGYWxzZShjbGF6ei5pc1ZhbGlkKCkpOworICAgIGFzc2VydE5vdE51bGwoZ2V0SmF2YUZhY2FkZSgpLmZpbmRDbGFzcygiQ2xhenoiLCBHbG9iYWxTZWFyY2hTY29wZS5hbGxTY29wZShteVByb2plY3QpKSk7CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9wc2kvaW1wbC9maWxlL2ltcGwvUHNpRXZlbnRzVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL3BzaS9pbXBsL2ZpbGUvaW1wbC9Qc2lFdmVudHNUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGVhOGQzYQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9wc2kvaW1wbC9maWxlL2ltcGwvUHNpRXZlbnRzVGVzdC5qYXZhCkBAIC0wLDAgKzEsNjQzIEBACitwYWNrYWdlIGNvbS5pbnRlbGxpai5wc2kuaW1wbC5maWxlLmltcGw7CisKKworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLmFwcGxpY2F0aW9uLkFwcGxpY2F0aW9uTWFuYWdlcjsKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS5kaWFnbm9zdGljLkxvZ2dlcjsKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS5lZGl0b3IuRG9jdW1lbnQ7CitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkuZmlsZVR5cGVzLkZpbGVUeXBlTWFuYWdlcjsKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS5maWxlVHlwZXMuZXguRmlsZVR5cGVNYW5hZ2VyRXg7CitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkucm9vdHMuTW9kdWxlUm9vdE1vZGlmaWNhdGlvblV0aWw7CitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkudXRpbC5pby5GaWxlVXRpbDsKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS52ZnMuTG9jYWxGaWxlU3lzdGVtOworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLnZmcy5WZnNVdGlsOworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLnZmcy5WaXJ0dWFsRmlsZTsKK2ltcG9ydCBjb20uaW50ZWxsaWoucHNpLio7CitpbXBvcnQgY29tLmludGVsbGlqLnBzaS5pbXBsLlBzaVRyZWVDaGFuZ2VFdmVudEltcGw7CitpbXBvcnQgY29tLmludGVsbGlqLnBzaS5zZWFyY2guR2xvYmFsU2VhcmNoU2NvcGU7CitpbXBvcnQgY29tLmludGVsbGlqLnRlc3RGcmFtZXdvcmsuUHNpVGVzdENhc2U7CitpbXBvcnQgY29tLmludGVsbGlqLnRlc3RGcmFtZXdvcmsuUHNpVGVzdFV0aWw7CitpbXBvcnQgY29tLmludGVsbGlqLnV0aWwuV2FpdEZvcjsKK2ltcG9ydCBjb20uaW50ZWxsaWoudXRpbC5pby5SZWFkT25seUF0dHJpYnV0ZVV0aWw7CitpbXBvcnQgb3JnLmpldGJyYWlucy5hbm5vdGF0aW9ucy5Ob3ROdWxsOworCitpbXBvcnQgamF2YS5pby5GaWxlOworaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CisKK3B1YmxpYyBjbGFzcyBQc2lFdmVudHNUZXN0IGV4dGVuZHMgUHNpVGVzdENhc2UgeworICBwcml2YXRlIHN0YXRpYyBmaW5hbCBMb2dnZXIgTE9HID0gTG9nZ2VyLmdldEluc3RhbmNlKCIjY29tLmludGVsbGlqLnBzaS5pbXBsLmZpbGUuaW1wbC5Qc2lFdmVudHNUZXN0Iik7CisKKyAgcHJpdmF0ZSBWaXJ0dWFsRmlsZSBteVByakRpcjE7CisgIHByaXZhdGUgVmlydHVhbEZpbGUgbXlQcmpEaXIyOworICBwcml2YXRlIFZpcnR1YWxGaWxlIG15UHJqRGlyMzsKKyAgcHJpdmF0ZSBWaXJ0dWFsRmlsZSBteVNyY0RpcjE7CisgIHByaXZhdGUgVmlydHVhbEZpbGUgbXlTcmNEaXIyOworICBwcml2YXRlIFZpcnR1YWxGaWxlIG15U3JjRGlyMzsKKyAgcHJpdmF0ZSBWaXJ0dWFsRmlsZSBteVNyY0RpcjQ7CisgIHByaXZhdGUgVmlydHVhbEZpbGUgbXlDbHNEaXIxOworICBwcml2YXRlIFZpcnR1YWxGaWxlIG15RXhjbHVkZWREaXIxOworCisgIEBPdmVycmlkZQorICBwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24geworICAgIHN1cGVyLnNldFVwKCk7CisKKyAgICBmaW5hbCBGaWxlIHJvb3QgPSBGaWxlVXRpbC5jcmVhdGVUZW1wRmlsZShnZXROYW1lKCksICIiKTsKKyAgICByb290LmRlbGV0ZSgpOworICAgIHJvb3QubWtkaXIoKTsKKyAgICBteUZpbGVzVG9EZWxldGUuYWRkKHJvb3QpOworCisgICAgQXBwbGljYXRpb25NYW5hZ2VyLmdldEFwcGxpY2F0aW9uKCkucnVuV3JpdGVBY3Rpb24obmV3IFJ1bm5hYmxlKCkgeworICAgICAgQE92ZXJyaWRlCisgICAgICBwdWJsaWMgdm9pZCBydW4oKSB7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgVmlydHVhbEZpbGUgcm9vdFZGaWxlID0gTG9jYWxGaWxlU3lzdGVtLmdldEluc3RhbmNlKCkucmVmcmVzaEFuZEZpbmRGaWxlQnlJb0ZpbGUocm9vdCk7CisKKyAgICAgICAgICBteVByakRpcjEgPSByb290VkZpbGUuY3JlYXRlQ2hpbGREaXJlY3RvcnkobnVsbCwgInByajEiKTsKKyAgICAgICAgICBteVNyY0RpcjEgPSBteVByakRpcjEuY3JlYXRlQ2hpbGREaXJlY3RvcnkobnVsbCwgInNyYzEiKTsKKyAgICAgICAgICBteVNyY0RpcjIgPSBteVByakRpcjEuY3JlYXRlQ2hpbGREaXJlY3RvcnkobnVsbCwgInNyYzIiKTsKKworICAgICAgICAgIG15UHJqRGlyMiA9IHJvb3RWRmlsZS5jcmVhdGVDaGlsZERpcmVjdG9yeShudWxsLCAicHJqMiIpOworICAgICAgICAgIG15U3JjRGlyMyA9IG15UHJqRGlyMjsKKworCisgICAgICAgICAgbXlDbHNEaXIxID0gbXlQcmpEaXIxLmNyZWF0ZUNoaWxkRGlyZWN0b3J5KG51bGwsICJjbHMxIik7CisKKyAgICAgICAgICBteUV4Y2x1ZGVkRGlyMSA9IG15U3JjRGlyMS5jcmVhdGVDaGlsZERpcmVjdG9yeShudWxsLCAiZXhjbHVkZWQiKTsKKworICAgICAgICAgIFBzaVRlc3RVdGlsLmFkZENvbnRlbnRSb290KG15TW9kdWxlLCBteVByakRpcjEpOworICAgICAgICAgIFBzaVRlc3RVdGlsLmFkZFNvdXJjZVJvb3QobXlNb2R1bGUsIG15U3JjRGlyMSk7CisgICAgICAgICAgUHNpVGVzdFV0aWwuYWRkU291cmNlUm9vdChteU1vZHVsZSwgbXlTcmNEaXIyKTsKKyAgICAgICAgICBQc2lUZXN0VXRpbC5hZGRDb250ZW50Um9vdChteU1vZHVsZSwgbXlQcmpEaXIyKTsKKyAgICAgICAgICBQc2lUZXN0VXRpbC5hZGRFeGNsdWRlZFJvb3QobXlNb2R1bGUsIG15RXhjbHVkZWREaXIxKTsKKyAgICAgICAgICBNb2R1bGVSb290TW9kaWZpY2F0aW9uVXRpbC5hZGRNb2R1bGVMaWJyYXJ5KG15TW9kdWxlLCBteUNsc0RpcjEuZ2V0VXJsKCkpOworICAgICAgICAgIFBzaVRlc3RVdGlsLmFkZFNvdXJjZVJvb3QobXlNb2R1bGUsIG15U3JjRGlyMyk7CisgICAgICAgIH0gY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICBMT0cuZXJyb3IoZSk7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9KTsKKworICAgIC8vKChQc2lNYW5hZ2VySW1wbClteVBzaU1hbmFnZXIpLmdldEZpbGVNYW5hZ2VyKCkuZGlzYmxlVkZTRXZlbnRzUHJvY2Vzc2luZygpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdENyZWF0ZUZpbGUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBGaWxlTWFuYWdlciBmaWxlTWFuYWdlciA9IG15UHNpTWFuYWdlci5nZXRGaWxlTWFuYWdlcigpOworICAgIEV2ZW50c1Rlc3RMaXN0ZW5lciBsaXN0ZW5lciA9IG5ldyBFdmVudHNUZXN0TGlzdGVuZXIoKTsKKyAgICBteVBzaU1hbmFnZXIuYWRkUHNpVHJlZUNoYW5nZUxpc3RlbmVyKGxpc3RlbmVyLGdldFRlc3RSb290RGlzcG9zYWJsZSgpKTsKKworICAgIFBzaURpcmVjdG9yeSBwc2lEaXIgPSBmaWxlTWFuYWdlci5maW5kRGlyZWN0b3J5KG15UHJqRGlyMSk7CisgICAgbXlQcmpEaXIxLmNyZWF0ZUNoaWxkRGF0YShudWxsLCAiYS50eHQiKTsKKworICAgIFN0cmluZyBzdHJpbmcgPSBsaXN0ZW5lci5nZXRFdmVudHNTdHJpbmcoKTsKKyAgICBTdHJpbmcgZXhwZWN0ZWQgPQorICAgICAgICAgICAgImJlZm9yZUNoaWxkQWRkaXRpb25cbiIgKworICAgICAgICAgICAgImNoaWxkQWRkZWRcbiI7CisgICAgYXNzZXJ0RXF1YWxzKGV4cGVjdGVkLCBzdHJpbmcpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdENyZWF0ZURpcmVjdG9yeSgpIHRocm93cyBFeGNlcHRpb24geworICAgIEZpbGVNYW5hZ2VyIGZpbGVNYW5hZ2VyID0gbXlQc2lNYW5hZ2VyLmdldEZpbGVNYW5hZ2VyKCk7CisgICAgRXZlbnRzVGVzdExpc3RlbmVyIGxpc3RlbmVyID0gbmV3IEV2ZW50c1Rlc3RMaXN0ZW5lcigpOworICAgIG15UHNpTWFuYWdlci5hZGRQc2lUcmVlQ2hhbmdlTGlzdGVuZXIobGlzdGVuZXIsZ2V0VGVzdFJvb3REaXNwb3NhYmxlKCkpOworCisgICAgUHNpRGlyZWN0b3J5IHBzaURpciA9IGZpbGVNYW5hZ2VyLmZpbmREaXJlY3RvcnkobXlQcmpEaXIxKTsKKyAgICBteVByakRpcjEuY3JlYXRlQ2hpbGREaXJlY3RvcnkobnVsbCwgImFhYSIpOworCisgICAgU3RyaW5nIHN0cmluZyA9IGxpc3RlbmVyLmdldEV2ZW50c1N0cmluZygpOworICAgIFN0cmluZyBleHBlY3RlZCA9CisgICAgICAgICAgICAiYmVmb3JlQ2hpbGRBZGRpdGlvblxuIiArCisgICAgICAgICAgICAiY2hpbGRBZGRlZFxuIjsKKyAgICBhc3NlcnRFcXVhbHMoZXhwZWN0ZWQsIHN0cmluZyk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0RGVsZXRlRmlsZSgpIHRocm93cyBFeGNlcHRpb24geworICAgIFZpcnR1YWxGaWxlIGZpbGUgPSBteVByakRpcjEuY3JlYXRlQ2hpbGREYXRhKG51bGwsICJhLnR4dCIpOworCisgICAgRmlsZU1hbmFnZXIgZmlsZU1hbmFnZXIgPSBteVBzaU1hbmFnZXIuZ2V0RmlsZU1hbmFnZXIoKTsKKyAgICBQc2lGaWxlIHBzaUZpbGUgPSBmaWxlTWFuYWdlci5maW5kRmlsZShmaWxlKTsvL2l0J3MgaW1wb3J0YW50IHRvIGhvbGQgdGhlIHJlZmVyZW5jZQorCisgICAgRXZlbnRzVGVzdExpc3RlbmVyIGxpc3RlbmVyID0gbmV3IEV2ZW50c1Rlc3RMaXN0ZW5lcigpOworICAgIG15UHNpTWFuYWdlci5hZGRQc2lUcmVlQ2hhbmdlTGlzdGVuZXIobGlzdGVuZXIsZ2V0VGVzdFJvb3REaXNwb3NhYmxlKCkpOworCisgICAgZmlsZS5kZWxldGUobnVsbCk7CisKKyAgICBTdHJpbmcgc3RyaW5nID0gbGlzdGVuZXIuZ2V0RXZlbnRzU3RyaW5nKCk7CisgICAgU3RyaW5nIGV4cGVjdGVkID0KKyAgICAgICAgICAgICJiZWZvcmVDaGlsZFJlbW92YWxcbiIgKworICAgICAgICAgICAgImNoaWxkUmVtb3ZlZFxuIjsKKyAgICBhc3NlcnRFcXVhbHMoZXhwZWN0ZWQsIHN0cmluZyk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0RGVsZXRlRGlyZWN0b3J5KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgVmlydHVhbEZpbGUgZmlsZSA9IG15UHJqRGlyMS5jcmVhdGVDaGlsZERpcmVjdG9yeShudWxsLCAiYWFhIik7CisKKyAgICBGaWxlTWFuYWdlciBmaWxlTWFuYWdlciA9IG15UHNpTWFuYWdlci5nZXRGaWxlTWFuYWdlcigpOworICAgIFBzaURpcmVjdG9yeSBwc2lEaXJlY3RvcnkgPSBmaWxlTWFuYWdlci5maW5kRGlyZWN0b3J5KGZpbGUpOworCisgICAgRXZlbnRzVGVzdExpc3RlbmVyIGxpc3RlbmVyID0gbmV3IEV2ZW50c1Rlc3RMaXN0ZW5lcigpOworICAgIG15UHNpTWFuYWdlci5hZGRQc2lUcmVlQ2hhbmdlTGlzdGVuZXIobGlzdGVuZXIsZ2V0VGVzdFJvb3REaXNwb3NhYmxlKCkpOworCisgICAgZmlsZS5kZWxldGUobnVsbCk7CisKKyAgICBTdHJpbmcgc3RyaW5nID0gbGlzdGVuZXIuZ2V0RXZlbnRzU3RyaW5nKCk7CisgICAgU3RyaW5nIGV4cGVjdGVkID0KKyAgICAgICAgICAgICJiZWZvcmVDaGlsZFJlbW92YWxcbiIgKworICAgICAgICAgICAgImNoaWxkUmVtb3ZlZFxuIjsKKyAgICBhc3NlcnRFcXVhbHMoZXhwZWN0ZWQsIHN0cmluZyk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0UmVuYW1lRmlsZTEoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBGaWxlTWFuYWdlciBmaWxlTWFuYWdlciA9IG15UHNpTWFuYWdlci5nZXRGaWxlTWFuYWdlcigpOworICAgIFZpcnR1YWxGaWxlIGZpbGUgPSBteVByakRpcjEuY3JlYXRlQ2hpbGREYXRhKG51bGwsICJhLnR4dCIpOworICAgIFBzaUZpbGUgcHNpRmlsZSA9IGZpbGVNYW5hZ2VyLmZpbmRGaWxlKGZpbGUpOworCisgICAgRXZlbnRzVGVzdExpc3RlbmVyIGxpc3RlbmVyID0gbmV3IEV2ZW50c1Rlc3RMaXN0ZW5lcigpOworICAgIG15UHNpTWFuYWdlci5hZGRQc2lUcmVlQ2hhbmdlTGlzdGVuZXIobGlzdGVuZXIsZ2V0VGVzdFJvb3REaXNwb3NhYmxlKCkpOworCisgICAgZmlsZS5yZW5hbWUobnVsbCwgImIudHh0Iik7CisKKyAgICBTdHJpbmcgc3RyaW5nID0gbGlzdGVuZXIuZ2V0RXZlbnRzU3RyaW5nKCk7CisgICAgU3RyaW5nIGV4cGVjdGVkID0KKyAgICAgICAgICAgICJiZWZvcmVQcm9wZXJ0eUNoYW5nZVxuIiArCisgICAgICAgICAgICAicHJvcGVydHlDaGFuZ2VkXG4iOworICAgIGFzc2VydEVxdWFscyhleHBlY3RlZCwgc3RyaW5nKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RSZW5hbWVGaWxlMigpIHRocm93cyBFeGNlcHRpb24geworICAgIEZpbGVNYW5hZ2VyIGZpbGVNYW5hZ2VyID0gbXlQc2lNYW5hZ2VyLmdldEZpbGVNYW5hZ2VyKCk7CisgICAgVmlydHVhbEZpbGUgZmlsZSA9IG15UHJqRGlyMS5jcmVhdGVDaGlsZERhdGEobnVsbCwgImEudHh0Iik7CisgICAgUHNpRmlsZSBwc2lGaWxlID0gZmlsZU1hbmFnZXIuZmluZEZpbGUoZmlsZSk7CisKKyAgICBFdmVudHNUZXN0TGlzdGVuZXIgbGlzdGVuZXIgPSBuZXcgRXZlbnRzVGVzdExpc3RlbmVyKCk7CisgICAgbXlQc2lNYW5hZ2VyLmFkZFBzaVRyZWVDaGFuZ2VMaXN0ZW5lcihsaXN0ZW5lcixnZXRUZXN0Um9vdERpc3Bvc2FibGUoKSk7CisKKyAgICBmaWxlLnJlbmFtZShudWxsLCAiYi54bWwiKTsKKworICAgIFN0cmluZyBzdHJpbmcgPSBsaXN0ZW5lci5nZXRFdmVudHNTdHJpbmcoKTsKKyAgICBTdHJpbmcgZXhwZWN0ZWQgPQorICAgICAgICAgICAgImJlZm9yZUNoaWxkUmVwbGFjZW1lbnRcbiIgKworICAgICAgICAgICAgImNoaWxkUmVwbGFjZWRcbiI7CisgICAgYXNzZXJ0RXF1YWxzKGV4cGVjdGVkLCBzdHJpbmcpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFJlbmFtZUZpbGUzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgRmlsZU1hbmFnZXIgZmlsZU1hbmFnZXIgPSBteVBzaU1hbmFnZXIuZ2V0RmlsZU1hbmFnZXIoKTsKKyAgICBWaXJ0dWFsRmlsZSBmaWxlID0gbXlQcmpEaXIxLmNyZWF0ZUNoaWxkRGF0YShudWxsLCAiYS50eHQiKTsKKyAgICBQc2lGaWxlIHBzaUZpbGUgPSBmaWxlTWFuYWdlci5maW5kRmlsZShmaWxlKTsKKworICAgIEV2ZW50c1Rlc3RMaXN0ZW5lciBsaXN0ZW5lciA9IG5ldyBFdmVudHNUZXN0TGlzdGVuZXIoKTsKKyAgICBteVBzaU1hbmFnZXIuYWRkUHNpVHJlZUNoYW5nZUxpc3RlbmVyKGxpc3RlbmVyLGdldFRlc3RSb290RGlzcG9zYWJsZSgpKTsKKworICAgIGZpbGUucmVuYW1lKG51bGwsICJDVlMiKTsKKworICAgIFN0cmluZyBzdHJpbmcgPSBsaXN0ZW5lci5nZXRFdmVudHNTdHJpbmcoKTsKKyAgICBTdHJpbmcgZXhwZWN0ZWQgPQorICAgICAgICAgICAgImJlZm9yZUNoaWxkUmVtb3ZhbFxuIiArCisgICAgICAgICAgICAiY2hpbGRSZW1vdmVkXG4iOworICAgIGFzc2VydEVxdWFscyhleHBlY3RlZCwgc3RyaW5nKTsKKyAgICBhc3NlcnROdWxsKGZpbGVNYW5hZ2VyLmZpbmRGaWxlKGZpbGUpKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RSZW5hbWVGaWxlNCgpIHRocm93cyBFeGNlcHRpb24geworICAgIEZpbGVNYW5hZ2VyIGZpbGVNYW5hZ2VyID0gbXlQc2lNYW5hZ2VyLmdldEZpbGVNYW5hZ2VyKCk7CisgICAgVmlydHVhbEZpbGUgZmlsZSA9IG15UHJqRGlyMS5jcmVhdGVDaGlsZERhdGEobnVsbCwgIkNWUyIpOworICAgIFBzaURpcmVjdG9yeSBwc2lEaXJlY3RvcnkgPSBmaWxlTWFuYWdlci5maW5kRGlyZWN0b3J5KGZpbGUuZ2V0UGFyZW50KCkpOworCisgICAgRXZlbnRzVGVzdExpc3RlbmVyIGxpc3RlbmVyID0gbmV3IEV2ZW50c1Rlc3RMaXN0ZW5lcigpOworICAgIG15UHNpTWFuYWdlci5hZGRQc2lUcmVlQ2hhbmdlTGlzdGVuZXIobGlzdGVuZXIsZ2V0VGVzdFJvb3REaXNwb3NhYmxlKCkpOworCisgICAgZmlsZS5yZW5hbWUobnVsbCwgImFhYS50eHQiKTsKKworICAgIFN0cmluZyBzdHJpbmcgPSBsaXN0ZW5lci5nZXRFdmVudHNTdHJpbmcoKTsKKyAgICBTdHJpbmcgZXhwZWN0ZWQgPQorICAgICAgICAgICAgImJlZm9yZUNoaWxkQWRkaXRpb25cbiIgKworICAgICAgICAgICAgImNoaWxkQWRkZWRcbiI7CisgICAgYXNzZXJ0RXF1YWxzKGV4cGVjdGVkLCBzdHJpbmcpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFJlbmFtZURpcmVjdG9yeTEoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBGaWxlTWFuYWdlciBmaWxlTWFuYWdlciA9IG15UHNpTWFuYWdlci5nZXRGaWxlTWFuYWdlcigpOworICAgIFZpcnR1YWxGaWxlIGZpbGUgPSBteVByakRpcjEuY3JlYXRlQ2hpbGREaXJlY3RvcnkobnVsbCwgImRpcjEiKTsKKyAgICBQc2lEaXJlY3RvcnkgcHNpRGlyZWN0b3J5ID0gZmlsZU1hbmFnZXIuZmluZERpcmVjdG9yeShmaWxlKTsKKworICAgIEV2ZW50c1Rlc3RMaXN0ZW5lciBsaXN0ZW5lciA9IG5ldyBFdmVudHNUZXN0TGlzdGVuZXIoKTsKKyAgICBteVBzaU1hbmFnZXIuYWRkUHNpVHJlZUNoYW5nZUxpc3RlbmVyKGxpc3RlbmVyLGdldFRlc3RSb290RGlzcG9zYWJsZSgpKTsKKworICAgIGZpbGUucmVuYW1lKG51bGwsICJkaXIyIik7CisKKyAgICBTdHJpbmcgc3RyaW5nID0gbGlzdGVuZXIuZ2V0RXZlbnRzU3RyaW5nKCk7CisgICAgU3RyaW5nIGV4cGVjdGVkID0KKyAgICAgICAgICAgICJiZWZvcmVQcm9wZXJ0eUNoYW5nZVxuIiArCisgICAgICAgICAgICAicHJvcGVydHlDaGFuZ2VkXG4iOworICAgIGFzc2VydEVxdWFscyhleHBlY3RlZCwgc3RyaW5nKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RSZW5hbWVEaXJlY3RvcnkyKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgRmlsZU1hbmFnZXIgZmlsZU1hbmFnZXIgPSBteVBzaU1hbmFnZXIuZ2V0RmlsZU1hbmFnZXIoKTsKKyAgICBWaXJ0dWFsRmlsZSBmaWxlID0gbXlQcmpEaXIxLmNyZWF0ZUNoaWxkRGlyZWN0b3J5KG51bGwsICJkaXIxIik7CisgICAgUHNpRGlyZWN0b3J5IHBzaURpcmVjdG9yeSA9IGZpbGVNYW5hZ2VyLmZpbmREaXJlY3RvcnkoZmlsZSk7CisKKyAgICBFdmVudHNUZXN0TGlzdGVuZXIgbGlzdGVuZXIgPSBuZXcgRXZlbnRzVGVzdExpc3RlbmVyKCk7CisgICAgbXlQc2lNYW5hZ2VyLmFkZFBzaVRyZWVDaGFuZ2VMaXN0ZW5lcihsaXN0ZW5lcixnZXRUZXN0Um9vdERpc3Bvc2FibGUoKSk7CisKKyAgICBmaWxlLnJlbmFtZShudWxsLCAiQ1ZTIik7CisKKyAgICBTdHJpbmcgc3RyaW5nID0gbGlzdGVuZXIuZ2V0RXZlbnRzU3RyaW5nKCk7CisgICAgU3RyaW5nIGV4cGVjdGVkID0KKyAgICAgICAgICAgICJiZWZvcmVDaGlsZFJlbW92YWxcbiIgKworICAgICAgICAgICAgImNoaWxkUmVtb3ZlZFxuIjsKKyAgICBhc3NlcnRFcXVhbHMoZXhwZWN0ZWQsIHN0cmluZyk7CisgICAgYXNzZXJ0TnVsbChmaWxlTWFuYWdlci5maW5kRGlyZWN0b3J5KGZpbGUpKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RSZW5hbWVEaXJlY3RvcnkzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgRmlsZU1hbmFnZXIgZmlsZU1hbmFnZXIgPSBteVBzaU1hbmFnZXIuZ2V0RmlsZU1hbmFnZXIoKTsKKyAgICBWaXJ0dWFsRmlsZSBmaWxlID0gbXlQcmpEaXIxLmNyZWF0ZUNoaWxkRGlyZWN0b3J5KG51bGwsICJDVlMiKTsKKyAgICBQc2lEaXJlY3RvcnkgcHNpRGlyZWN0b3J5ID0gZmlsZU1hbmFnZXIuZmluZERpcmVjdG9yeShmaWxlLmdldFBhcmVudCgpKTsKKworICAgIEV2ZW50c1Rlc3RMaXN0ZW5lciBsaXN0ZW5lciA9IG5ldyBFdmVudHNUZXN0TGlzdGVuZXIoKTsKKyAgICBteVBzaU1hbmFnZXIuYWRkUHNpVHJlZUNoYW5nZUxpc3RlbmVyKGxpc3RlbmVyLGdldFRlc3RSb290RGlzcG9zYWJsZSgpKTsKKworICAgIGZpbGUucmVuYW1lKG51bGwsICJkaXIiKTsKKworICAgIFN0cmluZyBzdHJpbmcgPSBsaXN0ZW5lci5nZXRFdmVudHNTdHJpbmcoKTsKKyAgICBTdHJpbmcgZXhwZWN0ZWQgPQorICAgICAgICAgICAgImJlZm9yZUNoaWxkQWRkaXRpb25cbiIgKworICAgICAgICAgICAgImNoaWxkQWRkZWRcbiI7CisgICAgYXNzZXJ0RXF1YWxzKGV4cGVjdGVkLCBzdHJpbmcpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdE1ha2VGaWxlUmVhZE9ubHkoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBGaWxlTWFuYWdlciBmaWxlTWFuYWdlciA9IG15UHNpTWFuYWdlci5nZXRGaWxlTWFuYWdlcigpOworICAgIFZpcnR1YWxGaWxlIGZpbGUgPSBteVByakRpcjEuY3JlYXRlQ2hpbGREYXRhKG51bGwsICJhLnR4dCIpOworICAgIFBzaUZpbGUgcHNpRmlsZSA9IGZpbGVNYW5hZ2VyLmZpbmRGaWxlKGZpbGUpOworCisgICAgZmluYWwgRXZlbnRzVGVzdExpc3RlbmVyIGxpc3RlbmVyID0gbmV3IEV2ZW50c1Rlc3RMaXN0ZW5lcigpOworICAgIG15UHNpTWFuYWdlci5hZGRQc2lUcmVlQ2hhbmdlTGlzdGVuZXIobGlzdGVuZXIsZ2V0VGVzdFJvb3REaXNwb3NhYmxlKCkpOworCisgICAgUmVhZE9ubHlBdHRyaWJ1dGVVdGlsLnNldFJlYWRPbmx5QXR0cmlidXRlKGZpbGUsIHRydWUpOworCisgICAgU3RyaW5nIHN0cmluZyA9IGxpc3RlbmVyLmdldEV2ZW50c1N0cmluZygpOworICAgIGZpbmFsIFN0cmluZyBleHBlY3RlZCA9CisgICAgICAgICAgICAiYmVmb3JlUHJvcGVydHlDaGFuZ2VcbiIgKworICAgICAgICAgICAgInByb3BlcnR5Q2hhbmdlZFxuIjsKKworICAgIG5ldyBXYWl0Rm9yKDUwMCl7CisgICAgICBAT3ZlcnJpZGUKKyAgICAgIHByb3RlY3RlZCBib29sZWFuIGNvbmRpdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIGV4cGVjdGVkLmVxdWFscyhsaXN0ZW5lci5nZXRFdmVudHNTdHJpbmcoKSk7CisgICAgICB9CisgICAgfS5hc3NlcnRDb21wbGV0ZWQoZXhwZWN0ZWQpOworCisgICAgUmVhZE9ubHlBdHRyaWJ1dGVVdGlsLnNldFJlYWRPbmx5QXR0cmlidXRlKGZpbGUsIGZhbHNlKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RNb3ZlRmlsZTEoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBGaWxlTWFuYWdlciBmaWxlTWFuYWdlciA9IG15UHNpTWFuYWdlci5nZXRGaWxlTWFuYWdlcigpOworICAgIFZpcnR1YWxGaWxlIGZpbGUgPSBteVByakRpcjEuY3JlYXRlQ2hpbGREYXRhKG51bGwsICJhLnR4dCIpOworICAgIFBzaUZpbGUgcHNpRmlsZSA9IGZpbGVNYW5hZ2VyLmZpbmRGaWxlKGZpbGUpOworCisgICAgRXZlbnRzVGVzdExpc3RlbmVyIGxpc3RlbmVyID0gbmV3IEV2ZW50c1Rlc3RMaXN0ZW5lcigpOworICAgIG15UHNpTWFuYWdlci5hZGRQc2lUcmVlQ2hhbmdlTGlzdGVuZXIobGlzdGVuZXIsZ2V0VGVzdFJvb3REaXNwb3NhYmxlKCkpOworCisgICAgZmlsZS5tb3ZlKG51bGwsIG15UHJqRGlyMS5nZXRQYXJlbnQoKSk7CisKKyAgICBTdHJpbmcgc3RyaW5nID0gbGlzdGVuZXIuZ2V0RXZlbnRzU3RyaW5nKCk7CisgICAgU3RyaW5nIGV4cGVjdGVkID0KKyAgICAgICAgICAgICJiZWZvcmVDaGlsZE1vdmVtZW50XG4iICsKKyAgICAgICAgICAgICJjaGlsZE1vdmVkXG4iOworICAgIGFzc2VydEVxdWFscyhleHBlY3RlZCwgc3RyaW5nKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RNb3ZlRmlsZTIoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBGaWxlTWFuYWdlciBmaWxlTWFuYWdlciA9IG15UHNpTWFuYWdlci5nZXRGaWxlTWFuYWdlcigpOworICAgIFZpcnR1YWxGaWxlIGZpbGUgPSBteVByakRpcjEuY3JlYXRlQ2hpbGREYXRhKG51bGwsICJhLnR4dCIpOworICAgIFBzaUZpbGUgcHNpRmlsZSA9IGZpbGVNYW5hZ2VyLmZpbmRGaWxlKGZpbGUpOworCisgICAgRXZlbnRzVGVzdExpc3RlbmVyIGxpc3RlbmVyID0gbmV3IEV2ZW50c1Rlc3RMaXN0ZW5lcigpOworICAgIG15UHNpTWFuYWdlci5hZGRQc2lUcmVlQ2hhbmdlTGlzdGVuZXIobGlzdGVuZXIsZ2V0VGVzdFJvb3REaXNwb3NhYmxlKCkpOworCisgICAgZmlsZS5tb3ZlKG51bGwsIG15RXhjbHVkZWREaXIxKTsKKworICAgIFN0cmluZyBzdHJpbmcgPSBsaXN0ZW5lci5nZXRFdmVudHNTdHJpbmcoKTsKKyAgICBTdHJpbmcgZXhwZWN0ZWQgPQorICAgICAgICAgICAgImJlZm9yZUNoaWxkUmVtb3ZhbFxuIiArCisgICAgICAgICAgICAiY2hpbGRSZW1vdmVkXG4iOworICAgIGFzc2VydEVxdWFscyhleHBlY3RlZCwgc3RyaW5nKTsKKyAgICBhc3NlcnROdWxsKGZpbGVNYW5hZ2VyLmZpbmRGaWxlKGZpbGUpKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RNb3ZlRmlsZTMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBGaWxlTWFuYWdlciBmaWxlTWFuYWdlciA9IG15UHNpTWFuYWdlci5nZXRGaWxlTWFuYWdlcigpOworICAgIFZpcnR1YWxGaWxlIGZpbGUgPSBteUV4Y2x1ZGVkRGlyMS5jcmVhdGVDaGlsZERhdGEobnVsbCwgImEudHh0Iik7CisKKyAgICBFdmVudHNUZXN0TGlzdGVuZXIgbGlzdGVuZXIgPSBuZXcgRXZlbnRzVGVzdExpc3RlbmVyKCk7CisgICAgbXlQc2lNYW5hZ2VyLmFkZFBzaVRyZWVDaGFuZ2VMaXN0ZW5lcihsaXN0ZW5lcixnZXRUZXN0Um9vdERpc3Bvc2FibGUoKSk7CisKKyAgICBmaWxlLm1vdmUobnVsbCwgbXlQcmpEaXIxKTsKKworICAgIFN0cmluZyBzdHJpbmcgPSBsaXN0ZW5lci5nZXRFdmVudHNTdHJpbmcoKTsKKyAgICBTdHJpbmcgZXhwZWN0ZWQgPQorICAgICAgICAgICAgImJlZm9yZUNoaWxkQWRkaXRpb25cbiIgKworICAgICAgICAgICAgImNoaWxkQWRkZWRcbiI7CisgICAgYXNzZXJ0RXF1YWxzKGV4cGVjdGVkLCBzdHJpbmcpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdE1vdmVGaWxlNCgpIHRocm93cyBFeGNlcHRpb24geworICAgIEZpbGVNYW5hZ2VyIGZpbGVNYW5hZ2VyID0gbXlQc2lNYW5hZ2VyLmdldEZpbGVNYW5hZ2VyKCk7CisgICAgVmlydHVhbEZpbGUgZmlsZSA9IG15RXhjbHVkZWREaXIxLmNyZWF0ZUNoaWxkRGF0YShudWxsLCAiYS50eHQiKTsKKyAgICBWaXJ0dWFsRmlsZSBzdWJkaXIgPSBteUV4Y2x1ZGVkRGlyMS5jcmVhdGVDaGlsZERpcmVjdG9yeShudWxsLCAic3ViZGlyIik7CisKKyAgICBFdmVudHNUZXN0TGlzdGVuZXIgbGlzdGVuZXIgPSBuZXcgRXZlbnRzVGVzdExpc3RlbmVyKCk7CisgICAgbXlQc2lNYW5hZ2VyLmFkZFBzaVRyZWVDaGFuZ2VMaXN0ZW5lcihsaXN0ZW5lcixnZXRUZXN0Um9vdERpc3Bvc2FibGUoKSk7CisKKyAgICBmaWxlLm1vdmUobnVsbCwgc3ViZGlyKTsKKworICAgIFN0cmluZyBzdHJpbmcgPSBsaXN0ZW5lci5nZXRFdmVudHNTdHJpbmcoKTsKKyAgICBTdHJpbmcgZXhwZWN0ZWQgPSAiIjsKKyAgICBhc3NlcnRFcXVhbHMoZXhwZWN0ZWQsIHN0cmluZyk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0TW92ZURpcmVjdG9yeTEoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBGaWxlTWFuYWdlciBmaWxlTWFuYWdlciA9IG15UHNpTWFuYWdlci5nZXRGaWxlTWFuYWdlcigpOworICAgIFZpcnR1YWxGaWxlIGZpbGUgPSBteVByakRpcjEuY3JlYXRlQ2hpbGREaXJlY3RvcnkobnVsbCwgImRpciIpOworICAgIFBzaURpcmVjdG9yeSBwc2lEaXJlY3RvcnkgPSBmaWxlTWFuYWdlci5maW5kRGlyZWN0b3J5KGZpbGUpOworCisgICAgRXZlbnRzVGVzdExpc3RlbmVyIGxpc3RlbmVyID0gbmV3IEV2ZW50c1Rlc3RMaXN0ZW5lcigpOworICAgIG15UHNpTWFuYWdlci5hZGRQc2lUcmVlQ2hhbmdlTGlzdGVuZXIobGlzdGVuZXIsZ2V0VGVzdFJvb3REaXNwb3NhYmxlKCkpOworCisgICAgZmlsZS5tb3ZlKG51bGwsIG15UHJqRGlyMS5nZXRQYXJlbnQoKSk7CisKKyAgICBTdHJpbmcgc3RyaW5nID0gbGlzdGVuZXIuZ2V0RXZlbnRzU3RyaW5nKCk7CisgICAgU3RyaW5nIGV4cGVjdGVkID0KKyAgICAgICAgICAgICJiZWZvcmVDaGlsZE1vdmVtZW50XG4iICsKKyAgICAgICAgICAgICJjaGlsZE1vdmVkXG4iOworICAgIGFzc2VydEVxdWFscyhleHBlY3RlZCwgc3RyaW5nKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RNb3ZlRGlyZWN0b3J5MigpIHRocm93cyBFeGNlcHRpb24geworICAgIEZpbGVNYW5hZ2VyIGZpbGVNYW5hZ2VyID0gbXlQc2lNYW5hZ2VyLmdldEZpbGVNYW5hZ2VyKCk7CisgICAgVmlydHVhbEZpbGUgZmlsZSA9IG15UHJqRGlyMS5jcmVhdGVDaGlsZERpcmVjdG9yeShudWxsLCAiZGlyIik7CisgICAgUHNpRGlyZWN0b3J5IHBzaURpcmVjdG9yeSA9IGZpbGVNYW5hZ2VyLmZpbmREaXJlY3RvcnkoZmlsZSk7CisKKyAgICBFdmVudHNUZXN0TGlzdGVuZXIgbGlzdGVuZXIgPSBuZXcgRXZlbnRzVGVzdExpc3RlbmVyKCk7CisgICAgbXlQc2lNYW5hZ2VyLmFkZFBzaVRyZWVDaGFuZ2VMaXN0ZW5lcihsaXN0ZW5lcixnZXRUZXN0Um9vdERpc3Bvc2FibGUoKSk7CisKKyAgICBmaWxlLm1vdmUobnVsbCwgbXlFeGNsdWRlZERpcjEpOworCisgICAgU3RyaW5nIHN0cmluZyA9IGxpc3RlbmVyLmdldEV2ZW50c1N0cmluZygpOworICAgIFN0cmluZyBleHBlY3RlZCA9CisgICAgICAgICAgICAiYmVmb3JlQ2hpbGRSZW1vdmFsXG4iICsKKyAgICAgICAgICAgICJjaGlsZFJlbW92ZWRcbiI7CisgICAgYXNzZXJ0RXF1YWxzKGV4cGVjdGVkLCBzdHJpbmcpOworICAgIGFzc2VydE51bGwoZmlsZU1hbmFnZXIuZmluZERpcmVjdG9yeShmaWxlKSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0TW92ZURpcmVjdG9yeTMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBGaWxlTWFuYWdlciBmaWxlTWFuYWdlciA9IG15UHNpTWFuYWdlci5nZXRGaWxlTWFuYWdlcigpOworICAgIFZpcnR1YWxGaWxlIGZpbGUgPSBteUV4Y2x1ZGVkRGlyMS5jcmVhdGVDaGlsZERpcmVjdG9yeShudWxsLCAiZGlyIik7CisKKyAgICBFdmVudHNUZXN0TGlzdGVuZXIgbGlzdGVuZXIgPSBuZXcgRXZlbnRzVGVzdExpc3RlbmVyKCk7CisgICAgbXlQc2lNYW5hZ2VyLmFkZFBzaVRyZWVDaGFuZ2VMaXN0ZW5lcihsaXN0ZW5lcixnZXRUZXN0Um9vdERpc3Bvc2FibGUoKSk7CisKKyAgICBmaWxlLm1vdmUobnVsbCwgbXlQcmpEaXIxKTsKKworICAgIFN0cmluZyBzdHJpbmcgPSBsaXN0ZW5lci5nZXRFdmVudHNTdHJpbmcoKTsKKyAgICBTdHJpbmcgZXhwZWN0ZWQgPQorICAgICAgICAgICAgImJlZm9yZUNoaWxkQWRkaXRpb25cbiIgKworICAgICAgICAgICAgImNoaWxkQWRkZWRcbiI7CisgICAgYXNzZXJ0RXF1YWxzKGV4cGVjdGVkLCBzdHJpbmcpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdE1vdmVEaXJlY3Rvcnk0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgRmlsZU1hbmFnZXIgZmlsZU1hbmFnZXIgPSBteVBzaU1hbmFnZXIuZ2V0RmlsZU1hbmFnZXIoKTsKKyAgICBWaXJ0dWFsRmlsZSBmaWxlID0gbXlFeGNsdWRlZERpcjEuY3JlYXRlQ2hpbGREaXJlY3RvcnkobnVsbCwgImRpciIpOworICAgIFZpcnR1YWxGaWxlIHN1YmRpciA9IG15RXhjbHVkZWREaXIxLmNyZWF0ZUNoaWxkRGlyZWN0b3J5KG51bGwsICJzdWJkaXIiKTsKKworICAgIEV2ZW50c1Rlc3RMaXN0ZW5lciBsaXN0ZW5lciA9IG5ldyBFdmVudHNUZXN0TGlzdGVuZXIoKTsKKyAgICBteVBzaU1hbmFnZXIuYWRkUHNpVHJlZUNoYW5nZUxpc3RlbmVyKGxpc3RlbmVyLGdldFRlc3RSb290RGlzcG9zYWJsZSgpKTsKKworICAgIGZpbGUubW92ZShudWxsLCBzdWJkaXIpOworCisgICAgU3RyaW5nIHN0cmluZyA9IGxpc3RlbmVyLmdldEV2ZW50c1N0cmluZygpOworICAgIFN0cmluZyBleHBlY3RlZCA9ICIiOworICAgIGFzc2VydEVxdWFscyhleHBlY3RlZCwgc3RyaW5nKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RDaGFuZ2VGaWxlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgRmlsZU1hbmFnZXIgZmlsZU1hbmFnZXIgPSBteVBzaU1hbmFnZXIuZ2V0RmlsZU1hbmFnZXIoKTsKKyAgICBWaXJ0dWFsRmlsZSBmaWxlID0gbXlQcmpEaXIxLmNyZWF0ZUNoaWxkRGF0YShudWxsLCAiYS50eHQiKTsKKyAgICBWZnNVdGlsLnNhdmVUZXh0KGZpbGUsICJhYWEiKTsKKyAgICBQc2lGaWxlIHBzaUZpbGUgPSBmaWxlTWFuYWdlci5maW5kRmlsZShmaWxlKTsKKyAgICBwc2lGaWxlLmdldFRleHQoKTsKKworICAgIEV2ZW50c1Rlc3RMaXN0ZW5lciBsaXN0ZW5lciA9IG5ldyBFdmVudHNUZXN0TGlzdGVuZXIoKTsKKyAgICBteVBzaU1hbmFnZXIuYWRkUHNpVHJlZUNoYW5nZUxpc3RlbmVyKGxpc3RlbmVyLGdldFRlc3RSb290RGlzcG9zYWJsZSgpKTsKKworICAgIFZmc1V0aWwuc2F2ZVRleHQoZmlsZSwgImJiYiIpOworICAgIFBzaURvY3VtZW50TWFuYWdlci5nZXRJbnN0YW5jZShnZXRQcm9qZWN0KCkpLmNvbW1pdEFsbERvY3VtZW50cygpOworCisgICAgLyoKKyAgICBhc3NlcnRFcXVhbHMoIiIsIGxpc3RlbmVyLmdldEV2ZW50c1N0cmluZygpKTsKKworICAgIFBzaURvY3VtZW50TWFuYWdlci5nZXRJbnN0YW5jZShteVByb2plY3QpLmNvbW1pdEFsbERvY3VtZW50cygpOworICAgICovCisKKyAgICBhc3NlcnRFcXVhbHMoCisgICAgICAgICAgICAiYmVmb3JlQ2hpbGRyZW5DaGFuZ2VcbiIgKworICAgICAgICAgICAgImJlZm9yZUNoaWxkUmVwbGFjZW1lbnRcbiIgKworICAgICAgICAgICAgImNoaWxkUmVwbGFjZWRcbiIrCisgICAgICAgICAgICAiY2hpbGRyZW5DaGFuZ2VkXG4iLAorICAgICAgICAgICAgbGlzdGVuZXIuZ2V0RXZlbnRzU3RyaW5nKCkpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEFkZEV4Y2x1ZGVSb290KCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKKyAgICBmaW5hbCBWaXJ0dWFsRmlsZSBkaXIgPSBteVByakRpcjEuY3JlYXRlQ2hpbGREaXJlY3RvcnkobnVsbCwgImFhYSIpOworCisgICAgRXZlbnRzVGVzdExpc3RlbmVyIGxpc3RlbmVyID0gbmV3IEV2ZW50c1Rlc3RMaXN0ZW5lcigpOworICAgIG15UHNpTWFuYWdlci5hZGRQc2lUcmVlQ2hhbmdlTGlzdGVuZXIobGlzdGVuZXIsZ2V0VGVzdFJvb3REaXNwb3NhYmxlKCkpOworCisgICAgUHNpVGVzdFV0aWwuYWRkRXhjbHVkZWRSb290KG15TW9kdWxlLCBkaXIpOworCisKKyAgICBTdHJpbmcgc3RyaW5nID0gbGlzdGVuZXIuZ2V0RXZlbnRzU3RyaW5nKCk7CisgICAgU3RyaW5nIGV4cGVjdGVkID0KKyAgICAgICAgICAgICJiZWZvcmVQcm9wZXJ0eUNoYW5nZVxuIiArCisgICAgICAgICAgICAicHJvcGVydHlDaGFuZ2VkXG4iOworICAgIGFzc2VydEVxdWFscyhleHBlY3RlZCwgc3RyaW5nKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RBZGRTb3VyY2VSb290KCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKKyAgICBmaW5hbCBWaXJ0dWFsRmlsZSBkaXIgPSBteVByakRpcjEuY3JlYXRlQ2hpbGREaXJlY3RvcnkobnVsbCwgImFhYSIpOworCisgICAgRXZlbnRzVGVzdExpc3RlbmVyIGxpc3RlbmVyID0gbmV3IEV2ZW50c1Rlc3RMaXN0ZW5lcigpOworICAgIG15UHNpTWFuYWdlci5hZGRQc2lUcmVlQ2hhbmdlTGlzdGVuZXIobGlzdGVuZXIsZ2V0VGVzdFJvb3REaXNwb3NhYmxlKCkpOworCisgICAgUHNpVGVzdFV0aWwuYWRkU291cmNlUm9vdChteU1vZHVsZSwgZGlyKTsKKworICAgIFN0cmluZyBzdHJpbmcgPSBsaXN0ZW5lci5nZXRFdmVudHNTdHJpbmcoKTsKKyAgICBTdHJpbmcgZXhwZWN0ZWQgPQorICAgICAgICAgICAgImJlZm9yZVByb3BlcnR5Q2hhbmdlXG4iICsKKyAgICAgICAgICAgICJwcm9wZXJ0eUNoYW5nZWRcbiI7CisgICAgYXNzZXJ0RXF1YWxzKGV4cGVjdGVkLCBzdHJpbmcpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdE1vZGlmeUZpbGVUeXBlcygpIHRocm93cyBFeGNlcHRpb24geworICAgIEZpbGVNYW5hZ2VyIGZpbGVNYW5hZ2VyID0gbXlQc2lNYW5hZ2VyLmdldEZpbGVNYW5hZ2VyKCk7CisgICAgRXZlbnRzVGVzdExpc3RlbmVyIGxpc3RlbmVyID0gbmV3IEV2ZW50c1Rlc3RMaXN0ZW5lcigpOworICAgIG15UHNpTWFuYWdlci5hZGRQc2lUcmVlQ2hhbmdlTGlzdGVuZXIobGlzdGVuZXIsZ2V0VGVzdFJvb3REaXNwb3NhYmxlKCkpOworCisgICAgQXBwbGljYXRpb25NYW5hZ2VyLmdldEFwcGxpY2F0aW9uKCkucnVuV3JpdGVBY3Rpb24obmV3IFJ1bm5hYmxlKCkgeworICAgICAgQE92ZXJyaWRlCisgICAgICBwdWJsaWMgdm9pZCBydW4oKSB7CisgICAgICAgICgoRmlsZVR5cGVNYW5hZ2VyRXgpRmlsZVR5cGVNYW5hZ2VyLmdldEluc3RhbmNlKCkpLmZpcmVCZWZvcmVGaWxlVHlwZXNDaGFuZ2VkKCk7CisgICAgICAgICgoRmlsZVR5cGVNYW5hZ2VyRXgpRmlsZVR5cGVNYW5hZ2VyLmdldEluc3RhbmNlKCkpLmZpcmVGaWxlVHlwZXNDaGFuZ2VkKCk7CisgICAgICB9CisgICAgfSk7CisKKworICAgIFN0cmluZyBzdHJpbmcgPSBsaXN0ZW5lci5nZXRFdmVudHNTdHJpbmcoKTsKKyAgICBTdHJpbmcgZXhwZWN0ZWQgPQorICAgICAgImJlZm9yZVByb3BlcnR5Q2hhbmdlXG4iICsKKyAgICAgICJwcm9wZXJ0eUNoYW5nZWRcbiI7CisgICAgYXNzZXJ0RXF1YWxzKGV4cGVjdGVkLCBzdHJpbmcpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEN5Y2xpY0Rpc3BhdGNoaW5nKCkgdGhyb3dzIFRocm93YWJsZSB7CisgICAgZmluYWwgVmlydHVhbEZpbGUgdmlydHVhbEZpbGUgPSBjcmVhdGVGaWxlKCJhLnhtbCIsICI8dGFnLz4iKS5nZXRWaXJ0dWFsRmlsZSgpOworICAgIGZpbmFsIFBzaVRyZWVDaGFuZ2VBZGFwdGVyIGxpc3RlbmVyID0gbmV3IFBzaVRyZWVDaGFuZ2VBZGFwdGVyKCkgeworICAgICAgQE92ZXJyaWRlCisgICAgICBwdWJsaWMgdm9pZCBwcm9wZXJ0eUNoYW5nZWQoQE5vdE51bGwgUHNpVHJlZUNoYW5nZUV2ZW50IGV2ZW50KSB7CisgICAgICAgIGdldEphdmFGYWNhZGUoKS5maW5kQ2xhc3MoIlhYWCIsIEdsb2JhbFNlYXJjaFNjb3BlLmFsbFNjb3BlKG15UHJvamVjdCkpOworICAgICAgfQorICAgIH07CisgICAgZ2V0UHNpTWFuYWdlcigpLmFkZFBzaVRyZWVDaGFuZ2VMaXN0ZW5lcihsaXN0ZW5lcixnZXRUZXN0Um9vdERpc3Bvc2FibGUoKSk7CisgICAgdmlydHVhbEZpbGUucmVuYW1lKHRoaXMsICJiLnhtbCIpOworICB9CisKKyAgU3RyaW5nIG5ld1RleHQ7CisgIFN0cmluZyBvcmlnaW5hbDsKKyAgU3RyaW5nIGV2ZW50c0ZpcmVkID0gIiI7CisgIFBzaVRyZWVDaGFuZ2VMaXN0ZW5lciBsaXN0ZW5lcjsKKyAgcHVibGljIHZvaWQgdGVzdEJlZm9yZUFmdGVyQ2hpbGRyZW5DaGFuZ2UoKSB0aHJvd3MgVGhyb3dhYmxlIHsKKyAgICBsaXN0ZW5lciA9IG5ldyBQc2lUcmVlQ2hhbmdlTGlzdGVuZXIoKSB7CisgICAgICBAT3ZlcnJpZGUKKyAgICAgIHB1YmxpYyB2b2lkIGJlZm9yZUNoaWxkQWRkaXRpb24oQE5vdE51bGwgUHNpVHJlZUNoYW5nZUV2ZW50IGV2ZW50KSB7CisgICAgICAgIGxvZ0V2ZW50KGV2ZW50KTsKKyAgICAgIH0KKworICAgICAgQE92ZXJyaWRlCisgICAgICBwdWJsaWMgdm9pZCBiZWZvcmVDaGlsZFJlbW92YWwoQE5vdE51bGwgUHNpVHJlZUNoYW5nZUV2ZW50IGV2ZW50KSB7CisgICAgICAgIGxvZ0V2ZW50KGV2ZW50KTsKKyAgICAgIH0KKworICAgICAgQE92ZXJyaWRlCisgICAgICBwdWJsaWMgdm9pZCBiZWZvcmVDaGlsZFJlcGxhY2VtZW50KEBOb3ROdWxsIFBzaVRyZWVDaGFuZ2VFdmVudCBldmVudCkgeworICAgICAgICBsb2dFdmVudChldmVudCk7CisgICAgICB9CisKKyAgICAgIEBPdmVycmlkZQorICAgICAgcHVibGljIHZvaWQgYmVmb3JlQ2hpbGRNb3ZlbWVudChATm90TnVsbCBQc2lUcmVlQ2hhbmdlRXZlbnQgZXZlbnQpIHsKKyAgICAgICAgbG9nRXZlbnQoZXZlbnQpOworICAgICAgfQorCisgICAgICBAT3ZlcnJpZGUKKyAgICAgIHB1YmxpYyB2b2lkIGJlZm9yZUNoaWxkcmVuQ2hhbmdlKEBOb3ROdWxsIFBzaVRyZWVDaGFuZ2VFdmVudCBldmVudCkgeworICAgICAgICBsb2dFdmVudChldmVudCk7CisgICAgICB9CisKKyAgICAgIEBPdmVycmlkZQorICAgICAgcHVibGljIHZvaWQgYmVmb3JlUHJvcGVydHlDaGFuZ2UoQE5vdE51bGwgUHNpVHJlZUNoYW5nZUV2ZW50IGV2ZW50KSB7CisgICAgICAgIGxvZ0V2ZW50KGV2ZW50KTsKKyAgICAgIH0KKworICAgICAgQE92ZXJyaWRlCisgICAgICBwdWJsaWMgdm9pZCBjaGlsZEFkZGVkKEBOb3ROdWxsIFBzaVRyZWVDaGFuZ2VFdmVudCBldmVudCkgeworICAgICAgICBsb2dFdmVudChldmVudCk7CisgICAgICAgIGFzc2VydEJlZm9yZUV2ZW50RmlyZWQoZXZlbnQpOworICAgICAgfQorCisgICAgICBAT3ZlcnJpZGUKKyAgICAgIHB1YmxpYyB2b2lkIGNoaWxkUmVtb3ZlZChATm90TnVsbCBQc2lUcmVlQ2hhbmdlRXZlbnQgZXZlbnQpIHsKKyAgICAgICAgbG9nRXZlbnQoZXZlbnQpOworICAgICAgICBhc3NlcnRCZWZvcmVFdmVudEZpcmVkKGV2ZW50KTsKKyAgICAgIH0KKworICAgICAgQE92ZXJyaWRlCisgICAgICBwdWJsaWMgdm9pZCBjaGlsZFJlcGxhY2VkKEBOb3ROdWxsIFBzaVRyZWVDaGFuZ2VFdmVudCBldmVudCkgeworICAgICAgICBsb2dFdmVudChldmVudCk7CisgICAgICAgIGFzc2VydEJlZm9yZUV2ZW50RmlyZWQoZXZlbnQpOworICAgICAgfQorCisgICAgICBAT3ZlcnJpZGUKKyAgICAgIHB1YmxpYyB2b2lkIGNoaWxkcmVuQ2hhbmdlZChATm90TnVsbCBQc2lUcmVlQ2hhbmdlRXZlbnQgZXZlbnQpIHsKKyAgICAgICAgbG9nRXZlbnQoZXZlbnQpOworICAgICAgICBhc3NlcnRCZWZvcmVFdmVudEZpcmVkKGV2ZW50KTsKKyAgICAgIH0KKworICAgICAgQE92ZXJyaWRlCisgICAgICBwdWJsaWMgdm9pZCBjaGlsZE1vdmVkKEBOb3ROdWxsIFBzaVRyZWVDaGFuZ2VFdmVudCBldmVudCkgeworICAgICAgICBsb2dFdmVudChldmVudCk7CisgICAgICAgIGFzc2VydEJlZm9yZUV2ZW50RmlyZWQoZXZlbnQpOworICAgICAgfQorCisgICAgICBAT3ZlcnJpZGUKKyAgICAgIHB1YmxpYyB2b2lkIHByb3BlcnR5Q2hhbmdlZChATm90TnVsbCBQc2lUcmVlQ2hhbmdlRXZlbnQgZXZlbnQpIHsKKyAgICAgICAgbG9nRXZlbnQoZXZlbnQpOworICAgICAgICBhc3NlcnRCZWZvcmVFdmVudEZpcmVkKGV2ZW50KTsKKyAgICAgIH0KKyAgICB9OworCisgICAgbXlGaWxlID0gY3JlYXRlRmlsZSgiQS5qYXZhIiwgImNsYXNzIEEgeyBpbnQgaTsgfSIpOworICAgIGRvVGVzdEV2ZW50cygiY2xhc3MgQSB7IH0iKTsKKyAgICAvL2RvVGVzdEV2ZW50cygiY2xhc3MgQSB7IGludCBpOyBpbnQgajsgfSIpOyAvL3RvZG86IGYqKCYmaW5nIGNvbXBhY3RDaGFuZ2VzKCkgaW4gVHJlZUNoYW5nZUV2ZW50SW1wbCBnYXJibGVzIGFmdGVyWFhYIGV2ZW50cyBzbyB0aGF0IHRoZXkgZG9uJ3QgbWF0Y2ggYmVmb3JlWFhYCisgICAgZG9UZXN0RXZlbnRzKCJjbGFzcyBBIHsgaW50IGs7IH0iKTsKKyAgICBkb1Rlc3RFdmVudHMoImNsYXNzIEEgeyBpbnQgazsgaW50IGk7IH0iKTsKKyAgICBkb1Rlc3RFdmVudHMoImNsYXNzIEEgeyB2b2lkIGZvbygpe30gfSIpOworICAgIGRvVGVzdEV2ZW50cygieHh4eHh4Iik7CisgICAgZG9UZXN0RXZlbnRzKCIiKTsKKyAgfQorCisgIHByaXZhdGUgdm9pZCBsb2dFdmVudChQc2lUcmVlQ2hhbmdlRXZlbnQgZXZlbnQpIHsKKyAgICBQc2lUcmVlQ2hhbmdlRXZlbnRJbXBsLlBzaUV2ZW50VHlwZSBjb2RlID0gKChQc2lUcmVlQ2hhbmdlRXZlbnRJbXBsKWV2ZW50KS5nZXRDb2RlKCk7CisgICAgZXZlbnRzRmlyZWQgKz0gZXZlbnRUZXh0KGV2ZW50LCBjb2RlKTsKKyAgfQorCisgIHByaXZhdGUgc3RhdGljIFN0cmluZyBldmVudFRleHQoUHNpVHJlZUNoYW5nZUV2ZW50IGV2ZW50LCBQc2lUcmVlQ2hhbmdlRXZlbnRJbXBsLlBzaUV2ZW50VHlwZSBjb2RlKSB7CisgICAgUHNpRWxlbWVudCBwYXJlbnQgPSBldmVudC5nZXRQYXJlbnQoKTsKKyAgICBQc2lFbGVtZW50IG9sZENoaWxkID0gZXZlbnQuZ2V0T2xkQ2hpbGQoKTsKKyAgICBpZiAob2xkQ2hpbGQgPT0gbnVsbCkgb2xkQ2hpbGQgPSBldmVudC5nZXRDaGlsZCgpOworICAgIFBzaUVsZW1lbnQgbmV3Q2hpbGQgPSBldmVudC5nZXROZXdDaGlsZCgpOworICAgIHJldHVybiBjb2RlICsgIjoiICsKKyAgICAgICAgICAgKHBhcmVudCA9PSBudWxsID8gbnVsbCA6IHBhcmVudC5nZXROb2RlKCkuZ2V0RWxlbWVudFR5cGUoKSkgKyAiLyIgKworICAgICAgICAgICAob2xkQ2hpbGQgPT0gbnVsbCA/IG51bGwgOiBvbGRDaGlsZC5nZXROb2RlKCkuZ2V0RWxlbWVudFR5cGUoKSkgKyAiLT4iICsKKyAgICAgICAgICAgKG5ld0NoaWxkID09IG51bGwgPyBudWxsIDogbmV3Q2hpbGQuZ2V0Tm9kZSgpLmdldEVsZW1lbnRUeXBlKCkpICsKKyAgICAgICAgICAgIjsiOworICB9CisKKyAgcHJpdmF0ZSB2b2lkIGFzc2VydEJlZm9yZUV2ZW50RmlyZWQoUHNpVHJlZUNoYW5nZUV2ZW50IGFmdGVyRXZlbnQpIHsKKyAgICBQc2lUcmVlQ2hhbmdlRXZlbnRJbXBsLlBzaUV2ZW50VHlwZSBjb2RlID0gKChQc2lUcmVlQ2hhbmdlRXZlbnRJbXBsKWFmdGVyRXZlbnQpLmdldENvZGUoKTsKKyAgICBhc3NlcnRGYWxzZShjb2RlLm5hbWUoKSwgY29kZS5uYW1lKCkuc3RhcnRzV2l0aCgiQkVGT1JFXyIpKTsKKyAgICBQc2lUcmVlQ2hhbmdlRXZlbnRJbXBsLlBzaUV2ZW50VHlwZSBiZWZvcmVDb2RlID0gUHNpVHJlZUNoYW5nZUV2ZW50SW1wbC5Qc2lFdmVudFR5cGUudmFsdWVzKClbY29kZS5vcmRpbmFsKCkgLSAxXTsKKyAgICBhc3NlcnRUcnVlKGJlZm9yZUNvZGUubmFtZSgpLCBiZWZvcmVDb2RlLm5hbWUoKS5zdGFydHNXaXRoKCJCRUZPUkVfIikpOworICAgIFN0cmluZyBiZWZvcmVUZXh0ID0gZXZlbnRUZXh0KGFmdGVyRXZlbnQsIGJlZm9yZUNvZGUpOworICAgIGludCBpID0gZXZlbnRzRmlyZWQuaW5kZXhPZihiZWZvcmVUZXh0KTsKKyAgICBhc3NlcnRUcnVlKCJFdmVudCAnIiArIGJlZm9yZVRleHQgKyAiJyBtdXN0IGJlIGZpcmVkLiBFdmVudHMgc28gZmFyOiAiICsgZXZlbnRzRmlyZWQsIGkgPj0gMCk7CisgIH0KKyAgcHJpdmF0ZSB2b2lkIGRvVGVzdEV2ZW50cyhTdHJpbmcgbmV3VGV4dCkgeworICAgIHRyeSB7CisgICAgICBnZXRQc2lNYW5hZ2VyKCkuYWRkUHNpVHJlZUNoYW5nZUxpc3RlbmVyKGxpc3RlbmVyKTsKKyAgICAgIGV2ZW50c0ZpcmVkID0gIiI7CisgICAgICB0aGlzLm5ld1RleHQgPSBuZXdUZXh0OworICAgICAgb3JpZ2luYWwgPSBnZXRGaWxlKCkuZ2V0VGV4dCgpOworICAgICAgRG9jdW1lbnQgZG9jdW1lbnQgPSBQc2lEb2N1bWVudE1hbmFnZXIuZ2V0SW5zdGFuY2UoZ2V0UHJvamVjdCgpKS5nZXREb2N1bWVudChnZXRGaWxlKCkpOworICAgICAgZG9jdW1lbnQuc2V0VGV4dChuZXdUZXh0KTsKKyAgICAgIFBzaURvY3VtZW50TWFuYWdlci5nZXRJbnN0YW5jZShnZXRQcm9qZWN0KCkpLmNvbW1pdEFsbERvY3VtZW50cygpOworCisgICAgICBkb2N1bWVudC5zZXRUZXh0KG9yaWdpbmFsKTsKKyAgICAgIFBzaURvY3VtZW50TWFuYWdlci5nZXRJbnN0YW5jZShnZXRQcm9qZWN0KCkpLmNvbW1pdEFsbERvY3VtZW50cygpOworICAgIH0KKyAgICBmaW5hbGx5IHsKKyAgICAgIGdldFBzaU1hbmFnZXIoKS5yZW1vdmVQc2lUcmVlQ2hhbmdlTGlzdGVuZXIobGlzdGVuZXIpOworICAgIH0KKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL3BzaS9pbXBsL3NvdXJjZS9jb2RlU3R5bGUvVGFiUG9zdEZvcm1hdFByb2Nlc3NvclRlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9wc2kvaW1wbC9zb3VyY2UvY29kZVN0eWxlL1RhYlBvc3RGb3JtYXRQcm9jZXNzb3JUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGQxMzI0NwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9wc2kvaW1wbC9zb3VyY2UvY29kZVN0eWxlL1RhYlBvc3RGb3JtYXRQcm9jZXNzb3JUZXN0LmphdmEKQEAgLTAsMCArMSw0MDMgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwMC0yMDEyIEpldEJyYWlucyBzLnIuby4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCitwYWNrYWdlIGNvbS5pbnRlbGxpai5wc2kuaW1wbC5zb3VyY2UuY29kZVN0eWxlOworCitpbXBvcnQgY29tLmludGVsbGlqLmxhbmcuQVNUTm9kZTsKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS5lZGl0b3IuRG9jdW1lbnQ7CitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkuZWRpdG9yLmltcGwuTGluZVNldDsKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS51dGlsLlBhaXI7CitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkudXRpbC5UZXh0UmFuZ2U7CitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkudXRpbC50ZXh0LlN0cmluZ1V0aWw7CitpbXBvcnQgY29tLmludGVsbGlqLnBzaS5Ub2tlblR5cGU7CitpbXBvcnQgY29tLmludGVsbGlqLnBzaS50cmVlLklFbGVtZW50VHlwZTsKK2ltcG9ydCBvcmcuamV0YnJhaW5zLmFubm90YXRpb25zLk5vdE51bGw7CitpbXBvcnQgb3JnLmpldGJyYWlucy5hbm5vdGF0aW9ucy5OdWxsYWJsZTsKK2ltcG9ydCBvcmcuam1vY2suRXhwZWN0YXRpb25zOworaW1wb3J0IG9yZy5qbW9jay5Nb2NrZXJ5OworaW1wb3J0IG9yZy5qbW9jay5hcGkuSW52b2NhdGlvbjsKK2ltcG9ydCBvcmcuam1vY2suaW50ZWdyYXRpb24uanVuaXQ0LkpNb2NrOworaW1wb3J0IG9yZy5qbW9jay5pbnRlZ3JhdGlvbi5qdW5pdDQuSlVuaXQ0TW9ja2VyeTsKK2ltcG9ydCBvcmcuam1vY2subGliLmFjdGlvbi5DdXN0b21BY3Rpb247CitpbXBvcnQgb3JnLmptb2NrLmxpYi5sZWdhY3kuQ2xhc3NJbXBvc3RlcmlzZXI7CitpbXBvcnQgb3JnLmp1bml0LkFmdGVyOworaW1wb3J0IG9yZy5qdW5pdC5CZWZvcmU7CitpbXBvcnQgb3JnLmp1bml0LlRlc3Q7CitpbXBvcnQgb3JnLmp1bml0LnJ1bm5lci5SdW5XaXRoOworCitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydEVxdWFsczsKKworLyoqCisgKiBAYXV0aG9yIERlbmlzIFpoZGFub3YKKyAqIEBzaW5jZSAwOC8wMS8yMDEyCisgKi8KK0BSdW5XaXRoKEpNb2NrLmNsYXNzKQorcHVibGljIGNsYXNzIFRhYlBvc3RGb3JtYXRQcm9jZXNzb3JUZXN0IHsKKworICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgU1RBUlRfUkFOR0VfTUFSS0VSID0gIjxyYW5nZT4iOworICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgRU5EX1JBTkdFX01BUktFUiAgID0gIjwvcmFuZ2U+IjsKKworICBwcml2YXRlIE1vY2tlcnkgICAgICAgICAgICAgICAgbXlNb2NrZXJ5OworICBwcml2YXRlIERvY3VtZW50ICAgICAgICAgICAgICAgbXlEb2N1bWVudDsKKworICBAQmVmb3JlCisgIHB1YmxpYyB2b2lkIHNldFVwKCkgeworICAgIG15TW9ja2VyeSA9IG5ldyBKVW5pdDRNb2NrZXJ5KCkge3sKKyAgICAgIHNldEltcG9zdGVyaXNlcihDbGFzc0ltcG9zdGVyaXNlci5JTlNUQU5DRSk7CisgICAgfX07CisgICAgbXlEb2N1bWVudCA9IG15TW9ja2VyeS5tb2NrKERvY3VtZW50LmNsYXNzKTsKKyAgfQorCisgIEBBZnRlcgorICBwdWJsaWMgdm9pZCBjaGVja0V4cGVjdGF0aW9ucygpIHsKKyAgICBteU1vY2tlcnkuYXNzZXJ0SXNTYXRpc2ZpZWQoKTsKKyAgfQorCisgIEBUZXN0CisgIHB1YmxpYyB2b2lkIHNwYWNlc0FuZFdob2xlTGluZUluc2lkZVJhbmdlKCkgeworICAgIGRvVGVzdFNwYWNlcygKKyAgICAgICJsaW5lIDE8cmFuZ2U+XG4iICsKKyAgICAgICIgXHQgXHRsaW5lMlxuIiArCisgICAgICAibGluZTwvcmFuZ2U+IDMiLAorICAgICAgNCwKKyAgICAgICJsaW5lIDFcbiIgKworICAgICAgIiAgICAgICAgICBsaW5lMlxuIiArCisgICAgICAibGluZSAzIgorICAgICk7CisgIH0KKyAgQFRlc3QKKyAgcHVibGljIHZvaWQgc3BhY2VzQW5kRXhhY3RSYW5nZSgpIHsKKyAgICBkb1Rlc3RTcGFjZXMoCisgICAgICAibGluZSAxXG4iICsKKyAgICAgICI8cmFuZ2U+IFx0IFx0bGluZTI8L3JhbmdlPlxuIiArCisgICAgICAibGluZSAzIiwKKyAgICAgIDQsCisgICAgICAibGluZSAxXG4iICsKKyAgICAgICIgICAgICAgICAgbGluZTJcbiIgKworICAgICAgImxpbmUgMyIKKyAgICApOworICB9CisKKyAgQFRlc3QKKyAgcHVibGljIHZvaWQgc3BhY2VzQW5kSGVhZEludGVyc2VjdGlvbigpIHsKKyAgICBkb1Rlc3RTcGFjZXMoCisgICAgICAibGluZSAxPHJhbmdlPlxuIiArCisgICAgICAiIFx0IDwvcmFuZ2U+XHRsaW5lMlxuIiArCisgICAgICAibGluZSAzIiwKKyAgICAgIDQsCisgICAgICAibGluZSAxXG4iICsKKyAgICAgICIgICAgICBcdGxpbmUyXG4iICsKKyAgICAgICJsaW5lIDMiCisgICAgKTsKKyAgfQorCisgIEBUZXN0CisgIHB1YmxpYyB2b2lkIHNwYWNlc0FuZFRhaWxJbnRlcnNlY3Rpb24oKSB7CisgICAgZG9UZXN0U3BhY2VzKAorICAgICAgImxpbmUgMVxuIiArCisgICAgICAiIFx0IDxyYW5nZT5cdGxpbmUyPC9yYW5nZT5cbiIgKworICAgICAgImxpbmUgMyIsCisgICAgICA0LAorICAgICAgImxpbmUgMVxuIiArCisgICAgICAiIFx0ICAgICBsaW5lMlxuIiArCisgICAgICAibGluZSAzIgorICAgICk7CisgIH0KKworICBAVGVzdAorICBwdWJsaWMgdm9pZCBzcGFjZXNBbmRQYXJ0aWFsSW5kZW50SW5zaWRlUmFuZ2UoKSB7CisgICAgZG9UZXN0U3BhY2VzKAorICAgICAgImxpbmUgMVxuIiArCisgICAgICAiIFx0IDxyYW5nZT5cdDwvcmFuZ2U+IFx0IGxpbmUyXG4iICsKKyAgICAgICJsaW5lIDMiLAorICAgICAgNCwKKyAgICAgICJsaW5lIDFcbiIgKworICAgICAgIiBcdCAgICAgIFx0IGxpbmUyXG4iICsKKyAgICAgICJsaW5lIDMiCisgICAgKTsKKyAgfQorICAKKyAgQFRlc3QKKyAgcHVibGljIHZvaWQgdGFic0FuZFdob2xlTGluZUluc2lkZVJhbmdlKCkgeworICAgIGRvVGVzdFRhYnMoCisgICAgICAibGluZSAxPHJhbmdlPlxuIiArCisgICAgICAiICAgICBcdCAgIGxpbmUyXG4iICsKKyAgICAgICJsaW5lPC9yYW5nZT4gMyIsCisgICAgICA0LAorICAgICAgImxpbmUgMVxuIiArCisgICAgICAiXHQgXHQgICBsaW5lMlxuIiArCisgICAgICAibGluZSAzIgorICAgICk7CisgIH0KKyAgCisgIEBUZXN0CisgIHB1YmxpYyB2b2lkIHRhYnNBbmRIZWFkSW50ZXJzZWN0aW9uKCkgeworICAgIGRvVGVzdFRhYnMoCisgICAgICAibGluZSAxPHJhbmdlPlxuIiArCisgICAgICAiICAgIFx0ICAgPC9yYW5nZT4gIGxpbmUyXG4iICsKKyAgICAgICJsaW5lIDMiLAorICAgICAgNCwKKyAgICAgICJsaW5lIDFcbiIgKworICAgICAgIlx0XHQgICAgIGxpbmUyXG4iICsKKyAgICAgICJsaW5lIDMiCisgICAgKTsKKyAgfQorICAKKyAgQFRlc3QKKyAgcHVibGljIHZvaWQgdGFic0FuZFRhaWxJbnRlcnNlY3Rpb24oKSB7CisgICAgZG9UZXN0VGFicygKKyAgICAgICJsaW5lIDFcbiIgKworICAgICAgIiAgIDxyYW5nZT4gICAgIGxpbmUyXG4iICsKKyAgICAgICI8L3JhbmdlPmxpbmUgMyIsCisgICAgICA0LAorICAgICAgImxpbmUgMVxuIiArCisgICAgICAiICAgXHQgbGluZTJcbiIgKworICAgICAgImxpbmUgMyIKKyAgICApOworICB9CisgIAorICBAVGVzdAorICBwdWJsaWMgdm9pZCB0YWJzQW5kUGFydGlhbEluZGVudEluc2lkZVJhbmdlKCkgeworICAgIGRvVGVzdFRhYnMoCisgICAgICAibGluZSAxXG4iICsKKyAgICAgICIgICAgIDxyYW5nZT4gICAgIDwvcmFuZ2U+ICAgICBsaW5lMlxuIiArCisgICAgICAibGluZSAzIiwKKyAgICAgIDQsCisgICAgICAibGluZSAxXG4iICsKKyAgICAgICIgICAgIFx0ICAgICAgbGluZTJcbiIgKworICAgICAgImxpbmUgMyIKKyAgICApOworICB9CisgIAorICBAVGVzdAorICBwdWJsaWMgdm9pZCBzbWFydFRhYnNGb3JUaGVGaXJzdExpbmUoKSB7CisgICAgZG9UZXN0U21hcnRUYWJzKAorICAgICAgIiAgICAgICAgIGxpbmUgMVxuIiArCisgICAgICAiXHQgbGluZSAyIiwKKyAgICAgIDQsCisgICAgICAiXHRcdCBsaW5lIDFcbiIgKworICAgICAgIlx0IGxpbmUgMiIKKyAgICApOworICB9CisgIAorICBAVGVzdAorICBwdWJsaWMgdm9pZCBzbWFydFRhYnNGcm9tVXBwZXJMaW5lKCkgeworICAgIGRvVGVzdFNtYXJ0VGFicygKKyAgICAgICJcdFx0IGxpbmUgMTxyYW5nZT5cbiIgKworICAgICAgIiAgICAgICAgICAgICAgMjwvcmFuZ2U+IiwKKyAgICAgIDQsCisgICAgICAiXHRcdCBsaW5lIDFcbiIgKworICAgICAgIlx0XHQgICAgICAyIgorICAgICk7CisgIH0KKyAgCisgIEBUZXN0CisgIHB1YmxpYyB2b2lkIHNtYXJ0VGFic0V4YWN0UmVwbGFjZW1lbnQoKSB7CisgICAgZG9UZXN0U21hcnRUYWJzKAorICAgICAgIlx0bGluZSAxPHJhbmdlPlxuIiArCisgICAgICAiICAgIGxpbmUgMjwvcmFuZ2U+IiwKKyAgICAgIDQsCisgICAgICAiXHRsaW5lIDFcbiIgKworICAgICAgIlx0bGluZSAyIgorICAgICk7CisgIH0KKyAgCisgIEBUZXN0CisgIHB1YmxpYyB2b2lkIHNtYXJ0VGFic01pc21hdGNoZWRJbmRlbnQoKSB7CisgICAgZG9UZXN0U21hcnRUYWJzKAorICAgICAgIiBcdGxpbmUgMTxyYW5nZT5cbiIgKworICAgICAgIlx0ICAgICBsaW5lIDI8L3JhbmdlPiIsCisgICAgICA0LAorICAgICAgIiBcdGxpbmUgMVxuIiArCisgICAgICAiXHQgICAgIGxpbmUgMiIKKyAgICApOworICB9CisgIAorICBAVGVzdAorICBwdWJsaWMgdm9pZCBzbWFydFRhYnNQYXJ0aWFsTWF0Y2hlZEluZGVudCgpIHsKKyAgICBkb1Rlc3RTbWFydFRhYnMoCisgICAgICAiXHRcdGxpbmUgMVxuIiArCisgICAgICAiICAgIDxyYW5nZT4gICAgbGluZSAyPC9yYW5nZT4iLAorICAgICAgNCwKKyAgICAgICJcdFx0bGluZSAxXG4iICsKKyAgICAgICIgICAgXHRsaW5lIDIiCisgICAgKTsKKyAgfQorICAKKyAgQFRlc3QKKyAgcHVibGljIHZvaWQgc21hcnRUYWJzUGFydGlhbE1pc01hdGNoZWRJbmRlbnQoKSB7CisgICAgZG9UZXN0U21hcnRUYWJzKAorICAgICAgIlx0XHRsaW5lIDFcbiIgKworICAgICAgIiAgICAgPHJhbmdlPiAgICBsaW5lIDI8L3JhbmdlPiIsCisgICAgICA0LAorICAgICAgIlx0XHRsaW5lIDFcbiIgKworICAgICAgIiAgICAgICAgIGxpbmUgMiIKKyAgICApOworICB9CisgIAorICBwcml2YXRlIHZvaWQgZG9UZXN0U3BhY2VzKEBOb3ROdWxsIFN0cmluZyBpbml0aWFsLCBmaW5hbCBpbnQgdGFiV2lkdGgsIEBOb3ROdWxsIFN0cmluZyBleHBlY3RlZCkgeworICAgIGRvVGVzdChpbml0aWFsLCBleHBlY3RlZCwgZmFsc2UsIGZhbHNlLCB0YWJXaWR0aCk7CisgIH0KKworICBwcml2YXRlIHZvaWQgZG9UZXN0VGFicyhATm90TnVsbCBTdHJpbmcgaW5pdGlhbCwgZmluYWwgaW50IHRhYldpZHRoLCBATm90TnVsbCBTdHJpbmcgZXhwZWN0ZWQpIHsKKyAgICBkb1Rlc3QoaW5pdGlhbCwgZXhwZWN0ZWQsIHRydWUsIGZhbHNlLCB0YWJXaWR0aCk7CisgIH0KKyAgCisgIHByaXZhdGUgdm9pZCBkb1Rlc3RTbWFydFRhYnMoQE5vdE51bGwgU3RyaW5nIGluaXRpYWwsIGZpbmFsIGludCB0YWJXaWR0aCwgQE5vdE51bGwgU3RyaW5nIGV4cGVjdGVkKSB7CisgICAgZG9UZXN0KGluaXRpYWwsIGV4cGVjdGVkLCB0cnVlLCB0cnVlLCB0YWJXaWR0aCk7CisgIH0KKyAgCisgIHByaXZhdGUgdm9pZCBkb1Rlc3QoQE5vdE51bGwgU3RyaW5nIGluaXRpYWwsIEBOb3ROdWxsIFN0cmluZyBleHBlY3RlZCwgYm9vbGVhbiB1c2VUYWJzLCBib29sZWFuIHNtYXJ0VGFicywgaW50IHRhYldpZHRoKSB7CisgICAgZG9Eb2N1bWVudFRlc3QoaW5pdGlhbCwgZXhwZWN0ZWQsIHVzZVRhYnMsIHNtYXJ0VGFicywgdGFiV2lkdGgpOworICAgIGRvUHNpVGVzdChpbml0aWFsLCBleHBlY3RlZCwgdXNlVGFicywgc21hcnRUYWJzLCB0YWJXaWR0aCk7CisgIH0KKyAgCisgIHByaXZhdGUgdm9pZCBkb0RvY3VtZW50VGVzdChATm90TnVsbCBTdHJpbmcgaW5pdGlhbCwgQE5vdE51bGwgU3RyaW5nIGV4cGVjdGVkLCBib29sZWFuIHVzZVRhYnMsIGJvb2xlYW4gc21hcnRUYWJzLCBpbnQgdGFiV2lkdGgpIHsKKyAgICBQYWlyPFN0cmluZywgVGV4dFJhbmdlPiBwYWlyID0gcGFyc2UoaW5pdGlhbCk7CisgICAgZmluYWwgU3RyaW5nQnVpbGRlciB0ZXh0ID0gbmV3IFN0cmluZ0J1aWxkZXIocGFpci5maXJzdCk7CisgICAgZmluYWwgVGV4dFJhbmdlIHJhbmdlID0gcGFpci5zZWNvbmQ7CisgICAgCisgICAgbXlNb2NrZXJ5LmNoZWNraW5nKG5ldyBFeHBlY3RhdGlvbnMoKSB7eworICAgICAgYWxsb3dpbmcobXlEb2N1bWVudCkuZ2V0Q2hhcnNTZXF1ZW5jZSgpOyB3aWxsKHJldHVyblZhbHVlKHRleHQudG9TdHJpbmcoKSkpOworICAgICAgYWxsb3dpbmcobXlEb2N1bWVudCkuZ2V0VGV4dExlbmd0aCgpOyB3aWxsKHJldHVyblZhbHVlKHRleHQubGVuZ3RoKCkpKTsKKyAgICB9fSk7CisgICAgCisgICAgZmluYWwgTGluZVNldCBsaW5lcyA9IG5ldyBMaW5lU2V0KCk7CisgICAgbGluZXMuZG9jdW1lbnRDcmVhdGVkKG15RG9jdW1lbnQpOworICAgIG15TW9ja2VyeS5jaGVja2luZyhuZXcgRXhwZWN0YXRpb25zKCkge3sKKyAgICAgIGFsbG93aW5nKG15RG9jdW1lbnQpLmdldExpbmVOdW1iZXIod2l0aChhbnkoaW50LmNsYXNzKSkpOyB3aWxsKG5ldyBDdXN0b21BY3Rpb24oImdldExpbmVOdW1iZXIoKSIpIHsKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyBPYmplY3QgaW52b2tlKEludm9jYXRpb24gaW52b2NhdGlvbikgdGhyb3dzIFRocm93YWJsZSB7CisgICAgICAgICAgcmV0dXJuIGxpbmVzLmZpbmRMaW5lSW5kZXgoKEludGVnZXIpaW52b2NhdGlvbi5nZXRQYXJhbWV0ZXIoMCkpOworICAgICAgICB9CisgICAgICB9KTsKKyAgICAgIGFsbG93aW5nKG15RG9jdW1lbnQpLmdldExpbmVTdGFydE9mZnNldCh3aXRoKGFueShpbnQuY2xhc3MpKSk7IHdpbGwobmV3IEN1c3RvbUFjdGlvbigiZ2V0TGluZVN0YXJ0T2Zmc2V0KCkiKSB7CisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgT2JqZWN0IGludm9rZShJbnZvY2F0aW9uIGludm9jYXRpb24pIHRocm93cyBUaHJvd2FibGUgeworICAgICAgICAgIHJldHVybiBsaW5lcy5nZXRMaW5lU3RhcnQoKEludGVnZXIpaW52b2NhdGlvbi5nZXRQYXJhbWV0ZXIoMCkpOworICAgICAgICB9CisgICAgICB9KTsKKyAgICAgIGFsbG93aW5nKG15RG9jdW1lbnQpLmdldExpbmVFbmRPZmZzZXQod2l0aChhbnkoaW50LmNsYXNzKSkpOyB3aWxsKG5ldyBDdXN0b21BY3Rpb24oImdldExpbmVFbmRPZmZzZXQoKSIpIHsKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyBPYmplY3QgaW52b2tlKEludm9jYXRpb24gaW52b2NhdGlvbikgdGhyb3dzIFRocm93YWJsZSB7CisgICAgICAgICAgcmV0dXJuIGxpbmVzLmdldExpbmVFbmQoKEludGVnZXIpaW52b2NhdGlvbi5nZXRQYXJhbWV0ZXIoMCkpOworICAgICAgICB9CisgICAgICB9KTsKKyAgICAgIGFsbG93aW5nKG15RG9jdW1lbnQpLnJlcGxhY2VTdHJpbmcod2l0aChhbnkoaW50LmNsYXNzKSksIHdpdGgoYW55KGludC5jbGFzcykpLCB3aXRoKGFueShTdHJpbmcuY2xhc3MpKSk7CisgICAgICB3aWxsKG5ldyBDdXN0b21BY3Rpb24oInJlcGxhY2VTdHJpbmciKSB7CisgICAgICAgIEBOdWxsYWJsZQorICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIE9iamVjdCBpbnZva2UoSW52b2NhdGlvbiBpbnZvY2F0aW9uKSB0aHJvd3MgVGhyb3dhYmxlIHsKKyAgICAgICAgICBpbnQgc3RhcnQgPSAoSW50ZWdlcilpbnZvY2F0aW9uLmdldFBhcmFtZXRlcigwKTsKKyAgICAgICAgICBpbnQgZW5kID0gKEludGVnZXIpaW52b2NhdGlvbi5nZXRQYXJhbWV0ZXIoMSk7CisgICAgICAgICAgU3RyaW5nIG5ld1RleHQgPSAoU3RyaW5nKWludm9jYXRpb24uZ2V0UGFyYW1ldGVyKDIpOworICAgICAgICAgIHRleHQucmVwbGFjZShzdGFydCwgZW5kLCBuZXdUZXh0KTsKKyAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgfQorICAgICAgfSk7CisgICAgfX0pOworICAgIAorICAgIFRhYlBvc3RGb3JtYXRQcm9jZXNzb3IucHJvY2Vzc1ZpYURvY3VtZW50KG15RG9jdW1lbnQsIHJhbmdlLCB1c2VUYWJzLCBzbWFydFRhYnMsIHRhYldpZHRoKTsKKyAgICBhc3NlcnRFcXVhbHMoZXhwZWN0ZWQsIHRleHQudG9TdHJpbmcoKSk7CisgIH0KKworICBwcml2YXRlIHN0YXRpYyBQYWlyPFN0cmluZywgVGV4dFJhbmdlPiBwYXJzZShATm90TnVsbCBTdHJpbmcgdGV4dCkgeworICAgIGludCByYW5nZU1hcmtlclN0YXJ0ID0gdGV4dC5pbmRleE9mKFNUQVJUX1JBTkdFX01BUktFUik7CisgICAgaW50IHJhbmdlTWFya2VyRW5kID0gdGV4dC5pbmRleE9mKEVORF9SQU5HRV9NQVJLRVIpOworICAgIGZpbmFsIFN0cmluZ0J1aWxkZXIgYnVmZmVyID0gbmV3IFN0cmluZ0J1aWxkZXIoKTsKKyAgICBmaW5hbCBUZXh0UmFuZ2UgcmFuZ2U7CisgICAgaWYgKHJhbmdlTWFya2VyU3RhcnQgPj0gMCAmJiByYW5nZU1hcmtlckVuZCA+PSAwKSB7CisgICAgICByYW5nZSA9IFRleHRSYW5nZS5jcmVhdGUocmFuZ2VNYXJrZXJTdGFydCwgcmFuZ2VNYXJrZXJFbmQgLSBTVEFSVF9SQU5HRV9NQVJLRVIubGVuZ3RoKCkpOworICAgICAgYnVmZmVyLmFwcGVuZCh0ZXh0LnN1YnN0cmluZygwLCByYW5nZU1hcmtlclN0YXJ0KSkKKyAgICAgICAgLmFwcGVuZCh0ZXh0LnN1YnN0cmluZyhyYW5nZU1hcmtlclN0YXJ0ICsgU1RBUlRfUkFOR0VfTUFSS0VSLmxlbmd0aCgpLCByYW5nZU1hcmtlckVuZCkpCisgICAgICAgIC5hcHBlbmQodGV4dC5zdWJzdHJpbmcocmFuZ2VNYXJrZXJFbmQgKyBFTkRfUkFOR0VfTUFSS0VSLmxlbmd0aCgpKSk7CisgICAgfQorICAgIGVsc2UgeworICAgICAgcmFuZ2UgPSBUZXh0UmFuZ2UuY3JlYXRlKDAsIHRleHQubGVuZ3RoKCkpOworICAgICAgYnVmZmVyLmFwcGVuZCh0ZXh0KTsKKyAgICB9CisgICAgcmV0dXJuIFBhaXIuY3JlYXRlKGJ1ZmZlci50b1N0cmluZygpLCByYW5nZSk7CisgIH0KKyAgCisgIHByaXZhdGUgdm9pZCBkb1BzaVRlc3QoQE5vdE51bGwgU3RyaW5nIGluaXRpYWwsIEBOb3ROdWxsIFN0cmluZyBleHBlY3RlZCwgYm9vbGVhbiB1c2VUYWJzLCBib29sZWFuIHNtYXJ0VGFicywgaW50IHRhYldpZHRoKSB7CisgICAgZmluYWwgTGlzdDxBU1ROb2RlPiBjaGlsZHJlbiA9IG5ldyBBcnJheUxpc3Q8QVNUTm9kZT4oKTsKKyAgICBmaW5hbCBMaXN0PFN0cmluZ0J1aWxkZXI+IGNoaWxkcmVuVGV4dCA9IG5ldyBBcnJheUxpc3Q8U3RyaW5nQnVpbGRlcj4oKTsKKyAgICBQYWlyPFN0cmluZywgVGV4dFJhbmdlPiBwYWlyID0gcGFyc2UoaW5pdGlhbCk7CisgICAgZmluYWwgU3RyaW5nIHRleHQgPSBwYWlyLmZpcnN0OworICAgIGludCBzdGFydCA9IDA7CisgICAgYm9vbGVhbiBpbldoaXRlU3BhY2UgPSBpbml0aWFsLmNoYXJBdCgwKSA9PSAnICcgfHwgaW5pdGlhbC5jaGFyQXQoMCkgPT0gJ1x0JzsKKyAgICBmb3IgKGludCBpID0gMTsgaSA8PSB0ZXh0Lmxlbmd0aCgpOyBpKyspIHsKKyAgICAgIGlmIChpID09IHRleHQubGVuZ3RoKCkgfHwgKChTdHJpbmdVdGlsLmlzV2hpdGVTcGFjZSh0ZXh0LmNoYXJBdChpKSkpIF4gaW5XaGl0ZVNwYWNlKSkgeworICAgICAgICBmaW5hbCBpbnQgY2hpbGRJbmRleCA9IGNoaWxkcmVuLnNpemUoKTsKKyAgICAgICAgZmluYWwgaW50IHN0YXJ0T2Zmc2V0ID0gc3RhcnQ7CisgICAgICAgIGNoaWxkcmVuVGV4dC5hZGQobmV3IFN0cmluZ0J1aWxkZXIodGV4dC5zdWJzdHJpbmcoc3RhcnQsIGkpKSk7CisgICAgICAgIGZpbmFsIEFTVE5vZGUgY2hpbGQgPSBteU1vY2tlcnkubW9jayhBU1ROb2RlLmNsYXNzLCAiY2hpbGQiICsgY2hpbGRJbmRleCk7CisgICAgICAgIGNoaWxkcmVuLmFkZChjaGlsZCk7CisgICAgICAgIGZpbmFsIElFbGVtZW50VHlwZSB0eXBlID0gaW5XaGl0ZVNwYWNlID8gVG9rZW5UeXBlLldISVRFX1NQQUNFIDogVG9rZW5UeXBlLkNPREVfRlJBR01FTlQ7CisgICAgICAgIG15TW9ja2VyeS5jaGVja2luZyhuZXcgRXhwZWN0YXRpb25zKCkge3sKKyAgICAgICAgICBhbGxvd2luZyhjaGlsZCkuZ2V0RWxlbWVudFR5cGUoKTsgd2lsbChyZXR1cm5WYWx1ZSh0eXBlKSk7CisgICAgICAgICAgYWxsb3dpbmcoY2hpbGQpLmdldENoYXJzKCk7IHdpbGwocmV0dXJuVmFsdWUoY2hpbGRyZW5UZXh0LmdldChjaGlsZEluZGV4KSkpOworICAgICAgICAgIGFsbG93aW5nKGNoaWxkKS5nZXRUZXh0TGVuZ3RoKCk7IHdpbGwocmV0dXJuVmFsdWUoY2hpbGRyZW5UZXh0LmdldChjaGlsZEluZGV4KS5sZW5ndGgoKSkpOworICAgICAgICAgIGFsbG93aW5nKGNoaWxkKS5nZXRTdGFydE9mZnNldCgpOyB3aWxsKHJldHVyblZhbHVlKHN0YXJ0T2Zmc2V0KSk7CisgICAgICAgIH19KTsKKyAgICAgICAgaW5XaGl0ZVNwYWNlID0gIWluV2hpdGVTcGFjZTsKKyAgICAgICAgc3RhcnQgPSBpOworICAgICAgfQorICAgIH0KKyAgICAKKyAgICBmaW5hbCBBU1ROb2RlIHJvb3QgPSBteU1vY2tlcnkubW9jayhBU1ROb2RlLmNsYXNzKTsKKyAgICBteU1vY2tlcnkuY2hlY2tpbmcobmV3IEV4cGVjdGF0aW9ucygpIHt7CisgICAgICBhbGxvd2luZyhyb290KS5nZXRGaXJzdENoaWxkTm9kZSgpOyB3aWxsKHJldHVyblZhbHVlKGNoaWxkcmVuLmdldCgwKSkpOworICAgICAgYWxsb3dpbmcocm9vdCkuZ2V0VGV4dExlbmd0aCgpOyB3aWxsKHJldHVyblZhbHVlKHRleHQubGVuZ3RoKCkpKTsKKyAgICAgIGFsbG93aW5nKHJvb3QpLmdldFN0YXJ0T2Zmc2V0KCk7IHdpbGwocmV0dXJuVmFsdWUoMCkpOworICAgIH19KTsKKworICAgIFRhYlBvc3RGb3JtYXRQcm9jZXNzb3IuVHJlZUhlbHBlciBoZWxwZXIgPSBuZXcgVGFiUG9zdEZvcm1hdFByb2Nlc3Nvci5UcmVlSGVscGVyKCkgeworCisgICAgICBAT3ZlcnJpZGUKKyAgICAgIHB1YmxpYyBBU1ROb2RlIHByZXZMZWFmKEBOb3ROdWxsIEFTVE5vZGUgY3VycmVudCkgeworICAgICAgICBpbnQgaSA9IGNoaWxkcmVuLmluZGV4T2YoY3VycmVudCk7CisgICAgICAgIHJldHVybiBpID4gMCA/IGNoaWxkcmVuLmdldChpIC0gMSkgOiBudWxsOworICAgICAgfQorCisgICAgICBAT3ZlcnJpZGUKKyAgICAgIHB1YmxpYyBBU1ROb2RlIG5leHRMZWFmKEBOb3ROdWxsIEFTVE5vZGUgY3VycmVudCkgeworICAgICAgICBpbnQgaSA9IGNoaWxkcmVuLmluZGV4T2YoY3VycmVudCk7CisgICAgICAgIHJldHVybiBpIDwgY2hpbGRyZW4uc2l6ZSgpIC0gMSA/IGNoaWxkcmVuLmdldChpICsgMSkgOiBudWxsOworICAgICAgfQorCisgICAgICBAT3ZlcnJpZGUKKyAgICAgIHB1YmxpYyBBU1ROb2RlIGZpcnN0TGVhZihATm90TnVsbCBBU1ROb2RlIHN0YXJ0Tm9kZSkgeworICAgICAgICByZXR1cm4gcm9vdCA9PSBzdGFydE5vZGUgPyBjaGlsZHJlbi5nZXQoMCkgOiBudWxsOworICAgICAgfQorCisgICAgICBAT3ZlcnJpZGUKKyAgICAgIHB1YmxpYyB2b2lkIHJlcGxhY2UoQE5vdE51bGwgU3RyaW5nIG5ld1RleHQsIEBOb3ROdWxsIFRleHRSYW5nZSByYW5nZSwgQE5vdE51bGwgQVNUTm9kZSBsZWFmKSB7CisgICAgICAgIGludCBpID0gY2hpbGRyZW4uaW5kZXhPZihsZWFmKTsKKyAgICAgICAgY2hpbGRyZW5UZXh0LmdldChpKS5yZXBsYWNlKHJhbmdlLmdldFN0YXJ0T2Zmc2V0KCkgLSBsZWFmLmdldFN0YXJ0T2Zmc2V0KCksIHJhbmdlLmdldEVuZE9mZnNldCgpIC0gbGVhZi5nZXRTdGFydE9mZnNldCgpLCBuZXdUZXh0KTsKKyAgICAgIH0KKyAgICB9OworICAgIAorICAgIFRhYlBvc3RGb3JtYXRQcm9jZXNzb3IucHJvY2Vzc1ZpYVBzaShyb290LCBwYWlyLnNlY29uZCwgaGVscGVyLCB1c2VUYWJzLCBzbWFydFRhYnMsIHRhYldpZHRoKTsKKyAgICBTdHJpbmdCdWlsZGVyIGFjdHVhbCA9IG5ldyBTdHJpbmdCdWlsZGVyKCk7CisgICAgZm9yIChBU1ROb2RlIGNoaWxkIDogY2hpbGRyZW4pIHsKKyAgICAgIGFjdHVhbC5hcHBlbmQoY2hpbGQuZ2V0Q2hhcnMoKSk7CisgICAgfQorICAgIGFzc2VydEVxdWFscyhleHBlY3RlZCwgYWN0dWFsLnRvU3RyaW5nKCkpOworICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovcHNpL2ltcGwvc291cmNlL3RyZWUvamF2YS9CaW5kVG9FbGVtZW50VGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL3BzaS9pbXBsL3NvdXJjZS90cmVlL2phdmEvQmluZFRvRWxlbWVudFRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZjMzNzY1Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL3BzaS9pbXBsL3NvdXJjZS90cmVlL2phdmEvQmluZFRvRWxlbWVudFRlc3QuamF2YQpAQCAtMCwwICsxLDgyIEBACitwYWNrYWdlIGNvbS5pbnRlbGxpai5wc2kuaW1wbC5zb3VyY2UudHJlZS5qYXZhOworCitpbXBvcnQgY29tLmludGVsbGlqLmNvZGVJbnNpZ2h0LkNvZGVJbnNpZ2h0VGVzdENhc2U7CitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkuYXBwbGljYXRpb24uQXBwbGljYXRpb25NYW5hZ2VyOworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLmFwcGxpY2F0aW9uLmV4LlBhdGhNYW5hZ2VyRXg7CitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkudXRpbC5Db21wdXRhYmxlOworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLnZmcy5Mb2NhbEZpbGVTeXN0ZW07CitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkudmZzLlZpcnR1YWxGaWxlOworaW1wb3J0IGNvbS5pbnRlbGxpai5wc2kuKjsKK2ltcG9ydCBjb20uaW50ZWxsaWoucHNpLnNlYXJjaC5HbG9iYWxTZWFyY2hTY29wZTsKK2ltcG9ydCBjb20uaW50ZWxsaWoucHNpLnV0aWwuUHNpVHJlZVV0aWw7CitpbXBvcnQgY29tLmludGVsbGlqLnRlc3RGcmFtZXdvcmsuUHNpVGVzdFV0aWw7CitpbXBvcnQgY29tLmludGVsbGlqLnV0aWwuSW5jb3JyZWN0T3BlcmF0aW9uRXhjZXB0aW9uOworCitpbXBvcnQgamF2YS5pby5GaWxlOworCisvKioKKyAqIEBhdXRob3IgZHNsCisgKi8KK3B1YmxpYyBjbGFzcyBCaW5kVG9FbGVtZW50VGVzdCBleHRlbmRzIENvZGVJbnNpZ2h0VGVzdENhc2UgeworICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBURVNUX1JPT1QgPSBQYXRoTWFuYWdlckV4LmdldFRlc3REYXRhUGF0aCgpICsgIi9wc2kvaW1wbC9iaW5kVG9FbGVtZW50VGVzdC8iLnJlcGxhY2UoJy8nLCBGaWxlLnNlcGFyYXRvckNoYXIpOworCisgIEBPdmVycmlkZQorICBwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24geworICAgIHN1cGVyLnNldFVwKCk7CisgICAgVmlydHVhbEZpbGUgcm9vdCA9IEFwcGxpY2F0aW9uTWFuYWdlci5nZXRBcHBsaWNhdGlvbigpLnJ1bldyaXRlQWN0aW9uKG5ldyBDb21wdXRhYmxlPFZpcnR1YWxGaWxlPigpIHsKKyAgICAgIEBPdmVycmlkZQorICAgICAgcHVibGljIFZpcnR1YWxGaWxlIGNvbXB1dGUoKSB7CisgICAgICAgIHJldHVybiBMb2NhbEZpbGVTeXN0ZW0uZ2V0SW5zdGFuY2UoKS5yZWZyZXNoQW5kRmluZEZpbGVCeUlvRmlsZSgKKyAgICAgICAgICBuZXcgRmlsZShuZXcgRmlsZShURVNUX1JPT1QpLCAicHJqIikKKyAgICAgICAgKTsKKyAgICAgIH0KKyAgICB9KTsKKyAgICBhc3NlcnROb3ROdWxsKHJvb3QpOworICAgIFBzaVRlc3RVdGlsLmFkZFNvdXJjZVJvb3QobXlNb2R1bGUsIHJvb3QpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFNpbmdsZUNsYXNzSW1wb3J0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KG5ldyBSdW5uYWJsZSgpIHsKKyAgICAgIEBPdmVycmlkZQorICAgICAgcHVibGljIHZvaWQgcnVuKCkgeworICAgICAgICBQc2lFbGVtZW50IGVsZW1lbnQgPSBteUZpbGUuZmluZEVsZW1lbnRBdChteUVkaXRvci5nZXRDYXJldE1vZGVsKCkuZ2V0T2Zmc2V0KCkpOworICAgICAgICBmaW5hbCBQc2lKYXZhQ29kZVJlZmVyZW5jZUVsZW1lbnQgcmVmZXJlbmNlRWxlbWVudCA9IFBzaVRyZWVVdGlsLmdldFBhcmVudE9mVHlwZShlbGVtZW50LCBQc2lKYXZhQ29kZVJlZmVyZW5jZUVsZW1lbnQuY2xhc3MpOworICAgICAgICBmaW5hbCBQc2lDbGFzcyBhQ2xhc3NBID0gSmF2YVBzaUZhY2FkZS5nZXRJbnN0YW5jZShteVByb2plY3QpLmZpbmRDbGFzcygicDIuQSIsIEdsb2JhbFNlYXJjaFNjb3BlLm1vZHVsZVNjb3BlKG15TW9kdWxlKSk7CisgICAgICAgIGFzc2VydE5vdE51bGwoYUNsYXNzQSk7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgcmVmZXJlbmNlRWxlbWVudC5iaW5kVG9FbGVtZW50KGFDbGFzc0EpOworICAgICAgICB9CisgICAgICAgIGNhdGNoIChJbmNvcnJlY3RPcGVyYXRpb25FeGNlcHRpb24gZSkgeworICAgICAgICAgIExPRy5lcnJvcihlKTsKKyAgICAgICAgfQorICAgICAgfQorICAgIH0pOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFJlcGxhY2luZ1R5cGUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QobmV3IFJ1bm5hYmxlKCkgeworICAgICAgQE92ZXJyaWRlCisgICAgICBwdWJsaWMgdm9pZCBydW4oKSB7CisgICAgICAgIGZpbmFsIFBzaUVsZW1lbnQgZWxlbWVudEF0ID0gbXlGaWxlLmZpbmRFbGVtZW50QXQobXlFZGl0b3IuZ2V0Q2FyZXRNb2RlbCgpLmdldE9mZnNldCgpKTsKKyAgICAgICAgZmluYWwgUHNpVHlwZUVsZW1lbnQgdHlwZUVsZW1lbnQgPSBQc2lUcmVlVXRpbC5nZXRQYXJlbnRPZlR5cGUoZWxlbWVudEF0LCBQc2lUeXBlRWxlbWVudC5jbGFzcyk7CisgICAgICAgIGZpbmFsIFBzaUNsYXNzIGFDbGFzc0EgPSBKYXZhUHNpRmFjYWRlLmdldEluc3RhbmNlKG15UHJvamVjdCkuZmluZENsYXNzKCJwMi5BIiwgR2xvYmFsU2VhcmNoU2NvcGUubW9kdWxlU2NvcGUobXlNb2R1bGUpKTsKKyAgICAgICAgYXNzZXJ0Tm90TnVsbChhQ2xhc3NBKTsKKyAgICAgICAgZmluYWwgUHNpRWxlbWVudEZhY3RvcnkgZmFjdG9yeSA9IG15SmF2YUZhY2FkZS5nZXRFbGVtZW50RmFjdG9yeSgpOworICAgICAgICBmaW5hbCBQc2lDbGFzc1R5cGUgdHlwZSA9IGZhY3RvcnkuY3JlYXRlVHlwZShhQ2xhc3NBKTsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICB0eXBlRWxlbWVudC5yZXBsYWNlKGZhY3RvcnkuY3JlYXRlVHlwZUVsZW1lbnQodHlwZSkpOworICAgICAgICB9CisgICAgICAgIGNhdGNoIChJbmNvcnJlY3RPcGVyYXRpb25FeGNlcHRpb24gZSkgeworICAgICAgICAgIExPRy5lcnJvcihlKTsKKyAgICAgICAgfQorICAgICAgfQorICAgIH0pOworICB9CisKKyAgcHJpdmF0ZSB2b2lkIGRvVGVzdChmaW5hbCBSdW5uYWJsZSBydW5uYWJsZSkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZmluYWwgU3RyaW5nIHJlbGF0aXZlRmlsZVBhdGggPSAiL3BzaS9pbXBsL2JpbmRUb0VsZW1lbnRUZXN0LyIgKyBnZXRUZXN0TmFtZShmYWxzZSk7CisgICAgY29uZmlndXJlQnlGaWxlKHJlbGF0aXZlRmlsZVBhdGggKyAiLmphdmEiKTsKKyAgICBydW5uYWJsZS5ydW4oKTsKKyAgICBjaGVja1Jlc3VsdEJ5RmlsZShyZWxhdGl2ZUZpbGVQYXRoICsgIi5qYXZhLmFmdGVyIik7CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9wc2kvaW1wbC9zb3VyY2UvdHJlZS9qYXZhL0JpbmRUb0dlbmVyaWNDbGFzc1Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9wc2kvaW1wbC9zb3VyY2UvdHJlZS9qYXZhL0JpbmRUb0dlbmVyaWNDbGFzc1Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZDBkNjUzCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL3BzaS9pbXBsL3NvdXJjZS90cmVlL2phdmEvQmluZFRvR2VuZXJpY0NsYXNzVGVzdC5qYXZhCkBAIC0wLDAgKzEsNDggQEAKK3BhY2thZ2UgY29tLmludGVsbGlqLnBzaS5pbXBsLnNvdXJjZS50cmVlLmphdmE7CisKK2ltcG9ydCBjb20uaW50ZWxsaWoucHNpLio7CitpbXBvcnQgY29tLmludGVsbGlqLnBzaS5jb2RlU3R5bGUuQ29kZVN0eWxlU2V0dGluZ3M7CitpbXBvcnQgY29tLmludGVsbGlqLnBzaS5jb2RlU3R5bGUuQ29kZVN0eWxlU2V0dGluZ3NNYW5hZ2VyOworaW1wb3J0IGNvbS5pbnRlbGxpai5wc2kuc2VhcmNoLkdsb2JhbFNlYXJjaFNjb3BlOworCisvKioKKyAqIEBhdXRob3IgZHNsCisgKi8KK3B1YmxpYyBjbGFzcyBCaW5kVG9HZW5lcmljQ2xhc3NUZXN0IGV4dGVuZHMgR2VuZXJpY3NUZXN0Q2FzZSB7CisgIHByaXZhdGUgYm9vbGVhbiBteU9sZEZRTmFtZXNTZXR0aW5nOworCisgIEBPdmVycmlkZQorICBwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24geworICAgIHN1cGVyLnNldFVwKCk7CisgICAgc2V0dXBHZW5lcmljU2FtcGxlQ2xhc3NlcygpOworICAgIGZpbmFsIENvZGVTdHlsZVNldHRpbmdzIGN1cnJlbnRTZXR0aW5ncyA9IENvZGVTdHlsZVNldHRpbmdzTWFuYWdlci5nZXRJbnN0YW5jZShteVByb2plY3QpLmdldEN1cnJlbnRTZXR0aW5ncygpOworCisgICAgbXlPbGRGUU5hbWVzU2V0dGluZyA9IGN1cnJlbnRTZXR0aW5ncy5VU0VfRlFfQ0xBU1NfTkFNRVM7CisgICAgY3VycmVudFNldHRpbmdzLlVTRV9GUV9DTEFTU19OQU1FUyA9IHRydWU7CisgIH0KKworICBAT3ZlcnJpZGUKKyAgcHJvdGVjdGVkIHZvaWQgdGVhckRvd24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBmaW5hbCBDb2RlU3R5bGVTZXR0aW5ncyBjdXJyZW50U2V0dGluZ3MgPSBDb2RlU3R5bGVTZXR0aW5nc01hbmFnZXIuZ2V0SW5zdGFuY2UobXlQcm9qZWN0KS5nZXRDdXJyZW50U2V0dGluZ3MoKTsKKyAgICBjdXJyZW50U2V0dGluZ3MuVVNFX0ZRX0NMQVNTX05BTUVTID0gbXlPbGRGUU5hbWVzU2V0dGluZzsKKyAgICBzdXBlci50ZWFyRG93bigpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFJlZmVyZW5jZUVsZW1lbnQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBmaW5hbCBKYXZhUHNpRmFjYWRlIG1hbmFnZXIgPSBnZXRKYXZhRmFjYWRlKCk7CisgICAgZmluYWwgUHNpQ2xhc3MgY2xhc3NBID0gbWFuYWdlci5nZXRFbGVtZW50RmFjdG9yeSgpLmNyZWF0ZUNsYXNzRnJvbVRleHQoImNsYXNzIEEgZXh0ZW5kcyBMaXN0PFN0cmluZz57fSIsIG51bGwpLmdldElubmVyQ2xhc3NlcygpWzBdOworICAgIGZpbmFsIFBzaUNsYXNzIGNsYXNzVGVzdExpc3QgPSBtYW5hZ2VyLmZpbmRDbGFzcygidGVzdC5MaXN0IiwgR2xvYmFsU2VhcmNoU2NvcGUubW9kdWxlV2l0aERlcGVuZGVuY2llc0FuZExpYnJhcmllc1Njb3BlKG15TW9kdWxlKSk7CisgICAgYXNzZXJ0Tm90TnVsbChjbGFzc1Rlc3RMaXN0KTsKKyAgICBjbGFzc0EuZ2V0RXh0ZW5kc0xpc3QoKS5nZXRSZWZlcmVuY2VFbGVtZW50cygpWzBdLmJpbmRUb0VsZW1lbnQoY2xhc3NUZXN0TGlzdCk7CisgICAgYXNzZXJ0RXF1YWxzKCJjbGFzcyBBIGV4dGVuZHMgdGVzdC5MaXN0PFN0cmluZz57fSIsIGNsYXNzQS5nZXRUZXh0KCkpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFJlZmVyZW5jZSgpIHRocm93cyBFeGNlcHRpb24geworICAgIGZpbmFsIEphdmFQc2lGYWNhZGUgbWFuYWdlciA9IGdldEphdmFGYWNhZGUoKTsKKyAgICBmaW5hbCBQc2lFeHByZXNzaW9uIHBzaUV4cHJlc3Npb24gPSBtYW5hZ2VyLmdldEVsZW1lbnRGYWN0b3J5KCkuY3JlYXRlRXhwcmVzc2lvbkZyb21UZXh0KCJMaXN0IiwgbnVsbCk7CisgICAgZmluYWwgUHNpQ2xhc3MgY2xhc3NUZXN0TGlzdCA9IG1hbmFnZXIuZmluZENsYXNzKCJ0ZXN0Lkxpc3QiLCBHbG9iYWxTZWFyY2hTY29wZS5tb2R1bGVXaXRoRGVwZW5kZW5jaWVzQW5kTGlicmFyaWVzU2NvcGUobXlNb2R1bGUpKTsKKyAgICBhc3NlcnROb3ROdWxsKGNsYXNzVGVzdExpc3QpOworICAgIGZpbmFsIFBzaUVsZW1lbnQgcmVzdWx0ID0gKChQc2lSZWZlcmVuY2VFeHByZXNzaW9uKSBwc2lFeHByZXNzaW9uKS5iaW5kVG9FbGVtZW50KGNsYXNzVGVzdExpc3QpOworICAgIGFzc2VydEVxdWFscygidGVzdC5MaXN0IiwgcmVzdWx0LmdldFRleHQoKSk7CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9wc2kvaW1wbC9zb3VyY2UvdHJlZS9qYXZhL0V4dGVuZHNCb3VuZExpc3RUZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovcHNpL2ltcGwvc291cmNlL3RyZWUvamF2YS9FeHRlbmRzQm91bmRMaXN0VGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY4ZmRjMTcKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovcHNpL2ltcGwvc291cmNlL3RyZWUvamF2YS9FeHRlbmRzQm91bmRMaXN0VGVzdC5qYXZhCkBAIC0wLDAgKzEsMTE5IEBACisvKgorICogQ29weXJpZ2h0IDIwMDAtMjAxMiBKZXRCcmFpbnMgcy5yLm8uCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworcGFja2FnZSBjb20uaW50ZWxsaWoucHNpLmltcGwuc291cmNlLnRyZWUuamF2YTsKKworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLmFwcGxpY2F0aW9uLkFwcGxpY2F0aW9uTWFuYWdlcjsKK2ltcG9ydCBjb20uaW50ZWxsaWoucHNpLio7CitpbXBvcnQgY29tLmludGVsbGlqLnRlc3RGcmFtZXdvcmsuTGlnaHRDb2RlSW5zaWdodFRlc3RDYXNlOworCisvKioKKyAqICBAYXV0aG9yIGRzbAorICovCitwdWJsaWMgY2xhc3MgRXh0ZW5kc0JvdW5kTGlzdFRlc3QgZXh0ZW5kcyBMaWdodENvZGVJbnNpZ2h0VGVzdENhc2UgeworICBwdWJsaWMgdm9pZCB0ZXN0UmVtb3ZlQm91bmRGcm9tRnJvbnQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBmaW5hbCBQc2lUeXBlUGFyYW1ldGVyIHR5cGVQYXJhbWV0ZXIgPSBnZXRUeXBlUGFyYW1ldGVyKCk7CisgICAgQXBwbGljYXRpb25NYW5hZ2VyLmdldEFwcGxpY2F0aW9uKCkucnVuV3JpdGVBY3Rpb24obmV3IFJ1bm5hYmxlKCkgeworICAgICAgQE92ZXJyaWRlCisgICAgICBwdWJsaWMgdm9pZCBydW4oKSB7CisgICAgICAgIHR5cGVQYXJhbWV0ZXIuZ2V0RXh0ZW5kc0xpc3QoKS5nZXRSZWZlcmVuY2VFbGVtZW50cygpWzBdLmRlbGV0ZSgpOworICAgICAgfQorICAgIH0pOworCisgICAgY2hlY2soKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RSZW1vdmVCb3VuZEZyb21FbmQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBmaW5hbCBQc2lUeXBlUGFyYW1ldGVyIHR5cGVQYXJhbWV0ZXIgPSBnZXRUeXBlUGFyYW1ldGVyKCk7CisgICAgQXBwbGljYXRpb25NYW5hZ2VyLmdldEFwcGxpY2F0aW9uKCkucnVuV3JpdGVBY3Rpb24obmV3IFJ1bm5hYmxlKCkgeworICAgICAgQE92ZXJyaWRlCisgICAgICBwdWJsaWMgdm9pZCBydW4oKSB7CisgICAgICAgIHR5cGVQYXJhbWV0ZXIuZ2V0RXh0ZW5kc0xpc3QoKS5nZXRSZWZlcmVuY2VFbGVtZW50cygpWzFdLmRlbGV0ZSgpOworICAgICAgfQorICAgIH0pOworCisgICAgY2hlY2soKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RSZW1vdmVCb3VuZEZyb21NaWRkbGUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBmaW5hbCBQc2lUeXBlUGFyYW1ldGVyIHR5cGVQYXJhbWV0ZXIgPSBnZXRUeXBlUGFyYW1ldGVyKCk7CisgICAgQXBwbGljYXRpb25NYW5hZ2VyLmdldEFwcGxpY2F0aW9uKCkucnVuV3JpdGVBY3Rpb24obmV3IFJ1bm5hYmxlKCkgeworICAgICAgQE92ZXJyaWRlCisgICAgICBwdWJsaWMgdm9pZCBydW4oKSB7CisgICAgICAgIHR5cGVQYXJhbWV0ZXIuZ2V0RXh0ZW5kc0xpc3QoKS5nZXRSZWZlcmVuY2VFbGVtZW50cygpWzFdLmRlbGV0ZSgpOworICAgICAgfQorICAgIH0pOworCisgICAgY2hlY2soKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RBZGRCb3VuZEluVGhlTWlkZGxlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZmluYWwgUHNpVHlwZVBhcmFtZXRlciB0eXBlUGFyYW1ldGVyID0gZ2V0VHlwZVBhcmFtZXRlcigpOworICAgIGZpbmFsIFBzaVJlZmVyZW5jZUxpc3QgZXh0ZW5kc0xpc3QgPSB0eXBlUGFyYW1ldGVyLmdldEV4dGVuZHNMaXN0KCk7CisgICAgZmluYWwgUHNpQ2xhc3MgY2xvbmVhYmxlQ2xhc3MgPSBnZXRKYXZhRmFjYWRlKCkuZmluZENsYXNzKCJqYXZhLmxhbmcuQ2xvbmVhYmxlIik7CisgICAgYXNzZXJ0Tm90TnVsbChjbG9uZWFibGVDbGFzcyk7CisgICAgZmluYWwgUHNpSmF2YUNvZGVSZWZlcmVuY2VFbGVtZW50IHJlZmVyZW5jZSA9IGdldEphdmFGYWNhZGUoKS5nZXRFbGVtZW50RmFjdG9yeSgpLmNyZWF0ZUNsYXNzUmVmZXJlbmNlRWxlbWVudChjbG9uZWFibGVDbGFzcyk7CisgICAgZXh0ZW5kc0xpc3QuYWRkQWZ0ZXIocmVmZXJlbmNlLCBleHRlbmRzTGlzdC5nZXRSZWZlcmVuY2VFbGVtZW50cygpWzBdKTsKKyAgICBjaGVjaygpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEFkZEJvdW5kSW5Gcm9udCgpIHRocm93cyBFeGNlcHRpb24geworICAgIGZpbmFsIFBzaVR5cGVQYXJhbWV0ZXIgdHlwZVBhcmFtZXRlciA9IGdldFR5cGVQYXJhbWV0ZXIoKTsKKyAgICBmaW5hbCBQc2lSZWZlcmVuY2VMaXN0IGV4dGVuZHNMaXN0ID0gdHlwZVBhcmFtZXRlci5nZXRFeHRlbmRzTGlzdCgpOworICAgIGZpbmFsIFBzaUNsYXNzIGNsb25lYWJsZUNsYXNzID0gZ2V0SmF2YUZhY2FkZSgpLmZpbmRDbGFzcygiamF2YS5sYW5nLkNsb25lYWJsZSIpOworICAgIGFzc2VydE5vdE51bGwoY2xvbmVhYmxlQ2xhc3MpOworICAgIGZpbmFsIFBzaUphdmFDb2RlUmVmZXJlbmNlRWxlbWVudCByZWZlcmVuY2UgPSBnZXRKYXZhRmFjYWRlKCkuZ2V0RWxlbWVudEZhY3RvcnkoKS5jcmVhdGVDbGFzc1JlZmVyZW5jZUVsZW1lbnQoY2xvbmVhYmxlQ2xhc3MpOworICAgIGV4dGVuZHNMaXN0LmFkZEJlZm9yZShyZWZlcmVuY2UsIGV4dGVuZHNMaXN0LmdldFJlZmVyZW5jZUVsZW1lbnRzKClbMF0pOworICAgIGNoZWNrKCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0QWRkQm91bmRJbkVuZCgpIHRocm93cyBFeGNlcHRpb24geworICAgIGZpbmFsIFBzaVR5cGVQYXJhbWV0ZXIgdHlwZVBhcmFtZXRlciA9IGdldFR5cGVQYXJhbWV0ZXIoKTsKKyAgICBmaW5hbCBQc2lSZWZlcmVuY2VMaXN0IGV4dGVuZHNMaXN0ID0gdHlwZVBhcmFtZXRlci5nZXRFeHRlbmRzTGlzdCgpOworICAgIGZpbmFsIFBzaUNsYXNzIGNsb25lYWJsZUNsYXNzID0gZ2V0SmF2YUZhY2FkZSgpLmZpbmRDbGFzcygiamF2YS5sYW5nLkNsb25lYWJsZSIpOworICAgIGFzc2VydE5vdE51bGwoY2xvbmVhYmxlQ2xhc3MpOworICAgIGZpbmFsIFBzaUphdmFDb2RlUmVmZXJlbmNlRWxlbWVudCByZWZlcmVuY2UgPSBnZXRKYXZhRmFjYWRlKCkuZ2V0RWxlbWVudEZhY3RvcnkoKS5jcmVhdGVDbGFzc1JlZmVyZW5jZUVsZW1lbnQoY2xvbmVhYmxlQ2xhc3MpOworICAgIGV4dGVuZHNMaXN0LmFkZEJlZm9yZShyZWZlcmVuY2UsIG51bGwpOworICAgIGNoZWNrKCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0QWRkQm91bmQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBmaW5hbCBQc2lUeXBlUGFyYW1ldGVyIHR5cGVQYXJhbWV0ZXIgPSBnZXRUeXBlUGFyYW1ldGVyKCk7CisgICAgZmluYWwgUHNpUmVmZXJlbmNlTGlzdCBleHRlbmRzTGlzdCA9IHR5cGVQYXJhbWV0ZXIuZ2V0RXh0ZW5kc0xpc3QoKTsKKyAgICBmaW5hbCBQc2lDbGFzcyBjbG9uZWFibGVDbGFzcyA9IGdldEphdmFGYWNhZGUoKS5maW5kQ2xhc3MoQ29tbW9uQ2xhc3NOYW1lcy5KQVZBX0xBTkdfUlVOTkFCTEUpOworICAgIGFzc2VydE5vdE51bGwoY2xvbmVhYmxlQ2xhc3MpOworICAgIGZpbmFsIFBzaUphdmFDb2RlUmVmZXJlbmNlRWxlbWVudCByZWZlcmVuY2UgPSBnZXRKYXZhRmFjYWRlKCkuZ2V0RWxlbWVudEZhY3RvcnkoKS5jcmVhdGVDbGFzc1JlZmVyZW5jZUVsZW1lbnQoY2xvbmVhYmxlQ2xhc3MpOworICAgIGV4dGVuZHNMaXN0LmFkZChyZWZlcmVuY2UpOworICAgIGNoZWNrKCk7CisgIH0KKworICBwcml2YXRlIHZvaWQgY2hlY2soKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBvdXRwdXRGaWxlKGdldFRlc3ROYW1lKHRydWUpICsgIl9hZnRlci5qYXZhIik7CisgIH0KKworICBwcml2YXRlIFBzaVR5cGVQYXJhbWV0ZXIgZ2V0VHlwZVBhcmFtZXRlcigpIHRocm93cyBFeGNlcHRpb24geworICAgIGlucHV0RmlsZShnZXRUZXN0TmFtZSh0cnVlKSArICIuamF2YSIpOworICAgIGZpbmFsIFBzaUNsYXNzIGFDbGFzcyA9ICgoUHNpSmF2YUZpbGUpZ2V0RmlsZSgpKS5nZXRDbGFzc2VzKClbMF07CisgICAgcmV0dXJuIGFDbGFzcy5nZXRUeXBlUGFyYW1ldGVycygpWzBdOworICB9CisKKyAgcHJpdmF0ZSB2b2lkIG91dHB1dEZpbGUoU3RyaW5nIGZpbGVuYW1lKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBjaGVja1Jlc3VsdEJ5RmlsZSgiL3BzaS9pbXBsL2V4dGVuZHNCb3VuZExpc3QvIiArIGZpbGVuYW1lKTsKKyAgfQorCisgIHByaXZhdGUgdm9pZCBpbnB1dEZpbGUoU3RyaW5nIGZpbGVuYW1lKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBjb25maWd1cmVCeUZpbGUoIi9wc2kvaW1wbC9leHRlbmRzQm91bmRMaXN0LyIgKyBmaWxlbmFtZSk7CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9wc2kvaW1wbC9zb3VyY2UvdHJlZS9qYXZhL0phdmFkb2NQYXJhbVRhZ3NUZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovcHNpL2ltcGwvc291cmNlL3RyZWUvamF2YS9KYXZhZG9jUGFyYW1UYWdzVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjYjMyOWIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovcHNpL2ltcGwvc291cmNlL3RyZWUvamF2YS9KYXZhZG9jUGFyYW1UYWdzVGVzdC5qYXZhCkBAIC0wLDAgKzEsMjEwIEBACitwYWNrYWdlIGNvbS5pbnRlbGxpai5wc2kuaW1wbC5zb3VyY2UudHJlZS5qYXZhOworCitpbXBvcnQgY29tLmludGVsbGlqLmNvZGVJbnNpZ2h0LkNvZGVJbnNpZ2h0VXRpbEJhc2U7CitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkuYXBwbGljYXRpb24uQXBwbGljYXRpb25NYW5hZ2VyOworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLmNvbW1hbmQuQ29tbWFuZFByb2Nlc3NvcjsKK2ltcG9ydCBjb20uaW50ZWxsaWoucHNpLio7CitpbXBvcnQgY29tLmludGVsbGlqLnBzaS5qYXZhZG9jLlBzaURvY0NvbW1lbnQ7CitpbXBvcnQgY29tLmludGVsbGlqLnBzaS5qYXZhZG9jLlBzaURvY1RhZzsKK2ltcG9ydCBjb20uaW50ZWxsaWoudGVzdEZyYW1ld29yay5MaWdodElkZWFUZXN0Q2FzZTsKK2ltcG9ydCBjb20uaW50ZWxsaWoudXRpbC5JbmNvcnJlY3RPcGVyYXRpb25FeGNlcHRpb247CisKKy8qKgorICogIEBhdXRob3IgZHNsCisgKi8KK3B1YmxpYyBjbGFzcyBKYXZhZG9jUGFyYW1UYWdzVGVzdCBleHRlbmRzIExpZ2h0SWRlYVRlc3RDYXNlIHsKKyAgcHVibGljIHZvaWQgdGVzdERlbGV0ZVRhZzEoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBmaW5hbCBQc2lFbGVtZW50RmFjdG9yeSBmYWN0b3J5ID0gZ2V0RmFjdG9yeSgpOworICAgIGZpbmFsIFBzaU1ldGhvZCBtZXRob2QgPSBmYWN0b3J5LmNyZWF0ZU1ldGhvZEZyb21UZXh0KAorICAgICAgICAgICIvKipcbiIgKworICAgICAgICAgICIgKiBKYXZhZG9jXG4iICsKKyAgICAgICAgICAiICogQHBhcmFtIHAxXG4iICsKKyAgICAgICAgICAiICogQHBhcmFtIHAyXG4iICsKKyAgICAgICAgICAiICovIiArCisgICAgICAgICAgIiAgdm9pZCBtKCkge30iLCBudWxsKTsKKyAgICBmaW5hbCBQc2lEb2NDb21tZW50IGRvY0NvbW1lbnQgPSBtZXRob2QuZ2V0RG9jQ29tbWVudCgpOworICAgIGFzc2VydE5vdE51bGwoZG9jQ29tbWVudCk7CisgICAgZmluYWwgUHNpRG9jVGFnW10gdGFncyA9IGRvY0NvbW1lbnQuZ2V0VGFncygpOworICAgIEFwcGxpY2F0aW9uTWFuYWdlci5nZXRBcHBsaWNhdGlvbigpLnJ1bldyaXRlQWN0aW9uKG5ldyBSdW5uYWJsZSgpIHsKKyAgICAgIEBPdmVycmlkZQorICAgICAgcHVibGljIHZvaWQgcnVuKCkgeworICAgICAgICB0YWdzWzBdLmRlbGV0ZSgpOworICAgICAgfQorICAgIH0pOworCisgICAgYXNzZXJ0RXF1YWxzKCIvKipcbiIgKworICAgICAgICAgICAgICAgICAiICogSmF2YWRvY1xuIiArCisgICAgICAgICAgICAgICAgICIgKiBAcGFyYW0gcDJcbiIgKworICAgICAgICAgICAgICAgICAiICovIiwgZG9jQ29tbWVudC5nZXRUZXh0KCkpOworCisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0RGVsZXRlVGFnMigpIHRocm93cyBFeGNlcHRpb24geworICAgIGZpbmFsIFBzaUVsZW1lbnRGYWN0b3J5IGZhY3RvcnkgPSBnZXRGYWN0b3J5KCk7CisgICAgZmluYWwgUHNpTWV0aG9kIG1ldGhvZCA9IGZhY3RvcnkuY3JlYXRlTWV0aG9kRnJvbVRleHQoCisgICAgICAgICAgIi8qKlxuIiArCisgICAgICAgICAgIiAqIEphdmFkb2NcbiIgKworICAgICAgICAgICIgKiBAcGFyYW0gcDFcbiIgKworICAgICAgICAgICIgKiBAcGFyYW0gcDJcbiIgKworICAgICAgICAgICIgKi8iICsKKyAgICAgICAgICAiICB2b2lkIG0oKSB7fSIsIG51bGwpOworICAgIGZpbmFsIFBzaURvY0NvbW1lbnQgZG9jQ29tbWVudCA9IG1ldGhvZC5nZXREb2NDb21tZW50KCk7CisgICAgYXNzZXJ0Tm90TnVsbChkb2NDb21tZW50KTsKKyAgICBmaW5hbCBQc2lEb2NUYWdbXSB0YWdzID0gZG9jQ29tbWVudC5nZXRUYWdzKCk7CisgICAgQXBwbGljYXRpb25NYW5hZ2VyLmdldEFwcGxpY2F0aW9uKCkucnVuV3JpdGVBY3Rpb24obmV3IFJ1bm5hYmxlKCkgeworICAgICAgQE92ZXJyaWRlCisgICAgICBwdWJsaWMgdm9pZCBydW4oKSB7CisgICAgICAgIHRhZ3NbMV0uZGVsZXRlKCk7CisgICAgICB9CisgICAgfSk7CisKKyAgICBhc3NlcnRFcXVhbHMoIi8qKlxuIiArCisgICAgICAgICAgICAgICAgICIgKiBKYXZhZG9jXG4iICsKKyAgICAgICAgICAgICAgICAgIiAqIEBwYXJhbSBwMVxuIiArCisgICAgICAgICAgICAgICAgICIgKi8iLCBkb2NDb21tZW50LmdldFRleHQoKSk7CisKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3REZWxldGVUYWczKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZmluYWwgUHNpRWxlbWVudEZhY3RvcnkgZmFjdG9yeSA9IGdldEZhY3RvcnkoKTsKKyAgICBmaW5hbCBQc2lNZXRob2QgbWV0aG9kID0gZmFjdG9yeS5jcmVhdGVNZXRob2RGcm9tVGV4dCgKKyAgICAgICAgICAiLyoqXG4iICsKKyAgICAgICAgICAiICogSmF2YWRvY1xuIiArCisgICAgICAgICAgIiAqIEBwYXJhbSBwMVxuIiArCisgICAgICAgICAgIiAqIEBwYXJhbSBwMlxuIiArCisgICAgICAgICAgIiAqIEBwYXJhbSBwM1xuIiArCisgICAgICAgICAgIiAqLyIgKworICAgICAgICAgICIgIHZvaWQgbSgpIHt9IiwgbnVsbCk7CisgICAgZmluYWwgUHNpRG9jQ29tbWVudCBkb2NDb21tZW50ID0gbWV0aG9kLmdldERvY0NvbW1lbnQoKTsKKyAgICBhc3NlcnROb3ROdWxsKGRvY0NvbW1lbnQpOworICAgIGZpbmFsIFBzaURvY1RhZ1tdIHRhZ3MgPSBkb2NDb21tZW50LmdldFRhZ3MoKTsKKyAgICBBcHBsaWNhdGlvbk1hbmFnZXIuZ2V0QXBwbGljYXRpb24oKS5ydW5Xcml0ZUFjdGlvbihuZXcgUnVubmFibGUoKSB7CisgICAgICBAT3ZlcnJpZGUKKyAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKKyAgICAgICAgdGFnc1sxXS5kZWxldGUoKTsKKyAgICAgIH0KKyAgICB9KTsKKworICAgIGFzc2VydEVxdWFscygiLyoqXG4iICsKKyAgICAgICAgICAgICAgICAgIiAqIEphdmFkb2NcbiIgKworICAgICAgICAgICAgICAgICAiICogQHBhcmFtIHAxXG4iICsKKyAgICAgICAgICAgICAgICAgIiAqIEBwYXJhbSBwM1xuIiArCisgICAgICAgICAgICAgICAgICIgKi8iLCBkb2NDb21tZW50LmdldFRleHQoKSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0VGFnQ3JlYXRpb24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBjcmVhdGVBbmRUZXN0VGFnKCJAcGFyYW0gcDEgVGV4dCIsICJwMSIsICJUZXh0Iik7CisgICAgY3JlYXRlQW5kVGVzdFRhZygiQHBhcmFtIHAyIiwgInAyIiwgIiIpOworICAgIGNyZWF0ZUFuZFRlc3RUYWcoIkBwYXJhbSBwMiBGaXJzdExpbmVcbiAqIFNlY29uZExpbmUiLCAicDIiLCAiRmlyc3RMaW5lXG5TZWNvbmRMaW5lIik7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0QWRkVGFnMSgpIHRocm93cyBFeGNlcHRpb24geworICAgIGZpbmFsIFBzaUVsZW1lbnRGYWN0b3J5IGZhY3RvcnkgPSBnZXRGYWN0b3J5KCk7CisgICAgZmluYWwgUHNpTWV0aG9kIG1ldGhvZCA9IGZhY3RvcnkuY3JlYXRlTWV0aG9kRnJvbVRleHQoCisgICAgICAgICAgIi8qKlxuIiArCisgICAgICAgICAgIiAqIEphdmFkb2NcbiIgKworICAgICAgICAgICIgKiBAcGFyYW0gcDFcbiIgKworICAgICAgICAgICIgKi9cbiIgKworICAgICAgICAgICJ2b2lkIG0oKTsiLCBudWxsKTsKKyAgICBmaW5hbCBQc2lEb2NDb21tZW50IGRvY0NvbW1lbnQgPSBtZXRob2QuZ2V0RG9jQ29tbWVudCgpOworICAgIGFzc2VydE5vdE51bGwoZG9jQ29tbWVudCk7CisgICAgZmluYWwgUHNpRG9jVGFnW10gdGFncyA9IGRvY0NvbW1lbnQuZ2V0VGFncygpOworICAgIGZpbmFsIFBzaURvY1RhZyB0YWcyID0gZmFjdG9yeS5jcmVhdGVQYXJhbVRhZygicDIiLCAiIik7CisgICAgZG9jQ29tbWVudC5hZGRBZnRlcih0YWcyLCB0YWdzWzBdKTsKKyAgICBhc3NlcnRFcXVhbHMoCisgICAgICAiLyoqXG4iICsKKyAgICAgICIgKiBKYXZhZG9jXG4iICsKKyAgICAgICIgKiBAcGFyYW0gcDFcbiIgKworICAgICAgIiAqIEBwYXJhbSBwMlxuIiArCisgICAgICAiICovIiwgZG9jQ29tbWVudC5nZXRUZXh0KCkpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEFkZFRhZzIoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBmaW5hbCBQc2lFbGVtZW50RmFjdG9yeSBmYWN0b3J5ID0gZ2V0RmFjdG9yeSgpOworICAgIGZpbmFsIFBzaU1ldGhvZCBtZXRob2QgPSBmYWN0b3J5LmNyZWF0ZU1ldGhvZEZyb21UZXh0KAorICAgICAgICAgICIvKipcbiIgKworICAgICAgICAgICIgKiBKYXZhZG9jXG4iICsKKyAgICAgICAgICAiICogQHBhcmFtIHAxXG4iICsKKyAgICAgICAgICAiICovXG4iICsKKyAgICAgICAgICAidm9pZCBtKCk7IiwgbnVsbCk7CisgICAgZmluYWwgUHNpRG9jQ29tbWVudCBkb2NDb21tZW50ID0gbWV0aG9kLmdldERvY0NvbW1lbnQoKTsKKyAgICBhc3NlcnROb3ROdWxsKGRvY0NvbW1lbnQpOworICAgIGZpbmFsIFBzaURvY1RhZ1tdIHRhZ3MgPSBkb2NDb21tZW50LmdldFRhZ3MoKTsKKyAgICBmaW5hbCBQc2lEb2NUYWcgdGFnMiA9IGZhY3RvcnkuY3JlYXRlUGFyYW1UYWcoInAyIiwgIiIpOworICAgIGRvY0NvbW1lbnQuYWRkQmVmb3JlKHRhZzIsIHRhZ3NbMF0pOworICAgIGFzc2VydEVxdWFscygKKyAgICAgICIvKipcbiIgKworICAgICAgIiAqIEphdmFkb2NcbiIgKworICAgICAgIiAqIEBwYXJhbSBwMlxuIiArCisgICAgICAiICogQHBhcmFtIHAxXG4iICsKKyAgICAgICIgKi8iLCBkb2NDb21tZW50LmdldFRleHQoKSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0QWRkVGFnMygpIHRocm93cyBFeGNlcHRpb24geworICAgIENvbW1hbmRQcm9jZXNzb3IuZ2V0SW5zdGFuY2UoKS5leGVjdXRlQ29tbWFuZChnZXRQcm9qZWN0KCksIG5ldyBSdW5uYWJsZSgpIHsKKyAgICAgIEBPdmVycmlkZQorICAgICAgcHVibGljIHZvaWQgcnVuKCkgeworICAgICAgICBBcHBsaWNhdGlvbk1hbmFnZXIuZ2V0QXBwbGljYXRpb24oKS5ydW5Xcml0ZUFjdGlvbihuZXcgUnVubmFibGUoKXsKKyAgICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgICBwdWJsaWMgdm9pZCBydW4oKSB7CisgICAgICAgICAgICBmaW5hbCBQc2lFbGVtZW50RmFjdG9yeSBmYWN0b3J5ID0gZ2V0RmFjdG9yeSgpOworICAgICAgICAgICAgZmluYWwgUHNpSmF2YUZpbGUgcHNpRmlsZTsKKyAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgIHBzaUZpbGUgPSAoUHNpSmF2YUZpbGUpY3JlYXRlRmlsZSgiYWFhLmphdmEiLCAiY2xhc3MgQSB7LyoqXG4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgKiBKYXZhZG9jXG4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgKiBAcGFyYW0gcDFcbiIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAqIEBwYXJhbSBwM1xuIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICovXG4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ2b2lkIG0oKTt9Iik7CisgICAgICAgICAgICBmaW5hbCBQc2lDbGFzcyBwc2lDbGFzcyA9IHBzaUZpbGUuZ2V0Q2xhc3NlcygpWzBdOworICAgICAgICAgICAgZmluYWwgUHNpTWV0aG9kIG1ldGhvZCA9IHBzaUNsYXNzLmdldE1ldGhvZHMoKVswXTsKKyAgICAgICAgICAgIFBzaURvY0NvbW1lbnQgZG9jQ29tbWVudCA9IG1ldGhvZC5nZXREb2NDb21tZW50KCk7CisgICAgICAgICAgICBhc3NlcnROb3ROdWxsKGRvY0NvbW1lbnQpOworICAgICAgICAgICAgZmluYWwgUHNpRG9jVGFnW10gdGFncyA9IGRvY0NvbW1lbnQuZ2V0VGFncygpOworICAgICAgICAgICAgZmluYWwgUHNpRG9jVGFnIHRhZzIgPSBmYWN0b3J5LmNyZWF0ZVBhcmFtVGFnKCJwMiIsICIiKTsKKyAgICAgICAgICAgIGRvY0NvbW1lbnQuYWRkQWZ0ZXIodGFnMiwgdGFnc1swXSk7CisgICAgICAgICAgICBkb2NDb21tZW50ID0gQ29kZUluc2lnaHRVdGlsQmFzZS5mb3JjZVBzaVBvc3Rwcm9jZXNzQW5kUmVzdG9yZUVsZW1lbnQoZG9jQ29tbWVudCk7CisgICAgICAgICAgICBhc3NlcnRFcXVhbHMoCisgICAgICAgICAgICAgICIvKipcbiIgKworICAgICAgICAgICAgICAiICogSmF2YWRvY1xuIiArCisgICAgICAgICAgICAgICIgKiBAcGFyYW0gcDFcbiIgKworICAgICAgICAgICAgICAiICogQHBhcmFtIHAyXG4iICsKKyAgICAgICAgICAgICAgIiAqIEBwYXJhbSBwM1xuIiArCisgICAgICAgICAgICAgICIgKi8iLCBkb2NDb21tZW50LmdldFRleHQoKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjYXRjaCAoSW5jb3JyZWN0T3BlcmF0aW9uRXhjZXB0aW9uIGUpIHt9CisgICAgICAgICAgfQorICAgICAgICB9KTsKKyAgICAgIH0KKyAgICB9LCAiIiwgbnVsbCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0QWRkVGFnNCgpIHRocm93cyBFeGNlcHRpb24geworICAgIGZpbmFsIFBzaUVsZW1lbnRGYWN0b3J5IGZhY3RvcnkgPSBnZXRGYWN0b3J5KCk7CisgICAgZmluYWwgUHNpTWV0aG9kIG1ldGhvZCA9IGZhY3RvcnkuY3JlYXRlTWV0aG9kRnJvbVRleHQoCisgICAgICAgICAgIi8qKlxuIiArCisgICAgICAgICAgIiAqIEphdmFkb2NcbiIgKworICAgICAgICAgICIgKi9cbiIgKworICAgICAgICAgICJ2b2lkIG0oKTsiLCBudWxsKTsKKyAgICBmaW5hbCBQc2lEb2NDb21tZW50IGRvY0NvbW1lbnQgPSBtZXRob2QuZ2V0RG9jQ29tbWVudCgpOworICAgIGFzc2VydE5vdE51bGwoZG9jQ29tbWVudCk7CisgICAgZmluYWwgUHNpRG9jVGFnIHRhZzIgPSBmYWN0b3J5LmNyZWF0ZVBhcmFtVGFnKCJwMiIsICIiKTsKKyAgICBkb2NDb21tZW50LmFkZCh0YWcyKTsKKyAgICBhc3NlcnRFcXVhbHMoCisgICAgICAiLyoqXG4iICsKKyAgICAgICIgKiBKYXZhZG9jXG4iICsKKyAgICAgICIgKiBAcGFyYW0gcDJcbiIgKworICAgICAgIiAqLyIsIGRvY0NvbW1lbnQuZ2V0VGV4dCgpKTsKKyAgfQorCisgIHByaXZhdGUgc3RhdGljIFBzaUVsZW1lbnRGYWN0b3J5IGdldEZhY3RvcnkoKSB7CisgICAgZmluYWwgUHNpTWFuYWdlciBtYW5hZ2VyID0gZ2V0UHNpTWFuYWdlcigpOworICAgIHJldHVybiBKYXZhUHNpRmFjYWRlLmdldEluc3RhbmNlKG1hbmFnZXIuZ2V0UHJvamVjdCgpKS5nZXRFbGVtZW50RmFjdG9yeSgpOworICB9CisKKyAgcHJpdmF0ZSBzdGF0aWMgdm9pZCBjcmVhdGVBbmRUZXN0VGFnKFN0cmluZyBleHBlY3RlZFRleHQsIFN0cmluZyBwYXJhbWV0ZXJOYW1lLCBTdHJpbmcgZGVzY3JpcHRpb24pIHRocm93cyBJbmNvcnJlY3RPcGVyYXRpb25FeGNlcHRpb24geworICAgIFBzaUVsZW1lbnRGYWN0b3J5IGZhY3RvcnkgPSBnZXRGYWN0b3J5KCk7CisgICAgZmluYWwgUHNpRG9jVGFnIHBhcmFtVGFnID0gZmFjdG9yeS5jcmVhdGVQYXJhbVRhZyhwYXJhbWV0ZXJOYW1lLCBkZXNjcmlwdGlvbik7CisgICAgYXNzZXJ0RXF1YWxzKGV4cGVjdGVkVGV4dCwgcGFyYW1UYWcuZ2V0VGV4dCgpKTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL3BzaS9pbXBsL3NvdXJjZS90cmVlL2phdmEvUHNpTW9kaWZpZXJMaXN0VGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL3BzaS9pbXBsL3NvdXJjZS90cmVlL2phdmEvUHNpTW9kaWZpZXJMaXN0VGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU5NDc3NWIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovcHNpL2ltcGwvc291cmNlL3RyZWUvamF2YS9Qc2lNb2RpZmllckxpc3RUZXN0LmphdmEKQEAgLTAsMCArMSw1NiBAQAorLyoKKyAqIENvcHlyaWdodCAyMDAwLTIwMTIgSmV0QnJhaW5zIHMuci5vLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KK3BhY2thZ2UgY29tLmludGVsbGlqLnBzaS5pbXBsLnNvdXJjZS50cmVlLmphdmE7CisKK2ltcG9ydCBjb20uaW50ZWxsaWouaWRlLmhpZ2hsaWdodGVyLkphdmFGaWxlVHlwZTsKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS5hcHBsaWNhdGlvbi5BcHBsaWNhdGlvbk1hbmFnZXI7CitpbXBvcnQgY29tLmludGVsbGlqLnBzaS5Qc2lGaWxlOworaW1wb3J0IGNvbS5pbnRlbGxpai5wc2kuUHNpSmF2YUZpbGU7CitpbXBvcnQgY29tLmludGVsbGlqLnBzaS5Qc2lNZXRob2Q7CitpbXBvcnQgY29tLmludGVsbGlqLnBzaS5Qc2lNb2RpZmllcjsKK2ltcG9ydCBjb20uaW50ZWxsaWoucHNpLmNvZGVTdHlsZS5Db2RlU3R5bGVNYW5hZ2VyOworaW1wb3J0IGNvbS5pbnRlbGxpai5wc2kudXRpbC5Qc2lVdGlsOworaW1wb3J0IGNvbS5pbnRlbGxpai50ZXN0RnJhbWV3b3JrLmZpeHR1cmVzLkxpZ2h0Q29kZUluc2lnaHRGaXh0dXJlVGVzdENhc2U7CisKK3B1YmxpYyBjbGFzcyBQc2lNb2RpZmllckxpc3RUZXN0IGV4dGVuZHMgTGlnaHRDb2RlSW5zaWdodEZpeHR1cmVUZXN0Q2FzZSB7CisgIC8vIHRvZG9bci5zaF0gZHJvcCB0aGlzIGFmdGVyIHRyYW5zaXRpb24gcGVyaW9kIGZpbmlzaGVkCisgIHB1YmxpYyB2b2lkIHRlc3REZWZhdWx0TW9kaWZpZXIoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBmaW5hbCBQc2lGaWxlIGZpbGUgPSBteUZpeHR1cmUuY29uZmlndXJlQnlUZXh0KEphdmFGaWxlVHlwZS5JTlNUQU5DRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjbGFzcyBDIHtcbiIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgICBkZWZhdWx0IHZvaWQgbSgpIGRlZmF1bHQge1xuIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgIH1cbiIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIn0iKTsKKyAgICBmaW5hbCBQc2lNZXRob2QgbWV0aG9kID0gKChQc2lKYXZhRmlsZSlmaWxlKS5nZXRDbGFzc2VzKClbMF0uZ2V0TWV0aG9kcygpWzBdOworICAgIGFzc2VydEVxdWFscygiZGVmYXVsdCB2b2lkIG0oKSBkZWZhdWx0IHtcbiAgICB9IiwgbWV0aG9kLmdldFRleHQoKSk7CisKKyAgICBBcHBsaWNhdGlvbk1hbmFnZXIuZ2V0QXBwbGljYXRpb24oKS5ydW5Xcml0ZUFjdGlvbihuZXcgUnVubmFibGUoKSB7CisgICAgICBAT3ZlcnJpZGUKKyAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKKyAgICAgICAgUHNpVXRpbC5zZXRNb2RpZmllclByb3BlcnR5KG1ldGhvZCwgUHNpTW9kaWZpZXIuREVGQVVMVCwgZmFsc2UpOworICAgICAgICBDb2RlU3R5bGVNYW5hZ2VyLmdldEluc3RhbmNlKGdldFByb2plY3QoKSkucmVmb3JtYXQobWV0aG9kKTsKKyAgICAgIH0KKyAgICB9KTsKKyAgICBhc3NlcnRFcXVhbHMoInZvaWQgbSgpIHtcbiAgICB9IiwgbWV0aG9kLmdldFRleHQoKSk7CisKKyAgICBBcHBsaWNhdGlvbk1hbmFnZXIuZ2V0QXBwbGljYXRpb24oKS5ydW5Xcml0ZUFjdGlvbihuZXcgUnVubmFibGUoKSB7CisgICAgICBAT3ZlcnJpZGUKKyAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKKyAgICAgICAgUHNpVXRpbC5zZXRNb2RpZmllclByb3BlcnR5KG1ldGhvZCwgUHNpTW9kaWZpZXIuREVGQVVMVCwgdHJ1ZSk7CisgICAgICB9CisgICAgfSk7CisgICAgYXNzZXJ0RXF1YWxzKCJkZWZhdWx0IHZvaWQgbSgpIHtcbiAgICB9IiwgbWV0aG9kLmdldFRleHQoKSk7CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9wc2kvaW1wbC9zb3VyY2UvdHJlZS9qYXZhL1JlZmVyZW5jZVBhcmFtZXRlckxpc3RUZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovcHNpL2ltcGwvc291cmNlL3RyZWUvamF2YS9SZWZlcmVuY2VQYXJhbWV0ZXJMaXN0VGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU2ODMwODkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovcHNpL2ltcGwvc291cmNlL3RyZWUvamF2YS9SZWZlcmVuY2VQYXJhbWV0ZXJMaXN0VGVzdC5qYXZhCkBAIC0wLDAgKzEsNjkgQEAKK3BhY2thZ2UgY29tLmludGVsbGlqLnBzaS5pbXBsLnNvdXJjZS50cmVlLmphdmE7CisKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS5hcHBsaWNhdGlvbi5BcHBsaWNhdGlvbk1hbmFnZXI7CitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkuZGlhZ25vc3RpYy5Mb2dnZXI7CitpbXBvcnQgY29tLmludGVsbGlqLnBzaS4qOworaW1wb3J0IGNvbS5pbnRlbGxpai5wc2kuaW1wbC5zb3VyY2UuUHNpQ2xhc3NSZWZlcmVuY2VUeXBlOworaW1wb3J0IGNvbS5pbnRlbGxpai50ZXN0RnJhbWV3b3JrLlBzaVRlc3RDYXNlOworaW1wb3J0IGNvbS5pbnRlbGxpai51dGlsLkluY29ycmVjdE9wZXJhdGlvbkV4Y2VwdGlvbjsKKworLyoqCisgKiAgQGF1dGhvciBkc2wKKyAqLworcHVibGljIGNsYXNzIFJlZmVyZW5jZVBhcmFtZXRlckxpc3RUZXN0IGV4dGVuZHMgUHNpVGVzdENhc2UgeworICBwcml2YXRlIHN0YXRpYyBmaW5hbCBMb2dnZXIgTE9HID0gTG9nZ2VyLmdldEluc3RhbmNlKCIjY29tLmludGVsbGlqLnBzaS5pbXBsLnNvdXJjZS50cmVlLmphdmEuUmVmZXJlbmNlUGFyYW1ldGVyTGlzdFRlc3QiKTsKKyAgcHVibGljIHZvaWQgdGVzdFBhcmFtZXRlckxpc3RJbkV4dGVuZHMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBmaW5hbCBQc2lNYW5hZ2VyIG1hbmFnZXIgPSBQc2lNYW5hZ2VyLmdldEluc3RhbmNlKG15UHJvamVjdCk7CisgICAgZmluYWwgUHNpRWxlbWVudEZhY3RvcnkgZmFjdG9yeSA9IEphdmFQc2lGYWNhZGUuZ2V0SW5zdGFuY2UobWFuYWdlci5nZXRQcm9qZWN0KCkpLmdldEVsZW1lbnRGYWN0b3J5KCk7CisgICAgZmluYWwgUHNpQ2xhc3MgY2xhc3NGcm9tVGV4dCA9IGZhY3RvcnkuY3JlYXRlQ2xhc3NGcm9tVGV4dCgiY2xhc3MgWCBleHRlbmRzIFk8WiwgVz4ge30iLCBudWxsKTsKKyAgICBmaW5hbCBQc2lDbGFzcyBjbGFzc1ggPSBjbGFzc0Zyb21UZXh0LmdldElubmVyQ2xhc3NlcygpWzBdOworICAgIGZpbmFsIFBzaUphdmFDb2RlUmVmZXJlbmNlRWxlbWVudFtdIGV4dGVuZHNPZlggPSBjbGFzc1guZ2V0RXh0ZW5kc0xpc3QoKS5nZXRSZWZlcmVuY2VFbGVtZW50cygpOworICAgIGFzc2VydEVxdWFscygxLCBleHRlbmRzT2ZYLmxlbmd0aCk7CisgICAgZmluYWwgUHNpSmF2YUNvZGVSZWZlcmVuY2VFbGVtZW50IHJlZiA9IGV4dGVuZHNPZlhbMF07CisgICAgYXNzZXJ0RXF1YWxzKCJZPFosVz4iLCByZWYuZ2V0Q2Fub25pY2FsVGV4dCgpKTsKKyAgICBhc3NlcnRFcXVhbHMoIlkiLCByZWYuZ2V0UmVmZXJlbmNlTmFtZSgpKTsKKyAgICBmaW5hbCBQc2lUeXBlRWxlbWVudFtdIHJlZlBhcmFtcyA9IHJlZi5nZXRQYXJhbWV0ZXJMaXN0KCkuZ2V0VHlwZVBhcmFtZXRlckVsZW1lbnRzKCk7CisgICAgYXNzZXJ0RXF1YWxzKDIsIHJlZlBhcmFtcy5sZW5ndGgpOworICAgIGFzc2VydEVxdWFscygiWiIsIHJlZlBhcmFtc1swXS5nZXRUeXBlKCkuZ2V0Q2Fub25pY2FsVGV4dCgpKTsKKyAgICBhc3NlcnRFcXVhbHMoIlciLCByZWZQYXJhbXNbMV0uZ2V0VHlwZSgpLmdldENhbm9uaWNhbFRleHQoKSk7CisgICAgZmluYWwgUHNpVHlwZSByZWZUeXBlID0gZmFjdG9yeS5jcmVhdGVUeXBlKHJlZik7CisgICAgYXNzZXJ0RXF1YWxzKCJZPFosVz4iLCByZWZUeXBlLmdldENhbm9uaWNhbFRleHQoKSk7CisgICAgZmluYWwgUHNpSmF2YUNvZGVSZWZlcmVuY2VFbGVtZW50IHJlZmVyZW5jZSA9ICgoUHNpQ2xhc3NSZWZlcmVuY2VUeXBlKSByZWZUeXBlKS5nZXRSZWZlcmVuY2UoKTsKKyAgICBhc3NlcnRFcXVhbHMoIlk8WixXPiIsIHJlZmVyZW5jZS5nZXRDYW5vbmljYWxUZXh0KCkpOworICB9CisgIHB1YmxpYyB2b2lkIHRlc3RSZXNvbHZhYmxlUGFyYW1ldGVyTGlzdEluRXh0ZW5kcygpIHRocm93cyBFeGNlcHRpb24geworICAgIGZpbmFsIFBzaU1hbmFnZXIgbWFuYWdlciA9IFBzaU1hbmFnZXIuZ2V0SW5zdGFuY2UobXlQcm9qZWN0KTsKKyAgICBmaW5hbCBQc2lFbGVtZW50RmFjdG9yeSBmYWN0b3J5ID0gSmF2YVBzaUZhY2FkZS5nZXRJbnN0YW5jZShtYW5hZ2VyLmdldFByb2plY3QoKSkuZ2V0RWxlbWVudEZhY3RvcnkoKTsKKyAgICBmaW5hbCBQc2lDbGFzcyBjbGFzc0Zyb21UZXh0ID0gZmFjdG9yeS5jcmVhdGVDbGFzc0Zyb21UZXh0KAorICAgICAgICAgICAgImNsYXNzIFoge30gY2xhc3MgV3t9IiArCisgICAgICAgICAgICAiY2xhc3MgWTxBLCBCPiB7fSAiICsKKyAgICAgICAgICAgICJjbGFzcyBYIGV4dGVuZHMgWTxaLCBXPiB7fSIsCisgICAgICAgICAgICBudWxsKTsKKworCisgICAgQXBwbGljYXRpb25NYW5hZ2VyLmdldEFwcGxpY2F0aW9uKCkucnVuV3JpdGVBY3Rpb24obmV3IFJ1bm5hYmxlKCkgeworICAgICAgQE92ZXJyaWRlCisgICAgICBwdWJsaWMgdm9pZCBydW4oKSB7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgY2xhc3NGcm9tVGV4dC5zZXROYW1lKCJRIik7CisgICAgICAgIH0gY2F0Y2ggKEluY29ycmVjdE9wZXJhdGlvbkV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgTE9HLmVycm9yKGUpOworICAgICAgICB9CisgICAgICB9CisgICAgfSk7CisgICAgZmluYWwgUHNpQ2xhc3MgY2xhc3NYID0gY2xhc3NGcm9tVGV4dC5nZXRJbm5lckNsYXNzZXMoKVszXTsKKyAgICBmaW5hbCBQc2lKYXZhQ29kZVJlZmVyZW5jZUVsZW1lbnRbXSBleHRlbmRzT2ZYID0gY2xhc3NYLmdldEV4dGVuZHNMaXN0KCkuZ2V0UmVmZXJlbmNlRWxlbWVudHMoKTsKKyAgICBhc3NlcnRFcXVhbHMoMSwgZXh0ZW5kc09mWC5sZW5ndGgpOworICAgIGZpbmFsIFBzaUphdmFDb2RlUmVmZXJlbmNlRWxlbWVudCByZWYgPSBleHRlbmRzT2ZYWzBdOworICAgIGFzc2VydEVxdWFscygiUS5ZPFEuWixRLlc+IiwgcmVmLmdldENhbm9uaWNhbFRleHQoKSk7CisgICAgYXNzZXJ0RXF1YWxzKCJZIiwgcmVmLmdldFJlZmVyZW5jZU5hbWUoKSk7CisgICAgZmluYWwgUHNpVHlwZUVsZW1lbnRbXSByZWZQYXJhbXMgPSByZWYuZ2V0UGFyYW1ldGVyTGlzdCgpLmdldFR5cGVQYXJhbWV0ZXJFbGVtZW50cygpOworICAgIGFzc2VydEVxdWFscygyLCByZWZQYXJhbXMubGVuZ3RoKTsKKyAgICBhc3NlcnRFcXVhbHMoIlEuWiIsIHJlZlBhcmFtc1swXS5nZXRUeXBlKCkuZ2V0Q2Fub25pY2FsVGV4dCgpKTsKKyAgICBhc3NlcnRFcXVhbHMoIlEuVyIsIHJlZlBhcmFtc1sxXS5nZXRUeXBlKCkuZ2V0Q2Fub25pY2FsVGV4dCgpKTsKKyAgICBmaW5hbCBQc2lUeXBlIHJlZlR5cGUgPSBmYWN0b3J5LmNyZWF0ZVR5cGUocmVmKTsKKyAgICBhc3NlcnRFcXVhbHMoIlEuWTxRLlosUS5XPiIsIHJlZlR5cGUuZ2V0Q2Fub25pY2FsVGV4dCgpKTsKKyAgICBmaW5hbCBQc2lKYXZhQ29kZVJlZmVyZW5jZUVsZW1lbnQgcmVmZXJlbmNlID0gKChQc2lDbGFzc1JlZmVyZW5jZVR5cGUpIHJlZlR5cGUpLmdldFJlZmVyZW5jZSgpOworICAgIGFzc2VydEVxdWFscygiUS5ZPFEuWixRLlc+IiwgcmVmZXJlbmNlLmdldENhbm9uaWNhbFRleHQoKSk7CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9wc2kvaW1wbC9zb3VyY2UvdHJlZS9qYXZhL1Nob3J0ZW5DbGFzc1JlZmVyZW5jZXNUZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovcHNpL2ltcGwvc291cmNlL3RyZWUvamF2YS9TaG9ydGVuQ2xhc3NSZWZlcmVuY2VzVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNlZGZmOWYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovcHNpL2ltcGwvc291cmNlL3RyZWUvamF2YS9TaG9ydGVuQ2xhc3NSZWZlcmVuY2VzVGVzdC5qYXZhCkBAIC0wLDAgKzEsNzUgQEAKK3BhY2thZ2UgY29tLmludGVsbGlqLnBzaS5pbXBsLnNvdXJjZS50cmVlLmphdmE7CisKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS5hcHBsaWNhdGlvbi5BcHBsaWNhdGlvbk1hbmFnZXI7CitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkuYXBwbGljYXRpb24uZXguUGF0aE1hbmFnZXJFeDsKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS5jb21tYW5kLkNvbW1hbmRQcm9jZXNzb3I7CitpbXBvcnQgY29tLmludGVsbGlqLnBzaS4qOworaW1wb3J0IGNvbS5pbnRlbGxpai5wc2kuY29kZVN0eWxlLkphdmFDb2RlU3R5bGVNYW5hZ2VyOworaW1wb3J0IGNvbS5pbnRlbGxpai5wc2kuaW1wbC5zb3VyY2UuUG9zdHByb2Nlc3NSZWZvcm1hdHRpbmdBc3BlY3Q7CitpbXBvcnQgY29tLmludGVsbGlqLnBzaS5zZWFyY2guR2xvYmFsU2VhcmNoU2NvcGU7CitpbXBvcnQgY29tLmludGVsbGlqLnRlc3RGcmFtZXdvcmsuUHNpVGVzdENhc2U7CisKKy8qKgorICogQGF1dGhvciBkc2wKKyAqLworcHVibGljIGNsYXNzIFNob3J0ZW5DbGFzc1JlZmVyZW5jZXNUZXN0IGV4dGVuZHMgUHNpVGVzdENhc2UgeworICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQkFTRV9QQVRIID0gUGF0aE1hbmFnZXJFeC5nZXRUZXN0RGF0YVBhdGgoKSArICIvcHNpL3Nob3J0ZW5DbGFzc1JlZnMiOworCisgIEBPdmVycmlkZQorICBwcm90ZWN0ZWQgU3RyaW5nIGdldFRlc3REYXRhUGF0aCgpIHsKKyAgICByZXR1cm4gQkFTRV9QQVRIOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFNDUjIyMzY4KCkgdGhyb3dzIEV4Y2VwdGlvbiB7IGRvVGVzdCgpOyB9CisKKyAgcHVibGljIHZvaWQgdGVzdFNDUjM3MjU0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7IGRvVGVzdCgpOyB9CisKKyAgcHVibGljIHZvaWQgdGVzdFNDUjIyMzY4XzEoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBmaW5hbCBQc2lFbGVtZW50RmFjdG9yeSBmYWN0b3J5ID0gbXlKYXZhRmFjYWRlLmdldEVsZW1lbnRGYWN0b3J5KCk7CisgICAgZmluYWwgUHNpQ2xhc3MgYUNsYXNzID0gZmFjdG9yeS5jcmVhdGVDbGFzcygiWCIpOworICAgIGZpbmFsIFBzaU1ldGhvZCBtZXRob2RGcm9tVGV4dCA9IGZhY3RvcnkuY3JlYXRlTWV0aG9kRnJvbVRleHQoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInZvaWQgbWV0aG9kKCkge1xuIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgICBJbnRlbGxpSklERUFSdWxleno8XG4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAifSIsIG51bGwpOworICAgIGZpbmFsIFBzaU1ldGhvZCBtZXRob2QgPSAoUHNpTWV0aG9kKWFDbGFzcy5hZGQobWV0aG9kRnJvbVRleHQpOworICAgIGZpbmFsIFBzaURlY2xhcmF0aW9uU3RhdGVtZW50IGRlY2xhcmF0aW9uU3RhdGVtZW50ID0gKFBzaURlY2xhcmF0aW9uU3RhdGVtZW50KSBtZXRob2QuZ2V0Qm9keSgpLmdldFN0YXRlbWVudHMoKVswXTsKKyAgICBmaW5hbCBQc2lKYXZhQ29kZVJlZmVyZW5jZUVsZW1lbnQgcmVmZXJlbmNlRWxlbWVudCA9IChQc2lKYXZhQ29kZVJlZmVyZW5jZUVsZW1lbnQpIGRlY2xhcmF0aW9uU3RhdGVtZW50LmdldEZpcnN0Q2hpbGQoKS5nZXRGaXJzdENoaWxkKCk7CisgICAgZmluYWwgUHNpQ2xhc3MgamF2YVV0aWxMaXN0Q2xhc3MgPSBteUphdmFGYWNhZGUuZmluZENsYXNzKENvbW1vbkNsYXNzTmFtZXMuSkFWQV9VVElMX0xJU1QsIEdsb2JhbFNlYXJjaFNjb3BlLmFsbFNjb3BlKG15UHNpTWFuYWdlci5nZXRQcm9qZWN0KCkpKTsKKyAgICBhc3NlcnROb3ROdWxsKGphdmFVdGlsTGlzdENsYXNzKTsKKyAgICBmaW5hbCBQc2lFbGVtZW50IHJlc3VsdGluZ0VsZW1lbnQgPSByZWZlcmVuY2VFbGVtZW50LmJpbmRUb0VsZW1lbnQoamF2YVV0aWxMaXN0Q2xhc3MpOworICAgIGFzc2VydEVxdWFscygiTGlzdDwiLCByZXN1bHRpbmdFbGVtZW50LmdldFRleHQoKSk7CisgICAgYXNzZXJ0RXF1YWxzKCJ2b2lkIG1ldGhvZCgpIHtcbiIgKworICAgICAgICAgICAgICAgICAiICAgIExpc3Q8XG4iICsKKyAgICAgICAgICAgICAgICAgIn0iLCBtZXRob2QuZ2V0VGV4dCgpKTsKKworICB9CisKKyAgcHJpdmF0ZSB2b2lkIGRvVGVzdCgpIHRocm93cyBFeGNlcHRpb24geworICAgIFN0cmluZyBmaWxlTmFtZSA9IGdldFRlc3ROYW1lKGZhbHNlKSArICIuamF2YSI7CisgICAgU3RyaW5nIHRleHQgPSBsb2FkRmlsZShmaWxlTmFtZSk7CisgICAgZmluYWwgUHNpRmlsZSBmaWxlID0gY3JlYXRlRmlsZShmaWxlTmFtZSwgdGV4dCk7CisgICAgQ29tbWFuZFByb2Nlc3Nvci5nZXRJbnN0YW5jZSgpLmV4ZWN1dGVDb21tYW5kKAorICAgICAgZ2V0UHJvamVjdCgpLCBuZXcgUnVubmFibGUoKSB7CisgICAgICBAT3ZlcnJpZGUKKyAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKKyAgICAgICAgQXBwbGljYXRpb25NYW5hZ2VyLmdldEFwcGxpY2F0aW9uKCkucnVuV3JpdGVBY3Rpb24obmV3IFJ1bm5hYmxlKCkgeworICAgICAgICAgIEBPdmVycmlkZQorICAgICAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKKyAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgIEphdmFDb2RlU3R5bGVNYW5hZ2VyLmdldEluc3RhbmNlKG15UHJvamVjdCkuc2hvcnRlbkNsYXNzUmVmZXJlbmNlcyhmaWxlKTsKKyAgICAgICAgICAgICAgU3RyaW5nIHRleHRBZnRlciA9IGxvYWRGaWxlKGdldFRlc3ROYW1lKGZhbHNlKSArICJfYWZ0ZXIuamF2YSIpOworICAgICAgICAgICAgICBQb3N0cHJvY2Vzc1JlZm9ybWF0dGluZ0FzcGVjdC5nZXRJbnN0YW5jZShnZXRQcm9qZWN0KCkpLmRvUG9zdHBvbmVkRm9ybWF0dGluZygpOworICAgICAgICAgICAgICBQc2lEb2N1bWVudE1hbmFnZXIuZ2V0SW5zdGFuY2UoZ2V0UHJvamVjdCgpKS5jb21taXRBbGxEb2N1bWVudHMoKTsKKyAgICAgICAgICAgICAgU3RyaW5nIGZpbGVUZXh0ID0gZmlsZS5nZXRUZXh0KCk7CisgICAgICAgICAgICAgIGFzc2VydEVxdWFscyh0ZXh0QWZ0ZXIsIGZpbGVUZXh0KTsKKworICAgICAgICAgICAgfQorICAgICAgICAgICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICAgIExPRy5lcnJvcihlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisgICAgICAgIH0pOworICAgICAgfQorICAgIH0sICIiLCAiIik7CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9wc2kvcmVzb2x2ZS9GaWxlUGF0aFJlc29sdmVUZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovcHNpL3Jlc29sdmUvRmlsZVBhdGhSZXNvbHZlVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg4MDVhZTkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovcHNpL3Jlc29sdmUvRmlsZVBhdGhSZXNvbHZlVGVzdC5qYXZhCkBAIC0wLDAgKzEsNDMgQEAKK3BhY2thZ2UgY29tLmludGVsbGlqLnBzaS5yZXNvbHZlOworCitpbXBvcnQgY29tLmludGVsbGlqLmNvZGVJbnNpZ2h0LkNvZGVJbnNpZ2h0VGVzdENhc2U7CitpbXBvcnQgY29tLmludGVsbGlqLmNvZGVJbnNpZ2h0Lm5hdmlnYXRpb24uYWN0aW9ucy5Hb3RvRGVjbGFyYXRpb25BY3Rpb247CitpbXBvcnQgY29tLmludGVsbGlqLnBzaS5Qc2lFbGVtZW50OworaW1wb3J0IGNvbS5pbnRlbGxpai5wc2kuUHNpRmlsZTsKK2ltcG9ydCBjb20uaW50ZWxsaWoucHNpLlBzaUZpbGVTeXN0ZW1JdGVtOworaW1wb3J0IGNvbS5pbnRlbGxpai5wc2kuaW1wbC5pbmNsdWRlLkZpbGVJbmNsdWRlSW5mbzsKK2ltcG9ydCBjb20uaW50ZWxsaWoucHNpLmltcGwuaW5jbHVkZS5GaWxlSW5jbHVkZU1hbmFnZXI7CisKKy8qKgorICogQGF1dGhvciBjZHIKKyAqLworcHVibGljIGNsYXNzIEZpbGVQYXRoUmVzb2x2ZVRlc3QgZXh0ZW5kcyBDb2RlSW5zaWdodFRlc3RDYXNleworICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQkFTRV9QQVRIID0gIi9wc2kvcmVzb2x2ZS9maWxlUGF0aC8iOworCisgIHB1YmxpYyB2b2lkIHRlc3RDMSgpIHRocm93cyBFeGNlcHRpb257CisgICAgY29uZmlndXJlKCJDLmphdmEiKTsKKyAgICBjaGVja05hdmlnYXRlc1RvKCJNeUNsYXNzLmphdmEiKTsKKyAgfQorICBwdWJsaWMgdm9pZCB0ZXN0QzIoKSB0aHJvd3MgRXhjZXB0aW9ueworICAgIGNvbmZpZ3VyZSgiQzIuamF2YSIpOworICAgIGNoZWNrTmF2aWdhdGVzVG8oIk15RmlsZS50eHQiKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RSZXNvbHZlRmlsZVJlZmVyZW5jZSgpIHRocm93cyBFeGNlcHRpb24geworICAgIGNvbmZpZ3VyZUJ5RmlsZShCQVNFX1BBVEggKyAiQy5qYXZhIiwgQkFTRV9QQVRIKTsKKyAgICBGaWxlSW5jbHVkZU1hbmFnZXIgZmlsZUluY2x1ZGVNYW5hZ2VyID0gRmlsZUluY2x1ZGVNYW5hZ2VyLmdldE1hbmFnZXIoZ2V0UHJvamVjdCgpKTsKKyAgICBQc2lGaWxlU3lzdGVtSXRlbSBpdGVtID0gZmlsZUluY2x1ZGVNYW5hZ2VyLnJlc29sdmVGaWxlSW5jbHVkZShuZXcgRmlsZUluY2x1ZGVJbmZvKCJ4L015RmlsZS50eHQiKSwgZ2V0RmlsZSgpKTsKKyAgICBhc3NlcnROb3ROdWxsKGl0ZW0pOworICAgIGFzc2VydEVxdWFscygiTXlGaWxlLnR4dCIsIGl0ZW0uZ2V0TmFtZSgpKTsKKyAgfQorCisgIHByaXZhdGUgdm9pZCBjaGVja05hdmlnYXRlc1RvKFN0cmluZyBleHBlY3RlZCkgeworICAgIGZpbmFsIGludCBvZmZzZXQgPSBteUVkaXRvci5nZXRDYXJldE1vZGVsKCkuZ2V0T2Zmc2V0KCk7CisgICAgZmluYWwgUHNpRWxlbWVudCB0YXJnZXRFbGVtZW50ID0gR290b0RlY2xhcmF0aW9uQWN0aW9uLmZpbmRUYXJnZXRFbGVtZW50KG15UHJvamVjdCwgbXlFZGl0b3IsIG9mZnNldCk7CisgICAgYXNzZXJ0RXF1YWxzKGV4cGVjdGVkLCAoKFBzaUZpbGUpdGFyZ2V0RWxlbWVudCkuZ2V0TmFtZSgpKTsKKyAgfQorCisgIHByaXZhdGUgdm9pZCBjb25maWd1cmUoZmluYWwgU3RyaW5nIGZpbGVOYW1lKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBjb25maWd1cmVCeUZpbGUoQkFTRV9QQVRIICsgZmlsZU5hbWUsIEJBU0VfUEFUSCk7CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9wc2kvcmVzb2x2ZS9SZXNvbHZlMTVUZXN0Q2FzZS5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL3BzaS9yZXNvbHZlL1Jlc29sdmUxNVRlc3RDYXNlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDFkNDNkOAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9wc2kvcmVzb2x2ZS9SZXNvbHZlMTVUZXN0Q2FzZS5qYXZhCkBAIC0wLDAgKzEsMzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSmV0QnJhaW5zIHMuci5vLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICovCitwYWNrYWdlIGNvbS5pbnRlbGxpai5wc2kucmVzb2x2ZTsKKworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLnByb2plY3RSb290cy5KYXZhU2RrVmVyc2lvbjsKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS5wcm9qZWN0Um9vdHMuSmF2YVZlcnNpb25TZXJ2aWNlOworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLnByb2plY3RSb290cy5KYXZhVmVyc2lvblNlcnZpY2VJbXBsOworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLnJvb3RzLkxhbmd1YWdlTGV2ZWxQcm9qZWN0RXh0ZW5zaW9uOworaW1wb3J0IGNvbS5pbnRlbGxpai5wb20uamF2YS5MYW5ndWFnZUxldmVsOworaW1wb3J0IGNvbS5pbnRlbGxpai50ZXN0RnJhbWV3b3JrLlJlc29sdmVUZXN0Q2FzZTsKKworLyoqCisgKiBAYXV0aG9yIHZlbgorICovCitwdWJsaWMgYWJzdHJhY3QgY2xhc3MgUmVzb2x2ZTE1VGVzdENhc2UgZXh0ZW5kcyBSZXNvbHZlVGVzdENhc2UgeworICBwcml2YXRlIExhbmd1YWdlTGV2ZWwgbXlPbGRMYW5ndWFnZUxldmVsOworCisgIEBPdmVycmlkZQorICBwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24geworICAgIHN1cGVyLnNldFVwKCk7CisgICAgbXlPbGRMYW5ndWFnZUxldmVsID0gTGFuZ3VhZ2VMZXZlbFByb2plY3RFeHRlbnNpb24uZ2V0SW5zdGFuY2UobXlKYXZhRmFjYWRlLmdldFByb2plY3QoKSkuZ2V0TGFuZ3VhZ2VMZXZlbCgpOworICAgIExhbmd1YWdlTGV2ZWxQcm9qZWN0RXh0ZW5zaW9uLmdldEluc3RhbmNlKG15SmF2YUZhY2FkZS5nZXRQcm9qZWN0KCkpLnNldExhbmd1YWdlTGV2ZWwoTGFuZ3VhZ2VMZXZlbC5KREtfMV81KTsKKyAgICAoKEphdmFWZXJzaW9uU2VydmljZUltcGwpSmF2YVZlcnNpb25TZXJ2aWNlLmdldEluc3RhbmNlKCkpLnNldFRlc3RWZXJzaW9uKEphdmFTZGtWZXJzaW9uLkpES18xXzUsIGdldFRlc3RSb290RGlzcG9zYWJsZSgpKTsKKyAgfQorCisgIEBPdmVycmlkZQorICBwcm90ZWN0ZWQgdm9pZCB0ZWFyRG93bigpIHRocm93cyBFeGNlcHRpb24geworICAgIExhbmd1YWdlTGV2ZWxQcm9qZWN0RXh0ZW5zaW9uLmdldEluc3RhbmNlKG15SmF2YUZhY2FkZS5nZXRQcm9qZWN0KCkpLnNldExhbmd1YWdlTGV2ZWwobXlPbGRMYW5ndWFnZUxldmVsKTsKKyAgICBzdXBlci50ZWFyRG93bigpOworICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovcHNpL3Jlc29sdmUvUmVzb2x2ZUNsYXNzVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL3BzaS9yZXNvbHZlL1Jlc29sdmVDbGFzc1Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YzkyNWZlCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL3BzaS9yZXNvbHZlL1Jlc29sdmVDbGFzc1Rlc3QuamF2YQpAQCAtMCwwICsxLDI1MSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDAwLTIwMTIgSmV0QnJhaW5zIHMuci5vLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KK3BhY2thZ2UgY29tLmludGVsbGlqLnBzaS5yZXNvbHZlOworCitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkuYXBwbGljYXRpb24uQXBwbGljYXRpb25NYW5hZ2VyOworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLm1vZHVsZS5Nb2RpZmlhYmxlTW9kdWxlTW9kZWw7CitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkubW9kdWxlLk1vZHVsZTsKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS5tb2R1bGUuTW9kdWxlTWFuYWdlcjsKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS5tb2R1bGUuU3RkTW9kdWxlVHlwZXM7CitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkucm9vdHMuTW9kdWxlUm9vdE1vZGlmaWNhdGlvblV0aWw7CitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkudmZzLkxvY2FsRmlsZVN5c3RlbTsKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS52ZnMuVmlydHVhbEZpbGU7CitpbXBvcnQgY29tLmludGVsbGlqLnBhY2thZ2VEZXBlbmRlbmNpZXMuRGVwZW5kZW5jaWVzQnVpbGRlcjsKK2ltcG9ydCBjb20uaW50ZWxsaWoucHNpLio7CitpbXBvcnQgY29tLmludGVsbGlqLnRlc3RGcmFtZXdvcmsuUGxhdGZvcm1UZXN0VXRpbDsKK2ltcG9ydCBjb20uaW50ZWxsaWoudGVzdEZyYW1ld29yay5Qc2lUZXN0VXRpbDsKK2ltcG9ydCBjb20uaW50ZWxsaWoudGVzdEZyYW1ld29yay5SZXNvbHZlVGVzdENhc2U7CisKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbnM7CisKK3B1YmxpYyBjbGFzcyBSZXNvbHZlQ2xhc3NUZXN0IGV4dGVuZHMgUmVzb2x2ZVRlc3RDYXNlIHsKKyAgcHVibGljIHZvaWQgdGVzdEZRTmFtZSgpIHRocm93cyBFeGNlcHRpb24geworICAgIFBzaVJlZmVyZW5jZSByZWYgPSBjb25maWd1cmUoKTsKKyAgICBQc2lFbGVtZW50IHRhcmdldCA9ICgoUHNpSmF2YVJlZmVyZW5jZSlyZWYpLmFkdmFuY2VkUmVzb2x2ZSh0cnVlKS5nZXRFbGVtZW50KCk7CisgICAgYXNzZXJ0VHJ1ZSh0YXJnZXQgaW5zdGFuY2VvZiBQc2lDbGFzcyk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0VmFySW5OZXcoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBQc2lSZWZlcmVuY2UgcmVmID0gY29uZmlndXJlKCk7CisgICAgUHNpRWxlbWVudCB0YXJnZXQgPSAoKFBzaUphdmFSZWZlcmVuY2UpcmVmKS5hZHZhbmNlZFJlc29sdmUodHJ1ZSkuZ2V0RWxlbWVudCgpOworICAgIGFzc2VydFRydWUodGFyZ2V0IGluc3RhbmNlb2YgUHNpQ2xhc3MpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFZhckluTmV3MSgpIHRocm93cyBFeGNlcHRpb24geworICAgIFBzaVJlZmVyZW5jZSByZWYgPSBjb25maWd1cmUoKTsKKyAgICBQc2lFbGVtZW50IHRhcmdldCA9ICgoUHNpSmF2YVJlZmVyZW5jZSlyZWYpLmFkdmFuY2VkUmVzb2x2ZSh0cnVlKS5nZXRFbGVtZW50KCk7CisgICAgYXNzZXJ0VHJ1ZSh0YXJnZXQgaW5zdGFuY2VvZiBQc2lDbGFzcyk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0UHJpdmF0ZUluRXh0ZW5kcygpIHRocm93cyBFeGNlcHRpb24geworICAgIFBzaVJlZmVyZW5jZSByZWYgPSBjb25maWd1cmUoKTsKKyAgICBmaW5hbCBKYXZhUmVzb2x2ZVJlc3VsdCByZXN1bHQgPSAoKFBzaUphdmFSZWZlcmVuY2UpcmVmKS5hZHZhbmNlZFJlc29sdmUodHJ1ZSk7CisgICAgUHNpRWxlbWVudCB0YXJnZXQgPSByZXN1bHQuZ2V0RWxlbWVudCgpOworICAgIGFzc2VydFRydWUodGFyZ2V0IGluc3RhbmNlb2YgUHNpQ2xhc3MpOworICAgIGFzc2VydEZhbHNlKHJlc3VsdC5pc0FjY2Vzc2libGUoKSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0UU5ldzEoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBQc2lSZWZlcmVuY2UgcmVmID0gY29uZmlndXJlKCk7CisgICAgUHNpRWxlbWVudCB0YXJnZXQgPSAoKFBzaUphdmFSZWZlcmVuY2UpcmVmKS5hZHZhbmNlZFJlc29sdmUodHJ1ZSkuZ2V0RWxlbWVudCgpOworICAgIGFzc2VydFRydWUodGFyZ2V0IGluc3RhbmNlb2YgUHNpQ2xhc3MpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdElubmVyUHJpdmF0ZU1lbWJlcjEoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBQc2lSZWZlcmVuY2UgcmVmID0gY29uZmlndXJlKCk7CisgICAgZmluYWwgSmF2YVJlc29sdmVSZXN1bHQgcmVzdWx0ID0gKChQc2lKYXZhUmVmZXJlbmNlKXJlZikuYWR2YW5jZWRSZXNvbHZlKHRydWUpOworICAgIFBzaUVsZW1lbnQgdGFyZ2V0ID0gcmVzdWx0LmdldEVsZW1lbnQoKTsKKyAgICBhc3NlcnRUcnVlKHRhcmdldCBpbnN0YW5jZW9mIFBzaUNsYXNzKTsKKyAgICBhc3NlcnRUcnVlKHJlc3VsdC5pc1ZhbGlkUmVzdWx0KCkpOworICB9CisKKworICBwdWJsaWMgdm9pZCB0ZXN0UU5ldzIoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBQc2lKYXZhQ29kZVJlZmVyZW5jZUVsZW1lbnQgcmVmID0gKFBzaUphdmFDb2RlUmVmZXJlbmNlRWxlbWVudCljb25maWd1cmUoKTsKKyAgICBQc2lFbGVtZW50IHRhcmdldCA9IHJlZi5hZHZhbmNlZFJlc29sdmUodHJ1ZSkuZ2V0RWxlbWVudCgpOworICAgIGFzc2VydFRydWUodGFyZ2V0IGluc3RhbmNlb2YgUHNpQ2xhc3MpOworCisgICAgUHNpRWxlbWVudCBwYXJlbnQgPSByZWYuZ2V0UGFyZW50KCk7CisgICAgYXNzZXJ0VHJ1ZShwYXJlbnQgaW5zdGFuY2VvZiBQc2lBbm9ueW1vdXNDbGFzcyk7CisgICAgKChQc2lBbm9ueW1vdXNDbGFzcylwYXJlbnQpLmdldEJhc2VDbGFzc1R5cGUoKS5yZXNvbHZlKCk7CisKKyAgICBhc3NlcnRFcXVhbHModGFyZ2V0LCAoKFBzaUFub255bW91c0NsYXNzKXBhcmVudCkuZ2V0QmFzZUNsYXNzVHlwZSgpLnJlc29sdmUoKSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0Q2xhc3NFeHRlbmRzSXRzSW5uZXIxKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgUHNpUmVmZXJlbmNlIHJlZiA9IGNvbmZpZ3VyZSgpOworICAgIFBzaUVsZW1lbnQgdGFyZ2V0ID0gKChQc2lKYXZhUmVmZXJlbmNlKXJlZikuYWR2YW5jZWRSZXNvbHZlKHRydWUpLmdldEVsZW1lbnQoKTsKKyAgICBhc3NlcnRUcnVlKHRhcmdldCBpbnN0YW5jZW9mIFBzaUNsYXNzKTsKKyAgICBhc3NlcnRFcXVhbHMoIkIuRm9vIiwgKChQc2lDbGFzcyl0YXJnZXQpLmdldFF1YWxpZmllZE5hbWUoKSk7CisKKyAgICBQc2lSZWZlcmVuY2UgcmVmQ29weSA9IHJlZi5nZXRFbGVtZW50KCkuY29weSgpLmdldFJlZmVyZW5jZSgpOworICAgIGFzc2VydCByZWZDb3B5ICE9IG51bGw7CisgICAgUHNpRWxlbWVudCB0YXJnZXQxID0gKChQc2lKYXZhUmVmZXJlbmNlKXJlZkNvcHkpLmFkdmFuY2VkUmVzb2x2ZSh0cnVlKS5nZXRFbGVtZW50KCk7CisgICAgYXNzZXJ0VHJ1ZSh0YXJnZXQxIGluc3RhbmNlb2YgUHNpQ2xhc3MpOworICAgIC8vYXNzZXJ0TnVsbCh0YXJnZXQxLmdldENvbnRhaW5pbmdGaWxlKCkuZ2V0VmlydHVhbEZpbGUoKSk7CisgICAgYXNzZXJ0RXF1YWxzKCJCLkZvbyIsICgoUHNpQ2xhc3MpdGFyZ2V0MSkuZ2V0UXVhbGlmaWVkTmFtZSgpKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RDbGFzc0V4dGVuZHNJdHNJbm5lcjIoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBQc2lSZWZlcmVuY2UgcmVmID0gY29uZmlndXJlKCk7CisgICAgUHNpRWxlbWVudCB0YXJnZXQgPSAoKFBzaUphdmFSZWZlcmVuY2UpcmVmKS5hZHZhbmNlZFJlc29sdmUodHJ1ZSkuZ2V0RWxlbWVudCgpOworICAgIGFzc2VydE51bGwodGFyZ2V0KTsgIC8vW3Zlbl0gdGhpcyBzaG91bGQgbm90IGJlIHJlc29sdmVkCisgICAgLyphc3NlcnRUcnVlKHRhcmdldCBpbnN0YW5jZW9mIFBzaUNsYXNzKTsKKyAgICBhc3NlcnRFcXVhbHMoIlRUVC5CYXIiLCAoKFBzaUNsYXNzKXRhcmdldCkuZ2V0UXVhbGlmaWVkTmFtZSgpKTsqLworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFNDUjQwMzMyKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgUHNpUmVmZXJlbmNlIHJlZiA9IGNvbmZpZ3VyZSgpOworICAgIFBzaUVsZW1lbnQgdGFyZ2V0ID0gKChQc2lKYXZhUmVmZXJlbmNlKXJlZikuYWR2YW5jZWRSZXNvbHZlKHRydWUpLmdldEVsZW1lbnQoKTsKKyAgICBhc3NlcnROdWxsKHRhcmdldCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0SW1wb3J0Q29uZmxpY3QxKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgUHNpUmVmZXJlbmNlIHJlZiA9IGNvbmZpZ3VyZSgpOworICAgIFBzaUVsZW1lbnQgdGFyZ2V0ID0gKChQc2lKYXZhUmVmZXJlbmNlKXJlZikuYWR2YW5jZWRSZXNvbHZlKHRydWUpLmdldEVsZW1lbnQoKTsKKyAgICBhc3NlcnRUcnVlKHRhcmdldCA9PSBudWxsKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RJbXBvcnRDb25mbGljdDIoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBQc2lSZWZlcmVuY2UgcmVmID0gY29uZmlndXJlKCk7CisgICAgUHNpRWxlbWVudCB0YXJnZXQgPSAoKFBzaUphdmFSZWZlcmVuY2UpcmVmKS5hZHZhbmNlZFJlc29sdmUodHJ1ZSkuZ2V0RWxlbWVudCgpOworICAgIGFzc2VydFRydWUodGFyZ2V0IGluc3RhbmNlb2YgUHNpQ2xhc3MpOworICAgIGFzc2VydEVxdWFscygiamF2YS51dGlsLkRhdGUiLCAoKFBzaUNsYXNzKXRhcmdldCkuZ2V0UXVhbGlmaWVkTmFtZSgpKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RMb2NhbHMxKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgUHNpUmVmZXJlbmNlIHJlZiA9IGNvbmZpZ3VyZSgpOworICAgIFBzaUVsZW1lbnQgdGFyZ2V0ID0gKChQc2lKYXZhUmVmZXJlbmNlKXJlZikuYWR2YW5jZWRSZXNvbHZlKHRydWUpLmdldEVsZW1lbnQoKTsKKyAgICBhc3NlcnRUcnVlKHRhcmdldCBpbnN0YW5jZW9mIFBzaUNsYXNzKTsKKyAgICAvLyBsb2NhbCBjbGFzcworICAgIGFzc2VydE51bGwoKChQc2lDbGFzcyl0YXJnZXQpLmdldFF1YWxpZmllZE5hbWUoKSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0TG9jYWxzMigpIHRocm93cyBFeGNlcHRpb24geworICAgIFBzaVJlZmVyZW5jZSByZWYgPSBjb25maWd1cmUoKTsKKyAgICBQc2lFbGVtZW50IHRhcmdldCA9ICgoUHNpSmF2YVJlZmVyZW5jZSlyZWYpLmFkdmFuY2VkUmVzb2x2ZSh0cnVlKS5nZXRFbGVtZW50KCk7CisgICAgYXNzZXJ0VHJ1ZSh0YXJnZXQgaW5zdGFuY2VvZiBQc2lDbGFzcyk7CisgICAgLy8gbG9jYWwgY2xhc3MKKyAgICBhc3NlcnROdWxsKCgoUHNpQ2xhc3MpdGFyZ2V0KS5nZXRRdWFsaWZpZWROYW1lKCkpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFNoYWRvd2luZygpIHRocm93cyBFeGNlcHRpb24geworICAgIFBzaVJlZmVyZW5jZSByZWYgPSBjb25maWd1cmUoKTsKKyAgICBKYXZhUmVzb2x2ZVJlc3VsdCByZXN1bHQgPSAoKFBzaUphdmFSZWZlcmVuY2UpcmVmKS5hZHZhbmNlZFJlc29sdmUodHJ1ZSk7CisgICAgYXNzZXJ0VHJ1ZShyZXN1bHQuZ2V0RWxlbWVudCgpIGluc3RhbmNlb2YgUHNpQ2xhc3MpOworICAgIGFzc2VydFRydWUoIXJlc3VsdC5pc1ZhbGlkUmVzdWx0KCkpOworICAgIGFzc2VydFRydWUoIXJlc3VsdC5pc0FjY2Vzc2libGUoKSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0U3RhdGljSW1wb3J0VnNJbXBsaWNpdCgpIHRocm93cyBFeGNlcHRpb24geworICAgIFBzaVJlZmVyZW5jZSByZWYgPSBjb25maWd1cmUoKTsKKyAgICBKYXZhUmVzb2x2ZVJlc3VsdCByZXN1bHQgPSAoKFBzaUphdmFSZWZlcmVuY2UpcmVmKS5hZHZhbmNlZFJlc29sdmUodHJ1ZSk7CisgICAgZmluYWwgUHNpRWxlbWVudCBlbGVtZW50ID0gcmVzdWx0LmdldEVsZW1lbnQoKTsKKyAgICBhc3NlcnRUcnVlKGVsZW1lbnQgaW5zdGFuY2VvZiBQc2lDbGFzcyk7CisgICAgYXNzZXJ0VHJ1ZSgiT3V0ZXIuRG91YmxlIi5lcXVhbHMoKChQc2lDbGFzcyllbGVtZW50KS5nZXRRdWFsaWZpZWROYW1lKCkpKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RUd29Nb2R1bGVzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgY29uZmlndXJlRGVwZW5kZW5jeSgpOworICAgIFBzaVJlZmVyZW5jZSByZWYgPSBjb25maWd1cmUoKTsKKyAgICBQc2lFbGVtZW50IHRhcmdldCA9ICgoUHNpSmF2YVJlZmVyZW5jZSlyZWYpLmFkdmFuY2VkUmVzb2x2ZSh0cnVlKS5nZXRFbGVtZW50KCk7CisgICAgYXNzZXJ0VHJ1ZSh0YXJnZXQgaW5zdGFuY2VvZiBQc2lDbGFzcyk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0VHdvTW9kdWxlczIoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBjb25maWd1cmVEZXBlbmRlbmN5KCk7CisgICAgUHNpUmVmZXJlbmNlIHJlZiA9IGNvbmZpZ3VyZSgpOworICAgIFBzaUVsZW1lbnQgdGFyZ2V0ID0gKChQc2lKYXZhUmVmZXJlbmNlKXJlZikuYWR2YW5jZWRSZXNvbHZlKHRydWUpLmdldEVsZW1lbnQoKTsKKyAgICBhc3NlcnROdWxsKHRhcmdldCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0TW9kdWxlU291cmNlQXNMaWJyYXJ5U291cmNlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZmluYWwgUHNpUmVmZXJlbmNlIHJlZiA9IGNvbmZpZ3VyZSgpOworICAgIGZpbmFsIFZpcnR1YWxGaWxlIGZpbGUgPSByZWYuZ2V0RWxlbWVudCgpLmdldENvbnRhaW5pbmdGaWxlKCkuZ2V0VmlydHVhbEZpbGUoKTsKKyAgICBhc3NlcnROb3ROdWxsKGZpbGUpOworICAgIGNyZWF0ZUZpbGUobXlNb2R1bGUsIGZpbGUuZ2V0UGFyZW50KCksICJNb2R1bGVTb3VyY2VBc0xpYnJhcnlTb3VyY2VEZXAuamF2YSIsIGxvYWRGaWxlKCJjbGFzcy9Nb2R1bGVTb3VyY2VBc0xpYnJhcnlTb3VyY2VEZXAuamF2YSIpKTsKKyAgICBNb2R1bGVSb290TW9kaWZpY2F0aW9uVXRpbC5hZGRNb2R1bGVMaWJyYXJ5KG15TW9kdWxlLCAibGliIiwgQ29sbGVjdGlvbnMuPFN0cmluZz5lbXB0eUxpc3QoKSwgQ29sbGVjdGlvbnMuc2luZ2xldG9uTGlzdChmaWxlLmdldFBhcmVudCgpLmdldFVybCgpKSk7CisKKyAgICBhc3NlcnRJbnN0YW5jZU9mKHJlZi5yZXNvbHZlKCksIFBzaUNsYXNzLmNsYXNzKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RNb2R1bGVTb3VyY2VBc0xpYnJhcnlDbGFzc2VzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZmluYWwgUHNpUmVmZXJlbmNlIHJlZiA9IGNvbmZpZ3VyZSgpOworICAgIFBzaUZpbGUgcHNpRmlsZSA9IHJlZi5nZXRFbGVtZW50KCkuZ2V0Q29udGFpbmluZ0ZpbGUoKTsKKyAgICBmaW5hbCBWaXJ0dWFsRmlsZSBmaWxlID0gcHNpRmlsZS5nZXRWaXJ0dWFsRmlsZSgpOworICAgIGFzc2VydE5vdE51bGwoZmlsZSk7CisgICAgY3JlYXRlRmlsZShteU1vZHVsZSwgZmlsZS5nZXRQYXJlbnQoKSwgIk1vZHVsZVNvdXJjZUFzTGlicmFyeUNsYXNzZXNEZXAuamF2YSIsIGxvYWRGaWxlKCJjbGFzcy9Nb2R1bGVTb3VyY2VBc0xpYnJhcnlDbGFzc2VzRGVwLmphdmEiKSk7CisgICAgTW9kdWxlUm9vdE1vZGlmaWNhdGlvblV0aWwuYWRkTW9kdWxlTGlicmFyeShteU1vZHVsZSwgImxpYiIsIENvbGxlY3Rpb25zLnNpbmdsZXRvbkxpc3QoZmlsZS5nZXRQYXJlbnQoKS5nZXRVcmwoKSksIENvbGxlY3Rpb25zLjxTdHJpbmc+ZW1wdHlMaXN0KCkpOworICAgIC8vbmVlZCB0aGlzIHRvIGVuc3VyZSB0aGF0IFBzaUphdmFGaWxlQmFzZUltcGwubXlSZXNvbHZlQ2FjaGUgaXMgZmlsbGVkIHRvIHJlcHJvZHVjZSBJREVBLTkxMzA5CisgICAgRGVwZW5kZW5jaWVzQnVpbGRlci5hbmFseXplRmlsZURlcGVuZGVuY2llcyhwc2lGaWxlLCBuZXcgRGVwZW5kZW5jaWVzQnVpbGRlci5EZXBlbmRlbmN5UHJvY2Vzc29yKCkgeworICAgICAgQE92ZXJyaWRlCisgICAgICBwdWJsaWMgdm9pZCBwcm9jZXNzKFBzaUVsZW1lbnQgcGxhY2UsIFBzaUVsZW1lbnQgZGVwZW5kZW5jeSkgeworICAgICAgfQorICAgIH0pOworICAgIGFzc2VydEluc3RhbmNlT2YocmVmLnJlc29sdmUoKSwgUHNpQ2xhc3MuY2xhc3MpOworICB9CisKKworICBwdWJsaWMgdm9pZCB0ZXN0U3RhdGljSW1wb3J0SW5UaGVTYW1lQ2xhc3MoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBQc2lSZWZlcmVuY2UgcmVmID0gY29uZmlndXJlKCk7CisgICAgbG9uZyBzdGFydCA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpOworICAgIGFzc2VydE51bGwocmVmLnJlc29sdmUoKSk7CisgICAgUGxhdGZvcm1UZXN0VXRpbC5hc3NlcnRUaW1pbmcoImV4cG9uZW50PyIsIDIwMCwgU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCkgLSBzdGFydCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0U3RhdGljSW1wb3J0TmV0d29yaygpIHRocm93cyBFeGNlcHRpb24geworICAgIFBzaVJlZmVyZW5jZSByZWYgPSBjb25maWd1cmUoKTsKKyAgICBpbnQgY291bnQgPSAyMDsKKworICAgIFN0cmluZyBpbXBvcnRzID0gIiI7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CisgICAgICBpbXBvcnRzICs9ICJpbXBvcnQgc3RhdGljIEZvbyIgKyBpICsgIi4qO1xuIjsKKyAgICB9CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKKyAgICAgIGNyZWF0ZUZpbGUobXlNb2R1bGUsICJGb28iICsgaSArICIuamF2YSIsIGltcG9ydHMgKyAiY2xhc3MgRm9vIiArIGkgKyAiIGV4dGVuZHMgQmFyMSwgQmFyMiwgQmFyMyB7fSIpOworICAgIH0KKworICAgIGxvbmcgc3RhcnQgPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKKyAgICBhc3NlcnROdWxsKHJlZi5yZXNvbHZlKCkpOworICAgIFBsYXRmb3JtVGVzdFV0aWwuYXNzZXJ0VGltaW5nKCJleHBvbmVudD8iLCAyMDAwMCwgU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCkgLSBzdGFydCk7CisgIH0KKworICBAU3VwcHJlc3NXYXJuaW5ncyh7IkNvbnN0YW50Q29uZGl0aW9ucyJ9KQorICBwcml2YXRlIHZvaWQgY29uZmlndXJlRGVwZW5kZW5jeSgpIHsKKyAgICBBcHBsaWNhdGlvbk1hbmFnZXIuZ2V0QXBwbGljYXRpb24oKS5ydW5Xcml0ZUFjdGlvbihuZXcgUnVubmFibGUoKSB7CisgICAgICBAT3ZlcnJpZGUKKyAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKKyAgICAgICAgTW9kaWZpYWJsZU1vZHVsZU1vZGVsIG1vZGlmaWFibGVNb2RlbCA9IE1vZHVsZU1hbmFnZXIuZ2V0SW5zdGFuY2UoZ2V0UHJvamVjdCgpKS5nZXRNb2RpZmlhYmxlTW9kZWwoKTsKKyAgICAgICAgTW9kdWxlIG1vZHVsZSA9IG1vZGlmaWFibGVNb2RlbC5uZXdNb2R1bGUoImEuaW1sIiwgU3RkTW9kdWxlVHlwZXMuSkFWQS5nZXRJZCgpKTsKKyAgICAgICAgbW9kaWZpYWJsZU1vZGVsLmNvbW1pdCgpOworCisgICAgICAgIFZpcnR1YWxGaWxlIHJvb3QgPSBMb2NhbEZpbGVTeXN0ZW0uZ2V0SW5zdGFuY2UoKS5yZWZyZXNoQW5kRmluZEZpbGVCeVBhdGgoZ2V0VGVzdERhdGFQYXRoKCkgKyAiL2NsYXNzL2RlcGVuZGVudE1vZHVsZSIpOworICAgICAgICBhc3NlcnQgcm9vdCAhPSBudWxsOworCisgICAgICAgIFBzaVRlc3RVdGlsLmFkZENvbnRlbnRSb290KG1vZHVsZSwgcm9vdCk7CisgICAgICAgIFBzaVRlc3RVdGlsLmFkZFNvdXJjZVJvb3QobW9kdWxlLCByb290LmZpbmRDaGlsZCgic3JjIikpOworICAgICAgICBQc2lUZXN0VXRpbC5hZGRTb3VyY2VSb290KG1vZHVsZSwgcm9vdC5maW5kQ2hpbGQoInRlc3QiKSwgdHJ1ZSk7CisKKyAgICAgICAgTW9kdWxlUm9vdE1vZGlmaWNhdGlvblV0aWwuYWRkRGVwZW5kZW5jeShnZXRNb2R1bGUoKSwgbW9kdWxlKTsKKyAgICAgIH0KKyAgICB9KTsKKyAgfQorCisgIHByaXZhdGUgUHNpUmVmZXJlbmNlIGNvbmZpZ3VyZSgpIHRocm93cyBFeGNlcHRpb24geworICAgIHJldHVybiBjb25maWd1cmVCeUZpbGUoImNsYXNzLyIgKyBnZXRUZXN0TmFtZShmYWxzZSkgKyAiLmphdmEiKTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL3BzaS9yZXNvbHZlL1Jlc29sdmVJbkNvZGVGcmFnbWVudFRlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9wc2kvcmVzb2x2ZS9SZXNvbHZlSW5Db2RlRnJhZ21lbnRUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjkzNDg3NwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9wc2kvcmVzb2x2ZS9SZXNvbHZlSW5Db2RlRnJhZ21lbnRUZXN0LmphdmEKQEAgLTAsMCArMSw0OCBAQAorcGFja2FnZSBjb20uaW50ZWxsaWoucHNpLnJlc29sdmU7CisKK2ltcG9ydCBjb20uaW50ZWxsaWoucHNpLio7CitpbXBvcnQgY29tLmludGVsbGlqLnBzaS51dGlsLlBzaVRyZWVVdGlsOworaW1wb3J0IGNvbS5pbnRlbGxpai50ZXN0RnJhbWV3b3JrLlJlc29sdmVUZXN0Q2FzZTsKKworLyoqCisgKiBAYXV0aG9yIG1heAorICovCitwdWJsaWMgY2xhc3MgUmVzb2x2ZUluQ29kZUZyYWdtZW50VGVzdCBleHRlbmRzIFJlc29sdmVUZXN0Q2FzZSB7CisgIHB1YmxpYyB2b2lkIHRlc3RMb2NhbFZhcmlhYmxlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZmluYWwgUHNpUmVmZXJlbmNlIGlSZWYgPSBjb25maWd1cmUoKTsKKworICAgIFBzaUVsZW1lbnQgY29udGV4dCA9IFBzaVRyZWVVdGlsLmdldFBhcmVudE9mVHlwZShpUmVmLmdldEVsZW1lbnQoKSwgUHNpQ29kZUJsb2NrLmNsYXNzKTsKKyAgICBKYXZhQ29kZUZyYWdtZW50IGNvZGVGcmFnbWVudCA9IEphdmFDb2RlRnJhZ21lbnRGYWN0b3J5LmdldEluc3RhbmNlKG15UHJvamVjdCkKKyAgICAgIC5jcmVhdGVFeHByZXNzaW9uQ29kZUZyYWdtZW50KGlSZWYuZ2V0RWxlbWVudCgpLmdldFRleHQoKSwgY29udGV4dCwgbnVsbCwgdHJ1ZSk7CisgICAgY29kZUZyYWdtZW50LnNldFZpc2liaWxpdHlDaGVja2VyKEphdmFDb2RlRnJhZ21lbnQuVmlzaWJpbGl0eUNoZWNrZXIuRVZFUllUSElOR19WSVNJQkxFKTsKKworICAgIFBzaUVsZW1lbnRbXSBmaWxlQ29udGVudCA9IGNvZGVGcmFnbWVudC5nZXRDaGlsZHJlbigpOworICAgIGFzc2VydEVxdWFscygxLCBmaWxlQ29udGVudC5sZW5ndGgpOworICAgIGFzc2VydFRydWUoZmlsZUNvbnRlbnRbMF0gaW5zdGFuY2VvZiBQc2lFeHByZXNzaW9uKTsKKworICAgIFBzaUV4cHJlc3Npb24gZXhwciA9IChQc2lFeHByZXNzaW9uKSBmaWxlQ29udGVudFswXTsKKyAgICBleHByLmFjY2VwdChuZXcgSmF2YVJlY3Vyc2l2ZUVsZW1lbnRXYWxraW5nVmlzaXRvcigpIHsKKyAgICAgIEBPdmVycmlkZSBwdWJsaWMgdm9pZCB2aXNpdFJlZmVyZW5jZUV4cHJlc3Npb24oUHNpUmVmZXJlbmNlRXhwcmVzc2lvbiBleHByZXNzaW9uKSB7CisgICAgICAgIGFzc2VydEVxdWFscyhpUmVmLnJlc29sdmUoKSwKKyAgICAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb24ucmVzb2x2ZSgpKTsKKyAgICAgIH0KKyAgICB9KTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RqYXZhTGFuZ0NsYXNzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgUHNpQ29kZUZyYWdtZW50IGNvZGVGcmFnbWVudCA9IEphdmFDb2RlRnJhZ21lbnRGYWN0b3J5LmdldEluc3RhbmNlKG15UHJvamVjdCkuY3JlYXRlRXhwcmVzc2lvbkNvZGVGcmFnbWVudCgKKyAgICAgICAgICAiQm9vbGVhbi5nZXRCb29sZWFuKFwidHJ1ZVwiKSIsIG51bGwsIG51bGwsIHRydWUpOworCisgICAgUHNpRWxlbWVudFtdIGZpbGVDb250ZW50ID0gY29kZUZyYWdtZW50LmdldENoaWxkcmVuKCk7CisgICAgYXNzZXJ0RXF1YWxzKDEsIGZpbGVDb250ZW50Lmxlbmd0aCk7CisgICAgYXNzZXJ0VHJ1ZShmaWxlQ29udGVudFswXSBpbnN0YW5jZW9mIFBzaUV4cHJlc3Npb24pOworCisgICAgUHNpRXhwcmVzc2lvbiBleHByID0gKFBzaUV4cHJlc3Npb24pIGZpbGVDb250ZW50WzBdOworICAgIGFzc2VydE5vdE51bGwoZXhwci5nZXRUeXBlKCkpOworICAgIGFzc2VydEVxdWFscygiYm9vbGVhbiIsIGV4cHIuZ2V0VHlwZSgpLmdldENhbm9uaWNhbFRleHQoKSk7CisgIH0KKworICBwcml2YXRlIFBzaVJlZmVyZW5jZSBjb25maWd1cmUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICByZXR1cm4gY29uZmlndXJlQnlGaWxlKCJjb2RlRnJhZ21lbnQvIiArIGdldFRlc3ROYW1lKGZhbHNlKSArICIuamF2YSIpOworICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovcHNpL3Jlc29sdmUvUmVzb2x2ZUluTGlicmFyaWVzVGVzdC5ncm9vdnkgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovcHNpL3Jlc29sdmUvUmVzb2x2ZUluTGlicmFyaWVzVGVzdC5ncm9vdnkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmMyNGJhNjMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovcHNpL3Jlc29sdmUvUmVzb2x2ZUluTGlicmFyaWVzVGVzdC5ncm9vdnkKQEAgLTAsMCArMSwxNTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwMC0yMDEyIEpldEJyYWlucyBzLnIuby4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCitwYWNrYWdlIGNvbS5pbnRlbGxpai5wc2kucmVzb2x2ZQoraW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLmFwcGxpY2F0aW9uLmV4LlBhdGhNYW5hZ2VyRXgKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS52ZnMuTG9jYWxGaWxlU3lzdGVtCitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkudmZzLlZpcnR1YWxGaWxlCitpbXBvcnQgY29tLmludGVsbGlqLnBzaS5KYXZhUHNpRmFjYWRlCitpbXBvcnQgY29tLmludGVsbGlqLnBzaS5Qc2lDbGFzcworaW1wb3J0IGNvbS5pbnRlbGxpai5wc2kuUHNpRmlsZQoraW1wb3J0IGNvbS5pbnRlbGxpai5wc2kuUHNpTWV0aG9kCitpbXBvcnQgY29tLmludGVsbGlqLnBzaS5zZWFyY2guR2xvYmFsU2VhcmNoU2NvcGUKK2ltcG9ydCBjb20uaW50ZWxsaWoucHNpLnNlYXJjaC5zZWFyY2hlcy5DbGFzc0luaGVyaXRvcnNTZWFyY2gKK2ltcG9ydCBjb20uaW50ZWxsaWoucHNpLnNlYXJjaC5zZWFyY2hlcy5PdmVycmlkaW5nTWV0aG9kc1NlYXJjaAoraW1wb3J0IGNvbS5pbnRlbGxpai50ZXN0RnJhbWV3b3JrLlBzaVRlc3RVdGlsCitpbXBvcnQgY29tLmludGVsbGlqLnRlc3RGcmFtZXdvcmsuZml4dHVyZXMuSmF2YUNvZGVJbnNpZ2h0Rml4dHVyZVRlc3RDYXNlCisvKioKKyAqIEBhdXRob3IgcGV0ZXIKKyAqLworY2xhc3MgUmVzb2x2ZUluTGlicmFyaWVzVGVzdCBleHRlbmRzIEphdmFDb2RlSW5zaWdodEZpeHR1cmVUZXN0Q2FzZSB7CisKKyAgcHVibGljIHZvaWQgInRlc3QgcHJlZmVyIGN1cnJlbnQgbGlicmFyeSB3aGVuIG5hdmlnYXRpb24gZnJvbSBpdHMgc291cmNlIigpIHsKKyAgICBkZWYgbGliID0gTG9jYWxGaWxlU3lzdGVtLmdldEluc3RhbmNlKCkucmVmcmVzaEFuZEZpbmRGaWxlQnlQYXRoKFBhdGhNYW5hZ2VyRXguZ2V0VGVzdERhdGFQYXRoKCkgKyAiLy4uLy4uLy4uL2xpYiIpCisgICAgZGVmIG5hbm9KYXIgPSBsaWIuY2hpbGRyZW4uZmluZCB7IGl0Lm5hbWUuc3RhcnRzV2l0aCgibmFub3htbCIpIH0KKyAgICBkZWYgbmFub1NyYyA9IGxpYi5maW5kQ2hpbGQoInNyYyIpLmNoaWxkcmVuLmZpbmQgeyBpdC5uYW1lLnN0YXJ0c1dpdGgoIm5hbm94bWwiKSB9CisKKyAgICBkZWYgamFyQ29weSA9IG15Rml4dHVyZS5jb3B5RmlsZVRvUHJvamVjdChuYW5vSmFyLnBhdGgsICdsaWIvbmFub0phci5qYXInKQorICAgIGRlZiBzcmNDb3B5ID0gbXlGaXh0dXJlLmNvcHlGaWxlVG9Qcm9qZWN0KG5hbm9TcmMucGF0aCwgJ2xpYi9uYW5vU3JjLnppcCcpCisKKyAgICBQc2lUZXN0VXRpbC5hZGRMaWJyYXJ5KG15TW9kdWxlLCAnbmFubzEnLCBsaWIucGF0aCwgWyIvJG5hbm9KYXIubmFtZSEvIl0gYXMgU3RyaW5nW10sIFsiL3NyYy8kbmFub1NyYy5uYW1lIS8iXSBhcyBTdHJpbmdbXSkKKyAgICBQc2lUZXN0VXRpbC5hZGRMaWJyYXJ5KG15TW9kdWxlLCAnbmFubzInLCBqYXJDb3B5LnBhcmVudC5wYXRoLCBbIi8kamFyQ29weS5uYW1lIS8iXSBhcyBTdHJpbmdbXSwgWyIvJHNyY0NvcHkubmFtZSEvIl0gYXMgU3RyaW5nW10pCisKKyAgICBkZWYgcGFyc2VycyA9IEphdmFQc2lGYWNhZGUuZ2V0SW5zdGFuY2UocHJvamVjdCkuZmluZENsYXNzZXMoJ25ldC5uMy5uYW5veG1sLklYTUxQYXJzZXInLCBHbG9iYWxTZWFyY2hTY29wZS5hbGxTY29wZShwcm9qZWN0KSkKKyAgICBhc3NlcnQgcGFyc2Vycy5zaXplKCkgPT0gMgorCisgICAgZGVmIGZpbGUwID0gcGFyc2Vyc1swXS5uYXZpZ2F0aW9uRWxlbWVudC5jb250YWluaW5nRmlsZQorICAgIGFzc2VydCBmaWxlMC52aXJ0dWFsRmlsZS5wYXRoLnN0YXJ0c1dpdGgobmFub1NyYy5wYXRoKQorICAgIGFzc2VydCBmaWxlMC5maW5kUmVmZXJlbmNlQXQoZmlsZTAudGV4dC5pbmRleE9mKCdJWE1MUmVhZGVyIHJlYWRlcicpKS5yZXNvbHZlKCkubmF2aWdhdGlvbkVsZW1lbnQuY29udGFpbmluZ0ZpbGUudmlydHVhbEZpbGUucGF0aC5zdGFydHNXaXRoKG5hbm9TcmMucGF0aCkKKworICAgIGRlZiBmaWxlMSA9IHBhcnNlcnNbMV0ubmF2aWdhdGlvbkVsZW1lbnQuY29udGFpbmluZ0ZpbGUKKyAgICBhc3NlcnQgZmlsZTEudmlydHVhbEZpbGUucGF0aC5zdGFydHNXaXRoKHNyY0NvcHkucGF0aCkKKyAgICBhc3NlcnQgZmlsZTEuZmluZFJlZmVyZW5jZUF0KGZpbGUxLnRleHQuaW5kZXhPZignSVhNTFJlYWRlciByZWFkZXInKSkucmVzb2x2ZSgpLm5hdmlnYXRpb25FbGVtZW50LmNvbnRhaW5pbmdGaWxlLnZpcnR1YWxGaWxlLnBhdGguc3RhcnRzV2l0aChzcmNDb3B5LnBhdGgpCisKKyAgfQorCisgIHB1YmxpYyB2b2lkICJ0ZXN0IGluaGVyaXRhbmNlIHRyYW5zaXRpdml0eSIoKSB7CisgICAgZGVmIGxpYiA9IExvY2FsRmlsZVN5c3RlbS5nZXRJbnN0YW5jZSgpLnJlZnJlc2hBbmRGaW5kRmlsZUJ5UGF0aChQYXRoTWFuYWdlckV4LmdldFRlc3REYXRhUGF0aCgpICsgIi8uLi8uLi8uLi9saWIiKQorICAgIGRlZiBwcm90b0phciA9IGxpYi5jaGlsZHJlbi5maW5kIHsgaXQubmFtZS5zdGFydHNXaXRoKCJwcm90b2J1ZiIpIH0KKworICAgIGRlZiBqYXJDb3B5ID0gbXlGaXh0dXJlLmNvcHlGaWxlVG9Qcm9qZWN0KHByb3RvSmFyLnBhdGgsICdsaWIvcHJvdG9KYXIuamFyJykKKworICAgIFBzaVRlc3RVdGlsLmFkZExpYnJhcnkobXlNb2R1bGUsICdwcm90bzEnLCBsaWIucGF0aCwgWyIvJHByb3RvSmFyLm5hbWUhLyJdIGFzIFN0cmluZ1tdLCBbXSBhcyBTdHJpbmdbXSkKKyAgICBQc2lUZXN0VXRpbC5hZGRMaWJyYXJ5KG15TW9kdWxlLCAncHJvdG8yJywgamFyQ29weS5wYXJlbnQucGF0aCwgWyIvJGphckNvcHkubmFtZSEvIl0gYXMgU3RyaW5nW10sIFtdIGFzIFN0cmluZ1tdKQorCisgICAgZGVmIHNjb3BlID0gR2xvYmFsU2VhcmNoU2NvcGUuYWxsU2NvcGUocHJvamVjdCkKKworICAgIGRlZiBib3R0b21zID0gSmF2YVBzaUZhY2FkZS5nZXRJbnN0YW5jZShwcm9qZWN0KS5maW5kQ2xhc3NlcygnY29tLmdvb2dsZS5wcm90b2J1Zi5BYnN0cmFjdE1lc3NhZ2UnLCBzY29wZSkKKyAgICBhc3NlcnQgYm90dG9tcy5zaXplKCkgPT0gMgorCisgICAgZGVmIG1pZGRsZXMgPSBKYXZhUHNpRmFjYWRlLmdldEluc3RhbmNlKHByb2plY3QpLmZpbmRDbGFzc2VzKCdjb20uZ29vZ2xlLnByb3RvYnVmLkFic3RyYWN0TWVzc2FnZUxpdGUnLCBzY29wZSkKKyAgICBhc3NlcnQgbWlkZGxlcy5zaXplKCkgPT0gMgorCisgICAgZGVmIGludGZzID0gSmF2YVBzaUZhY2FkZS5nZXRJbnN0YW5jZShwcm9qZWN0KS5maW5kQ2xhc3NlcygnY29tLmdvb2dsZS5wcm90b2J1Zi5NZXNzYWdlTGl0ZScsIHNjb3BlKQorICAgIGFzc2VydCBpbnRmcy5zaXplKCkgPT0gMgorCisgICAgZm9yIChpIGluIDAuLjEpIHsKKyAgICAgIGFzc2VydCBDbGFzc0luaGVyaXRvcnNTZWFyY2guc2VhcmNoKGludGZzW2ldKS5maW5kQWxsKCkuY29udGFpbnNBbGwoW21pZGRsZXNbaV0sIGJvdHRvbXNbaV1dKQorICAgICAgaW50ZnNbaV0ubWV0aG9kcy5lYWNoIHsKKyAgICAgICAgYXNzZXJ0IE92ZXJyaWRpbmdNZXRob2RzU2VhcmNoLnNlYXJjaChpdCkuZmluZEFsbCgpCisgICAgICB9CisKKyAgICAgIGFzc2VydCBtaWRkbGVzW2ldLmlzSW5oZXJpdG9yKGludGZzW2ldLCB0cnVlKQorICAgICAgYXNzZXJ0IGJvdHRvbXNbaV0uaXNJbmhlcml0b3IoaW50ZnNbaV0sIHRydWUpCisgICAgICBhc3NlcnQgYm90dG9tc1tpXS5pc0luaGVyaXRvcihtaWRkbGVzW2ldLCB0cnVlKQorICAgIH0KKworICB9CisKKyAgcHVibGljIHZvaWQgInRlc3QgYWNjZXB0IHRoYXQgd2l0aCBkaWZmZXJlbnQgbGlicmFyeSB2ZXJzaW9ucyBpbmhlcml0YW5jZSByZWxhdGlvbiBtYXkgYmUgaW50cmFuc2l0aXZlIigpIHsKKyAgICBkZWYgbGliID0gTG9jYWxGaWxlU3lzdGVtLmdldEluc3RhbmNlKCkucmVmcmVzaEFuZEZpbmRGaWxlQnlQYXRoKFBhdGhNYW5hZ2VyRXguZ2V0VGVzdERhdGFQYXRoKCkgKyAiL2xpYlJlc29sdmUvaW5oZXJpdGFuY2UiKQorCisgICAgLy9Gb28sIE1pZGRsZSBpbXBsZW1lbnRzIEZvbywgT3RoZXIgZXh0ZW5kcyBNaWRkbGUKKyAgICBQc2lUZXN0VXRpbC5hZGRMaWJyYXJ5KG15TW9kdWxlLCAnZnVsbCcsIGxpYi5wYXRoLCBbIi9mdWxsTGlicmFyeS5qYXIhLyJdIGFzIFN0cmluZ1tdLCBbXSBhcyBTdHJpbmdbXSkKKworICAgIC8vTWlkZGxlLCBCb3R0b20gZXh0ZW5kcyBNaWRkbGUKKyAgICBQc2lUZXN0VXRpbC5hZGRMaWJyYXJ5KG15TW9kdWxlLCAncGFydGlhbCcsIGxpYi5wYXRoLCBbIi9taWRkbGVCb3R0b20uamFyIS8iXSBhcyBTdHJpbmdbXSwgW10gYXMgU3RyaW5nW10pCisKKyAgICBkZWYgc2NvcGUgPSBHbG9iYWxTZWFyY2hTY29wZS5hbGxTY29wZShwcm9qZWN0KQorCisgICAgZGVmIGkwID0gSmF2YVBzaUZhY2FkZS5nZXRJbnN0YW5jZShwcm9qZWN0KS5maW5kQ2xhc3MoJ0ludGYnLCBzY29wZSkKKyAgICBkZWYgb3RoZXIwID0gSmF2YVBzaUZhY2FkZS5nZXRJbnN0YW5jZShwcm9qZWN0KS5maW5kQ2xhc3MoJ090aGVyJywgc2NvcGUpCisgICAgZGVmIGIxID0gSmF2YVBzaUZhY2FkZS5nZXRJbnN0YW5jZShwcm9qZWN0KS5maW5kQ2xhc3MoJ0JvdHRvbScsIHNjb3BlKQorCisgICAgZGVmIG1pZGRsZXMgPSBKYXZhUHNpRmFjYWRlLmdldEluc3RhbmNlKHByb2plY3QpLmZpbmRDbGFzc2VzKCdNaWRkbGUnLCBzY29wZSkKKyAgICBhc3NlcnQgbWlkZGxlcy5zaXplKCkgPT0gMgorICAgIGRlZiBtMCA9IG1pZGRsZXNbMF0KKyAgICBkZWYgbTEgPSBtaWRkbGVzWzFdCisKKyAgICBmb3IgKGRlZXAgaW4gW2ZhbHNlLCB0cnVlXSkgeworICAgICAgYXNzZXJ0IG0wLmlzSW5oZXJpdG9yKGkwLCBkZWVwKQorICAgICAgYXNzZXJ0IG90aGVyMC5pc0luaGVyaXRvcihtMCwgZGVlcCkKKworICAgICAgYXNzZXJ0ICFiMS5pc0luaGVyaXRvcihpMCwgZGVlcCkKKworICAgICAgYXNzZXJ0IGIxLmlzSW5oZXJpdG9yKG0wLCBkZWVwKQorICAgICAgYXNzZXJ0IGIxLmlzSW5oZXJpdG9yKG0xLCBkZWVwKQorCisgICAgICBhc3NlcnQgIW0xLmlzSW5oZXJpdG9yKGkwLCBkZWVwKQorICAgIH0KKworICAgIGFzc2VydCBvdGhlcjAuaXNJbmhlcml0b3IoaTAsIHRydWUpCisgICAgYXNzZXJ0ICFvdGhlcjAuaXNJbmhlcml0b3IoaTAsIGZhbHNlKQorCisgICAgYXNzZXJ0IENsYXNzSW5oZXJpdG9yc1NlYXJjaC5zZWFyY2goaTApLmZpbmRBbGwoKSA9PSBbbTAsIGIxLCBvdGhlcjBdCisgICAgYXNzZXJ0IENsYXNzSW5oZXJpdG9yc1NlYXJjaC5zZWFyY2gobTApLmZpbmRBbGwoKSA9PSBbYjEsIG90aGVyMF0KKworICAgIGFzc2VydCBmb29Jbmhlcml0b3JzKGkwKSA9PSBbZm9vTWV0aG9kKG0wKSwgZm9vTWV0aG9kKG90aGVyMCldIGFzIFNldAorICAgIGFzc2VydCBmb29Jbmhlcml0b3JzKG0wKSA9PSBbZm9vTWV0aG9kKG90aGVyMCksIGZvb01ldGhvZChiMSldIGFzIFNldAorICAgIGFzc2VydCBmb29Jbmhlcml0b3JzKG0xKSA9PSBbZm9vTWV0aG9kKG90aGVyMCksIGZvb01ldGhvZChiMSldIGFzIFNldAorICB9CisKKyAgcHJpdmF0ZSBQc2lNZXRob2QgZm9vTWV0aG9kKFBzaUNsYXNzIGMpIHsgYy5maW5kTWV0aG9kc0J5TmFtZSgnZm9vJywgZmFsc2UpWzBdIH0KKyAgcHJpdmF0ZSBTZXQ8UHNpTWV0aG9kPiBmb29Jbmhlcml0b3JzKFBzaUNsYXNzIGMpIHsgT3ZlcnJpZGluZ01ldGhvZHNTZWFyY2guc2VhcmNoKGZvb01ldGhvZChjKSkuZmluZEFsbCgpIGFzIFNldCB9CisKKyAgcHVibGljIHZvaWQgInRlc3QgZG8gbm90IHBhcnNlIG5vdCBzdHViYmVkIHNvdXJjZXMgaW4gY2xhc3MgamFycyIoKSB7CisgICAgZGVmIGxpYiA9IExvY2FsRmlsZVN5c3RlbS5nZXRJbnN0YW5jZSgpLnJlZnJlc2hBbmRGaW5kRmlsZUJ5UGF0aChQYXRoTWFuYWdlckV4LmdldFRlc3REYXRhUGF0aCgpICsgIi9saWJSZXNvbHZlL2NsYXNzZXNBbmRTb3VyY2VzIikKKyAgICBQc2lUZXN0VXRpbC5hZGRMaWJyYXJ5KG15TW9kdWxlLCAnY2FzJywgbGliLnBhdGgsIFsiL2NsYXNzZXNBbmRTb3VyY2VzLmphciEvIl0gYXMgU3RyaW5nW10sIFsiL2NsYXNzZXNBbmRTb3VyY2VzLmphciEvIl0gYXMgU3RyaW5nW10pCisKKyAgICBkZWYgZmFjYWRlID0gSmF2YVBzaUZhY2FkZS5nZXRJbnN0YW5jZShwcm9qZWN0KQorICAgIGRlZiBzY29wZSA9IEdsb2JhbFNlYXJjaFNjb3BlLmFsbFNjb3BlKHByb2plY3QpCisKKyAgICBhc3NlcnQgZmFjYWRlLmZpbmRDbGFzc2VzKCdMaWJyYXJ5Q2xhc3MnLCBzY29wZSkuc2l6ZSgpID09IDEKKworICAgIGRlZiBwa2cgPSBmYWNhZGUuZmluZFBhY2thZ2UoIiIpCisgICAgYXNzZXJ0IHBrZy5jbGFzc2VzLnNpemUoKSA9PSAxCisKKyAgICBDb2xsZWN0aW9uPFZpcnR1YWxGaWxlPiBwa2dEaXJzID0gcGtnLmRpcmVjdG9yaWVzLmNvbGxlY3QgeyBpdC52aXJ0dWFsRmlsZSB9CisgICAgQ29sbGVjdGlvbjxWaXJ0dWFsRmlsZT4gcGtnQ2hpbGRyZW4gPSBwa2dEaXJzLmNvbGxlY3QgeyBpdC5jaGlsZHJlbiBhcyBMaXN0IH0uZmxhdHRlbigpCisgICAgUHNpRmlsZSBqYXZhU3JjID0gcHNpTWFuYWdlci5maW5kRmlsZShwa2dDaGlsZHJlbi5maW5kIHsgaXQubmFtZSA9PSAnTGlicmFyeUNsYXNzLmphdmEnIH0pCisgICAgYXNzZXJ0ICFqYXZhU3JjLm5vZGUucGFyc2VkCisgIH0KKworfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL3BzaS9yZXNvbHZlL1Jlc29sdmVNZXRob2QxNVRlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9wc2kvcmVzb2x2ZS9SZXNvbHZlTWV0aG9kMTVUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDFiNmZhYwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9wc2kvcmVzb2x2ZS9SZXNvbHZlTWV0aG9kMTVUZXN0LmphdmEKQEAgLTAsMCArMSw1ODEgQEAKK3BhY2thZ2UgY29tLmludGVsbGlqLnBzaS5yZXNvbHZlOworCitpbXBvcnQgY29tLmludGVsbGlqLnBzaS4qOworaW1wb3J0IGNvbS5pbnRlbGxpai5wc2kudXRpbC5Qc2lUcmVlVXRpbDsKK2ltcG9ydCBjb20uaW50ZWxsaWoucHNpLmluZm9zLk1ldGhvZENhbmRpZGF0ZUluZm87CitpbXBvcnQgY29tLmludGVsbGlqLm5hdmlnYXRpb24uTmF2aWdhdGlvbkl0ZW07CitpbXBvcnQgb3JnLmpldGJyYWlucy5hbm5vdGF0aW9ucy5Ob25ObHM7CitpbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuYXNzZXJ0VGhhdDsKK2ltcG9ydCBzdGF0aWMgb3JnLmhhbWNyZXN0LmNvcmUuSXNJbnN0YW5jZU9mLmluc3RhbmNlT2Y7CisKKy8qKgorICogQGF1dGhvciBkc2wKKyAqLworcHVibGljIGNsYXNzIFJlc29sdmVNZXRob2QxNVRlc3QgZXh0ZW5kcyBSZXNvbHZlMTVUZXN0Q2FzZSB7CisgIHB1YmxpYyB2b2lkIHRlc3RTdGF0aWNJbXBvcnRPbkRlbWFuZCgpIHRocm93cyBFeGNlcHRpb24geworICAgIGZpbmFsIFBzaVJlZmVyZW5jZSByZWYgPSBjb25maWd1cmVCeUZpbGUoKTsKKyAgICBmaW5hbCBQc2lFbGVtZW50IGVsZW1lbnQgPSByZWYucmVzb2x2ZSgpOworICAgIGFzc2VydE5vdE51bGwoZWxlbWVudCk7CisgICAgYXNzZXJ0VGhhdChlbGVtZW50LCBpbnN0YW5jZU9mKFBzaU1ldGhvZC5jbGFzcykpOworICAgIGZpbmFsIFBzaU1ldGhvZCBtZXRob2QgPSAoUHNpTWV0aG9kKWVsZW1lbnQ7CisgICAgYXNzZXJ0RXF1YWxzKCJhc0xpc3QiLCBtZXRob2QuZ2V0TmFtZSgpKTsKKyAgICBhc3NlcnRFcXVhbHMoImphdmEudXRpbC5BcnJheXMiLCBtZXRob2QuZ2V0Q29udGFpbmluZ0NsYXNzKCkuZ2V0UXVhbGlmaWVkTmFtZSgpKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RTdGF0aWNJbXBvcnRIaWRkZW4oKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBmaW5hbCBQc2lKYXZhUmVmZXJlbmNlIHJlZiA9IChQc2lKYXZhUmVmZXJlbmNlKWNvbmZpZ3VyZUJ5RmlsZSgpOworICAgIGZpbmFsIEphdmFSZXNvbHZlUmVzdWx0IHJlc3VsdCA9IHJlZi5hZHZhbmNlZFJlc29sdmUoZmFsc2UpOworICAgIGFzc2VydEZhbHNlKHJlc3VsdC5pc1ZhbGlkUmVzdWx0KCkpOworICAgIGZpbmFsIFBzaUVsZW1lbnQgZWxlbWVudCA9IHJlc3VsdC5nZXRFbGVtZW50KCk7CisgICAgYXNzZXJ0Tm90TnVsbChlbGVtZW50KTsKKyAgICBhc3NlcnRUaGF0KGVsZW1lbnQsIGluc3RhbmNlT2YoUHNpTWV0aG9kLmNsYXNzKSk7CisgICAgZmluYWwgUHNpTWV0aG9kIG1ldGhvZCA9IChQc2lNZXRob2QpZWxlbWVudDsKKyAgICBhc3NlcnRFcXVhbHMoQ29tbW9uQ2xhc3NOYW1lcy5KQVZBX0xBTkdfT0JKRUNULCBtZXRob2QuZ2V0Q29udGFpbmluZ0NsYXNzKCkuZ2V0UXVhbGlmaWVkTmFtZSgpKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RTdGF0aWNJbXBvcnREaXJlY3QoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBmaW5hbCBQc2lSZWZlcmVuY2UgcmVmID0gY29uZmlndXJlQnlGaWxlKCk7CisgICAgZmluYWwgUHNpRWxlbWVudCBlbGVtZW50ID0gcmVmLnJlc29sdmUoKTsKKyAgICBhc3NlcnROb3ROdWxsKGVsZW1lbnQpOworICAgIGFzc2VydFRoYXQoZWxlbWVudCwgaW5zdGFuY2VPZihQc2lNZXRob2QuY2xhc3MpKTsKKyAgICBmaW5hbCBQc2lNZXRob2QgbWV0aG9kID0gKFBzaU1ldGhvZCllbGVtZW50OworICAgIGFzc2VydEVxdWFscygiYXNMaXN0IiwgbWV0aG9kLmdldE5hbWUoKSk7CisgICAgYXNzZXJ0RXF1YWxzKCJqYXZhLnV0aWwuQXJyYXlzIiwgbWV0aG9kLmdldENvbnRhaW5pbmdDbGFzcygpLmdldFF1YWxpZmllZE5hbWUoKSk7CisgICAgYXNzZXJ0VGhhdChyZWYsIGluc3RhbmNlT2YoUHNpUmVmZXJlbmNlRXhwcmVzc2lvbi5jbGFzcykpOworICAgIGZpbmFsIFBzaVJlZmVyZW5jZUV4cHJlc3Npb24gcmVmRXhwciA9IChQc2lSZWZlcmVuY2VFeHByZXNzaW9uKXJlZjsKKyAgICBmaW5hbCBKYXZhUmVzb2x2ZVJlc3VsdFtdIHJlc29sdmVSZXN1bHRzID0gcmVmRXhwci5tdWx0aVJlc29sdmUoZmFsc2UpOworICAgIGFzc2VydEVxdWFscygxLCByZXNvbHZlUmVzdWx0cy5sZW5ndGgpOworICAgIGZpbmFsIEphdmFSZXNvbHZlUmVzdWx0IHJlc29sdmVSZXN1bHQgPSByZXNvbHZlUmVzdWx0c1swXTsKKyAgICBhc3NlcnRUcnVlKHJlc29sdmVSZXN1bHQuaXNWYWxpZFJlc3VsdCgpKTsKKyAgICBhc3NlcnRUaGF0KHJlc29sdmVSZXN1bHQuZ2V0Q3VycmVudEZpbGVSZXNvbHZlU2NvcGUoKSwgaW5zdGFuY2VPZihQc2lJbXBvcnRTdGF0aWNTdGF0ZW1lbnQuY2xhc3MpKTsKKyAgICBhc3NlcnRUaGF0KHJlc29sdmVSZXN1bHQsIGluc3RhbmNlT2YoTWV0aG9kQ2FuZGlkYXRlSW5mby5jbGFzcykpOworICAgIGZpbmFsIE1ldGhvZENhbmRpZGF0ZUluZm8gbWV0aG9kQ2FuZGlkYXRlSW5mbyA9IChNZXRob2RDYW5kaWRhdGVJbmZvKXJlc29sdmVSZXN1bHQ7CisgICAgYXNzZXJ0VHJ1ZShtZXRob2RDYW5kaWRhdGVJbmZvLmlzQXBwbGljYWJsZSgpKTsKKyAgfQorCisKKyAgcHVibGljIHZvaWQgdGVzdFN0YXRpY0ltcG9ydENvbmZsaWN0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZmluYWwgUHNpUmVmZXJlbmNlIHJlZiA9IGNvbmZpZ3VyZUJ5RmlsZSgpOworICAgIGZpbmFsIFBzaUVsZW1lbnQgZWxlbWVudCA9IHJlZi5yZXNvbHZlKCk7CisgICAgYXNzZXJ0Tm90TnVsbChlbGVtZW50KTsKKyAgICBhc3NlcnRUaGF0KGVsZW1lbnQsIGluc3RhbmNlT2YoUHNpTWV0aG9kLmNsYXNzKSk7CisgICAgZmluYWwgUHNpTWV0aG9kIG1ldGhvZCA9IChQc2lNZXRob2QpZWxlbWVudDsKKyAgICBhc3NlcnRFcXVhbHMoInNvcnQiLCBtZXRob2QuZ2V0TmFtZSgpKTsKKyAgICBhc3NlcnRFcXVhbHMoImphdmEudXRpbC5Db2xsZWN0aW9ucyIsIG1ldGhvZC5nZXRDb250YWluaW5nQ2xhc3MoKS5nZXRRdWFsaWZpZWROYW1lKCkpOworICAgIGFzc2VydFRoYXQocmVmLCBpbnN0YW5jZU9mKFBzaVJlZmVyZW5jZUV4cHJlc3Npb24uY2xhc3MpKTsKKyAgICBmaW5hbCBQc2lSZWZlcmVuY2VFeHByZXNzaW9uIHJlZkV4cHIgPSAoUHNpUmVmZXJlbmNlRXhwcmVzc2lvbilyZWY7CisgICAgZmluYWwgSmF2YVJlc29sdmVSZXN1bHRbXSByZXNvbHZlUmVzdWx0cyA9IHJlZkV4cHIubXVsdGlSZXNvbHZlKGZhbHNlKTsKKyAgICBhc3NlcnRFcXVhbHMoMSwgcmVzb2x2ZVJlc3VsdHMubGVuZ3RoKTsKKyAgICBmaW5hbCBKYXZhUmVzb2x2ZVJlc3VsdCByZXNvbHZlUmVzdWx0ID0gcmVzb2x2ZVJlc3VsdHNbMF07CisgICAgYXNzZXJ0RmFsc2UocmVzb2x2ZVJlc3VsdC5pc1ZhbGlkUmVzdWx0KCkpOworICAgIGFzc2VydFRoYXQocmVzb2x2ZVJlc3VsdC5nZXRDdXJyZW50RmlsZVJlc29sdmVTY29wZSgpLCBpbnN0YW5jZU9mKFBzaUltcG9ydFN0YXRpY1N0YXRlbWVudC5jbGFzcykpOworICAgIGFzc2VydFRoYXQocmVzb2x2ZVJlc3VsdCwgaW5zdGFuY2VPZihNZXRob2RDYW5kaWRhdGVJbmZvLmNsYXNzKSk7CisgICAgZmluYWwgTWV0aG9kQ2FuZGlkYXRlSW5mbyBtZXRob2RDYW5kaWRhdGVJbmZvID0gKE1ldGhvZENhbmRpZGF0ZUluZm8pcmVzb2x2ZVJlc3VsdDsKKyAgICBhc3NlcnRGYWxzZShtZXRob2RDYW5kaWRhdGVJbmZvLmlzQXBwbGljYWJsZSgpKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RTdGF0aWNJbXBvcnRDb25mbGljdDEoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBmaW5hbCBQc2lKYXZhQ29kZVJlZmVyZW5jZUVsZW1lbnQgcmVmID0gKFBzaUphdmFDb2RlUmVmZXJlbmNlRWxlbWVudCljb25maWd1cmVCeUZpbGUoKTsKKyAgICBmaW5hbCBKYXZhUmVzb2x2ZVJlc3VsdCByZXN1bHQgPSByZWYuYWR2YW5jZWRSZXNvbHZlKGZhbHNlKTsKKyAgICBQc2lFbGVtZW50IGVsZW1lbnQgPSByZXN1bHQuZ2V0RWxlbWVudCgpOworICAgIGFzc2VydFRydWUoIXJlc3VsdC5pc1ZhbGlkUmVzdWx0KCkpOworICAgIGFzc2VydFRoYXQoZWxlbWVudCwgaW5zdGFuY2VPZihQc2lNZXRob2QuY2xhc3MpKTsKKyAgICBmaW5hbCBQc2lNZXRob2QgbWV0aG9kID0gKFBzaU1ldGhvZCllbGVtZW50OworICAgIFBzaU1ldGhvZCBwYXJlbnRNZXRob2QgPSBQc2lUcmVlVXRpbC5nZXRQYXJlbnRPZlR5cGUocmVmLmdldEVsZW1lbnQoKSwgUHNpTWV0aG9kLmNsYXNzKTsKKyAgICBhc3NlcnRFcXVhbHMobWV0aG9kLCBwYXJlbnRNZXRob2QpOworICB9CisgIHB1YmxpYyB2b2lkIHRlc3RTdGF0aWNJbXBvcnRDb25mbGljdDMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBmaW5hbCBQc2lKYXZhQ29kZVJlZmVyZW5jZUVsZW1lbnQgcmVmID0gKFBzaUphdmFDb2RlUmVmZXJlbmNlRWxlbWVudCljb25maWd1cmVCeUZpbGUoKTsKKyAgICBmaW5hbCBKYXZhUmVzb2x2ZVJlc3VsdCByZXN1bHQgPSByZWYuYWR2YW5jZWRSZXNvbHZlKGZhbHNlKTsKKyAgICBhc3NlcnRSZXNvbHZlc1RvTWV0aG9kSW5DbGFzcyhyZXN1bHQsICJUb0ltcG9ydFgyIik7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0R2VuZXJpY3NBbmRWYXJhcmdzTm9Db25mbGljdCgpIHRocm93cyBFeGNlcHRpb24geworICAgIGZpbmFsIFBzaVJlZmVyZW5jZSByZWYgPSBjb25maWd1cmVCeUZpbGUoKTsKKyAgICBmaW5hbCBQc2lFbGVtZW50IGVsZW1lbnQgPSByZWYucmVzb2x2ZSgpOworICAgIGFzc2VydE5vdE51bGwoZWxlbWVudCk7CisgICAgYXNzZXJ0VGhhdChlbGVtZW50LCBpbnN0YW5jZU9mKFBzaU1ldGhvZC5jbGFzcykpOworICAgIGZpbmFsIFBzaU1ldGhvZCBtZXRob2QgPSAoUHNpTWV0aG9kKWVsZW1lbnQ7CisgICAgYXNzZXJ0RXF1YWxzKCJtZXRob2QiLCBtZXRob2QuZ2V0TmFtZSgpKTsKKyAgICBhc3NlcnRFcXVhbHMobWV0aG9kLmdldFR5cGVQYXJhbWV0ZXJzKCkubGVuZ3RoLCAwKTsKKyAgICBhc3NlcnRUaGF0KHJlZiwgaW5zdGFuY2VPZihQc2lSZWZlcmVuY2VFeHByZXNzaW9uLmNsYXNzKSk7CisgICAgZmluYWwgUHNpUmVmZXJlbmNlRXhwcmVzc2lvbiByZWZFeHByID0gKFBzaVJlZmVyZW5jZUV4cHJlc3Npb24pcmVmOworICAgIGZpbmFsIEphdmFSZXNvbHZlUmVzdWx0W10gcmVzb2x2ZVJlc3VsdHMgPSByZWZFeHByLm11bHRpUmVzb2x2ZShmYWxzZSk7CisgICAgYXNzZXJ0RXF1YWxzKDEsIHJlc29sdmVSZXN1bHRzLmxlbmd0aCk7CisgICAgZmluYWwgSmF2YVJlc29sdmVSZXN1bHQgcmVzb2x2ZVJlc3VsdCA9IHJlc29sdmVSZXN1bHRzWzBdOworICAgIGFzc2VydFRydWUocmVzb2x2ZVJlc3VsdC5pc1ZhbGlkUmVzdWx0KCkpOworICAgIGFzc2VydFRoYXQocmVzb2x2ZVJlc3VsdCwgaW5zdGFuY2VPZihNZXRob2RDYW5kaWRhdGVJbmZvLmNsYXNzKSk7CisgICAgZmluYWwgTWV0aG9kQ2FuZGlkYXRlSW5mbyBtZXRob2RDYW5kaWRhdGVJbmZvID0gKE1ldGhvZENhbmRpZGF0ZUluZm8pcmVzb2x2ZVJlc3VsdDsKKyAgICBhc3NlcnRUcnVlKG1ldGhvZENhbmRpZGF0ZUluZm8uaXNBcHBsaWNhYmxlKCkpOworICB9CisKKyAgLy9KTFMzIDE1LjIuOCBoYWNrCisgIHB1YmxpYyB2b2lkIHRlc3RHZXRDbGFzcygpIHRocm93cyBFeGNlcHRpb24geworICAgIGZpbmFsIFBzaVJlZmVyZW5jZSByZWYgPSBjb25maWd1cmVCeUZpbGUoKTsKKyAgICBhc3NlcnRUaGF0KHJlZiwgaW5zdGFuY2VPZihQc2lSZWZlcmVuY2VFeHByZXNzaW9uLmNsYXNzKSk7CisgICAgZmluYWwgUHNpUmVmZXJlbmNlRXhwcmVzc2lvbiByZWZFeHByID0gKFBzaVJlZmVyZW5jZUV4cHJlc3Npb24pcmVmOworICAgIFBzaVR5cGUgdHlwZSA9ICgoUHNpRXhwcmVzc2lvbilyZWZFeHByLmdldFBhcmVudCgpKS5nZXRUeXBlKCk7CisgICAgYXNzZXJ0RXF1YWxzKCJqYXZhLmxhbmcuQ2xhc3M8PyBleHRlbmRzIGphdmEubGFuZy5TdHJpbmc+IiwgdHlwZS5nZXRDYW5vbmljYWxUZXh0KCkpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEZpbHRlckZpeGVkVnNWYXJhcmdzMSgpIHRocm93cyBFeGNlcHRpb24geworICAgIGZpbmFsIFBzaVJlZmVyZW5jZSByZWYgPSBjb25maWd1cmVCeUZpbGUoKTsKKyAgICBhc3NlcnRUaGF0KHJlZiwgaW5zdGFuY2VPZihQc2lSZWZlcmVuY2VFeHByZXNzaW9uLmNsYXNzKSk7CisgICAgZmluYWwgUHNpUmVmZXJlbmNlRXhwcmVzc2lvbiByZWZFeHByID0gKFBzaVJlZmVyZW5jZUV4cHJlc3Npb24pcmVmOworICAgIFBzaU1ldGhvZENhbGxFeHByZXNzaW9uIGNhbGwgPSAoUHNpTWV0aG9kQ2FsbEV4cHJlc3Npb24pIHJlZkV4cHIuZ2V0UGFyZW50KCk7CisgICAgYXNzZXJ0TnVsbChjYWxsLnJlc29sdmVNZXRob2QoKSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0RmlsdGVyRml4ZWRWc1ZhcmFyZ3MyKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZmluYWwgUHNpUmVmZXJlbmNlIHJlZiA9IGNvbmZpZ3VyZUJ5RmlsZSgpOworICAgIGFzc2VydFRoYXQocmVmLCBpbnN0YW5jZU9mKFBzaVJlZmVyZW5jZUV4cHJlc3Npb24uY2xhc3MpKTsKKyAgICBmaW5hbCBQc2lSZWZlcmVuY2VFeHByZXNzaW9uIHJlZkV4cHIgPSAoUHNpUmVmZXJlbmNlRXhwcmVzc2lvbilyZWY7CisgICAgUHNpTWV0aG9kQ2FsbEV4cHJlc3Npb24gY2FsbCA9IChQc2lNZXRob2RDYWxsRXhwcmVzc2lvbikgcmVmRXhwci5nZXRQYXJlbnQoKTsKKyAgICBhc3NlcnROdWxsKGNhbGwucmVzb2x2ZU1ldGhvZCgpKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RGaWx0ZXJGaXhlZFZzVmFyYXJnczMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBmaW5hbCBQc2lSZWZlcmVuY2UgcmVmID0gY29uZmlndXJlQnlGaWxlKCk7CisgICAgYXNzZXJ0VGhhdChyZWYsIGluc3RhbmNlT2YoUHNpUmVmZXJlbmNlRXhwcmVzc2lvbi5jbGFzcykpOworICAgIGZpbmFsIFBzaVJlZmVyZW5jZUV4cHJlc3Npb24gcmVmRXhwciA9IChQc2lSZWZlcmVuY2VFeHByZXNzaW9uKXJlZjsKKyAgICBQc2lNZXRob2RDYWxsRXhwcmVzc2lvbiBjYWxsID0gKFBzaU1ldGhvZENhbGxFeHByZXNzaW9uKSByZWZFeHByLmdldFBhcmVudCgpOworICAgIGFzc2VydE51bGwoY2FsbC5yZXNvbHZlTWV0aG9kKCkpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEZpbHRlckZpeGVkVnNWYXJhcmdzNCgpIHRocm93cyBFeGNlcHRpb24geworICAgIGZpbmFsIFBzaVJlZmVyZW5jZSByZWYgPSBjb25maWd1cmVCeUZpbGUoKTsKKyAgICBhc3NlcnRUaGF0KHJlZiwgaW5zdGFuY2VPZihQc2lSZWZlcmVuY2VFeHByZXNzaW9uLmNsYXNzKSk7CisgICAgZmluYWwgUHNpUmVmZXJlbmNlRXhwcmVzc2lvbiByZWZFeHByID0gKFBzaVJlZmVyZW5jZUV4cHJlc3Npb24pcmVmOworICAgIFBzaU1ldGhvZENhbGxFeHByZXNzaW9uIGNhbGwgPSAoUHNpTWV0aG9kQ2FsbEV4cHJlc3Npb24pIHJlZkV4cHIuZ2V0UGFyZW50KCk7CisgICAgSmF2YVJlc29sdmVSZXN1bHQgcmVzb2x2ZVJlc3VsdCA9IGNhbGwucmVzb2x2ZU1ldGhvZEdlbmVyaWNzKCk7CisgICAgYXNzZXJ0Tm90TnVsbChyZXNvbHZlUmVzdWx0LmdldEVsZW1lbnQoKSk7CisgICAgYXNzZXJ0VHJ1ZShyZXNvbHZlUmVzdWx0LmlzVmFsaWRSZXN1bHQoKSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0RmlsdGVyRml4ZWRWc1ZhcmFyZ3M1KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZmluYWwgUHNpUmVmZXJlbmNlIHJlZiA9IGNvbmZpZ3VyZUJ5RmlsZSgpOworICAgIGFzc2VydFRoYXQocmVmLCBpbnN0YW5jZU9mKFBzaVJlZmVyZW5jZUV4cHJlc3Npb24uY2xhc3MpKTsKKyAgICBmaW5hbCBQc2lSZWZlcmVuY2VFeHByZXNzaW9uIHJlZkV4cHIgPSAoUHNpUmVmZXJlbmNlRXhwcmVzc2lvbilyZWY7CisgICAgUHNpTWV0aG9kQ2FsbEV4cHJlc3Npb24gY2FsbCA9IChQc2lNZXRob2RDYWxsRXhwcmVzc2lvbikgcmVmRXhwci5nZXRQYXJlbnQoKTsKKyAgICBKYXZhUmVzb2x2ZVJlc3VsdCByZXNvbHZlUmVzdWx0ID0gY2FsbC5yZXNvbHZlTWV0aG9kR2VuZXJpY3MoKTsKKyAgICBQc2lFbGVtZW50IGVsZW1lbnQgPSByZXNvbHZlUmVzdWx0LmdldEVsZW1lbnQoKTsKKyAgICBhc3NlcnROb3ROdWxsKGVsZW1lbnQpOworICAgIGFzc2VydFRydWUocmVzb2x2ZVJlc3VsdC5pc1ZhbGlkUmVzdWx0KCkpOworICAgIGFzc2VydFRydWUoISgoUHNpTWV0aG9kKSBlbGVtZW50KS5pc1ZhckFyZ3MoKSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0RmlsdGVyRml4ZWRWc1ZhcmFyZ3M2KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZmluYWwgUHNpUmVmZXJlbmNlIHJlZiA9IGNvbmZpZ3VyZUJ5RmlsZSgpOworICAgIGFzc2VydFRoYXQocmVmLCBpbnN0YW5jZU9mKFBzaVJlZmVyZW5jZUV4cHJlc3Npb24uY2xhc3MpKTsKKyAgICBmaW5hbCBQc2lSZWZlcmVuY2VFeHByZXNzaW9uIHJlZkV4cHIgPSAoUHNpUmVmZXJlbmNlRXhwcmVzc2lvbilyZWY7CisgICAgUHNpTWV0aG9kQ2FsbEV4cHJlc3Npb24gY2FsbCA9IChQc2lNZXRob2RDYWxsRXhwcmVzc2lvbikgcmVmRXhwci5nZXRQYXJlbnQoKTsKKyAgICBKYXZhUmVzb2x2ZVJlc3VsdCByZXNvbHZlUmVzdWx0ID0gY2FsbC5yZXNvbHZlTWV0aG9kR2VuZXJpY3MoKTsKKyAgICBQc2lFbGVtZW50IGVsZW1lbnQgPSByZXNvbHZlUmVzdWx0LmdldEVsZW1lbnQoKTsKKyAgICBhc3NlcnROb3ROdWxsKGVsZW1lbnQpOworICAgIGFzc2VydFRydWUocmVzb2x2ZVJlc3VsdC5pc1ZhbGlkUmVzdWx0KCkpOworICAgIGFzc2VydFRydWUoKChQc2lNZXRob2QpIGVsZW1lbnQpLmlzVmFyQXJncygpKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RGaWx0ZXJGaXhlZFZzVmFyYXJnczcoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBmaW5hbCBQc2lSZWZlcmVuY2UgcmVmID0gY29uZmlndXJlQnlGaWxlKCk7CisgICAgYXNzZXJ0VGhhdChyZWYsIGluc3RhbmNlT2YoUHNpUmVmZXJlbmNlRXhwcmVzc2lvbi5jbGFzcykpOworICAgIGZpbmFsIFBzaVJlZmVyZW5jZUV4cHJlc3Npb24gcmVmRXhwciA9IChQc2lSZWZlcmVuY2VFeHByZXNzaW9uKXJlZjsKKyAgICBQc2lNZXRob2RDYWxsRXhwcmVzc2lvbiBjYWxsID0gKFBzaU1ldGhvZENhbGxFeHByZXNzaW9uKSByZWZFeHByLmdldFBhcmVudCgpOworICAgIEphdmFSZXNvbHZlUmVzdWx0IHJlc29sdmVSZXN1bHQgPSBjYWxsLnJlc29sdmVNZXRob2RHZW5lcmljcygpOworICAgIFBzaUVsZW1lbnQgZWxlbWVudCA9IHJlc29sdmVSZXN1bHQuZ2V0RWxlbWVudCgpOworICAgIGFzc2VydE5vdE51bGwoZWxlbWVudCk7CisgICAgYXNzZXJ0VHJ1ZShyZXNvbHZlUmVzdWx0LmlzVmFsaWRSZXN1bHQoKSk7CisgICAgYXNzZXJ0VHJ1ZSghKChQc2lNZXRob2QpIGVsZW1lbnQpLmlzVmFyQXJncygpKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RGaWx0ZXJGaXhlZFZzVmFyYXJnczgoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBmaW5hbCBQc2lSZWZlcmVuY2UgcmVmID0gY29uZmlndXJlQnlGaWxlKCk7CisgICAgYXNzZXJ0VGhhdChyZWYsIGluc3RhbmNlT2YoUHNpUmVmZXJlbmNlRXhwcmVzc2lvbi5jbGFzcykpOworICAgIGZpbmFsIFBzaVJlZmVyZW5jZUV4cHJlc3Npb24gcmVmRXhwciA9IChQc2lSZWZlcmVuY2VFeHByZXNzaW9uKXJlZjsKKyAgICBQc2lDYWxsRXhwcmVzc2lvbiBjYWxsID0gKFBzaUNhbGxFeHByZXNzaW9uKSByZWZFeHByLmdldFBhcmVudCgpOworICAgIEphdmFSZXNvbHZlUmVzdWx0IHJlc29sdmVSZXN1bHQgPSBjYWxsLnJlc29sdmVNZXRob2RHZW5lcmljcygpOworICAgIFBzaUVsZW1lbnQgZWxlbWVudCA9IHJlc29sdmVSZXN1bHQuZ2V0RWxlbWVudCgpOworICAgIGFzc2VydE5vdE51bGwoZWxlbWVudCk7CisgICAgYXNzZXJ0VHJ1ZShyZXNvbHZlUmVzdWx0LmlzVmFsaWRSZXN1bHQoKSk7CisgICAgYXNzZXJ0VHJ1ZSghKChQc2lNZXRob2QpIGVsZW1lbnQpLmlzVmFyQXJncygpKTsKKyAgfQorICBwdWJsaWMgdm9pZCB0ZXN0RmlsdGVyRml4ZWRWc1ZhcmFyZ3M5KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZmluYWwgUHNpUmVmZXJlbmNlIHJlZiA9IGNvbmZpZ3VyZUJ5RmlsZSgpOworICAgIGFzc2VydFRoYXQocmVmLCBpbnN0YW5jZU9mKFBzaVJlZmVyZW5jZUV4cHJlc3Npb24uY2xhc3MpKTsKKyAgICBmaW5hbCBQc2lSZWZlcmVuY2VFeHByZXNzaW9uIHJlZkV4cHIgPSAoUHNpUmVmZXJlbmNlRXhwcmVzc2lvbilyZWY7CisgICAgUHNpQ2FsbEV4cHJlc3Npb24gY2FsbCA9IChQc2lDYWxsRXhwcmVzc2lvbikgcmVmRXhwci5nZXRQYXJlbnQoKTsKKyAgICBKYXZhUmVzb2x2ZVJlc3VsdCByZXNvbHZlUmVzdWx0ID0gY2FsbC5yZXNvbHZlTWV0aG9kR2VuZXJpY3MoKTsKKyAgICBQc2lFbGVtZW50IGVsZW1lbnQgPSByZXNvbHZlUmVzdWx0LmdldEVsZW1lbnQoKTsKKyAgICBhc3NlcnROb3ROdWxsKGVsZW1lbnQpOworICAgIGFzc2VydFRydWUocmVzb2x2ZVJlc3VsdC5pc1ZhbGlkUmVzdWx0KCkpOworICAgIGFzc2VydFRydWUoKChQc2lNZXRob2QpIGVsZW1lbnQpLmlzVmFyQXJncygpKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RGaWx0ZXJCb3hpbmcxKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZmluYWwgUHNpUmVmZXJlbmNlIHJlZiA9IGNvbmZpZ3VyZUJ5RmlsZSgpOworICAgIGFzc2VydFRoYXQocmVmLCBpbnN0YW5jZU9mKFBzaVJlZmVyZW5jZUV4cHJlc3Npb24uY2xhc3MpKTsKKyAgICBmaW5hbCBQc2lSZWZlcmVuY2VFeHByZXNzaW9uIHJlZkV4cHIgPSAoUHNpUmVmZXJlbmNlRXhwcmVzc2lvbilyZWY7CisgICAgUHNpQ2FsbEV4cHJlc3Npb24gY2FsbCA9IChQc2lDYWxsRXhwcmVzc2lvbikgcmVmRXhwci5nZXRQYXJlbnQoKTsKKyAgICBKYXZhUmVzb2x2ZVJlc3VsdCByZXNvbHZlUmVzdWx0ID0gY2FsbC5yZXNvbHZlTWV0aG9kR2VuZXJpY3MoKTsKKyAgICBQc2lFbGVtZW50IGVsZW1lbnQgPSByZXNvbHZlUmVzdWx0LmdldEVsZW1lbnQoKTsKKyAgICBhc3NlcnROb3ROdWxsKGVsZW1lbnQpOworICAgIGFzc2VydFRydWUocmVzb2x2ZVJlc3VsdC5pc1ZhbGlkUmVzdWx0KCkpOworICAgIGZpbmFsIFBzaU1ldGhvZCBtZXRob2QgPSAoUHNpTWV0aG9kKWVsZW1lbnQ7CisgICAgYXNzZXJ0RXF1YWxzKFBzaVR5cGUuQk9PTEVBTiwgbWV0aG9kLmdldFBhcmFtZXRlckxpc3QoKS5nZXRQYXJhbWV0ZXJzKClbMV0uZ2V0VHlwZSgpKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RGaWx0ZXJWYXJhcmdzVnNWYXJhcmdzMSgpIHRocm93cyBFeGNlcHRpb24geworICAgIGZpbmFsIFBzaVJlZmVyZW5jZSByZWYgPSBjb25maWd1cmVCeUZpbGUoKTsKKyAgICBhc3NlcnRUaGF0KHJlZiwgaW5zdGFuY2VPZihQc2lSZWZlcmVuY2VFeHByZXNzaW9uLmNsYXNzKSk7CisgICAgZmluYWwgUHNpUmVmZXJlbmNlRXhwcmVzc2lvbiByZWZFeHByID0gKFBzaVJlZmVyZW5jZUV4cHJlc3Npb24pcmVmOworICAgIFBzaUNhbGxFeHByZXNzaW9uIGNhbGwgPSAoUHNpQ2FsbEV4cHJlc3Npb24pIHJlZkV4cHIuZ2V0UGFyZW50KCk7CisgICAgSmF2YVJlc29sdmVSZXN1bHQgcmVzb2x2ZVJlc3VsdCA9IGNhbGwucmVzb2x2ZU1ldGhvZEdlbmVyaWNzKCk7CisgICAgUHNpRWxlbWVudCBlbGVtZW50ID0gcmVzb2x2ZVJlc3VsdC5nZXRFbGVtZW50KCk7CisgICAgYXNzZXJ0Tm90TnVsbChlbGVtZW50KTsKKyAgICBhc3NlcnRUcnVlKHJlc29sdmVSZXN1bHQuaXNWYWxpZFJlc3VsdCgpKTsKKyAgICBhc3NlcnRFcXVhbHMoKChQc2lNZXRob2QpZWxlbWVudCkuZ2V0UGFyYW1ldGVyTGlzdCgpLmdldFBhcmFtZXRlcnNDb3VudCgpLCAzKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RGaWx0ZXJWYXJhcmdzVnNWYXJhcmdzMigpIHRocm93cyBFeGNlcHRpb24geworICAgIGZpbmFsIFBzaVJlZmVyZW5jZSByZWYgPSBjb25maWd1cmVCeUZpbGUoKTsKKyAgICBhc3NlcnRUaGF0KHJlZiwgaW5zdGFuY2VPZihQc2lSZWZlcmVuY2VFeHByZXNzaW9uLmNsYXNzKSk7CisgICAgZmluYWwgUHNpUmVmZXJlbmNlRXhwcmVzc2lvbiByZWZFeHByID0gKFBzaVJlZmVyZW5jZUV4cHJlc3Npb24pcmVmOworICAgIFBzaUNhbGxFeHByZXNzaW9uIGNhbGwgPSAoUHNpQ2FsbEV4cHJlc3Npb24pIHJlZkV4cHIuZ2V0UGFyZW50KCk7CisgICAgSmF2YVJlc29sdmVSZXN1bHQgcmVzb2x2ZVJlc3VsdCA9IGNhbGwucmVzb2x2ZU1ldGhvZEdlbmVyaWNzKCk7CisgICAgYXNzZXJ0TnVsbChyZXNvbHZlUmVzdWx0LmdldEVsZW1lbnQoKSk7CisgICAgYXNzZXJ0RmFsc2UocmVzb2x2ZVJlc3VsdC5pc1ZhbGlkUmVzdWx0KCkpOworCisgICAgZmluYWwgSmF2YVJlc29sdmVSZXN1bHRbXSBjYW5kaWRhdGVzID0gcmVmRXhwci5tdWx0aVJlc29sdmUoZmFsc2UpOworICAgIGFzc2VydEVxdWFscygyLCBjYW5kaWRhdGVzLmxlbmd0aCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0RmlsdGVyVmFyYXJnc1ZzVmFyYXJnczMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBmaW5hbCBQc2lSZWZlcmVuY2UgcmVmID0gY29uZmlndXJlQnlGaWxlKCk7CisgICAgYXNzZXJ0VGhhdChyZWYsIGluc3RhbmNlT2YoUHNpUmVmZXJlbmNlRXhwcmVzc2lvbi5jbGFzcykpOworICAgIGZpbmFsIFBzaVJlZmVyZW5jZUV4cHJlc3Npb24gcmVmRXhwciA9IChQc2lSZWZlcmVuY2VFeHByZXNzaW9uKXJlZjsKKyAgICBQc2lDYWxsRXhwcmVzc2lvbiBjYWxsID0gKFBzaUNhbGxFeHByZXNzaW9uKSByZWZFeHByLmdldFBhcmVudCgpOworICAgIEphdmFSZXNvbHZlUmVzdWx0IHJlc29sdmVSZXN1bHQgPSBjYWxsLnJlc29sdmVNZXRob2RHZW5lcmljcygpOworICAgIGFzc2VydE5vdE51bGwocmVzb2x2ZVJlc3VsdC5nZXRFbGVtZW50KCkpOworICAgIGFzc2VydEZhbHNlKHJlc29sdmVSZXN1bHQuaXNWYWxpZFJlc3VsdCgpKTsKKworICAgIGZpbmFsIEphdmFSZXNvbHZlUmVzdWx0W10gY2FuZGlkYXRlcyA9IHJlZkV4cHIubXVsdGlSZXNvbHZlKGZhbHNlKTsKKyAgICBhc3NlcnRFcXVhbHMoMSwgY2FuZGlkYXRlcy5sZW5ndGgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEZpbHRlclZhcmFyZ3NWc1ZhcmFyZ3M0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZmluYWwgUHNpUmVmZXJlbmNlIHJlZiA9IGNvbmZpZ3VyZUJ5RmlsZSgpOworICAgIGFzc2VydFRoYXQocmVmLCBpbnN0YW5jZU9mKFBzaVJlZmVyZW5jZUV4cHJlc3Npb24uY2xhc3MpKTsKKyAgICBmaW5hbCBQc2lSZWZlcmVuY2VFeHByZXNzaW9uIHJlZkV4cHIgPSAoUHNpUmVmZXJlbmNlRXhwcmVzc2lvbilyZWY7CisgICAgUHNpQ2FsbEV4cHJlc3Npb24gY2FsbCA9IChQc2lDYWxsRXhwcmVzc2lvbikgcmVmRXhwci5nZXRQYXJlbnQoKTsKKyAgICBKYXZhUmVzb2x2ZVJlc3VsdCByZXNvbHZlUmVzdWx0ID0gY2FsbC5yZXNvbHZlTWV0aG9kR2VuZXJpY3MoKTsKKyAgICBhc3NlcnROdWxsKHJlc29sdmVSZXN1bHQuZ2V0RWxlbWVudCgpKTsKKyAgICBhc3NlcnRGYWxzZShyZXNvbHZlUmVzdWx0LmlzVmFsaWRSZXN1bHQoKSk7CisKKyAgICBmaW5hbCBKYXZhUmVzb2x2ZVJlc3VsdFtdIGNhbmRpZGF0ZXMgPSByZWZFeHByLm11bHRpUmVzb2x2ZShmYWxzZSk7CisgICAgYXNzZXJ0RXF1YWxzKDIsIGNhbmRpZGF0ZXMubGVuZ3RoKTsKKyAgfQorCisgIC8vSURFQURFVi0zMzEzCisgIHB1YmxpYyB2b2lkIHRlc3RDb3ZhcmlhbnRSZXR1cm5UeXBlcygpIHRocm93cyBFeGNlcHRpb24geworICAgIGZpbmFsIFBzaVJlZmVyZW5jZSByZWYgPSBjb25maWd1cmVCeUZpbGUoKTsKKyAgICBhc3NlcnRUaGF0KHJlZiwgaW5zdGFuY2VPZihQc2lSZWZlcmVuY2VFeHByZXNzaW9uLmNsYXNzKSk7CisgICAgZmluYWwgUHNpUmVmZXJlbmNlRXhwcmVzc2lvbiByZWZFeHByID0gKFBzaVJlZmVyZW5jZUV4cHJlc3Npb24pcmVmOworICAgIGZpbmFsIFBzaUVsZW1lbnQgcGFyZW50ID0gcmVmRXhwci5nZXRQYXJlbnQoKTsKKyAgICBhc3NlcnRUaGF0KHBhcmVudCwgaW5zdGFuY2VPZihQc2lNZXRob2RDYWxsRXhwcmVzc2lvbi5jbGFzcykpOworICAgIGZpbmFsIFBzaU1ldGhvZCBtZXRob2QgPSAoKFBzaUNhbGwpcGFyZW50KS5yZXNvbHZlTWV0aG9kKCk7CisgICAgYXNzZXJ0Tm90TnVsbChtZXRob2QpOworICAgIGFzc2VydEVxdWFscygiRSIsIG1ldGhvZC5nZXRDb250YWluaW5nQ2xhc3MoKS5nZXROYW1lKCkpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEdlbmVyaWNNZXRob2RzMSgpIHRocm93cyBFeGNlcHRpb24geworICAgIGZpbmFsIFBzaVJlZmVyZW5jZSByZWYgPSBjb25maWd1cmVCeUZpbGUoKTsKKyAgICBhc3NlcnRUaGF0KHJlZiwgaW5zdGFuY2VPZihQc2lSZWZlcmVuY2VFeHByZXNzaW9uLmNsYXNzKSk7CisgICAgZmluYWwgUHNpUmVmZXJlbmNlRXhwcmVzc2lvbiByZWZFeHByID0gKFBzaVJlZmVyZW5jZUV4cHJlc3Npb24pcmVmOworICAgIGZpbmFsIFBzaUVsZW1lbnQgcGFyZW50ID0gcmVmRXhwci5nZXRQYXJlbnQoKTsKKyAgICBhc3NlcnRUaGF0KHBhcmVudCwgaW5zdGFuY2VPZihQc2lNZXRob2RDYWxsRXhwcmVzc2lvbi5jbGFzcykpOworICAgIGZpbmFsIFBzaU1ldGhvZENhbGxFeHByZXNzaW9uIGV4cHJlc3Npb24gPSAoUHNpTWV0aG9kQ2FsbEV4cHJlc3Npb24pcGFyZW50OworICAgIGFzc2VydE51bGwoZXhwcmVzc2lvbi5yZXNvbHZlTWV0aG9kKCkpOworICAgIGZpbmFsIEphdmFSZXNvbHZlUmVzdWx0W10gcmVzdWx0cyA9IGV4cHJlc3Npb24uZ2V0TWV0aG9kRXhwcmVzc2lvbigpLm11bHRpUmVzb2x2ZShmYWxzZSk7CisgICAgYXNzZXJ0RXF1YWxzKDIsIHJlc3VsdHMubGVuZ3RoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RHZW5lcmljTWV0aG9kczIoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBmaW5hbCBQc2lSZWZlcmVuY2UgcmVmID0gY29uZmlndXJlQnlGaWxlKCk7CisgICAgZmluYWwgUHNpTWV0aG9kIG1ldGhvZCA9IGNoZWNrUmVzb2x2ZXNVbmlxdWUocmVmKTsKKyAgICBhc3NlcnRFcXVhbHMoMCwgbWV0aG9kLmdldFR5cGVQYXJhbWV0ZXJzKCkubGVuZ3RoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RHZW5lcmljTWV0aG9kczMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBmaW5hbCBQc2lSZWZlcmVuY2UgcmVmID0gY29uZmlndXJlQnlGaWxlKCk7CisgICAgZmluYWwgUHNpTWV0aG9kIG1ldGhvZCA9IGNoZWNrUmVzb2x2ZXNVbmlxdWUocmVmKTsKKyAgICBhc3NlcnRFcXVhbHMoMCwgbWV0aG9kLmdldFR5cGVQYXJhbWV0ZXJzKCkubGVuZ3RoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RHZW5lcmljTWV0aG9kczQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBmaW5hbCBQc2lSZWZlcmVuY2UgcmVmID0gY29uZmlndXJlQnlGaWxlKCk7CisgICAgZmluYWwgUHNpTWV0aG9kIG1ldGhvZCA9IGNoZWNrUmVzb2x2ZXNVbmlxdWUocmVmKTsKKyAgICBhc3NlcnRFcXVhbHMoMCwgbWV0aG9kLmdldFR5cGVQYXJhbWV0ZXJzKCkubGVuZ3RoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RHZW5lcmljTWV0aG9kczUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBmaW5hbCBQc2lSZWZlcmVuY2UgcmVmID0gY29uZmlndXJlQnlGaWxlKCk7CisgICAgZmluYWwgUHNpTWV0aG9kIG1ldGhvZCA9IGNoZWNrUmVzb2x2ZXNVbmlxdWUocmVmKTsKKyAgICBhc3NlcnRFcXVhbHMoMiwgbWV0aG9kLmdldFR5cGVQYXJhbWV0ZXJzKCkubGVuZ3RoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RHZW5lcmljTWV0aG9kczYoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBmaW5hbCBQc2lSZWZlcmVuY2UgcmVmID0gY29uZmlndXJlQnlGaWxlKCk7CisgICAgY2hlY2tSZXNvbHZlc1VuaXF1ZShyZWYpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEdlbmVyaWNDbGFzczEoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBmaW5hbCBQc2lSZWZlcmVuY2UgcmVmID0gY29uZmlndXJlQnlGaWxlKCk7CisgICAgZmluYWwgUHNpTWV0aG9kIG1ldGhvZCA9IGNoZWNrUmVzb2x2ZXNVbmlxdWUocmVmKTsKKyAgICBhc3NlcnRFcXVhbHMoIkZvbyIsIG1ldGhvZC5nZXRDb250YWluaW5nQ2xhc3MoKS5nZXROYW1lKCkpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEdlbmVyaWNDbGFzczIoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBmaW5hbCBQc2lSZWZlcmVuY2UgcmVmID0gY29uZmlndXJlQnlGaWxlKCk7CisgICAgZmluYWwgUHNpTWV0aG9kIG1ldGhvZCA9IGNoZWNrUmVzb2x2ZXNVbmlxdWUocmVmKTsKKyAgICBhc3NlcnRFcXVhbHMoMCwgbWV0aG9kLmdldFR5cGVQYXJhbWV0ZXJzKCkubGVuZ3RoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RNb3JlU3BlY2lmaWNTYW1lRXJhc3VyZSgpIHRocm93cyBFeGNlcHRpb24geworICAgIGZpbmFsIFBzaVJlZmVyZW5jZSByZWYgPSBjb25maWd1cmVCeUZpbGUoKTsKKyAgICBmaW5hbCBQc2lNZXRob2QgbWV0aG9kID0gY2hlY2tSZXNvbHZlc1VuaXF1ZShyZWYpOworICAgIGFzc2VydEVxdWFscygwLCBtZXRob2QuZ2V0VHlwZVBhcmFtZXRlcnMoKS5sZW5ndGgpOworICB9CisKKyAgcHJpdmF0ZSBQc2lSZWZlcmVuY2UgY29uZmlndXJlQnlGaWxlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgcmV0dXJuIGNvbmZpZ3VyZUJ5RmlsZSgibWV0aG9kL2dlbmVyaWNzLyIgKyBnZXRUZXN0TmFtZShmYWxzZSkgKyAiLmphdmEiKTsKKyAgfQorICBwcml2YXRlIHN0YXRpYyBQc2lNZXRob2QgY2hlY2tSZXNvbHZlc1VuaXF1ZShmaW5hbCBQc2lSZWZlcmVuY2UgcmVmKSB7CisgICAgYXNzZXJ0VGhhdChyZWYsIGluc3RhbmNlT2YoUHNpUmVmZXJlbmNlRXhwcmVzc2lvbi5jbGFzcykpOworICAgIGZpbmFsIFBzaVJlZmVyZW5jZUV4cHJlc3Npb24gcmVmRXhwciA9IChQc2lSZWZlcmVuY2VFeHByZXNzaW9uKXJlZjsKKyAgICBmaW5hbCBQc2lFbGVtZW50IHBhcmVudCA9IHJlZkV4cHIuZ2V0UGFyZW50KCk7CisgICAgYXNzZXJ0VGhhdChwYXJlbnQsIGluc3RhbmNlT2YoUHNpTWV0aG9kQ2FsbEV4cHJlc3Npb24uY2xhc3MpKTsKKyAgICBmaW5hbCBQc2lNZXRob2RDYWxsRXhwcmVzc2lvbiBleHByZXNzaW9uID0gKFBzaU1ldGhvZENhbGxFeHByZXNzaW9uKXBhcmVudDsKKyAgICBmaW5hbCBQc2lNZXRob2QgbWV0aG9kID0gZXhwcmVzc2lvbi5yZXNvbHZlTWV0aG9kKCk7CisgICAgYXNzZXJ0Tm90TnVsbChtZXRob2QpOworICAgIHJldHVybiBtZXRob2Q7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0VGVzdEdlbmVyaWNNZXRob2RPdmVybG9hZGluZzEoKSB0aHJvd3MgRXhjZXB0aW9ueworICAgIFBzaVJlZmVyZW5jZSByZWYgPSBjb25maWd1cmVCeUZpbGUoKTsKKyAgICBQc2lFbGVtZW50IHRhcmdldCA9IHJlZi5yZXNvbHZlKCk7CisgICAgYXNzZXJ0VGhhdCh0YXJnZXQsIGluc3RhbmNlT2YoUHNpTWV0aG9kLmNsYXNzKSk7CisgICAgYXNzZXJ0VGhhdCh0YXJnZXQuZ2V0UGFyZW50KCksIGluc3RhbmNlT2YoUHNpQ2xhc3MuY2xhc3MpKTsKKyAgICBhc3NlcnRFcXVhbHMoIk9iamVjdCIsICgoTmF2aWdhdGlvbkl0ZW0pdGFyZ2V0LmdldFBhcmVudCgpKS5nZXROYW1lKCkpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFByZWZlckFycmF5VHlwZVRvT2JqZWN0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgUHNpUmVmZXJlbmNlIHJlZiA9IGNvbmZpZ3VyZUJ5RmlsZSgpOworICAgIFBzaUVsZW1lbnQgdGFyZ2V0ID0gcmVmLnJlc29sdmUoKTsKKyAgICBhc3NlcnRUaGF0KHRhcmdldCwgaW5zdGFuY2VPZihQc2lNZXRob2QuY2xhc3MpKTsKKyAgICBhc3NlcnRUaGF0KHRhcmdldC5nZXRQYXJlbnQoKSwgaW5zdGFuY2VPZihQc2lDbGFzcy5jbGFzcykpOworICAgIGZpbmFsIFBzaVBhcmFtZXRlcltdIHBhcmFtZXRlcnMgPSAoKFBzaU1ldGhvZCl0YXJnZXQpLmdldFBhcmFtZXRlckxpc3QoKS5nZXRQYXJhbWV0ZXJzKCk7CisgICAgYXNzZXJ0RXF1YWxzKDEsIHBhcmFtZXRlcnMubGVuZ3RoKTsKKyAgICBhc3NlcnRUcnVlKHBhcmFtZXRlcnNbMF0uZ2V0VHlwZSgpIGluc3RhbmNlb2YgUHNpQXJyYXlUeXBlKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RUZXN0R2VuZXJpY01ldGhvZE92ZXJsb2FkaW5nMigpIHRocm93cyBFeGNlcHRpb257CisgICAgUHNpUmVmZXJlbmNlIHJlZiA9IGNvbmZpZ3VyZUJ5RmlsZSgpOworICAgIFBzaUVsZW1lbnQgdGFyZ2V0ID0gcmVmLnJlc29sdmUoKTsKKyAgICBhc3NlcnRUaGF0KHRhcmdldCwgaW5zdGFuY2VPZihQc2lNZXRob2QuY2xhc3MpKTsKKyAgICBhc3NlcnRUaGF0KHRhcmdldC5nZXRQYXJlbnQoKSwgaW5zdGFuY2VPZihQc2lDbGFzcy5jbGFzcykpOworICAgIGFzc2VydEVxdWFscygiQSIsICgoTmF2aWdhdGlvbkl0ZW0pdGFyZ2V0LmdldFBhcmVudCgpKS5nZXROYW1lKCkpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFRlc3RHZW5lcmljTWV0aG9kT3ZlcmxvYWRpbmczKCkgdGhyb3dzIEV4Y2VwdGlvbnsKKyAgICBQc2lSZWZlcmVuY2UgcmVmID0gY29uZmlndXJlQnlGaWxlKCk7CisgICAgUHNpRWxlbWVudCB0YXJnZXQgPSByZWYucmVzb2x2ZSgpOworICAgIGFzc2VydFRoYXQodGFyZ2V0LCBpbnN0YW5jZU9mKFBzaU1ldGhvZC5jbGFzcykpOworICAgIGFzc2VydFRoYXQodGFyZ2V0LmdldFBhcmVudCgpLCBpbnN0YW5jZU9mKFBzaUNsYXNzLmNsYXNzKSk7CisgICAgYXNzZXJ0RXF1YWxzKCJPYmplY3QiLCAoKE5hdmlnYXRpb25JdGVtKXRhcmdldC5nZXRQYXJlbnQoKSkuZ2V0TmFtZSgpKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RUZXN0R2VuZXJpY01ldGhvZE92ZXJsb2FkaW5nNCgpIHRocm93cyBFeGNlcHRpb257CisgICAgUHNpUmVmZXJlbmNlIHJlZiA9IGNvbmZpZ3VyZUJ5RmlsZSgpOworICAgIFBzaUVsZW1lbnQgdGFyZ2V0ID0gcmVmLnJlc29sdmUoKTsKKyAgICBhc3NlcnRUaGF0KHRhcmdldCwgaW5zdGFuY2VPZihQc2lNZXRob2QuY2xhc3MpKTsKKyAgICBhc3NlcnRUaGF0KHRhcmdldC5nZXRQYXJlbnQoKSwgaW5zdGFuY2VPZihQc2lDbGFzcy5jbGFzcykpOworICAgIGFzc2VydEVxdWFscygiQSIsICgoTmF2aWdhdGlvbkl0ZW0pdGFyZ2V0LmdldFBhcmVudCgpKS5nZXROYW1lKCkpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFRlc3RSZXR1cm5UeXBlMSgpIHRocm93cyBFeGNlcHRpb257CisgICAgUHNpUmVmZXJlbmNlIHJlZiA9IGNvbmZpZ3VyZUJ5RmlsZSgpOworICAgIFBzaUVsZW1lbnQgdGFyZ2V0ID0gcmVmLnJlc29sdmUoKTsKKyAgICBhc3NlcnRUaGF0KHRhcmdldCwgaW5zdGFuY2VPZihQc2lNZXRob2QuY2xhc3MpKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RUZXN0UmV0dXJuVHlwZTIoKSB0aHJvd3MgRXhjZXB0aW9ueworICAgIFBzaVJlZmVyZW5jZSByZWYgPSBjb25maWd1cmVCeUZpbGUoKTsKKyAgICBQc2lFbGVtZW50IHRhcmdldCA9IHJlZi5yZXNvbHZlKCk7CisgICAgYXNzZXJ0TnVsbCh0YXJnZXQpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdE1lcmdlMSgpIHRocm93cyBFeGNlcHRpb257CisgICAgUHNpUmVmZXJlbmNlIHJlZiA9IGNvbmZpZ3VyZUJ5RmlsZSgpOworICAgIFBzaUVsZW1lbnQgdGFyZ2V0ID0gcmVmLnJlc29sdmUoKTsKKyAgICBhc3NlcnROdWxsKHRhcmdldCk7CisgIH0KKyAgcHVibGljIHZvaWQgdGVzdEV4dGVuZHMxKCkgdGhyb3dzIEV4Y2VwdGlvbnsKKyAgICBQc2lSZWZlcmVuY2UgcmVmID0gY29uZmlndXJlQnlGaWxlKCk7CisgICAgUHNpRWxlbWVudCB0YXJnZXQgPSByZWYucmVzb2x2ZSgpOworICAgIGFzc2VydFRoYXQodGFyZ2V0LCBpbnN0YW5jZU9mKFBzaU1ldGhvZC5jbGFzcykpOworICB9CisgIHB1YmxpYyB2b2lkIHRlc3RJbmhlcml0YW5jZTEoKSB0aHJvd3MgRXhjZXB0aW9ueworICAgIFBzaVJlZmVyZW5jZSByZWYgPSBjb25maWd1cmVCeUZpbGUoKTsKKyAgICBQc2lFbGVtZW50IHRhcmdldCA9IHJlZi5yZXNvbHZlKCk7CisgICAgYXNzZXJ0VGhhdCh0YXJnZXQsIGluc3RhbmNlT2YoUHNpTWV0aG9kLmNsYXNzKSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0SW5oZXJpdGFuY2UyKCkgdGhyb3dzIEV4Y2VwdGlvbnsKKyAgICBQc2lSZWZlcmVuY2UgcmVmID0gY29uZmlndXJlQnlGaWxlKCk7CisgICAgUHNpRWxlbWVudCB0YXJnZXQgPSByZWYucmVzb2x2ZSgpOworICAgIGFzc2VydFRoYXQodGFyZ2V0LCBpbnN0YW5jZU9mKFBzaU1ldGhvZC5jbGFzcykpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEluaGVyaXRhbmNlMygpIHRocm93cyBFeGNlcHRpb257CisgICAgUHNpUmVmZXJlbmNlIHJlZiA9IGNvbmZpZ3VyZUJ5RmlsZSgpOworICAgIFBzaUVsZW1lbnQgdGFyZ2V0ID0gcmVmLnJlc29sdmUoKTsKKyAgICBhc3NlcnRUaGF0KHRhcmdldCwgaW5zdGFuY2VPZihQc2lNZXRob2QuY2xhc3MpKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RJbmhlcml0YW5jZTQoKSB0aHJvd3MgRXhjZXB0aW9ueworICAgIFBzaVJlZmVyZW5jZSByZWYgPSBjb25maWd1cmVCeUZpbGUoKTsKKyAgICBQc2lFbGVtZW50IHRhcmdldCA9IHJlZi5yZXNvbHZlKCk7CisgICAgYXNzZXJ0VGhhdCh0YXJnZXQsIGluc3RhbmNlT2YoUHNpTWV0aG9kLmNsYXNzKSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0RXhwbGljaXRQYXJhbXMxKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgUHNpUmVmZXJlbmNlIHJlZiA9IGNvbmZpZ3VyZUJ5RmlsZSgpOworICAgIGFzc2VydEdlbmVyaWNSZXNvbHZlKHJlZiwgImYiLCBuZXcgU3RyaW5nW10geyJqYXZhLmxhbmcuU3RyaW5nIn0sICJqYXZhLmxhbmcuU3RyaW5nIik7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0RXhwbGljaXRQYXJhbXMyKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgUHNpUmVmZXJlbmNlIHJlZiA9IGNvbmZpZ3VyZUJ5RmlsZSgpOworICAgIGFzc2VydEdlbmVyaWNSZXNvbHZlKHJlZiwgImYiLCBuZXcgU3RyaW5nW10geyJqYXZhLmxhbmcuSW50ZWdlciJ9LCAiRm9vIik7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0Q29uc3RydWN0b3JFeHBsaWNpdFBhcmFtcygpIHRocm93cyBFeGNlcHRpb24geworICAgIFBzaVJlZmVyZW5jZSByZWYgPSBjb25maWd1cmVCeUZpbGUoKTsKKyAgICBhc3NlcnRUaGF0KHJlZi5nZXRFbGVtZW50KCksIGluc3RhbmNlT2YoUHNpSmF2YUNvZGVSZWZlcmVuY2VFbGVtZW50LmNsYXNzKSk7CisgICAgYXNzZXJ0VGhhdChyZWYuZ2V0RWxlbWVudCgpLmdldFBhcmVudCgpLCBpbnN0YW5jZU9mKFBzaU5ld0V4cHJlc3Npb24uY2xhc3MpKTsKKyAgfQorCisKKyAgcHJpdmF0ZSBzdGF0aWMgdm9pZCBhc3NlcnRHZW5lcmljUmVzb2x2ZShQc2lSZWZlcmVuY2UgcmVmLCBmaW5hbCBTdHJpbmcgbWV0aG9kTmFtZSwgZmluYWwgU3RyaW5nW10gZXhwZWN0ZWRUeXBlUGFyYW1ldGVyVmFsdWVzLCBATm9uTmxzIGZpbmFsIFN0cmluZyBleHBlY3RlZENhbGxUeXBlKSB7CisgICAgUHNpRWxlbWVudCB0YXJnZXQgPSByZWYucmVzb2x2ZSgpOworICAgIGFzc2VydFRoYXQodGFyZ2V0LCBpbnN0YW5jZU9mKFBzaU1ldGhvZC5jbGFzcykpOworCisgICAgUHNpTWV0aG9kIHBzaU1ldGhvZCA9IChQc2lNZXRob2QpdGFyZ2V0OworICAgIGFzc2VydEVxdWFscyhtZXRob2ROYW1lLCBwc2lNZXRob2QuZ2V0TmFtZSgpKTsKKyAgICBhc3NlcnRUaGF0KHJlZi5nZXRFbGVtZW50KCksIGluc3RhbmNlT2YoUHNpSmF2YUNvZGVSZWZlcmVuY2VFbGVtZW50LmNsYXNzKSk7CisgICAgUHNpSmF2YUNvZGVSZWZlcmVuY2VFbGVtZW50IHJlZkVsZW1lbnQgPSAoUHNpSmF2YUNvZGVSZWZlcmVuY2VFbGVtZW50KXJlZi5nZXRFbGVtZW50KCk7CisgICAgSmF2YVJlc29sdmVSZXN1bHQgcmVzb2x2ZVJlc3VsdCA9IHJlZkVsZW1lbnQuYWR2YW5jZWRSZXNvbHZlKGZhbHNlKTsKKyAgICBQc2lTdWJzdGl0dXRvciBzdWJzdGl0dXRvciA9IHJlc29sdmVSZXN1bHQuZ2V0U3Vic3RpdHV0b3IoKTsKKyAgICBQc2lUeXBlUGFyYW1ldGVyW10gdHlwZVBhcmFtZXRlcnMgPSBwc2lNZXRob2QuZ2V0VHlwZVBhcmFtZXRlcnMoKTsKKyAgICBhc3NlcnRFcXVhbHMoZXhwZWN0ZWRUeXBlUGFyYW1ldGVyVmFsdWVzLmxlbmd0aCwgdHlwZVBhcmFtZXRlcnMubGVuZ3RoKTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGV4cGVjdGVkVHlwZVBhcmFtZXRlclZhbHVlcy5sZW5ndGg7IGkrKykgeworICAgICAgU3RyaW5nIGV4cGVjdGVkVHlwZVBhcmFtZXRlclZhbHVlID0gZXhwZWN0ZWRUeXBlUGFyYW1ldGVyVmFsdWVzW2ldOworICAgICAgYXNzZXJ0VHJ1ZShzdWJzdGl0dXRvci5zdWJzdGl0dXRlKHR5cGVQYXJhbWV0ZXJzW2ldKS5lcXVhbHNUb1RleHQoZXhwZWN0ZWRUeXBlUGFyYW1ldGVyVmFsdWUpKTsKKyAgICB9CisgICAgUHNpVHlwZSB0eXBlID0gKChQc2lFeHByZXNzaW9uKXJlZkVsZW1lbnQuZ2V0UGFyZW50KCkpLmdldFR5cGUoKTsKKyAgICBhc3NlcnRUcnVlKHR5cGUuZXF1YWxzVG9UZXh0KGV4cGVjdGVkQ2FsbFR5cGUpKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RSYXdNZXRob2QxKCkgdGhyb3dzIEV4Y2VwdGlvbnsKKyAgICBQc2lKYXZhUmVmZXJlbmNlIHJlZiA9IChQc2lKYXZhUmVmZXJlbmNlKSBjb25maWd1cmVCeUZpbGUoKTsKKyAgICBQc2lFbGVtZW50IHRhcmdldCA9IHJlZi5yZXNvbHZlKCk7CisgICAgYXNzZXJ0VGhhdCh0YXJnZXQsIGluc3RhbmNlT2YoUHNpTWV0aG9kLmNsYXNzKSk7CisgIH0KKyAgcHVibGljIHZvaWQgdGVzdERlcGVuZGluZ1BhcmFtczIoKSB0aHJvd3MgRXhjZXB0aW9ueworICAgIFBzaUphdmFSZWZlcmVuY2UgcmVmID0gKFBzaUphdmFSZWZlcmVuY2UpIGNvbmZpZ3VyZUJ5RmlsZSgpOworICAgIGZpbmFsIEphdmFSZXNvbHZlUmVzdWx0IHJlc3VsdCA9IHJlZi5hZHZhbmNlZFJlc29sdmUodHJ1ZSk7CisgICAgYXNzZXJ0VHJ1ZShyZXN1bHQuaXNWYWxpZFJlc3VsdCgpKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RUeXBlSW5mZXJlbmNlMSgpIHRocm93cyBFeGNlcHRpb257CisgICAgUHNpSmF2YVJlZmVyZW5jZSByZWYgPSAoUHNpSmF2YVJlZmVyZW5jZSkgY29uZmlndXJlQnlGaWxlKCk7CisgICAgZmluYWwgSmF2YVJlc29sdmVSZXN1bHQgcmVzdWx0ID0gcmVmLmFkdmFuY2VkUmVzb2x2ZSh0cnVlKTsKKyAgICBhc3NlcnROb3ROdWxsKHJlc3VsdC5nZXRFbGVtZW50KCkpOworICB9CisKKworICBwdWJsaWMgdm9pZCB0ZXN0UmF3VnNHZW5lcmljQ29uZmxpY3QoKSB0aHJvd3MgRXhjZXB0aW9ueworICAgIFBzaUphdmFSZWZlcmVuY2UgcmVmID0gKFBzaUphdmFSZWZlcmVuY2UpIGNvbmZpZ3VyZUJ5RmlsZSgpOworICAgIGZpbmFsIEphdmFSZXNvbHZlUmVzdWx0IHJlc3VsdCA9IHJlZi5hZHZhbmNlZFJlc29sdmUodHJ1ZSk7CisgICAgYXNzZXJ0UmVzb2x2ZXNUb01ldGhvZEluQ2xhc3MocmVzdWx0LCAiQSIpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFJhd0luaGVyaXRhbmNlQ29uZmxpY3QoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBQc2lKYXZhUmVmZXJlbmNlIHJlZiA9IChQc2lKYXZhUmVmZXJlbmNlKWNvbmZpZ3VyZUJ5RmlsZSgpOworICAgIGZpbmFsIEphdmFSZXNvbHZlUmVzdWx0W10gcmVzdWx0ID0gcmVmLm11bHRpUmVzb2x2ZShmYWxzZSk7CisgICAgYXNzZXJ0RXF1YWxzKCJGYWxzZSBhbWJpZ3VpdHkiLCAxLCByZXN1bHQubGVuZ3RoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RSYXdWc0dlbmVyaWNDb25mbGljdEluQ2FzZU9mT3ZlcnJpZGUoKSB0aHJvd3MgRXhjZXB0aW9ueworICAgIFBzaUphdmFSZWZlcmVuY2UgcmVmID0gKFBzaUphdmFSZWZlcmVuY2UpIGNvbmZpZ3VyZUJ5RmlsZSgpOworICAgIGZpbmFsIEphdmFSZXNvbHZlUmVzdWx0IHJlc3VsdCA9IHJlZi5hZHZhbmNlZFJlc29sdmUodHJ1ZSk7CisgICAgYXNzZXJ0UmVzb2x2ZXNUb01ldGhvZEluQ2xhc3MocmVzdWx0LCAiQiIpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFJhd1ZzR2VuZXJpY0NvbmZsaWN0SW5DYXNlT2ZPdmVycmlkZTIoKSB0aHJvd3MgRXhjZXB0aW9ueworICAgIFBzaUphdmFSZWZlcmVuY2UgcmVmID0gKFBzaUphdmFSZWZlcmVuY2UpIGNvbmZpZ3VyZUJ5RmlsZSgpOworICAgIGZpbmFsIEphdmFSZXNvbHZlUmVzdWx0IHJlc3VsdCA9IHJlZi5hZHZhbmNlZFJlc29sdmUodHJ1ZSk7CisgICAgYXNzZXJ0UmVzb2x2ZXNUb01ldGhvZEluQ2xhc3MocmVzdWx0LCAiVGVzdFByb2Nlc3NvciIpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEF1dG9ib3hpbmdBbmRXaWRlbmluZygpIHRocm93cyBFeGNlcHRpb257CisgICAgUHNpSmF2YVJlZmVyZW5jZSByZWYgPSAoUHNpSmF2YVJlZmVyZW5jZSkgY29uZmlndXJlQnlGaWxlKCk7CisgICAgZmluYWwgSmF2YVJlc29sdmVSZXN1bHQgcmVzdWx0ID0gcmVmLmFkdmFuY2VkUmVzb2x2ZSh0cnVlKTsKKyAgICBhc3NlcnROb3ROdWxsKHJlc3VsdC5nZXRFbGVtZW50KCkpOworICAgIGFzc2VydFRydWUocmVzdWx0LmlzVmFsaWRSZXN1bHQoKSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0U09FKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgUHNpUmVmZXJlbmNlIHJlZiA9IGNvbmZpZ3VyZUJ5RmlsZSgpOworICAgIHJlZi5yZXNvbHZlKCk7CisgIH0KKyAgcHVibGljIHZvaWQgdGVzdEhpZGluZ1N1cGVyUHJpdmF0ZSgpIHRocm93cyBFeGNlcHRpb24geworICAgIFBzaUphdmFSZWZlcmVuY2UgcmVmID0gKFBzaUphdmFSZWZlcmVuY2UpY29uZmlndXJlQnlGaWxlKCk7CisgICAgZmluYWwgSmF2YVJlc29sdmVSZXN1bHQgcmVzdWx0ID0gcmVmLmFkdmFuY2VkUmVzb2x2ZSh0cnVlKTsKKyAgICBhc3NlcnRSZXNvbHZlc1RvTWV0aG9kSW5DbGFzcyhyZXN1bHQsICJTIik7CisgIH0KKyAgcHVibGljIHZvaWQgdGVzdE5lc3RlZFR5cGVQYXJhbXMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBQc2lKYXZhUmVmZXJlbmNlIHJlZiA9IChQc2lKYXZhUmVmZXJlbmNlKWNvbmZpZ3VyZUJ5RmlsZSgpOworICAgIGZpbmFsIEphdmFSZXNvbHZlUmVzdWx0IHJlc3VsdCA9IHJlZi5hZHZhbmNlZFJlc29sdmUodHJ1ZSk7CisgICAgYXNzZXJ0UmVzb2x2ZXNUb01ldGhvZEluQ2xhc3MocmVzdWx0LCAiVGVzdEltcGwiKTsKKyAgfQorICBwdWJsaWMgdm9pZCB0ZXN0VHlwZVBhcmFtQm91bmRDb25mbGljdCgpIHRocm93cyBFeGNlcHRpb24geworICAgIFBzaUphdmFSZWZlcmVuY2UgcmVmID0gKFBzaUphdmFSZWZlcmVuY2UpY29uZmlndXJlQnlGaWxlKCk7CisgICAgZmluYWwgSmF2YVJlc29sdmVSZXN1bHQgcmVzdWx0ID0gcmVmLmFkdmFuY2VkUmVzb2x2ZSh0cnVlKTsKKyAgICBhc3NlcnRSZXNvbHZlc1RvTWV0aG9kSW5DbGFzcyhyZXN1bHQsICJUZXN0ZXJnZW4iKTsKKyAgfQorICBwdWJsaWMgdm9pZCB0ZXN0QW1iaWd1b3VzQm94aW5nKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgUHNpSmF2YVJlZmVyZW5jZSByZWYgPSAoUHNpSmF2YVJlZmVyZW5jZSljb25maWd1cmVCeUZpbGUoKTsKKyAgICBmaW5hbCBKYXZhUmVzb2x2ZVJlc3VsdCByZXN1bHQgPSByZWYuYWR2YW5jZWRSZXNvbHZlKHRydWUpOworICAgIGFzc2VydEZhbHNlKHJlc3VsdC5pc1ZhbGlkUmVzdWx0KCkpOworCisgICAgSmF2YVJlc29sdmVSZXN1bHRbXSByZXN1bHRzID0gcmVmLm11bHRpUmVzb2x2ZShmYWxzZSk7CisgICAgYXNzZXJ0RXF1YWxzKDIsIHJlc3VsdHMubGVuZ3RoKTsKKyAgICBhc3NlcnRFcXVhbHMoImYiLCAoKFBzaU1ldGhvZClyZXN1bHRzWzBdLmdldEVsZW1lbnQoKSkuZ2V0TmFtZSgpKTsKKyAgICBhc3NlcnRFcXVhbHMoImYiLCAoKFBzaU1ldGhvZClyZXN1bHRzWzFdLmdldEVsZW1lbnQoKSkuZ2V0TmFtZSgpKTsKKyAgfQorICAKKyAgcHVibGljIHZvaWQgdGVzdFN0YXRpY01ldGhvZEluU3ViY2xhc3MoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBQc2lKYXZhUmVmZXJlbmNlIHJlZiA9IChQc2lKYXZhUmVmZXJlbmNlKWNvbmZpZ3VyZUJ5RmlsZSgpOworICAgIGZpbmFsIEphdmFSZXNvbHZlUmVzdWx0IHJlc3VsdCA9IHJlZi5hZHZhbmNlZFJlc29sdmUodHJ1ZSk7CisgICAgYXNzZXJ0VHJ1ZShyZXN1bHQuaXNWYWxpZFJlc3VsdCgpKTsKKworICAgIGFzc2VydFJlc29sdmVzVG9NZXRob2RJbkNsYXNzKHJlc3VsdCwgIlNvbWVTdWJDbGFzcyIpOworICB9CisKKyAgcHJpdmF0ZSBzdGF0aWMgdm9pZCBhc3NlcnRSZXNvbHZlc1RvTWV0aG9kSW5DbGFzcyhKYXZhUmVzb2x2ZVJlc3VsdCByZXN1bHQsIEBOb25ObHMgU3RyaW5nIG5hbWUpIHsKKyAgICBQc2lNZXRob2QgbWV0aG9kID0gKFBzaU1ldGhvZClyZXN1bHQuZ2V0RWxlbWVudCgpOworICAgIGFzc2VydE5vdE51bGwobWV0aG9kKTsKKyAgICBhc3NlcnRUcnVlKHJlc3VsdC5pc1ZhbGlkUmVzdWx0KCkpOworICAgIGFzc2VydEVxdWFscyhuYW1lLCBtZXRob2QuZ2V0Q29udGFpbmluZ0NsYXNzKCkuZ2V0TmFtZSgpKTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL3BzaS9yZXNvbHZlL1Jlc29sdmVNZXRob2RUZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovcHNpL3Jlc29sdmUvUmVzb2x2ZU1ldGhvZFRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNzQ0ODNiCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL3BzaS9yZXNvbHZlL1Jlc29sdmVNZXRob2RUZXN0LmphdmEKQEAgLTAsMCArMSwyOTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwMC0yMDEyIEpldEJyYWlucyBzLnIuby4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCitwYWNrYWdlIGNvbS5pbnRlbGxpai5wc2kucmVzb2x2ZTsKKworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLnByb2plY3RSb290cy5TZGs7CitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkucm9vdHMuTGFuZ3VhZ2VMZXZlbFByb2plY3RFeHRlbnNpb247CitpbXBvcnQgY29tLmludGVsbGlqLnBvbS5qYXZhLkxhbmd1YWdlTGV2ZWw7CitpbXBvcnQgY29tLmludGVsbGlqLnBzaS4qOworaW1wb3J0IGNvbS5pbnRlbGxpai5wc2kuaW5mb3MuTWV0aG9kQ2FuZGlkYXRlSW5mbzsKK2ltcG9ydCBjb20uaW50ZWxsaWoudGVzdEZyYW1ld29yay5JZGVhVGVzdFV0aWw7CitpbXBvcnQgY29tLmludGVsbGlqLnRlc3RGcmFtZXdvcmsuUmVzb2x2ZVRlc3RDYXNlOworCitwdWJsaWMgY2xhc3MgUmVzb2x2ZU1ldGhvZFRlc3QgZXh0ZW5kcyBSZXNvbHZlVGVzdENhc2UgeworICBAT3ZlcnJpZGUKKyAgcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBzdXBlci5zZXRVcCgpOworICAgIExhbmd1YWdlTGV2ZWxQcm9qZWN0RXh0ZW5zaW9uLmdldEluc3RhbmNlKG15SmF2YUZhY2FkZS5nZXRQcm9qZWN0KCkpLnNldExhbmd1YWdlTGV2ZWwoTGFuZ3VhZ2VMZXZlbC5KREtfMV81KTsKKyAgfQorCisgIEBPdmVycmlkZQorICBwcm90ZWN0ZWQgU2RrIGdldFRlc3RQcm9qZWN0SmRrKCkgeworICAgIHJldHVybiBJZGVhVGVzdFV0aWwuZ2V0TW9ja0pkazE0KCk7CisgIH0KKworICBwcml2YXRlIFBzaUVsZW1lbnQgcmVzb2x2ZSgpIHRocm93cyBFeGNlcHRpb24geworICAgIFBzaVJlZmVyZW5jZSByZWYgPSBjb25maWd1cmVCeUZpbGUoIm1ldGhvZC8iICsgZ2V0VGVzdE5hbWUoZmFsc2UpICsgIi5qYXZhIik7CisgICAgcmV0dXJuIHJlZi5yZXNvbHZlKCk7CisgIH0KKworICBwcml2YXRlIEphdmFSZXNvbHZlUmVzdWx0IGFkdmFuY2VkUmVzb2x2ZSgpIHRocm93cyBFeGNlcHRpb24geworICAgIFBzaUphdmFDb2RlUmVmZXJlbmNlRWxlbWVudCByZWYgPSAoUHNpSmF2YUNvZGVSZWZlcmVuY2VFbGVtZW50KWNvbmZpZ3VyZUJ5RmlsZSgibWV0aG9kLyIgKyBnZXRUZXN0TmFtZShmYWxzZSkgKyAiLmphdmEiKTsKKyAgICByZXR1cm4gcmVmLmFkdmFuY2VkUmVzb2x2ZSh0cnVlKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RTaG9ydFZzSW50KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgUHNpRWxlbWVudCB0YXJnZXQgPSByZXNvbHZlKCk7CisgICAgYXNzZXJ0VHJ1ZSh0YXJnZXQgaW5zdGFuY2VvZiBQc2lNZXRob2QpOworICAgIFBzaVBhcmFtZXRlciBwYXJtID0gKChQc2lNZXRob2QpdGFyZ2V0KS5nZXRQYXJhbWV0ZXJMaXN0KCkuZ2V0UGFyYW1ldGVycygpWzBdOworICAgIGFzc2VydEVxdWFscyhQc2lUeXBlLklOVCwgcGFybS5nZXRUeXBlKCkpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFNpbXBsZSgpIHRocm93cyBFeGNlcHRpb24geworICAgIFBzaUVsZW1lbnQgdGFyZ2V0ID0gcmVzb2x2ZSgpOworICAgIGFzc2VydFRydWUodGFyZ2V0IGluc3RhbmNlb2YgUHNpTWV0aG9kKTsKKyAgICBhc3NlcnRFcXVhbHMoIm1ldGhvZCIsICgoUHNpTWV0aG9kKSB0YXJnZXQpLmdldE5hbWUoKSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0SW5kZXhPZigpIHRocm93cyBFeGNlcHRpb257CisgICAgUHNpRWxlbWVudCB0YXJnZXQgPSByZXNvbHZlKCk7CisgICAgYXNzZXJ0VHJ1ZSh0YXJnZXQgaW5zdGFuY2VvZiBQc2lNZXRob2QpOworICAgIFBzaVBhcmFtZXRlciBwYXJtID0gKChQc2lNZXRob2QpdGFyZ2V0KS5nZXRQYXJhbWV0ZXJMaXN0KCkuZ2V0UGFyYW1ldGVycygpWzBdOworICAgIGFzc2VydEVxdWFscyhQc2lUeXBlLklOVCwgcGFybS5nZXRUeXBlKCkpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFN1cGVyMSgpIHRocm93cyBFeGNlcHRpb257CisgICAgUHNpRWxlbWVudCB0YXJnZXQgPSByZXNvbHZlKCk7CisgICAgYXNzZXJ0VHJ1ZSh0YXJnZXQgaW5zdGFuY2VvZiBQc2lNZXRob2QpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEluaGVyaXQxKCkgdGhyb3dzIEV4Y2VwdGlvbnsKKyAgICBQc2lFbGVtZW50IHRhcmdldCA9IHJlc29sdmUoKTsKKyAgICBhc3NlcnRUcnVlKHRhcmdldCBpbnN0YW5jZW9mIFBzaU1ldGhvZCk7CisgICAgYXNzZXJ0VHJ1ZSh0YXJnZXQuZ2V0UGFyZW50KCkgaW5zdGFuY2VvZiBQc2lDbGFzcyk7CisgICAgYXNzZXJ0RXF1YWxzKCJCIiwgKChQc2lDbGFzcyl0YXJnZXQuZ2V0UGFyZW50KCkpLmdldFF1YWxpZmllZE5hbWUoKSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0TmV4dE1ldGhvZCgpIHRocm93cyBFeGNlcHRpb257CisgICAgUHNpRWxlbWVudCB0YXJnZXQgPSByZXNvbHZlKCk7CisgICAgYXNzZXJ0VHJ1ZSh0YXJnZXQgaW5zdGFuY2VvZiBQc2lNZXRob2QpOworICAgIGFzc2VydEVxdWFscyhQc2lUeXBlLkJPT0xFQU4sICgoUHNpTWV0aG9kKXRhcmdldCkuZ2V0UGFyYW1ldGVyTGlzdCgpLmdldFBhcmFtZXRlcnMoKVsxXS5nZXRUeXBlKCkpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdE1ldGhvZENvbmZsaWN0MSgpIHRocm93cyBFeGNlcHRpb257CisgICAgUHNpRWxlbWVudCB0YXJnZXQgPSByZXNvbHZlKCk7CisgICAgYXNzZXJ0TnVsbCh0YXJnZXQpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFZhbHVlT2YoKSB0aHJvd3MgRXhjZXB0aW9ueworICAgIFBzaUVsZW1lbnQgdGFyZ2V0ID0gcmVzb2x2ZSgpOworICAgIGFzc2VydFRydWUodGFyZ2V0IGluc3RhbmNlb2YgUHNpTWV0aG9kKTsKKyAgICBhc3NlcnRFcXVhbHMoUHNpVHlwZS5JTlQsICgoUHNpTWV0aG9kKXRhcmdldCkuZ2V0UGFyYW1ldGVyTGlzdCgpLmdldFBhcmFtZXRlcnMoKVswXS5nZXRUeXBlKCkpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdE1ldGhvZEZyb21Bbm9uQmFzZSgpIHRocm93cyBFeGNlcHRpb257CisgICAgUHNpRWxlbWVudCB0YXJnZXQgPSByZXNvbHZlKCk7CisgICAgYXNzZXJ0VHJ1ZSh0YXJnZXQgaW5zdGFuY2VvZiBQc2lNZXRob2QpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFNDUjU4NTkoKSB0aHJvd3MgRXhjZXB0aW9ueworICAgIFBzaUVsZW1lbnQgdGFyZ2V0ID0gcmVzb2x2ZSgpOworICAgIGFzc2VydFRydWUodGFyZ2V0IGluc3RhbmNlb2YgUHNpTWV0aG9kKTsKKyAgICBQc2lQYXJhbWV0ZXJbXSBwYXJtcyA9ICgoUHNpTWV0aG9kKXRhcmdldCkuZ2V0UGFyYW1ldGVyTGlzdCgpLmdldFBhcmFtZXRlcnMoKTsKKyAgICBhc3NlcnRFcXVhbHMoIkRlcml2ZWQiLCBwYXJtc1swXS5nZXRUeXBlKCkuZ2V0UHJlc2VudGFibGVUZXh0KCkpOworICAgIGFzc2VydEVxdWFscygiRGVyaXZlZCIsIHBhcm1zWzFdLmdldFR5cGUoKS5nZXRQcmVzZW50YWJsZVRleHQoKSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0UHJlZmVyUHVibGljKCkgdGhyb3dzIEV4Y2VwdGlvbnsKKyAgICBQc2lFbGVtZW50IHRhcmdldCA9IHJlc29sdmUoKTsKKyAgICBhc3NlcnRUcnVlKHRhcmdldCBpbnN0YW5jZW9mIFBzaU1ldGhvZCk7CisgICAgYXNzZXJ0VHJ1ZSgoKFBzaU1ldGhvZCl0YXJnZXQpLmhhc01vZGlmaWVyUHJvcGVydHkoUHNpTW9kaWZpZXIuUFVCTElDKSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0UmVtb3ZlMSgpIHRocm93cyBFeGNlcHRpb257CisgICAgUHNpRWxlbWVudCB0YXJnZXQgPSByZXNvbHZlKCk7CisgICAgYXNzZXJ0VHJ1ZSh0YXJnZXQgaW5zdGFuY2VvZiBQc2lNZXRob2QpOworICAgIGFzc2VydFRydWUodGFyZ2V0LmdldFBhcmVudCgpIGluc3RhbmNlb2YgUHNpQ2xhc3MpOworICAgIGFzc2VydEVxdWFscygiUmVtb3ZlMS5BIiwgKChQc2lDbGFzcyl0YXJnZXQuZ2V0UGFyZW50KCkpLmdldFF1YWxpZmllZE5hbWUoKSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0UmVtb3ZlMigpIHRocm93cyBFeGNlcHRpb257CisgICAgUHNpRWxlbWVudCB0YXJnZXQgPSByZXNvbHZlKCk7CisgICAgYXNzZXJ0VHJ1ZSh0YXJnZXQgaW5zdGFuY2VvZiBQc2lNZXRob2QpOworICAgIGFzc2VydFRydWUodGFyZ2V0LmdldFBhcmVudCgpIGluc3RhbmNlb2YgUHNpQ2xhc3MpOworICAgIGFzc2VydEVxdWFscygiamF2YS51dGlsLkFic3RyYWN0Q29sbGVjdGlvbiIsICgoUHNpQ2xhc3MpdGFyZ2V0LmdldFBhcmVudCgpKS5nZXRRdWFsaWZpZWROYW1lKCkpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEFycmF5MSgpIHRocm93cyBFeGNlcHRpb257CisgICAgUHNpRWxlbWVudCB0YXJnZXQgPSByZXNvbHZlKCk7CisgICAgYXNzZXJ0VHJ1ZSh0YXJnZXQgaW5zdGFuY2VvZiBQc2lNZXRob2QpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEN5Y2xlMSgpIHRocm93cyBFeGNlcHRpb257CisgICAgUHNpRWxlbWVudCB0YXJnZXQgPSByZXNvbHZlKCk7CisgICAgYXNzZXJ0VHJ1ZSh0YXJnZXQgaW5zdGFuY2VvZiBQc2lNZXRob2QpOworICAgIGFzc2VydFRydWUodGFyZ2V0LmdldFBhcmVudCgpIGluc3RhbmNlb2YgUHNpQ2xhc3MpOworICAgIGFzc2VydEVxdWFscygiQ3ljbGUxLkMiLCAoKFBzaUNsYXNzKXRhcmdldC5nZXRQYXJlbnQoKSkuZ2V0UXVhbGlmaWVkTmFtZSgpKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RBbm9ueW1vdXNTdXBlcjEoKSB0aHJvd3MgRXhjZXB0aW9ueworICAgIFBzaUVsZW1lbnQgdGFyZ2V0ID0gcmVzb2x2ZSgpOworICAgIGFzc2VydFRydWUodGFyZ2V0IGluc3RhbmNlb2YgUHNpTWV0aG9kKTsKKyAgICBhc3NlcnRUcnVlKHRhcmdldC5nZXRQYXJlbnQoKSBpbnN0YW5jZW9mIFBzaUNsYXNzKTsKKyAgICBhc3NlcnRFcXVhbHMoIlRlc3QxLkEiLCAoKFBzaUNsYXNzKXRhcmdldC5nZXRQYXJlbnQoKSkuZ2V0UXVhbGlmaWVkTmFtZSgpKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RCdWc3OTY4KCkgdGhyb3dzIEV4Y2VwdGlvbnsKKyAgICBQc2lFbGVtZW50IHRhcmdldCA9IHJlc29sdmUoKTsKKyAgICBhc3NlcnRUcnVlKHRhcmdldCBpbnN0YW5jZW9mIFBzaU1ldGhvZCk7CisgICAgYXNzZXJ0VHJ1ZSh0YXJnZXQuZ2V0UGFyZW50KCkgaW5zdGFuY2VvZiBQc2lDbGFzcyk7CisgICAgYXNzZXJ0RXF1YWxzKCJCdWc3OTY4LkJhciIsICgoUHNpQ2xhc3MpdGFyZ2V0LmdldFBhcmVudCgpKS5nZXRRdWFsaWZpZWROYW1lKCkpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEluaGVyYW5jZVdpdGhFeHRlbmRzQ29uZmxpY3QoKSB0aHJvd3MgRXhjZXB0aW9ueworICAgIFBzaUVsZW1lbnQgdGFyZ2V0ID0gcmVzb2x2ZSgpOworICAgIGFzc2VydFRydWUodGFyZ2V0IGluc3RhbmNlb2YgUHNpTWV0aG9kKTsKKyAgICBhc3NlcnRUcnVlKHRhcmdldC5nZXRQYXJlbnQoKSBpbnN0YW5jZW9mIFBzaUNsYXNzKTsKKyAgICBhc3NlcnRFcXVhbHMoIkIiLCAoKFBzaUNsYXNzKXRhcmdldC5nZXRQYXJlbnQoKSkuZ2V0UXVhbGlmaWVkTmFtZSgpKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RTb3V0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgUHNpRWxlbWVudCB0YXJnZXQgPSByZXNvbHZlKCk7CisgICAgYXNzZXJ0VHJ1ZSh0YXJnZXQgaW5zdGFuY2VvZiBQc2lNZXRob2QpOworICAgIGFzc2VydEVxdWFscygicHJpbnRsbiIsICgoUHNpTWV0aG9kKXRhcmdldCkuZ2V0TmFtZSgpKTsKKyAgfQorCisgIC8qCisgIHB1YmxpYyB2b2lkIHRlc3RTQ1I1MTM0KCkgdGhyb3dzIEV4Y2VwdGlvbnsKKyAgICBQc2lSZWZlcmVuY2UgcmVmID0gY29uZmlndXJlQnlGaWxlKCJtZXRob2QvU0NSNTEzNC5qYXZhIik7CisgICAgUHNpRWxlbWVudCB0YXJnZXQgPSByZWYucmVzb2x2ZSgpOworICAgIGFzc2VydFRydWUodGFyZ2V0IGluc3RhbmNlb2YgUHNpTWV0aG9kKTsKKyAgICBQc2lQYXJhbWV0ZXIgcGFybSA9ICgoUHNpTWV0aG9kKXRhcmdldCkuZ2V0UGFyYW1ldGVyTGlzdCgpLmdldFBhcmFtZXRlcnMoKVswXTsKKyAgICBhc3NlcnRUcnVlKHBhcm0uZ2V0VHlwZSgpLmdldFRleHQoKS5lcXVhbHMoIkludGVnZXIiKSk7CisgIH0KKyAgKi8KKworICBwdWJsaWMgdm9pZCB0ZXN0UGFydGx5SW1wbGVtZW50MSgpIHRocm93cyBFeGNlcHRpb257CisgICAgUHNpRWxlbWVudCB0YXJnZXQgPSByZXNvbHZlKCk7CisgICAgYXNzZXJ0VHJ1ZSh0YXJnZXQgaW5zdGFuY2VvZiBQc2lNZXRob2QpOworICAgIGFzc2VydFRydWUodGFyZ2V0LmdldFBhcmVudCgpIGluc3RhbmNlb2YgUHNpQ2xhc3MpOworICAgIGFzc2VydEVxdWFscygiQS5QcmVkaWNhdGUiLCAoKFBzaUNsYXNzKXRhcmdldC5nZXRQYXJlbnQoKSkuZ2V0UXVhbGlmaWVkTmFtZSgpKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RUZXN0T3ZlcmxvYWRpbmcxKCkgdGhyb3dzIEV4Y2VwdGlvbnsKKyAgICBQc2lFbGVtZW50IHRhcmdldCA9IHJlc29sdmUoKTsKKyAgICBhc3NlcnRUcnVlKHRhcmdldCBpbnN0YW5jZW9mIFBzaU1ldGhvZCk7CisgICAgYXNzZXJ0VHJ1ZSh0YXJnZXQuZ2V0UGFyZW50KCkgaW5zdGFuY2VvZiBQc2lDbGFzcyk7CisgICAgYXNzZXJ0RXF1YWxzKCJCIiwgKChQc2lDbGFzcykgdGFyZ2V0LmdldFBhcmVudCgpKS5nZXROYW1lKCkpOworICB9CisKKworICBwdWJsaWMgdm9pZCB0ZXN0U3VwZXJPZk9iamVjdCgpIHRocm93cyBFeGNlcHRpb24geworICAgIFBzaUVsZW1lbnQgdGFyZ2V0ID0gcmVzb2x2ZSgpOworICAgIGFzc2VydFRydWUodGFyZ2V0IGluc3RhbmNlb2YgUHNpTWV0aG9kKTsKKyAgICBmaW5hbCBQc2lNZXRob2QgbWV0aG9kID0gKFBzaU1ldGhvZCl0YXJnZXQ7CisgICAgYXNzZXJ0RXF1YWxzKCJjbG9uZSIsIG1ldGhvZC5nZXROYW1lKCkpOworICAgIGFzc2VydEVxdWFscyhDb21tb25DbGFzc05hbWVzLkpBVkFfTEFOR19PQkpFQ1QsIG1ldGhvZC5nZXRDb250YWluaW5nQ2xhc3MoKS5nZXRRdWFsaWZpZWROYW1lKCkpOworICB9CisKKworICBwdWJsaWMgdm9pZCB0ZXN0U3RhdGljVlNOb25TdGF0aWMoKSB0aHJvd3MgRXhjZXB0aW9ueworICAgIFBzaUVsZW1lbnQgdGFyZ2V0ID0gcmVzb2x2ZSgpOworICAgIGFzc2VydFRydWUodGFyZ2V0IGluc3RhbmNlb2YgUHNpTWV0aG9kKTsKKyAgICBQc2lNZXRob2QgbWV0aG9kID0gKFBzaU1ldGhvZCkgdGFyZ2V0OworICAgIGFzc2VydEVxdWFscygxLCBtZXRob2QuZ2V0UGFyYW1ldGVyTGlzdCgpLmdldFBhcmFtZXRlcnNDb3VudCgpKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RDbG9uZSgpIHRocm93cyBFeGNlcHRpb257CisgICAgUHNpRWxlbWVudCB0YXJnZXQgPSByZXNvbHZlKCk7CisgICAgYXNzZXJ0VHJ1ZSh0YXJnZXQgaW5zdGFuY2VvZiBQc2lNZXRob2QpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFRocm93V2l0aG91dE5ldygpIHRocm93cyBFeGNlcHRpb257CisgICAgUHNpRWxlbWVudCB0YXJnZXQgPSByZXNvbHZlKCk7CisgICAgYXNzZXJ0TnVsbCh0YXJnZXQpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFRocm93V2l0aG91dE5ldzIoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBQc2lFbGVtZW50IHRhcmdldCA9IGFkdmFuY2VkUmVzb2x2ZSgpLmdldEVsZW1lbnQoKTsKKyAgICBhc3NlcnRUcnVlKHRhcmdldCBpbnN0YW5jZW9mIFBzaUNsYXNzKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3ROb3RBY2Nlc3NpYmxlQWNjZXNzQ2xhc3MoKSB0aHJvd3MgRXhjZXB0aW9ueworICAgIEphdmFSZXNvbHZlUmVzdWx0IHJlc3VsdCA9IGFkdmFuY2VkUmVzb2x2ZSgpOworICAgIGFzc2VydEZhbHNlKHJlc3VsdC5pc0FjY2Vzc2libGUoKSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0SW5uZXJDbGFzcygpIHRocm93cyBFeGNlcHRpb257CisgICAgSmF2YVJlc29sdmVSZXN1bHQgcmVzdWx0ID0gYWR2YW5jZWRSZXNvbHZlKCk7CisgICAgYXNzZXJ0Tm90TnVsbChyZXN1bHQuZ2V0RWxlbWVudCgpKTsKKyAgICBhc3NlcnRUcnVlKHJlc3VsdCBpbnN0YW5jZW9mIE1ldGhvZENhbmRpZGF0ZUluZm8pOworICAgIGFzc2VydFRydWUoIXJlc3VsdC5pc1ZhbGlkUmVzdWx0KCkpOworICAgIGFzc2VydFRydWUoISgoTWV0aG9kQ2FuZGlkYXRlSW5mbylyZXN1bHQpLmlzQXBwbGljYWJsZSgpKTsKKyAgICBmaW5hbCBQc2lDbGFzcyBhQ2xhc3MgPSAoKFBzaU1ldGhvZClyZXN1bHQuZ2V0RWxlbWVudCgpKS5nZXRDb250YWluaW5nQ2xhc3MoKTsKKyAgICBhc3NlcnROb3ROdWxsKGFDbGFzcy5nZXRDb250YWluaW5nQ2xhc3MoKSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0UHJpdmF0ZUluU3VwZXJJbm5lcigpIHRocm93cyBFeGNlcHRpb257CisgICAgSmF2YVJlc29sdmVSZXN1bHQgcmVzdWx0ID0gYWR2YW5jZWRSZXNvbHZlKCk7CisgICAgYXNzZXJ0Tm90TnVsbChyZXN1bHQuZ2V0RWxlbWVudCgpKTsKKyAgICBhc3NlcnRUcnVlKHJlc3VsdCBpbnN0YW5jZW9mIE1ldGhvZENhbmRpZGF0ZUluZm8pOworICAgIGFzc2VydFRydWUoIXJlc3VsdC5pc1ZhbGlkUmVzdWx0KCkpOworICAgIGFzc2VydFRydWUoIXJlc3VsdC5pc1N0YXRpY3NTY29wZUNvcnJlY3QoKSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0UHJpdmF0ZUluU3VwZXJJbm5lcjEoKSB0aHJvd3MgRXhjZXB0aW9ueworICAgIEphdmFSZXNvbHZlUmVzdWx0IHJlc3VsdCA9IGFkdmFuY2VkUmVzb2x2ZSgpOworICAgIGFzc2VydE5vdE51bGwocmVzdWx0LmdldEVsZW1lbnQoKSk7CisgICAgYXNzZXJ0VHJ1ZShyZXN1bHQgaW5zdGFuY2VvZiBNZXRob2RDYW5kaWRhdGVJbmZvKTsKKyAgICBhc3NlcnRUcnVlKHJlc3VsdC5pc1ZhbGlkUmVzdWx0KCkpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFByb3RlY3RlZE0oKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBKYXZhUmVzb2x2ZVJlc3VsdCByZXN1bHQgPSBhZHZhbmNlZFJlc29sdmUoKTsKKyAgICBhc3NlcnRUcnVlKHJlc3VsdC5nZXRFbGVtZW50KCkgaW5zdGFuY2VvZiBQc2lNZXRob2QpOworICAgIGFzc2VydEZhbHNlKHJlc3VsdC5pc0FjY2Vzc2libGUoKSk7CisgIH0KKworICAvLyBUaGlzIHRlc3QgY29tcGxpbGUgYnV0IGl0IHNlZW1zIHRvIGJlIGEgYnVnLgorICAvL3B1YmxpYyB2b2lkIHRlc3REZXBlbmRpbmdQYXJhbXMxKCkgdGhyb3dzIEV4Y2VwdGlvbnsKKyAgLy8gIFBzaUphdmFSZWZlcmVuY2UgcmVmID0gKFBzaUphdmFSZWZlcmVuY2UpIGNvbmZpZ3VyZUJ5RmlsZSgibWV0aG9kL2dlbmVyaWNzL0RlcGVuZGluZ1BhcmFtcy5qYXZhIik7CisgIC8vICBmaW5hbCBKYXZhUmVzb2x2ZVJlc3VsdCByZXN1bHQgPSByZWYuYWR2YW5jZWRSZXNvbHZlKHRydWUpOworICAvLyAgYXNzZXJ0VHJ1ZShyZXN1bHQuaXNWYWxpZFJlc3VsdCgpKTsKKyAgLy99CisKKyAgcHVibGljIHZvaWQgdGVzdEltcGxlbWVudE9yZGVyKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgUHNpRWxlbWVudCB0YXJnZXQgPSByZXNvbHZlKCk7CisgICAgYXNzZXJ0VHJ1ZSh0YXJnZXQgaW5zdGFuY2VvZiBQc2lNZXRob2QpOworICAgIFBzaU1ldGhvZCBtZXRob2QgPSAoUHNpTWV0aG9kKSB0YXJnZXQ7CisgICAgYXNzZXJ0RXF1YWxzKCJJSSIsIG1ldGhvZC5nZXRDb250YWluaW5nQ2xhc3MoKS5nZXROYW1lKCkpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdE9iamVjdFZzSW50ZXJmYWNlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgUHNpRWxlbWVudCB0YXJnZXQgPSByZXNvbHZlKCk7CisgICAgYXNzZXJ0VHJ1ZSh0YXJnZXQgaW5zdGFuY2VvZiBQc2lNZXRob2QpOworICAgIFBzaU1ldGhvZCBtZXRob2QgPSAoUHNpTWV0aG9kKSB0YXJnZXQ7CisgICAgYXNzZXJ0RXF1YWxzKCJQdWJsaWNDbG9uZWFibGUiLCBtZXRob2QuZ2V0Q29udGFpbmluZ0NsYXNzKCkuZ2V0TmFtZSgpKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RNdWx0aXBsZUluaGVyaXRhbmNlUGF0aHNUb01ldGhvZCgpIHRocm93cyBFeGNlcHRpb24geworICAgIFBzaVJlZmVyZW5jZSByZWYgPSBjb25maWd1cmVCeUZpbGUoIm1ldGhvZC8iICsgZ2V0VGVzdE5hbWUoZmFsc2UpICsgIi5qYXZhIik7CisKKyAgICAvLyBqdXN0IGFzc3VtZSB0aGlzIGlzIGNhbGxlZCBieSBzb21lIGhpZ2hsaWdodGluZyBpbnNwZWN0aW9uL2ludGVudGlvbi9wYXNzIGJlZm9yZSB0aGUgcmVzb2x2ZQorICAgIGdldEphdmFGYWNhZGUoKS5maW5kQ2xhc3MoIk5OIikuZ2V0QWxsTWV0aG9kcygpOworCisgICAgUHNpRWxlbWVudCB0YXJnZXQgPSByZWYucmVzb2x2ZSgpOworICAgIGFzc2VydEluc3RhbmNlT2YodGFyZ2V0LCBQc2lNZXRob2QuY2xhc3MpOworICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovcHNpL3Jlc29sdmUvUmVzb2x2ZVZhcmFyZ3NNZXRob2RUZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovcHNpL3Jlc29sdmUvUmVzb2x2ZVZhcmFyZ3NNZXRob2RUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2EyYjRlMgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9wc2kvcmVzb2x2ZS9SZXNvbHZlVmFyYXJnc01ldGhvZFRlc3QuamF2YQpAQCAtMCwwICsxLDkxIEBACisvKgorICogQ29weXJpZ2h0IDIwMDAtMjAxMSBKZXRCcmFpbnMgcy5yLm8uCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworcGFja2FnZSBjb20uaW50ZWxsaWoucHNpLnJlc29sdmU7CisKK2ltcG9ydCBjb20uaW50ZWxsaWoucHNpLio7CitpbXBvcnQgb3JnLmpldGJyYWlucy5hbm5vdGF0aW9ucy5Ob25ObHM7CisKK2ltcG9ydCBzdGF0aWMgb3JnLmhhbWNyZXN0LmNvcmUuSXNJbnN0YW5jZU9mLmluc3RhbmNlT2Y7CitpbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuYXNzZXJ0VGhhdDsKKworcHVibGljIGNsYXNzIFJlc29sdmVWYXJhcmdzTWV0aG9kVGVzdCBleHRlbmRzIFJlc29sdmUxNVRlc3RDYXNlIHsKKworICBwdWJsaWMgdm9pZCB0ZXN0UHJpbWl0aXZlT2JqZWN0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KDEpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFByaW1pdGl2ZVN0cmluZygpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdCgyKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RPYmplY3RPYmplY3QoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoMik7CisgIH0KKworICAvL2J1ZyBpbiBqYXZhYzsgQHNlZSBqZGs3CisgIHB1YmxpYyB2b2lkIHRlc3RPYmplY3RPYmplY3RPYmplY3QoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoMik7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0U3RyaW5nT2JqZWN0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KDEpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFN0cmluZ09iamVjdFN0cmluZygpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdCgxKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RTdHJpbmdTdHJpbmdTdHJpbmcoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoMik7CisgIH0KKworICBwcml2YXRlIHZvaWQgZG9UZXN0KGludCByZXNvbHZlZCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZmluYWwgUHNpUmVmZXJlbmNlIHJlZiA9IGNvbmZpZ3VyZUJ5RmlsZSgpOworICAgIGFzc2VydFRoYXQocmVmLCBpbnN0YW5jZU9mKFBzaVJlZmVyZW5jZUV4cHJlc3Npb24uY2xhc3MpKTsKKyAgICBmaW5hbCBQc2lSZWZlcmVuY2VFeHByZXNzaW9uIHJlZkV4cHIgPSAoUHNpUmVmZXJlbmNlRXhwcmVzc2lvbilyZWY7CisgICAgUHNpQ2FsbEV4cHJlc3Npb24gY2FsbCA9IChQc2lDYWxsRXhwcmVzc2lvbikgcmVmRXhwci5nZXRQYXJlbnQoKTsKKyAgICBKYXZhUmVzb2x2ZVJlc3VsdCByZXNvbHZlUmVzdWx0ID0gY2FsbC5yZXNvbHZlTWV0aG9kR2VuZXJpY3MoKTsKKyAgICBQc2lFbGVtZW50IGVsZW1lbnQgPSByZXNvbHZlUmVzdWx0LmdldEVsZW1lbnQoKTsKKyAgICBpZiAocmVzb2x2ZWQgPT0gMSkgeworICAgICAgYXNzZXJ0Tm90TnVsbChlbGVtZW50KTsKKyAgICB9IGVsc2UgeworICAgICAgYXNzZXJ0TnVsbChlbGVtZW50KTsKKyAgICB9CisgICAgZmluYWwgSmF2YVJlc29sdmVSZXN1bHRbXSBjYW5kaWRhdGVzID0gcmVmRXhwci5tdWx0aVJlc29sdmUoZmFsc2UpOworICAgIGFzc2VydEVxdWFscyhyZXNvbHZlZCwgY2FuZGlkYXRlcy5sZW5ndGgpOworICB9CisKKyAgcHJpdmF0ZSBQc2lSZWZlcmVuY2UgY29uZmlndXJlQnlGaWxlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgcmV0dXJuIGNvbmZpZ3VyZUJ5RmlsZSgibWV0aG9kL3ZhcmFyZ3MvIiArIGdldFRlc3ROYW1lKGZhbHNlKSArICIuamF2YSIpOworICB9CisgIHByaXZhdGUgc3RhdGljIFBzaU1ldGhvZCBjaGVja1Jlc29sdmVzVW5pcXVlKGZpbmFsIFBzaVJlZmVyZW5jZSByZWYpIHsKKyAgICBhc3NlcnRUaGF0KHJlZiwgaW5zdGFuY2VPZihQc2lSZWZlcmVuY2VFeHByZXNzaW9uLmNsYXNzKSk7CisgICAgZmluYWwgUHNpUmVmZXJlbmNlRXhwcmVzc2lvbiByZWZFeHByID0gKFBzaVJlZmVyZW5jZUV4cHJlc3Npb24pcmVmOworICAgIGZpbmFsIFBzaUVsZW1lbnQgcGFyZW50ID0gcmVmRXhwci5nZXRQYXJlbnQoKTsKKyAgICBhc3NlcnRUaGF0KHBhcmVudCwgaW5zdGFuY2VPZihQc2lNZXRob2RDYWxsRXhwcmVzc2lvbi5jbGFzcykpOworICAgIGZpbmFsIFBzaU1ldGhvZENhbGxFeHByZXNzaW9uIGV4cHJlc3Npb24gPSAoUHNpTWV0aG9kQ2FsbEV4cHJlc3Npb24pcGFyZW50OworICAgIGZpbmFsIFBzaU1ldGhvZCBtZXRob2QgPSBleHByZXNzaW9uLnJlc29sdmVNZXRob2QoKTsKKyAgICBhc3NlcnROb3ROdWxsKG1ldGhvZCk7CisgICAgcmV0dXJuIG1ldGhvZDsKKyAgfQorCisgIHByaXZhdGUgc3RhdGljIHZvaWQgYXNzZXJ0UmVzb2x2ZXNUb01ldGhvZEluQ2xhc3MoSmF2YVJlc29sdmVSZXN1bHQgcmVzdWx0LCBATm9uTmxzIFN0cmluZyBuYW1lKSB7CisgICAgUHNpTWV0aG9kIG1ldGhvZCA9IChQc2lNZXRob2QpcmVzdWx0LmdldEVsZW1lbnQoKTsKKyAgICBhc3NlcnROb3ROdWxsKG1ldGhvZCk7CisgICAgYXNzZXJ0VHJ1ZShyZXN1bHQuaXNWYWxpZFJlc3VsdCgpKTsKKyAgICBhc3NlcnRFcXVhbHMobmFtZSwgbWV0aG9kLmdldENvbnRhaW5pbmdDbGFzcygpLmdldE5hbWUoKSk7CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9wc2kvcmVzb2x2ZS9SZXNvbHZlVmFyaWFibGUxNVRlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9wc2kvcmVzb2x2ZS9SZXNvbHZlVmFyaWFibGUxNVRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OTFjMDk1Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL3BzaS9yZXNvbHZlL1Jlc29sdmVWYXJpYWJsZTE1VGVzdC5qYXZhCkBAIC0wLDAgKzEsMzYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSmV0QnJhaW5zIHMuci5vLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICovCitwYWNrYWdlIGNvbS5pbnRlbGxpai5wc2kucmVzb2x2ZTsKKworaW1wb3J0IGNvbS5pbnRlbGxpai5wc2kuUHNpUmVmZXJlbmNlOworaW1wb3J0IGNvbS5pbnRlbGxpai5wc2kuSmF2YVJlc29sdmVSZXN1bHQ7CitpbXBvcnQgY29tLmludGVsbGlqLnBzaS5Qc2lKYXZhUmVmZXJlbmNlOworaW1wb3J0IGNvbS5pbnRlbGxpai5wc2kuUHNpRWxlbWVudDsKKworLyoqCisgKiBAYXV0aG9yIHZlbgorICovCitwdWJsaWMgY2xhc3MgUmVzb2x2ZVZhcmlhYmxlMTVUZXN0IGV4dGVuZHMgUmVzb2x2ZTE1VGVzdENhc2UgeworCisgIHB1YmxpYyB2b2lkIHRlc3REdXBsaWNhdGVTdGF0aWNJbXBvcnQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBQc2lSZWZlcmVuY2UgcmVmID0gY29uZmlndXJlKCk7CisgICAgZmluYWwgSmF2YVJlc29sdmVSZXN1bHQgcmVzdWx0ID0gKChQc2lKYXZhUmVmZXJlbmNlKXJlZikuYWR2YW5jZWRSZXNvbHZlKHRydWUpOworICAgIFBzaUVsZW1lbnQgdGFyZ2V0ID0gcmVzdWx0LmdldEVsZW1lbnQoKTsKKyAgICBhc3NlcnROb3ROdWxsKHRhcmdldCk7CisgICAgYXNzZXJ0VHJ1ZShyZXN1bHQuaXNWYWxpZFJlc3VsdCgpKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RSaG9tYkV4dGVuZGluZygpIHRocm93cyBFeGNlcHRpb24geworICAgIFBzaVJlZmVyZW5jZSByZWYgPSBjb25maWd1cmUoKTsKKyAgICBmaW5hbCBKYXZhUmVzb2x2ZVJlc3VsdCByZXN1bHQgPSAoKFBzaUphdmFSZWZlcmVuY2UpcmVmKS5hZHZhbmNlZFJlc29sdmUodHJ1ZSk7CisgICAgUHNpRWxlbWVudCB0YXJnZXQgPSByZXN1bHQuZ2V0RWxlbWVudCgpOworICAgIGFzc2VydE5vdE51bGwodGFyZ2V0KTsKKyAgICBhc3NlcnRUcnVlKHJlc3VsdC5pc1ZhbGlkUmVzdWx0KCkpOworICB9CisKKworICBwcml2YXRlIFBzaVJlZmVyZW5jZSBjb25maWd1cmUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICByZXR1cm4gY29uZmlndXJlQnlGaWxlKCJ2YXIxNS8iICsgZ2V0VGVzdE5hbWUoZmFsc2UpICsgIi5qYXZhIik7CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9wc2kvcmVzb2x2ZS9SZXNvbHZlVmFyaWFibGVUZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovcHNpL3Jlc29sdmUvUmVzb2x2ZVZhcmlhYmxlVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc5ZjhhYzIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovcHNpL3Jlc29sdmUvUmVzb2x2ZVZhcmlhYmxlVGVzdC5qYXZhCkBAIC0wLDAgKzEsMjUzIEBACitwYWNrYWdlIGNvbS5pbnRlbGxpai5wc2kucmVzb2x2ZTsKKworaW1wb3J0IGNvbS5pbnRlbGxpai5wc2kuKjsKK2ltcG9ydCBjb20uaW50ZWxsaWoucHNpLnNlYXJjaC5HbG9iYWxTZWFyY2hTY29wZTsKK2ltcG9ydCBjb20uaW50ZWxsaWoudGVzdEZyYW1ld29yay5QbGF0Zm9ybVRlc3RDYXNlOworaW1wb3J0IGNvbS5pbnRlbGxpai50ZXN0RnJhbWV3b3JrLlJlc29sdmVUZXN0Q2FzZTsKKworQFBsYXRmb3JtVGVzdENhc2UuV3JhcEluQ29tbWFuZAorcHVibGljIGNsYXNzIFJlc29sdmVWYXJpYWJsZVRlc3QgZXh0ZW5kcyBSZXNvbHZlVGVzdENhc2UgeworICBwdWJsaWMgdm9pZCB0ZXN0QW5vbnltb3VzQ29uc3RydWN0b3JBcmcoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBQc2lFbGVtZW50IHRhcmdldCA9IGNvbmZpZ3VyZUFuZFJlc29sdmUoKTsKKyAgICBhc3NlcnRUcnVlKHRhcmdldCBpbnN0YW5jZW9mIFBzaVBhcmFtZXRlcik7CisgICAgYXNzZXJ0RXF1YWxzKCJ2YWx1ZSIsICgoUHNpUGFyYW1ldGVyKXRhcmdldCkuZ2V0TmFtZSgpKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RMb2NhbFZhcmlhYmxlMSgpIHRocm93cyBFeGNlcHRpb24geworICAgIFBzaUVsZW1lbnQgdGFyZ2V0ID0gY29uZmlndXJlQW5kUmVzb2x2ZSgpOworICAgIGFzc2VydFRydWUodGFyZ2V0IGluc3RhbmNlb2YgUHNpTG9jYWxWYXJpYWJsZSk7CisgICAgYXNzZXJ0RXF1YWxzKCJ2YWx1ZSIsICgoUHNpTG9jYWxWYXJpYWJsZSl0YXJnZXQpLmdldE5hbWUoKSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0VmlzaWJpbGl0eTEoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBQc2lFbGVtZW50IHRhcmdldCA9IGNvbmZpZ3VyZUFuZFJlc29sdmUoKTsKKyAgICBhc3NlcnRUcnVlKHRhcmdldCBpbnN0YW5jZW9mIFBzaUZpZWxkKTsKKyAgICBhc3NlcnRFcXVhbHMoInZhcmlhYmxlIiwgKChQc2lGaWVsZCl0YXJnZXQpLmdldE5hbWUoKSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0VmlzaWJpbGl0eTIoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBQc2lFbGVtZW50IHRhcmdldCA9IGNvbmZpZ3VyZUFuZFJlc29sdmUoKTsKKyAgICBhc3NlcnRUcnVlKHRhcmdldCBpbnN0YW5jZW9mIFBzaUZpZWxkKTsKKyAgICBhc3NlcnRFcXVhbHMoImEiLCAoKFBzaUZpZWxkKXRhcmdldCkuZ2V0TmFtZSgpKTsKKyAgfQorCisgIHByaXZhdGUgUHNpRWxlbWVudCBjb25maWd1cmVBbmRSZXNvbHZlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgUHNpUmVmZXJlbmNlIHJlZiA9IGNvbmZpZ3VyZSgpOworICAgIFBzaUVsZW1lbnQgdGFyZ2V0ID0gcmVmLnJlc29sdmUoKTsKKyAgICByZXR1cm4gdGFyZ2V0OworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFZpc2liaWxpdHkzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgUHNpRWxlbWVudCB0YXJnZXQgPSBjb25maWd1cmVBbmRSZXNvbHZlKCk7CisgICAgYXNzZXJ0VHJ1ZSh0YXJnZXQgaW5zdGFuY2VvZiBQc2lGaWVsZCk7CisgICAgYXNzZXJ0RXF1YWxzKCJpIiwgKChQc2lGaWVsZCl0YXJnZXQpLmdldE5hbWUoKSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0VmlzaWJpbGl0eTQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBQc2lFbGVtZW50IHRhcmdldCA9IGNvbmZpZ3VyZUFuZFJlc29sdmUoKTsKKyAgICBhc3NlcnRFcXVhbHMoImEiLCAoKFBzaUxvY2FsVmFyaWFibGUpdGFyZ2V0KS5nZXROYW1lKCkpOworICAgIGFzc2VydFRydWUodGFyZ2V0IGluc3RhbmNlb2YgUHNpTG9jYWxWYXJpYWJsZSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0UXVhbGlmaWVkMSgpIHRocm93cyBFeGNlcHRpb24geworICAgIFBzaUVsZW1lbnQgdGFyZ2V0ID0gY29uZmlndXJlQW5kUmVzb2x2ZSgpOworICAgIGFzc2VydFRydWUodGFyZ2V0IGluc3RhbmNlb2YgUHNpRmllbGQpOworICAgIGFzc2VydEVxdWFscygiYSIsICgoUHNpRmllbGQpdGFyZ2V0KS5nZXROYW1lKCkpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFF1YWxpZmllZDIoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBQc2lFbGVtZW50IHRhcmdldCA9IGNvbmZpZ3VyZUFuZFJlc29sdmUoKTsKKyAgICBhc3NlcnRUcnVlKHRhcmdldCBpbnN0YW5jZW9mIFBzaUZpZWxkKTsKKyAgICBhc3NlcnRFcXVhbHMoImEiLCAoKFBzaUZpZWxkKXRhcmdldCkuZ2V0TmFtZSgpKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RRdWFsaWZpZWQzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgUHNpRWxlbWVudCB0YXJnZXQgPSBjb25maWd1cmVBbmRSZXNvbHZlKCk7CisgICAgYXNzZXJ0VHJ1ZSh0YXJnZXQgaW5zdGFuY2VvZiBQc2lGaWVsZCk7CisgICAgYXNzZXJ0RXF1YWxzKCJhIiwgKChQc2lGaWVsZCl0YXJnZXQpLmdldE5hbWUoKSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0UXVhbGlmaWVkNCgpIHRocm93cyBFeGNlcHRpb24geworICAgIFBzaUVsZW1lbnQgdGFyZ2V0ID0gY29uZmlndXJlQW5kUmVzb2x2ZSgpOworICAgIGFzc2VydFRydWUodGFyZ2V0IGluc3RhbmNlb2YgUHNpRmllbGQpOworICAgIGFzc2VydEVxdWFscygiYSIsICgoUHNpRmllbGQpdGFyZ2V0KS5nZXROYW1lKCkpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFVucmVzb2x2ZWQxKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgUHNpRWxlbWVudCB0YXJnZXQgPSBjb25maWd1cmVBbmRSZXNvbHZlKCk7CisgICAgYXNzZXJ0TnVsbCh0YXJnZXQpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEZpZWxkRnJvbUludGVyZmFjZSgpIHRocm93cyBFeGNlcHRpb24geworICAgIFBzaUVsZW1lbnQgdGFyZ2V0ID0gY29uZmlndXJlQW5kUmVzb2x2ZSgpOworICAgIGFzc2VydFRydWUodGFyZ2V0IGluc3RhbmNlb2YgUHNpRmllbGQpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEludGVyZmFjZUNvbmZsaWN0MSgpIHRocm93cyBFeGNlcHRpb24geworICAgIFBzaUVsZW1lbnQgdGFyZ2V0ID0gY29uZmlndXJlQW5kUmVzb2x2ZSgpOworICAgIGFzc2VydE51bGwodGFyZ2V0KTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RJbnRlcmZhY2VDb25mbGljdDIoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBQc2lFbGVtZW50IHRhcmdldCA9IGNvbmZpZ3VyZUFuZFJlc29sdmUoKTsKKyAgICBhc3NlcnROdWxsKHRhcmdldCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0SW50ZXJmYWNlQ29uZmxpY3QzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgUHNpRWxlbWVudCB0YXJnZXQgPSBjb25maWd1cmVBbmRSZXNvbHZlKCk7CisgICAgYXNzZXJ0TnVsbCh0YXJnZXQpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEludGVyZmFjZUNvbmZsaWN0NCgpIHRocm93cyBFeGNlcHRpb24geworICAgIFBzaUVsZW1lbnQgdGFyZ2V0ID0gY29uZmlndXJlQW5kUmVzb2x2ZSgpOworICAgIGFzc2VydE51bGwodGFyZ2V0KTsKKyAgfQorCisgIC8vIFRoaXMgaXMgYSBidWcgYnV0IGl0J3MgdG9vIGhhcmQgdG8gZml4IHRoaXMgOigKKyAgLy8gVE9ETzogdHJ5IHRvIGZpeAorICBwdWJsaWMgdm9pZCBkb250VGVzdEludGVyZmFjZUNvbmZsaWN0NSgpIHRocm93cyBFeGNlcHRpb24geworICAgIFBzaUVsZW1lbnQgdGFyZ2V0ID0gY29uZmlndXJlQW5kUmVzb2x2ZSgpOworICAgIGFzc2VydE51bGwodGFyZ2V0KTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RJbnRlcmZhY2VDb25mbGljdDYoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBQc2lFbGVtZW50IHRhcmdldCA9IGNvbmZpZ3VyZUFuZFJlc29sdmUoKTsKKyAgICBhc3NlcnROdWxsKHRhcmdldCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0SW50ZXJmYWNlQ29uZmxpY3Q3KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgUHNpRWxlbWVudCB0YXJnZXQgPSBjb25maWd1cmVBbmRSZXNvbHZlKCk7CisgICAgYXNzZXJ0Tm90TnVsbCh0YXJnZXQpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEludGVyZmFjZUNvbmZsaWN0OCgpIHRocm93cyBFeGNlcHRpb24geworICAgIFBzaUVsZW1lbnQgdGFyZ2V0ID0gY29uZmlndXJlQW5kUmVzb2x2ZSgpOworICAgIGFzc2VydE5vdE51bGwodGFyZ2V0KTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RJbnRlcmZhY2VDb25mbGljdDkoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBQc2lFbGVtZW50IHRhcmdldCA9IGNvbmZpZ3VyZUFuZFJlc29sdmUoKTsKKyAgICBhc3NlcnROdWxsKHRhcmdldCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0SW50ZXJmYWNlQ29uZmxpY3QxMCgpIHRocm93cyBFeGNlcHRpb24geworICAgIFBzaUVsZW1lbnQgdGFyZ2V0ID0gY29uZmlndXJlQW5kUmVzb2x2ZSgpOworICAgIGFzc2VydE51bGwodGFyZ2V0KTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RBcnJheTEoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBQc2lFbGVtZW50IHRhcmdldCA9IGNvbmZpZ3VyZUFuZFJlc29sdmUoKTsKKyAgICBhc3NlcnROb3ROdWxsKHRhcmdldCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0SW50ZXJmYWNlQ29uZmxpY3QxMSgpIHRocm93cyBFeGNlcHRpb24geworICAgIFBzaUVsZW1lbnQgdGFyZ2V0ID0gY29uZmlndXJlQW5kUmVzb2x2ZSgpOworICAgIGFzc2VydE5vdE51bGwodGFyZ2V0KTsKKyAgICBhc3NlcnRUcnVlKHRhcmdldCBpbnN0YW5jZW9mIFBzaUZpZWxkKTsKKyAgICBhc3NlcnRFcXVhbHMoIkIiLCAoKFBzaUZpZWxkKXRhcmdldCkuZ2V0Q29udGFpbmluZ0NsYXNzKCkuZ2V0TmFtZSgpKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RCdWc3ODY5KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgUHNpRWxlbWVudCB0YXJnZXQgPSBjb25maWd1cmVBbmRSZXNvbHZlKCk7CisgICAgYXNzZXJ0Tm90TnVsbCh0YXJnZXQpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdElubmVyMSgpIHRocm93cyBFeGNlcHRpb24geworICAgIFBzaUVsZW1lbnQgdGFyZ2V0ID0gY29uZmlndXJlQW5kUmVzb2x2ZSgpOworICAgIGFzc2VydE5vdE51bGwodGFyZ2V0KTsKKyAgICBhc3NlcnRFcXVhbHMoIklubmVyMSIsICgoUHNpRmllbGQpdGFyZ2V0KS5nZXRDb250YWluaW5nQ2xhc3MoKS5nZXROYW1lKCkpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEZpZWxkc0FuZExvY2FscygpIHRocm93cyBFeGNlcHRpb24geworICAgIFBzaUVsZW1lbnQgdGFyZ2V0ID0gY29uZmlndXJlQW5kUmVzb2x2ZSgpOworICAgIGFzc2VydFRydWUodGFyZ2V0IGluc3RhbmNlb2YgUHNpTG9jYWxWYXJpYWJsZSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0UHJpdmF0ZU92ZXJsb2FkaW5nKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgUHNpUmVmZXJlbmNlIHJlZiA9IGNvbmZpZ3VyZUJ5RmlsZSgidmFyL1ByaXZhdGVPdmVybG9hZGluZy5qYXZhIik7CisgICAgZmluYWwgSmF2YVJlc29sdmVSZXN1bHQgcmVzdWx0ID0gKChQc2lKYXZhUmVmZXJlbmNlKXJlZikuYWR2YW5jZWRSZXNvbHZlKHRydWUpOworICAgIFBzaUVsZW1lbnQgdGFyZ2V0ID0gcmVzdWx0LmdldEVsZW1lbnQoKTsKKyAgICBhc3NlcnROb3ROdWxsKHRhcmdldCk7CisgICAgYXNzZXJ0RmFsc2UocmVzdWx0LmlzVmFsaWRSZXN1bHQoKSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0VmlzaWJpbGl0eTYoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBQc2lSZWZlcmVuY2UgcmVmID0gY29uZmlndXJlQnlGaWxlKCJ2YXIvVmlzaWJpbGl0eTYuamF2YSIpOworICAgIGZpbmFsIEphdmFSZXNvbHZlUmVzdWx0IHJlc3VsdCA9ICgoUHNpSmF2YVJlZmVyZW5jZSlyZWYpLmFkdmFuY2VkUmVzb2x2ZSh0cnVlKTsKKyAgICBQc2lFbGVtZW50IHRhcmdldCA9IHJlc3VsdC5nZXRFbGVtZW50KCk7CisgICAgYXNzZXJ0Tm90TnVsbCh0YXJnZXQpOworICAgIGFzc2VydEZhbHNlKHJlc3VsdC5pc1ZhbGlkUmVzdWx0KCkpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFZpc2liaWxpdHk3KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgUHNpUmVmZXJlbmNlIHJlZiA9IGNvbmZpZ3VyZUJ5RmlsZSgidmFyL0lubmVyUHJpdmF0ZXMxLmphdmEiKTsKKyAgICBmaW5hbCBKYXZhUmVzb2x2ZVJlc3VsdCByZXN1bHQgPSAoKFBzaUphdmFSZWZlcmVuY2UpcmVmKS5hZHZhbmNlZFJlc29sdmUodHJ1ZSk7CisgICAgUHNpRWxlbWVudCB0YXJnZXQgPSByZXN1bHQuZ2V0RWxlbWVudCgpOworICAgIGFzc2VydE5vdE51bGwodGFyZ2V0KTsKKyAgICBhc3NlcnRUcnVlKHJlc3VsdC5pc1ZhbGlkUmVzdWx0KCkpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEZvcmVhY2hQYXJhbWV0ZXIoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBmaW5hbCBQc2lSZWZlcmVuY2UgcmVmID0gY29uZmlndXJlQnlGaWxlKCJ2YXIvRm9yZWFjaFBhcmFtZXRlci5qYXZhIik7CisgICAgZmluYWwgUHNpRWxlbWVudCBlbGVtZW50ID0gcmVmLnJlc29sdmUoKTsKKyAgICBhc3NlcnRUcnVlKGVsZW1lbnQgaW5zdGFuY2VvZiBQc2lQYXJhbWV0ZXIpOworICAgIGFzc2VydEVxdWFscygibyIsICgoUHNpUGFyYW1ldGVyKWVsZW1lbnQpLmdldE5hbWUoKSk7CisgICAgYXNzZXJ0VHJ1ZShlbGVtZW50LmdldFBhcmVudCgpIGluc3RhbmNlb2YgUHNpRm9yZWFjaFN0YXRlbWVudCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0UmVmSW5TdXBlcigpIHRocm93cyBFeGNlcHRpb24geworICAgIGZpbmFsIFBzaUphdmFSZWZlcmVuY2UgcmVmID0gKFBzaUphdmFSZWZlcmVuY2UpY29uZmlndXJlQnlGaWxlKCJ2YXIvUmVmSW5TdXBlci5qYXZhIik7CisgICAgZmluYWwgSmF2YVJlc29sdmVSZXN1bHQgcmVzb2x2ZVJlc3VsdCA9IHJlZi5hZHZhbmNlZFJlc29sdmUoZmFsc2UpOworICAgIGFzc2VydFRydWUocmVzb2x2ZVJlc3VsdC5pc1ZhbGlkUmVzdWx0KCkpOworICAgIFBzaUVsZW1lbnQgY3VycmVudEZpbGVSZXNvbHZlU2NvcGUgPSByZXNvbHZlUmVzdWx0LmdldEN1cnJlbnRGaWxlUmVzb2x2ZVNjb3BlKCk7CisgICAgYXNzZXJ0VHJ1ZShjdXJyZW50RmlsZVJlc29sdmVTY29wZSBpbnN0YW5jZW9mIFBzaUNsYXNzKTsKKyAgICBhc3NlcnRFcXVhbHMoIklubmVyIiwgKChQc2lDbGFzcyljdXJyZW50RmlsZVJlc29sdmVTY29wZSkuZ2V0TmFtZSgpKTsKKyAgICBQc2lFbGVtZW50IGVsZW1lbnQgPSByZXNvbHZlUmVzdWx0LmdldEVsZW1lbnQoKTsKKyAgICBhc3NlcnRUcnVlKGVsZW1lbnQgaW5zdGFuY2VvZiBQc2lGaWVsZCk7CisgICAgYXNzZXJ0RXF1YWxzKCJpIiwgKChQc2lGaWVsZCllbGVtZW50KS5nZXROYW1lKCkpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFJlZkluT3V0ZXIoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBmaW5hbCBQc2lKYXZhUmVmZXJlbmNlIHJlZiA9IChQc2lKYXZhUmVmZXJlbmNlKWNvbmZpZ3VyZUJ5RmlsZSgidmFyL1JlZkluT3V0ZXIuamF2YSIpOworICAgIGZpbmFsIEphdmFSZXNvbHZlUmVzdWx0IHJlc29sdmVSZXN1bHQgPSByZWYuYWR2YW5jZWRSZXNvbHZlKGZhbHNlKTsKKyAgICBhc3NlcnRUcnVlKHJlc29sdmVSZXN1bHQuaXNWYWxpZFJlc3VsdCgpKTsKKyAgICBQc2lFbGVtZW50IGN1cnJlbnRGaWxlUmVzb2x2ZVNjb3BlID0gcmVzb2x2ZVJlc3VsdC5nZXRDdXJyZW50RmlsZVJlc29sdmVTY29wZSgpOworICAgIGFzc2VydFRydWUoY3VycmVudEZpbGVSZXNvbHZlU2NvcGUgaW5zdGFuY2VvZiBQc2lDbGFzcyk7CisgICAgYXNzZXJ0RXF1YWxzKCJPdXRlciIsICgoUHNpQ2xhc3MpY3VycmVudEZpbGVSZXNvbHZlU2NvcGUpLmdldE5hbWUoKSk7CisgICAgUHNpRWxlbWVudCBlbGVtZW50ID0gcmVzb2x2ZVJlc3VsdC5nZXRFbGVtZW50KCk7CisgICAgYXNzZXJ0VHJ1ZShlbGVtZW50IGluc3RhbmNlb2YgUHNpRmllbGQpOworICAgIGFzc2VydEVxdWFscygiaSIsICgoUHNpRmllbGQpZWxlbWVudCkuZ2V0TmFtZSgpKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RJbmhlcml0ZWRPdXRlcigpIHRocm93cyBFeGNlcHRpb24geworICAgIGZpbmFsIFBzaUphdmFSZWZlcmVuY2UgcmVmID0gKFBzaUphdmFSZWZlcmVuY2UpY29uZmlndXJlQnlGaWxlKCJ2YXIvSW5oZXJpdGVkT3V0ZXIuamF2YSIpOworICAgIGZpbmFsIEphdmFSZXNvbHZlUmVzdWx0IHJlc29sdmVSZXN1bHQgPSByZWYuYWR2YW5jZWRSZXNvbHZlKGZhbHNlKTsKKyAgICBhc3NlcnRUcnVlKHJlc29sdmVSZXN1bHQuaXNWYWxpZFJlc3VsdCgpKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RTdGF0aWNGaWVsZHNJbkludGVyZmFjZXNDb25mbGljdCgpIHRocm93cyBFeGNlcHRpb24geworICAgIGZpbmFsIFBzaUphdmFSZWZlcmVuY2UgcmVmID0gKFBzaUphdmFSZWZlcmVuY2UpY29uZmlndXJlQnlGaWxlKCJ2YXIvRmllbGRDb25mbGljdC5qYXZhIik7CisgICAgZmluYWwgSmF2YVJlc29sdmVSZXN1bHQgcmVzb2x2ZVJlc3VsdCA9IHJlZi5hZHZhbmNlZFJlc29sdmUoZmFsc2UpOworICAgIGFzc2VydFRydWUoIXJlc29sdmVSZXN1bHQuaXNWYWxpZFJlc3VsdCgpKTsKKyAgICBmaW5hbCBKYXZhUmVzb2x2ZVJlc3VsdFtdIHJlc3VsdHMgPSByZWYubXVsdGlSZXNvbHZlKGZhbHNlKTsKKyAgICBhc3NlcnRFcXVhbHMoMiwgcmVzdWx0cy5sZW5ndGgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFNoYWRvd0ZpZWxkc0luSGllcmFyY2h5KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZmluYWwgUHNpSmF2YVJlZmVyZW5jZSByZWYgPSAoUHNpSmF2YVJlZmVyZW5jZSljb25maWd1cmUoKTsKKyAgICBmaW5hbCBKYXZhUmVzb2x2ZVJlc3VsdCByZXNvbHZlUmVzdWx0ID0gcmVmLmFkdmFuY2VkUmVzb2x2ZShmYWxzZSk7CisgICAgYXNzZXJ0VHJ1ZShyZXNvbHZlUmVzdWx0LmlzVmFsaWRSZXN1bHQoKSk7CisgICAgUHNpRmllbGQgZmllbGQgPSBteUphdmFGYWNhZGUuZmluZENsYXNzKCJUZXN0UGFnZSIsIEdsb2JhbFNlYXJjaFNjb3BlLmFsbFNjb3BlKGdldFByb2plY3QoKSkpLmdldEZpZWxkcygpWzBdOworICAgIGFzc2VydEVxdWFscyhmaWVsZCwgcmVzb2x2ZVJlc3VsdC5nZXRFbGVtZW50KCkpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFNoYWRvd0ZpZWxkc0luSGllcmFyY2h5MigpIHRocm93cyBFeGNlcHRpb24geworICAgIFBzaUVsZW1lbnQgcmVmID0gY29uZmlndXJlQW5kUmVzb2x2ZSgpOworICAgIGFzc2VydFRydWUocmVmIGluc3RhbmNlb2YgUHNpRmllbGQpOworICAgIGFzc2VydEVxdWFscygiRSIsICgoUHNpRmllbGQpcmVmKS5nZXRDb250YWluaW5nQ2xhc3MoKS5nZXROYW1lKCkpOworICB9CisKKyAgcHJpdmF0ZSBQc2lSZWZlcmVuY2UgY29uZmlndXJlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgcmV0dXJuIGNvbmZpZ3VyZUJ5RmlsZSgidmFyLyIgKyBnZXRUZXN0TmFtZShmYWxzZSkgKyAiLmphdmEiKTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL3BzaS9yZXNvbHZlL1R5cGVJbmZlcmVuY2VUZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovcHNpL3Jlc29sdmUvVHlwZUluZmVyZW5jZVRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41N2ZkNjMzCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL3BzaS9yZXNvbHZlL1R5cGVJbmZlcmVuY2VUZXN0LmphdmEKQEAgLTAsMCArMSwxNTcgQEAKK3BhY2thZ2UgY29tLmludGVsbGlqLnBzaS5yZXNvbHZlOworCitpbXBvcnQgY29tLmludGVsbGlqLnBzaS4qOworaW1wb3J0IG9yZy5qZXRicmFpbnMuYW5ub3RhdGlvbnMuTm9uTmxzOworCisvKioKKyAqIEBhdXRob3IgdmVuCisgKi8KK3B1YmxpYyBjbGFzcyBUeXBlSW5mZXJlbmNlVGVzdCBleHRlbmRzIFJlc29sdmUxNVRlc3RDYXNlIHsKKyAgcHVibGljIHZvaWQgdGVzdEluZmVySW5DYWxsMSAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBQc2lSZWZlcmVuY2VFeHByZXNzaW9uIHJlZiA9IGNvbmZpZ3VyZSgpOworICAgIFBzaVR5cGUgdHlwZSA9IHJlZi5nZXRUeXBlKCk7CisgICAgYXNzZXJ0VHJ1ZSh0eXBlIGluc3RhbmNlb2YgUHNpQ2xhc3NUeXBlKTsKKyAgICBQc2lUeXBlW10gcGFyYW1UeXBlcyA9ICgoUHNpQ2xhc3NUeXBlKXR5cGUpLmdldFBhcmFtZXRlcnMoKTsKKyAgICBhc3NlcnRFcXVhbHMoMSwgcGFyYW1UeXBlcy5sZW5ndGgpOworICAgIGFzc2VydEVxdWFscyhDb21tb25DbGFzc05hbWVzLkpBVkFfTEFOR19PQkpFQ1QsIHBhcmFtVHlwZXNbMF0uZ2V0Q2Fub25pY2FsVGV4dCgpKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RJbmZlckluQXNzaWduMSAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBQc2lSZWZlcmVuY2VFeHByZXNzaW9uIHJlZiA9IGNvbmZpZ3VyZSgpOworICAgIFBzaVR5cGUgdHlwZSA9IHJlZi5nZXRUeXBlKCk7CisgICAgYXNzZXJ0VHJ1ZSh0eXBlIGluc3RhbmNlb2YgUHNpQ2xhc3NUeXBlKTsKKyAgICBQc2lUeXBlW10gcGFyYW1UeXBlcyA9ICgoUHNpQ2xhc3NUeXBlKXR5cGUpLmdldFBhcmFtZXRlcnMoKTsKKyAgICBhc3NlcnRFcXVhbHMoMSwgcGFyYW1UeXBlcy5sZW5ndGgpOworICAgIGFzc2VydEVxdWFscyggImphdmEubGFuZy5TdHJpbmciLCBwYXJhbVR5cGVzWzBdLmdldENhbm9uaWNhbFRleHQoKSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0SW5mZXJJbkFzc2lnbjIoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBQc2lSZWZlcmVuY2VFeHByZXNzaW9uIHJlZiA9IGNvbmZpZ3VyZSgpOworICAgIFBzaVR5cGUgdHlwZSA9IHJlZi5nZXRUeXBlKCk7CisgICAgYXNzZXJ0VHJ1ZSh0eXBlIGluc3RhbmNlb2YgUHNpQ2xhc3NUeXBlKTsKKyAgICBQc2lUeXBlW10gcGFyYW1UeXBlcyA9ICgoUHNpQ2xhc3NUeXBlKXR5cGUpLmdldFBhcmFtZXRlcnMoKTsKKyAgICBhc3NlcnRFcXVhbHMoMSwgcGFyYW1UeXBlcy5sZW5ndGgpOworICAgIGFzc2VydEVxdWFscyhDb21tb25DbGFzc05hbWVzLkpBVkFfTEFOR19PQkpFQ1QsIHBhcmFtVHlwZXNbMF0uZ2V0Q2Fub25pY2FsVGV4dCgpKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RJbmZlckluQ2FzdCAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBQc2lSZWZlcmVuY2VFeHByZXNzaW9uIHJlZiA9IGNvbmZpZ3VyZSgpOworICAgIFBzaVR5cGUgdHlwZSA9IHJlZi5nZXRUeXBlKCk7CisgICAgYXNzZXJ0VHJ1ZSh0eXBlIGluc3RhbmNlb2YgUHNpQ2xhc3NUeXBlKTsKKyAgICBQc2lUeXBlW10gcGFyYW1UeXBlcyA9ICgoUHNpQ2xhc3NUeXBlKXR5cGUpLmdldFBhcmFtZXRlcnMoKTsKKyAgICBhc3NlcnRFcXVhbHMoMSwgcGFyYW1UeXBlcy5sZW5ndGgpOworICAgIGFzc2VydEVxdWFscyhDb21tb25DbGFzc05hbWVzLkpBVkFfTEFOR19TVFJJTkcsIHBhcmFtVHlwZXNbMF0uZ2V0Q2Fub25pY2FsVGV4dCgpKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RJbmZlcldpdGhCb3VuZHMgKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgY2hlY2tSZXNvbHZlc1RvKCJDLklubmVyIik7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0SW5mZXJXaXRoQm91bmRzMSAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBQc2lSZWZlcmVuY2VFeHByZXNzaW9uIHJlZiA9IGNvbmZpZ3VyZSgpOworICAgIEphdmFSZXNvbHZlUmVzdWx0IHJlc29sdmVSZXN1bHQgPSByZWYuYWR2YW5jZWRSZXNvbHZlKGZhbHNlKTsKKyAgICBQc2lTdWJzdGl0dXRvciBzdWJzdGl0dXRvciA9IHJlc29sdmVSZXN1bHQuZ2V0U3Vic3RpdHV0b3IoKTsKKyAgICBQc2lNZXRob2QgbWV0aG9kID0gKFBzaU1ldGhvZClyZXNvbHZlUmVzdWx0LmdldEVsZW1lbnQoKTsKKyAgICBQc2lUeXBlIHR5cGUgPSBzdWJzdGl0dXRvci5zdWJzdGl0dXRlKG1ldGhvZC5nZXRUeXBlUGFyYW1ldGVycygpWzBdKTsKKyAgICBhc3NlcnRFcXVhbHMoImphdmEubGFuZy5TdHJpbmciLCB0eXBlLmdldENhbm9uaWNhbFRleHQoKSk7CisgIH0KKworICBwcml2YXRlIFBzaVJlZmVyZW5jZUV4cHJlc3Npb24gY29uZmlndXJlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgcmV0dXJuIChQc2lSZWZlcmVuY2VFeHByZXNzaW9uKWNvbmZpZ3VyZUJ5RmlsZSgiaW5mZXJlbmNlLyIgKyBnZXRUZXN0TmFtZShmYWxzZSkgKyAiLmphdmEiKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RJbmZlckluUGFyYW1zT25seSAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBjaGVja1Jlc29sdmVzVG8oIkMuSSIpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEluZmVyUmF3VHlwZSAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBjaGVja1Jlc29sdmVzVG8oQ29tbW9uQ2xhc3NOYW1lcy5KQVZBX0xBTkdfT0JKRUNUKTsKKyAgfQorCisgIHByaXZhdGUgdm9pZCBjaGVja1Jlc29sdmVzVG8oQE5vbk5scyBTdHJpbmcgdHlwZU5hbWUpIHRocm93cyBFeGNlcHRpb24geworICAgIFBzaVJlZmVyZW5jZUV4cHJlc3Npb24gcmVmID0gY29uZmlndXJlKCk7CisgICAgUHNpVHlwZSB0eXBlID0gcmVmLmdldFR5cGUoKTsKKyAgICBhc3NlcnROb3ROdWxsKHR5cGUpOworICAgIGFzc2VydEVxdWFscyh0eXBlTmFtZSwgdHlwZS5nZXRDYW5vbmljYWxUZXh0KCkpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEluZmVySW5TdXBlckFzc2lnbm1lbnQgKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgY2hlY2tSZXNvbHZlc1RvKCJCPGphdmEubGFuZy5TdHJpbmc+Iik7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0SW5mZXJXaXRoV2lsZGNhcmRzICgpIHRocm93cyBFeGNlcHRpb24geworICAgIGNoZWNrUmVzb2x2ZXNUbygiQ29sbGVjdGlvbnMuU2VsZkNvbXBhcmFibGUiKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RJbmZlcldpdGhXaWxkY2FyZHMxICgpIHRocm93cyBFeGNlcHRpb24geworICAgIGNoZWNrUmVzb2x2ZXNUbygiamF2YS5sYW5nLlN0cmluZyIpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEluZmVyV2l0aFdpbGRjYXJkczIgKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgY2hlY2tSZXNvbHZlc1RvKCJDb2xsZWN0aW9uPEJhckltcGw+Iik7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0SW5mZXJXaXRoV2lsZGNhcmRzMyAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBjaGVja1Jlc29sdmVzVG8oIlguWTxqYXZhLmxhbmcuTG9uZz4iKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RJbmZlcldpdGhXaWxkY2FyZHM0ICgpIHRocm93cyBFeGNlcHRpb24geworICAgIGNoZWNrUmVzb2x2ZXNUbygiWC5ZPGphdmEubGFuZy5Mb25nPiIpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEluZmVyV2l0aFdpbGRjYXJkczUgKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgY2hlY2tSZXNvbHZlc1RvKCJYLlk8amF2YS5sYW5nLkxvbmc+Iik7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0SW5mZXJJblJldHVybiAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBjaGVja1Jlc29sdmVzVG8oIlQiKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RJbmZlckF1dG9ib3hlZCAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBjaGVja1Jlc29sdmVzVG8oImphdmEubGFuZy5JbnRlZ2VyIik7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0SW5mZXJXaXRoVmFyYXJnczEgKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgY2hlY2tSZXNvbHZlc1RvKCJDMiIpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEluZmVyV2l0aFZhcmFyZ3MyICgpIHRocm93cyBFeGNlcHRpb24geworICAgIGNoZWNrUmVzb2x2ZXNUbygiQzEiKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RJbmZlcldpdGhWYXJhcmdzMyAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBjaGVja1Jlc29sdmVzVG8oIkxpc3Q8aW50W10+Iik7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0SW5mZXJXaXRoVmFyYXJnczQgKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgY2hlY2tSZXNvbHZlc1RvKCJMaXN0PGludFtdPiIpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEluZmVyV2l0aFZhcmFyZ3M1ICgpIHRocm93cyBFeGNlcHRpb24geworICAgIGNoZWNrUmVzb2x2ZXNUbygiTGlzdDxqYXZhLmxhbmcuSW50ZWdlcj4iKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RJbmZlcldpdGhWYXJhcmdzNiAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBjaGVja1Jlc29sdmVzVG8oIkxpc3Q8amF2YS5sYW5nLkludGVnZXJbXT4iKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RJbmZlclByaW1pdGl2ZUFycmF5ICgpIHRocm93cyBFeGNlcHRpb24geworICAgIGNoZWNrUmVzb2x2ZXNUbygiZG91YmxlW10iKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RTQ1I0MTAzMSAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBjaGVja1Jlc29sdmVzVG8oIkxpc3Q8VD4iKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RJbmZlclVuY2hlY2tlZCAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBjaGVja1Jlc29sdmVzVG8oQ29tbW9uQ2xhc3NOYW1lcy5KQVZBX0xBTkdfT0JKRUNUKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RJbmZlck5vdE51bGwgKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgY2hlY2tSZXNvbHZlc1RvKCJFIik7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0Qm91bmRDb21wb3NpdGlvbigpIHRocm93cyBFeGNlcHRpb24geworICAgIGNoZWNrUmVzb2x2ZXNUbygiamF2YS5sYW5nLkNsYXNzPD8gc3VwZXIgPyBleHRlbmRzIGphdmEubGFuZy5PYmplY3Q+Iik7CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9wc2kvc2VhcmNoL0ZpbmRVc2FnZXMxNVRlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9wc2kvc2VhcmNoL0ZpbmRVc2FnZXMxNVRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NTkyM2ZhCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL3BzaS9zZWFyY2gvRmluZFVzYWdlczE1VGVzdC5qYXZhCkBAIC0wLDAgKzEsOTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwMC0yMDEyIEpldEJyYWlucyBzLnIuby4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCitwYWNrYWdlIGNvbS5pbnRlbGxpai5wc2kuc2VhcmNoOworCitpbXBvcnQgY29tLmludGVsbGlqLkphdmFUZXN0VXRpbDsKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS5wcm9qZWN0Um9vdHMuaW1wbC5KYXZhU2RrSW1wbDsKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS5yb290cy5MYW5ndWFnZUxldmVsUHJvamVjdEV4dGVuc2lvbjsKK2ltcG9ydCBjb20uaW50ZWxsaWoucG9tLmphdmEuTGFuZ3VhZ2VMZXZlbDsKK2ltcG9ydCBjb20uaW50ZWxsaWoucHNpLio7CitpbXBvcnQgY29tLmludGVsbGlqLnBzaS5zZWFyY2guc2VhcmNoZXMuTWV0aG9kUmVmZXJlbmNlc1NlYXJjaDsKK2ltcG9ydCBjb20uaW50ZWxsaWoucHNpLnNlYXJjaC5zZWFyY2hlcy5PdmVycmlkaW5nTWV0aG9kc1NlYXJjaDsKK2ltcG9ydCBjb20uaW50ZWxsaWoucHNpLnNlYXJjaC5zZWFyY2hlcy5SZWZlcmVuY2VzU2VhcmNoOworaW1wb3J0IGNvbS5pbnRlbGxpai5wc2kudXRpbC5Qc2lUcmVlVXRpbDsKK2ltcG9ydCBjb20uaW50ZWxsaWoudGVzdEZyYW1ld29yay5JZGVhVGVzdFV0aWw7CitpbXBvcnQgY29tLmludGVsbGlqLnRlc3RGcmFtZXdvcmsuUHNpVGVzdENhc2U7CitpbXBvcnQgY29tLmludGVsbGlqLnRlc3RGcmFtZXdvcmsuUHNpVGVzdFV0aWw7CisKK3B1YmxpYyBjbGFzcyBGaW5kVXNhZ2VzMTVUZXN0IGV4dGVuZHMgUHNpVGVzdENhc2V7CisKKyAgQE92ZXJyaWRlCisgIHByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgc3VwZXIuc2V0VXAoKTsKKworICAgIExhbmd1YWdlTGV2ZWxQcm9qZWN0RXh0ZW5zaW9uLmdldEluc3RhbmNlKG15SmF2YUZhY2FkZS5nZXRQcm9qZWN0KCkpLnNldExhbmd1YWdlTGV2ZWwoTGFuZ3VhZ2VMZXZlbC5KREtfMV81KTsKKyAgICBTdHJpbmcgcm9vdCA9IEphdmFUZXN0VXRpbC5nZXRKYXZhVGVzdERhdGFQYXRoKCkgKyAiL3BzaS9zZWFyY2gvZmluZFVzYWdlczE1LyIgKyBnZXRUZXN0TmFtZSh0cnVlKTsKKyAgICBQc2lUZXN0VXRpbC5yZW1vdmVBbGxSb290cyhteU1vZHVsZSwgSWRlYVRlc3RVdGlsLmdldE1vY2tKZGsxNygiamF2YSAxLjUiKSk7CisgICAgUHNpVGVzdFV0aWwuY3JlYXRlVGVzdFByb2plY3RTdHJ1Y3R1cmUobXlQcm9qZWN0LCBteU1vZHVsZSwgcm9vdCwgbXlGaWxlc1RvRGVsZXRlKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RFbnVtQ29uc3RydWN0b3IoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBQc2lDbGFzcyBlbnVtQ2xhc3MgPSBteUphdmFGYWNhZGUuZmluZENsYXNzKCJwYWNrLk91ckVudW0iLCBHbG9iYWxTZWFyY2hTY29wZS5tb2R1bGVTY29wZShteU1vZHVsZSkpOworICAgIGFzc2VydE5vdE51bGwoZW51bUNsYXNzKTsKKyAgICBhc3NlcnRUcnVlKGVudW1DbGFzcy5pc0VudW0oKSk7CisgICAgUHNpTWV0aG9kW10gY29uc3RydWN0b3JzID0gZW51bUNsYXNzLmdldENvbnN0cnVjdG9ycygpOworICAgIGFzc2VydEVxdWFscygyLCBjb25zdHJ1Y3RvcnMubGVuZ3RoKTsKKyAgICBQc2lSZWZlcmVuY2VbXSByZWZlcmVuY2VzMCA9CisgICAgICBSZWZlcmVuY2VzU2VhcmNoLnNlYXJjaChjb25zdHJ1Y3RvcnNbMF0sIEdsb2JhbFNlYXJjaFNjb3BlLm1vZHVsZVNjb3BlKG15TW9kdWxlKSwgZmFsc2UpLnRvQXJyYXkobmV3IFBzaVJlZmVyZW5jZVswXSk7CisgICAgYXNzZXJ0RXF1YWxzKDIsIHJlZmVyZW5jZXMwLmxlbmd0aCk7CisgICAgYXNzZXJ0VHJ1ZShyZWZlcmVuY2VzMFswXS5nZXRFbGVtZW50KCkgaW5zdGFuY2VvZiBQc2lFbnVtQ29uc3RhbnQpOworICAgIGFzc2VydFRydWUocmVmZXJlbmNlczBbMV0uZ2V0RWxlbWVudCgpIGluc3RhbmNlb2YgUHNpRW51bUNvbnN0YW50KTsKKyAgICBQc2lSZWZlcmVuY2VbXSByZWZlcmVuY2VzMSA9CisgICAgICBSZWZlcmVuY2VzU2VhcmNoLnNlYXJjaChjb25zdHJ1Y3RvcnNbMV0sIEdsb2JhbFNlYXJjaFNjb3BlLm1vZHVsZVNjb3BlKG15TW9kdWxlKSwgZmFsc2UpLnRvQXJyYXkobmV3IFBzaVJlZmVyZW5jZVswXSk7CisgICAgYXNzZXJ0RXF1YWxzKDEsIHJlZmVyZW5jZXMxLmxlbmd0aCk7CisgICAgYXNzZXJ0VHJ1ZShyZWZlcmVuY2VzMVswXS5nZXRFbGVtZW50KCkgaW5zdGFuY2VvZiBQc2lFbnVtQ29uc3RhbnQpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEdlbmVyaWNNZXRob2RPdmVycmlkZXJVc2FnZXMgKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZmluYWwgUHNpQ2xhc3MgYmFzZUNsYXNzID0gbXlKYXZhRmFjYWRlLmZpbmRDbGFzcygicGFjay5HZW5lcmljQ2xhc3MiLCBHbG9iYWxTZWFyY2hTY29wZS5tb2R1bGVTY29wZShteU1vZHVsZSkpOworICAgIGFzc2VydE5vdE51bGwoYmFzZUNsYXNzKTsKKyAgICBmaW5hbCBQc2lNZXRob2QgbWV0aG9kID0gYmFzZUNsYXNzLmdldE1ldGhvZHMoKVswXTsKKyAgICBQc2lSZWZlcmVuY2VbXSByZWZlcmVuY2VzID0KKyAgICAgIE1ldGhvZFJlZmVyZW5jZXNTZWFyY2guc2VhcmNoKG1ldGhvZCwgR2xvYmFsU2VhcmNoU2NvcGUubW9kdWxlU2NvcGUobXlNb2R1bGUpLCBmYWxzZSkudG9BcnJheShQc2lSZWZlcmVuY2UuRU1QVFlfQVJSQVkpOworICAgIGFzc2VydEVxdWFscygxLCByZWZlcmVuY2VzLmxlbmd0aCk7CisgICAgZmluYWwgUHNpRWxlbWVudCBlbGVtZW50ID0gcmVmZXJlbmNlc1swXS5nZXRFbGVtZW50KCk7CisgICAgZmluYWwgUHNpQ2xhc3MgcmVmQ2xhc3MgPSBQc2lUcmVlVXRpbC5nZXRQYXJlbnRPZlR5cGUoZWxlbWVudCwgUHNpQ2xhc3MuY2xhc3MpOworICAgIGFzc2VydEVxdWFscyhyZWZDbGFzcy5nZXROYW1lKCksICJHZW5lcmljQ2xhc3NEZXJpdmVkIik7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0RmluZFJhd092ZXJyaWRkZW5Vc2FnZXMgKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZmluYWwgUHNpQ2xhc3MgYmFzZUNsYXNzID0gbXlKYXZhRmFjYWRlLmZpbmRDbGFzcygicGFjay5CYXNlIiwgR2xvYmFsU2VhcmNoU2NvcGUubW9kdWxlU2NvcGUobXlNb2R1bGUpKTsKKyAgICBhc3NlcnROb3ROdWxsKGJhc2VDbGFzcyk7CisgICAgZmluYWwgUHNpTWV0aG9kIG1ldGhvZCA9IGJhc2VDbGFzcy5nZXRNZXRob2RzKClbMF07CisgICAgUHNpTWV0aG9kW10gb3ZlcnJpZGVycyA9CisgICAgICBPdmVycmlkaW5nTWV0aG9kc1NlYXJjaC5zZWFyY2gobWV0aG9kLCBHbG9iYWxTZWFyY2hTY29wZS5tb2R1bGVTY29wZShteU1vZHVsZSksIHRydWUpLnRvQXJyYXkoUHNpTWV0aG9kLkVNUFRZX0FSUkFZKTsKKyAgICBhc3NlcnRFcXVhbHMoMSwgb3ZlcnJpZGVycy5sZW5ndGgpOworICB9CisgIHB1YmxpYyB2b2lkIHRlc3RHZW5lcmljT3ZlcnJpZGUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBmaW5hbCBQc2lDbGFzcyBiYXNlQ2xhc3MgPSBteUphdmFGYWNhZGUuZmluZENsYXNzKCJwYWNrLkdlbiIsIEdsb2JhbFNlYXJjaFNjb3BlLm1vZHVsZVNjb3BlKG15TW9kdWxlKSk7CisgICAgYXNzZXJ0Tm90TnVsbChiYXNlQ2xhc3MpOworICAgIGZpbmFsIFBzaU1ldGhvZCBtZXRob2QgPSBiYXNlQ2xhc3MuZ2V0TWV0aG9kcygpWzBdOworICAgIFBzaVJlZmVyZW5jZVtdIHJlZmVyZW5jZXMgPQorICAgICAgTWV0aG9kUmVmZXJlbmNlc1NlYXJjaC5zZWFyY2gobWV0aG9kLCBHbG9iYWxTZWFyY2hTY29wZS5wcm9qZWN0U2NvcGUoZ2V0UHJvamVjdCgpKSwgdHJ1ZSkudG9BcnJheShQc2lSZWZlcmVuY2UuRU1QVFlfQVJSQVkpOworCisgICAgYXNzZXJ0RXF1YWxzKDEsIHJlZmVyZW5jZXMubGVuZ3RoKTsKKworICAgIFBzaUNsYXNzIHJlZkNsYXNzID0gUHNpVHJlZVV0aWwuZ2V0UGFyZW50T2ZUeXBlKHJlZmVyZW5jZXNbMF0uZ2V0RWxlbWVudCgpLCBQc2lDbGFzcy5jbGFzcyk7CisgICAgYXNzZXJ0RXF1YWxzKCJYMiIsIHJlZkNsYXNzLmdldE5hbWUoKSk7CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9wc2kvc2VhcmNoL0ZpbmRVc2FnZXNUZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovcHNpL3NlYXJjaC9GaW5kVXNhZ2VzVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdlOWJiODQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovcHNpL3NlYXJjaC9GaW5kVXNhZ2VzVGVzdC5qYXZhCkBAIC0wLDAgKzEsMjYzIEBACisvKgorICogQ29weXJpZ2h0IDIwMDAtMjAxMiBKZXRCcmFpbnMgcy5yLm8uCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworcGFja2FnZSBjb20uaW50ZWxsaWoucHNpLnNlYXJjaDsKKworaW1wb3J0IGNvbS5pbnRlbGxpai5KYXZhVGVzdFV0aWw7CitpbXBvcnQgY29tLmludGVsbGlqLmZpbmQuZmluZFVzYWdlcy5KYXZhRmluZFVzYWdlc0hhbmRsZXI7CitpbXBvcnQgY29tLmludGVsbGlqLmZpbmQuZmluZFVzYWdlcy5KYXZhRmluZFVzYWdlc0hhbmRsZXJGYWN0b3J5OworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLmFwcGxpY2F0aW9uLlJlc3VsdDsKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS5jb21tYW5kLldyaXRlQ29tbWFuZEFjdGlvbjsKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS5maWxlVHlwZXMuU3RkRmlsZVR5cGVzOworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLm1vZHVsZS5Nb2RpZmlhYmxlTW9kdWxlTW9kZWw7CitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkubW9kdWxlLk1vZHVsZU1hbmFnZXI7CitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkubW9kdWxlLlN0ZE1vZHVsZVR5cGVzOworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLnByb2plY3RSb290cy5pbXBsLkphdmFTZGtJbXBsOworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLnV0aWwuVGV4dFJhbmdlOworaW1wb3J0IGNvbS5pbnRlbGxpai5wc2kuKjsKK2ltcG9ydCBjb20uaW50ZWxsaWoucHNpLnNlYXJjaC5zZWFyY2hlcy5NZXRob2RSZWZlcmVuY2VzU2VhcmNoOworaW1wb3J0IGNvbS5pbnRlbGxpai5wc2kuc2VhcmNoLnNlYXJjaGVzLk92ZXJyaWRpbmdNZXRob2RzU2VhcmNoOworaW1wb3J0IGNvbS5pbnRlbGxpai5wc2kuc2VhcmNoLnNlYXJjaGVzLlJlZmVyZW5jZXNTZWFyY2g7CitpbXBvcnQgY29tLmludGVsbGlqLnRlc3RGcmFtZXdvcmsuSWRlYVRlc3RVdGlsOworaW1wb3J0IGNvbS5pbnRlbGxpai50ZXN0RnJhbWV3b3JrLlBzaVRlc3RDYXNlOworaW1wb3J0IGNvbS5pbnRlbGxpai50ZXN0RnJhbWV3b3JrLlBzaVRlc3RVdGlsOworaW1wb3J0IGNvbS5pbnRlbGxpai50ZXN0RnJhbWV3b3JrLmZpeHR1cmVzLklkZWFUZXN0Rml4dHVyZUZhY3Rvcnk7CitpbXBvcnQgY29tLmludGVsbGlqLnRlc3RGcmFtZXdvcmsuZml4dHVyZXMuVGVtcERpclRlc3RGaXh0dXJlOworaW1wb3J0IGNvbS5pbnRlbGxpai51c2FnZVZpZXcuVXNhZ2VJbmZvOworaW1wb3J0IGNvbS5pbnRlbGxpai51dGlsLlByb2Nlc3NvcjsKK2ltcG9ydCBjb20uaW50ZWxsaWoudXRpbC5jb250YWluZXJzLkludEFycmF5TGlzdDsKKworaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb25zOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitwdWJsaWMgY2xhc3MgRmluZFVzYWdlc1Rlc3QgZXh0ZW5kcyBQc2lUZXN0Q2FzZXsKKworICBAT3ZlcnJpZGUKKyAgcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBzdXBlci5zZXRVcCgpOworCisgICAgU3RyaW5nIHJvb3QgPSBKYXZhVGVzdFV0aWwuZ2V0SmF2YVRlc3REYXRhUGF0aCgpICsgIi9wc2kvc2VhcmNoL2ZpbmRVc2FnZXMvIiArIGdldFRlc3ROYW1lKHRydWUpOworICAgIFBzaVRlc3RVdGlsLnJlbW92ZUFsbFJvb3RzKG15TW9kdWxlLCBJZGVhVGVzdFV0aWwuZ2V0TW9ja0pkazE3KCkpOworICAgIFBzaVRlc3RVdGlsLmNyZWF0ZVRlc3RQcm9qZWN0U3RydWN0dXJlKG15UHJvamVjdCwgbXlNb2R1bGUsIHJvb3QsIG15RmlsZXNUb0RlbGV0ZSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0T3ZlcmxvYWRDb25zdHJ1Y3RvcnMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBQc2lDbGFzcyBhQ2xhc3MgPSBteUphdmFGYWNhZGUuZmluZENsYXNzKCJCIiwgR2xvYmFsU2VhcmNoU2NvcGUuYWxsU2NvcGUobXlQcm9qZWN0KSk7CisgICAgUHNpTWV0aG9kIGNvbnN0cnVjdG9yOworLy8gICAgY29uc3RydWN0b3IgPSBteUphdmFGYWNhZGUuZ2V0RWxlbWVudEZhY3RvcnkoKS5jcmVhdGVDb25zdHJ1Y3RvcigpOworLy8gICAgY29uc3RydWN0b3IgPSBhQ2xhc3MuZmluZE1ldGhvZEJ5U2lnbmF0dXJlKGNvbnN0cnVjdG9yLCBmYWxzZSk7CisgICAgY29uc3RydWN0b3IgPSBhQ2xhc3MuZmluZE1ldGhvZHNCeU5hbWUoIkIiLCBmYWxzZSlbMF07CisgICAgUHNpTWV0aG9kQ2FsbEV4cHJlc3Npb24gc3VwZXJDYWxsID0gKFBzaU1ldGhvZENhbGxFeHByZXNzaW9uKSBjb25zdHJ1Y3Rvci5nZXRCb2R5KCkuZ2V0U3RhdGVtZW50cygpWzBdLmdldEZpcnN0Q2hpbGQoKTsKKyAgICBQc2lSZWZlcmVuY2VFeHByZXNzaW9uIHN1cGVyRXhwciA9IHN1cGVyQ2FsbC5nZXRNZXRob2RFeHByZXNzaW9uKCk7CisgICAgU3RyaW5nW10gZmlsZU5hbWVzID0gbmV3IFN0cmluZ1tdeyJCLmphdmEiLCAiQS5qYXZhIiwgIkEuamF2YSIsICJCLmphdmEifTsKKyAgICBpbnRbXSBzdGFydHMgPSBuZXcgaW50W117fTsKKyAgICBpbnRbXSBlbmRzID0gbmV3IGludFtde307CisgICAgZmluYWwgQXJyYXlMaXN0PFBzaUZpbGU+IGZpbGVzTGlzdCA9IG5ldyBBcnJheUxpc3Q8UHNpRmlsZT4oKTsKKyAgICBmaW5hbCBJbnRBcnJheUxpc3Qgc3RhcnRzTGlzdCA9IG5ldyBJbnRBcnJheUxpc3QoKTsKKyAgICBmaW5hbCBJbnRBcnJheUxpc3QgZW5kc0xpc3QgPSBuZXcgSW50QXJyYXlMaXN0KCk7CisgICAgUHNpUmVmZXJlbmNlW10gcmVmcyA9CisgICAgICBNZXRob2RSZWZlcmVuY2VzU2VhcmNoLnNlYXJjaCgoUHNpTWV0aG9kKXN1cGVyRXhwci5yZXNvbHZlKCksIEdsb2JhbFNlYXJjaFNjb3BlLnByb2plY3RTY29wZShteVByb2plY3QpLCBmYWxzZSkudG9BcnJheShQc2lSZWZlcmVuY2UuRU1QVFlfQVJSQVkpOworICAgIGZvciAoUHNpUmVmZXJlbmNlIHJlZiA6IHJlZnMpIHsKKyAgICAgIGFkZFJlZmVyZW5jZShyZWYsIGZpbGVzTGlzdCwgc3RhcnRzTGlzdCwgZW5kc0xpc3QpOworICAgIH0KKyAgICBjaGVja1Jlc3VsdChmaWxlTmFtZXMsIGZpbGVzTGlzdCwgc3RhcnRzLCBzdGFydHNMaXN0LCBlbmRzLCBlbmRzTGlzdCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0U2libGluZ0ltcGxlbWVudCgpIHRocm93cyBFeGNlcHRpb24geworICAgIFBzaUNsYXNzIGFuSW50ZXJmYWNlID0gbXlKYXZhRmFjYWRlLmZpbmRDbGFzcygiQS5JIiwgR2xvYmFsU2VhcmNoU2NvcGUuYWxsU2NvcGUobXlQcm9qZWN0KSk7CisgICAgUHNpTWV0aG9kIG1ldGhvZCA9IGFuSW50ZXJmYWNlLmdldE1ldGhvZHMoKVswXTsKKyAgICBmaW5hbCBDb2xsZWN0aW9uPFBzaU1ldGhvZD4gb3ZlcnJpZGVycyA9IE92ZXJyaWRpbmdNZXRob2RzU2VhcmNoLnNlYXJjaChtZXRob2QpLmZpbmRBbGwoKTsKKyAgICBhc3NlcnRFcXVhbHMoMSwgb3ZlcnJpZGVycy5zaXplKCkpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFByb3RlY3RlZE1ldGhvZEluUGFja2FnZUxvY2FsQ2xhc3MoKSB0aHJvd3MgVGhyb3dhYmxlIHsKKyAgICBQc2lNZXRob2QgbWV0aG9kID0gbXlKYXZhRmFjYWRlLmZpbmRDbGFzcygiZm9vLlBhY2thZ2VMb2NhbCIsIEdsb2JhbFNlYXJjaFNjb3BlLmFsbFNjb3BlKG15UHJvamVjdCkpLmdldE1ldGhvZHMoKVswXTsKKyAgICBhc3NlcnRFcXVhbHMoMSwgT3ZlcnJpZGluZ01ldGhvZHNTZWFyY2guc2VhcmNoKG1ldGhvZCkuZmluZEFsbCgpLnNpemUoKSk7CisgICAgYXNzZXJ0RXF1YWxzKDEsIFJlZmVyZW5jZXNTZWFyY2guc2VhcmNoKG1ldGhvZCkuZmluZEFsbCgpLnNpemUoKSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0TGlicmFyeUNsYXNzVXNhZ2VGcm9tRGVjb21waWxlZFNvdXJjZSgpIHsKKyAgICBQc2lFbGVtZW50IGRlY29tcGlsZWQgPQorICAgICAgKChQc2lDb21waWxlZEVsZW1lbnQpbXlKYXZhRmFjYWRlLmZpbmRDbGFzcygiamF2YXguc3dpbmcuSkxhYmVsIiwgR2xvYmFsU2VhcmNoU2NvcGUuYWxsU2NvcGUobXlQcm9qZWN0KSkpLmdldE1pcnJvcigpOworICAgIGFzc2VydEVxdWFscygyLCBSZWZlcmVuY2VzU2VhcmNoLnNlYXJjaChkZWNvbXBpbGVkKS5maW5kQWxsKCkuc2l6ZSgpKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RJbXBsaWNpdENvbnN0cnVjdG9yVXNhZ2UoKSB0aHJvd3MgVGhyb3dhYmxlIHsKKyAgICBQc2lNZXRob2RbXSBjdHJzID0gbXlKYXZhRmFjYWRlLmZpbmRDbGFzcygiRm9vIiwgR2xvYmFsU2VhcmNoU2NvcGUuYWxsU2NvcGUobXlQcm9qZWN0KSkuZ2V0Q29uc3RydWN0b3JzKCk7CisgICAgUHNpTWV0aG9kIG1ldGhvZCA9IGN0cnNbMF07CisgICAgYXNzZXJ0RXF1YWxzKDAsIG1ldGhvZC5nZXRQYXJhbWV0ZXJMaXN0KCkuZ2V0UGFyYW1ldGVyc0NvdW50KCkpOworICAgIGFzc2VydEVxdWFscygwLCBSZWZlcmVuY2VzU2VhcmNoLnNlYXJjaChtZXRob2QpLmZpbmRBbGwoKS5zaXplKCkpOworCisgICAgUHNpTWV0aG9kIHVzZWRNZXRob2QgPSBjdHJzWzFdOworICAgIGFzc2VydEVxdWFscygxLCB1c2VkTWV0aG9kLmdldFBhcmFtZXRlckxpc3QoKS5nZXRQYXJhbWV0ZXJzQ291bnQoKSk7CisgICAgYXNzZXJ0RXF1YWxzKDEsIFJlZmVyZW5jZXNTZWFyY2guc2VhcmNoKHVzZWRNZXRob2QpLmZpbmRBbGwoKS5zaXplKCkpOworICB9CisKKyAgcHJpdmF0ZSBzdGF0aWMgdm9pZCBhZGRSZWZlcmVuY2UoUHNpUmVmZXJlbmNlIHJlZiwgQXJyYXlMaXN0PFBzaUZpbGU+IGZpbGVzTGlzdCwgSW50QXJyYXlMaXN0IHN0YXJ0c0xpc3QsIEludEFycmF5TGlzdCBlbmRzTGlzdCkgeworICAgIFBzaUVsZW1lbnQgZWxlbWVudCA9IHJlZi5nZXRFbGVtZW50KCk7CisgICAgZmlsZXNMaXN0LmFkZChlbGVtZW50LmdldENvbnRhaW5pbmdGaWxlKCkpOworICAgIFRleHRSYW5nZSByYW5nZSA9IGVsZW1lbnQuZ2V0VGV4dFJhbmdlKCk7CisgICAgVGV4dFJhbmdlIHJhbmdlSW5FbGVtZW50ID0gcmVmLmdldFJhbmdlSW5FbGVtZW50KCk7CisgICAgc3RhcnRzTGlzdC5hZGQocmFuZ2UuZ2V0U3RhcnRPZmZzZXQoKSArIHJhbmdlSW5FbGVtZW50LmdldFN0YXJ0T2Zmc2V0KCkpOworICAgIGVuZHNMaXN0LmFkZChyYW5nZS5nZXRTdGFydE9mZnNldCgpICsgcmFuZ2VJbkVsZW1lbnQuZ2V0RW5kT2Zmc2V0KCkpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEZpZWxkSW5KYXZhZG9jKCkgdGhyb3dzIEV4Y2VwdGlvbnsKKyAgICBQc2lDbGFzcyBhQ2xhc3MgPSBteUphdmFGYWNhZGUuZmluZENsYXNzKCJBIiwgR2xvYmFsU2VhcmNoU2NvcGUuYWxsU2NvcGUobXlQcm9qZWN0KSk7CisgICAgUHNpRmllbGQgZmllbGQgPSBhQ2xhc3MuZmluZEZpZWxkQnlOYW1lKCJGSUVMRCIsIGZhbHNlKTsKKyAgICBkb1Rlc3QoZmllbGQsIG5ldyBTdHJpbmdbXXsiQS5qYXZhIn0sIG5ldyBpbnRbXXt9LCBuZXcgaW50W117fSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0WG1sKCkgdGhyb3dzIEV4Y2VwdGlvbnsKKyAgICBQc2lDbGFzcyBhQ2xhc3MgPSBteUphdmFGYWNhZGUuZmluZENsYXNzKCJjb20uRm9vIiwgR2xvYmFsU2VhcmNoU2NvcGUuYWxsU2NvcGUobXlQcm9qZWN0KSk7CisgICAgZG9UZXN0KGFDbGFzcywgbmV3IFN0cmluZ1tdeyJUZXN0LnhtbCJ9LCBuZXcgaW50W117MzJ9LCBuZXcgaW50W117MzV9KTsKKworICAgIGZpbmFsIFBzaUZpbGUgbm9uQ29kZVVzYWdlID0gUHNpRmlsZUZhY3RvcnkuZ2V0SW5zdGFuY2UobXlQcm9qZWN0KS5jcmVhdGVGaWxlRnJvbVRleHQoImEueG1sIiwgU3RkRmlsZVR5cGVzLlhNTCwgIjxyb290IGFjdGlvbj0nY29tLkZvbycvPiIsIDAsIHRydWUpOworICAgIGFzc2VydFRydWUobmV3IFVzYWdlSW5mbyhub25Db2RlVXNhZ2UsIDE0LCAyMSwgdHJ1ZSkuZ2V0TmF2aWdhdGlvbk9mZnNldCgpID4gMCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0Tm9uQ29kZUNsYXNzVXNhZ2VzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZmluYWwgVGVtcERpclRlc3RGaXh0dXJlIHRkZiA9IElkZWFUZXN0Rml4dHVyZUZhY3RvcnkuZ2V0Rml4dHVyZUZhY3RvcnkoKS5jcmVhdGVUZW1wRGlyVGVzdEZpeHR1cmUoKTsKKyAgICB0ZGYuc2V0VXAoKTsKKworICAgIHRyeSB7CisgICAgICBuZXcgV3JpdGVDb21tYW5kQWN0aW9uKGdldFByb2plY3QoKSkgeworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHJvdGVjdGVkIHZvaWQgcnVuKFJlc3VsdCByZXN1bHQpIHRocm93cyBUaHJvd2FibGUgeworICAgICAgICAgIGZpbmFsIE1vZGlmaWFibGVNb2R1bGVNb2RlbCBtb2R1bGVNb2RlbCA9IE1vZHVsZU1hbmFnZXIuZ2V0SW5zdGFuY2UoZ2V0UHJvamVjdCgpKS5nZXRNb2RpZmlhYmxlTW9kZWwoKTsKKyAgICAgICAgICBtb2R1bGVNb2RlbC5uZXdNb2R1bGUoImluZGVwZW5kZW50L2luZGVwZW5kZW50LmltbCIsIFN0ZE1vZHVsZVR5cGVzLkpBVkEuZ2V0SWQoKSk7CisgICAgICAgICAgbW9kdWxlTW9kZWwuY29tbWl0KCk7CisKKyAgICAgICAgICB0ZGYuY3JlYXRlRmlsZSgicGx1Z2luLnhtbCIsICI8ZG9jdW1lbnQ+XG4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgIDxhY3Rpb24gY2xhc3M9XCJjb20uRm9vXCIgLz5cbiIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgPGFjdGlvbiBjbGFzcz1cImNvbS5Gb28uQmFyXCIgLz5cbiIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgPGFjdGlvbiBjbGFzcz1cImNvbS5Gb28kQmFyXCIgLz5cbiIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjwvZG9jdW1lbnQ+Iik7CisKKyAgICAgICAgICBQc2lUZXN0VXRpbC5hZGRDb250ZW50Um9vdChNb2R1bGVNYW5hZ2VyLmdldEluc3RhbmNlKGdldFByb2plY3QoKSkuZmluZE1vZHVsZUJ5TmFtZSgiaW5kZXBlbmRlbnQiKSwgdGRmLmdldEZpbGUoIiIpKTsKKyAgICAgICAgfQorICAgICAgfS5leGVjdXRlKCk7CisKKyAgICAgIEdsb2JhbFNlYXJjaFNjb3BlIHNjb3BlID0gR2xvYmFsU2VhcmNoU2NvcGUuYWxsU2NvcGUoZ2V0UHJvamVjdCgpKTsKKyAgICAgIFBzaUNsYXNzIGZvbyA9IG15SmF2YUZhY2FkZS5maW5kQ2xhc3MoImNvbS5Gb28iLCBzY29wZSk7CisgICAgICBQc2lDbGFzcyBiYXIgPSBteUphdmFGYWNhZGUuZmluZENsYXNzKCJjb20uRm9vLkJhciIsIHNjb3BlKTsKKworICAgICAgZmluYWwgaW50W10gY291bnQgPSB7MH07CisgICAgICBQcm9jZXNzb3I8VXNhZ2VJbmZvPiBwcm9jZXNzb3IgPSBuZXcgUHJvY2Vzc29yPFVzYWdlSW5mbz4oKSB7CisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgYm9vbGVhbiBwcm9jZXNzKFVzYWdlSW5mbyB1c2FnZUluZm8pIHsKKyAgICAgICAgICBpbnQgbmF2aWdhdGlvbk9mZnNldCA9IHVzYWdlSW5mby5nZXROYXZpZ2F0aW9uT2Zmc2V0KCk7CisgICAgICAgICAgYXNzZXJ0VHJ1ZShuYXZpZ2F0aW9uT2Zmc2V0ID4gMCk7CisgICAgICAgICAgU3RyaW5nIHRleHRBZnRlciA9IHVzYWdlSW5mby5nZXRGaWxlKCkuZ2V0VGV4dCgpLnN1YnN0cmluZyhuYXZpZ2F0aW9uT2Zmc2V0KTsKKyAgICAgICAgICBhc3NlcnRUcnVlKHRleHRBZnRlciwgdGV4dEFmdGVyLnN0YXJ0c1dpdGgoIkZvbyIpIHx8IHRleHRBZnRlci5zdGFydHNXaXRoKCJCYXIiKSB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0QWZ0ZXIuc3RhcnRzV2l0aCgiY29tLkZvby5CYXIiKSAvLyBzb3JyeSwgY2FuJ3QgZ2V0IHJlZmVyZW5jZXMgd2l0aCBkb2xsYXItZG90IG1pc21hdGNoIHRvIHdvcmsgbm93CisgICAgICAgICAgKTsKKyAgICAgICAgICBjb3VudFswXSsrOworICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICB9OworICAgICAgSmF2YUZpbmRVc2FnZXNIYW5kbGVyIGhhbmRsZXIgPSBuZXcgSmF2YUZpbmRVc2FnZXNIYW5kbGVyKGJhciwgSmF2YUZpbmRVc2FnZXNIYW5kbGVyRmFjdG9yeS5nZXRJbnN0YW5jZShnZXRQcm9qZWN0KCkpKTsKKworICAgICAgY291bnRbMF0gPSAwOworICAgICAgaGFuZGxlci5wcm9jZXNzVXNhZ2VzSW5UZXh0KGZvbywgcHJvY2Vzc29yLCBzY29wZSk7CisgICAgICBhc3NlcnRFcXVhbHMoMywgY291bnRbMF0pOworCisgICAgICBjb3VudFswXSA9IDA7CisgICAgICBoYW5kbGVyLnByb2Nlc3NVc2FnZXNJblRleHQoYmFyLCBwcm9jZXNzb3IsIHNjb3BlKTsKKyAgICAgIGFzc2VydEVxdWFscygyLCBjb3VudFswXSk7CisgICAgfQorICAgIGZpbmFsbHkgeworICAgICAgdGRmLnRlYXJEb3duKCk7CisgICAgfQorICB9CisKKyAgcHVibGljIHN0YXRpYyB2b2lkIGRvVGVzdChQc2lFbGVtZW50IGVsZW1lbnQsIFN0cmluZ1tdIGZpbGVOYW1lcywgaW50W10gc3RhcnRzLCBpbnRbXSBlbmRzKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBmaW5hbCBBcnJheUxpc3Q8UHNpRmlsZT4gZmlsZXNMaXN0ID0gbmV3IEFycmF5TGlzdDxQc2lGaWxlPigpOworICAgIGZpbmFsIEludEFycmF5TGlzdCBzdGFydHNMaXN0ID0gbmV3IEludEFycmF5TGlzdCgpOworICAgIGZpbmFsIEludEFycmF5TGlzdCBlbmRzTGlzdCA9IG5ldyBJbnRBcnJheUxpc3QoKTsKKyAgICBSZWZlcmVuY2VzU2VhcmNoLnNlYXJjaChlbGVtZW50LCBHbG9iYWxTZWFyY2hTY29wZS5wcm9qZWN0U2NvcGUoZWxlbWVudC5nZXRQcm9qZWN0KCkpLCBmYWxzZSkuZm9yRWFjaChuZXcgUHNpUmVmZXJlbmNlUHJvY2Vzc29yQWRhcHRlcihuZXcgUHNpUmVmZXJlbmNlUHJvY2Vzc29yKCkgeworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIGJvb2xlYW4gZXhlY3V0ZShQc2lSZWZlcmVuY2UgcmVmKSB7CisgICAgICAgICAgYWRkUmVmZXJlbmNlKHJlZiwgZmlsZXNMaXN0LCBzdGFydHNMaXN0LCBlbmRzTGlzdCk7CisgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgIH0pKTsKKworICAgIGNoZWNrUmVzdWx0KGZpbGVOYW1lcywgZmlsZXNMaXN0LCBzdGFydHMsIHN0YXJ0c0xpc3QsIGVuZHMsIGVuZHNMaXN0KTsKKworICB9CisKKyAgcHJpdmF0ZSBzdGF0aWMgY2xhc3MgU2VhcmNoUmVzdWx0IGltcGxlbWVudHMgQ29tcGFyYWJsZTxTZWFyY2hSZXN1bHQ+IHsKKyAgICBTdHJpbmcgZmlsZU5hbWU7CisgICAgaW50IHN0YXJ0T2Zmc2V0OworICAgIGludCBlbmRPZmZzZXQ7CisKKyAgICBwcml2YXRlIFNlYXJjaFJlc3VsdChmaW5hbCBTdHJpbmcgZmlsZU5hbWUsIGZpbmFsIGludCBzdGFydE9mZnNldCwgZmluYWwgaW50IGVuZE9mZnNldCkgeworICAgICAgdGhpcy5maWxlTmFtZSA9IGZpbGVOYW1lOworICAgICAgdGhpcy5zdGFydE9mZnNldCA9IHN0YXJ0T2Zmc2V0OworICAgICAgdGhpcy5lbmRPZmZzZXQgPSBlbmRPZmZzZXQ7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIGludCBjb21wYXJlVG8oZmluYWwgU2VhcmNoUmVzdWx0IG8pIHsKKyAgICAgIGludCByYyA9IGZpbGVOYW1lLmNvbXBhcmVUbyhvLmZpbGVOYW1lKTsKKyAgICAgIGlmIChyYyAhPSAwKSByZXR1cm4gcmM7CisKKyAgICAgIHJjID0gc3RhcnRPZmZzZXQgLSBvLnN0YXJ0T2Zmc2V0OworICAgICAgaWYgKHJjICE9IDApIHJldHVybiByYzsKKworICAgICAgcmV0dXJuIGVuZE9mZnNldCAtIG8uZW5kT2Zmc2V0OworICAgIH0KKworICAgIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7CisgICAgICByZXR1cm4gZmlsZU5hbWUgKyAiWyIgKyBzdGFydE9mZnNldCArICI6IiArIGVuZE9mZnNldCArICJdIjsKKyAgICB9CisKKyAgICBwdWJsaWMgYm9vbGVhbiBlcXVhbHMoZmluYWwgT2JqZWN0IG8pIHsKKyAgICAgIGlmICh0aGlzID09IG8pIHJldHVybiB0cnVlOworICAgICAgaWYgKG8gPT0gbnVsbCB8fCBnZXRDbGFzcygpICE9IG8uZ2V0Q2xhc3MoKSkgcmV0dXJuIGZhbHNlOworCisgICAgICBmaW5hbCBTZWFyY2hSZXN1bHQgdGhhdCA9IChTZWFyY2hSZXN1bHQpbzsKKworICAgICAgaWYgKGVuZE9mZnNldCAhPSB0aGF0LmVuZE9mZnNldCkgcmV0dXJuIGZhbHNlOworICAgICAgaWYgKHN0YXJ0T2Zmc2V0ICE9IHRoYXQuc3RhcnRPZmZzZXQpIHJldHVybiBmYWxzZTsKKyAgICAgIGlmIChmaWxlTmFtZSAhPSBudWxsID8gIWZpbGVOYW1lLmVxdWFscyh0aGF0LmZpbGVOYW1lKSA6IHRoYXQuZmlsZU5hbWUgIT0gbnVsbCkgcmV0dXJuIGZhbHNlOworCisgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgIH0KKworICBwcml2YXRlIHN0YXRpYyB2b2lkIGNoZWNrUmVzdWx0KFN0cmluZ1tdIGZpbGVOYW1lcywgZmluYWwgQXJyYXlMaXN0PFBzaUZpbGU+IGZpbGVzTGlzdCwgaW50W10gc3RhcnRzLCBmaW5hbCBJbnRBcnJheUxpc3Qgc3RhcnRzTGlzdCwgaW50W10gZW5kcywgZmluYWwgSW50QXJyYXlMaXN0IGVuZHNMaXN0KSB7CisgICAgTGlzdDxTZWFyY2hSZXN1bHQ+IGV4cGVjdGVkID0gbmV3IEFycmF5TGlzdDxTZWFyY2hSZXN1bHQ+KCk7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBmaWxlTmFtZXMubGVuZ3RoOyBpKyspIHsKKyAgICAgIFN0cmluZyBmaWxlTmFtZSA9IGZpbGVOYW1lc1tpXTsKKyAgICAgIGV4cGVjdGVkLmFkZChuZXcgU2VhcmNoUmVzdWx0KGZpbGVOYW1lLCBpIDwgc3RhcnRzLmxlbmd0aCA/IHN0YXJ0c1tpXSA6IC0xLCBpIDwgZW5kcy5sZW5ndGggPyBlbmRzW2ldIDogLTEpKTsKKyAgICB9CisKKyAgICBMaXN0PFNlYXJjaFJlc3VsdD4gYWN0dWFsID0gbmV3IEFycmF5TGlzdDxTZWFyY2hSZXN1bHQ+KCk7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBmaWxlc0xpc3Quc2l6ZSgpOyBpKyspIHsKKyAgICAgIFBzaUZpbGUgcHNpRmlsZSA9IGZpbGVzTGlzdC5nZXQoaSk7CisgICAgICBhY3R1YWwuYWRkKAorICAgICAgICBuZXcgU2VhcmNoUmVzdWx0KHBzaUZpbGUuZ2V0TmFtZSgpLCBpIDwgc3RhcnRzLmxlbmd0aCA/IHN0YXJ0c0xpc3QuZ2V0KGkpIDogLTEsIGkgPCBlbmRzLmxlbmd0aCA/IGVuZHNMaXN0LmdldChpKSA6IC0xKSk7CisgICAgfQorCisgICAgQ29sbGVjdGlvbnMuc29ydChleHBlY3RlZCk7CisgICAgQ29sbGVjdGlvbnMuc29ydChhY3R1YWwpOworCisgICAgYXNzZXJ0RXF1YWxzKCJVc2FnZXMgZG9uJ3QgbWF0Y2giLCBleHBlY3RlZCwgYWN0dWFsKTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL3BzaS9zZWFyY2gvSW5oZXJpdG9yc1Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9wc2kvc2VhcmNoL0luaGVyaXRvcnNUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTFhYTliNgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9wc2kvc2VhcmNoL0luaGVyaXRvcnNUZXN0LmphdmEKQEAgLTAsMCArMSw4OCBAQAorLyoKKyAqIENvcHlyaWdodCAyMDAwLTIwMTIgSmV0QnJhaW5zIHMuci5vLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KK3BhY2thZ2UgY29tLmludGVsbGlqLnBzaS5zZWFyY2g7CisKK2ltcG9ydCBjb20uaW50ZWxsaWouSmF2YVRlc3RVdGlsOworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLmRpYWdub3N0aWMuTG9nZ2VyOworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLnByb2dyZXNzLlByb2dyZXNzTWFuYWdlcjsKK2ltcG9ydCBjb20uaW50ZWxsaWoucHNpLkphdmFQc2lGYWNhZGU7CitpbXBvcnQgY29tLmludGVsbGlqLnBzaS5Qc2lDbGFzczsKK2ltcG9ydCBjb20uaW50ZWxsaWoucHNpLlBzaVBhY2thZ2U7CitpbXBvcnQgY29tLmludGVsbGlqLnBzaS5zZWFyY2guc2VhcmNoZXMuQ2xhc3NJbmhlcml0b3JzU2VhcmNoOworaW1wb3J0IGNvbS5pbnRlbGxpai50ZXN0RnJhbWV3b3JrLklkZWFUZXN0VXRpbDsKK2ltcG9ydCBjb20uaW50ZWxsaWoudGVzdEZyYW1ld29yay5Qc2lUZXN0Q2FzZTsKK2ltcG9ydCBjb20uaW50ZWxsaWoudGVzdEZyYW1ld29yay5Qc2lUZXN0VXRpbDsKK2ltcG9ydCBvcmcuamV0YnJhaW5zLmFubm90YXRpb25zLk5vdE51bGw7CisKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworCitwdWJsaWMgY2xhc3MgSW5oZXJpdG9yc1Rlc3QgZXh0ZW5kcyBQc2lUZXN0Q2FzZXsKKyAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgTG9nZ2VyIExPRyA9IExvZ2dlci5nZXRJbnN0YW5jZSgiI2NvbS5pbnRlbGxpai5wc2kuc2VhcmNoLkluaGVyaXRvcnNUZXN0Iik7CisKKyAgQE92ZXJyaWRlCisgIHByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgc3VwZXIuc2V0VXAoKTsKKworICAgIFN0cmluZyByb290ID0gSmF2YVRlc3RVdGlsLmdldEphdmFUZXN0RGF0YVBhdGgoKSArICIvcHNpL3NlYXJjaC9pbmhlcml0b3JzLyIgKyBnZXRUZXN0TmFtZSh0cnVlKTsKKyAgICBQc2lUZXN0VXRpbC5yZW1vdmVBbGxSb290cyhteU1vZHVsZSwgSWRlYVRlc3RVdGlsLmdldE1vY2tKZGsxNygpKTsKKyAgICBQc2lUZXN0VXRpbC5jcmVhdGVUZXN0UHJvamVjdFN0cnVjdHVyZShteVByb2plY3QsIG15TW9kdWxlLCByb290LCBteUZpbGVzVG9EZWxldGUpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFNjb3BlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KCJwYWNrMS5CYXNlIiwgInBhY2sxIiwgdHJ1ZSwgInBhY2sxLkRlcml2ZWQxIiwgInBhY2sxLkRlcml2ZWQzIik7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0Tm9TY2FuSmRrKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KCJqYXZheC5zd2luZy5KUGFuZWwiLCAiIiwgZmFsc2UpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFNhbWVOYW1lZENsYXNzZXMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoInguVGVzdCIsICIiLCB0cnVlLCAieC5Hb28iLCAieC5ab28iKTsKKyAgfQorCisgIHByaXZhdGUgdm9pZCBkb1Rlc3QoU3RyaW5nIGNsYXNzTmFtZSwgU3RyaW5nIHBhY2thZ2VTY29wZU5hbWUsIGZpbmFsIGJvb2xlYW4gZGVlcCwgU3RyaW5nLi4uIGluaGVyaXRvck5hbWVzKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBmaW5hbCBQc2lDbGFzcyBhQ2xhc3MgPSBteUphdmFGYWNhZGUuZmluZENsYXNzKGNsYXNzTmFtZSk7CisgICAgYXNzZXJ0Tm90TnVsbChhQ2xhc3MpOworCisgICAgZmluYWwgU2VhcmNoU2NvcGUgc2NvcGU7CisgICAgaWYgKHBhY2thZ2VTY29wZU5hbWUgIT0gbnVsbCl7CisgICAgICBQc2lQYWNrYWdlIGFQYWNrYWdlID0gSmF2YVBzaUZhY2FkZS5nZXRJbnN0YW5jZShteVBzaU1hbmFnZXIuZ2V0UHJvamVjdCgpKS5maW5kUGFja2FnZShwYWNrYWdlU2NvcGVOYW1lKTsKKyAgICAgIHNjb3BlID0gUGFja2FnZVNjb3BlLnBhY2thZ2VTY29wZShhUGFja2FnZSwgdHJ1ZSkuaW50ZXJzZWN0V2l0aChHbG9iYWxTZWFyY2hTY29wZS5wcm9qZWN0U2NvcGUobXlQcm9qZWN0KSk7CisgICAgfQorICAgIGVsc2V7CisgICAgICBzY29wZSA9IEdsb2JhbFNlYXJjaFNjb3BlLnByb2plY3RTY29wZShteVByb2plY3QpOworICAgIH0KKworICAgIGZpbmFsIEFycmF5TGlzdDxTdHJpbmc+IGluaGVyaXRvcnNMaXN0ID0gbmV3IEFycmF5TGlzdDxTdHJpbmc+KCk7CisgICAgUHJvZ3Jlc3NNYW5hZ2VyLmdldEluc3RhbmNlKCkucnVuUHJvY2VzcygKKyAgICAgIG5ldyBSdW5uYWJsZSgpIHsKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKKyAgICAgICAgICBDbGFzc0luaGVyaXRvcnNTZWFyY2guc2VhcmNoKGFDbGFzcywgc2NvcGUsIGRlZXApLmZvckVhY2gobmV3IFBzaUVsZW1lbnRQcm9jZXNzb3JBZGFwdGVyPFBzaUNsYXNzPihuZXcgUHNpRWxlbWVudFByb2Nlc3NvcjxQc2lDbGFzcz4oKSB7CisgICAgICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgICAgIHB1YmxpYyBib29sZWFuIGV4ZWN1dGUoQE5vdE51bGwgUHNpQ2xhc3MgZWxlbWVudCkgeworICAgICAgICAgICAgICBpbmhlcml0b3JzTGlzdC5hZGQoZWxlbWVudC5nZXRRdWFsaWZpZWROYW1lKCkpOworICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9KSk7CisgICAgICAgIH0KKyAgICAgIH0sCisgICAgICBudWxsCisgICAgKTsKKworICAgIGFzc2VydFNhbWVFbGVtZW50cyhpbmhlcml0b3JzTGlzdCwgaW5oZXJpdG9yTmFtZXMpOworICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovcHNpL3NlYXJjaC9QbGFpblRleHRVc2FnZXNUZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovcHNpL3NlYXJjaC9QbGFpblRleHRVc2FnZXNUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDNlYmY3NwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9wc2kvc2VhcmNoL1BsYWluVGV4dFVzYWdlc1Rlc3QuamF2YQpAQCAtMCwwICsxLDEwNyBAQAorLyoKKyAqIENvcHlyaWdodCAyMDAwLTIwMTIgSmV0QnJhaW5zIHMuci5vLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KK3BhY2thZ2UgY29tLmludGVsbGlqLnBzaS5zZWFyY2g7CisKK2ltcG9ydCBjb20uaW50ZWxsaWouSmF2YVRlc3RVdGlsOworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLmFwcGxpY2F0aW9uLlJlc3VsdDsKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS5hcHBsaWNhdGlvbi5Xcml0ZUFjdGlvbjsKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS5tb2R1bGUuTW9kdWxlOworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLm1vZHVsZS5Nb2R1bGVVdGlsOworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLnByb2plY3RSb290cy5pbXBsLkphdmFTZGtJbXBsOworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLnJvb3RzLk1vZHVsZVJvb3RNYW5hZ2VyOworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLnZmcy5WaXJ0dWFsRmlsZTsKK2ltcG9ydCBjb20uaW50ZWxsaWoucHNpLlBzaUNsYXNzOworaW1wb3J0IGNvbS5pbnRlbGxpai5wc2kuUHNpRWxlbWVudDsKK2ltcG9ydCBjb20uaW50ZWxsaWoucHNpLlBzaUZpbGU7CitpbXBvcnQgY29tLmludGVsbGlqLnRlc3RGcmFtZXdvcmsuSWRlYVRlc3RVdGlsOworaW1wb3J0IGNvbS5pbnRlbGxpai50ZXN0RnJhbWV3b3JrLlBzaVRlc3RDYXNlOworaW1wb3J0IGNvbS5pbnRlbGxpai50ZXN0RnJhbWV3b3JrLlBzaVRlc3RVdGlsOworaW1wb3J0IGNvbS5pbnRlbGxpai51dGlsLmNvbnRhaW5lcnMuSW50QXJyYXlMaXN0OworCitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworcHVibGljIGNsYXNzIFBsYWluVGV4dFVzYWdlc1Rlc3QgZXh0ZW5kcyBQc2lUZXN0Q2FzZSB7CisgIEBPdmVycmlkZQorICBwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24geworICAgIHN1cGVyLnNldFVwKCk7CisKKyAgICBTdHJpbmcgcm9vdCA9IEphdmFUZXN0VXRpbC5nZXRKYXZhVGVzdERhdGFQYXRoKCkgKyAiL3BzaS9zZWFyY2gvcGxhaW5UZXh0VXNhZ2VzLyIgKyBnZXRUZXN0TmFtZSh0cnVlKTsKKyAgICBQc2lUZXN0VXRpbC5yZW1vdmVBbGxSb290cyhteU1vZHVsZSwgSWRlYVRlc3RVdGlsLmdldE1vY2tKZGsxNygpKTsKKyAgICBQc2lUZXN0VXRpbC5jcmVhdGVUZXN0UHJvamVjdFN0cnVjdHVyZShteVByb2plY3QsIG15TW9kdWxlLCByb290LCBteUZpbGVzVG9EZWxldGUpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFNpbXBsZSgpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdCgiY29tLkZvbyIsIG51bGwsIG5ldyBTdHJpbmdbXXsiVGVzdC50eHQifSwgbmV3IGludFtdezR9LCBuZXcgaW50W117MTF9KTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RYbWxPdXRPZlNjb3BlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZmluYWwgVmlydHVhbEZpbGUgcmVzb3VyY2VzRGlyID0gTW9kdWxlUm9vdE1hbmFnZXIuZ2V0SW5zdGFuY2UobXlNb2R1bGUpLmdldFNvdXJjZVJvb3RzKClbMF0uZmluZENoaWxkKCJyZXNvdXJjZXMiKTsKKyAgICBhc3NlcnROb3ROdWxsKHJlc291cmNlc0Rpcik7CisgICAgbmV3IFdyaXRlQWN0aW9uKCkgeworICAgICAgQE92ZXJyaWRlCisgICAgICBwcm90ZWN0ZWQgdm9pZCBydW4oZmluYWwgUmVzdWx0IHJlc3VsdCkgeworICAgICAgICBmaW5hbCBNb2R1bGUgbW9kdWxlID0gY3JlYXRlTW9kdWxlKCJyZXMiKTsKKyAgICAgICAgUHNpVGVzdFV0aWwuYWRkQ29udGVudFJvb3QobW9kdWxlLCByZXNvdXJjZXNEaXIpOworICAgICAgICBmaW5hbCBWaXJ0dWFsRmlsZSBjaGlsZCA9IHJlc291cmNlc0Rpci5maW5kQ2hpbGQoIlRlc3QueG1sIik7CisgICAgICAgIGFzc2VydCBjaGlsZCAhPSBudWxsOworICAgICAgICBhc3NlcnRTYW1lKG1vZHVsZSwgTW9kdWxlVXRpbC5maW5kTW9kdWxlRm9yRmlsZShjaGlsZCwgZ2V0UHJvamVjdCgpKSk7CisgICAgICB9CisgICAgfS5leGVjdXRlKCk7CisKKyAgICBQc2lDbGFzcyBhQ2xhc3MgPSBteUphdmFGYWNhZGUuZmluZENsYXNzKCJjb20uRm9vIiwgR2xvYmFsU2VhcmNoU2NvcGUuYWxsU2NvcGUobXlQcm9qZWN0KSk7CisgICAgYXNzZXJ0Tm90TnVsbChhQ2xhc3MpOworICAgIGRvVGVzdCgiY29tLkZvbyIsIGFDbGFzcywgbmV3IFN0cmluZ1tdeyJUZXN0LnhtbCJ9LCBuZXcgaW50W117Mjh9LCBuZXcgaW50W117MzV9KTsKKyAgfQorCisgIHByaXZhdGUgdm9pZCBkb1Rlc3QoU3RyaW5nIHFOYW1lVG9TZWFyY2gsCisgICAgICAgICAgICAgICAgICAgICAgZmluYWwgUHNpRWxlbWVudCBvcmlnaW5hbEVsZW1lbnQsCisgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nW10gZmlsZU5hbWVzLAorICAgICAgICAgICAgICAgICAgICAgIGludFtdIHN0YXJ0cywKKyAgICAgICAgICAgICAgICAgICAgICBpbnRbXSBlbmRzKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBQc2lTZWFyY2hIZWxwZXIgaGVscGVyID0gUHNpU2VhcmNoSGVscGVyLlNFUlZJQ0UuZ2V0SW5zdGFuY2UobXlQcm9qZWN0KTsKKyAgICBmaW5hbCBMaXN0PFBzaUZpbGU+IGZpbGVzTGlzdCA9IG5ldyBBcnJheUxpc3Q8UHNpRmlsZT4oKTsKKyAgICBmaW5hbCBJbnRBcnJheUxpc3Qgc3RhcnRzTGlzdCA9IG5ldyBJbnRBcnJheUxpc3QoKTsKKyAgICBmaW5hbCBJbnRBcnJheUxpc3QgZW5kc0xpc3QgPSBuZXcgSW50QXJyYXlMaXN0KCk7CisgICAgaGVscGVyLnByb2Nlc3NVc2FnZXNJbk5vbkphdmFGaWxlcyhvcmlnaW5hbEVsZW1lbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBxTmFtZVRvU2VhcmNoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IFBzaU5vbkphdmFGaWxlUmVmZXJlbmNlUHJvY2Vzc29yKCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVibGljIGJvb2xlYW4gcHJvY2VzcyhQc2lGaWxlIGZpbGUsIGludCBzdGFydE9mZnNldCwgaW50IGVuZE9mZnNldCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVzTGlzdC5hZGQoZmlsZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRzTGlzdC5hZGQoc3RhcnRPZmZzZXQpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZHNMaXN0LmFkZChlbmRPZmZzZXQpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR2xvYmFsU2VhcmNoU2NvcGUucHJvamVjdFNjb3BlKG15UHJvamVjdCkKKyAgICApOworCisgICAgYXNzZXJ0RXF1YWxzKCJ1c2FnZXMgY291bnQiLCBmaWxlTmFtZXMubGVuZ3RoLCBmaWxlc0xpc3Quc2l6ZSgpKTsKKworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZmlsZU5hbWVzLmxlbmd0aDsgaSsrKSB7CisgICAgICBhc3NlcnRFcXVhbHMoImZpbGVzWyIgKyBpICsgIl0iLCBmaWxlTmFtZXNbaV0sIGZpbGVzTGlzdC5nZXQoaSkuZ2V0TmFtZSgpKTsKKyAgICB9CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IHN0YXJ0cy5sZW5ndGg7IGkrKykgeworICAgICAgYXNzZXJ0RXF1YWxzKCJzdGFydHNbIiArIGkgKyAiXSIsIHN0YXJ0c1tpXSwgc3RhcnRzTGlzdC5nZXQoaSkpOworICAgIH0KKworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZW5kcy5sZW5ndGg7IGkrKykgeworICAgICAgYXNzZXJ0RXF1YWxzKCJlbmRzWyIgKyBpICsgIl0iLCBlbmRzW2ldLCBlbmRzTGlzdC5nZXQoaSkpOworICAgIH0KKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL3BzaS9zZWFyY2gvU2VhcmNoSW5MaWJzVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL3BzaS9zZWFyY2gvU2VhcmNoSW5MaWJzVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY3NmU1NzAKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovcHNpL3NlYXJjaC9TZWFyY2hJbkxpYnNUZXN0LmphdmEKQEAgLTAsMCArMSw4OCBAQAorcGFja2FnZSBjb20uaW50ZWxsaWoucHNpLnNlYXJjaDsKKworaW1wb3J0IGNvbS5pbnRlbGxpai5KYXZhVGVzdFV0aWw7CitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkucm9vdHMuTW9kdWxlUm9vdE1vZGlmaWNhdGlvblV0aWw7CitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkudmZzLlZpcnR1YWxGaWxlOworaW1wb3J0IGNvbS5pbnRlbGxpai5wc2kuUHNpQ2xhc3M7CitpbXBvcnQgY29tLmludGVsbGlqLnBzaS5Qc2lGaWxlOworaW1wb3J0IGNvbS5pbnRlbGxpai5wc2kuUHNpUmVmZXJlbmNlOworaW1wb3J0IGNvbS5pbnRlbGxpai5wc2kuc2VhcmNoLnNlYXJjaGVzLlJlZmVyZW5jZXNTZWFyY2g7CitpbXBvcnQgY29tLmludGVsbGlqLnRlc3RGcmFtZXdvcmsuUHNpVGVzdENhc2U7CitpbXBvcnQgY29tLmludGVsbGlqLnRlc3RGcmFtZXdvcmsuUHNpVGVzdFV0aWw7CisKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworaW1wb3J0IGphdmEudXRpbC5BcnJheXM7CitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb25zOworaW1wb3J0IGphdmEudXRpbC5Db21wYXJhdG9yOworCitwdWJsaWMgY2xhc3MgU2VhcmNoSW5MaWJzVGVzdCBleHRlbmRzIFBzaVRlc3RDYXNlIHsKKyAgcHVibGljIHZvaWQgdGVzdFNlYXJjaEluUHJvamVjdCgpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdCgiUHJvamVjdENsYXNzIiwgbmV3IFN0cmluZ1tdeyJQcm9qZWN0Q2xhc3MuamF2YSJ9LCBHbG9iYWxTZWFyY2hTY29wZS5wcm9qZWN0U2NvcGUobXlQcm9qZWN0KSk7CisgICAgZG9UZXN0KCJMaWJyYXJ5Q2xhc3MxIiwgbmV3IFN0cmluZ1tdeyJQcm9qZWN0Q2xhc3MuamF2YSJ9LCBHbG9iYWxTZWFyY2hTY29wZS5wcm9qZWN0U2NvcGUobXlQcm9qZWN0KSk7CisgICAgZG9UZXN0KCJMaWJyYXJ5Q2xhc3MyIiwgbmV3IFN0cmluZ1tde30sIEdsb2JhbFNlYXJjaFNjb3BlLnByb2plY3RTY29wZShteVByb2plY3QpKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RTZWFyY2hJbkxpYnMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoIlByb2plY3RDbGFzcyIsIG5ldyBTdHJpbmdbXXsiUHJvamVjdENsYXNzLmphdmEifSwgR2xvYmFsU2VhcmNoU2NvcGUuYWxsU2NvcGUobXlQcm9qZWN0KSk7CisgICAgZG9UZXN0KCJMaWJyYXJ5Q2xhc3MxIiwgbmV3IFN0cmluZ1tdeyJMaWJyYXJ5Q2xhc3MyLmphdmEiLCAiUHJvamVjdENsYXNzLmphdmEifSwgR2xvYmFsU2VhcmNoU2NvcGUuYWxsU2NvcGUobXlQcm9qZWN0KSk7CisgICAgZG9UZXN0KCJMaWJyYXJ5Q2xhc3MyIiwgbmV3IFN0cmluZ1tdeyJMaWJyYXJ5Q2xhc3MxLmphdmEifSwgR2xvYmFsU2VhcmNoU2NvcGUuYWxsU2NvcGUobXlQcm9qZWN0KSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0SW5uZXJTb3VyY2VSb290KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KCJQcm9qZWN0Q2xhc3MyIiwgbmV3IFN0cmluZ1tdeyJQcm9qZWN0Q2xhc3MyLmphdmEifSwgR2xvYmFsU2VhcmNoU2NvcGUucHJvamVjdFNjb3BlKG15UHJvamVjdCkpOworICB9CisKKyAgcHJpdmF0ZSB2b2lkIGRvVGVzdChTdHJpbmcgY2xhc3NOYW1lVG9TZWFyY2gsIFN0cmluZ1tdIGV4cGVjdGVkRmlsZU5hbWVzLCBTZWFyY2hTY29wZSBzY29wZSkgdGhyb3dzIEV4Y2VwdGlvbiB7CisKKyAgICBTdHJpbmcgcm9vdCA9IEphdmFUZXN0VXRpbC5nZXRKYXZhVGVzdERhdGFQYXRoKCkgKyAiL3BzaS9zZWFyY2gvc2VhcmNoSW5MaWJzIjsKKyAgICBWaXJ0dWFsRmlsZSByb290RmlsZSA9IFBzaVRlc3RVdGlsLmNyZWF0ZVRlc3RQcm9qZWN0U3RydWN0dXJlKG15UHJvamVjdCwgbXlNb2R1bGUsIHJvb3QsIG15RmlsZXNUb0RlbGV0ZSwgZmFsc2UpOworCisgICAgZmluYWwgVmlydHVhbEZpbGUgcHJvamVjdFJvb3QgPSByb290RmlsZS5maW5kQ2hpbGQoInByb2plY3QiKTsKKyAgICBhc3NlcnROb3ROdWxsKHByb2plY3RSb290KTsKKworICAgIGZpbmFsIFZpcnR1YWxGaWxlIGlubmVyU291cmNlUm9vdCA9IHByb2plY3RSb290LmZpbmRDaGlsZCgic3JjMiIpOworICAgIGFzc2VydE5vdE51bGwoaW5uZXJTb3VyY2VSb290KTsKKworICAgIFZpcnR1YWxGaWxlIGxpYlJvb3QgPSByb290RmlsZS5maW5kQ2hpbGQoImxpYiIpOworICAgIGZpbmFsIFZpcnR1YWxGaWxlIGxpYkNsYXNzZXNSb290ID0gbGliUm9vdC5maW5kQ2hpbGQoImNsYXNzZXMiKTsKKyAgICBmaW5hbCBWaXJ0dWFsRmlsZSBsaWJTcmNSb290ID0gbGliUm9vdC5maW5kQ2hpbGQoInNyYyIpOworICAgIGFzc2VydE5vdE51bGwobGliUm9vdCk7CisKKyAgICBQc2lUZXN0VXRpbC5yZW1vdmVBbGxSb290cyhteU1vZHVsZSwgbnVsbCk7CisgICAgUHNpVGVzdFV0aWwuYWRkU291cmNlUm9vdChteU1vZHVsZSwgcHJvamVjdFJvb3QpOworICAgIFBzaVRlc3RVdGlsLmFkZFNvdXJjZVJvb3QobXlNb2R1bGUsIGlubmVyU291cmNlUm9vdCk7CisgICAgTW9kdWxlUm9vdE1vZGlmaWNhdGlvblV0aWwuYWRkTW9kdWxlTGlicmFyeShteU1vZHVsZSwgImxpYiIsIENvbGxlY3Rpb25zLnNpbmdsZXRvbkxpc3QobGliQ2xhc3Nlc1Jvb3QuZ2V0VXJsKCkpLCBDb2xsZWN0aW9ucy5zaW5nbGV0b25MaXN0KGxpYlNyY1Jvb3QuZ2V0VXJsKCkpKTsKKworICAgIGZpbmFsIFBzaUNsYXNzIGFDbGFzcyA9IG15SmF2YUZhY2FkZS5maW5kQ2xhc3MoY2xhc3NOYW1lVG9TZWFyY2gpOworICAgIGFzc2VydE5vdE51bGwoYUNsYXNzKTsKKworICAgIFBzaVJlZmVyZW5jZVtdIHJlZnMgPSBSZWZlcmVuY2VzU2VhcmNoLnNlYXJjaChhQ2xhc3MsIHNjb3BlLCBmYWxzZSkudG9BcnJheShuZXcgUHNpUmVmZXJlbmNlWzBdKTsKKworICAgIEFycmF5TGlzdDxQc2lGaWxlPiBmaWxlcyA9IG5ldyBBcnJheUxpc3Q8UHNpRmlsZT4oKTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IHJlZnMubGVuZ3RoOyBpKyspIHsKKyAgICAgIFBzaVJlZmVyZW5jZSByZWYgPSByZWZzW2ldOworICAgICAgUHNpRmlsZSBmaWxlID0gcmVmLmdldEVsZW1lbnQoKS5nZXRDb250YWluaW5nRmlsZSgpOworICAgICAgaWYgKCFmaWxlcy5jb250YWlucyhmaWxlKSkgeworICAgICAgICBmaWxlcy5hZGQoZmlsZSk7CisgICAgICB9CisgICAgfQorCisgICAgYXNzZXJ0RXF1YWxzKCJmaWxlcyBjb3VudCIsIGV4cGVjdGVkRmlsZU5hbWVzLmxlbmd0aCwgZmlsZXMuc2l6ZSgpKTsKKworICAgIENvbGxlY3Rpb25zLnNvcnQoZmlsZXMsIG5ldyBDb21wYXJhdG9yKCkgeworICAgICAgQE92ZXJyaWRlCisgICAgICBwdWJsaWMgaW50IGNvbXBhcmUoT2JqZWN0IG8xLCBPYmplY3QgbzIpIHsKKyAgICAgICAgUHNpRmlsZSBmaWxlMSA9IChQc2lGaWxlKSBvMTsKKyAgICAgICAgUHNpRmlsZSBmaWxlMiA9IChQc2lGaWxlKSBvMjsKKyAgICAgICAgcmV0dXJuIGZpbGUxLmdldE5hbWUoKS5jb21wYXJlVG8oZmlsZTIuZ2V0TmFtZSgpKTsKKyAgICAgIH0KKyAgICB9KTsKKyAgICBBcnJheXMuc29ydChleHBlY3RlZEZpbGVOYW1lcyk7CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGV4cGVjdGVkRmlsZU5hbWVzLmxlbmd0aDsgaSsrKSB7CisgICAgICBTdHJpbmcgbmFtZSA9IGV4cGVjdGVkRmlsZU5hbWVzW2ldOworICAgICAgUHNpRmlsZSBmaWxlID0gKFBzaUZpbGUpIGZpbGVzLmdldChpKTsKKyAgICAgIGFzc2VydEVxdWFscyhuYW1lLCBmaWxlLmdldE5hbWUoKSk7CisgICAgfQorICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovcHNpL3NlYXJjaC9VcGRhdGVDYWNoZVRlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9wc2kvc2VhcmNoL1VwZGF0ZUNhY2hlVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAxZmIyZDEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovcHNpL3NlYXJjaC9VcGRhdGVDYWNoZVRlc3QuamF2YQpAQCAtMCwwICsxLDUwMSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDAwLTIwMTIgSmV0QnJhaW5zIHMuci5vLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KK3BhY2thZ2UgY29tLmludGVsbGlqLnBzaS5zZWFyY2g7CisKK2ltcG9ydCBjb20uaW50ZWxsaWouSmF2YVRlc3RVdGlsOworaW1wb3J0IGNvbS5pbnRlbGxpai5pZGUuaGlnaGxpZ2h0ZXIuSmF2YUZpbGVUeXBlOworaW1wb3J0IGNvbS5pbnRlbGxpai5pZGUuaW1wbC5Qcm9qZWN0VXRpbDsKK2ltcG9ydCBjb20uaW50ZWxsaWouaWRlLnRvZG8uVG9kb0NvbmZpZ3VyYXRpb247CitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkuYXBwbGljYXRpb24uQXBwbGljYXRpb25NYW5hZ2VyOworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLmNvbW1hbmQuV3JpdGVDb21tYW5kQWN0aW9uOworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLnByb2plY3QuUHJvamVjdDsKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS5wcm9qZWN0LlByb2plY3RNYW5hZ2VyOworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLnByb2plY3QuZXguUHJvamVjdE1hbmFnZXJFeDsKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS5wcm9qZWN0Um9vdHMuaW1wbC5Qcm9qZWN0Um9vdFV0aWw7CitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkucm9vdHMuKjsKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS5yb290cy5leC5Qcm9qZWN0Um9vdE1hbmFnZXJFeDsKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS51dGlsLmlvLkZpbGVVdGlsOworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLnZmcy5Mb2NhbEZpbGVTeXN0ZW07CitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkudmZzLlZmc1V0aWw7CitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkudmZzLlZpcnR1YWxGaWxlOworaW1wb3J0IGNvbS5pbnRlbGxpai5wc2kuKjsKK2ltcG9ydCBjb20uaW50ZWxsaWoucHNpLmltcGwuSmF2YVBzaUZhY2FkZUV4OworaW1wb3J0IGNvbS5pbnRlbGxpai5wc2kuaW1wbC5Qc2lNYW5hZ2VySW1wbDsKK2ltcG9ydCBjb20uaW50ZWxsaWoucHNpLmltcGwuY2FjaGUuaW1wbC5pZC5JZEluZGV4OworaW1wb3J0IGNvbS5pbnRlbGxpai5wc2kuaW1wbC5jYWNoZS5pbXBsLnRvZG8uVG9kb0luZGV4OworaW1wb3J0IGNvbS5pbnRlbGxpai5wc2kuaW1wbC5jYWNoZS5pbXBsLnRvZG8uVG9kb0luZGV4RW50cnk7CitpbXBvcnQgY29tLmludGVsbGlqLnBzaS5pbXBsLnNvdXJjZS50cmVlLmluamVjdGVkLkluamVjdGVkTGFuZ3VhZ2VNYW5hZ2VySW1wbDsKK2ltcG9ydCBjb20uaW50ZWxsaWoucHNpLnNlYXJjaC5zZWFyY2hlcy5SZWZlcmVuY2VzU2VhcmNoOworaW1wb3J0IGNvbS5pbnRlbGxpai50ZXN0RnJhbWV3b3JrLlBsYXRmb3JtVGVzdENhc2U7CitpbXBvcnQgY29tLmludGVsbGlqLnRlc3RGcmFtZXdvcmsuUHNpVGVzdENhc2U7CitpbXBvcnQgY29tLmludGVsbGlqLnRlc3RGcmFtZXdvcmsuUHNpVGVzdFV0aWw7CitpbXBvcnQgY29tLmludGVsbGlqLnV0aWwuQXJyYXlVdGlsOworaW1wb3J0IGNvbS5pbnRlbGxpai51dGlsLlByb2Nlc3NvcjsKK2ltcG9ydCBjb20uaW50ZWxsaWoudXRpbC5pbmRleGluZy5GaWxlQmFzZWRJbmRleDsKK2ltcG9ydCBvcmcuamV0YnJhaW5zLmFubm90YXRpb25zLk5vbk5sczsKKworaW1wb3J0IGphdmEuaW8uRmlsZTsKK2ltcG9ydCBqYXZhLnV0aWwuKjsKKworQFBsYXRmb3JtVGVzdENhc2UuV3JhcEluQ29tbWFuZAorcHVibGljIGNsYXNzIFVwZGF0ZUNhY2hlVGVzdCBleHRlbmRzIFBzaVRlc3RDYXNleworICBAT3ZlcnJpZGUKKyAgcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBzdXBlci5zZXRVcCgpOworCisgICAgRmlsZUJhc2VkSW5kZXguZ2V0SW5zdGFuY2UoKS5yZXF1ZXN0UmVidWlsZChJZEluZGV4Lk5BTUUpOworICAgIEZpbGVCYXNlZEluZGV4LmdldEluc3RhbmNlKCkucmVxdWVzdFJlYnVpbGQoVG9kb0luZGV4Lk5BTUUpOworICB9CisKKyAgQE92ZXJyaWRlCisgIHByb3RlY3RlZCB2b2lkIHNldFVwUHJvamVjdCgpIHRocm93cyBFeGNlcHRpb24geworICAgIG15UHJvamVjdE1hbmFnZXIgPSBQcm9qZWN0TWFuYWdlckV4LmdldEluc3RhbmNlRXgoKTsKKyAgICBMT0cuYXNzZXJ0VHJ1ZShteVByb2plY3RNYW5hZ2VyICE9IG51bGwsICJDYW5ub3QgaW5zdGFudGlhdGUgUHJvamVjdE1hbmFnZXIgY29tcG9uZW50Iik7CisKKyAgICBGaWxlIHByb2plY3RGaWxlID0gZ2V0SXByRmlsZSgpOworICAgIGxvYWRBbmRTZXR1cFByb2plY3QocHJvamVjdEZpbGUuZ2V0UGF0aCgpKTsKKyAgfQorCisgIHByaXZhdGUgdm9pZCBsb2FkQW5kU2V0dXBQcm9qZWN0KFN0cmluZyBwYXRoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBMb2NhbEZpbGVTeXN0ZW0uZ2V0SW5zdGFuY2UoKS5yZWZyZXNoSW9GaWxlcyhteUZpbGVzVG9EZWxldGUpOworCisgICAgbXlQcm9qZWN0ID0gUHJvamVjdE1hbmFnZXIuZ2V0SW5zdGFuY2UoKS5sb2FkQW5kT3BlblByb2plY3QocGF0aCk7CisKKyAgICBzZXRVcE1vZHVsZSgpOworCisgICAgZmluYWwgU3RyaW5nIHJvb3QgPSBKYXZhVGVzdFV0aWwuZ2V0SmF2YVRlc3REYXRhUGF0aCgpICsgIi9wc2kvc2VhcmNoL3VwZGF0ZUNhY2hlIjsKKyAgICBQc2lUZXN0VXRpbC5jcmVhdGVUZXN0UHJvamVjdFN0cnVjdHVyZShteVByb2plY3QsIG15TW9kdWxlLCByb290LCBteUZpbGVzVG9EZWxldGUpOworCisgICAgc2V0VXBKZGsoKTsKKworICAgIG15UHJvamVjdE1hbmFnZXIub3BlblRlc3RQcm9qZWN0KG15UHJvamVjdCk7CisgICAgcnVuU3RhcnR1cEFjdGl2aXRpZXMoKTsKKyAgfQorCisgIEBPdmVycmlkZQorICBwcm90ZWN0ZWQgdm9pZCB0ZWFyRG93bigpIHRocm93cyBFeGNlcHRpb24geworICAgIFByb2plY3RNYW5hZ2VyLmdldEluc3RhbmNlKCkuY2xvc2VQcm9qZWN0KG15UHJvamVjdCk7CisgICAgc3VwZXIudGVhckRvd24oKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RGaWxlQ3JlYXRpb24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBQc2lEaXJlY3Rvcnkgcm9vdCA9IFByb2plY3RSb290VXRpbC5nZXRBbGxDb250ZW50Um9vdHMobXlQcm9qZWN0KSBbMF07CisKKyAgICBQc2lGaWxlIGZpbGUgPSBQc2lGaWxlRmFjdG9yeS5nZXRJbnN0YW5jZShteVByb2plY3QpLmNyZWF0ZUZpbGVGcm9tVGV4dCgiTmV3LmphdmEiLCBKYXZhRmlsZVR5cGUuSU5TVEFOQ0UsICJjbGFzcyBBeyBPYmplY3Qgbzt9Iik7CisgICAgZmlsZSA9IChQc2lGaWxlKXJvb3QuYWRkKGZpbGUpOworICAgIGFzc2VydE5vdE51bGwoZmlsZSk7CisKKyAgICBQc2lDbGFzcyBvYmplY3RDbGFzcyA9IG15SmF2YUZhY2FkZS5maW5kQ2xhc3MoQ29tbW9uQ2xhc3NOYW1lcy5KQVZBX0xBTkdfT0JKRUNULCBHbG9iYWxTZWFyY2hTY29wZS5hbGxTY29wZShnZXRQcm9qZWN0KCkpKTsKKyAgICBhc3NlcnROb3ROdWxsKG9iamVjdENsYXNzKTsKKyAgICBjaGVja1VzYWdlcyhvYmplY3RDbGFzcywgbmV3IFN0cmluZ1tdeyJOZXcuamF2YSJ9KTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RFeHRlcm5hbEZpbGVDcmVhdGlvbigpIHRocm93cyBFeGNlcHRpb24geworICAgIFZpcnR1YWxGaWxlIHJvb3QgPSBQcm9qZWN0Um9vdE1hbmFnZXIuZ2V0SW5zdGFuY2UobXlQcm9qZWN0KS5nZXRDb250ZW50Um9vdHMoKVswXTsKKworICAgIFN0cmluZyBuZXdGaWxlUGF0aCA9IHJvb3QuZ2V0UHJlc2VudGFibGVVcmwoKSArIEZpbGUuc2VwYXJhdG9yQ2hhciArICJOZXcuamF2YSI7CisgICAgRmlsZVV0aWwud3JpdGVUb0ZpbGUobmV3IEZpbGUobmV3RmlsZVBhdGgpLCAiY2xhc3MgQXsgT2JqZWN0IG87fSIuZ2V0Qnl0ZXMoKSk7CisgICAgVmlydHVhbEZpbGUgZmlsZSA9IExvY2FsRmlsZVN5c3RlbS5nZXRJbnN0YW5jZSgpLnJlZnJlc2hBbmRGaW5kRmlsZUJ5UGF0aChuZXdGaWxlUGF0aC5yZXBsYWNlKEZpbGUuc2VwYXJhdG9yQ2hhciwgJy8nKSk7CisgICAgYXNzZXJ0Tm90TnVsbChmaWxlKTsKKyAgICBQc2lEb2N1bWVudE1hbmFnZXIuZ2V0SW5zdGFuY2UobXlQcm9qZWN0KS5jb21taXRBbGxEb2N1bWVudHMoKTsKKworICAgIFBzaUNsYXNzIG9iamVjdENsYXNzID0gbXlKYXZhRmFjYWRlLmZpbmRDbGFzcyhDb21tb25DbGFzc05hbWVzLkpBVkFfTEFOR19PQkpFQ1QsIEdsb2JhbFNlYXJjaFNjb3BlLmFsbFNjb3BlKGdldFByb2plY3QoKSkpOworICAgIGFzc2VydE5vdE51bGwob2JqZWN0Q2xhc3MpOworICAgIGNoZWNrVXNhZ2VzKG9iamVjdENsYXNzLCBuZXcgU3RyaW5nW117Ik5ldy5qYXZhIn0pOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEV4dGVybmFsRmlsZURlbGV0aW9uKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgVmlydHVhbEZpbGUgcm9vdCA9IFByb2plY3RSb290TWFuYWdlci5nZXRJbnN0YW5jZShteVByb2plY3QpLmdldENvbnRlbnRSb290cygpWzBdOworCisgICAgVmlydHVhbEZpbGUgZmlsZSA9IHJvb3QuZmluZENoaWxkKCIxLmphdmEiKTsKKyAgICBhc3NlcnROb3ROdWxsKGZpbGUpOworICAgIGZpbGUuZGVsZXRlKG51bGwpOworCisgICAgUHNpQ2xhc3Mgc3RyaW5nQ2xhc3MgPSBteUphdmFGYWNhZGUuZmluZENsYXNzKCJqYXZhLmxhbmcuU3RyaW5nIiwgR2xvYmFsU2VhcmNoU2NvcGUuYWxsU2NvcGUoZ2V0UHJvamVjdCgpKSk7CisgICAgYXNzZXJ0Tm90TnVsbChzdHJpbmdDbGFzcyk7CisgICAgY2hlY2tVc2FnZXMoc3RyaW5nQ2xhc3MsIEFycmF5VXRpbC5FTVBUWV9TVFJJTkdfQVJSQVkpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEV4dGVybmFsRmlsZU1vZGlmaWNhdGlvbigpIHRocm93cyBFeGNlcHRpb24geworICAgIFZpcnR1YWxGaWxlIHJvb3QgPSBQcm9qZWN0Um9vdE1hbmFnZXIuZ2V0SW5zdGFuY2UobXlQcm9qZWN0KS5nZXRDb250ZW50Um9vdHMoKVswXTsKKworICAgIFZpcnR1YWxGaWxlIGZpbGUgPSByb290LmZpbmRDaGlsZCgiMS5qYXZhIik7CisgICAgYXNzZXJ0Tm90TnVsbChmaWxlKTsKKyAgICBWZnNVdGlsLnNhdmVUZXh0KGZpbGUsICJjbGFzcyBBeyBPYmplY3Qgbzt9Iik7CisgICAgUHNpRG9jdW1lbnRNYW5hZ2VyLmdldEluc3RhbmNlKG15UHJvamVjdCkuY29tbWl0QWxsRG9jdW1lbnRzKCk7CisKKyAgICBQc2lDbGFzcyBvYmplY3RDbGFzcyA9IG15SmF2YUZhY2FkZS5maW5kQ2xhc3MoQ29tbW9uQ2xhc3NOYW1lcy5KQVZBX0xBTkdfT0JKRUNULCBHbG9iYWxTZWFyY2hTY29wZS5hbGxTY29wZShnZXRQcm9qZWN0KCkpKTsKKyAgICBhc3NlcnROb3ROdWxsKG9iamVjdENsYXNzKTsKKyAgICBjaGVja1VzYWdlcyhvYmplY3RDbGFzcywgbmV3IFN0cmluZ1tdeyIxLmphdmEifSk7CisgIH0KKworICBAT3ZlcnJpZGUKKyAgcHJvdGVjdGVkIGJvb2xlYW4gaXNSdW5JbldyaXRlQWN0aW9uKCkgeworICAgIHJldHVybiAhZ2V0VGVzdE5hbWUoZmFsc2UpLmVxdWFscygiRXh0ZXJuYWxGaWxlTW9kaWZpY2F0aW9uV2hpbGVQcm9qZWN0Q2xvc2VkIik7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0RXh0ZXJuYWxGaWxlTW9kaWZpY2F0aW9uV2hpbGVQcm9qZWN0Q2xvc2VkKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgVmlydHVhbEZpbGUgcm9vdCA9IFByb2plY3RSb290TWFuYWdlci5nZXRJbnN0YW5jZShteVByb2plY3QpLmdldENvbnRlbnRSb290cygpWzBdOworCisgICAgUHNpQ2xhc3Mgb2JqZWN0Q2xhc3MgPSBteUphdmFGYWNhZGUuZmluZENsYXNzKENvbW1vbkNsYXNzTmFtZXMuSkFWQV9MQU5HX09CSkVDVCwgR2xvYmFsU2VhcmNoU2NvcGUuYWxsU2NvcGUoZ2V0UHJvamVjdCgpKSk7CisgICAgYXNzZXJ0Tm90TnVsbChvYmplY3RDbGFzcyk7CisgICAgY2hlY2tVc2FnZXMob2JqZWN0Q2xhc3MsIG5ldyBTdHJpbmdbXXt9KTsKKyAgICBGaWxlQmFzZWRJbmRleC5nZXRJbnN0YW5jZSgpLmdldENvbnRhaW5pbmdGaWxlcyhUb2RvSW5kZXguTkFNRSwgbmV3IFRvZG9JbmRleEVudHJ5KCJ0b2RvIiwgdHJ1ZSksIEdsb2JhbFNlYXJjaFNjb3BlLmFsbFNjb3BlKGdldFByb2plY3QoKSkpOworCisgICAgZmluYWwgU3RyaW5nIHByb2plY3RMb2NhdGlvbiA9IG15UHJvamVjdC5nZXRQcmVzZW50YWJsZVVybCgpOworICAgIGFzc2VydCBwcm9qZWN0TG9jYXRpb24gIT0gbnVsbCA6IG15UHJvamVjdDsKKyAgICBteVByb2plY3Quc2F2ZSgpOworICAgIGZpbmFsIFZpcnR1YWxGaWxlIGNvbnRlbnQgPSBNb2R1bGVSb290TWFuYWdlci5nZXRJbnN0YW5jZShnZXRNb2R1bGUoKSkuZ2V0Q29udGVudFJvb3RzKClbMF07CisgICAgUHJvamVjdCBwcm9qZWN0ID0gbXlQcm9qZWN0OworICAgIFByb2plY3RVdGlsLmNsb3NlQW5kRGlzcG9zZShwcm9qZWN0KTsKKyAgICBJbmplY3RlZExhbmd1YWdlTWFuYWdlckltcGwuY2hlY2tJbmplY3RvcnNBcmVEaXNwb3NlZChwcm9qZWN0KTsKKworICAgIGFzc2VydFRydWUoIlByb2plY3Qgd2FzIG5vdCBkaXNwb3NlZCIsIG15UHJvamVjdC5pc0Rpc3Bvc2VkKCkpOworICAgIG15TW9kdWxlID0gbnVsbDsKKyAgICAKKyAgICBmaW5hbCBGaWxlIGZpbGUgPSBuZXcgRmlsZShyb290LmdldFBhdGgoKSwgIjEuamF2YSIpOworICAgIGFzc2VydFRydWUoZmlsZS5leGlzdHMoKSk7CisKKyAgICBGaWxlVXRpbC53cml0ZVRvRmlsZShmaWxlLCAiY2xhc3MgQXsgT2JqZWN0IG87fSIuZ2V0Qnl0ZXMoKSk7CisgICAgcm9vdC5yZWZyZXNoKGZhbHNlLCB0cnVlKTsKKworICAgIExvY2FsRmlsZVN5c3RlbS5nZXRJbnN0YW5jZSgpLnJlZnJlc2goZmFsc2UpOworCisgICAgbXlQcm9qZWN0ID0gUHJvamVjdE1hbmFnZXIuZ2V0SW5zdGFuY2UoKS5sb2FkQW5kT3BlblByb2plY3QocHJvamVjdExvY2F0aW9uKTsKKyAgICBJbmplY3RlZExhbmd1YWdlTWFuYWdlckltcGwucHVzaEluamVjdG9ycyhnZXRQcm9qZWN0KCkpOworCisgICAgc2V0VXBNb2R1bGUoKTsKKyAgICBzZXRVcEpkaygpOworICAgIFByb2plY3RNYW5hZ2VyRXguZ2V0SW5zdGFuY2VFeCgpLm9wZW5UZXN0UHJvamVjdChteVByb2plY3QpOworICAgIHJ1blN0YXJ0dXBBY3Rpdml0aWVzKCk7CisgICAgUHNpVGVzdFV0aWwuYWRkU291cmNlQ29udGVudFRvUm9vdHMoZ2V0TW9kdWxlKCksIGNvbnRlbnQpOworCisgICAgYXNzZXJ0Tm90TnVsbChteVByb2plY3QpOworICAgIG15UHNpTWFuYWdlciA9IChQc2lNYW5hZ2VySW1wbCkgUHNpTWFuYWdlci5nZXRJbnN0YW5jZShteVByb2plY3QpOworICAgIG15SmF2YUZhY2FkZSA9IEphdmFQc2lGYWNhZGVFeC5nZXRJbnN0YW5jZUV4KG15UHJvamVjdCk7CisKKyAgICBvYmplY3RDbGFzcyA9IG15SmF2YUZhY2FkZS5maW5kQ2xhc3MoQ29tbW9uQ2xhc3NOYW1lcy5KQVZBX0xBTkdfT0JKRUNULCBHbG9iYWxTZWFyY2hTY29wZS5hbGxTY29wZShnZXRQcm9qZWN0KCkpKTsKKyAgICBhc3NlcnROb3ROdWxsKG9iamVjdENsYXNzKTsKKyAgICBjaGVja1VzYWdlcyhvYmplY3RDbGFzcywgbmV3IFN0cmluZ1tdeyIxLmphdmEifSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0RXh0ZXJuYWxEaXJDcmVhdGlvbigpIHRocm93cyBFeGNlcHRpb24geworICAgIFZpcnR1YWxGaWxlIHJvb3QgPSBQcm9qZWN0Um9vdE1hbmFnZXIuZ2V0SW5zdGFuY2UobXlQcm9qZWN0KS5nZXRDb250ZW50Um9vdHMoKVswXTsKKworICAgIFN0cmluZyBuZXdGaWxlUGF0aCA9IHJvb3QuZ2V0UHJlc2VudGFibGVVcmwoKSArIEZpbGUuc2VwYXJhdG9yQ2hhciArICJkaXIiICsgRmlsZS5zZXBhcmF0b3JDaGFyICsgIk5ldy5qYXZhIjsKKyAgICBMT0cuYXNzZXJ0VHJ1ZShuZXcgRmlsZShuZXdGaWxlUGF0aCkuZ2V0UGFyZW50RmlsZSgpLm1rZGlyKCkpOworICAgIEZpbGVVdGlsLndyaXRlVG9GaWxlKG5ldyBGaWxlKG5ld0ZpbGVQYXRoKSwgImNsYXNzIEF7IE9iamVjdCBvO30iLmdldEJ5dGVzKCkpOworICAgIFZpcnR1YWxGaWxlIGZpbGUgPSBMb2NhbEZpbGVTeXN0ZW0uZ2V0SW5zdGFuY2UoKS5yZWZyZXNoQW5kRmluZEZpbGVCeVBhdGgobmV3RmlsZVBhdGgucmVwbGFjZShGaWxlLnNlcGFyYXRvckNoYXIsICcvJykpOworICAgIGFzc2VydE5vdE51bGwoZmlsZSk7CisgICAgUHNpRG9jdW1lbnRNYW5hZ2VyLmdldEluc3RhbmNlKG15UHJvamVjdCkuY29tbWl0QWxsRG9jdW1lbnRzKCk7CisKKyAgICBQc2lDbGFzcyBvYmplY3RDbGFzcyA9IG15SmF2YUZhY2FkZS5maW5kQ2xhc3MoQ29tbW9uQ2xhc3NOYW1lcy5KQVZBX0xBTkdfT0JKRUNULCBHbG9iYWxTZWFyY2hTY29wZS5hbGxTY29wZShnZXRQcm9qZWN0KCkpKTsKKyAgICBhc3NlcnROb3ROdWxsKG9iamVjdENsYXNzKTsKKyAgICBjaGVja1VzYWdlcyhvYmplY3RDbGFzcywgbmV3IFN0cmluZ1tdeyJOZXcuamF2YSJ9KTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RFeHRlcm5hbERpckRlbGV0aW9uKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgVmlydHVhbEZpbGUgcm9vdCA9IFByb2plY3RSb290TWFuYWdlci5nZXRJbnN0YW5jZShteVByb2plY3QpLmdldENvbnRlbnRSb290cygpWzBdOworCisgICAgVmlydHVhbEZpbGUgZmlsZSA9IHJvb3QuZmluZENoaWxkKCJhRGlyIik7CisgICAgYXNzZXJ0Tm90TnVsbChmaWxlKTsKKyAgICBmaWxlLmRlbGV0ZShudWxsKTsKKworICAgIFBzaUNsYXNzIHRocmVhZENsYXNzID0gbXlKYXZhRmFjYWRlLmZpbmRDbGFzcygiamF2YS5sYW5nLlRocmVhZCIsIEdsb2JhbFNlYXJjaFNjb3BlLmFsbFNjb3BlKGdldFByb2plY3QoKSkpOworICAgIGFzc2VydE5vdE51bGwodGhyZWFkQ2xhc3MpOworICAgIGNoZWNrVXNhZ2VzKHRocmVhZENsYXNzLCBBcnJheVV0aWwuRU1QVFlfU1RSSU5HX0FSUkFZKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RUb2RvQ29uZmlndXJhdGlvbkNoYW5nZSgpIHRocm93cyBFeGNlcHRpb257CisgICAgVG9kb1BhdHRlcm4gcGF0dGVybiA9IG5ldyBUb2RvUGF0dGVybigibmV3dG9kbyIsIFRvZG9BdHRyaWJ1dGVzLmNyZWF0ZURlZmF1bHQoKSwgdHJ1ZSk7CisgICAgVG9kb1BhdHRlcm5bXSBvbGRQYXR0ZXJucyA9IFRvZG9Db25maWd1cmF0aW9uLmdldEluc3RhbmNlKCkuZ2V0VG9kb1BhdHRlcm5zKCk7CisgICAgCisgICAgY2hlY2tUb2RvcyhuZXcgU3RyaW5nW117IjIuamF2YSJ9KTsKKyAgICAKKyAgICBUb2RvQ29uZmlndXJhdGlvbi5nZXRJbnN0YW5jZSgpLnNldFRvZG9QYXR0ZXJucyhuZXcgVG9kb1BhdHRlcm5bXXtwYXR0ZXJufSk7CisKKyAgICB0cnl7CisgICAgICBjaGVja1RvZG9zKG5ldyBTdHJpbmdbXXsiMS5qYXZhIn0pOworICAgIH0KKyAgICBmaW5hbGx5eworICAgICAgVG9kb0NvbmZpZ3VyYXRpb24uZ2V0SW5zdGFuY2UoKS5zZXRUb2RvUGF0dGVybnMob2xkUGF0dGVybnMpOworICAgICAgY2hlY2tUb2RvcyhuZXcgU3RyaW5nW117IjIuamF2YSJ9KTsKKyAgICB9CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0QWRkRXhjbHVkZVJvb3QoKSB0aHJvd3MgRXhjZXB0aW9ueworICAgIFBzaVRvZG9TZWFyY2hIZWxwZXIuU0VSVklDRS5nZXRJbnN0YW5jZShteVByb2plY3QpLmZpbmRGaWxlc1dpdGhUb2RvSXRlbXMoKTsgLy8gdG8gaW5pdGlhbGl6ZSBjYWNoZXMKKworICAgIFByb2plY3RSb290TWFuYWdlckV4IHJvb3RNYW5hZ2VyID0gKFByb2plY3RSb290TWFuYWdlckV4KVByb2plY3RSb290TWFuYWdlci5nZXRJbnN0YW5jZShteVByb2plY3QpOworICAgIGZpbmFsIFZpcnR1YWxGaWxlIHJvb3QgPSByb290TWFuYWdlci5nZXRDb250ZW50Um9vdHMoKVswXTsKKworICAgIGZpbmFsIFZpcnR1YWxGaWxlIGRpciA9IHJvb3QuZmluZENoaWxkKCJhRGlyIik7CisKKyAgICBuZXcgV3JpdGVDb21tYW5kQWN0aW9uLlNpbXBsZShnZXRQcm9qZWN0KCkpIHsKKyAgICAgIEBPdmVycmlkZQorICAgICAgcHJvdGVjdGVkIHZvaWQgcnVuKCkgdGhyb3dzIFRocm93YWJsZSB7CisgICAgICAgIFZpcnR1YWxGaWxlIG5ld0ZpbGUgPSBkaXIuY3JlYXRlQ2hpbGREYXRhKG51bGwsICJOZXcuamF2YSIpOworICAgICAgICBWZnNVdGlsLnNhdmVUZXh0KG5ld0ZpbGUsICJjbGFzcyBBeyBFeGNlcHRpb24gZTt9IC8vdG9kbyIpOworICAgICAgfQorICAgIH0uZXhlY3V0ZSgpLnRocm93RXhjZXB0aW9uKCk7CisKKyAgICBQc2lEb2N1bWVudE1hbmFnZXIuZ2V0SW5zdGFuY2UobXlQcm9qZWN0KS5jb21taXRBbGxEb2N1bWVudHMoKTsKKworICAgIFBzaVRlc3RVdGlsLmFkZEV4Y2x1ZGVkUm9vdChteU1vZHVsZSwgZGlyKTsKKworICAgIFBzaUNsYXNzIGV4Y2VwdGlvbkNsYXNzID0gbXlKYXZhRmFjYWRlLmZpbmRDbGFzcygiamF2YS5sYW5nLkV4Y2VwdGlvbiIsR2xvYmFsU2VhcmNoU2NvcGUuYWxsU2NvcGUoZ2V0UHJvamVjdCgpKSk7CisgICAgYXNzZXJ0Tm90TnVsbChleGNlcHRpb25DbGFzcyk7CisgICAgY2hlY2tVc2FnZXMoZXhjZXB0aW9uQ2xhc3MsIG5ldyBTdHJpbmdbXXsiMS5qYXZhIn0pOworICAgIGNoZWNrVG9kb3MobmV3IFN0cmluZ1tde30pOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFJlbW92ZUV4Y2x1ZGVSb290KCkgdGhyb3dzIEV4Y2VwdGlvbnsKKyAgICBQcm9qZWN0Um9vdE1hbmFnZXJFeCByb290TWFuYWdlciA9IChQcm9qZWN0Um9vdE1hbmFnZXJFeClQcm9qZWN0Um9vdE1hbmFnZXIuZ2V0SW5zdGFuY2UobXlQcm9qZWN0KTsKKyAgICBmaW5hbCBWaXJ0dWFsRmlsZSByb290ID0gcm9vdE1hbmFnZXIuZ2V0Q29udGVudFJvb3RzKClbMF07CisKKyAgICBmaW5hbCBWaXJ0dWFsRmlsZSBkaXIgPSByb290LmZpbmRDaGlsZCgiYURpciIpOworCisgICAgUHNpVGVzdFV0aWwuYWRkRXhjbHVkZWRSb290KG15TW9kdWxlLCBkaXIpOworCisgICAgUHNpVG9kb1NlYXJjaEhlbHBlci5TRVJWSUNFLmdldEluc3RhbmNlKG15UHJvamVjdCkuZmluZEZpbGVzV2l0aFRvZG9JdGVtcygpOyAvLyB0byBpbml0aWFsaXplIGNhY2hlcworCisgICAgbmV3IFdyaXRlQ29tbWFuZEFjdGlvbi5TaW1wbGUoZ2V0UHJvamVjdCgpKSB7CisgICAgICBAT3ZlcnJpZGUKKyAgICAgIHByb3RlY3RlZCB2b2lkIHJ1bigpIHRocm93cyBUaHJvd2FibGUgeworICAgICAgICBWaXJ0dWFsRmlsZSBuZXdGaWxlID0gZGlyLmNyZWF0ZUNoaWxkRGF0YShudWxsLCAiTmV3LmphdmEiKTsKKyAgICAgICAgVmZzVXRpbC5zYXZlVGV4dChuZXdGaWxlLCAiY2xhc3MgQXsgRXhjZXB0aW9uIGU7fSAvL3RvZG8iKTsKKyAgICAgIH0KKyAgICB9LmV4ZWN1dGUoKS50aHJvd0V4Y2VwdGlvbigpOworCisgICAgUHNpRG9jdW1lbnRNYW5hZ2VyLmdldEluc3RhbmNlKG15UHJvamVjdCkuY29tbWl0QWxsRG9jdW1lbnRzKCk7CisKKyAgICBQc2lUb2RvU2VhcmNoSGVscGVyLlNFUlZJQ0UuZ2V0SW5zdGFuY2UobXlQcm9qZWN0KS5maW5kRmlsZXNXaXRoVG9kb0l0ZW1zKCk7IC8vIHRvIHVwZGF0ZSBjYWNoZXMKKworICAgIEFwcGxpY2F0aW9uTWFuYWdlci5nZXRBcHBsaWNhdGlvbigpLnJ1bldyaXRlQWN0aW9uKG5ldyBSdW5uYWJsZSgpIHsKKyAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKKyAgICAgICAgZmluYWwgTW9kaWZpYWJsZVJvb3RNb2RlbCByb290TW9kZWwxID0gTW9kdWxlUm9vdE1hbmFnZXIuZ2V0SW5zdGFuY2UobXlNb2R1bGUpLmdldE1vZGlmaWFibGVNb2RlbCgpOworICAgICAgICBmaW5hbCBDb250ZW50RW50cnlbXSBjb250ZW50MSA9IHJvb3RNb2RlbDEuZ2V0Q29udGVudEVudHJpZXMoKTsKKyAgICAgICAgY29udGVudExvb3A6CisgICAgICAgIGZvciAoQ29udGVudEVudHJ5IGNvbnRlbnRFbnRyeSA6IGNvbnRlbnQxKSB7CisgICAgICAgICAgaWYgKHJvb3QuZXF1YWxzKGNvbnRlbnRFbnRyeS5nZXRGaWxlKCkpKSB7CisgICAgICAgICAgICBmaW5hbCBFeGNsdWRlRm9sZGVyW10gZXhjbHVkZUZvbGRlcnMgPSBjb250ZW50RW50cnkuZ2V0RXhjbHVkZUZvbGRlcnMoKTsKKyAgICAgICAgICAgIGZvciAoRXhjbHVkZUZvbGRlciBleGNsdWRlRm9sZGVyIDogZXhjbHVkZUZvbGRlcnMpIHsKKyAgICAgICAgICAgICAgaWYgKGRpci5lcXVhbHMoZXhjbHVkZUZvbGRlci5nZXRGaWxlKCkpKSB7CisgICAgICAgICAgICAgICAgY29udGVudEVudHJ5LnJlbW92ZUV4Y2x1ZGVGb2xkZXIoZXhjbHVkZUZvbGRlcik7CisgICAgICAgICAgICAgICAgYnJlYWsgY29udGVudExvb3A7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcm9vdE1vZGVsMS5jb21taXQoKTsKKyAgICAgIH0KKyAgICB9KTsKKworCisgICAgUHNpQ2xhc3MgZXhjZXB0aW9uQ2xhc3MgPSBteUphdmFGYWNhZGUuZmluZENsYXNzKCJqYXZhLmxhbmcuRXhjZXB0aW9uIiwgR2xvYmFsU2VhcmNoU2NvcGUuYWxsU2NvcGUoZ2V0UHJvamVjdCgpKSk7CisgICAgYXNzZXJ0Tm90TnVsbChleGNlcHRpb25DbGFzcyk7CisgICAgY2hlY2tVc2FnZXMoZXhjZXB0aW9uQ2xhc3MsIG5ldyBTdHJpbmdbXXsiMS5qYXZhIiwgIjIuamF2YSIsICJOZXcuamF2YSJ9KTsKKyAgICBjaGVja1RvZG9zKG5ldyBTdHJpbmdbXXsiMi5qYXZhIiwgIk5ldy5qYXZhIn0pOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEFkZFNvdXJjZVJvb3QoKSB0aHJvd3MgRXhjZXB0aW9ueworICAgIEZpbGUgZGlyID0gY3JlYXRlVGVtcERpcmVjdG9yeSgpOworCisgICAgZmluYWwgVmlydHVhbEZpbGUgcm9vdCA9IExvY2FsRmlsZVN5c3RlbS5nZXRJbnN0YW5jZSgpLnJlZnJlc2hBbmRGaW5kRmlsZUJ5UGF0aChkaXIuZ2V0Q2Fub25pY2FsUGF0aCgpLnJlcGxhY2UoRmlsZS5zZXBhcmF0b3JDaGFyLCAnLycpKTsKKworICAgIG5ldyBXcml0ZUNvbW1hbmRBY3Rpb24uU2ltcGxlKGdldFByb2plY3QoKSkgeworICAgICAgQE92ZXJyaWRlCisgICAgICBwcm90ZWN0ZWQgdm9pZCBydW4oKSB0aHJvd3MgVGhyb3dhYmxlIHsKKyAgICAgICAgUHNpVGVzdFV0aWwuYWRkQ29udGVudFJvb3QobXlNb2R1bGUsIHJvb3QpOworCisgICAgICAgIFZpcnR1YWxGaWxlIG5ld0ZpbGUgPSByb290LmNyZWF0ZUNoaWxkRGF0YShudWxsLCAiTmV3LmphdmEiKTsKKyAgICAgICAgVmZzVXRpbC5zYXZlVGV4dChuZXdGaWxlLCAiY2xhc3MgQXsgRXhjZXB0aW9uIGU7fSAvL3RvZG8iKTsKKyAgICAgIH0KKyAgICB9LmV4ZWN1dGUoKS50aHJvd0V4Y2VwdGlvbigpOworCisgICAgUHNpRG9jdW1lbnRNYW5hZ2VyLmdldEluc3RhbmNlKG15UHJvamVjdCkuY29tbWl0QWxsRG9jdW1lbnRzKCk7CisKKyAgICBQc2lUb2RvU2VhcmNoSGVscGVyLlNFUlZJQ0UuZ2V0SW5zdGFuY2UobXlQcm9qZWN0KS5maW5kRmlsZXNXaXRoVG9kb0l0ZW1zKCk7IC8vIHRvIGluaXRpYWxpemUgY2FjaGVzCisKKyAgICBQc2lUZXN0VXRpbC5hZGRTb3VyY2VSb290KG15TW9kdWxlLCByb290KTsKKworICAgIFBzaUNsYXNzIGV4Y2VwdGlvbkNsYXNzID0gbXlKYXZhRmFjYWRlLmZpbmRDbGFzcygiamF2YS5sYW5nLkV4Y2VwdGlvbiIsIEdsb2JhbFNlYXJjaFNjb3BlLmFsbFNjb3BlKGdldFByb2plY3QoKSkpOworICAgIGFzc2VydE5vdE51bGwoZXhjZXB0aW9uQ2xhc3MpOworICAgIGNoZWNrVXNhZ2VzKGV4Y2VwdGlvbkNsYXNzLCBuZXcgU3RyaW5nW117IjEuamF2YSIsICIyLmphdmEiLCAiTmV3LmphdmEifSk7CisgICAgY2hlY2tUb2RvcyhuZXcgU3RyaW5nW117IjIuamF2YSIsICJOZXcuamF2YSJ9KTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RSZW1vdmVTb3VyY2VSb290KCkgdGhyb3dzIEV4Y2VwdGlvbnsKKyAgICBmaW5hbCBNb2R1bGVSb290TWFuYWdlciByb290TWFuYWdlciA9IE1vZHVsZVJvb3RNYW5hZ2VyLmdldEluc3RhbmNlKG15TW9kdWxlKTsKKyAgICBmaW5hbCBWaXJ0dWFsRmlsZSByb290ID0gcm9vdE1hbmFnZXIuZ2V0Q29udGVudFJvb3RzKClbMF07CisKKyAgICBQc2lUb2RvU2VhcmNoSGVscGVyLlNFUlZJQ0UuZ2V0SW5zdGFuY2UobXlQcm9qZWN0KS5maW5kRmlsZXNXaXRoVG9kb0l0ZW1zKCk7IC8vIHRvIGluaXRpYWxpemUgY2FjaGVzCisKKyAgICBuZXcgV3JpdGVDb21tYW5kQWN0aW9uLlNpbXBsZShnZXRQcm9qZWN0KCkpIHsKKyAgICAgIEBPdmVycmlkZQorICAgICAgcHJvdGVjdGVkIHZvaWQgcnVuKCkgdGhyb3dzIFRocm93YWJsZSB7CisgICAgICAgIFZpcnR1YWxGaWxlIG5ld0ZpbGUgPSByb290LmNyZWF0ZUNoaWxkRGF0YShudWxsLCAiTmV3LmphdmEiKTsKKyAgICAgICAgVmZzVXRpbC5zYXZlVGV4dChuZXdGaWxlLCAiY2xhc3MgQXsgRXhjZXB0aW9uIGU7fSAvL3RvZG8iKTsKKyAgICAgIH0KKyAgICB9LmV4ZWN1dGUoKS50aHJvd0V4Y2VwdGlvbigpOworCisgICAgUHNpRG9jdW1lbnRNYW5hZ2VyLmdldEluc3RhbmNlKG15UHJvamVjdCkuY29tbWl0QWxsRG9jdW1lbnRzKCk7CisKKyAgICBQc2lUb2RvU2VhcmNoSGVscGVyLlNFUlZJQ0UuZ2V0SW5zdGFuY2UobXlQcm9qZWN0KS5maW5kRmlsZXNXaXRoVG9kb0l0ZW1zKCk7IC8vIHRvIHVwZGF0ZSBjYWNoZXMKKworICAgIEFwcGxpY2F0aW9uTWFuYWdlci5nZXRBcHBsaWNhdGlvbigpLnJ1bldyaXRlQWN0aW9uKG5ldyBSdW5uYWJsZSgpIHsKKyAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKKyAgICAgICAgVmlydHVhbEZpbGVbXSBzb3VyY2VSb290cyA9IHJvb3RNYW5hZ2VyLmdldFNvdXJjZVJvb3RzKCk7CisgICAgICAgIExPRy5hc3NlcnRUcnVlKHNvdXJjZVJvb3RzLmxlbmd0aCA9PSAxKTsKKyAgICAgICAgZmluYWwgTW9kaWZpYWJsZVJvb3RNb2RlbCByb290TW9kZWwgPSBNb2R1bGVSb290TWFuYWdlci5nZXRJbnN0YW5jZShteU1vZHVsZSkuZ2V0TW9kaWZpYWJsZU1vZGVsKCk7CisgICAgICAgIGZpbmFsIENvbnRlbnRFbnRyeVtdIGNvbnRlbnQxID0gcm9vdE1vZGVsLmdldENvbnRlbnRFbnRyaWVzKCk7CisgICAgICAgIGNvbnRlbnRMb29wOgorICAgICAgICBmb3IgKENvbnRlbnRFbnRyeSBjb250ZW50RW50cnkgOiBjb250ZW50MSkgeworICAgICAgICAgIGlmIChyb290LmVxdWFscyhjb250ZW50RW50cnkuZ2V0RmlsZSgpKSkgeworICAgICAgICAgICAgZmluYWwgU291cmNlRm9sZGVyW10gc291cmNlRm9sZGVycyA9IGNvbnRlbnRFbnRyeS5nZXRTb3VyY2VGb2xkZXJzKCk7CisgICAgICAgICAgICBmb3IgKFNvdXJjZUZvbGRlciBzb3VyY2VGb2xkZXIgOiBzb3VyY2VGb2xkZXJzKSB7CisgICAgICAgICAgICAgIGlmIChzb3VyY2VSb290c1swXS5lcXVhbHMoc291cmNlRm9sZGVyLmdldEZpbGUoKSkpIHsKKyAgICAgICAgICAgICAgICBjb250ZW50RW50cnkucmVtb3ZlU291cmNlRm9sZGVyKHNvdXJjZUZvbGRlcik7CisgICAgICAgICAgICAgICAgYnJlYWsgY29udGVudExvb3A7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcm9vdE1vZGVsLmNvbW1pdCgpOworICAgICAgfQorICAgIH0pOworCisKKyAgICBQc2lDbGFzcyBleGNlcHRpb25DbGFzcyA9IG15SmF2YUZhY2FkZS5maW5kQ2xhc3MoImphdmEubGFuZy5FeGNlcHRpb24iLCBHbG9iYWxTZWFyY2hTY29wZS5hbGxTY29wZShnZXRQcm9qZWN0KCkpKTsKKyAgICBhc3NlcnROb3ROdWxsKGV4Y2VwdGlvbkNsYXNzKTsKKyAgICAvLyBjdXJyZW50bHkgaXQgYWN0dWFsbHkgZmluZHMgdXNhZ2VzIGJ5IEZRTiBkdWUgdG8gSmF2YSBQU0kgZW5hYmxlZCBmb3Igb3V0LW9mLXNvdXJjZSBqYXZhIGZpbGVzCisgICAgLy8gc28gdGhlIGZvbGxvd2luZyBjaGVjayBpcyBkaXNhYmxlZCAKKyAgICAvL2NoZWNrVXNhZ2VzKGV4Y2VwdGlvbkNsYXNzLCBuZXcgU3RyaW5nW117fSk7CisgICAgY2hlY2tUb2RvcyhuZXcgU3RyaW5nW117IjIuamF2YSIsICJOZXcuamF2YSJ9KTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RBZGRQcm9qZWN0Um9vdCgpIHRocm93cyBFeGNlcHRpb257CisgICAgRmlsZSBkaXIgPSBjcmVhdGVUZW1wRGlyZWN0b3J5KCk7CisKKyAgICBmaW5hbCBWaXJ0dWFsRmlsZSByb290ID0gTG9jYWxGaWxlU3lzdGVtLmdldEluc3RhbmNlKCkucmVmcmVzaEFuZEZpbmRGaWxlQnlQYXRoKGRpci5nZXRDYW5vbmljYWxQYXRoKCkucmVwbGFjZShGaWxlLnNlcGFyYXRvckNoYXIsICcvJykpOworCisgICAgbmV3IFdyaXRlQ29tbWFuZEFjdGlvbi5TaW1wbGUoZ2V0UHJvamVjdCgpKSB7CisgICAgICBAT3ZlcnJpZGUKKyAgICAgIHByb3RlY3RlZCB2b2lkIHJ1bigpIHRocm93cyBUaHJvd2FibGUgeworICAgICAgICBQc2lUZXN0VXRpbC5hZGRTb3VyY2VSb290KG15TW9kdWxlLCByb290KTsKKworICAgICAgICBWaXJ0dWFsRmlsZSBuZXdGaWxlID0gcm9vdC5jcmVhdGVDaGlsZERhdGEobnVsbCwgIk5ldy5qYXZhIik7CisgICAgICAgIFZmc1V0aWwuc2F2ZVRleHQobmV3RmlsZSwgImNsYXNzIEF7IEV4Y2VwdGlvbiBlO30gLy90b2RvIik7CisgICAgICB9CisgICAgfS5leGVjdXRlKCkudGhyb3dFeGNlcHRpb24oKTsKKworICAgIFBzaURvY3VtZW50TWFuYWdlci5nZXRJbnN0YW5jZShteVByb2plY3QpLmNvbW1pdEFsbERvY3VtZW50cygpOworCisgICAgUHNpU2VhcmNoSGVscGVyLlNFUlZJQ0UuZ2V0SW5zdGFuY2UobXlQcm9qZWN0KS5wcm9jZXNzQWxsRmlsZXNXaXRoV29yZCgiYWFhIiwgR2xvYmFsU2VhcmNoU2NvcGUuYWxsU2NvcGUobXlQcm9qZWN0KSwgbmV3IFByb2Nlc3NvcjxQc2lGaWxlPigpIHsKKyAgICAgIEBPdmVycmlkZQorICAgICAgcHVibGljIGJvb2xlYW4gcHJvY2VzcyhmaW5hbCBQc2lGaWxlIHBzaUZpbGUpIHsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICB9CisgICAgfSwgdHJ1ZSk7IC8vIHRvIGluaXRpYWxpemUgY2FjaGVzCisKKy8qCisgICAgcm9vdE1hbmFnZXIuc3RhcnRDaGFuZ2UoKTsKKyAgICByb290TWFuYWdlci5hZGRSb290KHJvb3QsIFByb2plY3RSb290VHlwZS5QUk9KRUNUKTsKKyAgICByb290TWFuYWdlci5maW5pc2hDaGFuZ2UoKTsKKyovCisKKyAgICBQc2lDbGFzcyBleGNlcHRpb25DbGFzcyA9IG15SmF2YUZhY2FkZS5maW5kQ2xhc3MoImphdmEubGFuZy5FeGNlcHRpb24iLCBHbG9iYWxTZWFyY2hTY29wZS5hbGxTY29wZShnZXRQcm9qZWN0KCkpKTsKKyAgICBhc3NlcnROb3ROdWxsKGV4Y2VwdGlvbkNsYXNzKTsKKyAgICBjaGVja1VzYWdlcyhleGNlcHRpb25DbGFzcywgbmV3IFN0cmluZ1tdeyIxLmphdmEiLCAiMi5qYXZhIiwgIk5ldy5qYXZhIn0pOworICAgIGNoZWNrVG9kb3MobmV3IFN0cmluZ1tdeyIyLmphdmEiLCAiTmV3LmphdmEifSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0U0NSNjA2NigpIHRocm93cyBFeGNlcHRpb257CisgICAgUHJvamVjdFJvb3RNYW5hZ2VyRXggcm9vdE1hbmFnZXIgPSAoUHJvamVjdFJvb3RNYW5hZ2VyRXgpUHJvamVjdFJvb3RNYW5hZ2VyLmdldEluc3RhbmNlKG15UHJvamVjdCk7CisgICAgZmluYWwgVmlydHVhbEZpbGUgcm9vdCA9IHJvb3RNYW5hZ2VyLmdldENvbnRlbnRSb290cygpWzBdOworCisgICAgUHNpVG9kb1NlYXJjaEhlbHBlci5TRVJWSUNFLmdldEluc3RhbmNlKG15UHJvamVjdCkuZmluZEZpbGVzV2l0aFRvZG9JdGVtcygpOyAvLyB0byBpbml0aWFsaXplIGNhY2hlcworCisgICAgbmV3IFdyaXRlQ29tbWFuZEFjdGlvbi5TaW1wbGUoZ2V0UHJvamVjdCgpKSB7CisgICAgICBAT3ZlcnJpZGUKKyAgICAgIHByb3RlY3RlZCB2b2lkIHJ1bigpIHRocm93cyBUaHJvd2FibGUgeworICAgICAgICBWaXJ0dWFsRmlsZSBuZXdGaWxlID0gcm9vdC5jcmVhdGVDaGlsZERhdGEobnVsbCwgIk5ldy5qYXZhIik7CisgICAgICAgIFZmc1V0aWwuc2F2ZVRleHQobmV3RmlsZSwgImNsYXNzIEF7IEV4Y2VwdGlvbiBlO30gLy90b2RvIik7CisgICAgICB9CisgICAgfS5leGVjdXRlKCkudGhyb3dFeGNlcHRpb24oKTsKKworICAgIFBzaURvY3VtZW50TWFuYWdlci5nZXRJbnN0YW5jZShteVByb2plY3QpLmNvbW1pdEFsbERvY3VtZW50cygpOworCisgICAgUHNpVG9kb1NlYXJjaEhlbHBlci5TRVJWSUNFLmdldEluc3RhbmNlKG15UHJvamVjdCkuZmluZEZpbGVzV2l0aFRvZG9JdGVtcygpOyAvLyB0byB1cGRhdGUgY2FjaGVzCisKKyAgICBQc2lUZXN0VXRpbC5hZGRFeGNsdWRlZFJvb3QobXlNb2R1bGUsIHJvb3QpOworCisgICAgUHNpQ2xhc3MgZXhjZXB0aW9uQ2xhc3MgPSBteUphdmFGYWNhZGUuZmluZENsYXNzKCJqYXZhLmxhbmcuRXhjZXB0aW9uIiwgR2xvYmFsU2VhcmNoU2NvcGUuYWxsU2NvcGUoZ2V0UHJvamVjdCgpKSk7CisgICAgYXNzZXJ0Tm90TnVsbChleGNlcHRpb25DbGFzcyk7CisgICAgY2hlY2tVc2FnZXMoZXhjZXB0aW9uQ2xhc3MsIG5ldyBTdHJpbmdbXXt9KTsKKyAgICBjaGVja1RvZG9zKG5ldyBTdHJpbmdbXXt9KTsKKyAgfQorCisgIHByaXZhdGUgdm9pZCBjaGVja1VzYWdlcyhQc2lFbGVtZW50IGVsZW1lbnQsIEBOb25ObHMgU3RyaW5nW10gZXhwZWN0ZWRGaWxlcyl7CisgICAgUHNpUmVmZXJlbmNlW10gcmVmcyA9IFJlZmVyZW5jZXNTZWFyY2guc2VhcmNoKGVsZW1lbnQsIEdsb2JhbFNlYXJjaFNjb3BlLnByb2plY3RTY29wZShteVByb2plY3QpLCBmYWxzZSkudG9BcnJheShuZXcgUHNpUmVmZXJlbmNlWzBdKTsKKworICAgIExpc3Q8UHNpRmlsZT4gZmlsZXMgPSBuZXcgQXJyYXlMaXN0PFBzaUZpbGU+KCk7CisgICAgZm9yIChQc2lSZWZlcmVuY2UgcmVmIDogcmVmcykgeworICAgICAgUHNpRmlsZSBmaWxlID0gcmVmLmdldEVsZW1lbnQoKS5nZXRDb250YWluaW5nRmlsZSgpOworICAgICAgaWYgKCFmaWxlcy5jb250YWlucyhmaWxlKSkgeworICAgICAgICBmaWxlcy5hZGQoZmlsZSk7CisgICAgICB9CisgICAgfQorCisgICAgYXNzZXJ0RXF1YWxzKGV4cGVjdGVkRmlsZXMubGVuZ3RoLCBmaWxlcy5zaXplKCkpOworCisgICAgQ29sbGVjdGlvbnMuc29ydChmaWxlcywgbmV3IENvbXBhcmF0b3I8UHNpRmlsZT4oKSB7CisgICAgICBAT3ZlcnJpZGUKKyAgICAgIHB1YmxpYyBpbnQgY29tcGFyZShQc2lGaWxlIGZpbGUxLCBQc2lGaWxlIGZpbGUyKSB7CisgICAgICAgIHJldHVybiBmaWxlMS5nZXROYW1lKCkuY29tcGFyZVRvKGZpbGUyLmdldE5hbWUoKSk7CisgICAgICB9CisgICAgfSk7CisgICAgQXJyYXlzLnNvcnQoZXhwZWN0ZWRGaWxlcyk7CisKKyAgICBmb3IoaW50IGkgPSAwOyBpIDwgZXhwZWN0ZWRGaWxlcy5sZW5ndGg7IGkrKyl7CisgICAgICBTdHJpbmcgbmFtZSA9IGV4cGVjdGVkRmlsZXNbaV07CisgICAgICBQc2lGaWxlIGZpbGUgPSBmaWxlcy5nZXQoaSk7CisgICAgICBhc3NlcnRFcXVhbHMobmFtZSwgZmlsZS5nZXROYW1lKCkpOworICAgIH0KKyAgfQorCisgIHByaXZhdGUgdm9pZCBjaGVja1RvZG9zKEBOb25ObHMgU3RyaW5nW10gZXhwZWN0ZWRGaWxlcyl7CisgICAgUHNpVG9kb1NlYXJjaEhlbHBlciBoZWxwZXIgPSBQc2lUb2RvU2VhcmNoSGVscGVyLlNFUlZJQ0UuZ2V0SW5zdGFuY2UobXlQcm9qZWN0KTsKKworICAgIFBzaUZpbGVbXSBmaWxlcyA9IGhlbHBlci5maW5kRmlsZXNXaXRoVG9kb0l0ZW1zKCk7CisKKyAgICBhc3NlcnRFcXVhbHMoZXhwZWN0ZWRGaWxlcy5sZW5ndGgsIGZpbGVzLmxlbmd0aCk7CisKKyAgICBBcnJheXMuc29ydChmaWxlcywgbmV3IENvbXBhcmF0b3I8UHNpRmlsZT4oKSB7CisgICAgICBAT3ZlcnJpZGUKKyAgICAgIHB1YmxpYyBpbnQgY29tcGFyZShQc2lGaWxlIGZpbGUxLCBQc2lGaWxlIGZpbGUyKSB7CisgICAgICAgIHJldHVybiBmaWxlMS5nZXROYW1lKCkuY29tcGFyZVRvKGZpbGUyLmdldE5hbWUoKSk7CisgICAgICB9CisgICAgfSk7CisgICAgQXJyYXlzLnNvcnQoZXhwZWN0ZWRGaWxlcyk7CisKKyAgICBmb3IoaW50IGkgPSAwOyBpIDwgZXhwZWN0ZWRGaWxlcy5sZW5ndGg7IGkrKyl7CisgICAgICBTdHJpbmcgbmFtZSA9IGV4cGVjdGVkRmlsZXNbaV07CisgICAgICBQc2lGaWxlIGZpbGUgPSBmaWxlc1tpXTsKKyAgICAgIGFzc2VydEVxdWFscyhuYW1lLCBmaWxlLmdldE5hbWUoKSk7CisgICAgfQorICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovcHNpL3V0aWwvQ2xhc3NVdGlsVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL3BzaS91dGlsL0NsYXNzVXRpbFRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZmFjMTYwCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL3BzaS91dGlsL0NsYXNzVXRpbFRlc3QuamF2YQpAQCAtMCwwICsxLDQ1IEBACisvKgorICogQ29weXJpZ2h0IDIwMDAtMjAxMSBKZXRCcmFpbnMgcy5yLm8uCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworcGFja2FnZSBjb20uaW50ZWxsaWoucHNpLnV0aWw7CisKK2ltcG9ydCBjb20uaW50ZWxsaWouSmF2YVRlc3RVdGlsOworaW1wb3J0IGNvbS5pbnRlbGxpai5wc2kuUHNpQ2xhc3M7CitpbXBvcnQgY29tLmludGVsbGlqLnRlc3RGcmFtZXdvcmsuZml4dHVyZXMuTGlnaHRDb2RlSW5zaWdodEZpeHR1cmVUZXN0Q2FzZTsKKworLyoqCisgKiBAYXV0aG9yIHlvbGUKKyAqLworcHVibGljIGNsYXNzIENsYXNzVXRpbFRlc3QgZXh0ZW5kcyBMaWdodENvZGVJbnNpZ2h0Rml4dHVyZVRlc3RDYXNlIHsKKyAgcHVibGljIHZvaWQgdGVzdEZpbmRQc2lDbGFzc0J5SnZtTmFtZSgpIHsKKyAgICBteUZpeHR1cmUuY29uZmlndXJlQnlGaWxlKCJNYW55Q2xhc3Nlcy5qYXZhIik7CisgICAgYXNzZXJ0Tm90TnVsbChDbGFzc1V0aWwuZmluZFBzaUNsYXNzQnlKVk1OYW1lKGdldFBzaU1hbmFnZXIoKSwgIk1hbnlDbGFzc2VzIikpOworICAgIGFzc2VydE5vdE51bGwoQ2xhc3NVdGlsLmZpbmRQc2lDbGFzc0J5SlZNTmFtZShnZXRQc2lNYW5hZ2VyKCksICJNYW55Q2xhc3NlcyQxIikpOworICAgIGFzc2VydE5vdE51bGwoQ2xhc3NVdGlsLmZpbmRQc2lDbGFzc0J5SlZNTmFtZShnZXRQc2lNYW5hZ2VyKCksICJNYW55Q2xhc3NlcyQxJDEiKSk7CisgICAgYXNzZXJ0Tm90TnVsbChDbGFzc1V0aWwuZmluZFBzaUNsYXNzQnlKVk1OYW1lKGdldFBzaU1hbmFnZXIoKSwgIk1hbnlDbGFzc2VzJDFGb29Mb2NhbCIpKTsKKyAgICBhc3NlcnROb3ROdWxsKENsYXNzVXRpbC5maW5kUHNpQ2xhc3NCeUpWTU5hbWUoZ2V0UHNpTWFuYWdlcigpLCAiTWFueUNsYXNzZXMkMUZvb0xvY2FsJDEiKSk7CisgICAgYXNzZXJ0Tm90TnVsbChDbGFzc1V0aWwuZmluZFBzaUNsYXNzQnlKVk1OYW1lKGdldFBzaU1hbmFnZXIoKSwgIk1hbnlDbGFzc2VzJENoaWxkIikpOworICAgIGFzc2VydE5vdE51bGwoQ2xhc3NVdGlsLmZpbmRQc2lDbGFzc0J5SlZNTmFtZShnZXRQc2lNYW5hZ2VyKCksICJMb2NhbCIpKTsKKyAgICBhc3NlcnROb3ROdWxsKENsYXNzVXRpbC5maW5kUHNpQ2xhc3NCeUpWTU5hbWUoZ2V0UHNpTWFuYWdlcigpLCAiTG9jYWwkU3ViIikpOworCisgICAgZmluYWwgUHNpQ2xhc3MgZm9vTG9jYWwyID0gQ2xhc3NVdGlsLmZpbmRQc2lDbGFzc0J5SlZNTmFtZShnZXRQc2lNYW5hZ2VyKCksICJNYW55Q2xhc3NlcyQyRm9vTG9jYWwiKTsKKyAgICBhc3NlcnRFcXVhbHMoIlJ1bm5hYmxlIiwgZm9vTG9jYWwyLmdldEltcGxlbWVudHNMaXN0VHlwZXMoKSBbMF0uZ2V0Q2xhc3NOYW1lKCkpOworICB9CisKKyAgQE92ZXJyaWRlCisgIHByb3RlY3RlZCBTdHJpbmcgZ2V0QmFzZVBhdGgoKSB7CisgICAgcmV0dXJuIEphdmFUZXN0VXRpbC5nZXRSZWxhdGl2ZUphdmFUZXN0RGF0YVBhdGgoKSArICIvcHNpL2NsYXNzVXRpbC8iOworICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovcHNpL3V0aWwvUHJvcGVydHlVdGlsVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL3BzaS91dGlsL1Byb3BlcnR5VXRpbFRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZjU1NmNmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL3BzaS91dGlsL1Byb3BlcnR5VXRpbFRlc3QuamF2YQpAQCAtMCwwICsxLDc1IEBACisvKgorICogQ3JlYXRlZCBieSBJbnRlbGxpSiBJREVBLgorICogVXNlcjogbWlrZQorICogRGF0ZTogSnVuIDE0LCAyMDAyCisgKiBUaW1lOiA4OjA1OjU4IFBNCisgKiBUbyBjaGFuZ2UgdGVtcGxhdGUgZm9yIG5ldyBjbGFzcyB1c2UgCisgKiBDb2RlIFN0eWxlIHwgQ2xhc3MgVGVtcGxhdGVzIG9wdGlvbnMgKFRvb2xzIHwgSURFIE9wdGlvbnMpLgorICovCitwYWNrYWdlIGNvbS5pbnRlbGxpai5wc2kudXRpbDsKKworaW1wb3J0IGNvbS5pbnRlbGxpai5wc2kuKjsKK2ltcG9ydCBjb20uaW50ZWxsaWoudGVzdEZyYW1ld29yay5MaWdodENvZGVJbnNpZ2h0VGVzdENhc2U7CitpbXBvcnQgY29tLmludGVsbGlqLnV0aWwuSW5jb3JyZWN0T3BlcmF0aW9uRXhjZXB0aW9uOworaW1wb3J0IG9yZy5qZXRicmFpbnMuYW5ub3RhdGlvbnMuTm9uTmxzOworCitwdWJsaWMgY2xhc3MgUHJvcGVydHlVdGlsVGVzdCBleHRlbmRzIExpZ2h0Q29kZUluc2lnaHRUZXN0Q2FzZSB7CisgIHB1YmxpYyB2b2lkIHRlc3RTdWdnZXN0R2V0dGVyTmFtZSgpIHRocm93cyBFeGNlcHRpb24geworICAgIGFzc2VydEVxdWFscygiaXNWYWxpZCIsIFByb3BlcnR5VXRpbC5zdWdnZXN0R2V0dGVyTmFtZSgidmFsaWQiLCBnZXRUeXBlKCJib29sZWFuIikpKTsKKyAgICBhc3NlcnRFcXVhbHMoImdldFZhbGlkIiwgUHJvcGVydHlVdGlsLnN1Z2dlc3RHZXR0ZXJOYW1lKCJ2YWxpZCIsIGdldFR5cGUoIk9iamVjdCIpKSk7CisgICAgYXNzZXJ0RXF1YWxzKCJpc1ZhbGlkIiwgUHJvcGVydHlVdGlsLnN1Z2dlc3RHZXR0ZXJOYW1lKG91clByb2plY3QsIGNyZWF0ZUZpZWxkKCJ2YWxpZCIsICJib29sZWFuIikpKTsKKyAgICBhc3NlcnRFcXVhbHMoImdldFZhbGlkIiwgUHJvcGVydHlVdGlsLnN1Z2dlc3RHZXR0ZXJOYW1lKG91clByb2plY3QsIGNyZWF0ZUZpZWxkKCJ2YWxpZCIsICJPYmplY3QiKSkpOworCisgICAgYXNzZXJ0RXF1YWxzKCJnZXRVUkwiLCBQcm9wZXJ0eVV0aWwuc3VnZ2VzdEdldHRlck5hbWUoIlVSTCIsIGdldFR5cGUoIk9iamVjdCIpKSk7CisgICAgYXNzZXJ0RXF1YWxzKCJnZXRVUkwiLCBQcm9wZXJ0eVV0aWwuc3VnZ2VzdEdldHRlck5hbWUob3VyUHJvamVjdCwgY3JlYXRlRmllbGQoIlVSTCIsICJPYmplY3QiKSkpOworCisgICAgYXNzZXJ0RXF1YWxzKCJpc2FVUkwiLCBQcm9wZXJ0eVV0aWwuc3VnZ2VzdEdldHRlck5hbWUob3VyUHJvamVjdCwgY3JlYXRlRmllbGQoImFVUkwiLCAiYm9vbGVhbiIpKSk7CisgICAgYXNzZXJ0RXF1YWxzKCJnZXRhVVJMIiwgUHJvcGVydHlVdGlsLnN1Z2dlc3RHZXR0ZXJOYW1lKG91clByb2plY3QsIGNyZWF0ZUZpZWxkKCJhVVJMIiwgIk9iamVjdCIpKSk7CisgICAgYXNzZXJ0RXF1YWxzKCJnZXRCb29sIiwgUHJvcGVydHlVdGlsLnN1Z2dlc3RHZXR0ZXJOYW1lKG91clByb2plY3QsIGNyZWF0ZUZpZWxkKCJib29sIiwgImphdmEubGFuZy5Cb29sZWFuIikpKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RTdWdnZXN0U2V0dGVyTmFtZSgpIHRocm93cyBFeGNlcHRpb24geworICAgIGFzc2VydEVxdWFscygic2V0VmFsaWQiLCBQcm9wZXJ0eVV0aWwuc3VnZ2VzdFNldHRlck5hbWUoInZhbGlkIikpOworICAgIGFzc2VydEVxdWFscygic2V0VmFsaWQiLCBQcm9wZXJ0eVV0aWwuc3VnZ2VzdFNldHRlck5hbWUob3VyUHJvamVjdCwgY3JlYXRlRmllbGQoInZhbGlkIiwgIk9iamVjdCIpKSk7CisKKyAgICBhc3NlcnRFcXVhbHMoInNldFVSTCIsIFByb3BlcnR5VXRpbC5zdWdnZXN0U2V0dGVyTmFtZSgiVVJMIikpOworICAgIGFzc2VydEVxdWFscygic2V0VVJMIiwgUHJvcGVydHlVdGlsLnN1Z2dlc3RTZXR0ZXJOYW1lKG91clByb2plY3QsIGNyZWF0ZUZpZWxkKCJVUkwiLCAiT2JqZWN0IikpKTsKKworICAgIGFzc2VydEVxdWFscygic2V0YVVSTCIsIFByb3BlcnR5VXRpbC5zdWdnZXN0U2V0dGVyTmFtZSgiYVVSTCIpKTsKKyAgICBhc3NlcnRFcXVhbHMoInNldGFVUkwiLCBQcm9wZXJ0eVV0aWwuc3VnZ2VzdFNldHRlck5hbWUob3VyUHJvamVjdCwgY3JlYXRlRmllbGQoImFVUkwiLCAiT2JqZWN0IikpKTsKKyAgICBhc3NlcnRFcXVhbHMoInNldEJvb2wiLCBQcm9wZXJ0eVV0aWwuc3VnZ2VzdFNldHRlck5hbWUob3VyUHJvamVjdCwgY3JlYXRlRmllbGQoImJvb2wiLCAiamF2YS5sYW5nLkJvb2xlYW4iKSkpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFN1Z2dlc3RQcm9wZXJ0eU5hbWUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBhc3NlcnRFcXVhbHMoInZhbGlkIiwgUHJvcGVydHlVdGlsLmdldFByb3BlcnR5TmFtZSgiaXNWYWxpZCIpKTsKKyAgICBhc3NlcnRFcXVhbHMoInZhbGlkIiwgUHJvcGVydHlVdGlsLmdldFByb3BlcnR5TmFtZSgiZ2V0VmFsaWQiKSk7CisgICAgYXNzZXJ0RXF1YWxzKCJ2YWxpZCIsIFByb3BlcnR5VXRpbC5nZXRQcm9wZXJ0eU5hbWUoInNldFZhbGlkIikpOworCisgICAgYXNzZXJ0RXF1YWxzKCJVUkwiLCBQcm9wZXJ0eVV0aWwuZ2V0UHJvcGVydHlOYW1lKCJpc1VSTCIpKTsKKyAgICBhc3NlcnRFcXVhbHMoIlVSTCIsIFByb3BlcnR5VXRpbC5nZXRQcm9wZXJ0eU5hbWUoImdldFVSTCIpKTsKKyAgICBhc3NlcnRFcXVhbHMoIlVSTCIsIFByb3BlcnR5VXRpbC5nZXRQcm9wZXJ0eU5hbWUoInNldFVSTCIpKTsKKworICAgIGFzc2VydEVxdWFscygiYVVSTCIsIFByb3BlcnR5VXRpbC5nZXRQcm9wZXJ0eU5hbWUoImlzYVVSTCIpKTsKKyAgICBhc3NlcnRFcXVhbHMoImFVUkwiLCBQcm9wZXJ0eVV0aWwuZ2V0UHJvcGVydHlOYW1lKCJnZXRhVVJMIikpOworICAgIGFzc2VydEVxdWFscygiYVVSTCIsIFByb3BlcnR5VXRpbC5nZXRQcm9wZXJ0eU5hbWUoInNldGFVUkwiKSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0Qm9vbGVhblByb3BlcnR5R2V0dGVycygpIHsKKyAgICBhc3NlcnRUcnVlKFByb3BlcnR5VXRpbC5oYXNHZXR0ZXJOYW1lKGNyZWF0ZU1ldGhvZCgiaXNPayIsICJib29sZWFuIikpKTsKKyAgICBhc3NlcnRGYWxzZShQcm9wZXJ0eVV0aWwuaGFzR2V0dGVyTmFtZShjcmVhdGVNZXRob2QoImlzT2siLCBDb21tb25DbGFzc05hbWVzLkpBVkFfTEFOR19CT09MRUFOKSkpOworICAgIGFzc2VydFRydWUoUHJvcGVydHlVdGlsLmhhc0dldHRlck5hbWUoY3JlYXRlTWV0aG9kKCJnZXRPayIsIENvbW1vbkNsYXNzTmFtZXMuSkFWQV9MQU5HX0JPT0xFQU4pKSk7CisgICAgYXNzZXJ0RmFsc2UoUHJvcGVydHlVdGlsLmhhc0dldHRlck5hbWUoY3JlYXRlTWV0aG9kKCJpc09rIiwgImludCIpKSk7CisgIH0KKworICBwcml2YXRlIHN0YXRpYyBQc2lUeXBlIGdldFR5cGUoQE5vbk5scyBTdHJpbmcgdHlwZSkgdGhyb3dzIEluY29ycmVjdE9wZXJhdGlvbkV4Y2VwdGlvbiB7CisgICAgcmV0dXJuIFBzaUVsZW1lbnRGYWN0b3J5LlNFUlZJQ0UuZ2V0SW5zdGFuY2Uob3VyUHJvamVjdCkuY3JlYXRlVHlwZUZyb21UZXh0KHR5cGUsIG51bGwpOworICB9CisKKyAgcHJpdmF0ZSBzdGF0aWMgUHNpRmllbGQgY3JlYXRlRmllbGQoQE5vbk5scyBTdHJpbmcgbmFtZSwgQE5vbk5scyBTdHJpbmcgdHlwZSkgdGhyb3dzIEluY29ycmVjdE9wZXJhdGlvbkV4Y2VwdGlvbiB7CisgICAgcmV0dXJuIFBzaUVsZW1lbnRGYWN0b3J5LlNFUlZJQ0UuZ2V0SW5zdGFuY2Uob3VyUHJvamVjdCkuY3JlYXRlRmllbGQobmFtZSwgZ2V0VHlwZSh0eXBlKSk7CisgIH0KKworICBwcml2YXRlIHN0YXRpYyBQc2lNZXRob2QgY3JlYXRlTWV0aG9kKEBOb25ObHMgU3RyaW5nIG5hbWUsIFN0cmluZyB0eXBlKSB0aHJvd3MgSW5jb3JyZWN0T3BlcmF0aW9uRXhjZXB0aW9uIHsKKyAgICByZXR1cm4gUHNpRWxlbWVudEZhY3RvcnkuU0VSVklDRS5nZXRJbnN0YW5jZShvdXJQcm9qZWN0KS5jcmVhdGVNZXRob2QobmFtZSwgZ2V0VHlwZSh0eXBlKSk7CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9wc2kvdXRpbC9Qc2lVdGlsVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL3BzaS91dGlsL1BzaVV0aWxUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzAzYTI1MwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9wc2kvdXRpbC9Qc2lVdGlsVGVzdC5qYXZhCkBAIC0wLDAgKzEsNTcgQEAKK3BhY2thZ2UgY29tLmludGVsbGlqLnBzaS51dGlsOworCitpbXBvcnQgY29tLmludGVsbGlqLnBzaS5KYXZhUHNpRmFjYWRlOworaW1wb3J0IGNvbS5pbnRlbGxpai5wc2kuUHNpQ2xhc3M7CitpbXBvcnQgY29tLmludGVsbGlqLnBzaS5Qc2lFbGVtZW50RmFjdG9yeTsKK2ltcG9ydCBjb20uaW50ZWxsaWoucHNpLlBzaVR5cGVQYXJhbWV0ZXI7CitpbXBvcnQgY29tLmludGVsbGlqLnRlc3RGcmFtZXdvcmsuTGlnaHRDb2RlSW5zaWdodFRlc3RDYXNlOworaW1wb3J0IGNvbS5pbnRlbGxpai51dGlsLkluY29ycmVjdE9wZXJhdGlvbkV4Y2VwdGlvbjsKKworaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CitpbXBvcnQgamF2YS51dGlsLkFycmF5czsKK2ltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7CisKKy8qKgorICogIEBhdXRob3IgZHNsCisgKi8KK3B1YmxpYyBjbGFzcyBQc2lVdGlsVGVzdCBleHRlbmRzIExpZ2h0Q29kZUluc2lnaHRUZXN0Q2FzZSB7CisgIHB1YmxpYyB2b2lkIHRlc3RUeXBlUGFyYW1ldGVySXRlcmF0b3IoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBQc2lDbGFzcyBjbGFzc0EgPSBjcmVhdGVDbGFzcygiY2xhc3MgQTxUPiB7fSIpOworICAgIGZpbmFsIEl0ZXJhdG9yPFBzaVR5cGVQYXJhbWV0ZXI+IGl0ZXJhdG9yID0gUHNpVXRpbC50eXBlUGFyYW1ldGVyc0l0ZXJhdG9yKGNsYXNzQSk7CisgICAgY29tcGFyZUl0ZXJhdG9yKG5ldyBTdHJpbmdbXXsiVCJ9LCBpdGVyYXRvcik7CisgIH0KKworICBwcml2YXRlIHN0YXRpYyBQc2lDbGFzcyBjcmVhdGVDbGFzcyhTdHJpbmcgdGV4dCkgdGhyb3dzIEluY29ycmVjdE9wZXJhdGlvbkV4Y2VwdGlvbiB7CisgICAgZmluYWwgUHNpRWxlbWVudEZhY3RvcnkgZmFjdG9yeSA9IEphdmFQc2lGYWNhZGUuZ2V0SW5zdGFuY2Uob3VyUHJvamVjdCkuZ2V0RWxlbWVudEZhY3RvcnkoKTsKKyAgICBmaW5hbCBQc2lDbGFzcyBjbGFzc0EgPSBmYWN0b3J5LmNyZWF0ZUNsYXNzRnJvbVRleHQodGV4dCwgbnVsbCkuZ2V0SW5uZXJDbGFzc2VzKClbMF07CisgICAgcmV0dXJuIGNsYXNzQTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RUeXBlUGFyYW1ldGVySXRlcmF0b3IxKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZmluYWwgUHNpQ2xhc3MgY2xhc3NBID0gY3JlYXRlQ2xhc3MoImNsYXNzIEE8VD4geyBjbGFzcyBCPFg+IHt9fSIpOworICAgIGZpbmFsIEl0ZXJhdG9yPFBzaVR5cGVQYXJhbWV0ZXI+IGl0ZXJhdG9yID0gUHNpVXRpbC50eXBlUGFyYW1ldGVyc0l0ZXJhdG9yKGNsYXNzQS5nZXRJbm5lckNsYXNzZXMoKVswXSk7CisgICAgY29tcGFyZUl0ZXJhdG9yKG5ldyBTdHJpbmdbXXsiWCIsIlQifSwgaXRlcmF0b3IpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFR5cGVQYXJhbWV0ZXJJdGVyYXRvcjIoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBmaW5hbCBQc2lDbGFzcyBjbGFzc0EgPSBjcmVhdGVDbGFzcygiY2xhc3MgQTxUPiB7IHN0YXRpYyBjbGFzcyBCPFg+IHt9fSIpOworICAgIGZpbmFsIEl0ZXJhdG9yPFBzaVR5cGVQYXJhbWV0ZXI+IGl0ZXJhdG9yID0gUHNpVXRpbC50eXBlUGFyYW1ldGVyc0l0ZXJhdG9yKGNsYXNzQS5nZXRJbm5lckNsYXNzZXMoKVswXSk7CisgICAgY29tcGFyZUl0ZXJhdG9yKG5ldyBTdHJpbmdbXXsiWCJ9LCBpdGVyYXRvcik7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0VHlwZVBhcmFtZXRlckl0ZXJhdG9yMygpIHRocm93cyBFeGNlcHRpb24geworICAgIGZpbmFsIFBzaUNsYXNzIGNsYXNzQSA9IGNyZWF0ZUNsYXNzKCJjbGFzcyBBPFQ+IHsgY2xhc3MgQjxYLCBZPiB7fX0iKTsKKyAgICBmaW5hbCBJdGVyYXRvcjxQc2lUeXBlUGFyYW1ldGVyPiBpdGVyYXRvciA9IFBzaVV0aWwudHlwZVBhcmFtZXRlcnNJdGVyYXRvcihjbGFzc0EuZ2V0SW5uZXJDbGFzc2VzKClbMF0pOworICAgIGNvbXBhcmVJdGVyYXRvcihuZXcgU3RyaW5nW117IlkiLCAiWCIsICJUIn0sIGl0ZXJhdG9yKTsKKyAgfQorCisKKyAgcHJpdmF0ZSBzdGF0aWMgdm9pZCBjb21wYXJlSXRlcmF0b3IoU3RyaW5nW10gZXhwZWN0ZWQsIEl0ZXJhdG9yPFBzaVR5cGVQYXJhbWV0ZXI+IGl0KSB7CisgICAgZmluYWwgQXJyYXlMaXN0PFN0cmluZz4gYWN0dWFsID0gbmV3IEFycmF5TGlzdDxTdHJpbmc+KCk7CisgICAgd2hpbGUgKGl0Lmhhc05leHQoKSkgeworICAgICAgUHNpVHlwZVBhcmFtZXRlciB0eXBlUGFyYW1ldGVyID0gaXQubmV4dCgpOworICAgICAgYWN0dWFsLmFkZCh0eXBlUGFyYW1ldGVyLmdldE5hbWUoKSk7CisgICAgfQorICAgIGFzc2VydEVxdWFscyhBcnJheXMuYXNMaXN0KGV4cGVjdGVkKS50b1N0cmluZygpLCBhY3R1YWwudG9TdHJpbmcoKSk7CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9wc2kvdXRpbC9wcm94aW1pdHkvUHJveGltaXR5VGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL3BzaS91dGlsL3Byb3hpbWl0eS9Qcm94aW1pdHlUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWJlZjFjNQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9wc2kvdXRpbC9wcm94aW1pdHkvUHJveGltaXR5VGVzdC5qYXZhCkBAIC0wLDAgKzEsNTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDAtMjAwNSBieSBKZXRCcmFpbnMgcy5yLm8uIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBVc2UgaXMgc3ViamVjdCB0byBsaWNlbnNlIHRlcm1zLgorICovCitwYWNrYWdlIGNvbS5pbnRlbGxpai5wc2kudXRpbC5wcm94aW1pdHk7CisKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS5hcHBsaWNhdGlvbi5SZXN1bHQ7CitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkuY29tbWFuZC5Xcml0ZUNvbW1hbmRBY3Rpb247CitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkudmZzLlZpcnR1YWxGaWxlOworaW1wb3J0IGNvbS5pbnRlbGxpai50ZXN0RnJhbWV3b3JrLlBzaVRlc3RVdGlsOworaW1wb3J0IGNvbS5pbnRlbGxpai50ZXN0RnJhbWV3b3JrLmZpeHR1cmVzLklkZWFUZXN0Rml4dHVyZUZhY3Rvcnk7CitpbXBvcnQgY29tLmludGVsbGlqLnRlc3RGcmFtZXdvcmsuZml4dHVyZXMuSmF2YUNvZGVJbnNpZ2h0Rml4dHVyZVRlc3RDYXNlOworaW1wb3J0IGNvbS5pbnRlbGxpai50ZXN0RnJhbWV3b3JrLmZpeHR1cmVzLlRlbXBEaXJUZXN0Rml4dHVyZTsKKworLyoqCisgKiBAYXV0aG9yIHBldGVyCisgKi8KK3B1YmxpYyBjbGFzcyBQcm94aW1pdHlUZXN0IGV4dGVuZHMgSmF2YUNvZGVJbnNpZ2h0Rml4dHVyZVRlc3RDYXNlIHsKKworICBwdWJsaWMgdm9pZCB0ZXN0U2FtZVNvdXJjZVJvb3QoKSB0aHJvd3MgVGhyb3dhYmxlIHsKKyAgICBmaW5hbCBUZW1wRGlyVGVzdEZpeHR1cmUgcm9vdDEgPSBJZGVhVGVzdEZpeHR1cmVGYWN0b3J5LmdldEZpeHR1cmVGYWN0b3J5KCkuY3JlYXRlVGVtcERpclRlc3RGaXh0dXJlKCk7CisgICAgZmluYWwgVGVtcERpclRlc3RGaXh0dXJlIHJvb3QyID0gSWRlYVRlc3RGaXh0dXJlRmFjdG9yeS5nZXRGaXh0dXJlRmFjdG9yeSgpLmNyZWF0ZVRlbXBEaXJUZXN0Rml4dHVyZSgpOworCisgICAgcm9vdDEuc2V0VXAoKTsKKyAgICByb290Mi5zZXRVcCgpOworCisgICAgdHJ5IHsKKyAgICAgIG5ldyBXcml0ZUNvbW1hbmRBY3Rpb24oZ2V0UHJvamVjdCgpKSB7CisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwcm90ZWN0ZWQgdm9pZCBydW4oUmVzdWx0IHJlc3VsdCkgdGhyb3dzIFRocm93YWJsZSB7CisgICAgICAgICAgUHNpVGVzdFV0aWwuYWRkU291cmNlQ29udGVudFRvUm9vdHMobXlNb2R1bGUsIHJvb3QxLmdldEZpbGUoIiIpKTsKKyAgICAgICAgICBQc2lUZXN0VXRpbC5hZGRTb3VyY2VDb250ZW50VG9Sb290cyhteU1vZHVsZSwgcm9vdDIuZ2V0RmlsZSgiIikpOworICAgICAgICB9CisgICAgICB9LmV4ZWN1dGUoKTsKKworICAgICAgZmluYWwgVmlydHVhbEZpbGUgZmlsZTEgPSByb290MS5jcmVhdGVGaWxlKCJidXkudHh0IiwgIiIpOworICAgICAgZmluYWwgVmlydHVhbEZpbGUgZmlsZTIgPSByb290Mi5jcmVhdGVGaWxlKCJidXkudHh0IiwgIiIpOworICAgICAgZmluYWwgVmlydHVhbEZpbGUgY3R4ID0gcm9vdDIuY3JlYXRlRmlsZSgiY3R4LnR4dCIsICIiKTsKKworICAgICAgZmluYWwgUHNpUHJveGltaXR5Q29tcGFyYXRvciBjb21wYXJhdG9yID0gbmV3IFBzaVByb3hpbWl0eUNvbXBhcmF0b3IoZ2V0UHNpTWFuYWdlcigpLmZpbmRGaWxlKGN0eCkpOworICAgICAgYXNzZXJ0VHJ1ZShjb21wYXJhdG9yLmNvbXBhcmUoZ2V0UHNpTWFuYWdlcigpLmZpbmRGaWxlKGZpbGUxKSwgZ2V0UHNpTWFuYWdlcigpLmZpbmRGaWxlKGZpbGUyKSkgPiAwKTsKKyAgICAgIGFzc2VydFRydWUoY29tcGFyYXRvci5jb21wYXJlKGdldFBzaU1hbmFnZXIoKS5maW5kRmlsZShmaWxlMiksIGdldFBzaU1hbmFnZXIoKS5maW5kRmlsZShmaWxlMSkpIDwgMCk7CisgICAgfQorICAgIGZpbmFsbHkgeworICAgICAgcm9vdDEudGVhckRvd24oKTsKKyAgICAgIHJvb3QyLnRlYXJEb3duKCk7CisgICAgfQorICB9CisKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9yZWZhY3RvcmluZy9BYnN0cmFjdEphdmFJbnBsYWNlSW50cm9kdWNlVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL3JlZmFjdG9yaW5nL0Fic3RyYWN0SmF2YUlucGxhY2VJbnRyb2R1Y2VUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWM3NjBjZQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9yZWZhY3RvcmluZy9BYnN0cmFjdEphdmFJbnBsYWNlSW50cm9kdWNlVGVzdC5qYXZhCkBAIC0wLDAgKzEsOTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwMC0yMDEyIEpldEJyYWlucyBzLnIuby4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCitwYWNrYWdlIGNvbS5pbnRlbGxpai5yZWZhY3RvcmluZzsKKworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLmVkaXRvci5FZGl0b3I7CitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkucHJvamVjdC5Qcm9qZWN0OworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLnByb2plY3RSb290cy5TZGs7CitpbXBvcnQgY29tLmludGVsbGlqLnBzaS5Qc2lFeHByZXNzaW9uOworaW1wb3J0IGNvbS5pbnRlbGxpai5wc2kuUHNpTG9jYWxWYXJpYWJsZTsKK2ltcG9ydCBjb20uaW50ZWxsaWoucHNpLlBzaU1ldGhvZENhbGxFeHByZXNzaW9uOworaW1wb3J0IGNvbS5pbnRlbGxpai5wc2kuUHNpUmVmZXJlbmNlRXhwcmVzc2lvbjsKK2ltcG9ydCBjb20uaW50ZWxsaWoucHNpLnV0aWwuUHNpVHJlZVV0aWw7CitpbXBvcnQgY29tLmludGVsbGlqLnJlZmFjdG9yaW5nLmludHJvZHVjZS5pbnBsYWNlLkFic3RyYWN0SW5wbGFjZUludHJvZHVjZXI7CitpbXBvcnQgY29tLmludGVsbGlqLnRlc3RGcmFtZXdvcmsuSWRlYVRlc3RDYXNlOworaW1wb3J0IGNvbS5pbnRlbGxpai50ZXN0RnJhbWV3b3JrLklkZWFUZXN0VXRpbDsKK2ltcG9ydCBjb20uaW50ZWxsaWoudGVzdEZyYW1ld29yay5MaWdodFBsYXRmb3JtVGVzdENhc2U7CitpbXBvcnQgb3JnLmpldGJyYWlucy5hbm5vdGF0aW9ucy5Ob3ROdWxsOworaW1wb3J0IG9yZy5qZXRicmFpbnMuYW5ub3RhdGlvbnMuTnVsbGFibGU7CisKKy8qKgorICogVXNlcjogYW5uYQorICovCitwdWJsaWMgYWJzdHJhY3QgY2xhc3MgQWJzdHJhY3RKYXZhSW5wbGFjZUludHJvZHVjZVRlc3QgZXh0ZW5kcyBBYnN0cmFjdElucGxhY2VJbnRyb2R1Y2VUZXN0IHsKKworICBAT3ZlcnJpZGUKKyAgcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBJZGVhVGVzdENhc2UuaW5pdFBsYXRmb3JtUHJlZml4KCk7CisgICAgc3VwZXIuc2V0VXAoKTsKKyAgfQorCisgIEBOdWxsYWJsZQorICBwcm90ZWN0ZWQgc3RhdGljIFBzaUV4cHJlc3Npb24gZ2V0RXhwcmVzc2lvbkZyb21FZGl0b3IoKSB7CisgICAgZmluYWwgUHNpRXhwcmVzc2lvbiBleHByZXNzaW9uID0gUHNpVHJlZVV0aWwuZ2V0UGFyZW50T2ZUeXBlKGdldEZpbGUoKS5maW5kRWxlbWVudEF0KGdldEVkaXRvcigpLmdldENhcmV0TW9kZWwoKS5nZXRPZmZzZXQoKSksIFBzaUV4cHJlc3Npb24uY2xhc3MpOworICAgIGlmIChleHByZXNzaW9uIGluc3RhbmNlb2YgUHNpUmVmZXJlbmNlRXhwcmVzc2lvbiAmJiBleHByZXNzaW9uLmdldFBhcmVudCgpIGluc3RhbmNlb2YgUHNpTWV0aG9kQ2FsbEV4cHJlc3Npb24pIHsKKyAgICAgIHJldHVybiAoUHNpRXhwcmVzc2lvbilleHByZXNzaW9uLmdldFBhcmVudCgpOworICAgIH0KKyAgICByZXR1cm4gZXhwcmVzc2lvbjsKKyAgfQorCisgIHByb3RlY3RlZCBzdGF0aWMgUHNpTG9jYWxWYXJpYWJsZSBnZXRMb2NhbFZhcmlhYmxlRnJvbUVkaXRvcigpIHsKKyAgICBmaW5hbCBQc2lMb2NhbFZhcmlhYmxlIGxvY2FsVmFyaWFibGUgPSBQc2lUcmVlVXRpbC5nZXRQYXJlbnRPZlR5cGUoZ2V0RmlsZSgpLmZpbmRFbGVtZW50QXQoZ2V0RWRpdG9yKCkuZ2V0Q2FyZXRNb2RlbCgpLmdldE9mZnNldCgpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHNpTG9jYWxWYXJpYWJsZS5jbGFzcyk7CisgICAgYXNzZXJ0Tm90TnVsbChsb2NhbFZhcmlhYmxlKTsKKyAgICByZXR1cm4gbG9jYWxWYXJpYWJsZTsKKyAgfQorCisgIEBPdmVycmlkZQorICBwcm90ZWN0ZWQgU2RrIGdldFByb2plY3RKREsoKSB7CisgICAgcmV0dXJuIElkZWFUZXN0VXRpbC5nZXRNb2NrSmRrMTcoKTsKKyAgfQorCisgIEBPdmVycmlkZQorICBwcm90ZWN0ZWQgU3RyaW5nIGdldEV4dGVuc2lvbigpIHsKKyAgICByZXR1cm4gIi5qYXZhIjsKKyAgfQorCisgIHByb3RlY3RlZCBhYnN0cmFjdCBNeUludHJvZHVjZUhhbmRsZXIgY3JlYXRlSW50cm9kdWNlSGFuZGxlcigpOworCisgIEBPdmVycmlkZQorICBwcm90ZWN0ZWQgQWJzdHJhY3RJbnBsYWNlSW50cm9kdWNlciBpbnZva2VSZWZhY3RvcmluZygpIHsKKyAgICBmaW5hbCBNeUludHJvZHVjZUhhbmRsZXIgaW50cm9kdWNlSGFuZGxlciA9IGNyZWF0ZUludHJvZHVjZUhhbmRsZXIoKTsKKyAgICBmaW5hbCBQc2lFeHByZXNzaW9uIGV4cHJlc3Npb24gPSBnZXRFeHByZXNzaW9uRnJvbUVkaXRvcigpOworICAgIGlmIChleHByZXNzaW9uICE9IG51bGwpIHsKKyAgICAgIGludHJvZHVjZUhhbmRsZXIuaW52b2tlSW1wbChMaWdodFBsYXRmb3JtVGVzdENhc2UuZ2V0UHJvamVjdCgpLCBleHByZXNzaW9uLCBnZXRFZGl0b3IoKSk7CisgICAgfSBlbHNlIHsKKyAgICAgIGZpbmFsIFBzaUxvY2FsVmFyaWFibGUgbG9jYWxWYXJpYWJsZSA9IGdldExvY2FsVmFyaWFibGVGcm9tRWRpdG9yKCk7CisgICAgICBpbnRyb2R1Y2VIYW5kbGVyLmludm9rZUltcGwoTGlnaHRQbGF0Zm9ybVRlc3RDYXNlLmdldFByb2plY3QoKSwgbG9jYWxWYXJpYWJsZSwgZ2V0RWRpdG9yKCkpOworICAgIH0KKyAgICByZXR1cm4gaW50cm9kdWNlSGFuZGxlci5nZXRJbnBsYWNlSW50cm9kdWNlcigpOworICB9CisKKyAgcHVibGljIGludGVyZmFjZSBNeUludHJvZHVjZUhhbmRsZXIgeworICAgIGJvb2xlYW4gaW52b2tlSW1wbChQcm9qZWN0IHByb2plY3QsIEBOb3ROdWxsIFBzaUV4cHJlc3Npb24gc2VsZWN0ZWRFeHByLCBFZGl0b3IgZWRpdG9yKTsKKyAgICBib29sZWFuIGludm9rZUltcGwoUHJvamVjdCBwcm9qZWN0LCBQc2lMb2NhbFZhcmlhYmxlIGxvY2FsVmFyaWFibGUsIEVkaXRvciBlZGl0b3IpOworICAgIEFic3RyYWN0SW5wbGFjZUludHJvZHVjZXIgZ2V0SW5wbGFjZUludHJvZHVjZXIoKTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL3JlZmFjdG9yaW5nL0Fub255bW91c1RvSW5uZXJUZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovcmVmYWN0b3JpbmcvQW5vbnltb3VzVG9Jbm5lclRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMzdjNzY5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL3JlZmFjdG9yaW5nL0Fub255bW91c1RvSW5uZXJUZXN0LmphdmEKQEAgLTAsMCArMSw3OCBAQAorLyoKKyAqIENvcHlyaWdodCAyMDAwLTIwMTIgSmV0QnJhaW5zIHMuci5vLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KK3BhY2thZ2UgY29tLmludGVsbGlqLnJlZmFjdG9yaW5nOworCitpbXBvcnQgY29tLmludGVsbGlqLkphdmFUZXN0VXRpbDsKK2ltcG9ydCBjb20uaW50ZWxsaWoucmVmYWN0b3JpbmcuYW5vbnltb3VzVG9Jbm5lci5Bbm9ueW1vdXNUb0lubmVySGFuZGxlcjsKK2ltcG9ydCBjb20uaW50ZWxsaWoudGVzdEZyYW1ld29yay5MaWdodENvZGVJbnNpZ2h0VGVzdENhc2U7CitpbXBvcnQgb3JnLmpldGJyYWlucy5hbm5vdGF0aW9ucy5Ob3ROdWxsOworCisvKioKKyAqIEBhdXRob3IgeW9sZQorICovCitwdWJsaWMgY2xhc3MgQW5vbnltb3VzVG9Jbm5lclRlc3QgZXh0ZW5kcyBMaWdodENvZGVJbnNpZ2h0VGVzdENhc2UgeworICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEVTVF9ST09UID0gIi9yZWZhY3RvcmluZy9hbm9ueW1vdXNUb0lubmVyLyI7CisKKyAgQE5vdE51bGwKKyAgQE92ZXJyaWRlCisgIHByb3RlY3RlZCBTdHJpbmcgZ2V0VGVzdERhdGFQYXRoKCkgeworICAgIHJldHVybiBKYXZhVGVzdFV0aWwuZ2V0SmF2YVRlc3REYXRhUGF0aCgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEdlbmVyaWNUeXBlUGFyYW1ldGVycygpIHRocm93cyBFeGNlcHRpb24geyAgLy8gSURFQURFVi0yOTQ0NgorICAgIGRvVGVzdCgiTXlJdGVyYXRvciIsIHRydWUpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEluc2lkZUludGVyZmFjZSgpIHRocm93cyBFeGNlcHRpb24geyAgLy8gSURFQURFVi0yOTQ0NgorICAgIGRvVGVzdCgiTXlSdW5uYWJsZSIsIHRydWUpOworICB9CisgIAorICBwdWJsaWMgdm9pZCB0ZXN0Q29sbGFwc2VEaWFtb25kcygpIHRocm93cyBFeGNlcHRpb24geyAgLy8gSURFQURFVi0yOTQ0NgorICAgIGRvVGVzdCgiTXlQcmVkaWNhdGUiLCB0cnVlKTsKKyAgfQorICAKKyAgcHVibGljIHZvaWQgdGVzdENhbkJlU3RhdGljKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgY29uZmlndXJlQnlGaWxlKFRFU1RfUk9PVCArIGdldFRlc3ROYW1lKHRydWUpICsgIi5qYXZhIik7CisgICAgQW5vbnltb3VzVG9Jbm5lckhhbmRsZXIgaGFuZGxlciA9IG5ldyBBbm9ueW1vdXNUb0lubmVySGFuZGxlcigpeworICAgICAgQE92ZXJyaWRlCisgICAgICBwcm90ZWN0ZWQgYm9vbGVhbiBzaG93UmVmYWN0b3JpbmdEaWFsb2coKSB7CisgICAgICAgIG15TmV3Q2xhc3NOYW1lID0gIk15UHJlZGljYXRlIjsKKyAgICAgICAgbXlNYWtlU3RhdGljID0gIW5lZWRzVGhpcygpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgIH0KKyAgICB9OworICAgIGhhbmRsZXIuaW52b2tlKGdldFByb2plY3QoKSwgbXlFZGl0b3IsIG15RmlsZSwgbnVsbCk7CisgICAgYXNzZXJ0RmFsc2UoaGFuZGxlci5uZWVkc1RoaXMoKSk7CisgICAgY2hlY2tSZXN1bHRCeUZpbGUoVEVTVF9ST09UICsgZ2V0VGVzdE5hbWUodHJ1ZSkgKyAiX2FmdGVyLmphdmEiKTsKKyAgfQorICAKKworICBwcml2YXRlIHZvaWQgZG9UZXN0KGZpbmFsIFN0cmluZyBuZXdDbGFzc05hbWUsIGZpbmFsIGJvb2xlYW4gbWFrZVN0YXRpYykgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgY29uZmlndXJlQnlGaWxlKFRFU1RfUk9PVCArIGdldFRlc3ROYW1lKHRydWUpICsgIi5qYXZhIik7CisgICAgQW5vbnltb3VzVG9Jbm5lckhhbmRsZXIgaGFuZGxlciA9IG5ldyBBbm9ueW1vdXNUb0lubmVySGFuZGxlcigpIHsKKyAgICAgIEBPdmVycmlkZQorICAgICAgcHJvdGVjdGVkIGJvb2xlYW4gc2hvd1JlZmFjdG9yaW5nRGlhbG9nKCkgeworICAgICAgICBteU5ld0NsYXNzTmFtZSA9IG5ld0NsYXNzTmFtZTsKKyAgICAgICAgbXlNYWtlU3RhdGljID0gbWFrZVN0YXRpYzsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICB9CisgICAgfTsKKworCisgICAgaGFuZGxlci5pbnZva2UoZ2V0UHJvamVjdCgpLCBteUVkaXRvciwgbXlGaWxlLCBudWxsKTsKKyAgICBjaGVja1Jlc3VsdEJ5RmlsZShURVNUX1JPT1QgKyBnZXRUZXN0TmFtZSh0cnVlKSArICJfYWZ0ZXIuamF2YSIpOworICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovcmVmYWN0b3JpbmcvQ2hhbmdlU2lnbmF0dXJlR2VzdHVyZVRlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9yZWZhY3RvcmluZy9DaGFuZ2VTaWduYXR1cmVHZXN0dXJlVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYxZjNiMTgKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovcmVmYWN0b3JpbmcvQ2hhbmdlU2lnbmF0dXJlR2VzdHVyZVRlc3QuamF2YQpAQCAtMCwwICsxLDIwOSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDAwLTIwMTAgSmV0QnJhaW5zIHMuci5vLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KK3BhY2thZ2UgY29tLmludGVsbGlqLnJlZmFjdG9yaW5nOworCitpbXBvcnQgY29tLmludGVsbGlqLkphdmFUZXN0VXRpbDsKK2ltcG9ydCBjb20uaW50ZWxsaWouY29kZUluc2lnaHQuaW50ZW50aW9uLkludGVudGlvbkFjdGlvbjsKK2ltcG9ydCBjb20uaW50ZWxsaWouY29kZUluc3BlY3Rpb24udW51c2VkU3ltYm9sLlVudXNlZFN5bWJvbExvY2FsSW5zcGVjdGlvbjsKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS5jb21tYW5kLkNvbW1hbmRQcm9jZXNzb3I7CitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkuY29tbWFuZC5Xcml0ZUNvbW1hbmRBY3Rpb247CitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkuZWRpdG9yLkNhcmV0TW9kZWw7CitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkuZWRpdG9yLkRvY3VtZW50OworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLmVkaXRvci5FZGl0b3I7CitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkuZWRpdG9yLmFjdGlvbnMuRWRpdG9yQWN0aW9uVXRpbDsKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS5lZGl0b3IuZXguRWRpdG9yRXg7CitpbXBvcnQgY29tLmludGVsbGlqLnBzaS4qOworaW1wb3J0IGNvbS5pbnRlbGxpai5wc2kudXRpbC5Qc2lUcmVlVXRpbDsKK2ltcG9ydCBjb20uaW50ZWxsaWoucmVmYWN0b3JpbmcuY2hhbmdlU2lnbmF0dXJlLkNoYW5nZVNpZ25hdHVyZURldGVjdG9yQWN0aW9uOworaW1wb3J0IGNvbS5pbnRlbGxpai5yZWZhY3RvcmluZy5jaGFuZ2VTaWduYXR1cmUuQ2hhbmdlU2lnbmF0dXJlR2VzdHVyZURldGVjdG9yOworaW1wb3J0IGNvbS5pbnRlbGxpai50ZXN0RnJhbWV3b3JrLmZpeHR1cmVzLkxpZ2h0Q29kZUluc2lnaHRGaXh0dXJlVGVzdENhc2U7CitpbXBvcnQganVuaXQuZnJhbWV3b3JrLkFzc2VydDsKKworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCisvKioKKyAqIFVzZXI6IGFubmEKKyAqIERhdGU6IFNlcCA5LCAyMDEwCisgKi8KK3B1YmxpYyBjbGFzcyBDaGFuZ2VTaWduYXR1cmVHZXN0dXJlVGVzdCBleHRlbmRzIExpZ2h0Q29kZUluc2lnaHRGaXh0dXJlVGVzdENhc2UgeworCisgIHByaXZhdGUgdm9pZCBkb1Rlc3QoZmluYWwgUnVubmFibGUgcnVuLCBib29sZWFuIHNob3VsZFNob3csIGZpbmFsIFN0cmluZyBoaW50KSB7CisgICAgbXlGaXh0dXJlLmNvbmZpZ3VyZUJ5RmlsZSgiL3JlZmFjdG9yaW5nL2NoYW5nZVNpZ25hdHVyZUdlc3R1cmUvIiArIGdldFRlc3ROYW1lKGZhbHNlKSArICIuamF2YSIpOworICAgIG15Rml4dHVyZS5lbmFibGVJbnNwZWN0aW9ucyhuZXcgVW51c2VkU3ltYm9sTG9jYWxJbnNwZWN0aW9uKCkpOworICAgIGZpbmFsIENoYW5nZVNpZ25hdHVyZUdlc3R1cmVEZXRlY3RvciBkZXRlY3RvciA9IENoYW5nZVNpZ25hdHVyZUdlc3R1cmVEZXRlY3Rvci5nZXRJbnN0YW5jZShnZXRQcm9qZWN0KCkpOworICAgIGZpbmFsIEVkaXRvckV4IGVkaXRvciA9IChFZGl0b3JFeClteUZpeHR1cmUuZ2V0RWRpdG9yKCk7CisgICAgZmluYWwgRG9jdW1lbnQgZG9jdW1lbnQgPSBlZGl0b3IuZ2V0RG9jdW1lbnQoKTsKKyAgICB0cnkgeworICAgICAgUHNpTWFuYWdlci5nZXRJbnN0YW5jZShnZXRQcm9qZWN0KCkpLmFkZFBzaVRyZWVDaGFuZ2VMaXN0ZW5lcihkZXRlY3Rvcik7CisgICAgICBkZXRlY3Rvci5hZGREb2NMaXN0ZW5lcihkb2N1bWVudCk7CisgICAgICBuZXcgV3JpdGVDb21tYW5kQWN0aW9uLlNpbXBsZShnZXRQcm9qZWN0KCkpIHsKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHByb3RlY3RlZCB2b2lkIHJ1bigpIHRocm93cyBUaHJvd2FibGUgeworICAgICAgICAgIHJ1bi5ydW4oKTsKKyAgICAgICAgfQorICAgICAgfS5leGVjdXRlKCkudGhyb3dFeGNlcHRpb24oKTsKKworCisgICAgICBteUZpeHR1cmUuZG9IaWdobGlnaHRpbmcoKTsKKyAgICAgIGlmIChzaG91bGRTaG93KSB7CisgICAgICAgIGZpbmFsIEludGVudGlvbkFjdGlvbiBpbnRlbnRpb24gPSBteUZpeHR1cmUuZmluZFNpbmdsZUludGVudGlvbihoaW50KTsKKyAgICAgICAgbXlGaXh0dXJlLmxhdW5jaEFjdGlvbihpbnRlbnRpb24pOworICAgICAgICBteUZpeHR1cmUuY2hlY2tSZXN1bHRCeUZpbGUoIi9yZWZhY3RvcmluZy9jaGFuZ2VTaWduYXR1cmVHZXN0dXJlLyIgKyBnZXRUZXN0TmFtZShmYWxzZSkgKyAiX2FmdGVyLmphdmEiKTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIGZpbmFsIExpc3Q8SW50ZW50aW9uQWN0aW9uPiBpbnRlbnRpb25BY3Rpb25zID0gbXlGaXh0dXJlLmZpbHRlckF2YWlsYWJsZUludGVudGlvbnMoaGludCk7CisgICAgICAgIEFzc2VydC5hc3NlcnRFcXVhbHModHJ1ZSwgaW50ZW50aW9uQWN0aW9ucy5pc0VtcHR5KCkpOworICAgICAgfQorICAgIH0KKyAgICBmaW5hbGx5IHsKKyAgICAgIGRldGVjdG9yLnJlbW92ZURvY0xpc3RlbmVyKGRvY3VtZW50LCBlZGl0b3IuZ2V0VmlydHVhbEZpbGUoKSk7CisgICAgICBQc2lNYW5hZ2VyLmdldEluc3RhbmNlKGdldFByb2plY3QoKSkucmVtb3ZlUHNpVHJlZUNoYW5nZUxpc3RlbmVyKGRldGVjdG9yKTsKKyAgICB9CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0U2ltcGxlKCkgeworICAgIGRvVHlwaW5nVGVzdCgicGFyYW0iKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RTcGFjZXMoKSB7CisgICAgZG9UeXBpbmdOb0JvcmRlclRlc3QoIiAgICIpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdE5vVXNhZ2VzKCkgeworICAgIGRvVHlwaW5nTm9Cb3JkZXJUZXN0KCJpbnQgcGFyYW0iKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RPY2N1cnJlbmNlc0luU2FtZUZpbGUoKSB7CisgICAgZG9UeXBpbmdUZXN0KCJpbnQgcGFyYW0iKTsKKyAgfQorICAKKyAgcHVibGljIHZvaWQgdGVzdE11bHRpUGFyYW1zKCkgeworICAgIGRvVHlwaW5nVGVzdCgiaW50IHgsIGludCB5Iik7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0QWRkUGFyYW1ldGVyMkNvbnN0cnVjdG9yKCkgeworICAgIGRvVHlwaW5nVGVzdCgiaW50IHBhcmFtIik7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0QWRkUGFyYW1ldGVyMlVudXNlZENvbnN0cnVjdG9yKCkgeworICAgIGRvVHlwaW5nTm9Cb3JkZXJUZXN0KCJpbnQgcGFyYW0iKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RPbkFub3RoZXJNZXRob2QoKSB7CisgICAgZG9UZXN0KG5ldyBSdW5uYWJsZSgpIHsKKyAgICAgIEBPdmVycmlkZQorICAgICAgcHVibGljIHZvaWQgcnVuKCkgeworICAgICAgICBteUZpeHR1cmUudHlwZSgiaW50IHBhcmFtIik7CisgICAgICAgIGZpbmFsIGludCBuZXh0TWV0aG9kT2Zmc2V0ID0gKChQc2lKYXZhRmlsZSlteUZpeHR1cmUuZ2V0RmlsZSgpKS5nZXRDbGFzc2VzKClbMF0uZ2V0TWV0aG9kcygpWzFdLmdldFRleHRPZmZzZXQoKTsKKyAgICAgICAgbXlGaXh0dXJlLmdldEVkaXRvcigpLmdldENhcmV0TW9kZWwoKS5tb3ZlVG9PZmZzZXQobmV4dE1ldGhvZE9mZnNldCk7CisgICAgICB9CisgICAgfSwgZmFsc2UsIENoYW5nZVNpZ25hdHVyZURldGVjdG9yQWN0aW9uLkNIQU5HRV9TSUdOQVRVUkUpOworICB9CisgIAorICBwdWJsaWMgdm9pZCB0ZXN0QWRkUGFyYW1DaGFuZ2VSZXR1cm5UeXBlKCkgeworICAgIGRvVGVzdChuZXcgUnVubmFibGUoKSB7CisgICAgICBAT3ZlcnJpZGUKKyAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKKyAgICAgICAgbXlGaXh0dXJlLnR5cGUoImludCBwYXJhbSIpOworICAgICAgICBDYXJldE1vZGVsIG1vZGVsID0gbXlGaXh0dXJlLmdldEVkaXRvcigpLmdldENhcmV0TW9kZWwoKTsKKyAgICAgICAgUHNpRWxlbWVudCBlbGVtZW50ID0gbXlGaXh0dXJlLmdldEVsZW1lbnRBdENhcmV0KCk7CisgICAgICAgIFBzaU1ldGhvZCBtZXRob2QgPSBQc2lUcmVlVXRpbC5nZXRQYXJlbnRPZlR5cGUoZWxlbWVudCwgUHNpTWV0aG9kLmNsYXNzLCBmYWxzZSk7CisgICAgICAgIGFzc2VydFRydWUobWV0aG9kICE9IG51bGwpOworICAgICAgICBQc2lUeXBlRWxlbWVudCByZXR1cm5UeXBlRWxlbWVudCA9IG1ldGhvZC5nZXRSZXR1cm5UeXBlRWxlbWVudCgpOworICAgICAgICBhc3NlcnRUcnVlKHJldHVyblR5cGVFbGVtZW50ICE9IG51bGwpOworICAgICAgICBtb2RlbC5tb3ZlVG9PZmZzZXQocmV0dXJuVHlwZUVsZW1lbnQuZ2V0VGV4dFJhbmdlKCkuZ2V0RW5kT2Zmc2V0KCkpOworICAgICAgICBpbnQgaSA9IHJldHVyblR5cGVFbGVtZW50LmdldFRleHRMZW5ndGgoKTsKKyAgICAgICAgd2hpbGUgKGktLSA+IDApIHsKKyAgICAgICAgICBteUZpeHR1cmUudHlwZSgnXGInKTsKKyAgICAgICAgfQorICAgICAgICBteUZpeHR1cmUudHlwZSgiYm9vbGVhbiIpOworICAgICAgfQorICAgIH0sIHRydWUsIENoYW5nZVNpZ25hdHVyZURldGVjdG9yQWN0aW9uLkNIQU5HRV9TSUdOQVRVUkUpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdE5ld1BhcmFtKCkgeworICAgIGRvVHlwaW5nVGVzdCgiLCBpbnQgcGFyYW0iKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3ROZXdQYXJhbUluU3VwZXIoKSB7CisgICAgZG9UeXBpbmdUZXN0KCIsIGludCBwYXJhbSIpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdE5ld1BhcmFtSW5TdXBlclVzZWQoKSB7CisgICAgZG9UeXBpbmdUZXN0KCIsIGludCBwYXJhbSIpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFJlbmFtZUxvY2FsVmFyaWFibGUoKSB7CisgICAgZG9UeXBpbmdUZXN0KCIxIiwgQ2hhbmdlU2lnbmF0dXJlRGV0ZWN0b3JBY3Rpb24uTkVXX05BTUUpOworICB9CisKKyAgcHJpdmF0ZSB2b2lkIGRvVHlwaW5nVGVzdChmaW5hbCBTdHJpbmcgcGFyYW0pIHsKKyAgICBkb1R5cGluZ1Rlc3QocGFyYW0sIENoYW5nZVNpZ25hdHVyZURldGVjdG9yQWN0aW9uLkNIQU5HRV9TSUdOQVRVUkUpOworICB9CisKKyAgcHJpdmF0ZSB2b2lkIGRvVHlwaW5nVGVzdChmaW5hbCBTdHJpbmcgcGFyYW0sIGZpbmFsIFN0cmluZyBoaW50KSB7CisgICAgZG9UZXN0KG5ldyBSdW5uYWJsZSgpIHsKKyAgICAgIEBPdmVycmlkZQorICAgICAgcHVibGljIHZvaWQgcnVuKCkgeworICAgICAgICBteUZpeHR1cmUudHlwZShwYXJhbSk7CisgICAgICB9CisgICAgfSwgdHJ1ZSwgaGludCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0UmV0dXJuVmFsdWUoKSB7CisgICAgZG9UeXBpbmdOb0JvcmRlclRlc3QoInZvaWQiKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RNb2RpZmllcigpIHsKKyAgICBkb1R5cGluZ05vQm9yZGVyVGVzdCgicHJpdmF0ZSIpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEFkZFBhcmFtZXRlckZpbmFsKCkgeworICAgIGRvVHlwaW5nVGVzdCgiZmluYWwgaW50IHBhcmFtIik7CisgIH0KKworICBwcml2YXRlIHZvaWQgZG9UeXBpbmdOb0JvcmRlclRlc3QoZmluYWwgU3RyaW5nIHBhcmFtKSB7CisgICAgZG9UZXN0KG5ldyBSdW5uYWJsZSgpIHsKKyAgICAgIEBPdmVycmlkZQorICAgICAgcHVibGljIHZvaWQgcnVuKCkgeworICAgICAgICBteUZpeHR1cmUudHlwZShwYXJhbSk7CisgICAgICB9CisgICAgfSwgZmFsc2UsIENoYW5nZVNpZ25hdHVyZURldGVjdG9yQWN0aW9uLkNIQU5HRV9TSUdOQVRVUkUpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdERlbGV0ZVBhcmFtSW5TdXBlclVzZWQoKSB7CisgICAgZG9EZWxldGVUZXN0KCk7CisgIH0KKworICBwcml2YXRlIHZvaWQgZG9EZWxldGVUZXN0KCkgeworICAgIGRvVGVzdChuZXcgUnVubmFibGUoKSB7CisgICAgICBAT3ZlcnJpZGUKKyAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKKyAgICAgICAgZmluYWwgRWRpdG9yIGVkaXRvciA9IG15Rml4dHVyZS5nZXRFZGl0b3IoKTsKKyAgICAgICAgZmluYWwgRG9jdW1lbnQgZG9jdW1lbnQgPSBlZGl0b3IuZ2V0RG9jdW1lbnQoKTsKKyAgICAgICAgZmluYWwgaW50IHNlbGVjdGlvblN0YXJ0ID0gZWRpdG9yLmdldFNlbGVjdGlvbk1vZGVsKCkuZ2V0U2VsZWN0aW9uU3RhcnQoKTsKKyAgICAgICAgZmluYWwgaW50IHNlbGVjdGlvbkVuZCA9IGVkaXRvci5nZXRTZWxlY3Rpb25Nb2RlbCgpLmdldFNlbGVjdGlvbkVuZCgpOworICAgICAgICBDb21tYW5kUHJvY2Vzc29yLmdldEluc3RhbmNlKCkuc2V0Q3VycmVudENvbW1hbmRHcm91cElkKEVkaXRvckFjdGlvblV0aWwuREVMRVRFX0NPTU1BTkRfR1JPVVApOworICAgICAgICBkb2N1bWVudC5kZWxldGVTdHJpbmcoc2VsZWN0aW9uU3RhcnQsIHNlbGVjdGlvbkVuZCk7CisgICAgICAgIGVkaXRvci5nZXRDYXJldE1vZGVsKCkubW92ZVRvT2Zmc2V0KHNlbGVjdGlvblN0YXJ0KTsKKyAgICAgIH0KKyAgICB9LCB0cnVlLCBDaGFuZ2VTaWduYXR1cmVEZXRlY3RvckFjdGlvbi5DSEFOR0VfU0lHTkFUVVJFKTsKKyAgfQorCisgIEBPdmVycmlkZQorICBwcm90ZWN0ZWQgU3RyaW5nIGdldEJhc2VQYXRoKCkgeworICAgIHJldHVybiBKYXZhVGVzdFV0aWwuZ2V0UmVsYXRpdmVKYXZhVGVzdERhdGFQYXRoKCk7CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9yZWZhY3RvcmluZy9DaGFuZ2VTaWduYXR1cmVQcm9wYWdhdGlvblRlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9yZWZhY3RvcmluZy9DaGFuZ2VTaWduYXR1cmVQcm9wYWdhdGlvblRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OTZlMmEwCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL3JlZmFjdG9yaW5nL0NoYW5nZVNpZ25hdHVyZVByb3BhZ2F0aW9uVGVzdC5qYXZhCkBAIC0wLDAgKzEsMTg0IEBACitwYWNrYWdlIGNvbS5pbnRlbGxpai5yZWZhY3RvcmluZzsKKworaW1wb3J0IGNvbS5pbnRlbGxpai5KYXZhVGVzdFV0aWw7CitpbXBvcnQgY29tLmludGVsbGlqLmNvZGVJbnNpZ2h0LlRhcmdldEVsZW1lbnRVdGlsQmFzZTsKK2ltcG9ydCBjb20uaW50ZWxsaWoucHNpLio7CitpbXBvcnQgY29tLmludGVsbGlqLnBzaS5zZWFyY2guR2xvYmFsU2VhcmNoU2NvcGU7CitpbXBvcnQgY29tLmludGVsbGlqLnBzaS5zZWFyY2guc2VhcmNoZXMuQ2xhc3NJbmhlcml0b3JzU2VhcmNoOworaW1wb3J0IGNvbS5pbnRlbGxpai5wc2kuc2VhcmNoLnNlYXJjaGVzLk1ldGhvZFJlZmVyZW5jZXNTZWFyY2g7CitpbXBvcnQgY29tLmludGVsbGlqLnBzaS5zZWFyY2guc2VhcmNoZXMuUmVmZXJlbmNlc1NlYXJjaDsKK2ltcG9ydCBjb20uaW50ZWxsaWoucHNpLnV0aWwuUHNpVHJlZVV0aWw7CitpbXBvcnQgY29tLmludGVsbGlqLnJlZmFjdG9yaW5nLmNoYW5nZVNpZ25hdHVyZS5DaGFuZ2VTaWduYXR1cmVQcm9jZXNzb3I7CitpbXBvcnQgY29tLmludGVsbGlqLnJlZmFjdG9yaW5nLmNoYW5nZVNpZ25hdHVyZS5KYXZhVGhyb3duRXhjZXB0aW9uSW5mbzsKK2ltcG9ydCBjb20uaW50ZWxsaWoucmVmYWN0b3JpbmcuY2hhbmdlU2lnbmF0dXJlLlBhcmFtZXRlckluZm9JbXBsOworaW1wb3J0IGNvbS5pbnRlbGxpai5yZWZhY3RvcmluZy5jaGFuZ2VTaWduYXR1cmUuVGhyb3duRXhjZXB0aW9uSW5mbzsKK2ltcG9ydCBjb20uaW50ZWxsaWoucmVmYWN0b3JpbmcudXRpbC5DYW5vbmljYWxUeXBlczsKK2ltcG9ydCBjb20uaW50ZWxsaWoudXRpbC5jb250YWluZXJzLkhhc2hTZXQ7CitpbXBvcnQganVuaXQuZnJhbWV3b3JrLkFzc2VydDsKK2ltcG9ydCBvcmcuamV0YnJhaW5zLmFubm90YXRpb25zLk5vdE51bGw7CisKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlzOworaW1wb3J0IGphdmEudXRpbC5TZXQ7CisKKy8qKgorICogQGF1dGhvciB2ZW4KKyAqLworcHVibGljIGNsYXNzIENoYW5nZVNpZ25hdHVyZVByb3BhZ2F0aW9uVGVzdCBleHRlbmRzIExpZ2h0UmVmYWN0b3JpbmdUZXN0Q2FzZSAgeworICBwdWJsaWMgdm9pZCB0ZXN0UGFyYW1TaW1wbGUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBwYXJhbWV0ZXJQcm9wYWdhdGlvblRlc3QoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RQYXJhbVdpdGhPdmVycmlkaW5nKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgcGFyYW1ldGVyUHJvcGFnYXRpb25UZXN0KCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0UGFyYW1UeXBlU3Vic3QoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBmaW5hbCBQc2lNZXRob2QgbWV0aG9kID0gZ2V0UHJpbWFyeU1ldGhvZCgpOworICAgIGZpbmFsIEhhc2hTZXQ8UHNpTWV0aG9kPiBtZXRob2RzID0gbmV3IEhhc2hTZXQ8UHNpTWV0aG9kPigpOworICAgIGZvciAoUHNpUmVmZXJlbmNlIHJlZmVyZW5jZSA6IFJlZmVyZW5jZXNTZWFyY2guc2VhcmNoKG1ldGhvZCkpIHsKKyAgICAgIGZpbmFsIFBzaU1ldGhvZCBwc2lNZXRob2QgPSBQc2lUcmVlVXRpbC5nZXRQYXJlbnRPZlR5cGUocmVmZXJlbmNlLmdldEVsZW1lbnQoKSwgUHNpTWV0aG9kLmNsYXNzKTsKKyAgICAgIGlmIChwc2lNZXRob2QgIT0gbnVsbCkgeworICAgICAgICBtZXRob2RzLmFkZChwc2lNZXRob2QpOworICAgICAgfQorICAgIH0KKyAgICBwYXJhbWV0ZXJQcm9wYWdhdGlvblRlc3QobWV0aG9kLCBtZXRob2RzLCBKYXZhUHNpRmFjYWRlLmdldEVsZW1lbnRGYWN0b3J5KGdldFByb2plY3QoKSkuY3JlYXRlVHlwZUJ5RlFDbGFzc05hbWUoIlQiKSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0RXhjZXB0aW9uU2ltcGxlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZXhjZXB0aW9uUHJvcGFnYXRpb25UZXN0KCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0RXhjZXB0aW9uV2l0aE92ZXJyaWRpbmcoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBleGNlcHRpb25Qcm9wYWdhdGlvblRlc3QoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RQYXJhbVdpdGhOb0NvbnN0cnVjdG9yKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZmluYWwgUHNpTWV0aG9kIG1ldGhvZCA9IGdldFByaW1hcnlNZXRob2QoKTsKKyAgICBwYXJhbWV0ZXJQcm9wYWdhdGlvblRlc3QobWV0aG9kLCBjb2xsZWN0Tm9uUGh5c2ljYWxNZXRob2RzVG9Qcm9wYWdhdGUobWV0aG9kKSwgSmF2YVBzaUZhY2FkZS5nZXRFbGVtZW50RmFjdG9yeShnZXRQcm9qZWN0KCkpLmNyZWF0ZVR5cGVCeUZRQ2xhc3NOYW1lKCJqYXZhLmxhbmcuQ2xhc3MiLCBHbG9iYWxTZWFyY2hTY29wZS5hbGxTY29wZShnZXRQcm9qZWN0KCkpKSk7CisgIH0KKworICAgcHVibGljIHZvaWQgdGVzdEV4Y2VwdGlvbldpdGhOb0NvbnN0cnVjdG9yKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZmluYWwgUHNpTWV0aG9kIG1ldGhvZCA9IGdldFByaW1hcnlNZXRob2QoKTsKKyAgICAgZXhjZXB0aW9uUHJvcGFnYXRpb25UZXN0KG1ldGhvZCwgY29sbGVjdE5vblBoeXNpY2FsTWV0aG9kc1RvUHJvcGFnYXRlKG1ldGhvZCkpOworICB9CisKKyAgcHJpdmF0ZSBzdGF0aWMgSGFzaFNldDxQc2lNZXRob2Q+IGNvbGxlY3ROb25QaHlzaWNhbE1ldGhvZHNUb1Byb3BhZ2F0ZShQc2lNZXRob2QgbWV0aG9kKSB7CisgICAgZmluYWwgSGFzaFNldDxQc2lNZXRob2Q+IG1ldGhvZHNUb1Byb3BhZ2F0ZSA9IG5ldyBIYXNoU2V0PFBzaU1ldGhvZD4oKTsKKyAgICBmaW5hbCBQc2lSZWZlcmVuY2VbXSByZWZlcmVuY2VzID0KKyAgICAgIE1ldGhvZFJlZmVyZW5jZXNTZWFyY2guc2VhcmNoKG1ldGhvZCwgR2xvYmFsU2VhcmNoU2NvcGUuYWxsU2NvcGUoZ2V0UHJvamVjdCgpKSwgdHJ1ZSkudG9BcnJheShQc2lSZWZlcmVuY2UuRU1QVFlfQVJSQVkpOworICAgIGZvciAoUHNpUmVmZXJlbmNlIHJlZmVyZW5jZSA6IHJlZmVyZW5jZXMpIHsKKyAgICAgIGZpbmFsIFBzaUVsZW1lbnQgZWxlbWVudCA9IHJlZmVyZW5jZS5nZXRFbGVtZW50KCk7CisgICAgICBBc3NlcnQuYXNzZXJ0VHJ1ZShlbGVtZW50IGluc3RhbmNlb2YgUHNpQ2xhc3MpOworICAgICAgUHNpQ2xhc3MgY29udGFpbmluZ0NsYXNzID0gKFBzaUNsYXNzKWVsZW1lbnQ7CisgICAgICBtZXRob2RzVG9Qcm9wYWdhdGUuYWRkKEphdmFQc2lGYWNhZGUuZ2V0RWxlbWVudEZhY3RvcnkoZ2V0UHJvamVjdCgpKS5jcmVhdGVNZXRob2RGcm9tVGV4dChjb250YWluaW5nQ2xhc3MuZ2V0TmFtZSgpICsgIigpe30iLCBjb250YWluaW5nQ2xhc3MpKTsKKyAgICB9CisgICAgcmV0dXJuIG1ldGhvZHNUb1Byb3BhZ2F0ZTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RQYXJhbVdpdGhJbXBsaWNpdENvbnN0cnVjdG9yKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZmluYWwgUHNpTWV0aG9kIG1ldGhvZCA9IGdldFByaW1hcnlNZXRob2QoKTsKKyAgICBwYXJhbWV0ZXJQcm9wYWdhdGlvblRlc3QobWV0aG9kLCBjb2xsZWN0RGVmYXVsdENvbnN0cnVjdG9yc1RvUHJvcGFnYXRlKG1ldGhvZCksIEphdmFQc2lGYWNhZGUuZ2V0RWxlbWVudEZhY3RvcnkoZ2V0UHJvamVjdCgpKS5jcmVhdGVUeXBlQnlGUUNsYXNzTmFtZSgiamF2YS5sYW5nLkNsYXNzIiwgR2xvYmFsU2VhcmNoU2NvcGUuYWxsU2NvcGUoZ2V0UHJvamVjdCgpKSkpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFBhcmFtV2l0aEltcGxpY2l0Q29uc3RydWN0b3JzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZmluYWwgUHNpTWV0aG9kIG1ldGhvZCA9IGdldFByaW1hcnlNZXRob2QoKTsKKyAgICBwYXJhbWV0ZXJQcm9wYWdhdGlvblRlc3QobWV0aG9kLCBjb2xsZWN0RGVmYXVsdENvbnN0cnVjdG9yc1RvUHJvcGFnYXRlKG1ldGhvZCksIEphdmFQc2lGYWNhZGUuZ2V0RWxlbWVudEZhY3RvcnkoZ2V0UHJvamVjdCgpKS5jcmVhdGVUeXBlQnlGUUNsYXNzTmFtZSgiamF2YS5sYW5nLkNsYXNzIiwgR2xvYmFsU2VhcmNoU2NvcGUuYWxsU2NvcGUoZ2V0UHJvamVjdCgpKSkpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEV4Y2VwdGlvbldpdGhJbXBsaWNpdENvbnN0cnVjdG9yKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZmluYWwgUHNpTWV0aG9kIG1ldGhvZCA9IGdldFByaW1hcnlNZXRob2QoKTsKKyAgICBleGNlcHRpb25Qcm9wYWdhdGlvblRlc3QobWV0aG9kLCBjb2xsZWN0RGVmYXVsdENvbnN0cnVjdG9yc1RvUHJvcGFnYXRlKG1ldGhvZCkpOworICB9CisKKyAgcHJpdmF0ZSBzdGF0aWMgSGFzaFNldDxQc2lNZXRob2Q+IGNvbGxlY3REZWZhdWx0Q29uc3RydWN0b3JzVG9Qcm9wYWdhdGUoUHNpTWV0aG9kIG1ldGhvZCkgeworICAgIGZpbmFsIEhhc2hTZXQ8UHNpTWV0aG9kPiBtZXRob2RzVG9Qcm9wYWdhdGUgPSBuZXcgSGFzaFNldDxQc2lNZXRob2Q+KCk7CisgICAgZm9yIChQc2lDbGFzcyBpbmhlcml0b3IgOiBDbGFzc0luaGVyaXRvcnNTZWFyY2guc2VhcmNoKG1ldGhvZC5nZXRDb250YWluaW5nQ2xhc3MoKSkpIHsKKyAgICAgIG1ldGhvZHNUb1Byb3BhZ2F0ZS5hZGQoaW5oZXJpdG9yLmdldENvbnN0cnVjdG9ycygpWzBdKTsKKyAgICB9CisgICAgcmV0dXJuIG1ldGhvZHNUb1Byb3BhZ2F0ZTsKKyAgfQorCisgIHByaXZhdGUgdm9pZCBwYXJhbWV0ZXJQcm9wYWdhdGlvblRlc3QoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBwYXJhbWV0ZXJQcm9wYWdhdGlvblRlc3QoSmF2YVBzaUZhY2FkZS5nZXRFbGVtZW50RmFjdG9yeShnZXRQcm9qZWN0KCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmNyZWF0ZVR5cGVCeUZRQ2xhc3NOYW1lKCJqYXZhLmxhbmcuQ2xhc3MiLCBHbG9iYWxTZWFyY2hTY29wZS5hbGxTY29wZShnZXRQcm9qZWN0KCkpKSk7CisgIH0KKworICBwcml2YXRlIHZvaWQgcGFyYW1ldGVyUHJvcGFnYXRpb25UZXN0KGZpbmFsIFBzaUNsYXNzVHlwZSBwYXJhbVR5cGUpIHRocm93cyBFeGNlcHRpb24geworICAgIGZpbmFsIFBzaU1ldGhvZCBtZXRob2QgPSBnZXRQcmltYXJ5TWV0aG9kKCk7CisgICAgcGFyYW1ldGVyUHJvcGFnYXRpb25UZXN0KG1ldGhvZCwgbmV3IEhhc2hTZXQ8UHNpTWV0aG9kPihBcnJheXMuYXNMaXN0KG1ldGhvZC5nZXRDb250YWluaW5nQ2xhc3MoKS5nZXRNZXRob2RzKCkpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1UeXBlKTsKKyAgfQorCisgIHByaXZhdGUgdm9pZCBwYXJhbWV0ZXJQcm9wYWdhdGlvblRlc3QoZmluYWwgUHNpTWV0aG9kIG1ldGhvZCwgZmluYWwgSGFzaFNldDxQc2lNZXRob2Q+IHBzaU1ldGhvZHMsIGZpbmFsIFBzaVR5cGUgcGFyYW1UeXBlKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBmaW5hbCBQYXJhbWV0ZXJJbmZvSW1wbFtdIG5ld1BhcmFtZXRlcnMgPSBuZXcgUGFyYW1ldGVySW5mb0ltcGxbXXtuZXcgUGFyYW1ldGVySW5mb0ltcGwoLTEsICJjbGF6eiIsIHBhcmFtVHlwZSwgIm51bGwiKX07CisgICAgZG9UZXN0KG5ld1BhcmFtZXRlcnMsIG5ldyBUaHJvd25FeGNlcHRpb25JbmZvWzBdLCBwc2lNZXRob2RzLCBudWxsLCBtZXRob2QpOworICB9CisKKyAgcHJpdmF0ZSB2b2lkIGV4Y2VwdGlvblByb3BhZ2F0aW9uVGVzdCgpIHRocm93cyBFeGNlcHRpb24geworICAgIGZpbmFsIFBzaU1ldGhvZCBtZXRob2QgPSBnZXRQcmltYXJ5TWV0aG9kKCk7CisgICAgZXhjZXB0aW9uUHJvcGFnYXRpb25UZXN0KG1ldGhvZCwgbmV3IEhhc2hTZXQ8UHNpTWV0aG9kPihBcnJheXMuYXNMaXN0KG1ldGhvZC5nZXRDb250YWluaW5nQ2xhc3MoKS5nZXRNZXRob2RzKCkpKSk7CisgIH0KKworICBwcml2YXRlIHZvaWQgZXhjZXB0aW9uUHJvcGFnYXRpb25UZXN0KGZpbmFsIFBzaU1ldGhvZCBtZXRob2QsIGZpbmFsIFNldDxQc2lNZXRob2Q+IG1ldGhvZHNUb1Byb3BhZ2F0ZUV4Y2VwdGlvbnMpIHRocm93cyBFeGNlcHRpb24geworICAgIFBzaUNsYXNzVHlwZSBuZXdFeGNlcHRpb25UeXBlID0gSmF2YVBzaUZhY2FkZS5nZXRFbGVtZW50RmFjdG9yeShnZXRQcm9qZWN0KCkpLmNyZWF0ZVR5cGVCeUZRQ2xhc3NOYW1lKCJqYXZhLmxhbmcuRXhjZXB0aW9uIiwgR2xvYmFsU2VhcmNoU2NvcGUuYWxsU2NvcGUoZ2V0UHJvamVjdCgpKSk7CisgICAgZmluYWwgVGhyb3duRXhjZXB0aW9uSW5mb1tdIG5ld0V4Y2VwdGlvbnMgPSBuZXcgVGhyb3duRXhjZXB0aW9uSW5mb1tde25ldyBKYXZhVGhyb3duRXhjZXB0aW9uSW5mbygtMSwgbmV3RXhjZXB0aW9uVHlwZSl9OworICAgIGRvVGVzdChuZXcgUGFyYW1ldGVySW5mb0ltcGxbMF0sIG5ld0V4Y2VwdGlvbnMsIG51bGwsIG1ldGhvZHNUb1Byb3BhZ2F0ZUV4Y2VwdGlvbnMsIG1ldGhvZCk7CisgIH0KKworICBwcml2YXRlIHZvaWQgZG9UZXN0KFBhcmFtZXRlckluZm9JbXBsW10gbmV3UGFyYW1ldGVycywKKyAgICAgICAgICAgICAgICAgICAgICBmaW5hbCBUaHJvd25FeGNlcHRpb25JbmZvW10gbmV3RXhjZXB0aW9ucywKKyAgICAgICAgICAgICAgICAgICAgICBTZXQ8UHNpTWV0aG9kPiBtZXRob2RzVG9Qcm9wYWdhdGVQYXJhbWV0ZXJDaGFuZ2VzLAorICAgICAgICAgICAgICAgICAgICAgIFNldDxQc2lNZXRob2Q+IG1ldGhvZHNUb1Byb3BhZ2F0ZUV4Y2VwdGlvbkNoYW5nZXMsCisgICAgICAgICAgICAgICAgICAgICAgUHNpTWV0aG9kIHByaW1hcnlNZXRob2QpIHRocm93cyBFeGNlcHRpb24geworICAgIGZpbmFsIFN0cmluZyBmaWxlUGF0aCA9IGdldEJhc2VQYXRoKCkgKyBnZXRUZXN0TmFtZShmYWxzZSkgKyAiLmphdmEiOworICAgIGZpbmFsIFBzaVR5cGUgcmV0dXJuVHlwZSA9IHByaW1hcnlNZXRob2QuZ2V0UmV0dXJuVHlwZSgpOworICAgIGZpbmFsIENhbm9uaWNhbFR5cGVzLlR5cGUgdHlwZSA9IHJldHVyblR5cGUgPT0gbnVsbCA/IG51bGwgOiBDYW5vbmljYWxUeXBlcy5jcmVhdGVUeXBlV3JhcHBlcihyZXR1cm5UeXBlKTsKKyAgICBuZXcgQ2hhbmdlU2lnbmF0dXJlUHJvY2Vzc29yKGdldFByb2plY3QoKSwgcHJpbWFyeU1ldGhvZCwgZmFsc2UsIG51bGwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmltYXJ5TWV0aG9kLmdldE5hbWUoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZW5lcmF0ZVBhcmFtZXRlckluZm9zKHByaW1hcnlNZXRob2QsIG5ld1BhcmFtZXRlcnMpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2VuZXJhdGVFeGNlcHRpb25JbmZvcyhwcmltYXJ5TWV0aG9kLCBuZXdFeGNlcHRpb25zKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ldGhvZHNUb1Byb3BhZ2F0ZVBhcmFtZXRlckNoYW5nZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXRob2RzVG9Qcm9wYWdhdGVFeGNlcHRpb25DaGFuZ2VzKS5ydW4oKTsKKyAgICBjaGVja1Jlc3VsdEJ5RmlsZShmaWxlUGF0aCArICIuYWZ0ZXIiKTsKKyAgfQorCisgIHByaXZhdGUgUHNpTWV0aG9kIGdldFByaW1hcnlNZXRob2QoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBmaW5hbCBTdHJpbmcgZmlsZVBhdGggPSBnZXRCYXNlUGF0aCgpICsgZ2V0VGVzdE5hbWUoZmFsc2UpICsgIi5qYXZhIjsKKyAgICBjb25maWd1cmVCeUZpbGUoZmlsZVBhdGgpOworICAgIGZpbmFsIFBzaUVsZW1lbnQgdGFyZ2V0RWxlbWVudCA9IFRhcmdldEVsZW1lbnRVdGlsQmFzZS5maW5kVGFyZ2V0RWxlbWVudChteUVkaXRvciwgVGFyZ2V0RWxlbWVudFV0aWxCYXNlLkVMRU1FTlRfTkFNRV9BQ0NFUFRFRCk7CisgICAgYXNzZXJ0VHJ1ZSgiPGNhcmV0PiBpcyBub3Qgb24gbWV0aG9kIG5hbWUiLCB0YXJnZXRFbGVtZW50IGluc3RhbmNlb2YgUHNpTWV0aG9kKTsKKyAgICByZXR1cm4gKFBzaU1ldGhvZCkgdGFyZ2V0RWxlbWVudDsKKyAgfQorCisgIHByaXZhdGUgc3RhdGljIFN0cmluZyBnZXRCYXNlUGF0aCgpIHsKKyAgICByZXR1cm4gIi9yZWZhY3RvcmluZy9jaGFuZ2VTaWduYXR1cmVQcm9wYWdhdGlvbi8iOworICB9CisKKyAgcHJpdmF0ZSBzdGF0aWMgUGFyYW1ldGVySW5mb0ltcGxbXSBnZW5lcmF0ZVBhcmFtZXRlckluZm9zIChQc2lNZXRob2QgbWV0aG9kLCBQYXJhbWV0ZXJJbmZvSW1wbFtdIG5ld1BhcmFtZXRlcnMpIHsKKyAgICBmaW5hbCBQc2lQYXJhbWV0ZXJbXSBwYXJhbWV0ZXJzID0gbWV0aG9kLmdldFBhcmFtZXRlckxpc3QoKS5nZXRQYXJhbWV0ZXJzKCk7CisgICAgUGFyYW1ldGVySW5mb0ltcGxbXSByZXN1bHQgPSBuZXcgUGFyYW1ldGVySW5mb0ltcGxbcGFyYW1ldGVycy5sZW5ndGggKyBuZXdQYXJhbWV0ZXJzLmxlbmd0aF07CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBwYXJhbWV0ZXJzLmxlbmd0aDsgaSsrKSB7CisgICAgICByZXN1bHRbaV0gPSBuZXcgUGFyYW1ldGVySW5mb0ltcGwoaSk7CisgICAgfQorICAgIFN5c3RlbS5hcnJheWNvcHkobmV3UGFyYW1ldGVycywgMCwgcmVzdWx0LCBwYXJhbWV0ZXJzLmxlbmd0aCwgbmV3UGFyYW1ldGVycy5sZW5ndGgpOworICAgIHJldHVybiByZXN1bHQ7CisgIH0KKworICBwcml2YXRlIHN0YXRpYyBUaHJvd25FeGNlcHRpb25JbmZvW10gZ2VuZXJhdGVFeGNlcHRpb25JbmZvcyAoUHNpTWV0aG9kIG1ldGhvZCwgVGhyb3duRXhjZXB0aW9uSW5mb1tdIG5ld0V4Y2VwdGlvbnMpIHsKKyAgICBmaW5hbCBQc2lDbGFzc1R5cGVbXSBleGNlcHRpb25zID0gbWV0aG9kLmdldFRocm93c0xpc3QoKS5nZXRSZWZlcmVuY2VkVHlwZXMoKTsKKyAgICBUaHJvd25FeGNlcHRpb25JbmZvW10gcmVzdWx0ID0gbmV3IFRocm93bkV4Y2VwdGlvbkluZm9bZXhjZXB0aW9ucy5sZW5ndGggKyBuZXdFeGNlcHRpb25zLmxlbmd0aF07CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBleGNlcHRpb25zLmxlbmd0aDsgaSsrKSB7CisgICAgICByZXN1bHRbaV0gPSBuZXcgSmF2YVRocm93bkV4Y2VwdGlvbkluZm8oaSk7CisgICAgfQorICAgIFN5c3RlbS5hcnJheWNvcHkobmV3RXhjZXB0aW9ucywgMCwgcmVzdWx0LCBleGNlcHRpb25zLmxlbmd0aCwgbmV3RXhjZXB0aW9ucy5sZW5ndGgpOworICAgIHJldHVybiByZXN1bHQ7CisgIH0KKworICBATm90TnVsbAorICBAT3ZlcnJpZGUKKyAgcHJvdGVjdGVkIFN0cmluZyBnZXRUZXN0RGF0YVBhdGgoKSB7CisgICAgcmV0dXJuIEphdmFUZXN0VXRpbC5nZXRKYXZhVGVzdERhdGFQYXRoKCk7CisgIH0KKworfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL3JlZmFjdG9yaW5nL0NoYW5nZVNpZ25hdHVyZVRhcmdldFRlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9yZWZhY3RvcmluZy9DaGFuZ2VTaWduYXR1cmVUYXJnZXRUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWE4NjBmOQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9yZWZhY3RvcmluZy9DaGFuZ2VTaWduYXR1cmVUYXJnZXRUZXN0LmphdmEKQEAgLTAsMCArMSw2MiBAQAorLyoKKyAqIENvcHlyaWdodCAyMDAwLTIwMTIgSmV0QnJhaW5zIHMuci5vLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworLyoKKyAqIFVzZXI6IGFubmEKKyAqIERhdGU6IDI1LU5vdi0yMDA5CisgKi8KK3BhY2thZ2UgY29tLmludGVsbGlqLnJlZmFjdG9yaW5nOworCitpbXBvcnQgY29tLmludGVsbGlqLkphdmFUZXN0VXRpbDsKK2ltcG9ydCBjb20uaW50ZWxsaWoucHNpLlBzaUVsZW1lbnQ7CitpbXBvcnQgY29tLmludGVsbGlqLnBzaS5Qc2lNZW1iZXI7CitpbXBvcnQgY29tLmludGVsbGlqLnJlZmFjdG9yaW5nLmNoYW5nZVNpZ25hdHVyZS5KYXZhQ2hhbmdlU2lnbmF0dXJlSGFuZGxlcjsKK2ltcG9ydCBjb20uaW50ZWxsaWoudGVzdEZyYW1ld29yay5MaWdodENvZGVJbnNpZ2h0VGVzdENhc2U7CitpbXBvcnQgb3JnLmpldGJyYWlucy5hbm5vdGF0aW9ucy5Ob25ObHM7CitpbXBvcnQgb3JnLmpldGJyYWlucy5hbm5vdGF0aW9ucy5Ob3ROdWxsOworCitwdWJsaWMgY2xhc3MgQ2hhbmdlU2lnbmF0dXJlVGFyZ2V0VGVzdCBleHRlbmRzIExpZ2h0Q29kZUluc2lnaHRUZXN0Q2FzZSB7CisgIEBOb3ROdWxsCisgIEBPdmVycmlkZQorICBwcm90ZWN0ZWQgU3RyaW5nIGdldFRlc3REYXRhUGF0aCgpIHsKKyAgICByZXR1cm4gSmF2YVRlc3RVdGlsLmdldEphdmFUZXN0RGF0YVBhdGgoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RJbk1ldGhvZFBhcmFtZXRlcnMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoImZvbyIpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEluTWV0aG9kQXJndW1lbnRzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KCJmb28iKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RJbkNsYXNzVHlwZVBhcmFtZXRlcnMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoIkExIik7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0SW5UeXBlQXJndW1lbnRzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KCJBMSIpOworICB9CisKKyAgcHJpdmF0ZSB2b2lkIGRvVGVzdChTdHJpbmcgZXhwZWN0ZWRNZW1iZXJOYW1lKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBTdHJpbmcgYmFzZVBhdGggPSAiL3JlZmFjdG9yaW5nL2NoYW5nZVNpZ25hdHVyZVRhcmdldC8iICsgZ2V0VGVzdE5hbWUodHJ1ZSk7CisgICAgQE5vbk5scyBmaW5hbCBTdHJpbmcgZmlsZVBhdGggPSBiYXNlUGF0aCArICIuamF2YSI7CisgICAgY29uZmlndXJlQnlGaWxlKGZpbGVQYXRoKTsKKyAgICBmaW5hbCBQc2lFbGVtZW50IG1lbWJlciA9IG5ldyBKYXZhQ2hhbmdlU2lnbmF0dXJlSGFuZGxlcigpLmZpbmRUYXJnZXRNZW1iZXIoZ2V0RmlsZSgpLCBnZXRFZGl0b3IoKSk7CisgICAgYXNzZXJ0Tm90TnVsbChtZW1iZXIpOworICAgIGFzc2VydEVxdWFscyhleHBlY3RlZE1lbWJlck5hbWUsICgoUHNpTWVtYmVyKW1lbWJlcikuZ2V0TmFtZSgpKTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL3JlZmFjdG9yaW5nL0NoYW5nZVNpZ25hdHVyZVRlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9yZWZhY3RvcmluZy9DaGFuZ2VTaWduYXR1cmVUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjUxOTQwMQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9yZWZhY3RvcmluZy9DaGFuZ2VTaWduYXR1cmVUZXN0LmphdmEKQEAgLTAsMCArMSw0ODEgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwMC0yMDExIEpldEJyYWlucyBzLnIuby4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCitwYWNrYWdlIGNvbS5pbnRlbGxpai5yZWZhY3RvcmluZzsKKworaW1wb3J0IGNvbS5pbnRlbGxpai5KYXZhVGVzdFV0aWw7CitpbXBvcnQgY29tLmludGVsbGlqLmNvZGVJbnNpZ2h0LlRhcmdldEVsZW1lbnRVdGlsQmFzZTsKK2ltcG9ydCBjb20uaW50ZWxsaWoucHNpLio7CitpbXBvcnQgY29tLmludGVsbGlqLnJlZmFjdG9yaW5nLmNoYW5nZVNpZ25hdHVyZS5DaGFuZ2VTaWduYXR1cmVQcm9jZXNzb3I7CitpbXBvcnQgY29tLmludGVsbGlqLnJlZmFjdG9yaW5nLmNoYW5nZVNpZ25hdHVyZS5KYXZhVGhyb3duRXhjZXB0aW9uSW5mbzsKK2ltcG9ydCBjb20uaW50ZWxsaWoucmVmYWN0b3JpbmcuY2hhbmdlU2lnbmF0dXJlLlBhcmFtZXRlckluZm9JbXBsOworaW1wb3J0IGNvbS5pbnRlbGxpai5yZWZhY3RvcmluZy5jaGFuZ2VTaWduYXR1cmUuVGhyb3duRXhjZXB0aW9uSW5mbzsKK2ltcG9ydCBjb20uaW50ZWxsaWoucmVmYWN0b3JpbmcudXRpbC5DYW5vbmljYWxUeXBlczsKK2ltcG9ydCBjb20uaW50ZWxsaWoudXRpbC5JbmNvcnJlY3RPcGVyYXRpb25FeGNlcHRpb247CitpbXBvcnQgb3JnLmpldGJyYWlucy5hbm5vdGF0aW9ucy5Ob25ObHM7CitpbXBvcnQgb3JnLmpldGJyYWlucy5hbm5vdGF0aW9ucy5Ob3ROdWxsOworaW1wb3J0IG9yZy5qZXRicmFpbnMuYW5ub3RhdGlvbnMuTnVsbGFibGU7CisKK2ltcG9ydCBqYXZhLnV0aWwuSGFzaFNldDsKKworLyoqCisgKiBAYXV0aG9yIGRzbAorICovCitwdWJsaWMgY2xhc3MgQ2hhbmdlU2lnbmF0dXJlVGVzdCBleHRlbmRzIExpZ2h0UmVmYWN0b3JpbmdUZXN0Q2FzZSB7CisgIHB1YmxpYyB2b2lkIHRlc3RTaW1wbGUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QobnVsbCwgbnVsbCwgbnVsbCwgbmV3IFBhcmFtZXRlckluZm9JbXBsWzBdLCBuZXcgVGhyb3duRXhjZXB0aW9uSW5mb1swXSwgZmFsc2UpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFBhcmFtZXRlclJlb3JkZXIoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QobnVsbCwgbmV3IFBhcmFtZXRlckluZm9JbXBsW117bmV3IFBhcmFtZXRlckluZm9JbXBsKDEpLCBuZXcgUGFyYW1ldGVySW5mb0ltcGwoMCl9LCBmYWxzZSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0R2VuZXJpY1R5cGVzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KG51bGwsIG51bGwsICJUIiwgbmV3IEdlblBhcmFtcygpIHsKKyAgICAgIEBPdmVycmlkZQorICAgICAgcHVibGljIFBhcmFtZXRlckluZm9JbXBsW10gZ2VuUGFyYW1zKFBzaU1ldGhvZCBtZXRob2QpIHRocm93cyBJbmNvcnJlY3RPcGVyYXRpb25FeGNlcHRpb24geworICAgICAgICBmaW5hbCBQc2lFbGVtZW50RmFjdG9yeSBmYWN0b3J5ID0gSmF2YVBzaUZhY2FkZS5nZXRJbnN0YW5jZShnZXRQcm9qZWN0KCkpLmdldEVsZW1lbnRGYWN0b3J5KCk7CisgICAgICAgIHJldHVybiBuZXcgUGFyYW1ldGVySW5mb0ltcGxbXXsKKyAgICAgICAgICBuZXcgUGFyYW1ldGVySW5mb0ltcGwoLTEsICJ4IiwgZmFjdG9yeS5jcmVhdGVUeXBlRnJvbVRleHQoIlQiLCBtZXRob2QuZ2V0UGFyYW1ldGVyTGlzdCgpKSwgIm51bGwiKSwKKyAgICAgICAgICBuZXcgUGFyYW1ldGVySW5mb0ltcGwoLTEsICJ5IiwgZmFjdG9yeS5jcmVhdGVUeXBlRnJvbVRleHQoIkM8VD4iLCBtZXRob2QuZ2V0UGFyYW1ldGVyTGlzdCgpKSwgIm51bGwiKQorICAgICAgICB9OworICAgICAgfQorICAgIH0sIGZhbHNlKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RHZW5lcmljVHlwZXNJbk9sZFBhcmFtZXRlcnMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QobnVsbCwgbnVsbCwgbnVsbCwgbmV3IEdlblBhcmFtcygpIHsKKyAgICAgIEBPdmVycmlkZQorICAgICAgcHVibGljIFBhcmFtZXRlckluZm9JbXBsW10gZ2VuUGFyYW1zKFBzaU1ldGhvZCBtZXRob2QpIHRocm93cyBJbmNvcnJlY3RPcGVyYXRpb25FeGNlcHRpb24geworICAgICAgICBmaW5hbCBQc2lFbGVtZW50RmFjdG9yeSBmYWN0b3J5ID0gSmF2YVBzaUZhY2FkZS5nZXRJbnN0YW5jZShnZXRQcm9qZWN0KCkpLmdldEVsZW1lbnRGYWN0b3J5KCk7CisgICAgICAgIHJldHVybiBuZXcgUGFyYW1ldGVySW5mb0ltcGxbXSB7CisgICAgICAgICAgbmV3IFBhcmFtZXRlckluZm9JbXBsKDAsICJ0IiwgZmFjdG9yeS5jcmVhdGVUeXBlRnJvbVRleHQoIlQiLCBtZXRob2QpLCBudWxsKQorICAgICAgICB9OworICAgICAgfQorICAgIH0sIGZhbHNlKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RUeXBlUGFyYW1ldGVyc0luTWV0aG9kKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KG51bGwsIG51bGwsIG51bGwsIG5ldyBHZW5QYXJhbXMoKSB7CisgICAgICAgICAgICAgQE92ZXJyaWRlCisgICAgICAgICAgICAgcHVibGljIFBhcmFtZXRlckluZm9JbXBsW10gZ2VuUGFyYW1zKFBzaU1ldGhvZCBtZXRob2QpIHRocm93cyBJbmNvcnJlY3RPcGVyYXRpb25FeGNlcHRpb24geworICAgICAgICAgICAgICAgZmluYWwgUHNpRWxlbWVudEZhY3RvcnkgZmFjdG9yeSA9IEphdmFQc2lGYWNhZGUuZ2V0SW5zdGFuY2UoZ2V0UHJvamVjdCgpKS5nZXRFbGVtZW50RmFjdG9yeSgpOworICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBQYXJhbWV0ZXJJbmZvSW1wbFtdeworICAgICAgICAgICAgICAgICAgIG5ldyBQYXJhbWV0ZXJJbmZvSW1wbCgtMSwgInQiLCBmYWN0b3J5LmNyZWF0ZVR5cGVGcm9tVGV4dCgiVCIsIG1ldGhvZC5nZXRQYXJhbWV0ZXJMaXN0KCkpLCAibnVsbCIpLAorICAgICAgICAgICAgICAgICAgIG5ldyBQYXJhbWV0ZXJJbmZvSW1wbCgtMSwgInUiLCBmYWN0b3J5LmNyZWF0ZVR5cGVGcm9tVGV4dCgiVSIsIG1ldGhvZC5nZXRQYXJhbWV0ZXJMaXN0KCkpLCAibnVsbCIpLAorICAgICAgICAgICAgICAgICAgIG5ldyBQYXJhbWV0ZXJJbmZvSW1wbCgtMSwgImN1IiwgZmFjdG9yeS5jcmVhdGVUeXBlRnJvbVRleHQoIkM8VT4iLCBtZXRob2QuZ2V0UGFyYW1ldGVyTGlzdCgpKSwgIm51bGwiKQorICAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAgIH0KKyAgICAgICAgICAgfSwgZmFsc2UpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdERlZmF1bHRDb25zdHJ1Y3RvcigpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdChudWxsLAorICAgICAgICAgICBuZXcgUGFyYW1ldGVySW5mb0ltcGxbXSB7CisgICAgICAgICAgICAgIG5ldyBQYXJhbWV0ZXJJbmZvSW1wbCgtMSwgImoiLCBQc2lUeXBlLklOVCwgIjI3IikKKyAgICAgICAgICAgfSwgZmFsc2UpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEdlbmVyYXRlRGVsZWdhdGUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QobnVsbCwKKyAgICAgICAgICAgbmV3IFBhcmFtZXRlckluZm9JbXBsW10geworICAgICAgICAgICAgIG5ldyBQYXJhbWV0ZXJJbmZvSW1wbCgtMSwgImkiLCBQc2lUeXBlLklOVCwgIjI3IikKKyAgICAgICAgICAgfSwgdHJ1ZSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0R2VuZXJhdGVEZWxlZ2F0ZUZvckFic3RyYWN0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KG51bGwsCisgICAgICAgICAgIG5ldyBQYXJhbWV0ZXJJbmZvSW1wbFtdIHsKKyAgICAgICAgICAgICBuZXcgUGFyYW1ldGVySW5mb0ltcGwoLTEsICJpIiwgUHNpVHlwZS5JTlQsICIyNyIpCisgICAgICAgICAgIH0sIHRydWUpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEdlbmVyYXRlRGVsZWdhdGVXaXRoUmV0dXJuKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KG51bGwsCisgICAgICAgICAgIG5ldyBQYXJhbWV0ZXJJbmZvSW1wbFtdIHsKKyAgICAgICAgICAgICBuZXcgUGFyYW1ldGVySW5mb0ltcGwoLTEsICJpIiwgUHNpVHlwZS5JTlQsICIyNyIpCisgICAgICAgICAgIH0sIHRydWUpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEdlbmVyYXRlRGVsZWdhdGVXaXRoUGFyYW1ldGVyc1Jlb3JkZXJpbmcoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QobnVsbCwKKyAgICAgICAgICAgbmV3IFBhcmFtZXRlckluZm9JbXBsW10geworICAgICAgICAgICAgIG5ldyBQYXJhbWV0ZXJJbmZvSW1wbCgxKSwKKyAgICAgICAgICAgICBuZXcgUGFyYW1ldGVySW5mb0ltcGwoLTEsICJjIiwgUHNpVHlwZS5DSEFSLCAiJ2EnIiksCisgICAgICAgICAgICAgbmV3IFBhcmFtZXRlckluZm9JbXBsKDAsICJqIiwgUHNpVHlwZS5JTlQpCisgICAgICAgICAgIH0sIHRydWUpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEdlbmVyYXRlRGVsZWdhdGVDb25zdHJ1Y3RvcigpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdChudWxsLCBuZXcgUGFyYW1ldGVySW5mb0ltcGxbMF0sIHRydWUpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEdlbmVyYXRlRGVsZWdhdGVEZWZhdWx0Q29uc3RydWN0b3IoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QobnVsbCwgbmV3IFBhcmFtZXRlckluZm9JbXBsW10geworICAgICAgbmV3IFBhcmFtZXRlckluZm9JbXBsKC0xLCAiaSIsIFBzaVR5cGUuSU5ULCAiMjciKQorICAgIH0sIHRydWUpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFNDUjQwODk1KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KG51bGwsIG5ldyBQYXJhbWV0ZXJJbmZvSW1wbFtdIHsKKyAgICAgIG5ldyBQYXJhbWV0ZXJJbmZvSW1wbCgwLCAieSIsIFBzaVR5cGUuSU5UKSwKKyAgICAgIG5ldyBQYXJhbWV0ZXJJbmZvSW1wbCgxLCAiYiIsIFBzaVR5cGUuQk9PTEVBTikKKyAgICB9LCBmYWxzZSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0UGFyYW1OYW1lU2FtZUFzRmllbGROYW1lKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KG51bGwsIG5ldyBQYXJhbWV0ZXJJbmZvSW1wbFtdIHsKKyAgICAgIG5ldyBQYXJhbWV0ZXJJbmZvSW1wbCgwLCAiZmllbGROYW1lIiwgUHNpVHlwZS5JTlQpCisgICAgfSwgZmFsc2UpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFBhcmFtTmFtZU5vQ29uZmxpY3QoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QobnVsbCwgbmV3IFBhcmFtZXRlckluZm9JbXBsW117CisgICAgICBuZXcgUGFyYW1ldGVySW5mb0ltcGwoMCksCisgICAgICBuZXcgUGFyYW1ldGVySW5mb0ltcGwoLTEsICJiIiwgUHNpVHlwZS5CT09MRUFOKQorICAgIH0sIGZhbHNlKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RQYXJhbUphdmFkb2MoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QobnVsbCwgbmV3IFBhcmFtZXRlckluZm9JbXBsW10geworICAgICAgbmV3IFBhcmFtZXRlckluZm9JbXBsKDEsICJ6IiwgUHNpVHlwZS5JTlQpLAorICAgICAgbmV3IFBhcmFtZXRlckluZm9JbXBsKDAsICJ5IiwgUHNpVHlwZS5JTlQpCisgICAgfSwgZmFsc2UpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFBhcmFtSmF2YWRvYzEoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QobnVsbCwgbmV3IFBhcmFtZXRlckluZm9JbXBsW117CisgICAgICBuZXcgUGFyYW1ldGVySW5mb0ltcGwoMCwgInoiLCBQc2lUeXBlLkJPT0xFQU4pCisgICAgfSwgZmFsc2UpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFBhcmFtSmF2YWRvYzIoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QobnVsbCwgbmV3IFBhcmFtZXRlckluZm9JbXBsW117CisgICAgICBuZXcgUGFyYW1ldGVySW5mb0ltcGwoLTEsICJ6IiwgUHNpVHlwZS5CT09MRUFOKSwKKyAgICAgIG5ldyBQYXJhbWV0ZXJJbmZvSW1wbCgwLCAiYSIsIFBzaVR5cGUuQk9PTEVBTiksCisgICAgfSwgZmFsc2UpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFN1cGVyQ2FsbEZyb21PdGhlck1ldGhvZCgpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdChudWxsLCBuZXcgUGFyYW1ldGVySW5mb0ltcGxbXSB7CisgICAgICBuZXcgUGFyYW1ldGVySW5mb0ltcGwoLTEsICJubm4iLCBQc2lUeXBlLklOVCwgIi0yMjIiKSwKKyAgICB9LCBmYWxzZSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0VXNlQW55VmFyaWFibGUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QobnVsbCwgbnVsbCwgbnVsbCwgbmV3IEdlblBhcmFtcygpIHsKKyAgICAgIEBPdmVycmlkZQorICAgICAgcHVibGljIFBhcmFtZXRlckluZm9JbXBsW10gZ2VuUGFyYW1zKFBzaU1ldGhvZCBtZXRob2QpIHRocm93cyBJbmNvcnJlY3RPcGVyYXRpb25FeGNlcHRpb24geworICAgICAgICBmaW5hbCBQc2lFbGVtZW50RmFjdG9yeSBmYWN0b3J5ID0gSmF2YVBzaUZhY2FkZS5nZXRJbnN0YW5jZShtZXRob2QuZ2V0UHJvamVjdCgpKS5nZXRFbGVtZW50RmFjdG9yeSgpOworICAgICAgICByZXR1cm4gbmV3IFBhcmFtZXRlckluZm9JbXBsW10geworICAgICAgICAgIG5ldyBQYXJhbWV0ZXJJbmZvSW1wbCgtMSwgImwiLCBmYWN0b3J5LmNyZWF0ZVR5cGVGcm9tVGV4dCgiTGlzdCIsIG1ldGhvZCksICJudWxsIiwgdHJ1ZSkKKyAgICAgICAgfTsKKyAgICAgIH0KKyAgICB9LCBmYWxzZSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0VXNlVGhpc0FzQW55VmFyaWFibGUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QobnVsbCwgbnVsbCwgbnVsbCwgbmV3IEdlblBhcmFtcygpIHsKKyAgICAgIEBPdmVycmlkZQorICAgICAgcHVibGljIFBhcmFtZXRlckluZm9JbXBsW10gZ2VuUGFyYW1zKFBzaU1ldGhvZCBtZXRob2QpIHRocm93cyBJbmNvcnJlY3RPcGVyYXRpb25FeGNlcHRpb24geworICAgICAgICBmaW5hbCBQc2lFbGVtZW50RmFjdG9yeSBmYWN0b3J5ID0gSmF2YVBzaUZhY2FkZS5nZXRJbnN0YW5jZShtZXRob2QuZ2V0UHJvamVjdCgpKS5nZXRFbGVtZW50RmFjdG9yeSgpOworICAgICAgICByZXR1cm4gbmV3IFBhcmFtZXRlckluZm9JbXBsW10geworICAgICAgICAgIG5ldyBQYXJhbWV0ZXJJbmZvSW1wbCgtMSwgImwiLCBmYWN0b3J5LmNyZWF0ZVR5cGVGcm9tVGV4dCgiTGlzdCIsIG1ldGhvZCksICJudWxsIiwgdHJ1ZSkKKyAgICAgICAgfTsKKyAgICAgIH0KKyAgICB9LCBmYWxzZSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0VXNlQW55VmFyaWFibGVBbmREZWZhdWx0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KG51bGwsIG51bGwsIG51bGwsIG5ldyBHZW5QYXJhbXMoKSB7CisgICAgICBAT3ZlcnJpZGUKKyAgICAgIHB1YmxpYyBQYXJhbWV0ZXJJbmZvSW1wbFtdIGdlblBhcmFtcyhQc2lNZXRob2QgbWV0aG9kKSB0aHJvd3MgSW5jb3JyZWN0T3BlcmF0aW9uRXhjZXB0aW9uIHsKKyAgICAgICAgZmluYWwgUHNpRWxlbWVudEZhY3RvcnkgZmFjdG9yeSA9IEphdmFQc2lGYWNhZGUuZ2V0SW5zdGFuY2UobWV0aG9kLmdldFByb2plY3QoKSkuZ2V0RWxlbWVudEZhY3RvcnkoKTsKKyAgICAgICAgcmV0dXJuIG5ldyBQYXJhbWV0ZXJJbmZvSW1wbFtdIHsKKyAgICAgICAgICBuZXcgUGFyYW1ldGVySW5mb0ltcGwoLTEsICJjIiwgZmFjdG9yeS5jcmVhdGVUeXBlRnJvbVRleHQoIkMiLCBtZXRob2QpLCAibnVsbCIsIHRydWUpCisgICAgICAgIH07CisgICAgICB9CisgICAgfSwgZmFsc2UpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFJlbW92ZVZhcmFyZ1BhcmFtZXRlcigpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdChudWxsLCBudWxsLCBudWxsLCBuZXcgUGFyYW1ldGVySW5mb0ltcGxbXXtuZXcgUGFyYW1ldGVySW5mb0ltcGwoMCl9LCBuZXcgVGhyb3duRXhjZXB0aW9uSW5mb1swXSwgZmFsc2UpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEVudW1Db25zdHJ1Y3RvcigpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdChudWxsLCBuZXcgUGFyYW1ldGVySW5mb0ltcGxbXSB7CisgICAgICBuZXcgUGFyYW1ldGVySW5mb0ltcGwoLTEsICJpIiwgUHNpVHlwZS5JTlQsICIxMCIpCisgICAgfSwgZmFsc2UpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFZhcmFyZ3MxKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KG51bGwsIG5ldyBQYXJhbWV0ZXJJbmZvSW1wbFtdIHsKKyAgICAgIG5ldyBQYXJhbWV0ZXJJbmZvSW1wbCgtMSwgImIiLCBQc2lUeXBlLkJPT0xFQU4sICJ0cnVlIiksCisgICAgICBuZXcgUGFyYW1ldGVySW5mb0ltcGwoMCkKKyAgICB9LCBmYWxzZSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0VmFyYXJnczIoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QobnVsbCwgbmV3IFBhcmFtZXRlckluZm9JbXBsW10geworICAgICAgbmV3IFBhcmFtZXRlckluZm9JbXBsKDEsICJpIiwgUHNpVHlwZS5JTlQpLAorICAgICAgbmV3IFBhcmFtZXRlckluZm9JbXBsKDAsICJiIiwgbmV3IFBzaUVsbGlwc2lzVHlwZShQc2lUeXBlLkJPT0xFQU4pKQorICAgIH0sIGZhbHNlKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RDb3ZhcmlhbnRSZXR1cm5UeXBlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KENvbW1vbkNsYXNzTmFtZXMuSkFWQV9MQU5HX1JVTk5BQkxFLCBuZXcgUGFyYW1ldGVySW5mb0ltcGxbMF0sIGZhbHNlKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RSZW9yZGVyRXhjZXB0aW9ucygpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdChudWxsLCBudWxsLCBudWxsLCBuZXcgU2ltcGxlUGFyYW1ldGVyR2VuKG5ldyBQYXJhbWV0ZXJJbmZvSW1wbFswXSksCisgICAgICAgICAgIG5ldyBTaW1wbGVFeGNlcHRpb25zR2VuKG5ldyBUaHJvd25FeGNlcHRpb25JbmZvW117bmV3IEphdmFUaHJvd25FeGNlcHRpb25JbmZvKDEpLCBuZXcgSmF2YVRocm93bkV4Y2VwdGlvbkluZm8oMCl9KSwKKyAgICAgICAgICAgZmFsc2UpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEFscmVhZHlIYW5kbGVkKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KG51bGwsIG51bGwsIG51bGwsIG5ldyBTaW1wbGVQYXJhbWV0ZXJHZW4obmV3IFBhcmFtZXRlckluZm9JbXBsWzBdKSwKKyAgICAgICAgICAgbmV3IEdlbkV4Y2VwdGlvbnMoKSB7CisgICAgICAgICAgICAgQE92ZXJyaWRlCisgICAgICAgICAgICAgcHVibGljIFRocm93bkV4Y2VwdGlvbkluZm9bXSBnZW5FeGNlcHRpb25zKFBzaU1ldGhvZCBtZXRob2QpIHsKKyAgICAgICAgICAgICAgIHJldHVybiBuZXcgVGhyb3duRXhjZXB0aW9uSW5mb1tdIHsKKyAgICAgICAgICAgICAgICAgbmV3IEphdmFUaHJvd25FeGNlcHRpb25JbmZvKC0xLCBKYXZhUHNpRmFjYWRlLmdldEluc3RhbmNlKG1ldGhvZC5nZXRQcm9qZWN0KCkpLmdldEVsZW1lbnRGYWN0b3J5KCkuY3JlYXRlVHlwZUJ5RlFDbGFzc05hbWUoImphdmEubGFuZy5FeGNlcHRpb24iLCBtZXRob2QuZ2V0UmVzb2x2ZVNjb3BlKCkpKQorICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgICB9CisgICAgICAgICAgIH0sCisgICAgICAgICAgIGZhbHNlKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RDb25zdHJ1Y3RvckV4Y2VwdGlvbigpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdChudWxsLCBudWxsLCBudWxsLCBuZXcgU2ltcGxlUGFyYW1ldGVyR2VuKG5ldyBQYXJhbWV0ZXJJbmZvSW1wbFswXSksCisgICAgICAgICAgIG5ldyBHZW5FeGNlcHRpb25zKCkgeworICAgICAgICAgICAgIEBPdmVycmlkZQorICAgICAgICAgICAgIHB1YmxpYyBUaHJvd25FeGNlcHRpb25JbmZvW10gZ2VuRXhjZXB0aW9ucyhQc2lNZXRob2QgbWV0aG9kKSB7CisgICAgICAgICAgICAgICByZXR1cm4gbmV3IFRocm93bkV4Y2VwdGlvbkluZm9bXSB7CisgICAgICAgICAgICAgICAgIG5ldyBKYXZhVGhyb3duRXhjZXB0aW9uSW5mbygtMSwgSmF2YVBzaUZhY2FkZS5nZXRJbnN0YW5jZShtZXRob2QuZ2V0UHJvamVjdCgpKS5nZXRFbGVtZW50RmFjdG9yeSgpLmNyZWF0ZVR5cGVCeUZRQ2xhc3NOYW1lKCJqYXZhLmlvLklPRXhjZXB0aW9uIiwgbWV0aG9kLmdldFJlc29sdmVTY29wZSgpKSkKKyAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICAgfQorICAgICAgICAgICB9LAorICAgICAgICAgICBmYWxzZSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0QWRkUnVudGltZUV4Y2VwdGlvbigpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdChudWxsLCBudWxsLCBudWxsLCBuZXcgU2ltcGxlUGFyYW1ldGVyR2VuKG5ldyBQYXJhbWV0ZXJJbmZvSW1wbFswXSksCisgICAgICAgICAgIG5ldyBHZW5FeGNlcHRpb25zKCkgeworICAgICAgICAgICAgIEBPdmVycmlkZQorICAgICAgICAgICAgIHB1YmxpYyBUaHJvd25FeGNlcHRpb25JbmZvW10gZ2VuRXhjZXB0aW9ucyhQc2lNZXRob2QgbWV0aG9kKSB7CisgICAgICAgICAgICAgICByZXR1cm4gbmV3IFRocm93bkV4Y2VwdGlvbkluZm9bXSB7CisgICAgICAgICAgICAgICAgIG5ldyBKYXZhVGhyb3duRXhjZXB0aW9uSW5mbygtMSwgSmF2YVBzaUZhY2FkZS5nZXRJbnN0YW5jZShtZXRob2QuZ2V0UHJvamVjdCgpKS5nZXRFbGVtZW50RmFjdG9yeSgpLmNyZWF0ZVR5cGVCeUZRQ2xhc3NOYW1lKCJqYXZhLmxhbmcuUnVudGltZUV4Y2VwdGlvbiIsIG1ldGhvZC5nZXRSZXNvbHZlU2NvcGUoKSkpCisgICAgICAgICAgICAgICB9OworICAgICAgICAgICAgIH0KKyAgICAgICAgICAgfSwKKyAgICAgICAgICAgZmFsc2UpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEFkZEV4Y2VwdGlvbigpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdChudWxsLCBudWxsLCBudWxsLCBuZXcgU2ltcGxlUGFyYW1ldGVyR2VuKG5ldyBQYXJhbWV0ZXJJbmZvSW1wbFswXSksCisgICAgICAgICAgIG5ldyBHZW5FeGNlcHRpb25zKCkgeworICAgICAgICAgICAgIEBPdmVycmlkZQorICAgICAgICAgICAgIHB1YmxpYyBUaHJvd25FeGNlcHRpb25JbmZvW10gZ2VuRXhjZXB0aW9ucyhQc2lNZXRob2QgbWV0aG9kKSB7CisgICAgICAgICAgICAgICByZXR1cm4gbmV3IFRocm93bkV4Y2VwdGlvbkluZm9bXSB7CisgICAgICAgICAgICAgICAgIG5ldyBKYXZhVGhyb3duRXhjZXB0aW9uSW5mbygtMSwgSmF2YVBzaUZhY2FkZS5nZXRJbnN0YW5jZShtZXRob2QuZ2V0UHJvamVjdCgpKS5nZXRFbGVtZW50RmFjdG9yeSgpLmNyZWF0ZVR5cGVCeUZRQ2xhc3NOYW1lKCJqYXZhLmxhbmcuRXhjZXB0aW9uIiwgbWV0aG9kLmdldFJlc29sdmVTY29wZSgpKSkKKyAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICAgfQorICAgICAgICAgICB9LAorICAgICAgICAgICBmYWxzZSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0UmVvcmRlcldpdGhWYXJhcmdzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7ICAvLyBJREVBREVWLTI2OTc3CisgICAgZmluYWwgUHNpRWxlbWVudEZhY3RvcnkgZmFjdG9yeSA9IEphdmFQc2lGYWNhZGUuZ2V0SW5zdGFuY2UoZ2V0UHJvamVjdCgpKS5nZXRFbGVtZW50RmFjdG9yeSgpOworICAgIGRvVGVzdChudWxsLCBuZXcgUGFyYW1ldGVySW5mb0ltcGxbXSB7CisgICAgICAgIG5ldyBQYXJhbWV0ZXJJbmZvSW1wbCgxKSwKKyAgICAgICAgbmV3IFBhcmFtZXRlckluZm9JbXBsKDAsICJzIiwgZmFjdG9yeS5jcmVhdGVUeXBlRnJvbVRleHQoImphdmEubGFuZy5TdHJpbmcuLi4iLCBnZXRGaWxlKCkpKQorICAgIH0sIGZhbHNlKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RJbnRyb2R1Y2VQYXJhbWV0ZXJXaXRoRGVmYXVsdFZhbHVlSW5IaWVyYXJjaHkoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QobnVsbCwgbmV3IFBhcmFtZXRlckluZm9JbXBsW117bmV3IFBhcmFtZXRlckluZm9JbXBsKC0xLCAiaSIsIFBzaVR5cGUuSU5ULCAiMCIpfSwgZmFsc2UpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFJlb3JkZXJNdWx0aWxpbmVNZXRob2RQYXJhbWV0ZXJzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgLy8gSW5zcGlyZWQgYnkgSURFQS01NDkwMgorICAgIGRvVGVzdChudWxsLCBuZXcgUGFyYW1ldGVySW5mb0ltcGxbXSB7bmV3IFBhcmFtZXRlckluZm9JbXBsKDEpLCBuZXcgUGFyYW1ldGVySW5mb0ltcGwoMCl9LCBmYWxzZSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0UmVtb3ZlRmlyc3RQYXJhbWV0ZXIoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QobnVsbCwgbmV3IFBhcmFtZXRlckluZm9JbXBsW117bmV3IFBhcmFtZXRlckluZm9JbXBsKDEpfSwgZmFsc2UpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFJlcGxhY2VWYXJhcmdXaXRoQXJyYXkoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QobnVsbCwgbnVsbCwgbnVsbCwgbmV3IEdlblBhcmFtcygpIHsKKyAgICAgIEBPdmVycmlkZQorICAgICAgcHVibGljIFBhcmFtZXRlckluZm9JbXBsW10gZ2VuUGFyYW1zKFBzaU1ldGhvZCBtZXRob2QpIHRocm93cyBJbmNvcnJlY3RPcGVyYXRpb25FeGNlcHRpb24geworICAgICAgICBmaW5hbCBQc2lFbGVtZW50RmFjdG9yeSBmYWN0b3J5ID0gSmF2YVBzaUZhY2FkZS5nZXRJbnN0YW5jZShtZXRob2QuZ2V0UHJvamVjdCgpKS5nZXRFbGVtZW50RmFjdG9yeSgpOworICAgICAgICByZXR1cm4gbmV3IFBhcmFtZXRlckluZm9JbXBsW10geworICAgICAgICAgIG5ldyBQYXJhbWV0ZXJJbmZvSW1wbCgxLCAibCIsIGZhY3RvcnkuY3JlYXRlVHlwZUZyb21UZXh0KCJMaXN0PFQ+W10iLCBtZXRob2QuZ2V0UGFyYW1ldGVyTGlzdCgpKSwgIm51bGwiLCBmYWxzZSksCisgICAgICAgICAgbmV3IFBhcmFtZXRlckluZm9JbXBsKDAsICJzIiwgZmFjdG9yeS5jcmVhdGVUeXBlRnJvbVRleHQoIlN0cmluZyIsIG1ldGhvZC5nZXRQYXJhbWV0ZXJMaXN0KCkpKQorICAgICAgICB9OworICAgICAgfQorICAgIH0sIGZhbHNlKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RNZXRob2RQYXJhbWV0ZXJzQWxpZ25tZW50QWZ0ZXJNZXRob2ROYW1lQ2hhbmdlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZ2V0Q3VycmVudENvZGVTdHlsZVNldHRpbmdzKCkuQUxJR05fTVVMVElMSU5FX1BBUkFNRVRFUlMgPSB0cnVlOworICAgIGdldEN1cnJlbnRDb2RlU3R5bGVTZXR0aW5ncygpLkFMSUdOX01VTFRJTElORV9QQVJBTUVURVJTX0lOX0NBTExTID0gdHJ1ZTsKKyAgICBkb1Rlc3QobnVsbCwgInRlc3QxMjNhc2QiLCBudWxsLCBuZXcgU2ltcGxlUGFyYW1ldGVyR2VuKCksIG5ldyBTaW1wbGVFeGNlcHRpb25zR2VuKCksIGZhbHNlKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RNZXRob2RQYXJhbWV0ZXJzQWxpZ25tZW50QWZ0ZXJNZXRob2RWaXNpYmlsaXR5Q2hhbmdlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZ2V0Q3VycmVudENvZGVTdHlsZVNldHRpbmdzKCkuQUxJR05fTVVMVElMSU5FX1BBUkFNRVRFUlMgPSB0cnVlOworICAgIGdldEN1cnJlbnRDb2RlU3R5bGVTZXR0aW5ncygpLkFMSUdOX01VTFRJTElORV9QQVJBTUVURVJTX0lOX0NBTExTID0gdHJ1ZTsKKyAgICBkb1Rlc3QoUHNpTW9kaWZpZXIuUFJPVEVDVEVELCBudWxsLCBudWxsLCBuZXcgU2ltcGxlUGFyYW1ldGVyR2VuKCksIG5ldyBTaW1wbGVFeGNlcHRpb25zR2VuKCksIGZhbHNlKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RNZXRob2RQYXJhbWV0ZXJzQWxpZ25tZW50QWZ0ZXJNZXRob2RSZXR1cm5UeXBlQ2hhbmdlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZ2V0Q3VycmVudENvZGVTdHlsZVNldHRpbmdzKCkuQUxJR05fTVVMVElMSU5FX1BBUkFNRVRFUlMgPSB0cnVlOworICAgIGdldEN1cnJlbnRDb2RlU3R5bGVTZXR0aW5ncygpLkFMSUdOX01VTFRJTElORV9QQVJBTUVURVJTX0lOX0NBTExTID0gdHJ1ZTsKKyAgICBkb1Rlc3QobnVsbCwgbnVsbCwgIkV4Y2VwdGlvbiIsIG5ldyBTaW1wbGVQYXJhbWV0ZXJHZW4oKSwgbmV3IFNpbXBsZUV4Y2VwdGlvbnNHZW4oKSwgZmFsc2UpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFJlbW92ZUV4Y2VwdGlvbnMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QobnVsbCwgbnVsbCwgInZvaWQiLCBuZXcgU2ltcGxlUGFyYW1ldGVyR2VuKCksIG5ldyBTaW1wbGVFeGNlcHRpb25zR2VuKCksIGZhbHNlKTsKKyAgfQorCisgIHByaXZhdGUgdm9pZCBkb1Rlc3QoQE51bGxhYmxlIFN0cmluZyBuZXdSZXR1cm5UeXBlLAorICAgICAgICAgICAgICAgICAgICAgIFBhcmFtZXRlckluZm9JbXBsW10gcGFyYW1ldGVySW5mb3MsCisgICAgICAgICAgICAgICAgICAgICAgZmluYWwgYm9vbGVhbiBnZW5lcmF0ZURlbGVnYXRlKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QobnVsbCwgbnVsbCwgbmV3UmV0dXJuVHlwZSwgcGFyYW1ldGVySW5mb3MsIG5ldyBUaHJvd25FeGNlcHRpb25JbmZvWzBdLCBnZW5lcmF0ZURlbGVnYXRlKTsKKyAgfQorCisgIHByaXZhdGUgdm9pZCBkb1Rlc3QoQFBzaU1vZGlmaWVyLk1vZGlmaWVyQ29uc3RhbnQgQE51bGxhYmxlIFN0cmluZyBuZXdWaXNpYmlsaXR5LAorICAgICAgICAgICAgICAgICAgICAgIEBOdWxsYWJsZSBTdHJpbmcgbmV3TmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICBATnVsbGFibGUgU3RyaW5nIG5ld1JldHVyblR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgUGFyYW1ldGVySW5mb0ltcGxbXSBwYXJhbWV0ZXJJbmZvLAorICAgICAgICAgICAgICAgICAgICAgIFRocm93bkV4Y2VwdGlvbkluZm9bXSBleGNlcHRpb25JbmZvLAorICAgICAgICAgICAgICAgICAgICAgIGZpbmFsIGJvb2xlYW4gZ2VuZXJhdGVEZWxlZ2F0ZSkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KG5ld1Zpc2liaWxpdHksIG5ld05hbWUsIG5ld1JldHVyblR5cGUsIG5ldyBTaW1wbGVQYXJhbWV0ZXJHZW4ocGFyYW1ldGVySW5mbyksIG5ldyBTaW1wbGVFeGNlcHRpb25zR2VuKGV4Y2VwdGlvbkluZm8pLCBnZW5lcmF0ZURlbGVnYXRlKTsKKyAgfQorCisgIHByaXZhdGUgdm9pZCBkb1Rlc3QoQFBzaU1vZGlmaWVyLk1vZGlmaWVyQ29uc3RhbnQgQE51bGxhYmxlIFN0cmluZyBuZXdWaXNpYmlsaXR5LAorICAgICAgICAgICAgICAgICAgICAgIEBOdWxsYWJsZSBTdHJpbmcgbmV3TmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICBATnVsbGFibGUgQE5vbk5scyBTdHJpbmcgbmV3UmV0dXJuVHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICBHZW5QYXJhbXMgZ2VuLCBmaW5hbCBib29sZWFuIGdlbmVyYXRlRGVsZWdhdGUpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdChuZXdWaXNpYmlsaXR5LCBuZXdOYW1lLCBuZXdSZXR1cm5UeXBlLCBnZW4sIG5ldyBTaW1wbGVFeGNlcHRpb25zR2VuKCksIGdlbmVyYXRlRGVsZWdhdGUpOworICB9CisKKyAgcHJpdmF0ZSB2b2lkIGRvVGVzdChAUHNpTW9kaWZpZXIuTW9kaWZpZXJDb25zdGFudCBATnVsbGFibGUgU3RyaW5nIG5ld1Zpc2liaWxpdHksCisgICAgICAgICAgICAgICAgICAgICAgQE51bGxhYmxlIFN0cmluZyBuZXdOYW1lLAorICAgICAgICAgICAgICAgICAgICAgIEBOdWxsYWJsZSBTdHJpbmcgbmV3UmV0dXJuVHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICBHZW5QYXJhbXMgZ2VuUGFyYW1zLAorICAgICAgICAgICAgICAgICAgICAgIEdlbkV4Y2VwdGlvbnMgZ2VuRXhjZXB0aW9ucywKKyAgICAgICAgICAgICAgICAgICAgICBmaW5hbCBib29sZWFuIGdlbmVyYXRlRGVsZWdhdGUpIHRocm93cyBFeGNlcHRpb24geworICAgIFN0cmluZyBiYXNlUGF0aCA9ICIvcmVmYWN0b3JpbmcvY2hhbmdlU2lnbmF0dXJlLyIgKyBnZXRUZXN0TmFtZShmYWxzZSk7CisgICAgQE5vbk5scyBmaW5hbCBTdHJpbmcgZmlsZVBhdGggPSBiYXNlUGF0aCArICIuamF2YSI7CisgICAgY29uZmlndXJlQnlGaWxlKGZpbGVQYXRoKTsKKyAgICBmaW5hbCBQc2lFbGVtZW50IHRhcmdldEVsZW1lbnQgPSBUYXJnZXRFbGVtZW50VXRpbEJhc2UuZmluZFRhcmdldEVsZW1lbnQoZ2V0RWRpdG9yKCksIFRhcmdldEVsZW1lbnRVdGlsQmFzZS5FTEVNRU5UX05BTUVfQUNDRVBURUQpOworICAgIGFzc2VydFRydWUoIjxjYXJldD4gaXMgbm90IG9uIG1ldGhvZCBuYW1lIiwgdGFyZ2V0RWxlbWVudCBpbnN0YW5jZW9mIFBzaU1ldGhvZCk7CisgICAgUHNpTWV0aG9kIG1ldGhvZCA9IChQc2lNZXRob2QpIHRhcmdldEVsZW1lbnQ7CisgICAgZmluYWwgUHNpRWxlbWVudEZhY3RvcnkgZmFjdG9yeSA9IEphdmFQc2lGYWNhZGUuZ2V0SW5zdGFuY2UoZ2V0UHJvamVjdCgpKS5nZXRFbGVtZW50RmFjdG9yeSgpOworICAgIFBzaVR5cGUgbmV3VHlwZSA9IG5ld1JldHVyblR5cGUgIT0gbnVsbCA/IGZhY3RvcnkuY3JlYXRlVHlwZUZyb21UZXh0KG5ld1JldHVyblR5cGUsIG1ldGhvZCkgOiBtZXRob2QuZ2V0UmV0dXJuVHlwZSgpOworICAgIG5ldyBDaGFuZ2VTaWduYXR1cmVQcm9jZXNzb3IoZ2V0UHJvamVjdCgpLCBtZXRob2QsIGdlbmVyYXRlRGVsZWdhdGUsIG5ld1Zpc2liaWxpdHksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdOYW1lICE9IG51bGwgPyBuZXdOYW1lIDogbWV0aG9kLmdldE5hbWUoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld1R5cGUsIGdlblBhcmFtcy5nZW5QYXJhbXMobWV0aG9kKSwgZ2VuRXhjZXB0aW9ucy5nZW5FeGNlcHRpb25zKG1ldGhvZCkpLnJ1bigpOworICAgIEBOb25ObHMgU3RyaW5nIGFmdGVyID0gYmFzZVBhdGggKyAiX2FmdGVyLmphdmEiOworICAgIGNoZWNrUmVzdWx0QnlGaWxlKGFmdGVyKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RQcm9wYWdhdGVQYXJhbWV0ZXIoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBTdHJpbmcgYmFzZVBhdGggPSAiL3JlZmFjdG9yaW5nL2NoYW5nZVNpZ25hdHVyZS8iICsgZ2V0VGVzdE5hbWUoZmFsc2UpOworICAgIEBOb25ObHMgZmluYWwgU3RyaW5nIGZpbGVQYXRoID0gYmFzZVBhdGggKyAiLmphdmEiOworICAgIGNvbmZpZ3VyZUJ5RmlsZShmaWxlUGF0aCk7CisgICAgZmluYWwgUHNpRWxlbWVudCB0YXJnZXRFbGVtZW50ID0gVGFyZ2V0RWxlbWVudFV0aWxCYXNlLmZpbmRUYXJnZXRFbGVtZW50KGdldEVkaXRvcigpLCBUYXJnZXRFbGVtZW50VXRpbEJhc2UuRUxFTUVOVF9OQU1FX0FDQ0VQVEVEKTsKKyAgICBhc3NlcnRUcnVlKCI8Y2FyZXQ+IGlzIG5vdCBvbiBtZXRob2QgbmFtZSIsIHRhcmdldEVsZW1lbnQgaW5zdGFuY2VvZiBQc2lNZXRob2QpOworICAgIFBzaU1ldGhvZCBtZXRob2QgPSAoUHNpTWV0aG9kKSB0YXJnZXRFbGVtZW50OworICAgIGZpbmFsIFBzaUNsYXNzIGNvbnRhaW5pbmdDbGFzcyA9IG1ldGhvZC5nZXRDb250YWluaW5nQ2xhc3MoKTsKKyAgICBhc3NlcnRUcnVlKGNvbnRhaW5pbmdDbGFzcyAhPSBudWxsKTsKKyAgICBmaW5hbCBQc2lNZXRob2RbXSBjYWxsZXJzID0gY29udGFpbmluZ0NsYXNzLmZpbmRNZXRob2RzQnlOYW1lKCJjYWxsZXIiLCBmYWxzZSk7CisgICAgYXNzZXJ0VHJ1ZShjYWxsZXJzLmxlbmd0aCA+IDApOworICAgIGZpbmFsIFBzaU1ldGhvZCBjYWxsZXIgPSBjYWxsZXJzWzBdOworICAgIGZpbmFsIEhhc2hTZXQ8UHNpTWV0aG9kPiBwcm9wYWdhdGVQYXJhbWV0ZXJzTWV0aG9kcyA9IG5ldyBIYXNoU2V0PFBzaU1ldGhvZD4oKTsKKyAgICBwcm9wYWdhdGVQYXJhbWV0ZXJzTWV0aG9kcy5hZGQoY2FsbGVyKTsKKyAgICBmaW5hbCBQc2lQYXJhbWV0ZXJbXSBwYXJhbWV0ZXJzID0gbWV0aG9kLmdldFBhcmFtZXRlckxpc3QoKS5nZXRQYXJhbWV0ZXJzKCk7CisgICAgbmV3IENoYW5nZVNpZ25hdHVyZVByb2Nlc3NvcihnZXRQcm9qZWN0KCksIG1ldGhvZCwgZmFsc2UsIG51bGwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXRob2QuZ2V0TmFtZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2Fub25pY2FsVHlwZXMuY3JlYXRlVHlwZVdyYXBwZXIoUHNpVHlwZS5WT0lEKSwgbmV3IFBhcmFtZXRlckluZm9JbXBsW117CisgICAgICAgIG5ldyBQYXJhbWV0ZXJJbmZvSW1wbCgwLCBwYXJhbWV0ZXJzWzBdLmdldE5hbWUoKSwgcGFyYW1ldGVyc1swXS5nZXRUeXBlKCkpLAorICAgICAgICBuZXcgUGFyYW1ldGVySW5mb0ltcGwoLTEsICJiIiwgUHNpVHlwZS5CT09MRUFOLCAidHJ1ZSIpfSwgbnVsbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BhZ2F0ZVBhcmFtZXRlcnNNZXRob2RzLCBudWxsKS5ydW4oKTsKKyAgICBATm9uTmxzIFN0cmluZyBhZnRlciA9IGJhc2VQYXRoICsgIl9hZnRlci5qYXZhIjsKKyAgICBjaGVja1Jlc3VsdEJ5RmlsZShhZnRlcik7CisgIH0KKworICBwcml2YXRlIGludGVyZmFjZSBHZW5QYXJhbXMgeworICAgIFBhcmFtZXRlckluZm9JbXBsW10gZ2VuUGFyYW1zKFBzaU1ldGhvZCBtZXRob2QpIHRocm93cyBJbmNvcnJlY3RPcGVyYXRpb25FeGNlcHRpb247CisgIH0KKworICBwcml2YXRlIHN0YXRpYyBjbGFzcyBTaW1wbGVQYXJhbWV0ZXJHZW4gaW1wbGVtZW50cyBHZW5QYXJhbXMgeworICAgIHByaXZhdGUgUGFyYW1ldGVySW5mb0ltcGxbXSBteUluZm9zOworCisgICAgcHJpdmF0ZSBTaW1wbGVQYXJhbWV0ZXJHZW4oKSB7CisgICAgfQorCisgICAgcHJpdmF0ZSBTaW1wbGVQYXJhbWV0ZXJHZW4oUGFyYW1ldGVySW5mb0ltcGxbXSBpbmZvcykgeworICAgICAgbXlJbmZvcyA9IGluZm9zOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyBQYXJhbWV0ZXJJbmZvSW1wbFtdIGdlblBhcmFtcyhQc2lNZXRob2QgbWV0aG9kKSB7CisgICAgICBpZiAobXlJbmZvcyA9PSBudWxsKSB7CisgICAgICAgIG15SW5mb3MgPSBuZXcgUGFyYW1ldGVySW5mb0ltcGxbbWV0aG9kLmdldFBhcmFtZXRlckxpc3QoKS5nZXRQYXJhbWV0ZXJzQ291bnQoKV07CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbXlJbmZvcy5sZW5ndGg7IGkrKykgeworICAgICAgICAgIG15SW5mb3NbaV0gPSBuZXcgUGFyYW1ldGVySW5mb0ltcGwoaSk7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICAgIGZvciAoUGFyYW1ldGVySW5mb0ltcGwgaW5mbyA6IG15SW5mb3MpIHsKKyAgICAgICAgaW5mby51cGRhdGVGcm9tTWV0aG9kKG1ldGhvZCk7CisgICAgICB9CisgICAgICByZXR1cm4gbXlJbmZvczsKKyAgICB9CisgIH0KKworICBwcml2YXRlIGludGVyZmFjZSBHZW5FeGNlcHRpb25zIHsKKyAgICBUaHJvd25FeGNlcHRpb25JbmZvW10gZ2VuRXhjZXB0aW9ucyhQc2lNZXRob2QgbWV0aG9kKSB0aHJvd3MgSW5jb3JyZWN0T3BlcmF0aW9uRXhjZXB0aW9uOworICB9CisKKyAgcHJpdmF0ZSBzdGF0aWMgY2xhc3MgU2ltcGxlRXhjZXB0aW9uc0dlbiBpbXBsZW1lbnRzIEdlbkV4Y2VwdGlvbnMgeworICAgIHByaXZhdGUgZmluYWwgVGhyb3duRXhjZXB0aW9uSW5mb1tdIG15SW5mb3M7CisKKyAgICBwdWJsaWMgU2ltcGxlRXhjZXB0aW9uc0dlbigpIHsKKyAgICAgIG15SW5mb3MgPSBuZXcgVGhyb3duRXhjZXB0aW9uSW5mb1swXTsKKyAgICB9CisKKyAgICBwcml2YXRlIFNpbXBsZUV4Y2VwdGlvbnNHZW4oVGhyb3duRXhjZXB0aW9uSW5mb1tdIGluZm9zKSB7CisgICAgICBteUluZm9zID0gaW5mb3M7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIFRocm93bkV4Y2VwdGlvbkluZm9bXSBnZW5FeGNlcHRpb25zKFBzaU1ldGhvZCBtZXRob2QpIHsKKyAgICAgIGZvciAoVGhyb3duRXhjZXB0aW9uSW5mbyBpbmZvIDogbXlJbmZvcykgeworICAgICAgICBpbmZvLnVwZGF0ZUZyb21NZXRob2QobWV0aG9kKTsKKyAgICAgIH0KKyAgICAgIHJldHVybiBteUluZm9zOworICAgIH0KKyAgfQorCisgIEBOb3ROdWxsCisgIEBPdmVycmlkZQorICBwcm90ZWN0ZWQgU3RyaW5nIGdldFRlc3REYXRhUGF0aCgpIHsKKyAgICByZXR1cm4gSmF2YVRlc3RVdGlsLmdldEphdmFUZXN0RGF0YVBhdGgoKTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL3JlZmFjdG9yaW5nL0NvcHlDbGFzc1Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9yZWZhY3RvcmluZy9Db3B5Q2xhc3NUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGM2MTllOAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9yZWZhY3RvcmluZy9Db3B5Q2xhc3NUZXN0LmphdmEKQEAgLTAsMCArMSwxMzEgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwMC0yMDEyIEpldEJyYWlucyBzLnIuby4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCitwYWNrYWdlIGNvbS5pbnRlbGxpai5yZWZhY3RvcmluZzsKKworaW1wb3J0IGNvbS5pbnRlbGxpai5KYXZhVGVzdFV0aWw7CitpbXBvcnQgY29tLmludGVsbGlqLmNvZGVJbnNpZ2h0LkNvZGVJbnNpZ2h0VGVzdENhc2U7CitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkuZmlsZUVkaXRvci5GaWxlRG9jdW1lbnRNYW5hZ2VyOworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLnByb2plY3RSb290cy5pbXBsLkphdmFTZGtJbXBsOworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLnZmcy5Mb2NhbEZpbGVTeXN0ZW07CitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkudmZzLlZpcnR1YWxGaWxlOworaW1wb3J0IGNvbS5pbnRlbGxpai5wc2kuKjsKK2ltcG9ydCBjb20uaW50ZWxsaWoucHNpLmltcGwuc291cmNlLlBvc3Rwcm9jZXNzUmVmb3JtYXR0aW5nQXNwZWN0OworaW1wb3J0IGNvbS5pbnRlbGxpai5wc2kuc2VhcmNoLlByb2plY3RTY29wZTsKK2ltcG9ydCBjb20uaW50ZWxsaWoucmVmYWN0b3JpbmcuY29weS5Db3B5Q2xhc3Nlc0hhbmRsZXI7CitpbXBvcnQgY29tLmludGVsbGlqLnRlc3RGcmFtZXdvcmsuSWRlYVRlc3RVdGlsOworaW1wb3J0IGNvbS5pbnRlbGxpai50ZXN0RnJhbWV3b3JrLlBsYXRmb3JtVGVzdFV0aWw7CitpbXBvcnQgY29tLmludGVsbGlqLnRlc3RGcmFtZXdvcmsuUHNpVGVzdFV0aWw7CitpbXBvcnQgY29tLmludGVsbGlqLnV0aWwuSW5jb3JyZWN0T3BlcmF0aW9uRXhjZXB0aW9uOworCitpbXBvcnQgamF2YS5pby5GaWxlOworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uczsKK2ltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKKworLyoqCisgKiBAYXV0aG9yIHlvbGUKKyAqLworcHVibGljIGNsYXNzIENvcHlDbGFzc1Rlc3QgZXh0ZW5kcyBDb2RlSW5zaWdodFRlc3RDYXNlIHsKKyAgcHJpdmF0ZSBWaXJ0dWFsRmlsZSBteVJvb3REaXI7CisKKyAgcHVibGljIHZvaWQgdGVzdFJlcGxhY2VBbGxPY2N1cnJlbmNlcygpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdCgiRm9vIiwgIkJhciIpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdExpYnJhcnlDbGFzcygpIHRocm93cyBFeGNlcHRpb24geyAgLy8gSURFQURFVi0yODc5MQorICAgIGRvVGVzdCgiamF2YS51dGlsLkFycmF5TGlzdCIsICJCYXIiKTsKKyAgfQorCisgIHByaXZhdGUgdm9pZCBkb1Rlc3QoZmluYWwgU3RyaW5nIG9sZE5hbWUsIGZpbmFsIFN0cmluZyBjb3B5TmFtZSkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgU3RyaW5nIHJvb3QgPSBKYXZhVGVzdFV0aWwuZ2V0SmF2YVRlc3REYXRhUGF0aCgpICsgIi9yZWZhY3RvcmluZy9jb3B5Q2xhc3MvIiArIGdldFRlc3ROYW1lKHRydWUpOworCisgICAgUHNpVGVzdFV0aWwucmVtb3ZlQWxsUm9vdHMobXlNb2R1bGUsIElkZWFUZXN0VXRpbC5nZXRNb2NrSmRrMTcoImphdmEgMS41IikpOworICAgIG15Um9vdERpciA9IFBzaVRlc3RVdGlsLmNyZWF0ZVRlc3RQcm9qZWN0U3RydWN0dXJlKG15UHJvamVjdCwgbXlNb2R1bGUsIHJvb3QsIG15RmlsZXNUb0RlbGV0ZSk7CisKKyAgICBQc2lFbGVtZW50IGVsZW1lbnQgPSBwZXJmb3JtQWN0aW9uKG9sZE5hbWUsIGNvcHlOYW1lKTsKKworICAgIG15UHJvamVjdC5nZXRDb21wb25lbnQoUG9zdHByb2Nlc3NSZWZvcm1hdHRpbmdBc3BlY3QuY2xhc3MpLmRvUG9zdHBvbmVkRm9ybWF0dGluZygpOworICAgIEZpbGVEb2N1bWVudE1hbmFnZXIuZ2V0SW5zdGFuY2UoKS5zYXZlQWxsRG9jdW1lbnRzKCk7CisKKyAgICBWaXJ0dWFsRmlsZSBmaWxlQWZ0ZXIgPSBteVJvb3REaXIuZmluZENoaWxkKGNvcHlOYW1lICsgIi5qYXZhIik7CisgICAgVmlydHVhbEZpbGUgZmlsZUV4cGVjdGVkID0gbXlSb290RGlyLmZpbmRDaGlsZChjb3B5TmFtZSArICIuZXhwZWN0ZWQuamF2YSIpOworCisgICAgUGxhdGZvcm1UZXN0VXRpbC5hc3NlcnRGaWxlc0VxdWFsKGZpbGVFeHBlY3RlZCwgZmlsZUFmdGVyKTsKKyAgfQorCisgIHByaXZhdGUgUHNpRWxlbWVudCBwZXJmb3JtQWN0aW9uKGZpbmFsIFN0cmluZyBvbGROYW1lLCBmaW5hbCBTdHJpbmcgY29weU5hbWUpIHRocm93cyBJbmNvcnJlY3RPcGVyYXRpb25FeGNlcHRpb24geworICAgIFBzaUNsYXNzIG9sZENsYXNzID0gSmF2YVBzaUZhY2FkZS5nZXRJbnN0YW5jZShteVByb2plY3QpLmZpbmRDbGFzcyhvbGROYW1lLCBQcm9qZWN0U2NvcGUuZ2V0QWxsU2NvcGUobXlQcm9qZWN0KSk7CisgICAgcmV0dXJuIENvcHlDbGFzc2VzSGFuZGxlci5kb0NvcHlDbGFzc2VzKENvbGxlY3Rpb25zLnNpbmdsZXRvbk1hcChvbGRDbGFzcy5nZXROYXZpZ2F0aW9uRWxlbWVudCgpLmdldENvbnRhaW5pbmdGaWxlKCksIG5ldyBQc2lDbGFzc1tde29sZENsYXNzfSksIGNvcHlOYW1lLCBteVBzaU1hbmFnZXIuZmluZERpcmVjdG9yeShteVJvb3REaXIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG15UHJvamVjdCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0UGFja2FnZUxvY2FsQ2xhc3NlcygpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvTXVsdGlmaWxlVGVzdCgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFBhY2thZ2VMb2NhbE1ldGhvZHMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb011bHRpZmlsZVRlc3QoKTsKKyAgfQorCisgIC8vY29weSBhbGwgY2xhc3NlcyBmcm9tIHAxIC0+IHAyCisgIHByaXZhdGUgdm9pZCBkb011bHRpZmlsZVRlc3QoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBTdHJpbmcgcm9vdCA9IEphdmFUZXN0VXRpbC5nZXRKYXZhVGVzdERhdGFQYXRoKCkgKyAiL3JlZmFjdG9yaW5nL2NvcHlDbGFzcy9tdWx0aWZpbGUvIiArIGdldFRlc3ROYW1lKHRydWUpOworICAgIFN0cmluZyByb290QmVmb3JlID0gcm9vdCArICIvYmVmb3JlIjsKKyAgICBQc2lUZXN0VXRpbC5yZW1vdmVBbGxSb290cyhteU1vZHVsZSwgSWRlYVRlc3RVdGlsLmdldE1vY2tKZGsxNygpKTsKKyAgICBWaXJ0dWFsRmlsZSByb290RGlyID0gUHNpVGVzdFV0aWwuY3JlYXRlVGVzdFByb2plY3RTdHJ1Y3R1cmUobXlQcm9qZWN0LCBteU1vZHVsZSwgcm9vdEJlZm9yZSwgbXlGaWxlc1RvRGVsZXRlKTsKKworICAgIGZpbmFsIEhhc2hNYXA8UHNpRmlsZSwgUHNpQ2xhc3NbXT4gbWFwID0gbmV3IEhhc2hNYXA8UHNpRmlsZSwgUHNpQ2xhc3NbXT4oKTsKKyAgICBmaW5hbCBWaXJ0dWFsRmlsZSBzb3VyY2VEaXIgPSByb290RGlyLmZpbmRDaGlsZCgicDEiKTsKKyAgICBmb3IgKFZpcnR1YWxGaWxlIGZpbGUgOiBzb3VyY2VEaXIuZ2V0Q2hpbGRyZW4oKSkgeworICAgICAgZmluYWwgUHNpRmlsZSBwc2lGaWxlID0gbXlQc2lNYW5hZ2VyLmZpbmRGaWxlKGZpbGUpOworICAgICAgaWYgKHBzaUZpbGUgaW5zdGFuY2VvZiBQc2lKYXZhRmlsZSkgeworICAgICAgICBtYXAucHV0KHBzaUZpbGUsICgoUHNpSmF2YUZpbGUpcHNpRmlsZSkuZ2V0Q2xhc3NlcygpKTsKKyAgICAgIH0KKyAgICB9CisKKyAgICBmaW5hbCBWaXJ0dWFsRmlsZSB0YXJnZXRWRGlyID0gcm9vdERpci5maW5kQ2hpbGQoInAyIik7CisgICAgQ29weUNsYXNzZXNIYW5kbGVyLmRvQ29weUNsYXNzZXMobWFwLCBudWxsLCBteVBzaU1hbmFnZXIuZmluZERpcmVjdG9yeSh0YXJnZXRWRGlyKSwgbXlQcm9qZWN0KTsKKworICAgIFN0cmluZyByb290QWZ0ZXIgPSByb290ICsgIi9hZnRlciI7CisgICAgVmlydHVhbEZpbGUgcm9vdERpcjIgPSBMb2NhbEZpbGVTeXN0ZW0uZ2V0SW5zdGFuY2UoKS5maW5kRmlsZUJ5UGF0aChyb290QWZ0ZXIucmVwbGFjZShGaWxlLnNlcGFyYXRvckNoYXIsICcvJykpOworICAgIG15UHJvamVjdC5nZXRDb21wb25lbnQoUG9zdHByb2Nlc3NSZWZvcm1hdHRpbmdBc3BlY3QuY2xhc3MpLmRvUG9zdHBvbmVkRm9ybWF0dGluZygpOworICAgIFBsYXRmb3JtVGVzdFV0aWwuYXNzZXJ0RGlyZWN0b3JpZXNFcXVhbChyb290RGlyMiwgcm9vdERpciwgUGxhdGZvcm1UZXN0VXRpbC5DVlNfRklMRV9GSUxURVIpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFBhY2thZ2VIaWVyYXJjaHkoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1BhY2thZ2VDb3B5KCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0UGFja2FnZU9uZUxldmVsSGllcmFyY2h5KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9QYWNrYWdlQ29weSgpOworICB9CisKKyAgcHJpdmF0ZSB2b2lkIGRvUGFja2FnZUNvcHkoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBTdHJpbmcgcm9vdCA9IEphdmFUZXN0VXRpbC5nZXRKYXZhVGVzdERhdGFQYXRoKCkgKyAiL3JlZmFjdG9yaW5nL2NvcHlDbGFzcy9tdWx0aWZpbGUvIiArIGdldFRlc3ROYW1lKHRydWUpOworICAgIFN0cmluZyByb290QmVmb3JlID0gcm9vdCArICIvYmVmb3JlIjsKKyAgICBQc2lUZXN0VXRpbC5yZW1vdmVBbGxSb290cyhteU1vZHVsZSwgSWRlYVRlc3RVdGlsLmdldE1vY2tKZGsxNygpKTsKKyAgICBWaXJ0dWFsRmlsZSByb290RGlyID0gUHNpVGVzdFV0aWwuY3JlYXRlVGVzdFByb2plY3RTdHJ1Y3R1cmUobXlQcm9qZWN0LCBteU1vZHVsZSwgcm9vdEJlZm9yZSwgbXlGaWxlc1RvRGVsZXRlKTsKKworICAgIGZpbmFsIFZpcnR1YWxGaWxlIHRhcmdldFZEaXIgPSByb290RGlyLmZpbmRDaGlsZCgicDIiKTsKKyAgICBmaW5hbCBQc2lEaXJlY3Rvcnkgc291cmNlUDFEaXIgPSBteVBzaU1hbmFnZXIuZmluZERpcmVjdG9yeShyb290RGlyLmZpbmRDaGlsZCgicDEiKSk7CisgICAgZmluYWwgUHNpRGlyZWN0b3J5IHRhcmdldFAyRGlyID0gbXlQc2lNYW5hZ2VyLmZpbmREaXJlY3RvcnkodGFyZ2V0VkRpcik7CisgICAgbmV3IENvcHlDbGFzc2VzSGFuZGxlcigpLmRvQ29weShuZXcgUHNpRWxlbWVudFtde3NvdXJjZVAxRGlyfSwgdGFyZ2V0UDJEaXIpOworCisgICAgU3RyaW5nIHJvb3RBZnRlciA9IHJvb3QgKyAiL2FmdGVyIjsKKyAgICBWaXJ0dWFsRmlsZSByb290RGlyMiA9IExvY2FsRmlsZVN5c3RlbS5nZXRJbnN0YW5jZSgpLmZpbmRGaWxlQnlQYXRoKHJvb3RBZnRlci5yZXBsYWNlKEZpbGUuc2VwYXJhdG9yQ2hhciwgJy8nKSk7CisgICAgbXlQcm9qZWN0LmdldENvbXBvbmVudChQb3N0cHJvY2Vzc1JlZm9ybWF0dGluZ0FzcGVjdC5jbGFzcykuZG9Qb3N0cG9uZWRGb3JtYXR0aW5nKCk7CisgICAgUGxhdGZvcm1UZXN0VXRpbC5hc3NlcnREaXJlY3Rvcmllc0VxdWFsKHJvb3REaXIyLCByb290RGlyLCBQbGF0Zm9ybVRlc3RVdGlsLkNWU19GSUxFX0ZJTFRFUik7CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9yZWZhY3RvcmluZy9Db3B5VGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL3JlZmFjdG9yaW5nL0NvcHlUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDJkZWI1NQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9yZWZhY3RvcmluZy9Db3B5VGVzdC5qYXZhCkBAIC0wLDAgKzEsMTIzIEBACisvKgorICogQ29weXJpZ2h0IDIwMDAtMjAxMiBKZXRCcmFpbnMgcy5yLm8uCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworcGFja2FnZSBjb20uaW50ZWxsaWoucmVmYWN0b3Jpbmc7CisKK2ltcG9ydCBjb20uaW50ZWxsaWouSmF2YVRlc3RVdGlsOworaW1wb3J0IGNvbS5pbnRlbGxpai5jb2RlSW5zaWdodC5Db2RlSW5zaWdodFRlc3RDYXNlOworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLnByb2plY3RSb290cy5pbXBsLkphdmFTZGtJbXBsOworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLnZmcy5WaXJ0dWFsRmlsZTsKK2ltcG9ydCBjb20uaW50ZWxsaWoucHNpLio7CitpbXBvcnQgY29tLmludGVsbGlqLnJlZmFjdG9yaW5nLmNvcHkuQ29weUhhbmRsZXI7CitpbXBvcnQgY29tLmludGVsbGlqLnRlc3RGcmFtZXdvcmsuSWRlYVRlc3RVdGlsOworaW1wb3J0IGNvbS5pbnRlbGxpai50ZXN0RnJhbWV3b3JrLlBsYXRmb3JtVGVzdFV0aWw7CitpbXBvcnQgY29tLmludGVsbGlqLnRlc3RGcmFtZXdvcmsuUHNpVGVzdFV0aWw7CisKK3B1YmxpYyBjbGFzcyBDb3B5VGVzdCBleHRlbmRzIENvZGVJbnNpZ2h0VGVzdENhc2UgeworICAKKyAgcHJpdmF0ZSBTdHJpbmcgZ2V0Um9vdCgpIHsKKyAgICByZXR1cm4gSmF2YVRlc3RVdGlsLmdldEphdmFUZXN0RGF0YVBhdGgoKSArICIvcmVmYWN0b3JpbmcvY29weS9tdWx0aWZpbGUvIiArIGdldFRlc3ROYW1lKHRydWUpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdENvcHlBdmFpbGFibGUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RKYXZhQW5kVHh0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KCk7CisgIH0KKworICBwcml2YXRlIHZvaWQgZG9UZXN0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgU3RyaW5nIHJvb3RCZWZvcmUgPSBnZXRSb290KCk7CisgICAgUHNpVGVzdFV0aWwucmVtb3ZlQWxsUm9vdHMobXlNb2R1bGUsIElkZWFUZXN0VXRpbC5nZXRNb2NrSmRrMTcoKSk7CisgICAgUHNpVGVzdFV0aWwuY3JlYXRlVGVzdFByb2plY3RTdHJ1Y3R1cmUobXlQcm9qZWN0LCBteU1vZHVsZSwgcm9vdEJlZm9yZSwgbXlGaWxlc1RvRGVsZXRlKTsKKyAgICBQc2lQYWNrYWdlIHBhY2sxID0gbXlKYXZhRmFjYWRlLmZpbmRQYWNrYWdlKCJwYWNrMSIpOworICAgIFBzaVBhY2thZ2UgcGFjazIgPSBteUphdmFGYWNhZGUuZmluZFBhY2thZ2UoInBhY2syIik7CisgICAgYXNzZXJ0VHJ1ZShDb3B5SGFuZGxlci5jYW5Db3B5KG5ldyBQc2lFbGVtZW50W117cGFjazEuZ2V0RGlyZWN0b3JpZXMoKVswXSwgcGFjazIuZ2V0RGlyZWN0b3JpZXMoKVswXX0pKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RNdWx0aXBsZUNsYXNzZXMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBTdHJpbmcgcm9vdEJlZm9yZSA9IGdldFJvb3QoKTsKKyAgICBQc2lUZXN0VXRpbC5yZW1vdmVBbGxSb290cyhteU1vZHVsZSwgSWRlYVRlc3RVdGlsLmdldE1vY2tKZGsxNygpKTsKKyAgICBmaW5hbCBWaXJ0dWFsRmlsZSByb290ID0gUHNpVGVzdFV0aWwuY3JlYXRlVGVzdFByb2plY3RTdHJ1Y3R1cmUobXlQcm9qZWN0LCBteU1vZHVsZSwgcm9vdEJlZm9yZSwgbXlGaWxlc1RvRGVsZXRlKTsKKyAgICBmaW5hbCBQc2lDbGFzcyBhQ2xhc3MgPSBteUphdmFGYWNhZGUuZmluZENsYXNzKCJwYWNrMS5LbGFzcyIpOworICAgIGFzc2VydE5vdE51bGwoYUNsYXNzKTsKKworICAgIGZpbmFsIFBzaUZpbGUgY29udGFpbmluZ0ZpbGUgPSBhQ2xhc3MuZ2V0Q29udGFpbmluZ0ZpbGUoKTsKKworICAgIGFzc2VydFRydWUoQ29weUhhbmRsZXIuY2FuQ29weShuZXcgUHNpRWxlbWVudFtde2NvbnRhaW5pbmdGaWxlfSkpOworICAgIGFzc2VydEZhbHNlKENvcHlIYW5kbGVyLmNhbkNsb25lKG5ldyBQc2lFbGVtZW50W117Y29udGFpbmluZ0ZpbGV9KSk7CisKKyAgICBQc2lQYWNrYWdlIHBhY2syID0gbXlKYXZhRmFjYWRlLmZpbmRQYWNrYWdlKCJwYWNrMiIpOworICAgIGZpbmFsIFBzaURpcmVjdG9yeSB0YXJnZXREaXJlY3RvcnkgPSBwYWNrMi5nZXREaXJlY3RvcmllcygpWzBdOworICAgIENvcHlIYW5kbGVyLmRvQ29weShuZXcgUHNpRWxlbWVudFtde2NvbnRhaW5pbmdGaWxlfSwgdGFyZ2V0RGlyZWN0b3J5KTsKKworICAgIFZpcnR1YWxGaWxlIGZpbGVBZnRlciA9IHJvb3QuZmluZEZpbGVCeVJlbGF0aXZlUGF0aCgicGFjazIvS2xhc3MuamF2YSIpOworICAgIFZpcnR1YWxGaWxlIGZpbGVFeHBlY3RlZCA9IHJvb3QuZmluZEZpbGVCeVJlbGF0aXZlUGF0aCgicGFjazIvS2xhc3MuZXhwZWN0ZWQuamF2YSIpOworCisgICAgUGxhdGZvcm1UZXN0VXRpbC5hc3NlcnRGaWxlc0VxdWFsKGZpbGVFeHBlY3RlZCwgZmlsZUFmdGVyKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RNdWx0aXBsZUZpbGVzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgU3RyaW5nIHJvb3RCZWZvcmUgPSBnZXRSb290KCk7CisgICAgUHNpVGVzdFV0aWwucmVtb3ZlQWxsUm9vdHMobXlNb2R1bGUsIElkZWFUZXN0VXRpbC5nZXRNb2NrSmRrMTcoKSk7CisgICAgZmluYWwgVmlydHVhbEZpbGUgcm9vdCA9IFBzaVRlc3RVdGlsLmNyZWF0ZVRlc3RQcm9qZWN0U3RydWN0dXJlKG15UHJvamVjdCwgbXlNb2R1bGUsIHJvb3RCZWZvcmUsIG15RmlsZXNUb0RlbGV0ZSk7CisKKyAgICBmaW5hbCBWaXJ0dWFsRmlsZSBmaXJzdCA9IHJvb3QuZmluZEZpbGVCeVJlbGF0aXZlUGF0aCgiZnJvbS8xLnR4dCIpOworICAgIGFzc2VydE5vdE51bGwoZmlyc3QpOworICAgIGZpbmFsIFZpcnR1YWxGaWxlIHNlY29uZCA9IHJvb3QuZmluZEZpbGVCeVJlbGF0aXZlUGF0aCgiZnJvbS8yLnR4dCIpOworICAgIGFzc2VydE5vdE51bGwoc2Vjb25kKTsKKworICAgIGZpbmFsIFBzaUZpbGUgZmlyc3RQc2kgPSBteVBzaU1hbmFnZXIuZmluZEZpbGUoZmlyc3QpOworICAgIGZpbmFsIFBzaUZpbGUgc2Vjb25kUHNpID0gbXlQc2lNYW5hZ2VyLmZpbmRGaWxlKHNlY29uZCk7CisKKyAgICBhc3NlcnRUcnVlKENvcHlIYW5kbGVyLmNhbkNvcHkobmV3IFBzaUVsZW1lbnRbXXtmaXJzdFBzaSwgc2Vjb25kUHNpfSkpOworCisgICAgZmluYWwgVmlydHVhbEZpbGUgdG9EaXIgPSByb290LmZpbmRDaGlsZCgidG8iKTsKKyAgICBhc3NlcnROb3ROdWxsKHRvRGlyKTsKKyAgICBmaW5hbCBQc2lEaXJlY3RvcnkgdGFyZ2V0RGlyZWN0b3J5ID0gbXlQc2lNYW5hZ2VyLmZpbmREaXJlY3RvcnkodG9EaXIpOworCisgICAgQ29weUhhbmRsZXIuZG9Db3B5KG5ldyBQc2lFbGVtZW50W117Zmlyc3RQc2ksIHNlY29uZFBzaX0sIHRhcmdldERpcmVjdG9yeSk7CisKKyAgICBhc3NlcnROb3ROdWxsKHJvb3QuZmluZEZpbGVCeVJlbGF0aXZlUGF0aCgidG8vMS50eHQiKSk7CisgICAgYXNzZXJ0Tm90TnVsbChyb290LmZpbmRGaWxlQnlSZWxhdGl2ZVBhdGgoInRvLzIudHh0IikpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFBhY2thZ2VJbmZvKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgU3RyaW5nIHJvb3RCZWZvcmUgPSBnZXRSb290KCk7CisgICAgUHNpVGVzdFV0aWwucmVtb3ZlQWxsUm9vdHMobXlNb2R1bGUsIElkZWFUZXN0VXRpbC5nZXRNb2NrSmRrMTcoKSk7CisgICAgZmluYWwgVmlydHVhbEZpbGUgcm9vdCA9IFBzaVRlc3RVdGlsLmNyZWF0ZVRlc3RQcm9qZWN0U3RydWN0dXJlKG15UHJvamVjdCwgbXlNb2R1bGUsIHJvb3RCZWZvcmUsIG15RmlsZXNUb0RlbGV0ZSk7CisKKyAgICBmaW5hbCBWaXJ0dWFsRmlsZSBmaXJzdCA9IHJvb3QuZmluZEZpbGVCeVJlbGF0aXZlUGF0aCgiZnJvbS9wYWNrYWdlLWluZm8uamF2YSIpOworICAgIGFzc2VydE5vdE51bGwoZmlyc3QpOworICAgIAorICAgIGZpbmFsIFBzaUZpbGUgZmlyc3RQc2kgPSBteVBzaU1hbmFnZXIuZmluZEZpbGUoZmlyc3QpOworICAgIAorICAgIGFzc2VydFRydWUoQ29weUhhbmRsZXIuY2FuQ29weShuZXcgUHNpRWxlbWVudFtde2ZpcnN0UHNpfSkpOworCisgICAgZmluYWwgVmlydHVhbEZpbGUgdG9EaXIgPSByb290LmZpbmRDaGlsZCgidG8iKTsKKyAgICBhc3NlcnROb3ROdWxsKHRvRGlyKTsKKyAgICBmaW5hbCBQc2lEaXJlY3RvcnkgdGFyZ2V0RGlyZWN0b3J5ID0gbXlQc2lNYW5hZ2VyLmZpbmREaXJlY3RvcnkodG9EaXIpOworCisgICAgQ29weUhhbmRsZXIuZG9Db3B5KG5ldyBQc2lFbGVtZW50W117Zmlyc3RQc2l9LCB0YXJnZXREaXJlY3RvcnkpOworCisgICAgZmluYWwgVmlydHVhbEZpbGUgZGVzdCA9IHJvb3QuZmluZEZpbGVCeVJlbGF0aXZlUGF0aCgidG8vcGFja2FnZS1pbmZvLmphdmEiKTsKKyAgICBhc3NlcnROb3ROdWxsKGRlc3QpOworCisgICAgVmlydHVhbEZpbGUgZmlsZUV4cGVjdGVkID0gcm9vdC5maW5kRmlsZUJ5UmVsYXRpdmVQYXRoKCJ0by9wYWNrYWdlLWluZm8uZXhwZWN0ZWQuamF2YSIpOworICAgIAorICAgIFBsYXRmb3JtVGVzdFV0aWwuYXNzZXJ0RmlsZXNFcXVhbChmaWxlRXhwZWN0ZWQsIGRlc3QpOworICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovcmVmYWN0b3JpbmcvRG5kTW92ZVRlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9yZWZhY3RvcmluZy9EbmRNb3ZlVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUxYTVhY2YKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovcmVmYWN0b3JpbmcvRG5kTW92ZVRlc3QuamF2YQpAQCAtMCwwICsxLDY3IEBACisvKgorICogQ29weXJpZ2h0IDIwMDAtMjAxMiBKZXRCcmFpbnMgcy5yLm8uCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworcGFja2FnZSBjb20uaW50ZWxsaWoucmVmYWN0b3Jpbmc7CisKK2ltcG9ydCBjb20uaW50ZWxsaWouY29kZUluc2lnaHQuQ29kZUluc2lnaHRUZXN0Q2FzZTsKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS51dGlsLkNvbXB1dGFibGU7CitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkudmZzLlZpcnR1YWxGaWxlOworaW1wb3J0IGNvbS5pbnRlbGxpai5wc2kuKjsKK2ltcG9ydCBjb20uaW50ZWxsaWoucmVmYWN0b3JpbmcubW92ZS5Nb3ZlSGFuZGxlcjsKK2ltcG9ydCBjb20uaW50ZWxsaWoudGVzdEZyYW1ld29yay5Qc2lUZXN0VXRpbDsKK2ltcG9ydCBvcmcuamV0YnJhaW5zLmFubm90YXRpb25zLk51bGxhYmxlOworCisvKioKKyAqIEBhdXRob3IgYW5uYQorICogQHNpbmNlIEF1ZyAzMSwgMjAxMAorICovCitwdWJsaWMgY2xhc3MgRG5kTW92ZVRlc3QgZXh0ZW5kcyBDb2RlSW5zaWdodFRlc3RDYXNlIHsKKyAgQE92ZXJyaWRlCisgIHByb3RlY3RlZCBTdHJpbmcgZ2V0VGVzdFJvb3QoKSB7CisgICAgcmV0dXJuICIvcmVmYWN0b3JpbmcvZG5kTW92ZS8iOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFB1YmxpY0phdmFDbGFzcygpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdCgiZCIsIG5ldyBDb21wdXRhYmxlPFBzaUVsZW1lbnQ+KCkgeworICAgICAgQE51bGxhYmxlCisgICAgICBAT3ZlcnJpZGUKKyAgICAgIHB1YmxpYyBQc2lFbGVtZW50IGNvbXB1dGUoKSB7CisgICAgICAgIHJldHVybiBnZXRKYXZhRmFjYWRlKCkuZmluZENsYXNzKCJkLk15Q2xhc3MiKTsKKyAgICAgIH0KKyAgICB9LCB0cnVlKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RTZWNvbmRKYXZhQ2xhc3MoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoImQiLCBuZXcgQ29tcHV0YWJsZTxQc2lFbGVtZW50PigpIHsKKyAgICAgIEBOdWxsYWJsZQorICAgICAgQE92ZXJyaWRlCisgICAgICBwdWJsaWMgUHNpRWxlbWVudCBjb21wdXRlKCkgeworICAgICAgICByZXR1cm4gZ2V0SmF2YUZhY2FkZSgpLmZpbmRDbGFzcygiZC5TZWNvbmQiKTsKKyAgICAgIH0KKyAgICB9LCBmYWxzZSk7CisgIH0KKworICBwcml2YXRlIHZvaWQgZG9UZXN0KGZpbmFsIFN0cmluZyB0YXJnZXREaXJOYW1lLCBmaW5hbCBDb21wdXRhYmxlPFBzaUVsZW1lbnQ+IHNvdXJjZSwgZmluYWwgYm9vbGVhbiBleHBlY3RlZCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgU3RyaW5nIHRlc3ROYW1lID0gZ2V0VGVzdE5hbWUodHJ1ZSk7CisgICAgU3RyaW5nIHJvb3QgPSBnZXRUZXN0RGF0YVBhdGgoKSArIGdldFRlc3RSb290KCkgKyB0ZXN0TmFtZTsKKyAgICBWaXJ0dWFsRmlsZSByb290RGlyID0gUHNpVGVzdFV0aWwuY3JlYXRlVGVzdFByb2plY3RTdHJ1Y3R1cmUobXlQcm9qZWN0LCBteU1vZHVsZSwgcm9vdCwgbXlGaWxlc1RvRGVsZXRlLCBmYWxzZSk7CisgICAgUHNpVGVzdFV0aWwuYWRkU291cmNlQ29udGVudFRvUm9vdHMobXlNb2R1bGUsIHJvb3REaXIpOworICAgIFBzaURvY3VtZW50TWFuYWdlci5nZXRJbnN0YW5jZShteVByb2plY3QpLmNvbW1pdEFsbERvY3VtZW50cygpOworICAgIGZpbmFsIFZpcnR1YWxGaWxlIGNoaWxkMSA9IHJvb3REaXIuZmluZENoaWxkKHRhcmdldERpck5hbWUpOworICAgIGFzc2VydE5vdE51bGwoIkZpbGUgIiArIHRhcmdldERpck5hbWUgKyAiIG5vdCBmb3VuZCIsIGNoaWxkMSk7CisgICAgZmluYWwgUHNpRGlyZWN0b3J5IHRhcmdldERpcmVjdG9yeSA9IG15UHNpTWFuYWdlci5maW5kRGlyZWN0b3J5KGNoaWxkMSk7CisgICAgYXNzZXJ0RXF1YWxzKGV4cGVjdGVkLCBNb3ZlSGFuZGxlci5pc01vdmVSZWR1bmRhbnQoc291cmNlLmNvbXB1dGUoKSwgdGFyZ2V0RGlyZWN0b3J5KSk7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovcmVmYWN0b3JpbmcvRW5jYXBzdWxhdGVGaWVsZHNUZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovcmVmYWN0b3JpbmcvRW5jYXBzdWxhdGVGaWVsZHNUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzdiYTI4ZAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9yZWZhY3RvcmluZy9FbmNhcHN1bGF0ZUZpZWxkc1Rlc3QuamF2YQpAQCAtMCwwICsxLDE2NiBAQAorLyoKKyAqIFVzZXI6IGFubmEKKyAqIERhdGU6IDIwLUF1Zy0yMDA4CisgKi8KK3BhY2thZ2UgY29tLmludGVsbGlqLnJlZmFjdG9yaW5nOworCitpbXBvcnQgY29tLmludGVsbGlqLkphdmFUZXN0VXRpbDsKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS5maWxlRWRpdG9yLkZpbGVEb2N1bWVudE1hbmFnZXI7CitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkucHJvamVjdC5Qcm9qZWN0OworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLnZmcy5Mb2NhbEZpbGVTeXN0ZW07CitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkudmZzLlZpcnR1YWxGaWxlOworaW1wb3J0IGNvbS5pbnRlbGxpai5wc2kuKjsKK2ltcG9ydCBjb20uaW50ZWxsaWoucHNpLnNlYXJjaC5HbG9iYWxTZWFyY2hTY29wZTsKK2ltcG9ydCBjb20uaW50ZWxsaWoucHNpLnV0aWwuUHJvcGVydHlVdGlsOworaW1wb3J0IGNvbS5pbnRlbGxpai5yZWZhY3RvcmluZy5lbmNhcHN1bGF0ZUZpZWxkcy5FbmNhcHN1bGF0ZUZpZWxkc0Rlc2NyaXB0b3I7CitpbXBvcnQgY29tLmludGVsbGlqLnJlZmFjdG9yaW5nLmVuY2Fwc3VsYXRlRmllbGRzLkVuY2Fwc3VsYXRlRmllbGRzUHJvY2Vzc29yOworaW1wb3J0IGNvbS5pbnRlbGxpai5yZWZhY3RvcmluZy51dGlsLkRvY0NvbW1lbnRQb2xpY3k7CitpbXBvcnQganVuaXQuZnJhbWV3b3JrLkFzc2VydDsKK2ltcG9ydCBvcmcuamV0YnJhaW5zLmFubm90YXRpb25zLk51bGxhYmxlOworCitwdWJsaWMgY2xhc3MgRW5jYXBzdWxhdGVGaWVsZHNUZXN0IGV4dGVuZHMgTXVsdGlGaWxlVGVzdENhc2V7CisgIHB1YmxpYyB2b2lkIHRlc3RBbHJlYWR5RXhpc3QoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoImkiICwgbnVsbCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0RGlmZldpdGhSZXR1cm5UeXBlT25seSgpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdCgiaSIsICJUaGVyZSBhbHJlYWR5IGlzIGEgbWV0aG9kIDxiPjxjb2RlPlRlc3Qgc2V0SShpbnQpPC9jb2RlPjwvYj4gd2hpY2ggZGlmZmVycyBmcm9tIHNldHRlciA8Yj48Y29kZT5zZXRJPC9jb2RlPjwvYj4gYnkgcmV0dXJuIHR5cGUgb25seS4iKTsKKyAgfQorCisgICBwdWJsaWMgdm9pZCB0ZXN0RGlmZldpdGhSZXR1cm5UeXBlT25seUluSGllcmFyY2h5KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KCJpIiwgIlRoZXJlIGFscmVhZHkgaXMgYSBtZXRob2QgPGI+PGNvZGU+U3VwZXIgc2V0SShpbnQpPC9jb2RlPjwvYj4gd2hpY2ggZGlmZmVycyBmcm9tIHNldHRlciA8Yj48Y29kZT5zZXRJPC9jb2RlPjwvYj4gYnkgcmV0dXJuIHR5cGUgb25seS4iKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RIaWRlT3ZlcnJpZGVyTWV0aG9kKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KCJpIiwgIkEiLCAiVGhlcmUgaXMgYWxyZWFkeSBhIG1ldGhvZCA8Yj48Y29kZT5CLmdldEkoKTwvY29kZT48L2I+IHdoaWNoIHdvdWxkIGhpZGUgZ2VuZXJhdGVkIGdldHRlciBmb3IgYS5pIik7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0SGlkZU91dGVyY2xhc3NNZXRob2QoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoImkiLCAiQS5CIiwgIlRoZXJlIGlzIGFscmVhZHkgYSBtZXRob2QgPGI+PGNvZGU+QS5nZXRJKCk8L2NvZGU+PC9iPiB3aGljaCB3b3VsZCBiZSBoaWRkZW4gYnkgZ2VuZXJhdGVkIGdldHRlciIpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdE1vdmVKYXZhZG9jVG9HZXR0ZXIoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QobmV3IFBlcmZvcm1BY3Rpb24oKSB7CisgICAgICBAT3ZlcnJpZGUKKyAgICAgIHB1YmxpYyB2b2lkIHBlcmZvcm1BY3Rpb24oVmlydHVhbEZpbGUgcm9vdERpciwgVmlydHVhbEZpbGUgcm9vdEFmdGVyKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgZmluYWwgUHNpQ2xhc3MgYUNsYXNzID0gbXlKYXZhRmFjYWRlLmZpbmRDbGFzcygiQSIsIEdsb2JhbFNlYXJjaFNjb3BlLnByb2plY3RTY29wZShteVByb2plY3QpKTsKKyAgICAgICAgYXNzZXJ0Tm90TnVsbCgiVGVzdGVkIGNsYXNzIG5vdCBmb3VuZCIsIGFDbGFzcyk7CisgICAgICAgIGZpbmFsIFBzaUZpZWxkIGZpZWxkID0gYUNsYXNzLmZpbmRGaWVsZEJ5TmFtZSgiaSIsIGZhbHNlKTsKKyAgICAgICAgYXNzZXJ0Tm90TnVsbChmaWVsZCk7CisgICAgICAgIGRvVGVzdChhQ2xhc3MsIGZpZWxkLCBudWxsLCB0cnVlLCB0cnVlKTsKKyAgICAgIH0KKyAgICB9KTsKKyAgfQorCisgIEBPdmVycmlkZQorICBwcm90ZWN0ZWQgU3RyaW5nIGdldFRlc3REYXRhUGF0aCgpIHsKKyAgICByZXR1cm4gSmF2YVRlc3RVdGlsLmdldEphdmFUZXN0RGF0YVBhdGgoKTsKKyAgfQorCisgIEBPdmVycmlkZQorICBwcm90ZWN0ZWQgU3RyaW5nIGdldFRlc3RSb290KCkgeworICAgIHJldHVybiAiL3JlZmFjdG9yaW5nL2VuY2Fwc3VsYXRlRmllbGRzLyI7CisgIH0KKworCisgIHByaXZhdGUgdm9pZCBkb1Rlc3QoZmluYWwgU3RyaW5nIGZpZWxkTmFtZSwgZmluYWwgU3RyaW5nIGNvbmZsaWN0cykgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KGZpZWxkTmFtZSwgIlRlc3QiLCBjb25mbGljdHMpOworICB9CisKKyAgcHJpdmF0ZSB2b2lkIGRvVGVzdChmaW5hbCBTdHJpbmcgZmllbGROYW1lLCBmaW5hbCBTdHJpbmcgY2xhc3NOYW1lLCBmaW5hbCBTdHJpbmcgY29uZmxpY3RzKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QobmV3IFBlcmZvcm1BY3Rpb24oKSB7CisgICAgICBAT3ZlcnJpZGUKKyAgICAgIHB1YmxpYyB2b2lkIHBlcmZvcm1BY3Rpb24oZmluYWwgVmlydHVhbEZpbGUgcm9vdERpciwgZmluYWwgVmlydHVhbEZpbGUgcm9vdEFmdGVyKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgUHNpQ2xhc3MgYUNsYXNzID0gbXlKYXZhRmFjYWRlLmZpbmRDbGFzcyhjbGFzc05hbWUsIEdsb2JhbFNlYXJjaFNjb3BlLnByb2plY3RTY29wZShteVByb2plY3QpKTsKKworICAgICAgICBhc3NlcnROb3ROdWxsKCJUZXN0ZWQgY2xhc3Mgbm90IGZvdW5kIiwgYUNsYXNzKTsKKworCisgICAgICAgIGRvVGVzdChhQ2xhc3MsIGFDbGFzcy5maW5kRmllbGRCeU5hbWUoZmllbGROYW1lLCBmYWxzZSksIGNvbmZsaWN0cywgdHJ1ZSwgdHJ1ZSk7CisgICAgICB9CisgICAgfSk7CisgIH0KKworCisKKyAgcHJpdmF0ZSBzdGF0aWMgdm9pZCBkb1Rlc3QoZmluYWwgUHNpQ2xhc3MgYUNsYXNzLCBmaW5hbCBQc2lGaWVsZCBmaWVsZCwgZmluYWwgU3RyaW5nIGNvbmZsaWN0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmluYWwgYm9vbGVhbiBnZW5lcmF0ZUdldHRlcnMsIGZpbmFsIGJvb2xlYW4gIGdlbmVyYXRlU2V0dGVycykgeworICAgIHRyeSB7CisgICAgICBmaW5hbCBQcm9qZWN0IHByb2plY3QgPSBhQ2xhc3MuZ2V0UHJvamVjdCgpOworICAgICAgRW5jYXBzdWxhdGVGaWVsZHNQcm9jZXNzb3IgcHJvY2Vzc29yID0gbmV3IEVuY2Fwc3VsYXRlRmllbGRzUHJvY2Vzc29yKHByb2plY3QsIG5ldyBFbmNhcHN1bGF0ZUZpZWxkc0Rlc2NyaXB0b3IoKSB7CisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgUHNpRmllbGRbXSBnZXRTZWxlY3RlZEZpZWxkcygpIHsKKyAgICAgICAgICByZXR1cm4gbmV3IFBzaUZpZWxkW117ZmllbGR9OworICAgICAgICB9CisKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyBTdHJpbmdbXSBnZXRHZXR0ZXJOYW1lcygpIHsKKyAgICAgICAgICByZXR1cm4gbmV3IFN0cmluZ1tde1Byb3BlcnR5VXRpbC5zdWdnZXN0R2V0dGVyTmFtZShwcm9qZWN0LCBmaWVsZCl9OworICAgICAgICB9CisKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyBTdHJpbmdbXSBnZXRTZXR0ZXJOYW1lcygpIHsKKyAgICAgICAgICByZXR1cm4gbmV3IFN0cmluZ1tde1Byb3BlcnR5VXRpbC5zdWdnZXN0U2V0dGVyTmFtZShwcm9qZWN0LCBmaWVsZCl9OworICAgICAgICB9CisKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIEBOdWxsYWJsZQorICAgICAgICBwdWJsaWMgUHNpTWV0aG9kW10gZ2V0R2V0dGVyUHJvdG90eXBlcygpIHsKKyAgICAgICAgICByZXR1cm4gaXNUb0VuY2Fwc3VsYXRlR2V0KCkgPyBuZXcgUHNpTWV0aG9kW117UHJvcGVydHlVdGlsLmdlbmVyYXRlR2V0dGVyUHJvdG90eXBlKGZpZWxkKX0gOiBudWxsOworICAgICAgICB9CisKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIEBOdWxsYWJsZQorICAgICAgICBwdWJsaWMgUHNpTWV0aG9kW10gZ2V0U2V0dGVyUHJvdG90eXBlcygpIHsKKyAgICAgICAgICByZXR1cm4gaXNUb0VuY2Fwc3VsYXRlU2V0KCkgPyBuZXcgUHNpTWV0aG9kW117UHJvcGVydHlVdGlsLmdlbmVyYXRlU2V0dGVyUHJvdG90eXBlKGZpZWxkKX0gOiBudWxsOworICAgICAgICB9CisKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyBib29sZWFuIGlzVG9FbmNhcHN1bGF0ZUdldCgpIHsKKyAgICAgICAgICByZXR1cm4gZ2VuZXJhdGVHZXR0ZXJzOworICAgICAgICB9CisKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyBib29sZWFuIGlzVG9FbmNhcHN1bGF0ZVNldCgpIHsKKyAgICAgICAgICByZXR1cm4gZ2VuZXJhdGVTZXR0ZXJzOworICAgICAgICB9CisKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyBib29sZWFuIGlzVG9Vc2VBY2Nlc3NvcnNXaGVuQWNjZXNzaWJsZSgpIHsKKyAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorCisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgU3RyaW5nIGdldEZpZWxkc1Zpc2liaWxpdHkoKSB7CisgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgIH0KKworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIFN0cmluZyBnZXRBY2Nlc3NvcnNWaXNpYmlsaXR5KCkgeworICAgICAgICAgIHJldHVybiBQc2lNb2RpZmllci5QVUJMSUM7CisgICAgICAgIH0KKworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIGludCBnZXRKYXZhZG9jUG9saWN5KCkgeworICAgICAgICAgIHJldHVybiBEb2NDb21tZW50UG9saWN5Lk1PVkU7CisgICAgICAgIH0KKyAgICAgIH0pOworICAgICAgcHJvY2Vzc29yLnJ1bigpOworICAgICAgTG9jYWxGaWxlU3lzdGVtLmdldEluc3RhbmNlKCkucmVmcmVzaChmYWxzZSk7CisgICAgICBGaWxlRG9jdW1lbnRNYW5hZ2VyLmdldEluc3RhbmNlKCkuc2F2ZUFsbERvY3VtZW50cygpOworICAgIH0KKyAgICBjYXRjaCAoQmFzZVJlZmFjdG9yaW5nUHJvY2Vzc29yLkNvbmZsaWN0c0luVGVzdHNFeGNlcHRpb24gZSkgeworICAgICAgaWYgKGNvbmZsaWN0cyAhPSBudWxsKSB7CisgICAgICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoY29uZmxpY3RzLCBlLmdldE1lc3NhZ2UoKSk7CisgICAgICAgIHJldHVybjsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CisgICAgICAgIGZhaWwoZS5nZXRNZXNzYWdlKCkpOworICAgICAgfQorICAgIH0KKyAgICBpZiAoY29uZmxpY3RzICE9IG51bGwpIHsKKyAgICAgIGZhaWwoIkNvbmZsaWN0cyB3ZXJlIG5vdCBkZXRlY3RlZDogIiArIGNvbmZsaWN0cyk7CisgICAgfQorICB9CisKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9yZWZhY3RvcmluZy9FeHRyYWN0Q2xhc3NUZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovcmVmYWN0b3JpbmcvRXh0cmFjdENsYXNzVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAxOTllMWEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovcmVmYWN0b3JpbmcvRXh0cmFjdENsYXNzVGVzdC5qYXZhCkBAIC0wLDAgKzEsMjkyIEBACisvKgorICogVXNlcjogYW5uYQorICogRGF0ZTogMjAtQXVnLTIwMDgKKyAqLworcGFja2FnZSBjb20uaW50ZWxsaWoucmVmYWN0b3Jpbmc7CisKK2ltcG9ydCBjb20uaW50ZWxsaWouSmF2YVRlc3RVdGlsOworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLmZpbGVFZGl0b3IuRmlsZURvY3VtZW50TWFuYWdlcjsKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS52ZnMuTG9jYWxGaWxlU3lzdGVtOworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLnZmcy5WaXJ0dWFsRmlsZTsKK2ltcG9ydCBjb20uaW50ZWxsaWoucHNpLlBzaUNsYXNzOworaW1wb3J0IGNvbS5pbnRlbGxpai5wc2kuUHNpRmllbGQ7CitpbXBvcnQgY29tLmludGVsbGlqLnBzaS5Qc2lNZXRob2Q7CitpbXBvcnQgY29tLmludGVsbGlqLnBzaS5Qc2lNb2RpZmllcjsKK2ltcG9ydCBjb20uaW50ZWxsaWoucHNpLnNlYXJjaC5HbG9iYWxTZWFyY2hTY29wZTsKK2ltcG9ydCBjb20uaW50ZWxsaWoucmVmYWN0b3JpbmcuZXh0cmFjdGNsYXNzLkV4dHJhY3RDbGFzc1Byb2Nlc3NvcjsKK2ltcG9ydCBjb20uaW50ZWxsaWoucmVmYWN0b3JpbmcudXRpbC5jbGFzc01lbWJlcnMuTWVtYmVySW5mbzsKK2ltcG9ydCBqdW5pdC5mcmFtZXdvcmsuQXNzZXJ0OworCitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlzOworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uczsKK2ltcG9ydCBqYXZhLnV0aWwuVHJlZVNldDsKKworcHVibGljIGNsYXNzIEV4dHJhY3RDbGFzc1Rlc3QgZXh0ZW5kcyBNdWx0aUZpbGVUZXN0Q2FzZXsKKyAgQE92ZXJyaWRlCisgIHByb3RlY3RlZCBTdHJpbmcgZ2V0VGVzdFJvb3QoKSB7CisgICAgcmV0dXJuICIvcmVmYWN0b3JpbmcvZXh0cmFjdENsYXNzLyI7CisgIH0KKworICBAT3ZlcnJpZGUKKyAgcHJvdGVjdGVkIFN0cmluZyBnZXRUZXN0RGF0YVBhdGgoKSB7CisgICAgcmV0dXJuIEphdmFUZXN0VXRpbC5nZXRKYXZhVGVzdERhdGFQYXRoKCk7CisgIH0KKworICBwcml2YXRlIHZvaWQgZG9UZXN0TWV0aG9kKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0TWV0aG9kKG51bGwpOworICB9CisKKyAgcHJpdmF0ZSB2b2lkIGRvVGVzdE1ldGhvZChTdHJpbmcgY29uZmxpY3RzKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3RNZXRob2QoImZvbyIsIGNvbmZsaWN0cyk7CisgIH0KKworICBwcml2YXRlIHZvaWQgZG9UZXN0TWV0aG9kKGZpbmFsIFN0cmluZyBtZXRob2ROYW1lLCBmaW5hbCBTdHJpbmcgY29uZmxpY3RzKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QobmV3IFBlcmZvcm1BY3Rpb24oKSB7CisgICAgICBAT3ZlcnJpZGUKKyAgICAgIHB1YmxpYyB2b2lkIHBlcmZvcm1BY3Rpb24oZmluYWwgVmlydHVhbEZpbGUgcm9vdERpciwgZmluYWwgVmlydHVhbEZpbGUgcm9vdEFmdGVyKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgUHNpQ2xhc3MgYUNsYXNzID0gbXlKYXZhRmFjYWRlLmZpbmRDbGFzcygiVGVzdCIsIEdsb2JhbFNlYXJjaFNjb3BlLnByb2plY3RTY29wZShteVByb2plY3QpKTsKKworICAgICAgICBhc3NlcnROb3ROdWxsKCJDbGFzcyBUZXN0IG5vdCBmb3VuZCIsIGFDbGFzcyk7CisKKyAgICAgICAgZmluYWwgQXJyYXlMaXN0PFBzaU1ldGhvZD4gbWV0aG9kcyA9IG5ldyBBcnJheUxpc3Q8UHNpTWV0aG9kPigpOworICAgICAgICBtZXRob2RzLmFkZChhQ2xhc3MuZmluZE1ldGhvZHNCeU5hbWUobWV0aG9kTmFtZSwgZmFsc2UpWzBdKTsKKyAgICAgICAgCisgICAgICAgIGRvVGVzdChhQ2xhc3MsIG1ldGhvZHMsIG5ldyBBcnJheUxpc3Q8UHNpRmllbGQ+KCksIGNvbmZsaWN0cywgZmFsc2UpOworICAgICAgfQorICAgIH0pOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFN0YXRpYygpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdE1ldGhvZCgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFN0YXRpY0ltcG9ydCgpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdE1ldGhvZCgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEZpZWxkUmVmZXJlbmNlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0TWV0aG9kKCJmb28iLCAiRmllbGQgJ215RmllbGQnIG5lZWRzIGdldHRlciIpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFZhcmFyZ3MoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3RNZXRob2QoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3ROb0RlbGVnYXRpb24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3RNZXRob2QoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3ROb0ZpZWxkRGVsZWdhdGlvbigpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdEZpZWxkQW5kTWV0aG9kKCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0RmllbGRJbml0aWFsaXplcnMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3RGaWVsZChudWxsKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3REZXBlbmRhbnRGaWVsZEluaXRpYWxpemVycygpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdEZpZWxkKG51bGwpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdERlcGVuZGFudE5vblN0YXRpY0ZpZWxkSW5pdGlhbGl6ZXJzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0RmllbGQobnVsbCwgdHJ1ZSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0SW5oZXJpdGFuY2VEZWxlZ2F0aW9uKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0TWV0aG9kKCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0RW51bVN3aXRjaCgpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdE1ldGhvZCgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdE5vQ29uc3RydWN0b3JQYXJhbXMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3RGaWVsZEFuZE1ldGhvZCgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdENvbnN0cnVjdG9yUGFyYW1zKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0RmllbGRBbmRNZXRob2QoKTsKKyAgfQorCisgIHByaXZhdGUgdm9pZCBkb1Rlc3RGaWVsZEFuZE1ldGhvZCgpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdEZpZWxkQW5kTWV0aG9kKCJiYXIiKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RJbm5lckNsYXNzUmVmcygpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdElubmVyQ2xhc3MoKTsKKyAgfQorCisgIHByaXZhdGUgdm9pZCBkb1Rlc3RGaWVsZEFuZE1ldGhvZChmaW5hbCBTdHJpbmcgbWV0aG9kTmFtZSkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KG5ldyBQZXJmb3JtQWN0aW9uKCkgeworICAgICAgQE92ZXJyaWRlCisgICAgICBwdWJsaWMgdm9pZCBwZXJmb3JtQWN0aW9uKGZpbmFsIFZpcnR1YWxGaWxlIHJvb3REaXIsIGZpbmFsIFZpcnR1YWxGaWxlIHJvb3RBZnRlcikgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIFBzaUNsYXNzIGFDbGFzcyA9IG15SmF2YUZhY2FkZS5maW5kQ2xhc3MoIlRlc3QiLCBHbG9iYWxTZWFyY2hTY29wZS5wcm9qZWN0U2NvcGUobXlQcm9qZWN0KSk7CisKKyAgICAgICAgYXNzZXJ0Tm90TnVsbCgiQ2xhc3MgVGVzdCBub3QgZm91bmQiLCBhQ2xhc3MpOworCisgICAgICAgIGZpbmFsIEFycmF5TGlzdDxQc2lNZXRob2Q+IG1ldGhvZHMgPSBuZXcgQXJyYXlMaXN0PFBzaU1ldGhvZD4oKTsKKyAgICAgICAgbWV0aG9kcy5hZGQoYUNsYXNzLmZpbmRNZXRob2RzQnlOYW1lKG1ldGhvZE5hbWUsIGZhbHNlKVswXSk7CisKKyAgICAgICAgZmluYWwgQXJyYXlMaXN0PFBzaUZpZWxkPiBmaWVsZHMgPSBuZXcgQXJyYXlMaXN0PFBzaUZpZWxkPigpOworICAgICAgICBmaWVsZHMuYWRkKGFDbGFzcy5maW5kRmllbGRCeU5hbWUoIm15VCIsIGZhbHNlKSk7CisKKyAgICAgICAgZG9UZXN0KGFDbGFzcywgbWV0aG9kcywgZmllbGRzLCBudWxsLCBmYWxzZSk7CisgICAgICB9CisgICAgfSk7CisgIH0KKworICBwcml2YXRlIHZvaWQgZG9UZXN0RmllbGQoZmluYWwgU3RyaW5nIGNvbmZsaWN0cykgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0RmllbGQoY29uZmxpY3RzLCBmYWxzZSk7CisgIH0KKworICBwcml2YXRlIHZvaWQgZG9UZXN0RmllbGQoZmluYWwgU3RyaW5nIGNvbmZsaWN0cywgZmluYWwgYm9vbGVhbiBnZW5lcmF0ZUdldHRlcnNTZXR0ZXJzKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QobmV3IFBlcmZvcm1BY3Rpb24oKSB7CisgICAgICBAT3ZlcnJpZGUKKyAgICAgIHB1YmxpYyB2b2lkIHBlcmZvcm1BY3Rpb24oZmluYWwgVmlydHVhbEZpbGUgcm9vdERpciwgZmluYWwgVmlydHVhbEZpbGUgcm9vdEFmdGVyKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgUHNpQ2xhc3MgYUNsYXNzID0gbXlKYXZhRmFjYWRlLmZpbmRDbGFzcygiVGVzdCIsIEdsb2JhbFNlYXJjaFNjb3BlLnByb2plY3RTY29wZShteVByb2plY3QpKTsKKworICAgICAgICBhc3NlcnROb3ROdWxsKCJDbGFzcyBUZXN0IG5vdCBmb3VuZCIsIGFDbGFzcyk7CisKKyAgICAgICAgZmluYWwgQXJyYXlMaXN0PFBzaU1ldGhvZD4gbWV0aG9kcyA9IG5ldyBBcnJheUxpc3Q8UHNpTWV0aG9kPigpOworCisgICAgICAgIGZpbmFsIEFycmF5TGlzdDxQc2lGaWVsZD4gZmllbGRzID0gbmV3IEFycmF5TGlzdDxQc2lGaWVsZD4oKTsKKyAgICAgICAgZmllbGRzLmFkZChhQ2xhc3MuZmluZEZpZWxkQnlOYW1lKCJteVQiLCBmYWxzZSkpOworCisgICAgICAgIGRvVGVzdChhQ2xhc3MsIG1ldGhvZHMsIGZpZWxkcywgY29uZmxpY3RzLCBnZW5lcmF0ZUdldHRlcnNTZXR0ZXJzKTsKKyAgICAgIH0KKyAgICB9KTsKKyAgfQorCisgIHByaXZhdGUgc3RhdGljIHZvaWQgZG9UZXN0KGZpbmFsIFBzaUNsYXNzIGFDbGFzcywgZmluYWwgQXJyYXlMaXN0PFBzaU1ldGhvZD4gbWV0aG9kcywgZmluYWwgQXJyYXlMaXN0PFBzaUZpZWxkPiBmaWVsZHMsIGZpbmFsIFN0cmluZyBjb25mbGljdHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2xlYW4gZ2VuZXJhdGVHZXR0ZXJzU2V0dGVycykgeworICAgIHRyeSB7CisgICAgICBFeHRyYWN0Q2xhc3NQcm9jZXNzb3IgcHJvY2Vzc29yID0gbmV3IEV4dHJhY3RDbGFzc1Byb2Nlc3NvcihhQ2xhc3MsIGZpZWxkcywgbWV0aG9kcywgbmV3IEFycmF5TGlzdDxQc2lDbGFzcz4oKSwgIiIsIG51bGwsICJFeHRyYWN0ZWQiLCBudWxsLCBnZW5lcmF0ZUdldHRlcnNTZXR0ZXJzLCBDb2xsZWN0aW9ucy48TWVtYmVySW5mbz5lbXB0eUxpc3QoKSk7CisgICAgICBwcm9jZXNzb3IucnVuKCk7CisgICAgICBMb2NhbEZpbGVTeXN0ZW0uZ2V0SW5zdGFuY2UoKS5yZWZyZXNoKGZhbHNlKTsKKyAgICAgIEZpbGVEb2N1bWVudE1hbmFnZXIuZ2V0SW5zdGFuY2UoKS5zYXZlQWxsRG9jdW1lbnRzKCk7CisgICAgfQorICAgIGNhdGNoIChCYXNlUmVmYWN0b3JpbmdQcm9jZXNzb3IuQ29uZmxpY3RzSW5UZXN0c0V4Y2VwdGlvbiBlKSB7CisgICAgICBpZiAoY29uZmxpY3RzICE9IG51bGwpIHsKKyAgICAgICAgVHJlZVNldCBleHBlY3RlZENvbmZsaWN0c1NldCA9IG5ldyBUcmVlU2V0KEFycmF5cy5hc0xpc3QoY29uZmxpY3RzLnNwbGl0KCJcbiIpKSk7CisgICAgICAgIFRyZWVTZXQgYWN0dWFsQ29uZmxpY3RzU2V0ID0gbmV3IFRyZWVTZXQoQXJyYXlzLmFzTGlzdChlLmdldE1lc3NhZ2UoKS5zcGxpdCgiXG4iKSkpOworICAgICAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKGV4cGVjdGVkQ29uZmxpY3RzU2V0LCBhY3R1YWxDb25mbGljdHNTZXQpOworICAgICAgICByZXR1cm47CisgICAgICB9IGVsc2UgeworICAgICAgICBmYWlsKGUuZ2V0TWVzc2FnZSgpKTsKKyAgICAgIH0KKyAgICB9CisgICAgaWYgKGNvbmZsaWN0cyAhPSBudWxsKSB7CisgICAgICBmYWlsKCJDb25mbGljdHMgd2VyZSBub3QgZGV0ZWN0ZWQ6ICIgKyBjb25mbGljdHMpOworICAgIH0KKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RHZW5lcmF0ZUdldHRlcnMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3RGaWVsZChudWxsLCB0cnVlKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RJbmNyZW1lbnREZWNyZW1lbnQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3RGaWVsZChudWxsLCB0cnVlKTsKKyAgfQorCisKKyAgcHVibGljIHZvaWQgdGVzdEdldHRlcnMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3RGaWVsZEFuZE1ldGhvZCgiZ2V0TXlUIik7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0SGllcmFyY2h5KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0RmllbGRBbmRNZXRob2QoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RQdWJsaWNGaWVsZERlbGVnYXRpb24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QobmV3IFBlcmZvcm1BY3Rpb24oKSB7CisgICAgICBAT3ZlcnJpZGUKKyAgICAgIHB1YmxpYyB2b2lkIHBlcmZvcm1BY3Rpb24oZmluYWwgVmlydHVhbEZpbGUgcm9vdERpciwgZmluYWwgVmlydHVhbEZpbGUgcm9vdEFmdGVyKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgUHNpQ2xhc3MgYUNsYXNzID0gbXlKYXZhRmFjYWRlLmZpbmRDbGFzcygiVGVzdCIsIEdsb2JhbFNlYXJjaFNjb3BlLnByb2plY3RTY29wZShteVByb2plY3QpKTsKKworICAgICAgICBhc3NlcnROb3ROdWxsKCJDbGFzcyBUZXN0IG5vdCBmb3VuZCIsIGFDbGFzcyk7CisKKyAgICAgICAgZmluYWwgQXJyYXlMaXN0PFBzaUZpZWxkPiBmaWVsZHMgPSBuZXcgQXJyYXlMaXN0PFBzaUZpZWxkPigpOworICAgICAgICBmaWVsZHMuYWRkKGFDbGFzcy5maW5kRmllbGRCeU5hbWUoIm15VCIsIGZhbHNlKSk7CisKKyAgICAgICAgRXh0cmFjdENsYXNzUHJvY2Vzc29yIHByb2Nlc3NvciA9IG5ldyBFeHRyYWN0Q2xhc3NQcm9jZXNzb3IoYUNsYXNzLCBmaWVsZHMsIG5ldyBBcnJheUxpc3Q8UHNpTWV0aG9kPigpLCBuZXcgQXJyYXlMaXN0PFBzaUNsYXNzPigpLCAiIiwgIkV4dHJhY3RlZCIpOworICAgICAgICBwcm9jZXNzb3IucnVuKCk7CisgICAgICAgIExvY2FsRmlsZVN5c3RlbS5nZXRJbnN0YW5jZSgpLnJlZnJlc2goZmFsc2UpOworICAgICAgICBGaWxlRG9jdW1lbnRNYW5hZ2VyLmdldEluc3RhbmNlKCkuc2F2ZUFsbERvY3VtZW50cygpOworICAgICAgfQorICAgIH0pOworICB9CisKKyAgcHJpdmF0ZSB2b2lkIGRvVGVzdElubmVyQ2xhc3MoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QobmV3IFBlcmZvcm1BY3Rpb24oKSB7CisgICAgICBAT3ZlcnJpZGUKKyAgICAgIHB1YmxpYyB2b2lkIHBlcmZvcm1BY3Rpb24oZmluYWwgVmlydHVhbEZpbGUgcm9vdERpciwgZmluYWwgVmlydHVhbEZpbGUgcm9vdEFmdGVyKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgUHNpQ2xhc3MgYUNsYXNzID0gbXlKYXZhRmFjYWRlLmZpbmRDbGFzcygiVGVzdCIsIEdsb2JhbFNlYXJjaFNjb3BlLnByb2plY3RTY29wZShteVByb2plY3QpKTsKKworICAgICAgICBhc3NlcnROb3ROdWxsKCJDbGFzcyBUZXN0IG5vdCBmb3VuZCIsIGFDbGFzcyk7CisKKyAgICAgICAgZmluYWwgQXJyYXlMaXN0PFBzaUNsYXNzPiBjbGFzc2VzID0gbmV3IEFycmF5TGlzdDxQc2lDbGFzcz4oKTsKKyAgICAgICAgY2xhc3Nlcy5hZGQoYUNsYXNzLmZpbmRJbm5lckNsYXNzQnlOYW1lKCJJbm5lciIsIGZhbHNlKSk7CisgICAgICAgIEV4dHJhY3RDbGFzc1Byb2Nlc3NvciBwcm9jZXNzb3IgPSBuZXcgRXh0cmFjdENsYXNzUHJvY2Vzc29yKGFDbGFzcywgbmV3IEFycmF5TGlzdDxQc2lGaWVsZD4oKSwgbmV3IEFycmF5TGlzdDxQc2lNZXRob2Q+KCksIGNsYXNzZXMsICIiLCAiRXh0cmFjdGVkIik7CisgICAgICAgIHByb2Nlc3Nvci5ydW4oKTsKKyAgICAgICAgTG9jYWxGaWxlU3lzdGVtLmdldEluc3RhbmNlKCkucmVmcmVzaChmYWxzZSk7CisgICAgICAgIEZpbGVEb2N1bWVudE1hbmFnZXIuZ2V0SW5zdGFuY2UoKS5zYXZlQWxsRG9jdW1lbnRzKCk7CisgICAgICB9CisgICAgfSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0SW5uZXIoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3RJbm5lckNsYXNzKCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0TXVsdGlwbGVHZXR0ZXJzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0RmllbGQoIkZpZWxkICdteVQnIG5lZWRzIGdldHRlciIpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdE11bHRpcGxlR2V0dGVyczEoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3RNZXRob2QoImdldE15VCIsICJGaWVsZCAnbXlUJyBuZWVkcyBnZXR0ZXIiKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RVc2VkSW5Jbml0aWFsaXplcigpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdEZpZWxkKCJGaWVsZCAnbXlUJyBuZWVkcyBzZXR0ZXJcbiIgKworICAgICAgICAgICAgICAgICJGaWVsZCAnbXlUJyBuZWVkcyBnZXR0ZXJcbiIgKworICAgICAgICAgICAgICAgICJDbGFzcyBpbml0aWFsaXplciByZXF1aXJlcyBtb3ZlZCBtZW1iZXJzIik7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0VXNlZEluQ29uc3RydWN0b3IoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3RGaWVsZCgiRmllbGQgJ215VCcgbmVlZHMgZ2V0dGVyXG4iICsKKyAgICAgICAgICAgICAgICAiRmllbGQgJ215VCcgbmVlZHMgc2V0dGVyXG4iICsKKyAgICAgICAgICAgICAgICAiQ29uc3RydWN0b3IgcmVxdWlyZXMgbW92ZWQgbWVtYmVycyIpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFJlZkluSmF2YWRvYygpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdEZpZWxkKG51bGwpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdE1ldGhvZFR5cGVQYXJhbWV0ZXJzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0TWV0aG9kKCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0UHVibGljVmlzaWJpbGl0eSgpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdChuZXcgUGVyZm9ybUFjdGlvbigpIHsKKyAgICAgIEBPdmVycmlkZQorICAgICAgcHVibGljIHZvaWQgcGVyZm9ybUFjdGlvbihmaW5hbCBWaXJ0dWFsRmlsZSByb290RGlyLCBmaW5hbCBWaXJ0dWFsRmlsZSByb290QWZ0ZXIpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICBQc2lDbGFzcyBhQ2xhc3MgPSBteUphdmFGYWNhZGUuZmluZENsYXNzKCJUZXN0IiwgR2xvYmFsU2VhcmNoU2NvcGUucHJvamVjdFNjb3BlKG15UHJvamVjdCkpOworCisgICAgICAgIGFzc2VydE5vdE51bGwoIkNsYXNzIFRlc3Qgbm90IGZvdW5kIiwgYUNsYXNzKTsKKworICAgICAgICBmaW5hbCBBcnJheUxpc3Q8UHNpTWV0aG9kPiBtZXRob2RzID0gbmV3IEFycmF5TGlzdDxQc2lNZXRob2Q+KCk7CisgICAgICAgIG1ldGhvZHMuYWRkKGFDbGFzcy5maW5kTWV0aG9kc0J5TmFtZSgiZm9vcyIsIGZhbHNlKVswXSk7CisKKyAgICAgICAgZmluYWwgQXJyYXlMaXN0PFBzaUZpZWxkPiBmaWVsZHMgPSBuZXcgQXJyYXlMaXN0PFBzaUZpZWxkPigpOworICAgICAgICBmaWVsZHMuYWRkKGFDbGFzcy5maW5kRmllbGRCeU5hbWUoIm15VCIsIGZhbHNlKSk7CisKKyAgICAgICAgZmluYWwgRXh0cmFjdENsYXNzUHJvY2Vzc29yIHByb2Nlc3NvciA9CisgICAgICAgICAgbmV3IEV4dHJhY3RDbGFzc1Byb2Nlc3NvcihhQ2xhc3MsIGZpZWxkcywgbWV0aG9kcywgbmV3IEFycmF5TGlzdDxQc2lDbGFzcz4oKSwgIiIsIG51bGwsICJFeHRyYWN0ZWQiLCBQc2lNb2RpZmllci5QVUJMSUMsIGZhbHNlLCBDb2xsZWN0aW9ucy48TWVtYmVySW5mbz5lbXB0eUxpc3QoKSk7CisgICAgICAgIHByb2Nlc3Nvci5ydW4oKTsKKyAgICAgICAgTG9jYWxGaWxlU3lzdGVtLmdldEluc3RhbmNlKCkucmVmcmVzaChmYWxzZSk7CisgICAgICAgIEZpbGVEb2N1bWVudE1hbmFnZXIuZ2V0SW5zdGFuY2UoKS5zYXZlQWxsRG9jdW1lbnRzKCk7CisgICAgICB9CisgICAgfSk7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovcmVmYWN0b3JpbmcvRXh0cmFjdEVudW1UZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovcmVmYWN0b3JpbmcvRXh0cmFjdEVudW1UZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzczZDAxZgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9yZWZhY3RvcmluZy9FeHRyYWN0RW51bVRlc3QuamF2YQpAQCAtMCwwICsxLDE4NiBAQAorLyoKKyAqIENvcHlyaWdodCAyMDAwLTIwMTAgSmV0QnJhaW5zIHMuci5vLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworLyoKKyAqIFVzZXI6IGFubmEKKyAqIERhdGU6IDAyLUp1bi0yMDEwCisgKi8KK3BhY2thZ2UgY29tLmludGVsbGlqLnJlZmFjdG9yaW5nOworCitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkuZmlsZUVkaXRvci5GaWxlRG9jdW1lbnRNYW5hZ2VyOworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLnZmcy5Mb2NhbEZpbGVTeXN0ZW07CitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkudmZzLlZpcnR1YWxGaWxlOworaW1wb3J0IGNvbS5pbnRlbGxpai5wc2kuKjsKK2ltcG9ydCBjb20uaW50ZWxsaWoucHNpLnNlYXJjaC5HbG9iYWxTZWFyY2hTY29wZTsKK2ltcG9ydCBjb20uaW50ZWxsaWoucmVmYWN0b3JpbmcuZXh0cmFjdGNsYXNzLkV4dHJhY3RDbGFzc1Byb2Nlc3NvcjsKK2ltcG9ydCBjb20uaW50ZWxsaWoucmVmYWN0b3JpbmcudXRpbC5jbGFzc01lbWJlcnMuTWVtYmVySW5mbzsKK2ltcG9ydCBqdW5pdC5mcmFtZXdvcmsuQXNzZXJ0OworCitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlzOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworaW1wb3J0IGphdmEudXRpbC5UcmVlU2V0OworCitwdWJsaWMgY2xhc3MgRXh0cmFjdEVudW1UZXN0IGV4dGVuZHMgTXVsdGlGaWxlVGVzdENhc2UgeworCisgIEBPdmVycmlkZQorICBwcm90ZWN0ZWQgU3RyaW5nIGdldFRlc3RSb290KCkgeworICAgIHJldHVybiAiL3JlZmFjdG9yaW5nL2V4dHJhY3RFbnVtLyI7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0T25lQ29uc3RhbnQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QobmV3IFJlZmFjdG9yaW5nVGVzdFV0aWwuTWVtYmVyRGVzY3JpcHRvcigiRk9PIiwgUHNpRmllbGQuY2xhc3MsIHRydWUpKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3REZXBlbmRhbnRDb25zdGFudHMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QobmV3IFJlZmFjdG9yaW5nVGVzdFV0aWwuTWVtYmVyRGVzY3JpcHRvcigiRk9PIiwgUHNpRmllbGQuY2xhc3MsIHRydWUpLAorICAgICAgICAgICBuZXcgUmVmYWN0b3JpbmdUZXN0VXRpbC5NZW1iZXJEZXNjcmlwdG9yKCJCQVIiLCBQc2lGaWVsZC5jbGFzcywgdHJ1ZSkpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFJlZmVyZW5jZXNPbkVudW1Db25zdGFudEluRW51bSgpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdChuZXcgUmVmYWN0b3JpbmdUZXN0VXRpbC5NZW1iZXJEZXNjcmlwdG9yKCJGT08iLCBQc2lGaWVsZC5jbGFzcywgdHJ1ZSksCisgICAgICAgICAgIG5ldyBSZWZhY3RvcmluZ1Rlc3RVdGlsLk1lbWJlckRlc2NyaXB0b3IoImZvbyIsIFBzaU1ldGhvZC5jbGFzcykpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFJlZmVyZW5jZXNPbkVudW1Db25zdGFudEluT3JpZ2luYWwoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QobmV3IFJlZmFjdG9yaW5nVGVzdFV0aWwuTWVtYmVyRGVzY3JpcHRvcigiRk9PIiwgUHNpRmllbGQuY2xhc3MsIHRydWUpKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RGb3J3YXJkUmVmZXJlbmNlQ29uZmxpY3QoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoIlVuYWJsZSB0byBtaWdyYXRlIHN0YXRlbWVudCB0byBlbnVtIGNvbnN0YW50LiIsIGZhbHNlLAorICAgICAgICAgICBuZXcgUmVmYWN0b3JpbmdUZXN0VXRpbC5NZW1iZXJEZXNjcmlwdG9yKCJGT08iLCBQc2lGaWVsZC5jbGFzcywgZmFsc2UpLAorICAgICAgICAgICBuZXcgUmVmYWN0b3JpbmdUZXN0VXRpbC5NZW1iZXJEZXNjcmlwdG9yKCJCQVIiLCBQc2lGaWVsZC5jbGFzcywgdHJ1ZSkpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFZhbHVlTmFtZUNvbmZsaWN0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KG5ldyBSZWZhY3RvcmluZ1Rlc3RVdGlsLk1lbWJlckRlc2NyaXB0b3IoIkZPTyIsIFBzaUZpZWxkLmNsYXNzLCB0cnVlKSwKKyAgICAgICAgICAgbmV3IFJlZmFjdG9yaW5nVGVzdFV0aWwuTWVtYmVyRGVzY3JpcHRvcigidmFsdWUiLCBQc2lGaWVsZC5jbGFzcywgZmFsc2UpKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RDaGFuZ2VNZXRob2RQYXJhbWV0ZXIoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QobmV3IFJlZmFjdG9yaW5nVGVzdFV0aWwuTWVtYmVyRGVzY3JpcHRvcigiRk9PIiwgUHNpRmllbGQuY2xhc3MsIHRydWUpLAorICAgICAgICAgICBuZXcgUmVmYWN0b3JpbmdUZXN0VXRpbC5NZW1iZXJEZXNjcmlwdG9yKCJCQVIiLCBQc2lGaWVsZC5jbGFzcywgdHJ1ZSkpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdENhbnRDaGFuZ2VNZXRob2RQYXJhbWV0ZXIoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoIlVuYWJsZSB0byBtaWdyYXRlIHN0YXRlbWVudCB0byBlbnVtIGNvbnN0YW50LiIsIGZhbHNlLAorICAgICAgICAgICBuZXcgUmVmYWN0b3JpbmdUZXN0VXRpbC5NZW1iZXJEZXNjcmlwdG9yKCJGT08iLCBQc2lGaWVsZC5jbGFzcywgdHJ1ZSksCisgICAgICAgICAgIG5ldyBSZWZhY3RvcmluZ1Rlc3RVdGlsLk1lbWJlckRlc2NyaXB0b3IoIkJBUiIsIFBzaUZpZWxkLmNsYXNzLCB0cnVlKSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0RG9udENoYW5nZU90aGVyQ29uc3RhbnRzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KCJVbmFibGUgdG8gbWlncmF0ZSBzdGF0ZW1lbnQgdG8gZW51bSBjb25zdGFudC4gTm9kZS5XQVJOSU5HIGNhbiBub3QgYmUgcmVwbGFjZWQgd2l0aCBlbnVtIiwgZmFsc2UsCisgICAgICAgICAgIG5ldyBSZWZhY3RvcmluZ1Rlc3RVdGlsLk1lbWJlckRlc2NyaXB0b3IoIk9LIiwgUHNpRmllbGQuY2xhc3MsIHRydWUpLAorICAgICAgICAgICBuZXcgUmVmYWN0b3JpbmdUZXN0VXRpbC5NZW1iZXJEZXNjcmlwdG9yKCJFUlJPUiIsIFBzaUZpZWxkLmNsYXNzLCB0cnVlKSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0Q2FudENoYW5nZU1ldGhvZFBhcmFtZXRlcjEoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoIlVuYWJsZSB0byBtaWdyYXRlIHN0YXRlbWVudCB0byBlbnVtIGNvbnN0YW50LiIsIGZhbHNlLAorICAgICAgICAgICBuZXcgUmVmYWN0b3JpbmdUZXN0VXRpbC5NZW1iZXJEZXNjcmlwdG9yKCJGT08iLCBQc2lGaWVsZC5jbGFzcywgdHJ1ZSksCisgICAgICAgICAgIG5ldyBSZWZhY3RvcmluZ1Rlc3RVdGlsLk1lbWJlckRlc2NyaXB0b3IoIkJBUiIsIFBzaUZpZWxkLmNsYXNzLCB0cnVlKSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0Q2hhbmdlUmV0dXJuVHlwZSgpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdChuZXcgUmVmYWN0b3JpbmdUZXN0VXRpbC5NZW1iZXJEZXNjcmlwdG9yKCJGT08iLCBQc2lGaWVsZC5jbGFzcywgdHJ1ZSksCisgICAgICAgICAgIG5ldyBSZWZhY3RvcmluZ1Rlc3RVdGlsLk1lbWJlckRlc2NyaXB0b3IoIkJBUiIsIFBzaUZpZWxkLmNsYXNzLCB0cnVlKSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0Q2FudENoYW5nZVJldHVyblR5cGUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoIlVuYWJsZSB0byBtaWdyYXRlIHN0YXRlbWVudCB0byBlbnVtIGNvbnN0YW50LiBGaWVsZCAmbHQ7YiZndDsmbHQ7Y29kZSZndDtsZW5ndGgmbHQ7L2NvZGUmZ3Q7Jmx0Oy9iJmd0OyBpcyBvdXQgb2YgcHJvamVjdCIsIGZhbHNlLAorICAgICAgICAgICBuZXcgUmVmYWN0b3JpbmdUZXN0VXRpbC5NZW1iZXJEZXNjcmlwdG9yKCJGT08iLCBQc2lGaWVsZC5jbGFzcywgdHJ1ZSksCisgICAgICAgICAgIG5ldyBSZWZhY3RvcmluZ1Rlc3RVdGlsLk1lbWJlckRlc2NyaXB0b3IoIkJBUiIsIFBzaUZpZWxkLmNsYXNzLCB0cnVlKSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0Q2FudENoYW5nZVJldHVyblR5cGUxKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KCJVbmFibGUgdG8gbWlncmF0ZSBzdGF0ZW1lbnQgdG8gZW51bSBjb25zdGFudC4iLCBmYWxzZSwKKyAgICAgICAgICAgbmV3IFJlZmFjdG9yaW5nVGVzdFV0aWwuTWVtYmVyRGVzY3JpcHRvcigiRk9PIiwgUHNpRmllbGQuY2xhc3MsIHRydWUpLAorICAgICAgICAgICBuZXcgUmVmYWN0b3JpbmdUZXN0VXRpbC5NZW1iZXJEZXNjcmlwdG9yKCJCQVIiLCBQc2lGaWVsZC5jbGFzcywgdHJ1ZSkpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdENoYW5nZU1ldGhvZFBhcmFtZXRlckFuZFJlcGxhY2VPdGhlclVzYWdlcygpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdChuZXcgUmVmYWN0b3JpbmdUZXN0VXRpbC5NZW1iZXJEZXNjcmlwdG9yKCJGT08iLCBQc2lGaWVsZC5jbGFzcywgdHJ1ZSksCisgICAgICAgICAgIG5ldyBSZWZhY3RvcmluZ1Rlc3RVdGlsLk1lbWJlckRlc2NyaXB0b3IoIkJBUiIsIFBzaUZpZWxkLmNsYXNzLCB0cnVlKSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0UmVmZXJlbmNlc09uRW51bUNvbnN0YW50RWxzZXdoZXJlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KG5ldyBSZWZhY3RvcmluZ1Rlc3RVdGlsLk1lbWJlckRlc2NyaXB0b3IoIkZPTyIsIFBzaUZpZWxkLmNsYXNzLCB0cnVlKSwKKyAgICAgICAgICAgbmV3IFJlZmFjdG9yaW5nVGVzdFV0aWwuTWVtYmVyRGVzY3JpcHRvcigiQkFSIiwgUHNpRmllbGQuY2xhc3MsIHRydWUpKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RVbmtub3duU3dpdGNoTGFiZWwoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoIlVuYWJsZSB0byBtaWdyYXRlIHN0YXRlbWVudCB0byBlbnVtIGNvbnN0YW50LiA4IGNhbiBub3QgYmUgcmVwbGFjZWQgd2l0aCBlbnVtIiwgZmFsc2UsCisgICAgICAgICAgIG5ldyBSZWZhY3RvcmluZ1Rlc3RVdGlsLk1lbWJlckRlc2NyaXB0b3IoIkZPTyIsIFBzaUZpZWxkLmNsYXNzLCB0cnVlKSwKKyAgICAgICAgICAgbmV3IFJlZmFjdG9yaW5nVGVzdFV0aWwuTWVtYmVyRGVzY3JpcHRvcigiQkFSIiwgUHNpRmllbGQuY2xhc3MsIHRydWUpKTsKKyAgfQorCisgIHByaXZhdGUgdm9pZCBkb1Rlc3QoZmluYWwgUmVmYWN0b3JpbmdUZXN0VXRpbC5NZW1iZXJEZXNjcmlwdG9yLi4uIG1lbWJlckRlc2NyaXB0b3JzKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QobnVsbCwgZmFsc2UsIG1lbWJlckRlc2NyaXB0b3JzKTsKKyAgfQorCisgIHByaXZhdGUgdm9pZCBkb1Rlc3QoZmluYWwgU3RyaW5nIGNvbmZsaWN0cywKKyAgICAgICAgICAgICAgICAgICAgICBmaW5hbCBib29sZWFuIGdlbmVyYXRlQWNjZXNzb3JzLAorICAgICAgICAgICAgICAgICAgICAgIGZpbmFsIFJlZmFjdG9yaW5nVGVzdFV0aWwuTWVtYmVyRGVzY3JpcHRvci4uLiBtZW1iZXJEZXNjcmlwdG9ycykgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KG5ldyBQZXJmb3JtQWN0aW9uKCkgeworICAgICAgQE92ZXJyaWRlCisgICAgICBwdWJsaWMgdm9pZCBwZXJmb3JtQWN0aW9uKFZpcnR1YWxGaWxlIHJvb3REaXIsIFZpcnR1YWxGaWxlIHJvb3RBZnRlcikgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIGZpbmFsIFBzaUNsYXNzIGFDbGFzcyA9IG15SmF2YUZhY2FkZS5maW5kQ2xhc3MoIlRlc3QiLCBHbG9iYWxTZWFyY2hTY29wZS5wcm9qZWN0U2NvcGUobXlQcm9qZWN0KSk7CisgICAgICAgIGFzc2VydE5vdE51bGwoIkNsYXNzIFRlc3Qgbm90IGZvdW5kIiwgYUNsYXNzKTsKKworICAgICAgICBmaW5hbCBBcnJheUxpc3Q8UHNpRmllbGQ+IGZpZWxkcyA9IG5ldyBBcnJheUxpc3Q8UHNpRmllbGQ+KCk7CisgICAgICAgIGZpbmFsIEFycmF5TGlzdDxQc2lNZXRob2Q+IG1ldGhvZHMgPSBuZXcgQXJyYXlMaXN0PFBzaU1ldGhvZD4oKTsKKyAgICAgICAgZmluYWwgTGlzdDxNZW1iZXJJbmZvPiBlbnVtQ29uc3RhbnRzID0gbmV3IEFycmF5TGlzdDxNZW1iZXJJbmZvPigpOworICAgICAgICBmb3IgKE1lbWJlckluZm8gbWVtYmVySW5mbyA6IFJlZmFjdG9yaW5nVGVzdFV0aWwuZmluZE1lbWJlcnMoYUNsYXNzLCBtZW1iZXJEZXNjcmlwdG9ycykpIHsKKyAgICAgICAgICBmaW5hbCBQc2lNZW1iZXIgbWVtYmVyID0gbWVtYmVySW5mby5nZXRNZW1iZXIoKTsKKyAgICAgICAgICBpZiAobWVtYmVyIGluc3RhbmNlb2YgUHNpRmllbGQpIHsKKyAgICAgICAgICAgIGZpZWxkcy5hZGQoKFBzaUZpZWxkKW1lbWJlcik7CisgICAgICAgICAgICBpZiAobWVtYmVyLmhhc01vZGlmaWVyUHJvcGVydHkoUHNpTW9kaWZpZXIuU1RBVElDKSAmJiBtZW1iZXIuaGFzTW9kaWZpZXJQcm9wZXJ0eShQc2lNb2RpZmllci5GSU5BTCkgJiYgKChQc2lGaWVsZCltZW1iZXIpLmhhc0luaXRpYWxpemVyKCkpIHsKKyAgICAgICAgICAgICAgaWYgKG1lbWJlckluZm8uaXNUb0Fic3RyYWN0KCkpIHsKKyAgICAgICAgICAgICAgICBlbnVtQ29uc3RhbnRzLmFkZChtZW1iZXJJbmZvKTsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgIH0KKyAgICAgICAgICBlbHNlIGlmIChtZW1iZXIgaW5zdGFuY2VvZiBQc2lNZXRob2QpIHsKKyAgICAgICAgICAgIG1ldGhvZHMuYWRkKChQc2lNZXRob2QpbWVtYmVyKTsKKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICBmaW5hbCBFeHRyYWN0Q2xhc3NQcm9jZXNzb3IgcHJvY2Vzc29yID0KKyAgICAgICAgICAgIG5ldyBFeHRyYWN0Q2xhc3NQcm9jZXNzb3IoYUNsYXNzLCBmaWVsZHMsIG1ldGhvZHMsIG5ldyBBcnJheUxpc3Q8UHNpQ2xhc3M+KCksICIiLCBudWxsLCAiRUVudW0iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudWxsLCBnZW5lcmF0ZUFjY2Vzc29ycywgZW51bUNvbnN0YW50cyk7CisKKyAgICAgICAgICBwcm9jZXNzb3IucnVuKCk7CisgICAgICAgICAgTG9jYWxGaWxlU3lzdGVtLmdldEluc3RhbmNlKCkucmVmcmVzaChmYWxzZSk7CisgICAgICAgICAgRmlsZURvY3VtZW50TWFuYWdlci5nZXRJbnN0YW5jZSgpLnNhdmVBbGxEb2N1bWVudHMoKTsKKyAgICAgICAgfQorICAgICAgICBjYXRjaCAoQmFzZVJlZmFjdG9yaW5nUHJvY2Vzc29yLkNvbmZsaWN0c0luVGVzdHNFeGNlcHRpb24gZSkgeworICAgICAgICAgIGlmIChjb25mbGljdHMgIT0gbnVsbCkgeworICAgICAgICAgICAgVHJlZVNldCBleHBlY3RlZENvbmZsaWN0c1NldCA9IG5ldyBUcmVlU2V0KEFycmF5cy5hc0xpc3QoY29uZmxpY3RzLnNwbGl0KCJcbiIpKSk7CisgICAgICAgICAgICBUcmVlU2V0IGFjdHVhbENvbmZsaWN0c1NldCA9IG5ldyBUcmVlU2V0KEFycmF5cy5hc0xpc3QoZS5nZXRNZXNzYWdlKCkuc3BsaXQoIlxuIikpKTsKKyAgICAgICAgICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoZXhwZWN0ZWRDb25mbGljdHNTZXQsIGFjdHVhbENvbmZsaWN0c1NldCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgfQorICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgZmFpbChlLmdldE1lc3NhZ2UoKSk7CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmIChjb25mbGljdHMgIT0gbnVsbCkgeworICAgICAgICAgIGZhaWwoIkNvbmZsaWN0cyB3ZXJlIG5vdCBkZXRlY3RlZDogIiArIGNvbmZsaWN0cyk7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9KTsKKyAgfQorfQorCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovcmVmYWN0b3JpbmcvRXh0cmFjdE1ldGhvZDE1VGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL3JlZmFjdG9yaW5nL0V4dHJhY3RNZXRob2QxNVRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYmVmMWJjCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL3JlZmFjdG9yaW5nL0V4dHJhY3RNZXRob2QxNVRlc3QuamF2YQpAQCAtMCwwICsxLDQyIEBACisvKgorICogQ29weXJpZ2h0IDIwMDAtMjAxMiBKZXRCcmFpbnMgcy5yLm8uCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisvKgorICogVXNlcjogYW5uYQorICogRGF0ZTogMTEtSnVuLTIwMDkKKyAqLworcGFja2FnZSBjb20uaW50ZWxsaWoucmVmYWN0b3Jpbmc7CisKK2ltcG9ydCBjb20uaW50ZWxsaWouSmF2YVRlc3RVdGlsOworaW1wb3J0IGNvbS5pbnRlbGxpai50ZXN0RnJhbWV3b3JrLkxpZ2h0Q29kZUluc2lnaHRUZXN0Q2FzZTsKK2ltcG9ydCBvcmcuamV0YnJhaW5zLmFubm90YXRpb25zLk5vdE51bGw7CisKK3B1YmxpYyBjbGFzcyBFeHRyYWN0TWV0aG9kMTVUZXN0IGV4dGVuZHMgTGlnaHRDb2RlSW5zaWdodFRlc3RDYXNlIHsKKyAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEJBU0VfUEFUSCA9ICIvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZDE1LyI7CisKKyAgQE5vdE51bGwKKyAgQE92ZXJyaWRlCisgIHByb3RlY3RlZCBTdHJpbmcgZ2V0VGVzdERhdGFQYXRoKCkgeworICAgIHJldHVybiBKYXZhVGVzdFV0aWwuZ2V0SmF2YVRlc3REYXRhUGF0aCgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdENvZGVEdXBsaWNhdGVzV2l0aE11bHRPY2N1cmVuY2VzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgY29uZmlndXJlQnlGaWxlKEJBU0VfUEFUSCArIGdldFRlc3ROYW1lKGZhbHNlKSArICIuamF2YSIpOworICAgIGJvb2xlYW4gc3VjY2VzcyA9IEV4dHJhY3RNZXRob2RUZXN0LnBlcmZvcm1FeHRyYWN0TWV0aG9kKHRydWUsIHRydWUsIGdldEVkaXRvcigpLCBnZXRGaWxlKCksIGdldFByb2plY3QoKSk7CisgICAgYXNzZXJ0VHJ1ZShzdWNjZXNzKTsKKyAgICBjaGVja1Jlc3VsdEJ5RmlsZShCQVNFX1BBVEggKyBnZXRUZXN0TmFtZShmYWxzZSkgKyAiX2FmdGVyLmphdmEiKTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9yZWZhY3RvcmluZy9FeHRyYWN0TWV0aG9kT2JqZWN0VGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL3JlZmFjdG9yaW5nL0V4dHJhY3RNZXRob2RPYmplY3RUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzNjZDQzZQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9yZWZhY3RvcmluZy9FeHRyYWN0TWV0aG9kT2JqZWN0VGVzdC5qYXZhCkBAIC0wLDAgKzEsMTIzIEBACisvKgorICogVXNlcjogYW5uYQorICogRGF0ZTogMDYtTWF5LTIwMDgKKyAqLworcGFja2FnZSBjb20uaW50ZWxsaWoucmVmYWN0b3Jpbmc7CisKK2ltcG9ydCBjb20uaW50ZWxsaWouSmF2YVRlc3RVdGlsOworaW1wb3J0IGNvbS5pbnRlbGxpai5jb2RlSW5zaWdodC5UYXJnZXRFbGVtZW50VXRpbEJhc2U7CitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkuYXBwbGljYXRpb24uQXBwbGljYXRpb25NYW5hZ2VyOworaW1wb3J0IGNvbS5pbnRlbGxpai5wc2kuUHNpRWxlbWVudDsKK2ltcG9ydCBjb20uaW50ZWxsaWoucHNpLlBzaU1ldGhvZDsKK2ltcG9ydCBjb20uaW50ZWxsaWoucmVmYWN0b3JpbmcuZXh0cmFjdE1ldGhvZE9iamVjdC5FeHRyYWN0TWV0aG9kT2JqZWN0SGFuZGxlcjsKK2ltcG9ydCBjb20uaW50ZWxsaWoucmVmYWN0b3JpbmcuZXh0cmFjdE1ldGhvZE9iamVjdC5FeHRyYWN0TWV0aG9kT2JqZWN0UHJvY2Vzc29yOworaW1wb3J0IG9yZy5qZXRicmFpbnMuYW5ub3RhdGlvbnMuTm90TnVsbDsKKworcHVibGljIGNsYXNzIEV4dHJhY3RNZXRob2RPYmplY3RUZXN0IGV4dGVuZHMgTGlnaHRSZWZhY3RvcmluZ1Rlc3RDYXNlIHsKKyAgQE5vdE51bGwKKyAgQE92ZXJyaWRlCisgIHByb3RlY3RlZCBTdHJpbmcgZ2V0VGVzdERhdGFQYXRoKCkgeworICAgIHJldHVybiBKYXZhVGVzdFV0aWwuZ2V0SmF2YVRlc3REYXRhUGF0aCgpOworICB9CisKKyAgcHJpdmF0ZSB2b2lkIGRvVGVzdCgpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdCh0cnVlKTsKKyAgfQorCisgIHByaXZhdGUgdm9pZCBkb1Rlc3QoZmluYWwgYm9vbGVhbiBjcmVhdGVJbm5lckNsYXNzKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBmaW5hbCBTdHJpbmcgdGVzdE5hbWUgPSBnZXRUZXN0TmFtZShmYWxzZSk7CisgICAgY29uZmlndXJlQnlGaWxlKCIvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZE9iamVjdC8iICsgdGVzdE5hbWUgKyAiLmphdmEiKTsKKyAgICBQc2lFbGVtZW50IGVsZW1lbnQgPSBUYXJnZXRFbGVtZW50VXRpbEJhc2UuZmluZFRhcmdldEVsZW1lbnQobXlFZGl0b3IsIFRhcmdldEVsZW1lbnRVdGlsQmFzZS5FTEVNRU5UX05BTUVfQUNDRVBURUQpOworICAgIGFzc2VydFRydWUoZWxlbWVudCBpbnN0YW5jZW9mIFBzaU1ldGhvZCk7CisgICAgZmluYWwgUHNpTWV0aG9kIG1ldGhvZCA9IChQc2lNZXRob2QpIGVsZW1lbnQ7CisKKyAgICBmaW5hbCBFeHRyYWN0TWV0aG9kT2JqZWN0UHJvY2Vzc29yIHByb2Nlc3NvciA9CisgICAgICBuZXcgRXh0cmFjdE1ldGhvZE9iamVjdFByb2Nlc3NvcihnZXRQcm9qZWN0KCksIGdldEVkaXRvcigpLCBtZXRob2QuZ2V0Qm9keSgpLmdldFN0YXRlbWVudHMoKSwgIklubmVyQ2xhc3MiKTsKKyAgICBmaW5hbCBFeHRyYWN0TWV0aG9kT2JqZWN0UHJvY2Vzc29yLk15RXh0cmFjdE1ldGhvZFByb2Nlc3NvciBleHRyYWN0UHJvY2Vzc29yID0gcHJvY2Vzc29yLmdldEV4dHJhY3RQcm9jZXNzb3IoKTsKKyAgICBwcm9jZXNzb3Iuc2V0Q3JlYXRlSW5uZXJDbGFzcyhjcmVhdGVJbm5lckNsYXNzKTsKKyAgICBleHRyYWN0UHJvY2Vzc29yLnNldFNob3dFcnJvckRpYWxvZ3MoZmFsc2UpOworICAgIGV4dHJhY3RQcm9jZXNzb3IucHJlcGFyZSgpOworICAgIGV4dHJhY3RQcm9jZXNzb3IudGVzdFByZXBhcmUoKTsKKworICAgIEFwcGxpY2F0aW9uTWFuYWdlci5nZXRBcHBsaWNhdGlvbigpLnJ1bldyaXRlQWN0aW9uKG5ldyBSdW5uYWJsZSgpIHsKKyAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKKyAgICAgICAgRXh0cmFjdE1ldGhvZE9iamVjdEhhbmRsZXIucnVuKGdldFByb2plY3QoKSwgZ2V0RWRpdG9yKCksIHByb2Nlc3NvciwgZXh0cmFjdFByb2Nlc3Nvcik7CisgICAgICB9CisgICAgfSk7CisKKworICAgIGNoZWNrUmVzdWx0QnlGaWxlKCIvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZE9iamVjdC8iICsgdGVzdE5hbWUgKyAiLmphdmEiICsgIi5hZnRlciIpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFN0YXRpYygpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdCgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFN0YXRpY1R5cGVQYXJhbXMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RTdGF0aWNUeXBlUGFyYW1zUmV0dXJuKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0VHlwZVBhcmFtc1JldHVybigpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdCgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFR5cGVQYXJhbXMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RNZXRob2RJbkhpZXJhcmNoeSgpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdCgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFF1YWxpZmllcigpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdCgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFZhcmFyZ3MoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RGaWVsZFVzYWdlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0TWV0aG9kSW5IaWVyYXJjaHlSZXR1cm4oKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RTdGF0aWNUeXBlUGFyYW1zUmV0dXJuTm9EZWxldGUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RTdGF0aWNUeXBlUGFyYW1zUmVjdXJzaXZlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0UmVjdXJzaW9uKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0V3JhcFdpdGhPYmplY3QoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoZmFsc2UpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFdyYXBXaXRoT2JqZWN0UmVjdXJzaXZlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KGZhbHNlKTsKKyAgfQorICAKKyAgcHVibGljIHZvaWQgdGVzdFdpdGhQcml2YXRlTWV0aG9kVXNlZCgpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdCgpOworICB9CisgIAorICBwdWJsaWMgdm9pZCB0ZXN0V2l0aFByaXZhdGVNZXRob2RVc2VkMSgpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdCgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFdpdGhQcml2YXRlTWV0aG9kV2hpY2hDYW50QmVNb3ZlZCgpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdCgpOworICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovcmVmYWN0b3JpbmcvRXh0cmFjdE1ldGhvZE9iamVjdFdpdGhNdWx0aXBsZUV4aXRQb2ludHNUZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovcmVmYWN0b3JpbmcvRXh0cmFjdE1ldGhvZE9iamVjdFdpdGhNdWx0aXBsZUV4aXRQb2ludHNUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjI3ODdjYgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9yZWZhY3RvcmluZy9FeHRyYWN0TWV0aG9kT2JqZWN0V2l0aE11bHRpcGxlRXhpdFBvaW50c1Rlc3QuamF2YQpAQCAtMCwwICsxLDEyOSBAQAorLyoKKyAqIFVzZXI6IGFubmEKKyAqIERhdGU6IDA2LU1heS0yMDA4CisgKi8KK3BhY2thZ2UgY29tLmludGVsbGlqLnJlZmFjdG9yaW5nOworCitpbXBvcnQgY29tLmludGVsbGlqLkphdmFUZXN0VXRpbDsKK2ltcG9ydCBjb20uaW50ZWxsaWouY29kZUluc2lnaHQuQ29kZUluc2lnaHRVdGlsOworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLmFwcGxpY2F0aW9uLkFwcGxpY2F0aW9uTWFuYWdlcjsKK2ltcG9ydCBjb20uaW50ZWxsaWoucHNpLlBzaUVsZW1lbnQ7CitpbXBvcnQgY29tLmludGVsbGlqLnBzaS5Qc2lFeHByZXNzaW9uOworaW1wb3J0IGNvbS5pbnRlbGxpai5yZWZhY3RvcmluZy5leHRyYWN0TWV0aG9kT2JqZWN0LkV4dHJhY3RNZXRob2RPYmplY3RIYW5kbGVyOworaW1wb3J0IGNvbS5pbnRlbGxpai5yZWZhY3RvcmluZy5leHRyYWN0TWV0aG9kT2JqZWN0LkV4dHJhY3RNZXRob2RPYmplY3RQcm9jZXNzb3I7CitpbXBvcnQgb3JnLmpldGJyYWlucy5hbm5vdGF0aW9ucy5Ob3ROdWxsOworCitwdWJsaWMgY2xhc3MgRXh0cmFjdE1ldGhvZE9iamVjdFdpdGhNdWx0aXBsZUV4aXRQb2ludHNUZXN0IGV4dGVuZHMgTGlnaHRSZWZhY3RvcmluZ1Rlc3RDYXNlIHsKKyAgQE5vdE51bGwKKyAgQE92ZXJyaWRlCisgIHByb3RlY3RlZCBTdHJpbmcgZ2V0VGVzdERhdGFQYXRoKCkgeworICAgIHJldHVybiBKYXZhVGVzdFV0aWwuZ2V0SmF2YVRlc3REYXRhUGF0aCgpOworICB9CisKKyAgcHJpdmF0ZSB2b2lkIGRvVGVzdCgpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdCh0cnVlKTsKKyAgfQorCisgIHByaXZhdGUgdm9pZCBkb1Rlc3QoZmluYWwgYm9vbGVhbiBjcmVhdGVJbm5lckNsYXNzKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBmaW5hbCBTdHJpbmcgdGVzdE5hbWUgPSBnZXRUZXN0TmFtZShmYWxzZSk7CisgICAgY29uZmlndXJlQnlGaWxlKCIvcmVmYWN0b3JpbmcvZXh0cmFjdE1ldGhvZE9iamVjdC9tdWx0aXBsZUV4aXRQb2ludHMvIiArIHRlc3ROYW1lICsgIi5qYXZhIik7CisgICAgaW50IHN0YXJ0T2Zmc2V0ID0gbXlFZGl0b3IuZ2V0U2VsZWN0aW9uTW9kZWwoKS5nZXRTZWxlY3Rpb25TdGFydCgpOworICAgIGludCBlbmRPZmZzZXQgPSBteUVkaXRvci5nZXRTZWxlY3Rpb25Nb2RlbCgpLmdldFNlbGVjdGlvbkVuZCgpOworCisgICAgZmluYWwgUHNpRWxlbWVudFtdIGVsZW1lbnRzOworICAgIFBzaUV4cHJlc3Npb24gZXhwciA9IENvZGVJbnNpZ2h0VXRpbC5maW5kRXhwcmVzc2lvbkluUmFuZ2UobXlGaWxlLCBzdGFydE9mZnNldCwgZW5kT2Zmc2V0KTsKKyAgICBpZiAoZXhwciAhPSBudWxsKSB7CisgICAgICBlbGVtZW50cyA9IG5ldyBQc2lFbGVtZW50W117ZXhwcn07CisgICAgfQorICAgIGVsc2UgeworICAgICAgZWxlbWVudHMgPSBDb2RlSW5zaWdodFV0aWwuZmluZFN0YXRlbWVudHNJblJhbmdlKG15RmlsZSwgc3RhcnRPZmZzZXQsIGVuZE9mZnNldCk7CisgICAgfQorCisgICAgZmluYWwgRXh0cmFjdE1ldGhvZE9iamVjdFByb2Nlc3NvciBwcm9jZXNzb3IgPQorICAgICAgbmV3IEV4dHJhY3RNZXRob2RPYmplY3RQcm9jZXNzb3IoZ2V0UHJvamVjdCgpLCBnZXRFZGl0b3IoKSwgZWxlbWVudHMsICJJbm5lciIpOworICAgIGZpbmFsIEV4dHJhY3RNZXRob2RPYmplY3RQcm9jZXNzb3IuTXlFeHRyYWN0TWV0aG9kUHJvY2Vzc29yIGV4dHJhY3RQcm9jZXNzb3IgPSBwcm9jZXNzb3IuZ2V0RXh0cmFjdFByb2Nlc3NvcigpOworICAgIGV4dHJhY3RQcm9jZXNzb3Iuc2V0U2hvd0Vycm9yRGlhbG9ncyhmYWxzZSk7CisgICAgZXh0cmFjdFByb2Nlc3Nvci5wcmVwYXJlKCk7CisgICAgZXh0cmFjdFByb2Nlc3Nvci50ZXN0UHJlcGFyZSgpOworICAgIHByb2Nlc3Nvci5zZXRDcmVhdGVJbm5lckNsYXNzKGNyZWF0ZUlubmVyQ2xhc3MpOworCisKKyAgICBBcHBsaWNhdGlvbk1hbmFnZXIuZ2V0QXBwbGljYXRpb24oKS5ydW5Xcml0ZUFjdGlvbihuZXcgUnVubmFibGUoKSB7CisgICAgICBwdWJsaWMgdm9pZCBydW4oKSB7CisgICAgICAgIEV4dHJhY3RNZXRob2RPYmplY3RIYW5kbGVyLnJ1bihnZXRQcm9qZWN0KCksIGdldEVkaXRvcigpLCBwcm9jZXNzb3IsIGV4dHJhY3RQcm9jZXNzb3IpOworICAgICAgfQorICAgIH0pOworCisKKyAgICBjaGVja1Jlc3VsdEJ5RmlsZSgiL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2RPYmplY3QvbXVsdGlwbGVFeGl0UG9pbnRzLyIgKyB0ZXN0TmFtZSArICIuamF2YSIgKyAiLmFmdGVyIik7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0U3RhdGljSW5uZXIoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RJbnB1dE91dHB1dCgpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdCgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdE91dHB1dFZhcnNSZWZlcmVuY2VzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0TXVsdGlsaW5lRGVjbGFyYXRpb25zKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0Q29uZGl0aW9uYWxFeGl0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0T3V0cHV0VmFyaWFibGUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RVbmlxdWVPYmplY3ROYW1lKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0RXh0cmFjdGVkQXNzaWdubWVudEV4cHJlc3Npb24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RFeHRyYWN0ZWRJbmNFeHByZXNzaW9uKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KCk7CisgIH0KKworCisgIHB1YmxpYyB2b2lkIHRlc3RXaXRoSW5uZXJDbGFzc2VzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0Tm9uQ2Fub25pY2FsTmFtaW5nKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0RXh0cmFjdEZyb21Bbm9ueW1vdXMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RFeHRyYWN0RnJvbUlmU3RhdGVtZW50SW5zaWRlQW5vbnltb3VzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0Q29uZGl0aW9uYWxFeGl0V2l0aG91dENvZGVCbG9jaygpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdCgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFJldHVybkV4aXRTdGF0ZW1lbnQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RGcm9tU3RhdGljQ29udGV4dCgpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdCgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEJhdGNoVXBkYXRlQ2F1c2VkQnlGb3JtYXR0ZXIoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoKTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL3JlZmFjdG9yaW5nL0V4dHJhY3RNZXRob2RUZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovcmVmYWN0b3JpbmcvRXh0cmFjdE1ldGhvZFRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNzgyNTlmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL3JlZmFjdG9yaW5nL0V4dHJhY3RNZXRob2RUZXN0LmphdmEKQEAgLTAsMCArMSw2OTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwMC0yMDEyIEpldEJyYWlucyBzLnIuby4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCitwYWNrYWdlIGNvbS5pbnRlbGxpai5yZWZhY3RvcmluZzsKKworaW1wb3J0IGNvbS5pbnRlbGxpai5KYXZhVGVzdFV0aWw7CitpbXBvcnQgY29tLmludGVsbGlqLmNvZGVJbnNpZ2h0LkNvZGVJbnNpZ2h0VXRpbDsKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS5lZGl0b3IuRWRpdG9yOworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLnByb2plY3QuUHJvamVjdDsKK2ltcG9ydCBjb20uaW50ZWxsaWoucHNpLlBzaURvY3VtZW50TWFuYWdlcjsKK2ltcG9ydCBjb20uaW50ZWxsaWoucHNpLlBzaUVsZW1lbnQ7CitpbXBvcnQgY29tLmludGVsbGlqLnBzaS5Qc2lFeHByZXNzaW9uOworaW1wb3J0IGNvbS5pbnRlbGxpai5wc2kuUHNpRmlsZTsKK2ltcG9ydCBjb20uaW50ZWxsaWoucHNpLmNvZGVTdHlsZS5Db2RlU3R5bGVTZXR0aW5nczsKK2ltcG9ydCBjb20uaW50ZWxsaWoucHNpLmNvZGVTdHlsZS5Db2RlU3R5bGVTZXR0aW5nc01hbmFnZXI7CitpbXBvcnQgY29tLmludGVsbGlqLnJlZmFjdG9yaW5nLmV4dHJhY3RNZXRob2QuRXh0cmFjdE1ldGhvZEhhbmRsZXI7CitpbXBvcnQgY29tLmludGVsbGlqLnJlZmFjdG9yaW5nLmV4dHJhY3RNZXRob2QuRXh0cmFjdE1ldGhvZFByb2Nlc3NvcjsKK2ltcG9ydCBjb20uaW50ZWxsaWoucmVmYWN0b3JpbmcuZXh0cmFjdE1ldGhvZC5QcmVwYXJlRmFpbGVkRXhjZXB0aW9uOworaW1wb3J0IGNvbS5pbnRlbGxpai5yZWZhY3RvcmluZy5pbnRyb2R1Y2VWYXJpYWJsZS5JbnRyb2R1Y2VWYXJpYWJsZUJhc2U7CitpbXBvcnQgY29tLmludGVsbGlqLnJlZmFjdG9yaW5nLnV0aWwuZHVwbGljYXRlcy5NYXRjaDsKK2ltcG9ydCBjb20uaW50ZWxsaWoudGVzdEZyYW1ld29yay5MaWdodENvZGVJbnNpZ2h0VGVzdENhc2U7CitpbXBvcnQgY29tLmludGVsbGlqLnV0aWwuSW5jb3JyZWN0T3BlcmF0aW9uRXhjZXB0aW9uOworaW1wb3J0IG9yZy5qZXRicmFpbnMuYW5ub3RhdGlvbnMuTm9uTmxzOworaW1wb3J0IG9yZy5qZXRicmFpbnMuYW5ub3RhdGlvbnMuTm90TnVsbDsKKworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitwdWJsaWMgY2xhc3MgRXh0cmFjdE1ldGhvZFRlc3QgZXh0ZW5kcyBMaWdodENvZGVJbnNpZ2h0VGVzdENhc2UgeworICBATm9uTmxzIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBCQVNFX1BBVEggPSAiL3JlZmFjdG9yaW5nL2V4dHJhY3RNZXRob2QvIjsKKyAgcHJpdmF0ZSBib29sZWFuIG15Q2F0Y2hPbk5ld0xpbmUgPSB0cnVlOworCisgIEBOb3ROdWxsCisgIEBPdmVycmlkZQorICBwcm90ZWN0ZWQgU3RyaW5nIGdldFRlc3REYXRhUGF0aCgpIHsKKyAgICByZXR1cm4gSmF2YVRlc3RVdGlsLmdldEphdmFUZXN0RGF0YVBhdGgoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RFeGl0UG9pbnRzMSgpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvRXhpdFBvaW50c1Rlc3QodHJ1ZSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0RXhpdFBvaW50czIoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RFeGl0UG9pbnRzMygpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvRXhpdFBvaW50c1Rlc3QodHJ1ZSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0RXhpdFBvaW50czQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb0V4aXRQb2ludHNUZXN0KGZhbHNlKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RFeGl0UG9pbnRzSW5zaWRlTG9vcCgpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvRXhpdFBvaW50c1Rlc3QodHJ1ZSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0RXhpdFBvaW50czUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RFeGl0UG9pbnRzNigpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvRXhpdFBvaW50c1Rlc3QoZmFsc2UpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEV4aXRQb2ludHM3KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9FeGl0UG9pbnRzVGVzdChmYWxzZSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0RXhpdFBvaW50czgoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb0V4aXRQb2ludHNUZXN0KGZhbHNlKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RFeGl0UG9pbnRzOSgpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvRXhpdFBvaW50c1Rlc3QoZmFsc2UpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdENvbnRpbnVlSW5zaWRlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0Qm9vbGVhbkV4cHJlc3Npb24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RTY3I2MjQxKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0U2NyNzA5MSgpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdCgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFNjcjEwNDY0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0U2NyOTg1MigpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdCgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFVzZVZhckFmdGVyVHJ5KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0T25lQnJhbmNoQXNzaWdubWVudCgpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdCgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEV4dHJhY3RGcm9tQ29kZUJsb2NrKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0VW51c2VkSW5pdGlhbGl6ZWRWYXIoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RUcnlGaW5hbGx5KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0RmluYWxseSgpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdCgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEV4dHJhY3RGcm9tQW5vbnltb3VzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0U0NSMTIyNDUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RMZWF2ZUNvbW1lbnRzV2hlbkV4cHJlc3Npb25FeHRyYWN0ZWQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RTQ1IxNTgxNSgpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdCgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFNDUjI3ODg3KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0U0NSMjg0MjcoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RUcnlGaW5hbGx5SW5zaWRlRm9yKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0RXh0cmFjdEZyb21UcnlGaW5hbGx5KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0RXh0cmFjdEFzc2lnbm1lbnRFeHByZXNzaW9uKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0RXh0cmFjdEFzc2lnbm1lbnRFeHByZXNzaW9uRnJvbVN0YXRlbWVudCgpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdCgpOworICB9CisKKyAgcHVibGljIHZvaWQgX3Rlc3RFeHRyYWN0RnJvbVRyeUZpbmFsbHkyKCkgdGhyb3dzIEV4Y2VwdGlvbiB7ICAvLyBJREVBREVWLTExODQ0CisgICAgZG9UZXN0KCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0TGVzeWFCdWcoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBteUNhdGNoT25OZXdMaW5lID0gZmFsc2U7CisgICAgZG9UZXN0KCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0Rm9yRWFjaCgpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdCgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEFub25Jbm5lcigpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdCgpOworICB9CisKKworICBwdWJsaWMgdm9pZCB0ZXN0Q29uZmxpY3RpbmdBbm9ueW1vdXMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RWYXJEZWNsQWZ0ZXJFeHByZXNzaW9uRXh0cmFjdGlvbigpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdCgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEZpbmFsUGFyYW1Vc2VkSW5zaWRlQW5vbigpIHRocm93cyBFeGNlcHRpb24geworICAgIENvZGVTdHlsZVNldHRpbmdzTWFuYWdlci5nZXRTZXR0aW5ncyhnZXRQcm9qZWN0KCkpLkdFTkVSQVRFX0ZJTkFMX1BBUkFNRVRFUlMgPSBmYWxzZTsKKyAgICBkb1Rlc3QoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3ROb25GaW5hbFdyaXRhYmxlUGFyYW0oKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBDb2RlU3R5bGVTZXR0aW5nc01hbmFnZXIuZ2V0U2V0dGluZ3MoZ2V0UHJvamVjdCgpKS5HRU5FUkFURV9GSU5BTF9QQVJBTUVURVJTID0gdHJ1ZTsKKyAgICBkb1Rlc3QoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RDb2RlRHVwbGljYXRlc1dpdGhDb250aW51ZSgpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvRHVwbGljYXRlc1Rlc3QoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RDb2RlRHVwbGljYXRlc1dpdGhDb250aW51ZU5vUmV0dXJuKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9EdXBsaWNhdGVzVGVzdCgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdENvZGVEdXBsaWNhdGVzV2l0aFN0YXRpY0luaXRpYWxpemVyKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9EdXBsaWNhdGVzVGVzdCgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEV4cHJlc3Npb25EdXBsaWNhdGVzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9EdXBsaWNhdGVzVGVzdCgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdENvZGVEdXBsaWNhdGVzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9EdXBsaWNhdGVzVGVzdCgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdENvZGVEdXBsaWNhdGVzMigpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvRHVwbGljYXRlc1Rlc3QoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RDb2RlRHVwbGljYXRlczMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb0R1cGxpY2F0ZXNUZXN0KCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0Q29kZUR1cGxpY2F0ZXM0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9EdXBsaWNhdGVzVGVzdCgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdENvZGVEdXBsaWNhdGVzNSgpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvRHVwbGljYXRlc1Rlc3QoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RDb2RlRHVwbGljYXRlc1dpdGhPdXRwdXRWYWx1ZSgpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvRHVwbGljYXRlc1Rlc3QoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RDb2RlRHVwbGljYXRlc1dpdGhPdXRwdXRWYWx1ZTEoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb0R1cGxpY2F0ZXNUZXN0KCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0Q29kZUR1cGxpY2F0ZXNXaXRoTXVsdEV4aXRQb2ludHMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb0R1cGxpY2F0ZXNUZXN0KCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0Q29kZUR1cGxpY2F0ZXNXaXRoUmV0dXJuKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9EdXBsaWNhdGVzVGVzdCgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdENvZGVEdXBsaWNhdGVzV2l0aFJldHVybjIoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb0R1cGxpY2F0ZXNUZXN0KCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0Q29kZUR1cGxpY2F0ZXNXaXRoUmV0dXJuSW5Bbm9ueW1vdXMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb0R1cGxpY2F0ZXNUZXN0KCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0Q29kZUR1cGxpY2F0ZXNXaXRoQ29tbWVudHMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb0R1cGxpY2F0ZXNUZXN0KCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0U0NSMzI5MjQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb0R1cGxpY2F0ZXNUZXN0KCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0RmluYWxPdXRwdXRWYXIoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb0R1cGxpY2F0ZXNUZXN0KCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0SWRlYURldjIyOTEoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RPeGZvcmRCdWcoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RJREVBREVWMzMzNjgoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RJbmxpbmVDcmVhdGVkMlJldHVybkxvY2FsVmFyaWFibGVzT25seSgpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdCgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEd1YXJkTWV0aG9kRHVwbGljYXRlcygpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvRHVwbGljYXRlc1Rlc3QoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RHdWFyZE1ldGhvZER1cGxpY2F0ZXMxKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9EdXBsaWNhdGVzVGVzdCgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEluc3RhbmNlTWV0aG9kRHVwbGljYXRlc0luU3RhdGljQ29udGV4dCgpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvRHVwbGljYXRlc1Rlc3QoKTsKKyAgfQorCisKKyAgcHVibGljIHZvaWQgdGVzdExWYWx1ZU5vdER1cGxpY2F0ZSgpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvRHVwbGljYXRlc1Rlc3QoKTsKKyAgfQorCisgIHByb3RlY3RlZCB2b2lkIGRvRHVwbGljYXRlc1Rlc3QoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QodHJ1ZSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0RXh0cmFjdEZyb21GaW5hbGx5KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0Tm9TaG9ydENpcmN1aXQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RTdG9wRm9sZGluZygpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdCgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFN0b3BGb2xkaW5nUG9zdGZpeEluc2lkZSgpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdCgpOworICB9CisKKworICBwdWJsaWMgdm9pZCB0ZXN0SURFQURFVjExNzQ4KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0SURFQURFVjExODQ4KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0SURFQURFVjExMDM2KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0TG9jYWxDbGFzcygpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvUHJlcGFyZUVycm9yVGVzdCgiQ2Fubm90IGV4dHJhY3QgbWV0aG9kIGJlY2F1c2UgdGhlIHNlbGVjdGVkIGNvZGUgZnJhZ21lbnQgdXNlcyBsb2NhbCBjbGFzc2VzIGRlZmluZWQgb3V0c2lkZSBvZiB0aGUgZnJhZ21lbnQiKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RMb2NhbENsYXNzVXNhZ2UoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1ByZXBhcmVFcnJvclRlc3QoIkNhbm5vdCBleHRyYWN0IG1ldGhvZCBiZWNhdXNlIHRoZSBzZWxlY3RlZCBjb2RlIGZyYWdtZW50IGRlZmluZXMgbG9jYWwgY2xhc3NlcyB1c2VkIG91dHNpZGUgb2YgdGhlIGZyYWdtZW50Iik7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0U3RhdGljSW1wb3J0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0VGhpc0NhbGwoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RDaGFpbmVkQ29uc3RydWN0b3IoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb0NoYWluZWRDb25zdHJ1Y3RvclRlc3QoZmFsc2UpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdENoYWluZWRDb25zdHJ1Y3RvckR1cGxpY2F0ZXMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb0NoYWluZWRDb25zdHJ1Y3RvclRlc3QodHJ1ZSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0Q2hhaW5lZENvbnN0cnVjdG9ySW52YWxpZER1cGxpY2F0ZXMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb0NoYWluZWRDb25zdHJ1Y3RvclRlc3QodHJ1ZSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0UmV0dXJuRnJvbVRyeSgpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdCgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdExvY2FsQ2xhc3NEZWZpbmVkSW5NZXRob2RXaGljaElzVXNlZExhdGVyKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9QcmVwYXJlRXJyb3JUZXN0KCJDYW5ub3QgZXh0cmFjdCBtZXRob2QgYmVjYXVzZSB0aGUgc2VsZWN0ZWQgY29kZSBmcmFnbWVudCBkZWZpbmVzIHZhcmlhYmxlIG9mIGxvY2FsIGNsYXNzIHR5cGUgdXNlZCBvdXRzaWRlIG9mIHRoZSBmcmFnbWVudCIpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEZvcmNlQnJhY2VzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZmluYWwgQ29kZVN0eWxlU2V0dGluZ3Mgc2V0dGluZ3MgPSBDb2RlU3R5bGVTZXR0aW5nc01hbmFnZXIuZ2V0U2V0dGluZ3MoZ2V0UHJvamVjdCgpKTsKKyAgICBpbnQgb2xkID0gc2V0dGluZ3MuSUZfQlJBQ0VfRk9SQ0U7CisgICAgc2V0dGluZ3MuSUZfQlJBQ0VfRk9SQ0UgPSBDb2RlU3R5bGVTZXR0aW5ncy5GT1JDRV9CUkFDRVNfQUxXQVlTOworICAgIHRyeSB7CisgICAgICBkb1Rlc3QoKTsKKyAgICB9CisgICAgZmluYWxseSB7CisgICAgICBzZXR0aW5ncy5JRl9CUkFDRV9GT1JDRSA9IG9sZDsKKyAgICB9CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0Q29uc3RhbnRDb25kaXRpb25zQWZmZWN0aW5nQ29udHJvbEZsb3coKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RDb25zdGFudENvbmRpdGlvbnNBZmZlY3RpbmdDb250cm9sRmxvdzEoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoKTsKKyAgfQorICBwdWJsaWMgdm9pZCB0ZXN0Tm90SW5pdGlhbGl6ZWRJbnNpZGVGaW5hbGx5KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0R2VuZXJpY3NQYXJhbWV0ZXJzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0VW51c2VkR2VuZXJpY3MoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RQYXJhbXNVc2VkSW5Mb2NhbENsYXNzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KCk7CisgIH0KKworICBwcml2YXRlIHZvaWQgZG9DaGFpbmVkQ29uc3RydWN0b3JUZXN0KGZpbmFsIGJvb2xlYW4gcmVwbGFjZUFsbER1cGxpY2F0ZXMpIHRocm93cyBFeGNlcHRpb24geworICAgIGNvbmZpZ3VyZUJ5RmlsZShCQVNFX1BBVEggKyBnZXRUZXN0TmFtZShmYWxzZSkgKyAiLmphdmEiKTsKKyAgICBib29sZWFuIHN1Y2Nlc3MgPSBwZXJmb3JtRXh0cmFjdE1ldGhvZCh0cnVlLCByZXBsYWNlQWxsRHVwbGljYXRlcywgZ2V0RWRpdG9yKCksIGdldEZpbGUoKSwgZ2V0UHJvamVjdCgpLCB0cnVlKTsKKyAgICBhc3NlcnRUcnVlKHN1Y2Nlc3MpOworICAgIGNoZWNrUmVzdWx0QnlGaWxlKEJBU0VfUEFUSCArIGdldFRlc3ROYW1lKGZhbHNlKSArICJfYWZ0ZXIuamF2YSIpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFJlYXNzaWduZWRWYXJBZnRlckNhbGwoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBmaW5hbCBDb2RlU3R5bGVTZXR0aW5ncyBzZXR0aW5ncyA9IENvZGVTdHlsZVNldHRpbmdzTWFuYWdlci5nZXRTZXR0aW5ncyhnZXRQcm9qZWN0KCkpOworICAgIGJvb2xlYW4gb2xkR2VuZXJhdGVGaW5hbExvY2FscyA9IHNldHRpbmdzLkdFTkVSQVRFX0ZJTkFMX0xPQ0FMUzsKKyAgICB0cnkgeworICAgICAgc2V0dGluZ3MuR0VORVJBVEVfRklOQUxfTE9DQUxTID0gdHJ1ZTsKKyAgICAgIGRvVGVzdCgpOworICAgIH0KKyAgICBmaW5hbGx5IHsKKyAgICAgIHNldHRpbmdzLkdFTkVSQVRFX0ZJTkFMX0xPQ0FMUyA9IG9sZEdlbmVyYXRlRmluYWxMb2NhbHM7CisgICAgfQorICB9CisKKyAgcHVibGljIHZvaWQgdGVzdE51bGxhYmxlQ2hlY2soKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoKTsKKyAgfQorICAKKyAgcHVibGljIHZvaWQgdGVzdE51bGxhYmxlQ2hlY2sxKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0TnVsbGFibGVDaGVja1ZvaWQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3ROdWxsYWJsZUNoZWNrRG9udE1pc3NGaW5hbCgpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdCgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFNpbXBsZUFycmF5QWNjZXNzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0QXJyYXlBY2Nlc3MoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RBcnJheUFjY2VzczEoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RBcnJheUFjY2Vzc1dpdGhMb2NhbEluZGV4KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0QXJyYXlBY2Nlc3NXaXRoRHVwbGljYXRlcygpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvRHVwbGljYXRlc1Rlc3QoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RWZXJib3NlQXJyYXlBY2Nlc3MoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RSZXR1cm5TdGF0ZW1lbnRGb2xkaW5nKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0V3JpdGVBcnJheUFjY2VzcygpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdCgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFNob3J0Q2lyY3VpdCgpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdCgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFJlY3Vyc2l2ZUNhbGxUb0V4dHJhY3RlZCgpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdCgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdENvZGVEdXBsaWNhdGVzVmFyYXJnc1Nob3VsZE5vdENoYW5nZVJldHVyblR5cGUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb0R1cGxpY2F0ZXNUZXN0KCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0UGFyYW1ldGVyc0Zyb21Bbm9ueW1vdXMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RDYXN0NFBhcmFtR2VuZXJhdGlvbigpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdCgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdE5lYXJDb21tZW50KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0Rm9sZEluV2hpbGUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3ROb25Gb2xkSW5JZkJvZHkoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RDb21wbGV4VHlwZVBhcmFtcygpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdCgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEV4dHJhY3RXaXRoTGVhZGluZ0NvbW1lbnQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RJbnZhbGlkUmVmZXJlbmNlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0UmVkdW5kYW50Q2FzdCgpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdCgpOworICB9CisgIAorICBwdWJsaWMgdm9pZCB0ZXN0RGlzYWJsZWRQYXJhbSgpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdERpc2FibGVkUGFyYW0oKTsKKyAgfSAKKworICBwdWJsaWMgdm9pZCB0ZXN0VHlwZVBhcmFtc0xpc3QoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RGcm9tTGFtYmRhQm9keSgpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdCgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdE9uZUxpbmVMYW1iZGEoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RNZXRob2QySW50ZXJmYWNlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0UGFyYW1EZXRlY3Rpb24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RTa2lwQ29tbWVudHMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RGaW5hbFBhcmFtczRMb2NhbENsYXNzZXMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RUd29Gcm9tVGhyZWVFcVN0YXRlbWVudHMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb0R1cGxpY2F0ZXNUZXN0KCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0Q2FzdFdoZW5EdXBsaWNhdGVSZXBsYWNlbWVudCgpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvRHVwbGljYXRlc1Rlc3QoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RDaGVja1F1YWxpZmllck1hcHBpbmcoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb0R1cGxpY2F0ZXNUZXN0KCk7CisgIH0KKworICBwcml2YXRlIHZvaWQgZG9UZXN0RGlzYWJsZWRQYXJhbSgpIHRocm93cyBQcmVwYXJlRmFpbGVkRXhjZXB0aW9uIHsKKyAgICBmaW5hbCBDb2RlU3R5bGVTZXR0aW5ncyBzZXR0aW5ncyA9IENvZGVTdHlsZVNldHRpbmdzTWFuYWdlci5nZXRTZXR0aW5ncyhnZXRQcm9qZWN0KCkpOworICAgIHNldHRpbmdzLkVMU0VfT05fTkVXX0xJTkUgPSB0cnVlOworICAgIHNldHRpbmdzLkNBVENIX09OX05FV19MSU5FID0gbXlDYXRjaE9uTmV3TGluZTsKKyAgICBjb25maWd1cmVCeUZpbGUoQkFTRV9QQVRIICsgZ2V0VGVzdE5hbWUoZmFsc2UpICsgIi5qYXZhIik7CisgICAgYm9vbGVhbiBzdWNjZXNzID0gcGVyZm9ybUV4dHJhY3RNZXRob2QodHJ1ZSwgdHJ1ZSwgZ2V0RWRpdG9yKCksIGdldEZpbGUoKSwgZ2V0UHJvamVjdCgpLCBmYWxzZSwgMCk7CisgICAgYXNzZXJ0VHJ1ZShzdWNjZXNzKTsKKyAgICBjaGVja1Jlc3VsdEJ5RmlsZShCQVNFX1BBVEggKyBnZXRUZXN0TmFtZShmYWxzZSkgKyAiX2FmdGVyLmphdmEiKTsKKyAgfQorCisgIHByaXZhdGUgdm9pZCBkb1ByZXBhcmVFcnJvclRlc3QoZmluYWwgU3RyaW5nIGV4cGVjdGVkTWVzc2FnZSkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgU3RyaW5nIGV4cGVjdGVkRXJyb3IgPSBudWxsOworICAgIHRyeSB7CisgICAgICBkb0V4aXRQb2ludHNUZXN0KGZhbHNlKTsKKyAgICB9CisgICAgY2F0Y2goUHJlcGFyZUZhaWxlZEV4Y2VwdGlvbiBleCkgeworICAgICAgZXhwZWN0ZWRFcnJvciA9IGV4LmdldE1lc3NhZ2UoKTsKKyAgICB9CisgICAgYXNzZXJ0RXF1YWxzKGV4cGVjdGVkTWVzc2FnZSwgZXhwZWN0ZWRFcnJvcik7CisgIH0KKworICBwcml2YXRlIHZvaWQgZG9FeGl0UG9pbnRzVGVzdChib29sZWFuIHNob3VsZFN1Y2NlZWQpIHRocm93cyBFeGNlcHRpb24geworICAgIFN0cmluZyBmaWxlTmFtZSA9IGdldFRlc3ROYW1lKGZhbHNlKSArICIuamF2YSI7CisgICAgY29uZmlndXJlQnlGaWxlKEJBU0VfUEFUSCArIGZpbGVOYW1lKTsKKyAgICBib29sZWFuIHN1Y2Nlc3MgPSBwZXJmb3JtQWN0aW9uKGZhbHNlLCBmYWxzZSk7CisgICAgYXNzZXJ0RXF1YWxzKHNob3VsZFN1Y2NlZWQsIHN1Y2Nlc3MpOworICB9CisKKyAgdm9pZCBkb1Rlc3QoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBmaW5hbCBDb2RlU3R5bGVTZXR0aW5ncyBzZXR0aW5ncyA9IENvZGVTdHlsZVNldHRpbmdzTWFuYWdlci5nZXRTZXR0aW5ncyhnZXRQcm9qZWN0KCkpOworICAgIHNldHRpbmdzLkVMU0VfT05fTkVXX0xJTkUgPSB0cnVlOworICAgIHNldHRpbmdzLkNBVENIX09OX05FV19MSU5FID0gbXlDYXRjaE9uTmV3TGluZTsKKyAgICBkb1Rlc3QodHJ1ZSk7CisgIH0KKworICBwcml2YXRlIHZvaWQgZG9UZXN0KGJvb2xlYW4gZHVwbGljYXRlcykgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgY29uZmlndXJlQnlGaWxlKEJBU0VfUEFUSCArIGdldFRlc3ROYW1lKGZhbHNlKSArICIuamF2YSIpOworICAgIGJvb2xlYW4gc3VjY2VzcyA9IHBlcmZvcm1BY3Rpb24odHJ1ZSwgZHVwbGljYXRlcyk7CisgICAgYXNzZXJ0VHJ1ZShzdWNjZXNzKTsKKyAgICBjaGVja1Jlc3VsdEJ5RmlsZShCQVNFX1BBVEggKyBnZXRUZXN0TmFtZShmYWxzZSkgKyAiX2FmdGVyLmphdmEiKTsKKyAgfQorCisgIHByaXZhdGUgc3RhdGljIGJvb2xlYW4gcGVyZm9ybUFjdGlvbihib29sZWFuIGRvUmVmYWN0b3IsIGJvb2xlYW4gcmVwbGFjZUFsbER1cGxpY2F0ZXMpIHRocm93cyBFeGNlcHRpb24geworICAgIHJldHVybiBwZXJmb3JtRXh0cmFjdE1ldGhvZChkb1JlZmFjdG9yLCByZXBsYWNlQWxsRHVwbGljYXRlcywgZ2V0RWRpdG9yKCksIGdldEZpbGUoKSwgZ2V0UHJvamVjdCgpKTsKKyAgfQorCisgIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBwZXJmb3JtRXh0cmFjdE1ldGhvZChib29sZWFuIGRvUmVmYWN0b3IsIGJvb2xlYW4gcmVwbGFjZUFsbER1cGxpY2F0ZXMsIEVkaXRvciBlZGl0b3IsIFBzaUZpbGUgZmlsZSwgUHJvamVjdCBwcm9qZWN0KQorICAgIHRocm93cyBQcmVwYXJlRmFpbGVkRXhjZXB0aW9uLCBJbmNvcnJlY3RPcGVyYXRpb25FeGNlcHRpb24geworICAgIHJldHVybiBwZXJmb3JtRXh0cmFjdE1ldGhvZChkb1JlZmFjdG9yLCByZXBsYWNlQWxsRHVwbGljYXRlcywgZWRpdG9yLCBmaWxlLCBwcm9qZWN0LCBmYWxzZSk7CisgIH0KKworICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gcGVyZm9ybUV4dHJhY3RNZXRob2QoYm9vbGVhbiBkb1JlZmFjdG9yLCBib29sZWFuIHJlcGxhY2VBbGxEdXBsaWNhdGVzLCBFZGl0b3IgZWRpdG9yLCBQc2lGaWxlIGZpbGUsIFByb2plY3QgcHJvamVjdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsIGJvb2xlYW4gZXh0cmFjdENoYWluZWRDb25zdHJ1Y3RvcikKKyAgICB0aHJvd3MgUHJlcGFyZUZhaWxlZEV4Y2VwdGlvbiwgSW5jb3JyZWN0T3BlcmF0aW9uRXhjZXB0aW9uIHsKKyAgICByZXR1cm4gcGVyZm9ybUV4dHJhY3RNZXRob2QoZG9SZWZhY3RvciwgcmVwbGFjZUFsbER1cGxpY2F0ZXMsIGVkaXRvciwgZmlsZSwgcHJvamVjdCwgZXh0cmFjdENoYWluZWRDb25zdHJ1Y3RvciwgbnVsbCk7CisgIH0KKworICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gcGVyZm9ybUV4dHJhY3RNZXRob2QoYm9vbGVhbiBkb1JlZmFjdG9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbGVhbiByZXBsYWNlQWxsRHVwbGljYXRlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVkaXRvciBlZGl0b3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQc2lGaWxlIGZpbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9qZWN0IHByb2plY3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaW5hbCBib29sZWFuIGV4dHJhY3RDaGFpbmVkQ29uc3RydWN0b3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQuLi4gZGlzYWJsZWRQYXJhbXMpCisgICAgdGhyb3dzIFByZXBhcmVGYWlsZWRFeGNlcHRpb24sIEluY29ycmVjdE9wZXJhdGlvbkV4Y2VwdGlvbiB7CisgICAgaW50IHN0YXJ0T2Zmc2V0ID0gZWRpdG9yLmdldFNlbGVjdGlvbk1vZGVsKCkuZ2V0U2VsZWN0aW9uU3RhcnQoKTsKKyAgICBpbnQgZW5kT2Zmc2V0ID0gZWRpdG9yLmdldFNlbGVjdGlvbk1vZGVsKCkuZ2V0U2VsZWN0aW9uRW5kKCk7CisKKyAgICBQc2lFbGVtZW50W10gZWxlbWVudHM7CisgICAgUHNpRXhwcmVzc2lvbiBleHByID0gQ29kZUluc2lnaHRVdGlsLmZpbmRFeHByZXNzaW9uSW5SYW5nZShmaWxlLCBzdGFydE9mZnNldCwgZW5kT2Zmc2V0KTsKKyAgICBpZiAoZXhwciAhPSBudWxsKSB7CisgICAgICBlbGVtZW50cyA9IG5ldyBQc2lFbGVtZW50W117ZXhwcn07CisgICAgfQorICAgIGVsc2UgeworICAgICAgZWxlbWVudHMgPSBDb2RlSW5zaWdodFV0aWwuZmluZFN0YXRlbWVudHNJblJhbmdlKGZpbGUsIHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXQpOworICAgIH0KKyAgICBpZiAoZWxlbWVudHMubGVuZ3RoID09IDApIHsKKyAgICAgIGZpbmFsIFBzaUV4cHJlc3Npb24gZXhwcmVzc2lvbiA9IEludHJvZHVjZVZhcmlhYmxlQmFzZS5nZXRTZWxlY3RlZEV4cHJlc3Npb24ocHJvamVjdCwgZmlsZSwgc3RhcnRPZmZzZXQsIGVuZE9mZnNldCk7CisgICAgICBpZiAoZXhwcmVzc2lvbiAhPSBudWxsKSB7CisgICAgICAgIGVsZW1lbnRzID0gbmV3IFBzaUVsZW1lbnRbXXtleHByZXNzaW9ufTsKKyAgICAgIH0KKyAgICB9CisgICAgYXNzZXJ0VHJ1ZShlbGVtZW50cy5sZW5ndGggPiAwKTsKKworICAgIGZpbmFsIEV4dHJhY3RNZXRob2RQcm9jZXNzb3IgcHJvY2Vzc29yID0KKyAgICAgIG5ldyBFeHRyYWN0TWV0aG9kUHJvY2Vzc29yKHByb2plY3QsIGVkaXRvciwgZWxlbWVudHMsIG51bGwsICJFeHRyYWN0IE1ldGhvZCIsICJuZXdNZXRob2QiLCBudWxsKTsKKyAgICBwcm9jZXNzb3Iuc2V0U2hvd0Vycm9yRGlhbG9ncyhmYWxzZSk7CisgICAgcHJvY2Vzc29yLnNldENoYWluZWRDb25zdHJ1Y3RvcihleHRyYWN0Q2hhaW5lZENvbnN0cnVjdG9yKTsKKworICAgIGlmICghcHJvY2Vzc29yLnByZXBhcmUoKSkgeworICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGlmIChkb1JlZmFjdG9yKSB7CisgICAgICBwcm9jZXNzb3IudGVzdFByZXBhcmUoKTsKKyAgICAgIGlmIChkaXNhYmxlZFBhcmFtcyAhPSBudWxsKSB7CisgICAgICAgIGZvciAoaW50IHBhcmFtIDogZGlzYWJsZWRQYXJhbXMpIHsKKyAgICAgICAgICBwcm9jZXNzb3IuZG9Ob3RQYXNzUGFyYW1ldGVyKHBhcmFtKTsKKyAgICAgICAgfQorICAgICAgfQorICAgICAgRXh0cmFjdE1ldGhvZEhhbmRsZXIucnVuKHByb2plY3QsIGVkaXRvciwgcHJvY2Vzc29yKTsKKyAgICB9CisKKyAgICBpZiAocmVwbGFjZUFsbER1cGxpY2F0ZXMpIHsKKyAgICAgIGZpbmFsIExpc3Q8TWF0Y2g+IGR1cGxpY2F0ZXMgPSBwcm9jZXNzb3IuZ2V0RHVwbGljYXRlcygpOworICAgICAgZm9yIChmaW5hbCBNYXRjaCBtYXRjaCA6IGR1cGxpY2F0ZXMpIHsKKyAgICAgICAgaWYgKCFtYXRjaC5nZXRNYXRjaFN0YXJ0KCkuaXNWYWxpZCgpIHx8ICFtYXRjaC5nZXRNYXRjaEVuZCgpLmlzVmFsaWQoKSkgY29udGludWU7CisgICAgICAgIFBzaURvY3VtZW50TWFuYWdlci5nZXRJbnN0YW5jZShwcm9qZWN0KS5jb21taXRBbGxEb2N1bWVudHMoKTsKKyAgICAgICAgcHJvY2Vzc29yLnByb2Nlc3NNYXRjaChtYXRjaCk7CisgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9yZWZhY3RvcmluZy9FeHRyYWN0U3VwZXJDbGFzc1Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9yZWZhY3RvcmluZy9FeHRyYWN0U3VwZXJDbGFzc1Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNTQxYWY2Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL3JlZmFjdG9yaW5nL0V4dHJhY3RTdXBlckNsYXNzVGVzdC5qYXZhCkBAIC0wLDAgKzEsMjA4IEBACisvKgorICogQ29weXJpZ2h0IDIwMDAtMjAxMiBKZXRCcmFpbnMgcy5yLm8uCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworcGFja2FnZSBjb20uaW50ZWxsaWoucmVmYWN0b3Jpbmc7CisKK2ltcG9ydCBjb20uaW50ZWxsaWouSmF2YVRlc3RVdGlsOworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLmZpbGVFZGl0b3IuRmlsZURvY3VtZW50TWFuYWdlcjsKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS5yb290cy5MYW5ndWFnZUxldmVsUHJvamVjdEV4dGVuc2lvbjsKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS52ZnMuTG9jYWxGaWxlU3lzdGVtOworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLnZmcy5WaXJ0dWFsRmlsZTsKK2ltcG9ydCBjb20uaW50ZWxsaWoucG9tLmphdmEuTGFuZ3VhZ2VMZXZlbDsKK2ltcG9ydCBjb20uaW50ZWxsaWoucHNpLio7CitpbXBvcnQgY29tLmludGVsbGlqLnBzaS5pbXBsLnNvdXJjZS5Qb3N0cHJvY2Vzc1JlZm9ybWF0dGluZ0FzcGVjdDsKK2ltcG9ydCBjb20uaW50ZWxsaWoucHNpLnNlYXJjaC5Qcm9qZWN0U2NvcGU7CitpbXBvcnQgY29tLmludGVsbGlqLnJlZmFjdG9yaW5nLmV4dHJhY3RTdXBlcmNsYXNzLkV4dHJhY3RTdXBlckNsYXNzUHJvY2Vzc29yOworaW1wb3J0IGNvbS5pbnRlbGxpai5yZWZhY3RvcmluZy5tZW1iZXJQdWxsVXAuUHVsbFVwQ29uZmxpY3RzVXRpbDsKK2ltcG9ydCBjb20uaW50ZWxsaWoucmVmYWN0b3JpbmcubWVtYmVyUHVsbFVwLlB1bGxVcEhlbHBlcjsKK2ltcG9ydCBjb20uaW50ZWxsaWoucmVmYWN0b3JpbmcudXRpbC5Eb2NDb21tZW50UG9saWN5OworaW1wb3J0IGNvbS5pbnRlbGxpai5yZWZhY3RvcmluZy51dGlsLmNsYXNzTWVtYmVycy5JbnRlcmZhY2VDb250YWlubWVudFZlcmlmaWVyOworaW1wb3J0IGNvbS5pbnRlbGxpai5yZWZhY3RvcmluZy51dGlsLmNsYXNzTWVtYmVycy5NZW1iZXJJbmZvOworaW1wb3J0IGNvbS5pbnRlbGxpai50ZXN0RnJhbWV3b3JrLklkZWFUZXN0VXRpbDsKK2ltcG9ydCBjb20uaW50ZWxsaWoudGVzdEZyYW1ld29yay5Qc2lUZXN0VXRpbDsKK2ltcG9ydCBjb20uaW50ZWxsaWoudXRpbC5jb250YWluZXJzLkhhc2hTZXQ7CitpbXBvcnQgY29tLmludGVsbGlqLnV0aWwuY29udGFpbmVycy5NdWx0aU1hcDsKK2ltcG9ydCBvcmcuamV0YnJhaW5zLmFubm90YXRpb25zLk5vbk5sczsKKworaW1wb3J0IGphdmEuaW8uRmlsZTsKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlzOworCisvKioKKyAqIEBhdXRob3IgeW9sZQorICovCitwdWJsaWMgY2xhc3MgRXh0cmFjdFN1cGVyQ2xhc3NUZXN0IGV4dGVuZHMgUmVmYWN0b3JpbmdUZXN0Q2FzZSB7CisgIHB1YmxpYyB2b2lkIHRlc3RGaW5hbEZpZWxkSW5pdGlhbGl6YXRpb24oKSB0aHJvd3MgRXhjZXB0aW9uIHsgICAvLyBJREVBREVWLTE5NzA0CisgICAgZG9UZXN0KCJUZXN0IiwgIlRlc3RTdWJjbGFzcyIsIG5ldyBSZWZhY3RvcmluZ1Rlc3RVdGlsLk1lbWJlckRlc2NyaXB0b3IoIlgiLCBQc2lDbGFzcy5jbGFzcyksCisgICAgICAgICAgIG5ldyBSZWZhY3RvcmluZ1Rlc3RVdGlsLk1lbWJlckRlc2NyaXB0b3IoIngiLCBQc2lGaWVsZC5jbGFzcykpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEZpZWxkSW5pdGlhbGl6YXRpb25XaXRoQ2FzdCgpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdCgiVGVzdCIsICJUZXN0U3ViY2xhc3MiLCBuZXcgUmVmYWN0b3JpbmdUZXN0VXRpbC5NZW1iZXJEZXNjcmlwdG9yKCJ4IiwgUHNpRmllbGQuY2xhc3MpKTsKKyAgfQorCisgICBwdWJsaWMgdm9pZCB0ZXN0TWV0aG9kVHlwZVBhcmFtZXRlcigpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdCgiVGVzdCIsICJUZXN0U3ViY2xhc3MiLCBuZXcgUmVmYWN0b3JpbmdUZXN0VXRpbC5NZW1iZXJEZXNjcmlwdG9yKCJtIiwgUHNpTWV0aG9kLmNsYXNzKSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0Q29uZmxpY3RVc2luZ1ByaXZhdGVNZXRob2QoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoIlRlc3QiLCAiVGVzdFN1YmNsYXNzIiwKKyAgICAgICAgICAgbmV3IFN0cmluZ1tdIHsiTWV0aG9kIDxiPjxjb2RlPlRlc3QuZm9vKCk8L2NvZGU+PC9iPiBpcyBwcml2YXRlIGFuZCB3aWxsIG5vdCBiZSBhY2Nlc3NpYmxlIGZyb20gbWV0aG9kIDxiPjxjb2RlPngoKTwvY29kZT48L2I+LiJ9LAorICAgICAgICAgICBuZXcgUmVmYWN0b3JpbmdUZXN0VXRpbC5NZW1iZXJEZXNjcmlwdG9yKCJ4IiwgUHNpTWV0aG9kLmNsYXNzKSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0Q29uZmxpY3RNb3ZlQWJzdHJhY3RXaXRoUHJpdmF0ZU1ldGhvZCgpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdCgiVGVzdCIsICJUZXN0U3ViY2xhc3MiLAorICAgICAgICAgICBuZXcgU3RyaW5nW10geyJNZXRob2QgPGI+PGNvZGU+eCgpPC9jb2RlPjwvYj4gdXNlcyBtZXRob2QgPGI+PGNvZGU+VGVzdC54eCgpPC9jb2RlPjwvYj4gd2hpY2ggd29uJ3QgYmUgYWNjZXNzaWJsZSBmcm9tIHRoZSBzdWJjbGFzcy4ifSwKKyAgICAgICAgICAgbmV3IFJlZmFjdG9yaW5nVGVzdFV0aWwuTWVtYmVyRGVzY3JpcHRvcigieCIsIFBzaU1ldGhvZC5jbGFzcywgdHJ1ZSksCisgICAgICAgICAgIG5ldyBSZWZhY3RvcmluZ1Rlc3RVdGlsLk1lbWJlckRlc2NyaXB0b3IoInh4IiwgUHNpTWV0aG9kLmNsYXNzKSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0Q29uZmxpY3RBYnN0cmFjdFBhY2thZ2VMb2NhbE1ldGhvZCgpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdCgiYS5UZXN0IiwgIlRlc3RTdWJjbGFzcyIsCisgICAgICAgICAgIG5ldyBTdHJpbmdbXSB7IkNhbid0IG1ha2UgbWV0aG9kIDxiPjxjb2RlPngoKTwvY29kZT48L2I+IGFic3RyYWN0IGFzIGl0IHdvbid0IGJlIGFjY2Vzc2libGUgZnJvbSB0aGUgc3ViY2xhc3MuIn0sCisgICAgICAgICAgICJiIiwKKyAgICAgICAgICAgbmV3IFJlZmFjdG9yaW5nVGVzdFV0aWwuTWVtYmVyRGVzY3JpcHRvcigieCIsIFBzaU1ldGhvZC5jbGFzcywgdHJ1ZSkpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdENvbmZsaWN0VXNpbmdQYWNrYWdlTG9jYWxNZXRob2QoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoImEuVGVzdCIsICJUZXN0U3ViY2xhc3MiLAorICAgICAgICAgICBuZXcgU3RyaW5nW10geyJtZXRob2QgPGI+PGNvZGU+U3VwLmZvbygpPC9jb2RlPjwvYj4gd29uJ3QgYmUgYWNjZXNzaWJsZSJ9LAorICAgICAgICAgICAiYiIsCisgICAgICAgICAgIG5ldyBSZWZhY3RvcmluZ1Rlc3RVdGlsLk1lbWJlckRlc2NyaXB0b3IoIngiLCBQc2lNZXRob2QuY2xhc3MpKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RDb25mbGljdFVzaW5nUGFja2FnZUxvY2FsU3VwZXJDbGFzcygpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdCgiYS5UZXN0IiwgIlRlc3RTdWJjbGFzcyIsCisgICAgICAgICAgIG5ldyBTdHJpbmdbXSB7ImNsYXNzIDxiPjxjb2RlPmEuU3VwPC9jb2RlPjwvYj4gd29uJ3QgYmUgYWNjZXNzaWJsZSBmcm9tIHBhY2thZ2UgPGI+PGNvZGU+YjwvY29kZT48L2I+In0sCisgICAgICAgICAgICJiIiwKKyAgICAgICAgICAgbmV3IFJlZmFjdG9yaW5nVGVzdFV0aWwuTWVtYmVyRGVzY3JpcHRvcigiZm9vIiwgUHNpTWV0aG9kLmNsYXNzKSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0Tm9Db25mbGljdFVzaW5nUHJvdGVjdGVkTWV0aG9kRnJvbVN1cGVyKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KCJUZXN0IiwgIlRlc3RTdWJjbGFzcyIsCisgICAgICAgICAgIG5ldyBSZWZhY3RvcmluZ1Rlc3RVdGlsLk1lbWJlckRlc2NyaXB0b3IoIngiLCBQc2lNZXRob2QuY2xhc3MpKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RQYXJhbWV0ZXJOYW1lRXF1YWxzRmllbGROYW1lKCkgdGhyb3dzIEV4Y2VwdGlvbiB7ICAgIC8vIElERUFERVYtMTA2MjkKKyAgICBkb1Rlc3QoIlRlc3QiLCAiVGVzdFN1YmNsYXNzIiwgbmV3IFJlZmFjdG9yaW5nVGVzdFV0aWwuTWVtYmVyRGVzY3JpcHRvcigiYSIsIFBzaUZpZWxkLmNsYXNzKSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0RXh0ZW5kc0xpYnJhcnlDbGFzcygpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdCgiVGVzdCIsICJUZXN0U3ViY2xhc3MiKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RSZXF1aXJlZEltcG9ydFJlbW92ZWQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoImZvby5pbXBsLkIiLCAiQkltcGwiLCBuZXcgUmVmYWN0b3JpbmdUZXN0VXRpbC5NZW1iZXJEZXNjcmlwdG9yKCJnZXRJbnN0YW5jZSIsIFBzaU1ldGhvZC5jbGFzcykpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFN1YnN0aXR1dGVHZW5lcmljcygpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdCgiQiIsICJBQiIpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEV4dGVuZHNMaXN0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KCJUZXN0IiwgIlRlc3RTdWJjbGFzcyIsIG5ldyBSZWZhY3RvcmluZ1Rlc3RVdGlsLk1lbWJlckRlc2NyaXB0b3IoIkxpc3QiLCBQc2lDbGFzcy5jbGFzcykpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEltcG9ydHNDb3JydXB0aW9uKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KCJwMS5BIiwgIkFBIiwgbmV3IFJlZmFjdG9yaW5nVGVzdFV0aWwuTWVtYmVyRGVzY3JpcHRvcigibTEiLCBQc2lNZXRob2QuY2xhc3MpKTsKKyAgfQorCisgIEBPdmVycmlkZQorICBwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24geworICAgIHN1cGVyLnNldFVwKCk7CisgICAgTGFuZ3VhZ2VMZXZlbFByb2plY3RFeHRlbnNpb24uZ2V0SW5zdGFuY2UobXlKYXZhRmFjYWRlLmdldFByb2plY3QoKSkuc2V0TGFuZ3VhZ2VMZXZlbChMYW5ndWFnZUxldmVsLkpES18xXzUpOworICB9CisKKyAgQE5vbk5scworICBwcml2YXRlIFN0cmluZyBnZXRSb290KCkgeworICAgIHJldHVybiBKYXZhVGVzdFV0aWwuZ2V0SmF2YVRlc3REYXRhUGF0aCgpICsgIi9yZWZhY3RvcmluZy9leHRyYWN0U3VwZXJDbGFzcy8iICsgZ2V0VGVzdE5hbWUodHJ1ZSk7CisgIH0KKworICBwcml2YXRlIHZvaWQgZG9UZXN0KEBOb25ObHMgZmluYWwgU3RyaW5nIGNsYXNzTmFtZSwgQE5vbk5scyBmaW5hbCBTdHJpbmcgbmV3Q2xhc3NOYW1lLAorICAgICAgICAgICAgICAgICAgICAgIFJlZmFjdG9yaW5nVGVzdFV0aWwuTWVtYmVyRGVzY3JpcHRvci4uLiBtZW1iZXJzVG9GaW5kKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoY2xhc3NOYW1lLCBuZXdDbGFzc05hbWUsIG51bGwsIG1lbWJlcnNUb0ZpbmQpOworICB9CisKKyAgcHJpdmF0ZSB2b2lkIGRvVGVzdChATm9uTmxzIGZpbmFsIFN0cmluZyBjbGFzc05hbWUsIEBOb25ObHMgZmluYWwgU3RyaW5nIG5ld0NsYXNzTmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICBTdHJpbmdbXSBjb25mbGljdHMsCisgICAgICAgICAgICAgICAgICAgICAgUmVmYWN0b3JpbmdUZXN0VXRpbC5NZW1iZXJEZXNjcmlwdG9yLi4uIG1lbWJlcnNUb0ZpbmQpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdChjbGFzc05hbWUsIG5ld0NsYXNzTmFtZSwgY29uZmxpY3RzLCBudWxsLCBtZW1iZXJzVG9GaW5kKTsKKyAgfQorCisgIHByaXZhdGUgdm9pZCBkb1Rlc3QoQE5vbk5scyBmaW5hbCBTdHJpbmcgY2xhc3NOYW1lLAorICAgICAgICAgICAgICAgICAgICAgIEBOb25ObHMgZmluYWwgU3RyaW5nIG5ld0NsYXNzTmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICBTdHJpbmdbXSBjb25mbGljdHMsCisgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIHRhcmdldFBhY2thZ2VOYW1lLAorICAgICAgICAgICAgICAgICAgICAgIFJlZmFjdG9yaW5nVGVzdFV0aWwuTWVtYmVyRGVzY3JpcHRvci4uLiBtZW1iZXJzVG9GaW5kKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBTdHJpbmcgcm9vdEJlZm9yZSA9IGdldFJvb3QoKSArICIvYmVmb3JlIjsKKyAgICBQc2lUZXN0VXRpbC5yZW1vdmVBbGxSb290cyhteU1vZHVsZSwgSWRlYVRlc3RVdGlsLmdldE1vY2tKZGsxNCgpKTsKKyAgICBmaW5hbCBWaXJ0dWFsRmlsZSByb290RGlyID0gUHNpVGVzdFV0aWwuY3JlYXRlVGVzdFByb2plY3RTdHJ1Y3R1cmUobXlQcm9qZWN0LCBteU1vZHVsZSwgcm9vdEJlZm9yZSwgbXlGaWxlc1RvRGVsZXRlKTsKKyAgICBQc2lDbGFzcyBwc2lDbGFzcyA9IG15SmF2YUZhY2FkZS5maW5kQ2xhc3MoY2xhc3NOYW1lLCBQcm9qZWN0U2NvcGUuZ2V0QWxsU2NvcGUobXlQcm9qZWN0KSk7CisgICAgYXNzZXJ0Tm90TnVsbChwc2lDbGFzcyk7CisgICAgZmluYWwgTWVtYmVySW5mb1tdIG1lbWJlcnMgPSBSZWZhY3RvcmluZ1Rlc3RVdGlsLmZpbmRNZW1iZXJzKHBzaUNsYXNzLCBtZW1iZXJzVG9GaW5kKTsKKyAgICBQc2lEaXJlY3RvcnkgdGFyZ2V0RGlyZWN0b3J5OworICAgIGlmICh0YXJnZXRQYWNrYWdlTmFtZSA9PSBudWxsKSB7CisgICAgICB0YXJnZXREaXJlY3RvcnkgPSBwc2lDbGFzcy5nZXRDb250YWluaW5nRmlsZSgpLmdldENvbnRhaW5pbmdEaXJlY3RvcnkoKTsKKyAgICB9IGVsc2UgeworICAgICAgZmluYWwgUHNpUGFja2FnZSBhUGFja2FnZSA9IG15SmF2YUZhY2FkZS5maW5kUGFja2FnZSh0YXJnZXRQYWNrYWdlTmFtZSk7CisgICAgICBhc3NlcnROb3ROdWxsKGFQYWNrYWdlKTsKKyAgICAgIHRhcmdldERpcmVjdG9yeSA9IGFQYWNrYWdlLmdldERpcmVjdG9yaWVzKClbMF07CisgICAgfQorICAgIEV4dHJhY3RTdXBlckNsYXNzUHJvY2Vzc29yIHByb2Nlc3NvciA9IG5ldyBFeHRyYWN0U3VwZXJDbGFzc1Byb2Nlc3NvcihteVByb2plY3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldERpcmVjdG9yeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3Q2xhc3NOYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwc2lDbGFzcywgbWVtYmVycywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFsc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBEb2NDb21tZW50UG9saWN5PFBzaUNvbW1lbnQ+KERvY0NvbW1lbnRQb2xpY3kuQVNJUykpOworICAgIGZpbmFsIFBzaVBhY2thZ2UgdGFyZ2V0UGFja2FnZTsKKyAgICBpZiAodGFyZ2V0RGlyZWN0b3J5ICE9IG51bGwpIHsKKyAgICAgIHRhcmdldFBhY2thZ2UgPSBKYXZhRGlyZWN0b3J5U2VydmljZS5nZXRJbnN0YW5jZSgpLmdldFBhY2thZ2UodGFyZ2V0RGlyZWN0b3J5KTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICB0YXJnZXRQYWNrYWdlID0gbnVsbDsKKyAgICB9CisgICAgZmluYWwgUHNpQ2xhc3Mgc3VwZXJDbGFzcyA9IHBzaUNsYXNzLmdldEV4dGVuZHNMaXN0VHlwZXMoKS5sZW5ndGggPiAwID8gcHNpQ2xhc3MuZ2V0U3VwZXJDbGFzcygpIDogbnVsbDsKKyAgICBmaW5hbCBNdWx0aU1hcDxQc2lFbGVtZW50LCBTdHJpbmc+IGNvbmZsaWN0c01hcCA9CisgICAgICBQdWxsVXBDb25mbGljdHNVdGlsLmNoZWNrQ29uZmxpY3RzKG1lbWJlcnMsIHBzaUNsYXNzLCBzdXBlckNsYXNzLCB0YXJnZXRQYWNrYWdlLCB0YXJnZXREaXJlY3RvcnksIG5ldyBJbnRlcmZhY2VDb250YWlubWVudFZlcmlmaWVyKCkgeworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIGJvb2xlYW4gY2hlY2tlZEludGVyZmFjZXNDb250YWluKFBzaU1ldGhvZCBwc2lNZXRob2QpIHsKKyAgICAgICAgICByZXR1cm4gUHVsbFVwSGVscGVyLmNoZWNrZWRJbnRlcmZhY2VzQ29udGFpbihBcnJheXMuYXNMaXN0KG1lbWJlcnMpLCBwc2lNZXRob2QpOworICAgICAgICB9CisgICAgICB9LCBmYWxzZSk7CisgICAgaWYgKGNvbmZsaWN0cyAhPSBudWxsKSB7CisgICAgICBpZiAoY29uZmxpY3RzTWFwLmlzRW1wdHkoKSkgeworICAgICAgICBmYWlsKCJDb25mbGljdHMgd2VyZSBub3QgZGV0ZWN0ZWQiKTsKKyAgICAgIH0KKyAgICAgIGZpbmFsIEhhc2hTZXQ8U3RyaW5nPiBleHBlY3RlZENvbmZsaWN0cyA9IG5ldyBIYXNoU2V0PFN0cmluZz4oQXJyYXlzLmFzTGlzdChjb25mbGljdHMpKTsKKyAgICAgIGZpbmFsIEhhc2hTZXQ8U3RyaW5nPiBhY3R1YWxDb25mbGljdHMgPSBuZXcgSGFzaFNldDxTdHJpbmc+KGNvbmZsaWN0c01hcC52YWx1ZXMoKSk7CisgICAgICBhc3NlcnRFcXVhbHMoZXhwZWN0ZWRDb25mbGljdHMuc2l6ZSgpLCBhY3R1YWxDb25mbGljdHMuc2l6ZSgpKTsKKyAgICAgIGZvciAoU3RyaW5nIGFjdHVhbENvbmZsaWN0IDogYWN0dWFsQ29uZmxpY3RzKSB7CisgICAgICAgIGlmICghZXhwZWN0ZWRDb25mbGljdHMuY29udGFpbnMoYWN0dWFsQ29uZmxpY3QpKSB7CisgICAgICAgICAgZmFpbCgiVW5leHBlY3RlZCBjb25mbGljdDogIiArIGFjdHVhbENvbmZsaWN0KTsKKyAgICAgICAgfQorICAgICAgfQorICAgIH0gZWxzZSBpZiAoIWNvbmZsaWN0c01hcC5pc0VtcHR5KCkpIHsKKyAgICAgIGZhaWwoIlVuZXhwZWN0ZWQgY29uZmxpY3RzISEhIik7CisgICAgfQorICAgIHByb2Nlc3Nvci5ydW4oKTsKKyAgICBQc2lEb2N1bWVudE1hbmFnZXIuZ2V0SW5zdGFuY2UobXlQcm9qZWN0KS5jb21taXRBbGxEb2N1bWVudHMoKTsKKyAgICBGaWxlRG9jdW1lbnRNYW5hZ2VyLmdldEluc3RhbmNlKCkuc2F2ZUFsbERvY3VtZW50cygpOworCisgICAgU3RyaW5nIHJvb3RBZnRlciA9IGdldFJvb3QoKSArICIvYWZ0ZXIiOworICAgIFZpcnR1YWxGaWxlIHJvb3REaXIyID0gTG9jYWxGaWxlU3lzdGVtLmdldEluc3RhbmNlKCkuZmluZEZpbGVCeVBhdGgocm9vdEFmdGVyLnJlcGxhY2UoRmlsZS5zZXBhcmF0b3JDaGFyLCAnLycpKTsKKyAgICBteVByb2plY3QuZ2V0Q29tcG9uZW50KFBvc3Rwcm9jZXNzUmVmb3JtYXR0aW5nQXNwZWN0LmNsYXNzKS5kb1Bvc3Rwb25lZEZvcm1hdHRpbmcoKTsKKyAgICBJZGVhVGVzdFV0aWwuYXNzZXJ0RGlyZWN0b3JpZXNFcXVhbChyb290RGlyMiwgcm9vdERpciwgSWRlYVRlc3RVdGlsLkNWU19GSUxFX0ZJTFRFUik7CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9yZWZhY3RvcmluZy9GaW5kTWV0aG9kRHVwbGljYXRlc0Jhc2VUZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovcmVmYWN0b3JpbmcvRmluZE1ldGhvZER1cGxpY2F0ZXNCYXNlVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRlYTA4ZDEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovcmVmYWN0b3JpbmcvRmluZE1ldGhvZER1cGxpY2F0ZXNCYXNlVGVzdC5qYXZhCkBAIC0wLDAgKzEsNTQgQEAKKy8qCisgKiBVc2VyOiBhbm5hCisgKiBEYXRlOiAyMi1KdWwtMjAwOAorICovCitwYWNrYWdlIGNvbS5pbnRlbGxpai5yZWZhY3RvcmluZzsKKworaW1wb3J0IGNvbS5pbnRlbGxpai5KYXZhVGVzdFV0aWw7CitpbXBvcnQgY29tLmludGVsbGlqLmFuYWx5c2lzLkFuYWx5c2lzU2NvcGU7CitpbXBvcnQgY29tLmludGVsbGlqLmNvZGVJbnNpZ2h0LlRhcmdldEVsZW1lbnRVdGlsQmFzZTsKK2ltcG9ydCBjb20uaW50ZWxsaWoucHNpLlBzaUVsZW1lbnQ7CitpbXBvcnQgY29tLmludGVsbGlqLnBzaS5Qc2lNZW1iZXI7CitpbXBvcnQgY29tLmludGVsbGlqLnJlZmFjdG9yaW5nLnV0aWwuZHVwbGljYXRlcy5NZXRob2REdXBsaWNhdGVzSGFuZGxlcjsKK2ltcG9ydCBjb20uaW50ZWxsaWoudGVzdEZyYW1ld29yay5MaWdodENvZGVJbnNpZ2h0VGVzdENhc2U7CitpbXBvcnQgY29tLmludGVsbGlqLnV0aWwudWkuVUlVdGlsOworaW1wb3J0IG9yZy5qZXRicmFpbnMuYW5ub3RhdGlvbnMuTm90TnVsbDsKKworcHVibGljIGFic3RyYWN0IGNsYXNzIEZpbmRNZXRob2REdXBsaWNhdGVzQmFzZVRlc3QgZXh0ZW5kcyBMaWdodENvZGVJbnNpZ2h0VGVzdENhc2UgeworICBATm90TnVsbAorICBAT3ZlcnJpZGUKKyAgcHJvdGVjdGVkIFN0cmluZyBnZXRUZXN0RGF0YVBhdGgoKSB7CisgICAgcmV0dXJuIEphdmFUZXN0VXRpbC5nZXRKYXZhVGVzdERhdGFQYXRoKCk7CisgIH0KKworICBwcm90ZWN0ZWQgdm9pZCBkb1Rlc3QoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QodHJ1ZSk7CisgIH0KKworICBwcm90ZWN0ZWQgdm9pZCBkb1Rlc3QoZmluYWwgYm9vbGVhbiBzaG91bGRTdWNjZWVkKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBmaW5hbCBTdHJpbmcgZmlsZVBhdGggPSBnZXRUZXN0RmlsZVBhdGgoKTsKKyAgICBjb25maWd1cmVCeUZpbGUoZmlsZVBhdGgpOworICAgIGZpbmFsIFBzaUVsZW1lbnQgdGFyZ2V0RWxlbWVudCA9IFRhcmdldEVsZW1lbnRVdGlsQmFzZS5maW5kVGFyZ2V0RWxlbWVudChnZXRFZGl0b3IoKSwgVGFyZ2V0RWxlbWVudFV0aWxCYXNlLkVMRU1FTlRfTkFNRV9BQ0NFUFRFRCk7CisgICAgYXNzZXJ0VHJ1ZSgiPGNhcmV0PiBpcyBub3Qgb24gbWV0aG9kIG5hbWUiLCB0YXJnZXRFbGVtZW50IGluc3RhbmNlb2YgUHNpTWVtYmVyKTsKKyAgICBmaW5hbCBQc2lNZW1iZXIgcHNpTWV0aG9kID0gKFBzaU1lbWJlcil0YXJnZXRFbGVtZW50OworCisgICAgdHJ5IHsKKyAgICAgIE1ldGhvZER1cGxpY2F0ZXNIYW5kbGVyLmludm9rZU9uU2NvcGUoZ2V0UHJvamVjdCgpLCBwc2lNZXRob2QsIG5ldyBBbmFseXNpc1Njb3BlKGdldEZpbGUoKSkpOworICAgIH0KKyAgICBjYXRjaCAoUnVudGltZUV4Y2VwdGlvbiBlKSB7CisgICAgICBpZiAoc2hvdWxkU3VjY2VlZCkgeworICAgICAgICBmYWlsKCJkdXBsaWNhdGVzIHdlcmUgbm90IGZvdW5kIik7CisgICAgICB9CisgICAgICByZXR1cm47CisgICAgfQorICAgIFVJVXRpbC5kaXNwYXRjaEFsbEludm9jYXRpb25FdmVudHMoKTsKKyAgICBpZiAoc2hvdWxkU3VjY2VlZCkgeworICAgICAgY2hlY2tSZXN1bHRCeUZpbGUoZmlsZVBhdGggKyAiLmFmdGVyIik7CisgICAgfQorICAgIGVsc2UgeworICAgICAgZmFpbCgiZHVwbGljYXRlcyBmb3VuZCIpOworICAgIH0KKyAgfQorCisgIHByb3RlY3RlZCBhYnN0cmFjdCBTdHJpbmcgZ2V0VGVzdEZpbGVQYXRoKCk7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL3JlZmFjdG9yaW5nL0ZpbmRNZXRob2REdXBsaWNhdGVzTWlzY1Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9yZWZhY3RvcmluZy9GaW5kTWV0aG9kRHVwbGljYXRlc01pc2NUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTE0YTRkNAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9yZWZhY3RvcmluZy9GaW5kTWV0aG9kRHVwbGljYXRlc01pc2NUZXN0LmphdmEKQEAgLTAsMCArMSwxMDQgQEAKKy8qCisgKiBVc2VyOiBhbm5hCisgKiBEYXRlOiAyMi1KdWwtMjAwOAorICovCitwYWNrYWdlIGNvbS5pbnRlbGxpai5yZWZhY3RvcmluZzsKKworcHVibGljIGNsYXNzIEZpbmRNZXRob2REdXBsaWNhdGVzTWlzY1Rlc3QgZXh0ZW5kcyBGaW5kTWV0aG9kRHVwbGljYXRlc0Jhc2VUZXN0IHsKKyAgQE92ZXJyaWRlCisgIHByb3RlY3RlZCBTdHJpbmcgZ2V0VGVzdEZpbGVQYXRoKCkgeworICAgIHJldHVybiAiL3JlZmFjdG9yaW5nL21ldGhvZER1cGxpY2F0ZXNNaXNjLyIgKyBnZXRUZXN0TmFtZShmYWxzZSkgKyAiLmphdmEiOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdENoYW5nZVJldHVyblR5cGVCeVBhcmFtZXRlcigpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdCgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdENoYW5nZVJldHVyblR5cGVCeUZpZWxkKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0TWV0aG9kVHlwZVBhcmFtZXRlcnMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RDaGFuZ2VSZXR1cm5UeXBlQnlSZXR1cm5FeHByZXNzaW9uKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0Q2hhbmdlUmV0dXJuVHlwZUJ5UmV0dXJuVmFsdWUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RQYXJhbWV0ZXJzTW9kaWZpY2F0aW9uKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0UGFzc0FycmF5MlZhcmFyZ01ldGhvZENhbGwoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3REZXRlY3ROYW1lQ29uZmxpY3RzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0Tm9EZXRlY3ROYW1lQ29uZmxpY3RzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0RGV0ZWN0TmFtZUNvbmZsaWN0c1dpdGhTdGF0aWMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RDb3JyZWN0VGhpcygpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdCgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFN1cGVySW5UaGVTYW1lQ29udGV4dCgpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdChmYWxzZSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0U3VwZXJJblRoZVNhbWVDb250ZXh0UXVhbGlmaWVkKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0SW5zZXJ0U3VwZXJRdWFsaWZpZXJXaGVuTmFtZUNvbmZsaWN0cygpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdCgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFVucXVhbGlmaWVkU3RhdGljQWNjZXNzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0Q2FuZGlkYXRlVW5xdWFsaWZpZWRTdGF0aWNBY2Nlc3MoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RWYXJhcmdzQWNjZXNzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0SW5jb3JyZWN0VmFyYXJnc0FjY2VzcygpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdCgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFZhclZhcmFyZ3NBY2Nlc3MoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RTa2lwTm90QWNjZXNzaWJsZSgpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdChmYWxzZSk7CisgIH0KKyAgCisgIHB1YmxpYyB2b2lkIHRlc3RRdWFsaWZpZXJzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0U2ltcGxlQ29uc3RhbnQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RBbm9ueW1vdXNJbml0aWFsaXplcigpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdCgpOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL3JlZmFjdG9yaW5nL0ZpbmRNZXRob2REdXBsaWNhdGVzVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL3JlZmFjdG9yaW5nL0ZpbmRNZXRob2REdXBsaWNhdGVzVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVjYWJmYjAKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovcmVmYWN0b3JpbmcvRmluZE1ldGhvZER1cGxpY2F0ZXNUZXN0LmphdmEKQEAgLTAsMCArMSwzMjUgQEAKKy8qCisgKiBVc2VyOiBhbm5hCisgKiBEYXRlOiAyOC1GZWItMjAwOAorICovCitwYWNrYWdlIGNvbS5pbnRlbGxpai5yZWZhY3RvcmluZzsKKworcHVibGljIGNsYXNzIEZpbmRNZXRob2REdXBsaWNhdGVzVGVzdCBleHRlbmRzIEZpbmRNZXRob2REdXBsaWNhdGVzQmFzZVRlc3R7CisKKyAgQE92ZXJyaWRlCisgIHByb3RlY3RlZCBTdHJpbmcgZ2V0VGVzdEZpbGVQYXRoKCkgeworICAgIHJldHVybiAiL3JlZmFjdG9yaW5nL21ldGhvZER1cGxpY2F0ZXMvIiArIGdldFRlc3ROYW1lKGZhbHNlKSArICIuamF2YSI7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0R2VubWV0aEV4dGVuZHMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RHZW5tZXRoRXh0ZW5kc0dlbmVyaWNFeGFjdCgpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdCgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEdlbm1ldGhFeHRlbmRzR2VuZXJpY1dpbGRjYXJkKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0R2VubWV0aEdlbmVyYWwoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RHZW5tZXRoU2V2ZXJhbCgpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdCgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdElkZW50aXR5Q29tcGxldGUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RJZGVudGl0eUNvbW1lbnQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RJZGVudGl0eU5hbWUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RJZGVudGl0eVdoaXRlc3BhY2UoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RMb2NhdGlvblF1YW50aXR5KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0TWFwcGluZ0FueTJQYXJhbWV0ZXJQcmltaXRpdmVMdmFsdWUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoZmFsc2UpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdE1hcHBpbmdFeHByZXNzaW9uMkZpZWxkKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KGZhbHNlKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RNYXBwaW5nRXhwcmVzc2lvbjJMb2NhbFZhcigpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdChmYWxzZSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0TWFwcGluZ0V4cHJlc3Npb24yUGFyYW1ldGVyTGl0ZXJhbHMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RNYXBwaW5nRXhwcmVzc2lvbjJQYXJhbWV0ZXJMVmFsdWVzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0TWFwcGluZ0V4cHJlc3Npb24yUGFyYW1ldGVyTXVsdGlwbGUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RNYXBwaW5nRXhwcmVzc2lvbjJUaGlzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KGZhbHNlKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RNYXBwaW5nRmllbGQyRmllbGQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RNYXBwaW5nRmllbGQyTG9jYWxWYXIoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoZmFsc2UpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdE1hcHBpbmdGaWVsZDJQYXJhbWV0ZXIoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RNYXBwaW5nRmllbGQyVGhpcygpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdChmYWxzZSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0TWFwcGluZ0xvY2FsVmFyMkV4cHJlc3Npb24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoZmFsc2UpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdE1hcHBpbmdMb2NhbFZhcjJGaWVsZCgpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdChmYWxzZSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0TWFwcGluZ0xvY2FsVmFyMkxvY2FsVmFyKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0TWFwcGluZ0xvY2FsVmFyMlBhcmFtZXRlcigpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdCgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdE1hcHBpbmdMb2NhbFZhcjJUaGlzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KGZhbHNlKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RNYXBwaW5nTWVtYmVyMk1lbWJlckRpZmZlcmVudCgpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdCgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdE1hcHBpbmdQYXJhbWV0ZXIyRmllbGQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoZmFsc2UpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdE1hcHBpbmdQYXJhbWV0ZXIyTG9jYWxWYXIoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoZmFsc2UpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdE1hcHBpbmdQYXJhbWV0ZXIyUGFyYW1ldGVyKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0TWFwcGluZ1BhcmFtZXRlcjJUaGlzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KGZhbHNlKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RNYXBwaW5nVGhpczJGaWVsZCgpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdChmYWxzZSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0TWFwcGluZ1RoaXMyTG9jYWxWYXIoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoZmFsc2UpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdE1hcHBpbmdUaGlzMlBhcmFtZXRlcigpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdCgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdE1hcHBpbmdUaGlzMlRoaXNEaWZmZXJlbnQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RNYXBwaW5nVGhpczJUaGlzUXVhbGlmaWVkKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0UG9zdEZyYWdtZW50VXNhZ2UoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RSZXR1cm5FeHByZXNzaW9uKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0UmV0dXJuRmllbGQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RSZXR1cm5Mb2NhbFZhcigpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdCgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFJldHVyblBhcmFtZXRlcigpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdCgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFJldHVyblRoaXMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RUeXBlc0V4dGVuZHMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RUeXBlc0V4dGVuZHNSZXR1cm4oKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RUeXBlc0V4dGVuZHNSZXR1cm5EaWZmZXJlbnRBcnJheSgpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdCgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFR5cGVzRXh0ZW5kc1JldHVybkRpZmZlcmVudEdlbmVyaWMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RUeXBlc0V4dGVuZHNSZXR1cm5EaWZmZXJlbnRQcmltaXRpdmUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RUeXBlc0V4dGVuZHNSZXR1cm5EaWZmZXJlbnRSZWZlcmVuY2UoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RUeXBlc0dlbmVyaWNzQ29uY3JldGUyQ29uY3JldGUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RUeXBlc0dlbmVyaWNzQ29uY3JldGUyQ29uY3JldGVEaWZmZXJlbnQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoZmFsc2UpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFR5cGVzR2VuZXJpY3NDb25jcmV0ZTJFeHRlbmRzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0VHlwZXNHZW5lcmljc0NvbmNyZXRlMkV4dGVuZHNEaWZmZXJlbnQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoZmFsc2UpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFR5cGVzR2VuZXJpY3NDb25jcmV0ZTJTdXBlcigpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdCgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFR5cGVzR2VuZXJpY3NDb25jcmV0ZTJTdXBlckRpZmZlcmVudCgpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdChmYWxzZSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0VHlwZXNHZW5lcmljc0NvbmNyZXRlMlJhdygpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdCgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFR5cGVzR2VuZXJpY3NSYXcyQ29uY3JldGUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RUeXBlc0dlbmVyaWNzUmF3MlJhdygpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdCgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFR5cGVzSW1wbGVtZW50cygpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdCgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFR5cGVzTm9SZWxhdGlvbnNoaXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoZmFsc2UpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEFub255bW91c1Rlc3QoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RBbm9ueW1vdXNUZXN0MSgpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdCgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEFub255bW91c1Rlc3QyKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KGZhbHNlKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RSZXR1cm5Wb2lkVGVzdCgpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdCgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFRoaXNSZWZlcmVuY2VUZXN0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0QWRkU3RhdGljVGVzdCgpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdCgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFN0YXRpY01ldGhvZFJlcGxhY2VtZW50KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0UmVmUmVwbGFjZW1lbnQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RSZWZSZXBsYWNlbWVudDEoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RSZXR1cm5WYXJpYWJsZSgpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdCgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFJldHVybkV4cHJlc3Npb25EaWZmZXJlbnQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoZmFsc2UpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFR5cGVJbmhlcml0YW5jZSgpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdCgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFR5cGVJbmhlcml0YW5jZTEoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoZmFsc2UpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFVudXNlZFBhcmFtZXRlcigpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdCgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFVudXNlZFBhcmFtZXRlcjEoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RJbmhlcml0YW5jZSgpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdCgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFZhcmFyZ3MoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3REZWNsYXJhdGlvblVzYWdlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KGZhbHNlKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RDaGFuZ2luZ1JldHVyblR5cGUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoKTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9yZWZhY3RvcmluZy9GaXhNZXRob2RKYXZhZG9jVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL3JlZmFjdG9yaW5nL0ZpeE1ldGhvZEphdmFkb2NUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGE4OTM3ZgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9yZWZhY3RvcmluZy9GaXhNZXRob2RKYXZhZG9jVGVzdC5qYXZhCkBAIC0wLDAgKzEsNTggQEAKK3BhY2thZ2UgY29tLmludGVsbGlqLnJlZmFjdG9yaW5nOworCitpbXBvcnQgY29tLmludGVsbGlqLkZpbGVTZXRUZXN0Q2FzZTsKK2ltcG9ydCBjb20uaW50ZWxsaWoucHNpLio7CitpbXBvcnQgY29tLmludGVsbGlqLnJlZmFjdG9yaW5nLnV0aWwuUmVmYWN0b3JpbmdVdGlsOworaW1wb3J0IGNvbS5pbnRlbGxpai51dGlsLmNvbnRhaW5lcnMuSGFzaFNldDsKK2ltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKKworaW1wb3J0IGphdmEuaW8uRmlsZTsKK2ltcG9ydCBqYXZhLm5ldC5VUkw7CitpbXBvcnQgamF2YS51dGlsLkFycmF5czsKK2ltcG9ydCBqYXZhLnV0aWwuU2V0OworCisvKioKKyAqICBAYXV0aG9yIGRzbAorICovCitwdWJsaWMgYWJzdHJhY3QgY2xhc3MgRml4TWV0aG9kSmF2YWRvY1Rlc3QgZXh0ZW5kcyBGaWxlU2V0VGVzdENhc2UgeworICBGaXhNZXRob2RKYXZhZG9jVGVzdCgpIHsKKyAgICBzdXBlcihmaW5kUGF0aCgpKTsKKyAgfQorCisgIHByaXZhdGUgc3RhdGljIFN0cmluZyBmaW5kUGF0aCgpIHsKKyAgICBmaW5hbCBVUkwgcmVzID0gRml4TWV0aG9kSmF2YWRvY1Rlc3QuY2xhc3MuZ2V0UmVzb3VyY2UoIi8iICsgRml4TWV0aG9kSmF2YWRvY1Rlc3QuY2xhc3MuZ2V0TmFtZSgpLnJlcGxhY2UoJy4nLCAnLycpICsgIi5jbGFzcyIpOworICAgIEZpbGUgZiA9IG5ldyBGaWxlKHJlcy5nZXRGaWxlKCkpOworICAgIFN0cmluZyByZXN1bHQgPSBmLmdldFBhcmVudCgpICsgRmlsZS5zZXBhcmF0b3JDaGFyICsgIm1ldGhvZEphdmFEb2NEYXRhIjsKKyAgICByZXN1bHQgPSByZXN1bHQucmVwbGFjZUFsbCgiY2xhc3NlcyIsICIiKTsKKyAgICByZXR1cm4gcmVzdWx0OworICB9CisKKyAgQE92ZXJyaWRlCisgIHB1YmxpYyBTdHJpbmcgdHJhbnNmb3JtKFN0cmluZyB0ZXN0TmFtZSwgU3RyaW5nW10gZGF0YSkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZmluYWwgUHNpTWFuYWdlciBtYW5hZ2VyID0gUHNpTWFuYWdlci5nZXRJbnN0YW5jZShteVByb2plY3QpOworICAgIGZpbmFsIFBzaUVsZW1lbnRGYWN0b3J5IGZhY3RvcnkgPSBKYXZhUHNpRmFjYWRlLmdldEluc3RhbmNlKG1hbmFnZXIuZ2V0UHJvamVjdCgpKS5nZXRFbGVtZW50RmFjdG9yeSgpOworICAgIGZpbmFsIFBzaU1ldGhvZCBtZXRob2QgPSBmYWN0b3J5LmNyZWF0ZU1ldGhvZEZyb21UZXh0KGRhdGFbMF0sIG51bGwpOworICAgIGZpbmFsIEhhc2hTZXQ8UHNpUGFyYW1ldGVyPiBuZXdQYXJhbWV0ZXJzID0gbmV3IEhhc2hTZXQ8UHNpUGFyYW1ldGVyPigpOworICAgIGlmIChkYXRhLmxlbmd0aCA9PSAyKSB7CisgICAgICBmaW5hbCBTdHJpbmdbXSBzdHJpbmdzID0gZGF0YVsxXS5zcGxpdCgiXFxzKyIpOworICAgICAgY29sbGVjdE5ld1BhcmFtZXRlcnMobWV0aG9kLCBzdHJpbmdzLCBuZXdQYXJhbWV0ZXJzKTsKKyAgICB9CisgICAgUmVmYWN0b3JpbmdVdGlsLmZpeEphdmFkb2NzRm9yUGFyYW1zKG1ldGhvZCwgbmV3UGFyYW1ldGVycyk7CisgICAgcmV0dXJuIG1ldGhvZC5nZXRUZXh0KCk7CisgIH0KKworICBwcml2YXRlIHZvaWQgY29sbGVjdE5ld1BhcmFtZXRlcnMoUHNpTWV0aG9kIG1ldGhvZCwgU3RyaW5nW10gbmFtZXMsIFNldDxQc2lQYXJhbWV0ZXI+IG5ld1BhcmFtZXRlcnMpIHsKKyAgICBTZXQ8U3RyaW5nPiBuZXdOYW1lcyA9IG5ldyBIYXNoU2V0PFN0cmluZz4oQXJyYXlzLmFzTGlzdChuYW1lcykpOworICAgIGZpbmFsIFBzaVBhcmFtZXRlcltdIHBhcmFtZXRlcnMgPSBtZXRob2QuZ2V0UGFyYW1ldGVyTGlzdCgpLmdldFBhcmFtZXRlcnMoKTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IHBhcmFtZXRlcnMubGVuZ3RoOyBpKyspIHsKKyAgICAgIFBzaVBhcmFtZXRlciBwYXJhbWV0ZXIgPSBwYXJhbWV0ZXJzW2ldOworICAgICAgaWYgKG5ld05hbWVzLmNvbnRhaW5zKHBhcmFtZXRlci5nZXROYW1lKCkpKSB7CisgICAgICAgIG5ld1BhcmFtZXRlcnMuYWRkKHBhcmFtZXRlcik7CisgICAgICB9CisgICAgfQorICB9CisKKyAgcHVibGljIHN0YXRpYyBUZXN0IHN1aXRlKCkgeworICAgIHJldHVybiBuZXcgRml4TWV0aG9kSmF2YWRvY1Rlc3QoKXt9OworICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovcmVmYWN0b3JpbmcvSW5oZXJpdGFuY2VUb0RlbGVnYXRpb25UZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovcmVmYWN0b3JpbmcvSW5oZXJpdGFuY2VUb0RlbGVnYXRpb25UZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWI3Mjg5OAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9yZWZhY3RvcmluZy9Jbmhlcml0YW5jZVRvRGVsZWdhdGlvblRlc3QuamF2YQpAQCAtMCwwICsxLDE4NyBAQAorcGFja2FnZSBjb20uaW50ZWxsaWoucmVmYWN0b3Jpbmc7CisKK2ltcG9ydCBjb20uaW50ZWxsaWouSmF2YVRlc3RVdGlsOworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLnZmcy5WaXJ0dWFsRmlsZTsKK2ltcG9ydCBjb20uaW50ZWxsaWoucHNpLlBzaUNsYXNzOworaW1wb3J0IGNvbS5pbnRlbGxpai5wc2kuUHNpTWV0aG9kOworaW1wb3J0IGNvbS5pbnRlbGxpai5wc2kuc2VhcmNoLkdsb2JhbFNlYXJjaFNjb3BlOworaW1wb3J0IGNvbS5pbnRlbGxpai5yZWZhY3RvcmluZy5pbmhlcml0YW5jZVRvRGVsZWdhdGlvbi5Jbmhlcml0YW5jZVRvRGVsZWdhdGlvblByb2Nlc3NvcjsKK2ltcG9ydCBjb20uaW50ZWxsaWoudXRpbC5BcnJheVV0aWw7CitpbXBvcnQgY29tLmludGVsbGlqLnV0aWwuY29udGFpbmVycy5Db250YWluZXJVdGlsOworCitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworLyoqCisgKiBAYXV0aG9yIGRzbAorICovCitwdWJsaWMgY2xhc3MgSW5oZXJpdGFuY2VUb0RlbGVnYXRpb25UZXN0IGV4dGVuZHMgTXVsdGlGaWxlVGVzdENhc2UgeworICBAT3ZlcnJpZGUKKyAgcHJvdGVjdGVkIFN0cmluZyBnZXRUZXN0RGF0YVBhdGgoKSB7CisgICAgcmV0dXJuIEphdmFUZXN0VXRpbC5nZXRKYXZhVGVzdERhdGFQYXRoKCk7CisgIH0KKworICBAT3ZlcnJpZGUKKyAgcHJvdGVjdGVkIFN0cmluZyBnZXRUZXN0Um9vdCgpIHsKKyAgICByZXR1cm4gIi9yZWZhY3RvcmluZy9pbmhlcml0YW5jZVRvRGVsZWdhdGlvbi8iOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFNpbXBsZUluc2VydGlvbigpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdChjcmVhdGVQZXJmb3JtQWN0aW9uKCJCIiwgIm15RGVsZWdhdGUiLCAiTXlBIiwgIkEiLCBuZXcgaW50W117MCwgMX0sIEFycmF5VXRpbC5FTVBUWV9TVFJJTkdfQVJSQVksIHRydWUsIGZhbHNlKSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0U2ltcGxlR2VuZXJpY3MoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoY3JlYXRlUGVyZm9ybUFjdGlvbigiQiIsICJteURlbGVnYXRlIiwgIk15QSIsICJBIiwgbmV3IGludFtdezAsIDF9LCBBcnJheVV0aWwuRU1QVFlfU1RSSU5HX0FSUkFZLCB0cnVlLCBmYWxzZSkpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFN1cGVyQ2FsbHMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoY3JlYXRlUGVyZm9ybUFjdGlvbigiQiIsICJteURlbGVnYXRlIiwgIk15QSIsICJBIiwgbmV3IGludFswXSwgQXJyYXlVdGlsLkVNUFRZX1NUUklOR19BUlJBWSwgdHJ1ZSwgZmFsc2UpKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RHZXR0ZXIoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoY3JlYXRlUGVyZm9ybUFjdGlvbigiQiIsICJteURlbGVnYXRlIiwgIk15QSIsICJBIiwgbmV3IGludFtdezAsIDF9LCBBcnJheVV0aWwuRU1QVFlfU1RSSU5HX0FSUkFZLCB0cnVlLCB0cnVlKSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0U3ViQ2xhc3MoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoCisgICAgICBjcmVhdGVQZXJmb3JtQWN0aW9uKCJBIiwgIm15RGVsZWdhdGUiLCAiTXlEZWxlZ2F0ZWRCYXNlIiwgIkRlbGVnYXRlZEJhc2UiLCBuZXcgaW50W117MH0sIEFycmF5VXRpbC5FTVBUWV9TVFJJTkdfQVJSQVksIHRydWUsCisgICAgICAgICAgdHJ1ZSkpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFN1YkNsYXNzTm9NZXRob2RzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KAorICAgICAgY3JlYXRlUGVyZm9ybUFjdGlvbigiQSIsICJteURlbGVnYXRlIiwgIk15RGVsZWdhdGVkQmFzZSIsICJEZWxlZ2F0ZWRCYXNlIiwgbmV3IGludFswXSwgQXJyYXlVdGlsLkVNUFRZX1NUUklOR19BUlJBWSwgdHJ1ZSwgdHJ1ZSkpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEludGVyZmFjZXMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoY3JlYXRlUGVyZm9ybUFjdGlvbigiQSIsICJteURlbGVnYXRlIiwgIk15QmFzZSIsICJCYXNlIiwgbmV3IGludFtdezB9LCBuZXcgU3RyaW5nW117IkkifSwgdHJ1ZSwgdHJ1ZSkpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdElubmVyQ2xhc3MoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoY3JlYXRlUGVyZm9ybUFjdGlvbigiQSIsICJteURlbGVnYXRlIiwgIk15QmFzZSIsICJCYXNlIiwgbmV3IGludFswXSwgQXJyYXlVdGlsLkVNUFRZX1NUUklOR19BUlJBWSwgdHJ1ZSwgZmFsc2UpKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RBYnN0cmFjdEJhc2UoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoY3JlYXRlUGVyZm9ybUFjdGlvbigiQSIsICJteURlbGVnYXRlIiwgIk15QmFzZSIsICJCYXNlIiwgbmV3IGludFswXSwgQXJyYXlVdGlsLkVNUFRZX1NUUklOR19BUlJBWSwgdHJ1ZSwgZmFsc2UpKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RBYnN0cmFjdEJhc2UxKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KGNyZWF0ZVBlcmZvcm1BY3Rpb24oIkEiLCAibXlEZWxlZ2F0ZSIsICJNeUJhc2UiLCAiQmFzZSIsIG5ldyBpbnRbMF0sIEFycmF5VXRpbC5FTVBUWV9TVFJJTkdfQVJSQVksIGZhbHNlLCBmYWxzZSkpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEhpZXJhcmNoeSgpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdChjcmVhdGVQZXJmb3JtQWN0aW9uKCJYIiwgIm15RGVsZWdhdGUiLCAiTXlCYXNlIiwgIkJhc2UiLCBuZXcgaW50WzBdLCBBcnJheVV0aWwuRU1QVFlfU1RSSU5HX0FSUkFZLCBmYWxzZSwgZmFsc2UpKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RPdmVycmlkZW5NZXRob2RzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KGNyZWF0ZVBlcmZvcm1BY3Rpb24oIkEiLCAibXlEZWxlZ2F0ZSIsICJNeUJhc2UiLCAiQmFzZSIsIG5ldyBpbnRbXXswfSwgQXJyYXlVdGlsLkVNUFRZX1NUUklOR19BUlJBWSwgZmFsc2UsIGZhbHNlKSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0QW5ub3RhdGlvbnMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoY3JlYXRlUGVyZm9ybUFjdGlvbigiQiIsICJteURlbGVnYXRlIiwgIk15QSIsICJBIiwgbmV3IGludFtdezB9LCBBcnJheVV0aWwuRU1QVFlfU1RSSU5HX0FSUkFZLCB0cnVlLCBmYWxzZSkpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdElubmVyQ2xhc3NGb3JJbnRlcmZhY2UoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoY3JlYXRlUGVyZm9ybUFjdGlvbigiQSIsICJteUJhc2VJbnRlcmZhY2UiLCAiTXlCYXNlSW50ZXJmYWNlIiwgIkJhc2VJbnRlcmZhY2UiLAorICAgICAgICBuZXcgaW50W117MH0sIEFycmF5VXRpbC5FTVBUWV9TVFJJTkdfQVJSQVksIGZhbHNlLCBmYWxzZSkpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdElubmVyQ2xhc3NGb3JJbnRlcmZhY2VBYnN0cmFjdCgpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdChjcmVhdGVQZXJmb3JtQWN0aW9uKCJBIiwgIm15QmFzZUludGVyZmFjZSIsICJNeUJhc2VJbnRlcmZhY2UiLCAiQmFzZUludGVyZmFjZSIsCisgICAgICAgIG5ldyBpbnRbXXswfSwgQXJyYXlVdGlsLkVNUFRZX1NUUklOR19BUlJBWSwgZmFsc2UsIGZhbHNlKSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0U3ViaW50ZXJmYWNlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KGNyZWF0ZVBlcmZvcm1BY3Rpb24oIkEiLCAibXlEZWxlZ2F0ZSIsICJNeUoiLCAiSiIsIG5ldyBpbnRbMF0sIEFycmF5VXRpbC5FTVBUWV9TVFJJTkdfQVJSQVksIHRydWUsIHRydWUpKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RJbnRlcmZhY2VEZWxlZ2F0aW9uKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KGNyZWF0ZVBlcmZvcm1BY3Rpb24oIkEiLCAibXlEZWxlZ2F0ZSIsICJNeUludGYiLCAiSW50ZiIsIG5ldyBpbnRbXXswfSwgQXJyYXlVdGlsLkVNUFRZX1NUUklOR19BUlJBWSwgdHJ1ZSwgdHJ1ZSkpOworICB9CisKKyAgLy8gSURFQURFVi0xOTY3NQorICBwdWJsaWMgdm9pZCB0ZXN0SW50ZXJmYWNlSW1wbGljaXRJbXBsZW1lbnRhdGlvbigpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdChjcmVhdGVQZXJmb3JtQWN0aW9uKCJBIiwgIm15RGVsZWdhdGUiLCAiTXlJbnRmIiwgIkludGYiLCBuZXcgaW50W117fSwgQXJyYXlVdGlsLkVNUFRZX1NUUklOR19BUlJBWSwgdHJ1ZSwgdHJ1ZSkpOworICB9CisKKyAgLy8gSURFQURFVi0xOTY5OQorICBwdWJsaWMgdm9pZCB0ZXN0TXVsdGlwbGVJbnRlcmZhY2VEZWxlZ2F0aW9uKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KGNyZWF0ZVBlcmZvcm1BY3Rpb24oIkEiLCAibXlEZWxlZ2F0ZSIsICJNeUludGYiLCAiSW50ZjIiLCBuZXcgaW50W117fSwgQXJyYXlVdGlsLkVNUFRZX1NUUklOR19BUlJBWSwgdHJ1ZSwgZmFsc2UpKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RTY3IyMDU1NygpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdChjcmVhdGVQZXJmb3JtQWN0aW9uMigieHh4LlNDUjIwNTU3IiwgIm15UmVzdWx0U2V0IiwgIk15UmVzdWx0U2V0IiwgImphdmEuc3FsLlJlc3VsdFNldCIsCisgICAgICAgIG5ldyBTdHJpbmdbXXsiZ2V0RGF0ZSJ9LCBBcnJheVV0aWwuRU1QVFlfU1RSSU5HX0FSUkFZLCBmYWxzZSwgZmFsc2UpKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RUeXBlUGFyYW1ldGVyc1N1YnN0aXR1dGlvbigpIHRocm93cyBFeGNlcHRpb24geworICAgICBkb1Rlc3QoY3JlYXRlUGVyZm9ybUFjdGlvbigiQSIsICJteURlbGVnYXRlIiwgIk15SW50ZiIsICJJbnRmIiwgbmV3IGludFtde30sIEFycmF5VXRpbC5FTVBUWV9TVFJJTkdfQVJSQVksIHRydWUsIGZhbHNlKSk7CisgIH0KKworICBwcml2YXRlIFBlcmZvcm1BY3Rpb24gY3JlYXRlUGVyZm9ybUFjdGlvbigKKyAgICBmaW5hbCBTdHJpbmcgY2xhc3NOYW1lLCBmaW5hbCBTdHJpbmcgZmllbGROYW1lLCBmaW5hbCBTdHJpbmcgaW5uZXJDbGFzc05hbWUsCisgICAgZmluYWwgU3RyaW5nIGJhc2VDbGFzc05hbWUsIGZpbmFsIGludFtdIG1ldGhvZEluZGljZXMsIGZpbmFsIFN0cmluZ1tdIGRlbGVnYXRlZEludGVyZmFjZU5hbWVzLAorICAgIGZpbmFsIGJvb2xlYW4gZGVsZWdhdGVPdGhlck1lbWJlcnMsIGZpbmFsIGJvb2xlYW4gZ2VuZXJhdGVHZXR0ZXIpIHsKKyAgICByZXR1cm4gbmV3IFBlcmZvcm1BY3Rpb24oKSB7CisgICAgICBAT3ZlcnJpZGUKKyAgICAgIHB1YmxpYyB2b2lkIHBlcmZvcm1BY3Rpb24oVmlydHVhbEZpbGUgcm9vdERpciwgVmlydHVhbEZpbGUgcm9vdEFmdGVyKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgUHNpQ2xhc3MgYUNsYXNzID0gbXlKYXZhRmFjYWRlLmZpbmRDbGFzcyhjbGFzc05hbWUsIEdsb2JhbFNlYXJjaFNjb3BlLmFsbFNjb3BlKGdldFByb2plY3QoKSkpOworICAgICAgICBhc3NlcnROb3ROdWxsKCJDbGFzcyAiICsgY2xhc3NOYW1lICsgIiBub3QgZm91bmQiLCBhQ2xhc3MpOworICAgICAgICBQc2lDbGFzcyBiYXNlQ2xhc3MgPSBteUphdmFGYWNhZGUuZmluZENsYXNzKGJhc2VDbGFzc05hbWUsIEdsb2JhbFNlYXJjaFNjb3BlLmFsbFNjb3BlKGdldFByb2plY3QoKSkpOworICAgICAgICBhc3NlcnROb3ROdWxsKCJCYXNlIGNsYXNzICIgKyBiYXNlQ2xhc3NOYW1lICsgIiBub3QgZm91bmQiLCBiYXNlQ2xhc3MpOworICAgICAgICBmaW5hbCBQc2lNZXRob2RbXSBtZXRob2RzID0gYmFzZUNsYXNzLmdldE1ldGhvZHMoKTsKKyAgICAgICAgZmluYWwgUHNpTWV0aG9kW10gZGVsZWdhdGVkTWV0aG9kcyA9IG5ldyBQc2lNZXRob2RbbWV0aG9kSW5kaWNlcy5sZW5ndGhdOworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG1ldGhvZEluZGljZXMubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICBkZWxlZ2F0ZWRNZXRob2RzW2ldID0gbWV0aG9kc1ttZXRob2RJbmRpY2VzW2ldXTsKKyAgICAgICAgfQorICAgICAgICBmaW5hbCBQc2lDbGFzc1tdIGRlbGVnYXRlZEludGVyZmFjZXMgPSBuZXcgUHNpQ2xhc3NbZGVsZWdhdGVkSW50ZXJmYWNlTmFtZXMubGVuZ3RoXTsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBkZWxlZ2F0ZWRJbnRlcmZhY2VOYW1lcy5sZW5ndGg7IGkrKykgeworICAgICAgICAgIFN0cmluZyBkZWxlZ2F0ZWRJbnRlcmZhY2VOYW1lID0gZGVsZWdhdGVkSW50ZXJmYWNlTmFtZXNbaV07CisgICAgICAgICAgUHNpQ2xhc3MgYW5JbnRlcmZhY2UgPSBteUphdmFGYWNhZGUuZmluZENsYXNzKGRlbGVnYXRlZEludGVyZmFjZU5hbWUsIEdsb2JhbFNlYXJjaFNjb3BlLmFsbFNjb3BlKGdldFByb2plY3QoKSkpOworICAgICAgICAgIGFzc2VydE5vdE51bGwoYW5JbnRlcmZhY2UpOworICAgICAgICAgIGRlbGVnYXRlZEludGVyZmFjZXNbaV0gPSBhbkludGVyZmFjZTsKKyAgICAgICAgfQorICAgICAgICBuZXcgSW5oZXJpdGFuY2VUb0RlbGVnYXRpb25Qcm9jZXNzb3IoCisgICAgICAgICAgbXlQcm9qZWN0LAorICAgICAgICAgIGFDbGFzcywgYmFzZUNsYXNzLCBmaWVsZE5hbWUsIGlubmVyQ2xhc3NOYW1lLCBkZWxlZ2F0ZWRJbnRlcmZhY2VzLCBkZWxlZ2F0ZWRNZXRob2RzLCBkZWxlZ2F0ZU90aGVyTWVtYmVycywKKyAgICAgICAgICBnZW5lcmF0ZUdldHRlcikucnVuKCk7CisgICAgICB9CisgICAgfTsKKyAgfQorCisgIHByaXZhdGUgUGVyZm9ybUFjdGlvbiBjcmVhdGVQZXJmb3JtQWN0aW9uMigKKyAgICBmaW5hbCBTdHJpbmcgY2xhc3NOYW1lLCBmaW5hbCBTdHJpbmcgZmllbGROYW1lLCBmaW5hbCBTdHJpbmcgaW5uZXJDbGFzc05hbWUsCisgICAgZmluYWwgU3RyaW5nIGJhc2VDbGFzc05hbWUsIGZpbmFsIFN0cmluZ1tdIG1ldGhvZE5hbWVzLCBmaW5hbCBTdHJpbmdbXSBkZWxlZ2F0ZWRJbnRlcmZhY2VOYW1lcywKKyAgICBmaW5hbCBib29sZWFuIGRlbGVnYXRlT3RoZXJNZW1iZXJzLCBmaW5hbCBib29sZWFuIGdlbmVyYXRlR2V0dGVyKSB7CisgICAgcmV0dXJuIG5ldyBQZXJmb3JtQWN0aW9uKCkgeworICAgICAgQE92ZXJyaWRlCisgICAgICBwdWJsaWMgdm9pZCBwZXJmb3JtQWN0aW9uKFZpcnR1YWxGaWxlIHJvb3REaXIsIFZpcnR1YWxGaWxlIHJvb3RBZnRlcikgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIFBzaUNsYXNzIGFDbGFzcyA9IG15SmF2YUZhY2FkZS5maW5kQ2xhc3MoY2xhc3NOYW1lLCBHbG9iYWxTZWFyY2hTY29wZS5hbGxTY29wZShnZXRQcm9qZWN0KCkpKTsKKyAgICAgICAgYXNzZXJ0Tm90TnVsbCgiQ2xhc3MgIiArIGNsYXNzTmFtZSArICIgbm90IGZvdW5kIiwgYUNsYXNzKTsKKyAgICAgICAgUHNpQ2xhc3MgYmFzZUNsYXNzID0gbXlKYXZhRmFjYWRlLmZpbmRDbGFzcyhiYXNlQ2xhc3NOYW1lLCBHbG9iYWxTZWFyY2hTY29wZS5hbGxTY29wZShnZXRQcm9qZWN0KCkpKTsKKyAgICAgICAgYXNzZXJ0Tm90TnVsbCgiQmFzZSBjbGFzcyAiICsgYmFzZUNsYXNzTmFtZSArICIgbm90IGZvdW5kIiwgYmFzZUNsYXNzKTsKKyAgICAgICAgZmluYWwgUHNpTWV0aG9kW10gZGVsZWdhdGVkTWV0aG9kczsKKyAgICAgICAgZmluYWwgTGlzdDxQc2lNZXRob2Q+IG1ldGhvZHNMaXN0ID0gbmV3IEFycmF5TGlzdDxQc2lNZXRob2Q+KCk7CisgICAgICAgIGZvciAoU3RyaW5nIG5hbWUgOiBtZXRob2ROYW1lcykgeworICAgICAgICAgIGZpbmFsIFBzaU1ldGhvZFtdIG1ldGhvZHNCeU5hbWUgPSBiYXNlQ2xhc3MuZmluZE1ldGhvZHNCeU5hbWUobmFtZSwgZmFsc2UpOworICAgICAgICAgIENvbnRhaW5lclV0aWwuYWRkQWxsKG1ldGhvZHNMaXN0LCBtZXRob2RzQnlOYW1lKTsKKyAgICAgICAgfQorICAgICAgICBkZWxlZ2F0ZWRNZXRob2RzID0gbWV0aG9kc0xpc3QudG9BcnJheShuZXcgUHNpTWV0aG9kW21ldGhvZHNMaXN0LnNpemUoKV0pOworCisgICAgICAgIGZpbmFsIFBzaUNsYXNzW10gZGVsZWdhdGVkSW50ZXJmYWNlcyA9IG5ldyBQc2lDbGFzc1tkZWxlZ2F0ZWRJbnRlcmZhY2VOYW1lcy5sZW5ndGhdOworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGRlbGVnYXRlZEludGVyZmFjZU5hbWVzLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgU3RyaW5nIGRlbGVnYXRlZEludGVyZmFjZU5hbWUgPSBkZWxlZ2F0ZWRJbnRlcmZhY2VOYW1lc1tpXTsKKyAgICAgICAgICBQc2lDbGFzcyBhbkludGVyZmFjZSA9IG15SmF2YUZhY2FkZS5maW5kQ2xhc3MoZGVsZWdhdGVkSW50ZXJmYWNlTmFtZSwgR2xvYmFsU2VhcmNoU2NvcGUuYWxsU2NvcGUoZ2V0UHJvamVjdCgpKSk7CisgICAgICAgICAgYXNzZXJ0Tm90TnVsbChhbkludGVyZmFjZSk7CisgICAgICAgICAgZGVsZWdhdGVkSW50ZXJmYWNlc1tpXSA9IGFuSW50ZXJmYWNlOworICAgICAgICB9CisgICAgICAgIG5ldyBJbmhlcml0YW5jZVRvRGVsZWdhdGlvblByb2Nlc3NvcigKKyAgICAgICAgICBteVByb2plY3QsCisgICAgICAgICAgYUNsYXNzLCBiYXNlQ2xhc3MsIGZpZWxkTmFtZSwgaW5uZXJDbGFzc05hbWUsIGRlbGVnYXRlZEludGVyZmFjZXMsIGRlbGVnYXRlZE1ldGhvZHMsIGRlbGVnYXRlT3RoZXJNZW1iZXJzLAorICAgICAgICAgIGdlbmVyYXRlR2V0dGVyKS5ydW4oKTsKKyAgICAgICAgLy9GaWxlRG9jdW1lbnRNYW5hZ2VyLmdldEluc3RhbmNlKCkuc2F2ZUFsbERvY3VtZW50cygpOworICAgICAgfQorICAgIH07CisgIH0KKworfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL3JlZmFjdG9yaW5nL0lubGluZVN1cGVyQ2xhc3NUZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovcmVmYWN0b3JpbmcvSW5saW5lU3VwZXJDbGFzc1Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYjdkMmE3Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL3JlZmFjdG9yaW5nL0lubGluZVN1cGVyQ2xhc3NUZXN0LmphdmEKQEAgLTAsMCArMSwxOTMgQEAKKy8qCisgKiBVc2VyOiBhbm5hCisgKiBEYXRlOiAyMC1BdWctMjAwOAorICovCitwYWNrYWdlIGNvbS5pbnRlbGxpai5yZWZhY3RvcmluZzsKKworaW1wb3J0IGNvbS5pbnRlbGxpai5KYXZhVGVzdFV0aWw7CitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkudmZzLlZpcnR1YWxGaWxlOworaW1wb3J0IGNvbS5pbnRlbGxpai5wc2kuUHNpQ2xhc3M7CitpbXBvcnQgY29tLmludGVsbGlqLnBzaS5zZWFyY2guR2xvYmFsU2VhcmNoU2NvcGU7CitpbXBvcnQgY29tLmludGVsbGlqLnJlZmFjdG9yaW5nLmlubGluZVN1cGVyQ2xhc3MuSW5saW5lU3VwZXJDbGFzc1JlZmFjdG9yaW5nUHJvY2Vzc29yOworaW1wb3J0IGNvbS5pbnRlbGxpai5yZWZhY3RvcmluZy51dGlsLkRvY0NvbW1lbnRQb2xpY3k7CisKK3B1YmxpYyBjbGFzcyBJbmxpbmVTdXBlckNsYXNzVGVzdCBleHRlbmRzIE11bHRpRmlsZVRlc3RDYXNlIHsKKyAgQE92ZXJyaWRlCisgIHByb3RlY3RlZCBTdHJpbmcgZ2V0VGVzdFJvb3QoKSB7CisgICAgcmV0dXJuICIvcmVmYWN0b3JpbmcvaW5saW5lU3VwZXJDbGFzcy8iOworICB9CisKKyAgQE92ZXJyaWRlCisgIHByb3RlY3RlZCBTdHJpbmcgZ2V0VGVzdERhdGFQYXRoKCkgeworICAgIHJldHVybiBKYXZhVGVzdFV0aWwuZ2V0SmF2YVRlc3REYXRhUGF0aCgpOworICB9CisKKyAgcHJpdmF0ZSB2b2lkIGRvVGVzdCgpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdChmYWxzZSk7CisgIH0KKworICBwcml2YXRlIHZvaWQgZG9UZXN0KGZpbmFsIGJvb2xlYW4gZmFpbCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgdHJ5IHsKKyAgICAgIGRvVGVzdChuZXcgUGVyZm9ybUFjdGlvbigpIHsKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyB2b2lkIHBlcmZvcm1BY3Rpb24oZmluYWwgVmlydHVhbEZpbGUgcm9vdERpciwgZmluYWwgVmlydHVhbEZpbGUgcm9vdEFmdGVyKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgICBQc2lDbGFzcyBhQ2xhc3MgPSBteUphdmFGYWNhZGUuZmluZENsYXNzKCJUZXN0IiwgR2xvYmFsU2VhcmNoU2NvcGUuYWxsU2NvcGUobXlQcm9qZWN0KSk7CisKKyAgICAgICAgICBpZiAoYUNsYXNzID09IG51bGwpIGFDbGFzcyA9IG15SmF2YUZhY2FkZS5maW5kQ2xhc3MoInAuVGVzdCIsIEdsb2JhbFNlYXJjaFNjb3BlLmFsbFNjb3BlKG15UHJvamVjdCkpOworICAgICAgICAgIGFzc2VydE5vdE51bGwoIkNsYXNzIFRlc3Qgbm90IGZvdW5kIiwgYUNsYXNzKTsKKworICAgICAgICAgIFBzaUNsYXNzIHN1cGVyQ2xhc3MgPSBteUphdmFGYWNhZGUuZmluZENsYXNzKCJTdXBlciIsIEdsb2JhbFNlYXJjaFNjb3BlLmFsbFNjb3BlKG15UHJvamVjdCkpOworCisgICAgICAgICAgaWYgKHN1cGVyQ2xhc3MgPT0gbnVsbCkgc3VwZXJDbGFzcyA9IG15SmF2YUZhY2FkZS5maW5kQ2xhc3MoInAxLlN1cGVyIiwgR2xvYmFsU2VhcmNoU2NvcGUuYWxsU2NvcGUobXlQcm9qZWN0KSk7CisgICAgICAgICAgYXNzZXJ0Tm90TnVsbCgiQ2xhc3MgU3VwZXIgbm90IGZvdW5kIiwgc3VwZXJDbGFzcyk7CisKKyAgICAgICAgICBuZXcgSW5saW5lU3VwZXJDbGFzc1JlZmFjdG9yaW5nUHJvY2Vzc29yKGdldFByb2plY3QoKSwgc3VwZXJDbGFzcywgRG9jQ29tbWVudFBvbGljeS5BU0lTLCBhQ2xhc3MpLnJ1bigpOworCisgICAgICAgICAgLy9Mb2NhbEZpbGVTeXN0ZW0uZ2V0SW5zdGFuY2UoKS5yZWZyZXNoKGZhbHNlKTsKKyAgICAgICAgICAvL0ZpbGVEb2N1bWVudE1hbmFnZXIuZ2V0SW5zdGFuY2UoKS5zYXZlQWxsRG9jdW1lbnRzKCk7CisgICAgICAgIH0KKyAgICAgIH0pOworICAgIH0KKyAgICBjYXRjaCAoQmFzZVJlZmFjdG9yaW5nUHJvY2Vzc29yLkNvbmZsaWN0c0luVGVzdHNFeGNlcHRpb24gZSkgeworICAgICAgaWYgKGZhaWwpIHsKKyAgICAgICAgcmV0dXJuOworICAgICAgfQorICAgICAgZWxzZSB7CisgICAgICAgIHRocm93IGU7CisgICAgICB9CisgICAgfQorICAgIGlmIChmYWlsKSB7CisgICAgICBmYWlsKCJDb25mbGljdCB3YXMgbm90IGRldGVjdGVkIik7CisgICAgfQorICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEFic3RyYWN0T3ZlcnJpZGVzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0U2ltcGxlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0U2ltcGxlR2VuZXJpY3MoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RDb25mbGljdEdlbmVyaWNzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KHRydWUpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEltcG9ydHMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RHZW5lcmljcygpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdCgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdE5ld2V4cHIoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RDb25mbGljdENvbnN0cnVjdG9ycygpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdCh0cnVlKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RDb25mbGljdE11bHRpcGxlQ29uc3RydWN0b3JzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KHRydWUpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdE11bHRpcGxlQ29uc3RydWN0b3JzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0SW1wbGljaXRDaGlsZENvbnN0cnVjdG9yKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0U3RhdGljTWVtYmVycygpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdCgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFN1cGVyUmVmZXJlbmNlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0SW5uZXJjbGFzc1JlZmVyZW5jZSgpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdCgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFN0YXRpY0ltcG9ydCgpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdCgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdE5ld0FycmF5SW5pdGlhbGl6ZXJFeHByKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KCk7CisgIH0KKyAgCisgIHB1YmxpYyB2b2lkIHRlc3ROZXdBcnJheURpbWVuc2lvbnNFeHByKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0TmV3QXJyYXlDb21wbGV4RGltZW5zaW9uc0V4cHIoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RTdXBlckNvbnN0cnVjdG9yV2l0aFJldHVybkluc2lkZSgpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdCh0cnVlKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RTdXBlckNvbnN0cnVjdG9yV2l0aEZpZWxkSW5pdGlhbGl6YXRpb24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgZG9UZXN0KCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0U3VwZXJDb25zdHJ1Y3RvcldpdGhQYXJhbSgpIHRocm93cyBFeGNlcHRpb24geworICAgICBkb1Rlc3QoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RDaGlsZENvbnN0cnVjdG9ySW1wbGljaXRseUNhbGxzU3VwZXIoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3ROb0NoaWxkQ29uc3RydWN0b3JDYWxsc1N1cGVyRGVmYXVsdCgpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdCgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFJlcGxhY2VHZW5lcmljc0luc2lkZSgpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdCgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdE11bHRpcGxlU3ViY2xhc3NlcygpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdE11bHRpcGxlU3ViY2xhc3NlcygpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdE11bHRpcGxlU3Vic3RpdHV0aW9ucygpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdE11bHRpcGxlU3ViY2xhc3NlcygpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdE11bHRpcGxlU3ViY2xhc3Nlc0luaGVyaXRzT25lQmFzZUJhc2UoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3RNdWx0aXBsZVN1YmNsYXNzZXMoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RJbmxpbmVTdXBlcmNsYXNzRXh0ZW5kc0xpc3QoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RJbnRlcmZhY2VIaWVyYXJjaHlXaXRoU3Vic3RpdHV0aW9uKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KCk7CisgIH0KKworICBwcml2YXRlIHZvaWQgZG9UZXN0TXVsdGlwbGVTdWJjbGFzc2VzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KG5ldyBQZXJmb3JtQWN0aW9uKCkgeworICAgICAgQE92ZXJyaWRlCisgICAgICBwdWJsaWMgdm9pZCBwZXJmb3JtQWN0aW9uKGZpbmFsIFZpcnR1YWxGaWxlIHJvb3REaXIsIGZpbmFsIFZpcnR1YWxGaWxlIHJvb3RBZnRlcikgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIFBzaUNsYXNzIHN1cGVyQ2xhc3MgPSBteUphdmFGYWNhZGUuZmluZENsYXNzKCJTdXBlciIsIEdsb2JhbFNlYXJjaFNjb3BlLmFsbFNjb3BlKG15UHJvamVjdCkpOworICAgICAgICBpZiAoc3VwZXJDbGFzcyA9PSBudWxsKSBzdXBlckNsYXNzID0gbXlKYXZhRmFjYWRlLmZpbmRDbGFzcygicDEuU3VwZXIiLCBHbG9iYWxTZWFyY2hTY29wZS5hbGxTY29wZShteVByb2plY3QpKTsKKyAgICAgICAgYXNzZXJ0Tm90TnVsbCgiQ2xhc3MgU3VwZXIgbm90IGZvdW5kIiwgc3VwZXJDbGFzcyk7CisgICAgICAgIG5ldyBJbmxpbmVTdXBlckNsYXNzUmVmYWN0b3JpbmdQcm9jZXNzb3IoZ2V0UHJvamVjdCgpLCBzdXBlckNsYXNzLCBEb2NDb21tZW50UG9saWN5LkFTSVMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXlKYXZhRmFjYWRlLmZpbmRDbGFzcygiVGVzdCIsIEdsb2JhbFNlYXJjaFNjb3BlLmFsbFNjb3BlKG15UHJvamVjdCkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG15SmF2YUZhY2FkZS5maW5kQ2xhc3MoIlRlc3QxIiwgR2xvYmFsU2VhcmNoU2NvcGUuYWxsU2NvcGUobXlQcm9qZWN0KSkpLnJ1bigpOworICAgICAgfQorICAgIH0pOworICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovcmVmYWN0b3JpbmcvSW5wbGFjZUludHJvZHVjZUNvbnN0YW50VGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL3JlZmFjdG9yaW5nL0lucGxhY2VJbnRyb2R1Y2VDb25zdGFudFRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NThkZjdhCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL3JlZmFjdG9yaW5nL0lucGxhY2VJbnRyb2R1Y2VDb25zdGFudFRlc3QuamF2YQpAQCAtMCwwICsxLDEzNCBAQAorLyoKKyAqIENvcHlyaWdodCAyMDAwLTIwMTEgSmV0QnJhaW5zIHMuci5vLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KK3BhY2thZ2UgY29tLmludGVsbGlqLnJlZmFjdG9yaW5nOworCitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkuZWRpdG9yLkVkaXRvcjsKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS5wcm9qZWN0LlByb2plY3Q7CitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkudXRpbC5QYXNzOworaW1wb3J0IGNvbS5pbnRlbGxpai5wc2kuUHNpRXhwcmVzc2lvbjsKK2ltcG9ydCBjb20uaW50ZWxsaWoucHNpLlBzaUxvY2FsVmFyaWFibGU7CitpbXBvcnQgY29tLmludGVsbGlqLnJlZmFjdG9yaW5nLmludHJvZHVjZS5pbnBsYWNlLkFic3RyYWN0SW5wbGFjZUludHJvZHVjZXI7CitpbXBvcnQgY29tLmludGVsbGlqLnJlZmFjdG9yaW5nLmludHJvZHVjZUZpZWxkLkludHJvZHVjZUNvbnN0YW50SGFuZGxlcjsKK2ltcG9ydCBvcmcuamV0YnJhaW5zLmFubm90YXRpb25zLk5vdE51bGw7CisKKy8qKgorICogVXNlcjogYW5uYQorICogRGF0ZTogMy8xNi8xMQorICovCitwdWJsaWMgY2xhc3MgSW5wbGFjZUludHJvZHVjZUNvbnN0YW50VGVzdCBleHRlbmRzIEFic3RyYWN0SmF2YUlucGxhY2VJbnRyb2R1Y2VUZXN0IHsKKworICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQkFTRV9QQVRIID0gIi9yZWZhY3RvcmluZy9pbnBsYWNlSW50cm9kdWNlQ29uc3RhbnQvIjsKKworICBwdWJsaWMgdm9pZCB0ZXN0UmVwbGFjZUFsbCgpIHRocm93cyBFeGNlcHRpb24geworCisgICAgZG9UZXN0KG5ldyBQYXNzPEFic3RyYWN0SW5wbGFjZUludHJvZHVjZXI+KCkgeworICAgICAgQE92ZXJyaWRlCisgICAgICBwdWJsaWMgdm9pZCBwYXNzKEFic3RyYWN0SW5wbGFjZUludHJvZHVjZXIgaW5wbGFjZUludHJvZHVjZUZpZWxkUG9wdXApIHsKKyAgICAgICAgaW5wbGFjZUludHJvZHVjZUZpZWxkUG9wdXAuc2V0UmVwbGFjZUFsbE9jY3VycmVuY2VzKHRydWUpOworCisgICAgICB9CisgICAgfSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0UmVwbGFjZUFsbFdpdGhDbGFzc1JlZlR5cGUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKworICAgIGRvVGVzdChuZXcgUGFzczxBYnN0cmFjdElucGxhY2VJbnRyb2R1Y2VyPigpIHsKKyAgICAgIEBPdmVycmlkZQorICAgICAgcHVibGljIHZvaWQgcGFzcyhBYnN0cmFjdElucGxhY2VJbnRyb2R1Y2VyIGlucGxhY2VJbnRyb2R1Y2VGaWVsZFBvcHVwKSB7CisgICAgICAgIGlucGxhY2VJbnRyb2R1Y2VGaWVsZFBvcHVwLnNldFJlcGxhY2VBbGxPY2N1cnJlbmNlcyh0cnVlKTsKKyAgICAgICAgdHlwZSgiT05FIik7CisgICAgICB9CisgICAgfSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0UmVwbGFjZUFsbEZyb21TZWNvbmRPY2N1cnJlbmNlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisKKyAgICBkb1Rlc3QobmV3IFBhc3M8QWJzdHJhY3RJbnBsYWNlSW50cm9kdWNlcj4oKSB7CisgICAgICBAT3ZlcnJpZGUKKyAgICAgIHB1YmxpYyB2b2lkIHBhc3MoQWJzdHJhY3RJbnBsYWNlSW50cm9kdWNlciBpbnBsYWNlSW50cm9kdWNlRmllbGRQb3B1cCkgeworICAgICAgICB0eXBlKCJPIik7CisgICAgICAgIGlucGxhY2VJbnRyb2R1Y2VGaWVsZFBvcHVwLnNldFJlcGxhY2VBbGxPY2N1cnJlbmNlcyh0cnVlKTsKKyAgICAgIH0KKyAgICB9KTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RDb25mbGljdGluZ0NvbnN0YW50TmFtZSgpIHRocm93cyBFeGNlcHRpb24geworCisgICAgZG9UZXN0KG5ldyBQYXNzPEFic3RyYWN0SW5wbGFjZUludHJvZHVjZXI+KCkgeworICAgICAgQE92ZXJyaWRlCisgICAgICBwdWJsaWMgdm9pZCBwYXNzKEFic3RyYWN0SW5wbGFjZUludHJvZHVjZXIgaW5wbGFjZUludHJvZHVjZUZpZWxkUG9wdXApIHsKKyAgICAgIH0KKyAgICB9KTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3ROb0NvbmZsaWN0aW5nQ29uc3RhbnROYW1lKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisKKyAgICBkb1Rlc3QobmV3IFBhc3M8QWJzdHJhY3RJbnBsYWNlSW50cm9kdWNlcj4oKSB7CisgICAgICBAT3ZlcnJpZGUKKyAgICAgIHB1YmxpYyB2b2lkIHBhc3MoQWJzdHJhY3RJbnBsYWNlSW50cm9kdWNlciBpbnBsYWNlSW50cm9kdWNlRmllbGRQb3B1cCkgeworICAgICAgfQorICAgIH0pOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdENvcnJlY3RGaW5hbFBvc2l0aW9uKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisKKyAgICBkb1Rlc3QobmV3IFBhc3M8QWJzdHJhY3RJbnBsYWNlSW50cm9kdWNlcj4oKSB7CisgICAgICBAT3ZlcnJpZGUKKyAgICAgIHB1YmxpYyB2b2lkIHBhc3MoQWJzdHJhY3RJbnBsYWNlSW50cm9kdWNlciBpbnBsYWNlSW50cm9kdWNlRmllbGRQb3B1cCkgeworICAgICAgICB0eXBlKCJTRUMiKTsKKyAgICAgIH0KKyAgICB9KTsKKyAgfQorICAKKyAgcHVibGljIHZvaWQgdGVzdENvcnJlY3RDb25zdGFudFBvc2l0aW9uKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgIGRvVGVzdChuZXcgUGFzczxBYnN0cmFjdElucGxhY2VJbnRyb2R1Y2VyPigpIHsKKyAgICAgICBAT3ZlcnJpZGUKKyAgICAgICBwdWJsaWMgdm9pZCBwYXNzKEFic3RyYWN0SW5wbGFjZUludHJvZHVjZXIgaW5wbGFjZUludHJvZHVjZUZpZWxkUG9wdXApIHsKKyAgICAgICAgIHR5cGUoIlIiKTsKKyAgICAgICB9CisgICAgIH0pOworICAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RFc2NhcGVQb3NpdGlvbigpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdEVzY2FwZSgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEVzY2FwZVBvc2l0aW9uT25Mb2NhbCgpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdEVzY2FwZSgpOworICB9CisKKyAgQE92ZXJyaWRlCisgIHByb3RlY3RlZCBTdHJpbmcgZ2V0QmFzZVBhdGgoKSB7CisgICAgcmV0dXJuIEJBU0VfUEFUSDsKKyAgfQorCisgIEBPdmVycmlkZQorICBwcm90ZWN0ZWQgTXlJbnRyb2R1Y2VIYW5kbGVyIGNyZWF0ZUludHJvZHVjZUhhbmRsZXIoKSB7CisgICAgcmV0dXJuIG5ldyBNeUludHJvZHVjZUNvbnN0YW50SGFuZGxlcigpOworICB9CisKKyAgcHVibGljIHN0YXRpYyBjbGFzcyBNeUludHJvZHVjZUNvbnN0YW50SGFuZGxlciBleHRlbmRzIEludHJvZHVjZUNvbnN0YW50SGFuZGxlciBpbXBsZW1lbnRzIE15SW50cm9kdWNlSGFuZGxlciB7CisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIGJvb2xlYW4gaW52b2tlSW1wbChQcm9qZWN0IHByb2plY3QsIEBOb3ROdWxsIFBzaUV4cHJlc3Npb24gc2VsZWN0ZWRFeHByLCBFZGl0b3IgZWRpdG9yKSB7CisgICAgICByZXR1cm4gc3VwZXIuaW52b2tlSW1wbChwcm9qZWN0LCBzZWxlY3RlZEV4cHIsIGVkaXRvcik7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIGJvb2xlYW4gaW52b2tlSW1wbChQcm9qZWN0IHByb2plY3QsIFBzaUxvY2FsVmFyaWFibGUgbG9jYWxWYXJpYWJsZSwgRWRpdG9yIGVkaXRvcikgeworICAgICAgcmV0dXJuIHN1cGVyLmludm9rZUltcGwocHJvamVjdCwgbG9jYWxWYXJpYWJsZSwgZWRpdG9yKTsKKyAgICB9CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9yZWZhY3RvcmluZy9JbnBsYWNlSW50cm9kdWNlRmllbGRUZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovcmVmYWN0b3JpbmcvSW5wbGFjZUludHJvZHVjZUZpZWxkVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg0NjNlYWEwCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL3JlZmFjdG9yaW5nL0lucGxhY2VJbnRyb2R1Y2VGaWVsZFRlc3QuamF2YQpAQCAtMCwwICsxLDEzOSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDAwLTIwMTEgSmV0QnJhaW5zIHMuci5vLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KK3BhY2thZ2UgY29tLmludGVsbGlqLnJlZmFjdG9yaW5nOworCitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkuZWRpdG9yLkVkaXRvcjsKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS5wcm9qZWN0LlByb2plY3Q7CitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkudXRpbC5QYXNzOworaW1wb3J0IGNvbS5pbnRlbGxpai5wc2kuUHNpRXhwcmVzc2lvbjsKK2ltcG9ydCBjb20uaW50ZWxsaWoucHNpLlBzaUxvY2FsVmFyaWFibGU7CitpbXBvcnQgY29tLmludGVsbGlqLnJlZmFjdG9yaW5nLmludHJvZHVjZS5pbnBsYWNlLkFic3RyYWN0SW5wbGFjZUludHJvZHVjZXI7CitpbXBvcnQgY29tLmludGVsbGlqLnJlZmFjdG9yaW5nLmludHJvZHVjZUZpZWxkLkludHJvZHVjZUZpZWxkSGFuZGxlcjsKK2ltcG9ydCBvcmcuamV0YnJhaW5zLmFubm90YXRpb25zLk5vdE51bGw7CisKKy8qKgorICogVXNlcjogYW5uYQorICogRGF0ZTogMy8xNi8xMQorICovCitwdWJsaWMgY2xhc3MgSW5wbGFjZUludHJvZHVjZUZpZWxkVGVzdCBleHRlbmRzIEFic3RyYWN0SmF2YUlucGxhY2VJbnRyb2R1Y2VUZXN0IHsKKworICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQkFTRV9QQVRIID0gIi9yZWZhY3RvcmluZy9pbnBsYWNlSW50cm9kdWNlRmllbGQvIjsKKworICBwdWJsaWMgdm9pZCB0ZXN0QW5jaG9yKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisKKyAgICBkb1Rlc3QobmV3IFBhc3M8QWJzdHJhY3RJbnBsYWNlSW50cm9kdWNlcj4oKSB7CisgICAgICBAT3ZlcnJpZGUKKyAgICAgIHB1YmxpYyB2b2lkIHBhc3MoQWJzdHJhY3RJbnBsYWNlSW50cm9kdWNlciBpbnBsYWNlSW50cm9kdWNlRmllbGRQb3B1cCkgeworICAgICAgfQorICAgIH0pOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEFuY2hvcjEoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKworICAgIGRvVGVzdChuZXcgUGFzczxBYnN0cmFjdElucGxhY2VJbnRyb2R1Y2VyPigpIHsKKyAgICAgIEBPdmVycmlkZQorICAgICAgcHVibGljIHZvaWQgcGFzcyhBYnN0cmFjdElucGxhY2VJbnRyb2R1Y2VyIGlucGxhY2VJbnRyb2R1Y2VGaWVsZFBvcHVwKSB7CisgICAgICB9CisgICAgfSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0QmVmb3JlQXNzaWdubWVudCgpIHRocm93cyBFeGNlcHRpb24geworCisgICAgZG9UZXN0KG5ldyBQYXNzPEFic3RyYWN0SW5wbGFjZUludHJvZHVjZXI+KCkgeworICAgICAgQE92ZXJyaWRlCisgICAgICBwdWJsaWMgdm9pZCBwYXNzKEFic3RyYWN0SW5wbGFjZUludHJvZHVjZXIgaW5wbGFjZUludHJvZHVjZUZpZWxkUG9wdXApIHsKKyAgICAgIH0KKyAgICB9KTsKKyAgfSAKKworICBwdWJsaWMgdm9pZCB0ZXN0VGVtcGxhdGVBZGp1c3RtZW50KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisKKyAgICBkb1Rlc3QobmV3IFBhc3M8QWJzdHJhY3RJbnBsYWNlSW50cm9kdWNlcj4oKSB7CisgICAgICBAT3ZlcnJpZGUKKyAgICAgIHB1YmxpYyB2b2lkIHBhc3MoQWJzdHJhY3RJbnBsYWNlSW50cm9kdWNlciBpbnBsYWNlSW50cm9kdWNlRmllbGRQb3B1cCkgeworICAgICAgfQorICAgIH0pOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEJlZm9yZUFzc2lnbm1lbnRSZXBsYWNlQWxsKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisKKyAgICBkb1Rlc3QobmV3IFBhc3M8QWJzdHJhY3RJbnBsYWNlSW50cm9kdWNlcj4oKSB7CisgICAgICBAT3ZlcnJpZGUKKyAgICAgIHB1YmxpYyB2b2lkIHBhc3MoQWJzdHJhY3RJbnBsYWNlSW50cm9kdWNlciBpbnBsYWNlSW50cm9kdWNlRmllbGRQb3B1cCkgeworICAgICAgICBpbnBsYWNlSW50cm9kdWNlRmllbGRQb3B1cC5zZXRSZXBsYWNlQWxsT2NjdXJyZW5jZXModHJ1ZSk7CisgICAgICB9CisgICAgfSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0QmVmb3JlQXNzaWdubWVudFJlcGxhY2VBbGxDYWxsKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisKKyAgICBkb1Rlc3QobmV3IFBhc3M8QWJzdHJhY3RJbnBsYWNlSW50cm9kdWNlcj4oKSB7CisgICAgICBAT3ZlcnJpZGUKKyAgICAgIHB1YmxpYyB2b2lkIHBhc3MoQWJzdHJhY3RJbnBsYWNlSW50cm9kdWNlciBpbnBsYWNlSW50cm9kdWNlRmllbGRQb3B1cCkgeworICAgICAgICBpbnBsYWNlSW50cm9kdWNlRmllbGRQb3B1cC5zZXRSZXBsYWNlQWxsT2NjdXJyZW5jZXModHJ1ZSk7CisgICAgICB9CisgICAgfSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0UmVwbGFjZUFsbCgpIHRocm93cyBFeGNlcHRpb24geworCisgICAgZG9UZXN0KG5ldyBQYXNzPEFic3RyYWN0SW5wbGFjZUludHJvZHVjZXI+KCkgeworICAgICAgQE92ZXJyaWRlCisgICAgICBwdWJsaWMgdm9pZCBwYXNzKEFic3RyYWN0SW5wbGFjZUludHJvZHVjZXIgaW5wbGFjZUludHJvZHVjZUZpZWxkUG9wdXApIHsKKyAgICAgICAgaW5wbGFjZUludHJvZHVjZUZpZWxkUG9wdXAuc2V0UmVwbGFjZUFsbE9jY3VycmVuY2VzKHRydWUpOworICAgICAgfQorICAgIH0pOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFJlc3RvcmVOZXdFeHByZXNzaW9uKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KG5ldyBQYXNzPEFic3RyYWN0SW5wbGFjZUludHJvZHVjZXI+KCkgeworICAgICAgQE92ZXJyaWRlCisgICAgICBwdWJsaWMgdm9pZCBwYXNzKEFic3RyYWN0SW5wbGFjZUludHJvZHVjZXIgaW5wbGFjZUludHJvZHVjZUZpZWxkUG9wdXApIHsKKyAgICAgICAgaW5wbGFjZUludHJvZHVjZUZpZWxkUG9wdXAuc2V0UmVwbGFjZUFsbE9jY3VycmVuY2VzKHRydWUpOworICAgICAgfQorICAgIH0pOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEVzY2FwZVBvc2l0aW9uKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0RXNjYXBlKCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0RXNjYXBlUG9zaXRpb25PbkxvY2FsKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0RXNjYXBlKCk7CisgIH0KKworICBAT3ZlcnJpZGUKKyAgcHJvdGVjdGVkIFN0cmluZyBnZXRCYXNlUGF0aCgpIHsKKyAgICByZXR1cm4gQkFTRV9QQVRIOworICB9CisKKyAgQE92ZXJyaWRlCisgIHByb3RlY3RlZCBNeUludHJvZHVjZUhhbmRsZXIgY3JlYXRlSW50cm9kdWNlSGFuZGxlcigpIHsKKyAgICByZXR1cm4gbmV3IE15SW50cm9kdWNlRmllbGRIYW5kbGVyKCk7CisgIH0KKworICBwdWJsaWMgc3RhdGljIGNsYXNzIE15SW50cm9kdWNlRmllbGRIYW5kbGVyIGV4dGVuZHMgSW50cm9kdWNlRmllbGRIYW5kbGVyIGltcGxlbWVudHMgTXlJbnRyb2R1Y2VIYW5kbGVyIHsKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgYm9vbGVhbiBpbnZva2VJbXBsKFByb2plY3QgcHJvamVjdCwgQE5vdE51bGwgUHNpRXhwcmVzc2lvbiBzZWxlY3RlZEV4cHIsIEVkaXRvciBlZGl0b3IpIHsKKyAgICAgIHJldHVybiBzdXBlci5pbnZva2VJbXBsKHByb2plY3QsIHNlbGVjdGVkRXhwciwgZWRpdG9yKTsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgYm9vbGVhbiBpbnZva2VJbXBsKFByb2plY3QgcHJvamVjdCwgUHNpTG9jYWxWYXJpYWJsZSBsb2NhbFZhcmlhYmxlLCBFZGl0b3IgZWRpdG9yKSB7CisgICAgICByZXR1cm4gc3VwZXIuaW52b2tlSW1wbChwcm9qZWN0LCBsb2NhbFZhcmlhYmxlLCBlZGl0b3IpOworICAgIH0KKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL3JlZmFjdG9yaW5nL0lucGxhY2VJbnRyb2R1Y2VQYXJhbWV0ZXJUZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovcmVmYWN0b3JpbmcvSW5wbGFjZUludHJvZHVjZVBhcmFtZXRlclRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNWVjMjk2Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL3JlZmFjdG9yaW5nL0lucGxhY2VJbnRyb2R1Y2VQYXJhbWV0ZXJUZXN0LmphdmEKQEAgLTAsMCArMSwxMzggQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwMC0yMDExIEpldEJyYWlucyBzLnIuby4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCitwYWNrYWdlIGNvbS5pbnRlbGxpai5yZWZhY3RvcmluZzsKKworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLmVkaXRvci5FZGl0b3I7CitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkucHJvamVjdC5Qcm9qZWN0OworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLnV0aWwuUGFzczsKK2ltcG9ydCBjb20uaW50ZWxsaWoucHNpLlBzaUV4cHJlc3Npb247CitpbXBvcnQgY29tLmludGVsbGlqLnBzaS5Qc2lMb2NhbFZhcmlhYmxlOworaW1wb3J0IGNvbS5pbnRlbGxpai5yZWZhY3RvcmluZy5pbnRyb2R1Y2UuaW5wbGFjZS5BYnN0cmFjdElucGxhY2VJbnRyb2R1Y2VyOworaW1wb3J0IGNvbS5pbnRlbGxpai5yZWZhY3RvcmluZy5pbnRyb2R1Y2VQYXJhbWV0ZXIuSW50cm9kdWNlUGFyYW1ldGVySGFuZGxlcjsKK2ltcG9ydCBvcmcuamV0YnJhaW5zLmFubm90YXRpb25zLk5vdE51bGw7CisKKy8qKgorICogVXNlcjogYW5uYQorICogRGF0ZTogMy8xNi8xMQorICovCitwdWJsaWMgY2xhc3MgSW5wbGFjZUludHJvZHVjZVBhcmFtZXRlclRlc3QgZXh0ZW5kcyBBYnN0cmFjdEphdmFJbnBsYWNlSW50cm9kdWNlVGVzdCB7CisKKyAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEJBU0VfUEFUSCA9ICIvcmVmYWN0b3JpbmcvaW5wbGFjZUludHJvZHVjZVBhcmFtZXRlci8iOworCisgIHB1YmxpYyB2b2lkIHRlc3RSZXBsYWNlQWxsKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KG5ldyBQYXNzPEFic3RyYWN0SW5wbGFjZUludHJvZHVjZXI+KCkgeworICAgICAgQE92ZXJyaWRlCisgICAgICBwdWJsaWMgdm9pZCBwYXNzKEFic3RyYWN0SW5wbGFjZUludHJvZHVjZXIgaW5wbGFjZUludHJvZHVjZUZpZWxkUG9wdXApIHsKKyAgICAgICAgaW5wbGFjZUludHJvZHVjZUZpZWxkUG9wdXAuc2V0UmVwbGFjZUFsbE9jY3VycmVuY2VzKHRydWUpOworICAgICAgfQorICAgIH0pOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFJlcGxhY2VBbGwxKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KG5ldyBQYXNzPEFic3RyYWN0SW5wbGFjZUludHJvZHVjZXI+KCkgeworICAgICAgQE92ZXJyaWRlCisgICAgICBwdWJsaWMgdm9pZCBwYXNzKEFic3RyYWN0SW5wbGFjZUludHJvZHVjZXIgaW5wbGFjZUludHJvZHVjZUZpZWxkUG9wdXApIHsKKyAgICAgICAgaW5wbGFjZUludHJvZHVjZUZpZWxkUG9wdXAuc2V0UmVwbGFjZUFsbE9jY3VycmVuY2VzKHRydWUpOworICAgICAgfQorICAgIH0pOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFJlcGxhY2VBbGwyKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KG5ldyBQYXNzPEFic3RyYWN0SW5wbGFjZUludHJvZHVjZXI+KCkgeworICAgICAgQE92ZXJyaWRlCisgICAgICBwdWJsaWMgdm9pZCBwYXNzKEFic3RyYWN0SW5wbGFjZUludHJvZHVjZXIgaW5wbGFjZUludHJvZHVjZUZpZWxkUG9wdXApIHsKKyAgICAgICAgaW5wbGFjZUludHJvZHVjZUZpZWxkUG9wdXAuc2V0UmVwbGFjZUFsbE9jY3VycmVuY2VzKHRydWUpOworICAgICAgfQorICAgIH0pOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFJlcGxhY2VBbGxNZXRob2RDYWxscygpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdChuZXcgUGFzczxBYnN0cmFjdElucGxhY2VJbnRyb2R1Y2VyPigpIHsKKyAgICAgIEBPdmVycmlkZQorICAgICAgcHVibGljIHZvaWQgcGFzcyhBYnN0cmFjdElucGxhY2VJbnRyb2R1Y2VyIGlucGxhY2VJbnRyb2R1Y2VQb3B1cCkgeworICAgICAgICBpbnBsYWNlSW50cm9kdWNlUG9wdXAuc2V0UmVwbGFjZUFsbE9jY3VycmVuY2VzKHRydWUpOworICAgICAgICB0eXBlKCJzdHJpbmciKTsKKyAgICAgIH0KKyAgICB9KTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RQYXJhbU5hbWVFcU1ldGhvZE5hbWUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QobmV3IFBhc3M8QWJzdHJhY3RJbnBsYWNlSW50cm9kdWNlcj4oKSB7CisgICAgICBAT3ZlcnJpZGUKKyAgICAgIHB1YmxpYyB2b2lkIHBhc3MoQWJzdHJhY3RJbnBsYWNlSW50cm9kdWNlciBpbnBsYWNlSW50cm9kdWNlUG9wdXApIHsKKyAgICAgIH0KKyAgICB9KTsKKyAgfQorCisgIEBPdmVycmlkZQorICBwcm90ZWN0ZWQgU3RyaW5nIGdldEJhc2VQYXRoKCkgeworICAgIHJldHVybiBCQVNFX1BBVEg7CisgIH0KKworICBAT3ZlcnJpZGUKKyAgcHJvdGVjdGVkIE15SW50cm9kdWNlSGFuZGxlciBjcmVhdGVJbnRyb2R1Y2VIYW5kbGVyKCkgeworICAgIHJldHVybiBuZXcgTXlJbnRyb2R1Y2VQYXJhbWV0ZXJIYW5kbGVyKCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0RXNjYXBlUG9zaXRpb24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3RFc2NhcGUoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RFc2NhcGVQb3NpdGlvbk9uTG9jYWwoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3RFc2NhcGUoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RFeHRyYWN0UGFyYW1PdmVyTG9jYWwoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QobmV3IFBhc3M8QWJzdHJhY3RJbnBsYWNlSW50cm9kdWNlcj4oKSB7CisgICAgICBAT3ZlcnJpZGUKKyAgICAgIHB1YmxpYyB2b2lkIHBhc3MoQWJzdHJhY3RJbnBsYWNlSW50cm9kdWNlciBhYnN0cmFjdElucGxhY2VJbnRyb2R1Y2VyKSB7CisgICAgICB9CisgICAgfSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0RXh0cmFjdENvbmZsaWN0aW5nUGFyYW1PdmVyTG9jYWwoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICB0cnkgeworICAgICAgZG9UZXN0KG5ldyBQYXNzPEFic3RyYWN0SW5wbGFjZUludHJvZHVjZXI+KCkgeworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIHZvaWQgcGFzcyhBYnN0cmFjdElucGxhY2VJbnRyb2R1Y2VyIGFic3RyYWN0SW5wbGFjZUludHJvZHVjZXIpIHsKKyAgICAgICAgICB0eXBlKCJwIik7CisgICAgICAgIH0KKyAgICAgIH0pOworICAgIH0KKyAgICBjYXRjaCAoQmFzZVJlZmFjdG9yaW5nUHJvY2Vzc29yLkNvbmZsaWN0c0luVGVzdHNFeGNlcHRpb24gZSkgeworICAgICAgYXNzZXJ0RXF1YWxzKCJUaGVyZSBpcyBhbHJlYWR5IGEgcGFyYW1ldGVyIDxiPjxjb2RlPnA8L2NvZGU+PC9iPi4gSXQgd2lsbCBjb25mbGljdCB3aXRoIGFuIGludHJvZHVjZWQgcGFyYW1ldGVyIiwgZS5nZXRNZXNzYWdlKCkpOworICAgICAgcmV0dXJuOworICAgIH0KKyAgICBmYWlsKCJDb25mbGljdCBleHBlY3RlZCIpOworICB9CisKKyAgcHJpdmF0ZSBzdGF0aWMgY2xhc3MgTXlJbnRyb2R1Y2VQYXJhbWV0ZXJIYW5kbGVyIGV4dGVuZHMgSW50cm9kdWNlUGFyYW1ldGVySGFuZGxlciBpbXBsZW1lbnRzIE15SW50cm9kdWNlSGFuZGxlciB7CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgYm9vbGVhbiBpbnZva2VJbXBsKFByb2plY3QgcHJvamVjdCwgQE5vdE51bGwgUHNpRXhwcmVzc2lvbiBzZWxlY3RlZEV4cHIsIEVkaXRvciBlZGl0b3IpIHsKKyAgICAgIHJldHVybiBzdXBlci5pbnZva2VJbXBsKHByb2plY3QsIHNlbGVjdGVkRXhwciwgZWRpdG9yKTsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgYm9vbGVhbiBpbnZva2VJbXBsKFByb2plY3QgcHJvamVjdCwgUHNpTG9jYWxWYXJpYWJsZSBsb2NhbFZhcmlhYmxlLCBFZGl0b3IgZWRpdG9yKSB7CisgICAgICByZXR1cm4gc3VwZXIuaW52b2tlSW1wbChwcm9qZWN0LCBsb2NhbFZhcmlhYmxlLCBlZGl0b3IpOworICAgIH0KKyAgfQorICBAT3ZlcnJpZGUKKyAgcHJvdGVjdGVkIGJvb2xlYW4gaXNSdW5JbldyaXRlQWN0aW9uKCkgeworICAgIHJldHVybiBmYWxzZTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL3JlZmFjdG9yaW5nL0lucGxhY2VSZW5hbWVJbnZhcmlhbnRUZXN0Lmdyb292eSBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9yZWZhY3RvcmluZy9JbnBsYWNlUmVuYW1lSW52YXJpYW50VGVzdC5ncm9vdnkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTgyYzc3ZAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9yZWZhY3RvcmluZy9JbnBsYWNlUmVuYW1lSW52YXJpYW50VGVzdC5ncm9vdnkKQEAgLTAsMCArMSwxNDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwMC0yMDEyIEpldEJyYWlucyBzLnIuby4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCitwYWNrYWdlIGNvbS5pbnRlbGxpai5yZWZhY3RvcmluZworCitpbXBvcnQgY29tLmludGVsbGlqLmNvZGVJbnNpZ2h0LlRhcmdldEVsZW1lbnRVdGlsQmFzZQoraW1wb3J0IGNvbS5pbnRlbGxpai5jb2RlSW5zaWdodC50ZW1wbGF0ZS5UZW1wbGF0ZU1hbmFnZXIKK2ltcG9ydCBjb20uaW50ZWxsaWouY29kZUluc2lnaHQudGVtcGxhdGUuaW1wbC5UZW1wbGF0ZU1hbmFnZXJJbXBsCitpbXBvcnQgY29tLmludGVsbGlqLmNvZGVJbnNpZ2h0LnRlbXBsYXRlLmltcGwuVGVtcGxhdGVTdGF0ZQoraW1wb3J0IGNvbS5pbnRlbGxpai5wc2kuUHNpRWxlbWVudAoraW1wb3J0IGNvbS5pbnRlbGxpai5yZWZhY3RvcmluZy5yZW5hbWUuaW5wbGFjZS5NZW1iZXJJbnBsYWNlUmVuYW1lSGFuZGxlcgoraW1wb3J0IGNvbS5pbnRlbGxpai50ZXN0RnJhbWV3b3JrLkxpZ2h0Q29kZUluc2lnaHRUZXN0Q2FzZQorCisvKioKKyAqIFVzZXI6IGFubmEKKyAqLworY2xhc3MgSW5wbGFjZVJlbmFtZUludmFyaWFudFRlc3QgZXh0ZW5kcyBMaWdodENvZGVJbnNpZ2h0VGVzdENhc2UgeworICBwdWJsaWMgdm9pZCAidGVzdCBzdGFydCBjYXJldCBwb3NpdGlvbiIoKSB7CisgICAgZGVmIHRleHQgPSAiIiJcCisgICAgIGNsYXNzIDxjYXJldD5UZXN0IHsKKyAgICAgfQorICAgfQorICAgIiIiCisKKyAgICBkb1Rlc3RQb3NpdGlvbkludmFyaWFuY2UodGV4dCwgZmFsc2UsIGZhbHNlKQorICB9CisKKyAgcHVibGljIHZvaWQgInRlc3QgbWlkZGxlIGNhcmV0IHBvc2l0aW9uIigpIHsKKyAgICBkZWYgdGV4dCA9ICIiIlwKKyAgICAgIGNsYXNzIFRlPGNhcmV0PnN0IHsKKyAgICAgIH0KKyAgICB9CisgICAgIiIiCisKKyAgICBkb1Rlc3RQb3NpdGlvbkludmFyaWFuY2UodGV4dCwgZmFsc2UsIGZhbHNlKQorICB9CisKKyAgcHVibGljIHZvaWQgInRlc3QgZW5kIGNhcmV0IHBvc2l0aW9uIigpIHsKKyAgICBkZWYgdGV4dCA9ICIiIlwKKyAgICAgIGNsYXNzIFRlc3Q8Y2FyZXQ+IHsKKyAgICAgIH0KKyAgICB9CisgICAgIiIiCisKKyAgICBkb1Rlc3RQb3NpdGlvbkludmFyaWFuY2UodGV4dCwgZmFsc2UsIGZhbHNlKQorICB9CisKKyAgcHVibGljIHZvaWQgInRlc3QgZW5kIGNhcmV0IHBvc2l0aW9uIHR5cGluZyIoKSB7CisgICAgZGVmIHRleHQgPSAiIiJcCisgICAgICAgY2xhc3MgVGVzdCB7CisgICAgICAgICBUZXN0PGNhcmV0PiBteVRlc3Q7CisgICAgICAgfQorICAgICB9CisgICAgICIiIgorCisgICAgZG9UZXN0UG9zaXRpb25JbnZhcmlhbmNlKHRleHQsIGZhbHNlLCBmYWxzZSkKKyAgfQorCisKKyAgcHVibGljIHZvaWQgInRlc3Qgc3RhcnQgY2FyZXQgcG9zaXRpb24gcHJlc2VsZWN0IigpIHsKKyAgICBkZWYgdGV4dCA9ICIiIlwKKyAgICAgICBjbGFzcyA8Y2FyZXQ+VGVzdCB7CisgICAgICAgfQorICAgICB9CisgICAgICIiIgorCisgICAgZG9UZXN0UG9zaXRpb25JbnZhcmlhbmNlKHRleHQsIHRydWUsIGZhbHNlKQorICB9CisKKyAgcHVibGljIHZvaWQgInRlc3QgbWlkZGxlIGNhcmV0IHBvc2l0aW9uIHByZXNlbGVjdCIoKSB7CisgICAgZGVmIHRleHQgPSAiIiJcCisgICAgICAgIGNsYXNzIFRlPGNhcmV0PnN0IHsKKyAgICAgICAgfQorICAgICAgfQorICAgICAgIiIiCisKKyAgICBkb1Rlc3RQb3NpdGlvbkludmFyaWFuY2UodGV4dCwgdHJ1ZSwgZmFsc2UpCisgIH0KKworICBwdWJsaWMgdm9pZCAidGVzdCBlbmQgY2FyZXQgcG9zaXRpb24gcHJlc2VsZWN0IigpIHsKKyAgICBkZWYgdGV4dCA9ICIiIlwKKyAgICAgICAgY2xhc3MgVGVzdDxjYXJldD4geworICAgICAgICB9CisgICAgICB9CisgICAgICAiIiIKKworICAgIGRvVGVzdFBvc2l0aW9uSW52YXJpYW5jZSh0ZXh0LCB0cnVlLCBmYWxzZSkKKyAgfQorCisgIHByaXZhdGUgZG9UZXN0UG9zaXRpb25JbnZhcmlhbmNlKFN0cmluZyB0ZXh0LCBmaW5hbCBib29sZWFuIHByZXNlbGVjdCwgZmluYWwgYm9vbGVhbiBjaGVja1R5cGluZykgeworICAgIGNvbmZpZ3VyZSB0ZXh0CisgICAgVGVtcGxhdGVNYW5hZ2VySW1wbCB0ZW1wbGF0ZU1hbmFnZXIgPSAoVGVtcGxhdGVNYW5hZ2VySW1wbClUZW1wbGF0ZU1hbmFnZXIuZ2V0SW5zdGFuY2UocHJvamVjdCkKKyAgICBkZWYgb2xkUHJlc2VsZWN0U2V0dGluZyA9IG15RWRpdG9yLnNldHRpbmdzLnByZXNlbGVjdFJlbmFtZQorICAgIHRyeSB7CisgICAgICB0ZW1wbGF0ZU1hbmFnZXIudGVtcGxhdGVUZXN0aW5nID0gdHJ1ZQorICAgICAgbXlFZGl0b3Iuc2V0dGluZ3MucHJlc2VsZWN0UmVuYW1lID0gcHJlc2VsZWN0OworICAgICAgaW50IG9mZnNldCA9IG15RWRpdG9yLmNhcmV0TW9kZWwub2Zmc2V0CisgICAgICBmaW5hbCBQc2lFbGVtZW50IGVsZW1lbnQgPSBUYXJnZXRFbGVtZW50VXRpbEJhc2UuZmluZFRhcmdldEVsZW1lbnQobXlFZGl0b3IsIFRhcmdldEVsZW1lbnRVdGlsQmFzZS5nZXRJbnN0YW5jZSgpLmdldEFsbEFjY2VwdGVkKCkpCisKKyAgICAgIGFzc2VydE5vdE51bGwoZWxlbWVudCkKKworICAgICAgTWVtYmVySW5wbGFjZVJlbmFtZUhhbmRsZXIgaGFuZGxlciA9IG5ldyBNZW1iZXJJbnBsYWNlUmVuYW1lSGFuZGxlcigpCisKKworICAgICAgaGFuZGxlci5kb1JlbmFtZShlbGVtZW50LCBlZGl0b3IsIG51bGwpOworICAgICAgCisgICAgICBpZiAoY2hlY2tUeXBpbmcpeworICAgICAgICB0eXBlICcxJworICAgICAgICBvZmZzZXQrKworICAgICAgfQorCisgICAgICBhc3NlcnRFcXVhbHMob2Zmc2V0LCBteUVkaXRvci5jYXJldE1vZGVsLm9mZnNldCkKKyAgICB9CisgICAgZmluYWxseSB7CisgICAgICBteUVkaXRvci5zZXR0aW5ncy5wcmVzZWxlY3RSZW5hbWUgPSBvbGRQcmVzZWxlY3RTZXR0aW5nCisKKyAgICAgIHRyeSB7CisgICAgICAgIFRlbXBsYXRlU3RhdGUgc3RhdGUgPSBUZW1wbGF0ZU1hbmFnZXJJbXBsLmdldFRlbXBsYXRlU3RhdGUoZWRpdG9yKQorCisgICAgICAgIGFzc2VydE5vdE51bGwoc3RhdGUpCisKKyAgICAgICAgc3RhdGUuZ290b0VuZChmYWxzZSkKKyAgICAgIH0KKyAgICAgIGZpbmFsbHkgeworICAgICAgICB0ZW1wbGF0ZU1hbmFnZXIudGVtcGxhdGVUZXN0aW5nID0gZmFsc2UKKyAgICAgIH0KKyAgICB9CisgIH0KKworICBwcml2YXRlIGRlZiBjb25maWd1cmUoU3RyaW5nIHRleHQpIHsKKyAgICBjb25maWd1cmVGcm9tRmlsZVRleHQoImEuamF2YSIsIHRleHQpCisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovcmVmYWN0b3JpbmcvSW50cm9kdWNlQ29uc3RhbnRUZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovcmVmYWN0b3JpbmcvSW50cm9kdWNlQ29uc3RhbnRUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWZhMWEzZgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9yZWZhY3RvcmluZy9JbnRyb2R1Y2VDb25zdGFudFRlc3QuamF2YQpAQCAtMCwwICsxLDE1MiBAQAorcGFja2FnZSBjb20uaW50ZWxsaWoucmVmYWN0b3Jpbmc7CisKK2ltcG9ydCBjb20uaW50ZWxsaWouSmF2YVRlc3RVdGlsOworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLmVkaXRvci5FZGl0b3I7CitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkucHJvamVjdC5Qcm9qZWN0OworaW1wb3J0IGNvbS5pbnRlbGxpai5wc2kuKjsKK2ltcG9ydCBjb20uaW50ZWxsaWoucHNpLnV0aWwuUHNpVHJlZVV0aWw7CitpbXBvcnQgY29tLmludGVsbGlqLnJlZmFjdG9yaW5nLnVpLlR5cGVTZWxlY3Rvck1hbmFnZXJJbXBsOworaW1wb3J0IGNvbS5pbnRlbGxpai50ZXN0RnJhbWV3b3JrLkxpZ2h0Q29kZUluc2lnaHRUZXN0Q2FzZTsKK2ltcG9ydCBjb20uaW50ZWxsaWoudGVzdEZyYW1ld29yay5UZXN0RGF0YVBhdGg7CitpbXBvcnQgY29tLmludGVsbGlqLnV0aWwuVmlzaWJpbGl0eVV0aWw7CitpbXBvcnQganVuaXQuZnJhbWV3b3JrLkFzc2VydDsKK2ltcG9ydCBvcmcuamV0YnJhaW5zLmFubm90YXRpb25zLk5vbk5sczsKK2ltcG9ydCBvcmcuamV0YnJhaW5zLmFubm90YXRpb25zLk5vdE51bGw7CisKKy8qKgorICogQGF1dGhvciB2ZW4KKyAqLworQFRlc3REYXRhUGF0aCgiJENPTlRFTlRfUk9PVC90ZXN0RGF0YSIpCitwdWJsaWMgY2xhc3MgSW50cm9kdWNlQ29uc3RhbnRUZXN0IGV4dGVuZHMgTGlnaHRDb2RlSW5zaWdodFRlc3RDYXNlIHsKKyAgQE5vbk5scyBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQkFTRV9QQVRIID0gIi9yZWZhY3RvcmluZy9pbnRyb2R1Y2VDb25zdGFudC8iOworCisgIEBOb3ROdWxsCisgIEBPdmVycmlkZQorICBwcm90ZWN0ZWQgU3RyaW5nIGdldFRlc3REYXRhUGF0aCgpIHsKKyAgICByZXR1cm4gSmF2YVRlc3RVdGlsLmdldEphdmFUZXN0RGF0YVBhdGgoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RJbk5vbk5scygpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdChmYWxzZSk7CisgIH0KKworICBwcml2YXRlIHZvaWQgZG9UZXN0KGJvb2xlYW4gbWFrZUVudW1Db25zdGFudCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgY29uZmlndXJlQnlGaWxlKEJBU0VfUEFUSCArIGdldFRlc3ROYW1lKGZhbHNlKSArICIuamF2YSIpOworICAgIGNvbnZlcnRMb2NhbChtYWtlRW51bUNvbnN0YW50KTsKKyAgICBjaGVja1Jlc3VsdEJ5RmlsZShCQVNFX1BBVEggKyBnZXRUZXN0TmFtZShmYWxzZSkgKyAiX2FmdGVyLmphdmEiKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RGcm9tRW51bUNvbnN0YW50SW5pdGlhbGl6ZXIoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBjb25maWd1cmVCeUZpbGUoQkFTRV9QQVRIICsgZ2V0VGVzdE5hbWUoZmFsc2UpICsgIi5qYXZhIik7CisgICAgbmV3IE1vY2tJbnRyb2R1Y2VDb25zdGFudEhhbmRsZXIobnVsbCkuaW52b2tlKGdldFByb2plY3QoKSwgZ2V0RWRpdG9yKCksIGdldEZpbGUoKSwgbnVsbCk7CisgICAgY2hlY2tSZXN1bHRCeUZpbGUoQkFTRV9QQVRIICsgZ2V0VGVzdE5hbWUoZmFsc2UpICsgIl9hZnRlci5qYXZhIik7CisgIH0KKyAgCisgIHB1YmxpYyB2b2lkIHRlc3RGcm9tRW51bUNvbnN0YW50SW5pdGlhbGl6ZXIxKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgY29uZmlndXJlQnlGaWxlKEJBU0VfUEFUSCArIGdldFRlc3ROYW1lKGZhbHNlKSArICIuamF2YSIpOworICAgIG5ldyBNb2NrSW50cm9kdWNlQ29uc3RhbnRIYW5kbGVyKG51bGwpLmludm9rZShnZXRQcm9qZWN0KCksIGdldEVkaXRvcigpLCBnZXRGaWxlKCksIG51bGwpOworICAgIGNoZWNrUmVzdWx0QnlGaWxlKEJBU0VfUEFUSCArIGdldFRlc3ROYW1lKGZhbHNlKSArICJfYWZ0ZXIuamF2YSIpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEVudW1Db25zdGFudCgpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdCh0cnVlKTsgICAgCisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0QW5ub3RhdGlvbkRlc2NyaXB0aW9uKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgY29uZmlndXJlQnlGaWxlKEJBU0VfUEFUSCArIGdldFRlc3ROYW1lKGZhbHNlKSArICIuamF2YSIpOworICAgIG5ldyBNb2NrSW50cm9kdWNlQ29uc3RhbnRIYW5kbGVyKG51bGwpLmludm9rZShnZXRQcm9qZWN0KCksIGdldEVkaXRvcigpLCBnZXRGaWxlKCksIG51bGwpOworICAgIGNoZWNrUmVzdWx0QnlGaWxlKEJBU0VfUEFUSCArIGdldFRlc3ROYW1lKGZhbHNlKSArICJfYWZ0ZXIuamF2YSIpOworICB9CisKKyAgcHJpdmF0ZSBzdGF0aWMgdm9pZCBjb252ZXJ0TG9jYWwoZmluYWwgYm9vbGVhbiBtYWtlRW51bUNvbnN0YW50KSB7CisgICAgUHNpTG9jYWxWYXJpYWJsZSBsb2NhbCA9IFBzaVRyZWVVdGlsLmdldFBhcmVudE9mVHlwZShnZXRGaWxlKCkuZmluZEVsZW1lbnRBdChnZXRFZGl0b3IoKS5nZXRDYXJldE1vZGVsKCkuZ2V0T2Zmc2V0KCkpLCBQc2lMb2NhbFZhcmlhYmxlLmNsYXNzKTsKKyAgICBuZXcgTW9ja0xvY2FsVG9GaWVsZEhhbmRsZXIoZ2V0UHJvamVjdCgpLCB0cnVlLCBtYWtlRW51bUNvbnN0YW50KS5jb252ZXJ0TG9jYWxUb0ZpZWxkKGxvY2FsLCBnZXRFZGl0b3IoKSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0UGFydGlhbFN0cmluZ0xpdGVyYWwoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBjb25maWd1cmVCeUZpbGUoQkFTRV9QQVRIICsgZ2V0VGVzdE5hbWUoZmFsc2UpICsgIi5qYXZhIik7CisgICAgbmV3IE1vY2tJbnRyb2R1Y2VDb25zdGFudEhhbmRsZXIobnVsbCkuaW52b2tlKGdldFByb2plY3QoKSwgZ2V0RWRpdG9yKCksIGdldEZpbGUoKSwgbnVsbCk7CisgICAgY2hlY2tSZXN1bHRCeUZpbGUoQkFTRV9QQVRIICsgZ2V0VGVzdE5hbWUoZmFsc2UpICsgIl9hZnRlci5qYXZhIik7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0UGFydGlhbFN0cmluZ0xpdGVyYWxRdWFsaWZpZWQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBjb25maWd1cmVCeUZpbGUoQkFTRV9QQVRIICsgZ2V0VGVzdE5hbWUoZmFsc2UpICsgIi5qYXZhIik7CisgICAgZmluYWwgUHNpQ2xhc3MgcHNpQ2xhc3MgPSAoKFBzaUphdmFGaWxlKWdldEZpbGUoKSkuZ2V0Q2xhc3NlcygpWzBdOworICAgIEFzc2VydC5hc3NlcnROb3ROdWxsKHBzaUNsYXNzKTsKKyAgICBmaW5hbCBQc2lDbGFzcyB0YXJnZXRDbGFzcyA9IHBzaUNsYXNzLmZpbmRJbm5lckNsYXNzQnlOYW1lKCJEIiwgZmFsc2UpOworICAgIEFzc2VydC5hc3NlcnROb3ROdWxsKHRhcmdldENsYXNzKTsKKyAgICBuZXcgTW9ja0ludHJvZHVjZUNvbnN0YW50SGFuZGxlcih0YXJnZXRDbGFzcykuaW52b2tlKGdldFByb2plY3QoKSwgZ2V0RWRpdG9yKCksIGdldEZpbGUoKSwgbnVsbCk7CisgICAgY2hlY2tSZXN1bHRCeUZpbGUoQkFTRV9QQVRIICsgZ2V0VGVzdE5hbWUoZmFsc2UpICsgIl9hZnRlci5qYXZhIik7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0UGFydGlhbFN0cmluZ0xpdGVyYWxBbmNob3IoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBjb25maWd1cmVCeUZpbGUoQkFTRV9QQVRIICsgZ2V0VGVzdE5hbWUoZmFsc2UpICsgIi5qYXZhIik7CisgICAgbmV3IE1vY2tJbnRyb2R1Y2VDb25zdGFudEhhbmRsZXIobnVsbCkuaW52b2tlKGdldFByb2plY3QoKSwgZ2V0RWRpdG9yKCksIGdldEZpbGUoKSwgbnVsbCk7CisgICAgY2hlY2tSZXN1bHRCeUZpbGUoQkFTRV9QQVRIICsgZ2V0VGVzdE5hbWUoZmFsc2UpICsgIl9hZnRlci5qYXZhIik7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0SW50cm9kdWNlQ29uc3RhbnRGcm9tVGhpc0NhbGwoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBjb25maWd1cmVCeUZpbGUoQkFTRV9QQVRIICsgZ2V0VGVzdE5hbWUoZmFsc2UpICsgIi5qYXZhIik7CisgICAgbmV3IE1vY2tJbnRyb2R1Y2VDb25zdGFudEhhbmRsZXIobnVsbCkuaW52b2tlKGdldFByb2plY3QoKSwgZ2V0RWRpdG9yKCksIGdldEZpbGUoKSwgbnVsbCk7CisgICAgY2hlY2tSZXN1bHRCeUZpbGUoQkFTRV9QQVRIICsgZ2V0VGVzdE5hbWUoZmFsc2UpICsgIl9hZnRlci5qYXZhIik7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0Rm9yd2FyZFJlZmVyZW5jZXMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBjb25maWd1cmVCeUZpbGUoQkFTRV9QQVRIICsgZ2V0VGVzdE5hbWUoZmFsc2UpICsgIi5qYXZhIik7CisgICAgbmV3IE1vY2tJbnRyb2R1Y2VDb25zdGFudEhhbmRsZXIobnVsbCkuaW52b2tlKGdldFByb2plY3QoKSwgZ2V0RWRpdG9yKCksIGdldEZpbGUoKSwgbnVsbCk7CisgICAgY2hlY2tSZXN1bHRCeUZpbGUoQkFTRV9QQVRIICsgZ2V0VGVzdE5hbWUoZmFsc2UpICsgIl9hZnRlci5qYXZhIik7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0QXJyYXlGcm9tVmFyYXJncygpIHRocm93cyBFeGNlcHRpb24geworICAgIGNvbmZpZ3VyZUJ5RmlsZShCQVNFX1BBVEggKyBnZXRUZXN0TmFtZShmYWxzZSkgKyAiLmphdmEiKTsKKyAgICBuZXcgTW9ja0ludHJvZHVjZUNvbnN0YW50SGFuZGxlcihudWxsKS5pbnZva2UoZ2V0UHJvamVjdCgpLCBnZXRFZGl0b3IoKSwgZ2V0RmlsZSgpLCBudWxsKTsKKyAgICBjaGVja1Jlc3VsdEJ5RmlsZShCQVNFX1BBVEggKyBnZXRUZXN0TmFtZShmYWxzZSkgKyAiX2FmdGVyLmphdmEiKTsKKyAgfQorCisKKyAgcHVibGljIHZvaWQgdGVzdEVzY2FsYXRlVmlzaWJpbGl0eSgpIHRocm93cyBFeGNlcHRpb24geworICAgIGNvbmZpZ3VyZUJ5RmlsZShCQVNFX1BBVEggKyBnZXRUZXN0TmFtZShmYWxzZSkgKyAiLmphdmEiKTsKKyAgICBmaW5hbCBQc2lDbGFzc1tdIGNsYXNzZXMgPSAoKFBzaUphdmFGaWxlKWdldEZpbGUoKSkuZ2V0Q2xhc3NlcygpOworICAgIEFzc2VydC5hc3NlcnRUcnVlKGNsYXNzZXMubGVuZ3RoID09IDIpOworICAgIGZpbmFsIFBzaUNsYXNzIHRhcmdldENsYXNzID0gY2xhc3Nlc1sxXTsKKyAgICBBc3NlcnQuYXNzZXJ0Tm90TnVsbCh0YXJnZXRDbGFzcyk7CisgICAgbmV3IE1vY2tJbnRyb2R1Y2VDb25zdGFudEhhbmRsZXIodGFyZ2V0Q2xhc3MpeworICAgICAgQE92ZXJyaWRlCisgICAgICBwcm90ZWN0ZWQgU3RyaW5nIGdldFZpc2liaWxpdHkoKSB7CisgICAgICAgIHJldHVybiBWaXNpYmlsaXR5VXRpbC5FU0NBTEFURV9WSVNJQklMSVRZOworICAgICAgfQorICAgIH0uaW52b2tlKGdldFByb2plY3QoKSwgZ2V0RWRpdG9yKCksIGdldEZpbGUoKSwgbnVsbCk7CisgICAgY2hlY2tSZXN1bHRCeUZpbGUoQkFTRV9QQVRIICsgZ2V0VGVzdE5hbWUoZmFsc2UpICsgIl9hZnRlci5qYXZhIik7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0UmVzdWx0ZWRUeXBlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgY2hlY2tEZWZhdWx0VHlwZShDb21tb25DbGFzc05hbWVzLkpBVkFfTEFOR19PQkpFQ1QpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFJlc3VsdGVkVHlwZVdoZW5Ob25Mb2NhbCgpIHRocm93cyBFeGNlcHRpb24geworICAgIGNoZWNrRGVmYXVsdFR5cGUoIlRlc3QuQyIpOworICB9CisKKyAgcHJpdmF0ZSB2b2lkIGNoZWNrRGVmYXVsdFR5cGUoZmluYWwgU3RyaW5nIGV4cGVjdGVkVHlwZSkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgY29uZmlndXJlQnlGaWxlKEJBU0VfUEFUSCArIGdldFRlc3ROYW1lKGZhbHNlKSArICIuamF2YSIpOworICAgIG5ldyBNb2NrSW50cm9kdWNlQ29uc3RhbnRIYW5kbGVyKG51bGwpeworICAgICAgQE92ZXJyaWRlCisgICAgICBwcm90ZWN0ZWQgU2V0dGluZ3Mgc2hvd1JlZmFjdG9yaW5nRGlhbG9nKFByb2plY3QgcHJvamVjdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRWRpdG9yIGVkaXRvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHNpQ2xhc3MgcGFyZW50Q2xhc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBzaUV4cHJlc3Npb24gZXhwciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHNpVHlwZSB0eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQc2lFeHByZXNzaW9uW10gb2NjdXJyZW5jZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBzaUVsZW1lbnQgYW5jaG9yRWxlbWVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHNpRWxlbWVudCBhbmNob3JFbGVtZW50SWZBbGwpIHsKKyAgICAgICAgZmluYWwgVHlwZVNlbGVjdG9yTWFuYWdlckltcGwgc2VsZWN0b3JNYW5hZ2VyID0KKyAgICAgICAgICBuZXcgVHlwZVNlbGVjdG9yTWFuYWdlckltcGwocHJvamVjdCwgdHlwZSwgUHNpVHJlZVV0aWwuZ2V0UGFyZW50T2ZUeXBlKGFuY2hvckVsZW1lbnQsIFBzaU1ldGhvZC5jbGFzcyksIGV4cHIsIG9jY3VycmVuY2VzKTsKKyAgICAgICAgZmluYWwgUHNpVHlwZSBwc2lUeXBlID0gc2VsZWN0b3JNYW5hZ2VyLmdldERlZmF1bHRUeXBlKCk7CisgICAgICAgIEFzc2VydC5hc3NlcnRFcXVhbHMocHNpVHlwZS5nZXRDYW5vbmljYWxUZXh0KCksIGV4cGVjdGVkVHlwZSk7CisgICAgICAgIHJldHVybiBuZXcgU2V0dGluZ3MoInh4eCIsIGV4cHIsIG9jY3VycmVuY2VzLCB0cnVlLCB0cnVlLCB0cnVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluaXRpYWxpemF0aW9uUGxhY2UuSU5fRklFTERfREVDTEFSQVRJT04sIGdldFZpc2liaWxpdHkoKSwgbnVsbCwgcHNpVHlwZSwgZmFsc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50Q2xhc3MsIGZhbHNlLCBmYWxzZSk7CisgICAgICB9CisgICAgfS5pbnZva2UoZ2V0UHJvamVjdCgpLCBnZXRFZGl0b3IoKSwgZ2V0RmlsZSgpLCBudWxsKTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL3JlZmFjdG9yaW5nL0ludHJvZHVjZUZpZWxkSW5TYW1lQ2xhc3NUZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovcmVmYWN0b3JpbmcvSW50cm9kdWNlRmllbGRJblNhbWVDbGFzc1Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yM2Q2MWEyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL3JlZmFjdG9yaW5nL0ludHJvZHVjZUZpZWxkSW5TYW1lQ2xhc3NUZXN0LmphdmEKQEAgLTAsMCArMSwxNDEgQEAKK3BhY2thZ2UgY29tLmludGVsbGlqLnJlZmFjdG9yaW5nOworCitpbXBvcnQgY29tLmludGVsbGlqLkphdmFUZXN0VXRpbDsKK2ltcG9ydCBjb20uaW50ZWxsaWoucHNpLlBzaUNsYXNzOworaW1wb3J0IGNvbS5pbnRlbGxpai5wc2kuUHNpUHJpbWl0aXZlVHlwZTsKK2ltcG9ydCBjb20uaW50ZWxsaWoucHNpLlBzaVR5cGU7CitpbXBvcnQgY29tLmludGVsbGlqLnJlZmFjdG9yaW5nLmludHJvZHVjZUZpZWxkLkJhc2VFeHByZXNzaW9uVG9GaWVsZEhhbmRsZXI7CitpbXBvcnQgY29tLmludGVsbGlqLnJlZmFjdG9yaW5nLnV0aWwuQ29tbW9uUmVmYWN0b3JpbmdVdGlsOworaW1wb3J0IGNvbS5pbnRlbGxpai50ZXN0RnJhbWV3b3JrLkxpZ2h0Q29kZUluc2lnaHRUZXN0Q2FzZTsKK2ltcG9ydCBvcmcuamV0YnJhaW5zLmFubm90YXRpb25zLk5vdE51bGw7CisKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworLyoqCisgKiBAYXV0aG9yIHZlbgorICovCitwdWJsaWMgY2xhc3MgSW50cm9kdWNlRmllbGRJblNhbWVDbGFzc1Rlc3QgZXh0ZW5kcyBMaWdodENvZGVJbnNpZ2h0VGVzdENhc2UgeworICBATm90TnVsbAorICBAT3ZlcnJpZGUKKyAgcHJvdGVjdGVkIFN0cmluZyBnZXRUZXN0RGF0YVBhdGgoKSB7CisgICAgcmV0dXJuIEphdmFUZXN0VXRpbC5nZXRKYXZhVGVzdERhdGFQYXRoKCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0SW5DbGFzc0luaXRpYWxpemVyICgpIHRocm93cyBFeGNlcHRpb24geworICAgIGNvbmZpZ3VyZUJ5RmlsZSgiL3JlZmFjdG9yaW5nL2ludHJvZHVjZUZpZWxkL2JlZm9yZTEuamF2YSIpOworICAgIHBlcmZvcm1SZWZhY3RvcmluZyhCYXNlRXhwcmVzc2lvblRvRmllbGRIYW5kbGVyLkluaXRpYWxpemF0aW9uUGxhY2UuSU5fRklFTERfREVDTEFSQVRJT04sIHRydWUpOworICAgIGNoZWNrUmVzdWx0QnlGaWxlKCIvcmVmYWN0b3JpbmcvaW50cm9kdWNlRmllbGQvYWZ0ZXIxLmphdmEiKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RJbkVsc2VDbGF1c2UoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBjb25maWd1cmVCeUZpbGUoIi9yZWZhY3RvcmluZy9pbnRyb2R1Y2VGaWVsZC9iZWZvcmVFbHNlQ2xhdXNlLmphdmEiKTsKKyAgICBwZXJmb3JtUmVmYWN0b3JpbmcoQmFzZUV4cHJlc3Npb25Ub0ZpZWxkSGFuZGxlci5Jbml0aWFsaXphdGlvblBsYWNlLklOX0NVUlJFTlRfTUVUSE9ELCB0cnVlKTsKKyAgICBjaGVja1Jlc3VsdEJ5RmlsZSgiL3JlZmFjdG9yaW5nL2ludHJvZHVjZUZpZWxkL2FmdGVyRWxzZUNsYXVzZS5qYXZhIik7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0T3V0ZXJDbGFzcygpIHRocm93cyBFeGNlcHRpb24geworICAgIGNvbmZpZ3VyZUJ5RmlsZSgiL3JlZmFjdG9yaW5nL2ludHJvZHVjZUZpZWxkL2JlZm9yZU91dGVyQ2xhc3MuamF2YSIpOworICAgIHBlcmZvcm1SZWZhY3RvcmluZyhCYXNlRXhwcmVzc2lvblRvRmllbGRIYW5kbGVyLkluaXRpYWxpemF0aW9uUGxhY2UuSU5fQ09OU1RSVUNUT1IsIGZhbHNlKTsKKyAgICBjaGVja1Jlc3VsdEJ5RmlsZSgiL3JlZmFjdG9yaW5nL2ludHJvZHVjZUZpZWxkL2FmdGVyT3V0ZXJDbGFzcy5qYXZhIik7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0T25DbGFzc0xldmVsTm9EdXBsaWNhdGVzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgY29uZmlndXJlQnlGaWxlKCIvcmVmYWN0b3JpbmcvaW50cm9kdWNlRmllbGQvYmVmb3JlT25DbGFzc0xldmVsTm9EdXBsaWNhdGVzLmphdmEiKTsKKyAgICBwZXJmb3JtUmVmYWN0b3JpbmcoQmFzZUV4cHJlc3Npb25Ub0ZpZWxkSGFuZGxlci5Jbml0aWFsaXphdGlvblBsYWNlLklOX0ZJRUxEX0RFQ0xBUkFUSU9OLCBmYWxzZSk7CisgICAgY2hlY2tSZXN1bHRCeUZpbGUoIi9yZWZhY3RvcmluZy9pbnRyb2R1Y2VGaWVsZC9hZnRlck9uQ2xhc3NMZXZlbE5vRHVwbGljYXRlcy5qYXZhIik7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0T25DbGFzc0xldmVsRHVwbGljYXRlcygpIHRocm93cyBFeGNlcHRpb24geworICAgIGNvbmZpZ3VyZUJ5RmlsZSgiL3JlZmFjdG9yaW5nL2ludHJvZHVjZUZpZWxkL2JlZm9yZU9uQ2xhc3NMZXZlbER1cGxpY2F0ZXMuamF2YSIpOworICAgIHBlcmZvcm1SZWZhY3RvcmluZyhCYXNlRXhwcmVzc2lvblRvRmllbGRIYW5kbGVyLkluaXRpYWxpemF0aW9uUGxhY2UuSU5fRklFTERfREVDTEFSQVRJT04sIGZhbHNlKTsKKyAgICBjaGVja1Jlc3VsdEJ5RmlsZSgiL3JlZmFjdG9yaW5nL2ludHJvZHVjZUZpZWxkL2FmdGVyT25DbGFzc0xldmVsRHVwbGljYXRlcy5qYXZhIik7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0T25DbGFzc0xldmVsRHVwbGljYXRlczEoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBjb25maWd1cmVCeUZpbGUoIi9yZWZhY3RvcmluZy9pbnRyb2R1Y2VGaWVsZC9iZWZvcmVPbkNsYXNzTGV2ZWxEdXBsaWNhdGVzMS5qYXZhIik7CisgICAgcGVyZm9ybVJlZmFjdG9yaW5nKEJhc2VFeHByZXNzaW9uVG9GaWVsZEhhbmRsZXIuSW5pdGlhbGl6YXRpb25QbGFjZS5JTl9GSUVMRF9ERUNMQVJBVElPTiwgZmFsc2UpOworICAgIGNoZWNrUmVzdWx0QnlGaWxlKCIvcmVmYWN0b3JpbmcvaW50cm9kdWNlRmllbGQvYWZ0ZXJPbkNsYXNzTGV2ZWxEdXBsaWNhdGVzMS5qYXZhIik7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0T25DbGFzc0xldmVsQmluYXJ5KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgY29uZmlndXJlQnlGaWxlKCIvcmVmYWN0b3JpbmcvaW50cm9kdWNlRmllbGQvYmVmb3JlT25DbGFzc0xldmVsQmluYXJ5LmphdmEiKTsKKyAgICBwZXJmb3JtUmVmYWN0b3JpbmcoQmFzZUV4cHJlc3Npb25Ub0ZpZWxkSGFuZGxlci5Jbml0aWFsaXphdGlvblBsYWNlLklOX0ZJRUxEX0RFQ0xBUkFUSU9OLCBmYWxzZSk7CisgICAgY2hlY2tSZXN1bHRCeUZpbGUoIi9yZWZhY3RvcmluZy9pbnRyb2R1Y2VGaWVsZC9hZnRlck9uQ2xhc3NMZXZlbEJpbmFyeS5qYXZhIik7CisgIH0KKyAgLy9tdWx0aXBsZSBlcnJvciBlbGVtZW50cyBvbiBjbGFzcyBsZXZlbCBjb3JyZXNwb25kaW5nIHRvIHRoZSBleHRyYWN0ZWQgZnJhZ21lbnQgLS0tLS0tLS0tLS0tLS0tLS0tCisgIHB1YmxpYyB2b2lkIHRlc3RPbkNsYXNzTGV2ZWxOZXdFeHByZXNzaW9uKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgY29uZmlndXJlQnlGaWxlKCIvcmVmYWN0b3JpbmcvaW50cm9kdWNlRmllbGQvYmVmb3JlT25DbGFzc0xldmVsTmV3RXhwcmVzc2lvbi5qYXZhIik7CisgICAgcGVyZm9ybVJlZmFjdG9yaW5nKEJhc2VFeHByZXNzaW9uVG9GaWVsZEhhbmRsZXIuSW5pdGlhbGl6YXRpb25QbGFjZS5JTl9GSUVMRF9ERUNMQVJBVElPTiwgZmFsc2UpOworICAgIGNoZWNrUmVzdWx0QnlGaWxlKCIvcmVmYWN0b3JpbmcvaW50cm9kdWNlRmllbGQvYWZ0ZXJPbkNsYXNzTGV2ZWxOZXdFeHByZXNzaW9uLmphdmEiKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RPbkNsYXNzTGV2ZWxDbGFzc0Zvck5hbWUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBjb25maWd1cmVCeUZpbGUoIi9yZWZhY3RvcmluZy9pbnRyb2R1Y2VGaWVsZC9iZWZvcmVPbkNsYXNzTGV2ZWxDbGFzc0Zvck5hbWUuamF2YSIpOworICAgIHBlcmZvcm1SZWZhY3RvcmluZyhCYXNlRXhwcmVzc2lvblRvRmllbGRIYW5kbGVyLkluaXRpYWxpemF0aW9uUGxhY2UuSU5fRklFTERfREVDTEFSQVRJT04sIGZhbHNlKTsKKyAgICBjaGVja1Jlc3VsdEJ5RmlsZSgiL3JlZmFjdG9yaW5nL2ludHJvZHVjZUZpZWxkL2FmdGVyT25DbGFzc0xldmVsQ2xhc3NGb3JOYW1lLmphdmEiKTsKKyAgfQorICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICBwdWJsaWMgdm9pZCB0ZXN0VW5yZXNvbHZlZFJlZmVyZW5jZVRvTG9jYWxWYXIoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBjb25maWd1cmVCeUZpbGUoIi9yZWZhY3RvcmluZy9pbnRyb2R1Y2VGaWVsZC9iZWZvcmVVbnJlc29sdmVkUmVmZXJlbmNlVG9Mb2NhbFZhci5qYXZhIik7CisgICAgcGVyZm9ybVJlZmFjdG9yaW5nKEJhc2VFeHByZXNzaW9uVG9GaWVsZEhhbmRsZXIuSW5pdGlhbGl6YXRpb25QbGFjZS5JTl9DVVJSRU5UX01FVEhPRCwgZmFsc2UpOworICAgIGNoZWNrUmVzdWx0QnlGaWxlKCIvcmVmYWN0b3JpbmcvaW50cm9kdWNlRmllbGQvYWZ0ZXJVbnJlc29sdmVkUmVmZXJlbmNlVG9Mb2NhbFZhci5qYXZhIik7CisgIH0KKyAgCisgIHByaXZhdGUgc3RhdGljIHZvaWQgcGVyZm9ybVJlZmFjdG9yaW5nKGZpbmFsIEJhc2VFeHByZXNzaW9uVG9GaWVsZEhhbmRsZXIuSW5pdGlhbGl6YXRpb25QbGFjZSBpbml0aWFsaXphdGlvblBsYWNlLCBmaW5hbCBib29sZWFuIGRlY2xhcmVTdGF0aWMpIHsKKyAgICBuZXcgTW9ja0ludHJvZHVjZUZpZWxkSGFuZGxlcihpbml0aWFsaXphdGlvblBsYWNlLCBkZWNsYXJlU3RhdGljKS5pbnZva2UoZ2V0UHJvamVjdCgpLCBteUVkaXRvciwgbXlGaWxlLCBudWxsKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RGb3JjZWRGaWVsZFR5cGUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBjb25maWd1cmVCeUZpbGUoIi9yZWZhY3RvcmluZy9pbnRyb2R1Y2VGaWVsZC9iZWZvcmVGb3JjZWRGaWVsZFR5cGUuamF2YSIpOworICAgIG5ldyBNb2NrSW50cm9kdWNlRmllbGRIYW5kbGVyKEJhc2VFeHByZXNzaW9uVG9GaWVsZEhhbmRsZXIuSW5pdGlhbGl6YXRpb25QbGFjZS5JTl9DVVJSRU5UX01FVEhPRCwgZmFsc2UpeworICAgICAgQE92ZXJyaWRlCisgICAgICBwcm90ZWN0ZWQgUHNpVHlwZSBnZXRGaWVsZFR5cGUoUHNpVHlwZSB0eXBlKSB7CisgICAgICAgIHJldHVybiBQc2lQcmltaXRpdmVUeXBlLklOVDsKKyAgICAgIH0KKyAgICB9Lmludm9rZShnZXRQcm9qZWN0KCksIG15RWRpdG9yLCBteUZpbGUsIG51bGwpOworICAgIGNoZWNrUmVzdWx0QnlGaWxlKCIvcmVmYWN0b3JpbmcvaW50cm9kdWNlRmllbGQvYWZ0ZXJGb3JjZWRGaWVsZFR5cGUuamF2YSIpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFJlamVjdEludHJvZHVjZUZpZWxkRnJvbUV4cHJJblRoaXNDYWxsKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgY29uZmlndXJlQnlGaWxlKCIvcmVmYWN0b3JpbmcvaW50cm9kdWNlRmllbGQvYmVmb3JlUmVqZWN0SW50cm9kdWNlRmllbGRGcm9tRXhwckluVGhpc0NhbGwuamF2YSIpOworICAgIHRyeSB7CisgICAgICBwZXJmb3JtUmVmYWN0b3JpbmcoQmFzZUV4cHJlc3Npb25Ub0ZpZWxkSGFuZGxlci5Jbml0aWFsaXphdGlvblBsYWNlLklOX0ZJRUxEX0RFQ0xBUkFUSU9OLCBmYWxzZSk7CisgICAgICBmYWlsKCJTaG91bGQgbm90IHByb2NlZWQiKTsKKyAgICB9CisgICAgY2F0Y2ggKENvbW1vblJlZmFjdG9yaW5nVXRpbC5SZWZhY3RvcmluZ0Vycm9ySGludEV4Y2VwdGlvbiBlKSB7CisgICAgICBhc3NlcnRFcXVhbHMoIkNhbm5vdCBwZXJmb3JtIHJlZmFjdG9yaW5nLlxuIiArCisgICAgICAgICAgICAgICAgICAgIkludmFsaWQgZXhwcmVzc2lvbiBjb250ZXh0LiIsIGUuZ2V0TWVzc2FnZSgpKTsKKyAgICB9CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0SW5Db25zdHJ1Y3RvckVuY2xvc2luZ0Fub255bW91cygpIHRocm93cyBFeGNlcHRpb24geworICAgIGNvbmZpZ3VyZUJ5RmlsZSgiL3JlZmFjdG9yaW5nL2ludHJvZHVjZUZpZWxkL2JlZm9yZUVuY2xvc2luZ0Fub255bW91cy5qYXZhIik7CisgICAgcGVyZm9ybVJlZmFjdG9yaW5nKEJhc2VFeHByZXNzaW9uVG9GaWVsZEhhbmRsZXIuSW5pdGlhbGl6YXRpb25QbGFjZS5JTl9DT05TVFJVQ1RPUiwgZmFsc2UpOworICAgIGNoZWNrUmVzdWx0QnlGaWxlKCIvcmVmYWN0b3JpbmcvaW50cm9kdWNlRmllbGQvYWZ0ZXJFbmNsb3NpbmdBbm9ueW1vdXMuamF2YSIpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdExvY2FsVmFyQW5ub3RhdGlvbnMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBjb25maWd1cmVCeUZpbGUoIi9yZWZhY3RvcmluZy9pbnRyb2R1Y2VGaWVsZC9iZWZvcmVMb2NhbFZhckFubm90YXRpb25zLmphdmEiKTsKKyAgICBwZXJmb3JtUmVmYWN0b3JpbmcoQmFzZUV4cHJlc3Npb25Ub0ZpZWxkSGFuZGxlci5Jbml0aWFsaXphdGlvblBsYWNlLklOX0ZJRUxEX0RFQ0xBUkFUSU9OLCBmYWxzZSk7CisgICAgY2hlY2tSZXN1bHRCeUZpbGUoIi9yZWZhY3RvcmluZy9pbnRyb2R1Y2VGaWVsZC9hZnRlckxvY2FsVmFyQW5ub3RhdGlvbnMuamF2YSIpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEZyb21MYW1iZGFFeHByKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgY29uZmlndXJlQnlGaWxlKCIvcmVmYWN0b3JpbmcvaW50cm9kdWNlRmllbGQvYmVmb3JlRnJvbUxhbWJkYUV4cHIuamF2YSIpOworICAgIHBlcmZvcm1SZWZhY3RvcmluZyhCYXNlRXhwcmVzc2lvblRvRmllbGRIYW5kbGVyLkluaXRpYWxpemF0aW9uUGxhY2UuSU5fRklFTERfREVDTEFSQVRJT04sIGZhbHNlKTsKKyAgICBjaGVja1Jlc3VsdEJ5RmlsZSgiL3JlZmFjdG9yaW5nL2ludHJvZHVjZUZpZWxkL2FmdGVyRnJvbUxhbWJkYUV4cHIuamF2YSIpOworICB9CisgIAorICBwdWJsaWMgdm9pZCB0ZXN0U3RhdGljRmllbGRJbklubmVyQ2xhc3MoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBjb25maWd1cmVCeUZpbGUoIi9yZWZhY3RvcmluZy9pbnRyb2R1Y2VGaWVsZC9iZWZvcmVTdGF0aWNGaWVsZEluSW5uZXJDbGFzcy5qYXZhIik7CisgICAgbmV3IE1vY2tJbnRyb2R1Y2VGaWVsZEhhbmRsZXIoQmFzZUV4cHJlc3Npb25Ub0ZpZWxkSGFuZGxlci5Jbml0aWFsaXphdGlvblBsYWNlLklOX0NVUlJFTlRfTUVUSE9ELCBmYWxzZSl7CisgICAgICBAT3ZlcnJpZGUKKyAgICAgIHByb3RlY3RlZCBpbnQgZ2V0Q2hvc2VuQ2xhc3NJbmRleChMaXN0PFBzaUNsYXNzPiBjbGFzc2VzKSB7CisgICAgICAgIHJldHVybiAwOworICAgICAgfQorICAgIH0uaW52b2tlKGdldFByb2plY3QoKSwgbXlFZGl0b3IsIG15RmlsZSwgbnVsbCk7CisgICAgY2hlY2tSZXN1bHRCeUZpbGUoIi9yZWZhY3RvcmluZy9pbnRyb2R1Y2VGaWVsZC9hZnRlclN0YXRpY0ZpZWxkSW5Jbm5lckNsYXNzLmphdmEiKTsKKyAgfQorICAKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovcmVmYWN0b3JpbmcvSW50cm9kdWNlRmllbGRXaXRTZXRVcEluaXRpYWxpemF0aW9uVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL3JlZmFjdG9yaW5nL0ludHJvZHVjZUZpZWxkV2l0U2V0VXBJbml0aWFsaXphdGlvblRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMmI3MTMyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL3JlZmFjdG9yaW5nL0ludHJvZHVjZUZpZWxkV2l0U2V0VXBJbml0aWFsaXphdGlvblRlc3QuamF2YQpAQCAtMCwwICsxLDkyIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDAwLTIwMDcgSmV0QnJhaW5zIHMuci5vLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICovCisKKy8qCisgKiBVc2VyOiBhbm5hCisgKiBEYXRlOiAxNy1PY3QtMjAwNworICovCitwYWNrYWdlIGNvbS5pbnRlbGxpai5yZWZhY3RvcmluZzsKKworaW1wb3J0IGNvbS5pbnRlbGxpai5KYXZhVGVzdFV0aWw7CitpbXBvcnQgY29tLmludGVsbGlqLmNvZGVJbnNpZ2h0LkNvZGVJbnNpZ2h0VGVzdENhc2U7CitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkubW9kdWxlLk1vZHVsZTsKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS5yb290cy5Nb2R1bGVSb290TW9kaWZpY2F0aW9uVXRpbDsKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS52ZnMuVmZzVXRpbDsKK2ltcG9ydCBjb20uaW50ZWxsaWoucHNpLlBzaUNsYXNzOworaW1wb3J0IGNvbS5pbnRlbGxpai5wc2kuUHNpRXhwcmVzc2lvbjsKK2ltcG9ydCBjb20uaW50ZWxsaWoucHNpLlBzaUxvY2FsVmFyaWFibGU7CitpbXBvcnQgY29tLmludGVsbGlqLnBzaS5Qc2lNb2RpZmllcjsKK2ltcG9ydCBjb20uaW50ZWxsaWoucHNpLnV0aWwuUHNpVHJlZVV0aWw7CitpbXBvcnQgY29tLmludGVsbGlqLnJlZmFjdG9yaW5nLmludHJvZHVjZUZpZWxkLkJhc2VFeHByZXNzaW9uVG9GaWVsZEhhbmRsZXI7CitpbXBvcnQgY29tLmludGVsbGlqLnJlZmFjdG9yaW5nLmludHJvZHVjZUZpZWxkLkxvY2FsVG9GaWVsZEhhbmRsZXI7CitpbXBvcnQgY29tLmludGVsbGlqLnV0aWwuUGF0aFV0aWw7CitpbXBvcnQgb3JnLmp1bml0LkJlZm9yZTsKKworaW1wb3J0IGphdmEuaW8uRmlsZTsKKworcHVibGljIGNsYXNzIEludHJvZHVjZUZpZWxkV2l0U2V0VXBJbml0aWFsaXphdGlvblRlc3QgZXh0ZW5kcyBDb2RlSW5zaWdodFRlc3RDYXNlIHsKKyAgQE92ZXJyaWRlCisgIHByb3RlY3RlZCBTdHJpbmcgZ2V0VGVzdERhdGFQYXRoKCkgeworICAgIHJldHVybiBKYXZhVGVzdFV0aWwuZ2V0SmF2YVRlc3REYXRhUGF0aCgpOworICB9CisKKyAgQE92ZXJyaWRlCisgIHByb3RlY3RlZCBNb2R1bGUgY3JlYXRlTW9kdWxlKGZpbmFsIFN0cmluZyBuYW1lKSB7CisgICAgZmluYWwgTW9kdWxlIG1vZHVsZSA9IHN1cGVyLmNyZWF0ZU1vZHVsZShuYW1lKTsKKyAgICBmaW5hbCBTdHJpbmcgdXJsID0gVmZzVXRpbC5nZXRVcmxGb3JMaWJyYXJ5Um9vdChuZXcgRmlsZShQYXRoVXRpbC5nZXRKYXJQYXRoRm9yQ2xhc3MoQmVmb3JlLmNsYXNzKSkpOworICAgIE1vZHVsZVJvb3RNb2RpZmljYXRpb25VdGlsLmFkZE1vZHVsZUxpYnJhcnkobW9kdWxlLCB1cmwpOworICAgIHJldHVybiBtb2R1bGU7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0SW5TZXRVcCgpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdCgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEluaXRpYWxseUluU2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RQdWJsaWNCYXNlQ2xhc3NTZXRVcCgpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdCgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEJlZm9yZUV4aXN0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0QmVmb3JlTm90RXhpc3QoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RCZWZvcmVOb3RFeGlzdDEoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RPcmRlckluU2V0dXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RCZWZvcmVFeGlzdE5vbkFubm90YXRlZCgpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdCgpOworICB9CisKKyAgcHJpdmF0ZSB2b2lkIGRvVGVzdCgpIHRocm93cyBFeGNlcHRpb24geworICAgIGNvbmZpZ3VyZUJ5RmlsZSgiL3JlZmFjdG9yaW5nL2ludHJvZHVjZUZpZWxkL2JlZm9yZSIgKyBnZXRUZXN0TmFtZShmYWxzZSkgKyAiLmphdmEiKTsKKyAgICBmaW5hbCBQc2lMb2NhbFZhcmlhYmxlIGxvY2FsID0KKyAgICAgIFBzaVRyZWVVdGlsLmdldFBhcmVudE9mVHlwZShnZXRGaWxlKCkuZmluZEVsZW1lbnRBdChnZXRFZGl0b3IoKS5nZXRDYXJldE1vZGVsKCkuZ2V0T2Zmc2V0KCkpLCBQc2lMb2NhbFZhcmlhYmxlLmNsYXNzKTsKKyAgICBuZXcgTG9jYWxUb0ZpZWxkSGFuZGxlcihnZXRQcm9qZWN0KCksIGZhbHNlKSB7CisgICAgICBAT3ZlcnJpZGUKKyAgICAgIHByb3RlY3RlZCBCYXNlRXhwcmVzc2lvblRvRmllbGRIYW5kbGVyLlNldHRpbmdzIHNob3dSZWZhY3RvcmluZ0RpYWxvZyhmaW5hbCBQc2lDbGFzcyBhQ2xhc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmluYWwgUHNpTG9jYWxWYXJpYWJsZSBsb2NhbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaW5hbCBQc2lFeHByZXNzaW9uW10gb2NjdXJlbmNlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaW5hbCBib29sZWFuIGlzU3RhdGljKSB7CisgICAgICAgIHJldHVybiBuZXcgQmFzZUV4cHJlc3Npb25Ub0ZpZWxkSGFuZGxlci5TZXR0aW5ncygiaSIsIG51bGwsIG9jY3VyZW5jZXMsIHRydWUsIGZhbHNlLCBmYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJhc2VFeHByZXNzaW9uVG9GaWVsZEhhbmRsZXIuSW5pdGlhbGl6YXRpb25QbGFjZS5JTl9TRVRVUF9NRVRIT0QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQc2lNb2RpZmllci5QUklWQVRFLCBsb2NhbCwgbG9jYWwuZ2V0VHlwZSgpLCB0cnVlLCAoQmFzZUV4cHJlc3Npb25Ub0ZpZWxkSGFuZGxlci5UYXJnZXREZXN0aW5hdGlvbiludWxsLCBmYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhbHNlKTsKKyAgICAgIH0KKyAgICB9LmNvbnZlcnRMb2NhbFRvRmllbGQobG9jYWwsIG15RWRpdG9yKTsKKyAgICBjaGVja1Jlc3VsdEJ5RmlsZSgiL3JlZmFjdG9yaW5nL2ludHJvZHVjZUZpZWxkL2FmdGVyIiArIGdldFRlc3ROYW1lKGZhbHNlKSsgIi5qYXZhIik7CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9yZWZhY3RvcmluZy9JbnRyb2R1Y2VQYXJhbWV0ZXJPYmplY3RUZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovcmVmYWN0b3JpbmcvSW50cm9kdWNlUGFyYW1ldGVyT2JqZWN0VGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJkNzBlNWQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovcmVmYWN0b3JpbmcvSW50cm9kdWNlUGFyYW1ldGVyT2JqZWN0VGVzdC5qYXZhCkBAIC0wLDAgKzEsMjQ2IEBACisvKgorICogQ29weXJpZ2h0IDIwMDAtMjAxMiBKZXRCcmFpbnMgcy5yLm8uCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisvKgorICogVXNlcjogYW5uYQorICogRGF0ZTogMjAtQXVnLTIwMDgKKyAqLworcGFja2FnZSBjb20uaW50ZWxsaWoucmVmYWN0b3Jpbmc7CisKK2ltcG9ydCBjb20uaW50ZWxsaWouSmF2YVRlc3RVdGlsOworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLmZpbGVFZGl0b3IuRmlsZURvY3VtZW50TWFuYWdlcjsKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS52ZnMuTG9jYWxGaWxlU3lzdGVtOworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLnZmcy5WaXJ0dWFsRmlsZTsKK2ltcG9ydCBjb20uaW50ZWxsaWoucHNpLio7CitpbXBvcnQgY29tLmludGVsbGlqLnBzaS5zZWFyY2guR2xvYmFsU2VhcmNoU2NvcGU7CitpbXBvcnQgY29tLmludGVsbGlqLnJlZmFjdG9yaW5nLmludHJvZHVjZXBhcmFtZXRlcm9iamVjdC5JbnRyb2R1Y2VQYXJhbWV0ZXJPYmplY3RQcm9jZXNzb3I7CitpbXBvcnQgY29tLmludGVsbGlqLnJlZmFjdG9yaW5nLnV0aWwuUGFyYW1ldGVyVGFibGVQYW5lbDsKK2ltcG9ydCBjb20uaW50ZWxsaWoudXRpbC5GdW5jdGlvbjsKK2ltcG9ydCBjb20uaW50ZWxsaWoudXRpbC5WaXNpYmlsaXR5VXRpbDsKKworcHVibGljIGNsYXNzIEludHJvZHVjZVBhcmFtZXRlck9iamVjdFRlc3QgZXh0ZW5kcyBNdWx0aUZpbGVUZXN0Q2FzZXsKKyAgQE92ZXJyaWRlCisgIHByb3RlY3RlZCBTdHJpbmcgZ2V0VGVzdFJvb3QoKSB7CisgICAgcmV0dXJuICIvcmVmYWN0b3JpbmcvaW50cm9kdWNlUGFyYW1ldGVyT2JqZWN0LyI7CisgIH0KKyAgQE92ZXJyaWRlCisgIHByb3RlY3RlZCBTdHJpbmcgZ2V0VGVzdERhdGFQYXRoKCkgeworICAgIHJldHVybiBKYXZhVGVzdFV0aWwuZ2V0SmF2YVRlc3REYXRhUGF0aCgpOworICB9CisKKyAgcHJpdmF0ZSB2b2lkIGRvVGVzdCgpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdChmYWxzZSwgZmFsc2UpOworICB9CisKKyAgcHJpdmF0ZSB2b2lkIGRvVGVzdChmaW5hbCBib29sZWFuIGRlbGVnYXRlLCBmaW5hbCBib29sZWFuIGNyZWF0ZUlubmVyKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoZGVsZWdhdGUsIGNyZWF0ZUlubmVyLCBuZXcgRnVuY3Rpb248UHNpTWV0aG9kLCBQYXJhbWV0ZXJUYWJsZVBhbmVsLlZhcmlhYmxlRGF0YVtdPigpIHsKKyAgICAgIEBPdmVycmlkZQorICAgICAgcHVibGljIFBhcmFtZXRlclRhYmxlUGFuZWwuVmFyaWFibGVEYXRhW10gZnVuKFBzaU1ldGhvZCBwc2lNZXRob2QpIHsKKyAgICAgICAgcmV0dXJuIGdlbmVyYXRlUGFyYW1zKHBzaU1ldGhvZCk7CisgICAgICB9CisgICAgfSk7CisgIH0KKworICBwcml2YXRlIHZvaWQgZG9UZXN0KGZpbmFsIGJvb2xlYW4gZGVsZWdhdGUsCisgICAgICAgICAgICAgICAgICAgICAgZmluYWwgYm9vbGVhbiBjcmVhdGVJbm5lciwKKyAgICAgICAgICAgICAgICAgICAgICBmaW5hbCBGdW5jdGlvbjxQc2lNZXRob2QsIFBhcmFtZXRlclRhYmxlUGFuZWwuVmFyaWFibGVEYXRhW10+IGZ1bmN0aW9uKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QobmV3IFBlcmZvcm1BY3Rpb24oKSB7CisgICAgICBAT3ZlcnJpZGUKKyAgICAgIHB1YmxpYyB2b2lkIHBlcmZvcm1BY3Rpb24oZmluYWwgVmlydHVhbEZpbGUgcm9vdERpciwgZmluYWwgVmlydHVhbEZpbGUgcm9vdEFmdGVyKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgUHNpQ2xhc3MgYUNsYXNzID0gbXlKYXZhRmFjYWRlLmZpbmRDbGFzcygiVGVzdCIsIEdsb2JhbFNlYXJjaFNjb3BlLnByb2plY3RTY29wZShnZXRQcm9qZWN0KCkpKTsKKworICAgICAgICBhc3NlcnROb3ROdWxsKCJDbGFzcyBUZXN0IG5vdCBmb3VuZCIsIGFDbGFzcyk7CisKKyAgICAgICAgZmluYWwgUHNpTWV0aG9kIG1ldGhvZCA9IGFDbGFzcy5maW5kTWV0aG9kc0J5TmFtZSgiZm9vIiwgZmFsc2UpWzBdOworICAgICAgICBmaW5hbCBQYXJhbWV0ZXJUYWJsZVBhbmVsLlZhcmlhYmxlRGF0YVtdIGRhdGFzID0gZnVuY3Rpb24uZnVuKG1ldGhvZCk7CisKKyAgICAgICAgSW50cm9kdWNlUGFyYW1ldGVyT2JqZWN0UHJvY2Vzc29yIHByb2Nlc3NvciA9IG5ldyBJbnRyb2R1Y2VQYXJhbWV0ZXJPYmplY3RQcm9jZXNzb3IoIlBhcmFtIiwgIiIsIG51bGwsIG1ldGhvZCwgZGF0YXMsIGRlbGVnYXRlLCBmYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3JlYXRlSW5uZXIsIG51bGwsIGZhbHNlKTsKKyAgICAgICAgcHJvY2Vzc29yLnJ1bigpOworICAgICAgfQorICAgIH0pOworICB9CisKKyAgcHJpdmF0ZSBzdGF0aWMgUGFyYW1ldGVyVGFibGVQYW5lbC5WYXJpYWJsZURhdGFbXSBnZW5lcmF0ZVBhcmFtcyhmaW5hbCBQc2lNZXRob2QgbWV0aG9kKSB7CisgICAgZmluYWwgUHNpUGFyYW1ldGVyW10gcGFyYW1ldGVycyA9IG1ldGhvZC5nZXRQYXJhbWV0ZXJMaXN0KCkuZ2V0UGFyYW1ldGVycygpOworCisgICAgZmluYWwgUGFyYW1ldGVyVGFibGVQYW5lbC5WYXJpYWJsZURhdGFbXSBkYXRhcyA9IG5ldyBQYXJhbWV0ZXJUYWJsZVBhbmVsLlZhcmlhYmxlRGF0YVtwYXJhbWV0ZXJzLmxlbmd0aF07CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBwYXJhbWV0ZXJzLmxlbmd0aDsgaSsrKSB7CisgICAgICBQc2lQYXJhbWV0ZXIgcGFyYW1ldGVyID0gcGFyYW1ldGVyc1tpXTsKKyAgICAgIGRhdGFzW2ldID0gbmV3IFBhcmFtZXRlclRhYmxlUGFuZWwuVmFyaWFibGVEYXRhKHBhcmFtZXRlcik7CisgICAgICBkYXRhc1tpXS5uYW1lID0gcGFyYW1ldGVyLmdldE5hbWUoKTsKKyAgICAgIGRhdGFzW2ldLnBhc3NBc1BhcmFtZXRlciA9IHRydWU7CisgICAgfQorICAgIHJldHVybiBkYXRhczsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RJbm5lckNsYXNzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KGZhbHNlLCB0cnVlKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RJbm5lckNsYXNzSW5JbnRlcmZhY2UoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoZmFsc2UsIHRydWUpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdENvcHlKYXZhZG9jKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KGZhbHNlLCB0cnVlKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RVc2VkSW5uZXJDbGFzcygpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdChmYWxzZSwgdHJ1ZSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0UHJpbWl0aXZlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0VmFyYXJncygpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdCgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEluY3JlbWVudCgpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdCgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEhpZXJhcmNoeSgpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdCgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdExoYXNzaWdubWVudCgpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdCgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFN1cGVyQ2FsbHMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RUeXBlUGFyYW1ldGVycygpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdCgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFNhbWVUeXBlQW5kVmFyYXJncygpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdChmYWxzZSwgZmFsc2UsIG5ldyBGdW5jdGlvbjxQc2lNZXRob2QsIFBhcmFtZXRlclRhYmxlUGFuZWwuVmFyaWFibGVEYXRhW10+KCkgeworICAgICAgQE92ZXJyaWRlCisgICAgICBwdWJsaWMgUGFyYW1ldGVyVGFibGVQYW5lbC5WYXJpYWJsZURhdGFbXSBmdW4oUHNpTWV0aG9kIG1ldGhvZCkgeworICAgICAgICBmaW5hbCBQc2lQYXJhbWV0ZXJbXSBwYXJhbWV0ZXJzID0gbWV0aG9kLmdldFBhcmFtZXRlckxpc3QoKS5nZXRQYXJhbWV0ZXJzKCk7CisKKyAgICAgICAgZmluYWwgUGFyYW1ldGVyVGFibGVQYW5lbC5WYXJpYWJsZURhdGFbXSBkYXRhcyA9IG5ldyBQYXJhbWV0ZXJUYWJsZVBhbmVsLlZhcmlhYmxlRGF0YVtwYXJhbWV0ZXJzLmxlbmd0aCAtIDFdOworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHBhcmFtZXRlcnMubGVuZ3RoIC0gMTsgaSsrKSB7CisgICAgICAgICAgUHNpUGFyYW1ldGVyIHBhcmFtZXRlciA9IHBhcmFtZXRlcnNbaV07CisgICAgICAgICAgZGF0YXNbaV0gPSBuZXcgUGFyYW1ldGVyVGFibGVQYW5lbC5WYXJpYWJsZURhdGEocGFyYW1ldGVyKTsKKyAgICAgICAgICBkYXRhc1tpXS5uYW1lID0gcGFyYW1ldGVyLmdldE5hbWUoKTsKKyAgICAgICAgICBkYXRhc1tpXS5wYXNzQXNQYXJhbWV0ZXIgPSB0cnVlOworICAgICAgICB9CisgICAgICAgIHJldHVybiBkYXRhczsKKyAgICAgIH0KKyAgICB9KTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RUeXBlUGFyYW1ldGVyc1dpdGhDaG9zZW5TdWJ0eXBlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KGZhbHNlLCB0cnVlLCBuZXcgRnVuY3Rpb248UHNpTWV0aG9kLCBQYXJhbWV0ZXJUYWJsZVBhbmVsLlZhcmlhYmxlRGF0YVtdPigpIHsKKyAgICAgIEBPdmVycmlkZQorICAgICAgcHVibGljIFBhcmFtZXRlclRhYmxlUGFuZWwuVmFyaWFibGVEYXRhW10gZnVuKFBzaU1ldGhvZCBwc2lNZXRob2QpIHsKKyAgICAgICAgZmluYWwgUHNpUGFyYW1ldGVyIHBhcmFtZXRlciA9IHBzaU1ldGhvZC5nZXRQYXJhbWV0ZXJMaXN0KCkuZ2V0UGFyYW1ldGVycygpWzBdOworICAgICAgICBmaW5hbCBQc2lDbGFzcyBjb2xsZWN0aW9uQ2xhc3MgPSBnZXRKYXZhRmFjYWRlKCkuZmluZENsYXNzKENvbW1vbkNsYXNzTmFtZXMuSkFWQV9VVElMX0NPTExFQ1RJT04pOworICAgICAgICBmaW5hbCBQYXJhbWV0ZXJUYWJsZVBhbmVsLlZhcmlhYmxlRGF0YSB2YXJpYWJsZURhdGEgPQorICAgICAgICAgIG5ldyBQYXJhbWV0ZXJUYWJsZVBhbmVsLlZhcmlhYmxlRGF0YShwYXJhbWV0ZXIsIEphdmFQc2lGYWNhZGUuZ2V0RWxlbWVudEZhY3RvcnkoZ2V0UHJvamVjdCgpKS5jcmVhdGVUeXBlKGNvbGxlY3Rpb25DbGFzcykpOworICAgICAgICB2YXJpYWJsZURhdGEubmFtZSA9IHBhcmFtZXRlci5nZXROYW1lKCk7CisgICAgICAgIHZhcmlhYmxlRGF0YS5wYXNzQXNQYXJhbWV0ZXIgPSB0cnVlOworICAgICAgICByZXR1cm4gbmV3IFBhcmFtZXRlclRhYmxlUGFuZWwuVmFyaWFibGVEYXRhW117dmFyaWFibGVEYXRhfTsKKyAgICAgIH0KKyAgICB9KTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RNdWx0aXBsZVR5cGVQYXJhbWV0ZXJzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0RGVsZWdhdGUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QodHJ1ZSwgZmFsc2UpOworICB9CisKKyAgcHJpdmF0ZSB2b2lkIGRvVGVzdEV4aXN0aW5nQ2xhc3MoZmluYWwgU3RyaW5nIGV4aXN0aW5nQ2xhc3NOYW1lLCBmaW5hbCBTdHJpbmcgZXhpc3RpbmdDbGFzc1BhY2thZ2UsIGZpbmFsIGJvb2xlYW4gZ2VuZXJhdGVBY2Nlc3NvcnMpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdEV4aXN0aW5nQ2xhc3MoZXhpc3RpbmdDbGFzc05hbWUsIGV4aXN0aW5nQ2xhc3NQYWNrYWdlLCBnZW5lcmF0ZUFjY2Vzc29ycywgbnVsbCk7CisgIH0KKworICBwcml2YXRlIHZvaWQgZG9UZXN0RXhpc3RpbmdDbGFzcyhmaW5hbCBTdHJpbmcgZXhpc3RpbmdDbGFzc05hbWUsIGZpbmFsIFN0cmluZyBleGlzdGluZ0NsYXNzUGFja2FnZSwgZmluYWwgYm9vbGVhbiBnZW5lcmF0ZUFjY2Vzc29ycywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmluYWwgU3RyaW5nIG5ld1Zpc2liaWxpdHkpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdChuZXcgUGVyZm9ybUFjdGlvbigpIHsKKyAgICAgIEBPdmVycmlkZQorICAgICAgcHVibGljIHZvaWQgcGVyZm9ybUFjdGlvbihmaW5hbCBWaXJ0dWFsRmlsZSByb290RGlyLCBmaW5hbCBWaXJ0dWFsRmlsZSByb290QWZ0ZXIpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICBQc2lDbGFzcyBhQ2xhc3MgPSBteUphdmFGYWNhZGUuZmluZENsYXNzKCJUZXN0IiwgR2xvYmFsU2VhcmNoU2NvcGUucHJvamVjdFNjb3BlKGdldFByb2plY3QoKSkpOworICAgICAgICBpZiAoYUNsYXNzID09IG51bGwpIHsKKyAgICAgICAgICBhQ2xhc3MgPSBteUphdmFGYWNhZGUuZmluZENsYXNzKCJwMi5UZXN0IiwgR2xvYmFsU2VhcmNoU2NvcGUucHJvamVjdFNjb3BlKGdldFByb2plY3QoKSkpOworICAgICAgICB9CisgICAgICAgIGFzc2VydE5vdE51bGwoIkNsYXNzIFRlc3Qgbm90IGZvdW5kIiwgYUNsYXNzKTsKKworICAgICAgICBmaW5hbCBQc2lNZXRob2QgbWV0aG9kID0gYUNsYXNzLmZpbmRNZXRob2RzQnlOYW1lKCJmb28iLCBmYWxzZSlbMF07CisgICAgICAgIEludHJvZHVjZVBhcmFtZXRlck9iamVjdFByb2Nlc3NvciBwcm9jZXNzb3IgPSBuZXcgSW50cm9kdWNlUGFyYW1ldGVyT2JqZWN0UHJvY2Vzc29yKGV4aXN0aW5nQ2xhc3NOYW1lLCBleGlzdGluZ0NsYXNzUGFja2FnZSwgbnVsbCwgbWV0aG9kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZW5lcmF0ZVBhcmFtcyhtZXRob2QpLCBmYWxzZSwgdHJ1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFsc2UsIG5ld1Zpc2liaWxpdHksIGdlbmVyYXRlQWNjZXNzb3JzKTsKKyAgICAgICAgcHJvY2Vzc29yLnJ1bigpOworICAgICAgICBMb2NhbEZpbGVTeXN0ZW0uZ2V0SW5zdGFuY2UoKS5yZWZyZXNoKGZhbHNlKTsKKyAgICAgICAgRmlsZURvY3VtZW50TWFuYWdlci5nZXRJbnN0YW5jZSgpLnNhdmVBbGxEb2N1bWVudHMoKTsKKyAgICAgIH0KKyAgICB9KTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RJbnRlZ2VyV3JhcHBlcigpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdEV4aXN0aW5nQ2xhc3MoIkludGVnZXIiLCAiamF2YS5sYW5nIiwgZmFsc2UpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEludGVnZXJJbmNyZW1lbnRhbCgpIHRocm93cyBFeGNlcHRpb24geworICAgIGNoZWNrRXhjZXB0aW9uVGhyb3duKCJJbnRlZ2VyIiwgImphdmEubGFuZyIsICJDYW5ub3QgcGVyZm9ybSB0aGUgcmVmYWN0b3JpbmcuXG4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiU2V0dGVycyBmb3IgdGhlIGZvbGxvd2luZyBmaWVsZHMgYXJlIHJlcXVpcmVkOlxuIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInZhbHVlLlxuIik7CisgIH0KKworICBwcml2YXRlIHZvaWQgY2hlY2tFeGNlcHRpb25UaHJvd24oU3RyaW5nIGV4aXN0aW5nQ2xhc3NOYW1lLCBTdHJpbmcgZXhpc3RpbmdDbGFzc1BhY2thZ2UsIFN0cmluZyBleGNlcHRpb25NZXNzYWdlKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICB0cnkgeworICAgICAgZG9UZXN0RXhpc3RpbmdDbGFzcyhleGlzdGluZ0NsYXNzTmFtZSwgZXhpc3RpbmdDbGFzc1BhY2thZ2UsIGZhbHNlKTsKKyAgICB9CisgICAgY2F0Y2ggKEJhc2VSZWZhY3RvcmluZ1Byb2Nlc3Nvci5Db25mbGljdHNJblRlc3RzRXhjZXB0aW9uIGUpIHsKKyAgICAgIGFzc2VydEVxdWFscyhleGNlcHRpb25NZXNzYWdlLCBlLmdldE1lc3NhZ2UoKSk7CisgICAgICByZXR1cm47CisgICAgfQorICAgIGZhaWwoIkNvbmZsaWN0IHdhcyBub3QgZm91bmQiKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RHZW5lcmF0ZUdldHRlclNldHRlckZvckV4aXN0aW5nQmVhbigpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdEV4aXN0aW5nQ2xhc3MoIlBhcmFtIiwgIiIsIHRydWUpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEV4aXN0aW5nQmVhblZpc2liaWxpdHkoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3RFeGlzdGluZ0NsYXNzKCJQYXJhbSIsICJwIiwgZmFsc2UsIFZpc2liaWxpdHlVdGlsLkVTQ0FMQVRFX1ZJU0lCSUxJVFkpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEV4aXN0aW5nQmVhbklmTm9HZW5lcmF0aW9uKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgY2hlY2tFeGNlcHRpb25UaHJvd24oIlBhcmFtIiwgIiIsICJDYW5ub3QgcGVyZm9ybSB0aGUgcmVmYWN0b3JpbmcuXG4iICsgIlNldHRlcnMgZm9yIHRoZSBmb2xsb3dpbmcgZmllbGRzIGFyZSByZXF1aXJlZDpcbiIgKyAiaS5cbiIpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFBhcmFtTmFtZUNvbmZsaWN0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0RXhpc3RpbmdDbGFzcygiUGFyYW0iLCAiIiwgdHJ1ZSk7CisgIH0KKworCisgIHB1YmxpYyB2b2lkIHRlc3RFeGlzdGVudEJlYW4oKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3RFeGlzdGluZ0NsYXNzKCJQYXJhbSIsICIiLCBmYWxzZSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0V3JvbmdCZWFuKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgY2hlY2tFeGNlcHRpb25UaHJvd24oIlBhcmFtIiwgIiIsICJDYW5ub3QgcGVyZm9ybSB0aGUgcmVmYWN0b3JpbmcuXG4iICsgIkdldHRlcnMgZm9yIHRoZSBmb2xsb3dpbmcgZmllbGRzIGFyZSByZXF1aXJlZDpcbiIgKyAiaS5cbiIpOworICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovcmVmYWN0b3JpbmcvSW50cm9kdWNlUGFyYW1ldGVyVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL3JlZmFjdG9yaW5nL0ludHJvZHVjZVBhcmFtZXRlclRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YWYwYTAwCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL3JlZmFjdG9yaW5nL0ludHJvZHVjZVBhcmFtZXRlclRlc3QuamF2YQpAQCAtMCwwICsxLDQ0MiBAQAorLyoKKyAqIENyZWF0ZWQgYnkgSW50ZWxsaUogSURFQS4KKyAqIFVzZXI6IGRzbAorICogRGF0ZTogMDcuMDUuMjAwMgorICogVGltZTogMTM6NTk6MDEKKyAqIFRvIGNoYW5nZSB0ZW1wbGF0ZSBmb3IgbmV3IGNsYXNzIHVzZQorICogQ29kZSBTdHlsZSB8IENsYXNzIFRlbXBsYXRlcyBvcHRpb25zIChUb29scyB8IElERSBPcHRpb25zKS4KKyAqLworcGFja2FnZSBjb20uaW50ZWxsaWoucmVmYWN0b3Jpbmc7CisKK2ltcG9ydCBjb20uaW50ZWxsaWouSmF2YVRlc3RVdGlsOworaW1wb3J0IGNvbS5pbnRlbGxpai5jb2RlSW5zaWdodC5Db2RlSW5zaWdodFV0aWw7CitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkuYWN0aW9uU3lzdGVtLkRhdGFDb250ZXh0OworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLnV0aWwuUGFzczsKK2ltcG9ydCBjb20uaW50ZWxsaWoucG9tLmphdmEuTGFuZ3VhZ2VMZXZlbDsKK2ltcG9ydCBjb20uaW50ZWxsaWoucHNpLlBzaUVsZW1lbnQ7CitpbXBvcnQgY29tLmludGVsbGlqLnBzaS5Qc2lFeHByZXNzaW9uOworaW1wb3J0IGNvbS5pbnRlbGxpai5wc2kuUHNpTG9jYWxWYXJpYWJsZTsKK2ltcG9ydCBjb20uaW50ZWxsaWoucHNpLlBzaU1ldGhvZDsKK2ltcG9ydCBjb20uaW50ZWxsaWoucmVmYWN0b3JpbmcuaW50cm9kdWNlRmllbGQuRWxlbWVudFRvV29ya09uOworaW1wb3J0IGNvbS5pbnRlbGxpai5yZWZhY3RvcmluZy5pbnRyb2R1Y2VQYXJhbWV0ZXIuSW50cm9kdWNlUGFyYW1ldGVySGFuZGxlcjsKK2ltcG9ydCBjb20uaW50ZWxsaWoucmVmYWN0b3JpbmcuaW50cm9kdWNlUGFyYW1ldGVyLkludHJvZHVjZVBhcmFtZXRlclByb2Nlc3NvcjsKK2ltcG9ydCBjb20uaW50ZWxsaWoucmVmYWN0b3JpbmcuaW50cm9kdWNlUGFyYW1ldGVyLlV0aWw7CitpbXBvcnQgY29tLmludGVsbGlqLnJlZmFjdG9yaW5nLnV0aWwub2NjdXJyZW5jZXMuRXhwcmVzc2lvbk9jY3VycmVuY2VNYW5hZ2VyOworaW1wb3J0IGNvbS5pbnRlbGxpai50ZXN0RnJhbWV3b3JrLlRlc3REYXRhUGF0aDsKK2ltcG9ydCBnbnUudHJvdmUuVEludEFycmF5TGlzdDsKK2ltcG9ydCBvcmcuamV0YnJhaW5zLmFubm90YXRpb25zLk5vbk5sczsKK2ltcG9ydCBvcmcuamV0YnJhaW5zLmFubm90YXRpb25zLk5vdE51bGw7CitpbXBvcnQgb3JnLmpldGJyYWlucy5hbm5vdGF0aW9ucy5OdWxsYWJsZTsKKworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitAVGVzdERhdGFQYXRoKCIkQ09OVEVOVF9ST09UL3Rlc3REYXRhIikKK3B1YmxpYyBjbGFzcyBJbnRyb2R1Y2VQYXJhbWV0ZXJUZXN0IGV4dGVuZHMgTGlnaHRSZWZhY3RvcmluZ1Rlc3RDYXNlICB7CisgIEBOb3ROdWxsCisgIEBPdmVycmlkZQorICBwcm90ZWN0ZWQgU3RyaW5nIGdldFRlc3REYXRhUGF0aCgpIHsKKyAgICByZXR1cm4gSmF2YVRlc3RVdGlsLmdldEphdmFUZXN0RGF0YVBhdGgoKTsKKyAgfQorCisgIHByaXZhdGUgdm9pZCBkb1Rlc3QoaW50IHJlcGxhY2VGaWVsZHNXaXRoR2V0dGVycywgYm9vbGVhbiByZW1vdmVVbnVzZWRQYXJhbWV0ZXJzLCBib29sZWFuIHNlYXJjaEZvclN1cGVyLCBib29sZWFuIGRlY2xhcmVGaW5hbCwKKyAgICAgICAgICAgICAgICAgICAgICBmaW5hbCBib29sZWFuIGdlbmVyYXRlRGVsZWdhdGUpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdChyZXBsYWNlRmllbGRzV2l0aEdldHRlcnMsIHJlbW92ZVVudXNlZFBhcmFtZXRlcnMsIHNlYXJjaEZvclN1cGVyLCBkZWNsYXJlRmluYWwsIGdlbmVyYXRlRGVsZWdhdGUsIG51bGwpOworICB9CisKKyAgcHJpdmF0ZSB2b2lkIGRvVGVzdChpbnQgcmVwbGFjZUZpZWxkc1dpdGhHZXR0ZXJzLCBib29sZWFuIHJlbW92ZVVudXNlZFBhcmFtZXRlcnMsIGJvb2xlYW4gc2VhcmNoRm9yU3VwZXIsIGJvb2xlYW4gZGVjbGFyZUZpbmFsLCBmaW5hbCBib29sZWFuIGdlbmVyYXRlRGVsZWdhdGUsCisgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIGNvbmZsaWN0KSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBib29sZWFuIGVuYWJsZWQgPSB0cnVlOworICAgIHRyeSB7CisgICAgICBjb25maWd1cmVCeUZpbGUoIi9yZWZhY3RvcmluZy9pbnRyb2R1Y2VQYXJhbWV0ZXIvYmVmb3JlIiArIGdldFRlc3ROYW1lKGZhbHNlKSArICIuamF2YSIpOworICAgICAgZW5hYmxlZCA9IG15RWRpdG9yLmdldFNldHRpbmdzKCkuaXNWYXJpYWJsZUlucGxhY2VSZW5hbWVFbmFibGVkKCk7CisgICAgICBteUVkaXRvci5nZXRTZXR0aW5ncygpLnNldFZhcmlhYmxlSW5wbGFjZVJlbmFtZUVuYWJsZWQoZmFsc2UpOworICAgICAgcGVyZm9ybSh0cnVlLCByZXBsYWNlRmllbGRzV2l0aEdldHRlcnMsICJhbk9iamVjdCIsIHNlYXJjaEZvclN1cGVyLCBkZWNsYXJlRmluYWwsIHJlbW92ZVVudXNlZFBhcmFtZXRlcnMsIGdlbmVyYXRlRGVsZWdhdGUpOworICAgICAgY2hlY2tSZXN1bHRCeUZpbGUoIi9yZWZhY3RvcmluZy9pbnRyb2R1Y2VQYXJhbWV0ZXIvYWZ0ZXIiICsgZ2V0VGVzdE5hbWUoZmFsc2UpICsgIi5qYXZhIik7CisgICAgICBpZiAoY29uZmxpY3QgIT0gbnVsbCkgeworICAgICAgICBmYWlsKCJDb25mbGljdCBleHBlY3RlZCIpOworICAgICAgfQorICAgIH0KKyAgICBjYXRjaCAoQmFzZVJlZmFjdG9yaW5nUHJvY2Vzc29yLkNvbmZsaWN0c0luVGVzdHNFeGNlcHRpb24gZSkgeworICAgICAgaWYgKGNvbmZsaWN0ID09IG51bGwpIHsKKyAgICAgICAgdGhyb3cgZTsKKyAgICAgIH0KKyAgICAgIGFzc2VydEVxdWFscyhjb25mbGljdCwgZS5nZXRNZXNzYWdlKCkpOworICAgIH0gZmluYWxseSB7CisgICAgICBteUVkaXRvci5nZXRTZXR0aW5ncygpLnNldFZhcmlhYmxlSW5wbGFjZVJlbmFtZUVuYWJsZWQoZW5hYmxlZCk7CisgICAgfQorICB9CisKKyAgcHVibGljIHZvaWQgdGVzdE5vVXNhZ2VzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KEludHJvZHVjZVBhcmFtZXRlclJlZmFjdG9yaW5nLlJFUExBQ0VfRklFTERTX1dJVEhfR0VUVEVSU19OT05FLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0U2ltcGxlVXNhZ2UoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoSW50cm9kdWNlUGFyYW1ldGVyUmVmYWN0b3JpbmcuUkVQTEFDRV9GSUVMRFNfV0lUSF9HRVRURVJTX05PTkUsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RNZXRob2RXaXRob3V0UGFyYW1zKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KEludHJvZHVjZVBhcmFtZXRlclJlZmFjdG9yaW5nLlJFUExBQ0VfRklFTERTX1dJVEhfR0VUVEVSU19OT05FLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0UGFyYW1ldGVyU3Vic3RpdHV0aW9uKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KEludHJvZHVjZVBhcmFtZXRlclJlZmFjdG9yaW5nLlJFUExBQ0VfRklFTERTX1dJVEhfR0VUVEVSU19OT05FLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0VGhpc1N1YnN0aXR1dGlvbigpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdChJbnRyb2R1Y2VQYXJhbWV0ZXJSZWZhY3RvcmluZy5SRVBMQUNFX0ZJRUxEU19XSVRIX0dFVFRFUlNfTk9ORSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFRoaXNTdWJzdGl0dXRpb25JblF1YWxpZmllcigpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdChJbnRyb2R1Y2VQYXJhbWV0ZXJSZWZhY3RvcmluZy5SRVBMQUNFX0ZJRUxEU19XSVRIX0dFVFRFUlNfTk9ORSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsICJmaWVsZCA8Yj48Y29kZT5UZXN0Lmk8L2NvZGU+PC9iPiBpcyBub3QgYWNjZXNzaWJsZSBmcm9tIG1ldGhvZCA8Yj48Y29kZT5YVGVzdC5uKCk8L2NvZGU+PC9iPi4gVmFsdWUgZm9yIGludHJvZHVjZWQgcGFyYW1ldGVyIGluIHRoYXQgbWV0aG9kIGNhbGwgd2lsbCBiZSBpbmNvcnJlY3QuIik7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0RmllbGRBY2Nlc3MoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoSW50cm9kdWNlUGFyYW1ldGVyUmVmYWN0b3JpbmcuUkVQTEFDRV9GSUVMRFNfV0lUSF9HRVRURVJTX05PTkUsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RNZXRob2RBY2Nlc3MoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoSW50cm9kdWNlUGFyYW1ldGVyUmVmYWN0b3JpbmcuUkVQTEFDRV9GSUVMRFNfV0lUSF9HRVRURVJTX05PTkUsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RTdGF0aWNGaWVsZEFjY2VzcygpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdChJbnRyb2R1Y2VQYXJhbWV0ZXJSZWZhY3RvcmluZy5SRVBMQUNFX0ZJRUxEU19XSVRIX0dFVFRFUlNfTk9ORSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEZpZWxkV2l0aEdldHRlclJlcGxhY2VtZW50KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KEludHJvZHVjZVBhcmFtZXRlclJlZmFjdG9yaW5nLlJFUExBQ0VfRklFTERTX1dJVEhfR0VUVEVSU19BTEwsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RGaWVsZFdpdGhJbmFjY2Vzc2libGVHZXR0ZXJSZXBsYWNlbWVudCgpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdChJbnRyb2R1Y2VQYXJhbWV0ZXJSZWZhY3RvcmluZy5SRVBMQUNFX0ZJRUxEU19XSVRIX0dFVFRFUlNfSU5BQ0NFU1NJQkxFLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0V2VpcmRRdWFsaWZpZXIoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoSW50cm9kdWNlUGFyYW1ldGVyUmVmYWN0b3JpbmcuUkVQTEFDRV9GSUVMRFNfV0lUSF9HRVRURVJTX0lOQUNDRVNTSUJMRSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFN1cGVySW5FeHByZXNzaW9uKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KEludHJvZHVjZVBhcmFtZXRlclJlZmFjdG9yaW5nLlJFUExBQ0VfRklFTERTX1dJVEhfR0VUVEVSU19JTkFDQ0VTU0lCTEUsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCAiUGFyYW1ldGVyIGluaXRpYWxpemVyIGNvbnRhaW5zIDxiPjxjb2RlPnN1cGVyPC9jb2RlPjwvYj4sIGJ1dCBub3QgYWxsIGNhbGxzIHRvIG1ldGhvZCBhcmUgaW4gaXRzIGNsYXNzLiIpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdE51bGwoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoSW50cm9kdWNlUGFyYW1ldGVyUmVmYWN0b3JpbmcuUkVQTEFDRV9GSUVMRFNfV0lUSF9HRVRURVJTX0lOQUNDRVNTSUJMRSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFdlaXJkUXVhbGlmaWVyQW5kUGFyYW1ldGVyKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KEludHJvZHVjZVBhcmFtZXRlclJlZmFjdG9yaW5nLlJFUExBQ0VfRklFTERTX1dJVEhfR0VUVEVSU19JTkFDQ0VTU0lCTEUsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RJbXBsaWNpdFN1cGVyQ2FsbCgpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdChJbnRyb2R1Y2VQYXJhbWV0ZXJSZWZhY3RvcmluZy5SRVBMQUNFX0ZJRUxEU19XSVRIX0dFVFRFUlNfSU5BQ0NFU1NJQkxFLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0SW1wbGljaXREZWZhdWx0Q29uc3RydWN0b3IoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoSW50cm9kdWNlUGFyYW1ldGVyUmVmYWN0b3JpbmcuUkVQTEFDRV9GSUVMRFNfV0lUSF9HRVRURVJTX0lOQUNDRVNTSUJMRSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdExvY2FsVmFyRGVjbGFyYXRpb24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoSW50cm9kdWNlUGFyYW1ldGVyUmVmYWN0b3JpbmcuUkVQTEFDRV9GSUVMRFNfV0lUSF9HRVRURVJTX0lOQUNDRVNTSUJMRSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEludGVybmFsU2lkZUVmZmVjdCgpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdChJbnRyb2R1Y2VQYXJhbWV0ZXJSZWZhY3RvcmluZy5SRVBMQUNFX0ZJRUxEU19XSVRIX0dFVFRFUlNfSU5BQ0NFU1NJQkxFLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0UXVhbGlmaWVkTmV3KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KEludHJvZHVjZVBhcmFtZXRlclJlZmFjdG9yaW5nLlJFUExBQ0VfRklFTERTX1dJVEhfR0VUVEVSU19JTkFDQ0VTU0lCTEUsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RBbm9ueW1vdXNDbGFzcygpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdChJbnRyb2R1Y2VQYXJhbWV0ZXJSZWZhY3RvcmluZy5SRVBMQUNFX0ZJRUxEU19XSVRIX0dFVFRFUlNfSU5BQ0NFU1NJQkxFLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0U3VwZXJXaXRoU2lkZUVmZmVjdCgpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdChJbnRyb2R1Y2VQYXJhbWV0ZXJSZWZhY3RvcmluZy5SRVBMQUNFX0ZJRUxEU19XSVRIX0dFVFRFUlNfSU5BQ0NFU1NJQkxFLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgIlBhcmFtZXRlciBpbml0aWFsaXplciBjb250YWlucyA8Yj48Y29kZT5zdXBlcjwvY29kZT48L2I+LCBidXQgbm90IGFsbCBjYWxscyB0byBtZXRob2QgYXJlIGluIGl0cyBjbGFzcy4iKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RDb25mbGljdGluZ0ZpZWxkKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KEludHJvZHVjZVBhcmFtZXRlclJlZmFjdG9yaW5nLlJFUExBQ0VfRklFTERTX1dJVEhfR0VUVEVSU19JTkFDQ0VTU0lCTEUsIGZhbHNlLCB0cnVlLCBmYWxzZSwgZmFsc2UpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFBhcmFtZXRlckluRm9yKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgY29uZmlndXJlQnlGaWxlKCIvcmVmYWN0b3JpbmcvaW50cm9kdWNlUGFyYW1ldGVyL2JlZm9yZVBhcmFtZXRlckluRm9yLmphdmEiKTsKKyAgICBwZXJmb3JtRm9yTG9jYWwodHJ1ZSwgdHJ1ZSwgdHJ1ZSwgZmFsc2UsIGZhbHNlKTsKKyAgICBjaGVja1Jlc3VsdEJ5RmlsZSgiL3JlZmFjdG9yaW5nL2ludHJvZHVjZVBhcmFtZXRlci9hZnRlclBhcmFtZXRlckluRm9yLmphdmEiKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RQYXJhbWV0ZXJKYXZhRG9jMSgpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdChJbnRyb2R1Y2VQYXJhbWV0ZXJSZWZhY3RvcmluZy5SRVBMQUNFX0ZJRUxEU19XSVRIX0dFVFRFUlNfSU5BQ0NFU1NJQkxFLCBmYWxzZSwgZmFsc2UsIHRydWUsIGZhbHNlKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RQYXJhbWV0ZXJKYXZhRG9jMigpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdChJbnRyb2R1Y2VQYXJhbWV0ZXJSZWZhY3RvcmluZy5SRVBMQUNFX0ZJRUxEU19XSVRIX0dFVFRFUlNfSU5BQ0NFU1NJQkxFLCBmYWxzZSwgZmFsc2UsIHRydWUsIGZhbHNlKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RQYXJhbWV0ZXJKYXZhRG9jMygpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdChJbnRyb2R1Y2VQYXJhbWV0ZXJSZWZhY3RvcmluZy5SRVBMQUNFX0ZJRUxEU19XSVRIX0dFVFRFUlNfSU5BQ0NFU1NJQkxFLCBmYWxzZSwgZmFsc2UsIHRydWUsIGZhbHNlKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RQYXJhbWV0ZXJKYXZhRG9jQmVmb3JlVmFyYXJnKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KEludHJvZHVjZVBhcmFtZXRlclJlZmFjdG9yaW5nLlJFUExBQ0VfRklFTERTX1dJVEhfR0VUVEVSU19JTkFDQ0VTU0lCTEUsIGZhbHNlLCBmYWxzZSwgdHJ1ZSwgZmFsc2UpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEluY29tcGxldGVWYXJhcmcoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoSW50cm9kdWNlUGFyYW1ldGVyUmVmYWN0b3JpbmcuUkVQTEFDRV9GSUVMRFNfV0lUSF9HRVRURVJTX0lOQUNDRVNTSUJMRSwgdHJ1ZSwgZmFsc2UsIHRydWUsIGZhbHNlLCAiSW5jb21wbGV0ZSBjYWxsKG1ldGhvZCgpKTogMiBwYXJhbWV0ZXJzIGV4cGVjdGVkIGJ1dCBvbmx5IDAgZm91bmRcbiIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJJbmNvbXBsZXRlIGNhbGwobWV0aG9kKCkpOiBleHBlY3RlZCB0byBkZWxldGUgdGhlIDAgcGFyYW1ldGVyIGJ1dCBvbmx5IDAgcGFyYW1ldGVycyBmb3VuZCIpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEluY29ycmVjdFNjb3BlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KEludHJvZHVjZVBhcmFtZXRlclJlZmFjdG9yaW5nLlJFUExBQ0VfRklFTERTX1dJVEhfR0VUVEVSU19JTkFDQ0VTU0lCTEUsIGZhbHNlLCB0cnVlLCB0cnVlLCBmYWxzZSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0RXhwZWN0ZWRUeXBlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KEludHJvZHVjZVBhcmFtZXRlclJlZmFjdG9yaW5nLlJFUExBQ0VfRklFTERTX1dJVEhfR0VUVEVSU19JTkFDQ0VTU0lCTEUsIGZhbHNlLCBmYWxzZSwgdHJ1ZSwgZmFsc2UpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFJlbW92ZVBhcmFtZXRlcigpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdChJbnRyb2R1Y2VQYXJhbWV0ZXJSZWZhY3RvcmluZy5SRVBMQUNFX0ZJRUxEU19XSVRIX0dFVFRFUlNfTk9ORSwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0UmVtb3ZlUGFyYW1ldGVyQWZ0ZXJWYXJpYWJsZSgpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdChJbnRyb2R1Y2VQYXJhbWV0ZXJSZWZhY3RvcmluZy5SRVBMQUNFX0ZJRUxEU19XSVRIX0dFVFRFUlNfTk9ORSwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0UmVtb3ZlUGFyYW1ldGVySW5IaWVyYXJjaHkoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoSW50cm9kdWNlUGFyYW1ldGVyUmVmYWN0b3JpbmcuUkVQTEFDRV9GSUVMRFNfV0lUSF9HRVRURVJTX05PTkUsIHRydWUsIGZhbHNlLCBmYWxzZSwgZmFsc2UpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFJlbW92ZVBhcmFtZXRlcldpdGhKYXZhZG9jKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KEludHJvZHVjZVBhcmFtZXRlclJlZmFjdG9yaW5nLlJFUExBQ0VfRklFTERTX1dJVEhfR0VUVEVSU19OT05FLCB0cnVlLCBmYWxzZSwgZmFsc2UsIGZhbHNlKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RWYXJhcmdzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7ICAgLy8gSURFQURFVi0xNjgyOAorICAgIGRvVGVzdChJbnRyb2R1Y2VQYXJhbWV0ZXJSZWZhY3RvcmluZy5SRVBMQUNFX0ZJRUxEU19XSVRIX0dFVFRFUlNfTk9ORSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFZhcmFyZ3MxKCkgdGhyb3dzIEV4Y2VwdGlvbiB7ICAgLy8gSURFQURFVi0zMzU1NQorICAgIGRvVGVzdChJbnRyb2R1Y2VQYXJhbWV0ZXJSZWZhY3RvcmluZy5SRVBMQUNFX0ZJRUxEU19XSVRIX0dFVFRFUlNfTk9ORSwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0VXNlSW5Jbm5lckNsYXNzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0VGhyb3VnaEhhbmRsZXIoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RMb2NhbFZhclNlbGVjdGlvbigpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdFRocm91Z2hIYW5kbGVyKCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0R2VuZXJhdGVEZWxlZ2F0ZSgpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdChJbnRyb2R1Y2VQYXJhbWV0ZXJSZWZhY3RvcmluZy5SRVBMQUNFX0ZJRUxEU19XSVRIX0dFVFRFUlNfTk9ORSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgdHJ1ZSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0R2VuZXJhdGVEZWxlZ2F0ZVJlbW92ZVBhcmFtZXRlcigpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdChJbnRyb2R1Y2VQYXJhbWV0ZXJSZWZhY3RvcmluZy5SRVBMQUNFX0ZJRUxEU19XSVRIX0dFVFRFUlNfTk9ORSwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCB0cnVlKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RHZW5lcmF0ZURlbGVnYXRlTm9BcmdzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KEludHJvZHVjZVBhcmFtZXRlclJlZmFjdG9yaW5nLlJFUExBQ0VfRklFTERTX1dJVEhfR0VUVEVSU19OT05FLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCB0cnVlKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RFbnVtcygpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdChJbnRyb2R1Y2VQYXJhbWV0ZXJSZWZhY3RvcmluZy5SRVBMQUNFX0ZJRUxEU19XSVRIX0dFVFRFUlNfTk9ORSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdE1ldGhvZFVzYWdlSW5UaGlzTWV0aG9kSW5oZXJpdG9yKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KEludHJvZHVjZVBhcmFtZXRlclJlZmFjdG9yaW5nLlJFUExBQ0VfRklFTERTX1dJVEhfR0VUVEVSU19OT05FLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0R2V0dGVyUXVhbGlmaWVyKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KEludHJvZHVjZVBhcmFtZXRlclJlZmFjdG9yaW5nLlJFUExBQ0VfRklFTERTX1dJVEhfR0VUVEVSU19JTkFDQ0VTU0lCTEUsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RBcnJheUluaXRpYWxpemVyKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KEludHJvZHVjZVBhcmFtZXRlclJlZmFjdG9yaW5nLlJFUExBQ0VfRklFTERTX1dJVEhfR0VUVEVSU19JTkFDQ0VTU0lCTEUsIHRydWUsIGZhbHNlLCBmYWxzZSwgZmFsc2UpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEluY29tcGxldGVFbnVtRGVmaW5pdGlvbigpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdChJbnRyb2R1Y2VQYXJhbWV0ZXJSZWZhY3RvcmluZy5SRVBMQUNFX0ZJRUxEU19XSVRIX0dFVFRFUlNfTk9ORSwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgIkluY29tcGxldGUgY2FsbChSb290KCkpOiAyIHBhcmFtZXRlcnMgZXhwZWN0ZWQgYnV0IG9ubHkgMCBmb3VuZFxuIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiSW5jb21wbGV0ZSBjYWxsKFJvb3QoKSk6IGV4cGVjdGVkIHRvIGRlbGV0ZSB0aGUgMSBwYXJhbWV0ZXIgYnV0IG9ubHkgMCBwYXJhbWV0ZXJzIGZvdW5kIik7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0U3RhdGljRmllbGRXaXRoR2V0dGVyUmVwbGFjZW1lbnQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoSW50cm9kdWNlUGFyYW1ldGVyUmVmYWN0b3JpbmcuUkVQTEFDRV9GSUVMRFNfV0lUSF9HRVRURVJTX0FMTCwgdHJ1ZSwgZmFsc2UsIHRydWUsIGZhbHNlKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RHZW5lcmF0ZURlbGVnYXRlSW5TdXBlckNsYXNzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KEludHJvZHVjZVBhcmFtZXRlclJlZmFjdG9yaW5nLlJFUExBQ0VfRklFTERTX1dJVEhfR0VUVEVSU19BTEwsIHRydWUsIHRydWUsIHRydWUsIHRydWUpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEdlbmVyYXRlRGVsZWdhdGVJblN1cGVySW50ZXJmYWNlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KEludHJvZHVjZVBhcmFtZXRlclJlZmFjdG9yaW5nLlJFUExBQ0VfRklFTERTX1dJVEhfR0VUVEVSU19BTEwsIHRydWUsIHRydWUsIHRydWUsIHRydWUpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFJlcGxhY2VBbGxBbmREZWxldGVVbnVzZWQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoSW50cm9kdWNlUGFyYW1ldGVyUmVmYWN0b3JpbmcuUkVQTEFDRV9GSUVMRFNfV0lUSF9HRVRURVJTX0FMTCwgdHJ1ZSwgZmFsc2UsIHRydWUsIGZhbHNlKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3REaWFtb25kMlJhdygpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdChJbnRyb2R1Y2VQYXJhbWV0ZXJSZWZhY3RvcmluZy5SRVBMQUNFX0ZJRUxEU19XSVRIX0dFVFRFUlNfQUxMLCB0cnVlLCBmYWxzZSwgdHJ1ZSwgZmFsc2UpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdERpYW1vbmRPY2N1cnJlbmNlcygpIHRocm93cyBFeGNlcHRpb24geworICAgIGZpbmFsIExhbmd1YWdlTGV2ZWwgb2xkTGV2ZWwgPSBnZXRMYW5ndWFnZUxldmVsKCk7CisgICAgdHJ5IHsKKyAgICAgIHNldExhbmd1YWdlTGV2ZWwoTGFuZ3VhZ2VMZXZlbC5KREtfMV83KTsKKyAgICAgIGRvVGVzdChJbnRyb2R1Y2VQYXJhbWV0ZXJSZWZhY3RvcmluZy5SRVBMQUNFX0ZJRUxEU19XSVRIX0dFVFRFUlNfQUxMLCB0cnVlLCBmYWxzZSwgdHJ1ZSwgZmFsc2UpOworICAgIH0KKyAgICBmaW5hbGx5IHsKKyAgICAgIHNldExhbmd1YWdlTGV2ZWwob2xkTGV2ZWwpOworICAgIH0KKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RQcmVzZXJ2ZURpYW1vbmRPY2N1cnJlbmNlcygpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdChJbnRyb2R1Y2VQYXJhbWV0ZXJSZWZhY3RvcmluZy5SRVBMQUNFX0ZJRUxEU19XSVRIX0dFVFRFUlNfQUxMLCB0cnVlLCBmYWxzZSwgdHJ1ZSwgZmFsc2UpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFN1YnN0aXR1dGVUeXBlUGFyYW1zKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KEludHJvZHVjZVBhcmFtZXRlclJlZmFjdG9yaW5nLlJFUExBQ0VfRklFTERTX1dJVEhfR0VUVEVSU19BTEwsIHRydWUsIGZhbHNlLCB0cnVlLCBmYWxzZSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0RGVsZWdhdGVXaXRoVmFyYXJncygpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdChJbnRyb2R1Y2VQYXJhbWV0ZXJSZWZhY3RvcmluZy5SRVBMQUNFX0ZJRUxEU19XSVRIX0dFVFRFUlNfQUxMLCB0cnVlLCBmYWxzZSwgdHJ1ZSwgdHJ1ZSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0U2VsZlJlZmVyZW5jZSgpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdChJbnRyb2R1Y2VQYXJhbWV0ZXJSZWZhY3RvcmluZy5SRVBMQUNFX0ZJRUxEU19XSVRIX0dFVFRFUlNfQUxMLCB0cnVlLCBmYWxzZSwgdHJ1ZSwgZmFsc2UpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFNlbGZSZWZlcmVuY2VWYXJhcmdzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KEludHJvZHVjZVBhcmFtZXRlclJlZmFjdG9yaW5nLlJFUExBQ0VfRklFTERTX1dJVEhfR0VUVEVSU19BTEwsIHRydWUsIGZhbHNlLCB0cnVlLCBmYWxzZSk7CisgIH0KKyAgCisgIHB1YmxpYyB2b2lkIHRlc3RTZWxmUmVmZXJlbmNlVmFyYXJnczEoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoSW50cm9kdWNlUGFyYW1ldGVyUmVmYWN0b3JpbmcuUkVQTEFDRV9GSUVMRFNfV0lUSF9HRVRURVJTX0FMTCwgdHJ1ZSwgZmFsc2UsIHRydWUsIGZhbHNlKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RTaW1wbGlmaWVkUmVzdWx0ZWRUeXBlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KEludHJvZHVjZVBhcmFtZXRlclJlZmFjdG9yaW5nLlJFUExBQ0VfRklFTERTX1dJVEhfR0VUVEVSU19BTEwsIHRydWUsIGZhbHNlLCB0cnVlLCBmYWxzZSk7CisgIH0KKworICBwcml2YXRlIHZvaWQgZG9UZXN0VGhyb3VnaEhhbmRsZXIoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBjb25maWd1cmVCeUZpbGUoIi9yZWZhY3RvcmluZy9pbnRyb2R1Y2VQYXJhbWV0ZXIvYmVmb3JlIiArIGdldFRlc3ROYW1lKGZhbHNlKSArICIuamF2YSIpOworICAgIGJvb2xlYW4gZW5hYmxlZCA9IHRydWU7CisgICAgdHJ5IHsKKyAgICAgIGNvbmZpZ3VyZUJ5RmlsZSgiL3JlZmFjdG9yaW5nL2ludHJvZHVjZVBhcmFtZXRlci9iZWZvcmUiICsgZ2V0VGVzdE5hbWUoZmFsc2UpICsgIi5qYXZhIik7CisgICAgICBlbmFibGVkID0gbXlFZGl0b3IuZ2V0U2V0dGluZ3MoKS5pc1ZhcmlhYmxlSW5wbGFjZVJlbmFtZUVuYWJsZWQoKTsKKyAgICAgIG15RWRpdG9yLmdldFNldHRpbmdzKCkuc2V0VmFyaWFibGVJbnBsYWNlUmVuYW1lRW5hYmxlZChmYWxzZSk7CisgICAgICBuZXcgSW50cm9kdWNlUGFyYW1ldGVySGFuZGxlcigpLmludm9rZShnZXRQcm9qZWN0KCksIG15RWRpdG9yLCBteUZpbGUsIG5ldyBEYXRhQ29udGV4dCgpIHsKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIEBOdWxsYWJsZQorICAgICAgICBwdWJsaWMgT2JqZWN0IGdldERhdGEoQE5vbk5scyBmaW5hbCBTdHJpbmcgZGF0YUlkKSB7CisgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgIH0KKyAgICAgIH0pOworICAgICAgY2hlY2tSZXN1bHRCeUZpbGUoIi9yZWZhY3RvcmluZy9pbnRyb2R1Y2VQYXJhbWV0ZXIvYWZ0ZXIiICsgZ2V0VGVzdE5hbWUoZmFsc2UpICsgIi5qYXZhIik7CisgICAgfQorICAgIGZpbmFsbHkgeworICAgICAgbXlFZGl0b3IuZ2V0U2V0dGluZ3MoKS5zZXRWYXJpYWJsZUlucGxhY2VSZW5hbWVFbmFibGVkKGVuYWJsZWQpOworICAgIH0KKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RFbmNsb3NpbmdXaXRoUGFyYW1EZWxldGlvbigpIHRocm93cyBFeGNlcHRpb24geworICAgIGNvbmZpZ3VyZUJ5RmlsZSgiL3JlZmFjdG9yaW5nL2ludHJvZHVjZVBhcmFtZXRlci9iZWZvcmUiICsgZ2V0VGVzdE5hbWUoZmFsc2UpICsgIi5qYXZhIik7CisgICAgcGVyZm9ybSh0cnVlLCAwLCAiYW5PYmplY3QiLCBmYWxzZSwgdHJ1ZSwgdHJ1ZSwgZmFsc2UsIDEpOworICAgIGNoZWNrUmVzdWx0QnlGaWxlKCIvcmVmYWN0b3JpbmcvaW50cm9kdWNlUGFyYW1ldGVyL2FmdGVyIiArIGdldFRlc3ROYW1lKGZhbHNlKSArICIuamF2YSIpOworICB9CisKKyAgcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBwZXJmb3JtKGJvb2xlYW4gcmVwbGFjZUFsbE9jY3VyZW5jZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcmVwbGFjZUZpZWxkc1dpdGhHZXR0ZXJzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQE5vbk5scyBTdHJpbmcgcGFyYW1ldGVyTmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2xlYW4gc2VhcmNoRm9yU3VwZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sZWFuIGRlY2xhcmVGaW5hbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsIGJvb2xlYW4gcmVtb3ZlVW51c2VkUGFyYW1ldGVycywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsIGJvb2xlYW4gZ2VuZXJhdGVEZWxlZ2F0ZSkgeworICAgIHJldHVybiBwZXJmb3JtKHJlcGxhY2VBbGxPY2N1cmVuY2VzLCByZXBsYWNlRmllbGRzV2l0aEdldHRlcnMsIHBhcmFtZXRlck5hbWUsIHNlYXJjaEZvclN1cGVyLCBkZWNsYXJlRmluYWwsIHJlbW92ZVVudXNlZFBhcmFtZXRlcnMsCisgICAgICAgICAgICAgICAgICAgZ2VuZXJhdGVEZWxlZ2F0ZSwgMCk7CisgIH0KKworICBwcml2YXRlIHN0YXRpYyBib29sZWFuIHBlcmZvcm0oYm9vbGVhbiByZXBsYWNlQWxsT2NjdXJlbmNlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCByZXBsYWNlRmllbGRzV2l0aEdldHRlcnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBATm9uTmxzIFN0cmluZyBwYXJhbWV0ZXJOYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbGVhbiBzZWFyY2hGb3JTdXBlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2xlYW4gZGVjbGFyZUZpbmFsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmluYWwgYm9vbGVhbiByZW1vdmVVbnVzZWRQYXJhbWV0ZXJzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmluYWwgYm9vbGVhbiBnZW5lcmF0ZURlbGVnYXRlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGVuY2xvc2luZ0xldmVsKSB7CisgICAgZmluYWwgRWxlbWVudFRvV29ya09uW10gZWxlbWVudFRvV29ya09uID0gbmV3IEVsZW1lbnRUb1dvcmtPblsxXTsKKyAgICBFbGVtZW50VG9Xb3JrT24KKyAgICAgICAgICAucHJvY2Vzc0VsZW1lbnRUb1dvcmtPbihteUVkaXRvciwgbXlGaWxlLCAiSU50ciBwYXJhbSIsIEhlbHBJRC5JTlRST0RVQ0VfUEFSQU1FVEVSLCBnZXRQcm9qZWN0KCksIG5ldyBQYXNzPEVsZW1lbnRUb1dvcmtPbj4oKSB7CisgICAgICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgICAgIHB1YmxpYyB2b2lkIHBhc3MoZmluYWwgRWxlbWVudFRvV29ya09uIGUpIHsKKyAgICAgICAgICAgICAgaWYgKGUgPT0gbnVsbCkgcmV0dXJuOworCisgICAgICAgICAgICAgIGVsZW1lbnRUb1dvcmtPblswXSA9IGU7CisgICAgICAgICAgICB9CisgICAgICAgICAgfSk7CisKKyAgICBmaW5hbCBQc2lFeHByZXNzaW9uIGV4cHIgPSBlbGVtZW50VG9Xb3JrT25bMF0uZ2V0RXhwcmVzc2lvbigpOworICAgIGZpbmFsIFBzaUxvY2FsVmFyaWFibGUgbG9jYWxWYXIgPSBlbGVtZW50VG9Xb3JrT25bMF0uZ2V0TG9jYWxWYXJpYWJsZSgpOworCisgICAgUHNpRWxlbWVudCBjb250ZXh0ID0gZXhwciA9PSBudWxsID8gbG9jYWxWYXIgOiBleHByOworICAgIFBzaU1ldGhvZCBtZXRob2QgPSBVdGlsLmdldENvbnRhaW5pbmdNZXRob2QoY29udGV4dCk7CisgICAgaWYgKG1ldGhvZCA9PSBudWxsKSByZXR1cm4gZmFsc2U7CisKKyAgICBmaW5hbCBMaXN0PFBzaU1ldGhvZD4gbWV0aG9kcyA9IGNvbS5pbnRlbGxpai5yZWZhY3RvcmluZy5pbnRyb2R1Y2VQYXJhbWV0ZXIuSW50cm9kdWNlUGFyYW1ldGVySGFuZGxlci5nZXRFbmNsb3NpbmdNZXRob2RzKG1ldGhvZCk7CisgICAgYXNzZXJ0VHJ1ZShtZXRob2RzLnNpemUoKSA+IGVuY2xvc2luZ0xldmVsKTsKKyAgICBtZXRob2QgPSBtZXRob2RzLmdldChlbmNsb3NpbmdMZXZlbCk7CisKKyAgICBmaW5hbCBQc2lNZXRob2QgbWV0aG9kVG9TZWFyY2hGb3I7CisgICAgaWYgKHNlYXJjaEZvclN1cGVyKSB7CisgICAgICBtZXRob2RUb1NlYXJjaEZvciA9IG1ldGhvZC5maW5kRGVlcGVzdFN1cGVyTWV0aG9kKCk7CisgICAgfQorICAgIGVsc2UgeworICAgICAgbWV0aG9kVG9TZWFyY2hGb3IgPSBtZXRob2Q7CisgICAgfQorICAgIFBzaUV4cHJlc3Npb25bXSBvY2N1cmVuY2VzOworICAgIFBzaUV4cHJlc3Npb24gaW5pdGlhbGl6ZXI7CisgICAgaWYgKGV4cHIgPT0gbnVsbCkgeworICAgICAgaW5pdGlhbGl6ZXIgPSBsb2NhbFZhci5nZXRJbml0aWFsaXplcigpOworICAgICAgb2NjdXJlbmNlcyA9IENvZGVJbnNpZ2h0VXRpbC5maW5kUmVmZXJlbmNlRXhwcmVzc2lvbnMobWV0aG9kLCBsb2NhbFZhcik7CisgICAgfQorICAgIGVsc2UgeworICAgICAgaW5pdGlhbGl6ZXIgPSBleHByOworICAgICAgb2NjdXJlbmNlcyA9IG5ldyBFeHByZXNzaW9uT2NjdXJyZW5jZU1hbmFnZXIoZXhwciwgbWV0aG9kLCBudWxsKS5maW5kRXhwcmVzc2lvbk9jY3VycmVuY2VzKCk7CisgICAgfQorICAgIFRJbnRBcnJheUxpc3QgcGFyYW1ldGVyc1RvUmVtb3ZlID0gcmVtb3ZlVW51c2VkUGFyYW1ldGVycyA/IFV0aWwuZmluZFBhcmFtZXRlcnNUb1JlbW92ZShtZXRob2QsIGluaXRpYWxpemVyLCBvY2N1cmVuY2VzKSA6IG5ldyBUSW50QXJyYXlMaXN0KCk7CisgICAgbmV3IEludHJvZHVjZVBhcmFtZXRlclByb2Nlc3NvcigKKyAgICAgIGdldFByb2plY3QoKSwgbWV0aG9kLCBtZXRob2RUb1NlYXJjaEZvciwgaW5pdGlhbGl6ZXIsIGV4cHIsIGxvY2FsVmFyLCB0cnVlLCBwYXJhbWV0ZXJOYW1lLCByZXBsYWNlQWxsT2NjdXJlbmNlcywKKyAgICAgIHJlcGxhY2VGaWVsZHNXaXRoR2V0dGVycywKKyAgICAgIGRlY2xhcmVGaW5hbCwgZ2VuZXJhdGVEZWxlZ2F0ZSwgbnVsbCwgcGFyYW1ldGVyc1RvUmVtb3ZlKS5ydW4oKTsKKworICAgIG15RWRpdG9yLmdldFNlbGVjdGlvbk1vZGVsKCkucmVtb3ZlU2VsZWN0aW9uKCk7CisgICAgcmV0dXJuIHRydWU7CisgIH0KKworICBwcml2YXRlIHN0YXRpYyB2b2lkIHBlcmZvcm1Gb3JMb2NhbChib29sZWFuIHNlYXJjaEZvclN1cGVyLCBib29sZWFuIHJlbW92ZUxvY2FsVmFyaWFibGUsIGJvb2xlYW4gcmVwbGFjZUFsbE9jY3VycmVuY2VzLCBib29sZWFuIGRlY2xhcmVGaW5hbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmluYWwgYm9vbGVhbiByZW1vdmVVbnVzZWRQYXJhbWV0ZXJzKSB7CisgICAgZmluYWwgaW50IG9mZnNldCA9IG15RWRpdG9yLmdldENhcmV0TW9kZWwoKS5nZXRPZmZzZXQoKTsKKyAgICBmaW5hbCBQc2lFbGVtZW50IGVsZW1lbnQgPSBteUZpbGUuZmluZEVsZW1lbnRBdChvZmZzZXQpLmdldFBhcmVudCgpOworICAgIGFzc2VydFRydWUoZWxlbWVudCBpbnN0YW5jZW9mIFBzaUxvY2FsVmFyaWFibGUpOworICAgIFBzaU1ldGhvZCBtZXRob2QgPSBVdGlsLmdldENvbnRhaW5pbmdNZXRob2QoZWxlbWVudCk7CisgICAgZmluYWwgUHNpTWV0aG9kIG1ldGhvZFRvU2VhcmNoRm9yOworICAgIGlmIChzZWFyY2hGb3JTdXBlcikgeworICAgICAgZmluYWwgUHNpTWV0aG9kIGRlZXBlc3RTdXBlck1ldGhvZCA9IG1ldGhvZC5maW5kRGVlcGVzdFN1cGVyTWV0aG9kKCk7CisgICAgICBtZXRob2RUb1NlYXJjaEZvciA9IGRlZXBlc3RTdXBlck1ldGhvZCAhPSBudWxsID8gZGVlcGVzdFN1cGVyTWV0aG9kIDogbWV0aG9kOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgIG1ldGhvZFRvU2VhcmNoRm9yID0gbWV0aG9kOworICAgIH0KKyAgICBhc3NlcnROb3ROdWxsKG1ldGhvZCk7CisgICAgYXNzZXJ0Tm90TnVsbChtZXRob2RUb1NlYXJjaEZvcik7CisgICAgZmluYWwgUHNpTG9jYWxWYXJpYWJsZSBsb2NhbFZhcmlhYmxlID0gKFBzaUxvY2FsVmFyaWFibGUpZWxlbWVudDsKKyAgICBmaW5hbCBQc2lFeHByZXNzaW9uIHBhcmFtZXRlckluaXRpYWxpemVyID0gbG9jYWxWYXJpYWJsZS5nZXRJbml0aWFsaXplcigpOworICAgIFRJbnRBcnJheUxpc3QgcGFyYW1ldGVyc1RvUmVtb3ZlID0gcmVtb3ZlVW51c2VkUGFyYW1ldGVycyA/IFV0aWwuZmluZFBhcmFtZXRlcnNUb1JlbW92ZShtZXRob2QsIHBhcmFtZXRlckluaXRpYWxpemVyLCBudWxsKSA6IG5ldyBUSW50QXJyYXlMaXN0KCk7CisKKyAgICBuZXcgSW50cm9kdWNlUGFyYW1ldGVyUHJvY2Vzc29yKAorICAgICAgZ2V0UHJvamVjdCgpLCBtZXRob2QsIG1ldGhvZFRvU2VhcmNoRm9yLAorICAgICAgcGFyYW1ldGVySW5pdGlhbGl6ZXIsIG51bGwsIGxvY2FsVmFyaWFibGUsIHJlbW92ZUxvY2FsVmFyaWFibGUsCisgICAgICBsb2NhbFZhcmlhYmxlLmdldE5hbWUoKSwgcmVwbGFjZUFsbE9jY3VycmVuY2VzLAorICAgICAgSW50cm9kdWNlUGFyYW1ldGVyUmVmYWN0b3JpbmcuUkVQTEFDRV9GSUVMRFNfV0lUSF9HRVRURVJTX0lOQUNDRVNTSUJMRSwKKyAgICAgIGRlY2xhcmVGaW5hbCwgZmFsc2UsIG51bGwsIHBhcmFtZXRlcnNUb1JlbW92ZSkucnVuKCk7CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9yZWZhY3RvcmluZy9JbnRyb2R1Y2VWYXJpYWJsZU11bHRpZmlsZVRlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9yZWZhY3RvcmluZy9JbnRyb2R1Y2VWYXJpYWJsZU11bHRpZmlsZVRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOTY3MjUwCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL3JlZmFjdG9yaW5nL0ludHJvZHVjZVZhcmlhYmxlTXVsdGlmaWxlVGVzdC5qYXZhCkBAIC0wLDAgKzEsOTQgQEAKK3BhY2thZ2UgY29tLmludGVsbGlqLnJlZmFjdG9yaW5nOworCitpbXBvcnQgY29tLmludGVsbGlqLkphdmFUZXN0VXRpbDsKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS5lZGl0b3IuRWRpdG9yOworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLmZpbGVFZGl0b3IuRmlsZURvY3VtZW50TWFuYWdlcjsKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS5yb290cy5MYW5ndWFnZUxldmVsUHJvamVjdEV4dGVuc2lvbjsKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS52ZnMuVmlydHVhbEZpbGU7CitpbXBvcnQgY29tLmludGVsbGlqLnBvbS5qYXZhLkxhbmd1YWdlTGV2ZWw7CitpbXBvcnQgY29tLmludGVsbGlqLnBzaS5KYXZhUHNpRmFjYWRlOworaW1wb3J0IGNvbS5pbnRlbGxpai5wc2kuUHNpQ2xhc3M7CitpbXBvcnQgY29tLmludGVsbGlqLnBzaS5Qc2lGaWxlOworaW1wb3J0IGNvbS5pbnRlbGxpai5wc2kuc2VhcmNoLkdsb2JhbFNlYXJjaFNjb3BlOworaW1wb3J0IGNvbS5pbnRlbGxpai5yZWZhY3RvcmluZy5pbnRyb2R1Y2VWYXJpYWJsZS5JbnRyb2R1Y2VWYXJpYWJsZUJhc2U7CisKKy8qKgorICogIEBhdXRob3IgZHNsCisgKi8KK3B1YmxpYyBjbGFzcyBJbnRyb2R1Y2VWYXJpYWJsZU11bHRpZmlsZVRlc3QgZXh0ZW5kcyBNdWx0aUZpbGVUZXN0Q2FzZSB7CisgIEBPdmVycmlkZQorICBwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24geworICAgIHN1cGVyLnNldFVwKCk7CisgICAgTGFuZ3VhZ2VMZXZlbFByb2plY3RFeHRlbnNpb24uZ2V0SW5zdGFuY2UobXlKYXZhRmFjYWRlLmdldFByb2plY3QoKSkuc2V0TGFuZ3VhZ2VMZXZlbChMYW5ndWFnZUxldmVsLkpES18xXzUpOworICB9CisKKyAgQE92ZXJyaWRlCisgIHByb3RlY3RlZCBTdHJpbmcgZ2V0VGVzdFJvb3QoKSB7CisgICAgcmV0dXJuICIvcmVmYWN0b3JpbmcvaW50cm9kdWNlVmFyaWFibGUvIjsKKyAgfQorCisgIEBPdmVycmlkZQorICBwcm90ZWN0ZWQgU3RyaW5nIGdldFRlc3REYXRhUGF0aCgpIHsKKyAgICByZXR1cm4gSmF2YVRlc3RVdGlsLmdldEphdmFUZXN0RGF0YVBhdGgoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RTYW1lUGFja2FnZVJlZigpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdCgKKyAgICAgIGNyZWF0ZUFjdGlvbigicGFjazEuQSIsCisgICAgICAgICAgICAgICAgICAgbmV3IE1vY2tJbnRyb2R1Y2VWYXJpYWJsZUhhbmRsZXIoImIiLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCAicGFjazEuQiIpCisgICAgICApCisgICAgKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RHZW5lcmljVHlwZVdpdGhJbm5lcigpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdCgKKyAgICAgIGNyZWF0ZUFjdGlvbigidGVzdC5DbGllbnQiLAorICAgICAgICAgICAgICAgICAgIG5ldyBNb2NrSW50cm9kdWNlVmFyaWFibGVIYW5kbGVyKCJsIiwgZmFsc2UsIHRydWUsIHRydWUsICJ0ZXN0Lkxpc3Q8dGVzdC5BLkI+IikKKyAgICAgICkKKyAgICApOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEdlbmVyaWNUeXBlV2l0aElubmVyMSgpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdCgKKyAgICAgIGNyZWF0ZUFjdGlvbigidGVzdC5DbGllbnQiLAorICAgICAgICAgICAgICAgICAgIG5ldyBNb2NrSW50cm9kdWNlVmFyaWFibGVIYW5kbGVyKCJsIiwgZmFsc2UsIHRydWUsIHRydWUsICJ0ZXN0Lkxpc3Q8dGVzdC5BLkI+IikKKyAgICAgICkKKyAgICApOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEdlbmVyaWNXaXRoVHdvUGFyYW1ldGVycygpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdCgKKyAgICAgIGNyZWF0ZUFjdGlvbigiQ2xpZW50IiwKKyAgICAgICAgICAgICAgICAgICBuZXcgTW9ja0ludHJvZHVjZVZhcmlhYmxlSGFuZGxlcigicCIsIGZhbHNlLCBmYWxzZSwgdHJ1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidXRpbC5QYWlyPGphdmEubGFuZy5TdHJpbmcsdXRpbC5QYWlyPGphdmEubGFuZy5JbnRlZ2VyLGphdmEubGFuZy5Cb29sZWFuPj4iKQorICAgICAgKQorICAgICk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0R2VuZXJpY1dpdGhUd29QYXJhbWV0ZXJzMigpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdCgKKyAgICAgIGNyZWF0ZUFjdGlvbigiQ2xpZW50IiwKKyAgICAgICAgICAgICAgICAgICBuZXcgTW9ja0ludHJvZHVjZVZhcmlhYmxlSGFuZGxlcigicCIsIGZhbHNlLCBmYWxzZSwgdHJ1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUGFpcjxqYXZhLmxhbmcuU3RyaW5nLFBhaXI8amF2YS5sYW5nLkludGVnZXIsamF2YS5sYW5nLkJvb2xlYW4+PiIpCisgICAgICApCisgICAgKTsKKyAgfQorCisgIFBlcmZvcm1BY3Rpb24gY3JlYXRlQWN0aW9uKGZpbmFsIFN0cmluZyBjbGFzc05hbWUsIGZpbmFsIEludHJvZHVjZVZhcmlhYmxlQmFzZSB0ZXN0TWUpIHsKKyAgICByZXR1cm4gbmV3IFBlcmZvcm1BY3Rpb24oKSB7CisgICAgICBAT3ZlcnJpZGUKKyAgICAgIHB1YmxpYyB2b2lkIHBlcmZvcm1BY3Rpb24oVmlydHVhbEZpbGUgdnJvb3QsIFZpcnR1YWxGaWxlIHJvb3RBZnRlcikgeworICAgICAgICBmaW5hbCBKYXZhUHNpRmFjYWRlIHBzaU1hbmFnZXIgPSBnZXRKYXZhRmFjYWRlKCk7CisgICAgICAgIGZpbmFsIFBzaUNsYXNzIGFDbGFzcyA9IHBzaU1hbmFnZXIuZmluZENsYXNzKGNsYXNzTmFtZSwgR2xvYmFsU2VhcmNoU2NvcGUuYWxsU2NvcGUobXlQcm9qZWN0KSk7CisgICAgICAgIGFzc2VydFRydWUoY2xhc3NOYW1lICsgIiBjbGFzcyBub3QgZm91bmQiLCBhQ2xhc3MgIT0gbnVsbCk7CisgICAgICAgIGZpbmFsIFBzaUZpbGUgY29udGFpbmluZ0ZpbGUgPSBhQ2xhc3MuZ2V0Q29udGFpbmluZ0ZpbGUoKTsKKyAgICAgICAgZmluYWwgVmlydHVhbEZpbGUgdmlydHVhbEZpbGUgPSBjb250YWluaW5nRmlsZS5nZXRWaXJ0dWFsRmlsZSgpOworICAgICAgICBhc3NlcnRUcnVlKHZpcnR1YWxGaWxlICE9IG51bGwpOworICAgICAgICBmaW5hbCBFZGl0b3IgZWRpdG9yID0gY3JlYXRlRWRpdG9yKHZpcnR1YWxGaWxlKTsKKyAgICAgICAgc2V0dXBDdXJzb3JBbmRTZWxlY3Rpb24oZWRpdG9yKTsKKyAgICAgICAgdGVzdE1lLmludm9rZShteVByb2plY3QsIGVkaXRvciwgY29udGFpbmluZ0ZpbGUsIG51bGwpOworICAgICAgICBGaWxlRG9jdW1lbnRNYW5hZ2VyLmdldEluc3RhbmNlKCkuc2F2ZUFsbERvY3VtZW50cygpOworICAgICAgfQorICAgIH07CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9yZWZhY3RvcmluZy9JbnRyb2R1Y2VWYXJpYWJsZVN1aXRlLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovcmVmYWN0b3JpbmcvSW50cm9kdWNlVmFyaWFibGVTdWl0ZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI4NGY5NWUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovcmVmYWN0b3JpbmcvSW50cm9kdWNlVmFyaWFibGVTdWl0ZS5qYXZhCkBAIC0wLDAgKzEsMTcgQEAKK3BhY2thZ2UgY29tLmludGVsbGlqLnJlZmFjdG9yaW5nOworCitpbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7CitpbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOworaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0U3VpdGU7CisKKy8qKgorICogIEBhdXRob3IgZHNsCisgKi8KK3B1YmxpYyBjbGFzcyBJbnRyb2R1Y2VWYXJpYWJsZVN1aXRlIGV4dGVuZHMgVGVzdENhc2UgeworICBwdWJsaWMgc3RhdGljIFRlc3Qgc3VpdGUoKSB7CisgICAgZmluYWwgVGVzdFN1aXRlIHN1aXRlID0gbmV3IFRlc3RTdWl0ZSgpOworICAgIHN1aXRlLmFkZFRlc3RTdWl0ZShJbnRyb2R1Y2VWYXJpYWJsZVRlc3QuY2xhc3MpOworICAgIHN1aXRlLmFkZFRlc3RTdWl0ZShJbnRyb2R1Y2VWYXJpYWJsZU11bHRpZmlsZVRlc3QuY2xhc3MpOworICAgIHJldHVybiBzdWl0ZTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL3JlZmFjdG9yaW5nL0ludHJvZHVjZVZhcmlhYmxlVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL3JlZmFjdG9yaW5nL0ludHJvZHVjZVZhcmlhYmxlVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYzMWUwYzkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovcmVmYWN0b3JpbmcvSW50cm9kdWNlVmFyaWFibGVUZXN0LmphdmEKQEAgLTAsMCArMSw0MDEgQEAKK3BhY2thZ2UgY29tLmludGVsbGlqLnJlZmFjdG9yaW5nOworCitpbXBvcnQgY29tLmludGVsbGlqLkphdmFUZXN0VXRpbDsKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS5lZGl0b3IuRWRpdG9yOworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLnByb2plY3QuUHJvamVjdDsKK2ltcG9ydCBjb20uaW50ZWxsaWoucHNpLkNvbW1vbkNsYXNzTmFtZXM7CitpbXBvcnQgY29tLmludGVsbGlqLnBzaS5Qc2lFbGVtZW50OworaW1wb3J0IGNvbS5pbnRlbGxpai5wc2kuUHNpRXhwcmVzc2lvbjsKK2ltcG9ydCBjb20uaW50ZWxsaWoucHNpLlBzaVR5cGU7CitpbXBvcnQgY29tLmludGVsbGlqLnJlZmFjdG9yaW5nLmludHJvZHVjZS5pbnBsYWNlLk9jY3VycmVuY2VzQ2hvb3NlcjsKK2ltcG9ydCBjb20uaW50ZWxsaWoucmVmYWN0b3JpbmcuaW50cm9kdWNlVmFyaWFibGUuSW5wdXRWYWxpZGF0b3I7CitpbXBvcnQgY29tLmludGVsbGlqLnJlZmFjdG9yaW5nLmludHJvZHVjZVZhcmlhYmxlLkludHJvZHVjZVZhcmlhYmxlQmFzZTsKK2ltcG9ydCBjb20uaW50ZWxsaWoucmVmYWN0b3JpbmcuaW50cm9kdWNlVmFyaWFibGUuSW50cm9kdWNlVmFyaWFibGVTZXR0aW5nczsKK2ltcG9ydCBjb20uaW50ZWxsaWoucmVmYWN0b3JpbmcudWkuVHlwZVNlbGVjdG9yTWFuYWdlckltcGw7CitpbXBvcnQgY29tLmludGVsbGlqLnRlc3RGcmFtZXdvcmsuTGlnaHRDb2RlSW5zaWdodFRlc3RDYXNlOworaW1wb3J0IGNvbS5pbnRlbGxpai51dGlsLmNvbnRhaW5lcnMuTXVsdGlNYXA7CitpbXBvcnQganVuaXQuZnJhbWV3b3JrLkFzc2VydDsKK2ltcG9ydCBvcmcuamV0YnJhaW5zLmFubm90YXRpb25zLk5vbk5sczsKK2ltcG9ydCBvcmcuamV0YnJhaW5zLmFubm90YXRpb25zLk5vdE51bGw7CisKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKKworLyoqCisgKiBAYXV0aG9yIGRzbAorICovCitwdWJsaWMgY2xhc3MgSW50cm9kdWNlVmFyaWFibGVUZXN0IGV4dGVuZHMgTGlnaHRDb2RlSW5zaWdodFRlc3RDYXNlIHsKKworICBATm90TnVsbAorICBAT3ZlcnJpZGUKKyAgcHJvdGVjdGVkIFN0cmluZyBnZXRUZXN0RGF0YVBhdGgoKSB7CisgICAgcmV0dXJuIEphdmFUZXN0VXRpbC5nZXRKYXZhVGVzdERhdGFQYXRoKCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0U2ltcGxlRXhwcmVzc2lvbigpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdChuZXcgTW9ja0ludHJvZHVjZVZhcmlhYmxlSGFuZGxlcigiaSIsIGZhbHNlLCBmYWxzZSwgdHJ1ZSwgImludCIpKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RJbnNpZGVGb3IoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QobmV3IE1vY2tJbnRyb2R1Y2VWYXJpYWJsZUhhbmRsZXIoInRlbXAiLCBmYWxzZSwgZmFsc2UsIHRydWUsICJpbnQiKSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0UmVwbGFjZUFsbCgpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdChuZXcgTW9ja0ludHJvZHVjZVZhcmlhYmxlSGFuZGxlcigicyIsIHRydWUsIHRydWUsIHRydWUsICJqYXZhLmxhbmcuU3RyaW5nIikpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdElERUFERVYzNjc4KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KG5ldyBNb2NrSW50cm9kdWNlVmFyaWFibGVIYW5kbGVyKCJjb21wb25lbnQiLCB0cnVlLCB0cnVlLCB0cnVlLCBDb21tb25DbGFzc05hbWVzLkpBVkFfTEFOR19PQkpFQ1QpKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RJREVBREVWMTMzNjkoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QobmV3IE1vY2tJbnRyb2R1Y2VWYXJpYWJsZUhhbmRsZXIoImludHMiLCB0cnVlLCB0cnVlLCB0cnVlLCAiaW50W10iKSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0QW5vbnltb3VzQ2xhc3MoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QobmV3IE1vY2tJbnRyb2R1Y2VWYXJpYWJsZUhhbmRsZXIoInRlbXAiLCB0cnVlLCBmYWxzZSwgdHJ1ZSwgImludCIpKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RBbm9ueW1vdXNDbGFzczEoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QobmV3IE1vY2tJbnRyb2R1Y2VWYXJpYWJsZUhhbmRsZXIoInJ1bm5hYmxlIiwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgQ29tbW9uQ2xhc3NOYW1lcy5KQVZBX0xBTkdfUlVOTkFCTEUpKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RBbm9ueW1vdXNDbGFzczIoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QobmV3IE1vY2tJbnRyb2R1Y2VWYXJpYWJsZUhhbmRsZXIoImoiLCB0cnVlLCBmYWxzZSwgZmFsc2UsICJpbnQiKSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0UGFyZW50aGl6ZWQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QobmV3IE1vY2tJbnRyb2R1Y2VWYXJpYWJsZUhhbmRsZXIoInRlbXAiLCB0cnVlLCBmYWxzZSwgZmFsc2UsICJpbnQiKSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0TWV0aG9kQ2FsbCgpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdChuZXcgTW9ja0ludHJvZHVjZVZhcmlhYmxlSGFuZGxlcigidGVtcCIsIHRydWUsIHRydWUsIHRydWUsIENvbW1vbkNsYXNzTmFtZXMuSkFWQV9MQU5HX09CSkVDVCkpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdE1ldGhvZENhbGxJblN3aXRjaCgpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdChuZXcgTW9ja0ludHJvZHVjZVZhcmlhYmxlSGFuZGxlcigiaSIsIHRydWUsIHRydWUsIHRydWUsICJpbnQiKSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0UGFyZW50aGl6ZWRPY2N1cmVuY2UoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QobmV3IE1vY2tJbnRyb2R1Y2VWYXJpYWJsZUhhbmRsZXIoImVtcHR5IiwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSwgImJvb2xlYW4iKSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0UGFyZW50aGl6ZWRPY2N1cmVuY2UxKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KG5ldyBNb2NrSW50cm9kdWNlVmFyaWFibGVIYW5kbGVyKCJzIiwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSwgImphdmEubGFuZy5TdHJpbmciKSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0Q29uZmxpY3RpbmdGaWVsZCgpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdChuZXcgTW9ja0ludHJvZHVjZVZhcmlhYmxlSGFuZGxlcigibmFtZSIsIHRydWUsIGZhbHNlLCB0cnVlLCAiamF2YS5sYW5nLlN0cmluZyIpKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RDb25mbGljdGluZ0ZpZWxkSW5FeHByZXNzaW9uKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KG5ldyBNb2NrSW50cm9kdWNlVmFyaWFibGVIYW5kbGVyKCJuYW1lIiwgZmFsc2UsIGZhbHNlLCB0cnVlLCAiaW50IikpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFN0YXRpY0NvbmZsaWN0aW5nRmllbGQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QobmV3IE1vY2tJbnRyb2R1Y2VWYXJpYWJsZUhhbmRsZXIoIm5hbWUiLCBmYWxzZSwgZmFsc2UsIHRydWUsICJpbnQiKSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0Tm9uQ29uZmxpY3RpbmdGaWVsZCgpIHRocm93cyBFeGNlcHRpb24geworICAgICBkb1Rlc3QobmV3IE1vY2tJbnRyb2R1Y2VWYXJpYWJsZUhhbmRsZXIoIm5hbWUiLCBmYWxzZSwgZmFsc2UsIHRydWUsICJpbnQiKSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0U2NyMTY5MTAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QobmV3IE1vY2tJbnRyb2R1Y2VWYXJpYWJsZUhhbmRsZXIoImkiLCB0cnVlLCB0cnVlLCBmYWxzZSwgImludCIpKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RTQ1IxODI5NSgpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdChuZXcgTW9ja0ludHJvZHVjZVZhcmlhYmxlSGFuZGxlcigiaXQiLCB0cnVlLCBmYWxzZSwgZmFsc2UsICJqYXZhLmxhbmcuU3RyaW5nIikpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFNDUjE4Mjk1YSgpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdChuZXcgTW9ja0ludHJvZHVjZVZhcmlhYmxlSGFuZGxlcigiaXQiLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCAiamF2YS5sYW5nLlN0cmluZyIpKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RGcm9tSW5qZWN0ZWQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QobmV3IE1vY2tJbnRyb2R1Y2VWYXJpYWJsZUhhbmRsZXIoInJlZ2V4cCIsIGZhbHNlLCBmYWxzZSwgZmFsc2UsICJqYXZhLmxhbmcuU3RyaW5nIikpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFNDUjEwNDEyKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KG5ldyBNb2NrSW50cm9kdWNlVmFyaWFibGVIYW5kbGVyKCJuZXdWYXIiLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCAiamF2YS5sYW5nLlN0cmluZ1tdIikpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFNDUjIyNzE4KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KG5ldyBNb2NrSW50cm9kdWNlVmFyaWFibGVIYW5kbGVyKCJvYmplY3QiLCB0cnVlLCB0cnVlLCBmYWxzZSwgQ29tbW9uQ2xhc3NOYW1lcy5KQVZBX0xBTkdfT0JKRUNUKSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0U0NSMjYwNzUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QobmV3IE1vY2tJbnRyb2R1Y2VWYXJpYWJsZUhhbmRsZXIoIndyb25nIiwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgImphdmEubGFuZy5TdHJpbmciKSB7CisgICAgICBAT3ZlcnJpZGUKKyAgICAgIHByb3RlY3RlZCB2b2lkIGFzc2VydFZhbGlkYXRpb25SZXN1bHQoYm9vbGVhbiB2YWxpZGF0aW9uUmVzdWx0KSB7CisgICAgICAgIGFzc2VydEZhbHNlKHZhbGlkYXRpb25SZXN1bHQpOworICAgICAgfQorCisgICAgICBAT3ZlcnJpZGUKKyAgICAgIHByb3RlY3RlZCBib29sZWFuIHJlcG9ydENvbmZsaWN0cyhNdWx0aU1hcDxQc2lFbGVtZW50LFN0cmluZz4gY29uZmxpY3RzLCBmaW5hbCBQcm9qZWN0IHByb2plY3QsIEludHJvZHVjZVZhcmlhYmxlU2V0dGluZ3MgZGlhbG9nKSB7CisgICAgICAgIGFzc2VydEVxdWFscygyLCBjb25mbGljdHMuc2l6ZSgpKTsKKyAgICAgICAgQ29sbGVjdGlvbjw/IGV4dGVuZHMgU3RyaW5nPiBjb25mbGljdHNNZXNzYWdlcyA9IGNvbmZsaWN0cy52YWx1ZXMoKTsKKyAgICAgICAgYXNzZXJ0VHJ1ZShjb25mbGljdHNNZXNzYWdlcy5jb250YWlucygiSW50cm9kdWNpbmcgdmFyaWFibGUgbWF5IGJyZWFrIGNvZGUgbG9naWMuIikpOworICAgICAgICBhc3NlcnRUcnVlKGNvbmZsaWN0c01lc3NhZ2VzLmNvbnRhaW5zKCJMb2NhbCB2YXJpYWJsZSA8Yj48Y29kZT5jPC9jb2RlPjwvYj4gaXMgbW9kaWZpZWQgaW4gbG9vcCBib2R5LiIpKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgfQorICAgIH0pOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdENvbmZsaWN0aW5nRmllbGRJbk91dGVyQ2xhc3MoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QobmV3IE1vY2tJbnRyb2R1Y2VWYXJpYWJsZUhhbmRsZXIoInRleHQiLCB0cnVlLCB0cnVlLCBmYWxzZSwgImphdmEubGFuZy5TdHJpbmciKSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0U2tpcFNlbWljb2xvbigpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdChuZXcgTW9ja0ludHJvZHVjZVZhcmlhYmxlSGFuZGxlcigibWk1IiwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgImludCIpKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RJbnNpZGVJZigpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdChuZXcgTW9ja0ludHJvZHVjZVZhcmlhYmxlSGFuZGxlcigiczEiLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCAiamF2YS5sYW5nLlN0cmluZyIpKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RJbnNpZGVFbHNlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KG5ldyBNb2NrSW50cm9kdWNlVmFyaWFibGVIYW5kbGVyKCJzMSIsIGZhbHNlLCBmYWxzZSwgZmFsc2UsICJqYXZhLmxhbmcuU3RyaW5nIikpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEluc2lkZVdoaWxlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KG5ldyBNb2NrSW50cm9kdWNlVmFyaWFibGVIYW5kbGVyKCJ0ZW1wIiwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgImludCIpKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RTQ1I0MDI4MSgpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdChuZXcgTW9ja0ludHJvZHVjZVZhcmlhYmxlSGFuZGxlcigidGVtcCIsIGZhbHNlLCBmYWxzZSwgZmFsc2UsICJTZXQ8PyBleHRlbmRzIE1hcDw/LFN0cmluZz4uRW50cnk8PyxTdHJpbmc+PiIpKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RXaXRoSWZCcmFuY2hlcygpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdChuZXcgTW9ja0ludHJvZHVjZVZhcmlhYmxlSGFuZGxlcigidGVtcCIsIHRydWUsIGZhbHNlLCBmYWxzZSwgImludCIpKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RJbnNpZGVGb3JMb29wKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KG5ldyBNb2NrSW50cm9kdWNlVmFyaWFibGVIYW5kbGVyKCJ0ZW1wIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCAiaW50IikpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdER1cGxpY2F0ZUdlbmVyaWNFeHByZXNzaW9ucygpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdChuZXcgTW9ja0ludHJvZHVjZVZhcmlhYmxlSGFuZGxlcigidGVtcCIsIHRydWUsIGZhbHNlLCBmYWxzZSwgIkZvbzI8PyBleHRlbmRzIFJ1bm5hYmxlPiIpKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RTdGF0aWNJbXBvcnQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QobmV3IE1vY2tJbnRyb2R1Y2VWYXJpYWJsZUhhbmRsZXIoImkiLCB0cnVlLCB0cnVlLCBmYWxzZSwgImludCIpKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RUaGlzUXVhbGlmaWVyKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KG5ldyBNb2NrSW50cm9kdWNlVmFyaWFibGVIYW5kbGVyKCJjb3VudCIsIHRydWUsIHRydWUsIGZhbHNlLCAiaW50IikpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFN1YkxpdGVyYWwoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QobmV3IE1vY2tJbnRyb2R1Y2VWYXJpYWJsZUhhbmRsZXIoInN0ciIsIGZhbHNlLCBmYWxzZSwgZmFsc2UsICJqYXZhLmxhbmcuU3RyaW5nIikpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFN1YkxpdGVyYWwxKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KG5ldyBNb2NrSW50cm9kdWNlVmFyaWFibGVIYW5kbGVyKCJzdHIiLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCAiamF2YS5sYW5nLlN0cmluZyIpKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RTdWJMaXRlcmFsRnJvbUV4cHJlc3Npb24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QobmV3IE1vY2tJbnRyb2R1Y2VWYXJpYWJsZUhhbmRsZXIoInN0ciIsIGZhbHNlLCBmYWxzZSwgZmFsc2UsICJqYXZhLmxhbmcuU3RyaW5nIikpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFN1YkV4cHJlc3Npb25Gcm9tSW50ZWxsaWppZGVhcnVsZXp6eigpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdChuZXcgTW9ja0ludHJvZHVjZVZhcmlhYmxlSGFuZGxlcigic3RyIiwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgImphdmEubGFuZy5TdHJpbmciKSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0U3ViUHJpbWl0aXZlTGl0ZXJhbCgpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdChuZXcgTW9ja0ludHJvZHVjZVZhcmlhYmxlSGFuZGxlcigic3RyIiwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgImJvb2xlYW4iKSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0QXJyYXlGcm9tVmFyYXJncygpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdChuZXcgTW9ja0ludHJvZHVjZVZhcmlhYmxlSGFuZGxlcigic3RycyIsIGZhbHNlLCBmYWxzZSwgZmFsc2UsICJqYXZhLmxhbmcuU3RyaW5nW10iKSk7CisgIH0KKyAgCisgIHB1YmxpYyB2b2lkIHRlc3RBcnJheUZyb21WYXJhcmdzMSgpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdChuZXcgTW9ja0ludHJvZHVjZVZhcmlhYmxlSGFuZGxlcigic3RycyIsIGZhbHNlLCBmYWxzZSwgZmFsc2UsICJqYXZhLmxhbmcuU3RyaW5nW10iKSk7CisgIH0KKyAgCisgIHB1YmxpYyB2b2lkIHRlc3RFbnVtQXJyYXlGcm9tVmFyYXJncygpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdChuZXcgTW9ja0ludHJvZHVjZVZhcmlhYmxlSGFuZGxlcigic3RycyIsIGZhbHNlLCBmYWxzZSwgZmFsc2UsICJFW10iKSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0RnJvbUZpbmFsRmllbGRPbkFzc2lnbm1lbnQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QobmV3IE1vY2tJbnRyb2R1Y2VWYXJpYWJsZUhhbmRsZXIoInN0cnMiLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCAiamF2YS5sYW5nLlN0cmluZyIpKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3ROb0FycmF5RnJvbVZhcmFyZ3MoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICB0cnkgeworICAgICAgZG9UZXN0KG5ldyBNb2NrSW50cm9kdWNlVmFyaWFibGVIYW5kbGVyKCJzdHJzIiwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgImphdmEubGFuZy5TdHJpbmdbXSIpKTsKKyAgICB9CisgICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgICBhc3NlcnRFcXVhbHMoZS5nZXRNZXNzYWdlKCksICJFcnJvciBtZXNzYWdlOkNhbm5vdCBwZXJmb3JtIHJlZmFjdG9yaW5nLlxuIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJTZWxlY3RlZCBibG9jayBzaG91bGQgcmVwcmVzZW50IGFuIGV4cHJlc3Npb24uIik7CisgICAgICByZXR1cm47CisgICAgfQorICAgIGZhaWwoIlNob3VsZCBub3QgYmUgYWJsZSB0byBwZXJmb3JtIHJlZmFjdG9yaW5nIik7CisgIH0KKworICAgcHVibGljIHZvaWQgdGVzdE5vQXJyYXlGcm9tVmFyYXJnczEoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICB0cnkgeworICAgICAgZG9UZXN0KG5ldyBNb2NrSW50cm9kdWNlVmFyaWFibGVIYW5kbGVyKCJzdHJzIiwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgImphdmEubGFuZy5TdHJpbmdbXSIpKTsKKyAgICB9CisgICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgICBhc3NlcnRFcXVhbHMoZS5nZXRNZXNzYWdlKCksICJFcnJvciBtZXNzYWdlOkNhbm5vdCBwZXJmb3JtIHJlZmFjdG9yaW5nLlxuIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJTZWxlY3RlZCBibG9jayBzaG91bGQgcmVwcmVzZW50IGFuIGV4cHJlc3Npb24uIik7CisgICAgICByZXR1cm47CisgICAgfQorICAgIGZhaWwoIlNob3VsZCBub3QgYmUgYWJsZSB0byBwZXJmb3JtIHJlZmFjdG9yaW5nIik7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0Tm9uRXhwcmVzc2lvbigpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdChuZXcgTW9ja0ludHJvZHVjZVZhcmlhYmxlSGFuZGxlcigic3VtIiwgdHJ1ZSwgdHJ1ZSwgZmFsc2UsICJpbnQiKSk7CisgIH0KKyAgcHVibGljIHZvaWQgdGVzdFR5cGVBbm5vdGF0aW9ucygpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdChuZXcgTW9ja0ludHJvZHVjZVZhcmlhYmxlSGFuZGxlcigieTEiLCB0cnVlLCBmYWxzZSwgZmFsc2UsICJAVEEgQyIpKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RSZXR1cm5TdGF0ZW1lbnRXaXRob3V0U2VtaWNvbG9uKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KG5ldyBNb2NrSW50cm9kdWNlVmFyaWFibGVIYW5kbGVyKCJiIiwgdHJ1ZSwgdHJ1ZSwgZmFsc2UsICJqYXZhLmxhbmcuU3RyaW5nIikpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEFuZEFuZFN1YmV4cHJlc3Npb24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QobmV3IE1vY2tJbnRyb2R1Y2VWYXJpYWJsZUhhbmRsZXIoImFiIiwgdHJ1ZSwgdHJ1ZSwgZmFsc2UsICJib29sZWFuIikpOworICB9CisgIAorICBwdWJsaWMgdm9pZCB0ZXN0U3ViZXhwcmVzc2lvbldpdGhTcGFjZXNJblNlbGVjdGlvbigpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdChuZXcgTW9ja0ludHJvZHVjZVZhcmlhYmxlSGFuZGxlcigiYWIiLCB0cnVlLCB0cnVlLCBmYWxzZSwgImJvb2xlYW4iKSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0RHVwbGljYXRlc0Fub255bW91c0NsYXNzQ3JlYXRpb25XaXRoU2ltaWxhclBhcmFtZXRlcnMgKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KG5ldyBNb2NrSW50cm9kdWNlVmFyaWFibGVIYW5kbGVyKCJmb28xIiwgdHJ1ZSwgdHJ1ZSwgZmFsc2UsICJGb28iKSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0RGlmZmVyZW50Rm9yZWFjaFBhcmFtZXRlcnMgKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KG5ldyBNb2NrSW50cm9kdWNlVmFyaWFibGVIYW5kbGVyKCJ0b3N0ciIsIHRydWUsIHRydWUsIGZhbHNlLCAiamF2YS5sYW5nLlN0cmluZyIpKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RDb2xsYXBzZWRUb0RpYW1vbmQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QobmV3IE1vY2tJbnRyb2R1Y2VWYXJpYWJsZUhhbmRsZXIoImEiLCB0cnVlLCB0cnVlLCB0cnVlLCAiamF2YS51dGlsLkFycmF5TGlzdDxqYXZhLmxhbmcuU3RyaW5nPiIpKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RDYW50Q29sbGFwc2VkVG9EaWFtb25kKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KG5ldyBNb2NrSW50cm9kdWNlVmFyaWFibGVIYW5kbGVyKCJhIiwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSwgIkZvbzxqYXZhLmxhbmcuTnVtYmVyPiIpKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RGcm9tRm9ySW5pdGlhbGl6ZXIoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QobmV3IE1vY2tJbnRyb2R1Y2VWYXJpYWJsZUhhbmRsZXIoImxpc3QiLCB0cnVlLCB0cnVlLCB0cnVlLCAiamF2YS51dGlsLkxpc3QiKSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0SW52YWxpZFBvc3RmaXhFeHByKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KG5ldyBNb2NrSW50cm9kdWNlVmFyaWFibGVIYW5kbGVyKCJhMSIsIHRydWUsIGZhbHNlLCB0cnVlLCAiaW50W10iKSk7CisgIH0KKyAgCisgIHB1YmxpYyB2b2lkIHRlc3RQb2x5YWRpYygpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdChuZXcgTW9ja0ludHJvZHVjZVZhcmlhYmxlSGFuZGxlcigiYjEiLCB0cnVlLCB0cnVlLCB0cnVlLCAiYm9vbGVhbiIpKTsKKyAgfQorICAKKyAgcHVibGljIHZvaWQgdGVzdEFzc2lnbm1lbnRUb1VucmVzb2x2ZWRSZWZlcmVuY2UoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QobmV3IE1vY2tJbnRyb2R1Y2VWYXJpYWJsZUhhbmRsZXIoImNvbGxlY3Rpb24iLCB0cnVlLCB0cnVlLCB0cnVlLCAiamF2YS51dGlsLkxpc3Q8PyBleHRlbmRzIGphdmEudXRpbC5Db2xsZWN0aW9uPD8+PiIpKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3ROYW1lU3VnZ2VzdGlvbigpIHRocm93cyBFeGNlcHRpb24geworICAgIGZpbmFsIFN0cmluZyBleHBlY3RlZFR5cGVOYW1lID0gIlBhdGgiOworICAgIGRvVGVzdChuZXcgTW9ja0ludHJvZHVjZVZhcmlhYmxlSGFuZGxlcigicGF0aCIsIHRydWUsIGZhbHNlLCBmYWxzZSwgZXhwZWN0ZWRUeXBlTmFtZSkgeworICAgICAgQE92ZXJyaWRlCisgICAgICBwdWJsaWMgSW50cm9kdWNlVmFyaWFibGVTZXR0aW5ncyBnZXRTZXR0aW5ncyhQcm9qZWN0IHByb2plY3QsIEVkaXRvciBlZGl0b3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQc2lFeHByZXNzaW9uIGV4cHIsIFBzaUV4cHJlc3Npb25bXSBvY2N1cnJlbmNlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFR5cGVTZWxlY3Rvck1hbmFnZXJJbXBsIHR5cGVTZWxlY3Rvck1hbmFnZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sZWFuIGRlY2xhcmVGaW5hbElmQWxsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbGVhbiBhbnlBc3NpZ25tZW50TEhTLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5wdXRWYWxpZGF0b3IgdmFsaWRhdG9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHNpRWxlbWVudCBhbmNob3IsIGZpbmFsIE9jY3VycmVuY2VzQ2hvb3Nlci5SZXBsYWNlQ2hvaWNlIHJlcGxhY2VDaG9pY2UpIHsKKyAgICAgICAgZmluYWwgUHNpVHlwZSB0eXBlID0gdHlwZVNlbGVjdG9yTWFuYWdlci5nZXREZWZhdWx0VHlwZSgpOworICAgICAgICBBc3NlcnQuYXNzZXJ0VHJ1ZSh0eXBlLmdldFByZXNlbnRhYmxlVGV4dCgpLCB0eXBlLmdldFByZXNlbnRhYmxlVGV4dCgpLmVxdWFscyhleHBlY3RlZFR5cGVOYW1lKSk7CisgICAgICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoInBhdGgiLCBJbnRyb2R1Y2VWYXJpYWJsZUJhc2UuZ2V0U3VnZ2VzdGVkTmFtZSh0eXBlLCBleHByKS5uYW1lc1swXSk7CisgICAgICAgIHJldHVybiBzdXBlci5nZXRTZXR0aW5ncyhwcm9qZWN0LCBlZGl0b3IsIGV4cHIsIG9jY3VycmVuY2VzLCB0eXBlU2VsZWN0b3JNYW5hZ2VyLCBkZWNsYXJlRmluYWxJZkFsbCwgYW55QXNzaWdubWVudExIUywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRvciwgYW5jaG9yLCByZXBsYWNlQ2hvaWNlKTsKKyAgICAgIH0KKyAgICB9KTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RTaWJsaW5nSW5uZXJDbGFzc1R5cGUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QobmV3IE1vY2tJbnRyb2R1Y2VWYXJpYWJsZUhhbmRsZXIoInZhcmkiLCB0cnVlLCBmYWxzZSwgZmFsc2UsICJBLkIiKSB7CisgICAgICBAT3ZlcnJpZGUKKyAgICAgIHB1YmxpYyBJbnRyb2R1Y2VWYXJpYWJsZVNldHRpbmdzIGdldFNldHRpbmdzKFByb2plY3QgcHJvamVjdCwgRWRpdG9yIGVkaXRvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBzaUV4cHJlc3Npb24gZXhwciwgUHNpRXhwcmVzc2lvbltdIG9jY3VycmVuY2VzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHlwZVNlbGVjdG9yTWFuYWdlckltcGwgdHlwZVNlbGVjdG9yTWFuYWdlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2xlYW4gZGVjbGFyZUZpbmFsSWZBbGwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sZWFuIGFueUFzc2lnbm1lbnRMSFMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnB1dFZhbGlkYXRvciB2YWxpZGF0b3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQc2lFbGVtZW50IGFuY2hvciwgZmluYWwgT2NjdXJyZW5jZXNDaG9vc2VyLlJlcGxhY2VDaG9pY2UgcmVwbGFjZUNob2ljZSkgeworICAgICAgICBmaW5hbCBQc2lUeXBlIHR5cGUgPSB0eXBlU2VsZWN0b3JNYW5hZ2VyLmdldERlZmF1bHRUeXBlKCk7CisgICAgICAgIEFzc2VydC5hc3NlcnRUcnVlKHR5cGUuZ2V0UHJlc2VudGFibGVUZXh0KCksIHR5cGUuZ2V0UHJlc2VudGFibGVUZXh0KCkuZXF1YWxzKCJCIikpOworICAgICAgICByZXR1cm4gc3VwZXIuZ2V0U2V0dGluZ3MocHJvamVjdCwgZWRpdG9yLCBleHByLCBvY2N1cnJlbmNlcywgdHlwZVNlbGVjdG9yTWFuYWdlciwgZGVjbGFyZUZpbmFsSWZBbGwsIGFueUFzc2lnbm1lbnRMSFMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0b3IsIGFuY2hvciwgcmVwbGFjZUNob2ljZSk7CisgICAgICB9CisgICAgfSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0Tm9uRXhwcmVzc2lvblByaW9yaXR5RmFpbHVyZSgpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdChuZXcgTW9ja0ludHJvZHVjZVZhcmlhYmxlSGFuZGxlcigic3VtIiwgdHJ1ZSwgdHJ1ZSwgZmFsc2UsICJpbnQiKXsKKyAgICAgIEBPdmVycmlkZQorICAgICAgcHJvdGVjdGVkIHZvaWQgc2hvd0Vycm9yTWVzc2FnZShQcm9qZWN0IHByb2plY3QsIEVkaXRvciBlZGl0b3IsIFN0cmluZyBtZXNzYWdlKSB7CisgICAgICAgIGFzc2VydEVxdWFscygiQ2Fubm90IHBlcmZvcm0gcmVmYWN0b3JpbmcuXG4iICsKKyAgICAgICAgICAgICAgICAgICAgICJFeHRyYWN0aW5nIHNlbGVjdGVkIGV4cHJlc3Npb24gd291bGQgY2hhbmdlIHRoZSBzZW1hbnRpYyBvZiB0aGUgd2hvbGUgZXhwcmVzc2lvbi4iLCBtZXNzYWdlKTsKKyAgICAgIH0KKyAgICB9KTsKKyAgfQorCisKKyAgcHVibGljIHZvaWQgdGVzdEluY29ycmVjdEV4cHJlc3Npb25TZWxlY3RlZCgpIHRocm93cyBFeGNlcHRpb24geworICAgIHRyeSB7CisgICAgICBkb1Rlc3QobmV3IE1vY2tJbnRyb2R1Y2VWYXJpYWJsZUhhbmRsZXIoInRvU3RyaW5nIiwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgImphdmEubGFuZy5TdHJpbmciKSk7CisgICAgfQorICAgIGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgICAgYXNzZXJ0RXF1YWxzKGUuZ2V0TWVzc2FnZSgpLCAiRXJyb3IgbWVzc2FnZTpDYW5ub3QgcGVyZm9ybSByZWZhY3RvcmluZy5cbiIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiU2VsZWN0ZWQgYmxvY2sgc2hvdWxkIHJlcHJlc2VudCBhbiBleHByZXNzaW9uLiIpOworICAgICAgcmV0dXJuOworICAgIH0KKyAgICBmYWlsKCJTaG91bGQgbm90IGJlIGFibGUgdG8gcGVyZm9ybSByZWZhY3RvcmluZyIpOworICB9CisgIAorICBwdWJsaWMgdm9pZCB0ZXN0TXVsdGlDYXRjaFNpbXBsZSgpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdChuZXcgTW9ja0ludHJvZHVjZVZhcmlhYmxlSGFuZGxlcigiZSIsIHRydWUsIHRydWUsIGZhbHNlLCAiamF2YS5sYW5nLkV4Y2VwdGlvbiIsIHRydWUpKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RNdWx0aUNhdGNoVHlwZWQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QobmV3IE1vY2tJbnRyb2R1Y2VWYXJpYWJsZUhhbmRsZXIoImIiLCB0cnVlLCB0cnVlLCBmYWxzZSwgImphdmEubGFuZy5FeGNlcHRpb24iLCB0cnVlKSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0QmVmb3JlVm9pZFN0YXRlbWVudCgpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdChuZXcgTW9ja0ludHJvZHVjZVZhcmlhYmxlSGFuZGxlcigiYyIsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIENvbW1vbkNsYXNzTmFtZXMuSkFWQV9MQU5HX09CSkVDVCkpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdExhbWJkYUV4cHIoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QobmV3IE1vY2tJbnRyb2R1Y2VWYXJpYWJsZUhhbmRsZXIoImMiLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCAiU0FNPGphdmEubGFuZy5JbnRlZ2VyPiIpKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RNZXRob2RSZWYoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QobmV3IE1vY2tJbnRyb2R1Y2VWYXJpYWJsZUhhbmRsZXIoImMiLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCAiVGVzdC5CYXIiKSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0TGFtYmRhRXhwck5vdEFjY2VwdGVkKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KG5ldyBNb2NrSW50cm9kdWNlVmFyaWFibGVIYW5kbGVyKCJjIiwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgIlNBTTxqYXZhLmxhbmcuU3RyaW5nPiIpKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RPbmVMaW5lTGFtYmRhVm9pZENvbXBhdGlibGUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QobmV3IE1vY2tJbnRyb2R1Y2VWYXJpYWJsZUhhbmRsZXIoImMiLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCAiamF2YS5sYW5nLlN0cmluZyIpKTsKKyAgfQorICBwdWJsaWMgdm9pZCB0ZXN0T25lTGluZUxhbWJkYVZhbHVlQ29tcGF0aWJsZSgpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdChuZXcgTW9ja0ludHJvZHVjZVZhcmlhYmxlSGFuZGxlcigiYyIsIGZhbHNlLCBmYWxzZSwgZmFsc2UsICJpbnQiKSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0Tm9ybWFsaXplRGVjbGFyYXRpb25zKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KG5ldyBNb2NrSW50cm9kdWNlVmFyaWFibGVIYW5kbGVyKCJpMyIsIGZhbHNlLCBmYWxzZSwgZmFsc2UsICJpbnQiKSk7CisgIH0KKworICBwcml2YXRlIHZvaWQgZG9UZXN0KEludHJvZHVjZVZhcmlhYmxlQmFzZSB0ZXN0TWUpIHRocm93cyBFeGNlcHRpb24geworICAgIEBOb25ObHMgU3RyaW5nIGJhc2VOYW1lID0gIi9yZWZhY3RvcmluZy9pbnRyb2R1Y2VWYXJpYWJsZS8iICsgZ2V0VGVzdE5hbWUoZmFsc2UpOworICAgIGNvbmZpZ3VyZUJ5RmlsZShiYXNlTmFtZSArICIuamF2YSIpOworICAgIHRlc3RNZS5pbnZva2UoZ2V0UHJvamVjdCgpLCBnZXRFZGl0b3IoKSwgZ2V0RmlsZSgpLCBudWxsKTsKKyAgICBjaGVja1Jlc3VsdEJ5RmlsZShiYXNlTmFtZSArICIuYWZ0ZXIuamF2YSIpOworICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovcmVmYWN0b3JpbmcvSW52ZXJ0Qm9vbGVhblRlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9yZWZhY3RvcmluZy9JbnZlcnRCb29sZWFuVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIzNmFjMWEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovcmVmYWN0b3JpbmcvSW52ZXJ0Qm9vbGVhblRlc3QuamF2YQpAQCAtMCwwICsxLDQ1IEBACitwYWNrYWdlIGNvbS5pbnRlbGxpai5yZWZhY3RvcmluZzsKKworaW1wb3J0IGNvbS5pbnRlbGxpai5KYXZhVGVzdFV0aWw7CitpbXBvcnQgY29tLmludGVsbGlqLmNvZGVJbnNpZ2h0LlRhcmdldEVsZW1lbnRVdGlsQmFzZTsKK2ltcG9ydCBjb20uaW50ZWxsaWoucHNpLlBzaUVsZW1lbnQ7CitpbXBvcnQgY29tLmludGVsbGlqLnBzaS5Qc2lOYW1lZEVsZW1lbnQ7CitpbXBvcnQgY29tLmludGVsbGlqLnJlZmFjdG9yaW5nLmludmVydEJvb2xlYW4uSW52ZXJ0Qm9vbGVhblByb2Nlc3NvcjsKK2ltcG9ydCBvcmcuamV0YnJhaW5zLmFubm90YXRpb25zLk5vdE51bGw7CisKKy8qKgorICogQGF1dGhvciB2ZW4KKyAqLworcHVibGljIGNsYXNzIEludmVydEJvb2xlYW5UZXN0IGV4dGVuZHMgTGlnaHRSZWZhY3RvcmluZ1Rlc3RDYXNlIHsKKyAgQE5vdE51bGwKKyAgQE92ZXJyaWRlCisgIHByb3RlY3RlZCBTdHJpbmcgZ2V0VGVzdERhdGFQYXRoKCkgeworICAgIHJldHVybiBKYXZhVGVzdFV0aWwuZ2V0SmF2YVRlc3REYXRhUGF0aCgpOworICB9CisKKyAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRFU1RfUk9PVCA9ICIvcmVmYWN0b3JpbmcvaW52ZXJ0Qm9vbGVhbi8iOworCisgIHB1YmxpYyB2b2lkIHRlc3QxKCkgdGhyb3dzIEV4Y2VwdGlvbiB7IGRvVGVzdCgpOyB9CisKKyAgcHVibGljIHZvaWQgdGVzdDIoKSB0aHJvd3MgRXhjZXB0aW9uIHsgZG9UZXN0KCk7IH0gLy9pbnZlcnRpbmcgYnJlYWtzIG92ZXJyaWRpbmcKKworICBwdWJsaWMgdm9pZCB0ZXN0UGFyYW1ldGVyKCkgdGhyb3dzIEV4Y2VwdGlvbiB7IGRvVGVzdCgpOyB9IC8vaW52ZXJ0aW5nIGJvb2xlYW4gcGFyYW1ldGVyCisKKyAgcHVibGljIHZvaWQgdGVzdFBhcmFtZXRlcjEoKSB0aHJvd3MgRXhjZXB0aW9uIHsgZG9UZXN0KCk7IH0gLy9pbnZlcnRpbmcgYm9vbGVhbiBwYXJhbWV0ZXIgbW9yZSBhZHZhbmNlZCBzdHVmZgorICBwdWJsaWMgdm9pZCB0ZXN0VW51c2VkUmV0dXJuVmFsdWUoKSB0aHJvd3MgRXhjZXB0aW9uIHsgZG9UZXN0KCk7IH0KKworICBwdWJsaWMgdm9pZCB0ZXN0SW5uZXJDbGFzc2VzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7ZG9UZXN0KCk7fQorICBwdWJsaWMgdm9pZCB0ZXN0QW5vbnltb3VzQ2xhc3NlcygpIHRocm93cyBFeGNlcHRpb24ge2RvVGVzdCgpO30KKworICBwcml2YXRlIHZvaWQgZG9UZXN0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgY29uZmlndXJlQnlGaWxlKFRFU1RfUk9PVCArIGdldFRlc3ROYW1lKHRydWUpICsgIi5qYXZhIik7CisgICAgUHNpRWxlbWVudCBlbGVtZW50ID0gVGFyZ2V0RWxlbWVudFV0aWxCYXNlLmZpbmRUYXJnZXRFbGVtZW50KG15RWRpdG9yLCBUYXJnZXRFbGVtZW50VXRpbEJhc2UuRUxFTUVOVF9OQU1FX0FDQ0VQVEVEKTsKKyAgICBhc3NlcnRUcnVlKGVsZW1lbnQgaW5zdGFuY2VvZiBQc2lOYW1lZEVsZW1lbnQpOworCisgICAgZmluYWwgUHNpTmFtZWRFbGVtZW50IG5hbWVkRWxlbWVudCA9IChQc2lOYW1lZEVsZW1lbnQpZWxlbWVudDsKKyAgICBmaW5hbCBTdHJpbmcgbmFtZSA9IG5hbWVkRWxlbWVudC5nZXROYW1lKCk7CisgICAgbmV3IEludmVydEJvb2xlYW5Qcm9jZXNzb3IobmFtZWRFbGVtZW50LCBuYW1lICsgIkludmVydGVkIikucnVuKCk7CisgICAgY2hlY2tSZXN1bHRCeUZpbGUoVEVTVF9ST09UICsgZ2V0VGVzdE5hbWUodHJ1ZSkgKyAiX2FmdGVyLmphdmEiKTsKKyAgfQorCit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovcmVmYWN0b3JpbmcvSmF2YUludHJvZHVjZVZhcmlhYmxlVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL3JlZmFjdG9yaW5nL0phdmFJbnRyb2R1Y2VWYXJpYWJsZVRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZTIzYjkwCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL3JlZmFjdG9yaW5nL0phdmFJbnRyb2R1Y2VWYXJpYWJsZVRlc3QuamF2YQpAQCAtMCwwICsxLDcxIEBACisvKgorICogQ29weXJpZ2h0IDIwMDAtMjAxMCBKZXRCcmFpbnMgcy5yLm8uCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworcGFja2FnZSBjb20uaW50ZWxsaWoucmVmYWN0b3Jpbmc7CisKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS51dGlsLnRleHQuU3RyaW5nVXRpbDsKK2ltcG9ydCBjb20uaW50ZWxsaWoucHNpLkphdmFQc2lGYWNhZGU7CitpbXBvcnQgY29tLmludGVsbGlqLnBzaS5Qc2lFbGVtZW50RmFjdG9yeTsKK2ltcG9ydCBjb20uaW50ZWxsaWoucHNpLlBzaUV4cHJlc3Npb247CitpbXBvcnQgY29tLmludGVsbGlqLnBzaS5Qc2lUeXBlOworaW1wb3J0IGNvbS5pbnRlbGxpai5wc2kuY29kZVN0eWxlLkphdmFDb2RlU3R5bGVNYW5hZ2VyOworaW1wb3J0IGNvbS5pbnRlbGxpai5wc2kuY29kZVN0eWxlLlN1Z2dlc3RlZE5hbWVJbmZvOworaW1wb3J0IGNvbS5pbnRlbGxpai5wc2kuY29kZVN0eWxlLlZhcmlhYmxlS2luZDsKK2ltcG9ydCBjb20uaW50ZWxsaWoucHNpLnNlYXJjaC5HbG9iYWxTZWFyY2hTY29wZTsKK2ltcG9ydCBjb20uaW50ZWxsaWoudGVzdEZyYW1ld29yay5MaWdodENvZGVJbnNpZ2h0VGVzdENhc2U7CisKKy8qKgorICogQGF1dGhvciBLb25zdGFudGluIEJ1bGVua292CisgKi8KK3B1YmxpYyBjbGFzcyBKYXZhSW50cm9kdWNlVmFyaWFibGVUZXN0IGV4dGVuZHMgTGlnaHRDb2RlSW5zaWdodFRlc3RDYXNlIHsKKyAgcHVibGljIHZvaWQgdGVzdEludHJvZHVjZUJhc2VkT25MaXRlcmFscygpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdCgiZ2V0QShcInNpbXBsZVwiKSIsICJzaW1wbGUiKTsKKyAgICBkb1Rlc3QoImdldEEoXCJTaW1wbGVOYW1lXCIpIiwgInNpbXBsZU5hbWUiLCAibmFtZSIpOworICAgIGRvVGVzdCgiZ2V0QShcInNpbXBsZU5hbWVcIikiLCAic2ltcGxlTmFtZSIsICJuYW1lIik7CisgICAgZG9UZXN0KCJnZXRBKFwic2ltcGxlQ2xhc3NcIikiLCAic2ltcGxlQ2xhc3MiLCAiYUNsYXNzIik7CisgICAgZG9UZXN0KCJnZXRBKFwic2hvcnRcIikiLCAiYVNob3J0Iik7CisgICAgZG9UZXN0KCJnZXRBKFwiYm9vbGVhblwiKSIsICJhQm9vbGVhbiIpOworICAgIGRvVGVzdCgiZ2V0QSgpLmdldEIoMSwgXCJuYW1lXCIpIiwgIm5hbWUiKTsKKyAgICBkb1Rlc3QoImdldEEoXCJOQU1FXCIpIiwgIm5hbWUiKTsKKyAgICBkb1Rlc3QoImdldEEoXCJuYW1lXCIpIiwgVmFyaWFibGVLaW5kLlNUQVRJQ19GSU5BTF9GSUVMRCwgIk5BTUUiKTsKKyAgICBkb1Rlc3QoImdldEEoXCJTaW1wbGVOYW1lXCIpIiwgVmFyaWFibGVLaW5kLlNUQVRJQ19GSU5BTF9GSUVMRCwgIlNJTVBMRV9OQU1FIik7CisgICAgZG9UZXN0KCJnZXQoZ2V0QigpLmdldEEoXCJTaW1wbGVOYW1lXCIpLmdldEMoKSkiLCAic2ltcGxlTmFtZSIsICJuYW1lIik7CisgIH0KKworICBwcm90ZWN0ZWQgc3RhdGljIHZvaWQgZG9UZXN0KFN0cmluZyBleHByZXNzaW9uLCBWYXJpYWJsZUtpbmQga2luZCwgUHNpVHlwZSB0eXBlLCBTdHJpbmcuLi5yZXN1bHRzKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBmaW5hbCBQc2lFbGVtZW50RmFjdG9yeSBmYWN0b3J5ID0gSmF2YVBzaUZhY2FkZS5nZXRFbGVtZW50RmFjdG9yeShnZXRQcm9qZWN0KCkpOworICAgIGZpbmFsIFBzaUV4cHJlc3Npb24gZXhwciA9IGZhY3RvcnkuY3JlYXRlRXhwcmVzc2lvbkZyb21UZXh0KGV4cHJlc3Npb24sIG51bGwpOworICAgIGZpbmFsIEphdmFDb2RlU3R5bGVNYW5hZ2VyIGNvZGVTdHlsZU1hbmFnZXIgPSBKYXZhQ29kZVN0eWxlTWFuYWdlci5nZXRJbnN0YW5jZShnZXRQcm9qZWN0KCkpOworICAgIGZpbmFsIFN1Z2dlc3RlZE5hbWVJbmZvIGluZm8gPSBjb2RlU3R5bGVNYW5hZ2VyLnN1Z2dlc3RWYXJpYWJsZU5hbWUoa2luZCwgbnVsbCwgZXhwciwgdHlwZSk7CisgICAgYXNzZXJ0IGluZm8ubmFtZXMubGVuZ3RoID49IHJlc3VsdHMubGVuZ3RoIDogbXNnKCJDYW4ndCBmaW5kIHNvbWUgdmFyaWFudHMiLCBpbmZvLm5hbWVzLCByZXN1bHRzKTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IHJlc3VsdHMubGVuZ3RoOyBpKyspIHsKKyAgICAgIGlmICghcmVzdWx0c1tpXS5lcXVhbHMoaW5mby5uYW1lc1tpXSkpIHsKKyAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbihtc2coIiIsIGluZm8ubmFtZXMsIHJlc3VsdHMpKTsKKyAgICAgIH0KKyAgICB9CisgIH0KKworICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgbXNnKFN0cmluZyBzLCBTdHJpbmdbXSBuYW1lcywgU3RyaW5nW10gcmVzdWx0cykgeworICAgIHJldHVybiBzICsgIi4gRXhwZWN0ZWQgYXQgZmlyc3QgcG9zaXRpb25zOiBbIiArIFN0cmluZ1V0aWwuam9pbihyZXN1bHRzLCAiLCIpICsgIl0gRm91bmQ6IFsiICsgU3RyaW5nVXRpbC5qb2luKG5hbWVzLCAiLCIpICsgIl0iOworICB9CisKKyAgcHJvdGVjdGVkIHN0YXRpYyB2b2lkIGRvVGVzdChTdHJpbmcgZXhwcmVzc2lvbiwgU3RyaW5nLi4ucmVzdWx0cykgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KGV4cHJlc3Npb24sIFZhcmlhYmxlS2luZC5MT0NBTF9WQVJJQUJMRSwgcmVzdWx0cyk7CisgIH0KKworICBwcm90ZWN0ZWQgc3RhdGljIHZvaWQgZG9UZXN0KFN0cmluZyBleHByZXNzaW9uLCBWYXJpYWJsZUtpbmQga2luZCwgU3RyaW5nLi4ucmVzdWx0cykgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KGV4cHJlc3Npb24sIGtpbmQsIFBzaVR5cGUuZ2V0SmF2YUxhbmdTdHJpbmcoZ2V0UHNpTWFuYWdlcigpLCBHbG9iYWxTZWFyY2hTY29wZS5hbGxTY29wZShnZXRQcm9qZWN0KCkpKSwgcmVzdWx0cyk7CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9yZWZhY3RvcmluZy9MaWdodFJlZmFjdG9yaW5nVGVzdENhc2UuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9yZWZhY3RvcmluZy9MaWdodFJlZmFjdG9yaW5nVGVzdENhc2UuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MTNiMjZlCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL3JlZmFjdG9yaW5nL0xpZ2h0UmVmYWN0b3JpbmdUZXN0Q2FzZS5qYXZhCkBAIC0wLDAgKzEsMjUgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwMC0yMDExIEpldEJyYWlucyBzLnIuby4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCitwYWNrYWdlIGNvbS5pbnRlbGxpai5yZWZhY3RvcmluZzsKKworaW1wb3J0IGNvbS5pbnRlbGxpai50ZXN0RnJhbWV3b3JrLkxpZ2h0Q29kZUluc2lnaHRUZXN0Q2FzZTsKKworcHVibGljIGFic3RyYWN0IGNsYXNzIExpZ2h0UmVmYWN0b3JpbmdUZXN0Q2FzZSBleHRlbmRzIExpZ2h0Q29kZUluc2lnaHRUZXN0Q2FzZXsKKyAgQE92ZXJyaWRlCisgIHByb3RlY3RlZCBib29sZWFuIGlzUnVuSW5Xcml0ZUFjdGlvbigpIHsKKyAgICByZXR1cm4gZmFsc2U7CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9yZWZhY3RvcmluZy9NYWtlQ2xhc3NTdGF0aWNUZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovcmVmYWN0b3JpbmcvTWFrZUNsYXNzU3RhdGljVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFmMzA5ZjMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovcmVmYWN0b3JpbmcvTWFrZUNsYXNzU3RhdGljVGVzdC5qYXZhCkBAIC0wLDAgKzEsOTcgQEAKKy8qKgorICogQGF1dGhvciB2ZW4KKyAqLworcGFja2FnZSBjb20uaW50ZWxsaWoucmVmYWN0b3Jpbmc7CisKK2ltcG9ydCBjb20uaW50ZWxsaWouSmF2YVRlc3RVdGlsOworaW1wb3J0IGNvbS5pbnRlbGxpai5jb2RlSW5zaWdodC5UYXJnZXRFbGVtZW50VXRpbEJhc2U7CitpbXBvcnQgY29tLmludGVsbGlqLnBzaS5Qc2lDbGFzczsKK2ltcG9ydCBjb20uaW50ZWxsaWoucHNpLlBzaUVsZW1lbnQ7CitpbXBvcnQgY29tLmludGVsbGlqLnBzaS5jb2RlU3R5bGUuQ29kZVN0eWxlU2V0dGluZ3M7CitpbXBvcnQgY29tLmludGVsbGlqLnBzaS5jb2RlU3R5bGUuQ29kZVN0eWxlU2V0dGluZ3NNYW5hZ2VyOworaW1wb3J0IGNvbS5pbnRlbGxpai5yZWZhY3RvcmluZy5tYWtlU3RhdGljLk1ha2VDbGFzc1N0YXRpY1Byb2Nlc3NvcjsKK2ltcG9ydCBjb20uaW50ZWxsaWoucmVmYWN0b3JpbmcubWFrZVN0YXRpYy5NYWtlU3RhdGljVXRpbDsKK2ltcG9ydCBjb20uaW50ZWxsaWoucmVmYWN0b3JpbmcubWFrZVN0YXRpYy5TZXR0aW5nczsKK2ltcG9ydCBjb20uaW50ZWxsaWoucmVmYWN0b3JpbmcudXRpbC5QYXJhbWV0ZXJUYWJsZVBhbmVsOworaW1wb3J0IG9yZy5qZXRicmFpbnMuYW5ub3RhdGlvbnMuTm90TnVsbDsKKworaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CisKK3B1YmxpYyBjbGFzcyBNYWtlQ2xhc3NTdGF0aWNUZXN0IGV4dGVuZHMgTGlnaHRSZWZhY3RvcmluZ1Rlc3RDYXNlIHsKKyAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRFU1RfUk9PVCA9ICIvcmVmYWN0b3JpbmcvbWFrZUNsYXNzU3RhdGljLyI7CisKKyAgQE5vdE51bGwKKyAgQE92ZXJyaWRlCisgIHByb3RlY3RlZCBTdHJpbmcgZ2V0VGVzdERhdGFQYXRoKCkgeworICAgIHJldHVybiBKYXZhVGVzdFV0aWwuZ2V0SmF2YVRlc3REYXRhUGF0aCgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFNpbXBsZTEoKSB0aHJvd3MgRXhjZXB0aW9uIHsgcGVyZm9ybSgpOyB9CisKKyAgcHVibGljIHZvaWQgdGVzdFNpbXBsZUZpZWxkcygpIHRocm93cyBFeGNlcHRpb24geyBwZXJmb3JtV2l0aEZpZWxkcygpOyB9CisKKyAgcHVibGljIHZvaWQgdGVzdEZpZWxkSW5pdGlhbGl6ZXJNb3ZlZFRvVGhlQ29uc3RydWN0b3IoKSB0aHJvd3MgRXhjZXB0aW9uIHsgcGVyZm9ybVdpdGhGaWVsZHMoKTsgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RRdWFsaWZpZWRUaGlzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7IHBlcmZvcm0oKTsgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RJREVBREVWMzI0NygpIHRocm93cyBFeGNlcHRpb24geyBwZXJmb3JtKCk7IH0KKworICBwdWJsaWMgdm9pZCB0ZXN0SURFQURFVjExNTk1KCkgdGhyb3dzIEV4Y2VwdGlvbiB7IHBlcmZvcm0oKTsgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RJREVBREVWMTI3NjIoKSB0aHJvd3MgRXhjZXB0aW9uIHsgcGVyZm9ybSgpOyB9CisKKyAgcHVibGljIHZvaWQgdGVzdE5ld0V4cHJlc3Npb25RdWFsaWZpZXIoKSB0aHJvd3MgRXhjZXB0aW9uIHtwZXJmb3JtKCk7fQorICBwdWJsaWMgdm9pZCB0ZXN0VGhpc1N1cGVyRXhwcmVzc2lvbnMoKSB0aHJvd3MgRXhjZXB0aW9uIHtwZXJmb3JtKCk7fQorCisgIHB1YmxpYyB2b2lkIHRlc3ROb25EZWZhdWx0Q29uc3RydWN0b3JBbm9ueW1vdXNDbGFzcygpIHRocm93cyBFeGNlcHRpb24ge3BlcmZvcm0oKTt9CisgIHB1YmxpYyB2b2lkIHRlc3REZWZhdWx0Q29uc3RydWN0b3JBbm9ueW1vdXNDbGFzcygpIHRocm93cyBFeGNlcHRpb24ge3BlcmZvcm0oKTt9CisgIHB1YmxpYyB2b2lkIHRlc3RGaWVsZEluaXRpYWxpemVyU3BsaXQoKSB0aHJvd3MgRXhjZXB0aW9uIHtwZXJmb3JtKCk7fQorCisgIHB1YmxpYyB2b2lkIHRlc3RSZWdSZWZlcmVuY2UoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBwZXJmb3JtKCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0RmllbGRXaXRoTXlQcmVmaXgoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBmaW5hbCBDb2RlU3R5bGVTZXR0aW5ncyBzZXR0aW5ncyA9IENvZGVTdHlsZVNldHRpbmdzTWFuYWdlci5nZXRTZXR0aW5ncyhnZXRQcm9qZWN0KCkpOworICAgIFN0cmluZyBvbGRQcmVmaXggPSBzZXR0aW5ncy5GSUVMRF9OQU1FX1BSRUZJWDsKKyAgICBzZXR0aW5ncy5GSUVMRF9OQU1FX1BSRUZJWCA9ICJteSI7CisgICAgdHJ5IHsKKyAgICAgIHBlcmZvcm1XaXRoRmllbGRzKCk7CisgICAgfQorICAgIGZpbmFsbHkgeworICAgICAgc2V0dGluZ3MuRklFTERfTkFNRV9QUkVGSVggPSBvbGRQcmVmaXg7CisgICAgfQorICB9CisKKyAgcHJpdmF0ZSB2b2lkIHBlcmZvcm0oKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBjb25maWd1cmVCeUZpbGUoVEVTVF9ST09UICsgZ2V0VGVzdE5hbWUoZmFsc2UpICsgIi5qYXZhIik7CisgICAgUHNpRWxlbWVudCBlbGVtZW50ID0gVGFyZ2V0RWxlbWVudFV0aWxCYXNlLmZpbmRUYXJnZXRFbGVtZW50KG15RWRpdG9yLCBUYXJnZXRFbGVtZW50VXRpbEJhc2UuRUxFTUVOVF9OQU1FX0FDQ0VQVEVEKTsKKyAgICBhc3NlcnRUcnVlKGVsZW1lbnQgaW5zdGFuY2VvZiBQc2lDbGFzcyk7CisgICAgUHNpQ2xhc3MgYUNsYXNzID0gKFBzaUNsYXNzKWVsZW1lbnQ7CisKKyAgICBib29sZWFuIGFkZENsYXNzUGFyYW1ldGVyID0gTWFrZVN0YXRpY1V0aWwuaXNQYXJhbWV0ZXJOZWVkZWQoYUNsYXNzKTsKKworICAgIG5ldyBNYWtlQ2xhc3NTdGF0aWNQcm9jZXNzb3IoCisgICAgICAgICAgICBnZXRQcm9qZWN0KCksCisgICAgICAgICAgICBhQ2xhc3MsCisgICAgICAgICAgICBuZXcgU2V0dGluZ3ModHJ1ZSwgYWRkQ2xhc3NQYXJhbWV0ZXIgPyAiYW5PYmplY3QiIDogbnVsbCwgbnVsbCkpLnJ1bigpOworICAgIGNoZWNrUmVzdWx0QnlGaWxlKFRFU1RfUk9PVCArIGdldFRlc3ROYW1lKGZhbHNlKSArICJfYWZ0ZXIuamF2YSIpOworICB9CisKKyAgcHJpdmF0ZSB2b2lkIHBlcmZvcm1XaXRoRmllbGRzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgY29uZmlndXJlQnlGaWxlKFRFU1RfUk9PVCArIGdldFRlc3ROYW1lKGZhbHNlKSArICIuamF2YSIpOworICAgIFBzaUVsZW1lbnQgZWxlbWVudCA9IFRhcmdldEVsZW1lbnRVdGlsQmFzZS5maW5kVGFyZ2V0RWxlbWVudChteUVkaXRvciwgVGFyZ2V0RWxlbWVudFV0aWxCYXNlLkVMRU1FTlRfTkFNRV9BQ0NFUFRFRCk7CisgICAgYXNzZXJ0VHJ1ZShlbGVtZW50IGluc3RhbmNlb2YgUHNpQ2xhc3MpOworICAgIFBzaUNsYXNzIGFDbGFzcyA9IChQc2lDbGFzcyllbGVtZW50OworICAgIGZpbmFsIEFycmF5TGlzdDxQYXJhbWV0ZXJUYWJsZVBhbmVsLlZhcmlhYmxlRGF0YT4gcGFyYW1ldGVyc0ZvckZpZWxkcyA9IG5ldyBBcnJheUxpc3Q8UGFyYW1ldGVyVGFibGVQYW5lbC5WYXJpYWJsZURhdGE+KCk7CisgICAgZmluYWwgYm9vbGVhbiBhZGRDbGFzc1BhcmFtZXRlciA9IE1ha2VTdGF0aWNVdGlsLmJ1aWxkVmFyaWFibGVEYXRhKGFDbGFzcywgcGFyYW1ldGVyc0ZvckZpZWxkcyk7CisKKyAgICBuZXcgTWFrZUNsYXNzU3RhdGljUHJvY2Vzc29yKAorICAgICAgICAgICAgZ2V0UHJvamVjdCgpLAorICAgICAgICAgICAgYUNsYXNzLAorICAgICAgICAgICAgbmV3IFNldHRpbmdzKHRydWUsIGFkZENsYXNzUGFyYW1ldGVyID8gImFuT2JqZWN0IiA6IG51bGwsCisgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVyc0ZvckZpZWxkcy50b0FycmF5KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IFBhcmFtZXRlclRhYmxlUGFuZWwuVmFyaWFibGVEYXRhW3BhcmFtZXRlcnNGb3JGaWVsZHMuc2l6ZSgpXSkpKS5ydW4oKTsKKyAgICBjaGVja1Jlc3VsdEJ5RmlsZShURVNUX1JPT1QgKyBnZXRUZXN0TmFtZShmYWxzZSkgKyAiX2FmdGVyLmphdmEiKTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL3JlZmFjdG9yaW5nL01ha2VNZXRob2RTdGF0aWNUZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovcmVmYWN0b3JpbmcvTWFrZU1ldGhvZFN0YXRpY1Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYjg5Yjk0Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL3JlZmFjdG9yaW5nL01ha2VNZXRob2RTdGF0aWNUZXN0LmphdmEKQEAgLTAsMCArMSwyMzEgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwMC0yMDExIEpldEJyYWlucyBzLnIuby4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCitwYWNrYWdlIGNvbS5pbnRlbGxpai5yZWZhY3RvcmluZzsKKworaW1wb3J0IGNvbS5pbnRlbGxpai5KYXZhVGVzdFV0aWw7CitpbXBvcnQgY29tLmludGVsbGlqLmNvZGVJbnNpZ2h0LlRhcmdldEVsZW1lbnRVdGlsQmFzZTsKK2ltcG9ydCBjb20uaW50ZWxsaWoucHNpLlBzaUVsZW1lbnQ7CitpbXBvcnQgY29tLmludGVsbGlqLnBzaS5Qc2lNZXRob2Q7CitpbXBvcnQgY29tLmludGVsbGlqLnJlZmFjdG9yaW5nLm1ha2VTdGF0aWMuTWFrZU1ldGhvZFN0YXRpY1Byb2Nlc3NvcjsKK2ltcG9ydCBjb20uaW50ZWxsaWoucmVmYWN0b3JpbmcubWFrZVN0YXRpYy5NYWtlU3RhdGljVXRpbDsKK2ltcG9ydCBjb20uaW50ZWxsaWoucmVmYWN0b3JpbmcubWFrZVN0YXRpYy5TZXR0aW5nczsKK2ltcG9ydCBjb20uaW50ZWxsaWoucmVmYWN0b3JpbmcudXRpbC5QYXJhbWV0ZXJUYWJsZVBhbmVsOworaW1wb3J0IG9yZy5qZXRicmFpbnMuYW5ub3RhdGlvbnMuTm90TnVsbDsKKworaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CisKK3B1YmxpYyBjbGFzcyBNYWtlTWV0aG9kU3RhdGljVGVzdCBleHRlbmRzIExpZ2h0UmVmYWN0b3JpbmdUZXN0Q2FzZSB7CisgIEBOb3ROdWxsCisgIEBPdmVycmlkZQorICBwcm90ZWN0ZWQgU3RyaW5nIGdldFRlc3REYXRhUGF0aCgpIHsKKyAgICByZXR1cm4gSmF2YVRlc3RVdGlsLmdldEphdmFUZXN0RGF0YVBhdGgoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RFbXB0eU1ldGhvZCgpIHRocm93cyBFeGNlcHRpb24geworICAgIGNvbmZpZ3VyZUJ5RmlsZSgiL3JlZmFjdG9yaW5nL21ha2VNZXRob2RTdGF0aWMvYmVmb3JlMS5qYXZhIik7CisgICAgcGVyZm9ybSh0cnVlKTsKKyAgICBjaGVja1Jlc3VsdEJ5RmlsZSgiL3JlZmFjdG9yaW5nL21ha2VNZXRob2RTdGF0aWMvYWZ0ZXIxLmphdmEiKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RVc2VTdGF0aWMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBjb25maWd1cmVCeUZpbGUoIi9yZWZhY3RvcmluZy9tYWtlTWV0aG9kU3RhdGljL2JlZm9yZTIuamF2YSIpOworICAgIHBlcmZvcm0odHJ1ZSk7CisgICAgY2hlY2tSZXN1bHRCeUZpbGUoIi9yZWZhY3RvcmluZy9tYWtlTWV0aG9kU3RhdGljL2FmdGVyMi5qYXZhIik7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0VXNlRmllbGQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBjb25maWd1cmVCeUZpbGUoIi9yZWZhY3RvcmluZy9tYWtlTWV0aG9kU3RhdGljL2JlZm9yZTMuamF2YSIpOworICAgIHBlcmZvcm0odHJ1ZSk7CisgICAgY2hlY2tSZXN1bHRCeUZpbGUoIi9yZWZhY3RvcmluZy9tYWtlTWV0aG9kU3RhdGljL2FmdGVyMy5qYXZhIik7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0SURFQURFVjI1NTYoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBjb25maWd1cmVCeUZpbGUoIi9yZWZhY3RvcmluZy9tYWtlTWV0aG9kU3RhdGljL2JlZm9yZTIxLmphdmEiKTsKKyAgICBwZXJmb3JtKGZhbHNlKTsKKyAgICBjaGVja1Jlc3VsdEJ5RmlsZSgiL3JlZmFjdG9yaW5nL21ha2VNZXRob2RTdGF0aWMvYWZ0ZXIyMS5qYXZhIik7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0VXNlRmllbGRXaXRoVGhpcygpIHRocm93cyBFeGNlcHRpb24geworICAgIGNvbmZpZ3VyZUJ5RmlsZSgiL3JlZmFjdG9yaW5nL21ha2VNZXRob2RTdGF0aWMvYmVmb3JlNC5qYXZhIik7CisgICAgcGVyZm9ybSh0cnVlKTsKKyAgICBjaGVja1Jlc3VsdEJ5RmlsZSgiL3JlZmFjdG9yaW5nL21ha2VNZXRob2RTdGF0aWMvYWZ0ZXI0LmphdmEiKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RVc2VGaWVsZFdpdGhTdXBlckVtcHR5RXh0ZW5kcygpIHRocm93cyBFeGNlcHRpb24geworICAgIGNvbmZpZ3VyZUJ5RmlsZSgiL3JlZmFjdG9yaW5nL21ha2VNZXRob2RTdGF0aWMvYmVmb3JlNS5qYXZhIik7CisgICAgcGVyZm9ybSh0cnVlKTsKKyAgICBjaGVja1Jlc3VsdEJ5RmlsZSgiL3JlZmFjdG9yaW5nL21ha2VNZXRob2RTdGF0aWMvYWZ0ZXI1LmphdmEiKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RVc2VGaWVsZFdpdGhTdXBlcigpIHRocm93cyBFeGNlcHRpb24geworICAgIGNvbmZpZ3VyZUJ5RmlsZSgiL3JlZmFjdG9yaW5nL21ha2VNZXRob2RTdGF0aWMvYmVmb3JlNi5qYXZhIik7CisgICAgcGVyZm9ybSh0cnVlKTsKKyAgICBjaGVja1Jlc3VsdEJ5RmlsZSgiL3JlZmFjdG9yaW5nL21ha2VNZXRob2RTdGF0aWMvYWZ0ZXI2LmphdmEiKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RVc2VNZXRob2QoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBjb25maWd1cmVCeUZpbGUoIi9yZWZhY3RvcmluZy9tYWtlTWV0aG9kU3RhdGljL2JlZm9yZTcuamF2YSIpOworICAgIHBlcmZvcm0odHJ1ZSk7CisgICAgY2hlY2tSZXN1bHRCeUZpbGUoIi9yZWZhY3RvcmluZy9tYWtlTWV0aG9kU3RhdGljL2FmdGVyNy5qYXZhIik7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0VGhpc0luc2lkZUFub255bW91cygpIHRocm93cyBFeGNlcHRpb24geworICAgIGNvbmZpZ3VyZUJ5RmlsZSgiL3JlZmFjdG9yaW5nL21ha2VNZXRob2RTdGF0aWMvYmVmb3JlOC5qYXZhIik7CisgICAgcGVyZm9ybSh0cnVlKTsKKyAgICBjaGVja1Jlc3VsdEJ5RmlsZSgiL3JlZmFjdG9yaW5nL21ha2VNZXRob2RTdGF0aWMvYWZ0ZXI4LmphdmEiKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RVc2FnZUluU3ViY2xhc3MoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBjb25maWd1cmVCeUZpbGUoIi9yZWZhY3RvcmluZy9tYWtlTWV0aG9kU3RhdGljL2JlZm9yZTkuamF2YSIpOworICAgIHBlcmZvcm0odHJ1ZSk7CisgICAgY2hlY2tSZXN1bHRCeUZpbGUoIi9yZWZhY3RvcmluZy9tYWtlTWV0aG9kU3RhdGljL2FmdGVyOS5qYXZhIik7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0R2VuZXJhbFVzYWdlTm9QYXJhbSgpIHRocm93cyBFeGNlcHRpb24geworICAgIGNvbmZpZ3VyZUJ5RmlsZSgiL3JlZmFjdG9yaW5nL21ha2VNZXRob2RTdGF0aWMvYmVmb3JlMTAuamF2YSIpOworICAgIHBlcmZvcm0oZmFsc2UpOworICAgIGNoZWNrUmVzdWx0QnlGaWxlKCIvcmVmYWN0b3JpbmcvbWFrZU1ldGhvZFN0YXRpYy9hZnRlcjEwLW5wLmphdmEiKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RHZW5lcmFsVXNhZ2UoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBjb25maWd1cmVCeUZpbGUoIi9yZWZhY3RvcmluZy9tYWtlTWV0aG9kU3RhdGljL2JlZm9yZTEwLmphdmEiKTsKKyAgICBwZXJmb3JtKHRydWUpOworICAgIGNoZWNrUmVzdWx0QnlGaWxlKCIvcmVmYWN0b3JpbmcvbWFrZU1ldGhvZFN0YXRpYy9hZnRlcjEwLmphdmEiKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RVc2FnZUluU3ViY2xhc3NXaXRoU3VwZXIoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBjb25maWd1cmVCeUZpbGUoIi9yZWZhY3RvcmluZy9tYWtlTWV0aG9kU3RhdGljL2JlZm9yZTExLmphdmEiKTsKKyAgICBwZXJmb3JtKHRydWUpOworICAgIGNoZWNrUmVzdWx0QnlGaWxlKCIvcmVmYWN0b3JpbmcvbWFrZU1ldGhvZFN0YXRpYy9hZnRlcjExLmphdmEiKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RTdXBlclVzYWdlV2l0aENvbXBsZXhTdXBlckNsYXNzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgY29uZmlndXJlQnlGaWxlKCIvcmVmYWN0b3JpbmcvbWFrZU1ldGhvZFN0YXRpYy9iZWZvcmUxMi5qYXZhIik7CisgICAgcGVyZm9ybSh0cnVlKTsKKyAgICBjaGVja1Jlc3VsdEJ5RmlsZSgiL3JlZmFjdG9yaW5nL21ha2VNZXRob2RTdGF0aWMvYWZ0ZXIxMi5qYXZhIik7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0RXhwbGljaXRUaGlzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgY29uZmlndXJlQnlGaWxlKCIvcmVmYWN0b3JpbmcvbWFrZU1ldGhvZFN0YXRpYy9iZWZvcmUxMy5qYXZhIik7CisgICAgcGVyZm9ybSh0cnVlKTsKKyAgICBjaGVja1Jlc3VsdEJ5RmlsZSgiL3JlZmFjdG9yaW5nL21ha2VNZXRob2RTdGF0aWMvYWZ0ZXIxMy5qYXZhIik7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0UXVhbGlmaWVkVGhpcygpIHRocm93cyBFeGNlcHRpb24geworICAgIGNvbmZpZ3VyZUJ5RmlsZSgiL3JlZmFjdG9yaW5nL21ha2VNZXRob2RTdGF0aWMvYmVmb3JlMTQuamF2YSIpOworICAgIHBlcmZvcm0odHJ1ZSk7CisgICAgY2hlY2tSZXN1bHRCeUZpbGUoIi9yZWZhY3RvcmluZy9tYWtlTWV0aG9kU3RhdGljL2FmdGVyMTQuamF2YSIpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFNDUjgwNDMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBjb25maWd1cmVCeUZpbGUoIi9yZWZhY3RvcmluZy9tYWtlTWV0aG9kU3RhdGljL2JlZm9yZTE1LmphdmEiKTsKKyAgICBwZXJmb3JtKHRydWUpOworICAgIGNoZWNrUmVzdWx0QnlGaWxlKCIvcmVmYWN0b3JpbmcvbWFrZU1ldGhvZFN0YXRpYy9hZnRlcjE1LmphdmEiKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RKYXZhZG9jMSgpIHRocm93cyBFeGNlcHRpb24geworICAgIGNvbmZpZ3VyZUJ5RmlsZSgiL3JlZmFjdG9yaW5nL21ha2VNZXRob2RTdGF0aWMvYmVmb3JlMTYuamF2YSIpOworICAgIHBlcmZvcm1XaXRoRmllbGRzKCk7CisgICAgY2hlY2tSZXN1bHRCeUZpbGUoIi9yZWZhY3RvcmluZy9tYWtlTWV0aG9kU3RhdGljL2FmdGVyMTYuamF2YSIpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEphdmFkb2MyKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgY29uZmlndXJlQnlGaWxlKCIvcmVmYWN0b3JpbmcvbWFrZU1ldGhvZFN0YXRpYy9iZWZvcmUxNy5qYXZhIik7CisgICAgcGVyZm9ybVdpdGhGaWVsZHMoKTsKKyAgICBjaGVja1Jlc3VsdEJ5RmlsZSgiL3JlZmFjdG9yaW5nL21ha2VNZXRob2RTdGF0aWMvYWZ0ZXIxNy5qYXZhIik7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0R2VuZXJpY0NsYXNzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgY29uZmlndXJlQnlGaWxlKCIvcmVmYWN0b3JpbmcvbWFrZU1ldGhvZFN0YXRpYy9iZWZvcmUxOC5qYXZhIik7CisgICAgcGVyZm9ybVdpdGhGaWVsZHMoKTsKKyAgICBjaGVja1Jlc3VsdEJ5RmlsZSgiL3JlZmFjdG9yaW5nL21ha2VNZXRob2RTdGF0aWMvYWZ0ZXIxOC5qYXZhIik7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0RmllbGRXcml0aW5nKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgY29uZmlndXJlQnlGaWxlKCIvcmVmYWN0b3JpbmcvbWFrZU1ldGhvZFN0YXRpYy9iZWZvcmUxOS5qYXZhIik7CisgICAgcGVyZm9ybVdpdGhGaWVsZHMoKTsKKyAgICBjaGVja1Jlc3VsdEJ5RmlsZSgiL3JlZmFjdG9yaW5nL21ha2VNZXRob2RTdGF0aWMvYWZ0ZXIxOS5qYXZhIik7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0UXVhbGlmaWVkSW5uZXJDbGFzc0NyZWF0aW9uKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgY29uZmlndXJlQnlGaWxlKCIvcmVmYWN0b3JpbmcvbWFrZU1ldGhvZFN0YXRpYy9iZWZvcmUyMC5qYXZhIik7CisgICAgcGVyZm9ybVdpdGhGaWVsZHMoKTsKKyAgICBjaGVja1Jlc3VsdEJ5RmlsZSgiL3JlZmFjdG9yaW5nL21ha2VNZXRob2RTdGF0aWMvYWZ0ZXIyMC5qYXZhIik7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0UXVhbGlmaWVkVGhpc0FkZGVkKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgY29uZmlndXJlQnlGaWxlKCIvcmVmYWN0b3JpbmcvbWFrZU1ldGhvZFN0YXRpYy9iZWZvcmUyMi5qYXZhIik7CisgICAgcGVyZm9ybVdpdGhGaWVsZHMoKTsKKyAgICBjaGVja1Jlc3VsdEJ5RmlsZSgiL3JlZmFjdG9yaW5nL21ha2VNZXRob2RTdGF0aWMvYWZ0ZXIyMi5qYXZhIik7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0UHJlc2VydmVUeXBlUGFyYW1zKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgY29uZmlndXJlQnlGaWxlKCIvcmVmYWN0b3JpbmcvbWFrZU1ldGhvZFN0YXRpYy9iZWZvcmVQcmVzZXJ2ZVR5cGVQYXJhbXMuamF2YSIpOworICAgIHBlcmZvcm1XaXRoRmllbGRzKCk7CisgICAgY2hlY2tSZXN1bHRCeUZpbGUoIi9yZWZhY3RvcmluZy9tYWtlTWV0aG9kU3RhdGljL2FmdGVyUHJlc2VydmVUeXBlUGFyYW1zLmphdmEiKTsKKyAgfSAKKworICBwdWJsaWMgdm9pZCB0ZXN0SW5uZXJTdGF0aWNDbGFzc1VzZWQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBjb25maWd1cmVCeUZpbGUoIi9yZWZhY3RvcmluZy9tYWtlTWV0aG9kU3RhdGljL2JlZm9yZUlubmVyU3RhdGljQ2xhc3NVc2VkLmphdmEiKTsKKyAgICBQc2lFbGVtZW50IGVsZW1lbnQgPSBUYXJnZXRFbGVtZW50VXRpbEJhc2UuZmluZFRhcmdldEVsZW1lbnQobXlFZGl0b3IsIFRhcmdldEVsZW1lbnRVdGlsQmFzZS5FTEVNRU5UX05BTUVfQUNDRVBURUQpOworICAgIGFzc2VydFRydWUoZWxlbWVudCBpbnN0YW5jZW9mIFBzaU1ldGhvZCk7CisgICAgYXNzZXJ0RmFsc2UoTWFrZVN0YXRpY1V0aWwuaXNQYXJhbWV0ZXJOZWVkZWQoKFBzaU1ldGhvZCllbGVtZW50KSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0TWV0aG9kUmVmZXJlbmNlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KHRydWUpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFByZXNlcnZlUGFyYW1ldGVyc0FsaWdubWVudCgpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdCgpOworICB9CisKKyAgcHJpdmF0ZSB2b2lkIGRvVGVzdCgpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdChmYWxzZSk7CisgIH0KKworICBwcml2YXRlIHZvaWQgZG9UZXN0KGZpbmFsIGJvb2xlYW4gYWRkQ2xhc3NQYXJhbWV0ZXIpIHRocm93cyBFeGNlcHRpb24geworICAgIGNvbmZpZ3VyZUJ5RmlsZSgiL3JlZmFjdG9yaW5nL21ha2VNZXRob2RTdGF0aWMvYmVmb3JlIiArIGdldFRlc3ROYW1lKGZhbHNlKSArICIuamF2YSIpOworICAgIHBlcmZvcm0oYWRkQ2xhc3NQYXJhbWV0ZXIpOworICAgIGNoZWNrUmVzdWx0QnlGaWxlKCIvcmVmYWN0b3JpbmcvbWFrZU1ldGhvZFN0YXRpYy9hZnRlciIgKyBnZXRUZXN0TmFtZShmYWxzZSkgKyAiLmphdmEiKTsKKyAgfQorCisgIHByaXZhdGUgc3RhdGljIHZvaWQgcGVyZm9ybShib29sZWFuIGFkZENsYXNzUGFyYW1ldGVyKSB7CisgICAgUHNpRWxlbWVudCBlbGVtZW50ID0gVGFyZ2V0RWxlbWVudFV0aWxCYXNlLmZpbmRUYXJnZXRFbGVtZW50KG15RWRpdG9yLCBUYXJnZXRFbGVtZW50VXRpbEJhc2UuRUxFTUVOVF9OQU1FX0FDQ0VQVEVEKTsKKyAgICBhc3NlcnRUcnVlKGVsZW1lbnQgaW5zdGFuY2VvZiBQc2lNZXRob2QpOworICAgIFBzaU1ldGhvZCBtZXRob2QgPSAoUHNpTWV0aG9kKSBlbGVtZW50OworCisgICAgbmV3IE1ha2VNZXRob2RTdGF0aWNQcm9jZXNzb3IoCisgICAgICAgICAgICBnZXRQcm9qZWN0KCksCisgICAgICAgICAgICBtZXRob2QsCisgICAgICAgICAgICBuZXcgU2V0dGluZ3ModHJ1ZSwgYWRkQ2xhc3NQYXJhbWV0ZXIgPyAiYW5PYmplY3QiIDogbnVsbCwgbnVsbCkpLnJ1bigpOworICB9CisKKyAgcHJpdmF0ZSBzdGF0aWMgdm9pZCBwZXJmb3JtV2l0aEZpZWxkcygpIHsKKyAgICBQc2lFbGVtZW50IGVsZW1lbnQgPSBUYXJnZXRFbGVtZW50VXRpbEJhc2UuZmluZFRhcmdldEVsZW1lbnQobXlFZGl0b3IsIFRhcmdldEVsZW1lbnRVdGlsQmFzZS5FTEVNRU5UX05BTUVfQUNDRVBURUQpOworICAgIGFzc2VydFRydWUoZWxlbWVudCBpbnN0YW5jZW9mIFBzaU1ldGhvZCk7CisgICAgUHNpTWV0aG9kIG1ldGhvZCA9IChQc2lNZXRob2QpIGVsZW1lbnQ7CisgICAgZmluYWwgQXJyYXlMaXN0PFBhcmFtZXRlclRhYmxlUGFuZWwuVmFyaWFibGVEYXRhPiBwYXJhbWV0ZXJzRm9yRmllbGRzID0gbmV3IEFycmF5TGlzdDxQYXJhbWV0ZXJUYWJsZVBhbmVsLlZhcmlhYmxlRGF0YT4oKTsKKyAgICBmaW5hbCBib29sZWFuIGFkZENsYXNzUGFyYW1ldGVyID0gTWFrZVN0YXRpY1V0aWwuYnVpbGRWYXJpYWJsZURhdGEobWV0aG9kLCBwYXJhbWV0ZXJzRm9yRmllbGRzKTsKKworICAgIG5ldyBNYWtlTWV0aG9kU3RhdGljUHJvY2Vzc29yKAorICAgICAgICAgICAgZ2V0UHJvamVjdCgpLAorICAgICAgICAgICAgbWV0aG9kLAorICAgICAgICAgICAgbmV3IFNldHRpbmdzKHRydWUsIGFkZENsYXNzUGFyYW1ldGVyID8gImFuT2JqZWN0IiA6IG51bGwsCisgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVyc0ZvckZpZWxkcy50b0FycmF5KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IFBhcmFtZXRlclRhYmxlUGFuZWwuVmFyaWFibGVEYXRhW3BhcmFtZXRlcnNGb3JGaWVsZHMuc2l6ZSgpXSkpKS5ydW4oKTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL3JlZmFjdG9yaW5nL01vY2tJbnRyb2R1Y2VDb25zdGFudEhhbmRsZXIuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9yZWZhY3RvcmluZy9Nb2NrSW50cm9kdWNlQ29uc3RhbnRIYW5kbGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjhjYmQ5NgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9yZWZhY3RvcmluZy9Nb2NrSW50cm9kdWNlQ29uc3RhbnRIYW5kbGVyLmphdmEKQEAgLTAsMCArMSwzMCBAQAorLyoKKyAqIFVzZXI6IGFubmEKKyAqIERhdGU6IDI5LU9jdC0yMDA4CisgKi8KK3BhY2thZ2UgY29tLmludGVsbGlqLnJlZmFjdG9yaW5nOworCitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkuZWRpdG9yLkVkaXRvcjsKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS5wcm9qZWN0LlByb2plY3Q7CitpbXBvcnQgY29tLmludGVsbGlqLnBzaS4qOworaW1wb3J0IGNvbS5pbnRlbGxpai5yZWZhY3RvcmluZy5pbnRyb2R1Y2VGaWVsZC5JbnRyb2R1Y2VDb25zdGFudEhhbmRsZXI7CisKK3B1YmxpYyBjbGFzcyBNb2NrSW50cm9kdWNlQ29uc3RhbnRIYW5kbGVyIGV4dGVuZHMgSW50cm9kdWNlQ29uc3RhbnRIYW5kbGVyeworICBwcml2YXRlIGZpbmFsIFBzaUNsYXNzIG15VGFyZ2V0Q2xhc3M7CisKKyAgcHVibGljIE1vY2tJbnRyb2R1Y2VDb25zdGFudEhhbmRsZXIoZmluYWwgUHNpQ2xhc3MgdGFyZ2V0Q2xhc3MpIHsKKyAgICBteVRhcmdldENsYXNzID0gdGFyZ2V0Q2xhc3M7CisgIH0KKworICBAT3ZlcnJpZGUKKyAgcHJvdGVjdGVkIFNldHRpbmdzIHNob3dSZWZhY3RvcmluZ0RpYWxvZyhmaW5hbCBQcm9qZWN0IHByb2plY3QsIGZpbmFsIEVkaXRvciBlZGl0b3IsIGZpbmFsIFBzaUNsYXNzIHBhcmVudENsYXNzLCBmaW5hbCBQc2lFeHByZXNzaW9uIGV4cHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmluYWwgUHNpVHlwZSB0eXBlLCBmaW5hbCBQc2lFeHByZXNzaW9uW10gb2NjdXJyZW5jZXMsIGZpbmFsIFBzaUVsZW1lbnQgYW5jaG9yRWxlbWVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaW5hbCBQc2lFbGVtZW50IGFuY2hvckVsZW1lbnRJZkFsbCkgeworICAgIHJldHVybiBuZXcgU2V0dGluZ3MoInh4eCIsIGV4cHIsIG9jY3VycmVuY2VzLCB0cnVlLCB0cnVlLCB0cnVlLCBJbml0aWFsaXphdGlvblBsYWNlLklOX0ZJRUxEX0RFQ0xBUkFUSU9OLCBnZXRWaXNpYmlsaXR5KCksIG51bGwsIG51bGwsIGZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgbXlUYXJnZXRDbGFzcyAhPSBudWxsID8gbXlUYXJnZXRDbGFzcyA6IHBhcmVudENsYXNzLCBmYWxzZSwgZmFsc2UpOworICB9CisKKyAgcHJvdGVjdGVkIFN0cmluZyBnZXRWaXNpYmlsaXR5KCkgeworICAgIHJldHVybiBQc2lNb2RpZmllci5QVUJMSUM7CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9yZWZhY3RvcmluZy9Nb2NrSW50cm9kdWNlRmllbGRIYW5kbGVyLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovcmVmYWN0b3JpbmcvTW9ja0ludHJvZHVjZUZpZWxkSGFuZGxlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhkMTUyNjY2Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL3JlZmFjdG9yaW5nL01vY2tJbnRyb2R1Y2VGaWVsZEhhbmRsZXIuamF2YQpAQCAtMCwwICsxLDM2IEBACitwYWNrYWdlIGNvbS5pbnRlbGxpai5yZWZhY3RvcmluZzsKKworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLmVkaXRvci5FZGl0b3I7CitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkucHJvamVjdC5Qcm9qZWN0OworaW1wb3J0IGNvbS5pbnRlbGxpai5wc2kuKjsKK2ltcG9ydCBjb20uaW50ZWxsaWoucHNpLmNvZGVTdHlsZS5KYXZhQ29kZVN0eWxlTWFuYWdlcjsKK2ltcG9ydCBjb20uaW50ZWxsaWoucHNpLmNvZGVTdHlsZS5TdWdnZXN0ZWROYW1lSW5mbzsKK2ltcG9ydCBjb20uaW50ZWxsaWoucHNpLmNvZGVTdHlsZS5WYXJpYWJsZUtpbmQ7CitpbXBvcnQgY29tLmludGVsbGlqLnJlZmFjdG9yaW5nLmludHJvZHVjZUZpZWxkLkludHJvZHVjZUZpZWxkSGFuZGxlcjsKKworLyoqCisgKiBAYXV0aG9yIHZlbgorICovCitwdWJsaWMgY2xhc3MgTW9ja0ludHJvZHVjZUZpZWxkSGFuZGxlciBleHRlbmRzIEludHJvZHVjZUZpZWxkSGFuZGxlciB7CisgIHByaXZhdGUgZmluYWwgSW5pdGlhbGl6YXRpb25QbGFjZSBteUluaXRpYWxpemF0aW9uUGxhY2U7CisgIHByaXZhdGUgZmluYWwgYm9vbGVhbiBteURlY2xhcmVTdGF0aWM7CisKKyAgcHVibGljIE1vY2tJbnRyb2R1Y2VGaWVsZEhhbmRsZXIoZmluYWwgSW5pdGlhbGl6YXRpb25QbGFjZSBpbml0aWFsaXphdGlvblBsYWNlLCBmaW5hbCBib29sZWFuIGRlY2xhcmVTdGF0aWMpIHsKKyAgICBteUluaXRpYWxpemF0aW9uUGxhY2UgPSBpbml0aWFsaXphdGlvblBsYWNlOworICAgIG15RGVjbGFyZVN0YXRpYyA9IGRlY2xhcmVTdGF0aWM7CisgIH0KKworICBAT3ZlcnJpZGUKKyAgcHJvdGVjdGVkIFNldHRpbmdzIHNob3dSZWZhY3RvcmluZ0RpYWxvZyhQcm9qZWN0IHByb2plY3QsIEVkaXRvciBlZGl0b3IsIFBzaUNsYXNzIHBhcmVudENsYXNzLCBQc2lFeHByZXNzaW9uIGV4cHIsIFBzaVR5cGUgdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQc2lFeHByZXNzaW9uW10gb2NjdXJyZW5jZXMsIFBzaUVsZW1lbnQgYW5jaG9yRWxlbWVudCwgUHNpRWxlbWVudCBhbmNob3JFbGVtZW50SWZBbGwpIHsKKyAgICBTdWdnZXN0ZWROYW1lSW5mbyBuYW1lID0gSmF2YUNvZGVTdHlsZU1hbmFnZXIuZ2V0SW5zdGFuY2UocHJvamVjdCkuc3VnZ2VzdFZhcmlhYmxlTmFtZShWYXJpYWJsZUtpbmQuRklFTEQsIG51bGwsIGV4cHIsIHR5cGUpOworICAgIHJldHVybiBuZXcgU2V0dGluZ3MobmFtZS5uYW1lc1swXSwgIGV4cHIsIG9jY3VycmVuY2VzLCB0cnVlLCBteURlY2xhcmVTdGF0aWMsIHRydWUsIG15SW5pdGlhbGl6YXRpb25QbGFjZSwKKyAgICAgICAgICAgIFBzaU1vZGlmaWVyLlBVQkxJQywKKyAgICAgICAgICAgIG51bGwsCisgICAgICAgICAgICBnZXRGaWVsZFR5cGUodHlwZSksIHRydWUsIChUYXJnZXREZXN0aW5hdGlvbiludWxsLCBmYWxzZSwgZmFsc2UpOworICB9CisKKyAgcHJvdGVjdGVkIFBzaVR5cGUgZ2V0RmllbGRUeXBlKFBzaVR5cGUgdHlwZSkgeworICAgIHJldHVybiB0eXBlOworICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovcmVmYWN0b3JpbmcvTW9ja0ludHJvZHVjZVZhcmlhYmxlSGFuZGxlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL3JlZmFjdG9yaW5nL01vY2tJbnRyb2R1Y2VWYXJpYWJsZUhhbmRsZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMzU1ODQ5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL3JlZmFjdG9yaW5nL01vY2tJbnRyb2R1Y2VWYXJpYWJsZUhhbmRsZXIuamF2YQpAQCAtMCwwICsxLDExMiBAQAorcGFja2FnZSBjb20uaW50ZWxsaWoucmVmYWN0b3Jpbmc7CisKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS5lZGl0b3IuRWRpdG9yOworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLnByb2plY3QuUHJvamVjdDsKK2ltcG9ydCBjb20uaW50ZWxsaWoucHNpLio7CitpbXBvcnQgY29tLmludGVsbGlqLnJlZmFjdG9yaW5nLmludHJvZHVjZS5pbnBsYWNlLk9jY3VycmVuY2VzQ2hvb3NlcjsKK2ltcG9ydCBjb20uaW50ZWxsaWoucmVmYWN0b3JpbmcuaW50cm9kdWNlVmFyaWFibGUuSW5wdXRWYWxpZGF0b3I7CitpbXBvcnQgY29tLmludGVsbGlqLnJlZmFjdG9yaW5nLmludHJvZHVjZVZhcmlhYmxlLkludHJvZHVjZVZhcmlhYmxlQmFzZTsKK2ltcG9ydCBjb20uaW50ZWxsaWoucmVmYWN0b3JpbmcuaW50cm9kdWNlVmFyaWFibGUuSW50cm9kdWNlVmFyaWFibGVTZXR0aW5nczsKK2ltcG9ydCBjb20uaW50ZWxsaWoucmVmYWN0b3JpbmcudWkuVHlwZVNlbGVjdG9yTWFuYWdlckltcGw7CitpbXBvcnQgY29tLmludGVsbGlqLnV0aWwuY29udGFpbmVycy5NdWx0aU1hcDsKK2ltcG9ydCBqdW5pdC5mcmFtZXdvcmsuQXNzZXJ0OworaW1wb3J0IG9yZy5qZXRicmFpbnMuYW5ub3RhdGlvbnMuTm9uTmxzOworCisvKioKKyAqICBAYXV0aG9yIGRzbAorICovCitjbGFzcyBNb2NrSW50cm9kdWNlVmFyaWFibGVIYW5kbGVyIGV4dGVuZHMgSW50cm9kdWNlVmFyaWFibGVCYXNlIHsKKyAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgbXlOYW1lOworICBwcml2YXRlIGZpbmFsIGJvb2xlYW4gbXlSZXBsYWNlQWxsOworICBwcml2YXRlIGZpbmFsIGJvb2xlYW4gbXlEZWNsYXJlRmluYWw7CisgIHByaXZhdGUgZmluYWwgYm9vbGVhbiBteVJlcGxhY2VMVmFsdWVzOworICBwcml2YXRlIGZpbmFsIFN0cmluZyBteUV4cGVjdGVkVHlwZUNhbm9uaWNhbE5hbWU7CisgIHByaXZhdGUgZmluYWwgYm9vbGVhbiBteUxvb2tGb3JUeXBlOworCisgIHB1YmxpYyBNb2NrSW50cm9kdWNlVmFyaWFibGVIYW5kbGVyKEBOb25ObHMgZmluYWwgU3RyaW5nIG5hbWUsIGZpbmFsIGJvb2xlYW4gcmVwbGFjZUFsbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmluYWwgYm9vbGVhbiBkZWNsYXJlRmluYWwsIGZpbmFsIGJvb2xlYW4gcmVwbGFjZUxWYWx1ZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBOb25ObHMgZmluYWwgU3RyaW5nIGV4cGVjdGVkVHlwZUNhbm9uaWNhbE5hbWUpIHsKKworICAgIHRoaXMobmFtZSwgcmVwbGFjZUFsbCwgZGVjbGFyZUZpbmFsLCByZXBsYWNlTFZhbHVlcywgZXhwZWN0ZWRUeXBlQ2Fub25pY2FsTmFtZSwgZmFsc2UpOworICB9CisKKyAgcHVibGljIE1vY2tJbnRyb2R1Y2VWYXJpYWJsZUhhbmRsZXIoQE5vbk5scyBmaW5hbCBTdHJpbmcgbmFtZSwgZmluYWwgYm9vbGVhbiByZXBsYWNlQWxsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaW5hbCBib29sZWFuIGRlY2xhcmVGaW5hbCwgZmluYWwgYm9vbGVhbiByZXBsYWNlTFZhbHVlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQE5vbk5scyBmaW5hbCBTdHJpbmcgZXhwZWN0ZWRUeXBlQ2Fub25pY2FsTmFtZSwgYm9vbGVhbiBsb29rRm9yVHlwZSkgeworCisgICAgbXlOYW1lID0gbmFtZTsKKyAgICBteVJlcGxhY2VBbGwgPSByZXBsYWNlQWxsOworICAgIG15RGVjbGFyZUZpbmFsID0gZGVjbGFyZUZpbmFsOworICAgIG15UmVwbGFjZUxWYWx1ZXMgPSByZXBsYWNlTFZhbHVlczsKKyAgICBteUV4cGVjdGVkVHlwZUNhbm9uaWNhbE5hbWUgPSBleHBlY3RlZFR5cGVDYW5vbmljYWxOYW1lOworICAgIG15TG9va0ZvclR5cGUgPSBsb29rRm9yVHlwZTsKKyAgfQorCisgIEBPdmVycmlkZQorICBwdWJsaWMgSW50cm9kdWNlVmFyaWFibGVTZXR0aW5ncyBnZXRTZXR0aW5ncyhQcm9qZWN0IHByb2plY3QsIEVkaXRvciBlZGl0b3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBzaUV4cHJlc3Npb24gZXhwciwgZmluYWwgUHNpRXhwcmVzc2lvbltdIG9jY3VycmVuY2VzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUeXBlU2VsZWN0b3JNYW5hZ2VySW1wbCB0eXBlU2VsZWN0b3JNYW5hZ2VyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaW5hbCBib29sZWFuIGRlY2xhcmVGaW5hbElmQWxsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sZWFuIGFueUFzc2lnbm1lbnRMSFMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElucHV0VmFsaWRhdG9yIHZhbGlkYXRvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHNpRWxlbWVudCBhbmNob3IsIGZpbmFsIE9jY3VycmVuY2VzQ2hvb3Nlci5SZXBsYWNlQ2hvaWNlIHJlcGxhY2VDaG9pY2UpIHsKKyAgICBmaW5hbCBQc2lUeXBlIHR5cGUgPSBteUxvb2tGb3JUeXBlID8gZmluZFR5cGUodHlwZVNlbGVjdG9yTWFuYWdlci5nZXRUeXBlc0ZvckFsbCgpLCB0eXBlU2VsZWN0b3JNYW5hZ2VyLmdldERlZmF1bHRUeXBlKCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHR5cGVTZWxlY3Rvck1hbmFnZXIuZ2V0RGVmYXVsdFR5cGUoKTsKKyAgICBBc3NlcnQuYXNzZXJ0VHJ1ZSh0eXBlLmdldENhbm9uaWNhbFRleHQoKSwgdHlwZS5lcXVhbHNUb1RleHQobXlFeHBlY3RlZFR5cGVDYW5vbmljYWxOYW1lKSk7CisgICAgSW50cm9kdWNlVmFyaWFibGVTZXR0aW5ncyBpbnRyb2R1Y2VWYXJpYWJsZVNldHRpbmdzID0gbmV3IEludHJvZHVjZVZhcmlhYmxlU2V0dGluZ3MoKSB7CisgICAgICBAT3ZlcnJpZGUKKyAgICAgIHB1YmxpYyBTdHJpbmcgZ2V0RW50ZXJlZE5hbWUoKSB7CisgICAgICAgIHJldHVybiBteU5hbWU7CisgICAgICB9CisKKyAgICAgIEBPdmVycmlkZQorICAgICAgcHVibGljIGJvb2xlYW4gaXNSZXBsYWNlQWxsT2NjdXJyZW5jZXMoKSB7CisgICAgICAgIHJldHVybiBteVJlcGxhY2VBbGwgJiYgb2NjdXJyZW5jZXMubGVuZ3RoID4gMTsKKyAgICAgIH0KKworICAgICAgQE92ZXJyaWRlCisgICAgICBwdWJsaWMgYm9vbGVhbiBpc0RlY2xhcmVGaW5hbCgpIHsKKyAgICAgICAgcmV0dXJuIG15RGVjbGFyZUZpbmFsIHx8IGlzUmVwbGFjZUFsbE9jY3VycmVuY2VzKCkgJiYgZGVjbGFyZUZpbmFsSWZBbGw7CisgICAgICB9CisKKyAgICAgIEBPdmVycmlkZQorICAgICAgcHVibGljIGJvb2xlYW4gaXNSZXBsYWNlTFZhbHVlcygpIHsKKyAgICAgICAgcmV0dXJuIG15UmVwbGFjZUxWYWx1ZXM7CisgICAgICB9CisKKyAgICAgIEBPdmVycmlkZQorICAgICAgcHVibGljIFBzaVR5cGUgZ2V0U2VsZWN0ZWRUeXBlKCkgeworICAgICAgICByZXR1cm4gdHlwZTsKKyAgICAgIH0KKworICAgICAgQE92ZXJyaWRlCisgICAgICBwdWJsaWMgYm9vbGVhbiBpc09LKCkgeworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgIH0KKyAgICB9OworICAgIGZpbmFsIGJvb2xlYW4gdmFsaWRhdGlvblJlc3VsdCA9IHZhbGlkYXRvci5pc09LKGludHJvZHVjZVZhcmlhYmxlU2V0dGluZ3MpOworICAgIGFzc2VydFZhbGlkYXRpb25SZXN1bHQodmFsaWRhdGlvblJlc3VsdCk7CisgICAgcmV0dXJuIGludHJvZHVjZVZhcmlhYmxlU2V0dGluZ3M7CisgIH0KKworICBwcm90ZWN0ZWQgdm9pZCBhc3NlcnRWYWxpZGF0aW9uUmVzdWx0KGZpbmFsIGJvb2xlYW4gdmFsaWRhdGlvblJlc3VsdCkgeworICAgIEFzc2VydC5hc3NlcnRUcnVlKHZhbGlkYXRpb25SZXN1bHQpOworICB9CisKKyAgQE92ZXJyaWRlCisgIHByb3RlY3RlZCB2b2lkIHNob3dFcnJvck1lc3NhZ2UoUHJvamVjdCBwcm9qZWN0LCBFZGl0b3IgZWRpdG9yLCBTdHJpbmcgbWVzc2FnZSkgeworICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJFcnJvciBtZXNzYWdlOiIgKyBtZXNzYWdlKTsKKyAgfQorCisgIEBPdmVycmlkZQorICBwcm90ZWN0ZWQgYm9vbGVhbiByZXBvcnRDb25mbGljdHMoZmluYWwgTXVsdGlNYXA8UHNpRWxlbWVudCxTdHJpbmc+IGNvbmZsaWN0cywgZmluYWwgUHJvamVjdCBwcm9qZWN0LCBJbnRyb2R1Y2VWYXJpYWJsZVNldHRpbmdzIGRpYWxvZykgeworICAgIHJldHVybiBmYWxzZTsKKyAgfQorCisgIHByaXZhdGUgUHNpVHlwZSBmaW5kVHlwZShmaW5hbCBQc2lUeXBlW10gY2FuZGlkYXRlcywgUHNpVHlwZSBkZWZhdWx0VHlwZSkgeworICAgIGZvciAoUHNpVHlwZSBjYW5kaWRhdGUgOiBjYW5kaWRhdGVzKSB7CisgICAgICBpZiAoY2FuZGlkYXRlLmVxdWFsc1RvVGV4dChteUV4cGVjdGVkVHlwZUNhbm9uaWNhbE5hbWUpKSByZXR1cm4gY2FuZGlkYXRlOworICAgIH0KKyAgICByZXR1cm4gZGVmYXVsdFR5cGU7CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9yZWZhY3RvcmluZy9Nb2NrTG9jYWxUb0ZpZWxkSGFuZGxlci5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL3JlZmFjdG9yaW5nL01vY2tMb2NhbFRvRmllbGRIYW5kbGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjJkNzZjZAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9yZWZhY3RvcmluZy9Nb2NrTG9jYWxUb0ZpZWxkSGFuZGxlci5qYXZhCkBAIC0wLDAgKzEsMjcgQEAKK3BhY2thZ2UgY29tLmludGVsbGlqLnJlZmFjdG9yaW5nOworCitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkucHJvamVjdC5Qcm9qZWN0OworaW1wb3J0IGNvbS5pbnRlbGxpai5wc2kuUHNpQ2xhc3M7CitpbXBvcnQgY29tLmludGVsbGlqLnBzaS5Qc2lFeHByZXNzaW9uOworaW1wb3J0IGNvbS5pbnRlbGxpai5wc2kuUHNpTG9jYWxWYXJpYWJsZTsKK2ltcG9ydCBjb20uaW50ZWxsaWoucHNpLlBzaU1vZGlmaWVyOworaW1wb3J0IGNvbS5pbnRlbGxpai5yZWZhY3RvcmluZy5pbnRyb2R1Y2VGaWVsZC5CYXNlRXhwcmVzc2lvblRvRmllbGRIYW5kbGVyOworaW1wb3J0IGNvbS5pbnRlbGxpai5yZWZhY3RvcmluZy5pbnRyb2R1Y2VGaWVsZC5Mb2NhbFRvRmllbGRIYW5kbGVyOworCisvKioKKyAqIEBhdXRob3IgdmVuCisgKi8KK3B1YmxpYyBjbGFzcyBNb2NrTG9jYWxUb0ZpZWxkSGFuZGxlciBleHRlbmRzIExvY2FsVG9GaWVsZEhhbmRsZXIgeworICBwcml2YXRlIGZpbmFsIGJvb2xlYW4gbXlNYWtlRW51bUNvbnN0YW50OworICBwdWJsaWMgTW9ja0xvY2FsVG9GaWVsZEhhbmRsZXIoUHJvamVjdCBwcm9qZWN0LCBib29sZWFuIGlzQ29uc3RhbnQsIGZpbmFsIGJvb2xlYW4gbWFrZUVudW1Db25zdGFudCkgeworICAgIHN1cGVyKHByb2plY3QsIGlzQ29uc3RhbnQpOworICAgIG15TWFrZUVudW1Db25zdGFudCA9IG1ha2VFbnVtQ29uc3RhbnQ7CisgIH0KKworICBAT3ZlcnJpZGUKKyAgcHJvdGVjdGVkIEJhc2VFeHByZXNzaW9uVG9GaWVsZEhhbmRsZXIuU2V0dGluZ3Mgc2hvd1JlZmFjdG9yaW5nRGlhbG9nKFBzaUNsYXNzIGFDbGFzcywgUHNpTG9jYWxWYXJpYWJsZSBsb2NhbCwgUHNpRXhwcmVzc2lvbltdIG9jY3VyZW5jZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sZWFuIGlzU3RhdGljKSB7CisgICAgcmV0dXJuIG5ldyBCYXNlRXhwcmVzc2lvblRvRmllbGRIYW5kbGVyLlNldHRpbmdzKCJ4eHgiLCBudWxsLCBvY2N1cmVuY2VzLCB0cnVlLCBpc1N0YXRpYywgdHJ1ZSwgQmFzZUV4cHJlc3Npb25Ub0ZpZWxkSGFuZGxlci5Jbml0aWFsaXphdGlvblBsYWNlLklOX0ZJRUxEX0RFQ0xBUkFUSU9OLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQc2lNb2RpZmllci5QUklWQVRFLCBsb2NhbCwgbG9jYWwuZ2V0VHlwZSgpLCBmYWxzZSwgYUNsYXNzLCB0cnVlLCBteU1ha2VFbnVtQ29uc3RhbnQpOworICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovcmVmYWN0b3JpbmcvTW92ZUNsYXNzQW5kRmlsZVRlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9yZWZhY3RvcmluZy9Nb3ZlQ2xhc3NBbmRGaWxlVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI5MWE2ZTEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovcmVmYWN0b3JpbmcvTW92ZUNsYXNzQW5kRmlsZVRlc3QuamF2YQpAQCAtMCwwICsxLDg1IEBACisvKgorICogQ29weXJpZ2h0IDIwMDAtMjAxMiBKZXRCcmFpbnMgcy5yLm8uCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworcGFja2FnZSBjb20uaW50ZWxsaWoucmVmYWN0b3Jpbmc7CisKKy8qKgorICogVXNlcjogYW5uYQorICogRGF0ZTogQXVnIDMxLCAyMDEwCisgKi8KKworaW1wb3J0IGNvbS5pbnRlbGxpai5KYXZhVGVzdFV0aWw7CitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkuZmlsZUVkaXRvci5GaWxlRG9jdW1lbnRNYW5hZ2VyOworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLnByb2plY3RSb290cy5pbXBsLkphdmFTZGtJbXBsOworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLnZmcy5Mb2NhbEZpbGVTeXN0ZW07CitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkudmZzLlZpcnR1YWxGaWxlOworaW1wb3J0IGNvbS5pbnRlbGxpai5wc2kuKjsKK2ltcG9ydCBjb20uaW50ZWxsaWoucHNpLmltcGwuc291cmNlLlBvc3Rwcm9jZXNzUmVmb3JtYXR0aW5nQXNwZWN0OworaW1wb3J0IGNvbS5pbnRlbGxpai5wc2kuc2VhcmNoLkdsb2JhbFNlYXJjaFNjb3BlOworaW1wb3J0IGNvbS5pbnRlbGxpai5yZWZhY3RvcmluZy5tb3ZlLm1vdmVGaWxlc09yRGlyZWN0b3JpZXMuSmF2YU1vdmVGaWxlc09yRGlyZWN0b3JpZXNIYW5kbGVyOworaW1wb3J0IGNvbS5pbnRlbGxpai50ZXN0RnJhbWV3b3JrLklkZWFUZXN0VXRpbDsKK2ltcG9ydCBjb20uaW50ZWxsaWoudGVzdEZyYW1ld29yay5Qc2lUZXN0VXRpbDsKKworaW1wb3J0IGphdmEuaW8uRmlsZTsKKworcHVibGljIGNsYXNzIE1vdmVDbGFzc0FuZEZpbGVUZXN0IGV4dGVuZHMgUmVmYWN0b3JpbmdUZXN0Q2FzZSB7CisKKyAgcHVibGljIHZvaWQgdGVzdEFsbENsYXNzZXNJbkZpbGUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoImFsbENsYXNzZXNJbkZpbGUiLCAidCIsICJ0eHQybW92ZS50eHQiLCAicy5NeUNsYXNzIiwgInMuTXlPbmVNb3JlQ2xhc3MiKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RPbmx5UGFja2FnZUxvY2FsQ2xhc3MoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoIm9ubHlQYWNrYWdlTG9jYWxDbGFzcyIsICJ0IiwgInR4dDJtb3ZlLnR4dCIsICJzLk15TG9jYWwiKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RMZWF2ZVBhY2thZ2VMb2NhbENsYXNzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KCJsZWF2ZVBhY2thZ2VMb2NhbENsYXNzIiwgInQiLCAidHh0Mm1vdmUudHh0IiwgInMuTXlDbGFzcyIpOworICB9CisKKyAgcHJpdmF0ZSB2b2lkIGRvVGVzdChTdHJpbmcgdGVzdE5hbWUsIFN0cmluZyBuZXdQYWNrYWdlTmFtZSwgU3RyaW5nIGZpbGVOYW1lTmVhckZpcnN0Q2xhc3MsIFN0cmluZy4uLiBjbGFzc05hbWVzKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBTdHJpbmcgcm9vdCA9IEphdmFUZXN0VXRpbC5nZXRKYXZhVGVzdERhdGFQYXRoKCkgKyAiL3JlZmFjdG9yaW5nL21vdmVDbGFzc0FuZEZpbGUvIiArIHRlc3ROYW1lOworCisgICAgU3RyaW5nIHJvb3RCZWZvcmUgPSByb290ICsgIi9iZWZvcmUiOworICAgIFBzaVRlc3RVdGlsLnJlbW92ZUFsbFJvb3RzKG15TW9kdWxlLCBJZGVhVGVzdFV0aWwuZ2V0TW9ja0pkazE3KCkpOworICAgIFZpcnR1YWxGaWxlIHJvb3REaXIgPSBQc2lUZXN0VXRpbC5jcmVhdGVUZXN0UHJvamVjdFN0cnVjdHVyZShteVByb2plY3QsIG15TW9kdWxlLCByb290QmVmb3JlLCBteUZpbGVzVG9EZWxldGUpOworCisgICAgcGVyZm9ybUFjdGlvbihuZXdQYWNrYWdlTmFtZSwgZmlsZU5hbWVOZWFyRmlyc3RDbGFzcywgY2xhc3NOYW1lcyk7CisKKyAgICBTdHJpbmcgcm9vdEFmdGVyID0gcm9vdCArICIvYWZ0ZXIiOworICAgIFZpcnR1YWxGaWxlIHJvb3REaXIyID0gTG9jYWxGaWxlU3lzdGVtLmdldEluc3RhbmNlKCkuZmluZEZpbGVCeVBhdGgocm9vdEFmdGVyLnJlcGxhY2UoRmlsZS5zZXBhcmF0b3JDaGFyLCAnLycpKTsKKyAgICBteVByb2plY3QuZ2V0Q29tcG9uZW50KFBvc3Rwcm9jZXNzUmVmb3JtYXR0aW5nQXNwZWN0LmNsYXNzKS5kb1Bvc3Rwb25lZEZvcm1hdHRpbmcoKTsKKyAgICBJZGVhVGVzdFV0aWwuYXNzZXJ0RGlyZWN0b3JpZXNFcXVhbChyb290RGlyMiwgcm9vdERpciwgSWRlYVRlc3RVdGlsLkNWU19GSUxFX0ZJTFRFUik7CisgIH0KKworICBwcml2YXRlIHZvaWQgcGVyZm9ybUFjdGlvbihTdHJpbmcgbmV3UGFja2FnZU5hbWUsIFN0cmluZyBmaWxlTmFtZSwgU3RyaW5nLi4uIGNsYXNzTmFtZXMpIHRocm93cyBFeGNlcHRpb257CisgICAgZmluYWwgUHNpRWxlbWVudFtdIGVsZW1lbnRzID0gbmV3IFBzaUVsZW1lbnRbY2xhc3NOYW1lcy5sZW5ndGggKyAxXTsKKyAgICBmb3IoaW50IGkgPSAwOyBpIDwgY2xhc3NOYW1lcy5sZW5ndGg7IGkrKyl7CisgICAgICBTdHJpbmcgY2xhc3NOYW1lID0gY2xhc3NOYW1lc1tpXTsKKyAgICAgIGVsZW1lbnRzW2ldID0gbXlKYXZhRmFjYWRlLmZpbmRDbGFzcyhjbGFzc05hbWUsIEdsb2JhbFNlYXJjaFNjb3BlLnByb2plY3RTY29wZShnZXRQcm9qZWN0KCkpKTsKKyAgICAgIGFzc2VydE5vdE51bGwoIkNsYXNzICIgKyBjbGFzc05hbWUgKyAiIG5vdCBmb3VuZCIsIGVsZW1lbnRzW2ldKTsKKyAgICB9CisgICAgZWxlbWVudHNbY2xhc3NOYW1lcy5sZW5ndGhdID0gZWxlbWVudHNbMF0uZ2V0Q29udGFpbmluZ0ZpbGUoKS5nZXRDb250YWluaW5nRGlyZWN0b3J5KCkuZmluZEZpbGUoZmlsZU5hbWUpOworCisgICAgUHNpUGFja2FnZSBhUGFja2FnZSA9IEphdmFQc2lGYWNhZGUuZ2V0SW5zdGFuY2UobXlQc2lNYW5hZ2VyLmdldFByb2plY3QoKSkuZmluZFBhY2thZ2UobmV3UGFja2FnZU5hbWUpOworICAgIGFzc2VydE5vdE51bGwoIlBhY2thZ2UgIiArIG5ld1BhY2thZ2VOYW1lICsgIiBub3QgZm91bmQiLCBhUGFja2FnZSk7CisgICAgZmluYWwgUHNpRGlyZWN0b3J5W10gZGlycyA9IGFQYWNrYWdlLmdldERpcmVjdG9yaWVzKCk7CisgICAgYXNzZXJ0RXF1YWxzKGRpcnMubGVuZ3RoLCAxKTsKKworICAgIG5ldyBKYXZhTW92ZUZpbGVzT3JEaXJlY3Rvcmllc0hhbmRsZXIoKS5kb01vdmUoZ2V0UHJvamVjdCgpLCBlbGVtZW50cywgZGlyc1swXSwgbnVsbCk7CisgICAgUHNpRG9jdW1lbnRNYW5hZ2VyLmdldEluc3RhbmNlKG15UHJvamVjdCkuY29tbWl0QWxsRG9jdW1lbnRzKCk7CisgICAgRmlsZURvY3VtZW50TWFuYWdlci5nZXRJbnN0YW5jZSgpLnNhdmVBbGxEb2N1bWVudHMoKTsKKyAgfQorfQorCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovcmVmYWN0b3JpbmcvTW92ZUNsYXNzVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL3JlZmFjdG9yaW5nL01vdmVDbGFzc1Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YzRhNDk4Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL3JlZmFjdG9yaW5nL01vdmVDbGFzc1Rlc3QuamF2YQpAQCAtMCwwICsxLDEyOSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDAwLTIwMTIgSmV0QnJhaW5zIHMuci5vLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KK3BhY2thZ2UgY29tLmludGVsbGlqLnJlZmFjdG9yaW5nOworCitpbXBvcnQgY29tLmludGVsbGlqLkphdmFUZXN0VXRpbDsKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS5maWxlRWRpdG9yLkZpbGVEb2N1bWVudE1hbmFnZXI7CitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkucHJvamVjdFJvb3RzLmltcGwuSmF2YVNka0ltcGw7CitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkudmZzLkxvY2FsRmlsZVN5c3RlbTsKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS52ZnMuVmlydHVhbEZpbGU7CitpbXBvcnQgY29tLmludGVsbGlqLnBzaS4qOworaW1wb3J0IGNvbS5pbnRlbGxpai5wc2kuaW1wbC5zb3VyY2UuUG9zdHByb2Nlc3NSZWZvcm1hdHRpbmdBc3BlY3Q7CitpbXBvcnQgY29tLmludGVsbGlqLnBzaS5zZWFyY2guR2xvYmFsU2VhcmNoU2NvcGU7CitpbXBvcnQgY29tLmludGVsbGlqLnJlZmFjdG9yaW5nLm1vdmUubW92ZUNsYXNzZXNPclBhY2thZ2VzLk1vdmVDbGFzc2VzT3JQYWNrYWdlc1Byb2Nlc3NvcjsKK2ltcG9ydCBjb20uaW50ZWxsaWoucmVmYWN0b3JpbmcubW92ZS5tb3ZlQ2xhc3Nlc09yUGFja2FnZXMuU2luZ2xlU291cmNlUm9vdE1vdmVEZXN0aW5hdGlvbjsKK2ltcG9ydCBjb20uaW50ZWxsaWoudGVzdEZyYW1ld29yay5JZGVhVGVzdFV0aWw7CitpbXBvcnQgY29tLmludGVsbGlqLnRlc3RGcmFtZXdvcmsuUGxhdGZvcm1UZXN0VXRpbDsKK2ltcG9ydCBjb20uaW50ZWxsaWoudGVzdEZyYW1ld29yay5Qc2lUZXN0VXRpbDsKK2ltcG9ydCBvcmcuamV0YnJhaW5zLmFubm90YXRpb25zLk5vbk5sczsKKworaW1wb3J0IGphdmEuaW8uRmlsZTsKKworcHVibGljIGNsYXNzIE1vdmVDbGFzc1Rlc3QgZXh0ZW5kcyBSZWZhY3RvcmluZ1Rlc3RDYXNlIHsKKyAgcHVibGljIHZvaWQgdGVzdENvbnRleHRDaGFuZ2UoKSB0aHJvd3MgRXhjZXB0aW9ueworICAgIGRvVGVzdCgiY29udGV4dENoYW5nZTEiLCBuZXcgU3RyaW5nW117InBhY2sxLkNsYXNzMSJ9LCAicGFjazIiKTsKKyAgICBkb1Rlc3QoImNvbnRleHRDaGFuZ2UyIiwgbmV3IFN0cmluZ1tdeyJwYWNrMS5DbGFzczEifSwgInBhY2syIik7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0TW92ZU11bHRpcGxlKCkgdGhyb3dzIEV4Y2VwdGlvbnsKKyAgICBkb1Rlc3QoIm1vdmVNdWx0aXBsZTEiLCBuZXcgU3RyaW5nW117InBhY2sxLkNsYXNzMSIsICJwYWNrMS5DbGFzczIifSwgInBhY2syIik7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0U2Vjb25kYXJ5Q2xhc3MoKSB0aHJvd3MgRXhjZXB0aW9ueworICAgIGRvVGVzdCgic2Vjb25kYXJ5Q2xhc3MiLCBuZXcgU3RyaW5nW117InBhY2sxLkNsYXNzMiJ9LCAicGFjazEiKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RTdHJpbmdzQW5kQ29tbWVudHMoKSB0aHJvd3MgRXhjZXB0aW9ueworICAgIGRvVGVzdCgic3RyaW5nc0FuZENvbW1lbnRzIiwgbmV3IFN0cmluZ1tdeyJwYWNrMS5DbGFzczEifSwgInBhY2syIik7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0U3RyaW5nc0FuZENvbW1lbnRzMigpIHRocm93cyBFeGNlcHRpb257CisgICAgZG9UZXN0KCJzdHJpbmdzQW5kQ29tbWVudHMyIiwgbmV3IFN0cmluZ1tdeyJwYWNrMS5BQ2xhc3MifSwgInBhY2syIik7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0Tm9uSmF2YSgpIHRocm93cyBFeGNlcHRpb257CisgICAgZG9UZXN0KCJub25KYXZhIiwgbmV3IFN0cmluZ1tdeyJwYWNrMS5DbGFzczEifSwgInBhY2syIik7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0UmVmSW5Qcm9wZXJ0aWVzRmlsZSgpIHRocm93cyBFeGNlcHRpb257CisgICAgZG9UZXN0KCJyZWZJblByb3BlcnRpZXNGaWxlIiwgbmV3IFN0cmluZ1tdeyJwMS5NeUNsYXNzIn0sICJwIik7CisgIH0KKworICAvKiBJTVBMRU1FTlQ6IGdldFJlZmVyZW5jZXMoKSBpbiBKc3BBdHRyaWJ1dGVWYWx1ZUltcGwgc2hvdWxkIGJlIGRlYWxlZCB3aXRoIChzb2Z0IHJlZnM/KQorCisgIHB1YmxpYyB2b2lkIHRlc3RKc3AoKSB0aHJvd3MgRXhjZXB0aW9ueworICAgIGRvVGVzdCgianNwIiwgbmV3IFN0cmluZ1tdeyJwYWNrMS5UZXN0Q2xhc3MifSwgInBhY2syIik7CisgIH0KKyAgKi8KKworICBwdWJsaWMgdm9pZCB0ZXN0TG9jYWxDbGFzcygpIHRocm93cyBFeGNlcHRpb257CisgICAgZG9UZXN0KCJsb2NhbENsYXNzIiwgbmV3IFN0cmluZ1tdeyJwYWNrMS5BIn0sICJwYWNrMiIpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdENsYXNzQW5kU2Vjb25kYXJ5KCkgdGhyb3dzIEV4Y2VwdGlvbnsKKyAgICB0cnkgeworICAgICAgZG9UZXN0KCJjbGFzc0FuZFNlY29uZGFyeSIsIG5ldyBTdHJpbmdbXXsicGFjazEuQ2xhc3MxIiwgInBhY2sxLkNsYXNzMiJ9LCAicGFjazIiKTsKKyAgICAgIGZhaWwoIkNvbmZsaWN0cyBleHBlY3RlZCIpOworICAgIH0KKyAgICBjYXRjaCAoQmFzZVJlZmFjdG9yaW5nUHJvY2Vzc29yLkNvbmZsaWN0c0luVGVzdHNFeGNlcHRpb24gZSkgeworICAgICAgYXNzZXJ0RXF1YWxzKCJBIHBhY2thZ2UtbG9jYWwgY2xhc3MgPGI+PGNvZGU+Q2xhc3MyPC9jb2RlPjwvYj4gd2lsbCBubyBsb25nZXIgYmUgYWNjZXNzaWJsZSBmcm9tIGZpZWxkIDxiPjxjb2RlPlVzZXIuY2xhc3MyPC9jb2RlPjwvYj4iLCBlLmdldE1lc3NhZ2UoKSk7CisgICAgfQorICB9CisKKyAgcHVibGljIHZvaWQgdGVzdElkZWFkZXYyNzk5NigpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdCgiaWRlYWRldjI3OTk2IiwgbmV3IFN0cmluZ1tdIHsgInBhY2sxLlgiIH0sICJwYWNrMiIpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFVudXNlZEltcG9ydCgpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdCgidW51c2VkSW1wb3J0IiwgbmV3IFN0cmluZ1tdeyJwMi5GMiJ9LCAicDEiKTsKKyAgfQorCisgIHByaXZhdGUgdm9pZCBkb1Rlc3QoQE5vbk5scyBTdHJpbmcgdGVzdE5hbWUsIEBOb25ObHMgU3RyaW5nW10gY2xhc3NOYW1lcywgQE5vbk5scyBTdHJpbmcgbmV3UGFja2FnZU5hbWUpIHRocm93cyBFeGNlcHRpb257CisgICAgU3RyaW5nIHJvb3QgPSBKYXZhVGVzdFV0aWwuZ2V0SmF2YVRlc3REYXRhUGF0aCgpICsgIi9yZWZhY3RvcmluZy9tb3ZlQ2xhc3MvIiArIHRlc3ROYW1lOworCisgICAgU3RyaW5nIHJvb3RCZWZvcmUgPSByb290ICsgIi9iZWZvcmUiOworICAgIFBzaVRlc3RVdGlsLnJlbW92ZUFsbFJvb3RzKG15TW9kdWxlLCBJZGVhVGVzdFV0aWwuZ2V0TW9ja0pkazE3KCkpOworICAgIFZpcnR1YWxGaWxlIHJvb3REaXIgPSBQc2lUZXN0VXRpbC5jcmVhdGVUZXN0UHJvamVjdFN0cnVjdHVyZShteVByb2plY3QsIG15TW9kdWxlLCByb290QmVmb3JlLCBteUZpbGVzVG9EZWxldGUpOworCisgICAgcGVyZm9ybUFjdGlvbihjbGFzc05hbWVzLCBuZXdQYWNrYWdlTmFtZSk7CisKKyAgICBTdHJpbmcgcm9vdEFmdGVyID0gcm9vdCArICIvYWZ0ZXIiOworICAgIFZpcnR1YWxGaWxlIHJvb3REaXIyID0gTG9jYWxGaWxlU3lzdGVtLmdldEluc3RhbmNlKCkuZmluZEZpbGVCeVBhdGgocm9vdEFmdGVyLnJlcGxhY2UoRmlsZS5zZXBhcmF0b3JDaGFyLCAnLycpKTsKKyAgICBteVByb2plY3QuZ2V0Q29tcG9uZW50KFBvc3Rwcm9jZXNzUmVmb3JtYXR0aW5nQXNwZWN0LmNsYXNzKS5kb1Bvc3Rwb25lZEZvcm1hdHRpbmcoKTsKKyAgICBQbGF0Zm9ybVRlc3RVdGlsLmFzc2VydERpcmVjdG9yaWVzRXF1YWwocm9vdERpcjIsIHJvb3REaXIsIFBsYXRmb3JtVGVzdFV0aWwuQ1ZTX0ZJTEVfRklMVEVSKTsKKyAgfQorCisgIHByaXZhdGUgdm9pZCBwZXJmb3JtQWN0aW9uKFN0cmluZ1tdIGNsYXNzTmFtZXMsIFN0cmluZyBuZXdQYWNrYWdlTmFtZSkgdGhyb3dzIEV4Y2VwdGlvbnsKKyAgICBmaW5hbCBQc2lDbGFzc1tdIGNsYXNzZXMgPSBuZXcgUHNpQ2xhc3NbY2xhc3NOYW1lcy5sZW5ndGhdOworICAgIGZvcihpbnQgaSA9IDA7IGkgPCBjbGFzc2VzLmxlbmd0aDsgaSsrKXsKKyAgICAgIFN0cmluZyBjbGFzc05hbWUgPSBjbGFzc05hbWVzW2ldOworICAgICAgY2xhc3Nlc1tpXSA9IG15SmF2YUZhY2FkZS5maW5kQ2xhc3MoY2xhc3NOYW1lLCBHbG9iYWxTZWFyY2hTY29wZS5wcm9qZWN0U2NvcGUoZ2V0UHJvamVjdCgpKSk7CisgICAgICBhc3NlcnROb3ROdWxsKCJDbGFzcyAiICsgY2xhc3NOYW1lICsgIiBub3QgZm91bmQiLCBjbGFzc2VzW2ldKTsKKyAgICB9CisKKyAgICBQc2lQYWNrYWdlIGFQYWNrYWdlID0gSmF2YVBzaUZhY2FkZS5nZXRJbnN0YW5jZShteVBzaU1hbmFnZXIuZ2V0UHJvamVjdCgpKS5maW5kUGFja2FnZShuZXdQYWNrYWdlTmFtZSk7CisgICAgYXNzZXJ0Tm90TnVsbCgiUGFja2FnZSAiICsgbmV3UGFja2FnZU5hbWUgKyAiIG5vdCBmb3VuZCIsIGFQYWNrYWdlKTsKKyAgICBmaW5hbCBQc2lEaXJlY3RvcnlbXSBkaXJzID0gYVBhY2thZ2UuZ2V0RGlyZWN0b3JpZXMoKTsKKyAgICBhc3NlcnRFcXVhbHMoZGlycy5sZW5ndGgsIDEpOworCisgICAgbmV3IE1vdmVDbGFzc2VzT3JQYWNrYWdlc1Byb2Nlc3NvcihteVByb2plY3QsIGNsYXNzZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgU2luZ2xlU291cmNlUm9vdE1vdmVEZXN0aW5hdGlvbihQYWNrYWdlV3JhcHBlci5jcmVhdGUoSmF2YURpcmVjdG9yeVNlcnZpY2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmdldEluc3RhbmNlKCkuZ2V0UGFja2FnZShkaXJzWzBdKSksIGRpcnNbMF0pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ1ZSwgdHJ1ZSwgbnVsbCkucnVuKCk7CisgICAgUHNpRG9jdW1lbnRNYW5hZ2VyLmdldEluc3RhbmNlKG15UHJvamVjdCkuY29tbWl0QWxsRG9jdW1lbnRzKCk7CisgICAgRmlsZURvY3VtZW50TWFuYWdlci5nZXRJbnN0YW5jZSgpLnNhdmVBbGxEb2N1bWVudHMoKTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL3JlZmFjdG9yaW5nL01vdmVDbGFzc1RvSW5uZXJUZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovcmVmYWN0b3JpbmcvTW92ZUNsYXNzVG9Jbm5lclRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YTdjYWMxCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL3JlZmFjdG9yaW5nL01vdmVDbGFzc1RvSW5uZXJUZXN0LmphdmEKQEAgLTAsMCArMSwxNzAgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwMC0yMDEyIEpldEJyYWlucyBzLnIuby4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCitwYWNrYWdlIGNvbS5pbnRlbGxpai5yZWZhY3RvcmluZzsKKworaW1wb3J0IGNvbS5pbnRlbGxpai5KYXZhVGVzdFV0aWw7CitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkuZmlsZUVkaXRvci5GaWxlRG9jdW1lbnRNYW5hZ2VyOworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLnByb2plY3RSb290cy5pbXBsLkphdmFTZGtJbXBsOworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLnZmcy5Mb2NhbEZpbGVTeXN0ZW07CitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkudmZzLlZpcnR1YWxGaWxlOworaW1wb3J0IGNvbS5pbnRlbGxpai5wc2kuUHNpQ2xhc3M7CitpbXBvcnQgY29tLmludGVsbGlqLnBzaS5Qc2lEb2N1bWVudE1hbmFnZXI7CitpbXBvcnQgY29tLmludGVsbGlqLnBzaS5Qc2lFbGVtZW50OworaW1wb3J0IGNvbS5pbnRlbGxpai5wc2kuY29kZVN0eWxlLkNvZGVTdHlsZVNldHRpbmdzTWFuYWdlcjsKK2ltcG9ydCBjb20uaW50ZWxsaWoucHNpLmltcGwuc291cmNlLlBvc3Rwcm9jZXNzUmVmb3JtYXR0aW5nQXNwZWN0OworaW1wb3J0IGNvbS5pbnRlbGxpai5wc2kuc2VhcmNoLlByb2plY3RTY29wZTsKK2ltcG9ydCBjb20uaW50ZWxsaWoucmVmYWN0b3JpbmcubW92ZS5tb3ZlQ2xhc3Nlc09yUGFja2FnZXMuTW92ZUNsYXNzVG9Jbm5lclByb2Nlc3NvcjsKK2ltcG9ydCBjb20uaW50ZWxsaWoudGVzdEZyYW1ld29yay5JZGVhVGVzdFV0aWw7CitpbXBvcnQgY29tLmludGVsbGlqLnRlc3RGcmFtZXdvcmsuUHNpVGVzdFV0aWw7CitpbXBvcnQgY29tLmludGVsbGlqLnVzYWdlVmlldy5Vc2FnZUluZm87CitpbXBvcnQgY29tLmludGVsbGlqLnV0aWwuY29udGFpbmVycy5NdWx0aU1hcDsKKworaW1wb3J0IGphdmEuaW8uRmlsZTsKKworLyoqCisgKiBAYXV0aG9yIHlvbGUKKyAqLworcHVibGljIGNsYXNzIE1vdmVDbGFzc1RvSW5uZXJUZXN0IGV4dGVuZHMgUmVmYWN0b3JpbmdUZXN0Q2FzZSB7CisgIHB1YmxpYyB2b2lkIHRlc3RDb250ZXh0Q2hhbmdlMSgpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdChuZXcgU3RyaW5nW10geyAicGFjazEuQ2xhc3MxIiB9LCAicGFjazIuQSIpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdENvbnRleHRDaGFuZ2UyKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KG5ldyBTdHJpbmdbXSB7ICJwYWNrMS5DbGFzczEiIH0sICJwYWNrMi5BIik7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0SW5uZXJJbXBvcnQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QobmV3IFN0cmluZ1tdIHsgInBhY2sxLkNsYXNzMSIgfSwgInBhY2syLkEiKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RJbnNlcnRJbm5lckNsYXNzSW1wb3J0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZmluYWwgYm9vbGVhbiBpbXBvcnRzID0gQ29kZVN0eWxlU2V0dGluZ3NNYW5hZ2VyLmdldFNldHRpbmdzKG15UHJvamVjdCkuSU5TRVJUX0lOTkVSX0NMQVNTX0lNUE9SVFM7CisgICAgdHJ5IHsKKyAgICAgIENvZGVTdHlsZVNldHRpbmdzTWFuYWdlci5nZXRTZXR0aW5ncyhteVByb2plY3QpLklOU0VSVF9JTk5FUl9DTEFTU19JTVBPUlRTID0gdHJ1ZTsKKyAgICAgIGRvVGVzdChuZXcgU3RyaW5nW10geyAicGFjazEuQ2xhc3MxIiB9LCAicGFjazIuQSIpOworICAgIH0KKyAgICBmaW5hbGx5IHsKKyAgICAgIENvZGVTdHlsZVNldHRpbmdzTWFuYWdlci5nZXRTZXR0aW5ncyhteVByb2plY3QpLklOU0VSVF9JTk5FUl9DTEFTU19JTVBPUlRTID0gaW1wb3J0czsKKyAgICB9CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0U2ltdWx0YW5lb3VzTW92ZSgpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdChuZXcgU3RyaW5nW10geyAicGFjazEuQ2xhc3MxIiwgInBhY2swLkNsYXNzMCIgfSwgInBhY2syLkEiKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RNb3ZlTXVsdGlwbGUxKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KG5ldyBTdHJpbmdbXSB7ICJwYWNrMS5DbGFzczEiLCAicGFjazEuQ2xhc3MyIiB9LCAicGFjazIuQSIpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFJlZlRvSW5uZXIoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QobmV3IFN0cmluZ1tdIHsgInBhY2sxLkNsYXNzMSIgfSwgInBhY2syLkEiKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RSZWZUb0NvbnN0cnVjdG9yKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KG5ldyBTdHJpbmdbXSB7ICJwYWNrMS5DbGFzczEiIH0sICJwYWNrMi5BIik7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0U2Vjb25kYXJ5Q2xhc3MoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QobmV3IFN0cmluZ1tdIHsgInBhY2sxLkNsYXNzMiIgfSwgInBhY2sxLlVzZXIiKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RTdHJpbmdzQW5kQ29tbWVudHMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QobmV3IFN0cmluZ1tdIHsgInBhY2sxLkNsYXNzMSIgfSwgInBhY2sxLkEiKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RTdHJpbmdzQW5kQ29tbWVudHMyKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KG5ldyBTdHJpbmdbXSB7ICJwYWNrMS5DbGFzczEiIH0sICJwYWNrMS5BIik7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0Tm9uSmF2YSgpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdChuZXcgU3RyaW5nW10geyAicGFjazEuQ2xhc3MxIiB9LCAicGFjazEuQSIpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdExvY2FsbHlVc2VkUGFja2FnZUxvY2FsVG9QdWJsaWNJbnRlcmZhY2UoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QobmV3IFN0cmluZ1tdeyJwYWNrMS5DbGFzczEifSwgInBhY2syLkEiKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RQYWNrYWdlTG9jYWxDbGFzcygpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdENvbmZsaWN0cygicGFjazEuQ2xhc3MxIiwgInBhY2syLkEiLCAiRmllbGQgPGI+PGNvZGU+Q2xhc3MxLmMyPC9jb2RlPjwvYj4gdXNlcyBhIHBhY2thZ2UtbG9jYWwgY2xhc3MgPGI+PGNvZGU+cGFjazEuQ2xhc3MyPC9jb2RlPjwvYj4uIik7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0TW92ZUludG9QYWNrYWdlTG9jYWxDbGFzcygpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdENvbmZsaWN0cygicGFjazEuQ2xhc3MxIiwgInBhY2syLkEiLCAiQ2xhc3MgPGI+PGNvZGU+Q2xhc3MxPC9jb2RlPjwvYj4gd2lsbCBubyBsb25nZXIgYmUgYWNjZXNzaWJsZSBmcm9tIGZpZWxkIDxiPjxjb2RlPkNsYXNzMi5jMTwvY29kZT48L2I+Iik7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0TW92ZU9mUGFja2FnZUxvY2FsQ2xhc3MoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3RDb25mbGljdHMoInBhY2sxLkNsYXNzMSIsICJwYWNrMi5BIiwgIkNsYXNzIDxiPjxjb2RlPkNsYXNzMTwvY29kZT48L2I+IHdpbGwgbm8gbG9uZ2VyIGJlIGFjY2Vzc2libGUgZnJvbSBmaWVsZCA8Yj48Y29kZT5DbGFzczIuYzE8L2NvZGU+PC9iPiIpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdE1vdmVJbnRvUHJpdmF0ZUlubmVyQ2xhc3MoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3RDb25mbGljdHMoInBhY2sxLkNsYXNzMSIsICJwYWNrMS5BLlByaXZhdGVJbm5lciIsICJDbGFzcyA8Yj48Y29kZT5DbGFzczE8L2NvZGU+PC9iPiB3aWxsIG5vIGxvbmdlciBiZSBhY2Nlc3NpYmxlIGZyb20gZmllbGQgPGI+PGNvZGU+Q2xhc3MyLmMxPC9jb2RlPjwvYj4iKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RNb3ZlV2l0aFBhY2thZ2VMb2NhbE1lbWJlcigpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdENvbmZsaWN0cygicGFjazEuQ2xhc3MxIiwgInBhY2syLkEiLCAiTWV0aG9kIDxiPjxjb2RlPkNsYXNzMS5kb1N0dWZmKCk8L2NvZGU+PC9iPiB3aWxsIG5vIGxvbmdlciBiZSBhY2Nlc3NpYmxlIGZyb20gbWV0aG9kIDxiPjxjb2RlPkNsYXNzMi50ZXN0KCk8L2NvZGU+PC9iPiIpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdER1cGxpY2F0ZUlubmVyKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0Q29uZmxpY3RzKCJwYWNrMS5DbGFzczEiLCAicGFjazIuQSIsICJDbGFzcyA8Yj48Y29kZT5wYWNrMi5BPC9jb2RlPjwvYj4gYWxyZWFkeSBjb250YWlucyBhbiBpbm5lciBjbGFzcyBuYW1lZCA8Yj48Y29kZT5DbGFzczE8L2NvZGU+PC9iPiIpOworICB9CisKKyAgcHJpdmF0ZSB2b2lkIGRvVGVzdChTdHJpbmdbXSBjbGFzc05hbWVzLCBTdHJpbmcgdGFyZ2V0Q2xhc3NOYW1lKSB0aHJvd3MgRXhjZXB0aW9ueworICAgIFZpcnR1YWxGaWxlIHJvb3REaXIgPSBwcmVwYXJlVGVzdCgpOworCisgICAgcGVyZm9ybUFjdGlvbihjbGFzc05hbWVzLCB0YXJnZXRDbGFzc05hbWUpOworCisgICAgU3RyaW5nIHJvb3RBZnRlciA9IGdldFJvb3QoKSArICIvYWZ0ZXIiOworICAgIFZpcnR1YWxGaWxlIHJvb3REaXIyID0gTG9jYWxGaWxlU3lzdGVtLmdldEluc3RhbmNlKCkuZmluZEZpbGVCeVBhdGgocm9vdEFmdGVyLnJlcGxhY2UoRmlsZS5zZXBhcmF0b3JDaGFyLCAnLycpKTsKKyAgICBteVByb2plY3QuZ2V0Q29tcG9uZW50KFBvc3Rwcm9jZXNzUmVmb3JtYXR0aW5nQXNwZWN0LmNsYXNzKS5kb1Bvc3Rwb25lZEZvcm1hdHRpbmcoKTsKKyAgICBJZGVhVGVzdFV0aWwuYXNzZXJ0RGlyZWN0b3JpZXNFcXVhbChyb290RGlyMiwgcm9vdERpciwgSWRlYVRlc3RVdGlsLkNWU19GSUxFX0ZJTFRFUik7CisgIH0KKworICBwcml2YXRlIFZpcnR1YWxGaWxlIHByZXBhcmVUZXN0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgU3RyaW5nIHJvb3RCZWZvcmUgPSBnZXRSb290KCkgKyAiL2JlZm9yZSI7CisgICAgUHNpVGVzdFV0aWwucmVtb3ZlQWxsUm9vdHMobXlNb2R1bGUsIElkZWFUZXN0VXRpbC5nZXRNb2NrSmRrMTcoKSk7CisgICAgcmV0dXJuIFBzaVRlc3RVdGlsLmNyZWF0ZVRlc3RQcm9qZWN0U3RydWN0dXJlKG15UHJvamVjdCwgbXlNb2R1bGUsIHJvb3RCZWZvcmUsIG15RmlsZXNUb0RlbGV0ZSk7CisgIH0KKworICBwcml2YXRlIFN0cmluZyBnZXRSb290KCkgeworICAgIHJldHVybiBKYXZhVGVzdFV0aWwuZ2V0SmF2YVRlc3REYXRhUGF0aCgpICsgIi9yZWZhY3RvcmluZy9tb3ZlQ2xhc3NUb0lubmVyLyIgKyBnZXRUZXN0TmFtZSh0cnVlKTsKKyAgfQorCisgIHByaXZhdGUgdm9pZCBkb1Rlc3RDb25mbGljdHMoU3RyaW5nIGNsYXNzTmFtZSwgU3RyaW5nIHRhcmdldENsYXNzTmFtZSwgU3RyaW5nLi4uIGV4cGVjdGVkQ29uZmxpY3RzKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBwcmVwYXJlVGVzdCgpOworICAgIFBzaUNsYXNzIGNsYXNzVG9Nb3ZlID0gbXlKYXZhRmFjYWRlLmZpbmRDbGFzcyhjbGFzc05hbWUsIFByb2plY3RTY29wZS5nZXRBbGxTY29wZShteVByb2plY3QpKTsKKyAgICBQc2lDbGFzcyB0YXJnZXRDbGFzcyA9IG15SmF2YUZhY2FkZS5maW5kQ2xhc3ModGFyZ2V0Q2xhc3NOYW1lLCBQcm9qZWN0U2NvcGUuZ2V0QWxsU2NvcGUobXlQcm9qZWN0KSk7CisgICAgTW92ZUNsYXNzVG9Jbm5lclByb2Nlc3NvciBwcm9jZXNzb3IgPSBuZXcgTW92ZUNsYXNzVG9Jbm5lclByb2Nlc3NvcihteVByb2plY3QsIG5ldyBQc2lDbGFzc1tde2NsYXNzVG9Nb3ZlfSwgdGFyZ2V0Q2xhc3MsIHRydWUsIHRydWUsIG51bGwpOworICAgIFVzYWdlSW5mb1tdIHVzYWdlcyA9IHByb2Nlc3Nvci5maW5kVXNhZ2VzKCk7CisgICAgTXVsdGlNYXA8UHNpRWxlbWVudCxTdHJpbmc+IGNvbmZsaWN0cyA9IHByb2Nlc3Nvci5nZXRDb25mbGljdHModXNhZ2VzKTsKKyAgICBhc3NlcnRTYW1lRWxlbWVudHMoY29uZmxpY3RzLnZhbHVlcygpICwgZXhwZWN0ZWRDb25mbGljdHMpOworICB9CisKKyAgcHJpdmF0ZSB2b2lkIHBlcmZvcm1BY3Rpb24oU3RyaW5nW10gY2xhc3NOYW1lcywgU3RyaW5nIHRhcmdldENsYXNzTmFtZSkgdGhyb3dzIEV4Y2VwdGlvbnsKKyAgICBmaW5hbCBQc2lDbGFzc1tdIGNsYXNzZXMgPSBuZXcgUHNpQ2xhc3NbY2xhc3NOYW1lcy5sZW5ndGhdOworICAgIGZvcihpbnQgaSA9IDA7IGkgPCBjbGFzc2VzLmxlbmd0aDsgaSsrKXsKKyAgICAgIFN0cmluZyBjbGFzc05hbWUgPSBjbGFzc05hbWVzW2ldOworICAgICAgY2xhc3Nlc1tpXSA9IG15SmF2YUZhY2FkZS5maW5kQ2xhc3MoY2xhc3NOYW1lLCBQcm9qZWN0U2NvcGUuZ2V0QWxsU2NvcGUobXlQcm9qZWN0KSk7CisgICAgICBhc3NlcnROb3ROdWxsKCJDbGFzcyAiICsgY2xhc3NOYW1lICsgIiBub3QgZm91bmQiLCBjbGFzc2VzW2ldKTsKKyAgICB9CisKKyAgICBQc2lDbGFzcyB0YXJnZXRDbGFzcyA9IG15SmF2YUZhY2FkZS5maW5kQ2xhc3ModGFyZ2V0Q2xhc3NOYW1lLCBQcm9qZWN0U2NvcGUuZ2V0QWxsU2NvcGUobXlQcm9qZWN0KSk7CisgICAgYXNzZXJ0Tm90TnVsbCh0YXJnZXRDbGFzcyk7CisKKyAgICBuZXcgTW92ZUNsYXNzVG9Jbm5lclByb2Nlc3NvcihteVByb2plY3QsIGNsYXNzZXMsIHRhcmdldENsYXNzLCB0cnVlLCB0cnVlLCBudWxsKS5ydW4oKTsKKyAgICBQc2lEb2N1bWVudE1hbmFnZXIuZ2V0SW5zdGFuY2UobXlQcm9qZWN0KS5jb21taXRBbGxEb2N1bWVudHMoKTsKKyAgICBGaWxlRG9jdW1lbnRNYW5hZ2VyLmdldEluc3RhbmNlKCkuc2F2ZUFsbERvY3VtZW50cygpOworICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovcmVmYWN0b3JpbmcvTW92ZUlubmVyVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL3JlZmFjdG9yaW5nL01vdmVJbm5lclRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xN2M4ODk0Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL3JlZmFjdG9yaW5nL01vdmVJbm5lclRlc3QuamF2YQpAQCAtMCwwICsxLDE1OCBAQAorcGFja2FnZSBjb20uaW50ZWxsaWoucmVmYWN0b3Jpbmc7CisKK2ltcG9ydCBjb20uaW50ZWxsaWouSmF2YVRlc3RVdGlsOworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLmZpbGVFZGl0b3IuRmlsZURvY3VtZW50TWFuYWdlcjsKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS52ZnMuVmlydHVhbEZpbGU7CitpbXBvcnQgY29tLmludGVsbGlqLnBzaS4qOworaW1wb3J0IGNvbS5pbnRlbGxpai5wc2kuaW1wbC5zb3VyY2UuUG9zdHByb2Nlc3NSZWZvcm1hdHRpbmdBc3BlY3Q7CitpbXBvcnQgY29tLmludGVsbGlqLnBzaS5zZWFyY2guR2xvYmFsU2VhcmNoU2NvcGU7CitpbXBvcnQgY29tLmludGVsbGlqLnJlZmFjdG9yaW5nLm1vdmUubW92ZUlubmVyLk1vdmVJbm5lckRpYWxvZzsKK2ltcG9ydCBjb20uaW50ZWxsaWoucmVmYWN0b3JpbmcubW92ZS5tb3ZlSW5uZXIuTW92ZUlubmVySW1wbDsKK2ltcG9ydCBjb20uaW50ZWxsaWoucmVmYWN0b3JpbmcubW92ZS5tb3ZlSW5uZXIuTW92ZUlubmVyUHJvY2Vzc29yOworaW1wb3J0IG9yZy5qZXRicmFpbnMuYW5ub3RhdGlvbnMuTm9uTmxzOworaW1wb3J0IG9yZy5qZXRicmFpbnMuYW5ub3RhdGlvbnMuTnVsbGFibGU7CisKKy8qKgorICogIEBhdXRob3IgZHNsCisgKi8KK3B1YmxpYyBjbGFzcyBNb3ZlSW5uZXJUZXN0IGV4dGVuZHMgTXVsdGlGaWxlVGVzdENhc2UgeworICBAT3ZlcnJpZGUKKyAgcHJvdGVjdGVkIFN0cmluZyBnZXRUZXN0RGF0YVBhdGgoKSB7CisgICAgcmV0dXJuIEphdmFUZXN0VXRpbC5nZXRKYXZhVGVzdERhdGFQYXRoKCk7CisgIH0KKyAgCisgIEBPdmVycmlkZQorICBwcm90ZWN0ZWQgU3RyaW5nIGdldFRlc3RSb290KCkgeworICAgIHJldHVybiAiL3JlZmFjdG9yaW5nL21vdmVJbm5lci8iOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFNjcjEzNzMwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KGNyZWF0ZUFjdGlvbigicGFjazEuVG9wTGV2ZWwuU3RhdGljSW5uZXIiLCAiU3RhdGljSW5uZXIiLCBmYWxzZSwgbnVsbCwgZmFsc2UsIGZhbHNlLCBudWxsKSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0U2NyMTUxNDIoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoY3JlYXRlQWN0aW9uKCJ4eHguT3V0ZXIuSW5uZXIiLCAiSW5uZXIiLCBmYWxzZSwgbnVsbCwgZmFsc2UsIGZhbHNlLCBudWxsKSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0Tm9uSmF2YUZpbGVzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KGNyZWF0ZUFjdGlvbigicGFjazEuT3V0ZXIuSW5uZXIiLCAiSW5uZXIiLCBmYWxzZSwgbnVsbCwgdHJ1ZSwgdHJ1ZSwgbnVsbCkpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFhtbFJlZmVyZW5jZXMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoY3JlYXRlQWN0aW9uKCJwYWNrMS5PdXRlci5Jbm5lciIsICJJbm5lciIsIGZhbHNlLCBudWxsLCB0cnVlLCB0cnVlLCBudWxsKSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0U2NyMjI1OTIoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoY3JlYXRlQWN0aW9uKCJ4eHguT3V0ZXIuSW5uZXIiLCAiSW5uZXIiLCB0cnVlLCAib3V0ZXIiLCBmYWxzZSwgZmFsc2UsIG51bGwpKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RJbm5lckNsYXNzSW5oZXJpdGFuY2UoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICB0cnkgeworICAgICAgZG9UZXN0KGNyZWF0ZUFjdGlvbigicC5BLkIiLCAiQiIsIGZhbHNlLCBudWxsLCBmYWxzZSwgZmFsc2UsIG51bGwpKTsKKyAgICAgIGZhaWwoIkNvbmZsaWN0IHdhcyBub3QgZGV0ZWN0ZWQiKTsKKyAgICB9CisgICAgY2F0Y2ggKEJhc2VSZWZhY3RvcmluZ1Byb2Nlc3Nvci5Db25mbGljdHNJblRlc3RzRXhjZXB0aW9uIGUpIHsKKyAgICAgIGFzc2VydEVxdWFscygiY2xhc3MgPGI+PGNvZGU+cC5BLkM8L2NvZGU+PC9iPiB3aWxsIGJlY29tZSBpbmFjY2Vzc2libGUgZnJvbSBjbGFzcyA8Yj48Y29kZT5wLkEuQjwvY29kZT48L2I+LiIsIGUuZ2V0TWVzc2FnZSgpKTsKKyAgICB9CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0SW5uZXJDbGFzc1NlbGZSZWYoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoY3JlYXRlQWN0aW9uKCJwLkEuQiIsICJCIiwgZmFsc2UsIG51bGwsIGZhbHNlLCBmYWxzZSwgbnVsbCkpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFNjcjMwMTA2KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KGNyZWF0ZUFjdGlvbigicC5BLkIiLCAiQiIsIHRydWUsICJvdXRlciIsIGZhbHNlLCBmYWxzZSwgbnVsbCkpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdENvbnN0cnVjdG9yVmlzaWJpbGl0eSgpIHRocm93cyBFeGNlcHRpb24geyAgLy8gSURFQURFVi0xOTU2MQorICAgIGRvVGVzdChjcmVhdGVBY3Rpb24oInAuQS5CIiwgIkIiLCBmYWxzZSwgbnVsbCwgZmFsc2UsIGZhbHNlLCBudWxsKSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0RmllbGRBY2Nlc3NJblN1cGVyKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KGNyZWF0ZUFjdGlvbigicC5BLkIiLCAiQiIsIHRydWUsICJhIiwgZmFsc2UsIGZhbHNlLCBudWxsKSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0VG9PdGhlclBhY2thZ2UoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoY3JlYXRlQWN0aW9uKCJwYWNrYWdlMS5PdXRlckNsYXNzLklubmVyQ2xhc3MiLCAiSW5uZXJDbGFzcyIsIGZhbHNlLCBudWxsLCBmYWxzZSwgZmFsc2UsICJwYWNrYWdlMiIpKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RJbXBvcnRTdGF0aWNPZkVudW0oKSB0aHJvd3MgRXhjZXB0aW9uIHsgLy8gSURFQURFVi0yODYxOQorICAgIGRvVGVzdChjcmVhdGVBY3Rpb24oInAuQS5FIiwgIkUiLCBmYWxzZSwgbnVsbCwgZmFsc2UsIGZhbHNlLCBudWxsKSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0RW51bUNvbnN0cnVjdG9yVmlzaWJpbGl0eSgpIHRocm93cyBFeGNlcHRpb24geyAvLyBJREVBREVWLTI4NjE5CisgICAgZG9UZXN0KGNyZWF0ZUFjdGlvbigicC5BLkUiLCAiRSIsIGZhbHNlLCBudWxsLCBmYWxzZSwgZmFsc2UsICJwMiIpKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RRdWFsaWZ5VGhpc0hpZXJhcmNoeSgpIHRocm93cyBFeGNlcHRpb24geworICAgIGZpbmFsIFN0cmluZyBpbm5lckNsYXNzTmFtZSA9ICJwYWNrMS5ESW1wbC5NeVJ1bm5hYmxlIjsKKyAgICBkb1Rlc3QobmV3IE15UGVyZm9ybUFjdGlvbihpbm5lckNsYXNzTmFtZSwgIk15UnVubmFibGUiLCBmYWxzZSwgImQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhbHNlLCBmYWxzZSwgbnVsbCkgeworICAgICAgQE92ZXJyaWRlCisgICAgICBwcm90ZWN0ZWQgYm9vbGVhbiBpc1Bhc3NPdXRlckNsYXNzKCkgeworICAgICAgICBmaW5hbCBQc2lDbGFzcyBvdXRlckNsYXNzID0gZ2V0SmF2YUZhY2FkZSgpLmZpbmRDbGFzcygicGFjazEuREltcGwiLCBHbG9iYWxTZWFyY2hTY29wZS5tb2R1bGVTY29wZShteU1vZHVsZSkpOworICAgICAgICBhc3NlcnROb3ROdWxsKG91dGVyQ2xhc3MpOworICAgICAgICBmaW5hbCBQc2lDbGFzcyBpbm5lckNsYXNzID0gZ2V0SmF2YUZhY2FkZSgpLmZpbmRDbGFzcyhpbm5lckNsYXNzTmFtZSwgR2xvYmFsU2VhcmNoU2NvcGUubW9kdWxlU2NvcGUobXlNb2R1bGUpKTsKKyAgICAgICAgYXNzZXJ0Tm90TnVsbChpbm5lckNsYXNzKTsKKyAgICAgICAgcmV0dXJuIE1vdmVJbm5lckRpYWxvZy5pc1RoaXNOZWVkZWQoaW5uZXJDbGFzcywgb3V0ZXJDbGFzcyk7CisgICAgICB9CisgICAgfSk7CisgIH0KKworICBwcml2YXRlIFBlcmZvcm1BY3Rpb24gY3JlYXRlQWN0aW9uKEBOb25ObHMgZmluYWwgU3RyaW5nIGlubmVyQ2xhc3NOYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBOb25ObHMgZmluYWwgU3RyaW5nIG5ld0NsYXNzTmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaW5hbCBib29sZWFuIHBhc3NPdXRlckNsYXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBOb25ObHMgZmluYWwgU3RyaW5nIHBhcmFtZXRlck5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmluYWwgYm9vbGVhbiBzZWFyY2hJbkNvbW1lbnRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsIGJvb2xlYW4gc2VhcmNoSW5Ob25KYXZhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBOb25ObHMgQE51bGxhYmxlIGZpbmFsIFN0cmluZyBwYWNrYWdlTmFtZSkgeworICAgIHJldHVybiBuZXcgTXlQZXJmb3JtQWN0aW9uKGlubmVyQ2xhc3NOYW1lLCBuZXdDbGFzc05hbWUsIHBhc3NPdXRlckNsYXNzLCBwYXJhbWV0ZXJOYW1lLCBzZWFyY2hJbkNvbW1lbnRzLCBzZWFyY2hJbk5vbkphdmEsIHBhY2thZ2VOYW1lKTsKKyAgfQorCisgIHByaXZhdGUgY2xhc3MgTXlQZXJmb3JtQWN0aW9uIGltcGxlbWVudHMgUGVyZm9ybUFjdGlvbiB7CisgICAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgbXlJbm5lckNsYXNzTmFtZTsKKyAgICBwcml2YXRlIGZpbmFsIFN0cmluZyBteVBhY2thZ2VOYW1lOworICAgIHByaXZhdGUgZmluYWwgU3RyaW5nIG15TmV3Q2xhc3NOYW1lOworICAgIHByaXZhdGUgZmluYWwgYm9vbGVhbiBteVBhc3NPdXRlckNsYXNzOworICAgIHByaXZhdGUgZmluYWwgU3RyaW5nIG15UGFyYW1ldGVyTmFtZTsKKyAgICBwcml2YXRlIGZpbmFsIGJvb2xlYW4gbXlTZWFyY2hJbkNvbW1lbnRzOworICAgIHByaXZhdGUgZmluYWwgYm9vbGVhbiBteVNlYXJjaEluTm9uSmF2YTsKKworICAgIHB1YmxpYyBNeVBlcmZvcm1BY3Rpb24oU3RyaW5nIGlubmVyQ2xhc3NOYW1lLCBTdHJpbmcgbmV3Q2xhc3NOYW1lLCBib29sZWFuIHBhc3NPdXRlckNsYXNzLCBTdHJpbmcgcGFyYW1ldGVyTmFtZSwgYm9vbGVhbiBzZWFyY2hJbkNvbW1lbnRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbGVhbiBzZWFyY2hJbk5vbkphdmEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgcGFja2FnZU5hbWUpIHsKKyAgICAgIG15SW5uZXJDbGFzc05hbWUgPSBpbm5lckNsYXNzTmFtZTsKKyAgICAgIG15UGFja2FnZU5hbWUgPSBwYWNrYWdlTmFtZTsKKyAgICAgIG15TmV3Q2xhc3NOYW1lID0gbmV3Q2xhc3NOYW1lOworICAgICAgbXlQYXNzT3V0ZXJDbGFzcyA9IHBhc3NPdXRlckNsYXNzOworICAgICAgbXlQYXJhbWV0ZXJOYW1lID0gcGFyYW1ldGVyTmFtZTsKKyAgICAgIG15U2VhcmNoSW5Db21tZW50cyA9IHNlYXJjaEluQ29tbWVudHM7CisgICAgICBteVNlYXJjaEluTm9uSmF2YSA9IHNlYXJjaEluTm9uSmF2YTsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgdm9pZCBwZXJmb3JtQWN0aW9uKFZpcnR1YWxGaWxlIHJvb3REaXIsIFZpcnR1YWxGaWxlIHJvb3RBZnRlcikgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICBmaW5hbCBKYXZhUHNpRmFjYWRlIG1hbmFnZXIgPSBnZXRKYXZhRmFjYWRlKCk7CisgICAgICBmaW5hbCBQc2lDbGFzcyBhQ2xhc3MgPSBtYW5hZ2VyLmZpbmRDbGFzcyhteUlubmVyQ2xhc3NOYW1lLCBHbG9iYWxTZWFyY2hTY29wZS5tb2R1bGVTY29wZShteU1vZHVsZSkpOworICAgICAgZmluYWwgTW92ZUlubmVyUHJvY2Vzc29yIG1vdmVJbm5lclByb2Nlc3NvciA9IG5ldyBNb3ZlSW5uZXJQcm9jZXNzb3IobXlQcm9qZWN0LCBudWxsKTsKKyAgICAgIGZpbmFsIFBzaUVsZW1lbnQgdGFyZ2V0Q29udGFpbmVyID0gbXlQYWNrYWdlTmFtZSAhPSBudWxsID8gZmluZERpcmVjdG9yeShteVBhY2thZ2VOYW1lKSA6IE1vdmVJbm5lckltcGwuZ2V0VGFyZ2V0Q29udGFpbmVyKGFDbGFzcywgZmFsc2UpOworICAgICAgYXNzZXJ0Tm90TnVsbCh0YXJnZXRDb250YWluZXIpOworICAgICAgbW92ZUlubmVyUHJvY2Vzc29yLnNldHVwKGFDbGFzcywgbXlOZXdDbGFzc05hbWUsIGlzUGFzc091dGVyQ2xhc3MoKSwgbXlQYXJhbWV0ZXJOYW1lLCBteVNlYXJjaEluQ29tbWVudHMsIG15U2VhcmNoSW5Ob25KYXZhLCB0YXJnZXRDb250YWluZXIpOworICAgICAgbW92ZUlubmVyUHJvY2Vzc29yLnJ1bigpOworICAgICAgUG9zdHByb2Nlc3NSZWZvcm1hdHRpbmdBc3BlY3QuZ2V0SW5zdGFuY2UoZ2V0UHJvamVjdCgpKS5kb1Bvc3Rwb25lZEZvcm1hdHRpbmcoKTsKKyAgICAgIFBzaURvY3VtZW50TWFuYWdlci5nZXRJbnN0YW5jZShteVByb2plY3QpLmNvbW1pdEFsbERvY3VtZW50cygpOworICAgICAgRmlsZURvY3VtZW50TWFuYWdlci5nZXRJbnN0YW5jZSgpLnNhdmVBbGxEb2N1bWVudHMoKTsKKyAgICB9CisKKyAgICBwcm90ZWN0ZWQgYm9vbGVhbiBpc1Bhc3NPdXRlckNsYXNzKCkgeworICAgICAgcmV0dXJuIG15UGFzc091dGVyQ2xhc3M7CisgICAgfQorCisgICAgcHJpdmF0ZSBQc2lFbGVtZW50IGZpbmREaXJlY3RvcnkoZmluYWwgU3RyaW5nIHBhY2thZ2VOYW1lKSB7CisgICAgICBmaW5hbCBQc2lQYWNrYWdlIGFQYWNrYWdlID0gSmF2YVBzaUZhY2FkZS5nZXRJbnN0YW5jZShteVBzaU1hbmFnZXIuZ2V0UHJvamVjdCgpKS5maW5kUGFja2FnZShwYWNrYWdlTmFtZSk7CisgICAgICBhc3NlcnQgYVBhY2thZ2UgIT0gbnVsbDsKKyAgICAgIGZpbmFsIFBzaURpcmVjdG9yeVtdIGRpcmVjdG9yaWVzID0gYVBhY2thZ2UuZ2V0RGlyZWN0b3JpZXMoKTsKKyAgICAgIHJldHVybiBkaXJlY3RvcmllcyBbMF07CisgICAgfQorICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovcmVmYWN0b3JpbmcvTW92ZU1lbWJlcnNUZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovcmVmYWN0b3JpbmcvTW92ZU1lbWJlcnNUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmMwMzQ5YgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9yZWZhY3RvcmluZy9Nb3ZlTWVtYmVyc1Rlc3QuamF2YQpAQCAtMCwwICsxLDE5MCBAQAorcGFja2FnZSBjb20uaW50ZWxsaWoucmVmYWN0b3Jpbmc7CisKK2ltcG9ydCBjb20uaW50ZWxsaWouSmF2YVRlc3RVdGlsOworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLmZpbGVFZGl0b3IuRmlsZURvY3VtZW50TWFuYWdlcjsKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS52ZnMuVmlydHVhbEZpbGU7CitpbXBvcnQgY29tLmludGVsbGlqLnBzaS5Qc2lDbGFzczsKK2ltcG9ydCBjb20uaW50ZWxsaWoucHNpLlBzaUVsZW1lbnQ7CitpbXBvcnQgY29tLmludGVsbGlqLnBzaS5Qc2lNZW1iZXI7CitpbXBvcnQgY29tLmludGVsbGlqLnBzaS5Qc2lNb2RpZmllcjsKK2ltcG9ydCBjb20uaW50ZWxsaWoucHNpLnNlYXJjaC5Qcm9qZWN0U2NvcGU7CitpbXBvcnQgY29tLmludGVsbGlqLnJlZmFjdG9yaW5nLm1vdmUubW92ZU1lbWJlcnMuTW9ja01vdmVNZW1iZXJzT3B0aW9uczsKK2ltcG9ydCBjb20uaW50ZWxsaWoucmVmYWN0b3JpbmcubW92ZS5tb3ZlTWVtYmVycy5Nb3ZlTWVtYmVyc1Byb2Nlc3NvcjsKK2ltcG9ydCBjb20uaW50ZWxsaWoudXRpbC5WaXNpYmlsaXR5VXRpbDsKKworaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CitpbXBvcnQgamF2YS51dGlsLkxpbmtlZEhhc2hTZXQ7CisKK3B1YmxpYyBjbGFzcyBNb3ZlTWVtYmVyc1Rlc3QgZXh0ZW5kcyBNdWx0aUZpbGVUZXN0Q2FzZSB7CisgIEBPdmVycmlkZQorICBwcm90ZWN0ZWQgU3RyaW5nIGdldFRlc3REYXRhUGF0aCgpIHsKKyAgICByZXR1cm4gSmF2YVRlc3RVdGlsLmdldEphdmFUZXN0RGF0YVBhdGgoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RKYXZhZG9jUmVmcygpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdCgiQ2xhc3MxIiwgIkNsYXNzMiIsIDApOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFdlaXJkRGVjbGFyYXRpb24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoIkEiLCAiQiIsIDApOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdElubmVyQ2xhc3MoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoIkEiLCAiQiIsIDApOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFNjcjExODcxKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KCJwYWNrMS5BIiwgInBhY2sxLkIiLCAwKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RPdXRlckNsYXNzVHlwZVBhcmFtZXRlcnMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoInBhY2sxLkEiLCAicGFjazIuQiIsIDApOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdHNjcjQwMDY0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KCJUZXN0IiwgIlRlc3QxIiwgMCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0c2NyNDA5NDcoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoIkEiLCAiVGVzdCIsIDAsIDEpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdElERUFERVYxMTQxNigpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdCgiWSIsICJYIiwgZmFsc2UsIDApOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFR3b01ldGhvZHMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoInBhY2sxLkEiLCAicGFjazEuQyIsIDAsIDEsIDIpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFBhcmFtZXRlcml6ZWRSZWZPbigpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdCgicGFjazEuUE9uZSIsICJwYWNrMS5DIiwgMSwgMik7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0SURFQURFVjEyNDQ4KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KCJCIiwgIkEiLCBmYWxzZSwgMCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0RmllbGRGb3J3YXJkUmVmKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KCJBIiwgIkNvbnN0YW50cyIsIDApOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFN0YXRpY0ltcG9ydCgpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdCgiQyIsICJCIiwgMCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0RXhwbGljaXRTdGF0aWNJbXBvcnQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoIkMiLCAiQiIsIDApOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFByb3RlY3RlZENvbnN0cnVjdG9yKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KCJwYWNrMS5BIiwgInBhY2sxLkMiLCAwKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RVbnRvdWNoZWRWaXNpYmlsaXR5KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KCJwYWNrMS5BIiwgInBhY2sxLkMiLCAwLCAxKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RFc2NhbGF0ZVZpc2liaWxpdHkoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoInBhY2sxLkEiLCAicGFjazEuQyIsIHRydWUsIFZpc2liaWxpdHlVdGlsLkVTQ0FMQVRFX1ZJU0lCSUxJVFksIDApOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdE90aGVyUGFja2FnZUltcG9ydCgpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdCgicGFjazEuQ2xhc3NXaXRoU3RhdGljTWV0aG9kIiwgInBhY2syLk90aGVyQ2xhc3MiLCAxKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RFbnVtQ29uc3RhbnQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoIkIiLCAiQSIsIDApOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEVudW1Db25zdGFudEZyb21DYXNlU3RhdGVtZW50KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KCJCIiwgIkEiLCAwKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3REZXBlbmRhbnRGaWVsZHMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoIkIiLCAiQSIsIDApOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFN0YXRpY0ltcG9ydEFuZE92ZXJyaWRlbk1ldGhvZHMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoImJhci5CIiwgImJhci5BIiwgMCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0V3JpdGFibGVGaWVsZCgpIHRocm93cyBFeGNlcHRpb24geworICAgIHRyeSB7CisgICAgICBkb1Rlc3QoIkIiLCAiQSIsIDApOworICAgICAgZmFpbCgiY29uZmxpY3QgZXhwZWN0ZWQiKTsKKyAgICB9CisgICAgY2F0Y2ggKEJhc2VSZWZhY3RvcmluZ1Byb2Nlc3Nvci5Db25mbGljdHNJblRlc3RzRXhjZXB0aW9uIGUpIHsKKyAgICAgIGFzc2VydEVxdWFscygiRmllbGQgPGI+PGNvZGU+Qi5PTkU8L2NvZGU+PC9iPiBoYXMgd3JpdGUgYWNjZXNzIGJ1dCBpcyBtb3ZlZCB0byBhbiBpbnRlcmZhY2UiLCBlLmdldE1lc3NhZ2UoKSk7CisgICAgfQorICB9CisKKyAgcHVibGljIHZvaWQgdGVzdElubmVyVG9JbnRlcmZhY2UoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoIkEiLCAiQiIsIDApOworICB9CisgIAorICBwdWJsaWMgdm9pZCB0ZXN0RXNjYWxhdGVWaXNpYmlsaXR5MSgpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdCgiQSIsICJCIiwgdHJ1ZSwgVmlzaWJpbGl0eVV0aWwuRVNDQUxBVEVfVklTSUJJTElUWSwgMCk7CisgIH0KKyAgCisgIHB1YmxpYyB2b2lkIHRlc3RNdWx0aXBsZVdpdGhEZXBlbmRlbmNpZXMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoIkEiLCAiQiIsIHRydWUsIFZpc2liaWxpdHlVdGlsLkVTQ0FMQVRFX1ZJU0lCSUxJVFksIDAsIDEpOworICB9CisKKyAgQE92ZXJyaWRlCisgIHByb3RlY3RlZCBTdHJpbmcgZ2V0VGVzdFJvb3QoKSB7CisgICAgcmV0dXJuICIvcmVmYWN0b3JpbmcvbW92ZU1lbWJlcnMvIjsKKyAgfQorCisgIHByaXZhdGUgdm9pZCBkb1Rlc3QoZmluYWwgU3RyaW5nIHNvdXJjZUNsYXNzTmFtZSwgZmluYWwgU3RyaW5nIHRhcmdldENsYXNzTmFtZSwgZmluYWwgaW50Li4uIG1lbWJlckluZGljZXMpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdChzb3VyY2VDbGFzc05hbWUsIHRhcmdldENsYXNzTmFtZSwgdHJ1ZSwgbWVtYmVySW5kaWNlcyk7CisgIH0KKworICBwcml2YXRlIHZvaWQgZG9UZXN0KGZpbmFsIFN0cmluZyBzb3VyY2VDbGFzc05hbWUsCisgICAgICAgICAgICAgICAgICAgICAgZmluYWwgU3RyaW5nIHRhcmdldENsYXNzTmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICBmaW5hbCBib29sZWFuIGxvd2VyY2FzZUZpcnN0TGV0dGVyLAorICAgICAgICAgICAgICAgICAgICAgIGZpbmFsIGludC4uLiBtZW1iZXJJbmRpY2VzKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3Qoc291cmNlQ2xhc3NOYW1lLCB0YXJnZXRDbGFzc05hbWUsIGxvd2VyY2FzZUZpcnN0TGV0dGVyLCBudWxsLCBtZW1iZXJJbmRpY2VzKTsKKyAgfQorCisgIHByaXZhdGUgdm9pZCBkb1Rlc3QoZmluYWwgU3RyaW5nIHNvdXJjZUNsYXNzTmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICBmaW5hbCBTdHJpbmcgdGFyZ2V0Q2xhc3NOYW1lLAorICAgICAgICAgICAgICAgICAgICAgIGZpbmFsIGJvb2xlYW4gbG93ZXJjYXNlRmlyc3RMZXR0ZXIsCisgICAgICAgICAgICAgICAgICAgICAgZmluYWwgU3RyaW5nIGRlZmF1bHRWaXNpYmlsaXR5LAorICAgICAgICAgICAgICAgICAgICAgIGZpbmFsIGludC4uLiBtZW1iZXJJbmRpY2VzKQorICAgIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdChuZXcgUGVyZm9ybUFjdGlvbigpIHsKKyAgICAgIEBPdmVycmlkZQorICAgICAgcHVibGljIHZvaWQgcGVyZm9ybUFjdGlvbihWaXJ0dWFsRmlsZSByb290RGlyLCBWaXJ0dWFsRmlsZSByb290QWZ0ZXIpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICBNb3ZlTWVtYmVyc1Rlc3QudGhpcy5wZXJmb3JtQWN0aW9uKHNvdXJjZUNsYXNzTmFtZSwgdGFyZ2V0Q2xhc3NOYW1lLCBtZW1iZXJJbmRpY2VzLCBkZWZhdWx0VmlzaWJpbGl0eSk7CisgICAgICB9CisgICAgfSwgbG93ZXJjYXNlRmlyc3RMZXR0ZXIpOworICB9CisKKyAgcHJpdmF0ZSB2b2lkIHBlcmZvcm1BY3Rpb24oU3RyaW5nIHNvdXJjZUNsYXNzTmFtZSwgU3RyaW5nIHRhcmdldENsYXNzTmFtZSwgaW50W10gbWVtYmVySW5kaWNlcywgZmluYWwgU3RyaW5nIHZpc2liaWxpdHkpIHRocm93cyBFeGNlcHRpb24geworICAgIFBzaUNsYXNzIHNvdXJjZUNsYXNzID0gbXlKYXZhRmFjYWRlLmZpbmRDbGFzcyhzb3VyY2VDbGFzc05hbWUsIFByb2plY3RTY29wZS5nZXRQcm9qZWN0U2NvcGUobXlQcm9qZWN0KSk7CisgICAgYXNzZXJ0Tm90TnVsbCgiQ2xhc3MgIiArIHNvdXJjZUNsYXNzTmFtZSArICIgbm90IGZvdW5kIiwgc291cmNlQ2xhc3MpOworICAgIFBzaUNsYXNzIHRhcmdldENsYXNzID0gbXlKYXZhRmFjYWRlLmZpbmRDbGFzcyh0YXJnZXRDbGFzc05hbWUsIFByb2plY3RTY29wZS5nZXRQcm9qZWN0U2NvcGUobXlQcm9qZWN0KSk7CisgICAgYXNzZXJ0Tm90TnVsbCgiQ2xhc3MgIiArIHRhcmdldENsYXNzTmFtZSArICIgbm90IGZvdW5kIiwgdGFyZ2V0Q2xhc3MpOworCisgICAgUHNpRWxlbWVudFtdIGNoaWxkcmVuID0gc291cmNlQ2xhc3MuZ2V0Q2hpbGRyZW4oKTsKKyAgICBBcnJheUxpc3Q8UHNpTWVtYmVyPiBtZW1iZXJzID0gbmV3IEFycmF5TGlzdDxQc2lNZW1iZXI+KCk7CisgICAgZm9yIChQc2lFbGVtZW50IGNoaWxkIDogY2hpbGRyZW4pIHsKKyAgICAgIGlmIChjaGlsZCBpbnN0YW5jZW9mIFBzaU1lbWJlcikgeworICAgICAgICBtZW1iZXJzLmFkZCgoKFBzaU1lbWJlcikgY2hpbGQpKTsKKyAgICAgIH0KKyAgICB9CisKKyAgICBMaW5rZWRIYXNoU2V0PFBzaU1lbWJlcj4gbWVtYmVyU2V0ID0gbmV3IExpbmtlZEhhc2hTZXQ8UHNpTWVtYmVyPigpOworICAgIGZvciAoaW50IGluZGV4IDogbWVtYmVySW5kaWNlcykgeworICAgICAgUHNpTWVtYmVyIG1lbWJlciA9IG1lbWJlcnMuZ2V0KGluZGV4KTsKKyAgICAgIGFzc2VydFRydWUobWVtYmVyLmhhc01vZGlmaWVyUHJvcGVydHkoUHNpTW9kaWZpZXIuU1RBVElDKSk7CisgICAgICBtZW1iZXJTZXQuYWRkKG1lbWJlcik7CisgICAgfQorCisgICAgTW9ja01vdmVNZW1iZXJzT3B0aW9ucyBvcHRpb25zID0gbmV3IE1vY2tNb3ZlTWVtYmVyc09wdGlvbnModGFyZ2V0Q2xhc3MuZ2V0UXVhbGlmaWVkTmFtZSgpLCBtZW1iZXJTZXQpOworICAgIG9wdGlvbnMuc2V0TWVtYmVyVmlzaWJpbGl0eSh2aXNpYmlsaXR5KTsKKyAgICBuZXcgTW92ZU1lbWJlcnNQcm9jZXNzb3IobXlQcm9qZWN0LCBudWxsLCBvcHRpb25zKS5ydW4oKTsKKyAgICBGaWxlRG9jdW1lbnRNYW5hZ2VyLmdldEluc3RhbmNlKCkuc2F2ZUFsbERvY3VtZW50cygpOworICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovcmVmYWN0b3JpbmcvTW92ZVBhY2thZ2VBc0RpcmVjdG9yeVRlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9yZWZhY3RvcmluZy9Nb3ZlUGFja2FnZUFzRGlyZWN0b3J5VGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU4OWY5MzUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovcmVmYWN0b3JpbmcvTW92ZVBhY2thZ2VBc0RpcmVjdG9yeVRlc3QuamF2YQpAQCAtMCwwICsxLDE2OCBAQAorLyoKKyAqIENvcHlyaWdodCAyMDAwLTIwMTEgSmV0QnJhaW5zIHMuci5vLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KK3BhY2thZ2UgY29tLmludGVsbGlqLnJlZmFjdG9yaW5nOworCitpbXBvcnQgY29tLmludGVsbGlqLkphdmFUZXN0VXRpbDsKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS5hcHBsaWNhdGlvbi5BcHBsaWNhdGlvbk1hbmFnZXI7CitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkuZmlsZUVkaXRvci5GaWxlRG9jdW1lbnRNYW5hZ2VyOworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLnZmcy5WaXJ0dWFsRmlsZTsKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS52ZnMuVmlydHVhbEZpbGVBZGFwdGVyOworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLnZmcy5WaXJ0dWFsRmlsZUV2ZW50OworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLnZmcy5WaXJ0dWFsRmlsZU1hbmFnZXI7CitpbXBvcnQgY29tLmludGVsbGlqLnBzaS5KYXZhUHNpRmFjYWRlOworaW1wb3J0IGNvbS5pbnRlbGxpai5wc2kuUHNpRGlyZWN0b3J5OworaW1wb3J0IGNvbS5pbnRlbGxpai5wc2kuUHNpRmlsZTsKK2ltcG9ydCBjb20uaW50ZWxsaWoucHNpLlBzaVBhY2thZ2U7CitpbXBvcnQgY29tLmludGVsbGlqLnJlZmFjdG9yaW5nLm1vdmUubW92ZUNsYXNzZXNPclBhY2thZ2VzLk1vdmVEaXJlY3RvcnlXaXRoQ2xhc3Nlc1Byb2Nlc3NvcjsKK2ltcG9ydCBjb20uaW50ZWxsaWoudGVzdEZyYW1ld29yay5Qc2lUZXN0VXRpbDsKK2ltcG9ydCBqdW5pdC5mcmFtZXdvcmsuQXNzZXJ0OworCitpbXBvcnQgamF2YS51dGlsLkFycmF5czsKK2ltcG9ydCBqYXZhLnV0aWwuQ29tcGFyYXRvcjsKKworcHVibGljIGNsYXNzIE1vdmVQYWNrYWdlQXNEaXJlY3RvcnlUZXN0IGV4dGVuZHMgTXVsdGlGaWxlVGVzdENhc2UgeworCisgIEBPdmVycmlkZQorICBwcm90ZWN0ZWQgU3RyaW5nIGdldFRlc3REYXRhUGF0aCgpIHsKKyAgICByZXR1cm4gSmF2YVRlc3RVdGlsLmdldEphdmFUZXN0RGF0YVBhdGgoKTsKKyAgfQorCisgIEBPdmVycmlkZQorICBwcm90ZWN0ZWQgU3RyaW5nIGdldFRlc3RSb290KCkgeworICAgIHJldHVybiAiL3JlZmFjdG9yaW5nL21vdmVQYWNrYWdlQXNEaXIvIjsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RNb3ZlUGFja2FnZSgpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdChjcmVhdGVBY3Rpb24oInBhY2sxIiwgInRhcmdldCIpKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RNb3ZlUGFja2FnZVdpdGhUeHRGaWxlc0luc2lkZSgpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdChjcmVhdGVBY3Rpb24oInBhY2sxIiwgInRhcmdldCIpKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RNdWx0aXBsZUNsYXNzZXNJbk9uZUZpbGUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBmaW5hbCBib29sZWFuIFtdIGZpbGVXYXNEZWxldGVkID0gbmV3IGJvb2xlYW5bXXtmYWxzZX07CisgICAgZmluYWwgVmlydHVhbEZpbGVBZGFwdGVyIGZpbGVBZGFwdGVyID0gbmV3IFZpcnR1YWxGaWxlQWRhcHRlcigpIHsKKyAgICAgIEBPdmVycmlkZQorICAgICAgcHVibGljIHZvaWQgZmlsZURlbGV0ZWQoVmlydHVhbEZpbGVFdmVudCBldmVudCkgeworICAgICAgICBmaWxlV2FzRGVsZXRlZFswXSA9ICFldmVudC5nZXRGaWxlKCkuaXNEaXJlY3RvcnkoKTsKKyAgICAgIH0KKyAgICB9OworICAgIFZpcnR1YWxGaWxlTWFuYWdlci5nZXRJbnN0YW5jZSgpLmFkZFZpcnR1YWxGaWxlTGlzdGVuZXIoZmlsZUFkYXB0ZXIpOworICAgIHRyeSB7CisgICAgICBkb1Rlc3QoY3JlYXRlQWN0aW9uKCJwYWNrMSIsICJ0YXJnZXQiKSk7CisgICAgfQorICAgIGZpbmFsbHkgeworICAgICAgVmlydHVhbEZpbGVNYW5hZ2VyLmdldEluc3RhbmNlKCkucmVtb3ZlVmlydHVhbEZpbGVMaXN0ZW5lcihmaWxlQWRhcHRlcik7CisgICAgfQorICAgIEFzc2VydC5hc3NlcnRGYWxzZSgiRGVsZXRlZCBpbnN0ZWFkIG9mIG1vdmVkIiwgZmlsZVdhc0RlbGV0ZWRbMF0pOworICB9CisKKworICBwdWJsaWMgdm9pZCB0ZXN0UmVtb3ZlVW5yZXNvbHZlZEltcG9ydHMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoY3JlYXRlQWN0aW9uKCJwYWNrMSIsICJ0YXJnZXQiKSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0WG1sRGlyUmVmcygpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdChjcmVhdGVBY3Rpb24oInBhY2sxIiwgInRhcmdldCIpKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RYbWxFbXB0eURpclJlZnMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBmaW5hbCBTdHJpbmcgcGFja2FnZU5hbWUgPSAicGFjazEiOworICAgIGRvVGVzdChuZXcgTXlQZXJmb3JtQWN0aW9uKHBhY2thZ2VOYW1lLCAidGFyZ2V0Iil7CisgICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgRU1QVFlfVFhUID0gImVtcHR5LnR4dCI7CisgICAgICBAT3ZlcnJpZGUKKyAgICAgIHByb3RlY3RlZCB2b2lkIHByZXByb2Nlc3NTcmNEaXIoUHNpRGlyZWN0b3J5IHNyY0RpcmVjdG9yeSkgeworICAgICAgICBmaW5hbCBQc2lGaWxlIGVtcHR5ID0gc3JjRGlyZWN0b3J5LmZpbmRGaWxlKEVNUFRZX1RYVCk7CisgICAgICAgIGFzc2VydCBlbXB0eSAhPSBudWxsOworICAgICAgICBBcHBsaWNhdGlvbk1hbmFnZXIuZ2V0QXBwbGljYXRpb24oKS5ydW5Xcml0ZUFjdGlvbihuZXcgUnVubmFibGUoKSB7CisgICAgICAgICAgcHVibGljIHZvaWQgcnVuKCkgeworICAgICAgICAgICAgZW1wdHkuZGVsZXRlKCk7CisgICAgICAgICAgfQorICAgICAgICB9KTsKKyAgICAgIH0KKworICAgICAgQE92ZXJyaWRlCisgICAgICBwcm90ZWN0ZWQgdm9pZCBwb3N0UHJvY2Vzc1RhcmdldERpcihQc2lEaXJlY3RvcnkgdGFyZ2V0RGlyZWN0b3J5KSB7CisgICAgICAgIGZpbmFsIFBzaURpcmVjdG9yeSBzdWJkaXJlY3RvcnkgPSB0YXJnZXREaXJlY3RvcnkuZmluZFN1YmRpcmVjdG9yeShwYWNrYWdlTmFtZSk7CisgICAgICAgIGFzc2VydCBzdWJkaXJlY3RvcnkgIT0gbnVsbDsKKyAgICAgICAgQXBwbGljYXRpb25NYW5hZ2VyLmdldEFwcGxpY2F0aW9uKCkucnVuV3JpdGVBY3Rpb24obmV3IFJ1bm5hYmxlKCkgeworICAgICAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKKyAgICAgICAgICAgIHN1YmRpcmVjdG9yeS5jcmVhdGVGaWxlKEVNUFRZX1RYVCk7CisgICAgICAgICAgfQorICAgICAgICB9KTsKKyAgICAgIH0KKyAgICB9KTsKKyAgfQorCisgIHByaXZhdGUgUGVyZm9ybUFjdGlvbiBjcmVhdGVBY3Rpb24oZmluYWwgU3RyaW5nIHBhY2thZ2VOYW1lLCBmaW5hbCBTdHJpbmcgdGFyZ2V0UGFja2FnZU5hbWUpIHsKKyAgICByZXR1cm4gbmV3IE15UGVyZm9ybUFjdGlvbihwYWNrYWdlTmFtZSwgdGFyZ2V0UGFja2FnZU5hbWUpOworICB9CisKKyAgQE92ZXJyaWRlCisgIHByb3RlY3RlZCB2b2lkIHByZXBhcmVQcm9qZWN0KFZpcnR1YWxGaWxlIHJvb3REaXIpIHsKKyAgICBQc2lUZXN0VXRpbC5hZGRDb250ZW50Um9vdChteU1vZHVsZSwgcm9vdERpcik7CisgICAgZmluYWwgVmlydHVhbEZpbGVbXSBjaGlsZHJlbiA9IHJvb3REaXIuZ2V0Q2hpbGRyZW4oKTsKKyAgICBmb3IgKFZpcnR1YWxGaWxlIGNoaWxkIDogY2hpbGRyZW4pIHsKKyAgICAgIGlmIChjaGlsZC5nZXROYW1lKCkuc3RhcnRzV2l0aCgic3JjIikpIHsKKyAgICAgICAgUHNpVGVzdFV0aWwuYWRkU291cmNlUm9vdChteU1vZHVsZSwgY2hpbGQpOworICAgICAgfQorICAgIH0KKyAgfQorCisgIHByaXZhdGUgY2xhc3MgTXlQZXJmb3JtQWN0aW9uIGltcGxlbWVudHMgUGVyZm9ybUFjdGlvbiB7CisgICAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgbXlQYWNrYWdlTmFtZTsKKyAgICBwcml2YXRlIGZpbmFsIFN0cmluZyBteVRhcmdldFBhY2thZ2VOYW1lOworCisgICAgcHVibGljIE15UGVyZm9ybUFjdGlvbihTdHJpbmcgcGFja2FnZU5hbWUsIFN0cmluZyB0YXJnZXRQYWNrYWdlTmFtZSkgeworICAgICAgbXlQYWNrYWdlTmFtZSA9IHBhY2thZ2VOYW1lOworICAgICAgbXlUYXJnZXRQYWNrYWdlTmFtZSA9IHRhcmdldFBhY2thZ2VOYW1lOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyB2b2lkIHBlcmZvcm1BY3Rpb24oVmlydHVhbEZpbGUgcm9vdERpciwgVmlydHVhbEZpbGUgcm9vdEFmdGVyKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgIGZpbmFsIEphdmFQc2lGYWNhZGUgcHNpRmFjYWRlID0gSmF2YVBzaUZhY2FkZS5nZXRJbnN0YW5jZShteVByb2plY3QpOworICAgICAgZmluYWwgQ29tcGFyYXRvcjxQc2lEaXJlY3Rvcnk+IGRpcmVjdG9yeUNvbXBhcmF0b3IgPSBuZXcgQ29tcGFyYXRvcjxQc2lEaXJlY3Rvcnk+KCkgeworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIGludCBjb21wYXJlKFBzaURpcmVjdG9yeSBvMSwgUHNpRGlyZWN0b3J5IG8yKSB7CisgICAgICAgICAgcmV0dXJuIG8xLmdldFZpcnR1YWxGaWxlKCkuZ2V0UHJlc2VudGFibGVVcmwoKS5jb21wYXJlVG8obzIuZ2V0VmlydHVhbEZpbGUoKS5nZXRQcmVzZW50YWJsZVVybCgpKTsKKyAgICAgICAgfQorICAgICAgfTsKKworICAgICAgZmluYWwgUHNpUGFja2FnZSBzb3VyY2VQYWNrYWdlID0gcHNpRmFjYWRlLmZpbmRQYWNrYWdlKG15UGFja2FnZU5hbWUpOworICAgICAgYXNzZXJ0Tm90TnVsbChzb3VyY2VQYWNrYWdlKTsKKyAgICAgIGZpbmFsIFBzaURpcmVjdG9yeVtdIHNyY0RpcmVjdG9yaWVzID0gc291cmNlUGFja2FnZS5nZXREaXJlY3RvcmllcygpOworICAgICAgYXNzZXJ0RXF1YWxzKHNyY0RpcmVjdG9yaWVzLmxlbmd0aCwgMik7CisgICAgICBBcnJheXMuc29ydChzcmNEaXJlY3RvcmllcywgZGlyZWN0b3J5Q29tcGFyYXRvcik7CisKKyAgICAgIGZpbmFsIFBzaVBhY2thZ2UgdGFyZ2V0UGFja2FnZSA9IHBzaUZhY2FkZS5maW5kUGFja2FnZShteVRhcmdldFBhY2thZ2VOYW1lKTsKKyAgICAgIGFzc2VydE5vdE51bGwodGFyZ2V0UGFja2FnZSk7CisgICAgICBmaW5hbCBQc2lEaXJlY3RvcnlbXSB0YXJnZXREaXJlY3RvcmllcyA9IHRhcmdldFBhY2thZ2UuZ2V0RGlyZWN0b3JpZXMoKTsKKyAgICAgIEFycmF5cy5zb3J0KHRhcmdldERpcmVjdG9yaWVzLCBkaXJlY3RvcnlDb21wYXJhdG9yKTsKKyAgICAgIGFzc2VydFRydWUodGFyZ2V0RGlyZWN0b3JpZXMubGVuZ3RoID4gMCk7CisgICAgICBwcmVwcm9jZXNzU3JjRGlyKHNyY0RpcmVjdG9yaWVzWzBdKTsKKyAgICAgIG5ldyBNb3ZlRGlyZWN0b3J5V2l0aENsYXNzZXNQcm9jZXNzb3IoZ2V0UHJvamVjdCgpLCBuZXcgUHNpRGlyZWN0b3J5W117c3JjRGlyZWN0b3JpZXNbMF19LCB0YXJnZXREaXJlY3Rvcmllc1swXSwgZmFsc2UsIGZhbHNlLCB0cnVlLCBudWxsKS5ydW4oKTsKKyAgICAgIHBvc3RQcm9jZXNzVGFyZ2V0RGlyKHRhcmdldERpcmVjdG9yaWVzWzBdKTsKKyAgICAgIEZpbGVEb2N1bWVudE1hbmFnZXIuZ2V0SW5zdGFuY2UoKS5zYXZlQWxsRG9jdW1lbnRzKCk7CisgICAgfQorCisgICAgcHJvdGVjdGVkIHZvaWQgcG9zdFByb2Nlc3NUYXJnZXREaXIoUHNpRGlyZWN0b3J5IHRhcmdldERpcmVjdG9yeSkgeworICAgIH0KKworICAgIHByb3RlY3RlZCB2b2lkIHByZXByb2Nlc3NTcmNEaXIoUHNpRGlyZWN0b3J5IHNyY0RpcmVjdG9yeSkgeworICAgIH0KKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL3JlZmFjdG9yaW5nL01vdmVQYWNrYWdlTXVsdGlyb290VGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL3JlZmFjdG9yaW5nL01vdmVQYWNrYWdlTXVsdGlyb290VGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRkZDIzODEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovcmVmYWN0b3JpbmcvTW92ZVBhY2thZ2VNdWx0aXJvb3RUZXN0LmphdmEKQEAgLTAsMCArMSw4MiBAQAorLyoKKyAqIENvcHlyaWdodCAyMDAwLTIwMTEgSmV0QnJhaW5zIHMuci5vLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KK3BhY2thZ2UgY29tLmludGVsbGlqLnJlZmFjdG9yaW5nOworCitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkuYXBwbGljYXRpb24uQXBwbGljYXRpb25NYW5hZ2VyOworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLmZpbGVFZGl0b3IuRmlsZURvY3VtZW50TWFuYWdlcjsKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS5yb290cy5Db250ZW50RW50cnk7CitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkucm9vdHMuTW9kaWZpYWJsZVJvb3RNb2RlbDsKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS5yb290cy5Nb2R1bGVSb290TWFuYWdlcjsKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS52ZnMuVmlydHVhbEZpbGU7CitpbXBvcnQgY29tLmludGVsbGlqLnBzaS5KYXZhUHNpRmFjYWRlOworaW1wb3J0IGNvbS5pbnRlbGxpai5wc2kuUHNpTWFuYWdlcjsKK2ltcG9ydCBjb20uaW50ZWxsaWoucHNpLlBzaVBhY2thZ2U7CitpbXBvcnQgY29tLmludGVsbGlqLnJlZmFjdG9yaW5nLm1vdmUubW92ZUNsYXNzZXNPclBhY2thZ2VzLk1vdmVDbGFzc2VzT3JQYWNrYWdlc1Byb2Nlc3NvcjsKK2ltcG9ydCBjb20uaW50ZWxsaWoucmVmYWN0b3JpbmcubW92ZS5tb3ZlQ2xhc3Nlc09yUGFja2FnZXMuTXVsdGlwbGVSb290c01vdmVEZXN0aW5hdGlvbjsKK2ltcG9ydCBjb20uaW50ZWxsaWouSmF2YVRlc3RVdGlsOworaW1wb3J0IGNvbS5pbnRlbGxpai50ZXN0RnJhbWV3b3JrLlBzaVRlc3RVdGlsOworCisvKioKKyAqICBAYXV0aG9yIGRzbAorICovCitwdWJsaWMgY2xhc3MgTW92ZVBhY2thZ2VNdWx0aXJvb3RUZXN0IGV4dGVuZHMgTXVsdGlGaWxlVGVzdENhc2UgeworCisgIEBPdmVycmlkZQorICBwcm90ZWN0ZWQgU3RyaW5nIGdldFRlc3REYXRhUGF0aCgpIHsKKyAgICByZXR1cm4gSmF2YVRlc3RVdGlsLmdldEphdmFUZXN0RGF0YVBhdGgoKTsKKyAgfQorCisgIEBPdmVycmlkZQorICBwcm90ZWN0ZWQgU3RyaW5nIGdldFRlc3RSb290KCkgeworICAgIHJldHVybiAiL3JlZmFjdG9yaW5nL21vdmVQYWNrYWdlTXVsdGlyb290LyI7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0TW92ZVBhY2thZ2UoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoY3JlYXRlQWN0aW9uKG5ldyBTdHJpbmdbXXsicGFjazEifSwgInRhcmdldCIpKTsKKyAgfQorCisgIHByaXZhdGUgUGVyZm9ybUFjdGlvbiBjcmVhdGVBY3Rpb24oZmluYWwgU3RyaW5nW10gcGFja2FnZU5hbWVzLCBmaW5hbCBTdHJpbmcgdGFyZ2V0UGFja2FnZU5hbWUpIHsKKyAgICByZXR1cm4gbmV3IFBlcmZvcm1BY3Rpb24oKSB7CisgICAgICBAT3ZlcnJpZGUKKyAgICAgIHB1YmxpYyB2b2lkIHBlcmZvcm1BY3Rpb24oVmlydHVhbEZpbGUgcm9vdERpciwgVmlydHVhbEZpbGUgcm9vdEFmdGVyKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgZmluYWwgUHNpTWFuYWdlciBtYW5hZ2VyID0gUHNpTWFuYWdlci5nZXRJbnN0YW5jZShteVByb2plY3QpOworICAgICAgICBQc2lQYWNrYWdlW10gc291cmNlUGFja2FnZXMgPSBuZXcgUHNpUGFja2FnZVtwYWNrYWdlTmFtZXMubGVuZ3RoXTsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBwYWNrYWdlTmFtZXMubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICBTdHJpbmcgcGFja2FnZU5hbWUgPSBwYWNrYWdlTmFtZXNbaV07CisgICAgICAgICAgc291cmNlUGFja2FnZXNbaV0gPSBKYXZhUHNpRmFjYWRlLmdldEluc3RhbmNlKG1hbmFnZXIuZ2V0UHJvamVjdCgpKS5maW5kUGFja2FnZShwYWNrYWdlTmFtZSk7CisgICAgICAgICAgYXNzZXJ0Tm90TnVsbChzb3VyY2VQYWNrYWdlc1tpXSk7CisgICAgICAgIH0KKyAgICAgICAgUHNpUGFja2FnZSB0YXJnZXRQYWNrYWdlID0gSmF2YVBzaUZhY2FkZS5nZXRJbnN0YW5jZShtYW5hZ2VyLmdldFByb2plY3QoKSkuZmluZFBhY2thZ2UodGFyZ2V0UGFja2FnZU5hbWUpOworICAgICAgICBhc3NlcnROb3ROdWxsKHRhcmdldFBhY2thZ2UpOworICAgICAgICBuZXcgTW92ZUNsYXNzZXNPclBhY2thZ2VzUHJvY2Vzc29yKG15UHJvamVjdCwgc291cmNlUGFja2FnZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IE11bHRpcGxlUm9vdHNNb3ZlRGVzdGluYXRpb24obmV3IFBhY2thZ2VXcmFwcGVyKHRhcmdldFBhY2thZ2UpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnVlLCB0cnVlLCBudWxsKS5ydW4oKTsKKyAgICAgICAgRmlsZURvY3VtZW50TWFuYWdlci5nZXRJbnN0YW5jZSgpLnNhdmVBbGxEb2N1bWVudHMoKTsKKyAgICAgIH0KKyAgICB9OworICB9CisKKyAgQE92ZXJyaWRlCisgIHByb3RlY3RlZCB2b2lkIHByZXBhcmVQcm9qZWN0KFZpcnR1YWxGaWxlIHJvb3REaXIpIHsKKyAgICBQc2lUZXN0VXRpbC5hZGRDb250ZW50Um9vdChteU1vZHVsZSwgcm9vdERpcik7CisgICAgZmluYWwgVmlydHVhbEZpbGVbXSBjaGlsZHJlbiA9IHJvb3REaXIuZ2V0Q2hpbGRyZW4oKTsKKyAgICBmb3IgKFZpcnR1YWxGaWxlIGNoaWxkIDogY2hpbGRyZW4pIHsKKyAgICAgIGlmIChjaGlsZC5nZXROYW1lKCkuc3RhcnRzV2l0aCgic3JjIikpIHsKKyAgICAgICAgUHNpVGVzdFV0aWwuYWRkU291cmNlUm9vdChteU1vZHVsZSwgY2hpbGQpOworICAgICAgfQorICAgIH0KKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL3JlZmFjdG9yaW5nL01vdmVQYWNrYWdlVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL3JlZmFjdG9yaW5nL01vdmVQYWNrYWdlVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFjMzViZDIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovcmVmYWN0b3JpbmcvTW92ZVBhY2thZ2VUZXN0LmphdmEKQEAgLTAsMCArMSw2OCBAQAorcGFja2FnZSBjb20uaW50ZWxsaWoucmVmYWN0b3Jpbmc7CisKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS5maWxlRWRpdG9yLkZpbGVEb2N1bWVudE1hbmFnZXI7CitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkudmZzLlZpcnR1YWxGaWxlOworaW1wb3J0IGNvbS5pbnRlbGxpai5wc2kuSmF2YVBzaUZhY2FkZTsKK2ltcG9ydCBjb20uaW50ZWxsaWoucHNpLlBzaURpcmVjdG9yeTsKK2ltcG9ydCBjb20uaW50ZWxsaWoucHNpLlBzaVBhY2thZ2U7CitpbXBvcnQgY29tLmludGVsbGlqLnJlZmFjdG9yaW5nLm1vdmUubW92ZUNsYXNzZXNPclBhY2thZ2VzLk1vdmVDbGFzc2VzT3JQYWNrYWdlc1Byb2Nlc3NvcjsKK2ltcG9ydCBjb20uaW50ZWxsaWoucmVmYWN0b3JpbmcubW92ZS5tb3ZlQ2xhc3Nlc09yUGFja2FnZXMuU2luZ2xlU291cmNlUm9vdE1vdmVEZXN0aW5hdGlvbjsKK2ltcG9ydCBjb20uaW50ZWxsaWouSmF2YVRlc3RVdGlsOworCitwdWJsaWMgY2xhc3MgTW92ZVBhY2thZ2VUZXN0IGV4dGVuZHMgTXVsdGlGaWxlVGVzdENhc2UgeworCisgIEBPdmVycmlkZQorICBwcm90ZWN0ZWQgU3RyaW5nIGdldFRlc3REYXRhUGF0aCgpIHsKKyAgICByZXR1cm4gSmF2YVRlc3RVdGlsLmdldEphdmFUZXN0RGF0YVBhdGgoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RNb3ZlU2luZ2xlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KG5ldyBTdHJpbmdbXXsicGFjazEifSwgInRhcmdldCIpOworICB9CisKKy8qIElNUExFTUVOVDogc29mdCByZWZlcmVuY2VzIGluIEpTUAorICBwdWJsaWMgdm9pZCB0ZXN0SnNwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KG5ldyBTdHJpbmdbXXsicGFjazEifSwgInRhcmdldCIpOworICB9CisqLworICBwdWJsaWMgdm9pZCB0ZXN0UXVhbGlmaWVkUmVmKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KG5ldyBTdHJpbmdbXXsicGFja2FnZTEudGVzdCJ9LCAicGFja2FnZTIiKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RJbnNpZGVQYWNrYWdlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KG5ldyBTdHJpbmdbXXsiYSJ9LCAiYS5iIik7CisgIH0KKworICBAT3ZlcnJpZGUKKyAgcHJvdGVjdGVkIFN0cmluZyBnZXRUZXN0Um9vdCgpIHsKKyAgICByZXR1cm4gIi9yZWZhY3RvcmluZy9tb3ZlUGFja2FnZS8iOworICB9CisKKyAgcHJpdmF0ZSB2b2lkIGRvVGVzdChmaW5hbCBTdHJpbmdbXSBwYWNrYWdlTmFtZXMsIGZpbmFsIFN0cmluZyBuZXdQYWNrYWdlTmFtZSkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KG5ldyBQZXJmb3JtQWN0aW9uKCkgeworICAgICAgQE92ZXJyaWRlCisgICAgICBwdWJsaWMgdm9pZCBwZXJmb3JtQWN0aW9uKFZpcnR1YWxGaWxlIHJvb3REaXIsIFZpcnR1YWxGaWxlIHJvb3RBZnRlcikgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIE1vdmVQYWNrYWdlVGVzdC50aGlzLnBlcmZvcm1BY3Rpb24ocGFja2FnZU5hbWVzLCBuZXdQYWNrYWdlTmFtZSk7CisgICAgICB9CisgICAgfSk7CisgIH0KKworICBwcml2YXRlIHZvaWQgcGVyZm9ybUFjdGlvbihTdHJpbmdbXSBwYWNrYWdlTmFtZXMsIFN0cmluZyBuZXdQYWNrYWdlTmFtZSkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZmluYWwgUHNpUGFja2FnZVtdIHBhY2thZ2VzID0gbmV3IFBzaVBhY2thZ2VbcGFja2FnZU5hbWVzLmxlbmd0aF07CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBwYWNrYWdlcy5sZW5ndGg7IGkrKykgeworICAgICAgU3RyaW5nIHBhY2thZ2VOYW1lID0gcGFja2FnZU5hbWVzW2ldOworICAgICAgcGFja2FnZXNbaV0gPSBKYXZhUHNpRmFjYWRlLmdldEluc3RhbmNlKG15UHNpTWFuYWdlci5nZXRQcm9qZWN0KCkpLmZpbmRQYWNrYWdlKHBhY2thZ2VOYW1lKTsKKyAgICAgIGFzc2VydE5vdE51bGwoIlBhY2thZ2UgIiArIHBhY2thZ2VOYW1lICsgIiBub3QgZm91bmQiLCBwYWNrYWdlc1tpXSk7CisgICAgfQorCisgICAgUHNpUGFja2FnZSBuZXdQYXJlbnRQYWNrYWdlID0gSmF2YVBzaUZhY2FkZS5nZXRJbnN0YW5jZShteVBzaU1hbmFnZXIuZ2V0UHJvamVjdCgpKS5maW5kUGFja2FnZShuZXdQYWNrYWdlTmFtZSk7CisgICAgYXNzZXJ0Tm90TnVsbChuZXdQYXJlbnRQYWNrYWdlKTsKKyAgICBmaW5hbCBQc2lEaXJlY3RvcnlbXSBkaXJzID0gbmV3UGFyZW50UGFja2FnZS5nZXREaXJlY3RvcmllcygpOworICAgIGFzc2VydEVxdWFscyhkaXJzLmxlbmd0aCwgMSk7CisKKyAgICBuZXcgTW92ZUNsYXNzZXNPclBhY2thZ2VzUHJvY2Vzc29yKG15UHJvamVjdCwgcGFja2FnZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgU2luZ2xlU291cmNlUm9vdE1vdmVEZXN0aW5hdGlvbihQYWNrYWdlV3JhcHBlci5jcmVhdGUobmV3UGFyZW50UGFja2FnZSksIGRpcnNbMF0pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ1ZSwgZmFsc2UsIG51bGwpLnJ1bigpOworICAgIEZpbGVEb2N1bWVudE1hbmFnZXIuZ2V0SW5zdGFuY2UoKS5zYXZlQWxsRG9jdW1lbnRzKCk7CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9yZWZhY3RvcmluZy9QdWxsVXBNdWx0aWZpbGVUZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovcmVmYWN0b3JpbmcvUHVsbFVwTXVsdGlmaWxlVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE0MzJjZTIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovcmVmYWN0b3JpbmcvUHVsbFVwTXVsdGlmaWxlVGVzdC5qYXZhCkBAIC0wLDAgKzEsMTA4IEBACisvKgorICogQ29weXJpZ2h0IDIwMDAtMjAxMiBKZXRCcmFpbnMgcy5yLm8uCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisvKgorICogVXNlcjogYW5uYQorICogRGF0ZTogMjAtQXVnLTIwMDgKKyAqLworcGFja2FnZSBjb20uaW50ZWxsaWoucmVmYWN0b3Jpbmc7CisKK2ltcG9ydCBjb20uaW50ZWxsaWouSmF2YVRlc3RVdGlsOworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLnZmcy5WaXJ0dWFsRmlsZTsKK2ltcG9ydCBjb20uaW50ZWxsaWoucHNpLio7CitpbXBvcnQgY29tLmludGVsbGlqLnBzaS5zZWFyY2guR2xvYmFsU2VhcmNoU2NvcGU7CitpbXBvcnQgY29tLmludGVsbGlqLnJlZmFjdG9yaW5nLm1lbWJlclB1bGxVcC5QdWxsVXBDb25mbGljdHNVdGlsOworaW1wb3J0IGNvbS5pbnRlbGxpai5yZWZhY3RvcmluZy5tZW1iZXJQdWxsVXAuUHVsbFVwSGVscGVyOworaW1wb3J0IGNvbS5pbnRlbGxpai5yZWZhY3RvcmluZy51dGlsLkRvY0NvbW1lbnRQb2xpY3k7CitpbXBvcnQgY29tLmludGVsbGlqLnJlZmFjdG9yaW5nLnV0aWwuY2xhc3NNZW1iZXJzLkludGVyZmFjZUNvbnRhaW5tZW50VmVyaWZpZXI7CitpbXBvcnQgY29tLmludGVsbGlqLnJlZmFjdG9yaW5nLnV0aWwuY2xhc3NNZW1iZXJzLk1lbWJlckluZm87CitpbXBvcnQgY29tLmludGVsbGlqLnV0aWwuY29udGFpbmVycy5NdWx0aU1hcDsKKworaW1wb3J0IGphdmEudXRpbC5BcnJheXM7CitpbXBvcnQgamF2YS51dGlsLkhhc2hTZXQ7CisKKy8vcHVsbCBmaXJzdCBtZXRob2QgZnJvbSBjbGFzcyBhLkEgdG8gY2xhc3MgYi5CCitwdWJsaWMgY2xhc3MgUHVsbFVwTXVsdGlmaWxlVGVzdCBleHRlbmRzIE11bHRpRmlsZVRlc3RDYXNlIHsKKyAgQE92ZXJyaWRlCisgIHByb3RlY3RlZCBTdHJpbmcgZ2V0VGVzdFJvb3QoKSB7CisgICAgcmV0dXJuICIvcmVmYWN0b3JpbmcvcHVsbFVwLyI7CisgIH0KKworICBAT3ZlcnJpZGUKKyAgcHJvdGVjdGVkIFN0cmluZyBnZXRUZXN0RGF0YVBhdGgoKSB7CisgICAgcmV0dXJuIEphdmFUZXN0VXRpbC5nZXRKYXZhVGVzdERhdGFQYXRoKCk7CisgIH0KKworICBwcml2YXRlIHZvaWQgZG9UZXN0KGZpbmFsIFN0cmluZy4uLiBjb25mbGljdHMpIHRocm93cyBFeGNlcHRpb24geworICAgIGZpbmFsIE11bHRpTWFwPFBzaUVsZW1lbnQsIFN0cmluZz4gY29uZmxpY3RzTWFwID0gbmV3IE11bHRpTWFwPFBzaUVsZW1lbnQsIFN0cmluZz4oKTsKKyAgICBkb1Rlc3QobmV3IFBlcmZvcm1BY3Rpb24oKSB7CisgICAgICBAT3ZlcnJpZGUKKyAgICAgIHB1YmxpYyB2b2lkIHBlcmZvcm1BY3Rpb24oZmluYWwgVmlydHVhbEZpbGUgcm9vdERpciwgZmluYWwgVmlydHVhbEZpbGUgcm9vdEFmdGVyKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgZmluYWwgUHNpQ2xhc3Mgc3JjQ2xhc3MgPSBteUphdmFGYWNhZGUuZmluZENsYXNzKCJhLkEiLCBHbG9iYWxTZWFyY2hTY29wZS5hbGxTY29wZShteVByb2plY3QpKTsKKyAgICAgICAgYXNzZXJ0VHJ1ZSgiU291cmNlIGNsYXNzIG5vdCBmb3VuZCIsIHNyY0NsYXNzICE9IG51bGwpOworCisgICAgICAgIGZpbmFsIFBzaUNsYXNzIHRhcmdldENsYXNzID0gbXlKYXZhRmFjYWRlLmZpbmRDbGFzcygiYi5CIiwgR2xvYmFsU2VhcmNoU2NvcGUuYWxsU2NvcGUobXlQcm9qZWN0KSk7CisgICAgICAgIGFzc2VydFRydWUoIlRhcmdldCBjbGFzcyBub3QgZm91bmQiLCB0YXJnZXRDbGFzcyAhPSBudWxsKTsKKworICAgICAgICBmaW5hbCBQc2lNZXRob2RbXSBtZXRob2RzID0gc3JjQ2xhc3MuZ2V0TWV0aG9kcygpOworICAgICAgICBhc3NlcnRUcnVlKCJObyBtZXRob2RzIGZvdW5kIiwgbWV0aG9kcy5sZW5ndGggPiAwKTsKKyAgICAgICAgZmluYWwgTWVtYmVySW5mb1tdIG1lbWJlcnNUb01vdmUgPSBuZXcgTWVtYmVySW5mb1sxXTsKKyAgICAgICAgZmluYWwgTWVtYmVySW5mbyBtZW1iZXJJbmZvID0gbmV3IE1lbWJlckluZm8obWV0aG9kc1swXSk7CisgICAgICAgIG1lbWJlckluZm8uc2V0Q2hlY2tlZCh0cnVlKTsKKyAgICAgICAgbWVtYmVyc1RvTW92ZVswXSA9IG1lbWJlckluZm87CisKKyAgICAgICAgZmluYWwgUHNpRGlyZWN0b3J5IHRhcmdldERpcmVjdG9yeSA9IHRhcmdldENsYXNzLmdldENvbnRhaW5pbmdGaWxlKCkuZ2V0Q29udGFpbmluZ0RpcmVjdG9yeSgpOworICAgICAgICBmaW5hbCBQc2lQYWNrYWdlIHRhcmdldFBhY2thZ2UgPSB0YXJnZXREaXJlY3RvcnkgIT0gbnVsbCA/IEphdmFEaXJlY3RvcnlTZXJ2aWNlLmdldEluc3RhbmNlKCkuZ2V0UGFja2FnZSh0YXJnZXREaXJlY3RvcnkpIDogbnVsbDsKKyAgICAgICAgY29uZmxpY3RzTWFwLnB1dEFsbFZhbHVlcygKKyAgICAgICAgICBQdWxsVXBDb25mbGljdHNVdGlsLmNoZWNrQ29uZmxpY3RzKG1lbWJlcnNUb01vdmUsIHNyY0NsYXNzLCB0YXJnZXRDbGFzcywgdGFyZ2V0UGFja2FnZSwgdGFyZ2V0RGlyZWN0b3J5LCBuZXcgSW50ZXJmYWNlQ29udGFpbm1lbnRWZXJpZmllcigpIHsKKyAgICAgICAgICAgIEBPdmVycmlkZQorICAgICAgICAgICAgcHVibGljIGJvb2xlYW4gY2hlY2tlZEludGVyZmFjZXNDb250YWluKFBzaU1ldGhvZCBwc2lNZXRob2QpIHsKKyAgICAgICAgICAgICAgcmV0dXJuIFB1bGxVcEhlbHBlci5jaGVja2VkSW50ZXJmYWNlc0NvbnRhaW4oQXJyYXlzLmFzTGlzdChtZW1iZXJzVG9Nb3ZlKSwgcHNpTWV0aG9kKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9KSk7CisKKyAgICAgICAgbmV3IFB1bGxVcEhlbHBlcihzcmNDbGFzcywgdGFyZ2V0Q2xhc3MsIG1lbWJlcnNUb01vdmUsIG5ldyBEb2NDb21tZW50UG9saWN5KERvY0NvbW1lbnRQb2xpY3kuQVNJUykpLnJ1bigpOworICAgICAgfQorICAgIH0pOworCisgICAgaWYgKGNvbmZsaWN0cy5sZW5ndGggIT0gMCAmJiBjb25mbGljdHNNYXAuaXNFbXB0eSgpKSB7CisgICAgICBmYWlsKCJDb25mbGljdCB3YXMgbm90IGRldGVjdGVkIik7CisgICAgfQorICAgIGZpbmFsIEhhc2hTZXQ8U3RyaW5nPiB2YWx1ZXMgPSBuZXcgSGFzaFNldDxTdHJpbmc+KGNvbmZsaWN0c01hcC52YWx1ZXMoKSk7CisgICAgZmluYWwgSGFzaFNldDxTdHJpbmc+IGV4cGVjdGVkID0gbmV3IEhhc2hTZXQ8U3RyaW5nPihBcnJheXMuYXNMaXN0KGNvbmZsaWN0cykpOworCisgICAgYXNzZXJ0RXF1YWxzKGV4cGVjdGVkLnNpemUoKSwgdmFsdWVzLnNpemUoKSk7CisgICAgZm9yIChTdHJpbmcgdmFsdWUgOiB2YWx1ZXMpIHsKKyAgICAgIGlmICghZXhwZWN0ZWQuY29udGFpbnModmFsdWUpKSB7CisgICAgICAgIGZhaWwoIkNvbmZsaWN0OiAiICsgdmFsdWUgKyAiIGlzIHVuZXhwZWN0ZWRseSByZXBvcnRlZCIpOworICAgICAgfQorICAgIH0KKyAgfQorCisKKyAgcHVibGljIHZvaWQgdGVzdEluYWNjZXNzaWJsZSgpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdCgiTWV0aG9kIDxiPjxjb2RlPkEuZm9vKCk8L2NvZGU+PC9iPiBpcyBwYWNrYWdlIGxvY2FsIGFuZCB3aWxsIG5vdCBiZSBhY2Nlc3NpYmxlIGZyb20gbWV0aG9kIDxiPjxjb2RlPm1ldGhvZDJNb3ZlKCk8L2NvZGU+PC9iPi4iLAorICAgICAgICAgICAiTWV0aG9kIDxiPjxjb2RlPm1ldGhvZDJNb3ZlKCk8L2NvZGU+PC9iPiB1c2VzIG1ldGhvZCA8Yj48Y29kZT5BLmZvbygpPC9jb2RlPjwvYj4sIHdoaWNoIGlzIG5vdCBtb3ZlZCB0byB0aGUgc3VwZXJjbGFzcyIpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFJldXNlU3VwZXJNZXRob2QoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoKTsKKyAgfQorCisgICBwdWJsaWMgdm9pZCB0ZXN0UmV1c2VTdXBlclN1cGVyTWV0aG9kKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KCk7CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9yZWZhY3RvcmluZy9QdWxsVXBUZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovcmVmYWN0b3JpbmcvUHVsbFVwVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUzMzVkNGQKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovcmVmYWN0b3JpbmcvUHVsbFVwVGVzdC5qYXZhCkBAIC0wLDAgKzEsMTg5IEBACisvKgorICogQ29weXJpZ2h0IDIwMDAtMjAxMiBKZXRCcmFpbnMgcy5yLm8uCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworcGFja2FnZSBjb20uaW50ZWxsaWoucmVmYWN0b3Jpbmc7CisKK2ltcG9ydCBjb20uaW50ZWxsaWouSmF2YVRlc3RVdGlsOworaW1wb3J0IGNvbS5pbnRlbGxpai5wb20uamF2YS5MYW5ndWFnZUxldmVsOworaW1wb3J0IGNvbS5pbnRlbGxpai5wc2kuKjsKK2ltcG9ydCBjb20uaW50ZWxsaWoucHNpLnV0aWwuUHNpVHJlZVV0aWw7CitpbXBvcnQgY29tLmludGVsbGlqLnJlZmFjdG9yaW5nLmxpc3RlbmVycy5KYXZhUmVmYWN0b3JpbmdMaXN0ZW5lck1hbmFnZXI7CitpbXBvcnQgY29tLmludGVsbGlqLnJlZmFjdG9yaW5nLmxpc3RlbmVycy5Nb3ZlTWVtYmVyTGlzdGVuZXI7CitpbXBvcnQgY29tLmludGVsbGlqLnJlZmFjdG9yaW5nLm1lbWJlclB1bGxVcC5QdWxsVXBIZWxwZXI7CitpbXBvcnQgY29tLmludGVsbGlqLnJlZmFjdG9yaW5nLnV0aWwuRG9jQ29tbWVudFBvbGljeTsKK2ltcG9ydCBjb20uaW50ZWxsaWoucmVmYWN0b3JpbmcudXRpbC5jbGFzc01lbWJlcnMuTWVtYmVySW5mbzsKK2ltcG9ydCBjb20uaW50ZWxsaWoudXRpbC51aS5VSVV0aWw7CitpbXBvcnQgb3JnLmpldGJyYWlucy5hbm5vdGF0aW9ucy5Ob3ROdWxsOworCisvKioKKyAqIEBhdXRob3IgdmVuCisgKi8KK3B1YmxpYyBjbGFzcyBQdWxsVXBUZXN0IGV4dGVuZHMgTGlnaHRSZWZhY3RvcmluZ1Rlc3RDYXNlIHsKKyAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEJBU0VfUEFUSCA9ICIvcmVmYWN0b3JpbmcvcHVsbFVwLyI7CisKKyAgcHVibGljIHZvaWQgdGVzdFF1YWxpZmllZFRoaXMoKSB7CisgICAgZG9UZXN0KG5ldyBSZWZhY3RvcmluZ1Rlc3RVdGlsLk1lbWJlckRlc2NyaXB0b3IoIklubmVyIiwgUHNpQ2xhc3MuY2xhc3MpKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RRdWFsaWZpZWRTdXBlcigpIHsKKyAgICBkb1Rlc3QobmV3IFJlZmFjdG9yaW5nVGVzdFV0aWwuTWVtYmVyRGVzY3JpcHRvcigiSW5uZXIiLCBQc2lDbGFzcy5jbGFzcykpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFF1YWxpZmllZFJlZmVyZW5jZSgpIHsgICAgIC8vIElERUFERVYtMjUwMDgKKyAgICBkb1Rlc3QobmV3IFJlZmFjdG9yaW5nVGVzdFV0aWwuTWVtYmVyRGVzY3JpcHRvcigieCIsIFBzaUZpZWxkLmNsYXNzKSwKKyAgICAgICAgICAgbmV3IFJlZmFjdG9yaW5nVGVzdFV0aWwuTWVtYmVyRGVzY3JpcHRvcigiZ2V0WCIsIFBzaU1ldGhvZC5jbGFzcyksCisgICAgICAgICAgIG5ldyBSZWZhY3RvcmluZ1Rlc3RVdGlsLk1lbWJlckRlc2NyaXB0b3IoInNldFgiLCBQc2lNZXRob2QuY2xhc3MpKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RQdWxsVXBJbmhlcml0ZWRTdGF0aWNDbGFzc2VzKCkgeworICAgIGRvVGVzdChuZXcgUmVmYWN0b3JpbmdUZXN0VXRpbC5NZW1iZXJEZXNjcmlwdG9yKCJDIiwgUHNpQ2xhc3MuY2xhc3MpLAorICAgICAgICAgICBuZXcgUmVmYWN0b3JpbmdUZXN0VXRpbC5NZW1iZXJEZXNjcmlwdG9yKCJEIiwgUHNpQ2xhc3MuY2xhc3MpKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RQdWxsVXBQcml2YXRlSW5uZXJDbGFzc1dpdGhQcml2YXRlQ29uc3RydWN0b3IoKSB7CisgICAgZG9UZXN0KG5ldyBSZWZhY3RvcmluZ1Rlc3RVdGlsLk1lbWJlckRlc2NyaXB0b3IoIkMiLCBQc2lDbGFzcy5jbGFzcykpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFB1bGxVcEFuZE1ha2VBYnN0cmFjdCgpIHsKKyAgICBkb1Rlc3QobmV3IFJlZmFjdG9yaW5nVGVzdFV0aWwuTWVtYmVyRGVzY3JpcHRvcigiYSIsIFBzaU1ldGhvZC5jbGFzcyksCisgICAgICAgICAgIG5ldyBSZWZhY3RvcmluZ1Rlc3RVdGlsLk1lbWJlckRlc2NyaXB0b3IoImIiLCBQc2lNZXRob2QuY2xhc3MsIHRydWUpKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RUcnlDYXRjaEZpZWxkSW5pdGlhbGl6ZXIoKSB7CisgICAgZG9UZXN0KG5ldyBSZWZhY3RvcmluZ1Rlc3RVdGlsLk1lbWJlckRlc2NyaXB0b3IoImZpZWxkIiwgUHNpRmllbGQuY2xhc3MpKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RJZkZpZWxkSW5pdGlhbGl6YXRpb25XaXRoTm9uTW92ZWRGaWVsZCgpIHsKKyAgICBkb1Rlc3QobmV3IFJlZmFjdG9yaW5nVGVzdFV0aWwuTWVtYmVyRGVzY3JpcHRvcigiZiIsIFBzaUZpZWxkLmNsYXNzKSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0SWZGaWVsZE1vdmVkSW5pdGlhbGl6YXRpb24oKSB7CisgICAgZG9UZXN0KG5ldyBSZWZhY3RvcmluZ1Rlc3RVdGlsLk1lbWJlckRlc2NyaXB0b3IoImYiLCBQc2lGaWVsZC5jbGFzcykpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdE11bHRpcGxlQ29uc3RydWN0b3JzRmllbGRJbml0aWFsaXphdGlvbigpIHsKKyAgICBkb1Rlc3QobmV3IFJlZmFjdG9yaW5nVGVzdFV0aWwuTWVtYmVyRGVzY3JpcHRvcigiZiIsIFBzaUZpZWxkLmNsYXNzKSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0TXVsdGlwbGVDb25zdHJ1Y3RvcnNGaWVsZEluaXRpYWxpemF0aW9uTm9Hb29kKCkgeworICAgIGRvVGVzdChuZXcgUmVmYWN0b3JpbmdUZXN0VXRpbC5NZW1iZXJEZXNjcmlwdG9yKCJmIiwgUHNpRmllbGQuY2xhc3MpKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RSZW1vdmVPdmVycmlkZSgpIHsKKyAgICBzZXRMYW5ndWFnZUxldmVsKExhbmd1YWdlTGV2ZWwuSkRLXzFfNSk7CisgICAgZG9UZXN0KG5ldyBSZWZhY3RvcmluZ1Rlc3RVdGlsLk1lbWJlckRlc2NyaXB0b3IoImdldCIsIFBzaU1ldGhvZC5jbGFzcykpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFR5cGVQYXJhbUVyYXN1cmUoKSB7CisgICAgZG9UZXN0KG5ldyBSZWZhY3RvcmluZ1Rlc3RVdGlsLk1lbWJlckRlc2NyaXB0b3IoImYiLCBQc2lGaWVsZC5jbGFzcykpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFR5cGVQYXJhbVN1YnN0KCkgeworICAgIGRvVGVzdChuZXcgUmVmYWN0b3JpbmdUZXN0VXRpbC5NZW1iZXJEZXNjcmlwdG9yKCJmIiwgUHNpRmllbGQuY2xhc3MpKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RUeXBlQXJndW1lbnQoKSB7CisgICAgZG9UZXN0KG5ldyBSZWZhY3RvcmluZ1Rlc3RVdGlsLk1lbWJlckRlc2NyaXB0b3IoImYiLCBQc2lGaWVsZC5jbGFzcykpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEdlbmVyaWNzSW5BYnN0cmFjdE1ldGhvZCgpIHsKKyAgICBkb1Rlc3QobmV3IFJlZmFjdG9yaW5nVGVzdFV0aWwuTWVtYmVyRGVzY3JpcHRvcigibWV0aG9kIiwgUHNpTWV0aG9kLmNsYXNzLCB0cnVlKSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0UmVwbGFjZUR1cGxpY2F0ZXNJbkluaGVyaXRvcnMoKSB7CisgICAgZG9UZXN0KG5ldyBSZWZhY3RvcmluZ1Rlc3RVdGlsLk1lbWJlckRlc2NyaXB0b3IoImZvbyIsIFBzaU1ldGhvZC5jbGFzcywgZmFsc2UpKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RHZW5lcmljc0luSW1wbGVtZW50cygpIHsKKyAgICBkb1Rlc3QoZmFsc2UsIG5ldyBSZWZhY3RvcmluZ1Rlc3RVdGlsLk1lbWJlckRlc2NyaXB0b3IoIkkiLCBQc2lDbGFzcy5jbGFzcykpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFVwZGF0ZVN0YXRpY1JlZnMoKSB7CisgICAgZG9UZXN0KGZhbHNlLCBuZXcgUmVmYWN0b3JpbmdUZXN0VXRpbC5NZW1iZXJEZXNjcmlwdG9yKCJmb28iLCBQc2lNZXRob2QuY2xhc3MpKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RSZW1vdmVPdmVycmlkZUZyb21QdWxsZWRNZXRob2QoKSB7CisgICAgZG9UZXN0KGZhbHNlLCBuZXcgUmVmYWN0b3JpbmdUZXN0VXRpbC5NZW1iZXJEZXNjcmlwdG9yKCJmb28iLCBQc2lNZXRob2QuY2xhc3MpKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RQcmVzZXJ2ZU92ZXJyaWRlSW5QdWxsZWRNZXRob2QoKSB7CisgICAgZG9UZXN0KGZhbHNlLCBuZXcgUmVmYWN0b3JpbmdUZXN0VXRpbC5NZW1iZXJEZXNjcmlwdG9yKCJmb28iLCBQc2lNZXRob2QuY2xhc3MpKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RNZXJnZUludGVyZmFjZXMoKSB7CisgICAgZG9UZXN0KGZhbHNlLCBuZXcgUmVmYWN0b3JpbmdUZXN0VXRpbC5NZW1iZXJEZXNjcmlwdG9yKCJJIiwgUHNpQ2xhc3MuY2xhc3MpKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RUeXBlUGFyYW1zQ29uZmxpY3RpbmdOYW1lcygpIHsKKyAgICBkb1Rlc3QoZmFsc2UsIG5ldyBSZWZhY3RvcmluZ1Rlc3RVdGlsLk1lbWJlckRlc2NyaXB0b3IoImZvbyIsIFBzaU1ldGhvZC5jbGFzcykpOworICB9IAorCisgIHB1YmxpYyB2b2lkIHRlc3RFc2NhbGF0ZVZpc2liaWxpdHkoKSB7CisgICAgZG9UZXN0KGZhbHNlLCBuZXcgUmVmYWN0b3JpbmdUZXN0VXRpbC5NZW1iZXJEZXNjcmlwdG9yKCJmb28iLCBQc2lNZXRob2QuY2xhc3MpKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RFeHRlbnNpb25NZXRob2QoKSB7CisgICAgZG9UZXN0KGZhbHNlLCBuZXcgUmVmYWN0b3JpbmdUZXN0VXRpbC5NZW1iZXJEZXNjcmlwdG9yKCJmb28iLCBQc2lNZXRob2QuY2xhc3MpKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RQcmVzZXJ2ZU92ZXJyaWRlKCkgeworICAgIGRvVGVzdChmYWxzZSwgbmV3IFJlZmFjdG9yaW5nVGVzdFV0aWwuTWVtYmVyRGVzY3JpcHRvcigiZm9vIiwgUHNpTWV0aG9kLmNsYXNzKSk7CisgIH0KKworICBwcml2YXRlIHZvaWQgZG9UZXN0KFJlZmFjdG9yaW5nVGVzdFV0aWwuTWVtYmVyRGVzY3JpcHRvci4uLiBtZW1iZXJzVG9GaW5kKSB7CisgICAgZG9UZXN0KHRydWUsIG1lbWJlcnNUb0ZpbmQpOworICB9CisKKyAgcHJpdmF0ZSB2b2lkIGRvVGVzdChmaW5hbCBib29sZWFuIGNoZWNrTWVtYmVyc01vdmVkQ291bnQsIFJlZmFjdG9yaW5nVGVzdFV0aWwuTWVtYmVyRGVzY3JpcHRvci4uLiBtZW1iZXJzVG9GaW5kKSB7CisgICAgY29uZmlndXJlQnlGaWxlKEJBU0VfUEFUSCArIGdldFRlc3ROYW1lKGZhbHNlKSArICIuamF2YSIpOworICAgIFBzaUVsZW1lbnQgZWxlbWVudEF0ID0gZ2V0RmlsZSgpLmZpbmRFbGVtZW50QXQoZ2V0RWRpdG9yKCkuZ2V0Q2FyZXRNb2RlbCgpLmdldE9mZnNldCgpKTsKKyAgICBmaW5hbCBQc2lDbGFzcyBzb3VyY2VDbGFzcyA9IFBzaVRyZWVVdGlsLmdldFBhcmVudE9mVHlwZShlbGVtZW50QXQsIFBzaUNsYXNzLmNsYXNzKTsKKyAgICBhc3NlcnROb3ROdWxsKHNvdXJjZUNsYXNzKTsKKworICAgIFBzaUNsYXNzIHRhcmdldENsYXNzID0gc291cmNlQ2xhc3MuZ2V0U3VwZXJDbGFzcygpOworICAgIGFzc2VydE5vdE51bGwodGFyZ2V0Q2xhc3MpOworICAgIGlmICghdGFyZ2V0Q2xhc3MuaXNXcml0YWJsZSgpKSB7CisgICAgICBmaW5hbCBQc2lDbGFzc1tdIGludGVyZmFjZXMgPSBzb3VyY2VDbGFzcy5nZXRJbnRlcmZhY2VzKCk7CisgICAgICBhc3NlcnRFcXVhbHMoMSwgaW50ZXJmYWNlcy5sZW5ndGgpOworICAgICAgYXNzZXJ0VHJ1ZShpbnRlcmZhY2VzWzBdLmlzV3JpdGFibGUoKSk7CisgICAgICB0YXJnZXRDbGFzcyA9IGludGVyZmFjZXNbMF07CisgICAgfQorICAgIE1lbWJlckluZm9bXSBpbmZvcyA9IFJlZmFjdG9yaW5nVGVzdFV0aWwuZmluZE1lbWJlcnMoc291cmNlQ2xhc3MsIG1lbWJlcnNUb0ZpbmQpOworCisgICAgZmluYWwgaW50W10gY291bnRNb3ZlZCA9IHswfTsKKyAgICBmaW5hbCBNb3ZlTWVtYmVyTGlzdGVuZXIgbGlzdGVuZXIgPSBuZXcgTW92ZU1lbWJlckxpc3RlbmVyKCkgeworICAgICAgQE92ZXJyaWRlCisgICAgICBwdWJsaWMgdm9pZCBtZW1iZXJNb3ZlZChQc2lDbGFzcyBhQ2xhc3MsIFBzaU1lbWJlciBtZW1iZXIpIHsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKHNvdXJjZUNsYXNzLCBhQ2xhc3MpOworICAgICAgICBjb3VudE1vdmVkWzBdKys7CisgICAgICB9CisgICAgfTsKKyAgICBKYXZhUmVmYWN0b3JpbmdMaXN0ZW5lck1hbmFnZXIuZ2V0SW5zdGFuY2UoZ2V0UHJvamVjdCgpKS5hZGRNb3ZlTWVtYmVyc0xpc3RlbmVyKGxpc3RlbmVyKTsKKyAgICBmaW5hbCBQdWxsVXBIZWxwZXIgaGVscGVyID0gbmV3IFB1bGxVcEhlbHBlcihzb3VyY2VDbGFzcywgdGFyZ2V0Q2xhc3MsIGluZm9zLCBuZXcgRG9jQ29tbWVudFBvbGljeShEb2NDb21tZW50UG9saWN5LkFTSVMpKTsKKyAgICBoZWxwZXIucnVuKCk7CisgICAgVUlVdGlsLmRpc3BhdGNoQWxsSW52b2NhdGlvbkV2ZW50cygpOworICAgIEphdmFSZWZhY3RvcmluZ0xpc3RlbmVyTWFuYWdlci5nZXRJbnN0YW5jZShnZXRQcm9qZWN0KCkpLnJlbW92ZU1vdmVNZW1iZXJzTGlzdGVuZXIobGlzdGVuZXIpOworICAgIGlmIChjaGVja01lbWJlcnNNb3ZlZENvdW50KSB7CisgICAgICBhc3NlcnRFcXVhbHMoY291bnRNb3ZlZFswXSwgbWVtYmVyc1RvRmluZC5sZW5ndGgpOworICAgIH0KKyAgICBjaGVja1Jlc3VsdEJ5RmlsZShCQVNFX1BBVEggKyBnZXRUZXN0TmFtZShmYWxzZSkgKyAiX2FmdGVyLmphdmEiKTsKKyAgfQorCisgIEBOb3ROdWxsCisgIEBPdmVycmlkZQorICBwcm90ZWN0ZWQgU3RyaW5nIGdldFRlc3REYXRhUGF0aCgpIHsKKyAgICByZXR1cm4gSmF2YVRlc3RVdGlsLmdldEphdmFUZXN0RGF0YVBhdGgoKTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL3JlZmFjdG9yaW5nL1B1c2hEb3duTXVsdGlmaWxlVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL3JlZmFjdG9yaW5nL1B1c2hEb3duTXVsdGlmaWxlVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMxMGE2Y2QKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovcmVmYWN0b3JpbmcvUHVzaERvd25NdWx0aWZpbGVUZXN0LmphdmEKQEAgLTAsMCArMSwxNDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwMC0yMDEyIEpldEJyYWlucyBzLnIuby4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKy8qCisgKiBVc2VyOiBhbm5hCisgKiBEYXRlOiAyMC1BdWctMjAwOAorICovCitwYWNrYWdlIGNvbS5pbnRlbGxpai5yZWZhY3RvcmluZzsKKworaW1wb3J0IGNvbS5pbnRlbGxpai5KYXZhVGVzdFV0aWw7CitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkudmZzLlZpcnR1YWxGaWxlOworaW1wb3J0IGNvbS5pbnRlbGxpai5wc2kuUHNpQ2xhc3M7CitpbXBvcnQgY29tLmludGVsbGlqLnBzaS5Qc2lGaWVsZDsKK2ltcG9ydCBjb20uaW50ZWxsaWoucHNpLlBzaU1ldGhvZDsKK2ltcG9ydCBjb20uaW50ZWxsaWoucHNpLnNlYXJjaC5HbG9iYWxTZWFyY2hTY29wZTsKK2ltcG9ydCBjb20uaW50ZWxsaWoucmVmYWN0b3JpbmcubWVtYmVyUHVzaERvd24uUHVzaERvd25Qcm9jZXNzb3I7CitpbXBvcnQgY29tLmludGVsbGlqLnJlZmFjdG9yaW5nLnV0aWwuRG9jQ29tbWVudFBvbGljeTsKK2ltcG9ydCBjb20uaW50ZWxsaWoucmVmYWN0b3JpbmcudXRpbC5jbGFzc01lbWJlcnMuTWVtYmVySW5mbzsKKworLy9wdXNoIGZpcnN0IG1ldGhvZCBmcm9tIGNsYXNzIGEuQSB0byBjbGFzcyBiLkIKK3B1YmxpYyBjbGFzcyBQdXNoRG93bk11bHRpZmlsZVRlc3QgZXh0ZW5kcyBNdWx0aUZpbGVUZXN0Q2FzZSB7CisgIEBPdmVycmlkZQorICBwcm90ZWN0ZWQgU3RyaW5nIGdldFRlc3RSb290KCkgeworICAgIHJldHVybiAiL3JlZmFjdG9yaW5nL3B1c2hEb3duLyI7CisgIH0KKworICBAT3ZlcnJpZGUKKyAgcHJvdGVjdGVkIFN0cmluZyBnZXRUZXN0RGF0YVBhdGgoKSB7CisgICAgcmV0dXJuIEphdmFUZXN0VXRpbC5nZXRKYXZhVGVzdERhdGFQYXRoKCk7CisgIH0KKworICBwcml2YXRlIHZvaWQgZG9UZXN0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KGZhbHNlKTsKKyAgfQorCisgIHByaXZhdGUgdm9pZCBkb1Rlc3QoZmluYWwgYm9vbGVhbiBmYWlsKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoZmFpbCwgImEuQSIsICJiLkIiKTsKKyAgfQorCisgIHByaXZhdGUgdm9pZCBkb1Rlc3QoZmluYWwgYm9vbGVhbiBmYWlsLCBmaW5hbCBTdHJpbmcgc291cmNlQ2xhc3NOYW1lLCBmaW5hbCBTdHJpbmcgdGFyZ2V0Q2xhc3NOYW1lKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICB0cnkgeworICAgICAgZG9UZXN0KG5ldyBQZXJmb3JtQWN0aW9uKCkgeworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIHZvaWQgcGVyZm9ybUFjdGlvbihmaW5hbCBWaXJ0dWFsRmlsZSByb290RGlyLCBmaW5hbCBWaXJ0dWFsRmlsZSByb290QWZ0ZXIpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICAgIGZpbmFsIFBzaUNsYXNzIHNyY0NsYXNzID0gbXlKYXZhRmFjYWRlLmZpbmRDbGFzcyhzb3VyY2VDbGFzc05hbWUsIEdsb2JhbFNlYXJjaFNjb3BlLmFsbFNjb3BlKG15UHJvamVjdCkpOworICAgICAgICAgIGFzc2VydFRydWUoIlNvdXJjZSBjbGFzcyBub3QgZm91bmQiLCBzcmNDbGFzcyAhPSBudWxsKTsKKworICAgICAgICAgIGZpbmFsIFBzaUNsYXNzIHRhcmdldENsYXNzID0gbXlKYXZhRmFjYWRlLmZpbmRDbGFzcyh0YXJnZXRDbGFzc05hbWUsIEdsb2JhbFNlYXJjaFNjb3BlLmFsbFNjb3BlKG15UHJvamVjdCkpOworICAgICAgICAgIGFzc2VydFRydWUoIlRhcmdldCBjbGFzcyBub3QgZm91bmQiLCB0YXJnZXRDbGFzcyAhPSBudWxsKTsKKworICAgICAgICAgIGZpbmFsIFBzaU1ldGhvZFtdIG1ldGhvZHMgPSBzcmNDbGFzcy5nZXRNZXRob2RzKCk7CisgICAgICAgICAgYXNzZXJ0VHJ1ZSgiTm8gbWV0aG9kcyBmb3VuZCIsIG1ldGhvZHMubGVuZ3RoID4gMCk7CisgICAgICAgICAgZmluYWwgTWVtYmVySW5mb1tdIG1lbWJlcnNUb01vdmUgPSBuZXcgTWVtYmVySW5mb1sxXTsKKyAgICAgICAgICBmaW5hbCBNZW1iZXJJbmZvIG1lbWJlckluZm8gPSBuZXcgTWVtYmVySW5mbyhtZXRob2RzWzBdKTsKKyAgICAgICAgICBtZW1iZXJJbmZvLnNldENoZWNrZWQodHJ1ZSk7CisgICAgICAgICAgbWVtYmVyc1RvTW92ZVswXSA9IG1lbWJlckluZm87CisKKyAgICAgICAgICBuZXcgUHVzaERvd25Qcm9jZXNzb3IoZ2V0UHJvamVjdCgpLCBtZW1iZXJzVG9Nb3ZlLCBzcmNDbGFzcywgbmV3IERvY0NvbW1lbnRQb2xpY3koRG9jQ29tbWVudFBvbGljeS5BU0lTKSkucnVuKCk7CisKKworICAgICAgICAgIC8vTG9jYWxGaWxlU3lzdGVtLmdldEluc3RhbmNlKCkucmVmcmVzaChmYWxzZSk7CisgICAgICAgICAgLy9GaWxlRG9jdW1lbnRNYW5hZ2VyLmdldEluc3RhbmNlKCkuc2F2ZUFsbERvY3VtZW50cygpOworICAgICAgICB9CisgICAgICB9KTsKKyAgICB9CisgICAgY2F0Y2ggKEJhc2VSZWZhY3RvcmluZ1Byb2Nlc3Nvci5Db25mbGljdHNJblRlc3RzRXhjZXB0aW9uIGUpIHsKKyAgICAgIGlmIChmYWlsKSB7CisgICAgICAgIHJldHVybjsKKyAgICAgIH0KKyAgICAgIGVsc2UgeworICAgICAgICB0aHJvdyBlOworICAgICAgfQorICAgIH0KKyAgICBpZiAoZmFpbCkgeworICAgICAgZmFpbCgiQ29uZmxpY3Qgd2FzIG5vdCBkZXRlY3RlZCIpOworICAgIH0KKyAgfQorCisKKyAgcHVibGljIHZvaWQgdGVzdFN0YXRpY0ltcG9ydHNJbnNpZGVQdXNoZWRNZXRob2QoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RTdGF0aWNJbXBvcnRPZlB1c2hlZE1ldGhvZCgpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdCgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFJldXNlT3ZlcnJpZGVNZXRob2QoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RGcm9tSW50ZXJmYWNlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KGZhbHNlLCAiYS5JIiwgImEuSTEiKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RVc2FnZXNJblhtbCgpIHRocm93cyBFeGNlcHRpb24geworICAgIHRyeSB7CisgICAgICBkb1Rlc3QobmV3IFBlcmZvcm1BY3Rpb24oKSB7CisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgdm9pZCBwZXJmb3JtQWN0aW9uKGZpbmFsIFZpcnR1YWxGaWxlIHJvb3REaXIsIGZpbmFsIFZpcnR1YWxGaWxlIHJvb3RBZnRlcikgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgICAgZmluYWwgUHNpQ2xhc3Mgc3JjQ2xhc3MgPSBteUphdmFGYWNhZGUuZmluZENsYXNzKCJhLkEiLCBHbG9iYWxTZWFyY2hTY29wZS5hbGxTY29wZShteVByb2plY3QpKTsKKyAgICAgICAgICBhc3NlcnRUcnVlKCJTb3VyY2UgY2xhc3Mgbm90IGZvdW5kIiwgc3JjQ2xhc3MgIT0gbnVsbCk7CisKKyAgICAgICAgICBmaW5hbCBQc2lDbGFzcyB0YXJnZXRDbGFzcyA9IG15SmF2YUZhY2FkZS5maW5kQ2xhc3MoImIuQiIsIEdsb2JhbFNlYXJjaFNjb3BlLmFsbFNjb3BlKG15UHJvamVjdCkpOworICAgICAgICAgIGFzc2VydFRydWUoIlRhcmdldCBjbGFzcyBub3QgZm91bmQiLCB0YXJnZXRDbGFzcyAhPSBudWxsKTsKKworICAgICAgICAgIGZpbmFsIFBzaUZpZWxkW10gZmllbGRzID0gc3JjQ2xhc3MuZ2V0RmllbGRzKCk7CisgICAgICAgICAgYXNzZXJ0VHJ1ZSgiTm8gbWV0aG9kcyBmb3VuZCIsIGZpZWxkcy5sZW5ndGggPiAwKTsKKyAgICAgICAgICBmaW5hbCBNZW1iZXJJbmZvW10gbWVtYmVyc1RvTW92ZSA9IG5ldyBNZW1iZXJJbmZvWzFdOworICAgICAgICAgIGZpbmFsIE1lbWJlckluZm8gbWVtYmVySW5mbyA9IG5ldyBNZW1iZXJJbmZvKGZpZWxkc1swXSk7CisgICAgICAgICAgbWVtYmVySW5mby5zZXRDaGVja2VkKHRydWUpOworICAgICAgICAgIG1lbWJlcnNUb01vdmVbMF0gPSBtZW1iZXJJbmZvOworCisgICAgICAgICAgbmV3IFB1c2hEb3duUHJvY2Vzc29yKGdldFByb2plY3QoKSwgbWVtYmVyc1RvTW92ZSwgc3JjQ2xhc3MsIG5ldyBEb2NDb21tZW50UG9saWN5KERvY0NvbW1lbnRQb2xpY3kuQVNJUykpLnJ1bigpOworCisKKyAgICAgICAgICAvL0xvY2FsRmlsZVN5c3RlbS5nZXRJbnN0YW5jZSgpLnJlZnJlc2goZmFsc2UpOworICAgICAgICAgIC8vRmlsZURvY3VtZW50TWFuYWdlci5nZXRJbnN0YW5jZSgpLnNhdmVBbGxEb2N1bWVudHMoKTsKKyAgICAgICAgfQorICAgICAgfSk7CisgICAgfQorICAgIGNhdGNoIChCYXNlUmVmYWN0b3JpbmdQcm9jZXNzb3IuQ29uZmxpY3RzSW5UZXN0c0V4Y2VwdGlvbiBlKSB7CisgICAgICBhc3NlcnRFcXVhbHMoZS5nZXRNZXNzYWdlKCksICJDbGFzcyA8Yj48Y29kZT5iLkI8L2NvZGU+PC9iPiBpcyBwYWNrYWdlIGxvY2FsIGFuZCB3aWxsIG5vdCBiZSBhY2Nlc3NpYmxlIGZyb20gZmlsZSA8Yj48Y29kZT5BLmZvcm08L2NvZGU+PC9iPi4iKTsKKyAgICAgIHJldHVybjsKKyAgICB9CisgICAgZmFpbCgiQ29uZmxpY3Qgd2FzIG5vdCBkZXRlY3RlZCIpOworICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovcmVmYWN0b3JpbmcvUHVzaERvd25UZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovcmVmYWN0b3JpbmcvUHVzaERvd25UZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWVhNDBmNgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9yZWZhY3RvcmluZy9QdXNoRG93blRlc3QuamF2YQpAQCAtMCwwICsxLDEyNSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDAwLTIwMTIgSmV0QnJhaW5zIHMuci5vLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KK3BhY2thZ2UgY29tLmludGVsbGlqLnJlZmFjdG9yaW5nOworCitpbXBvcnQgY29tLmludGVsbGlqLmNvZGVJbnNpZ2h0LlRhcmdldEVsZW1lbnRVdGlsQmFzZTsKK2ltcG9ydCBjb20uaW50ZWxsaWoucHNpLio7CitpbXBvcnQgY29tLmludGVsbGlqLnBzaS5zZWFyY2guR2xvYmFsU2VhcmNoU2NvcGU7CitpbXBvcnQgY29tLmludGVsbGlqLnJlZmFjdG9yaW5nLm1lbWJlclB1c2hEb3duLlB1c2hEb3duUHJvY2Vzc29yOworaW1wb3J0IGNvbS5pbnRlbGxpai5yZWZhY3RvcmluZy51dGlsLkRvY0NvbW1lbnRQb2xpY3k7CitpbXBvcnQgY29tLmludGVsbGlqLnJlZmFjdG9yaW5nLnV0aWwuY2xhc3NNZW1iZXJzLk1lbWJlckluZm87CitpbXBvcnQgY29tLmludGVsbGlqLnJlZmFjdG9yaW5nLnV0aWwuY2xhc3NNZW1iZXJzLk1lbWJlckluZm9TdG9yYWdlOworaW1wb3J0IGNvbS5pbnRlbGxpai51c2FnZVZpZXcuVXNhZ2VJbmZvOworaW1wb3J0IGNvbS5pbnRlbGxpai51dGlsLmNvbnRhaW5lcnMuTXVsdGlNYXA7CisKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCisvKioKKyAqIEBhdXRob3IgYW5uYQorICogQHNpbmNlIDEzLU1hci0yMDA4CisgKi8KK3B1YmxpYyBjbGFzcyBQdXNoRG93blRlc3QgZXh0ZW5kcyBMaWdodFJlZmFjdG9yaW5nVGVzdENhc2UgeworICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQkFTRV9QQVRIID0gIi9yZWZhY3RvcmluZy9wdXNoRG93bi8iOworCisgIHB1YmxpYyB2b2lkIHRlc3RUeXBlUGFyYW1ldGVyKCkgeyBkb1Rlc3QoKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0VHlwZVBhcmFtZXRlckVyYXN1cmUoKSB7IGRvVGVzdCgpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RGaWVsZFR5cGVQYXJhbWV0ZXIoKSB7IGRvVGVzdCgpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RCb2R5VHlwZVBhcmFtZXRlcigpIHsgZG9UZXN0KCk7IH0KKyAgcHVibGljIHZvaWQgdGVzdERpc2FncmVlVHlwZVBhcmFtZXRlcigpIHsgZG9UZXN0KHRydWUpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RGaWVsZEFuZFJlZmVyZW5jZWRDbGFzcygpIHsgZG9UZXN0KCk7IH0KKyAgcHVibGljIHZvaWQgdGVzdEZpZWxkQW5kU3RhdGljUmVmZXJlbmNlZENsYXNzKCkgeyBkb1Rlc3QoKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0VGhpc1JlZkluQW5vbnltb3VzKCkgeyBkb1Rlc3QoKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0U3VwZXJPdmVySGllcmFyY2h5Q29uZmxpY3QoKSB7IGRvVGVzdCh0cnVlKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0U3VwZXJPdmVySGllcmFyY2h5KCkgeyBkb1Rlc3QoKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0TWV0aG9kVHlwZVBhcmFtZXRlcnNMaXN0KCkgeyBkb1Rlc3QoKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0TWV0aG9kRnJvbUludGVyZmFjZVRvQWJzdHJhY3RDbGFzcygpIHsgZG9UZXN0KCk7IH0KKyAgcHVibGljIHZvaWQgdGVzdE92ZXJyaWRpbmdNZXRob2RXaXRoU3Vic3QoKSB7IGRvVGVzdCgpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RTYW1lQ2xhc3NJbnRlcmZhY2UoKSB7IGRvVGVzdEltcGxlbWVudHMoKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0UHJlc2VydmVUeXBlQXJncygpIHsgZG9UZXN0SW1wbGVtZW50cygpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RTdWJzdFR5cGVBcmdzKCkgeyBkb1Rlc3RJbXBsZW1lbnRzKCk7IH0KKyAgcHVibGljIHZvaWQgdGVzdEV4dGVuc2lvbk1ldGhvZFRvSW50ZXJmYWNlKCkgeyBkb1Rlc3QoKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0RXh0ZW5zaW9uTWV0aG9kVG9DbGFzcygpIHsgZG9UZXN0KCk7IH0KKworICBwcml2YXRlIHZvaWQgZG9UZXN0KCkgeworICAgIGRvVGVzdChmYWxzZSk7CisgIH0KKworICBwcml2YXRlIHZvaWQgZG9UZXN0KGZpbmFsIGJvb2xlYW4gZmFpbHVyZSkgeworICAgIGNvbmZpZ3VyZUJ5RmlsZShCQVNFX1BBVEggKyBnZXRUZXN0TmFtZShmYWxzZSkgKyAiLmphdmEiKTsKKworICAgIGZpbmFsIFBzaUVsZW1lbnQgdGFyZ2V0RWxlbWVudCA9IFRhcmdldEVsZW1lbnRVdGlsQmFzZS5maW5kVGFyZ2V0RWxlbWVudChnZXRFZGl0b3IoKSwgVGFyZ2V0RWxlbWVudFV0aWxCYXNlLkVMRU1FTlRfTkFNRV9BQ0NFUFRFRCk7CisgICAgYXNzZXJ0VHJ1ZSgiPGNhcmV0PiBpcyBub3Qgb24gbWVtYmVyIG5hbWUiLCB0YXJnZXRFbGVtZW50IGluc3RhbmNlb2YgUHNpTWVtYmVyKTsKKworICAgIGZpbmFsIFBzaU1lbWJlciBwc2lNZW1iZXIgPSAoUHNpTWVtYmVyKXRhcmdldEVsZW1lbnQ7CisKKyAgICBmaW5hbCBQc2lDbGFzcyBjdXJyZW50Q2xhc3MgPSBwc2lNZW1iZXIuZ2V0Q29udGFpbmluZ0NsYXNzKCk7CisKKyAgICBhc3NlcnQgY3VycmVudENsYXNzICE9IG51bGw7CisKKyAgICBmaW5hbCBMaXN0PE1lbWJlckluZm8+IG1lbWJlcnNUb01vdmUgPSBuZXcgQXJyYXlMaXN0PE1lbWJlckluZm8+KCk7CisKKyAgICBmaW5hbCBQc2lGaWVsZCBmaWVsZEJ5TmFtZSA9IGN1cnJlbnRDbGFzcy5maW5kRmllbGRCeU5hbWUoImZpZWxkVG9Nb3ZlIiwgZmFsc2UpOworICAgIGlmIChmaWVsZEJ5TmFtZSAhPSBudWxsKSB7CisgICAgICBmaW5hbCBNZW1iZXJJbmZvIG1lbWJlckluZm8gPSBuZXcgTWVtYmVySW5mbyhmaWVsZEJ5TmFtZSk7CisgICAgICBtZW1iZXJJbmZvLnNldENoZWNrZWQodHJ1ZSk7CisgICAgICBtZW1iZXJzVG9Nb3ZlLmFkZChtZW1iZXJJbmZvKTsKKyAgICB9CisKKyAgICBmaW5hbCBNZW1iZXJJbmZvIG1lbWJlckluZm8gPSBuZXcgTWVtYmVySW5mbyhwc2lNZW1iZXIpOworICAgIG1lbWJlckluZm8uc2V0Q2hlY2tlZCh0cnVlKTsKKyAgICBtZW1iZXJzVG9Nb3ZlLmFkZChtZW1iZXJJbmZvKTsKKworICAgIG5ldyBQdXNoRG93blByb2Nlc3NvcihnZXRQcm9qZWN0KCksIG1lbWJlcnNUb01vdmUudG9BcnJheShuZXcgTWVtYmVySW5mb1ttZW1iZXJzVG9Nb3ZlLnNpemUoKV0pLCBjdXJyZW50Q2xhc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBEb2NDb21tZW50UG9saWN5KERvY0NvbW1lbnRQb2xpY3kuQVNJUykpIHsKKyAgICAgIEBPdmVycmlkZQorICAgICAgcHJvdGVjdGVkIGJvb2xlYW4gc2hvd0NvbmZsaWN0cyhNdWx0aU1hcDxQc2lFbGVtZW50LCBTdHJpbmc+IGNvbmZsaWN0cywgVXNhZ2VJbmZvW10gdXNhZ2VzKSB7CisgICAgICAgIGlmIChmYWlsdXJlID8gY29uZmxpY3RzLmlzRW1wdHkoKSA6ICFjb25mbGljdHMuaXNFbXB0eSgpKSB7CisgICAgICAgICAgZmFpbChmYWlsdXJlID8gIkNvbmZsaWN0IHdhcyBub3QgZGV0ZWN0ZWQiIDogIkZhbHNlIGNvbmZsaWN0IHdhcyBkZXRlY3RlZCIpOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0cnVlOworICAgICAgfQorICAgIH0ucnVuKCk7CisKKyAgICBjaGVja1Jlc3VsdEJ5RmlsZShCQVNFX1BBVEggKyBnZXRUZXN0TmFtZShmYWxzZSkgKyAiX2FmdGVyLmphdmEiKTsKKyAgfQorCisgIHByaXZhdGUgdm9pZCBkb1Rlc3RJbXBsZW1lbnRzKCkgeworICAgIGNvbmZpZ3VyZUJ5RmlsZShCQVNFX1BBVEggKyBnZXRUZXN0TmFtZShmYWxzZSkgKyAiLmphdmEiKTsKKworICAgIFBzaUNsYXNzIGN1cnJlbnRDbGFzcyA9IEphdmFQc2lGYWNhZGUuZ2V0SW5zdGFuY2UoZ2V0UHJvamVjdCgpKS5maW5kQ2xhc3MoIlRlc3QiLCBHbG9iYWxTZWFyY2hTY29wZS5wcm9qZWN0U2NvcGUoZ2V0UHJvamVjdCgpKSk7CisgICAgTWVtYmVySW5mb1N0b3JhZ2UgbWVtYmVySW5mb1N0b3JhZ2UgPSBuZXcgTWVtYmVySW5mb1N0b3JhZ2UoY3VycmVudENsYXNzLCBuZXcgTWVtYmVySW5mby5GaWx0ZXI8UHNpTWVtYmVyPigpIHsKKyAgICAgIEBPdmVycmlkZQorICAgICAgcHVibGljIGJvb2xlYW4gaW5jbHVkZU1lbWJlcihQc2lNZW1iZXIgZWxlbWVudCkgeworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgIH0KKyAgICB9KTsKKyAgICBMaXN0PE1lbWJlckluZm8+IG1lbWJlcnMgPSBtZW1iZXJJbmZvU3RvcmFnZS5nZXRDbGFzc01lbWJlckluZm9zKGN1cnJlbnRDbGFzcyk7CisgICAgZm9yIChNZW1iZXJJbmZvIG1lbWJlciA6IG1lbWJlcnMpIHsKKyAgICAgIG1lbWJlci5zZXRDaGVja2VkKHRydWUpOworICAgIH0KKworICAgIG5ldyBQdXNoRG93blByb2Nlc3NvcihnZXRQcm9qZWN0KCksIG1lbWJlcnMudG9BcnJheShuZXcgTWVtYmVySW5mb1ttZW1iZXJzLnNpemUoKV0pLCBjdXJyZW50Q2xhc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBEb2NDb21tZW50UG9saWN5KERvY0NvbW1lbnRQb2xpY3kuQVNJUykpIHsKKyAgICAgIEBPdmVycmlkZQorICAgICAgcHJvdGVjdGVkIGJvb2xlYW4gc2hvd0NvbmZsaWN0cyhNdWx0aU1hcDxQc2lFbGVtZW50LCBTdHJpbmc+IGNvbmZsaWN0cywgVXNhZ2VJbmZvW10gdXNhZ2VzKSB7CisgICAgICAgIHJldHVybiB0cnVlOworICAgICAgfQorICAgIH0ucnVuKCk7CisKKyAgICBjaGVja1Jlc3VsdEJ5RmlsZShCQVNFX1BBVEggKyBnZXRUZXN0TmFtZShmYWxzZSkgKyAiX2FmdGVyLmphdmEiKTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL3JlZmFjdG9yaW5nL1JlZmFjdG9yaW5nVGVzdENhc2UuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9yZWZhY3RvcmluZy9SZWZhY3RvcmluZ1Rlc3RDYXNlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjJlOTAyNwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9yZWZhY3RvcmluZy9SZWZhY3RvcmluZ1Rlc3RDYXNlLmphdmEKQEAgLTAsMCArMSwyNSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDAwLTIwMTEgSmV0QnJhaW5zIHMuci5vLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KK3BhY2thZ2UgY29tLmludGVsbGlqLnJlZmFjdG9yaW5nOworCitpbXBvcnQgY29tLmludGVsbGlqLmNvZGVJbnNpZ2h0LkNvZGVJbnNpZ2h0VGVzdENhc2U7CisKK3B1YmxpYyBhYnN0cmFjdCBjbGFzcyBSZWZhY3RvcmluZ1Rlc3RDYXNlIGV4dGVuZHMgQ29kZUluc2lnaHRUZXN0Q2FzZSB7CisgIEBPdmVycmlkZQorICBwcm90ZWN0ZWQgYm9vbGVhbiBpc1J1bkluV3JpdGVBY3Rpb24oKSB7CisgICAgcmV0dXJuIGZhbHNlOworICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovcmVmYWN0b3JpbmcvUmVmYWN0b3JpbmdUZXN0VXRpbC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL3JlZmFjdG9yaW5nL1JlZmFjdG9yaW5nVGVzdFV0aWwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNDUyNmI5Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL3JlZmFjdG9yaW5nL1JlZmFjdG9yaW5nVGVzdFV0aWwuamF2YQpAQCAtMCwwICsxLDgxIEBACisvKgorICogQ29weXJpZ2h0IDIwMDAtMjAxMCBKZXRCcmFpbnMgcy5yLm8uCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisvKgorICogVXNlcjogYW5uYQorICogRGF0ZTogMDItSnVuLTIwMTAKKyAqLworcGFja2FnZSBjb20uaW50ZWxsaWoucmVmYWN0b3Jpbmc7CisKK2ltcG9ydCBjb20uaW50ZWxsaWoucHNpLio7CitpbXBvcnQgY29tLmludGVsbGlqLnJlZmFjdG9yaW5nLnV0aWwuY2xhc3NNZW1iZXJzLk1lbWJlckluZm87CitpbXBvcnQganVuaXQuZnJhbWV3b3JrLkFzc2VydDsKKworcHVibGljIGNsYXNzIFJlZmFjdG9yaW5nVGVzdFV0aWwgeworICBwdWJsaWMgc3RhdGljIE1lbWJlckluZm9bXSBmaW5kTWVtYmVycyhmaW5hbCBQc2lDbGFzcyBzb3VyY2VDbGFzcywgZmluYWwgTWVtYmVyRGVzY3JpcHRvci4uLiBtZW1iZXJzVG9GaW5kKSB7CisgICAgTWVtYmVySW5mb1tdIGluZm9zID0gbmV3IE1lbWJlckluZm9bbWVtYmVyc1RvRmluZC5sZW5ndGhdOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbWVtYmVyc1RvRmluZC5sZW5ndGg7IGkrKykgeworICAgICAgZmluYWwgQ2xhc3M8PyBleHRlbmRzIFBzaU1lbWJlcj4gY2xhenogPSBtZW1iZXJzVG9GaW5kW2ldLm15Q2xhc3M7CisgICAgICBmaW5hbCBTdHJpbmcgbmFtZSA9IG1lbWJlcnNUb0ZpbmRbaV0ubXlOYW1lOworICAgICAgUHNpTWVtYmVyIG1lbWJlciA9IG51bGw7CisgICAgICBib29sZWFuIG92ZXJyaWRlcyA9IGZhbHNlOworICAgICAgUHNpUmVmZXJlbmNlTGlzdCByZWZMaXN0ID0gbnVsbDsKKyAgICAgIGlmIChQc2lDbGFzcy5jbGFzcy5pc0Fzc2lnbmFibGVGcm9tKGNsYXp6KSkgeworICAgICAgICBtZW1iZXIgPSBzb3VyY2VDbGFzcy5maW5kSW5uZXJDbGFzc0J5TmFtZShuYW1lLCBmYWxzZSk7CisgICAgICAgIGlmIChtZW1iZXIgPT0gbnVsbCkgeworICAgICAgICAgIGZpbmFsIFBzaUNsYXNzW10gc3VwZXJzID0gc291cmNlQ2xhc3MuZ2V0U3VwZXJzKCk7CisgICAgICAgICAgZm9yIChQc2lDbGFzcyBzdXBlclR5cGVDbGFzcyA6IHN1cGVycykgeworICAgICAgICAgICAgaWYgKHN1cGVyVHlwZUNsYXNzLmdldE5hbWUoKS5lcXVhbHMobmFtZSkpIHsKKyAgICAgICAgICAgICAgbWVtYmVyID0gc3VwZXJUeXBlQ2xhc3M7CisgICAgICAgICAgICAgIG92ZXJyaWRlcyA9IHRydWU7CisgICAgICAgICAgICAgIHJlZkxpc3QgPSBzdXBlclR5cGVDbGFzcy5pc0ludGVyZmFjZSgpID8gc291cmNlQ2xhc3MuZ2V0SW1wbGVtZW50c0xpc3QoKSA6IHNvdXJjZUNsYXNzLmdldEV4dGVuZHNMaXN0KCk7CisgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICB9IGVsc2UgaWYgKFBzaU1ldGhvZC5jbGFzcy5pc0Fzc2lnbmFibGVGcm9tKGNsYXp6KSkgeworICAgICAgICBmaW5hbCBQc2lNZXRob2RbXSBtZXRob2RzID0gc291cmNlQ2xhc3MuZmluZE1ldGhvZHNCeU5hbWUobmFtZSwgZmFsc2UpOworICAgICAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKDEsIG1ldGhvZHMubGVuZ3RoKTsKKyAgICAgICAgbWVtYmVyID0gbWV0aG9kc1swXTsKKyAgICAgIH0gZWxzZSBpZiAoUHNpRmllbGQuY2xhc3MuaXNBc3NpZ25hYmxlRnJvbShjbGF6eikpIHsKKyAgICAgICAgbWVtYmVyID0gc291cmNlQ2xhc3MuZmluZEZpZWxkQnlOYW1lKG5hbWUsIGZhbHNlKTsKKyAgICAgIH0KKworICAgICAgQXNzZXJ0LmFzc2VydE5vdE51bGwobWVtYmVyKTsKKyAgICAgIGluZm9zW2ldID0gbmV3IE1lbWJlckluZm8obWVtYmVyLCBvdmVycmlkZXMsIHJlZkxpc3QpOworICAgICAgaW5mb3NbaV0uc2V0VG9BYnN0cmFjdChtZW1iZXJzVG9GaW5kW2ldLm15QWJzdHJhY3QpOworICAgIH0KKyAgICByZXR1cm4gaW5mb3M7CisgIH0KKworICBwdWJsaWMgc3RhdGljIGNsYXNzIE1lbWJlckRlc2NyaXB0b3IgeworICAgIHByaXZhdGUgU3RyaW5nIG15TmFtZTsKKyAgICBwcml2YXRlIENsYXNzPD8gZXh0ZW5kcyBQc2lNZW1iZXI+IG15Q2xhc3M7CisgICAgcHJpdmF0ZSBib29sZWFuIG15QWJzdHJhY3Q7CisKKyAgICBwdWJsaWMgTWVtYmVyRGVzY3JpcHRvcihTdHJpbmcgbmFtZSwgQ2xhc3M8PyBleHRlbmRzIFBzaU1lbWJlcj4gYUNsYXNzLCBib29sZWFuIGlzQWJzdHJhY3QpIHsKKyAgICAgIG15TmFtZSA9IG5hbWU7CisgICAgICBteUNsYXNzID0gYUNsYXNzOworICAgICAgbXlBYnN0cmFjdCA9IGlzQWJzdHJhY3Q7CisgICAgfQorCisKKyAgICBwdWJsaWMgTWVtYmVyRGVzY3JpcHRvcihTdHJpbmcgbmFtZSwgQ2xhc3M8PyBleHRlbmRzIFBzaU1lbWJlcj4gYUNsYXNzKSB7CisgICAgICB0aGlzKG5hbWUsIGFDbGFzcywgZmFsc2UpOworICAgIH0KKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9yZWZhY3RvcmluZy9SZW1vdmVNaWRkbGVNYW5UZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovcmVmYWN0b3JpbmcvUmVtb3ZlTWlkZGxlTWFuVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZhMDI1YzgKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovcmVmYWN0b3JpbmcvUmVtb3ZlTWlkZGxlTWFuVGVzdC5qYXZhCkBAIC0wLDAgKzEsODcgQEAKKy8qCisgKiBVc2VyOiBhbm5hCisgKiBEYXRlOiAyMC1BdWctMjAwOAorICovCitwYWNrYWdlIGNvbS5pbnRlbGxpai5yZWZhY3RvcmluZzsKKworaW1wb3J0IGNvbS5pbnRlbGxpai5KYXZhVGVzdFV0aWw7CitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkuZmlsZUVkaXRvci5GaWxlRG9jdW1lbnRNYW5hZ2VyOworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLnZmcy5Mb2NhbEZpbGVTeXN0ZW07CitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkudmZzLlZpcnR1YWxGaWxlOworaW1wb3J0IGNvbS5pbnRlbGxpai5wc2kuUHNpQ2xhc3M7CitpbXBvcnQgY29tLmludGVsbGlqLnBzaS5Qc2lGaWVsZDsKK2ltcG9ydCBjb20uaW50ZWxsaWoucHNpLlBzaU1ldGhvZDsKK2ltcG9ydCBjb20uaW50ZWxsaWoucHNpLnNlYXJjaC5HbG9iYWxTZWFyY2hTY29wZTsKK2ltcG9ydCBjb20uaW50ZWxsaWoucmVmYWN0b3JpbmcucmVtb3ZlbWlkZGxlbWFuLkRlbGVnYXRpb25VdGlsczsKK2ltcG9ydCBjb20uaW50ZWxsaWoucmVmYWN0b3JpbmcucmVtb3ZlbWlkZGxlbWFuLlJlbW92ZU1pZGRsZW1hblByb2Nlc3NvcjsKK2ltcG9ydCBjb20uaW50ZWxsaWoucmVmYWN0b3JpbmcudXRpbC5jbGFzc01lbWJlcnMuTWVtYmVySW5mbzsKKworaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CitpbXBvcnQgamF2YS51dGlsLlNldDsKKworcHVibGljIGNsYXNzIFJlbW92ZU1pZGRsZU1hblRlc3QgZXh0ZW5kcyBNdWx0aUZpbGVUZXN0Q2FzZXsKKyAgQE92ZXJyaWRlCisgIHByb3RlY3RlZCBTdHJpbmcgZ2V0VGVzdERhdGFQYXRoKCkgeworICAgIHJldHVybiBKYXZhVGVzdFV0aWwuZ2V0SmF2YVRlc3REYXRhUGF0aCgpOworICB9CisKKyAgQE92ZXJyaWRlCisgIHByb3RlY3RlZCBTdHJpbmcgZ2V0VGVzdFJvb3QoKSB7CisgICAgcmV0dXJuICIvcmVmYWN0b3JpbmcvcmVtb3ZlbWlkZGxlbWFuLyI7CisgIH0KKworICBwcml2YXRlIHZvaWQgZG9UZXN0KGZpbmFsIFN0cmluZyBjb25mbGljdCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KG5ldyBQZXJmb3JtQWN0aW9uKCkgeworICAgICAgQE92ZXJyaWRlCisgICAgICBwdWJsaWMgdm9pZCBwZXJmb3JtQWN0aW9uKGZpbmFsIFZpcnR1YWxGaWxlIHJvb3REaXIsIGZpbmFsIFZpcnR1YWxGaWxlIHJvb3RBZnRlcikgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIFBzaUNsYXNzIGFDbGFzcyA9IG15SmF2YUZhY2FkZS5maW5kQ2xhc3MoIlRlc3QiLCBHbG9iYWxTZWFyY2hTY29wZS5hbGxTY29wZShnZXRQcm9qZWN0KCkpKTsKKworICAgICAgICBpZiAoYUNsYXNzID09IG51bGwpIGFDbGFzcyA9IG15SmF2YUZhY2FkZS5maW5kQ2xhc3MoInAuVGVzdCIsIEdsb2JhbFNlYXJjaFNjb3BlLmFsbFNjb3BlKGdldFByb2plY3QoKSkpOworICAgICAgICBhc3NlcnROb3ROdWxsKCJDbGFzcyBUZXN0IG5vdCBmb3VuZCIsIGFDbGFzcyk7CisKKyAgICAgICAgZmluYWwgUHNpRmllbGQgZmllbGQgPSBhQ2xhc3MuZmluZEZpZWxkQnlOYW1lKCJteUZpZWxkIiwgZmFsc2UpOworICAgICAgICBmaW5hbCBTZXQ8UHNpTWV0aG9kPiBtZXRob2RzID0gRGVsZWdhdGlvblV0aWxzLmdldERlbGVnYXRpbmdNZXRob2RzRm9yRmllbGQoZmllbGQpOworICAgICAgICBMaXN0PE1lbWJlckluZm8+IGluZm9zID0gbmV3IEFycmF5TGlzdDxNZW1iZXJJbmZvPigpOworICAgICAgICBmb3IgKFBzaU1ldGhvZCBtZXRob2QgOiBtZXRob2RzKSB7CisgICAgICAgICAgZmluYWwgTWVtYmVySW5mbyBpbmZvID0gbmV3IE1lbWJlckluZm8obWV0aG9kKTsKKyAgICAgICAgICBpbmZvLnNldENoZWNrZWQodHJ1ZSk7CisgICAgICAgICAgaW5mby5zZXRUb0Fic3RyYWN0KHRydWUpOworICAgICAgICAgIGluZm9zLmFkZChpbmZvKTsKKyAgICAgICAgfQorICAgICAgICB0cnkgeworICAgICAgICAgIFJlbW92ZU1pZGRsZW1hblByb2Nlc3NvciBwcm9jZXNzb3IgPSBuZXcgUmVtb3ZlTWlkZGxlbWFuUHJvY2Vzc29yKGZpZWxkLCBpbmZvcyk7CisgICAgICAgICAgcHJvY2Vzc29yLnJ1bigpOworICAgICAgICAgIExvY2FsRmlsZVN5c3RlbS5nZXRJbnN0YW5jZSgpLnJlZnJlc2goZmFsc2UpOworICAgICAgICAgIEZpbGVEb2N1bWVudE1hbmFnZXIuZ2V0SW5zdGFuY2UoKS5zYXZlQWxsRG9jdW1lbnRzKCk7CisgICAgICAgICAgaWYgKGNvbmZsaWN0ICE9IG51bGwpIGZhaWwoIkNvbmZsaWN0IGV4cGVjdGVkIik7CisgICAgICAgIH0KKyAgICAgICAgY2F0Y2ggKEJhc2VSZWZhY3RvcmluZ1Byb2Nlc3Nvci5Db25mbGljdHNJblRlc3RzRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICBpZiAoY29uZmxpY3QgPT0gbnVsbCkgdGhyb3cgZTsKKyAgICAgICAgICBhc3NlcnRFcXVhbHMoY29uZmxpY3QsIGUuZ2V0TWVzc2FnZSgpKTsKKyAgICAgICAgfQorICAgICAgfQorICAgIH0pOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdE5vR2V0dGVyKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KChTdHJpbmcpbnVsbCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0U2libGluZ3MoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoImZvbygpIHdpbGwgYmUgZGVsZXRlZC4gSGllcmFyY2h5IHdpbGwgYmUgYnJva2VuIik7CisgIH0KKworICAKKyAgcHVibGljIHZvaWQgdGVzdEludGVyZmFjZSgpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdCgiZm9vKCkgd2lsbCBiZSBkZWxldGVkLiBIaWVyYXJjaHkgd2lsbCBiZSBicm9rZW4iKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RQcmVzZW50R2V0dGVyKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KCJmb28oKSB3aWxsIGJlIGRlbGV0ZWQuIEhpZXJhcmNoeSB3aWxsIGJlIGJyb2tlbiIpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEludGVyZmFjZURlbGVnYXRpb24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoImZvbygpIHdpbGwgYmUgZGVsZXRlZC4gSGllcmFyY2h5IHdpbGwgYmUgYnJva2VuIik7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovcmVmYWN0b3JpbmcvUmVuYW1lQ2xhc3NUZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovcmVmYWN0b3JpbmcvUmVuYW1lQ2xhc3NUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzNjNGRlMwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9yZWZhY3RvcmluZy9SZW5hbWVDbGFzc1Rlc3QuamF2YQpAQCAtMCwwICsxLDEwOCBAQAorcGFja2FnZSBjb20uaW50ZWxsaWoucmVmYWN0b3Jpbmc7CisKK2ltcG9ydCBjb20uaW50ZWxsaWouSmF2YVRlc3RVdGlsOworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLmV4dGVuc2lvbnMuRXh0ZW5zaW9uczsKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS5maWxlRWRpdG9yLkZpbGVEb2N1bWVudE1hbmFnZXI7CitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkudmZzLlZpcnR1YWxGaWxlOworaW1wb3J0IGNvbS5pbnRlbGxpai5wc2kuUHNpQ2xhc3M7CitpbXBvcnQgY29tLmludGVsbGlqLnBzaS5Qc2lEb2N1bWVudE1hbmFnZXI7CitpbXBvcnQgY29tLmludGVsbGlqLnBzaS5zZWFyY2guR2xvYmFsU2VhcmNoU2NvcGU7CitpbXBvcnQgY29tLmludGVsbGlqLnJlZmFjdG9yaW5nLnJlbmFtZS5SZW5hbWVQcm9jZXNzb3I7CitpbXBvcnQgY29tLmludGVsbGlqLnJlZmFjdG9yaW5nLnJlbmFtZS5uYW1pbmcuQXV0b21hdGljUmVuYW1lckZhY3Rvcnk7CitpbXBvcnQgb3JnLmpldGJyYWlucy5hbm5vdGF0aW9ucy5Ob25ObHM7CisKK3B1YmxpYyBjbGFzcyBSZW5hbWVDbGFzc1Rlc3QgZXh0ZW5kcyBNdWx0aUZpbGVUZXN0Q2FzZSB7CisgIEBPdmVycmlkZQorICBwcm90ZWN0ZWQgU3RyaW5nIGdldFRlc3REYXRhUGF0aCgpIHsKKyAgICByZXR1cm4gSmF2YVRlc3RVdGlsLmdldEphdmFUZXN0RGF0YVBhdGgoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3ROb25KYXZhKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KCJwYWNrMS5DbGFzczEiLCAiQ2xhc3MxTmV3Iik7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0Q29sbGlzaW9uKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KCJwYWNrMS5NeUxpc3QiLCAiTGlzdCIpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdElubmVyQ2xhc3MoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoInBhY2sxLk91dGVyQ2xhc3MuSW5uZXJDbGFzcyIsICJOZXdJbm5lckNsYXNzIik7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0SW1wb3J0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KCJhLkJsdWJmb28iLCAiQmx1YkZvbyIpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEluU2FtZUZpbGUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoIlR3byIsICJPYmplY3QiKTsKKyAgfQorICAKKyAgcHVibGljIHZvaWQgdGVzdENvbnN0cnVjdG9ySmF2YWRvYygpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdCgiVGVzdCIsICJUZXN0MSIpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdENvbGxpc2lvbjEoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoIkxvYWRlciIsICJSZWFkZXIiKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RJbXBsaWNpdFJlZmVyZW5jZVRvRGVmYXVsdEN0cigpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdCgicGFjazEuUGFyZW50IiwgIlBhcmVudFhYWCIpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEltcGxpY2l0bHlJbXBvcnRlZCgpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdCgicGFjazEuQSIsICJPYmplY3QiKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RBdXRvbWF0aWNSZW5hbWVWYXJzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9SZW5hbWVDbGFzcygiWFgiLCAiWSIpOworICB9CisKKyAgcHJpdmF0ZSB2b2lkIGRvUmVuYW1lQ2xhc3MoZmluYWwgU3RyaW5nIGNsYXNzTmFtZSwgZmluYWwgU3RyaW5nIG5ld05hbWUpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdChuZXcgUGVyZm9ybUFjdGlvbigpIHsKKyAgICAgIEBPdmVycmlkZQorICAgICAgcHVibGljIHZvaWQgcGVyZm9ybUFjdGlvbihWaXJ0dWFsRmlsZSByb290RGlyLCBWaXJ0dWFsRmlsZSByb290QWZ0ZXIpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICBQc2lDbGFzcyBhQ2xhc3MgPSBteUphdmFGYWNhZGUuZmluZENsYXNzKGNsYXNzTmFtZSwgR2xvYmFsU2VhcmNoU2NvcGUuYWxsU2NvcGUoZ2V0UHJvamVjdCgpKSk7CisgICAgICAgIGFzc2VydE5vdE51bGwoIkNsYXNzIFhYIG5vdCBmb3VuZCIsIGFDbGFzcyk7CisKKyAgICAgICAgZmluYWwgUmVuYW1lUHJvY2Vzc29yIHByb2Nlc3NvciA9IG5ldyBSZW5hbWVQcm9jZXNzb3IobXlQcm9qZWN0LCBhQ2xhc3MsIG5ld05hbWUsIHRydWUsIHRydWUpOworICAgICAgICBmb3IgKEF1dG9tYXRpY1JlbmFtZXJGYWN0b3J5IGZhY3RvcnkgOiBFeHRlbnNpb25zLmdldEV4dGVuc2lvbnMoQXV0b21hdGljUmVuYW1lckZhY3RvcnkuRVBfTkFNRSkpIHsKKyAgICAgICAgICBwcm9jZXNzb3IuYWRkUmVuYW1lckZhY3RvcnkoZmFjdG9yeSk7CisgICAgICAgIH0KKyAgICAgICAgcHJvY2Vzc29yLnJ1bigpOworICAgICAgICBQc2lEb2N1bWVudE1hbmFnZXIuZ2V0SW5zdGFuY2UobXlQcm9qZWN0KS5jb21taXRBbGxEb2N1bWVudHMoKTsKKyAgICAgICAgRmlsZURvY3VtZW50TWFuYWdlci5nZXRJbnN0YW5jZSgpLnNhdmVBbGxEb2N1bWVudHMoKTsKKyAgICAgIH0KKyAgICB9KTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RBdXRvbWF0aWNSZW5hbWVJbmhlcml0b3JzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9SZW5hbWVDbGFzcygiTXlDbGFzcyIsICJNeUNsYXNzMSIpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEF1dG9tYXRpY1JlbmFtZVZhcnNDb2xsaXNpb24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoIlhYIiwgIlkiKTsKKyAgfQorCisgIHByaXZhdGUgdm9pZCBkb1Rlc3QoQE5vbk5scyBmaW5hbCBTdHJpbmcgcUNsYXNzTmFtZSwgQE5vbk5scyBmaW5hbCBTdHJpbmcgbmV3TmFtZSkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KG5ldyBQZXJmb3JtQWN0aW9uKCkgeworICAgICAgQE92ZXJyaWRlCisgICAgICBwdWJsaWMgdm9pZCBwZXJmb3JtQWN0aW9uKFZpcnR1YWxGaWxlIHJvb3REaXIsIFZpcnR1YWxGaWxlIHJvb3RBZnRlcikgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIFJlbmFtZUNsYXNzVGVzdC50aGlzLnBlcmZvcm1BY3Rpb24ocUNsYXNzTmFtZSwgbmV3TmFtZSk7CisgICAgICB9CisgICAgfSk7CisgIH0KKworICBwcml2YXRlIHZvaWQgcGVyZm9ybUFjdGlvbihTdHJpbmcgcUNsYXNzTmFtZSwgU3RyaW5nIG5ld05hbWUpIHRocm93cyBFeGNlcHRpb24geworICAgIFBzaUNsYXNzIGFDbGFzcyA9IG15SmF2YUZhY2FkZS5maW5kQ2xhc3MocUNsYXNzTmFtZSwgR2xvYmFsU2VhcmNoU2NvcGUuYWxsU2NvcGUoZ2V0UHJvamVjdCgpKSk7CisgICAgYXNzZXJ0Tm90TnVsbCgiQ2xhc3MgIiArIHFDbGFzc05hbWUgKyAiIG5vdCBmb3VuZCIsIGFDbGFzcyk7CisKKyAgICBuZXcgUmVuYW1lUHJvY2Vzc29yKG15UHJvamVjdCwgYUNsYXNzLCBuZXdOYW1lLCB0cnVlLCB0cnVlKS5ydW4oKTsKKyAgICBQc2lEb2N1bWVudE1hbmFnZXIuZ2V0SW5zdGFuY2UobXlQcm9qZWN0KS5jb21taXRBbGxEb2N1bWVudHMoKTsKKyAgICBGaWxlRG9jdW1lbnRNYW5hZ2VyLmdldEluc3RhbmNlKCkuc2F2ZUFsbERvY3VtZW50cygpOworICB9CisKKyAgQE92ZXJyaWRlCisgIHByb3RlY3RlZCBTdHJpbmcgZ2V0VGVzdFJvb3QoKSB7CisgICAgcmV0dXJuICIvcmVmYWN0b3JpbmcvcmVuYW1lQ2xhc3MvIjsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL3JlZmFjdG9yaW5nL1JlbmFtZUNvbGxpc2lvbnNUZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovcmVmYWN0b3JpbmcvUmVuYW1lQ29sbGlzaW9uc1Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZmU2ZmJlCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL3JlZmFjdG9yaW5nL1JlbmFtZUNvbGxpc2lvbnNUZXN0LmphdmEKQEAgLTAsMCArMSwyMTUgQEAKK3BhY2thZ2UgY29tLmludGVsbGlqLnJlZmFjdG9yaW5nOworCitpbXBvcnQgY29tLmludGVsbGlqLkphdmFUZXN0VXRpbDsKK2ltcG9ydCBjb20uaW50ZWxsaWouY29kZUluc2lnaHQuVGFyZ2V0RWxlbWVudFV0aWxCYXNlOworaW1wb3J0IGNvbS5pbnRlbGxpai5wc2kuUHNpRWxlbWVudDsKK2ltcG9ydCBjb20uaW50ZWxsaWoucmVmYWN0b3JpbmcucmVuYW1lLlJlbmFtZVByb2Nlc3NvcjsKK2ltcG9ydCBjb20uaW50ZWxsaWoucmVmYWN0b3JpbmcucmVuYW1lLlJlbmFtZVV0aWw7CitpbXBvcnQgY29tLmludGVsbGlqLnJlZmFjdG9yaW5nLnV0aWwuTW92ZVJlbmFtZVVzYWdlSW5mbzsKK2ltcG9ydCBjb20uaW50ZWxsaWoudXNhZ2VWaWV3LlVzYWdlSW5mbzsKK2ltcG9ydCBvcmcuamV0YnJhaW5zLmFubm90YXRpb25zLk5vdE51bGw7CitpbXBvcnQgb3JnLmp1bml0LkFzc2VydDsKKworaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOworCisvKioKKyAqIEBhdXRob3Igc2FzaGFjaGUKKyAqLworcHVibGljIGNsYXNzIFJlbmFtZUNvbGxpc2lvbnNUZXN0IGV4dGVuZHMgTGlnaHRSZWZhY3RvcmluZ1Rlc3RDYXNlIHsKKyAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEJBU0VfUEFUSCA9ICIvcmVmYWN0b3JpbmcvcmVuYW1lQ29sbGlzaW9ucy8iOworCisgIEBOb3ROdWxsCisgIEBPdmVycmlkZQorICBwcm90ZWN0ZWQgU3RyaW5nIGdldFRlc3REYXRhUGF0aCgpIHsKKyAgICByZXR1cm4gSmF2YVRlc3RVdGlsLmdldEphdmFUZXN0RGF0YVBhdGgoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RSZW5hbWVDbGFzc0lubmVyVG9Mb2NhbCgpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdCgiTG9jYWxDbGFzcyIpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFJlbmFtZUNsYXNzTG9jYWxUb0FsaWVuKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KCJTdHJpbmciKTsKKyAgfQorCisgIC8vRmFpbHMgZHVlIHRvIElERUFERVYtMjUxOTQuCisgIC8vcHVibGljIHZvaWQgdGVzdFJlbmFtZUNsYXNzTG9jYWxUb0FsaWVuTm9JbXBvcnRzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgIC8vICBkb1Rlc3QoIlN0cmluZyIpOworICAvL30KKworICBwdWJsaWMgdm9pZCB0ZXN0UmVuYW1lQ2xhc3NMb2NhbFRvSW5uZXIoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoIlN0YXRpY0lubmVyQ2xhc3MiKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RSZW5hbWVDbGFzc1RoaXNGcW5Ub0FsaWVuKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KCJTdHJpbmciKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RSZW5hbWVDbGFzc1RoaXNUb0FsaWVuKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KCJTdHJpbmciKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RSZW5hbWVNZXRob2RJbmRpSW5zdGFuY2VzSW5uZXJUb091dGVyKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KCJtZXRob2QiKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RSZW5hbWVNZXRob2RJbmRpSW5zdGFuY2VzT3V0ZXJUb0lubmVyKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KCJzaU1ldGhvZCIpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFJlbmFtZU1ldGhvZElubmVySW5zdGFuY2VUb091dGVySW5zdGFuY2UoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoIm1ldGhvZCIpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFJlbmFtZU1ldGhvZElubmVyU3RhdGljVG9PdXRlclN0YXRpYygpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdCgic3RhdGljTWV0aG9kIik7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0UmVuYW1lTWV0aG9kT3V0ZXJJbnN0YW5jZVRvSW5uZXJJbnN0YW5jZSgpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdCgiaW5uZXJNZXRob2QiKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RSZW5hbWVNZXRob2RPdXRlclN0YXRpY1RvSW5uZXJTdGF0aWMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoInNpU3RhdGljTWV0aG9kIik7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0UmVuYW1lTWV0aG9kU3RhdGljVG9BbGllbigpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdCgidmFsdWVPZiIpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFJlbmFtZVZhckNvbnN0VG9BbGllbigpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdCgiQ0FTRV9JTlNFTlNJVElWRV9PUkRFUiIpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFJlbmFtZVZhckNvbnN0VG9BbGllbjEoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoIkNBU0VfSU5TRU5TSVRJVkVfT1JERVIiKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RSZW5hbWVWYXJDb25zdFRvUGFyYW0oKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoInBhcmFtMyIpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFJlbmFtZVZhckZpZWxkVG9Mb2NhbCgpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdCgibG9jYWxWYXIzIik7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0UmVuYW1lVmFySW5uZXJDb25zdFRvT3V0ZXJDb25zdCgpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdCgiU1RBVElDX0ZJRUxEIik7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0UmVuYW1lVmFySW5uZXJGaWVsZFRvT3V0ZXJGaWVsZCgpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdCgibXlGaWVsZCIpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFJlbmFtZVZhckxvY2FsVG9BbGllbigpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdCgiQk9UVE9NIik7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0UmVuYW1lVmFyTG9jYWxUb0NvbnN0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KCJJTk5FUl9TVEFUSUNfRklFTEQiKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RSZW5hbWVWYXJMb2NhbFRvT3V0ZXJGaWVsZCgpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdCgibXlGaWVsZCIpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFJlbmFtZVZhck91dGVyQ29uc3RUb0lubmVyQ29uc3QoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoIlNJX1NUQVRJQ19GSUVMRCIpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFJlbmFtZVZhck91dGVyQ29uc3RUb0xvY2FsKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KCJsb2NhbFZhcjMiKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RSZW5hbWVWYXJPdXRlckNvbnN0VG9QYXJhbSgpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdCgicGFyYW0yIik7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0UmVuYW1lVmFyT3V0ZXJGaWVsZFRvTG9jYWwoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoImxvY2FsVmFyMyIpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFJlbmFtZVZhck91dGVyRmllbGRUb1BhcmFtKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KCJwYXJhbTMiKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RSZW5hbWVWYXJQYXJhbVRvQWxpZW4oKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoIkJPVFRPTSIpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFJlbmFtZVZhclBhcmFtVG9GaWVsZCgpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdCgibXlJbm5lckZpZWxkIik7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0UmVuYW1lVmFyUGFyYW1Ub091dGVyQ29uc3QoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoIlNUQVRJQ19GSUVMRCIpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFJlbmFtZUxvY2FsVmFyaWFibGVIaWRlc0ZpZWxkSW5Bbm9ueW1vdXMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICB0cnkgeworICAgICAgZG9UZXN0KCJ5Iik7CisgICAgfQorICAgIGNhdGNoIChCYXNlUmVmYWN0b3JpbmdQcm9jZXNzb3IuQ29uZmxpY3RzSW5UZXN0c0V4Y2VwdGlvbiBlKSB7CisgICAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKCJUaGVyZSBpcyBhbHJlYWR5IGEgZmllbGQgPGI+PGNvZGU+eTwvY29kZT48L2I+LiBJdCB3aWxsIGNvbmZsaWN0IHdpdGggdGhlIHJlbmFtZWQgdmFyaWFibGUiLCBlLmdldE1lc3NhZ2UoKSk7CisgICAgICByZXR1cm47CisgICAgfQorICAgIGZhaWwoIkNvbmZsaWN0cyB3ZXJlIG5vdCBmb3VuZCIpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFJlbmFtZU1ldGhvZENvbGxpc2lvbldpdGhPdGhlclNpZ25hdHVyZSgpIHRocm93cyBFeGNlcHRpb24geworICAgIHRyeSB7CisgICAgICBkb1Rlc3QoImZvbzIiKTsKKyAgICB9CisgICAgY2F0Y2ggKEJhc2VSZWZhY3RvcmluZ1Byb2Nlc3Nvci5Db25mbGljdHNJblRlc3RzRXhjZXB0aW9uIGUpIHsKKyAgICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoIk1ldGhvZCBjYWxsIHdvdWxkIGJlIGxpbmtlZCB0byBcIm1ldGhvZCA8Yj48Y29kZT5SZW5hbWVUZXN0LmZvbzIoTG9uZyk8L2NvZGU+PC9iPlwiIGFmdGVyIHJlbmFtZSIsIGUuZ2V0TWVzc2FnZSgpKTsKKyAgICAgIHJldHVybjsKKyAgICB9CisgICAgZmFpbCgiQ29uZmxpY3RzIHdlcmUgbm90IGZvdW5kIik7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0UmVuYW1lTWV0aG9kTm9Db2xsaXNpb25XaXRoT3RoZXJTaWduYXR1cmUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoImZvbzIiKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RSZW5hbWVUeXBlUGFyYW1ldGVyVG9FeGlzdGluZ0NsYXNzTmFtZSgpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdCgiUCIpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFJlbmFtZUlubmVySW5TdXBlckNsYXNzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KCJDIik7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0UmVuYW1lSW5uZXJJblN1cGVyQ2xhc3NTdGF0aWMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoIkMiKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RSZW5hbWVTdGF0aWNNZXRob2RUeXBlUGFyYW1ldGVyKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KCJFIik7CisgIH0KKyAgCisgIHB1YmxpYyB2b2lkIHRlc3RSZW5hbWVGaWVsZEluU3VwZXIoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoImdnIik7CisgIH0KKworICBwcml2YXRlIHZvaWQgZG9UZXN0KGZpbmFsIFN0cmluZyBuZXdOYW1lKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBjb25maWd1cmVCeUZpbGUoQkFTRV9QQVRIICsgZ2V0VGVzdE5hbWUoZmFsc2UpICsgIi5qYXZhIik7CisgICAgUHNpRWxlbWVudCBlbGVtZW50ID0gVGFyZ2V0RWxlbWVudFV0aWxCYXNlCisgICAgICAgIC5maW5kVGFyZ2V0RWxlbWVudChteUVkaXRvciwgVGFyZ2V0RWxlbWVudFV0aWxCYXNlLkVMRU1FTlRfTkFNRV9BQ0NFUFRFRCB8IFRhcmdldEVsZW1lbnRVdGlsQmFzZS5SRUZFUkVOQ0VEX0VMRU1FTlRfQUNDRVBURUQpOworICAgIGFzc2VydE5vdE51bGwoZWxlbWVudCk7CisgICAgbmV3IFJlbmFtZVByb2Nlc3NvcihnZXRQcm9qZWN0KCksIGVsZW1lbnQsIG5ld05hbWUsIHRydWUsIHRydWUpLnJ1bigpOworICAgIGNoZWNrUmVzdWx0QnlGaWxlKEJBU0VfUEFUSCArIGdldFRlc3ROYW1lKGZhbHNlKSArICIuamF2YS5hZnRlciIpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEFsbFVzYWdlc0luQ29kZSgpIHRocm93cyBFeGNlcHRpb24geworICAgIGNvbmZpZ3VyZUJ5RmlsZShCQVNFX1BBVEggKyBnZXRUZXN0TmFtZShmYWxzZSkgKyAiLmphdmEiKTsKKyAgICBQc2lFbGVtZW50IGVsZW1lbnQgPSBUYXJnZXRFbGVtZW50VXRpbEJhc2UKKyAgICAgICAgLmZpbmRUYXJnZXRFbGVtZW50KG15RWRpdG9yLCBUYXJnZXRFbGVtZW50VXRpbEJhc2UuRUxFTUVOVF9OQU1FX0FDQ0VQVEVEIHwgVGFyZ2V0RWxlbWVudFV0aWxCYXNlLlJFRkVSRU5DRURfRUxFTUVOVF9BQ0NFUFRFRCk7CisgICAgYXNzZXJ0Tm90TnVsbChlbGVtZW50KTsKKyAgICBmaW5hbCBVc2FnZUluZm9bXSB1c2FnZUluZm9zID0gUmVuYW1lVXRpbC5maW5kVXNhZ2VzKGVsZW1lbnQsICJuZXdOYW1lIiwgdHJ1ZSwgdHJ1ZSwgbmV3IEhhc2hNYXA8UHNpRWxlbWVudCwgU3RyaW5nPigpKTsKKyAgICBhc3NlcnRTaXplKDEsIHVzYWdlSW5mb3MpOworICAgIGZvciAoVXNhZ2VJbmZvIHVzYWdlSW5mbyA6IHVzYWdlSW5mb3MpIHsKKyAgICAgIGFzc2VydFRydWUodXNhZ2VJbmZvIGluc3RhbmNlb2YgTW92ZVJlbmFtZVVzYWdlSW5mbyk7CisgICAgICBhc3NlcnRGYWxzZSh1c2FnZUluZm8uaXNOb25Db2RlVXNhZ2UpOworICAgIH0KKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL3JlZmFjdG9yaW5nL1JlbmFtZUZpZWxkVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL3JlZmFjdG9yaW5nL1JlbmFtZUZpZWxkVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEyYTJlNjIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovcmVmYWN0b3JpbmcvUmVuYW1lRmllbGRUZXN0LmphdmEKQEAgLTAsMCArMSwxMDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwMC0yMDEyIEpldEJyYWlucyBzLnIuby4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKy8qCisgKiBDcmVhdGVkIGJ5IEludGVsbGlKIElERUEuCisgKiBVc2VyOiBkc2wKKyAqIERhdGU6IDA0LjA2LjIwMDIKKyAqIFRpbWU6IDIwOjAxOjQzCisgKiBUbyBjaGFuZ2UgdGVtcGxhdGUgZm9yIG5ldyBjbGFzcyB1c2UKKyAqIENvZGUgU3R5bGUgfCBDbGFzcyBUZW1wbGF0ZXMgb3B0aW9ucyAoVG9vbHMgfCBJREUgT3B0aW9ucykuCisgKi8KK3BhY2thZ2UgY29tLmludGVsbGlqLnJlZmFjdG9yaW5nOworCitpbXBvcnQgY29tLmludGVsbGlqLkphdmFUZXN0VXRpbDsKK2ltcG9ydCBjb20uaW50ZWxsaWouY29kZUluc2lnaHQuVGFyZ2V0RWxlbWVudFV0aWxCYXNlOworaW1wb3J0IGNvbS5pbnRlbGxpai5sYW5nLmphdmEuSmF2YUxhbmd1YWdlOworaW1wb3J0IGNvbS5pbnRlbGxpai5wc2kuUHNpRWxlbWVudDsKK2ltcG9ydCBjb20uaW50ZWxsaWoucHNpLmNvZGVTdHlsZS5Db2RlU3R5bGVTZXR0aW5nc01hbmFnZXI7CitpbXBvcnQgY29tLmludGVsbGlqLnJlZmFjdG9yaW5nLnJlbmFtZS5SZW5hbWVQcm9jZXNzb3I7CitpbXBvcnQgY29tLmludGVsbGlqLnJlZmFjdG9yaW5nLnJlbmFtZS5SZW5hbWVXcm9uZ1JlZkhhbmRsZXI7CitpbXBvcnQgb3JnLmpldGJyYWlucy5hbm5vdGF0aW9ucy5Ob25ObHM7CitpbXBvcnQgb3JnLmpldGJyYWlucy5hbm5vdGF0aW9ucy5Ob3ROdWxsOworCitwdWJsaWMgY2xhc3MgUmVuYW1lRmllbGRUZXN0IGV4dGVuZHMgTGlnaHRSZWZhY3RvcmluZ1Rlc3RDYXNlIHsKKyAgQE5vdE51bGwKKyAgQE92ZXJyaWRlCisgIHByb3RlY3RlZCBTdHJpbmcgZ2V0VGVzdERhdGFQYXRoKCkgeworICAgIHJldHVybiBKYXZhVGVzdFV0aWwuZ2V0SmF2YVRlc3REYXRhUGF0aCgpOworICB9CisKKyAgcHJvdGVjdGVkIHZvaWQgZG9UZXN0KEBOb25ObHMgU3RyaW5nIG5ld05hbWUsIEBOb25ObHMgU3RyaW5nIGV4dCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgU3RyaW5nIHN1ZmZpeCA9IGdldFRlc3ROYW1lKGZhbHNlKTsKKyAgICBjb25maWd1cmVCeUZpbGUoIi9yZWZhY3RvcmluZy9yZW5hbWVGaWVsZC9iZWZvcmUiICsgc3VmZml4ICsgIi4iICsgZXh0KTsKKyAgICBwZXJmb3JtKG5ld05hbWUpOworICAgIGNoZWNrUmVzdWx0QnlGaWxlKCIvcmVmYWN0b3JpbmcvcmVuYW1lRmllbGQvYWZ0ZXIiICsgc3VmZml4ICsgIi4iICsgZXh0KTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RTaW1wbGVGaWVsZFJlbmFtaW5nKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KCJteU5ld0ZpZWxkIiwgImphdmEiKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RDb2xsaXNpb25zSW5NZXRob2QoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoIm5ld0ZpZWxkTmFtZSIsICJqYXZhIik7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0Q29sbGlzaW9uc0luTWV0aG9kT2ZTdWJDbGFzcygpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdCgibmV3RmllbGROYW1lIiwgImphdmEiKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RDb2xsaXNpb25zUmVuYW1pbmdGaWVsZFdpdGhTZXR0ZXIoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoInV0bSIsICJqYXZhIik7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0SGlkZXNPdXRlcigpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdCgieCIsICJqYXZhIik7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0RW51bUNvbnN0YW50V2l0aENvbnN0cnVjdG9yKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KCJuZXdOYW1lIiwgImphdmEiKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RFbnVtQ29uc3RhbnRXaXRoSW5pdGlhbGl6ZXIoKSB0aHJvd3MgRXhjZXB0aW9uIHsgIC8vIElERUFERVYtMjg4NDAKKyAgICBkb1Rlc3QoIkFBQSIsICJqYXZhIik7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0Tm9uTm9ybWFsaXplZEZpZWxkcygpIHRocm93cyBFeGNlcHRpb24geyAvLyBJREVBREVWLTM0MzQ0CisgICAgZG9UZXN0KCJuZXdGaWVsZCIsICJqYXZhIik7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0UmVuYW1lV3JvbmdSZWZEaXNhYmxlZCgpIHsKKyAgICBTdHJpbmcgc3VmZml4ID0gZ2V0VGVzdE5hbWUoZmFsc2UpOworICAgIGNvbmZpZ3VyZUJ5RmlsZSgiL3JlZmFjdG9yaW5nL3JlbmFtZUZpZWxkL2JlZm9yZSIgKyBzdWZmaXggKyAiLmphdmEiKTsKKyAgICBhc3NlcnRGYWxzZShSZW5hbWVXcm9uZ1JlZkhhbmRsZXIuaXNBdmFpbGFibGUoZ2V0UHJvamVjdCgpLCBnZXRFZGl0b3IoKSwgZ2V0RmlsZSgpKSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0RmllbGRJbkNvbHVtbnMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAvLyBBc3N1bWluZyB0aGF0IHRlc3QgaW5mcmFzdHJ1Y3R1cmUgc2V0dXBzIHRlbXAgc2V0dGluZ3MgKENvZGVTdHlsZVNldHRpbmdzTWFuYWdlci5zZXRUZW1wb3JhcnlTZXR0aW5ncygpKSBhbmQgd2UgZG9uJ3QKKyAgICAvLyBuZWVkIHRvIHBlcmZvcm0gZXhwbGljaXQgY2xlYW4tdXAgYXQgdGhlIHRlc3QgbGV2ZWwuCisgICAgQ29kZVN0eWxlU2V0dGluZ3NNYW5hZ2VyLmdldFNldHRpbmdzKGdldFByb2plY3QoKSkuZ2V0Q29tbW9uU2V0dGluZ3MoSmF2YUxhbmd1YWdlLklOU1RBTkNFKS5BTElHTl9HUk9VUF9GSUVMRF9ERUNMQVJBVElPTlMgPSB0cnVlOworICAgIGRvVGVzdCgiamoiLCAiamF2YSIpOworICB9CisgIAorICBwcm90ZWN0ZWQgc3RhdGljIHZvaWQgcGVyZm9ybShTdHJpbmcgbmV3TmFtZSkgeworICAgIFBzaUVsZW1lbnQgZWxlbWVudCA9IFRhcmdldEVsZW1lbnRVdGlsQmFzZS5maW5kVGFyZ2V0RWxlbWVudChteUVkaXRvciwgVGFyZ2V0RWxlbWVudFV0aWxCYXNlCisgICAgICAuRUxFTUVOVF9OQU1FX0FDQ0VQVEVEIHwgVGFyZ2V0RWxlbWVudFV0aWxCYXNlLlJFRkVSRU5DRURfRUxFTUVOVF9BQ0NFUFRFRCk7CisKKyAgICBuZXcgUmVuYW1lUHJvY2Vzc29yKGdldFByb2plY3QoKSwgZWxlbWVudCwgbmV3TmFtZSwgZmFsc2UsIGZhbHNlKS5ydW4oKTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL3JlZmFjdG9yaW5nL1JlbmFtZUxvY2FsVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL3JlZmFjdG9yaW5nL1JlbmFtZUxvY2FsVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE1NzUyNmIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovcmVmYWN0b3JpbmcvUmVuYW1lTG9jYWxUZXN0LmphdmEKQEAgLTAsMCArMSwxNjIgQEAKK3BhY2thZ2UgY29tLmludGVsbGlqLnJlZmFjdG9yaW5nOworCitpbXBvcnQgY29tLmludGVsbGlqLkphdmFUZXN0VXRpbDsKK2ltcG9ydCBjb20uaW50ZWxsaWouY29kZUluc2lnaHQuVGFyZ2V0RWxlbWVudFV0aWxCYXNlOworaW1wb3J0IGNvbS5pbnRlbGxpai5jb2RlSW5zaWdodC50ZW1wbGF0ZS5UZW1wbGF0ZU1hbmFnZXI7CitpbXBvcnQgY29tLmludGVsbGlqLmNvZGVJbnNpZ2h0LnRlbXBsYXRlLmltcGwuVGVtcGxhdGVNYW5hZ2VySW1wbDsKK2ltcG9ydCBjb20uaW50ZWxsaWouY29kZUluc2lnaHQudGVtcGxhdGUuaW1wbC5UZW1wbGF0ZVN0YXRlOworaW1wb3J0IGNvbS5pbnRlbGxpai5sYW5nLmphdmEuSmF2YVJlZmFjdG9yaW5nU3VwcG9ydFByb3ZpZGVyOworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLmNvbW1hbmQuV3JpdGVDb21tYW5kQWN0aW9uOworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLnV0aWwuVGV4dFJhbmdlOworaW1wb3J0IGNvbS5pbnRlbGxpai5wc2kuUHNpRWxlbWVudDsKK2ltcG9ydCBjb20uaW50ZWxsaWoucmVmYWN0b3JpbmcucmVuYW1lLkphdmFOYW1lU3VnZ2VzdGlvblByb3ZpZGVyOworaW1wb3J0IGNvbS5pbnRlbGxpai5yZWZhY3RvcmluZy5yZW5hbWUuUmVuYW1lUHJvY2Vzc29yOworaW1wb3J0IGNvbS5pbnRlbGxpai5yZWZhY3RvcmluZy5yZW5hbWUuUmVuYW1lV3JvbmdSZWZIYW5kbGVyOworaW1wb3J0IGNvbS5pbnRlbGxpai5yZWZhY3RvcmluZy5yZW5hbWUuaW5wbGFjZS5WYXJpYWJsZUlucGxhY2VSZW5hbWVIYW5kbGVyOworaW1wb3J0IGNvbS5pbnRlbGxpai50ZXN0RnJhbWV3b3JrLmZpeHR1cmVzLkNvZGVJbnNpZ2h0VGVzdFV0aWw7CitpbXBvcnQgb3JnLmpldGJyYWlucy5hbm5vdGF0aW9ucy5Ob3ROdWxsOworCitpbXBvcnQgamF2YS51dGlsLkhhc2hTZXQ7CisKKy8qKgorICogQGF1dGhvciB2ZW4KKyAqLworcHVibGljIGNsYXNzIFJlbmFtZUxvY2FsVGVzdCBleHRlbmRzIExpZ2h0UmVmYWN0b3JpbmdUZXN0Q2FzZSB7CisgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBCQVNFX1BBVEggPSAiL3JlZmFjdG9yaW5nL3JlbmFtZUxvY2FsLyI7CisKKyAgQE5vdE51bGwKKyAgQE92ZXJyaWRlCisgIHByb3RlY3RlZCBTdHJpbmcgZ2V0VGVzdERhdGFQYXRoKCkgeworICAgIHJldHVybiBKYXZhVGVzdFV0aWwuZ2V0SmF2YVRlc3REYXRhUGF0aCgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdElERUFERVYzMzIwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KCJmIik7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0SURFQURFVjEzODQ5KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KCJhYWFhYSIpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdENvbmZsaWN0V2l0aE91dGVyQ2xhc3NGaWVsZCgpIHRocm93cyBFeGNlcHRpb24geyAgLy8gSURFQURFVi0yNDU2NAorICAgIGRvVGVzdCgiZiIpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdENvbmZsaWN0V2l0aEphdmFkb2NUYWcoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoImkiKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RSZW5hbWVMb2NhbEluY29tcGxldGUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoIl9pIik7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0UmVuYW1lUGFyYW1JbmNvbXBsZXRlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KCJfaSIpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdENsYXNzTmFtZVVzZWRJbk1ldGhvZFJlZnMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoIkJhcjEiKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RSZW5hbWVQYXJhbVVuaXF1ZU5hbWUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBjb25maWd1cmVCeUZpbGUoQkFTRV9QQVRIICsgZ2V0VGVzdE5hbWUoZmFsc2UpICsgIi5qYXZhIik7CisgICAgUHNpRWxlbWVudCBlbGVtZW50ID0gVGFyZ2V0RWxlbWVudFV0aWxCYXNlCisgICAgICAuZmluZFRhcmdldEVsZW1lbnQobXlFZGl0b3IsIFRhcmdldEVsZW1lbnRVdGlsQmFzZS5FTEVNRU5UX05BTUVfQUNDRVBURUQgfCBUYXJnZXRFbGVtZW50VXRpbEJhc2UuUkVGRVJFTkNFRF9FTEVNRU5UX0FDQ0VQVEVEKTsKKyAgICBhc3NlcnROb3ROdWxsKGVsZW1lbnQpOworICAgIGZpbmFsIEhhc2hTZXQ8U3RyaW5nPiByZXN1bHQgPSBuZXcgSGFzaFNldDxTdHJpbmc+KCk7CisgICAgbmV3IEphdmFOYW1lU3VnZ2VzdGlvblByb3ZpZGVyKCkuZ2V0U3VnZ2VzdGVkTmFtZXMoZWxlbWVudCwgZ2V0RmlsZSgpLCByZXN1bHQpOworICAgIGFzc2VydFRydWUocmVzdWx0LnRvU3RyaW5nKCksIHJlc3VsdC5jb250YWlucygid2luZG93IikpOworICB9CisKKyAgcHJpdmF0ZSB2b2lkIGRvVGVzdChmaW5hbCBTdHJpbmcgbmV3TmFtZSkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgY29uZmlndXJlQnlGaWxlKEJBU0VfUEFUSCArIGdldFRlc3ROYW1lKGZhbHNlKSArICIuamF2YSIpOworICAgIFBzaUVsZW1lbnQgZWxlbWVudCA9IFRhcmdldEVsZW1lbnRVdGlsQmFzZQorICAgICAgLmZpbmRUYXJnZXRFbGVtZW50KG15RWRpdG9yLCBUYXJnZXRFbGVtZW50VXRpbEJhc2UuRUxFTUVOVF9OQU1FX0FDQ0VQVEVEIHwgVGFyZ2V0RWxlbWVudFV0aWxCYXNlLlJFRkVSRU5DRURfRUxFTUVOVF9BQ0NFUFRFRCk7CisgICAgYXNzZXJ0Tm90TnVsbChlbGVtZW50KTsKKyAgICBuZXcgUmVuYW1lUHJvY2Vzc29yKGdldFByb2plY3QoKSwgZWxlbWVudCwgbmV3TmFtZSwgdHJ1ZSwgdHJ1ZSkucnVuKCk7CisgICAgY2hlY2tSZXN1bHRCeUZpbGUoQkFTRV9QQVRIICsgZ2V0VGVzdE5hbWUoZmFsc2UpICsgIl9hZnRlci5qYXZhIik7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0UmVuYW1lSW5QbGFjZVF1YWxpZnlGaWVsZFJlZmVyZW5jZSgpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdElucGxhY2VSZW5hbWUoIm15SSIpOworICB9CisgIAorICBwdWJsaWMgdm9pZCB0ZXN0UmVuYW1lSW5QbGFjZVF1YWxpZnlGaWVsZFJlZmVyZW5jZUluQ2hpbGQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3RJbnBsYWNlUmVuYW1lKCJteUkiKTsKKyAgfQorICAKKyAgcHVibGljIHZvaWQgdGVzdFJlbmFtZUluUGxhY2VUaGlzTmVlZGVkKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0SW5wbGFjZVJlbmFtZSgiYSIpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFJlbmFtZUluUGxhY2VQYXJhbUluT3ZlcnJpZGVyQXV0b21hdGljUmVuYW1lcigpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdElucGxhY2VSZW5hbWUoInBwIik7CisgIH0KKyAgCisgIHB1YmxpYyB2b2lkIHRlc3RSZW5hbWVGaWVsZFdpdGhDb25zdHJ1Y3RvclBhcmFtQXV0b21hdGljKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KCJwcCIpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFJlbmFtZUluUGxhY2VQYXJhbUluT3ZlcnJpZGVyQXV0b21hdGljUmVuYW1lckNvbmZsaWN0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0SW5wbGFjZVJlbmFtZSgicHAiKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RSZW5hbWVSZXNvdXJjZSgpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdCgicjEiKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RSZW5hbWVSZXNvdXJjZUluUGxhY2UoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3RJbnBsYWNlUmVuYW1lKCJyMSIpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFJlbmFtZUluUGxhY2VJblN0YXRpY0NvbnRleHRXaXRoQ29uZmxpY3RpbmdGaWVsZCgpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdElucGxhY2VSZW5hbWUoInMiKTsKKyAgfQorCisgIHByaXZhdGUgdm9pZCBkb1Rlc3RJbnBsYWNlUmVuYW1lKGZpbmFsIFN0cmluZyBuZXdOYW1lKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBjb25maWd1cmVCeUZpbGUoQkFTRV9QQVRIICsgIi8iICsgZ2V0VGVzdE5hbWUoZmFsc2UpICsgIi5qYXZhIik7CisKKyAgICBmaW5hbCBQc2lFbGVtZW50IGVsZW1lbnQgPSBUYXJnZXRFbGVtZW50VXRpbEJhc2UuZmluZFRhcmdldEVsZW1lbnQobXlFZGl0b3IsIFRhcmdldEVsZW1lbnRVdGlsQmFzZS5FTEVNRU5UX05BTUVfQUNDRVBURUQpOworICAgIGFzc2VydE5vdE51bGwoZWxlbWVudCk7CisgICAgYXNzZXJ0VHJ1ZSgiSW4tcGxhY2UgcmVuYW1lIG5vdCBhbGxvd2VkIGZvciAiICsgZWxlbWVudCwKKyAgICAgICAgICAgICAgIEphdmFSZWZhY3RvcmluZ1N1cHBvcnRQcm92aWRlci5tYXlSZW5hbWVJbnBsYWNlKGVsZW1lbnQsIG51bGwpKTsKKworICAgIENvZGVJbnNpZ2h0VGVzdFV0aWwuZG9JbmxpbmVSZW5hbWUobmV3IFZhcmlhYmxlSW5wbGFjZVJlbmFtZUhhbmRsZXIoKSwgbmV3TmFtZSwgZ2V0RWRpdG9yKCksIGVsZW1lbnQpOworCisgICAgY2hlY2tSZXN1bHRCeUZpbGUoQkFTRV9QQVRIICsgZ2V0VGVzdE5hbWUoZmFsc2UpICsgIl9hZnRlci5qYXZhIik7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0UmVuYW1lV3JvbmdSZWYoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1JlbmFtZVdyb25nUmVmKCJpIik7CisgIH0KKworICBwcml2YXRlIHZvaWQgZG9SZW5hbWVXcm9uZ1JlZihmaW5hbCBTdHJpbmcgbmV3TmFtZSkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZmluYWwgU3RyaW5nIG5hbWUgPSBnZXRUZXN0TmFtZShmYWxzZSk7CisgICAgY29uZmlndXJlQnlGaWxlKEJBU0VfUEFUSCArIG5hbWUgKyAiLmphdmEiKTsKKworICAgIGZpbmFsIFRlbXBsYXRlTWFuYWdlckltcGwgdGVtcGxhdGVNYW5hZ2VyID0gKFRlbXBsYXRlTWFuYWdlckltcGwpVGVtcGxhdGVNYW5hZ2VyLmdldEluc3RhbmNlKGdldFByb2plY3QoKSk7CisgICAgdHJ5IHsKKyAgICAgIHRlbXBsYXRlTWFuYWdlci5zZXRUZW1wbGF0ZVRlc3RpbmcodHJ1ZSk7CisKKyAgICAgIG5ldyBSZW5hbWVXcm9uZ1JlZkhhbmRsZXIoKS5pbnZva2UoZ2V0UHJvamVjdCgpLCBnZXRFZGl0b3IoKSwgZ2V0RmlsZSgpLCBudWxsKTsKKworICAgICAgZmluYWwgVGVtcGxhdGVTdGF0ZSBzdGF0ZSA9IFRlbXBsYXRlTWFuYWdlckltcGwuZ2V0VGVtcGxhdGVTdGF0ZShnZXRFZGl0b3IoKSk7CisgICAgICBhc3NlcnQgc3RhdGUgIT0gbnVsbDsKKyAgICAgIGZpbmFsIFRleHRSYW5nZSByYW5nZSA9IHN0YXRlLmdldEN1cnJlbnRWYXJpYWJsZVJhbmdlKCk7CisgICAgICBhc3NlcnQgcmFuZ2UgIT0gbnVsbDsKKworICAgICAgbmV3IFdyaXRlQ29tbWFuZEFjdGlvbi5TaW1wbGUoZ2V0UHJvamVjdCgpKSB7CisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwcm90ZWN0ZWQgdm9pZCBydW4oKSB0aHJvd3MgVGhyb3dhYmxlIHsKKyAgICAgICAgICBnZXRFZGl0b3IoKS5nZXREb2N1bWVudCgpLnJlcGxhY2VTdHJpbmcocmFuZ2UuZ2V0U3RhcnRPZmZzZXQoKSwgcmFuZ2UuZ2V0RW5kT2Zmc2V0KCksIG5ld05hbWUpOworICAgICAgICB9CisgICAgICB9LmV4ZWN1dGUoKS50aHJvd0V4Y2VwdGlvbigpOworCisgICAgICBzdGF0ZS5nb3RvRW5kKGZhbHNlKTsKKyAgICAgIGNoZWNrUmVzdWx0QnlGaWxlKEJBU0VfUEFUSCArIG5hbWUgKyAiX2FmdGVyLmphdmEiKTsKKyAgICB9CisgICAgZmluYWxseSB7CisgICAgICB0ZW1wbGF0ZU1hbmFnZXIuc2V0VGVtcGxhdGVUZXN0aW5nKGZhbHNlKTsKKyAgICB9CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9yZWZhY3RvcmluZy9SZW5hbWVNZW1iZXJzSW5wbGFjZVRlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9yZWZhY3RvcmluZy9SZW5hbWVNZW1iZXJzSW5wbGFjZVRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMTRmNmVkCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL3JlZmFjdG9yaW5nL1JlbmFtZU1lbWJlcnNJbnBsYWNlVGVzdC5qYXZhCkBAIC0wLDAgKzEsOTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwMC0yMDExIEpldEJyYWlucyBzLnIuby4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCitwYWNrYWdlIGNvbS5pbnRlbGxpai5yZWZhY3RvcmluZzsKKworaW1wb3J0IGNvbS5pbnRlbGxpai5KYXZhVGVzdFV0aWw7CitpbXBvcnQgY29tLmludGVsbGlqLmNvZGVJbnNpZ2h0LlRhcmdldEVsZW1lbnRVdGlsQmFzZTsKK2ltcG9ydCBjb20uaW50ZWxsaWoucHNpLlBzaUVsZW1lbnQ7CitpbXBvcnQgY29tLmludGVsbGlqLnJlZmFjdG9yaW5nLnJlbmFtZS5pbnBsYWNlLk1lbWJlcklucGxhY2VSZW5hbWVIYW5kbGVyOworaW1wb3J0IGNvbS5pbnRlbGxpai50ZXN0RnJhbWV3b3JrLkxpZ2h0Q29kZUluc2lnaHRUZXN0Q2FzZTsKK2ltcG9ydCBjb20uaW50ZWxsaWoudGVzdEZyYW1ld29yay5maXh0dXJlcy5Db2RlSW5zaWdodFRlc3RVdGlsOworaW1wb3J0IG9yZy5qZXRicmFpbnMuYW5ub3RhdGlvbnMuTm90TnVsbDsKKworLyoqCisgKiBVc2VyOiBhbm5hCisgKiBEYXRlOiAxMi80LzExCisgKi8KK3B1YmxpYyBjbGFzcyBSZW5hbWVNZW1iZXJzSW5wbGFjZVRlc3QgZXh0ZW5kcyBMaWdodENvZGVJbnNpZ2h0VGVzdENhc2UgeworICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQkFTRV9QQVRIID0gIi9yZWZhY3RvcmluZy9yZW5hbWVJbnBsYWNlLyI7CisKKyAgQE5vdE51bGwKKyAgQE92ZXJyaWRlCisgIHByb3RlY3RlZCBTdHJpbmcgZ2V0VGVzdERhdGFQYXRoKCkgeworICAgIHJldHVybiBKYXZhVGVzdFV0aWwuZ2V0SmF2YVRlc3REYXRhUGF0aCgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdElubmVyQ2xhc3MoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3RJbnBsYWNlUmVuYW1lKCJORVdfTkFNRSIpOworICB9CisgIAorICBwdWJsaWMgdm9pZCB0ZXN0Q29uc3RydWN0b3IoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3RJbnBsYWNlUmVuYW1lKCJCYXIiKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RTdXBlck1ldGhvZCgpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdElucGxhY2VSZW5hbWUoInh4eCIpOworICB9CisgIAorICBwdWJsaWMgdm9pZCB0ZXN0U3VwZXJNZXRob2RBbm9ueW1vdXNJbmhlcml0b3IoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3RJbnBsYWNlUmVuYW1lKCJ4eHgiKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RNdWx0aXBsZUNvbnN0cnVjdG9ycygpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdElucGxhY2VSZW5hbWUoIkJhciIpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdENsYXNzV2l0aE11bHRpcGxlQ29uc3RydWN0b3JzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0SW5wbGFjZVJlbmFtZSgiQmFyIik7CisgIH0KKyAgCisgIHB1YmxpYyB2b2lkIHRlc3RNZXRob2RXaXRoSmF2YWRvY1JlZigpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdElucGxhY2VSZW5hbWUoImJhciIpOworICB9CisgIAorICBwdWJsaWMgdm9pZCB0ZXN0RW51bUNvbnN0cnVjdG9yKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0SW5wbGFjZVJlbmFtZSgiQmFyIik7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0TWV0aG9kV2l0aE1ldGhvZFJlZigpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdElucGxhY2VSZW5hbWUoImJhciIpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdENvbmZsaWN0aW5nTWV0aG9kTmFtZSgpIHRocm93cyBFeGNlcHRpb24geworICAgIHRyeSB7CisgICAgICBkb1Rlc3RJbnBsYWNlUmVuYW1lKCJiYXIiKTsKKyAgICB9CisgICAgY2F0Y2ggKEJhc2VSZWZhY3RvcmluZ1Byb2Nlc3Nvci5Db25mbGljdHNJblRlc3RzRXhjZXB0aW9uIGUpIHsKKyAgICAgIGFzc2VydEVxdWFscygiTWV0aG9kIGJhcigpIGlzIGFscmVhZHkgZGVmaW5lZCBpbiB0aGUgY2xhc3MgPGI+PGNvZGU+Rm9vPC9jb2RlPjwvYj4uIiwgZS5nZXRNZXNzYWdlKCkpOworICAgICAgY2hlY2tSZXN1bHRCeUZpbGUoQkFTRV9QQVRIICsgZ2V0VGVzdE5hbWUoZmFsc2UpICsgIl9hZnRlci5qYXZhIik7CisgICAgICByZXR1cm47CisgICAgfQorICAgIGZhaWwoIkNvbmZsaWN0IHdhcyBub3QgZGV0ZWN0ZWQiKTsKKyAgfQorCisgIHByaXZhdGUgdm9pZCBkb1Rlc3RJbnBsYWNlUmVuYW1lKGZpbmFsIFN0cmluZyBuZXdOYW1lKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBjb25maWd1cmVCeUZpbGUoQkFTRV9QQVRIICsgIi8iICsgZ2V0VGVzdE5hbWUoZmFsc2UpICsgIi5qYXZhIik7CisKKyAgICBmaW5hbCBQc2lFbGVtZW50IGVsZW1lbnQgPSBUYXJnZXRFbGVtZW50VXRpbEJhc2UuZmluZFRhcmdldEVsZW1lbnQobXlFZGl0b3IsIFRhcmdldEVsZW1lbnRVdGlsQmFzZS5nZXRJbnN0YW5jZSgpLmdldEFsbEFjY2VwdGVkKCkpOworICAgIGFzc2VydE5vdE51bGwoZWxlbWVudCk7CisKKyAgICBDb2RlSW5zaWdodFRlc3RVdGlsLmRvSW5saW5lUmVuYW1lKG5ldyBNZW1iZXJJbnBsYWNlUmVuYW1lSGFuZGxlcigpLCBuZXdOYW1lLCBnZXRFZGl0b3IoKSwgZWxlbWVudCk7CisKKyAgICBjaGVja1Jlc3VsdEJ5RmlsZShCQVNFX1BBVEggKyBnZXRUZXN0TmFtZShmYWxzZSkgKyAiX2FmdGVyLmphdmEiKTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL3JlZmFjdG9yaW5nL1JlbmFtZU1ldGhvZE11bHRpVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL3JlZmFjdG9yaW5nL1JlbmFtZU1ldGhvZE11bHRpVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYyYjUyZTEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovcmVmYWN0b3JpbmcvUmVuYW1lTWV0aG9kTXVsdGlUZXN0LmphdmEKQEAgLTAsMCArMSw5MSBAQAorcGFja2FnZSBjb20uaW50ZWxsaWoucmVmYWN0b3Jpbmc7CisKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS5maWxlRWRpdG9yLkZpbGVEb2N1bWVudE1hbmFnZXI7CitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkudmZzLlZpcnR1YWxGaWxlOworaW1wb3J0IGNvbS5pbnRlbGxpai5wc2kuSmF2YVBzaUZhY2FkZTsKK2ltcG9ydCBjb20uaW50ZWxsaWoucHNpLlBzaUNsYXNzOworaW1wb3J0IGNvbS5pbnRlbGxpai5wc2kuUHNpTWV0aG9kOworaW1wb3J0IGNvbS5pbnRlbGxpai5wc2kuc2VhcmNoLkdsb2JhbFNlYXJjaFNjb3BlOworaW1wb3J0IGNvbS5pbnRlbGxpai5yZWZhY3RvcmluZy5yZW5hbWUuUmVuYW1lUHJvY2Vzc29yOworaW1wb3J0IGNvbS5pbnRlbGxpai5KYXZhVGVzdFV0aWw7CitpbXBvcnQgb3JnLmp1bml0LkFzc2VydDsKKworLyoqCisgKiBAYXV0aG9yIGRzbAorICovCitwdWJsaWMgY2xhc3MgUmVuYW1lTWV0aG9kTXVsdGlUZXN0IGV4dGVuZHMgTXVsdGlGaWxlVGVzdENhc2UgeworICBAT3ZlcnJpZGUKKyAgcHJvdGVjdGVkIFN0cmluZyBnZXRUZXN0RGF0YVBhdGgoKSB7CisgICAgcmV0dXJuIEphdmFUZXN0VXRpbC5nZXRKYXZhVGVzdERhdGFQYXRoKCk7CisgIH0KKworICBAT3ZlcnJpZGUKKyAgcHJvdGVjdGVkIFN0cmluZyBnZXRUZXN0Um9vdCgpIHsKKyAgICByZXR1cm4gIi9yZWZhY3RvcmluZy9yZW5hbWVNZXRob2QvbXVsdGkvIjsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RTdGF0aWNJbXBvcnQxKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KCJwYWNrMS5BIiwgInZvaWQgc3RhdGljTWV0aG9kKGludCBpKSIsICJyZW5hbWVkU3RhdGljTWV0aG9kIik7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0U3RhdGljSW1wb3J0MigpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdCgicGFjazEuQSIsICJ2b2lkIHN0YXRpY01ldGhvZChpbnQgaSkiLCAicmVuYW1lZFN0YXRpY01ldGhvZCIpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFN0YXRpY0ltcG9ydDMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoInBhY2sxLkEiLCAidm9pZCBzdGF0aWNNZXRob2QoaW50IGkpIiwgInJlbmFtZWRTdGF0aWNNZXRob2QiKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RTdGF0aWNJbXBvcnQ0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KCJwYWNrMS5BIiwgInZvaWQgc3RhdGljTWV0aG9kKGludCBpKSIsICJyZW5hbWVkU3RhdGljTWV0aG9kIik7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0RGVmYXVsdEFubm90YXRpb25NZXRob2QoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoInBhY2sxLkEiLCAiaW50IHZhbHVlKCkiLCAiaW50VmFsdWUiKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RSZW5hbWUyT3ZlcnJpZGVGaW5hbCgpIHRocm93cyBFeGNlcHRpb24geworICAgIHRyeSB7CisgICAgICBkb1Rlc3QoInAuQiIsICJ2b2lkIG1ldGhvZCgpIiwgImZpbmFsTWV0aG9kIik7CisgICAgfQorICAgIGNhdGNoIChCYXNlUmVmYWN0b3JpbmdQcm9jZXNzb3IuQ29uZmxpY3RzSW5UZXN0c0V4Y2VwdGlvbiBlKSB7CisgICAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKCJSZW5hbWluZyBtZXRob2Qgd2lsbCBvdmVycmlkZSBmaW5hbCBcIm1ldGhvZCA8Yj48Y29kZT5BLmZpbmFsTWV0aG9kKCk8L2NvZGU+PC9iPlwiXG4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIk1ldGhvZCBmaW5hbE1ldGhvZCgpIHdpbGwgb3ZlcnJpZGUgXG4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgImEgbWV0aG9kIG9mIHRoZSBiYXNlIGNsYXNzIDxiPjxjb2RlPnAuQTwvY29kZT48L2I+LiIsIGUuZ2V0TWVzc2FnZSgpKTsKKyAgICAgIHJldHVybjsKKyAgICB9CisgICAgZmFpbCgiQ29uZmxpY3RzIHdlcmUgbm90IGZvdW5kIik7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0UmVuYW1lMkhpZGVGcm9tQW5vbnltb3VzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KCJwLkZvbyIsICJ2b2lkIGJ1enooaW50IGkpIiwgImJhenoiKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RBbGlnbmVkTXVsdGlsaW5lUGFyYW1ldGVycygpIHRocm93cyBFeGNlcHRpb24geworICAgIGdldEN1cnJlbnRDb2RlU3R5bGVTZXR0aW5ncygpLkFMSUdOX01VTFRJTElORV9QQVJBTUVURVJTID0gdHJ1ZTsKKyAgICBnZXRDdXJyZW50Q29kZVN0eWxlU2V0dGluZ3MoKS5BTElHTl9NVUxUSUxJTkVfUEFSQU1FVEVSU19JTl9DQUxMUyA9IHRydWU7CisgICAgZG9UZXN0KCJ2b2lkIHRlc3QxMjMoaW50IGksIGludCBqKSIsICJ0ZXN0MTIzYXNkIik7CisgIH0KKworICBwcml2YXRlIHZvaWQgZG9UZXN0KGZpbmFsIFN0cmluZyBtZXRob2RTaWduYXR1cmUsIGZpbmFsIFN0cmluZyBuZXdOYW1lKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoZ2V0VGVzdE5hbWUoZmFsc2UpLCBtZXRob2RTaWduYXR1cmUsIG5ld05hbWUpOworICB9CisKKyAgcHJpdmF0ZSB2b2lkIGRvVGVzdChmaW5hbCBTdHJpbmcgY2xhc3NOYW1lLCBmaW5hbCBTdHJpbmcgbWV0aG9kU2lnbmF0dXJlLCBmaW5hbCBTdHJpbmcgbmV3TmFtZSkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KG5ldyBQZXJmb3JtQWN0aW9uKCkgeworICAgICAgQE92ZXJyaWRlCisgICAgICBwdWJsaWMgdm9pZCBwZXJmb3JtQWN0aW9uKFZpcnR1YWxGaWxlIHJvb3REaXIsIFZpcnR1YWxGaWxlIHJvb3RBZnRlcikgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIGZpbmFsIEphdmFQc2lGYWNhZGUgbWFuYWdlciA9IGdldEphdmFGYWNhZGUoKTsKKyAgICAgICAgZmluYWwgUHNpQ2xhc3MgYUNsYXNzID0gbWFuYWdlci5maW5kQ2xhc3MoY2xhc3NOYW1lLCBHbG9iYWxTZWFyY2hTY29wZS5tb2R1bGVTY29wZShteU1vZHVsZSkpOworICAgICAgICBhc3NlcnROb3ROdWxsKGFDbGFzcyk7CisgICAgICAgIGZpbmFsIFBzaU1ldGhvZCBtZXRob2RCeVNpZ25hdHVyZSA9IGFDbGFzcy5maW5kTWV0aG9kQnlTaWduYXR1cmUobWFuYWdlci5nZXRFbGVtZW50RmFjdG9yeSgpLmNyZWF0ZU1ldGhvZEZyb21UZXh0KAorICAgICAgICAgICAgICAgICAgbWV0aG9kU2lnbmF0dXJlICsgInt9IiwgbnVsbCksIGZhbHNlKTsKKyAgICAgICAgYXNzZXJ0Tm90TnVsbChtZXRob2RCeVNpZ25hdHVyZSk7CisgICAgICAgIGZpbmFsIFJlbmFtZVByb2Nlc3NvciByZW5hbWVQcm9jZXNzb3IgPSBuZXcgUmVuYW1lUHJvY2Vzc29yKG15UHJvamVjdCwgbWV0aG9kQnlTaWduYXR1cmUsIG5ld05hbWUsIGZhbHNlLCBmYWxzZSk7CisgICAgICAgIHJlbmFtZVByb2Nlc3Nvci5ydW4oKTsKKyAgICAgICAgRmlsZURvY3VtZW50TWFuYWdlci5nZXRJbnN0YW5jZSgpLnNhdmVBbGxEb2N1bWVudHMoKTsKKyAgICAgIH0KKyAgICB9KTsKKyAgfQorCit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovcmVmYWN0b3JpbmcvUmVwbGFjZUNvbnN0cnVjdG9yV2l0aEJ1aWxkZXJUZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovcmVmYWN0b3JpbmcvUmVwbGFjZUNvbnN0cnVjdG9yV2l0aEJ1aWxkZXJUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2QxODEzNQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9yZWZhY3RvcmluZy9SZXBsYWNlQ29uc3RydWN0b3JXaXRoQnVpbGRlclRlc3QuamF2YQpAQCAtMCwwICsxLDEyOSBAQAorLyoKKyAqIFVzZXI6IGFubmEKKyAqIERhdGU6IDA2LU1heS0yMDA4CisgKi8KK3BhY2thZ2UgY29tLmludGVsbGlqLnJlZmFjdG9yaW5nOworCitpbXBvcnQgY29tLmludGVsbGlqLkphdmFUZXN0VXRpbDsKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS5maWxlRWRpdG9yLkZpbGVEb2N1bWVudE1hbmFnZXI7CitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkudmZzLkxvY2FsRmlsZVN5c3RlbTsKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS52ZnMuVmlydHVhbEZpbGU7CitpbXBvcnQgY29tLmludGVsbGlqLnBzaS5Qc2lDbGFzczsKK2ltcG9ydCBjb20uaW50ZWxsaWoucHNpLlBzaU1ldGhvZDsKK2ltcG9ydCBjb20uaW50ZWxsaWoucHNpLnNlYXJjaC5HbG9iYWxTZWFyY2hTY29wZTsKK2ltcG9ydCBjb20uaW50ZWxsaWoucmVmYWN0b3JpbmcucmVwbGFjZUNvbnN0cnVjdG9yV2l0aEJ1aWxkZXIuUGFyYW1ldGVyRGF0YTsKK2ltcG9ydCBjb20uaW50ZWxsaWoucmVmYWN0b3JpbmcucmVwbGFjZUNvbnN0cnVjdG9yV2l0aEJ1aWxkZXIuUmVwbGFjZUNvbnN0cnVjdG9yV2l0aEJ1aWxkZXJQcm9jZXNzb3I7CitpbXBvcnQgY29tLmludGVsbGlqLnV0aWwuY29udGFpbmVycy5IYXNoTWFwOworCitpbXBvcnQgamF2YS51dGlsLkxpbmtlZEhhc2hNYXA7CitpbXBvcnQgamF2YS51dGlsLk1hcDsKKworcHVibGljIGNsYXNzIFJlcGxhY2VDb25zdHJ1Y3RvcldpdGhCdWlsZGVyVGVzdCBleHRlbmRzIE11bHRpRmlsZVRlc3RDYXNlIHsKKyAgQE92ZXJyaWRlCisgIHByb3RlY3RlZCBTdHJpbmcgZ2V0VGVzdERhdGFQYXRoKCkgeworICAgIHJldHVybiBKYXZhVGVzdFV0aWwuZ2V0SmF2YVRlc3REYXRhUGF0aCgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFZhcmFyZ3MoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QodHJ1ZSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0RXhpc3RpbmdFbXB0eUJ1aWxkZXIoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoZmFsc2UpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdE11bHRpcGxlUGFyYW1zKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KHRydWUpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEV4aXN0aW5nSGFsZkVtcHR5QnVpbGRlcigpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdChmYWxzZSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0RXhpc3RpbmdWb2lkU2V0dGVyc0J1aWxkZXIoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoZmFsc2UpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdENvbnN0cnVjdG9yQ2hhaW4oKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBmaW5hbCBIYXNoTWFwPFN0cmluZywgU3RyaW5nPiBkZWZhdWx0cyA9IG5ldyBIYXNoTWFwPFN0cmluZywgU3RyaW5nPigpOworICAgIGRlZmF1bHRzLnB1dCgiaSIsICIyIik7CisgICAgZG9UZXN0KHRydWUsIGRlZmF1bHRzKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RDb25zdHJ1Y3RvckNoYWluV2l0aG91dERlZmF1bHRzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZmluYWwgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4gZGVmYXVsdHMgPSBuZXcgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4oKTsKKyAgICBkZWZhdWx0cy5wdXQoImkiLCAiMiIpOworICAgIGRlZmF1bHRzLnB1dCgiaiIsIG51bGwpOworICAgIGRvVGVzdCh0cnVlLCBkZWZhdWx0cyk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0Q29uc3RydWN0b3JUcmVlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KHRydWUsIG51bGwsICJGb3VuZCBjb25zdHJ1Y3RvcnMgYXJlIG5vdCByZWR1Y2libGUgdG8gc2ltcGxlIGNoYWluIik7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0R2VuZXJpY3MoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QodHJ1ZSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0SW1wb3J0cygpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdCh0cnVlLCBudWxsLCBudWxsLCAiZm9vIik7CisgIH0KKworICBwcml2YXRlIHZvaWQgZG9UZXN0KGZpbmFsIGJvb2xlYW4gY3JlYXRlTmV3QnVpbGRlckNsYXNzKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoY3JlYXRlTmV3QnVpbGRlckNsYXNzLCBudWxsKTsKKyAgfQorCisgIHByaXZhdGUgdm9pZCBkb1Rlc3QoZmluYWwgYm9vbGVhbiBjcmVhdGVOZXdCdWlsZGVyQ2xhc3MsIGZpbmFsIE1hcDxTdHJpbmcsIFN0cmluZz4gZXhwZWN0ZWREZWZhdWx0cykgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KGNyZWF0ZU5ld0J1aWxkZXJDbGFzcywgZXhwZWN0ZWREZWZhdWx0cywgbnVsbCk7CisgIH0KKworICBwcml2YXRlIHZvaWQgZG9UZXN0KGZpbmFsIGJvb2xlYW4gY3JlYXRlTmV3QnVpbGRlckNsYXNzLCBmaW5hbCBNYXA8U3RyaW5nLCBTdHJpbmc+IGV4cGVjdGVkRGVmYXVsdHMsIGZpbmFsIFN0cmluZyBjb25mbGljdHMpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdChjcmVhdGVOZXdCdWlsZGVyQ2xhc3MsIGV4cGVjdGVkRGVmYXVsdHMsIGNvbmZsaWN0cywgIiIpOworICB9CisKKyAgcHJpdmF0ZSB2b2lkIGRvVGVzdChmaW5hbCBib29sZWFuIGNyZWF0ZU5ld0J1aWxkZXJDbGFzcywKKyAgICAgICAgICAgICAgICAgICAgICBmaW5hbCBNYXA8U3RyaW5nLCBTdHJpbmc+IGV4cGVjdGVkRGVmYXVsdHMsCisgICAgICAgICAgICAgICAgICAgICAgZmluYWwgU3RyaW5nIGNvbmZsaWN0cywKKyAgICAgICAgICAgICAgICAgICAgICBmaW5hbCBTdHJpbmcgcGFja2FnZU5hbWUpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdChuZXcgUGVyZm9ybUFjdGlvbigpIHsKKyAgICAgIEBPdmVycmlkZQorICAgICAgcHVibGljIHZvaWQgcGVyZm9ybUFjdGlvbihmaW5hbCBWaXJ0dWFsRmlsZSByb290RGlyLCBmaW5hbCBWaXJ0dWFsRmlsZSByb290QWZ0ZXIpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICBmaW5hbCBQc2lDbGFzcyBhQ2xhc3MgPSBteUphdmFGYWNhZGUuZmluZENsYXNzKCJUZXN0IiwgR2xvYmFsU2VhcmNoU2NvcGUucHJvamVjdFNjb3BlKGdldFByb2plY3QoKSkpOworICAgICAgICBhc3NlcnROb3ROdWxsKCJDbGFzcyBUZXN0IG5vdCBmb3VuZCIsIGFDbGFzcyk7CisKKyAgICAgICAgZmluYWwgTGlua2VkSGFzaE1hcDxTdHJpbmcsIFBhcmFtZXRlckRhdGE+IG1hcCA9IG5ldyBMaW5rZWRIYXNoTWFwPFN0cmluZywgUGFyYW1ldGVyRGF0YT4oKTsKKyAgICAgICAgZmluYWwgUHNpTWV0aG9kW10gY29uc3RydWN0b3JzID0gYUNsYXNzLmdldENvbnN0cnVjdG9ycygpOworICAgICAgICBmb3IgKFBzaU1ldGhvZCBjb25zdHJ1Y3RvciA6IGNvbnN0cnVjdG9ycykgeworICAgICAgICAgIFBhcmFtZXRlckRhdGEuY3JlYXRlRnJvbUNvbnN0cnVjdG9yKGNvbnN0cnVjdG9yLCBtYXApOworICAgICAgICB9CisgICAgICAgIGlmIChleHBlY3RlZERlZmF1bHRzICE9IG51bGwpIHsKKyAgICAgICAgICBmb3IgKE1hcC5FbnRyeTxTdHJpbmcsIFN0cmluZz4gZW50cnkgOiBleHBlY3RlZERlZmF1bHRzLmVudHJ5U2V0KCkpIHsKKyAgICAgICAgICAgIGZpbmFsIFBhcmFtZXRlckRhdGEgcGFyYW1ldGVyRGF0YSA9IG1hcC5nZXQoZW50cnkuZ2V0S2V5KCkpOworICAgICAgICAgICAgYXNzZXJ0Tm90TnVsbChwYXJhbWV0ZXJEYXRhKTsKKyAgICAgICAgICAgIGFzc2VydEVxdWFscyhlbnRyeS5nZXRWYWx1ZSgpLCBwYXJhbWV0ZXJEYXRhLmdldERlZmF1bHRWYWx1ZSgpKTsKKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICBuZXcgUmVwbGFjZUNvbnN0cnVjdG9yV2l0aEJ1aWxkZXJQcm9jZXNzb3IoZ2V0UHJvamVjdCgpLCBjb25zdHJ1Y3RvcnMsIG1hcCwgIkJ1aWxkZXIiLCBwYWNrYWdlTmFtZSwgbnVsbCwgY3JlYXRlTmV3QnVpbGRlckNsYXNzKS5ydW4oKTsKKyAgICAgICAgICBpZiAoY29uZmxpY3RzICE9IG51bGwpIHsKKyAgICAgICAgICAgIGZhaWwoIkNvbmZsaWN0cyB3ZXJlIG5vdCBkZXRlY3RlZDoiICsgY29uZmxpY3RzKTsKKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgY2F0Y2ggKEJhc2VSZWZhY3RvcmluZ1Byb2Nlc3Nvci5Db25mbGljdHNJblRlc3RzRXhjZXB0aW9uIGUpIHsKKworICAgICAgICAgIGlmIChjb25mbGljdHMgPT0gbnVsbCkgeworICAgICAgICAgICAgZmFpbCgiQ29uZmxpY3QgZGV0ZWN0ZWQ6IiArIGUuZ2V0TWVzc2FnZSgpKTsKKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgTG9jYWxGaWxlU3lzdGVtLmdldEluc3RhbmNlKCkucmVmcmVzaChmYWxzZSk7CisgICAgICAgIEZpbGVEb2N1bWVudE1hbmFnZXIuZ2V0SW5zdGFuY2UoKS5zYXZlQWxsRG9jdW1lbnRzKCk7CisgICAgICB9CisgICAgfSk7CisgIH0KKworCisgIEBPdmVycmlkZQorICBwcm90ZWN0ZWQgU3RyaW5nIGdldFRlc3RSb290KCkgeworICAgIHJldHVybiAiL3JlZmFjdG9yaW5nL3JlcGxhY2VDb25zdHJ1Y3RvcldpdGhCdWlsZGVyLyI7CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9yZWZhY3RvcmluZy9SZXBsYWNlQ29uc3RydWN0b3JXaXRoRmFjdG9yeVRlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9yZWZhY3RvcmluZy9SZXBsYWNlQ29uc3RydWN0b3JXaXRoRmFjdG9yeVRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNzYwNjI1Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL3JlZmFjdG9yaW5nL1JlcGxhY2VDb25zdHJ1Y3RvcldpdGhGYWN0b3J5VGVzdC5qYXZhCkBAIC0wLDAgKzEsODggQEAKK3BhY2thZ2UgY29tLmludGVsbGlqLnJlZmFjdG9yaW5nOworCitpbXBvcnQgY29tLmludGVsbGlqLkphdmFUZXN0VXRpbDsKK2ltcG9ydCBjb20uaW50ZWxsaWoucHNpLio7CitpbXBvcnQgY29tLmludGVsbGlqLnBzaS5zZWFyY2guR2xvYmFsU2VhcmNoU2NvcGU7CitpbXBvcnQgY29tLmludGVsbGlqLnJlZmFjdG9yaW5nLnJlcGxhY2VDb25zdHJ1Y3RvcldpdGhGYWN0b3J5LlJlcGxhY2VDb25zdHJ1Y3RvcldpdGhGYWN0b3J5UHJvY2Vzc29yOworaW1wb3J0IG9yZy5qZXRicmFpbnMuYW5ub3RhdGlvbnMuTm9uTmxzOworaW1wb3J0IG9yZy5qZXRicmFpbnMuYW5ub3RhdGlvbnMuTm90TnVsbDsKKworLyoqCisgKiBAYXV0aG9yIGRzbAorICovCitwdWJsaWMgY2xhc3MgUmVwbGFjZUNvbnN0cnVjdG9yV2l0aEZhY3RvcnlUZXN0IGV4dGVuZHMgTGlnaHRSZWZhY3RvcmluZ1Rlc3RDYXNlIHsKKyAgQE5vdE51bGwKKyAgQE92ZXJyaWRlCisgIHByb3RlY3RlZCBTdHJpbmcgZ2V0VGVzdERhdGFQYXRoKCkgeworICAgIHJldHVybiBKYXZhVGVzdFV0aWwuZ2V0SmF2YVRlc3REYXRhUGF0aCgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEVtcHR5Q29uc3RydWN0b3IoKSB0aHJvd3MgRXhjZXB0aW9uIHsgcnVuVGVzdCgiMDEiLCBudWxsKTsgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RTdWJjbGFzcygpIHRocm93cyBFeGNlcHRpb24geyBydW5UZXN0KCIwMiIsIG51bGwpOyB9CisKKyAgcHVibGljIHZvaWQgdGVzdERlZmF1bHRDb25zdHJ1Y3RvcigpIHRocm93cyBFeGNlcHRpb24geyBydW5UZXN0KCIwMyIsIG51bGwpOyB9CisKKyAgcHVibGljIHZvaWQgdGVzdElubmVyQ2xhc3MoKSB0aHJvd3MgRXhjZXB0aW9uIHsgcnVuVGVzdCgiMDQiLCAiT3V0ZXJDbGFzcyIpOyB9CisKKyAgcHVibGljIHZvaWQgdGVzdFN1YmNsYXNzVmlzaWJpbGl0eSgpIHRocm93cyBFeGNlcHRpb24geyBydW5UZXN0KCIwNSIsIG51bGwpOyB9CisKKyAgcHVibGljIHZvaWQgdGVzdEltcGxpY2l0Q29uc3RydWN0b3JVc2FnZXMoKSB0aHJvd3MgRXhjZXB0aW9uIHsgcnVuVGVzdCgiMDYiLCBudWxsKTsgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RJbXBsaWNpdENvbnN0cnVjdG9yQ3JlYXRpb24oKSB0aHJvd3MgRXhjZXB0aW9uIHsgcnVuVGVzdCgiMDciLCBudWxsKTsgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RDb25zdHJ1Y3RvclR5cGVQYXJhbWV0ZXJzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7IHJ1blRlc3QoIjA4IiwgbnVsbCk7IH0KKworICBwcml2YXRlIHZvaWQgcnVuVGVzdChmaW5hbCBTdHJpbmcgdGVzdEluZGV4LCBATm9uTmxzIFN0cmluZyB0YXJnZXRDbGFzc05hbWUpIHRocm93cyBFeGNlcHRpb24geworICAgIGNvbmZpZ3VyZUJ5RmlsZSgiL3JlZmFjdG9yaW5nL3JlcGxhY2VDb25zdHJ1Y3RvcldpdGhGYWN0b3J5L2JlZm9yZSIgKyB0ZXN0SW5kZXggKyAiLmphdmEiKTsKKyAgICBwZXJmb3JtKHRhcmdldENsYXNzTmFtZSk7CisgICAgY2hlY2tSZXN1bHRCeUZpbGUoIi9yZWZhY3RvcmluZy9yZXBsYWNlQ29uc3RydWN0b3JXaXRoRmFjdG9yeS9hZnRlciIgKyB0ZXN0SW5kZXggKyAiLmphdmEiKTsKKyAgfQorCisKKyAgcHJpdmF0ZSB2b2lkIHBlcmZvcm0oU3RyaW5nIHRhcmdldENsYXNzTmFtZSkgeworICAgIGludCBvZmZzZXQgPSBteUVkaXRvci5nZXRDYXJldE1vZGVsKCkuZ2V0T2Zmc2V0KCk7CisgICAgUHNpRWxlbWVudCBlbGVtZW50ID0gbXlGaWxlLmZpbmRFbGVtZW50QXQob2Zmc2V0KTsKKyAgICBQc2lNZXRob2QgY29uc3RydWN0b3IgPSBudWxsOworICAgIFBzaUNsYXNzIGFDbGFzcyA9IG51bGw7CisgICAgd2hpbGUgKHRydWUpIHsKKyAgICAgIGlmIChlbGVtZW50ID09IG51bGwgfHwgZWxlbWVudCBpbnN0YW5jZW9mIFBzaUZpbGUpIHsKKyAgICAgICAgYXNzZXJ0VHJ1ZShmYWxzZSk7CisgICAgICAgIHJldHVybjsKKyAgICAgIH0KKworICAgICAgaWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBQc2lNZXRob2QgJiYgKChQc2lNZXRob2QpZWxlbWVudCkuaXNDb25zdHJ1Y3RvcigpKSB7CisgICAgICAgIGNvbnN0cnVjdG9yID0gKFBzaU1ldGhvZCllbGVtZW50OworICAgICAgICBicmVhazsKKyAgICAgIH0KKworICAgICAgaWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBQc2lDbGFzcyAmJiAoKFBzaUNsYXNzKWVsZW1lbnQpLmdldENvbnN0cnVjdG9ycygpLmxlbmd0aCA9PSAwKSB7CisgICAgICAgIGFDbGFzcyA9IChQc2lDbGFzcyllbGVtZW50OworICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICAgIGVsZW1lbnQgPSBlbGVtZW50LmdldFBhcmVudCgpOworICAgIH0KKyAgICBQc2lDbGFzcyB0YXJnZXRDbGFzcyA9IG51bGw7CisgICAgaWYgKHRhcmdldENsYXNzTmFtZSAhPSBudWxsKSB7CisgICAgICB0YXJnZXRDbGFzcyA9IEphdmFQc2lGYWNhZGUuZ2V0SW5zdGFuY2UoZ2V0UHJvamVjdCgpKS5maW5kQ2xhc3ModGFyZ2V0Q2xhc3NOYW1lLCBHbG9iYWxTZWFyY2hTY29wZS5hbGxTY29wZShnZXRQcm9qZWN0KCkpKTsKKyAgICAgIGFzc2VydFRydWUodGFyZ2V0Q2xhc3MgIT0gbnVsbCk7CisgICAgfQorCisgICAgZmluYWwgUmVwbGFjZUNvbnN0cnVjdG9yV2l0aEZhY3RvcnlQcm9jZXNzb3IgcmVwbGFjZUNvbnN0cnVjdG9yV2l0aEZhY3RvcnlQcm9jZXNzb3I7CisgICAgaWYgKGNvbnN0cnVjdG9yICE9IG51bGwpIHsKKyAgICAgIGlmICh0YXJnZXRDbGFzcyA9PSBudWxsKSB7CisgICAgICAgIHRhcmdldENsYXNzID0gY29uc3RydWN0b3IuZ2V0Q29udGFpbmluZ0NsYXNzKCk7CisgICAgICB9CisgICAgICByZXBsYWNlQ29uc3RydWN0b3JXaXRoRmFjdG9yeVByb2Nlc3NvciA9IG5ldyBSZXBsYWNlQ29uc3RydWN0b3JXaXRoRmFjdG9yeVByb2Nlc3NvcigKKyAgICAgICAgZ2V0UHJvamVjdCgpLCBjb25zdHJ1Y3RvciwgY29uc3RydWN0b3IuZ2V0Q29udGFpbmluZ0NsYXNzKCksIHRhcmdldENsYXNzLCAibmV3IiArIGNvbnN0cnVjdG9yLmdldE5hbWUoKSk7CisgICAgfQorICAgIGVsc2UgeworICAgICAgaWYgKHRhcmdldENsYXNzID09IG51bGwpIHsKKyAgICAgICAgdGFyZ2V0Q2xhc3MgPSBhQ2xhc3M7CisgICAgICB9CisgICAgICByZXBsYWNlQ29uc3RydWN0b3JXaXRoRmFjdG9yeVByb2Nlc3NvciA9IG5ldyBSZXBsYWNlQ29uc3RydWN0b3JXaXRoRmFjdG9yeVByb2Nlc3NvcigKKyAgICAgICAgZ2V0UHJvamVjdCgpLCBudWxsLCBhQ2xhc3MsIHRhcmdldENsYXNzLCAibmV3IiArIGFDbGFzcy5nZXROYW1lKCkpOworICAgIH0KKyAgICByZXBsYWNlQ29uc3RydWN0b3JXaXRoRmFjdG9yeVByb2Nlc3Nvci5ydW4oKTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL3JlZmFjdG9yaW5nL1JlcGxhY2VNZXRob2REdXBsaWNhdGVzVGVzdFN1aXRlLmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovcmVmYWN0b3JpbmcvUmVwbGFjZU1ldGhvZER1cGxpY2F0ZXNUZXN0U3VpdGUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ODcxODRkCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL3JlZmFjdG9yaW5nL1JlcGxhY2VNZXRob2REdXBsaWNhdGVzVGVzdFN1aXRlLmphdmEKQEAgLTAsMCArMSwyNSBAQAorLyoKKyAqIFVzZXI6IGFubmEKKyAqIERhdGU6IDExLUp1bi0yMDA5CisgKi8KK3BhY2thZ2UgY29tLmludGVsbGlqLnJlZmFjdG9yaW5nOworCitpbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7CitpbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RTdWl0ZTsKKworcHVibGljIGNsYXNzIFJlcGxhY2VNZXRob2REdXBsaWNhdGVzVGVzdFN1aXRlIHsKKyAgcHJpdmF0ZSBSZXBsYWNlTWV0aG9kRHVwbGljYXRlc1Rlc3RTdWl0ZSgpIHsKKyAgfQorCisgIHB1YmxpYyBzdGF0aWMgVGVzdCBzdWl0ZSgpIHsKKyAgICBmaW5hbCBUZXN0U3VpdGUgdGVzdFN1aXRlID0gbmV3IFRlc3RTdWl0ZSgiUmVwbGFjZSBEdXBsaWNhdGVzIFN1aXRlIik7CisgICAgdGVzdFN1aXRlLmFkZFRlc3RTdWl0ZShFeHRyYWN0TWV0aG9kMTVUZXN0LmNsYXNzKTsKKyAgICB0ZXN0U3VpdGUuYWRkVGVzdFN1aXRlKEV4dHJhY3RNZXRob2RUZXN0LmNsYXNzKTsKKyAgICB0ZXN0U3VpdGUuYWRkVGVzdFN1aXRlKEV4dHJhY3RNZXRob2RPYmplY3RXaXRoTXVsdGlwbGVFeGl0UG9pbnRzVGVzdC5jbGFzcyk7CisgICAgdGVzdFN1aXRlLmFkZFRlc3RTdWl0ZShFeHRyYWN0TWV0aG9kT2JqZWN0VGVzdC5jbGFzcyk7CisgICAgdGVzdFN1aXRlLmFkZFRlc3RTdWl0ZShGaW5kTWV0aG9kRHVwbGljYXRlc01pc2NUZXN0LmNsYXNzKTsKKyAgICB0ZXN0U3VpdGUuYWRkVGVzdFN1aXRlKEZpbmRNZXRob2REdXBsaWNhdGVzVGVzdC5jbGFzcyk7CisgICAgdGVzdFN1aXRlLmFkZFRlc3RTdWl0ZShTdWdnZXN0ZWRQYXJhbVR5cGVzVGVzdC5jbGFzcyk7CisgICAgcmV0dXJuIHRlc3RTdWl0ZTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9yZWZhY3RvcmluZy9SdW4uamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9yZWZhY3RvcmluZy9SdW4uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MjQ3MmI1Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL3JlZmFjdG9yaW5nL1J1bi5qYXZhCkBAIC0wLDAgKzEsMTMgQEAKK3BhY2thZ2UgY29tLmludGVsbGlqLnJlZmFjdG9yaW5nOworCitpbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RTdWl0ZTsKK2ltcG9ydCBqdW5pdC50ZXh0dWkuVGVzdFJ1bm5lcjsKKworLyoqCisgKiAgQGF1dGhvciBkc2wKKyAqLworcHVibGljIGNsYXNzIFJ1biB7CisgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHRocm93cyBFeGNlcHRpb24geworICAgIG5ldyBUZXN0UnVubmVyKCkuZG9SdW4obmV3IFRlc3RTdWl0ZShJbnRyb2R1Y2VWYXJpYWJsZVRlc3QuY2xhc3MpKTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL3JlZmFjdG9yaW5nL1NhZmVEZWxldGVUZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovcmVmYWN0b3JpbmcvU2FmZURlbGV0ZVRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZjI5MDUzCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL3JlZmFjdG9yaW5nL1NhZmVEZWxldGVUZXN0LmphdmEKQEAgLTAsMCArMSwxODMgQEAKK3BhY2thZ2UgY29tLmludGVsbGlqLnJlZmFjdG9yaW5nOworCitpbXBvcnQgY29tLmludGVsbGlqLkphdmFUZXN0VXRpbDsKK2ltcG9ydCBjb20uaW50ZWxsaWouY29kZUluc2lnaHQuVGFyZ2V0RWxlbWVudFV0aWxCYXNlOworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLnJvb3RzLkxhbmd1YWdlTGV2ZWxQcm9qZWN0RXh0ZW5zaW9uOworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLnJvb3RzLlByb2plY3RSb290TWFuYWdlcjsKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS52ZnMuVmlydHVhbEZpbGU7CitpbXBvcnQgY29tLmludGVsbGlqLnBvbS5qYXZhLkxhbmd1YWdlTGV2ZWw7CitpbXBvcnQgY29tLmludGVsbGlqLnBzaS5Qc2lDbGFzczsKK2ltcG9ydCBjb20uaW50ZWxsaWoucHNpLlBzaUVsZW1lbnQ7CitpbXBvcnQgY29tLmludGVsbGlqLnBzaS5zZWFyY2guR2xvYmFsU2VhcmNoU2NvcGU7CitpbXBvcnQgY29tLmludGVsbGlqLnJlZmFjdG9yaW5nLnNhZmVEZWxldGUuU2FmZURlbGV0ZUhhbmRsZXI7CitpbXBvcnQgY29tLmludGVsbGlqLnRlc3RGcmFtZXdvcmsuSWRlYVRlc3RVdGlsOworaW1wb3J0IG9yZy5qZXRicmFpbnMuYW5ub3RhdGlvbnMuTm9uTmxzOworCitpbXBvcnQgamF2YS5pby5GaWxlOworCitwdWJsaWMgY2xhc3MgU2FmZURlbGV0ZVRlc3QgZXh0ZW5kcyBNdWx0aUZpbGVUZXN0Q2FzZSB7CisgIHByaXZhdGUgVmlydHVhbEZpbGUgbXlSb290QmVmb3JlOworCisgIEBPdmVycmlkZQorICBwcm90ZWN0ZWQgU3RyaW5nIGdldFRlc3REYXRhUGF0aCgpIHsKKyAgICByZXR1cm4gSmF2YVRlc3RVdGlsLmdldEphdmFUZXN0RGF0YVBhdGgoKTsKKyAgfQorCisgIEBPdmVycmlkZQorICBwcm90ZWN0ZWQgU3RyaW5nIGdldFRlc3RSb290KCkgeworICAgIHJldHVybiAiL3JlZmFjdG9yaW5nL3NhZmVEZWxldGUvIjsKKyAgfQorCisgIEBPdmVycmlkZQorICBwcm90ZWN0ZWQgYm9vbGVhbiBjbGVhck1vZGVsQmVmb3JlQ29uZmlndXJpbmcoKSB7CisgICAgcmV0dXJuIHRydWU7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0SW1wbGljaXRDdHJDYWxsKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgdHJ5IHsKKyAgICAgIGRvVGVzdCgiU3VwZXIiKTsKKyAgICAgIGZhaWwoKTsKKyAgICB9CisgICAgY2F0Y2ggKEJhc2VSZWZhY3RvcmluZ1Byb2Nlc3Nvci5Db25mbGljdHNJblRlc3RzRXhjZXB0aW9uIGUpIHsKKyAgICAgIFN0cmluZyBtZXNzYWdlID0gZS5nZXRNZXNzYWdlKCk7CisgICAgICBhc3NlcnRUcnVlKG1lc3NhZ2UsIG1lc3NhZ2Uuc3RhcnRzV2l0aCgiY29uc3RydWN0b3IgPGI+PGNvZGU+U3VwZXIuU3VwZXIoKTwvY29kZT48L2I+IGhhcyAxIHVzYWdlIHRoYXQgaXMgbm90IHNhZmUgdG8gZGVsZXRlIikpOworICAgIH0KKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RJbXBsaWNpdEN0ckNhbGwyKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgdHJ5IHsKKyAgICAgIGRvVGVzdCgiU3VwZXIiKTsKKyAgICAgIGZhaWwoKTsKKyAgICB9CisgICAgY2F0Y2ggKEJhc2VSZWZhY3RvcmluZ1Byb2Nlc3Nvci5Db25mbGljdHNJblRlc3RzRXhjZXB0aW9uIGUpIHsKKyAgICAgIFN0cmluZyBtZXNzYWdlID0gZS5nZXRNZXNzYWdlKCk7CisgICAgICBhc3NlcnRUcnVlKG1lc3NhZ2UsIG1lc3NhZ2Uuc3RhcnRzV2l0aCgiY29uc3RydWN0b3IgPGI+PGNvZGU+U3VwZXIuU3VwZXIoKTwvY29kZT48L2I+IGhhcyAxIHVzYWdlIHRoYXQgaXMgbm90IHNhZmUgdG8gZGVsZXRlIikpOworICAgIH0KKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RNdWx0aXBsZUludGVyZmFjZXNJbXBsZW1lbnRhdGlvbigpIHRocm93cyBFeGNlcHRpb24geworICAgIG15RG9Db21wYXJlID0gZmFsc2U7CisgICAgZG9UZXN0KCJJRm9vIik7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0TXVsdGlwbGVJbnRlcmZhY2VzSW1wbGVtZW50YXRpb25UaHJvdWdoQ29tbW9uSW50ZXJmYWNlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgbXlEb0NvbXBhcmUgPSBmYWxzZTsKKyAgICBkb1Rlc3QoIklGb28iKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RQYXJhbWV0ZXJJbkhpZXJhcmNoeSgpIHRocm93cyBFeGNlcHRpb24geworICAgIG15RG9Db21wYXJlID0gZmFsc2U7CisgICAgZG9UZXN0KCJDMiIpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFRvcFBhcmFtZXRlckluSGllcmFyY2h5KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgbXlEb0NvbXBhcmUgPSBmYWxzZTsKKyAgICBkb1Rlc3QoIkkiKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RFeHRlbmRzTGlzdCgpIHRocm93cyBFeGNlcHRpb24geworICAgIG15RG9Db21wYXJlID0gZmFsc2U7CisgICAgZG9UZXN0KCJCIik7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0SmF2YWRvY1BhcmFtUmVmKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgbXlEb0NvbXBhcmUgPSBmYWxzZTsKKyAgICBkb1Rlc3QoIlN1cGVyIik7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0RW51bUNvbnN0cnVjdG9yUGFyYW1ldGVyKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgbXlEb0NvbXBhcmUgPSBmYWxzZTsKKyAgICBkb1Rlc3QoIlVzZXJGbGFncyIpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFNhZmVEZWxldGVTdGF0aWNJbXBvcnRzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgbXlEb0NvbXBhcmUgPSBmYWxzZTsKKyAgICBkb1Rlc3QoIkEiKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RSZW1vdmVPdmVycmlkZXJzSW5zcGl0ZU9mVW5zYWZlVXNhZ2VzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgbXlEb0NvbXBhcmUgPSBmYWxzZTsKKyAgICB0cnkgeworICAgICAgQmFzZVJlZmFjdG9yaW5nUHJvY2Vzc29yLkNvbmZsaWN0c0luVGVzdHNFeGNlcHRpb24uc2V0VGVzdElnbm9yZSh0cnVlKTsKKyAgICAgIGRvVGVzdCgiQSIpOworICAgIH0KKyAgICBmaW5hbGx5IHsKKyAgICAgIEJhc2VSZWZhY3RvcmluZ1Byb2Nlc3Nvci5Db25mbGljdHNJblRlc3RzRXhjZXB0aW9uLnNldFRlc3RJZ25vcmUoZmFsc2UpOworICAgIH0KKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RMb2NhbFZhcmlhYmxlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgbXlEb0NvbXBhcmUgPSBmYWxzZTsKKyAgICBkb1Rlc3QoIlN1cGVyIik7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0TWV0aG9kRGVlcEhpZXJhcmNoeSgpIHRocm93cyBFeGNlcHRpb24geworICAgIG15RG9Db21wYXJlID0gZmFsc2U7CisgICAgZG9UZXN0KCJTdXBlciIpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdExvY2FsVmFyaWFibGVTaWRlRWZmZWN0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgbXlEb0NvbXBhcmUgPSBmYWxzZTsKKyAgICB0cnkgeworICAgICAgZG9UZXN0KCJTdXBlciIpOworICAgICAgZmFpbCgiU2lkZSBlZmZlY3Qgd2FzIGlnbm9yZWQiKTsKKyAgICB9CisgICAgY2F0Y2ggKEJhc2VSZWZhY3RvcmluZ1Byb2Nlc3Nvci5Db25mbGljdHNJblRlc3RzRXhjZXB0aW9uIGUpIHsKKyAgICAgIFN0cmluZyBtZXNzYWdlID0gZS5nZXRNZXNzYWdlKCk7CisgICAgICBhc3NlcnRUcnVlKG1lc3NhZ2UsIG1lc3NhZ2Uuc3RhcnRzV2l0aCgibG9jYWwgdmFyaWFibGUgPGI+PGNvZGU+dmFyTmFtZTwvY29kZT48L2I+IGhhcyAxIHVzYWdlIHRoYXQgaXMgbm90IHNhZmUgdG8gZGVsZXRlLlxuIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiT2YgdGhvc2UgMCB1c2FnZXMgYXJlIGluIHN0cmluZ3MsIGNvbW1lbnRzLCBvciBub24tY29kZSBmaWxlcy4iKSk7CisgICAgfQorICB9CisKKyAgcHVibGljIHZvaWQgdGVzdExhc3RSZXNvdXJjZVZhcmlhYmxlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgTGFuZ3VhZ2VMZXZlbFByb2plY3RFeHRlbnNpb24uZ2V0SW5zdGFuY2UoZ2V0UHJvamVjdCgpKS5zZXRMYW5ndWFnZUxldmVsKExhbmd1YWdlTGV2ZWwuSkRLXzFfNyk7CisgICAgZG9TaW5nbGVGaWxlVGVzdCgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdExhc3RUeXBlUGFyYW0oKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBMYW5ndWFnZUxldmVsUHJvamVjdEV4dGVuc2lvbi5nZXRJbnN0YW5jZShnZXRQcm9qZWN0KCkpLnNldExhbmd1YWdlTGV2ZWwoTGFuZ3VhZ2VMZXZlbC5KREtfMV83KTsKKyAgICBkb1NpbmdsZUZpbGVUZXN0KCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0VHlwZVBhcmFtRnJvbURpYW1vbmQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBMYW5ndWFnZUxldmVsUHJvamVjdEV4dGVuc2lvbi5nZXRJbnN0YW5jZShnZXRQcm9qZWN0KCkpLnNldExhbmd1YWdlTGV2ZWwoTGFuZ3VhZ2VMZXZlbC5KREtfMV83KTsKKyAgICBkb1NpbmdsZUZpbGVUZXN0KCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0U3RyaXBPdmVycmlkZSgpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvU2luZ2xlRmlsZVRlc3QoKTsKKyAgfQorICAKKyAgcHJpdmF0ZSB2b2lkIGRvVGVzdChATm9uTmxzIGZpbmFsIFN0cmluZyBxQ2xhc3NOYW1lKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QobmV3IFBlcmZvcm1BY3Rpb24oKSB7CisgICAgICBAT3ZlcnJpZGUKKyAgICAgIHB1YmxpYyB2b2lkIHBlcmZvcm1BY3Rpb24oVmlydHVhbEZpbGUgcm9vdERpciwgVmlydHVhbEZpbGUgcm9vdEFmdGVyKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgU2FmZURlbGV0ZVRlc3QudGhpcy5wZXJmb3JtQWN0aW9uKHFDbGFzc05hbWUpOworICAgICAgICBJZGVhVGVzdFV0aWwuYXNzZXJ0RGlyZWN0b3JpZXNFcXVhbChyb290QWZ0ZXIsIG15Um9vdEJlZm9yZSwgSWRlYVRlc3RVdGlsLkNWU19GSUxFX0ZJTFRFUik7CisgICAgICB9CisgICAgfSk7CisgIH0KKworICBwcml2YXRlIHZvaWQgZG9TaW5nbGVGaWxlVGVzdCgpIHRocm93cyBFeGNlcHRpb24geworICAgIGNvbmZpZ3VyZUJ5RmlsZShnZXRUZXN0Um9vdCgpICsgZ2V0VGVzdE5hbWUoZmFsc2UpICsgIi5qYXZhIik7CisgICAgcGVyZm9ybUFjdGlvbigpOworICAgIGNoZWNrUmVzdWx0QnlGaWxlKGdldFRlc3RSb290KCkgKyBnZXRUZXN0TmFtZShmYWxzZSkgKyAiX2FmdGVyLmphdmEiKTsKKyAgfQorCisgIHByaXZhdGUgdm9pZCBwZXJmb3JtQWN0aW9uKGZpbmFsIFN0cmluZyBxQ2xhc3NOYW1lKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBmaW5hbCBQc2lDbGFzcyBhQ2xhc3MgPSBteUphdmFGYWNhZGUuZmluZENsYXNzKHFDbGFzc05hbWUsIEdsb2JhbFNlYXJjaFNjb3BlLmFsbFNjb3BlKGdldFByb2plY3QoKSkpOworICAgIGFzc2VydE5vdE51bGwoIkNsYXNzICIgKyBxQ2xhc3NOYW1lICsgIiBub3QgZm91bmQiLCBhQ2xhc3MpOworCisgICAgZmluYWwgU3RyaW5nIHJvb3QgPSBQcm9qZWN0Um9vdE1hbmFnZXIuZ2V0SW5zdGFuY2UoZ2V0UHJvamVjdCgpKS5nZXRDb250ZW50Um9vdHMoKVswXS5nZXRQYXRoKCk7CisgICAgbXlSb290QmVmb3JlID0gY29uZmlndXJlQnlGaWxlcyhuZXcgRmlsZShyb290KSwgYUNsYXNzLmdldENvbnRhaW5pbmdGaWxlKCkuZ2V0VmlydHVhbEZpbGUoKSk7CisKKyAgICBwZXJmb3JtQWN0aW9uKCk7CisgIH0KKworICBwcml2YXRlIHZvaWQgcGVyZm9ybUFjdGlvbigpIHsKKyAgICBmaW5hbCBQc2lFbGVtZW50IHBzaUVsZW1lbnQgPSBUYXJnZXRFbGVtZW50VXRpbEJhc2UKKyAgICAgIC5maW5kVGFyZ2V0RWxlbWVudChteUVkaXRvciwgVGFyZ2V0RWxlbWVudFV0aWxCYXNlLkVMRU1FTlRfTkFNRV9BQ0NFUFRFRCB8IFRhcmdldEVsZW1lbnRVdGlsQmFzZS5SRUZFUkVOQ0VEX0VMRU1FTlRfQUNDRVBURUQpOworICAgIGFzc2VydE5vdE51bGwoIk5vIGVsZW1lbnQgZm91bmQgaW4gdGV4dDpcbiIgKyBnZXRGaWxlKCkuZ2V0VGV4dCgpLCBwc2lFbGVtZW50KTsKKyAgICBTYWZlRGVsZXRlSGFuZGxlci5pbnZva2UoZ2V0UHJvamVjdCgpLCBuZXcgUHNpRWxlbWVudFtde3BzaUVsZW1lbnR9LCB0cnVlKTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9yZWZhY3RvcmluZy9TZXF1ZW50aWFsUmVmYWN0b3JpbmdUZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovcmVmYWN0b3JpbmcvU2VxdWVudGlhbFJlZmFjdG9yaW5nVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIzZDJhZDEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovcmVmYWN0b3JpbmcvU2VxdWVudGlhbFJlZmFjdG9yaW5nVGVzdC5qYXZhCkBAIC0wLDAgKzEsODEgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwMC0yMDEyIEpldEJyYWlucyBzLnIuby4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCitwYWNrYWdlIGNvbS5pbnRlbGxpai5yZWZhY3RvcmluZzsKKworaW1wb3J0IGNvbS5pbnRlbGxpai5wc2kuKjsKK2ltcG9ydCBjb20uaW50ZWxsaWoucmVmYWN0b3JpbmcuZXh0cmFjdE1ldGhvZC5QcmVwYXJlRmFpbGVkRXhjZXB0aW9uOworaW1wb3J0IGNvbS5pbnRlbGxpai5yZWZhY3RvcmluZy5pbmxpbmUuSW5saW5lTWV0aG9kUHJvY2Vzc29yOworaW1wb3J0IGNvbS5pbnRlbGxpai50ZXN0RnJhbWV3b3JrLkxpZ2h0Q29kZUluc2lnaHRUZXN0Q2FzZTsKKworaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CisKKy8qKgorICogSXMgYXNzdW1lZCB0byBjb250YWluIHRlc3RzIHRoYXQgaW5jbHVkZSBtb3JlIHRoYW4gb25lIHJlZmFjdG9yaW5nIGludG8gdGhlIHByb2Nlc3NpbmcuCisgKiAKKyAqIEBhdXRob3IgRGVuaXMgWmhkYW5vdgorICogQHNpbmNlIDEvMTIvMTIgMjozNSBQTQorICovCitwdWJsaWMgY2xhc3MgU2VxdWVudGlhbFJlZmFjdG9yaW5nVGVzdCBleHRlbmRzIExpZ2h0Q29kZUluc2lnaHRUZXN0Q2FzZSB7CisKKyAgcHVibGljIHZvaWQgdGVzdEZvcm1hdHRpbmdBZnRlcklubGluZUV4dHJhY3RNZXRob2QoKSB0aHJvd3MgSU9FeGNlcHRpb24sIFByZXBhcmVGYWlsZWRFeGNlcHRpb24geworICAgIFN0cmluZyB0ZXh0ID0KKyAgICAgICJwdWJsaWMgY2xhc3MgQnJva2VuQWxpZ25tZW50IHtcbiIgKworICAgICAgIlxuIiArCisgICAgICAiICAgIHB1YmxpYyBPYmplY3QgdGVzdCgpIHtcbiIgKworICAgICAgIiAgICAgICAgaWYgKFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpID4gMSkge1xuIiArCisgICAgICAiICAgICAgICAgICAgaWYgKFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpID4gMikge1xuIiArCisgICAgICAiICAgICAgICAgICAgICAgIGdldERhdGEoKTtcbiIgKworICAgICAgIiAgICAgICAgICAgIH1cbiIgKworICAgICAgIiAgICAgICAgfVxuIiArCisgICAgICAiICAgICAgICByZXR1cm4gXCJoZXlcIjtcbiIgKworICAgICAgIiAgICB9XG4iICsKKyAgICAgICJcbiIgKworICAgICAgIiAgICBwcml2YXRlIHZvaWQgZ2V0RGF0YSgpIHtcbiIgKworICAgICAgIiAgICAgICAgU3RyaW5nW10gYXJncyA9IG5ldyBTdHJpbmdbXXt9O1xuIiArCisgICAgICAiICAgICAgICBTdHJpbmcgcmVzdWx0ID0gXCJkYXRhOiBcIjtcbiIgKworICAgICAgIiAgICAgICAgaW50IGkgPSAwO1xuIiArCisgICAgICAiICAgICAgICB3aGlsZSAoaSA8IGFyZ3MubGVuZ3RoKSB7XG4iICsKKyAgICAgICIgICAgICAgICAgICByZXN1bHQgKz0gYXJnc1tpXTtcbiIgKworICAgICAgIiAgICAgICAgICAgIGlmIChpICUgMiA9PSAwKSB7XG4iICsKKyAgICAgICIgICAgICAgICAgICAgICAgcmVzdWx0ICs9IFwiLCBpdCdzIGV2ZW4hXCI7XG4iICsKKyAgICAgICIgICAgICAgICAgICB9IGVsc2Uge1xuIiArCisgICAgICAiICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihcIkl0J3Mgb2RkIDooXCIpO1xuIiArCisgICAgICAiICAgICAgICAgICAgICAgIGJyZWFrO1xuIiArCisgICAgICAiICAgICAgICAgICAgfVxuIiArCisgICAgICAiICAgICAgICB9XG4iICsKKyAgICAgICIgICAgICAgIGludCBrID0gMTtcbiIgKworICAgICAgIiAgICB9XG4iICsKKyAgICAgICJcbiIgKworICAgICAgIn0iOworICAgIGNvbmZpZ3VyZUZyb21GaWxlVGV4dCgidGVzdC5qYXZhIiwgdGV4dCk7CisgICAgCisgICAgLy8gUGVyZm9ybSBpbmxpbmUuCisgICAgZmluYWwgUHNpQ2xhc3MgY2xhenogPSAoKFBzaUNsYXNzT3duZXIpbXlGaWxlKS5nZXRDbGFzc2VzKClbMF07CisgICAgZmluYWwgUHNpTWV0aG9kW10gbWV0aG9kcyA9IGNsYXp6LmZpbmRNZXRob2RzQnlOYW1lKCJnZXREYXRhIiwgZmFsc2UpOworICAgIGZpbmFsIFBzaVJlZmVyZW5jZUV4cHJlc3Npb24gcmVmID0gKFBzaVJlZmVyZW5jZUV4cHJlc3Npb24pbXlGaWxlLmZpbmRSZWZlcmVuY2VBdCh0ZXh0LmluZGV4T2YoImdldERhdGEiKSArIDEpOworICAgIGZpbmFsIElubGluZU1ldGhvZFByb2Nlc3NvciBwcm9jZXNzb3IgPSBuZXcgSW5saW5lTWV0aG9kUHJvY2Vzc29yKGdldFByb2plY3QoKSwgbWV0aG9kc1swXSwgcmVmLCBteUVkaXRvciwgZmFsc2UpOworICAgIHByb2Nlc3Nvci5ydW4oKTsKKyAgICAKKyAgICAvLyBQZXJmb3JtIGV4dHJhY3QuCisgICAgZmluYWwgU3RyaW5nIGN1cnJlbnRUZXh0ID0gbXlFZGl0b3IuZ2V0RG9jdW1lbnQoKS5nZXRUZXh0KCk7CisgICAgaW50IHN0YXJ0ID0gY3VycmVudFRleHQuaW5kZXhPZigiU3RyaW5nW10gYXJncyIpOworICAgIGludCBlbmQgPSBjdXJyZW50VGV4dC5pbmRleE9mKCJcbiIsIGN1cnJlbnRUZXh0LmluZGV4T2YoImludCBrIikpOworICAgIG15RWRpdG9yLmdldFNlbGVjdGlvbk1vZGVsKCkuc2V0U2VsZWN0aW9uKHN0YXJ0LCBlbmQpOworICAgIEV4dHJhY3RNZXRob2RUZXN0LnBlcmZvcm1FeHRyYWN0TWV0aG9kKHRydWUsIHRydWUsIG15RWRpdG9yLCBteUZpbGUsIGdldFByb2plY3QoKSk7CisgICAgCisgICAgY2hlY2tSZXN1bHRCeVRleHQodGV4dC5yZXBsYWNlKCJnZXREYXRhIiwgIm5ld01ldGhvZCIpKTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL3JlZmFjdG9yaW5nL1N1Z2dlc3RlZFBhcmFtVHlwZXNUZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovcmVmYWN0b3JpbmcvU3VnZ2VzdGVkUGFyYW1UeXBlc1Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOGYwOTM1Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL3JlZmFjdG9yaW5nL1N1Z2dlc3RlZFBhcmFtVHlwZXNUZXN0LmphdmEKQEAgLTAsMCArMSwxMzkgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwMC0yMDEyIEpldEJyYWlucyBzLnIuby4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKy8qCisgKiBVc2VyOiBhbm5hCisgKiBEYXRlOiAyNS1NYXktMjAxMAorICovCitwYWNrYWdlIGNvbS5pbnRlbGxpai5yZWZhY3RvcmluZzsKKworaW1wb3J0IGNvbS5pbnRlbGxpai5KYXZhVGVzdFV0aWw7CitpbXBvcnQgY29tLmludGVsbGlqLmNvZGVJbnNpZ2h0LkNvZGVJbnNpZ2h0VXRpbDsKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS5lZGl0b3IuRWRpdG9yOworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLnByb2plY3QuUHJvamVjdDsKK2ltcG9ydCBjb20uaW50ZWxsaWoucHNpLlBzaUVsZW1lbnQ7CitpbXBvcnQgY29tLmludGVsbGlqLnBzaS5Qc2lFeHByZXNzaW9uOworaW1wb3J0IGNvbS5pbnRlbGxpai5wc2kuUHNpRmlsZTsKK2ltcG9ydCBjb20uaW50ZWxsaWoucmVmYWN0b3JpbmcuZXh0cmFjdE1ldGhvZC5FeHRyYWN0TWV0aG9kUHJvY2Vzc29yOworaW1wb3J0IGNvbS5pbnRlbGxpai5yZWZhY3RvcmluZy51aS5UeXBlU2VsZWN0b3JNYW5hZ2VyOworaW1wb3J0IGNvbS5pbnRlbGxpai5yZWZhY3RvcmluZy51aS5UeXBlU2VsZWN0b3JNYW5hZ2VySW1wbDsKK2ltcG9ydCBjb20uaW50ZWxsaWoucmVmYWN0b3JpbmcudXRpbC5QYXJhbWV0ZXJUYWJsZVBhbmVsOworaW1wb3J0IGNvbS5pbnRlbGxpai50ZXN0RnJhbWV3b3JrLkxpZ2h0Q29kZUluc2lnaHRUZXN0Q2FzZTsKK2ltcG9ydCBvcmcuamV0YnJhaW5zLmFubm90YXRpb25zLk5vbk5sczsKK2ltcG9ydCBvcmcuamV0YnJhaW5zLmFubm90YXRpb25zLk5vdE51bGw7CisKK2ltcG9ydCBqYXZheC5zd2luZy4qOworCitwdWJsaWMgY2xhc3MgU3VnZ2VzdGVkUGFyYW1UeXBlc1Rlc3QgZXh0ZW5kcyBMaWdodENvZGVJbnNpZ2h0VGVzdENhc2UgeworICBATm9uTmxzIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBCQVNFX1BBVEggPSAiL3JlZmFjdG9yaW5nL3N1Z2dlc3RlZFR5cGVzLyI7CisKKyAgQE5vdE51bGwKKyAgQE92ZXJyaWRlCisgIHByb3RlY3RlZCBTdHJpbmcgZ2V0VGVzdERhdGFQYXRoKCkgeworICAgIHJldHVybiBKYXZhVGVzdFV0aWwuZ2V0SmF2YVRlc3REYXRhUGF0aCgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFBvc3RmaXhFeHByVXNlZEFzT3V0cHV0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KCJieXRlIik7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0UG9zdGZpeEV4cHJVbnVzZWRBZnRlcigpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdCgiYnl0ZSIsICJzaG9ydCIsICJpbnQiLCAibG9uZyIsICJmbG9hdCIsICJkb3VibGUiKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RMdEx0Qnl0ZSgpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdCgiYnl0ZSIsICJzaG9ydCIsICJpbnQiLCAibG9uZyIpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEx0THRJbnQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoImludCIsICJsb25nIik7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0QXNzaWdubWVudFdpdGhDb25jYXRlbmF0aW9uKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KCJTdHJpbmciKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RBc3NpZ25tZW50V2l0aG91dENvbmNhdGVuYXRpb24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoIlN0cmluZyIsICJPYmplY3QiLCAiU2VyaWFsaXphYmxlIiwgIkNvbXBhcmFibGU8U3RyaW5nPiIsICJDaGFyU2VxdWVuY2UiKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RDYXN0SW5zaWRlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KCJBIiwgIk9iamVjdCIpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdE11bHRpcGxlQ2FzdHMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoIkEiLCAiT2JqZWN0Iik7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0Q2FzdE5vQ2FzdCgpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdCgiT2JqZWN0Iik7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0Tm9DYXN0V2hlbldyYXBwZWQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoIk9iamVjdCIpOworICB9CisKKyAgcHJpdmF0ZSB2b2lkIGRvVGVzdChTdHJpbmcuLi4gdHlwZXMpIHRocm93cyBFeGNlcHRpb24geworICAgIGNvbmZpZ3VyZUJ5RmlsZShCQVNFX1BBVEggKyBnZXRUZXN0TmFtZShmYWxzZSkgKyAiLmphdmEiKTsKKworICAgIGZpbmFsIEVkaXRvciBlZGl0b3IgPSBnZXRFZGl0b3IoKTsKKyAgICBmaW5hbCBQc2lGaWxlIGZpbGUgPSBnZXRGaWxlKCk7CisgICAgZmluYWwgUHJvamVjdCBwcm9qZWN0ID0gZ2V0UHJvamVjdCgpOworCisgICAgaW50IHN0YXJ0T2Zmc2V0ID0gZWRpdG9yLmdldFNlbGVjdGlvbk1vZGVsKCkuZ2V0U2VsZWN0aW9uU3RhcnQoKTsKKyAgICBpbnQgZW5kT2Zmc2V0ID0gZWRpdG9yLmdldFNlbGVjdGlvbk1vZGVsKCkuZ2V0U2VsZWN0aW9uRW5kKCk7CisgICAgUHNpRWxlbWVudFtdIGVsZW1lbnRzOworICAgIFBzaUV4cHJlc3Npb24gZXhwciA9IENvZGVJbnNpZ2h0VXRpbC5maW5kRXhwcmVzc2lvbkluUmFuZ2UoZmlsZSwgc3RhcnRPZmZzZXQsIGVuZE9mZnNldCk7CisgICAgaWYgKGV4cHIgIT0gbnVsbCkgeworICAgICAgZWxlbWVudHMgPSBuZXcgUHNpRWxlbWVudFtde2V4cHJ9OworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgIGVsZW1lbnRzID0gQ29kZUluc2lnaHRVdGlsLmZpbmRTdGF0ZW1lbnRzSW5SYW5nZShmaWxlLCBzdGFydE9mZnNldCwgZW5kT2Zmc2V0KTsKKyAgICB9CisgICAgYXNzZXJ0VHJ1ZShlbGVtZW50cy5sZW5ndGggPiAwKTsKKworICAgIGZpbmFsIEV4dHJhY3RNZXRob2RQcm9jZXNzb3IgcHJvY2Vzc29yID0KKyAgICAgIG5ldyBFeHRyYWN0TWV0aG9kUHJvY2Vzc29yKHByb2plY3QsIGVkaXRvciwgZWxlbWVudHMsIG51bGwsICJFeHRyYWN0IE1ldGhvZCIsICJuZXdNZXRob2QiLCBudWxsKTsKKworICAgIHByb2Nlc3Nvci5wcmVwYXJlKCk7CisKKyAgICBmb3IgKGZpbmFsIFBhcmFtZXRlclRhYmxlUGFuZWwuVmFyaWFibGVEYXRhIGRhdGEgOiBwcm9jZXNzb3IuZ2V0SW5wdXRWYXJpYWJsZXMoKS5nZXRJbnB1dFZhcmlhYmxlcygpKSB7CisgICAgICBmaW5hbCBQc2lFeHByZXNzaW9uW10gb2NjdXJyZW5jZXMgPSBQYXJhbWV0ZXJUYWJsZVBhbmVsLmZpbmRWYXJpYWJsZU9jY3VycmVuY2VzKGVsZW1lbnRzLCBkYXRhLnZhcmlhYmxlKTsKKyAgICAgIGZpbmFsIFR5cGVTZWxlY3Rvck1hbmFnZXIgbWFuYWdlciA9IG5ldyBUeXBlU2VsZWN0b3JNYW5hZ2VySW1wbChwcm9qZWN0LCBkYXRhLnR5cGUsIG9jY3VycmVuY2VzLCB0cnVlKSB7CisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwcm90ZWN0ZWQgYm9vbGVhbiBpc1VzZWRBZnRlcigpIHsKKyAgICAgICAgICByZXR1cm4gcHJvY2Vzc29yLmlzT3V0cHV0VmFyaWFibGUoZGF0YS52YXJpYWJsZSk7CisgICAgICAgIH0KKyAgICAgIH07CisgICAgICBmaW5hbCBKQ29tcG9uZW50IGNvbXBvbmVudCA9IG1hbmFnZXIuZ2V0VHlwZVNlbGVjdG9yKCkuZ2V0Q29tcG9uZW50KCk7CisgICAgICBpZiAodHlwZXMubGVuZ3RoID4gMSkgeworICAgICAgICBhc3NlcnRUcnVlKCJPbmUgdHlwZSBzdWdnZXN0ZWQiLCBjb21wb25lbnQgaW5zdGFuY2VvZiBKQ29tYm9Cb3gpOworICAgICAgICBmaW5hbCBEZWZhdWx0Q29tYm9Cb3hNb2RlbCBtb2RlbCA9IChEZWZhdWx0Q29tYm9Cb3hNb2RlbCkoKEpDb21ib0JveCljb21wb25lbnQpLmdldE1vZGVsKCk7CisgICAgICAgIGFzc2VydEVxdWFscyh0eXBlcy5sZW5ndGgsIG1vZGVsLmdldFNpemUoKSk7CisgICAgICAgIGZvciAoaW50IGkgPSAwLCB0eXBlc0xlbmd0aCA9IHR5cGVzLmxlbmd0aDsgaSA8IHR5cGVzTGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICBTdHJpbmcgdHlwZSA9IHR5cGVzW2ldOworICAgICAgICAgIGFzc2VydEVxdWFscyh0eXBlLCBtb2RlbC5nZXRFbGVtZW50QXQoaSkudG9TdHJpbmcoKSk7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICAgIGVsc2UgaWYgKHR5cGVzLmxlbmd0aCA9PSAxKSB7CisgICAgICAgIGFzc2VydFRydWUoIk11bHRpcGxlIHR5cGVzIHN1Z2dlc3RlZCIsIGNvbXBvbmVudCBpbnN0YW5jZW9mIEpMYWJlbCk7CisgICAgICAgIGFzc2VydEVxdWFscyh0eXBlc1swXSwgKChKTGFiZWwpY29tcG9uZW50KS5nZXRUZXh0KCkpOworICAgICAgfQorICAgIH0KKyAgfQorCisKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovcmVmYWN0b3JpbmcvVHVyblJlZnNUb1N1cGVyVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL3JlZmFjdG9yaW5nL1R1cm5SZWZzVG9TdXBlclRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NGRlZmJlCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL3JlZmFjdG9yaW5nL1R1cm5SZWZzVG9TdXBlclRlc3QuamF2YQpAQCAtMCwwICsxLDkwIEBACisvKgorICogQ29weXJpZ2h0IDIwMDAtMjAxMiBKZXRCcmFpbnMgcy5yLm8uCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworcGFja2FnZSBjb20uaW50ZWxsaWoucmVmYWN0b3Jpbmc7CisKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS5maWxlRWRpdG9yLkZpbGVEb2N1bWVudE1hbmFnZXI7CitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkudmZzLlZpcnR1YWxGaWxlOworaW1wb3J0IGNvbS5pbnRlbGxpai5wc2kuQ29tbW9uQ2xhc3NOYW1lczsKK2ltcG9ydCBjb20uaW50ZWxsaWoucHNpLlBzaUNsYXNzOworaW1wb3J0IGNvbS5pbnRlbGxpai5wc2kuc2VhcmNoLkdsb2JhbFNlYXJjaFNjb3BlOworaW1wb3J0IGNvbS5pbnRlbGxpai5yZWZhY3RvcmluZy50dXJuUmVmc1RvU3VwZXIuVHVyblJlZnNUb1N1cGVyUHJvY2Vzc29yOworaW1wb3J0IG9yZy5qZXRicmFpbnMuYW5ub3RhdGlvbnMuTm9uTmxzOworCitwdWJsaWMgY2xhc3MgVHVyblJlZnNUb1N1cGVyVGVzdCBleHRlbmRzIE11bHRpRmlsZVRlc3RDYXNlIHsKKyAgcHVibGljIHZvaWQgdGVzdFN1cGVyQ2xhc3MoKSB0aHJvd3MgRXhjZXB0aW9uIHsgZG9UZXN0KCJBQ2xhc3MiLCAiQVN1cGVyIiwgdHJ1ZSk7IH0KKyAgcHVibGljIHZvaWQgdGVzdE1ldGhvZEZyb21TdXBlcigpIHRocm93cyBFeGNlcHRpb24geyBkb1Rlc3QoIkFDbGFzcyIsICJBU3VwZXIiLCB0cnVlKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0UmVtb3ZlSW1wb3J0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7IGRvVGVzdCgicGFjazEuQUNsYXNzIiwgInBhY2sxLkFuSW50ZXJmYWNlIiwgdHJ1ZSk7IH0KKyAgcHVibGljIHZvaWQgdGVzdFRvQXJyYXkoKSB0aHJvd3MgRXhjZXB0aW9uIHsgZG9UZXN0KCJBIiwgIkkiLCB0cnVlKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0QXJyYXlFbGVtZW50QXNzaWdubWVudCgpIHRocm93cyBFeGNlcHRpb24geyBkb1Rlc3QoIkMiLCAiSSIsIHRydWUpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RSZXR1cm5WYWx1ZSgpIHRocm93cyBFeGNlcHRpb24geyBkb1Rlc3QoIkEiLCAiSSIsIHRydWUpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RSZXR1cm5WYWx1ZTIoKSB0aHJvd3MgRXhjZXB0aW9uIHsgZG9UZXN0KCJBIiwgIkkiLCB0cnVlKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0Q2FzdCgpIHRocm93cyBFeGNlcHRpb24geyBkb1Rlc3QoIkEiLCAiSSIsIHRydWUpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RVc2VBc0FyZygpIHRocm93cyBFeGNlcHRpb24geyBkb1Rlc3QoIkFDbGFzcyIsICJJIiwgdHJ1ZSk7IH0KKyAgcHVibGljIHZvaWQgdGVzdENsYXNzVXNhZ2UoKSB0aHJvd3MgRXhjZXB0aW9uIHsgZG9UZXN0KCJBIiwgIkkiLCB0cnVlKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0SW5zdGFuY2VPZigpIHRocm93cyBFeGNlcHRpb24geyBkb1Rlc3QoIkEiLCAiSSIsIGZhbHNlKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0RmllbGRUZXN0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7IGRvVGVzdCgiQ29tcG9uZW50MSIsICJJRG9Tb21ldGhpbmciLCBmYWxzZSk7IH0KKyAgcHVibGljIHZvaWQgdGVzdFNjcjM0MDAwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7IGRvVGVzdCgiU2ltcGxlTW9kZWwiLCAiTW9kZWwiLCBmYWxzZSk7IH0KKyAgcHVibGljIHZvaWQgdGVzdFNjcjM0MDIwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7IGRvVGVzdChDb21tb25DbGFzc05hbWVzLkpBVkFfVVRJTF9MSVNULCBDb21tb25DbGFzc05hbWVzLkpBVkFfVVRJTF9DT0xMRUNUSU9OLCBmYWxzZSk7IH0KKyAgcHVibGljIHZvaWQgdGVzdENvbW1vbkluaGVyaXRvcigpIHRocm93cyBFeGNlcHRpb24geyBkb1Rlc3QoIkNsaWVudC5WIiwgIkNsaWVudC5MIiwgZmFsc2UpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RDb21tb25Jbmhlcml0b3JGYWlsKCkgdGhyb3dzIEV4Y2VwdGlvbiB7IGRvVGVzdCgiQ2xpZW50LlYiLCAiQ2xpZW50LkwiLCBmYWxzZSk7IH0KKyAgcHVibGljIHZvaWQgdGVzdENvbW1vbkluaGVyaXRvclJlc3VsdHMoKSB0aHJvd3MgRXhjZXB0aW9uIHsgZG9UZXN0KCJDbGllbnQuViIsICJDbGllbnQuTCIsIGZhbHNlKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0Q29tbW9uSW5oZXJpdG9yUmVzdWx0c0ZhaWwoKSB0aHJvd3MgRXhjZXB0aW9uIHsgZG9UZXN0KCJDbGllbnQuViIsICJDbGllbnQuTCIsIGZhbHNlKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0Q29tbW9uSW5oZXJpdG9yUmVzdWx0c0ZhaWwyKCkgdGhyb3dzIEV4Y2VwdGlvbiB7IGRvVGVzdCgiQ2xpZW50LlYiLCAiQ2xpZW50LkwiLCBmYWxzZSk7IH0KKyAgcHVibGljIHZvaWQgdGVzdElERUE2NTA1KCkgdGhyb3dzIEV4Y2VwdGlvbiB7IGRvVGVzdCgiSW1wbCIsICJJQiIsIGZhbHNlKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0SURFQURFVjU1MTcoKSB0aHJvd3MgRXhjZXB0aW9uIHsgZG9UZXN0KCJYeXoiLCAiWEludCIsIGZhbHNlKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0SURFQURFVjU1MTdOT09QKCkgdGhyb3dzIEV4Y2VwdGlvbiB7IGRvVGVzdCgiWHl6IiwgIlhJbnQiLCBmYWxzZSk7IH0KKyAgcHVibGljIHZvaWQgdGVzdElERUFERVY2MTM2KCkgdGhyb3dzIEV4Y2VwdGlvbiB7IGRvVGVzdCgiQSIsICJCIiwgZmFsc2UpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RJREVBREVWMjU2NjkoKSB0aHJvd3MgRXhjZXB0aW9uIHsgZG9UZXN0KCJwLkEiLCAicC5CYXNlIiwgZmFsc2UpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RJREVBREVWMjM4MDcoKSB0aHJvd3MgRXhjZXB0aW9uIHsgZG9UZXN0KCJCIiwgIkEiLCBmYWxzZSk7IH0KKyAgcHVibGljIHZvaWQgdGVzdFR5cGVBcmd1bWVudHNSSCgpIHRocm93cyBFeGNlcHRpb24geyBkb1Rlc3QoIklJbXBsIiwgIkkiLCBmYWxzZSk7IH0KKyAgcHVibGljIHZvaWQgdGVzdFR5cGVBcmd1bWVudHNSSDEoKSB0aHJvd3MgRXhjZXB0aW9uIHsgZG9UZXN0KCJJSW1wbCIsICJJIiwgZmFsc2UpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RBbm9ueW1vdXNXaXRoVHlwZUFyZ3VtZW50cygpIHRocm93cyBFeGNlcHRpb24geyBkb1Rlc3QoIkNsYXp6IiwgIkludEYiLCBmYWxzZSk7IH0KKyAgcHVibGljIHZvaWQgdGVzdFR5cGVBcmd1bWVudHNQYXJhbSgpIHRocm93cyBFeGNlcHRpb24geyBkb1Rlc3QoIkNsYXp6IiwgIkludEYiLCBmYWxzZSk7IH0KKyAgcHVibGljIHZvaWQgdGVzdFRyeVdpdGhSZXNvdXJjZXMxKCkgdGhyb3dzIEV4Y2VwdGlvbiB7IGRvVGVzdCgiVGVzdC5NeVJlc291cmNlSW1wbCIsICJUZXN0Lk15UmVzb3VyY2UiLCBmYWxzZSk7IH0KKyAgcHVibGljIHZvaWQgdGVzdFRyeVdpdGhSZXNvdXJjZXMyKCkgdGhyb3dzIEV4Y2VwdGlvbiB7IGRvVGVzdCgiVGVzdC5NeVJlc291cmNlSW1wbCIsICJUZXN0Lk15UmVzb3VyY2UiLCBmYWxzZSk7IH0KKworICAvL3RvZG9bYW5uXSBmaXggYW5kIHVuY29tbWVudAorICAvL3B1YmxpYyB2b2lkIHRlc3RTdGF0aWNDYWxsQXJndW1lbnRzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7IGRvVGVzdCgiSW1wbCIsICJJbnQiLCBmYWxzZSk7IH0KKyAgLy9wdWJsaWMgdm9pZCB0ZXN0TGlzdEFyZ3MoKSB0aHJvd3MgRXhjZXB0aW9uIHsgZG9UZXN0KCJJbXBsIiwgIkludCIsIGZhbHNlKTsgfQorICAvL3B1YmxpYyB2b2lkIHRlc3RDb3ZhcmlhbnRSZXR1cm5UeXBlcygpIHRocm93cyBFeGNlcHRpb24geyBkb1Rlc3QoIkltcGwiLCAiSW50IiwgZmFsc2UpOyB9CisgIC8vcHVibGljIHZvaWQgdGVzdE5ld0V4cHIoKSB0aHJvd3MgRXhjZXB0aW9uIHsgZG9UZXN0KCJJbXBsIiwgIkludCIsIGZhbHNlKTsgfQorICAvL3B1YmxpYyB2b2lkIHRlc3RGb3JFYWNoMSgpIHRocm93cyBFeGNlcHRpb24geyBkb1Rlc3QoIlRlc3QuTXlJdGVyYWJsZUltcGwiLCAiVGVzdC5NeUl0ZXJhYmxlIiwgZmFsc2UpOyB9CisgIC8vcHVibGljIHZvaWQgdGVzdEZvckVhY2gyKCkgdGhyb3dzIEV4Y2VwdGlvbiB7IGRvVGVzdCgiVGVzdC5NeUl0ZXJhYmxlSW1wbCIsICJUZXN0Lk15SXRlcmFibGUiLCBmYWxzZSk7IH0KKworICBwcml2YXRlIHZvaWQgZG9UZXN0KEBOb25ObHMgZmluYWwgU3RyaW5nIGNsYXNzTmFtZSwgQE5vbk5scyBmaW5hbCBTdHJpbmcgc3VwZXJDbGFzc05hbWUsIGZpbmFsIGJvb2xlYW4gcmVwbGFjZUluc3RhbmNlT2YpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdChuZXcgUGVyZm9ybUFjdGlvbigpIHsKKyAgICAgIEBPdmVycmlkZQorICAgICAgcHVibGljIHZvaWQgcGVyZm9ybUFjdGlvbihWaXJ0dWFsRmlsZSByb290RGlyLCBWaXJ0dWFsRmlsZSByb290QWZ0ZXIpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICBUdXJuUmVmc1RvU3VwZXJUZXN0LnRoaXMucGVyZm9ybUFjdGlvbihjbGFzc05hbWUsIHN1cGVyQ2xhc3NOYW1lLCByZXBsYWNlSW5zdGFuY2VPZik7CisgICAgICB9CisgICAgfSwgdHJ1ZSk7CisgIH0KKworICBAT3ZlcnJpZGUKKyAgcHVibGljIFN0cmluZyBnZXRUZXN0Um9vdCgpIHsKKyAgICByZXR1cm4gIi9yZWZhY3RvcmluZy90dXJuUmVmc1RvU3VwZXIvIjsKKyAgfQorCisgIHByaXZhdGUgdm9pZCBwZXJmb3JtQWN0aW9uKGZpbmFsIFN0cmluZyBjbGFzc05hbWUsIGZpbmFsIFN0cmluZyBzdXBlckNsYXNzTmFtZSwgYm9vbGVhbiByZXBsYWNlSW5zdGFuY2VPZikgeworICAgIGZpbmFsIFBzaUNsYXNzIGFDbGFzcyA9IG15SmF2YUZhY2FkZS5maW5kQ2xhc3MoY2xhc3NOYW1lLCBHbG9iYWxTZWFyY2hTY29wZS5hbGxTY29wZShteVByb2plY3QpKTsKKyAgICBhc3NlcnROb3ROdWxsKCJDbGFzcyAiICsgY2xhc3NOYW1lICsgIiBub3QgZm91bmQiLCBhQ2xhc3MpOworICAgIFBzaUNsYXNzIHN1cGVyQ2xhc3MgPSBteUphdmFGYWNhZGUuZmluZENsYXNzKHN1cGVyQ2xhc3NOYW1lLCBHbG9iYWxTZWFyY2hTY29wZS5hbGxTY29wZShteVByb2plY3QpKTsKKyAgICBhc3NlcnROb3ROdWxsKCJDbGFzcyAiICsgc3VwZXJDbGFzc05hbWUgKyAiIG5vdCBmb3VuZCIsIHN1cGVyQ2xhc3MpOworCisgICAgbmV3IFR1cm5SZWZzVG9TdXBlclByb2Nlc3NvcihteVByb2plY3QsIGFDbGFzcywgc3VwZXJDbGFzcywgcmVwbGFjZUluc3RhbmNlT2YpLnJ1bigpOworICAgIEZpbGVEb2N1bWVudE1hbmFnZXIuZ2V0SW5zdGFuY2UoKS5zYXZlQWxsRG9jdW1lbnRzKCk7CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9yZWZhY3RvcmluZy9UeXBlQ29va1Rlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9yZWZhY3RvcmluZy9UeXBlQ29va1Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNzYyODBkCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL3JlZmFjdG9yaW5nL1R5cGVDb29rVGVzdC5qYXZhCkBAIC0wLDAgKzEsNzg4IEBACisvKgorICogQ29weXJpZ2h0IDIwMDAtMjAxMiBKZXRCcmFpbnMgcy5yLm8uCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworcGFja2FnZSBjb20uaW50ZWxsaWoucmVmYWN0b3Jpbmc7CisKK2ltcG9ydCBjb20uaW50ZWxsaWouSmF2YVRlc3RVdGlsOworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLmZpbGVFZGl0b3IuRmlsZURvY3VtZW50TWFuYWdlcjsKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS51dGlsLmlvLkZpbGVVdGlsOworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLnZmcy5Mb2NhbEZpbGVTeXN0ZW07CitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkudmZzLlZpcnR1YWxGaWxlOworaW1wb3J0IGNvbS5pbnRlbGxpai5wc2kuUHNpQ2xhc3M7CitpbXBvcnQgY29tLmludGVsbGlqLnBzaS5zZWFyY2guR2xvYmFsU2VhcmNoU2NvcGU7CitpbXBvcnQgY29tLmludGVsbGlqLnJlZmFjdG9yaW5nLnR5cGVDb29rLlNldHRpbmdzOworaW1wb3J0IGNvbS5pbnRlbGxpai5yZWZhY3RvcmluZy50eXBlQ29vay5kZWR1Y3RpdmUuYnVpbGRlci5SZWR1Y3Rpb25TeXN0ZW07CitpbXBvcnQgY29tLmludGVsbGlqLnJlZmFjdG9yaW5nLnR5cGVDb29rLmRlZHVjdGl2ZS5idWlsZGVyLlN5c3RlbUJ1aWxkZXI7CitpbXBvcnQgY29tLmludGVsbGlqLnJlZmFjdG9yaW5nLnR5cGVDb29rLmRlZHVjdGl2ZS5yZXNvbHZlci5CaW5kaW5nOworaW1wb3J0IGNvbS5pbnRlbGxpai5yZWZhY3RvcmluZy50eXBlQ29vay5kZWR1Y3RpdmUucmVzb2x2ZXIuUmVzb2x2ZXJUcmVlOworCitpbXBvcnQgamF2YS5pby5GaWxlOworaW1wb3J0IGphdmEuaW8uRmlsZU5vdEZvdW5kRXhjZXB0aW9uOworaW1wb3J0IGphdmEuaW8uRmlsZU91dHB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLmlvLlByaW50V3JpdGVyOworCisvKioKKyAqIENyZWF0ZWQgYnkgSW50ZWxsaUogSURFQS4KKyAqIFVzZXI6IGRiCisgKiBEYXRlOiAyMi4wNy4yMDAzCisgKiBUaW1lOiAyMjo0Njo0NAorICogVG8gY2hhbmdlIHRoaXMgdGVtcGxhdGUgdXNlIE9wdGlvbnMgfCBGaWxlIFRlbXBsYXRlcy4KKyAqLworCitwdWJsaWMgY2xhc3MgVHlwZUNvb2tUZXN0IGV4dGVuZHMgTXVsdGlGaWxlVGVzdENhc2UgeworICBAT3ZlcnJpZGUKKyAgcHJvdGVjdGVkIFN0cmluZyBnZXRUZXN0RGF0YVBhdGgoKSB7CisgICAgcmV0dXJuIEphdmFUZXN0VXRpbC5nZXRKYXZhVGVzdERhdGFQYXRoKCk7CisgIH0KKworICBAT3ZlcnJpZGUKKyAgcHVibGljIFN0cmluZyBnZXRUZXN0Um9vdCgpIHsKKyAgICByZXR1cm4gIi9yZWZhY3RvcmluZy90eXBlQ29vay8iOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFQwMSgpIHRocm93cyBFeGNlcHRpb24geworICAgIHN0YXJ0KCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0VDAyKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgc3RhcnQoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RUMDMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBzdGFydCgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFQwNCgpIHRocm93cyBFeGNlcHRpb24geworICAgIHN0YXJ0KCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0VDA1KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgc3RhcnQoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RUMDYoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBzdGFydCgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFQwNygpIHRocm93cyBFeGNlcHRpb24geworICAgIHN0YXJ0KCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0VDA4KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgc3RhcnQoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RUMDkoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBzdGFydCgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFQxMCgpIHRocm93cyBFeGNlcHRpb24geworICAgIHN0YXJ0KCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0VDExKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgc3RhcnQoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RUMTIoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBzdGFydCgpOworICB9CisKKworICBwdWJsaWMgdm9pZCB0ZXN0VDEzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgc3RhcnQoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RUMTQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBzdGFydCgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFQxNSgpIHRocm93cyBFeGNlcHRpb24geworICAgIHN0YXJ0KCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0VDE2KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgc3RhcnQoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RUMTcoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBzdGFydCgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFQxOCgpIHRocm93cyBFeGNlcHRpb24geworICAgIHN0YXJ0KCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0VDE5KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgc3RhcnQoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RUMjAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBzdGFydCgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFQyMSgpIHRocm93cyBFeGNlcHRpb24geworICAgIHN0YXJ0KCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0VDIyKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgc3RhcnQoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RUMjMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBzdGFydCgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFQyNCgpIHRocm93cyBFeGNlcHRpb24geworICAgIHN0YXJ0KCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0VDI1KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgc3RhcnQoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RUMjYoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBzdGFydCgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFQyNygpIHRocm93cyBFeGNlcHRpb24geworICAgIHN0YXJ0KCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0VDI4KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgc3RhcnQoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RUMjkoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBzdGFydCgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFQzMCgpIHRocm93cyBFeGNlcHRpb24geworICAgIHN0YXJ0KCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0VDMxKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgc3RhcnQoKTsKKyAgfQorCisgIC8vIFdhaXRzIGZvciBjb3JyZWN0IE5DQS4uLgorICAvL3B1YmxpYyB2b2lkIHRlc3RUMzIoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgLy8gc3RhcnQoKTsKKyAgLy99CisKKyAgcHVibGljIHZvaWQgdGVzdFQzMygpIHRocm93cyBFeGNlcHRpb24geworICAgIHN0YXJ0KCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0VDM0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgc3RhcnQoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RUMzUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBzdGFydCgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFQzNigpIHRocm93cyBFeGNlcHRpb24geworICAgIHN0YXJ0KCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0VDM3KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgc3RhcnQoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RUMzgoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBzdGFydCgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFQzOSgpIHRocm93cyBFeGNlcHRpb24geworICAgIHN0YXJ0KCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0VDQwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgc3RhcnQoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RUNDEoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBzdGFydCgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFQ0MigpIHRocm93cyBFeGNlcHRpb24geworICAgIHN0YXJ0KCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0VDQzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgc3RhcnQoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RUNDQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBzdGFydCgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFQ0NSgpIHRocm93cyBFeGNlcHRpb24geworICAgIHN0YXJ0KCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0VDQ2KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgc3RhcnQoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RUNDcoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBzdGFydCgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFQ0OCgpIHRocm93cyBFeGNlcHRpb24geworICAgIHN0YXJ0KCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0VDQ5KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgc3RhcnQoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RUNTAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBzdGFydCgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFQ1MSgpIHRocm93cyBFeGNlcHRpb24geworICAgIHN0YXJ0KCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0VDUyKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgc3RhcnQoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RUNTMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBzdGFydCgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFQ1NCgpIHRocm93cyBFeGNlcHRpb24geworICAgIHN0YXJ0KCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0VDU1KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgc3RhcnQoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RUNTYoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBzdGFydCgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFQ1NygpIHRocm93cyBFeGNlcHRpb24geworICAgIHN0YXJ0KCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0VDU4KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgc3RhcnQoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RUNTkoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBzdGFydCgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFQ2MCgpIHRocm93cyBFeGNlcHRpb24geworICAgIHN0YXJ0KCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0VDYxKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgc3RhcnQoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RUNjIoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBzdGFydCgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFQ2MygpIHRocm93cyBFeGNlcHRpb24geworICAgIHN0YXJ0KCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0VDY0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgc3RhcnQoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RUNjUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBzdGFydCgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFQ2NigpIHRocm93cyBFeGNlcHRpb24geworICAgIHN0YXJ0KCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0VDY3KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgc3RhcnQoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RUNjgoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBzdGFydCgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFQ2OSgpIHRocm93cyBFeGNlcHRpb24geworICAgIHN0YXJ0KCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0VDcwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgc3RhcnQoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RUNzEoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBzdGFydCgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFQ3MigpIHRocm93cyBFeGNlcHRpb24geworICAgIHN0YXJ0KCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0VDczKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgc3RhcnQoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RUNzQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBzdGFydCgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFQ3NSgpIHRocm93cyBFeGNlcHRpb24geworICAgIHN0YXJ0KCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0VDc2KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgc3RhcnQoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RUNzcoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBzdGFydCgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFQ3OCgpIHRocm93cyBFeGNlcHRpb24geworICAgIHN0YXJ0KCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0VDc5KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgc3RhcnQoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RUODAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBzdGFydCgpOworICB9CisKKyAgLy8gVG9vIGNvbnNlcnZhdGl2ZS4uLi4gV2FpdGluZyBmb3IgYmV0dGVyIHRpbWVzCisgIC8vcHVibGljIHZvaWQgdGVzdFQ4MSgpIHRocm93cyBFeGNlcHRpb24geworICAvLyAgc3RhcnQoKTsKKyAgLy99CisKKyAgcHVibGljIHZvaWQgdGVzdFQ4MigpIHRocm93cyBFeGNlcHRpb24geworICAgIHN0YXJ0KCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0VDgzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgc3RhcnQoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RUODQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBzdGFydCgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFQ4NSgpIHRocm93cyBFeGNlcHRpb24geworICAgIHN0YXJ0KCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0VDg2KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgc3RhcnQoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RUODcoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBzdGFydCgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFQ4OCgpIHRocm93cyBFeGNlcHRpb24geworICAgIHN0YXJ0KCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0VDg5KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgc3RhcnQoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RUOTAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBzdGFydCgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFQ5MSgpIHRocm93cyBFeGNlcHRpb24geworICAgIHN0YXJ0KCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0VDkyKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgc3RhcnQoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RUOTMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBzdGFydCgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFQ5NCgpIHRocm93cyBFeGNlcHRpb24geworICAgIHN0YXJ0KCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0VDk1KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgc3RhcnQoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RUOTYoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBzdGFydCgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFQ5NygpIHRocm93cyBFeGNlcHRpb24geworICAgIHN0YXJ0KCk7CisgIH0KKworICAvLyBXcm9uZzogaW5uZXIgY2xhc3MKKyAgLy9wdWJsaWMgdm9pZCB0ZXN0VDk4KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgIC8vICBzdGFydCgpOworICAvL30KKworICAvLyBXcm9uZzogYW5vbnltb3VzCisgIC8vcHVibGljIHZvaWQgdGVzdFQ5OSgpIHRocm93cyBFeGNlcHRpb24geworICAvLyAgc3RhcnQoKTsKKyAgLy99CisKKyAgcHVibGljIHZvaWQgdGVzdFQxMDAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBzdGFydCgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFQxMDEoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBzdGFydCgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFQxMDIoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBzdGFydCgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFQxMDMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBzdGFydCgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFQxMDQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBzdGFydCgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFQxMDUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBzdGFydCgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFQxMDYoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBzdGFydCgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFQxMDcoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBzdGFydCgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFQxMDgoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBzdGFydCgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFQxMDkoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBzdGFydCgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFQxMTAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBzdGFydCgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFQxMTEoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBzdGFydCgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFQxMTIoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBzdGFydCgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFQxMTMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBzdGFydCgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFQxMTQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBzdGFydCgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFQxMTUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBzdGFydCgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFQxMTYoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBzdGFydCgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFQxMTcoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBzdGFydCgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFQxMTgoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBzdGFydCgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFQxMTkoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBzdGFydCgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFQxMjAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBzdGFydCgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFQxMjEoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBzdGFydCgpOworICB9CisKKyAgLy9wdWJsaWMgdm9pZCB0ZXN0VDEyMigpIHRocm93cyBFeGNlcHRpb24geworICAvLyAgc3RhcnQoKTsKKyAgLy99CisKKyAgcHVibGljIHZvaWQgdGVzdFQxMjMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBzdGFydCgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFQxMjQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBzdGFydCgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFQxMjUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBzdGFydCgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFQxMjYoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBzdGFydCgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFQxMjcoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBzdGFydCgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFQxMjgoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBzdGFydCgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFQxMjkoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBzdGFydCgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFQxMzAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBzdGFydCgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFQxMzEoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBzdGFydCgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFQxMzIoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBzdGFydCgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFQxMzMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBzdGFydCgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFQxMzQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBzdGFydCgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFQxMzUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBzdGFydCgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFQxMzYoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBzdGFydCgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFQxMzcoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBzdGFydCgpOworICB9CisKKyAgLy9wdWJsaWMgdm9pZCB0ZXN0VDEzOCgpIHRocm93cyBFeGNlcHRpb24geworICAvLyAgIHN0YXJ0KCk7CisgIC8vIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0VDEzOSgpIHRocm93cyBFeGNlcHRpb24geworICAgIHN0YXJ0KCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0VDE0MCgpIHRocm93cyBFeGNlcHRpb24geworICAgIHN0YXJ0KCk7CisgIH0KKworICAvL3B1YmxpYyB2b2lkIHRlc3RUMTQxKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgIC8vICBzdGFydCgpOworICAvL30KKyAgLy8KKyAgLy9wdWJsaWMgdm9pZCB0ZXN0VDE0MigpIHRocm93cyBFeGNlcHRpb24geworICAvLyAgc3RhcnQoKTsKKyAgLy99CisgIC8vCisgIC8vcHVibGljIHZvaWQgdGVzdFQxNDMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgLy8gICAgc3RhcnQoKTsKKyAgLy99CisgIC8vCisgIC8vcHVibGljIHZvaWQgdGVzdFQxNDQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgLy8gICAgICBzdGFydCgpOworICAvL30KKyAgLy8KKyAgLy9wdWJsaWMgdm9pZCB0ZXN0VDE0NSgpIHRocm93cyBFeGNlcHRpb24geworICAvLyAgICAgIHN0YXJ0KCk7CisgIC8vfQorCisgIHB1YmxpYyB2b2lkIHRlc3RUMTQ2KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIHN0YXJ0KCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0VDE0NygpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICBzdGFydCgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFQxNDgoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgc3RhcnQoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RUMTQ5KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIHN0YXJ0KHRydWUpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFQxNTAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgc3RhcnQoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RUMTUxKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIHN0YXJ0KCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0VDE1MigpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICBzdGFydCgpOworICB9CisKKyAgcHVibGljIHZvaWQgc3RhcnQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBzdGFydChmYWxzZSk7CisgIH0KKworICBwdWJsaWMgdm9pZCBzdGFydChmaW5hbCBib29sZWFuIGNvb2tPYmplY3RzKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QobmV3IFBlcmZvcm1BY3Rpb24oKSB7CisgICAgICBAT3ZlcnJpZGUKKyAgICAgIHB1YmxpYyB2b2lkIHBlcmZvcm1BY3Rpb24oVmlydHVhbEZpbGUgcm9vdERpciwgVmlydHVhbEZpbGUgcm9vdEFmdGVyKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgVHlwZUNvb2tUZXN0LnRoaXMucGVyZm9ybUFjdGlvbigiVGVzdCIsIHJvb3REaXIuZ2V0TmFtZSgpLCBjb29rT2JqZWN0cyk7CisgICAgICB9CisgICAgfSk7CisgIH0KKworICBwcml2YXRlIHZvaWQgcGVyZm9ybUFjdGlvbihTdHJpbmcgY2xhc3NOYW1lLCBTdHJpbmcgcm9vdERpciwgZmluYWwgYm9vbGVhbiBjb29rT2JqZWN0cykgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgUHNpQ2xhc3MgYUNsYXNzID0gbXlKYXZhRmFjYWRlLmZpbmRDbGFzcyhjbGFzc05hbWUsIEdsb2JhbFNlYXJjaFNjb3BlLmFsbFNjb3BlKG15UHJvamVjdCkpOworCisgICAgYXNzZXJ0Tm90TnVsbCgiQ2xhc3MgIiArIGNsYXNzTmFtZSArICIgbm90IGZvdW5kIiwgYUNsYXNzKTsKKworICAgIFN5c3RlbUJ1aWxkZXIgYiA9IG5ldyBTeXN0ZW1CdWlsZGVyKG15UHNpTWFuYWdlci5nZXRQcm9qZWN0KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IFNldHRpbmdzKCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQE92ZXJyaWRlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdWJsaWMgYm9vbGVhbiBkcm9wT2Jzb2xldGVDYXN0cygpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBPdmVycmlkZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVibGljIGJvb2xlYW4gcHJlc2VydmVSYXdBcnJheXMoKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQE92ZXJyaWRlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdWJsaWMgYm9vbGVhbiBsZWF2ZU9iamVjdFBhcmFtZXRlcml6ZWRUeXBlc1JhdygpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1YmxpYyBib29sZWFuIGV4aGF1c3RpdmUoKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQE92ZXJyaWRlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdWJsaWMgYm9vbGVhbiBjb29rT2JqZWN0cygpeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29va09iamVjdHM7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBPdmVycmlkZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVibGljIGJvb2xlYW4gY29va1RvV2lsZGNhcmRzKCl7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKKworICAgIGZpbmFsIFJlZHVjdGlvblN5c3RlbSBjb21tb25TeXN0ZW0gPSBiLmJ1aWxkKGFDbGFzcyk7CisKKyAgICAvL1N5c3RlbS5vdXQucHJpbnRsbigiU3lzdGVtIGJ1aWx0OlxuIiArIGNvbW1vblN5c3RlbSk7CisKKyAgICBmaW5hbCBSZWR1Y3Rpb25TeXN0ZW1bXSBzeXN0ZW1zID0gY29tbW9uU3lzdGVtLmlzb2xhdGUoKTsKKworICAgIC8vU3lzdGVtLm91dC5wcmludGxuKCJTeXN0ZW1zIGlzb2xhdGVkOlxuIiArIGNvbW1vblN5c3RlbSk7CisKKyAgICBSZWR1Y3Rpb25TeXN0ZW0gc3lzdGVtID0gbnVsbDsKKworICAgIGZvciAoUmVkdWN0aW9uU3lzdGVtIHMgOiBzeXN0ZW1zKSB7CisgICAgICBpZiAocyAhPSBudWxsICYmIHN5c3RlbSA9PSBudWxsKSB7CisgICAgICAgIC8vU3lzdGVtLm91dC5wcmludGxuKHMpOworICAgICAgICBzeXN0ZW0gPSBzOworICAgICAgfQorICAgIH0KKworICAgIEJpbmRpbmcgYmluZGluZyA9IG51bGw7CisKKyAgICBpZiAoc3lzdGVtICE9IG51bGwpIHsKKyAgICAgIGZpbmFsIFJlc29sdmVyVHJlZSB0cmVlID0gbmV3IFJlc29sdmVyVHJlZShzeXN0ZW0pOworCisgICAgICB0cmVlLnJlc29sdmUoKTsKKworICAgICAgYmluZGluZyA9IHRyZWUuZ2V0QmVzdFNvbHV0aW9uKCk7CisgICAgfQorCisgICAgU3RyaW5nIGl0ZW1SZXByID0gc3lzdGVtICE9IG51bGwgPyBzeXN0ZW0uZHVtcFN0cmluZygpIDogY29tbW9uU3lzdGVtLmR1bXBTdHJpbmcoKTsvLyBkLnJlc3VsdFN0cmluZygpOworICAgIGRvU3R1ZmYocm9vdERpciwgaXRlbVJlcHIsIGNsYXNzTmFtZSArICIuaXRlbXMiKTsKKyAgICBpdGVtUmVwciA9IHN5c3RlbSAhPSBudWxsID8gc3lzdGVtLmR1bXBSZXN1bHQoYmluZGluZykgOiBjb21tb25TeXN0ZW0uZHVtcFN0cmluZygpOyAvL2QucmVzdWx0U3RyaW5nKCk7CisKKyAgICBkb1N0dWZmKHJvb3REaXIsIGl0ZW1SZXByLCBjbGFzc05hbWUgKyAiLjEuaXRlbXMiKTsKKyAgfQorCisgIHByaXZhdGUgdm9pZCBkb1N0dWZmKFN0cmluZyByb290RGlyLCBTdHJpbmcgaXRlbVJlcHIsIFN0cmluZyBpdGVtTmFtZSkgdGhyb3dzIEZpbGVOb3RGb3VuZEV4Y2VwdGlvbiB7CisgICAgU3RyaW5nIHBhdHRlcm5OYW1lID0gZ2V0VGVzdERhdGFQYXRoKCkgKyBnZXRUZXN0Um9vdCgpICsgZ2V0VGVzdE5hbWUodHJ1ZSkgKyAiL2FmdGVyLyIgKyBpdGVtTmFtZTsKKworICAgIEZpbGUgcGF0dGVybkZpbGUgPSBuZXcgRmlsZShwYXR0ZXJuTmFtZSk7CisKKyAgICBQcmludFdyaXRlciB3cml0ZXI7CisgICAgaWYgKCFwYXR0ZXJuRmlsZS5leGlzdHMoKSkgeworICAgICAgd3JpdGVyID0gbmV3IFByaW50V3JpdGVyKG5ldyBGaWxlT3V0cHV0U3RyZWFtKHBhdHRlcm5GaWxlKSk7CisgICAgICB0cnkgeworICAgICAgICB3cml0ZXIucHJpbnQoaXRlbVJlcHIpOworICAgICAgfQorICAgICAgZmluYWxseSB7CisgICAgICAgIHdyaXRlci5jbG9zZSgpOworICAgICAgfQorCisgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlBhdHRlcm4gbm90IGZvdW5kLCBmaWxlICIgKyBwYXR0ZXJuTmFtZSArICIgY3JlYXRlZC4iKTsKKworICAgICAgTG9jYWxGaWxlU3lzdGVtLmdldEluc3RhbmNlKCkucmVmcmVzaEFuZEZpbmRGaWxlQnlJb0ZpbGUocGF0dGVybkZpbGUpOworICAgIH0KKworICAgIEZpbGUgZ3JhRmlsZSA9IG5ldyBGaWxlKEZpbGVVdGlsLmdldFRlbXBEaXJlY3RvcnkoKSArIEZpbGUuc2VwYXJhdG9yICsgcm9vdERpciArIEZpbGUuc2VwYXJhdG9yICsgaXRlbU5hbWUpOworCisgICAgd3JpdGVyID0gbmV3IFByaW50V3JpdGVyKG5ldyBGaWxlT3V0cHV0U3RyZWFtKGdyYUZpbGUpKTsKKyAgICB0cnkgeworICAgICAgd3JpdGVyLnByaW50KGl0ZW1SZXByKTsKKyAgICB9CisgICAgZmluYWxseSB7CisgICAgICB3cml0ZXIuY2xvc2UoKTsKKyAgICB9CisKKworCisgICAgTG9jYWxGaWxlU3lzdGVtLmdldEluc3RhbmNlKCkucmVmcmVzaEFuZEZpbmRGaWxlQnlJb0ZpbGUoZ3JhRmlsZSk7CisgICAgRmlsZURvY3VtZW50TWFuYWdlci5nZXRJbnN0YW5jZSgpLnNhdmVBbGxEb2N1bWVudHMoKTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL3JlZmFjdG9yaW5nL1dyYXBSZXR1cm5WYWx1ZVRlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9yZWZhY3RvcmluZy9XcmFwUmV0dXJuVmFsdWVUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGRkMzgwMwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9yZWZhY3RvcmluZy9XcmFwUmV0dXJuVmFsdWVUZXN0LmphdmEKQEAgLTAsMCArMSwxMzEgQEAKKy8qCisgKiBVc2VyOiBhbm5hCisgKiBEYXRlOiAyMC1BdWctMjAwOAorICovCitwYWNrYWdlIGNvbS5pbnRlbGxpai5yZWZhY3RvcmluZzsKKworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLnZmcy5WaXJ0dWFsRmlsZTsKK2ltcG9ydCBjb20uaW50ZWxsaWoucHNpLlBzaUNsYXNzOworaW1wb3J0IGNvbS5pbnRlbGxpai5wc2kuUHNpRmllbGQ7CitpbXBvcnQgY29tLmludGVsbGlqLnBzaS5Qc2lNZXRob2Q7CitpbXBvcnQgY29tLmludGVsbGlqLnBzaS5zZWFyY2guR2xvYmFsU2VhcmNoU2NvcGU7CitpbXBvcnQgY29tLmludGVsbGlqLnJlZmFjdG9yaW5nLndyYXByZXR1cm52YWx1ZS5XcmFwUmV0dXJuVmFsdWVQcm9jZXNzb3I7CitpbXBvcnQgY29tLmludGVsbGlqLkphdmFUZXN0VXRpbDsKK2ltcG9ydCBvcmcuamV0YnJhaW5zLmFubm90YXRpb25zLk5vbk5sczsKKworcHVibGljIGNsYXNzIFdyYXBSZXR1cm5WYWx1ZVRlc3QgZXh0ZW5kcyBNdWx0aUZpbGVUZXN0Q2FzZXsKKyAgQE92ZXJyaWRlCisgIHByb3RlY3RlZCBTdHJpbmcgZ2V0VGVzdERhdGFQYXRoKCkgeworICAgIHJldHVybiBKYXZhVGVzdFV0aWwuZ2V0SmF2YVRlc3REYXRhUGF0aCgpOworICB9CisKKyAgQE92ZXJyaWRlCisgIHByb3RlY3RlZCBTdHJpbmcgZ2V0VGVzdFJvb3QoKSB7CisgICAgcmV0dXJuICIvcmVmYWN0b3Jpbmcvd3JhcFJldHVyblZhbHVlLyI7CisgIH0KKworICBwcml2YXRlIHZvaWQgZG9UZXN0KGZpbmFsIGJvb2xlYW4gZXhpc3RpbmcpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdChleGlzdGluZywgbnVsbCk7CisgIH0KKworICBwcml2YXRlIHZvaWQgZG9UZXN0KGZpbmFsIGJvb2xlYW4gZXhpc3RpbmcsIEBOb25ObHMgU3RyaW5nIGV4Y2VwdGlvbk1lc3NhZ2UpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdChleGlzdGluZywgZXhjZXB0aW9uTWVzc2FnZSwgZmFsc2UpOworICB9CisKKyAgcHJpdmF0ZSB2b2lkIGRvVGVzdChmaW5hbCBib29sZWFuIGV4aXN0aW5nLCBTdHJpbmcgZXhjZXB0aW9uTWVzc2FnZSwgZmluYWwgYm9vbGVhbiBjcmVhdGVJbm5lckNsYXNzKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICB0cnkgeworICAgICAgZG9UZXN0KG5ldyBQZXJmb3JtQWN0aW9uKCkgeworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIHZvaWQgcGVyZm9ybUFjdGlvbihmaW5hbCBWaXJ0dWFsRmlsZSByb290RGlyLCBmaW5hbCBWaXJ0dWFsRmlsZSByb290QWZ0ZXIpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICAgIFBzaUNsYXNzIGFDbGFzcyA9IG15SmF2YUZhY2FkZS5maW5kQ2xhc3MoIlRlc3QiLCBHbG9iYWxTZWFyY2hTY29wZS5wcm9qZWN0U2NvcGUoZ2V0UHJvamVjdCgpKSk7CisKKyAgICAgICAgICBhc3NlcnROb3ROdWxsKCJDbGFzcyBUZXN0IG5vdCBmb3VuZCIsIGFDbGFzcyk7CisKKyAgICAgICAgICBmaW5hbCBQc2lNZXRob2QgbWV0aG9kID0gYUNsYXNzLmZpbmRNZXRob2RzQnlOYW1lKCJmb28iLCBmYWxzZSlbMF07CisKKworCisgICAgICAgICAgQE5vbk5scyBmaW5hbCBTdHJpbmcgd3JhcHBlckNsYXNzTmFtZSA9ICJXcmFwcGVyIjsKKworICAgICAgICAgIGZpbmFsIFBzaUNsYXNzIHdyYXBwZXJDbGFzcyA9IG15SmF2YUZhY2FkZS5maW5kQ2xhc3Mod3JhcHBlckNsYXNzTmFtZSwgR2xvYmFsU2VhcmNoU2NvcGUucHJvamVjdFNjb3BlKGdldFByb2plY3QoKSkpOworCisgICAgICAgICAgYXNzZXJ0VHJ1ZSghZXhpc3RpbmcgfHwgd3JhcHBlckNsYXNzICE9IG51bGwpOworICAgICAgICAgIGZpbmFsIFBzaUZpZWxkIGRlbGVnYXRlRmllbGQgPSBleGlzdGluZyA/IHdyYXBwZXJDbGFzcy5maW5kRmllbGRCeU5hbWUoIm15RmllbGQiLCBmYWxzZSkgOiBudWxsOworICAgICAgICAgIFdyYXBSZXR1cm5WYWx1ZVByb2Nlc3NvciBwcm9jZXNzb3IgPSBuZXcgV3JhcFJldHVyblZhbHVlUHJvY2Vzc29yKHdyYXBwZXJDbGFzc05hbWUsICIiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bGwsIG1ldGhvZCwgZXhpc3RpbmcsIGNyZWF0ZUlubmVyQ2xhc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsZWdhdGVGaWVsZCk7CisgICAgICAgICAgcHJvY2Vzc29yLnJ1bigpOworICAgICAgICAgIC8qTG9jYWxGaWxlU3lzdGVtLmdldEluc3RhbmNlKCkucmVmcmVzaChmYWxzZSk7CisgICAgICAgICAgRmlsZURvY3VtZW50TWFuYWdlci5nZXRJbnN0YW5jZSgpLnNhdmVBbGxEb2N1bWVudHMoKTsqLworICAgICAgICB9CisgICAgICB9KTsKKyAgICB9CisgICAgY2F0Y2ggKEJhc2VSZWZhY3RvcmluZ1Byb2Nlc3Nvci5Db25mbGljdHNJblRlc3RzRXhjZXB0aW9uIGUpIHsKKyAgICAgIGlmIChleGNlcHRpb25NZXNzYWdlICE9IG51bGwpIHsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKGV4Y2VwdGlvbk1lc3NhZ2UsIGUuZ2V0TWVzc2FnZSgpKTsKKyAgICAgICAgcmV0dXJuOworICAgICAgfQorICAgICAgdGhyb3cgZTsKKyAgICB9CisgICAgaWYgKGV4Y2VwdGlvbk1lc3NhZ2UgIT0gbnVsbCkgeworICAgICAgZmFpbCgiQ29uZmxpY3Qgd2FzIG5vdCBmb3VuZCIpOworICAgIH0KKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RTaW1wbGUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoZmFsc2UpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEdlbmVyaWNzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KGZhbHNlKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RJbmNvbnNpc3RlbnRXcmFwcGVyKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KHRydWUsICJFeGlzdGluZyBjbGFzcyBkb2VzIG5vdCBoYXZlIGdldHRlciBmb3Igc2VsZWN0ZWQgZmllbGQiKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RXcmFwcGVyKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KHRydWUpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFN0cmlwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KHRydWUpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdE5vQ29uc3RydWN0b3IoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QodHJ1ZSwgIkV4aXN0aW5nIGNsYXNzIGRvZXMgbm90IGhhdmUgYXBwcm9wcmlhdGUgY29uc3RydWN0b3IiKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RJbm5lckNsYXNzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KGZhbHNlLCBudWxsLCB0cnVlKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RIaWVyYXJjaHkoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoZmFsc2UsIG51bGwsIHRydWUpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEFub255bW91cygpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdCh0cnVlLCBudWxsLCBmYWxzZSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0V3JvbmdGaWVsZEFzc2lnbm1lbnQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QodHJ1ZSwgIkV4aXN0aW5nIGNsYXNzIGRvZXMgbm90IGhhdmUgYXBwcm9wcmlhdGUgY29uc3RydWN0b3IiLCBmYWxzZSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0V3JvbmdGaWVsZFR5cGUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QodHJ1ZSwgIkV4aXN0aW5nIGNsYXNzIGRvZXMgbm90IGhhdmUgYXBwcm9wcmlhdGUgY29uc3RydWN0b3IiLCBmYWxzZSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0U3RhdGljTWV0aG9kSW5uZXJDbGFzcygpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdChmYWxzZSwgbnVsbCwgdHJ1ZSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0UmF3UmV0dXJuVHlwZSgpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdCh0cnVlLCAiRXhpc3RpbmcgY2xhc3MgZG9lcyBub3QgaGF2ZSBhcHByb3ByaWF0ZSBjb25zdHJ1Y3RvciIpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFJldHVybkluc2lkZUxhbWJkYSgpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdChmYWxzZSwgbnVsbCwgdHJ1ZSk7CisgIH0KKyAgCit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL3JlZmFjdG9yaW5nL2NoYW5nZUNsYXNzU2lnbmF0dXJlL0NoYW5nZUNsYXNzU2lnbmF0dXJlVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL3JlZmFjdG9yaW5nL2NoYW5nZUNsYXNzU2lnbmF0dXJlL0NoYW5nZUNsYXNzU2lnbmF0dXJlVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQzY2JjYTkKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovcmVmYWN0b3JpbmcvY2hhbmdlQ2xhc3NTaWduYXR1cmUvQ2hhbmdlQ2xhc3NTaWduYXR1cmVUZXN0LmphdmEKQEAgLTAsMCArMSwxNDggQEAKK3BhY2thZ2UgY29tLmludGVsbGlqLnJlZmFjdG9yaW5nLmNoYW5nZUNsYXNzU2lnbmF0dXJlOworCitpbXBvcnQgY29tLmludGVsbGlqLkphdmFUZXN0VXRpbDsKK2ltcG9ydCBjb20uaW50ZWxsaWouY29kZUluc2lnaHQuVGFyZ2V0RWxlbWVudFV0aWxCYXNlOworaW1wb3J0IGNvbS5pbnRlbGxpai5wc2kuUHNpQ2xhc3M7CitpbXBvcnQgY29tLmludGVsbGlqLnBzaS5Qc2lFbGVtZW50OworaW1wb3J0IGNvbS5pbnRlbGxpai5yZWZhY3RvcmluZy5MaWdodFJlZmFjdG9yaW5nVGVzdENhc2U7CitpbXBvcnQgY29tLmludGVsbGlqLnV0aWwuSW5jb3JyZWN0T3BlcmF0aW9uRXhjZXB0aW9uOworaW1wb3J0IG9yZy5qZXRicmFpbnMuYW5ub3RhdGlvbnMuTm9uTmxzOworaW1wb3J0IG9yZy5qZXRicmFpbnMuYW5ub3RhdGlvbnMuTm90TnVsbDsKKworLyoqCisgKiBAYXV0aG9yIGRzbAorICovCitwdWJsaWMgY2xhc3MgQ2hhbmdlQ2xhc3NTaWduYXR1cmVUZXN0IGV4dGVuZHMgTGlnaHRSZWZhY3RvcmluZ1Rlc3RDYXNlIHsKKyAgQE5vbk5scyBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgREFUQV9QQVRIID0gIi9yZWZhY3RvcmluZy9jaGFuZ2VDbGFzc1NpZ25hdHVyZS8iOworCisgIEBOb3ROdWxsCisgIEBPdmVycmlkZQorICBwcm90ZWN0ZWQgU3RyaW5nIGdldFRlc3REYXRhUGF0aCgpIHsKKyAgICByZXR1cm4gSmF2YVRlc3RVdGlsLmdldEphdmFUZXN0RGF0YVBhdGgoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3ROb1BhcmFtcygpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdChuZXcgR2VuUGFyYW1zKCkgeworICAgICAgQE92ZXJyaWRlCisgICAgICBwdWJsaWMgVHlwZVBhcmFtZXRlckluZm9bXSBnZW4oUHNpQ2xhc3MgYUNsYXNzKSB0aHJvd3MgSW5jb3JyZWN0T3BlcmF0aW9uRXhjZXB0aW9uIHsKKyAgICAgICAgcmV0dXJuIG5ldyBUeXBlUGFyYW1ldGVySW5mb1tdeworICAgICAgICAgIG5ldyBUeXBlUGFyYW1ldGVySW5mbyhhQ2xhc3MsICJUIiwgImphdmEubGFuZy5TdHJpbmciKQorICAgICAgICB9OworICAgICAgfQorICAgIH0pOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEluc3RhbmNlT2YoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QobmV3IEdlblBhcmFtcygpIHsKKyAgICAgIEBPdmVycmlkZQorICAgICAgcHVibGljIFR5cGVQYXJhbWV0ZXJJbmZvW10gZ2VuKFBzaUNsYXNzIGFDbGFzcykgdGhyb3dzIEluY29ycmVjdE9wZXJhdGlvbkV4Y2VwdGlvbiB7CisgICAgICAgIHJldHVybiBuZXcgVHlwZVBhcmFtZXRlckluZm9bXXsKKyAgICAgICAgICBuZXcgVHlwZVBhcmFtZXRlckluZm8oYUNsYXNzLCAiVCIsICJqYXZhLmxhbmcuU3RyaW5nIikKKyAgICAgICAgfTsKKyAgICAgIH0KKyAgICB9KTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RTdWJzdGl0dXRlUGFyYW1JbnNpZGVDbGFzcygpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdChuZXcgR2VuUGFyYW1zKCkgeworICAgICAgQE92ZXJyaWRlCisgICAgICBwdWJsaWMgVHlwZVBhcmFtZXRlckluZm9bXSBnZW4oUHNpQ2xhc3MgYUNsYXNzKSB0aHJvd3MgSW5jb3JyZWN0T3BlcmF0aW9uRXhjZXB0aW9uIHsKKyAgICAgICAgcmV0dXJuIG5ldyBUeXBlUGFyYW1ldGVySW5mb1swXTsKKyAgICAgIH0KKyAgICB9KTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RSZW1vdmVBbGxQYXJhbXMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QobmV3IEdlblBhcmFtcygpIHsKKyAgICAgIEBPdmVycmlkZQorICAgICAgcHVibGljIFR5cGVQYXJhbWV0ZXJJbmZvW10gZ2VuKFBzaUNsYXNzIGFDbGFzcykgeworICAgICAgICByZXR1cm4gbmV3IFR5cGVQYXJhbWV0ZXJJbmZvWzBdOworICAgICAgfQorICAgIH0pOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFJlb3JkZXJQYXJhbXMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QobmV3IEdlblBhcmFtcygpIHsKKyAgICAgIEBPdmVycmlkZQorICAgICAgcHVibGljIFR5cGVQYXJhbWV0ZXJJbmZvW10gZ2VuKFBzaUNsYXNzIGFDbGFzcykgeworICAgICAgICByZXR1cm4gbmV3IFR5cGVQYXJhbWV0ZXJJbmZvW10geworICAgICAgICAgIG5ldyBUeXBlUGFyYW1ldGVySW5mbygxKSwKKyAgICAgICAgICBuZXcgVHlwZVBhcmFtZXRlckluZm8oMCkKKyAgICAgICAgfTsKKyAgICAgIH0KKyAgICB9KTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RBZGRQYXJhbSgpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdChuZXcgR2VuUGFyYW1zKCkgeworICAgICAgQE92ZXJyaWRlCisgICAgICBwdWJsaWMgVHlwZVBhcmFtZXRlckluZm9bXSBnZW4oUHNpQ2xhc3MgYUNsYXNzKSB0aHJvd3MgSW5jb3JyZWN0T3BlcmF0aW9uRXhjZXB0aW9uIHsKKyAgICAgICAgcmV0dXJuIG5ldyBUeXBlUGFyYW1ldGVySW5mb1tdIHsKKyAgICAgICAgICBuZXcgVHlwZVBhcmFtZXRlckluZm8oMCksCisgICAgICAgICAgbmV3IFR5cGVQYXJhbWV0ZXJJbmZvKGFDbGFzcywgIkUiLCAiTDxUPiIpCisgICAgICAgIH07CisgICAgICB9CisgICAgfSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0QWRkT25lRmlyc3QoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QobmV3IEdlblBhcmFtcygpIHsKKyAgICAgIEBPdmVycmlkZQorICAgICAgcHVibGljIFR5cGVQYXJhbWV0ZXJJbmZvW10gZ2VuKFBzaUNsYXNzIGFDbGFzcykgdGhyb3dzIEluY29ycmVjdE9wZXJhdGlvbkV4Y2VwdGlvbiB7CisgICAgICAgIHJldHVybiBuZXcgVHlwZVBhcmFtZXRlckluZm9bXXsKKyAgICAgICAgICBuZXcgVHlwZVBhcmFtZXRlckluZm8oYUNsYXNzLCAiVCIsICJqYXZhLmxhbmcuU3RyaW5nIikKKyAgICAgICAgfTsKKyAgICAgIH0KKyAgICB9LCAiWmVyby5qYXZhIiwgIk9uZVN0cmluZy5qYXZhIik7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0QWRkTWFueUZpcnN0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KG5ldyBHZW5QYXJhbXMoKSB7CisgICAgICBAT3ZlcnJpZGUKKyAgICAgIHB1YmxpYyBUeXBlUGFyYW1ldGVySW5mb1tdIGdlbihQc2lDbGFzcyBhQ2xhc3MpIHRocm93cyBJbmNvcnJlY3RPcGVyYXRpb25FeGNlcHRpb24geworICAgICAgICByZXR1cm4gbmV3IFR5cGVQYXJhbWV0ZXJJbmZvW117CisgICAgICAgICAgbmV3IFR5cGVQYXJhbWV0ZXJJbmZvKGFDbGFzcywgIlUiLCAiU3ViamVjdEZhY2UiKSwKKyAgICAgICAgICBuZXcgVHlwZVBhcmFtZXRlckluZm8oYUNsYXNzLCAiViIsICJqYXZhLnV0aWwuU2V0PGphdmEubGFuZy5PYmplY3Q+IikKKyAgICAgICAgfTsKKyAgICAgIH0KKyAgICB9LCAiWmVyby5qYXZhIiwgIlR3b1N1YmplY3RGYWNlU2V0T2JqZWN0LmphdmEiKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RSZW1vdmVPbmVMYXN0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KG5ldyBHZW5QYXJhbXMoKSB7CisgICAgICBAT3ZlcnJpZGUKKyAgICAgIHB1YmxpYyBUeXBlUGFyYW1ldGVySW5mb1tdIGdlbihQc2lDbGFzcyBhQ2xhc3MpIHRocm93cyBJbmNvcnJlY3RPcGVyYXRpb25FeGNlcHRpb24geworICAgICAgICByZXR1cm4gbmV3IFR5cGVQYXJhbWV0ZXJJbmZvWzBdOworICAgICAgfQorICAgIH0sICJPbmVTdHJpbmcuamF2YSIsICJaZXJvLmphdmEiKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RSZW1vdmVNYW55TGFzdCgpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdChuZXcgR2VuUGFyYW1zKCkgeworICAgICAgQE92ZXJyaWRlCisgICAgICBwdWJsaWMgVHlwZVBhcmFtZXRlckluZm9bXSBnZW4oUHNpQ2xhc3MgYUNsYXNzKSB0aHJvd3MgSW5jb3JyZWN0T3BlcmF0aW9uRXhjZXB0aW9uIHsKKyAgICAgICAgcmV0dXJuIG5ldyBUeXBlUGFyYW1ldGVySW5mb1swXTsKKyAgICAgIH0KKyAgICB9LCAiVHdvU3ViamVjdEZhY2VTZXRPYmplY3QuamF2YSIsICJaZXJvLmphdmEiKTsKKyAgfQorCisgIHByaXZhdGUgdm9pZCBkb1Rlc3QoR2VuUGFyYW1zIGdlbikgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgQE5vbk5scyBmaW5hbCBTdHJpbmcgZmlsZVBhdGhCZWZvcmUgPSBnZXRUZXN0TmFtZShmYWxzZSkgKyAiLmphdmEiOworICAgIEBOb25ObHMgZmluYWwgU3RyaW5nIGZpbGVQYXRoQWZ0ZXIgPSBnZXRUZXN0TmFtZShmYWxzZSkgKyAiLmphdmEuYWZ0ZXIiOworICAgIGRvVGVzdChnZW4sIGZpbGVQYXRoQmVmb3JlLCBmaWxlUGF0aEFmdGVyKTsKKyAgfQorCisgIHByaXZhdGUgdm9pZCBkb1Rlc3QoR2VuUGFyYW1zIGdlbiwgQE5vbk5scyBTdHJpbmcgZmlsZVBhdGhCZWZvcmUsIEBOb25ObHMgU3RyaW5nIGZpbGVQYXRoQWZ0ZXIpIHRocm93cyBFeGNlcHRpb24geworICAgIGZpbmFsIFN0cmluZyBmaWxlUGF0aCA9IERBVEFfUEFUSCArIGZpbGVQYXRoQmVmb3JlOworICAgIGNvbmZpZ3VyZUJ5RmlsZShmaWxlUGF0aCk7CisgICAgZmluYWwgUHNpRWxlbWVudCB0YXJnZXRFbGVtZW50ID0gVGFyZ2V0RWxlbWVudFV0aWxCYXNlLmZpbmRUYXJnZXRFbGVtZW50KGdldEVkaXRvcigpLCBUYXJnZXRFbGVtZW50VXRpbEJhc2UuRUxFTUVOVF9OQU1FX0FDQ0VQVEVEKTsKKyAgICBhc3NlcnRUcnVlKCI8Y2FyZXQ+IGlzIG5vdCBvbiBjbGFzcyBuYW1lIiwgdGFyZ2V0RWxlbWVudCBpbnN0YW5jZW9mIFBzaUNsYXNzKTsKKyAgICBQc2lDbGFzcyBhQ2xhc3MgPSAoUHNpQ2xhc3MpdGFyZ2V0RWxlbWVudDsKKyAgICBuZXcgQ2hhbmdlQ2xhc3NTaWduYXR1cmVQcm9jZXNzb3IoZ2V0UHJvamVjdCgpLCBhQ2xhc3MsIGdlbi5nZW4oYUNsYXNzKSkucnVuKCk7CisgICAgY2hlY2tSZXN1bHRCeUZpbGUoREFUQV9QQVRIICsgZmlsZVBhdGhBZnRlcik7CisgIH0KKworICBwcml2YXRlIGludGVyZmFjZSBHZW5QYXJhbXMgeworICAgIFR5cGVQYXJhbWV0ZXJJbmZvW10gZ2VuKFBzaUNsYXNzIGFDbGFzcykgdGhyb3dzIEluY29ycmVjdE9wZXJhdGlvbkV4Y2VwdGlvbjsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL3JlZmFjdG9yaW5nL2NvbnZlcnRUb0luc3RhbmNlTWV0aG9kL0NvbnZlcnRUb0luc3RhbmNlTWV0aG9kVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL3JlZmFjdG9yaW5nL2NvbnZlcnRUb0luc3RhbmNlTWV0aG9kL0NvbnZlcnRUb0luc3RhbmNlTWV0aG9kVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFmOTQzZTYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovcmVmYWN0b3JpbmcvY29udmVydFRvSW5zdGFuY2VNZXRob2QvQ29udmVydFRvSW5zdGFuY2VNZXRob2RUZXN0LmphdmEKQEAgLTAsMCArMSw2NCBAQAorcGFja2FnZSBjb20uaW50ZWxsaWoucmVmYWN0b3JpbmcuY29udmVydFRvSW5zdGFuY2VNZXRob2Q7CisKK2ltcG9ydCBjb20uaW50ZWxsaWouSmF2YVRlc3RVdGlsOworaW1wb3J0IGNvbS5pbnRlbGxpai5jb2RlSW5zaWdodC5UYXJnZXRFbGVtZW50VXRpbEJhc2U7CitpbXBvcnQgY29tLmludGVsbGlqLnBzaS5Qc2lFbGVtZW50OworaW1wb3J0IGNvbS5pbnRlbGxpai5wc2kuUHNpTWV0aG9kOworaW1wb3J0IGNvbS5pbnRlbGxpai5wc2kuUHNpTW9kaWZpZXI7CitpbXBvcnQgY29tLmludGVsbGlqLnJlZmFjdG9yaW5nLkJhc2VSZWZhY3RvcmluZ1Byb2Nlc3NvcjsKK2ltcG9ydCBjb20uaW50ZWxsaWoucmVmYWN0b3JpbmcuTGlnaHRSZWZhY3RvcmluZ1Rlc3RDYXNlOworaW1wb3J0IGNvbS5pbnRlbGxpai51dGlsLlZpc2liaWxpdHlVdGlsOworaW1wb3J0IG9yZy5qZXRicmFpbnMuYW5ub3RhdGlvbnMuTm90TnVsbDsKKworLyoqCisgKiBAYXV0aG9yIGRzbAorICovCitwdWJsaWMgY2xhc3MgQ29udmVydFRvSW5zdGFuY2VNZXRob2RUZXN0IGV4dGVuZHMgTGlnaHRSZWZhY3RvcmluZ1Rlc3RDYXNlIHsKKyAgQE5vdE51bGwKKyAgQE92ZXJyaWRlCisgIHByb3RlY3RlZCBTdHJpbmcgZ2V0VGVzdERhdGFQYXRoKCkgeworICAgIHJldHVybiBKYXZhVGVzdFV0aWwuZ2V0SmF2YVRlc3REYXRhUGF0aCgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFNpbXBsZSgpIHRocm93cyBFeGNlcHRpb24geyBkb1Rlc3QoMCk7IH0KKworICBwdWJsaWMgdm9pZCB0ZXN0SW50ZXJmYWNlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7IGRvVGVzdCgxKTsgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RJbnRlcmZhY2VQcml2YXRlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7IGRvVGVzdCgxKTsgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RJbnRlcmZhY2UyKCkgdGhyb3dzIEV4Y2VwdGlvbiB7IGRvVGVzdCgwKTsgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RJbnRlcmZhY2UzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7IGRvVGVzdCgwKTsgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RUeXBlUGFyYW1ldGVyKCkgdGhyb3dzIEV4Y2VwdGlvbiB7IGRvVGVzdCgwKTsgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RJbnRlcmZhY2VUeXBlUGFyYW1ldGVyKCkgdGhyb3dzIEV4Y2VwdGlvbiB7IGRvVGVzdCgwKTsgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RKYXZhZG9jUGFyYW1ldGVyKCkgdGhyb3dzIEV4Y2VwdGlvbiB7IGRvVGVzdCgwKTsgfQorICBwdWJsaWMgdm9pZCB0ZXN0VmlzaWJpbGl0eUNvbmZsaWN0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgdHJ5IHsKKyAgICAgIGRvVGVzdCgwLCBQc2lNb2RpZmllci5QUklWQVRFKTsKKyAgICAgIGZhaWwoIkNvbmZsaWN0IHdhcyBub3QgZGV0ZWN0ZWQiKTsKKyAgICB9CisgICAgY2F0Y2ggKEJhc2VSZWZhY3RvcmluZ1Byb2Nlc3Nvci5Db25mbGljdHNJblRlc3RzRXhjZXB0aW9uIGUpIHsKKyAgICAgIGFzc2VydEVxdWFscygiTWV0aG9kIDxiPjxjb2RlPlRlc3QuZm9vKEJhcik8L2NvZGU+PC9iPiBpcyBwcml2YXRlIGFuZCB3aWxsIG5vdCBiZSBhY2Nlc3NpYmxlIGZyb20gaW5zdGFuY2UgaW5pdGlhbGl6ZXIgb2YgY2xhc3MgY2xhc3MgPGI+PGNvZGU+VGVzdDwvY29kZT48L2I+LiIsIGUuZ2V0TWVzc2FnZSgpKTsgCisgICAgfQorICB9CisKKyAgcHJpdmF0ZSB2b2lkIGRvVGVzdChmaW5hbCBpbnQgdGFyZ2V0UGFyYW1ldGVyKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QodGFyZ2V0UGFyYW1ldGVyLCBWaXNpYmlsaXR5VXRpbC5FU0NBTEFURV9WSVNJQklMSVRZKTsKKyAgfQorCisgIHByaXZhdGUgdm9pZCBkb1Rlc3QoZmluYWwgaW50IHRhcmdldFBhcmFtZXRlciwgZmluYWwgU3RyaW5nIHZpc2liaWxpdHkpIHRocm93cyBFeGNlcHRpb24geworICAgIGZpbmFsIFN0cmluZyBmaWxlUGF0aCA9ICIvcmVmYWN0b3JpbmcvY29udmVydFRvSW5zdGFuY2VNZXRob2QvIiArIGdldFRlc3ROYW1lKGZhbHNlKSArICIuamF2YSI7CisgICAgY29uZmlndXJlQnlGaWxlKGZpbGVQYXRoKTsKKyAgICBmaW5hbCBQc2lFbGVtZW50IHRhcmdldEVsZW1lbnQgPSBUYXJnZXRFbGVtZW50VXRpbEJhc2UuZmluZFRhcmdldEVsZW1lbnQoZ2V0RWRpdG9yKCksIFRhcmdldEVsZW1lbnRVdGlsQmFzZS5FTEVNRU5UX05BTUVfQUNDRVBURUQpOworICAgIGFzc2VydFRydWUoIjxjYXJldD4gaXMgbm90IG9uIG1ldGhvZCBuYW1lIiwgdGFyZ2V0RWxlbWVudCBpbnN0YW5jZW9mIFBzaU1ldGhvZCk7CisgICAgUHNpTWV0aG9kIG1ldGhvZCA9IChQc2lNZXRob2QpIHRhcmdldEVsZW1lbnQ7CisgICAgbmV3IENvbnZlcnRUb0luc3RhbmNlTWV0aG9kUHJvY2Vzc29yKGdldFByb2plY3QoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kLCBtZXRob2QuZ2V0UGFyYW1ldGVyTGlzdCgpLmdldFBhcmFtZXRlcnMoKVt0YXJnZXRQYXJhbWV0ZXJdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aXNpYmlsaXR5KS5ydW4oKTsKKyAgICBjaGVja1Jlc3VsdEJ5RmlsZShmaWxlUGF0aCArICIuYWZ0ZXIiKTsKKworICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovcmVmYWN0b3JpbmcvaW5saW5lL0lubGluZUNvbnN0YW50RmllbGRUZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovcmVmYWN0b3JpbmcvaW5saW5lL0lubGluZUNvbnN0YW50RmllbGRUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTcwMTk1YgotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9yZWZhY3RvcmluZy9pbmxpbmUvSW5saW5lQ29uc3RhbnRGaWVsZFRlc3QuamF2YQpAQCAtMCwwICsxLDU3IEBACitwYWNrYWdlIGNvbS5pbnRlbGxpai5yZWZhY3RvcmluZy5pbmxpbmU7CisKK2ltcG9ydCBjb20uaW50ZWxsaWouSmF2YVRlc3RVdGlsOworaW1wb3J0IGNvbS5pbnRlbGxpai5jb2RlSW5zaWdodC5UYXJnZXRFbGVtZW50VXRpbEJhc2U7CitpbXBvcnQgY29tLmludGVsbGlqLnBzaS5Qc2lFbGVtZW50OworaW1wb3J0IGNvbS5pbnRlbGxpai5wc2kuUHNpRmllbGQ7CitpbXBvcnQgY29tLmludGVsbGlqLnBzaS5Qc2lSZWZlcmVuY2U7CitpbXBvcnQgY29tLmludGVsbGlqLnBzaS5Qc2lSZWZlcmVuY2VFeHByZXNzaW9uOworaW1wb3J0IGNvbS5pbnRlbGxpai5yZWZhY3RvcmluZy5MaWdodFJlZmFjdG9yaW5nVGVzdENhc2U7CitpbXBvcnQgb3JnLmpldGJyYWlucy5hbm5vdGF0aW9ucy5Ob25ObHM7CitpbXBvcnQgb3JnLmpldGJyYWlucy5hbm5vdGF0aW9ucy5Ob3ROdWxsOworCitwdWJsaWMgY2xhc3MgSW5saW5lQ29uc3RhbnRGaWVsZFRlc3QgZXh0ZW5kcyBMaWdodFJlZmFjdG9yaW5nVGVzdENhc2UgeworICBATm90TnVsbAorICBAT3ZlcnJpZGUKKyAgcHJvdGVjdGVkIFN0cmluZyBnZXRUZXN0RGF0YVBhdGgoKSB7CisgICAgcmV0dXJuIEphdmFUZXN0VXRpbC5nZXRKYXZhVGVzdERhdGFQYXRoKCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0UXVhbGlmaWVkRXhwcmVzc2lvbigpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdCgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFF1YWxpZmllZENvbnN0YW50RXhwcmVzc2lvbigpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdCgpOworICB9CisKKyAgIHB1YmxpYyB2b2lkIHRlc3RRdWFsaWZpZWRDb25zdGFudEV4cHJlc3Npb25SZXBsYWNlZFdpdGhBbm90aGVyT25lKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KCk7CisgIH0KKyAgCisgIHB1YmxpYyB2b2lkIHRlc3RTdGF0aWNhbGx5SW1wb3J0ZWRRdWFsaWZpZWRFeHByZXNzaW9uKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0Q2FzdFdoZW5MYW1iZGFBc1F1YWxpZmllcigpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdCgpOworICB9CisKKyAgcHJpdmF0ZSB2b2lkIGRvVGVzdCgpIHRocm93cyBFeGNlcHRpb24geworICAgIFN0cmluZyBuYW1lID0gZ2V0VGVzdE5hbWUoZmFsc2UpOworICAgIEBOb25ObHMgU3RyaW5nIGZpbGVOYW1lID0gIi9yZWZhY3RvcmluZy9pbmxpbmVDb25zdGFudEZpZWxkLyIgKyBuYW1lICsgIi5qYXZhIjsKKyAgICBjb25maWd1cmVCeUZpbGUoZmlsZU5hbWUpOworICAgIHBlcmZvcm1BY3Rpb24oKTsKKyAgICBjaGVja1Jlc3VsdEJ5RmlsZShmaWxlTmFtZSArICIuYWZ0ZXIiKTsKKyAgfQorCisgIHByaXZhdGUgdm9pZCBwZXJmb3JtQWN0aW9uKCkgeworICAgIFBzaUVsZW1lbnQgZWxlbWVudCA9IFRhcmdldEVsZW1lbnRVdGlsQmFzZQorICAgICAgLmZpbmRUYXJnZXRFbGVtZW50KG15RWRpdG9yLCBUYXJnZXRFbGVtZW50VXRpbEJhc2UuRUxFTUVOVF9OQU1FX0FDQ0VQVEVEIHwgVGFyZ2V0RWxlbWVudFV0aWxCYXNlLlJFRkVSRU5DRURfRUxFTUVOVF9BQ0NFUFRFRCk7CisgICAgZmluYWwgUHNpUmVmZXJlbmNlIHJlZiA9IG15RmlsZS5maW5kUmVmZXJlbmNlQXQobXlFZGl0b3IuZ2V0Q2FyZXRNb2RlbCgpLmdldE9mZnNldCgpKTsKKyAgICBQc2lSZWZlcmVuY2VFeHByZXNzaW9uIHJlZkV4cHIgPSByZWYgaW5zdGFuY2VvZiBQc2lSZWZlcmVuY2VFeHByZXNzaW9uID8gKFBzaVJlZmVyZW5jZUV4cHJlc3Npb24pcmVmIDogbnVsbDsKKyAgICBhc3NlcnRUcnVlKGVsZW1lbnQgaW5zdGFuY2VvZiBQc2lGaWVsZCk7CisgICAgUHNpRmllbGQgZmllbGQgPSAoUHNpRmllbGQpZWxlbWVudDsKKyAgICBuZXcgSW5saW5lQ29uc3RhbnRGaWVsZFByb2Nlc3NvcihmaWVsZCwgZ2V0UHJvamVjdCgpLCByZWZFeHByLCBmYWxzZSkucnVuKCk7CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovcmVmYWN0b3JpbmcvaW5saW5lL0lubGluZUxpYnJhcnlNZXRob2RUZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovcmVmYWN0b3JpbmcvaW5saW5lL0lubGluZUxpYnJhcnlNZXRob2RUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmJiZWUxYQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9yZWZhY3RvcmluZy9pbmxpbmUvSW5saW5lTGlicmFyeU1ldGhvZFRlc3QuamF2YQpAQCAtMCwwICsxLDc4IEBACisvKgorICogQ29weXJpZ2h0IDIwMDAtMjAxMiBKZXRCcmFpbnMgcy5yLm8uCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworcGFja2FnZSBjb20uaW50ZWxsaWoucmVmYWN0b3JpbmcuaW5saW5lOworCitpbXBvcnQgY29tLmludGVsbGlqLkphdmFUZXN0VXRpbDsKK2ltcG9ydCBjb20uaW50ZWxsaWouaWRlLmhpZ2hsaWdodGVyLkphdmFGaWxlVHlwZTsKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS5hcHBsaWNhdGlvbi5BcHBsaWNhdGlvbk1hbmFnZXI7CitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkudmZzLm5ld3Zmcy5pbXBsLlZpcnR1YWxGaWxlU3lzdGVtRW50cnk7CitpbXBvcnQgY29tLmludGVsbGlqLnBzaS4qOworaW1wb3J0IGNvbS5pbnRlbGxpai5yZWZhY3RvcmluZy5SZWZhY3RvcmluZ1Rlc3RDYXNlOworaW1wb3J0IGNvbS5pbnRlbGxpai5yZWZhY3RvcmluZy51dGlsLklubGluZVV0aWw7CitpbXBvcnQgb3JnLmpldGJyYWlucy5hbm5vdGF0aW9ucy5Ob25ObHM7CisKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworCisvKioKKyAqIEBhdXRob3IgYW5uYQorICogQHNpbmNlIDExLzQvMTEKKyAqLworcHVibGljIGNsYXNzIElubGluZUxpYnJhcnlNZXRob2RUZXN0IGV4dGVuZHMgUmVmYWN0b3JpbmdUZXN0Q2FzZSB7CisgIEBPdmVycmlkZQorICBwcm90ZWN0ZWQgU3RyaW5nIGdldFRlc3REYXRhUGF0aCgpIHsKKyAgICByZXR1cm4gSmF2YVRlc3RVdGlsLmdldEphdmFUZXN0RGF0YVBhdGgoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RJbmxpbmVBbGxJblByb2plY3RGcm9tTGlicmFyeSgpIHRocm93cyBFeGNlcHRpb24geworICAgIGNvbmZpZ3VyZUJ5VGV4dChKYXZhRmlsZVR5cGUuSU5TVEFOQ0UsICJwYWNrYWdlIG15Y29tcGFueTtcbiIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwdWJsaWMgY2xhc3MgRmlsZSB7XG4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIHB1YmxpYyBzdGF0aWMgRmlsZSBjcmVhdGVUZW1wRmlsZShTdHJpbmcgcHIsIFN0cmluZyBwb3N0Zml4KXtyZXR1cm4gY3JlYXRlVGVtcEZpbGUocHIsIHBvc3RmaXgsIG51bGwpO31cbiIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgcHVibGljIHN0YXRpYyBGaWxlIGNyZWF0ZVRlbXBGaWxlKFN0cmluZyBwciwgU3RyaW5nIHBvc3RmaXgsIFN0cmluZyBiYXNlKXtyZXR1cm4gbmV3IEZpbGUoKTt9XG4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAifSIpOworICAgIEBOb25ObHMgU3RyaW5nIGZpbGVOYW1lID0gIi9yZWZhY3RvcmluZy9pbmxpbmVNZXRob2QvIiArIGdldFRlc3ROYW1lKGZhbHNlKSArICIuamF2YSI7CisgICAgY29uZmlndXJlQnlGaWxlKGZpbGVOYW1lKTsKKworICAgIFBzaUNsYXNzIGZpbGVDbGFzcyA9IGdldEphdmFGYWNhZGUoKS5maW5kQ2xhc3MoIm15Y29tcGFueS5GaWxlIik7CisgICAgYXNzZXJ0Tm90TnVsbChmaWxlQ2xhc3MpOworICAgIGZpbmFsIFBzaUZpbGUgZmlsZSA9IGZpbGVDbGFzcy5nZXRDb250YWluaW5nRmlsZSgpOworICAgIEFwcGxpY2F0aW9uTWFuYWdlci5nZXRBcHBsaWNhdGlvbigpLnJ1bldyaXRlQWN0aW9uKG5ldyBSdW5uYWJsZSgpIHsKKyAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAoKFZpcnR1YWxGaWxlU3lzdGVtRW50cnkpZmlsZS5nZXRWaXJ0dWFsRmlsZSgpKS5zZXRXcml0YWJsZShmYWxzZSk7CisgICAgICAgIH0KKyAgICAgICAgY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbihlKTsKKyAgICAgICAgfQorICAgICAgfQorICAgIH0pOworCisgICAgUHNpRWxlbWVudCBlbGVtZW50ID0gbnVsbDsKKyAgICBQc2lNZXRob2RbXSBjcmVhdGVUZW1wRmlsZXMgPSBmaWxlQ2xhc3MuZmluZE1ldGhvZHNCeU5hbWUoImNyZWF0ZVRlbXBGaWxlIiwgZmFsc2UpOworICAgIGZvciAoUHNpTWV0aG9kIGNyZWF0ZVRlbXBGaWxlIDogY3JlYXRlVGVtcEZpbGVzKSB7CisgICAgICBpZiAoY3JlYXRlVGVtcEZpbGUuZ2V0UGFyYW1ldGVyTGlzdCgpLmdldFBhcmFtZXRlcnNDb3VudCgpID09IDIpIHsKKyAgICAgICAgZWxlbWVudCA9IGNyZWF0ZVRlbXBGaWxlOworICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICB9CisgICAgYXNzZXJ0Tm90TnVsbChlbGVtZW50KTsKKyAgICBQc2lNZXRob2QgbWV0aG9kID0gKFBzaU1ldGhvZCllbGVtZW50OworICAgIGZpbmFsIGJvb2xlYW4gY29uZGl0aW9uID0gSW5saW5lTWV0aG9kUHJvY2Vzc29yLmNoZWNrQmFkUmV0dXJucyhtZXRob2QpICYmICFJbmxpbmVVdGlsLmFsbFVzYWdlc0FyZVRhaWxDYWxscyhtZXRob2QpOworICAgIGFzc2VydEZhbHNlKCJCYWQgcmV0dXJucyBmb3VuZCIsIGNvbmRpdGlvbik7CisgICAgZmluYWwgSW5saW5lTWV0aG9kUHJvY2Vzc29yIHByb2Nlc3NvciA9IG5ldyBJbmxpbmVNZXRob2RQcm9jZXNzb3IoZ2V0UHJvamVjdCgpLCBtZXRob2QsIG51bGwsIG15RWRpdG9yLCBmYWxzZSk7CisgICAgcHJvY2Vzc29yLnJ1bigpOworICAgIGNoZWNrUmVzdWx0QnlGaWxlKGZpbGVOYW1lICsgIi5hZnRlciIpOworICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovcmVmYWN0b3JpbmcvaW5saW5lL0lubGluZUxvY2FsVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL3JlZmFjdG9yaW5nL2lubGluZS9JbmxpbmVMb2NhbFRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZmZmNTQ0Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL3JlZmFjdG9yaW5nL2lubGluZS9JbmxpbmVMb2NhbFRlc3QuamF2YQpAQCAtMCwwICsxLDI1MiBAQAorcGFja2FnZSBjb20uaW50ZWxsaWoucmVmYWN0b3JpbmcuaW5saW5lOworCitpbXBvcnQgY29tLmludGVsbGlqLkphdmFUZXN0VXRpbDsKK2ltcG9ydCBjb20uaW50ZWxsaWouY29kZUluc2lnaHQuVGFyZ2V0RWxlbWVudFV0aWxCYXNlOworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLmVkaXRvci5FZGl0b3I7CitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkucHJvamVjdC5Qcm9qZWN0OworaW1wb3J0IGNvbS5pbnRlbGxpai5wc2kuUHNpRWxlbWVudDsKK2ltcG9ydCBjb20uaW50ZWxsaWoucHNpLlBzaUxvY2FsVmFyaWFibGU7CitpbXBvcnQgY29tLmludGVsbGlqLnBzaS5Qc2lSZWZlcmVuY2U7CitpbXBvcnQgY29tLmludGVsbGlqLnBzaS5Qc2lSZWZlcmVuY2VFeHByZXNzaW9uOworaW1wb3J0IGNvbS5pbnRlbGxpai5yZWZhY3RvcmluZy5SZWZhY3RvcmluZ0J1bmRsZTsKK2ltcG9ydCBjb20uaW50ZWxsaWoudGVzdEZyYW1ld29yay5MaWdodENvZGVJbnNpZ2h0VGVzdENhc2U7CitpbXBvcnQgb3JnLmpldGJyYWlucy5hbm5vdGF0aW9ucy5Ob3ROdWxsOworCisvKioKKyAqIEBhdXRob3IgdmVuCisgKi8KK3B1YmxpYyBjbGFzcyBJbmxpbmVMb2NhbFRlc3QgZXh0ZW5kcyBMaWdodENvZGVJbnNpZ2h0VGVzdENhc2UgeworICBATm90TnVsbAorICBAT3ZlcnJpZGUKKyAgcHJvdGVjdGVkIFN0cmluZyBnZXRUZXN0RGF0YVBhdGgoKSB7CisgICAgcmV0dXJuIEphdmFUZXN0VXRpbC5nZXRKYXZhVGVzdERhdGFQYXRoKCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0SW5mZXJlbmNlICgpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdChmYWxzZSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0UXVhbGlmaWVyICgpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdChmYWxzZSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0SW5uZXJJbm5lckNsYXNzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KHRydWUpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdElERUFERVY5NTAgKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KGZhbHNlKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3ROb1JlZHVuZGFudENhc3RzICgpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdChmYWxzZSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0SWRlYURFVjk0MDQgKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KGZhbHNlKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RJREVBREVWMTIyNDQgKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KGZhbHNlKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RJREVBREVWMTAzNzYgKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KHRydWUpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdElERUFERVYxMzE1MSAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QodHJ1ZSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0QXJyYXlJbml0aWFsaXplcigpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdChmYWxzZSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0Tm9uV3JpdGVVbmFyeUV4cHJlc3Npb24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QodHJ1ZSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0TmV3RXhwcmVzc2lvbigpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdChmYWxzZSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0TmV3RXhwcmVzc2lvbldpdGhEaWFtb25kKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KGZhbHNlKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3ROZXdFeHByZXNzaW9uV2l0aFByZXNlcnZlZERpYW1vbmQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoZmFsc2UpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEF1Z21lbnRlZEFzc2lnbm1lbnQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBTdHJpbmcgZXhjZXB0aW9uID0gbnVsbDsKKyAgICB0cnkgeworICAgICAgZG9UZXN0KGZhbHNlKTsKKyAgICB9CisgICAgY2F0Y2goUnVudGltZUV4Y2VwdGlvbiBleCkgeworICAgICAgZXhjZXB0aW9uID0gZXguZ2V0TWVzc2FnZSgpOworICAgIH0KKyAgICBTdHJpbmcgZXJyb3IgPSBSZWZhY3RvcmluZ0J1bmRsZS5nZXRDYW5ub3RSZWZhY3Rvck1lc3NhZ2UoUmVmYWN0b3JpbmdCdW5kbGUubWVzc2FnZSgidmFyaWFibGUuaXMuYWNjZXNzZWQuZm9yLndyaXRpbmciLCAidGV4dCIpKTsKKyAgICBhc3NlcnRFcXVhbHMoZXJyb3IsIGV4Y2VwdGlvbik7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0VXNlZEluSW5uZXJDbGFzcygpIHRocm93cyBFeGNlcHRpb24geyAgICAgICAvLyBJREVBREVWLTI4Nzg2CisgICAgZG9UZXN0KHRydWUpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFVzZWRJbklubmVyQ2xhc3MyKCkgdGhyb3dzIEV4Y2VwdGlvbiB7ICAgICAgIC8vIElERUFERVYtMjg3ODYKKyAgICBkb1Rlc3QodHJ1ZSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0VXNlZEluSW5uZXJDbGFzczMoKSB0aHJvd3MgRXhjZXB0aW9uIHsgICAgICAgLy8gSURFQURFVi0yODc4NgorICAgIGRvVGVzdCh0cnVlKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RVc2VkSW5Jbm5lckNsYXNzNCgpIHRocm93cyBFeGNlcHRpb24geyAgICAgICAvLyBJREVBREVWLTI4Nzg2CisgICAgZG9UZXN0KHRydWUpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEFub3RoZXJEZWZpbml0aW9uVXNlZCgpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdCh0cnVlLCAiQ2Fubm90IHBlcmZvcm0gcmVmYWN0b3JpbmcuXG5Bbm90aGVyIHZhcmlhYmxlICdiYXInIGRlZmluaXRpb24gaXMgdXNlZCB0b2dldGhlciB3aXRoIGlubGluZWQgb25lLiIpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEFub3RoZXJEZWZpbml0aW9uVXNlZDEoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoZmFsc2UsICJDYW5ub3QgcGVyZm9ybSByZWZhY3RvcmluZy5cbkFub3RoZXIgdmFyaWFibGUgJ2JhcicgZGVmaW5pdGlvbiBpcyB1c2VkIHRvZ2V0aGVyIHdpdGggaW5saW5lZCBvbmUuIik7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0VHlwZUFyZ3VtZW50c1N0YXRpYygpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdCh0cnVlKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RUeXBlQXJndW1lbnRzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KHRydWUpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFdpbGRjYXJkKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KHRydWUpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFN0YXRpY0ltcG9ydGVkKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KHRydWUpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFF1YWxpZmllZCgpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdCh0cnVlKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RBc3NpZ25tZW50VG9BcnJheUVsZW1lbnQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QodHJ1ZSwgIkNhbm5vdCBwZXJmb3JtIHJlZmFjdG9yaW5nLlxuIiArCisgICAgICAgICAgICAgICAgICJWYXJpYWJsZSAnYXJyJyBpcyBhY2Nlc3NlZCBmb3Igd3JpdGluZy4iKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RBcnJheUluZGV4KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KHRydWUpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdE5vbkVxQXNzaWdubWVudCgpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdChmYWxzZSwgIkNhbm5vdCBwZXJmb3JtIHJlZmFjdG9yaW5nLlxuIiArCisgICAgICAgICAgICAgICAgICAiVmFyaWFibGUgJ3gnIGlzIGFjY2Vzc2VkIGZvciB3cml0aW5nLiIpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdElubGluZUZyb21UcnlDYXRjaCgpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdCh0cnVlLCAiVW5hYmxlIHRvIGlubGluZSBvdXRzaWRlIHRyeS9jYXRjaCBzdGF0ZW1lbnQiKTsKKyAgfQorICAKKyAgcHVibGljIHZvaWQgdGVzdElubGluZUZyb21UcnlDYXRjaEF2YWlsYWJsZSgpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdCh0cnVlKTsKKyAgfQorICAKKyAgcHVibGljIHZvaWQgdGVzdENvbmRpdGlvbkV4cHIoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QodHJ1ZSk7CisgIH0KKyAgCisgIHB1YmxpYyB2b2lkIHRlc3RMYW1iZGFFeHByKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KHRydWUpOworICB9CisgIAorICBwdWJsaWMgdm9pZCB0ZXN0TGFtYmRhRXhwckFzUmVmUXVhbGlmaWVyKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KHRydWUpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdE1ldGhvZFJlZkFzUmVmUXVhbGlmaWVyKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KHRydWUpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdExvY2FsVmFySW5zaWRlTGFtYmRhQm9keSgpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdCh0cnVlKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RMb2NhbFZhckluc2lkZUxhbWJkYUJvZHkxKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KHRydWUpOworICB9CisgIAorICBwdWJsaWMgdm9pZCB0ZXN0TG9jYWxWYXJJbnNpZGVMYW1iZGFCb2R5MigpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdCh0cnVlKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RDYXN0QXJvdW5kTGFtYmRhKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KHRydWUpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdE5vQ2FzdEFyb3VuZExhbWJkYSgpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdCh0cnVlKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RVbmNoZWNrZWRDYXN0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KHRydWUpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFVuY2hlY2tlZENhc3ROb3ROZWVkZWQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QodHJ1ZSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0Q2FzdE5vdE5lZWRlZCgpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdCh0cnVlKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RMb2NhbFZhckluc2lkZUxhbWJkYUJvZHlXcml0ZVVzYWdlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KHRydWUsICJDYW5ub3QgcGVyZm9ybSByZWZhY3RvcmluZy5cbiIgKworICAgICAgICAgICAgICAgICAiVmFyaWFibGUgJ2hlbGxvJyBpcyBhY2Nlc3NlZCBmb3Igd3JpdGluZy4iKTsKKyAgfQorCisgIHByaXZhdGUgdm9pZCBkb1Rlc3QoZmluYWwgYm9vbGVhbiBpbmxpbmVEZWYsIFN0cmluZyBjb25mbGljdE1lc3NhZ2UpIHRocm93cyBFeGNlcHRpb24geworICAgIHRyeSB7CisgICAgICBkb1Rlc3QoaW5saW5lRGVmKTsKKyAgICAgIGZhaWwoIkNvbmZsaWN0IHdhcyBub3QgZGV0ZWN0ZWQiKTsKKyAgICB9CisgICAgY2F0Y2ggKFJ1bnRpbWVFeGNlcHRpb24gZSkgeworICAgICAgYXNzZXJ0RXF1YWxzKGUuZ2V0TWVzc2FnZSgpLCBjb25mbGljdE1lc3NhZ2UpOworICAgIH0KKyAgfQorCisKKyAgcHJpdmF0ZSB2b2lkIGRvVGVzdChmaW5hbCBib29sZWFuIGlubGluZURlZikgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgU3RyaW5nIG5hbWUgPSBnZXRUZXN0TmFtZShmYWxzZSk7CisgICAgU3RyaW5nIGZpbGVOYW1lID0gIi9yZWZhY3RvcmluZy9pbmxpbmVMb2NhbC8iICsgbmFtZSArICIuamF2YSI7CisgICAgY29uZmlndXJlQnlGaWxlKGZpbGVOYW1lKTsKKyAgICBpZiAoIWlubGluZURlZikgeworICAgICAgcGVyZm9ybUlubGluZShnZXRQcm9qZWN0KCksIG15RWRpdG9yKTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICBwZXJmb3JtRGVmSW5saW5lKGdldFByb2plY3QoKSwgbXlFZGl0b3IpOworICAgIH0KKyAgICBjaGVja1Jlc3VsdEJ5RmlsZShmaWxlTmFtZSArICIuYWZ0ZXIiKTsKKyAgfQorCisgIHB1YmxpYyBzdGF0aWMgdm9pZCBwZXJmb3JtSW5saW5lKFByb2plY3QgcHJvamVjdCwgRWRpdG9yIGVkaXRvcikgeworICAgIFBzaUVsZW1lbnQgZWxlbWVudCA9IFRhcmdldEVsZW1lbnRVdGlsQmFzZQorICAgICAgLmZpbmRUYXJnZXRFbGVtZW50KGVkaXRvciwgVGFyZ2V0RWxlbWVudFV0aWxCYXNlLkVMRU1FTlRfTkFNRV9BQ0NFUFRFRCB8IFRhcmdldEVsZW1lbnRVdGlsQmFzZS5SRUZFUkVOQ0VEX0VMRU1FTlRfQUNDRVBURUQpOworICAgIGFzc2VydFRydWUoZWxlbWVudCBpbnN0YW5jZW9mIFBzaUxvY2FsVmFyaWFibGUpOworCisgICAgSW5saW5lTG9jYWxIYW5kbGVyLmludm9rZShwcm9qZWN0LCBlZGl0b3IsIChQc2lMb2NhbFZhcmlhYmxlKWVsZW1lbnQsIG51bGwpOworICB9CisKKyAgcHVibGljIHN0YXRpYyB2b2lkIHBlcmZvcm1EZWZJbmxpbmUoUHJvamVjdCBwcm9qZWN0LCBFZGl0b3IgZWRpdG9yKSB7CisgICAgUHNpUmVmZXJlbmNlIHJlZmVyZW5jZSA9IFRhcmdldEVsZW1lbnRVdGlsQmFzZS5maW5kUmVmZXJlbmNlKGVkaXRvcik7CisgICAgYXNzZXJ0VHJ1ZShyZWZlcmVuY2UgaW5zdGFuY2VvZiBQc2lSZWZlcmVuY2VFeHByZXNzaW9uKTsKKyAgICBmaW5hbCBQc2lFbGVtZW50IGxvY2FsID0gcmVmZXJlbmNlLnJlc29sdmUoKTsKKyAgICBhc3NlcnRUcnVlKGxvY2FsIGluc3RhbmNlb2YgUHNpTG9jYWxWYXJpYWJsZSk7CisKKyAgICBJbmxpbmVMb2NhbEhhbmRsZXIuaW52b2tlKHByb2plY3QsIGVkaXRvciwgKFBzaUxvY2FsVmFyaWFibGUpbG9jYWwsIChQc2lSZWZlcmVuY2VFeHByZXNzaW9uKXJlZmVyZW5jZSk7CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9yZWZhY3RvcmluZy9pbmxpbmUvSW5saW5lTWV0aG9kTXVsdGlmaWxlVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL3JlZmFjdG9yaW5nL2lubGluZS9JbmxpbmVNZXRob2RNdWx0aWZpbGVUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWYxOWZjMwotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9yZWZhY3RvcmluZy9pbmxpbmUvSW5saW5lTWV0aG9kTXVsdGlmaWxlVGVzdC5qYXZhCkBAIC0wLDAgKzEsNjYgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwMC0yMDEyIEpldEJyYWlucyBzLnIuby4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCitwYWNrYWdlIGNvbS5pbnRlbGxpai5yZWZhY3RvcmluZy5pbmxpbmU7CisKK2ltcG9ydCBjb20uaW50ZWxsaWouSmF2YVRlc3RVdGlsOworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLnZmcy5Mb2NhbEZpbGVTeXN0ZW07CitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkudmZzLlZpcnR1YWxGaWxlOworaW1wb3J0IGNvbS5pbnRlbGxpai5wc2kuUHNpQ2xhc3M7CitpbXBvcnQgY29tLmludGVsbGlqLnBzaS5Qc2lFbGVtZW50OworaW1wb3J0IGNvbS5pbnRlbGxpai5wc2kuUHNpTWV0aG9kOworaW1wb3J0IGNvbS5pbnRlbGxpai5wc2kuaW1wbC5zb3VyY2UuUG9zdHByb2Nlc3NSZWZvcm1hdHRpbmdBc3BlY3Q7CitpbXBvcnQgY29tLmludGVsbGlqLnBzaS5zZWFyY2guUHJvamVjdFNjb3BlOworaW1wb3J0IGNvbS5pbnRlbGxpai5yZWZhY3RvcmluZy5Nb2NrSW5saW5lTWV0aG9kT3B0aW9uczsKK2ltcG9ydCBjb20uaW50ZWxsaWoucmVmYWN0b3JpbmcuUmVmYWN0b3JpbmdUZXN0Q2FzZTsKK2ltcG9ydCBjb20uaW50ZWxsaWoucmVmYWN0b3JpbmcudXRpbC5JbmxpbmVVdGlsOworaW1wb3J0IGNvbS5pbnRlbGxpai50ZXN0RnJhbWV3b3JrLklkZWFUZXN0VXRpbDsKK2ltcG9ydCBjb20uaW50ZWxsaWoudGVzdEZyYW1ld29yay5Qc2lUZXN0VXRpbDsKKworaW1wb3J0IGphdmEuaW8uRmlsZTsKKworCitwdWJsaWMgY2xhc3MgSW5saW5lTWV0aG9kTXVsdGlmaWxlVGVzdCBleHRlbmRzIFJlZmFjdG9yaW5nVGVzdENhc2UgeworCisgIHByaXZhdGUgU3RyaW5nIGdldFJvb3QoKSB7CisgICAgcmV0dXJuIEphdmFUZXN0VXRpbC5nZXRKYXZhVGVzdERhdGFQYXRoKCkgKyAiL3JlZmFjdG9yaW5nL2lubGluZU1ldGhvZC9tdWx0aWZpbGUvIiArIGdldFRlc3ROYW1lKHRydWUpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFJlbW92ZVN0YXRpY0ltcG9ydHMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoIkZvbyIsICJmb28iKTsKKyAgfQorCisgIHByaXZhdGUgdm9pZCBkb1Rlc3QoU3RyaW5nIGNsYXNzTmFtZSwgU3RyaW5nIG1ldGhvZE5hbWUpIHRocm93cyBFeGNlcHRpb24geworICAgIFN0cmluZyByb290QmVmb3JlID0gZ2V0Um9vdCgpICsgIi9iZWZvcmUiOworICAgIFBzaVRlc3RVdGlsLnJlbW92ZUFsbFJvb3RzKG15TW9kdWxlLCBJZGVhVGVzdFV0aWwuZ2V0TW9ja0pkazE3KCkpOworICAgIGZpbmFsIFZpcnR1YWxGaWxlIHJvb3REaXIgPSBQc2lUZXN0VXRpbC5jcmVhdGVUZXN0UHJvamVjdFN0cnVjdHVyZShteVByb2plY3QsIG15TW9kdWxlLCByb290QmVmb3JlLCBteUZpbGVzVG9EZWxldGUpOworICAgIFBzaUNsYXNzIGFDbGFzcyA9IG15SmF2YUZhY2FkZS5maW5kQ2xhc3MoY2xhc3NOYW1lLCBQcm9qZWN0U2NvcGUuZ2V0QWxsU2NvcGUobXlQcm9qZWN0KSk7CisgICAgYXNzZXJ0VHJ1ZShhQ2xhc3MgIT0gbnVsbCk7CisgICAgUHNpRWxlbWVudCBlbGVtZW50ID0gYUNsYXNzLmZpbmRNZXRob2RzQnlOYW1lKG1ldGhvZE5hbWUsIGZhbHNlKVswXTsKKyAgICBhc3NlcnRUcnVlKGVsZW1lbnQgaW5zdGFuY2VvZiBQc2lNZXRob2QpOworICAgIFBzaU1ldGhvZCBtZXRob2QgPSAoUHNpTWV0aG9kKWVsZW1lbnQ7CisgICAgZmluYWwgYm9vbGVhbiBjb25kaXRpb24gPSBJbmxpbmVNZXRob2RQcm9jZXNzb3IuY2hlY2tCYWRSZXR1cm5zKG1ldGhvZCkgJiYgIUlubGluZVV0aWwuYWxsVXNhZ2VzQXJlVGFpbENhbGxzKG1ldGhvZCk7CisgICAgYXNzZXJ0RmFsc2UoIkJhZCByZXR1cm5zIGZvdW5kIiwgY29uZGl0aW9uKTsKKworICAgIElubGluZU9wdGlvbnMgb3B0aW9ucyA9IG5ldyBNb2NrSW5saW5lTWV0aG9kT3B0aW9ucygpOworICAgIGZpbmFsIElubGluZU1ldGhvZFByb2Nlc3NvciBwcm9jZXNzb3IgPSBuZXcgSW5saW5lTWV0aG9kUHJvY2Vzc29yKGdldFByb2plY3QoKSwgbWV0aG9kLCBudWxsLCBteUVkaXRvciwgb3B0aW9ucy5pc0lubGluZVRoaXNPbmx5KCkpOworICAgIHByb2Nlc3Nvci5ydW4oKTsKKworICAgIFN0cmluZyByb290QWZ0ZXIgPSBnZXRSb290KCkgKyAiL2FmdGVyIjsKKyAgICBWaXJ0dWFsRmlsZSByb290RGlyMiA9IExvY2FsRmlsZVN5c3RlbS5nZXRJbnN0YW5jZSgpLmZpbmRGaWxlQnlQYXRoKHJvb3RBZnRlci5yZXBsYWNlKEZpbGUuc2VwYXJhdG9yQ2hhciwgJy8nKSk7CisgICAgbXlQcm9qZWN0LmdldENvbXBvbmVudChQb3N0cHJvY2Vzc1JlZm9ybWF0dGluZ0FzcGVjdC5jbGFzcykuZG9Qb3N0cG9uZWRGb3JtYXR0aW5nKCk7CisgICAgSWRlYVRlc3RVdGlsLmFzc2VydERpcmVjdG9yaWVzRXF1YWwocm9vdERpcjIsIHJvb3REaXIsIElkZWFUZXN0VXRpbC5DVlNfRklMRV9GSUxURVIpOworICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovcmVmYWN0b3JpbmcvaW5saW5lL0lubGluZU1ldGhvZFRlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9yZWZhY3RvcmluZy9pbmxpbmUvSW5saW5lTWV0aG9kVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk4YTI2ODUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovcmVmYWN0b3JpbmcvaW5saW5lL0lubGluZU1ldGhvZFRlc3QuamF2YQpAQCAtMCwwICsxLDI5NiBAQAorLyoKKyAqIENvcHlyaWdodCAyMDAwLTIwMTIgSmV0QnJhaW5zIHMuci5vLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KK3BhY2thZ2UgY29tLmludGVsbGlqLnJlZmFjdG9yaW5nLmlubGluZTsKKworaW1wb3J0IGNvbS5pbnRlbGxpai5KYXZhVGVzdFV0aWw7CitpbXBvcnQgY29tLmludGVsbGlqLmNvZGVJbnNpZ2h0LlRhcmdldEVsZW1lbnRVdGlsQmFzZTsKK2ltcG9ydCBjb20uaW50ZWxsaWoucHNpLlBzaUVsZW1lbnQ7CitpbXBvcnQgY29tLmludGVsbGlqLnBzaS5Qc2lNZXRob2Q7CitpbXBvcnQgY29tLmludGVsbGlqLnBzaS5Qc2lSZWZlcmVuY2U7CitpbXBvcnQgY29tLmludGVsbGlqLnBzaS5Qc2lSZWZlcmVuY2VFeHByZXNzaW9uOworaW1wb3J0IGNvbS5pbnRlbGxpai5yZWZhY3RvcmluZy5CYXNlUmVmYWN0b3JpbmdQcm9jZXNzb3I7CitpbXBvcnQgY29tLmludGVsbGlqLnJlZmFjdG9yaW5nLkxpZ2h0UmVmYWN0b3JpbmdUZXN0Q2FzZTsKK2ltcG9ydCBjb20uaW50ZWxsaWoucmVmYWN0b3JpbmcuTW9ja0lubGluZU1ldGhvZE9wdGlvbnM7CitpbXBvcnQgY29tLmludGVsbGlqLnJlZmFjdG9yaW5nLnV0aWwuSW5saW5lVXRpbDsKK2ltcG9ydCBvcmcuamV0YnJhaW5zLmFubm90YXRpb25zLk5vbk5sczsKK2ltcG9ydCBvcmcuamV0YnJhaW5zLmFubm90YXRpb25zLk5vdE51bGw7CisKK3B1YmxpYyBjbGFzcyBJbmxpbmVNZXRob2RUZXN0IGV4dGVuZHMgTGlnaHRSZWZhY3RvcmluZ1Rlc3RDYXNlIHsKKyAgQE5vdE51bGwKKyAgQE92ZXJyaWRlCisgIHByb3RlY3RlZCBTdHJpbmcgZ2V0VGVzdERhdGFQYXRoKCkgeworICAgIHJldHVybiBKYXZhVGVzdFV0aWwuZ2V0SmF2YVRlc3REYXRhUGF0aCgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdElubGluZVBhcm1zKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0SW5saW5lV2l0aFF1YWxpZmllcigpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdCgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdElubGluZVdpdGhRdWFsaWZpZXJGcm9tU3VwZXIoKSB0aHJvd3MgRXhjZXB0aW9uIHsgZG9UZXN0KCk7IH0KKyAgcHVibGljIHZvaWQgdGVzdFRyeSgpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdCgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFRyeVN5bmNocm9uaXplZCgpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdCgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFN0YXRpY1N5bmNocm9uaXplZCgpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdCgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFN1cGVySW5zaWRlSGllcmFyY2h5KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0U2lkZUVmZmVjdCgpIHRocm93cyBFeGNlcHRpb24geyBkb1Rlc3QoKTsgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RJbmxpbmVXaXRoVHJ5KCkgdGhyb3dzIEV4Y2VwdGlvbiB7IGRvVGVzdCgpOyB9CisKKyAgcHVibGljIHZvaWQgdGVzdFZvaWRXaXRoUmV0dXJuKCkgdGhyb3dzIEV4Y2VwdGlvbiB7IGRvVGVzdCgpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RWb2lkV2l0aFJldHVybjEoKSB0aHJvd3MgRXhjZXB0aW9uIHsgZG9UZXN0KCk7IH0KKworICBwdWJsaWMgdm9pZCB0ZXN0U2NyMTA4ODQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoKTsKKyAgfQorICBwdWJsaWMgdm9pZCB0ZXN0RmluYWxQYXJhbWV0ZXJzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7IGRvVGVzdCgpOyB9CisgIHB1YmxpYyB2b2lkIHRlc3RGaW5hbFBhcmFtZXRlcnMxKCkgdGhyb3dzIEV4Y2VwdGlvbiB7IGRvVGVzdCgpOyB9CisKKyAgcHVibGljIHZvaWQgdGVzdFNjcjEzODMxKCkgdGhyb3dzIEV4Y2VwdGlvbiB7IGRvVGVzdCgpOyB9CisKKyAgcHVibGljIHZvaWQgdGVzdE5hbWVDbGFzaCgpIHRocm93cyBFeGNlcHRpb24geyBkb1Rlc3QoKTsgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RBcnJheUFjY2VzcygpIHRocm93cyBFeGNlcHRpb24geyBkb1Rlc3QoKTsgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RDb25mbGljdGluZ0ZpZWxkKCkgdGhyb3dzIEV4Y2VwdGlvbiB7IGRvVGVzdCgpOyB9CisKKyAgcHVibGljIHZvaWQgdGVzdENhbGxJbkZvcigpIHRocm93cyBFeGNlcHRpb24geyBkb1Rlc3QoKTsgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RTQ1IyMDY1NSgpIHRocm93cyBFeGNlcHRpb24geyBkb1Rlc3QoKTsgfQorCisKKyAgcHVibGljIHZvaWQgdGVzdEZpZWxkSW5pdGlhbGl6ZXIoKSB0aHJvd3MgRXhjZXB0aW9uIHsgZG9UZXN0KCk7IH0KKworICBwdWJsaWMgdm9pZCB0ZXN0TWV0aG9kQ2FsbEluT3RoZXJBbm9ueW1vdXNPcklubmVyKCkgdGhyb3dzIEV4Y2VwdGlvbiB7IGRvVGVzdCgpOyB9CisKKyAgcHVibGljIHZvaWQgdGVzdFN0YXRpY0ZpZWxkSW5pdGlhbGl6ZXIoKSB0aHJvd3MgRXhjZXB0aW9uIHsgZG9UZXN0KCk7IH0KKyAgcHVibGljIHZvaWQgdGVzdFNDUjIyNjQ0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7IGRvVGVzdCgpOyB9CisKKyAgcHVibGljIHZvaWQgdGVzdENhbGxVbmRlcklmKCkgdGhyb3dzIEV4Y2VwdGlvbiB7IGRvVGVzdCgpOyB9CisKKyAgLy9UaGlzIGdpdmVzIGV4dHJhICdyZXN1bHQnIGxvY2FsIHZhcmlhYmxlLCBjdXJyZW50bHkgSSBkb24ndCBzZWUgYSB3YXkgdG8gY29wZSB3aXRoIGl0LCB0b2RvOiB0aGluayBhYm91dCBhZGRpb25hbCBpbmxpbmUgcG9zc2liaWxpdGllcworICAvL3B1YmxpYyB2b2lkIHRlc3RMb2NhbFZhcmlhYmxlUmVzdWx0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7IGRvVGVzdCgpOyB9CisKKyAgcHVibGljIHZvaWQgdGVzdFNDUjMxMDkzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7IGRvVGVzdCgpOyB9CisKKyAgcHVibGljIHZvaWQgdGVzdFNDUjM3NzQyKCkgdGhyb3dzIEV4Y2VwdGlvbiB7IGRvVGVzdCgpOyB9CisgIAorICBwdWJsaWMgdm9pZCB0ZXN0Q2hhaW5pbmdDb25zdHJ1Y3RvcigpIHRocm93cyBFeGNlcHRpb24geyBkb1Rlc3QoKTsgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RDaGFpbmluZ0NvbnN0cnVjdG9yMSgpIHRocm93cyBFeGNlcHRpb24geyBkb1Rlc3QoKTsgfQorCisgIHB1YmxpYyB2b2lkIHRlc3ROZXN0ZWRDYWxsKCkgdGhyb3dzIEV4Y2VwdGlvbiB7IGRvVGVzdCgpOyB9CisKKyAgcHVibGljIHZvaWQgdGVzdElERUFERVYzNjcyKCkgdGhyb3dzIEV4Y2VwdGlvbiB7IGRvVGVzdCgpOyB9CisKKyAgcHVibGljIHZvaWQgdGVzdElERUFERVY1ODA2KCkgdGhyb3dzIEV4Y2VwdGlvbiB7IGRvVGVzdCgpOyB9CisKKyAgcHVibGljIHZvaWQgdGVzdElERUFERVY2ODA3KCkgdGhyb3dzIEV4Y2VwdGlvbiB7IGRvVGVzdCgpOyB9CisKKyAgcHVibGljIHZvaWQgdGVzdElERUFERVYxMjYxNigpIHRocm93cyBFeGNlcHRpb24geyBkb1Rlc3QoKTsgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RWYXJhcmdzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7IGRvVGVzdCgpOyB9CisKKyAgcHVibGljIHZvaWQgdGVzdFZhcmFyZ3MxKCkgdGhyb3dzIEV4Y2VwdGlvbiB7IGRvVGVzdCgpOyB9CisKKyAgcHVibGljIHZvaWQgdGVzdEZsYXRWYXJhcmdzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7ZG9UZXN0KCk7fQorICBwdWJsaWMgdm9pZCB0ZXN0RmxhdFZhcmFyZ3MxKCkgdGhyb3dzIEV4Y2VwdGlvbiB7ZG9UZXN0KCk7fQorCisgIHB1YmxpYyB2b2lkIHRlc3RFbnVtQ29uc3RydWN0b3IoKSB0aHJvd3MgRXhjZXB0aW9uIHsgZG9UZXN0KCk7IH0KKworICBwdWJsaWMgdm9pZCB0ZXN0RW51bUNvbnN0YW50Q29uc3RydWN0b3JQYXJhbWV0ZXIoKSB0aHJvd3MgRXhjZXB0aW9uIHsgIC8vIElERUFERVYtMjYxMzMKKyAgICBkb1Rlc3QoKTsgCisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0RW51bUNvbnN0YW50Q29uc3RydWN0b3JQYXJhbWV0ZXJDb21wbGV4KCkgdGhyb3dzIEV4Y2VwdGlvbiB7ICAvLyBJREVBREVWLTI2MTMzCisgICAgZG9UZXN0KCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0RW51bUNvbnN0YW50Q29uc3RydWN0b3JQYXJhbWV0ZXJDb21wbGV4MigpIHRocm93cyBFeGNlcHRpb24geyAgLy8gSURFQURFVi0yNjEzMworICAgIGRvVGVzdCgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdENvbnN0YW50SW5DaGFpbmluZ0NvbnN0cnVjdG9yKCkgdGhyb3dzIEV4Y2VwdGlvbiB7ICAgLy8gSURFQURFVi0yODEzNgorICAgIGRvVGVzdCgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFJlcGxhY2VQYXJhbWV0ZXJXaXRoQXJndW1lbnRGb3JDb25zdHJ1Y3RvcigpIHRocm93cyBFeGNlcHRpb24geyAgIC8vIElERUFERVYtMjM2NTIKKyAgICBkb1Rlc3QoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RUYWlsQ2FsbFJldHVybigpIHRocm93cyBFeGNlcHRpb24geyAgLy8gSURFQURFVi0yNzk4MworICAgIGRvVGVzdCgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFRhaWxDYWxsU2ltcGxlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7ICAvLyBJREVBREVWLTI3OTgzCisgICAgZG9UZXN0KCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0VGFpbENvbW1lbnQoKSB0aHJvd3MgRXhjZXB0aW9uIHsgICAvL0lERUFERVYtMzM2MzgKKyAgICBkb1Rlc3QoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RJbmZlcnJlZFR5cGUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RSZXBsYWNlR2VuZXJpY3NJbnNpZGUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RTdGF0aWNNZXRob2RXaXRob3V0UGFyYW1zKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0V2l0aFN1cGVySW5zaWRlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0UmF3U3Vic3RpdHV0aW9uKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KCk7CisgIH0KKyAgCisgIHB1YmxpYyB2b2lkIHRlc3RTdWJzdGl0dXRpb24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RQYXJhbU5hbWVDb25mbGljdHNXaXRoTG9jYWxWYXIoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RBcnJheVR5cGVJbmZlcmVuY2VGcm9tVmFyYXJncygpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdCgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFN1cGVyTWV0aG9kSW5Bbm9ueW1vdXNDbGFzcygpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdCgpOworICB9CisgIAorICBwdWJsaWMgdm9pZCB0ZXN0SW5saW5lQW5vbnltb3VzQ2xhc3NXaXRoUHJpdmF0ZU1ldGhvZEluc2lkZSgpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdCgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdENoYWluZWRDb25zdHJ1Y3RvcigpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdElubGluZVRoaXNPbmx5KCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0Q2hhaW5lZENvbnN0cnVjdG9yMSgpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdCgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdE1ldGhvZFVzZWRJbkphdmFkb2MoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3RDb25mbGljdCgiSW5saW5lZCBtZXRob2QgaXMgdXNlZCBpbiBqYXZhZG9jIik7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0Tm90QVN0YXRlbWVudCgpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdENvbmZsaWN0KCJJbmxpbmVkIHJlc3VsdCB3b3VsZCBjb250YWluIHBhcnNlIGVycm9ycyIpOworICB9CisKKworICBwdWJsaWMgdm9pZCB0ZXN0SW5TdXBlckNhbGwoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3RDb25mbGljdCgiSW5saW5lIGNhbm5vdCBiZSBhcHBsaWVkIHRvIG11bHRpbGluZSBtZXRob2QgaW4gY29uc3RydWN0b3IgY2FsbCIpOworICB9CisKKyAgcHJpdmF0ZSB2b2lkIGRvVGVzdENvbmZsaWN0KGZpbmFsIFN0cmluZyBjb25mbGljdCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgdHJ5IHsKKyAgICAgIGRvVGVzdCgpOworICAgICAgZmFpbCgiQ29uZmxpY3Qgd2FzIG5vdCBkZXRlY3RlZCIpOworICAgIH0KKyAgICBjYXRjaCAoQmFzZVJlZmFjdG9yaW5nUHJvY2Vzc29yLkNvbmZsaWN0c0luVGVzdHNFeGNlcHRpb24gZSkgeworICAgICAgYXNzZXJ0RXF1YWxzKGNvbmZsaWN0LCBlLmdldE1lc3NhZ2UoKSk7CisgICAgfQorICB9CisKKyAgcHVibGljIHZvaWQgdGVzdElubGluZVJ1bm5hYmxlUnVuKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0SW5saW5lVGhpc09ubHkoKTsKKyAgfQorICAKKyAgcHVibGljIHZvaWQgdGVzdE9uZUxpbmVMYW1iZGFWb2lkQ29tcGF0aWJsZVRvQmxvY2soKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3RJbmxpbmVUaGlzT25seSgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdE9uZUxpbmVMYW1iZGFWYWx1ZUNvbXBhdGlibGVUb0Jsb2NrKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0SW5saW5lVGhpc09ubHkoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RPbmVMaW5lTGFtYmRhVm9pZENvbXBhdGlibGVPbmVMaW5lKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0SW5saW5lVGhpc09ubHkoKTsKKyAgfQorIAorICBwdWJsaWMgdm9pZCB0ZXN0T25lTGluZUxhbWJkYVZhbHVlQ29tcGF0aWJsZU9uZUxpbmUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3RJbmxpbmVUaGlzT25seSgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdE5vbkNvZGVVc2FnZSgpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdCh0cnVlKTsKKyAgfQorCisgIHByaXZhdGUgdm9pZCBkb1Rlc3RJbmxpbmVUaGlzT25seSgpIHsKKyAgICBATm9uTmxzIFN0cmluZyBmaWxlTmFtZSA9ICIvcmVmYWN0b3JpbmcvaW5saW5lTWV0aG9kLyIgKyBnZXRUZXN0TmFtZShmYWxzZSkgKyAiLmphdmEiOworICAgIGNvbmZpZ3VyZUJ5RmlsZShmaWxlTmFtZSk7CisgICAgcGVyZm9ybUFjdGlvbihuZXcgTW9ja0lubGluZU1ldGhvZE9wdGlvbnMoKXsKKyAgICAgIEBPdmVycmlkZQorICAgICAgcHVibGljIGJvb2xlYW4gaXNJbmxpbmVUaGlzT25seSgpIHsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICB9CisgICAgfSwgZmFsc2UpOworICAgIGNoZWNrUmVzdWx0QnlGaWxlKGZpbGVOYW1lICsgIi5hZnRlciIpOworICB9CisKKyAgcHJpdmF0ZSB2b2lkIGRvVGVzdCgpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdChmYWxzZSk7CisgIH0KKworICBwcml2YXRlIHZvaWQgZG9UZXN0KGZpbmFsIGJvb2xlYW4gbm9uQ29kZSkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgU3RyaW5nIG5hbWUgPSBnZXRUZXN0TmFtZShmYWxzZSk7CisgICAgQE5vbk5scyBTdHJpbmcgZmlsZU5hbWUgPSAiL3JlZmFjdG9yaW5nL2lubGluZU1ldGhvZC8iICsgbmFtZSArICIuamF2YSI7CisgICAgY29uZmlndXJlQnlGaWxlKGZpbGVOYW1lKTsKKyAgICBwZXJmb3JtQWN0aW9uKG5vbkNvZGUpOworICAgIGNoZWNrUmVzdWx0QnlGaWxlKGZpbGVOYW1lICsgIi5hZnRlciIpOworICB9CisKKyAgcHJpdmF0ZSB2b2lkIHBlcmZvcm1BY3Rpb24oZmluYWwgYm9vbGVhbiBub25Db2RlKSB7CisgICAgcGVyZm9ybUFjdGlvbihuZXcgTW9ja0lubGluZU1ldGhvZE9wdGlvbnMoKSwgbm9uQ29kZSk7CisgIH0KKworICBwcml2YXRlIHZvaWQgcGVyZm9ybUFjdGlvbihmaW5hbCBJbmxpbmVPcHRpb25zIG9wdGlvbnMsIGZpbmFsIGJvb2xlYW4gbm9uQ29kZSkgeworICAgIFBzaUVsZW1lbnQgZWxlbWVudCA9IFRhcmdldEVsZW1lbnRVdGlsQmFzZQorICAgICAgLmZpbmRUYXJnZXRFbGVtZW50KG15RWRpdG9yLCBUYXJnZXRFbGVtZW50VXRpbEJhc2UuRUxFTUVOVF9OQU1FX0FDQ0VQVEVEIHwgVGFyZ2V0RWxlbWVudFV0aWxCYXNlLlJFRkVSRU5DRURfRUxFTUVOVF9BQ0NFUFRFRCk7CisgICAgZmluYWwgUHNpUmVmZXJlbmNlIHJlZiA9IG15RmlsZS5maW5kUmVmZXJlbmNlQXQobXlFZGl0b3IuZ2V0Q2FyZXRNb2RlbCgpLmdldE9mZnNldCgpKTsKKyAgICBQc2lSZWZlcmVuY2VFeHByZXNzaW9uIHJlZkV4cHIgPSByZWYgaW5zdGFuY2VvZiBQc2lSZWZlcmVuY2VFeHByZXNzaW9uID8gKFBzaVJlZmVyZW5jZUV4cHJlc3Npb24pcmVmIDogbnVsbDsKKyAgICBhc3NlcnRUcnVlKGVsZW1lbnQgaW5zdGFuY2VvZiBQc2lNZXRob2QpOworICAgIFBzaU1ldGhvZCBtZXRob2QgPSAoUHNpTWV0aG9kKWVsZW1lbnQ7CisgICAgZmluYWwgYm9vbGVhbiBjb25kaXRpb24gPSBJbmxpbmVNZXRob2RQcm9jZXNzb3IuY2hlY2tCYWRSZXR1cm5zKG1ldGhvZCkgJiYgIUlubGluZVV0aWwuYWxsVXNhZ2VzQXJlVGFpbENhbGxzKG1ldGhvZCk7CisgICAgYXNzZXJ0RmFsc2UoIkJhZCByZXR1cm5zIGZvdW5kIiwgY29uZGl0aW9uKTsKKyAgICBmaW5hbCBJbmxpbmVNZXRob2RQcm9jZXNzb3IgcHJvY2Vzc29yID0KKyAgICAgIG5ldyBJbmxpbmVNZXRob2RQcm9jZXNzb3IoZ2V0UHJvamVjdCgpLCBtZXRob2QsIHJlZkV4cHIsIG15RWRpdG9yLCBvcHRpb25zLmlzSW5saW5lVGhpc09ubHkoKSwgbm9uQ29kZSwgbm9uQ29kZSk7CisgICAgcHJvY2Vzc29yLnJ1bigpOworICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovcmVmYWN0b3JpbmcvaW5saW5lL0lubGluZVBhcmFtZXRlclRlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9yZWZhY3RvcmluZy9pbmxpbmUvSW5saW5lUGFyYW1ldGVyVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI5ZDg1ZjEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovcmVmYWN0b3JpbmcvaW5saW5lL0lubGluZVBhcmFtZXRlclRlc3QuamF2YQpAQCAtMCwwICsxLDMwMSBAQAorcGFja2FnZSBjb20uaW50ZWxsaWoucmVmYWN0b3JpbmcuaW5saW5lOworCitpbXBvcnQgY29tLmludGVsbGlqLkphdmFUZXN0VXRpbDsKK2ltcG9ydCBjb20uaW50ZWxsaWouY29kZUluc2lnaHQuVGFyZ2V0RWxlbWVudFV0aWxCYXNlOworaW1wb3J0IGNvbS5pbnRlbGxpai5wc2kuUHNpRWxlbWVudDsKK2ltcG9ydCBjb20uaW50ZWxsaWoucmVmYWN0b3JpbmcuQmFzZVJlZmFjdG9yaW5nUHJvY2Vzc29yOworaW1wb3J0IGNvbS5pbnRlbGxpai5yZWZhY3RvcmluZy5MaWdodFJlZmFjdG9yaW5nVGVzdENhc2U7CitpbXBvcnQgY29tLmludGVsbGlqLnJlZmFjdG9yaW5nLnV0aWwuQ29tbW9uUmVmYWN0b3JpbmdVdGlsOworaW1wb3J0IG9yZy5qZXRicmFpbnMuYW5ub3RhdGlvbnMuTm9uTmxzOworaW1wb3J0IG9yZy5qZXRicmFpbnMuYW5ub3RhdGlvbnMuTm90TnVsbDsKKworLyoqCisgKiBAYXV0aG9yIHlvbGUKKyAqLworCitwdWJsaWMgY2xhc3MgSW5saW5lUGFyYW1ldGVyVGVzdCBleHRlbmRzIExpZ2h0UmVmYWN0b3JpbmdUZXN0Q2FzZSB7CisgIEBOb3ROdWxsCisgIEBPdmVycmlkZQorICBwcm90ZWN0ZWQgU3RyaW5nIGdldFRlc3REYXRhUGF0aCgpIHsKKyAgICByZXR1cm4gSmF2YVRlc3RVdGlsLmdldEphdmFUZXN0RGF0YVBhdGgoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RTYW1lVmFsdWUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QodHJ1ZSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0TnVsbFZhbHVlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KHRydWUpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdENvbnN0cnVjdG9yQ2FsbCgpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdCh0cnVlKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RTdGF0aWNGaW5hbEZpZWxkKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KHRydWUpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFJlZklkZW50aWNhbCgpIHRocm93cyBFeGNlcHRpb24geworICAgICBkb1Rlc3QodHJ1ZSk7CisgICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFJlZklkZW50aWNhbE5vTG9jYWwoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgZG9UZXN0KGZhbHNlKTsKKyAgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0UmVmTG9jYWxDb25zdGFudEluaXRpYWxpemVyKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgIGRvVGVzdChmYWxzZSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0UmVmTG9jYWxXaXRoTG9jYWwoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgZG9UZXN0KGZhbHNlKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RSZWZNZXRob2QoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgZG9UZXN0KHRydWUpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFJlZk1ldGhvZE9uTG9jYWwoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgZG9UZXN0KGZhbHNlKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RSZWZGaW5hbExvY2FsKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgIGRvVGVzdCh0cnVlKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RSZWZTdGF0aWNGaWVsZCgpIHRocm93cyBFeGNlcHRpb24geworICAgICBkb1Rlc3QodHJ1ZSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0UmVmRmluYWxMb2NhbEluaXRpYWxpemVkV2l0aE1ldGhvZCgpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdChmYWxzZSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0UmVmU2VsZkZpZWxkKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KGZhbHNlKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RSZWZTdGF0aWNNZXRob2QoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QodHJ1ZSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0UmVmT3V0ZXJUaGlzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgdHJ5IHsKKyAgICAgIGRvVGVzdChmYWxzZSk7CisgICAgfQorICAgIGNhdGNoIChCYXNlUmVmYWN0b3JpbmdQcm9jZXNzb3IuQ29uZmxpY3RzSW5UZXN0c0V4Y2VwdGlvbiBlKSB7CisgICAgICBhc3NlcnRFcXVhbHMoIlBhcmFtZXRlciBpbml0aWFsaXplciBkZXBlbmRzIG9uIHRoaXMgd2hpY2ggaXMgbm90IGF2YWlsYWJsZSBpbnNpZGUgdGhlIG1ldGhvZCBhbmQgY2Fubm90IGJlIGlubGluZWQiLCBlLmdldE1lc3NhZ2UoKSk7CisgICAgfQorICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFJlZlRoaXMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoZmFsc2UpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFJlZlF1YWxpZmllZFRoaXMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoZmFsc2UpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFJlZlNhbWVOb25GaW5hbEZpZWxkKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KGZhbHNlKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RSZWZTYW1lTm9uRmluYWxGaWVsZE90aGVyT2JqZWN0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0Q2Fubm90RmluZEluaXRpYWxpemVyKCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0UmVmMkNvbnN0YW50c1dpdGhUaGVTYW1lVmFsdWUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoZmFsc2UpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFJlZkNvbnN0YW50QW5kRmllbGQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3RDYW5ub3RGaW5kSW5pdGlhbGl6ZXIoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RSZWZOZXdJbm5lcigpIHRocm93cyBFeGNlcHRpb24geworICAgIHRyeSB7CisgICAgICBkb1Rlc3QoZmFsc2UpOworICAgIH0KKyAgICBjYXRjaCAoQmFzZVJlZmFjdG9yaW5nUHJvY2Vzc29yLkNvbmZsaWN0c0luVGVzdHNFeGNlcHRpb24gZSkgeworICAgICAgYXNzZXJ0RXF1YWxzKCJQYXJhbWV0ZXIgaW5pdGlhbGl6ZXIgZGVwZW5kcyBvbiBjbGFzcyA8Yj48Y29kZT5Vc2VyLkxvY2FsPC9jb2RlPjwvYj4gd2hpY2ggaXMgbm90IGF2YWlsYWJsZSBpbnNpZGUgbWV0aG9kIGFuZCBjYW5ub3QgYmUgaW5saW5lZCIsIGUuZ2V0TWVzc2FnZSgpKTsKKyAgICB9CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0UmVmTmV3SW5uZXJGb3JNZXRob2QoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoZmFsc2UpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFJlZk5ld0lubmVyQXZhaWxhYmxlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KGZhbHNlKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RMb2NhbFZhckRlY2xhcmF0aW9uSW5Db25zdHJ1Y3RvcigpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdCh0cnVlKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RQYXJhbWV0ZXJXaXRoV3JpdGVBY2Nlc3MoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICB0cnkgeworICAgICAgZG9UZXN0KGZhbHNlKTsKKyAgICB9CisgICAgY2F0Y2ggKENvbW1vblJlZmFjdG9yaW5nVXRpbC5SZWZhY3RvcmluZ0Vycm9ySGludEV4Y2VwdGlvbiBlKSB7CisgICAgICBhc3NlcnRFcXVhbHMoIklubGluZSBwYXJhbWV0ZXIgd2hpY2ggaGFzIHdyaXRlIHVzYWdlcyBpcyBub3Qgc3VwcG9ydGVkIiwgZS5nZXRNZXNzYWdlKCkpOworICAgIH0KKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RSZWZOZXdJbm5lckZyb21NZXRob2QoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICB0cnkgeworICAgICAgZG9UZXN0KGZhbHNlKTsKKyAgICB9CisgICAgY2F0Y2ggKEJhc2VSZWZhY3RvcmluZ1Byb2Nlc3Nvci5Db25mbGljdHNJblRlc3RzRXhjZXB0aW9uIGUpIHsKKyAgICAgIGFzc2VydEVxdWFscygiUGFyYW1ldGVyIGluaXRpYWxpemVyIGRlcGVuZHMgb24gY2xhc3MgPGI+PGNvZGU+TG9jYWw8L2NvZGU+PC9iPiB3aGljaCBpcyBub3QgYXZhaWxhYmxlIGluc2lkZSBtZXRob2QgYW5kIGNhbm5vdCBiZSBpbmxpbmVkIiwgZS5nZXRNZXNzYWdlKCkpOworICAgIH0KKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RSZWZOZXdJbm5lckluSGllcmFyY2h5QXZhaWxhYmxlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KGZhbHNlKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RSZWZOZXdUb3BMZXZlbCgpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdChmYWxzZSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0UmVmTmV3TG9jYWwoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICB0cnkgeworICAgICAgZG9UZXN0KGZhbHNlKTsKKyAgICB9CisgICAgY2F0Y2ggKEJhc2VSZWZhY3RvcmluZ1Byb2Nlc3Nvci5Db25mbGljdHNJblRlc3RzRXhjZXB0aW9uIGUpIHsKKyAgICAgIGFzc2VydEVxdWFscygiUGFyYW1ldGVyIGluaXRpYWxpemVyIGRlcGVuZHMgb24gY2xhc3MgPGI+PGNvZGU+TG9jYWw8L2NvZGU+PC9iPiB3aGljaCBpcyBub3QgYXZhaWxhYmxlIGluc2lkZSBtZXRob2QgYW5kIGNhbm5vdCBiZSBpbmxpbmVkIiwgZS5nZXRNZXNzYWdlKCkpOworICAgIH0KKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RSZWZBcnJheUFjY2VzcygpIHRocm93cyBFeGNlcHRpb24geworICAgIHRyeSB7CisgICAgICBkb1Rlc3QoZmFsc2UpOworICAgIH0KKyAgICBjYXRjaCAoQmFzZVJlZmFjdG9yaW5nUHJvY2Vzc29yLkNvbmZsaWN0c0luVGVzdHNFeGNlcHRpb24gZSkgeworICAgICAgYXNzZXJ0RXF1YWxzKCJQYXJhbWV0ZXIgaW5pdGlhbGl6ZXIgZGVwZW5kcyBvbiB2YWx1ZSB3aGljaCBpcyBub3QgYXZhaWxhYmxlIGluc2lkZSBtZXRob2QgYW5kIGNhbm5vdCBiZSBpbmxpbmVkIiwgZS5nZXRNZXNzYWdlKCkpOworICAgIH0KKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RSZWZDYWxsZXJQYXJhbWV0ZXIoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICB0cnkgeworICAgICAgZG9UZXN0KGZhbHNlKTsKKyAgICB9CisgICAgY2F0Y2ggKEJhc2VSZWZhY3RvcmluZ1Byb2Nlc3Nvci5Db25mbGljdHNJblRlc3RzRXhjZXB0aW9uIGUpIHsKKyAgICAgIGFzc2VydEVxdWFscygiUGFyYW1ldGVyIGluaXRpYWxpemVyIGRlcGVuZHMgb24gY2FsbGVycyBwYXJhbWV0ZXIiLCBlLmdldE1lc3NhZ2UoKSk7CisgICAgfQorICB9CisKKworICBwdWJsaWMgdm9pZCB0ZXN0SGFuZGxlRXhjZXB0aW9ucygpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdChmYWxzZSk7CisgIH0KKworICBwcml2YXRlIHZvaWQgZG9UZXN0Q2Fubm90RmluZEluaXRpYWxpemVyKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgdHJ5IHsKKyAgICAgIGRvVGVzdChmYWxzZSk7CisgICAgfQorICAgIGNhdGNoIChDb21tb25SZWZhY3RvcmluZ1V0aWwuUmVmYWN0b3JpbmdFcnJvckhpbnRFeGNlcHRpb24gZSkgeworICAgICAgYXNzZXJ0RXF1YWxzKCJDYW5ub3QgZmluZCBjb25zdGFudCBpbml0aWFsaXplciBmb3IgcGFyYW1ldGVyIiwgZS5nZXRNZXNzYWdlKCkpOworICAgIH0KKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RSZWZOb25TdGF0aWMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICB0cnkgeworICAgICAgZG9UZXN0KGZhbHNlKTsKKyAgICB9CisgICAgY2F0Y2ggKEJhc2VSZWZhY3RvcmluZ1Byb2Nlc3Nvci5Db25mbGljdHNJblRlc3RzRXhjZXB0aW9uIGUpIHsKKyAgICAgIGFzc2VydEVxdWFscygiUGFyYW1ldGVyIGluaXRpYWxpemVyIGRlcGVuZHMgb24gbWV0aG9kIDxiPjxjb2RlPnByb3ZpZGVPYmplY3QoKTwvY29kZT48L2I+IHdoaWNoIGlzIG5vdCBhdmFpbGFibGUgaW5zaWRlIHRoZSBzdGF0aWMgbWV0aG9kIiwgZS5nZXRNZXNzYWdlKCkpOworICAgIH0KKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RSZWZOb25TdGF0aWNDbGFzcygpIHRocm93cyBFeGNlcHRpb24geworICAgIHRyeSB7CisgICAgICBkb1Rlc3QoZmFsc2UpOworICAgIH0KKyAgICBjYXRjaCAoQmFzZVJlZmFjdG9yaW5nUHJvY2Vzc29yLkNvbmZsaWN0c0luVGVzdHNFeGNlcHRpb24gZSkgeworICAgICAgYXNzZXJ0RXF1YWxzKCJQYXJhbWV0ZXIgaW5pdGlhbGl6ZXIgZGVwZW5kcyBvbiBub24gc3RhdGljIGNsYXNzIHdoaWNoIGlzIG5vdCBhdmFpbGFibGUgaW5zaWRlIHN0YXRpYyBtZXRob2QiLCBlLmdldE1lc3NhZ2UoKSk7CisgICAgfQorICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFJlZlRoaXNGcm9tU3RhdGljKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgdHJ5IHsKKyAgICAgIGRvVGVzdChmYWxzZSk7CisgICAgfQorICAgIGNhdGNoIChCYXNlUmVmYWN0b3JpbmdQcm9jZXNzb3IuQ29uZmxpY3RzSW5UZXN0c0V4Y2VwdGlvbiBlKSB7CisgICAgICBhc3NlcnRFcXVhbHMoIlBhcmFtZXRlciBpbml0aWFsaXplciBkZXBlbmRzIG9uIHRoaXMgd2hpY2ggaXMgbm90IGF2YWlsYWJsZSBpbnNpZGUgdGhlIHN0YXRpYyBtZXRob2QiLCBlLmdldE1lc3NhZ2UoKSk7CisgICAgfQorICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFZpc2liaWxpdHkoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICB0cnkgeworICAgICAgZG9UZXN0KGZhbHNlKTsKKyAgICB9CisgICAgY2F0Y2ggKEJhc2VSZWZhY3RvcmluZ1Byb2Nlc3Nvci5Db25mbGljdHNJblRlc3RzRXhjZXB0aW9uIGUpIHsKKyAgICAgIGFzc2VydEVxdWFscygiUGFyYW1ldGVyIGluaXRpYWxpemVyIGRlcGVuZHMgb24gdmFsdWUgd2hpY2ggaXMgbm90IGF2YWlsYWJsZSBpbnNpZGUgbWV0aG9kIiwgZS5nZXRNZXNzYWdlKCkpOworICAgIH0KKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RXcml0ZUFjY2VzcygpIHRocm93cyBFeGNlcHRpb24geworICAgIHRyeSB7CisgICAgICBkb1Rlc3QoZmFsc2UpOworICAgIH0KKyAgICBjYXRjaCAoQmFzZVJlZmFjdG9yaW5nUHJvY2Vzc29yLkNvbmZsaWN0c0luVGVzdHNFeGNlcHRpb24gZSkgeworICAgICAgYXNzZXJ0RXF1YWxzKCJQYXJhbWV0ZXIgaW5pdGlhbGl6ZXIgZGVwZW5kcyBvbiB2YWx1ZSB3aGljaCBpcyBub3QgYXZhaWxhYmxlIGluc2lkZSBtZXRob2QgYW5kIGNhbm5vdCBiZSBpbmxpbmVkIiwgZS5nZXRNZXNzYWdlKCkpOworICAgIH0KKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RSZWZDYWxsZXJQYXJhbWV0ZXJJbkNhbGxDaGFpbigpIHRocm93cyBFeGNlcHRpb24geworICAgIHRyeSB7CisgICAgICBkb1Rlc3QoZmFsc2UpOworICAgIH0KKyAgICBjYXRjaCAoQmFzZVJlZmFjdG9yaW5nUHJvY2Vzc29yLkNvbmZsaWN0c0luVGVzdHNFeGNlcHRpb24gZSkgeworICAgICAgYXNzZXJ0RXF1YWxzKCJQYXJhbWV0ZXIgaW5pdGlhbGl6ZXIgZGVwZW5kcyBvbiBjYWxsZXJzIHBhcmFtZXRlciIsIGUuZ2V0TWVzc2FnZSgpKTsKKyAgICB9CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0SW5saW5lTG9jYWxQYXJhbURlZigpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdChmYWxzZSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0SW5saW5lUmVjdXJzaXZlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KGZhbHNlKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RDYW50SW5saW5lUmVjdXJzaXZlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgdHJ5IHsKKyAgICAgIGRvVGVzdChmYWxzZSk7CisgICAgfQorICAgIGNhdGNoIChDb21tb25SZWZhY3RvcmluZ1V0aWwuUmVmYWN0b3JpbmdFcnJvckhpbnRFeGNlcHRpb24gZSkgeworICAgICAgYXNzZXJ0RXF1YWxzKCJDYW5ub3QgZmluZCBjb25zdGFudCBpbml0aWFsaXplciBmb3IgcGFyYW1ldGVyIiwgZS5nZXRNZXNzYWdlKCkpOworICAgICAgcmV0dXJuOworICAgIH0KKyAgICBmYWlsKCJJbml0aWFsaXplciBzaG91bCBub3QgYmUgZm91bmQiKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RQYXJhbWV0ZXJEZWZXaXRoV3JpdGVBY2Nlc3MoKSAgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgdHJ5IHsKKyAgICAgIGRvVGVzdChmYWxzZSk7CisgICAgfQorICAgIGNhdGNoIChDb21tb25SZWZhY3RvcmluZ1V0aWwuUmVmYWN0b3JpbmdFcnJvckhpbnRFeGNlcHRpb24gZSkgeworICAgICAgYXNzZXJ0RXF1YWxzKCJNZXRob2QgaGFzIG5vIHVzYWdlcyIsIGUuZ2V0TWVzc2FnZSgpKTsKKyAgICB9CisgIH0KKworICBwcml2YXRlIHZvaWQgZG9UZXN0KGZpbmFsIGJvb2xlYW4gY3JlYXRlTG9jYWwpIHRocm93cyBFeGNlcHRpb24geworICAgIGdldFByb2plY3QoKS5wdXRVc2VyRGF0YShJbmxpbmVQYXJhbWV0ZXJFeHByZXNzaW9uUHJvY2Vzc29yLkNSRUFURV9MT0NBTF9GT1JfVEVTVFMsY3JlYXRlTG9jYWwpOworCisgICAgU3RyaW5nIG5hbWUgPSBnZXRUZXN0TmFtZShmYWxzZSk7CisgICAgQE5vbk5scyBTdHJpbmcgZmlsZU5hbWUgPSAiL3JlZmFjdG9yaW5nL2lubGluZVBhcmFtZXRlci8iICsgbmFtZSArICIuamF2YSI7CisgICAgY29uZmlndXJlQnlGaWxlKGZpbGVOYW1lKTsKKyAgICBwZXJmb3JtQWN0aW9uKCk7CisgICAgY2hlY2tSZXN1bHRCeUZpbGUobnVsbCwgZmlsZU5hbWUgKyAiLmFmdGVyIiwgdHJ1ZSk7CisgIH0KKworICBwcml2YXRlIHN0YXRpYyB2b2lkIHBlcmZvcm1BY3Rpb24oKSB7CisgICAgZmluYWwgUHNpRWxlbWVudCBlbGVtZW50ID0gVGFyZ2V0RWxlbWVudFV0aWxCYXNlLmZpbmRUYXJnZXRFbGVtZW50KG15RWRpdG9yLCBUYXJnZXRFbGVtZW50VXRpbEJhc2UKKyAgICAgIC5SRUZFUkVOQ0VEX0VMRU1FTlRfQUNDRVBURUQgfCBUYXJnZXRFbGVtZW50VXRpbEJhc2UuRUxFTUVOVF9OQU1FX0FDQ0VQVEVEKTsKKyAgICBuZXcgSW5saW5lUGFyYW1ldGVySGFuZGxlcigpLmlubGluZUVsZW1lbnQoZ2V0UHJvamVjdCgpLCBteUVkaXRvciwgZWxlbWVudCk7CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9yZWZhY3RvcmluZy9pbmxpbmUvSW5saW5lVG9Bbm9ueW1vdXNDbGFzc011bHRpZmlsZVRlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9yZWZhY3RvcmluZy9pbmxpbmUvSW5saW5lVG9Bbm9ueW1vdXNDbGFzc011bHRpZmlsZVRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZjU0MjRmCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL3JlZmFjdG9yaW5nL2lubGluZS9JbmxpbmVUb0Fub255bW91c0NsYXNzTXVsdGlmaWxlVGVzdC5qYXZhCkBAIC0wLDAgKzEsNzMgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwMC0yMDEyIEpldEJyYWlucyBzLnIuby4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCitwYWNrYWdlIGNvbS5pbnRlbGxpai5yZWZhY3RvcmluZy5pbmxpbmU7CisKK2ltcG9ydCBjb20uaW50ZWxsaWouSmF2YVRlc3RVdGlsOworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLnByb2plY3RSb290cy5pbXBsLkphdmFTZGtJbXBsOworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLnZmcy5Mb2NhbEZpbGVTeXN0ZW07CitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkudmZzLlZpcnR1YWxGaWxlOworaW1wb3J0IGNvbS5pbnRlbGxpai5wc2kuUHNpQ2xhc3M7CitpbXBvcnQgY29tLmludGVsbGlqLnBzaS5Qc2lFbGVtZW50OworaW1wb3J0IGNvbS5pbnRlbGxpai5wc2kuaW1wbC5zb3VyY2UuUG9zdHByb2Nlc3NSZWZvcm1hdHRpbmdBc3BlY3Q7CitpbXBvcnQgY29tLmludGVsbGlqLnBzaS5zZWFyY2guUHJvamVjdFNjb3BlOworaW1wb3J0IGNvbS5pbnRlbGxpai5yZWZhY3RvcmluZy5SZWZhY3RvcmluZ1Rlc3RDYXNlOworaW1wb3J0IGNvbS5pbnRlbGxpai50ZXN0RnJhbWV3b3JrLklkZWFUZXN0VXRpbDsKK2ltcG9ydCBjb20uaW50ZWxsaWoudGVzdEZyYW1ld29yay5Qc2lUZXN0VXRpbDsKK2ltcG9ydCBjb20uaW50ZWxsaWoudXNhZ2VWaWV3LlVzYWdlSW5mbzsKK2ltcG9ydCBjb20uaW50ZWxsaWoudXRpbC5jb250YWluZXJzLk11bHRpTWFwOworCitpbXBvcnQgamF2YS5pby5GaWxlOworCisvKioKKyAqIEBhdXRob3IgeW9sZQorICovCitwdWJsaWMgY2xhc3MgSW5saW5lVG9Bbm9ueW1vdXNDbGFzc011bHRpZmlsZVRlc3QgZXh0ZW5kcyBSZWZhY3RvcmluZ1Rlc3RDYXNlIHsKKyAgcHVibGljIHZvaWQgdGVzdFByb3RlY3RlZE1lbWJlcigpIHRocm93cyBFeGNlcHRpb24geyAgIC8vIElERUFERVYtMTg3MzgKKyAgICBkb1Rlc3QoInAxLlN1YmplY3RXaXRoU3VwZXIiKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RJbXBvcnRGb3JDb25zdHJ1Y3RvcigpIHRocm93cyBFeGNlcHRpb24geyAgIC8vIElERUFERVYtMTg3MTQKKyAgICBkb1Rlc3QoInAxLkNoaWxkQ3RvciIpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFN0YXRpY0ltcG9ydHMoKSB0aHJvd3MgRXhjZXB0aW9uIHsgICAvLyBJREVBREVWLTE4NzQ1CisgICAgZG9UZXN0KCJwMS5JbmxpbmVkIik7CisgIH0KKworICBwcml2YXRlIFN0cmluZyBnZXRSb290KCkgeworICAgIHJldHVybiBKYXZhVGVzdFV0aWwuZ2V0SmF2YVRlc3REYXRhUGF0aCgpICsgIi9yZWZhY3RvcmluZy9pbmxpbmVUb0Fub255bW91c0NsYXNzL211bHRpZmlsZS8iICsgZ2V0VGVzdE5hbWUodHJ1ZSk7CisgIH0KKworICBwcml2YXRlIHZvaWQgZG9UZXN0KFN0cmluZyBjbGFzc05hbWUpIHRocm93cyBFeGNlcHRpb24geworICAgIFN0cmluZyByb290QmVmb3JlID0gZ2V0Um9vdCgpICsgIi9iZWZvcmUiOworICAgIFBzaVRlc3RVdGlsLnJlbW92ZUFsbFJvb3RzKG15TW9kdWxlLCBJZGVhVGVzdFV0aWwuZ2V0TW9ja0pkazE3KCkpOworICAgIGZpbmFsIFZpcnR1YWxGaWxlIHJvb3REaXIgPSBQc2lUZXN0VXRpbC5jcmVhdGVUZXN0UHJvamVjdFN0cnVjdHVyZShteVByb2plY3QsIG15TW9kdWxlLCByb290QmVmb3JlLCBteUZpbGVzVG9EZWxldGUpOworICAgIFBzaUNsYXNzIGNsYXNzVG9JbmxpbmUgPSBteUphdmFGYWNhZGUuZmluZENsYXNzKGNsYXNzTmFtZSwgUHJvamVjdFNjb3BlLmdldEFsbFNjb3BlKG15UHJvamVjdCkpOworICAgIGFzc2VydEVxdWFscyhudWxsLCBJbmxpbmVUb0Fub255bW91c0NsYXNzSGFuZGxlci5nZXRDYW5ub3RJbmxpbmVNZXNzYWdlKGNsYXNzVG9JbmxpbmUpKTsKKyAgICBJbmxpbmVUb0Fub255bW91c0NsYXNzUHJvY2Vzc29yIHByb2Nlc3NvciA9IG5ldyBJbmxpbmVUb0Fub255bW91c0NsYXNzUHJvY2Vzc29yKG15UHJvamVjdCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc1RvSW5saW5lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVsbCwgZmFsc2UsIGZhbHNlLCBmYWxzZSk7CisgICAgVXNhZ2VJbmZvW10gdXNhZ2VzID0gcHJvY2Vzc29yLmZpbmRVc2FnZXMoKTsKKyAgICBNdWx0aU1hcDxQc2lFbGVtZW50LFN0cmluZz4gY29uZmxpY3RzID0gcHJvY2Vzc29yLmdldENvbmZsaWN0cyh1c2FnZXMpOworICAgIGFzc2VydEVxdWFscygwLCBjb25mbGljdHMuc2l6ZSgpKTsKKyAgICBwcm9jZXNzb3IucnVuKCk7CisKKyAgICBTdHJpbmcgcm9vdEFmdGVyID0gZ2V0Um9vdCgpICsgIi9hZnRlciI7CisgICAgVmlydHVhbEZpbGUgcm9vdERpcjIgPSBMb2NhbEZpbGVTeXN0ZW0uZ2V0SW5zdGFuY2UoKS5maW5kRmlsZUJ5UGF0aChyb290QWZ0ZXIucmVwbGFjZShGaWxlLnNlcGFyYXRvckNoYXIsICcvJykpOworICAgIG15UHJvamVjdC5nZXRDb21wb25lbnQoUG9zdHByb2Nlc3NSZWZvcm1hdHRpbmdBc3BlY3QuY2xhc3MpLmRvUG9zdHBvbmVkRm9ybWF0dGluZygpOworICAgIElkZWFUZXN0VXRpbC5hc3NlcnREaXJlY3Rvcmllc0VxdWFsKHJvb3REaXIyLCByb290RGlyLCBJZGVhVGVzdFV0aWwuQ1ZTX0ZJTEVfRklMVEVSKTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL3JlZmFjdG9yaW5nL2lubGluZS9JbmxpbmVUb0Fub255bW91c0NsYXNzVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL3JlZmFjdG9yaW5nL2lubGluZS9JbmxpbmVUb0Fub255bW91c0NsYXNzVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBkYTNkYjIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovcmVmYWN0b3JpbmcvaW5saW5lL0lubGluZVRvQW5vbnltb3VzQ2xhc3NUZXN0LmphdmEKQEAgLTAsMCArMSw0NjIgQEAKK3BhY2thZ2UgY29tLmludGVsbGlqLnJlZmFjdG9yaW5nLmlubGluZTsKKworaW1wb3J0IGNvbS5pbnRlbGxpai5KYXZhVGVzdFV0aWw7CitpbXBvcnQgY29tLmludGVsbGlqLmNvZGVJbnNpZ2h0LlRhcmdldEVsZW1lbnRVdGlsQmFzZTsKK2ltcG9ydCBjb20uaW50ZWxsaWoucHNpLlBzaUNhbGw7CitpbXBvcnQgY29tLmludGVsbGlqLnBzaS5Qc2lDbGFzczsKK2ltcG9ydCBjb20uaW50ZWxsaWoucHNpLlBzaUNsYXNzVHlwZTsKK2ltcG9ydCBjb20uaW50ZWxsaWoucHNpLlBzaUVsZW1lbnQ7CitpbXBvcnQgY29tLmludGVsbGlqLnJlZmFjdG9yaW5nLkxpZ2h0UmVmYWN0b3JpbmdUZXN0Q2FzZTsKK2ltcG9ydCBjb20uaW50ZWxsaWoudXNhZ2VWaWV3LlVzYWdlSW5mbzsKK2ltcG9ydCBjb20uaW50ZWxsaWoudXRpbC5jb250YWluZXJzLk11bHRpTWFwOworaW1wb3J0IG9yZy5qZXRicmFpbnMuYW5ub3RhdGlvbnMuTm9uTmxzOworaW1wb3J0IG9yZy5qZXRicmFpbnMuYW5ub3RhdGlvbnMuTm90TnVsbDsKKworaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKKworLyoqCisgKiBAYXV0aG9yIHlvbGUKKyAqLworcHVibGljIGNsYXNzIElubGluZVRvQW5vbnltb3VzQ2xhc3NUZXN0IGV4dGVuZHMgTGlnaHRSZWZhY3RvcmluZ1Rlc3RDYXNlIHsKKyAgQE5vdE51bGwKKyAgQE92ZXJyaWRlCisgIHByb3RlY3RlZCBTdHJpbmcgZ2V0VGVzdERhdGFQYXRoKCkgeworICAgIHJldHVybiBKYXZhVGVzdFV0aWwuZ2V0SmF2YVRlc3REYXRhUGF0aCgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFNpbXBsZSgpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdChmYWxzZSwgZmFsc2UpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdENoYW5nZVRvU3VwZXJUeXBlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KGZhbHNlLCBmYWxzZSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0SW1wbGVtZW50c0ludGVyZmFjZSgpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdChmYWxzZSwgZmFsc2UpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdENsYXNzSW5pdGlhbGl6ZXIoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoZmFsc2UsIGZhbHNlKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RDb25zdHJ1Y3RvcigpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdChmYWxzZSwgZmFsc2UpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdENvbnN0cnVjdG9yV2l0aEFyZ3VtZW50cygpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdChmYWxzZSwgZmFsc2UpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdENvbnN0cnVjdG9yV2l0aEFyZ3VtZW50c0luRXhwcmVzc2lvbigpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdChmYWxzZSwgZmFsc2UpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdE11bHRpcGxlQ29uc3RydWN0b3JzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KGZhbHNlLCBmYWxzZSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0TWV0aG9kVXNhZ2UoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoZmFsc2UsIGZhbHNlKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RDb25zdHJ1Y3RvckFyZ3VtZW50VG9GaWVsZCgpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdChmYWxzZSwgZmFsc2UpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEZpZWxkKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KGZhbHNlLCBmYWxzZSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0U3RhdGljQ29uc3RhbnRGaWVsZCgpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdChmYWxzZSwgZmFsc2UpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFdyaXRhYmxlSW5pdGlhbGl6ZWRGaWVsZCgpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdChmYWxzZSwgZmFsc2UpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdE51bGxJbml0aWFsaXplZEZpZWxkKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KGZhbHNlLCBmYWxzZSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0SW5uZXJDbGFzcygpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdChmYWxzZSwgZmFsc2UpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdENvbnN0cnVjdG9yVG9JbnN0YW5jZUluaXRpYWxpemVyKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KGZhbHNlLCBmYWxzZSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0TmV3RXhwcmVzc2lvbkNvbnRleHQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoZmFsc2UsIGZhbHNlKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RXcml0YWJsZUZpZWxkSW5pdGlhbGl6ZWRXaXRoUGFyYW1ldGVyKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KGZhbHNlLCBmYWxzZSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0RmllbGRJbml0aWFsaXplZFdpdGhWYXIoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoZmFsc2UsIGZhbHNlKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RGaWVsZFZzTG9jYWxDb25mbGljdCgpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdChmYWxzZSwgZmFsc2UpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEZpZWxkVnNQYXJhbWV0ZXJDb25mbGljdCgpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdChmYWxzZSwgZmFsc2UpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEdlbmVyaWNzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KGZhbHNlLCBmYWxzZSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0R2VuZXJpY3NTdWJzdGl0dXRlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KGZhbHNlLCBmYWxzZSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0R2VuZXJpY3NGaWVsZERlY2xhcmF0aW9uKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KGZhbHNlLCBmYWxzZSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0R2VuZXJpY3NSYXdUeXBlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KGZhbHNlLCBmYWxzZSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0R2VuZXJpY3NJblR5cGVQYXJhbWV0ZXIoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoZmFsc2UsIGZhbHNlKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RRdWFsaWZ5SW5uZXIoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoZmFsc2UsIGZhbHNlKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RRdWFsaWZpZWROZXcoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoZmFsc2UsIGZhbHNlKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RDaGFpbmVkQ29uc3RydWN0b3JzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KGZhbHNlLCBmYWxzZSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0Q2hhaW5lZFZhcmFyZ0NvbnN0cnVjdG9ycygpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdChmYWxzZSwgZmFsc2UpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdElubGluZVRoaXNPbmx5KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KHRydWUsIGZhbHNlKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RBcnJheVR5cGUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoZmFsc2UsIGZhbHNlKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RBcnJheVR5cGVXaXRoR2VuZXJpY3MoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoZmFsc2UsIGZhbHNlKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RBcnJheUluaXRpYWxpemVyKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KGZhbHNlLCBmYWxzZSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0VmFyYXJncygpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdChmYWxzZSwgZmFsc2UpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFNlbGZSZWZlcmVuY2UoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoZmFsc2UsIGZhbHNlKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RPdXRlckNsYXNzRmllbGRBY2Nlc3MoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoZmFsc2UsIGZhbHNlKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RQcml2YXRlRmllbGRVc2VkRnJvbUlubmVyQ2xhc3MoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoZmFsc2UsIGZhbHNlKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RPdmVyd3JpdGVJbml0aWFsaXplcigpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdChmYWxzZSwgZmFsc2UpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdE11bHRpcGxlSW5uZXJDbGFzc2VzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KGZhbHNlLCBmYWxzZSk7CisgIH0KKyAgCisgIHB1YmxpYyB2b2lkIHRlc3RDb25zdHJ1Y3RvckFyZ3VtZW50SW5FeHByZXNzaW9uKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KGZhbHNlLCBmYWxzZSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0TWV0aG9kQ2FsbEluTmV3RXhwcmVzc2lvbigpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdChmYWxzZSwgZmFsc2UpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdE1ldGhvZENhbGxJbk5ld0V4cHJlc3Npb25XaXRoUGFyZW5zKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KGZhbHNlLCBmYWxzZSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0UmVkdW5kYW50SW1wbGVtZW50c0ludGVyZmFjZSgpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdChmYWxzZSwgZmFsc2UpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFN0cmluZ0luTWV0aG9kQ2FsbEZyb21Db25zdHJ1Y3RvcigpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdChmYWxzZSwgZmFsc2UpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdE11bHRpcGxlR2VuZXJhdGVkVmFycygpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdChmYWxzZSwgZmFsc2UpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEZpZWxkQXNDb25zdHJ1Y3RvclBhcmFtZXRlcigpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdChmYWxzZSwgZmFsc2UpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFF1YWxpZnlQYXJlbnRTdGF0aWNSZWZlcmVuY2VzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KGZhbHNlLCBmYWxzZSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0TG9jYWxDbGFzcygpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdChmYWxzZSwgdHJ1ZSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0TXVsdGlwbGVBc3NpZ25tZW50cygpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdChmYWxzZSwgdHJ1ZSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0UGFyYW1UeXBlUmVwbGFjZW1lbnQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoZmFsc2UsIHRydWUpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEJyYWNlcygpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdChmYWxzZSwgZmFsc2UpOworICB9CisgIAorICBwdWJsaWMgdm9pZCB0ZXN0Tm9JbmxpbmVBYnN0cmFjdCgpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdE5vSW5saW5lKCJBYnN0cmFjdCBjbGFzc2VzIGNhbm5vdCBiZSBpbmxpbmVkIik7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0Tm9JbmxpbmVJbnRlcmZhY2UoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3ROb0lubGluZSgiSW50ZXJmYWNlcyBjYW5ub3QgYmUgaW5saW5lZCIpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdE5vSW5saW5lRW51bSgpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdE5vSW5saW5lKCJFbnVtcyBjYW5ub3QgYmUgaW5saW5lZCIpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdE5vSW5saW5lQW5ub3RhdGlvblR5cGUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3ROb0lubGluZSgiQW5ub3RhdGlvbiB0eXBlcyBjYW5ub3QgYmUgaW5saW5lZCIpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdE5vSW5saW5lTXVsdGlwbGVJbnRlcmZhY2VzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0Tm9JbmxpbmUoIkNsYXNzZXMgd2hpY2ggaW1wbGVtZW50IG11bHRpcGxlIGludGVyZmFjZXMgY2Fubm90IGJlIGlubGluZWQiKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3ROb0lubGluZVN1cGVyY2xhc3NJbnRlcmZhY2UoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3ROb0lubGluZSgiQ2xhc3NlcyB3aGljaCBoYXZlIGEgc3VwZXJjbGFzcyBhbmQgaW1wbGVtZW50IGFuIGludGVyZmFjZSBjYW5ub3QgYmUgaW5saW5lZCIpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdE5vSW5saW5lTWV0aG9kVXNhZ2UoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3ROb0lubGluZSgiQ2xhc3MgY2Fubm90IGJlIGlubGluZWQgYmVjYXVzZSBpdCBoYXMgdXNhZ2VzIG9mIG1ldGhvZHMgbm90IGluaGVyaXRlZCBmcm9tIGl0cyBzdXBlcmNsYXNzIG9yIGludGVyZmFjZSIpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdE5vSW5saW5lRmllbGRVc2FnZSgpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdE5vSW5saW5lKCJDbGFzcyBjYW5ub3QgYmUgaW5saW5lZCBiZWNhdXNlIGl0IGhhcyB1c2FnZXMgb2YgZmllbGRzIG5vdCBpbmhlcml0ZWQgZnJvbSBpdHMgc3VwZXJjbGFzcyIpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdE5vSW5saW5lTmV3V2l0aElubmVyKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0Tm9JbmxpbmUoIkNsYXNzIGNhbm5vdCBiZSBpbmxpbmVkIGJlY2F1c2UgaXQgaGFzIHVzYWdlcyBvZiBpdHMgaW5uZXIgY2xhc3NlcyIpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdE5vSW5saW5lU3RhdGljRmllbGQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3ROb0lubGluZSgiQ2xhc3MgY2Fubm90IGJlIGlubGluZWQgYmVjYXVzZSBpdCBoYXMgc3RhdGljIGZpZWxkcyB3aXRoIG5vbi1jb25zdGFudCBpbml0aWFsaXplcnMiKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3ROb0lubGluZVN0YXRpY05vbkZpbmFsRmllbGQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3ROb0lubGluZSgiQ2xhc3MgY2Fubm90IGJlIGlubGluZWQgYmVjYXVzZSBpdCBoYXMgc3RhdGljIG5vbi1maW5hbCBmaWVsZHMiKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3ROb0lubGluZVN0YXRpY01ldGhvZCgpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdE5vSW5saW5lKCJDbGFzcyBjYW5ub3QgYmUgaW5saW5lZCBiZWNhdXNlIGl0IGhhcyBzdGF0aWMgbWV0aG9kcyIpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdE5vSW5saW5lU3RhdGljSW5pdGlhbGl6ZXIoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3ROb0lubGluZSgiQ2xhc3MgY2Fubm90IGJlIGlubGluZWQgYmVjYXVzZSBpdCBoYXMgc3RhdGljIGluaXRpYWxpemVycyIpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdE5vSW5saW5lQ2xhc3NMaXRlcmFsKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0UHJlcHJvY2Vzc1VzYWdlcygiQ2xhc3MgY2Fubm90IGJlIGlubGluZWQgYmVjYXVzZSBpdCBoYXMgdXNhZ2VzIG9mIGl0cyBjbGFzcyBsaXRlcmFsIik7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0Tm9JbmxpbmVDYXRjaENsYXVzZSgpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdFByZXByb2Nlc3NVc2FnZXMoIkNsYXNzIGNhbm5vdCBiZSBpbmxpbmVkIGJlY2F1c2UgaXQgaXMgdXNlZCBpbiBhICdjYXRjaCcgY2xhdXNlIik7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0Tm9JbmxpbmVUaHJvd3NDbGF1c2UoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3RQcmVwcm9jZXNzVXNhZ2VzKCJDbGFzcyBjYW5ub3QgYmUgaW5saW5lZCBiZWNhdXNlIGl0IGlzIHVzZWQgaW4gYSAndGhyb3dzJyBjbGF1c2UiKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3ROb0lubGluZVRoaXNRdWFsaWZpZXIoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3RQcmVwcm9jZXNzVXNhZ2VzKCJDbGFzcyBjYW5ub3QgYmUgaW5saW5lZCBiZWNhdXNlIGl0IGlzIHVzZWQgYXMgYSAndGhpcycgcXVhbGlmaWVyIik7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0Tm9JbmxpbmVVbnJlc29sdmVkQ29uc3RydWN0b3IoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3RQcmVwcm9jZXNzVXNhZ2VzKCJDbGFzcyBjYW5ub3QgYmUgaW5saW5lZCBiZWNhdXNlIGEgY2FsbCB0byBpdHMgY29uc3RydWN0b3IgaXMgdW5yZXNvbHZlZCIpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdE5vSW5saW5lVW5yZXNvbHZlZENvbnN0cnVjdG9yMigpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdFByZXByb2Nlc3NVc2FnZXMoIkNsYXNzIGNhbm5vdCBiZSBpbmxpbmVkIGJlY2F1c2UgYSBjYWxsIHRvIGl0cyBjb25zdHJ1Y3RvciBpcyB1bnJlc29sdmVkIik7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0Tm9JbmxpbmVTdGF0aWNJbm5lckNsYXNzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0Tm9JbmxpbmUoIkNsYXNzIGNhbm5vdCBiZSBpbmxpbmVkIGJlY2F1c2UgaXQgaGFzIHN0YXRpYyBpbm5lciBjbGFzc2VzIik7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0Tm9JbmxpbmVSZXR1cm5JbkNvbnN0cnVjdG9yKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0Tm9JbmxpbmUoIkNsYXNzIGNhbm5vdCBiZSBpbmxpbmVkIGJlY2F1c2UgaXRzIGNvbnN0cnVjdG9yIGNvbnRhaW5zICdyZXR1cm4nIHN0YXRlbWVudHMiKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3ROb0lubGluZVVucmVzb2x2ZWRTdXBlcmNsYXNzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0Tm9JbmxpbmUoIkNsYXNzIGNhbm5vdCBiZSBpbmxpbmVkIGJlY2F1c2UgaXRzIHN1cGVyY2xhc3MgY2Fubm90IGJlIHJlc29sdmVkIik7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0Tm9JbmxpbmVVbnJlc29sdmVkSW50ZXJmYWNlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0Tm9JbmxpbmUoIkNsYXNzIGNhbm5vdCBiZSBpbmxpbmVkIGJlY2F1c2UgYW4gaW50ZXJmYWNlIGltcGxlbWVudGVkIGJ5IGl0IGNhbm5vdCBiZSByZXNvbHZlZCIpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdE5vSW5saW5lTGlicmFyeUNsYXNzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0Tm9JbmxpbmUoIkxpYnJhcnkgY2xhc3NlcyBjYW5ub3QgYmUgaW5saW5lZCIpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdE5vSW5saW5lTm9Vc2FnZXMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3RQcmVwcm9jZXNzVXNhZ2VzKCJDbGFzcyBpcyBuZXZlciB1c2VkIik7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0Tm9JbmxpbmVSZWN1cnNpdmVBY2Nlc3MoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3RDb25mbGljdCgiQ2xhc3MgY2Fubm90IGJlIGlubGluZWQgYmVjYXVzZSBhIGNhbGwgdG8gaXRzIG1lbWJlciBpbnNpZGUgYm9keSIsICJDbGFzcyBjYW5ub3QgYmUgaW5saW5lZCBiZWNhdXNlIGEgY2FsbCB0byBpdHMgbWVtYmVyIGluc2lkZSBib2R5Iik7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0Q29uZmxpY3RJbmFjY2Vzc2libGVPdXRlckZpZWxkKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0Q29uZmxpY3QoCisgICAgICAiRmllbGQgPGI+PGNvZGU+QzIuYTwvY29kZT48L2I+IHRoYXQgaXMgdXNlZCBpbiBpbmxpbmVkIG1ldGhvZCBpcyBub3QgYWNjZXNzaWJsZSBmcm9tIGNhbGwgc2l0ZShzKSBpbiBtZXRob2QgPGI+PGNvZGU+QzJVc2VyLnRlc3QoKTwvY29kZT48L2I+Iik7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0R2V0Q2xhc3NDb25mbGljdCgpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdENvbmZsaWN0KCJSZXN1bHQgb2YgZ2V0Q2xhc3MoKSBpbnZvY2F0aW9uIHdvdWxkIGJlIGNoYW5nZWQiLCAiUmVzdWx0IG9mIGdldENsYXNzKCkgaW52b2NhdGlvbiB3b3VsZCBiZSBjaGFuZ2VkIik7CisgIH0KKworICBwdWJsaWMgdm9pZCBkb1Rlc3RDb25mbGljdChmaW5hbCBTdHJpbmcuLi4gZXhwZWN0ZWQpIHRocm93cyBFeGNlcHRpb24geworICAgIElubGluZVRvQW5vbnltb3VzQ2xhc3NQcm9jZXNzb3IgcHJvY2Vzc29yID0gcHJlcGFyZVByb2Nlc3NvcigpOworICAgIFVzYWdlSW5mb1tdIHVzYWdlcyA9IHByb2Nlc3Nvci5maW5kVXNhZ2VzKCk7CisgICAgTXVsdGlNYXA8UHNpRWxlbWVudCxTdHJpbmc+IGNvbmZsaWN0cyA9IHByb2Nlc3Nvci5nZXRDb25mbGljdHModXNhZ2VzKTsKKyAgICBhc3NlcnRFcXVhbHMoZXhwZWN0ZWQubGVuZ3RoLCBjb25mbGljdHMuc2l6ZSgpKTsKKyAgICBmaW5hbCBJdGVyYXRvcjw/IGV4dGVuZHMgU3RyaW5nPiBpdGVyYXRvciA9IGNvbmZsaWN0cy52YWx1ZXMoKS5pdGVyYXRvcigpOworICAgIGZvciAoU3RyaW5nIHMgOiBleHBlY3RlZCkgeworICAgICAgYXNzZXJ0VHJ1ZShpdGVyYXRvci5oYXNOZXh0KCkpOworICAgICAgYXNzZXJ0RXF1YWxzKHMsIGl0ZXJhdG9yLm5leHQoKSk7CisgICAgfQorICB9CisKKyAgcHJpdmF0ZSB2b2lkIGRvVGVzdE5vSW5saW5lKGZpbmFsIFN0cmluZyBleHBlY3RlZE1lc3NhZ2UpIHRocm93cyBFeGNlcHRpb24geworICAgIFN0cmluZyBuYW1lID0gZ2V0VGVzdE5hbWUoZmFsc2UpOworICAgIEBOb25ObHMgU3RyaW5nIGZpbGVOYW1lID0gIi9yZWZhY3RvcmluZy9pbmxpbmVUb0Fub255bW91c0NsYXNzLyIgKyBuYW1lICsgIi5qYXZhIjsKKyAgICBjb25maWd1cmVCeUZpbGUoZmlsZU5hbWUpOworICAgIFBzaUVsZW1lbnQgZWxlbWVudCA9IFRhcmdldEVsZW1lbnRVdGlsQmFzZQorICAgICAgLmZpbmRUYXJnZXRFbGVtZW50KG15RWRpdG9yLCBUYXJnZXRFbGVtZW50VXRpbEJhc2UuRUxFTUVOVF9OQU1FX0FDQ0VQVEVEIHwgVGFyZ2V0RWxlbWVudFV0aWxCYXNlLlJFRkVSRU5DRURfRUxFTUVOVF9BQ0NFUFRFRCk7CisgICAgYXNzZXJ0SW5zdGFuY2VPZihlbGVtZW50LCBQc2lDbGFzcy5jbGFzcyk7CisKKyAgICBTdHJpbmcgbWVzc2FnZSA9IElubGluZVRvQW5vbnltb3VzQ2xhc3NIYW5kbGVyLmdldENhbm5vdElubGluZU1lc3NhZ2UoKFBzaUNsYXNzKSBlbGVtZW50KTsKKyAgICBhc3NlcnRFcXVhbHMoZXhwZWN0ZWRNZXNzYWdlLCBtZXNzYWdlKTsKKyAgfQorCisgIHByaXZhdGUgdm9pZCBkb1Rlc3QoZmluYWwgYm9vbGVhbiBpbmxpbmVUaGlzT25seSwgZmluYWwgYm9vbGVhbiBzZWFyY2hJbk5vbkphdmFGaWxlcykgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgU3RyaW5nIG5hbWUgPSBnZXRUZXN0TmFtZShmYWxzZSk7CisgICAgQE5vbk5scyBTdHJpbmcgZmlsZU5hbWUgPSAiL3JlZmFjdG9yaW5nL2lubGluZVRvQW5vbnltb3VzQ2xhc3MvIiArIG5hbWUgKyAiLmphdmEiOworICAgIGNvbmZpZ3VyZUJ5RmlsZShmaWxlTmFtZSk7CisgICAgcGVyZm9ybUFjdGlvbihpbmxpbmVUaGlzT25seSwgc2VhcmNoSW5Ob25KYXZhRmlsZXMpOworICAgIGNoZWNrUmVzdWx0QnlGaWxlKG51bGwsIGZpbGVOYW1lICsgIi5hZnRlciIsIHRydWUpOworICB9CisKKyAgcHJpdmF0ZSB2b2lkIGRvVGVzdFByZXByb2Nlc3NVc2FnZXMoZmluYWwgU3RyaW5nIGV4cGVjdGVkTWVzc2FnZSkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgY29uZmlndXJlQnlGaWxlKCIvcmVmYWN0b3JpbmcvaW5saW5lVG9Bbm9ueW1vdXNDbGFzcy8iICsgZ2V0VGVzdE5hbWUoZmFsc2UpICsgIi5qYXZhIik7CisgICAgUHNpRWxlbWVudCBlbGVtZW50ID0gVGFyZ2V0RWxlbWVudFV0aWxCYXNlLmZpbmRUYXJnZXRFbGVtZW50KG15RWRpdG9yLCBUYXJnZXRFbGVtZW50VXRpbEJhc2UKKyAgICAgIC5FTEVNRU5UX05BTUVfQUNDRVBURUQgfCBUYXJnZXRFbGVtZW50VXRpbEJhc2UuUkVGRVJFTkNFRF9FTEVNRU5UX0FDQ0VQVEVEKTsKKyAgICBhc3NlcnRJbnN0YW5jZU9mKGVsZW1lbnQsIFBzaUNsYXNzLmNsYXNzKTsKKyAgICBmaW5hbCBQc2lDbGFzcyBwc2lDbGFzcyA9IChQc2lDbGFzcyllbGVtZW50OworICAgIGFzc2VydEVxdWFscyhleHBlY3RlZE1lc3NhZ2UsIElubGluZVRvQW5vbnltb3VzQ2xhc3NIYW5kbGVyLmdldENhbm5vdElubGluZU1lc3NhZ2UocHNpQ2xhc3MpKTsKKyAgfQorCisgIHByaXZhdGUgSW5saW5lVG9Bbm9ueW1vdXNDbGFzc1Byb2Nlc3NvciBwcmVwYXJlUHJvY2Vzc29yKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgU3RyaW5nIG5hbWUgPSBnZXRUZXN0TmFtZShmYWxzZSk7CisgICAgQE5vbk5scyBTdHJpbmcgZmlsZU5hbWUgPSAiL3JlZmFjdG9yaW5nL2lubGluZVRvQW5vbnltb3VzQ2xhc3MvIiArIG5hbWUgKyAiLmphdmEiOworICAgIGNvbmZpZ3VyZUJ5RmlsZShmaWxlTmFtZSk7CisgICAgUHNpRWxlbWVudCBlbGVtZW50ID0gVGFyZ2V0RWxlbWVudFV0aWxCYXNlLmZpbmRUYXJnZXRFbGVtZW50KG15RWRpdG9yLCBUYXJnZXRFbGVtZW50VXRpbEJhc2UKKyAgICAgIC5FTEVNRU5UX05BTUVfQUNDRVBURUQgfCBUYXJnZXRFbGVtZW50VXRpbEJhc2UuUkVGRVJFTkNFRF9FTEVNRU5UX0FDQ0VQVEVEKTsKKyAgICBhc3NlcnRJbnN0YW5jZU9mKGVsZW1lbnQsIFBzaUNsYXNzLmNsYXNzKTsKKworICAgIGFzc2VydEVxdWFscyhudWxsLCBJbmxpbmVUb0Fub255bW91c0NsYXNzSGFuZGxlci5nZXRDYW5ub3RJbmxpbmVNZXNzYWdlKChQc2lDbGFzcykgZWxlbWVudCkpOworICAgIHJldHVybiBuZXcgSW5saW5lVG9Bbm9ueW1vdXNDbGFzc1Byb2Nlc3NvcihnZXRQcm9qZWN0KCksIChQc2lDbGFzcykgZWxlbWVudCwgbnVsbCwgZmFsc2UsIGZhbHNlLCBmYWxzZSk7CisgIH0KKworICBwcml2YXRlIHZvaWQgcGVyZm9ybUFjdGlvbihmaW5hbCBib29sZWFuIGlubGluZVRoaXNPbmx5LCBmaW5hbCBib29sZWFuIHNlYXJjaEluTm9uSmF2YUZpbGVzKSB7CisgICAgUHNpRWxlbWVudCBlbGVtZW50ID0gVGFyZ2V0RWxlbWVudFV0aWxCYXNlCisgICAgICAuZmluZFRhcmdldEVsZW1lbnQobXlFZGl0b3IsIFRhcmdldEVsZW1lbnRVdGlsQmFzZS5FTEVNRU5UX05BTUVfQUNDRVBURUQgfCBUYXJnZXRFbGVtZW50VXRpbEJhc2UuUkVGRVJFTkNFRF9FTEVNRU5UX0FDQ0VQVEVEKTsKKyAgICBQc2lDYWxsIGNhbGxUb0lubGluZSA9IElubGluZVRvQW5vbnltb3VzQ2xhc3NIYW5kbGVyLmZpbmRDYWxsVG9JbmxpbmUobXlFZGl0b3IpOworICAgIFBzaUNsYXNzIGNsYXNzVG9JbmxpbmUgPSAoUHNpQ2xhc3MpIGVsZW1lbnQ7CisgICAgYXNzZXJ0RXF1YWxzKG51bGwsIElubGluZVRvQW5vbnltb3VzQ2xhc3NIYW5kbGVyLmdldENhbm5vdElubGluZU1lc3NhZ2UoY2xhc3NUb0lubGluZSkpOworICAgIGZpbmFsIElubGluZVRvQW5vbnltb3VzQ2xhc3NQcm9jZXNzb3IgcHJvY2Vzc29yID0gbmV3IElubGluZVRvQW5vbnltb3VzQ2xhc3NQcm9jZXNzb3IoZ2V0UHJvamVjdCgpLCBjbGFzc1RvSW5saW5lLCBjYWxsVG9JbmxpbmUsIGlubGluZVRoaXNPbmx5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFsc2UsIHNlYXJjaEluTm9uSmF2YUZpbGVzKTsKKyAgICBVc2FnZUluZm9bXSB1c2FnZXMgPSBwcm9jZXNzb3IuZmluZFVzYWdlcygpOworICAgIE11bHRpTWFwPFBzaUVsZW1lbnQsIFN0cmluZz4gY29uZmxpY3RzID0gcHJvY2Vzc29yLmdldENvbmZsaWN0cyh1c2FnZXMpOworICAgIGFzc2VydEVxdWFscygwLCBjb25mbGljdHMuc2l6ZSgpKTsKKyAgICBwcm9jZXNzb3IucnVuKCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0Q2FuQmVJbnZva2VkT25SZWZlcmVuY2UoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3RDYW5CZUludm9rZWRPblJlZmVyZW5jZSh0cnVlKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RDYW5CZUludm9rZWRPblJlZmVyZW5jZTEoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3RDYW5CZUludm9rZWRPblJlZmVyZW5jZSh0cnVlKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RDYW5CZUludm9rZWRPblJlZmVyZW5jZVN1YnN0aXR1dGlvbigpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdENhbkJlSW52b2tlZE9uUmVmZXJlbmNlKHRydWUpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdENhbkJlSW52b2tlZE9uUmVmZXJlbmNlU3Vic3RpdHV0aW9uMSgpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdENhbkJlSW52b2tlZE9uUmVmZXJlbmNlKHRydWUpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdENhbkJlSW52b2tlZE9uUmVmZXJlbmNlVmFyYXJncygpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdENhbkJlSW52b2tlZE9uUmVmZXJlbmNlKHRydWUpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdENhbnRCZUludm9rZWRPblJlZmVyZW5jZSgpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdENhbkJlSW52b2tlZE9uUmVmZXJlbmNlKGZhbHNlKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RDYW50QmVJbnZva2VkT25SZWZlcmVuY2UxKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0Q2FuQmVJbnZva2VkT25SZWZlcmVuY2UoZmFsc2UpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdENhbnRCZUludm9rZWRPblJlZmVyZW5jZVJldHVyblN0YXRlbWVudCgpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdENhbkJlSW52b2tlZE9uUmVmZXJlbmNlKGZhbHNlKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RDYW5CZUludm9rZWRPblJlZmVyZW5jZVN5bmNTdGF0ZW1lbnQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3RDYW5CZUludm9rZWRPblJlZmVyZW5jZSh0cnVlKTsKKyAgfQorCisgIHByaXZhdGUgdm9pZCBkb1Rlc3RDYW5CZUludm9rZWRPblJlZmVyZW5jZShib29sZWFuIGNhbkJlSW52b2tlZE9uUmVmZXJlbmNlKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBjb25maWd1cmVCeUZpbGUoIi9yZWZhY3RvcmluZy9pbmxpbmVUb0Fub255bW91c0NsYXNzLyIgKyBnZXRUZXN0TmFtZShmYWxzZSkgKyAiLmphdmEiKTsKKyAgICBQc2lFbGVtZW50IGVsZW1lbnQgPSBUYXJnZXRFbGVtZW50VXRpbEJhc2UKKyAgICAgIC5maW5kVGFyZ2V0RWxlbWVudChteUVkaXRvciwgVGFyZ2V0RWxlbWVudFV0aWxCYXNlLkVMRU1FTlRfTkFNRV9BQ0NFUFRFRCB8IFRhcmdldEVsZW1lbnRVdGlsQmFzZS5SRUZFUkVOQ0VEX0VMRU1FTlRfQUNDRVBURUQpOworICAgIFBzaUNhbGwgY2FsbFRvSW5saW5lID0gSW5saW5lVG9Bbm9ueW1vdXNDbGFzc0hhbmRsZXIuZmluZENhbGxUb0lubGluZShteUVkaXRvcik7CisgICAgUHNpQ2xhc3MgY2xhc3NUb0lubGluZSA9IChQc2lDbGFzcykgZWxlbWVudDsKKyAgICBhc3NlcnRFcXVhbHMobnVsbCwgSW5saW5lVG9Bbm9ueW1vdXNDbGFzc0hhbmRsZXIuZ2V0Q2Fubm90SW5saW5lTWVzc2FnZShjbGFzc1RvSW5saW5lKSk7CisgICAgZmluYWwgUHNpQ2xhc3NUeXBlIHN1cGVyVHlwZSA9IElubGluZVRvQW5vbnltb3VzQ2xhc3NQcm9jZXNzb3IuZ2V0U3VwZXJUeXBlKGNsYXNzVG9JbmxpbmUpOworICAgIGFzc2VydFRydWUoc3VwZXJUeXBlICE9IG51bGwpOworICAgIGFzc2VydEVxdWFscyhjYW5CZUludm9rZWRPblJlZmVyZW5jZSwgSW5saW5lVG9Bbm9ueW1vdXNDbGFzc0hhbmRsZXIuY2FuQmVJbnZva2VkT25SZWZlcmVuY2UoY2FsbFRvSW5saW5lLCBzdXBlclR5cGUpKTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9yZWZhY3RvcmluZy9taWdyYXRpb24vTWlncmF0aW9uVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL3JlZmFjdG9yaW5nL21pZ3JhdGlvbi9NaWdyYXRpb25UZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjY2ZjY5NQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9yZWZhY3RvcmluZy9taWdyYXRpb24vTWlncmF0aW9uVGVzdC5qYXZhCkBAIC0wLDAgKzEsNjIgQEAKK3BhY2thZ2UgY29tLmludGVsbGlqLnJlZmFjdG9yaW5nLm1pZ3JhdGlvbjsKKworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLmZpbGVFZGl0b3IuRmlsZURvY3VtZW50TWFuYWdlcjsKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS52ZnMuVmlydHVhbEZpbGU7CitpbXBvcnQgY29tLmludGVsbGlqLnJlZmFjdG9yaW5nLk11bHRpRmlsZVRlc3RDYXNlOworaW1wb3J0IGNvbS5pbnRlbGxpai5KYXZhVGVzdFV0aWw7CisKKy8qKgorICogQGF1dGhvciBkc2wKKyAqLworcHVibGljIGNsYXNzIE1pZ3JhdGlvblRlc3QgZXh0ZW5kcyBNdWx0aUZpbGVUZXN0Q2FzZSB7CisgIHB1YmxpYyB2b2lkIHRlc3RVbmV4aXN0aW5nQ2xhc3NJblVuZXhpc3RpbmdQYWNrYWdlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KGNyZWF0ZUFjdGlvbihuZXcgTWlncmF0aW9uTWFwKG5ldyBNaWdyYXRpb25NYXBFbnRyeVtdeworICAgICAgbmV3IE1pZ3JhdGlvbk1hcEVudHJ5KCJxcXEuYWFhLllhaG9vIiwgImphdmEubGFuZy5TdHJpbmciLCBNaWdyYXRpb25NYXBFbnRyeS5DTEFTUywgZmFsc2UpCisgICAgfSkpKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RUb05vbkV4aXN0ZW50Q2xhc3MoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoY3JlYXRlQWN0aW9uKG5ldyBNaWdyYXRpb25NYXAobmV3IE1pZ3JhdGlvbk1hcEVudHJ5W117CisgICAgICBuZXcgTWlncmF0aW9uTWFwRW50cnkoInFxcS5hYWEuWWFob28iLCAienp6LmJiYi5RUVEiLCBNaWdyYXRpb25NYXBFbnRyeS5DTEFTUywgZmFsc2UpCisgICAgfSkpKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RQYWNrYWdlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KGNyZWF0ZUFjdGlvbihuZXcgTWlncmF0aW9uTWFwKG5ldyBNaWdyYXRpb25NYXBFbnRyeVtdeworICAgICAgbmV3IE1pZ3JhdGlvbk1hcEVudHJ5KCJxcXEiLCAiamF2YS5sYW5nIiwgTWlncmF0aW9uTWFwRW50cnkuUEFDS0FHRSwgdHJ1ZSkKKyAgICB9KSkpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFBhY2thZ2VUb05vbkV4aXN0ZW50UGFja2FnZSgpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdChjcmVhdGVBY3Rpb24obmV3IE1pZ3JhdGlvbk1hcChuZXcgTWlncmF0aW9uTWFwRW50cnlbXXsKKyAgICAgIG5ldyBNaWdyYXRpb25NYXBFbnRyeSgicXFxIiwgInp6ei5iYmIiLCBNaWdyYXRpb25NYXBFbnRyeS5QQUNLQUdFLCB0cnVlKQorICAgIH0pKSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0VHdvQ2xhc3NlcygpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdChjcmVhdGVBY3Rpb24obmV3IE1pZ3JhdGlvbk1hcChuZXcgTWlncmF0aW9uTWFwRW50cnlbXXsKKyAgICAgIG5ldyBNaWdyYXRpb25NYXBFbnRyeSgiQSIsICJBMSIsIE1pZ3JhdGlvbk1hcEVudHJ5LkNMQVNTLCB0cnVlKSwKKyAgICAgIG5ldyBNaWdyYXRpb25NYXBFbnRyeSgiQiIsICJCMSIsIE1pZ3JhdGlvbk1hcEVudHJ5LkNMQVNTLCB0cnVlKQorICAgIH0pKSk7CisgIH0KKworICBwcml2YXRlIE11bHRpRmlsZVRlc3RDYXNlLlBlcmZvcm1BY3Rpb24gY3JlYXRlQWN0aW9uKGZpbmFsIE1pZ3JhdGlvbk1hcCBtaWdyYXRpb25NYXApIHsKKyAgICByZXR1cm4gbmV3IE11bHRpRmlsZVRlc3RDYXNlLlBlcmZvcm1BY3Rpb24oKSB7CisgICAgICBAT3ZlcnJpZGUKKyAgICAgIHB1YmxpYyB2b2lkIHBlcmZvcm1BY3Rpb24oVmlydHVhbEZpbGUgcm9vdERpciwgVmlydHVhbEZpbGUgcm9vdEFmdGVyKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgbmV3IE1pZ3JhdGlvblByb2Nlc3NvcihteVByb2plY3QsIG1pZ3JhdGlvbk1hcCkucnVuKCk7CisgICAgICAgIEZpbGVEb2N1bWVudE1hbmFnZXIuZ2V0SW5zdGFuY2UoKS5zYXZlQWxsRG9jdW1lbnRzKCk7CisgICAgICB9CisgICAgfTsKKyAgfQorCisgIEBPdmVycmlkZQorICBwcm90ZWN0ZWQgU3RyaW5nIGdldFRlc3RSb290KCkgeworICAgIHJldHVybiAiL3JlZmFjdG9yaW5nL21pZ3JhdGlvbi8iOworICB9CisKKyAgQE92ZXJyaWRlCisgIHByb3RlY3RlZCBTdHJpbmcgZ2V0VGVzdERhdGFQYXRoKCkgeworICAgIHJldHVybiBKYXZhVGVzdFV0aWwuZ2V0SmF2YVRlc3REYXRhUGF0aCgpOworICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovcmVmYWN0b3JpbmcvbW92ZU1ldGhvZC9Nb3ZlSW5zdGFuY2VNZXRob2RUZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovcmVmYWN0b3JpbmcvbW92ZU1ldGhvZC9Nb3ZlSW5zdGFuY2VNZXRob2RUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzIyMzRhOQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9yZWZhY3RvcmluZy9tb3ZlTWV0aG9kL01vdmVJbnN0YW5jZU1ldGhvZFRlc3QuamF2YQpAQCAtMCwwICsxLDEyMCBAQAorcGFja2FnZSBjb20uaW50ZWxsaWoucmVmYWN0b3JpbmcubW92ZU1ldGhvZDsKKworaW1wb3J0IGNvbS5pbnRlbGxpai5KYXZhVGVzdFV0aWw7CitpbXBvcnQgY29tLmludGVsbGlqLmNvZGVJbnNpZ2h0LlRhcmdldEVsZW1lbnRVdGlsQmFzZTsKK2ltcG9ydCBjb20uaW50ZWxsaWoucHNpLlBzaUVsZW1lbnQ7CitpbXBvcnQgY29tLmludGVsbGlqLnBzaS5Qc2lNZXRob2Q7CitpbXBvcnQgY29tLmludGVsbGlqLnBzaS5Qc2lWYXJpYWJsZTsKK2ltcG9ydCBjb20uaW50ZWxsaWoucmVmYWN0b3JpbmcuQmFzZVJlZmFjdG9yaW5nUHJvY2Vzc29yOworaW1wb3J0IGNvbS5pbnRlbGxpai5yZWZhY3RvcmluZy5MaWdodFJlZmFjdG9yaW5nVGVzdENhc2U7CitpbXBvcnQgY29tLmludGVsbGlqLnJlZmFjdG9yaW5nLm1vdmUubW92ZUluc3RhbmNlTWV0aG9kLk1vdmVJbnN0YW5jZU1ldGhvZEhhbmRsZXI7CitpbXBvcnQgY29tLmludGVsbGlqLnJlZmFjdG9yaW5nLm1vdmUubW92ZUluc3RhbmNlTWV0aG9kLk1vdmVJbnN0YW5jZU1ldGhvZFByb2Nlc3NvcjsKK2ltcG9ydCBjb20uaW50ZWxsaWoudXRpbC5WaXNpYmlsaXR5VXRpbDsKK2ltcG9ydCBvcmcuamV0YnJhaW5zLmFubm90YXRpb25zLk5vdE51bGw7CisKKy8qKgorICogQGF1dGhvciB2ZW4KKyAqLworcHVibGljIGNsYXNzIE1vdmVJbnN0YW5jZU1ldGhvZFRlc3QgZXh0ZW5kcyBMaWdodFJlZmFjdG9yaW5nVGVzdENhc2UgeworCisgIHB1YmxpYyB2b2lkIHRlc3RTaW1wbGUoKSB0aHJvd3MgRXhjZXB0aW9uIHsgZG9UZXN0KHRydWUsIDApOyB9CisKKyAgcHVibGljIHZvaWQgdGVzdFNpbXBsZVdpdGhUYXJnZXRGaWVsZCgpIHRocm93cyBFeGNlcHRpb24geyBkb1Rlc3QoZmFsc2UsIDEpOyB9CisKKyAgcHVibGljIHZvaWQgdGVzdEludGVyZmFjZSgpIHRocm93cyBFeGNlcHRpb24geyBkb1Rlc3QodHJ1ZSwgMCk7IH0KKworICBwdWJsaWMgdm9pZCB0ZXN0V2l0aElubmVyKCkgdGhyb3dzIEV4Y2VwdGlvbiB7IGRvVGVzdCh0cnVlLCAwKTsgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RKYXZhZG9jKCkgdGhyb3dzIEV4Y2VwdGlvbiB7IGRvVGVzdCh0cnVlLCAwKTsgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RSZWN1cnNpdmUoKSB0aHJvd3MgRXhjZXB0aW9uIHsgZG9UZXN0KHRydWUsIDApOyB9CisKKyAgcHVibGljIHZvaWQgdGVzdFJlY3Vyc2l2ZTEoKSB0aHJvd3MgRXhjZXB0aW9uIHsgZG9UZXN0KHRydWUsIDApOyB9CisKKyAgcHVibGljIHZvaWQgdGVzdFF1YWxpZmllZFRoaXMoKSB0aHJvd3MgRXhjZXB0aW9uIHsgZG9UZXN0KHRydWUsIDApOyB9CisKKyAgcHVibGljIHZvaWQgdGVzdFF1YWxpZnlUaGlzSGllcmFyY2h5KCkgdGhyb3dzIEV4Y2VwdGlvbiB7ZG9UZXN0KHRydWUsIDApO30KKworICBwdWJsaWMgdm9pZCB0ZXN0UXVhbGlmeUZpZWxkKCkgdGhyb3dzIEV4Y2VwdGlvbiB7ZG9UZXN0KGZhbHNlLCAwKTt9CisKKyAgcHVibGljIHZvaWQgdGVzdEFub255bW91c0hpZXJhcmNoeSgpIHRocm93cyBFeGNlcHRpb24ge2RvVGVzdCh0cnVlLCAwKTt9CisKKyAgcHVibGljIHZvaWQgdGVzdFR3b1BhcmFtcygpIHRocm93cyBFeGNlcHRpb24geyBkb1Rlc3QodHJ1ZSwgMCk7IH0KKworICBwdWJsaWMgdm9pZCB0ZXN0Tm9UaGlzUGFyYW0oKSB0aHJvd3MgRXhjZXB0aW9uIHsgZG9UZXN0KGZhbHNlLCAwKTsgfQorCisgIHB1YmxpYyB2b2lkIHRlc3ROb0dlbmVyaWNzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7IGRvVGVzdChmYWxzZSwgMCk7IH0KKworICBwdWJsaWMgdm9pZCB0ZXN0UXVhbGlmaWVyVG9BcmcxKCkgdGhyb3dzIEV4Y2VwdGlvbiB7IGRvVGVzdCh0cnVlLCAwKTsgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RRdWFsaWZpZXJUb0FyZzIoKSB0aHJvd3MgRXhjZXB0aW9uIHsgZG9UZXN0KHRydWUsIDApOyB9CisKKyAgcHVibGljIHZvaWQgdGVzdFF1YWxpZmllclRvQXJnMygpIHRocm93cyBFeGNlcHRpb24geyBkb1Rlc3QodHJ1ZSwgMCk7IH0KKworICBwdWJsaWMgdm9pZCB0ZXN0SURFQURFVjExMjU3KCkgdGhyb3dzIEV4Y2VwdGlvbiB7IGRvVGVzdCh0cnVlLCAwKTsgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RUaGlzSW5Bbm9ueW1vdXMoKSB0aHJvd3MgRXhjZXB0aW9uIHsgZG9UZXN0KHRydWUsIDApOyB9CisKKyAgcHVibGljIHZvaWQgdGVzdE92ZXJsb2FkaW5nTWV0aG9kcygpIHRocm93cyBFeGNlcHRpb24geyBkb1Rlc3QodHJ1ZSwgMCk7IH0KKyAgcHVibGljIHZvaWQgdGVzdE92ZXJsb2FkaW5nTWV0aG9kczEoKSB0aHJvd3MgRXhjZXB0aW9uIHsgZG9UZXN0KHRydWUsIDApOyB9CisKKyAgcHVibGljIHZvaWQgdGVzdFBvbHlhZGljRXhwcigpIHRocm93cyBFeGNlcHRpb24geyBkb1Rlc3QodHJ1ZSwgMCk7IH0KKworICBwdWJsaWMgdm9pZCB0ZXN0RXNjYWxhdGVWaXNpYmlsaXR5KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KHRydWUsIDAsIFZpc2liaWxpdHlVdGlsLkVTQ0FMQVRFX1ZJU0lCSUxJVFkpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFNhbWVOYW1lcygpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdCh0cnVlLCAwKTsKKyAgfQorICBwdWJsaWMgdm9pZCB0ZXN0Q29ycmVjdFRoaXNSZWZzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZG9UZXN0KHRydWUsIDApOworICB9CisgICAKKyAgcHVibGljIHZvaWQgdGVzdFNhbWVOYW1lc1JlY3Vyc2lvbigpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdCh0cnVlLCAwKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RRdWFsaWZ5RmllbGRBY2Nlc3MoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoZmFsc2UsIDApOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFN0cmlwRmllbGRRdWFsaWZpZXIoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkb1Rlc3QoZmFsc2UsIDApOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdE1ldGhvZFJlZmVyZW5jZSgpIHRocm93cyBFeGNlcHRpb24geworICAgIHRyeSB7CisgICAgICBkb1Rlc3QodHJ1ZSwgMCk7CisgICAgICBmYWlsKCJDb25mbGljdCB3YXMgbm90IGRldGVjdGVkIik7CisgICAgfQorICAgIGNhdGNoIChCYXNlUmVmYWN0b3JpbmdQcm9jZXNzb3IuQ29uZmxpY3RzSW5UZXN0c0V4Y2VwdGlvbiBlKSB7CisgICAgICBhc3NlcnRFcXVhbHMoIk1ldGhvZCByZWZlcmVuY2Ugd291bGQgYmUgYnJva2VuIGFmdGVyIG1vdmUiLCBlLmdldE1lc3NhZ2UoKSk7CisgICAgfQorICB9CisKKyAgcHJpdmF0ZSB2b2lkIGRvVGVzdChib29sZWFuIGlzVGFyZ2V0UGFyYW1ldGVyLCBmaW5hbCBpbnQgdGFyZ2V0SW5kZXgpIHRocm93cyBFeGNlcHRpb24geworICAgIGRvVGVzdChpc1RhcmdldFBhcmFtZXRlciwgdGFyZ2V0SW5kZXgsIG51bGwpOworICB9CisKKyAgcHJpdmF0ZSB2b2lkIGRvVGVzdChib29sZWFuIGlzVGFyZ2V0UGFyYW1ldGVyLCBmaW5hbCBpbnQgdGFyZ2V0SW5kZXgsIGZpbmFsIFN0cmluZyBuZXdWaXNpYmlsaXR5KSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBmaW5hbCBTdHJpbmcgZmlsZVBhdGggPSAiL3JlZmFjdG9yaW5nL21vdmVJbnN0YW5jZU1ldGhvZC8iICsgZ2V0VGVzdE5hbWUoZmFsc2UpICsgIi5qYXZhIjsKKyAgICBjb25maWd1cmVCeUZpbGUoZmlsZVBhdGgpOworICAgIGZpbmFsIFBzaUVsZW1lbnQgdGFyZ2V0RWxlbWVudCA9IFRhcmdldEVsZW1lbnRVdGlsQmFzZS5maW5kVGFyZ2V0RWxlbWVudChnZXRFZGl0b3IoKSwgVGFyZ2V0RWxlbWVudFV0aWxCYXNlLkVMRU1FTlRfTkFNRV9BQ0NFUFRFRCk7CisgICAgYXNzZXJ0VHJ1ZSgiPGNhcmV0PiBpcyBub3Qgb24gbWV0aG9kIG5hbWUiLCB0YXJnZXRFbGVtZW50IGluc3RhbmNlb2YgUHNpTWV0aG9kKTsKKyAgICBQc2lNZXRob2QgbWV0aG9kID0gKFBzaU1ldGhvZCkgdGFyZ2V0RWxlbWVudDsKKyAgICBmaW5hbCBQc2lWYXJpYWJsZSB0YXJnZXRWYXJpYWJsZSA9IGlzVGFyZ2V0UGFyYW1ldGVyID8gbWV0aG9kLmdldFBhcmFtZXRlckxpc3QoKS5nZXRQYXJhbWV0ZXJzKClbdGFyZ2V0SW5kZXhdIDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ldGhvZC5nZXRDb250YWluaW5nQ2xhc3MoKS5nZXRGaWVsZHMoKVt0YXJnZXRJbmRleF07CisgICAgbmV3IE1vdmVJbnN0YW5jZU1ldGhvZFByb2Nlc3NvcihnZXRQcm9qZWN0KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXRob2QsIHRhcmdldFZhcmlhYmxlLCBuZXdWaXNpYmlsaXR5LCBNb3ZlSW5zdGFuY2VNZXRob2RIYW5kbGVyLnN1Z2dlc3RQYXJhbWV0ZXJOYW1lcyAobWV0aG9kLCB0YXJnZXRWYXJpYWJsZSkpLnJ1bigpOworICAgIGNoZWNrUmVzdWx0QnlGaWxlKGZpbGVQYXRoICsgIi5hZnRlciIpOworCisgIH0KKworICBATm90TnVsbAorICBAT3ZlcnJpZGUKKyAgcHJvdGVjdGVkIFN0cmluZyBnZXRUZXN0RGF0YVBhdGgoKSB7CisgICAgcmV0dXJuIEphdmFUZXN0VXRpbC5nZXRKYXZhVGVzdERhdGFQYXRoKCk7CisgIH0KKworfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL3Jvb3RzL0V4cG9ydGluZ01vZHVsZXNUZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovcm9vdHMvRXhwb3J0aW5nTW9kdWxlc1Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ODVjOTk4Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL3Jvb3RzL0V4cG9ydGluZ01vZHVsZXNUZXN0LmphdmEKQEAgLTAsMCArMSw4MSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDAwLTIwMTIgSmV0QnJhaW5zIHMuci5vLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KK3BhY2thZ2UgY29tLmludGVsbGlqLnJvb3RzOworCitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkuYXBwbGljYXRpb24uQXBwbGljYXRpb25NYW5hZ2VyOworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLmFwcGxpY2F0aW9uLmV4LlBhdGhNYW5hZ2VyRXg7CitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkubW9kdWxlLk1vZGlmaWFibGVNb2R1bGVNb2RlbDsKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS5tb2R1bGUuTW9kdWxlOworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLm1vZHVsZS5Nb2R1bGVNYW5hZ2VyOworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLm1vZHVsZS5TdGRNb2R1bGVUeXBlczsKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS5yb290cy4qOworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLnZmcy5Mb2NhbEZpbGVTeXN0ZW07CitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkudmZzLlZpcnR1YWxGaWxlOworaW1wb3J0IGNvbS5pbnRlbGxpai5wc2kuSmF2YVBzaUZhY2FkZTsKK2ltcG9ydCBjb20uaW50ZWxsaWoucHNpLlBzaUNsYXNzOworaW1wb3J0IGNvbS5pbnRlbGxpai5wc2kuc2VhcmNoLkdsb2JhbFNlYXJjaFNjb3BlOworaW1wb3J0IGNvbS5pbnRlbGxpai50ZXN0RnJhbWV3b3JrLklkZWFUZXN0Q2FzZTsKK2ltcG9ydCBjb20uaW50ZWxsaWoudGVzdEZyYW1ld29yay5Qc2lUZXN0VXRpbDsKKworaW1wb3J0IGphdmEuaW8uRmlsZTsKKworLyoqCisgKiBAYXV0aG9yIGRzbAorICovCitwdWJsaWMgY2xhc3MgRXhwb3J0aW5nTW9kdWxlc1Rlc3QgZXh0ZW5kcyBJZGVhVGVzdENhc2UgeworICBwdWJsaWMgdm9pZCB0ZXN0MSgpIHRocm93cyBFeGNlcHRpb24geworICAgIGZpbmFsIFN0cmluZyByb290UGF0aCA9IFBhdGhNYW5hZ2VyRXguZ2V0VGVzdERhdGFQYXRoKCkucmVwbGFjZShGaWxlLnNlcGFyYXRvckNoYXIsICcvJykgKyAiL21vZHVsZVJvb3RNYW5hZ2VyL2V4cG9ydGVkTW9kdWxlcy8iOworICAgIGZpbmFsIFZpcnR1YWxGaWxlIHRlc3RSb290ID0gTG9jYWxGaWxlU3lzdGVtLmdldEluc3RhbmNlKCkucmVmcmVzaEFuZEZpbmRGaWxlQnlQYXRoKHJvb3RQYXRoKTsKKyAgICBhc3NlcnROb3ROdWxsKHRlc3RSb290KTsKKworICAgIEFwcGxpY2F0aW9uTWFuYWdlci5nZXRBcHBsaWNhdGlvbigpLnJ1bldyaXRlQWN0aW9uKG5ldyBSdW5uYWJsZSgpIHsKKyAgICAgIEBPdmVycmlkZQorICAgICAgcHVibGljIHZvaWQgcnVuKCkgeworICAgICAgICBmaW5hbCBNb2RpZmlhYmxlTW9kdWxlTW9kZWwgbW9kdWxlTW9kZWwgPSBNb2R1bGVNYW5hZ2VyLmdldEluc3RhbmNlKG15UHJvamVjdCkuZ2V0TW9kaWZpYWJsZU1vZGVsKCk7CisgICAgICAgIGZpbmFsIE1vZHVsZSBtb2R1bGVBID0gbW9kdWxlTW9kZWwubmV3TW9kdWxlKCJBLmltbCIsIFN0ZE1vZHVsZVR5cGVzLkpBVkEuZ2V0SWQoKSk7CisgICAgICAgIGZpbmFsIE1vZHVsZSBtb2R1bGVCID0gbW9kdWxlTW9kZWwubmV3TW9kdWxlKCJCLmltbCIsIFN0ZE1vZHVsZVR5cGVzLkpBVkEuZ2V0SWQoKSk7CisgICAgICAgIGZpbmFsIE1vZHVsZSBtb2R1bGVDID0gbW9kdWxlTW9kZWwubmV3TW9kdWxlKCJDLmltbCIsIFN0ZE1vZHVsZVR5cGVzLkpBVkEuZ2V0SWQoKSk7CisgICAgICAgIG1vZHVsZU1vZGVsLmNvbW1pdCgpOworCisgICAgICAgIGNvbmZpZ3VyZU1vZHVsZShtb2R1bGVBLCB0ZXN0Um9vdCwgIkEiKTsKKyAgICAgICAgY29uZmlndXJlTW9kdWxlKG1vZHVsZUIsIHRlc3RSb290LCAiQiIpOworICAgICAgICBjb25maWd1cmVNb2R1bGUobW9kdWxlQywgdGVzdFJvb3QsICJDIik7CisKKyAgICAgICAgTW9kdWxlUm9vdE1vZGlmaWNhdGlvblV0aWwuYWRkRGVwZW5kZW5jeShtb2R1bGVCLCBtb2R1bGVBLCBEZXBlbmRlbmN5U2NvcGUuQ09NUElMRSwgdHJ1ZSk7CisKKyAgICAgICAgTW9kdWxlUm9vdE1vZGlmaWNhdGlvblV0aWwuYWRkRGVwZW5kZW5jeShtb2R1bGVDLCBtb2R1bGVCKTsKKworICAgICAgICBmaW5hbCBQc2lDbGFzcyBwQ0NsYXNzID0KKyAgICAgICAgICBKYXZhUHNpRmFjYWRlLmdldEluc3RhbmNlKG15UHJvamVjdCkuZmluZENsYXNzKCJwLkMiLCBHbG9iYWxTZWFyY2hTY29wZS5tb2R1bGVXaXRoRGVwZW5kZW5jaWVzQW5kTGlicmFyaWVzU2NvcGUobW9kdWxlQykpOworICAgICAgICBhc3NlcnROb3ROdWxsKHBDQ2xhc3MpOworCisgICAgICAgIGZpbmFsIFBzaUNsYXNzIHBBQ2xhc3MgPQorICAgICAgICAgIEphdmFQc2lGYWNhZGUuZ2V0SW5zdGFuY2UobXlQcm9qZWN0KS5maW5kQ2xhc3MoInAuQSIsIEdsb2JhbFNlYXJjaFNjb3BlLm1vZHVsZVdpdGhEZXBlbmRlbmNpZXNBbmRMaWJyYXJpZXNTY29wZShtb2R1bGVCKSk7CisgICAgICAgIGFzc2VydE5vdE51bGwocEFDbGFzcyk7CisKKyAgICAgICAgZmluYWwgUHNpQ2xhc3MgcEFDbGFzczIgPQorICAgICAgICAgIEphdmFQc2lGYWNhZGUuZ2V0SW5zdGFuY2UobXlQcm9qZWN0KS5maW5kQ2xhc3MoInAuQSIsIEdsb2JhbFNlYXJjaFNjb3BlLm1vZHVsZVdpdGhEZXBlbmRlbmNpZXNBbmRMaWJyYXJpZXNTY29wZShtb2R1bGVDKSk7CisgICAgICAgIGFzc2VydE5vdE51bGwocEFDbGFzczIpOworICAgICAgfQorICAgIH0pOworICB9CisKKyAgcHJpdmF0ZSBzdGF0aWMgdm9pZCBjb25maWd1cmVNb2R1bGUoZmluYWwgTW9kdWxlIG1vZHVsZSwgZmluYWwgVmlydHVhbEZpbGUgdGVzdFJvb3QsIGZpbmFsIFN0cmluZyBuYW1lKSB7CisgICAgZmluYWwgVmlydHVhbEZpbGUgY29udGVudFJvb3QgPSB0ZXN0Um9vdC5maW5kQ2hpbGQobmFtZSk7CisgICAgUHNpVGVzdFV0aWwuYWRkQ29udGVudFJvb3QobW9kdWxlLCBjb250ZW50Um9vdCk7CisgICAgUHNpVGVzdFV0aWwuYWRkU291cmNlUm9vdChtb2R1bGUsIGNvbnRlbnRSb290LmZpbmRDaGlsZCgic3JjIikpOworICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovcm9vdHMvSW5oZXJpdGVkSmRrVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL3Jvb3RzL0luaGVyaXRlZEpka1Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YTU0YmEwCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL3Jvb3RzL0luaGVyaXRlZEpka1Rlc3QuamF2YQpAQCAtMCwwICsxLDEzMSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDAwLTIwMTIgSmV0QnJhaW5zIHMuci5vLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KK3BhY2thZ2UgY29tLmludGVsbGlqLnJvb3RzOworCitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkuYXBwbGljYXRpb24uQXBwbGljYXRpb25NYW5hZ2VyOworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLnByb2plY3RSb290cy5Qcm9qZWN0SmRrVGFibGU7CitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkucHJvamVjdFJvb3RzLlNkazsKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS5wcm9qZWN0Um9vdHMuaW1wbC5KYXZhU2RrSW1wbDsKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS5yb290cy4qOworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLnJvb3RzLmV4LlByb2plY3RSb290TWFuYWdlckV4OworaW1wb3J0IGNvbS5pbnRlbGxpai50ZXN0RnJhbWV3b3JrLklkZWFUZXN0VXRpbDsKK2ltcG9ydCBjb20uaW50ZWxsaWoudGVzdEZyYW1ld29yay5Nb2R1bGVUZXN0Q2FzZTsKK2ltcG9ydCBqdW5pdC5mcmFtZXdvcmsuQXNzZXJ0OworCisvKioKKyAqIEBhdXRob3IgZHNsCisgKi8KK3B1YmxpYyBjbGFzcyBJbmhlcml0ZWRKZGtUZXN0IGV4dGVuZHMgTW9kdWxlVGVzdENhc2UgeworICBAT3ZlcnJpZGUKKyAgcHJvdGVjdGVkIHZvaWQgc2V0VXBKZGsoKSB7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0MSgpIHRocm93cyBFeGNlcHRpb24geworICAgIGZpbmFsIFNkayBqZGsgPSBJZGVhVGVzdFV0aWwuZ2V0TW9ja0pkazE3KCJqYXZhIDEuNCIpOworICAgIEFwcGxpY2F0aW9uTWFuYWdlci5nZXRBcHBsaWNhdGlvbigpLnJ1bldyaXRlQWN0aW9uKG5ldyBSdW5uYWJsZSgpIHsKKyAgICAgIEBPdmVycmlkZQorICAgICAgcHVibGljIHZvaWQgcnVuKCkgeworICAgICAgICBQcm9qZWN0SmRrVGFibGUuZ2V0SW5zdGFuY2UoKS5hZGRKZGsoamRrKTsKKyAgICAgIH0KKyAgICB9KTsKKyAgICBmaW5hbCBNb2R1bGVSb290TWFuYWdlciByb290TWFuYWdlciA9IE1vZHVsZVJvb3RNYW5hZ2VyLmdldEluc3RhbmNlKG15TW9kdWxlKTsKKworICAgIEFwcGxpY2F0aW9uTWFuYWdlci5nZXRBcHBsaWNhdGlvbigpLnJ1bldyaXRlQWN0aW9uKG5ldyBSdW5uYWJsZSgpIHsKKyAgICAgIEBPdmVycmlkZQorICAgICAgcHVibGljIHZvaWQgcnVuKCkgeworICAgICAgICBmaW5hbCBQcm9qZWN0Um9vdE1hbmFnZXJFeCByb290TWFuYWdlckV4ID0gUHJvamVjdFJvb3RNYW5hZ2VyRXguZ2V0SW5zdGFuY2VFeChteVByb2plY3QpOworICAgICAgICByb290TWFuYWdlckV4LnNldFByb2plY3RTZGtOYW1lKGpkay5nZXROYW1lKCkpOworICAgICAgICBNb2R1bGVSb290TW9kaWZpY2F0aW9uVXRpbC5zZXRTZGtJbmhlcml0ZWQobXlNb2R1bGUpOworICAgICAgfQorICAgIH0pOworCisgICAgYXNzZXJ0VHJ1ZSgiSkRLIGlzIGluaGVyaXRlZCBhZnRlciBleHBsaWNpdCBpbmhlcml0U2RrKCkiLCByb290TWFuYWdlci5pc1Nka0luaGVyaXRlZCgpKTsKKyAgICBhc3NlcnRFcXVhbHMoIkNvcnJlY3QgamRrIGluaGVyaXRlZCIsIGpkaywgcm9vdE1hbmFnZXIuZ2V0U2RrKCkpOworCisgICAgTW9kdWxlUm9vdE1vZGlmaWNhdGlvblV0aWwuc2V0TW9kdWxlU2RrKG15TW9kdWxlLCBudWxsKTsKKworICAgIGFzc2VydEZhbHNlKCJKREsgaXMgbm90IGluaGVyaXRlZCBhZnRlciBzZXRKZGsobnVsbCkiLCByb290TWFuYWdlci5pc1Nka0luaGVyaXRlZCgpKTsKKyAgICBhc3NlcnROdWxsKCJObyBKREsgYXNzaWduZWQiLCByb290TWFuYWdlci5nZXRTZGsoKSk7CisKKyAgICBmaW5hbCBTZGsgamRrMSA9IElkZWFUZXN0VXRpbC5nZXRNb2NrSmRrMTcoImpqaiIpOworICAgIEFwcGxpY2F0aW9uTWFuYWdlci5nZXRBcHBsaWNhdGlvbigpLnJ1bldyaXRlQWN0aW9uKG5ldyBSdW5uYWJsZSgpIHsKKyAgICAgIEBPdmVycmlkZQorICAgICAgcHVibGljIHZvaWQgcnVuKCkgeworICAgICAgICBQcm9qZWN0SmRrVGFibGUuZ2V0SW5zdGFuY2UoKS5hZGRKZGsoamRrMSk7CisgICAgICB9CisgICAgfSk7CisgICAgTW9kdWxlUm9vdE1vZGlmaWNhdGlvblV0aWwuc2V0TW9kdWxlU2RrKG15TW9kdWxlLCBqZGsxKTsKKworICAgIGFzc2VydEZhbHNlKCJKREsgaXMgbm90IGluaGVyaXRlZCBhZnRlciBzZXRKZGsoamRrMSkiLCByb290TWFuYWdlci5pc1Nka0luaGVyaXRlZCgpKTsKKyAgICBhc3NlcnRFcXVhbHMoImpkazEgaXMgYXNzaWduZWQiLCBqZGsxLCByb290TWFuYWdlci5nZXRTZGsoKSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0MigpIHRocm93cyBFeGNlcHRpb24geworICAgIGZpbmFsIE1vZHVsZVJvb3RNYW5hZ2VyIHJvb3RNYW5hZ2VyID0gTW9kdWxlUm9vdE1hbmFnZXIuZ2V0SW5zdGFuY2UobXlNb2R1bGUpOworICAgIE1vZHVsZVJvb3RNb2RpZmljYXRpb25VdGlsLnNldFNka0luaGVyaXRlZChteU1vZHVsZSk7CisKKyAgICBhc3NlcnRUcnVlKCJKREsgaXMgaW5oZXJpdGVkIGFmdGVyIGluaGVyaXRTZGsoKSIsIHJvb3RNYW5hZ2VyLmlzU2RrSW5oZXJpdGVkKCkpOworICAgIGFzc2VydE51bGwoIk5vIEpESyBhc3NpZ25lZCIsIHJvb3RNYW5hZ2VyLmdldFNkaygpKTsKKworICAgIGZpbmFsIFNkayBtb2NrSmRrID0gSWRlYVRlc3RVdGlsLmdldE1vY2tKZGsxNygibW9jayAxLjQiKTsKKyAgICBBcHBsaWNhdGlvbk1hbmFnZXIuZ2V0QXBwbGljYXRpb24oKS5ydW5Xcml0ZUFjdGlvbihuZXcgUnVubmFibGUoKSB7CisgICAgICBAT3ZlcnJpZGUKKyAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKKyAgICAgICAgUHJvamVjdEpka1RhYmxlLmdldEluc3RhbmNlKCkuYWRkSmRrKG1vY2tKZGspOworICAgICAgfQorICAgIH0pOworICAgIGZpbmFsIFByb2plY3RSb290TWFuYWdlckV4IHByb2plY3RSb290TWFuYWdlciA9IFByb2plY3RSb290TWFuYWdlckV4LmdldEluc3RhbmNlRXgobXlQcm9qZWN0KTsKKworICAgIEFwcGxpY2F0aW9uTWFuYWdlci5nZXRBcHBsaWNhdGlvbigpLnJ1bldyaXRlQWN0aW9uKG5ldyBSdW5uYWJsZSgpIHsKKyAgICAgIEBPdmVycmlkZQorICAgICAgcHVibGljIHZvaWQgcnVuKCkgeworICAgICAgICBwcm9qZWN0Um9vdE1hbmFnZXIuc2V0UHJvamVjdFNkayhtb2NrSmRrKTsKKyAgICAgIH0KKyAgICB9KTsKKworICAgIGFzc2VydFRydWUocm9vdE1hbmFnZXIuaXNTZGtJbmhlcml0ZWQoKSk7CisgICAgYXNzZXJ0RXF1YWxzKCJtb2NrSmRrIGluaGVyaXRlZCIsIG1vY2tKZGssIHJvb3RNYW5hZ2VyLmdldFNkaygpKTsKKworICAgIEFwcGxpY2F0aW9uTWFuYWdlci5nZXRBcHBsaWNhdGlvbigpLnJ1bldyaXRlQWN0aW9uKG5ldyBSdW5uYWJsZSgpIHsKKyAgICAgIEBPdmVycmlkZQorICAgICAgcHVibGljIHZvaWQgcnVuKCkgeworICAgICAgICBwcm9qZWN0Um9vdE1hbmFnZXIuc2V0UHJvamVjdFNka05hbWUoImpkazEiKTsKKyAgICAgIH0KKyAgICB9KTsKKworICAgIGFzc2VydFRydWUocm9vdE1hbmFnZXIuaXNTZGtJbmhlcml0ZWQoKSk7CisgICAgQXNzZXJ0LmFzc2VydEVxdWFscygiQ29ycmVjdCBub24tZXhpc3RpbmcgSkRLIGluaGVyaXRlZCIsICJqZGsxIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHJvb3RNYW5hZ2VyLm9yZGVyRW50cmllcygpLnByb2Nlc3MobmV3IFJvb3RQb2xpY3k8U3RyaW5nPigpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgQE92ZXJyaWRlCisgICAgICAgICAgICAgICAgICAgICAgICAgIHB1YmxpYyBTdHJpbmcgdmlzaXRJbmhlcml0ZWRKZGtPcmRlckVudHJ5KEluaGVyaXRlZEpka09yZGVyRW50cnkgaW5oZXJpdGVkSmRrT3JkZXJFbnRyeSwgU3RyaW5nIHMpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaW5oZXJpdGVkSmRrT3JkZXJFbnRyeS5nZXRKZGtOYW1lKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0sIG51bGwpKTsKKyAgICBhc3NlcnROdWxsKCJOb24tZXhpc3RpbmcgSkRLIiwgcm9vdE1hbmFnZXIuZ2V0U2RrKCkpOworCisgICAgZmluYWwgU2RrIGpkazEgPSBJZGVhVGVzdFV0aWwuZ2V0TW9ja0pkazE3KCJqZGsxIik7CisgICAgQXBwbGljYXRpb25NYW5hZ2VyLmdldEFwcGxpY2F0aW9uKCkucnVuV3JpdGVBY3Rpb24obmV3IFJ1bm5hYmxlKCkgeworICAgICAgQE92ZXJyaWRlCisgICAgICBwdWJsaWMgdm9pZCBydW4oKSB7CisgICAgICAgIFByb2plY3RKZGtUYWJsZS5nZXRJbnN0YW5jZSgpLmFkZEpkayhqZGsxKTsKKyAgICAgIH0KKyAgICB9KTsKKworICAgIGFzc2VydFRydWUocm9vdE1hbmFnZXIuaXNTZGtJbmhlcml0ZWQoKSk7CisgICAgYXNzZXJ0Tm90TnVsbCgiSkRLIGFwcGVhcmVkIiwgcm9vdE1hbmFnZXIuZ2V0U2RrKCkpOworICAgIGFzc2VydEVxdWFscygiamRrMSBmb3VuZCIsIGpkazEsIHJvb3RNYW5hZ2VyLmdldFNkaygpKTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL3Jvb3RzL01hbmFnaW5nQ29udGVudFJvb3RGb2xkZXJzVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL3Jvb3RzL01hbmFnaW5nQ29udGVudFJvb3RGb2xkZXJzVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM1NmZkYzEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovcm9vdHMvTWFuYWdpbmdDb250ZW50Um9vdEZvbGRlcnNUZXN0LmphdmEKQEAgLTAsMCArMSwxNDEgQEAKK3BhY2thZ2UgY29tLmludGVsbGlqLnJvb3RzOworCitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkuYXBwbGljYXRpb24uQXBwbGljYXRpb25NYW5hZ2VyOworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLnJvb3RzLkNvbnRlbnRFbnRyeTsKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS5yb290cy5Db250ZW50Rm9sZGVyOworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLnJvb3RzLk1vZGlmaWFibGVSb290TW9kZWw7CitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkucm9vdHMuTW9kdWxlUm9vdE1hbmFnZXI7CitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkudXRpbC5Db21wYXJpbmc7CitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkudmZzLkxvY2FsRmlsZVN5c3RlbTsKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS52ZnMuVmlydHVhbEZpbGU7CitpbXBvcnQgY29tLmludGVsbGlqLnRlc3RGcmFtZXdvcmsuSWRlYVRlc3RDYXNlOworaW1wb3J0IGNvbS5pbnRlbGxpai50ZXN0RnJhbWV3b3JrLlBzaVRlc3RVdGlsOworCitpbXBvcnQgamF2YS5pby5GaWxlOworaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CisKK3B1YmxpYyBjbGFzcyBNYW5hZ2luZ0NvbnRlbnRSb290Rm9sZGVyc1Rlc3QgZXh0ZW5kcyBJZGVhVGVzdENhc2UgeworICBwcml2YXRlIFZpcnR1YWxGaWxlIHJvb3Q7CisgIHByaXZhdGUgQ29udGVudEVudHJ5IGVudHJ5OworICBwcml2YXRlIE1vZGlmaWFibGVSb290TW9kZWwgbXlNb2RlbDsKKworICBAT3ZlcnJpZGUKKyAgcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBzdXBlci5zZXRVcCgpOworICAgIEFwcGxpY2F0aW9uTWFuYWdlci5nZXRBcHBsaWNhdGlvbigpLnJ1bldyaXRlQWN0aW9uKG5ldyBSdW5uYWJsZSgpIHsKKyAgICAgIEBPdmVycmlkZQorICAgICAgcHVibGljIHZvaWQgcnVuKCkgeworICAgICAgICBpbml0Q29udGVudFJvb3QoKTsKKyAgICAgICAgaW5pdE1vZGlmaWFibGVNb2RlbCgpOworICAgICAgfQorICAgIH0pOworICB9CisKKyAgQE92ZXJyaWRlCisgIHByb3RlY3RlZCB2b2lkIHRlYXJEb3duKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgaWYgKG15TW9kZWwgIT0gbnVsbCAmJiBteU1vZGVsLmlzV3JpdGFibGUoKSkgeworICAgICAgbXlNb2RlbC5kaXNwb3NlKCk7CisgICAgfQorICAgIG15TW9kZWwgPSBudWxsOworICAgIHN1cGVyLnRlYXJEb3duKCk7CisgIH0KKworICBwcml2YXRlIHZvaWQgaW5pdENvbnRlbnRSb290KCkgeworICAgIHRyeSB7CisgICAgICBGaWxlIGRpciA9IGNyZWF0ZVRlbXBEaXJlY3RvcnkoKTsKKyAgICAgIHJvb3QgPSBMb2NhbEZpbGVTeXN0ZW0uZ2V0SW5zdGFuY2UoKS5yZWZyZXNoQW5kRmluZEZpbGVCeUlvRmlsZShkaXIpOworICAgICAgUHNpVGVzdFV0aWwuYWRkQ29udGVudFJvb3QobXlNb2R1bGUsIHJvb3QpOworICAgIH0KKyAgICBjYXRjaCAoSU9FeGNlcHRpb24gZSkgeworICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oZSk7CisgICAgfQorICB9CisKKyAgcHJpdmF0ZSB2b2lkIGluaXRNb2RpZmlhYmxlTW9kZWwoKSB7CisgICAgbXlNb2RlbCA9IE1vZHVsZVJvb3RNYW5hZ2VyLmdldEluc3RhbmNlKG15TW9kdWxlKS5nZXRNb2RpZmlhYmxlTW9kZWwoKTsKKyAgICBmb3IgKENvbnRlbnRFbnRyeSBlIDogbXlNb2RlbC5nZXRDb250ZW50RW50cmllcygpKSB7CisgICAgICBpZiAoQ29tcGFyaW5nLmVxdWFsKGUuZ2V0RmlsZSgpLCByb290KSkgZW50cnkgPSBlOworICAgIH0KKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RDcmVhdGlvbk9mU291cmNlRm9sZGVyV2l0aEZpbGUoKSB0aHJvd3MgSU9FeGNlcHRpb24geworICAgIFZpcnR1YWxGaWxlIGRpciA9IHJvb3QuY3JlYXRlQ2hpbGREaXJlY3RvcnkobnVsbCwgInNyYyIpOworICAgIFN0cmluZyB1cmwgPSBkaXIuZ2V0VXJsKCk7CisKKyAgICBDb250ZW50Rm9sZGVyIGYgPSBlbnRyeS5hZGRTb3VyY2VGb2xkZXIoZGlyLCBmYWxzZSk7CisgICAgYXNzZXJ0RXF1YWxzKGRpciwgZi5nZXRGaWxlKCkpOworICAgIGFzc2VydEVxdWFscyh1cmwsIGYuZ2V0VXJsKCkpOworCisgICAgZGlyLmRlbGV0ZShudWxsKTsKKyAgICBhc3NlcnROdWxsKGYuZ2V0RmlsZSgpKTsKKyAgICBhc3NlcnRFcXVhbHModXJsLCBmLmdldFVybCgpKTsKKworICAgIGRpciA9IHJvb3QuY3JlYXRlQ2hpbGREaXJlY3RvcnkobnVsbCwgInNyYyIpOworICAgIGFzc2VydEVxdWFscyhkaXIsIGYuZ2V0RmlsZSgpKTsKKyAgICBhc3NlcnRFcXVhbHModXJsLCBmLmdldFVybCgpKTsKKyAgfQorCisKKyAgcHVibGljIHZvaWQgdGVzdENyZWF0aW9uT2ZTb3VyY2VGb2xkZXJXaXRoVXJsKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKKyAgICBWaXJ0dWFsRmlsZSBkaXIgPSByb290LmNyZWF0ZUNoaWxkRGlyZWN0b3J5KG51bGwsICJzcmMiKTsKKyAgICBTdHJpbmcgdXJsID0gZGlyLmdldFVybCgpOworICAgIGRpci5kZWxldGUobnVsbCk7CisKKyAgICBDb250ZW50Rm9sZGVyIGYgPSBlbnRyeS5hZGRTb3VyY2VGb2xkZXIodXJsLCBmYWxzZSk7CisgICAgYXNzZXJ0TnVsbChmLmdldEZpbGUoKSk7CisgICAgYXNzZXJ0RXF1YWxzKHVybCwgZi5nZXRVcmwoKSk7CisKKyAgICBkaXIgPSByb290LmNyZWF0ZUNoaWxkRGlyZWN0b3J5KG51bGwsICJzcmMiKTsKKyAgICBhc3NlcnRFcXVhbHMoZGlyLCBmLmdldEZpbGUoKSk7CisgICAgYXNzZXJ0RXF1YWxzKHVybCwgZi5nZXRVcmwoKSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0Q3JlYXRpb25PZlNvdXJjZUZvbGRlcldpdGhVcmxXaGVuRmlsZUV4aXN0cygpIHRocm93cyBJT0V4Y2VwdGlvbiB7CisgICAgVmlydHVhbEZpbGUgZGlyID0gcm9vdC5jcmVhdGVDaGlsZERpcmVjdG9yeShudWxsLCAic3JjIik7CisgICAgU3RyaW5nIHVybCA9IGRpci5nZXRVcmwoKTsKKworICAgIENvbnRlbnRGb2xkZXIgZiA9IGVudHJ5LmFkZFNvdXJjZUZvbGRlcih1cmwsIGZhbHNlKTsKKyAgICBhc3NlcnRFcXVhbHMoZGlyLCBmLmdldEZpbGUoKSk7CisgICAgYXNzZXJ0RXF1YWxzKHVybCwgZi5nZXRVcmwoKSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0Q3JlYXRpb25PZkV4Y2x1ZGVkRm9sZGVyV2l0aEZpbGUoKSB0aHJvd3MgSU9FeGNlcHRpb24geworICAgIFZpcnR1YWxGaWxlIGRpciA9IHJvb3QuY3JlYXRlQ2hpbGREaXJlY3RvcnkobnVsbCwgInNyYyIpOworICAgIFN0cmluZyB1cmwgPSBkaXIuZ2V0VXJsKCk7CisKKyAgICBDb250ZW50Rm9sZGVyIGYgPSBlbnRyeS5hZGRFeGNsdWRlRm9sZGVyKGRpcik7CisgICAgYXNzZXJ0RXF1YWxzKGRpciwgZi5nZXRGaWxlKCkpOworICAgIGFzc2VydEVxdWFscyh1cmwsIGYuZ2V0VXJsKCkpOworCisgICAgZGlyLmRlbGV0ZShudWxsKTsKKyAgICBhc3NlcnROdWxsKGYuZ2V0RmlsZSgpKTsKKyAgICBhc3NlcnRFcXVhbHModXJsLCBmLmdldFVybCgpKTsKKworICAgIGRpciA9IHJvb3QuY3JlYXRlQ2hpbGREaXJlY3RvcnkobnVsbCwgInNyYyIpOworICAgIGFzc2VydEVxdWFscyhkaXIsIGYuZ2V0RmlsZSgpKTsKKyAgICBhc3NlcnRFcXVhbHModXJsLCBmLmdldFVybCgpKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RDcmVhdGlvbk9mRXhjbHVkZWRGb2xkZXJXaXRoVXJsKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKKyAgICBWaXJ0dWFsRmlsZSBkaXIgPSByb290LmNyZWF0ZUNoaWxkRGlyZWN0b3J5KG51bGwsICJzcmMiKTsKKyAgICBTdHJpbmcgdXJsID0gZGlyLmdldFVybCgpOworICAgIGRpci5kZWxldGUobnVsbCk7CisKKyAgICBDb250ZW50Rm9sZGVyIGYgPSBlbnRyeS5hZGRFeGNsdWRlRm9sZGVyKHVybCk7CisgICAgYXNzZXJ0TnVsbChmLmdldEZpbGUoKSk7CisgICAgYXNzZXJ0RXF1YWxzKHVybCwgZi5nZXRVcmwoKSk7CisKKyAgICBkaXIgPSByb290LmNyZWF0ZUNoaWxkRGlyZWN0b3J5KG51bGwsICJzcmMiKTsKKyAgICBhc3NlcnRFcXVhbHMoZGlyLCBmLmdldEZpbGUoKSk7CisgICAgYXNzZXJ0RXF1YWxzKHVybCwgZi5nZXRVcmwoKSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0Q3JlYXRpb25PZkV4Y2x1ZGVkRm9sZGVyV2l0aFVybFdoZW5GaWxlRXhpc3RzKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKKyAgICBWaXJ0dWFsRmlsZSBkaXIgPSByb290LmNyZWF0ZUNoaWxkRGlyZWN0b3J5KG51bGwsICJzcmMiKTsKKyAgICBTdHJpbmcgdXJsID0gZGlyLmdldFVybCgpOworCisgICAgQ29udGVudEZvbGRlciBmID0gZW50cnkuYWRkRXhjbHVkZUZvbGRlcih1cmwpOworICAgIGFzc2VydEVxdWFscyhkaXIsIGYuZ2V0RmlsZSgpKTsKKyAgICBhc3NlcnRFcXVhbHModXJsLCBmLmdldFVybCgpKTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL3Jvb3RzL01hbmFnaW5nQ29udGVudFJvb3RzVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL3Jvb3RzL01hbmFnaW5nQ29udGVudFJvb3RzVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIwZWQ3MWUKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovcm9vdHMvTWFuYWdpbmdDb250ZW50Um9vdHNUZXN0LmphdmEKQEAgLTAsMCArMSwxMTUgQEAKK3BhY2thZ2UgY29tLmludGVsbGlqLnJvb3RzOworCitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkuYXBwbGljYXRpb24uQXBwbGljYXRpb25NYW5hZ2VyOworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLnJvb3RzLkNvbnRlbnRFbnRyeTsKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS5yb290cy5Nb2RpZmlhYmxlUm9vdE1vZGVsOworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLnJvb3RzLk1vZHVsZVJvb3RNYW5hZ2VyOworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLnJvb3RzLk1vZHVsZVJvb3RNb2RlbDsKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS5yb290cy5pbXBsLkNvbnRlbnRFbnRyeUltcGw7CitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkudmZzLkxvY2FsRmlsZVN5c3RlbTsKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS52ZnMuVmlydHVhbEZpbGU7CitpbXBvcnQgY29tLmludGVsbGlqLnRlc3RGcmFtZXdvcmsuSWRlYVRlc3RDYXNlOworaW1wb3J0IGNvbS5pbnRlbGxpai50ZXN0RnJhbWV3b3JrLlBzaVRlc3RVdGlsOworCitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKKworcHVibGljIGNsYXNzIE1hbmFnaW5nQ29udGVudFJvb3RzVGVzdCBleHRlbmRzIElkZWFUZXN0Q2FzZSB7CisgIHByaXZhdGUgVmlydHVhbEZpbGUgZGlyOworCisgIEBPdmVycmlkZQorICBwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24geworICAgIHN1cGVyLnNldFVwKCk7CisgICAgQXBwbGljYXRpb25NYW5hZ2VyLmdldEFwcGxpY2F0aW9uKCkucnVuV3JpdGVBY3Rpb24obmV3IFJ1bm5hYmxlKCkgeworICAgICAgQE92ZXJyaWRlCisgICAgICBwdWJsaWMgdm9pZCBydW4oKSB7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgTG9jYWxGaWxlU3lzdGVtIGZzID0gTG9jYWxGaWxlU3lzdGVtLmdldEluc3RhbmNlKCk7CisgICAgICAgICAgZGlyID0gZnMucmVmcmVzaEFuZEZpbmRGaWxlQnlJb0ZpbGUoY3JlYXRlVGVtcERpcmVjdG9yeSgpKTsKKyAgICAgICAgfQorICAgICAgICBjYXRjaCAoSU9FeGNlcHRpb24gZSkgeworICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKGUpOworICAgICAgICB9CisgICAgICB9CisgICAgfSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0Q3JlYXRpb25PZkNvbnRlbnRSb290V2l0aEZpbGUoKSB0aHJvd3MgSU9FeGNlcHRpb24geworICAgIFZpcnR1YWxGaWxlIHJvb3QgPSBkaXIuY3JlYXRlQ2hpbGREaXJlY3RvcnkobnVsbCwgInJvb3QiKTsKKyAgICBTdHJpbmcgdXJsID0gcm9vdC5nZXRVcmwoKTsKKworICAgIFBzaVRlc3RVdGlsLmFkZENvbnRlbnRSb290KG15TW9kdWxlLCByb290KTsKKworCisgICAgYXNzZXJ0RXF1YWxzKHJvb3QsIGZpbmRDb250ZW50RW50cnkodXJsKS5nZXRGaWxlKCkpOworCisgICAgcm9vdC5kZWxldGUobnVsbCk7CisgICAgYXNzZXJ0Tm90TnVsbChmaW5kQ29udGVudEVudHJ5KHVybCkpOworCisgICAgcm9vdCA9IGRpci5jcmVhdGVDaGlsZERpcmVjdG9yeShudWxsLCAicm9vdCIpOworICAgIGFzc2VydEVxdWFscyhyb290LCBmaW5kQ29udGVudEVudHJ5KHVybCkuZ2V0RmlsZSgpKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RDcmVhdGlvbk9mQ29udGVudFJvb3RXaXRoVXJsKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKKyAgICBWaXJ0dWFsRmlsZSByb290ID0gZGlyLmNyZWF0ZUNoaWxkRGlyZWN0b3J5KG51bGwsICJyb290Iik7CisgICAgZmluYWwgU3RyaW5nIHVybCA9IHJvb3QuZ2V0VXJsKCk7CisgICAgcm9vdC5kZWxldGUobnVsbCk7CisKKyAgICBhZGRDb250ZW50Um9vdCh1cmwpOworCisgICAgYXNzZXJ0Tm90TnVsbChmaW5kQ29udGVudEVudHJ5KHVybCkpOworCisgICAgcm9vdCA9IGRpci5jcmVhdGVDaGlsZERpcmVjdG9yeShudWxsLCAicm9vdCIpOworICAgIGFzc2VydEVxdWFscyhyb290LCBmaW5kQ29udGVudEVudHJ5KHVybCkuZ2V0RmlsZSgpKTsKKyAgfQorCisgIHByaXZhdGUgdm9pZCBhZGRDb250ZW50Um9vdChmaW5hbCBTdHJpbmcgdXJsKSB7CisgICAgQXBwbGljYXRpb25NYW5hZ2VyLmdldEFwcGxpY2F0aW9uKCkucnVuV3JpdGVBY3Rpb24obmV3IFJ1bm5hYmxlKCkgeworICAgICAgQE92ZXJyaWRlCisgICAgICBwdWJsaWMgdm9pZCBydW4oKSB7CisgICAgICAgIE1vZGlmaWFibGVSb290TW9kZWwgbSA9IGdldFJvb3RNYW5hZ2VyKCkuZ2V0TW9kaWZpYWJsZU1vZGVsKCk7CisgICAgICAgIG0uYWRkQ29udGVudEVudHJ5KHVybCk7CisgICAgICAgIG0uY29tbWl0KCk7CisgICAgICB9CisgICAgfSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0Q3JlYXRpb25PZkNvbnRlbnRSb290V2l0aFVybFdoZW5GaWxlRXhpc3RzKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKKyAgICBWaXJ0dWFsRmlsZSByb290ID0gZGlyLmNyZWF0ZUNoaWxkRGlyZWN0b3J5KG51bGwsICJyb290Iik7CisgICAgZmluYWwgU3RyaW5nIHVybCA9IHJvb3QuZ2V0VXJsKCk7CisKKyAgICBhZGRDb250ZW50Um9vdCh1cmwpOworCisKKyAgICBhc3NlcnRFcXVhbHMocm9vdCwgZmluZENvbnRlbnRFbnRyeSh1cmwpLmdldEZpbGUoKSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0R2V0dGluZ01vZmlmaWFibGVNb2RlbENvcnJlY3RseVNldHNSb290TW9kZWxGb3JDb250ZW50RW50cmllcygpIHRocm93cyBFeGNlcHRpb24geworICAgIEFwcGxpY2F0aW9uTWFuYWdlci5nZXRBcHBsaWNhdGlvbigpLnJ1bldyaXRlQWN0aW9uKG5ldyBSdW5uYWJsZSgpIHsKKyAgICAgIEBPdmVycmlkZQorICAgICAgcHVibGljIHZvaWQgcnVuKCkgeworICAgICAgICBQc2lUZXN0VXRpbC5hZGRDb250ZW50Um9vdChteU1vZHVsZSwgZGlyKTsKKworICAgICAgICBNb2RpZmlhYmxlUm9vdE1vZGVsIG0gPSBnZXRSb290TWFuYWdlcigpLmdldE1vZGlmaWFibGVNb2RlbCgpOworICAgICAgICBDb250ZW50RW50cnkgZSA9IGZpbmRDb250ZW50RW50cnkoZGlyLmdldFVybCgpLCBtKTsKKworICAgICAgICBhc3NlcnRTYW1lKG0sICgoQ29udGVudEVudHJ5SW1wbCllKS5nZXRSb290TW9kZWwoKSk7CisgICAgICAgIG0uZGlzcG9zZSgpOworICAgICAgfQorICAgIH0pOworICB9CisKKyAgcHJpdmF0ZSBDb250ZW50RW50cnkgZmluZENvbnRlbnRFbnRyeShTdHJpbmcgdXJsKSB7CisgICAgcmV0dXJuIGZpbmRDb250ZW50RW50cnkodXJsLCBnZXRSb290TWFuYWdlcigpKTsKKyAgfQorCisgIHByaXZhdGUgc3RhdGljIENvbnRlbnRFbnRyeSBmaW5kQ29udGVudEVudHJ5KFN0cmluZyB1cmwsIE1vZHVsZVJvb3RNb2RlbCBtKSB7CisgICAgZm9yIChDb250ZW50RW50cnkgZSA6IG0uZ2V0Q29udGVudEVudHJpZXMoKSkgeworICAgICAgaWYgKGUuZ2V0VXJsKCkuZXF1YWxzKHVybCkpIHJldHVybiBlOworICAgIH0KKyAgICByZXR1cm4gbnVsbDsKKyAgfQorCisgIHByaXZhdGUgTW9kdWxlUm9vdE1hbmFnZXIgZ2V0Um9vdE1hbmFnZXIoKSB7CisgICAgcmV0dXJuIE1vZHVsZVJvb3RNYW5hZ2VyLmdldEluc3RhbmNlKG15TW9kdWxlKTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL3Jvb3RzL01vZHVsZVJvb3RNYW5hZ2VyVGVzdENhc2UuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9yb290cy9Nb2R1bGVSb290TWFuYWdlclRlc3RDYXNlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTgwMzI0NQotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9yb290cy9Nb2R1bGVSb290TWFuYWdlclRlc3RDYXNlLmphdmEKQEAgLTAsMCArMSw5OSBAQAorcGFja2FnZSBjb20uaW50ZWxsaWoucm9vdHM7CisKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS5hcHBsaWNhdGlvbi5QYXRoTWFuYWdlcjsKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS5tb2R1bGUuTW9kdWxlOworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLnByb2plY3RSb290cy5TZGs7CitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkucHJvamVjdFJvb3RzLlNka01vZGlmaWNhdG9yOworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLnJvb3RzLk9yZGVyUm9vdFR5cGU7CitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkucm9vdHMubGlicmFyaWVzLkxpYnJhcnk7CitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkucm9vdHMubGlicmFyaWVzLkxpYnJhcnlUYWJsZXNSZWdpc3RyYXI7CitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkudmZzLkphckZpbGVTeXN0ZW07CitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkudmZzLlZpcnR1YWxGaWxlOworaW1wb3J0IGNvbS5pbnRlbGxpai50ZXN0RnJhbWV3b3JrLk1vZHVsZVRlc3RDYXNlOworaW1wb3J0IGNvbS5pbnRlbGxpai50ZXN0RnJhbWV3b3JrLlBzaVRlc3RVdGlsOworaW1wb3J0IGNvbS5pbnRlbGxpai51dGlsLlBhdGhzTGlzdDsKKworaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CisKKy8qKgorICogQGF1dGhvciBuaWsKKyAqLworcHVibGljIGFic3RyYWN0IGNsYXNzIE1vZHVsZVJvb3RNYW5hZ2VyVGVzdENhc2UgZXh0ZW5kcyBNb2R1bGVUZXN0Q2FzZSB7CisgIHByb3RlY3RlZCBzdGF0aWMgdm9pZCBhc3NlcnRSb290cyhQYXRoc0xpc3QgcGF0aHNMaXN0LCBWaXJ0dWFsRmlsZS4uLiBmaWxlcykgeworICAgIGFzc2VydE9yZGVyZWRFcXVhbHMocGF0aHNMaXN0LmdldFJvb3REaXJzKCksIGZpbGVzKTsKKyAgfQorCisgIEBPdmVycmlkZQorICBwcm90ZWN0ZWQgU2RrIGdldFRlc3RQcm9qZWN0SmRrKCkgeworICAgIGZpbmFsIFNkayBqZGsgPSBzdXBlci5nZXRUZXN0UHJvamVjdEpkaygpOworICAgIGZpbmFsIFNka01vZGlmaWNhdG9yIG1vZGlmaWNhdG9yID0gamRrLmdldFNka01vZGlmaWNhdG9yKCk7CisgICAgVmlydHVhbEZpbGUgcnRKYXIgPSBudWxsOworICAgIGZvciAoVmlydHVhbEZpbGUgcm9vdCA6IG1vZGlmaWNhdG9yLmdldFJvb3RzKE9yZGVyUm9vdFR5cGUuQ0xBU1NFUykpIHsKKyAgICAgIGlmIChyb290LmdldE5hbWUoKS5lcXVhbHMoInJ0LmphciIpKSB7CisgICAgICAgIHJ0SmFyID0gcm9vdDsKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgfQorICAgIGFzc2VydE5vdE51bGwoInJ0LmphciBub3QgZm91bmQgaW4gamRrOiAiICsgamRrLCBydEphcik7CisgICAgbW9kaWZpY2F0b3IucmVtb3ZlQWxsUm9vdHMoKTsKKyAgICBtb2RpZmljYXRvci5hZGRSb290KHJ0SmFyLCBPcmRlclJvb3RUeXBlLkNMQVNTRVMpOworICAgIG1vZGlmaWNhdG9yLmNvbW1pdENoYW5nZXMoKTsKKyAgICByZXR1cm4gamRrOworICB9CisKKyAgcHJvdGVjdGVkIFZpcnR1YWxGaWxlIGdldFJ0SmFyKCkgeworICAgIHJldHVybiBnZXRUZXN0UHJvamVjdEpkaygpLmdldFJvb3RQcm92aWRlcigpLmdldEZpbGVzKE9yZGVyUm9vdFR5cGUuQ0xBU1NFUylbMF07CisgIH0KKworICBwcm90ZWN0ZWQgVmlydHVhbEZpbGUgZ2V0SkRvbUphcigpIHsKKyAgICByZXR1cm4gZ2V0SmFyRnJvbUxpYkRpcigiamRvbS5qYXIiKTsKKyAgfQorCisgIHByb3RlY3RlZCBWaXJ0dWFsRmlsZSBnZXRKRG9tU291cmNlcygpIHsKKyAgICByZXR1cm4gZ2V0SmFyRnJvbUxpYkRpcigic3JjL2pkb20uemlwIik7CisgIH0KKworCisgIHByb3RlY3RlZCBWaXJ0dWFsRmlsZSBnZXRKYXJGcm9tTGliRGlyKGZpbmFsIFN0cmluZyBuYW1lKSB7CisgICAgZmluYWwgVmlydHVhbEZpbGUgZmlsZSA9IGdldFZpcnR1YWxGaWxlKFBhdGhNYW5hZ2VyLmZpbmRGaWxlSW5MaWJEaXJlY3RvcnkobmFtZSkpOworICAgIGFzc2VydE5vdE51bGwobmFtZSArICIgbm90IGZvdW5kIiwgZmlsZSk7CisgICAgZmluYWwgVmlydHVhbEZpbGUgamFyRmlsZSA9IEphckZpbGVTeXN0ZW0uZ2V0SW5zdGFuY2UoKS5nZXRKYXJSb290Rm9yTG9jYWxGaWxlKGZpbGUpOworICAgIGFzc2VydE5vdE51bGwobmFtZSArICIgaXMgbm90IGphciIsIGphckZpbGUpOworICAgIHJldHVybiBqYXJGaWxlOworICB9CisKKyAgcHJvdGVjdGVkIFZpcnR1YWxGaWxlIGFkZFNvdXJjZVJvb3QoTW9kdWxlIG1vZHVsZSwgYm9vbGVhbiB0ZXN0U291cmNlKSB0aHJvd3MgSU9FeGNlcHRpb24geworICAgIGZpbmFsIFZpcnR1YWxGaWxlIHJvb3QgPSBnZXRWaXJ0dWFsRmlsZShjcmVhdGVUZW1wRGlyKG1vZHVsZS5nZXROYW1lKCkgKyAodGVzdFNvdXJjZSA/ICJUZXN0IiA6ICJQcm9kIikgKyAiU3JjIikpOworICAgIFBzaVRlc3RVdGlsLmFkZFNvdXJjZUNvbnRlbnRUb1Jvb3RzKG1vZHVsZSwgcm9vdCwgdGVzdFNvdXJjZSk7CisgICAgcmV0dXJuIHJvb3Q7CisgIH0KKworICBwcm90ZWN0ZWQgVmlydHVhbEZpbGUgc2V0TW9kdWxlT3V0cHV0KGZpbmFsIE1vZHVsZSBtb2R1bGUsIGZpbmFsIGJvb2xlYW4gdGVzdCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKKyAgICBmaW5hbCBWaXJ0dWFsRmlsZSBvdXRwdXQgPSBnZXRWaXJ0dWFsRmlsZShjcmVhdGVUZW1wRGlyKG1vZHVsZS5nZXROYW1lKCkgKyAodGVzdCA/ICJUZXN0IiA6ICJQcm9kIikgKyAiT3V0cHV0IikpOworICAgIFBzaVRlc3RVdGlsLnNldENvbXBpbGVyT3V0cHV0UGF0aChtb2R1bGUsIG91dHB1dCAhPSBudWxsID8gb3V0cHV0LmdldFVybCgpIDogbnVsbCwgdGVzdCk7CisgICAgcmV0dXJuIG91dHB1dDsKKyAgfQorCisgIHByb3RlY3RlZCBMaWJyYXJ5IGNyZWF0ZUxpYnJhcnkoZmluYWwgU3RyaW5nIG5hbWUsIGZpbmFsIFZpcnR1YWxGaWxlIGNsYXNzZXNSb290LCBmaW5hbCBWaXJ0dWFsRmlsZSBzb3VyY2VSb290KSB7CisgICAgZmluYWwgTGlicmFyeSBsaWJyYXJ5ID0gTGlicmFyeVRhYmxlc1JlZ2lzdHJhci5nZXRJbnN0YW5jZSgpLmdldExpYnJhcnlUYWJsZShteVByb2plY3QpLmNyZWF0ZUxpYnJhcnkobmFtZSk7CisgICAgZmluYWwgTGlicmFyeS5Nb2RpZmlhYmxlTW9kZWwgbW9kZWwgPSBsaWJyYXJ5LmdldE1vZGlmaWFibGVNb2RlbCgpOworICAgIG1vZGVsLmFkZFJvb3QoY2xhc3Nlc1Jvb3QsIE9yZGVyUm9vdFR5cGUuQ0xBU1NFUyk7CisgICAgaWYgKHNvdXJjZVJvb3QgIT0gbnVsbCkgeworICAgICAgbW9kZWwuYWRkUm9vdChzb3VyY2VSb290LCBPcmRlclJvb3RUeXBlLlNPVVJDRVMpOworICAgIH0KKyAgICBtb2RlbC5jb21taXQoKTsKKyAgICByZXR1cm4gbGlicmFyeTsKKyAgfQorCisgIHByb3RlY3RlZCBMaWJyYXJ5IGNyZWF0ZUpEb21MaWJyYXJ5KCkgeworICAgIHJldHVybiBjcmVhdGVMaWJyYXJ5KCJqZG9tIiwgZ2V0SkRvbUphcigpLCBnZXRKRG9tU291cmNlcygpKTsKKyAgfQorCisgIHByb3RlY3RlZCBMaWJyYXJ5IGNyZWF0ZUFzbUxpYnJhcnkoKSB7CisgICAgcmV0dXJuIGNyZWF0ZUxpYnJhcnkoImFzbSIsIGdldEFzbUphcigpLCBudWxsKTsKKyAgfQorCisgIHByb3RlY3RlZCBWaXJ0dWFsRmlsZSBnZXRBc21KYXIoKSB7CisgICAgcmV0dXJuIGdldEphckZyb21MaWJEaXIoImFzbS5qYXIiKTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL3Jvb3RzL01vZHVsZVJvb3RzRXh0ZXJuYWxpemF0aW9uVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL3Jvb3RzL01vZHVsZVJvb3RzRXh0ZXJuYWxpemF0aW9uVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg2YWI2NzAKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovcm9vdHMvTW9kdWxlUm9vdHNFeHRlcm5hbGl6YXRpb25UZXN0LmphdmEKQEAgLTAsMCArMSwyODYgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwMC0yMDEyIEpldEJyYWlucyBzLnIuby4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCitwYWNrYWdlIGNvbS5pbnRlbGxpai5yb290czsKKworaW1wb3J0IGNvbS5pbnRlbGxpai5hcHBsaWNhdGlvbi5vcHRpb25zLlJlcGxhY2VQYXRoVG9NYWNyb01hcDsKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS5hcHBsaWNhdGlvbi5BcHBsaWNhdGlvbk1hbmFnZXI7CitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkuYXBwbGljYXRpb24uZXguUGF0aE1hbmFnZXJFeDsKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS5jb21wb25lbnRzLkV4cGFuZE1hY3JvVG9QYXRoTWFwOworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLmNvbXBvbmVudHMuUGF0aE1hY3JvTWFuYWdlcjsKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS5kaWFnbm9zdGljLkxvZ2dlcjsKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS5tb2R1bGUuTW9kdWxlOworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLnByb2plY3RSb290cy5pbXBsLkphdmFTZGtJbXBsOworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLnJvb3RzLio7CitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkucm9vdHMuaW1wbC5Nb2R1bGVSb290TWFuYWdlckltcGw7CitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkucm9vdHMubGlicmFyaWVzLkxpYnJhcnk7CitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkucm9vdHMubGlicmFyaWVzLkxpYnJhcnlUYWJsZTsKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS51dGlsLmlvLkZpbGVVdGlsOworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLnZmcy5Mb2NhbEZpbGVTeXN0ZW07CitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkudmZzLlZpcnR1YWxGaWxlOworaW1wb3J0IGNvbS5pbnRlbGxpai50ZXN0RnJhbWV3b3JrLklkZWFUZXN0VXRpbDsKK2ltcG9ydCBjb20uaW50ZWxsaWoudGVzdEZyYW1ld29yay5Nb2R1bGVUZXN0Q2FzZTsKK2ltcG9ydCBjb20uaW50ZWxsaWouaWRlLmhpZ2hsaWdodGVyLk1vZHVsZUZpbGVUeXBlOworaW1wb3J0IGNvbS5pbnRlbGxpai50ZXN0RnJhbWV3b3JrLlBzaVRlc3RVdGlsOworaW1wb3J0IG9yZy5qZG9tLkVsZW1lbnQ7CitpbXBvcnQgb3JnLmpkb20ub3V0cHV0LlhNTE91dHB1dHRlcjsKKworaW1wb3J0IGphdmEuaW8uRmlsZTsKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKKworLyoqCisgKiAgQGF1dGhvciBkc2wKKyAqLworcHVibGljIGNsYXNzIE1vZHVsZVJvb3RzRXh0ZXJuYWxpemF0aW9uVGVzdCBleHRlbmRzIE1vZHVsZVRlc3RDYXNlIHsKKyAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgTG9nZ2VyIExPRyA9IExvZ2dlci5nZXRJbnN0YW5jZSgiI2NvbS5pbnRlbGxpai5vcGVuYXBpLnJvb3RzLmltcGwuRXh0ZXJuYWxpemF0aW9uVGVzdCIpOworCisgIHB1YmxpYyB2b2lkIHRlc3RFbXB0eU1vZHVsZVdyaXRlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgdHJ5IHsKKyAgICAgIE1vZHVsZVJvb3RNYW5hZ2VySW1wbCBtb2R1bGVSb290TWFuYWdlciA9IGNyZWF0ZVRlbXBNb2R1bGVSb290TWFuYWdlcigpOworICAgICAgRWxlbWVudCByb290ID0gbmV3IEVsZW1lbnQoInJvb3QiKTsKKyAgICAgIG1vZHVsZVJvb3RNYW5hZ2VyLmdldFN0YXRlKCkud3JpdGVFeHRlcm5hbChyb290KTsKKyAgICAgIGFzc2VydEVxdWFscyhyb290LmdldFRleHQoKSwgIiIpOworICAgIH0KKyAgICBjYXRjaCAoSU9FeGNlcHRpb24gZSkgeworICAgICAgTE9HLmVycm9yKGUpOworICAgIH0KKyAgfQorCisgIHByaXZhdGUgTW9kdWxlUm9vdE1hbmFnZXJJbXBsIGNyZWF0ZVRlbXBNb2R1bGVSb290TWFuYWdlcigpIHRocm93cyBJT0V4Y2VwdGlvbiB7CisgICAgRmlsZSB0bXBNb2R1bGUgPSBGaWxlVXRpbC5jcmVhdGVUZW1wRmlsZSgidHN0IiwgTW9kdWxlRmlsZVR5cGUuRE9UX0RFRkFVTFRfRVhURU5TSU9OKTsKKyAgICBteUZpbGVzVG9EZWxldGUuYWRkKHRtcE1vZHVsZSk7CisgICAgZmluYWwgTW9kdWxlIG1vZHVsZSA9IGNyZWF0ZU1vZHVsZSh0bXBNb2R1bGUpOworICAgIGZpbmFsIE1vZHVsZVJvb3RNYW5hZ2VySW1wbCBtb2R1bGVSb290TWFuYWdlciA9CisgICAgICAoTW9kdWxlUm9vdE1hbmFnZXJJbXBsKU1vZHVsZVJvb3RNYW5hZ2VyLmdldEluc3RhbmNlKG1vZHVsZSk7CisgICAgcmV0dXJuIG1vZHVsZVJvb3RNYW5hZ2VyOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdENvbnRlbnRXcml0ZSgpIHRocm93cyBFeGNlcHRpb24geworICAgIEZpbGUgY29udGVudCA9IGdldFRlc3RSb290KCk7CisgICAgRmlsZSBzb3VyY2UgPSBuZXcgRmlsZShjb250ZW50LCAic291cmNlIik7CisgICAgRmlsZSB0ZXN0U291cmNlID0gbmV3IEZpbGUoY29udGVudCwgInRlc3RTb3VyY2UiKTsKKyAgICBGaWxlIGV4Y2x1ZGUgPSBuZXcgRmlsZShjb250ZW50LCAiZXhjbHVkZSIpOworICAgIEZpbGUgY2xhc3NlcyA9IG5ldyBGaWxlKGNvbnRlbnQsICJjbGFzc2VzIik7CisgICAgRmlsZSB0ZXN0Q2xhc3NlcyA9IG5ldyBGaWxlKGNvbnRlbnQsICJ0ZXN0Q2xhc3NlcyIpOworICAgIGZpbmFsIFZpcnR1YWxGaWxlIGNvbnRlbnRGaWxlID0gTG9jYWxGaWxlU3lzdGVtLmdldEluc3RhbmNlKCkuZmluZEZpbGVCeUlvRmlsZShjb250ZW50KTsKKyAgICBhc3NlcnROb3ROdWxsKGNvbnRlbnRGaWxlKTsKKyAgICBmaW5hbCBWaXJ0dWFsRmlsZSBzb3VyY2VGaWxlID0gTG9jYWxGaWxlU3lzdGVtLmdldEluc3RhbmNlKCkuZmluZEZpbGVCeUlvRmlsZShzb3VyY2UpOworICAgIGFzc2VydE5vdE51bGwoc291cmNlRmlsZSk7CisgICAgZmluYWwgVmlydHVhbEZpbGUgdGVzdFNvdXJjZUZpbGUgPSBMb2NhbEZpbGVTeXN0ZW0uZ2V0SW5zdGFuY2UoKS5maW5kRmlsZUJ5SW9GaWxlKHRlc3RTb3VyY2UpOworICAgIGFzc2VydE5vdE51bGwodGVzdFNvdXJjZUZpbGUpOworICAgIGZpbmFsIFZpcnR1YWxGaWxlIGV4Y2x1ZGVGaWxlID0gTG9jYWxGaWxlU3lzdGVtLmdldEluc3RhbmNlKCkuZmluZEZpbGVCeUlvRmlsZShleGNsdWRlKTsKKworICAgIGFzc2VydE5vdE51bGwoZXhjbHVkZUZpbGUpOworICAgIGZpbmFsIFZpcnR1YWxGaWxlIGNsYXNzZXNGaWxlID0gTG9jYWxGaWxlU3lzdGVtLmdldEluc3RhbmNlKCkuZmluZEZpbGVCeUlvRmlsZShjbGFzc2VzKTsKKworICAgIGFzc2VydE5vdE51bGwoY2xhc3Nlc0ZpbGUpOworICAgIGZpbmFsIFZpcnR1YWxGaWxlIHRlc3RDbGFzc2VzRmlsZSA9IExvY2FsRmlsZVN5c3RlbS5nZXRJbnN0YW5jZSgpLmZpbmRGaWxlQnlJb0ZpbGUodGVzdENsYXNzZXMpOworCisgICAgYXNzZXJ0Tm90TnVsbCh0ZXN0Q2xhc3Nlc0ZpbGUpOworCisgICAgZmluYWwgRmlsZSBtb2R1bGVGaWxlID0gbmV3IEZpbGUoY29udGVudCwgInRlc3QuaW1sIik7CisgICAgZmluYWwgTW9kdWxlIG1vZHVsZSA9IGNyZWF0ZU1vZHVsZShtb2R1bGVGaWxlKTsKKyAgICBmaW5hbCBNb2R1bGVSb290TWFuYWdlckltcGwgbW9kdWxlUm9vdE1hbmFnZXIgPQorICAgICAgKE1vZHVsZVJvb3RNYW5hZ2VySW1wbClNb2R1bGVSb290TWFuYWdlci5nZXRJbnN0YW5jZShtb2R1bGUpOworCisgICAgUHNpVGVzdFV0aWwuYWRkQ29udGVudFJvb3QobW9kdWxlLCBjb250ZW50RmlsZSk7CisgICAgUHNpVGVzdFV0aWwuYWRkU291cmNlUm9vdChtb2R1bGUsIHNvdXJjZUZpbGUpOworICAgIFBzaVRlc3RVdGlsLmFkZFNvdXJjZVJvb3QobW9kdWxlLCB0ZXN0U291cmNlRmlsZSwgdHJ1ZSk7CisgICAgTW9kdWxlUm9vdE1vZGlmaWNhdGlvblV0aWwuc2V0TW9kdWxlU2RrKG1vZHVsZSwgSWRlYVRlc3RVdGlsLmdldE1vY2tKZGsxNygpKTsKKyAgICBQc2lUZXN0VXRpbC5hZGRFeGNsdWRlZFJvb3QobW9kdWxlLCBleGNsdWRlRmlsZSk7CisgICAgUHNpVGVzdFV0aWwuc2V0Q29tcGlsZXJPdXRwdXRQYXRoKG1vZHVsZSwgY2xhc3Nlc0ZpbGUuZ2V0VXJsKCksIGZhbHNlKTsKKyAgICBQc2lUZXN0VXRpbC5zZXRDb21waWxlck91dHB1dFBhdGgobW9kdWxlLCB0ZXN0Q2xhc3Nlc0ZpbGUuZ2V0VXJsKCksIHRydWUpOworCisgICAgZmluYWwgRWxlbWVudCBlbGVtZW50ID0gbmV3IEVsZW1lbnQoInJvb3QiKTsKKyAgICBtb2R1bGVSb290TWFuYWdlci5nZXRTdGF0ZSgpLndyaXRlRXh0ZXJuYWwoZWxlbWVudCk7CisgICAgYXNzZXJ0RWxlbWVudEVxdWFscyhlbGVtZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgIjxyb290IGluaGVyaXQtY29tcGlsZXItb3V0cHV0PVwiZmFsc2VcIj4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICI8b3V0cHV0IHVybD1cImZpbGU6Ly8kTU9EVUxFX0RJUiQvY2xhc3Nlc1wiIC8+IiArCisgICAgICAgICAgICAgICAgICAgICAgICAiPG91dHB1dC10ZXN0IHVybD1cImZpbGU6Ly8kTU9EVUxFX0RJUiQvdGVzdENsYXNzZXNcIiAvPiIgKworICAgICAgICAgICAgICAgICAgICAgICAgIjxleGNsdWRlLW91dHB1dCAvPiIgKworICAgICAgICAgICAgICAgICAgICAgICAgIjxjb250ZW50IHVybD1cImZpbGU6Ly8kTU9EVUxFX0RJUiRcIj4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICI8c291cmNlRm9sZGVyIHVybD1cImZpbGU6Ly8kTU9EVUxFX0RJUiQvc291cmNlXCIgaXNUZXN0U291cmNlPVwiZmFsc2VcIiAvPiIgKworICAgICAgICAgICAgICAgICAgICAgICAgIjxzb3VyY2VGb2xkZXIgdXJsPVwiZmlsZTovLyRNT0RVTEVfRElSJC90ZXN0U291cmNlXCIgaXNUZXN0U291cmNlPVwidHJ1ZVwiIC8+IiArCisgICAgICAgICAgICAgICAgICAgICAgICAiPGV4Y2x1ZGVGb2xkZXIgdXJsPVwiZmlsZTovLyRNT0RVTEVfRElSJC9leGNsdWRlXCIgLz4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICI8L2NvbnRlbnQ+IiArCisgICAgICAgICAgICAgICAgICAgICAgICAiPG9yZGVyRW50cnkgdHlwZT1cImpka1wiIGpka05hbWU9XCJqYXZhIDEuN1wiIGpka1R5cGU9XCJKYXZhU0RLXCIgLz4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICI8b3JkZXJFbnRyeSB0eXBlPVwic291cmNlRm9sZGVyXCIgZm9yVGVzdHM9XCJmYWxzZVwiIC8+IiArCisgICAgICAgICAgICAgICAgICAgICAgICAiPC9yb290PiIsCisgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGUpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdE1vZHVsZUxpYnJhcmllcygpIHRocm93cyBFeGNlcHRpb24geworICAgIEZpbGUgbW9kdWxlRmlsZSA9IG5ldyBGaWxlKGdldFRlc3RSb290KCksICJ0ZXN0LmltbCIpOworICAgIE1vZHVsZSBtb2R1bGUgPSBjcmVhdGVNb2R1bGUobW9kdWxlRmlsZSk7CisgICAgZmluYWwgTW9kdWxlUm9vdE1hbmFnZXJJbXBsIG1vZHVsZVJvb3RNYW5hZ2VyID0KKyAgICAgIChNb2R1bGVSb290TWFuYWdlckltcGwpTW9kdWxlUm9vdE1hbmFnZXIuZ2V0SW5zdGFuY2UobW9kdWxlKTsKKyAgICBmaW5hbCBNb2RpZmlhYmxlUm9vdE1vZGVsIHJvb3RNb2RlbCA9IG1vZHVsZVJvb3RNYW5hZ2VyLmdldE1vZGlmaWFibGVNb2RlbCgpOworICAgIGZpbmFsIExpYnJhcnlUYWJsZSBtb2R1bGVMaWJyYXJ5VGFibGUgPSByb290TW9kZWwuZ2V0TW9kdWxlTGlicmFyeVRhYmxlKCk7CisKKyAgICBmaW5hbCBMaWJyYXJ5IHVubmFtZWRMaWJyYXJ5ID0gbW9kdWxlTGlicmFyeVRhYmxlLmNyZWF0ZUxpYnJhcnkoKTsKKyAgICBmaW5hbCBGaWxlIHVubmFtZWRMaWJDbGFzc2VzID0gbmV3IEZpbGUoZ2V0VGVzdFJvb3QoKSwgInVubmFtZWRMaWJDbGFzc2VzIik7CisgICAgZmluYWwgVmlydHVhbEZpbGUgdW5uYW1lZExpYkNsYXNzZXNSb290ID0gTG9jYWxGaWxlU3lzdGVtLmdldEluc3RhbmNlKCkuZmluZEZpbGVCeUlvRmlsZSh1bm5hbWVkTGliQ2xhc3Nlcyk7CisgICAgZmluYWwgTGlicmFyeS5Nb2RpZmlhYmxlTW9kZWwgbGlicmFyeU1vZGlmeWFibGVNb2RlbCA9IHVubmFtZWRMaWJyYXJ5LmdldE1vZGlmaWFibGVNb2RlbCgpOworICAgIGxpYnJhcnlNb2RpZnlhYmxlTW9kZWwuYWRkUm9vdCh1bm5hbWVkTGliQ2xhc3Nlc1Jvb3QuZ2V0VXJsKCksIE9yZGVyUm9vdFR5cGUuQ0xBU1NFUyk7CisKKyAgICBmaW5hbCBMaWJyYXJ5IG5hbWVkTGlicmFyeSA9IG1vZHVsZUxpYnJhcnlUYWJsZS5jcmVhdGVMaWJyYXJ5KCJuYW1lZExpYnJhcnkiKTsKKyAgICBmaW5hbCBGaWxlIG5hbWVkTGliQ2xhc3NlcyA9IG5ldyBGaWxlKGdldFRlc3RSb290KCksICJuYW1lZExpYkNsYXNzZXMiKTsKKyAgICBmaW5hbCBWaXJ0dWFsRmlsZSBuYW1lZExpYkNsYXNzZXNSb290ID0gTG9jYWxGaWxlU3lzdGVtLmdldEluc3RhbmNlKCkuZmluZEZpbGVCeUlvRmlsZShuYW1lZExpYkNsYXNzZXMpOworICAgIGZpbmFsIExpYnJhcnkuTW9kaWZpYWJsZU1vZGVsIG5hbWVkTGlicmFyeU1vZGVsID0gbmFtZWRMaWJyYXJ5LmdldE1vZGlmaWFibGVNb2RlbCgpOworICAgIG5hbWVkTGlicmFyeU1vZGVsLmFkZFJvb3QobmFtZWRMaWJDbGFzc2VzUm9vdC5nZXRVcmwoKSwgT3JkZXJSb290VHlwZS5DTEFTU0VTKTsKKworICAgIEFwcGxpY2F0aW9uTWFuYWdlci5nZXRBcHBsaWNhdGlvbigpLnJ1bldyaXRlQWN0aW9uKG5ldyBSdW5uYWJsZSgpIHsKKyAgICAgIEBPdmVycmlkZQorICAgICAgcHVibGljIHZvaWQgcnVuKCkgeworICAgICAgICBsaWJyYXJ5TW9kaWZ5YWJsZU1vZGVsLmNvbW1pdCgpOworICAgICAgICBuYW1lZExpYnJhcnlNb2RlbC5jb21taXQoKTsKKyAgICAgIH0KKyAgICB9KTsKKworICAgIGZpbmFsIEl0ZXJhdG9yIGxpYnJhcnlJdGVyYXRvciA9IG1vZHVsZUxpYnJhcnlUYWJsZS5nZXRMaWJyYXJ5SXRlcmF0b3IoKTsKKyAgICBhc3NlcnRFcXVhbHMobGlicmFyeUl0ZXJhdG9yLm5leHQoKSwgdW5uYW1lZExpYnJhcnkpOworICAgIGFzc2VydEVxdWFscyhsaWJyYXJ5SXRlcmF0b3IubmV4dCgpLCBuYW1lZExpYnJhcnkpOworCisgICAgQXBwbGljYXRpb25NYW5hZ2VyLmdldEFwcGxpY2F0aW9uKCkucnVuV3JpdGVBY3Rpb24obmV3IFJ1bm5hYmxlKCkgeworICAgICAgQE92ZXJyaWRlCisgICAgICBwdWJsaWMgdm9pZCBydW4oKSB7CisgICAgICAgIHJvb3RNb2RlbC5jb21taXQoKTsKKyAgICAgIH0KKyAgICB9KTsKKyAgICBmaW5hbCBFbGVtZW50IGVsZW1lbnQgPSBuZXcgRWxlbWVudCgicm9vdCIpOworICAgIG1vZHVsZVJvb3RNYW5hZ2VyLmdldFN0YXRlKCkud3JpdGVFeHRlcm5hbChlbGVtZW50KTsKKyAgICBhc3NlcnRFbGVtZW50RXF1YWxzKGVsZW1lbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAiPHJvb3QgaW5oZXJpdC1jb21waWxlci1vdXRwdXQ9XCJ0cnVlXCI+IiArCisgICAgICAgICAgICAgICAgICAgICAgICAiPGV4Y2x1ZGUtb3V0cHV0IC8+IiArCisgICAgICAgICAgICAgICAgICAgICAgICAiPG9yZGVyRW50cnkgdHlwZT1cInNvdXJjZUZvbGRlclwiIGZvclRlc3RzPVwiZmFsc2VcIiAvPiIgKworICAgICAgICAgICAgICAgICAgICAgICAgIjxvcmRlckVudHJ5IHR5cGU9XCJtb2R1bGUtbGlicmFyeVwiPiIgKworICAgICAgICAgICAgICAgICAgICAgICAgIjxsaWJyYXJ5PiIgKworICAgICAgICAgICAgICAgICAgICAgICAgIjxDTEFTU0VTPjxyb290IHVybD1cImZpbGU6Ly8kTU9EVUxFX0RJUiQvdW5uYW1lZExpYkNsYXNzZXNcIiAvPjwvQ0xBU1NFUz4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICI8SkFWQURPQyAvPiIgKworICAgICAgICAgICAgICAgICAgICAgICAgIjxTT1VSQ0VTIC8+IiArCisgICAgICAgICAgICAgICAgICAgICAgICAiPC9saWJyYXJ5PiIgKworICAgICAgICAgICAgICAgICAgICAgICAgIjwvb3JkZXJFbnRyeT4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICI8b3JkZXJFbnRyeSB0eXBlPVwibW9kdWxlLWxpYnJhcnlcIj4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICI8bGlicmFyeSBuYW1lPVwibmFtZWRMaWJyYXJ5XCI+IiArCisgICAgICAgICAgICAgICAgICAgICAgICAiPENMQVNTRVM+PHJvb3QgdXJsPVwiZmlsZTovLyRNT0RVTEVfRElSJC9uYW1lZExpYkNsYXNzZXNcIiAvPjwvQ0xBU1NFUz4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICI8SkFWQURPQyAvPiIgKworICAgICAgICAgICAgICAgICAgICAgICAgIjxTT1VSQ0VTIC8+IiArCisgICAgICAgICAgICAgICAgICAgICAgICAiPC9saWJyYXJ5PiIgKworICAgICAgICAgICAgICAgICAgICAgICAgIjwvb3JkZXJFbnRyeT4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICI8L3Jvb3Q+IiwgbW9kdWxlKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RDb21waWxlck91dHB1dEluaGVyaXRhbmNlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgRmlsZSBtb2R1bGVGaWxlID0gbmV3IEZpbGUoZ2V0VGVzdFJvb3QoKSwgInRlc3QuaW1sIik7CisgICAgTW9kdWxlIG1vZHVsZSA9IGNyZWF0ZU1vZHVsZShtb2R1bGVGaWxlKTsKKyAgICBmaW5hbCBNb2R1bGVSb290TWFuYWdlckltcGwgbW9kdWxlUm9vdE1hbmFnZXIgPQorICAgICAgKE1vZHVsZVJvb3RNYW5hZ2VySW1wbClNb2R1bGVSb290TWFuYWdlci5nZXRJbnN0YW5jZShtb2R1bGUpOworICAgIGZpbmFsIE1vZGlmaWFibGVSb290TW9kZWwgcm9vdE1vZGVsID0gbW9kdWxlUm9vdE1hbmFnZXIuZ2V0TW9kaWZpYWJsZU1vZGVsKCk7CisgICAgcm9vdE1vZGVsLmdldE1vZHVsZUV4dGVuc2lvbihDb21waWxlck1vZHVsZUV4dGVuc2lvbi5jbGFzcykuaW5oZXJpdENvbXBpbGVyT3V0cHV0UGF0aCh0cnVlKTsKKyAgICBBcHBsaWNhdGlvbk1hbmFnZXIuZ2V0QXBwbGljYXRpb24oKS5ydW5Xcml0ZUFjdGlvbihuZXcgUnVubmFibGUoKSB7CisgICAgICBAT3ZlcnJpZGUKKyAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKKyAgICAgICAgcm9vdE1vZGVsLmNvbW1pdCgpOworICAgICAgfQorICAgIH0pOworICAgIEVsZW1lbnQgZWxlbWVudCA9IG5ldyBFbGVtZW50KCJyb290Iik7CisgICAgbW9kdWxlUm9vdE1hbmFnZXIuZ2V0U3RhdGUoKS53cml0ZUV4dGVybmFsKGVsZW1lbnQpOworICAgIGFzc2VydEVsZW1lbnRFcXVhbHMoZWxlbWVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICI8cm9vdCBpbmhlcml0LWNvbXBpbGVyLW91dHB1dD1cInRydWVcIj4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICI8ZXhjbHVkZS1vdXRwdXQgLz4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICI8b3JkZXJFbnRyeSB0eXBlPVwic291cmNlRm9sZGVyXCIgZm9yVGVzdHM9XCJmYWxzZVwiIC8+IiArCisgICAgICAgICAgICAgICAgICAgICAgICAiPC9yb290PiIsIG1vZHVsZSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0TWFjcm9TdWJzdGl0dXRlV2luKCkgeworICAgIGZpbmFsIFJlcGxhY2VQYXRoVG9NYWNyb01hcCBtYXAgPSBuZXcgUmVwbGFjZVBhdGhUb01hY3JvTWFwKCk7CisgICAgZmluYWwgU3RyaW5nIHBhdGggPSAiamFyOi8vQzovaWRlYS9saWIvZm9ybXNfcnQuamFyIS8iOworICAgIG1hcC5wdXQoImphcjovL0M6LyIsICJqYXI6Ly8kTU9EVUxFX0RJUiQvLi4vLi4vIik7CisKKyAgICBmaW5hbCBTdHJpbmcgc3Vic3RpdHV0ZWQgPSBtYXAuc3Vic3RpdHV0ZShwYXRoLCBmYWxzZSk7CisgICAgYXNzZXJ0RXF1YWxzKCJqYXI6Ly8kTU9EVUxFX0RJUiQvLi4vLi4vaWRlYS9saWIvZm9ybXNfcnQuamFyIS8iLCBzdWJzdGl0dXRlZCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0RXhwYW5kTWFjcm8xKCkgeworICAgIGZpbmFsIEV4cGFuZE1hY3JvVG9QYXRoTWFwIG1hcCA9IG5ldyBFeHBhbmRNYWNyb1RvUGF0aE1hcCgpOworICAgIG1hcC5hZGRNYWNyb0V4cGFuZCgiTUFDUk8iLCAiQzovaWRlYSIpOworCisgICAgZmluYWwgU3RyaW5nIGV4cGFuZGVkID0gbWFwLnN1YnN0aXR1dGUoImphcjovLyRNQUNSTyQvbGliL2Zvcm1zX3J0LmphciEvIiwgZmFsc2UpOworICAgIGFzc2VydEVxdWFscygiamFyOi8vQzovaWRlYS9saWIvZm9ybXNfcnQuamFyIS8iLCBleHBhbmRlZCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0RXhwYW5kTWFjcm8yKCkgeworICAgIGZpbmFsIEV4cGFuZE1hY3JvVG9QYXRoTWFwIG1hcCA9IG5ldyBFeHBhbmRNYWNyb1RvUGF0aE1hcCgpOworICAgIG1hcC5hZGRNYWNyb0V4cGFuZCgiTUFDUk8iLCAiZm9ybXNfcnQuamFyIS8iKTsKKworICAgIGZpbmFsIFN0cmluZyBleHBhbmRlZCA9IG1hcC5zdWJzdGl0dXRlKCJqYXI6Ly9DOi9pZGVhL2xpYi8kTUFDUk8kIiwgZmFsc2UpOworICAgIGFzc2VydEVxdWFscygiamFyOi8vQzovaWRlYS9saWIvZm9ybXNfcnQuamFyIS8iLCBleHBhbmRlZCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0RXhwYW5kTWFjcm8zKCkgeworICAgIGZpbmFsIEV4cGFuZE1hY3JvVG9QYXRoTWFwIG1hcCA9IG5ldyBFeHBhbmRNYWNyb1RvUGF0aE1hcCgpOworICAgIG1hcC5hZGRNYWNyb0V4cGFuZCgiTUFDUk8xIiwgIkM6L2lkZWEiKTsKKyAgICBtYXAuYWRkTWFjcm9FeHBhbmQoIk1BQ1JPMiIsICJmb3Jtc19ydC5qYXIhLyIpOworCisgICAgZmluYWwgU3RyaW5nIGV4cGFuZGVkID0gbWFwLnN1YnN0aXR1dGUoImphcjovLyRNQUNSTzEkL2xpYi8kTUFDUk8yJCIsIGZhbHNlKTsKKyAgICBhc3NlcnRFcXVhbHMoImphcjovL0M6L2lkZWEvbGliL2Zvcm1zX3J0LmphciEvIiwgZXhwYW5kZWQpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEV4cGFuZE1hY3JvTm9FeHBhbmQoKSB7CisgICAgZmluYWwgRXhwYW5kTWFjcm9Ub1BhdGhNYXAgbWFwID0gbmV3IEV4cGFuZE1hY3JvVG9QYXRoTWFwKCk7CisgICAgbWFwLmFkZE1hY3JvRXhwYW5kKCJNQUNSTyIsICJDOi9pZGVhIik7CisKKyAgICBmaW5hbCBTdHJpbmcgZXhwYW5kZWQgPSBtYXAuc3Vic3RpdHV0ZSgiamFyOi8vQzovaWRlYSQvbGliL2Zvcm1zX3J0LmphciEvIiwgZmFsc2UpOworICAgIGFzc2VydEVxdWFscygiamFyOi8vQzovaWRlYSQvbGliL2Zvcm1zX3J0LmphciEvIiwgZXhwYW5kZWQpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEV4cGFuZE1hY3JvTm9FeHBhbmQyKCkgeworICAgIGZpbmFsIEV4cGFuZE1hY3JvVG9QYXRoTWFwIG1hcCA9IG5ldyBFeHBhbmRNYWNyb1RvUGF0aE1hcCgpOworICAgIG1hcC5hZGRNYWNyb0V4cGFuZCgiTUFDUk8iLCAiQzovaWRlYSIpOworCisgICAgZmluYWwgU3RyaW5nIGV4cGFuZGVkID0gbWFwLnN1YnN0aXR1dGUoImphcjovL0M6L2lkZWEvbGliL2Zvcm1zX3J0LmphciEvJCIsIGZhbHNlKTsKKyAgICBhc3NlcnRFcXVhbHMoImphcjovL0M6L2lkZWEvbGliL2Zvcm1zX3J0LmphciEvJCIsIGV4cGFuZGVkKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RFeHBhbmRNYWNyb05vRXhwYW5kMygpIHsKKyAgICBmaW5hbCBFeHBhbmRNYWNyb1RvUGF0aE1hcCBtYXAgPSBuZXcgRXhwYW5kTWFjcm9Ub1BhdGhNYXAoKTsKKyAgICBtYXAuYWRkTWFjcm9FeHBhbmQoIk1BQ1JPIiwgIkM6L2lkZWEiKTsKKworICAgIGZpbmFsIFN0cmluZyBleHBhbmRlZCA9IG1hcC5zdWJzdGl0dXRlKCJqYXI6Ly8kVU5LTk9XTiQvbGliL2Zvcm1zX3J0LmphciEvIiwgZmFsc2UpOworICAgIGFzc2VydEVxdWFscygiamFyOi8vJFVOS05PV04kL2xpYi9mb3Jtc19ydC5qYXIhLyIsIGV4cGFuZGVkKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RNYWNyb1N1YnN0aXR1dGUyKCkgeworICAgIGZpbmFsIFJlcGxhY2VQYXRoVG9NYWNyb01hcCBtYXAgPSBuZXcgUmVwbGFjZVBhdGhUb01hY3JvTWFwKCk7CisgICAgZmluYWwgU3RyaW5nIHBhdGggPSAiamFyOi8vQzovaWRlYS9saWIvZm9ybXNfcnQuamFyIS8iOworICAgIG1hcC5wdXQoImphcjovL0M6L2lkIiwgIipTVUJTVCoiKTsKKworICAgIGZpbmFsIFN0cmluZyBzdWJzdGl0dXRlZCA9IG1hcC5zdWJzdGl0dXRlKHBhdGgsIGZhbHNlKTsKKyAgICBhc3NlcnRFcXVhbHMocGF0aCwgc3Vic3RpdHV0ZWQpOworICB9CisKKyAgcHVibGljIHN0YXRpYyB2b2lkIGFzc2VydEVsZW1lbnRFcXVhbHMoZmluYWwgRWxlbWVudCBlbGVtZW50LCBTdHJpbmcgdmFsdWUsIE1vZHVsZSBtb2R1bGUpIHsKKyAgICBQYXRoTWFjcm9NYW5hZ2VyLmdldEluc3RhbmNlKG1vZHVsZSkuY29sbGFwc2VQYXRocyhlbGVtZW50KTsKKyAgICBhc3NlcnRFcXVhbHModmFsdWUsIG5ldyBYTUxPdXRwdXR0ZXIoKS5vdXRwdXRTdHJpbmcoZWxlbWVudCkpOworICB9CisKKyAgcHJpdmF0ZSBGaWxlIGdldFRlc3RSb290KCkgeworICAgIEZpbGUgdGVzdFJvb3QgPSBuZXcgRmlsZShQYXRoTWFuYWdlckV4LmdldFRlc3REYXRhUGF0aCgpKTsKKyAgICBGaWxlIG1vZHVsZVJvb3RNYW5hZ2VyUm9vdCA9IG5ldyBGaWxlKHRlc3RSb290LCAibW9kdWxlUm9vdE1hbmFnZXIiKTsKKyAgICBGaWxlIHRoaXNUZXN0Um9vdCA9IG5ldyBGaWxlKG1vZHVsZVJvb3RNYW5hZ2VyUm9vdCwgZ2V0VGVzdE5hbWUodHJ1ZSkpOworICAgIHJldHVybiB0aGlzVGVzdFJvb3Q7CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9yb290cy9Nb2R1bGVTY29wZXNUZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovcm9vdHMvTW9kdWxlU2NvcGVzVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU3ODBmNDYKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovcm9vdHMvTW9kdWxlU2NvcGVzVGVzdC5qYXZhCkBAIC0wLDAgKzEsMTk4IEBACitwYWNrYWdlIGNvbS5pbnRlbGxpai5yb290czsKKworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLmFwcGxpY2F0aW9uLkFwcGxpY2F0aW9uTWFuYWdlcjsKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS5tb2R1bGUuTW9kdWxlOworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLm1vZHVsZS5TdGRNb2R1bGVUeXBlczsKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS5yb290cy4qOworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLnZmcy5WaXJ0dWFsRmlsZTsKK2ltcG9ydCBjb20uaW50ZWxsaWoudGVzdEZyYW1ld29yay5Nb2R1bGVUZXN0Q2FzZTsKK2ltcG9ydCBjb20uaW50ZWxsaWoudGVzdEZyYW1ld29yay5Qc2lUZXN0VXRpbDsKK2ltcG9ydCBjb20uaW50ZWxsaWoudGVzdEZyYW1ld29yay5maXh0dXJlcy5pbXBsLkxpZ2h0VGVtcERpclRlc3RGaXh0dXJlSW1wbDsKK2ltcG9ydCBjb20uaW50ZWxsaWoudXRpbC5QYXRoc0xpc3Q7CisKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uczsKKworLyoqCisgKiBAYXV0aG9yIHlvbGUKKyAqLworcHVibGljIGNsYXNzIE1vZHVsZVNjb3Blc1Rlc3QgZXh0ZW5kcyBNb2R1bGVUZXN0Q2FzZSB7CisgIHByaXZhdGUgTGlnaHRUZW1wRGlyVGVzdEZpeHR1cmVJbXBsIG15Rml4dHVyZTsKKworICBAT3ZlcnJpZGUKKyAgcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBzdXBlci5zZXRVcCgpOworICAgIG15Rml4dHVyZSA9IG5ldyBMaWdodFRlbXBEaXJUZXN0Rml4dHVyZUltcGwoKTsKKyAgfQorCisgIEBPdmVycmlkZQorICBwcm90ZWN0ZWQgdm9pZCB0ZWFyRG93bigpIHRocm93cyBFeGNlcHRpb24geworICAgIHN1cGVyLnRlYXJEb3duKCk7CisgICAgbXlGaXh0dXJlLmRlbGV0ZUFsbCgpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEJhc2ljcygpIHRocm93cyBFeGNlcHRpb24geworICAgIE1vZHVsZSBtb2R1bGVBID0gY3JlYXRlTW9kdWxlKCJhLmltbCIsIFN0ZE1vZHVsZVR5cGVzLkpBVkEpOworICAgIGFkZERlcGVuZGVudE1vZHVsZShtb2R1bGVBLCBEZXBlbmRlbmN5U2NvcGUuQ09NUElMRSk7CisgICAgYWRkTGlicmFyeShtb2R1bGVBLCBEZXBlbmRlbmN5U2NvcGUuQ09NUElMRSk7CisKKyAgICBWaXJ0dWFsRmlsZSBjbGFzc0IgPSBteUZpeHR1cmUuY3JlYXRlRmlsZSgiYi9UZXN0LmphdmEiLCAicHVibGljIGNsYXNzIFRlc3QgeyB9Iik7CisgICAgVmlydHVhbEZpbGUgbGlicmFyeUNsYXNzID0gbXlGaXh0dXJlLmNyZWF0ZUZpbGUoImxpYi9UZXN0LmNsYXNzIik7CisKKyAgICBhc3NlcnRGYWxzZShtb2R1bGVBLmdldE1vZHVsZVNjb3BlKCkuY29udGFpbnMoY2xhc3NCKSk7CisgICAgYXNzZXJ0RmFsc2UobW9kdWxlQS5nZXRNb2R1bGVTY29wZSgpLmNvbnRhaW5zKGxpYnJhcnlDbGFzcykpOworCisgICAgYXNzZXJ0RmFsc2UobW9kdWxlQS5nZXRNb2R1bGVXaXRoTGlicmFyaWVzU2NvcGUoKS5jb250YWlucyhjbGFzc0IpKTsKKyAgICBhc3NlcnRUcnVlKG1vZHVsZUEuZ2V0TW9kdWxlV2l0aExpYnJhcmllc1Njb3BlKCkuY29udGFpbnMobGlicmFyeUNsYXNzKSk7CisKKyAgICBhc3NlcnRUcnVlKG1vZHVsZUEuZ2V0TW9kdWxlV2l0aERlcGVuZGVuY2llc1Njb3BlKCkuY29udGFpbnMoY2xhc3NCKSk7CisgICAgYXNzZXJ0RmFsc2UobW9kdWxlQS5nZXRNb2R1bGVXaXRoRGVwZW5kZW5jaWVzU2NvcGUoKS5jb250YWlucyhsaWJyYXJ5Q2xhc3MpKTsKKworICAgIGFzc2VydFRydWUobW9kdWxlQS5nZXRNb2R1bGVXaXRoRGVwZW5kZW5jaWVzQW5kTGlicmFyaWVzU2NvcGUodHJ1ZSkuY29udGFpbnMoY2xhc3NCKSk7CisgICAgYXNzZXJ0VHJ1ZShtb2R1bGVBLmdldE1vZHVsZVdpdGhEZXBlbmRlbmNpZXNBbmRMaWJyYXJpZXNTY29wZSh0cnVlKS5jb250YWlucyhsaWJyYXJ5Q2xhc3MpKTsKKworICAgIGFzc2VydFRydWUobW9kdWxlQS5nZXRNb2R1bGVSdW50aW1lU2NvcGUodHJ1ZSkuY29udGFpbnMoY2xhc3NCKSk7CisgICAgYXNzZXJ0VHJ1ZShtb2R1bGVBLmdldE1vZHVsZVJ1bnRpbWVTY29wZSh0cnVlKS5jb250YWlucyhsaWJyYXJ5Q2xhc3MpKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RUZXN0T25seU1vZHVsZURlcGVuZGVuY3koKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBNb2R1bGUgbW9kdWxlQSA9IGNyZWF0ZU1vZHVsZSgiYS5pbWwiLCBTdGRNb2R1bGVUeXBlcy5KQVZBKTsKKyAgICBNb2R1bGUgbW9kdWxlQiA9IGFkZERlcGVuZGVudE1vZHVsZShtb2R1bGVBLCBEZXBlbmRlbmN5U2NvcGUuVEVTVCk7CisKKyAgICBWaXJ0dWFsRmlsZSBjbGFzc0IgPSBteUZpeHR1cmUuY3JlYXRlRmlsZSgiYi9UZXN0LmphdmEiLCAicHVibGljIGNsYXNzIFRlc3QgeyB9Iik7CisgICAgYXNzZXJ0VHJ1ZShtb2R1bGVBLmdldE1vZHVsZVdpdGhEZXBlbmRlbmNpZXNBbmRMaWJyYXJpZXNTY29wZSh0cnVlKS5jb250YWlucyhjbGFzc0IpKTsKKyAgICBhc3NlcnRGYWxzZShtb2R1bGVBLmdldE1vZHVsZVdpdGhEZXBlbmRlbmNpZXNBbmRMaWJyYXJpZXNTY29wZShmYWxzZSkuY29udGFpbnMoY2xhc3NCKSk7CisgICAgYXNzZXJ0RmFsc2UobW9kdWxlQS5nZXRNb2R1bGVXaXRoRGVwZW5kZW5jaWVzQW5kTGlicmFyaWVzU2NvcGUoZmFsc2UpLmlzU2VhcmNoSW5Nb2R1bGVDb250ZW50KG1vZHVsZUIpKTsKKworICAgIGZpbmFsIFZpcnR1YWxGaWxlW10gY29tcGlsYXRpb25DbGFzc3BhdGggPSBnZXRDb21waWxhdGlvbkNsYXNzcGF0aChtb2R1bGVBKTsKKyAgICBhc3NlcnRFcXVhbHMoMSwgY29tcGlsYXRpb25DbGFzc3BhdGgubGVuZ3RoKTsKKyAgICBmaW5hbCBWaXJ0dWFsRmlsZVtdIHByb2R1Y3Rpb25Db21waWxhdGlvbkNsYXNzcGF0aCA9IGdldFByb2R1Y3Rpb25Db21waWxlQ2xhc3NwYXRoKG1vZHVsZUEpOworICAgIGFzc2VydEVtcHR5KHByb2R1Y3Rpb25Db21waWxhdGlvbkNsYXNzcGF0aCk7CisKKyAgICBmaW5hbCBQYXRoc0xpc3QgcGF0aHNMaXN0ID0gT3JkZXJFbnVtZXJhdG9yLm9yZGVyRW50cmllcyhtb2R1bGVBKS5yZWN1cnNpdmVseSgpLmdldFBhdGhzTGlzdCgpOworICAgIGFzc2VydEVxdWFscygxLCBwYXRoc0xpc3QuZ2V0UGF0aExpc3QoKS5zaXplKCkpOworICAgIGZpbmFsIFBhdGhzTGlzdCBwYXRoc0xpc3RXaXRob3V0VGVzdHMgPSBPcmRlckVudW1lcmF0b3Iub3JkZXJFbnRyaWVzKG1vZHVsZUEpLnByb2R1Y3Rpb25Pbmx5KCkucmVjdXJzaXZlbHkoKS5nZXRQYXRoc0xpc3QoKTsKKyAgICBhc3NlcnRFcXVhbHMoMCwgcGF0aHNMaXN0V2l0aG91dFRlc3RzLmdldFBhdGhMaXN0KCkuc2l6ZSgpKTsKKyAgfQorCisgIHByaXZhdGUgTW9kdWxlIGFkZERlcGVuZGVudE1vZHVsZShmaW5hbCBNb2R1bGUgbW9kdWxlQSwgZmluYWwgRGVwZW5kZW5jeVNjb3BlIHNjb3BlKSB7CisgICAgZmluYWwgTW9kdWxlIG1vZHVsZUIgPSBjcmVhdGVNb2R1bGUoImIuaW1sIiwgU3RkTW9kdWxlVHlwZXMuSkFWQSk7CisKKyAgICBBcHBsaWNhdGlvbk1hbmFnZXIuZ2V0QXBwbGljYXRpb24oKS5ydW5Xcml0ZUFjdGlvbihuZXcgUnVubmFibGUoKSB7CisgICAgICBAT3ZlcnJpZGUKKyAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKKyAgICAgICAgVmlydHVhbEZpbGUgcm9vdEIgPSBteUZpeHR1cmUuZmluZE9yQ3JlYXRlRGlyKCJiIik7CisgICAgICAgIFZpcnR1YWxGaWxlIG91dEIgPSBteUZpeHR1cmUuZmluZE9yQ3JlYXRlRGlyKCJvdXQiKTsKKworICAgICAgICBNb2R1bGVSb290TW9kaWZpY2F0aW9uVXRpbC5hZGREZXBlbmRlbmN5KG1vZHVsZUEsIG1vZHVsZUIsIHNjb3BlLCBmYWxzZSk7CisKKyAgICAgICAgUHNpVGVzdFV0aWwuYWRkU291cmNlUm9vdChtb2R1bGVCLCByb290Qik7CisgICAgICAgIFBzaVRlc3RVdGlsLnNldENvbXBpbGVyT3V0cHV0UGF0aChtb2R1bGVCLCBvdXRCLmdldFVybCgpLCBmYWxzZSk7CisgICAgICB9CisgICAgfSk7CisKKyAgICByZXR1cm4gbW9kdWxlQjsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RUZXN0T25seUxpYnJhcnlEZXBlbmRlbmN5KCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKKyAgICBNb2R1bGUgbSA9IGNyZWF0ZU1vZHVsZSgiYS5pbWwiLCBTdGRNb2R1bGVUeXBlcy5KQVZBKTsKKyAgICBhZGRMaWJyYXJ5KG0sIERlcGVuZGVuY3lTY29wZS5URVNUKTsKKyAgICBWaXJ0dWFsRmlsZSBsaWJyYXJ5Q2xhc3MgPSBteUZpeHR1cmUuY3JlYXRlRmlsZSgibGliL1Rlc3QuY2xhc3MiKTsKKworICAgIGFzc2VydFRydWUobS5nZXRNb2R1bGVXaXRoRGVwZW5kZW5jaWVzQW5kTGlicmFyaWVzU2NvcGUodHJ1ZSkuY29udGFpbnMobGlicmFyeUNsYXNzKSk7CisgICAgYXNzZXJ0RmFsc2UobS5nZXRNb2R1bGVXaXRoRGVwZW5kZW5jaWVzQW5kTGlicmFyaWVzU2NvcGUoZmFsc2UpLmNvbnRhaW5zKGxpYnJhcnlDbGFzcykpOworCisgICAgZmluYWwgVmlydHVhbEZpbGVbXSBjb21waWxhdGlvbkNsYXNzcGF0aCA9IGdldENvbXBpbGF0aW9uQ2xhc3NwYXRoKG0pOworICAgIGFzc2VydEVxdWFscygxLCBjb21waWxhdGlvbkNsYXNzcGF0aC5sZW5ndGgpOworICAgIGZpbmFsIFZpcnR1YWxGaWxlW10gcHJvZHVjdGlvbkNvbXBpbGF0aW9uQ2xhc3NwYXRoID0gZ2V0UHJvZHVjdGlvbkNvbXBpbGVDbGFzc3BhdGgobSk7CisgICAgYXNzZXJ0RW1wdHkocHJvZHVjdGlvbkNvbXBpbGF0aW9uQ2xhc3NwYXRoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RSdW50aW1lTW9kdWxlRGVwZW5kZW5jeSgpIHRocm93cyBJT0V4Y2VwdGlvbiB7CisgICAgTW9kdWxlIG1vZHVsZUEgPSBjcmVhdGVNb2R1bGUoImEuaW1sIiwgU3RkTW9kdWxlVHlwZXMuSkFWQSk7CisgICAgYWRkRGVwZW5kZW50TW9kdWxlKG1vZHVsZUEsIERlcGVuZGVuY3lTY29wZS5SVU5USU1FKTsKKyAgICBmaW5hbCBWaXJ0dWFsRmlsZVtdIHJ1bnRpbWVDbGFzc3BhdGggPSBnZXRSdW50aW1lQ2xhc3NwYXRoKG1vZHVsZUEpOworICAgIGFzc2VydEVxdWFscygxLCBydW50aW1lQ2xhc3NwYXRoLmxlbmd0aCk7CisgICAgZmluYWwgVmlydHVhbEZpbGVbXSBjb21waWxhdGlvbkNsYXNzcGF0aCA9IGdldENvbXBpbGF0aW9uQ2xhc3NwYXRoKG1vZHVsZUEpOworICAgIGFzc2VydEVxdWFscygxLCBjb21waWxhdGlvbkNsYXNzcGF0aC5sZW5ndGgpOworICAgIFZpcnR1YWxGaWxlW10gcHJvZHVjdGlvbiA9IGdldFByb2R1Y3Rpb25Db21waWxlQ2xhc3NwYXRoKG1vZHVsZUEpOworICAgIGFzc2VydEVtcHR5KHByb2R1Y3Rpb24pOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFJ1bnRpbWVMaWJyYXJ5RGVwZW5kZW5jeSgpIHRocm93cyBJT0V4Y2VwdGlvbiB7CisgICAgTW9kdWxlIG0gPSBjcmVhdGVNb2R1bGUoImEuaW1sIiwgU3RkTW9kdWxlVHlwZXMuSkFWQSk7CisgICAgVmlydHVhbEZpbGUgbGlicmFyeVJvb3QgPSBhZGRMaWJyYXJ5KG0sIERlcGVuZGVuY3lTY29wZS5SVU5USU1FKTsKKworICAgIGZpbmFsIFZpcnR1YWxGaWxlW10gcnVudGltZUNsYXNzcGF0aCA9IGdldFJ1bnRpbWVDbGFzc3BhdGgobSk7CisgICAgYXNzZXJ0T3JkZXJlZEVxdWFscyhydW50aW1lQ2xhc3NwYXRoLCBsaWJyYXJ5Um9vdCk7CisKKyAgICBmaW5hbCBWaXJ0dWFsRmlsZVtdIGNvbXBpbGF0aW9uQ2xhc3NwYXRoID0gZ2V0Q29tcGlsYXRpb25DbGFzc3BhdGgobSk7CisgICAgYXNzZXJ0RXF1YWxzKDEsIGNvbXBpbGF0aW9uQ2xhc3NwYXRoLmxlbmd0aCk7CisgICAgVmlydHVhbEZpbGVbXSBwcm9kdWN0aW9uID0gZ2V0UHJvZHVjdGlvbkNvbXBpbGVDbGFzc3BhdGgobSk7CisgICAgYXNzZXJ0RW1wdHkocHJvZHVjdGlvbik7CisKKyAgICBWaXJ0dWFsRmlsZSBsaWJyYXJ5Q2xhc3MgPSBteUZpeHR1cmUuY3JlYXRlRmlsZSgibGliL1Rlc3QuY2xhc3MiKTsKKyAgICBhc3NlcnRGYWxzZShtLmdldE1vZHVsZVdpdGhEZXBlbmRlbmNpZXNBbmRMaWJyYXJpZXNTY29wZSh0cnVlKS5jb250YWlucyhsaWJyYXJ5Q2xhc3MpKTsKKyAgICBhc3NlcnRGYWxzZShtLmdldE1vZHVsZVdpdGhEZXBlbmRlbmNpZXNBbmRMaWJyYXJpZXNTY29wZShmYWxzZSkuY29udGFpbnMobGlicmFyeUNsYXNzKSk7CisKKyAgICBhc3NlcnRUcnVlKG0uZ2V0TW9kdWxlUnVudGltZVNjb3BlKHRydWUpLmNvbnRhaW5zKGxpYnJhcnlDbGFzcykpOworICAgIGFzc2VydFRydWUobS5nZXRNb2R1bGVSdW50aW1lU2NvcGUoZmFsc2UpLmNvbnRhaW5zKGxpYnJhcnlDbGFzcykpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdFByb3ZpZGVkTW9kdWxlRGVwZW5kZW5jeSgpIHRocm93cyBJT0V4Y2VwdGlvbiB7CisgICAgTW9kdWxlIG1vZHVsZUEgPSBjcmVhdGVNb2R1bGUoImEuaW1sIiwgU3RkTW9kdWxlVHlwZXMuSkFWQSk7CisgICAgYWRkRGVwZW5kZW50TW9kdWxlKG1vZHVsZUEsIERlcGVuZGVuY3lTY29wZS5QUk9WSURFRCk7CisgICAgVmlydHVhbEZpbGVbXSBydW50aW1lQ2xhc3NwYXRoID0gZ2V0UnVudGltZUNsYXNzcGF0aChtb2R1bGVBKTsKKyAgICBhc3NlcnRFbXB0eShydW50aW1lQ2xhc3NwYXRoKTsKKyAgICBmaW5hbCBWaXJ0dWFsRmlsZVtdIGNvbXBpbGF0aW9uQ2xhc3NwYXRoID0gZ2V0Q29tcGlsYXRpb25DbGFzc3BhdGgobW9kdWxlQSk7CisgICAgYXNzZXJ0RXF1YWxzKDEsIGNvbXBpbGF0aW9uQ2xhc3NwYXRoLmxlbmd0aCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0UHJvdmlkZWRMaWJyYXJ5RGVwZW5kZW5jeSgpIHRocm93cyBJT0V4Y2VwdGlvbiB7CisgICAgTW9kdWxlIG0gPSBjcmVhdGVNb2R1bGUoImEuaW1sIiwgU3RkTW9kdWxlVHlwZXMuSkFWQSk7CisgICAgVmlydHVhbEZpbGUgbGlicmFyeVJvb3QgPSBhZGRMaWJyYXJ5KG0sIERlcGVuZGVuY3lTY29wZS5QUk9WSURFRCk7CisKKyAgICBmaW5hbCBWaXJ0dWFsRmlsZVtdIHJ1bnRpbWVDbGFzc3BhdGggPSBnZXRSdW50aW1lQ2xhc3NwYXRoKG0pOworICAgIGFzc2VydEVtcHR5KHJ1bnRpbWVDbGFzc3BhdGgpOworCisgICAgZmluYWwgVmlydHVhbEZpbGVbXSBjb21waWxhdGlvbkNsYXNzcGF0aCA9IGdldENvbXBpbGF0aW9uQ2xhc3NwYXRoKG0pOworICAgIGFzc2VydE9yZGVyZWRFcXVhbHMoY29tcGlsYXRpb25DbGFzc3BhdGgsIGxpYnJhcnlSb290KTsKKworICAgIFZpcnR1YWxGaWxlIGxpYnJhcnlDbGFzcyA9IG15Rml4dHVyZS5jcmVhdGVGaWxlKCJsaWIvVGVzdC5jbGFzcyIpOworICAgIGFzc2VydFRydWUobS5nZXRNb2R1bGVXaXRoRGVwZW5kZW5jaWVzQW5kTGlicmFyaWVzU2NvcGUodHJ1ZSkuY29udGFpbnMobGlicmFyeUNsYXNzKSk7CisgICAgYXNzZXJ0VHJ1ZShtLmdldE1vZHVsZVdpdGhEZXBlbmRlbmNpZXNBbmRMaWJyYXJpZXNTY29wZShmYWxzZSkuY29udGFpbnMobGlicmFyeUNsYXNzKSk7CisKKyAgICBhc3NlcnRUcnVlKG0uZ2V0TW9kdWxlUnVudGltZVNjb3BlKHRydWUpLmNvbnRhaW5zKGxpYnJhcnlDbGFzcykpOworICAgIGFzc2VydFRydWUobS5nZXRNb2R1bGVSdW50aW1lU2NvcGUoZmFsc2UpLmNvbnRhaW5zKGxpYnJhcnlDbGFzcykpOworICB9CisKKyAgcHJpdmF0ZSBzdGF0aWMgVmlydHVhbEZpbGVbXSBnZXRSdW50aW1lQ2xhc3NwYXRoKE1vZHVsZSBtKSB7CisgICAgcmV0dXJuIE1vZHVsZVJvb3RNYW5hZ2VyLmdldEluc3RhbmNlKG0pLm9yZGVyRW50cmllcygpLnByb2R1Y3Rpb25Pbmx5KCkucnVudGltZU9ubHkoKS5yZWN1cnNpdmVseSgpLmdldENsYXNzZXNSb290cygpOworICB9CisKKyAgcHJpdmF0ZSBzdGF0aWMgVmlydHVhbEZpbGVbXSBnZXRQcm9kdWN0aW9uQ29tcGlsZUNsYXNzcGF0aChNb2R1bGUgbW9kdWxlQSkgeworICAgIHJldHVybiBNb2R1bGVSb290TWFuYWdlci5nZXRJbnN0YW5jZShtb2R1bGVBKS5vcmRlckVudHJpZXMoKS5wcm9kdWN0aW9uT25seSgpLmNvbXBpbGVPbmx5KCkucmVjdXJzaXZlbHkoKS5leHBvcnRlZE9ubHkoKQorICAgICAgLmdldENsYXNzZXNSb290cygpOworICB9CisKKyAgcHJpdmF0ZSBzdGF0aWMgVmlydHVhbEZpbGVbXSBnZXRDb21waWxhdGlvbkNsYXNzcGF0aChNb2R1bGUgbSkgeworICAgIHJldHVybiBNb2R1bGVSb290TWFuYWdlci5nZXRJbnN0YW5jZShtKS5vcmRlckVudHJpZXMoKS5yZWN1cnNpdmVseSgpLmV4cG9ydGVkT25seSgpLmdldENsYXNzZXNSb290cygpOworICB9CisKKyAgcHJpdmF0ZSBWaXJ0dWFsRmlsZSBhZGRMaWJyYXJ5KGZpbmFsIE1vZHVsZSBtLCBmaW5hbCBEZXBlbmRlbmN5U2NvcGUgc2NvcGUpIHsKKyAgICBmaW5hbCBWaXJ0dWFsRmlsZSBsaWJyYXJ5Um9vdCA9IG15Rml4dHVyZS5maW5kT3JDcmVhdGVEaXIoImxpYiIpOworCisgICAgTW9kdWxlUm9vdE1vZGlmaWNhdGlvblV0aWwuYWRkTW9kdWxlTGlicmFyeShtLCAibCIsIENvbGxlY3Rpb25zLnNpbmdsZXRvbkxpc3QobGlicmFyeVJvb3QuZ2V0VXJsKCkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29sbGVjdGlvbnMuPFN0cmluZz5lbXB0eUxpc3QoKSwgc2NvcGUpOworICAgIHJldHVybiBsaWJyYXJ5Um9vdDsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RMaWJVbmRlck1vZHVsZUNvbnRlbnQoKSB0aHJvd3MgSU9FeGNlcHRpb24geworICAgIFZpcnR1YWxGaWxlIGxpYiA9IG15Rml4dHVyZS5maW5kT3JDcmVhdGVEaXIoImxpYiIpOworICAgIFBzaVRlc3RVdGlsLmFkZENvbnRlbnRSb290KG15TW9kdWxlLCBsaWIpOworCisgICAgVmlydHVhbEZpbGUgZmlsZSA9IGxpYi5jcmVhdGVDaGlsZERhdGEodGhpcywgImEudHh0Iik7CisgICAgYWRkTGlicmFyeShteU1vZHVsZSwgRGVwZW5kZW5jeVNjb3BlLkNPTVBJTEUpOworICAgIGFzc2VydFRydWUobXlNb2R1bGUuZ2V0TW9kdWxlV2l0aERlcGVuZGVuY2llc0FuZExpYnJhcmllc1Njb3BlKGZhbHNlKS5jb250YWlucyhmaWxlKSk7CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9yb290cy9NdWx0aU1vZHVsZUVkaXRpbmdUZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovcm9vdHMvTXVsdGlNb2R1bGVFZGl0aW5nVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2MDQ4MDAKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovcm9vdHMvTXVsdGlNb2R1bGVFZGl0aW5nVGVzdC5qYXZhCkBAIC0wLDAgKzEsMjM1IEBACisvKgorICogQ29weXJpZ2h0IDIwMDAtMjAxMiBKZXRCcmFpbnMgcy5yLm8uCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworcGFja2FnZSBjb20uaW50ZWxsaWoucm9vdHM7CisKK2ltcG9ydCBjb20uaW50ZWxsaWouUHJvamVjdFRvcGljczsKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS5hcHBsaWNhdGlvbi5BcHBsaWNhdGlvbk1hbmFnZXI7CitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkuYXBwbGljYXRpb24uZXguUGF0aE1hbmFnZXJFeDsKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS5tb2R1bGUuTW9kaWZpYWJsZU1vZHVsZU1vZGVsOworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLm1vZHVsZS5Nb2R1bGU7CitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkubW9kdWxlLk1vZHVsZU1hbmFnZXI7CitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkubW9kdWxlLlN0ZE1vZHVsZVR5cGVzOworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLnJvb3RzLmltcGwuTW9kaWZpYWJsZU1vZGVsQ29tbWl0dGVyOworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLnByb2plY3QuTW9kdWxlQWRhcHRlcjsKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS5wcm9qZWN0LlByb2plY3Q7CitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkucm9vdHMuQ29udGVudEVudHJ5OworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLnJvb3RzLk1vZGlmaWFibGVSb290TW9kZWw7CitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkucm9vdHMuTW9kdWxlUm9vdE1hbmFnZXI7CitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkudXRpbC5Db21wdXRhYmxlOworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLnZmcy5Mb2NhbEZpbGVTeXN0ZW07CitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkudmZzLlZpcnR1YWxGaWxlOworaW1wb3J0IGNvbS5pbnRlbGxpai5wc2kuSmF2YVBzaUZhY2FkZTsKK2ltcG9ydCBjb20uaW50ZWxsaWoucHNpLnNlYXJjaC5HbG9iYWxTZWFyY2hTY29wZTsKK2ltcG9ydCBjb20uaW50ZWxsaWoudGVzdEZyYW1ld29yay5Nb2R1bGVUZXN0Q2FzZTsKK2ltcG9ydCBjb20uaW50ZWxsaWoudXRpbC5tZXNzYWdlcy5NZXNzYWdlQnVzQ29ubmVjdGlvbjsKKworaW1wb3J0IGphdmEuaW8uRmlsZTsKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworaW1wb3J0IGphdmEudXRpbC5BcnJheXM7CitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb25zOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCisvKioKKyAqIEBhdXRob3IgZHNsCisgKi8KK3B1YmxpYyBjbGFzcyBNdWx0aU1vZHVsZUVkaXRpbmdUZXN0IGV4dGVuZHMgTW9kdWxlVGVzdENhc2UgeworCisgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBURVNUX1BBVEggPSBQYXRoTWFuYWdlckV4LmdldFRlc3REYXRhUGF0aCgpICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIvbW9kdWxlUm9vdE1hbmFnZXIvbXVsdGlNb2R1bGVFZGl0aW5nIi5yZXBsYWNlKCcvJywgRmlsZS5zZXBhcmF0b3JDaGFyKTsKKyAgQE92ZXJyaWRlCisgIHByb3RlY3RlZCB2b2lkIHNldFVwTW9kdWxlKCkgeworICB9CisKKyAgQE92ZXJyaWRlCisgIHByb3RlY3RlZCB2b2lkIHNldFVwSmRrKCkgeworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEFkZFR3b01vZHVsZXMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBmaW5hbCBNZXNzYWdlQnVzQ29ubmVjdGlvbiBjb25uZWN0aW9uID0gbXlQcm9qZWN0LmdldE1lc3NhZ2VCdXMoKS5jb25uZWN0KCk7CisgICAgZmluYWwgTXlNb2R1bGVMaXN0ZW5lciBtb2R1bGVMaXN0ZW5lciA9IG5ldyBNeU1vZHVsZUxpc3RlbmVyKCk7CisgICAgY29ubmVjdGlvbi5zdWJzY3JpYmUoUHJvamVjdFRvcGljcy5NT0RVTEVTLCBtb2R1bGVMaXN0ZW5lcik7CisgICAgZmluYWwgTW9kdWxlTWFuYWdlciBtb2R1bGVNYW5hZ2VyID0gTW9kdWxlTWFuYWdlci5nZXRJbnN0YW5jZShteVByb2plY3QpOworCisgICAgZmluYWwgTW9kdWxlIG1vZHVsZUE7CisgICAgZmluYWwgTW9kdWxlIG1vZHVsZUI7CisKKyAgICB7CisgICAgICBmaW5hbCBNb2RpZmlhYmxlTW9kdWxlTW9kZWwgbW9kaWZpYWJsZU1vZGVsID0gbW9kdWxlTWFuYWdlci5nZXRNb2RpZmlhYmxlTW9kZWwoKTsKKyAgICAgIG1vZHVsZUEgPSBtb2RpZmlhYmxlTW9kZWwubmV3TW9kdWxlKCJhLmltbCIsIFN0ZE1vZHVsZVR5cGVzLkpBVkEuZ2V0SWQoKSk7CisgICAgICBtb2R1bGVCID0gbW9kaWZpYWJsZU1vZGVsLm5ld01vZHVsZSgiYi5pbWwiLCBTdGRNb2R1bGVUeXBlcy5KQVZBLmdldElkKCkpOworICAgICAgYXNzZXJ0RXF1YWxzKCJDaGFuZ2VzIGFyZSBub3QgYXBwbGllZCB1bnRpbCBjb21taXQiLCAwLCBtb2R1bGVNYW5hZ2VyLmdldE1vZHVsZXMoKS5sZW5ndGgpOworICAgICAgLy9ub2luc3BlY3Rpb24gU1NCYXNlZEluc3BlY3Rpb24KKyAgICAgIG1vZHVsZUxpc3RlbmVyLmFzc2VydENvcnJlY3RFdmVudHMobmV3IFN0cmluZ1swXVtdKTsKKyAgICAgIEFwcGxpY2F0aW9uTWFuYWdlci5nZXRBcHBsaWNhdGlvbigpLnJ1bldyaXRlQWN0aW9uKG5ldyBSdW5uYWJsZSgpIHsKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKKyAgICAgICAgICBtb2RpZmlhYmxlTW9kZWwuY29tbWl0KCk7CisgICAgICAgIH0KKyAgICAgIH0pOworICAgIH0KKworICAgIGFzc2VydEVxdWFscygyLCBtb2R1bGVNYW5hZ2VyLmdldE1vZHVsZXMoKS5sZW5ndGgpOworICAgIGFzc2VydFRydWUobW9kdWxlTWFuYWdlci5maW5kTW9kdWxlQnlOYW1lKCJhIikuZXF1YWxzKG1vZHVsZUEpKTsKKyAgICBhc3NlcnRUcnVlKG1vZHVsZU1hbmFnZXIuZmluZE1vZHVsZUJ5TmFtZSgiYiIpLmVxdWFscyhtb2R1bGVCKSk7CisgICAgbW9kdWxlTGlzdGVuZXIuYXNzZXJ0Q29ycmVjdEV2ZW50cyhuZXcgU3RyaW5nW11bXXt7IithIiwgIitiIn19KTsKKworICAgIHsKKyAgICAgIGZpbmFsIE1vZGlmaWFibGVNb2R1bGVNb2RlbCBtb2RpZmlhYmxlTW9kZWwgPSBtb2R1bGVNYW5hZ2VyLmdldE1vZGlmaWFibGVNb2RlbCgpOworICAgICAgbW9kaWZpYWJsZU1vZGVsLmRpc3Bvc2VNb2R1bGUobW9kdWxlQSk7CisgICAgICBtb2RpZmlhYmxlTW9kZWwuZGlzcG9zZU1vZHVsZShtb2R1bGVCKTsKKyAgICAgIGFzc2VydEVxdWFscygiQ2hhbmdlcyBhcmUgbm90IGFwcGxpZWQgdW50aWwgY29tbWl0IiwgMiwgbW9kdWxlTWFuYWdlci5nZXRNb2R1bGVzKCkubGVuZ3RoKTsKKyAgICAgIG1vZHVsZUxpc3RlbmVyLmFzc2VydENvcnJlY3RFdmVudHMobmV3IFN0cmluZ1tdW117eyIrYSIsICIrYiJ9fSk7CisgICAgICBBcHBsaWNhdGlvbk1hbmFnZXIuZ2V0QXBwbGljYXRpb24oKS5ydW5Xcml0ZUFjdGlvbihuZXcgUnVubmFibGUoKSB7CisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgdm9pZCBydW4oKSB7CisgICAgICAgICAgbW9kaWZpYWJsZU1vZGVsLmNvbW1pdCgpOworICAgICAgICB9CisgICAgICB9KTsKKyAgICB9CisKKyAgICBhc3NlcnRFcXVhbHMoMCwgbW9kdWxlTWFuYWdlci5nZXRNb2R1bGVzKCkubGVuZ3RoKTsKKyAgICBtb2R1bGVMaXN0ZW5lci5hc3NlcnRDb3JyZWN0RXZlbnRzKG5ldyBTdHJpbmdbXVtde3siK2EiLCAiK2IifSwgeyItYSIsICItYiJ9fSk7CisgICAgY29ubmVjdGlvbi5kaXNjb25uZWN0KCk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0Um9vdHNFZGl0aW5nKCkgeworICAgIGZpbmFsIE1lc3NhZ2VCdXNDb25uZWN0aW9uIGNvbm5lY3Rpb24gPSBteVByb2plY3QuZ2V0TWVzc2FnZUJ1cygpLmNvbm5lY3QoKTsKKyAgICBmaW5hbCBNb2R1bGVNYW5hZ2VyIG1vZHVsZU1hbmFnZXIgPSBNb2R1bGVNYW5hZ2VyLmdldEluc3RhbmNlKG15UHJvamVjdCk7CisgICAgZmluYWwgTXlNb2R1bGVMaXN0ZW5lciBtb2R1bGVMaXN0ZW5lciA9IG5ldyBNeU1vZHVsZUxpc3RlbmVyKCk7CisgICAgY29ubmVjdGlvbi5zdWJzY3JpYmUoUHJvamVjdFRvcGljcy5NT0RVTEVTLCBtb2R1bGVMaXN0ZW5lcik7CisKKyAgICBmaW5hbCBNb2R1bGUgbW9kdWxlQTsKKyAgICBmaW5hbCBNb2R1bGUgbW9kdWxlQjsKKyAgICB7CisgICAgICBmaW5hbCBNb2RpZmlhYmxlTW9kdWxlTW9kZWwgbW9kdWxlTW9kZWwgPSBtb2R1bGVNYW5hZ2VyLmdldE1vZGlmaWFibGVNb2RlbCgpOworICAgICAgbW9kdWxlQSA9IG1vZHVsZU1vZGVsLm5ld01vZHVsZSgiYS5pbWwiLCBTdGRNb2R1bGVUeXBlcy5KQVZBLmdldElkKCkpOworICAgICAgbW9kdWxlQiA9IG1vZHVsZU1vZGVsLm5ld01vZHVsZSgiYi5pbWwiLCBTdGRNb2R1bGVUeXBlcy5KQVZBLmdldElkKCkpOworICAgICAgZmluYWwgTW9kaWZpYWJsZVJvb3RNb2RlbCByb290TW9kZWxBID0gTW9kdWxlUm9vdE1hbmFnZXIuZ2V0SW5zdGFuY2UobW9kdWxlQSkuZ2V0TW9kaWZpYWJsZU1vZGVsKCk7CisgICAgICBmaW5hbCBNb2RpZmlhYmxlUm9vdE1vZGVsIHJvb3RNb2RlbEIgPSBNb2R1bGVSb290TWFuYWdlci5nZXRJbnN0YW5jZShtb2R1bGVCKS5nZXRNb2RpZmlhYmxlTW9kZWwoKTsKKyAgICAgIHJvb3RNb2RlbEIuYWRkTW9kdWxlT3JkZXJFbnRyeShtb2R1bGVBKTsKKworICAgICAgZmluYWwgQ29udGVudEVudHJ5IGNvbnRlbnRFbnRyeUEgPSByb290TW9kZWxBLmFkZENvbnRlbnRFbnRyeShnZXRWaXJ0dWFsRmlsZUluVGVzdERhdGEoImEiKSk7CisgICAgICBjb250ZW50RW50cnlBLmFkZFNvdXJjZUZvbGRlcihnZXRWaXJ0dWFsRmlsZUluVGVzdERhdGEoImEvc3JjIiksIGZhbHNlKTsKKyAgICAgIGZpbmFsIENvbnRlbnRFbnRyeSBjb250ZW50RW50cnlCID0gcm9vdE1vZGVsQi5hZGRDb250ZW50RW50cnkoZ2V0VmlydHVhbEZpbGVJblRlc3REYXRhKCJiIikpOworICAgICAgY29udGVudEVudHJ5Qi5hZGRTb3VyY2VGb2xkZXIoZ2V0VmlydHVhbEZpbGVJblRlc3REYXRhKCJiL3NyYyIpLCBmYWxzZSk7CisKKyAgICAgIEFwcGxpY2F0aW9uTWFuYWdlci5nZXRBcHBsaWNhdGlvbigpLnJ1bldyaXRlQWN0aW9uKG5ldyBSdW5uYWJsZSgpIHsKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKKyAgICAgICAgICBNb2RpZmlhYmxlTW9kZWxDb21taXR0ZXIubXVsdGlDb21taXQobmV3IE1vZGlmaWFibGVSb290TW9kZWxbXXtyb290TW9kZWxCLCByb290TW9kZWxBfSwgbW9kdWxlTW9kZWwpOworICAgICAgICB9CisgICAgICB9KTsKKyAgICB9CisKKyAgICBmaW5hbCBKYXZhUHNpRmFjYWRlIHBzaU1hbmFnZXIgPSBnZXRKYXZhRmFjYWRlKCk7CisgICAgYXNzZXJ0TnVsbChwc2lNYW5hZ2VyLmZpbmRDbGFzcygiai5CIiwgR2xvYmFsU2VhcmNoU2NvcGUubW9kdWxlV2l0aERlcGVuZGVuY2llc1Njb3BlKG1vZHVsZUEpKSk7CisgICAgYXNzZXJ0TnVsbChwc2lNYW5hZ2VyLmZpbmRDbGFzcygicS5BIiwgR2xvYmFsU2VhcmNoU2NvcGUubW9kdWxlU2NvcGUobW9kdWxlQikpKTsKKworICAgIGFzc2VydE5vdE51bGwocHNpTWFuYWdlci5maW5kQ2xhc3MoInEuQSIsIEdsb2JhbFNlYXJjaFNjb3BlLm1vZHVsZVNjb3BlKG1vZHVsZUEpKSk7CisgICAgYXNzZXJ0Tm90TnVsbChwc2lNYW5hZ2VyLmZpbmRDbGFzcygicS5BIiwgR2xvYmFsU2VhcmNoU2NvcGUubW9kdWxlV2l0aERlcGVuZGVuY2llc1Njb3BlKG1vZHVsZUIpKSk7CisgICAgYXNzZXJ0Tm90TnVsbChwc2lNYW5hZ2VyLmZpbmRDbGFzcygiai5CIiwgR2xvYmFsU2VhcmNoU2NvcGUubW9kdWxlU2NvcGUobW9kdWxlQikpKTsKKyAgICBhc3NlcnROb3ROdWxsKHBzaU1hbmFnZXIuZmluZENsYXNzKCJqLkIiLCBHbG9iYWxTZWFyY2hTY29wZS5tb2R1bGVXaXRoRGVwZW5kZW5jaWVzU2NvcGUobW9kdWxlQikpKTsKKworICAgIG1vZHVsZU1hbmFnZXIuZGlzcG9zZU1vZHVsZShtb2R1bGVCKTsKKyAgICBtb2R1bGVNYW5hZ2VyLmRpc3Bvc2VNb2R1bGUobW9kdWxlQSk7CisgICAgbW9kdWxlTGlzdGVuZXIuYXNzZXJ0Q29ycmVjdEV2ZW50cyhuZXcgU3RyaW5nW11bXXt7IitiIiwgIithIn0sIHsiLWIifSwgeyItYSJ9fSk7CisKKyAgICBjb25uZWN0aW9uLmRpc2Nvbm5lY3QoKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RSZW5hbWluZygpIHRocm93cyBFeGNlcHRpb257CisgICAgZmluYWwgTW9kdWxlTWFuYWdlciBtb2R1bGVNYW5hZ2VyID0gTW9kdWxlTWFuYWdlci5nZXRJbnN0YW5jZShteVByb2plY3QpOworICAgIGZpbmFsIE1vZHVsZSBtb2R1bGVBOworICAgIGZpbmFsIE1vZHVsZSBtb2R1bGVCOworCisgICAgeworICAgICAgZmluYWwgTW9kaWZpYWJsZU1vZHVsZU1vZGVsIG1vZHVsZU1vZGVsID0gbW9kdWxlTWFuYWdlci5nZXRNb2RpZmlhYmxlTW9kZWwoKTsKKyAgICAgIG1vZHVsZUEgPSBtb2R1bGVNb2RlbC5uZXdNb2R1bGUoImEuaW1sIiwgU3RkTW9kdWxlVHlwZXMuSkFWQS5nZXRJZCgpKTsKKyAgICAgIG1vZHVsZUIgPSBtb2R1bGVNb2RlbC5uZXdNb2R1bGUoImIuaW1sIiwgU3RkTW9kdWxlVHlwZXMuSkFWQS5nZXRJZCgpKTsKKyAgICAgIGZpbmFsIE1vZHVsZSBtb2R1bGVDID0gbW9kdWxlTW9kZWwubmV3TW9kdWxlKCJjLmltbCIsIFN0ZE1vZHVsZVR5cGVzLkpBVkEuZ2V0SWQoKSk7CisgICAgICBmaW5hbCBNb2RpZmlhYmxlUm9vdE1vZGVsIHJvb3RNb2RlbEIgPSBNb2R1bGVSb290TWFuYWdlci5nZXRJbnN0YW5jZShtb2R1bGVCKS5nZXRNb2RpZmlhYmxlTW9kZWwoKTsKKyAgICAgIHJvb3RNb2RlbEIuYWRkTW9kdWxlT3JkZXJFbnRyeShtb2R1bGVDKTsKKyAgICAgIG1vZHVsZU1vZGVsLmRpc3Bvc2VNb2R1bGUobW9kdWxlQyk7CisgICAgICBBcHBsaWNhdGlvbk1hbmFnZXIuZ2V0QXBwbGljYXRpb24oKS5ydW5Xcml0ZUFjdGlvbihuZXcgUnVubmFibGUoKSB7CisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgdm9pZCBydW4oKSB7CisgICAgICAgICAgTW9kaWZpYWJsZU1vZGVsQ29tbWl0dGVyLm11bHRpQ29tbWl0KG5ldyBNb2RpZmlhYmxlUm9vdE1vZGVsW117cm9vdE1vZGVsQn0sIG1vZHVsZU1vZGVsKTsKKyAgICAgICAgfQorICAgICAgfSk7CisgICAgfQorCisgICAgZmluYWwgTW9kdWxlUm9vdE1hbmFnZXIgcm9vdE1hbmFnZXJCID0gTW9kdWxlUm9vdE1hbmFnZXIuZ2V0SW5zdGFuY2UobW9kdWxlQik7CisgICAgYXNzZXJ0RXF1YWxzKDAsIHJvb3RNYW5hZ2VyQi5nZXREZXBlbmRlbmNpZXMoKS5sZW5ndGgpOworICAgIGZpbmFsIFN0cmluZ1tdIGRlcGVuZGVuY3lNb2R1bGVOYW1lcyA9IHJvb3RNYW5hZ2VyQi5nZXREZXBlbmRlbmN5TW9kdWxlTmFtZXMoKTsKKyAgICBhc3NlcnRFcXVhbHMoMSwgZGVwZW5kZW5jeU1vZHVsZU5hbWVzLmxlbmd0aCk7CisgICAgYXNzZXJ0RXF1YWxzKCJjIiwgZGVwZW5kZW5jeU1vZHVsZU5hbWVzWzBdKTsKKworICAgIHsKKyAgICAgIGZpbmFsIE1vZGlmaWFibGVNb2R1bGVNb2RlbCBtb2R1bGVNb2RlbCA9IG1vZHVsZU1hbmFnZXIuZ2V0TW9kaWZpYWJsZU1vZGVsKCk7CisgICAgICBtb2R1bGVNb2RlbC5yZW5hbWVNb2R1bGUobW9kdWxlQSwgImMiKTsKKyAgICAgIG1vZHVsZU1vZGVsLmNvbW1pdCgpOworICAgIH0KKworICAgIGFzc2VydEVxdWFscygxLCByb290TWFuYWdlckIuZ2V0RGVwZW5kZW5jaWVzKCkubGVuZ3RoKTsKKyAgICBhc3NlcnRFcXVhbHMobW9kdWxlQSwgcm9vdE1hbmFnZXJCLmdldERlcGVuZGVuY2llcygpWzBdKTsKKyAgICBhc3NlcnRFcXVhbHMoImMiLCBtb2R1bGVBLmdldE5hbWUoKSk7CisgICAgbW9kdWxlTWFuYWdlci5kaXNwb3NlTW9kdWxlKG1vZHVsZUEpOworICAgIG1vZHVsZU1hbmFnZXIuZGlzcG9zZU1vZHVsZShtb2R1bGVCKTsKKyAgfQorCisgIHByaXZhdGUgVmlydHVhbEZpbGUgZ2V0VmlydHVhbEZpbGVJblRlc3REYXRhKGZpbmFsIFN0cmluZyByZWxhdGl2ZVZmc1BhdGgpIHsKKyAgICByZXR1cm4gQXBwbGljYXRpb25NYW5hZ2VyLmdldEFwcGxpY2F0aW9uKCkucnVuV3JpdGVBY3Rpb24obmV3IENvbXB1dGFibGU8VmlydHVhbEZpbGU+KCkgeworICAgICAgQE92ZXJyaWRlCisgICAgICBwdWJsaWMgVmlydHVhbEZpbGUgY29tcHV0ZSgpIHsKKyAgICAgICAgZmluYWwgU3RyaW5nIHBhdGggPSBURVNUX1BBVEggKyBGaWxlLnNlcGFyYXRvckNoYXIgKyBnZXRUZXN0TmFtZSh0cnVlKSArIEZpbGUuc2VwYXJhdG9yQ2hhciArIHJlbGF0aXZlVmZzUGF0aC5yZXBsYWNlKCcvJywgRmlsZS5zZXBhcmF0b3JDaGFyKTsKKyAgICAgICAgZmluYWwgVmlydHVhbEZpbGUgcmVzdWx0ID0gTG9jYWxGaWxlU3lzdGVtLmdldEluc3RhbmNlKCkucmVmcmVzaEFuZEZpbmRGaWxlQnlJb0ZpbGUobmV3IEZpbGUocGF0aCkpOworICAgICAgICBhc3NlcnROb3ROdWxsKCJGaWxlICIgKyBwYXRoICsgIiBkb2VuXCd0IGV4aXN0IiwgcmVzdWx0KTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgIH0KKyAgICB9KTsKKyAgfQorCisKKyAgcHJpdmF0ZSBzdGF0aWMgY2xhc3MgTXlNb2R1bGVMaXN0ZW5lciBleHRlbmRzIE1vZHVsZUFkYXB0ZXIgeworICAgIHByaXZhdGUgZmluYWwgTGlzdDxTdHJpbmc+IG15TG9nID0gbmV3IEFycmF5TGlzdDxTdHJpbmc+KCk7CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgdm9pZCBtb2R1bGVSZW1vdmVkKFByb2plY3QgcHJvamVjdCwgTW9kdWxlIG1vZHVsZSkgeworICAgICAgbXlMb2cuYWRkKCItIiArIG1vZHVsZS5nZXROYW1lKCkpOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyB2b2lkIG1vZHVsZUFkZGVkKFByb2plY3QgcHJvamVjdCwgTW9kdWxlIG1vZHVsZSkgeworICAgICAgbXlMb2cuYWRkKCIrIiArIG1vZHVsZS5nZXROYW1lKCkpOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIGFzc2VydENvcnJlY3RFdmVudHMoU3RyaW5nW11bXSBleHBlY3RlZCkgeworICAgICAgaW50IHJ1bm5pbmdJbmRleCA9IDA7CisgICAgICBmb3IgKGludCBjaHVua0luZGV4ID0gMDsgY2h1bmtJbmRleCA8IGV4cGVjdGVkLmxlbmd0aDsgY2h1bmtJbmRleCsrKSB7CisgICAgICAgIFN0cmluZ1tdIGNodW5rID0gZXhwZWN0ZWRbY2h1bmtJbmRleF07CisgICAgICAgIGZpbmFsIExpc3Q8U3RyaW5nPiBleHBlY3RlZENodW5rTGlzdCA9IG5ldyBBcnJheUxpc3Q8U3RyaW5nPihBcnJheXMuYXNMaXN0KGNodW5rKSk7CisgICAgICAgIGludCBuZXh0SW5kZXggPSBydW5uaW5nSW5kZXggKyBjaHVuay5sZW5ndGg7CisgICAgICAgIGFzc2VydFRydWUoIkV4cGVjdGVkIGNodW5rICIgKyBleHBlY3RlZENodW5rTGlzdC50b1N0cmluZygpLCBuZXh0SW5kZXggPD0gbXlMb2cuc2l6ZSgpKTsKKyAgICAgICAgZmluYWwgTGlzdDxTdHJpbmc+IGFjdHVhbENodW5rTGlzdCA9IG5ldyBBcnJheUxpc3Q8U3RyaW5nPihteUxvZy5zdWJMaXN0KHJ1bm5pbmdJbmRleCwgbmV4dEluZGV4KSk7CisgICAgICAgIENvbGxlY3Rpb25zLnNvcnQoZXhwZWN0ZWRDaHVua0xpc3QpOworICAgICAgICBDb2xsZWN0aW9ucy5zb3J0KGFjdHVhbENodW5rTGlzdCk7CisgICAgICAgIGFzc2VydEVxdWFscygiQ2h1bmsgIiArIGNodW5rSW5kZXgsIGV4cGVjdGVkQ2h1bmtMaXN0LnRvU3RyaW5nKCksIGFjdHVhbENodW5rTGlzdC50b1N0cmluZygpKTsKKyAgICAgICAgcnVubmluZ0luZGV4ID0gbmV4dEluZGV4OworICAgICAgfQorICAgICAgYXNzZXJ0RXF1YWxzKCJNb3JlIGV2ZW50cyB0aGFuIG5lZWRlZCIsIHJ1bm5pbmdJbmRleCwgbXlMb2cuc2l6ZSgpKTsKKyAgICB9CisgIH0KK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9yb290cy9PcmRlckVudHJpZXNUZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovcm9vdHMvT3JkZXJFbnRyaWVzVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU0YzlkZDMKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovcm9vdHMvT3JkZXJFbnRyaWVzVGVzdC5qYXZhCkBAIC0wLDAgKzEsNzcgQEAKK3BhY2thZ2UgY29tLmludGVsbGlqLnJvb3RzOworCitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkubW9kdWxlLk1vZHVsZTsKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS5yb290cy4qOworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLnZmcy5WaXJ0dWFsRmlsZTsKK2ltcG9ydCBjb20uaW50ZWxsaWoudXRpbC5QYXRoc0xpc3Q7CisKKy8qKgorICogQGF1dGhvciBuaWsKKyAqLworcHVibGljIGNsYXNzIE9yZGVyRW50cmllc1Rlc3QgZXh0ZW5kcyBNb2R1bGVSb290TWFuYWdlclRlc3RDYXNlIHsKKyAgcHVibGljIHZvaWQgdGVzdExpYnJhcnkoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBNb2R1bGVSb290TW9kaWZpY2F0aW9uVXRpbC5hZGREZXBlbmRlbmN5KG15TW9kdWxlLCBjcmVhdGVKRG9tTGlicmFyeSgpKTsKKyAgICBhc3NlcnRPcmRlckZpbGVzKE9yZGVyUm9vdFR5cGUuQ0xBU1NFUywgZ2V0UnRKYXIoKSwgZ2V0SkRvbUphcigpKTsKKyAgICBhc3NlcnRPcmRlckZpbGVzKE9yZGVyUm9vdFR5cGUuU09VUkNFUywgZ2V0SkRvbVNvdXJjZXMoKSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0TW9kdWxlU291cmNlcygpIHRocm93cyBFeGNlcHRpb24geworICAgIGZpbmFsIFZpcnR1YWxGaWxlIHNyY1Jvb3QgPSBhZGRTb3VyY2VSb290KG15TW9kdWxlLCBmYWxzZSk7CisgICAgZmluYWwgVmlydHVhbEZpbGUgdGVzdFJvb3QgPSBhZGRTb3VyY2VSb290KG15TW9kdWxlLCB0cnVlKTsKKworICAgIGFzc2VydE9yZGVyRmlsZXMoT3JkZXJSb290VHlwZS5DTEFTU0VTLCBnZXRSdEphcigpKTsKKyAgICBhc3NlcnRPcmRlckZpbGVzKE9yZGVyUm9vdFR5cGUuU09VUkNFUywgc3JjUm9vdCwgdGVzdFJvb3QpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdExpYnJhcnlTY29wZSgpIHRocm93cyBFeGNlcHRpb24geworICAgIE1vZHVsZVJvb3RNb2RpZmljYXRpb25VdGlsLmFkZERlcGVuZGVuY3kobXlNb2R1bGUsIGNyZWF0ZUpEb21MaWJyYXJ5KCksIERlcGVuZGVuY3lTY29wZS5URVNULCBmYWxzZSk7CisKKyAgICBhc3NlcnRPcmRlckZpbGVzKE9yZGVyUm9vdFR5cGUuQ0xBU1NFUywgZ2V0UnRKYXIoKSwgZ2V0SkRvbUphcigpKTsKKyAgICBhc3NlcnRPcmRlckZpbGVzKE9yZGVyUm9vdFR5cGUuU09VUkNFUywgZ2V0SkRvbVNvdXJjZXMoKSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0TW9kdWxlRGVwZW5kZW5jeSgpIHRocm93cyBFeGNlcHRpb24geworICAgIGZpbmFsIE1vZHVsZSBkZXAgPSBjcmVhdGVNb2R1bGUoImRlcCIpOworICAgIGZpbmFsIFZpcnR1YWxGaWxlIHNyY1Jvb3QgPSBhZGRTb3VyY2VSb290KGRlcCwgZmFsc2UpOworICAgIGZpbmFsIFZpcnR1YWxGaWxlIHRlc3RSb290ID0gYWRkU291cmNlUm9vdChkZXAsIHRydWUpOworICAgIE1vZHVsZVJvb3RNb2RpZmljYXRpb25VdGlsLmFkZERlcGVuZGVuY3koZGVwLCBjcmVhdGVKRG9tTGlicmFyeSgpLCBEZXBlbmRlbmN5U2NvcGUuQ09NUElMRSwgdHJ1ZSk7CisgICAgTW9kdWxlUm9vdE1vZGlmaWNhdGlvblV0aWwuYWRkRGVwZW5kZW5jeShteU1vZHVsZSwgZGVwLCBEZXBlbmRlbmN5U2NvcGUuQ09NUElMRSwgZmFsc2UpOworCisgICAgYXNzZXJ0T3JkZXJGaWxlcyhPcmRlclJvb3RUeXBlLkNMQVNTRVMsIGdldFJ0SmFyKCksIGdldEpEb21KYXIoKSk7CisgICAgYXNzZXJ0T3JkZXJGaWxlcyhPcmRlclJvb3RUeXBlLlNPVVJDRVMsIHNyY1Jvb3QsIHRlc3RSb290LCBnZXRKRG9tU291cmNlcygpKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RNb2R1bGVEZXBlbmRlbmN5U2NvcGUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBmaW5hbCBNb2R1bGUgZGVwID0gY3JlYXRlTW9kdWxlKCJkZXAiKTsKKyAgICBNb2R1bGVSb290TW9kaWZpY2F0aW9uVXRpbC5hZGREZXBlbmRlbmN5KGRlcCwgY3JlYXRlSkRvbUxpYnJhcnkoKSwgRGVwZW5kZW5jeVNjb3BlLkNPTVBJTEUsIHRydWUpOworICAgIE1vZHVsZVJvb3RNb2RpZmljYXRpb25VdGlsLmFkZERlcGVuZGVuY3kobXlNb2R1bGUsIGRlcCwgRGVwZW5kZW5jeVNjb3BlLlRFU1QsIHRydWUpOworCisgICAgYXNzZXJ0T3JkZXJGaWxlcyhPcmRlclJvb3RUeXBlLkNMQVNTRVMsIGdldFJ0SmFyKCksIGdldEpEb21KYXIoKSk7CisgICAgYXNzZXJ0T3JkZXJGaWxlcyhPcmRlclJvb3RUeXBlLlNPVVJDRVMsIGdldEpEb21Tb3VyY2VzKCkpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdE5vdEV4cG9ydGVkTGlicmFyeURlcGVuZGVuY3koKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBmaW5hbCBNb2R1bGUgZGVwID0gY3JlYXRlTW9kdWxlKCJkZXAiKTsKKyAgICBNb2R1bGVSb290TW9kaWZpY2F0aW9uVXRpbC5hZGREZXBlbmRlbmN5KGRlcCwgY3JlYXRlSkRvbUxpYnJhcnkoKSwgRGVwZW5kZW5jeVNjb3BlLkNPTVBJTEUsIGZhbHNlKTsKKyAgICBNb2R1bGVSb290TW9kaWZpY2F0aW9uVXRpbC5hZGREZXBlbmRlbmN5KG15TW9kdWxlLCBkZXAsIERlcGVuZGVuY3lTY29wZS5DT01QSUxFLCBmYWxzZSk7CisKKyAgICBhc3NlcnRPcmRlckZpbGVzKE9yZGVyUm9vdFR5cGUuQ0xBU1NFUywgZ2V0UnRKYXIoKSk7CisgICAgYXNzZXJ0T3JkZXJGaWxlcyhPcmRlclJvb3RUeXBlLlNPVVJDRVMpOworICB9CisKKyAgcHJpdmF0ZSB2b2lkIGFzc2VydE9yZGVyRmlsZXMoZmluYWwgT3JkZXJSb290VHlwZSB0eXBlLCBWaXJ0dWFsRmlsZS4uLiBmaWxlcykgeworICAgIGFzc2VydFJvb3RzKGNvbGxlY3RCeU9yZGVyRW51bWVyYXRvcih0eXBlKSwgZmlsZXMpOworICB9CisKKyAgcHJpdmF0ZSBQYXRoc0xpc3QgY29sbGVjdEJ5T3JkZXJFbnVtZXJhdG9yKE9yZGVyUm9vdFR5cGUgdHlwZSkgeworICAgIGZpbmFsIE9yZGVyRW51bWVyYXRvciBiYXNlID0gT3JkZXJFbnVtZXJhdG9yLm9yZGVyRW50cmllcyhteU1vZHVsZSk7CisgICAgaWYgKHR5cGUgPT0gT3JkZXJSb290VHlwZS5DTEFTU0VTKSB7CisgICAgICByZXR1cm4gYmFzZS53aXRob3V0TW9kdWxlU291cmNlRW50cmllcygpLnJlY3Vyc2l2ZWx5KCkuZXhwb3J0ZWRPbmx5KCkuZ2V0UGF0aHNMaXN0KCk7CisgICAgfQorICAgIGlmICh0eXBlID09IE9yZGVyUm9vdFR5cGUuU09VUkNFUykgeworICAgICAgcmV0dXJuIGJhc2UucmVjdXJzaXZlbHkoKS5leHBvcnRlZE9ubHkoKS5nZXRTb3VyY2VQYXRoc0xpc3QoKTsKKyAgICB9CisgICAgdGhyb3cgbmV3IEFzc2VydGlvbkVycm9yKHR5cGUpOworICB9Cit9CisKZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9yb290cy9PcmRlckVudW1lcmF0b3JUZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovcm9vdHMvT3JkZXJFbnVtZXJhdG9yVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVkMjc0ZWEKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovcm9vdHMvT3JkZXJFbnVtZXJhdG9yVGVzdC5qYXZhCkBAIC0wLDAgKzEsMTkyIEBACitwYWNrYWdlIGNvbS5pbnRlbGxpai5yb290czsKKworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLm1vZHVsZS5Nb2R1bGU7CitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkucm9vdHMuKjsKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS52ZnMuVmlydHVhbEZpbGU7CitpbXBvcnQgY29tLmludGVsbGlqLnV0aWwuQXJyYXlVdGlsOworCitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlzOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitpbXBvcnQgc3RhdGljIGNvbS5pbnRlbGxpai5vcGVuYXBpLnJvb3RzLk9yZGVyRW51bWVyYXRvci5vcmRlckVudHJpZXM7CisKKworLyoqCisgKiBAYXV0aG9yIG5paworICovCitwdWJsaWMgY2xhc3MgT3JkZXJFbnVtZXJhdG9yVGVzdCBleHRlbmRzIE1vZHVsZVJvb3RNYW5hZ2VyVGVzdENhc2UgeworCisgIHB1YmxpYyB2b2lkIHRlc3RMaWJyYXJ5KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgTW9kdWxlUm9vdE1vZGlmaWNhdGlvblV0aWwuYWRkRGVwZW5kZW5jeShteU1vZHVsZSwgY3JlYXRlSkRvbUxpYnJhcnkoKSk7CisKKyAgICBhc3NlcnRDbGFzc1Jvb3RzKG9yZGVyRW50cmllcyhteU1vZHVsZSksIGdldFJ0SmFyKCksIGdldEpEb21KYXIoKSk7CisgICAgYXNzZXJ0Q2xhc3NSb290cyhvcmRlckVudHJpZXMobXlNb2R1bGUpLndpdGhvdXRTZGsoKSwgZ2V0SkRvbUphcigpKTsKKyAgICBhc3NlcnRDbGFzc1Jvb3RzKG9yZGVyRW50cmllcyhteU1vZHVsZSkud2l0aG91dFNkaygpLnByb2R1Y3Rpb25Pbmx5KCkucnVudGltZU9ubHkoKSwgZ2V0SkRvbUphcigpKTsKKyAgICBhc3NlcnRDbGFzc1Jvb3RzKG9yZGVyRW50cmllcyhteU1vZHVsZSkud2l0aG91dExpYnJhcmllcygpLCBnZXRSdEphcigpKTsKKyAgICBhc3NlcnRTb3VyY2VSb290cyhvcmRlckVudHJpZXMobXlNb2R1bGUpLCBnZXRKRG9tU291cmNlcygpKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RNb2R1bGVTb3VyY2VzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZmluYWwgVmlydHVhbEZpbGUgc3JjUm9vdCA9IGFkZFNvdXJjZVJvb3QobXlNb2R1bGUsIGZhbHNlKTsKKyAgICBmaW5hbCBWaXJ0dWFsRmlsZSB0ZXN0Um9vdCA9IGFkZFNvdXJjZVJvb3QobXlNb2R1bGUsIHRydWUpOworICAgIGZpbmFsIFZpcnR1YWxGaWxlIG91dHB1dCA9IHNldE1vZHVsZU91dHB1dChteU1vZHVsZSwgZmFsc2UpOworICAgIGZpbmFsIFZpcnR1YWxGaWxlIHRlc3RPdXRwdXQgPSBzZXRNb2R1bGVPdXRwdXQobXlNb2R1bGUsIHRydWUpOworCisgICAgYXNzZXJ0Q2xhc3NSb290cyhvcmRlckVudHJpZXMobXlNb2R1bGUpLndpdGhvdXRTZGsoKSwgdGVzdE91dHB1dCwgb3V0cHV0KTsKKyAgICBhc3NlcnRDbGFzc1Jvb3RzKG9yZGVyRW50cmllcyhteU1vZHVsZSkud2l0aG91dFNkaygpLnByb2R1Y3Rpb25Pbmx5KCksIG91dHB1dCk7CisgICAgYXNzZXJ0U291cmNlUm9vdHMob3JkZXJFbnRyaWVzKG15TW9kdWxlKSwgc3JjUm9vdCwgdGVzdFJvb3QpOworICAgIGFzc2VydFNvdXJjZVJvb3RzKG9yZGVyRW50cmllcyhteU1vZHVsZSkucHJvZHVjdGlvbk9ubHkoKSwgc3JjUm9vdCk7CisKKyAgICBhc3NlcnRFbnVtZXJhdG9yUm9vdHMob3JkZXJFbnRyaWVzKG15TW9kdWxlKS53aXRob3V0U2RrKCkuY2xhc3NlcygpLndpdGhvdXRTZWxmTW9kdWxlT3V0cHV0KCksIG91dHB1dCk7CisgICAgYXNzZXJ0RW51bWVyYXRvclJvb3RzKG9yZGVyRW50cmllcyhteU1vZHVsZSkud2l0aG91dFNkaygpLnByb2R1Y3Rpb25Pbmx5KCkuY2xhc3NlcygpLndpdGhvdXRTZWxmTW9kdWxlT3V0cHV0KCkpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdExpYnJhcnlTY29wZSgpIHRocm93cyBFeGNlcHRpb24geworICAgIE1vZHVsZVJvb3RNb2RpZmljYXRpb25VdGlsLmFkZERlcGVuZGVuY3kobXlNb2R1bGUsIGNyZWF0ZUpEb21MaWJyYXJ5KCksIERlcGVuZGVuY3lTY29wZS5SVU5USU1FLCBmYWxzZSk7CisKKyAgICBhc3NlcnRDbGFzc1Jvb3RzKG9yZGVyRW50cmllcyhteU1vZHVsZSkud2l0aG91dFNkaygpLCBnZXRKRG9tSmFyKCkpOworICAgIGFzc2VydENsYXNzUm9vdHMob3JkZXJFbnRyaWVzKG15TW9kdWxlKS53aXRob3V0U2RrKCkuZXhwb3J0ZWRPbmx5KCkpOworICAgIGFzc2VydENsYXNzUm9vdHMob3JkZXJFbnRyaWVzKG15TW9kdWxlKS53aXRob3V0U2RrKCkuY29tcGlsZU9ubHkoKSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0TW9kdWxlRGVwZW5kZW5jeSgpIHRocm93cyBFeGNlcHRpb24geworICAgIGZpbmFsIE1vZHVsZSBkZXAgPSBjcmVhdGVNb2R1bGUoImRlcCIpOworICAgIGZpbmFsIFZpcnR1YWxGaWxlIGRlcFNyY1Jvb3QgPSBhZGRTb3VyY2VSb290KGRlcCwgZmFsc2UpOworICAgIGZpbmFsIFZpcnR1YWxGaWxlIGRlcFRlc3RSb290ID0gYWRkU291cmNlUm9vdChkZXAsIHRydWUpOworICAgIGZpbmFsIFZpcnR1YWxGaWxlIGRlcE91dHB1dCA9IHNldE1vZHVsZU91dHB1dChkZXAsIGZhbHNlKTsKKyAgICBmaW5hbCBWaXJ0dWFsRmlsZSBkZXBUZXN0T3V0cHV0ID0gc2V0TW9kdWxlT3V0cHV0KGRlcCwgdHJ1ZSk7CisgICAgTW9kdWxlUm9vdE1vZGlmaWNhdGlvblV0aWwuYWRkRGVwZW5kZW5jeShkZXAsIGNyZWF0ZUpEb21MaWJyYXJ5KCksIERlcGVuZGVuY3lTY29wZS5DT01QSUxFLCB0cnVlKTsKKyAgICBNb2R1bGVSb290TW9kaWZpY2F0aW9uVXRpbC5hZGREZXBlbmRlbmN5KG15TW9kdWxlLCBkZXAsIERlcGVuZGVuY3lTY29wZS5DT01QSUxFLCB0cnVlKTsKKworICAgIGZpbmFsIFZpcnR1YWxGaWxlIHNyY1Jvb3QgPSBhZGRTb3VyY2VSb290KG15TW9kdWxlLCBmYWxzZSk7CisgICAgZmluYWwgVmlydHVhbEZpbGUgdGVzdFJvb3QgPSBhZGRTb3VyY2VSb290KG15TW9kdWxlLCB0cnVlKTsKKyAgICBmaW5hbCBWaXJ0dWFsRmlsZSBvdXRwdXQgPSBzZXRNb2R1bGVPdXRwdXQobXlNb2R1bGUsIGZhbHNlKTsKKyAgICBmaW5hbCBWaXJ0dWFsRmlsZSB0ZXN0T3V0cHV0ID0gc2V0TW9kdWxlT3V0cHV0KG15TW9kdWxlLCB0cnVlKTsKKworICAgIGFzc2VydENsYXNzUm9vdHMob3JkZXJFbnRyaWVzKG15TW9kdWxlKS53aXRob3V0U2RrKCksIHRlc3RPdXRwdXQsIG91dHB1dCwgZGVwVGVzdE91dHB1dCwgZGVwT3V0cHV0KTsKKyAgICBhc3NlcnRDbGFzc1Jvb3RzKG9yZGVyRW50cmllcyhteU1vZHVsZSkud2l0aG91dFNkaygpLnJlY3Vyc2l2ZWx5KCksIHRlc3RPdXRwdXQsIG91dHB1dCwgZGVwVGVzdE91dHB1dCwgZGVwT3V0cHV0LCBnZXRKRG9tSmFyKCkpOworICAgIGFzc2VydFNvdXJjZVJvb3RzKG9yZGVyRW50cmllcyhteU1vZHVsZSksIHNyY1Jvb3QsIHRlc3RSb290LCBkZXBTcmNSb290LCBkZXBUZXN0Um9vdCk7CisgICAgYXNzZXJ0U291cmNlUm9vdHMob3JkZXJFbnRyaWVzKG15TW9kdWxlKS5yZWN1cnNpdmVseSgpLCBzcmNSb290LCB0ZXN0Um9vdCwgZGVwU3JjUm9vdCwgZGVwVGVzdFJvb3QsIGdldEpEb21Tb3VyY2VzKCkpOworCisgICAgYXNzZXJ0Q2xhc3NSb290cyhvcmRlckVudHJpZXMobXlNb2R1bGUpLndpdGhvdXRTZGsoKS53aXRob3V0TW9kdWxlU291cmNlRW50cmllcygpLnJlY3Vyc2l2ZWx5KCksIGdldEpEb21KYXIoKSk7CisgICAgYXNzZXJ0U291cmNlUm9vdHMob3JkZXJFbnRyaWVzKG15TW9kdWxlKS53aXRob3V0U2RrKCkud2l0aG91dE1vZHVsZVNvdXJjZUVudHJpZXMoKS5yZWN1cnNpdmVseSgpLCBnZXRKRG9tU291cmNlcygpKTsKKyAgICBhc3NlcnRFbnVtZXJhdG9yUm9vdHMob3JkZXJFbnRyaWVzKG15TW9kdWxlKS53aXRob3V0U2RrKCkud2l0aG91dE1vZHVsZVNvdXJjZUVudHJpZXMoKS5yZWN1cnNpdmVseSgpLmNsYXNzZXMoKSwgZ2V0SkRvbUphcigpKTsKKyAgICBhc3NlcnRFbnVtZXJhdG9yUm9vdHMob3JkZXJFbnRyaWVzKG15TW9kdWxlKS53aXRob3V0U2RrKCkud2l0aG91dE1vZHVsZVNvdXJjZUVudHJpZXMoKS5yZWN1cnNpdmVseSgpLnNvdXJjZXMoKSwgZ2V0SkRvbVNvdXJjZXMoKSk7CisKKyAgICBhc3NlcnRFbnVtZXJhdG9yUm9vdHMob3JkZXJFbnRyaWVzKG15TW9kdWxlKS53aXRob3V0U2RrKCkucmVjdXJzaXZlbHkoKS5jbGFzc2VzKCkud2l0aG91dFNlbGZNb2R1bGVPdXRwdXQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0LCBkZXBUZXN0T3V0cHV0LCBkZXBPdXRwdXQsIGdldEpEb21KYXIoKSk7CisgICAgYXNzZXJ0RW51bWVyYXRvclJvb3RzKG9yZGVyRW50cmllcyhteU1vZHVsZSkucHJvZHVjdGlvbk9ubHkoKS53aXRob3V0U2RrKCkucmVjdXJzaXZlbHkoKS5jbGFzc2VzKCkud2l0aG91dFNlbGZNb2R1bGVPdXRwdXQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZGVwT3V0cHV0LCBnZXRKRG9tSmFyKCkpOworCisgICAgYXNzZXJ0Q2xhc3NSb290cyhvcmRlckVudHJpZXMobXlNb2R1bGUpLndpdGhvdXRTZGsoKS53aXRob3V0RGVwTW9kdWxlcygpLndpdGhvdXRNb2R1bGVTb3VyY2VFbnRyaWVzKCkucmVjdXJzaXZlbHkoKSwgZ2V0SkRvbUphcigpKTsKKyAgICBhc3NlcnRFbnVtZXJhdG9yUm9vdHMoCisgICAgICBvcmRlckVudHJpZXMobXlNb2R1bGUpLnByb2R1Y3Rpb25Pbmx5KCkud2l0aG91dFNkaygpLndpdGhvdXREZXBNb2R1bGVzKCkud2l0aG91dE1vZHVsZVNvdXJjZUVudHJpZXMoKS5yZWN1cnNpdmVseSgpLmNsYXNzZXMoKSwKKyAgICAgIGdldEpEb21KYXIoKSk7CisgICAgYXNzZXJ0Q2xhc3NSb290cyhvcmRlckVudHJpZXMobXlNb2R1bGUpLndpdGhvdXRTZGsoKS53aXRob3V0RGVwTW9kdWxlcygpLndpdGhvdXRNb2R1bGVTb3VyY2VFbnRyaWVzKCkpOworICAgIGFzc2VydEVudW1lcmF0b3JSb290cyhvcmRlckVudHJpZXMobXlNb2R1bGUpLnByb2R1Y3Rpb25Pbmx5KCkud2l0aG91dE1vZHVsZVNvdXJjZUVudHJpZXMoKS53aXRob3V0U2RrKCkud2l0aG91dERlcE1vZHVsZXMoKS5jbGFzc2VzKCkpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdE1vZHVsZURlcGVuZGVuY3lTY29wZSgpIHRocm93cyBFeGNlcHRpb24geworICAgIGZpbmFsIE1vZHVsZSBkZXAgPSBjcmVhdGVNb2R1bGUoImRlcCIpOworICAgIE1vZHVsZVJvb3RNb2RpZmljYXRpb25VdGlsLmFkZERlcGVuZGVuY3koZGVwLCBjcmVhdGVKRG9tTGlicmFyeSgpLCBEZXBlbmRlbmN5U2NvcGUuQ09NUElMRSwgdHJ1ZSk7CisgICAgTW9kdWxlUm9vdE1vZGlmaWNhdGlvblV0aWwuYWRkRGVwZW5kZW5jeShteU1vZHVsZSwgZGVwLCBEZXBlbmRlbmN5U2NvcGUuVEVTVCwgdHJ1ZSk7CisKKyAgICBhc3NlcnRDbGFzc1Jvb3RzKG9yZGVyRW50cmllcyhteU1vZHVsZSkud2l0aG91dFNkaygpKTsKKyAgICBhc3NlcnRDbGFzc1Jvb3RzKG9yZGVyRW50cmllcyhteU1vZHVsZSkud2l0aG91dFNkaygpLnJlY3Vyc2l2ZWx5KCksIGdldEpEb21KYXIoKSk7CisgICAgYXNzZXJ0Q2xhc3NSb290cyhvcmRlckVudHJpZXMobXlNb2R1bGUpLndpdGhvdXRTZGsoKS5leHBvcnRlZE9ubHkoKS5yZWN1cnNpdmVseSgpLCBnZXRKRG9tSmFyKCkpOworICAgIGFzc2VydENsYXNzUm9vdHMob3JkZXJFbnRyaWVzKG15TW9kdWxlKS53aXRob3V0U2RrKCkucHJvZHVjdGlvbk9ubHkoKS5yZWN1cnNpdmVseSgpKTsKKworICAgIGFzc2VydENsYXNzUm9vdHMoUHJvamVjdFJvb3RNYW5hZ2VyLmdldEluc3RhbmNlKG15UHJvamVjdCkub3JkZXJFbnRyaWVzKCkud2l0aG91dFNkaygpLCBnZXRKRG9tSmFyKCkpOworICAgIGFzc2VydENsYXNzUm9vdHMoUHJvamVjdFJvb3RNYW5hZ2VyLmdldEluc3RhbmNlKG15UHJvamVjdCkub3JkZXJFbnRyaWVzKCkud2l0aG91dFNkaygpLnByb2R1Y3Rpb25Pbmx5KCksIGdldEpEb21KYXIoKSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0Tm90RXhwb3J0ZWRMaWJyYXJ5KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZmluYWwgTW9kdWxlIGRlcCA9IGNyZWF0ZU1vZHVsZSgiZGVwIik7CisgICAgTW9kdWxlUm9vdE1vZGlmaWNhdGlvblV0aWwuYWRkRGVwZW5kZW5jeShkZXAsIGNyZWF0ZUpEb21MaWJyYXJ5KCksIERlcGVuZGVuY3lTY29wZS5DT01QSUxFLCBmYWxzZSk7CisgICAgTW9kdWxlUm9vdE1vZGlmaWNhdGlvblV0aWwuYWRkRGVwZW5kZW5jeShteU1vZHVsZSwgY3JlYXRlQXNtTGlicmFyeSgpLCBEZXBlbmRlbmN5U2NvcGUuQ09NUElMRSwgZmFsc2UpOworICAgIE1vZHVsZVJvb3RNb2RpZmljYXRpb25VdGlsLmFkZERlcGVuZGVuY3kobXlNb2R1bGUsIGRlcCwgRGVwZW5kZW5jeVNjb3BlLkNPTVBJTEUsIGZhbHNlKTsKKworICAgIGFzc2VydENsYXNzUm9vdHMob3JkZXJFbnRyaWVzKG15TW9kdWxlKS53aXRob3V0U2RrKCksIGdldEFzbUphcigpKTsKKyAgICBhc3NlcnRDbGFzc1Jvb3RzKG9yZGVyRW50cmllcyhteU1vZHVsZSkud2l0aG91dFNkaygpLnJlY3Vyc2l2ZWx5KCksIGdldEFzbUphcigpLCBnZXRKRG9tSmFyKCkpOworICAgIGFzc2VydENsYXNzUm9vdHMob3JkZXJFbnRyaWVzKG15TW9kdWxlKS53aXRob3V0U2RrKCkucmVjdXJzaXZlbHkoKS5leHBvcnRlZE9ubHkoKSwgZ2V0QXNtSmFyKCkpOworICAgIGFzc2VydENsYXNzUm9vdHMob3JkZXJFbnRyaWVzKG15TW9kdWxlKS53aXRob3V0U2RrKCkuZXhwb3J0ZWRPbmx5KCkucmVjdXJzaXZlbHkoKSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0SmRrSXNOb3RFeHBvcnRlZCgpIHRocm93cyBFeGNlcHRpb24geworICAgIGFzc2VydENsYXNzUm9vdHMob3JkZXJFbnRyaWVzKG15TW9kdWxlKS5leHBvcnRlZE9ubHkoKSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0Q2FjaGluZygpIHRocm93cyBFeGNlcHRpb24geworICAgIGZpbmFsIFZpcnR1YWxGaWxlW10gcm9vdHMgPSBvcmRlckVudHJpZXMobXlNb2R1bGUpLmNsYXNzZXMoKS51c2luZ0NhY2hlKCkuZ2V0Um9vdHMoKTsKKyAgICBhc3NlcnRPcmRlcmVkRXF1YWxzKHJvb3RzLCBnZXRSdEphcigpKTsKKyAgICBhc3NlcnRFcXVhbHMocm9vdHMsIG9yZGVyRW50cmllcyhteU1vZHVsZSkuY2xhc3NlcygpLnVzaW5nQ2FjaGUoKS5nZXRSb290cygpKTsKKyAgICBmaW5hbCBWaXJ0dWFsRmlsZVtdIHJvb3RzV2l0aG91dFNkayA9IG9yZGVyRW50cmllcyhteU1vZHVsZSkud2l0aG91dFNkaygpLmNsYXNzZXMoKS51c2luZ0NhY2hlKCkuZ2V0Um9vdHMoKTsKKyAgICBhc3NlcnRFbXB0eShyb290c1dpdGhvdXRTZGspOworICAgIGFzc2VydEVxdWFscyhyb290cywgb3JkZXJFbnRyaWVzKG15TW9kdWxlKS5jbGFzc2VzKCkudXNpbmdDYWNoZSgpLmdldFJvb3RzKCkpOworICAgIGFzc2VydEVxdWFscyhyb290c1dpdGhvdXRTZGssIG9yZGVyRW50cmllcyhteU1vZHVsZSkud2l0aG91dFNkaygpLmNsYXNzZXMoKS51c2luZ0NhY2hlKCkuZ2V0Um9vdHMoKSk7CisKKyAgICBNb2R1bGVSb290TW9kaWZpY2F0aW9uVXRpbC5hZGREZXBlbmRlbmN5KG15TW9kdWxlLCBjcmVhdGVKRG9tTGlicmFyeSgpKTsKKworICAgIGFzc2VydFJvb3RzKG9yZGVyRW50cmllcyhteU1vZHVsZSkuY2xhc3NlcygpLnVzaW5nQ2FjaGUoKS5nZXRQYXRoc0xpc3QoKSwgZ2V0UnRKYXIoKSwgZ2V0SkRvbUphcigpKTsKKyAgICBhc3NlcnRSb290cyhvcmRlckVudHJpZXMobXlNb2R1bGUpLndpdGhvdXRTZGsoKS5jbGFzc2VzKCkudXNpbmdDYWNoZSgpLmdldFBhdGhzTGlzdCgpLCBnZXRKRG9tSmFyKCkpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdENhY2hpbmdVcmxzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZmluYWwgU3RyaW5nW10gdXJscyA9IG9yZGVyRW50cmllcyhteU1vZHVsZSkuY2xhc3NlcygpLnVzaW5nQ2FjaGUoKS5nZXRVcmxzKCk7CisgICAgYXNzZXJ0T3JkZXJlZEVxdWFscyh1cmxzLCBnZXRSdEphcigpLmdldFVybCgpKTsKKyAgICBhc3NlcnRTYW1lKHVybHMsIG9yZGVyRW50cmllcyhteU1vZHVsZSkuY2xhc3NlcygpLnVzaW5nQ2FjaGUoKS5nZXRVcmxzKCkpOworCisgICAgZmluYWwgU3RyaW5nW10gc291cmNlVXJscyA9IG9yZGVyRW50cmllcyhteU1vZHVsZSkuc291cmNlcygpLnVzaW5nQ2FjaGUoKS5nZXRVcmxzKCk7CisgICAgYXNzZXJ0RW1wdHkoc291cmNlVXJscyk7CisgICAgYXNzZXJ0U2FtZSh1cmxzLCBvcmRlckVudHJpZXMobXlNb2R1bGUpLmNsYXNzZXMoKS51c2luZ0NhY2hlKCkuZ2V0VXJscygpKTsKKyAgICBhc3NlcnRTYW1lKHNvdXJjZVVybHMsIG9yZGVyRW50cmllcyhteU1vZHVsZSkuc291cmNlcygpLnVzaW5nQ2FjaGUoKS5nZXRVcmxzKCkpOworCisgICAgTW9kdWxlUm9vdE1vZGlmaWNhdGlvblV0aWwuYWRkRGVwZW5kZW5jeShteU1vZHVsZSwgY3JlYXRlSkRvbUxpYnJhcnkoKSk7CisgICAgYXNzZXJ0T3JkZXJlZEVxdWFscyhvcmRlckVudHJpZXMobXlNb2R1bGUpLmNsYXNzZXMoKS51c2luZ0NhY2hlKCkuZ2V0VXJscygpLCBnZXRSdEphcigpLmdldFVybCgpLCBnZXRKRG9tSmFyKCkuZ2V0VXJsKCkpOworICAgIGFzc2VydE9yZGVyZWRFcXVhbHMob3JkZXJFbnRyaWVzKG15TW9kdWxlKS5zb3VyY2VzKCkudXNpbmdDYWNoZSgpLmdldFVybHMoKSwgZ2V0SkRvbVNvdXJjZXMoKS5nZXRVcmwoKSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0UHJvamVjdCgpIHRocm93cyBFeGNlcHRpb24geworICAgIE1vZHVsZVJvb3RNb2RpZmljYXRpb25VdGlsLmFkZERlcGVuZGVuY3kobXlNb2R1bGUsIGNyZWF0ZUpEb21MaWJyYXJ5KCkpOworCisgICAgZmluYWwgVmlydHVhbEZpbGUgc3JjUm9vdCA9IGFkZFNvdXJjZVJvb3QobXlNb2R1bGUsIGZhbHNlKTsKKyAgICBmaW5hbCBWaXJ0dWFsRmlsZSB0ZXN0Um9vdCA9IGFkZFNvdXJjZVJvb3QobXlNb2R1bGUsIHRydWUpOworICAgIGZpbmFsIFZpcnR1YWxGaWxlIG91dHB1dCA9IHNldE1vZHVsZU91dHB1dChteU1vZHVsZSwgZmFsc2UpOworICAgIGZpbmFsIFZpcnR1YWxGaWxlIHRlc3RPdXRwdXQgPSBzZXRNb2R1bGVPdXRwdXQobXlNb2R1bGUsIHRydWUpOworCisgICAgYXNzZXJ0Q2xhc3NSb290cyhvcmRlckVudHJpZXMobXlQcm9qZWN0KS53aXRob3V0U2RrKCksIHRlc3RPdXRwdXQsIG91dHB1dCwgZ2V0SkRvbUphcigpKTsKKyAgICBhc3NlcnRTb3VyY2VSb290cyhvcmRlckVudHJpZXMobXlQcm9qZWN0KS53aXRob3V0U2RrKCksIHNyY1Jvb3QsIHRlc3RSb290LCBnZXRKRG9tU291cmNlcygpKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RNb2R1bGVzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgTW9kdWxlUm9vdE1vZGlmaWNhdGlvblV0aWwuYWRkRGVwZW5kZW5jeShteU1vZHVsZSwgY3JlYXRlSkRvbUxpYnJhcnkoKSk7CisKKyAgICBmaW5hbCBWaXJ0dWFsRmlsZSBzcmNSb290ID0gYWRkU291cmNlUm9vdChteU1vZHVsZSwgZmFsc2UpOworICAgIGZpbmFsIFZpcnR1YWxGaWxlIHRlc3RSb290ID0gYWRkU291cmNlUm9vdChteU1vZHVsZSwgdHJ1ZSk7CisgICAgZmluYWwgVmlydHVhbEZpbGUgb3V0cHV0ID0gc2V0TW9kdWxlT3V0cHV0KG15TW9kdWxlLCBmYWxzZSk7CisgICAgZmluYWwgVmlydHVhbEZpbGUgdGVzdE91dHB1dCA9IHNldE1vZHVsZU91dHB1dChteU1vZHVsZSwgdHJ1ZSk7CisKKyAgICBhc3NlcnRDbGFzc1Jvb3RzKFByb2plY3RSb290TWFuYWdlci5nZXRJbnN0YW5jZShteVByb2plY3QpLm9yZGVyRW50cmllcyhBcnJheXMuYXNMaXN0KG15TW9kdWxlKSkud2l0aG91dFNkaygpLAorICAgICAgICAgICAgICAgICAgICAgdGVzdE91dHB1dCwgb3V0cHV0LCBnZXRKRG9tSmFyKCkpOworICAgIGFzc2VydFNvdXJjZVJvb3RzKFByb2plY3RSb290TWFuYWdlci5nZXRJbnN0YW5jZShteVByb2plY3QpLm9yZGVyRW50cmllcyhBcnJheXMuYXNMaXN0KG15TW9kdWxlKSkud2l0aG91dFNkaygpLAorICAgICAgICAgICAgICAgICAgICAgIHNyY1Jvb3QsIHRlc3RSb290LCBnZXRKRG9tU291cmNlcygpKTsKKyAgfQorCisgIHByaXZhdGUgc3RhdGljIHZvaWQgYXNzZXJ0Q2xhc3NSb290cyhmaW5hbCBPcmRlckVudW1lcmF0b3IgZW51bWVyYXRvciwgVmlydHVhbEZpbGUuLi4gZmlsZXMpIHsKKyAgICBhc3NlcnRFbnVtZXJhdG9yUm9vdHMoZW51bWVyYXRvci5jbGFzc2VzKCksIGZpbGVzKTsKKyAgfQorCisgIHByaXZhdGUgc3RhdGljIHZvaWQgYXNzZXJ0U291cmNlUm9vdHMoZmluYWwgT3JkZXJFbnVtZXJhdG9yIGVudW1lcmF0b3IsIFZpcnR1YWxGaWxlLi4uIGZpbGVzKSB7CisgICAgYXNzZXJ0RW51bWVyYXRvclJvb3RzKGVudW1lcmF0b3Iuc291cmNlcygpLCBmaWxlcyk7CisgIH0KKworICBwcml2YXRlIHN0YXRpYyB2b2lkIGFzc2VydEVudW1lcmF0b3JSb290cyhPcmRlclJvb3RzRW51bWVyYXRvciByb290c0VudW1lcmF0b3IsIFZpcnR1YWxGaWxlLi4uIGZpbGVzKSB7CisgICAgYXNzZXJ0T3JkZXJlZEVxdWFscyhyb290c0VudW1lcmF0b3IuZ2V0Um9vdHMoKSwgZmlsZXMpOworICAgIExpc3Q8U3RyaW5nPiBleHBlY3RlZFVybHMgPSBuZXcgQXJyYXlMaXN0PFN0cmluZz4oKTsKKyAgICBmb3IgKFZpcnR1YWxGaWxlIGZpbGUgOiBmaWxlcykgeworICAgICAgZXhwZWN0ZWRVcmxzLmFkZChmaWxlLmdldFVybCgpKTsKKyAgICB9CisgICAgYXNzZXJ0T3JkZXJlZEVxdWFscyhyb290c0VudW1lcmF0b3IuZ2V0VXJscygpLCBBcnJheVV0aWwudG9TdHJpbmdBcnJheShleHBlY3RlZFVybHMpKTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL3Jvb3RzL1Byb2plY3RDbGFzc3BhdGhUcmF2ZXJzaW5nVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL3Jvb3RzL1Byb2plY3RDbGFzc3BhdGhUcmF2ZXJzaW5nVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY2MDZhN2YKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovcm9vdHMvUHJvamVjdENsYXNzcGF0aFRyYXZlcnNpbmdUZXN0LmphdmEKQEAgLTAsMCArMSw5NyBAQAorLyoKKyAqIENvcHlyaWdodCAyMDAwLTIwMTAgSmV0QnJhaW5zIHMuci5vLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KK3BhY2thZ2UgY29tLmludGVsbGlqLnJvb3RzOworCitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkubW9kdWxlLk1vZHVsZTsKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS5yb290cy4qOworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLnZmcy5WaXJ0dWFsRmlsZTsKK2ltcG9ydCBjb20uaW50ZWxsaWoudXRpbC5QYXRoc0xpc3Q7CisKKy8qKgorICogQGF1dGhvciBuaWsKKyAqLworQFN1cHByZXNzV2FybmluZ3MoeyJkZXByZWNhdGlvbiJ9KQorcHVibGljIGNsYXNzIFByb2plY3RDbGFzc3BhdGhUcmF2ZXJzaW5nVGVzdCBleHRlbmRzIE1vZHVsZVJvb3RNYW5hZ2VyVGVzdENhc2UgeworICBwdWJsaWMgdm9pZCB0ZXN0TGlicmFyeSgpIHRocm93cyBFeGNlcHRpb24geworICAgIE1vZHVsZVJvb3RNb2RpZmljYXRpb25VdGlsLmFkZERlcGVuZGVuY3kobXlNb2R1bGUsIGNyZWF0ZUpEb21MaWJyYXJ5KCkpOworCisgICAgZG9UZXN0KFByb2plY3RDbGFzc3BhdGhUcmF2ZXJzaW5nLkZVTExfQ0xBU1NQQVRILCBnZXRSdEphcigpLCBnZXRKRG9tSmFyKCkpOworICAgIGRvVGVzdChQcm9qZWN0Q2xhc3NwYXRoVHJhdmVyc2luZy5GVUxMX0NMQVNTX1JFQ1VSU0lWRV9XT19KREssIGdldEpEb21KYXIoKSk7CisgICAgZG9UZXN0KFByb2plY3RDbGFzc3BhdGhUcmF2ZXJzaW5nLkZVTExfQ0xBU1NQQVRIX1JFQ1VSU0lWRSwgZ2V0UnRKYXIoKSwgZ2V0SkRvbUphcigpKTsKKyAgICBkb1Rlc3QoUHJvamVjdENsYXNzcGF0aFRyYXZlcnNpbmcuRlVMTF9DTEFTU1BBVEhfV0lUSE9VVF9KREtfQU5EX1RFU1RTLCBnZXRKRG9tSmFyKCkpOworICAgIGRvVGVzdChQcm9qZWN0Q2xhc3NwYXRoVHJhdmVyc2luZy5GVUxMX0NMQVNTUEFUSF9XSVRIT1VUX1RFU1RTLCBnZXRSdEphcigpLCBnZXRKRG9tSmFyKCkpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdE1vZHVsZU91dHB1dCgpIHRocm93cyBFeGNlcHRpb24geworICAgIGFkZFNvdXJjZVJvb3QobXlNb2R1bGUsIGZhbHNlKTsKKyAgICBmaW5hbCBWaXJ0dWFsRmlsZSBvdXRwdXQgPSBzZXRNb2R1bGVPdXRwdXQobXlNb2R1bGUsIGZhbHNlKTsKKyAgICBmaW5hbCBWaXJ0dWFsRmlsZSB0ZXN0T3V0cHV0ID0gc2V0TW9kdWxlT3V0cHV0KG15TW9kdWxlLCB0cnVlKTsKKworICAgIGRvVGVzdChQcm9qZWN0Q2xhc3NwYXRoVHJhdmVyc2luZy5GVUxMX0NMQVNTUEFUSCwgZ2V0UnRKYXIoKSwgdGVzdE91dHB1dCwgb3V0cHV0KTsKKyAgICBkb1Rlc3QoUHJvamVjdENsYXNzcGF0aFRyYXZlcnNpbmcuRlVMTF9DTEFTU19SRUNVUlNJVkVfV09fSkRLLCB0ZXN0T3V0cHV0LCBvdXRwdXQpOworICAgIGRvVGVzdChQcm9qZWN0Q2xhc3NwYXRoVHJhdmVyc2luZy5GVUxMX0NMQVNTUEFUSF9SRUNVUlNJVkUsIGdldFJ0SmFyKCksIHRlc3RPdXRwdXQsIG91dHB1dCk7CisgICAgZG9UZXN0KFByb2plY3RDbGFzc3BhdGhUcmF2ZXJzaW5nLkZVTExfQ0xBU1NQQVRIX1dJVEhPVVRfSkRLX0FORF9URVNUUywgb3V0cHV0KTsKKyAgICBkb1Rlc3QoUHJvamVjdENsYXNzcGF0aFRyYXZlcnNpbmcuRlVMTF9DTEFTU1BBVEhfV0lUSE9VVF9URVNUUywgZ2V0UnRKYXIoKSwgb3V0cHV0KTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RMaWJyYXJ5U2NvcGUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBNb2R1bGVSb290TW9kaWZpY2F0aW9uVXRpbC5hZGREZXBlbmRlbmN5KG15TW9kdWxlLCBjcmVhdGVKRG9tTGlicmFyeSgpLCBEZXBlbmRlbmN5U2NvcGUuVEVTVCwgdHJ1ZSk7CisKKyAgICBkb1Rlc3QoUHJvamVjdENsYXNzcGF0aFRyYXZlcnNpbmcuRlVMTF9DTEFTU1BBVEgsIGdldFJ0SmFyKCksIGdldEpEb21KYXIoKSk7CisgICAgZG9UZXN0KFByb2plY3RDbGFzc3BhdGhUcmF2ZXJzaW5nLkZVTExfQ0xBU1NfUkVDVVJTSVZFX1dPX0pESywgZ2V0SkRvbUphcigpKTsKKyAgICBkb1Rlc3QoUHJvamVjdENsYXNzcGF0aFRyYXZlcnNpbmcuRlVMTF9DTEFTU1BBVEhfUkVDVVJTSVZFLCBnZXRSdEphcigpLCBnZXRKRG9tSmFyKCkpOworICAgIGRvVGVzdChQcm9qZWN0Q2xhc3NwYXRoVHJhdmVyc2luZy5GVUxMX0NMQVNTUEFUSF9XSVRIT1VUX0pES19BTkRfVEVTVFMpOworICAgIGRvVGVzdChQcm9qZWN0Q2xhc3NwYXRoVHJhdmVyc2luZy5GVUxMX0NMQVNTUEFUSF9XSVRIT1VUX1RFU1RTLCBnZXRSdEphcigpKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RNb2R1bGVEZXBlbmRlbmN5KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZmluYWwgTW9kdWxlIGRlcCA9IGNyZWF0ZU1vZHVsZSgiZGVwIik7CisgICAgZmluYWwgVmlydHVhbEZpbGUgb3V0cHV0ID0gc2V0TW9kdWxlT3V0cHV0KGRlcCwgZmFsc2UpOworICAgIGZpbmFsIFZpcnR1YWxGaWxlIHRlc3RPdXRwdXQgPSBzZXRNb2R1bGVPdXRwdXQoZGVwLCB0cnVlKTsKKyAgICBNb2R1bGVSb290TW9kaWZpY2F0aW9uVXRpbC5hZGREZXBlbmRlbmN5KGRlcCwgY3JlYXRlSkRvbUxpYnJhcnkoKSk7CisgICAgTW9kdWxlUm9vdE1vZGlmaWNhdGlvblV0aWwuYWRkRGVwZW5kZW5jeShteU1vZHVsZSwgZGVwLCBEZXBlbmRlbmN5U2NvcGUuQ09NUElMRSwgZmFsc2UpOworCisgICAgZG9UZXN0KFByb2plY3RDbGFzc3BhdGhUcmF2ZXJzaW5nLkZVTExfQ0xBU1NQQVRILCBnZXRSdEphcigpKTsKKyAgICBkb1Rlc3QoUHJvamVjdENsYXNzcGF0aFRyYXZlcnNpbmcuRlVMTF9DTEFTU19SRUNVUlNJVkVfV09fSkRLLCB0ZXN0T3V0cHV0LCBvdXRwdXQsIGdldEpEb21KYXIoKSk7CisgICAgZG9UZXN0KFByb2plY3RDbGFzc3BhdGhUcmF2ZXJzaW5nLkZVTExfQ0xBU1NQQVRIX1JFQ1VSU0lWRSwgZ2V0UnRKYXIoKSwgdGVzdE91dHB1dCwgb3V0cHV0LCBnZXRKRG9tSmFyKCkpOworICAgIGRvVGVzdChQcm9qZWN0Q2xhc3NwYXRoVHJhdmVyc2luZy5GVUxMX0NMQVNTUEFUSF9XSVRIT1VUX0pES19BTkRfVEVTVFMsIG91dHB1dCwgZ2V0SkRvbUphcigpKTsKKyAgICBkb1Rlc3QoUHJvamVjdENsYXNzcGF0aFRyYXZlcnNpbmcuRlVMTF9DTEFTU1BBVEhfV0lUSE9VVF9URVNUUywgZ2V0UnRKYXIoKSwgb3V0cHV0LCBnZXRKRG9tSmFyKCkpOworICB9CisKKyAgcHJpdmF0ZSB2b2lkIGRvVGVzdChQcm9qZWN0Um9vdHNUcmF2ZXJzaW5nLlJvb3RUcmF2ZXJzZVBvbGljeSBwb2xpY3ksIFZpcnR1YWxGaWxlLi4uIHJvb3RzKSB7CisgICAgYXNzZXJ0Um9vdHMoUHJvamVjdFJvb3RzVHJhdmVyc2luZy5jb2xsZWN0Um9vdHMobXlNb2R1bGUsIHBvbGljeSksIHJvb3RzKTsKKyAgICBhc3NlcnRSb290cyhjb2xsZWN0QnlPcmRlckVudW1lcmF0b3IocG9saWN5KSwgcm9vdHMpOworICB9CisKKyAgcHJpdmF0ZSBQYXRoc0xpc3QgY29sbGVjdEJ5T3JkZXJFbnVtZXJhdG9yKFByb2plY3RSb290c1RyYXZlcnNpbmcuUm9vdFRyYXZlcnNlUG9saWN5IHBvbGljeSkgeworICAgIGlmIChwb2xpY3kgPT0gUHJvamVjdENsYXNzcGF0aFRyYXZlcnNpbmcuRlVMTF9DTEFTU1BBVEgpIHsKKyAgICAgIHJldHVybiBPcmRlckVudW1lcmF0b3Iub3JkZXJFbnRyaWVzKG15TW9kdWxlKS53aXRob3V0RGVwTW9kdWxlcygpLmdldFBhdGhzTGlzdCgpOworICAgIH0KKyAgICBpZiAocG9saWN5ID09IFByb2plY3RDbGFzc3BhdGhUcmF2ZXJzaW5nLkZVTExfQ0xBU1NfUkVDVVJTSVZFX1dPX0pESykgeworICAgICAgcmV0dXJuIE9yZGVyRW51bWVyYXRvci5vcmRlckVudHJpZXMobXlNb2R1bGUpLndpdGhvdXRTZGsoKS5yZWN1cnNpdmVseSgpLmdldFBhdGhzTGlzdCgpOworICAgIH0KKyAgICBpZiAocG9saWN5ID09IFByb2plY3RDbGFzc3BhdGhUcmF2ZXJzaW5nLkZVTExfQ0xBU1NQQVRIX1JFQ1VSU0lWRSkgeworICAgICAgcmV0dXJuIE9yZGVyRW51bWVyYXRvci5vcmRlckVudHJpZXMobXlNb2R1bGUpLnJlY3Vyc2l2ZWx5KCkuZ2V0UGF0aHNMaXN0KCk7CisgICAgfQorICAgIGlmIChwb2xpY3kgPT0gUHJvamVjdENsYXNzcGF0aFRyYXZlcnNpbmcuRlVMTF9DTEFTU1BBVEhfV0lUSE9VVF9KREtfQU5EX1RFU1RTKSB7CisgICAgICByZXR1cm4gT3JkZXJFbnVtZXJhdG9yLm9yZGVyRW50cmllcyhteU1vZHVsZSkud2l0aG91dFNkaygpLnByb2R1Y3Rpb25Pbmx5KCkucmVjdXJzaXZlbHkoKS5nZXRQYXRoc0xpc3QoKTsKKyAgICB9CisgICAgaWYgKHBvbGljeSA9PSBQcm9qZWN0Q2xhc3NwYXRoVHJhdmVyc2luZy5GVUxMX0NMQVNTUEFUSF9XSVRIT1VUX1RFU1RTKSB7CisgICAgICByZXR1cm4gT3JkZXJFbnVtZXJhdG9yLm9yZGVyRW50cmllcyhteU1vZHVsZSkucHJvZHVjdGlvbk9ubHkoKS5yZWN1cnNpdmVseSgpLmdldFBhdGhzTGlzdCgpOworICAgIH0KKyAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRXJyb3IocG9saWN5KTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL3Jvb3RzL1Byb2plY3RSb290c1RyYXZlcnNpbmdUZXN0LmphdmEgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovcm9vdHMvUHJvamVjdFJvb3RzVHJhdmVyc2luZ1Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMjVlMWIyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL3Jvb3RzL1Byb2plY3RSb290c1RyYXZlcnNpbmdUZXN0LmphdmEKQEAgLTAsMCArMSw3MCBAQAorcGFja2FnZSBjb20uaW50ZWxsaWoucm9vdHM7CisKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS5tb2R1bGUuTW9kdWxlOworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLnJvb3RzLkRlcGVuZGVuY3lTY29wZTsKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS5yb290cy5Nb2R1bGVSb290TW9kaWZpY2F0aW9uVXRpbDsKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS5yb290cy5PcmRlckVudW1lcmF0b3I7CitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkucm9vdHMuUHJvamVjdFJvb3RzVHJhdmVyc2luZzsKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS52ZnMuVmlydHVhbEZpbGU7CitpbXBvcnQgY29tLmludGVsbGlqLnV0aWwuUGF0aHNMaXN0OworCisvKioKKyAqIEBhdXRob3IgbmlrCisgKi8KK0BTdXBwcmVzc1dhcm5pbmdzKHsiZGVwcmVjYXRpb24ifSkKK3B1YmxpYyBjbGFzcyBQcm9qZWN0Um9vdHNUcmF2ZXJzaW5nVGVzdCBleHRlbmRzIE1vZHVsZVJvb3RNYW5hZ2VyVGVzdENhc2UgeworCisgIHB1YmxpYyB2b2lkIHRlc3RMaWJyYXJ5KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgTW9kdWxlUm9vdE1vZGlmaWNhdGlvblV0aWwuYWRkRGVwZW5kZW5jeShteU1vZHVsZSwgY3JlYXRlSkRvbUxpYnJhcnkoKSk7CisgICAgZG9UZXN0KFByb2plY3RSb290c1RyYXZlcnNpbmcuTElCUkFSSUVTX0FORF9KREssIGdldFJ0SmFyKCksIGdldEpEb21KYXIoKSk7CisgICAgZG9UZXN0KFByb2plY3RSb290c1RyYXZlcnNpbmcuUFJPSkVDVF9MSUJSQVJJRVMsIGdldEpEb21KYXIoKSk7CisgICAgZG9UZXN0KFByb2plY3RSb290c1RyYXZlcnNpbmcuUFJPSkVDVF9TT1VSQ0VTKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RNb2R1bGVTb3VyY2VzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZmluYWwgVmlydHVhbEZpbGUgc3JjUm9vdCA9IGFkZFNvdXJjZVJvb3QobXlNb2R1bGUsIGZhbHNlKTsKKyAgICBmaW5hbCBWaXJ0dWFsRmlsZSB0ZXN0Um9vdCA9IGFkZFNvdXJjZVJvb3QobXlNb2R1bGUsIHRydWUpOworCisgICAgZG9UZXN0KFByb2plY3RSb290c1RyYXZlcnNpbmcuTElCUkFSSUVTX0FORF9KREssIGdldFJ0SmFyKCkpOworICAgIGRvVGVzdChQcm9qZWN0Um9vdHNUcmF2ZXJzaW5nLlBST0pFQ1RfU09VUkNFUywgc3JjUm9vdCwgdGVzdFJvb3QpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdE1vZHVsZU91dHB1dCgpIHRocm93cyBFeGNlcHRpb24geworICAgIHNldE1vZHVsZU91dHB1dChteU1vZHVsZSwgZmFsc2UpOworICAgIHNldE1vZHVsZU91dHB1dChteU1vZHVsZSwgdHJ1ZSk7CisKKyAgICBkb1Rlc3QoUHJvamVjdFJvb3RzVHJhdmVyc2luZy5MSUJSQVJJRVNfQU5EX0pESywgZ2V0UnRKYXIoKSk7CisgICAgZG9UZXN0KFByb2plY3RSb290c1RyYXZlcnNpbmcuUFJPSkVDVF9TT1VSQ0VTKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RNb2R1bGVEZXBlbmRlbmN5KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZmluYWwgTW9kdWxlIGRlcCA9IGNyZWF0ZU1vZHVsZSgiYiIpOworICAgIHNldE1vZHVsZU91dHB1dChkZXAsIGZhbHNlKTsKKyAgICBzZXRNb2R1bGVPdXRwdXQoZGVwLCB0cnVlKTsKKyAgICBhZGRTb3VyY2VSb290KGRlcCwgZmFsc2UpOworICAgIGFkZFNvdXJjZVJvb3QoZGVwLCB0cnVlKTsKKyAgICBNb2R1bGVSb290TW9kaWZpY2F0aW9uVXRpbC5hZGREZXBlbmRlbmN5KGRlcCwgY3JlYXRlSkRvbUxpYnJhcnkoKSk7CisgICAgTW9kdWxlUm9vdE1vZGlmaWNhdGlvblV0aWwuYWRkRGVwZW5kZW5jeShteU1vZHVsZSwgZGVwLCBEZXBlbmRlbmN5U2NvcGUuQ09NUElMRSwgZmFsc2UpOworCisgICAgZG9UZXN0KFByb2plY3RSb290c1RyYXZlcnNpbmcuUFJPSkVDVF9MSUJSQVJJRVMsIGdldEpEb21KYXIoKSk7CisgICAgZG9UZXN0KFByb2plY3RSb290c1RyYXZlcnNpbmcuUFJPSkVDVF9TT1VSQ0VTKTsKKyAgfQorCisgIHByaXZhdGUgdm9pZCBkb1Rlc3QoZmluYWwgUHJvamVjdFJvb3RzVHJhdmVyc2luZy5Sb290VHJhdmVyc2VQb2xpY3kgcG9saWN5LCBWaXJ0dWFsRmlsZS4uLiByb290cykgeworICAgIGFzc2VydFJvb3RzKFByb2plY3RSb290c1RyYXZlcnNpbmcuY29sbGVjdFJvb3RzKG15TW9kdWxlLCBwb2xpY3kpLCByb290cyk7CisgICAgYXNzZXJ0Um9vdHMoY29sbGVjdEJ5T3JkZXJFbnVtZXJhdG9yKHBvbGljeSksIHJvb3RzKTsKKyAgfQorCisgIHByaXZhdGUgUGF0aHNMaXN0IGNvbGxlY3RCeU9yZGVyRW51bWVyYXRvcihQcm9qZWN0Um9vdHNUcmF2ZXJzaW5nLlJvb3RUcmF2ZXJzZVBvbGljeSBwb2xpY3kpIHsKKyAgICBpZiAocG9saWN5ID09IFByb2plY3RSb290c1RyYXZlcnNpbmcuTElCUkFSSUVTX0FORF9KREspIHsKKyAgICAgIHJldHVybiBPcmRlckVudW1lcmF0b3Iub3JkZXJFbnRyaWVzKG15TW9kdWxlKS53aXRob3V0RGVwTW9kdWxlcygpLndpdGhvdXRNb2R1bGVTb3VyY2VFbnRyaWVzKCkuZ2V0UGF0aHNMaXN0KCk7CisgICAgfQorICAgIGlmIChwb2xpY3kgPT0gUHJvamVjdFJvb3RzVHJhdmVyc2luZy5QUk9KRUNUX1NPVVJDRVMpIHsKKyAgICAgIHJldHVybiBPcmRlckVudW1lcmF0b3Iub3JkZXJFbnRyaWVzKG15TW9kdWxlKS53aXRob3V0U2RrKCkud2l0aG91dExpYnJhcmllcygpLndpdGhvdXREZXBNb2R1bGVzKCkuZ2V0U291cmNlUGF0aHNMaXN0KCk7CisgICAgfQorICAgIGlmIChwb2xpY3kgPT0gUHJvamVjdFJvb3RzVHJhdmVyc2luZy5QUk9KRUNUX0xJQlJBUklFUykgeworICAgICAgcmV0dXJuIE9yZGVyRW51bWVyYXRvci5vcmRlckVudHJpZXMobXlNb2R1bGUpLndpdGhvdXRTZGsoKS53aXRob3V0TW9kdWxlU291cmNlRW50cmllcygpLnJlY3Vyc2l2ZWx5KCkuZ2V0UGF0aHNMaXN0KCk7CisgICAgfQorICAgIHRocm93IG5ldyBBc3NlcnRpb25FcnJvcihwb2xpY3kpOworICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovcm9vdHMvUm9vdHNDaGFuZ2VkVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL3Jvb3RzL1Jvb3RzQ2hhbmdlZFRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZDYxYWQwCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL3Jvb3RzL1Jvb3RzQ2hhbmdlZFRlc3QuamF2YQpAQCAtMCwwICsxLDI2MiBAQAorLyoKKyAqIENvcHlyaWdodCAyMDAwLTIwMTIgSmV0QnJhaW5zIHMuci5vLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KK3BhY2thZ2UgY29tLmludGVsbGlqLnJvb3RzOworCitpbXBvcnQgY29tLmludGVsbGlqLlByb2plY3RUb3BpY3M7CitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkubW9kdWxlLk1vZHVsZTsKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS5tb2R1bGUuTW9kdWxlTWFuYWdlcjsKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS5yb290cy5pbXBsLk1vZGlmaWFibGVNb2RlbENvbW1pdHRlcjsKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS5wcm9qZWN0Um9vdHMuUHJvamVjdEpka1RhYmxlOworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLnByb2plY3RSb290cy5TZGs7CitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkucHJvamVjdFJvb3RzLlNka01vZGlmaWNhdG9yOworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLnByb2plY3RSb290cy5pbXBsLkphdmFTZGtJbXBsOworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLnJvb3RzLio7CitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkucm9vdHMubGlicmFyaWVzLkxpYnJhcnk7CitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkucm9vdHMubGlicmFyaWVzLkxpYnJhcnlUYWJsZTsKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS5yb290cy5saWJyYXJpZXMuTGlicmFyeVRhYmxlc1JlZ2lzdHJhcjsKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS51dGlsLmlvLkZpbGVVdGlsOworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLnZmcy5Mb2NhbEZpbGVTeXN0ZW07CitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkudmZzLlZpcnR1YWxGaWxlOworaW1wb3J0IGNvbS5pbnRlbGxpai50ZXN0RnJhbWV3b3JrLklkZWFUZXN0VXRpbDsKK2ltcG9ydCBjb20uaW50ZWxsaWoudGVzdEZyYW1ld29yay5Nb2R1bGVUZXN0Q2FzZTsKK2ltcG9ydCBjb20uaW50ZWxsaWoudXRpbC5tZXNzYWdlcy5NZXNzYWdlQnVzQ29ubmVjdGlvbjsKKworaW1wb3J0IGphdmEuaW8uRmlsZTsKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworCisvKioKKyAqIEBhdXRob3IgZHNsCisgKi8KK3B1YmxpYyBjbGFzcyBSb290c0NoYW5nZWRUZXN0IGV4dGVuZHMgTW9kdWxlVGVzdENhc2UgeworICBwcml2YXRlIE1lc3NhZ2VCdXNDb25uZWN0aW9uIG15Q29ubmVjdGlvbjsKKyAgcHJpdmF0ZSBNeU1vZHVsZVJvb3RMaXN0ZW5lciBteU1vZHVsZVJvb3RMaXN0ZW5lcjsKKworICBAT3ZlcnJpZGUKKyAgcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBzdXBlci5zZXRVcCgpOworICAgIG15Q29ubmVjdGlvbiA9IG15UHJvamVjdC5nZXRNZXNzYWdlQnVzKCkuY29ubmVjdCgpOworICAgIG15TW9kdWxlUm9vdExpc3RlbmVyID0gbmV3IE15TW9kdWxlUm9vdExpc3RlbmVyKCk7CisgICAgbXlDb25uZWN0aW9uLnN1YnNjcmliZShQcm9qZWN0VG9waWNzLlBST0pFQ1RfUk9PVFMsIG15TW9kdWxlUm9vdExpc3RlbmVyKTsKKyAgfQorCisgIEBPdmVycmlkZQorICBwcm90ZWN0ZWQgdm9pZCB0ZWFyRG93bigpIHRocm93cyBFeGNlcHRpb24geworICAgIG15Q29ubmVjdGlvbi5kaXNjb25uZWN0KCk7CisgICAgc3VwZXIudGVhckRvd24oKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RQcm9qZWN0TGlicmFyeUNoYW5nZUV2ZW50KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZmluYWwgTGlicmFyeVRhYmxlIHByb2plY3RMaWJyYXJ5VGFibGUgPSBMaWJyYXJ5VGFibGVzUmVnaXN0cmFyLmdldEluc3RhbmNlKCkuZ2V0TGlicmFyeVRhYmxlKG15UHJvamVjdCk7CisgICAgdmVyaWZ5TGlicmFyeVRhYmxlRWRpdGluZyhwcm9qZWN0TGlicmFyeVRhYmxlKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RHbG9iYWxMaWJyYXJ5Q2hhbmdlRXZlbnQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBmaW5hbCBMaWJyYXJ5VGFibGUgZ2xvYmFsTGlicmFyeVRhYmxlID0gTGlicmFyeVRhYmxlc1JlZ2lzdHJhci5nZXRJbnN0YW5jZSgpLmdldExpYnJhcnlUYWJsZSgpOworICAgIHZlcmlmeUxpYnJhcnlUYWJsZUVkaXRpbmcoZ2xvYmFsTGlicmFyeVRhYmxlKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RQcm9qZWN0TGlicmFyeUV2ZW50c0luVW5jb21taXRlZE1vZGVsKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZmluYWwgTGlicmFyeVRhYmxlIHByb2plY3RMaWJyYXJ5VGFibGUgPSBMaWJyYXJ5VGFibGVzUmVnaXN0cmFyLmdldEluc3RhbmNlKCkuZ2V0TGlicmFyeVRhYmxlKG15UHJvamVjdCk7CisgICAgdmVyaWZ5TGlicmFyeVRhYmxlRWRpdGluZ0luVW5jb21taXRlZE1vZGVsKHByb2plY3RMaWJyYXJ5VGFibGUpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEdsb2JhbExpYnJhcnlFdmVudHNJblVuY29tbWl0ZWRNb2RlbCgpIHRocm93cyBFeGNlcHRpb24geworICAgIGZpbmFsIExpYnJhcnlUYWJsZSBnbG9iYWxMaWJyYXJ5VGFibGUgPSBMaWJyYXJ5VGFibGVzUmVnaXN0cmFyLmdldEluc3RhbmNlKCkuZ2V0TGlicmFyeVRhYmxlKCk7CisgICAgdmVyaWZ5TGlicmFyeVRhYmxlRWRpdGluZ0luVW5jb21taXRlZE1vZGVsKGdsb2JhbExpYnJhcnlUYWJsZSk7CisgIH0KKworCisgIHB1YmxpYyB2b2lkIHRlc3RNb2R1bGVKZGtFZGl0aW5nKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgZmluYWwgTW9kdWxlIG1vZHVsZUEgPSBjcmVhdGVNb2R1bGUoImEuaW1sIik7CisgICAgZmluYWwgTW9kdWxlIG1vZHVsZUIgPSBjcmVhdGVNb2R1bGUoImIuaW1sIik7CisgICAgYXNzZXJ0RXZlbnRzQ291bnQoMik7CisKKyAgICBmaW5hbCBTZGsgamRrID0gSWRlYVRlc3RVdGlsLmdldE1vY2tKZGsxNygpOworICAgIFByb2plY3RKZGtUYWJsZS5nZXRJbnN0YW5jZSgpLmFkZEpkayhqZGspOworICAgIGFzc2VydEV2ZW50c0NvdW50KDApOworCisgICAgZmluYWwgTW9kaWZpYWJsZVJvb3RNb2RlbCByb290TW9kZWxBID0gTW9kdWxlUm9vdE1hbmFnZXIuZ2V0SW5zdGFuY2UobW9kdWxlQSkuZ2V0TW9kaWZpYWJsZU1vZGVsKCk7CisgICAgZmluYWwgTW9kaWZpYWJsZVJvb3RNb2RlbCByb290TW9kZWxCID0gTW9kdWxlUm9vdE1hbmFnZXIuZ2V0SW5zdGFuY2UobW9kdWxlQikuZ2V0TW9kaWZpYWJsZU1vZGVsKCk7CisgICAgcm9vdE1vZGVsQS5zZXRTZGsoamRrKTsKKyAgICByb290TW9kZWxCLnNldFNkayhqZGspOworICAgIE1vZGlmaWFibGVSb290TW9kZWxbXSByb290TW9kZWxzID0gbmV3IE1vZGlmaWFibGVSb290TW9kZWxbXXtyb290TW9kZWxBLCByb290TW9kZWxCfTsKKyAgICBpZiAocm9vdE1vZGVscy5sZW5ndGggPiAwKSB7CisgICAgICBNb2RpZmlhYmxlTW9kZWxDb21taXR0ZXIubXVsdGlDb21taXQocm9vdE1vZGVscywgTW9kdWxlTWFuYWdlci5nZXRJbnN0YW5jZShyb290TW9kZWxzWzBdLmdldFByb2plY3QoKSkuZ2V0TW9kaWZpYWJsZU1vZGVsKCkpOworICAgIH0KKyAgICBhc3NlcnRFdmVudHNDb3VudCgxKTsKKworICAgIGZpbmFsIFNka01vZGlmaWNhdG9yIHNka01vZGlmaWNhdG9yID0gamRrLmdldFNka01vZGlmaWNhdG9yKCk7CisgICAgc2RrTW9kaWZpY2F0b3IuYWRkUm9vdChnZXRWaXJ0dWFsRmlsZShjcmVhdGVUZW1wRGlyZWN0b3J5KCkpLCBPcmRlclJvb3RUeXBlLkNMQVNTRVMpOworICAgIHNka01vZGlmaWNhdG9yLmNvbW1pdENoYW5nZXMoKTsKKyAgICBhc3NlcnRFdmVudHNDb3VudCgxKTsKKworICAgIFByb2plY3RKZGtUYWJsZS5nZXRJbnN0YW5jZSgpLnJlbW92ZUpkayhqZGspOworICAgIGFzc2VydEV2ZW50c0NvdW50KDEpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEluaGVyaXRlZEpka0VkaXRpbmcoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBmaW5hbCBNb2R1bGUgbW9kdWxlQSA9IGNyZWF0ZU1vZHVsZSgiYS5pbWwiKTsKKyAgICBmaW5hbCBNb2R1bGUgbW9kdWxlQiA9IGNyZWF0ZU1vZHVsZSgiYi5pbWwiKTsKKyAgICBhc3NlcnRFdmVudHNDb3VudCgyKTsKKworICAgIGZpbmFsIFNkayBqZGsgPSBJZGVhVGVzdFV0aWwuZ2V0TW9ja0pkazE3KCJBQUEiKTsKKyAgICBQcm9qZWN0SmRrVGFibGUuZ2V0SW5zdGFuY2UoKS5hZGRKZGsoamRrKTsKKyAgICBhc3NlcnRFdmVudHNDb3VudCgwKTsKKworICAgIGZpbmFsIFNkayBqZGtCQkIgPSBJZGVhVGVzdFV0aWwuZ2V0TW9ja0pkazE3KCJCQkIiKTsKKyAgICBQcm9qZWN0SmRrVGFibGUuZ2V0SW5zdGFuY2UoKS5hZGRKZGsoamRrKTsKKyAgICBhc3NlcnRFdmVudHNDb3VudCgwKTsKKworICAgIFByb2plY3RSb290TWFuYWdlci5nZXRJbnN0YW5jZShteVByb2plY3QpLnNldFByb2plY3RTZGsoamRrQkJCKTsKKyAgICBhc3NlcnRFdmVudHNDb3VudCgwKTsKKworICAgIGZpbmFsIE1vZGlmaWFibGVSb290TW9kZWwgcm9vdE1vZGVsQSA9IE1vZHVsZVJvb3RNYW5hZ2VyLmdldEluc3RhbmNlKG1vZHVsZUEpLmdldE1vZGlmaWFibGVNb2RlbCgpOworICAgIGZpbmFsIE1vZGlmaWFibGVSb290TW9kZWwgcm9vdE1vZGVsQiA9IE1vZHVsZVJvb3RNYW5hZ2VyLmdldEluc3RhbmNlKG1vZHVsZUIpLmdldE1vZGlmaWFibGVNb2RlbCgpOworICAgIHJvb3RNb2RlbEEuaW5oZXJpdFNkaygpOworICAgIHJvb3RNb2RlbEIuaW5oZXJpdFNkaygpOworICAgIE1vZGlmaWFibGVSb290TW9kZWxbXSByb290TW9kZWxzID0gbmV3IE1vZGlmaWFibGVSb290TW9kZWxbXXtyb290TW9kZWxBLCByb290TW9kZWxCfTsKKyAgICBpZiAocm9vdE1vZGVscy5sZW5ndGggPiAwKSB7CisgICAgICBNb2RpZmlhYmxlTW9kZWxDb21taXR0ZXIubXVsdGlDb21taXQocm9vdE1vZGVscywgTW9kdWxlTWFuYWdlci5nZXRJbnN0YW5jZShyb290TW9kZWxzWzBdLmdldFByb2plY3QoKSkuZ2V0TW9kaWZpYWJsZU1vZGVsKCkpOworICAgIH0KKyAgICBhc3NlcnRFdmVudHNDb3VudCgxKTsKKworICAgIFByb2plY3RSb290TWFuYWdlci5nZXRJbnN0YW5jZShteVByb2plY3QpLnNldFByb2plY3RTZGsoamRrKTsKKyAgICBhc3NlcnRFdmVudHNDb3VudCgxKTsKKworICAgIGZpbmFsIFNka01vZGlmaWNhdG9yIHNka01vZGlmaWNhdG9yID0gamRrLmdldFNka01vZGlmaWNhdG9yKCk7CisgICAgc2RrTW9kaWZpY2F0b3IuYWRkUm9vdChnZXRWaXJ0dWFsRmlsZShjcmVhdGVUZW1wRGlyZWN0b3J5KCkpLCBPcmRlclJvb3RUeXBlLkNMQVNTRVMpOworICAgIHNka01vZGlmaWNhdG9yLmNvbW1pdENoYW5nZXMoKTsKKyAgICBhc3NlcnRFdmVudHNDb3VudCgxKTsKKworICAgIFByb2plY3RKZGtUYWJsZS5nZXRJbnN0YW5jZSgpLnJlbW92ZUpkayhqZGspOworICAgIGFzc2VydEV2ZW50c0NvdW50KDEpOworICB9CisKKyAgcHJpdmF0ZSB2b2lkIHZlcmlmeUxpYnJhcnlUYWJsZUVkaXRpbmcoZmluYWwgTGlicmFyeVRhYmxlIGxpYnJhcnlUYWJsZSkgdGhyb3dzIElPRXhjZXB0aW9uIHsKKyAgICBmaW5hbCBNb2R1bGUgbW9kdWxlQSA9IGNyZWF0ZU1vZHVsZSgiYS5pbWwiKTsKKyAgICBmaW5hbCBNb2R1bGUgbW9kdWxlQiA9IGNyZWF0ZU1vZHVsZSgiYi5pbWwiKTsKKyAgICBhc3NlcnRFdmVudHNDb3VudCgyKTsKKworICAgIGZpbmFsIExpYnJhcnkgbGlicmFyeUEgPSBsaWJyYXJ5VGFibGUuY3JlYXRlTGlicmFyeSgiQSIpOworICAgIGZpbmFsIExpYnJhcnkuTW9kaWZpYWJsZU1vZGVsIGxpYnJhcnlNb2RpZmlhYmxlTW9kZWwgPSBsaWJyYXJ5QS5nZXRNb2RpZmlhYmxlTW9kZWwoKTsKKyAgICBsaWJyYXJ5TW9kaWZpYWJsZU1vZGVsLmFkZFJvb3QoImZpbGU6Ly8vYSIsIE9yZGVyUm9vdFR5cGUuQ0xBU1NFUyk7CisgICAgbGlicmFyeU1vZGlmaWFibGVNb2RlbC5jb21taXQoKTsKKyAgICBhc3NlcnRFdmVudHNDb3VudCgwKTsKKworICAgIGZpbmFsIE1vZGlmaWFibGVSb290TW9kZWwgcm9vdE1vZGVsQSA9IE1vZHVsZVJvb3RNYW5hZ2VyLmdldEluc3RhbmNlKG1vZHVsZUEpLmdldE1vZGlmaWFibGVNb2RlbCgpOworICAgIGZpbmFsIE1vZGlmaWFibGVSb290TW9kZWwgcm9vdE1vZGVsQiA9IE1vZHVsZVJvb3RNYW5hZ2VyLmdldEluc3RhbmNlKG1vZHVsZUIpLmdldE1vZGlmaWFibGVNb2RlbCgpOworICAgIHJvb3RNb2RlbEEuYWRkTGlicmFyeUVudHJ5KGxpYnJhcnlBKTsKKyAgICByb290TW9kZWxCLmFkZExpYnJhcnlFbnRyeShsaWJyYXJ5QSk7CisgICAgcm9vdE1vZGVsQS5hZGRJbnZhbGlkTGlicmFyeSgiUSIsIGxpYnJhcnlUYWJsZS5nZXRUYWJsZUxldmVsKCkpOworICAgIHJvb3RNb2RlbEIuYWRkSW52YWxpZExpYnJhcnkoIlEiLCBsaWJyYXJ5VGFibGUuZ2V0VGFibGVMZXZlbCgpKTsKKyAgICBNb2RpZmlhYmxlUm9vdE1vZGVsW10gcm9vdE1vZGVscyA9IG5ldyBNb2RpZmlhYmxlUm9vdE1vZGVsW117cm9vdE1vZGVsQSwgcm9vdE1vZGVsQn07CisgICAgaWYgKHJvb3RNb2RlbHMubGVuZ3RoID4gMCkgeworICAgICAgTW9kaWZpYWJsZU1vZGVsQ29tbWl0dGVyLm11bHRpQ29tbWl0KHJvb3RNb2RlbHMsIE1vZHVsZU1hbmFnZXIuZ2V0SW5zdGFuY2Uocm9vdE1vZGVsc1swXS5nZXRQcm9qZWN0KCkpLmdldE1vZGlmaWFibGVNb2RlbCgpKTsKKyAgICB9CisgICAgYXNzZXJ0RXZlbnRzQ291bnQoMSk7CisKKyAgICBmaW5hbCBMaWJyYXJ5Lk1vZGlmaWFibGVNb2RlbCBsaWJyYXJ5TW9kaWZpYWJsZU1vZGVsMiA9IGxpYnJhcnlBLmdldE1vZGlmaWFibGVNb2RlbCgpOworICAgIGZpbmFsIEZpbGUgdG1wRGlyID0gRmlsZVV0aWwuY3JlYXRlVGVtcERpcmVjdG9yeShnZXRUZXN0TmFtZSh0cnVlKSwgIiIpOworICAgIHRyeSB7CisgICAgICBmaW5hbCBWaXJ0dWFsRmlsZSBmaWxlID0gTG9jYWxGaWxlU3lzdGVtLmdldEluc3RhbmNlKCkucmVmcmVzaEFuZEZpbmRGaWxlQnlJb0ZpbGUodG1wRGlyKTsKKyAgICAgIGFzc2VydE5vdE51bGwoZmlsZSk7CisgICAgICAKKyAgICAgIGxpYnJhcnlNb2RpZmlhYmxlTW9kZWwyLmFkZFJvb3QoZmlsZS5nZXRVcmwoKSwgT3JkZXJSb290VHlwZS5DTEFTU0VTKTsKKyAgICAgIGxpYnJhcnlNb2RpZmlhYmxlTW9kZWwyLmNvbW1pdCgpOworICAgICAgYXNzZXJ0RXZlbnRzQ291bnQoMSk7CisgICAgfQorICAgIGZpbmFsbHkgeworICAgICAgRmlsZVV0aWwuZGVsZXRlKHRtcERpcik7CisgICAgfQorCisgICAgbGlicmFyeVRhYmxlLnJlbW92ZUxpYnJhcnkobGlicmFyeUEpOworICAgIGFzc2VydEV2ZW50c0NvdW50KDEpOworCisgICAgZmluYWwgTGlicmFyeSBsaWJyYXJ5USA9IGxpYnJhcnlUYWJsZS5jcmVhdGVMaWJyYXJ5KCJRIik7CisgICAgYXNzZXJ0RXZlbnRzQ291bnQoMSk7CisKKyAgICBsaWJyYXJ5VGFibGUucmVtb3ZlTGlicmFyeShsaWJyYXJ5USk7CisgICAgYXNzZXJ0RXZlbnRzQ291bnQoMSk7CisgIH0KKworICBwcml2YXRlIHZvaWQgdmVyaWZ5TGlicmFyeVRhYmxlRWRpdGluZ0luVW5jb21taXRlZE1vZGVsKGZpbmFsIExpYnJhcnlUYWJsZSBsaWJyYXJ5VGFibGUpIHsKKyAgICBmaW5hbCBNb2R1bGUgbW9kdWxlQSA9IGNyZWF0ZU1vZHVsZSgiYS5pbWwiKTsKKyAgICBmaW5hbCBNb2R1bGUgbW9kdWxlQiA9IGNyZWF0ZU1vZHVsZSgiYi5pbWwiKTsKKyAgICBhc3NlcnRFdmVudHNDb3VudCgyKTsKKworICAgIGZpbmFsIExpYnJhcnkgbGlicmFyeUEgPSBsaWJyYXJ5VGFibGUuY3JlYXRlTGlicmFyeSgiQSIpOworICAgIGZpbmFsIExpYnJhcnkuTW9kaWZpYWJsZU1vZGVsIGxpYnJhcnlNb2RpZmlhYmxlTW9kZWwgPSBsaWJyYXJ5QS5nZXRNb2RpZmlhYmxlTW9kZWwoKTsKKyAgICBsaWJyYXJ5TW9kaWZpYWJsZU1vZGVsLmFkZFJvb3QoImZpbGU6Ly8vYSIsIE9yZGVyUm9vdFR5cGUuQ0xBU1NFUyk7CisgICAgbGlicmFyeU1vZGlmaWFibGVNb2RlbC5jb21taXQoKTsKKyAgICBhc3NlcnRFdmVudHNDb3VudCgwKTsKKworICAgIGZpbmFsIE1vZGlmaWFibGVSb290TW9kZWwgcm9vdE1vZGVsQSA9IE1vZHVsZVJvb3RNYW5hZ2VyLmdldEluc3RhbmNlKG1vZHVsZUEpLmdldE1vZGlmaWFibGVNb2RlbCgpOworICAgIGZpbmFsIE1vZGlmaWFibGVSb290TW9kZWwgcm9vdE1vZGVsQiA9IE1vZHVsZVJvb3RNYW5hZ2VyLmdldEluc3RhbmNlKG1vZHVsZUIpLmdldE1vZGlmaWFibGVNb2RlbCgpOworICAgIHJvb3RNb2RlbEEuYWRkTGlicmFyeUVudHJ5KGxpYnJhcnlBKTsKKyAgICByb290TW9kZWxCLmFkZExpYnJhcnlFbnRyeShsaWJyYXJ5QSk7CisgICAgZmluYWwgTGlicmFyeS5Nb2RpZmlhYmxlTW9kZWwgbGlicmFyeU1vZGlmaWFibGVNb2RlbDIgPSBsaWJyYXJ5QS5nZXRNb2RpZmlhYmxlTW9kZWwoKTsKKyAgICBsaWJyYXJ5TW9kaWZpYWJsZU1vZGVsMi5hZGRSb290KCJmaWxlOi8vL2IiLCBPcmRlclJvb3RUeXBlLkNMQVNTRVMpOworICAgIGxpYnJhcnlNb2RpZmlhYmxlTW9kZWwyLmNvbW1pdCgpOworICAgIGFzc2VydEV2ZW50c0NvdW50KDApOworCisgICAgbGlicmFyeVRhYmxlLnJlbW92ZUxpYnJhcnkobGlicmFyeUEpOworICAgIGFzc2VydEV2ZW50c0NvdW50KDApOworCisgICAgcm9vdE1vZGVsQS5hZGRJbnZhbGlkTGlicmFyeSgiUSIsIGxpYnJhcnlUYWJsZS5nZXRUYWJsZUxldmVsKCkpOworICAgIHJvb3RNb2RlbEIuYWRkSW52YWxpZExpYnJhcnkoIlEiLCBsaWJyYXJ5VGFibGUuZ2V0VGFibGVMZXZlbCgpKTsKKyAgICBhc3NlcnRFdmVudHNDb3VudCgwKTsKKworICAgIGZpbmFsIExpYnJhcnkgbGlicmFyeVEgPSBsaWJyYXJ5VGFibGUuY3JlYXRlTGlicmFyeSgiUSIpOworICAgIGFzc2VydEV2ZW50c0NvdW50KDApOworCisgICAgTW9kaWZpYWJsZVJvb3RNb2RlbFtdIHJvb3RNb2RlbHMgPSBuZXcgTW9kaWZpYWJsZVJvb3RNb2RlbFtde3Jvb3RNb2RlbEEsIHJvb3RNb2RlbEJ9OworICAgIGlmIChyb290TW9kZWxzLmxlbmd0aCA+IDApIHsKKyAgICAgIE1vZGlmaWFibGVNb2RlbENvbW1pdHRlci5tdWx0aUNvbW1pdChyb290TW9kZWxzLCBNb2R1bGVNYW5hZ2VyLmdldEluc3RhbmNlKHJvb3RNb2RlbHNbMF0uZ2V0UHJvamVjdCgpKS5nZXRNb2RpZmlhYmxlTW9kZWwoKSk7CisgICAgfQorICAgIGFzc2VydEV2ZW50c0NvdW50KDEpOworCisgICAgbGlicmFyeVRhYmxlLnJlbW92ZUxpYnJhcnkobGlicmFyeVEpOworICAgIGFzc2VydEV2ZW50c0NvdW50KDEpOworICB9CisKKyAgcHJpdmF0ZSB2b2lkIGFzc2VydEV2ZW50c0NvdW50KGludCBjb3VudCkgeworICAgIGZpbmFsIGludCBiZWZvcmVDb3VudCA9IG15TW9kdWxlUm9vdExpc3RlbmVyLmJlZm9yZUNvdW50OworICAgIGZpbmFsIGludCBhZnRlckNvdW50ID0gbXlNb2R1bGVSb290TGlzdGVuZXIuYWZ0ZXJDb3VudDsKKyAgICBhc3NlcnRFcXVhbHMoImJlZm9yZUNvdW50ID0gIiArIGJlZm9yZUNvdW50ICsgIiwgYWZ0ZXJDb3VudCA9ICIgKyBhZnRlckNvdW50LCBiZWZvcmVDb3VudCwgYWZ0ZXJDb3VudCk7CisgICAgYXNzZXJ0RXF1YWxzKGNvdW50LCBiZWZvcmVDb3VudCk7CisgICAgbXlNb2R1bGVSb290TGlzdGVuZXIucmVzZXQoKTsKKyAgfQorCisgIHByaXZhdGUgc3RhdGljIGNsYXNzIE15TW9kdWxlUm9vdExpc3RlbmVyIGltcGxlbWVudHMgTW9kdWxlUm9vdExpc3RlbmVyIHsKKyAgICBwcml2YXRlIGludCBiZWZvcmVDb3VudCA9IDA7CisgICAgcHJpdmF0ZSBpbnQgYWZ0ZXJDb3VudCA9IDA7CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgdm9pZCBiZWZvcmVSb290c0NoYW5nZShNb2R1bGVSb290RXZlbnQgZXZlbnQpIHsKKyAgICAgIGJlZm9yZUNvdW50Kys7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIHZvaWQgcm9vdHNDaGFuZ2VkKE1vZHVsZVJvb3RFdmVudCBldmVudCkgeworICAgICAgYWZ0ZXJDb3VudCsrOworICAgIH0KKworICAgIHByaXZhdGUgdm9pZCByZXNldCgpIHsKKyAgICAgIGJlZm9yZUNvdW50ID0gMDsKKyAgICAgIGFmdGVyQ291bnQgPSAwOworICAgIH0KKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL3Jvb3RzL1Jvb3RzVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL3Jvb3RzL1Jvb3RzVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg3ZTA1Y2EKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovcm9vdHMvUm9vdHNUZXN0LmphdmEKQEAgLTAsMCArMSw0OSBAQAorcGFja2FnZSBjb20uaW50ZWxsaWoucm9vdHM7CisKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS5hcHBsaWNhdGlvbi5BcHBsaWNhdGlvbk1hbmFnZXI7CitpbXBvcnQgY29tLmludGVsbGlqLm9wZW5hcGkuYXBwbGljYXRpb24uZXguUGF0aE1hbmFnZXJFeDsKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS5yb290cy5Nb2R1bGVSb290TWFuYWdlcjsKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS52ZnMuTG9jYWxGaWxlU3lzdGVtOworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLnZmcy5WaXJ0dWFsRmlsZTsKK2ltcG9ydCBjb20uaW50ZWxsaWoudGVzdEZyYW1ld29yay5Qc2lUZXN0Q2FzZTsKK2ltcG9ydCBjb20uaW50ZWxsaWoudGVzdEZyYW1ld29yay5Qc2lUZXN0VXRpbDsKKworaW1wb3J0IGphdmEuaW8uRmlsZTsKKworLyoqCisgKiAgQGF1dGhvciBkc2wKKyAqLworcHVibGljIGNsYXNzIFJvb3RzVGVzdCBleHRlbmRzIFBzaVRlc3RDYXNlIHsKKyAgcHVibGljIHZvaWQgdGVzdFRlc3QxKCkgeworICAgIGZpbmFsIFN0cmluZyByb290UGF0aCA9IFBhdGhNYW5hZ2VyRXguZ2V0VGVzdERhdGFQYXRoKCkgKyAiL21vZHVsZVJvb3RNYW5hZ2VyL3Jvb3RzLyIgKyAidGVzdDEiOworICAgIGZpbmFsIFZpcnR1YWxGaWxlW10gcm9vdEZpbGVCb3ggPSBuZXcgVmlydHVhbEZpbGVbMV07CisgICAgQXBwbGljYXRpb25NYW5hZ2VyLmdldEFwcGxpY2F0aW9uKCkucnVuV3JpdGVBY3Rpb24obmV3IFJ1bm5hYmxlKCkgeworICAgICAgQE92ZXJyaWRlCisgICAgICBwdWJsaWMgdm9pZCBydW4oKSB7CisgICAgICAgIHJvb3RGaWxlQm94WzBdID0KKyAgICAgICAgTG9jYWxGaWxlU3lzdGVtLmdldEluc3RhbmNlKCkucmVmcmVzaEFuZEZpbmRGaWxlQnlQYXRoKHJvb3RQYXRoLnJlcGxhY2UoRmlsZS5zZXBhcmF0b3JDaGFyLCAnLycpKTsKKyAgICAgIH0KKyAgICB9KTsKKyAgICBmaW5hbCBWaXJ0dWFsRmlsZSByb290RmlsZSA9IHJvb3RGaWxlQm94WzBdOworICAgIGZpbmFsIFZpcnR1YWxGaWxlIGNsYXNzZXNGaWxlID0gcm9vdEZpbGUuZmluZENoaWxkKCJjbGFzc2VzIik7CisgICAgYXNzZXJ0Tm90TnVsbChjbGFzc2VzRmlsZSk7CisgICAgZmluYWwgVmlydHVhbEZpbGUgY2hpbGRPZkNvbnRlbnQgPSByb290RmlsZS5maW5kQ2hpbGQoIngudHh0Iik7CisgICAgYXNzZXJ0Tm90TnVsbChjaGlsZE9mQ29udGVudCk7CisgICAgZmluYWwgVmlydHVhbEZpbGUgY2hpbGRPZkNsYXNzZXMgPSBjbGFzc2VzRmlsZS5maW5kQ2hpbGQoInkudHh0Iik7CisgICAgYXNzZXJ0Tm90TnVsbChjaGlsZE9mQ2xhc3Nlcyk7CisKKyAgICBmaW5hbCBNb2R1bGVSb290TWFuYWdlciByb290TWFuYWdlciA9IE1vZHVsZVJvb3RNYW5hZ2VyLmdldEluc3RhbmNlKG15TW9kdWxlKTsKKworCisgICAgUHNpVGVzdFV0aWwuYWRkQ29udGVudFJvb3QobXlNb2R1bGUsIHJvb3RGaWxlKTsKKyAgICBQc2lUZXN0VXRpbC5zZXRDb21waWxlck91dHB1dFBhdGgobXlNb2R1bGUsIGNsYXNzZXNGaWxlLmdldFVybCgpLCBmYWxzZSk7CisgICAgUHNpVGVzdFV0aWwuc2V0RXhjbHVkZUNvbXBpbGVPdXRwdXQobXlNb2R1bGUsIGZhbHNlKTsKKyAgICBhc3NlcnRUcnVlKHJvb3RNYW5hZ2VyLmdldEZpbGVJbmRleCgpLmlzSW5Db250ZW50KGNoaWxkT2ZDb250ZW50KSk7CisgICAgYXNzZXJ0VHJ1ZShyb290TWFuYWdlci5nZXRGaWxlSW5kZXgoKS5pc0luQ29udGVudChjaGlsZE9mQ2xhc3NlcykpOworCisgICAgUHNpVGVzdFV0aWwuc2V0RXhjbHVkZUNvbXBpbGVPdXRwdXQobXlNb2R1bGUsIHRydWUpOworICAgIGFzc2VydFRydWUocm9vdE1hbmFnZXIuZ2V0RmlsZUluZGV4KCkuaXNJbkNvbnRlbnQoY2hpbGRPZkNvbnRlbnQpKTsKKyAgICBhc3NlcnRGYWxzZShyb290TWFuYWdlci5nZXRGaWxlSW5kZXgoKS5pc0luQ29udGVudChjaGlsZE9mQ2xhc3NlcykpOworICB9CisKK30KZGlmZiAtLWdpdCBhL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9yb290cy9saWJyYXJpZXMvTGlicmFyeVRlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai9yb290cy9saWJyYXJpZXMvTGlicmFyeVRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MmU5MWZlCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL3Jvb3RzL2xpYnJhcmllcy9MaWJyYXJ5VGVzdC5qYXZhCkBAIC0wLDAgKzEsNjMgQEAKK3BhY2thZ2UgY29tLmludGVsbGlqLnJvb3RzLmxpYnJhcmllczsKKworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLmFwcGxpY2F0aW9uLkFwcGxpY2F0aW9uTWFuYWdlcjsKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS5yb290cy5PcmRlclJvb3RUeXBlOworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLnJvb3RzLlJvb3RQcm92aWRlcjsKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS5yb290cy5saWJyYXJpZXMuTGlicmFyeTsKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS5yb290cy5saWJyYXJpZXMuTGlicmFyeVRhYmxlOworaW1wb3J0IGNvbS5pbnRlbGxpai5vcGVuYXBpLnJvb3RzLmxpYnJhcmllcy5MaWJyYXJ5VGFibGVzUmVnaXN0cmFyOworaW1wb3J0IGNvbS5pbnRlbGxpai50ZXN0RnJhbWV3b3JrLklkZWFUZXN0Q2FzZTsKK2ltcG9ydCBvcmcuamRvbS5FbGVtZW50OworaW1wb3J0IG9yZy5qZG9tLm91dHB1dC5YTUxPdXRwdXR0ZXI7CisKKy8qKgorICogIEBhdXRob3IgZHNsCisgKi8KK3B1YmxpYyBjbGFzcyBMaWJyYXJ5VGVzdCBleHRlbmRzIElkZWFUZXN0Q2FzZSB7CisgIHB1YmxpYyB2b2lkIHRlc3RNb2RpZmljYXRpb24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBmaW5hbCBMaWJyYXJ5VGFibGUgbGlicmFyeVRhYmxlID0gTGlicmFyeVRhYmxlc1JlZ2lzdHJhci5nZXRJbnN0YW5jZSgpLmdldExpYnJhcnlUYWJsZSgpOworICAgIGZpbmFsIExpYnJhcnkgbGlicmFyeSA9IGxpYnJhcnlUYWJsZS5jcmVhdGVMaWJyYXJ5KCJOZXdMaWJyYXJ5Iik7CisgICAgZmluYWwgYm9vbGVhbltdIGxpc3RlbmVyTm90aWZpZWRPbkNoYW5nZSA9IG5ldyBib29sZWFuWzFdOworICAgIGxpYnJhcnkuZ2V0Um9vdFByb3ZpZGVyKCkuYWRkUm9vdFNldENoYW5nZWRMaXN0ZW5lcihuZXcgUm9vdFByb3ZpZGVyLlJvb3RTZXRDaGFuZ2VkTGlzdGVuZXIoKSB7CisgICAgICBAT3ZlcnJpZGUKKyAgICAgIHB1YmxpYyB2b2lkIHJvb3RTZXRDaGFuZ2VkKFJvb3RQcm92aWRlciB3cmFwcGVyKSB7CisgICAgICAgIGxpc3RlbmVyTm90aWZpZWRPbkNoYW5nZVswXSA9IHRydWU7CisgICAgICB9CisKKyAgICB9KTsKKyAgICBmaW5hbCBMaWJyYXJ5Lk1vZGlmaWFibGVNb2RlbCBtb2RpZnlhYmxlTW9kZWwgPSBsaWJyYXJ5LmdldE1vZGlmaWFibGVNb2RlbCgpOworICAgIG1vZGlmeWFibGVNb2RlbC5hZGRSb290KCJmaWxlOi8veC5qYXIiLCBPcmRlclJvb3RUeXBlLkNMQVNTRVMpOworICAgIG1vZGlmeWFibGVNb2RlbC5hZGRSb290KCJmaWxlOi8veC1zcmMuamFyIiwgT3JkZXJSb290VHlwZS5TT1VSQ0VTKTsKKyAgICBBcHBsaWNhdGlvbk1hbmFnZXIuZ2V0QXBwbGljYXRpb24oKS5ydW5Xcml0ZUFjdGlvbihuZXcgUnVubmFibGUoKSB7CisgICAgICBAT3ZlcnJpZGUKKyAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKKyAgICAgICAgbW9kaWZ5YWJsZU1vZGVsLmNvbW1pdCgpOworICAgICAgfQorICAgIH0pOworICAgIGFzc2VydFRydWUobGlzdGVuZXJOb3RpZmllZE9uQ2hhbmdlWzBdKTsKKworICAgIGxpc3RlbmVyTm90aWZpZWRPbkNoYW5nZVswXSA9IGZhbHNlOworCisgICAgZmluYWwgTGlicmFyeS5Nb2RpZmlhYmxlTW9kZWwgbW9kaWZ5YWJsZU1vZGVsMSA9IGxpYnJhcnkuZ2V0TW9kaWZpYWJsZU1vZGVsKCk7CisgICAgbW9kaWZ5YWJsZU1vZGVsMS5zZXROYW1lKCJsaWJyYXJ5Iik7CisgICAgQXBwbGljYXRpb25NYW5hZ2VyLmdldEFwcGxpY2F0aW9uKCkucnVuV3JpdGVBY3Rpb24obmV3IFJ1bm5hYmxlKCkgeworICAgICAgQE92ZXJyaWRlCisgICAgICBwdWJsaWMgdm9pZCBydW4oKSB7CisgICAgICAgIG1vZGlmeWFibGVNb2RlbDEuY29tbWl0KCk7CisgICAgICB9CisgICAgfSk7CisgICAgYXNzZXJ0RmFsc2UobGlzdGVuZXJOb3RpZmllZE9uQ2hhbmdlWzBdKTsKKworICAgIGZpbmFsIEVsZW1lbnQgZWxlbWVudCA9IG5ldyBFbGVtZW50KCJyb290Iik7CisgICAgbGlicmFyeS53cml0ZUV4dGVybmFsKGVsZW1lbnQpOworICAgIGFzc2VydEVxdWFscygiPHJvb3Q+PGxpYnJhcnkgbmFtZT1cImxpYnJhcnlcIj48Q0xBU1NFUz48cm9vdCB1cmw9XCJmaWxlOi8veC5qYXJcIiAvPjwvQ0xBU1NFUz48SkFWQURPQyAvPjxTT1VSQ0VTPjxyb290IHVybD1cImZpbGU6Ly94LXNyYy5qYXJcIiAvPjwvU09VUkNFUz48L2xpYnJhcnk+PC9yb290PiIsCisgICAgICAgICAgICBuZXcgWE1MT3V0cHV0dGVyKCkub3V0cHV0U3RyaW5nKGVsZW1lbnQpKTsKKworICAgIEFwcGxpY2F0aW9uTWFuYWdlci5nZXRBcHBsaWNhdGlvbigpLnJ1bldyaXRlQWN0aW9uKG5ldyBSdW5uYWJsZSgpIHsKKyAgICAgIEBPdmVycmlkZQorICAgICAgcHVibGljIHZvaWQgcnVuKCkgeworICAgICAgICBsaWJyYXJ5VGFibGUucmVtb3ZlTGlicmFyeShsaWJyYXJ5KTsKKyAgICAgIH0KKyAgICB9KTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL3Vuc2NyYW1ibGUvTm9ybWFsaXplVGV4dFRlc3QuamF2YSBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai91bnNjcmFtYmxlL05vcm1hbGl6ZVRleHRUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTAwYjQ2ZAotLS0gL2Rldi9udWxsCisrKyBiL2phdmEvamF2YS10ZXN0cy90ZXN0U3JjL2NvbS9pbnRlbGxpai91bnNjcmFtYmxlL05vcm1hbGl6ZVRleHRUZXN0LmphdmEKQEAgLTAsMCArMSwxMTYgQEAKK3BhY2thZ2UgY29tLmludGVsbGlqLnVuc2NyYW1ibGU7CisKK2ltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7CitpbXBvcnQgb3JnLmpldGJyYWlucy5hbm5vdGF0aW9ucy5Ob25ObHM7CisKKy8qKgorICogQGF1dGhvciBjZHIKKyAqLworcHVibGljIGNsYXNzIE5vcm1hbGl6ZVRleHRUZXN0IGV4dGVuZHMgVGVzdENhc2UgeworICBwdWJsaWMgdm9pZCB0ZXN0Q2F1c2VkQnkoKSB7CisgICAgZG9UZXN0KCJqYXZheC5mYWNlcy5GYWNlc0V4Y2VwdGlvbjogRXJyb3IgY2FsbGluZyBhY3Rpb24gbWV0aG9kIG9mIGNvbXBvbmVudCB3aXRoIGlkIF9pZDY6X2lkMTBcbiIgKworICAgICAgICAgICAiICAgICAgICBhdCBqYXZhLmxhbmcuVGhcbiIgKworICAgICAgICAgICAicmVhZC5ydW4oVGhyZWFkLmphdmE6NjI2KVxuIiArCisgICAgICAgICAgICJDYXVzZWQgYnk6IGphdmF4LmZhY2VzLmVsLkV2YWx1YXRpb25FeGNlcHRpb246IEV4Y2VwdGlvbiB3aGlsZSBpbnZva2luZyBleHByZXNzaW9uICN7X2xvZ2luQWN0aW9uLmxvZ2lufVxuIiArCisgICAgICAgICAgICIgICAgICAgIGF0IG9yZy5hcGFjaGUubXlmYWNlcy5lbC5NZXRob2RCaW5kaW5nSW1wbC5pbnZva2UoTWV0aG9kQmluZGluZ0ltcGwuamF2YToxNTMpXG4iICsKKyAgICAgICAgICAgIiAgICAgICAgYXQgb3JnLmFwYWNoZS5teWZhY2VzLmFwcGxpY2F0aW9uLkFjdGlvbkxpc3RlbmVySW1wbC5wcm9jZXNzQWN0aW9uKEFjdGlvbkxpc3RlbmVySW1wbC5qYXZhOjYzKVxuIiwKKworICAgICAgICAgICAiamF2YXguZmFjZXMuRmFjZXNFeGNlcHRpb246IEVycm9yIGNhbGxpbmcgYWN0aW9uIG1ldGhvZCBvZiBjb21wb25lbnQgd2l0aCBpZCBfaWQ2Ol9pZDEwXG4iICsKKyAgICAgICAgICAgIiAgICAgICAgYXQgamF2YS5sYW5nLlRocmVhZC5ydW4oVGhyZWFkLmphdmE6NjI2KVxuIiArCisgICAgICAgICAgICJDYXVzZWQgYnk6IGphdmF4LmZhY2VzLmVsLkV2YWx1YXRpb25FeGNlcHRpb246IEV4Y2VwdGlvbiB3aGlsZSBpbnZva2luZyBleHByZXNzaW9uICN7X2xvZ2luQWN0aW9uLmxvZ2lufVxuIiArCisgICAgICAgICAgICIgICAgICAgIGF0IG9yZy5hcGFjaGUubXlmYWNlcy5lbC5NZXRob2RCaW5kaW5nSW1wbC5pbnZva2UoTWV0aG9kQmluZGluZ0ltcGwuamF2YToxNTMpXG4iICsKKyAgICAgICAgICAgIiAgICAgICAgYXQgb3JnLmFwYWNoZS5teWZhY2VzLmFwcGxpY2F0aW9uLkFjdGlvbkxpc3RlbmVySW1wbC5wcm9jZXNzQWN0aW9uKEFjdGlvbkxpc3RlbmVySW1wbC5qYXZhOjYzKSIKKyAgICAgICAgICAgKTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHRlc3RUaHJlYWROYW1lcygpIHsKKyAgICBkb1Rlc3QoIlwiQmFja2dyb3VuZCBwcm9jZXNzXCIgcHJpbz02IHRpZD0weDIxMTkzYjg4IG5pZD0weDExZWE0IHdhaXRpbmcgb24gY29uZGl0aW9uIFsweDJcbiIgKyAiMmNiZjAwMC4uMHgyMmNiZmQ2OF1cbiIgKworICAgICAgICAgICAiICAgICAgICBhdCBqYXZhLmxhbmcuVGhyZWFkLnNsZWVwKE5hdGl2ZSBNZXRob2QpXG4iICsgIiAgICAgICAgYXQgY29tLmludGVsbGlqLnV0aWwudWkuVGltZXIkMS5ydW4oVGltZXIuamF2YToyMylcbiIgKyAiXG4iICsKKyAgICAgICAgICAgIlwiQWxhcm0gcG9vbFwiIHByaW89NiB0aWQ9MHgzN2NhY2JlMCBuaWQ9MHg3OTQwIHdhaXRpbmcgb24gY29uZGl0aW9uIFsweDM5NzJmMDAwLi5cbiIgKyAiMHgzOTcyZmFlOF1cbiIgKworICAgICAgICAgICAiICAgICAgICBhdCBzdW4ubWlzYy5VbnNhZmUucGFyayhOYXRpdmUgTWV0aG9kKVxuIiArCisgICAgICAgICAgICIgICAgICAgIGF0IGphdmEudXRpbC5jb25jdXJyZW50LmxvY2tzLkxvY2tTdXBwb3J0LnBhcmsoTG9ja1N1cHBvcnQuamF2YToxMTgpXG4iICsKKyAgICAgICAgICAgIiAgICAgICAgYXQgamF2YS51dGlsLmNvbmN1cnJlbnQubG9ja3MuQWJzdHJhY3RRdWV1ZWRTeW5jaHJvbml6ZXIkQ29uZGl0aW9uT2JqZWN0XG4iICsKKyAgICAgICAgICAgIi5hd2FpdChBYnN0cmFjdFF1ZXVlZFN5bmNocm9uaXplci5qYXZhOjE3NjcpXG5cbiIgKworICAgICAgICAgICAiICAgICAgICBhdCBqYXZhLnV0aWwuY29uY3VycmVudC5MaW5rZWRCbG9ja2luZ1F1ZXVlLnRha2UoTGlua2VkQmxvY2tpbmdRdWV1ZS5qYXZcbiIgKyAiYTozNTkpXG4iICsKKyAgICAgICAgICAgIiAgICAgICAgYXQgamF2YS51dGlsLmNvbmN1cnJlbnQuVGhyZWFkUG9vbEV4ZWN1dG9yLmdldFRhc2soVGhyZWFkUG9vbEV4ZWN1dG9yLmphXG4iICsgInZhOjQ3MClcbiIgKworICAgICAgICAgICAiICAgICAgICBhdCBqYXZhLnV0aWwuY29uY3VycmVudC5UaHJlYWRQb29sRXhlY3V0b3IkV29ya2VyLnJ1bihUaHJlYWRQb29sRXhlY3V0b3JcbiIgKyAiLmphdmE6Njc0KVxuIiArCisgICAgICAgICAgICIgICAgICAgIGF0IGphdmEubGFuZy5UaHJlYWQucnVuKFRocmVhZC5qYXZhOjU5NSkiLAorCisKKyAgICAgICAgICAgIlwiQmFja2dyb3VuZCBwcm9jZXNzXCIgcHJpbz02IHRpZD0weDIxMTkzYjg4IG5pZD0weDExZWE0IHdhaXRpbmcgb24gY29uZGl0aW9uIFsweDIyY2JmMDAwLi4weDIyY2JmZDY4XVxuIiArCisgICAgICAgICAgICIgICAgICAgIGF0IGphdmEubGFuZy5UaHJlYWQuc2xlZXAoTmF0aXZlIE1ldGhvZClcbiIgKworICAgICAgICAgICAiICAgICAgICBhdCBjb20uaW50ZWxsaWoudXRpbC51aS5UaW1lciQxLnJ1bihUaW1lci5qYXZhOjIzKVxuIiArCisgICAgICAgICAgICJcbiIgKworICAgICAgICAgICAiXCJBbGFybSBwb29sXCIgcHJpbz02IHRpZD0weDM3Y2FjYmUwIG5pZD0weDc5NDAgd2FpdGluZyBvbiBjb25kaXRpb24gWzB4Mzk3MmYwMDAuLjB4Mzk3MmZhZThdXG4iICsKKyAgICAgICAgICAgIiAgICAgICAgYXQgc3VuLm1pc2MuVW5zYWZlLnBhcmsoTmF0aXZlIE1ldGhvZClcbiIgKworICAgICAgICAgICAiICAgICAgICBhdCBqYXZhLnV0aWwuY29uY3VycmVudC5sb2Nrcy5Mb2NrU3VwcG9ydC5wYXJrKExvY2tTdXBwb3J0LmphdmE6MTE4KVxuIiArCisgICAgICAgICAgICIgICAgICAgIGF0IGphdmEudXRpbC5jb25jdXJyZW50LmxvY2tzLkFic3RyYWN0UXVldWVkU3luY2hyb25pemVyJENvbmRpdGlvbk9iamVjdC5hd2FpdChBYnN0cmFjdFF1ZXVlZFN5bmNocm9uaXplci5qYXZhOjE3NjcpXG4iICsKKyAgICAgICAgICAgIiAgICAgICAgYXQgamF2YS51dGlsLmNvbmN1cnJlbnQuTGlua2VkQmxvY2tpbmdRdWV1ZS50YWtlKExpbmtlZEJsb2NraW5nUXVldWUuamF2YTozNTkpXG4iICsKKyAgICAgICAgICAgIiAgICAgICAgYXQgamF2YS51dGlsLmNvbmN1cnJlbnQuVGhyZWFkUG9vbEV4ZWN1dG9yLmdldFRhc2soVGhyZWFkUG9vbEV4ZWN1dG9yLmphdmE6NDcwKVxuIiArCisgICAgICAgICAgICIgICAgICAgIGF0IGphdmEudXRpbC5jb25jdXJyZW50LlRocmVhZFBvb2xFeGVjdXRvciRXb3JrZXIucnVuKFRocmVhZFBvb2xFeGVjdXRvci5qYXZhOjY3NClcbiIgKworICAgICAgICAgICAiICAgICAgICBhdCBqYXZhLmxhbmcuVGhyZWFkLnJ1bihUaHJlYWQuamF2YTo1OTUpIgorICAgICAgICAgICApOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdExvY2tlZCgpIHsKKyAgICBkb1Rlc3QoIiAgICAgICBhdCBjb20uaW50ZWxsaWoubGFuZy5qc3AuSnNwRmlsZVZpZXdQcm92aWRlckltcGwuZ2V0S2V5UHJlZml4ZXMoSnNwRmlsZVZcbiIgKyAiaWV3UHJvdmlkZXJJbXBsLmphdmE6NzYpXG4iICsKKyAgICAgICAgICAgIiAgICAgICAgYXQgY29tLmludGVsbGlqLmxhbmcuanNwLkpzcEZpbGVWaWV3UHJvdmlkZXJJbXBsLmdldEtub3duVGFnbGliUHJlZml4ZXMoXG4iICsgIkpzcEZpbGVWaWV3UHJvdmlkZXJJbXBsLmphdmE6ODkpXG4iICsKKyAgICAgICAgICAgIiAgICAgICAgLSBsb2NrZWQgPDB4MDRjYzA3Njg+IChhIGphdmEubGFuZy5PYmplY3QpXG4iICsKKyAgICAgICAgICAgIiAgICAgICAgYXQgY29tLmludGVsbGlqLnBzaS5pbXBsLnNvdXJjZS5wYXJzaW5nLmpzcC5Kc3BMZXhlci5kb0luaXRPcmlnaW5hbChKc3BMXG4iICsgImV4ZXIuamF2YTozOSlcbiIgKworICAgICAgICAgICAiICAgICAgICBhdCBjb20uaW50ZWxsaWoucHNpLmltcGwuc291cmNlLnBhcnNpbmcuanNwLkpzcExleGVyLnN0YXJ0KEpzcExleGVyLmphdmFcbiIgKyAiOjQ5KSIsCisKKyAgICAgICAgICAgIiAgICAgICBhdCBjb20uaW50ZWxsaWoubGFuZy5qc3AuSnNwRmlsZVZpZXdQcm92aWRlckltcGwuZ2V0S2V5UHJlZml4ZXMoSnNwRmlsZVZpZXdQcm92aWRlckltcGwuamF2YTo3NilcbiIgKworICAgICAgICAgICAiICAgICAgICBhdCBjb20uaW50ZWxsaWoubGFuZy5qc3AuSnNwRmlsZVZpZXdQcm92aWRlckltcGwuZ2V0S25vd25UYWdsaWJQcmVmaXhlcyhKc3BGaWxlVmlld1Byb3ZpZGVySW1wbC5qYXZhOjg5KVxuIiArCisgICAgICAgICAgICIgICAgICAgIC0gbG9ja2VkIDwweDA0Y2MwNzY4PiAoYSBqYXZhLmxhbmcuT2JqZWN0KVxuIiArCisgICAgICAgICAgICIgICAgICAgIGF0IGNvbS5pbnRlbGxpai5wc2kuaW1wbC5zb3VyY2UucGFyc2luZy5qc3AuSnNwTGV4ZXIuZG9Jbml0T3JpZ2luYWwoSnNwTGV4ZXIuamF2YTozOSlcbiIgKworICAgICAgICAgICAiICAgICAgICBhdCBjb20uaW50ZWxsaWoucHNpLmltcGwuc291cmNlLnBhcnNpbmcuanNwLkpzcExleGVyLnN0YXJ0KEpzcExleGVyLmphdmE6NDkpIik7CisgIH0KKyAgcHVibGljIHZvaWQgdGVzdEF0U3BsaXQoKSB7CisgICAgZG9UZXN0KCJqYXZhLmxhbmcuVGhyb3dhYmxlXG4iICsKKyAgICAgICAgICAgImF0XG4iICsKKyAgICAgICAgICAgImNvbS5pbnRlbGxpai5vcGVuYXBpLnV0aWwub2JqZWN0VHJlZS5PYmplY3ROb2RlLjxpbml0PihPYmplY3ROb2RlLmphdlxuIiArICJhOjMxKVxuIiArCisgICAgICAgICAgICJhdFxuIiArCisgICAgICAgICAgICJjb20uaW50ZWxsaWoub3BlbmFwaS51dGlsLm9iamVjdFRyZWUuT2JqZWN0VHJlZS5nZXROb2RlRm9yKE9iamVjdFRyZWVcbiIgKyAiLmphdmE6NzkpIiwKKworICAgICAgICAgICAiamF2YS5sYW5nLlRocm93YWJsZVxuIiArCisgICAgICAgICAgICJhdCBjb20uaW50ZWxsaWoub3BlbmFwaS51dGlsLm9iamVjdFRyZWUuT2JqZWN0Tm9kZS48aW5pdD4oT2JqZWN0Tm9kZS5qYXZhOjMxKVxuIiArCisgICAgICAgICAgICJhdCBjb20uaW50ZWxsaWoub3BlbmFwaS51dGlsLm9iamVjdFRyZWUuT2JqZWN0VHJlZS5nZXROb2RlRm9yKE9iamVjdFRyZWUuamF2YTo3OSkiKTsKKyAgfQorICAKKyAgcHVibGljIHZvaWQgdGVzdFNwbGl0TWVyZ2VkTGluZXMoKSB7CisgICAgZG9UZXN0KCJvcmcuYXBhY2hlLnZlbG9jaXR5LmV4Y2VwdGlvbi5NZXRob2RJbnZvY2F0aW9uRXhjZXB0aW9uICIgKworICAgICAgICAgICAiYXQgb3JnLmFwYWNoZS52ZWxvY2l0eS5ydW50aW1lLnBhcnNlci5ub2RlLkFTVE1ldGhvZC5leGVjdXRlKEFTVE1ldGhvZC5qYXZhOjI0NikgIiArCisgICAgICAgICAgICJhdCBvcmcuYXBhY2hlLnZlbG9jaXR5LnJ1bnRpbWUucGFyc2VyLm5vZGUuQVNUUmVmZXJlbmNlLmV4ZWN1dGUoQVNUUmVmZXJlbmNlLmphdmE6MTc1KSAiICsKKyAgICAgICAgICAgImF0IG9yZy5hcGFjaGUudmVsb2NpdHkucnVudGltZS5wYXJzZXIubm9kZS5BU1RSZWZlcmVuY2UudmFsdWUoQVNUUmVmZXJlbmNlLmphdmE6MzI3KSAiICsKKyAgICAgICAgICAgImF0IG9yZy5hcGFjaGUudmVsb2NpdHkucnVudGltZS5wYXJzZXIubm9kZS5BU1RFeHByZXNzaW9uLnZhbHVlKEFTVEV4cHJlc3Npb24uamF2YTo1MSkgIiArCisgICAgICAgICAgICJhdCBvcmcuYXBhY2hlLnZlbG9jaXR5LnJ1bnRpbWUucGFyc2VyLm5vZGUuQVNUU2V0RGlyZWN0aXZlLnJlbmRlcihBU1RTZXREaXJlY3RpdmUuamF2YTo5NSkgIiArCisgICAgICAgICAgICJhdCBvcmcuYXBhY2hlLnZlbG9jaXR5LnJ1bnRpbWUucGFyc2VyLm5vZGUuQVNUQmxvY2sucmVuZGVyKEFTVEJsb2NrLmphdmE6NTUpICIgKworICAgICAgICAgICAiYXQgb3JnLmFwYWNoZS52ZWxvY2l0eS5ydW50aW1lLmRpcmVjdGl2ZS5Gb3JlYWNoLnJlbmRlcihGb3JlYWNoLmphdmE6MTY2KSAiICsKKyAgICAgICAgICAgImF0IG9yZy5hcGFjaGUudmVsb2NpdHkucnVudGltZS5wYXJzZXIubm9kZS5BU1REaXJlY3RpdmUucmVuZGVyKEFTVERpcmVjdGl2ZS5qYXZhOjExNCkgIiArCisgICAgICAgICAgICJhdCBvcmcuYXBhY2hlLnZlbG9jaXR5LnJ1bnRpbWUucGFyc2VyLm5vZGUuU2ltcGxlTm9kZS5yZW5kZXIoU2ltcGxlTm9kZS5qYXZhOjIzMCkgIiArCisgICAgICAgICAgICJhdCBvcmcuYXBhY2hlLnZlbG9jaXR5LnJ1bnRpbWUuZGlyZWN0aXZlLlZlbG9jaW1hY3JvUHJveHkucmVuZGVyKFZlbG9jaW1hY3JvUHJveHkuamF2YToxNzIpICIgKworICAgICAgICAgICAiYXQgb3JnLmFwYWNoZS52ZWxvY2l0eS5ydW50aW1lLnBhcnNlci5ub2RlLkFTVERpcmVjdGl2ZS5yZW5kZXIoQVNURGlyZWN0aXZlLmphdmE6MTE0KSAiICsKKyAgICAgICAgICAgImF0IG9yZy5hcGFjaGUudmVsb2NpdHkucnVudGltZS5wYXJzZXIubm9kZS5TaW1wbGVOb2RlLnJlbmRlcihTaW1wbGVOb2RlLmphdmE6MjMwKSAiICsKKyAgICAgICAgICAgImF0IG9yZy5hcGFjaGUudmVsb2NpdHkuVGVtcGxhdGUubWVyZ2UoVGVtcGxhdGUuamF2YToyNTYpIiwKKyAgICAgICAgICAgCisgICAgICAgICAgICJvcmcuYXBhY2hlLnZlbG9jaXR5LmV4Y2VwdGlvbi5NZXRob2RJbnZvY2F0aW9uRXhjZXB0aW9uXG4iICsKKyAgICAgICAgICAgImF0IG9yZy5hcGFjaGUudmVsb2NpdHkucnVudGltZS5wYXJzZXIubm9kZS5BU1RNZXRob2QuZXhlY3V0ZShBU1RNZXRob2QuamF2YToyNDYpXG4iICsKKyAgICAgICAgICAgImF0IG9yZy5hcGFjaGUudmVsb2NpdHkucnVudGltZS5wYXJzZXIubm9kZS5BU1RSZWZlcmVuY2UuZXhlY3V0ZShBU1RSZWZlcmVuY2UuamF2YToxNzUpXG4iICsKKyAgICAgICAgICAgImF0IG9yZy5hcGFjaGUudmVsb2NpdHkucnVudGltZS5wYXJzZXIubm9kZS5BU1RSZWZlcmVuY2UudmFsdWUoQVNUUmVmZXJlbmNlLmphdmE6MzI3KVxuIiArCisgICAgICAgICAgICJhdCBvcmcuYXBhY2hlLnZlbG9jaXR5LnJ1bnRpbWUucGFyc2VyLm5vZGUuQVNURXhwcmVzc2lvbi52YWx1ZShBU1RFeHByZXNzaW9uLmphdmE6NTEpXG4iICsKKyAgICAgICAgICAgImF0IG9yZy5hcGFjaGUudmVsb2NpdHkucnVudGltZS5wYXJzZXIubm9kZS5BU1RTZXREaXJlY3RpdmUucmVuZGVyKEFTVFNldERpcmVjdGl2ZS5qYXZhOjk1KVxuIiArCisgICAgICAgICAgICJhdCBvcmcuYXBhY2hlLnZlbG9jaXR5LnJ1bnRpbWUucGFyc2VyLm5vZGUuQVNUQmxvY2sucmVuZGVyKEFTVEJsb2NrLmphdmE6NTUpXG4iICsKKyAgICAgICAgICAgImF0IG9yZy5hcGFjaGUudmVsb2NpdHkucnVudGltZS5kaXJlY3RpdmUuRm9yZWFjaC5yZW5kZXIoRm9yZWFjaC5qYXZhOjE2NilcbiIgKworICAgICAgICAgICAiYXQgb3JnLmFwYWNoZS52ZWxvY2l0eS5ydW50aW1lLnBhcnNlci5ub2RlLkFTVERpcmVjdGl2ZS5yZW5kZXIoQVNURGlyZWN0aXZlLmphdmE6MTE0KVxuIiArCisgICAgICAgICAgICJhdCBvcmcuYXBhY2hlLnZlbG9jaXR5LnJ1bnRpbWUucGFyc2VyLm5vZGUuU2ltcGxlTm9kZS5yZW5kZXIoU2ltcGxlTm9kZS5qYXZhOjIzMClcbiIgKworICAgICAgICAgICAiYXQgb3JnLmFwYWNoZS52ZWxvY2l0eS5ydW50aW1lLmRpcmVjdGl2ZS5WZWxvY2ltYWNyb1Byb3h5LnJlbmRlcihWZWxvY2ltYWNyb1Byb3h5LmphdmE6MTcyKVxuIiArCisgICAgICAgICAgICJhdCBvcmcuYXBhY2hlLnZlbG9jaXR5LnJ1bnRpbWUucGFyc2VyLm5vZGUuQVNURGlyZWN0aXZlLnJlbmRlcihBU1REaXJlY3RpdmUuamF2YToxMTQpXG4iICsKKyAgICAgICAgICAgImF0IG9yZy5hcGFjaGUudmVsb2NpdHkucnVudGltZS5wYXJzZXIubm9kZS5TaW1wbGVOb2RlLnJlbmRlcihTaW1wbGVOb2RlLmphdmE6MjMwKVxuIiArCisgICAgICAgICAgICJhdCBvcmcuYXBhY2hlLnZlbG9jaXR5LlRlbXBsYXRlLm1lcmdlKFRlbXBsYXRlLmphdmE6MjU2KSIpOworICB9CisKKyAgcHJpdmF0ZSBzdGF0aWMgdm9pZCBkb1Rlc3QoQE5vbk5scyBTdHJpbmcgc3RhY2tUcmFjZSwgQE5vbk5scyBTdHJpbmcgZXhwZWN0ZWQpIHsKKyAgICBTdHJpbmcgbm9ybWFsaXplZCA9IFVuc2NyYW1ibGVEaWFsb2cubm9ybWFsaXplVGV4dChzdGFja1RyYWNlKTsKKyAgICBhc3NlcnRFcXVhbHMoZXhwZWN0ZWQsIG5vcm1hbGl6ZWQpOworICB9Cit9CmRpZmYgLS1naXQgYS9qYXZhL2phdmEtdGVzdHMvdGVzdFNyYy9jb20vaW50ZWxsaWovdW5zY3JhbWJsZS9VbnNjcmFtYmxlRGlhbG9nVGVzdC5qYXZhIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL3Vuc2NyYW1ibGUvVW5zY3JhbWJsZURpYWxvZ1Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNDk4MjNlCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9qYXZhLXRlc3RzL3Rlc3RTcmMvY29tL2ludGVsbGlqL3Vuc2NyYW1ibGUvVW5zY3JhbWJsZURpYWxvZ1Rlc3QuamF2YQpAQCAtMCwwICsxLDc5IEBACisvKgorICogQ29weXJpZ2h0IDIwMDAtMjAxMiBKZXRCcmFpbnMgcy5yLm8uCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworcGFja2FnZSBjb20uaW50ZWxsaWoudW5zY3JhbWJsZTsKKworaW1wb3J0IGNvbS5pbnRlbGxpai5KYXZhVGVzdFV0aWw7CitpbXBvcnQgY29tLmludGVsbGlqLmV4ZWN1dGlvbi51aS5SdW5Db250ZW50RGVzY3JpcHRvcjsKK2ltcG9ydCBjb20uaW50ZWxsaWoub3BlbmFwaS51dGlsLmlvLkZpbGVVdGlsOworaW1wb3J0IGNvbS5pbnRlbGxpai50ZXN0RnJhbWV3b3JrLmZpeHR1cmVzLkphdmFDb2RlSW5zaWdodEZpeHR1cmVUZXN0Q2FzZTsKKworaW1wb3J0IGphdmF4LnN3aW5nLio7CitpbXBvcnQgamF2YS5pby5GaWxlOworCisvKioKKyAqIEBhdXRob3IgRG1pdHJ5IEF2ZGVldgorICogICAgICAgICBEYXRlOiA0LzkvMTIKKyAqLworcHVibGljIGNsYXNzIFVuc2NyYW1ibGVEaWFsb2dUZXN0IGV4dGVuZHMgSmF2YUNvZGVJbnNpZ2h0Rml4dHVyZVRlc3RDYXNlIHsKKworICBwdWJsaWMgdm9pZCB0ZXN0U3RhY2t0cmFjZSgpIHRocm93cyBFeGNlcHRpb24geworICAgIFJ1bkNvbnRlbnREZXNjcmlwdG9yIGNvbnRlbnQgPSBzaG93VGV4dCgiIik7CisgICAgSWNvbiBpY29uID0gY29udGVudC5nZXRJY29uKCk7CisgICAgU3RyaW5nIG5hbWUgPSBjb250ZW50LmdldERpc3BsYXlOYW1lKCk7CisgICAgYXNzZXJ0RXF1YWxzKG51bGwsIGljb24pOworICAgIGFzc2VydEVxdWFscygiPFN0YWNrdHJhY2U+IiwgbmFtZSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0RXhjZXB0aW9uKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgUnVuQ29udGVudERlc2NyaXB0b3IgY29udGVudCA9IHNob3dUZXh0KCJqYXZhLmxhbmcuTnVsbFBvaW50ZXJFeGNlcHRpb25cbiIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiXHRhdCBjb20uaW50ZWxsaWoucHNpLmNzcy5yZXNvbHZlLmltcGwuWGh0bWxGaWxlSW5mby5maW5kT25lU3R5bGVTaGVldChYaHRtbEZpbGVJbmZvLmphdmE6MjkxKVxuIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJcdGF0IGNvbS5pbnRlbGxpai5wc2kuY3NzLnJlc29sdmUuaW1wbC5YaHRtbEZpbGVJbmZvLmdldFN0eWxlc2hlZXRzKFhodG1sRmlsZUluZm8uamF2YToxNzQpXG4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlx0YXQgY29tLmludGVsbGlqLnBzaS5jc3MucmVzb2x2ZS5pbXBsLlhodG1sRmlsZUluZm8uaW5pdFN0eWxlc2hlZXRzKFhodG1sRmlsZUluZm8uamF2YToxMTkpIik7CisgICAgYXNzZXJ0SWNvbigiZXhjZXB0aW9uLnBuZyIsIGNvbnRlbnQuZ2V0SWNvbigpKTsKKyAgICBhc3NlcnRFcXVhbHMoIk5QRSIsIGNvbnRlbnQuZ2V0RGlzcGxheU5hbWUoKSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0VGhyZWFkRHVtcCgpIHRocm93cyBFeGNlcHRpb24geworICAgIEZpbGUgZmlsZSA9IG5ldyBGaWxlKGdldFRlc3REYXRhUGF0aCgpICsgInRocmVhZGR1bXAudHh0Iik7CisgICAgU3RyaW5nIHMgPSBGaWxlVXRpbC5sb2FkRmlsZShmaWxlKTsKKyAgICBSdW5Db250ZW50RGVzY3JpcHRvciBjb250ZW50ID0gc2hvd1RleHQocyk7CisgICAgYXNzZXJ0SWNvbigidGhyZWFkZHVtcC5wbmciLCBjb250ZW50LmdldEljb24oKSk7CisgICAgYXNzZXJ0RXF1YWxzKCI8VGhyZWFkcz4iLCBjb250ZW50LmdldERpc3BsYXlOYW1lKCkpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdERlYWRsb2NrKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgRmlsZSBmaWxlID0gbmV3IEZpbGUoZ2V0VGVzdERhdGFQYXRoKCkgKyAiZGVhZGxvY2sudHh0Iik7CisgICAgU3RyaW5nIHMgPSBGaWxlVXRpbC5sb2FkRmlsZShmaWxlKTsKKyAgICBSdW5Db250ZW50RGVzY3JpcHRvciBjb250ZW50ID0gc2hvd1RleHQocyk7CisgICAgYXNzZXJ0SWNvbigia2lsbFByb2Nlc3MucG5nIiwgY29udGVudC5nZXRJY29uKCkpOworICAgIGFzc2VydEVxdWFscygiPERlYWRsb2NrPiIsIGNvbnRlbnQuZ2V0RGlzcGxheU5hbWUoKSk7CisgIH0KKworICBwcml2YXRlIFJ1bkNvbnRlbnREZXNjcmlwdG9yIHNob3dUZXh0KFN0cmluZyB1bnNjcmFtYmxlKSB7CisgICAgUnVuQ29udGVudERlc2NyaXB0b3IgZGVzY3JpcHRvciA9IFVuc2NyYW1ibGVEaWFsb2cuc2hvd1Vuc2NyYW1ibGVkVGV4dChudWxsLCAiZm9vIiwgZ2V0UHJvamVjdCgpLCB1bnNjcmFtYmxlKTsKKyAgICBhc3NlcnROb3ROdWxsKGRlc2NyaXB0b3IpOworICAgIHJldHVybiBkZXNjcmlwdG9yOworICB9CisKKyAgcHJpdmF0ZSBzdGF0aWMgdm9pZCBhc3NlcnRJY29uKFN0cmluZyBzLCBJY29uIGljb24pIHsKKyAgICBhc3NlcnRUcnVlKGljb24udG9TdHJpbmcoKS5jb250YWlucyhzKSk7CisgIH0KKworICBAT3ZlcnJpZGUKKyAgcHJvdGVjdGVkIFN0cmluZyBnZXRCYXNlUGF0aCgpIHsKKyAgICByZXR1cm4gSmF2YVRlc3RVdGlsLmdldFJlbGF0aXZlSmF2YVRlc3REYXRhUGF0aCgpICsgIi91bnNjcmFtYmxlLyI7CisgIH0KK30K